From c1b6267815293dbbbd6a603f590c77af256b0eb8 Mon Sep 17 00:00:00 2001 From: Aine Date: Tue, 20 Aug 2024 22:56:56 +0300 Subject: [PATCH] migrate to github --- .github/FUNDING.yml | 1 + .github/workflows/workflow.yml | 75 + .gitlab-ci.yml | 24 - .goreleaser.yaml | 44 + Dockerfile | 9 +- LICENSE.md | 647 +- cmd/{cmd.go => main.go} | 18 +- docs/docs.go | 36 + docs/swagger.json | 7 + docs/swagger.yaml | 4 + go.mod | 61 +- go.sum | 162 +- {bot => internal/bot}/access.go | 4 +- {bot => internal/bot}/activation.go | 0 {bot => internal/bot}/bot.go | 10 +- {bot => internal/bot}/command.go | 8 +- {bot => internal/bot}/command_admin.go | 8 +- {bot => internal/bot}/command_owner.go | 6 +- {bot => internal/bot}/config/bot.go | 2 +- {bot => internal/bot}/config/lists.go | 2 +- {bot => internal/bot}/config/manager.go | 4 +- {bot => internal/bot}/config/room.go | 6 +- {bot => internal/bot}/context.go | 0 {bot => internal/bot}/data.go | 2 +- {bot => internal/bot}/email.go | 8 +- {bot => internal/bot}/mutex.go | 0 {bot => internal/bot}/queue/manager.go | 6 +- {bot => internal/bot}/queue/queue.go | 0 {bot => internal/bot}/reaction.go | 2 +- {bot => internal/bot}/sync.go | 0 {config => internal/config}/config.go | 2 +- {config => internal/config}/defaults.go | 0 {config => internal/config}/types.go | 0 {email => internal/email}/email.go | 6 +- {email => internal/email}/options.go | 0 {email => internal/email}/utils.go | 0 {smtp => internal/smtp}/authserver.go | 0 {smtp => internal/smtp}/client.go | 0 {smtp => internal/smtp}/dnsbl.go | 3 +- {smtp => internal/smtp}/errors.go | 0 {smtp => internal/smtp}/listener.go | 0 {smtp => internal/smtp}/logger.go | 0 {smtp => internal/smtp}/manager.go | 4 +- {smtp => internal/smtp}/server.go | 2 +- {smtp => internal/smtp}/session.go | 6 +- {utils => internal/utils}/command.go | 0 {utils => internal/utils}/file.go | 0 {utils => internal/utils}/mail.go | 0 {utils => internal/utils}/mail_test.go | 0 {utils => internal/utils}/mutex.go | 0 {utils => internal/utils}/utils.go | 0 justfile | 35 +- vendor/github.com/KyleBanks/depth/.gitignore | 16 + vendor/github.com/KyleBanks/depth/.travis.yml | 9 + vendor/github.com/KyleBanks/depth/LICENSE | 21 + vendor/github.com/KyleBanks/depth/Makefile | 32 + vendor/github.com/KyleBanks/depth/README.md | 232 + vendor/github.com/KyleBanks/depth/depth.go | 129 + vendor/github.com/KyleBanks/depth/pkg.go | 184 + .../github.com/PuerkitoBio/purell/.gitignore | 5 + .../github.com/PuerkitoBio/purell/.travis.yml | 12 + vendor/github.com/PuerkitoBio/purell/LICENSE | 12 + .../github.com/PuerkitoBio/purell/README.md | 188 + .../github.com/PuerkitoBio/purell/purell.go | 379 + .../github.com/PuerkitoBio/urlesc/.travis.yml | 15 + vendor/github.com/PuerkitoBio/urlesc/LICENSE | 27 + .../github.com/PuerkitoBio/urlesc/README.md | 16 + .../github.com/PuerkitoBio/urlesc/urlesc.go | 180 + .../etkecc/go-env}/.golangci.yml | 0 .../env => github.com/etkecc/go-env}/LICENSE | 0 .../etkecc/go-env}/README.md | 0 .../etkecc/go-env}/dotenv/dotenv.go | 0 .../etkecc/go-env}/dotenv/parser.go | 0 .../env => github.com/etkecc/go-env}/env.go | 2 +- .../env => github.com/etkecc/go-env}/justfile | 0 .../etkecc/go-fswatcher}/LICENSE | 0 .../etkecc/go-fswatcher}/README.md | 0 .../etkecc/go-fswatcher}/fswatcher.go | 0 .../etkecc/go-fswatcher}/justfile | 2 +- .../etkecc/go-healthchecks}/v2/.gitignore | 0 .../etkecc/go-healthchecks}/v2/LICENSE | 0 .../etkecc/go-healthchecks/v2/README.md | 124 + .../etkecc/go-healthchecks}/v2/auto.go | 0 .../etkecc/go-healthchecks}/v2/client.go | 0 .../go-healthchecks}/v2/healthchecks.go | 0 .../etkecc/go-healthchecks}/v2/justfile | 0 .../etkecc/go-healthchecks}/v2/options.go | 0 .../github.com/etkecc/go-linkpearl/.gitignore | 1 + .../etkecc/go-linkpearl}/.golangci.yml | 0 .../etkecc/go-linkpearl}/LICENSE | 0 .../etkecc/go-linkpearl}/README.md | 4 +- .../etkecc/go-linkpearl}/accountdata.go | 0 .../etkecc/go-linkpearl}/config.go | 3 + .../etkecc/go-linkpearl}/crypter.go | 0 .../etkecc/go-linkpearl}/events.go | 0 .../etkecc/go-linkpearl}/justfile | 2 +- .../etkecc/go-linkpearl}/linkpearl.go | 6 + .../etkecc/go-linkpearl}/reactions.go | 0 .../etkecc/go-linkpearl}/send.go | 0 .../etkecc/go-linkpearl}/sync.go | 0 .../etkecc/go-linkpearl}/utils.go | 0 .../etkecc/go-mxidwc}/LICENSE | 0 .../etkecc/go-mxidwc}/README.md | 0 .../etkecc/go-mxidwc}/justfile | 2 +- .../etkecc/go-mxidwc}/parser.go | 0 .../etkecc/go-psd}/LICENSE | 0 .../etkecc/go-psd}/client.go | 0 vendor/github.com/etkecc/go-psd/justfile | 22 + .../etkecc/go-psd}/target.go | 0 .../etkecc/go-secgen}/LICENSE | 0 .../etkecc/go-secgen}/README.md | 0 vendor/github.com/etkecc/go-secgen/justfile | 22 + .../etkecc/go-secgen}/keypair.go | 0 .../etkecc/go-secgen}/password.go | 0 .../etkecc/go-trysmtp}/LICENSE | 1 + .../etkecc/go-trysmtp}/README.md | 0 .../etkecc/go-trysmtp}/client.go | 0 vendor/github.com/etkecc/go-trysmtp/justfile | 22 + .../etkecc/go-validator/v2}/.golangci.yml | 0 .../github.com/etkecc/go-validator/v2/LICENSE | 166 + .../etkecc/go-validator}/v2/README.md | 0 .../etkecc/go-validator}/v2/config.go | 0 .../etkecc/go-validator}/v2/domains.go | 0 .../etkecc/go-validator}/v2/emails.go | 2 +- .../etkecc/go-validator/v2}/justfile | 0 .../etkecc/go-validator}/v2/lookups.go | 0 .../etkecc/go-validator}/v2/validator.go | 0 .../gabriel-vasile/mimetype/README.md | 2 +- .../mimetype/internal/json/json.go | 27 +- .../mimetype/internal/magic/archive.go | 31 +- .../mimetype/internal/magic/ms_office.go | 66 +- .../mimetype/internal/magic/text.go | 2 +- .../mimetype/internal/magic/zip.go | 13 +- .../gabriel-vasile/mimetype/mimetype.gif | Bin 1343793 -> 0 bytes .../mimetype/supported_mimes.md | 2 +- .../gabriel-vasile/mimetype/tree.go | 2 +- .../go-openapi/jsonpointer/.editorconfig | 26 + .../go-openapi/jsonpointer/.gitignore | 1 + .../go-openapi/jsonpointer/.travis.yml | 15 + .../go-openapi/jsonpointer/CODE_OF_CONDUCT.md | 74 + .../github.com/go-openapi/jsonpointer/LICENSE | 202 + .../go-openapi/jsonpointer/README.md | 15 + .../go-openapi/jsonpointer/pointer.go | 390 + .../go-openapi/jsonreference/.gitignore | 1 + .../go-openapi/jsonreference/.golangci.yml | 41 + .../go-openapi/jsonreference/.travis.yml | 24 + .../jsonreference/CODE_OF_CONDUCT.md | 74 + .../go-openapi/jsonreference/LICENSE | 202 + .../go-openapi/jsonreference/README.md | 15 + .../go-openapi/jsonreference/reference.go | 156 + .../github.com/go-openapi/spec/.editorconfig | 26 + vendor/github.com/go-openapi/spec/.gitignore | 2 + .../github.com/go-openapi/spec/.golangci.yml | 42 + vendor/github.com/go-openapi/spec/.travis.yml | 31 + .../go-openapi/spec/CODE_OF_CONDUCT.md | 74 + vendor/github.com/go-openapi/spec/LICENSE | 202 + vendor/github.com/go-openapi/spec/README.md | 34 + .../github.com/go-openapi/spec/appveyor.yml | 32 + vendor/github.com/go-openapi/spec/bindata.go | 297 + vendor/github.com/go-openapi/spec/cache.go | 98 + .../go-openapi/spec/contact_info.go | 57 + vendor/github.com/go-openapi/spec/debug.go | 49 + vendor/github.com/go-openapi/spec/errors.go | 19 + vendor/github.com/go-openapi/spec/expander.go | 594 + .../go-openapi/spec/external_docs.go | 24 + vendor/github.com/go-openapi/spec/header.go | 203 + vendor/github.com/go-openapi/spec/info.go | 165 + vendor/github.com/go-openapi/spec/items.go | 234 + vendor/github.com/go-openapi/spec/license.go | 56 + .../github.com/go-openapi/spec/normalizer.go | 203 + .../go-openapi/spec/normalizer_nonwindows.go | 43 + .../go-openapi/spec/normalizer_windows.go | 154 + .../github.com/go-openapi/spec/operation.go | 397 + .../github.com/go-openapi/spec/parameter.go | 326 + .../github.com/go-openapi/spec/path_item.go | 87 + vendor/github.com/go-openapi/spec/paths.go | 97 + .../github.com/go-openapi/spec/properties.go | 91 + vendor/github.com/go-openapi/spec/ref.go | 193 + vendor/github.com/go-openapi/spec/resolver.go | 127 + vendor/github.com/go-openapi/spec/response.go | 152 + .../github.com/go-openapi/spec/responses.go | 127 + vendor/github.com/go-openapi/spec/schema.go | 646 + .../go-openapi/spec/schema_loader.go | 338 + .../go-openapi/spec/security_scheme.go | 170 + vendor/github.com/go-openapi/spec/spec.go | 78 + vendor/github.com/go-openapi/spec/swagger.go | 448 + vendor/github.com/go-openapi/spec/tag.go | 75 + .../github.com/go-openapi/spec/validations.go | 215 + .../github.com/go-openapi/spec/xml_object.go | 68 + .../github.com/go-openapi/swag/.editorconfig | 26 + vendor/github.com/go-openapi/swag/.gitignore | 4 + .../github.com/go-openapi/swag/.golangci.yml | 41 + vendor/github.com/go-openapi/swag/.travis.yml | 37 + .../go-openapi/swag/CODE_OF_CONDUCT.md | 74 + vendor/github.com/go-openapi/swag/LICENSE | 202 + vendor/github.com/go-openapi/swag/README.md | 21 + vendor/github.com/go-openapi/swag/convert.go | 208 + .../go-openapi/swag/convert_types.go | 730 + vendor/github.com/go-openapi/swag/doc.go | 32 + vendor/github.com/go-openapi/swag/json.go | 312 + vendor/github.com/go-openapi/swag/loading.go | 120 + .../github.com/go-openapi/swag/name_lexem.go | 87 + vendor/github.com/go-openapi/swag/net.go | 38 + vendor/github.com/go-openapi/swag/path.go | 59 + .../github.com/go-openapi/swag/post_go18.go | 23 + .../github.com/go-openapi/swag/post_go19.go | 67 + vendor/github.com/go-openapi/swag/pre_go18.go | 23 + vendor/github.com/go-openapi/swag/pre_go19.go | 69 + vendor/github.com/go-openapi/swag/split.go | 262 + vendor/github.com/go-openapi/swag/util.go | 385 + vendor/github.com/go-openapi/swag/yaml.go | 246 + vendor/github.com/josharian/intern/README.md | 5 + vendor/github.com/josharian/intern/intern.go | 44 + vendor/github.com/josharian/intern/license.md | 21 + vendor/github.com/mailru/easyjson/LICENSE | 7 + .../github.com/mailru/easyjson/buffer/pool.go | 278 + .../mailru/easyjson/jlexer/bytestostr.go | 24 + .../easyjson/jlexer/bytestostr_nounsafe.go | 13 + .../mailru/easyjson/jlexer/error.go | 15 + .../mailru/easyjson/jlexer/lexer.go | 1244 + .../mailru/easyjson/jwriter/writer.go | 405 + vendor/github.com/petermattis/goid/.gitignore | 4 + vendor/github.com/petermattis/goid/LICENSE | 202 + vendor/github.com/petermattis/goid/README.md | 4 + vendor/github.com/petermattis/goid/goid.go | 35 + .../github.com/petermattis/goid/goid_gccgo.go | 26 + .../github.com/petermattis/goid/goid_go1.3.c | 23 + .../github.com/petermattis/goid/goid_go1.3.go | 22 + .../github.com/petermattis/goid/goid_go1.4.go | 35 + .../github.com/petermattis/goid/goid_go1.4.s | 18 + .../github.com/petermattis/goid/goid_go1.5.go | 28 + .../github.com/petermattis/goid/goid_go1.5.s | 44 + .../github.com/petermattis/goid/goid_slow.go | 24 + .../petermattis/goid/runtime_gccgo_go1.8.go | 17 + .../petermattis/goid/runtime_go1.23.go | 38 + .../petermattis/goid/runtime_go1.5.go | 57 + .../petermattis/goid/runtime_go1.6.go | 43 + .../petermattis/goid/runtime_go1.9.go | 37 + vendor/github.com/swaggo/swag/.gitignore | 24 + vendor/github.com/swaggo/swag/.goreleaser.yml | 30 + .../github.com/swaggo/swag/CODE_OF_CONDUCT.md | 46 + vendor/github.com/swaggo/swag/CONTRIBUTING.md | 16 + vendor/github.com/swaggo/swag/Dockerfile | 30 + vendor/github.com/swaggo/swag/Makefile | 89 + .../swaggo/swag/PULL_REQUEST_TEMPLATE.md | 8 + vendor/github.com/swaggo/swag/README.md | 983 + vendor/github.com/swaggo/swag/README_pt.md | 968 + vendor/github.com/swaggo/swag/README_zh-CN.md | 770 + vendor/github.com/swaggo/swag/const.go | 567 + vendor/github.com/swaggo/swag/doc.go | 5 + vendor/github.com/swaggo/swag/enums.go | 13 + vendor/github.com/swaggo/swag/field_parser.go | 680 + vendor/github.com/swaggo/swag/formatter.go | 182 + vendor/github.com/swaggo/swag/generics.go | 432 + vendor/github.com/swaggo/swag/golist.go | 78 + vendor/github.com/swaggo/swag/license | 21 + vendor/github.com/swaggo/swag/operation.go | 1245 + vendor/github.com/swaggo/swag/package.go | 187 + vendor/github.com/swaggo/swag/packages.go | 574 + vendor/github.com/swaggo/swag/parser.go | 1835 + vendor/github.com/swaggo/swag/schema.go | 293 + vendor/github.com/swaggo/swag/spec.go | 64 + vendor/github.com/swaggo/swag/swagger.go | 72 + vendor/github.com/swaggo/swag/types.go | 105 + vendor/github.com/swaggo/swag/utils.go | 55 + vendor/github.com/swaggo/swag/version.go | 4 + vendor/github.com/tidwall/gjson/README.md | 8 +- vendor/github.com/tidwall/gjson/SYNTAX.md | 8 +- vendor/github.com/tidwall/gjson/gjson.go | 19 +- vendor/github.com/tidwall/gjson/logo.png | Bin 15936 -> 0 bytes .../gitlab.com/etke.cc/go/env/.gitlab-ci.yml | 15 - .../etke.cc/go/healthchecks/v2/README.md | 37 - .../etke.cc/go/mxidwc/.gitlab-ci.yml | 11 - vendor/gitlab.com/etke.cc/go/psd/LICENSE.md | 616 - vendor/gitlab.com/etke.cc/go/psd/README.md | 3 - .../etke.cc/go/secgen/.gitlab-ci.yml | 11 - .../etke.cc/go/validator/v2/.gitlab-ci.yml | 11 - .../go.mau.fi/util/confusable/confusables.go | 12633 ++ vendor/go.mau.fi/util/confusable/skeleton.go | 72 + vendor/go.mau.fi/util/dbutil/database.go | 23 +- .../util/dbutil/samples/01-sample.sql | 21 - .../util/dbutil/samples/04-notxn.sql | 4 - .../util/dbutil/samples/05-compat.sql | 3 - .../dbutil/samples/output/01-postgres.sql | 10 - .../util/dbutil/samples/output/01-sqlite3.sql | 9 - .../dbutil/samples/output/04-postgres.sql | 1 - .../util/dbutil/samples/output/04-sqlite3.sql | 1 - .../dbutil/samples/output/05-postgres.sql | 1 - .../util/dbutil/samples/output/05-sqlite3.sql | 1 - vendor/go.mau.fi/util/dbutil/transaction.go | 17 + vendor/go.mau.fi/util/exsync/event.go | 86 + vendor/go.mau.fi/util/exsync/returnonce.go | 25 + vendor/go.mau.fi/util/exsync/ringbuffer.go | 139 + vendor/go.mau.fi/util/exsync/syncmap.go | 94 + vendor/go.mau.fi/util/exsync/syncset.go | 83 + vendor/golang.org/x/crypto/LICENSE | 4 +- vendor/golang.org/x/crypto/ssh/keys.go | 44 +- vendor/golang.org/x/net/LICENSE | 4 +- vendor/golang.org/x/net/idna/go118.go | 13 + vendor/golang.org/x/net/idna/idna10.0.0.go | 769 + vendor/golang.org/x/net/idna/idna9.0.0.go | 717 + vendor/golang.org/x/net/idna/pre_go118.go | 11 + vendor/golang.org/x/net/idna/punycode.go | 217 + vendor/golang.org/x/net/idna/tables10.0.0.go | 4559 + vendor/golang.org/x/net/idna/tables11.0.0.go | 4653 + vendor/golang.org/x/net/idna/tables12.0.0.go | 4733 + vendor/golang.org/x/net/idna/tables13.0.0.go | 4959 + vendor/golang.org/x/net/idna/tables15.0.0.go | 5144 + vendor/golang.org/x/net/idna/tables9.0.0.go | 4486 + vendor/golang.org/x/net/idna/trie.go | 51 + vendor/golang.org/x/net/idna/trie12.0.0.go | 30 + vendor/golang.org/x/net/idna/trie13.0.0.go | 30 + vendor/golang.org/x/net/idna/trieval.go | 119 + vendor/golang.org/x/sys/LICENSE | 4 +- vendor/golang.org/x/sys/cpu/cpu.go | 2 + vendor/golang.org/x/sys/cpu/cpu_arm64.go | 12 + .../golang.org/x/sys/cpu/cpu_linux_arm64.go | 5 + vendor/golang.org/x/sys/unix/mkerrors.sh | 1 + .../golang.org/x/sys/unix/syscall_darwin.go | 12 + vendor/golang.org/x/sys/unix/syscall_linux.go | 1 + .../golang.org/x/sys/unix/syscall_openbsd.go | 1 + .../x/sys/unix/zerrors_darwin_amd64.go | 5 + .../x/sys/unix/zerrors_darwin_arm64.go | 5 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 38 +- .../x/sys/unix/zerrors_linux_386.go | 2 + .../x/sys/unix/zerrors_linux_amd64.go | 2 + .../x/sys/unix/zerrors_linux_arm.go | 2 + .../x/sys/unix/zerrors_linux_arm64.go | 2 + .../x/sys/unix/zerrors_linux_loong64.go | 2 + .../x/sys/unix/zerrors_linux_mips.go | 2 + .../x/sys/unix/zerrors_linux_mips64.go | 2 + .../x/sys/unix/zerrors_linux_mips64le.go | 2 + .../x/sys/unix/zerrors_linux_mipsle.go | 2 + .../x/sys/unix/zerrors_linux_ppc.go | 2 + .../x/sys/unix/zerrors_linux_ppc64.go | 2 + .../x/sys/unix/zerrors_linux_ppc64le.go | 2 + .../x/sys/unix/zerrors_linux_riscv64.go | 2 + .../x/sys/unix/zerrors_linux_s390x.go | 2 + .../x/sys/unix/zerrors_linux_sparc64.go | 2 + .../x/sys/unix/zsyscall_darwin_amd64.go | 48 + .../x/sys/unix/zsyscall_darwin_amd64.s | 10 + .../x/sys/unix/zsyscall_darwin_arm64.go | 48 + .../x/sys/unix/zsyscall_darwin_arm64.s | 10 + .../golang.org/x/sys/unix/zsyscall_linux.go | 16 + .../x/sys/unix/zsyscall_openbsd_386.go | 24 + .../x/sys/unix/zsyscall_openbsd_386.s | 5 + .../x/sys/unix/zsyscall_openbsd_amd64.go | 24 + .../x/sys/unix/zsyscall_openbsd_amd64.s | 5 + .../x/sys/unix/zsyscall_openbsd_arm.go | 24 + .../x/sys/unix/zsyscall_openbsd_arm.s | 5 + .../x/sys/unix/zsyscall_openbsd_arm64.go | 24 + .../x/sys/unix/zsyscall_openbsd_arm64.s | 5 + .../x/sys/unix/zsyscall_openbsd_mips64.go | 24 + .../x/sys/unix/zsyscall_openbsd_mips64.s | 5 + .../x/sys/unix/zsyscall_openbsd_ppc64.go | 24 + .../x/sys/unix/zsyscall_openbsd_ppc64.s | 6 + .../x/sys/unix/zsyscall_openbsd_riscv64.go | 24 + .../x/sys/unix/zsyscall_openbsd_riscv64.s | 5 + .../x/sys/unix/zsysnum_linux_386.go | 1 + .../x/sys/unix/zsysnum_linux_amd64.go | 1 + .../x/sys/unix/zsysnum_linux_arm.go | 1 + .../x/sys/unix/zsysnum_linux_arm64.go | 1 + .../x/sys/unix/zsysnum_linux_loong64.go | 1 + .../x/sys/unix/zsysnum_linux_mips.go | 1 + .../x/sys/unix/zsysnum_linux_mips64.go | 1 + .../x/sys/unix/zsysnum_linux_mips64le.go | 1 + .../x/sys/unix/zsysnum_linux_mipsle.go | 1 + .../x/sys/unix/zsysnum_linux_ppc.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 + .../x/sys/unix/zsysnum_linux_riscv64.go | 1 + .../x/sys/unix/zsysnum_linux_s390x.go | 1 + .../x/sys/unix/zsysnum_linux_sparc64.go | 1 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 10 +- .../x/sys/windows/security_windows.go | 2 +- .../x/sys/windows/syscall_windows.go | 12 +- .../golang.org/x/sys/windows/types_windows.go | 71 +- .../x/sys/windows/zsyscall_windows.go | 49 +- vendor/golang.org/x/text/LICENSE | 4 +- .../x/text/secure/bidirule/bidirule.go | 336 + .../x/text/secure/bidirule/bidirule10.0.0.go | 11 + .../x/text/secure/bidirule/bidirule9.0.0.go | 14 + vendor/golang.org/x/text/unicode/bidi/bidi.go | 359 + .../golang.org/x/text/unicode/bidi/bracket.go | 335 + vendor/golang.org/x/text/unicode/bidi/core.go | 1071 + vendor/golang.org/x/text/unicode/bidi/prop.go | 206 + .../x/text/unicode/bidi/tables10.0.0.go | 1815 + .../x/text/unicode/bidi/tables11.0.0.go | 1887 + .../x/text/unicode/bidi/tables12.0.0.go | 1923 + .../x/text/unicode/bidi/tables13.0.0.go | 1955 + .../x/text/unicode/bidi/tables15.0.0.go | 2042 + .../x/text/unicode/bidi/tables9.0.0.go | 1781 + .../golang.org/x/text/unicode/bidi/trieval.go | 48 + vendor/golang.org/x/text/width/kind_string.go | 28 + .../golang.org/x/text/width/tables10.0.0.go | 1328 + .../golang.org/x/text/width/tables11.0.0.go | 1340 + .../golang.org/x/text/width/tables12.0.0.go | 1360 + .../golang.org/x/text/width/tables13.0.0.go | 1361 + .../golang.org/x/text/width/tables15.0.0.go | 1367 + vendor/golang.org/x/text/width/tables9.0.0.go | 1296 + vendor/golang.org/x/text/width/transform.go | 239 + vendor/golang.org/x/text/width/trieval.go | 30 + vendor/golang.org/x/text/width/width.go | 206 + vendor/golang.org/x/tools/LICENSE | 27 + vendor/golang.org/x/tools/PATENTS | 22 + .../x/tools/go/ast/astutil/enclosing.go | 654 + .../x/tools/go/ast/astutil/imports.go | 485 + .../x/tools/go/ast/astutil/rewrite.go | 486 + .../golang.org/x/tools/go/ast/astutil/util.go | 19 + .../x/tools/go/buildutil/allpackages.go | 195 + .../x/tools/go/buildutil/fakecontext.go | 111 + .../x/tools/go/buildutil/overlay.go | 101 + .../golang.org/x/tools/go/buildutil/tags.go | 100 + .../golang.org/x/tools/go/buildutil/util.go | 209 + .../golang.org/x/tools/go/internal/cgo/cgo.go | 219 + .../x/tools/go/internal/cgo/cgo_pkgconfig.go | 42 + vendor/golang.org/x/tools/go/loader/doc.go | 202 + vendor/golang.org/x/tools/go/loader/loader.go | 1066 + vendor/golang.org/x/tools/go/loader/util.go | 123 + .../x/tools/internal/versions/constraint.go | 13 + .../internal/versions/constraint_go121.go | 14 + .../x/tools/internal/versions/features.go | 43 + .../x/tools/internal/versions/gover.go | 172 + .../x/tools/internal/versions/toolchain.go | 14 + .../internal/versions/toolchain_go119.go | 14 + .../internal/versions/toolchain_go120.go | 14 + .../internal/versions/toolchain_go121.go | 14 + .../x/tools/internal/versions/types.go | 19 + .../x/tools/internal/versions/types_go121.go | 30 + .../x/tools/internal/versions/types_go122.go | 41 + .../x/tools/internal/versions/versions.go | 57 + vendor/gopkg.in/yaml.v2/.travis.yml | 17 + vendor/gopkg.in/yaml.v2/LICENSE | 201 + vendor/gopkg.in/yaml.v2/LICENSE.libyaml | 31 + vendor/gopkg.in/yaml.v2/NOTICE | 13 + vendor/gopkg.in/yaml.v2/README.md | 133 + vendor/gopkg.in/yaml.v2/apic.go | 744 + vendor/gopkg.in/yaml.v2/decode.go | 815 + vendor/gopkg.in/yaml.v2/emitterc.go | 1685 + vendor/gopkg.in/yaml.v2/encode.go | 390 + vendor/gopkg.in/yaml.v2/parserc.go | 1095 + vendor/gopkg.in/yaml.v2/readerc.go | 412 + vendor/gopkg.in/yaml.v2/resolve.go | 258 + vendor/gopkg.in/yaml.v2/scannerc.go | 2711 + vendor/gopkg.in/yaml.v2/sorter.go | 113 + vendor/gopkg.in/yaml.v2/writerc.go | 26 + vendor/gopkg.in/yaml.v2/yaml.go | 478 + vendor/gopkg.in/yaml.v2/yamlh.go | 739 + vendor/gopkg.in/yaml.v2/yamlprivateh.go | 173 + vendor/maunium.net/go/mautrix/.editorconfig | 3 + vendor/maunium.net/go/mautrix/CHANGELOG.md | 19 + vendor/maunium.net/go/mautrix/client.go | 10 +- .../mautrix/crypto/attachment/attachments.go | 6 +- .../crypto/backup/encryptedsessiondata.go | 26 +- .../crypto/cryptohelper/cryptohelper.go | 8 +- .../go/mautrix/crypto/decryptmegolm.go | 15 +- .../go/mautrix/crypto/encryptmegolm.go | 23 +- .../go/mautrix/crypto/keysharing.go | 11 +- .../go/mautrix/crypto/sql_store.go | 2 +- .../go/mautrix/crypto/ssss/client.go | 2 +- .../go/mautrix/crypto/ssss/meta.go | 12 +- vendor/maunium.net/go/mautrix/error.go | 32 +- .../go/mautrix/event/accountdata.go | 20 + .../maunium.net/go/mautrix/event/content.go | 10 + .../maunium.net/go/mautrix/event/message.go | 9 +- .../go/mautrix/event/powerlevels.go | 26 +- .../maunium.net/go/mautrix/event/profile.go | 10 + .../maunium.net/go/mautrix/event/relations.go | 2 +- vendor/maunium.net/go/mautrix/event/state.go | 3 +- vendor/maunium.net/go/mautrix/event/type.go | 1 + .../go/mautrix/format/htmlparser.go | 30 +- .../maunium.net/go/mautrix/format/markdown.go | 13 +- .../go/mautrix/format/mdext/shortemphasis.go | 96 + .../go/mautrix/format/mdext/shortstrike.go | 76 + .../maunium.net/go/mautrix/id/contenturi.go | 19 + vendor/maunium.net/go/mautrix/requests.go | 11 + .../go/mautrix/sqlstatestore/statestore.go | 29 +- .../sqlstatestore/v00-latest-revision.sql | 8 +- .../v06-displayname-disambiguation.go | 55 + vendor/maunium.net/go/mautrix/statestore.go | 6 + vendor/maunium.net/go/mautrix/version.go | 2 +- vendor/maunium.net/go/mautrix/versions.go | 2 + vendor/modernc.org/libc/.gitignore | 1 + vendor/modernc.org/libc/Makefile | 31 +- vendor/modernc.org/libc/aliases.go | 2 +- vendor/modernc.org/libc/asm_386.s | 77 + vendor/modernc.org/libc/atomic.go | 8 +- vendor/modernc.org/libc/builder.json | 4 +- vendor/modernc.org/libc/builtin.go | 12 +- vendor/modernc.org/libc/ccgo.go | 2 +- vendor/modernc.org/libc/ccgo_linux_386.go | 157066 +++++++++++++++ vendor/modernc.org/libc/ccgo_linux_amd64.go | 212 +- vendor/modernc.org/libc/ccgo_linux_arm.go | 156683 ++++++++++++++ vendor/modernc.org/libc/ccgo_linux_arm64.go | 8 +- vendor/modernc.org/libc/ccgo_linux_loong64.go | 8 +- vendor/modernc.org/libc/ccgo_linux_ppc64le.go | 155118 ++++++++++++++ vendor/modernc.org/libc/ccgo_linux_riscv64.go | 154063 ++++++++++++++ vendor/modernc.org/libc/ccgo_linux_s390x.go | 154546 ++++++++++++++ vendor/modernc.org/libc/etc.go | 2 +- vendor/modernc.org/libc/etc_musl.go | 2 +- vendor/modernc.org/libc/ioutil_linux.go | 2 +- vendor/modernc.org/libc/libc.go | 2 +- vendor/modernc.org/libc/libc32.go | 3 +- vendor/modernc.org/libc/libc64.go | 8 +- vendor/modernc.org/libc/libc_386.go | 2 + vendor/modernc.org/libc/libc_arm.go | 2 + vendor/modernc.org/libc/libc_darwin.go | 8 + vendor/modernc.org/libc/libc_darwin_amd64.go | 12 +- vendor/modernc.org/libc/libc_freebsd.go | 66 +- vendor/modernc.org/libc/libc_freebsd_amd64.go | 58 + vendor/modernc.org/libc/libc_linux.go | 2 +- vendor/modernc.org/libc/libc_linux_386.go | 749 - vendor/modernc.org/libc/libc_linux_arm.go | 748 - vendor/modernc.org/libc/libc_linux_ppc64le.go | 769 - vendor/modernc.org/libc/libc_linux_riscv64.go | 712 - vendor/modernc.org/libc/libc_linux_s390x.go | 742 - vendor/modernc.org/libc/libc_loong64.go | 40 - vendor/modernc.org/libc/libc_musl.go | 4 +- .../modernc.org/libc/libc_musl_linux_386.go | 52 + .../modernc.org/libc/libc_musl_linux_arm.go | 70 + .../libc/libc_musl_linux_ppc64le.go | 12 + .../libc/libc_musl_linux_riscv64.go | 12 + .../modernc.org/libc/libc_musl_linux_s390x.go | 46 + vendor/modernc.org/libc/libc_ppc64le.go | 38 - vendor/modernc.org/libc/libc_riscv64.go | 38 - vendor/modernc.org/libc/libc_s390x.go | 38 - vendor/modernc.org/libc/libc_unix.go | 2 +- vendor/modernc.org/libc/libc_unix1.go | 2 +- vendor/modernc.org/libc/libc_windows.go | 92 +- vendor/modernc.org/libc/mem.go | 2 +- vendor/modernc.org/libc/mem_brk.go | 2 +- vendor/modernc.org/libc/mem_brk_musl.go | 2 +- vendor/modernc.org/libc/mem_musl.go | 2 +- vendor/modernc.org/libc/memgrind.go | 2 +- vendor/modernc.org/libc/memgrind_musl.go | 2 +- vendor/modernc.org/libc/musl_linux_386.go | 7146 - vendor/modernc.org/libc/musl_linux_arm.go | 7179 - vendor/modernc.org/libc/musl_linux_ppc64le.go | 7273 - vendor/modernc.org/libc/musl_linux_riscv64.go | 7258 - vendor/modernc.org/libc/musl_linux_s390x.go | 7229 - vendor/modernc.org/libc/musl_windows_386.go | 25 - vendor/modernc.org/libc/printf.go | 2 +- vendor/modernc.org/libc/pthread.go | 14 +- vendor/modernc.org/libc/pthread_all.go | 2 +- vendor/modernc.org/libc/pthread_musl.go | 20 +- vendor/modernc.org/libc/rtl.go | 2 +- vendor/modernc.org/libc/scanf.go | 2 +- vendor/modernc.org/libc/sync.go | 2 +- vendor/modernc.org/libc/syscall_musl.go | 2 +- vendor/modernc.org/sqlite/AUTHORS | 1 + vendor/modernc.org/sqlite/CONTRIBUTORS | 1 + vendor/modernc.org/sqlite/fcntl.go | 47 + vendor/modules.txt | 135 +- 553 files changed, 885295 insertions(+), 41690 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 .github/workflows/workflow.yml delete mode 100644 .gitlab-ci.yml create mode 100644 .goreleaser.yaml rename cmd/{cmd.go => main.go} (92%) create mode 100644 docs/docs.go create mode 100644 docs/swagger.json create mode 100644 docs/swagger.yaml rename {bot => internal/bot}/access.go (98%) rename {bot => internal/bot}/activation.go (100%) rename {bot => internal/bot}/bot.go (93%) rename {bot => internal/bot}/command.go (99%) rename {bot => internal/bot}/command_admin.go (98%) rename {bot => internal/bot}/command_owner.go (98%) rename {bot => internal/bot}/config/bot.go (97%) rename {bot => internal/bot}/config/lists.go (96%) rename {bot => internal/bot}/config/manager.go (96%) rename {bot => internal/bot}/config/room.go (97%) rename {bot => internal/bot}/context.go (100%) rename {bot => internal/bot}/data.go (98%) rename {bot => internal/bot}/email.go (99%) rename {bot => internal/bot}/mutex.go (100%) rename {bot => internal/bot}/queue/manager.go (92%) rename {bot => internal/bot}/queue/queue.go (100%) rename {bot => internal/bot}/reaction.go (97%) rename {bot => internal/bot}/sync.go (100%) rename {config => internal/config}/config.go (98%) rename {config => internal/config}/defaults.go (100%) rename {config => internal/config}/types.go (100%) rename {email => internal/email}/email.go (98%) rename {email => internal/email}/options.go (100%) rename {email => internal/email}/utils.go (100%) rename {smtp => internal/smtp}/authserver.go (100%) rename {smtp => internal/smtp}/client.go (100%) rename {smtp => internal/smtp}/dnsbl.go (99%) rename {smtp => internal/smtp}/errors.go (100%) rename {smtp => internal/smtp}/listener.go (100%) rename {smtp => internal/smtp}/logger.go (100%) rename {smtp => internal/smtp}/manager.go (98%) rename {smtp => internal/smtp}/server.go (94%) rename {smtp => internal/smtp}/session.go (98%) rename {utils => internal/utils}/command.go (100%) rename {utils => internal/utils}/file.go (100%) rename {utils => internal/utils}/mail.go (100%) rename {utils => internal/utils}/mail_test.go (100%) rename {utils => internal/utils}/mutex.go (100%) rename {utils => internal/utils}/utils.go (100%) create mode 100644 vendor/github.com/KyleBanks/depth/.gitignore create mode 100644 vendor/github.com/KyleBanks/depth/.travis.yml create mode 100644 vendor/github.com/KyleBanks/depth/LICENSE create mode 100644 vendor/github.com/KyleBanks/depth/Makefile create mode 100644 vendor/github.com/KyleBanks/depth/README.md create mode 100644 vendor/github.com/KyleBanks/depth/depth.go create mode 100644 vendor/github.com/KyleBanks/depth/pkg.go create mode 100644 vendor/github.com/PuerkitoBio/purell/.gitignore create mode 100644 vendor/github.com/PuerkitoBio/purell/.travis.yml create mode 100644 vendor/github.com/PuerkitoBio/purell/LICENSE create mode 100644 vendor/github.com/PuerkitoBio/purell/README.md create mode 100644 vendor/github.com/PuerkitoBio/purell/purell.go create mode 100644 vendor/github.com/PuerkitoBio/urlesc/.travis.yml create mode 100644 vendor/github.com/PuerkitoBio/urlesc/LICENSE create mode 100644 vendor/github.com/PuerkitoBio/urlesc/README.md create mode 100644 vendor/github.com/PuerkitoBio/urlesc/urlesc.go rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/.golangci.yml (100%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/README.md (100%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/dotenv/dotenv.go (100%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/dotenv/parser.go (100%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/env.go (97%) rename vendor/{gitlab.com/etke.cc/go/env => github.com/etkecc/go-env}/justfile (100%) rename vendor/{gitlab.com/etke.cc/go/fswatcher => github.com/etkecc/go-fswatcher}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/go/fswatcher => github.com/etkecc/go-fswatcher}/README.md (100%) rename vendor/{gitlab.com/etke.cc/go/fswatcher => github.com/etkecc/go-fswatcher}/fswatcher.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-fswatcher}/justfile (94%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/.gitignore (100%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/LICENSE (100%) create mode 100644 vendor/github.com/etkecc/go-healthchecks/v2/README.md rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/auto.go (100%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/client.go (100%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/healthchecks.go (100%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/justfile (100%) rename vendor/{gitlab.com/etke.cc/go/healthchecks => github.com/etkecc/go-healthchecks}/v2/options.go (100%) create mode 100644 vendor/github.com/etkecc/go-linkpearl/.gitignore rename vendor/{gitlab.com/etke.cc/go/validator/v2 => github.com/etkecc/go-linkpearl}/.golangci.yml (100%) rename vendor/{gitlab.com/etke.cc/go/mxidwc => github.com/etkecc/go-linkpearl}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/README.md (63%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/accountdata.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/config.go (97%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/crypter.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/events.go (100%) rename vendor/{gitlab.com/etke.cc/go/validator/v2 => github.com/etkecc/go-linkpearl}/justfile (94%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/linkpearl.go (95%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/reactions.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/send.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/sync.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-linkpearl}/utils.go (100%) rename vendor/{gitlab.com/etke.cc/go/secgen => github.com/etkecc/go-mxidwc}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/go/mxidwc => github.com/etkecc/go-mxidwc}/README.md (100%) rename vendor/{gitlab.com/etke.cc/go/psd => github.com/etkecc/go-mxidwc}/justfile (81%) rename vendor/{gitlab.com/etke.cc/go/mxidwc => github.com/etkecc/go-mxidwc}/parser.go (100%) rename vendor/{gitlab.com/etke.cc/go/trysmtp => github.com/etkecc/go-psd}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/go/psd => github.com/etkecc/go-psd}/client.go (100%) create mode 100644 vendor/github.com/etkecc/go-psd/justfile rename vendor/{gitlab.com/etke.cc/go/psd => github.com/etkecc/go-psd}/target.go (100%) rename vendor/{gitlab.com/etke.cc/go/validator/v2 => github.com/etkecc/go-secgen}/LICENSE (100%) rename vendor/{gitlab.com/etke.cc/go/secgen => github.com/etkecc/go-secgen}/README.md (100%) create mode 100644 vendor/github.com/etkecc/go-secgen/justfile rename vendor/{gitlab.com/etke.cc/go/secgen => github.com/etkecc/go-secgen}/keypair.go (100%) rename vendor/{gitlab.com/etke.cc/go/secgen => github.com/etkecc/go-secgen}/password.go (100%) rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-trysmtp}/LICENSE (99%) rename vendor/{gitlab.com/etke.cc/go/trysmtp => github.com/etkecc/go-trysmtp}/README.md (100%) rename vendor/{gitlab.com/etke.cc/go/trysmtp => github.com/etkecc/go-trysmtp}/client.go (100%) create mode 100644 vendor/github.com/etkecc/go-trysmtp/justfile rename vendor/{gitlab.com/etke.cc/linkpearl => github.com/etkecc/go-validator/v2}/.golangci.yml (100%) create mode 100644 vendor/github.com/etkecc/go-validator/v2/LICENSE rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/README.md (100%) rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/config.go (100%) rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/domains.go (100%) rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/emails.go (99%) rename vendor/{gitlab.com/etke.cc/go/secgen => github.com/etkecc/go-validator/v2}/justfile (100%) rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/lookups.go (100%) rename vendor/{gitlab.com/etke.cc/go/validator => github.com/etkecc/go-validator}/v2/validator.go (100%) delete mode 100644 vendor/github.com/gabriel-vasile/mimetype/mimetype.gif create mode 100644 vendor/github.com/go-openapi/jsonpointer/.editorconfig create mode 100644 vendor/github.com/go-openapi/jsonpointer/.gitignore create mode 100644 vendor/github.com/go-openapi/jsonpointer/.travis.yml create mode 100644 vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/go-openapi/jsonpointer/LICENSE create mode 100644 vendor/github.com/go-openapi/jsonpointer/README.md create mode 100644 vendor/github.com/go-openapi/jsonpointer/pointer.go create mode 100644 vendor/github.com/go-openapi/jsonreference/.gitignore create mode 100644 vendor/github.com/go-openapi/jsonreference/.golangci.yml create mode 100644 vendor/github.com/go-openapi/jsonreference/.travis.yml create mode 100644 vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/go-openapi/jsonreference/LICENSE create mode 100644 vendor/github.com/go-openapi/jsonreference/README.md create mode 100644 vendor/github.com/go-openapi/jsonreference/reference.go create mode 100644 vendor/github.com/go-openapi/spec/.editorconfig create mode 100644 vendor/github.com/go-openapi/spec/.gitignore create mode 100644 vendor/github.com/go-openapi/spec/.golangci.yml create mode 100644 vendor/github.com/go-openapi/spec/.travis.yml create mode 100644 vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/go-openapi/spec/LICENSE create mode 100644 vendor/github.com/go-openapi/spec/README.md create mode 100644 vendor/github.com/go-openapi/spec/appveyor.yml create mode 100644 vendor/github.com/go-openapi/spec/bindata.go create mode 100644 vendor/github.com/go-openapi/spec/cache.go create mode 100644 vendor/github.com/go-openapi/spec/contact_info.go create mode 100644 vendor/github.com/go-openapi/spec/debug.go create mode 100644 vendor/github.com/go-openapi/spec/errors.go create mode 100644 vendor/github.com/go-openapi/spec/expander.go create mode 100644 vendor/github.com/go-openapi/spec/external_docs.go create mode 100644 vendor/github.com/go-openapi/spec/header.go create mode 100644 vendor/github.com/go-openapi/spec/info.go create mode 100644 vendor/github.com/go-openapi/spec/items.go create mode 100644 vendor/github.com/go-openapi/spec/license.go create mode 100644 vendor/github.com/go-openapi/spec/normalizer.go create mode 100644 vendor/github.com/go-openapi/spec/normalizer_nonwindows.go create mode 100644 vendor/github.com/go-openapi/spec/normalizer_windows.go create mode 100644 vendor/github.com/go-openapi/spec/operation.go create mode 100644 vendor/github.com/go-openapi/spec/parameter.go create mode 100644 vendor/github.com/go-openapi/spec/path_item.go create mode 100644 vendor/github.com/go-openapi/spec/paths.go create mode 100644 vendor/github.com/go-openapi/spec/properties.go create mode 100644 vendor/github.com/go-openapi/spec/ref.go create mode 100644 vendor/github.com/go-openapi/spec/resolver.go create mode 100644 vendor/github.com/go-openapi/spec/response.go create mode 100644 vendor/github.com/go-openapi/spec/responses.go create mode 100644 vendor/github.com/go-openapi/spec/schema.go create mode 100644 vendor/github.com/go-openapi/spec/schema_loader.go create mode 100644 vendor/github.com/go-openapi/spec/security_scheme.go create mode 100644 vendor/github.com/go-openapi/spec/spec.go create mode 100644 vendor/github.com/go-openapi/spec/swagger.go create mode 100644 vendor/github.com/go-openapi/spec/tag.go create mode 100644 vendor/github.com/go-openapi/spec/validations.go create mode 100644 vendor/github.com/go-openapi/spec/xml_object.go create mode 100644 vendor/github.com/go-openapi/swag/.editorconfig create mode 100644 vendor/github.com/go-openapi/swag/.gitignore create mode 100644 vendor/github.com/go-openapi/swag/.golangci.yml create mode 100644 vendor/github.com/go-openapi/swag/.travis.yml create mode 100644 vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/go-openapi/swag/LICENSE create mode 100644 vendor/github.com/go-openapi/swag/README.md create mode 100644 vendor/github.com/go-openapi/swag/convert.go create mode 100644 vendor/github.com/go-openapi/swag/convert_types.go create mode 100644 vendor/github.com/go-openapi/swag/doc.go create mode 100644 vendor/github.com/go-openapi/swag/json.go create mode 100644 vendor/github.com/go-openapi/swag/loading.go create mode 100644 vendor/github.com/go-openapi/swag/name_lexem.go create mode 100644 vendor/github.com/go-openapi/swag/net.go create mode 100644 vendor/github.com/go-openapi/swag/path.go create mode 100644 vendor/github.com/go-openapi/swag/post_go18.go create mode 100644 vendor/github.com/go-openapi/swag/post_go19.go create mode 100644 vendor/github.com/go-openapi/swag/pre_go18.go create mode 100644 vendor/github.com/go-openapi/swag/pre_go19.go create mode 100644 vendor/github.com/go-openapi/swag/split.go create mode 100644 vendor/github.com/go-openapi/swag/util.go create mode 100644 vendor/github.com/go-openapi/swag/yaml.go create mode 100644 vendor/github.com/josharian/intern/README.md create mode 100644 vendor/github.com/josharian/intern/intern.go create mode 100644 vendor/github.com/josharian/intern/license.md create mode 100644 vendor/github.com/mailru/easyjson/LICENSE create mode 100644 vendor/github.com/mailru/easyjson/buffer/pool.go create mode 100644 vendor/github.com/mailru/easyjson/jlexer/bytestostr.go create mode 100644 vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go create mode 100644 vendor/github.com/mailru/easyjson/jlexer/error.go create mode 100644 vendor/github.com/mailru/easyjson/jlexer/lexer.go create mode 100644 vendor/github.com/mailru/easyjson/jwriter/writer.go create mode 100644 vendor/github.com/petermattis/goid/.gitignore create mode 100644 vendor/github.com/petermattis/goid/LICENSE create mode 100644 vendor/github.com/petermattis/goid/README.md create mode 100644 vendor/github.com/petermattis/goid/goid.go create mode 100644 vendor/github.com/petermattis/goid/goid_gccgo.go create mode 100644 vendor/github.com/petermattis/goid/goid_go1.3.c create mode 100644 vendor/github.com/petermattis/goid/goid_go1.3.go create mode 100644 vendor/github.com/petermattis/goid/goid_go1.4.go create mode 100644 vendor/github.com/petermattis/goid/goid_go1.4.s create mode 100644 vendor/github.com/petermattis/goid/goid_go1.5.go create mode 100644 vendor/github.com/petermattis/goid/goid_go1.5.s create mode 100644 vendor/github.com/petermattis/goid/goid_slow.go create mode 100644 vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go create mode 100644 vendor/github.com/petermattis/goid/runtime_go1.23.go create mode 100644 vendor/github.com/petermattis/goid/runtime_go1.5.go create mode 100644 vendor/github.com/petermattis/goid/runtime_go1.6.go create mode 100644 vendor/github.com/petermattis/goid/runtime_go1.9.go create mode 100644 vendor/github.com/swaggo/swag/.gitignore create mode 100644 vendor/github.com/swaggo/swag/.goreleaser.yml create mode 100644 vendor/github.com/swaggo/swag/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/swaggo/swag/CONTRIBUTING.md create mode 100644 vendor/github.com/swaggo/swag/Dockerfile create mode 100644 vendor/github.com/swaggo/swag/Makefile create mode 100644 vendor/github.com/swaggo/swag/PULL_REQUEST_TEMPLATE.md create mode 100644 vendor/github.com/swaggo/swag/README.md create mode 100644 vendor/github.com/swaggo/swag/README_pt.md create mode 100644 vendor/github.com/swaggo/swag/README_zh-CN.md create mode 100644 vendor/github.com/swaggo/swag/const.go create mode 100644 vendor/github.com/swaggo/swag/doc.go create mode 100644 vendor/github.com/swaggo/swag/enums.go create mode 100644 vendor/github.com/swaggo/swag/field_parser.go create mode 100644 vendor/github.com/swaggo/swag/formatter.go create mode 100644 vendor/github.com/swaggo/swag/generics.go create mode 100644 vendor/github.com/swaggo/swag/golist.go create mode 100644 vendor/github.com/swaggo/swag/license create mode 100644 vendor/github.com/swaggo/swag/operation.go create mode 100644 vendor/github.com/swaggo/swag/package.go create mode 100644 vendor/github.com/swaggo/swag/packages.go create mode 100644 vendor/github.com/swaggo/swag/parser.go create mode 100644 vendor/github.com/swaggo/swag/schema.go create mode 100644 vendor/github.com/swaggo/swag/spec.go create mode 100644 vendor/github.com/swaggo/swag/swagger.go create mode 100644 vendor/github.com/swaggo/swag/types.go create mode 100644 vendor/github.com/swaggo/swag/utils.go create mode 100644 vendor/github.com/swaggo/swag/version.go delete mode 100644 vendor/github.com/tidwall/gjson/logo.png delete mode 100644 vendor/gitlab.com/etke.cc/go/env/.gitlab-ci.yml delete mode 100644 vendor/gitlab.com/etke.cc/go/healthchecks/v2/README.md delete mode 100644 vendor/gitlab.com/etke.cc/go/mxidwc/.gitlab-ci.yml delete mode 100644 vendor/gitlab.com/etke.cc/go/psd/LICENSE.md delete mode 100644 vendor/gitlab.com/etke.cc/go/psd/README.md delete mode 100644 vendor/gitlab.com/etke.cc/go/secgen/.gitlab-ci.yml delete mode 100644 vendor/gitlab.com/etke.cc/go/validator/v2/.gitlab-ci.yml create mode 100644 vendor/go.mau.fi/util/confusable/confusables.go create mode 100644 vendor/go.mau.fi/util/confusable/skeleton.go delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/01-sample.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/04-notxn.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/05-compat.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/01-postgres.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/01-sqlite3.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/04-postgres.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/04-sqlite3.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/05-postgres.sql delete mode 100644 vendor/go.mau.fi/util/dbutil/samples/output/05-sqlite3.sql create mode 100644 vendor/go.mau.fi/util/exsync/event.go create mode 100644 vendor/go.mau.fi/util/exsync/returnonce.go create mode 100644 vendor/go.mau.fi/util/exsync/ringbuffer.go create mode 100644 vendor/go.mau.fi/util/exsync/syncmap.go create mode 100644 vendor/go.mau.fi/util/exsync/syncset.go create mode 100644 vendor/golang.org/x/net/idna/go118.go create mode 100644 vendor/golang.org/x/net/idna/idna10.0.0.go create mode 100644 vendor/golang.org/x/net/idna/idna9.0.0.go create mode 100644 vendor/golang.org/x/net/idna/pre_go118.go create mode 100644 vendor/golang.org/x/net/idna/punycode.go create mode 100644 vendor/golang.org/x/net/idna/tables10.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables11.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables12.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables13.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables15.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables9.0.0.go create mode 100644 vendor/golang.org/x/net/idna/trie.go create mode 100644 vendor/golang.org/x/net/idna/trie12.0.0.go create mode 100644 vendor/golang.org/x/net/idna/trie13.0.0.go create mode 100644 vendor/golang.org/x/net/idna/trieval.go create mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule.go create mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go create mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/bidi.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/bracket.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/core.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/prop.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/trieval.go create mode 100644 vendor/golang.org/x/text/width/kind_string.go create mode 100644 vendor/golang.org/x/text/width/tables10.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables11.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables12.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables13.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables15.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables9.0.0.go create mode 100644 vendor/golang.org/x/text/width/transform.go create mode 100644 vendor/golang.org/x/text/width/trieval.go create mode 100644 vendor/golang.org/x/text/width/width.go create mode 100644 vendor/golang.org/x/tools/LICENSE create mode 100644 vendor/golang.org/x/tools/PATENTS create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/enclosing.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/imports.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/rewrite.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/util.go create mode 100644 vendor/golang.org/x/tools/go/buildutil/allpackages.go create mode 100644 vendor/golang.org/x/tools/go/buildutil/fakecontext.go create mode 100644 vendor/golang.org/x/tools/go/buildutil/overlay.go create mode 100644 vendor/golang.org/x/tools/go/buildutil/tags.go create mode 100644 vendor/golang.org/x/tools/go/buildutil/util.go create mode 100644 vendor/golang.org/x/tools/go/internal/cgo/cgo.go create mode 100644 vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go create mode 100644 vendor/golang.org/x/tools/go/loader/doc.go create mode 100644 vendor/golang.org/x/tools/go/loader/loader.go create mode 100644 vendor/golang.org/x/tools/go/loader/util.go create mode 100644 vendor/golang.org/x/tools/internal/versions/constraint.go create mode 100644 vendor/golang.org/x/tools/internal/versions/constraint_go121.go create mode 100644 vendor/golang.org/x/tools/internal/versions/features.go create mode 100644 vendor/golang.org/x/tools/internal/versions/gover.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go119.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go120.go create mode 100644 vendor/golang.org/x/tools/internal/versions/toolchain_go121.go create mode 100644 vendor/golang.org/x/tools/internal/versions/types.go create mode 100644 vendor/golang.org/x/tools/internal/versions/types_go121.go create mode 100644 vendor/golang.org/x/tools/internal/versions/types_go122.go create mode 100644 vendor/golang.org/x/tools/internal/versions/versions.go create mode 100644 vendor/gopkg.in/yaml.v2/.travis.yml create mode 100644 vendor/gopkg.in/yaml.v2/LICENSE create mode 100644 vendor/gopkg.in/yaml.v2/LICENSE.libyaml create mode 100644 vendor/gopkg.in/yaml.v2/NOTICE create mode 100644 vendor/gopkg.in/yaml.v2/README.md create mode 100644 vendor/gopkg.in/yaml.v2/apic.go create mode 100644 vendor/gopkg.in/yaml.v2/decode.go create mode 100644 vendor/gopkg.in/yaml.v2/emitterc.go create mode 100644 vendor/gopkg.in/yaml.v2/encode.go create mode 100644 vendor/gopkg.in/yaml.v2/parserc.go create mode 100644 vendor/gopkg.in/yaml.v2/readerc.go create mode 100644 vendor/gopkg.in/yaml.v2/resolve.go create mode 100644 vendor/gopkg.in/yaml.v2/scannerc.go create mode 100644 vendor/gopkg.in/yaml.v2/sorter.go create mode 100644 vendor/gopkg.in/yaml.v2/writerc.go create mode 100644 vendor/gopkg.in/yaml.v2/yaml.go create mode 100644 vendor/gopkg.in/yaml.v2/yamlh.go create mode 100644 vendor/gopkg.in/yaml.v2/yamlprivateh.go create mode 100644 vendor/maunium.net/go/mautrix/event/profile.go create mode 100644 vendor/maunium.net/go/mautrix/format/mdext/shortemphasis.go create mode 100644 vendor/maunium.net/go/mautrix/format/mdext/shortstrike.go create mode 100644 vendor/maunium.net/go/mautrix/sqlstatestore/v06-displayname-disambiguation.go create mode 100644 vendor/modernc.org/libc/asm_386.s create mode 100644 vendor/modernc.org/libc/ccgo_linux_386.go create mode 100644 vendor/modernc.org/libc/ccgo_linux_arm.go create mode 100644 vendor/modernc.org/libc/ccgo_linux_ppc64le.go create mode 100644 vendor/modernc.org/libc/ccgo_linux_riscv64.go create mode 100644 vendor/modernc.org/libc/ccgo_linux_s390x.go delete mode 100644 vendor/modernc.org/libc/libc_linux_386.go delete mode 100644 vendor/modernc.org/libc/libc_linux_arm.go delete mode 100644 vendor/modernc.org/libc/libc_linux_ppc64le.go delete mode 100644 vendor/modernc.org/libc/libc_linux_riscv64.go delete mode 100644 vendor/modernc.org/libc/libc_linux_s390x.go delete mode 100644 vendor/modernc.org/libc/libc_loong64.go create mode 100644 vendor/modernc.org/libc/libc_musl_linux_386.go create mode 100644 vendor/modernc.org/libc/libc_musl_linux_arm.go create mode 100644 vendor/modernc.org/libc/libc_musl_linux_ppc64le.go create mode 100644 vendor/modernc.org/libc/libc_musl_linux_riscv64.go create mode 100644 vendor/modernc.org/libc/libc_musl_linux_s390x.go delete mode 100644 vendor/modernc.org/libc/libc_ppc64le.go delete mode 100644 vendor/modernc.org/libc/libc_riscv64.go delete mode 100644 vendor/modernc.org/libc/libc_s390x.go delete mode 100644 vendor/modernc.org/libc/musl_linux_386.go delete mode 100644 vendor/modernc.org/libc/musl_linux_arm.go delete mode 100644 vendor/modernc.org/libc/musl_linux_ppc64le.go delete mode 100644 vendor/modernc.org/libc/musl_linux_riscv64.go delete mode 100644 vendor/modernc.org/libc/musl_linux_s390x.go create mode 100644 vendor/modernc.org/sqlite/fcntl.go diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..bce7bfb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +liberapay: etkecc diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..641bb00 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,75 @@ +name: CI (main and tags) +on: + push: + branches: [ "main" ] + tags: [ "v*" ] + schedule: + - cron: '0 5 * * 1' +permissions: + checks: write + contents: write + packages: write + pull-requests: read +jobs: + lint-test: + name: Lint and Test + runs-on: ubuntu-latest + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + - uses: extractions/setup-just@v1 + - name: lint + uses: golangci/golangci-lint-action@v6 + with: + version: latest + - name: test + run: just test + + build-publish: + name: Build and Publish + runs-on: self-hosted + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to ghcr.io + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository }} + registry.etke.cc/${{ github.repository }} + tags: | + type=raw,value=latest,enable=${{ github.ref_name == 'main' }} + type=semver,pattern={{raw}} + - name: Build and push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + build-release: + name: Build and Release + runs-on: ubuntu-latest + if: ${{ startsWith(github.ref, 'refs/tags/') }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-go@v5 + - name: Release + uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 5b192d7..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,24 +0,0 @@ -stages: - - test - - release -default: - image: registry.gitlab.com/etke.cc/base/build -variables: - PLATFORMS: linux/arm64/v8,linux/amd64 - -test: - stage: test - script: - - just lint - - just test - cache: - key: ${CI_COMMIT_REF_SLUG} - paths: - - /root/cache/ - -docker: - stage: release - only: ['main', 'tags'] - services: ['docker:dind'] - script: - - just login docker diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..6e5d84e --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,44 @@ +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +# vim: set ts=2 sw=2 tw=0 fo=cnqoj + +version: 2 + +before: + hooks: + - go mod tidy + +builds: + - env: + - CGO_ENABLED=0 + ldflags: + - -extldflags "-static" + flags: + - -tags=timetzdata,goolm + main: ./cmd/ + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - arm64 + +archives: + - format: tar.gz + name_template: >- + {{ .ProjectName }}_ + {{- title .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + {{- if .Arm }}v{{ .Arm }}{{ end }} + format_overrides: + - goos: windows + format: zip + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^test:" diff --git a/Dockerfile b/Dockerfile index 843d2f4..bf16330 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,15 @@ -FROM registry.gitlab.com/etke.cc/base/build AS builder +FROM ghcr.io/etkecc/base/build AS builder -WORKDIR /postmoogle +WORKDIR /app COPY . . RUN just build -FROM registry.gitlab.com/etke.cc/base/app +FROM scratch ENV POSTMOOGLE_DB_DSN /data/postmoogle.db -COPY --from=builder /postmoogle/postmoogle /bin/postmoogle +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=builder /app/postmoogle /bin/postmoogle USER app diff --git a/LICENSE.md b/LICENSE.md index 810fce6..251dd27 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,200 +1,192 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 +# GNU AFFERO GENERAL PUBLIC LICENSE - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +Version 3, 19 November 2007 - Preamble +Copyright (C) 2007 Free Software Foundation, Inc. + - The GNU General Public License is a free, copyleft license for -software and other kinds of works. +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +## Preamble - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and +The precise terms and conditions for copying, distribution and modification follow. - TERMS AND CONDITIONS +## TERMS AND CONDITIONS - 0. Definitions. +### 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. +"This License" refers to version 3 of the GNU Affero General Public +License. - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. - A "covered work" means either the unmodified Program or a work based +A "covered work" means either the unmodified Program or a work based on the Program. - To "propagate" a work means to do anything with it that, without +To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, +computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If +work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - 1. Source Code. +### 1. Source Code. - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. - A "Standard Interface" means an interface that either is an official +A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - The "System Libraries" of an executable work include anything, other +The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A +implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - The "Corresponding Source" for a work in object code form means all +The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's +control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source +which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. - The Corresponding Source for a work in source code form is that -same work. +The Corresponding Source for a work in source code form is that same +work. - 2. Basic Permissions. +### 2. Basic Permissions. - All rights granted under this License are granted for the term of +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your +content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - No covered work shall be deemed part of an effective technological +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. - 4. Conveying Verbatim Copies. +### 4. Conveying Verbatim Copies. - You may convey verbatim copies of the Program's source code as you +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any @@ -202,59 +194,56 @@ non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - You may charge any price or no price for each copy that you convey, +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - 5. Conveying Modified Source Versions. +### 5. Conveying Modified Source Versions. - You may convey a work based on the Program, or the modifications to +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: +terms of section 4, provided that you also meet all of these +conditions: - a) The work must carry prominent notices stating that you modified +- a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no + regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display +- d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. - A compilation of a covered work with other separate and independent +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work +beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - 6. Conveying Non-Source Forms. +### 6. Conveying Non-Source Forms. - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: - a) Convey the object code in, or embodied in, a physical product +- a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product +- b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product @@ -263,196 +252,190 @@ in one of these ways: product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - - d) Convey the object code by offering access from a designated +- d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the + Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. - If you convey an object code work under this section in, or with, or +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply +by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. - Corresponding Source conveyed, and Installation Information provided, +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - 7. Additional Terms. +### 7. Additional Terms. - "Additional permissions" are terms that supplement the terms of this +"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions +that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - When you convey a copy of a covered work, you may at your option +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: - a) Disclaiming warranty or limiting liability differently from the +- a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or +- b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains +restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - If you add terms to a covered work in accord with this section, you +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. - 8. Termination. +### 8. Termination. - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. - Moreover, your license from a particular copyright holder is +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - Termination of your rights under this section does not terminate the +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently +this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - 9. Acceptance Not Required for Having Copies. +### 9. Acceptance Not Required for Having Copies. - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, +to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - 10. Automatic Licensing of Downstream Recipients. +### 10. Automatic Licensing of Downstream Recipients. - Each time you convey a covered work, the recipient automatically +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible +propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - An "entity transaction" is a transaction transferring control of an +An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered +organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could @@ -460,43 +443,43 @@ give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - 11. Patents. +### 11. Patents. - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For +consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - Each contributor grants you a non-exclusive, worldwide, royalty-free +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - In the following three paragraphs, a "patent license" is any express +In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a +sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - If you convey a covered work, knowingly relying on a patent license, +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, @@ -504,13 +487,13 @@ then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have +license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - If, pursuant to or in connection with a single transaction or +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify @@ -518,104 +501,116 @@ or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. - Nothing in this License shall be construed as excluding or limiting +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - 12. No Surrender of Others' Freedom. +### 12. No Surrender of Others' Freedom. - If conditions are imposed on you (whether by court order, agreement or +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. - 13. Use with the GNU Affero General Public License. +### 13. Remote Network Interaction; Use with the GNU General Public License. - Notwithstanding any other provision of this License, you have +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. - 14. Revised Versions of this License. +### 14. Revised Versions of this License. - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - 15. Disclaimer of Warranty. +### 15. Disclaimer of Warranty. - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. - 16. Limitation of Liability. +### 16. Limitation of Liability. - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - 17. Interpretation of Sections 15 and 16. +### 17. Interpretation of Sections 15 and 16. - If the disclaimer of warranty and limitation of liability provided +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - END OF TERMS AND CONDITIONS +END OF TERMS AND CONDITIONS diff --git a/cmd/cmd.go b/cmd/main.go similarity index 92% rename from cmd/cmd.go rename to cmd/main.go index e563c94..ce2f725 100644 --- a/cmd/cmd.go +++ b/cmd/main.go @@ -11,21 +11,21 @@ import ( "time" zlogsentry "github.com/archdx/zerolog-sentry" + "github.com/etkecc/go-healthchecks/v2" + "github.com/etkecc/go-linkpearl" + "github.com/etkecc/go-psd" "github.com/getsentry/sentry-go" _ "github.com/lib/pq" "github.com/mileusna/crontab" "github.com/rs/zerolog" - "gitlab.com/etke.cc/go/healthchecks/v2" - "gitlab.com/etke.cc/go/psd" - "gitlab.com/etke.cc/linkpearl" _ "modernc.org/sqlite" - "gitlab.com/etke.cc/postmoogle/bot" - mxconfig "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/bot/queue" - "gitlab.com/etke.cc/postmoogle/config" - "gitlab.com/etke.cc/postmoogle/smtp" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot" + mxconfig "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/bot/queue" + "github.com/etkecc/postmoogle/internal/config" + "github.com/etkecc/postmoogle/internal/smtp" + "github.com/etkecc/postmoogle/internal/utils" ) var ( diff --git a/docs/docs.go b/docs/docs.go new file mode 100644 index 0000000..6676994 --- /dev/null +++ b/docs/docs.go @@ -0,0 +1,36 @@ +// Package docs Code generated by swaggo/swag. DO NOT EDIT +package docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "contact": {}, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": {} +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "", + Host: "", + BasePath: "", + Schemes: []string{}, + Title: "", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/docs/swagger.json b/docs/swagger.json new file mode 100644 index 0000000..ec416cd --- /dev/null +++ b/docs/swagger.json @@ -0,0 +1,7 @@ +{ + "swagger": "2.0", + "info": { + "contact": {} + }, + "paths": {} +} \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml new file mode 100644 index 0000000..b64379c --- /dev/null +++ b/docs/swagger.yaml @@ -0,0 +1,4 @@ +info: + contact: {} +paths: {} +swagger: "2.0" diff --git a/go.mod b/go.mod index 35db680..2c60047 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,24 @@ -module gitlab.com/etke.cc/postmoogle +module github.com/etkecc/postmoogle -go 1.21.0 +go 1.22 + +toolchain go1.23.0 require ( github.com/archdx/zerolog-sentry v1.8.4 github.com/emersion/go-msgauth v0.6.8 github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43 github.com/emersion/go-smtp v0.21.3 + github.com/etkecc/go-env v1.2.1 + github.com/etkecc/go-fswatcher v1.0.1 + github.com/etkecc/go-healthchecks/v2 v2.2.1 + github.com/etkecc/go-linkpearl v0.0.0-20240820090551-8c5298047259 + github.com/etkecc/go-mxidwc v1.0.1 + github.com/etkecc/go-psd v0.0.0-20240820090455-a55658424f56 + github.com/etkecc/go-secgen v1.2.1 + github.com/etkecc/go-validator/v2 v2.2.2 github.com/fsnotify/fsnotify v1.7.0 - github.com/gabriel-vasile/mimetype v1.4.4 + github.com/gabriel-vasile/mimetype v1.4.5 github.com/getsentry/sentry-go v0.28.1 github.com/jhillyerd/enmime v1.2.0 github.com/kvannotten/mailstrip v0.0.0-20200711213611-0002f5c0467e @@ -17,51 +27,56 @@ require ( github.com/mileusna/crontab v1.2.0 github.com/raja/argon2pw v1.0.2-0.20210910183755-a391af63bd39 github.com/rs/zerolog v1.33.0 - gitlab.com/etke.cc/go/env v1.2.0 - gitlab.com/etke.cc/go/fswatcher v1.0.0 - gitlab.com/etke.cc/go/healthchecks/v2 v2.2.0 - gitlab.com/etke.cc/go/mxidwc v1.0.0 - gitlab.com/etke.cc/go/psd v1.1.2 - gitlab.com/etke.cc/go/secgen v1.2.0 - gitlab.com/etke.cc/go/validator/v2 v2.2.0 - gitlab.com/etke.cc/linkpearl v0.0.0-20240716084747-f2a547f02d54 - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 - maunium.net/go/mautrix v0.19.0 - modernc.org/sqlite v1.31.1 + github.com/swaggo/swag v1.16.3 + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa + maunium.net/go/mautrix v0.20.0 + modernc.org/sqlite v1.32.0 ) require ( blitiri.com.ar/go/spf v1.5.1 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/etkecc/go-trysmtp v1.1.4 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.19.15 // indirect github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect - github.com/tidwall/gjson v1.17.1 // indirect + github.com/tidwall/gjson v1.17.3 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect github.com/yuin/goldmark v1.7.4 // indirect - gitlab.com/etke.cc/go/trysmtp v1.1.3 // indirect - go.mau.fi/util v0.6.0 // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect - modernc.org/gc/v3 v3.0.0-20240722195230-4a140ff9c08e // indirect - modernc.org/libc v1.55.4 // indirect + go.mau.fi/util v0.7.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/tools v0.24.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect + modernc.org/libc v1.59.9 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect diff --git a/go.sum b/go.sum index 5d81aa9..24405a5 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,12 @@ blitiri.com.ar/go/spf v1.5.1 h1:CWUEasc44OrANJD8CzceRnRn1Jv0LttY68cYym2/pbE= blitiri.com.ar/go/spf v1.5.1/go.mod h1:E71N92TfL4+Yyd5lpKuE9CAF2pd4JrUq1xQfkTxoNdk= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/archdx/zerolog-sentry v1.8.4 h1:Thxb8Crm+JaV1kcAF2KEcpKwkMtQaj+GazhktFgGTUc= github.com/archdx/zerolog-sentry v1.8.4/go.mod h1:XrFHGe1CH5DQk/XSySu/IJSi5C9XR6+zpc97zVf/c4c= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= @@ -9,6 +15,8 @@ github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx2 github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a h1:MISbI8sU/PSK/ztvmWKFcI7UGb5/HQT7B+i3a2myKgI= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a/go.mod h1:2GxOXOlEPAMFPfp014mK1SWq8G8BN8o7/dfYqJrVGn8= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -20,14 +28,42 @@ github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43 h1:hH4PQfOndHDlpz github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-smtp v0.21.3 h1:7uVwagE8iPYE48WhNsng3RRpCUpFvNl39JGNSIyGVMY= github.com/emersion/go-smtp v0.21.3/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= +github.com/etkecc/go-env v1.2.1 h1:b/mIa8D1d9hc3rI8h5bEtBHsnKkBZ6UbmYPog3QIPTU= +github.com/etkecc/go-env v1.2.1/go.mod h1:yTs1DWEsllAZYA417r4V+OmMuYinGXtBzKkLGNvCv5c= +github.com/etkecc/go-fswatcher v1.0.1 h1:n9hqtjzTS3ETb9hcZe1EqYA1lkkhlzZlztu3hXwFDQc= +github.com/etkecc/go-fswatcher v1.0.1/go.mod h1:O5TODJ9z6Qb7X+snqHbB+F0Pah6G497Wdg0SFE/UYpE= +github.com/etkecc/go-healthchecks/v2 v2.2.1 h1:veGW/EoFuF4mB9ylHhCB4C98MY2kjl3++wZ7g6KRSXg= +github.com/etkecc/go-healthchecks/v2 v2.2.1/go.mod h1:IowWGN4F6By6z0eh63+639OscylgtdvT9ITjfN6hnZA= +github.com/etkecc/go-linkpearl v0.0.0-20240820090551-8c5298047259 h1:dPTbAGkvxpMeCW3umXW08x+V9cWZTrxJVB8Ci5/Xxww= +github.com/etkecc/go-linkpearl v0.0.0-20240820090551-8c5298047259/go.mod h1:1t/feey8th1xSrJaa3CqYzrmc4yUUv/YPv7djgI7aQY= +github.com/etkecc/go-mxidwc v1.0.1 h1:t4Kq3FxSlQjt1i7RpzE5q3cOWjJ0vrTzzGZRSpgh8mg= +github.com/etkecc/go-mxidwc v1.0.1/go.mod h1:WFlntcH4mdual/gNi6X7a6rSJERNuLjdrwM3K/tucQA= +github.com/etkecc/go-psd v0.0.0-20240820090455-a55658424f56 h1:WgHl5bTrf+3RqSrSXJiE4S2tkW+UKnMbWR4K+nWEh48= +github.com/etkecc/go-psd v0.0.0-20240820090455-a55658424f56/go.mod h1:D+viZZ4CaSlJLz2E99eoLkO8Xvb6Q5/1jEgQ3tbVY0U= +github.com/etkecc/go-secgen v1.2.1 h1:z0z9TFsjH+FEhvB7AJASTdp3v/fsgFaHP+rrB/cMKWg= +github.com/etkecc/go-secgen v1.2.1/go.mod h1:luevmnqMsxEb0oBUGaxht8lVjgPWHj2qESSTkf+ID5k= +github.com/etkecc/go-trysmtp v1.1.4 h1:qI1DezcjV9bFnPpnDGFguldyb6fD5GdlllsFPwCySt4= +github.com/etkecc/go-trysmtp v1.1.4/go.mod h1:J4zQu+kgM37xQY148wUz0Dm6y+YhtzMghAv/AaXt0sQ= +github.com/etkecc/go-validator/v2 v2.2.2 h1:W3f7ktYJRpKh+qF3OlMWo1EmTAGDDCIdKFQQy1VqQWA= +github.com/etkecc/go-validator/v2 v2.2.2/go.mod h1:ZbgSUczvrg15hps+eTw8GmCGjiepgiaHyv7TM9W+Oes= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= -github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= +github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= +github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= github.com/getsentry/sentry-go v0.28.1 h1:zzaSm/vHmGllRM6Tpx1492r0YDzauArdBfkJRtY6P5k= github.com/getsentry/sentry-go v0.28.1/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -45,10 +81,22 @@ github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQykt github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jhillyerd/enmime v1.2.0 h1:dIu1IPEymQgoT2dzuB//ttA/xcV40NMPpQtmd4wslHk= github.com/jhillyerd/enmime v1.2.0/go.mod h1:FRFuUPCLh8PByQv+8xRcLO9QHqaqTqreYhopv5eyk4I= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kvannotten/mailstrip v0.0.0-20200711213611-0002f5c0467e h1:GD97grZITUgTUFuCmGuOJ//4a/XW85Y4LcoSvqoeyz4= github.com/kvannotten/mailstrip v0.0.0-20200711213611-0002f5c0467e/go.mod h1:Soh3wPUKGQ476v2WNt/mArcSE2GkSai7EK1yLoGqnhM= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 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.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -68,8 +116,12 @@ github.com/mileusna/crontab v1.2.0 h1:x9ZmE2A4p6CDqMEGQ+GbqsNtnmbdmWMQYShdQu8Lvr github.com/mileusna/crontab v1.2.0/go.mod h1:dbns64w/u3tUnGZGf8pAa76ZqOfeBX4olW4U1ZwExmc= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +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/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -88,11 +140,16 @@ github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= +github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= -github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= +github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -102,65 +159,62 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= -gitlab.com/etke.cc/go/env v1.2.0 h1:mPCk9GTQn5D/HQ9T+nP5OuCSyidgmllDM4OnV9n9UNY= -gitlab.com/etke.cc/go/env v1.2.0/go.mod h1:e1l4RM5MA1sc0R1w/RBDAESWRwgo5cOG9gx8BKUn2C4= -gitlab.com/etke.cc/go/fswatcher v1.0.0 h1:uyiVn+1NVCjOLZrXSZouIDBDZBMwVipS4oYuvAFpPzo= -gitlab.com/etke.cc/go/fswatcher v1.0.0/go.mod h1:MqTOxyhXfvaVZQUL9/Ksbl2ow1PTBVu3eqIldvMq0RE= -gitlab.com/etke.cc/go/healthchecks/v2 v2.2.0 h1:7Y0qm8OAqeJApDNNfGSeA6WFF60q/394gMKinZNbSWE= -gitlab.com/etke.cc/go/healthchecks/v2 v2.2.0/go.mod h1:DdNc1ESc1cAgOdsIwxxV+RUWgn6ewCpfFKzLuF0kSfc= -gitlab.com/etke.cc/go/mxidwc v1.0.0 h1:6EAlJXvs3nU4RaMegYq6iFlyVvLw7JZYnZmNCGMYQP0= -gitlab.com/etke.cc/go/mxidwc v1.0.0/go.mod h1:E/0kh45SAN9+ntTG0cwkAEKdaPxzvxVmnjwivm9nmz8= -gitlab.com/etke.cc/go/psd v1.1.2 h1:nplS8Sc8tV+G/zq0QtC0pfW97EI8v3ZiSoYOYKCTbjY= -gitlab.com/etke.cc/go/psd v1.1.2/go.mod h1:6b444NOkXlZ1n7WLCNazAkOC2bHPgqgfB9earThwKPk= -gitlab.com/etke.cc/go/secgen v1.2.0 h1:qpV7rUn5Rs6eWxAmbGG/idPCOgsN4HggGmSZ+1R/L70= -gitlab.com/etke.cc/go/secgen v1.2.0/go.mod h1:v5L07AIXtNpC/miYiK0TMIn+ZKbiYrTRiXTw6qTL6pw= -gitlab.com/etke.cc/go/trysmtp v1.1.3 h1:e2EHond77onMaecqCg6mWumffTSEf+ycgj88nbeefDI= -gitlab.com/etke.cc/go/trysmtp v1.1.3/go.mod h1:lOO7tTdAE0a3ETV3wN3GJ7I1Tqewu7YTpPWaOmTteV0= -gitlab.com/etke.cc/go/validator/v2 v2.2.0 h1:XgB8XikOc3WzzFyimpZOt3p+kbHny98sGkXtp2tSwzQ= -gitlab.com/etke.cc/go/validator/v2 v2.2.0/go.mod h1:NBY0v4ZqR1GQpuojf369EW2oS/4Ll1uIs9YTgijRbaY= -gitlab.com/etke.cc/linkpearl v0.0.0-20240716084747-f2a547f02d54 h1:+ihVGkVBBWlRyugJ3dvmA1rwqC9jFXrUZSslkYFN0Gw= -gitlab.com/etke.cc/linkpearl v0.0.0-20240716084747-f2a547f02d54/go.mod h1:R/uxbOoajQVxm0qCbWYfox6B9uqnM5R0/KMJcLSr6zM= -go.mau.fi/util v0.6.0 h1:W6SyB3Bm/GjenQ5iq8Z8WWdN85Gy2xS6L0wmnR7SVjg= -go.mau.fi/util v0.6.0/go.mod h1:ljYdq3sPfpICc3zMU+/mHV/sa4z0nKxc67hSBwnrk8U= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +go.mau.fi/util v0.7.0 h1:l31z+ivrSQw+cv/9eFebEqtQW2zhxivGypn+JT0h/ws= +go.mau.fi/util v0.7.0/go.mod h1:bWYreIoTULL/UiRbZdfddPh7uWDFW5yX4YCv5FB0eE0= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= -golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +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.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= 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-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/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= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -maunium.net/go/mautrix v0.19.0 h1:67eSJWam93mw44Q0/1SiOG7zQzXMUknUv5UaWkrODDU= -maunium.net/go/mautrix v0.19.0/go.mod h1:UE+mSQ4sDUuJMbjN0aB9EjQSGgXd48AzMvZ6+QJV1k8= +maunium.net/go/mautrix v0.20.0 h1:bzQnVQR+LvQxV1YlAr7BSWCS8AWa0Ov0lyPhbbChM0o= +maunium.net/go/mautrix v0.20.0/go.mod h1:V725r8w7oddsS7CxnmTAp634A4nwJCFY7J3jiTMUz2c= modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.20.4 h1:3pPOlMcblnu5CBU3w1BFtepwBnLezGjPYTH8xBeYZM8= -modernc.org/ccgo/v4 v4.20.4/go.mod h1:meYiLeaGpKQmHBw8roW4DXLkDvusG+MD7LJ/kYyAouU= +modernc.org/ccgo/v4 v4.20.7 h1:skrinQsjxWfvj6nbC3ztZPJy+NuwmB3hV9zX/pthNYQ= +modernc.org/ccgo/v4 v4.20.7/go.mod h1:UOkI3JSG2zT4E2ioHlncSOZsXbuDCZLvPi3uMlZT5GY= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.4.3 h1:Ik4ZcMbC7aY4ZDPUhzXVXi7GMub9QcXLTfXn3mWpNw8= -modernc.org/gc/v2 v2.4.3/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= -modernc.org/gc/v3 v3.0.0-20240722195230-4a140ff9c08e h1:WPC4v0rNIFb2PY+nBBEEKyugPPRHPzUgyN3xZPpGK58= -modernc.org/gc/v3 v3.0.0-20240722195230-4a140ff9c08e/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= -modernc.org/libc v1.55.4 h1:iWzZ96v1Iut2Sm4lEp0yzFde20M9zpcI0wY3DFcb+8g= -modernc.org/libc v1.55.4/go.mod h1:GPuVtbWvXUo590z/xfVIQcOqnugb1WovSfMJWMe0ZfA= +modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= +modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.59.9 h1:k+nNDDakwipimgmJ1D9H466LhFeSkaPPycAs1OZiDmY= +modernc.org/libc v1.59.9/go.mod h1:EY/egGEU7Ju66eU6SBqCNYaFUDuc4npICkMWnU5EE3A= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= @@ -169,8 +223,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.31.1 h1:XVU0VyzxrYHlBhIs1DiEgSl0ZtdnPtbLVy8hSkzxGrs= -modernc.org/sqlite v1.31.1/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= +modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s= +modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/bot/access.go b/internal/bot/access.go similarity index 98% rename from bot/access.go rename to internal/bot/access.go index 14f2d5b..494e862 100644 --- a/bot/access.go +++ b/internal/bot/access.go @@ -7,11 +7,11 @@ import ( "strings" "time" + "github.com/etkecc/go-mxidwc" "github.com/raja/argon2pw" - "gitlab.com/etke.cc/go/mxidwc" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/utils" ) func parseMXIDpatterns(patterns []string, defaultPattern string) ([]*regexp.Regexp, error) { diff --git a/bot/activation.go b/internal/bot/activation.go similarity index 100% rename from bot/activation.go rename to internal/bot/activation.go diff --git a/bot/bot.go b/internal/bot/bot.go similarity index 93% rename from bot/bot.go rename to internal/bot/bot.go index ca633d3..31fbcc0 100644 --- a/bot/bot.go +++ b/internal/bot/bot.go @@ -7,15 +7,15 @@ import ( "regexp" "sync" + "github.com/etkecc/go-linkpearl" + "github.com/etkecc/go-psd" "github.com/rs/zerolog" - "gitlab.com/etke.cc/go/psd" - "gitlab.com/etke.cc/linkpearl" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/bot/queue" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/bot/queue" + "github.com/etkecc/postmoogle/internal/utils" ) // Mailboxes config diff --git a/bot/command.go b/internal/bot/command.go similarity index 99% rename from bot/command.go rename to internal/bot/command.go index 412e9ea..f0081fd 100644 --- a/bot/command.go +++ b/internal/bot/command.go @@ -7,14 +7,14 @@ import ( "strings" "time" - "gitlab.com/etke.cc/linkpearl" + "github.com/etkecc/go-linkpearl" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/format" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/email" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/email" + "github.com/etkecc/postmoogle/internal/utils" ) const ( diff --git a/bot/command_admin.go b/internal/bot/command_admin.go similarity index 98% rename from bot/command_admin.go rename to internal/bot/command_admin.go index 0c21585..7ac6cdd 100644 --- a/bot/command_admin.go +++ b/internal/bot/command_admin.go @@ -9,12 +9,12 @@ import ( "strings" "time" - "gitlab.com/etke.cc/go/secgen" - "gitlab.com/etke.cc/linkpearl" + "github.com/etkecc/go-linkpearl" + "github.com/etkecc/go-secgen" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/utils" ) func (b *Bot) sendMailboxes(ctx context.Context) { diff --git a/bot/command_owner.go b/internal/bot/command_owner.go similarity index 98% rename from bot/command_owner.go rename to internal/bot/command_owner.go index 2d76c1e..7293542 100644 --- a/bot/command_owner.go +++ b/internal/bot/command_owner.go @@ -6,12 +6,12 @@ import ( "strconv" "strings" + "github.com/etkecc/go-linkpearl" "github.com/raja/argon2pw" - "gitlab.com/etke.cc/linkpearl" "golang.org/x/exp/slices" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/utils" ) func (b *Bot) runStop(ctx context.Context) { diff --git a/bot/config/bot.go b/internal/bot/config/bot.go similarity index 97% rename from bot/config/bot.go rename to internal/bot/config/bot.go index c0adca0..6de9219 100644 --- a/bot/config/bot.go +++ b/internal/bot/config/bot.go @@ -5,7 +5,7 @@ import ( "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/utils" ) // account data key diff --git a/bot/config/lists.go b/internal/bot/config/lists.go similarity index 96% rename from bot/config/lists.go rename to internal/bot/config/lists.go index 3f4c3db..72df1e5 100644 --- a/bot/config/lists.go +++ b/internal/bot/config/lists.go @@ -5,7 +5,7 @@ import ( "sort" "time" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/utils" ) // account data keys diff --git a/bot/config/manager.go b/internal/bot/config/manager.go similarity index 96% rename from bot/config/manager.go rename to internal/bot/config/manager.go index 780cb0f..693ee79 100644 --- a/bot/config/manager.go +++ b/internal/bot/config/manager.go @@ -3,11 +3,11 @@ package config import ( "context" + "github.com/etkecc/go-linkpearl" "github.com/rs/zerolog" - "gitlab.com/etke.cc/linkpearl" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/utils" ) // Manager of configs diff --git a/bot/config/room.go b/internal/bot/config/room.go similarity index 97% rename from bot/config/room.go rename to internal/bot/config/room.go index d555304..271c7f2 100644 --- a/bot/config/room.go +++ b/internal/bot/config/room.go @@ -5,9 +5,9 @@ import ( "net/url" "strings" - "gitlab.com/etke.cc/go/healthchecks/v2" - "gitlab.com/etke.cc/postmoogle/email" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/go-healthchecks/v2" + "github.com/etkecc/postmoogle/internal/email" + "github.com/etkecc/postmoogle/internal/utils" ) // account data key diff --git a/bot/context.go b/internal/bot/context.go similarity index 100% rename from bot/context.go rename to internal/bot/context.go diff --git a/bot/data.go b/internal/bot/data.go similarity index 98% rename from bot/data.go rename to internal/bot/data.go index 3882b50..240b496 100644 --- a/bot/data.go +++ b/internal/bot/data.go @@ -7,7 +7,7 @@ import ( "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/bot/config" + "github.com/etkecc/postmoogle/internal/bot/config" ) func (b *Bot) addRoom(roomID id.RoomID, cfg config.Room) { diff --git a/bot/email.go b/internal/bot/email.go similarity index 99% rename from bot/email.go rename to internal/bot/email.go index c2c03bf..0a381e6 100644 --- a/bot/email.go +++ b/internal/bot/email.go @@ -8,14 +8,14 @@ import ( "strings" "time" - "gitlab.com/etke.cc/linkpearl" + "github.com/etkecc/go-linkpearl" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/format" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/email" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/email" + "github.com/etkecc/postmoogle/internal/utils" ) const ( diff --git a/bot/mutex.go b/internal/bot/mutex.go similarity index 100% rename from bot/mutex.go rename to internal/bot/mutex.go diff --git a/bot/queue/manager.go b/internal/bot/queue/manager.go similarity index 92% rename from bot/queue/manager.go rename to internal/bot/queue/manager.go index a2004ae..272afeb 100644 --- a/bot/queue/manager.go +++ b/internal/bot/queue/manager.go @@ -4,11 +4,11 @@ import ( "context" "net/url" + "github.com/etkecc/go-linkpearl" "github.com/rs/zerolog" - "gitlab.com/etke.cc/linkpearl" - "gitlab.com/etke.cc/postmoogle/bot/config" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/bot/config" + "github.com/etkecc/postmoogle/internal/utils" ) const ( diff --git a/bot/queue/queue.go b/internal/bot/queue/queue.go similarity index 100% rename from bot/queue/queue.go rename to internal/bot/queue/queue.go diff --git a/bot/reaction.go b/internal/bot/reaction.go similarity index 97% rename from bot/reaction.go rename to internal/bot/reaction.go index 5f113a0..d2d8bef 100644 --- a/bot/reaction.go +++ b/internal/bot/reaction.go @@ -3,7 +3,7 @@ package bot import ( "context" - "gitlab.com/etke.cc/linkpearl" + "github.com/etkecc/go-linkpearl" ) var supportedReactions = map[string]string{ diff --git a/bot/sync.go b/internal/bot/sync.go similarity index 100% rename from bot/sync.go rename to internal/bot/sync.go diff --git a/config/config.go b/internal/config/config.go similarity index 98% rename from config/config.go rename to internal/config/config.go index bd361aa..1066171 100644 --- a/config/config.go +++ b/internal/config/config.go @@ -3,7 +3,7 @@ package config import ( "time" - "gitlab.com/etke.cc/go/env" + "github.com/etkecc/go-env" ) const prefix = "postmoogle" diff --git a/config/defaults.go b/internal/config/defaults.go similarity index 100% rename from config/defaults.go rename to internal/config/defaults.go diff --git a/config/types.go b/internal/config/types.go similarity index 100% rename from config/types.go rename to internal/config/types.go diff --git a/email/email.go b/internal/email/email.go similarity index 98% rename from email/email.go rename to internal/email/email.go index 8ea0870..ad26573 100644 --- a/email/email.go +++ b/internal/email/email.go @@ -7,15 +7,15 @@ import ( "strings" "github.com/emersion/go-msgauth/dkim" + "github.com/etkecc/go-linkpearl" + "github.com/etkecc/go-psd" "github.com/jhillyerd/enmime" "github.com/kvannotten/mailstrip" - "gitlab.com/etke.cc/go/psd" - "gitlab.com/etke.cc/linkpearl" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/format" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/utils" + "github.com/etkecc/postmoogle/internal/utils" ) // Email object diff --git a/email/options.go b/internal/email/options.go similarity index 100% rename from email/options.go rename to internal/email/options.go diff --git a/email/utils.go b/internal/email/utils.go similarity index 100% rename from email/utils.go rename to internal/email/utils.go diff --git a/smtp/authserver.go b/internal/smtp/authserver.go similarity index 100% rename from smtp/authserver.go rename to internal/smtp/authserver.go diff --git a/smtp/client.go b/internal/smtp/client.go similarity index 100% rename from smtp/client.go rename to internal/smtp/client.go diff --git a/smtp/dnsbl.go b/internal/smtp/dnsbl.go similarity index 99% rename from smtp/dnsbl.go rename to internal/smtp/dnsbl.go index 40a9c0a..bd0c45e 100644 --- a/smtp/dnsbl.go +++ b/internal/smtp/dnsbl.go @@ -11,7 +11,8 @@ import ( "time" "github.com/rs/zerolog" - "gitlab.com/etke.cc/postmoogle/utils" + + "github.com/etkecc/postmoogle/internal/utils" ) const ( diff --git a/smtp/errors.go b/internal/smtp/errors.go similarity index 100% rename from smtp/errors.go rename to internal/smtp/errors.go diff --git a/smtp/listener.go b/internal/smtp/listener.go similarity index 100% rename from smtp/listener.go rename to internal/smtp/listener.go diff --git a/smtp/logger.go b/internal/smtp/logger.go similarity index 100% rename from smtp/logger.go rename to internal/smtp/logger.go diff --git a/smtp/manager.go b/internal/smtp/manager.go similarity index 98% rename from smtp/manager.go rename to internal/smtp/manager.go index 64f81e1..af1baf4 100644 --- a/smtp/manager.go +++ b/internal/smtp/manager.go @@ -9,12 +9,12 @@ import ( "time" "github.com/emersion/go-smtp" + "github.com/etkecc/go-fswatcher" "github.com/fsnotify/fsnotify" "github.com/rs/zerolog" - "gitlab.com/etke.cc/go/fswatcher" "maunium.net/go/mautrix/id" - "gitlab.com/etke.cc/postmoogle/email" + "github.com/etkecc/postmoogle/internal/email" ) type Config struct { diff --git a/smtp/server.go b/internal/smtp/server.go similarity index 94% rename from smtp/server.go rename to internal/smtp/server.go index a43573b..cef3be9 100644 --- a/smtp/server.go +++ b/internal/smtp/server.go @@ -7,7 +7,7 @@ import ( "github.com/getsentry/sentry-go" "github.com/rs/zerolog" - "gitlab.com/etke.cc/postmoogle/email" + "github.com/etkecc/postmoogle/internal/email" ) type mailServer struct { diff --git a/smtp/session.go b/internal/smtp/session.go similarity index 98% rename from smtp/session.go rename to internal/smtp/session.go index b59a4f5..bff0946 100644 --- a/smtp/session.go +++ b/internal/smtp/session.go @@ -12,11 +12,11 @@ import ( "github.com/emersion/go-msgauth/dkim" "github.com/emersion/go-sasl" "github.com/emersion/go-smtp" + "github.com/etkecc/go-validator/v2" + "github.com/etkecc/postmoogle/internal/email" + "github.com/etkecc/postmoogle/internal/utils" "github.com/jhillyerd/enmime" "github.com/rs/zerolog" - "gitlab.com/etke.cc/go/validator/v2" - "gitlab.com/etke.cc/postmoogle/email" - "gitlab.com/etke.cc/postmoogle/utils" "maunium.net/go/mautrix/id" ) diff --git a/utils/command.go b/internal/utils/command.go similarity index 100% rename from utils/command.go rename to internal/utils/command.go diff --git a/utils/file.go b/internal/utils/file.go similarity index 100% rename from utils/file.go rename to internal/utils/file.go diff --git a/utils/mail.go b/internal/utils/mail.go similarity index 100% rename from utils/mail.go rename to internal/utils/mail.go diff --git a/utils/mail_test.go b/internal/utils/mail_test.go similarity index 100% rename from utils/mail_test.go rename to internal/utils/mail_test.go diff --git a/utils/mutex.go b/internal/utils/mutex.go similarity index 100% rename from utils/mutex.go rename to internal/utils/mutex.go diff --git a/utils/utils.go b/internal/utils/utils.go similarity index 100% rename from utils/utils.go rename to internal/utils/utils.go diff --git a/justfile b/justfile index ab7719a..a72adcd 100644 --- a/justfile +++ b/justfile @@ -1,10 +1,3 @@ -platforms := env_var_or_default("PLATFORMS", "linux/amd64") -tag := if env_var_or_default("CI_COMMIT_TAG", "main") == "main" { "latest" } else { env_var_or_default("CI_COMMIT_TAG", "latest") } -repo := trim_end_match(replace(replace_regex(env_var_or_default("CI_REPOSITORY_URL", `git remote get-url origin`), ".*@|", ""), ":", "/"), ".git") -project := file_name(repo) -gitlab_image := "registry." + repo + ":" + tag -etke_image := replace(gitlab_image, "gitlab.com", "etke.cc") - # show help by default default: @just --list --justfile {{ justfile() }} @@ -16,20 +9,24 @@ update *flags: go mod vendor # run linter -lint: +lint: && swagger golangci-lint run ./... # automatically fix liter issues -lintfix: +lintfix: && swaggerfix golangci-lint run --fix ./... # generate mocks mocks: @mockery --all --inpackage --testonly --exclude vendor -# run cpu or mem profiler UI -profile type: - go tool pprof -http 127.0.0.1:8000 .pprof/{{ type }}.prof +# generate swagger docks +swagger: + @swag init --dir ./cmd,./ + +# automatically fix swagger issues +swaggerfix: && swagger + @swag fmt --dir ./cmd,./ # run unit tests test packages="./...": @@ -39,18 +36,8 @@ test packages="./...": # run app run: - @CGO_ENABLED=0 go run -ldflags '-extldflags "-static"' -tags timetzdata,goolm ./cmd + @go run ./cmd # build app build: - CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -tags timetzdata,goolm -v -o {{ project }} ./cmd - -# docker login -login: - @docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - -# docker build -docker: - docker buildx create --use - docker buildx build --pull --provenance=false --platform {{ platforms }} --push -t {{ gitlab_image }} -t {{ etke_image }} . - docker buildx rm + CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -tags timetzdata,goolm -v -o postmoogle ./cmd diff --git a/vendor/github.com/KyleBanks/depth/.gitignore b/vendor/github.com/KyleBanks/depth/.gitignore new file mode 100644 index 0000000..8c2e171 --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/.gitignore @@ -0,0 +1,16 @@ +# Binaries for programs and plugins +*.exe +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 +.glide/ + +bin/ diff --git a/vendor/github.com/KyleBanks/depth/.travis.yml b/vendor/github.com/KyleBanks/depth/.travis.yml new file mode 100644 index 0000000..ab506f9 --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/.travis.yml @@ -0,0 +1,9 @@ +language: go +sudo: false +go: + - 1.9.x +before_install: + - go get github.com/mattn/goveralls +script: + - $HOME/gopath/bin/goveralls -service=travis-ci +#script: go test $(go list ./... | grep -v vendor/) diff --git a/vendor/github.com/KyleBanks/depth/LICENSE b/vendor/github.com/KyleBanks/depth/LICENSE new file mode 100644 index 0000000..070b426 --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Kyle Banks + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/KyleBanks/depth/Makefile b/vendor/github.com/KyleBanks/depth/Makefile new file mode 100644 index 0000000..acd35bb --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/Makefile @@ -0,0 +1,32 @@ +VERSION = 1.2.1 + +RELEASE_PKG = ./cmd/depth +INSTALL_PKG = $(RELEASE_PKG) + + +# Remote includes require 'mmake' +# github.com/tj/mmake +include github.com/KyleBanks/make/go/install +include github.com/KyleBanks/make/go/sanity +include github.com/KyleBanks/make/go/release +include github.com/KyleBanks/make/go/bench +include github.com/KyleBanks/make/git/precommit + +# Runs a number of depth commands as examples of what's possible. +example: | install + depth github.com/KyleBanks/depth/cmd/depth strings ./ + + depth -internal strings + + depth -json github.com/KyleBanks/depth/cmd/depth + + depth -test github.com/KyleBanks/depth/cmd/depth + + depth -test -internal strings + + depth -test -internal -max 3 strings + + depth . + + depth ./cmd/depth +.PHONY: example diff --git a/vendor/github.com/KyleBanks/depth/README.md b/vendor/github.com/KyleBanks/depth/README.md new file mode 100644 index 0000000..0de954f --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/README.md @@ -0,0 +1,232 @@ +# depth + +[![GoDoc](https://godoc.org/github.com/KyleBanks/depth?status.svg)](https://godoc.org/github.com/KyleBanks/depth)  +[![Build Status](https://travis-ci.org/KyleBanks/depth.svg?branch=master)](https://travis-ci.org/KyleBanks/depth)  +[![Go Report Card](https://goreportcard.com/badge/github.com/KyleBanks/depth)](https://goreportcard.com/report/github.com/KyleBanks/depth)  +[![Coverage Status](https://coveralls.io/repos/github/KyleBanks/depth/badge.svg?branch=master)](https://coveralls.io/github/KyleBanks/depth?branch=master) + +`depth` is tool to retrieve and visualize Go source code dependency trees. + +## Install + +Download the appropriate binary for your platform from the [Releases](https://github.com/KyleBanks/depth/releases) page, or: + +```sh +go get github.com/KyleBanks/depth/cmd/depth +``` + +## Usage + +`depth` can be used as a standalone command-line application, or as a package within your own project. + +### Command-Line + +Simply execute `depth` with one or more package names to visualize. You can use the fully qualified import path of the package, like so: + +```sh +$ depth github.com/KyleBanks/depth/cmd/depth +github.com/KyleBanks/depth/cmd/depth + ├ encoding/json + ├ flag + ├ fmt + ├ io + ├ log + ├ os + ├ strings + └ github.com/KyleBanks/depth + ├ fmt + ├ go/build + ├ path + ├ sort + └ strings +12 dependencies (11 internal, 1 external, 0 testing). +``` + +Or you can use a relative path, for example: + +```sh +$ depth . +$ depth ./cmd/depth +$ depth ../ +``` + +You can also use `depth` on the Go standard library: + +```sh +$ depth strings +strings + ├ errors + ├ io + ├ unicode + └ unicode/utf8 +5 dependencies (5 internal, 0 external, 0 testing). +``` + +Visualizing multiple packages at a time is supported by simply naming the packages you'd like to visualize: + +```sh +$ depth strings github.com/KyleBanks/depth +strings + ├ errors + ├ io + ├ unicode + └ unicode/utf8 +5 dependencies (5 internal, 0 external, 0 testing). +github.com/KyleBanks/depth + ├ fmt + ├ go/build + ├ path + ├ sort + └ strings +7 dependencies (7 internal, 0 external, 0 testing). +``` + +#### `-internal` + +By default, `depth` only resolves the top level of dependencies for standard library packages, however you can use the `-internal` flag to visualize all internal dependencies: + +```sh +$ depth -internal strings +strings + ├ errors + ├ io + ├ errors + └ sync + ├ internal/race + └ unsafe + ├ runtime + ├ runtime/internal/atomic + └ unsafe + ├ runtime/internal/sys + └ unsafe + ├ sync/atomic + └ unsafe + └ unsafe + ├ unicode + └ unicode/utf8 +12 dependencies (12 internal, 0 external, 0 testing). +``` + +#### `-max` + +The `-max` flag limits the dependency tree to the maximum depth provided. For example, if you supply `-max 1` on the `depth` package, your output would look like so: + +``` +$ depth -max 1 github.com/KyleBanks/depth/cmd/depth +github.com/KyleBanks/depth/cmd/depth + ├ encoding/json + ├ flag + ├ fmt + ├ io + ├ log + ├ os + ├ strings + └ github.com/KyleBanks/depth +7 dependencies (6 internal, 1 external, 0 testing). +``` + +The `-max` flag is particularly useful in conjunction with the `-internal` flag which can lead to very deep dependency trees. + +#### `-test` + +By default, `depth` ignores dependencies that are only required for testing. However, you can view test dependencies using the `-test` flag: + +```sh +$ depth -test strings +strings + ├ bytes + ├ errors + ├ fmt + ├ io + ├ io/ioutil + ├ math/rand + ├ reflect + ├ sync + ├ testing + ├ unicode + ├ unicode/utf8 + └ unsafe +13 dependencies (13 internal, 0 external, 8 testing). +``` + +#### `-explain target-package` + +The `-explain` flag instructs `depth` to print import chains in which the +`target-package` is found: + +```sh +$ depth -explain strings github.com/KyleBanks/depth/cmd/depth +github.com/KyleBanks/depth/cmd/depth -> strings +github.com/KyleBanks/depth/cmd/depth -> github.com/KyleBanks/depth -> strings +``` + +#### `-json` + +The `-json` flag instructs `depth` to output dependencies in JSON format: + +```sh +$ depth -json github.com/KyleBanks/depth/cmd/depth +{ + "name": "github.com/KyleBanks/depth/cmd/depth", + "deps": [ + { + "name": "encoding/json", + "internal": true, + "deps": null + }, + ... + { + "name": "github.com/KyleBanks/depth", + "internal": false, + "deps": [ + { + "name": "go/build", + "internal": true, + "deps": null + }, + ... + ] + } + ] +} +``` + +### Integrating With Your Project + +The `depth` package can easily be used to retrieve the dependency tree for a particular package in your own project. For example, here's how you would retrieve the dependency tree for the `strings` package: + +```go +import "github.com/KyleBanks/depth" + +var t depth.Tree +err := t.Resolve("strings") +if err != nil { + log.Fatal(err) +} + +// Output: "'strings' has 4 dependencies." +log.Printf("'%v' has %v dependencies.", t.Root.Name, len(t.Root.Deps)) +``` + +For additional customization, simply set the appropriate flags on the `Tree` before resolving: + +```go +import "github.com/KyleBanks/depth" + +t := depth.Tree { + ResolveInternal: true, + ResolveTest: true, + MaxDepth: 10, +} + + +err := t.Resolve("strings") +``` + +## Author + +`depth` was developed by [Kyle Banks](https://twitter.com/kylewbanks). + +## License + +`depth` is available under the [MIT](./LICENSE) license. diff --git a/vendor/github.com/KyleBanks/depth/depth.go b/vendor/github.com/KyleBanks/depth/depth.go new file mode 100644 index 0000000..115c28a --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/depth.go @@ -0,0 +1,129 @@ +// Package depth provides the ability to traverse and retrieve Go source code dependencies in the form of +// internal and external packages. +// +// For example, the dependencies of the stdlib `strings` package can be resolved like so: +// +// import "github.com/KyleBanks/depth" +// +// var t depth.Tree +// err := t.Resolve("strings") +// if err != nil { +// log.Fatal(err) +// } +// +// // Output: "strings has 4 dependencies." +// log.Printf("%v has %v dependencies.", t.Root.Name, len(t.Root.Deps)) +// +// For additional customization, simply set the appropriate flags on the `Tree` before resolving: +// +// import "github.com/KyleBanks/depth" +// +// t := depth.Tree { +// ResolveInternal: true, +// ResolveTest: true, +// MaxDepth: 10, +// } +// err := t.Resolve("strings") +package depth + +import ( + "errors" + "go/build" + "os" +) + +// ErrRootPkgNotResolved is returned when the root Pkg of the Tree cannot be resolved, +// typically because it does not exist. +var ErrRootPkgNotResolved = errors.New("unable to resolve root package") + +// Importer defines a type that can import a package and return its details. +type Importer interface { + Import(name, srcDir string, im build.ImportMode) (*build.Package, error) +} + +// Tree represents the top level of a Pkg and the configuration used to +// initialize and represent its contents. +type Tree struct { + Root *Pkg + + ResolveInternal bool + ResolveTest bool + MaxDepth int + + Importer Importer + + importCache map[string]struct{} +} + +// Resolve recursively finds all dependencies for the root Pkg name provided, +// and the packages it depends on. +func (t *Tree) Resolve(name string) error { + pwd, err := os.Getwd() + if err != nil { + return err + } + + t.Root = &Pkg{ + Name: name, + Tree: t, + SrcDir: pwd, + Test: false, + } + + // Reset the import cache each time to ensure a reused Tree doesn't + // reuse the same cache. + t.importCache = nil + + // Allow custom importers, but use build.Default if none is provided. + if t.Importer == nil { + t.Importer = &build.Default + } + + t.Root.Resolve(t.Importer) + if !t.Root.Resolved { + return ErrRootPkgNotResolved + } + + return nil +} + +// shouldResolveInternal determines if internal packages should be further resolved beyond the +// current parent. +// +// For example, if the parent Pkg is `github.com/foo/bar` and true is returned, all the +// internal dependencies it relies on will be resolved. If for example `strings` is one of those +// dependencies, and it is passed as the parent here, false may be returned and its internal +// dependencies will not be resolved. +func (t *Tree) shouldResolveInternal(parent *Pkg) bool { + if t.ResolveInternal { + return true + } + + return parent == t.Root +} + +// isAtMaxDepth returns true when the depth of the Pkg provided is at or beyond the maximum +// depth allowed by the tree. +// +// If the Tree has a MaxDepth of zero, true is never returned. +func (t *Tree) isAtMaxDepth(p *Pkg) bool { + if t.MaxDepth == 0 { + return false + } + + return p.depth() >= t.MaxDepth +} + +// hasSeenImport returns true if the import name provided has already been seen within the tree. +// This function only returns false for a name once. +func (t *Tree) hasSeenImport(name string) bool { + if t.importCache == nil { + t.importCache = make(map[string]struct{}) + } + + if _, ok := t.importCache[name]; ok { + return true + } + t.importCache[name] = struct{}{} + return false +} diff --git a/vendor/github.com/KyleBanks/depth/pkg.go b/vendor/github.com/KyleBanks/depth/pkg.go new file mode 100644 index 0000000..1d54d71 --- /dev/null +++ b/vendor/github.com/KyleBanks/depth/pkg.go @@ -0,0 +1,184 @@ +package depth + +import ( + "bytes" + "go/build" + "path" + "sort" + "strings" +) + +// Pkg represents a Go source package, and its dependencies. +type Pkg struct { + Name string `json:"name"` + SrcDir string `json:"-"` + + Internal bool `json:"internal"` + Resolved bool `json:"resolved"` + Test bool `json:"-"` + + Tree *Tree `json:"-"` + Parent *Pkg `json:"-"` + Deps []Pkg `json:"deps"` + + Raw *build.Package `json:"-"` +} + +// Resolve recursively finds all dependencies for the Pkg and the packages it depends on. +func (p *Pkg) Resolve(i Importer) { + // Resolved is always true, regardless of if we skip the import, + // it is only false if there is an error while importing. + p.Resolved = true + + name := p.cleanName() + if name == "" { + return + } + + // Stop resolving imports if we've reached max depth or found a duplicate. + var importMode build.ImportMode + if p.Tree.hasSeenImport(name) || p.Tree.isAtMaxDepth(p) { + importMode = build.FindOnly + } + + pkg, err := i.Import(name, p.SrcDir, importMode) + if err != nil { + // TODO: Check the error type? + p.Resolved = false + return + } + p.Raw = pkg + + // Update the name with the fully qualified import path. + p.Name = pkg.ImportPath + + // If this is an internal dependency, we may need to skip it. + if pkg.Goroot { + p.Internal = true + if !p.Tree.shouldResolveInternal(p) { + return + } + } + + //first we set the regular dependencies, then we add the test dependencies + //sharing the same set. This allows us to mark all test-only deps linearly + unique := make(map[string]struct{}) + p.setDeps(i, pkg.Imports, pkg.Dir, unique, false) + if p.Tree.ResolveTest { + p.setDeps(i, append(pkg.TestImports, pkg.XTestImports...), pkg.Dir, unique, true) + } +} + +// setDeps takes a slice of import paths and the source directory they are relative to, +// and creates the Deps of the Pkg. Each dependency is also further resolved prior to being added +// to the Pkg. +func (p *Pkg) setDeps(i Importer, imports []string, srcDir string, unique map[string]struct{}, isTest bool) { + for _, imp := range imports { + // Mostly for testing files where cyclic imports are allowed. + if imp == p.Name { + continue + } + + // Skip duplicates. + if _, ok := unique[imp]; ok { + continue + } + unique[imp] = struct{}{} + + p.addDep(i, imp, srcDir, isTest) + } + + sort.Sort(byInternalAndName(p.Deps)) +} + +// addDep creates a Pkg and it's dependencies from an imported package name. +func (p *Pkg) addDep(i Importer, name string, srcDir string, isTest bool) { + dep := Pkg{ + Name: name, + SrcDir: srcDir, + Tree: p.Tree, + Parent: p, + Test: isTest, + } + dep.Resolve(i) + + p.Deps = append(p.Deps, dep) +} + +// isParent goes recursively up the chain of Pkgs to determine if the name provided is ever a +// parent of the current Pkg. +func (p *Pkg) isParent(name string) bool { + if p.Parent == nil { + return false + } + + if p.Parent.Name == name { + return true + } + + return p.Parent.isParent(name) +} + +// depth returns the depth of the Pkg within the Tree. +func (p *Pkg) depth() int { + if p.Parent == nil { + return 0 + } + + return p.Parent.depth() + 1 +} + +// cleanName returns a cleaned version of the Pkg name used for resolving dependencies. +// +// If an empty string is returned, dependencies should not be resolved. +func (p *Pkg) cleanName() string { + name := p.Name + + // C 'package' cannot be resolved. + if name == "C" { + return "" + } + + // Internal golang_org/* packages must be prefixed with vendor/ + // + // Thanks to @davecheney for this: + // https://github.com/davecheney/graphpkg/blob/master/main.go#L46 + if strings.HasPrefix(name, "golang_org") { + name = path.Join("vendor", name) + } + + return name +} + +// String returns a string representation of the Pkg containing the Pkg name and status. +func (p *Pkg) String() string { + b := bytes.NewBufferString(p.Name) + + if !p.Resolved { + b.Write([]byte(" (unresolved)")) + } + + return b.String() +} + +// byInternalAndName ensures a slice of Pkgs are sorted such that the internal stdlib +// packages are always above external packages (ie. github.com/whatever). +type byInternalAndName []Pkg + +func (b byInternalAndName) Len() int { + return len(b) +} + +func (b byInternalAndName) Swap(i, j int) { + b[i], b[j] = b[j], b[i] +} + +func (b byInternalAndName) Less(i, j int) bool { + if b[i].Internal && !b[j].Internal { + return true + } else if !b[i].Internal && b[j].Internal { + return false + } + + return b[i].Name < b[j].Name +} diff --git a/vendor/github.com/PuerkitoBio/purell/.gitignore b/vendor/github.com/PuerkitoBio/purell/.gitignore new file mode 100644 index 0000000..748e4c8 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/purell/.gitignore @@ -0,0 +1,5 @@ +*.sublime-* +.DS_Store +*.swp +*.swo +tags diff --git a/vendor/github.com/PuerkitoBio/purell/.travis.yml b/vendor/github.com/PuerkitoBio/purell/.travis.yml new file mode 100644 index 0000000..cf31e6a --- /dev/null +++ b/vendor/github.com/PuerkitoBio/purell/.travis.yml @@ -0,0 +1,12 @@ +language: go + +go: + - 1.4.x + - 1.5.x + - 1.6.x + - 1.7.x + - 1.8.x + - 1.9.x + - "1.10.x" + - "1.11.x" + - tip diff --git a/vendor/github.com/PuerkitoBio/purell/LICENSE b/vendor/github.com/PuerkitoBio/purell/LICENSE new file mode 100644 index 0000000..4b9986d --- /dev/null +++ b/vendor/github.com/PuerkitoBio/purell/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2012, Martin Angers +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 the author 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 HOLDER 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/PuerkitoBio/purell/README.md b/vendor/github.com/PuerkitoBio/purell/README.md new file mode 100644 index 0000000..07de0c4 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/purell/README.md @@ -0,0 +1,188 @@ +# Purell + +Purell is a tiny Go library to normalize URLs. It returns a pure URL. Pure-ell. Sanitizer and all. Yeah, I know... + +Based on the [wikipedia paper][wiki] and the [RFC 3986 document][rfc]. + +[![build status](https://travis-ci.org/PuerkitoBio/purell.svg?branch=master)](http://travis-ci.org/PuerkitoBio/purell) + +## Install + +`go get github.com/PuerkitoBio/purell` + +## Changelog + +* **v1.1.1** : Fix failing test due to Go1.12 changes (thanks to @ianlancetaylor). +* **2016-11-14 (v1.1.0)** : IDN: Conform to RFC 5895: Fold character width (thanks to @beeker1121). +* **2016-07-27 (v1.0.0)** : Normalize IDN to ASCII (thanks to @zenovich). +* **2015-02-08** : Add fix for relative paths issue ([PR #5][pr5]) and add fix for unnecessary encoding of reserved characters ([see issue #7][iss7]). +* **v0.2.0** : Add benchmarks, Attempt IDN support. +* **v0.1.0** : Initial release. + +## Examples + +From `example_test.go` (note that in your code, you would import "github.com/PuerkitoBio/purell", and would prefix references to its methods and constants with "purell."): + +```go +package purell + +import ( + "fmt" + "net/url" +) + +func ExampleNormalizeURLString() { + if normalized, err := NormalizeURLString("hTTp://someWEBsite.com:80/Amazing%3f/url/", + FlagLowercaseScheme|FlagLowercaseHost|FlagUppercaseEscapes); err != nil { + panic(err) + } else { + fmt.Print(normalized) + } + // Output: http://somewebsite.com:80/Amazing%3F/url/ +} + +func ExampleMustNormalizeURLString() { + normalized := MustNormalizeURLString("hTTpS://someWEBsite.com:443/Amazing%fa/url/", + FlagsUnsafeGreedy) + fmt.Print(normalized) + + // Output: http://somewebsite.com/Amazing%FA/url +} + +func ExampleNormalizeURL() { + if u, err := url.Parse("Http://SomeUrl.com:8080/a/b/.././c///g?c=3&a=1&b=9&c=0#target"); err != nil { + panic(err) + } else { + normalized := NormalizeURL(u, FlagsUsuallySafeGreedy|FlagRemoveDuplicateSlashes|FlagRemoveFragment) + fmt.Print(normalized) + } + + // Output: http://someurl.com:8080/a/c/g?c=3&a=1&b=9&c=0 +} +``` + +## API + +As seen in the examples above, purell offers three methods, `NormalizeURLString(string, NormalizationFlags) (string, error)`, `MustNormalizeURLString(string, NormalizationFlags) (string)` and `NormalizeURL(*url.URL, NormalizationFlags) (string)`. They all normalize the provided URL based on the specified flags. Here are the available flags: + +```go +const ( + // Safe normalizations + FlagLowercaseScheme NormalizationFlags = 1 << iota // HTTP://host -> http://host, applied by default in Go1.1 + FlagLowercaseHost // http://HOST -> http://host + FlagUppercaseEscapes // http://host/t%ef -> http://host/t%EF + FlagDecodeUnnecessaryEscapes // http://host/t%41 -> http://host/tA + FlagEncodeNecessaryEscapes // http://host/!"#$ -> http://host/%21%22#$ + FlagRemoveDefaultPort // http://host:80 -> http://host + FlagRemoveEmptyQuerySeparator // http://host/path? -> http://host/path + + // Usually safe normalizations + FlagRemoveTrailingSlash // http://host/path/ -> http://host/path + FlagAddTrailingSlash // http://host/path -> http://host/path/ (should choose only one of these add/remove trailing slash flags) + FlagRemoveDotSegments // http://host/path/./a/b/../c -> http://host/path/a/c + + // Unsafe normalizations + FlagRemoveDirectoryIndex // http://host/path/index.html -> http://host/path/ + FlagRemoveFragment // http://host/path#fragment -> http://host/path + FlagForceHTTP // https://host -> http://host + FlagRemoveDuplicateSlashes // http://host/path//a///b -> http://host/path/a/b + FlagRemoveWWW // http://www.host/ -> http://host/ + FlagAddWWW // http://host/ -> http://www.host/ (should choose only one of these add/remove WWW flags) + FlagSortQuery // http://host/path?c=3&b=2&a=1&b=1 -> http://host/path?a=1&b=1&b=2&c=3 + + // Normalizations not in the wikipedia article, required to cover tests cases + // submitted by jehiah + FlagDecodeDWORDHost // http://1113982867 -> http://66.102.7.147 + FlagDecodeOctalHost // http://0102.0146.07.0223 -> http://66.102.7.147 + FlagDecodeHexHost // http://0x42660793 -> http://66.102.7.147 + FlagRemoveUnnecessaryHostDots // http://.host../path -> http://host/path + FlagRemoveEmptyPortSeparator // http://host:/path -> http://host/path + + // Convenience set of safe normalizations + FlagsSafe NormalizationFlags = FlagLowercaseHost | FlagLowercaseScheme | FlagUppercaseEscapes | FlagDecodeUnnecessaryEscapes | FlagEncodeNecessaryEscapes | FlagRemoveDefaultPort | FlagRemoveEmptyQuerySeparator + + // For convenience sets, "greedy" uses the "remove trailing slash" and "remove www. prefix" flags, + // while "non-greedy" uses the "add (or keep) the trailing slash" and "add www. prefix". + + // Convenience set of usually safe normalizations (includes FlagsSafe) + FlagsUsuallySafeGreedy NormalizationFlags = FlagsSafe | FlagRemoveTrailingSlash | FlagRemoveDotSegments + FlagsUsuallySafeNonGreedy NormalizationFlags = FlagsSafe | FlagAddTrailingSlash | FlagRemoveDotSegments + + // Convenience set of unsafe normalizations (includes FlagsUsuallySafe) + FlagsUnsafeGreedy NormalizationFlags = FlagsUsuallySafeGreedy | FlagRemoveDirectoryIndex | FlagRemoveFragment | FlagForceHTTP | FlagRemoveDuplicateSlashes | FlagRemoveWWW | FlagSortQuery + FlagsUnsafeNonGreedy NormalizationFlags = FlagsUsuallySafeNonGreedy | FlagRemoveDirectoryIndex | FlagRemoveFragment | FlagForceHTTP | FlagRemoveDuplicateSlashes | FlagAddWWW | FlagSortQuery + + // Convenience set of all available flags + FlagsAllGreedy = FlagsUnsafeGreedy | FlagDecodeDWORDHost | FlagDecodeOctalHost | FlagDecodeHexHost | FlagRemoveUnnecessaryHostDots | FlagRemoveEmptyPortSeparator + FlagsAllNonGreedy = FlagsUnsafeNonGreedy | FlagDecodeDWORDHost | FlagDecodeOctalHost | FlagDecodeHexHost | FlagRemoveUnnecessaryHostDots | FlagRemoveEmptyPortSeparator +) +``` + +For convenience, the set of flags `FlagsSafe`, `FlagsUsuallySafe[Greedy|NonGreedy]`, `FlagsUnsafe[Greedy|NonGreedy]` and `FlagsAll[Greedy|NonGreedy]` are provided for the similarly grouped normalizations on [wikipedia's URL normalization page][wiki]. You can add (using the bitwise OR `|` operator) or remove (using the bitwise AND NOT `&^` operator) individual flags from the sets if required, to build your own custom set. + +The [full godoc reference is available on gopkgdoc][godoc]. + +Some things to note: + +* `FlagDecodeUnnecessaryEscapes`, `FlagEncodeNecessaryEscapes`, `FlagUppercaseEscapes` and `FlagRemoveEmptyQuerySeparator` are always implicitly set, because internally, the URL string is parsed as an URL object, which automatically decodes unnecessary escapes, uppercases and encodes necessary ones, and removes empty query separators (an unnecessary `?` at the end of the url). So this operation cannot **not** be done. For this reason, `FlagRemoveEmptyQuerySeparator` (as well as the other three) has been included in the `FlagsSafe` convenience set, instead of `FlagsUnsafe`, where Wikipedia puts it. + +* The `FlagDecodeUnnecessaryEscapes` decodes the following escapes (*from -> to*): + - %24 -> $ + - %26 -> & + - %2B-%3B -> +,-./0123456789:; + - %3D -> = + - %40-%5A -> @ABCDEFGHIJKLMNOPQRSTUVWXYZ + - %5F -> _ + - %61-%7A -> abcdefghijklmnopqrstuvwxyz + - %7E -> ~ + + +* When the `NormalizeURL` function is used (passing an URL object), this source URL object is modified (that is, after the call, the URL object will be modified to reflect the normalization). + +* The *replace IP with domain name* normalization (`http://208.77.188.166/ → http://www.example.com/`) is obviously not possible for a library without making some network requests. This is not implemented in purell. + +* The *remove unused query string parameters* and *remove default query parameters* are also not implemented, since this is a very case-specific normalization, and it is quite trivial to do with an URL object. + +### Safe vs Usually Safe vs Unsafe + +Purell allows you to control the level of risk you take while normalizing an URL. You can aggressively normalize, play it totally safe, or anything in between. + +Consider the following URL: + +`HTTPS://www.RooT.com/toto/t%45%1f///a/./b/../c/?z=3&w=2&a=4&w=1#invalid` + +Normalizing with the `FlagsSafe` gives: + +`https://www.root.com/toto/tE%1F///a/./b/../c/?z=3&w=2&a=4&w=1#invalid` + +With the `FlagsUsuallySafeGreedy`: + +`https://www.root.com/toto/tE%1F///a/c?z=3&w=2&a=4&w=1#invalid` + +And with `FlagsUnsafeGreedy`: + +`http://root.com/toto/tE%1F/a/c?a=4&w=1&w=2&z=3` + +## TODOs + +* Add a class/default instance to allow specifying custom directory index names? At the moment, removing directory index removes `(^|/)((?:default|index)\.\w{1,4})$`. + +## Thanks / Contributions + +@rogpeppe +@jehiah +@opennota +@pchristopher1275 +@zenovich +@beeker1121 + +## License + +The [BSD 3-Clause license][bsd]. + +[bsd]: http://opensource.org/licenses/BSD-3-Clause +[wiki]: http://en.wikipedia.org/wiki/URL_normalization +[rfc]: http://tools.ietf.org/html/rfc3986#section-6 +[godoc]: http://go.pkgdoc.org/github.com/PuerkitoBio/purell +[pr5]: https://github.com/PuerkitoBio/purell/pull/5 +[iss7]: https://github.com/PuerkitoBio/purell/issues/7 diff --git a/vendor/github.com/PuerkitoBio/purell/purell.go b/vendor/github.com/PuerkitoBio/purell/purell.go new file mode 100644 index 0000000..6d0fc19 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/purell/purell.go @@ -0,0 +1,379 @@ +/* +Package purell offers URL normalization as described on the wikipedia page: +http://en.wikipedia.org/wiki/URL_normalization +*/ +package purell + +import ( + "bytes" + "fmt" + "net/url" + "regexp" + "sort" + "strconv" + "strings" + + "github.com/PuerkitoBio/urlesc" + "golang.org/x/net/idna" + "golang.org/x/text/unicode/norm" + "golang.org/x/text/width" +) + +// A set of normalization flags determines how a URL will +// be normalized. +type NormalizationFlags uint + +const ( + // Safe normalizations + FlagLowercaseScheme NormalizationFlags = 1 << iota // HTTP://host -> http://host, applied by default in Go1.1 + FlagLowercaseHost // http://HOST -> http://host + FlagUppercaseEscapes // http://host/t%ef -> http://host/t%EF + FlagDecodeUnnecessaryEscapes // http://host/t%41 -> http://host/tA + FlagEncodeNecessaryEscapes // http://host/!"#$ -> http://host/%21%22#$ + FlagRemoveDefaultPort // http://host:80 -> http://host + FlagRemoveEmptyQuerySeparator // http://host/path? -> http://host/path + + // Usually safe normalizations + FlagRemoveTrailingSlash // http://host/path/ -> http://host/path + FlagAddTrailingSlash // http://host/path -> http://host/path/ (should choose only one of these add/remove trailing slash flags) + FlagRemoveDotSegments // http://host/path/./a/b/../c -> http://host/path/a/c + + // Unsafe normalizations + FlagRemoveDirectoryIndex // http://host/path/index.html -> http://host/path/ + FlagRemoveFragment // http://host/path#fragment -> http://host/path + FlagForceHTTP // https://host -> http://host + FlagRemoveDuplicateSlashes // http://host/path//a///b -> http://host/path/a/b + FlagRemoveWWW // http://www.host/ -> http://host/ + FlagAddWWW // http://host/ -> http://www.host/ (should choose only one of these add/remove WWW flags) + FlagSortQuery // http://host/path?c=3&b=2&a=1&b=1 -> http://host/path?a=1&b=1&b=2&c=3 + + // Normalizations not in the wikipedia article, required to cover tests cases + // submitted by jehiah + FlagDecodeDWORDHost // http://1113982867 -> http://66.102.7.147 + FlagDecodeOctalHost // http://0102.0146.07.0223 -> http://66.102.7.147 + FlagDecodeHexHost // http://0x42660793 -> http://66.102.7.147 + FlagRemoveUnnecessaryHostDots // http://.host../path -> http://host/path + FlagRemoveEmptyPortSeparator // http://host:/path -> http://host/path + + // Convenience set of safe normalizations + FlagsSafe NormalizationFlags = FlagLowercaseHost | FlagLowercaseScheme | FlagUppercaseEscapes | FlagDecodeUnnecessaryEscapes | FlagEncodeNecessaryEscapes | FlagRemoveDefaultPort | FlagRemoveEmptyQuerySeparator + + // For convenience sets, "greedy" uses the "remove trailing slash" and "remove www. prefix" flags, + // while "non-greedy" uses the "add (or keep) the trailing slash" and "add www. prefix". + + // Convenience set of usually safe normalizations (includes FlagsSafe) + FlagsUsuallySafeGreedy NormalizationFlags = FlagsSafe | FlagRemoveTrailingSlash | FlagRemoveDotSegments + FlagsUsuallySafeNonGreedy NormalizationFlags = FlagsSafe | FlagAddTrailingSlash | FlagRemoveDotSegments + + // Convenience set of unsafe normalizations (includes FlagsUsuallySafe) + FlagsUnsafeGreedy NormalizationFlags = FlagsUsuallySafeGreedy | FlagRemoveDirectoryIndex | FlagRemoveFragment | FlagForceHTTP | FlagRemoveDuplicateSlashes | FlagRemoveWWW | FlagSortQuery + FlagsUnsafeNonGreedy NormalizationFlags = FlagsUsuallySafeNonGreedy | FlagRemoveDirectoryIndex | FlagRemoveFragment | FlagForceHTTP | FlagRemoveDuplicateSlashes | FlagAddWWW | FlagSortQuery + + // Convenience set of all available flags + FlagsAllGreedy = FlagsUnsafeGreedy | FlagDecodeDWORDHost | FlagDecodeOctalHost | FlagDecodeHexHost | FlagRemoveUnnecessaryHostDots | FlagRemoveEmptyPortSeparator + FlagsAllNonGreedy = FlagsUnsafeNonGreedy | FlagDecodeDWORDHost | FlagDecodeOctalHost | FlagDecodeHexHost | FlagRemoveUnnecessaryHostDots | FlagRemoveEmptyPortSeparator +) + +const ( + defaultHttpPort = ":80" + defaultHttpsPort = ":443" +) + +// Regular expressions used by the normalizations +var rxPort = regexp.MustCompile(`(:\d+)/?$`) +var rxDirIndex = regexp.MustCompile(`(^|/)((?:default|index)\.\w{1,4})$`) +var rxDupSlashes = regexp.MustCompile(`/{2,}`) +var rxDWORDHost = regexp.MustCompile(`^(\d+)((?:\.+)?(?:\:\d*)?)$`) +var rxOctalHost = regexp.MustCompile(`^(0\d*)\.(0\d*)\.(0\d*)\.(0\d*)((?:\.+)?(?:\:\d*)?)$`) +var rxHexHost = regexp.MustCompile(`^0x([0-9A-Fa-f]+)((?:\.+)?(?:\:\d*)?)$`) +var rxHostDots = regexp.MustCompile(`^(.+?)(:\d+)?$`) +var rxEmptyPort = regexp.MustCompile(`:+$`) + +// Map of flags to implementation function. +// FlagDecodeUnnecessaryEscapes has no action, since it is done automatically +// by parsing the string as an URL. Same for FlagUppercaseEscapes and FlagRemoveEmptyQuerySeparator. + +// Since maps have undefined traversing order, make a slice of ordered keys +var flagsOrder = []NormalizationFlags{ + FlagLowercaseScheme, + FlagLowercaseHost, + FlagRemoveDefaultPort, + FlagRemoveDirectoryIndex, + FlagRemoveDotSegments, + FlagRemoveFragment, + FlagForceHTTP, // Must be after remove default port (because https=443/http=80) + FlagRemoveDuplicateSlashes, + FlagRemoveWWW, + FlagAddWWW, + FlagSortQuery, + FlagDecodeDWORDHost, + FlagDecodeOctalHost, + FlagDecodeHexHost, + FlagRemoveUnnecessaryHostDots, + FlagRemoveEmptyPortSeparator, + FlagRemoveTrailingSlash, // These two (add/remove trailing slash) must be last + FlagAddTrailingSlash, +} + +// ... and then the map, where order is unimportant +var flags = map[NormalizationFlags]func(*url.URL){ + FlagLowercaseScheme: lowercaseScheme, + FlagLowercaseHost: lowercaseHost, + FlagRemoveDefaultPort: removeDefaultPort, + FlagRemoveDirectoryIndex: removeDirectoryIndex, + FlagRemoveDotSegments: removeDotSegments, + FlagRemoveFragment: removeFragment, + FlagForceHTTP: forceHTTP, + FlagRemoveDuplicateSlashes: removeDuplicateSlashes, + FlagRemoveWWW: removeWWW, + FlagAddWWW: addWWW, + FlagSortQuery: sortQuery, + FlagDecodeDWORDHost: decodeDWORDHost, + FlagDecodeOctalHost: decodeOctalHost, + FlagDecodeHexHost: decodeHexHost, + FlagRemoveUnnecessaryHostDots: removeUnncessaryHostDots, + FlagRemoveEmptyPortSeparator: removeEmptyPortSeparator, + FlagRemoveTrailingSlash: removeTrailingSlash, + FlagAddTrailingSlash: addTrailingSlash, +} + +// MustNormalizeURLString returns the normalized string, and panics if an error occurs. +// It takes an URL string as input, as well as the normalization flags. +func MustNormalizeURLString(u string, f NormalizationFlags) string { + result, e := NormalizeURLString(u, f) + if e != nil { + panic(e) + } + return result +} + +// NormalizeURLString returns the normalized string, or an error if it can't be parsed into an URL object. +// It takes an URL string as input, as well as the normalization flags. +func NormalizeURLString(u string, f NormalizationFlags) (string, error) { + parsed, err := url.Parse(u) + if err != nil { + return "", err + } + + if f&FlagLowercaseHost == FlagLowercaseHost { + parsed.Host = strings.ToLower(parsed.Host) + } + + // The idna package doesn't fully conform to RFC 5895 + // (https://tools.ietf.org/html/rfc5895), so we do it here. + // Taken from Go 1.8 cycle source, courtesy of bradfitz. + // TODO: Remove when (if?) idna package conforms to RFC 5895. + parsed.Host = width.Fold.String(parsed.Host) + parsed.Host = norm.NFC.String(parsed.Host) + if parsed.Host, err = idna.ToASCII(parsed.Host); err != nil { + return "", err + } + + return NormalizeURL(parsed, f), nil +} + +// NormalizeURL returns the normalized string. +// It takes a parsed URL object as input, as well as the normalization flags. +func NormalizeURL(u *url.URL, f NormalizationFlags) string { + for _, k := range flagsOrder { + if f&k == k { + flags[k](u) + } + } + return urlesc.Escape(u) +} + +func lowercaseScheme(u *url.URL) { + if len(u.Scheme) > 0 { + u.Scheme = strings.ToLower(u.Scheme) + } +} + +func lowercaseHost(u *url.URL) { + if len(u.Host) > 0 { + u.Host = strings.ToLower(u.Host) + } +} + +func removeDefaultPort(u *url.URL) { + if len(u.Host) > 0 { + scheme := strings.ToLower(u.Scheme) + u.Host = rxPort.ReplaceAllStringFunc(u.Host, func(val string) string { + if (scheme == "http" && val == defaultHttpPort) || (scheme == "https" && val == defaultHttpsPort) { + return "" + } + return val + }) + } +} + +func removeTrailingSlash(u *url.URL) { + if l := len(u.Path); l > 0 { + if strings.HasSuffix(u.Path, "/") { + u.Path = u.Path[:l-1] + } + } else if l = len(u.Host); l > 0 { + if strings.HasSuffix(u.Host, "/") { + u.Host = u.Host[:l-1] + } + } +} + +func addTrailingSlash(u *url.URL) { + if l := len(u.Path); l > 0 { + if !strings.HasSuffix(u.Path, "/") { + u.Path += "/" + } + } else if l = len(u.Host); l > 0 { + if !strings.HasSuffix(u.Host, "/") { + u.Host += "/" + } + } +} + +func removeDotSegments(u *url.URL) { + if len(u.Path) > 0 { + var dotFree []string + var lastIsDot bool + + sections := strings.Split(u.Path, "/") + for _, s := range sections { + if s == ".." { + if len(dotFree) > 0 { + dotFree = dotFree[:len(dotFree)-1] + } + } else if s != "." { + dotFree = append(dotFree, s) + } + lastIsDot = (s == "." || s == "..") + } + // Special case if host does not end with / and new path does not begin with / + u.Path = strings.Join(dotFree, "/") + if u.Host != "" && !strings.HasSuffix(u.Host, "/") && !strings.HasPrefix(u.Path, "/") { + u.Path = "/" + u.Path + } + // Special case if the last segment was a dot, make sure the path ends with a slash + if lastIsDot && !strings.HasSuffix(u.Path, "/") { + u.Path += "/" + } + } +} + +func removeDirectoryIndex(u *url.URL) { + if len(u.Path) > 0 { + u.Path = rxDirIndex.ReplaceAllString(u.Path, "$1") + } +} + +func removeFragment(u *url.URL) { + u.Fragment = "" +} + +func forceHTTP(u *url.URL) { + if strings.ToLower(u.Scheme) == "https" { + u.Scheme = "http" + } +} + +func removeDuplicateSlashes(u *url.URL) { + if len(u.Path) > 0 { + u.Path = rxDupSlashes.ReplaceAllString(u.Path, "/") + } +} + +func removeWWW(u *url.URL) { + if len(u.Host) > 0 && strings.HasPrefix(strings.ToLower(u.Host), "www.") { + u.Host = u.Host[4:] + } +} + +func addWWW(u *url.URL) { + if len(u.Host) > 0 && !strings.HasPrefix(strings.ToLower(u.Host), "www.") { + u.Host = "www." + u.Host + } +} + +func sortQuery(u *url.URL) { + q := u.Query() + + if len(q) > 0 { + arKeys := make([]string, len(q)) + i := 0 + for k := range q { + arKeys[i] = k + i++ + } + sort.Strings(arKeys) + buf := new(bytes.Buffer) + for _, k := range arKeys { + sort.Strings(q[k]) + for _, v := range q[k] { + if buf.Len() > 0 { + buf.WriteRune('&') + } + buf.WriteString(fmt.Sprintf("%s=%s", k, urlesc.QueryEscape(v))) + } + } + + // Rebuild the raw query string + u.RawQuery = buf.String() + } +} + +func decodeDWORDHost(u *url.URL) { + if len(u.Host) > 0 { + if matches := rxDWORDHost.FindStringSubmatch(u.Host); len(matches) > 2 { + var parts [4]int64 + + dword, _ := strconv.ParseInt(matches[1], 10, 0) + for i, shift := range []uint{24, 16, 8, 0} { + parts[i] = dword >> shift & 0xFF + } + u.Host = fmt.Sprintf("%d.%d.%d.%d%s", parts[0], parts[1], parts[2], parts[3], matches[2]) + } + } +} + +func decodeOctalHost(u *url.URL) { + if len(u.Host) > 0 { + if matches := rxOctalHost.FindStringSubmatch(u.Host); len(matches) > 5 { + var parts [4]int64 + + for i := 1; i <= 4; i++ { + parts[i-1], _ = strconv.ParseInt(matches[i], 8, 0) + } + u.Host = fmt.Sprintf("%d.%d.%d.%d%s", parts[0], parts[1], parts[2], parts[3], matches[5]) + } + } +} + +func decodeHexHost(u *url.URL) { + if len(u.Host) > 0 { + if matches := rxHexHost.FindStringSubmatch(u.Host); len(matches) > 2 { + // Conversion is safe because of regex validation + parsed, _ := strconv.ParseInt(matches[1], 16, 0) + // Set host as DWORD (base 10) encoded host + u.Host = fmt.Sprintf("%d%s", parsed, matches[2]) + // The rest is the same as decoding a DWORD host + decodeDWORDHost(u) + } + } +} + +func removeUnncessaryHostDots(u *url.URL) { + if len(u.Host) > 0 { + if matches := rxHostDots.FindStringSubmatch(u.Host); len(matches) > 1 { + // Trim the leading and trailing dots + u.Host = strings.Trim(matches[1], ".") + if len(matches) > 2 { + u.Host += matches[2] + } + } + } +} + +func removeEmptyPortSeparator(u *url.URL) { + if len(u.Host) > 0 { + u.Host = rxEmptyPort.ReplaceAllString(u.Host, "") + } +} diff --git a/vendor/github.com/PuerkitoBio/urlesc/.travis.yml b/vendor/github.com/PuerkitoBio/urlesc/.travis.yml new file mode 100644 index 0000000..ba6b225 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/urlesc/.travis.yml @@ -0,0 +1,15 @@ +language: go + +go: + - 1.4.x + - 1.5.x + - 1.6.x + - 1.7.x + - 1.8.x + - tip + +install: + - go build . + +script: + - go test -v diff --git a/vendor/github.com/PuerkitoBio/urlesc/LICENSE b/vendor/github.com/PuerkitoBio/urlesc/LICENSE new file mode 100644 index 0000000..7448756 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/urlesc/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2012 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/PuerkitoBio/urlesc/README.md b/vendor/github.com/PuerkitoBio/urlesc/README.md new file mode 100644 index 0000000..57aff0a --- /dev/null +++ b/vendor/github.com/PuerkitoBio/urlesc/README.md @@ -0,0 +1,16 @@ +urlesc [![Build Status](https://travis-ci.org/PuerkitoBio/urlesc.svg?branch=master)](https://travis-ci.org/PuerkitoBio/urlesc) [![GoDoc](http://godoc.org/github.com/PuerkitoBio/urlesc?status.svg)](http://godoc.org/github.com/PuerkitoBio/urlesc) +====== + +Package urlesc implements query escaping as per RFC 3986. + +It contains some parts of the net/url package, modified so as to allow +some reserved characters incorrectly escaped by net/url (see [issue 5684](https://github.com/golang/go/issues/5684)). + +## Install + + go get github.com/PuerkitoBio/urlesc + +## License + +Go license (BSD-3-Clause) + diff --git a/vendor/github.com/PuerkitoBio/urlesc/urlesc.go b/vendor/github.com/PuerkitoBio/urlesc/urlesc.go new file mode 100644 index 0000000..1b84624 --- /dev/null +++ b/vendor/github.com/PuerkitoBio/urlesc/urlesc.go @@ -0,0 +1,180 @@ +// 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 urlesc implements query escaping as per RFC 3986. +// It contains some parts of the net/url package, modified so as to allow +// some reserved characters incorrectly escaped by net/url. +// See https://github.com/golang/go/issues/5684 +package urlesc + +import ( + "bytes" + "net/url" + "strings" +) + +type encoding int + +const ( + encodePath encoding = 1 + iota + encodeUserPassword + encodeQueryComponent + encodeFragment +) + +// Return true if the specified character should be escaped when +// appearing in a URL string, according to RFC 3986. +func shouldEscape(c byte, mode encoding) bool { + // §2.3 Unreserved characters (alphanum) + if 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' { + return false + } + + switch c { + case '-', '.', '_', '~': // §2.3 Unreserved characters (mark) + return false + + // §2.2 Reserved characters (reserved) + case ':', '/', '?', '#', '[', ']', '@', // gen-delims + '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=': // sub-delims + // Different sections of the URL allow a few of + // the reserved characters to appear unescaped. + switch mode { + case encodePath: // §3.3 + // The RFC allows sub-delims and : @. + // '/', '[' and ']' can be used to assign meaning to individual path + // segments. This package only manipulates the path as a whole, + // so we allow those as well. That leaves only ? and # to escape. + return c == '?' || c == '#' + + case encodeUserPassword: // §3.2.1 + // The RFC allows : and sub-delims in + // userinfo. The parsing of userinfo treats ':' as special so we must escape + // all the gen-delims. + return c == ':' || c == '/' || c == '?' || c == '#' || c == '[' || c == ']' || c == '@' + + case encodeQueryComponent: // §3.4 + // The RFC allows / and ?. + return c != '/' && c != '?' + + case encodeFragment: // §4.1 + // The RFC text is silent but the grammar allows + // everything, so escape nothing but # + return c == '#' + } + } + + // Everything else must be escaped. + return true +} + +// QueryEscape escapes the string so it can be safely placed +// inside a URL query. +func QueryEscape(s string) string { + return escape(s, encodeQueryComponent) +} + +func escape(s string, mode encoding) string { + spaceCount, hexCount := 0, 0 + for i := 0; i < len(s); i++ { + c := s[i] + if shouldEscape(c, mode) { + if c == ' ' && mode == encodeQueryComponent { + spaceCount++ + } else { + hexCount++ + } + } + } + + if spaceCount == 0 && hexCount == 0 { + return s + } + + t := make([]byte, len(s)+2*hexCount) + j := 0 + for i := 0; i < len(s); i++ { + switch c := s[i]; { + case c == ' ' && mode == encodeQueryComponent: + t[j] = '+' + j++ + case shouldEscape(c, mode): + t[j] = '%' + t[j+1] = "0123456789ABCDEF"[c>>4] + t[j+2] = "0123456789ABCDEF"[c&15] + j += 3 + default: + t[j] = s[i] + j++ + } + } + return string(t) +} + +var uiReplacer = strings.NewReplacer( + "%21", "!", + "%27", "'", + "%28", "(", + "%29", ")", + "%2A", "*", +) + +// unescapeUserinfo unescapes some characters that need not to be escaped as per RFC3986. +func unescapeUserinfo(s string) string { + return uiReplacer.Replace(s) +} + +// Escape reassembles the URL into a valid URL string. +// The general form of the result is one of: +// +// scheme:opaque +// scheme://userinfo@host/path?query#fragment +// +// If u.Opaque is non-empty, String uses the first form; +// otherwise it uses the second form. +// +// In the second form, the following rules apply: +// - if u.Scheme is empty, scheme: is omitted. +// - if u.User is nil, userinfo@ is omitted. +// - if u.Host is empty, host/ is omitted. +// - if u.Scheme and u.Host are empty and u.User is nil, +// the entire scheme://userinfo@host/ is omitted. +// - if u.Host is non-empty and u.Path begins with a /, +// the form host/path does not add its own /. +// - if u.RawQuery is empty, ?query is omitted. +// - if u.Fragment is empty, #fragment is omitted. +func Escape(u *url.URL) string { + var buf bytes.Buffer + if u.Scheme != "" { + buf.WriteString(u.Scheme) + buf.WriteByte(':') + } + if u.Opaque != "" { + buf.WriteString(u.Opaque) + } else { + if u.Scheme != "" || u.Host != "" || u.User != nil { + buf.WriteString("//") + if ui := u.User; ui != nil { + buf.WriteString(unescapeUserinfo(ui.String())) + buf.WriteByte('@') + } + if h := u.Host; h != "" { + buf.WriteString(h) + } + } + if u.Path != "" && u.Path[0] != '/' && u.Host != "" { + buf.WriteByte('/') + } + buf.WriteString(escape(u.Path, encodePath)) + } + if u.RawQuery != "" { + buf.WriteByte('?') + buf.WriteString(u.RawQuery) + } + if u.Fragment != "" { + buf.WriteByte('#') + buf.WriteString(escape(u.Fragment, encodeFragment)) + } + return buf.String() +} diff --git a/vendor/gitlab.com/etke.cc/go/env/.golangci.yml b/vendor/github.com/etkecc/go-env/.golangci.yml similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/.golangci.yml rename to vendor/github.com/etkecc/go-env/.golangci.yml diff --git a/vendor/gitlab.com/etke.cc/go/env/LICENSE b/vendor/github.com/etkecc/go-env/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/LICENSE rename to vendor/github.com/etkecc/go-env/LICENSE diff --git a/vendor/gitlab.com/etke.cc/go/env/README.md b/vendor/github.com/etkecc/go-env/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/README.md rename to vendor/github.com/etkecc/go-env/README.md diff --git a/vendor/gitlab.com/etke.cc/go/env/dotenv/dotenv.go b/vendor/github.com/etkecc/go-env/dotenv/dotenv.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/dotenv/dotenv.go rename to vendor/github.com/etkecc/go-env/dotenv/dotenv.go diff --git a/vendor/gitlab.com/etke.cc/go/env/dotenv/parser.go b/vendor/github.com/etkecc/go-env/dotenv/parser.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/dotenv/parser.go rename to vendor/github.com/etkecc/go-env/dotenv/parser.go diff --git a/vendor/gitlab.com/etke.cc/go/env/env.go b/vendor/github.com/etkecc/go-env/env.go similarity index 97% rename from vendor/gitlab.com/etke.cc/go/env/env.go rename to vendor/github.com/etkecc/go-env/env.go index d17b6a5..b46d759 100644 --- a/vendor/gitlab.com/etke.cc/go/env/env.go +++ b/vendor/github.com/etkecc/go-env/env.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "gitlab.com/etke.cc/go/env/dotenv" + "github.com/etkecc/go-env/dotenv" ) var envprefix string diff --git a/vendor/gitlab.com/etke.cc/go/env/justfile b/vendor/github.com/etkecc/go-env/justfile similarity index 100% rename from vendor/gitlab.com/etke.cc/go/env/justfile rename to vendor/github.com/etkecc/go-env/justfile diff --git a/vendor/gitlab.com/etke.cc/go/fswatcher/LICENSE b/vendor/github.com/etkecc/go-fswatcher/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/fswatcher/LICENSE rename to vendor/github.com/etkecc/go-fswatcher/LICENSE diff --git a/vendor/gitlab.com/etke.cc/go/fswatcher/README.md b/vendor/github.com/etkecc/go-fswatcher/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/fswatcher/README.md rename to vendor/github.com/etkecc/go-fswatcher/README.md diff --git a/vendor/gitlab.com/etke.cc/go/fswatcher/fswatcher.go b/vendor/github.com/etkecc/go-fswatcher/fswatcher.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/fswatcher/fswatcher.go rename to vendor/github.com/etkecc/go-fswatcher/fswatcher.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/justfile b/vendor/github.com/etkecc/go-fswatcher/justfile similarity index 94% rename from vendor/gitlab.com/etke.cc/linkpearl/justfile rename to vendor/github.com/etkecc/go-fswatcher/justfile index e016978..6a2428c 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/justfile +++ b/vendor/github.com/etkecc/go-fswatcher/justfile @@ -4,7 +4,7 @@ default: # update go deps update *flags: - go get {{flags}} . + go get {{ flags }} . go mod tidy # run linter diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/.gitignore b/vendor/github.com/etkecc/go-healthchecks/v2/.gitignore similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/.gitignore rename to vendor/github.com/etkecc/go-healthchecks/v2/.gitignore diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/LICENSE b/vendor/github.com/etkecc/go-healthchecks/v2/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/LICENSE rename to vendor/github.com/etkecc/go-healthchecks/v2/LICENSE diff --git a/vendor/github.com/etkecc/go-healthchecks/v2/README.md b/vendor/github.com/etkecc/go-healthchecks/v2/README.md new file mode 100644 index 0000000..3f84d66 --- /dev/null +++ b/vendor/github.com/etkecc/go-healthchecks/v2/README.md @@ -0,0 +1,124 @@ +# Healthchecks.io Golang Client Library + +This library provides a Golang client for interacting with [healthchecks.io](https://github.com/healthchecks/healthchecks), a service for monitoring the uptime of your cron jobs, scripts, and background tasks. With this library, you can easily integrate [healthchecks.io](https://github.com/healthchecks/healthchecks) monitoring into your Golang applications. + +## Installation + +To use this library, simply import it into your Golang project: + +```bash +go get github.com/etkecc/go-healthchecks/v2 +``` + +## Usage + +### Initialization + +To start using the healthchecks.io client, you can initialize a new client with optional configuration using the `New` function: + +```go +import "github.com/etkecc/go-healthchecks/v2" + +func main() { + // Initialize a new client with default options + client := healthchecks.New(healthchecks.WithCheckUUID("your-check-uuid")) + defer client.Shutdown() + + // Or initialize with custom options + client := healthchecks.New( + healthchecks.WithBaseURL("https://hc-ping.com"), + healthchecks.WithUserAgent("Your Custom User Agent"), + healthchecks.WithCheckUUID("your-check-uuid"), + // Add more options as needed + ) + defer client.Shutdown() +} +``` + +### Sending Signals + +Once initialized, you can send various signals to healthchecks.io to indicate the status of your jobs: + +- **Start**: Indicates that the job has started. +- **Success**: Indicates that the job is still running and healthy. +- **Fail**: Indicates that the job has failed. +- **Log**: Adds an event to the job log without changing the job status. +- **ExitStatus**: Sends the job's exit code (0-255). + +```go +// Example sending a start signal +client.Start() + +// Example sending a success signal +client.Success() + +// Example sending a fail signal with a custom message +client.Fail(strings.NewReader("Job failed due to XYZ")) + +// Example sending a log signal +client.Log(strings.NewReader("Custom log message")) + +// Example sending an exit status signal +client.ExitStatus(1) // Example exit code +``` + +### Automatic Ping + +You can also configure the client to automatically send success signals at regular intervals using the `Auto` function: + +```go +import "time" + +func main() { + // Initialize the client + client := healthchecks.New(healthchecks.WithCheckUUID("your-check-uuid")) + defer client.Shutdown() + + // Start automatic pinging every 5 seconds + go client.Auto(5 * time.Second) + + // Your application logic here +} +``` + +### Shutting Down + +When you're done with the client, make sure to shut it down properly to release resources: + +```go +client.Shutdown() +``` + +## Global Client + +You can also use a global instance of the client for convenience: + +```go +// Use the global client - a previously initialized client `WithGlobal()` +healthchecks.Global() +``` + +Then you can use `healthchecks.Global()` to access the global client instance throughout your application. + +## Configuration Options + +The client provides various configuration options via functional options: + +- `WithHTTPClient`: Sets the HTTP client used by the client. +- `WithBaseURL`: Sets the base URL for healthchecks.io. +- `WithUserAgent`: Sets the user agent string for HTTP requests. +- `WithErrLog`: Sets a custom error logging function. +- `WithCheckUUID`: Sets the UUID for the health check. +- `WithAutoProvision`: Enables auto-provisioning of the health check. +- `WithGlobal`: Sets this client as the global client. +- `WithDone`: Sets the done channel for graceful shutdown. + +Example usage: + +```go +client := healthchecks.New( + healthchecks.WithBaseURL("https://custom-healthchecks-url.com"), + healthchecks.WithUserAgent("Custom User Agent"), + // Add more options as needed +) +``` diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/auto.go b/vendor/github.com/etkecc/go-healthchecks/v2/auto.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/auto.go rename to vendor/github.com/etkecc/go-healthchecks/v2/auto.go diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/client.go b/vendor/github.com/etkecc/go-healthchecks/v2/client.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/client.go rename to vendor/github.com/etkecc/go-healthchecks/v2/client.go diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/healthchecks.go b/vendor/github.com/etkecc/go-healthchecks/v2/healthchecks.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/healthchecks.go rename to vendor/github.com/etkecc/go-healthchecks/v2/healthchecks.go diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/justfile b/vendor/github.com/etkecc/go-healthchecks/v2/justfile similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/justfile rename to vendor/github.com/etkecc/go-healthchecks/v2/justfile diff --git a/vendor/gitlab.com/etke.cc/go/healthchecks/v2/options.go b/vendor/github.com/etkecc/go-healthchecks/v2/options.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/healthchecks/v2/options.go rename to vendor/github.com/etkecc/go-healthchecks/v2/options.go diff --git a/vendor/github.com/etkecc/go-linkpearl/.gitignore b/vendor/github.com/etkecc/go-linkpearl/.gitignore new file mode 100644 index 0000000..eae9097 --- /dev/null +++ b/vendor/github.com/etkecc/go-linkpearl/.gitignore @@ -0,0 +1 @@ +/cover.out diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/.golangci.yml b/vendor/github.com/etkecc/go-linkpearl/.golangci.yml similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/.golangci.yml rename to vendor/github.com/etkecc/go-linkpearl/.golangci.yml diff --git a/vendor/gitlab.com/etke.cc/go/mxidwc/LICENSE b/vendor/github.com/etkecc/go-linkpearl/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/mxidwc/LICENSE rename to vendor/github.com/etkecc/go-linkpearl/LICENSE diff --git a/vendor/gitlab.com/etke.cc/linkpearl/README.md b/vendor/github.com/etkecc/go-linkpearl/README.md similarity index 63% rename from vendor/gitlab.com/etke.cc/linkpearl/README.md rename to vendor/github.com/etkecc/go-linkpearl/README.md index d16c57e..0006217 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/README.md +++ b/vendor/github.com/etkecc/go-linkpearl/README.md @@ -1,4 +1,4 @@ -# linkpearl [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/etkecc) [![Go Report Card](https://goreportcard.com/badge/gitlab.com/etke.cc/linkpearl)](https://goreportcard.com/report/gitlab.com/etke.cc/linkpearl) [![Go Reference](https://pkg.go.dev/badge/gitlab.com/etke.cc/linkpearl.svg)](https://pkg.go.dev/gitlab.com/etke.cc/linkpearl) +# linkpearl > [more about that name](https://ffxiv.gamerescape.com/wiki/Linkpearl) @@ -7,7 +7,7 @@ A wrapper around [mautrix-go](https://github.com/mautrix/go) with infrastructure ## How to get ``` -go get gitlab.com/etke.cc/linkpearl +go get github.com/etkecc/go-linkpearl ``` ``` diff --git a/vendor/gitlab.com/etke.cc/linkpearl/accountdata.go b/vendor/github.com/etkecc/go-linkpearl/accountdata.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/accountdata.go rename to vendor/github.com/etkecc/go-linkpearl/accountdata.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/config.go b/vendor/github.com/etkecc/go-linkpearl/config.go similarity index 97% rename from vendor/gitlab.com/etke.cc/linkpearl/config.go rename to vendor/github.com/etkecc/go-linkpearl/config.go index 6cb09a5..32ebeab 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/config.go +++ b/vendor/github.com/etkecc/go-linkpearl/config.go @@ -43,6 +43,9 @@ type Config struct { // EventsLimit for methods like lp.Threads() or lp.FindEventBy() EventsLimit int + // UserAgent for requests + UserAgent string + // Logger Logger zerolog.Logger diff --git a/vendor/gitlab.com/etke.cc/linkpearl/crypter.go b/vendor/github.com/etkecc/go-linkpearl/crypter.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/crypter.go rename to vendor/github.com/etkecc/go-linkpearl/crypter.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/events.go b/vendor/github.com/etkecc/go-linkpearl/events.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/events.go rename to vendor/github.com/etkecc/go-linkpearl/events.go diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/justfile b/vendor/github.com/etkecc/go-linkpearl/justfile similarity index 94% rename from vendor/gitlab.com/etke.cc/go/validator/v2/justfile rename to vendor/github.com/etkecc/go-linkpearl/justfile index e016978..6a2428c 100644 --- a/vendor/gitlab.com/etke.cc/go/validator/v2/justfile +++ b/vendor/github.com/etkecc/go-linkpearl/justfile @@ -4,7 +4,7 @@ default: # update go deps update *flags: - go get {{flags}} . + go get {{ flags }} . go mod tidy # run linter diff --git a/vendor/gitlab.com/etke.cc/linkpearl/linkpearl.go b/vendor/github.com/etkecc/go-linkpearl/linkpearl.go similarity index 95% rename from vendor/gitlab.com/etke.cc/linkpearl/linkpearl.go rename to vendor/github.com/etkecc/go-linkpearl/linkpearl.go index 9905fd4..2a10321 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/linkpearl.go +++ b/vendor/github.com/etkecc/go-linkpearl/linkpearl.go @@ -23,6 +23,8 @@ const ( DefaultEventsLimit = 1000 // DefaultTypingTimeout in seconds for typing notifications DefaultTypingTimeout = 60 + // DefaultUserAgent for HTTP requests + DefaultUserAgent = "Linkpearl (library; +https://gitlab.com/etke.cc/linkpearl)" ) // Linkpearl object @@ -59,6 +61,9 @@ func setDefaults(cfg *Config) { // By default, we approve all join requests cfg.JoinPermit = func(_ context.Context, _ *event.Event) bool { return true } } + if cfg.UserAgent == "" { + cfg.UserAgent = DefaultUserAgent + } } func initCrypter(secret string) (*Crypter, error) { @@ -72,6 +77,7 @@ func initCrypter(secret string) (*Crypter, error) { // New linkpearl func New(cfg *Config) (*Linkpearl, error) { setDefaults(cfg) + mautrix.DefaultUserAgent = cfg.UserAgent api, err := mautrix.NewClient(cfg.Homeserver, "", "") if err != nil { return nil, err diff --git a/vendor/gitlab.com/etke.cc/linkpearl/reactions.go b/vendor/github.com/etkecc/go-linkpearl/reactions.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/reactions.go rename to vendor/github.com/etkecc/go-linkpearl/reactions.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/send.go b/vendor/github.com/etkecc/go-linkpearl/send.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/send.go rename to vendor/github.com/etkecc/go-linkpearl/send.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/sync.go b/vendor/github.com/etkecc/go-linkpearl/sync.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/sync.go rename to vendor/github.com/etkecc/go-linkpearl/sync.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/utils.go b/vendor/github.com/etkecc/go-linkpearl/utils.go similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/utils.go rename to vendor/github.com/etkecc/go-linkpearl/utils.go diff --git a/vendor/gitlab.com/etke.cc/go/secgen/LICENSE b/vendor/github.com/etkecc/go-mxidwc/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/secgen/LICENSE rename to vendor/github.com/etkecc/go-mxidwc/LICENSE diff --git a/vendor/gitlab.com/etke.cc/go/mxidwc/README.md b/vendor/github.com/etkecc/go-mxidwc/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/mxidwc/README.md rename to vendor/github.com/etkecc/go-mxidwc/README.md diff --git a/vendor/gitlab.com/etke.cc/go/psd/justfile b/vendor/github.com/etkecc/go-mxidwc/justfile similarity index 81% rename from vendor/gitlab.com/etke.cc/go/psd/justfile rename to vendor/github.com/etkecc/go-mxidwc/justfile index 836d577..6a2428c 100644 --- a/vendor/gitlab.com/etke.cc/go/psd/justfile +++ b/vendor/github.com/etkecc/go-mxidwc/justfile @@ -17,6 +17,6 @@ lintfix: # run unit tests test: - @go test -coverprofile=cover.out ./... + @go test -cover -coverprofile=cover.out -coverpkg=./... -covermode=set ./... @go tool cover -func=cover.out -@rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/go/mxidwc/parser.go b/vendor/github.com/etkecc/go-mxidwc/parser.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/mxidwc/parser.go rename to vendor/github.com/etkecc/go-mxidwc/parser.go diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/LICENSE b/vendor/github.com/etkecc/go-psd/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/trysmtp/LICENSE rename to vendor/github.com/etkecc/go-psd/LICENSE diff --git a/vendor/gitlab.com/etke.cc/go/psd/client.go b/vendor/github.com/etkecc/go-psd/client.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/psd/client.go rename to vendor/github.com/etkecc/go-psd/client.go diff --git a/vendor/github.com/etkecc/go-psd/justfile b/vendor/github.com/etkecc/go-psd/justfile new file mode 100644 index 0000000..6a2428c --- /dev/null +++ b/vendor/github.com/etkecc/go-psd/justfile @@ -0,0 +1,22 @@ +# show help by default +default: + @just --list --justfile {{ justfile() }} + +# update go deps +update *flags: + go get {{ flags }} . + go mod tidy + +# run linter +lint: + golangci-lint run ./... + +# automatically fix liter issues +lintfix: + golangci-lint run --fix ./... + +# run unit tests +test: + @go test -cover -coverprofile=cover.out -coverpkg=./... -covermode=set ./... + @go tool cover -func=cover.out + -@rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/go/psd/target.go b/vendor/github.com/etkecc/go-psd/target.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/psd/target.go rename to vendor/github.com/etkecc/go-psd/target.go diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/LICENSE b/vendor/github.com/etkecc/go-secgen/LICENSE similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/LICENSE rename to vendor/github.com/etkecc/go-secgen/LICENSE diff --git a/vendor/gitlab.com/etke.cc/go/secgen/README.md b/vendor/github.com/etkecc/go-secgen/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/secgen/README.md rename to vendor/github.com/etkecc/go-secgen/README.md diff --git a/vendor/github.com/etkecc/go-secgen/justfile b/vendor/github.com/etkecc/go-secgen/justfile new file mode 100644 index 0000000..6a2428c --- /dev/null +++ b/vendor/github.com/etkecc/go-secgen/justfile @@ -0,0 +1,22 @@ +# show help by default +default: + @just --list --justfile {{ justfile() }} + +# update go deps +update *flags: + go get {{ flags }} . + go mod tidy + +# run linter +lint: + golangci-lint run ./... + +# automatically fix liter issues +lintfix: + golangci-lint run --fix ./... + +# run unit tests +test: + @go test -cover -coverprofile=cover.out -coverpkg=./... -covermode=set ./... + @go tool cover -func=cover.out + -@rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/go/secgen/keypair.go b/vendor/github.com/etkecc/go-secgen/keypair.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/secgen/keypair.go rename to vendor/github.com/etkecc/go-secgen/keypair.go diff --git a/vendor/gitlab.com/etke.cc/go/secgen/password.go b/vendor/github.com/etkecc/go-secgen/password.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/secgen/password.go rename to vendor/github.com/etkecc/go-secgen/password.go diff --git a/vendor/gitlab.com/etke.cc/linkpearl/LICENSE b/vendor/github.com/etkecc/go-trysmtp/LICENSE similarity index 99% rename from vendor/gitlab.com/etke.cc/linkpearl/LICENSE rename to vendor/github.com/etkecc/go-trysmtp/LICENSE index 0a04128..5357f69 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/LICENSE +++ b/vendor/github.com/etkecc/go-trysmtp/LICENSE @@ -163,3 +163,4 @@ whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. + diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/README.md b/vendor/github.com/etkecc/go-trysmtp/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/trysmtp/README.md rename to vendor/github.com/etkecc/go-trysmtp/README.md diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/client.go b/vendor/github.com/etkecc/go-trysmtp/client.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/trysmtp/client.go rename to vendor/github.com/etkecc/go-trysmtp/client.go diff --git a/vendor/github.com/etkecc/go-trysmtp/justfile b/vendor/github.com/etkecc/go-trysmtp/justfile new file mode 100644 index 0000000..6a2428c --- /dev/null +++ b/vendor/github.com/etkecc/go-trysmtp/justfile @@ -0,0 +1,22 @@ +# show help by default +default: + @just --list --justfile {{ justfile() }} + +# update go deps +update *flags: + go get {{ flags }} . + go mod tidy + +# run linter +lint: + golangci-lint run ./... + +# automatically fix liter issues +lintfix: + golangci-lint run --fix ./... + +# run unit tests +test: + @go test -cover -coverprofile=cover.out -coverpkg=./... -covermode=set ./... + @go tool cover -func=cover.out + -@rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/linkpearl/.golangci.yml b/vendor/github.com/etkecc/go-validator/v2/.golangci.yml similarity index 100% rename from vendor/gitlab.com/etke.cc/linkpearl/.golangci.yml rename to vendor/github.com/etkecc/go-validator/v2/.golangci.yml diff --git a/vendor/github.com/etkecc/go-validator/v2/LICENSE b/vendor/github.com/etkecc/go-validator/v2/LICENSE new file mode 100644 index 0000000..5357f69 --- /dev/null +++ b/vendor/github.com/etkecc/go-validator/v2/LICENSE @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/README.md b/vendor/github.com/etkecc/go-validator/v2/README.md similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/README.md rename to vendor/github.com/etkecc/go-validator/v2/README.md diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/config.go b/vendor/github.com/etkecc/go-validator/v2/config.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/config.go rename to vendor/github.com/etkecc/go-validator/v2/config.go diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/domains.go b/vendor/github.com/etkecc/go-validator/v2/domains.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/domains.go rename to vendor/github.com/etkecc/go-validator/v2/domains.go diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/emails.go b/vendor/github.com/etkecc/go-validator/v2/emails.go similarity index 99% rename from vendor/gitlab.com/etke.cc/go/validator/v2/emails.go rename to vendor/github.com/etkecc/go-validator/v2/emails.go index 86bd7ce..402a354 100644 --- a/vendor/gitlab.com/etke.cc/go/validator/v2/emails.go +++ b/vendor/github.com/etkecc/go-validator/v2/emails.go @@ -8,7 +8,7 @@ import ( "time" "blitiri.com.ar/go/spf" - "gitlab.com/etke.cc/go/trysmtp" + "github.com/etkecc/go-trysmtp" "golang.org/x/net/context" ) diff --git a/vendor/gitlab.com/etke.cc/go/secgen/justfile b/vendor/github.com/etkecc/go-validator/v2/justfile similarity index 100% rename from vendor/gitlab.com/etke.cc/go/secgen/justfile rename to vendor/github.com/etkecc/go-validator/v2/justfile diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/lookups.go b/vendor/github.com/etkecc/go-validator/v2/lookups.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/lookups.go rename to vendor/github.com/etkecc/go-validator/v2/lookups.go diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/validator.go b/vendor/github.com/etkecc/go-validator/v2/validator.go similarity index 100% rename from vendor/gitlab.com/etke.cc/go/validator/v2/validator.go rename to vendor/github.com/etkecc/go-validator/v2/validator.go diff --git a/vendor/github.com/gabriel-vasile/mimetype/README.md b/vendor/github.com/gabriel-vasile/mimetype/README.md index fd6c533..aa88b4b 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/README.md +++ b/vendor/github.com/gabriel-vasile/mimetype/README.md @@ -81,7 +81,7 @@ To prevent loading entire files into memory, when detecting from a or from a [file](https://pkg.go.dev/github.com/gabriel-vasile/mimetype#DetectFile) **mimetype** limits itself to reading only the header of the input.
- structure + how project is structured
## Performance diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go b/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go index ee39349..5b2ecee 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go @@ -34,6 +34,7 @@ package json import ( "fmt" + "sync" ) type ( @@ -73,10 +74,31 @@ type ( } ) +var scannerPool = sync.Pool{ + New: func() any { + return &scanner{} + }, +} + +func newScanner() *scanner { + s := scannerPool.Get().(*scanner) + s.reset() + return s +} + +func freeScanner(s *scanner) { + // Avoid hanging on to too much memory in extreme cases. + if len(s.parseState) > 1024 { + s.parseState = nil + } + scannerPool.Put(s) +} + // Scan returns the number of bytes scanned and if there was any error // in trying to reach the end of data. func Scan(data []byte) (int, error) { - s := &scanner{} + s := newScanner() + defer freeScanner(s) _ = checkValid(data, s) return s.index, s.err } @@ -84,7 +106,6 @@ func Scan(data []byte) (int, error) { // checkValid verifies that data is valid JSON-encoded data. // scan is passed in for use by checkValid to avoid an allocation. func checkValid(data []byte, scan *scanner) error { - scan.reset() for _, c := range data { scan.index++ if scan.step(scan, c) == scanError { @@ -105,6 +126,8 @@ func (s *scanner) reset() { s.step = stateBeginValue s.parseState = s.parseState[0:0] s.err = nil + s.endTop = false + s.index = 0 } // eof tells the scanner that the end of input has been reached. diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go index 554ac4d..b59042c 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go @@ -3,7 +3,6 @@ package magic import ( "bytes" "encoding/binary" - "strconv" ) var ( @@ -110,8 +109,8 @@ func Tar(raw []byte, _ uint32) bool { } // Get the checksum recorded into the file. - recsum, err := tarParseOctal(raw[148:156]) - if err != nil { + recsum := tarParseOctal(raw[148:156]) + if recsum == -1 { return false } sum1, sum2 := tarChksum(raw) @@ -119,28 +118,26 @@ func Tar(raw []byte, _ uint32) bool { } // tarParseOctal converts octal string to decimal int. -func tarParseOctal(b []byte) (int64, error) { +func tarParseOctal(b []byte) int64 { // Because unused fields are filled with NULs, we need to skip leading NULs. // Fields may also be padded with spaces or NULs. // So we remove leading and trailing NULs and spaces to be sure. b = bytes.Trim(b, " \x00") if len(b) == 0 { - return 0, nil + return -1 } - x, err := strconv.ParseUint(tarParseString(b), 8, 64) - if err != nil { - return 0, err + ret := int64(0) + for _, b := range b { + if b == 0 { + break + } + if !(b >= '0' && b <= '7') { + return -1 + } + ret = (ret << 3) | int64(b-'0') } - return int64(x), nil -} - -// tarParseString converts a NUL ended bytes slice to a string. -func tarParseString(b []byte) string { - if i := bytes.IndexByte(b, 0); i >= 0 { - return string(b[:i]) - } - return string(b) + return ret } // tarChksum computes the checksum for the header block b. diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go index 5964ce5..a118017 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go @@ -6,41 +6,41 @@ import ( ) var ( - xlsxSigFiles = []string{ - "xl/worksheets/", - "xl/drawings/", - "xl/theme/", - "xl/_rels/", - "xl/styles.xml", - "xl/workbook.xml", - "xl/sharedStrings.xml", + xlsxSigFiles = [][]byte{ + []byte("xl/worksheets/"), + []byte("xl/drawings/"), + []byte("xl/theme/"), + []byte("xl/_rels/"), + []byte("xl/styles.xml"), + []byte("xl/workbook.xml"), + []byte("xl/sharedStrings.xml"), } - docxSigFiles = []string{ - "word/media/", - "word/_rels/document.xml.rels", - "word/document.xml", - "word/styles.xml", - "word/fontTable.xml", - "word/settings.xml", - "word/numbering.xml", - "word/header", - "word/footer", + docxSigFiles = [][]byte{ + []byte("word/media/"), + []byte("word/_rels/document.xml.rels"), + []byte("word/document.xml"), + []byte("word/styles.xml"), + []byte("word/fontTable.xml"), + []byte("word/settings.xml"), + []byte("word/numbering.xml"), + []byte("word/header"), + []byte("word/footer"), } - pptxSigFiles = []string{ - "ppt/slides/", - "ppt/media/", - "ppt/slideLayouts/", - "ppt/theme/", - "ppt/slideMasters/", - "ppt/tags/", - "ppt/notesMasters/", - "ppt/_rels/", - "ppt/handoutMasters/", - "ppt/notesSlides/", - "ppt/presentation.xml", - "ppt/tableStyles.xml", - "ppt/presProps.xml", - "ppt/viewProps.xml", + pptxSigFiles = [][]byte{ + []byte("ppt/slides/"), + []byte("ppt/media/"), + []byte("ppt/slideLayouts/"), + []byte("ppt/theme/"), + []byte("ppt/slideMasters/"), + []byte("ppt/tags/"), + []byte("ppt/notesMasters/"), + []byte("ppt/_rels/"), + []byte("ppt/handoutMasters/"), + []byte("ppt/notesSlides/"), + []byte("ppt/presentation.xml"), + []byte("ppt/tableStyles.xml"), + []byte("ppt/presProps.xml"), + []byte("ppt/viewProps.xml"), } ) diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go index 9f1a637..cf64463 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go @@ -120,7 +120,7 @@ var ( []byte("/usr/bin/env wish"), ) // Rtf matches a Rich Text Format file. - Rtf = prefix([]byte("{\\rtf1")) + Rtf = prefix([]byte("{\\rtf")) ) // Text matches a plain text file. diff --git a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go index dabee94..aaa2755 100644 --- a/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go +++ b/vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go @@ -3,7 +3,6 @@ package magic import ( "bytes" "encoding/binary" - "strings" ) var ( @@ -43,7 +42,7 @@ func Zip(raw []byte, limit uint32) bool { // Jar matches a Java archive file. func Jar(raw []byte, limit uint32) bool { - return zipContains(raw, "META-INF/MANIFEST.MF") + return zipContains(raw, []byte("META-INF/MANIFEST.MF")) } // zipTokenizer holds the source zip file and scanned index. @@ -54,7 +53,7 @@ type zipTokenizer struct { // next returns the next file name from the zip headers. // https://web.archive.org/web/20191129114319/https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html -func (t *zipTokenizer) next() (fileName string) { +func (t *zipTokenizer) next() (fileName []byte) { if t.i > len(t.in) { return } @@ -74,15 +73,15 @@ func (t *zipTokenizer) next() (fileName string) { return } t.i += fNameOffset + fNameLen - return string(in[fNameOffset : fNameOffset+fNameLen]) + return in[fNameOffset : fNameOffset+fNameLen] } // zipContains returns true if the zip file headers from in contain any of the paths. -func zipContains(in []byte, paths ...string) bool { +func zipContains(in []byte, paths ...[]byte) bool { t := zipTokenizer{in: in} - for i, tok := 0, t.next(); tok != ""; i, tok = i+1, t.next() { + for tok := t.next(); len(tok) != 0; tok = t.next() { for p := range paths { - if strings.HasPrefix(tok, paths[p]) { + if bytes.HasPrefix(tok, paths[p]) { return true } } diff --git a/vendor/github.com/gabriel-vasile/mimetype/mimetype.gif b/vendor/github.com/gabriel-vasile/mimetype/mimetype.gif deleted file mode 100644 index c3e80876738f11cdbdb4d4328df05fe72bf48a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1343793 zcmeFYWm6n(@UA&C*x-XZ8GO*-5Zr?YhhV`SLV_gt;Dfuny9al7*Wkh3EjHQTzs_#$ zeuh1#Up{ZTx~rb9uDkE+t&)Q98}konZ&04Q08cN!%>1H`&o0gVqn*PN!!wHNI{FSy z&M&U-x<@9H3adP#(yZXIiG@|&!;@aI86898Hi5Bg+k2A>t9HTh4P66w4^ML|>!E3d zxz*nePA(oEU-GNJ-P}Ls*EVOCH(cL7TwLGA=9WJ^y;QYyU*6nz4NoktZDy3$e~C#S zomq5`N^?adyG5pY$7fBgySnj-&$@qnUi`k*)IB&c zzY>>M@$mHXQAbNamIlrd)@bsdjp>26%$2KT#d~RuH|2Un3C5sGIjUxyt=tNyZn9c==5t$hEr%_OW#P&|0JCcNXjj5>fG8p zENN&DOwNzWF4_8V_~Y<2IIUn~_h4*xX=QVFaANlI<}N((%R$mubaEa?foPF#2kl^gvhMYqWae6-r?i(tLoOCj=}Mr z{iD;1>!jkUZ#_c`Yn!R1wGo-cVd;fwrM1!7Wnmdbqq9pfxn=O=-0GH|$@!Jr`={Er z-rlk4^s>5<>4nCwfyk_ql;Y~*`c}aIkAm(eDuDLCdg%UPtIO+X%Svm=^Kx;c0RPvM zlC!z3wVJuDy`>|rt+}(axi~i$zW~300D$9vdhkDg2mnR`fM9CH`uzT2FcF*aSbf1@ zID|ntTd|>VIEtLlVRNjZXfzHg8%eFySUjEt)2=igZ!DQi(n8ao>@vUO9OruCSN4dFjxyqo)VQZqfYPHU6Fp@^4rTTl5-D0K5 zWJ}FPtLy$mj!J9oR_E9Iv#rV2x}9D)3O223Tm6qg1QEOGR9nOTXgq^Tu4;SZ;bc0W z5k^})q2axT(!=Y%Z)a-^X=)**6W?VVC+}wU2V7f zV@d2EX1dz%kLQY1^3=OK9?#dB9Cv2AJD;z22a!>)-t~0-ygym2`Y_wm{rmZ5e=_e~ zZ_nS~FZbs=v%S6l{sGWoyKq!eyWK!AbNOx%j^N2|Fhl|NBZOGb?nfxOP5F;7YR{7& z;m|PH9)dB|ZZ85>TD}*_(Q>jE#XSPskLF*o+m8`GD&LP4dpg;VlR{@bh?gU^KS)qy zt~f|k6+Asi(okSMOxDq}KTI*OsW?nE_B=gIGYexqO1Db2KgzHxtvJebYB@d1avfnk z&URn1KhF7jRB@c^`*eDo2S;Z+$qylQI4M9dSDq9`3!a@6#VfF#7ANaDoR*~9RGyY* zd!C(^<%hAIl^3TvoK=*UR-RQ>x160-A?ruj&a1zzIGoqC9aWy!c0HY)*Y%;ZU(^qg zI$ku4F;`tQP6?i0G|efnUw&KCbG&R`v#Gjl+4MZWY~2lGziK;3b-ZdnDXqHdxM(@Q z>bx0YzwUZialGz+IjXwu`SWys-3!3rxamVBbGqpVvsB*<;0RsZ3_{*=+zt`zJKYYG z+g9I>P=C3&9fgK-+>J4&Io*xJ%Bt@sI9f06Cb>sB?x*-yrwjqY$JO^UV$T=%vr-tG z4|8&4&JXj7EHw`cs#MN=qiSzCAD49WogbGC-u->OpIT(tY=hhJTv=wa6115k<0`hXa8@o*3}cfAw}9uyvb@ogiv z^9n^A%8zQD;v&*pu3yqIOQ5JRhf4gQ+K-AZ{aXAHg!zj9)`}vat7lxh*%v?pFzZJ{ z*^LHD6CGp+qEp%RNzbfdFGaFNk0_8r0_loncgz#zqGOqy2m}14>T?63&^TCu4yyWP-9&q@c`W-!ZX12W7tj zgz**^;L3uffTcGf$opS(I(je&@h%4%iah|u3(!kLKaAwNpw z%c^gDPqE=x=#8N4hFvIU-**tI)(9Yb9%_%%M_DH<^9tQ83hmrNd!&_*tP2js>7&5G zBSgvOk%9)|^g(g8#sJibu|O!Dp(uCb3@6vlLE2((Fo(AZr>>`%=as_6Eh1eA8 zHKw$nK8iU&B(PkXFb%B4KA;teoXj9`dq2vt&65H&D$zpNp@6pm7{Wu}aWE5uX+Y4h z2@XZRPoA=h%6A;es5YG;8N~D;DU3H8fhcri!L&HV7-DT^;E{-?&$)a#uZ+tCG%Kb9 zJ`u5QBOm(lmxNFP0d%&~kOB0N-N5X>pP>JS-b-N^YGl*6=k`>Wi3hwP{RlDxzhMB$ z(6u$ullMcVcFSkPydi9+iyYsR?K-Z!h@)ufY!#u3VAc2#5^ggzC5-_>2=8L%Hh-BY zCo3t-xK@gHRr!fhg=RofbE(K%?-cw?~y;2~4k`XbIh9 zSnnNgkZ2hA2cbn*I==aT-=dLKkGw6x;W_dxrQVg zPH-mRe5?q%UQScRn13ogA?b9swsvF57@%nYhZ|I&m^t}V>K^IdMW`arXQa>fC=P)D zym5&J7+@~Gi9fo1LW}k+Vmuqde4vVJxN=WqKR(H}{bpDJ2S6A+Wz!_MZs5X9lkG!) zEN~Ew`{n386;9)!>b27%=o88ecsE`h#VpyCgUQhdMlNqj$NGG~SN4u_GauU?3SusI#P@$f z3-JKd%6?8d!CK2pTL(=w-Kz$1QR`3ULJ9}e;o0Nn8(vp}J@|XJ*}%+=GLA7$HTz+` z9$wqVkjI!^PL8m}x7%czchs4G4s`F|>;TI?N8*0A&bFr5g09ngi@?iM=?ThKAKk%4hN=c9=lPhcgu7K0o&zitDF*oIRu) z7=3jj{mncD+60ud_jaK$>@?DnX z-DZD^*Ar^*o8j=yTgMdNM~;9u)2o~Jwj_Ux@g%nwTRomEk-C5Ho&E`L&AxlF7Vz&h z?UgtjMgHte@t>#-khlzZdHz5Wa5L2_{22H1uTe_C^+ka2UyN74bT*VWntv?RXyslQ z14>emP=0lNSpFx#6kYEe5X@sj|_6ISVRYT0!CwL3*fMldE<*tF9fjA$gbuEX=qqsDZK6thMP8 z+eM`XMKzX2nG8fZgQ8*d(Y!Lz4i?c&LDAGlQ7MJd413XyW6{Z=7&@64c8eIxpqNCa z7{kIC^Su~qP%JZjtf@@w#Bj`ei&*2rSh9iGWkhVkUMvZH+$)(leTz6*^tk8pxVWG= zg1tB@P`oyMJf2KExkbE2Q2e}2SYBbg`d+;IaNJi|g12IVuU&#aA^~2W5Hyw$a*_}R zPDH>GBNY>)?Gj@ViSgx$iDQY$CyA+GWKudTDN`{i+b$^=k<>mGFIS%A1xhdvWtXxK zmr!Dm{TV0k#q##Mpi)GnT1Di$@kq_nNNvn0U5Xg7@2o0b3GXT5^p&En8&e{dQ?lq& zd6ZKBzNCo$46Cw8#o0@h1EqzBrka+gy3nUhyiH3FN|PQ)TPREGv`g!Ur4K5m58I`W zBGSjp(z99!g{~nn)T(2lKyEUrc2R zd}U&yNJHehZXQWv*+C-hUAz`j3Mnte(keClRB9aQ>vTrtau(<|LGGGa z*!#8Yl9a(~y=-T!jFYSkd2(D5ghlF+NglzLACj4+vR2>W>})0S)tky z7w?^x>_8si0Lc`ol$ogb^Sxp&qM}l{vKlL|v@*M#4W9O^+?$dqijAh#kfgv6(%wPX zok`Z~5S(X7-l+`fk0cy*AREW>8&oDA7J*C}63&Z|Ek;r=ceqq4SHaIhYSwFhX3(!z zny<4}PX8)BoFLfFtgWTYPR*>rAgF~l6rPFH9bwiUQj7uA z2b5K2Cv_Bb^>hXGV*T~933Y(odd#SLa=Hc@^9Ft820vf}xg)_}hx!DpMmAXEgHnB0 zWrOx@gQ7znBRev%=~pd`orLXoDvwI80Cx3jqxxoLYMLqnaqLo|C^BlQZ|Xcv*yD|t zBDE|Vja0WrJq*VEO@^Np(1h;++ar9N^2RmyA_(PgklQAb^JZsYizv@G)hvR;X1?PR z!wt(%JIoLrDuCXk)3QgiXpyO@`8Q{_7ANTz5%U(aPm;iRN#YU7Y)>a`qvp6T-iM10 zzFQ3pro_20vljM3b1>stLcO^{f3NI5sp(4HBXYD=&J-ice+-! z{T^vUK_=Kmt&n(ACD^JIDPcD;caj__KnjSvJvaDDt4w-5&CMSi){VNb8oFw+d+pb| z$t%B&OvH?jC{C7kx>xa?{^mPB=bL#V+30M#w(GS^X;S%3vM&lbJnt=2=~xo&2Pe2> zTlGCe^*Tt)mFc4T-(bMGy=$!@R5$2>P%x?#P>36>4?r!T(!5|x`GH-t`O+2Iq5>*# z(-ees8+CWQm8eBk!F=w)`a>3T(k~^8acnezDh-ZV;zO_uPI(P6PxSwqh-sZvonh?g z{5?qO3xS36jS{!(bv3{$hI|E4LjT)V-M~`D5QBI{Y&cku8w7@9yw*VbIM+&LEQSoY z7!}AKw#6ZkwN;nLct_0bBO2W%F4q0|yfZG%9mqX=WH{!NFr;~;77@>92pL5#DriFi z?sUB@<`Z1=UB(HXj;k8L8x2#OA+s*GIE*iG8}Ejq#=Q&1$&S^S;`zh?6QKD|zQSd_V5O?gVN86qQzA zY&HX?X{L-b>3)-fOeFZ=7%tI#uD)}5f=)ql5Ud=&Sm>Cd%Af&t1MVe~2qT*mw8e)B z9WMyu+ZTk;#qcq7Pq8|W>{K;fch#(9j_hn|^4x$!pxtQZGw~Xb1hYj(@xd6cg)yf= z{G1tW@sHAfTUMeVLmZgO(@Vl8%UtP;aIrBM?n+(5f}Q3(mh>cO-tDs$3Tnd=&~@=a zXIS)dMohf?pX$7ROoxIA#59~w^9DU>4#g_o&V6fU!E5!W$_l#3yi36frt~ywAR6lp zUxb>D&0lKG%PO4BHE=W>riA%M8}ndlzE~gPVTMXQ=Zy*lr$R74Ky*CBV=cDC^Ej6a zXsBbpV!j#tZ@OIO zKA)u7cnZ(fE!*a~>WW+22T~wrM*e4Z9+Xu-k_~avtr`rpIrNeeioNN&0~*rhZlXLA z!y=CzM&nih)Ko0VL~_ssg}|su*Qhnc2(8Bu<;S;vl0j+{V`C#o<_$PY12y{wkh6=~ zO;XRAvlC*x@XloOE2qUAlZl$@E_x3i_=*n;53ud=m0-K&X@Ba~lH_`5E2scu{*6xn zuZXE<2RG{ArshDTW-nj-L$#-e8l#yLXTL5U099cGTxy1MWJZVs2vTYLO$2xx?4fw_ zjCjBltOw?sp<`D>8TVhGDZK)otP~J7z42 z@G+FmRettkiLnC(oaK8KTlX+N&!^*ui(_4vnSTmrpw^DuT9w~n-6-a$0Di1%&eONs z-TycZi#@yzCR@5f*VR=aIO;|%p++4{KY9d2`yNH5qxs0Wyj7)-Pn6HwozBsX?AOCC zh3_33IIe*=jz1I}0*{XIIUod1M;82$Vknvj16m0jJ^7}7Rzj6iVt2#(a?Sc$z<*yW zdw;cOe|7&xDz?TmHbvTP0r__fknbowh;)2XzxK=h^xFTLwnp*b==ir0B<4YJNw*J$ z2l#G|Pe0z0t@~zn*p?J}s4I7<8MghmO*9V`N@4koerH`Dy#W&Zbb>R~~$+1!>W_;^j<$@-SQrc%FdcPpWbE@<- z#u&!OymFcsyDWxb351>uaA}9;TIOY)NGM!_#o>CSD4@sI2^*{id7!ZR{<@QhdYbX-Q8)Lu6LQwNOA^BL<+G-qs@2psDi2Dft6c5tb4#DVHdEW? z-kdpK_`LQAyjs&=l0f16w__RQf z2AEC*-VY!_16cB3Td?|q%jUHfOV0UXBUW*VVt zjRLl*@>zP9hAqxpJ%7KFUKw|ITy76f>T!*9d%b7&Fkp!y4a0R6LsjKODuaDCZbI8q-Sj^P0z&B^7)(CKK&d!(i`SOBjQQOw%P>8059L9TEO0zoNIFW2uU zbXw!D#=(R368`C7bd0WoQ>5>&#~&Dg3V(mCV|@MGJLq2-#s)cpeZKj=FcI&fvLik0)Bf1_`|=9F?p&=@W%YnE`yE_aI*eF} z@{=M%oE&d4eUeq963bhykK<1-zop~I)7SO^BssD-bQGM$wJL%60D1%!3|@pI@k?>6 z|55_0KZH@w3~3h1m~3F7u*@wIM8^ow7$hMyjgY}d*LndUXjPN%l-~YuNS2@kB7*7O znCe_iFLC`rV1_LTpH7BTnt@S4D0aKU6n4<%d`jAw2hI1kkL-GeABR)AVVYCT`X9s_ zAN9=(4jvULZPN##tV4b7jG9@0$8f@Cz`ELjs%9r4v7gPx0&Se*x#3iJKD=w@v-0}m z7K_%cTg{%svnF0i{9m>|oLk2!h>&AhE|TOlKb4A06I$W~8$ubhX?U>cjA=<}%JYNQ z<+$jBDcuP__z0!yTEFTzcJxs6f6KRSZa-#a zkW@9_7R~(21%l0F-)twP%`97$=6UK^m6y#-+E;3S6A?xx-{Grry?eYE%^%W0>xZ zmS=xAiI4Psh|>x1+q3(UclEU2`o;fO)H4zpciEd4@K@vD~3&l;r&tYVkqMLAz*+Nz%B5lR-323mDR1UV>PN7B&A5KP{LTaqW!`e4$J`0(kCANVl`vIhj32tl4bg83vlrkThHHPvyVCNen~o>HW4 zH6=-dVh6hmkECIU1zEQu$4g8@xEcTc_E7o=QA$G0wU6cVCi&>Ef`r)D+50q?O(Sc! zx3T_941|~Diud-j@!@h-^d#+y3W5s>aUoWWOcA0o0}Y9apaZ54iAri%wuyPD)-d@u z%37%l$vM6VR^4`Gy_SWPI#out!(pZOD+{S#L#(+x+Eq-Sw7gnX$v6X%Z&WQ-=F>*y zYJCoDibanm6-{3UPH9JU?fmxpWwo7>e~I^@&0P;G^W-^`HsCuJYY*@`TWi@Vh> z=3Ix^is61$^IBQVeI6?Ny`J&T|7kJr-w>rZP(&k$bSa-|<5-%cLnBO3hZ*EyC&whB z8HvtPKr(EnAW%6I<+4=t3hk6%lu|1(b*VUo`cz4`Ln~E~r-U=qUe(&WKW%2IRA{*3 z#UWEW_i3rDapUw|sEAIXDQCI7yn|NCS#1&5a>ct)wrVJ)Zl&IGrC;`$ZgYoj?OsFG z2Q){6+h^5=)a7bhc{{!N4!xEZk2nVpN8>{geVoLU+AqV7ru`U5{qCpbx&S7^4?t0a zfrU>Q;qp!vBw3vUf-4Q(hE7&YqVEkPRvOb{GR?NW>r8pBRA+n8*@=s;*G3A4mNGdz zR7I{6H0m|inN&K8!i?5dJj=h8RM;#U{Wd5N%yMs-iEDqAvx+Kf_+S%Y6ZH_eLnge{+>A> zknwV~TUh~Vpi2G$LW-iUebJ(4er*f&wiOLNtcaSSe|YTH2SlRcZKhBV4?u9<3>||u z&G0_*brS)wFcAt(0YE4L&U{c9*`_%udvh0MJV;gtNRK2uM}5O&2FBNMS|xp6tJ$xS z1(MUF4XU*bMVWyaJTEMnpFO%70FfNr7&SyxjKcvNu1U?tlh-W>x&V!Ym}hq3U~#QL@+9+&yI%Rwj~gz2h>Dz<8z^>Yi}bQSLG^IlxB&yOuBuo2y8B1xeB7 zi-Y40Sm|u3Az~0TR@Fc(-FgrR!2S6!0WF<=n%&s+GI-7mLC` z5{J%XdHi2?o#L6ruXzAA8tB$Mj@J#gI62bvoWU9@=JVI!7Mw!P=IeMV1GUQKy zf9?yMN&+|G6(2u0Bko)z!LHF3!8;06omG4)fFTJ$`w>TXP6imP7&yb;`ykr8&(jO! z?Mq50&gBN@jfv#L@%~LpR#f2u>J!S!Nx!4OE5Y!p8$>l2Ub7}TO@s}St3wm(LumIe zI!Gs^6CZMej}TH}=~Ax~B+t_Ou3qr|+=FTVAa20$+wy(@H$IEEG>38@iE$w#YQdu= z0hw3N(q#X^ITB3OpMX0g5q%>Cxd0O|N@L>?GV)7&Hk4uBtm1WIh7BQ9+gyp0qM){&NtbT(fK`q z`W~?d@Fh0j$_MPi1ODhG;hGWMk4-1BY^@@n1JY0>K{hKI=(VG(NLIGMwhJko6P~c2SgS@T6RCqv};#5 z05=$dyTFYbEF8zmpSjwGD3(^RwkqQLR%*3GxmnO5VhQE}0u1G{QQt$3xktQl$O94a zn8*nJ7q=_`Jj;?p>Wj|XeG7#nL&c=3ME3E-II1jX4jG`*n^C1C0sAD0>=BdVY?1aP zF>@-3TcTo>(GY3|&j*qej+P|3@lr>{)5viti*bJ+rPq~8#^Xw23`1EVN+I7$a#Z>9 zmzWD4#=m4JT_{gT8cxVEP840_l}1mLRSQ<|(-nnG^fXMo^edl#pRg{Ts1B*Cqn@l! zF01twX(Co>*H#I2RQW|eX&W`!+||}@rQ+eH)bSwD`G@vf@~a-JvDT$YN0cdRcGWbI zDbU?yzf;68hkU;=%P2MJxYZO)S#=;pwPbQ~!o7crzj~6Ge!}VPOf=oR)vLK;QRGs# z@&XR$G9&FG2jeV<(5lt+=+abN&~$0R^m=jHRyMsa%FM26Yw*Ez)q~m=!OVfqjMDnl zo{r*o-=f3hnNywOBlnp;oVv{^=F2Yit7N9@V&>S?B z_`b_Do)yfReW;FmSz`E;t#o3ho4uN#j{+&O>J|<-g-d zv<6@1oO-23Ue{cnQv;5l5}rUChAtPxWRCgIyY@ScpB(c9e7A5b3@p7ndic z;h<2Hr@~bu<7B0lm!+idtT9%y$=S_OUIXs4grJYjsg;m56CQJ0P_-vlm#J zqnMnhVUO$_XyRO#Q@Ax+>?PQ*1=Kk`8o5apiFg-hWfr69wIhAB>rod4)U>lu>x6UW zMVy62NZ7^1=_UPyr2J;yENj;~X$KK5y*gZ!v96S*DVGz_QsA7taMy_pTC(rd$uQRG zm{_to*MTwVC~@Y!`}<0ZQ(Kc}S(!^gtFR7+vgRPs+CSTJ-e6{vz!&uOFd_K z>C284G)jGOcKyLWdMzUQf<~*(m-U`oykAr3Z2k&)qvP2oD zEe>?O{x%bb-G4!;*#udng0+jJXRhZ^d-f3G-PPe?JWTW+o*R&DI_ptmeQWGsu zYxnp%EWpkd&wnhmie`A2EsyK>cop_}Xm|K+_78n)1j8&3#rB0u_q~kvMMf+=efGtU z_C2!pCD5&0I`^fRt;W~)<9Ru6AJycqEZ)mnJy=;0AX{WTwUkP=RBUDyX!X?eblCl^ zRA>0rYggZrTK9l0UpTFIln+;mt=LSgb&&@&xd-Qdhp(r%Rne_uL=Kl2t>5KZ>(pBB zI~}U}A1bCEs+1m@_8e-=SPS9W{LntKX{pr_wAu5vd1GQ@QhH?KvSf~TXmNDZk$e=1 zW&7B9Wcp}rg??nva%3lAW9)Bhqiz#VhbD{-AV9*&1LIM{%0q=8z-nJZ)LuW%@5k009_m zK)byW4&chXdO@XH188suqe-<#b0bPf5v8;PWnp$Hv=rFg9Y9~gO87Y-0TgTr%2Y@-1V1riJ&kH}yBXJ^h&_&>I|nFod+{T-k&ef(_Eu7dSGy;nE~Zi2%WgerVSQ*IZiI20_&7R1Q<(hV z32`KdIF7wK#XEODBB$gLH}D0Ue(Me&>)t}?Siy#`5@AkV$xjO+#!Anf{f~yqx%sdG z{DU8{2e~6r0pD#L{wsUvD4k*sEuM%-#Mh~UJk;$E7**eOd-}-h4e61a-0`BEIx+bA zw_ITPkO~gwB_7}k4{$1BT4+OdP~He=<0XB|0|>t!ak<%w|A2yjO>PNhN^gvVqS5H5 zYDoo4$znnA0kmbVByW*vO7@b$UnT#dNc>YF0o2Qi;b3B7M6%?+-84OJKo_94bg~29 zo1(e`pr44|-h%RuOMZ%n0YYj2AuzuNA#Yp)?c9RD-ZRcRW9La?-~hlE1GE&KbL)3pq%3}Lns2^46ZRF`Gb*g*BU%P zECie^1WvK_!V}w`>3PhQPCe>Ob^4xqjRJ?TUpxpBe} z4LEAMG*F#F!cPXU8>FeyuPI4;b!PVf(+Y+p@j6oy6fKr(k@@=?NSiMM^eH_1kSG0S z9MPWWdwn9EFDd!6;Zm4bOlRcvd$Waaleol%zMU>r>a!?Ji`eh4Hrg_Hsu@{cY;=5C zZJz!ubhE4FhyB{6%i?MuFM|E!RTuRBIH*Xa&NRE@@nT)ga_8!=$LH%Gy-9gnCO=>9 z&UEuWTqC>JpKgxt)$+C^{{G3|N*%5H7hrk^6ov-Q-ReVwJb$um1!0P;CBp{P{ zn4un!TMD40CTy+|4@J8Pk-~@lv;sf?@r;V9r2I)3nu{o8m?gtG}dzf7=4X` zkjbLC4x&M&=%mO@eKj@Oj|usK3KVwrf#}p`a+OG_HB;_BS@Pmvw6USnl<>k6345k` z%WV;xT7a=gX(@^9DQkHlp|NXG8MR7x`_3ZJ}BWZ)x`fjd+`8a z6?2x$L}hWd`#L7|#1dP#-hz{wAcUMe^tMLV*bB{V863egB5N6M-fWE?3UL6?N3+j? z>BZ#wv)-ZH02QFwo9_0wL}4{8o3$!#D|?APk8}7HSsI=A{p_#1pZ2i7O8=2Kc-;q* zBYF~fhWDv(UM6#r}F*^Di zCQZV#^t-R*A!v9*pMY@VK6D!?fWfXAW|q;Vj6v&V0`nJu6pF%vltg_-)Yn6HFcEhl z`eA4d6c@3v2X2!I%-^MBHAwdXtfg&U)_&<_-@?Y1k!GaC_u_Xlm(F~SKPF)G#?PQ7 zstND@Uhx*;J8tp<;_l(V`sgL9^J*2eD?oat0=;FY0-ciqT5>c4fV;0g{$Uvq*OH4< z=lMa&J%D~DUV)3rZ+VLK1|lSe3;__l-@~FE2nznTONVV>j=@<5f{H|iFb(ZUX}my4 z66bvp{B+V5FYy$O^H8D94|phZaK0yQfaHNiz@L}58fURzfHzwdYVT#;nLa^BeH8Bu zDddl(-+9}1ZOb;UO1`^m$XqTwvQF962*|p2MLMdd#WO&P(i21syV<*}RFCfz(EAeJ5!*7Na4QAt@B-4TESO(4Dj6q^ zM)~j*z)+-=b!b1QQ^_INQ2Lag>F!d#L?3dD8%!FhFJ^La5)0B;4hY>eB?sKwabwG9 z2p1ET{kMh5U@y#ttF!&*>#Mg_l}?^5woA(T>pLci(Kz(}uUpQg4zqN%cl;Nu(~1Wt zJ+idOWIqY3_MJ-A?60rG7VJ8O9uqqHqwe&4kYX z6&>?baq>hvX-~6elYR%s&TN6wmA6{SWJ=X>V&1ibn@-e^U54q6ez?SPx!LrgHNoOi zxchxI@&aZoU8Wdl_n41f;Vj)o`EC_`w+gz+?po(XML*Mz2o9|g7Q%*GqC+znA1jDa zq=o|z`ZC^s1Acd@ZxwqYDXkEn`henNJX2Vg4w9~Rc1Fm;&ma*AITs%_tFoq2J-RMp zYWyU#w%a083y|)IHTL^do4}@$PU>+Qn&KzT;l0&T)b}3%hI10=QTH)o|CuVh`+}Qq zL!w3c5T(4&CdD&pX?(D&*Ky^>6{LcG=;pOiW>-?mfH)$F|F}kv^Y>a?^p| zkbV*J_8hbdoM%zUNFi}!;xO2nRe6{7?eHjNhAPdSLSJ{yT7!g10}b_8AkS_ehOyls z&6p7cYQ_kbS%X8w;0fNj^B7kHeK>Mc-0UAR(lAMPfc{m`rZZFZV z{1p-H8{>pjPeUV|jhQGW5OVhSP=2nl7!>$$+3AakSPyPqg=)Eu_K;gt;$_lJ{Arnl z+)65P0%g=j90L7@$0*MY;=$xajfP0iN?UnU^`;#HClV*Sx=!=+OyaqzT&Aog+%m7( z)dBTC>0H8^vR}#A@~*!z_e%X{&3d^f8Kt=x^0)CDhSmutcE^BKr)!vy*eG7-;5z-sZ-U*$z5Q_HSf};cxF~_?YTVjZf=#|wtv~Y0`&O+9`L-T7LoMHb$+=nvnE^n zxq^Prlh;18{M*<&nfQMbk0tX8+rbRGQ2|SR8+!!$vYd~Lj)ivw)e6bKpN9Sg7RbFo@q2dgNPqZ(>3$RZ z0MpPBx`Yr4q7q4%zm=mSX~`oprNg~?PwMak;z>suR6xcxN-h&c61hVht3a9hgNzGG zbu~%_nxOF9p^V+3w%DOr&m|u*H@Y#8J1BTq{_ziBaZg|Y{AK=+jy{Im;udqyLb#Bg z5S5{2gjQjXQNbc5CYITSp2f3}#h)G)RtSrwXH6|+{Y+1mTgX;R&)!nV-b2qZvd5$z z&aqO+xlPY?RLCWR$=o=`g{0?3FXG1APcNqDp=ID@F5-=}VBsu6@<}l8i&(x^XAsaU z5-?>Dv?&sFVG!~x67pvd4l5FlWq6ZX^d^@PYc_MlH3KVzq5X^`m0-E5>(E z#qW@e8t5e&cubn4C7QHMTFfO{Tuj=6CE5~9ItnE^>P))-No1x>dNw6`E=>BKCHnqM z24N)zu}tq%OWx-)8J3n9)-oBjlo<6e8IP10&oG&+l$dNInM{vLOs|+eJe7PvGMS;5 zn&B~y=uYGTYdc+PE;=dY0PyGuwrg+Ql;4 zrx?C}Td@B8jWOhX_bH!u%L|XQV zmgO^Z*=H^mH^DMD2^M#SGIw#z{8_$+m3@t6@k%Z8%4P8` zE%UBr@o6dZ>0$95Df69S@mneL+h*}UD)YZ$33w_CK(fHm%i(yiK+^I+T38Tsc@P&Y zSg<@;0v4iB9-EYAKKE zfkls$N6)}wR?1_xVX;T$u~)FTr}8)?EFQfg9*;GFv?76)HIca@k&87+up&u)jg$i-G9SXm^&R;*B2tj<=VS6O1p zR%%mO>cUp$Sy|@KRvuPa9?MpdT3M0HR#{qES<6<{Qd!l*Ry|T#J;PSBQdzUjR(n)g zd&O4wRJn|X3i$uPfB%Q{``?T7QwK8sFVYWI6t2KlVIQaGU|*DEQ)zFT=IL-+njfZ| zQAjP#_8;j-t8k`JTKYevpI=R-W>x)vq@Qu4P4bCU`}TjNpUtE9d@TqQ`#;jp#o9@J zi13?J+TM{^ma*$E(Xa+L+)Z(R4|2vutgTyb683=zvtRSyx{`qmE<6I9=h z-hDRa9D$}$H;&R4INeRGM_zD_bBuP?OcGRZ+)wu|_;O7NKjT!-Jl4R?f0@aKq)( zrt^Sb{HFVHOet~;{YTC7jwKiSdC{lVGof9C59`;akR9i??-6flh5Lg=4POdZm22BG zqf|B>4;^KDex4Y5`g4xwld1nYv&b~9K1Ace6FvXtb}G`=WQ!CjZGO%@y!=nI@w)0E zd(CuR#`3{)C!OlrH+k&3*7s!U{_meh4u!biH#Pw(>`%K?@7wE-=mWmKoQw+hJS%3s z_WpIV+9ok|C`tS8uY`ByKjiWLwPeH}?A;RN+ddHG4IHeR4LNz3xXai*!CgK`-QBg=jff#?O&)Vz;Xb9!!;1dh=qch0Waju55%>DqeNDgNF`^$ zY($7MBNC6KMDk(y<<@Ck?zyjhK&s|g2Pl!CKq;Bs2>`+j73II{Hlci=dLy6aH8T2G z3`Ju$$dylXTNPV)@O{^(yW(sVy1+tZD1-=hhKlwku#kFgE?mLA5P5MVgsVI!c{axe zCIMp+rUV7@Lvtw9bWl(~FUVCSLI2_ODVtYn27dll6!OPT7ox0ci7thP@?N^oz%`zf z(E$h|Z~!12AVuha3VyT`1&_!@tZjalKC5JGQz-~KBNjSFgmfV}6jFx{s75Dn1dLHG z|HqPYqSUaR*G48)bFrcELJ?XShLAEDk2-mA2jwjh-FDi9S|QeB9J{#%z*1i^%=uiE z>i2>(n?q@8N~Kzb!y1@=g_*8dTJ$44IFcEw5Oo}=0NkBhB$aE9C`8&B?RclQd3w6# z)hH{o2JC%?^};=a)ml z<|r~Z@WM6`$QAQM=Pt>|!ZGZvY2_~+*(nn)KyFldf`YC~D;)Yf!XdUP`&ji@ zC`xT=-=0sdaRLAuf@7+=21#FZl(Vc6CIg_~3UN#zFhD9< zF@ZQZ(qE;o{xA0KvMJ6z-q-xyXrsa1wQ&g{kl?Nf?ry;Y2@<>;_YmA&8n@u??ydtxy)RVw$_*}m)C$$are$K>ty z`Us+B?``;`H-@cJGRdHYOBkQr?k2vS%w#_NsSw&Bs)Gxl@sc2FxcMMTuvLb5NW(Qn zOp=*if4=d(N7y7eV6UM=1?9a;3rYVf{TfV6QWBnJo>TH^s!FZg_2LsoelgwK`+!u5 zr%gwq`Si0JY5X=e{Yx*3rR zulbQ%hhA`I@utFHnDewguIJNPQBxqX;ujY7ypVCj_zx5GoxfhQgQtjXuYR-`ABnLO z)R6)Wk4yJ!7lpY%{hL7LBIw+u|Mig{Accvt;)jt&5Rw*z+UFKEk3tX;@b$Mv-!l^w zO_Pz5fUXoskF5tTgc1J(H{UG{L8OK!gUg~F459BsWKZD5;JVL-A@UW~WER7_*A>&! z3%53sJ-!t3&vD1@Js0rYfr`e*br>B;<|Bd9!+GS z4k5Tsf&BI)(FN1Ff8cuGN}~^lNakY(HDeZ+hQ*?U+rmTQQ6f=x?4{jM5hMVnZ7*iP zg$XR(l2F)^)XUNg0>e#(;A2E+Lu`0NggoIiS*z4}qqIf0oFyM<3P!2RMm@?Yd~)E< zwUCJFTVH3gmPI;iO`Rd|#L$-hB#@bsfw7#OeT>SpIgxuTQOh6^KM9doIhQD8m}GyGcn4t; zejK;7S&KM`35qgHuQAISvdd#JE0!}W-wD&6u&72czs6$MY-7^qkW}~K)XiWrL}_O?99$w%zHXuPK(i+hH+HzkJ;7E?eu zQ_$KAKT#G~6jK-$TSOaUlp#~h8f#n><42A({x$wj4vZ-$X(0}fG-bxD6UH0|);vna zg7WkX(T^oqEJYb_%S0jNCk)kC8I@QG^~%YOJ}k9ZtSyvrO&k&(C+uzI3_W8RU2E)p zQ6H(FW)p~JcxYwwMrK>@WefLb7h>i3Fy)|IgZjOKXn=CEPqelE`* zamZDR${ou{I%UdjFV6+`a{pn>!;;C9w#xeh%fl$lyOYhe!pei382T@o=Kn6;jrhn-en#F}&JT;f=kQsGhlf>QjhqVCknbD^R} zx$+ZXWou@ofKX*oJ8KyySv%F^FkPmT3U0qvxnf^=39tGgT8#O#GP}R3m!mokRQ=qt zItx~Pq*NVSP%X4moerwO9jlIEtP!xRNrBZY7S!nX)$r`pw5ZfPaMVVDYPl?HKf-EH zBCBTXvz-cSr$BWYbD{%Abr>5Q?x)4SqAAe)>hK@xaHwMmV+x3kDe!RWDPC4#sg_I| zi6ib=QJf-3RViBD=P+|6{E22|{6@m6ieTXSM$Q*QBT(rt^R$u2qoL8Vaj2kC^H_v~ zi&`v(T$+nU)|iCnC4;;%xw3Jb2sMSGYQ5w}6*hGfosTGeWtomDt11`C>ke_sho(MX zR%5PcbsP#)oM!vVN-N{$meFQ@RZ+LB=64%OPFYRbg3VIy&917XAGlQfoC<K7FH%=BoeLQRD8^l$_P(BG8ggT}gA=HZRb2 zrPA(1*j_P_RJ2iF-`JMJ)lm7egV!NF#gDwysR2%Hs)bYDu@UzSr=yIk%{O!e)d<_8Y>B@V-BR*%p|`^b139W_~YvvS^{a^#JNP6Fh~ ztY2KBQ$eXxEE?Hg|l(25@Kqyei))l)m9+6*JAg zA)H=e&fX&&vPBYLndI$SviI#9KNR9-PLYJ6usLMC}iXDwt^pZXpK&86M% zSO_RaUg!LZ6wvRN>I{Ej??yuoq?B;0iuHDVE40pTrx6o30YS;H-{+1Du}${6We;IB zX((xlBzFxdc`2JZ(%|@Sc z6{&N!QDxYWoB!yLKLJKMq}X%h>jv3umD^JdaCkl>0y>EfL$_;s{OXU&3a@6Xkfi@4Va_PZr(lrOtdYRD^QXC+G;nkwIzyMb z$}@BnDRO=nBJH@IZna@kSf~oz4Ag6eA2&%*4O{;m3W9>x4<>IrGnKykvF1a>W*1TF zgC4!3ir)koZEsKZiusOtd|`Md?y^MJjD?7~3kC2NGJI&V=vY0|+yaj72fN_`o8&;8 z#!6I9Y}$8f!2nV!wkXJYX?4XHoUgOCG*w^-27maZvdKb)Nx?vx%age?NMs#f;T31tBX0RA$ z0@EP<&k4qJAd_*!vpJ2^;$&HPMSD{%%ch=lG^ih?z+s&M(I{BxgjipaLI!gMRe6kSHSbxBOV*QW$n4JLuncFsp|b{(f0f-zDN*AL|VJS2}8N z2+~>6o3$R`RUP~9pK0xLcVs5#LsAIVhQ9BiX<{n$f*zL_!H)v%0-bJor^I9rQN1C; z+gRy?g^^3CTg|6JH}*Gf!uEX7MF0hwuSa+RORGO*E;vGP67K4_FO$HqmR{^S&w*op zqRQpexNO(N1g;na?3u${{*{hU=%aLmP9LjD@MJg~`)U9#4EC9QN6$M>q_Xy(kG~1T zurG9-;(Da`!Uz9s+J7W-NYZmi3%5tr?9COP*5-92Hu-PNG4qC4p?a_s(HZBu@z&Mx zAv+A=KLuPk#l3S%NpwP~cd}0Z-i{B@cS0EdjE@KtaDLT}-Tf{xcNX_hG=qqTOOVV7 zyKr8+SgB7w-~&4fa|d3oC(W*dYUe+^)PI)xMe8r4?x5OT|Ce$6dLE;C+}8P3+USQ2 z$c+?o@FFKb(v*MUyw0;`a^%TWJIyHRMc6g^XdJhMurtiA^lGDQDo%sQ?1NX&>s*~0;=iNq*e9?# zB-=UcO7wT&E9VR=i{qaKjFJ@N6MYII3X~vzm*y9g2g&)pltB;VVEV%%Zfx>&WJwKP zmt0)mXroGFYt=!tG_dWZuw+3$n=3)xO3_(#GO^wIV7X60N@{UTf)#Gno^GW7Oh|I6_B2~dG>JX(oR3e8=) zXi^@0Tno)Th4}xJeoBd~>badF1pg`hD76ojW1qQH#74T8s>0CdyZc7NEoT69F0bBW z5R+yR;TCRaBjJfu$rF8C8^ZdbUUb>F_-c%(OnBP1u57DqT5tYC`q{RU@v4^M_gUaB z)Sb^2s|pB*LF^`b1#Gxq;b|;cg0WHMW9>y`2BomUo%c4kAm+$6{sS)r2CdOA`*~u? zG=&_a>(dPL9u={vb-u%JcmDANT#i1vjHu zd@u3i{i`SbQBr8+Hg$dJU>*LBOS^PyhF|wZk*zm?AGjN~Z_FnUc}5MEjCi+ND@jd- z^A&@JEmNAb4mWmInp(M1v-k3GMo=WgpRF{ojmQMI!a{NCMZ)uOpid)`2MEF_-+Dk4 zIcohGTZr1c(9`~y9G2L0cRa!@(=7y5t%4!crP*5WxBj~73VVL7Gy&9OY zUKaLoSau)mQ(y)K0&0BZ>P{2qUM9@&O;<-$CPrGO==tzmY$#BE>~vfKGz8mM0_`aI zH6cXUQs}(2wnBP_;@Td1#&6Z}CS&odD&x67_rhW1u;gQ{rz@eO@$?w&J17Ef7qA%N zb0z%6aA+?C%qUFIj~Z(xvMdhx8wdlqU|mM2o(UmPf#4ls5 zmBm>ttgdE?16TkQ6yWgJ=&s-$fFv9e4x_jrXD06rXwvh0et665{}MxVKi)&0e<7=; z&cY)25^V4)#nifuk^83`-Yk1{*CP*&=HIpL4M+4wf`NI@YFP5ol7USL_5Ft?S{RiQ zTxVvI;E0xXSE%BS!cIv?i(ZgaH%S1ya-uX%VPm3k!H(J{(Wm+ZQ{2kJ>Lcp<1Lt9Q zY;`MJ7iBO?B!g={5HEOp95R#DW;XdRr~D61DWmQV5-LTC1JgP+!~!?UR1@o%|OsiTl~~G{i*lj#-in z&O&33?0R)671I+`;L~ryAAaB=*zLF60@4iH8M)e}o9K#$H1o4=?=HB9|f3atLCT zD^NU4>o*CQec5%dTesWNn|d7|j;l%5n2pZkpy}k!`ySkkQOM)!%sD1uVW5HBfx>FJ?B`RGI@L_49;gRS}xg}RMQQYN?B;WO3INoU9RKFhz@)O#sk z`FSQ~Gd(>LtrvaeDe*Dq`>)lPJLQr-(@%X*J|FRY%Xm$_^E4Z=&+Y_JY52ZM${(jW zmX=P^a1_)jD0DxTRd0PA#hX+}iuYQM&{s3Iu%>8Z|5#BOuK7u&vG@ztiE^W?R>~tZ z)vHIf^*MCm zj-eI0wiCMb_v)pty23`RECyZU+le6(y2y|NFd#Cr3+_*)`i|vL4rw_6#xJMT`Sdq4@4)JZF7cZlR{ zTVC(A3EjlYv>`D&!2#O|TZQ+TFn_yeEo)Q!c2`*kVs8jXGN!$UpOVFOypj05Hq$lv zJ|A7YQj&aqHp1+CK55r6AVb;XW#>^`jq4DsWi+4W+E8*=?x5z~KAPRk4i^_crH!G= zEoJkpcoXaB*MWjjKj%b<;CFV8@3vku5UQs?lZd&J?rRk&qyN-S4XCw*5{Nz zO23VsNeQ;kkJ9f!WutVs)T?>S*~R>w@x~X4+LpH*u5M`^9qr-hPgiF1>Jg-UPl5n6 z>@gQtUt{vEQ@iJUCxDjX%ElMh)EiPqCYb+&4MrG0ngYInmh(RwI||`9XpS<$Zj?jM zqk1FBD7Jq@c>kH0T!xbH7e*Jc&OK-C1wRo!cTZ*S*wL?$1@SY5b?DN_#`J=j^|s&T zP8hD$!=t#Rq8MYJ$nCZI`^==&JaR7=hM?61Upr_-=o6bArK8*Vra&8u1*s<#1^wKG zt{t_bINyvFA4Zb486X}g%q01tAEp=2Da3*aewz8MU%OhGFBGzgC%v?D{czJo9ys3K zEv1ek@Tm*eEYI+{|GsJLH^W{KbMP^+cSP6yRb~51Y53W623Fnhdqj7q&p-aBPhx#h zqjJ-Vzx+A7!1q~N2^_fcVm){1dC+JK?C(AbxR|T-(YzW>M~Giv=-ckf=z+x^RKni)u}U>d03|<*%?(ANKa$-d67wq?nBip>v^N4w^CS|5 zBOQekj>1)ki)F)x?F>d!0?-Wr375dfdB@FmQsxhK!!hkhaQ@ zvAaC}$tT$DCzf$}>UO#C(VVReg~;2SR6~4+Pc(DdHSQN}%`ms2&>=TItE|F0uZ51p!tWU9Oc0}8K zq=9h6np-j9tSife%hMxr1q-_B-l?di{KFyAsdHp|ZJ7S?AIl7MvHZF5a`K6T%Hm1m z{=3TIv$hrVUzmeZ1+y7zV--zlI%ym~(MG2_6sU$1 z6aox|u6JZACQR=g3bp)qH zMGEDB^dbPxJnvDvC^n^_IjOBWEud1|Uf#zbRy656rA$QAFF-S>nLT=z6TVtJ5|uqx zo-N`C*2D(1n5M4DvUfTl;ooa@9~M&Vp$rzZdAoIB2Z>ginHpSeFY z^9G#rOUm;>j`Pg4g6Bqv`H~E+e?qnJ1Lk)pv>2Xgu2sx)p+oupR`7g>2&DAzqAyU$ zYIibeE1E2vI4uY@z4nV)(5uoW4bT={s(gv3EWslnxilxXq+LOxQz+OYE5A5zG$B1S zFN0Sh7q+MrRwZw%Q;D|7ow%sBv^Y?>sFK6})J0VhPe|jhrj|IT_7wl?CLK-Mr#dNI z`qvr;TO5YZxQu8ujKerg4k}f3muUBOF&1?HJS>@A%jl6dTF7fyvo0f~^(bido;c|Z z#Om?dwmIaeIC(BO1}xi}%G+KGItMJe9Oykx`d?lzi*o6|SJOuq*Uuwfaks7X{>$(4 z{h4o=eq_VSKSug=h^ZC7rP@H#F0X*b08_bO7abQ;gCJeHkS!r-j^?BEYqnU`m0ykg z`z$g*DAu$tYDqHwuTI?G*9lFl663-jOO`*e&W3ggCh=&0k~c(n7=F|-d}eKUQn@w| zyXKR#mNqn(Bi@-!TbD&DQQ)bS$MdxCK)iT~twdb0=)f@Eay=Zy2#7ISs$5U5UM=eq zF7s@t3{b7cTTIL`3ZONv`^!~-ux`y`+(^p#dCI6+cfN^MqHT(=_FAmtnzwyw^>f$; zk*D#;fsIj|%{p|GuJ0Rg!A(N-&3mfNekT*ggN?VQn*&o(W8%*zSk=aJI48GiMtF>- zmgYy%#iw~*A?BA%X5x(J4g?qFUoLN%EKLcnEWKFMRansFTi1QD>C)4JZu;!+M*MFv>1zx+K1>N=teS>?^sm6p5)MKD+lv#7VT_M2^#q@fVEY*n88=?4 zAaTtz(q#>jctNtjXB1`zgcy93ubxq#3s7~NkPllZ?C;PFSlTV^q~TdLb6D|ETP2HI zvHi7VGe+#H`dQtmSbdM)RjS-gXxsJ6w2GOsLfy1_;j&A|w!*hv&Ff0{luSqnfA*Gi zZvn@eN_&qca8HY4_=Howubc%^Nor>YWuF#X=lGMvXsuS4JNg>AU@8wtCp zFgxKCJ34E-v93eni9^|3yXW2ezTXa)st+}6_udA6bz!S_&$aQm`GTtVhJp7;E9XeN z`bY=idF1_S+b{Rv!}L+A#SuD|{nDSK5u7)_4vq}ej}1+aja-h61CCANj!mzRf)%1* zY`sxr%hApDNxk-zy{eK)5=bZ759&d?eihw=0K70$+m>n3uYxtGom z2?u8=SI$GJyECqE<+=c_w^PCZ*m6*6NDt9{gw z$ErXAS}YtrIrP8bNFrR<5y<%-UF5!m9nr*~$X&sO7A4g`{c zNN8qbSd@d*0o&V%yZ^2fpD-pR@nt5-Fv~6 z=M1$`0jN->7A)+lOKQF!Fp(c@zdyg}LXUlJ5|-QBYE@kA64Dm_Emg&Oh{!r(AsXKC=xcIMnDfH!~}@m z0K{q6@^3C4DJ0GxYO4F6gA`$NpWcxD0};)&x^I`Uqecu%NH20;@j(UOfSn z`MiGU<-|;g6dM1gUw@^41Tw(9azwm)XGAUF9quAYwo7XP)McW=>zyp0<{eg*(Z16t88tH7sq@vz?baNrM&;!ppP-{_%k zlCvT(>r=OLSG5MN837||BOY#({X&Xfn7z#_@3^j9col8`&_eG6*QbMp&{ARnilfu{ z&XE)uMB&iCdC39mAN|kq{qQfxRvm6PN$3FRhiH5Mz7g zCEIj19^>iR$rbx-zDxuWk4kdcT(S62FZ5U@wwIsc@$@%kK8g$}$f%770Ywds1`!a0 zZB9uzfpUU!P8S@KqK#J4o$+d}InHI62Y)yvMKFpSojAtLSI{S!$OdbMW`?3VoM9y( zeirv)p4Toy>FIkirIx41un(m1cB@3YwjuibLwFh0<#q~R;V~AFj*4bgjV-2`I1i0$GbY_<~$qh`&I!=X$FcA@EXG) z>M%Llcb#r`XlZgFL*(Oh&${P8G4-78trQ^PkIE=}K0~`XO(G(JUQN zGte1~9MOCAG9inPMaeV#?(dG$p(-}T`NgnbA#?)#^&=pxFbf$XF8(?hA{A~J z0f`ivJ1V+ca-Sl7)CmRf5%rD&NC^8`S|JnK;F}PFF%(UZg`r6f^#m+NO44fa*UM`A zuq(gj3{Z6xRQ9p?aW@X4R65spPdg@NmbU54!b`9{94n^gZ>m~$qBrzD?`3wFwgvP0 z@pj~td^>9YKAy$cdbRHNL-u;NOn<>aj>bQNA9x2ke~kMri#7HN()&D} z{&TwdboLk{Kyc;*nfT{UNlYK1`7_Qfp+#kJ+GmYwF%Hj`wqO0-SvJJkXj-xSg4S$2 zCLjeZR2O0V77Y?(oJDo9MuSCjb(?CG(#bInk?81HqN4zVJl=rElTaxXZ0_D(6g&|E zktPN_DJc+!kfYGrs2%UkAjRA1yS%&*3Ex2mr!*E7RRzT6R>*|<^HYi~aRRcMB9D^q zTvYhIXs-+9`p_!5$YE&dS!R&s?2I^JV#h`o#PiKia5lGp6pvUyQxn%?EJi=6b;xHJ+g zeb) zIF6m-j-+CoSMX|9W_X7S&|V3S$l%pyZa z2~}cqgW<7&X|RIF0Q>o13LSe)Nf8woqM_J}3hrVRh7ns_koV->F*|Yp<98J4%n1@D z)O+|OAk! zuPhErk*CD`(e>qcT_<`^h+Ye~UzXT+y^;7HIRa=%eLVd020*!It$}*)^BwPw!!jhXccsc_NT${cq77ZYHl{7CkbaL3E5p?YABB^J-7D~p%qwe&!>%llU zUl^zeU{*8ET3NX#fd^&tM)L_;&JLd9-44|;MO12p0u=a%@|7?`69V+7tDzhTAZdMW z4My+7_O&TKxf`woL^Dt4vF;B?te^WKbK)51J>K78kIze0U(UxV#=g>m zq3ARRu>IAB^d)Bqz5g!Bf{!j^v@VUo)Abyp)z7quI^zjkfbg5=*x}A0u06vp)#OU^ zQq%ccQ`|#w>%|soHKn+>+{eP~w^LTRJPAi<_DozqT2{j%y(9zdBqV=`zGAB_#S%NX zZYCeQL@Zh5yw6Ec^tMTVKg&~c=j0$nw_gs5U06)v0&^OzyOA>3jH6=qZbaulTHVoxedXK}JapE8<&jvbmLruZF;{#-ir-0%w=VM$LZ zN{axS$NHGd(BuVtjri%3)8V~D>=Fa)B_0dZU|lRWvyFsp;ui&*78c*OrZL8I zF;%d@hjbL!j5+89G}!3Pq?WW~xM;p$qWLdGS`7aP7;Z>CPNFOUJxc_m9LSLo#j8My zpFvK90qbzbV~&wEH<|E-Dw|p1tO-4P`~tg58f*COYHZ=3bS4hANj9$$+EOdK{6em9 zUG8w=jp|+Q#2B7?0`Bd?oXf(8vqHYqSG*WR{1|&Rctx(C3k6j01bK@PT_iH|#!l-4j8`iFg&gN@jlXYWD>Zv+&`tXtT8n&uE2ZdS^}>nQfh@1Jdvcb-S6w^ z+3Js@>#7v%+Oa-Ow1vgmN@lX^;TIcWD;x91{u=y$kbaNyuh9JeF8vB^yIKA(>38_P zleJ&zzocIc*uwSylzw(*sfqUgN{%uUq{f_oODdKRB&j;wl)j%S{&dY+eOLAZKBf@e{odhr#{ zl3w+a8PBp^^|C9^idXeYAkS)e^=drNT59!LF3);t^?D7@#$zk6n`d*ldUKkGXKT57 zYnx~LuzLHP=gUp?7X;5&jGC|bygOtyJ9NCeY&E;QynDhmdqhf708&Z*@7qH}DoLc0 zL@G(7l0+&=q>@A`Nu-iQDoLc0L@G(7l0+&=q>@A`Nu-iQDoLc0L@G(7l0+&=q>@A` zNu-iQDoLc0L@G(7l0+&=q>@A`Nu-iQDoLc0L@G(7l0+&=q>@A`Nu-iQDoLc0L@G(7 zl0+&=q>@A`Nu-iQDoLc0L@G(7lKfw@hlo^?NF|9>k_`tF=}(=uC)*m2X7XiY=+xUk zpDe(&E6t|bo4&2oSx@AucQk+BXhkZ?Q)EjL*^)%IB#|viWJ?m+l0>#7ku6DNOA^_V zM7AW6ElFfc64{bOwj_})Nn}eB*^)%IB#|viWJ?m+l0>#7ku6DNOA^_VM7AW6ElFfc z64{bOwj_})Nn}eB*^)%IB#|viWJ?m|)d%RS3p8X)64{bOwj_})Nn}eB*^)%IB#|vi zWJ?m+l0>#7ku6DNOA^_VM7AW^-?5dw<7Iy@T=rgq-9w?w;}yH7UYVyEyO&*=mn*xs zSDAMp`-kwd5Ap0isbxO7?7pRCzBTNA&1HVw?Eb@L{?qIM%Vh!E?16`6f#>W&H)TNx zb|?lMiVuO2!C`ceU^aL#FC;`59wGq=Re*=Sf`sY8!^|MzcJOdlNQ4(WA`lXZRFX&~ z`9DcXM%>)qTLi?!45%EPezy#abqP<5$SA69@7+KCcJ||E*YHGAVWnqGnhi8Qv9Pjh zXu>BxqkVA94i>+G_3ULe|yw?}fFk#;$?!x#f>}<-cz3j?aEr1;vidF6CD@ z9h{t%)VD5ee0dZ6acp++%id8+N%g0KijKkYZ$B z<>dR1;MBbS@tMJixwe7P#kK9z?-$ccYkgzWwQaqgvFX!`YcAnQt^Fg5>)WuDyzb%2 zpTB;uY<`_tTH8H5`4E@k9G2MJJDl_HFP#fY%7r&}Z0#PD)VINs^JB70wssD74o*VS z3O2s(kIpPEZ+;yZpZR|AGaXx42sfF{)tKFlM=ANO1f{Lld z)$8B)7eBAJ_YMOSa~wlIMQ4>3)wMMB3>|$tuWIRT9~k?xcX)F4BdNIZbNAr<>Sk(b zO;l!aczR)4X-#Z)S$Ia#$jo9~ZW%N=x2m~&Vs82J>ZYc(r)P93y{vY4YQCYfKRT-< zrMRlNt_Ar2%MTa_(Yk_x2m)r6Y^D0bp%{v%j+>+PMI#>>WTR=6 z8;Zx0AlelsV+|z}Y5dmX*~*QjQ&}SKPdCRJ%VzSVLa=F7KEvmVl#)12$3K@ZlxY;H zb5vVuwmLpsoo-FE)PCuK zqT@@8QQGJr+l$L6xzBX? z0_hNl(Pgy3WFcA0=n(G<&1mh<7NlKD!-AQYvG!_vM12$r*zuZiZm~r)M@ov!4fSzE z{?@d=M@J;?31hqmnbEFqM`WmeCPd;EGteq2fqsodM4PanQs0fzDQG2P7qbL0tVyc9 z(@1*Q*?$mQQ_wh7OfFWlJ@YsoQ2BY0SizFdaTPLdQ1LGHw!DN#IcnnJ_+4818LJ*f zF9e087r>P2l_tuEqVwm2aNT-QiJ$~_FNibeiw~t3X3N3QgS1|gV*Xm0NkwG~6!Zcq zbQ)a{HicZynMavas}IN9K=kY##NeJtwbnFX0088@0Ej3B6s#eoNwo@K3eSS%$FvzR z)pcaZ*JtI#Js9XT7BRWF zaLdM7Q4>~eU_))j8Nc$$?2Z%g%7@V9>y(IJ^hx>8hNMS-?Tu2o2&T?nz&u)MMUiq1 z3TQEbgKsgV7$A6PL}>C@mS7r+eoT_3HCVEUCi|<)XyT<^9KYYK$y;uqmw!k=s8Db; zXK;+}IE0y|k3pK@XJM>=Ld)rM?mtWQ)c+Wp1recPMXR7l%ekSj*5!k^HTsFtp#;2s zl#^C$?-5ByR2%IoZ6RWIuam!+7N%OW#g3^0lPV`&R8(hWdUsk}N;( z`H7u$i{ijd)Rphy+3|%`yF{YilM=4KIjRfn3nyzrWgUAbcTg(vLbcBo`ctQRE$cod zsWas>Nsjs(_sgx*&#*0X_Ryx*#hR9z>LS$7tbV_6u8*Io)h}GbAd$jQck3s{Ei_b+ zw#?l^lWHRO{2naF2&PZyCxL6AbD6+0e|=6CN4J`Kqwqcxy}ViAQ~6|JB$fQwv_bcm zM&}e~KTU&HKpK$)cP;DC+GhCxw2LQj)A(y*1hy6}qO6OWr^oue%a`*L zZxzH%MHr90cNfYXC!SIJ;klKVris*@bUVQ=@D)I1jO+(GFVOi3evc8z!(}K>XJKc$ z`Dk0W-fz*~MLf$9XHty%IFJt!pfJ^B){RUmkGl?yh2cgq$x>1@TnEp3lyGDAs#;g5 zgVK_#<=TEnJ#W!L9f>J^B3mCh->{V z)XWpQFY7@I}lck5h}T3?Wy63o9>Av9l#+% zV4eoy<@aJw4+Y%3h}Z~l4=q%bETXI|WOssCQNmA9A~&R=%$ho08t)M7-r=uDJrzF? zcx$|W{v1Q}0@d^@#)pgdn3q-{0&C7;t7r%T1DjO<945#Vxn~u_J? zfks{0an!H6`CdT$Mf{``tyD@OYBy0RAe$&A8=0L5U_VSFBzmc;T^v2dw*sgIk(jXOLq!(KZml(Yj8vj5$ z38x(vVY*J|c`%^;olbiPVfstKgDOh(}xxdiwVz%oA{3Ai32U+ z9V2PR(<=%Fazk3m6GrM2F6J>BdSzP1HAYqkF0OJKc2Qc6F$5zI7T41#8a@tMfi}ix zC!8-GXr5Ejik35qM{&w3(@0{`N@p<2b8xD1&?w%~D7S^sW(cWM(!_--8Dyjw`6%c* zBxoxOnch+Bx24z^rrM3kS)L@AiwZfcQCs_@x>2URy9?-SNtIYg?YvBV-k{IjrG{u2>xH%(xEhEDrDUIW4 zo-%c=VPFAB5d`m-FYvrJL5lXkPL znX?0BvZaHweG0QP-ed=#WHSt8Q-gEDnR2|Wa(*gh@gQV#s6ul1cXK+%a_-r3KcM7_ zTIIS2=dQ`-1{dbO-Oc4h$(t(A@nFuo9nOVW*#c~b0^h;{o81Dcv4RPXLXc9SGfE*xaG_;k zp`b(I%1I%6NI`jj;a`p-E7>9$tRj!#BGdjNEr%k>qN0o4B668xYV2Zq_G03S;*+sr z*l{sEc8RN1aSwAzwRH)5bje0kae+(;<9LbQUI{T%DQ9`fAN$hikW#;*Qo`|4W0_JO z>{9dN(h}J+P0q40`!WNRvKQrLG*M+4{bi!qaD)mo9N!8q`65gFxQuHY-VzMQMJXp^ zDt{$Y-hBu+w<=dFEXV9GC)_PpMyWt!s)&d#m$$AM38`oROzBrA1PNC zL|1EDRg3gjmzGwSb5>hm)$GdFXzW&da@0fw*Zk?LxoU%-`f{GX$hkCvTxHV#&dj+m z@;ie+3>-uWFhQeBE|71&Z_<=I)k#K ziq?;XJgbntgPC#SEwf)XyI(c+%c{CHL<4Wu8_%SMEzZV{%LZY;MgfvWuB<#E)pU`E zMyZ!FFFIQ^*Ilt=~qQ?q^B+Ce+|2(Y~f^rlt~b zbJI@KbLr+R%jR`hvuQ!|)4t}ko#tgwiy>nRpL9!-Wy?IQMYo`ZtFPtbPRlf?RdY^M z+PF1*gG0Zf2~ycgrz{%r(3?_bWO%I0~0)X#!cBT zi~GJ&^=!0Oe`}k0Sva>*GcwVzfau6wc_>_qsa@(&$$aRN@?#x(NweofGKJH99Mibl z(aF@&HMQQ=pVa*mC+pj{?)O^V^6uSdFDY&-$^LSsK6FssJM~Om_SjqYx>EL52=wMx z_L80SK2d2}dM}En)*Im1=N8;6)z>@flyUXY$FtE*bk;?(**6C2hy2N8GHGKK>tma2 z=b#zLZtI`j=x6!U{~4$6Pvt;vL7!w_-?D1E7e%)+3{VHPZ*bc)g3S)l(bALL^NnV+S&a{`qk($HIMZ^0?!y1@93q^x& zCKS$p1U)-Ht8!DB;&%FU4j_V@ll`(Oy-kP%I!V8Wt6wy$uVMJ=CO`;!p>h3gKfTn( z(8!dGM_&?;8ounmbQ&<#bdP=KzN+_HVHFBojDiTp?)BXgCm~cvq#0tP{sm(JsuOwc zqXvYUAbw4`H=5%S!La896_ev-vEkqBZ8yjPbk>Ph=i&PM$rQ^8!GZ}rcQ0X90;e?X zb)ERoh{++`*wu8;x8%TT3HQ7+@#3aXwwV2ifAc$TaWld&9af)n_UUrmvD-gWDQOVp zrsf}N#NV=?foLgFOJSKQPrEvaZe~`Jr zgkVmud{?Z{-)5|>BqnhJmac^n69PioC9pfJ{n?^29&yHtdz9vm7%@C0a_;1Jw`TLOVVaDqdl!QF$qOK=Sk+}+(F1d;&F z5VbqdG?OcGa7QZPZESC*IKLw6MFCGBGolu{}0-gY>4uJ8VVS#CD zg~M#-jbs>>br`V@Xt!mdcNOucedHb|%8ML`LspW=_%4=;jYj0M83HSgNqSnmfGcQ~ zTWcwvVf9U3c&4xgNZld}cO_?R6(1MK8yaOAB$+!SMfe7@H@v&?l&%4|lzelPrDI*W9 zJ9li?cS@+2F+rONriTc;eXsMREb*DxbK#uxwrCT=5}LhB?nAVx(3nrCXwHYA*u!|S z<4MVbF5`XS(*z&YqoMalm{*8!Msz1Qrnow|ne_z2=s3{qgfZX%rTny6^@JpDzXLWO zksqy}i;@(0YSVM7dOGa#Fx;xzPGpD~VU9_Mx3vrb+?>#8HlxvbAu05jrn%M;u(JT{ zGjrNw7zfM2PdU++77a`Gp_XEq;gnO*#G=Th(i{*(~mVwYD3F6y|yrQ|haQ~ZCd zj$Zp3w0+^01Z}M}0H+>nHin+u|+*c^KgiOTph%B@g2n_jn@< zjnfTL^w2_bLBDQ>4mfnq(LG+82v$(RB=>5?FbnGGma=1zl2osYs7&0Z@ zi%$UJC;mOj=+A<=@V-Gji!|qy|K|Odi@;hy*gZuh*gbCTqPB%C<)Q;V2N_ND%XkB2=s~N3sEHD)FlKC zMFrpK1z{3%nNIo#1Yvw&Fvo@G`Ujvw(rF#P5nq`PM$<@yQtQ{L1tf649n94KXDRisTvW^~#o|)9%!{yv{&GsQ124Im4>g3X! zR0U(M;_Ke=z(E+#YS;j58D2?rGOnRl0KQC317cQzEqbdnT_t~kQIRJPhYHFDUKI?6 z^aC;t3g8mh=rKAuV?Gd3TSFfp8ARXkT%HEhJtc?9Gie?fOg+>?j|s}n8;t%Kq(Tpi zKr6+jN9zRzLG#JGBYCW6srzZUS z%e!ZDbs9uC#Qwa5gndIYE}~iz+i=PtoPZ&=K6M^!!k$h*PMr`Sl!KO_bfKVc6=Rbnr9p&JDiaQY zW0m2|Nx@nKjePb`(OfH_H-%d>KoL2rk)C_VLIYx40fL*|&wUsitd4+$1keIRj(FAudqprmIO_1XyDIIV#x*T^Uc_ zDQa{4s^^x`qjh5XX;q($bmc=BLzy-`*+<+An@BH`5)3+=>%1^?S#^)F;7wG2Tr9^x z1WAB_^RnZVbcXl1g9ed;fX8!JZYR?E5vQpY7Hi?@*Gy$M({x{ys+LOSF=!_?f>=LW zwu3$m$IyoKIogWM5Y7niq9HJLEiG?G@i5cZ3t7UMMry?M!P%@En zzxzJ=Kv=3I9#*xh&&Wz3Ash5^$ezpdG8^^LO$uQtiT|-@6+{6Rf9p8_k&jKXL&U~1 z0-L@co#7tWcRhHNUl1>s=W{iMUc}O0`Vr`BeYL$4TX|#=u8tfo@^SBHbbIb!OQ&;!D)S!^nGII36Mi}4+iORon>|07H56H#g&R_0IZdJA(wmTUm=4J^Kb&29Y|o)eN|`tmvuAoM-*h6%l4^0q zPApy?>J5WK>XLltt)90@j5!LX&R@SLdr7q{5l0&JRls3QJ!84yHoTGCi2I$z{j%Zo zd_`pAnFCGY%I4U7L+4&4*qLf|9+udWhkou{n_x7-r`x*feC}e$zP2Ej@-3~l%Cg>j zZR~wYo6GgN`w^+hm1tJG;oq(dN9paPVFU^y$n&yFvI0Z={sw53RB`V-wsLb z$Ki7hds8t^lG8H4>Q)kD_G%u9KSACm0K15kt+1e~*B%tBV*WzJW%-sctyd0QXXTt} zIR{G{{v!Di_Vtw|t3+#)4ry^?L%S8sed)(ruuJN|D{H=#rI&iybpbO`dj$2KCDx%X znR~BnL>HFEE#-b@{c5)nzgwE{OODLQYqFO7mzi^*y5^H~*vbisPKL2iyU4o5d+^UDbdH~02Ev5QaT8S8h0?w!@|KKS0PY&^-GH-f~S0?B*^ z9|S#mNjfiu`ZBig!#w)Ga5;tRu5OdraP>a#bdGU1O2xbL7?KtLxE8;<%PQ|V{HF6` za&zV&y}ReAmAFfyUFN>f_dg>J*)G|4?K>~;JSRhtPPzDNhw@MEQ*oWHMNHl^YGGcp zdF!rax-^cO-@WD=kv8S-YbP0&&C^}tx5<%WE!M2w%PKLqt98a_AD%=8EY93o7S^_1 z@dZcEI^8=ll+SAhy*JR+F1w4HE`#LTJMq<)2Uypyt{r_`o{%0R31Zh79X@*kbmybG zO+Pa*e48Ym7N^3H>o-%dM}s$hUh{O`zYeo}POQHCT!?JEt^Y1og-wV3vj${z^t_i2 zAV4sF7r*gV-6E zp_#qJak1RNeh(MA_j^K<)BzRdrSe#bn1s`)cYPaACSP8?8kc7q`->Sf3S zD*KUPFGm!zwYSf|0*aOyE2TEw_^hFq_n9c^D1iYYD3}}#f3sJnwHTYYPY9>ATM7O% zH5x`;%EcrtJS+V^K^mh}S};>eXthr=v1NsbL;6|2j1NpkOGMUHCe)%oE23YX`dejv zztU(!O<%vtu1x7y8HJO6b>achnSKrafj7JLYMBCBmIFFym0m6bdWo{UZ)Bx2WRNJ* z)@`y=BYg(^?I!)z#=&f6nOvqf1O7i`4f*BNndI>72Q60PY-Ad&o<&z6B1%glTCcIL zoxUu>zg)3J)+S?z64U1hGxlT)&m_x#kL-DkSBEoR^_LaEqPbXt;wY@_8Lh8-!@^Uw(u?fB z6$MU`I~=EespT&#cwIjFydn`+iKA4mfyi@Z*0z_f22p9Iv*;-1xnmMHnq?emHf09? za7_3iYor`2Oe2*>kB`aT#z7wxn*~lU;>b_rtV>J90rqTvSV@oe%M=g3f_?iJcK}%a zAW8;QFOC}ONOVzx(FO>SWE?_04zLA;%W~6Pm8MT?r*8OXh@~V0Mg>Qeys`S(^2ZR9 z%Bx$WXw$@A4=S6lgtuS4JmsoTyC!Y-8M|0g(h?o{6h6`&T6@G$mS<|NQ)?>xVtoBeMbTGF z8JAZDcgh8Iu7pBcO`uHaaX|5`Q8PoIbKzeTDn>PB`T*c~~!C9rr zz$?>^8of1n-CuK2L^=~n^B7Dz&kg1+qBE=?h2;yiZL@gn3W?r_RNCxuJ2dL#Ud{_) zE)ed_H*qd}(5`U_5wn;R`(&l%s$K0o_DtiG?oyeq2aT#*$a7C5I_>8*EuXO=??#>g zD*<0)*&uX1OeVe8MvE;ni&8%qf;-|u9V+x279$($Rg?7gA{Nnm7Qdh`@y#qoGgrlY zs*aUiN}Q{UV_tGB)N_BKukN#yJT{+JsPh!5??1NW+qgvHqnBP;k}cbu6{44izRYPM zmQTW8_^4A^+R%YIokXLP1D?r|gX}@9W*-HCZOh?CjSBHML??M6ds=mN#pO{$B zT5Z3v(YVuUphNetiu#XFiz6YcLvuKzBs>#V^J9BPqku8;oWqzyX=Q3}V0N!{M%Hj{ zKzn{nWWm>PDP+x|aV_Jk@zb(#+zuM3eGdVvqSyFmy^2_A5L-evz zC$sSFpTg>U+}U3P8<9~Pbu(`ryfQ{x z(*)DakWDOb+x(Bs_zqLNBbuwU~ifB*`GNgb!p~}S=Y^&RX3l$nlra==Z}~V zCTvr#Zxh4JSscyTNLzW5U-6MzTpn*5ys$V_u_%6H%AdS0Ah#vh$@bE5Lx^@q7|%lN zvl@QUj(OjXIJiTSr31ciDjjOUDYuKIv-{iL5+}wI?engfwWY}Ij!&kg_o^k`;I8ug zvf6r!VwJf%a)+G7@{OF9R;Q)5_}<`|r3sVORmPr6*vk0}_BG;*c{(RL z0`_l7Pnvb=T5t86i{9BZzVnklu~|83r`>9y?dsH7>FPA-!?WpjeVqBfZ3Oe z+cyaseTV6^hrS0Fp5|MfhSZ;y-M>d>oxTsjKEqf&{kKWfgu?*plQ!zV$*Z5?gX8%xmJd&IPF~uV7uFx{ zn_fb4oTjEOu_P|v4}p#(1iaNf%rq4`p1E1 z@N3SezeEV;#TkSt-hqD%{VucvALuOh(wDz~*`QPb8m;#v>s-Yw)x~Eiys59wcvz7L znd%xOP(%hn?rVAO69&Df0u%!vA)R3a6o0TNYZ24<{xcE}bj^QRrLq9^tb<_0Y98*& zVK|81r%&iUqss?P3m%fz2k616q9MZzSR+q&VXWCAml5LdN5mm<&~QXL25>Zib^OKG zUoFi+V+>R`7Ckh!hUR~Lfw>U&xG8i+iBH^YbN{;;zDM^^0eqec`@D%6z*drO_SyK5VH@KMeN5=L)_1k}JNSh2QV<<1xR8Kbx!GeE<$8)BGMOD&>YLurNB}`V051o9G}Y3MV*{)MY0FJlgUCWVgiYZFyc{KiQg zJuzBxP!g87Mc@T0DW-AP8+`UPi@`X}M!~>w*G8Vv@w-MKw%`!!8xO{BY+s{47LfLEDR!%!qQmGnDZJpwEgy!cIN#1X`^lc#1XUk&<^EmVbG*V;KqHW?MU8C&ET7 zBO`^=(*vcGK?{;{w+%xDTkKv+lR0iahbDkFg(nk0GVJBqT;@O2E9y|bO*S*+H)>?M z#I#fPrF zUe&i&x4fmH7yC^eYKFA#C%~~XBPf2As90K<3f>GX!gImC`bMbsz$CxL_slkHa+$3% z;Z@lv;g6U14=+qEP{bPE!(Q0Ce*Ffj4Z~5n41misX6B+{pV-}VcVL$GKnY6j@i04)*vdu#HY{l+h^o_kf}8BK z@Xi~S81B`mky9oW`lYJ>KU&cv_n6N&M}_6tn#Z1Uoua4ojkGV% zs>e-Uo;$BO9-OoubhagS+?%|-?4x=zzxrMd^GO=ze2etD9+H20bvX0J&(~$%LZap8 z3%9P0t>rhr#eN4yz7_xLm6g*uvD0uZfI#7XM%w4$ zo#7CoEQl-@CZUl2P5vDaKBAppkf?GsitdyT{O^Ehm0i<0e@ zAz*SUCUazm)^FxJ_j+{(i6|CCRzb=*{dvdhEx{^^jT& zi+pUt$3!M{(V+lQFIeEs0sWH(1Pe_@B{rF!k!5jPS0hD#)zbBAg7$kpiDiN~uzx|W zue~B_jb>mAaZwJs|q z3teEi#A@Y=`9)i7ADF%t$?}UEprrEuPWY@2gCf?8(>wNuVsjJE@u_5c!CU7&-3}av zO1me+t=X!kLLOW=x;a+;;<#YaoYKL$@1^77>8zZ_3Rs4B!-TNBrb^Nn!(5w?`;Yn)oDAQjvA@vnZhA z5e8AC3QvLb_@ynKV!@EVa{YXDLDfplq;zPkwqlSxjCY45ga&M&?&lex_8nTD-S3j2 zdjj~HyKQnf!#v2IDz_OUTQ*%srZ-g|-9edqgs5=!qdCo#wG~sb7xx-IO*pylr|pa* z(-#`H5vAer$5_?hSS3nbEv&nXd0&RD1{JL2;1eFIVbIT_UY+M*Y}+a%xHJ4*M--sK zkJP$0ryCqoT94}O$m&AVIZ! z2om=ZH&@*=nkiR%`!hC@I6 z`3_9khwM?S)N^fJNp_^tRsW9v`De@nYHH$?Z6llWCYol*nEa@9_!q8>ed#(p6*IkscC>q4a)>sYz<4cg&3AWwyC>r> zGL2>zJ;$%Y_^NSjg*oRY`0YN$rg89`UacYEq4+4K)ydZXygv;yv&9`3xY3YEFM%ri+s+9f)aZ6Raj>9yQvG24u{riQf)gJ@eJuA>Ja ze*#)GLbu#4Uq<6ZI<>qFPH}xk%^YHs1d{Q$?0Ef;=y2pGh9_SJAR_O2$s9?SJn>u1 z!bir!m_J8Iwtt#`Y=(CeuPmP(E0HO5Y*8J|C_a~>tTJb$GOwH?Mc>1sX~Yd5Nqvrc@hwscR&Zo#5Q&yANVqNJ z^%Zy7g6VU#upFaYwgqz;6H90QOIkG6X+{~HS?QtzCB3g7E1oHpp(z`LC=C`Ejuxm; znyAK5sZLv}o$qG9ex^>ltFAMpMp{@eVCg;kOp_%-Q+4W%;GT+Hp;qX)hR)uAF|!sg zvrZG1HXnwr+n%CrpwNp=LqhQ3bQ%F^SQj)ygQd@d&cOu*u4VanGd5 z@-5!p+x0?eEbAz=eLYHRRYvQGC1$fCC5z=R=7W}c27{L3MfI44R;0KV)-1d4S!`5g zEn)jM>G3w2*0x2vb}>cXiADCuc<<8p-!-vR^cVdt*q2%^dJo2RD6_WWn{i`Tu7njO1RMuUz~8qJ+g^yK+^#s<1tssy!3fzID~UBkaJf>fkf%FtqA026mKO zb(9S|E~+}Nf}J!~opi!Z2dhrUVQ2GIXX~)@{i^eG*u`zt1rl}%uD-W|;|H_OP{+1VPQv?3Mive}7!SLgSgw;U4@M3l;!U2Hc4;n!GPpL9IVZU}T zv$0Y!v$3;yhihZz;9w@k3*#5y7Z3or{=ERaMHfN+PX`^*`#%o)e;oAxIOzXz(07+R zKXTN%Iv?+U|2)~4=<0fU0>EsW{%EAOn*k7(lFdLI!NbiUs2tl?FtLv9RtULu$yO+} z+u>FieJI;D;#soob~sy6$#w)+)8Td`?;zVw6#u;KPPFiT$xh6x+rynNa4`FBtPH8$ zZkz&3>2AET;L&b^x*YpnqLz-`UXq@5>0Yvt+tFT%X(;=Cs%5g>ewuAj>3;hArvEnw zorhp4JIs#~JU;vyE5~tEkf>vSRG4aAc2tzUMJ0ycx=Q-m;tg?!5J|sQmofX&G5}+vOnVMf=Uj%6W&yeECJ^&+U_olm~G8 zMHkwKKQQ@Q(hA-rj1P&Iy-m~T z6=RsAv~c(}k87V*w_p_JOTYL$f%|p|l#bi5Y}?#Hx1!Q_cDwp(_;GUF^&qPWImxnB zdAISfbQZhePxd)y6PLj8_x3fzc|Uz7c=kS~^ZB2{^?;bz zZOP)QzsD8L=YLOXzQgWM8%~r&`-|v;z0TV2&hIa}F?iZfn|U(ZB-^laAFfA*E*^eP z%JV$l%<6u4{IzIP{dl|Te(`vdPxkiw3Z41s@y}s#HS+Ii^M&}`R-^>%4_ew2^6~e< zzs2yuhOX;jD}Muiy3mC}dFc;PrvHV+=>CA|WaWcx3=k{yU>RHno?4iqw*Bf(qc}4r z$H{}pD@g6zIR&lsF7+QXOU4tZdp_E&V``*wlgPz}6h|%q62d+E1Czl>nu5IA_bq*& z_a;MLxvt}<2uU*-L?WPE8(3zyQXno3PZd|j#@xdmh}>1=kWxPWAErKfdksCKezQkP z>$b69v7WlbaMB6#O8#liD4%y<(UKJ8=)K}%cI&&ehVcB^`%w+NNd4KC$0TxB!x2MhLJD-F z^TPezt^DbU{Zqh#-2u3+fXNb)SmD)%z=YTOPvbw-2#n2N0d+n^nIK|Tz8><|&tRGn z2qP9z3=|ZP{}9iy*8i7yz9{pDz4!}@@ggn&LG2{Lf2#uH_i`bha-}}WHGYgBh%qs< z2Bz6#3A=xwp@@Lm)zzWI-6tSP8hec|-!ua$Z{nY$FI?Uzyv}r!Eq;X#$67B83=r;@cYZ*Qe$mu=RREwHspw7%h#hsWGR^ z1c$muW#hN#PbU_1imR0rWT8X8WNIIBHK=##OD`BXBwf3;0Ej>by4k--Dt&n_qOfso zZ`r+)d_4=#6610kBqy+pN{7>rAqFXhfFG(*=!ARNjh%dhIKOZ03nk>CU1+m%#L@vh zS^Q81=q7V8gOe$Q&Y#R0gKyhC>32W-=YG)i7$s6Qn&?ekw{HYz6u zE9vf)q`$WKM&Amr{GRW|YpMzBP#->C7OzM_R!HCZV7>z7~Mu} z!Vr2NIM$n7DUu2&bOT41w`;@*?za>_^hqt3i)0EpA_MJmXsDv^iqz^p#h-bYZK0qY z-L*COI{N<6+ypJ&!t2y8Juq9gZWQkX4rIstPkyA`=-iB5<8tYKiC&OyJwZn{)S#ba z>(aZU1Gu8;`=xngap%3`q9!!~ z_Gs+6`S~$OlKhL0C;MCa4<5Q8>RunF;JSV~_$i3l zLAjX}y8r#;4?oQ38iUbbI$7)%DDktAI6=A_&$B5vGwwHYp)S%L>JsH)U<}%L-yMAX zXO_VPz91;ZY?$9dis2HgQvrQnSEG(zq0#7`(I#1-alL0pZ_poSfBsr`emKTw43FhzFU;D&KzS(Q4i-Tc1V8YI zWrbdo05?e=cYne58~-fmd--uuN(I`{@ zO+(Y0tq5Bi&Re}DwQep6*13i0B}b*nGmQ>;jth%~LF`6^KmSSPyo1n9w$PTe@IN6q zL4RmbOKH(P88KTq@k_s0>CxfZF%n?LVjRKlJ?tKBKWw|h$XaQ!(`ZTb85uk|S<`5l z!fBabGqUS*@^~U?IX!8)DFi6&IG>ByP#xK|+c1f+b4t9XePKr{z|JU%$tllHE3Ho} zOTqa1h(nFSp6E553MQk*Fo!OtEptPX(NfYwLK2E+0xx?q-|#yV&t%)Q zJ@I2}YNCGH{Y+{aQJO+&n&RvC*?-bLD&EdgV$9Z-%8oYARtU_V!pttp&z9THR!7M}Fy=^0<*W^7 zhlJ;tn&&9@<^*r&NTB4tX3Pzc%6(;?dr_M6H85ASH&UVKzqtl(8tI9#kD zRZJgIgp^Y($zv>O#Vn!!TC!kQBG6y*3$yg@sAMs)M3uetF}(Dtv=lT_ih5j%j#Y-i zQHH5lx?ou*uVH`(Sg z&%QGDo@3_WbcP@H3E%DA2afY5(u<~!^XIU>svQ?siByJ^RhCaz$az-sb5seAR3@WT zY5y(WA1Tt?#!=LT?`Ol_226ww|Jn(c8vhx)#U0?#uH!j<&j< zH^@5ZyLg^RO0Jjn{7SDdsp`iS-Gx`k*vhHJe%QSpBk~dV;+Sv5EFUj>YNDNn~jH!e*I4R%0Be5u_vZ4w$qoTBVN%GE{$|3T- z9X90$Y!VkGs!uBs&i51^Z|Z$knoF5j+*gD>Pbj=knnS%?()qK3epE#Mpa_XrZpPi>N%Y&tesW_d%NVNIboMe4nC_DXJXTTP`QMQLP1`F&Zn zVQu3}idsYZubhp|C-iMpWUZ0z9h}r%FH`%lDSEIQ>m!*4IOD%()aACduT8ak-M8l; zIXk{lb;uL9uD-0dF00-1l37{l*yXI-xUZaFAs@z;+*|3a^X%kG?~JPLG)`bWcWh*N=1`*mQeXc3pCQy>26aH0&|U>pnf{ zq<-jZFRNdb?b3_vVVde;IqkuF-HUMU!84+vT$N>|?#ua8P0!Vd!PO&P-YZky_xY;V zx~Eq-lUkgbSbCI1w!M!5r)O!Ux8z43#c98fbH6#LzpSlQ{eeVtv{9FfT#KtsXS5%) zeZVtrK)Jj>n7DsPa`0u|pe5&^|I~oe!vL*P-f>Hjm|>C#QHRBO;nnc{O4QPOCW&uX9lsJiiU=W9*p`9YP}kN_Zd z2vjrlDC88y#Y28T!s9b62>PMH@Iw#u-KbU#G^r+oq5fkbG|*lRH}*oMBZX0P&}jcqv_85!2ySe6H8O@Xw#P*_u{!v= zef+Ith?0Qk)xua|#n5%dSn?eV{_Fb>E{Y>+qQ_CNmmpYKMJK~q+dx38e9?P2S$ zpe@DTf4RQ1dXIN2O?eQE={pCYhHuwdctC*_`WZI8+@>N3fjLhYG)&ON%KJc08V^Rq5ssC@!7TFRc{ zAa{x34}~m3c(8<^)Br{xF9cm3Bn*e>LD3d7NkNswHex>{9J0VF-V4l7Wk@)-!z{!( z=m$EFXzGj|&Kxy3^3&#&o-s7U)Zk`1(z;{DF>ckm{AA8#iEF~;ER?+^M3B{G zCu-5XZz0KD_dnD#z=MdLMUO+z|9`0GyhVA271e+#J+m-yXc$xnbO>4K(C3h)kBc7=%|~c=`d?`&^45+|4`2<8Ef{ED=M{Xt29v;d{Hzi>pi%Utu5|@4U6BJn zOEwADNbx$o#vfsmVk19Up*ZxuZh0FrJv&N08_2j--0{^{a;TorLRW_`4{ zoy%*;V#gNc>%A+`E*P0TXF0z9)uT%|$cRd%qt}a3G^Pq9`_sD!GwRbKo1ZZxBQJE{50v z78u;wdphXIV^b>w{UQNz}JNbTM|5~?l1OS|Wesuch_cspz6Fx5p zLW5QvtvYtENQcpDF=M+i7rMf5$4P;8MI5QsxC$d z7t!x7;<~dRd0dfNt~j=%uZ5rz^#7%vr8bC+{5t$ps|oxDEvtid?qGV~&$hXP+)bca z;%+e>Zj`cP@4_@Wm{&J_bP}LpoXl80PunFq)8aIz6<-i0NO@FWGQf}Z9)K<&IuFA! zyq}#f#x0m=9lZJd&pSiIT2;p8@3%P)xXguE^^y_m(f8|Y4m&%Ku4KGl)A zV{otHi$MYBXWiZS1-1Y@Reeh;6qiOkm|SD48zAI1=}*Zu&WRc!BEGU z%=M3AQO)Lk6;8-Z91OKw$AN<2%9;FRa+ueWBg7oq6-KXtZWh%>7@86%Tb@*Xi z#CdyM?~UcCE&4qCzV;(4%S+vVG5#Hk6T`GUR(RwuE_g8a{qxWVYyci=NnR50$I=TF z8p7s}!pfxp=jmAC=;!SVTl_KEf!(ke$cXV#VMq+H&8^A1zpjS?Fa_5VYdqv zyde|>6Z{8hFBdRIzK!GpCfv*wLnz4q!#6u>(o1tTKGUj_oIoY==Vc@OD#QPS_)>Y2 zmNF>npKnH;79t^({07J=5d8Da zyoi1J7mP0qmFx3Z*bMse&4@n2=V)b><3lOaX@It`nN%9TaQdce810)}r;N6#B-)Axu_ZLnsZArDcgCsR<*jsR}NY^>gZ zCr#s`p5-2LEm7a*EU0N4h)@Zz(zS_cJqk{96SXgGEBO0Eo~SHHBm2vG>Of_rRmpUK z(U8_+7QwM=F0GHkP#CQuiR2m$n*kmm$R@17paZra*eiXqh8&-Jki4hwjp{7z3}##Z zlK*!;6UR1YYxI5n_z-b)1E7rh+p1gQi@wvOyo86@guCx79#mE)O*boOTtDxnHBRo} z^N+vtu!Sx?NZo=1a}^K_!sOei5!70D7|Sn&Z9@PfPb+_FDLu)b@aM!?u2S{Y(Yn9E z@%YYZ#PSH|?}Ut#-BlP5)eLBF44{SJw|geu_Y>t$pC23f*M~9(!fQ&+1iWAQm;ClDk?FIhSOTvMo--0AdBBrtUBgiyUPH?~2Dlvm5BBaV zs;+KP*Yw0E?(XjH8r&g3aCdhP?hXNhTY%se+}+*X-5nALGIPkk);?$LQ?061t7>&s zjQepjF8k=u_s*0df_=vsv6SSv#Q@k4NaF{eDi^W2mD(v#tL%*SHBJ5`b89%8&B_32 znC&M2C~U{n`6J8Mg~a9P&1pLim#JCGm{KExaBgySq&cXfUMnhoZpLq=HKF)RJ)4lw z0)}3DIw-upuyDajnO=0Es*$-eo8DH>rhI(T-M_Yh@z^nQt?`_zwDZ7DHvnH(5Y3~$ zfwL+pOm6moO2cT_?Q$yveC(a{%rK8Goq8#;S zRTI;N8*}nD{#IW~YUj_6tBS+St%mc|uC#_L|Cv1lQ#8%)HHoXhk#a*1ytGavBC3$z z^hVGo+})VJC_*R7jg*~vI*A4yrO^nCH{#OzJ2;)3McOwpzwwYUy4N^~R>3jCF z7diPmWtqHOqz#cF+Qx?pn37?y3`Qn7~)vOqH@`M)R=fBYPxFzB4p@Gl1~ z=Xaa>F9$tt;a;2kTholQX=UPG{NE0mcfz46IqBxjK}(HH`a`?sLLnXs^~p|!O8#}w z$H;Z*Ghf173n({^#6GUh{&mnh=avc{t8?F=e_GQMTC1e4&KH9gOO!jT-?k$c_LYB@ zn+e)zFSQOf4!Tvjb)2ECrM=yCbgvFY+%|f1&_j}qZ)0w64ti~cRsUDrUkBaB{VxY? zw`Sw8_U53u4cZ9po!=bv4Z%ap!e0k%!?tk|_U54922ZBe{yOL!-fRcIHwS%D@z4eJ z=AgqpwxFcm95mBLF!TCf2W^c{3POXB{wyw^Zv9xnwM5RRs@zo^-2n$$VHp%3gbO&_b?kf7Xws9_ofD1zifb1-Imv z80NEuetOF3)v6bJEl$P$9HrAcGnnFALZ^4HP9mYFLDCo0;`Q@~~&Fwlm{N?Q;^xBZr<}L7ByE41~ z=Sk*{+sI9yBZ)4{sv%H5uPt!VFXkFX7!tht8?o>Cf!@gKivXG(f9~?3zao^zpauKTQvi&zCH>uM;rFXU?*XyEoTOZ-G_uegCTo;5mS3Q4T zARuJ0I&EhRVhWTt3k9=}caso#Rw|6Z(etxTxHJ;{V{QbT zBO;1C`oh=0*m+5=2fbg!9lcFkI1cPJrSr7M2uBBnN|B{ds|uOW7+0=Ng#_j zbo=<)TUlJ$`Re-w<=f2X#DpNld(L__p8JI7dGf{j#Su6@sP;>`_Gh#A6L|N_6!bHh z^vm}5%QLh}hj1y}_kWCGFozgWrjVf6>sKV`KkVz{qVFfN9{AMXEaNQ^pfdndE}^+! zqJ@yHlf|YtPi)XXa0`$ONoTH9f=zLRMQMlKR{FB@h!_Td%OipNE(~{Q8FvH#l*Gfm zL8OZ1jLPGvA1oaDrmW5glCJDhOLUSOz+4B0xC~24)B@n1FmT_H#0DcSBqHuaI59aN zcn+G*Q}wAg5*WH78RkSEUb&9e&fEK_g>L z3_O-X)=C6eCPKM11T#pR$w?{O$l$0(NCZ;(X=95eiiN(-A9Z8ciQ<0*OAf(FR^d(d zmrV`~D7g46bD=Vl%+VaOU*l%m>#R&^MMs=z+Z)=Q2AEFs%clytP6GhaLx!<+cCr0M zM$~m=ix^4^AQ?*p#6qgm1G{k}ydqM)#zLhF0Gbq4F{Dy_qh<5dZZa7F%k(%jbx`muhIZ@(f7L#2ryWKjGO0)C@TBvDMv_J5EUn+VnH?px`Vj>_A0%^Q!&!>uLY z@0lQ2Rj5B#*jleRY401nC+CGM0H74?W)!TU>**_5ELP`n&&6Mafg{wP-QFs#%Aya1p6DO`z zm3gwG`%~BA5n1C@ou(1>umSd>z@|X_mOT7E-G%`lrDkE}*F+^BI8dJe zYn_)vm{U}fl|A5BX^@Z~U{}OcyJAxlfm{<R2ux6H#c?q8wC@UCfU8@`Tw4(6 zU(ofx{UqcIWiH&h-`*u-5TjSJA1507aJ-OI(qvUggswSvG!>wN9eSCcbWF*;Uh=Cqv0v>(q`9Vu5UH&(#Vb(9%&Xa&}4LL2G@ z8-FOMHmd0ahpZX9to
    u+B(%hqA3SZ#hC=t$=6E^KT!lkMeX>I>EEGF$2u(=Aq8 zAE0a>d|e(AobRmU87b5rylpNHz5s_7Tc==YoG*BxwLE~pJW>#tF6og*4_>ugCAZryh*JSa5Z`L6s5 zHK@xq82xI{SGVDL|7WMs03@0ou8%-Szuw98kDR zuULe6xvRZqJdAI`1Zl*4xXUov%~I6B7G}ih$H&Db$}4F?7i{9=vIqTrk8g7Cw0$r1 z%!CDG;tjvwylTS1v@a;T56*AOtZz!6R3WTMImcLC-R#QoU=7afQ>Iy6o7q&*0b11o)TG(-?*p`$gU(a4 zX8J=Vc=JlR!)d-lc{}q*y+hxH9Sg-RODs+6OAZ@%K0EVfJrK9OB%h-_gRPLdv%0>M zzN*77ZdVYm`=+W3w4&#tt_PC=p8AmyNPo;bN9%JVhgT!7Kasj`oJruI#nQo%s-Wc* z`EgJYd_dfms`;^jvn5IJaRk>MiN2+%qGeb1v1x-vw4a$O$TFTwA*RYQ(Y-0wTq2oB zI)!L0?y@;1hdV7yJ9Sbkz0)*H@+2WzH&dM>qfz^tpKP8aN3J^Wck}VDn^wbQrz~?P z>h`B$64sI4r|y}jv$58N6Q_c0*6SPAXlJKh`lm@%)}3mnHB@F_iLC0?_kSSOREOa< zZ+>VRWNGoUY_vbCt>S7cvTQfE?jX`_)wk;YWfQk;L!NEk%Vhft%@&&fJWbzL!}dHg z`#dx5y#CT^fT?MyYJ1dAXW~#BG=-!+L$un^X{(2I(l2DE4Sf-TsXxo5y)3D{vUs|v zf5H5Ve{xZM)m(eiU3U)aAQ|&=XE4%+>T-|h(q8iN086XP7nTQCFTbt;TXwHi3lCh^st^}{HqD>?^r6BX{RbTCBpe?I9pRa;VLe9R z9dux?uAY!?igd0Eiki?;o8dk>A{XIz2Sn!F)VIMLxp4 zT1GIqL43IRF6QKgc`L03a-xKBd}e||dPx!xjgZL&>g39W{ilg`jG`uvK#g|>k`z$+ zW2BhI9eR^PlC@M^|E$W%(4I6>QVG6Lm+J>&AU|~lw1v)siQtmU5J0nIQ7*z@C=!_F z%J##R_klq%HG}vVvLO#F5C@31-plS0NQ4R%y6x@&^8g^}(O$YQ(Hh3Kla2!+B$Co5 zk}CtFD+uv>PziTXLp*;f5xYrAxC5nV*T2pJggvdgV6#!&<%{o(VO-4@-Aj9*qTWC> z&KrnMW+Vu$Nq-D&eheIbj77%upmv^?!AM64umlGnzsiIFWgUB?verk!r5})A-J>iY zyqRbkB-+(pH|7X3y@--;UeZ|iU8LA9 zkvISpB_CW|!1c#SoZkSN-+=8$VSf+LKh$6d0Pw8NQ@N+CtH5kzk4122rOt0)*PVfy zK|*H0c_qX}Pmx#P3joKbYU`%HGCflSco#!)KR(vs1FZZOnR5FZg#Rb&hW>*a>4ydx zFM#xOgM+uWpI0gEXdn=(*8&Jki2o`Tv4|Y7{a?s=X z+aI5&x({wneb03&Vbd?4_kDs4e2dc|(vKmQkI+AWC51NoB@Khtn|{vR<)q13(W50YKx_=U$VF z1E`b=*-B20fPs*RWHJAC(1{FIv)_BZ(rMJ%(y|qfrLkGWnet5Ui19$LQJAt;he}~X z;8OUovnY=6Lc{#ZJGrNw4}tiuQVEAvv{0dqxrzYVj+e|4gGQx1f8spXj37er1Hu|x zl~g((31!LtbU4gN`@_X?*+_eIz)srnZh+p#4?6M3y=&IpXU2n5Svu>r!r2m0|YK91VyMok`Vyk{dh+E z>NCcgWW8QVrW<|hBUucFA`ZENNk7XpJO~6v5+;I^gsCr154k-`53!HZ3kQjynib1) zI=m+=G)t2j`U%AOJ(+PQRf!NfGA|y8i7+3G4EKAwPZ(2|3mO-qMM+Zn3~D;ZLrXHW zFq=Xxy;w%aYoA)068f4@9Dxr=`pu&;?ae{+wW8&G38RP>@t{c(gSKY_-*kjN01J5A zCfe?Xf>q{=FN8HJD=lEZSSb_z(My-50a(r(z$!bqRziV>Wrc(h^D#t0K;B@*N5Y9o z=tI_P4wMpAfQ~m2Re~ltsK{W0GS=rQp?cqjczuYE%C3LOcrg=zcutE3}n1p zOV*gY&!QhX`LEIThy-q=kPQTGTXjkWZgc-kf~fB%_(ARW3u{sxKfg;6@BLbVkMm90 z@czj0xR?1y>-P~dQ)l#fd6)AON9&)?zMDD!KYG9Rrk-x)5gz#=rsVz0-5BjAaetXn062mn(9i;Km-nV#Xt0@~0Wq1X`>@Ek0Cp@iGHVPq`~g@gUiY#% z4+2G^j~23@C+D~VAoGAnRD+I0iCND+MkvNSeR!KJ;ioPty(fRYMfDx=7fg<#j&f5q(*qdK=X7Iv=|Zvsr6YM=pa0$GH0RHby-X8 z^zuL+lGMlENCvABW$hg_5Jek-bgd7pyb&6@3oP%UaAM22InsXmhh!>F7-xkHbymss zdnyiovtd6fXWD4UZeIRm#abb^I60>y?o_moRf_dhtfjPyCXx{B*HThny`>rPPn9D` zEJ@(-WDJSHa|40Lq%<^2n)Djr!D#_GEB!Y5-%C+qkoM&gB+ivSJfp@#3m4=v(gGCm z0+Q%L3Yjn&0mgU%=}bTJ8yf7)olj+Ro-jU$RO+zeYpd$rs+9H+P#KCntD4e%O`i-o z;3#idP+4tgW$3Y02P8uWmw+{Lh+P=yu*WZDaWx~e#>z*wWRz1;KtV*tnEASYs(iHi z;rp{nsYk8}f--^v6sb0B3^A=4D&S56ZOjay;*TFy!S-98upj5a2TYMYwjC~%NJ-mh zC+aU3;G0~?>fi;ywPQ%v7G5L~*={_PrqKl$_bK-B5pav|cd>yGW24#P!ISz20oO8s z05sG*$N(CR*h^vc0EOR;%LD9dm%^<&J1_2@qsXWZfZ;Kt;(U+B)6hz9Qu3)PXQdxL zh{FEY@VdpIhH5aL^AvKlZ7}MBZZMwf6bu3Y^pg94-y*ub2s=9`4h15&zHHprasy?` zRxpT2kuS+-#{gkIGB%ty9Uc4Km@$2v*~=+r%sO72zJEwxzFrx;+vE=&_ONIeFd;T; zt^!(k#1#~~>_b|i6)MaNPyyMLCgbZbRpT}2NwNYU8#Wn3aXS$~?DfiM$K3!~YKWc4 zWE+O_S8$RAXta+7308Jz7E*0{0e7e4l47`= zHr_K0Pr#H00yJXc=dllkB8aWF!HWEztMfVO4G;l#hI7w5)DIC&cZ8SUV%mle)O%Wn zbY1Wo+NR+hJUd8p;(g&aN>!UUipChPBfQr4p#5ciAA-%hocWijh|k5=5ss4SJtiT7 zKn&gv)vN@M_l>CyEd~I}Tj+%L(#Dt1;wnh?Oy33%%mZ7-ljF{Q1QQ;<9U?b;<;uk+xW&_tRK|eQ_ ze{Q_K60XwrUzh6NKn<@^8mv#~-8oHxB@#z(7-Cc331@b3RK(dcxLXgK0%(xhKWjme^9k)7u#B=rdo$HZ{*w5^OqX-J1W5l#em zgvIlKOhk0{pD-^MpLn-3N)4qQ^RQ?r_QKDRVhzB`(#5 zn9Wmc-&D5Gn|YR?mn38m5~uW2SdN)6GbIJ3&(Et)ESM@>N0QMxXMq`gm-E3K6gTF5 zS|=}39Fw9sqW>+}Lm|1;a+>AnjZd5`MMq-m9d7r}doZ_Qo!AI!A zvtk)K*c|VT;%9G^^-8&>lSqod%hyB^ByfQ|eq&e*ImDuSjax3!|?Rs*gma z^^4N@aL-s}$OwASgo{cXgGy1BN>aP%w-S}Mq`843mAUodC(k0YAS(0KB;yow?L>3S zGIRCXBKe3S(^e{L$#7dCN?ZK{tI0#tLn`z2L*vCFdn`l;=;CVx3kUEcWiksjykdJg zYA2#2mkdf5(IS^yQ@7g#*Ze~_NsDPy3#%t{kgbJ8lm%Uag;>U0gUP~6rP#yW!aMHJ zTieu!i^{9Y;?rueHyoAUsf2IQp%3WL|FYNw`q(h2nCllc5*f`H3XLIMNq~9;kHr76 zmV6wtnH~P$YRP<-dIkSD=uVoL!IBaI%k$xq*iD+aHwQg=Ondon2OW0%CH}92wn~^S zd3Vs|9h>x>hvl7@^j*KoyFm2a&=uWC3_VyCJwyz>R298U41HV`eL@WVk`?`m3;m-MU|^njB9Tt)lSCs!OHc?|DQW(vj23@snxLGSm27Q z;eN2dH&w%Tu^>#n%jow)^m`%tuloPL{k#{Vi9dF>|Gqn(D>sjDDBV?=t#bM!(DGcNzUIqu*up zyNrI9(eE<)T}Hpl=yw_YE~DRN^t+6Hm(lMs`dvo9%jkC*{Vt>5W%Rp@ewWejGWuOc zzsu-%8T~G!-(~c>jDDBV?=t#bM*mZbewWejGWuOczZat4W%U2+LiGPpculk zd#M_t@E54_2b->NnP3ZNxSkZQvwRCj9}(QoP$Mxa z&q#ACr4+fs$hZ_Vh3tG8ifI_=rIZw8A5ltRY!_bWorf#~-v0``2@r=&MooZ`z{#|MMfSNjP=U{V)we|Ume{kH((>P75 zFh7NUMNa~7+jPE`HW8vg`m_{2zN+P{Dru4t^(c9nE{^p~d7d--#NH`I@wRf!5vW(TrCHCov zzmv_Eqqyb#MCkr+`Dm480KpWkZEgy|)2avWwnS%y2 zBq4&j6^0V$#)ItY)J|;M|K_7Pe$_xlo}2ndYYr5tHKufso7=UqudA4S=O_`;fiQ%q z%jax#$-dOVg!|Fr+*Iq{VXL0L#&M)bS;37%i{y;5;K7VMEvioLKM zP|>+nnP^vmr3bhJn2ADM3k0uwgngzVlB2e}uVk--@EPV{&bV8^n@jxLptehZk1)d3 z)QFI1ke;wcKmwdzm~E)lz@$e#YQ>wVt%Y6qaE+F|4VGy>1WYi90N^!UP_z^sGdV#I zi3o{vdyG$f^CdUK>jLYn=L-fgIhei-Nd!xsgcFv> zmXCst`cwJzzS(kZ)N`jR9L42(C%*#t1V0MYmuXC#sy96u6q-+!&V04jSbJJ*p5(kT zRImb0JP9-`HdKczoEtx6=+x*>{m`0SfyNMqR&eY^N626E6v@l%h7@ktak~f-Cj}D6 z_hOVNLDB2(q-?HZ^FSraY0b{2K+V|EX{?OqM`%lobgFgE)tx8X;_GWR14KZC0rtf@ z20av>O)!a}!9!!+NX1L74ZJ^WkaP`Z>L0#Y)n945y$HOjj~Kj-7=~WfYLFNe2FffT zY({rQ!&85d#ug<25E%Z~W@gx)kXG)~e(?t|zWA=$xg0#~t5_i+`l3|oecBr*oNdam z{J!Y#a87IuKXT$(<9GB-X&}Vv_2W|#T@L`lrLx|%hF@BfX&w|4=1e#rgvGQ0VmGXa zw?O+Xo~qjhF-k*F=f|^NOAgVQ38JvpPN!4OL7HyPm-UT1qQ}5$ zFnv3o*YQzUlqhb7N1)F=;_fZw6| zrqAw}R}%dA0^J0@&@W=wV% zzNtlAWL}~{*`k8vQ37)^g!bKr!3v8t9W>L2 zHaC`xjspTTelcm8$M^%uM;>W^;t);@6AnFc2&FMTSX!0SNZ&n@{TZf(;^hN7u_zpN zdW~R&St0n{O!&-0hAg9qSW1FgN{CKNhMBH0rpXCgY6)>dMu@A7olb(APKb|7MrlRM z7)d}I2_mG2C1aMM<+LJT{Y=RIo0OZDR#1k3*NTw;g!BU}tpqKBh!&yP3aQiyjRGuz zj0~aN2wj(=oLYe$ao`ICYw@xv-A|_ zw`TN6@SaEF!fi?mYO32xs-KmpR|`R))d$bdBtE}WBhu55IMPOX(x6n+pqGC8ki_5c-aJ4Z6V|*dc@HLRBak`Z7OWpub8rF5T{@8 zqo{GC9Ee-#NoAAB@n|UVsAy%Asmsy{PvaS7sp+3WS<4(a>8RPGa+$ptc{4}_PjmUL z89#WDij5|6pE^mwQA?ENiDab8lu3Pz5>uA-_ym`$W=$;@MXAL{sxz9T;l*!|L8UjE zuOQ24a%y7)Cu!A6XYoX0clzC?jLyM}%c-ouEsD-%l;rbhjE5JUcT|G!DwY2#1t>U* zB=pJBjE^xKFFnw@Fp`cjdNe(@l`0{MBAJgQRkrvG9%DKlNp>sAw~WlMa4g^HiV9_O zi$^K*q7qB3zf_h{mRpznSe2ns)3_uX(eu>E6v2qYO<#6u+HduV(5z^9-<=| zDI*`#=IMc>nmA>flBJwEC0N!{5r&l(URXu6>ZI_ju;AL-? z<(|QnUwLI;z~$Z1$=q1~_-UQ@;6-_O>b-CM{r6M$b1TJb1~HUQHW)t*j5jeneh%z& z8ggb1YFiFOIR)Zb1v)lR*jh=jTw23D?N?6JB@5$O(~>J1!0YS zB2A+vO^ansf!OKq$xpL3AL#D3u87USbI(5Kb4r6y&z zlnu8@owZG*w>8(aj?%RsJGG4lwkwFV^TD^@TD4D|v_rSG)zWo1gJ3#H@!RQ;XC)Dzwhwlk4JZ2m)D-cw@%Tw9*mWowULg(f4!i`zgp{x zsOfSd?dE~){_(jBQ?27Jy6U$a@t?Ks5u0u|_#S)FZkd~IID(#=wjNsV4h#Zf9NRRs z7z_g4-kOu1Ret4P&pm0py}wO*Sr9U47&_N=`pCw6BaM3G_j?QS`k32$xnjDSqxK+S+WK>&26BxCL_)iLlX^bM_nX=F zi{SUe`t*ralv=*DSqlu>jt>M_4=S7u6z2`-&)By?I&>!4f$}w=uE4>Nd6?m;9m@J; z4R`7dUr=K!(7zC1c#UIXP%~qN+iit}pwOTM5dcEg{jZ#dai|sadxkw3a1sa_i`(ms zv!o4JmB5sg#KM&(!u0wKn&*uAnGL;AFfb*>qLK|{Ctx-1`wV&jhO%#eg+Hp z>|is_k2$y={y!oL0UQ+tDOR=@6BCz@0j zpf~(eWdah$UlLn$J9Qeda`X`)iC7Q!*EssuEX=1RkoHUJWG(?SP9-y*9`m0EOt^`D z(pN%Cy{VU%Dl|b9jEUJrfe8r0d0<{(hr}GY9eNC|`hq#6KL8l06uWNzzo(+7v#@vx zn`HFHkt=%*cBUGR^uT+<2B@cV)+eoS^yUhKiG1e*YUTr%qTCE;7S&Ngx3%x{qYVWY z6Hym=on|$SCa)tP_%Nj5#oW| z!r-v+Ff4{pj@?*ci0D6j(Ib2@-AW8Sq>V6@;%w~3>^dgJHo|(E!@)?FwUy`WdgcfI zsYT~iD#gCVqJ^<*Ko@9pdgyh&n3>Cw>{tNK#pU?dWpQ5=Vo4WV7UMgg6~Ba)5^BT0 z!RYDre+8r6ls6cRwuN4XSQC~8lpCM8Gtp zg0Sy!vwNQpaAfqo5)Fj7*}p8d4~OiIGj*qdH(`lx z5Rf%TV1|dR@W(NEhsRkwd(S7cC*!mvV0&@I%b!Hg&9S-pgtXQlQh zwmqk?Gf`{*q@tVSu!=hSS|U2daa!qq{u4%OS7L1NH zTDRH(-he~)6COXuwPJ3yIgMW$9;X?6wu{WsPzbhL4Z?))Z`wu(U z6<)VxM6I~r#x+)>ehe=O5j))_IzH7pg3ma%00E}V%;-nabjeDPsZJ0z;DMCPmdumd ze~#f9bKBz%Ixo@5HJq(6U8<1g!;t~(QY+l4F8oU_!ia!shA|jS09eC}GRNyr?shefQMO#PEjvY!Ck$a4$JNdx474|1~%uRc2fCDG2 zqx7eI5)92hdwfq1c*u_*@;rR70e+yPCqVb&TkAUl+q?S5ay+#GIP_E+H=Lv8n$pWH zJ?fqQm#53PmxHaJ0;FCA4@^ba&tyo?;U9Ncc*3Cr7k@Z-@AytbI6)#vzyU-cx`l(F z5Q)V9X+}dq2-xB%?}|rZ{?m*m9|#BI@`L1c6dnQ~!VO#Q?vL~&P{@el0(%a|0jPlb z0@yjjBog8R`8<_@(PT(~=`4lSS3__pcpMJH?QM~nARb~g8pCZsP`sX)`#qlexn}L( zW^_4 zvJQ#sO}xlFMv?6PAk&1q-r&d=OA%C9D3RdN0zjI!hVYU?1Qv1l7 zA=VbtXPnnpC0YO+rloprHGXLbY(v{@V~*al`z20|2Mn?P%VXe3jXzA+Qf@|^70;Zm zE{k)($m|Zf?KKPZejm&o%<>fpE|K-NV5)vV4+&guE-XCSFgZ{VNL_#efF)JE0%vSI z9u6b`svraKh{P>BpM=jNqLI;0!6U*QyGcT5ps#n~SrFJzN#Xcr4Iz-Yj&r{sZ{8u) zhqIMb=fQt9t(Bq1)xMRXEiR}PxDybi89f)J0LFDi*wRP^Hw%>10Cu-O)&|qTZ`TI1 z!5h|XTdIJJ!h)@N24d1Na+SvD{>YC_-Sh26=d$pjK@3dxo;%2kV!q{~!-r{tl{pd7 zdRhRIB!6?!o+aRA&5(KDQ2>}2N@^NrjB4rzp=wq1H5Ksra3heyadC%$ucWLO^cZJII{tqo#&iN;sCX*wo(8U!gDi9RNS)^tfE&CJKy^L$ zjSdX`&xo@3OZK^j%k+l-i0G_i5>0nPm$n1z~oM#OZBDo;qD zAg+K<2PW>jhM#z})Kay~@wN*y!}w0yP~zfGZ-y%%l(XpL9uG5MqwYzu>3%NQ0N8v> zV2FXYdErVDEFR%;aS#EBaFBEn$>G{ETGm}QYAZ6juU^3FNQKV}b4iFj{FR zZ6RQTige$a(SULi@#D8<^t3<$k1+RA-6}{LyH}^jmPDU!eF@H!3=_Ot-ZF{+9;};+ z8y8a1`N;rqD*gd2YC2qIbPG9DItP?oO)k6)A^X^kDFquAAbzIzsCz3ObS)0#DG??Z zpN9F+jTi;pKM$MK9Ryu13@c|SitZwbLg7jQ3()MNmj%Gnp67wl0Yp$17n?}=D#Oux zldFh&>A(M$533{}o&=w+tCe826m!`YBbctRa1+YesYT$|(EY zeu34Q@5SS)a>lGpFm$C9UHlpEj(baT<2Bq4H(L|FK9)@4Ju_Sn@)%XYnqw^BFlUIca0MC70NLY?x z7bZri(H}dRQVN3HDqbHZ*^JLdFki6=Ypo4YL+R!qlN9B|^ zR)3_JYPir)C0*F2dv3l&zwxumz5DI7E;hBDagE7&!dt(%HnsZ1?aJE>-#}=Vo9wKC zS$`+fK>k+a+vCrx`NK>D0L)`L1lM&pT$Uk_ak(2Qg*pV+Ht$ujSq80<#e+qD8}81% z5BbtD?2O*n#4oLrN}Vd|ceydzckCWUEYj#H`aMv07|x(+-c4+tsR`j1NA(ZT&i}0$ z9fN^$wA`V1>6GG0aA3!{GOF?KW;A`vh#s^{+CR;|^i}G@~=> z({+>@U2=X3=<+?RO!-6KCp^5+2_UadhrczWH3ZBgxL4nr(e*j-gjTW|Z_Q{whVQH$ zR*G-U=;G}AVhO>wX0&!s2A5lz+FLUko^`%5%&p?B8Qs{PvDoyt8C^-CdbRpbGa6#S z=3mX|UvUdr|1_hg^dlyeYMBcXL5@!uS@f5k>D;gYqQTk^fV(|sg#D}bzyE+pft z4c#-)|GmWQvCVCm5nizy+#Q|{%QqW*x<~YU6vz*99KZ*e;eA4hZR&F5Di2*!2eP;S1lfcf-v$wY~+TkN*av zp>@Bf*XF?1ccT_GH${VgJdS|VL_}u5nE$61y-41JEB^tU;EOg%B%Ejj3M&n2K@TxU zb7LPM5d|`IyC;y2Y9FGPGNh{hdnnIwgvd33Ts4j897I8B+RNa>jSu#bXjT((!t#Fk`F`TB{eNXNMXg*rt8fUON*48}7}gIM z14W_|DOM6KDg)@z18Njy8U>7SwwyXi6G`07JOq0JzdzxYS;_O3$tjGZGuS1NvEgPFa|6-%=wYO_TED z3A;xg%w3N+&mJ>y8VhT?LOh@J){LGV(}^DHg`VnOl|2+G+3L7k|iCAPAtMr;vS zGBmh(sQ6&?L6)6>;{;;Z#PI1M1lB}=Fxt|nL@>rMkbR{1S?ZECPwaDqcuP?lT?yAZ zl?*IE_IFW`aHhgZ(nr{2<-l~6&p>J8^5lZHBmtQTQQ0aT*<<_&N2fIPT2TNEF)K%e z7F>X~7bR|QAz+#^s3cXt7u%OqMjd{*pgyi{y{RY!C;c-pBa$+-WRw#P%Q%uWS2=|_ zqd-#>kMMRVkwdm#K&r8x!L?qt7Z%W`ReF;ro6bf&=ooXKK#EtE#nX}%zn%rs=4`-_ zU)~<4BOkxC`r_*Y9L$pI=OqRK66F5~6N8bW%w~P-;*je-mw&F~=qngQe@bk&9Tv-% z!S({;jLHP%j&s*!dCZgYCrnHfOsux|9=f(o6VQmj0Yo!KTlO=8lqe+muw`HY5^iLmkJ`U2&3tyCrnPEyU zP)HS4iKwYM$*V#K&-W+J2UX0=#FooJ4asB9G99R1-OhhdXjHLlRv=WHf>>x1U06_2 z=M zr>r+~Tm1A@{W)Jfrfv~+V$nuo#Nk!N$*tZ_PtoybwSA?8+l88YtfI5Tk~y1(Rggxx z%Mx10lBb}?3}{T_=joDAg@&&}um4-}ZlgD#q53nXW+*0dn1re_=5mj?rV8h>Yqq9b z<#L1@S~wK4(*5$63$};_&4u0NS@4yw5-SwwD+z>)F}}q~p(|;KwaI2$=58yWI<)NR zS8O)4{+w#bkFR7DY79NEC?ja+*)4x(Y|MYHjh4{Xq|`2K;40EnD_3qM)jg?UB0$DuHzrOw$Zj$ z$646fAkg#L+<__Ihso5BsoD#*-leP?J+Rtkr#qFjuIH_5X0|@!yWHQlUQ?+%k(@k5 zDKMkJ2bzW2*c@FiV%KZe*_b12oTqG_L}XqmlvuT6Tnp7%qMR=Y)r;=ikbBukx!8z; z-xOxh&m`PLv(?+!DBl0sw8zMF+#q%$(RQGxeP*Wb*{h%7D|i|zcICS??6!IS+H%v; zeF4RF%_;U1@zV{Zfrf+uiJH)_1<@xc%?IBt#n`R8b%U{st(VG$Ka8Bulv-fWhS4O3 zeeByha)uL4vtVYcFq?5;7;GJE>TzmE|)OrFA1E>ouJAcPx9Rj!ChB5 z&@K<8@ui({q0jEuXk+2*-KN%EIi20-iQP}@yM~p<0cXbd^d{6?yUaz#go>T)gF@Vk zyR0B?o=qcONp8MILrx?Ou0=tC%RQDVjt|gAf__@UIqG6WhT>dCBKmuLRHmBsdoCuX zcz*kmlI=1=wDQn`3PfTOM4XC?0!l>7(n1C*Rr~EIX56+W9~ZY(J3Bap%+wAI)fJ7j zp$#<}C)BtOG{fL^e~IWF9w=^_)zuv+-W|v>nTzuuiV__fRyCLk)tiNxS`e8DO$u6F z^4k)T*`;V$PU_pIFl!ba7Tz9;Kv)hmQrNql9}NP*T(w#Q5Bw1^l~jjiHJC$h|_ItjVdPZiS1 z(#Oqpx6EF&$Q;!9CM5fv${JGgRMPg;($6{%^HkOMxUj0J#D2A`(R#Yq8tTH@PyMuV z@kezEe=Sy1X%TO|B6}s)St8e&qUl+q{z(&)UaNV_k44RfUp37sXVMKei?3&Pb7!ge z=lp$V0s`lu3g@u&woR93dI+{AHs=$*=jCzdXC3FIdgq?mw!g;DGdFEPt{3Olujk*H z>}rTEBoXZlb?tKO?7sQhW=fu9hbzNnB^R5*Fk1B zfy;AFb8}AXeJv>9<_>fegV!#1@IOE(#STnM z1Qi1@qRn#!7r9E*zZ7D*_?W@wH8{$SOBBF}cpEYY2QJk~F2iSjLsWk#RrX!#-QQTv4JCsb4W81$lDX(`Ccy+z1%M^OEcKk8K%PBemdo0Wr@7e81b}W zxvWAyj7NvYK8#2EfK84FUC7ZJ#(aX0eun@28UH=`t>(GxD`h7!3iVyWptCWLLTuN5 z&e(QV$g z@7ub2s@6QvPEWW#${$(8oJh=qejlImFF^lSVX1dTA5kj~(Dq9M*-eS~<_xZXht+WC z*vNB#M)AxO`r&=MQV`6qz3g5n&$j|P9u7tyUWQ`y#iY_8)*i#wTYsh1-N0qk2G}$x z#HL3Qz=JFi<2?QhH*&7hjOW;n2)qfM12>jU* z4hVuyeJ2B7OCxUBAOP%L#96@3J7hYZVNYJqpObfj=wJW^6PuEk3Frq@!TiogXLN%I ze3s|cO3;F#XmVkXum5W^x{+b{VKZ6-rvQ^KJ|rECr(_Q=#L}t2ucSZ1FI7vG30F~5 zy0lj=Qc8=gjyPkM7QtEvTf^%^Wl6wfV1HyVuf~ul7WCS}G1Yp!$&rQKnPDIz+-$!NCM7)%o$`0s zXuu+Roywha=h_DuisicRI=}e-X(Wk0^Cf-;6(uJDLQarD3^;}oZ5R8kl zs~K!i+r>B_8d8q}0$Zf*C8|qCXeBG=?qz2X6=c}TKf=~gl(EENltBky?F>jsUc$7{ zD`TWFWVn-|+V4QWFln+LA{FIQPWBmV5}RG6Q1Y0yZgI*koY;tQPYMqWJs}<<>&82X ziPa}HLp8h$>mwEYH4{qV14gq2)UX9?0UHb>ow7rGwCau|{=M3mH9?)D0#IdELfy@A z=Xax9$u)TyBVM^kqk zA30eAh#l4A=2TzDN>E#U<;Y2pf88j<2|Bb3S9cB4_DKxOW*TyvB`~iZ_x}C7HbGlc zk3=vz6~u3J28{+R#n_LfQa=McQsL|yl+{L~L&GB)v{0Z4bbI3tkUf6y4p2S86->}G z`~5>!+Rlzgwgm&m0d%ZIH!b+9{ubGLEJ`i9&wTs)WG}@jFn=V?kNs!g4|M?n>DTLA zkS$-uoZEvMZ;j@Y29hz~_}q!WdxiIT_Ts1AW@w$?`wpu+&$@r)9-I$xJO<9Om_H!9 z&ZcCa1-zYmVRri?!027T-g;J=#7%=AjpS`yj2Uw4@MWFkUEK#f|NDt1nrFY2rp*4d z?>wq_hO8QR%>L(Y`TadsJxudH4>Y9Mdx*vhr<2VuBR}e`ly(au)|o)z@nOVDLUVLW zi39L|$#{}#D_GG?x%ZaXh$*VVVz6MFY@vm~*hTfY_ykUbGGo1wL-%oFIp@1%WB)0L6t?obaRt#di@1 z4T?5GPN0wpdaVcuoJVM9TM~t)KsX%}qGSyjtjE)bxu+Xbo5W|GxwWdTm{e7?3P4!Y zGGZbg1!;I+f|_|DL995vkIaC99k)FQHlrLW#m++pH$GnG4j&-tl}ba22gx(5r>Z$v z0bAuN;^XeI>BWq)7l``w(C2#ZaEhzJ4oY8WpZk4(G0R{A9`Noj(vz zV?U%%cU}-}>X3#U9i-GpM~fB|k(iKIA%%yHA-th)pX(A6(2vTEHm9ym+9}LGyo6_# zsg6*0p%2Lt>lzat5Y@;-5~L~XlqIiV&8pJB=EP1Zt3FyC@x%7uyfbEbMxeYDdy(SF z7)kgL*vn^zYtZt3JCGF$iN}j^t-vpY$ZEmp22t|Su=wEDl963`v5dtGCDqDU;m;A( z0sxmwwY^njdU~PLbryTnz&=9&5H^j`89NaqBK$OOWSV$u8UPnXHYzf zj&-jd7NAF7m;$)Tcg^DVVvj0sA4}Rk-;hUmlTjM}IlZRa!-c&Sr8K=7Pwh?){civ3 zR*G31qyBcYF1b(D=8+R??_ske9Mx?H&L{#rdXr=W4Kg^cZTm>>;I7DA5*AWyF>E#F z?(xcBR!$h8<2!2bprC>&3d>=D9bg4%0$faKS9LtGd@|*8OChwrw5Y@9QeF4}^&|cE zXL$UwVa9vLK?HQl$Ut87u?>t5rB&1lyJQ(?G4kN@?P_p5~` zgK8@51=r0Le7`J%%E>uv@V-|yHKwS=*<#p6p83qE6G{_gZh%;uEt+F^6~xKsc2fjO z$Sl7A=DrKNYXY@zF^;6(84e=@TVvocj#PDPTfKO#@gpvKh71OivpsFH7(EHfiw6QL zv8{#Q*W)eTQLKzyU%YhCLgikE&0F=(JvDBMn>N%HiBce|YscksA=B`nP zg!VW7n{}+#${j)q zVAzpt#XT3kU>+#sTZs)A>?0q?s zwk_xjm*DkZ3n7@j(~q|yc?5Dxd&GAN-KSnXMvTwh3f)qoVtyp!7rzhk^^|=|2@~IU z&}7hy$$AqXpMEQF(a8|-rFlKS4`b_sj|H)|T6=favniA0^=h*q(whkMj_sHld&Gs{ zYm?^1PgFY5uk%?H$$q8hSPpM{gI1(R$m*9+N6!Y+!obnqoGX-8(FQL6-`3G1K+ho`vG(uSBbI(bSJof5QrS zxEY=zL9wTFXy0e`%9s!<&^+`z8jQv*DaO15KDi&zkd0Nc&DG7z-??`&xu})sVg-wR z=)G0FJMwgsQ0$P2$$4}!x$)6RX#M0bsI&~B^!F43G?_@#E*hSxyv)VC8(cIbG!5yZ z+WM4koHwdTD(Zc)DT)dS>ggsnIpRye(j(jT`LUf==be-099_8i5YP+WqPEE~2a0K_ zkhH@tbTiTNOU~-c=K0l}bfdUixCZn1{BOR!R&St1UWQy(zosQu;jv??f=@5j}-SMBFc`&4S zxeG<^3`9&B%i^tk(~A`76%=Yi6l>AMR6dDyWI;QuIIm~cMnAJG74Zj7v7Q#O-C42I z53*x_Rx~A1JT1Nr+537~tQi!p6*;1WS7HD#J+F*<&Rz1J$fiTESM&;Hhsa1TbeWkMfsf}Z9sa2yb=xwP&CbQLOsT2E@V=A+=skQ48v+D)3{nmla zovp{$(meImqOWoZ!GP+Jr2DU z?0j6yw2}|+3Rql%4t*>kzB226nJk9mEUqnO)`NC=p@+VSWdU=CsCS3Xl`Mg^>4A8x znkYw?r1oat$~>;iUJ;iEUz7&XADLYzgqpI3*_Ma7vWCAY4-aHT{N0Q;EGLdFkH}?> zEG>_$eb|g<4c3T>8ZM8XW{p`Yk1@my9sd|}${Kh5uo+!moy;1K$CmK0869|ZPg(JI zGn(BYR+24Qp(0s>Ek&;)#gr}8wj$M)E$vN3S|D3`SVej)TSjU{MlM@sX+>r&TUJX& zRu5bDa7FesTh3BN&K6tlK}GH#`v0?x=KjClj2@}S`N)gAT#viWi#OmT1psunXaM!Y zd@kLeN6Ic1b~fr3b`DlfxONsUE*28J+ya6Ef`S0&-+f&(bWzms>z{Y#0a5=}(iQLj zt)&00r2nm?|E;9|-z#Z$qW^y==^p+6Q%Sp)JSgd0(tlObFDo9DG|lz@os#BxP|_Cv zyOMsy^>eZ6zbol7`X8GgpZs?v9f^YwTwpwd|5eh$Z9QO>89Bm9GeG1)NoSsgO#j%y z%u^6b&{ea!MuB1f@sI{x9=?5IY=Lk-=qDv-v_Oh}RmFXk-j8~Grug(Po<@;l@UTVv z>MJ0K8!ckAtg*vwDg+lO4j!N6)7*4R8a_6!RYK#b=X?HwDZ*mg6J2j zf#^Rt1{h1@@o!~SQn|y@1|L0X`ZNjX0}m%H0JN0?3eo~h$&o7nrqB$?$K?g>jsHu@ zhnSc5Z%w~yiba2UgM!<3OmHBh=BQfw!IVNkM9hg=#qm(?l9%1HW)<=M zD-=>lG3a|_pS1N^Ee06vJqS`GtwaILs|W!CRLCfG9;22?J)5TU=Y2Tf#+6~>y@rHu zH5O1Oy_M%nv8g5BCY@D@qUZ849C2Z|!-h-C{em6N@~mAum78PJ&5eY*rwi%gM0Hz0 zvB)U=#deBL&=GAVAj0nV=wi!T@T$3iXu^3YOYlNvs0vsCb@}XQ$6xniqMl1X)?g1p z`Eb&UWqPJc5xxCcjKBRCQ^va@lpPuXo+|)Rg6uGb(7Bm|X<%t~nEao-Q+^Jz1ujQ& z{4&`K6CO}p=hXpl0Q%l4FegSuSF{^iFq-t}IsJw7M&@??SCSF+`STY((P%zQa9Vm1 zIKKW2K+I}^r6#46+WHV|3x7N2k-~*EDcCUU=C4cmV%_9?s&e?BO8U5sRq1TJ{i!eB z`+t;lUF=5(;~#kg1cx_D84{YNmv6|wk{=HrT#f?!{}V_p0G~Srxv_x$2CHO&iQC zvWtb$=hBtmt8R`WwRTqcM!FCZ@>t0NTcKIDjXZfAb`A3_p*=d5HS|0mpquHlT z-tA{G)B#n+b%rbbZ;*=|kh(eZV*6|Eq3t2`M4IA9GBbT`I6pC_NCW7zsE6Ao*6)bPlC3>l-f3;?E);Zi!v?39Hb!1}C!di54zM(GTArUD$})} z@~X#>s&*Y|ix&FBzV)Qzi|p-Fik(G_xsMaL7}8zm`=S2uu3Zy!H^c>q)_4T}X3g;C zq!R_1bzihRdQ*e)$6M@O;>RkGse^uCSElCYUYd8b<+?5_W{+V%<67Pyzk6vH<8ezE z@lN;8GS!|PejX;~prYT8GLQ0?zL@9!4?cQM@!jH$(elWvj-huQBn+T*b_x-P-kaBf z!VnLD#}fuCErT)pK&o!IYtmrDx{wuJW4C?d8FZfc#Q>o<3{*bs;^huBq=epzn7$+4 zD`~zgKZD?QUKr9o-z|N(M?E7)d{DH_KyGFSp{Cp0Sy5h&ROZi7?%#yX#62S_g#<27|3J^d+6v{;A{0NqUx`B3H zoeJ~3HIF!L;i*e^^VQ<+&6nViP)mDzUl8Hg-bCH3e5&A@2*zE$*6 zQ1o0u^oDdaEo0oGOx&zR+&VmtsXs1*@)jP?&>x>kpD<|= zzY0pAmq|!3Oc=LFSb-;q7soC1CyebTEQ1nhWfD^g6Gto(m*9ys{m8^5`lO-V#6?gN zwM^4-N|xr^p2qSz zZFDycj*{M#kmhfY9`;2l$RNp!j4OhSBIIp)JXyxC`E-f)^ck6qIzH#j_KfU^40(r) zkDoGXW;2QnGFwW6^S^Kwj**wHX4X2`msiApZpW+me zlZj1*jw3UP#g~JNT!?3lh0pQn6LJ
      &w}F3~$$iOK@;@dqU>B;3Iwi_N6iL91*i zC@;pLnn|lEMyK7u_`;D^7n|;7B%^^Ct&vKxbO)CSIju!yu{yiA4STL#W|qU6pVM)! ziwcXCqtYvtJWqBOcQFkwM`rIxTE9E3x7hjb#&h6~xkxidwgAVH;PKoDa^`SD+L$$l zxJa4=cG{#$h7?1Qs1D{d!<^8L#Ej$8oa4~E$bur3vI5`el5wW2W16bS*AVh-lRSTTRDt zb*@UySVYZ`V@>N=jV4OXHK=y}OAWqktv-D%S5PgLUG2-lTDOr}9qc-x%9?1lI#R1T zoZz~sPqk`_brY3!7g+W3{dH&3^?PL1NXK%NC{~P#w~vf!v8pm3N0mX>YltQ|aXF~T z#2pEYSSct(sVM45?z8BeUNVT+w7+SjHfroYM`m*0H~NH?vRCDE-e>UoHHqAd^GDV9 zWi(0NH`O&YRbMn%Nxv7hc%K7*zfthstnarx3z-WlRDeOC-T!fv!W+T!YDc< zl{)e#nr6r4@+L@ACrE0XDC@EaZTHHn9@#gqXG>Idlu|ghp44|b6?dPc7fqD)-TQs0 zVrhsXY!Vk9dek_Q#WLncIKk2JF{^e8d6Luar?F@hw|qi1yWY4tkvUM+oo&=3xn8?l zmAh)BabVqZn$>jF+5P6CTb{2w@3QCTedc*oM_W~QhicbFR6Yo&>`N8-HHR!Z4(VkT z@gw7AtZLnF;yqrSA7t-)-xBqa;`9>Yz=)m6F*kZmp7bUpd|DEj zbAQcb;q2dK?@M7EAZqWIIPVuz%jE0o5&ZSRCTid*sGmxDP{d;JSwX*07bO?xpv>N2 zI($&FV31rbP1QJFE4$esT1sG2QQCi~x^pOe<0)|A9PzYJ~q_r2hvCsQU%K`{IGR{3r}XdJJSfc6-B}VeCG;N0e(k zg6TK%HhRPass-ZJlCskpQ+$_XJl10$^Sw9#q@~$5Il{*`?nf~G`*^@~W5PuG4JQ-C z{^ohNK&-MpA)=HTa5DQ-a@WXeA)@HS_zN(~qeZ!4~jNriCXGq~2e2=l(-a)5fg+A9{K_n^-vp z-~HR1YR)2Y!A#?b2}(j3-O)@#^+(&E#U`-@_~JFISUcHN8v|i-wB-si*TF^fc^$*VCRZ_#f04 zFnD-&sEyv!g?SX))=)e=#gcGcS$d!NS^iVAESnOeg z>E1-osIPzfNbNs#8uIDIX(YM@rs51}jVSFCUWJYgP; zG9EAs1lumkgXRi=jh`2ei@W@#)9;vgyq^tOn+e<*vvGHp8}NdRX-EEm$hg8B)~!L9v0!S^qNxFG>C-m>6d zK=1OgJ_PkN#LXU(x#@F;ZvNZ&ZP85FhzsHJ_Seph4|zS;TV}|D8}1_EUjRsIM+#1j zLitNdYX=q#;$&r9Dc&VV5aH5?9OYYpLrG9Y^jFRbdI>Rgah}edp|X(^ne>E^y*QW* zd*ZS+nDOFJBUd5-siRMDq?M0DA;d~s6p_RNi4h9HmZwE4*QHPZ&K4?lLbZeZ`QPgLQeA;7(5u$4$Bc&Djx<%1tXA5?1X3L{h_!t3fcPZ@_kWM&%!7T zF0AununegY86MMR4492bhZW}HHNchDSFIevqce}PP049aASg$SX{7VoJ-*LA9N;#m zb#oi)ef}ciJL#Bs=7>%l!o~p7(eRySkIEMQ!r08%O2(8SD(w zD$j303H?^gq*ji6=^2Rp{rk_M!!rPrv0e%l-SX8l5aw4kIze)kVBso52795!wxW7? zuw}eD6G8w7CX28ZDF)% zv-FR7o+2L6nmlOg;Qytm#l$>@!UR@e!MI}f2+1w#JFYf>zh0Y}a^AX0U3fA3TwV0A z7)daVW@0%1j1Du1;XR*CV|~w-u`d@)L~Ky0U=5`Ww{Qbxg^OcOCmmEsuE96Jj_x?w zq@hW3^1fFB1TLcE3nIjt;nbEGeS#RK{Y=Y0t|h1)B!}REK_k&%AyB-^-dYLim7{sB zXYxV@N3pss26h>$ywelK5^g%cp1pnSGb`-mMQM)2BicwuTw1{(0Wm}ob^v8k82Jot zFGkv5O&zAQo4jUs!xU`*D3;L8KWJ(zqx23z(!wX?GFHqXAdvz(LPD8>0!$q40y=`| z#Wb_HXF`)^@rumtyy)W05OXm+dJ&5>>Xy{}(8rGH#-5mwKl3B7=K4Olyh4r=g)?y! zS`Z~&;O1MGpvtu?IL+HD;ikpBUo?72ge?qnZ#U7U^;x7EWr$~V@ybs`5sCO*oMzkU zk|p;>+_jxf?5#`L3#xLw7d0)bY+W2dSF|Md`yGyOH;D&Ljd4+cX)e#}6CSqkS5q6( zBT|A5rF~sLmNnn2J4uTx2{bMi@_wz=%yY|^vGVk}lBdu;npN^b(-5)VMRs|My}gm} zi9gY3k{0*5bU#YhGzz$dpStk_tRthl;oKX&sHy|#*oAa-VLRrC$K=mvcW4Sf=9dtm zxb3HaJir#{PlQXLKD!dlAH+g-Z=uMu()!bCV-{ zgyygz*ZG8!Khc$or7a$*`Y1r(Fo9)yrO`i`he`efd7OCc?*2=M-}DhXqrm^csEL=` zxdWY}vKok6@Cs|@O=29Kig#5TTbhGwPMsJjjqEnidEQpkB-UM89GQzwhy^61wtgLB zayOtd(NM7AtNue2lt%mD1VxWGXxwR7;m);B}lm3laJ z6OCoFmUJ4`r78FwDr^hSqmm)<%=R0a)D8-7n*|=4J4lQ2GbITOd&6BbQ5^iJMp+|> zeK;Fk-d>|8L(7#qxnPU33?3cc75oeFYRunGzyzh6#RBHLG>|LKG1ndJ&*T4DT--~Q8JwlU^?3Hm2nZNCrm4-mJinf9fH>csN2kWXdvw?jwO)y;#{XWdsd zM4}WMlPGCzNqpRvNq)vIfB^H^5}~)IgKS@ z`6S3AH<4wEU6|HAaDVF8O=@=C@v`Tx;Cq0wt=Vs}s1Lt&?E|Oo&44E^-RP+laH#Pr z`jfW4H@@|543mZ+&9)%y7B?++98(-SQca5MvurU+ORk{w!6-6!eRY4!(c<(WnEQFu zAA-+Ftoih8p=;h)o9qdq?>-Jt)tJFFA{eB%$Z&&jIR1$1Q%`WWiV%q z->*5RHh0-@d#_HI{il)+9vOLo*O*e5O(Rez%4hQ*N?L4rb=q3;N6yv5e)L}@%^Z^@ zv1BVvvNqF+`nr&)+g?G~kSqMU?x6zBLB(ozHf{KIsi4Gx3Pa{t4u)6xUnMPkIA5ah zkCIj*$Xu-ZtE9VCUw&NsM@fIyb27R4tE8{9e5jl)N!C|JTu&4uPN_u_s!sMp&K}q}G3vFFJDCw)3jaT0v zlr)A&*FDvPlHS<4rvBMS)Z-TR!)O)vK}j=lulZ?id?FcXi($`okM-X8JiGdHL|)P( zF`RRkN%28R*PbW+Rnp<2qej%8nadjo%VlUu05(}w=SxI z&8cPn2W2t0a~`HY^2}Ner8#_O(vXrX#XPm2)IZ!s7i~4x+68>I!Mz`yGrewo+5C;9 z%5USwbRjnm-EXD7W|4IFF$|2x{r0=x!3*-A{Vb9`$8Hn*!rOPDEfU1}L3#E<2#hch zIa!Fb(W2S*ugg*i^!(>RQK!mK+*Op@KY@XF-jvrAywlQpvjeAprqFP|fNrZkfZmHP zH=&~1BiMM0jyNdb<{@GBXduR3EPv7EB=qw1(B8T78*#+X`Ra?JUP$#*NOS_d7+A`! zD&ef>DfmM$>4(SJ&!EZDK@8pGE5TvqD27UX#g5=Rcpn*>OdLTs>sd%xIc$HW50f8- z3>G4zC5eyI&-zqow(8--kp+94H3a% zq-c*xWxHl&^u-1Q-Vc2K)P-psw?sRDLD@*!H6Zo1<*6D(GI@Z%Sdf))P<~QEp76bx z^`O#gF2&bRl#&NkUvsLyXHy@P%e?Qp2gXw_mIdcN18vBCF3XGpiYN!xnpWyp}E ztUOuNkm36wPR}8ug&~v6MgxC7jY~@NXf}&WZmCOoydpV4wP6m1VNSq~Mg_*CVY(pfVlC`ax2l@-NHplu8+tn`#qC5<%Yxj|VJdkLe=AUwXzprUMGEX9NjYz88>xTUaECduD> zXvP`e!GCB}RDMQ@4|gDo@x@Ais{-d`wsur04kERsM?}75j-Dm0Lu+ZkQO!V|(0QuD z$thbd3a-#rO?j=-G?*FTM&JIlq)4UYgJ{-!_maA=6X4IPs@Ri^zi^&ej0S`A%MFzm z+^JTi2-`#Gk%|fQ7VHF@vlC_$lM`w}dK?q4pkO2x@aH^###(i5G#*!UD*AaolnqK9 zogcF?F_o--{6b^Ba;l0?dOkyTR!wbP2h5DEu~r|$8bnB4O}`g1bzrO^MyR>ss}VX= z4D1wt`Ko>r{h+c{03S8M$Vokek}&&{akc3Wlpm)#K2F?!G$T(pxBNJJSq%4?7@jQ8 z#)9RLf$gvXd;CO)#N1TEhCg3xSH6BE9?<%;r#VJSccqMIA`?0~lCWF(ft_2=CQ!9xIm4m=2q(PCDmMTDRB`{OT zQKQYhICtGRuRQsDREvY(u-Csjl8tR%d67Z#f*Qb%!;bYj7!0)S=Ty+&9+;|B}vcTPtSf)!A70a z1y|Q@Nbg(a(xYxYjeWfZ?B!QEvF<~Y5AT!Se0%OCzf9q|{3Yn6j`+)|>SZ6B>bJ-k zy+HY4|EVXi#g|Vmmz{}LwmI~-R94`d9l_t~{C+Ej+wdW5^l_6`?hEy?J6E(#Rw8YZ zqSXoFyK7=MB@(anRU8Lnyd;ylIa4JJ8egow*&oU%S=D<#ndYUDhF+GrznVMLlr?1V zV_`MmYPC?%&=_qkUvRmgM6c9EIH5+ryhOfCy(?YU@M-f}Vv?ckx?#XKL$9K>*Y}36 zsn#JJMz%QXRVlGeQ@kxM{H?fpZ6?dri=yo@x}7e(UFd2Zx<r?kep7TcPRK{kw z8zbTyJ>5b*4@bkCl|fzOF}IEIP-C~O4cu5$s5UE*FiYt)lit`anc7Z1*%rsy@%GxhrrORS-I;x2ZmVi8;JmYN zZjCK}Purg7;~7-+~4MM!&VhfJBNgmrAi-v$5%! zv*=kSmpo-(n&+S%X4F_kX|d!EGoZz=;ufXFl5W}b5FGFb*=TAU1c=)z2OikwPMPH%ghd^UP1sg++J>zk z4By+@86W68Ivn7zJ32lH6+i4Xvdbm6^9!&WaydkB**KQkm?6XVd`{Qj4zKyP*qIF5 zSuNQ$@7u*(9lqnXb)mKoQMU_GXb3HB4AQU<=U#-hSR?QZBdAxyBt>H0h{s(U#kPn? z4;#cUaV45QO_nrB!c$1e6-Xr(PuJj0a}~_A)z4VcP2d*Eo)*h>rN}F_i^Q;ZlC&>y z)hpDqDoT~I=5{Pmu!|a&$PW{%&?B!Trmiv-t8OvPDV5Hm)~_*bEPdnXeQ;cM<@i#Ulfnt7i<%R`^^<~=6Us+l5!BAszn!SMooqC| zwkz!P*Yb@>HV&MMj=2(#3vrG17)@eq4J`>z)EZ4`JV8!R3xDhpomUV=9cxXKJZ&vnA5_v%ckvd@u^E=tjlVrOFD2Ymj(u0z&bv0N#Jr!De|Ks%R)Znj@UXni*`hHm}f2Q~SI#B-N&G(;p z@|UUK?~r2G3L9%-Ut%|39UYAR8g?C&e+5z$pV>MFyoW%VXDBzXt`}dShV!7ee#3aI z3A}Q^=CQzPHO3jy!HavE^z9Yyq46*7rAI7h*^=k!*KWV$&#*|&^_b4F-klL)&XCab zk#3)nX`bhWxlIk8AG)67ww{;%KG$13M^|)be2H{_MC0K>@C{<;#+>IsZnnnU+Cn`d z&VDmPOLNY)?Ox-#`n*lrB!dy29uig`iqC{lhoNck25GIr4fTV zFL>J(#@eN%w^s?D5|RQO^*-_zhWH`%0)SoWrdE{xo78sqI&(V%nz?*cesLNSSuz?Vou=U0mW`v#8U^`EXeBJD#3T2e85Tz zVQ#5~Nd)eU)@rpT&1ky?MsESwZ5fSE&>sps9N_WmXFpY6!1eE_?eBa)DAcEAfkr!aX?AU=u2?n%iY7t4PEZT{|(9(ga-`f-4PY)w!lE1Z-m!~DM7?LH~&zU}52Advn? zHG7Bz(evlN*V}F^jiUA`LaWywVGbo(eG7*m0ouUX!;3K<**Pp=UU_QGU~0JmYdk!1 zhU8Z+%kNjS0{}uQ2K&$XvTq@o-%2?5j(3)5d88z3plTnXx;FSG9Q&ttpz2NbZ#V=_ zsu2o+$v`Lq0Fd9;ONv3l?+gY8d*KC?&#Udv>4*O+X=9OkhS7L>MZ;*N3&!ze3QW28 z^;+74To?v;uN@!(muVJ~D4Gi>)AI(}0z*6JZRoa1z3xzd2KE9Yz#Kh#T1Xo6#Hem2!B zLU9PjojK&T?f}uhs8zl7Fa-oIC?gT}wyIOv62g0;GiCA!D2u79$!z7xN~7I;t%+Bo zOQ$~lw1MDR0wOd+c~mKoS1(BrPV!8P)dwoNz|dkeU0;=sWEaOP;A^UkXckDMh+B8 zPR2$8c!Gd3djB?PL}8F(tlYNLKb+cp@sKf@FoU=^1UDzm6gXis*h{mB6g|*ZPONy) z)Hs(i(EtJp#mHaOnf(_{eNC2pkm=GRs+Da=oKjdoNSDbfPqYM0Abk{})h8wKvp)W@ z1da~;p>dxt{*jIGr3FBzGFq-=Tj)4bSfwI*s99k1+9q}E+;$_rw$!n>w)-xVw(f%% zqpF-Y=Yyus=a;bvgg$8MoGCFkxbz^Nb+z;;I|rv?P3>__RmN(;5b@4_uNDM~#fOF| z>konA;A|#P)u3_LbzgOB7nV)T|u2V-clB3mOd?m60a#|^bZiDy-y6{WHIyb6`i z{rQH!Q5n0D@CnMP_;&HGI|Cp86;cnD0I##>N9gQ~6NhS zkorm|OW;pyo&aWH?UO;}WNknrAd-iMKtyyP;bZ|np&OH+qxX0{cee+fe|nC8@Q^`(2t?RTqZ-t-_8UfA&c(jRP}CN%bX_)Cj?)JF=v z_tLyU{gpd@%=Xe))NaAl)oPf}^q=93D+belCBmw*>L)nn4B_=* zYsz<@6ndu}zTy#O^2?Hx%27d}G9kwG(q1mwU_?r?sgw;=uFXz}p=9!cXFXeAlj~Cj zJYE{9L;5ABI7|q|h5W%$uPjj16=ecGEE!}&M-in4Q*aR=TjxC%Zu&8#c0YlSQ=6N^iR6V)!RLtI4tB7sBnuFn?5ni+6u&z^P!=ObR6odK%fNX zL{??Rks5EY*XL2ZT8YRUfyi;AH$v9WQ4Nk|vaxlyC5y#V_IJ$KiWWWG7pn%aPBbH` z#G4)tjZX4qV%|Z9VS|EzXO5jjaOE=m>`E!4+xgE{R$^EQ9lfLZ>5^~Ma%8j}Epngi z)TsSQd?oju%I+!;@SGR2x3E-aFhq_kLIIHO3U|Kx%?bR?z*2j4@fT{#8jHtM(&@LL z7S#9^iA&v1lQ@Y}DHXFjGd*T#bIQZ6)#j1W14xB|QJ3Qvs9NxHZs$rgJ!sVKeGg-u zl9Th%ggM3Mu!cF(#21p2QrPtgRH)2AkUQ7{#hkRORv6$oV;OQ4C%RjEIjpn96LwDl z`}0Qs14`+!*kgYxbefSuJmy(j@e|vb{)IA}S>A9jHLFDoSo0&OJD}uGMSuwmUA*8g zWkR*Dsi32GKs0LAa+-=HsV#u9U@|_6pI?-9(4o+Q%a;jx1Y~de3Xy`NNtmC~2Ey*9 z)>5478Yls-D#H&ZNDtZmrw0zlp0sv>+%y>*dq$}FJ*e%kVz?*`ouA81zt(%7lOui% z9KE&hw{?qrQgix+tK7nW_9}lQV0V%WjSr-y*6{9kS}#s1Z-eAC&S0_aHO_`u_Vwil zRN7;dm+cFWEUr>t=0GC5I%vC61=XFp9UKqEfXh0aGQ*hz(7DPdOjaHbv;ngc%0ZJd;Kou74zJlkT->m(H#s2up`kH!$ZQPCm zyk|2})Col&sVv@n5T7qFe%nN{M*kwNt>HH2D#ghJ9dz?#(<;z6UPPs}>bsxTJHO9b zE|L`~kz@dWGuxrD9VS#eQ&+v+Z%bC>J0Y^WtM#`x)w$AH1v;NB9?h3Qo}P0Kq-STd zttYL-?;p6^w=x1|b^)mQKi=YX&${Q`cRVxY{U~_Sh+(Z1c|}uizhiVs9j$I2I7<@-A~{D+Z5v&smzYPEg2{exMgQQ^ z`*N$YCxO0&MShK*GitF_;AM6mu;REn>hvw`Q%TCLG&SaF9;!NxqSSK$N2fmp=S*U^ zNezE)0rPU#Tpp|*NGd%GqlL=JLFMvX*mm*5hTF7W0zvsLMCS68=D@;4_d|j~u0XnY zLaJJ|vui?Xbkj?R*3W`Ak;(!qVOPa`s>t8`UValuG>;A4!NOC=CJ(u2p!MuF2aGLf z>FNHsP`;d0-=rm|#~LEEq*L1;VI?2jA)MZ2oc=UZP<({D{S$Ymo-RaA4j(~xM+YVl zqg$1>Kn*Kw;vJmjP3Ay>5#z^f^9_>V$&s2GA~T_d3cqN`-=vTm=7RBPfi^ly_8m&( zCz%xsV8;UObQkT8?iuLQt%GH$bdgwL3~kF}aZ9-kpTf;-lYs2Pdy`x?Q|K-!-Y3>r z&v<(Iy{WCsscke3er`1Ul}{56#&-!gJp6Q$?DS*VpLm(o`KYa|+$?0s2l+9ip4eK7 zvl~2(-BVB5d!1jbOs~vMJ^FM`T_W|9#9V>gMG-sFio=&d7Gljw&B(>QC$&-dr1pQX zcUM7eFnYi56Et|BxVuZC#flVncPSKicPk~hyIXO0cXx;4F2%h?E9s$q-nI66_c?pc zo_#J4ce%@CCX<=`lke|SAYV$Y96W$}AfZB9sEcnJ*FmK!609mwh$=#(-WIKnwXUYW zFK$!F=Tr!V(11M)wYUaUzGG@97fPD!J7*T^_>b!DD(Q3;>P|`M4M7W)C-$Z5X!NnL z-rp5Mf6^FG4(bg_7^2h43g#P79^^998iz;eC+{0J4Veg13&HM|^ zBqS`{%rxH=*+kM>b_H7&nKjfFsrZ_i^&O~>(W=ausjU`SukKqNm`UUm={?ZeBP+`y z(7Bw^IzBB$k(e>=7Q1kn zs|FuR<(XT?A3By5dkBKPv5Gy727QW(yvxjd5Dq_d6|0>cLKn=#9?UP0N+$N{?6K%S za>4ue5&I3z_}k?f(bBKsmjvRD1eECp+#Lp0Q3dsxhtwSeLp6@{`>?{2|Fe=ViRhw_ zj4!zv{98$H(nlYZL|<403&O`h>0=Q}|5VcPk)isEakPIcX)eq9iIRkWD(R+@_v(Ku zX`|z~=SsSdwxW-fxu2_|Uyyk~qGCXSc~GNbP@j3otYXNHdDyLD*q3=ExMC!lc{I6V zG@E&>sA8;&dAzA&yo-5asA6J@d2+F0a+7)LpknHRdHSwm8p=F_P&tFnGK*XJTuJ|b zuB3(k_bchc8uZJT822?8zh8n8Yrz=on0U1}aB$Dzw7GxG=*;}q-eFQ4Ny|&P*;(+%MaTWckINoJ z4DWNK1Hstq`BtW$um4M4dY(%0r^jvtTh`a@;(znf?)K1!?IbcD@1x=B|Kg=rGsu2* z7(WZ!sQ4r ztk4HYQ8-I1lO2vK1uc|nqZnF%12>d-p|8KhpwWf)KOTWiZ$v^d!cw!zFU&)6n0I}n zJvg)3Bf}|Cd%jsMcaX^_yD*CxVOQf1(T@#>eTVGg{R$9=P+teBXKLa$(+{w6I7XdY z8l&!mhWD;#1uZ6G2(NhtIlj*Z@dZAG)5GEio^i3`!Ug#3=HlX53K5YN`BaynQQEIF zQ3+}zlcb)RLRO}LYs$YPgK)&uKx8cdEMX4-k)Iq0g8XSlW#6I0J?&Hiv=CNCWp%#B z`WAe_kMR_eqNoaCah8^+ zIX^s%zk84nIc19(KtjkL5^Df=QRc@cdcqo?j$H^;vJ}QWsS1wY&jp(ni!r55g*(mh z<9CKjAgcJgrwNhMdEg-<`}?~K07_*{%T&$BltNY=vv?=-uQowa<{TL5m#g#um2FlW z)BzxAVOcvdIk=(iG#@V460l6TRJM6jrro%$@q1bBjhku7w+eHB#!E16OF2BEBcvUl z9Ndops6|k=0pRN{rR%sRXic6j`CBEq51qolB$t9+#|a1+>Cr<2k66Ge=>%kQ0iJYA z8-UFl+)S$`o6O2^^PNI}0`Nd>EK8^f1IqdUt43vg=h;_gFI~s|WJbb5VYGEZ08u7q zWnCeY>rUB>`)p%-awn5n22t~&f@uk$1tR4b3tQ4=T?#kbs|JjnzsD8py6`Hqv1Gzs zi|4jJNJ91k)&#g;0}3e5As7g|0i*?La3Hr7e}c2^R1uHvF&u#N@6$?vq-oDvfWLqx zc`SK{EJ$>_2P}A1HG@7da3N9~u6@ReXROsR{)-_*`@paS6(1nxp^2%_Jm*2M142L& ziQ94g5-^g~ZFqedow2xA{1YGPQU*p?%mId`CI`r@)Q6So2WIsqm@uNPhbEls=yoW0 z*6Zu(Q#og@aJ!pVdrZ}5-%lJ07Ee`My3}Wl?j4E{eV++cXgC3|NC{&QI=u;2N?M`X zm$WzUzf8OFVzfOzGguW!*T5*|`;et*oizIZ$;37~x4;#54KRT9o>nlMnMdr@M`bi|P3M_Z?kaE2rPb~O*Dm||;6X4~01w@b zM=Z16PJviva$pA**us6)=IrFBv>%P> zzhY&_7pOq>bZV@Pe)_ef_lcJlU0mS@Cr2ml19&WDKJacwcO}t3Xv{wG((Yg3b?M(0 zK?v44gV+l)PmyQaI)L`EuR2iB&@lOhPlx~y=mn*ZzuMaebky8QTZ4uC zz<%Ak{Ylil{s^mWYpwig-G5}Op+xU@yO4F_M83t(G8jLs8&5t=F9!pk)n@QQvu&Uz zcoq-fDDA;DjJv`|5ZBF;sus1uUU&$_nT+R0_rkB$dt8=U$gd37839dY3t(N>K z)T}omt~tx8cWI>8-t5AsYJLFYpH1s880YTNKyqWI zMWb+fFa?*;iIsDzl+#l?tPzZ>C}$wFU}7X6c({t2fEQr@)$bPWaI?JU4eAA#`Uf+cRz;o^TrRi zG7l2OjJC#4rZJBbyq@Mw`0U9%yF$5yl;H|pVO&`Ws^w+fU~pe(P1w_B-YNCmN@F}6 zr9HKb+~-Za4?Wn|qO45>i;FQ`^dr+cOrLj%7KA z(>kt_yX#PUB9nVt@wv7!ei)PZIF=6$D9a9#p@oD$IYrbFI#TLh;UUO*aaOqrCxtQJ zgOZSGqjbnKR;jYm#Z$r~)7~(CvXX02DPwt6rte?oQ&yJSSLTIN_6eqZ)v}=OO-vPI zSu-O;!zx*)OiGhiS?inf{xX{GlM->{lELtj@iB(sbjwMZ()PC0Su2|9bh0Jn%+JUS zD^_LDxyo^k%5=u6Ch00wn5u)s3ZO+5e1BD6YvnvrHOg^SqJLF3b@hID^^8$S{47=Bk5x7h{7s@ zI?8r)+rHYsqFPJdI>z?8PBUmJX?Z0xQ9Z}n8=8nZFROaru=;Gny8Pby*t=Sk-FkkC zh8*FBEyD&QNCQu9LuPM7N>M!?e4{*5VYrj*{MHrOVofTrY~rX=C!Qc!cIj>N0>W*?N7bKmQRS`|L`21+@C2WzQZg!Pz%`t1`$!pQbmGq2gX*h26&1+TfZFLB5tw(74K-s1y z+yn#p?oHHj+A`nXtO@{_prBiDtlL?oTRN^goUr@tQ8$-NPaQ>%p>>aPSkLltPfc!* z<9JVWTo*2X9SKwGMtKKzW?ip$FS%Sg!9*r8e=7-UCmnM)MMqyIZ{M7D9}#~KLj^uS z4vX{W3vL^1to7F3h+?o0A@4hEzISb}GVz5`u_QZQNHb%LuD897#FkyhRPJa{WKKVb z;8W+v=jR(lOc)e69W0w2Xw)4D?H$zE>%&0pKa?FBs2wzThi~@og(H81=DH-xdO!L2 z5MB9jvvr>@F)s9CNcQ?pb`{r4eVY|LgJX91N0?^cm;LhKo82+q?GYsj0z5ge>y0?2nZt=^IaZN_ zMej%duHF6l`eCB<5<;RYp_l_T{ zlAs??_{Xl}XCLckZ~8tWP0k1?Puo$=!OP9DcYMbB@BugV1JlMh?8X#4OT={^Bv^4zul46m&c0%KNy5U|ACN~&O zYDVM(m{UrRXZeY*#+9#Rb9I<4kOK!@>3s8#FqHqCF1*NPxTx+pbOm7lX_?a z3m@QDiR0Rd`_v|fU$N?5tsw9J$)a7ZSDAL!IWX7Mpt)h0QpP|7PC2l{92JIEAfZsYyZy>M+laSzfGJa6)?Q6ypS|NIKnT{eXXRpdg&m#k zJY)_=c<=Hns3L3E8D&2!Zs&n%KPalPUw{pHdkXg250hu_YWItE?;e%#0i*E#vemv* z*$|rg_CzF#0%u^?l=xi%bjdUzqlP_)?I;WN3GT-KzgYu@OGSa0H5{BRz zwLaL*0ghxQ3jQT1g&fHs$IKi3Jht}C6nfT0+Iv9y!X^yqGX4m6^8!ciG6`i?fc3bz z3zr%Us-^)tEH~Xv;UBSLb)e(y$z!I?;LqvfM$bfcf4JOX&VHDhHmdy_N0YBS#nDLJ zEwI&lr-GOm-OxX<^!&jY)m97z8v){$&DB?%SuWeUyBD;cp%sX(#6P98CmjwVm%~*?FzCf$Kym>tO@^0>6I2@LH_YK)iP$nBH9T?p` z!f1LFW-x*wNeSM445k*wABWA<{+8wUy8HCei?`PUe8F1oz|a;Aj>BbP`3HcIvv#QS zn_*``ymO>G*)jW8q zYq6!`1U~NAusKwhR%I&F?In$>ednYDCz2hHYM#(U;cwhF{VVK(Tg=W|4@nO%$-qh| z27nCxhpdN34PD3$jyfFBQ$5r_2@jCMjcnIqAnAB3)^Yzk<@-3sZvG)_Vetkj^n3P% zf0gF1TS>6R`FHCe|CVBJfWtE{{me^0^U}|}^fNF0%u7G>($Bo~GcWzjOF#3{&%E?A zFa69*Kl9Shy!10K{me^0^U}|}^fNF0%u7G>($Bo~GcWzjOF#3{&%E?AFa69*Kl9Sh zy!10K{me^0^U}}Z^!F;ZA5GOiy4ZdW{eKRppLyxk&6A5O@7RoQxA&h{HtIY3$7UB} zK9%0wJszE18hwl$omt4KY}`LSE39o|2% z|DP&pzRp}l&8JG5o9Ew^G@1AL-2PJ~jnel2Qc3e$??!ye`JXH4(j>Bn(EnaZD?C-w zweM2O~It}ysc6fo%!I$@oM`6^&wk3fkW zwVV?432|^=+A%z3mJ+p^XDBc1+E3U<9}oUY{H2COq|CrB`k{F5YYzJ;TbDhPZ7E4S z+S(WvFUpTLT4Dm5!7(f*J1DT0!}~k6vB4Gcl!u|b*(_L5?}(`}NAX9g^y?xuDyRwG zmQo74{cl#%pwUr<3$yr-*!x&J>ceu`9PhDGg@oyqAfD=eFbKItoV5&KgA3Wz_Y_6! z0r?}!xXx)4aQnDHM>uM2<1m0000L;c3Kbj(a|xaMX92JyA_Jzkxcz2S@naiG4(xSL zyPy)TWAr!f{dYy8si0Aew0NcqRKUM0>5~6dC5?T;8XP~Ei*fsf%$`e`Ok-XYZ$n0c z8`%%5V;l~Kx3^tM35?xw3Y6BfQvLMia}bwH0`G0q)z<|%w(7QWb+0SOio$)vfeWtuRaC){WW=_b*Gz9dgdT(CHP@+OEPS9)Q0v@)H6P0s0By zYJo~;@2tHR=%F`N5_{Gf9E8<)J$~e94w|Uwl(6ocLgcw$5(c! z^RfZlu2@O^)CvTydWC#u0usZwdoE$(Z=T)IGwq*cO+>~H+PxV;Qg;k+U}o9x|weN zjH2j2Drs+}PEz&m?~8vcX*_GRjOf{i+S{tXmGs)u+EXQMf%f8QP48co^!igJz48BC zN#7K8_57=nmikvE?JeHalvqh>*8RV#q!Ip9(v|X_dI{SziL}aBdNLo(BessOn`NOt zy?`t>koGg25l>5{Ij)a*dl$PRV;FNmU_<~SK1diFVLOP;ueU`J-Qq7DgC6+B56w@2 z8{M1`(xIXFHfBV3ckg9~EUIKThiK+I+e#`ER1*h0g0UJ`Zj8V}DqCKFLb}R(|5=HPJUJMuoz1N1b2BuRL1)@krr0_UZO9kmm;E~AVu(ZgzZjPM@C;*3=IhW zf}Ru!@^IXNqs>MZzvug~7+`F$dnx2AAST_I<)%)sC;EfQis{=xKKGp`&*qJy&e`|Un2-S2> zJ4Da&K%J1toYY9ijux(}UemwTpKWHJ$bB0-U!`$7%o6%b+IscAd%Rwv)|1}Jw@Sos zTiAzz-OItxXT2G`)NC893I6=lN*jErM+EfWY7N3ezSZdhmt9^N`BhN*Z$kX&+5fiE zGkyW?kbFsS^&x9*$VcH6y&)RSX&k*v5xpHr|9AwS#od791YeO_cb9E~N+0vwI#3FG)482kP(N&liwUjP(HL>X8@8N6!fPq$<2>fkyZVhXzUW8(oE zJhjq7ZgMSNU|aweEg1E{fLY4m!pI;U(Vs&kxJV>)*)SMNyQAr5;6&dXtg7Wv=?-=` zaOU}UD-Cc#yfy-YjTwiGqUpipv_=pfcP^vQg1qod(LiBk2Ozn_w7nXmUYmB0}Lu*B74G7da0JrRn|SOwSG>-f=~IjgRPBc74o? zf&tq74`gXF*gT=cOlc%61eEN&4BXnpufj+;ktlfy7~b*{^Ldg8SSr&oun02{ zi&~P1BdJLeut-ZQz!KQNBZ(mLvMM7HzcLYdx00k!@K(DtMw5ZnuvA^`F3BP-*(y!I zlp)rbfYmlk)4Vm=MLWfnAO-6&amGKTtv1Q+F~x5*$)_~V>ybGijL4TDHM}(y*Cmxw zJ9TO|wJ9z&QadeqQ zETi1tBDo*(a>qwl=*^4`JE#92FCdT z{`s1H`B=O8I{EqSFa=@Jb$r zs)^+H4qRrU2hRx9-0)El4Fe^jaehnH3h zY!HWOd?(zX|ZYy<5}0+YJla zVNcuES410sM0R9Y_GeI)Ghydvl=S|n+P7-x@opHG_3g4wY9;D4hU#|USa-TQbqL3G zI1RLJ6E*CVb*_eW4#Twv6Lp|3-G&M7w4WB_HJU-`pn|q8^_*X z?Y&gQI3zxOH+-MS`N=3d`kYVuA|QPnndxLdyPxJ1P=2PqluPAfcBSD@<00O zS=WZx#HZ1SnaGT}XS{aEE@6m3cKEKWM_H~-jCjaR&cZe_9jbRGX|!Y4fo0_Rc`5hwzBT=#-fCC<2wGn4zeIhh&g2iy^_4S0Va*!&g=hx=R?utp~ zkx4OEPhhO4y6luVWGXU$ImSh-50H5JklYlKDK^6{?Jh<0&=Bi@mn@_~`E`+ah*w#^h@gGmxFKX%k=1DJR z;=a|xGM~f}jlzMq_1>TX+u=iGSSCPm0ds=^;16>jDAH7(a_OttlBZmHM(5jHgc-?v zR@@>}?V@Jy)D_Kp($0D3U%_Z2LEPNVyOGPdk!>H)G+rBkLatatYv$qO;7bPqVGgj= zu>em1tOfwlCU^N``3foah(^H@7~1WAx_lWQA!rr}^ovZJ-1OYpOrkT0 zykdRrrt>)LWxClfu(|?kN&qMV;1^mDL3B3lE?m8-HYNU<<_|+0qbrvz{}oL`QO~_D zvHsZ77jp+z*9Y%Z_a@G^SSAN7D!#a1j9;dL?*xz_f=4>hM|}~;DP~{lvcA~We(AT_ zgux7nbA^SYI06bCg;X9Jjm|k=%mvBrMGNlaMehJ!hW$I5ZYw^qFg(&aJE1~9O+#6* z0iL*4vTgn?rh9yG`=YrFeVfCfCz1Mx6~35BSFFhfr!4;z)8x_rRZRDo1?ivLf4RuK z-uFhnRE%g#y<$zA+P@)f`oY@%$aGj6eP;PYO3&zE35B$`pW8{FNp>9>VRb4LWpJ7zHy}(3D_k;earokU^us`AA{w1a7?{-KO`-rx}$+oTp zcWh>8ZP{ZMAS{kw^Bf-g9AN()O#^POpQ34@kt>Zw6$ShF{~k>%bgyv!#w8a#7kF`( z2EF`^hFwD+0kU(*>9AADUVz(i=xDiF#Z~G}RRO6xl=Fj`wm)2p+!(N(`b3V-Tb~_D zIz^^xypmjbrMC^Q?5vmS%(vwH_Wl9jFy3mT1OzBiSGvGn!Kqu8kD9K+r8_*_4uI(i%~fgJyl}Oe29jLq!}MpAy7uF`dSZ>{Mb9bNciBDbxt#ws{NOjmP_aS!%NSYDrED%;;>N?l6XOU(jpyq89-n+>kSlH2tL?GFiM~4g#*r2|PYl9w5B7h8)-fpi-?B$ICFj9t=e7 z5Q<>IcOnl7K!x)Q#+LVTkO*#>xh`P!!v`Uvii8>g*t!4#c_?IgeiUe2+XeyX_*VA9 z>n=p}umtLq4sx%i#anwhwSGf*Fe zyeY&CC5Nl@jjCaAh!xLZWHGiw+!QyrfZXTbXK>`G!2`?6`2xjf-=;%`$c>+5X`aTJ z5HY1ES=#rHER9gM&B7-fYoV&hOVgya7tG0}ZAuj3%rR;LhXdfnPZw28dSJfgN`#{f zrLjQ^x5x=29+;ISv;uJhh!i-0Nox2iG^)HQg(++%kFZGyvaqQ}sMf0A@04v7-vm&+ z?hwDtd4VrNL4l3$wY`Of&mp|*c{<3m*LAVbVjOeci9Z#K^7@vX@Cd(T>!UICv{9xU9tvgit~XF|@KXSA#el`Z_FFoj-nQB_<|1Z10V%AU#^}yw+nua++`G8UQ(c zWhP*bL^Ib3{w{$kkA;iSvVJ}%)1CEIh1npMq-ld%=$$%A%zB_6L7KJR6cYO z;&rt{PUf|(9{ADSz=9vJoRdQxs6|kcl(#mtPF{E!!Br38g8fm7(23BYIE#U-#u+I4 z7Njix!f0NZuopFlyYAKSuf0jA~976S(^ha z27~rndQfm6zJCCPpn=7}$Bzzz0r483o+M3#5sE+@Hx$5UT=&ag^56F(aC;%xs2ioT zXz4nE=<&H|rf8zr9MU0Bn5$eUyO`KO+xuVC%b!3BGyXQ;NgC>2k$e`Q!C1=IM$G!! zdwG=mDw;|U^a3kThj;MljEW-?+7n9&0DQ=D1h^g`Hlxs%`;Uj=W(%fpe=$__q(_?1 z(I^%PXi?y504l3c!V8n$&4mAc+`(xK9gH<)XIBOGkp}mLw1dK4Q_JNp=JAM>!wG|U zN`#0fW)R=fN57Nc4+Z@PFFj$w9Y7ADkOuS+>MO%&Nf~0GDFH$LN-g8Iwfg$66&i{- zW35Q8?d5I?q$`3O70WOwd)tfwta%;Ih1Pn_^(M@%Ab#ydEO~+kQ&ww#X+6P^l&Dd> zu?OgWwNf3k=kP1g1Ppn-ir|15uxCZsg)27Hv(8)^Mkm8}Mb>W2Bx3`v_`L&xf|E#a z^1jb3Hx6uBD_WqM7+fwx9Fkure2zT=>bpviInMxm4vbsFi#-H?5nBz+EJT55Va&Ff z-pGX94Yfm2;0xseP>csIJLy7!n_Luafv0qz&`ptMr$@S&H|$RKeGfPIIw;=9F#etJ zG=p+_S709JVCl$|=jTj)m0SUNbVbB|l3<4#J7Zxg0I!!sph<6_F$FyU#te)by&uHR zKZ1&=BFc?~Q=)ToqKR>$RO^3RY^o=x1%#Dg=Ym9nPvlez+vZ!EuA>|?jY(v^pjZN5 zXJh=ZsWnhMrG8}LRHCS#8d9u^_cOZLhPhUx6B4a72`AU3)}NUguP{&QysXb!ST_-l zXqb+^vnb@OG~Y|q+050buQFwU7bjX{=}T^E**mjk;?vz|i)!w?-LZ!-39q52wDfV> zrH7v`@6+CEjkww!q!Z~)h@`X~H(a=CzE(Z|p4h%|zT?ts&2=5^ZoG1C=Q+uzd{d=q zeBx?9v`zFrbE3KUuCUs8HDk+kC#8Gv>*Ys7EQ53`t)9*GOGxR19(>5>9yGzx00Krs zkZf`<4y~;}d!#O!eTyoI0&9?f%@n3A-T;kYMksfMkxO060INi;z5?+c^z&5ekSC-z zz}Cmu@gjBjar8PS<;54+7ik$1!7t;3Y*fkEw6$fX*b;3SOo6H^qnLJIlYr~Y|H(_I ztW22GM#WZ6Y;jt9DrmdCTAATD|HDhWKb@mTE6fD`@X`n_Iq(~4JmYv%K@u)`-n>t| z^y+L(@atThUtdHOSLaf?3<@|qEfw5XCsH@R1_?j$(kZL+#da2j%AHmk&8rLacHhcP z1*~ ze0AUN+y&aEGC4|`5JKk?G{>vD|uo-;ug_Bj|EN0K4# zvvFN6MFG0U@*!UH)kl_Pnj0sYDPD_>tcT@Ky!89~Z;OM1chLzx^NMudtDMnyYjt|( z_8~26#!T)lOC&okiY%MwUG8}qB=cT}-rJXG9y3__S0Nvpcix}6Kk?E>;oZznytJpi zEOaaKiI=vw^E@zm;-zDF4{`qT(xfW|l1wM^-ChRe`W1h8XOf8~@>@eceu8nod9Q(r|bJxbawIiiCf7X*f}^^7#G}FKu_= zlZ3D0-=;UD5Nq znTFtZV-CE1(a>wB+CjJs`v;je=;f3_e$4HK>FA}*0e3lXg@z)8Q^^0Z-i29%lO`r=8h;kMP@`w#ct8rub(90GK z$VKvtcW^wl(u(}diemK2aD!>E?W$tp3bM^=CW9JhZ7MDtnu&wj1NG_!gSrFaLIHy` zX7Zyj^kuDhyzfFg<(=rL*f#V|r>aE3jH;bcxjZ*}~b)=Aq6&u4-9qZs5 z_gTS9VknB@$n#X8H4B%a@+z|62o1@l4a-ffZSmc1tFp1j}-*L(xH~fepb72)?V2* z@eFl872#24uK8cMQPI5)^J*(L8!PV3r3Ub14rpf%)lNVQCQ%#n&^{=?s-;g- zD~$XqHvl(9A|4v!l^q*TdQzKx|GM=2IQtTbti-1j@RAHl%te?4RlZZ1ChC`;GZ>j6 z2DOSP6T3N$8^q6%`3J zn|Nq>3lnc16(6#4*J{4t_k5ufp}>~~5TSy;^v}`(pLyWZq=GoP2WzCy@#PEWEm7oT z<;9f5Un`u?XOb`I_RYVLTkz3cP~l`(zO7LeVAYZz(r{ha$Xk$WT%cT2--ut({m`n2 zCV>jSc>R5$ZhS$LZ}Es(R$qEJ4P=fdh zzwuJk?LtiFVq(xrDocHm>B={k75{{l%mr-&ld1I1mW)cVob%@RbG1CvSGoJ#`BAEc zg=|G6?8TExC3+P<~1N%*VlbS>7 z>jnJpQk>UIgVsk(qsMGlM$z6(vWQPNYERwr&ioRC&gqSf>v4ac6kFhASmvRtpHb7RvqV_UCdXOeesUv$5a`QXFU7L7h2NS`@# z)6rRB>T)$I%^N6PUT(9X2P49AJ-~xyDI*ad$W~*Ch%SQb@vCr0RrP^of_YJS# zKYplwpqc(wzD0Dl<=y$dX5szMg=zq_<@c=~EUm$m+IEzvK@iC{yg~_remkg04<*?k z-NPVrb^Gh&_EP`$BFc`%={790VNBt6GN0iO-JO*EElj8Zt*l{$^^Q{D4!(XEA?YBI z8y88JAesIUfj%#}oggJG9aR?_>CjF??t2;yC>QmG0KGmlg#<4{mjILgYr3KpnxPfi zqTPi4-DMQxp4Z*%`U0>BPSbgi+qT4w)-*d6PE>oT4cWh>+dblR~tj0=H2HJKk zhKrm=O?)Psi~4u_l2fJ-)q_=z1Ni8JP~!u$J5Aj#Gn;H9g9Br`DKnw$10{HKhq41# zv;%Wi^C6zYU6Ml`YxBAY^M16pK(s%Pplq16NLn8!bY{Es9Q$;@6Kv1&?ljS!Dea zw@ehQPCi(Rt1?b?JARC{l+`^RZaY4jv^0}HOt-VJg<9q$o25rLXDifZ(drj);TBE3 z%%?p;ayz2bIN5ZyLNBx`i9XRQJ5fGAvHNK?(RmVn+gZEGTc5p@yLqCxXyqnq9i@LN zmu+?6eL9I^eba88KXKY#X^pyiTL0s;>fCxC+2)YR<`apHn(e8dtWBEr*(W}m%xIhB z4>nQir!5FaqeZHd3Jqf#hErYh(7{FXi6--0LCZOP)6c#ZGew%y!HYo>=cXFx718JO zxaPB@I*YVg8`0{UiyTX&Mq5=n%T=~6UADWV2U+SD`=k+}#utYgcFDmP$I03)`4^|r z+J{3I=TPzEgNw@{@l%A$>n`zg+RJYe;+GPaw|8%@(RJ1rOLI&uAAR|DXf3Rp1|O#` zzX#jz4BGoG*aHqP@1d7Yu&ZuOm(J(*8bS7Oc(#b{_M2!9uph7BhL_>Vq+q!1kUw43 z4_4352_~7b@5#sp0=#Y#X+CWKmO|^ANeR=)a)aio7fnwN^T9L1wC5WUU2^-!|+5n`> zBNw;~C$$Ynbp!{x3RI+zU?B^|ymER;24bJKp~G{aA9nH_y3z!F3wQvsh6MGc72gw} zTyB5ky>}LRlA4uU^D>Z~sgd(}!hFSm7R470(#98U`o0j0M67=fHlkUxh#NvY}#Atclf#G2I zz?beWP|f=X!&AohM1-v+#FNrYy;v+eSb?dd87QA}#R^YJvhlW zhaY%gQ~+kAm*?C2r@d)cO_mDt4B&D%M9W{CGi(bKy<^cwp#2kI;nRx#)rV}N7>EZ| zlgU+&S4<-JE`0gp#K|M3HUU7K`BC{-&aiY~>W{YWALaKCn@Hmj5d1KA7#1&PDx%*S zhTr<|&(BM#Q$YDkvCw5+w0RSxLB;U#Veefw-y%aXWYofwj~^0Nyykwp4!qCcbqE)n z`H+y4_yMUe5b(PI{Cg+mv0-`=jvci31^fjL@Mw;-jR!rl|9BrF)Q#8Mi5Ln1HUa3h zW&)lrrl=guJO(m-09nHS!AqZMDdh}5@zU|kmVbC@M$I~#<2s6w6b^HJ)LcpO*uYeL zbSVqNd?d9}tTH2u7sU$cGATN8BR8co#Y)B5XAD<#qC7}z*d|bl8gX$v7y@h`s+Z`) zyqK^zxhGtv6U|QSGFjH#`3r!zmS1=i!EvIW01w}BK&ccW5EM55Q2Z0tFR_kPs#P|R z90$b-ueJu`9i|u|F=F@=5w28GGeEVMH_YG$i@D5KOIh-bO}1r4L}QQdW`z5|XfF^Q zlxn2=I0<7AMi?B-FWNKmKM%sjr(yG7{OE)wS4FG<@ji+-u}|J;QKvm zCv_qmAne<9J5yb*P(B3{OrsI_1I$XuC!?>Ordj?DgG=NxKXAlgNnqsJC4}jy14TsN zP~Qj%n^Ok{OH{!FbOHIoT6zE`iQAkA8dJJhOb#IxkRo(-!NXX5AZiKhJOvNXi)6<2 zq>h(XfX|O7j=~HOVlx2w;UgJ>m(_7A!G28DsIj6TCUA|Ou%ZO7X%dXyiis?0U1?l~ zy%jYDz?GUhSeR0cTnR%E|BEOFj5_%mz6t1y2mwA0eh=hv)DkNph7h~B0B=@$wh;Hx zA})-+OpBp_#s3Xssf~mVBcP7jB}ACl#DSg)Fwvqx3a~lWbHu|gC=;r{{lZvL5-w(0 zI*`|vL84<57Yob#5?f3}1huypOhyd{E9%Y@0*he$U z`X%ex4(yHb*tCN@%fe~-r1jVH%C9(U=GEDx8Z(7s(n-MHBQtPhpm)@LNHR4u02CSK z-av6>I0`s)oB=}#GT+#tYauiUvEPWi@kYU-E{fUlHUWt(xElC?45;C|e|Nj3AuH%9 z9;fQ-nUTyyz;lpgj^1!!gBw+-PejsH+v~-|?0J;kZuj+b^*HN`L+xfkz6-pK3#0Sa zAK9}P-6)?-uKM>j+e-(D*xJ7$Q+7jtUQLR=74V)@Reb!Gq5Dzbv=${p;C{lJOz=_4 z?!DmrcE(4+?}GK++27BN-*)}HZNKmObvg9@3-nPk>bL9n!?)eD_I?Ooo)mi!Bd{tI zg8W4jCV#I7v5v_fyTd?|IaK%@r$&o#efzu6k}%jUCXg0;8C05(g@C6JuM2HaN zFGOw%69(va;Oq}>IfqqAg~2H^2x6iJ05}^c(9z-n@XUTdGy^|aQYA4jnm_>j%O2ps zknsJ7t3Wil+ydGo@wKShNL5&4J2RZPBxPkjK7OMyhY|_M*$lb1-=2<5u;e=$OaQjW ziVmX?gsVy%=Ed^v$iPuDP7|~Si7hf0-O{2TFrplceY}Gaz%xL3G0XP>t_LgQVSrwt zmJhR*61NdwWI1;>^7ly|6T{On?d$+%%qY2DDg=ixR!DUhVghK19S?Ug)cyBg;VAfj zSb^ZN@*rpq2CyVjBjm0~ekcY8a=;M)rT9@EFLGd1(ajVQo%W~{$Cv1qx%@Y1UnMU= z@v)ff)Ym$XwBjeUl*}#^s6--DE|lycM;#_$ACMRY)@DkT?Uf3ropF-knkD z?6h#Gf?>;NUPb4)&je}(Xbg!$BeC@Tzv?Kwutq>$+F-0mAtlvBC1W_s%-iG7ZUXyq zEcOhsWDv}3s-HR^PjG&9a>hFF_qmy8W;5Rc~LnD!ip z=>c^X5smf?gliy+)7e58g+uXt{#)j1Z?P74*^*LasKV=)0YOEt-vq?ExKLt&!p@S^ z0xYD+iH$(Wf(4WQiR2WtBZrC!DcTbr*aZoLQidp!n288Nh2bB}vh{IQ17_xnK22Hz z+{U^mzq(}l*Y4K^znS=THJ4ICv!TK=HxJ!0-wVV8Fn~eUFUQ4Kb%v__(0YP8PS?Jv z%oadVd2Ik#<8xauIkiBK3SmknFu1X~4yKja^_Wi=NwugRrZ>UY8*XzpZm|LOz~0Kx zYkmP)Bk19R2?#ok>w)zOCwo^Sl1K?1=!xDyCYa0_lh6ZGI3Tm!*5 zxVyVsaCdiicb8yE$jS2FduMj0c57>DYqx5v_U*snSKZa!&*%AuS-^D%SLV2|+KDpx zjd<*R2NeLMl%-nm06`d(7BD%naz^^@Z~uL^QG$8c6=`fBy&}6d?jsvAPpbys*_DiN{79xYOZcHkbWdIv`PB z0{^gFM4o?==2#3XS<5&!iMCs?5OYn21I}t9Xy?jP;kL^#iF}l#rUQB000ki%DX);3 zs9-KXTE&xKZ2=&K&P7tc=0sOZWrLaLSITHw@ zwc$5mjgWFO03d+bkD{_1Vaf8e^STpZ1@rIx6lgg?hWi=nzUc`0ok>NH!Yie@X_GQ0 zNXbS2^f;{lU_F;I`rFj2*3aiIImRr`(oG@!K!XY@x2CCH9fGx32xXCYKmD)Bf~cZpEjWZdt+D zZMlw&-BV)Mxi7z;qii?rnSIvYKFW@pS2@py=sl5$C8>nhtu;okA8o&dHfF3=ehISH zUBlu9M8id8&>OVFMKLl0pM9N7y1z*--+Rv>Od_3nEZ(T$&C8r!Q4S+^Z4$UIxY(|UI+WSbgWZ)y!rq_#iD#E;fsv?GaD zJ{v4p4q+4YkGFqB*9;tU55eglKgCDHp^?M^3{ndXlW64aMhsqSrvAYvm)fUrxS(i; zj^Q>c)GNq0=*qul0&8<`huv&@nNYYwHBXU%;94+_KA4aS^V|}A)-pfl4hDR4F1-m* zk$q7IbFmt;NgqCnJ5MYHD&owJ60IiU+)l6cPpr>J+RRe`1c)msn5!k2Yj{@EqBl_KRcFMx>H7UGg{h?M(!(3xO2fnYW`A=F>NdLd*ocPR!l+HUBN0EiHKdH zv^?RWT_$}Rnaf0(OBz`ywI@)hyeg$UtE7rm_<@vGjbL5PieQWT;24fZUHU-XGgeKr za4yE=UYAx=4N5 zOtnr;OS%j79On&$u?;k7^$(?ukj-R%721;0L2fmS$)^pKXpN~eB9 z>h@{S-G?5aG57E>cTY3tv!eGZGWV<~uFoz0YF6O&{pi;YJ=zAnX*a#=Ed4iEbMI4g z2rh$aRq;0^dS7A&G!Bb91>8XCl0YSfAkC5>eTHDOl3+WA5V_;8E(}mua0xVu;Xm`z zzIi2KRSe;cFL~(_SH6<#?*EpT-W?4&WQcw!dC5x$hhhJdmnJxg8D)t3ue@|=yf9E`ro`X+r?tl#U|V3Vb$d&+towW6^!i~x%wLG?F~Wo4f)$! zy6RiDw?BBQe+a+5ldir~dV8-~eXsxa!L0hh?(L&%^`p<*r{L+&gX2O{^Q&9C_m9ucuWmaA$KvzKUBZ)1e52y> z$~y+eJfc!t`$x?DqLw#z$7Yu-0%B_0dvEU^rWaR(lJl}E>i3V&@9v*+D(bI)+~-s^ zq?OcO-Q1mD-9%-T+&w&%H+EcH|7af=om*Z{Eva#fOc|P-a}H0ohbB0MC3(iAkIpQ3 zM5ld?%N(Cux_|t6czV9@uZzCEjmarJy|{7+O)RNvJ-fWAZ0Z`En7h3Bv3qpV*fkK7 zTQ)JjeE<0C`u2Wv@9!Le;|LdavZ@cL8#*oRntjB_oGe**Z9Dt=4~KE6yRilVUIO-sJ9y_=Dt zue_U8AhG2fQvASrKd-K3d%vKq{O4|v4}JT7$uNZVVc8_v_F=`Mxbk7urs?8g&3=gW zafSa&rNffbQRO3S^Xucqs;0wq`Sq6LmwI&TX+bj9&B>pjjn*@)zRB!!zB%FAi{CrszL!NPVApfQ zDXjM1_OqkkH`VAAJU0d;Q_npkM@`Rnm|D?W_sef9{&=suWnVvPW7crOAraaG@F=u7 z-S8M(-M$E~XnbRSUymtw{Xq}|J0lvRWj0Wnu}lB)&|%O(ebzdT1&9m+}2iXF@szauIb zQ}-&tGyq0Qnu1aZFOGwTh{%ubCn~w!4Mg}NB2e~#>^0$F960965xcJuR0jO7vCV~P z(6IvuYbZ4fp$Lp(lM3J%ynPHLBr&l`^65d|L5C>)^PN}W$?xA0k4LDB<%_EMa{d!S zmK~>_dL{)7O8M6yC*vC&;Wj8V{^8W0W@0%^F6{v(9EUGWk^hMRl|A%8>$ z5|LF+0c{;w_Dc>=@A(33{u6HHhx3=3tqg)a!Al4kFnY|1dwt9BNe7VFJBVJ zX`F#?1{%n%=${U9VhszF#S(Q=y-F>1uDx)nz)jKH^dpm0ffyz!5kNxvE_N1HKqExi z(wCw7J-e};hK+MY$+v@($-i9;&mks2U>73_aR!bYZhJ6{ z82BZGoN;3qs(AjNA!HR*M23M>Ih|8AwqED_)7QXz5v%GLVbcN;pcnO@5c0mle}<4_ z>I|{^OZX(p)KbGZi+9y?&cn=N2k0EmiD{vU{MwJ$!45$11Ac}=`{=Zj>$CC;T`CVK0Xi3&5`v6V?rSBt(j zG85MKnNw*G^(BgxR>~x+n~_QNGcP(Wn65l)w0Dv3`vA7>oblQkE`8IRRaQ^Wv(G!g zl6bFB^p)n=`k}yM%e3vM_NdRf`)TGaGZR&=O=EiVN?PUM?{*$FYa6#|kL|}ot8S>o zR5xWN>6i?@7-`#q^n@nq?*sgi{-OZSrwUz2q2k!W;2=hoTr|yQ|37S?dJHtgZ#U@% zf6)95?nlG2?BQPiQl z19C#Y6?J2DB}tRRG-Id{AqhD*@Sm3bMM#*i#b$x9NX+9Xhe0GdiUM?TOaO}=+n)iW z8{Ggv5ZDvw!*9F};vgM{#mc*jQ@py9mQcbsqsKi$!T(9)jwvzOpL3}E4zcR-o>P4A zWoA4!7vr1jxoFj~Bm;tInEL*fOze|Pp2d@-i||4QZQKd+#tMylp&yYwPY?%}&NLbv zSCFc04Cg)uCZ;O47!xr7#d-l8Lfn%PAb@)}B2uEIK2$)D34$JIj?K~NFRX{#4iCoU z{}@o!(~7P0=&^)qDL%P~Z7s!%n+;^{*Lx@q1BA1)B3ZHDr3!6KL`*h75FXi#iQtR| zqg6qt0I`b5tIU(n;4j@eFL~rIKmupd(Rp>YL@1|P-tP$>f8LVSjyjWoM~PeV(7J_~ zI|39#<3BTa`hnT^qh-uXP6H zqq5q_7+(}H7UE-LkFw>YPV4&mrn8ggO8I5@*61NZPs_sl`X4cTpRxGU5vI#4oz3wi z*ZB5ar$^eAoz>oD{TNRbq7ZiB`_iGQE%LB|8s`M>LPnEYgixwjX`ffzdS1Z>Eq6dZ zYaj_+Y$O0lBjn5kvdxc*#qx*#nk;Sqk$H-|)9wp{;j}LrO)V8Y?0gh{2*4&bXA|XG z(Rl?(PpN}hy)Dn=!|LLZ-*3Fb?I;q=cA0)7`2xLnGocjo-o#_f zc(~_PD{LECFybdz1=CkOc~$-R6-|l6AEAEhz^@8823P2oUEdP6VhK=u`>C&V$U8-x zvo9zHJ-0bK-`JUGs@o)T+L`(wP-^l?Xo}~0P*Z(Nf;foh;_k*wB11B{DHvIokOy-sH54qR!6l#n-3x3iOr3(Jw*VPt@4YtC*5V zn+%(QN|cZB!dy^3h2nz@ne4K@6a%wjvx_p6LY0r~BcZ+qA+wgnS0Es3CTSQSy<4R{^*874~132Lx)13 z6w=VV1|QKuXn7tq`zV+sFJ!7GTr*^!HF1nikK#h z{L&YJARY<*9x*Zuo@9tzUyj_gfSxBu7WhXt5bEmPM;@m{^;<;3^+pAYN2R+(o$^KB zJ@H>YQ9Q~pTod};YDdGKqQm2(|4_#Ge~*?+(Fdi*pviK%YDIlxh{D(j#7+gH>%A=HIGS%g0+T`k2GKGicW#Srxy+Khm!Y_j`F%0OeX@<>XU zWh$y)YEEgY_(?MorZmMjfylm^&Bd=dU=!CSe^la|zD)VGjd)c@3@i5b3( zQaf1DIDN`C5y*FwOR{1r{4-Kads@ssn&Cm53kwinbxETR5ugbr&hb6XjBL#hVqy*V zgvQDxB%-m#6GtWgN;UV)GHWeP_biMircaei$^S%GcuHMLoLc-VtCBdoS|B?&jiH>W zxOO$Q&NI6utT>Y?EBhB)16p{~YH?c`OHWyNUm4vHTB%QRe{VrC!np;~J zR7-MJyM*@rb#HCsaSaM?{9f8iJ(>$54*Py+@g3R!JM;TGuFrlXXm$2X-CHajG!e{1QRpox%vEvB%|rq%V-77DB%ia;DH6{t z^UoRsKew9awl?&%j=8oD!?nI5X|6zO_8~)9Eg2%HrKhvvPnLE$Vx*}`43@N+4#JX=*yZXahf%c~R za1vyUF3@`WU+Y%%_A1P0k{@0TcomUvNNdQ}Nr=uHNZP@#BHqwuRO4U}U>AwtEs8uJ z*l752V#jz2{(#^o37>IxQ`q3sSKtfjz7ZLJLs@~(*T^Z*Xh5j$UPh12K?-m_JF`jm zy`M8)Y3tL#>DTfbaLgU>;ON&DlYldnut<{l9qb-F)c>x+7p2xLFHl@Vx97xqAgO1- zUTny1XF#*ZLWc%BW>D&xIsiuf#v7RKSFY&yCmlu*vxMtbeqbK@Xf&h-H)2aU;_Nr1 z0q5bCU`pm z<<=xPqflG)jKSq%2pi}B0fAQqP0e#6fM$N`lAl%(oRi|GkgDQojNb_kTdvPlSE%sy zspRXnbNfqBGOq_O`0SthH_8SN}sILxUSc`*lhacjVFl+2j5_X}T) zsC0PIY0RTN6VThbhsAJyzFq{j;i@E&5L8BJGKmfKI-Qu?wQ+p*K4`!hY6xD;)I85c zbqtmS`@E!_B?s^WY-eR7t>|Jng>sg{-vHr2zh5MAfGq)p4BvWz6P0jEXk+H#@tgaA zFWk0o)YG=&X7dK%x{&y7t zaNPk-ilf%5OJ#0LeDOH~yk*0@Q<=NIAipD>yCS(X z^$tJ{Vjn}MT#r@3j(a)qc5{Tn#Bfnv2zHIDl?3bF!{91+eoj;xyIol3CVKjAnbD5N z@Sa5O&b+iY8XI;sul!5FnU)-&XPet#t_Z^HJo~(Di?fF&whwRQ%}0%7FN!Lxf_$*J zZ-lv@Q@ab<*}IEf`Te~4u4kBi2PwT<;fFEdzKxZmE8%&3q`(Gzy*6H zL&zr>rdyQ^S$`llcP1Vj#@p{7Zqim1&T{YGUooY)-HlqOs*_A{O5 zGojcsxSD_R%?}OrlXe#cY~&V~xGx<3PU8Z;V^(I}(2wmBj>izm)eyDO@R=K%nZ@Xp z?G`~&A5tx9OgF0ZG%EHsYWB8av(LqQoO3?P>u8K?Q>7CDqi;_~hpHF=_aG2L|)u#^UUiWni|rX zt?8O^JDc&n2Hw?=CwlvgA)@hi!{yo|W3b;$*Zn3td&TPb>J z`|O7tx+CQdMJ*2LyW{5>{_zk zI0Ud)BYC~Vd97U~v74nmDvzw;0GoWk%QSPxYU@sAip2ivb^NyhP&VEqvMnFAZ7i#| zSGMiiqHVp~jMiJbSiLa>2Sg!BwDGKm*sX!e)r%h*2KTysd!3MjCPYCA^EPvWRPczTI-ow})b7dbxwZ8Bt3DMF9kO zQc0*vFQPvtnQ$PX>aJuMJ}Omxit3(p6q%3@B9Yp@OdRb82-iO@I*C=UGf?*3&Uh-0 z>Y%#ibq-R96?PF(NxT`r`$`D>e67MTk%vG+8WDSQ+*5#+jST&zGT4JG7J}>!*GGxO zAW<9BoqB8bsnK?$Q|~uVp-R@9dKQ( zI$?-EDsO?WN*^*7i2xY(`q+iu7o8A9Iu3qgrn^w7*A+~*MrFOyV7oOq@xZK@j^d>C zGKG)T%aez2U0|WZD87%qMH)eke$f`A;#|}mB~!7!eJCc5vhxImM2@^TjuU8 zIhu|TIhU|=oSDgukaU;u9m+^T%NKzV$&&3H901{k4r7&p;r7xH;Bv9o*Gh!Y-uAQi zC9}-eNW2nBuxtwSM9-1h)OlZwOTqLd-#AO#?60&h$DQB{?!A z0G^l>a*(4bz&fMtp?G`GtF{7;YD-OPy_fgK+kI>S&|=tDgUisjTSLC18@BnMGhfsL zn#bHL9&ZP=3p_awoA;t(B6<5d&zqU6>zi7`0eu&9M6~=aVVCd`7*Xut*38Mm0+LwT_IDcIm>kguPlL^F2 zFwBJ`NYM62wbYS@f3ZW_dx^M)v5;tFb$}A|Wd~o_c{@CtAWXfVDPJ<$6w5&afEgyT z>cIJGHu`UhIR>?o&oIfj;OhP5a=y?V!Z?!sKcXt~^{cqVKtDu$1jRP@$AMx)yBr|aNee9SXjOg{ zB%p6tj+F#FFFPww7MptUebL;NMGgdpcjGMj=^JagRh^AVWkG^`qcZ_6_4(G<$4Rk? z3jXxyIj4}20l(%54vuu43A=|5WOze!l#`Vyf7h7Y8*D&IVxo1C@VlU^V^qeS34>F< zq-vOBbfLl+RqJ$WF6#(#XF&XMz$nu)ZRT@+?EmUen*s^bvjiT|9DbKT*^=Z zh%uJvgE8Aj+KGtJo0ww3!xrqMh=c=$A{5_Ky|-R#XPc~)RKmBZue?vsXvJ3DVjfZF zQm^hnTstiarjvM~xApWg*Qv^oi}-A+yCV@H#ylL*+FB6I}22PZBc0cBR4=IuIK2ePo=*?ln|Dxz}YL!5|5Fwga##ei)@isxD5)x6a zXS=K3BbQg}cwTNwR;WEApwdv~Qf}*Vrn6DT(LBj*?ATyEAeRQya=T5WcE7g{Iwf8% zxJ<0+Lp(R4jMMJN(yVPZIyW}P)fw@etVwKOF{2mPnZOFH%hU)r79(k&Vrs0<6tp${ z`2JJAeo}+7Zl!_on8Hk_Ye`i@WvyBI8t-CK6WfZdvcvDS`WF|SgLdiQBB6H3v(z#b zWanJ?UhhiUbs?sUI4b&0jyjUsL9i{EaD%-h@!lD6}s6f{E9TJC*QRPMmh zZiMBw+(+Rv>@6k;!A)N7FG{!$)o6zhG%XiWxjICc3L3+Ruax?@Up~>hv>P{WrVNQ7 zJH`YFw!eP0GWF>VgQn3i{CL^+8gK3C9`Nz0>8t5q22Tfk~(I9?36-rX3Fu8 zi(X_(ooP4YY0@dMa&^i$5Il10P5loSyF!H4I;^CM(-x|O8?yAsUR-qA zMBP6wdcsuqYIUiLpeo?SMMK`S4R^n|XcsFRGv2k88x7a`!VMKkl$NErLDzz6#W`E^ zwYAX8hw$h>wl6N4dPkqJb)v&g09O8cV$aO2{h(6SJ$`xP$6!;+)yA>s(c0GLrkgYZ z?2Es$$2P8zdk=orejq}_7J5i?6-m}~=!f-PfvRRvP9KM;4?lM(Hrh`HW z{DdkCPbC(wA85gz;vixwJnEr|(oYCr_}ZhCuJxnUOMa*sTVC3am_*dl0Q+y9cQ(AF z=%_}}nF|R72~v1UsITpGYUjNey&xxu(XTEhpF#?3g054|v$Vi=8t}ys4WuJ=RG`Fw z2QEOdF!0)>t-7aO=>b5g;@q~vtkU2D9QP%!U1K489U2n?HqzhqqdqZpoV5pGLto7i z^jiafU8z_KOw3!u`v61O#_iXsucv+OSH$OVlo~k$M}HHsOEZNp%7(miugH*;!3FS% zzB2Z9YzQ*1{g0Zayl?+}z4}BW>DV)cOKDsE^;BzhgHQ$vrlEQkohA6WfbuP4K{1>U zY=TX`>~q)l?fJT?YoTOHWe0Wj^(Dph@5>>P+y&NeI5P%+9?ZL*@w$cE1Qi0h;3T^V znMFMXx)Gg4@jr{2gmt5+H<;ITqua2v_H|?Ki<;$&9-MY#zwWu4?Z)Bi!3%7BMZ@;m zq=%rOn#HMyFrnvMP3+-U=dUzT$Y@V&YY%ZmIr4K4d4Db0GnneGXIzaR9LP?+4yF_A zy;2je&#Nf3@P(Iwk<+{T+lYf02tlBn5|Dj*;I?>3N!F_vf5setrW$`{d+fI~4D2*e zL=|5oLtkV=0L2|Z@hAkqzVPh62-t#Fea#GC#UrWvYtzI#W82u*d)c1FUlv+$2$J#^ zggWK+Z}>_8Ie^}6$8<_ZfHsJPM3R!FzsgY@TR<}E7`?4KTm<)hmngP_V^UuXXn?O^ z2pTaGBjx|p3M@xVK1Bpv_iJ!r&SMXdz8_Ev%v0x*GMk6u#YP9@L^Ji$4ab96(R}|N zQ~5vT0esm0D%i*~5`UmE0lqn%Wwj>i(!-8}<#Liqez^E~gP=4@c~6i8Dj;c;BZY(a zF7&lLOf5dZ5Kl~U&{g*XD%Ws{=g=Es&_{lddhG|XvJc{NIY?>H8V_(!D)`TGBC!3s zgLoidzCF;nEJ%UuD@Ud>O&C0J!3HQL08B_^m9x@=bzv9_fA0@p-_{h+tU=-i69pnpdAZUNKHcQ_A8Moc7{egXGNMsp@~D$ zsbtC%yD`{#5)FWTV#o@!t12UucB%rVJL*eSF#I3o0!@0n6?)G)A99$kaZwv-D z8Rw9n7_^yiCI*?s4r;A`u#N!P?B}iCQQ56f0Kgju$~R6cvIDw`bDoNJ@0AEBQ#CPw zjvU3w{jpkSkc2-`YA#Xw%7CAH0RW}R!AU#nF97(``km#6Stgz3l^i&ynp8#u>}kzg z=ser0PAs9Hh|##w#+GN4lmtQgo|B_3q_+heLxNL{U=>51VSq1dUx%Dk5^CG3&`l|E z)0#qQ@;mOmoUsAF@^|B;)Q_>&;rQS!ldPzp&*E=V2jf?XD0 zO=a# zneslE%kSZ}X{fbH1eZBFnu88lp&DwT-iv`7@4^ODBL>vMBjG0?PBr5r+husYAL4g8j7{FYH15x zb*ytWQlFVLKC3%@4$53>5(;g-Z*JD(ZqyL#bW!Z66m4(#?2W7Y=Evt;r1c)5dOud( zEJfXc4Y>kuT`ybR;RR@))Z~b1+h~KX>w9`@J9_$4 z{`y2N`Yn~4$3m3h@|)i?HxD*8U)EmZcIcnmE*uW%-O?`H{HeRbXL>*qd93bGzX<2q_E{VM`KtYBSiGyN)RqmK7RFT1s*<#!sackU_;(WB&la2w%huD{{g zCQLGV-)r=%VTbFFQQO6i8ZiV;e}}B96r5E<sfiEJFZbn;t5n#u$)pdwgCIrB2g@3!!L0k5bO$<7+PVaL9~%#74@|kj511}Z zQ)f-r(9F2V&8P&-$W0DR7IRG5dLiWO7L&YI(F14L}>(0aL>0|Bz%lh~=Sl!Eq$y;;D-qrj)(($`Jb1kf6 z^9S=3+oOQ2bpMBJzd_CryVk%?9cU+K=pavov|1QUE8OhZWY=Qx?wEhh!jjpt4$blt z?AV>$QeXZ=*X|^dU?Jsl`BTz~Pmv|z*OPStOVcyU>Qzf)tkVdx)5wXF&&;QIe=OAn zPq{x^8G4-#G@PXS96P~UN*=f?qSj@LPQC1`vK6hSXHPqRTjjA@bCR6t%3C91TJzm+ z+6J99lcQB9owWv^wbh=rZ!UT+o^=LmwmzJ7yNb0FocG#^b@H6|lZ$n0o)314_PU-A zH;Q(4YHPC|t96{$xsHuao{R^dj~1Q7(qQMfq_&w@wwagbjhZvFjqetul_npormL)G z*?5jjmP{^~>TDeXY%`KBf-f(^_%9Y4&v)!fHjvMD4=?s6FEV;<_LJ~V2sXDg z?eaS881n6W>MmD!Y_E9i4w0?bvFu2^FPEw=engcj{II#Uv%BFrTQ0KQ(fqQdbah#D zb-Q`|OIrDsAxK{+X-bIDWD#%B-#Fk>T&p_SZRLtH+rYCVfcOg}-uFugeTBXg z?BmjvKuNWS`vO9L1z^yBKi7nPf|=DqY?FZ)U#nK6s$p@&u7YwPh-BMWg%1HaMiOwp zWuSmEnx`{O+0$O7JYe`f_G7?ksFgD$Kg0Xti`){3KylxwaVa~cb@OMg^#R8}GM)N) zNpEpVuCYH@{LMT) z!gt8|)GA)@29T9RX3nXIre(vh81|$SN+~RcocoS_dl}(~6`j1Br zm_|bE$x~gXGI9eMi-1hD9<9Gvf)_RWUq!Mxe?t?a@nwWSwDAm{hq$f|20z++@M&YL$$9j>q`D3_8 z9K%mM;9B9^eC~JzWmwDukn;d&Ke+sLR!J7DlZYQd_Z=OZ4tbH*^iN8U?vB(;aPIE| zwf$eYK-HigA{;?nfN){+Pawr3!0yR|5G8h8&mam$pXxOJlu%(puMki)L#|MW%5$LM*T$)y^0{WuyYx&b)wKQ4M#A{39q@%*@U7l@?dW&#sB77WKB3t2qp*iQ}% zQ<%?Iw5a4wWC*z3o}c`npU&ZQKx6$h7cMOe!~n6!j@u&u0q%<|?gKN2R)VM!VI>Kr zAM+t@R;1QRkd-$WW*F0g84X#5-h|=6>(28{j2?0p-gre zjT|QN43WdW>LrHikqNBSCPV~AAR*jzxz~h0xx@!cwCe0Gez^=r)=Wf&Qr;lx0T3>T zZ`sU64?di32XPE_KN>u)#$sotS5yCH9i>PXd421BjxGA)3`1}Z6b;ww34EL%(vJp( zi=d>QkxC8HL-&mH39C){{13VJZq(}x5HD-M?zFz_d;>a=V1mMlm zgiE_&CrBV)alnh3F&x18+B3-RcOxMfF~kNVI2`8&i5tDi|G+tWJmU&;wWtk}#@c_$ za1f(%AfiZo&B4Jy+7KhgB8-Ubd!^UxHzYcNBtNvlG+6pD%iVSdBkz9OB)5_?SAI{0s|~?Wy!P`Ir^?7dM8~Yj>Bm)| zc`b!4zO5ogYIe7S0*OUtXB10Bwr8wIu{>pLSb#N7SECeqOvA$9>OtM%-)GaR#ecth zX788gC*>F@x&M4NfNy=CQa5H6Vcp#+i?}Y1@P_7X2f|AD)ga!N=Xc}yEu@?iOA`@C zL)>TUa}!R7?VQv4uB2QuVvo99vjl&1k7i}xldbhBiU_&%NqqEn>HJ{a!40U5op3Ly zTMN-G8;J-tu2?EV8&_qLF%Q>lNo?<{9L730*WAu9KW}<1+3-gC{{G{*#epW=JQzgX z`SdA_Q|V^M`aO)VKmG$D|AEe2CjSw^m(8E+*?VF9$D^OHC{GHPSX)mk<;MkVQn^(` z8PKiTL$+1UrP69} zXzNpwxGCLF`^Cbjjnc05*8UgvAzgE5uf}6dS9jiL_$s z`=2?|`xcV2i>mRlq$4!$GNA8s3CIhf@14}>h*QMaT2P6^QkLa{ zo}{RJEuoTUj&A~T4Bwj3$e?mT{EauK%~3UuyFlONLcbp6H{TV>V(Hv2&~9=_uQU{V*RH4YJbCxC5_ESdqK z*^`_p8FazA&oQeUk+pU#;voOKLnkhpFTbTg(z(tHPP_)%$rF?0# zTujVv-A$$mc*|=jYN-Xl_DgM$xStKTM_x>T38!<|1x%SZEHgIBE=eGjSfO6=k` zXuQ5CUIPzsB=*hxg_{Cb;>-RK4ah+jEt#P@*O^MwOv?zxB)04m{IHAcH-Mi7r+q29 z366yqlq_e7kwM4ag%4%l&W9upqanUu-NDsrLNF?qTwh&@<6de<&MlWbx0)+HeWOPHdrufA^p&RSJln4<2#(OGBFOe<~4uJw&b-aR3Uc2*0?czbynbiqHQ5DM3g z!_reYd&Gv$f~@^EK4Vi3i472*Qh{VZWnubukgW1;9hx_wdNJ7DI0ZqLH z(Wo~3XzbWel$eqo%Qpf~(O4~tciMWSRx+mClKkzbu^hBp=L*T#%% zu9Y$Xb~&87&rZk^%{NJ%Zmk!tV9@c9R&Dk&^xSKMK%)F}vDx)Yy2OMv#qZTxP;OnB z(V7))m*>3C;a#M0ztO9!r}+c^3gxGs;{qAEUdM*E;N&tZ7#8PQ*L@qSJs$CN1`|`KW!VRE%rD#7H6lI@9adBe_QRA>Tj!NT? z#nykDqAV81d7$b6^$FJw6gRa=Uc;kjJu77+S#vA;3J3bYIXS$N!IUh83=G=eU^3R| zyd`5p(LkhkRRg9i9BZu~YhxcCt0Z>+D&HI--=gpmkn)qJ5&MmqbmbQ&7?~#74F+u1 z(S5ecKrw&eMno(Je|9APl12P|qu;C}vonz$Jx{T*kuAP&5HE=OS5Y5bbMpX6^bi$% zgabY%%gG7N*`@`PeIJCs#Y9cYk6Ik3M z-8IJQ$QRa(6r`IIdB_)f$P$${5GA0QxTY2-KoqKymS8jaz(Dhjlt$7_PO2ByA)ALmIVIZ~;kdLBHv~WLg1yRKZbAfn0E?d}qN>e}Td~$q#BMa#SWtc?(Kt zCd!NZKF0hyG%AN-s!YhL$!;J_;15n1y|mHeFIL{KR6au2iVei2M?b z(d3!bYTVO~GuCpX(ab8OEi2S6GSy6?73eihYdKIIrTrWRJJ4e))SEQbryJBCG&a~Z zHH1tUd@|PVq}78rHCkPTtU`>j4jF096v+>DREi*SW~$nUCJ;K4Fcb4xDs!_#e^Dvt7)JUG3=I7KD_~i-Cd8Il8QaD=sk;y zJ*()w8jHO;>AwyZf1RZFUM%+Br1v>2_PM10_E7u{M(>MU;)})LM^NHN&frg1;?Kqq zz*7<+%`;K=UsFN>&9Z`#wP3LVddr} z>()c%7L0WpxoR7WZHJ(0hn#Jfu4)TTcE4zm$?vbfBL2-@UgPG-Z z1LHH_;Z5^};b3O9BRb`DMgl5^L#_lKwE7uUD@MyD?R^~e95*Z)_p zfBi9qa%cO`AIEd$22-8?`s0VwfBo^l{`g;i{I5U$|BpYu)Xbnz-;dws#^A>bND~>s zZr)6u0udn)y|kd--L2FjwB+ICVgQV4vEQhrcBw=2cJL-VJ}29$WGeb=5vRbJeSn&@M22-&`}smFUs*bMUOSv?X!(pm-n8s2sFpx z5MDxp>=sbDQ$U)XO_uH~;CpXb-N#DZ$2)fSSFHU%O>xUjvl6tk@P9DH{}U-*{)ZHk zdG}Zc{xaq65-Gcq2}cm!4SQsH)s@^bRReovEcB#sw?gNnx{}7(MEng586eULqI$v+ z64ANZQoiH=t_VIi>ipVWbMGt)RGr;W)w8x7ew3} z)I=40vJ*587hFdha4a5tY!p1^7u;GHeAF9!v=clE7t%u;awr~h=pa!3BgB^w8rB!` zBnGX8Kw*13A^y$Kh-K)P04R4!$N_xlPA)XcJv1dH)X3aEPKGT3M4nUI6qh-buDD4>o z-9-uGl{W3o6YURo#(M_Z$6?x^GK{~UX#S+o{v~9D8=*n4q(wSmKuM)R<)=k&VZgMc zd4)=g6UufZ0!v;(MoBy~DB&8ESkRkb zC!WX%N#rMrtng1Pq)%M$P3$^M%!5y|{NLES%b>UxwZZp|J2Vj7-66Pp;|{^y-GXay z8g~f}!6is=clY4#?iNCl&XB#&d*-}VQ}f|g-I}>|_xG;V>(jD&e$QVbef}i1&Me)! zD4l{ny|6$1+TIMWuK zUfZ8Zl+GPvo0$mx(eX6%OHn44>Bmv2k7`jL1y3`CU@&uZ4f8%Sl=!3*v1efNm())Y&GqwK42J@in()N59VwN6Lz%&uU_b>X)_w zPMPZ}n`8Su2Ocwb3gSb*@G)}fd*+HRaP50;-h6JZTwcw5wqz*qsDk{mEq2|O;f#Un zf*_yJHb3DmZ&5D$!3X$K;qn}n2*t=yZY}iNmK*_@0tq?)L>CiYpdh%R;44yL+G-BQ zT0y5=VP8cdbaY|LX(|>YImI|RRb>HgWe81{FR^?Q(>Og`bP-EC9fO?{dwU^i`^UGw zpQbB5nd^Rvx+@|-`^3voOfFX(0bTq!_UX>HIEdp@mS>T8WwF~>F|AxlXh<={w&eX@ zF@Ui|1F1wVD^G7c*?g_oB&)>eCBu?1#r}*=Co9)+jn*K#z*WA~wjGGaSnB1Q>B0EP z8oA6*uQ2%KBShi3Y;U#9j-!krvfSscG*Y0PB$_E&{!=1yxoLY^tN>j~G!~mGLOo%m-39P=t{kax~!^p#*ci-Wzf5vasqta zc2!?0bB6Rts|oQ3kgIJNtNAO-M186clB$F1t7lhb2IQ+U8EdG0t9rz1KA6^|BLh~m zDmTV+xAY=U*NAq`@b)Te4h4XhdSU0$)sO8&_v3g=<5_pUIX^3F1_^6&d~1scOMbo7 z9-P$*YE)Gw*ShW2$wAfo)Yqcee@4)+-zThlOIa_|SML>E*B$k-CbS-~UI)uWiq~Gn z*wLV{51}OY%kkE8r?#(OXRMnVZ{W-RBEH|iNz}mZS97bELZ=_aU-?DauaUF^mqM^% zX)H^eC{+?AdS4RQ?;N{ba;%dlOGp?%%E^$Zig{9wVlK!vi<^(tSK#3;cQZ>FM{^_oci z;-nu<4nL}7{o17cXq?s~6RJp5V%iE`N%VT#ooxHcZChb>d%Hk;ihXHKc1yT^gX@p> zB)N`&hBmwPRwVn5<=~F^-Hs@m_O7aq-gWGu4*U_Orp~IOdWA0$6Yc)`O=%q+VI9Pk z5Wg-)zqEdPlJbtuMX1gdqVBrNt}T>+!HzE8&~7J+?hA#=1N$!oOdWOhT`lD?Pkudt zDV_R-J!W%Vi+;L~F+I>iy$R*r5Bl9dcY8i$6Z1>h z?6Z*U)86efGVM!^=_5Air;UyLz25Q_rJoC`JC~E3zO#2;zlF=c5A|n1G}Zu*(7^3^ zCzby|C+q+|U$)nJCj!%dVP(s|u=1?;zp%1KAN(XPnu8d>&>#c2_s*-^q#EmAUU|VY zo(`x&3{bmpW2GH>^~w}EL(W8lhMoSV{KF*l!zSXAkiWt54ZN4r$grw^;NM``V{#<9 zekeC}BpW|75w%j_{Yde_EaP!v_iwH^WB_;c9KV7yoen2Zbf+1TS*jhnoo zkXo%#?@!D;i9^|mZCtLZfd|uYN)=$>V!!K$Rk} zOmT7%6|ni_Xt>+&O-wHEb3ll>C+jE9Pg-RN&-nWd&hia2?2%FEZ#Y}klRFnf?5$%- znPUs*I3&l4WC)WkIh>b2Ij=7`Dd}cfVsXD*XintJ4((22UyK;JPQSwC1;xo_VxQk5 zoSR`o&p$i(VsS$bjHPc7f`EuWzCn!P`=DIN5kpl0I6*LBL2%;a<2sfTWQKJ&3e!I} zaOQIyU-9x6JTHRWail(vhX;?%i&?AsSv&T5F%5+C98NY`VEB!qFiapX+MH_NA{q0X z;oJl!x7u0tTxrgzmEja}I45fOB=zJFC7O*52qwY>kv|mCRtczEr-+(}$SVeol!)-w z1kS|;cUP!G@Nyu!1}CdUJx5yur!Gjsan#;_X&`4g-&)-XZScV#SM}2K4_^*i{TE-p z!HpE|k?QQ%CH5cq%Pw0wE-b|^HFu2`NBIA-%Ow+vhPcYPxcQgffB3T4n%f_~j8}Ep z${!GI0=fL-myf*WtPB^vjs$q81wz#Y))8-x63yqaEEf;|@yo?Z9larM4mb39upr zDjFY$fHEzXOc#LS;ftm#-Q5A930eC_3r>M+#zt4}euM~Xv4r*%F za7Q+9N1oJcC>A&&jHF?7$n<%HhWDV=;GlYHmCFcssAgQn2$=GhV}3^pfM|6uI$ROy zZB06D9m*(A$T@);GxlLj{r+v4H1+atuaAwI< zlA%4h=VJ`vlQ+|+k-Mi>YDoO%NX5c?g4jU-69k!AC^#KJs0&gu06x~^uzH#(m=(tW za%SXoVjcYY%cB&`gURd_nVeH;^kZXXTxuZV3^i0b9l^pC*%&F#L^n>)D`=j@=j^^T z+x-KY^+*Wzox1C$Nssez{szrKub?^c$~fRUoZ|eN6yRq9a56DYQ@cj;zZgim=7%!A zlQKqSJEM;nMvFLq=Lm$BHi3^YL56GwBlw#5JhF^~RX&9F0F0sjA!H5WV#qde_yt_szjsmVU~ zVm|P?TE}{wr^NZ#d^irb@`9Tii-jLIOkJ;eWzAwfudG?G_8Ifn6kz`TMeWLv-oAY1N$-IAQ3Of#+6hB?BvN?~muxjtl7IK~6nhk*l6+rFUtbpj%FId@liz&$eIIIiBPxFTikgXphX{Mjh@Br` zZ*Tu?!Wnu**CIJtYCiy=#CF6&;Lu1xnX0?}A<)DEsKBJ%SAWc6H280SJoeTsD3Ru0 zUFLLh8A^Yjw^j-%Fw%PTqgEC~!8|e$)Scmi$Rsk<7g$2I@?Ks{6jf@%IU8|YOnqW^ z%p~!dYyhhXInZ^eS6w4enLVu(Ybu3vwL6?h`)V{2{V)QQ#RW)5fxU+grv!!=y<*>= zzX&o-())aU05*zzMW(@T7*A@%`f4qZu&?qU)l9vY*7GGw`O-?R?sl&O=sgik1oVng zb$FCRa;j6KTn0#NH2B=T3sXG^JYaknJGIbJ7S*U0uW@-mIgI|U} zpX1%nlU2a$Rp~5LBnSBAqyV&QgmCNx(PR|=FvB3wAXF%@2){Rmt(X3!JCq(@E)r4vmQmVGc?=uJHcTLo3FIp2m#4)h&9#JmidK)tR256zA- zh%Y^5yr2@gb-bV&dgbhG|GUh-0zzeWDh4x?j z8ewQGc$7X=`Un|ow*eqsjsd`u21Ck2V6EODh9ya4HVmwl!g8sKLxJC`N@BpNNnxNg zT}lHE@NLnBdJH%x*-`Awin(c_-N+H16lc4TZOeDRf*r(0Vc)3}$l=ic25~L5RyIxy z64}~tyb|b4u0mx$mXp||*`3DuU}b!y@DNq}(_lFT{IM{RbF+6^_O$_3dJZjzPmNNh zzizYyDA#awe#CNnk(*LcYE6-%NbpcvBFz`-3OT!ABS6q!@iX|Hchis)f+s`K?B|Q< z0xoHFs!i4HCayw7sTOL# z=d;NQ>@34GrhxI-(Qqz2$O}#o57k*;WU&89p)w}zrfKmAz~q%cBb(6_X+b;j+b5xl z%q)c=%rj8t2`!VU>;#$sKAQxzwx&kO>)qbo@lTWo! z03<3oXu#4@k^{fx+X>%fGIG)_k`lO#6lPLwYm>6arLuD#Aqzn zQOb6E!er$wkS2flSqA@PphWbWwO*w(wfHNF?B!4w82ec;aB#) z8YmX?hTsD7OOnVXQN-rr(;ETrb|TsA^gt_-<7jL1S@{)*+)ZQ2I!<4+S074kUB-k5 zC|D`4>pwzALQm2X!oCOe0}h!Z+ippU-7vo!oJiv(&1+%-%3@^Cic`m3a2r{Ixojj> z=as_8v2xJjrU3R*%47aBR=ZVYgh-MD4>fF`a$>esj+Vs$8*G%{B{9V*+UH}0QcKt@ z)f7$J*xL|v40`-7Id#aH_54$pG9D|gk>`@BTr`S|jL#bL{ zOSRLGBwkLa%Zne7HTyVS+W$#6RnH3r#A;SUOIL)>20F(0OBrc9BK$R#E;Tj zS2?d-t%vjvabcUMxaS-S6}k?T@#-dMuo*4AXwp}q z6rBb=OW%4?hFv1K|K*S2UBOa+`(rw3b`Z7DE(22Lkox=E7&NSXNUagy(4Q5dul|_y z+sX)0X??6rqZx%g%cztHhnC|{bJ{=tIO2UOcg_Ljr?7ENQWfJ@fBfIN%(^_-Mh&Tp zfBf<4)XyP~g3rX(>zRLdnIAi?MKTDc0{(QF|M=sqx9(d@Ihb8G(nPDXfBZ3xux%HY zo>p|TdntDui@ev`t3T%c$m>Y2nDE+VmiDMT)VI@o?K0O!JX-1g@yBaREy_$uuCHC@ zZ)?kbxsSDf`D3EkcAnQRbC-h^!rPUp*DiC3@FiF)^G}z#xrxQv!uhq!4DZ!iv*GBP zvA%IE-QqTu>*NV(S>K!weCjw9cJ_tg+j<=K>V6E^@Vj2${tf?Z{)5CN1aD&}$M9Pp zPPa?M7tbBENbf-!qxCSAjXk^(J_WKo*Lbgu{fy7gBT^#olLZA2Xk>iGH9vQy)NUNI zMe?`Qkho@6!vIr`E}$#$F{L4@-1Uxv%|B@Z%ZNG z>-^5}`oneWHd?i3FCOV-h%@URT90=GQ{Hx%wg17VEAKsZqq~glmP5ZPpGmL4t(+c~ z6JgO8_ZWysb17ZG*+AUOLW9v`?M(Bz43po=vdCIv2KRwu&yTKi(xukpfSX9PpW%ZN zQVzY?X0bO2VzB*bgLr`tUTD9<@Qry!Yc0M}sv~5*7`<#K@I5kxgy(zH{xB>Ira))M zdc7b1*opk`b^8N7d|WZ?X-+DobOYSC86n8;Nd8-MFxuM~unydBeo+{X;G~ma2uv@+ z20zq0M8UT~Ntw{N{h}Yt!jf!Y5yE;giusWg5p|!VbZ5&qyfJ^pAVM@)e#7+Pp>}>p zNyR5X61%BjSH~b64SkFOKiP}p!}h0Qi_@%zCcS2wTgBg`qOE=JBX^fbB9aIJL#yCN zA?rY5s5=V)Z=nf-!X&&!2>kosZZy*qgY}+~UicBeBhq5LcA0bdIA8&&&q(6331PYe zwC)2!4tyNN;e7Z};x|D82f2bEYQBX5NmN#j4KW;DWNwEtZ4MA9b?_^UB(^SS)dnQ! zKgj0ZC-(sIj2Ub~9#Wx}3a%Q|AR1DCH`F69Rc|+>$tBQ`GNk*n(e2Y~mwBizR0{D= zmw8C|?=CZOqoKoFGtjWbLW9Y>VJr7xHqK#Kzae0jblCZzUe)j`#Lyt_v=8HTBCc~- z7#71ELA)PchmrA97;$YJ*70lY{6noNUZpjWBJvOzb?hzbr3NYkY6u48-_E)<#h)5= z9QdEkI!F*I|6k6!w|7ZT<`<)kCnzbQI?pQ=EoQtwsaHm7Rc7o&CfEcuK|;1mRd%8m z6`6kwe1a+=FtU9vo0!9pRQx$_0kMODBO51MQtj@ zKE;lySk5p0)WJHLV4KXLcjJ&@VkO17RHc4=Rj49?tkgs#K+xP|-5dEChw^E6uG!R& zp2*n%e41`M48n%@Ch1$ zdbWp|!afjjUsw4~eCBm`W_B!TU8C~V;B-}rN@SHvw96a9H_FBw({~0+A>IWK517bU zSSVOCYl>LU%+2RHGfO6_2=_`$E~y;IL7bF>5DVo6YA}!Qr>03&{&`|Sd2;nJd|}F_ zACsRE990)o)u5th7l3&03yV<<X606xukdYUnQn)jf&Zozq+ zscJkNj=6=Btlb$xB?#D*v6O^{%tD>^b(Xorl(4K~8cs=_<`CqCsv+L_alkggO+bFc zfc&m)z$-b&yE12DEN6w94A5Ez7^Rz|AZdavNBx-PXrZoQuf{%9%2C5ScYqEnGz$h) zmJHHAsF95njDJI_NWy1mVrKZsKPOJoB*DGVCbqClsOh)CfU`Cl!;vq)*bM+w7L6B@ zoE4H4eG)vhCcrh_-7=5rfj>dwL(AOH?MMJgafX?A2ft6g9H4?4W8iDmirOhtgr4rsP9K{_Ho$X&j zdxr*M{hN8%TOFKR`{5-=i_M3>HV!Lr?Hx&56BK1pH|9(^die!0ie|vYx7{Jp8jV}KC zmo^;FPPmzg4UtK?qlrVnj#bQ#UG7dp`%b6Sj!yLss@5_(dM^f~8BH35{h8^_6En`V zB(9Y+4HPg zms(k&%h?=_Ico7c7zw$;GdYurxGh<{FO_zOaC^WDd0mlvH(NS&o4W)`dO}#W{Y%Y# zl-IwQw@E}Awh9_A^QFEIAQ2G>F79hc`^3X#un%}81K01xwAgqx#py^Ieh8zcsYA`If8z*jc!_f)HS2E zwHvq+$8#0ReY9u9cX-5qcJ(eh(8)CYYTNSa)8*Cjud9`ztBX9VgDv56)`OeC)k|9Y z$6@6Mbgd^IzUOBC7bmM@+UvVg$M39sKa@=%p1i-0>;W^*aljiVT9+Wfn|8PBDf^py zy&Jng7b}u$_s{DnBRBG)Rj9`|sBDwy2(HbJ9YDIM7VtLe!O%_kL0G{`uWK+6OmvM>iL$ zd+WG+0X9?S9yceHd(PuK5odOhd^e4sZoC)|64upZc<%Tb?xyzcu*Ub)-`?|NoCwvr z%h%c}@pj0HVy>OvDLLOM7~d(9d8pytOD<=r)A#e9QU+&+CDp;9(fl`pJ#O*{#t+s; z2+~Oa>msbNe{i>;aaRx(Tnd2GB?FV$c<8*%;!Y*$IvKHMd$P&*G`+SKb|&yn9ic54 z2{Vz643mv2mJO|=2znzM!X*oM_RxmVA(~+T%)M+}WXv>=vn!DRNWH!Kneo2Gk00Kn ztF}U+BZhOD1f@TC1>qqEJClZpK7q>ew7ADAI~N4%d%Tg20q6OkyuWwBq&xqz^k;7E+;V7wE{9`Dti?(7YbK2eU-!|SD1tq)+*_hzF<{#RLU{?BFO zmjmY~39=yQSTN1bVkmvg7ugu5M$9V=z%}0KgeZXw!>d_S0>&v}9;!yD1}ydX93tf4 z>53J7O#P)ody0SvXoUt&Y6casVgYdf_+yGeFc#e(e_SLPg3tTvk8i0)|J`LyAk=7Z z@WF%?4=E%@2iuBM!qKyPnW>!sttLORMq-uVf1#gGkxAj8(M{Qzif}M%)*THoK>@QO za_B&wBTRy0U`j6x<{zrZ(rlKs491^ohRUFdpiSO5P9n2h^SOQ){PD${Sth>A?=8< zCXm1oCue8pHc*~}t$fF>$t{#07~nI0a32Gj?kV;|=@U=W)Uh2((}o>#RkLN!ecE<~ z64OckfF1pY2+fBW3!8FQ98N5P2y0>2I9Tb80YE}mb|H|d{h2bBxe0$?T4#`Jgb@NO zObIOsr4Evehbo^c9aEL1_(kc2$)dR`^K`j(kc=YHa*4=ly0{PDb<#_C`AG@&3w@#@f z9aP0aC98o8$dch$?lwhBaL8CG*`DnT0H}E}1aXbn`dK9Q!kt8PcHz2N0`@{RwInEF zg5LN7Judpx{18TMMd?w19K~fgEpt6^(Wgw(G@d~0W4qa4RpX)_3SN^#JSL1dTMlv% zKD#N9&Jg`SGSXteoORD1j;*k9evbO9Jg4>rP)nF8_^45;P!Mt9=iWpNVcBD+Wq8!NXU_Ea7BnIK?!2bWj5%qTuB!7+mVuW+LDB2&tM3MKVpZnA z(s+K(K{u!aPQs3L0;hPs`~;3T&`w!9{E^-1{9JE9ihtLm2Vo^8y<(&OU5~C$?1b{} zQ0;=+=xCT=Wu4+0#bB?jj>1rLs4tb_ebcfXj1u3NPv^yMC|MjkhBD1h*ZiN|XapD+ zKJgiv?&lrAx2m`&ZDTOA>@x;#0M-puuieG?yrWIwC6c63 z^pY-~);)A1-;=3V?$~)hmw@mqtVa@w`CrXw+5c!pgFye$jJ_H50pxKO^NGja$JahC zV>n+#GOBk*z_I`&VZ`R%w+QyAsraJ9YQm7w_kkar%`tPx;R)W0-@a3o>!Zq$f^P-B ztU6OXqXa?lS2|D|ZfuAgc3}jcDGB<45p1v+X!fK1L}zu8+q;Dra2b*)XzXBg*gel^ zo52$b*C^#!MeKYqI}IcEkO{Dn{Q@cyJ!B4Zt*Cl&oPW3{T#8kfrPb!#;*i{`I zsEE^whWV^+Vt4DQNR~5)`H$2>oG+-z`R_)=^b!-Ch^Z;8ZDd7uA?!(362(+h-&>^Q z)x%RQsHvI8@)aeLQnC(qXha$0lfBL9|t$4x=xnpUcH2fzHg zks<*N04nIh2c@IR1wrHX2Eo6UqcIR^0p=1x(D*xmEvADpLjG}_v}C@`jZ)WcBxSDX zd#W-{#j_%UEPZs1^hP0TMW?Yu=EkpY8>`B4VvzvIjni*&3W5aCsDhD9+@cS;j+Ip_ z%+vnmzbh+{*UXA!`pXdzc@P9cw9^YO0K^Uoxq-&_ z)&_8>&ZbHr=CR9JE7373g1f(_p%<3rT*+xg+N-rmOW;Sf}ZI&69^MhlN^K zjqzP5UPGc(qycLbGHQmXF17&b7`2+B=j~V1=!4K+7mQMC#YL1>2M9Cyz!WSEHZFPmE?pjfx$ z4HWhuT;*fjjOq%-`vE+U6>7PRHuVa?%ki4#rvQ#vhP_W*gCI0wbSF2WwbcmsC~{*; z*K{H?nvltK3XiqhlAP^dPrOqkA~y&K#6i%%wMUT9dqW83O+q>u zr+~EJu#H%lcF zD`gknI?YzZL;W~|g(GLCfC$}aLMNt0I?wpv&M)P>Z%|F%$$PA*xl2xM9(n3(kC zl58gqV*AEFui1{}Hg}Q7jbhs$bCghi^0Njbi(uw=Xj-+?rL`u%#VizkqaQj+5XkL* zs>G?Ho?`FQDzKQRW^1fE+~M-W2=z`2l9RSM8=SKasZf_auot^QfSf@0wPM6ie znXKzJWst1_kAsGafAg9w!FPK7DlzXjF+ltq3!2@m8_~O;Lvq@_o0;9W<1m{WNnWE1 zRU&thCckd%y@kw}N^em)H{M==B-SQf zc;G{9%kzVpv2_LMi0$@`;nq1f=)y28a*=eLB2W8p>$lYQ9GnSP+C+~{X7MF4wCA>D zn9g93v7|*-AA~%%-&-%abp(A7_Odl!ylLAUj9hV}{X|2)hExDLA;@?J!K+eWkd2(rjSJR)mG%4uE&{T_lnT_k}^&Vma`|2nG!xLJbVBDnS0 zk@TK&4WC*`omv$l0jZ*i>!2;!po!1s`u*(9v;Y)y5ui3~{|HuuhwqJGD4g2eDHe|{ ziQ4T=DmVg&^)o9X`%WTbfl!vRG1DVa&B)Gu^3Ib?B~Qp9g~%P;pzmGl-%H3aB}Q?r z3df80wt_Rx0Qu9Xd*nPN+vkBoamh4&bV^T^?j z)@g0unYPqfIl&43SPzv>os!O$vCP#;-Id2$qu|J%qs&y@x?70Ooi^OV>KMb6&a1N2 zi+0YF^w7IV(PwMlC-B&`vdksI`n@cjA4h~A>5>1iwcbKmfTvpE6>VSxy#H012_aQb zskARTz1Kro@Hkxvqh+wVNvQIC2<=HDs60#p_?l);F|eVtrH@btMzRinfOwwlN73U6 zm+yy{n-$PUWtC_7(?{7Q#&pv=j-S{zyh7xYn6>ig=<>Mva)k#QHR#iL&+>TaQ{%nz zge=SC((**Y3S7!lR{@4p@zZ22%rvu;MCsEsEt@2#iZFTGwC30hTAOsOl}tjLj0lF5 zN?VNJ3Y)wN&vskO5{B$EncO8H=&&O1iXs20A|Jv~0AE>v&RB@cm~WL*NLyLN%J_+= z@{J-J5o`6WknuiW$9Uga%E+6WmR`& z<@?I&X~vqR%9<_4&qtM?uNZ5eDr+H(b?{Yn=uGvvRrRDy4YXB|23DpoJXK#rm>Q+4 z8kL!vw5pnnn3}Dsnw^+hJgZs)nOY;NTH~48(yQ9?nA%IL+CMXOG*@+WGj$GEbx!|( z-5*2#FYw3z2fNHY|JyDz>PQ{x%v-eOI<)P#=*M;F*KaYt)nWX83q+^~Vz6W4)nk&e zW6{-Pv9V+G)?&%YlRgd?99Y3-jKY^Vfqn;q2ov^H) zu$G;urJksVop_|4c!r&1xt?U3o%Fb#^qQUQTRqutc5;LUatsa%yaoy~4obQPN;VEE z-UcdB4r-YOY84I|?FJfS4qEGm@&BjU=zrLDMdLqg`_stGLR?;1P-f*YV|5ph0|A~YC!?yon+trOrcIP#%N0sNFJO5$Z z|74^8$wvQ^jsE{rHu@j7{SVvzhi(7Ew*O(<|FG?U*!Dkc`yaOb58M8SZU5iQwk?G$ zHGtNfKszd+?DQcj8o7g&^CwpQio9QqH{;2X_05u^hw&;wL!a{^?wctxaGU?UP-a0jRx(ZW1IyJiT7dfdH z8LRQ=jS3jNa5|_{zBCR-a#toWZ#+g~Ux=LN!&Pzo?NK~%d-{e( z^h%42IBIM1^Ynk1a+e3=+`DkhYqQ;lf0=Uj$DQeW49q*>+DFR#3&rgVhgwpmTI@f~ zY^iSyN{codCf`0k|7SD%e{IWmOhoG+1h4h_roU**2a`H0+p5u|zVw@m94QXW3*nk~QT|B=Yj9T$VUesjNmz#S*1lk#IsyJGoNi zs=!pfrhPynE-(U$;fQ=0Y((Y@_%2Sd3b4Y9r@&59{1|0JRjEW@Br%9djh>8;SuX({ z>aZCCAn4yI2D4)M0!z~NHOJCejGYi0=&Yu5g}or%a^LT5UfH(Fn*hB>yQLBh81G*% zjizB-lb{@qQkUg++vPheZ+L3LXiu0ODQ{@%=rDRQkrl%y6Qo31)Ofp#Paa3r>s=pO z2wge7?+%3{ubhm2`97gqwnUN{2V6WLZfBIny+xDdo?CzFKIc8fw}UR`j=pE1K)~`t zrAGMa#uN^I$9Dp5lr8M*{Bf|a$}nZbm{0>Cq!){z&GD8HOVnaU1R!dKVHP6-fSAL$ zn9-DAjN;6YXvXT+kUBi`FxTNwEL9UIctVrjU<5?Ta%pJfw>tpXHA%K0^p=D9rk8eD zPQ~eyukQ=dWG1f3dBp4ndhj<@NBIthDIpw`d}zK@MbM1N8WgyccBT|~lx6@40Bdhh z5Lk<^Je5H!r$3d85$alzoo(@Cps=$FQ<|9-+%OH$BUWDkSY5m+CPEu8dWY}hGPeMZ zg$)YnGOG>>Q9VyJfqrTjwPneR`;^5l|(-W&pNsz^6U{P7#0_jc3Os6kTk7Q5A%PMjmQxoYi8K7OCW8nUSRV zq!6mtU9Ah)G5I?C1$oJ*PzVMB9$1gTeBlfd!y)7flCZ7T2q$<`xtqFf@~&4f%NSSV zYf-a3ZZ&xDtc}9n>sJCr>p_wIaUsThOl>d}HtIMRW{fQRW6+SmwQucG$2E&ND`#hK z8~hbHzgQNPL&Px83QIV0?1>m4LBpo6odtbIymX?d5PkxtE|}s^@S9q*I(_xpya|_l zupg=pjdzoWZJlBmM@F_449@mf4o!^#^M~ccAPTH)7O_&EUrF02x0P1o%%oA+X0E%~KZwRBeR4Uz51&Zo+7ui9!=E%3sca>BE>e zdbJ9ptI#_kjjQq202_UPZvjc@a{)pKrud8}080ld2<^=%P(lYYNo!*!wBIcE{HJvy zw^XrGqhHFmNttH)JvkML>^<>l&&DunN81^`nykCF>g3(!I=$&Y7RB{9g z9jLKNTDIdFOcA+BJmh?wBpY#8J#`E6W@xb*m$-?roxLTAac)X?DUhL#9VtYpZGzn+ zIitrwiRcGJyG%umUD^k+I2s%_8EPSp;c-R*YiyH9zJV+)%?G_oECZYP1`3c|odP2^ zBxeYnB3xjBi|l#?y3srj=aC$p35h7UhBAo>p?t@}^xVkaKbUa@ORqkUuNs29;QJf& zH9Dvc0sD4Wp6(3}XNj(gCcIb?{8$puMKzc&vk)V2v{3MTtQng=7!J)O7%ROO7QBQG zkOjzL0qP>OQvtZ@E0Qqp03qbFi8*kaJCNoj!fX;&$|xdo5`87?Tf{zsa3`$^cVqHuH=E7#yR0ZPQ6+j8; z!9?&o3lRRPmW(uP@+8%zj&ar6yz+8;h?|N>?GKJ+C+#|lK5YRhO~p_ax7OjXIjLNv zse9VuEKq+b4`%-q*!!!{hsP_kj_mE4&*?pt>(?Jxu+~lCO$yNh=zX=_)c_mQsi#V^ z(!6VbV$4M@QeZ@R-}%(f?iGl^wjc{%;~M1W#x-tsj}gM1H?@&NEJx_x-x16qzPlO2 z1_8Hmi->$A=PV<_dAjDo25dwa1O=iz@8NxNEYc|2MqsTPGNXwP4Fx`q1L9ZHOe4%# zG+@UKuVz#GHuP8%zE^4Se6g5S+-EBz$e8oECtN1B?wR^Htz7RGz3y+_lb$(4GI^h` zjcX&$Rx^*UW1Vx6f^awId# z{^%iT$n(wx`q<`NrF~KB{g?V&EX$s!)vvE?dq~*n{aZ$S}pjn@9dwp&{rX&6REaj4SU(vYn7uyaOaWDGv z^H560cm9=am-2Qg3ti7n7m9dP=6^la9{G!HQ)&h*qkVg2+fLG-GhW%Y%#ZOA5i)S? z=B0C_--a=ZN89q|mDh-%&S{=k_qWaK5BXbLP@>-bcw0BaPCs^Wdc22uyT_uu{10eE zea7t(@6ty6kGOlj=NaeS=OYB1NaZunBtW(v%4B{W!{z%fwQM~;8T~r96!lxn7IA>K2_U~7dpJ828fwky`f9Qg9??p@%TMq3-YV1XU?Lr>>la0oZ@4$fVd(B3pQ}&2OC{}AEJIyA zbf;4W284|lp}p#M9Y`!#H+969deppA=B7MY7!bu+02j!WrbIXzk}7*XFid{~n^+Ez zcOA7)hLWX+RS+7DdLt)Z0xG31h(CfGJc!y%fhI9}o2QSuJAj9EShRxYD>{PUoY zJ2iL3!+3p|K;0zU7wU<|RPK6rzQ%V7PzHUisS{rWyV_neH=w?jV(!j^iEiTd_J@hy zH(p3!^*EGcIB+pw zqbPwh2dwb>uMGWdYA!tVm zLU<8KPMt+wlthkeK=r6tK?>TiDML{x0m1>=is(?kR2|unwaDiIbn=cH)xo6y=CpT^u<_Efc`RjrxxpqwG7WSLrtnk za!E`b-`|`z7S=C33AIbGr`t5ZhEqhuA=Db{ob>k4>v)^f`)ml?xh5uSgBBZw0OL|_@ zenAHO(9`X=*UgZk0z1}c3fIxP(65EPO-x&Zi>V`@rH{X(Ph^}$U4NUZ&XBIB8H!jB zz_0&A(pjvz7Fne|;Go~3vEFOG)^wTOn%2|SB;47>(NUrw>bw4KU;p^4J}>b`_hDnt zl>T7&YJZ93Ft>p((uPTtfm@b=jK;>uqTtBp=W)ZYDnlDxiv}hrhEn?m5LA-QnW3hy zkCPLcpvA8Gd8y6#Aj3iP%}V!8P~0X_mmvXhO9y`e137RmZ%sqofL+|sV& z%z?+3y-lKH%`GoOgCjJ-lW>F6TqC@%M!o$;hL0PU+=ExbRo7A)=a<~~IL4e5#trJm zXuihOcH58Kl&vwwXW7PcQpPXB+h>=XH;2Z;6UM}Dlh8aSMKC)6+`1o@9Wb6d2wH8h zS|;{2Mu^QjC|ZieBs)k?$-hcO;Y$U8M#h+sO|)rYtSzHAA_5p9VmMkxc*@4u!@~H} zhJ@YRMACf35Cf8UMS{=5q=5$H$_Ah}d)+K%DuR1hR;K8IdDMB3X_`_AGOInK5VLP? zdpLP!3Mpob>t?GRW|6=4j%xM*sQY#-`>G`703mZ#Lvv!qeTcm|cbqxp#a?FhKJ!vE ze<`Q1(Ujn@dBx8D@uT??ip43j1(Uxy3-N)dl|Gx$ft=sLWUK|dfyLWu3+bmG5NnSd z?WV%8MURJtijkrk#6t3`#ofLI7wh4vyk)=e;SYPurr5*b0LvfQmJOYUgf)jR6PC3X zhiaRL7_^6)T2aP<4W>K;CbU*-XqJ`{qUL$>Hi3o~M`qSWRw`2xw()#+-Bt;+N8rPw zsUJtV#MV&FR!r!}PPDyl-QDj!Ej{3StZ4V#Bdm2kS))O$tRLNulQyhbrjH-akE2je zzH}as6P<(zolLRVj4Pb@I@p~1p4dW;eU+QTpCn__JHf0naaJtx(pyobC-QwK-S;+b z=(g7+w%ts&*!rjX4yXOTw#Xv3-;_@Cs%?j3PSq!EQ{ipjb)SAjZ^(1%&egIhgtuEH zx69%=yH+^!F|zaXw+oFu`$QU7D)J>?OQ;GLRCC2voo-UuJz2pj@>xWwR>ZcUS@nyR zZd0jEBQ1SPymcKsV=KCSS^9aK)%ntE=JV4z_r-bn#<}OTy*K21nq;t_R&r2zYJk+i zL+j$x#lXn)(J-mt80}7Pw>^IG1=7&P>6Z(JpAL|Qb%!)kM>BNC8_SF7>5Gh9hsF5r zuT~N(5U%A2kyRdv^*qH6qsw+D$IUIr-t^-Ih~qfRW#xe54yn_?aR0v6)j@;QfzN$J{3=XK7+H6-_%^UV2b&G`q(4Kun+2LH_l#Q6pNs)qH3LHTB+%DLRg1-{k^ zA^!$hr4>Hm0>OF@F<}dpR|ME1hP5p6eaYn~j;o-N>mH{olK*XoQDnUp*^?K|kc%5y|c@Vr@Ml2#NVeHY35j@$R{!uC#h zrtSr;t$2Z@V8OQNh#hwMox#F8bDaAR)b|wJ_mooiR9g4c=Jzzi@BRedOXE55x64Zz z9;nnG@n*bdD!&(Px&Qm;J@e3e9=Cfa_XAzqrQh(bzWqbFz?MOzmx1AbI}|UlaKG`$ z1A6+5>9N;H?t?kHcYpVT1;ZlHf|!4t~+)P(vKd>9&dN}-D!W~lzDs7+IoMzdk4RIeE;>)G2LhGPMPd74H3Fe~KaQU8;p;0f3NgR{xghpV5_$9*v) zH?bm55h4TrJ|BF3exN1wMmC_;(Rr(C6dH?4LduGr!|M-5UZJ)#yRA*SxBoSG{_DqwReF-8)lc-OVXfX%?*zbaZ-}UaAxhvgSwES!| zpZ|-3M|PpUYy6o09PIJmRQFvV7z(CS(}s^`Jag_mb$3o@3Bhg$)6iU*Z#0ZTb^cV@ z|7pbYTTt}3i5gU`Q8>f~R7(a!b^g+m`xh#MtI$7kn)qh?3f6+bXbM4CQDB(OSdmYx zQxtZaav-^JU}Df{HR)6DT!v^-u@f-hi>EB6U zD{j8Qe;G^sIxA@z{ZAWSQ2T#u8wvgYoQ>A82mN_D2 zg^$m{2!V@6XejX862VW18qwnz*oYZjCp=3wI&c!kYd1U`gR%s%snw!XpyoaPe@X5W zZwF)z@R^{H4;)sZEZ!{IVd}s5k0!H4R$3>2@yD65G02U{^YY5I;!7ufPU5{k0ZOG8 zB2GHJb-OyYKGUcSXbiGhqvWeZeTGJ-;-TcLMnx29rEwy6Y)bxWdno8?X83_4^KzUk z$QBoc_N9dEKs8>vWR5qN&-m*8LcROH-l1Pl>bRNweyXzD#Cp-6*fcHGDAK4FcRu~` zDk})3a3w8LMnXzdQgZ?y$f(f~r6(gJ2_?-_VD}5JyAV0CBt^T+uF@-QXC><5?ehuE z#=`9bI<{r!ZWOlkdDHJdCn{3-+NdbdtKx%;!wI0i;Fo}+3%(_OiHv61{Xw!k``V!_ zVaRD>xJ$`mgbb&`;x}1tg~1>hcLhBl3snhaHD)6 zIf;Gv_%6+^7BP}-`LrLCk{JPL(fbyCN zbw3Wej3+*|aw6_H-!YXuA3ElEv`~v5Qj8EbI+jpyyFxeta@)kLuuA5&5m##*pZ^?X(2Dn5zrGevLSv%t%-CJWC zq3h|sB$mMw#W;}1Gg*30)3jzv^#MLM2XwYAnS5=MC84(wlS_W(=6l|F{`KD!%|!A% zHCl2g_G%cuTS~TLki8JPsSNaAj0%9t--o2;?ycPnP1dnS=W+olynw1ebm_zBJS@Pp zDj3+{x9Fwc0c7jZe!Q;#`WdWO-klp;BfMaSpTVkuMISfhPV6D~mG$obos|(-m&-GF z^}j};3!nes*~gw`hf~iA;w)*1M5_Q$WUtK$XI?>Al@y|D-jP;9%i!szBOU zx){h9v38Rw@TkBtAOc>1n|F73QH74idn}Uuj~;|vKXH8xKI6OirKF zW<<|YC2qw3Uj}l{l7+!`QPeDCk&Oz&n0P^SFTo-I`yr*uYqAWXVOBqvlqb4_WbCys z5#S^!9<~e$h*wq`=@ypZZ`bXQp}7ibR$0omBPew&aHderbi2!wi)KqS{cI1l!44wN zi<tpn2{;QGHHP8}wV+`4m-m(?+laU5K?*&1qgG?tLk@nTq-wcE+@A zfinIy7PZ$-3pq~7NRScR(oWS!Yo zIW7IM@T$i6;S{U15QG#okCA+nx>yK>fQ?)Q@iXb8v2VxmR4g&|Dnf|sW{KO{gy`L= zRgj1p05riM5bg&V!$2~8B%(e5o$L@bsp{33pU~$Y$j-JRp=*=#@0y7%tkCtFFs_+Pj>fXX9 zM-G|ORx?TZ;2S#rJSvG56b1g0EQquhh_KIdgA%Dkp$Yc|uNadU78r~JRjC>mm}h=xz1m|(a3JC zBCAVy%l-Z;d!^@*tRaM{#u7hfc}V!Nkwl9p)lzML27JPXA2rTP=s4)k9Oe&#V95`% zC06PkvcFzav+B9yz$0fHXz{#LUjMTV6NP>?MeFlFw%@tj6QTPPr-Jnt%K}9B1VxWm z`5yx$VG@}W`1u~;8xpoy+Svk>TB?y)50*5BK7)>2qfs|1TUwN>ZET*6k=BIPs>+>9 zRQm_xfz}2hm4==WiXG}=SGWu%{ zYl*`qK@HZ=U zsj1!o5@Pg8B=yzEQi(P@sDWhBu!yic2p>l`Q~@h!uFT8=@L;8PspH9W%nN~aU#tR5 zANuj5j$dMwubl-7KZBFcfeYh3G*wf8L?rP*!REy`W^aX991oAsT)K(g+g`JH0}pNj z&NsquYTI30U9c23Hc8sreYiagf11+Sj%Oq=?4gD7KF@0yo2xf+G0KEx;KES=@oQdbi{V@uG87hgHhUa z8`R*FL~3)$h5kHf$^9;PRssd4`ilaPW)9O=-g0pQI?#{^Zin;WU17xp)nC+NQssjXz#_ zZel|^$k0E*kP|;pQ?I1^3 ztit1{>s_<{m70BR*$Q(kSnPS@M+}AIE6j|>{_WiMOnS4E1pY@pxJ#UWK)o$8Cxe5X zkAt!k>$UrAX?CDV10fHCYeF$EV=$2{mMi;!t~ZTgCd!N!04EeLZ2h*H_ z#BG=I8y&sY@B?oSbu^Umtk94w4-2~W?IF9>Yewcj(LB43TcSXty3V<`$iF@W-zCxl zQa8D_cUb7d4om4hpDFfHOx&^Q3(4tUc|vQrKF??rlNs#GX3{cgtqkhqFJbsmCCH*N55pC$}(0U15w{F01#OWv%ev$IOO%x&+ehOKeEyDK{v-cT(TN_K)d)%up}IkwfF$X0Y6DUR{D+-SM_MBk{b|kE2W1xg)w-rN+4>o1?kyJXEXt3(``L z9AS@AS~v4puUJ~w5l1g(4O4jL|4lZUxn@(dX2_g#*sf;SjdR4irpu3WG@@oSo^veS zB@J?sm|Zho$2rkfGohwA)LSz-%{jGPGccVwbyPEb=`#JfW(LkVi&i^}%QZ(*J4eGc z&s;mt&9xw0yCB82s8qYC#kFKmyJXI_Y*)MN#XYpxb`NYo}*~FT_&z8}|R>03*-o#$d&(Yq* z@s*!*q=|EepKGOwYlolvxQY9UpXX;2&p&=%^k!Z>0Y1{^6h2x3ewJo_9svQ7W&vpd zLFHyaZ2=*}W}!C%!uHL=?gAn{%_5%!L?fF;69islG`}bi5G!vMs}~S&Zx;V5ATiP` zF(V+k(k!_nAa&d`tEFVths!qKqeHE zTCJsGu2?07-E6$2a-m$OSS?SjwQ8x_sM%?2ytR6z-eMq{TD`4it=VCr%537l??}7H z{&=2xd)?NT4|iu<6YcdoUxSdbXf!$+z7N0%Im{ytbR(IaZeKA~jG0pvBx$eg{_vKOD;`x>qO8kgsWr2dA6=a#wt_W!|v zI6|T$Bzj_F_qW^o$Jyoe@Qly-H7y4x7xxcOg*7eLcMpYit=ScgS2y<;S2ywb759%% z)ondLuJ5{s#urvMvnm>V;xb337v9HYc)(KMMW_2E=8VrR`6guhC+AHrtUUbub#!*I zw7z|IdHpdl=kDR>!rE4I&%pTHaza7n{o}8biz};7v17AKg|)4Rrx&G-9ZLv_zJC;$ zoaYpl6rEF6+|b_ob?Er~vZlSaYhY|=|LFAMDy5{lrFU?Cbu+!JE-JeuBJ*=bSzT;y zIYOcnvLht=&+Gk(0`0H8fB!t)o$t(i{rc}8fX2ETghJx58w_Ty*bTuJKG_Y0D6xJI zBQkLK9!_Rg@jZgd`{a8hG=g;x#+dG~7sXmuu@}wRcCr`4JIuNtE4b{iA18WLu^%t- zc(R`$gT{7{s6gU)kfg#~d629je0q?gqr`TYs%PMMm}X>Gd6;hMeR`N-5y5tpX_M}F zl;u!Xd6ezac6yZKG0b+H`+nK+IPb$z<#E3M>g02*@YzXm zq7wUQNveUt z4nj215lwVN6CKe+M>Nq9O>{&P9nnNbG|>@FbVL&!(L_fy(Gg8_L=zp+L`O8y5lwVN z6CKe+*M34lG|>@FbVL&!(L_fy(Gg8_L=zp+L`O8y5lwVN6CKe+M>Nq9O>{&P9nnPZ z<#`^if1c*~yIlWwn+JYW55MI3_gMcA&I6z~0C>D0(gqMMFA_@w5)Uu3NCUDoFN$&l ziZ(B*VFT(LUNrj#GdUT+w)4v` z*TWoF-S^ARS3OTh)mOdGkLOok0d&smJ`_@y>wYjx&Gk2Ik&EjAh%)ERAd#WV%@CP= z&CM{C&&ACMG?Mdnlrh8Qc8s;W=60O3{o;0lcZBn9QgCI`7!W;1oq z+%Ni5@9cjaBH8!u9OWWkbOshiUS6FTU^LtTC`1;0AauIKAS5i_1{q{rXi(xs%SQZ{ zOJqr?Ac}38o7mS1!_ux9d=;Hp6ry{LeiSrW9?1tJ3|he(8}d)xy<@Lh{Q+XYq8}A` zHx?vIc#s>6M(NNeJH3jvC^daGA}u}rfVU_+O`{X@vp2H-TGQ75kZ=_JEgDjA7}O60 z=?A0nBjNAHBK3WQPBW^=Vxa+{sK02ZkuuXk1heL7shCLUav`~CGEnBxH4MzRA-OMr z2>y~H9C@$|sO&lne)pSB&wv#|w9AQ#>*3Q?lYP+0{sfJLh@l8J~O^1W2C zyyn{f6e|c5tqCc&aTm(fw}ynGI}GH`K^?LCDC$M!XwfWUP|vMi4Yv!Bb_YSR`^d3z z36OL7WT3&=eNY_TQGhBr9t5Q`)_{$CI89>nUwn;eBaKP{N9>!$xkmx+>tE6FBp*I z=sKF|$@-x(yA{(Ceh_x^1Td-W5 zi;aY3OgGK1y5dB&^5v(L)-th&N}aeWy>cF=?7bVn2*Is*c`x@|A&n<0(>HzQ% z^v}?6Hk~3&gW0^tpkc}2>pJiD2{T##F|n0?EjGU?owuc}o4wwI4u%bYtZ_{9%H^Z| zV6huuE)L-|HMHM*cAN2Ymdw|5?~-<=c`N>>@JMc=$3Lbx3W+iEa;@nRU_p zGpW5v-<51f!wj&wiv$e{0lId>c`|QH9^cVEA1Hqf_Qwx6GpYA~gYw4SYt@4iEn2ZZ zv6(ZP>jpag^4>WL$m+uH2$0pdfUkoW>0|cRycFn@;MsCd1xgY6| zg$`nIe2!jIVmBRXT)8YDc_L4PcN4XcEmA!=nVe0qm2%^f=28q^meBomcwWqAc&jBp zJ-h3e7fkV4Z~0z^pi_kcivk#AE}{DvCm_vjyX@NY&`=ma>*%a7?cQ-;6!&9Ca{m|f zGcG`-7T}^6s=Ktfb6_T%&t4Jq7co5X5OJcXKC8Z9ypGujafv4=22P(GhSO{fmO{a^&F=+mq6hP( zzml&qVBW}(EsHyBJbPO1Szu>N;>qPSJfcBbFi?c zoBe6Nk0@VX3`K6|qEfPN7&kJ_>)M4Q%6Laenid?y912L z6U_FmgVD=~$!C?-7smLJl_{Wt^^*}}@DpR`2i9;_MtI~XW0VSO%o9UgCSw8_Ytkq~ ziUVWX2}?#MLzXCGP6tb#1499ru?WUeEXq*2%1~~^QVC|Lu3)HTWvO4KZ#;=GT@2Ub zk12GB$q0#QDvL4u7UPN(%Ss>1FBj`%70VP7OLY{J_BobeFScnkHWew3PA-naD$Y72 zE}1FL_;Z})UK|xtJTrZ~xm^7CP~2;)c+=1Eq~GF~VDU+N@x=5Av~mfCRtfTG2|p_m z5<(L2_Yx?P5?|3L;>snGStaU(B+l7I6nsw9+Dm*tl<Ul!#xVb!Q;&B|!)vFMkl(XTLK^vUBS*4Wg2lU|c27^=oxHKj!@ zrRC74^Qor)eM%Gm6;W-Kj=h(zfRqs#o^D=|?na+6uAGq>k|FyoW4=7&i$g{~YvzDT z=8!|?2rP4~B69+qIkT7Hev~;inrV-emCT&Apps>0m9dYK|;X3CVzmUZ`pzMUR*EzCm1<28U80Ja_OdGA z_MuqRvNS2UR9Ccg2~E`4nDEURnPoJ!br-R$U&(4%8Kj~NQ@706v&=Nw-{p+b?JW4+ zIGIQG=dT~ie~>Wvu9xqOmUEGo!%vP&Loi9avdN;@3&XN=)YmJNK2-3sR$8ByM;MoC zWmjr+B_#S~q&ks(a)M-wRmqK4KCe~IMpag+Rn=e?lvU+cum@%QuJEH^ieaa2HzqDJ zhIDoj^kkEMbqXyoCi|iW>5nEDaUvbV3>Z)&8xn&|7!%BikuF42Ep@q7sZ|G^h1IUt z{>q|Xsj^&WubTQ@b~ui|on2Q)k(-`fi;iChZTx&DR)2(1cT7Px!w$LrjeqM`Z`xQd z4Qc?+>JBKXEl%pm=^E&Y8YKD~3eu&kvY&22cnDjE3_BR{9RYDcL1Ga|+HWf{4@5EqgEs&dL;`3HlP@6bki$)Iq zVXMG#squ!j=MFPOj}kDLa9Q$d6)!e7w`_4`Z*!4t6SHiy@RSB6N)ruB=X$%mGHFfl z@jF~_0yRkaPPF5EZzq=RC5G<&|G4$fYL8tDzN}N62RfHzV-{G`442InqZ8QuyukM*-$|da`mo7 z@qTcUTdqyteau%US%q?al)!8BAYQ*ZTL|SfS}+uhA_EfP1seh=MU*cu*wema)owm@ zhqtLC6}@{Y4CyiH=~9-eLs7^0*^Bv18h6q!BaeP;@(o269JeR{V;PwA9b_Kw|2-bp zKA|zq*!AVl0Es_@HBw-NsMDakk+pKrUl=+3zuoFPu#73hC{YC~2rSHt1P(&y(Lr^e zZKpJqfPcCe5y~C1$Htep*HT2+CgS}l9@`-)(ew8FOG3tb5bw~D@#x2-!IwvxQHcV^ zkP-NT(km$Np6)A)9HnLqJRW2 zjx^^9Dg=84kIz$#Iv0&sPks>H|8T@HLEP;VX8$sY6i6BA>WXdNh;`1{9EeF2h=oo9 zv+kf-@JP+1Ox3jBX5TIciKN#@nY4HD-5cE`B9evyu9gGlJ2s9+m>S>gPa&@Q;VWzOWc_YK@y{^ILq~o^A0cPFl8r@=H9)v zK}Km@1bHmn>kWzjn3j;N_@^;v7}up_1~HEmczKPMGK*}J=Cm-;fA*qmF@ zGKTCFN-!$hwLp}np50%nmp`hpH&?;2L9D76FJ56BOwN@ULcAr@TZ77 zH1IQL$s9CE;tB<%EymLLwr+p2cYH>DQ40GX2|#^&H5(oX(p(>#>n4W`iTdq%uG#9AlcX8 z937P0YankIqldVGEpI2xbY9zR^8=UFER&h0#x7c~0Qgb>6BpR_`hdUP_P9SuyC}UL z-i}m+WZ5Dhgj>wiyMq&Ra9w*KR=Zay`KHF(OOw&Ug{xm57eG-O2A5f2A6XD!10m`i ze+YqxfnM@Q@2GnW;RaBl1saylfolAwyXBs3+#dJ*ju@Ynu+KU?uEyQc1>(kKZESB1 zS?m-$l7;@a7LfqDj2Kd+az#+08?#ESfaA`9J)Pc<>PnvexPXMq42tX|E$Mr-#vzL% zjcuZC2WCvE$Wi1kD}o%yQlke-*h_aT_U|JEydRJ6FOK!yrvE9OA+>kq*Qx)B=s~tb z0R%CxxK5R~d;W15mw5RZO|*4~uWM;Qu(eFu!cDrEzV`}=_dSTq#tM*e`)SA?pQxR8 zx}2k#IIc(h5WRD545+0+XsOo?Gg2B{Qo9?r zKUQt8gaY?W#VhSgw6;U6Ws5l~%O?R# zYxAR;2+IVMmW%u*lTTx`R|lTVw`&msnZxJGc$WG!ZUT}gc{WNVjLPq;-B4wb%ld4@ z@8)IrPE{XA86yOkmro1gmn6`wLC}+L+^@p(tqXEaq?9h+uG|#7*0<1hq<`Zs`p(_% zQ%5iNEeh!3Py9U)G{E-8gH?DC90_6az^q6VsDyr&O3+T|J_YUC1ihIFk%oMR|Dwx~ zN5QvaZg;QRCOYfIAK>|tF-=G?a+*c^pr8N81wLcjEe&DvdHd2p!)9_Dg%7#PL!pl6 z-1=j1hq-<0*I$KFkoIaBXkY@WmBKw30?Iegg#-SXs)RKWHQ3R${`YUx~N zy>LQbb^hY@15*ZwY+9{n@9 z0H-OLg-*C;laPJ7VvfNN<2Ki=-oGD6E={|vKhhc*isM6qTaqb^qS4Wi^~y}@umH5l$QB(H^fDZVNFG5t z_`)(sU%CH0qS2UsFby4WlnTs@prfc$L&iRIA*#G9MIt8)1L^yXoP(M^##$!I-W77| zP_q1?{OkAlW9tt$+#K%z`{6q}P#GAgdu+%lS~d-p_?+U@1)%$bV$E>U@vfp0*qyDDsjB&= z#&H{@CL2MdO5v%(kf6X{LZ4#Oq{^bK>pu4Q^hY*j{l$LnKLg*L)odIG3^C&qyG~FivMx&8>tE&9n zDOHLB1Pi5mVXk*EwaEPp!-!ZEJ)MZ8umGbVAv^32kvl+_3Mpvf?q9yPf8a1Mb{|UX zVSPE-YWPO7>A}#l=-@$x!aj2V$~M^dp7CYQ-%;#{X|VpQU=53tu=uwYqrrBriM&CS zxF7jfEoT%B$E+4?+qYW1hi1%tQv`js-<;bfD2b6_S}zdiwLX?f$`V*(hZ;i}UQzR5 z(wWkbP*)U&t}AfUhf=&Jc=J&tUEexh+K$vbQ8|CcI(fp(XLJySVG=s<9FAXNk9u@p z{J$RGzI*q5Mh;F{+p=I0SRoW@A^&1KC1ZNYrmVnQ&!(b$dcv{lRg0J?JoOe&gIoLI zVx(|TFHyFE4qJrvzgNd6A1XX4dRTqT&F9>8Ri^FK{Znbet#{{cgNMC#P*+_NPvXxt zuQ>gJhTxKofT!qT$%2*yab%-*C_L8W^sBTxkH@U?h`Rf{wzBH`#o$)~UR5SOlHOjD z89k2=NZ8}vTcDtTpY47>^Q?D6-voTvOF$>_*-s+%_C1%8$w z)bBEK1OCx?fV9Bzb^;IXf1jZDDPYgRr{MB&zuhPBcg#;XJmJUJf=_={?|1%96U%^Z z)GqVrvS5Dvc!(~Q;P(Js zRtciIYcH<%ba!fG@~x9Pe!?Y1<`$U)Dc=(#r#8Oh#U02W;J<_k^X=i!r6@2>M@MOD zj1e}IDzM_JM(fv55I3rHak%kG8;4nu_NZ_^#WhA+2<~qWW)2gkCB)OjmauV2TX60 zRW&i~lM7I6SruQX>88)8=J~_e^gGoI+UC>hH5l0shg4rL&!>L~v*q^cR5yRr^=;Q6 z+NtT*rI@*eVlO)MVwyNG zCHGjtUTkSh@?G6R-c^{r1kMLd-{pn;pM&Lp*0Zz&9~TP#4N^#g#B@SP77Hmij%A6v zbRvZHn32336qv+bMx(J55f3>i2~|zUxGfgbqMizhQ|KnAFP5ZHovP}0>81ql|A~p<4M^PR+q`F1q@s%zan6@-!pn_4#x6EY;;)UQmYXu-vMsjO^d`NRYjVBl z93;ip>!O9j%a~l9s-xHOn+#g(&8nQmSxr`#y(?NuEA3prm~7u_wNw3dbq~)m-qdaA z7*MQJOE~X4WM1inx^g2G|1mwYdf$cA?dH{bK6`Oi|78QUUiPc{*PDoyZa8PXROm6-qvQ8{OW0l?>$W$g4q6@QevuDp`Y@c}X0I4!zHnYf-9A%2NOQ+LFxY+m# z=n|5SI_k6Y#Sub2Z(QjaIq<{^>ef!1sGQA@J-S+lw`yPKovYn-tc;|e)-{&9*oc^f zPWFDU$&+;bDEG&AxlGuc?Tf1$2VvJ1nokF5&JWAzjm=~3!}hrzH*a`*@@AilPxoP* zir37>_D{QmFYZyUBorTuo_i_#9^zCT4PWk_a)_!CN_pIJn?|Akq#o=U_s~=8HZwcG zLk4@4GK*TO%ld}M&=g976OGvD?5Q9U5L7meU`+i6BqV_M?P1z89atp@iKH(GRj?1l z|I-*ilLpC#2efK z3P&OYi|NoqEi1Y6`gH8Ow7$dTW3R@LLfNo8oj4Q8V`c0>>fh$GU5%0Id7s>1r9zMWM2hEnx`Kr+#J5QFLD^y3_a_$P; zhW(i++WHx>N= zFCL4ZET>u@vFT?5d% z2ryR2MR^T5<{kFKCJTloV!)#WpWfvFK{?i(GCq3B`&LRv#wsb*$sA+J36wdmoN^%5 z7bB`ELXIg?xx;29xni9u5|)%wH-shXBVkkw-uJ|5oNXxzV`a`Nr_p0FR%3x5Re7pZ zO~+Iv7zT5~RKr?I^E3ns7nzIh$9%F>FVx1RjmPB~$BQot%3{aMYlJHW>59X~dmG1} z`qj?Y#%)W+Yr^X5sU{jy%j^8bnu*jqU#W*XtN*5-u#cH&?e6HbQTKYM+I27V<(Z}> zmA2Prw0&{H8F|u{LnA|M66toL-z92@Q?cKaWrT`k%x02RP2*dbM(M=F`1}4z!I}vo z`f(TK=~%is8`{|tark1c+B`Pb5+lt5C*usK$coL>$l_!|$W&R;)OtzARxZ6i^7O7o zd+5Pb^}Xg6{`7&~wCeigo}S8@fAL}J^r>FS(fjE>?E1|~<{#Z!m#IuwCCt|cnm3D# zw-UYk-P2vN+6nyH4o=$B{@U55Gr~DD_caMmiww`XnkOyVsQWXW^V%P(XW*#`KpX=y z&Nzrk=cml9m)>mJe?LcJbp*0!wW@Rqx@QYq8nFXZafLe2^|>Ktv&_%howqu_IOp*H zP7wX&!xyR~)K?~xR3xG1B-d1=#L*<>Vxv-&r=galb`^x`&uw4N^_0BqW1mOXn4c%o z?WWQ#mC*g^1lQfnoo8u{VRD^fec<3kmE`_0iBqe~QHsSQq{Zdc#7n$D$iFZnw-8JJ zD*EHA29yOM%~v@n^`d!mVy>cM#2gZm^wI$$G6B;smR{Alyb2*$q&-}av#pY+u22xt zRpOesc&`^7vgr6lFUwS~Ykbk}T#uDWPnD}c`!B67*Q=M*OKMD7Bm(;8&P$Rw`g*o3 z`ae_+O7&lFm6#ls8)^<}4lT`fzcO=WHK!J`%F{D>Sb7uAX*tAVO|56kC8egh-0^l< zy?XhJf`LQavPIr9$qxfpMcE%+%cvBFk{pHu&jxK`hQcN*u0I;QxA;G#(b@eK@k2FC zN?f6DS_y@Z8#14-tZW+IV6J}D%zxin^-0noL{T)FHL%b`K^mQmsO>W2SHO3zB-p;0o|>lMq_8&PYof2?Nc&t!*JWholw z)KcdSvFHAHm4<3q5dOMoisf@2Pl=aMAr42WD^IzrYSQ7_XWR8v{&l+^W7}|J{r78? zhwDjc#`R0BHN@q$W=4%TLJgX0Rf;BNbQ>Q0CL}f+ZA^1fI3``xYG2Guy8o{Kh~C&a zF!{G=g8RqhYk-LdyJ?oBsh*~3eXdEJlj&LXCh?E;zPy~Vp3R|fmPt+S>Aa4f)=gi( z&Cj=+@J8ybSuX0S2i~Qj)dj^Z4%@9Cv1X|OTa#X9MeJJ@wPqXCn`jeT+rPI~Yc{vc zvUj<**ECu7Te%LI$dB|H4m4jKGtr$$vYhI3owvT4W!j!0HaruOzY5U3(5&8YHM-q0 zr{>?uCwNngv_ogMGXy;ZbwOTCpT{gzjmjqd#8N;&BX5=i}4*dOp6hA3)G7@ zQfnBYBK3nM)PxCQbA2;mrEA8{q>F4O@GE+?P1o_sZFqLbGxEvMgcE|^(Y$C{^84!`Gc(u+L2M)k%N?-X`sEGmR%wpswftK4-X;> zPDF{Q2p7EvYkmmRWJS{Y5TtdDl2d)WK4A~6+J~Ol6GR-mCE4|CTYPs}{`);@AUDOw zz;MMPdE7aiT0&T?_eq>EEI$2>2kueqhA8t%M`GWLy!{si$YKf5lr-ngjF=aI%E?Fb zlL*|P$b9qYeAXyC+vGVI00RaZQE#qAKXGSYKA}*q0y?~*s4|_gys%OdSQ*W?@(71C z8geW_*av@b)4TZQJ8+!+7w6g~xHPLp0A{AO%{|E{kR0K;$VBLVTVprHI=`&huK zNQ%Mzh>Z5X>kPZWHT7XI!T zjAH1qJ$2;!g5>C(!tsKF77_UBk3w+8pgK0j4_x397dVwN|7=HkP|*Z*@RKO>0g+e3 zZr59hZ;$gIIknN0~$RBFR?U71iBc}yrCKvV8PtPIakb(9YMApI9v>Yq9>&>$~? zje&t4%~GhmX@1;@CPZcJ;sClcNAUolo`lLbNCn5Gza%4oaGHNGj1M93YqwyBccCBd z7-w9u3Z&7o0r15)8gkj-QJGW-z@U6fwDV5tn8@N)6WjZH{*kv4v$v$*ZsL+c3wM!4 z|A8rZQL)>b<44~YuD+MNx=o1cKWxCg0L$GNd0nYQiQ@%H7~a29_R?{_Asu-jE0@uh zfB)EX?+Xg{e;)^Qge5UX5s0GdS-|xAV3r~z>m{Ii4DJizF+A)K7W|90eQZ*)-Rqx-tC4R>2BK^UpB zY^n09M6lO^9OvL;5%9@Bw{V|~En(+RoZ=BiIkgkY^~eDcWB~wcfa#?FLB^lXb~&w# z;pd5f22yb2@!w=xu3|JWfP_xK>2MAG7KTa6Z$q|gIRGPI(XD}9TLLi@B5yZY0qY=I zKP%p~cTh_(p{fC|QIf(KL6}YuN~bJHi(D!|4%iKOsowumn&$G%;ht4D6q3U4N`YUz zP@zj2=x-!zxda%Jd-uUl`YkwPz0vmit{a9vS30e*PmMluZFampp05@6s@&@K`*|CV z)yiW5d_pGVc6qv%>4qKRn!AXc8-yiNdIvnE70yJ;U|=$xku~hid{$23mK13@U92)> zQJNBS++S(3XYkfEvA)>o@>yw}`Xh3^s~dpDigG}f-SROPq%0K1#hn4J?oFx$9I|qTT*|Y3%Alo>i>N*zXgdxgJ*9H zp&{PCShhki#8y*-z6m`+!<7_`=puH^GU*~QHCHzysiRN62UEC-(nl|pcI^4FG>uxq zMuwjDVBD9&3~_Mk^-P9@&9qTt0}!tapsFcqsgnpry$+MXWBp|VK!8L>6%7)>6!e!W ze5l0wM!^7}C5Mrmiu`}vWeif)Nk)d~1c6voJNDx~JQ@||A3b!k1bsphbFc`RS7cH# zGy;w@)rHqsm2~NUC#E4=(jBFUhhdz`+amFTP<3>9LB-Ze(EdE>?20odS=`qLNvN7< zCuO;6>kg&JmX%By<{?pz#ra4ccG=Etzm8-)r(ge1?EU3eRDT@sdv9uB$e|mCp@tOc zZjdhN?k<&9kY?yEk?s!Z2I&%z2I-Pk5CL_5hbz{)uX~-p;GDzr{bWDbYkk-LeqNvV zQ7#vi3jEy{SurlN`4NF^3?s)7Z8Tw~*g1W^xL_?i6jOa?z{D>WLN15l`56N$%^*!~ z{!Uw~@)A;^}{T61ap*CXvI#q`_bo7jkm^}Sj0R~;c7pq-1 zq+pwY%`odNu#&lPUgz7#@ePMSR)&d+z@OjMO6J4wq$5J60D^2f;@YU5)yfx$cjIPv zs64%#*dG33y7bGa+X7@Ks?Z-C)TpQAKx?k{dz5W@kH4&g5<2pU8qasAcm_cy5|wyh zew**uA`l^QWH>-*w2MtQ7#h~R&46QQg~?Tp3KfkFXCB&;*1Cg`rp&!V@H5C*-z8Bt z%|V4WEb!50gZXZG0I7ZJ_kZtRXq_bZqFjBWR5z0IVtxf3eXI1-m{Q?LMl-;ndsD7y zSxWO~fp8vFKnAskIwMVIb% z7PUNr9j#yGH^a|#-?#(Lal=UyjjtcLxkvPk< zMrp7=&h<4osL7;#DRE5A`S)&23bSd*=-->%b6pmhnt&uI4wn=;F z%DNc5dLi6R$r2GTnP3%VRqOdMlq^S8izu5Po<;h#4Y&NClGBM}b$-^KP$RW!tVh|;{SYbJRU`P0MA!a zL!0<5X<4Pjlm*&b)0v|BEL52qH#dY_@ChV3Irq#%yE4tS}$^0~rvd=*Y#W#QiM> z87U%ZN*TtoV^i5?doespm90kmQ?b9NcBN6$tdW++59RrGKc=bUXWB6n2-K1ZOLip~ zA|9L^kT-{UG1!kQKgGjgk(~)9+X{_XwLFkD95kdwL_Ft&;JvwvqYqL-bgYjPQQr=Y za5a5EGlNiY7(w~D$Kug~hs(d;nThw}%V1e%JXN3c@Q-m&+3?{>~jr z2v$~;6^E~W7`}4X{fxnz`eB2KRcub6NNVwPw%7{cy+JUVoK$9Xc7< z@doqVwtkz|Kz#z8?eEA_A~4aQ>T7;O4&?(*`qT+lcjAx7C7M*hbP zt)hgYEg{e(x1FHd+WqF_=3(2`hDP&_wW41^V6saELz7X)>Tol^6fAuy$*ikbs;j}Q_xOvq_xzfm)Ufr)O3c~Y^l_26Ul6TSZaR3Y;jv^fn>G>m09AmSdo=k(Xm*w zlv#7L*a(){NV3=}mf32s*y)$qnX}m2m)X0sIQWz~1hF_qmN_P{IAxSM<*_)Il{we3 zxU`nJ^s=~)l)28ZxGj~rZL+u@mbqWBc-)qGAXz*?<(~MgugJ<@(XqZ}DSyq)`bMz) zjU=m=V!4+FtG9l+w>hhieYuZ2tFKSFZxE|rWVv4gtA9qhe;#W)Y1yx4o?I zM#|sKum&!b2X3+k9hL`Ou)e=7e~)Ah22}*(!$Zg_Lg?V3EES>L@G!xOFiCj0Vnw(H zJVL)B!W z<=ZdMXJ-24Lk0s;W%;{$*Nh6vh|^oym}?Crk4 zKK@#5@ul}k`rV#9NxvuQ_ayzEq~DYDdy;-n((g(7JxRYO>Gvf4o}}NC^m~$iPtxy6 z`aMa%C+YVj{hp-Xlk|I%eoxZxN%}oWzbEPUB>kSG-;?xvl73Ip?@9VSNxvuQ_ayzE zq~DYDdy;-n((g(7JxRYO>Gvf4o}}NC^m~$iPtxy6`aMa%C+YVj{hp-Xlk|I%emHb$ z?F~Dh5yTwkQ|*m=qe+aad1@U^2a{QRE}K&wpN_s1$i>pBcQ$|jTJf^le7dvcbh*K1 zGEcp$^?bek&FSWJSKH-Qe;5wEMtA#!aCX)qIVf&R?f1pIo+Pdb)mJ zZhuDpzexINpfFV(7sUylz>A|4*(;qA^_`uHQ|+sq95Q{Jzn2w6s$>_@$grPOR?sP) zD3+C-oKzzNYpb-Y8 zr7Lv(Ik6UV#x>44+Fd(ISjl-k-8cV^drJ5>Zq3ZEpJ&&zEvV;7)AFo%RdZN4wKrc? z86~Q}Y8h~`eZ^IF`?VBo-IKIr8r4(2Oz@KHcJ*CKE@Z{AjjMbOtMUAH!)-7yX~XL% zz6|*dv{U2XUiE7Ipv7`3@@dlYru-M%|EvU0ChGDi5|V|mBf(N<)y z<55WtxN~+eX2$n>4O({RYQ5Bj?`bo~{ljvVgS*dpx0L_eRUQ{^|H~l*r~8W}%*&gz zVWF+PAL<-^fr=$USeVkLWiZLH7S9gLs$2L9eB_wT;iNtFEiZ6WhgGXCgAUhlzP zpNCXp-eJAe_3z)ByGX$G<9{HfepITfU@Wx)RPwQYkmywiB(4CRRcQd*_$riQssJQ3 z)(Zq&g+Xx(v0f+*5`DM|zuzmsmJ1yu>%5BKi7Ui)Fsvk92r@vMS}U zVuNU!W2e~?9>A*&RPsOaKK2iTF}Qhx<*kCD#9F%lYmu$Ab~A|*FLBG1y(FLZ9E}nt z$pK2s@$1a#Q#;KdO0|%8(%Mjn5|%L~Kp1BUWrWBS!TZO(StfF?kZBIUu~Cv6OI423 zJ&SNOt43bZ8z_^OE*RY!RUx+k%Bq!yMscF`Sg*<7xUrYPJQ=0YKPW(zktx#QNdgrR z7e_k>ORIgT@FE(@N74GO%11RD|Jo~wu5>~s%4iCxu!M3bk>KFZhstwFLuK&#weWNn z02=SI{}voIJOYL)RSq)aUJu}44F<~(Y(t+bk)WZ^F9Potp;mbPhJ{o>aFIfRu3N79 zo6tptQfUyn@`(=4{6hIjdWE8blSwI+0pkoQ>;6X+JVUBrs}aqOXlxTxrVxmEfwL%zF)37GwEs_W-Vz9b}x zKo1S?M^`pPLDNq{XXZpqX8J+!_RNNacr{vqiyPdJL=_xS@%zpF1176ock&6zfH(2|0x^(uKQ`v1io57g9G8ZY-U3{0L8jL zoJDv5>TR|_?0l~bpc`w4abuALZ->B@tgv+}LP+=k^oMa}k>;X0OO((GQ6Rd`t5o{_M4kX0r^!6cSU94y_a{X4%^AgONRxd ztRVEVJ0;g%1}B5LR$5v#%r`*z)1bxzSxF#-+f)b;Y6q|ipuyaJJ2;`V4gBfjY7Vk* zpkmBr&ts=uaoMOXev>6OQo<~F;Ow|p`nn>dFiUA1aRzG&xuOwiP$Wq=^wzb!1qJfO z|Furrk*kx=Pj&i)(aF87)!(wneX%fJCKYV!tlI(dpI5GEd<^zl3zSszKSLS>fpS_U zd8_K5@_6Ef(Z=vL`2_l;`pM&O3<0wHk6Q}i?0Ao@%SkC3&wSQ!aEuPxbY-v3n6+S; zHhsGin)G};$2UnOO@p+84noAcaDd%h-9bw`Ll@L(+cL;2((sk_7sV){@%BW)pj# zyZtI^k)p|$HxrmYBio}SZdU3#7YGJ_1N}RfMdacZ;QEuUD#=@BMdVz1{>@T;`1e;@ zX*BLqzcya}2Q}18TY80*S_xItZ{SrwvnD+-9Ns$qwJQ7GJIms39LE;)M%aI1z3)#r zkoO%u+P}ztCeV9J{0Q}jF$%<_fZ2G%p5(;AVWylPEKGaGYTya!ofZjrfL z2ct>$W4L)@e)oYKkOD^-=DT`fs8(hx>7hrXLHoO*vnXNdgU%n9;eI^fO$Ka6elGr3 zaQL0~Ntqe46b_VyqsmxBTU)$fhXmFhwZCXVaF&nJv?oy1WbhfndL0q5g%S`h7?9hl1^21@*lj)qfSSD3t7I(bO15RG5`C zI3jR7BWkcR6#+P&u#$~fgqoC%iaa`=QiP3~lA0DwMGsD3_@2lNPI{e@!rqa>s+@E% z#>>ctjOP?d<#)2zyi4IAPF*uh6<0l;4*^C88N=NXH@oQRb^vTkCswU zhHHWuUsf{ebqEW8XElgsGy$`kb-*m5)3m=Q*?ecT0!!IZ!X2VvF5lCfRs}pd7~Lot z-+UK&<&^HL%;eo66pCtqw_g*>8$cQ(L5*7{4h{$G*y=O?wh9y(7q>eMB zJHax)GiPTryi@1lJUrr!SRxU?5|!$i6EZaGpPR54^E z9*!Mr9a9lH0gVnQ_M?i5q+(4x$xAh6NvE>Q{7|0rP?T#d6n`RCSOv|Fu}fy>E>*FV z?5L{gv@Uq46vM8bT&ij|u67z>sidOo_@LUl_PBpVw%)nuSyQ#BOii9u%`|KEUPz75 zKuyk0%^FIr8AC0fOl_uB?NUgsQDN<~f!fra+If^ZJ%&0CnYu))x|xtV?ZP_Nfx6h8 zI$V*ec$E4FSpAqx{cq>`%c^>-kou~@dW_xr8#19j;|5TUY$JOOo(d1zlAc!lCyHqu$hpQqam9to0|GjKFQ5B zv8XmSuQZy$KFP{_!i@PuSoG=6@l(XWClromh*LAy$)`HUMwPeC>ZefYNowss#PVW| zn$>v*Z<$}766>i7Q~YV^scKOYE4HDgFpCwj%xSG*Z#6nCv%{fq5R-BiYvUhp#a@TK z>T03AZp9vNdnjxZPi_lRB@JG$4>R$K>LL$aZ=J|$hkbA7!0v!Qu6dtq=XL7%r`@j3 z(&5|K&Ye^5McrBLTX3`|lMN@0i#dqKNnW`(WxKmBL z>ciXT6|r&Ms^oblp9W6J`nuXiRl7dNa&($N#^3T!=SWO;r7j|KXy#mqhsC;n1oWH; z_nc#NslDyYS54mRqFP-i`mRd6Zqj^&V||%Jb!t+#jYEF!(lSNe_h8u9Jlr?-r+a3% zPkyHhRjuj9sNdyPpINfghasn2T}QPS7|}n0&SiM(p;L6TlBG=l14j}TC)qUzF?Kg; z-w1p_(XmbbJqZ>-L<5k#3y6L_@VQLId|<#ZwhKqBw`ra9D+#c;@4jN|OD6mlb#Cxk z&7i7--%m1NRQEHzny}DRh9+*`e%EIc!dG`p5Yjfyj|&Lywn4?XNFiZQN^&5rl=J0B zaqV~gv>QEo-CdJ^-jfZ#$zdJg6d&;UJB(GTrLi$$LpX?>3;XPc)30?#xg7)0UPN>!icWi-UY*%?K;hJ>t1tc(ijPx)3#b4(SgXlNs{+ z#gOmWpuc!X%&_6X@`U>t*`h0(*VTBaJ|sLzKY=Lndt7$^-_arQ_}6j9RR_a9Q)827 zJ{;u6(Y(fiANxFhe9;&BABn@5*H|-;i9;=YoM7bt(KzfU8+0Y&tL??3O(ZNgg^ih# z^do+X4_z1xO`Faoa6(up0IXWl-VHLkp108jaAU3cwKUzwzTr^UtV;Z1$$M#ES``tJbl za6E1&u~1J2n87WaDF9c*NFdjAqIzIw3s%e^mNy=-N)E&qEE~s@zE$rtrS0F$u}T`V z!g~Hi#_UV`R7AXKG>T_*!t@-n`*r89g=nJ1n`QsUzG0vPc|I3WUoO#mJgDk4nL4f7 zW8V;#3unq*_doJCSAcXQYvBpduepJw1Mx(kbDNu{7nV#-lKWJ~b%q`ecpe0IU#l!{1pn@?7!N+djuHsWr5)v-WdV|!bw{q7!@ZQA0 z!2kYjok(nBb!`5{oz#!ZbNe<2P6)$EfKVRm3Q9wew7_>fvlGtVGtM>8Oe2+~zeC_E zP!JYPgyF#hmXHS780>=03P@&_3eCngVtcSIc5nVp87e(?DN)ml_H;RiiSQFK+`GR` zlcg2F(}BGxE(D;3so0MasRV>RM(3_DXzh2g|LylSezT1|T#?AgoZZfz+hqH?*BH2y z&3W*zo9r=eh;$-Fq4BHr;wF7Y`4V#Zyn&OBUY%mr7ble|}s_bi7V=V5#l) zKjMa-!H;pnsLeyynN62@d8>hORu;%KG^N=8fefDKb@5G8m`x^J)y(HJ4giEQQBbgo7 z*$kbH+g)4r1<;NgC71iYz58+5V;J+Z)H`()hEb;)GyGF86E;3QoQlU%Hak-cD}}qe-Md(t3zPq$vVwv zxU18Q#B9unV*dC^z7ho(a#)e28v(cw6sYtEoRn`-cweo4sCuGsfp`aR~7hdctcAVuSOA zz7s9@6~9toR*>5fz4v+s1Q>q^wF)1y*4od?HqH z5@;hTfI|*~3~6cq@1`H+n^O5~0k_Se?3YIxc@lw0bgCOx^+JVsI)%qjvrd^bvt)!y z1M^&&q8t&8(T{j}LHv5q*aI(2CWgH)((HRA^y3E`);d#}B#cQibaKCV6`qK=bbht; z=nn$PB-GD=chug*ZQ9S#%j} ztSjrlI~f?(h${K=NUq6m_f1}p-;YhdJI~Ml*Ba?6H1>y4ub3wM@yPgB)29r0lPeU< z4$|@LtG(8t0TGn^-NZF>O+#$DL@(KV@2MY~ei8@E^&0m(xcw+42uhF6wyF6(gi`7nM?m${O87K13Ergk!k4$%J1f=sB;}@YU zUi1J1xO1RoDO~cJG)V}Z-x3umLL!MFcx7n(2D%9~EN}W24NY0qubPQ`Y$dS+p#k}Y zk!ckQ0_*_EHq9HD0;CwvGn6pA&=W!-M|BYyA~3`-X`UrVG|lsT?t^{{`q)6;+_Nx( z?_|ILGxzK4>Ng^<5uI3r+`a>`P?l4A;3OhNwZqd_9K9INmqL*jbQEbP&-h^^Yvkb$ z^4vRYV)`Sf113wDpc%a}8>2s(0mwLMTCLH{5ebB!PpVv(EX@~w^4>A=I6BL8k!8v&|W zRQ$Ap_UDd#!~t60IMWIpULVW7CD)A3!_6lZP?3LbOcUd-`;O`td|Q-i-qSp-r1!Du z$M8WX{Q|Fqi)%&IDn=)DW+7Rih3(Gp!^_O^v~tnm@0vOLUyX?LDny^3XcKn6EFI*j zRF^Q+Dy&kh)bP&HYpG(&{-B2@nO;4!=B(QDu$Ud5Uem~bYSbpQRNwR~%Sn&pQv=nq zYN60e++ZtGMZ;@T%Gm0jF(!MTIvJ29IeDm)|Qr9+lJ3=HM@AfUM#is zEtvp}Cyz$BdzFfrEr~80_O!VBv~-zWu#k6s!|?DM7TYWi z%IrQ;@CaBm(Y&r(?zxQcct^Zye!sNb`+NBE_i>H|@^-oJzk~JHDB_l=z5&< z-IgFB;bK%D&v0gOD{KPR0n!oANP&$l9FLXH^q}YdVl>u7nJYuRv_GQtx~<6^1ctdH zU&Yy}%_GUbtc(ba{19{bXhZjVWwdSMM`DDyE$oPAOhNH=N_w0n*0a@d%}8E>92z@z zgVhO-gVXeuZaePvpJQgAH(A5DRcwi?Qx1xJT3@^E1>21J?0nvQJP>zyZl68lJMt!P z=h{x<_v#n9!|QwuiDOF453^B;40g zhh7z5a8IIAj2Fr;nkosZoORneCu;EFHD(g0%#)(|t!3VID0mJxyT;3XhmG|IY_68% zCL=@otWEJfuB04Yx!v|Y&8+9Ho;oIL%QFovEtPJrzG8zLc`WTc5*KK(CWW&szMV&| z?smu~lW&(J^<7bH9)8Qzy+e^0g3Hnj!ej#k?}6~-IX92cD9WveLm}Sp!EyoQ8#{Xk zx1@Qnknqp;pa`CDdHhB-O{tB&z@=LSCfQK`9ylS<9O|f4?@uig6EvM91bf4h)M1)5 zOk7K3(wp1KdASfEN|xPK$s1Ns3MUlV@}CE*pBsuRkX_l#jDu5NQwf@WH*l!=^jR@U z%9EEPAsdB`S0gFjAaL98MOS>fI+}!1IQFNjhcPA?&nI8;bKgGRrovfpv{oFI;#7bTkoJ|u=ViuF=W)z_fJKWzI_Ap{hf`f^^eT0zwN(}9$)%`Zcj7*o=3g^ z%a;>GBDYmGpU8wHu6X~DiTDpD(T(~?>YB12`6mfgmlBHxlCUcmC7mA>3el7naX6VIVR>2!MGbc6DG5I#Sd!+I6)*A#BIGEaruC0;&?<)k> zYCd@*B(xuL7BXDstYFaGU^fIeQp;guK(NmZxsEGvS%D9%=+wfCj+7M;6=b~6iS0~> zubdSf_!%8*;7$vQDr}@|B@}qCbC_`fgnznWHa$F)y0ak`Kx)fdTFLW?zwnml^htyJ z-lRq_AR?1rL_gtC z3cBcax;HeBJFcs9N#OZ$UH=T}$vZ|wy~cfY!R9v#9<~rnZSX%ZfExyla-t=Rw(8XZYQs!~YV03B6ArGVA;z9hxT2TFK$s^7 zXr^~)qHolrluGB=a=-4V0*17qjbG81_s!*ZOe}xI+5VP% zDc=5)&OUa8Gkg5?3v#0mb@4fRj|zsw7>dBGt<9{%n_0iuS)ZC&OtWg7Z-RJkn)qe{ z1jAb0AGCTNzJ#LAEz`_FTFQvHD$m5U-&<>wE*6rMR#W_|Any^NN!PwFnM+xi``9#> zdNxO!+eUw03bkuu_{Gi0Jm0A^j}fTzc*`?i6F1Ld*30hwoFzh@OQ4*sWj^z2zGh(l z2K(jM-+9CRc@FQn=ghUd5-+O)o(Yl8{d)Hm6#td~o2K{yt3>VBJ=13*c-)d^+A`-~ z3tT~I&J{T(~0)}y=5C?svBqlKpz z8Kw(iT)b3Wd>O&|GX0ZYy0oG9;zNm^Q0n4C*P^jofvH}N87aSon~v4Aj^#f->u=h& z0-QF#`0Vtw9qdN*B?O%g7Vm@gOFNgkCiKz1E#;pq^%X5S2P)VreDZMX_at3*U|QCe zGa%zz-ha289kaY-y6iPQ8$kQXpG*HOvgeCWEl;4H#`}Y1(U(HOW=kQof+4v)VT-!q z>RRte`6A=>5#B4c$%g!;E8Z_xV)WwT{|P1r_Qf3-(s3CkMQEnd8Y#%GYMK}kbQwCl zTXl3@#fx2iQL`HU(Fm{0h;d^ze`?kB&uUsAPx3)iUixwYsc|8Xaj3CzqwHFVcTD-e z`Z9Id$_V2>4aO+nM5=yC)}0#^4KLR87?%*O|NXg^B)Wd6x*qjyt%=qI@74MrW0P!* z^|qEt?RXQ69Fv`O6R_KQXNw8nd24T=Za?0}ZyKS&Uq+uLOr_K}y19hL+)OjHHt_5= zUZ-!2M|}0FHZ7YroyMr1r0xCkPZv4MB{`=jK5wSBxVSMRA-gbbu#{`MoX)!vZ@B7a zx+WpCE+D)iVfsy7ZWDuVTU~sYOJ~PhVqf5!_s?(FyymTDn}1!*33JRlYBw7LHyL|2 zA0{@NPtBq0=JyZgHPjXYiyc4pL~qi~55DpK`nR59XTkMm>l$zC;=|Ur_|0DtTfe6* z6gw^C8yqdt0@9wfZHxJF1S{l{K;EjkgYW+r_G~R>;{6>De`(wmu28rU@!|me9zR zXZ0Mkr*dMgFR*83vd2fa1~V7o%@7p1sN%O*5F;}X6`T`{v=pz?mtc{WYPFE5)03v7 zms8Y}^w}$r-WPhgPv^345xf6ZVp}1hPG1E3eSw67@4+D-=@GiA zgBh2@nmQ1ol@)U65S1x^uJ4UIbu_P zPfu{VJ735daZ)0l`*`?0XY+d==tQ}+rGUk`ko%xW@#OB$_Y(V)pVTL1ksNFg)pu>tFzhrxvnE{V^l6zW z)9I&k9gs8{46;YgAYH#8ooA8G6B%ddfi9WqZWnIn+-@$@OO=adtIG+`R>{UkF3v_b z&&Ot5zR|gD;=6Ah(&{*N0g#Z5S6IqP2;;knnAz|bE8(#1aLi+LO@z#zAl?B8IAp;( zVsV_~cAJlMS??8c@`*SM!lDtOIMj^}4B#q6Y2huc z$Y{`{W$;`Noc(-8;I(s0-SAmB9w#Z5x(k4dU4|EtvLeVZgUKC&Dc2^4fzAmv2X z7mB#remNUl`+RZrAOo^ev6$gsVxSno9?6gS!@g?#FajXt$Vbp38(ug9G$?v{sYGe1 zWX;}|`=Oqccp?(-P#Z<${gadF)!t$PUIxBC1hx*pb6zrGX;Jva`l05qc}E4`14;K$ zzP~dm)BVm~nBKq0V!{fHi+=weJL#wJ`<5pZH9`rj#FgWwRo`DqzlLwO|AajgDxIv@Q|@} z;tE3fc9Q|LqZ`CT|8gV<^-GMRcoz!)``N?(hvM7Djm}1JKnLYRR$4T&F%!{L|HpcX zu7Oz0!Z*JG=ho_S+Bz}5yx?vBD*eP--@oxopE{Jh zBTuZ@OuD!)30Z!B0mNTw4FB}XSDiUQ0e>}st9PM5;0mkz`FGT41p4(&#w4^zW#CqF zIW6igC=}~IMvC`4i9uo7`Nj)`%{PRvg?zKF0!0AiMcmCD=Kp`w&lLW6m4Z;P7Kh1S zS;;?6d(xdj=Fnsz{!k>suaaRRjoqNh7Tm}@mBs5YU*mMmGV@W?cj?{uHLF&rwWYKd zgQ8^?f*jo%R|};u2BU5@{WTYFG*v2T##zGyhzb8}+B}UqifL zk(3mnsPc3YpxbSfWLc~_8)z%ExIuMD2}nr81?IVIvm_Z`Dvq`C9)^38y4xQU?%ISI zz$UaY=Crq`swg$g&mRQNR+{`<^Jqo%<;BomSwg$9q`$@y{s0i{;?`(5sITM}xRTmD z)*GIw8mRVku1$M4Im#r2L6Zr?XrU$ z+K-7UYU_ha7HId3mHad)08meqCrn5aJQ{#Ax^ z*?G6t<)OJwH_6?H@|%MPIe>m@!ZTR*ki*pv7IS59!;=#KA%pqy-SdxRHfIe(_uSpj z$8el#>_!>h{B0a(q?nB>Uyk&jGxr&BYzh8O z1;!pP6BRz%#;+oD|Ge6?8C?Vx`>k^YmfzfRT6y9^ppL{E!6GnuO{^PWjZy{*TXQBS zsr)~>iLPyUbL;;{H}UG+RsMf=6C(z@1tMPh(sCa3+6VdP=e$AQM_5Qvlz7VV27TNJ z`tP6McfxTA2w4@*?~*e|O#FWI7uYWb(93biL(o%WHEND*BP0Zg?eb}Vuf0dZNB&0C z6UeuH^E;jPJ!jm+@86D~&%4`2!}u<|pVDU}?voLg!0~X}Wuf&)+|3@vcQbm69pHQ}lo+A(zeX*gupS$gYEI9P8gu|{@H*oG_O%m{ zbrCdmnsbfX-`T2605r-`pX>N_ZNwvddnd83cm=y(4?m7!5>l^D9ZHc2e(~oJXOOAz zZR}tP2#Irb_4~8IQTh*Jp&%o zm>Con`VVZ24!fJ&1>J-of~BL(_IKzT`T8DYN>EV3%}sAcr7-o7&jCPf3}Be2LxX9B z;Bqp`&|xKGX*7gFI-oF=0vY^(t9K!$t8ArwvWPTD80*yLs|1Rk(C%4f4byMZj(#-M zF+YSw_z%d!j56p>N~HPVX!0dj>GozR$@XdpO4w_Vft3!F1u+K3ejSPs?oYQN!2-i{ zP^ChXvWAE9rTejxJN>TXXe;gEgei)MhUB=J=E>wkVTjmnV=me%qx=I!vu?ndO4ykO z1Hme#Lhp6n=DQLAtTc|!odormVnSzDlEI1j!B!lu#D>W}m5hukXu2n&f~A1ocM|4J zp##LQB9OBv34ph4!-qBtWS{~V5aj{PYWtaw6vW7E6fG7_;@5K}WK16**<})hx=Ajw zOgZSQEb^U{nm{-)Y>$NPb7V~Fv&iI1yz~>kgUXSB*5z;~CQ_bXW;#M}eVBD_a`?gk&@&7!adiDJd#|6rI$WMS@Kf zBSi;M<5jKV?c|6<^b#?}Uu8=)rjGXEYp(lZISRne^Z8+Qg+w5GQtjNx!ey;YCAG|v z7E2G!axuhG05GQ2GC;dp?73*IUlJIzaQa!wFOQBFK{{jghJ8aXk{rMd#=?c-e7Oce zdqB}B@)TF!5baQj+{Id%mmG!&h<+n-TY=MgPJeR*wB0yDT4#$UZ4_oG2xQ@v+Kc3@ zzqd2!s-$%TRQ}9|Fx{3`<4L=$2biwxE)`7)LK1ZIc_uzzatu;x2B zBKq0{Rcw!ouVaLfg-;%IW=NZ#J(}L*YA=LE2(E7*_Mux$>?OgRpEc~B{BtNHNwe#? z$lvOp>n7$PjV8Ce-AhvUc;IESLEf$o34*w77*h7osE4L;Bl$i=d{p>*DAKYKf$*K9 z31-15`Ro?U8?ef0%F!p(tBUN^%shQ}WEP7%U;X@$=ADTXtHp!SEGKt*dCYX^esB(F z%RsWbr_#woK*6GZeBQnI#x`;_7mbj=9LL(Rr}be7q03+FeZ2aYDhHa1Fa2J~^uii# z4Jw@BUC#Q)9&^ih;p9-DpY-Q$TeuJR>6v5G*MKB{oyz#fn--H_gXDd)0s?6BGV*!0 z6E3N)+vpx`()N(EVkFsqd1+f4#_j?jtv58Ne(@S({;Wn)Z0&0ua32f{I7 zdu(6)q4NhQ_XW=>vXBEKliAl3BxBnsmPf7A;+xfI!8;Mk!jjjhjKIyoGqM+~BMe2a zPU^ZASjamXt`oc?sBI6p-rr4TswZWOwH>B(-zOF!Z&F3*+-h~b0R-c1Pn-HLR4XD} zRtu(Yc1+4?^s@2@h;QLcF7L}1j*EmBKixUPPf;AdyxrxaUnM9xLlN%spJjXpG}D%N zI*3>L>;7(13Hmi;z+pub^cq30yo<{AZrK0B9l+VUSNvWIkgreK22`}dAFdIm^j=HF z>i+?Vg%aI~Qd{in0m33UcCoO^65$Y`JUY>t`JU6(*2hiuQgamj0^~p*m;aUw#W-SR z^9BXDkO{v)T5T0Ku2Z;SUQy~`ai`4wpam%Ce+GX0`N}dGf$1-wzou^S%X{`$2mN1( z+`kxBTERvKxK=8&76rI5_c!ye?((Z!HaC>8OAWEhNH)osLBoKRzoEn~O+ zCa)o>h`lxZG3ysG4r3pu1wm2wyhE2nBV$FkG2a^@oG3-6y7V{Fx zBiWs2xCI$)d5V|ii}_#A33L(&sO<59l!WYUlog=D=F`GKGlGJ9LKiPYGZ-~K?y1!< ziUp{P`^1aE7{ygaC1#4*jElqfizQV+Qpn=&1)Jv&#jX@3(z`~t%(mVTCb@?wxd)i+ zPc>;t+eAdM0-ddby{*Wr5;wK|HhHFJF}8I{Ok5vIUPRieIPWV4Fsk(Ks_rVQW$dce z+1f3XFof>2x0a|!;w#=Vgdk=k)=G5E?Sumky1eX$5eI*gnHRE4A@#hM`v&SCwUVROzA`wG=p=&v#}nCUZ0SC6i1t zIqM(TH#_U%Sa^3hI~v4Qfj36}AN^6?Fp ziT(14bC${b@<|xW6l%p34(l{g#WWS`41L868|y4j#jFtPoJ7T(0_(h5#k?Ntf=R`K z4eO#y#iBRsQc%TG6zg(g#d0R=N@2xHCF^Qq#cC((+CatH#Cz8Dg^KkJ){Xs&jdRxD z_Z7cktedEnn>cJ+M3q}qY}@pe+iYw*Je4~_Y`YSby9#W3YL$C>Y^BKXI3k=(!pS6@ zOv1?|oJ_*WB%Dmb$t0Xi!pS6@Ov1?|oJ_*WB%Dmb$t0Xi!pS6@Ov1?|oJ_*WB%Dmb z$t0Xi!pS6@Ov1?|oJ_*WB%Dmb$t0Xi!pS6@Ov1?|oJ_*WB%Dmb$t0Xi!pS6@Ov1?| zoJ?Zd!O0|?Ov1?|oJ_*WB%Dmb$t0Xi;xO0~71>iUIM5e4urWCD6gdhpI7t*aDKI#z z6*=oMxR?~V*f6-d6uEjcxCIrtMKQQ17P)6KcoY_SRQ|smM}(6}IGKc#NqA*4*(lL` zKgF!DWIxra@n}EIZh-M1-D$!6Aj56H?=NqA)v zUYUefCgGJycx4h^nS@s+;gv~vWfESQgjXivl}UJI5?+~vS0>?=NqA)vUYUefCgGJy zcx4h^nS@s+;gv~vWfESQgjXivl}UJI5?+~vS0>?=NqA)vUYUefCgGJycx4h^nS@s+ z;gv~vWfESQgjXivl}UJI5?+~vS0>?=NqA-QzR(s%Z--iB2Pczhos8)NCFv8484D#D z8;qIzC7I`pS@$JbFve`u(rg^29HP=3DyCfe(p)yCJf6}#A*OtZ(tHJ`0=3ctJ*GmF z(n1@iBA3!4Z>Hj)(&8wllEl)IOs3Mp($Y$%vc}S~PNwpK(((zWiiOgO4W`Qd(#mtD zs{2xSW%B>C%4G2UpT7oP;o-kz4vx-v23U>^Qr;Y40DIU0O>iu6B(~9-NqU3Qw{NiFXW3^oULy znVxt5nd%vvF*dt+_wcxXd^*3faeRLHJv!~??qPO$y{_Ze$n?U`tdiUN$HUW$uRkJ& zr{=RO8upG(3u>C@SAU!O{T!Z}`@M6JP*4$*Q`*)ya&mE%SWwZ}-M@2iZ1f}Y`tHFq zCf(dW+BP`OKQTMAtge4-rlh`Y<@fgH?qO*|du2=4()!lI+V6_yuF3h8&cU&!o`H+& zTZhnuqq7UY#H`+t$-dF)mS012%NxgMmlN~LJ;M`KE#1x$$rE$S)ry zodaXnw-1YJo0Id)+xtgukttSzv5nmW8UORq=^t^K#dU4#+j|8yExz&D;pqkITYFo3 zNB&7UtDCz+lXDAeo4-aT&n~Z{vrCT8F6=`SitAcW&aWz(x(3E)&#!K_4~`nU`lEA7 z$LE&r9{yfl-)-#dd&g#21jK};73NhpHFWhKoSc_8b+-N*{=Kt*bb1k&Usm7QH?y>s zSXddFnje&$n^agCkzN#(k~cUx7nxb)6Q5b$*f~1AaCLKE+1%ANG@e{kH84I?+uj?N zR*;Zio?qPr{Qu>EU;qM$LaI8u#~<{HNoS}!=T|WJjZC^!O>TcU$vca+p_;tGpAfMy z3hCPX;W+4*Qk~)2g3%<7ZzJi_b%o<;e2&L!!*xZIS;GDplrr_j(|J;HOu8fWC9_3J zc`_L?4W;vC8g&-yBMoJXRR+JpC}kVVm+Q=COLa&8%gQ#{?Tlo|HdU^-x!oMEk2Y2P z?(#vxq>^i{-ue~t3QmUMWO%T>Vid20 zgjsPrEBi*UY*qI$93oz)!)ltm@rl@I9RHWhU_XtN-h^aX{e9>y?sbo z+ZM{JyFMnZt1ykRT%x9-etHSzFv9$=#Dh`;oT*n4W-8mnJ$xc>3$G&WBJwB>H2Sz} z-}>3)=TSWj4GQT^N4a_$P`yYEiIQDM`(PO%p)vZvZaHGYbRcgihsC5MIDO-GC*M4} z4r7}*d`z>_XXyDO{Sx31U(6!Kc;h&t(&~`#$Gm`98GZC=$RRPKyuiyQbX4m2nhD8( z00G0m2MMwXL09TVB$)zG`8E;Ig{3%?md8vb93kLC73A*TQ9ab_BsKK?JX#K4Kc#HM zs8Rq0%VEN)@(X0SeU7JVM&7m-FI^ReX9}`yKEG(jzRz;U})TnMyCOBBQ=C z1GLveh~x<*hI6MQSE}>AJRS)S9L{ev4JcF-ymCnYMS*{zCJ+KRa_~nNAY{zkq zfFwDjz@F_;$m@WLJM2*}a~2VDW|ToGB^7)Sjo&M%FABDSFMeV-a)8R?h~|bv(oZb) z#gT+z3a4wBdt!vi_0;9KT~uBAft)GuH#&AL!!oVo%Yo3-iDmHF@J{XJ548dvNJQGNj{NSdfWo$aZ0IKhS?qTf^13o+257Bj-Ti~tt{w#Y4EhOjveL61~|?9US%49SJ*HxF6Zch^a`jM zF)fD3A0L83;Xo#hEsW`iqJn+KXmifllqnXFb+G2xHzMO%2K>f>UF_FilLA)4dV5ho zeiwj-_FBSI_0~2mxYkwmT7Br6-r1s z?XtI}WJiJeDYWMx46#HsdhN8B!3fJpihy*a8(d0ETL`7&2Q-dnEU(q`&FL`O<(+PW z8oUJm2X2}h1c}QVVo^8!6>ayv_M+d#3KJC*`y&K?K!tQ58J2q9WI{_`aVtwuj;zSu z-bWg?3)>T;MML0GEieCCT&QB-#3DBjN4m2MeIP)FtfK#kFdg zrw8Zj*zr0MWoy7IZ_NPQi z?-3g7fdbV*5z+10Qyb~m3A@%=X87hI;r{f%MaoC@?*PwH63r#pbxz%bcF50*!5J07 zEtJNMIm9t2*bNa+AAv)E`;#6MF~K7*%?CGjZ4xTMB|JVgGzC{5sSxmFlRL7nbLcjr zj(PwenhO>^7&XX%{!l*@(I8gcmvbiYsyF!eRUiemip!M!Ysnya4QH5m2-tPXft?qX z{}M@e6V=Vm5iRB`LiJZ#ldnNgFxh~id$AW`lE2JOaH52n$h0j&w(apE)Ll6A*o3h{ z!_MOp>UQYCcVH-92$g6IMa=mY+WSp3CXhxn>{v7+qtW;MoNpK+^7m*f&rO@MA!vy$7cT$uOAeyHo&Rh`Wg^%*zA8LdYR&-5D6h=z4BWg@iRy=-6Y*I?xW$ITc zETp8Agy@vS!_?&NEYyz_l#djzTd3cpyhD0?O?O1WP(sak1Y>?XOu@QL!Jb0>&YYRQ zgo1mRf;W`<13I%vD1~4P#YcB)u_GpFbBa$T6q4rDvY|}M(i9O+QflrA8s-vT%qg`= znRH1hR8tbZ@+TU#i0ezoF!OVnK9U=1CfYnE+L`-{CnXBiC3a3H+NUIWgi1L*LR|P6 ze+-kmwIl^-COZ-&PxvMW=O(wjO%8fYj+T~)XrYLch9;PkcO|BzwxlFU$9sjo%aA5d z=TFUNv~+a$_jr|Br<_{8oa*P2+7Oi5l$$Ccn&$mAjo&X#EH~}jO^SbS+Tu{jFGflWF=)Zo2Ds`uC9Z6vPZ?(F~5S8Sniv!ePJCMHw@Ejxy-;GFWLct2G67 zTWAh6(`%N4H%S?fG-q_#Jj(1#NGr%?Yjbk>&^-p3RMgku^Mi}y%j z3}_=Xm@@R(VbSPJP+TVZS79-DWKcp3deX31;uUVn5e{;UxYr(OZ!9>d!{X?evi^ng zFkr+puB0)0@UVu(vzIcwE2ZPrqUOiQdCSD};XU<7iyT2R9uYF?Pa`>EWLDf-{IaFl z@?q?f$4QD749ZM&sw)t6nLO!MZp~JRZfV{Z4^C||?r)`Wh9jBArHuMA)RrT()*cXB zi+ocIcKa}Q$JUG!=^|G$2InwZulJB2VFlk)*tf2N~nwk!1A2 zrI0u#+Ju$YNf<>jOwm98W@MDcr+K7j9cSho^A|A16phfOq}rF1##DsmRUK#7{C!vF zL04u`lvkSAU_sX;1L+9+*k&Qn^Ovrx^-X`N*{@@|!PK;2i-Pge(n*Zc7MZMRjI!C4 zccXvJ=TqsHwK7j;Dw10(iV!QWL@J*QD~X_$Hl>yABb7#Bg^=UQG{4Gok*Yt2Rf~*O z-lbI&9u?WcRSoFXN`6)BqSeQS)howUy#CdPJ=MSHtMf~%@iA%?wyT-G*6jJ#T;$aJ zVXPsMsgduku|liuIjZSAPKBn`I_wu;royV2o@zNxL|Mv;=rN1mey`(W7Jc_rK`Wae zSVl@iPA2kX_K}%Ftn8KK390ldr7R|qyyYuJ%=%AH0$(sGlx1J3hm&f4r_?SZ)Wv+I z|A9%>vi#fkBxB}A?vpo$;fdy!#ik!fEtyH}M`LW;$Q|48U7twY(~_Ob$cy6Ye8`(K zM032#GTF#^{nDDlWSK{_nn%%pBG)y?mNf^gHZozf6z?=g)in9_v~ZQQB$KvekCJ3! zk`#=_S-%KZrfpO zCk}6~5NU7LYGKu`F4JxsAa9?QEf|4~l8v3P#I<$sTb3=Z)+C2Fr;K*&KGkk$cg#O_ zl*V)feCa%2O+9#O@A}ZW&D?P%Ter0;a<|&{Fj{x`y=uCw>v^^E-v@@)HiFX=zI)m3 z>+kKi%-#L6DHk7l7}IFb$_dcZ1u)aw2-bSa&3lg1$VfeVAU!oyp1pbKy(kgoxNE%B z&&2f4z5XJ-!Xm#U-}Z7+F!MjZ;$guTTzmCVj)1SdH%qoJt?gG~cwZV`pV-?z^3xOv zxmX#N2Ic2!)^eFI5yWqG`p0|vq|*AcxB8IAdUSO9n9{r0Jo_262ST^{`T7Q6XaiZ) z19%awc5(xzp3UHhe%Cd;eKmR5QIPyhqq}M}6l~`cDQb5jAvdsF?=Z&ZH071cl6hN@fkI>v9Jaq-VntngB;ijjdbo_2}EFv620Nn5RO4ajH zawuple11rAffztc7^%c+_~l6)=lN>z^p(>Xp#kp~L=hJrXZdZn02I8DywhQ0sd4Ig zkCD$~8Ykn4pGy*U1^d5}kPGJE>nj5O71t z2Gy+uO=h=`(l3o7QGc&rB)pF(E|;f@p6|qQzuxTF#JSbnihy3|XT9F`#rI>&TL+73l1M>zpfEpBqC8krSPLr} z#4C)59*xFffMVB86fVdf%GwlJ(W8eDj7%SlqlT~rT5Mril$2jA(hdICu#A7Y41iWb zi$P(vD1$I;fXYrog#&O>US-W$|2;Mtbw-#N63R*hu=6ZS=q^h~f=L$~NT&?%JXhVG z>XgrX>9e7N9P2V9Ksb2fGLmF1W3ojsL2Mt|rZIOU2tJGqs|oqmNdj~)jgM6jd&vhp z_k+S_K(mp42%Dg1$}OGM-yY$A!gQ6dB+slt|(nilMYPk_5%#1Aoqhs&o=*c;j2ztZHrSGYRhKov(eOM~YSgA?kw3sL)|3 z)aYh(EMj*uHbn zlI6g<<_IHav$z5=q4&fr=9q=+D6Hf78&r~NM$RzrnWOh4ue#)fwa&-}csmm96u@2$7!t&y$<4CTt>gz-a(_x&d+q zfRK5KzB}*>``_u`%2rkOe)Zq2Y?A}U#bLgY^FX#;B#m8ys2!rAT|LRYFfNeN4o#z& z#peYxSF1;Sy&n;{qlI`W{+@;@kj zU{FTrR-&YIN|(~gwnL%-W0-aWF1UT(wpR}VfAMYp`r2QUYP2FZ-esaX=+ZaUIHb5=rG&8vG|Z z!|k+R|C+)*uR5s1nxOx8JGA$q80XK&8uyGOXjal62ArpAAuw5`pN$#V`sHtx>n2DL zENQ2l54rC9`4>PC-W2vj!6w3rzT6ZI!lo1okg^l*4Zy}2GTYt_?Fl6iMD?Ko_e#bh z&;W-ToJKuR5h1A*(Soo9W^^Ee<>+d+8ySO$!>qfz2PqBzBR&k*vG!8=wd zRjttLPgOlptJF=Cxg%3M)u=Td&*a8j$kqzLn0Ami&w-GKStA$H9t~upg}vt6$I4dU zObbAvxt2d{f`kXK;NeXTyjjsd_Rlu^ruwB-k&m#elpQ|bP7I-Wd>AIqDNWZOYbVW+6);nB5!D_g1LCIzMYVc6g$(#r z3xrey+uiJM{Yfyp-}*x^g*n$`J{zL?Tkyg9v0@2?Yloo^P70G~J;)HOus)KS_TYAv ziFW@1$Qx?T5k9UiKXDE=A3Pysp8!1k(rhS)NH!E%2<_TY<%{BarHYEWF?Smyl7`g$ zF@PeB6SluuOD&FxEv)RHnr((1;zBs&t7O_2ElOs=!9z_>#EFog0{u*<$gJI;$fDVX z6p#7=Dfw%J4k^w3xE|?ye;Tf!g!t@NP|+L+0n`Jsh!5r5nzOFkYx-Srf5&U!JKM_B z?niu@7!}Y<>6+tUP6u5NScse(^V^Vz>iIckCykOb_4oAon`zKd6P5=$8zfXAYJAX| z&6bJ`60u5B*T+QUp*Ca=n#?vqf`R8djK)>DP~w!W-Hi*96gzMP?Y<%#O(>;nr8`-=jF%Ze3y^A@!=-nX`$UQpg2MZ-7h3@1VmTWE#s3Pz3HswhgXs9Ob%%ARM-8a!kwSvOYGC|H8vX}Q zmE*iT!j6DBatix-a@?u!zV|2WmM^Ct4!Zy{P*yI2dPk?nBXz_N?frkwn`3O`==<#Y-pi&2>{|B&g$1mFMni*W48Hlk-w zDGh!6Nox;b#Y4nl0;9dV?ZLJBl8cG`e;qyrydkrINM%dm1Jyz5@c_~1B{3uwzz>qn zYAg7>hVzfB*LR7Dx><(0MJ?&Q?=B1Q;X@8lxN|wndtuG7+@U%rH!%SI>tSJGYBX9t;R!j|n9+?kuoSUrh!6eI5A3%>?Mb`<>5Z%u`>&3J`YFB(EicQSLt{ zkBS$mrKTvjsP!kG86CXeDyeV`n@}ofQxfG2;MP#M(ZRCM2;+c!SXov`ZQaSZ@L>?} zM$C3Y=cj@l^DBl)SmzS<7r)1(pNznX$fKNx(q;6ChyD4fPG_GhOcf-KL{m+>hYTPg zY<9Kf&b%guX=e@pTl=w}mqKKGKtn#*0!;i0zo?to)DtP!Wbto1hZXc%F z{#B)Esh>T_KEn99NO&q4%zdqrFZszbVIoznQPjBD`poe2mc?|#1b3xi12gAdDr`}| zGpx$B;zVD*PQ51#zbX)$&Ja&qx{GbWJM0sS5#~do-pGW{-k@U5ZJzFJnlZ-#&B23 ztF}#O^L_mU{5bKza@TM{c|%V3Tv*rjL`Ud}Ah3#Hsn(4$aOP|K^c&$FNsp%erN3^0 z0s3rQ3lL@J{Z7a5=5z8dg;fqWu{CwvA4|RTR5qc?p39h3ZtveHl!xg)55tHiNxV55 zYjE`&zEM3a4Sqy*hz=Amq9I-$^3i-7F?S7x(Nor`Pc&6Sf@=87a5 z%(Bug)S6c2t2$qo7z$cyEv_smbUIf$cUbD(EY5VGx>N@Wo;EzEE)7b!)atWZ8uP9$ zPwLgye|eFY;B*kx^{3*+cMo@;{t1HtDA9gZQm2T z$m&hoco=Z)ly0~1dRYDauduikLCDUJINjix$E}yJ^V0QA`W9}mTi=0|ZK(R%Hu3Ao z?zf%xQKQ;BlxXfl{V(=0No%`v^pC@;oep1%()ZYd-CLgo98(wD_ume>Pas%3W(>pWi=j(Nw#+Wq*^IpSU;jFa?44BIh9s@KThoMm~WsuFaNNzrH%G|>BF5s?~{RLaqj*FLhQ$-#7Se9&C1WFMd?<{k~yx>n0YO56EKP z#_sx~#H`okZR)v;aPHRlS?@Y2seW&|)P2lVZ`$JLC%dI?Iv6Qz3)csP%)x)*zJN=1 zo6FE)eO!I9uqbpGGUz9n`b`vPx*Hsv4Wjuf=dw!tdOM&A?~_coA_t=%jW$W=Rlz@( zA!c)=4Cx^zzM=0zsXjDcBZKxY8BGq+UepQEs0TpQUEQdlvf7Nnar7j$GOy#2i! zr@j@{Ga7n{999fWHwzk=el z5JIj)_f@NdlB@U1q31k1kS{w#_a0$G7U;iuosYU4am*9uSj|6=p zyDft0Z$-uX#M^6yRr(~H`q`5#SXQ zxyO)9m-xgKXpLDc<}*{c(ajQgx;P?bRWrK zdOrxcY!89_7J=f{8zt$G>=;Si{sJ_vPcDadKxgU%p)%YO*)>wXo z?5}oGKkzG}FzG?_2oj4|SP^j<{_-Ev#+T%(#&)^7@(Dj;0K&1o>jd)eC_);zh?0W(@j{iPvvv|UMvyiJpwo-5>qi-A zRCOECzbi0#Ks$v|Ca+&Z7HMM$W)Oew1I4WLo0$&j zIT67cDQ%UM4=T{_DiYk4q77xzV+ZQW6Bi|;H-GN)h4qM$3o6nhY%J!4`3cmV_ zpRh|{nVXk-!-#-K0_%5}^Z55WNiV_?>lXo^aaF&&MSH@fyKQwvZVf~EC4cLlV8Qwz zO4ZQ4>c9^52xqYT?o!k^r)%I+*tq&ny5(3p&S-4S<@_Z!uH{5$O)9bF_%qq?NWMtA zcWEf<>8u%+;TB(gky*eNSczQUOVwR} z`M7bmE`ze+{Y%%9aAWH(YWHkrTTp0Ub>lQu=dht+r$X!`Lv!cX2Jf2Qa6`wryx66x zVrRj|AvXQNUeC3&&K=rYKF*eBc*z9|?`KxRbWD<=jp@MCrhvlM*`d~J8cHky!mTzhHrQ+ao)L}%%VU6w~ zbETP+*Wo)5#Dr%2hGxRKW*pU#M1ye>OgP2ce4Ev50n}bC z*mV84yb+_AXQ2v}w?>G+E|afT?Vz$zwSHhBAJtO8;Y9h{i9&>>Y^o*q7fYK_%jlC6 z@4$mrw)w7oC4VBT5<#od^%Ltir;oCyef`I6L`P*omcyA=(cV_bt1Jz8P@TuR@9N!`ekS4qi3ld*3&O%2^(jl z-q_D^kYQ?2eF&io_& zWyZ;c61Uylg8E;o%je8;;{? zSMdsLdxeK~`Lbabm1!T$bJhIa4x@{LAWNOF$eQTFo*37G!MlM6)Mp+ zZSWyEaXH;b`$@(?^m+nJ6d&nqkT!>`-x9LaCi0s@WYA@R;!-G+VhCQh1FIs4t?QIw z(vGj{D(Bsj`qH)U9|Y#$z`7ohL*-E4>KmRxN5R2s6K;o&t^V+#kVuUXGh~b$NLZk- zL~=BGYBf4nmxG_d4PfUu@aekM-$BMwqYWKE=g8GA21zjFzh1&sYDT~T1->%?)&bx% zud}c4-JRhrZ_(9+$jn*X5ZX0pmm|c*lhGICr11JSV9D{(+}5A9V^&ts5(}6W>+n5{ zOb-F%)E(u!ZnSQ%#vXkYpyXtHeppsYwq1p!cqo1(4-Ow60;YuZV3MEw3exe{8A97* zD3)WWs6jza%E1A6q~IvKLvm=u-#*DD%O+BI}`5{d$WE zIF${d>+TBN#F_-KUp?dZ;R5|hClo&(sVPPQ=x9?PCG2ueA-MQ&8JcU3zMI8$XYFvp z?1g(5F{nA|dn?+k-33L4T!@m!b07y8+0flL`vs_e8DaQ7`Iv@pF*f8r))x@+>j5;v z;K@(yE!5i!xOEYP!H!Hls)%1^V*i3Wv-tmn2sOV1X2;oHh4egl{{(()e!Oiv7`uhY z!=%RV-2Yv>hiv?N*}rhsKX}uL3v>)V!O%beB8msd;PO{@03w>)TQj@R-Vl6-&*f%U zGy@T2C}eAgS8s-*X(VG=%&%!j;+fQ$PKU1Plq^a1P2j|48)- zx2e9JIiwK&Bsz}D{~a~5rFLym`P*m|lU7dpI3gtUy{fnqqj(Mn(( z^tZ@pVxF5|EcEpp3LKJ%m|wWM&A!3H-%u~}g-uX>_N(l@QrYtJ!z@Z7)${_)#Y31Z zAZ;WqY3yAuy$!ZSx_tG4FwuPI;AmL`D&&N$Djoqx1#KL;$*Day1BFPDYe)uPl#{~hymIoio^n~L4Nh>6J7wAPX!!I>h%Xf zYXHGYKxq)cv)pMe@BXEDN_8U;ZyITjth*Ap4Xc~@{7;a3H%9ihc{ia<`Y}dbyYq2R z@LQ(ICOWQAl`F=)SCg>&#mntMdYcgEY}F_%cHeeE=)*Z#!}<1E%Twj~MNb`7+hzYr zXIpd!IlI6$l&K5$d@(Ne(aU4zi|yl$gvpPWlZDsKf)DB6Ukg3PMe29XZZiB3`s?{h zzx3~!;&|ut-J8eGm+9Fmz30ca3x3#haN7%dwGSh8HiF3f#{+5(Up35ZMDjyn328e& zqA@8H_T&~U9#da3EJ8H>ogQ2lrT|)j9CX#s8K?w4mI`j71q7%lzQWx`sG&ZG_3y+2 z%g>NLCnFM;8U!-a0swbCH4a)VfWqQ~fc@VlCzVp48-Di6$N= z9$>FDjWCkSCZ#muj8|3;=BhUY>_BhoPwgO@e7P0=}9TayNe3pFXI<+Ye?nG(-&=`CN&? z38v{$%=+eC8bP}}#C&SCiFD1SQ$EN^Oc|o5y(qde`It++!k}CZfZY=TYrRKZ6uJri zKet51P+MdH9RSGyLl_l|&iSd*ILgd0kI|4$noo^07Ng}`#qH39?=zm7A1$pGR*4{+ zP;}OmVLqlIiJUB%eda!w6eXIUGz23i1m)9LQPCrDsEmDfQTtaSUg&6KZ9pO<^b5&h z{KT|UzTIkiNH&%zs+eY9KF}N|BC#p!8*PC6BX!#!{~P#s`AnW8b&)m9LDq;=9H#ju za7r#1RgMWKj%I*Msxh`@%tYuNAdq{&Rpvf!Mb(h@8_QG?p*h!|3^~KkaYsykLBYAR zE)F$@K^*0?;@R4}jFo9q4gOMfq8z9K7ss!FY=ZZGEO*7P9-~D>#owE0fy6LG5P}sj zeDL}Dke_Z%KMwv)@(q}SILBH^V`6Fr=5qney5*{G5NClQCkS^(iIFoIkXfl%?nTJN z7A_hF^vCA5BWSJ{RqQ_w?g zK~fPFPtLbZ(#Kca!34O~&6Z*?v?59SiYPfQi(9z1r3Hcwkc6o(neLikzG7AY!RqHd zy&(vx49Ez3hWY^`pcb{J-1)6#+g}Uhe40I5)oJqPnM{}NE?sL&bBkF(1t@w*V6}E< zFg&eorehw!Dp>MKsM8w6evz;EWN7@Yh9n;#wLelroJt7sqyr4?FPxC75$#tRMb_@v zg5pkoKS>0%BXCp&+oyx?CK5Yh124?)myJ*!xx1c>?LO)J)d%B6bw_=&Gnzi#1caL# zSvzkepb>a7B|X&U*>AO6Sd3X$8wQZfeMG)qe%qsY4}?X9U}4Pw!XHYsOwZz>ghI%Dxbiaq7>g)D_uds3-?(s zo}nxe%0qHX4MRVh+q_9~JU3a|8HD8eR^|$2Im?B`^i2CsY??#!@Wu6l^Q&CdaY7q% z_cZBD=h`IJtAh1~-z}Pv_2{c7)6#t-8VYp|E$LqYpr|7^M+Cds%3pRdb?DxZ8&Z847Gjz8LamEl794&r7Zz6OzwiC|WsQr7+7WvJ)*m8ay z)@QDe$$h$#p>S`9jbX|nFX*9O#vt?<+E?j5g+swvm$~oN`H8_i0P)Fngq-rsYQj@= z1?J-0CkS8;;I8L*JP=00pg$EcemmD${x0pj{)NDEjpp!2B+Zins{S}7)^&G`cE&zH zV`1mg_E)57^$D?sNTs2l)z&v0hHsuIA|P8Y7cOG7?*HuLUmtoKLg_ZO z)^|gp`V_C06Obi5w9yX;XFU&}t*f7RsP4cDM(?Omme60LBZZQU2n@gpO z=&#GaMk>iV?R_S2(0?J!65V`lf27~!If`EzQ70T;uY`F_4RL184vSp&jo%2Y*d%o^oUYeH zHPJk+89PPqLtDu-iZlRDGc%5|`wX{==>`{^BAEzNohb}wy>jrb!K=;KYeSKi;5FOj z(52|eBnK{0d}8I6hY-eVhG#CNEKrOR_5S z01e*um-3;nW4m~Q65n3E7iW{8W=Hj5AK2n$(iYaE{cf}?6OktYo8#eBlA8I%?=a4f zVMM!-i`%+GH;_lqvn%VhEf|(7gn|4K)#szuu4FBVAWj14RiUJUK!58`fl`v!#g@QXqI#C^1_J<00=Ba%V`Eo0rN)vxsQ zpTULS!oGczpqGQt8)?uRQzCu{S4w!kz~RW$SdX6~17 zT3M((P-rys-=@gE^@5_M!;a-lf%QJUrVYKF-o7mkgD@F`29c@tExq0O{w`k;jwpk} z#-vkNjKc`3<9?yj=RKEm17`#fqZuh}~`` z2iCm@o_~$KKVy5Z6j?1Wcz@0JJU8vbGy9BF>`Yedkz3?9gX70zrrjG8pa2b2D-P6y z2ALEG*+7F`ih~uPUNEoXkSJ(qVsU6DG_0`rhgMKnV{v#VG-9AQVgVxnXDVU?8ns^> zbq*~Lfc}I*qftwuZJ+>lNemTZESY&E8)F<#Nt_U4yhKU70%L+&NrE0@qDe`j4P%l^ zNs>2Xa!^Tf6k|$aNlGSTYGFxgC1YA+37ia<57@8_x|9!kvkV254@I#ICzcOqvWyg# zk5saZHkOZevWyLsk4>&4Rb5fBU(;7zv$5asRNV-%-%3>7DzM+FRo&^a-EUu`G)u9o^X2K! z&B^b{uC9Oo095Fv4>FP2rZ0%Tc+(Gy=Wx>>ECJmLAW$>g3M4Tp-U^~{Iot|{1VOh$ zXcNu0L!pJm+hHt?huh&C1JIoat_8E5NWT5zohX6(!=0bPsEoVO;zZ`VF;es;yRmXS zN4s%K5{!HCDr)9?2^uCPdx<(OM|(*IL5%zVOD;Mmgue7JH-hK*FfUqy=_o(`zvqa8 zWRudP!gQD8qoV8}rsLxLM2q8+;=u|^$yw885c7HSZldLR%VA;J zdFyE=ad+G00P{ur?a1nR$G3&Di_V+vlZ&Kh)b@)mWLxwLi5H^s%Xl=)_{(1Khh;kn zTuCeY*jL}UuG)xQt&9eUttos4X))1jKS8o|u1B~_<&;M#>R9R`*%Xm)hTa{pd>h9{ zkEojvE*o+b7ece<3KJ7kxt*5#nOy(tEiY?Bu;LeryEzS0jfMer(=+Zs?clY$MWc@- zJR{$dDjNMv)#vV4>`opU$IS<=U40xMbRJ;qo;OLn)88Lh|9Jgiru?%RGOGSZES%w- z&n=Rd;BhD3lJ`+GNxhQaIfY^FaX{w@dq6RbN&;t+beU9|o8^5?+T>-mC#{NM9m%xnNnsvA+_=Z}{U z3;%E!IsuYPUvNY=@@#N7GLfb4$6x743`0FQ9+&<@W!Wgf^BmsXmxg!mbHp|p+F?+| zfHzob=xFrO1Pjr6Oz~@|aRuGFnln-Eb7eEYx;;(EAZL&6Z3QDddkm2tqW zosQ}vSYcO{;GI--8sVhgdn@W6dP{vQ7Ng-9DPP+ihQLHjlVOP6xulMP5|h%?A=k`# zX=v{9q$Hw7W8McCtrtUms<4Fh zkfA;ZI6gl9w899O2Es@rn?7i?0Ckbv9+URth_5ij01uF*VJ_DA1A=|XoyM2~)hj(Bpc{ol z*vHk_2SVVJgv!(Hi|qvH&BF+!1b%Z*dTiY2K2n6BZQl9TTE(R)Mx>yJl1xYiT}2*v zs=r4;M05)jhS1oV020D}|1*xdC>3UX_m?fogCHLPY%YTOx6&_mFB`O;$b0oiJ{aZ@ zt1V&z(Em3z>K;W#%QUVinpCE`(S}6Z){p?3J_w!eTd4mscUz%t=^ZPw>jEw?6 zU%u{Kd9NfSPBAa)&eYFFVwwECwPFn$dmf%TLpgscI zM|Kc#b|}`mcAyVt(V@bDX%0R0uk&HGJxET zu)IW<*>RFd$*rQHHPZRyTWA~4&WdU-VvDbYeYAgmXLvF4G{P4I$lMK)c*ljPg@rnE z;(~*Et#bv7qAS2oWuTHLc-bTDIprT6w%K)oap{AZK7%yL+iXv9?q#~K`+~EJCTz!m zjf{`%hHeO=An8Th3|#hg`lI_A=PKm4>Nc9CdUJG!o&8PtS_Xaq=#t4Vl$(kD4Mh(` zWYfOg(=)n$hL`0&;q5Gw&bLfN0R2)1QAFGhk*+!$fkmkoKiLP&q)j@iweJwKIBfBaY>#w9Z9t+mi`%smEKtwixU@VqcW+!8kcvz(rJX>q%Cu?;u;Vm1UF89*ik3*#bfhOql@HA#Li;y)}?XXs=(`=BD~(Od~xE@XwWaQ`=%~hA=K>Y$H+wRMC;XT5h;%(WHJ3? zL+g{}tBSRv-dzzg>O~P)K<4bWf5xY8>8TKk4%cKss=uxdf_dQEr>7xZFY-G;LKi~O z#2Xz!8qjw>1d3tCF1Z6_Iu34At2WARKt4#{+L3<~&)9v2uLUaSzd($tuzye~&{{|_ ztPVe|*65I8p7O%<9H-tR%_R%t(mLqyU=JxM@!j$RQ>W1SWhETZ55|oFKYEyunCx;@)4Tfgvr~()7gb}#1wR-^+be%g zWnGNrUpqp)YcyOhBz?YGK*k9Gr%P`{LZ6m5KEEY&ZWlgs^!ha$2OMwty`1rI2G~Dv z_~&c*XG%g!ZrREXeCZE7K|*?P@#;27YR@iu(#(tFBQ>EVGgmk{F&M{H65hq%&C|la z$ilfh#NJy25_roN92O`p1qm;5hXWaapaxX*`WGVloPIaHxXRPCSNs!nwvs)10%O{BUy!Qg{qN<29Zy1 zB7Z1HwWfY3m-+-}WGCVej|V|EpGNlGG@MU`=zlcRYBZ~J_gB1OQ>Mec3**#dU>znT zAGIXEaHqOnWV)BKG9t9f=cfMM%miw&3cRuMIi!OB!h~XF`4n#TN6Kl?UHVGu`K%|u zwWLDxU?N(w#ITBcar6-fg_R_N3{RSzK#Pi6nu*bhjFyL-UYd%T5ytd#gomuf8hMH8 zH3}0CBN;0rIr|YOCCWSD2(C9C&)@p?qDw4%L}UU)R7Su*A?5LDRxW+g8HRp+(bmPt)VU&}a3k^eBCZk!660W=uML zgi&;AgnpugW{#0zeu;X)gJubKPrp(^y(Uew!I(MILceA8ETZLhO6d1SGLDv*PfC0a zw3sd;=&w=Y&UhGpS<&C4e7-9AeA~kOTPxrX5d(;q9x*Zw9+d%^m>w-M@rj2CW zk#9!nUPtCIMtX3`=ELoFhfE;6Pnf(908 z<`rd{7jYjK!59l;dW&FWBE^j;#XwN8m2t6ZZ}Bx;6bQrQ=gGF+>&2-Fg)k}~w2 zvLw{5|v1x0GsN^8C!)f`0D#P-%)TGhb) z!$mvp=R(I|)HJdLOeA%$PWV`uYwwn7yI$7uw$=4q7rp&mBdAl!twY5An^?TeLv)2i zG749Aj99LXT;T*?NfuWnidYRTR5-m%%Z5jqq*_m>hTf~xAj;B2r`G6qh0Y1Jh7Gw* zI=t;O|(FiW=eD_VS*EN{^mVZjPvg%?>>8Qxpk z`kb<_DK>4TI&E`UZIL}~oF#2LOfB7GiDk^;15qs{vhVxQ$U374C&m(nm`Uo&8j?wB zW?&>Fb6z5eZ5_N`v{SO}VsJ5KG2Yfy8Q&op+z7JmxVN!FC~rsdPPy>vVI(QQ z%CN>6@5GBHB_!>wDCv0`lOR9s9;NJM;!mUTZp78?X0YucVc|v9B?j~3p|i-pMDKlb z+AhG-Bv?+&Ff+ba#l+chL*P@#|O%89%l2gpvl5>~O$>De)FZ5L^R5d(%n zIm17Z**~E>jqT!n_AXCfHBTZXwmHT7jSD<|`v91EQ@ID{+m7Z%LxfT^L~rpbSlnu& ziBjG-e6j7-q5Mck3o%boZs3eLa`)^&kM53kwQdS5_a5hoAEy9K@={JZwU1-0;wdz% zehTwlKalE--It%lGZQh}9SCd`d5P2@Ih6TLa z@wfNy>t9R|J+?E1qFZKLb2d5bXaA+{zP{}n3WRl}l;Nb~C2qq>kZKprEkJfAG^k>YydYMT@ zZ}(3ZO*G-~KV3A(g#F34*qS*3tZ!OZQ`HvVkoBe`Rwp%5bjJ|cUx&{Lt_={A%>PzK ze)DPc8ATV0v$tq|_n2s+^`4}Uo|H+_KM|ksvzTzgn2IOU-)V5xnVGifS=bc+E21w0 z!HLfz8u~v)w51$QO$UzkC%g{~hOWbgc+eO)vam4zB?q!8xcD%T;$p4McMj0J>VZon zz^=ow%&MuW3gZAcqE;(y))JLgG;<>|nvFq@a~&N~k{GMfKGV6}E+pnti=Xm7Qa4zS_OWFoe5_ga?TT5o}K?Ovfo#62p1-MEU+T@ZdPTo_1*er zJJzn%%iW)OfU_P1rP&|;YWD(r&n9<=Jz)Rs%tr3-!844lYh#3007{7B64+=fUJ>$H zaUZ4}v$vYN|E6c3?Bu`)w1cCz-XjP3C4k~Nd0?Txr;L82^EebG*Jdw&2z|LLYI&g5 z}GTgTY9kLi5^ZM+W*pi06+lV+1XQTg@h^~`74qfXV))`8Y??{Y3qR2f$ zb^4TF0rwDiVi|DE&UQpnd2Bm=Oss=)X^c`Se~Ms)EIAEY)dYeZQ9c7m#_Gr8=bJme zgn{d+-IWA$5h$0vhr_z(zPYC_oz8pG&pm1~o<(#aEy%&0=tm6ppRD~!a{Qxb5$(8k z6GJd?1ipep7{r)CF(3n7VE>fIqxpx3PVKBe75D>&s$tfNIEGPgxyJ&K;RK=}- zx@bbBZLvr^3RF@{r5%Y-cn%~>MIi|sdIgB*;~f^NFqlyfDI5Uy#*&b~BHTmGP?MO{ zD`|k~AA3Woh&T+I-8mq5#Lppr_f@F8d?EI||=pu3YW1ce78V!s;}F^mdkLwI!`|5 zj(|`JW6-o79bzn;RV|H5vbX+Tp(m^Rw4Aq*sL3YuMpvcSDD~9`it$=L+Sr_SM0`Y{ z+}<%%T*ntl9KtsXi*pqQLs?|Du4ii7v!ozFXi@g!!dX8Wf=y6a>j5?2cmZ=CWHE**#VPOcc5v(Pu3 zi6ilbkwV@J(c(p`&U{eUsG_w|yXei|ngj|7MKwZ0@d$EXbBKs)>Z9?3sBtkxKwpvj zSwYk|^7HsQKDTNU+P;4f7vKDNw2RZ>MSyG44H*u3?JqtduCey|g|$YG8^)}#zMexh zE;24oo)KPv>hp}bzd|L0!C5Z?6eIeZqGrFV3EQDYKwy%KaZoCT;kVm3n4S9!u7re| zSz@fjl4X91d0K9OTnxuJFB0pwt&AP!@#zp^yx|ZjxA~SF8N}nBut4v_TotVTH4ybS zU>F2PjA<;Mqb_65>kyLI8DrLguw7=9vdSE8w9Mh`@P3eHkhgY(sjXagk{=D=^hWv4 zcb#zmz5UuhTm1(=AIG;#lVmf@^!>nd&6oc8L&IBPY^&Wni{DUC;ixG?Hx0vIaJ*7n zrO=)-Jja7`+)DyEgN+bJuM^`wOi3r{zfGRQu@va}gKE2fCRlp$?llQlxZod5I7mK7 zg^6SSxG0RG_jac!+jIQD;KVW7HvOW2-|G;Z>rwbtz=e0O_*?Yq{QMlD~_Oco(Zts-A)YW>CpE- zHZfcYDW_=}nS>Vmr0yK?IIi~nXwWwwbe;PHSH-~G#X_Xx)5wD57!k~z;b8e31bj|^ zL>WyuoXFyaKq!b>8t5k0SAx@&GJ1ib2m%KhzHL8)81j^(joH)2=^~z4YjRQw+u{Qm z0jv?g=9ejK1_&~ZjTWKP_q`l*Ntqwjp-KJuiJqy_^5%%KnX2=&U)9S3r#B5ZP*W%{ zP^6UUc6H&T7bvilYXIGHC=t$ZyXweGe4l8AYy>loH!!&OM)-9s>73@TGU;T@tQ|kg zekPumXdV_t!UlBF{1;568D*2sY^~6Q5X(~w8c`4ex=hVq&s!zCRL*7E3GefzOTYIZ zugl!TB0D0qYE@_JcYG29pJ)by7Dr+}0{v8gGkx6JuX8szlq@C?2S3$Bg~HGB=S#^n zrI_Kj+RLIl|=#jb)MD#Y-x`LFI$+PirKJq&{xaNW^x z!e15SN>v-_k}6I(k9AxR)mz9TN?gxK^{!B1f*t2?QmcQQVE!i7)T&6T{z-Cbl%A|P zu#8pxN&HlgvJ7uf{`=?9XBSPIz7+i~xh}2j)JXKV)SN=Zjh4Rbv_4dG&jzHH7FN2`am>413?-vIYRVN;l&AsvlMc4;;H@F>1115Sc9mMZuj9(#SE(q`QgHhu25sdmbPh zz5F7!xs~c|O}C8qGA3X10HZp4bkzMe?Ds79m$yh9F=nbsX|^X=xVY0oY?^h3s; zxA|KW=26$d4_Rki7VmDCru-yovvgc7gb9|X!z6wNqGVc1a4pZo##}~H3RwN!8u~-; zXTh5eD|xqvHh~+LVsQa$Wu3Qk1rn~MY8}TknQ8M?p|0g-6Zjfa%io&@T`N7xZS-%K z7rH*OKD%gJV*-+{!Dknp)Ny+L>e)qyeypcJx3mfW2+o5^(TbXj{E`cG16{v>Y#CY}&kl=bUUnYiHy3Z6$rMkF8Ps=LsENYrkM8 z?Ocr)Uda5Ff7q5=kk>CUD7@R5eccC#_^$$dymx4`&w43%eZx|D0Cfe-4)nUbL>Fdunw!S_J`=FUe5 zP^&tuF0Rr9OOgV_is(Fe2S*WV-&^d*x>V&`%a0=bws6rT!M{?>okQ77k zJaZ3De~_8anLp9?I3G&OZNGNN@-s;*U)SPt!{uUD^IMguDCMNW%bH zngS?p6>e}Zn^;5pSHT^jXj)Q16K4^2u|BCbVP6!{b;3RtQxTH)eLP}4Z&(^$=lAg^ z^6}BU;s4erNW=e*^o<}we++!9sF;|bY@?WIzr<;aNa9P$#D3}3TJijT+5Y~QLH+Dw z{qjG>m}>eJa0irFYUSR)6tQI&&gWPA_F9!wJZwkgzl=w)dz0FZ zxNbSM%u01JI3k`QqEs0rnJ_lBx+ATbDPtPtc@I$zBqmn~6X1@_*NiN5M@>qLEDi56 zRB13k7#ypuHxetk{7oJ`{mD#MGQd$H5RCbybTCB-bI%YHiXt2xj!A4hzz?Gya{kt= zL(1mzEe&lX&gb*HKp;NkD(ee(e28LvfM-16m-sKdaewX5eSAm;DbN9I&IjH9 zrf1ygbbKPCW|@<3m4zA56zX>ws|@T37RsG>A${{@oRBz@C~czZo7_sf;Ixf=$kJEf zkeU?%NPRCI>@SNa0&W$fYHLR`+xjB)W0XBw{@}6x1HVF$aH?wU^N%{Ypg5V*#IcoJ zS{*8|E-Ik+1ETLtW*|bJUtZTOHuW7k?RWn^D3v%_cewPi>y8C%J4=V$AYGeF4G57m z7?CtB$%4%4;8_&~c@)}prnHGNgVFsltfn8z3pa2X7AT7szho}wG6icE1C|UMpe($C zVt^s*M|&R@#!L&gau>5wpA_RFZg@(o{GbaX+^d`vZdegrM<${tN`|%)uvh{dmgJ1T ze?g`^$*epeG6FoWB0`m<#Q^9ACQGdIpze7LX?aY&Qo%qO+e03Qr(zIy86d^XULePT zp|U|dCxkAZi~CL3u1rL&UGzy=9D^OQMj&k`BB3TK^@~lW;k9hYEBSd|g@JGFGpg9K z-(*PClo00?&C*oJ>Q&9y)%Dag)aJhi%rYjH)#J#}>~4b4^c zQfduR)`hRCQ!ZxpA2PqW+ARopX-Hyx^K|9)gq?|-Bxv~DYxop2dx>1Q_f$EoPQ-IzNiqg&{@A2^GlPqZ!sFN?GtTP?3<+oyxKTCE#D8C zDK=X637S5iv>@qAFMO7g-VAk@ExlRMvOm)zXw$O&tz}N8jlir;!MCg>x9m#2bcUv# zfe~A9_O0*@PsxC4*+6|!!`pH-)k+_=3N^m!5bYXV9mDHo1eTQ=#PRxH4RsA1O&Che z1L~z@JT2l1Z5?dwdmN2wD@W5S47)nbXsexSFI&x;yUetELsi04tEvzQ* ztS6S(AiLROz}ohG(ucBbQ?toX>BG3`8Vw0PZttrYQ-m6Ov>L-_ZBwzeGT}?GOBk|A z7U!Peig7uX5(GMP#@nT$3GEHfD&GkI;hBYbLtzP_{4zT=O! zJIHLxL$e{6yeT>zbh=UQ|!7c7G%oOX?ioU%bLIIcVhZx-E@q^Ob*TL z72BQ&pBZ2@FwV9W#m`@$;%RKBCpjjZ*nW?ZI%#t1G@mm<` znVZY+OWPml`dV1%9}LS`sKO@9OU4e|@n?L#_jvl&dy(@7#Hjg&as|@y`R{9msA~l6 zTYPu5%r!f7e|FL0mKbH0Vr_>RE0$(z`(YBM-6xi|NJqx@`!q3!pD}9^>^tH^c~azG zyQ?1^i0vh+bETT|WSr+j)0w4b9id%YStsC$sj~JJ#_%4*z70 zV`J_8)>^^*XsYbEHS-v2T3NAj!ow_=^^I&Jt|U6}gaH}kRPC-d00J$kkd)TeiEPWzLN`qfX%3wMSw z=Z7YZJnd~q*Bff=tzhGw+B1{Olc8F(=i1+3+H>n~C(aGN-)PKB=q%oxhB%%9;-||u z?8}{M>zFzl-%S$n&bNFcrfAQ1@au@Ep8^|ekR)$#W=`vI(Ro&Kb>C$ z7F5}q)XHyMo@@BVeiz1MU5M3S8z#lH>k08$xDDMv_+y&?PI|mR3FjhGS zG&^Hj^Fp{BX(=q%eG!@2!zsd@H91IZoXOJ|!nq}{d8)1%H_osZNR4q(K69Xi3`-Ok zq82HJrw>PDJ}+?7oJ!addW13LxkGg0P5~=EcE=>ZUMwth(VVh9SPh52!(ZuuEuL1 zJ}?<21J6!i8jJi2D_~j@NR=Y2kRr;(3iNkXqW?v);^J|Dv8tjHT6B{bj$%CJ!YlYu z=+>N0(r9xKF?u)z4g%I2P81>zsjRsRT67OMyo;T}btiBMVed;q_fJOfuW3nqKQrR! z8TsXrI7IUnI1F&4aQh?U-of)?JE0rM>CR*C+$oz2WN_CKyn6_^LW-pzUJOa}4@^PL z{}}s1xtbxa#WTrJxuolt@I{fml|o>%Liu<>adc`Z_dOtW4*(vyO-^|Zv>g0)yF-)`@_=);?{f44Td+FKB3_F}7B&#~{%r&)phy}n^cY+G*t_9aN741RUNEB8ci~T5wT0xY!pCLFG#;slcf(J? z#W)W4;9i11u~5G)0_S6P->w#LCocR`Y#ua$|Cho7hP+6^n-Rh^_9hJhGi|?WCoe&AtTt7 zk}eDZBlHH-5>{1wuujf;nQe}OdWAQsPo zvHv@*gU)v8+sdIb_gmjp&p3%JQ8X-+pJ+h!W?(Rx$g^st4v)&cQ+{XF^lE=Rjq5|9 zXUl5?7PNzMraLJFkv=M`M9iGt+{3_pxvxlTT2*J|%^xh(J}FLG24LccrY>^(!w1OW zSAs@3yQcz$J+7bL>m8h*s5bSo7DHWcqc%QCp5EQ$>7FH3lsR0$1RfJlcjkW9Dq;gP zGZZg$7uBdqaHl!2m=PNS<9raein2|9&Lm|9xlRz|%65`TND8Y&Q%<9x<#NPhq6t8! ziO_OE%C?|!{BA2;V*>vubveQvnN>W~V02g37Zt&sJ}yyJJHkv@TZ9KE*dY+NC%V*cHyjP1cK0CCMo;%5zTv-Y zyF`s<>1eL+Jf+S~u@+Ai%RnBCXG}@2J0?zxl=MS>L61S^Z2F^9tr30$)sA?&kTy9!3=V z-toz2+MMy8wYUX)MK_+neoMB)3-TxQ;$*j76chVBo{sUQ!uYTI`6vW_oy!^c>`j00 z6}YJwlP|wnB5!DL>8IW!!Cy+NjmqS+fVrqEklu)2zXzFPJ7YvQ}#%? zlbv(s0EQoWaX1TJF@O=^m~^BNNWYU2%kSDz#P#A9D`(XZWu!_ul{;IYIIFW#aE%HzG5pPdrn+PDtC!=5se3GzNiocDxgZp7HS$Q7V6^sC zDT3CJ0En0opnnHPI6PMsp=d}+ya*t_oel_r)TSV}07&Dw{^&H$!7p2PMOITsFW)Q2 zBxh`iU22vIwBk_uqfbH6JmN+1UnDzgn>w(~_7V)nrGAb!!QSwgCP&%|6DBpriq%x0 zu%LLDpLo7!6H@qwE2L z)xfc8>YFszh+!dW7prhw&r(HGU2YEFR7uG|vw z)g15*my&y)(GoO02RzpMWgs5&v?Pw1ll@991r>6roKzP%)0Bczt^bbi4sxqQ=UIl| z)U`|my1Xs`02|@{()`+oU%sn8(uK3tkT?A|`4hBj&Zx7b-;C9$`>u}E5=`_0@^he7 zBjp4RWna26-vTgVCI`orbfqL-u^Nz}ttH}V946lG^I2dkEWv32Xf{Gq*D8JO(v8O5 z8=;QN?{0QHsS^nFeMZ?R;{Tt|o4r>X6{tVUe|9eC?cTjA&guM!e9 z2>@EGh>ZSHioD4{qByk$ija1B)EZEplTkHZaRflu1LNF!_wj0D$Ud(F<+uIkwDR62 zItB|r=Q8}sY79}(wxP`K^&~Gj0u>f?k&wH4zyXc`&1pI+@@8*i!^=F@I-^lj84NV( zpjdWg)BV5}^#pq%VdJ>nePdoA?Rz*n>a4$%inNY8-ANu%g$X$U4U3)LaQ+KsV_9lb zRuD|cSt{{8eqByTtxDx9gWIqjQVWkU&|$3+#VZ>FXVY=B?{$tFvMZbl?i05Ij(K%t zpN$rzh77EJWmH8P&n~sHw%DJ4PUnxOmn6z$N)_I0mLu{vE|`g>a}_qOIF$)InEkR| z@5uLb6cNk|eD!_P`ku@dZB&Q$i?J)9D`4sa57aQF*H<`A=;IcpFDTx)a-+f7+S;`3 zDtLWJ4xmnVRB4@Lal2{x`e{FTY=ND#IH2Cn@fiG;pZ3ec$9^p~8(*B}@3x@kG0?OV z{Vnm<#ra{9(xh!LcPlhbf;;|*|2&FXY*R|IW(#xRbB5%bXy$Vkhjsn~ zyO@XNI&_zaKD||E_SSfK!}Cuzrbj3Ct!-OA_w_{`2lOp-79FIU6&5^J;oD2HxtTxb zVT_7F&Q5mTbwMGk=uMF>PbW)k7E58Nhh!yuNA!Vi5V?gFT^B~(7~a0287a3{qC%=rKJ>Ba#&JwUdBdN_xlT!;2em|C5&kD5>M=k zjCfyM%CKS0@1?;i#^Uvt@ExoEpFI8Rh}s)ZdN(0hj}7FAvjcI6fVPnyusRButGYvT zg{H^(J;*^wv*LsS~ym%c2+cpB?_d;^#c#FKV%DkBG6ida>w4wHt5PW zE^5J>6CliLLIx#o?S{g)Mi3*j2jCdunbRx!Xq@*soMq$K}>mKM`At{e{Wpax0qg(v&?SGy(XPIYH<~SeTS_G1*9^ z=ybffy0p0x?eE%#6^Y#~P1^V=}HDA=n2G-A}vX8 z4ha*Kly{TVI-5F;l*ZRYZq?{9*hET-YBBuNs$CwNHkI!9_KFMD+M=A@d+Nxuh^3t8 zl-VbAs$eF31ZHgNsd-B3OtrDi^on3A5%OHo%{+2O8j(xm@kc5V1QP(=ggVmX5i4JU zE{;bXk>?|gxi^h!@UBV@HErb%tw=tLbKdGWHACZ$SajaIG-E;3enBK5A@h8xj|9>; zyTy()utyrjQUs;_U}^k4J<@c^1*h`8u6@2l)lsbbAOhFf*;~g5drF-S3zNH?&VcA=z<3 z^kaeHAc9e2upW7#EDfCr=DtZIt%k(Do;{`6k5Ci+LQhk3H8yj5_d@f}2o|G5mha50 zLJRFO3Y7y3C5h>*nbOQU_sxq7ZLN{);Am~u2kmZl?I)!jKJGev-`7Vd;@+pTAS`mU zMsRxf$%fA2lC$VT@~AT}mGknx3vAOhjn+k?XwR13O+w~lt-h=Ipu2>H`)HJ#Z_#oI z{dL9xbt}DRt%YlTk?U-cXK#@=RiTfsg-0c_uQiGHjfFGJ!uRdIuXBA^4WA!q5OEAM4v>3dt=_l~7s zqP$<8Wk9`rK%ZsM{68-G{|_#j_W$Uj(TA$hv+aeRQS^Us^naq!|A|He|1Y2aM58Gb zI@|C6gQNdHz|rLR|3@5s&n9_;U(S()?C=*y3ocdv#nCmNaV!w3gh&ido#Kg1zBvt1 zq@bG)6U2|d9Hnd0r5?j8LH8eLTVSCc#~pcJH^JW&ek}%vJbgXQ0%K8{7Nh@^H-km_ z9F3-abyodNQA2=op4i0h*LMu-%-RLrFdyjR%LLY&B~Thh{jz0K2gQn9-`UOTuaT$e zNtc7nM%XmnR>kecQcMjX}W;@z8qrz^Y}BUs`K7EPht8=tH$7&=cE4v zN1tE4@bj465W;lF`-AsS98DiCfJ8MdkE%( zd+}SRLugoXGw24Z5NF3ipJsD()EBc42NXkLj(J<%oOjipTaIC%IQF_3M z<90{Qeq7>^u*a)hyi71%hKEy-a1ZHCoyH2=5XEPOThr|-JBfm zW-0aA7{wME-&Z9gLQb!oviLKp!>C5f{~yV8)A$~n*ZtT($ut_HtjF`@VoY3VdA^o* zM3TmLSvVX9Fd~ys6{=!4bmerP3(@(#FYPt+n5lVoPPi18@~bo{T~m#6A^;88gd>DO zyW3s~K~TG8;Yl{Tk$8bBC)EDz3%Ft-ln1sT%zpUG2O+K5l1YJ@gxK>8V=4^BiCV>L zrl0jiLP9_l1T2QIirx*D;(%aBZ|dPO(8+8x%qDko0xwy?VjHwdwTkt5C@%Yu*D|l# z1AZ`4G{{IHE5o^e5rWeD6QH67!nq3orOE}RYOcgH5pQe13cWG9T5d_sS2rtxlkRC# z<$xe3CYD_|`wOi;uq9xd7J=eU^xBT+o(IS>O$IEr_P`xgEO^-u=-vOFOfLfb-=Xms z-KMvrDplW|lKj+Cv`R!2{wJAMg4qF@Hjo7*pfLkONMY#5+;pg2y$YjU`(HAxdQ*!y za%vunrZv*5)|BPCuH;k3u_;5F&shx8gEtIn?0nPYxmKx1fy&vwi1^O4;j6gR)F6Fn=zpDBh2cP6?Z3+AnXq}jMe;b& zVEyoE?0BR$vju1IpV8?094&eUq3<43*(CLO1QUl6d}-4kO!Gala4d}D2jfUVJ5tKfjTv=xaWK*ZUDqQDXExPyr3OoaoiglaUQVTVAyg-}&; zMDWTTLkyBX7#!eAak!4i8sLjH*JPNnMg>~q3GiwC@g*_J=1O$z`v;lsf#*1PJ7NBU zMsX`tyLsu()4csN(vACIPcGyHE&UPmS2PUHm*w*T{W2p@Iew#}{sSsP1*c(2#>~l; zn^Vso@{vd+ygxj8FccO3vX`Lya+R6lXEun;QW)8J(fj=MZbD=HNYtBOeHg1Ah+!#G zh}cN(5dlZq7U4+^WFLd01JEz1M2Y&}9R!T47Q90Cmo?IUkC;$jDR$%*S^AEpbK&e5 zZup_C5fdOz{Y$3%#>Oh+YBtiZkp4-ghj4Q zjEH|uNxPTyT>moVo9Kag1apG)ZHm2D4j$I7_wjCYG;DxHribFL@}J$jPu|LYpXcj9 z`gZ|b=Y%DS~I&g#;(#lz)zuw8UI*F{~|K+5A)4X*gc(A2k~YS z($N_6?{}3vH^@{v%cJD2h%xBF zf?j{BKx45$?{ZdeAjOxfH?S=*IN{n~#K@FW2>IDZ(+~!{;r8Mr^hhZ3Qg1fU3Nd&< zH24wnK{(!@J}%WGi8A z9%^n~7^MmZ3~tzr2BXXFsAdS6f2Uezzm>T^qh_e*~f39TPrDS_6K`TZ_6&_P3lqj3~ zWcOzrO_ao_nKFHtGV7k=#giJ0l5FOd*#Z^9+MwTqAzoc#%rz!WQ z>u#qf!ewB;PJbDt0c!fFvoK{XQ(KBk1=-xE|+*D$ILj_EiYF&f|*pCo?@9(aVlxF8lH4IrJuE0GYpn9j2<#fh%?Q2Gc8)P z6_&HDS{d}166}^UogOkj5NEmaX4#~%I+P~3rDgfFX8A2=c|0(}ywcbM9;icF-NKj{ zB9^<2HSgPBY3aTARY8eW$_G^n2-T6JRmL*a!_HMmfz^<_YHOx+q?2;E-&t5_B^3|V zgT2-8fi-%sYkpbPq#oBSqt^Ni)g&|3?zdK9>eMidF%j#)2%GL}IY=zUWNJ07YrSyl zxYO%;Ue~=%7v%IJ<|U~Y;p5{^uccb9`#w|Kom*diQ&-qi|FlzIW>wD+SubJLkQ3QZ z#ng}wYS7$jXa_YqFQsUoBHDHQPKvI_ZtJwA_un=mN;~44UnT+Eh>-N!<56~+Oa`g-< zZw*SE_Spw_7?2V=zQ=KkR<+jc(H&QE8SjU=j`w)+6MERX;@eR``4ZrLee!n&B zvN8l_!M}d{{>J?MMx&?NB^$)i=bFmtj!w270iTU@xCb;M6ELdeH2eV_pM;*B?7(iH zGsLlZ1T;N@$Y7tv!VX>Fi{!^H9mnn|7wL*7ERW6r;{m7zE*NS)Z&L#rqsQtqAaW_1 zkGo@qrv!a0{R58#E33Fe`~?mgDsV5|xYgdD7W*}fj||;?(s6SGap<4SO+c?E7>uUM z#irPpM=aa%Qj0v`dOSc7!=u$n05XA8F`0AArZB+&aEf)e%Jrgy04o!BD`Ns{D`+z* z3RMmQ_6hkx=xvk4i}Q(t_H3H40!D`S376mrk1|!4T64OEg?+Z&@lIpnqE>SeeV8PD z_N~XP|IDmDrGJCC|9#WgPvyA>=eb|b{xoNEo;9=G=-=EZ=QaAL!ZYyLH9X=o zuYFpGGkD?@efBs*Z$&(q!S1_V!1rf8EmbjwpagCdXYU?fP&`ZUStAIT!25G*@IX6f zBmglK2*V>ZxOip2r#BGBw3Pjip7gVxj{K{qb^cpV8X}pQS)ctpSkr;$#bD$!Y=l=G z6AF78Ph^0UWCoCR7-HNkPm`>e6&e1u({U@IdRl*D(pL)_8LPOT<||I|a=9b<@Bsny z<+O~&qO(c(fJjgrh}nGbH1qYko)@b5Up>8x0erq?i&AU_krNzePCcy*T*^gX7)R@4 z%r109X{1Jjs-v&HSJebIv5F0&0rpREn>>WiS+q?m`=l2!1Y>J>b~iDO_+j4!Vv#>> z)D1^HFCLD?SYgk?s+9}bdScrV2$|!8pm+QDlI=KPZHc_xNkQ6!fU?Ey6`u8U;}ctR z#qRBpUzs>W?paS8uJV^RE1wRjuC9s3V2R7KqsC3c*94Fa?_N3Y%V+Gv%J{Zy&j;cr z@SS|O{=(_FHKdyDzi|4J%~M`N-M+&CHs||p#4d(Z6SlVa=@7AI6U2cMeSTeHe~=gaTDGQ z>fI27ubhQ5fr+c?TNluYUnW2C8#_iT2kxQvG#U5kEBOGf@3GbR3B*$G7H0# zWe;GoA5l>Ne+6}%U0UvsPZ?KxStnW(ICJWD3;Wmhc1wg@?2sb%=Lqz3NawkqbA|-S zv9n(x0ZFlU;Z=*E-*dd#3aqlUjEsVj{z(vrqD{b6x{W&|8xitm-xFX0=LS!_u)`mx+H45-9HN^^doFZzW!M z=-sjz6rIm?gjB$et?45WVJ|10EGBtemoIHK5)8w5X;D==e{W|&lmB3EWM8s$b;-NC zgW}wWUjSixYnfRglYSomi@m#is_NnYf4}HWZ&JFuK|or%ySuv^q@=sMyBnmWyStH) zln?|&5Jk3U`|(pPD05tb9h`)o(&>gmVc zN+(7+fCUVShQh&-u;|_t4~GAVMiZ!+kHVm`(kQ-Dog0irVweBcd?PWE2qPlk*y=hb z2~c7tDxR5|MTfJ&@$K8Dn8t=Nfyl7rVi6Ter4p14eKpV3E1}Wo2%-#I^%||5Oti(~ z;CMRa!em2&2a5C%@Ms}A7zWU8vBZ%^{wg+&%cNCr2o;wsADZov=~SD8#o!Pz$c|Yj zGyk#Gx)GP@_LkEbtS006dLC<2dBSfYh@|@8&PogLs61_Rzb&QGBem*n($Sl|LU$Tg zoP8w<&5~l^Q~32z#)Ywxbn{J`cE|zH=rmtfC^R~4R+TNUVdtf>whhJ6D$V}BWsYO! z@00VIw)?tQ8rQBeO*0?N-<)~9U1Wzgrx&%0MTOgFvV(Hu67EdFxX#dUg~{FsNyq(Sf>4~A5@=Gmg_01%9vE#l4yL3;DHcUV z#b)3>6Q_ux`N|y`%c52V)z#*dNbVH25`gXF5+ydmG3<0yH*iStU)AYceaGm~h`-fo zU53FEHg^a{H^3#zRf=|Z{7&UHC+=4jF(g`USyb{59%78hq0}Ax^xa(Y1!P}YgZXp= z?79vU73RkyG_y-eh?F^xSP&u=+f=n)DrgN$!GJ6%Ice@e>f8vPtR<+@)=X_{T2&R=+;(+iyatObXse4vD)K15YsHIK!(_S!(CA z_=rVQJ99u;7Zee$s(Tg^t)M#@Zi~#zXO)2|{l+TGq~B2}e8@ioQ2@g)`!I?d5!w;Q zgbZ&Q`63-YQY4`+Qy#m!P~ao6l9rlf6e5aXTi5C3>ZwH_O`jDf?ANXBn7T#S?gAh1 zo^~U@Rb)}*xxxw>0lp}MRcUqo0xo?pWBx7!zrCAXTw(&+G4z(^)}}qY*lah#3?F%} zN?-^cipc^fCZotQ@hA^T@w+hrUIv0%3T+Jg2>U^u1${ABGeOyoE{Qg$+pRI|7WI9u zj)E>A-U0L;NRP{#KP}a0zhBGxuJPtm5xefEOv0T-47!4V?$Zww(n6(z-DvwWobHb$ zsIPAL()>e1b!DR|`3MffBHZI2k#1fR*hc_{Z>)kz#C1aolo4o7#avVo&@j6o0-nj3 zyKF2}?s->=o?zS>kcPd&WSn_=GNIL&2GY<{E!b8Ro7Xm+R?_Sa#u6~T=_^6$5jnZR@ZrgQc z-x<7;6>jIF`r(Yl!)1DrL*>I&!p(`OX{2~Mu*8>f48xmY!-ZWVFq7m`on1FaSb|(B z{YgNE;lW`jqeEzcHxj28ClaC2`|$FnVsN^};j|o-N$zj}HhwBRP=A0&8ytcAun6D< zQ-HEH3W&?1q;;HF4Uf91(CMrCLbB1Fu-}nx+k!gR_Z3Wjb>}ffK=>(nF;=qoLXJ2y zrbxBf(qzX-l;)g2aYW;(*qS2eNd(~s7t1wLN}&!efl}MTqGxjf)7-2=ItE*Tl>!;N zQ^6Ct9LxEYLiCtZ;n!&k3%FlgTMRA97tX;G2!Q(rE`AGJ*84exV%S*2)l-aN32$DF zq8COeuQ|Jy1}UdYNtDW@#pD-~)K%!$9hSuk%b_KW_&zmCDAiSipO3ZMpdPP38zLWa9V@?Xc!m-8*%lX)3)S}kXpA>iUH=j z;j*J41h*8jLZ)&h0_ru5_oa$nbxhktI%TsNTpslnIA5Y6O8r19Ew*Qp34)xg1eJP9 zK)xY0IpLI?_Se+LrDHL^oOQlsuLke-dclKSJqGj4ci`Jgo8P$lOFt9ZD!iyWnd0=< zYckqX_^%u^7`Mxz(P&!DE2k2h?d7l9ophd8E+<5W2hQA`V+i>!uj>qtQ={I`DUrFA z)UBQ>zv5o2VD@ehB)W3WQi1yMy+LB*nfT6{PqggTi+RS#4Ox9m9@qXQ*e1!#I{iqg zUjoPSOrHB!`ky1{-#$H=052m35sc?Tund>h*mNV%y*X?VNDf{pXAgf+zllgmH$&F} z4U;}_L|2WOVd+GU(i)dVsLdMT4SXME2)d2EeKLa(62BbB?Y~tsFtos5$(}%*xlJ0t zIYz+Q8W+U>Dw2|aY{Ql_rTx-9q>N>jQLt-TC9^rHC4QLsW9N+hFRtK`-V<=zR!yyx z#~&R1Pc-@ujux`nb$m1Xv+rfjouhT#A{0j>dKUkQMlWp5M@avTM!(8s5Afb9{DY%q zmX`iTqwU%>i6)i*;OIaV<-gJBe3=ARxh7~d8j7P8cI@?_(df=`9#6Z1zc{*)wL0Vv zj^5t%#eZnY=ySAwWzg2+?cG)ZjYeyLKCF%Z6OEoT{2PrPW5sewf<~jIU$xH^{E0?y z@Aesg?>T|uXdQvQ`#(6k@6i7*j?PN^i=zj={Ke5G-hXlQ{89KnIGQhu{11-aIht&E zoRAW6PeponOfU0hx{ugBqjTqk{hD*uO2i|VIOBu|8jbc+{*rJF#nDK9Y3(GQr7w2R z&_tj(y5F<>nOCij(Vj-9-+DX7CrzK-&nCZru8)a4Xoc=x+Q>YWPW5|t zFZFrzA35NyN@st*0lKT_krF2 zVHG{_%B$&a8>#2M2MMz2?{c?;^zo5x!jI+aNThqt#6PBb{@2ry4*A8DNzmP{MwA7{ z$Dbcx+#k1qGhqunB)B<7De*(2sWr%dU9Q3T+z97V`Xg0HIuBXyuBa9w<)Fw?2AkAZ&5K z>}x-|q!;Cc71mDWS2#Se4Uz19T zr-bz|+=NF|16N>iq`%GSY)C)N=x}~mk3J}l(jCP3hLL)9m@}Whek8aV3?B_h=q$HT z(~P`w?5crkYF((N26*z*Im)?6!be1oJ8Iqy{@PFAnWdXMlz1&UY7ZxgN;oQHIl`hrXkU*p*f}n-=lW?QagN1m!wTI zeN4YiO3Fj(WzU$=u@raNm@)jgspUJv)t9Qce6L1%)kaw@XryP<$Ftr@`^S#&nvYv^ z_t{%E*`?DvS&})oN!N^we^ckEUqorVLFpGjeP{-^yHft30Cgp!b~mH;4krED!~_7e zAqun+(fB%);4z48JhG>t7wUw|sIX;to0}(Q9g(34D( zB~9{6aan^q=`h9Qufrh~t888v64z12N=g+j%%d}R@ zw#msl`#GtvAzv;@SGmI$!6F$slw-de#LlW(DQJIO&;EG)p0_3<8<)l(7lxZro z1=J1YvvrKp0B5wiOR)8MJ^n;=uoYKR$c-X!QIkSP2q}r14DPVDwGCEX%!9|{7 zMvN9%B$>Y@S(H-^ggd_9m|FSNEK z+}A8Z%KE*WPi0P8bxkwjvpU_8ruxaUT0*nN6^=G7r4H+qy4IQv&e}$(mVNq~TF;uE zR;&@8fWD%ZaYn2D+^C^2uSq+%1>U-Y<~otY`ntWgKlQqmQls5&k1c73jgpFe2D=k2 zodW`=3$2*EX@>bEcQ4eELf%y+gcoeZKs8|a`JVm)v3u^3i9uWbYlJ}-}J@hxOXE=lP@7KQnil_XbLwHtYi z<`Ej_cKO$Kx7NLkA}Wl0(u{f=cFFp7y=QjcMC|Sc7JdxWSw}ZMFd{pA9z8M=I3bld z9n<-wC2%$-egQ@5QpO)zjXOUWUtR59Dk+>-y#K;#bc^sYunLxC5?svt2FCXFX_T9Ekev$4UK7ag`FaWD;dhfpPDrkxj zWV&dvpOv?N(y)J4(T6tAf*JW5%r=XfxC7cV-Q+rOf%<4+voA^quLBNz3=XdI%{}O#!pc0 zPEwAnMAuK?$v#=3eY$1+1S9fE$LN!Q@+TARWNTgu`$9`Q=Me=ubH|4!n>|UF#0}d| zpUUBFj96`ka8BL!Ha!bRJwEX`@Cx~Uk@ms2^20ZN15q~iuha`{Gzy5+R@AoPY&&+s zIFnxg^!?6eK;dja?=1PyX2a?1+1%#X-*!I1w(q^IChM64Szo;Lr-V5=Uz#)6q08>!m-S@d%OZ4mN?GLgCgf==y_%Xy`%DyOUJ zz^j^stJ<;4-n^^&zN-e>vo*T&u*&0|2mSp*!v*NKwTG*r#;e0GS_kWfhuY3DB44JI zznmiWp3`+LvpHN8+I+Sa`qb~pq5RuBT0+vQ z{iEaB$npAV{aQc%`uX8nqyG9g{!QDAOJGk&B*Xyz)Y;?i%RJjPg3ZoPURThIPQ7hHApM^rvmYk#*^-bye zoA87d+izm`o!G|5*r>^gA%^%7UyyHpTz6Moudb&sd$bH@u&hgi+=Q9n$GjD2XL_*A zpg2XRs)F1X>pwfwKHT1xkITqgGsG@_xClkb4!$l^&}Qjq#@FOAnAl_DFn z0ix3|k#or11mN3$Mh%LSj00`nOJ92_$vBvA{ML$i6Z$Sxa@?;og zfELR@(a^{=-(y7aqv`htmnOV#WkW#o(4E4-y@zJnYmg%n;N${0S4kHv5JNq62SB5r z`iKcei5~Rt^RcBHcx-S}u&2sR{6SCw10ZLB$}xco%;4gtr#e~XPV#iuXUL~k(AC66=cfZbk%pL7oE7E2*A zE-Qs|zxcnMEwc(1vAviX#|L zOcg_$J4qHs-+w$NnhFGuhLFID7D+p*ib_a8>Org1Vk{`fRPnG=)l^!T*flz_GKG>B zuAU(7F#^N_4loM(ImaR#VgVUm0vO(IQ+sPvxzb%fFxT|TiL zU%5pvAwf>ALe3U_aR|zX#iB5KXnz{E4@?V~qlJe=L~;JN{xlE?P}DM%C8EIBl(1Lm z*~>+g3Q+qZu5l(4AVK@nqQZ}^(Ec5?3MiBcFe6s`Mh-mDA@=prY zt-BAOo7#vtx3JoYupH`>so!a~&hl&rY;;z54{1r1lT0dfzi90lXQmyb8Y4rm2E@Ug zu+8sug?|UUe8-RK=U(Gz94^(1jv)3q9}24@3UR(tG<6;45(lH6?KyfC>Dm;yOE7z^ za!HW*@0^usrd__;50OCV+>g+q^(l@#5g0aSUGA$S=zcuIH- zyiqf0@*rO%FTjHI_?@WefYMz@EW2`N{$f!0cdlN>QII&3Y!7$F--mvi^ zM!~OhP34eZDYJ0)K3BRC;ZG|(FR)T$Cs_0!PS^$H!KpGf@QP=1_b6VgwVU zq3>oKVGrB;wKQj9wO+2_bO8#;Dg-^a(=y>qB!sA#1S2mZ!QtG!lwOX}BS-I(LtgG2 zta;j2lfh!?y=I}p7IPn^NsWmHLvP%|KqIu$DYBaN=6FqKxX3)kKoXQ!YgRS_qC*s5 zf+JBXa9dn@3uWO`Fm9!21e5Lo3NkQAxI_T(kkP=P=mKy=g8-7ye&QMq2nGdOp_YX> zztOkEz-{prqr_lJO?9NAWv`h!wff4hp9b2%n38^Z;g;l(E=!D=8X=Smoi9431{i>j zIL%<#()4I}y8TII#FVVrgVGmyfHY@qT|zxc8PRLTWKFW;1h;$((raHuuOVz82)>*G z*>3V$mL?_6@fZ@oFX!gW6?)7xcE z!K;@+p&nfySYE;&oT)rnK~|uuNYA{sR(qTxZ-$Ldg$*!FY1GG@Fv)b#B(sIU`vcjj zqP3%7T+^BkfMG~fF?g!Gb~4qa=0YoBrnRM#xen>p9vJ*!aFNLa*a%1KZ`tp3j<3be zA{0BAJmLAEurzg@)M>joP!76FHp5UjiX!Q&9!>hRLE@awBoMHdE?|LH*c8W~x^<>B zYCKkU1kpt0+Z*UuD}E%%$)bpDyO2*Z6em2k}OF=tai}jE|aD}0LQpU-~=z(mUF}Kp@*Q81ml@% zTF-mUOp~!BgMRyVKL>IG93%kxw)Yg$IftPci#bt7wh-6cM$tB`!PaueBF=bP6=CT% zaMQ6=Jl>LsK70f`W=l`vMZ4qtI??k8pX7w-Z7IR0;-sL2&;9ah%b`8|TmWB8&-;bF zC1E$Y2%dtWH)v?&r{Wfe!6Stw{-ljBDPTfA+UX!7YY%(#$pVfTaIf@`xQsvbR@bBm z`0^EHAumf*f^W)Bg!>Ahp>Pi)S|&#njZQE)$C=4pM=Ual(OxHX+$J6`miFw@8F5L- z&*QE{?ufDBn8(#HP=Ajx*f?-?gQ8-)DUstVk$QzwY}#wF6zS8!Wt5R&BnWKb|7ao? zkv56)-yvr68T%Y?E7a+~kR|dsRXd`>D3m-5u@><#x^(38TEDAj_k^hBii~tNt7L~M+ z-;+v?qT!F}qK(_4t=f$afh30^EQ%wb(V3-5OcGhdeUMQGc?_S4=kv$ODP0{slXN4~ zhmg4kLdnL<>F@3GkI18sIU8*`McGThPkv*>NQyMC@FzS|2~#o&!>M0R#;3bQF`~tA z7>j3X5mpF*wcU32>b?Rxd{4FdmZ2opgYkR9(GA0Btmp&;>>*KHm>)j~UzCQ!cf3Hj zz`KUYzd$yXaNG~{+8?uwCnQ1}WSs#5B<@N z`yg-% zl}`+nKRG6%lfh%7NkXuX53t55WW1F2G7jjqkJvI-iR8nXf8vwOr%KKq;E;urqQH|8 z9c&C88h)b`3MoxRFinFArc_oOqoD%fmw|Xok;O~hs@F%($pKLKsl75_w|ZhGkPNTWh!$sIW(?94_xiOjJ{Ts#wmU zf6QZk%;{Xt<#!y%S9X9vD{xh=-3_n0H?HGdVc=?I5MH56rYu)T`+ytSpWw6%6+M>(~PF_l#i9dbmatpJ^!__7tRwSDH4J-)R=CY|ZVE9&U_{m4Up_=lOKlSgRH=eE1mac+q*{EJr z_21Yi|D+F`MhHfs30gl59zP6O*AErg4@I;!8n^MlXPD#bkalhpJ?>5tuz8- z3jROQXu6tIwwgGu|BOc0bWc|QR{f7?wDDxJ_rIdiN%Oe>M5E7h^#2`={x^>P|4KAk z{r?h2FL0o5G^2myz&LHjxaPq8-i-Mh3XEF7n4DNITCm7DvFTf|**S4uwctQ+W2*iw zsn@nY+JydFQvX|0|KEhvz`rH+za{nmTbXG#-2YQa{r}I*^!uJDoyIqBvY7v5reA;O z7cXN!z55@TX||sJ5)<8Su}=C||H@1cB9Z%F;eS$2zMbe}9{k_UO#dUPSE*G30uJF+ zMck&tpqc5*zmodn^N*uW9g*kZ3ijWSU*E5xl6sX4a#25Aq2C#ZJrNtE)&0#}r9&h|YUSz-c}!jbPV!36&@mf))q z67&$;eqQIOq+e4dl)tl!ME&LyG4GC?!0*YWE>co}iv!vXklZpWmtgv85-sN&3MGNj zl&&WlijQ5r|Htv^{~@Vo807RQG~^r8kW$K>#NYp)O6pI++;WrN>q@!pC6(I$4<)rS z-QjFZMEtR!)*I3{))9pdxFFCz9&AW-a2^Z+3^Jm4C{}MB?3mDbkLI*`79voI5OUT- zBaa`e{q6N7uDNtcwwj7FwtGEpnU1JH^8XT_Rx7aAYRX-SR_2b8d1gEamyt!KTZ7IG zGXm;2Y;eJtP$1uKv1m_$52&A&E}Y18%)}JA+<~{W=pHPXjcI+@s9_#_z2| zKyn-EA)o+HAOfw3DUJZc_C`U_eJlyOE!12pdck(D?Kv zG(O$S)7X8&>~s55)%Ui&xA2+Sc0_--%&3z|5n&KrH8zaI^4>_3HX5S~1*kdfq<9K^ zq3tze(DK;Pr|ZwIb%+{FIv9sUCuN5jzyT)zwqHRNebYl{c!2tmdjvkSk)$ThG>Ord z2@L`RevpF;frl{`CxAtYyn*qp@TOo7(uub*Jo4G)8@(uC^H->UhocZN1W>^C#s*uY zPtSm4IAp>3B0f7J7bT$ zrpt{z*vuKdyH@{>cpG?(hlOB_wqhhD+f~AjRG%+*WT<~6_0Oeb<=qmg99yXh-eQlI1D+I4jRdi%mE)TeC1mzDAOZRhR%eyzckmrhyn#KyW^fEWf@u=|98 z$&{tH>jYyAf| z#v*-`%+NSr2#J3Py7QwuM!ON0kRW&s{*6d60M}9*jPskVUEtnGl@w(yLi?-3kH97U z@5rhDNa~Qg#25YrLwi5|k<{70EU~lCB?BssG-#h!(Bo3*7Y4RKUFG)SE zVDjH2H90Uhcj+;fpc`=U5{PH*PfjxNb6_N|skxrISOc244PP5?A-Nw_y-wa*&%A=- zXvnF4v)9|}P?^~1qI_-}<;{GgJ05Gj~f#=phqUy>SzAZVH=2ua5fx!Q;0 zFt|1})EPcR@IM%Jt4|1*?>~&%CS*wqe1u>WkYTiqz`j=zL~U(PUm98+8tye3DiHEV zQb$Jl9_#qO>J2QGDGZ0{Esx2yx`||U_+?3C#c*W(csPH^ zA5u*a9TE2;7>c$3l4`AJPnQWZSTi#M?J$f7HVBx`kM5DmnU5(!mlRSMTzEqC(GK-N7~tiT?r-C!A=2-F1-xw z!@lu3y6i^`;M4y`swt!sovp2HE3F+7<8wiP*#nyeT|(R$)y5+u3?b>3EZK^0_!=K8 z95N{aKN*r873vft);S3}BN?V16;2H!;S>oTA=wK#D&iPM${G?KegW zA98v|DrP+hBWI2fs~tHzA=OKMMt(gK+8?B^kf{U-8O8WXgwIJ||Dcrk!5~LSBDF;- zBgex?$f|%$qBKRSvPG#e#h`aito5E$XNuCGhQVx#*eqP!`c0-S<7*4K6g6a4hZ0C>MkDj`O7mWe=lhuF)6nNTJ?2h_=KD|NCm-f}QWeC53gqny zCd3N>NK8ROX@T2e0WeXZ&saDLTc{;dXdY8IY+hJim0vzw=mcA|dRCZNT{uKl1d=N% z4K1=CE+ViiiaIQ^r7C8qDJl{FW2pI%iz7>mEf0%jr-~z>&xUx3E@Mf!d5LLh3Gr~r zZ@c2H!xH_lk}#@LL-W!OiPF%}QvKo5s>;%2nyD5sAB4}4(lGo>hnp>>DD^>s3M<-c2{89yVN4HYUI~irY0RiZ?!%G}1>m zDhxM{T{I@bHc^!~EHE|g#xzCMHqF>KRZcaL!!@fhHAjm#!OJvbhc%3#m{_jkW^F*HBg=SU>#BP*n1y`)2LsDu5WBMqi=nX*$$tdrTS zGbyCgQLe2$mcnnF;B8!1Ku?`zUT1_sOH^L|0)JN_UAxP47i_4ss^I%{Vh+6AuDHDS zOPcTVx8H}~S7&cGCOfD}pS-VBc%LQM9e~}X5+WT$-2JwyTLq=3^`N^#vWJ(s$8We> z*{nw@u4ksI=gn}B(m_w)Q|)jZ{pbwtxI)(yap8gk{Y($;Twe7OWV=wJ?tP7CUnyL# z>{y=%SD(CEU&`k`ean8-=>DGfYJQ&GUj*M*)%O3W>C0d3zxE%HAs*P@u6!~eKNi${ zBp&Ro8Q5a(mi8L#+#Zl)8URlX*4z#pqGDrR;^QdhqQrMSNw7?1Pw6sg$^U&stQ$!PQr-XA(W_J>aUR{PdpPS-d_>16Ak(t8=H%@ivR zFXa<<_fGW&Od8&LbJK!7d^E;rl4caa6Fc!I)!NV)>~TBZqT>Yqukl5}anad%+}j9) z_BTIe<^hg*9^HARd(AeXxgwT@M#e>F$wgDN1^pd7VFKd;f_b=-g{gcn8ePEX_gSC- zXU&lZakndyWC2uwM6TxKi=3Bz1yEDGa8bTft(TPl;bR*wh}ET76M4112`v z{p+Sx*P0#wS2z7JAD<(zLvNR`w0^OV9_;63>}xdpBYQ!kZ{bl_<-?ef#O89?CB9)F zyO-+no;Enb)!>_XysPj=I@ShE!z#br!p||2{rClNK~%kMq)3&=h2j>ES$2$(Kes6; z3Sf^0HW5+~-i-kdEBJXU_H?n4 zz>9SpZ(|o9>aXblcH#Y9*pdjCW{{WI9-G;IRl?rLE}n)o`>gEp?eorihIrYBco=X( zMZ&62$cHT>?>~AP`WopP25nCxIPax|>~pJanA}?5GuZe{?j*4s40SC$5dhEG2T=_l zNgHFfpV@W`rhn1@(bL`~hdyzK*+Yl(Jx7i$A0H&)-YkB&{`x^YG4OdpA71VF<}0YL z;W)DH03l(^bPxZ>^RcioJBsMqA3e}jrNG0LZLBAp3rgo@66%KiAN zjo=Inz`yGcppGU3JR0$38?jp;+espyLuMy7uTJlT&k%=VuBrajo*w>wk+ypd|Kps| z`15oSzK!yQUE{3zGuvr40#h;jcp`pB5cYP^{%qo9_0}b$S@s`BO>wBhmWc3Ag!=P; zM5sLwKOZ_1?CxQg829g!y@-rK&Q_lLZcOlF9{WkTJD~9opzfrF3Ciw(Qz1YoIv#E~ zHFf)ln}Y1UckSwy^~X@F?q+b_Qi(yn9zm|mIsY-#q934!n&2(oLJ&Ur021Op;U;urytcZ##||(1!~uzuc6_ZhTUF?{&2|mZx)V+)sY~fIy;qV>%pR22qOkEjAxv z4wF}$j5N!OGKA~8?ONPND$e9Yg#=hM1M+h)d_I9uLyPIEVU}{2ej#6=zriHmm=o`JhCF!f+Wt|v-aiW?007p zP~uc84P;6Vf%1u=4LA&TeVL?=YRZ$OkGkJpk*#iqm}Jj4hE|R%x-`d4kD#djv=2{# z7CG9?2|WV51g#{FQ;bk>O+T(KBuWyn2V;4{2Zv*!)dH-1Vy2)HIo66c9h0b|dmXbV zC&xKp+A>X2?Zng;LqMkWoyH3>`_K{|<=D((!@PV>1tNQfNeW_7E|?5W0(IJD%NVQg zjiyH<>4-9L+2-*!Qqxc$d-LrKEpl-Xe>Gg$6cmxDYI+vpuV6X}FaOc$m3fR&sIPe( zdt=;y*KJ%DM%YE)tMULTrAd=8KzWTj3B)_OAMPppxJ9f#1~Zvtt6M?kl{D6M`hyo@ zt+vWdpiXU>Ed7wK?*OOGQ{oD@=vBN-viw3N7Pk4!tT^yfx5GfkgMed;6>PWpK1YLv zhTV51{-O3Cr0uJKp(vhy2$K04lt~jnnY1n5!5%5WAqJF5?=w(pquE=Xwvel!UE)Y( z%u-B$lbRN-xn93vfV(G2u**=>NZ{Ex%WvoaoL6#fCQYul95-#UbS*aMzpo||*tF#w z&+;|tmkUOs6;J+)N$+=@hliT}Wzukw0=?gn4qxuu{wI?b^O99bFL>Zyd8NDxpc8>T z7T)^wdz7H%HxGBvdft?w!c8XsA{eGLX;BG8YDwFk{%MF$fM>ye`o^oO*|mQqoiw3)mNK+#hBa`oA*Pd7|hT$7-!xv%0 zQ|=eTx^YO5{{nZx!C<=3tHPoZ4Z_m0gdiK{XNo2dCer|>=uHeTEalBnh}8hR*nZwo zxvn6cJBuBhS*BP%o={IpT*6y5A6@GA~`hNO8qamd} z+)B2XVCH^ynS=BxyN@BJiBzQ3H) z<&|6$jT4>`T&3Y+B`5xJa)Kd7usUJ5bH1YN9&B@G|1&FqXG)!qXp@Y=^)m0nXq8b{ zj!IB#dG2%mClMI=IqUV)*WGC;Vz%FSJ-N7PMyRn76SI0xv^b(+Lkh*pWrRNy!u$8E zl4W7rEQDmH)4}rC$y58NJmYFsAW5DpoF1zCirqv!;KaTVvzub0qd_IMloy6cW{;0m zWuW0c5LLAW<8`D~a7A3mmkDS+bbYPSG%{6e`T4HyFp*Mc_7I=l7q26wGlK&d4}9D_^_wVpn_H}zEzR8P z7Vlzpr?lJaG9vOVIEi`ZoOxqY?pZDcdbXA#GbJl{8pc%f^zTD5+hZ#(9dugtw}zuS z+VR$%+yu8~zGUil^RT!EqSkL>bheD~IEzH&?Z{JRy?1i|;?YTHbnfl+e(nB)SIcL% z3wfQMZCYEGA%DZ$M4k7$JlFpH3TyY3I&4tT>bFE}LO-0<56O3Nzw-Z>b(u9V%6k3Q z?%V|CE#tsAt!s!{swo0$2lUHUb`2vp8^f z1^2zDwCn$p)CssE@0b_F@s9#6@yQIB=uCFM*%c5z5eOP0yHxnB=O-)Mn+&crr)!2TL3Dl z{Z>zQJZp6V6~*4(Pc`&=H7;m>&KZYhrpfM_ECisL>8JjMFaKnw@0B#tTC8HETjjH z)oW&+WEi+p7({3jO@Hbk<^qYHVIkM|3k`~dEsAh`9zf+Dvj5yevdsIr1Me34X#&T44lu1^IT?i_v(J*RO zMwKkvoQ_6S;K!;)M#)jf)VZa2?neJe>illCHqJkiI-vEhq-OFM)1i_4SSqRcPO^D> z%uun$IKIHtkjp%r(E@i|Qd4?MT-w2JoYG<3YPHKmXx#1+3-}OI_=wyi9(%Tlc@d0} z6pT_+j8Zok`{f4X1^}ADsI45RZJ;v16t$B;H2K}QLY%aH8>{1NcK}3)IFG2Vk|EX= zmm>5V;}sa?i>hoTfO$)S$r3UI$R>$ww+9|i;N8irV7L4ZP6@Y<-jmBE;m>{dHO1-z zL>W^}Etg9Brj9-)m9Zw3*{pi?06T7#Cw_MFcyY@6T-Ib6H*7!M&7QjOVz`Slqx+x& zQ@u)u5TsXvXYhu`kU!e^d}`wTbOC&`#ExtfHt5Y1ZRxMlxNe#>WFWnU#tjz8LNFzL-XC&p^pk zAjV%1HcBK#Ij^rUf8@xvncq?*G%bq~EN3n;|7|FVV0PG0zFl&*)Dh$Y^CFUgc0yC> z7GCAOfl_bTEL%BDQppP=d6jou@`ArA($42X2rIK<2rWwq(;bT;xDwAhD!bm=Mq=ItF>#=dt-wJU`U22NxElMMV{tS(b*g0)du;hchwkDgycz4 z)D9@gj>O1L%*cN9G60j+z-INud$K098epI77YjrgrD7?TxE&omC2v_djDfjajJXJw zsT|ByDz08;4l4h-Sb-8;d002myTlaH`znHi1)+{^vD9(2IEzF!QkI#Ei<(=VnwLnS zE47ZlwoFi-N%)YO@m`rJVrAW3b2v?dxNlN6P;;qu)pte{bz5^icS#|zNx48$jrEl} zdV>nWT28Jeg2dWSF0Bs#HBHuWt%Md`geL7i0>g|oNUPSyXRXU+Eup71ql9eJzHYPj z8Tkq=bE|QyD^ANmHVam5TdVb*QtjZ>bxTie_1<;+2sQb!4o99g=X>n{c%30?of(A< z_ku;I6HT8JZnx(KFRKlUhz**u4X>GvYDnsa-&}JbIz#ZiX2|`T|NVv-_a-~FZld9) znd4^Ib90oDh`y$F^jJfX7LBKpE_#M;Tmoji5^b!PM$+6&0%?zGHQPG z>20i;K=9uEYBx!_Gm#V8*FZPbS1^@!+^=acfnn4AjIa-zX_`v459&8f^D~9C?LQcp z!hG4ECNevD-bcqz!wzD>i`>JJJ^-PbsaTi=dL6tlZX@{8M#!c|Jg!ZWs6+0|Ly9Ot zxxPyDzp-~$O>u>f-lkX6xHiGvf_oqYcXxtAaCdiW+$|8?-90!2cZVQ>5G;7GpdoaI z{P*5d?>k3xFjF;EldApz>uA-gr=RP0kML6GiNDm+rs?IS<$;OQ?+enk@-ozkF$o(n zmhm$4h_Rj-QChxcYZc|tV&rs`WS=p7wQtNtZp5;0l452SC}B3NZnho2Yx#ML=T-`} zcY|;9EC1Q{n|(v!Is=hFNin+D;&sMC5k?Yu?>H>-uU;CE6(i)N+oP%?`Mzwe*3E!gcXjN`tm(k1964Ctrz zyj!-|+Oh}>-!rD$SJ^Z(=Gh-0w4~Os47IbIjkO#{@3oP(9B@P^IA`g(r$gS`pB6bwSt^Qz;9 zZVH67zEvEtvb7Wp#XkshR0`hL3XCv|qSK97*7Ei|G%P;s8a|AptBJqWkJb`MiqMIT z&`4f3e=n?)k|v!>XYt`yJ55+$_4aT!f=PVlSa&M zEoXYIj&03l{O$Y19WdLE(kCv6!kvcvJtKs@c{W|bha*4j6g}+vq|*kZ`)l{D2c--8 z@wJAe-;Cb!jpu2N3BQ?G=9?ndp4{XcM%0|n(}vBEznQD!TWHmq$A7b!$M^Ycru+6( z!QzKgsm+L^O?N`iswdwD&&pbv!$7OU>Y~F3G)Hu0OWe)1U1>)Fn&Umovt9D`{Rqcg zvaZ82$IR)PCc|FhG5N1dFrGejrN?z0OzC)JI!D`}_7N5^Kvm0~*WJ86e+@lHAx zcK4f(w}$5xnzp|;&o!pbTgjbZt;Y|WlYf?1fxC0qnI0Ia^ES{yy7L_Vyc4P39^S|q zK}H)<<@8sXb3TjRBYqd=H+!^MXLKiLjB=h3@Fj@AxrELci|!KV&E=5vrM3EV&v^y; z(*;V9%L~s7@;enWb{BFhCrqR(JeV`73ap(tvXw-{^^?LCJ-Zp*LDpLxF>Se*!5Q!o z4G0I<{~L?0Z*YBP(JV+%);CdXSf{6NUG4B(iRfKdeGu3vqA1#3b+)nD-B?tR-(Uf}cSj6Pm$l&4;leT2 zP6YHLY4TseD4_r8O}AqL93Cj59-3IzG?8TM=9sK_$Wf9pR~J#ITa>|+*D7z^Loa^r zR{d-o@A-PtRBu4J)MqvFyO*YDf z{mu;wAcDoYO|aT0F3l$?MqQu*jD;_lIgz8`fe$R?G-5AkOc6* z6;UPtLV3ViUMG0MOC0Tm5MDC$&g0b`VVFh~R`#EUUI;oATjSTsq_B`CX=tBEu6e(`fpZJD!xW=lOR0gR(FM9=p?{P*DN`i|@WYZ;}jU6?c?s zfq&9{5+vCt_~How0%wB)>I!rANtI4nlmK8l1?pdT=-+GQGRNKr?j{hC6s19k{_GU9 zoGv|jkj2LvBa9rFWSr`Qjp~a8Toa()Xv2CV1J-aM!S_mND9XUJOXHkqH&?{N-P?;VKokLm`Q$z4JAnI& zlsZb5R&G3%l{ts6p-dte9z&SzYeVJHQk8bI z9&^s?gFJb8%S~<^rcch#|A;_;gYHuZ;N{?e7u&&zeQv0YVjv9E##gG$$auVS!6?gb z3e=BW4wEA(e3vLO+|i#|G*a$!3k3B@bPkM^D+VFPMtL6chk>@}sC^qQk&B=rjzgRO z<)XDeTD^Ra?t|YKf*L?z2<)P)?S9a;?f9-D=E^uv$ccU}9s@*)K@c+M2H-%+W+jLq0cTFT_f1VEQ#~kMGLx{ z07Oi(71D+wUot9+nU=Q1D|oKWQ~T%l*AvPjj*DwPej%o;ZDV_hCib87bjGUzV}JPX zAkpk$e&>F%Zp^(Cu|CvlJJXK00@k(3f78>e-;-1!@F<+{ND}^{5OkEU*yNamamj;N z2JOM4xu%Gs`(l2GbMzlW^z4{h*DNg;VSSLs2}pUK<0`vk>8sxyLza9jb_5KJlJef& z5Pf@KwC++Kr9rk)2FwJ73>5{67NdHN>ZGN1LPGD$#gu})IPj(fp`i;d?Xm%gRrpwJ72KRqEf z@Rv-9mCdj8Dy9xgNevpw_H868a_Ej>bprqS)7hrL1$JZauk(JA^Yg($ickJhe_lP` z8Lb_baO%Di*AfxBScvr&y6v|6CUk!sKoNMj;UpsbkXxKs{qxA{Q}5$tI^w6_df9)r zpKiRAf`T4SK6yXF=taL@I6-@vjsHNb`wkJDHDLN%AS#CbT?Xe6%$hA9a_fFQlO!nF zhVd@(^OaKJ@1ZYW<{`6Z4B(tOg8-%QuJVvz1)E^_$T46oK&QkYFLTG5>vw=`qyp5+CgyJ1T3iBS4}FD%Yd zviN4JomO#yGri|GZ5kqOCYtl4e#_K^n6+q#rW%_oczd9YcmcuFgc4qj5K7PsApR1K zroyF+LgeWS#&CyHCTrllVuuFvBT$0V6!XZ=c_oF&Q&QE@X(@v$lEm@RlJ6yDX?DSK za{FQLwPVU{ypM2|&Ke?T1Wh4-h{gc)7gS~TJ2=JOvrMg5AKqP46H@R)^z)Lv`vfah zAYW1t!$E4JacEoww{IhLY$?s>Qv0(qlcX@r;U@)=QKUI4IfP|k+@JxQ9UIVZ_22rxil;CBz_aDNT<#Et>OvK|6EqT>4-w|l3P&ZR?5zEG# zmaB)=SW~jfBcmFJDc7b#Dd~7C-W{ZWNorUsE&g1iXtbV`g}7DL&~vQpwXYrq?@`f& z098w#DE>?>U8vw<+g8Bz`KyM9YvXHEtx`FqdP}$LS8FVy{fx@4S#D(xWMldkV;aLu zY3(%c^@x#+BEBhOblEwKc_J?4uE%`f2Vz#vT9(MM$<`LGcritSg+ zq%{t=)dU)|SI%Ew1N`x+3dv;S?)AR}=V*0b;5ysr2_#9N>gNbcdd4jL zPyx-Y0~*i@1T;3&@#@_bXJk$Lf>;BT-H7mZ-Z4I+CL_eR&}dvDzzapx5WguMxVEVM zhVfi9dVWDkAod)yawdPB+`30J?!^|qbgvqmei9!2^hxYTq=<&`Scp#(R=ABgDf%{k zm)8KE@K`uFY5TyQ7a${NOZQTg`H3lKYfC9h9H$6*X>`|tQ|b;zd;zBGdb0>xy%sm; zNJ5nTWq7o3^^x$a^(xigD7bQxA)M4w!7Xkf2!_)4o_67R>QR?Uz3z%*g)fQaKu3E- z6SZnVAnE3+t*6EEMtscPQdnfASH|F{(^qt3EauL2Q8{i?)z|6TD;*2gj;-R3WP}D? z=_|h53YD51U{e80F?Ou z?pa6MtplG&v_47?VVJvTd-uOra0QlsT!uk6R;aN`x|N8vKh$r`C$V_|3>a>lD|%a5 z``2z*QuCRK8^o9Z#p!^SyV70)xRC*wdc3 zD(+kGevTOYvJosI1Zi@9Y{#EG$jqbyM$6e1JfRNumob*WOv1 zHg@c7g2~#i-0I-bZ(BGS0nH8X_$TrOEH2|9qaqZ*@<{zbqr^ilPRRk5_ESQv3bupL zYe3DSw;9Cd1=Pe=pM|7%&!OG3O17g9wWm&Ypoa|#jbeq#AWBAgJLKP5Y@UMp3gZZ2 zj5_!8sWEGtnbCME2+(5Dm=f4r#yKAP1xDBfm0r%x>gD{}om?J_lU$tl8xmXCChbtH zqS3dfuQx7Hzx(qK;R_`dHGnysWsj*V+U-Wji@BCjRHjWgvap$PWc(pzlnp@q^+Y#jj+ zh#uY|n#jBVDu>jh0}I}oiQ5vp$U}i?q5k^(h+^U+wo()8C2U2#f~*h?{jE2`%^vLi$aq{M~vaDB7a>ZETAjj@ODV$|MQ zZ;Lupp(&Fgq=gX@tHTZg$T6sgh+CCt5V3oxQ*<9k zBl$NcjlqV8Z*pq-OGv-5uXyt!{@e4s|L+~KzW9x~_^(?SoV}(jMFv%wyDn=*0{ifS z;=6)$lI)1_!dg_b@Gr#)%>c?>^7m%HiAtoYk@%U0dp!0`{P)zt_I!!3<-eE0(3hmxJxqIG6Mwl&YGBsof&0k(cVdq*aHT zdMj+9n^9t?TB;FZuF)EyX-NB)msWd1Q7h0w+xNSweW?y2&VDW}ZxtO26Azb*1z1rnB~)d;VF{rCPtTur-vlOxthkCzFU#`aad?92WtlSM7RfRsxU(>ozrxh7z^@+i8!-EsRhX~R}7E=li^Hs@|g zUujNn23Wc3S$Tw%e~B*lOtA3rr1uF__N^oLLbURGd*GXArQ3Vp>U$74WYtz%9&k(- zIAJ9}f8e!q5V%)@KOA_1e~d4|ddj{$mB7D~;K6!t#ckRigdBEpd&(z7D+ zZ)Q58BFd2AGQJ`@k0GY4BBqWZwv{2&Gb(nZB5sD^ucXFD3m2Y^KV$eWNuA(Jm4x{p zNgZ++N%kzM8B>^S5`-C3r7KgF89!)MelYwWN$pvg9{AsqIy0^EKa#pKtL~qq{wJyb zzaptw{%=d_Yee{ewdsFGI`I8JBmK`v_l2TSD0jDC?vAA}8_jfg{5+T|R>)WG>AX2v zZGJw{>gl>W-x`F){xj15PZ{afle4ai5$5ym>t(z1p8Ngk^WNV(_T!=ZIx4+ERpnToHol|ZTwHssp|x* z87UXQ^vV8b#B24EXKj2JXEKBHgA_U|X@uM&DNay(9VR0)Gq3r_MPXP*{Fk;pBs(A9qg-raeCXL-yQ3{ zcaVg}{Z^EWSGz1JQprsxR$o#!}koUx`+K7ud|1P0xwv*TMDyAXINo*-GA4n z>k~IOj*#auw?Dz{)%~AF`fqKT!0Gqp7=8Wk=ci`x{?XKo7$COzCaUY_s#X2d?SG8) zq&9_+?GBnoZ^+93X{5*UMTBh*CKHW+T^!W^HPRy8Pe0L=p5TzU{t#V2krj>a0K&dm zbZ2X}fqXc6*?v^Lq+pEGDX`H?G0=6S7va>FB@bagaD5iqg;t2nB_W=indHT=l#8nE zor&L65z0CB72QUMh@=iV680NJ1@iGGNn@PyN06ZIPaW$gIAe>1TcyILH5+=lFcl-y zO$~40JwRFJ9Hm~OgqL119BrW%W9(LRRuDD9!B1!9+?_S|WtD>ROeRX-eb;d(Lnb7{ zKEW6_nXKa#5R6>_Ao2omnC}4u7AOegc?^&|2?*o9N>0u(r$vGbE|&sWyqCe=N%r8(Y*Wk>-vRDj zPO((QT9)QaI2Z`jCr$~$9(x7QQ1**HukHnD8mGX1YyX9y0BH;5!EbH;@g`+Ye6an_oyjs?mB_l4h5&;EWb)1K5CdvRyZg4|L zaKn}nD{mAUY#0d6c@5aS9@7KQEmz9Bm%Yk4&{W|XiFZt`R??uQLc4_{gp`2(#Po}q zU(_Qa!#9FdYs3gifYC3n0UR;~sXM0Z-lD5GkKLodUfT~AsEP<&lwO?pt)`aHC{Jm;!RrCpJbg{CdY0V(Dq%R zK*@kOq^I9j|D~b(3aF7UJ|Vu_0t;~WU(`C_1}PXJeMyhI4>0w*6G)-}#Im>{vJikS zjLO*wftrmNt z)NPJj?!atqh*YxI`8Kh7bm^g}xDJIID?m~94iQsi=3qEnNC65w`)Ul57~r?TZ!_TV zs*J;#HC)rtPD(}DP~_y^Hc>7Kn^P0$;wt`0T3Huw{U$Gj>wtugMnD<$>Cdo(JM(D@ z7z=1adXEr_gx-fqpV8^W$DxP%&ZMs9O}1T$lb**r$KUw!I@wPWRcIY40RQ@s&ZlO!?8WdVldEsdo^pE)b^99&~QjOhoA1vSPS{P~1xhdbq!dbIW`a6>JS1?20j>iQTvZFm4UQtzqFkBb^wF%bMk49X084oh>mB|*#Epmg4lnmhKoa%hVtWcs!K+t=@g z5je)a2k^AIztLhNN4EAv!u6Ix@>}s*EBB?p4+$AHLR9nqm{s4JaS1WcvELploLCF;iW29fUqY_Nssz2$~9Zwk6FWhgU^ zVt|k%n)=-bkRC*?z(u9tM+hf7g8=9AHyl33(HE^8^<&PysvN$&ej@ayvWOh=%h5u& zW`!A{TQV`rrZG!YQH&;fq76v1BS_cFF>qY5?G;f7H1TlT4&qQS9t6p94k-{YS>(0U zU$!v9w`^>W()6_G=QR-^^cvD(9jUOX@TSl|)I67Ey<{L8V<5jl=K8_Q_E5q5)0*N* zmKwCii1a}ENJx&rM~%|Kh{Y!W)}_E;l)d9+#U3X`Lm|hDRwQ6#B|_oDk)t4!Q=uSY zea6xx4`j3tRE#!^?9nh%<|8uJBPvcg#y2*kTx(>nQQpy`us&mHfpIdSaVjw)Mj1X* zi4HQUXfBZl7CA;zGIKEv-49x8!fHNoDn~53D5UB>AO6;+D+LWI6ZO|vERINw`2JIy zW{fMoPuzK*R;*#`&a#*2PYy@J^O2TsD+C zTR=Qp$}~G5B%8M=TYMnfcPHB=nz=8Uey}4rJUVqWlVx}k-{{rqB2T!|piU!Fc%hBZi|&x*tc0108uIS9yqx`Ela; zRw4QL54q2^X^WkFy7Bx1xB@fr0v?R(TLC|4Apm-r> zbYXu{q4Z#36iU&jokD!^B9LBIFMUzCX_3xAkz#RC*iMlab#b{(VV-!gMo4iFVsU6u z@!Or^<-y_*xDr+I5;W5iypR&5qLMqBlHh?71-Mc~>e9B|k`D1wJ+soFkW!g}Qn;N` zbht7}>M|SiV&uxw(TK9;$})fPvYzp>4V3avjO9%`Wge2{L(%08rsYDV<(>oOklpe# z#tN7_Tt&THg|%sgu5H;xRK>$lg-cO|Aa&)PSfx6+veLBjrm)f?rl@A15(cUo9IHs8 zt_qN^B8;vyH?1lzttua=O4zS*fUBO$d|szuY$2xUkhg7%VeI-M+2fnv6q7f2oHI;Z zIGRQGNl&~#t6)5+K0}MVLB44YyNMyYsZpW^XB}2d zH<`{v()@~S)CJ3Q|S_WoCY)CX+9$(1>i%nmhGciT7I5zkKXK zX&dU7;qq(qe&jxsZwqE>15Dd|NZLat+kQ5-3ZJy)9_xp8wfl6nMG2HA`jwMfv@?ix z1e%RWg)osU98{6D#S3jCfF`%FrN7BRPN86^~HUz6CnMG4s z=;~om=vg7jS;*{;ne5ri&e~k>4*%7o^RcU0p!C?T@lb&Nvmfr-iOl&r;m=9@2NKdp z1>73}$P+Wy<$3{_wDL}$y+Bsb{B(fvLA zwsQE|ZX^nO z;UGG|OHmwMKAGr~8TbD_!ikRm4HwwvcHb-Uzlj`+IgMRfRa_?k7KbL9x(7%7JI1Go zGTz~2P2pLzslp|DVt$m{&Im(zo-!bvu!@>~cOWAiL9-+KK z!wyuR(bSQMaz7)eA*V`lw0SR!ICMrowTeBB7!=Ozha0Y(&Rp2f9a#H*yJ6q9nBt4? z^gmgt`cG0C2t`gafan6c|65YJ;8Sev$B$2Q@dlHIRFUw~k(gSbEy9%^!Icj^OGy1@ z-h@D;!^gIOnfw3`!7^k3){Ic@pzI`t02U>%HF&We-^%pVZxkGzMQ8?cUL1%I8Bv-m zC7tcPj~*g5z1!GOecX^9Gou4IgjB!6^@shX(eqzvKwC`x%la)5Yh{5;-_nu8o zG63Uws^^wnhi==S?DJfY$HEi)64}JXGmwS^cv5Xqnd}K0>@XWps`lU)2zfu}rAwaJ z%P{t)34)@fAQG4yiK6TD31qT)%imbHl^g^Fe@0lH056-4K{#~{l`c3TX{RWv+Ef46;azG90B{1!rq%sX_& zJc{Ey*bv&!sl&I(!&ljy4(*LFl+pe#BkjU=Tv$h#r~Cq*yp8W{PvC4P-QgHKANA*d zjC9-Gaa8R=FyTqE+DTCLDVXhu#PR#QEabT}jcRsk&3W=-_cXEpG+MvkNeu-sLz$o1 z`Y#>*<$rXvHR8!wV9d{%Mla?4jl4alU=$$qC^!3DAN?X1^Y~^{7w*pyf)n<$kxr!r zImzzCCge(Y?-_yq0_l6dil>g^wV{q{464!nt(*KO~KO_CmNdGg^|BUoMBmK`v|1;A6jPySv{m)4MGt&Qz z^gkp0&q)6>(*KO~KO_CmNdGg^|BUoMBmK`vYgLsRGL>0Yl{qq%dsdYPGF3!WRU|M~ zrd3tuF;$gSRn;+7w^mj6GS!S!)yy!}E?3oVGS%%@)txcb-&WPbm>LkP8!(w0@v9rj znVaaUVNGnz%{Bq0>CubR;s~KQp z8RV%M6lNKct{GBh8P=*9{%55Be`KU%2ILQpf0zWuIYhjV%q*_&?Atp$IX%DX8JSEe zs`iLYH-{#?FRJbtp7cq`>>L`m3{F_x+?iZhu?|gY>>jwfzMWhC5}sa^SJSe0czS(v zUr^I>@$;sj?qgO(G@?sUd8q8eRXTkkBgt(!xM|E8<`aiUhx^DGmGxA>CRE9 zZZT=TN!b(gpM4Uu{NLwJEw0?$J?tN!e*Us~e0JfNl>PJOZgK5vbI;(!{BmM`<@N2u z;pw?)P~7<3=Yrag-;Yj98{7YNq&Ii>{~783yFwcH*OC5bq)-0eG}5;x=l^Y_3G6TW zk?Eg}H2Ry@w4Zk=0YosIV+V-;*HaZR~%Ii9hOVTkf zkDkK6cAj7k&g7r+E($mPc-$t3o|Pd{dY&53Vs;O7pBy}1)}vAITpE$g{_YDPY4Z|Kd&uqk#*AKA<-7}!J%_MqXn#&(4@zUNtI7eU@=N}cw?0O z`-%g>hJayz;gmjjRPkWc>l!#*4p}e-p;+)eyEX7T20+r`xH3Qp1~mWx8x#b$#R7&e z6rJI20Abn}fcdHmL^Yzg@H-(9yeZqFf=SI-sTQFyQql~hS~ziRRCstkv|v%mtv((kL*a*vwxgy!TfLi_MVFjl3Cg zNiaO!#)?fBctt!Fry*7>`WDLdw}UJ>mGtV7lbwuC;qM8MuqbtX8#_1cdR082UdaZJM`kxN6GyZc2 z8L+~DjB$Wf6+@p1{dkQ9FumI*l8*nc^ z#svgKZ0nPRElNay0Tdg`B+5NSWQnalh;UM~G3HPOuSC_`%owin9gTvMDO#1raRt!* zt1x&f@tK&5CAzbz|8$V2s<>LnCEt@`#LBeEv*+_$lmMdQGw($q*g2voEY<*8Y6CnS zFq;Uv>b!}8W!|P?h{K}U`uYp{Hi9p#zP=~=+rWzWfKcMO*5t-M|6RwN zgI;%ne&Jr0Rmc2vooCym!IH9eHD!~dPs94xtE{{3L!mETD8$s4Rp!~xqwVNfTVeEs z=Gg+FAqanvfZxZ8pAe$OA;Og5jH-pGTJ0fEY{)I>sPI9T*+x&OAx77gi2+hnY%vui zY?vxzJ&c$2GY!t5kSIbc!17`i@ZJFcZ%SR&#u;U%-8??;5W&!b=%BJb^iOHh0KI3L4@Odt|^Jrjovyxxh6m*{AT<~Lw6MGLcnaJGgB8@%X-qr~7-53TF(gy`P+tf1J4 z&n!diq~5&92XgmXe3Zrj!i5EqyyPaSQhRd|^RLLJJaReH5jh`Cz6iR7iq*uQ=N{=( zI`!#-NC%vNRIapx)B1dgXs)+KkJCIMZz{g@G@FOsNnDXfH-AoQ=Dyaq`qO)y3iHFi zvf$yGe@h-U9v?lGxQm`4jqMrz62=&V!`;Tst~w&MW6!(lx51!tP}LZp1Vy66guiR; zSFxGV?cCVdba&HQt3HeUHn9)x@Axdx@-vB7ACoT|JXc-oZiOSc&b#Y5H{Pw{{`OVg zoy3SkdkryeaGk=w5*@7>@$$X*tffh(12or}slPixqss$CFIK9Ynjx8fs9gA3-v z*p?>5lKG;4%~W>(%socj?uNo(*xkz}vnyq{+v>u%p%7v#Hc{?1T`WL)R)dl?z~)3D zra1*s;OnawJ!OLV9&-ee_W*T|%$#-POLo4SZe`j2Y2_pVbDv4Gv3{&h*cPH-+ykX5 z22>;ci^d_=%L<7np&`34e?@Ggb2OVzL8;%8@sXfIH0QeHy&~@UKPX0gx43!<9L=>f z>_2chS_Fcrw0I@7#0!0BsDsi>-NZs6FUBaYN3qx8;r%#_{Glcfqg;Pvpux9XGz<{9 z|0R?BMk*xoMmzYmPWb1b`EqUEL2WE#e@@rnRPkU@vtYk+Dk2>+2m`e!FXIm@L4^zo z8Cf#9RYNHTW~Fuyl_&}|UNUt;Lrp?vZEJrZDg3T6d|^JE@GiXJMT8_n1gUAnd~gK0 zctqkr1d>?f4JdMsD)L=8PTQfubW()kRVH z2N5Jik+c1gP7Kji;?cua(b9)ebqLX#NHJPt(K!*}71mbIl2jO(#(R|^ufnUWLci8p zsQ#Y1ag3pvH=_EGvb>ppfH&^>_10D4_Q{&5$2;y4J8t+sZjLbCX)q2f9v{^dH$F!B zJnHs$^4dD;G(El~B>p4eJA<3}!;FL>>v+&WLWFoiwpYS2Z{qbm-`PFIoh-uzVepks zBJ4gfHYM?iDk-EXQ9i>EIWq}Wj@wf^A&4OXeLD=2Nr|SLjBk^SvBr!j7f!I2OulA7 zG|o)IXoa)pL(AtvzZStX&ICVB&x*p3s16J6UFB*ybbN7?ly~*swMT!J(3eOQ& zOZ)qjjQ5!XDFHhvBI+r4NU2IbDbd!cXY?QF7$a15ql3LaNJXbqgru@n#%Q4!)-I;% z5`B1AX`|7>sMist@g|L5A~iQ7?ZeIoKXHBmi*#|m6lb~jR+VwCKB=a4WJR$xRtPJ1Ll)8GaAZmeI^<(exQ>kSv>w$TQa!xICK1Ao#b$rN^%N>F(_H=ZA7Q=r*lxFg4m z>|229n~B5Efc>RlA~P3Vo|V9tmW-H=0yTrAGnO6!kIJHM zok9e;;!e0?wUA={qGE(!1TsnJ$0hF6 zrF`2>Wv?en&*jRDP|Bxv%7jeI zWkSk>ipu#1$|ZNo-Kt8B8OmW0`HF8g6}a-{lW-MOMA=dN6*0dO68W=JekCPmm3{bC zlF3vt+*;{2P=Pj4ndV!xnpt`QSGDb3`BJ{hrLrm^q^jVk62w&P0#}`ST;)_%STm8{ z>08zECHIqWMY|qLE3tpSFF8eK%>=4}!`m7W@0$I_ng#ya^3OGMs6{LC$gnmgZt~hZ`WV) z)&!Qrb z`>NMO*TsD>-bh~6^u-01LjTyr!OYFb-1Jkfd0eK6GrO68vT1Upnf17N#U-1>u6bL& zrBJVB&Zk-Wgql)7U(}9FT%buIyH3TgRK1HrZ9PFVHctB_M_*sB--l9Zoz%=O!2m7X z#E#OUi_}ga%BnitX7VE!b5#a@8~Cx6vI{zHU4Ldjg>i0-SC<-c~ODRwF_U?<#r-J1M~V+ntSWP+-x_@Ny7eY*^c5*fn?< zFT2lBOaf#qVVx%N7~vgJKEzQ2MQXGx3KLiN?-M*7$tiqpwT^mW59#z<>%N2}jY$2b z38f(jfB_9dN^wKb-=knL8&IE$lYjpS+Gw`es3U0H!(>z&auz(6`=bkb}6D9nXeha5d$FKlGoq> z+{G3b9zP@4P3vO^?#gI_j5P(n&V&2smsWfa2>>Ed4KkKh6}1J)H*e{ZxP+2cVhMm) zj`1|1`d1EpJn`8^jaot}(7KKB1Pty!k=p2l0A~A`^fbPEt#4csSA5cnH35)7`K5H4 z3`(|0lG7Qb85$c7AvPGX|1nL+JInvvkruRGcNN+&v|6aJT;UB}k z!@0d-tRLHY@H<$=pFy%>JeTs*S6G?rkR)U$mn*UF^Xk{8?_~2wwI82)2r`r$Zp(ot zL5Osu`*tnYqru`qTnoMbB5L=hZSp!Y!(WNqY!CTF_P5r|`*X|IWpg)fW>jd)`03lc z;L4XD8+mb%d?6Gn;ho=P+i8AZa&)&>p74LvLJ~26`Zo&C5}BGDc_A?GxYc*nJK9h4h)}g3B-vpN@Qm zFK_4EZrer;h0hEH=A-mYz%2wYMv|EWG5-%mj?>&Rt?P_GBQ}W-P7K7gk3r#+*bNXk zD&ainCE1dXJ+Ksm3%*c%LFt#?fAk@KpWx(3Pi*bkA;+8SSRNzugW)+Gh$aT51?dgrz?mN) z9%BSgW0Y3o->)HzEGC#r-|#&L5gJjF`cS0jP#{|<`CG;!R3~F~{R(W`$ESNDCPDY< z3k=IYm~Vd|V10hQ><2Vl2)LOc$x87rnZA8C$dvLAw79?Oj%&Kk3psz>Deh;GT%aAm z{A0~6#Clg56D=gBEesJYO>bv_tzqLh2@s{kB+J@Cn__`8m=uC))dw*Dz#(y(dFnm+ zvw0$#Y*n#xV58(GCcGE9?~M>Vn$S9GFti$lE|&uM8NNg%KEE`Xy<}FtT>xFt&zxA0 z;}-JRf>dpl>sM?I#=w_r@o)UZ-`IIdLfWN$Y7gu{fPFFGXYPP2<&22pio<&2rga2oIWya9snG#_*QL z$YsVDL1$RE!q}}M_T<11%n-%k+gX;|1hy-8IVX|G3lPMW>CZH(@Man;|E_dsX7F@| z@7x(sMO820Qa47mQALq(xtFE7pq0K*dG{!@VJbmk24@Z16qdlAmBN`dLtDb_%by+i z)F6@4!r$mZb}%%N{{UQq`b0y(aHNt^a~S=INM?{QLYD%hFgO|>^b6IZxKIp4;^%-3 zLR=JXL6~4vc$nmWI?_aLl;WAM9X5wD)en^OgaV{X9@Gz2l0Ym#dw~U-I1(Q!wIC{V zL_Q4{OD{|(HFh!007^O(OeL8LGVFy$TfYXhqHrO$t9>RCNMX2n$YNj6!Su$i&SEtGV|3^ zy*#ek_7-v#AREW4Lj`i2rG!N22&a1c|9b97AMjE934}d8;dG;y?r}V_SMMXg2N&|K z{&ZwL!Az|{30qD&`WQv(&CXi3T3m>Tj@491i=+A+c-BPCk>kVFHc#fn(~mpk53#;y zg))v9L+H>j6l+VlAmYUX$JG2FDqL!DP$7~ld;xrzB6Obi>G=y$p4s5#g*+2F#ZUjI{(lPF-0@xiMB=C;sNRwW9tDe%9}6te-L!^gTQp{ zTf>Iaue26URbwhex@sp3=QwA2Vp~+7-0*@Z(h2iWL<9p^TV<<`c$@Av+LwKhS2NTVIEDKU&E31ZtBkHJ{qR>s{ z`cuAy$iqQj8#03M8E>sc5g;Ly%U{CO4>E7=JC!a95NNH`7dBjK-NmU=kc=0VT||&I z?gch9qB={2ukq$Y;JJ^X60CcF~AIg+01va#qc))ZuKrL|hJ2-j`3g`y9cfbNAY z(GWbS3EqhgsG{$3sHG-!$sxFS-2^{&QG(SI`xVc%DWTbb6lWP~EUE&=VA{f`$axiN zxlqDk7W}k0hZ-|+^tCa0&!$ud2*7fp&{F5!`wIWc*oxbnIvgx5Mf^T4UJ;l2PjOdR z4y!}jHW{!*SO8ooJGu{=ja{cfdUX>hp#o7`h$wPeFZPpb!)O%=i4<6S->223mIS>+ z5?Gs0@XbIkb%(-Gu)l#+yob09IX;XE9*C*N%4|(sR=fYmp6d(pzOQ7MZMOW43;ngxoamrJ~?>85de5aBSJ629k&?uyRU0Es2 zKl`EVnwQnX=CxUtYR1ep=j+$>$_~Utxo0g>LN_+EP-2aDhN%?~Vn=HF85*S#4i!pI zE9!;B%4N#0rKCSr$yaA-hRS`YF26d~?rHg48KGIj&v~Ld9i{n^=~b=6hZnkqzqHyD z)apE>@C+`0!4|vDJdy*1stliqRr@ft$|5waOtAgbhkt1_#NOzdQK1!&D&Go!7-qIa zt6b}MU2c-KII-$s)Sbuw*piI#!^S{L@AK7Yb8YFAxP^fJm*wTwwqXZHk1qYqThF%g z00&E5wDn2M^!A!72iFf>@Ai3CI%dP!oC^gEjCkN2KqF;ueC|#&8zfbLCaU_e8U!hJJP4C9QA8|JJLk?q*nYZYcn_we>>7v!sYC< z0f_De2ts`#SYPHMrQL(}bDlfWS@W@;?j^L-R2JQ`qZAZSLb($AHQK)`d`ms zja?*6PTnhBBi9iOT|auxWlp+!@Atj>RM4HFFWzk-{b}eII(72 zfPZ2xk>G9>CIV1Her>!Smij-~y9=(W+qKc#e|pm0-Hmj2OG$T^w19NUBqu4|EnNZv z($d|HbazUt)0g|c*LwDP#(2NL9(#R^>pain`k6Y!SQ+o;RLc<1i@T>``t0i~4#TVE zk&qDWV1cCiG4wXv^JufT+1yd3mFlFpm|>}nrk|$#yF6HB0^qbHhgmQprMWVJm(;S~ zaAudMEbAHuqU11MfY6T49T%USjD@phmJ%3j_A;qP{0zR z(Tah79%74dO<%;AChFYg!U{fMJA&1=bG(X1RP(4c+^2sIylPc>XV?!z9eM>^ zT3r5YMBRLHE&aN(BviZcpcw1@A?QAp|xXVvH+=LWOi zm+9p{i39u}MZPUQ41EjO&HVs<__lDz$ngia8z!LkH*GhZtmG-I(K9trXXT9}~VFD~y^@wucEURqI>b zU>^(%A!qanp_WEwA_9Sy%RmV^6e*z1CxAHvmZcn)wI$>Z==H>r4p9UU^Z`UWD1hi1 zjHLfj83ll40^kIL>uGrj(CUa|rI0my?v!OHWRaC|N)xW603T^J9BCzCh+u5C5L%S& zOy3wp8Yl?XxDjpl=?hB$GC!4t8TIiv(edC_$~EQ`>wg05qS3QZo_Z*2%nKn`DF5m? zOXguZ#C(Osw3f#hj-+>Ck#oayzI3Pm1P|1P$V$Kl9|}T_Kt&o(qz61S7m751KFtjk zV*v!_{m2m$vZivD6Ggqkrn)6LCVO03XFmfbSD4fH6<5zDnOMYdt2ud zFqGh~fS5Dn@ywxcDIoOkN$(T{1xXEKXbp$&mHXy= zjYP{T%p3;F6;<05$IMA0hjRjAv*L~*QT4G|rZMNZ_#+wH?qVx}n_Y3k{V zTZ+qDIlk99)GCl^n9(rn*M*H8@KsXA_W6KMeo6n3>Du6PYf5=X0vhoEI1B}l2EkY= z)bJ|Rt~J+;e{H*^2GvuM_E0r64y#yqx%?V*>d1DBh2WqB<0fI_pCqexB&Eobk2H?4 z_l|*|m9DZ=jT_}u#)nFHY3QC6uC|gHNI+In1W+4`wB$X`(dzN08>MuWPZ1WMCS!?u zM3seZ`h|ChK3a^53WJikh*N|>sXg+NC_s9qa!SYek_Xk2%Bz(QG=bO=HBE-9HFC%! z-B?{w_xKQam~@PZ-bl6tP%p9V=RERI%X63v8XXVy$z9GQ=O3Tk-0OX&gIJ>EZ8PWX zGApO+=N-@S&NRX;Z&Ze+EN#cwe%>td1Y zBAJe^nRA1Uji&v+ww(>P!@7o(GpqA&HWz%2cYHloVtlS8>h24gjwamiP2PAmv3Q|t zxj8Rl1nBzE3wgvX?G!BqjV-A|-!F}x>2a>=ssGfgC0p)pSfXXsPgT*EMAvT?S@t&> zi9l$MWN!!$REU|7j9TZ7jgyPV=Z~i6{wOAsXrhyV&YdJDl~STps%3!cv|_rTui|e2 zqb4x1n&$SB3zvm(F7S?DN^BE3k7z)@JzVSAOOs*a0#8%8L9_F!uZ=-{s!@ON zs@JGdcGGG*Uu@?@MOO(|x13n7m_$!5SKol>fU`t@D%YT@=Mw*wVS`i%zx#Y!FN$3scHY5Fyl=z=M6R2&Nhd!-GXa3Kdsq9%bUk!_=0g^ zijBB!$7{hwYaz6{^~2;Pwzj<-w|yLFL6^IYQf1*WwvE+pfp%`OwZ6@yYGM0x`#bs$ ztgt1VxCN%}R+=)@(#d~EnA}o0#?roON1lBLsom0U)e<{rXM4hO=G^iP`Yrfx8N^R(GAd^g$IuE}w-7EXCrt7;J?k2Kl6$HN_9iW%-R{ z(uPEJdE|rm6uXR}I@Wcm*7PODl7n0DizW(-d&`x3mu=Q%==-JQHgnATdMY*rV*5w8 z)~Kd75NDg!^Sw757E%(;wLJ9eDZM zTFcq)k?+|NEZW>z3y1e?(_{Kqs7)~;k6U4$yralb`if*Pwi>x;%QguSyJ4Y zS>P#jXtA!3e`ad3-n`w3Z{y4c*O@o>Y$3vGS$=mCYB-tZEb+;ikJp(@=6q4!W)|^$ z9Xhjw;k3ZvV)NtN|9)q+bYQJZd7ENw+Uvp;;bJcD;UQ2?EriUQQ z@QPdTv`6rutFSi^>2nIqOGMyG9CUqPu_N!aDt@sdpQ{IY7xD-`k3g_A7|pIn6WzOf zx_<{mzPmkk9&MH)bAl!Jh+?kpWgYKjXX~XB?4>jAWq=1B4qP77E`fq~Y_%>MT`t6G zx%S8a@>Pk^5rmxV68s1g3;a9D+${r`yAe`?h{{NaKfjw`AQw@Is-T5JBpYKJP;a;+FB43>f;U^^~Vs$Gzg-GJYExi zyyjcFsgb$?6kAWuZn-d#sf%xL{#>$}UCq9}I8-AymVBu)2Zv6F-#|JwmQ%Gpf^;Q7 zdXaZGpj(wgV)>o{U|P;%57&|mWEED#{%gS09$Eb530n3Z@vD;^x@dNv5MqT;FDlUY z^G#IwE!DSMrf`?qLa<4&%tn-$gc+(P7MLs)Q#%CnUeR4>P&gUXE;hi(KHpc>EU zz5}N30Enmk!=0H#LMv);8*AIA_DPA5A8+-%B^iCj4`MTsl=r5(kQ6m~!geumZgSCo0Dd>9F(A_101AQ@Se zLccP6p34b;E_39Dmx;7m`TWH5t&6lMy3EAN$bQ-KWB}dpaDh?S%!#3b*dbd1k1wOj z$n9h#(jgc^VA!v6?b)M;Ec3`e?D6N&SF3sCj-K{=G#pXqL$AveT!`JT@${dwV4(-> z6u<}m54;Kll%hcmIUpQ6{0Lpl_v_gltP98wb{Ydio-z~zr_2JgU-^Wt+zKDkMU}n& zMGaY#fUHwK@9UAhk_5d50J=J&Y5)QQgJ=ktUlmC4TBP4VE~dV=%oUagCPuP6ad_Yu zs`PodIX``PwbjjYhr&VTt`ZA=RK$##8cW61{&?i$N64f#Kbtul_-OI6X_Q)9 z%*R%6O_4J;y20A=zn&lrM!j1n#!vZZi(gSpf44kc;@C8xVaFbSuV138LBdi|lJz`O zURK#wnOh~EURjk0M(C&D=Iud(rHpb7!C~X=4#838+}6O80)b@^+%je&Db*{8fo!B! z;+Nl!C6FmSaYgR@h;hhz-il0j^yQDk;{#B+g)g)y{0{V+H=w9=U#LXwu}x;Wv7g9EApaTgC9)D90rK}RcQMtV?^C^ zsgna5%*fL#xkuUi8r@3R+C|@w@U8}Mj|-f3)Q$WY?ckXP?f*KOl0p(|oO!(&)i^6a zsLDI1I!ET2@`WA!({e$>Hl7Cjvl@xA^qoe;kO`xex@wVld)7wiH(0JNk z`kEIAd7!kVxv0+!;u~Va*IPX0Nx%f z(UA(k4M=o)PKSQ3+5ojicAhrhjv?*DlYpHuO+`lpe&-cQj-^fqZ_P&QHwj698KqHSm~Y=RX!YVsyF*xi zK~Ryni-;!cA_V&Bq&)<&D4ww(aM+e?Fy^v!EQtxfrT0VghRdk$6+DpEG|5UJ32Y=N zA6-Qugg@a1nWC=)Cwb|F_rr#7&mf4l)5uovURZe0L$Gy#;Q4UsJjD z=feO;Qt-l9MJjjzA~{Gp=6O6hYp4*e5Z%a1X~|Exff~Q_$QTtdIL>Q6xd2TPLAF&p z(Osub;rCe_h&7L*9!%q0z!0?7omdTh1yu44lOk#YN!F>!Ju6@6U(5Kh4tesnelD%Mr#LJqd z!!h1jJ@EQUqT7Qecwl|BkS_f5{Bwkfvgtw4BNeJkod^BTgLqLv0DFTX$W+pT=-XJe z8k>uB@tPsV>2jYDY`s&Hu}x?O(Ez#zSB!*DKe%K0i%J*o>p`?+iV+Lu-SbLogaa!o z1)U-p4)?;3WXdG-=EMBuoSnbc@R?AvhN7Y9O*NPyHgd|%GbX0j>3!AKs3OPXaM!Q$ zwAv5k7)iTb#5q3;alb{9(eLvsr7Ha*R$)0u#JH1tQ=_%4AJ(l?Tas4c7s@>ywXyX^ zFql4YjLp_pByuhf@u9&D{fNRSwSQdv&J%gmK@U@8F>8bO<0sLCxgFB^9q4fF?{!Cx zvgNS}f~vZw>hrj7(W}8}6BacAF1D!EMFUYh3jA3w3kJk5-93{SOzuqOGa`kA7hY=f zBvZyBIrR^suSQ9eT*5#$pQ)X{a%`J4Wexp2_<7OjEzWMvzdA?zDXk?z#L@aQO2-18 zZ_}Vq*LCO@cQIbRX7i-mYw1*HPw;E7h!xQYC7AKr^efr#z6P0`SJ_>Bbs( zl^^-~Yi~zC!;jT*Qocl&<)Cy@x2gEB4CaSd8v`2f2($TD&RW;oLqJ}hEV1kjOmu;H z{ttBcTQEgE-|M@mgn8%Ot_4bk4ig|2@-VTExU=|9vFR8X^}gfc*N6+QzOA74)u)4-|hBU`X;kN5czr4AG`MGlXQ5rzy~*n@BGsfbIm zGlWW#MU0bAAV!T*gsIO)i7B36;%3ndrl#YD(A|d9$wUi;9fbbrn1D$-WtX$W)f}fS5SFwaU-RrD=iCTH3Ji4Gv zYmaI=W&VD}L2KV}Yu;YEf#p4(6FQ|EYp!QHRp~eCG_>lvyXsxV%JB*sCp(%HCH%rA zyS)3wboAQ2yOO%}j_UNf(JQ*PMY{6)db%arNmhCUgZgRoyhZyQ5hY4_^mJ`DrrkCK zqa}vXC`Q6idbKQilkXd*d9r5iYi5h|vK#vv2POPC2kOugi$QC16b8i`Ol$d4Yc&QN z-BKG<23y-wTNj46@};+)40aKvcJU1MX{GjgrItmd4z&!9&83cA31yR z3@(EVCz4ojb)@5&qSF4eBV8WT z#T5HL9qA3G_=EEJe|Mx45G(%Gk)~iyV)(lw&0mrH-;VVEokrS(eSNWJeS>}Dpl0KO zee=F%6Ux4YSi6P6u}x6BO~J9lP`ksyvCCh(E6%YeU%RKqv9DXZZ_06CTYKQbap+Zh z7{qZDQF|26ahz6roX2reT6?daK`E5&@+HQy>G2NBP6khJLe1-1%8} zKTkCvb3(K+1u4YMiiT%L5Ux}M8emcs_GWAk!LUU!7CqAQozd>GC|@JCn-dXZ)uuBmJ(>RL)BB zmUQI%nI+F#7B1-F9FR)4!ILUd_{E0*K*Q8RQKL|{UZkTl${t7Z zn_o`0-vW2vNI(kQ4q#w4?VnGr6&wcE)eF9^*f22D8k;1LlEozXi zlK+sx{|gE){{@A~1A839o^ANPNmO1c#=uGLL_e@$eoJqis)J%$i9M>^t}wjUSjpn~ zO7h`ldqivyPV7`Q}!rL6z#vqAQ@g?#_4c_tl@Lx4#+xHxAza@Gl%(5?KE? z4n9-x$Br&uj;{3)s$34s738RIA+LUnZpny&XvOFV#_aUQtR$NL zrHb`=Ed@N}4`c8&W5<_cCwyX0`Fth?G2sf);jhpU8ZZ$f(~(xtkux(Pw<%SOgFgd}_QCKD?rm+mBc(4@SQP7$(9aSKUdD@w^J zPi6(BT!B)HdsAGbQ<*JOg^1&-LsCl^Q`dS^za69&!KT?ur_COv)LEvzElQ(iN-OM5 zJ32~Bg-vIbPPej5mtsoK4@v)Co}S#Bo_3JF2%BNRl#wHyv1ON$5R&n>BDJDCLnA89 z5tIpfote>_;hD*Y1__jV%{S|LmI))S87h zlSN68{UItlu@$?q6|0$<`Wtb0TPAa5rm{Ox4pvBxgeSVUA zt`uC}<1ypqan@~X@^x$e@k)N+P5xKnf=EbqacBX`+k(iQ0{ij;f|&xWHb$JR9K!ER za7mku9l#!`MAq7KU%R!QneCYRaPGI!=PrP zvUbR!Ht?vnqp&6*u@=dqx>vYn=X=@SbHP$py4vf{+ikT^-)n!P>nyGtyhStMn zv(TIp(D^s;8hycKrC4h#!)k935ve6Hs>e2p6flYkgf}KVZD2wDB7+(&X;dqv{8sK~ zHKtLu>dyx1_Qp+^I_Aixjh>n<;U>+*IB zx#O1%qXs?hmP?k_-KWoz*{wy6_1Vg;X!dQ37OkJ!+o}!Q@*J6RvI#0<+5}|UpRwEb z!0m6j+CPsqcAnC-#e8WtG7P9{i4^FFeQr0b?C?Nsn>=l-MXi$f*>M-$Q4TF^ug>l) zZns!OCGSA(OfTu&A+0PN=?EPAGQZj}#?^J^U$Jl0JV@Fh3hrEQC%GBJe-I(q9Q%A~ z^sO@Sn;}fMMg6xE(yoKk_Dhk@qxSA!j@_17-EsyUuN_;E)`($6zd?=22!G+j2XtXn ze6M7{Ryn6#xrpx3&-N4T(8r>FOkwMPrJYh=4uK&nsEqR(Ka#}vlmnaARHpV^=; zf*>4B+z`(zU5n!{;^tD{@YkA{$jAg^@rB3#4UXr%;u*1|$pG22_Z+(Ye}Utke$4Ss z)qoCqrw;vpYvU_KZveoO2DC=bkV=gH6z*MLFcU)(tUg&X$;;}iM= z(*tJJ0|~!|;i&)8#zq!{R5^nqsNZnO`b@#z-rA0Mkwac*1LbVs7it`MHj+s_%tbw> zA~mLEF|42H`IHivrh=8!G1`d+tlvAE^o-=A_H?86S+(Q;Vo-w~3|p@8B(GWGmJPuU z^@MfwuaJ>6SL3ad;kN|flOL*3dXJjt@XY<Zrp)L{fALHbzmacu3Y zWS_~!$hMvE+j5-$&|!Tc^!}p)9YOB#yuI}t_%-v&cv=`dEvbbxlk;zC3>QSkJ|_m6 zQ?DNXtvHI!r!kE-oft5rv_6Is&VzP0O81L^7u}iH92A+r1DT$OPed5&2clfz=n?>5 z08SS`a?+TRD_m?+neVIeWgYP4(}6*?oAu}zP_7v@{_V>^zd*T0pmXjMoxo#Mw*+j# z)XM(VKz0(ti#wliL7!*F4(R)v8o#cY?HZrY${i|>2!Kg|k;R|WIwt_fIsQeB&6nT5 zP~(JZ={VAlxp>rp_>K!a2TM~*xwCUafj+50Fm*xMWUE5IX3E5{{-Va_%i1s07+6g* z3G0WRlQsq7L+*lKtTCg>kZ;TLqg zAF5M{?0v&-8$6NnFVxr|j>l+yJx*8?|7hd6Z3pZfBI6Bu!5swS9YHnR zq0U)11*{q|WG?Ytl#Sg^$lmSs*3HAVHrKYitUn>yhB{|`7`Z{D}F*cG8Zl)l~%uiT4+*^gk~f{Ne=;f6>Oi@u&CW1n~ttl3R0Wg{ORlX9APmXsez7faBo5 z!11Y`#kjr3*M(wkVP6Y!UB7a(uKlX0%dmg2wxZ|dZ+u{5&R{Es z3AmsQ3E~0V))R$+0b}t0ZXYMiwR8MXl=^{Nc*oImH|BC7?)EnJ>!DYiuc+C6xUDw= zcsRCs*kpbskrG`CL?e&-#xv3 zxgH!|*m2{acVd|%Ot<4FNnf|~t$?W~AG7b^r>6^x9~>4=!x22A2S2{&KF;tvFGTp# zn%sY1T-+({_`-1L?C*zN1z&mYZ{M3&x(mCeEkD8Xs`A9)u**3gF!i0ED#D$qJ5-ZBq%1&Hu9x>Djt>{qRqoO(Njve z9(&7q)i+#;{h7jvic@~98un{68mal2A~7tf`rRXJgd&PMhb47=W0_`W;BP3xIHBuQ z<(pS_E8Npk7-8X%SGu5#)Rp=?2&Nz|5Zb~Kur68Lv$m|a^>*?uz8G0cnBF?A!3(fCpbjOM$ zp=jV?COD}ZS)86CKpuhy;K*Z@hrrkVzz73NKVH)RQIh47!;chplOr?>n_)V*al~#z zz)Z3#5Ry!pW&`SZDx$!P>dZZHWJEK(1Cqssh;#@Ig>)|>*@j9-yP8X$J#y^k8>xN4 zs~3#CrO}SeE>c&_gDCxJmI4ZYKBV^q?2s-HWw>oe0_t|yr%1Z9LWZ_(|2Zcd7 zc#1rM+MKG0g`Z;sc`QN*5MKqu4#IiU{(zNyM|THn{_zu>b02#!enzUUdGec!&(QiqdaVauXlc zbw3rx9b^%naIT!Vm8MEy)N1ev$F4G`rWfU~7Ehk3rYV^GwM)`>l&zX3;-u5*h9N|< z@894UMX%BcZ7^a`r$t#XKh4>!(GFpcN@IRJlT*|S3#m(>rj3WJi2x9y7lK@SKMWq| z(`~(~N0M;SJ%MjE(8-ksKf4N{QW!QVx|x**hrKe&QF*Udp3^`ak7F^$OI(jQc?67AicMAi2owU zY{hkvh~)shl-<%dXu(^-{R%r>A)MiOCxx%Sd}HW3QMx}*S*Cm%=Iud;9(j@0YXh7MGKsD%K%O+H9NwLg zBEFKR6c!KNQBY2QJt11pg8;3*Wgtf}F=q67$E9(g#-wQ?kY7eI6yA~prR$vuGJJRY z4&P_L+&ZvX|L(iq3>)RKxad^m6!l5t)$Z>Wb zcd39RhJ+Hnb9>k*5=OUg;E7c}{(>+*_>SaZ2I@r_}nDo(_z4z;sc3ut@1^+I)T)5`sp#y0L* zhR5!uYK`_}haX41yKZYfX3&B2e;vJ*_(hLP{S#O5PtM4w^L?`5`t4iEx3J1!O^s{> z@|W|$lipAc-UxKha<;d{(~vfdB7D^mIW88aI2R9J@;fHNm&=-jX0&2@x#8CuCp4+G z9yaWr%rXija|pe>#r!45D6g~TUhSlmY26;b3CEp}#?dJsI^`kr+NUZ+-1lb#wNr0F(Y^jAC6BO7ghANV?%3RY>V z(m&0DF5!%%W(Dm#N?(&KXPLQ@_aV7Si@^*mE}ATeO$Pir8pcVgx7UrAL- z`!e@Cv1!3->8W0+`-otBYdn{--JfU&cs6{^u}7r)?_rW*72RV&{wyo5S+SY2pY zjW^rES_V2G@(MO5s29XoBbdk^KXOwq~*6G-Z^~)G|74erUHii;TE&u)Tr*D=i z`NQ9;c+24*RjiO!5taCtDqb03*}G0I5w&5_d&<%sbWdyQu#rX295X|FpE00fLjQ4P z{OyY>-aWD5`}(4ayWCQ?MPF30Z>4+l`@Fl3!?>NysSk)A1%=0Nr3hbCaV=XmcIS&K zZYvJ^OBIXRQ>SOnrVo0Q5~A3vdVinGm#-|65_8Z@|K6F#@A;yNPimvH7CuLKRu}f! z8!UZa{8V~Zzh8=_ZXAi0wzVf$nszgI(Qpsn?*)s?A>iii?1X9vA(s_8+m zW_(9y7w^?o=z>?vKuw9QOw-z~ym#4D&AcbHY<0cUt0{W*w~HT---bk|cjq1ZQNUs2 z=1;_yyg%e~V5GGzSB@5~-9Xofw<6n2fj)io6bFz^k8Ru`pL*7dnYg!WyIL25@-k4j zq*uOs*kZmTIuv^;@1A#9BU>wt;-@o*)(*I9TP5EIz0Vu_xz7h0vTFJ$ax9{5rDo!_F6s5=`L9i5g07CM?61WZNqy?oK{yED1_0$MTr z`sic`9#;Z;j>);Vx7UyWXE?ap($l;w1sQP`u6=j?isX-P?3sBmSVbyFmXMGZaTd}` zxpC96(ZUAejzJkTF@8^|xGtCVIF=5DPT=R~N&?$56f;zq)`XB1g^ylyOVC;D&pi}~ znh1tUdtP^cy*h8>s*Qm;8Cq9lBF+0T)a~ zQj|PRMk`$uTAobbiz|i=5|5JgtCsgCYmDmPiD{I8sm2Glq`G?0y?<6fo23fvC&u(6 z!#2dSK@QfTCJw->_bVP=?Hw+i9aLL!&;!) zEvR=f?|LcDHDp47QUpG=5p2pEF3MXC%KJ>^WJuXlMgGs@j=1hJV7d&&MhJainhs7C zBaVlBg5_dOqY!I0O+|{Tsgj0#HeX#cURra~VU{fbI!kYp$26cy*~G;v#>axr#=eg8 z%9)yTLY`xSm207rxrB|UhL@XNi?@c8EtiWAfnC66ZmCc!GHLE`WNx!#PB>gz(56N# zl}(bKQ|eBO`*enuejebNmofPwXVNP!_v-bXfRg9DgZ=zWh&I8PHskuda$JcTf{a|r z;2Q*;4Q?G0!k& z7SlI3(nkwic0bn>iP1l=)^BgqKXlOlfIb&hBKWc7ODwrc;=)ASfM~+L{%@+4Eop-= z$CVTv-QYk20i%_SYJ-M0gP~Ca$F&uz+!g*)10^&==g#)RCh1RsO3CYd#q`ppVk~9h ztmWiV73=l+Iy{xKRjNESosysL-jpox)x}9ROsLm)@_k{KY-$p0G!dx{UnvYR zVzF8+j$5tqTzykz*7^w3`Xm9&L)ZeCJZs_ z=(+2C?5(R}t7~$t-}!{Ln#8y7))!e!{OLD#JgesRzwHfhZ?KCUt?L{%aUVB{o_5Ng z)Nr5iiC&;fotGG0>6ljHm{I=N*tFTW#$Q}#-((aq+fy}r?QfPIV|Ev}`0UyERML9i zv`NsnDL=Q#y0-}xivo1%;V_usFN6>#OJSN#kQlZU#5NkOwz8|XV8YDl+P5-Rx2D22 zL3ta0n!cjx>S1k2Vw*N%Kuz)Zx4UR8a{MivoVW4w%xko^N$y)n)uajXwl!?bC??m4 z5G}|rRH-L5s4lh*cr4XSb|`6~J0JabSfh8~Tr7X)S{799P_*wvty&VFSV}%yMxgG- z%UMoO>|B#uv9Rr~idgNd?)ExZk@;H%XInK!?^2rV(uv0lFV2ZfYD(mph}UXLMr?~N zT5(YCVd7ddtL@F0SjRZ*5&BzuXIuAHSig$59_!rG<*|O6upU^q7CGNjMBR5~wMi4Q z5v16cS^V@SOyh zM@?$pTzZ84Zn$l9*D+1=ac%0c!^Lr~T4sT5bAE(g5rKm}w*!-j!!PNR;t1rdAnb~? zx8=5bWu?Z|7;kHu9sYFM<$XHQMs-A(J+2KZFICfOym(v7?NB zFPyC|K8juJxF{FZo-Z@J3pic+abUficCi+5u@Qf{FMoNS_wJ1U@=`7DYVh*f>zxMl zoyXie+LDXg#fzU8E^q>7H5>@*?O1}a!LNxxMpuf7{|S^I`w-tKfYM#T1+Ls)E>A9( z+iC&{f#Jvs5K329eLF(%ZB|S|9|7YF<#hvnuDH9`=jQEWkd#RV^-Hn!%c%4x7C>c0 z`enp^VPSo^iX*xPnA}EoTsTNw|AbKlz3^nLG9%X*-s-E+M{wi+@MJ7Gj)$92;714c zd)!y92Qca|s&SLlAYDAVzBcAXXneqJUdv$`bOjUKK_%W1<(441lM@(T=+` z^l2$5ksSy@jzeDN9jC%(dCqjSfaDPB2$okrM3!vGoflafiWy9C<)MD*W@$z|ge9_! z3asot)U%4X!UN_n@A{AT&k+xy=s$JofdxI-T|?2d!}_8xP1SvxKca24iC9whIIZ- zRQr^F|D{fC(9?8`Z$@OmfzflHnSc0)JgmAL;3)G2BKu26F<0P#TX4dz0>L2Y_R!vp zH~Gr7fA=P6M+nlc9W_PyqLTx)5ezl9?#-^r>3oc6*?ru_p_hP;r2)&Suvg4`Q(;) z{zVlJYAfAUYP>?FhmnMaZ~^LIAvpb`;Rx8csA`mE>GCEjz0VT$v(DceI82kgf83x8 zHM2>Rc%Y~e(_ZyU6Kv*moL+@i$}6o_dY&HS-3RWxwIO9Q7#9c4wB zB|kC4xEzoF%9hNz{nO!UoA-~4^Y-__n*l@pOpm>s02eA(0td)vHyWrlMIXktL;#0~ zMv*Gic2K?FE|Q5!SL*7R|AuqQh8LgOqHU;0B*!G!EUoV8z?~xip&I<XCR@o++%fViO z&CB-ft^BK|?c@UM8;gMg%kRI{2y7_*_)WVOC}YyR6(0Hcbz2yzOJFXBvwnCI{ZgzrC+jlK~&HIJZ)`@0eob@{MR)M-A8p;6t-?jI5fel;JeBN zSxFc~vV_|2U#BjDF2KF7$j+}xvs-^Zy@LFC_i7Qo>M2dH>;8pVe5QIpE31a%qe#*Ne12KbO z3;Z`xHy=lrxU&l01fIpr{R-NZ`i;&4k!{S!&MwMBrL%vn>VRPYFAayo%W6r71`y^A zCvw;!!%;(efsQK#&fETI(!y@(e`Rq{>#6X@++onH83E#Ds-XzQbUY6DU=h(R;7erh zwyG>R!C?#e|6}j2W8(Z5c+U?$_&{-YclYA1g;FRk#ogWAio3gead&rjcP|B6=yYj+ z=bW5-?`E^v>`iu){y)hi^UpKS^L$^QHyW7;-h1#(0N<#7PW%YIpdn09H==Gm&|Fjm zPnnt?LmIJwyYtNY&W)py^l3nz$3S4m_9 zKmwnpLUuzt0xYEgp+^DU9!7$ISPmePIfwW~@iFua4RS^yvxxR6Wcs?&!DzcW60IMG zIKvu}y0XyGFe>Eun;IY7b%(yA`?R5=`l)w17(B@|<+ zqF?sOIZKr^-#PiVJEmbw3gaBq%9F8-7fF$*f<`+kQ-LD#A{gXo7#vhFK-ykWdC;ik zSxAmr9VL^Fth~!vB6$yzAB)_WDu93;3>Xy$vS+Q%o8cMf!#A9&)t41o2VelUf>xA= z<0U>PvICBx3vfnHR1)aeqAjiV@kRKC`HmcIF}>;Mna(o93k^suPRgW&B3{XJAqg59 z9S@~wY;nvNNkIh>5jDTzx!DC8mwbOoDCN{nL(bawhhfrC!gE<4A6UZEfO3d?sUBS% zuiK9}YV(0AfQ@>RtGo-zd)c*^7mm`*BpelU=Y`jp2>{cLN-_=4&)g*@&`$8G_W(~K zyw-r!8fd1l0n)0+N~D^@9KlC;=NC7U3UrhX+5{P z7T=6{-~{+~UP{99Z#c6Z)Plpa$~>aiGlnHy>Tf5{y*}{AP1vY+iAk6P)FNVMVD%f( z0?b8>&(sebcqq?yJE+vX?BE2i#yzJ2xsQ!?&n#h>7h8ay<^oB{TW$V# z+s}M04N!4ZzWC^R1F*t%>Q^k8ti{?oeZ8%>E1Gs z@a>lcdKLAoK!FQpZ2k#?RmVzueoLA+cyn~Z9DeRr)=4~VBotgu019M)YzYo&hT?e4P+gb}Un5tm!_` z%q;n@sQ{ABo%Pb(_Jao>-ee?O>@Ar4L-#jNCU>N^5jvy$q2`)5uV0=O@I5)S;bnX>4uLQHw zzUwZ5;q{a-^#BApFg`gwx5Uy>a;=%;s3I6q47ucsx#A12_ow4s_mRjp18t4t?E~W- z_wnK+y`mKU;Lhy3R@v{pT7X);QD^)@>AYu3wI8hdVs(-~cNc$Rii1gW+CGt(iW33Y z!U0P}5FSAgHZmy`JID6;HW0#4Lb<0ffHQ*y=rt7>gmA?A-02rm5;kPqA9*CAK!w=I z*4%N-s%_MCJq)hTojZ|TH<2Ooy95a0pf<#g5jmb&cyz2F^oZRFPSQew-6t7?wX{rf zD&=aH8FI3qm&FJ)vH@&ZVVvq6lA%@7D>8YfOwhM{W)vAxNk!H>7$l}WB+-02NL?_d z>>i4GKB@^Rs2-6TeV3ZZ0R3u>g(!u^r6AP1U^a}L=WGfmxgal=oX;?lubO;_pn$c_ zD4#M%U`$&OU4?&ZUmQ?ids84JBq5Y7D-0%|Ln{O$9lZTfz}Z_MvIisD6(q`KtSw`F zC2$}pX{?}WENDToXjjPZK_TG-l+GuY+>(?Dp0V@HYTLHYgxMuUq;J>pPs^c+Lsc775&zp%aTn9YQ1!(W)8$h2 zFQZ%hKPAY2!^UNe?Q7e6I|nD_UplH=yH_@Mmo~PmTDqqf*Sdx$ntO+?@9rJKlTI(M z1Cn$4#-<0xXIuM67FM^;E^nq5S9?dNYFc}oqf)09R;@!4TKa|;*0%hUa=L~l?(QF# zH+H5MSND!i-J;X1g5#TdhO#Oe1}A30AIN+YvP&DRSC1b0ag0Hg^wq4^IPA z^450_My3~*Hg@{QrY~>qVsp#RF0bvwlS&)f&aZB(n!AT4=dW(R?j4^tbq~hol}|3L ze0%(HbNB6U+xRa*{!5Tg3;z=2zhUFQVdKAHxtMv|Op$&xa4`itfJn@r!KOcDK zKd1>Y_?dn%Q)KYba`35QP+4T?L+{}5`Ctab&;$L@qvcTNTIaO?(8vEpHiQ2|o2j%1 zAsq%CqO>A62%Mt+2i@#N0PuO$%@4!Bb+f_9_w%6##9;-4F$L`onRZN$*Fa;C2`{v* z-LXsR#_+K#$dXEy24gJR3d`yRuJ8q}w4<_9p!bzstN%~RId(L|YIKfZ@*m}_q&;DL zJKifWA^UoC@OI?=KhW8A{7dEN#UJS0Q8|Q_v_(L0pgmMB@I~*BbzYGNExb%Y zA^*0{!kN>C2GbDvBlp??NZtfT@_)oL>}2)^`{Jv3P8o-!?th~*f&g_J z^C`3QCZxaB^J`r>;NR*wQ238}R{pJ?r{%HUPIf9^7X1`x(t?;-{T*2Lv@cm$$^>ak zDd{!OSnA-u)4@_h=5Vf^<^5_1X#kvFVBZN{dfHe%K3fU)m>BZJJb6tl7tP8EPBvw( zLRI}vEPu6{D9FU}f2GfMz_3{M@SfFw=ySw>(Pz`RC4czUQT_!a{*LtKcbTu1S z!SR&J)vJlM9MgAsI{jf$SViDVx5!ui+_Uj7{(OVgMwr~eI2+$N_VM5RIn{d^x^wj+ zdi-Df`LKspaJqnT(~s*=xv!5QKP2)(r;tdnRh82b-^c2XE0)0qdfEc^!0ZoBz}o2I?HP%4`|j+@E< z0B9_1n5|S1ozDHuL0+4=AA*i%;!y6fYdj5WB0{zVQu5Fu2fR@5t=4-M$lV8*ODY=& z*79r5$Q%gzGf*my+}sCz`-dj>2Uo5;LrHrsQ}ga9ePBxOBc&;;_l!_+`an2q5E&CZ z3@bbj`SB-_W9#tUxRwLsse_rz1ODtI7L;iq+D>BZNhJ7?2Klt1?YKK`r&;cdW#hOf z>PVT$HJ!;lkn4ATIf4ifHMNrGv)2=OoUhww(skx*Bi=ZC1oaPyR)!Z+hTU{IH`+a+ zT{-`Jxju41oL{-G8htui<-NST_F7<`V#1ms3Y^mo>Okol&D%9Hfai6DU-3SC1=IgD zm|sp#iAeqPE$Z6 zQ{y6C*Fd~ICF;ifrht|{gR^V{J~g`i-C>R-#KlL=IYc2Y7Q%dG(ebtLzgaZs&h+9& zsPfFz|Lz|doiuyb_x-M(<}?=gTSkl5ECwr#BEw#*5dW8qHW)^CS^8jO5Tp&t1i@$N zLuUgZasUV@4{s>n-u^PU4-UV-Li@_j>b)qnLPPb9UhOiRM6v z?S3xv8lk!-cIeJ@+K%l0eE*M$?$6mA@t%Z2+xcHjbfK_&pEX9S?_5#TPXL7QYts}4 znMgcUc~>+9nNTPQMeOP9jYWM|tXyVzC<_U2f1JDI zXYmh!LBeCPyYXY~?S@9c0rU8gT#hxEbjC<#ef(yzM6A>tLa6m{v04Mac9kB_)t~(q zrk->a_RNSIHiPK!g-6)l- z-|U9dY~pwc_B}UjjeW7#A0GSu<2_TYfBi`f6A|9mn*0$!Zf-y)U9NC@8k32pS{y$n6~sG)at&WI{WG42!Vq zAqk>^z1c%#N!|PQZy-m6$NX7>=9DF{lh{-wiGvfx-#F8c z%x07`w$pVZboBzOG#4}ksNO?Cv09SvIDRZ9tl!YBQ;O@ zxcx99mvf~S#Z zv6nj?0^EP==IoK1N|#=CY9OJmd1VB@#|`kkE?OfAh9@d5E4fH6zsQ)r!?hlCRrInS zChm?t8PbYuM$r%MTyJUHmr!2?XqzQpm%~IfyrTIVrE}EH$Ty;8! zL8}p0IAQCiW3aVqtHA<+zCpO{RqMNFrm!|ZB|ESk&`7R5bAyGPVz||8nrU{`?dxTB z$*(pW!_bVB@s*W(c{%s>s^>S!>hP3@$bFML|KuM)A`?c+gVP5m9Z(qi6X1h8Gll?$ zyg|@FB7q~-=*=}d%p3J*e%Cdx@vNbShK*dq#EL-h9L5eJhA_7%fD(pBC8KDnEGLsP zRC{3H>34Yl8a56}e3DcnkKd6J^&Axgr#^~xLfZ>_xXE9LmUjP?sbG@i38({#LdRo3 z01&*Qpzg#(u6IE?I2#7f9PiO~L5fa}<{2X566J}kv+gtWVfUrO{py1tQ=NN5B3@%L z!3PyrjNSszCCDJbj$qXM(G-WMmH|?tny>))0Fa%sKTm2Ns*jmYZz{0r4UInxvc5lh za!-&rBq}_G3?yI)5Q#n@ir{JHhae1sUidlt`4qAsjEB1>VqrYW$teE^EI7Wo6QUsw z@_PmdZW%v_Hp(EBU4g`wchXrVA$|E^@5!M+!OG<;sn`9Hrvolo0V%R^w>)q@h!#`| zBWz*HFtP|4`^Dd?ij0lDV0j6niDr}~^OrF)4+Nib-AQaN91I0F8eP7e`Qh zRiOZi3bI`OJP}!Jzxg5?XNXc^s@8995j1rvDkz%R5Z-F0LYk=Yd3-~L0MXMO@r3FJSqX&jHSdWanNbE;nyWL5s#dwY zCuRM1#@ULul(dm3CQuoMN~oD4fgqj*Hn+rzZNW}}^fQNq4|sD536`Km35vk1%TKJ8 zRqtyXPY;&3kfv~58Mw2ljQ&(seUu;)51NY&qaf2th!`4f!~_J!QBX35k4}<_Lub7h z(@4Rq1!UHfm0>W*lCG}|PpKE{e_=$n%vi6IZIbQyxux%4vABuyn0vu?g%p{g{qV$P zG~u0Tm)AabsMwq_@}=4cH$x{THL0C1;mXytP3N`^qy6x`w)5;d|8cc-rvT!$XI+`@ z_o^S^P>E&j)2~6_TgI}-jLqO@N zWb?BK#UP zEO=EN$!ujrGEX%uakUi|$DmHitjYP7izzN^Bb{6cH$|c8F0?N5Fu*3Q*TR!2r7Vhc zz+H19p6zSee1-{UB=lH6413z)Z-Tr!!fE;O zl^{0{IafP(TIxQoEracyJUpc>E#A z+pv$#SqjxApVv2zAM8E*J8fLR&Fh=jONedErB?3C>s#xp_#NLmZG9fKmLGN1S|Nn& z0=VPek63!x$E9o>P)oI1 zNoPAGH*Xv=qdMdn2sx%NZyeQXexG#ia?G|AI2MHSm=H5Kz z)BQ1DB;;I<%5(O9*kkF-)JBEv=D8kR`-gTSm->{=i(P`})x|ECCM}jr>rl^)!)%+h z>CG$G;da^WY}c;G&Fksv=WUp`Zhg%>H^EX~dzgA+9?V;}pF>~#$=|wZuUCj z>~^o$&;FVN=Y8@>QZ?(fekF2{rw;qKy zTH$vi0Is`NVG_Pv=fWxdaO`?EtXXJDzs=V3p_8`V+odHZeqW2n5> zP0IGSy&9Gulifa*6~B6~OnqOnP<}zr>wzD++kRFl`n){)-u-}M0o->(RPsU$Fhf!F zKwI%bCo;pT^}sRk!f7+Z2lXHv@E~k3gByB~Gx?F!fSS@Eu3GG87D!B?+s~r z6Hfz?^P@!R0{<~5>DI0 zz?zvMNdhm$)6X%`-=`%OlnT?93$v8|dduD~Kq20}E*6MW5CMdqYJEg9d2jM$+&Bw@)=LxBFC8@~91E=p0;EQbwY*MJB1zpL&4l$6 zoQ+cAkL8N9Yi~5>-=ls(7zF6cRz^w0`^f@GVkz2We`&A3yh@X}UM^u7_?ee?E~_M9}aM?gM6exmP! z4%~OaBN3jWR~DupUb@Fi<#d+$37*hMG%q?o*}o;(YBgE+HrYRXbpC>MQG8O6OcBax zoMR8iF=BEuu`kf9#I;W$FqYZ_9hll$l2(?s%b?)NKDFN%d&AKov76Zp@7J;`*&IKS z3kfi^C|H%JQgDcfO^X1OB3!@l++is7sJ0wJ6Rn~VHA0d;WR{}IW&`|Up2YLGWs^>K zF=jDPf8O(eFQ&iM&Tu{}j?Ly`xsOABp&u2`#u$q`6d}b#h$n@Yz#*IbDL;j{*p7`X zjOz`Yk{Mw8I1Lh<0Z@iz@Nf_U$K5ASRi; z3kPG$jUuX9qQv6S6NJu60G#qCTDl)~#4mYDMTX@7yK(?t?nxn?Xj#?^MQX?IlA%EPaR7`=F7E&K-L3pA`TggZAco$8$AZZ#KO{DQm_eKy4)z z4@Hqz;it#{gM1`(>2D6kg){7~lo@$;9pf&7nxYil{DYZafuYLHthf6nK^aMr=B z2MKFQkgp?atw*@8H&!J!QC7CV5V!v%YfI9SXXNRaTnXFMy1H9eq8IMOlx{%Qrj*bo z!QWV%SQx<6?#FD8FWeaW!qpSJk)WfU_GM%0o3?KM#>Ao8sKO+8nsal$=*tY|rtYTp zxTSU+<>n$`+_J>zl8)e-_s0#+@s&-!&2O69n6g_E61z#8C=j|slv@vSTYH4lhcIpX zoE#^c8mFDCXM*hKj2aiwLdRdE)<5Y&?(1gH>xLt3UvEa=c6Qxmz5T|imt>@uA-26{ zt>^2t-S=&4A#z)IQm?s6uW)^v;^+4L`E~)~4kDv|NT=RBzy7WEPPoF(oTdIk)Xq;& z{kaVN#*UpN!kw4(o$nISNJ2d*SbU%m8T8^+1S~UH138$KJb`M~yg=tyoL% zak(_`gn03>^f88ZH+OfD?so$hc8PtykScbNNa~YIGEi=T)hU)b$xIAWf(-=|4WByq zXu+$`j)rhchV^HLp_7K`h(;a^`=@+H$kltyAs@fX?SpiUxR%nmi8gtv1^8kl1x$3X z7L1H8jDCDEVk9u)%?^7z#V7_|6rnnpLNpdrJ4g{bP>nhuusImXIFRcwuJSfc89xxc zFpk+gfI&KxKv`EAYEcr>en-TsTFs+YZS=m2QN5VwL&&OZ$S0P;w;#9mwThWEvw3uU zc=V1w`2$S$&`sj#k0|Aj-Zvc%Ync#w9i>E=tnr!XW*_O=y#Dn$(&{?GnLIjJH_^B{ z3dTEbLpFWSbiB`ZJWOcfpnF{U(_~Q26qsomrqk;IRu}eSns-y&bEPu&hSd~$Fy)0c zv!y%HI68L8-t?zx2~0K#0UL%=4Iw0&F@>0Ub)4u;nNd}rn4g)sDw+jTZQMPd_-&ez zGnwBYoA=3?f3-Xn@G$p_IK9p|P18O-=07E_Hs2gO-8(nO-8zMDH}6F}JEcEs|9KkB ze|DsG*4=qr_^?wv#9bO<8mE4or^{c4!cuOdR|RWWeWg_k)~yL4s1Gr(Gtq6J`q(&R zR@r3nqFHwB#HG+&ZHY8!Ij~^am2v*{{9GK-DsSuDd+M+kYrb2^>hY6R zJ^h8hwN;?{1y`h1q0hxAO6iz-!#I`f6pA)@+GZaa!x|Cx((290#L|V;duuxZYg775 z3>)j3$jh4S%f+U$WvcDMgD! zvuu>)u4qE8t`sg$w$3h++s>2E&%ipjD7x3ll3$N(@+lAf+bYt<{(#9IYU-9U z+a7QDVxY^uJks782LhTs4amOb0HR|P#!_+Z~;44??*C2tfJSC1>T8=on4h=54f_itco(^5e z*FrfxB*$O*xg8F%^hAGsb!Wd9pZ+RAEhoOsD}DW5pxGKH*(s~wUcc$Se(Sz&@;>AF zUJT1A8+lt)@BH0#k7UlhDzS4DvNMB;vx2Mhd!+*n<_%5kZy$&6)vld)Jikfqev2G% zW^4Kujrf3${~*r%y1n6IadmGJ+A8S#5WM8f;B#;ES=&6+*m}Cff_p-a+C`7pRUg|) zb!Wi5jM6_BI=%&FjRB|_7NiJffmHJIQvw8!2tP*P_&dY-xzvQYD%sncx;QYqIUW;f z*gg6``8$1vS->3vt|3CGJo%Zrg+4wKKRStU%QnBJn}x%w8j&Vukb+`m`-PDP^`pE$ zxCQ{803f%^Jr~7?2UYcN>#v$ym_i!|Jyx%T_$E%d1p);W%&re89dOUW24bAqi{ie(pf^Q}Obs+fEzYpe@-cp+@o(SWOTr19n3L z#>L-HL?!T|g%xgp2WS7X8c_23RomNKDbisk3)uOQYWq|({Zy9iIXnszKNAdD8m3d4 z>`WFMY4I~4>}N#k&$XK5er~rBbA>QSz-DFg7IfL9zM6>&u=kjz16!gH);r5yoQy+M z5w}ko$xp^=IdJEt=UWjE+}yz^JZ^_d4Hn_y*RZh-!Od(y zp9FC;1&1c+lV}o*Ce!`RZD2ofHo`-${Xqd_yl5!8cUT?GT%qhg1X(R!s^A?XpZ?e| zKn|x32@Gh+qpc+V{e*IKcd=5dqF(1m9pgrn?fzWR$~VhC4&p@$ryEvivDfi53adN& zNpZZ6dRV{s5+>u%B;=}HJYU$3+7T4IE@tlzj;8!=g(kk)>-Pqxe&Fwz_`!LxQg5p2 zq`=P{JyB~X48Y$enrGm@{57|MjeCjC^b?;m0Q zw%QwIxyik7YMwtDC3jXzDo2klNKe^EVGae8-DM)1$>SG14~ah%tcJddBg+z;?Y)Q^ z6rBk)_JSya$skF9RaMHaG`<5*yeE9wtqLAIr?N5<%BZq36ji=ioIMQbW8OQsIhs{t zFgL6(AnAl*1O3JLhl`2OfKvIk-%qwxkOBX`8 zG!KR}eLEIy5T_@~-{qjBD9yrxs5ss5c9x(L13DatV2z80oDZAZCz^wWaaLMn(}tFt zzSMS_?BKVytS9=aiU1*)L8;GYbWub&H1grWFrR2@!i{D+bB_y|Q=_%Qy%r4k!PU9Yw~4a??7SF+)8B z&3K)P+?*Htl(IX+Ar33Xy=WgG>=q3+eDBK)0z?PoIDj{(77_wRW##L%2&#_qEN?~Y z*I{jLTth#w=@Up6K0xAC0PaKvfW%26Bv?eEVeNUYIT3GP9799T#8T z;$5I?qZ%dusHh?vbz(j=F|AVB*jF!yBqxr;Q2o;}u^74JhDJkr+p_W1LWh*xi%$+# zr*aMu2`PgF#Q?|fiBFTWDD)%t7ZoL`?fNY4 z7uhR9BNqDvK`ZZ%@V>SW6CD5uX5s)Kzn6x@s0F}s_(7n!`AMoIV?tu|0N{2Eme1T3 z)2`T6e^$x~Sb7v>oT()VFpi3%md=@pB!UYNtxH7^AytBndrPC@a#h(MRRGHR{!wKB zm=HVyczKfI-Dg_mw~)&I=!u_E70jdr&t||J;`ta~Xe2rD7R?ke0i=ZHGD_)l-Bpc6 z%$Inqy=$ryK$qHNhDtYKM~LNKMVBQl412u0L2>)uI+WACYnFeXuMDiwE(RfZi9_M< z^uY4n#8rO0hQtZ`2w>ZJ?|axtCxeLs`NnxEx)`(UT+2cyM(wN5?T5*1QoZnuP`ly?U24%I*v=IfN9d&Xw)Mp7Y_M42X3&%2a9HK`d+2D0t- zV$={3E3eA};4ioBf;f;37=omK<7Gs!p3x3Ejba`kXumPGQ8h%_TZz8EYB$L%f)LIqdspa@IX$?iP@O^idJ`U@7Snb!s$|MD!_Ux4FwMaF!&rjVr+mE7mitIsJl?phcg7i z5WX0rdSSq?6n4c0+@B0OUuNrXq;6*1Qyh5E}LtAJ)xqv4e*AJ8u)5+m2B7u>l^m zK)pr=eZ{YF-3VYbbwC)W{+oqZ2>`;>;xiDXJpm9O z%p6MEwtq#`2V$^g1*n-;Y1#)GFLw$BEz<&aTXh?2-uPW`81qA%#3aiQ`e9BqZ2)Y) zRX~Bx8L24dJUhM_kW88C!2wn%u^$@3JLxz*2}CA@G-jkx010qjYZ$7$RoL;D04puh zO_ZMI%{NzoC{Nq52X6ikI+h_(r6iPWPf|Et=DOSJ=hO(o5q?wWHKAFg^a#R{wbcS! z&K=3`a=>j)JB1GbGr<+Ft2WWD{hJ75%{>g$ut8SE-DRwx{Sa8}{Ji?2*v~Hq)I{Y~ zhzWOsa5|(6uHUB&u87j`Gq#m~bs$<3^>L#KY{GZ9??dE1@`rbl`sB~ZtmHt%n4L^aq$$$eO>6yc${Al~iEEH`W+?~y-PVmZdmwlHKJgO5$R;4HrB!!C zAa)U)^=^xfY{M}P9PZ}KUg-TwA_l;cYPW=MoDxibSre_?g0#_xViMnp)2~}3!ptXG zKqg(u)p{<|LU+g$ZOqtk(i0oeLft_Hlp?Q>M0j5GNJ%T#dnaKw!Sv$DCmm{^b&@O> zWg~IriLT`KC#F^2=7#+w2}Rmf7S{6&QbseJKr`9Gm(;D5-}=Hj@W$pNI4cOlC+HV1 zF@_nn8po~(k;RCH%{nFjG)V%m@5qNudTzVByzA5Dz$jF1hQ zf=L{OY!l@nm(m1C)s?^Qt=)KmgKIGbF-7>yFaU+TEKC&yDG`arq0C7Ijpike22Exy zQ^3IVkx}S?tBIU|Zh-0IM`rZTw-g5~u)?fIQ?EdoEjgV%VE%RQm;=@?vua8^rk4HG>HU?UF6wolC z%E?qUvb(t9p~DiNk3+uYc)qYS^vGtu zcr^a%!M+v)E>tI~45fkUCP9#-ri!IOcSXTx8iH9GcJ~wKsZyT7(r8_T&vbAxvZk>QrB+B~CTFElc&DG} zXkFN7-}2GMp)Y-wER!HPwbY_aF5{^y zQ_3sL_z0WHm5`RNpTz{7JVcv4RhGSFk~2q}138kFzMY$|mm6=M2QJehut+_kO`)^k zW-Sk(vcQvlwaEKLkQTuv7TOf$1rM}E4s=lw79}BPC1+(NAr{?bbY&JLMek0_Bqb}` z%*(qh66-B0xZYJ;gq7{lIjx-q{-E=MKd;`C{zyn)PgMb~XQFT5s%Q|RZ?LC8qpIv=$AfkgOa~WEfPh9MokPGN~N0 zVHkF)9QI)t38@^3VHi!W9L;7JE3O=?W*Bd(9PeV77^<9@Vwha2oZMoVI;xzyVwirY zoCY)ezeXnC~TP?iHE8sn>kdWqvTJd9Y!Abg6mtVSWm!d5U5Fo?P=i zoB2m^&5vs4=cbzHF6Nh^nwKf&pG!4Ax0u04HQ+1eUk^3Ez{~)+S^z2w1a>V1F$*Mh zEhIAw6n8DuTNY@kT4*H}m=CoudMvP}wXn7~aV^R<3+iJn>Ms@$Tpb9N6%D%%jhGdkx(=P0^$mC3 zo42eOQgs+gte79_F!flmOzW_0S+QN~uzgu^LhEoov*M=I;pVX7mDJ(Yu;Mq@;diqV z4A&7%vl1@X5pJ^*9oG?Evl2hn5&vQ(fvYD$Wh2F|CnaVhqpl}oW+UgWCx6REAyrSI z#76m{o>GsE%Cw%!mW|rAp4yjxbT({Vl1H5>C|J@YR%7Ptl$RCZSE1{PLgb~fq;HfDBq?gsX^>>N@J97^n*9~wCI z*ttv_xNOGu1Op&|1k$y+y@9|t zblM}edHtava@kDjy8OXN9CnM1k-CE6&m>|I1Tyu7qX{&s<=Uh5MdK+fMq`;W4aJig zJdS4@qYWj~Il_SmgtCpLvjx%#bUI^=W%DJ<1+rPPU&m+Oqb?o2e>?T=;2HCJ!8yL~;|9B;1K?)HO1B$98b-R%#1L$5p0Qnx=GOD>l! z-&%h-p2}{yHPPB|Je?~RNulen|cVkTw$DeUGd zgc#`cJgF`ZZdu`RKmr{)xwnr0!pwAYN$ew(BQIjJU&i*d{d6FxDyL7Fy!8q_y?2ahB zVKKIW<6g`3SJzo0*c0pSbux1H9Z}e5boj*QeWX-LG?#D+Fm1#ej%E&K+Wg?+EEkNRd|zRi;p7mtWF$QOOim zVGn!$1wUx1>AzCealGL_rph|LW}U(AcKCt8XdO!i)62yVyQ)GDfgn6nCSi_MO;mv7 zv>FMcxB0nTL_-2B|0WxHXR$zz^9;856M(GqpQ<(Qw+=<=-pT)}T7&|NM4#_DQTN$fVCe4t3xdBoI3 z^W4eFe3K0wMFK(SBgFT^XzS3>o-BG^eg@x%*?&p-`9H9e)BKN#Yl(n=C9W5JXa6Lw zQGs5p4*rRv{=!E7o+YHX8iXJkGGQLtOH%>4RAMP4E@ zhb}I@pHX#1qYeXCL52;7h7n7K<$v)J9tx|-56d|Y!Ost!?hUo22`?87A2bb@JPE6Y z34ae4p*|9x84_G-W}06rAOs|LTcOD=buBK{sxlL-c_OPDp=sa=sW>4iY2f=^sxIYe zFLmrTqw92wxIL^LMDHRg=x^ZgU=)f4ffG|df;|DDEX@YCnWgwH=oV*~0x%cklA(_#^1 zI9xu&_|n86?FNC;NDwvSu*~C-SLtD8g0WZQh*ouQN9pltP2a4#Q}WtVuZGZ#(m{_> zGs4q+Rt5Wat*|$q*r1=rX5Yno0v8norckP0}tiS8JvH*cztBoy;een3bBG zw3p;5%E$jHMU*$ePA1;8EXu(>(NHtUO(wy^J=E7dI+T{ysWrhLJ|Yk|(O@;DKP5G; zKGl6M0fjZy^Lw~SIDK+Bb?Pc8-8?mJHSL2`nq!(ATWeylW^$oe2 z0q|Vrr@k!Py{vxt47ZZ3e#mS?!)&X7>_OVBH`3YR`Pmbv*)p^_p^!QAquFKQIh;~C z-G(_jdpV|%xzA-eoie#uWVyVfIZ@`h?^|{EWaxn&xd+JHGO<@IXjmc@P~w|k!q-;H83U?o^QuF7 ztIu|;X(4O4$*WsQYer;ieudZU7}WUp)*SBE-11cVl+-jq)b7jHel)Bt&a3t6t$mKD z)!eHsAgyy3soOND%b=-U1lBe9*RAi?<(1YIz$I^ftfy+{I3BGdDz9I&2PaTJ*R#-b z(9+j`m1!82s%On;;2WXrZKUapJcM9Z!tFZ=D-!p(&62yq@l0 zN$Is77MKy5(%xzf(bi7d1`=&c*liB>#4C=(uQ)d^dnPDdZ?$@EyPs`alWsSDZf)VO zYuCbxe{PS=Xs+icuEV$Ol*8)D=vct38O|UWq;Hy}#~S1B92@KC2h$TzS2WGyWAT24 z+j{QY!SCAR?>cxre&^YBlF@b6-gU9wb@kkJgWr8O-qqxZ^X(jGHKTPZlKty{Gx3-1 zM=cz<37qeq%?G|cmW)2?dmqq&XKrY^4U&If<7{VJ__x=>+@be z|GtOz-l6ecyo(+xf_^rEevX$Ox(jUXs2&ESPNqy8l9x^>^e*0w+Vw~+{>o0lD4e$! zogzqGVjb8@3^<4ajmQLD3NM{1+I14z1gaC5pyIc0mfpS`TD|vU2gP~_d^N;O7CMK* z(yT<2dx86K(P`_2?HtuFb@6WmuI2_Vrv`l@0GPfwF@+5MR^ax-*l5F!FK|)v*l|dM z?i2r3;ElFnrfvaNLkMnv6nNu^mem*w(f}mcK#4$Gm6di<9*0>t zK%n-BU&nZx04Na)@Y0BxAdeQ)F{b!3_HAsUXLe8n!re8|k_>w+M}A}}D)2RTU8+5} z^E@(4fV~@qJ>!LGouc%DJpnyCzFIj2P_{WAA8f4VP-O93H~;p2PLdYhEpG{!`ujYxEj2 z>v!}z5%^0j*n!8qT6H0Dz^^}Bn$IGHloy`70=68&%g z4O;m>@!t@O&iu>gBC~1+p7g<bgqIU2Y#WOo000vUcZ`ADD16Kg!|+8-OdUrkyu)9kNm$g%w%l@weI#0HZR&BtAvBN*j`E)KmJo>r~`a$gY4Q*_xh%6bSZFT(d-(Arzum1at zahW>0k!~{C&|ibIMFSYOnEkRwU>(3#6$sH2_|tm>=VB8Xd8;+rqCJ|u6M5u27YK>O z&c1F7f_@P-CPVsSa@!jV5(V&@!Tuc09#^#oE_Qg$U^8a3$KI?W5iO#`EOS(M6Ef^I zE9{Az`XbCsK^Ztn5AX3g9+*JvzX116MAmRlwv{1vjL^1#G`|J-l@$p1j{xsK{Iq)r z2Y>YFu?(8(2XhJS@#yYhS5E@%w-Q0ejxh(Q(Z^f8oAEDOvg^kx;A7Qnw}2~;;6MJ` zfe7G4v>d**lU#AEFx3-ky>1b=ucL6fnDXfz04`|<>XWifmJpW9R2 z;Hf{+0-s~R?;bY$xuMFrZt2N)hO<`P{r2n?vp@d33;BTGG2kEnP5&SN{r*^nXsx;H zxP|FUY&BL|EPJpJ?nrjXnBww;P-2_zdWX%w{C7Py?yXR$u`a%$4d&V({~g7YuIz*L z`8A9USdK%x@#eXP)4EPQ|CazyeHGw#Hy`S5&{n}WCbu{LBH$voxSm%9TNlEA;@AwR z7c@u1$R?K-)}Vi?p7RJq80sD`0& z)e!PmHsY^>2EI=zOT0?=MlbA^$N*Ls_Qq4Md2C7V*RAajF5ds-v2k@wIGs#>=dqn;R=j=2F@EQ<^X*`fY99o9AK`Z& ze?UBuB0fB1UkSvSmVUUbRPc;I1=L^zLXX^FSjS^b#&yIu`(HIU!1Gmudon*M`2YBx z_e0V0b`LD_#DQi}fCVU`dhXs_d+n(oZ@M*5J2jX{LHk=KE_-xg0eU3=5BBb=Esi#7 z*mU78!QI_01cJL0+}#Np+-baVcXuZcg1b8bLU4Bv5Hx{i$n(7R&DPB9%pAvj|Dbld zx@y&Zt_!)|b4A+pw?oEH+Vk79^QUd7XYOtLnQ-p8;RoEf=jCRHb!lHt%@CcI@_>ZajwuLeA(1P9DH#s5yoemHA>5*x&U zgH=2d@iduGtiu0l!2c$PEZm2^%_>JFnC2!U0pd|idWb?*|J%8 zAGWh`2pBieL=QVSQZErvszocI!_gZkaX`ZYQ!u&1CWjM^qxFWzE6PgYhG~uQ=vn_< zpZG4afSL-g0Fz-BV=qB;KkF#+UV@TmP|3X*8%I2d8VAS6WD5(23u@Zze5l1d{*T_B zd7=y?x;x?YG(9c|nv9?%SbLpeI|wgLvnh^@jA19%t$=Tp*d8*pEgNrRVp-%D)$01KfYH3?t^Q(MT&!k@z;Rc6l=k|?Ax@9 zq~A@JVF*`z31TA_U_|H>HjpeK!MWiHw_Zn7mEt#>pM`OnUy{(?ZneB zTQoll%%GFF;}BU*>ydZZ$6u&$0dyn(#4ZLaBih3P}~&HvmV^ zB%jIq*Bb+3F0SZDG)%zv{rY^Uq|kAq6-8)PE{feD(b8ym5O$(Q4qt^N*EnOSrDSnd z%3>e>TR24DBP8;j>;9R+nQ*Q0GH`pApgn|Sb zzyz(HLF~WU+a@`Ob4Q$X3l(~cNk!0C8S)_}tbiW(8d}$ac!Qj@;h78mfM~M z^^GORBcxH<6tB_Ip68%Up0GHjR?*}~bODACRU8CZf!huq{?JxU;Q;i4DJ9q)N}zX1X+FPaZoiW~|>{aAXs2Wa!+h?+vAU%=#`~ z)oGV(xqlY2B;HKjO6xXTJM;HPGJcLq=y?vC42-rj2CC({;O+`QZv+M5*u6N=4p@Uo zpNe2UWb~akU3zlnm|jh%4;1d6Moeg!zUe{hrzKmCRGrkoNZ09SZpMf-&FO@oearaz zw)yIlhTtmxAs;{2-KP-`5(}*6jL~Z$F5t#}gNFK0@zH@RHkQQlWhY}?t;r=Y{mFvO zbNSy=wV)MO`oE>>ADvdbKV8PPwXD*%&zdQ}wNbk(pQo+<4<`O>DY!~F;l#`1u%B}j z$ClOYL-t=x+=z{*_%X>=>4m;IAKtw}>Yq~ezf3$fmqz0E+}~2QrH~zkr;k!jvwMX0 zzfAnKR9*jJ{iEq$CjMHWNzKhPphsDpdS&7w&GxScCs!7Sc^gZG%B`JNS2qtlnumlO zUDAnvY=x`0%>D-xztFtz*cWp0S?p-MYWD2@%fww5XP@D{df|jGeRi_95M;diaq}($ z+1Iu)BD@BpSw2N+ukGMFrS)-ke~R-Y*(JL78kG`u2@1)1W#ZoBiw-WSf0=j-_ryO; zoMecr#e3Sl``5!x&Y{RF6Q^EtF2sLj;t2KM61!iScy6w|r_X$;@GTQ{)`|8j6F*0G zul0Oo;_;0?`h;JZcvp{%ISx=b?Z;?=KUdBqe`k;=*|c!~Zbx3D1pREGvFTQX)Q^!5SYKcjj;Kk%nk`n4)i-9_J2eP z2>4a{?bi{0>+kO)!c(6=@2^^K{_)@J4j6dxzmE5NioXbW{6T*I>t68rG@@r^731gq z$R@-*|HbE5U?7Ct?`7|~2ZG%jfFhcb0C#N?VjqM~4TQd~vOrVsf=cOaV(v}m6Frmd zbzVUas|Ycx>P3PT^ZX;4)*D<1!ax(mCE|mXQ~^t3mc2pkBY5H^P>f_&1!G-SIzxk` zRKToWeZQ0YC`yDW6w}ZyV}nfKs;?6TIibRig2-b;DO1ENi^Y=bAuup1U`9k19GYBd z6+{_OKO>IBBXz%dW>{fC*f4qVhCS zOgMvl4Pk{xl<_+K=|n?np+lvOgR#A!LIT(X8!3NiHo2G~Bbqi{9ri({NAg3cB99fg^BSAc)A%e|;u(F{R zqv4@!zg$PbDWhuYvc%akT^KV z5<0p1?V@szBJ&@J%Q=vtX5&s;B`XV%t9y}af%r)d3;;2@fg!q4Hd@dO+Hm&PWK&_f>3iHI=j1rcvl;@Lk9-e>RyH_BH@Qe~8I zWeTREc;%%;k(EOwr6DtfabP9LVr9BuF(hJ*e8FOw#bUd{%HPT5^qvTcR%nA2s`)BB z5gMsNm>MuH7Rpg);kh!BP3AO=l_-7)QM#(0IwYV7 z{8Sd$PMtH?7gs=McRfiwN9V`|j(ntx?#nPwoKpQby?j>h*{EO`niZ6gwRxjpkHw%J zT)I72rVCvWMv&1cm%Uh`VC$=VG#G!Al6_nvJ+Y0Ass{csTh%j(y2KeP-bc53TqJ#* zJaUse%F?!~@h#Tu12*+cs!l32G6-f){x=KDpB&7Pi~^SHDdc@Ha(e;VJOvb5D-5g3 zAu!wg=|kEViFvu<-}BQ>uz*+})$9Ko!~lmq>BCnf>H|fUH^j4;QgNh8Sy=msc7%xb zebbCdDl>wJ7hh-MfNug-r4g;PVWSY*UpGA@`?DU`s*KUeR?r#N^0SDBs)jLyVY+H@ z49anrWdJ}=PDp>wNYDL64SiycSt^DfmykjTF#s6|WKz?-RtlnG2x+I=Jq-{X~k-aB+aps zA9|Y7Z~U|povHagLi4wey$0I)#E}Pgs70V@#HdO({Axz^N~C>gzP8r@qc!n0a|U5r zv7y?PIScJI+OWyd4LtEO1SUURti$U%pAVb;k+Ln-9Vz8zT zUh;JCzHD@pQbev!X_8LG{F3*n&ijE^CO#f-*pT2pohT)eOsg9wzHG%RnQFL{hW0rf zts_`bCu^N8+g%%Mv7C^io9pncV2U+wNVZ6dy%=|;Ra}qEZYA4y#Xe@GwCj6is!VmN zdd<0ZZRv`ys$Te?Wsg5Aa%ih{ta7%jtEsyy`$YPUx#dlya;;&)ZJILe?yK2S`Z>8j zzILtJ;OciMz3*k!>pNfNwO!TE9v#$NGnrWKCpGA9svk;S8`EqWb~h*wGuSU)o7y)} zXqdUGkxi}9PWA>R&&J_%!D;N;**gEv zQuQl$j_Xpxiz)8QAFB}VO-zT)iM5S>U*p>xTwN#} zlXMo7XZ1~aMH67U<5*zp=d&?9BnJV$7p{&USxXl6^|uQVKr55M7-qvnH$YF@Dx}^1 zif#Ib)zo{c8)te6_kac8N*`rGm?(U^S-`Y0c{{ahySC9ZZgm^#V!H)-r+vz_i`mRd zai>tgtWzIiX6$FS8nuH)X4aZz=Jm9l-m#;$wsYgK({XAhkGeZcv`YxtVY*vkf$+U` zY~v!6d>3cRtHsY3C-MGno4Zax08c`w*^FPAUpP%%G>%DZ*i2B`9P`>dih6J6?ViM) z%7MNGyT@K>)ZUEzUUIbs=H%Xe``&G?g|eeX?WzSHWbg3A0!+NmhrX{Cm#o1%qmIX~ zZDp+E!KYistY@`f+GiQoxG!w9Z(x;dWL0Ne)@ulVu*zi>ihUrad|*x%X*oP+)y-#P zB=WIN+P0a`j!nb?vbaKPWj(xpuxq6PZ@tui0QGEzBYfy$72^)y`ssqz)9Ua<-derp z@Czj55HHO-VB%1_`_Ma1`Rvp>hUjQ*{m`HJC|KagMfr&5-L zE`&VqZZ%6mh<)(%3#9SbwcEYmC!rT6ovoEZ8co(ts!2a$(wrr`z8BzB5j+TZ^dY z!nUK^w0A)b8qc19?hHr3-bcZH$nMNm-##JM9x1^7OX^AG#^r(53RYsW9Y&>bEw^d8ZzemB4UV3wtgZ zledd9?DrPfMy>++uCHpm1nw6vz9WBx?E8CNo^PZu@*Fu5%QlE9D$X&(a_l2$9 zD&cNqBW^NsZ)C{N1?~k!UhL!!-QJ1Ze961Xg}W6Oan<-K_~B(%o%~iK@K%%k7SqFB zVbe`B{#3WT4td^9qQzb9gPVA~`}V?ZZP!g3XP9JXstOmPyb4(V=zGXksO%9e^(8Fg z1FXtJlm$8Xjfn@~d=~_|tHQoBj&OHPzugTAvwmT;jE5V3!|;3@bpg@w{N!{W1B1fv?;@=4Q@%d5y|Ql=5~6yrjD}VPI|CD8SZu}b>TkaR&|rG` zL)&t$f@bAcjY-zyq#zRofMD_i>m)-aR*39l?9T@zd>_NjALuuly~e*wbddAXAIP2W zoqEPA^Ro?95DghXK}%rdVge^NL9T(EjrKa&$}!Igl5YpRMG zMi2{65cjkL`l%rP`L_X&_-SKw;KYnPD9{!O(i8?TjR6|NIBS>u`G1oCgGT1K&OQ z$2t2ik^fmf^c|M@LrnsvRgs84iroaj>b5LU3^tg(AVw%WcpaDjWa2hgRKqc--2arS zM`9^tl32z*0TL(}-#IkYXP^c!F@!kWRO*oi-s0I_nzdrelO_LU;;r?sOdL;&$>9Wt zYCMbyCCg-~*km41hte>Fc->M=g^|-7m{nBw_8ZdVeQ~hk0j;*W9M09+-CxWUd)>Rh zZmZ7^)aX;Hfp(H9)0!}zxnL*n8)V87C>8QhbuT4&QCD#+8tSDa@lgnI{2J?l;ZR{x zJx70)&!-)!=DR}%^=~9(bkvCkyHwukgqu@e3!&ACg>PXWS1G zRZNng7i>|w=P#7%=P7kpKK@d2Al4Y*Q0jw6F_%nfs26*BBqU^atI2b8d%;c31IaeD zAWG<;(WQzZvXz)Pn<P#!g4Vxn5QVEW=@CPXoz*1Ejz zxXVH;GJu_1N{ofP^GKlrob4ButqWtdR>VJ<;E+k|9)ss26pT`elPjJ+akV_f9XbMD>@c48@{s zOGqk|hOeq=TG89eZt>}xp#dlwDl>fW2I1j&1n0-a>j=J{ig!U)PHKtvPmU`h%Vc3l zQIt5P#ppRg`z79U+=z-LE(gLgV_H&9e{OyyIK%b?s= zE+A@OvHUptQwaSo2{>79pj!ZNA0~XP{8w?{b1#=DI%SP$uXr`@lk*@pyT+$}?4gN+ zafdP;1PL<&8gV$IN0S5$Ar=j>Li2=%1Qbh^LHpP7SoXCY%HqnGi6uE2mY#k&92+16 zzL#wdvn%`UqG9sart(G(w+JzQ3&4#Uv9w)9g`oVT7Y;763v(GRGq!mVp40zetE=gJuwu1oa9^f`i0uq>RsmLmFMgZ5y5pE|vrsgv%rW#$`jMu8*#{_zJ({ z+%g}CNfM*gE|wk&37qROlRDrd32Tg(byakEsQgdv{fQfB6KRF`{``7>zIUUVwnB>c zNd!l7>K7T5Djs##c*vT0y1xg&R>J!Gyim)@|3qboef9*?VWVvj=Np^v`SZ`s?ic8X zl>2os=sgoI<{d={-6a$h_M1MWl-^+YdQl_=lVHgr%>SNOg6I$70CD*3b#cFu?hwLD z(652TVH|nvQU@cDLDCj##$Swt3Ts_+P_pS#TBR{V%E|^4 zE32M@0TqPo-8x9)a-}76MnwQMBZ(f%83X-f1~qFVO;h#C#OGCrH@$}Wf-7QNp2$&- zy+&4!Kg9~b($kn4;yG%wI9bBwz<+f*Gkz#yctZ8 zv6BZ&HdvzDN-TuS)5k;ixQoZ|tb|K7&=`85b1z{ZOOcV`f_hg7u!1%-$FnhJw-8D= z;FvV}khNt2pqFqOi1|)|q|ysbFayBzZ9!dzQc57I05BxIK|O*8T$PMdXpAZR(*_k( zluW8cJQ|FP0*ZIQ3aRTjcg}7ngT$n50*l)X#~!n7)d>=S?Dmrbw*VxKK^=rd!efeI z82_Q}m8u(+XK&`v3yrm@f(z6kxo2+lf~p^xQlYo<9@nfzULu+D5mO4_m2Ak~yq|rm z=~kV8Ru$ys8q|yCSf#g;WL5;^aP zfg%e35m~Z6+}(lj?WxKx(tLcKQVATTZI$wS-H`fu4ffc|4^~l=HNm4 z)5%|ig{(2>+NM3a)xXpVfz@xvJ_O$J6u__^v3D^UytBRKWJH#joII%j%c{0vUoDG| zQt%MUpHuSak0Q>=2fsNx%Rk$WSH#jYAX=XF`) z+Zp~u-UO?FK0^ZFYD{wVmj>wYs$rR()I_5Q&Mg_g$e+jAY5QVM#(irh+qYNnzt$Zc zPbq^ZV*}^&Y;+k!3qUR5;b>|bg4h-*4)hS)i(1V>yzD5q-XkKv?ik177=#@q`4oY< zw$z9R+lG>;8%002Mk4~-4wXSIjD;wF@6DZdV(R*qoy{om zJdK#sh_@V$D$F&+XAU75bU;PhXcE*`CIEt`DnbHm@74~18qtQ5^MpcuDtqUNw%PQk zuQ`mQfC4`3cgBOS`O>~7#@Qu>`G_&X{QE9%I>i+&gLOA?}273j5?TtQy#63 zJ*Pg;r?p1R2e(!F%?&4~j$baoC_Qk~)|z4$@GD}89(b^Q93Zj&8D>npdiC7{Xsz7> zCJlCCj8-Qn{2f6O7VGB$qaC|wRs(D$8wR{qw!5B30L}XyxO^{E%AF%XlxP|A4TP@` z%EVcTdhPpnUj7Y2Wh}Bso7F$z{L%Dkj?~+NYbWSQ9TBi@B2yqIA8no4(|+ny1kk>M z)9>Z{ysFGo66)g%K}jEoD_oE0k#S3EdSuc$IcwhWlUD8Im_O0C@|6?u;CH5N%1&Xs zU3>8eNbwZ36+I)mO{~rH#VF*LazTvWgA2vbU>!pWTbOT)lzroMoIKi!b4M`=1i{Vp*e?OP}Sh- zcHs&NsBX)OlG7b_Fc1SP)QZibxnZDB;(OO_8tH6)9*V!zM7!e8-G0=+hN!Mf^couR z8_SF4-;|Os6_VWD8qS589K;qt1?OLDlJ1!1?l3Mr-sZokX2V~|p7c&8@~5v-Zn-`y z{#Mk6AtFn?1%3gd(`Sl>^&{vUu#aH;3MdmGZUx9%xhq}8W;H<<9)t;xj$_n=Tfv8i z&&1!D!^EPz^WP$wp}4oryB8Wp37ADcqI*PY4O5|iA< z(JE{-Ec|Y^fTsI|zFq4W3l1L>VY0jy0 z3MZ;!Llr?P&1;nQ;D*4yP>_QQd!G^Y#t(xA8hG=%o!oibOw3%LqbP%)DwD7P@h)3P zjVfEWXx{{V3m2W934NC(^teHW;Wr_p)mGQ1(TSQJ0*_5*E>jk|Z5EGsoSm5IHM6K= zGa!_jN6H+mv@1oC0L?k0=}`Q^t(dRh$g_e5u)##|#zc&q5z*6zRZ@X7Ou!<7#o~~} zYTXrg9G!#fH9sepXrtz9E}q&EhxOhA-+d5 zjJtnhPPbt$NiZ!=5hog87DY;9M!P2yyyt9LYH$E&I1GVfN`sYSQ-NuqdG~%_rJY96 zV+J8ir7)vZ@^w?EY66^Tf(D-C2e!cvMy0>|sP$1TRgI|CJn}0mEFLV<)RWA^IS2WL z%ie$4UH?(4yJhT-b(gFON14Xg}dAb87t}^8; zD+~Bu3#Jl#<#{{a!}6Ij*CjePbg-NFh^rR8v_-kcII^clIhJ9$gg?EPJgm1~xmVhu zeN{PEF1_zbtZ&ilTY{zKG(E{mIs4F|ui7E}3BB)cYq?AM0Qm{f92O|895g;06nq#Q zEE$YvBgMlIx+CwSTw$lh;2>BL7KI$%93Jj?GzJMe(sr)^W2xe&RYW8lS@*x0u+#97(ITpa1&Fzh`t#BWq2FexVfPK@KFk6w^X8n;SzJWQ^# zN+Dx3Qmiy!V>HrZl>J!Q1ZA7(!k9V@mjO?iHa?f}dovSalTlZZUdQO#ZX4Kao72x| zTw*&ndK|aHm`fLy_c{_`I?7+L$&Z>XKsGJ7I1a?ADoACtXZk2h#*{4nF_3@!LpSw*F!3)RwUny=GI2e-hJTrO0CVeqG4VX+ z_Oj~s|6t${AW)@b$(u?wHzV02J-P}GD)O@}Cbz4x^lvUC2^Xlg8=T%%@ z#m(JAb#vGG<*&}6@$XA(nHBY(u^A)N-`%3qoxv%tQE5I2+2gZ6yyLU{l5!`%FW%li z9-N&0SlKwaxb#iP{&jo*eR;jHYhZkKAwIwI=I-(6?59~^%-GD2g4(A2E-Jk!IXa(a^Hp zPt~!i+)p#`INnb;31>XWut>8#$h0Y|Jjk+dK0e5H9%ekuaa*uG%=J2`Jk0aEJ3h<@ z!808dgyMZXDg@J29Tmm!o*We?NHhI^gM9Dc_4WV=ESJ5oC~H6aB=Bl3`(dchF5>~G z`O5*EO@an#Z0(wc7<}uLt6_?kB~EG5c#`We+AMq3v6rGVmvL5e5^jL0$NpFNTlJFb z$#?fLrqkHxB%p7S#)w}f#qn!zLStM?^jc8k+-v;U@uiY+M zoZ{a}S*O?X`r2yG->o=j-+RoMk2rYxx>6h7L)QI@(_6m#-m^Y<1xjcb=cm`JX74=z(g^P__Wd2We__`kE>0YGs`4@`PGc*GC%j-xD zQPJccAn5&u>TJW-pASth+lQ=|5QKI%31dtn26YqRNiex(#Y@l!++2iopcEoZd4k2CJ7S;igv%MOvyxnYb2R6o7|0-qTq-cV^A3ERj=O$bj|T zb{%&zWP&s7<4kZ8N!z%9pf?4tgDwCXJqdtg0YRaefMCcHfKZ<6#Kas6S_J5zaw&kt zYu?=HK}Ue!W6Ff~%uE|umjg+$fC8ri=wlLv3K?`sYr>JGC%hZ`9IBS$%VSB7b}hpK z&m|eMhRh6O0tFZVFt88W@QC72AlrW@R6v?Skj5|L#mNKSmmgC>UVsTX!vuR!X0{o6 zvQIzHE~i+EVl7K!CNu;Js#lx>^UWw1KuysnD$5ZZsA-Z6dD0d|(3=5BzET`MX}=%) zqU?dEnt}4ETyQh8$j53w4~7w{SCJwC8$gAF6NBm{Q<+OHb1TJ^Du3TIsv12UZW%Lh zBz81P9&ZL$0xj3qqw%_d=Zw4T#RVi9^P4>Yi>3%lLs)-xHo;YgfOddMr)Ivq&D76ob;zWEaq-BOO(`(3)!l`l)?AHO9`D=mVPuS&%!oQ z^S>~x&RVS7(Ry3I>cC`rgj=w&mCrXSrtlJ`7JLMh0UV6pC@vd;4L4shaVM-kpJts| zB}T6q()L~=fk=TEgy$z~3_lJ`@|)fQD#Xhkc!Mn%0iM3gS_hm!1!IJj^q2>KGtYa0 z1ad$uiw9E{6QB#FbT&aG2Qo|%xOM_l9|jpAi&4~yhO2rl{TL{0njj`jDxe0D1ybG{ z;|v=DD>e#6eJxf%v{^riKSKQdO2Z2kpaEErVE^a58e078q$PWZ?xaFl6~w9**)m0r zQ22x6FAp}w!}qI?(_Yiu2e8@sd=vZvKImTy5R{I@t>eBuT>Z-bOucg7`6v`+GZSLK}K>eT0&|&gS^i@s+!x;wlJwv;axjD_BgCnSbNc^PtW zV?IlU!2ntilHfuRPA4#?KHI_PTP=S53^R zxB6;t4Tj)2M)&=Bo88`Nv5_I#cp%_-$sqVHdM=my&_4tRj~K(NdcC-Ku|2p(FM2`G z8bMteZNM3E;^RO(sf2Wx3`cE59@LQ_oNlZ4XpBO!#mU z#v|hwXp{8vAQBkR(skGZR4@~inun+hopm_mLxsCE7}HbKmG>Py|0Rs!7QEM%E5fW9 z)TJ3inHiV?lMLR>_rag!Fk%rJoQxMPoahV%IRAXd;cXIm+05~I)Y(Uc!-vmTgx*XR zoGTJh-M?y%Lk4agNDLLgB-`SFIFO$ASGN4Cd<<}(<7$X%L zqZA`#l;J0lXd{)1TDE24m)3Mdqe>W^-a@0by2aSxColW;kP3MP^o*bk^lg zrtnUdEOa)ADqBE2TgoikKRBDOC|kTg`}N%Nr%2}BNcw@cps>i4kxZ7M<%lvlrU_m8 zZ%EX$mDJxE>35zSVP-`-{Y8q!MWH)IT2#g5wuO1( z#TvoIUGT*rMa616#R~()!O$ft;w30%CAh&QN<}62)FnavB?{1`@KmKOyCrSnrF!P2 zfx)FR{iV=5rKr$ll2m237R88_r6b{G3zcPl;$>Z9Wot;~J&fgFcFNo(%LgON>&?oA zO3OX^%Q1J$FBmHzZqOB<92%9RSk?*Bv4iP%U2OZR$7=<6_-|(_gBRoR5?IbPi7WXWHEjvqHdG_*b>Fqu_D>! zlm8_uZ{Q?nh^TNRi>^mcyf3R@EUV(%`-0ha+6j5`A3hS_t7sRQ$X8F|rhXSJw^wbC zGp_%3+hwBL{~frQ#c-@=dsxMI&O~-KUY*Aj@DrKtmtJ8rQU2*k`h8aM%L(mcd*L%t z5nOZ*LUj(*pJJ2=T9}UfKUrl+(JUAW0cZ-f_yUZ$0w6-Ww5rDj3Onn@l?Da*FEekx zFl2vekf_04g%s0Gq%#pWaxuSWA#UhhDPjFn#{Z{;UE#e@w!Q!g4Y7c=NOhtVGm%6! zq10QLuc2^l*Y)oNT#6l`q;LS5!~r9Y+WC`9@SQpN&h=DsAR6Ij+LgtjP+ z?Rw2bd(G)9O>IamgMBjGzAavVc#h;-f|yzWvlegS*5HYjUk%N|r!BcB`XL>y-W@Gq zf%16YauUl{2C=pv)3(Ir=46G|jG(r_?Y5%fHX}m4B0Iu@Rs3?h=F;l465=+4(^lSz z8jw3hWe0u}b4s;-diH5M8A?ZfR!66p{8yCDo8KLscD%LGjoo&y zAo;Rq+jp7Rt5?#=l-WlWlSN$9c3#~@VbDk2*`Kc4kKxyUH_`Y0xK{~^BhdMuGWctL zY;8dJX+V@@P+V|O(qQo4GPr!_pcF~(`|Uxo?LL(lUY#j!(nRor4wz*shbdjea&AyQm%s?;8m$ z7~`KDV-FhVg&K!T8jj8xD2o}WTEl8o#I8BRJxi1OIV`sX@1uFi{(7JXrqTH-Ts8_8 z@AWw#lZ7JtY^+RmB5bldiWm=vo&(R*p;IFijRCWV1n8>?gr%Q^PX1(+I5|N=F~u_O zUOs*DX+r->2?|qLLPmL9JFpvdvRgKG>Z?B#htmGp*TpiWHsjRR<3=>(@})^SxI)DjLM0gtEvZr2bQ`3eAwSPEZOFA+C?j3HBMk37LS4W}ljR$O--}h}n|vYpDADo#ISj{dan( zA8ds)I$}Yv+j`=x)3D~VNQ(i|@3hui=K0Tipx5W$8P1rqirOj(W5x6veF{uY4P-)_ zh8p;Ry!#{ct-0CMbcoovGV2dos3n`#1`-9vn1$H-#w z(z-a@3x4DpVup+A!n#IRqs{rDkp*{QX+ZpO=^c!YXlI$%=cN7P%I*zcu#8@w*3$JC zQdrlt5!C+H#{rJW`gOQOxP&3#f2oi6t(?4{6MkONr;LD=jzHIf+R|CQ^IKgxUqa|J z_aXo$9h&S&hxTgm2D-q}0Ehn8#=(u21_$8Ow|T<2L9zI~ejPWXB9api@QK}G7~PUQ zpJF?Y&R_aQDg7NA9VftW`LN5K4&V^#-G=T9h3Z9grrgOs-lR8LGWlcy`#oB>YaOL7 zs!`Tb_>NsPe3u5&hC970J!&2caKusU0rkPJ{#@o_t(LU|K<}kfu-fyovdP#w0`!L8kP$aDV$>-&h#Kj1v5F}v^4Jf03@h}Z7vbgmrl|@PO@hG zX?xXg9#L#B1vsDUJ}nd8k)PhH>aIvJ+SuIKb)Q}*5W=*V)qYKo&yoS{MtGgd^{41( z9A{q_H?Zr-eufDDoHW9WePI6&h3@S8ys;L< zU;ziN2;K{NL-+JW&qWjIXM6-FyflC#UGyNAEEdibL1qSO{4AG?X?xU1!O814X*IB`+7lFQ~a^1rsoPZmymjK@Cw zBv1I6oP^Os^!ePgg`>u1Eqn73`qv{I_HQ(Zb#zYrZ$M=V%5}<3Y5J9+n`=6V2R&Fn z&v!VrZ@)Ct<=s_Q_=jg`aF(yCqVK|Ux^DWr^0&AOl`nlKciWM4LmK@CK?OtrUEs|L zJc6nUHJvNO z3^9u0`8o&W{}eWq9Y7soG*>nj>S$sJ6|i%h^~dm)R)xM>8oRFsuH z!iv#s&j!DL4RMtlk0^UxADyjt`EEWLK0TanPq`k(q?=|XevAqUtH}1$TtUx{F-X?u zl|b-?iFex)3R5ePg$s*Ys=^@}mxvcc@UEIJIqpO*2!gh->5rthBCZ?&Frfix3>j1k zXn^4cb1GcVzdBA$&6-`h=)mx1$DGsvmQAB`83BHNRYtCGD5Ss0qRnyzGFf0dq)p@qpoH^iHfWZscTzV*4t)hWY zJjhR=5&uWd9HKBmi7frEXE&kII3G+dLe)z}GWf(^_roma9UlIo_}c(`g|MwlwceV8 zx66e*FktiL;Pp^-<@eRB&f(!7MJ?ZA;69*Q#2G_qJ^Kwyi@;SWyAqFTo&!Y8pf6^= z-jvO2QQBAaPml_~q@fT0Z&XYm;q3$lFB?gf7K){1ZXYw-0f8g|jdW zhLoh?+>haEpIR3wiF6oet{R=n<&F_XDA1x9WbEyC6TmA_GV81VnQ2LQ2S=fdmZ=V$ zz;+7kGXlQj8Mt>_eNJy+ zMKPtR{vB!&AT_Jq!LVDIh%qDfGMjLMNJ35Er1zFv;0dJQYgNQqOY}c8Tvro$$m(1x z5EV;Pu~>^S2TjSRNt9?(X2EUgDX39VN@;kGt@9pJp$^Lm>hBp4od{?nEbIiB?}fb zIuj-W_e~!L@me_>HdXL{N6TUT+Bqm?3FNSVdU%}_3OuzX2^b9^m_o-n^8&Si5*JP> z`pc9d~dHCtI!I#}-LZC52%sD09g zXVJr}9fN$kWGxAL%^Jbn%MT!FsZbKkQy>Tt%x99g*V&|=n$z0hKykT#X^B3wG*;8r zEE_4H=5=IIE>c5*0*o^sV-z!Rw()$<`RhIgjND^k=RN6hb<&J^eHxf&x};&YFKEvW(1^IP2R&dB0+``pNQH^#hy8Kp7X+-@MHonz_TbbF4?U z+6G(>TrEyWZ1f*9XBxO}3M)Gg*!o7; zW~%W-^jUEn$Re0QbnvkA?C*ODN=`q%Z^b;VSw#zr)HMxOE?Z>S$XIc;3 zzod5ATfJLd{`TKx@Wo+|W@0;gvx)ZkbuG$P)yH#MYW>wiY0vf_|3SVd$(mc=DL8sd zFm4QXw>V8bI|kgZZoa&d@ATZCKI~bma3dMZIDgCF|B~;&WpM3IwX%(t-q$jCoafqZ zt+ZE$1Ui58KV@+5an0`QDD#|s_6YAu%hxjarp?|i<-^}H`1SnSKjb^i(KYWrenU#e zXD(9kpECG|{MNbhWY%#r+Y@ky zZTx&55%^^L67aaV2`MXodA{uloH)#Xc|quP3vP#^>4oO$1tfc6J5gaQdg0wfv($SL zQ+fw3MWm{Gkp_EDJ9^EFyHRgM;nsRZQTi}w#CD1M1O@uAG{iO)`uOeoa6|hZPen_7 z`v|`FEmVu~O!N`&_06sJ@n!ds;fP=S5#wO)r<4>Q7Z7LF@27DSAF}J8Md_z6>EDZn z^fPqyGtKvRP4qABcCo@r+?|Tk5D#$hNHjA`P$&#=TS$D-ABahSQ!#}}HpTguq^tT2 z@a{>}tqw$k2jnv)er47H6)@tz2ZS{wD-|T;dV|qTam6Lk{*rWpNXg3vMuS16y-w+Q za0p=})+kk?ZfN3Cu;P=rvc}NPFUgoCK%@{+%chR?4Iwr`B$?=t=DgIYomBK|l$;=v zv7TMdAWND6NoI7&P-FP;R4Otf480HzuDVRE1gsufWMwdH@7AXAL}*(C7G0v+dhL?e zOGfn$+RaNkXpHm>NJqSO$q8P&o+-?6xtaJ3(^CJ zB))odKyHPCRkBkyxn!(PLe3mEl^f~*VDFxy>+t)&&+mB0wrw_OY&1q2+g4+B$5tEL zw%yon*x0tUJNfr|?(4pvnUk4WGiTTNKFZo_ua)2WzCQ1fB=a-DIQj|%fQ2t0q! z%3#0%Kqe*F3NOL~k0K%kkdl%Gr9_6Mc%D#uM%4=N4QnJ%1F#X;$|?~=d;&a{7x&PY z(kC{DMYaM#Z8G?k@Sw-5CWtj&C~D<+wYJw4;<2YpATe77$7m2;)($=sBov?;0p+li zW&s|sIHQ0*&x^sVLN7LrB|ZZ~kPVk86 z%*eB*rV=b~Rk&$12VMo#g)>JOI7H6)1a~y4=oDe>6jY}2-W|qyCUzWxL%6KKk zzv#`AeVwyg{Z)FL31}hGMxJwY3B#NCviF1>0xSo}WHQHR`5H|n5GBGXqIoOthMW&(!0v0yLHey6gprDp2Ru#daspR2t0QY5P^lMH%rUg(O>-#4 zXDF3Jg65v{<}oNaIP%M#!FI zg?*=sK=>6oN@t|kp3$kr2(RU&Czsx-Oud`mD)4#gXuGiM(+t7jC{gaEm7iP5!Qx}m_m)KSpO?sBjX7~mvwUsYwS0wnynkg)>_%_Ba(R(hpGiQ!l6t*QVZ9hZ|7ZW|Ug6woWBtJ! z>4}}taiTt};LJX?_(inN<(fVghyEEe-|4*04eB-*rtD3-!xg57W4jzLrj9I7>N zioEB)?Jb3)4x4l=%_=M>GcCcshrNjhTkVGy=ZDcr9OSQ-{>WDG=aWCod!nkelkN|` zgV#O;St({%`KTWqmLExuTOGI_L7pFZu3H6kSt)_7+)%8;NUY77jva)KYjlp?{jAOH ztsfMu_tULYV~!`stOM7rHM)+`POQVLtP>`qs5KYpGfQ3RD7^u^Ra0pvDu5X zVXinaZ?j2Pv>C9qLCUgWJUwBZJjr^s!9+TxC$XK9Jn0On?MrIz$FUyVKlD;G8FDik z7FrufI?boD8dKyOFFFO2K--nApANE|E)kx+2%gQtM$Zq5P8EqR*>BD%ep!SS`rReE z8nQmxWVbN*dtFL!Ey-qM-*zU+t`gRM8w|g-Pr5&NvLj@8sAzbkzqzY^?w)7AHgO*J z)gJrQ-emstq-*_5zwtud_NwY^np^w^EOOt(c`_;ZFe&mxL-=e@@scF+YR`HNHUy&> z{UI@W929(m6$M;yLXtW_NMEFhT=IW#{Q2b)M#Ju_38mAH0E4_tFJd1gP2P150I}%)DGFoGD z9%Bk=V@eHUQg?7CVX`m{YBSNI)8)A>^*1|)Sm%XIXS|=z+~U_G4cGHuojJ~(>A=^U zBsa0hH>1oqzvONN^>2v$ZhWI|n4816Q5$(t1^K0g1;4d_Ky~CxzG4b>7E$^jTx`lr zdt0A*#k~9V#>Qo3;On%v%k>8r1rnDcl1=$V7Yy=7g$EY}_e&+*J3vgg3eVl^*{zz! zT|3g<7kAfYraO&f*CzQpt!CG1+dG{_SGXuw8uLw92Lr=cm(triBiwuChdcdbV^cUe z^9y6M3uBY&+fi3HV2B$q>E7tiq;<84U9qJDPn|)w8w32k6KbQ)#l5YPo20`%Bm zNF8zB_h&MoQZFr!}dF>f@+?#hn|ZKJi)mRK0~y_ z{Nv&~NC5tR@!-t_!f-&d##8X6XHoS<{-Q4GmX~C`f6L&O zYygSSf6CyN@tc4!2qrY7e3fw#bZoL1GWNKBU>G(AkVqVsB9#N-n@7M>;2?T50?YO3 z(T#C`wpi%%oXjoVY$QIpbAb~ueoz83*&ccmi$S6kTF~+p>{x>>0S|=U4p`d!G}~ZJ z3#)f>&%FAVd^6Tou61BrUCsj0Wl5q4cuB_Luf*vI;Gdq60h+A4*;15hLLXZ>%zNbF zXW5{fM)CYk}PPpae-*+7y6&GN(o${!`R zb=pY^tT2lw*JmMiv+Upa?oVgSZHoB~BQ~gEzEN_*=gg`U*VSopQ~6Fb1;-DNlB0q;U`I0@%ndWVDq1ay zwPM?-AhQ@qTh>Amxm>uktxWbvJ?b$?E&+iBjus6H4u={kL62seq|S}QLDwpf#75{3 zk+K8!LrO3c?LtZ*0dHX?U_S0#84{_0_)5YgF#2*;!;-XK^h9j#d=eF6g>z2j*Te0kz9lC-KxUKZavB%+ovlZpL#qR-kW9HGG;K1==b)a( z4_15`K0y&@2g7z-q9sbjp_G&k5{Q$)0h|F?(t33%PGgn%=o}KpGW7&p;78Fv&U$eZ zAK`MouFR>d@gC;ZKezUp^aExP-6M0+VN)pn2UrJ4M5V>F9an@_J!W>Fl$sKg26L(c z1RvSnt$GO+xK0kOl}t^{5-#U{A@m1J#buwj-E=chD<*C;h;W^EJFk4h<=Ja8Z-y9Z zFV6oq+69?Y!oMfxCloI5R!Cx-HtuO2)n)Bv7Ggkxgx}H#k-$j=1&9G14KxB0;q}6C zLP7D`HuVAS>+FVm%N2*3drzlQa^&*S_@qkm7;7*$@T>lao z$#bw%e2fbLQtP4&IXW`XJ5Chykqsv(Y!h16P!vitCy1I2f?Nd{faa*||1l*O)vrVo z$Es11s;kE0N5L*Bvv~<2g&i3H2?T%;>E_>8@s1TRr-(0=A6fmbIib6cnhl>TghTHG zvK=Oa!I0ZS3W|id%wx}`pCprV&e(5=;-rZS@-Xph2i4#tJ=q^R3k1$+^&T34sA7wlcB|YjR)f22qrQR8o?zZ zu>1lfa;1| zL1yrz*D_xz7tq#~QFrfse+81c5ioqB|MI-peXL3u#KmN6Ri=4n?_Sq)Qsw@`Yb7i0 z020~95L(Y7kz@egurnBlJL?_C;(-Q59@Y!!xP)PAIduj@<$|RCSLcerv+{%m1hEQ3 z2Gs!LfHx$!-e%s^W~FCu0Y#>}fn(b6_`xnjtzA2(6{pE4m09@@eEzE2T{(>#k_CUe z(Q9xLnT_3v&JN!q8YXm`&mE&-58qNRNmA36ptCqt1y;2uGzFOoE2}5aEKq_Kz-}bN z4MTzPJq1Y30B;+t3`6EErYRGpC+9iEPxiDO3VSM;mXL_I5j2fULE7Q)&+}s-0FMHa zrpBKwNmq6f*%F=EZtyb(!*5?lXQaB6uzK2+r(52Z4Em6FMXa?$M;yOdrIsA%LubRn}{_$`cv{~^Nwb`MJ= z$mFN`QXc(oxYhdEvb6(bwV9v71~9V=Oe!OQ z5|G3S0h*r{pHR9HNRUp|@}Iq-P{ATSUs=%N4mivai(NB_NdRF}Z~mCok0n-bc#^E6+@zx zRZ;qpl^XbpN@0UwMSiogF6I1YpM07W*3-=k1s=KDdlAQz$mzJt)cqv64~XhK-P2=} zn9VvfG83SO+=v}|(Crh!kT8eHNgdIdstavLGRMw)9E7ZXQoZOR-$2lqt2cN)qwRk@ zG8XJeG+?P))Td-f>2a?mj{Hoj>OoR`yK$(c*J_k`l8OMv?>`AgD1BW&!%y9;9BvlT z1IXy*!-!notwC-pU75jOgXh!0;hC)|#J9Pb&y}R#8%f0r#z*nqC&kuSu!A1_4R-K@ z)~|>GuaQs4u*h?u^<|NB!G%p<)K|NlS9sDl@}RfGoW*!VgzJrqw`>>&0;Ivs2OoVv zkUpH>ChG6aBd(m|Pq~i}BG3dur!yol+v~TjIqr73V&e*H(A{M-Igmw0!_4bYIQ=`= z5*rN}UTc8sO^}ad3V`ny#eOi7pFCy&8R>!^3Yc8<*6_(_6b;7+QI(W`KI%{JZKiIhH{iAh5u<`S3b9|w$&gP$NJ_{*hX zw0|rRZ9IoY4Y4d5#n`tXP1y3EBJpn~IfHwrBzR zbPc-5J4&~dK&Q(;e>2r%ic7o77Z2FwwWorc*8oN>xY_)Agwt5cA}s%ol$^}!%>I9L(0u9;B(A`uzt zody+6eQF8QJz485upohb1hgJu&FQG3W(zMRI5)O3WRt z)7`rUY=sDHn-08iEbaKrOsI-@dv)yH2qcuv9E=NReJ#H576tS5d;C@hnIGD_9J+#S z>Fl3iOtTJ5Sqg0zzL>q>DAHvP@Vs=J{QMP8fGq)C`GR%Z>3^+^zOZrxQ~+0eC1!aY=76nY3Ci3a z=}qYv^0u+kxXW_H7|dYG3eM>=)XVGy8HxgE3+)+lu*!ltjzitbim#F6lB~18GnDx) zmTA+MWF?g49hcKAS8$kDHkAeTTbD+ZiLO}-K9`jql@&uWRt>_`wvkoumw{{Sk88zL zYm1KSBh>1x_3QG68|>HXjwKtxM~zbDlAh&FZZ?IcHiZ%82XW;EX^br#zuN8@+G4ER z_sfa~%e6}wJHex!qXSLH<((v{t>@*L_cmSYk|Egt*E0BNPgQ3B|15)pZT`CqzCG0q zsWS3kW$+RE!m)pq!TCNq(+0J0jHEjgOmfOw0nc}H%@%G|CazgvhP0tz5Vyb_U7(kSz||4>(8aN zt%cQ%%9fu~^S`@>#+!QvFRpK$!xN9rE&`IWdq=1G$7WjlhUb>okIybA=a+j%CaYV! zU87Pa=a%h4ezf!s&HY~YPt5Kb9KXJOSX|wlnqS`DKk|r9wGIB>)IFG4UOzBC^PlGU z|9vU`|I;V`1JM5i&?_1itWPRi_RCJHI_{58s=HwsPiy*dY))&3Y06LQ#<@>U>!+m{ z&l={`ZO$5(%*)T3R^3j{nm0oj&s%nrY|dK`i^|X2PFb+J+b;(hFFI~VSI#?47RoQW zZnjS@l3!svE`CBgz+Xtcy#w?FIGcpaUNrt?M=4ZkTc_`sCY)F8xbC*5gSd7?pdl(m z_&Q0lY~AZot}=O*QKEXL`e+s<=$qjW2TUdt81PZ`lOpBAUnPX#>^LLD#XsN9$j7EM z^s)0WH-;*y5#7ycT4**7z5{fwV4cu^0J<<9_ozv7WmAB~Ux0q{&@^H74$whgA9Vi# z=r_qcGyec|-*1e>?*M&Fg}pY`D8 zsN~-Oy=I7|y(`y1vrV*_mgnC9oz(jbXJ0YyYN(U3`yHTPyxvSpv%cNVX*j&y{Wn0L zqg3+o*@jXUavJ?NK))Q?czfDu))0E@EoA)%pkKUCAk2|~kBhTj%qIDt5py7Mhr40< zYP_JR$h?pq>u;zo{qe?gV0l`)fU?s9SWJe1k21X&X_rA0H=A%Hzu5ec3-nnFG>{m9 zz36<^!jo!S2m`-*{o$cQz`_YeXja3#gxsj1^a7hGS2!PVQD*d&q85=P9|fp5ltSfR zW5$}68q1sgkcb=Mo{i1TRGk5fpM1iqrPDrGu;Pqej0XLP)KXc zEmE(*2Oz$`cj1A_y4yKK&=9)ipa?hL|D=FwCxrg&3&;`?_-B?tlzynoXA!O0Qbn5W z@$lfNUH&hg#GdBCS@&2#;3hVte;6no0uKWI{r^Ywj&jHWfur`%qpHcUfFc;ZrPQsoWG5C3_6#3aoq$5xzK#?lEXcUWg85Wi+hr69|<|>o3)5zrqwb!=>No zw}PZ)5NYNUFA?Ygs+TO-Nc|90XUFYCWN0m23gbpPt#IoF1{SW$ zhw+1Ubv87dj&c|{r=E5^GPEIBKpkwnEr4!iG1KoZf(Y4mQXm4`YxD$$jZ6k=9Xl{^ zcvBA<4LocOHLV@k!40TAvjuqY;bcc7*%ow0SnU)B;G^}|r7(w?^G2=?E2>wuzcJy9 zzvv{vEHaQ4iXxv900=v{s@nD#-LIaNJ+2x%vfdai`?S~c^_m&vVY-o(BLay`@AN)X zhoQ6}07|!;$zFVM)m_JQY9E_AHN9ECY$Jk*yCdOfB(46%(l-k!!Y4P)s&7?8jaX!oC>{GlQA#qc2ELM|aZ3f;(9{WPL1ba&j>KK37HvUtl?)MLs8 z_W;NsJ0d_P38P~`X*L5Nn=_!b>2-;7SJg7Q=q>9-Et1U>AU;+4GH4Jp%nk~Oq}9cu4JmEWGGzL z`OH`EN82MllvWQ51=B+QvjZg!nO~<{oTdD-+pxJ_f=N*g6&4C7+KbNyDNP0?=$-mH z|2(dua9=pCS;KZ}3)bQ^)g@1ynji3KOzBV68W{hE#S(#4aO}lI;#l<%_0JfF7HQtP zI}4B?2a?A1VwEVvFzRk4@2xKK!eGejUC$=N;M+4T9+D zL{UgU&Oj$aNmPNhY)*liWfWjcv&4-bPbknA4bADXJ^}5p2x_c3!OSU( zU6A3d$m+5Ow|=jBx}Yb~wwi6gCg9(%yCOVeaBmj>Y%};*=+;7P(yD+v^M3pqJ?6@| zRf;2m^$71d3ey87wG!XIciE6GD8%vcIPL?6ISV=AMC1&#@pQzk~34_3dn zdGejnet`cD5eMs0>VFf1>z&!N{uIOsp>LD&dU}GOe|wI7Z*67+SWSDlTR*(576TVT zRC^87L+IOq-a1wd(MIJA^yhGg3D?120HKfND-%Vf|$|=bd8VxaEbUvvxQD_&~eH_1i^&wiLS;{k303FUSw)n?S9XBfz&C z4#X|(UF(jv@=nq>eIfAtM!EdpG<4xh+}XB4WdQ;9(Ej|j?TEcQjrc0Kb$8w_7-5t}#GY#fg8RGb13?y6teDk-P?{I}F4lmo0 zSjBL6-^02>U09^dE{)A9=+I>ES>$Q35W+a?Wtba35;wPC6v04ygY0~!9XjY(dp)93 zHCcD)&<<#zKPp2w8N&K*!jVbE*qfVM7Ma_^Mx_A(M)xcxG|`cV6pN4a5ctH)G9Xe|P7^@Fb*1obdF_ zl%@RR?xeKz6pUJ6diGQSW-C%we2Nde^zZJR`iYnao`N5rUX+(e@Q7IWiCp}N?h`(d zb%7S8yTkT$}U|3omElvdW7Ry>kW*veG7Oi;m_ z-hgj=Y7w-FkzS#a-m#n>@0Q*llAfNIE-aSeZk$0yn_>5uHX4xOJ(Ll*o#8@}83oLg zwaOe4%LKf?Qb*@yI&EhHhBCG3v-%;kzDQ>ohiCN~XB8A@6!d12a(63+_=$kXo4D=x~5gU_F)$^Z2!-)}olGaw%`FCP~n zkH#Y3xi{YszMzq!0L{37AfP}sub@h*z`M6V8L|+OqLB4Czv!UAL9Ea)u+Vp?@am{= z2)<~9w&?9s5tnu0xkV9FS&`^y5&dD2SzaMOLh&b=;wR%`gNUMruwo;MVvOx#S;&%! z{$j8VMTv}Y$%#aXSy}NyNr`?yiNa_J!cmDHWa*$(X^wGeYEUWsXlYhnsmNX_Dnl8@ zr!o!5GWdWp(Y!K0lQQ4qvee$P7xMBzhEfLj^3P)B(0Szoz2zomWqO}J{)esD|FA=p9rL~>MwGd;qBgVB{RCSA1b<6N|d}4K%J>a^V zWd@dXD~1(X_A&7f{8U^oxoqC`hP&xPFZBUQ#r%-VNQ94amdwj^Pc8FAdfC z4dvhKO+_2|j2g528`p9h4SO27w;IzRnsWLZTFIL}7&RsPH!b8gY4tR*ZZ-XYXr3i+ z{vz7UXw)3*-)#G-p)rEYYX$FHWU^0txoLWHuug4gdd3uQOBPL|!)Oa+fRr+SYXTt~ zc3Mkhdh5*R){K?bpu3Wkm8v)!6{)?}BDvON{x%4w-?@uN9Z#|ySA)hOqGct4v)|_o#-~G@CIZabf-Y1i$dVQG(d#c~ zCm=A!hjk_1Izo0UqzwF(A##-E7nSEjLn9t0uf`|cJc7er{ZtpRAIB$tc1&%&PDK{Y z+Aw=|bRA&56`x{^Tx5qJf1V?3w#`Ld( zbs9aNn`Z$zvs}Zo3U{9$kR~;3W|VY)DQ5g)fS6}D8r7Z&+`5aT6GW3Zn}+W(?3MPx zs+_A9`1Ngb?i<-Wo&SOZ;k4u)Hkl0CSn&KWT~_1?$EOFEcd21CF%uX+g^Nt~>eD~p z`ipc88_H4#25;_~h}E@{)m@Jj_=wF>IR(m`3FyoW@*Ow0T7W`djF_0GC!P=^jP>Oa~|Dr))ak-HL_noZ&lZ5zRO)7^2&FL>9=Hb>|KH0 zDwr$CJ9@M{8mF?8)s<~=T^%jNQRmh;s>g1*PjHE(a#^tQ%kzK%E%TgCW@v?Fh*0rY z_UPYj@(b4SYmL%Sp&;Ppci@yBniiW5QVx(u1QI?Dj?ECp(GjOt@Mpi?5=Ixczl>4f zp%FG(>{#XW)5p0<Uy_Nv~#N7 zq`p%`>5>V=rODab>P4l8)>(wgqOq>i_M$HiLzOxWfK~8v8!|WeADFJP!$-JvXt%1z zZg$%n<;=WGnibg_W;%rjn9IKl zYzOsNXSYyJ;P$z|evjtd3m)LDWPjmoe+l`(Y-sypd;4_!8)Oe)6&F_%<@@~v{%5@| z8x%Y{{RIcbV0lR>&&`bs$j#&!-?t%c=-i`ANO+X418#61pU~FA%V818QArmo0^4t> zT7Tk?XboVNCVQMr{hT(IY2Edc`lxNQ-0iWyWpph&H21${^ijVP?zbZ+xpSkj1?!2E z)bNdB67NfeQ#BOUgv+z7$8cUt@$>HUbBV4qnD<{#S14$RbBLN#vzb#i ztMjd>bCf?gvM5LLEJwsBYp4on8ILUgOQnhXvo>%x zCii4m4^rM?IxD3x4${vY=Ir)wT^GdyXL9!MFr777`JkF5=3g-V~CUVxXMPyqt&AtJOcfUP}5JOB)$7clNJP&5P!19rN`zb^y@ zl^*Z?A`KFRhzFz^H@uV%49c~4L~{*+zzTV9jtAkZ?aL>lTKxs+idllbVCb@&Ez&%R zKoZHc&qu073Yo`DvUB@tWnU`w2hzSUPL%3&`oR#YpDqRH>7<#3CD~3!!SfIx-6$hT zMRTGvxGZybuOyocQ&Fi6p7#YaOMaI57!V|iL5ZO*qpZwofcAcCSCB9*DTkWBa1H+a zqIGLoC!YUZDpR|0spOkjbqKM}{pn)8-NvBc^WAw+>rtDTOrLx&y$RJ~rYDbxQOFOI zEYGn0BIkWrB>{;UjDbG5A%9$^t7!>Q)imEnKP|#Hua%<6x=_+=7n{55vyEf}(m#IS zOHVk^C*k=F6T0Zoxl8-%o=fZS?&LHN%jhHE*Aa-ZkKV)n&`+}DW@+*Pko9|Jnj zBN5wzIEH9*FHKq& z!M)guw};Ro(V?@$H&P<_99Z)t&D8WDJcPoULdPN3Pa#1B!}qzkhL+)wbYA_&wW}$< z_sh!Cl_!wQO~Y)Vh8uZ3`a)xONr?VN@1^yif0fqJ!pQ8=?fH(_=>^$xZQ> zRSxA{A8JioP0C{7`;X0o{E*nr7Tdl-;Mj#Gt!lrTnC_Q z$eoIZ0Au(nI)c8YE8OtzYY)9O%U#bC@VY%}bki(}F3!Y~ zyE|$E$hbp@UULxbyP-nz;6P*o5@}WIID3$xH=k0quUt33+zG2`q=2L zq7wPilY70Sfo4Muts^+MfLa^+iO`>s{ID%cZt@PpwY5YK-V-+!bTBO4q{^h{V#Z`J zBB|cH{{@vjvDqsDj+Y?*2lsZNXx)3vg08maTh;qTr zZF*%Io-HG!9Lg;R%-Ysy;W&;X7kpWM;|}kah~NeAc1bYX5%ZWt})BB-E=K9ixC9|n>t19=UK&i?!2(?92jM6dXF0EnwQ54tw4 zmxLe(5)IlYXnF3yw{3aq6C{}rNUrhDsjTH3@`_+miEcU$Ydsj%Z<%I~dD?Bnu=&Dm3z<77I+c45HU1 zSA$|)(zH*i_qjWjnjpVmxkqH5Yq}?d#}DHw-oMh*v*Yw z5KyJTr<(hmKI=~NC3p5CpLw52X+LdKwbfb82t)BH>*+tVo30g#1$HZkiha)e6C4g? zNt=mwyUjOamXX2aP`yKG?(!(S2uEQ$rm=rWLnc+OM2c zmn6nFt7^lvIhLfG(l12TUknC*of5m2R~uVvWgpEqHceGJWs;~X@qT9f?W(D5vSqkY zvpBGDTN`huZASUD*!RB!^u|s*d-wO|IP3$KTBj}eFm1Jk{h{uc-l_#SbY<-##J%Hh zbKLv)i4c$4W#$EQO!~&Oom>2hokIZb>fh#gVdup+(%>y*+KHII0R6o=KIAd@7oZbq zRFbsxzBk9ezXSA!5D#QE7QWbjn&W=~`b|t=#y-!`Kh5#4S>jfEZ=R1+!9p%F_p67} z?*Kh!|zIpww`X}3o(R*`zv8yw>+4tP_r?)s^*27OY zzso-i-dngEk3*!H7x6!R_IWlu`rZ9*3x$1`MY5k4hy3n03VhDoH(oZ1kso@5{jQTq znHG4yJJ9;FT|o-d zUblPd65zGMaJakiRoNj$fY73r)B+8CVhMa=LGXh8*h0IRM+hK3Wf6AH{!j9P z68-Q@HR#4x{cSn^;vzwzGSHMiB;K3jGxZW_j$xs6{_xImk{)5qXaj^y16sOWY6;=U zHSana#`d?wJ-dJCp}%IqfYF?gP7pjl8z?jd5_~KPvVTP8Go)J%D1DfFBYlF}hrdrXv|q9Zo)jmJkU)DoQJ^WiqKo zt9Cx6JdLDDj5sij7Oe^d1U2TmjF!IgmiVxg7mQYzvQ)^kRLzY(w0GBF$(8@;sO221 zFX*n`<@^VrC$!eNjI|`lWvY$Ir@sSqx$wZTj@_}Yj+V9t&T6a=8FTzSt2BMk^2L<$ z&f@Yj*7CW!k$lRk`s z_dAu=cbe8j%NcAy4hCZn2J;ri$@6zMqe17Fagkr+6B4mow>6ulh`OaLexI>ZR3<)K zg=<~0%$=g^Z6%UCC4%eXjYQFRUZuyVCb=ahnW2?tEGgy@0C0xPyL5QYvsD1)loZR9 z(D0P-QatEL+~{~2JL8P@N-?ciqs9>?bc}CG;@|{>nHopn6$GjtG(_=kkEzOu!QH zd+;g<4>jk53f`*dL z!K;#;%m#A;`Qd5(R&f@87aaXg$|A>db%uB2AaM7}{1cQ17*NgqHOs7!!|KW*$jlm8 zQUGY7;v_DI!=wPdKQ1qQ)_Ei6NvsOw8tS!o#Bi{OU+!I!wGa@$a9rV za1%>&H-7JE&(T(>eTwc>)0_WHjM$A%gv+JI<{C~T`8gy^H6l&5S*9#hvy3tLv-+3$ z15EWNhS^V$S z^oHlmQ{r}h51G%H&Q=Qi&JQ}IJbJ2(hi9=vR{yrA;l{Y|0Qo+*G+^KbJcR^Nud#$2 zR*|$W{*WxXJVw7(t++t|-S#d+LyUjmowh#E7xSJnP;*lntk`QIWcwGp;rVcb&Lg9>N*7} z6jmVYbX+5KniaZQT^kzbX*;n=x*B!LE>}$9SNkef1P4}r7MAsJHT7|g_7bxXNa_}X zbU&}iWkj!%q_1+1tR^(9jtQy^y;V$@jmAOifu|HOXCyJ_&SVDHxaPU^ERFQGnDhuw zR~Hr77m;U{&qUWMSyvnN62sSODs?N7*Egbvw-Z;k68Sf{*1NXXI*r%&#q_^KuJ0$N z9)0OKP!K!Y(>n3hJzpz3CLaHNx4sTzP=T?r^J!y%c>_gf1LJD!F>xc6a^wDNeK2$5 zb$%nd+~DO+`xLwV4SN$Js|9>#uZZL-x{klYWQMQ6Saj4ULaQQ zAe7=J1M84a>X4obP`K$(WepJtiBax@w`!EPMI(*1(zjzOjT>FJi^sQV?;{u$^*`Qj z8zJwUnr+_^ntT#8A!9bVliOjoGx-g(!@R%k{oSO;dxt`Qhqr5mx?^X&!bDIpUKqAR zNZ(k*O^}U`S=5gcZCY|Q|=jPT;)eh$Ec1326gKSPQ;w~gI zuG|(sYt7Bgh288APWDVZC;6ShSu#FdvffSnz9=%^&Sm|&vq3dl) zZav>gEK(kc( zXuTO}9qV?)=xxnEVO>{l&2@U*xpvHtWWxfsh9W+xW;|h+Kk?GGITW-Zu|Fa7wt4M5 zZb-NBi#%x`wV_`<*^xXftvb1HvB88rWo0_;j*0Ht*DaN@trxOgQ?o7hI~`Qq^2)Mx zBC>^xIlXwb88tr{H{j(_>`%3lmy`r5%d%<0GyQBTnt-+&% zd;Jr2gL8e}3vaGi9l1r2tZa&~}b1k&f^cmsOdL3yO|YotH^Rmr&1+ z&`4K~6PIr*j)X!^ME4heNHzdUedx3zcvHCe7b{rOx&#|0+vZm|tagO%=NKDT+1*Yw zH&=#)*I<6<9%k_Mg5GtV!nHKi^{TydmG8Ce`Z*n{vvS{cQie0bxicf!nQ8s{80D)& zrLz+6S5(%o?D}6h^sktb9mf2=ezb7pU3B8RaKNSQ<9ttITr_YS$cYT82@C6qqRNZo zs){M;Ner0?uwJmUiby?}$hf;46uRtTU&>9nKZJX<-)yF#oa{Wy!*Up zpsaDH{vfC7ey5o&_c{4aJ62A;`A%0@PIK{2zga}PT7di15tYPE;lje?kFEl%n<}cC zDe8i`hTA8eFXo|ghC{arT5d@r_rQdE>48i0;`>Y&x5{8QT{w5Ui~H3^H>cQpr-xa` z&<+=#4QKG5duwTT_n&$`w0d5l4?~o0o^X?{u@9K*ZWzMu_KOb}b`OC(9^TR(em~tq zEI2`|eEtva0mU9-C+_%)kEtOZwo@L(D;`Sck1pWH5Zs4&TC+$Ce6^M#0G@v`BxqbF zOvg|i@IPzlaTv);NU6n7fEv#xF85IBCw~jiB>&*hk6wUB|K!-<8%w75(EN2 z>|^_txCoZS2?9tMNg{Ci^_`)&#(IX(J(m>M6ZEn z(6-+~FQtcnzWDG?`70>3$x4PTO~t?i#72)Z06NS*f}yeoL}0rNlI`Jt zH^;Xn0wLJ`Hpiv^HpiEpKvIaveU?}slqFySDe(}f*n16wp&^Ij*ky{w`$@Bq?sJ?Z z@*#i7CUe+X*3i$DU`xtYT4Phl1~OO?iGd5)4`I-}}9AjH0kW_Xi&f}vKXdsx!yI}OG{$MJb zn5V#Ka5I4&Qpr+c3oUpM4syy;Lalc5eI*ws;#|IQpy6~ zo+hz^&I*a7sL}PsqxP?p#u6hFV&Y<|7#QMUr*G2eh_gY`_L{D`W~sjyl00#E`?7-7 zimd~sg;@&cK&05go35B!_<%U_R05STUdqT`0TN#7$A^3RZ0z4ehmtNP^P$m{@(_hyX!=c4B7`o4AxDu` zw^$;{ER`W0?OzJrL=_cth%%`t&rC8;O#0pORCbWv!!hWXp8#-epp!8J?4)oDq;IAk z)XI8@KRS4NQ8B9_dK1D1NvCi(ypp2J%Z-pO<(@sQonk|=udWHvKZN{iBddF^#T|Zj2Z%5Z^uiJkmIeYGHZh-Zok@T?csc#6_w*zm z*~`tI34y#n=uu>q9pbQ+Vpmt`#SimnID0n(t)(K!N6(T|f+!5$)Gd|LY~t3n1KfAvKfyOo`=tw6l&fMpH*&+Vu$?3Hpl8BPi6OOIKp2>(3^==mT6Q z+zqoXp*^mIXfV5ZMD8FOMU5ctO?2=f3^lcH@_^)PFt(lX>MZ#T4L9Yf7`)PEk3RK( zzWIYZ`3nkzyrvWH6ocC~2@$!2GS}%%#Q%EOEfewOTjjC&2@AGtD8Ku)q|M_q{#qy>1g@4ZrE zs1unk?D?u#w^Iuky_M7Lx*8>_F*xG8&Lfc!cyVIFeZD?8MCm*fvR)8kE(gHw1BEL0 z84->yf>qzRu*imd2Qi7!$X7@mW)1-Tcx zc{yv=7~L&{^eepUdvcyx4QYM2x6yl>9DVH#)J~T|_&h3opHJSxa6r`geBtUdr!;O` z!k?;MO12?d$^il$dtMrEs5?2SDlegwvOzjNs4{OIw`@+S--3n}$ew-nmC9O!R6iqQOkUwZ%Pk9`b~=G6%&!jaT?qC$m{(q-i{^O+M>uTS;P zhCtalM7IU`V&dnKiRYRz7N0h`saT!5I6w0($_z63GX*qXTSn9t7iEEMSXk1xWQ?Qs6@VFIGWEP76K zNG#^hzS*?xMcMDjk!~z!Zh_KK_aeVST3P6wigCX2mgXsX<0AL1pEEzi2{FpUr^Gqo z?1Y3C@gEWE3baCB&>HTy%0o3xOVr@{v;I!$gx7@%BocAW{q%Jms_G37+_bB~)yhV1 z1=y<-hQq0zo?#a8Ct+BQ@J+0z!1jZcK%XgklZM9H0_klN2t*FVmWJ*^aqz2tX1i}( z@@7|gNDvd>bNvi5Tx}E9JCMQiSI0BjDJE_&R;|A$u;DnR>Oa1XBnR@?1%M2C&rLDW z7&f_QYNbYjd9qx$iq8utP{3oYnvvH?k|Bt7qT%RIM>c#S`8m5pWmmDAM=*@qZqSo0?1^F0I%}2@?pm`$=2?pI_5H@VSNKmY!xoFR7FWXnD&t$Q*T&bS z4LKi-ks!tUsiinM$rU^kiQctUC{R~DI@&B~b;tIT?7*4r_h`jW7R4LH_8YKpLLW<8x{RHTl&I; zh#CdVnv5I0af(HK4o4a9XabZOQ_rVkBO61$-@w_=Aj-^vU52}?N++>0gGVL@_?E7H zwk1~6U&J{J$xzV%x(zHToE{S!9&y1|Pq`@x^44-!ZlCGuif}J@i$7>1h%|0*EA5g> zpq)IjOmU=+8tBNyJtz4+l`FwQeZ#Yjp1RHWVSytM$%O;69u7!}B_8u7rxbxjXkS7I zoR|!g6TgD= z*!6U1qGtqZUOmi3ZBV_!dbho4Xh2Z0ybjtSJ4fV!?4SvjX*GZkYq$D(S>_tLrj73V~`AWDchhtg!)r9dB3<}Fa2rWHmX zv&G&c;Vb}UPfaq=T0?_0h4%TO(3W2i_S zv>Y6y4Ht}`Dy=&0L04e=+UgTn0M=W2-&>u|&JLTttI%rP+S-rqv$l1T%WVGDV&rJ!9DgQ`^Zh*nNIol5K~OE^=HTWtXmAk|!PXy`wnah^fty zsjwlT(60nUXy+bMQe<_Ul6+j4TT(=BSNZ^7jEqoPuv3;gTH1e9-l0*RYFY-CsuVe{ z5bv!-wyWAdHpD&IMY9Kgp)B3yw4W$qDikQKHe;wWDyg9kuWQk7FgnSwI;j&sYQ%?c zBrk3BGp<*cZO%1o63}SLG--}5O?zkGTC&qzaS}9Y@7{G1GtXRob>jZOoV8urF3sTd zzX9lFUGu5`1)vZA8$d@N>m=6r4}g9;rCRn6K<6zp|8IbP7tMbEt@1vT{l5YF|4o1% z_x}-qE*n}W`;}X6;T;G7sP16_a){cc`hz0pXliY#WNK||ZjWYd>gZ@H%)!RZ!_C73 zu)MHdV>o`8(3`sl6W=fYT|zIe`)`O|7?SdRU}82Zv(P^wv#gA#T`RVx|Ibw6i-}7j888r(Ap}v%h zobjwTOHiq3b;~x5?G!6YJ!dzozlWYD$6XIH8o-luTjjSKPfKSp8~y}-S(|8B@9ws* zsK#TqBW2bzcTmLG?)MJWDq{AMJw!71k(|%(57z^tV-Ahs%Ks^$Lm>Jiq)Jx7eiWbT zhk0zY^q(d4ndsKM7LwkNZ+{|h{_i3BW+*%O_Xx!w>npg#A6mb5UP|Z}1MGjEu0L0H z-23FJOg`&Y8$%#EYBqo%+j)M8@yTm?1BC90_XqDH05dWhmOe}vo_bOl*??$caT|o} zeeszRHRqAVQ%u0p$%!-qeBfn$U4)(Gl zPn(2t6H}Gy4AwqziU#=XW@qy?$!bqWt2Wd4y)GUCIlp$!6v}uNN@e9k>aSB}4J_XNzl7-H!qxF#&(qDQ(HO^SRDUsD*A;?5 zKqV%kBUI)NfLvN z^OUh@offyl8kO_TiJ!ERbc@ARyxIYHSliB4Gbc=Y8sfm8;r zW+p=%>ogc4nMw|rK+T&PxS><4uPC}h-CB*AZtH5kr5u~`w0Yb`P=+ujpBp-O8ok#l z3@MP=+v6H*eV}q=EHh28Lqc0;jw01BG-?n6vT{g*|;=;i|hzwI;lm-*~%WkTe$%nRdAIvs% zJ{CCq57S|*xUXJ88Oc$GAu4CX;&c1M$?HIaaWG%+zs}+xv#)q<>~->%)g@}=c&H|$ z8D~-C@%}GF*QHkh&3jE`k<{f9yg>BSNf(PeZ!9HpEEL3vqbaWZYV)IZJmUD!^=l6S zG)l$qGBddq=*54`kAJ0KPE|$Mmsty+d@5fSE$5vmwH^Dr^4U@A7IPMVa&=0)IH(MP z=)w-BYb~OE+H$ressIsp7m^A`n9~j%+y`nLU?t>jBMNpfr4I;MBU>D=%qiITn~U)Q zt}KV!kb*J3WK(szCF_?!J3L`Q-9LULrde+ioO)1RqUc>P9OoV<%qb`ox1gHM3s3&0 z?du2+zJoob;1iUzC-mQuU}!&chu04b!@dy}y z7}Ow2WSEO?g3gOoW{T@9C^8!{gb#~8=Ult-4Y5OCcz*Ywt$M+QCdtBKLm+y^Po+4a)U4`V4M?{GTOUJ_5G4$X=YXdq!oV;bILD(}g zQV~$ipA zSQpsqFGMf$Svh!E`?ZgEqyN?(SY&!A`cZb>De&y0{wZ$me?s(;naqEK=vg(-qY!}6K^KMAB`|Sid695AW-Ws50kgRO?@i=t#^aKUTBHy z-N-$-;D>VO=TGlhErSVx=(~-W8wl@W-u?s8A!>azSa&=);9A@OkrbB>)NB@VvK2^U`r^+QWIQ2J)i-?q_;dWbfcJ%_ z&|;?e(w|Xp*wA@#Eo`W5Jek3v$>er?*b0^i%nKjh4}P|I`w`;L1sDFOKbP{re1i}0 z)0uPQheHRLF-eCpAifIMVJ`P1|H6QcLI5BZe!7lB$hz}<2>gNr@#n9@I;>q;=qxY9 zEejYhWpCKz>2QN}s4MxHCv?cG39<7b{@ldTr|NwJAA1{NWV{ah8UyCuzxi|W{U`@% zE2|JIyMiy8h=B18n`wV!=^gbHA@gIhO%|{G{UP=99TN-@`AiYnm@GBi5)%r)ouZ92 z)Dah2Qy|V#Acn0?zsxJNW+sv)GK3T|BqAQXl%QA5L4Q0cs2HiqQka;V$tc3f7>U5t ztX@o9DP-(kWSmIUJi1JRUSw}<$@uT7g!!2yitPxH?1=b3(0YX^q=d*I#mLEdAIq>w z$&rcbl8GHrX(2J`Gms@|Pu zu$`6wosP|w#wD3vLY=N0n68tX9@Cw!u$`_2oe@QyAuFEIZkx^$o?!tt%TVji2;a_- zgw7l)&fu2IG^5T`3d{`7&7?Qabm-1Z+s!nj$?}xU%7xAn3CxHxG2e$L|G~X+@XmBue~w6gUmwxk;`r<*>cn-gbP3S?NfWT`A? z*|snkGQ~SCXE;A(xDaQ$31r%*vc4~g_ejn3ZOQz!oayzz2>zJL9`NugxWyxsi6MNM zDrz|Ivp4J47OME;$S-#CNe@{m#Mx;A*%^A-S>D+>soAj+Lf?sL5}EP}iF3$XN<8CA z2%$@j^h)NaOYzN0edJ4L150tcOZARQNRZ3OBEGckgi7^;N)_0uh~Y{z`KrMWmGFU8n7LJUOlj~ZWzdhASSZEi4^{o$ zRWO0ohFsOZZL5=ytCx{$dw^g!?`t?nY$WAtbnI$A;?(k` z)pl{!@}`M$eOsIO$I z&x5Mh*{W}YYWT2}q<4~Nppd3{l50sqW>!k#`0;}^Gx2*tJeQ9oZVC?0B*Y#h@?Im> zz6!;kPKcy=>Vou}lwrQxDtw=^Xo_5E`j|%iwbdtJh3NB1(>MDjrj`auf#!6zW<=~} z&`2`@bc@?o^Ib_ZOj?r^3|C$&Zuv@mE^|eZy;~M;tJ7u6_kdOfzE)5D*0vGSmeR(C zlZqc-yvqdJWHsA(N?T4m+J@6eyHJRyO37zVWX8dd&4V9F=hFC>^oa^eg_1}*BtFuv z*e6Y#_;<86ZMSxCD0Hl~R{azt+89wg)&J3O)N#OEeQzIo)GBzHhQEhG1Vx(sctZY* zSsG4}6y}r=B{JCpMFpJJ*)!D{Db}U&u?`cp1Dk~uzl@M9vVoAai^zZy&EW?fX>Bn{ zH?dGRta>;7Q+Itzx7J9vX+qVXR&0*+o-)QBJB1#Sx$ZY**cVp_|6W2@TW-*FKXvII)yq|d^S=*MsZZqVN{uFTq|dE zxY_w?+IihdSpzY2h7_1H@ZYu?yMq4E{&|$fbY$}hVRsbwS+OxMveV=*M3;v^bnDMV zcjK3<<49Ak;e9H%qay)16VTnmcLq~LQH1+K`S0JpD0Dt8#nYls=Za$kci<>}4-Y5~ zqwk7S{-#qvsWzaXzfmS z2va|6bZ{I8)*X5upC;tH7SyJu6w$Dtb@XAAKV2)bJD0P&7_uWE&Ihy;n4eKtDpfP3 z&wp#jvsc0#4xW=}pF@wrgtrcij#}7A$G55f$DgkZI{vTz95ijgxupKEm_amY(uSvf z_HmyU^Fz}l!`K{MhT)1-kb=^(x8t%U_{|qLr^R22m?0+m*U*uz86&1=1b*!!B5k9B zYr!y=#-On!gR>v&GH$; z>QLKtx!H~ zc8%ewNwfDCtqXT-4G9M~dIk>>0wZ_RlSXU$6}t;SXn)W-9OO zzZ;w~YPt3up=DD)L)%j)2NE{VHkD8M+D>Akeg;A<7O)(jq94(%Z!H^Px)td{^5`4n zz}EWOZRWYv$p!Dy!LINKxB~wNdZ<_?=C^-?=qRH2J8a;Dhl;5t^y7T@E8N<1{GaC{YBA2FZznnSG%wmx)UjK}b{S`fY^{MM;XC$f7A3O*|Z=i+pgh2GlGAoRAVbKC< z2t?-?bo;{-4gP6yiFgSOyGlmng3)A9dB9lt+X%}Ap9(3BGK5(S#*1Pw{13kU243J_ zi@u~y6pB&qJ3(MWfjgt^xNvh{?z=|#h8?qz9s3RDp8H>p4iA*GvtPmkV+QYA9FOiB z#^Ab;VkeQLH<2(ekg}^DMWC)7z~EVJl_jpo`Ga+wTAeTR&unM}V^zkOxVK-L{x~8? zMRM$^qF7Hr3hCjr?A04j-;H@c{aE$k-h`G&C3Y(-g?0h=f!!!xXUGR)l=q zKp=WNon*!fME_etmx_W8zLP1Q{;rfE5=^XhtXTp|V%pQyI?=8$gh2FCE_;k z!$>`ys&HY|b8=qcGY5w}Vv<%#RUDejcXUGAWCKL0PTS!~RNI_D3gDkDLj@BC_!E76 za?WK4yaPor78P|zFms@MkR|`(zyJk@Z;}lKPwENOhDXz612E{IPSNKumujUqmgbjA z{0A)H(oUEq7UiyxMgO8GgkaatbZ73QuT?|VF^hmK_>6G40KK9ixBx;#HJUhBy&Niy zf=%ZLjp-_y4!$EA9tOfcRX+#GtD8&|nSCvahTn#BU(L}F4U5l{djTJ`1FB&C0|$c2 zvS00lB$xz(=eesit+UGQG;Ip=@fnRT9Z*&_t}SHI!lv(PWhCg$X0@0Hv>+rMf6l4E zbs=94K7bgJAeX=-8A8%Sdc|LF=9M=rL!QpOkn}r_Q1g@AE@QD3o;Ls+ZbLB&B`ozI zWf1O_s(30B_F--$FZSS~-dB?1JV1H->yp25h%Sqxc|r4jMup?eetN(TKEU??F2fZF zBj`Yy0=7*ScEU-~0QFQFH2>-NU`TVQ{&L9Qbc zWRo;VyM=0i(k1!zNbhVsSAbB@#9rked{3)RghKp-j16pq#>_o`8}z#O>W`NxEVzh0 zi1}&ZJ?(<%KyNW?b`Ja)OjXy5ONYzVYEe#ivgwKby7Dq$`fH>y-iP`Gw)@;YwFT#} zHM|?gMrdVBqH?da&Ar`g9>YWA!T-!v#a+N=;(4p7*4pM4@D3&U74DA#x(ji|WIrSc z=?mCSwJ{0qJ;=up0+tckDyiV%K3v?@h3=CB33BGE)-Rc?y0--r{O>}wT=~F^GrkRqi;0*oh=M0e`Bz`g04FQsN0|c z5{B&D@H%nIisUSK1-RDZDArI=8gX`AW4E`Mg@Lq&W{C74ci|YUo%(m>VUGH;y?W&^ z<4834F24R1rx@#x)jeI<_~L_5F+tqTJ$>+j0i3&=2!>8DT3@Ek*2WNZ;gsyh#GmAwWSKGTifKH1VvJwHcwwT{gl15XoKTgfCtb?=KQpJ-3T;Q zQE{f5qP@SHU6ypK^2Ix~hI)KErOi>7?>qd~!z-PeT9FdnDa(95LiN?ZJH7MuXCJakamiNaA>Zj@}$BNR7vkV&FK+bJA$V`e?mG^-12|ZNcIYO8`#H0)q9#Py1(>47*>lLAQzcX$1_K+elQ=Vu^xg@K z#qGNqFp(WIF{jR&2VEDd?AX5ktT$&x^t-gH-%j@v>s=zL?$?+{6g=?0tdg9%)<1 z10`LY=X5=8t2-13UW5NYbb6WlGN-ePh<_mZr}j(A=~Xwze<1qp>H&lC{R>3TC0IL@ zX^a~~aCOdqvvvd}?me3?;#Trj_(&zRvA?>*t%6|u*cjpCV&A)~3LM!JOPP<$a~(G# zTp4HYLm?$}Hm$~qwQ~6HSv4m>q`k;#}v6p#}7#+_5g^ChH&zW7|4Y7&JZMyp+%{?SH^%cEUNd z!&-DA1a*$PbRt3^x@3KI&kICHtLsF+?wnoh#Ki5w5^BNV?!uw@f`rP0C)tHB34-nw zz<2E;+7%(H<0i@LB25q>-4!N;K=fTv@=;z2*ly}FQ7TF97l=M9Obg3R4}s_j!VI%q z|AOek%%t4Z5QttT#-=I23W4aeLYx*{FAzOJh}(gO0|L>xMR-xU{z7yif!Ws(c`iIE zD4h3Nbhif-DF{ME*1f>vMI_ex7fny5702zBRTPwcLXt?wlN8E?Me!Htq>)ePRf!aP z(~H5fiDfy|+x|k+VZ&sD=y9Y}gQO;Z_2vLX0Sp24Q}I&%VXRJ4qhI=r4LWpDBhWT+ z15AP)1^S*ip~4OWj9~k%pF~WbAT%8aONRa|FNtgm8|DOS9n}B6SH$)@Tz3;okB~8A zxX?5@a38njoF%`jiKhXpf z(fB*25IT+*_NF?`0IbP#Q zR1Z1l=4WaSmz;8zSRfXr;}x+Cr=3a`)D2hl@|Eqf*WixSMsipAys4EOY4BldNM~ zck?Lah>t?OqWD;zVrjSH%(kM+kM3VeBPq&7`A3{ zm)4?pa3wO)eo09`CES3YZaW>%1nV0WBfjx*tc5eyJWcgN-8fCpcxjnR+8{NLcln}s zbcktLFm_mYGt!qX)+o8K;ERgXBB|IZ#Ar%lR=t$lwuz*KiTg;-I|uT!-Mktk|JwUv z69F09R3sd6)FHb_)9}clqDY_#wQed6P^J7;I?0i)ieflWF{7Gc7PdrHy39G;ero}i0DmQJS7jRGc(%o?72v2tR?jsnMLUXFS1)<; z%0~P!Jy)mBIG4?^Rtr8P62U?gJsMYsR=e4arI*Lm6v+1QPW7xILmW%MH=QBTno&`h z!5LA*`i&m|B=N)1X4fbQXwe4v6X5XB%9kT~ZwJ?D!k$*>GPXa@#YpL=X!hQYIV~4r_=#Jy_mEF<$ih;X{MG~ zqsxRT%&COycdOBw7ADPH&6DOyS0;wiBxZSZeT`;_Q)x6pTkQ`HC)3&7)OO)&mde)6~Msm?z=#1|JGBu!8nme z!?B!)c;3uWi!bg~V9|HM;qL+&h@#ktAZ!|O>@elI_-(zE9d(^Bt)>vS#abubpNSPDHr7h%SNiK$y688gt)N=2 zG#M_-jjoK9>D#yJx6_vWC?D-$t?P_>+a;{jW60L~n{EJ(bWm$`)@=1-=_*s30YNq1J?bs!c{!_iN(Vp>f{3w9G znaQ;b?wh|7UWL-$gcE6o<~3P=-ng^aL@L;%ezk!RVgeiTNEqv=M}mR{P{=hCg|c2lj9t$K$oJmoHOt2Q!t1InANO3dva zvnEhNX6=UC-AdqXz`?98YI~Q~Y&>l{sePNu#|#)X^E}&zUElumxNS&gevG;UX5JB3 z+7Z+@SGPAO@ij+Y>*32(5qQ_bh2G7?w(Zxwb5(23biN}Tog&)M4(bpUKUb85*Aixv zkjA$tQQZ}FwSfF<{-ex-zSUxsXIF;Jh;Gz^H`78nBtk`dL$yFiT|_~%VM0knTmye^ z+-(n~K|%{%K~H3zKYH)&dbPp4p#Hp}_WYg=%>MbWJ#loa1Co7q#r<36{XB<#uARO9 zk5(D!`vPC~DLeMf!E2W20}j${cJJhzL`)3!tsFb%aBlW{aI9kt4p8Z=UC^stzqPuL zD|>|;+=8pDo4y}tbsSVITOU0f=${{yBHJ7=9Wt>V1T+)}Wp;d?U-i+p0h|sW18q9f z4z1g49xQFHM-GioZ5GRI5Tb2}P;BcT59?MBWBb<=LOSBztrJ5w;_x?gzu9`a+jg`Z z?OWO=gQL>X*Hh0WvgfU`Zme@U1ar|P^XP28*GXGtD%)3)o7T`-HLjc2k8hM%oty-n@Fm#CuiH}; zoD7`Vd!e0TgY5yogI4&{Hnxs#ux+38>72=FF{#6<+vz~V{4jjS;5^gVH}P>gO&-X# zM z*t##lr&rPM7K|Y8jvQ|q>~9MkPb-A4dEei6yt}KAcm#vM(FO-0ra+P@6y&?uMpKvp zQ`iMlxC7IN{`az0PH&=}=3Fiil92y^Nl-t%M?n}vMv%oYK1H%N!}8d^*>^g7bxERl zX*zR(>~NXtb%`!|`DFACCks;Z{fURrKo|-lPtqm($wOfcqRJwt#1O#zacL+GzJlkz zf;PUQF|Maq5vCr{XAHf{%Kp$&f61)E{T$N6@&?3Vy>YjH^{3%#2FHbq{a2Tqi?ywb zv7rl3rSt2rE`;x|=-Yn1{pi9u?xM7QCBS~g^`>38(M1g5dgRwt?YRpN?e&DAE7F^5 ziO>p}Pqoq%7V?d%3NnU}tG3*aYgr6or44LmRx zWxm#J{H;?7DWU&{JMT2Sbu&__GbV5!9Q|$j=BE4fxA|L$Lcg)}xM^j%u}-?dRJ_r6 z>lW_rhQxZUQR)7ipF*%<! z=ys*v!|l`Uhej2z_q#3=9#BZP0dGY84~E>|cm^wZxXXCTYkPiLs18i>eDJv&{(c+W zSR9gd8}ZZftBeib!L6@{rw_t?DE?i1s8#g)-7lhhVLv?LetITlwMD-5y0yFyD!k8E zyiaC#%lg`R&jS|-X{IML0svY-6WlvEKshW(`JZMw91D^6Am2kChJXIgcgYm@S$`g~ zZ#{JU5i20Ubjk-E8;pU}JSsWtnz!BwvX9?4S~LHUEY)F=PGO~i#@X)UII6=pT(KEq zu}7O8awi^YtX(uJJ&=2iDIiRpgTWvTsK_~p1XL#}<6*wTqCnVd4cSN!8SE`z%v}^A^s=t&&Z^+;nRk(l8n}_g8@7koA z42)!o3)lb%Q|H49Zd;f@jGAIVORxbC2l|ES$W9Y@&9Dnn3WMeD6Os;nZJgthC!(H1=ncAdWiRw-zCc;v+O{*d7eE?8xggUGtY0zRErD6*ATWr>c$^5B2 znph@B;%Pdubflgp+<1su4}28@O$p`;0#pcFM})BT-hAl74-&cQ_HU_Y zTD|GT(fs2f*>E--s?*0e7n{N427We+5!tY?h|X9J7Z&VRk#1Zr=co5vhplN6)&*T7 zv|KiwJ){(p{sX9T(4zon9ehmHwRu%q1dSD<3pkAp$v*_tNCo(my< zN9ax9|AktOa7Si4Wm6pkd?1xL8RZalXCxuoj*H`NFjX`iEW^}H6VFJylqXG@O(!34 z$PY=TH(&(?$0EudVJE6m-{&QxkLeUh64z|0lOR@uR8i2HL6|Uz?P97>xMGLc0XBY; z1zD|7#5Re7)U#m<(T9g`#lx`kY(7Tv*X1g(VjoXsC)u?eeMoBct4jKeW@O6i(a024yWi?-)+{@=KGUzf`nWYs15k>& zEfLc}V(GPv*E&E24fh){w+*!275&Fz&usWI}Ohql+M}B;rkPG*K@^aEEq9%S+)=bLeR-1GE^J% z2*4jy1%`%#Er0lU(L+%A@yN`|xFEny(@jeo>Ut6fGR+ChPgtA<%}WF!nDDLV4)~tl ztj;Lf)nWFXs~%*9Mn68e(|1C#<#{Ni1}mJ$#E@E;&_^MrEkakN?uL&+5r7b(k#a#n z9FqazTqcpn2>J7iVkr8QYUsGwuu1=<(hZ#6V{w2`NzJXX~+3GBnKn*HpUj)^=SRVm}6ajGtbw z>Ox&mFbW$D;+Fjy7GYfQ2d^juLd8vJ5<-AL2z+7TvHBG|Ew7Po|0k8ICgSfvn|5kw z%rBWVo3BKVhGgT|68;0L7VAD76!;L4ppd#diuzkpj+N#!)FLGy&@?DLtdg*Py8EUF3EMhkGGV)y zoU7JG84UX6iQP;i9%ic;M9BpVpYHSjLaJ~(*6=%Wpc8%c>iuLCkq(V#0>UVn9H(*3 zd2}dpM?Icw5Yv2voxvc&S)x{s<@$ZSttbd|tQM@r{f3(CNJ6b-TG`DtKbxgk%Jf+M ztlri6b%t&HyNH>L?fe3v{32yBm+370S#aSnGLsr-&}<%^Te0Hagz9gcxx(pLBaM7J z<*10c@@S1xgWvO7Cphz!-)2gbY3(K3Bj)RGW~B`6K~UO9K_fBp3aXI#J?g_a#IUIf z)Tup$JPtS}%`W7(mM5>3e+Cijx zS=_f~PH%gIG>*3+o4h=pTBl}@Oe;U&sj5D+o|@WzS=)r}td2=!v1BDtO0saT&Dbl_ zO)J&ou6FNuE_*Mf=K_V3>(mZb&k;-FlOCh{KoyLB6o|%&8OVUziDC@EED?)CK^AOb zNEbl}1|L>;3;~!a6cBv6g8I|`+sZ1#O5?uL#T99%2Bf9(MIXWSAk+o>eyIwD1pVbZ z5dt2kL}o*02SdCS?N*lU3J)ZEo!;@LYRK)>f?0n7s7tEVt!MwnC2rPH_Js+yIzsUG z8%tlaOEc+x_uvm|3Z4)c4uSbjnA%7xfPw)M)peLm8?x+yy z2GRabVkT4J(8&g~r<(>k+)V(77oidc)isI4Gz*^g3y8^c3e;Q;+q#pltoMQ7ey0k_tDm=0q!dYT2~NQ|vb!up4t|z!Cz! zzt9xv;(KH;D4pBz+8S~0mK0k!dQBppx{XQ`b z+-+YIFLY0}p}PcBNsl53d`8oxJxRAQHzA6 zao4WVFD>KF$&8ccAmq``$s!}{qYd!XXgQ{21>eS1hVdh#vG^kSdA0E`XOo|BAQ&2x z3ovZfZ2%suNKoo^7Cd<4G>YtcYv{U}taC7xiwQooKQM06NR*96z4?=MGZBq~T+ZY~ zmlDg$1a>a73X@X8pHku}0x^#AB9RK?#sm+3phakWH^ul#*XWW}a^Eo%n>TB0i&Wf1 z`4DaeEeHesPM7hFO7ngb2!8x;c+ETPc`nl=GZt{M4q67BX^anFgQSfT^BT&!rRndZ(JXZ^?6l{=as@O`#Q z@|nK^;dFr-HO=o_c65YYSWxA?@oAUY1Ku_Zog_6I>??R+0%_nCbt=ubL?Z35Daxof zAIx}pd+EI?B{;Si1gLOZf^ai8*{*VVLJ+(YV%p$9Sx7rn*gKSLl4w-K=tr0s_mgjU zdy%muQQB2ev4W5y1~62W;P1w03P^dODa8Tv2FASCf##gh{wY+iMA%@t;wHEXRwlwi zxv^n+Qr89L!*(3Z-$3Us1@G+l=7}fl?6IT?h?@zv$jZT6$Y+?sW+ang_u6UhCM@-9 z6%bR|4k>r!O5DXR5QmdVum-v;-x{O)j>Z4t76zvi5pk| z7Br|sG2(s}-QjtH>QuXU6!PST4^!XeUiT`{?Tko~=}+$7FIsRbzXFNx*$P`4zr@h7 zCA`P911+_4`)#28*)HSQq2f7?_OyDZS>~o$=f1BsNn#i6g;iUsryByQ`M>01jIQ== z(A6WG>431kqlEm*3|g@~S`}it%dKAh@icj9I+6w&K*$1EoitR=v%ktWerEx=TGS%a zg<%zF92Zz2<62kHR}|BG7E#M($1zn;f7GINGRu$A-4oBVVt-cWct$mU4a+iw&ANom z#zTj_Xf>a2_VKFVJ+iga@tl*p<$EIf576r7udM;TgSzGeA87Kr7ppUR!ia*o=Zt6;}Sl^Z>4n12uyq8-v*DzDq8HUPe(2K4z>to)3Pp2B~cs zM{%4$aon+40ux?BretF7Vd4jcIOSqB3&te%qa@{(Z_qN~A;poAM>aXdDc^#UDvo$s zj$le`Q@d?thajsJN8a0v8U2MB=eF@TM;Xv1S$090(vm6YCEt*kas>`^w+C{(`@i$r z>Hp5l>(|UL(aeFj$otS=U}QI0R8$zPUF5A;XeqTf#Ax@7*Wqzu{~T+dWOTv}OR1g;Ult$v+eRiIdVOjX2I>PyL7 z&wE&}EL$gXl8?>YsBKqgb)v3gU*>mG8DjsY1gg(stL;R!;Y_DEd+WA4Di|wcZyUecGzQenuo7_RgG^tmarSIQM=win=-b#b#WfNeQN%->q{-jC# z@+or1sp+z5Hr5&5@);4ZT(fiB@Ymdkaooz)+^TWhX~V9XIPR@$?wvUvJZc_3ay*9A{0E}f z(};7^%GcAr{GWvAdH>&n=qZhgIlM|GjY>7V$}Nq`JMt3$n=bu7f%N~l^r+1LxOBsj z+PwZyFpW~CLS6n~BoUAO>PTI|a12B`f=sc#a5RDORk`74ebIOdr^Q&NVngv{hTz-d z)zOBM=^TkbRC1-p(%Axq1ZJbL#IF(!uxYl13f%_#wXvp(#TwK82y*4-%B2R| zujNMLuy2(X*PXE}<(BHTcCVY`wegmkjcz}9Gzyj0+O7UDTo&Vr*1DbHSQ_PQmA3l5 z@l+m%^@%pvWM!^&B!%ji#-p#LuPTfuzcigJ)>@2btF||vt+c*9S)Xigx!C9lM59#e zXuaAQNnkOV>S((;m?==sQS1D2ck;c#VPmSZ{o!J>9~$`|m;OKH(z6NwUtRkDKLhDc zQYkvsLhsTT{shuR9-bt%emeg6w?KNe%OPTnv-(l}LG{n`jt7`aulcH0dxp5h-g7m= zQ1k2mHjqAp%kisW9n12?!)}TT^y#pq2Kr+u^tWikIXtJ>&)Y?p-_MT+F227m7)XEr zf>qJ~xOAXg%%^9OZ@)1ax&TCfyY#Q2JqQF2{^I?a@C+lpm@t<~T7Qo=#sZZBsDv^#z4)HzIw496{4M8+6PdPD-^ zF>a-Px;zQ+>Y$^z2vytF!sAhh&A^{F7IviiWc+=A)qXq@HO;)^%?Ox)c{&2vlTZ9M zSZ-QzHtd?EfYe)1jxyOTda;~FYMzmseOV*wCshFz+z}fUbzG!@3^ny#fr4E0c${#M zF$`69)mx9FK``wfsc+bA`s{mECHc*wFbyZ z1o+3AB3zV9u<`t0|8p1!2ey+$`cWMazn2SIOBT3#R1Jl`i8qk62GFDW{kIglB)Ppt z%ooi7lKGhaD7z*!b0^Rg=!QTQsFg9Yd`vUdS4=r;Jep;Z_jqKdlX5Z);a~D~{^}h-9 zC4cuvBTCGxunnzkWCxwr*eqAKo5p$o@Rlvm{A{4kqJT;@i<<&4_2|enie*IDg4aw1;+LBSvvgdi{~RlpFfUWm z{!$N_z}#b0)=QLa04+!&z&I)_c{==;K=0g;b#gsnN%@HhXhM!h{4_k?jZ~7-S|Y?@ zdu(7b=IB}MN$--T-67dGq^P}67R;vG(g9o&1VC+PX1Q!0wl21TBUp36=*R$MB9J5= z(q=G+-&TwKw~`k}b}xM}Eq6{FZ2;?vc%C(&^)4x4AMTI1acH#YmpJ{?7hk|M92v*R z#PG!HvLW1@1ILI|M{>%Tela19$!ayFdXZvRL`+7Jgf`%>PTRL}8Gi)2^hjMcxVB(* z2=uo=@5Uk{h^qPOmy>dIAdJjO|@tY~q`H&5E=^ zRQ(o7P+#sJREvHorX10RpV4Y|NwH4BvOLFa^iFrr#<;W(JUrM#3QQDR{=wWOv3^+% z6x@C6kgary!&=Wh(b{ftSvoI)etCw!`$(Uq1K%;n>Eq3`G5CoADj}o1T+<@fm~nP$ zGmcd=PEvHuG}cjlJDq(oUU=gQ_Nmi(cOmavU<00jRnRYe5Q%)-_`ouNs{ilM?=~t-Zmn9D_dtk3P_{ebZ9!|mt7^m%!q%}5ZIA!&L(}RY{mPH_p zf&_&7P9EOf&-1;FUy03|o?vGm9dN({dr)YAtO6K@(t&U$a1aw}2IC7UV_qUNE)VxL z0XCsS_S<{hcRI)#0`Fo71DHSoNO|vI@1?Q4pB)HbUSbNAG(|!R_;tq)mG#DZq&5*` z`J_uB@`yufgG~P52DSF`1G)LoD1bdT-*5^b30=Y)Z6bO3y+w92hl@3*mNO3@c|}xg z=9B8nixXC79J9r;#xEEOX}N7h0j1UCn-O8d@!>04D!cK(}h&9v4@pj zvsHtapZYz!COzI`D6bJC+XxZGm@UPH7xm3|<|hR^Ga|b}L7Jbf%y4aX0rz&kht%+C z%qVuY&tZ1I72Jlr6t5IupY;?Ew$y0e%*0E!75~P=kh?h$Cl+u}){PC4q$Wv-;nRu9D zd{j7Vf+AUGa$0&@TFPjAQkg_f8fE4mm+rt%luj6w9`x#uOaJ7N9)ZH1)kfQ(N7uB( z*b+|L#zfa%#@MMx+x&@72$6bDuG0em|NK8Afm@&#EJw3`WSw{PniE&|xX3?8= z3HrpaQbx0;NV~z5HQUCpWtUmEq`Fhaus51{w8U~!=6j&Wd=buYgA#it#CT`N@Prb7 zRTlry#`06o|2HusoG=4oL@YciBQgmCT14Wr5HrRPdTe`dEan81_x^f~X(HlCnX{?V+2|tT8I-cwP{TNm=~<3Lx!yN5!0 z(@T<2OOFMMlz)(CW|CFPYe+7Pt1oFd7I8~W1J?b432QX}dz2cYGqPD1-w)x5yPJ@y3A-r za(?Azcx4|-mELxxv{aQTQ&rVi<&=5Vb8pppXjSZX)laHwM5*fUDAiMCRihErfn(J~ zJJsFg)y7OU11L2KN;UR&HIxN4Ib$_p=GBjIwLt3H^`n{v``V(2+F+^LnBv-_h@#5A z+TT=lwP{5}5jD`AT5+kmweq@eM|B4gbuoQ)mv(i)<8;Q1de{9t$T*aSR+*5Qw1N9X zgq5ZKajCwWt3kNEq4%bQ|7V@JLA9U(F~?65*$Qvz6;k;~Jmql`)pm-PCj=VGc&{Q! zw9rB%Gb;2PgcM0@jST7-K9rk8+FBUYoBgaZIHA#Tpm4|_aQcbsB0}Pp5oHxg`gR=G z6OF`sJjSlQa%Z5ykF*tdQ|=p?|LdtGAfq*+y(OWyHAA}%@D0^F}>~G2~oE4mjbl7P-WqgaiXFXqN)$%H5K^$bd9+c1u3v~PlNWa*zFO$ z?Yw2}JIrl8B4O^f6zTfJ(tP`~=*Xe)WJR_wvis^o zyWmrI8(NR{b>~ETcXeE+d{8r-W9O5D9YSRXl26LThh8SqBJ50i+=(vyC^90lzN)g` z=W#iT)1EP^KIRwcv_8#vhCPgqy|D5*uVFvGPrqPhzi>zYi`9OyU;Pqf15z&r{^8PD z2S6Qo%B=Y4tZH27eHZZq|22@Vy*i+{HK=|yVCsnDhQ?v|FPE+|XyJ(GvWjP3*%PEO z^lJ5=F5PgzO{EFye%eTW+D*#ZKW;YUn>q5wrTYwhdVv>HiTBoUL{nw7^TROT3y1*O zsATV`ipU7PN+(m)C~xH`|LLeJ=|~0FC?#uZ;V=*bTSq5xr6&0)fYietxoXUc+&(im`IHag$!x>uuNR5LGE%a5ovCSLM^C)C9Oi z#W-$4U}ECa=7fmO%|x@~x9=nUf$mcW*v-6UnJ@R!9c=WM1A> z7Wx>*D!#dmCeX}-NlSSrHM+!Rx+is7x5R@*a0=KtRpU5?@EMmpYwRAa-{>kxdBN*Y zU>2SVI%^M_g~#@W9 z(C__t?WwQJHgQ+KFv_raw`i_Z^-ZX1!U_Xov(`7lGRLrruO$lB@ttE)o&S6|*{Eai zT)C*(IcrDtX3iSH4-5*3UHD}UCIcV`N`Mg6;RMw|x?luMRf12xMeHxWS9aoyV!*z6 z=cO?w7=7Q3HW^-W2YP@07ApBo*j8BCz}`fFF}C&}Rk&T`>pi0Dx-Eb3`SDsn@L%}+(J6ltqv;o0Rr*Lc z3jx4Ob+bM7J95`|S@H-HJJI{|w-Wp4p*;_0J)@6ByrHfA-lz@%KR1 zhYCU8bf?+6I5eg_Ply0#k88Z=vw9y1pn_uW383sm&VI)XVDuRuH?Ccq_j^a!Yad0% ze4bZ))V4NZ{d3p#i}>{b=Z`0ZpWrnPVg2(5qy2L7?{;b89^ayqM)5c3!&%!ruRzoi`d2G_M!8XMdwIIvz|v$Y?*X zo;{FOI7PnNN%T7%qc~Q3K8-Qh74hALS3cv9JJ!eaVvpWL=naX0CD7weVF~nc@^fpk zo>}Mf&+PqsmB*(agHWQuG5=!coFDGR2qwi!w$E38Iv;DCj>WKV#dRG^Ij!6UeAdea z{+PQozq<5}fSzac9s=f0?95Ou-=K(QAAQvY|1sx1pZ{UbA=VS@$4}%}Wu+%2#$?AI z3DN)@YhuK-zo|5yCvYjpzGB|`Xxv�s~C-aV|sR>uz6LT&MeA>r?IE<)Kuc-0?`> zng35bT-#TGG|Vc)ddfyrDmtKd#4$GaGRrZN!HP^$Hc!;bBHsv?G20DmWw7A{fI!UxvLOL%%zVm zp}D7&{3nnugk$v&m;P#dBJc&qk9i?CfD#%)e=Z)6Yw2J-gomh+ z>m!kV)PuvQ3Zj)=l(!1X2&XI|`%e32e-eu!`qc1;`!VWgo#E^?Z|n2fa8LSFq#}~F z*Qy_6J4wxO6CDh5*bf2KMv0hXI;v(GgFQ6r%Cq06M9z@r72BfHGnoI`JXgS?L&*cf z4%;|nn1BGBj@Z6{e9$&LQ*mxSDoeHQxD-0aylXB3p01xi5|Qhse-mgs)(?m-2=G77 zRSuV+3N<_xrjC)Rmw-b#W*@oGBn`tzTxP_Q7C?W`#$Tk}c&OyRURw$Xt>+CxjMNt# zL5w77#qvYrg!JU&BXL8mP*MI0pU3iWD~jKJu@%}E>;Olix$bfUu(VWo0T?KGtoQz=OvgvGjrU= zL%7ib8pr)fY8gYgwrIk>1ETm8kRnOG;};Q{GKK*ewFmMm$8>$03?_i0t}}D&Gv<*$ z-h9^-C21VQS#pQp1R4c>0rXLmae}BK;5r_G=s#w7!hngq-~9qHge92f`8T3?{LoeS z!VO#)oVCm&IL`UM(Z@AtK?I8(zcP7Bi-9Hp+kyn90Tbu|)xddlze$WX7&i~Jmq2Vp z!-q_nNBxHKs?)eF;2ttY##0OBnaJ{Cwp8En)uvLC5E3pu*@ z60|!~^A+D2FtETrK84iNY3zcMKejLjes37*yfNib=&JsW(bJWd28*G0!`H%5{XyqN zTJP0X9CZRI91n{Tf3P;rB6S-c#R;{v=Pt0?JGrnSrcdTCgT74WuSy(DwjA{&cX-f_ zHj6$q&U{-6h+#)`1( zc?t2dr2|4NO%C?6Qi?Sy^u-UWU;yh|JxNpghAB=JHSo9soL;L;CSzRqOUsF&=&!^g zi6@4rL6o&aHnAe}EPw}+e?)}fT#w-;!0OaNRIa8VN(q!Eg?o4oYk&j`sE5Ur%a05e z%*EJQYQ9I7J#CG(Fc?UZb(fVkUW)ZrsmPN^9IQknu#87`OAc@)^0RwZ_ykXD$@si2 zqmj(bsOh7bkB+E_zPA;Htslq2P=w4L?h3)fQvknsM@2*CZ|6Y+REmHC059H*!iD0{ zGO7xZORKp>QYPeG8JEfC6AxH2o@~(|0|$7k>=O8HEOC(ARNiz2CGN?TD65b1qrjPA zVQdG+l#bHrtzWhr*_!AO+~Ju%7)N^GL^Xd*R%(>cIu+_YI*Uv zrLt8hic5N`nwj&otUjDy&kORtow|J zV(6fi&YT`u{5_$ZW+4Uk;BnTN2(&{qE;t!bI!o>7PD92ohRpf?#qe3S8M z$XcjnX5yVQde)~C>lfnky}sveVQ@}LqF5xY0p~n97-uPh9PbChJZ_UN$d0=3NLnI_ z8`WTebaB1(uk%;8B{qmh!WR1Td`q`wp?LOMH+FMXYR47*DneU*!VCdV4ORa14n`(X z3(e4X7IvQ<%n4V%56gMfCv`en3#=?n|09r2m^|N!#8*=%%J1ZoLEEc+T3hj7T)MBL zEA+$4z?z4^<0koqr^(OBZR3Br^dV<~&QW0(e+HBRWO=VX{4UoJfz_?QT>5(HtDT=4 ze+Sa9UK9QjgnRHZrvE#T&LHnSMrZ7n^v^*0R8cGzXqOM>(&dHUX2V>%IP#AO_pY}e zuwX8I+Gr-J%e`1YbX$QC@(-7OAkgyuTNBKsBjcYK{c-7H9xJ|Cr#64Nbo+pswZB|? zn~{6l;vbhT;y;n?+4Yx8S6P7*|J$XD`E29ET>4wfi_fq?Ivv)@@Jm=Aeb}cAF$We% zU%xr8{&gTL{(kNg)cd9g7D(4}*_)|>1=2&G17A|Y0_p4b4NlKzut56yc*c1rERY@? zv%iD|3#7|;)kNm}38X(c{(ioJ1=5dKe4Z9yf%K;7lvNj4Aid_}Ux9Q=lfPWL%cqZb zEgR2eHot%FiT|D$&VfD*|K2{!`2>9sPgH}sbi5w8+ioDQ#5hq80?egHwZXghAd?lH zjDL9!>_K%DLrvsCZ|uP!6T^7TgSFcOUKIt?^5Ee0;zo($?sETe=|SQsjeogxJW=9I z?msSl;02i>_n$y|&&T3gPC(;slUxRm=4xUe<36Mf)ym-h$kpR`J+7W zx3sh<@4&)Ne{c^Fg(*pb6@x?&K}I56W~L7IV_liHQ$_{kFBy*0Lv5gkkoY}7DN0O* zcaX192Dk(esRL;X$0k4z8JEP;$VyT~~o4in>zXFsqNTgBzJ?#h+nZi*mBFa@!px+={ zyr?(pNSI}ZLs7(&pP%J^9Itx{scSPkBIT~J$9A#c6Rc;k!K+SlXF?#dxN;|`8vIGM_s zACwBp$6E(FJ0|MeSI4tEguCX)U2!K!SylXR#y=xW^t#s#u(tQ(p`z%;B6)*#k7H41 zQ{@%$6p2A#Y-}7ZY`osY3EHqfne?(aD5+vKU9dsbQL=i6EHwbOGO7Wgc|&y2F&P`FcBB%0KqmDgC@h*Q9Uzh3PEBz>uYlYa z0ho#C%qMwCh1MVu2~bCi-%1C>mPysWoc!?eX`uFTz8>^0Y-5&qHkak_`eoV+if<$I zcfHIjso8f&7?F<{XSM3|_8O>@Jm|hs#8zR=OgR8S%EVm`Ps^NpqS?nM(xh@G#yZMh zW*Q`-4TQn7)RJ>Uj+zPcBSffBKjOX;;d=l8@e0p$0YxF;Di0k7uh z_@a1BLOXS#=)HZz%GpPp4 zDc8T1o?VNQ1D~1`gTVFpYmASkgsNhx#jDRgq>*8y(0NvhPEtxbb^kD?9%9WtF0#at zG8(p510Anbk{WgP#&q!)ictZWhzr-NT7X<;ktB>|#;__>zeTv1_A^zxk$^VlTC7x$W|+N> zvA(m_F7&m;Nkizg)ymwR!93rWv81|LKBMpMMo5us6q#%M6>E!0nBS^i_kUgU&@x&j zAKp-%Tfwhi_r>2qT-Sg%+QLxTuhKeDHEyOhZp<>KkY1OMG@c4Jp7k9+zca3NTs@^* z+k0NW=GzDrF}yOWJ)!$@^KRoIxb9MGF8_zJS?A(&6*cu%-D>ySlIol*RHjBeG@BV3q#=cGU zv7UCnodyc!W$@5uq%g+67h@WF&63SWpRK^Ay{%hdezRjf*l*5DZgGyW&2esChS8^D2 ziVS9#EVM_?V>dQ-w_bEdNsd)%N=gl>LwQ|E{iC5mv6zOj(yMi;m(EgJ-*)|J_SU7X zzFF*PcNvmL?G+SRE%{olx9RS%-r6ZTYM_l&#Yptx-Sh7t`%q zOs!c_wA(ftI~4B+_3Ym*Sc^mVou;bnjJsW<+ntjY+>1@#hKRglSMba>cq1q0L15FQ zXYn5DA>vgm@4Ii{ttR%7U*6AH$H!R2zgaHOc$HV?(8BOA;m&5);m{!JQ1zoNXZ7Lx z^#Km zIMU9xD?C2(pE^nxi^?Hj&R4U|8ye4*8_2>GDWI1wG1f0a5-YuzDu>#Zg;*6=TUN+1 zRNu2#d05t{*(b^!f9dQ&`io@~UNw@KKA4O*``*Dw&#USQ-8$V2>I}9|74mVp3C7VtduaE4Xj2E9SH=IJr z(9f{GI!^34_GdYch@IIyJ5H0HRTw*s-a9TtpFzFPXjz=f+Rq49omQrtGOL{kpPho7 z&hW^bpU<42iq37A&fmlwmYvTFMb4cJ&c8%EZ?HQfWuNC&IAfkVR|KD*G*2F!J6sJp zUw=G4BiOj8CcjU1x=B7iRol7@xoFpNF?xHUSLH(A?qYi4(hGIjoOCJ0xSUA7ct%Qu z58VO^yh0LKgX>mD)DZ=VOQ7cPAP<|OFPdT;Y+lP<-tS*Fpt~JYT;Z@^;U-@as$5~o z@8h~y5I$Vs+qi|)x)LN`sRX%^OKbwu@ z?}nP(1iSBQEAMCwP4#uebYAWm9jqD0+^wYDnTz9C>g>Prd}H|gosEEm)o(-TP!EBc zdn#lPyaFi`j%!C`Lo-h^-3JfsSMTfyao)PtHPR{ftvx**pgEq7IuC{i z?|djdTp2o?0EVnfR*!KMpTr@zHs1V(h3p7$gb$nutwOhaGe|fz1?$s~4G2^O)HEL;;($&w1jW@W6wq@>m8# zFM^VTN=o%)^;S4ca4?T4V2bub10kqU2VCOv6!JSQ6eIO$PCi(#T7{Su0REB0@FT1H z5$*Sn$T(@?#{MjH|O&FGs5fJ$u(POJ}(=T^W0Cd>`x?=d`k@q~5 zL-Z@N0+oBFLU9HW(GQtqCJ6LAiwq)>2ZCP%HX;A!(t!|#t3NKC0SCSIie@C17}>oM z;0H6~ud zKM|=W8X<325qik&rx*f{@{v)tpGvz5u2tV@ys==Vm2hjUisj1Tdm!%wIFoySGd!9R zFaPjyb2Ba4mU{oVv;xp;M0={4tkCqv>PxBs%|N89#xNV3@<+_78G5}C@fX;qRJ8?? zQ}u+#*-k(C&sV>&eOOiX?!l{4#(QsV%j`AGR5GV)4l-4SgQQcKrN*HkyRZ0-IkY}3Zt5596JGsv#5xg_A zizWaBxfxTGBU2*t2w6N=06ena#RNa05Z?j`36(T$$V~adiW|>v*)*zEhZ}%g9OG!i zAFV5H+2}7(ZpkJmPsEv)BE^DmiOLGU3+_Wjz;mD33g=jF-E?Fyd`xEkHXBC-3RjnO z5QFSWVOEL0eF|q(zEmJ@TsZdO<_Rpj3%lcm8Aan7r5H7VRXW2A+?-h z!3h5EoJIPi>Mxn&ul#%#+Kumln*nFu6Jcoekd!b10Sx}2K$IgxcyYpBs`%Q^)VKMh zJ0PabGSnztVdB40c^(7Ce?{d|f1`5fKU8^a4TbY@C~GE!T-j<^#N0Ishl@sPjL`1} z4&tl7YYy5g9eZ6}pJXydTh4zpCfLU%S&tV_bf;Aj>K7l%Bm)A&Lu9n4>Qj3Ii?|Y= z>hzfplgE50cn)?ZY(g;8<~yvz^TQ_(?Ovs?ty;HtDQ4LPyt3YAWe~2gm~@}J&fIZl z5TQhTxfaWly=7P;dLxwKef-w_k&Hn6=Tg@vW0qXtV7w&Er3bRTj=uY4E=8(8@B!y_ zerhA5+zHNX6#v_TpSO(ior<%uQdotwlO>8TNwPvc8uOW}3Y3vazNXl}Ddz38lh#b9 zuHwxFd~gp?k0_yHBtw7#*S;zt7z)k@GhYAemXHAkqo@G#ycQ0vxZc!fLwQT%n>01xNc{?_-9%L|0$$}YYn4OsYa zI-RK6b@5s$n5hgLw&KDW4rl2}s--&Alyf2#*(I*5FzoM}-CUYDUorr@AKWA&1U|Xy z)JAKS!u3??v$3q=-ylgbqrx92e&~4PT~F0S10sHd9A^wPeTP6S8LGeuT#Dlp2}gYy zK-^*aI5xyHoJA=~1~DRJZ)wv6=AjjwfRAx3{T3(BJ=)u2FK}o(cGx&1rpRq&(8WQ@8@*C@zr2$p8#Ixj>w}n4~$m5 zDgFFYK*9oB($IY?y48&8MfTgt4154N9oY(szXrgv5ln*EBj*6+m(&KEcs?62zgO}E ze0x6sAfB>@R;CMJ-*?NQ34&G8A0%J!)tw%$n1oX_w@r7BcY;=r5e}fjL)dSQ0G97h zv<@0euz<&aFkulaEQtY)#QP+1r%U43pd8S439S5buvjfTg$*nPfXWZFa(wpirAh(3 zJyZJLy}y&it`Lt<_Tgf^cLyCe0fH3rA~~QKe|Gm^@Y=RB3%Wz+=n80s>Lr_mou+8HPkYKB@_?3Z z{S%>El(biHx<1DZF6LE&6gRM3&og2D(-aTIEwkK*@wQcVIKQL3bqyhk1v`_6M&syJ z%H-gU8Lsi!t?ct6!&|21A8khcAoP2>%`HBeE8iR`Mw0<(l#$|$1cp}@Mi>QPjBrMG zv>_OQoA|(_)5Qn*UybM zBdkmp3{?R#=_^)-y%?ra6Gm&~8*6Nti@b(ztA4m!Jq=d4U;^0-NyL6Z6#{}S0urpN z!Idg4aunkXlr99+a>y;5GO1W_9YmQ7mGXWm7l&E~lV0X5Zlfz}gHmbBMPsWgGkUOY zV?}cPewO5X)vQ`b1M3tF=!rhXQ}H;JkbfOl{zMAaHd|3$L!Y7|9?kmhl`plKCFP@9 zs+dmfp+_P$LZT+i0-Quj{*2C@gFUyku#~sPCIh8dU!e$)rSup;mCK`D#-}@$|0R(& zK)Z794Y}iz0lXuIBL)MRVt;XALl3cjKTcmh_Y7GAWPvK zanb%;49!y~1DK;}+i|(nlBLw5(b)m5+xXTPtkeap!a;=e)TUunQis$VSKGu;^T7EX zzHf<fV{P_aMW0R{QNFFVAy#rqmuC2yft?x@x=S|w)YHsj+#2~ z{C23dT`JRdXpnvA^jI3byc6~QYb;WkFtMHV)u96LNFJXlUN|_OA}T@b$UucDsX8Xf z_$X6`Nrtm5c}h098Z|{}EA?ZUW1`)yHAHV!ol6jo1ynuV&R{Pjmfw@@ws2Ivr zv>lQy%v>14TwrfsLLXe#S5zE-oEL3huC`s0ZJ*M?%wNr1wXRi}eFPizs~#)I`cZCJ zYhQcLtkz~q_e_n&r44E}4%sLEn=^t4~LjJ2uuNOU^M=6Rh1x?cl5=lFeJ^Bc+mK&}N~al#SS z!clSp8ESzXobUp*@Zy{Z^0f#rIT3Yg5luLeY-*8QIFX^AwaA}1L7}yv7*3RwT9h14 z)RJ1%8cwv9TC{FX^x<0cX-}PJryN4HA6i$2RDtt{}Gq2 z|9{4%zx{xK@V^&2{|_kt4=Dc+D92^~4=8`Q+!@b#+1>U0^YP|nW4gN=mYGIk-1I{r zu-)_r(U)!ppz|MY27=`nw}SArZMTAntV_2-$UF|WLLniH+hMfHw%g&1#iiR3tj&kp zk(@(}J5jvfYcmtq>iw4Z93Y`33gTU@rE?$~^^pW!;hbdc%(&F&z}YrpIu+voo1Ajc1h z`7k$#!2U2VjK2I&_U8DoAXbj~s4!96{-`L`y8Ng()8qK4BsYZlxU?|Y{k--%$LmqXlFI8b)|S)jan51Zn+e{< z34Pd{QRU6li-*&jX$fSu+Zh=`r`uTthN{~+6;dajVO4pyyZP5TPIn8sFQ0FR1kpC{ z7EMFh?!Q~6INdMVmQ>v@JGPwNuec7gJuC^iRJkp_J*awsuKPTkJ#6^(8?~$v?T|li zg)vk=Zb!9<3T_dQu0QT3>Nr2`*@|Nd4aQrXKON+TR=4bDD6h61mX=h1IWA1WygGUg zUi)%_**}$YD)?2b?(F9lh2MEGGQ{K5bQ-gxujAz4=T!|FCI6KP>GZGO(Sw#>w-`Dx z8+YG1DxZB>{i%0G@8o{~t?|B=HM@GAm6i;IRFNz3I*fH++B1;L`lghikTsSA-8Db z(=DvX6cKKciKy3-1rnNmJoxAXaEcQ&Q)CdZ%(hB6!jn0Gh*(iHA}*%;#sV4bu?c=( zC5V>S44};kCfKY*M0SIlB7%TlApw$*G^_x+dWxLqT@xP!fZT7(hzK9XAIpq!p!V>(A7v&uQ+UW#?H^^Xuec4(O1?g)wR2ZS-gu zlcs>%9110n$rmgr;4Nb!a3H`lK@N_9z|{t3UYUlgp88`UZ3j}QYalQVrYY$iYqIyb z7aZdOM8xfDV#TZq#Q}XNc92-et_nzcvj;2|+hB@0P%0>0u9+6WQ?mU!_hf?ZW!Rkt1wX2#}DPikARmXG);3+5*rL zYZ2%n12um5tY#QLwUxDT6Wq^Ij23woN0=ELQYR~|1;&@A-h0^gx0744iDXTu-#3=3 zR@uKKU0(m3+&H@gwF{xI$R6waCRjfRcKT|uvVz0VLb%NK{{4x;7GP1TPc-I2dwg|Y z_@QmaNxvi7Aa6I_rfqhz+M{LMXkJaH0#fhnUAwY&o&L~qD7x&4LPC92Zkd6>=!c%Z z8N@(jnIRGwfcP63@atHm8!=o8ECvZ?QqM!xZVh;52Q{LjB7C~aFnLA|Fu5&@@s*`w zk0>Q&$9y@`$#hjSRqF~D5JqGJu)drIcx?j!UJyO?x+yj0oopemfER(e;h&0o(7Ti6 zD4^Q0GzjL2xmQ5_?*ZbZ%wWkmK*VQ^!)Ui5M0(0XG${-KCg;D_E`@i5`|+DEgSp5? zpmEAxQj}P?a?VDY#Ye%d>nYP97?XCD3*o+9s)KLK$IU|rFlokp zqLJOE3D4ico%A+HaaPY#4bUM;g|mS%=>)hcu=uOgc_bm}DOjlc6>ecZoZq3uZtASY z&O{hMoo4F0V4_k6ZtI0iIX_ITv&9N*Rst}?1ps5j<8SX%rt=1f znR=hCNt4?3VU?*id2>g;T~>_iZ^WH7!h6}OK53IL8WWKN+$^YhwgusfHK0C5`9Uwo zcMQylyYH zL8zl+Nl1WSvhXvHeShY}PZLr9Id;3cV3Ez<+|+yrKQQQ z0qVCZh;wr(a$SXjB6cu=!X?ww|M!5LL|JzcEkfKR(DF`gF!dw0sJPz6#>-owdR54&S(i^w?Vb0~^X2a+n`Z_v@V|7q1@=CL z-s$-B=>`}1)|Kc8_UoL=zvsgFG@S4M#Pw-m_9Jzl{~&e1!hxL{JL;I{nW6SLq+|6r27;1=qTqpjcxxR3_Az(c8!L$i=^|Bx?5AqRaS z2U{UyaG||)q5D#y`)A#w)NVf+&(p!}A3rDsIBB%_1rSBG#}Y3cp8GdkK|)56Ti`uWKc*e2i#K zjSPDgsU;Y>-50qOXWSS+ zenpUZ?T~IGjD8Emywggzr%QkEo#`ly?u3#4td!|Om+tD3?#7GhE;T?G9{XX0?xzCN zGf|LULClyJ^KV8bMB-q$Cor-%9oiEkMp_729S`PJ>}#pGDD$|H;3xvBI1K+djqSK_ zU_51U9DZ*cI#s+{KzvAkJeWHcl}k`$5E`#coe(IMkS-UG2bb{1HbJ2;!EZYObvqtK zQg{eHQPw=sHy{x;GyzvKk-0Qc3YhesI!R$T5oarrRxwFDKgqK%DbywjTap)XE9r$) zvb%XQlqwNKm5kt@EVP~M228m|P6jgZT9hTPhoz(zryMGzkoYIHQm433r;;D05W}Tf zjHL7yr&{!-!XCs1p;$)SvBl{HgoI;<*|8*zeojE4&w7fFeM-AzOrNVyi}S)s(_<-4 zqpw&BO!3ApQ)H>~rf<*-s%eYM^Uf&N%SkXKXTRdk zo@HYBTK4&ziSCj(yIwD6h&#uqG#fWOXRa)VhB5c$n;hxkoNl??{(xMo!<-oJTvU>H z>@R`1!vBlCyZUN#;r~7#Ja}+-DNd2%ZpDkW#oZl>yIaxX?(P)#;O_2L910XGg>=%r z_jBLBd7e3#wdP<>_CJur(LF+}^hRY4N%f+$A#T8XRMI7UOQy`{ZNY7XZi$fd#=`Qq&bgC`}bo+ajM#R?TgN)_2|D6F>f^D_WJ1mC7ilsx41#f2N!v`JD0gF9X)Evc0N0*Q(;N zt3Mc5OWjww236ygSNF(OW1Li1^;Nsj*Embm+*{R{2h}(MYe>p!y3zv|`D$;UbnW_T z(1L2?RBNBtYDdQCpNNyL*1{m#b%>eqStm6?*mW`BI+NYHVVHVE>iS6WdIO{S{=j(6ACB*YHuxpt_O%AYBnei6B^=Y7ibvbAY3&#d-F zEe=HW_3cOsUZ?g{s0$ZNEpBhEziVMdZnHaW4P9;ZQ)pxS(n`l%3oV|j3sz^5l&Ah` zgEH|-%~l`n=8DRuIqmi|oAm6=_DaDHr1kc4%l22F+fU>=I?rmGE15DX@m(v+TbW6~ z9kqkr)uSZQ?Icx&m7TTTHRI3=u<@cC2x?azDouZ8IgVgg2uYXIN!L<+*Qj>#&KY4> zW;e8&x2HpPaMrn;NqQ>S)7@cop+NTCrfbu?8(pCXB3OGq-czdC7bg>AW8Iq zw$Y%GQ@^GU4)sRA#`B;d>5ws6zm5-{nPR`Z&k*)^uri0 zMdS>pFCq(H{~5`zFJ)sDmRL2_W z?8J&nk%ry1)Ey8-({!pw0({jSuj`yT6#{+12Rus+@7fY}+m84=kG2j@Pr^(Y1iHIx z*x(XOPAiThvIbf;$}IV4tz`AColnYB&8ou8=qI@TO!B=}1YKm!ke~ygDpe2KTd$ff zI-l+dh0HCJc6_VEd!|>0q)fGLa9wT~m=1GeEllu z!VAzJz6^A`KP)_+D^hG7%EHG708x%`wDAB>0Ne)vk_FXD3dDRBt7A4bO8B|yvA#Q1Jx$7*V>zoMY;_yhjSQ|EWzIft3EiluBF6VDZUwWUD-h|Ak8iCJ8;+0+lz#B9|BLPaX+ zmJ)h^sZt<}VIb?}jHm8gC)vLJ@D|_xR^7Qh92oF`Pe8&J^QcEok>gC(Jnjr?41Zj4MYL{FnJF{@ApLkQh38+JP z_qR*lL!z^N^P^)l$iZqB{;8hd9~6Eyi|Dlf2ZaZ4Md{;5lLvhvCpEI~X2bY)LUw#L zapIiHl>|5~us?dWdDQH2+M95i5PRlxePrTvh+?z@cgt~L; zs8at#Rpirv$PSW`Hy;gxqYAQ!3gYI_xryrOW7?5-_W+{qW)jA1%H?Ul-`-#~tSHT; zvG^s&@mVtPWbX37OawnAo-6fg%f6cn=AQz2z&{$iSF_0PXg=n9UfFj8xoc0Db7+CQ zL7C`2C%B!w0smbKRU8D5_^$-{G%ZZZDnA7xoT+?;Ooc7Oa4;f4mu9JfHmySAF`V{+Up zI)mHdyH6LZH5-O-arZDhh6rwk$jye&Z$NP@MgbRx_)DYzHxa&LC@Ma;V84j%zkR5` zaMX=6|Is%)#@MRI*oOV*pq@!S5+JRIi&w@^qezmqWE`3wFGw@6gVQHL9SLs z0-uCxpQd7ugfZ^pJuISMT{TmDs#69H>07#e1no~)9&Sj(iA={!AtxP47dk#kJK$-= zQRwD|UiXmH*5YK}Tfu;=H!!yWSYkU!00eXl5MghSco@Pot<=1Vu{b6&GLKLKNLmsX znF3de!O;kejjV)AOE(i57x@R26RDenL%9Bg&ee~UbA){l6(8T0&E!hQkV|K1oT!!H zgriiiYCuEh@2m9($6j0i9XcO(wdt?dMhM#^QZwr3MqUh1OJ1SfB~EvN z(=|P&G>QoGBkRSpdL1f;hZv{HA`NFZ-H^y?AVYG?Xr5&a#|>eiER0Ni<%W}k4=kpH zU#NzY0_+eqorb9f`NVUE%HuJA#0D5%JaO9wBjd6d&IAMoBlQrC(W~_K!oX*FioB?= zKDk|PcJ(hn^qxI#Hu`f#bs&ZtVYb-K;^%8IQau67sJRALF}<){X9}j`dHD3s;*^Mc zI>)eRK#(OuuwwdNBcrlhKlU9O%6AF$#d+H@^!-ohpHXvg*Z^xm%-2mT@vWctTCs&h`X23eZ8qzGBsR8wp@;#pL~{tjX_ntX0CDOS-i zh>dLXe50*c9^vy>*@D+_gzD5p@YaCw5dDCBDwI4RBq0Pf*_LyYI^RlOaEON#2!KF@MhQn7 zuK4bqmc<>$J8g%-H&w4p=sqvsl$ZizAJjr4RVA;jEqefalwWJYV9^Z4B2mzGdhzts zjSwTP#Rj97a9ih>b%&LrrbUC`oAX{{WACq|Mbo(zaEyQ=qB*zjlBlqp(G20GVJMB@ z1DPDz^gxJ$*h>tfX05yBwyu1}k&Nq2bP@atEtLG&88rH-J6-oPk+;|p>^|A(XuGUP z((z%$@Hiu3DT=bv$sr$*-FGA1yGM0hRv}ywhz@XR#%OUmu>AXB6ffpE+4fRA6JWpeTg7UAgg4E>mPzwSv0;5E{W_>p8B2NHWY;Ko9MHm6r z!7f)3D`M* z9%2d~fQ~|IQid0(tJQg5=X?L@B4`5#*d4DkKbKdeu%NaIdAcFfwjwE5S`&r-$^3qK z@UGi`_2+{Dzz(T*Rmoi54Y-g8K`Z5M3snAu*w$YJt5W{IBI5$zdV}DpsQ!+O2ZjtV z>Wju3BGP{SZ)Cie$ zhzwm;&}1M*iXI6QSU1L?Xi2}iuA}T@+J;lGkdbEktaY`Y_Y5@6W2jNqc_NX=hij9o z--u7lJ)njWUL~6b7-1IdO1icuQFF3!eiD~bVn#P6`49F62!Cvsg8vJ9L;lv@mE5%0 z*#C$29{)wd;7}~N5s3*P!I2&Id*Gn&U-PVyz9&;ac?vK_c5%8{Hilt0vvuNN3q4-mvW5v{g<6z~dr zNl520N>?bVWN4J^6%{GH9H`}6CkIs=1t4>8!cOu_VXWZ>VHf2gaFl`dUQ?H}pEXI)P4_m?>+ZA|b}i zhmKT_YgmBuAQpDiBtd|9r585ktBUWb#mkY_EX1_#fbkn+X1x4-5<@*eGuOrjCq#RT zGqoe6ian4~(U=$~o$Y;zSX%jNTgp;x(VH4M$;^!vs?;_yEvwv|_0~yc-twuYOF8Bg zy)~oMj-ANMwr-u~)7Xc?tv3!DEt&dX^HaObkpTx=9ba#z+;cCRYVq6`m!C1>dtQXc ztY8!?pD@xAAKzTjV`Ujmv7~junmZ<odex2eAR9e>M3&>m#oNd9 z5|BP>sBn`wif6|7BV=q;&pDZW-<0)N%Q$)0O{yLC;heeFgyHT@`mnV58$sk@yL*&O zQ5&|CK7N*!g!*hcdJAEPh-qK9tcYSo3n7BFnQ$4G0=zCu8Q!(oxG8b*Zzfr?s`^A-CqH7aL6+!OX3a`o{l+&UqWlv+dm=E$f@# z!`wUd;4balGPfRvc*VZ`6FSFN?!M!;4TR=}ND%)9<)XiK6sRBj|AfvzX7ypUcnrPi zc8dLszfbme=-kII>);P4f6r#)UAys(J=}9*@v~L>^2Q$h$3-n#34fb3@f37zjeu(*T&gw83-{tlgYe+Y4hf^yNH-^FwOfbv7L zVvk8ED9?3AJ`#t5atnz5?H^E1;P15v4V`;i{0W`^Y97wHZyEMow#)V2dVqFh{(y3J zpKWO997N%F0}Y*fP;CF4{!Tvcj_G@9;`c<;?RVGo{qcNz^JX2%|Iz#YCDGmB`RJ(Q zC%dxWZA;I~DZAjWO;P`={#@{VsXt^i)*tSN!SCNk0>9y2!@&2#CJDe!u)}lrB4`L8 zWU(We_5$GrfIhE(CibFA38S39Mje2@MGK*Gvx9DXv1|n};Q6s=!MLRSxTZj@JS-kc zeD=S+_Y6J02K3dMkCX*Spom2%mCcSFApoF*;&PfS0UTNa7Cv-JWQqGfjq#8W*^qQe zNFQ^NFwJw)JOfO-T&lEe1Z$lH3vK_>yhPYa01ylK;i~Y}0TqsH1UX?pXOZNbV1E!) zd&@>JsuUCIX3EF{-=_5o&<;#>NCMJA=kr3hi6hz3`o&oWWQ#flrDy|zAxi>DjQN2= zX%c~DeQ@d$a=6m9g8jrR!69Wq+PwoZiV4K9(itR!nuNo;R&ZqK!2$Dx@Tr3rM*Z4a1uZzw&(hX<*14dgO)M;R(6rbGRK2 zl;RJ_;tHf42|?ozK41yc7+E&yjz}5_Wrlujk9;QW4%g+4J{XCmZHc-aiN}?5pC92N z8BLUuGl3gTG969PX#S$X6@D%llEjyu^fn`8^r%5DJ9sc>ebn}RG%Kq<*Oo0yh_68E zZT>lDku7QI540H&`dsh85?{irKy)hG1g-X%jg^?KM|46g3=$Z?z8J5>)x`pgzFsDtXR?#X5OS`G_j`00K{zIu~>jFcz6OUe|NNB-a>M z=6EY@*^ntmsVSxyR#H_#rj$`xjeNvgCuF&NTm>+$(r!}2mqZn!WQZC+p1T%atMNqp zLhEpdB3a@DZlR*2c52!lne*O+M`!s?J;6jmM9vLCFfc8UF|CQ8FwpW9eZr(;@Z@S| z-BC!x+HGVsRz^q$420g=Z8bo7C{+OW> z?3hdIMJJbmFW;WEga$w&YDE-oKu}Vdcs&c&d3UBl46T_`w$E%lvEFh3>E~3q#HrsH zCCXhZ@$fFnDKQfBJstCNiVW4hZNb)a%0mqP@$_OYtL#j ztC_--0zj{xL#hWQQa-JHhS)~@)-3|Wpr&GFdosuyWR&^E^1XrSy#7Mp?~g}Q0P&NSccW$c20QXjQ;UL zBl1htQeM?&XBA+C#p*>>vuVk2;e#Oa9N;ybhOt5y1P$P*$Ktd&w$?|dw?{{}SZzpL zVk}TH#u>4L60jSzoZ7$SX%`h)J?F(L>lw=NxmXiCr}=Adg%w2$ad0K}O-;i4ck$87 zU*4<+m}(6_YkJ3M;YhBg;5DaL_om{tW!!OQW-DiHie>A`=G}?p-)VL1Y4LKc#VV|Y zS*;b4^%Pe(lxEA7yS}Li)h?!9yYAD@(Os?T>ZyLIskvaQj}fgzSWlwXY2(&m)zQ)R zTyM0iU$I>;uU?0A=(JTUH@>uYUg&fqG`23TixukhR`Y?$RQt(vFVu7?Bz4=L*9H-^ zdImYiy41$AH-?foG8Z;92X%*EHXgim+sHN{-x)T?&NkA}HYW#@=Pxi)LpE2GT1Lz^ z^H_CP2RAoddDg1+YVg{zvS{e< z$7sT3ZMpXAZ&&L}c5bz=>nDx!5s!le#w&;W2FuJ;?lY0AF<=*R3Td)2T3}t7OmgPGnV4SwPiI zM%_(|9nlPJ|Da#eY+cW+$jj`tz1d{uH_gs(`_yI}Ti-Ne*Ir$k6^xsyk{+s{9`e?h z84MMexV0Jk8Jd4M>c2(?hCIdXvHSbX^K&BI*RP{v|(+=2zovZ?DRgXGv(emCc46Gj~lUQL3o%q=w`!^pym|Ary zoJjheq}bPeF@Kl2WuC=zkk-wf%_f?=WRkTRp5^GkbvkHu}MUpdmeVYW|vpyx8 zQjxRdnzNdco>ux3=wUx!rj6JB+4hgKp39=Xt?k}!s{x*K9&_6k65C|^a}@9MHTCoU zE?bmX+heJ-(fgc9{cXrZj{0+~Il02kTj7!x?&xr4)^o4+hKRtgGFpV={JM z8ZLS_?E(w!Zhu`&Utaj2+Fvufrd}@>I})5YZux?famT!$|Sv72DVydB=mY-OrrwXH(+8+(aO5 zdyhj7L)YKClr90Kd-wQXVOs3r4D6pEZ{aa{5FUh)a|u!2+9MJ;0uAKRd$ci-bWlb2 zU+%A}5S*yVoVMH?(U#Y6hmG-Tw{b+*u-&x@m$`^q^a(JHx)b`4P5Ejja z`N2qp-IVeBCn*B~iI#a00vAU=0kQDgH<>P39WFZ3KV&R!qcm>iAATq~Y$~Q&sMWTp z#2qLj-Mu4leeZv(%6lixb0_)syB39*)`LrZz3Zu@tNhTN{_pP}dtBu#T#b+J3~JRh z9mMn;?o5a8NMi5P)ZHj9t}Q6;rP%MK!|(N`?=>y%)!f`nf8U!!kE1z4)z1lRVFB{8 z5jvV>VLKtRkYjk7D|p}|yb5Kk3qb^yp}RW)(4+Rku=XCy)#cOn{ZL@2J8uMq%7dmM zvUwKOvSmUj=3|(@hug!NjYU=|8Z_%2lR`Oupc#8;iM-y6zPW?G4FLEVxQ78A0iefk zA|6hn?)9@dfOx?BJ_H_Q&)TOzF62;>9e^qy9OB4W*7nb! zd!Pk6O4q`A5HLim8b)+X|LVd7d<^l5O??_0VA9`YP{9JKQsJp%MGU|LX0j+}Cz6yn zfRN%N&s_HPdd$oYS_wbam*%(VE5}di?jCi^kC!?39@W{pvOp*Y4_pcLzph9EqX*`funw7E$sGi`5P7NGQX{23srVUI|n<0@e*`P>Fat ztQB$N$xMGACXv4f=SuKULMVzZ6qIZ1kCdvFs#ROxF)dYT>&a|FPVY_v7*XL^JR`UQ zl%q=q*s`3NVv3`UhErawTPnsnyd)1d&zARB8)4^JG-zhPeIU$0Vi(G~(Y`n2R#(I% z0QsDr40Xhnb1lQ|=>j-R?)tjn$+Y5k>=+ds1>i_L_Nbbe`pS!qcK08bldCNjAQS2I z_tgooxZ{ZRGj0q%R8Bk1k_yxEU0xsNFjiS?Y2rh{_(Xbyrj%DPU|7l{wyMv1?3WK3 zwc{-nWMYM(v1&)8Y1=z~qHQTyW+_G=at*Gjpr9OGpe!#~ebPvaV(_j-6}>Die?tvJ ziSI)w)|zx~1Tz$r%Re9&4M|u57XrjNOlgC~(K`uEWFgZ;xMWd3T$gARUcvtS;sm(D z4S4rJb}}y(jX;?sb53-y6)*C^lP*O|1R+0#HZ(6>T#O|tQj*EuRD!93r7=pX z>k2a%!z;t-mb6Xcqz@A^VIr(R>0sxg)9gXw$_-62SV#PpEgpVDnGj;rvLOqJpD2M+|io?Pnx@z9e%CXz2%!^|dIcJ&9mm8CzMsmah@d&^5 zi;3JCsvz{niie4_C4pyqVQ_ueXCzIm?pLM9%pPTUY;bQz=su$d?8GUE@E;Vn3yw>; zqd^h4C+`hw3#u8u>oJBdCFl^*iVbv>qoC}OQfDKV0Y%{T@o@ZnxC0UrXkajif(1TU z(p~X09HPm=l_Y`v4iyBn3`5B}vkVhr=X~&fOhj-mR-`&%kMQp00UT%Xj{iwGH_nXU zjj+a8V^;vV7a+YFMgh5Aw*D;~Qve8l12EH_)5-2vtFs;798TxRh=f||EeqNhYM?Qs zMK#>R$5csen{;IZusxFAv$QZFu+@2Ubf~=TJBmM6dS|7`l?$AI)lWq27{>DqL=H^q zrwT*`ddG|7JO%{BMC`!J8;Zke=7rF`7N=1K27w$^0{PPNG5yjO0SOvn!6WP;=WA4$ zO0vuxoM&=`a(aLdNC8Wpppd}NyXgCbjl^U1v9AhgqIxZd1@<`J`<|1;u}4#0 zqk=uL%Eydc4_QGj=Zkn#R&mFNpE){vYRO&CW^`uAiu^YXB7>xdorsv*&!s4<3 z044D(K+%N~S)~`2a0YxeQ936>O)c4dg;Wkg+1TtxqJSRaI z(a1i-8C8&ej^ZxB5v~wt5r}8uUgRXIvObna0iejvaN^|!sIk%nB5yR7HO(@TySCg@kyOlfVGl5sSI^A&T7Umd!Sz#N!RxY^I>>ec z0KyzkaC9C&Eg{UNz83`<<51Smrpr(}oYhgDp|5LTmPc&G*(rPYMnv%~O9k(>1!L1D zM5_xM6Px%|H4XZvE<5|POtwblZ!IvgOh#Sf8{4r2fYCuiuk5vrnplK(aeQViSD$T0 zhl6%TPEvFpTtK82KKNVki9b$5e4OWMG-i34INM=-5NXjkfB`I_D7J|<-6r+xqBaxf z)t(q^KrhVey0<9hhR8e~l$fz~nT#yo46ikrNV@gH5zxvfoW~|!)78r;k^*oOmm15e zZ_N?*_5i(v%?)^0G3Z}R$mY_=ZW}q}C!`322}_0oAzNHTR3@O&ji+%q@n~@-p&Ij5 zZA!-15jCe(?=**r|3sDQkt5HJ>U=c<$(EiitdE!X>>+klh#dO(NdPo7wW*Bek;3#ba`9?Wr zMciu2yf1MxvWJDZ|o7cF^jT6Lmi>~U$ zNEhtU^_Gor0YpT4#{iJvDuqNLV8!z6Ee%9}BvsF~lEmkoJ+JI?F!^aXCcH2~*+h)_y`$wYXUKF_wH6EnVr|OxI;sOx?z}TORKT3ygq_4x*z`jK>9pt;hI-(Mz$? zpN$m7SUso}=lS@Zxjbwe^<{>Lg!n%>{F&snS~)UqtQQ+>6ZheY5?R4{ZQqyE>hau%&8{<}{IpwVkeoHe{)ox)}h!8(<-w z4eVCHfJNM+RH&8GM^Vm^(a1p+kUC6OeI6WmUNm^5+re-Pfgp(WWp5o8Z=t{%Vqpy2 zW9dJLFT(Ip0k@WM_9AzSV%p1fpMFvh{Y>9#q>$Or!Gs3^M$k6_JiYMGc(XrO|eC)G?zP(F#s09Ie_ zJj<@c$~ID1zOmfi?(N$PF>SyB2Jt<`m6h>zNXpIYxF1qGm$y^j;is?4HZT|04ahK2JtjX*}h+?2{9HnBNh&Fz8ED~f;LdXjV5@(#Bp;|&G|rh>7A&4yz`YQ-cqI*@BltA zU6Qm&oR*figjP}nGRCB~#LTv@U>_oFPb{;xCnIkrc1kUKUyzwhYoC2U^JEIFC^EUh zQ9)TSbxXyBNdO@fJ5v@*4H+Lh(gTE4ag|i@^svMl(BIR~V!y%C#R&O84F7Sd7)Rpp zV?eQ52Ax(Eojpp3D7BV-GhHGpym)ho*oYZm#_XL;iOTyD=RE>DVw_JruP}szQho2i=EQul?a4zaQhgSj5RvYwo| zfxZ&bz-CjoNB&iWxlyLFQJJ~vLuJ$9X_I+nvpsW*TV)H=+uF<7mVZFG%`qSIKcJkP zS+MIbP(EhU`WGngzGUwC4=BfA0pnMJ{}(9l=c)P!l>eWh^M674zoGO0-#|Iz|0_`5 zV<+}+aD3Y$C~kCSVSE25xwtwZzoKJc?Ckq>N^x~_@8JH?si}X=&E11fLY7ry z|92nGKnKO)KV=zzJ<`6U(fuZ5gc+rUv!X*dVL(c!MdqhNZDT;UqQyj}!-{0U;itu0 zr6tf}AVQ`kDW@f4WT053q4K1q`T2^joaU7rE#v4bX3v=Bxi4O@ki?17=u+xL5936s z@aTr1M7O>~BH6@}y+jx4BzB1;e&Zykpd^-pq^z<;W?<44FuABN$zCFv(Kwl(D5feX zx%gG`MqhHzVR8X%ij_pl+;LK!af(Gj3Kc_2eqYM*aY{05DzikYiE*kpLuzhN>RMT9 zVqa>?Vd@fWnifM^mPFc)Wm zIpY&!M(NuOT&s*Ped*c-8H=GAuqPQ;NSPsh8T<^HB$k;Ty8$Kz~C#+*U9 z9CoW5xyT%E*c{cq9JIZhk>Z@Mu(>D_x#JAEf|0p)#<@M^*@G# zaZI?0*2Kx$8CiEOvKsRkqPo-x$QWGPejFIC0hHSQeyle^^%&W3f2ACeBxlu z!iulZ@pP2R_V!9Cn#zyFdF5-MN)-IIvC1K@DuMmVZ$B%M>$y-lsti=CUU^l*!d6$R z+D}!0me%m*DjXNQJhr{ECZa%X3)Rx)LF)oICu4+XUc@W%Du<`k*HJFJ8D4k9VL@8Z z7)b2|M=g#(4dH056R-|Z)um{@Mr*frk*SVDzRo7ScEqC&Et3=lwFW~ck3gr0)TnMJ zv`$mCoL~jh@?^LS7V?JNIaE^nv+8b}^4^ZF1Xw+QiP9Mz5S$S90!cd@bvu$G z7OYQCw`xyU2Pr>IJ1S{Ax)2toZg>BO-p{Duq=eo)Z*X2F7`qII&92xU;atR;eQ9rlQKDW`6 zVo58uWC#w)K@)sQ=Bpq7@M<;1!FQcQ)C_MU&kXus4T7$RS*gJ~e@pC#5mm+h0+v4#+f8VsFkx7? zbC_;pI52-y;RGx@fv1)F&PsPImelk2kp~oGZ=j5;g2$52$Mjhy{HexW<;H`a|Kixq zBOf=o?4caH#k_#q5nMH9c-AIHN+~fhIdjb?#yqmh)FZ6^wW)J-B6@015$BK2CK!94 z#kKg%wS3M+O;A0e*z*&*Q9d#J{hagwja%G%N~CaV(ssbKs&A_E)63GQ+vg#K`f=PC z(5odSA)%QZ@d;}xS%}$R1@Ail-)7K)Hw5W_CcL8*@po<80?(&rEBm6yr+7ExTC)BD z+xSY}>-6uSV0&E={9AXz5@rqxw&%0{3%0pgXLvSe5GU#dvOCbaI`lV3-Eg67d$Mz4 zsHk%(y6O+xE}vM~sv3TWZfPk67ajoQPXyX4fwbxr(ei-2Vz9{ZNUseM93AoBWVf1i zO&yai#dl2z3s+{esAYXr$EypFKzFz29aGmGi&j*lf3xhNvkdUXSGjQe9M7e5wJdS* z7vG*;2?Z{#jnxYk&hQB@VJIybVEOdFeGg;!-r5&xpckBY*GAqBOAX>BJ{ zZooR=wL45N(9vj}E@FMMVjal3WQ?}aL$+}c&UKhNZd1Jh7#Tky0G#oTzMSKdXX961 zc>J;40h@m;_spj5#frg8)n0bhj^HX&->BZ-sGDOUcXBCTZ+avABQ7BTUv`^xljy;B znTuDgI))_4eP&8)Br7Z=y_r@WO=@vy<@BsM>9$uD=~+^o?@L zRwib1O$pg+>PQ|kW*18um@{*zcx<76Xl1`;;Cu3=;#l$e&@5rw(e?;|<1hGKe*`mg zq+@r&W2YTXp2qFhg1f#jN47U!eTwiu?Kl0I$@P)PX|WB)i1pUGt@1Ly&$n)o-8FaL z04V=1JU0fPmmcd)PtDIluMoV~7GwVs-~pQw|4#zkulvA=@pLBj7+|1X)QwxBjGrFQ z^+kkeN4b)b^mLZI0nUI3i2|RN68N_PM>ojC*3C zFnjIEf1{{>x&35{PlcQb@SrugVb-~lSG_iN{V6xv} z)&Ak%>M_O|J;ooV9|Hd3-$79RowB71<=-iTfAjC8id$Kj+b52PP{tqIlegkdrZp|H zAMTHb(VsN&m;dJ9IOu?XmM2VoVBQW7w;lsz5nCG523+vn)b$jd^q;N35dEcPm~$s*b;1*5o?V|?OT?V zA0A7AA%RYbXOtLgL#^g(xtJFmONADMzO!Sc7Q{$iLFrLs%}6Zs2EQruW9?=v%kOjH zH4d?0Sk4SSPv`en#td*&EMcUSuz;#~5|U`_gWx1ajS5Xj+ZRCZ{z%X(9K}3Cm|#RS zQX!CDoihLy0gY4)z*lI{+3x!rk-XE$VRtZw0!f)P!1-HWy*1fLiAiQt@g}Jh^9Q#R zz%o*|r>2 zx{&XP=DwsYjP4i*j`e{DJqRzr;mU9UK`7Lf0YL~fiH1S2n0t0*I3G>x2csaLIAn+{ zbd@FX(1Wg9j?mPg(|l{e6CFV#T*tk!A+|gDghQ35d9-kvH6Hp{N|qzUsW8$s=NbRdDV>$l*kV<37cD%){L ztjcR(Xe_yATS%-T#3Pl?Pn`Z~KmW6gfK_N3R}-JVRo;GnlAdzeH=vOc@G#u;KE*u9 z)(?0Tyz^85Z~?4% zGzywgJNw?efk9kUxL=|>G0HsrtX~p?FtaU?myGXt{(MiMV+ZG$uM>nW%CHgc1+t{1 z@RI!)lI(sAlmx8g<<$gfdyXWxaItG2a4Bs0E_MZzZl3AI(aL_fHaFj-`~fTWo$?OW zaQa&As6*qpB=S}6(D?XU|M^MOjaiI0s~R0H0&;J+@&xbE@}@bQAM;UpuNabkAYzBa z0*!#AgndX5fiK0$F93g{vT+pHD-=yMN+c>xnBs`V+#kj4GDDRl+lX_8;m?+ypRwll zjxET7gc#*R1vkWWBjOp+4?SUezeMkR6DRj`^bv+Hc*A?^B_ui zQVmKB^W$I&TOrjiknn2)J6`b7Dp60Y3%>he79NbGIX zPvn_&xX~p^HKhKfNK`lYbiE7vR6%=4egS^yiI_gIdWQ2r)*I;~MJM^%@W*c+bQY+rrw2Th|s?_7))IOjV?|cNkZaA*Ak*?Cl`m7$w zh942-dM>l(l{LnP{pE|xo-xztM{n~6%Jki$SK^HF?eqsp<+^6f21F}?BR5oy+_sc7 znJe{EJPk2TtWT7g>+yF<_MO!mMu7_Rn;5*=g#x8c`yX__ahf(v4yHQhE6lDbr`A6; zTsl`~>Ww}vDQ+O7yMPsx4`X>FM&7W`joEA+l{~2Lxw2C)lNkK8PwnQ)VE0(}HsAoK z_8c{R_h-#8fH?~7UEOpD)bTPzz~Sme*JlW(>cl~oIReD9_IIx}vp@Z+iTkB)LbYBwC@r#- z01aZ${rE7X06|X3&oU)_$Nx#Gxk0MVRwsd#dEE2*vuzJr18dx>v>6YVY6aRZTlngv zL)fRRZ$cIV%d1oFL!WZ)IxR#VR;M>NoHE2i&BX~KWb@v$fYC69SZf~-cNhd zZ=pUM@;#4z6Y9gC{4>d2E1*7nDEn#gPjLJ@_us*BjH%kVO=xgjFgz~Dtr_aWZ}fky ze}nq)hq`muVWK9YY=Z1FjK z6X!PJ0QKR^UVr&;W{BQjK77~DVF~KPt3UdloB0b*#vLP(^1h#|cwMSLi_K&=@N4`CYI-va!R9@-zrHs!-s1fu(ZFhUAjPyz%9>2bNi zM6`TF(Lfdu8jh8C^IrlyRyO46RFIffqVKDCm{?LQLtsHhq4aSCE2xh;Nn%V;B6I~3 z@XG_5{4OMGB*8h3Adl!{#O)ufln8+$@MCBZnT72jQ|1`>7TC{`BuSGb#*vNy&I>Kn zCVJ%qWKgVxE~tr-wsUev@OVXtl~r1;ViAu7Q}{$sKKE1M4#;r}O3+3?DR?ZDg3C&k zJA%=pq~vi2kKm*TB7@!?N1*J)DR1D>#0Sd04#8p>R4p1z{VD~hLjbQ(hlnM|MfGdL z56Nc@;(-BRLio_*!KVaiIkX{jT>%Mb_xl(K?S7kv;25AuTPzG+kqp5)NupoJnl_R+ zn+(};zs;o?aPWzD?36K!2HOh_d$_dfxNv$T4SNgmc}=kT4h;KAwK_x4`2B8&@B6!g zxMjW8+k!PlLaVw0pE<)qMk1n{Ly|_K8b@qDjj(i##2mpR3Ge(KlFBUD;2u)ig zjCxceQ$;|hL8l(0XGTEiyC8sU%%Ww?as+x?Ma;UUY%5xVFQ4DV zFJuBP6Qw%yr@CmR23rw?%hB{d3-8cQ!r)8+Sf;`}G7{5?y-v%PO_hU2N_|gBU~XOo z5CgM`%5r|DZ{y0B2u|(lb_GdJI>7@vkpW#`nJF*D8?>yDe5C;=0yX*1$xfdE0jQVo z6W`(Axp69iZ4%}ZFnF!Uan;@(`7l!@W?q0k&Bxosa#oZl>6%9^tTA+Awcc(bTtw3>y;>DfPW}bAedDgw| zJWaNKcpWnBW@Yrrjf-O!`Up>}Aoj5>%WbQeG)j)_;F+h!pd_euy zAI5aIQxa0j^w3dUI9wdR$TX%tbJ4CwuROyo%TLM~ii$)X@q>cV z03i^<&{66zyt?O@iabUV64_jQj8R|pl$o+r5GUXPJjyv?E#dl!5AP|LpFz<`imZFH zBNr>g8Nd0nYe=resEBtc3q;?(9B0YbA)C_&hzCQNdFGN>4e8riZQALp-G7lVpwgBf|kcV9+y)`ZF~WS8;2 z6Xq5RfqHLQ^)ikZk^&@?JV&5$tslgdQ?>PYKP(M|=+#%~A&o7i3)E-Nz5JLh|A|p2 zXH7DX5&kPb=)}03kG#w(z3lC%Z{@dKbW&Z)s9TU-TZXA!E}&8Y4~{c3)FQvG+|{SO zT#gVo2*o$ZP+qAos&3w`YntOJ@?1d)TcP-{GDK(KvbOShcj4LbN+ZTbN z;hB;l-?1hY@Lc*`#xnfxVu*JX!M2BIM`@)ntlDV^7?xW z;}V1Q`T*lh$90>m_4VEM$C!2PvGt-gcz?Y2bXV`ZY4JO<_=UFK)xgS;vdHzE?k%Ru zD-&pS+ewKqq{OlOWw%R)EvA59x5wjwdN9z@LmMDv&`T?9m*@v2{v4C)fY zgh`oRk_QTr$;ngdnC0}Cwf{DzI^A-`+y3ylg=)P;tCK-b^^HaaX3n^-|6s9=7O|bo zVg4a=J0)P7&D!9&b31cv+YiHHYR!C*{JW3X_u1d(nXfF~I9gO1e9!Q+aLTgSEdNfy zWx-XvD8?i!q0%9WB`394F9ef>%v&_`TE^q=FiGq*>F=a^Zo_NiG7@WO{yXX&mYGGC zAIB^ek9S_)T6}r51XJwRvsnpYS-pfcYX!Dz?iuLlST)?3>tcz$rjjb<*3sQrVAi*e?j!e=}&vnzNq(i`hpV-~ayEM)uUkSEbRD zNG^D?JwQb&RKgHl<^X7Do5gql^0$RLmjvk;L|d!JNbEICb&|$pnM|`FOOV^LII0wf`2gY@WzqAgzskVC}$iFxrbvZkz z(>j(p9j6&PqGwyB$2%sb+K*NrJFeP|Pdaw!IF?Hv!{C?8$>w)c@!M{JjsU?Ea`Ka4 zrjxjJ$GkwNv3RFh=aZ%QcXL!LD@3AeD&iZ08MCJ^HYFst2GzdrY3;-tZLeEQ4mwrt zIUU70*IGF5Xge2Vo>o_!UUr_Yo}8{tobFpUouRCsuYW#?H@U19yuuQ{xiz?sC%%_( zywfrM*=4d%xzmiajw$98kCEi@8@gA7XTGEkpIPS#RaYQ zMXc8v<^F|d<{1^LJC(^c4fEwZW*42j`^;}xErX4FBE=U=wBaS&&}FFq zCC9$|YUbrH2jl)dBOaFvWR9z9LPtTaH@tscCMdlTHhzQGT_-psjA;4heacl`(Hm~8 zE3uL#X4EV3*H?TsxDd%6p%>Q_L>@xS*P_g>0w&iGXAeniXQ`55g#=;I5)T#WYpIPc z8Psj+yKDK#H%gJh%BVLaC)cn3^5Fh-t);5*s^*O@vxfe{(raqZ`N^B5mFqnsPaWnP zh@hvz@f(AdYM!&39Ln1So^T}!VpF*KK8P~#Q3-*o?|-9jp*ZWHC|szQT@c9rkW-u40nHE(ZDGi zd;x-u1c63dez}7mO`nqmsZRh*l>xQN?zB;>S+k33vrAf0b=Xj<;h*tBeleS*U%j<=Vjj@gGW29J@!_Z$ z8F-tf&_7*nvIAErIP4XLMy2iF!SNUF#|OB1Ly2_q?=ha$GmIv)Nn=Ub2Ah+G*&~Ta zk%Z)yT|A6pMjp(8)m(e9O@kQhf<<%yay#gssHcQwPrPn8>B>eHgdCJs zj0JaM!?bl+l8+WW=f=kRE*9j1_LlqhjbBBNC$xgYU2_fk2e#o-(DGg zH9k5Gw#O;PUEDOqh~dQ&tWDUkutZh9H8!5dElu`A6(roC133X#wGjn;ra}j^!>1ka zSbYqP$bIi=qfp66%r$5a+;DI}R+nntWPd8&psMY}cP!-!+eWZw+br+nMWYEmNx4Fq z$n1*qikHD|9+p&)gNMc0C{?f7g5+vsd1mD)tQub@lAkIIe;rt6cEvX_z00hVqiW}|MEF@N%)k}b+d;90i)7zLym%I04R z`=BEB(5M~k1GzLr$3jP5Sgls4d8o?oS3K1bY z7>A6UkgO*Ucx-nf+ZkPc(!5RjC+}T5yx8?y-%^fb3;T9 z1GN)}3t&zY1}-G7!s%hJ#YmI}vE#VnR1z4()(xV%Vbsaq_p!dol9~@rBtd+q)~hRl z0grs6Y9}6$SW>_v-=wnSJ&gl>#|LFCGlp+sh$uzR-H1EM&pK4U5j8EC#bm$lFP#jT zqD0(H?46DStQ`Eac$Ce}%q5y_-{% zpSGdBB*MR@!pVI=h3)`i^jUYnb7@1t>=0~YPwh$*nc8$L&NYuFvx3tXr)}6Ceg#HC z3hJz%ZZDfFP)VCmI2ils2BSoAFNvP4$?P@!$<|BEpG44UWO~=KePf0s)**OqNELZa=k{C|Z9nM!-4Zr&3}l8YY7eDrwHIgMl8D^%`y58IyUIkQTrJ zCcxj%BiwW*`3WoW~84CFoOWZ+ZOP{2*h9SYN+yHKZd|)<< zoDtY9);c*qa>`b2EoEBX-jM!u88jpuq7d&Pvq>&%IV6hbnm{{BPi?k0B!$N-63S7y z2za29rGw2xnK=^Blebk!E7re<<`pth5{>+D6_BD{Oh!Y`|FiYICuRef5&qBCx9|4Z zzgpi?y=>wQBFp`I)J2Dbk&tU?f~o_~=V+ha1lHt^u`)|sl}&0VeWTTDE%BL+oY_9a z2M~}@Td+w16R>0v@J&nQioQ)DV-{s@U@&{n+kH(eZh-lLSj(iBA0~Y!8*N&Hx? zSj;aQrCdOwhj*gIx_WJm-@~f%K7`;?CZWAX=%$L#=!YEXrYh;;pI@O^{G}jaTL`he zavkq$6(raO{EKzBtIW@VZKQ)Dn9}y%IiU zxZlC)q@1x78b;KLKwIUb^lB?(y|H&foJVUBoy0kunU!W!F=ceUs58si7D??7T7_%Uy^hy|ENvCmR&N>WRb8{vLcR z1Q4ehPQZR&EsOm?BMZB2p#LyVe4yw(tIO_*352e(xxAoPCsIgl;Yj2{%|+OA!cB9- zJh1z=+gABF4uu^EfOu}JJ*GPY%x#q7pxjYHS8OtxyD`@NRYi>24j*swmQ~5Nw|H!y zt07XTMCAT)KPv)gSx?F>3m8hK9#Fj!RtRXObapZE*WO0y2|!4se)A~0FIqAjh%iN+ zPQQcvq2R8MDwaUfOcbyje?Gz4W$%i;yH`Q$EkBuk>Zw_{cIM^MfyjNvy{~x4$=s;q zuY6VZS0){h8YVPE=;RuPD7BR~-}ptl+B>zTUllUiyo~H<_)>W1NO8L@zr~rsThr(p zABbXO4*zXRYnDWuq{1xzsY@w#|GwVYLl7I@b)M?{f#F0`2@e*uShCY6z2$Px(%C?~(X#KS+a2|7W<^rA^EXsta_jLv&0jlfK1yI<+MBwP)BN5lYcWrZ zn7uV=pd5_&%YQp2*>4bk?V`ln^*sFR=Z~l~ds)Q4?07aFrdHNzbBM)*xLkgA{6%$- z^A)|tCnkpU)9grES>4#>NZL?3dLr#IW-K<=IPqwaiD{bAMjh5gFFMfPcmj7_ipAtN zrp#5+$Q7(j=2{sZdi@4Jwfy*%{mqHy*po)i-vmJi>C`j(R5=w*%oy#KI$C{GVNt2Z zX=9nxv=)xy20%*TFqRSrWvk>_ZYeJ9ub1hvwuYD*{Rkrc zZNnL!;-*0_X&kCHS=+XZFieVkwl203Q0=1&;_{?pb7xaFwX)G;geEUm?kF z^}GfQ6O%ynj?1WIwN!%4;`dzR_h<9Ax#Pb}#qU73u>BQLIL2gpx5$mD%~zE^2+);z zZs2O@;o%v|TI%7$l&1JI37SEK?u#_}(a0L>L@E>*IV-^BG^%>CHf|a+5gMd=Ga2|3 z-dxgrc^O@R(&8@ZS7IFt0Lg$<7PhU?cd4kao2AT;4BP3`X28jL zO0+Nrl%8G7$vuzw7YIGu6f)n%RCXx(r#Y9IFVk7La9G{(_~k6-a?Jrk>7wp5?2v6K z8nZg#{QQx8d`KQAiXImVlu#v?52gok4?_eeBC*2noZ*691#VTNifBlncR0_|anN?@ z>y6Y7BQ5C)(~evU{rnm{Twq{9+JuCSs5ZoCteL+BqC^Q4o%gR|%r&={j| zu=EEO{4dC5$ns>c`o-og7`N$}0t=XaS}>z5N%87{o6Qtpo8Uo4>uYoCSQx`gtN}#X zDWr+iSH1=ObXH37YR|IO@@orab#YMa;60^8t=k>dpE+q0R)z`|>L^U6Iry6Ss*2)_ zN|@n762($#@Frgoc*g3@7NdQ2n30B@L-n3!X|Z7k)5~NAlY9n2x*~3SCRvO644~_I$BXi3V;_b$3 z?fz;jOV>coI$g`kP|VWF&B(XS>9fsVXU)7X^SC`c1s(C7mKjYQMB=gK9_{C!BInD+ z=8qOd3LfQ=u@xEb7aiGkTCo+Xu$8FD76#e}L=cpvmY3zQl^2(nSF=^Xb2wdWm8nO* z18i0E`EZAes3RcmKR%qj;qz#v;6FaRLV}{nn7!HhM-$oK zK0J`UHKOAGBRJm0-ZA*!g5ys!`T;sG93XbM=oduH(V#<4LZQ`RbE(uG78h z(^Iaq+v+nI*EvefIo9(FqM8e;=a)=1|0{j?-T#HbactKo?!EHFy>HgP?*+ckwhv2+ z&MYpdZE5Nr*#B`_+0ym-%gDy}y~E?P4}}$tUHvnQtEt7+?=lJ_((*qRS3hy@C+_{k zy>E}6xc5^I{3!?ilmmatfj{NIpK{<&Iq?6LIq)a${lvZhH{sq#l>f5cmCJuy@1uk| zHp+^l@@C%(8N`a$pIOV$h?=4+ddMn83Mx!RD(Z?tI_>dCev*up7q@48R9ULzqpgYs zSNYmkPF++mM^{mgRw4had>K`_u1GdtPO{5Z{(Y2Ux!m<|lzLxZ|HM~s8?D+$u?C5> zM)tB=r>+_$zb0a`kmc*d~ z*P*sxq|S|`>MEm-Zl#Fappq&xk|wi$#kXE8A67fDRqtV6hYD<90ylV=HH-u|DD~DN z<~7i5HMjyB2WT4=dK(bHja0#nj(Lr}y^S(vjeyNYvbr*QgQiN~6avvkUI!eFOk6F8 zCeyJZ-Ld+rvUtorDc%9sqoOt0pe@y}EiJPxqrEMKyls@NWw5CUd8>_p zr!DK>+&ineCt3+dE#h*0JMvue3I-G&K2GX%UiU|%dd;Aw}%JZ zZTg=yySE#-*$t=Jf3^Ri*(c;QXDgjwtb5vky~bc^psBQNs`NRExAVu|-+qCpb=LV| z5W3ht^ccSFA6+|RUmV%`oAde%^KA7PaN-ALe|>=x68picr4;_XYQOpsY3<-oa1D6+ z02+PH==5?Ogg)N#O>%C6N?*wR2l3M692&nc`SVF+^+-)5z9Q z!hva24hCWT9m(z;_-ku`+-s--cTm6AWqZd(6^8E=dDAe%ipTLU!Af4f-Mi!h!|u0-X%v zTd5f#iI&02*=A6iBj#qGTG0n*FOE)rH3bi)N&fEa{dr$ z5(!cxs%qsxAJxg~NQssp=l>$o;elB(Tzj;WRnE$Pcr@-Q;U6AtI+dh;82c2anAe4hvWar5O4cRrinV#fsFjYiO@uU%Mml{Q zHvgYE8aPpg>T>>ybBLkiT(IhtD(6sW1IK&NN0MqbZT~yR-+^p}aobm`vbJ#p|G;RP zD`APNF~ckVt~E^RMQrMSV6>#_9K>h5irSZlm+2kIMTfg6~-FOo-2o=QACI)NT5!($lWk3%xzv_m*BG-zJoVBHtDn;s9vrrJyJP00v1K z_ZB({3Z(`#pPQBl59@F4{ar4e5|ingMC1SE-WrS}VL^tU4M{Z_`+|u8hEw&7d7%_o zb|~=9y4*l46<%P^{fAeoaYj&#{$N^}WT0^uw9VFoMkAI0&wjDTOgb`*z@Mq{Ef6s{ znAEaM`(cJrq1E$beIWDonQ<56;Vm+S?zw4S_?e>2ue*HnFDyYQo*-s3^3Vivd(57> ze5*JYltCEoJG};JB18jA51vHuZa+|Kyywqri2Z0}C6@jMch2in2BRk@Bvk|4&jzxp z-agpQY>^Emk}4F(URIIFYLN(qumJGrQFIh~MB2bO&!mwO*k8Qxy**j$4r-@@`Tx8* zad3Y28mJ%|mPa&>KsQBeSe$EYbB04abhw6yrT z9SX8|>0!L19hU|5qs%;?H555pcH9{r>irWMh!06@2kBq~m zaS9>caH$rL_ma}8vH}e3ubtu;H8sNpbXdFnoB9QQa97I?PhGps{Kf6-Oha7!LqQ|5 zn!FU1ngU+4K9do0j|}tSj>1H&2?^TfR5 zfFeMCr0{=J)2xzfT0}EN)|k5@G7N6AY%&cu#56SxC$>(Q4^wR%kI(WtdNZAW6n>pA znzM`_`VVbRs}+e2QBa7Y6(ZRV4I>k|M2+X`@d^hR2U|fYAiBXOD~d3NWV5_GbSYU` zRsn^$uo>IedEVj!_qo4voK15{4g{9+%Mn}2=z~G_zBCc795-8eU%Q^0rZC{K+BR-P zkelV}{bJ?e;5u(=5>u2=Q)avKVnG+zFCaRqe2xZDeHSZ4cV_fXp%esgbe;fq1nY>x zzoZD5+>=nG>VsK6{9I5dXkN_o0spvg4OK+n-709{B_mo`Uu4wn>1q+5r~A3xJv8gQUc3o3Bf^#MBC;rz?RGv=s1g&5duFWA~OZQ zV@x}Le9eHThyWEZWu+xzy|tA>#tG5YY4P#yXz_HG{lsSkg`x1~uACfsR6A_SaS#HO z2-)p3kCJa#W_!?`?4|YD$bqsTlI`>`uGbptAnkk3$f~LEmX}-TZI(R+zoSts-{Z#7 z*@8jElQd3fJ()hX5|P8K01x-5Y!vfC%Drc70U;V7E1`iVOjkx`4l|6hR#~Q|#26DX zrDwfD(r%1s!CVM{Y83aZ*eZ0-+y;eO1nx>DJtRG#8c{LNa^YgP3KTDt4PD!@aHn&vJ6Z!U`HoDj}d0+W1L?gS}wMd*ZSIOaX zc^bl8X>#L?x>cHHQD1n8GUvK#UOD$is`sTtW=C3EcA8bu+!aQc#^SxpqGj;{I@&ie zBGdNs$$=?V;qE^S0_^zP@~bL6!zoi8p9NW=8=$82EG`(OvaR|j< z>B-P(rkUM!5+*0p`t3y3 zz3$c5Ns)z?mE9tbUW2rw`8ntq#hJfW^2)W~aXZhUlV6ga@x!ThM{3o+?@hZ2>~^91 zFJxCJvY06X@nR3EoNEZ7(&Xd3cj+2ud1&ZMlV@XLeU9R1Ap#v{Sl)|Ys8QUae*0~q z5fk<4I=R04DrZiJebYHQQ5$6?W&tBxSR8zD`aH%UwgbQ5U_kV?yf;kDl8$(3SYFQk zeM*NV(-*A)ool+q zizoj(2fjNo99P+1yY6|{aRbkRKVMmYZ1YyST66isy=$>Z(3Y}ExC|aQu_Jx@1+vdM zxC|xdoLl?<6XK?~+6JlYh9kg~#4z&aFw*yW{*9aPBQRH%&_AY~TKKk2KPEzNzbmragVe5Y=yS zpo?2PC;-mA{gyu*-c(e;bKsGWpmZvD4t(wOy5n~3rpvpl+vYR?o&!fd8~Zy4J|wzL z*zGeI$#WJL>A%zR!*=xb`ej@yoO`Pdj{V7jKfl_OmGlK(!XD2G;W_YNuCs3y>o=t? zokbRZ`7YZ8-X?YhoOpKMuTp=$Ye$7`22meup>Ev!J%?p~2=d<>3V3h}47@5zxII8@ z`}u81VxcBsZ^&ljvDu}myydTeOYDGOj1oZ)bJSPYuUdcqhzuIpFxhw*+JNEJ1o>SB z1;L2@{|ZhDXEQ^jcvcGFMvwv_fzRt<7E%+Bl06_PHqstSHmUGZL}}k1lvyc{v7Wvj zgzz)~0tFVC5R!~SlnhHD)@l#osvsc&MvX!g9u6aqURc;-2myv9(JVOY4Y+3!%Bld; zX{A6bB>0o_?&&>U>1FhXzx9hQ$_))mLpV$aE84-r!d$}`Ec-ZTMVVJ)^wdE5(9+yo zF!?NmOGbKstQUft9SlN3qWyw9j)+eIBA}puuJlEWpj%+){Xa=>=$G1;QJ>nRC1$_K ztiBLyjQLm6`_(XLl11uYlp9&AUwKwSCK=B_Eov~mfA2hxZ>L|=5uzG~hoKe)UIZzI z(JRXg=rM@M`N#Z|^!Aa}h?T|AlGP`W3ql{nZ|h@wORURJ`Cg;X%wy1}K{j1Tj_swK ziJ_dH|Da=Xw|SP3^X#BYa+9q;ryJ6cdlr|w7^esS&>mu^mxsJ0U#EBS&|8m2&m9Th z{vm(MdY{=LxbvQZHOOB-4h1tP*k-nb$P9=1H$p49J^4jk`uQWZ*xp$xAmk5weOCBo zKNuA@96ehW%g>z1Q58Qc`Tlx%n0I7b@#TloOcWOAzFP?MW=R+nAruN=e+M{DiproU z#ZC-i%?)9z4Pgf*WLCb<@`yr$|Lrn`qL>0ueW2$)#Q+*80yh*fx3AP-WMpOZ!!MR3 zr0QylcW7Brw6ib6H(wSM!h>yNfX$H}^;hq5Q(GM|3y}b5i%bgqF+^aDXCQFZ>hLSX zS2Y;rJp>A0I55U~-l?ELRr`|id}!$C5{ni=B`if{rSQvJaV)eK06?#!i3wgD11*1S zmP+ZBc?s)h7;k}0$Y@UV>VDYPrB~kuL4V2u66p^?jG?XcC$3Sa_gG~FA1+CvFpl2O zJF?dqD#vQ63}kc*1Sj!M=V>Uhj1)2oE+x&^snA2{LTTPJio9najbh{>*x_frGMo$s ztG@JAnX*d`_DTK`JFd+(@T@#{xr62zE45l4qqr(;v36BPS%fagvY{s zGL8zrmZ@h4rxBkRGA<@%$K+D3sE;?1fP#SImV9am;uXLuPP`M@Z|WJrrWweTQ78hS z6-UhSICBG<$NA6$f~CN z(qY;DX49*O>NvT zS(=;zvRV$Rq!!>OWvwMgq8^0o+6;Z729Vo#qcTbk0XL{oSb!Mn>(mK|vwvous9wu!o#; z(oYUeSP|ybcfr&y?x1&QfM~@9?{En(r`N>3^UtFfi!&B$Ef*sx%c6_u;sn^@J(Xiq zI1>VBlYT2iW^=qpUNYm=%Q0BGfau*iE+sparDZE*3{-zy(?~a3h!L01JkiTpAiH8BrpH&-6GbXmj8&O|Ot}#ue$v4&5O^?Jkt+Y3~UYYJVZAKWG zcKL0tWSjnYG>NL%oS85^g@<>G4Y4K0vAQ;Yhv(r+yugv;Cpa}Aq%y)66e2PR+=?gj)Jq9^_dKE)*F4z)?N|X`Hj5%=o z(P~?^!<=m%os~$9<+P7ue%k}_yY+YTiJNV1qBLF@r$BKxkDSG~rft4vQNegE5ji8_ zYEjX74RIY#37DB!poQ**MGBIo0LPA$vG#$dg%A18wd2l&?+&AcrOaf-OBLByI_(Nf zO3L#JxPz98)rLQQTOJu$suec~-CAl&tY|bFq3rB@@ZX(Mw$g^N>*%biOSJ1&D;RO9 z8^)U(6z>jRTIGG;6~)@CLfA87-&+*7-lN#dHrSI;*|V;0vBPS%om{agwoaMb%lcvs zS+^dRwZi;m?aE=Z+O$WcwC_6j`B2nm+;`tGc3(9aG1lcJ<*a&~mUR((%_zHV)^?qO#@%w3UCj)=^M{{{wGQbWdjyW9 z`yJw59qT(E4^+nt89TrV9536CzjSqv%l&9au^-8ygH1-v5AT6{uq>xjb-zst%vw9l z44TfR8ZTm5%%>VGbC^E<3kXIIBONE|a^&V7MSkxFD&Vk*WMRWm=u|+P(2I zeTdln>g94CaY|f#wl;b8C|B-gee~OF?NWjYLG=W7dvO63+4P??i>ZR4dh}D z`sj)p>C#H%in;EJWqpp`vWykPi#sHa_uLRs)#MT7Vgl^8VRsQHa6uSwn4O;!gMRlI^3>T*D>D zYa`+X_>0L3Y7hAv{TkcT)@DiXZo|6e*2epGy1+#9{tJL4 z7{CkqQvsjSiu_Lx4wF)J`-=4j72rV)@?3B>cJVa%%iC0vN>{-<@;=xtA>4{}Am?Rl z3&VZD3!ku|yXp$B4ZD$#jv;BQpdw4fk}$=x{-~3Sm$?Lr`A7giW^ez6JHX~$I0GDuoI_ToKA9-z-ku^_1j_m-#>m$z5(53PSf;6!9X zArOXzX5!RJ66Bb)$Iso5!Q3*%HTUc4<9bd?EJx#CDPrntL1V`x zA0uzR+l|2htx^z*sIT&V{lg=bE)SvmKi^?rv?gT!T>*!}E8r*Rv>G@>bKRf?YS7}x z-zPM`*1;2tqwsO};9_94I44gc?T7p9AK^Lh>qCVCwGuo^?g0xZBf0^K4-6i> z(oWD+DXN>DV$-S8T41{wzU7o_aotzhIU+P8OR&cgIVUkUQx3tx5xi)Xqr)`TMU)zm zzH=K&NMtrhR(z;m3u6+yHMP^=v*{6}+`D8+%0dt@dZ{L=#+}gJd=dqb!2{b?isa9w#!L_o|#7Lwx{?fGo*+!~4ksyQiU(e;R5=vT=-qgB%k&UBHj_dFqXXQ2m+!B+(fJi;5#XO zZ;Q0Hljwt#^pQSJh^~#{gEESC!3X^CTvV`>Px3nmjl`e+w@+gCi5o(p_|v1RQ=mqfT@SbA_=uE(6*vh|KV9%ox&a(kNc z*={0mHBJe=N7O8h%fJB)z34KzAhz_A|HyaoKwsA9)gI&Fd;t=sL!)+wG3r3s?v#qF5Q*O+(#W zB&$uvi6QXg&qV-%voL$^c{wd5zz6JH0qKCK;zUjq^c({PoY9DSdTs`Etq>w?2~^<` zb$A23cJ<1hi5-Y_?qYMXDP3KHv%~t_R{HT1N_R;gp?zF9R~8y-CV@1w`oA0Ck^k8M z@1_0E1~`p2%(t=oYK_Amxt=bf^kbLIOPR1|KqG(*DquzrC)DTF7W%hgasKkUIEub) z!leWFiBd5hnn8;R9;V?!;F5gyZd(bjuN!cG7V9BqiGo|EAkhosk@7JtBqx8DBM;Gt zdtb@GWcFr6$$Bb2C7*%$b?eA3ls9>UyogoPj!L!MJ-+CAirv6Y!EHbzRok+N^9?Jx z*3spM4jC0rKjCVV)Awn87&Kf7W#dC6Z_<^}n1XW;$MqTUP3N-qIO@tKM)==k)*cr# z^&UdqQ|v=0-%Z+;zsdfQWKFTgI_fUbkbUV9FMd`w<{uKKkI4eS%05Smz?q^~ zgWp4D_me=5xI(B#!?=<(;jC(TXgaMB1VEx%I0`iH*-Iz_Q4bV_y9bCpd@xcAfg+G> z0z`Mn#3x8K1I(j8c?2^nJ6V3qDt0enP%i~)qE$sYYr*m`I9b3{8HpSOo;FsUu`O^8Z}x^3XWT5CDaAjAbv? zk6xtI&lVYy@4bHOo8E)g{5}lxs}0xG=Y@f4-)J%{>5eECF8*d(qjO3W2u?WAXA9l* zKzj@i0!;X)0WKCYcVq-WRD(CbKQBMe(m*cj6{g7_FIR7*(hg9R1!?l!X{|>$m+Q9K z>kv0+Gf)ymOjM!k^e-a?0CeDY#Jz*I zaPdOFrJY{xFsB-Sj6CWSheq5kP5{g@(SW+;g&=Y~pq_!GcUf(jisW}u=f%WQDD`{N zfzK-3DdAX{H0aAmcwzO}Z5-gh61_=ZuP+#+oM1(G4jj+2$w2I-g9*6-Dxz0$MV%8M z#NK3Wlu&4i@(2=w-g{2g)H($@jZYcVChKk)@f^=bwZq8+P>k2%Bpt_4)A59;RmMCh zFZL0IghcAKAyM%F-_WlTEUO^PTr);3R>qnD$KKL9(+>xAD%k)M<7kjohJ*1Ptx))c z4IKkj%!wV$e$z30!RqCGEq089gDTaZd2(z+ol+H%D+FMZtFkAhv%5MYua@<-@ce67 zeFJIzF2F-?0YjYxOj4Z4gO6lBDaZ$&ay%k)8J@VQx*E+@?i76_?)kd@<`d$%O&F30 zfKcsx10?ROb+uxm=Bx%Ol*TzKC1iJws{B0X?J9x{5StHe_C$bEM%Xd~R!1&N5o-~a z-al?sdU*m&t7OBZ^b?u|$G_aI{s8>S*y;7Ut<_H1i>J0-LP1;}2CBJ3U-_A{erkf$ zQUaWq!&ZRjUVc540Jk5UOTUdv%I!LFaB;(Akne{31Uem7tk-0KQqy0(Pdsa%%g6#v zr{_Mjh{k{8J<@;=dS}j1K`Rmcz8b1Vd6TK&a>)B{qnF(eFdyrOICj9-hp#mok=&Cq zSNkDV0%mH}Ho44}yPOLTV=MSq=4X$GIWA@s;Dh4e0`e^{7cs!4b4e{<;hB5Ak8@pq z2RDMq$xp(!iS zlL)WJ@0|Sy$|i@uje*6+**F_HZ#OoAsWm3nO`0fw7EyyvjL%rJ4yQk@dS=Jeu0u#n zmZ}tv-}Ya^WOE+^r~sp+y{oIh`D_%8uZ`L(zfLlya48`|N-e_km@GJ0S~}m9P5FyV zvv;E_8gs|8*B@DBe!b0w=&t`JjDuZJKm4Y~>5|RtH<~=5s9+5{V$Fp=I)eb#L3rdR z%3IGQvT*_@+UiU`({2$lA+--+-towE-1PhgNG(??S2hk|`N$yAX1>;@HNa5nRU@6u z%RzUhJQ|?EXOh7b#7G}l#)?S8c8tTDkkIb6(e40acJx*tLV3kopI*x3 z$zPjXWz&`yZQ0bSgg=ai({AH-(a_zhL;(}daS|?csinuUz_XJlJ6K?D6Te?Qb(YYM zv`O^0EqFrW?1M{Mb?Q;Tb2$}@|hyL^+UYd=*OyK*A^zTpw3qXIm2-?o) zn~xMa-=XQ4%cT=9^wWh<0K&~X61U_WzG0YKiC9L|u0kl>Obh1RRuBqxJWh3daa;(U z4EAp|987gwJ$eXDuslPr%;!Sr=AtAPgVy@C9ORWg*-oMWBLeA1dG5m32ml#8SeQ&| z0a9wF>?GZ>rR8HVos7>8d~{L)W=>4J(e6|qGFmjuUzoLK1=uN4v$p1WhKbQvoKcx= z){aiyUWd`4oDus0$I*S)vHX?OQIRJak=J0!yw;xR1akmYe84t-;GT`uy-oQEGqn0W z^wK66i$(j|M$VQwL?k>!ki`mefbCoyCU;=0V=F<$5>XDHLShaj`Vawgwtb&i6s4jO zm3lyyXDg<@^RE2hL*s#ie`!qDbS#%L%60&BuxM548I{Ge@; zzV&Ij zEPL!T^UEtBhvoHb^jr23$wyTZHdP|FHC?Z3kB;JUQ~sR;XKxU!_$LQW=0KxT@i+JW zR}P%L%J<*go81+sf-$|~pBy;kRa4hL+`C~ut#hxU>(rquzoHw)-h)!v^OOVsKZAS2 z{x9U-fAMmoHgIF}@ensW|DVc%2k{9-HVB}SC%&Ct zTy5_kHg^vs=9N#(F5cYzJimNW;(-784+sVTf+!Sfb9+NUPfGkri9adv`|T$s{-ng8 zl=zbpe^TO4O8iNQKPmC2DELzpyy!`ZKPmAiCH|zusW$&kaX%^XCnfIlq{N?;_>&TU zQsPfa{7H#FDe)&I{-ng8l=%O4N*oQ=b6o;g;@aK5f1=Cy#pGdEGUylfr@*^~4cOgK_tDn#AQ);641v34cBLCeFV*?j z4Up*sa`Yg_wj*-906GewBujmHBjq02GnCnbG2Vf;(~LgbgKa2)Qguai90KZ z$KOjhD?u}5hhH`L8VuUC)kq&Mf-o)yQ|nbx<*0M+YB+s z%*>2&4B6Yv%*@O&Q_Re9%*+fiGcz+YGsF}p-Wlin|32q*PhU(+Gg7O^b-hY;v8tq{ z(t6elpa28`(Sle4Ktw7+!+W5u8xTE2FA;{&D?w+L0{2q&3-w#~qW8WUbU)JnFzCy9 z4CB3=nC(oIr2o~RbI5eVtMu{r^Kx@$A*Tcc83d2T3rVs02OUH3wS)NQ`$YM91@DOd z&CtVzr7T|+I~GI1A0hp>OtxMw&*zne=YjT0AD{)-&yP{lvw?1R$L+su_h>L8;Oh)5-$u|7${`s zJ?H@4X2DPJm!tO#zH)RG9Z^T;Ap;8W+#WzMZcy~F*oWsq5t~7`{h@%!pfz1ed)NArJw z&#Ldv78xya9%Z8##qb&}Es$bR97Qo1Et?;$+%GF}u5qQTNKI@=%iyZH8?D5bJjNK) zppe$&7^^cWZmMU-7ZD)99P#PrYzdOymXgNJADiQ&2>72F_5T0fs1H;m4F1oI`s*9` ziq!j=EXOqF#yT*Imc7dxD5K~y;6ctZ!G1Cm1qp-w69B*Q?i<-xq`qr|Joy)?7g_xa zsXqxVsYrZ1mtKLUU+u5y;_Tp%iVVLgh_HOvC#gHfORmr;+v0P8dWUgTNM6fU8=y;iYs>E07*4F$2wYZ-kdvdqNdBBx}B zC)doQkWBE`z+l=@Q2jBD%2YsH$%TGD8ENs#)G@J{rc||tUYR;{$G@05_^(rcshBi` zQX+ZDV?5v`qne3iO`ZV_0^ISjRA>L8>d82||Bb5GM*Tj=VOSV4*;8UF%;UE$gTRUs z{fDY=$b_+T!Nb`8L)A5B{!P_M=K;6`d>zvK_woWUrEtK%eQyn@cv3z-)8^u>ZC*+ zN``FPi<;}$5s zs&xv=juc|BmI7~HKABeGf135&Nj@fSk6`sJLyff2h0ZYCYa~DU)kTZbMaA8elBbk7 zJUlzmj6}`UBo933hC)CNp1G>VS^ro_a9LY?!I4-=_yWu+T6Cvr&h!!B3%UbGEJ^yfH8PZP~VX z;=XrzT9s?iEZCf8B8D>KxC;AW6eM(Z6j25!Em?2x^BA_eL?*c3AsVPMHi_3m37HcJP?LWBcx0IPX*!ylw&CDK}an zz@C0T`4OG^139eGChM-P^sbNgE(I~Tif~bg%(so&)#x^1w>aO(V{DiHupX`5sA0{B z*_E3%tBXahjTQSfy=_b|*vlnn95)N(aTVq8HP(#ZYo^+pY1{i~SIN)ZE^x>VJT&J0 zvDfq7#FlR#G>H6>x>aP5TU>2lpJAWNWWP3WUqY?`q21(5xrq$(Cepfz={r;T%P_^u zDap-lIqCyVMbk`<0}{Q1MyrDiFH`;)Q%y0`?sC(Ei39D+OkLu2&CQPn52i*BI);lM zjbltrCv{DTjm#eo>ix}n*&Ez}H0GFoJ8HX0cMRp-#4$Q4KF(yuv(vEf}&JTwV ztVhz;=2p5#?=}xRyv*UVj@-fAIxdIJp04UXgXWYE=Fxjc2AxM=eAfdS+x)B6{kV^5 zVvIvJg~RMDdKD~$%Pp3_9fx1;Lbe~9iCIK9?nRkN#uu3-z@A9_vS>ZC*x@?)8e*(q zcaorON&0%AVEKtm+X=?x3DKIR^qD0D*s@L55;4j$xv@Goq%B8`v+zN$Xwk5Mdq0o+ zRM6L=q{yT^>$IW#l+oGh@WSfn^C{mu>lLE28~QWFucsB%`;~Tk^=fDIy{8N!?w{quqiwqwMEy$~L)n=WG!+iC*WS zPPQ=d6NBFWM%5EUdZqoO1vC0lb?Xq?3 zvgF(jbJOlyr`;U*vIXf1mhftX+5U%=y}R~Riucv3js0+zeNT)%A@lhUJv+Ze`;xY+ z?JD~=@Kr7T^$5K~6u(2I)b%Xlb(7w8vhB5#*R^lPwOq7=Q~9;qxPwl|HSp3QfAjkM zx5Lrp)k{b&`X^n?FD6(^$7ok{I79aD-Nh&^QiLf;3(KeYf(U7v5 zZ!>=4<5&{rA~ED_GGTi(;})0Z!QtbT7v>Aq`uIomL#!G9qpskRHn7X|(-oHhi8x5# zOyu#Hn&$H!nKN$Et=N)*aIvXqlbQ68naq-zSn{3zqH_k=c^T;*j_4e#QIV*X~{=)S6knS0fpuyG5mk`a`S9#hfjCJXzaWAmejL5xQS=0`_ZH=0G)Q8~9H!AHWY z9rxtNGVol6N7JLb`GeQeBOYw0&!Za__s$m__po`2l6xjY_YJk*Rm z;@y6x;@E!6<~bU8f@}Mklnsg;`l;mmlScgKwD=0z~9h>-Lm-fJQAffXhs@L_Lunmf_{yH*8$-Tu5&=dkcLF;JM3<3jq)gM1c{@(BS004XyafVSo9X_bzrUe`~@; zK^-EnO=6upg`0vdkU7S>-VUwJ^>W_0OV7Tc!>in%DTJ5yFgFYlR=flbXcPp(q9mQh zHNh1T!y_EQ0%{oJsi=9o$>QuNUn_oC@a7~87zTw8yDDhmJ6XhqVtY7D!{Pa3`&ksE zhO7o-z@kw^bFI4XiGttnHe({U_d|;k^Z1v<2SRu&AR-goKN-jI*_q~kr3K+pN&OHI z3B-eyWeWk)5C-*%(h}bJ0nG`6Lc|YY{PX~8iU{9g?29mqGpIBXy2;^eZ*tvG4=ks% zsPj^00+1I~X)-v-TWRy78%2uqNsw7#grs$xk3@?UJf|^>3k)U2zN+C{2FE2>%_J6w zd@K;PBrFI4q7Y&RXon!o_k*n6>nVkRWu6J8#YN9&g%ywny&!?>@I~R_0M&93oml~O zx*f*5io7MOHl~;!r*{B&_;4kgYK)VlLheM3odKrhrv23Q2VvZm7rSBI=&= zg<@?vDNT>@%-0}%rT4I}^xlp6i-_h>_Ka}YrkHT z?39)>5mo%qU7&sOuA4$;FaOV5>8zqqA1%VA0oMtjZWDB(s8Sj8TZt>k>o&l+oYTo# z5(L3P2LKlY8_z1Tj;7T6-b}<>cTD20NL`?dEY62}Uk$mGGXxiR9|i@p55%g#7F|IK zsP-EGIH3h#p>2bpcMSpFv}mOGB4IG&hD|li6fz4vf=@H3fiZi5#L%?vFc|Uy+>qS> z_!?hgN=;y9+bSR5Z}9eY&Xux!1Wz6-eEs?dV-<=xjb`ym&6PNj>w0mEfJlsf zAw(|=Kg8GH4|yW*6>xHkKo#MgdRAx2E=K#H8q$$SXox6YUP!U;-Q26R(11iFKPm`6 z$wpcXtEs3szAeiN)scyqz}8`u&%6V=vvHXd?X-kU5i`+~lKEXy7Le$WK?1`$2;R8S zVj>QZR5dvej0(LNDLL`9&>;8^B|yUQX}C|*RT&z5=3E1=(@%b!-~!|U306>O{1;f~ z9A?^M0$%!s1Z0=8(F%ISS}WCD&qNi`LM5eY50z-l&+N0_@E@UaCQIxZDm%~1w2Pk? z7<;*@2p6oJ53QCWE*q+&d&~8CHPy3_xoi9w&mqvQH69>bYhwl?jY!HRzn-XmC$p~j zOmD5}Zs=NbnW<#xJ55=~mWjP?wEO zp8l2glJC}+PFunYt#!_KTw5j&;GMG5myW5ETW2S1KBuN{oNXqxZTif+Ds!a6 zV&)Xc`6(j$K*IQ67x8rYn*$cT(9?W@h{`!aSQQSz5Dhpy;4TjdNX!}lEThw9HIABS!f0*t}C{9o&+(gZ$&5*Vo@3uwS~ZSL^20iOyiV{|hZ(Ta4_b zaN-LD5WVDWP29Boz_!;TzHFbuUVe@aJSg$?Dt+rEpmh%Nnh&17q zLq2V~NfRH7%&Vw)ezcdpveO$$Q9bH9!fxHNe;?x4ayJ%UIQj2~uA$zz0-#l#9NjYNKA}pst`Guv z#Md^MbUsF0w4-~jrBD3?e-?YXuos2{%vceF-Sd?%9Aou$mEOVll_Nni7+iYBHDll?69P6`qDyb3!k{CLUS(96U7Q}$`ExIGv zm7mERtDh?jMpq#GxVOR)9ty|>qJ7{v0cnDXc2KmZ+uYa-%AX!h#5*Y-dXqtSFgGd9 z5EQFsAAXPs)c|nMDW>26U69)>Q2<5&WLrx&UPpkquqHvo3a zql@9{dYplG&xPhOFkN5pU7slAR zjtFZSH)xuXM2IuHGc^t5P6|Mi1%Pp*@BN7o(zZoOWdWRkJEHz~^%y@Dv0$9~Z}3py zh=bs%i4X5X;N|r1(e)tAwjOjv9(}gf!neRoNaY}y=Z=U2-mUYEOwsP_-*nrexOxCm zyjnfuv$2>LKFn#fkrJKLncApCwQ=H9WPNa&EDQ^!1Z80<{|jlN}n{Vg*+Z3r)A zh`JjBU$jk-w>@hB{jSvjMJygkZDT$$7jKj37RK+kX9>l1hh%mT6?>c%TbIx&d)JR- zJ(`3f#xR&SuYw5c_DK%YcYDh;2rJ8AhiNK%L1!ork!*1IEzO{i7O8Y(+`}3#2OB!GzouhTmn|CFZFzn58sAA}648 zN})r{7iCm9z{?@QHaOIcL)#^Wl8b}V8bS6$M;T6c-PwUzjR6+q!9q}=wo(v$jNNvj z5VIh|F)~h9jbhr}<={5rR2skolk(HCyIYS`&7jscXnP z*WG0m3~FfcyQnmQIMqW9L&p=QbICmR9R>%)&;RFGy5_eTem#J~b#v5%7)555V~t9sKpik1~fi6#dm7q*I|Fw>@Dq|5)d41z5aolcak zJqhl#yd1C$ouv!gECoeb#OjrOHl?qO2&%L?tqeHSwmq%#EUgBYg&>@H!j@a_(^rx+ zfE#fcYNZhBxX*e(3?bi2>Nmr_4~{hmS~aSjl?gC3MMO1S!W8;4Slp1bxSq9yEH)aQ zG=Cpz#XoKfux`~_ZueAc|8ClrHQo`k-|1x8ymxW|rAj4fmo2T%j*v z+uzH$AZRo9kxAO5(oMHA3dq!=#kAzKv~0!Hn07HgTd}0YxGbc$=48E+XB#>KzOXN~ zT^CGV?zC;#WZGblN_=73hOOF0Vcx;6+977%rLNj#w%bl3*%M^m7pvNrV?I!;Iyk&I zFsnMWV?J`NI(in_(wjeuVLnOv8wI!f!2IthIC0f!$3Ic+ZKL4-KUd=5{{bxubfyD^B^xdig(`3UCbys9cIT4T>aON;C~h zEL_Sw4a%RmRKy!py?77t48q~jVX@oXt#BymSH)v*aX%#nURdZ=K zHE4H9a_I~;=uC0xE;ZfH641J?)LlQz$^Q&9C_m9ucuWmaA z$G+y3yF@0N_{AjTm3It`dBmi)_K%qP$1HE|j?FGv1jg02_uk$;OfRkmC+B5V)bAgk z-`zjuRMcPpxX-C-NGqwmy16^Qx{1juxqEmjZ|u0Z{?R@#I=8%@T2kW{oia2z=Ny^r z5SI8kBFQr@eRO8QBR0)DA#;3g>HhKO;pzFp>gMU?wO3sFkNd~Dm5sWNzR{V**zD4~ zho8siS4Ll=My3~XDjN^Wq&e`%D3fhj4L%sIO>2`y$sWJrzk2P~X44hTXL?k=XHh(1R=j~z4 z-}SR2OmI{UD$kHyT&k)^Ur`qxrYriIvB?y5M^T)4CsI%AM$mB_Q+(ZT5Jl*F+>6Xl zU4fEMih*GSj}r1kni~@H+i({tPnXP3-2jg?6iuyUsS)E3)`z25CFrU(31qMmMK0&K zD*T2li6HH#d;(nB5Ldp&uoFPWpaf|^7;#uGgD97Vd3Dz%ym`$KwHI4}+vRG1Hb&oW zfVTEn;2zY}IE!C1(Wp@DVwwQ{X=FgNGC4(zd%7Aq20f%-lJ@8Bi}WexUuU-JcX;Xm zN`kQO1x#+s_F+UyIQ7H=a5?n=xjxzkfZ7^i?NZ|;&&9Ags)o&~eKnEOnuj()n1G2z z04g+^%(-3YsBOnnWFEW_JRyBpUzFf)iN>oI4vZaWDh&%i7^)_Ax{n3S2CP>3r zI_2q6y@(0Gp;Rp=4F#dx4g?TI&A!kdk>>_UigDg%7a}&HbHVt@!clIdL!!}yj$4w7 zNs$50p|J!&k^!X97{=@(RGZ>KaKAJwUK{FDBNt-4<6%{h-3(Ze zXL5b?i?xsn{--{cnov91iN4Ds+^wPEwn2M#F}UI%WA>w6Os3w;2eAet2hr4>8et)m zvz4fv8{w^`+*iT-#UfLhP%x|jqCbqKJsOG*kHOX1_uSldlT$N&%b`5<_P4 zS5Frko9N`@`-P)!0C7znnu-*D(&O7|$8mkgl#VIh;dJs~UKvA_xfI5k4cOS!ek10& zKz@#Sc&Kf@Z3NULjCiWo+Zr{Pt39S7H}A@tfU^+NUh6-IpZdjxZjt-FyE7u$GkK?8 zf)cVGqvY8y!sXGpzh=8g9(-bH7W2ohPrT){5IWOr@}b9c13S}7LE_I0qbKJ52s#$! z8JUiR8V^|kYwv_34)at~^VgZce0#XGrWU-&_Xkbg(kiPf${Mfr^|l9&5wE~|qdzv*K& zEe|vaJ4XF0vYyh#qJ|ae*ltYxWpVHmtW#WY)DE$EO|R&`BkSoRL$V=GeM1&Yv>adWZH#zXD1%*87c_9368_!#H7hh8J=gP+m)O0yFd zd8hvF*uBy+6AYc73J`nEHf0(M#g>g{@!!2px}{XM#Z-(Lvmk}8rJUR9Tt|!ZDsjh* z;+NIe$ol;^A%VF_yN?UiuaWimRLl79X?ayiE>$j-XR6xJOGVH3Rlx!_@}X(D#Y|ka ze3ol+H>*>qea@?kKwsx-ICcc?t zVjjA_3p>vxzWy7*k@m_0d#}f}t)yVL`ac2=0m>h@SM}U_usR(mNixO|%-#E`>N~t?)S|Hmx71s{WJ-<^PdbP{2E!G6$ktL$Q19W_!Rq4#Ikx) zEbnu!*x@ydWrv2ZuyIy;OvF!enUju5z( zPO51@%iWD`_uoW3IXm#3Nzd0l;NcwbLi*!nBoGm@rxm@2kR0?%Fs72;tGQ2% zCc@TpLh;+Z0B;~a z94`zAL{s(d<&W$2&*@cH5!R#})J&|^I`4c}<}V--Mqd)F+n*LxgJ+1;Z&WYV%QuK3 zGl&rJpPC-yUz%Q_$FP0SWuJd~ZSc7kCYY4a(FO(L7UW_w6qIz_OBA0&X7#y!AV z3Z9k~9)7z7UV=EhM#labK$ikZUjoU{9B|z&6EZ6U4wV4FXaHa>0I&{zaPYBehyX}h z0MrM7WPL(2C&z$@4Ee3Bhp~+6D5{zjdjIkGTm`|zdXN9HOuM37xJA;jP4xULsD~#E zE&&3dM#4MG{PsNltWxZ069_Nac-nTgiu;USu>*c zX+$-AWG(GGU|w=#GsY$o$1S5gijaZ?!6XLg>uw4;`+k^hotneCBn-*bA-psBYTa$6Z|Xs zo|^Ffg&kXUCX{}>OKJ)X#1zGY7wZA%X{Amf!T=!Ia}Y#H5o)vKdh+BQqam^6TXbeA zsp@{nR8x1L+CwByFycEQkQPE@`Wqw@c9743G9wj;7B#0DaKpS1QO!)IJv5$ePRy@;r9wu+6-4N`>7*y3i~DU)u#<`x3+2B%i=Ftu4Qf&FV4KA!lLZZ&c^>*6Hq3L#sUJO%4h@dZ^944W2!LvIDNV!_4nT!JB!BdTfCke06$seVgZ4 zc^5Bqr^t0z(ciDJ^syE7k(7pK1Gk>O>33P{i^y)?+j89=ls;x|f$z8e+_yeQQ$P%E zy|n5t?dk*6wqeW+R=C!om<@sg4Q8dbVH>yK#ppv4tGz^TFJ*2|ml+^o@1QsGBV$*h zUK+#;?@S;XVz}<$T=KnFYr>M-@k%gUl^i2nG(?ZABdFS$-8INv-65mig*w|I1sgt! z?s72gQoDk834Sb4$r-gK7`gt~`P8;cw;0WsrHd~nz`SUrQfAafU>pp!$4VW=p|-)! z{DDi%`1aN)^RscJ=^hWt;>XKIUSbvg#=Uoudl_?kN(Xy_A*GaeVNT|d9fC`OCts5E!h};m5@)W+y{%Mrlu4J zaCQe75eFe&rtH`Unhyrt6$f0Crn<0sdf-uQ?m>OnLlg|NMoKd$=|kfx8a+KTduuau zZXsjX7E9PIiz2g!g+rY_Gx5el+n6dlH326R0dKuVk0LYQEY>e-?0&Fj{&LDbA*O+iNBpm4IBg3uDHhIwQGw5tP`ifI`TO~Rlc(KMoI`8bP=oj4W<8J9C)*UX=8BF3FiP0HLq95;M8dW>@-a8j?JqM@$ zKA+5LaG4aJ*wmWO+MFp8T%^8;Q?R{6zOZ(^SegVfMqRXI*{;QGZU~O7!q%@}s_hh+ zZVwvmz50G`TUW|UWm~(C!gl;#b{v^@+>w`j<#t#Tmx66}d~27tzwKfX?F;ekyBO^| z?=GVFt{QZ%610aNVx*onSLQA+_Yb=n677%W?0+2|z7#e67E}f&as1IUg`Dbrma_xs z^FsZRgg&x`Q8#=xbAW)OhjY_=hqI4Re4Rh%U^aLyvU$Dr;^2^Ujb=WLl6;81rH0Al z7;NTf<9&0ZeA5}?;9KS>obK4%=}0i?C~tRz9ewi|#Yy7Qv1HTH^W*JrBJeE<%?Y{u zcS>=4>S_vFeQJ6)dpgvE17CZZSW5;PUFJtq#-)8Kc~f>42exWyjxBT6BV8`>ABCr{Bt60o~wEcr= zSEKc(2Fqj}+o1<7YZv?E&yIf{I?G%U1>F>B9-UY|F?EUA9f`P;d^QD}yWvW^O(i_m zwLY>=J~IBfcd2&cMRM~*efk0E-m~eZ^5vSw>?uSZDbVdH%={@b=_!K6=%nr`ipD7H z70%;GM?5~oZAnGp{7hJqisAX0_(>{G{bv%~$Al?!`>V%+&SUS8pSC>5sp<&ciyrGA zo&;h%0-Ju;o_K^mdw@`$L42OaRUR2#9<`G{gRYi}LZ6Gp&r0+?+4G;vn>?GaJ&S2P zOIh}-s;w(Xp7|y{lRgs1Z!&nwN38^qmHael4)|N5Tn70BULBmS#ytD_Yzr4i1% zqSLj>?R)*yYC)G*Bg^leBb=cly#Z9O{-etQ@u&7Hk=9~w!X|HU$I$N#HW;&gg`aHy zH0VDp{dd4#Vq$sBVu;dsQ=iC~ACUK5W5eVkv53r62zA=lC??#4I#mmBc6VHMBYHBmCmiwImRo z^|wMV`A>!ZqG^aE?w<-h0AA4?7YJd11}q0aP?EBSNgD>zz|kmG{0E;8Q#1s`l8YxW z(qR;gB+{$L5CU$gBp7k%l}Z50hA@a&b-?D*xKNM=sXfu}T5&^062{lax|KriT!|7- zUdAh*7foi31|WhdE%FwVbvlU8Pkxv}D~m%#DR{=sDpWWf5eG>dTd1K?l^M5ReAvlv)4?7%6U7QXj|Vs;=F?>E z-vZw0iLQbS{U`@PWEckxBSfY{1HJ3oW0gP_DN%gn zP*O-GaxmuaR}e)@2iA&TGi`m>zyG7+=VEuspL!{Ir7N+=!1><~a$ihnOr(AoO(1)C777 z<&1<7D$Sm<>9S((!jdW%qE&0P1i3_52`k)vfCSl7NgNa`7sM<+LGVwdZ{2y8Wex9d z(wG1?X#geE_)E9xrVysFLchBe9*dB5&%5%ro6#}i_8<7rz0!F#^cA9*z@7Kl7n|wT z;EqBghO5TKMnnJsX@eo!JH!Tq_;-kG2GazHSkp6rCfGRZ9-M_W>t4hkYw!{=VFbV= zT84t#!c;9zCW(cRikV@av-Ub2-XT6X8J}}LW-+duTWT2wV(2?*p&uEFBgJBsXT4T_ zi6J0lTFgLEc3|TDBJs|uV1T8ZI)kKSqV{u8QBJ~jVlxgiP(@6=3M_Szmlb; zgo%0R6OEh7n>LNd5l4JxmJz=({X9wd1?B^EKt;kxe6Gnuqa;5b`Yz5%NCNgle2-oo zcQedz<#n26MsnKgg!#qh`w{oM?m9%#^7uUncw*qb*}LkOUuF8mcg{R?K4?Xa#+H!aiq;_Oy{IFIo-+B?1bus{eFm`9LW1n0Z4KyuPiGpzV)YC(7P17%0CUm{~MiJ4O{KpA^w3B=C(ZriUSt`BN7@ zdu_sHenFcVL;@cnB^=(9JcW@P5rgdwBT5PafU^`$4!{3vjtvF1Ka9AD)F?`^64|+D{b0h%8uu69_{JAD}(1Nf%L|Om>z*`Jqruj(q`@ zn!Qv4jk*3C#W}QtAcPb>&&r6r7K)mN|xPy~A+utfj zb1I$%$-VRW!p56o^^)kSuzueF4yK~At+Tb8GG!((#Hz`Oi*?}13KlJfuNC2psuHczBg2_JC*AzBQ7_gaMvgfSd?sAX;?Bh)`p8#7^jwK^a^o*hh$_7ptfEK z_{--rrOiM6TACgdugj~{G3Aq3ol9VBsPMVaQ+ua9Ka!-^kjeDBC|o;n)3vGdCCvKE z*ve+sP<^jYg9uR8CO|e(Z>2A+IeRi;KOjc3pidH;%T|j zbn-@nc)#2Yug3bNjUygT+`Sj8^ZFJu&k)7ysdYrxQ8N|Ee5>&TRRJ5aRmwMM*V|B7 z$UYK@m_r#oD`O9zTzWtw^&r@LN=+vkjj zg>F7S$+7gCt+6YH_K+G1Fjn3tPNUCc5x1JltGd$3cIFo|sfbp_=8K~J=^DAWQdsu5 z><`|B6FG+ZdXN+V<9$iv0m}1T)Dw)KEnLnTa0du*D0`x2-x$|?E_AQ(I0NyX&yB@wm z*$g7`@;I$RVUuq8$=KKaN3?U9%uA!i;A>@6^p-#H_vQK)8(K$bOC6IeHB*~czD)x8 z&|9p*{84+Xj)7?6Ux?1XFarqk%eyGB{lZlXj3Am*3V&3^VL7Bdqz3!m2}nHwaD5+P z729<1uAX*;^==_@e!mnB9+>KlM!)~<7&Y61aQrjt7({&15I1?Bg#ZIUB!bSW-)!sA z0}N-S^Jb3{ZHuW)EMyQ$fE}{eC08DZf)=3xOMWE#l?LyWf|f|(5VB@i8%U1)4dA7+ z4>h)=Q%J8SGEtMZK_*d;EV^YH>N4cLKlW0OyNZs;SA-DvM zx!ao2LIxAWumCjJ9H=7F<(eF#PJ?BYek5)na%VTPoZ)*Iaxup7I~d@-tS0&34tZ8E z0{+gUXbu{^;ZX+3CMXw^I~!jso!S*sjVS0*LH^iui*|8$*Mp2+O$0Xr75mlHKV>6t z8)Urf1j6ebD(Him$=6j4-xI+CkG&1)cgfzL?nIUXNs7pN$H|$PG00&3$O7`1oyaI4 z0Z4*ISC#pcz7xb+MhyeI`1BMdR5|c4z;U*1Uc?=!-3%_ZerUBEPzf3=sJu8TZQU-;`5ziYBAG@}h7A`#+?nYIgn1aSUbVBc$< zQm#=_@REXXHyfK+G zil97UY1Z#T?WUNK5OpZmNu!omWQAfX|Bz)(PGzI!XLI|`HXy^6yV!l_(0LeBb_G)h z-1y#PF-ORR27sihNTjO7v=G)<^eWutAr@4q(IhBAp45AuS;5XBY2nNzVW-Qky&`VC zM{bZn_d_&~(F_lIXiryCtiuxHdh<>?3wv+@X!?ka>b-AcN&IaB%gd1|?6Db!#nk4a$=pCQAUPrK^B>nqE?|FMVLjNmX1~$);?HXIiT3 zvCM#F*s5i|(@-XcYE~6(wkM6){=6JSSrkec2(wIRx#VlsscR~I?RT9r>M-zYYyC4W zZC#S(cfm75$#U~Dng;BWWnG4PD~3o>h9z1^$+B}99`ta7Q)8;gd z<|+p9`tqLP@~G+Zjs%VNLk5Qn2K{!1uF3K)@{w*>#xXob>mBPf$ci#-#$MRizFC+) zLB=wrb91`$RJn>~qlyqGMpgF;{eX&rwB_Nd&_Th_;aTI+0QG+S^U);6(Ow(J4#u%j zMvF$9sp*OzClwRBFjH0QBM+j}G3Qh4aFe&zGY>YC^p#FXwl-9ijKmiuQk5M-OmlL< z3%#jxrvra849iL3%X!O7MHgYU7t7y+)*6>qq`)@oRZFW$7p;pI zYl1kN31{m8Nt<>STL~B2PS)F(wxy((gV@YF^mgNB<$Hp*`?qQ-s#OPi%!mKM=Y5%v zLoN?K799V>=TD2O{_^=v+y9KLZ}#tJsazaZU0yO@JzQ$WRb9bWU!$O zU{X$2dELPHY-xSl>elY|{&87DdsR!<^2W~M`c`Fg*VMvl=g@dl&*0VVom2R?lZ&f> zr0m|&ss6E4V%nYTRs|B{9O|6=f)uYdFP74?f&XO+!|WoK3GZ@&J` z*T4CC$GA6N|K{u8eEplRfAjTkzW&YEzxnz%U;pOo-+cX>uYdFP25-Lp&DX#A`Zr(y z=Ih^l{hP0U^Yw4O{{L)WUuVd7e!%>XudlNiYCmBAm#_B$jvrF|%h$)GGGK&Tv`l!s z`g)kmsebU!;t=9jU*B>3f~l3LBF33dC2#^<`kA8}c_+mo`|9iQCz6WBilphSHQ~&z7JS4_#5~|x| zwDxgjDulc2kuZUPV`X_}(6zDf^t{t)t!`=2wRr$}!BT&5Egj~ud7jr<-_KWXJ{;P1{9o+d z1{jf+?(SwlL{hptq&uWjNry&Bk&*W>R=S8g#2T8`2bJm_Wzb8^o4wm=VGX?L4MSp*H9D~VP zMEbXL`blZLzr92i6KiU7L=w>25V?8Uwx`j$|Fj(?ts23;HkdW}-RDN&VH@&;DC%T8 zm^PVZuN`V5y8BWD0V0YJ+lC?8k#^r+qSt|x*S;$uf)T!Lp#*j^Yl1J$VI0(X<>(gpM06cgfA~Fs z^gsAL4Rc;6A6|Q{I6fO)C#|n2)qmFavJ&VPU7}E4R=QS!p;s?z#W3d~%(5VD=QM^$ zyl1lE6uVt#=3-*Cl544A*qWl^Y|vj3;+WM)NV4I~L=-{~aniCNnPli~2~@#dYR9eX zvI$H$$tbZYik^ZTk`>~C_K|bED_~WEO1(>mPFgU6TmJ$2v@keR~)Fm9vMV`^ZBX_szb9 zLs^bIDoqO}_wTYJa&p>=GKtXs=!?FjO{OnGaw!I~2}Awa1}*8DV%c;9dGGKn_^I~VkwKFkh-FH z?f`GZP%mB1;30ETa8B@lbN8@6@SaQQzrcGjrBHRH|H0iu)NA7gz`Vmy#p?UP*_0ue zbLR&e=#*yobn|ed+VDO)WEz@!6d!JdGdkU;1jvH4tA(R+MG%OiKLK@ZSq!PT4ed04 zyALkeYsMOEf0BMm8wzjP1E?m{K2kJ-3YqeXzJ4sJ%rC$FSV{ z3C%)xp#4>g1!j(B?v#k0WrzoZ*yEzb5FsW{07uT@$G6dI4{_&2Amop6Pmy^sr&Jp| zRqD^j;MSZ7=NX=QpU%1z!ThK3?-XIN)Fkkb{r7BIIT*ZTAIID=&iP}U-0v%eQVC@~ zmZVyIfC(O3F+L)n8i0xliAD_=hkdYz$99i5Q#p25tH?2>?i!&yb3So*O5ofv^2gEZ zsk@>Ba@7bu)h1YZ$S1#prcB9U1`z?@2=CkndWL?y99DTrULt%I_wXbofG9W054|V;H@yd`O{Kgj)4XriR6J5wD&rYh%zbz*JXK6Iw2|ACDjTz0r;H0Apbr1GI)h<2+yqU<^yi?Nwsv)4d?TQi))383;ggyvIjGFp*SvZ0 zY`}nO-T-`H028fQ95pN$3mFN+sGS(@`5|SP5M+oSzc`(5z?Qx=OHV&_lr=8QJJZdx zJhh~bvy4$@D28NY3(tK{)h_yd+Ze9dbZFYLTvl^460$VhY*`A_)hfJ4U&FhKskDkTz4*j)2FG_5eR>t6wGl+X4$EH+JU1cIH^JnGletx# zkv|*C^_nNjPYzTG!ZtYZnWHw9@NXv_oVR z>$_$!GY*Ayro?q5{dF40bzhBT=IM3z^7=Txb=C}W>h0w;JaaCNGR~fQo_bzBe)IBI z8#d+})^+Rr3jkdYUleRC)ooaJnLq!zAa zBE`<4HfmEwdc`blbD+#ZA$mp0>bqi(q007V7v5GJ(iS&`-gIyNLE|q+r8aedRC3*%G-VVRy-Wr)&*Qv z^#ax$#&!i(xYJf2yS85~TV>o^5t3S0r)@j?e|H~%vN%rb$0?^?`u!h7#Y#GYElUSG&=Vu`K7$X@@v z?U?0WqR2)n$F~fBn=EaUYzBdxP>%cp^8$XeJpL{CL(S)*Z~Wcf?8WaFO-GfqmX#V= zS4{7JE7|wk*pH_;sHBLmuIH$1<*TDGYZ#fV*%tU_W!e~OVVh`ITfXgYCD&A7(zdKw zuWZvXZPyMsG#ozo_|pE?&|a(Opp*Y=Pv}-}sQop~q4;O}FHMI7*Ga?W;8Bh`*pQXc zxVF`M6o(N{uo>M^owEI;)u$;2mf2{#nI6VDf}J17;DuI$CI6l2R_nzA2e*qOmyM%# zisRJ`p;n{*b!EM6$K?%vfgK~=y$s_4>ElV{W4@7Nx!hx$qvMk$N4cMlisUB|EGM&= zCkLTcQ_3e&FHgw*oXG1PugcALr|WME41X3lJ%8h*kbd%ug8m`Y?AP&ggkD7?!ZnyO z82DTf#aJJ);SDnCskgdgw7c`S=F|B^XYoPjl0)aArPI;S({v! za2U_Ztj<(nCxl5uL^4~g^)9$NE{C2jh9hTBR?cef&sYl1K9ioC9J_cug}LS!oZn}h z(QvNP%2@qSc4fk9*0DeDOLV;&aTO^)&t5n`I6enpx#`!rrn6iykzSyRUXc8DHPLtT z|9J6C#m&v%ZN1!WCc_Qf=H{|+5&Cc;h<1s8a>0*E|Lkp_xUr1X$tL4-cT%g9S8XRk zG7i#7CUT?v3T@I#jFvL*-4nVmbvE2Ne_u++xT|np>5F)i_J|X?Hf_i?P^mWCakIp_)~fKZd48>fDr@~) z!v4h2s?hQcp`oL(jkAoala2=);SDq6+YKd8l^@p%%5OayuHW0gWr3yLoC@FU_#Mc%&qEX(+jc{Rd6iID9=BtY{Pu2v!t3*>m)P;$ zvi7?;ox5b6*Qw9zJ~Q5}q^R&ek)WS06}5pj7`4q1>sI=P-3Ii*5k0ediX8fByx(M@-vXx}qtUOq*QulE!{d|T zONYZN=p$=zMDH~`n>IWTgp4QoMhN@@$o}He_MO2h>ghFI`~r9M5cR)~ep9FKpN<|o zgx3Uc3WS_-z7G<3A1LNOh2_0&oPPk%(*u|^;dy!!2pS%c2N;Wt_$pWk*eUofV(o9I z-e&iVwlDUNueUwVllhyc-#g#zNaC@cuzx{i2B3u?K6&$wH%B=Goq9czs3X1yKr6_T zXHmrf&(n(*!+kx=bg5p0>k(|f&T6W{EEjfaQHdHwi;B0FKN zO!QF%U%^T{6T(vtg9-M_8R} zi0DFWe+uO~j59UwWl;QCFV-M+P|NNe`y7zdiXjb99bc6SAb!r%eU!F#xHD0xQQ^2` zae3hHMn0+4zRH2yg3*aAH;@&vP5qtp64R*JbFqHoZMsSu>w2gu=0{VeoGkTI`1BVD zMJpB}W*%#bO>7w%uLH0tvc%TExl2e7(Vk1n*1j8e2GO9>$1R9E`w``c)ADb2h*Lt` z^#Da>)AM#@MnsS(*o*ydv@y(Uv$@*fQ(PQ8uUkzs*=H!H;>_T1I=WBNh|JTW8m*f7 z37lKK*cets;BF$sbZ2ZdifrdGB*b(VY!dn^LWmDSaMG3*(Zq}7^tbcDd14V{wa6bf zxi<^NA?33)ve@!{Nf{onS*E;C@`4%}pEJPicp&z*@kGimaeLx_Ej^WKaZx^rc1m$f zO!XV}Ld1NRSQ5k+&Z-~}J_glisAX!n@gV%WVug~{kMvcP9&g}{df+{Q#85_li8x2# zrB#|6gMMkrg7?p(=$=4UYV!hvx1#k_r^Y{x`kE~SlPYl{N<9bJ4hryL*Q|#=&j9m`XZ3)avj0k+)9-%~oK&>#~kbL!XP03(D5giR_SD-|FF z_p%EBRHKpr%i=ui>taseQm-mTdjEiwMFH+b73PXP!waTB{SXX6;G%*_hF5cVa~l>^ z=gOK9#bNq$1s{@TVSCie)1Qi}_OV~4f}Q2VY@aoO~dZ*PC$-dsgBbVj1c14&Zjy7;8i5s*{Y zi4wfAr}KUYCtV9~ulG}r9Z{s1YCL6(i8pg>vDtKvtVPj{ry@|Fl|a%21X6KHrG(@Z z@V$8b%?i=h7u11BFN_NWAZ&ps`(G`7x@&J;75Qd#j+1p>|x`+0R6z26Wtop z+-vfL%VZTJ^f-#IUt}4UK@Z;)&2$o^)U}kE=tbz0j`K^jEIHg*qzbJeHdr*Wb6CYh zEVi>G@wXW|8hmIH+k2%`JJsT-nNmU@49)`3c)W_z4S&W2k`(A-j(&;p$|weUiKL#4 zh+k|H!b;WG+{%n8ftv+E=E_2Vp*y!DVbd)Gu(RNrUQF)l(%_zrsHr*MF_+}fWaZVn z&S%r*3KMqN?=W?Bw>;=vDqqK6@oZAJehK%B2wVvmdq$16cPdWD6#z1y<-#5L=-Bvk z>2%+*nG%KDJ50hXwDzXuEZxaZoD71GB-ZwD#R)-PG)E*Q>Ht%eh0J`}V&8a@9jK0O zj=r9pgBFZ(azA^g+ZUo9Xu+F)r)VRsK>{9(rT)a-XTjn|9AqI4{m=oxLyAQp(McZD zm~aLN2w7sG%Jhq0566*Jba?* z(t#U)a4hNiCJgqx9Sz1O8-SH&5>1dYI9SH5U{*&NbctHpBgw)omD2+NGnMuc88-DfLj^INo(kk&-cqllpq(UQ6VLq?eNUY$=ov6&DDbC8|%SHV2 z>)_!xnQ4ny{ue(tp3!~&!n11~8ox@#koB&+#@)OW^fHnvY^}y=B-ZkIYW54%_V+o$ zM~L*$`Mpm5w%;Tdvzt2$W>y!8JyC9-o3<9I&4ro zdq+wfFMurO+vbQTTNp1si%(qMB$94!HN$G7-zXnCQ@%Woz5$KS>3RyH$t1qfIa;Wm$ zP(`(;9(%?C8s8gLPg2x}0#qlz4I+EcdLlZ#A1l`K0g9)lP z@CQ%~2?ip2)!fc%NV&V!cg&25Y?XDoMX9Vy)k(G@$3%JYB2z{z^OA3A_ORy#0;M>x#qLtJBrOU~5)Re`$d`duRX4UtV)hP<3lqGBm6bgFf6AwyQ)w0f%$)*tX z!IsH}Wabl!V6-7IYX|Ctc4|3vrSVczSp$wGiu}Cen1kD%nijAtWIMBy)?3qzzc!V6)yvd45M2$6*_N8JZY7lF)@s^ zOpLE4)ZSlU2oORB8X^``SOBF&>>37ak?z=pzCec*H)n#_j7{1EpqNE#v|7-S^}~4; z#*wl}=??`ZW>FQGU|X#xI?&8fQ2>zvy?!*`*|V8=fSYp5`*)dJ+&~md3f(0DWEGIg zyo%_b$nUtZ$2WR9xsLbIoGm)%S)!Rl8cj+SrP)^+Rodo8Xx&iddC6J#9gLHG7{ynuS10ntU9NL^2KuvA&}EypF%Z^=m0*mJHJ# z%jyuIDk7Z(dcF*iCBpfKm!6^O(uBIMuVt1=l!1#+NrK~pO=$(y9Rwvs)}V^>GzU+h zLiiy#vp-({tagkk=v6$(1{l3i&f?~nnLuK)j61RnX}_qs^VBbEgS8p z8gp#1UiT5s8CbjScqh`COIylE<0vR^uV@u?8d}+D&$wO_$$r3-^RiIe+?J5Hgj6Rf zj>jvl#h=X<$fjw^muV`rOj^TJ@bDHr9ixUTD5swx=ZTGqm4*at^~VRV0-+ZM%GlPu z#D(Hig@{%*p|M+T(mUQfOl}{8Jx0{oZ5cm!G8+2t7@~+76%4*Z)AOpf^4FX7r(n(q z&kwQK*7VhsjhZZS(yp&)do=cHG!@u&WzzRN^umzzNP?k_H=L78`Kpbe7G_71-9(13N!5k#v*MGbZNAKpeyO*~+26^Deq#(ScFQU*68soZ&LZ5%;!4a? z`YNo{N~dgOzf4`eym7yLgeB#kCFbkC1BkV9|4j)2Yfu6Uta@UqI#i+J&2&xlo7!q% z6+deoOGzEivwAC5O-)u~CD!b~gE-fNpig!-A4=l9?Xn$9zP~!Cs<$hyW^KM+Xl5vB zRt{^NE{SO_Y4x{jVM;>#v7}B$E$tfKlIT%A>*S)nLWH{0hb7-PDnh2%;VWl-Cm^{f+{3C^J z%JZlP?&}+eXK~qP%kAdg9C{TT>4vi}bOy(Dmo1LK*q5fumX_I&ySc z*H4!pJ?80&Vz`Nus)#eWNeZh-D!54-sz}?o$$G2EM!Csns>oNkDR!zTPPi#=swjVR zQ=wKx|{vjnVG&v`!pgc0IF!W1q@91PyMj<3VqqM$taD4jg;=24>TU+07 za$!Z!@I-ZU=f~9iguK$c%7*_p-1`6b-+Ywvk5c|o%6AzyED>#x->!u-mOo1QM=Ad( zK{!z+5 zO8G}A|0w1EkCyV&JmDR_rrXhfO7s_|f@xL|k1u~p^xoZM);oz`;3azAR3+w5LZove zesC#Y(QF+8O6h#h50~;w=C26t#}!>K{z&;)e!cj3{`F7XEw;+PrzTLP+zY2j-l)N) zyz{TxT$OYgr3$!|H?l3}#ISo&p8}Wi9^#f5`vxlv6D=s7m9z@`A=@&ufp=H%68#}r zLu3BXG;3|Xu!A*jO7{EL$~np^1Ia8O>MqL_=8&_*!!l69qqT@ z=7gQRySf*zt|OYx;8MOxZDsQ4t?VYbb0DGb^nS?mMpU?zKl!OSl#%*OZ4x0o>Lq^2z@u1?QYW(gaOgLzT13lcg^si zQ6`qzQkD1Hkv~$tP^RUFFqZeUx$31Bz25|3%jHzV@- zq1bCtxjzYN^R4)`HE+}O;%lzTgAa)@piidp{7c&}{+Ru{2~O~3SH;iodXzsA$3$+X zV#;2q6Mg_ji0BVj*vxCZ|8+A{By!+&7E!oT87?YverReY6b}S1V^wP4M!S(@GQPk%D7N##2jYR4o9TLSQ z>wu+-kY0YhOQpguB_$Z5Cj6u0b4Z{a^qV{GF{9h+Wo@N6I_nHVKr*GnJ`50IS+`0ZJ<5GFADpKW^P&cAJX z1i?tLm(VVmW-4L(sKC9Bx1T!!n^ga7(|i51O)otp0uF|17;rO!`Oj!26fPx}5B}Yz zj}ssZe*vW7lI%7*_p6k6>JIPEknl`szO>4>N@+5DG|7x=5=U3#P= zdz|sgY<;D~^0Jt2gM+^U6#76T&f>JO0kT{`5?^VT+TLlT&L`FIFnyXQT*kxXJH4BG z10tJ!q2%bQ;o`HPw?mn9>r#QieU-ej^Z#`5kdTMo&^#IE$i5h|#t&)fs&E%?Dm${* zr|vEpYtbL6(REMV-^kq`CD{+T?1M}B*k}DBK7DDI{h~3H-}5J5luQnk9aeq?*A{IKRN@WdbPdpu{wdMJ&gI3C25a31 z8y+gEEx;PhWl0b60h7Fq@e29pVv*Gf_0U1^!C*^dZihiZZgWi@n74~=$c3!74ewK( z?f+eme(b;W=wYX;ilOI<|AUJMsMO+ilkxW0E7IdCSN-f_Ud+|vfsSg1j~NU%o+;9j zg^xi~ci=9*YGm5xzqt!oOTR@~>(X4^>Q8wZ@3{$Wz}kBjeA{SOzfI(8w%%jBWH7^FHMH+BPe@uq)W{JomvKV1CT_`hBJ?Ozvv z(cIr`|ATMqMN6JEQ+3*(B>k5k0bezO`o^YpQwqFNULpgEvQr`|Qv$zgmc95PiLWSQ zIVrE9rI|Vo@6nr0rjgbCU>z7A+tU>N)1yz4_eKD-Xp(R`)tTh)Y;c*h|V>!|4rk?Crv_XAis2Ye1-z> zdji>GgFpRA(u)^QIV^%+*`(1K+A zQO8cw7P&~U_q3}S-H9T|uu=6NE*}4Adi8QHbE>Y~K{Gai;SCzaisF3klv=J*+}%~Y_ITQ+m-g3((=%~VGfNE7wY5A3fE=?s;&6qgY=?EHFFv0BgX62ph(Lc@nH`Y0(qqq|n z89Dm67|hos%s=s(3;AsDF+>V1FY;pw2_~AKS8v2;tZ{OKkSx(Eja_lHdSc_^~tN8DD zpcKC|;&X8{^oAu`Yj;>{)L1VJTkkpSyjr$4J=l5AVMF$E_mq71y;U8=YBL0-KG?|m zgCqAxN1ljQtH=zlC~cl-2CJAv-tcLwFsogA1ltS2z3+5;apg5`41Mv^mdT+UU!-k5 zS?%%E+bZVn5iZ!u9PgPA?>S@cr&91GQS@b^Smd=XW{2|SCz==bEF~CO7BRfp3b82g z=ljZFURKXmE^S*{{-*u(4I0XUH^)Jx^kz+gSsh1R6~9@7k!d{v-?t3YMt+m;$Ka-I zla}Mvq#nCkWwv7NZ*9xqRt}S{g0)-*`}V{q&})e{0{fl}++NSAJ_dn-X`>-!*5U1y z?nL{9)k9ci$l>U+*fkC1l?vJLha4<`P8W`W4M}hvU49 z73T6r!8OPJyu;A-F#4QSr-pfSpZ2X8OQs9!+d4)@7xuS`Pa0gfRMyC_WH?9Vz}5zA zGo~Dj7lUSQ@5_$_j2-wmkGS7oP!zZwF1g8#xG8&HXw+OdAG!5YTz0X!tHLgL2;I6d zFQqb%q%$vM!rWiVUq-ZEqF1;J7hZlJx#V4TSAKqBBXk+VcC`k(B*D6(J-%#K_PBDm z(pnLfqde7t?^S0nPNQo)31$&u6ciZW`x=ya>EP7hnpEp%?B*#d#gKU81wQh!d8}L@akMTB0RN=kMZ3xz1DgR#nkCaCh4B6QU@w|cZ z+(tCq*7w}H>}*Ee+(zGADv!SN@wxmw${6?7<1^~rmEv8}bK}GvFrn66Pqf#&=dLN7 zhcPpEbOc^1J6`G6UeT1Psm3{(JM$55z4AGW{G`1FD821D?>~upe|f)BlnGAl^{z(q z)|t8Ytnkim^DeZWs$4m$Lj76&+D@B@QjI#~@P*ei+`9d4Q zN3bBHndDzre2h+hrv0Ju0F^&99x~|e3%ErndJ;mq3Q!Y3LdjAF^udmvhaWS7PEq}u zW61W%K-!Jr$BO8u&~Uasv{;6^0I*l zVsI%xu?hG@18>UH?V8FbAm}!_gTxs|062=w=v+D367n<{8EkJZnYyE7;U)V0OJ=x~ zFO=4jzuKRm%m7_y!CWNs5W~2Ubd#CDkf-4k(!!GiQ>?nBuGt^c>~74Ln!H~`v-^k- z5`4mR70QE8RiR*#3Wn#MRzAfJ6yORD=V>1#X8yS_@HPaEC>`7h>uG~CJ{^fe$OfPuson?pD419R~=ng~?xSsHj?o(3M6 zZ>Lj#4Z|h>TbLL76bYUO(Q0GizK;6@-?z$;04IyX3-e^|fwD|u!GW?^WbUD|HU^i5 zfHh>*^f;v!T`L*6oI9M)05+Nl0;2WZu~cC9T`VfOyku5@OPMXh$M4ed&qs*2zzHos5K~;2=vu3z6vpG1Y$;& zs`pdsyPp<-eFTe1X!2cDk$~M)pU`v84tZs^af8c;ptklG!%t?2+tVFH{0b$!a5vW^ z0ng~1Co<(1_-0K>@pe5iP@bT8X%nW;p5N2`pINyBRf5IE3&P?gXUY4u2c95c>>~*5z&o%Td5~BcT?Wf6L25@iGMno5gmsV@8K3Zyj-AGMEt02 z#p|S0r{z-oKnnHOgRyhETPumYjWW-buINu3y|K;)ZMZjR1 z`0%NCdYm0`6>qa=t9NFz+(ZO#(7CDlp5if~d@^Y_Z42x}Lp(*(MW;fg)zWL#6(|1q6z4bIF7CFkEBKw-3=r?t&}9&j}7~=u)5(){9VB8 zjX&O(T*;ASX+W!Ll8+EWJ=ccEr zSf1pWnzrQUYv;fa=~r|hgZK|P(b%8Z(%2b=oav~LLQ7^$DJR!Ngb)rSu+x;C{%FnV`VFrV3&>UE_U*)A1y}JrJc*?1_R&r(_N`ka{%> z(S=Kb@&WMD`IS-{@I!&<;0vY*Blj#iwp~fclTR`zRIoTeGMy+X%Xt2XYN4Vfi^^-f zslpVF9QC?4Dhr8xnbMM9F|(PcFwcilSrUq^j_|cd<&|TUw92qO_A}@Ar}anb%BN~d z47c9Uw5%sY*$3Mh4<=2w<6cXK2(ucO@y&J>*i~W6vzd>h&GxBJS0*GdSxkMN8%%Ml zww!0PJ|USON9(Q18>ZJ+@|k~Cq+L^HcyuE4bYYG}zP>i0)FA;lzkmpCXt`o{q9j~g zn?U{sUD~rVv|HTh@%YX%&+bNfu(-R-{~bqN4hgMNjWIqvSRkNN-1&3rQeKTVj@lk- z9v3o;W(S(iYRo&^8qzR2F@&ckVn{@*5Y*G&CKv*h7y`O8Ag26D;{Z38$Ef+z7L`E9 z$m_}=+NY+4@jCPemla-4pGlWwFPgCXU-@dej$-fpf#B^gwbT)M4Nw_zlf~Q$e=a`J zAZnU-Kzu7DMSA+?UDxK)nO9Kk@>Ts!i!jBB#JQ0a`lKwo>@aorbQ&~SMA|R9!KBN1mSdH1Gzt%qKoU2Spf_HNOI_6 zC}wGT#H0D0G~Z7@^D3I9JrMB=d4j@CdDk%xpwvtw{U5p6;s^jy#`_ z6Fue3Cr$q>^AgyyZ&~59mby>3K-hK<+u|g9f@p&9?6xMWhsUz6IbP;_7}e?7np87M z(}zfI0D}CrI2H}%{Vb~J{hm{5WPPy$Oivtx;ySHyvEMT0#ncrBa44@qH?KRrLhA!~^X$}&XEv3F-H%)(S(Mu$Af25{$ zql=q|w0JR#!LvmtcTf^&o!%zZOJ1u{9eCp#iyICFrXSb4evq_hcWtH_DEE>~`E?kb zL;qi2<@Y1Fw$I!QFTYlJrsO=-yBfPD@ z6l48<&aYeP=tW3tu>_{cZ}H#21av+VvPMb@YXRpxzaT-H`ST%E^*(o5mKkRWQcrfa zkMDZvnOqw)Qv(p3vm`1dvDv?;ZvkDr=1{L4@`e^?2mN2JZHR3 zmAD%4+SYi_Hhl>huq>W#0?Ay7%KWXhh>-zZnKZ(Rqe9eMk;tN27s#5fqFN(cLB3x? zhid;8o_+Qzn{x|Y{7?~u3kA_+-){vYNN1sCq>@Pkk@Z$dtXAV~jfiuCIXebX{i#W} zmr2*5Pp${aP*zs)jMwNg(I-|9_|_7xsO3OdXIU$2!X{WK*#y#(I26=?ys_mq5XPh! z&U`z{`5KXk6dnoSgZx*aZBTIyhh%C0&vd*1ovRJqB6T?)pk5W=>Y|~{C!x;xt z(NOBOxvl;3;oZdP=E$XoIsU+U$q;$J@G7IfadN^s^K}je%uJ)!49@BC8mW0uHt;Ew z*&Wwt8ck?P<~fe3`Lw^h^ac`)lRfWQ5LTD0`3~62UqONyV7dnnze{e!$*L?BAfDx0rOu5$ViiBvDC= zGOGgQ$!4vCjp#gx>5Xl08Tkx_y*IJoY5S_ztS#znA1q&nOfV%(F#9cIoV*RGx za%qRrVwM{dcp2&5uc`!WzR&8GwSqU(>EuJzhU@6Wo9TYLtbQ~xSLz|hkIt7o+!X0q z>HoF)qBu>pnpDjwLE9|Pu!q(GxJZHvja4it_#pWP5g;s=qF4X93rAAuSH1*xfGi$@ zqG0A~`VfQHm*oIrjdcsDc={&O_Scus2}Ojsp#a<)x7<7P4a}^az83~{6vjkj#0Cz< z8Udwk@no)2sB*SL)tMwOtrc1{70)muFl}U`H09FqEE}Ro4nD26c;)U6-2*z{bk?jh`E@+ zvZz?Pu)J6)7yD((}h`Da?aY$ zVE;+T-bU|m$mCG!4I4DH1bWTdZ6wv_%G#?8?X$A$_hjqzXKT$U)%;dkQ&2inS=usC zI`ENgxRrH?Kxc%-el#a+IKyyk`EU?+`0e;mgQ~0?ll`8Ey(oYZM&o4CU(+((@vd>u@PAUB0QzVZY1%&l3H}k+H*HDevvL5&c)nXK?(p zME@w|39PFKoVW?!RuR7ECJL*1l=8I_qF_mxT1geKluoUbF<9EVR@wVO|8mruqtYuDi)s_ zVVxQ!pE_fmIwzmT^EwStK24cAO%*;ZojNUJK5gqdZ6`jRw{<%2`EZC6WB*@Ec_(Kv0D$@q2%vydW9r{eKgMPvKs?!n>7c}vgW=bRFc zh$IV0bX-nJOZT8x^p{3xzg0l=?DG2H#EeZ)Y*lmT`Q`Q4^n6HCPDW|%=I-I;)ooU3 z?dio;R(V~@*Q%4V%fpki=!~zI*S970Ek~yp&D{e(W*5JFt$Z7m+&l8aJtE0DJl^eN zqIYcS!1$C`Op0$@`p}P=tDC#+{llsG<^AJRpV-uktD7HlOEoQB1LM;%nMIe^ce{rt zX73~W$ELE%>bCX{^Q*p1JreozMVrO_WKhxGjP!S+(Z$_9Z*U9f$ z4JYywX+3XjPzZcw6n^+}1GM=zwVF}Brr$+f~`@{3!XVO~R)Bd(uw7q`c>?}j{D z|HkA+DZPfBL@q6M$aeq4d)dG5D@lXV$(MaD}9#_*UtZN^nu zlHauYNe#5$(X+mWHC7njaQrBsEakn(v`A%(*f~`53118Pyd}Z)a6r4%I5T^ z@89)Y_)+1i{G8odem9`-^321?cZ*N-bnwTEi&WHKEiWlwyyk+%V+gEU0U`n6VxXMx zOf0{{CE@$(gjUDGQPX{VbyS*8qw6-&=SK%&$RUb=tFG)0YV1$3lECqs_ORB5koPYu z=<Ev)Ucq+v`H**?6` zuwR^fG}O`W+QK5*?r7WDN<^!_{JWvv8n7xt<=u*y*KYPwtg_>8K;2esb1-O&G<^HB z*hxt{u0j3N%aniC(^tj*)YFN@Z&QVy)r!kXbfkR4gUcQvtC~ zUoiu_X!ANwXuDq2f_WDSf15M8-@O_MkU%IE7X(TQ)^yo-bTy7kJl~XHiR==ykW?d; z)j<~b-R6=#i4#(78{HP}J=PBuCYoQ> z$nXnD+I`L?*^#>0o1|^+zr8M%-rkpvtd>ztR#^1Zi)r8f-rxd4R;u<8=X_^luqf*1q=M1O>AehLr1EWnBlWX=j?sSIQV z#e`UV4RsF(szQ)WASfmP)OV0mn|uHj1d$7ZG%LzlB!d(wd1i zK~^+O6BIt#*J#_9jt&Tire?u0x%j~Js_cJ>taFJZmA(QW$b3P^d|N7K)?A%NhW@|p ztb56^Ey$N|viMni^+p?fj|aiYNmx&&Iot?$@RkS~quB$|0YHg>G0d>t=o7AfPUe^Z z)hwpF!LDYx4zijFXgG{Cmt!)Gs|pVt9Du_up3Uq_k7AKcPMm(=0wT_#4x)-96^x@J z4yXSTH=bAB4jx_zFM1)U4AmTpQ2l3fy*^U$k1h9B{101xI#?>iyQ!$Gc`vc8DYFwy zGkBLc6wm>HXV)i&Z^0xUrb&yP)4kRG&PW{I5s1%0xu#1oKL!s6x~Ny{4lk;mYRD9;rK2owv^>oF5@Vi;Jkt z2DDR;%u)-vC@^r3fY~+p?9}MB)cRb9+ad4@dmgEu_}>b9!pozvLEyhC?95}-mb^Ud zn(tp|cKMDI9bt*^3<7R*W%AVz6rtiN$zLmpBFB>(A4p?yh~v14drR{Gx?i}Y#?KWe z)k2EY4Tn(-H5iAnv~va=i-$i$86vXsp|ZI;N2)>X^w2T-ULeE>4PuO|#LdpD#;4t+ zt12lq@l#K;eK&pONk*dYv~AS1*T2mj4AmKGvOJ3 zIUNlp4b3YdSA1SKhgn~}84n2!X1f_CQq5?~*@)r9Fr{e?Lv1U~SyznLpFGMV@tMPs zU-R+xYAMcrG<==t!D68_oO%WRf-IYYJcYFNI*pGfsZK6AsyaHPI!0+en_f?xdM=%B z9{XYr3e-cWgm>xY3y15Aj!L2&=8J`8N%ttA#F)S$1Z{S_FYX zcIoy6Jxlzik*mc~sm5M~e0_{(eE-{$G*H@Xdn%NDkjmcHCCRno&*ywRG}vP!YhqMy;UmVsZk z)ON^1ar*KpzHvp%DXaC-TCL=Tk)&QY%i2GG1mY(6QxV zKQ$Y?RfJ={DtAWMdPa@la7}rjx{S?!lo|JReVq5cAqt|Ce!axrpro87$Zho=}lzEywuzC zSC|P?(Bdvxr3tN|f`9 zGi-`3n7e9Nm^o}p{a@_eRa9Khu`9Zs&L}=EWTE)%-pG`)wY-wa{2|Mb;c8 z{Mp4(bL9hlYB}?tI2JE5=bqs=s_?#g$!dWQvzVl{_~5s$iQk~pU9W`@)K9fIw2*kU zA*VNB@p9RM8OKrzVZnR4u19UzCb?l6He(?zVbvgGZE4A+Xh~PPLH^P5BFR$wizTez zGGJ$e9B1=6!tynh)rYx_CtB;St)=ds5?+QdZ%Zqtq)ovxs|v)IO`i!PRYNNuiOr`7 zEA^jN+%(qyjy*vb^>9PM&{nfBOYM+=jR27?oVV8YZq_DYTak_pQ7WHf0_vlAO%mw% z5*sYzC$`$xtnHY#Y4vT+9BgKMZOEgyM?TurKHSzSwV`O;7N4{6-rasHH<+xl_Nl=t z8)HXTWXJmF_5|}zE?G?e1$R-vR-UJ=vEz>X+nuw%ox*wBr(bR5Z+A)-qAMJ^Yr=SI z@mH&~gzLg=>dEX>SFBV#cN^sUl8U*~rJ1Gb~iuERXWvjtCk7ivevSB^!T z2eNjKaxn)mm4lZ7j;nO52CWBQ7995~Ox99&cPi=p8=aa}={X z%#Awa`rxEXa_Cs<#PaLV=Jg?T_K^D4DHz*%v-R*;W$^_6D+(VJeXs;UCX7M;6ti&Y zNaRS-(iH1b2+Svg*CU79xQ|+S^z!(K1l=W?&Shf5xm?Oc>Y2;6or{&P%WwQ+WkVOP zf+I@I9E!^x;zMh?o@2=pm-pw#*>orLhj_H%bJU^;S6tZ1Fpq0KzH76i>#V=4PQ?j} zQw+!B1$I$0ZYx*bZx;OFP6A%GJoGF=PDfmquIMaoe)gwWMyKyI+=4RQES|UxeQ`T2 zKh5zweLHaad*03L_h}#XnK-9A#i3iQ^qH968Ew4VBY9`Z7iW=h$LqD#@axS>0_o2Im{(w} zb2yu~)!b!}{FTw|Wr)?4A|>r|_z58uCN^(oW@T0kD!ngnq3+9;hRfd1Y~M9+fibMIsFcjBJOqqS%Q`KsE1Azu`3RoJzei$i!b2+{y* z*Lr%qa7d0S;};HQ?Fc4Tjg|ZU_*tMrF?yArU1isXNf-iU={_beb<>m-_t^C*8s7tG zBBm-^oQ4TNpA17&l%S4a>uA0xW`@v!V;`%8cqMU;{D=FxHcDv9 z)kDM(56UEt_niM=^GO9CO#7DeOHnC{OWFOERH?9wp$TZ%q0WA;aa1Y1(iMmYQ5tA2g_n8ZE*$%C&I*(i`3o5={WwVYn2{1U=Wt>}>Y z8HX?X<+BW1i3wI%7D>$gtbd7l?0Ydk=g#GRIa^s%=23RraqQHFM*iBl1FI{Mco6$~ zPh|EjV`fv5@LIMhz#Vk;C~`tXcVrAj!$1spSBnte1ARW=B*X4+SAr!(sAkr248#5I z#k__etZ}ndV(-0`ltlh*p9w;uqB-LLUfGsO;thCU%6QNI+AO{;Y1z)Jy?PWbd$G-= znK`sx=0`7atM%=1F*){gRDjsS302?ug|!zaLY8VV<5o_6sS%(Y796}gIezbL4Gr< zhRZY*-)Lu^h5JxF!6iOH#g2k9P)toJXc5A-+f0E+;C5`VaW*=-0PuwQJ|^$liGEY1 z#P(sVY-focz$(HVJcbewhDc%*W5SpPi~+);$HXOj(Z;XHOO6zhDC5?G8ECS9EA@Vd zVyHXRs`k=i-)s3IL?O{FmkN-OC%YtO3<1Q}UtLx|`gf|2dITQ#< z7(*DGjluM)U|c%a@a8~E+(%bX@;NvrCw5|l+};9PtcASd`Cupw7Z&{!RQX4oM-JJ{ z%))6_^}HZ#=KLakJ~~|*=KrYWRkAm-%Oan@pgVX6<6MM+h?5{-1$KF`BH4y#a?~s0 z#3*xf0~(HR#;iX-9*(X4^0i7bmj*?A?Ofq=Qy8*V7dFKxXD0}^VT;{}6qT6@#?5HM zoQRPHv8kfsP_?15a0g;BMZyR};KA6P?YRC&-w%eiA9}Ddzeg)yed@2Fyg=)Qh>t?W zVnxeR1e^u4h`ZP|-cXGfFK`u!t*~oi+GygMjH^6(x}r#-MEEf(7BacF{j#=1OSPiD zoO!$Cub4b6Q@O&;V?*|^WRljwqtauaOB-c((iJOJ!jslsf~Zu7p479t!@kUfVOJ+= zo%Ch+M{X0Y=;?k&xtb3tV;0vt(}O2Abz@jOHaHnG<0JC5Wwb?hY2>q$6~F3+p*#-M z>9g~Qu7;McB~DJ%bBh>cMYSxBO<~b#TLKTcr<7)G z_v&M*1ZsC)zz}F!=5*uf%qC_49m#~{TLA_pNJ1c?`O=H$4%#`qBE{|g>4Is*{jLYZ z@8uaMth?SZyW<1avQMZ+(;Wvv@04MjZts3En+vfR{>pk_YOO}ys1$<_&wYk#L&o%U z85+==e`#Zb*ov9vGNblnrkcojBw-~-L#*$+j~04Oyg4FsJD4wa>|pg+6)m`@IbFd_ZM&l?AI z@zXrx@7D@ig}$Eus*paU9#S9?&c>{;h;x(NtQkR=l@q&`rav&)1@rV)5)+rDeESUf ztQ67MGr`r220_On%Iu$|^k|bIv@%8Y{i=O;{MIYs@S?#O;MYkIW-)&r^2rBg+v-_F zO%vaX53j*`ankyP4uE+v)#?VEp^!4qJ~L_|W5zU~qQgbdFqb7;ZnOJ3@yaF?>3H zx2R^H)xm9~Bu0OxNUxy!={!ZZ4IO?V_3^10qekJ|Do*Zt;Atw&mCoOGGU zGn?EnomOc9fzozL68}Jjkpvq8C@fRWyeCx|{HrbB@(HiS*ddmYgKT^SWW;HjO_{p# zB#(i$CVSO>h595LyO#mMVuC=|gV32m=rQ2Ts7x%rS&$6K@9FmpVIb@hW5#9(aaaz! zbZ)?s8Yq&6(sG_Na~Z&Z_c@p;&_EQdRW}32@xWmGUR}`6ikAC3Eir<#vQ@l>T>h1h z=Q@T8ojLD^Kba2Y@Q9cZT<6wG$?}aX@rf^L6RmQEg|K2Uur*8y@-jY3%|+0@rC@oV z@xu&8s`=!hfd%}C>?%ZMB;JX zc`d{;Z)zv^_&c6uL=rD0i$b0{tW5ph(ZeEE3vXrS&1Hb|RZTq$+yf(}oCPIy21pHK z-DkLRYW7~rFl9c`6UboUo;mF3Vr^-V5eD3-nV4IO)dYLaL_ObnXQSt#<<7?fIVDzQbygi|+2@v) zD#V#q7;u*wHb+--ea<=g&@qL?6*VxMt=xu4yS8$_#`AfSliLD?bP}cFzvAxNEAcSq zcK4e#Q$%YtOM5nqee1OdyDZ_R>}}yG3tJ%v$jy=6oi)TgjFkyHB}u37vk9Ao;1-lj z)}TY*YhlD|C*Qk-nCqRDagLQq#ij$smL4l>@Rl{@V{R*gA{ZpMK!r{AvyBEOHyL2FBRa zG`Evsqj1(8eI8EDUmUr}ls3wgHfW7E29Pxh+BU#+ntXek9POG_wwp8U z;(SWKsD{~Y^?N~VSg*DUOT>h55t}z3b!M6Sv#kF z8Qq?-7b6>4@K@?)UDnOu836b?gjQf;_mJWd!0IacJ;l^ zjxzEQ?&`?Bwwbb@uAu`pAAhND53tVkVC?@~;T|TN9KO&R)ax2?d^OrPFnW?X%)0+Y z-9h)ZY~&ut%kfM&mQU#Id&oMZdz7a{@T9wxPX{bd203`-m4_ud3|EwY$w8FQWtPs? zlq(Cr`wv7OpLhA5$e)z2&{q7fn7kbCyb|yFKV$MLOAc~2e-rtziY>aQD{&Rue-rs7 zs;gnk0kQKPelI*5_!r0Hj(EOF%xYtdn{ru-(dbi#KOu=1}Wx| zQF)}8|8Hvfzm6frJW|Xf#XM5XBgH(g(6kEts}N^U3-kd}%p=7-Qp`Vkh7|KiF^?4U zNHLET^GGp|6!S*R^yrBnG#wn?T*mEI|tD0<=#$Mx#PGL>=F73T4^_DL$ zL%Q_px`@o4&NO!!taTxho_@>iG9>9XxvhK^Q;yP7`21Im%9x|Yf)(!~6~N7do-PB#EYIx1%oDpym`5h6i8EJyyo zh^oWyYLlEg1zkycPLsZq3(2?t<>0^hYDDQ(=RXq6#(N(q*0&(U+~YXSkNf?18S5UlDbmZeb>s396vTs6_Y5^auXhY+>xh zrTtx};;l&Qb38bSrTSP_nS*)|)uRGmQ{Ze4M|S!Xu=NQub`VH;Jp1 zo;7s)T*tdCij#~BXm$K>j8YE&Cw7WuJ&<}6^$={Nq4#^+;Mfr#$(3e*|t( z>akz#87laibn0$q5=%&j?#UGE%c)QYv7qOr;q%oI7B!LiI$G5_I=k90$0qdersC=! zcHmCy(oDPZ=)PrPjAJQv&X-HP(>}J>O+#l)--pC>3B(!*e(aiF0`zcKrpZrrS*T~S z?i#|zD=Qv+DGZ${I{%#4Kl)x%FQ?|YatJW^QZw{Pov~%4a zbDt#UAW^S6c^a#q^O<(e{UQ|**L>CYwRAv=v!8T+_$fbPp#Ie$3+oUI=ZMAp1dkkC z%3zEo|A&Lzc&x}w$~;Srfx&l!ss8z-9fRt*c`KZSMXAUY+WuwI$LkLlPGSsvpDZ}| zFKp0GZKpJDvFPsR8&;!B?pf&W&o4C2OB{aH-oRU=Ltpe{GP)63JpI^kAtiBDFLUi- zG@WClt-r|kbMb~J{ow0j(QhL}O48kPLDY)*Gt#B>b0d(J7+Qr9W@;T^2*XlY^3Gop zY%#9*xr8l}gXbwrQ1K8fZA7#nK&)bjv0-ctGEo&W;eNVIB0Wpa+DPU(Ng8Hym9T?bDzp$SKG7wK zzalYVHVRsETwU!vTa~GpLq~jtb?eG$@yKsXLgmZ@0@sF0)_7Cb6bDkDZFE0r6;>hB zQKeIQA-AGDu|}wAKK;PL+hF~ad0okF-7(ez^w8qmfBmIaq%LAuKfu(mdwuoXLV9%F z40ppwu0XG$!NiltVnfZcp~BQq*os%xCXCDWz}#HK5?Z|x9cuY>*7E!9Mm4sTcK3#T zL6vLkyrW8;%YcGsH>cNvg}cb6*vn1v;LUG{W-GH_R{1lVR;iml_}RW>vVpvH0ge)c zKO5c{8iwMF23tymT;K$S35E0OM0)B*NN;GwNkz#?3XT#;)L4tIS|?ao!^t95Znoay z+l(5lr4;BS)7?+F*u2Zw=5*T*4c)Fw+V4FJm0%!;OnMySjOA4_1nXkupcwr$BNr` z&vY0xv~MBXpJ81X(%dC|3U)bO9q zp>U@oOK08pM=oVYiY?BK3rF9qWAPgg`w&M}bS{dx4rc}Ql@rbciwAu;$Gh|P)M>}> zqK<;5msq`%X){}&oa1DblQ=q8pyK3Z+{sMFai`b`@0%?M z`61Wj8uz9x{iZXM(ed2D-pGWuFyASil_QbY!QBt!_CB zZhYiN)P*gqjq4Td&diTbVezNXKPQhj=cO?_C0-mqh~K6ScV{Vd=T1G7$*f+%IC;_Y zP*%H9^^LnUn+Nya*&|sGDQyq&%F~Yy=f4F#H1*GQU#ubU5A+J>^asaY6+Se^ls0|* z%p~5(eDeIY`o-haa|`Wd%SmA~K6cwQC!0U!MpkAHUS^Krt5)GAlcbj}-_Ej_FWu<9 z+~hAk*bKTXFTKbOVngnu^5k+Jg_nMfPrZ6B{llO7Y+k;hf9i*M6(}m^6>lljaMAhj zGFa5xNzU8p(`=~MRhZFcc+W*t>Qz*sw=B*;$Yomei}N6iYpG!GneD5jPqcg&SAo;s z&+ELy=-;RCHKvkZCldI;Uiu_I=F8~0PWyC~K6yR3ehroIdEdAlv+14NSeqq(Q)BL% z<>Z@4?+fMfP51K6e`8ffzZE>`E1Kq;b$HW-_gmEOrgT!FG`_5wz@UEfRmJ1qpG5td zyc`<;ylM#FD>}R`o}_%K18qsB56%h+X$och`X4Itfos3_uKWP-Z6L)hPKod5OR9H` z(KX~&h=y?V_Ine*_50q$_uiX$)gOa}w?p)Iz46P9@igulJ*>t(vFyFU%DtiX3ilQH z*K<7qxAK7Z>u-$_KM3G`FMP@;Z#zf)D*vj;!~bF8J(*tz|7%5FRT1z;Y>7r}vw?RT zUw?|f)5KN`PXEzar5Mv2los<6P`z8Vx(kHdMPUA(C4x<$fuR5fDh1&Z1jYnM#i9YD z+(+e!l=mNrbznk)WWt5M`>6as#e80GFuQim-(o&p(CRNS&pMFC>2|WGcoJS1EM-jt zErMsY2a~}ZahE!B!__DQu~}@#*e1%Dh-~)}zHdt>tAyWT==k23<3sRW&GX=@f0yGS zc?s1x3BmtfjtA+}Cc}*(6~TC!5e|}Wg{!?R?MfB)N%oz=9toCVO_Xil2MCz}cvs?5 zd=!eQN!{KJ^V($1-{RhNZ?@8nVN7#riI@08N*J@p&{Mm_7J?fL-dCdTeM7X*J{_d* zsRx-5MlrDG1a)l!3Nd0j4DD?K=J-h*LP@sp?56~D^#|gOcV*+J;a&LfZiWa*a<2>m zg?$MMvRp%f(ZgkRfG~yv3bWgJa(F1EZ4*QIqvgr$7s5xxL?k}uYxD}I=tocv;Rt5N zNYItex=*nPk!&$SJWCqkE()}da6)XlZ1@lw+Q&dbDi$7c88;MAT5bS^y6%HG z?SZ;gMzDh#1U8K_v<@}moq{MF{qRaj)oi$C{opdfzWE$Y8D*H5ZhtG0!;A561dp2Z z(R(CPGc{aAD>o-CbX$!ITr7})1`Y*M^w1s#4pFhRgViEqr7iP|SXuOT6eKd>sszTw zqC+Jx6W@ejh!o{|a#3GrQN`CAY_`g8VIWl5oULnX1rnKIO0pFqS#DT2HuY$6hnB>C zCQucqN{v?StcnBq>`aJ;_SHodg^e^yHFGqF#J+OUG@2WTg{(!CS`e8ZLa#Cv?G!#S zl9V96aJTF8cVNwWI=8#Yj`dVmhH0R2O3P``L-C)0syn!TQ1g9nwJgPe+2D?~K?UH< z!KQ45F~oJ4inA^X4AD2om9Ko?Ri>L`7_&lgQE5h+G3%cRDT*+C6&{u3*tY}w(j-qp z-+fRxRA9}^!G@KZlbnx%b?4ocUWi7yRZe%bmp3j&J*)VP+2xYd4R%q!kg*(%^qh$w zNx%$3VYh}Xp$#;zCMp@3|BqkDHK)OwkhvM1nXk6X)0y+cca_Hp@?veOQ_c~1j27; z__qq@s3Alc3s6usu!HJYbz-3NT7t5o|i5dFADO=#UGP4ESynG${_uO3JY31UFW0(CsRHgt@f?%*mHh+~Ku!4L1J!s2fPw@v<&ayTLRJ{p>&0yGG;;rgY_$ zp!J5mYQn5~XxvJKI2?P~D4YP4P|xkBppR@C=JGlPx^9*F$PaJAb{L%$F^CCv1g8HH zG$#HXO{$_g*2!Io=DpTWJhj>kz1I+O%}Cbx5W?g~B>5QmkAC{cC4EBN_K80lQ@MhI zzPF4sDKLfKGIEc_$HBc-)n;>9nPVmjdFM}kWEJ`YND2rT? z7o$@q<+K@a1BO4&5&HC}#pba~$;-4Xjb~Ex+mz?mrJowM5y?l&`3hQ!2??kUkO5pk zxD-5AjGt7Z^*lrIq3l>`Tw=2BI_F3$_C)nSWSQA~N$ilVRzc*rw5@@iPAK-|=S+k;&Gw(;Yb0o-~Wlw6S7l?3;n4)ZnsEx9RM_T1392 zw<|Oe(jIMiwL;zomitM{9HEboO8$9h9RfMX*X8H`4wz?ky7&tw7nd$E2vG=2q`FvH z;{w>x8y#=t+`@@YmeHBaJFlMBq^i%&ZJziTrQ~R?CBVRQv|jzSA81%HcAgAa49Uj?uG|vSK9wnb*s#w7-&1bx&Zuo0+*_ zN=m%Kv#b zqN&F{F}F3kv<-`cnZL|vI3m2U@fpPv-ly*xXxqeZVIJqa{g@9VcmwSCr_PIfz%^5E zB7PEcs@E-q-sxf9gSdxpb6fUQXCLtQAks~9|~|nhrFVv)CT(MkKG4-&^_Z`GkoPO{`#WouxzlmU?9^k zx>5>opjSAt?Kx=*$KS21|Dr%r;Z=R=e-VJ$vLx}sJI0Fn7)9qcj*1@M^G)Qu81s*k z?u(k>^u2S!;=6T$87Khh1Ht>07yC$;P<%l@K{9AV)UquA3oZR%=m!h)pA9s!jaT$A zAZyl#4ig^&{qS=i@iFA!IP=g4bcAIzPWtJRn;(nWE1Zg z{V+Gdls3U1AVO)yB@KIzTA}JVIL-ya9PDGG%etnemd=X zE3c4^rT2jppOGwViL8%-eI%RWgq||Wm^p`Pk4TofVp;x-5v_IEqbr+;mGLc4PTg_u zEeQCYXoNU@w|Ghfy1CAgCs|m=>qM|Gl+VM7mVuFaMcf@Zv7LxZF;f6)3b3xq?->)6 zED{XFrP|PY+MBYG<$j4Vdmdx@Ks=Yu)KH;_@u8(GR|$l{P@8)uR{(=T5H?3Ro*|w} zPjW+B`5D-Zo$m`=AR>|_=282;55QtxehFQ1id^$Bj=haB;=o?!P{|R#iDwB2dFU%E z(z+<(xhmR9eX`!W+ll{pgOMo=B!R&UH8z#BWn^OvVPiCf(J?7Tg)*QR02-9yD_P8O zAuOS~tPbjI*XDBkBTzA7X2lVxGUVqSFm4XNYSDUGGNE^YIU&6ELuyS(&Rn=4d_xVf z_RJR~cL5M{4EJXb#Cfkl;pTV!%R618ih^c$d3guA3&I-~a-DeyYnmwMT*J9Fa^Ce) z9&<43REq~It;;$OT}TWrNQ^YYnpZuCHiXFgtvE3Xj0CDMVW98Z^-@Jw1N-BmTK?m( zPEAK@409GXA9ZnFbtWlw=I82y8SBmY`Mv9Tv0x&i=lL8kCQi#vSuJMSuvx&jwjNd8ZA!mom4zz7Rdo4`{R!n%i7?uk(5EsnB3rkL> zNvwEQwy1Dz3_yo8MB!Xloe88321EDb+e`{6uGPy zWu!j$nHYcHV56&9ta7pCi)xb^$L@i({gk%YpVKBpkmHT?_M4JiI2|a^vFO7F*?Zm+ z`8{^Khb6hhA$c93JQYqElM)Bbojk)5d+(BhIBfSYPMa={;#8tSan2&ch~mtW7kReN z%1TPRZA%Ai38rm}CrUheIV(ECDx#Rm`fRE$Y~K)ZMI3R)-j*P$sV0heOC32%Ykf8A zc**J(FltnGbG7X9Y`Gd%tQ!}`t4g-()#aNOtUs@?HwNr#<&`!EDStWG`Fz9qrPZ!M zgzIa-PRl~6*?MVfoSoT~U1K+w*75FF?6TG!^7av~wy>@amD2X+?e;LOPS^48RA%2j zySl{fx`Jf8d3U>2%CujX-Fa~5MC{$MaDUFR|B}Jon`-}arL?bL?`JE<&k~hi0e1ZZ z+$w8jj3?Yc0(bQW_s~Vj;Lcv`oPFEP-q1?P5ShcT*~ z36=fY1B$7z@~JqU>D2P+OrDv7@|g;r*)Sf5hW{9qA6+T`rc{eO8HXM03J^v}@kx}^vj|E8Nt4Ur6kZM-bkqP-DWJ3P`z{4X!d^8foBSAb8#3MmG62#9E zvo(^>@c8=f>MtWfJQBnsLA*&T62v1xJQBnsK|B(~BSAb8#3MmG62v1xJQBnsK|B(~ zVgx@K@8dtPx-RB2Uy#Z^=l zMRX0o>}wOvg#__P5RU}$NDz+%@kkJl1o21^|NjGsuL_pG3emngz*ez)@yadU(*97W zQSU0M@hZCK>aq1bk=Kv7w2UOT%;>vHWV=pEtBl3;NjSgqQ1Ow<^?n{Ym>KpYJ;3&(-_M&U+l6wkb5>>YEyV z6O`)fr{dc;EL1AGnnRyn#wMJtJy}udn?)c}`{z{+y>LUN^@P&z30FTTlW!9}bql8M z=S88aMPFFs?{DP4U4^`pcKqt)*9!;zzQ&hzR2EB|`o-2=cm4TY?Rjf`Y>b$2V8d-J`}ukX`s&Dt%_m)o(v|1GX}zuSxO2h#5Xi~MIIZwK-2hDdM6M9bDU zU$y?B(#i4h>r&QQcn$qQI*4A`Sb)F>jFCn^6+VGjLeo*W$_?yR6%~sR{|+cY(^1Sv>LN#3#uB)+4`OW3O~*_1ICka`+nP+NIG7w7 zS0&Y`p~1S4^zmLZNZH3mFk&iKAT_?+SIBX0_tJRcTM&`wxh+T)0!7C;l>CqmnQbs+ zO0S_dmNg7YUc)~qQ_bBR%8`G|ODniO_PC%Pag7OX((KUMm$X*x$L;zu$oEx6Tq`|xOLQQ`HB{7CjQt^-(4YH`@ zpDN8HS;M@{SB1k4n29-wIQXoc*>ZG2>^Whql;K7(6vH}9a)<#Ul5Q1KLS~q5T00oP zV)~HMCS#V6O+;zI4SEGs{U{)E5Q`(pP9d95w|F`*>h@ ziQ~%#Q&K$_=$2vI3kia<@13>DSnY+#J>kY!G6fh+^@#FoQMF3T-%*JVF-kZiB6~<^BS{x$DGEiq-3|@c2WupHbu$Lko<*jFJ@QnP8bL+U7ab<3HcA zZ$>kq;%Nl(s^3zfJ*s*MZh0=M`aq(5I3d>%Z-y7~q)GZWZ_5`{;|>)m;O7GoHUquXSgejFYuS+mlI4iPLhr#hBWT*uAyh?<`8?MC09BA5_~U@O}v^(FRM2Oc$aX z)AYK%9>?r!=e#%g9|JU5ptgQpp3@KC+`3mBmsG!`LPH^y!3F;?e!E0PiXi+&^+UO# z{nyESW5;(4)v|(A@@Ita_4Vx>fvwc%s%yFL18zdC3NKv1zShi{a_>lXM4sFm{63XZ zlChgzi61Hr3o2>&4lT}mbEkt)0)sj^7fEx(rHc0xUXi-DvpW`a))-l=7c-?luB)*h z(zUG?5X6h$Y=0^B4Wl!w9;GR>21SCIV7G*LCzx3<=%F3SpW7YLh9!qzzUfhEG)q=| zuhqB#{H3&SR2^S{HeTQx_3SmjMH?D%gyZjbvrzFg_E4D@Od~?{=VOH(XOX|m45xlD z18~rkE-rA)2&QIlE6TI(BnA0o%bAKj84QetgJzBMnx3MGdt++=geh_gnuN3;I5kUc zBmSTQZNQL|Z^tu}W@+ocC4Q|CE@eMO#}Tc05NXTOmS9uIBf;`e5cLyW;S*H0C=)h{ zB0bo@_UL8unb#2lfFF$l{lk+U#sZ8;pPIbPCe3iVJ9Y&r=L7;@XEGE{tfwmKU_vyA zER}CH+%=D8AN*D@G@>dDj z^B*i`4|)>x7@1Q_nN6n+r+nAjbFt3tg8Eorfpua%eZ$fsO-mGXzdu_v&+CYNHvf>_w zfo%yTR~{tY#N?_{a*l@~lJs7FwS~n@@#a`Y3jCu@A1=o5AKLU-|JtU1a;M&fy+Xs6~ zD9_SWFfyG3xnfK(Ma3S)*vO!C?1U7480JYs-wl z5oVAeW*HP5V;MAxB{(LexDy2;gM#Y})O3S8NG6WLcJ&w75Apgm4xGXxznfOcoSLxG zDa5hVuKa28hS(+k((jl{rA32tJ3ylozcL15E%pAOVm>mGrdeT)xq|3RS7-DKTK-7( zf$*ma#5%;Rl8_fcq!2C%;jhep+kk#3S-Pekm1W}?`M@#`+^R5@A+&w8xdCoPs`D=~{UZZy&5j~1)R+fVpOor zd)F7!u)(;7v_gL;+VA??pdSsoBd;6`2FJLTRGOQJULBQFuPx=P<;+Q=9}hOan#$yf zC=u=`iF$k+nahdLB<)v8Al~Z)J*;ud7n}c(%pnQjrhWPTb3hkR_^=Y_H2!(+2v_ zH+(+|A7`Y=?Vw-fHTWOhjr4w-GQ9A!SzG1tf^@#jB0|hdt@V_*7`82RR(rKx%GKx0 z+^@2*W5`5-1XAQw>;0PTIuEMDr9;o~Q$pO5ZotR42L$R@FHc(cqR5G%A_v~RT*@b# zpYHa?7p&KQ9SeWdZfd8(T6hD2oPvN6YoqCFWdP`hf}aC~v2*Aj<;rAgEZ*+<%wQfE zaR0#hifA%IWi%{d={!W2IifWjATk0d7G)xa(DpM=_Twki=;9QNfCz(I%}=OtkQsx- zqio}%76T~!{^6&B1S25bs34mj;7kLe!WIGiiG2`S#=PayRys15|9A+y?LX{~<(e}MP^ z9e#kfKzlQNj?#wRV0=f(0JLS{q5^oVizn+#Btd$lVRFYLSxf_2=U5ETz3fw&EEYue z$tz>BgF##!tcCJq>gG;TTiK-{6JRQv1H(lBb@s}c$!y{>lt$%s=L$~VGK1qdf@cSl zCTRsV6GEqAh9;dwK^MZMwRB>hwTljCKrFHaF}_*HMCBMFXkFyM9)l_~aWyjf;&z9)A&ew0^U9W2;gyW>3XDa19dxm;=AE zpLHxQ6*CIR8J{>aagSs_!T+G>Nu}f&##(PAZfY*mWuC+x={SU-pVnQu^CyOejIcxJ z@b^MgY8&_RdSuzuVH})R=VPS}^WGOeYF4Htx)-@_Q{?d#J^vEXUQTAJL z8<3D~A3>W6#$G}wiKV~EI(7F5E6*#34U30l%*)gHI7=*qJNayZN$ig@0UIUb=BIW8 zBAph~)>Lr-7(4 zWJ?-jcdX7@24+(l9>nb`Bq+T;#=bK>CK)02rgSBN8+-`89HyO(UnYRl$Xh863n<76 zz_k)Df9b%wxhqik*@ZQlrGOqtcwG_`1vPU*ga!LuJS2urLuRg^( z(F40FSuE0W{#A}tB= zCe``4lbnHGg_>JcQ}XJwZ5kC95W-QOv|Zk(T0vY=FI`<I#RN6{K0(0t-#b=nh*b zeYVE+t%RTsQK~h>^?ACqEj8p@Qg z_h69Dyymu1wI{JG>$Q#i5!T(2Sr(he{S&6u+ger^#@WzU);&?yUsCpSgWJ7}d+-4L z2WxQ;g1cvldl=C*M8^ZaE*sH%Iu!S6lyh$Yzq?P4C-`~!IF)6KWqHg{8NRE76|=)s z6wg!=&lDrYXeN)Mq(hjA!$bzpNJsg2AEJCFLw{zXT*I4(ab@3dh{yk`d<2zuu_4=q zq+A%R$#u#KHgTU%6`VfePa0o)XGz7zB9SXGcw*| z_450B{X9eVeB$7QSL0NL?<%bFD(-O2(P?hRanzEpqolI8#_4j0`?|aGc7X40XTPHL z@R*7R;T!V%z^Rv?3c#!a2>4ORt5E3qQQ4|c`S{Urj!qx)gXF6~FZj{5tI&;{|774{ zIPqg5ys9wY@Pive|5T`g)2gsO@naWOnM+n-H&)?%BJbkIo26mhz2aQY+SjM?Z+AnHQi=t3{*%GT)0 zC+a5J==NCDUB1!%g{X&iqlb~Gr&Xh;lc<+hqt_cz@9;+Ncu}9UMxRfjzJ-mxm7;!) zjeg%mU-vY=9u)PTZ1i6g4cKf9I23(z+4$y*m1P9PRY-V{hL7R1&R#3vRk+7$d) zEJVI3{v zQ|b|&W)6=_$|?QY_0uQrU32FT%fPs)g_WNplh(lr)h!(-XBR^gGofiYnPqirTYG2c zS6O9sN2ljm74;cK)rZGtdxytynMG$8SEUVK_m56ny81?^=H3-mdBvvp42-%*r#VL? zyG5n?CcN((9`}jQc%Ag|*XZQ=<@LtS-uTSI&cTsi!u!+n%hBoi+OOaHh9}}b6`x&P zZ|xnLzKQuUG@eynzrMYfU)_Yn|497*e`5cU_#cV?caiuXiT{!KABq2w`2W#^;EcyV z2%8qt2Ej=DkHr5-{4W-T#Q#YAkHr5-{Ex){Nc@k)|496g#Q#YAkHr5-{Ex){@<{xT z#Q#YAkHr5-{Ex){Nc{hQ9sU=F5bz5nyQKUw5A0KY>JCWr<>*Dz$XJg-_TPC-$BNtO68}VKCF-Ejxr*h{V&q@v zaru8Jo>A%{doSNH^fgl9akvIJVyw5>ruQQ*5YhQQD>=dv+BdPJ0A#`2)FQC?qsgGS zSp3pyWia7g`FFVZUS*1=Ej9lSdw1Cs*W2i6yYa>)K=9yB2MUko*22+i-9 z@ti;HoWqMDg}i(U5VfIDrC48mT;?LY+Aw(lIXRrWJbVn+;XW?&1MckEV2J?7mb`-6 zgV>Im)NTOf;C=j%ZwG*t$YEmmj+4mQAYrMQa#AEUREczkVz7oF#G_+CUY_GpK(X_) zf*0km2{X1ha*{6rQM!D{JtwfwDm>RBDZfw=5Jgnf04!zzqM!px2^Ha{2NLDSW@Qx- ztw#WMO4uT?Xj3E$IipNj!(;1X&jATj(Qk3QQr}4Qa*K`O(Y&8wmhfOy@iH0}97umg z_JLMH$5GKU4u=$;1ENlHMo&G_kYs^CMuiK`DjF^oF(b~mI*J4>kQ-_WBGyc{%#oTS zr3I_Zw+kZ#C^4ZGnSgeRkvR$hdpTOR5l$9WuCK~8pOpI?hTDDcG_iAty+n3>B3KUM z_>ad1;i>#t@r{-7O&P{0OgPwC)V}kob$N~x9AgTx4+8G8rE*mc)w2d{iiUqdXhSn{A=23z$4dU~ zG>|cxUU(l}6dygDk8CU)%3SJApOwTVCLXoa+V@gdk<;QmXDq^J+&+c8TnOIvCEJH) zl4;jOI3A>(BB$%Hhq$2lxDw48kWLy3&U(vesD4ycyB2W3<8ZW|^VFJk7E@*TI!jNi z7GW|MIvgMTaYj`~-BfMP0bMiNxhxEiAp}8_i>vpO{QOTH&3I=<~V) z;kGqXxY!eFWD>*wLbvX}#*Mh0|>^`uNKU`aQTpVt_P$Vc- z;;c2jpjF1zLnWa_uev~Mq*crEr8=A=^?4vfP_r|8j+OsQ!}RBJoiEDl^S_t7lcpEz zx4%$ieF>fWGLExYtfMVEias<=+p>6*Mb*ak}dgD~d(BOJ2G&pR~O)C3XTAi&9t4@bt=?R>B*Xx0c^KOKA1% ztsI9h&ABh1$F1HAHeO5@UP`RmE=jo=u0qCEhP{-{ao1o@SSh<#pG@#hw)GIybt;~9 zVT0CyAXYeUJ@_^dvaFanpxWUTDW%Lo)MEw@34Z*Ka!z`{1#Q2RF zFT*$*gTP|L_|(c7iDvwjT4wxtmb~>^xJ}vS4V=6Rg3XOmrcH$_L(a5R?i+SqZw|g7 zqxuS?L;)k;!A*YMtPf|f$dPEGi= zcOmE5-pZePX|RSp=CDAe}X_& z7@HO9oYg@VHTYkZHp~=U4(lXm8-zG(gY=s6zJ`T=o$oqyd_HVOv6>({5@oTf=d*H~ zI&6U&6?xY}YMJ{Kl={h-20(}1rdDwkM><_cvWr$7Pe;%ql;bucYfonDTt4f=gQFp# zA5*l9vyw;Crq*py#}sAOC9TKvP-EGVV+sG`&rioGC^nxDt(OtyR$Q#?iEU)GZ3-Aq z#J}1|hMkBioTz%+Y?5v2w4OAr*c_D^Y{efQ+?*^OAI>G)fCWyYWKZ+7PCp*m@O(YZ z{&~ujVylUJYEx`WGjwX>=Di5QXb}{j6Y;GCQvTW* z_nC~TA@VH;@I4s4R}!u67`FUO_52JM!9JACerCt6RM1{f&i?+Zy_viHBgVPBu02!U z86i>@!EGP9^7VNp*~Pn4bkg7@;tx;Y_66p?`Sw|&zNo<5NI4dtS*uDE`O^z`lUIVh&hfmIbN1t zW_eux8o7L2b~Jjt93Z~pV{{@obqp7};?cSyjdbLdvJ+6e`eAd$UF1af{c11C$(H-{ z~Od%6uUyVE7P3kv?GCU6&$f9L<@4%l@UHhUL-T1M&R8ounhYI7^<$Q1G6 z{+HB!>|eOZNLLz^!^qi~P>uWF`S(fb@8jRODWcxjjJW;HV@O7N$aw3%)#(b7@s zkM#FG)9fM7)g765K3=aVTZ*%=Za=^Gq2%pD)~;L8uFdb4Zr_NdOv=5S?mnk?Jy(&1 zpV*@==zf9SL$u1hQ{7`=ysB2}5e@X{k?vtX>al3bBGmP$d+Of$_p$omv7pSOBiKEM z+r8`iQy`OD)7!@$+xb2-*P-3!?$s)2hwW|`-AVneTSa7EQ{5AZoaY}LuUxw4nsSa& zz31x4XEY=){9Vs-wm>|H{5=~`RyyQM$YkhRfb8{Yr2if9=erjR0A~5c0?2%sSw_pgg6<)GKX--x$%G!3dxd`{_NA8g zp8`h0%S2Pl{DJ^?qNRVrhcK#_Q3LcX6@36yo&a;8k4h(?j^v;CpRy;6=)+6=Uun=8 zNhuY>yw8@^AIqrm$7=tAW+;(GY@o#Al6EA8&-LO+hHX7PL(~h0W}Yz<9v1*EI)#prHNxrx6+Jii$&pJIVzI2vQOcwr{j*$O%c32oOf~T_WZO>y1@C~i z1l(bW5A=L@OH;%ttP;Z#x-GWidk9Ra8e zqVkD%>{ftZMw4aMkK8t4;7Mrz@?~&-fS@_akAilCox-ZH&9$!(CYA4Q9;nIp5tiz_K^$V1(!ivolE0s>rp!U7mY zMPm_~m{aQjy6_Ul?4^60GJaE${@#&Z`v(NTrh$!912hwwi8`umiHN_`zDietiRm`= zqr`Ei&-zgou%YzR`vnAWegOf@oOL-({{aESB%@?y3$q!}f0z~!mTDGB$a24c0LUNN zB*o~&14Je0#jn6(X5s;eQUZu;MgX=fS)9TyKBuBe4n(C*N^ENpx^N7xeFmU=37BDMNL1(8`Cyh5#LhFwX{ZU&3b4m+E|+g;_w6O)<1Z}Cyjs{ z>}V(vIxm(oa3pS4=?!*iM|8f^$A$93r=U>gx}qd3Wy~?q;aE>6LrPTo+k2Ff3f!+( zFrVh`wGvJWL%gH66w1?` z9ZbYZBKP6hX-ZWiRf&X*kPLex!{fR1YI0UajO-g?Mt<`CAg@CnkuzEQu1l~tKeT4^ zBO5;UaEGiYIR&iAG|&)$=7T~%(H8LZ-Un`r=<4B=uP$xr$9t@^TqGR!bVGkqEj&e+nMy) zd`JTH5#Y&H#ZcV(#6dWI&6$+RV3`8v=}Z~LpDLJ6TmEEM+rCDxuJUUeenwT5|^Hr<3X)8wX>fF*l>Oj-9%M?0J)}5{GE4796uI z7AnJ0CJZA$1dHra*)q^6XG0!UEHqY?x-<&pS}Bc{wberf$b-82GYoMj-w&B1wj)e> z5=x2@PK%@4M<5J^h%;sN`#M}?bWhQL)`{<`h>0`bETOp1bEh8z7+|uS!@h%c#>P$o zBQu)=P-83LY4xd5M6h5n7_pEzt~xN`Qug;Pldxh$@k)CZ7!)Zirz4ExD3{QDKEMD* z@`SGAO`ff^oRJnrWh=F#NLkot_deTwit~x>&h`Y$Vn>5&Ba0Nd% z+9GMEVtlBtVtR@H<$fM|mQD7-TB3#2Lg8w%XKwm}^nc`n0KtmEe zgjmNubP(CJFoJgom8I(UyQB4myE)Lp6+r~CN+$4{M-*%$tuL>d$eV214;UNNe{$Gt zl-7q8xnTDmm;X<93@-U0~rbwA(SoJAseQ9vvm&{BBcVh2Lbv^+-Vc{w_4%j; zku?=PR(?g@#ahJU=eO>^?N|llll! zHP4IY4mQ`3VSA{i?%--bPm?T+BsyA(wm)AtEHh;l2b>jceOuiqvBc}KoGpOIX7l}t zW!+h1B)FM3^e7>(a2FPmvPJfne;{`&Dh??F_Or_L;9`U=-n_sp%$#$tE7^FP8R8xR zHs5%(*Okexyx@`jLv?1vae(}?eAxFU`%SWBA9Q94gyg4f78JK&PG$X9SenO;^^mjBW4@~gtFHEaoJ2rr>Q%EU}AJZ0G`x&xG^Xang z>gxC2b7G|XWeL5nCjIeY+RXPjI}-iCf|NL?mECpuz3q2r{YhsXk`tdtXC(rNm!biZ zeTX)S0R7>w66uprc)-->fGK#uw7l*V4FtuGSm8X~Ry$Pz>s?34yJOy^Ps-w#2=>_s=ii_e1)}XBqTj57V0Aj1iCeM~4h z{!Ato4h4XK;>KbXCqDCc>UtKh+BE?sMhxZsafX>*-;3Q$pT3`#~r>_2Hpd=OGtqX``&3GES|l6BNG3Oa>x_8ADmh9Rc|Ih8sU@FzJb zZ7OS4#!ZDjtxXpEzy`C{lAqcbg3S7X^BVbuK2lA#L`fFnZ*=r2AFKuNJ46Zcku{zH z_-p+&dWCG^_*IEJLu%+Uzq+BoLn523HeHM^N6|WOM0(e`1c{}Bq+~j`3j7CdpAUXU zf(u5W`1GVm;#GNt@!ehKgD_68gsKDiBGP02=&Fwji31F^L~V zp@O zxnOmOlK1!;1G36YuS$I4ZJe}P(zsfdiNwXmrw9End=Pbzp@wX?hGc+fkde*;jnINt zYR<3y%oW|FEn^dSA;LwW>q%i`I*EE!(e_^glEHP-8{~x#DO`kH|sScfmWxj<&zV5`Xr3#ro zimC8SrW+ZpySk722AW4iss|2zAR)bWMckK;xFQDnfFjdRNs2ir288hr>hL=A zc)I&|dNl=@65==k1@9v0LpZlS8ZRf?@Bcn16q7DUJ7x$<(=oRzSavfP^`R$(W%!Y@ zXIoV8X~rDXS|D^j83xPfi0I?EWA1cf?)*^TGr#Qh!N;`i?o##YbM+Wjiiu3d8BCok0iE1OPAvqG4ats} zd5E{Ag|1a9SxL`ERJ#kawVKtUJ#$|ga{mfqS3I+vK*<0!9#U&nXqwNH#ykW<8J>|G zm^oTrDj6voAG|qo?qjZmEfq6m9-lxQBs<=CE}3`;=-YWW%FQB0&GKcdWU5SlO1CtG zt#oDwGFhfI<5FrIaO|LbJe^cJS4K3OXZ_LBy14SVA;x-X0LrqM#j;d1x3F?7S8x4e z+ zy`Zwah=0ZZBZYNrWizs63ZF|?{+w*V8g8e7j%Uh_S3oB_FY$lbP9wQUKU4 z7ug&Uflg`5FF@}vxyvv8K<6XJ=lFqVd{);*N7o9crz0nqF6Fo0|HS{>lBb=f@B5O< z`-#e@vdVAb%kNs>KfT2NJD~d>iRZGi2bK4ax<}Aj+b@uzC&ZWd{|vBt`uFBNgz{{F zk+qY(;xFP!gT#Nv|E!2+75@?c+rj6TAq7_eBUzFEBmU>Nlg(j8{g3#+*DgTd486Ys zeU%mCCH_xF1fKp!{BMs~9FO%+{BMsvS@9bGR|&3i2<^Vc|Np(>f2x1Q|G}>H!QXj8 zg6l&fd443+|48TgnP302oF}x7hw{}0SX?#pi|ikpTHV}@%Po!0ENX%b9G;%X=a$yC zcW>?<7=I7HxW4s_POUMT%ZFG8mV`u+c_;0JgnA-N9)PG(&{#S$Y`>(Wus;1?Q z?cB-+-`I@Ml-%X@?e*<_|AfrNwXMFe`yX)yRgH%y=cRRR zJ;ReH=a(D1`?YP|QJF=deY5!|+j_%zgX1npfM_hY2l0Py;3lPtbcp*Av zlsB6N0+Twwb30|>EgOlxwHlXqxXh*z+>hecijC#oh-PcCQ20ANfh6ISKTTw*oUkxu z_gtN=m@4(Ld||p=*P`e>`d8lCq?x)NXAu+h1MOAXi55hc3M#pSz#XYMzx(UTxRxW5 zy2jk08K&x7L2EOdq|7NqnwLD!THs`AW-H)^6J#FtMnGBo!?u}nS;O&jYu|jL8p%^=)HZN6hi0U{_<}i z)73#3TJ3FwQ#OfqzxCxGpNIQvZ_#OR_cPcy#MU*>GJZIWG7)l2noSu6_439T2&pIE zF6|0S*^dN{Y^G|sk;8)BC*oS2@;)r@D+aqyz^?YQX?y=^<=MsvQ)?#|= zv4Pk2t>**Tq0d{-Erzdmsd0jUh+fYfuD1JTG2M%FOvB|$ch`{w=*m^TRLi6wru&SM z($yy#uZg!USJQPXH<-CkA}noJ^Gq!_bx2Sh$8-HqY|s?FI8D-hyn! zCl4Y$K%Z3O#qYLf?#P4tiT9jWUFDArTJIiV$AoUDBTIQz-u{3O75XwvTIgu~!Eh=+u6NIIa&Lc~`E z_sQgVCB*nc6mQi+_{g(}ARRPY?5B?> z>lWRvhv?lR9kKuuE<9zqbO;WBnprC#V9xJ73HTju7e72DJ3I?LeEpkd0Sx#|^hCdx zz@V3*Q<}{;U=M~b49pMdl4>Rwe93M1J6wNt0=CHcS$zT${np*O-dh9&*uhH<32_EM zRJGaYIJwWM#N@8TRt_^Xm4I5G^E2*Zct}Ec;VD_gyLFGa37a5D5b`0y5HJ|)%TTAl zTBq+>r%s8OUO-PrXr=yE2GN{C_t% zegSlGZYO)M4jd@P86#m`f#U1%M z14TIvxl_EwQv;<(6$PBtg<;a`?B=Q*PL3|>A$yYQHr(hM3m;ej8QnL(ud+aT zRv>V#04PoNV@%%m0l<(5%UA%*RPP5pTaypEkPnsyAbbWOngbB+e2{>V>L>tMdH@^` zK(QL9n}nmsN}dKsq4KedVJZ6)J7iQXWK4Uw@m!vYBxDSdy!)aZRF2G;fBY}nL4D^c znmi}d$U1e_6*Ubc1@r%wI)G7NHB!8$E{?MT-Co6{Gej`Bi$%=QMsNaIVj{q>KKjUj zW4n-(yNJc7mYL&x9dX3!3I)PzBYo|OO18$3-Z{lgn{D*Z3sKxyn!fP>yyWyxP@ zA!h9M4ByURB;dt1cu=-M17s_|bvYkrVkezy08Sf_-f4&W*1x@M?r*l5=rgTJrcK7}szr zg`{SZX<&S8UrjjhMKwr}^-5L!)X$?j`AM)`!nyQ=Gp6`_I$-aeR`(QOVFGll3Pe`r zC!OrI%Lwoxr;(WKw)$k4TVN0;$&fpqo(c1Y=nZp=qT=v4zI*2T@J#XsATbJnWFw5U z^Ubqy3=MRd-Tq}f>3kMWKtW!OMmstSkU{BuOyaVv!m>e0aG{2U@IO5RktzMaDxYT! zc8?)nydFQ6sDS8Ez#WxH(X{mvP&A7mw1XfVd8`eFFq(q!SHqYricj3Sx|+nO?eQEf zr~0($jE1tp5+pAXZ`7ufxJ4$6(|yLlkor^}sMDwf*vkdn<>DRBtX<8gPuG-Lt3}1p zTB4Ax$}eP3D`)>FV~|Of(-LwtpLTMeb~aDrZ=MhMMpwE$&x!D*oV2UGrbz>DpwvXE z6HnWHW6qvhBTak>|I<>pb$bR)Y34@`Z}h7E+$GNHrLj(J&dDX_uS?Jo6X6l-qA|g$ z@$NqpT+619+M_Bu97fBLUOMvra>2F9YQO(V{~w`;>(##q`ejwCBtv=~MEV4Qs{r*i1XKO9@IP>%wcdHX zzJpc7+BMWXJz#tfuxt?7rUa#D4GVvLcyg^1qKCn)hbhU7MYfLbV$jB9;45J;`1rZL zdYxFeDqL`#@FasE0z`tiK`z8)eQVH1yuw0L_H6#V^r;`dDd=*2RpXIgA86Ho0iScvhCUF$DPHjV}Id zMyeWlc5Mns)(e6fgv#oK5w}`cw>D{v-Q~8#Mr!%3w$kv7rD#Va;%lW5mt^v`P^yj1 zyS8?hjSr5EO&^WRrni*5S5*-Ql*@QNNt(dBnD{eoL&CQ;yj9c{c(q;nwQ9HD?U-aw zZQCbr>yFgvozxlJ=or!N7{+brj~JTinlg#(P$%#3MVOZR?IaAE+AZ#U4XUZwEebeQ#x6yHj#+#{kn5kBoEe@OQTkndlm>C@I zeg~P8@b8_G?tM3{@iE;BM63r!SAS8lvfe$R58u1O)S<#wQPo;Ozktx;($bD5+?NttE)nI#J1p*!fXLUOAr&#(qm zQ^{>ur)yA)&sCph(8#UdaKhQNqu+9}meBLHT7kJpy}oUQvlXP@mA9TvYte?8?T)vKTRVbQ1Rjmv$PId%P70Zh(jNZ;T4#${v#B3X zgG{qqduP0L7Rg%Xyg8Rnv{&L8S5LmqbJMQPEYG^|EaThwirGkz9&afWZYzA+bTQj^ zvGK|~iS|FKX+1f(sXGobJJtQLaievPZ*pd1azaLPak6rR&v^~ixE*1*i{QPHJas}9 zyT?C%Xw|zMF@dg_Jg?X;)Ji>>s=+E6{>3+an6ZWHHH8XooO4{&2`ybLG9F!?W~CHuLbPGWzVy<>^rUOeP+(kZC9}rcL);fpYiPMJ?$Ho z>;n(%GqcVQp!WVm4h1Ld|(8`?z^RF64t~gel6h2&< z3tUAqU#~;2h%m3IPOh32oUg5~KdlPOygSoq+gFV=luEdku6C|Ey7q{;)=4i^4wlsJ zy(H$mDMxoPsI#S&ccC$J(W7n}1_1;qPW zd^cN(`^1D77oa>s@BZ4;DYC9EVOJ~Z_C6iSefy7F+WSJUnS0MacNrQFxn>VbL=RE6 zZi50$(RJ+$uqCM*(<4}oNlGz0g^AN0x;OTluF z3VI$qv+fFx9!r9c;>jMSBkq->9)J8i2F@R1g_r;Q?WmRV#M65kUViMfEp2*l)gAnB z>{winRNZQ}Ie;_=ZJ)jDkn-rV-ETX6>Y;NQ+w~X^)){%nJ%iagNavZ#7WfrS`QIFX z(&zue0hkZZk76t$0hZnYm-9)76FgJ%JSX&o=3Xp-zJDx$g%=B;U-`uXIH-nh_j(^o zLI2o$w?{hn=M2$S426Fio=X{CX#N7D<#utuN3w)Oi15x_G6T;U8K=Pqr4y!|i&cU(8M^^e_CXonmml$-J3=_fNN@I0&6A%lNN!OLl z1M{8`39!GB)3p4M!eo|z;5?Wr(x3~dccwi|5Ec+Q64?YwBEY?UD@efS6Y57MiJhYJ z=yEcrtM^x=BqjH9m)Q-jKEni65{Vb6(q3Qy7mQBI+Cw^r02C)75EUm}+eS_FRVjo$ zBLoyUCFfnHhm8p58rw`)5}RV71KUjy{(%78M5+_OUeDL_-`^i=Py`WLe$M<_ZcVQO zBG^{}h&M%n$;Dd;#ZkmTN+C)iSmB>He!R!A%1sxgB-8{?RCSWryo)SJU z59yg63*8jV*-ZeO>Vu7fkm)lH2b=1PO@!7>&>jYpILDAdxZY@y*F5>Zoo|`PJ?#$YuT7Ae`%2KjJUN3oV>vd&OFF6ieb_4Ul71XVLg^}=&@+x!2k%5 zBKuefw$RTB0%Pdo`q|ARPr*xmW#ue{YKC+!E;LOI@SoPv>QBK{!W8V;SwD+%?ut~+ zxF2?)TraToQ8XE|Sdshd$J4LihhiZpO$8#vz@>&M4^Y0@0`;Lj%Dx9!=}!fLnZZ+? zA|Not2W$&g^ATHc_{t&jZnNleWR=@5nhLx48<)5ylLwn9ypb{M6kD7Z_k#AomO-y$ z%5?Am4$}(+kd>CZ4Yo-}xSi*5mFFrGDE3t*f~9zY0Fe66eywBCoQw@&O>5UqrNWZk z)%7AqF;{eI9novz>b4M9 z+$wZH{db%VpJ2EHMLa6RCu<2~9Q+-?h=nUGzN69hC}REXtaByf8!giP_E)`h$M!bZ z9;{UaunP>3Y--Ak0iIS#sG9c&e1BVj90I-s1l>H%L za8s~82BJBMu)L=1Obv1J?mvZMA5Hxy20(Q?*DGwQ z6xe#P^Pz2X=BtSdK%joJJVM&cXe2*v*a?Tfo(x1z#D}Nk)_b ziv_>V@kT;jgc$`p?B`I(9PD0v;*aQR0&1WnUnq72`P;eaZO|lj9$PdriOJ6rXr`y1 zg*-CR2QB>AaQOagA*%jSo`=g!^;C87@}gJ?6-b1fzL+k2AwY!;czjMD z1liB9Z?JFz$$>CPcp?6T4{O1XsZNdzEd|4^M6@|K((!jjjG}0kSeA(GNr3hprNYMP ze)l-u*jy`(O2)at3Hz!qlqC^p#L_|Z@#J0~XTWMifcVCksxneFb-lx}A>GlcKc7;q zo#7W2Z+_LaJ~Okf-hSbmz}IRbwIOZ${Aufky>7_s~&J^Bl`bescgILmpij@`A{(e{ z7UQ!HP|`E~#ikB8DuQ}+Z#!vtv~>kMf;P0Yvmg+2>a!tF7s?51h#ZwJR5}j^fxP%l znS*2<7(oQZ59n`9O4&cc=l@DH z>VC45|44nD03hmS1l`V|r5+pUHT8(p+ef%AZQ8>9CXeH0kBKAs5W+(^pmKs;EjPTV zS{$S+;@1}?`9&_jk%%G>%_mk`&fXUnnUV?|6O%}N-go|WU{v8lfwFg!TIjFo8Ynip zzF^eENaGA*gEL^Ni|n@D%o7R51rWeOc2UnaKWM|l=Vl_qJ}ZaRaI0ThCijM@4s%Ejbi0Li`g$44qCBx8Z#e+}Oc*k3c1{Fn8%2 zKgZO=#@!ZZgKIm-mEl{Rc`T7e{|=C4Wp z2IJKD#;bKIfSfGuO|VCABxh9A%a7aDtfz=2luDtNX+6MDKI~fb?5DT{yf| zIGLr3>(N=wmEb6yYnpcp{TY~L%XkRsB0lMN$nf_FKKEWI4+uUF6e$D986Mc=7C?-3 zCsIl9OTDj&j{#X1z`(|byk*4Lq+cUz_yu%8K+X$7RtScnjU*Hez$Z(G!wC3k5Xduk0Vz78<}3{f!5P?(yp z6BJP{AsC4;k9ak2pk^3Qv`!I4z(Yq#^a0dsaNPP-3+oJ^aI&(E3v>O;ZyDq`8?+9T zL2ibI^jL5R>(_Bv#{>bWooml9nbazjfX`VoV_4YR4D1@ znTFh*q)ZOkOg)(>5JL*x2O!?71S;IqzJu<+*b5e;bEnZs}X$JT*{D z+L(xFr=ZTQVxs6leJ8*nP#gxCB@F!lMGK%3S)7tz08Xi~9E$OK^=xq*$c^(VKT7&X z1?=VLK83tsMQ>?+3`F4~cxB6IW%UdyXqpCofNIYI&4r|zp|}tzTQhAdK?aGZCS|8Z zTOETslV*p%`wilds^GHfm-tEE+)2KgU+d34N5<_KCVhJDTA%W^_#AK`4JLdKhAKqx z+5@?}>#KBu6Z9fvFkSIr-5bTeb;W+6&jdx%R94TiY}?J9AJ*~4ntxHNDU4Zwc0Z+R! z156GhNevTFv>v6k6Y2u-?j)AvDGbLC@xdubHedkEsp)J@y-=_Iq7Z-4%n6H-z=$_a zt<=AYcENV$BiposUi9%1=73mpyR1Dse6!FbhG>PvX!RlkYBRsMLXCjw&vDZo`-XrD z29=q>UkZgf>v6i+W8bsl;%leBbWf*Zz$c0ZBwiF^fKvU`k_%#roRS!)@%A*~_kW?J zhtSfC&oMy#`OIYu54?1Wsv-jOvWW8~nM~E0f>Rizz7@p;Sti~y#=;i2C>Iv#T7;PH zYjs#Aj2t8cSyX8qx{EM1n|4>jzO5Z8)-XTRfY7%V1+?BUU1{RC_ei!V?6s>{mXVcs zFBf-?L^pFE$>Nqou`@$D-*(%~wW(W)8JF~ECA7O(8A_LgIxzQL$fn0Le~n@uxS8)Q zEBPE!@>{oL&^utD6TWTaD4~yeBxtDXgjuS+BzV7MR5xHO&uVz&XdI(7s-fEirxRae_<_~1jv~Sp^w4auF?q~OO1WS))>3o{_EXZm+&w5TYXYu6g zVh@yM@DKWO(edT<_|i%#IF?1$lV$mVWi>76ku`Xo475R8wgCcda+hrifwm;ewiH0y z>Sfz83|Gf2t0*?#EKZgkPS$88*LDBp0;GWs^2!d%$~Is@>waaOoi+jeC+!n9dok8_ zl`k#;==7%S6ne7J2(kd$E-aKuVU^DlogSNZ@4=Q|3cbIQEWaWGT@XoL`;}feK(1}9 zZ$RbVTPIgR<#!S9@3l^D$RuyIzCPfT?jqVex|avXl|PNVf1a^jNn?J39zXs(dEoo{ zcc;9KED3F@fhW(EVz=lIt`RW3^ zx&Xno=8@bM|GiuQ)c@%Me1?YyP~5`<$X*g?iod8b)&^!K9}UbbjJ~3q8CY8z2(p4W zxj4DF0L=e1(s~HIaKSfs5BgrApbPu{k{BDHwoBBq~t!xZV%$oa0RW^5CT-}V#ECeQGrIl1~?HyfR-({3k zpIu&Ol+`2^RGyw+9i5&>q!nD<+!fch9G_h_cMnX?E&VR2a1BrF9hr0rO|T1zb^ICc z9+f;WKJ6BntI zU_4v;7o*NVb>U>bQnqZWY)#R0@#iYb<$;>w*>e4^pQLiNCG%D0lSMj%wWW)7cAEpK za&=|PP2VmLmIv#~SKEBxP|4)$E7rS0-Z1G7)mLuzMp4P7$v6Dj9!%u;x-!&IwL6+2 z7E1Q9v3h^9K($zRxUuGNw!&yI?PF8z@nXH>;mT|OA0^4SpA)NYxu2V8TC|^+;&QN` zpAp1(P>>UEc~Dr8S9DNRQhRVv46W#4eC_{V`+xY?{{OZAf9?NY`~TPeUr<={bXD<+ z_s>W2qu2ibwf}$Z|I@8s`~TPe|F!>r?f+l<|JVNiwf}$Z|6lw6*Z%*t|9|cOU;BTY z*Z%*t|Nnow|3~Cd7D1b)3jU}6cQop4o&e>~|I`1=@-t6z_s+lc|Bl%Fh3PRfyrbV= z`u|fcQ=#CgQ9sF-{y)`7G_q(YP2ehvM$kew-F!5{6eL8YW1-->Fxk@Jv_RG}uKayr zDqr$CPE>F*)P`@mJjl5u`nN^&pQNm^c;_DplkJCK|4QHzO@Bi*ABc^JL-2SgUDvzAT%}x!Njqv zZ+gG=aA}?U>1uDjLvmB6&}H=vez}Xg%GNv2|I+_2ZGZZ7FCQ%M(*G~*Fn@O&arP!i z(b(S+MsgohZg$Li`>ZCIU?vJ*@qg<7U6&8_MjLy>g>Kw?muBH${opiN`xbC^4>4(=PP<0DYv)})aj0w_ck0km)kG!FJFHQem)5l zwrDi=xWHi`xR98iS>SlSmB)mh=n-sPZTlY9yE;QH%ztFm`Y2ZYwAlv7+<4!_h@jTm zUtGHLrE&L5viH<9~f5g;yr@}J<}2m62Z{#ozPpq)%%^#?{}luvC}m+crA zKLhAtz@1qV(jhDbou`w+%*JA0Cq<*zIsu+wSV+ddYya_%f7SlJoW^ZjR$U^-+$>h% zM_rsA3qsWJ6#uUMDgIsigHzgXs30GyTPdoAsx82OtJ>Z-|7Y!w!$AV%gr{WMf_!GK zBTN=kN%?o}|H-pcAga?hqf!yS5P{Hu^>?@Q5fHY9hQkR<7y>V*)M3!vw%GGf`4aq-*uMn-7b4Eay`Clf zt|cAFoq#|nK|nY`?~@GW=c!)*C0=j&PUNEhX#N4dB~pI!y_VvAq4Ls1+IB(QH>)!77UX(_@zp&F`%JUo4L6}rUhPpZ$Yk2 zEvt)~wquDZ(ER_e{IB>g<^Nf`e9(kE^#4@;%T&kIb8>Wx%Tr!_bTg9wG=QmYi4EBs znk*q6Uh44OlW$g5_+cKuXBGakvxWjB2`m6q@hJR=@}XV&m?>Vh_Vn=&W&fkQ9CjsI z${4b+Vd4$}3V@O{cP}&4?x$$d&!T#iF9$!%fuWW3sNk%G+IpN7G>!{qMGR3TY2pza zkzX5$l+d2W0daM3^id0&F`2u&+Pc0#)BD$+GIzeU|b18pkxO$ zOY8S23IYI@Jp);S9Jw-0p(9JtJ{%TLu|a!+nx^VfzMQrN(-tOSn3>1{nLHOJ)mJ}( zq=j-)BsEltbVhTuh9JZPSuxRxgPLn{o?5XDU~WsQ$@O!5Cy{=Zf7N>#3r z;o+E8MM&1O&i+*T@ACgM7ZAm{pUDJ^KM)HPr}o|p4M`RVWSn3-9#%t`3E!M)pj3YV zzae7HWc#ghKcq(VKiIpgs5qQ{QPYiUfDkMR?(Pi{`P`7l&+FQuex0;tk9++#f#WS&WdY#xcUzj-vrEmWul(FR z)zM#L!NjQB1!}*H7NLE#kvWBZ()sZ$bdn?EL6bCSNPhb0eg>Q>c0!XsW*1}rXxE=> z-Rxzqqmiz1YX=X}ng_pka3rp^C@d}sq=E# zo9egV?|F=)rOw%g-pV=9y*3|{F3YclA-Ae79{B+p-9e%0;aOdi z5nWjMJ6*wFE6hx*Q!L4|NQx5@dXux7Q)YUbJ1gL_6>hmzhy2y0C+hiEc`Fk2tFsGh zS9+?y^p`L>11c6sW-nRSrhwY(&Kj=rU|v2viI(Rfnbn*Kd;zI&BO<3Tsz(Jm$4X0%{{^|c?4B$yMo}xGAGdCv73^55dUpEQ9BB;cM8pexnj-eajx^EIf zKfcju##h|*PB2=M`As}$^g6QsebwglmSOJFCI#&l!r>-4%;-j9i;HE8)*ZI>{$iF! z(fDVAvHQiQ$geGixoGAry?2sAtaHX{WyZhWn*<|lv(rX#X{>Ux^7BZVoSz$Kx|l?o zZS!Hx2|$}Zkg5qbZDT}k|M;`5y1OkLQYu>21RPitp*0m0+qvX1^|slO2#J)o=alu; zl}Oov^WCwk-ssgB1(u z!7!tBIMzX$Ms)!}Lw*NeA$Tb%g})f8TN-lUn|sjJV4eE=01IkOYi9lF;Q*f0M*Y>H z64T+8f{mk)O~~3o`FKhrY`zJ~-5R3*OOdIK*ZOD3p^ujh7x+;2&*2iuQU8+-A?8s> zM@66TRxfXB52@Zzk?ueW_i&8v?-a(-4wey(BcJUfA@?KL_s660tVXwSsj)TfnXI*` zBH=mO<2YqI=&NHJ_v86-Aam4lYnI(|%-X8(@Dg&v3RGjW$ZTW4cpH3d&1>gQ4gF+i zFCcC&=xxuHY0n!8{a9{~KL!>4W&d#*dj4o1i|$bP&Y_dpq2uy6>f=eH?n#2q;B}1b z?b_lWD0Bzh#gyc*r|9qi20s-wKMH?>rEvY#H-n$(xmUCY7<@qZD}xBJL((+5H+O_X zVMOuJ#~|E6D?ZKt<7hr`3R*i|e{yt8ImNM<#7YIfUf00ma|$+hvh_JT`*hY3;^Qu7k2psl8&H=t$oaA3gR z-Su^#i?w2+(__6cW1iokQ8MFXbL6O&<65_1hv@N0T@<=sxR_jQMPKj@R)0|XAlRud z^v#0JU{v775!mdK_2x2;)s=|svTw(Q@WLfh$JNRHIn6o)&DTpcTgh3}Nw1%aOYO@P zUvBhYe#5%*Bfauxy$S%kQvAKt8#w-yDy!*Wra*Y6R?Mr_EU6=@yYb(j3+E+*+N8FMY?aBbGvWFyjOm8xquc&%;Y=8)>* z^!K`>%pG0WLxt|fnN5VHQ_>y+`aSsDJTL7u{Hnd|L>q;lfDK=k>eI=)puF{^#AvB(|2~A?mslcgR+nQ)&G0l z|MVUAoUCd!Ik}s)p`QoySA- z;C(%vSG9#@RyBjD2}^6X*UxI3rge=u)rK}c%f{4_ywLlV+6PN9?(Q4+o*UZ^NJFm! zW3y}}(8MQD>fz(HclFXEY!K-Y^y^Xd(1$qGCrIgW1f^k;?Q0;{;}oI8Jm1QMfe%`w z&G6vC+{EK*zR$?_uenOz%Md~zcOSaIucL*fznXoP22(aYnr2V>{y@HFav+)SDF53F z;Gh4Wya4I3{Ryl?6u=P~>Txm2?BAy?h#aKa_7- zHO7MpEWg#u7aOeS>+BA%?PUBZ#Cs}rYLkIzs90OL3mde6G$0?v;$$Mf@rjcPB z#Tvlt?jFhZ#<{~HzJyGt8%%F!?YzlRCnH6U)% z4Re(M2;!(C@{5;YY&DJA8tdOtZ^bN-gM&X73y2QX14RH?ciiKX;8m<>Qk30y$)d~$ zX7kdS-wr7gA%u6wp_U4%(>~h)HQLI6DA5q0X;S=aU$}ziEZ}itIDST?S5i?v>09Y% zI{-6jNHkHyi{UH6S3?!k#LUlH1#FaBjAf-|UI~e=l}pcTKoqhB>Ch`g1Bo!?Q&9$P zL%hR^#*PTw^k^)b*9C)1Wi;a4X%v%qCd95iKzik%9w0Wc>j2Qw7S9}Dg6vpWXOj}C zQU^hHXA+OZY>+5ABHgJ1o+|G67Zc!n?fD+0AF_49{aRpzNyC5Q?!rT4ajI#<|DJFP z{PZIsgoc2kqNe*DzPI%Npg;$jfmz5A_YUO)yE1Af`c9Xq0%pU2WEU>TW{~i$H*}Dk z&$b6B)c2biAedi#US+7LwcGM#E{b_j?&H&?Hsaq+ZdAnZ9`?y%(bw+@WXaU7fSTfC zlLK-PAKM|6S`Ov+D7ECu7zC~4I0z{16v}WUdV-TZCKj`@;ej~ z0w5;A@J8w}{O;Q81^Dpe=G~DFEbrb+WJ8Cck>%eooDTS}UQ=uESDBt?-)%a-N~q2g z2av*B(JRyb4(W(TD=p!iWPIb#1_SOsta=R&mcRQ*Z2Rj~^UCu{u1qYD@YBB{=8GRf z+7on;_1#XlDt!0M&xSrA3Nj#I(tAZBfY5K#h}C=LA?Lbno`V_F6srOUl^PURc;OU; zOo!=*PAewnpN136Nc{eZGX<#DuZTs%{dOd5fD_OnPtN{l=mDO+12E)ZOX@R=V0+BI!93h@6CPFu0%TXd8A8`Y}h6soyRs#=D zeL!CO!;HnDb+GkOMPbbL)6xMsoxox#O6!>@wuVcuh?|u%QLPE!v}8c`Ksh<^x3+|_ zN4!c^JY`%GHBI}_h-b)T@;1i;GqN*E$PPJzo;BiolTS?g!h>){a6n!+5M>QT5kBVx(Xfls zi{ijzG2)d$ zK$h3BMURy!dzp4bgP;cd=12ey1F#@`LavZ`tenfVX2jspc45m3UudJxvDBnHqvv3< zjIn-)HJYWA$Hp|3p?kHJ>I{1fp7wtDsC9?l(zVD??axtc;D*HC-P}m+Pco{H_K9Ec z+D$!}t$AZvlD~J8#UfP5R`+${0v{pk=kWfK(ZA`X-3(BhF!kLn!Uv84?v68AoG6oT zb_?yyYqe2!K7Ys%JclHN&(&R{c8snTzJT=4U4wPY-io(&sCU$Xp)%x~LqW8>GLUG} z`uz8IsFg^iL&_1(Nd?RjQi8Z)u|x@pnU_0sU$t|AsLB8YV#9hl>+{-@C^MMgqI3W$ z_ZRf&Jxr$7kLFl@+Gm30fl+rK%&@p5^e=uastNEqAp@+9d*3O=NW#DI!_65kw`_9s zq~)oNDzK2;=et2ItAiCur$-0i6(Sb?DZAqafJfhC1CU%j*IcrVFgGQ15*Ejcr1M)% z$PpPV&4|pXd@MJ3m=mUbbX(jdI2&@YzS4uJoPQ{jAX1>I42dyOk0P-HM**gQS(D`R zxUEPlWDy^hS!%xvhFA$J+smGtt~i*n=w1dO!0!zmZ< zZ^$V5^xVw{+(NuF6t=9tH%U}JK?5y6{@RyZY387W0vw+OAKcedOT%#}Xw+hF%Hn{m zLB|NgI^TQ3WI+$_kXzvY?wGOiN4dn3C(^7W&hSR>i=eFS^{JL z?bO{2TMvu>7mPhkKGVjk{-H*)0z?E3xJ1=g62-;A;6JX9hHTa2J@6xtH6NeJP+z(b zA|U|&-lw5})H?dX_Mh5$*Ai3)ZjnIJ!;PY$xnKJBHTl1m4_H6`nj!@>D*ZaXjJf@d zt+ds5l2J_cMtYbZ+j~~0*^F)5Zc>RhZq>y*j6%*IXiVf))Xe#isU=9E;@}23{6?9G z4cxT?of(l*T4ez(BX2#kfPSPW{tE_X3S&rJW8nq|XJkmKpoym+fPt*cDB#p_`0=KG z?_Sm>%xXQ)DcinpdeaWSB+Wpx4GJV6B?n>?an3e_A%H#S_jmI8Tyo34@gr2waZ3(x((odjgaX-* zVr~57a~2Y39`qE8qQg%bKUX@A)L&WG|8xc&8Hh1%h?%hNLbSEIU?_!|gLO_WaZ8S) zv5pgwi!hRT6EFWaI1fpf;&o;=6{RtOJq5ruciTVrk%ycNE1hhOOlcPzV~!FJItPZzEbw?tf9_L}qW1*y^zs7?8FrE}OmN-(3(50eb)M38Y ze-8(w^WBOjqHK=e7UBdktZlGrAo5)2{6);YdToS8u$@doWqvt{ox8~|xhbfKh_Ai* z{ycBG(SUUd_{uc*)#oj9Lt{TzD$R{p7{4hObcG8ZM*vLz7qx%~HxJ#Eidhm*I-#Er z-I#xiim+^xo-;@QMkVpM1FA7WXfdH7r4|$WF2Bna!8EnzkYre? z)WG>_#)#ZiJKRk>j9Ap#{nUcAX2~ptTISK*i@H1NI|lloiPo+|b#ls)EFKO-UaQ3I z<1XN6azd1u*6hw_#A)*HMiiTQ26biCdd;R$igfBSTue z)HcupddVHUgDre*LtWl%LaY!;=N)-QZ~{k>ex00zx(g^uxu_zW0u(fEl=(sk6GgJs`8Lu zk?qQ^?=FpQ4)_xmgzdb*i5GXbokn7`h|-SK-gnoYQN}@*&IG1n5qK`$Nn;E^m9t4$ zvdp0en2J8%J6PftBatHN^oP7|n{~(S2I6&3zcu>9Vd?nUV#W;8D7puz1A91=AO{u8 z*3M|F26-X_ynNN9C5pU%>iNJE#l2e!wa+uj(l;2{^HnU#zJ-__SV&lc{k)29DJ%hf zB`E?<(PUlwL?R%D8`+#ZsjaMi!d08>&h_O&3!Gzp6<6`%+!rUI~gmgSv z9;@u>JxMpbrw)n z*15`Qw7ifx%VYvsQcym6Uw#>*f-GZsJpHQBVWsf9$e(*fW=w#Y66=+{X85jBWMElS zS}OsQ^J}Kgp8ndNg$@{#F13w=@`3t_RXx;7t+KoU-ntQsu}OG8*O#D~)w(^z1`t)= zfqN8lS3X!L(Pg~e6~e4TRAEnEG0Z7DTxIJzRr)(&aA@xH?*V45oC^1iim{(T<4{{4 zisT9S!BI-1N#}hc0z2tB=4r3jldLS}n3ca7D*tFpOz4MP$6>BMoEAWS_TXq{w z{j=9B;+R#N2R6&Jte+oQ94MhnV$k>@mThX zwx?o0L;|8{y>D!H7}LM^4tiJw^^lJKw!#Vp|5yLddWu|qip6$DP<=+~PynMpPG6W} zt=`kGy7)l2uVQ;>s(v_! z-Yy;A7~9{uOFWL-J*7KXEI=QwtN+5-04VIxwd(LOhh1=WDG~cNWeqI75+K5kC{=@K z!Up$-72)}D@RJ?#uOnm_Uk#Gdzxw}J_9vcdl;vu8?-R6j+h+nGck10g{r?2}tNDNR z|BxE2=l=iqY3wyS4$6P^|4t~)i2tMiUk}6hri`aqi*LX|U~%U1SVQ1ZOZbh0Xq!DK znB#3~?c2mNyyDt-)g14eYu|Tr5D(T8PjHaT*OIJrkV0xnPdLbKYRUd`kfYR*V{=jv z)=`jgQqt8?vT;)J)lrFXQcKlQD{<0j*3lSn(puEfI&ji?)X{z8qz|p5kL6@Ytz*dM zWGt>@tmb5Du4C%tWFD+zp5SDeuVY!~WQEkRo^Z0=)Uo~LWJjrI$L8W7tcP)sadFbs zbFy)9@zryQaB)l3b1QN2Xx8%>aPeBy^Ezr4 zQG+c}6a3NhEz#@zF_4y+6aLtnme{}iaVV{E*dO8vTjR+-B+#`c=r{wP?SL0UAa;0i zW_=ryTv!>OTlTAOlaQl{x5TWH`d_PCyM?u_{z*BJKMGejcQ<$U15VFE~$wqzp!lXq_; z5J!@JGYC(^ax<97yks+k*nMv^lstrfD~vkDax0v^sAMaGxoK}Jl6`=FJBoYGayyzI zT(TV_c)hnB3q)qvi31T>?ZivdmhL3T^X~5?DoZl#CaGyy?IwRVFWpVib>H7jH4I?@ zrvTZ)TUUnR0xmo<+Q0X-90;#-#t@+#>->knF z0xyOD^@}0!VhFq#0xyQZiy>g)m>|uXgi4xH5}x;B2)q~qFNVPV+ZRLN#SnNg1YQh* z7enC15O^^JUJQX3L*T^_crgTC41pIz!2iV%`2V*d;F1>aWy+EIk0DUc@#}{V75-VBF zrRlNE%R-)ZE5&t!$xLLo5(&Fa`PhFM0#+iK)*8)Av*s*U!;#&F^gV zZkFad2MDVDg=~!pGh}*r-RqLukEW~A7bim88{~p*tu&XH=H2V+Yuld<0iBqoYxkCZ zA!x5(#tKBzSU1*zw@3SF*JM7Vg&qzI{r03>)8gcIXH&0ChjYraA;1>u zIchfUoS44?p47M-b?b1+x>oTw^gZ_mohYroIcim1(XX zaCivJG-lb98ax{UDBcTHSyz>*U*}X$>idT6-J9y)9s6kfYF!q-@$CFM;bg(OdZp<4 z>+tP~H;UlugD<2LW$o0AtSuAc+n0fhujIH&4-30%Uq<9Up1JA!?DB}5{{HjfA_L{A z{Ug~2Ep}MaEB-BWKolShh?*Ccjs5j#Rp`Dhxx>DA!sq~B6@{`#|GHCz@AxnjDOetG z)tlQ*ffFAGLY%tk3hihP{`Rq&x&YCyZ;KMQ4hbSBd@_Y1QeQ0c>yaEj;f2fT%_(hQgBYN8+ruWREPhD zFu7L;d_kA-M_^6&4}VldL@VIV@4(&nVcGl9y&oF5xmF1On$Wx6iH-Y< z!&Qh1Ac6$ydu_XWe@=<>?T9l*^#V;nD(^vTZ+az@KvLd)ERlUOeSPBPAeLW!@|U0% zV2d)I1Vx}=%SDF@s9)`CK5|O`}KDEVF?nQ`ThEM z14fV4x>1#IZN&HVJS6CC~3)#QfcbmU&7QVil7MAfHx=ApMD2OkYr15>Z}LSalmwLljvDp!TwgWU3uvdXULM z%&3(wwF+u^otOL^(;sbz*?Eco-(z~qp?}BpXmX5Pa&>Jr(XJeMh?v~}#PqogJ~YVx ziXFokm@L`iuo#p?xmwloFp@?sIx{S`MQz*EreMO1Kd=Ko4U1sY%6AVFhFSO z{zUKM`#BZifQperz%l<(NE_u4 zCdosC;ujeb&$EenG-VNxJj445c(*Dnb&ksw4A5dWU@sdbdIFH3uvDRl+C2uD85?xW z3G&OCd{p3iP{wg9L%?Uooy8d7&gJkND{503vdtx|8~blPJ&Z!oUzYZ@0``>(sap|A zB^CJ?#y>rMz$D>+^z>TO4{dV)+0zr8?o9G-tFn+J2}Dz|^h*GCOhWA#NtghQo?-h4`OyFD>4EJ^fn79x zlQhkU|LW;+M~PXu1p8;0x@UQ})PDV|r;os#RVA4Rj`FDmb@1yQjx{K@=2{PCDSu7VbIrS$#d|a|I;jgfzvA)?o*#Uz zq6(9nwEpqOMtA_soB3^W6(MqJDjG-xaER>9Y(mb=(N=2efJ0_3n=ZMzh z%0BB=wEfQX6(Y#;Ed1?xot*(0Wt2lV6`#Wec3$IBnX`83?o!p&Qe6HL zhsjcTe{oH872?xUgZgq~CVxGWX5AA*b1+AP+49duozi3-nh~8A_3Db`vdZ@5F8r0U znqxc*G>bfKC<>Nw(WB99666~=2**5?*0THnb7gY@t zRt*r`8U8+TqUmo0bbsLd{mL_MgJpRG9l9~wZx}GOfgB@%TV=>_x6$&-D5k9Vo@euo z0p8r`Ai-$d+lVM;p7@&cop}jCN;_VM0mXP}T6#V?*ob6q9;0J3untB?NjgTY zu?6!p{?2Lq)p?UP%h+yaOW?7WDyE$=MxR5!l*!kaVL*&~ZR?YYN$sOCv*Z@5zDcyH z@wtG>2ZDCqEEB%zZF+lSb}S)In4T!|8ehjY^V&Acu?h2&2|w1hgyPN``HmB}DY>ty zV2o+?chgu-6FDqX>2Xs*1heo;)Ay1)%EEH;1Kp|vVG4?znnk*wi%JxEcljlE)v8P+ zU3Qc-c6FeHTI0+bS*4$@cejqrWbw=+0p_GS=5==Fta9cUO}oatU|s04c$T^KT&c?1 zf+azr?Ht%&2rQAms{uAw^ENM3fCOx<{}j!*8;f<|g*e$ayA5c0!+0kf?u_U{AaijL zBV>qUmA02+gL{mHFKjIk*>tkkBGGQIZq>|eE)`R8UAx27e;_|paUd)O9K%W!Gbb3W z|2aNI(l*P&FJ&)yO)z0xGlg|9oYd%E#WJo+FjZJHV_fZf%>MTSi$t(l6oG|}Ipcux z{x|bI7i4Q?Tx&3;b^5@*2K8P+QBBDl2$dkb=z2ei*1WWcxxm*9HEX|*-8y#ezz=NQ zdu2_{W%*5VFM`#YZtb96(x!~Hp^@OQsVK79*IG~BrnRG@BZd3z#ZG>aP3PKX4{5{O z_eaUdw!O4#18W@pO?%nyN2$TKpyfl8wxf}bgRv@`iH-)?=$z`*n%d;GaUa+=1W9n3 zmSv7rc|L?`0WA4P@wngo<6;x@3a|VsDbt#;(o)rN;@Zb`N#-pAsqH!KjTr77UrDgO z?ykPs43>Rtvb~uLbh-+<58giFZ8~gX-J7#NK{kS}@t$3SF2D?z9iLCL?5_wIuW2oA ztL$!?jPF=2AHcTvA&iez*5`Bfxw|JH{+#GxIQEh{Rx_UVDLS?apNd_dB?Z<77=ADHs=^LtCu{Vpt;Z%cX8*vF!ptEh<4%6a2c8V_3`hS zK&P3I(i$(DfUuOA$htZ3#9kEJOl-muB(ly^Od^48&Es)dXX?twdx_X_DbtK0eNrmR zr>~GrqDZ#af_ybJ;;Q-PidE!Fb$(Ud=@W$<)#NMb=(^PXy4We$AZD2}`!cX%ygpc1Rwk9m~HoW*2imvGT&Gt*IL)i1Eznj}wl)Jg-Kf0c@O5f3VZ1v)HSj>}yf6XL=b!CPy%SpWMG40Q%|w z$pIi5nw`L!M*%F5p)MAa^jWx!K-{OBy=G#Is{Ml(Ji^EfpFWcl3>AFuQyzwp!S=F! zH`v~96FydpO1as>yRU==2o4454u$lgf`Vth6P z_RkB4MK~>lgRCxS$A9qJ931Um6f1;chhp_PZ&C-NgHSYb962$93K2YsgRV{q`h^fo z?f|fZE2f1&gx&;}<%HsALqG|g#2QhVT=dPdu+Mu~Vw7;)rm=b7l-k;ekD<@-&Wnv6~ zUrf?HY15_ONo%DWPIY0ZDDQ9(CNrSD?LsM>%$d$`8ecTmreH+dQwYTM`V@gOWjFx* z6y-FDhMjAOi;gYiIQbSkcPb$S&XK4qFf_rfpd>g!yG${h^?Z`xlPvvI8A4+jO)C8p z(T+_?jCN5~`~5wWqKyVJvpj-4#|$nljdcRUpfGnogVpDNgxVq8!^E6o{fva%<>|Wv zkdQX7-D7 z!8QjyuRgXF)Nl&<;G&9$=h9&EV>#k>sp~0SSMPD`=Me-AujwY?(h>zqod|8&Fg~1ZyA#v(2XfRC{0@ZpQ4H+w zh=4etz+t8QbL-!gCCrJVDcu)@AexKLaohA5f8^hxP4H@OvP24wTovK_49L}xLEfs2 z<^luw1RvM2?dfPF{J5$5uhf6b)osz3P|3M_ICsYnO_v<F=}B)DVa?}$`pPkgDxO>rgetz#g(G~5LnOb0 zRS-E&)+5(3i{KJIgWMSY_heGn9NujK6IIc>9YG}r%d=`Xzc3puAjQ9*`2I+YW zqb3VQ8$Ss&V~SuQZXgmls+b`rBU2)^D>=sMJ8Tu?NgD}AddUwmIEElRD&kFsyhL>M zgx25suxak@l_hC!i81SU(b_^|7M1e2QeS9QVOdt7LSSN<$QeUpDUFM%;@8GcVpB+{ z-f^ODZpm?z{(I|BL8F2ifa9p_&!3iy?W>$ENiwJs+`&>-lFq39O@Q~hk+bBDia8(+ z4Pdc!S)wR(q$(4(&<{^ufY8Wff`qQ6vWc&JJ!&F%`60e#T$YmLRhN{)+r=sS$eaT8 zG7}Pw#Xqn&r5D;PHjuZ=i>hWST35}bQKRbz+=rAGk zwYojoS!EpRR?2w%oYRZ6s{Ylwi&gn^=_|8P=X>Roh~_ro;VRGi0X^?C-u6z)lkZE1 z`k7)L9oI-0UMGh&R~-Z$u=`}|uOxfxe-Es?5Md6!*n(^@c)l+5waUPCn++5M>mEEs zhX5o{Dl#6RT#-JUaN9NRwjorQh9pc%-gypN+6Y~(Bmlq4kqY-PSQuBv51ydQ51G9S z4!cDq4DDapf4QZxqbrq<(ME{J@Qiw0V(O1gKxPa5(Br(Ss=P^QT8j`v3aZ+rSTYM+ z{{TQbLMNR*n9DW zLwLE;Q}fKtMGD5^1h1RBNk|2}iTYL~YwLFrj+wKmCs{*kqbi?lL69$lLa;M^6!?A0 zb@i3>Ikw`5`U?D41rlk;r`2DuA+MnfUiT6%^Sf4jVg4x0CB7OBu z?zQTGkDYe8EB!K-K*s9m#kWs-LGnVcai+lZ!Ns8Zay6MEoI{DZZvRZg%&|0AFD$m*Y-2r)<55jNyIsvj4XGCh)NY{;Pz zPZe;6RsN86YdtLtxEU za(lk76Jwy8fCY9tsxr@%Z;F&^8N4(Nn7d12hSQ_NH8UTFO z3rNTrLuO#4{^*i8lKzq>}mm45UqxHuzyz$o`^vD%VH$rW5jE>f! zL7PCeTvV`rvbxbY@rE2dIf6ir3@``LYiSS34~cfogdx|=b)$vZVDuPYSOIj5)O9Rl zuvoZ(4iChD&psXAz}3)u6CeexFhZ>}yx30$jpm+GlkcwPo`A?_(AF^l=qqp-?+7GU zR}>hVasdbAaOOrEGZed?n=-f29-~_rQ5585DQ|nWl+FwQw+6&>l*DU!FgQwbLfIe& z;f)h{Lo!(IlipUR+1AQa(%;Eg3hmAL!ahpgt@~Y4YV^tJN#Lu3oL6xac6e0&ZCl#5 z#(#si-*3HL{1HTdV7#bcLaMPHUfRW|owwB}!z{VUjO_Q`YYT87fq!ny4L`o-v&mLx z#D1N@t4hMhsjq|-f4;e~BSdZRz3)O|{Xr73wE_*c2IxP(8>hSI!$-a?yAMnx~x*00^)J*Xta=NWoRjl&U2_@ z$c<$|a#)*k0|h2U;if5IqfD^b<4SVvCh&3CxoS~)57N-CHoXY8$mtHCpe2LxaR1<>X?QOX2W(FTu{1c#7^L1x$pPheNEkqm&W+RaJcV=WMiXGz6O6=+)D&W@vUj$q)=J^ieECF)h_ zg0SRVN@amF%Th}Je4gb(6${{poylhy%gVs<^4#$pBf(nT@hIc&TKe(o67p(KbyuTmSDzJZ&YI?|yOCnI={yEGw|(XU{9L2KS*!;| zRR>k9hfP(70?>{7!M(YoBLc~zJiFrr`)_H`!|SRO*uM+`Ug+_)4Yca$EJgY}I{qRQnLE;*$|MlKSQ^_u(!Pq>A!M6z7{w!JGH-xVY^GIzB9JJ>5;tGKfdwpzn8Up z2w*b}JGq;yep)-Z>u@mLtDYWUQ$9VJy03m5ugt}-fg@vwr>lWyV@KetLHNfIIE8bm zLe#85GGIrxs6lpMM}c9Sdb<7F5I{?<(Z@V}_r2yB5Wr}z!N{&TYyY<)fRLT=>K{YE z5i7q2`|p1@1UPW%YX65JAXST}#DV{BL!g$xfrIcr41v&EqS${K0@)nzUJL;V%?1er zZb^#9(y`n!sSPsO+_J?Dven#j%?)y$-137B@)O(&^9>5?+=`F} z#S?C&n+B!7+{!48%Gf+AgpDd>JgRh!s%$);_!>Wn@Tf^OswwfPYc{GI@Mu^xYB=y{ zdNgW&KuWy6*k4_Q` z${RZRrWaOHimJlX3qsQJQj4mheiVm%&mWwaiOwqaOUkNf>i9i1cXn}I)zaBHG?rFe zJuo(1*VYq}QJ7p%QBc$TzmwYke|PN*0`P(WR5Z+4A6B-2%MPpBt`82YyO5cVYWfIl zj%tT!%a7_tc@K~3CncGV8)h_YjvE)u%a5B@+z*eNH$s@8EjuYT(AK@8a_G;arbFnj z(*dTFw#zx2llEJ1`ANs)_2Ee;0EPLq3z5+Fv>TPK;>eaWO72;)L)gZUP14>aml|0%63&X(*NOVz1F(5P%m1VEF|BctHSO5P%m1-~|ErV4UO> zki?vq^rIy41p#2+GPa2?vdgn}9;N3c zzGnAz4NS7IpWM7hqjgxQUyCGoWTthzy4Jk<@uXc7{A!&PY2BU5;GS#!BD3jQ=;Li8 z@XpO(G0#9#XPxc$`aMe;w0*tg!2p(=@T9;AU$uIPzmaxjfT+QbP-TFU(g4sGLsQ)N zQnKg8%Z zXOrN!QF!C#d-r_ODn9Z71Bz>-T$(KbLE|rSTa*L!G%>ISlC{rt=EiCXTT+2r*_B%i zq)|-vOUzh2tk=5i9lC7hMx1k79m$(cZ?-9QOgikgapX*VyiMvdw>6?nrnt7b)*=Pw z`USDJKF*o^LEN$5-tN2H23D;g!P>o{lBT}?JCkKQtSLJ(<0*3B0r3uQ zMS{=Dq_RqqTk>-|IO?X0Z_K{v?Osst%G&JON1Gw?m|cC{{iG4D1)I|GHP#>4-M%st z{2{w={(r#)pa%V9EtC%-c8S8Ufuqs=HFj+%QO?k~lYr&Dh<`T>1y^r8pbPLS^ zux(L|bH}Q^VuRDTwEF;~$C{ZdFNFUSL?95-3HxbbGHOw{1hGhgcw*&x5rF(z8+>7) zK;9Lsk6;N}OTQ-6AYZNEru-06?yvz+OIcU;9jM%jiiDVe4vB^!a(Iq{~@iFRVwe{AwRS-U^MYFAe z+1Pp?;Z__C$=VKU9CnQF4HJMx)NElBir|5)o!{5#Lj%^+AzXi0fpfgflXFMyVB2B! z<1e(;GX!?YRdzz|cA_12?Q;jK!rN=GiuIVol_tT>IpZx-#f5?6u`D|*W2mpF-3C_s zevI&uyZ$!RU@->zUDEzzIdnS&dctbGI(`JXw!i2gKVCD1G}%wOoSf^gUB;Y@Wt?0M ze7L1`crte=RKYg>a^d@+CrBy zXt0V7faAy3M8!n0y3abDkU0I2AK6CWl&y$~3vu*~aC)3`bbDoUpz44VYlkdy)~awe z+u;<2di?#JGunyMP}P|=7VP{M>zER9M%8(ULU!s!dHy=q5x4k^EY$g%%z4176Qc+e zhwY3Z^@O!^^DSQ;F^UU`hZ7H*3(NXBD8*UL$(fe#;w0JyPwIrpVgCVq!SU@}aPUY7 z>dM6C$|>dIh3+=;-t8fp zL!`P*)k08xUj41Oo9e_Ry15(E_gYPdHZ5#H-QtSRH=KH82KsD=$bhm+Q{NG}0f-P=C zJf7SCakB~Dz8G`olikq4+o<{5=+v55`Gg|mTg%-Xwg8&T~tgg^v1h!-Lf#%zJ<@V z%7VWMQr{fw{A8!ht%FNd1`oa12jvdl-4;G- ztdAWc_rHoCVQrm07^yz?A&(JQPeQ#9HGdzmCLWC;56IBR>i<^_U||Al2?elBhPqOm z*-iGfnf0p<$`K^{aQ^SR&n;g=Z{ZeWk&ON2(`7J|8(=$wzQ=se;hS%7F^Q|%Ag$qG zH2qMZ{7|s1bd+J1&&r_hqtvqlu-J^cgALe4K?T60;4)jDlJ^9m6LQ+Numb_1xOA!& zmamOLk?;7NkM_=}hTl2LfO=4ESa~9b{E+%oK);gW88w+x^BLf&Kqt?=HWh zeE&x8pTICQ3?0(l-3Bv&Lx_N=lyrAV34(OT(4cgKbc2!(AtEI$-Cat>KeZmyceExrZQka{z7v_~qD@T*;m?@pBKaD}vZaPFnaJ%H`Q)^Oq2 zSk%-HX=DSUgBanYnT9u>hciaTe_$1vMZdQA-(a=mS`xroCi5P_Y7-q0> z73pc@6=|0@2+{+!$}o>ky}fUW=9K9{DgoqE4I@r;wuVjMrcMrVs%#|nevgD?@*FX$pvxu zo=Iua&_s$La2-9g*#P#KV{J^#SQuE*A~_G?iZK&*PqFPxdOY-%7P26X@|n^XmI#yN z2u(!{XmJK4PX&QPi9TmyKW0oQdjm-c~vjR!!2zzO|VldKYcyei1 z+H8wI(f!_GrEyHKio(Js7^`s^e50A7!?|T&HL7~QGAwXP(GiBFW;#VSD`zBXAfLWFC9%oIgtUDPZk0W%)ut9+>2Dv5NyqfQ0zpkte9tmtmNy0 z0|Ym!LV$zGL>QDGI?)3Ygdzi=&d?VD3UhAuVlbw)@?XPCl0gY4D{q-|@!#Q^Nic7>VKUF%<<0RJekVIZ|q)@`VQcQP{=86>U7?~9KDZw z7IVEhajrJ(jdNaibz=5Gmaw6o7`TiR6V^N+PED9M!RP`Z8CMO9q7Nj`=(?i6gR*$o z59b#qoD&0JABcPV;2!QhZb(@v6iJB{$f9VWtUxw56tKUVo3s5GOE#wb1t3kSsP!1a zP&4?l#taw0V(tQFs(p|@maCvPAX>#9NTWF+?RV}TONNjjDkSq<*FcX9D%NAVXNtxQ zNT8N}Mo7~gFa`N99ss`#N+lj+xd3{LOA4hrkx(A`!EvQnEsGne4By2FeLEW53^`U2 zc&{ZNKm)K$jYi`no0m9w!zp6kKBqI|6>YCe%4O!MOys*sGRZ{_I<>qr-^N|*U$Oqh0PiV>ai=o-J)MHSpaW9d66>oN zUT7QdjSd-&)YrYta`XVr{X9=cT) zi=5#sCpY6(gZ-+bw)wlN>>z^0@t4&3iww?=Dbb6YPG0SYhLP?|KWk6b4?dqxCi{uF z&);10bfRwWs$r`H%eG_FZYYLhlb@fuvDj!@i2PlYL4+&nlr)`$*~ejm{8@Kq(qHfo zg(IG@8KIPmF|e6Gl2^IGo1xe+{2<(53%UR*a*HY^L=Q!&CN`fzo(di>Bp93sVDkrH z5SavEF^(2e;sgNLe|do6wmf{H%P%ZVH9pmuh61lMgxQAUW3ZslZ)wuE_Y2w%UbuJ~^B<;iMoKN&0G^2f5$c%_QDuNjzY_@80qh_a_-oOPBznHgB zDkDB~zp^ip*ST0b#EKo{*(cD#2a%~iv4v{}01K0mRQ5(UX~HDoco{QG&y(mM7281# zttB(sh|HaRs{8hIBR+?lB{%E`X#ia>ui(WDVb+1U@uxmm%fBF0XRHk76iLy<6nd!$ zY1%=pL(+yP-+w;;7-j?u8bH8bJt=9UV<{#KNLGI08c2c1$_7nLOlLnCII$lbQI{%x z=Kuahbkbxaij>IYA!2;EZ3^7#0Ze>hyy&uii-X|_ga|O6w#d$YbCPVU|IA|dp-8mJrcXGP__ zjISPZbVcAjLT<@b-i%=Sc>}CQ7tP<=R&iRr`>5q#YxvNwKf#A$r{3};av6S-G`lLt z8r>c1dr*5%PO_3b=yld!+g3ZO)vHVFw;8qJECkjT+%0HVTM%Y_9)#NguD%?JrZRz$ z(yaIq0e-N;b+L=ILkt9F#HGd&*N9#Z2K%U{#Ipk&z0YSjJ?B7+--S!K8Bi#VcnK?f z`L*-D;wj?|8=Q%Q_{ieiuVW&FnK6Yt+_yho9Dz_UI$g@Yz5be=I<`1SnmhspjVfp9 zwRF>UXT^x*{sI9%#6jm60iz&bj3#6Z1dJ1AkHL`m(my2|bL>#R4WG;`wj-BzzB9>R z8UaAg1*H)dQNCRR~`_PQX#2%iPyN78C#QZ-LUbB!|>F@F*xIC1F9?$&sbQ=C{CG|S+!Y@cqXCCEWb6Ew@z4oxiC|mj}UGTEEdggkWMT^6<3g^ zzz_@16pNM33QaldJhnNEf7tKyDnYI(OUDFV90)Z+ZvwC{V@aB@&8_eV#xho|p4yoF z^3G)@Tjg|P4SQo|#tp&3UO7w2KcERA=vltQ$Ya-H1$6VL{+a;F`9y^)Y7M3h5(Uci zB=k{KZ1_1gd1jJ5418_{e0_QNNHbzOGl42LVBQQ^Ulku@q8`knmK}y+vWSp{h)4pW zyyntTY#|8+W@=32*a5S7Y!YOJJo?Xm;;}*KOktYOu41Q%Xz++<=);Ec+pf%&)6Id{ z)d%I~D0;>F`CjA{cuilV^dNL}5vWMMU1Z zi38bfD?8lD5@wJ|FtbF0Z;T2Yhen{tcvR+zO+qwmaWxrJG=oCODlMMiTL@_vD3T%n zvW)lfbDpY`F5C^M7l&*3E1M95<;p?N>=K@7=dz))b*Ms~_swyf!e5vvJ`ya@%U(}Y z!I5sv+-x_{CT7p$*u39M4jy{`aN+r@)E_cMKV%z|R_+4!ExL#;2aJ96Uly;+x{)DU zEoHCGwCF$vgGE~_OI)Gj+%QHAzd@t9P&>ORx8fqz^ITKLB6rr*b0Skh+2VPamHO_Y z#ioI!&y1ZXjXpm3hb6n>3w%f7%vYCOfCYwzo}qJU($v#1bw>_T6GhVWdE7WI3e|1h z&sLj`jIZoASbNB;c8VXaB!!{yLu6ne*)sC`ungHpRLpk$49n}|LW}e7mB9I|wE4m_d6c}%6T|G%uXvL&Kej(B zD>t%@u-eh@wo4n{O$)QF*WdGj@qM=HZNQ{%8vdwbv!{dP?kErGIOqGVN7dB_Z&%;$ z(z2^!tngp>*fX5)S#n>Mq5>hxkL;oDb(-nac2KaW=+jT@@^mm$u84NyA2?ObN#(ak z@DHBP_E%NtMpR@NRebXg8SDXd4)3Q8@DGO#eL3V;>Z%CesTeT|87+4BKD<9hT#0C^ z81Dd$YCjpTa+r|spGb9>lsxDW6_~0+{;(SO?o|1elYb_vcQQ_(&#rPdTX9;@VXWA3 zM!xXpq5aQ3l)$$-qJ{EXm)fesL&2ke5P-wg zHbGll=efBmB}nxw-O+(n?>1)juSfqv0O$ly>ELHUm8WjVGbhJ$!D|2Y!{1?lbwQyk z{ljxc_=UdxHCg2r*y+ZnIy~iX>@RdT<-C~9e~UV}i8{QNwg0nO-O2bKAQ8r({;voC zxy$CG8jyxC_P-H;<3H*lV3b!4&bxmh0MxiZ{RnQ3Fn-BD2!NHMFhQpF^S7_HOLEzD@Zjc$cZZ|H7II`qY(f}7o27n5-C^eW>+RDH?C$kA*t6= z&9CL8+?AT$HKaUrnmvrAJgu8Oou$0In!Vmhd51T9$4k9QYkrd>b(<|B=+Yi{^KKqylhS0!X9-sapb>q=UFxf`p`lrCNgJq(hWi zLNug9by`A=rNapR69Lc#fdG~(5Wx7iw`Tc6pyFt1ZTZyH+Sc5j$lBD=(e$CPptyv% zgap9TT=cl7<_=kIRnoC6T>!?&8 z#D~GL$v5%u-zH`a{g^(xxZ2#^pPXCVJv{bBeE4;C@nd$OzWvMK*i?K@+3)kK?foOO zcQIc_Cvz(sH+J@mYFj4J{r~CN;u^aD|DP2H(EUHU|3~-#UksZUXx11mS0cEoE>~lk zA4;!K-CMj|Pu6j|+OUx$mg!A2KfKz?4X8K`z9mApL;& zZ{92C_(GScMhpX+#^vw75sut0OhWOl04x&r0L0DlH;v9aEEuyp$OJFvvUKY~jbHEE zM@d~EeEC59-xZh?!pc}oG_b%+AsgT}3c%47J~hM+#HaxP!2k@*Wqx%3&u@!2{Gv)L z;m7Bq=|ZokewNR99~Z)i=xKp_^r8vls6zIKEUjNMpVj3weMa~H=>DG&-T$Nee{}zk z?*GyKe|9})4!(TOH}0JKk?8&(-T$Nee{5-V|Bvqf(fvQV|3~-#=>8ww|D*eVbpMa; z|Iz(Fy8lP_|7Ym_AKm|>`+s!*kM94`{Xe?@NB95e{vX}{qx*k!|NnnS|Bvl^8Ch}} z<>f78bnfunJ9_If?!p@<+PnGsGJ)$VQAaR_`XXl0JIVSg)$8h5)I9Rt-~Rtiw9*^5 zi;Co<_4iv>*+-X%5}usD{eOJThj^>Z{_b3^>mqBPOU&!y@axiW@4|kftel;cwCjp# zpH-jh%8TpjBY}botMU@XA`OB2=9N`{^ZqBkbvRbdUX~SdH?sD=E$@7%R_mLT_6yQ{ z2gmB$rjPX*>a+OtML||Zm!8V#uI60RFAnY(B92kU6NGI%a%p9l?{w(M%LNrvBl21qY z{hXLf2uXM{?&9F~DaTN{sP%Y-ZT(74rYz3l{?0Eh%@3epG6B2a+~b9+X`+t@>v<+h zwMw)q?ap|$!?8Se|Mvf9)*l1OAi_wAnr`{OlXdz5R|VZ&|JDMczSLm!r9S*{&bORn z@S2#&!JD(Y`yH{EXG<#cI-o1qQmDyt+J#SHU=-mCW*<7VD4{p-m==h5?jaR&?vWRaWnZgJ4oARba*TCdwbl}iQxgm9*G8)@2IrA zChSYUqcNjb!q^w?@Y!asKmH3Ydz(jPoK266%e?{W1_zdH=5PfHNMSda-eD92_CaFe z@8bBC02uBw!sT9S6Y)Z7V<7$IsPV;P%AD}$y;Q6(e2{W)Q zDT3$gpiWm>*y0~1>N4m&5=xElN;W}7 z6wWNK$x679ww;e9v5UX~`5lvmS=est*!(UR1i-W8Kp26cE^NqTZCZ3NQB+NFq=_vOW-9KQCK66 zJtyFi6LdpX8x3g)EeMyiID~F%+3h@ebGWnEQh2T})NysHYo~tQCf-GX5J(_J)zW5= z3B#UeCWdjWvpyK@LJcE7BK1!`rFUXuA;2&@;dKDUlDWmC@D$Pje%dVGXV)uj`=%Nh zqODee2RcI>egq~yFAQKAUXwM=x&5qDTP5=oAJ;XE5ywSD%Gb0BKLdKLb!%ode}Eol zH7HP!6FGF!DlI_nff~CZ1Xzv7i3C_8U8DD~C{4(_Fxl=ZJ4K(UIk16bf?fk_7^4@^ zcb$7;YP{q~(P=^21?lw!FWLYzr4dp+Ce5u|EuvETdl@-IhQxZC3BC)WGcACjVI0Y zL5x@u(wdxAV520wvQqg`USiYghp+_&f1lp6qlc0TF6psNa}J+~E}*V6;cKL%`?a0fts}5LJUwZw(Y7Q)9-AfOIEzSd-Ja3j@3^ z5n!Ai7)el#>wYvX7zbAl7%&ZHBG5af*Q`q#TYrl&V+2f0*DY=Ed4KeMwyhSDF)9Kv z5?)z?-b!_E>(xYQgP??G8`wc=n1J%k;)qSXOn6NoX5-*DsKFRQfVeQ)*qwRWD7~3~ z>Z6HxE>>MKHef}B)FU2)H59)TcwZmC+i0q%?29Fz8+^ewHi!Xd7mwFI~d5z{BZ47;vw5&bkju3LE6Iy07rT?kF!4_-aYevD)c=mQ*4jj)Md*{&3uWAj{} zk7fhqP#BsDK~M+_VIY>mB>*#7M%;Hef|(C=le8^^9~_gVU}$nE=*mEJv|}O`2{~GN zb{^{X6=n*xT1l?Z$fP&bmz?=nH@5{m2v0Uc`L+*iS?f1~b(5K?v}P2rUI0PNrSQ^& zLFH#SZWD!HNxh+zsbp+ov}qugr-%ob)^!&dqri*o-woD)L4ZbN>+g~W*n5P%D$mnr z#M#;(>Ug*da;^IS+t5vf1Tel@27+9R;YkP4UzMzQRKS zg7J~vgnq|ZxRv@3D(D)E0EZ<*rVrB@Q-#&Ucs2kSKOm^jqY4pSX%>9L)sL@}9OJiR z8vJs;XUfB1sbbARp=DZ4))l7UsH}}uGr8pXx^?k@!nN~N_u8C9t0}p&#s`9`t^DSa zE=Qra1>}pD?}_t_KM45+w+d{KI!gtsmsDdsT=pN#P%e__Ojp(2(&JET_FX-d7pLr&iT zMKCNv9#zEpx#2H#5&2A)dMh#3eVvVkRwd&*eL=XQ1uJE1gfxzP04B{cka9Mb^qAgK z;8(<;5?nN|He_2d$9ptfMGV$QCqIOkeatKWD_v}yb~&VPyemTt;QvMY{e`F~Svru4 z`P4$ti&oTFT{#?3vRz82g)5^BC*RAgk|H8NY}qKnQVf7JQWMGQ`raKlpWl+B*6%}F zxC40t2Qkuf!dJ5z@4%-_J5+mi;Xey6T7a=M;Q<&V5faM(+wrxeA{2`S5eN~7U~kk5 zPmCq?h_xqjHf>0% z71ILuuRgbZdw}<09#oPoX5qz(<=$y}b980!GjEQuIo)RYfOD6^Wi?Kv73(+`_i3s8 zS92+ac?Q6ni5oWGf%59OAUeCdzV`$pZAcDJ-7Wl`&$^u_?iZ0CJNm);6X_W(i+E

      *3bCbrv zJd=V=A~DA@Dg*I{C}(1J0Z`9oOfWgyd8x*4f>peX;$p^UKP)-NreZ4HIDBr0X#&DsO>D zQgI%V_mr8LjMo${oJa0v+@X?p%tCW=g-ey6Lp8SM$|r$H{7k3ZCvT*N36%G&i^bB_?YcWeUWuF_(% zuuCF2oYokJ&EXU3FyU2B&wRlS)06KIp7&-D+10;-0EEhvqfJptaOLiS=>;|*C|Mw8 zM=P!$+Bbo~f4O%5kr}lWQh2;TWX_nlos4J#pq&HcP%xaZ!JtSpC3SNiJ9dDXnV~6P zlG6gtzs@hoUKnbwO2ryivF^s5FDq(xpRACVc>Q2tm~S!rp)BZ;WWXag)-}IX#VXy$ z+Mx_9&j3v$%qfZoo`nj_EXr*lChPzv2@vyL-t_|X{c=}}#68OE4>DQ{gr=xMmaptj zo0gPT3l$J~w8QLQCtj&!TiiQei|JmW=`MuEk$SkYOJW8*mE@3`B2n;XBe^aN(%X0` z`JPf;shgb~ch^!EUOd_g;0G1qizbP|o*y+rYWD$HO$s=%K*x{MhL~B$hl4@CfT0JZ zcWtSVX{j%Y)CWVcqat6)DjTd0fa};b@t0{jwxzX| zo_1T_*RP~eFarm4{oG;-a zQ#L76wvCXuHl(HHl$FPnH8z_9GX{)3Fp=0UqG4U895;5+u;8#LYTqW_?R}6R%4Ca3oCq7=MsfdE_oxE=p>)ga63o@m2C!<9nW5dNvf4=sx|3H>QFn!@hrL1 z)#$?A=n6aCL_USjc3)EL6~Eg76XhjzJc+6nO{coek`AduMH7=8$d3NkL4%3Iea*bP zEoNbzkIMV=KelPveInccWLN&#(=H)s7aGCKqHW(hKK-R{U&~=HPlD&WV1KWu?Qn;~ zNYBg=ia&S8%6z3_v@YyD)xp>`ZkeDXC3fWxeDD}6buawDet+Mpr(#kR{=-QifVOhl zC-l1&{X|%0GrNFW#(|%EW?>q zayH|fqOt^c=~CCLoSuOW!jx2Dt3pf+Lx;|hy+)A1p7_}SEj0Rd8-Zu^-h|8 z^m2!t3JU#_{LlVhUFb}^`pih^+^YIqUeIvx@T5=i7nzW|#s0;4$Ytu$u~YSRmC#L7 z^-YJ+ZJ+a5V)f2o_1&TnYO@-3cyzlc_#^vhA5-`mCG>~t-~IpZ@#+KK8Z0?skkauD zevO;(F+d&r$4EFqMHuH_{eR7T8x3x}Fkad*O6%A`w+7q^!mq9gXRpTl+y9RUpOp(Y z8qpAK)es*ES67u0C_EQ)P8J0v`UYt;@ zh%jB$GW`)@HV>o45oMvSV_`a_zPZOLB+4dr%DN}Qu2jdaAJG_oNUX&-TjweTyx1^4@T9mK3j;~XczrT)uL{wn9PGCt?aH~%6NL1*ePUw%Q zFiyQNiI@m=JxYX0Oq8o$R7gxrs$NV^OkAm6TtiGkr(VKXOwzhu(pgN(t6u7zm~?o( zbi9~MTD?q;m@K;gx72B}G?uioZnAQgwDxMUekW-Y-eeOmX`9w$n4@-_h8O&H zsA}ox=9cJA>6reOm=WpN>6X|f>A0VZ1c^)nb!!5XOd?lnqL56I zRBMu)OtMmIvW85GPHT#>OsaKjsz9Fv*~Q(1BAGVj$uhHJ^d4Ni-9RQ9eqQmzb~fe zmq#XNS2uUOV>28=6PvpFvi|w#*dHC%cS+f$^`912H;QUo1Cw*3Gm92hHdZ!vg46PT zF0T)aOiax$e;FJ(I6g(>mhB!Kxkjdx*0=2)o>Vq>_I>|xc=Bs?Yp1ER7m-)~ePZV9 z;`$gZ5B$%n1OMDZ%L8b604)!o~M*a;xPG&L;RMG;s$uwgZ31o=84HZ}}4%sAR7)#n;#w7)_UopxW8ZYbsjtN^MN zAVx`u#84Sx8>VN5D6XnSg09Q}8d{ZyQ3>&#zszw6E*r5n)k4_CO#y9T2-R{0HjXRC zFby;0IT%O*KeGgM^;CopMST1w3L!E(5*p|G*uu=pST0n-!2^Ib5oACZOH(bFUJUqJ zVF~m|r;6+*8V6+J<9Zbb(L#_ZHT)51d0^Pb)8@-31`C1vStIYy8%m#6+G*UITZ~O@ z7@I}ehH-w(9_*QtuIq(3{xC<&188}m0WA-p!7; zK+6MYdBD04Ef1jO0kk}TmIu)C09qbE%L8b604)!of# zsPnenm@RloJ!$FLjxo>#1reLfYMCT17-M_;qqj! zNzm9bI8K(V%7o`?xrN9yuDs-0Vuc(&jj`E)X=S>bXgcg`N)tCte=bUARZ5lGPSIh^ zGF+DazJPhtlwoR`pkpPt4#maF_?=yQ6%}BXA!_F5w!)ch<~Xq`d;5hguAMi|NW`d& z&)1I)v?CE zxF&F5&VOevO}zG4eSML6-BsLz+27(poJDnpMZBo_6JiVHVT%V?mXVbf_u%WAkDjRY zb!+uSJXIIfDK^k8E>)M@kcMx(s4|DYUf0mxcy&mvH_We{UH1HZV|CwBmBK0-uwr~= zRp)3W_{55!X~Rr%)8O!@LbjFNRN1q|85^o1hpElLhntTJHncabUiexSJ>3dgU221U zxcVONEV1o!C;HgFV;zp+jR?n zhu_l()tB@;ECTxq!qxjCQa9rSY2v0H#2V=)q{1DttpifGLl++;4(p@}_D3?BUO%%z zR6R(0r1N3;MMm6C#;$eJrezG3wY?Q@pXSaxtL@idJ54gXO;)@2eLLFh+l9q7rBjNy zRFTE!JIS0@WySo3{+77eJ4j)>_^I81O}j5=cI;v{@8H`}f_7YsyY+DUa>0g1s=cP- z=w^RALpA%>j*5;{aoS(&1;zHAiz_{h4Yc?6Q@{>iI2ZdCMS7dIb3FIcLLC%;?wNny zAMDuuUS&Vh(SRD7(i&TQF?w!>+;j-TelX4{FeRut9mY4a3ICyf&}(&nwuygUQf+~e zZ}E}FT-8C+;{7E!|0MpI1j^)pfl3yLyJGrR(yV!p?mig=wJ9s=A>r%CNtao_)=*ESQ z-u30jV>`YRb~RU@?uEk{mZs>M ztypqiv2CGbSv$p;xu9GnT-=@9JS1|w?`%1!KAu9|>z1^2@=5N~}cs zE$iW@BOJf<6<&Kv{xb7_?Hv1B`ortNsZaO+oXB=sKGay06q0?UWGS~~1wC?tkyy%) z*eJ>^Nt7@=Cb5(7`dw$?E+zRJ)bU%TnLzodOjXM0X%2%r({>B^Y+%q`hx|-X?o4ZX z;icDojpi3R)*kZ#9&pYxJ*lU9N?ZC~CI%($hC&KP)_Nuv9@h*`rky$#I;$_XURvgu zScjWhy?do1bbiWy{w(QSy!zb0*wJRo#QDO+MX1gp$Iz9;#7%BCTHRvW^1{=4FW3FT z+u6$-m3HC7Wq96r@s`>!cH+XH8t!v(5zzejE%jwk_+x*m%Mhl=0XmmqQqphZYa-JA zkp~X(hp|6i#!O$vmUwr;FZ#p0>>ni=vv)n)X*<9E8Ojk)cZwhp-i^6Mi;*Sv4*QIIKm-5$T&DS5B zz4L^OD}@|O`>(5Ud{@h_Yq)Oejs!|{8q&N3l1u0xnpf8TB?x?dtKKb@SW7o;)wh=T zCYV)zrl$06z6t$u^YDjn?7nZ$pPSmNONU?A6Ls}H*1x`Z-5~#*b?LNp=iE*Od3{au zMGZ=MeCszIe)ksd8`Z?=&0CDyh9zIQFSo3lg_B> zz|dW<2&Mp(E;H3YVFpt3>y_M}Yn+IO7?{XYjAiDY5PWJ;hwWn)WCR%ps?5gKBp{Mb z%58u9gc%-9C6~x=OSTHcV9-$@#*kmh!|^EiO-2I(gK_Za;CQF7K?>fN6$Z1mswM%X zU{b9f?>+X3QqITP^xS{tfmoV)w}Zd(0N+fF8O(~_{+xfV!EU;4LmIK0)8t0oM8}QM z4Ku*HhXf(qazn%9=m-ftf`d!N2y@vh?kzhlw)<^q8R2@_Zw#`OSvlS46shu4Q)!g~ zJ|@`s1ocqqhlqZdt~x0Ss$cW^=Qm5&>fRyWL+cngfK8SxeA%_qOWNdFDcUm@s7fx$ zaQWNI`r}OV>!ZW=n^(h2y{KdH8k|@*8cOC{`gBtdYW#;Ws=BDR*Jo?fyNm5i`&O)X zTPePPL2fSI>}cx<^%?{ zZ9dRo!@saZm?RItu>XPp&~(mq3^q|!4|Yt z<7Xra!~bOv9Lhf!?ZJ_AujsSr=FRRR`fCut?daD5ILlDUGVG~I16;AE+}*w(r|7=$ zC!G8CnDB=~(HpP_InAfgd{K76*3GGXMER5Zcfa+pg+7Vn@<#Ruw-Y`CLhW_uBQ+;! z42dM<>Afl(46veyz;H);WDit8c)bToNdLPJimfKz)r(tWTkuUZY-HH`Cr;RUJ;1T?Ga+(UkjNzyu!&>^wW;P?J2my$>}8(8 z>`apTU?G213I);qlpE-04T^K9IhIrLyCCzblTRm{9jKOejOA!ZX@V58x#t60!{_q_ z-#?mL65+Z1P+H<-m8wEH3whphlLl4!wX}HB>(np)HTxkSNdS7sPKJy5UC-t~q$z8~ zmx#SMF0#Widl!};ltiapWq`NpbF$AAV?Jk)RqQVB59Z4k@-#ii9)tum8CZN^OgvHp z71w%IQ{V*xLQV_{<+Wg$Jq#Bkd*t%YO?u_4Rw@jqVc(K8!5A2#4!HK_`3t{cy;{EDpIq4V@T7hq*8YOU9h8 z5=Vl8S0e@-&3a%1#j$-x08G*0Hj(8AJ9?n@UXkXR0uD3*l)T5RMz_=ye>m9K2AIjh zlyg+2cT~b&kVF%}^2stvWgtPdDHdyaU44+?z|Xk|vo2h4_B4VLv`kq;10|NP!Ng?V zWv(kM5^&8>ST{V4teIdx*oBnHOqSs&oWe*ngB9c)RWylf&4J_6K2`0a3?d5-@e3(g zYItF?{R>=n4wbKhZFSiTzMGv^feH7S*>PxRwAf~B*bGj_Wr%5rfZs9@e@0{uu)rpk zmfFeKHcE`E1qp_bfnsn?ap`G#aD*{~L*~2R-lJ0>_8-NTTJBD-Cxi-+xP1#;*D_Z} zvdjMDsPhm!WI43JmF_L;AKI8eWy3wJD!^0NTO5THn|qO+Hf=Qu-)1e)#v=1oxao2q!zP2WBj3Tn*i6D_9b5!CLMQEkF(WZ6f8U!|5>x z&sJS8!I$AwOHz66!`N7>{-wm6jR2@$rKrrtVuuIR;G`Yry&xp*#!K!B0@pzCo|s^2 z1Tll?UoaC}Z3i>yUcTH3Ju8!Zyf_=>QUPxDd+v9$e8#s6QeBIDHG$+0((ZU^@(C1$%Ypf26tQ>sW|j+$ zNX5#5u=kf{zvIvh4pWl*Gl{K4B9W0%s}%J!k5e5_L}C16#9wp`r|yJ8?Dy3ee(Cay zAJ$gf@~tvqwZ4>MJdKL3c)%g1$E)b%RuB?XL8?HjrQ_B-CrSB)Uisl2j_moaGS}`1`c(nx_SdT%Xzr64BwQb*Y4< zQs%dlZ>D}`e;kSW@*4&}pi{r!{{tsbOfy72Icxh`ya)`r&#;y1X8tgOvbj1+lzFLCF=J%Gqx zdBEmd%iQc#Q!M|1^{Wm2?+>DQtH?2T+os+q6+Jq$)q3cXQlqb;^QfVbtCCD)x@{;+ zuqBIB-6a%wHT=ctvY0$^|Do8c$p9+xys_jH`})hJ>^z1{Fe{g#JgDW|30DdW!hJ}5 z#_XOroORm3m5mkP&CBPmcz3r-MH%sv=B~Bn-sl1#9d*szw;oLHS;*Gqflmc z7JMS4{4*ld5ccsygrCA)H)c$nO?%l39zl=m)sGn%_*=>q* z)qbBH7q%fy-03`Ua%Nbq3=D|gE>;|1!9pm9*w{1A``njT4Im}geXz^re-uEM`U}{n zKYQ4JJ3>qLJ8!9D8<1|xg5>`OUIb_iyZJ0UeXykDT(V1jCfT--?4h-qy+?fIGxPJQ zr*{&3(Z0G_a4p-ptt9O#{>XKGnpHHB2x-xDVSBdJ2}vUYS!GMz9|WJe@7C_$@z6vN zHX3!dGY%k)nDd4kbhD>=nVcoawkWl4Ll?Ih6nC(@c4VS=i9mZSUwgaXuPtO=4;dXu zFkhf78AtCTN8ga&UNIiWLdSRTPH2s%n2oQpmad9&^ebZjL}aSAbjv$1keG##5NiV4 zM4)TNc~HPSKWG6Iu#lU5Nrc2d{=kv3RF2g5sxbb_&3tynh&OHw%orc}89{cIAR-HY zdJzCGQ=lG;vl=5N6&c=X4mB~Ayn_+ozDV;v3uHyW)@}?2cYy~p@6DM+ubAjZ#2gTU z4nZqWLQ_2TObBbpA@0bXfFj5F@R9T?K@0_D>T?!Jd@8qaV&agW(q;gZl_8OZSDtl| zVnq=!B@@h(7hfUQ&YH*WqTn=^S;$JXF}-nJArZ}Gpn7)4z{0m_4D2t#lF3k{S4=>Z z88;p4`qM0oLybS_`NFAL{bl6xpUp5>3TD6m#bxqVF_sAtUq7}Ea!VTD6EFkB^E1lK z#K;O>L(Mp&*f_!QoK;Afo@B1mRi?Mg37{#jWHTUh^#QRt!{VCM=2QMYCK=H@0A?z9 zXhx*P*2u!DA2CESIVuS^Qx3|bsWK78AESI&;5!N>;w~V1y9y;^Pi$cGj8OY44=7jV z&n7TS!`aC&A&=h|u$4n)t4xIinHJmE4sOkPMcMfT*^l?*H0sPA@rE2-vT=be;C2=T zuIqYgi_F+i%)up0N%s39AjaK1mD80*ZX|04m7> zus20|;xXbo28V`>ma>YYtpWJuoP3x$5-cD|Tk;<;Gdj^Fwx% z;tdl{MJC>HrnX1}J7vQrWt_SKwM~lUaYDLQi+MlN}ZP1=quGc)89Nh6ym ztKfu9U5bdu94z5{o?3rberFbW)I2A__eH4MP+9jH#G`CH$+n;gnRd0Q_T5y( z7`6%lsWu6zwt1;|j36=-MY0DwZ@_kWbaq`Q+(jb1QFbK=Rz)fZj}5R}{yr<6)z*!> zY(r!RDs3C2`pS}nBlQK(?;@*ESzbRuWNP*cl&W7@LKCIZo8%09?)P-t?|CD0iFseA z@HWMT1{viwc|LYwwj+1fMzn>M!?)u~?KCR1?c22-BtFWU?EXU`IHr{Z?K;gdXrWf) zwiohy_Bz{mE6PJEFik7l;07MNz_uN5%v{-Qr z%rEBcirWA1*zS`SZ`ZJj&G)_HIX=1-J{GfzG`)f$V&&c-&hJzE{x%iOZWY6JVI!!0 zH^Yii`QGoU=EGD1UdI)^;L7pyupf^qpOIEh&=EK{%CBehDv{h?Sj~B>R7vO@u*X8c*l^e2An@)#oRJmJWz3Yi~8)1Ul?1CHb z1xL%Bno7^~g&rz{1km7vv!qK8++&ew@TEI$7s4^-a{3*Ai#od;Eah^oFj z6#8>s{RbrkC>>p+z^FQ*ExMYSU1vZ@7)$D}JmB(+%4I}e7+a?X+xYmFSlC%v7!&0j z0`?M4a3==;BM-RXy%rvRUxQyQOmP1g$GV@O-ia{yI3U7>U`d#G>-aohczm~p!C1KFtXfPsSINfNtBw@7GXmliD ze9>t9N5TZB$%I7Gl)A~3Nz#m~$xKMnT&l@jPSQfD$wEW&|0D81%>Qo5v7lx(hrxjPlWR`?w6!ecw#AcTSBxhGNb$lC}I{9^8)zaBH@IAexy6^jV-RGXD z4@D`36@@j;|0|jQ|G9V3009~xKm!D5fB+2;2#U?B2egav27QK+yCQ;RR|(@lV;GDW z%YETgiuuw71>$8qRQ6O9#yFu-%osJnnI|TZPxk{!z^lQGn$JMoy&0-{yIO)h?ghIP zzDi>>DR7|8NidJe?70QvdECitP!--G`X(kkp-v%H^t^si} zBdY@_`Avy#w4Z2`C%GS_8BU8$5Abr?r+=@olKM7_1_BV}|vIH6+Km!D%Xn+6>5TF49G(dm`2p9t!9P%2v zyBicu8_)m&8X!Oe1aKlWK!64a&;S7%AV32IXn+6>5TF49G(dm`2>$;L5Y#)|e{22d zVs_-|cd<~JTWfjhxlwAO-zlM z$*fog`R9A~vtPqJ8@}B-aFTv98SnFKYFyAZov!^sxZv5+OXO%*zx~tWo>$xC(>*s- z4tMc^k=N%927Pb2s-I--XP?j7kNBs5MqKqpbY4Al337h9eA9lRLTuy`CS_0x^e=y6 zIdqBAd4R-Y66?DYb&d9#U;AL_?Z;kq5}!7|UQTpXCM`Ia)I7gIuKwnuic^0|=lrIW z@hZZj<8}7M{EvBJ$>GpPzaL!BZ!0NXN7~|2xgrof3knwlAe@nF958;`u&rWX#q`fuhZjb4|0S~#i;^IgQ2 z^X{QuJPud7S*gL7l}@^Z&-)T}0Kv>}!MH_{ItDx^Z_2&PIa= z3GVI^+#P}k3GVJL3GNasIKkZ|xa>6VIj8UK+iUe&-=GKG>tj;Wn$)DK{?G5x^qC^- z@|^f32uMZnJ&+W6?6H7APGin}jz~y7XIj>7YQkUU6l(NmE7opdEII%X+nc51o7*lW z-!pfEo3--k&9euAeRb`)4pO zxexT8il&Ppf5O*a;#0lm!j(S%3if^x5fOQc`|AfW@qBh;>FQj@d>RvZwu!Mh?t-ms z{aeuhs4PJ!WO+0~k^0z;#KZ@mNup&)$J71J9tl7N2oc2yp>*yBhI9wGG-LORAe)N$ z_H_?WceihL6JLpjmcmdnh+#LD@H6n>{O-bq6({!YLF|PN{T6^mj7G=@3zmrh1M`V9 z%jmeet~tAxks-Z|OpO%%BsDS-m;exyc1Xx#5G_b}|D)LXu^7^`7?Ww=^^ExPQUJXS zP{Wa!Fd7?6CW4e);*nDV@uV+pMugF}PfV@(zCZw@9tK7xf*wDc^*K>W1}MGQS5_fX zoG$81*)K2O%p0Alr3}>mRFZq2$VME&4ogWVFOh;pPd_WB;5uNi4X*FW3=B-s6$T!U<1Bx}n8g=8WaO5t?+(?e?0^mqCUP6(j|Mb%9Q zOm?JHK1kI>1}VuzAk~IMZ=j%aK@&v4N|1{gfF*3@QDAKc>uCU)2H1h37W7J7%Qe{T+$#BZEbbQiC_HW*Fl!ox@ zk-S-+Tv*OL&}dK?PZ0dWDV^P-XrC+qg5wurLOGNuw%8?wH2MC_fzi8E7dSYe%VVQmfW<;qW5=w-)w!q+BjO`xQxlDL`Z&!WdJmQl-482Mh-~F1_W-D0%b@eF%%#U zj{y2_&Vm9+HRb4353E$A4~rz9=k{r#|30gj1`3r zFhm5LI!2t`$F4soUf~1bq7o51I8d6VR4S(0W~O>XvGCtvVP6etB1z&dCrr1IhR0J7 zasVmY@~C7J13x9w=Rs5$8m5VaY6duKNN`ZVDoKHc*i7X(034OqLN*v^71%_K<3ntw zN9=|8sXM_2hNhW?QI*!2neGc*$GnLUHbQ5C8A}vEfeM}*`wSxo$!r^N&WPk$_e)?a z-rdd!*VkYCa2c{UJYQ!!#z7PSV0s{ax)4c(Fn0uoT};s{#_;eF5Kma%2CSe5D$k|! z#;Dy_ew5>;`*2DxPm=dHP4XwAsz^sZIVy=7x0;76i6_+DLc(07EvIgi`nU4A#`cfh zqDe1^0g#6|71UgI=3nBW@mx2*xP4I&vRqv*^fb&J8!Ar9<07vT`$S_oDKOmO*2*+1J z9UG1+m<`ud1=l=K&D@MLMB$Syg_goEb%mzLkm*UleL=*W2K(HISo*ipTKwqgZ?G>! z@$U!{+0)Rg3IU(eT(ai)^cE8bN(-v$lU57V(-lt}iL%ru?R$wjWTUyFmeja`y5cB$ zkFRt8MS%Mv0?7rdkJ^PouT?DNVXI%(98n}B;xqz4JFljb^KhO8zS`+h_03!w>(Fq1qA&P8ijy>fGd?Cb zQje_#ku}quya7$2=8x;u|BT_7lU!B({`P zSNDwds9p5vf>$@Ics7N~w-xGl?CN*T^xa+b^Mmw3U-fAU){dH5hHzHplgC!FejnfH zS3s{Xzvx||u5Age|Kc#n9$lkcS))E)yMrsg|5^6?O9$j;{jboECu;rYrjIYatru_` zuo@e1!tbGCsSs#3?gBOrdez{YH;@MnmpBcrRyTmfxrlzHND~|HXp8{xMx#fD=*5P2 zG0YI=O}sFpnfFFXW=1%JB?Q?dc(I!#dqyLDo0N}6ME23-#UHxdfBk!+P5R`R<9T)se;?01aD@#ypzhg+XdSFINzWaCi3a_ySm%1 zdZnqB+k5TmU3xW9Jw-*`HM3FMUF|<+NN{_Gv8_htyk-;4#!`D~KX%20_bjp}t#0`& zidD^v_a2PIY=uABt?l_Y?8W{u2b1nQcFx$t?+fW$xZ<|CDK3O(W+{arqLkjmz zzVGX;Ss))bh*fG~Ylv{JOUO6J-58pahrxStw!Xq#u1^wp|+a1LI%lw^gr>2`O`6g-(Yf-~p{5b*oDxn4Bk|O+wQj?R$;5S6d zIWgrbKji8$`wC=mDern^a^lR}e918Btk&+l%lzk-Jc(Sz1zod{u7`D9-4(BoSX`IwU0waIKg767 zW?ws2yUL;c5ysp5u&^&bX|8@;Ra{#h6nc6*uBfdeL_Rp+)UblkIc<@-C3>W#&QVNyyj4=<(4t~ zR)5IN58~#J<{nUeYsYJAIwWp^aO5m)Wyk9tA$7;7=DrFcy$h5hQ(2*Ethn;n7Zf9~SP>D0m-Ha^IkPA2oDe?sFf#e_xPs4}^J$ ze+3B6Sy1%Y5~cqE2omrPJ=a^~3?9CvKBT#`eRXF{A9~1K@Z7b2@X1m7w*HWd_n3!X z^Htb0U;44o;33=Mt{dK~DEzTh(=(%l{vUuKj;*-mxMb+D`tI>A|FH(|sgCubSh}y1 z=P42N)MW9rjr7zU{?vNTT*YfuT|z8uQq}V65sW=G;)!;Z*mmDFWOR9Vrm|(y_=p^P z+e>?Y*L?2dUFtt?7$74`m8KcW@fminE{~&uyov>bWVYjX&+`n%^Ip$BP`**v&%$4y zr_pH&9DMtvUq( z1DD2c_Qz97zXAkTpwT1-T8P!*)#m6o4vU%ShpD2mbOHA(!NUuqU}%nXK2KGSz#upj zLN><>a;OnHF=3fB@uH|?Mr8$R6bKu1p_m*x@-35%8|_32%w)aYcg*6IR_FbhDw{i& zfF_T-tJC8<){SlsgyI*f``Td*7;1912pdC~0#q_7;)jBsZe?D+2!THG0`LG7{`)W{ z0(R?!(9L2gUrsxl9uZdkerGXIC{iPWMlLxAa>y!-C;o5z046{j6z(AI4*^k^p2`BU z?3XEEu4oXAHd%z;_x_DuR;dkvi(_ydaoN!P7)0p#{%R8|Oz7_!x)O}{6yKF{AhN0aEY*Aix$q0Tf`6qJ-E5e72jNtYzJ{8+xNPT%^?| zSoi@7=2Tof5e5|>lOCoGfGcZ^1};vs3?k4BaZgt_QuLZn$^#n-g2KR*2Ybm`fOs}& z2W2QWcmkLNl`vUk`0gBk7^nkUZ7ZXZL&Kb)M_Mz$lp~N5o!VGAtfW|AsvOJnVhVvO zQYt;RIA%Ge^!wu@V=aT{l0_~3bT_h{@=lLl8I>7fH$u^r@=V|ZbOk3l!jxz((Gi%y@jBV% z-ptg&Fe4@ofR$ijm>8NMc5fgl;cUNzO|BZV)WXC#>(Jj`;%Y?n8^hXkOvw&|DVR9{ z)sDNp_YJZ*!9qMsn()f_OXRvBxnYED_)y1BAcllx^g2DB57|+ujx9U}(VRr+O-2~V zFimWU$S~}NQ$#R0xtL>QUw?89D!LHcQ=#*VbAvI>gs1jUY!onO(CNS2$#@rZ3LL+m z6TBsEyqR{Jqn-;uYHPG(P&vW-Inh4OcIVr+0w}#yCWJS_6-A*M0YK8OV7O~kS7BCB zd3N!1{QmSHBGlG)!&;y+w=yGKI3L58WeY!@rd~geQyj1>e}OUUwLPUxi;rSJui{8} zKDdj2s$%g_2wq>0LO|$wH{lrZk$4*(6CwHfjH0VAd(FJL16Csj-qS-JU_4ijUT*E9 zLnV6y?bvZ$HR;RZN&(Fu78*VthyxQC0-TxUPoC-ygHrARoAbpJuCaxeavJU$^RZ`+ z1cnJcE!`8dHRk7m0-#C_0KnEp6r`Ham!sG-SGvqqSyPPyDp@!LXE9v4gHU^)0&tQg zJFB26=Ia>bi(&+4WNjeyuk;8@U5a-CX#KGsf>dkqr9%9EkZC)vT#2>`xBypFQ$4Kd z!0#K>tVuw202l>;#vXyi3U3pP3sdmU6a!IWMD@vK*#%)?GIg*dp)Zg=p^zg`lt%QE!i@ufzsUPvZ}?bcEj(_Qwzr!bXsD{; zVmL?2LVz#mUfo1g;-d;l42TpkhQoqUSJc0CcZ4jOhcqa^g6aj0WCR{YlR;q44q zZ@9mN{}!X<9}dVMWGA3vwtW%LG@r8W)0>aH?~)S6cQ5CH{X`^`3=?^QAX|yzGhPk zNgK=88R(na$vY#H^8Gr#9eAWP!GB63$5maFfKdYkkq3Y)kdS3H5w7Oy>1T}lwzCs# zsS?SFqj;qFdL8y?iMK41^3Xyp0lMTWv1XIiYN#oyacPPEQJ~UUVg?>$>$#tas1=!2 z)_SyVnvVKT=n|U}u~L*lSagAKsD^=IQc>dZDFl(7sjBth3QeQ=Pt(G< zpAz60KT3)(#oKZLNZ`7qvA!?P;oLRM&waJ1sTiBOV*bADyY2WrW3mJ%&TW%x#96cP zHAc=2a495_eB z4X$9=0Dk-=u=cDPY7k-I%gonzg6!Z&d$Ktp?$J-<_A@l{^VYoGeL1{--GJ!0(Yrpr zNbXMdsOhk6Dw=PptZSFerYBpNFa)2uSU3{flDA^0+e&XiSMi^Jn{Eo==X{i+ORA|f z%V1h^(8>PvrDblD)&Ik=u`oxPSmS5CT@60b)_imP6w1B&6@JJb*`jrg>vT8J*HQ8y*jaCeQj&nyd8*(?+v z_r4oUy7hV3Qm>O+B|^msE$WXNylL)wyzOH-&80dm(p$+bTU&we+H+&@6@!w{r=m*U zJD%Ax&3Hdg^+W__zLMg!|FYZqJT_<-Lk zSRY@8obIuD(LD`&UG#_@RSWXhQI+%#0+3&vQG(M&)@>iLO-0N_Mcmgv?7vi^ONug8m^~lIt$4a z8m_+2)4Wz#2l|i{=o;LTjNd*W-d`GoB#;^c&|rktBwNLRJceajMzC<*+wvOMIEnz` zSQ(HafN7!^C%dmov_C5=NX!TuR|x>$4IoVwtJF88HUuz{BQ0lu1q}gULlUH)XX+d1 zM!71Vf1&Qhm3icXrYQi6n?UQCV^1Tba^&x(GiL*afN^p+&m1huG@?hi3F1jn5IT-< z2=1Uk%d`{&%j7j1IhhptA3pT!OiJ##SwdkgqQ~{WI7%BR{TqwMfWmy(!F;x2<88-0 zxk^&}C?kkWd>%nP38akT?nMksID%dX2sn#IE2k7m{wK7L!IMh{y+ws&-1-XWaOBbY zQO1WF8*Ge2Lz(d67IeSc0E4z+Rr1++wqcTu_Ju-_#=Em%$!dW*KGBp{upkEgJa+Ru zaO)O_R1P?*|IYtY`{Tyu(?& zlZ|SsLTWZ>X{JYKN^icy76tklBh4rmr$%TZ8P+e!BP!JiU~xv$>@4&d*wOz+3W9@l zBWx9Xx-yha+CYpgU@te6F;qR1T}35ELYvJ>#^0#{?Rv8%U>)wF`BBN9?8ruiD9vYJ zQ)nuq6;UvdQhF6avzsX{Z-2_hQMH7TInl^-gT!6pLrxeCKk}c*vDwesYR*DKS)W@WO9yMx@ zFou^!B{kK>9r-v@NV~MdzqRv`k{n0RT*lO#-M%=$bx#6=TDN)Iw)gdMV?Z{>0MMV| zB|vQ*)~|4xp?I03q_78WoE80{CjawwHEVqqeKGAOi_~!uUUac8SlQUSglJhn37a}V zHXM5Q!6>u>Wxs9+R9Zp%j%p^JxQo$)p?ZoIAEOMt6E|q`4oAm@Ayr1{K z!&yEg7pG*KqeFKGZjr!)ER|l=KG!FG=t+{FPO{fN*fgU{h_*0Er`P#yj;2~-byYN% zM&}rNAXIMYRBs8_deGBdy1Q$UXuh22wkrt;wBm-c&MI~UA9^WTeF_axTg0_Ld@Y@~ zl=(Ll@Dumj+Oz~nEbWMP=5u+;Uh-EYs-)iXTB)++QNlXsGRTM?f}vK)H#FEZ>jR2M zO-eU3xvH`NhNBD)2H9~d#nag=nu=g}K*;T32;?vni6IsLsQ4_grukT(ZSU?fKU^5L zG+Uz;hp|pOv#k2aZg<|EU^>4X*QO2Eb_BO&>qzvVyfKKTDT<~Rlf>>DLtu(^vOc|? z>0y~YJ;3$Q-lwb~mi~P&V_FB}$a3h9GoGd<&Ro+FBKI? zC(W2Am86wb+O(KEN5l0e$!V3-qmrYy3>`G5KCP9b^%cL`LuVD4S-7j_noq*EK8BlD z%_|-Ud!CkDmM>0F&!^bgGBF=yF)tUx&vMwUWD_k7LQX9xm{(^)miK5^*6a*_oGxEg z#i=oGu&6Ge*{|DIjp0;pLPFP%PPf*=H-yik>8p1J8MiPO)-+f~n~C?VS$xN<_Is80 z!m4NVt36a$4kskH>!}WkS!x=qj}_+*2G6v1n2+;WPU{Db+$c}>Sd_rk=k-))@D56g zEazyfmu^Ul+FDoe@E1Ji2@@>W6CsytBcqBn@+Z|d!VX8ythey8Ke5B^V_6?kY96v# zAB$@qt686#|4)G6C_nCVTB@%@b9~JmM3QHVRp+GUuXy##1S=F?Efg6WG;J+3Ywg4B zc^WDkjC3um(!T(LR93)UC=7z562z1Z!T$^{ycYNmKv4T=@3@@yFMy!M5!$G}-e z=?lsvTU*;JKv0WzUV9jZ5BrA=1ECIskqu=V4rzsLV3rLN?+Amp4ol?nnUviV!iKF` zhokBA?xPGY(HSl)yK%@lPIw(Yave4v15O+}VM!gLJG)*|9bN$}Q5U;mB_YW|-G2iF zcXecc*~!;0S>XQx2q?%nDE|QnoQcQas6_q+5GZj_6Gaj?s8Czf(>QR@x?kC&)YFF7 z)5USn|GDf>=3pqPXDGO$ZmDPN;$Rx8XPV?-UZ`hY=U~~dXF2C!y{l*a%fW`wz=qDr zj@JNTC*$OxZQx+#CGFlQ?aw6>-Y65tC7aqPo5Lkn(kNHM z^`WKlLl>9)P^0`Lm%>7$!aA4Yexu?!m(pFM(qFDOfPmM#rNz68*Jr53XOh=m!Ux;*Th!S6@W^1ScUs&z` zX8?k%g|@79{_Op>>~sE{ySALa{J9A2x#$9UcAcO0&IA2K$mZ(x97Br>d z4*JWQiCRafpa^^mfceEFz+(#l@F3SxuA5L~*v{tn2oem=jr1?>M(IkCB86zgQ^6W1 z8Ml8iCzx1)sE^f{jTCK~5%=oLhV_#VQaV zz5EcRu^l+=R+(tj@Xro9+lPYOZ%Dx#QegCk6ucn?Z%Dx#Qt*ZpbQnV!J#reo^cf6l zydec|NWmLY0F&^B6ucn?Z%Dx#Qt*Zpydec|NWmLY@P-up?~W9>D2n|XDJULoP=5b! zq<|KwQU3jZkb*(Zw4v|+K?=C&YUHg#O_yJhf+iAb663wF9o7Q0SES(Q9#|rIyoBYZ z+)U`0zs0L4Q|evS=Z<6HmF0?>`P3RuAzNcj^+k$-CdpVmTXWu(xw=88dgMJ@Yt8qg zWAk(+1lD%;?(dgN?W>!Q_w1Zg-*+r_TFOt`*}FknbRv%@m|Dw_?c5hu)>K39taf7( zeAZXi|B~u-wf#6xgZ{mN;85O;T5cai^?MV2sGt{l)X_`g_ZFU#RiEq!r|4It;691Z zo110yAEclV#ZyDtZz?M1_wFpI^SGI?OS-1O2BXr$*k}En^t<2tBGQ*OPMud-cpcM- z??h*kJ6(%;R}YoKy=IGq|0h!La>QR_HQse9+$>bXCH&&GG*yH2!@Gf(LsMRzP7gS=~(ap8jVhz3emq{5e}BG+3~ zuSkLW+8>9U=O2u5o-@Y~?LRrvzDMd^ueGh&>tU?ECz@3cBAlx?a0uh4W?kORGi#I0 zT~B3(liphf%Xhx;oxAjvJ|7Xf?k6p-E*~;|@;D6&r-nN7iu^5()_*@5P5Rxx{P2D6 zPG;-6#ItNWadmU7|9s9$|8Q&z8FpiSIXQ29{4?o%e@8ZPRl@oBhwz$+_a&HHYFp&* z$8Ii|Zhow8H~$A>AsOtC zZrtDXD4-0~$_%veJan}P0dh*L5PEEEA)HM5JC`1E!HPgb0m^@z0s#7dI|Y;^&rH7= zf8fYNqOGucnKC)>fBX-pfX-HEKNx+m6qEahc;c^K-e_S;T>Qh3*JzO-Um+~#Ygtw458jezj?$#j3NTmhuhA-$dY8;j z^9R^lic*6;cwey&y$Ej0E7MkxHa zRE)Gtxw4H}g9RV~i9<^P4U3AA@c|$o#XfMuQRW14?__qnBApys<`klc@wYvEBmgBz z(Lvr9$0+gisPa}MoujB4;Fmf&JN2qWPAhD^!fxqHqPiV;7?c_MuiY%_AYm zI(7mQ;wFSY4G7;}Ir zLb(oEg%=*(fmwzpReimF{%a-7_DoU98PyI-5NejX-oLbhw7G>kb*PPB6ti=B1Laml zOp46!z)LxRgB)XSAU4h@w;6_HC`+Qw`I>=f_B;DW94jra(3MF!I{ufxVwETYu3#?a)V;0(C zbfWWhi}IHly%%l1{~j%x_Zk>`aM588)`3j^teYqrZ~xpqJs>*Et(WAYmp!V>u%b)H zxVpfcyh6?B{ds)dM33#4-fx_wjosX(tomg;jxC%uMiu=RH9bCwHNL{d-I%V$xrTk; zh6BC&y(0bOO#Rq?ecoUC)Z1%kW{FoZ)faXRm)swYxeX*?^$aCD*IziUeb5D3_NVKEXH)j6->8ujJI2?w`0RQ zM$B$B^lLNhu|k|QCOyg~uVcwGHrw19tSr^deDZTMbSBu5OQc??~xWg3X&{V--IX@6cnLDwy-iubD<(?HIwBk&^5x zPo$_$sK=<8so^%su(WBonP>_#Xmt*Jq~X;mHfxsv>!qyeLFf&#*^Fombm7gZf_LMn z_HGsSOjtI}&sxpGOf7J^EC>0l;N@+K_o#Txwfpu+pUe%>EDi|w)z|iPj`y?}_wjTr z)a)%5yex3OSjc7XPnGXmK;-vbga>`Hh5W+!{pT%k+bmw-4!|r20fX!M!Ux7g2ZHto zr23Y|-Ur;-2ZQC7&asvu@a55ijbG4sW9Kb3psWUntQ=Sl<6}3!x^cy=so6;#{&BX7 zFgaXIx5BSJ{Ly|G6?2$+D;&CJl{IDsk7nIUXdMKx%2wPeu$N0dvnY}}ioCJXFh44Z z-71?Gu0U(b_cN&CVXStOtt__gy|6Y&wk|=l@guNNfjw6GV6$mwW1?fDXy;7qw)C@h|iX-`yX32xYMcXooV})85*0}X5Bf+&aVl>qG^sTq|P9Gwz!$9_Ac4sWNcH-V=&zWbgU(Oo7pY7NS@9Z@n zDe9fgpS?hz3rw8pGoD}2fCpG?t|wYAAr^Pdyyw~S5A(eDXD5Hm&leibKMXo_9G^dv zf|&~)#^4>to*hKi&gX<30c00}A1)UCE}&Bj;0#QW{2Sm|KcM(80aI-|1f6Vei&y zq4UyP;L4T};ykN(wE%xbj#ovZxlc{2$FOih!)n4P?MR1r#oK@7@zt4Sh?RL=pQGl2 z4ew9?tuv>;7!Ud}>t9_;=|5a8$b6cdybJPz{?_klX@qi|1iCgT3}l4;ub4pBs0i1h z27mb7neAgSsbV=Sbl0z)JnC~mbTPsank#1rpc;rKxS^lYOagmrUklv+PY!ly*26T z{HS?jTC!&rM`a!7VzItu&TDJu;AB5^OR9UV@z?F!o~v4_n?>`ju#mf>zPppXd-Uxs zecYWB1l>`>-`%D74x#fd1^3QJWXDsa-PgU&RS6tqV90;x?u&50q<^o*>G2VMJ0jHs z_xUceb$^1u$1lZntdSopFLB69#sbpZlsO?}xJVl>jH`ZV6P@)aU*MvVERw$owB&}a5nIZ(T>Y*0SbSje=^)J@| z<6o|U=)YY9DDW}&t80L`86XB!LD?9wPnqMF`WBjzXn@ zr3Ijj5&*>hG?^Lb+IBV;=L8}#SjLf~wyUsU9IA?ne~-to5NA{c%Zandc&OwfGA|z# zgeQh%l@L1Zo0P&wajW2CL{7&8_vvTp0ifvkY!g7Vn3T9_Qo?jJRJ^6JI9-bMyYxQA z!h*VDDI@@DI61TmB^=z+Nduzf`ve3GU&D8U8RRGu5^~Cglf~9sm>cH115c_S7(9a&%R5f8>EpOwU!ubQkA}PeUk_Jog{K$IK>JNs5oA zQIi<|!VEsm{+Z-cf@SD}D#@sv0u(|e5W?{TRDi66TFO`$Rdp(zmZvuMLnD5I7bAdg z02Oo^R-LI8DzB`mX53eNp_s7m$W@FRMwoAtF3*M&Xc39&y0R;FNs8-_m&6DDf{xbI zrW*X44`3@gD<#GRnhla<0riWDIe^qerR61Hug9%mm|E*7c%c)hoQHI#P7!w}IM(oz zQ4_w0B4lS>jxe52Z$3}FgXoh*Px`8$mJ$@}hjIgdhBj*E<(NwG$^vQX4=WrE zB8|n1KMgPn*oEw1=Aexr0QhB8Y;>`5VY+FWV?5XZm?)ya=`az@pg042fe*J3ODalZ za2R4<9_G_xza%9@*`kpm6_1<)5kM{$Bw48~u_zkotpF=fZ7Bo7;uw*GuZdpIARttb z5hk31GD3m@^kHt*MjntGV^u6lb>jor;k%=_u_GzNlO@!%2Y?(AAru>M?@TCvQ7$o< zNgjC&31ZquM*k=tB0kJ>jG=%>^z30A0K7vvm2Tn)sd!@3T-6xBMAlm91U!F$AVAbgTumDzrJXCMBsyJI z0tfUSV+0~2V=aS0P8mYsXb2<=0HV-1BOvNqq43{};r$K>4|4sJu}NG)Y9}+TtktOY zt&&`tPrE;o4?BN~>F|>*!@|-jldc|c11v|;qu;Hjc&-h@B!_`af075q01(5taM4Uw z0oNdI9{;>9YtHqOi$^3-k__4?zrf!Fo&;`qZ@K(Rs%|WTa_spqLjB%I+eO)8AfG>L zi6hGObGAW8iOhbv4(9ylmQJ_;Q;Q*`z#{e_Zy*X;uj#x0YxkBQ4N$yW3~tLXO!$5? z>dTFR$(?rfoJM0)ke40*FM*ZF4K9EH96(7aL%TceuI080!|Z%)c%$B}74q>HtL(^! z`Nv1Z4&OOCsad&%^Xf{9SX6-NA(1BFBYqd8$}zw{y$jg{KLh$!P3ygn0`!;G{{7b@ zkT$%2mCrYT^n8&geqs!l=rPEnA?N3C^07`4zn_1;?x&$39RW;Ry3i|9@bzjNRH4!5 zbHe=99c3I<+B1Q>nj=N0eupXCdH}|rJ$2~&5T`!>xG)cAdJD`R7y8(kus&zTcfmd1 z!KLBPoquvRqW4AH_y={?{=|gHmvX>7N`R6Bunu zXF@POd#H#=AtQkjj6c9utno=62!&)A07G{t;!9ee|1O3?Z2MxW9x@nT6b# zs{5pDMLk}Yw{*tYSy5v7SMEK=lTa>vfah8Pso86tI@Y(QuOpQfb8LicL1l`y(;T)+ z+lSo;Vr~*_LTRJAgX}-0CL5s0kNTO4*$E_@%C%zb>QuEBOmBI+iF$1+V69{%<%Sas zbub8Jswt2r=gjFf~zAs>$){MVeIT(vV|GY(jvZ-OefWDoUlP zWJNPffS;br=jJ;^vqkJ5rNC6a9(=!d-;Y_g@bf$X)k#InpCjXUwN$@mV^fD_5brV| z2zEV0_)uNNx;WfZ$ips_C^oOA2TfSw9^;@08q8bU*KEBCqQ8mbfMj zK$>MR^+R|`k~GNcB@+Z7I(*+U(}BRehfv0+J`bp84_3`h8j%j$>3es!8LUIYdJa>gFX#-CrlVW!wuHUxai4a5NxS#J<~l4C;yfbao84obwZXhb&^ zq`{o#m~3QyB^3P)6mxPZ?hw>1L!2`*^hZN6fDr&_G>l;cz~5X%HO4nz!oPys|E46K z8%IO~ON>TdI3mkd9``It`RX^YH%~r2Z$Xg3>g13>%wk!FcclB@i~zZLW^miUMB`xC zf}>$0>Bc;gEegp43NqZ^Bh;|uz3bqc6@Pj1d2rrtPnM*uA;8rTjb#R?DL)z0VbMBuBQ;PW$(+%rPH*%W|K zh!KMFDGFbAAqrKIa5Di3P$HC@N?ubDC%;+--JsLNO~cm0+>$@ z#G%ozoNc0ll!#=xL(^ICJOJ5d$wrqtGL^jrd10G8!|p=rcEGKsFx?=oEqyTtvqW|? z)q8!$o(;w{Gpdv=W|ACr)qVz5Ff*Ld%4$HxMnL~Af;8sVMhx}7;4X_KwUT0y88krn z$b>0UTO;mQ%wRNTl{hrO*F)k#OMZb!KxkJ6nfq9w#cTqh<-~| z$C~EPbmE_PD3;nImevTEs#KqZ&8?eNeCDa#G{Cmzd*In(wYB0;J2YUAB4erjZ2n>u zl;q7NvaOC{HEUX52v5J7dZxNjvIYg6Dm~6eejGKUeRLURct=dDY774+3mag}XM2O7 z*exH*MX+Ou`;{d}n1vY0>|=t;a3-x!E0sepmH&?t)A~KFTM!t!o1WtUZO=l&b&t`{ z+!9g}szsM=WT_HQ+7vpp)JPM-Ba?0pWtk`KRemUGIq&V7A_NV1CklSYcIY6y@2a|A zkD>mux*jO7lcmugAw>$GWT|17oTms@rS4bdp8H4*HVzyA!jc;eeUPb@Lz}1+>r7^r zUlb=tQJtv~k7*%^ap*y41xIeRLRWUIUixjGAPp1F1JL8dE#{0`V32322rrthk@eXq z)y)Zyz?Tjp#g^(Kmg=gqkVOdv20`VZm41#W@?MJ^hdZv-*sGyg$q19qRI~!&!e+ro zSWsJL)AVOgSRQ=ddd`ZbKawy9=WEQVb2HRJix$Fn7uJ^+wbMo0TYsCk&Rk{a zC6u(H%<4sxtUj}@StIgtWi0C)sudsnY_{O`S+gtMz(q*YRbionC!~=EwyB+wc1G*R z=t%Qp`oN>vfMQ4n%gRtTqeYR;MU@Sp(I)KEaqrQ5AAFTEmn|k5^E9+%K)P(sgk(Qu z>Y@{4Z7-9gWo4b4ZT;w>BwNL>u+0c={|LP3D1^zC#x9(qYUwOw8tEXX*iN14G>)rk zWdZ^>HBpt^RJF=8u*|`{yk{rhU6u35>_1zz!J@Q|YyaWI?l&pRRyOPgrs)!o{YQ-I z9m2F2jq0@-x-WVxdn^On4CXs-)hf!>2Wu$XDb-SR)j7^AN0|AP?70`9AhW%ei0UHc&EsO{o?0=Ag3#hTv+oN*;%mN(buY;fA1w2A6Lbzj< zRxM%<8&b)?kpec@U`I%M?W<6Lx=@R{egT7g5gEgVNQR7l$F{yzi-FGm4zKPVFB?i% zjXw!H);~x=9o#Y7svP^RDmz9We7k7fE0uxg;)MC+fcJ_N#5ujwVGsZ2^e6ukr$P$% zYu&3*K&*6u_cwgD|6fSK9Vm`XRBD)E?UHk%pnm|HZPJMdVzH(U7gScW%S#_?FCHe2QJSeGH@*8Tf@`f7R zyrBmFtE2${@P-<^p$2cL!5eDuh8nz~25+bVKUQ$M$OuO3TIwW_0EWO(DvaZLsSc(s zA1e<9K(CtMPbIlU6`8+@_0v-))m}MEAxM+(8@1!scz)zeJ$xf)P;XZ?XmjN0ymzY?twasqpA)m0nn^Yf=YLN7X8oZ$fZ>Yf=YVd{{JPd+U zI#q}&NcQE)-cW-#)Zh&@NI!T(4c<_LH`L$_HF!e}-cW-#)Zh&@_}?8h_>*<>!$SB@ zE8q0iB^OS}QvA4SDqPAn9|!fDAnWpUT$pPd5s8(Y=JL$Xtm`7~4lBiV+^H=1&!v)f zoAPnXvn5hDRw7x}8ZFCn=FB%0W`O`u8+H{}zKw8@CAJiZYIqN_Pp?Ny(->3n*yTEKywoRGA>ahWW_aasH zO;xJzyy|&F|A@U?a|7Y2kH+`572!M2F5gKf3zpRzMc41g1n1ref~!w{`&|fY7iMHX zvXK2f2LJeyV=6r@?yh-^et3WRS>I=uTjXNw7yq9OgqM!@Wc*rekR(*TEptFLAVL(F zACZIZd$KC@SfAW!UovTQgrkZ;*{grsCBl1p91a&M54h>e>!H9%hzG+?-*ty~wuJh> zuK^Xp2J~-HV%Ed$e-J*OMi6Nz5&4cPPeD=XsC!0b78G)w`-EZOeZPyocbWPV4PIs# zJ1qQ#m79_x)}t%@OVr#k~Tgvq@+p$q>H_Ucz$Pe|G&VkiWWqLXn#vf-fsX zq{Lc(hWtC{pWuck3yYl~5X*)#lp5+k_;+elbYdBb&((EmZ*;<9#hZV3>fm(gKNM?) z7s54U%MO&uO>i0UNTAqDgu68ahc$>Bm795V1>Lm|DoL;yN+2wBS)wvpYGqlIgjbsX zJKq0yyYDUezqI?XXvx5I$sj2Jq8b2X1_0T5BY~q-Pyp}@00e&T$MRU44z7=IoOUb> z_JaB5{`~*!_iMVn3y9q&8hvUc8#tw(`uzmU2%rDz_X(s!q5SxZY_!GU_IE%P3%7tezTr`Cj5l&n3&%w0Bg!K=p#RJM|sp>rQ;G{y~O$6 zrfLAen~NE(B@2qCB;o>7)uvHP$NH$nGBOS@z8QddD1ke*1}ZEIDuJj_#dse*9F{!X zoS*Li6ch-d?|`wG`@1+ScR16S?@|QIC*nhzZDpq}h`MO#x^VzK4Z$|OBm}5{-;~*d z6>`57@tsEpn7K$NYQdBGq#0UaJ~fHID!O>YhG>btZW_t8`^vZa4mLsJQwf99a=X(h z69Gy@LD58cwf%rWa6V)3-hGYk5t?58F%94!g?TsxdR6c>3yil z*`q^aK8X`C_&_JL8HSJHk8?>wH6URpTP>4o-cC@q0Bptx(2p+6CXy z*>dBB{?3H~?bp3dSuFt{+LISdh!+f@TChRh#c}b)-^yIWm6M}r+9(d%lY4a&nTvDA zT0^Xo^_}b^p4vrg+PUAg=W&--D+Lw~rFtI4)(15=lSjsAm$n0zej6^Kh%e1#E-Xz- z?4z+7Y%Cq&a%xO!f4S8@unOPB)i@Skz7XO#DO~zOt4lzvo2j&Xo4IVDHGfs8cIdhM zl5<&LUspCmEs!axLy+MSGxHHwt>u1M^qnl61TnmI#J>2-bm+3Krk-f~)a$Zf{zko+ zL%mn`E0BIY&+ob4P*%N#^sfr^`d=)=7iD8F>B0ZfE0JEsom}>I7-3pnnG{?h%v!}g zsw7$}CrQXARgt5((m!onwR>qGL=9WZ=Q03muhC4+Gon}1HI;*^G|{pQ5|#C6y!cqV zbddvB*%IWL6NEYNngL4&*nI2UFaw^VH+(};a9jHLkrS^1*Bjdn-n?7~d#$|LG7vgS z6ozT=3b#s%bBYeB3riRoGxv*|Y>0XpX>c2feBAK=VdPb7)KX|?#eD;Gm zFw)!?&D_>xHvv8Edsf9aIj&!Hx+#I`$!ub2UFHFvyE6!TOR{^}tmf%#dtZh2Ml|{(7WNeKE!rL}#yTxjj`j-h7IHw1CC-|a35#V%JXKv9HA_0xTRgSs z8ueQebw#fl`SvY|KfT!4f7iaBKzfjldLSTp&_uS`fv4XUS<%*{*5f7H-6hhea?n(E zKsj_E9%qTObie{TfI;^UtVpfyP_3ZMhtjf#jE#H!RlJh0Plm!)(_MzpJ(0Ka8%lN)T?u} zgQs1w)NnW@b=t*r#&>vhb+p7`v*L6ltZ8HDVRLI`BOGRjS%pyVKt&XUrsL z19Nu#%=WbJVfFzU_Gtq4uGaQ`q4qg$XHLKDD+W%ri|p;2&I;zvwwq3|uaEoo?NL}9 zJOmt~WX^9j9n1&pExgV-s%JT~8~8BZz8PNR*KK33HW7Tggq7%kGUf2`+<|V}!Hn%< zo5WH3og>7iUV^+&9OGgt^SsN?F+=zwJi$?`-Z6K`QF8GDoN@s?vQ2_r=o~q|L%Y;? zcX=Z06y+Rim)8>Zi*;psQcj zS0*0LqB_p$5zgvzR|d_S7C~lKi95o@%Qi^Y9hft=^w&1{7xt1amqN9Urq>sw*UmxL zI)c}qVc9O4TGwvf*BTzz9@{R8Kd-%zKKs>QgQ;(PU)}f}7YS%{_?zAYx;)+QnadaW ze7Om&z6o>T2ykHz-@b{w{=6Cb+4`++=%1U|SGRE(?A1D-<4tc9zT8ANJMTrh-eoZ+ zR^R^k;`(*@^Uv+uU&A-whMiNVt<#XKQeNHtPGOHIcFi!o%bI3O+O~X>g0i#k^4_v# zR{xC}__~R|bRC;>6*goopwAT|cF#T5pOA2WZ^BxdSYj!{T0M*}66F>fMJM#;zEbi> z)hlHF8 zC%H%8>Vuw!dx+%wdinZfCsI7O zH6D9xJcoK&wOmG8KAn4f`M&CjLY?Fg`vXduL9?CEtKihi( z0v}6#0=8X($rWH~6bXG9-#XNKuQ2{xM}0YFCqBD=SV95=;E}Ld%uXoU{88|^Ecqz_ z9RM_x9<#L#={6t=9*0>=ORFCc{2O>nVT|&XNu?;5rxIxmOb%oeZg~ zP7nR{gc?i|mNJa}6E)Z!OI65LDzvy{nkvwU6McZ)Ixx@tEToWuP+;PBfC%6O{mtN3 zqd=Hqiz^g+s0a+eZV-bz-{D+|uY=pAt0TvnKh}#s(g$jK^TDwQdbN7dq5-{_%nBSy zh`uJlg21-C*C*ZmfKnr2=K(c~{f;2R?nshRa4N(XJQoz>$riH^>}|^m!h{24vbtzk!19x8ls(_v-B3r<8*D2_zu&};VMByeyg+8D z3&3Q=to0@ll@yKNh?T`-G|;EBR>$#zdcDT^f)IceLx2zxtq!0zLk1vIThd_z45Q(& z2#pywbO6f%NTZ((@p#iy#az`HzF{?rw^If~Zpzy#@X zmjq0?ncwTiqji%*U!pa<2Z@t4NV|=szi|YcK)^M`&+NeHeL3onj zMsWo0o$GT&dg+VLCGvrY+*q{dndAlMW zcZAEeIiMfx&5y98Jb4%qPYVnumQ@k64Dp+iE%d|B*g)DHF4WOhcy?exClHIcqy-rv zS^{bT-hei@lTpey{5lDaqw0br?ozR` z9z5yYR~CmTps*EdC44)>nfO>e37?ClNCe-D3qeKdjZQegob-yD#`KBcS$@1*ES)?7 zQP|Y&gRDM@x=Mb8ac&MD5(`~U?z_7VQ0~BC`C}SWecDF(79GljRVW&LwIF%XxRGnx zAaJ^h00^41tVgR}a1_Jomd%uO6ga8l5&AA(r2CL2LdJya{f?BwCrV>!1aqt&@WAGV zSV0EjzTwHxr=)VwLxfUL!qcCID^s9)qkzXmf;~9=sXcz)vw)h*E71Y=Co4TNRf0$v zmd2>kx_~--z*Q&9=LaG(G)fy%(b_{fDvDW0Sdfwus52?zzeKzKtS|J zBiPN7!ZH<7bOn#4irNu|3HO`eH$fEv_K5whv;i`bD1rb-zdFDh51Jv4N&0bLW7ePt z1!1HO5Deq+)~QV`i8g}_5{Q6eIDj`aA9~-B0YeAgfH4E4pnW1rVOd5*_=tRg1dt6x zFB~x_2ZZ0hfC5nL-3hSA^u@&lD8Q>5GwTw*BS1L`b?P7^a|d|~q)N+L?!no6jQ9;U zjL0dCeGpwB0PshS#y~i?u--`*ahWK6Lq0VEzKHD+=Nk*n_AtFv+AUUxZlELdihwdE zz*RjADwQOW2rLKyH_?t?@U7Xx+iC-ugSN5qW$jo<=wb*>@fG0JR|ASE#)o<{kH#bWA|)H5c*DRno7UNEQ)dVG7b<>EKead_g;} zcFROaagavkaWWwSwS}iGNrhukXv0q8h@}9-A>ju55#Fr?VOd;$)>3AAkC;=JLX=

      fbTlxi?709hrCnn z_hI6s^!Ec?bh?Y1usSff1el=|? ztem0ASF1RFmF>r39AUS#YsxYFUF=nyk;U-qB*e_kZi}2zp1kWHCi#0rdAVYLm#xuk z_jivXa>a@98hyZh-A654`n6n(&1kQi?`3X}IB1Hhu|-M(GY#t{rKpK-bO#NCBJ#UF zOA{hAC^g9`SZW6<8jP6=0PzD%{5FiPMb-OtzuV{LS?+)gT}Q*%9Ig78Mv~0~2RNV9 zmu{`-VN_F|L^AYbIPY&GwsdjdV_JY!JZ1nffibMxGI0oWR~30LFBc8k4|_uLphaQwBp$g@b~>=T+t?8obVnNzpBQafpX| z=x)m3l20whJ;L5q$+rywV|Z?rDeErzL<hS~7l2Qz~Lu@HItCaB=e?U zRM<2Y--7~mIy_sPY)|o%$y#|rcxM#x;dkoSDed<$rhHlW_ka3bB5JI6> zck>QS#Y}$Sem?dipJ-Gn`E9o|_h0bA86y`jbOiG=e|bQ3c6h=LoMO)>F-7!r0A^$d zc4QQY-V|uSN{D}D!Sap>bQcb}i!wBwS8|AV9FC}C7#6X@K1wz!wDN%Le^lEGVM#uQ zOPK`g-oUNgY^vR&f#xPKmZbxUqxIm?yD|3U0SmHX@f3gxSwKUCNQW$7Kz65=6k6cj z{75dgnTkGzd57qIr;HDvNV~s{eyAk|Oy~j@QXrqPF$$kdh3G$6%VD#6PME11h2)!+ zDe&k(1ObZsLcMLov2As|VPidjlzt7QOBVa zRHzBU09zwRHH`M4usTS6RkkK1LrsRV3K>YpvM>-yHGH`xkK?8bxG_L8_?>3{Tjlcr zTItBEHA85qp$Lm1_th%*o z`sbM&vb(F4=9}f8mneL6zAXTLtiYa(l=(O5_=!&HXkRm^l4+oK`UGt$ukFcrjxbk8 zGGzHSMfNgyMd`p(3a>ydOz_6SRhtS|)Z3)AB0B~`Y{qJ##_=(6ZeF?)+9+VNIqd{qOxg9)G~f>p_+1-1wj2QGLmC-{gVN~X_UX2Q=o zJCv!zGn5pxVJe-B!-WkM7wHf;eqyJfB2@j}UMW5**_NG@i<~*&zU)}*U5G-Cr6_}y z!H$)M8KP~@;%K5>y*7ilxIpRnDf7%Ji%oM8GdxpQ zJhKoLE_5I^6pH#-1SV$O<9Fi%UcXpAl=0_HeRnFgqoF^=boLi4cmKaAy`Htu}{ znO9!r#LQV_E9X~o<=XJ?ZXkXFpngjCWv(rnuCYG&nDm6R<#)>jIZdT@2`?EHeyYdb zHEPLM#@lVM$ZK@A_~x}|a=M=bV-^8g0#GfxB3aNwSw{GfdJ@t{(5)=v4=97 zv8u$w4&_1%7f=G{y!NM;4nGRAF2^b@zz(}%TTzHbE5hPSbQ#NJY)UL_>vRc=!q&Ce zM{$Hj8%*MBD!WTM*6Y@6+oDGko=3_ftQF!#I|AZcu(0)CN3sQM`zT*`o7lFL*wWOC z4)&mXci{OYHpLpYV;Qvr*irF_H2_q6l6Cl#X#ceC@GQ`3htFmT`?!{f{bC7vbkuXC zVk34_bj3tw=)ryySbP)tBpN(%2JClP#dk&Q_f^IBO*S_s$8*AHU!2(WJBqhsgCFK> zYEO>65Ah#BB>)T#IQ+j+gScZD6B~g3zfgmd8+&#qmXbdf?_nk-yfCE_q%R!cpb~Hj zJ1E~8A?hEfLCL+wiDNtmQauOK{ta?ugZxNBsJ^7NtjrQZd2mrZ+A_0 ziq{|1)5uBET}m>{Njm*EYOq~Oc3euLOG*BRlLD!X0)vYZzl<`!)S0A=ik*x4RT=eL z`>={qc@eIEq6R^M30Q%L`!ntKHT`e2oxvb#tfZ85Y(qv%Pny?-gzp7#sBMcX3_I z#?Jo1@mXV6e_VRLQ&^&rcVujOeq(39Yvi}Oj$RX=$eE?J{;_E@zv$A2wzG??k*T?W z#PnYU6&pJT7ne7w1r;afm#IaS-*ZZjPcIIRPa}WjTwLAcS2Z4m3;(KkBj8ui^HHhExt`ttgAYwuukZfWo6#69}Q`Q`Qa>|%Li zd*A3(R7&o})$Pu~vB8({-jT`F!phCvgUr&J$!D72?3pI`>+Al%yq;--XPV%dCU~X^ zo@s(-n&6oxc%})k42}UEl*>~~*NlU&-$lF6|F9lna_>abaZdXQVZsP0-Ha}O-Ow=m z`W2r@Mg+G-`_F-UC_U}^>*1fXaVw%h4x`gf7jU$sG|5>AIpUAU-x3A(a@d0N?7H^y ziGfpPcwh;H)KP!7i9Qj^*C9`SVjI%V0eR~u(z6FklV;C#`M1HTc3bdbVx(sPg^Txy zV`GUDO&R=e%!}JusoP)mU;GhikQ^}!qG7K+t&t0E%9M+KW8~Uz*wczpw*nFjzok$> z^ZuAP_i+Y;CP$3av-Okzo$)hGAdr6^{Ca}lpK96n3=ay_8X$+BS zcKaCYj@na~)*XfF?cVVtHa^%yzjum23XtmEq8Nlp3j9&}KG)p;Nf`M0e|8Cw-!XB&D{Cl;aO6w}qVo7)af+lddeDN5(ntxD z_wB%h>6CsHvBUzgG=#yl-(p*TmbLM`Pr{bzQ5t|XL2$$g!4j?M8g_j(Kma^fYBiJs zx%8J@>r*g@R&vnGO+7dUOj?`X4OBg-r1uqapQTA%PluC19%Q-i6)>Ih5O7(rCtq~&q;a|qW;Mw7Ji!BH|1&%QqZIU!p~I5J zxKt!_$|5bKrWkyo7K1C|JA&_szB7}qqds=u@Q#BEY$$?ftdDoHF~Ya5#7Y`35JAn} z`9fIqNgJT%)E=FA-y!lnDW`-Wd^9QlU)n(RU)lg639iD*fYKY~@^^#GLX9utQ2{D# zz1E@cgZ@PgKpN%!T4*~)XsiE04PXzDuyPA_PB6Dl@~wTW-$`CZCJRNKR3e?!R}Qu` zAlvpK+f5@AuZ(oq`*n<*qRkcTjN{;;l;~sEJ!{bErbOHdVVf zNmW0_z&-6?9OF{SWTz}>kH+m9Fx`!%s04dAV)1kQ)B9JK){JygJL5roq#$_RyYAU5_YWu1mCZ;qWXCfid~G zrHFzD#_ETQOVx{SjvH0C(3Z&%mz}9~@3@!GldGz({)ufm)ZN5?^u(L z8kckKbzxs)A7#1Vixw|%SCTGufhzn6MY>1{6#yMkWVw~knJZikdPV&!D17N?&QOdZ zUa+t())FVSoDOJ9&kU%qz^%_BzKSC}k55;P=RA!YsDG2Xir23nQn^a({F|)k6-AdW z<&}OK?V5m~!RL2tR9)q?k+2HVB{g~zgO9Oml74F`g=>st;mp=^Ea<#!S6UoRTI?qJ zTvKaJU!Nd@bt+B6CaZPKcZMGBhGog?D&dBs-0R#+VFFW~g6L~+rVPh{8`kUV9T)46 zq6I`)qiC19gbJ(V*0hL(k(bZLNZtlp!iMxv!n>_5u_hilJT(O}8F`7d_fs2~%0{y< zjX!H|p3`i~eA={*Fb47(UwUqSPzh0ojcR%s=yYwaUm6RKZyKU*=}Kg2R8{Favl?$H znp71T=}fl5qAto+*f~3A=2VqfVn8! zUbaMfu8DEs&{A@i`R}2_l zDot`~vp!XWglhPBnyzN*KzeOOd@W0cMOEYVR}5WS+YJ(itz?$XOM)G8TJ2kA-AxRG zI@&$xmc1~2*uW9*klao&9s8)W*_aCN1f9;XoaNLn(@7PESv;ocCd&~oj5$7r#XzR{ zEBwwWr6m*g6*9AN6P`7Y;wqoQjIhWuh;{+ps&7iLA7-^RWU{$Me?TU=EoZbdM7?pv zb!csQRQ2Li<<)tD#6FwAnH|XSW__K&do#pxr}F9En(x7j_fh9? z&P^Xq)$mqWubA#+{K|$JbVBKM(x!8=9%&2ZJDDgvLFPN^v9>J|wY42M8QnUrf!W%! z*{!14Ed?Aj3g>h{h+~^hqJ{0^W$n8Vq4>F~R0|IjcGTW|lO4(maqk+)}ponoM$V>(-P4B1irvFAuU z>f=7=vO!anao{D_WjfxgN>AZ)vEzw4XU#hIKRiEcwA(TWXI*v>CO_vAzPLeij3KyS zV0RSLb?Ec^lx5-Q-ez9`J7-KlKkQbN;y{y zvW1r{RlyHe>ZaC|w^5hp*T_DRvJs5=<)pK1+t_}26X>KreO}9aWiNOM)Nwvi-Za5q zG2K=+m$x-K#<##<4zIdGI=TW2J6GRdVUb;9vt7UJy0U!h5~+1fgnoVEu=qLg`W5WY zf@`&lD@LFDw9AxGt>^Xi=w#0q{LlIW*FLXqG!L%*RBtp;ZvtFy6j^S95^wz8-GIw) z!n$w5kBe5cI3liZqL6OGuMMn*H(i#wt5I&_Rd2s$vqwt0CIsCkCEjij-8v7e$4!?f zrrah!(FCTfiP?-P_;+c`x8J*Oncld)8Fx*8q6zR_xsN_)C*I{ovHy&Auz# zcDsSUD?++2S^iugf8|Se|60?nRQ0~{Phqj?eRa_NQkk2LusgrItMI*RPV>D`|Gh`^ zT_`P<-6|QCQ58q=Sx-mw(@E>3vr|xyl z4`y5*gTtjg)#bfW1)Uh$liONDlG$x;%eedJ6R4*GaN=XM6U2f&DCdRE+fUezFTX{$&?1{HI-T zJdA#d1UMrHpJylUPWK!Iaj(1`X#P){VCRIgBN&@rsle=%sw+?~Jc3{KBm`USEoCWraUzLr=LMU;=dW1BsxqQqVgX7*1s0lX~UWzI#eL=qh_ zPV{I;Z=63e4vQXa#M{RY2^muY`Ann_he^3Wi|~_$u{Rb3QHiVfCDT%<>>t~K{lvA= zW?!V2Y?cK2%k81~+|~y(oZXF4Xw_>Ba6S+%5@I7y!k15=0m(l>gP#b@NHsrQ9kzSJ zu0aX1N#-Bszhur;glzhXpy0YW6hK<_@W36f&oFb&jbv(Ao&IE!dfzS2%^;rhnFAFl zM1b`U4`g1cXPbP~4Vw&!dW*^Pxb(kl{s_Y!q^P&2-d+UJlUzdDvFI2%Fm1R532Ash#YkR(PiP!t=)q31(FYGwwNjJ=DF%_h4eL<^!YP@;nOnc2%H>3kv#=sayP zKNTS&|HvaYCSWP;#QtQG)HeHTiemvFj~8t(8(abwmSG~!S&8}!AX-=0 zV?+H2Nn|+#A@oW9q9P1Q7v2!lB!7^Y8>qz;U=!;eo%;tpJ`dJn2jbYKqO+pRuK>^t zjJDP6xkYEEs;JqD=@~R|c1Jr+kar`z*B{45q_l`;r2fIv$!M--AKgRa5oY*+0!HkWCONiz_1@;Ru?oPjv43BD( z+aP!;pyg!D&*vZvT7NjqJ&!0|{??A>O+=ST8EppFVGD~!{lPgrdXBz0sJKL`31i=a zPkFEfV0|e*nVO`dc`X@V-&D7MSl_HL$L~PmOGYxuH584Un`1D>1QvaJ|BdF0 z8}ZWk+I96K8W7!&d0`d1x~9vH1|9u2S=u+dF{=baYw>=%;7lPOu)yR`-7pEUSFZEd zVh7BA(neaQZzp7mHdN#2B~fd|k_v9obCCItj*trPyAVzNdO;s!IIyLEa>Ttm4gviO zUd7q#R5MA#9sq)EGk~DPoP>t>Wh+4$!)2sk19vdWU=Sv%J=Bi_XB~C@ril)3;04`Z zc7bhkk?WQ-P#*!YL>zOf#(=_k159>VBU;W1i*a|PNgOhRAUT!3035A>8^Gy)u9N#Z zsEh`HNCE(vbqNFK$0;OAX%gxl3hcm<6c>$K86LR<3iSm8e03L@*Jo#zQ8d#81}!o8 zAC*w)TD`Zuq@rD5Oh(}k zanSd(As>)m8v(FuyOoFnek{t+);OAAdQ#Cuc(8yO#HIUQU6rLC-qY5Y=*PZ6r9mPr z`9OV_LuSVLK?ogy4#4Td3PkBh!!+LDGgT3!|K5*I%`_SU!Uo2H^}!?rZAkCo5quX` zz4(a4(7i?wU#+BlZ$kxeA{xApq;P;4&Qs$H*LTW4GM1-QvVa9QYkMXR$5K^fQ;krj z5YMnOaIW_Qpos{Dye;X#(&#oaqEvWHARL2cfSO1{A67|1VT_b`PT9Z?aX2;&IBG8f zE7JSt9c%V$LTxiKav}ge6vt5VQcwBZRdAkDffB|O%n~r^v_Y0R;=k2|Ez39{r z3xsTG?-Hc^6F4a(tXAas7GF>a1o@pFyt*$1kmMr;y2*|ox!cXuN#|w0#AEs(RsKXT zS0!a4Yp?`Diz48&V`;?X4}0-^ZKVL`dJyfQQ2qX*jxb-t6^*&^b+49&94??eVg|B7 z1gJB(Zdh+*|K1U{Oz4aM6?V6HeBZaPdk=q8KFiACdwRYMEH7&AB4YI0WLQBW=WpYo zDGA^%_<{II%@Umr&;QLr6Y>*HKy`Ew@}WV0yidNf@cyKf|G>cKi6$WURmx@)zD~+4 z-X*Al7w(6&Uv0sNQB&s<) ziz2_T&wx!Op}%31JOA6D^)IO;{BhDeHALn;eWi_87X=IX$;}Z1i?ne0J1@ zJgmo35MxO$d9o+_VbVMR|8kP`oH;t|B=1Cy!9}GXb99bPGL{sL7GmUglb`vdQb*JA zs=_;`I$C)Fc!#(p!2xA4zZ^6DA{LrL+$Ic|s%t~uTef>kL21^4Lp&HTi6$Z(EhfnE zmE58UCwC-X&nZS7JP!M01XD9xjE3=JQ-}0zz!T(11Gp%T7`fF4S*k{I5uz=Om;EP$ z(7nqOUw#4%)RhcWVYmLVc&X#CK+~+FlpUmPw>VJC)YDYnBeZl-!bUt|62q64|7d6V zseW`(r80xjYS&>{a8XOgMc*-tA(DgX8>*|d16JD*z;bU-o;KT^iZ@qAU7KS1d_9A@%thxzH+$Ot9HT_l&+>D?{O|ly-xk+3DK_T<@s|QP*IrDeW{<>nMuih=| zz3CE?{3(c$yiH0k)f@6*zYj@glTN>O!~NWzD{X%FO`w22Rc*b~*Tphjn?{j?PAm`C z#-l`32ptj?d*n#iDgvXA^m~9qdGMx z7d}Omd^(A;0`C~fMF`L&DP#{hQ*i8nbD5ZkfF$bZiQ-SGM{+2UKGqzHo? zfFtsll1#ForDJmZW#D%lxioTQJpkqkMjN>??<9ml55Td4IYl}Gp}?*Dg@~dEawD(p zOf$?O1D~zjV(F9h=>SG_C?fSxx?a#LQlNsoQJ>B_-SnRQpA>!I_-SG1-0P*nq!jDTf|z2@S_t5bily_o@fGn zk<>JzCGw71{p-WEYgTE%)q60Ebm%kT+>83m%iU(z`(sQw`(lPjIKl8j7IZ|l-uxoO%IP_b@NuLv25K!>Ag zXcRWrc+U{2xfUh3KpesfOdtp+3Y42_9X~LQ1+PQ+*DA1(5{Br_TSWcl`;RxG0m33N zScAVgBlXDcC@Ex?!RQ76D223~p6?S}0M10)NtbY@kt8DbYN3|eT9va;Bgg6x;#wz= zzp;DKf+juFisK;hBMd~jvnjr$F zRfLBSC9f;eWlFOcON3?yL~pW_$qS&y+#8Hjur8_!X-|x0`h`~wm zH!->L3*V0SV>T<1%}8gs(6WAQwjzdQq!=b zG*Q8vC4Gqh(MNes20#IhWW~h0P8>%4iqNxZI<%;wvasLK6TCwTO8)+8nF1S9Y9bI@`)^K zq099 z)`=$O8I-{61S@uP);SsIv@mT?fz=F=1$+#QbwRXqcB&9HmvspnF?fj8<>=6|$BF>1 z$ZLUhwP|#j%v!&~DtoVR4L*Fud3=2?XjQIgmcM8d9k}im!ftZ(A-Hhbjm_y}(GH#J zTEfxxl@&oU+a4X_j=j;o9B8+zh`N;R5Y)L<_e38QDKuEGkFg$$b{v4%17_JyO`u2V zyGLZ~sn8>BIQH{4j0*{y(^Py&wPKu#<{u4YG?-$yRycu`&Qg8c-k-x`(s7}f7Y4e#W| zb_x1%33|3|{}~4+QYmJlE!wLmH2J&xrh%C^H~J~c=>#eWGTZsv6MAo-tY0#5Sl(!Xee<zO<+$#4x)a`MI%{8BhN+qDukq2k=C?~&gO|G;Icz4qYolso4zU)#`rw)6c6t zU8%jy`~MtGQ1aiOCcv*tBNs@guS;ha_y`0(BL$|uQN1G*%j?@;GYezV^6ESK_K!~! zG7GC(I@h=NjJ`yiU0!>{{51EAwh4;!OGy2dU*0(|mRnIjx4gEpv6ENXP*mGIv$#67 zuv}QvJUltq)ICt$+I4((VIT5!_wd*^A*HQvxTAlxw!LR!c4_bMWN31>wRfnvw#6wt zX=q~BDlo35t$Si_$>(cIQ`f-R#r5>U%JAgu+Scyph;Nnwu~jWy$$!0c^p7glm$+X! z<@Jkeo0+AxKJlqxKQk9sH&-`z{SwpWS2lWvC#Duw+WUqNPtKxKbN3F9?Lxlhl-KPa zofcL%cMXmoou034?^ZQ;MyKTsPRv|h-<>=o1^<^m!QYQPBL&Y$!820uj1)X01Bm&sBb=r?(^lw7)YJ)ZozHGQPVgr@`YE5O<5fjn1`UTuB} zx>WVyRSU@UEX`KsZ&y8#bmPSS(w**e%lTz;)QhUkr<2O}devtF&i9blc~8{$O5bNXCk z*!h~JTJ$!-`cfTd?!2Pbj zCyef@v)!vC?{kaq8=7ycrth1!Z);qPr`EWq+T3F2xZA$CDB?e~<9`i(F#%njbyeG@y0?tn6`f&ujIM*H#qE_S-*i0UjM?UOxZ3VgLx1 zlMocS0W!e@09jW+Fh`qYn}0kJs0Q~hq=4v^{lU&Dbx$<%pJ*0oMVh{NCe`!|wKAIi zBremj0`qgap`R4Gv6eaK^dsSHt{_&6izlQ&hWqSc-GOl;M=4vW&;l3Io~2q1?+p_l zHE1J8Md0SN=!G8}uuFP`yZo?5M_tA2YBK7AjWppy+?{KKENkB4`>2S0KQ$BV4)uf__X zc1Tu}3h=)EHAH+0sCu^E6+~Zn%n0^CNQ$Ne4G}wU0Jf_g5$6)20#4Vd1=4}TAq}kJ zEcjeXIo?hBh$w{Rkk8A}l5I7()Kj!CN(JT0;ey9Me?k2`?uteTCq?0_6|V<)!AGFz zc~yxEXNLYrKdOqfN0S;v8Ol$kS_da#@c!-RF$D}B5|J2qEXr&xiHutB7$n$ltqiI# zwzgmcZ^2VUnsoeT0tb1BXHtp;uDCNXsg~LU`5oGPJBJJ zYfW1KDn7(cG7p&kgOZTYR0^|7IVc>D&z~NEyGIBRy&Ifd)^^MSW~YTP)#Zc~vd$^8 z;p{3w#OkA?O~rT&pfX}?mNkkQXtEl+nNjH%$+={M-}d~>v~fV<22dJbcl56)0A%VG zNkV{O^e85wv15lJfVF8xA-urCKc`HMS4O8ii4F5mc&3gz z&F0o>R}gdlV5>j8x-9TH8f$ssrm!(;kwr{O+=7%j(lXj`xwL--D-#voJjxrSBg8^8 z;o<2dKu(5Wp%A1&MiG#cMX-p-1BhC3;M8PJ>I&!zO7f9eMMv@GvQS(4&?-@jYWfS+ z3Zi_ zgpO5FgWKkv{g$;UR)jOEH&)!#PHPqBBCv<$>vHGdPQ z(dwA*nPA|0lge1^itdqGo;qEGxsyhzZ6QT>viT+|i2^q-wTFpKROE#cjbGsWPZ&)w z*FG%}J)JsvS0P(qikAkR@{~-xC8#-(ghhLUIVImLI>;JvMRT5rs_L$*IC6p=a80cR zqhRP{)Y)*}ZG#uzY6%U5hyusP;w8;WIsrK=RBD#Nc(ps78zE5+Dn^sr8_}I55waoZ z{F-yZTx|d?4gj5pCeG|-yX5SyWMetTHHun!#0sp0Qox@Iqg0|(THqw2?+jj?4h}%0 zbz;-)vmibL@%f^?Ay53!$ZhNU1bz2Vh9FJ|j6q z;LQU{4ST~ALi3xqM_i-_%oXfU$s>hjD*AyMq?ImlHPij}uD~b$A&cVLCEYQC5`^a3 z%GwFRLcKr_$5Iyo=)i@+ZBPI|jj9(95CR5B6#TzS_&t}tdPC0_LgY^ zTg44Og&rR<`hUd@Sm8rs*0)29{~K;VN4GC&Exv*_t~ltH(~e-NxMBNE&TJS$>d15s z|8t?IQ!Q-r1b&KFJsRVIzKpnYh1^6fL|4%i2TK(WHROt>e^R9${N_YHd38RW|Mug_ zgd(n87&QZ>sT5H&PCyX5M%JnzfV-cqtNUG92|rOSd5XQfVpd|)g+R?;&13mz_Vwy# zkM==1(=Ho|vRi;DPQ>=xEJ6AZ0@h$8ER$gTw0`g;q715NIgoOC4n^8Ku@TVh@D`oI zpocxVDc90e9w@HU&CFO1N6HR}KGFYSx5Ng`65H<%G)G_S=5LQxy)g=c%2|3zJ@cvH4=!qOVG>T z!Jo%x^=C~Re)lPu?Se1ikNOVnTbJQ;D*i;dY18Bl(TP)!hUB7GZbs#f5k)HFu ztT-UQ#iIuw-VP&bb&<3%KI}@s@pm^l;Jo3Ze{mEwnu^JSko;A)ZL;kUZMejoXH2sJ z7VA)N*%F?Zhn4Um*`&koHyg;nY8ryf3Gm(bj?I>iLX{nN77E32r}ngTE>az?ig#E( zN#F{tj%`zoP{YVd`Sv{~-l!-Qs~zum4D==8suN1Oc9ChA*=ZOiL0oX-z`?pRdHI#n zpR-aH&3YRrb_U~{fPP`SFld=m;O{rv0U~na=Y6T(M&oueJk44GK%nBoMVzh`E?C-FiCPlUvfFEJAP5|4+U9ZP+}t|5PS>QL z?1@6FQNG`HL-+e6cI@TYMU&m=;yP358N5W4U&^NB8ks2>H{fbX09T)S8l%eR?A@Ge zbg$c8$KBg}r$64;)GsR?)Of{x3Tsw69X4w>cdLI(*K3V!*OR3m%Ux!j`(pq5Myhcj@dY#j$wyyDsa-2(L-x2g`Nj+|fc<5s^5k@^}3p&o-oI(Ol z%NczW0-d6*B{Ag}L%C=){o_^y5r1@V{V~n+-&T8Dj`iSS2#S3FmUD9-sh_IB1YHnB zmYEMU&4e43zqQ2~9?wVEp~0{M-6Qqi59H(9(L6GNACUl0Oy8b_K+jRXPD{v!2IM!G z2=Qk~u;NTXPgK8T=njtaYp(KZpJ)KRu>d!^n?#eL%wOvMAC3fvkM^kL+GU*Bw#(t@ zv5@*t|6!qN9{@QY{30h6acJN1ZV|f}(h>`n=dpA&5 zO$)aR)iZFQFSy14+#MuhN?*m@m+4u|xJ{u>oY$vqDMu})mzBUjdYdImEvgDeDPm68d&AdZNZxig%(l9uHI!X=05%m*{0 zcfvcEayux<{Zbz+q_r*TKkcav&r@#Dllc~NQ(MTs>>TkGQ?(FaEdkk9{}~NY(w%#7 zgV1#OQU(PGg!aTt@dMMl(FCo$Vv*84!?>bzOghrRJ%I%ajT=h|SxeB}KkyLI(rEaj zFi;hnNr$*Zhr7rOevk9JI@jicg1DujD133hmOy`z=MJGR05et&X5SHHYNfns48v{H;-2I0MKPYg_x4s>!mb z&){Pvlyc=UTWl6{*Oq!3f$eV=c)6z?e4`vaQPxu<4S_ztu1zl0l0@D(C;Qx zbY%vEOmgE)YV-%*wR%3tavDqp*xUu&5Gxrckj__1-6$eG4|*H5R4vm~?e|+ahN{R3 z`25J*Gk=Qga>_{6S>nGRy}s9sJfQg^4}L2{cz1mGrT8e0jnqkyCOGRLmb%=d)f&WF zF57CwD{kY^YYg_>1mDPq)gDE)u&PeywHHRLB^+z4j^$Ym*xqj@n}KY8qS(r?;i-b~ zip!&!OOvujWAqJUD_OYdk35)%zj{(5?;Yu;63G}1YYKt1K51zS4XZMLO9&}Qq&DD} znheuMN-jNgmind8YwfRna@0WgRf ztX}@~hzV5KJ62d}4G|uOP#<$ZXo5EPn?+NL&DN_M%Oc=`r2$&H9+j=DRq;u739`nO zo9mV8HVx!e8FW>n|-b3Myd3*8vCxsvV3)WuP-{@UsuTIZRB05JWSI)ORPYV z_HPra`ovlKeJfs$CuTFxhJ-1)t=5KC?XTWz*dA9w9<0ak^~a^oKl)b}j^=od zRq-1b2$D>QSLI=!cU4xmv^ul~oV2R1Ob1kbV@8}o4w}KYCozK7G=?#6R3b04Pk!HY z)U@DoKI7Wr4% zcSr4f;_G}L$Fmb%mkp?Usl@o*>&*0}?sd}XCW+zC_c|5DI=l8d=!x7bv`%@y4q(px z0Li{4c2T*ivwf-q2-L&>)r%5B`maac{|_m+?vuZMt!(%w6i_no z;YwRmt~5|>xuPaFY<}RQ{tr^n;N9p-f$$%sfNIutmi!-5z)yP0M0e+Syegjl?={bIB0YQZ(!H)t0my|-r0>ai!!n2J~hbECg0a3rt z0`UT3=}lt!0^(&&;&lQNZA}t=0+M4*lCuJDR+`>y2}m6_NnHv^KQ>AK6#$|%191dp zNSbA61Z7#8WqAbOiZs8K76d6YgFXt%=`_n33(8wJ%R37ycr_~o3Mxi4E5-}HOK*Oc zFQ`=3tW+nc+}5nzC#W*ktTHS3ex>>Smf(lO<`0*GA0L}P{uNY3X;H-yQX^?mqY+YP zX;J49(hzCUkQUNZXwm#Aq@~lMWh?|k3PgiR+Jk9CLs;5Fctk@*+C!y9!3yo*kD_5Z z?P12E;n4q2Aq7Puokh~(#R{FpAH_>_I!lbjORYOgoyE(%I?DpZ%Og6=%^aou1S@D{c&YCUp+QZJ;OYyqL&bq(i^(bA)^*9oNC@}e83nm|I z?j8gr<=TN0qq9qk>f2iSMh;Ies@r-yhbFdm501|+lZ&gGdxsZ(tf!UMMr9R;XF$?R zYh!cD!ZVA;W|zL^l?A2bRk!v|&40hXeW-2k>l^=;QC2tlZK1JyFgm*=wYa*tzU}{x zFYy1~S(tnPlMi6>0ZcxC$pS~5 zA<-Ln(ZxTaYrVxPe}HpExf|N4s-L3UGh!k&VzfkKb_Qd9CK?Tj#t!QWnu)l}AI1=> z$4>u<{pKBeD&##Q`gKXyXbzR9pOpD$JM)?-`^FK|RwVN_D*J9b)4neA;SaXsNTyR( z=JRs4OI@bxC#G9(wtH5l$8n}-MYi8hjDIqi{*to6O)w(ZG9ewaqGU3ni7{bxuwvOV z;-E3%MX?fyF%tb`B++9fLt~_n9ng2Og@0g2Qc|S1{WqDz~lp%d;pUVVDbS>K7h#w|If$=3aaGUw) z{?Kz)Li4)d2Ywp;`{hi!&i_ng>$hJ3G^eQUd95w)H${ikebYzR(d53Dt%$$bL&m~- zyeU|sJ63>LKqL?q61gkVd;3{>4?z+>r}v^r3a%Zo;DBH#aD4ziECcXLflV%o2vUp$q0(a!4&V?*-7QM( zol5Qq0PiIRXgQk*i>c}qBk=)@ocdt!j}UT7iSdqstI zn}d}R0yaS!tLRtc3kDy-v4BONBL@+hrMT7ycKsx2{QK^92PMG#Jd6|)yg}fMknMMa zJhou43!;#}s4%7s^|~Y_Cs4e)SJ+TWGG&-~ai}2^DXbvO13j8YZ!p+KmbP&Klrl7z zEQ{+td~ZJdPE(GlYPfD7Cm0nG@#iqfGy)kVDmmf^%XF94-iW@vTy9118^uWWawNUs zEO33Mq2b$((-EuKW@Ew()+aEy9H2aoIx{ZKkPxiM3;w$(XN@>!96B1*fD}fXWAA_s zH`(uuIp#Us;(A7csTwKs1Jz+VpK$@`wWOdKI`*X^Ocbh!Dti^=t1{+yH)^>)@|wz|!O5bt`aHtEe9&a6`y?KN z(yH%dMe!t5T}gDPt8!_w2D83Awx(s5C2g8N{f@u>P6?BL$`4#6<_~B}NY2mEt6XuoZ-`*N1SR z#t&PRkGMx7ssU1J*Z006HpVSUI4{25&eah}hy=7D(VH_*>Vi@)YEK ze?4Z-9GbLQ#sMihfS#)4s4&JQS~e@XvK`&vB)SeYrhyd$2uW{kPx?O0f7(6MF#pjk z=^eHvlObCio04qY59UxoRIa2rAbgMs8sOX|^5O}5;Wg=o6cs5N|MhI}Y<+fmM|FI4 zrWZ&+ibp`GKBlt(B3@0L@1TxIpd;r;rSB+Yc$XBco5VJ+%6>YF-BSL~44t}bo4%B7S+zZ2);P&)m!gs<$3!F$9l7EW1moY$SS;3@Pyi}2VLXilL zUrTJW%Gfjj3FMU>s8wvJvddZQJsO1T>TkYPs(h;c+dT9FOwn1&Az)hM5TBnj)f5g( zUrHpA{X(T&qezp>FSWenP`Lc{Mw6=<2lO)^a73g2W(lCQ!1PH2)kmHG>%y2z0XT@3 zvPE5>Ygzvr-v=U2>2EQ3LWO*M>NgHc1dfFyb_=BFNip?>fPT7}A9RvpADJiS^-8pD zJxXmx80<$dbQ6hW*tN{vv5%lXAVz2_@*b+Z{HW$K#FnPS5?_~vlXbj>`1Kt5e0wmY zUSoO{yLisK`pFb(QwH!ZEBW-3!(+AVe6b^pBa^Gq zGqth2#DHUajSnNJ%3q-8Yh&N}8g8RO>);wS!@8u(`cSHVgjU1Ie#2t6mfd!&Z41?#v6MR> z*~I8HqCF9B5ZJnvGtQ?lHvGDIwXyWjQ+M-z>$zm>1*_wJneEDB>uABaB+2+U(k}q< zulBI-(2cDhf+mocEjX)R$il|2xhsfLCTHNSJAD(B(O;N(;;6L@*m))`l_s~HCRohd z_!nY0aSVh|lL1vz=>8;0xGCJnn^UktrsO!82(!0TB-J+K)5X5n_bCqQlafN$w-ux}(` z`60lPF~)MmVP7+kW;}aeoZHgi`_w1mHp5Lrqfr)#JQX`fZ%&Lm%8oKs_={4GY-o-Z(T*Rx*jEA^>GaR3ThAQ09r+jI*O=Qk zxI5P$n!Z0c1|eLGGCQddIXMYj;6h`5wjS+2n73az9#In=f0sDdHaXcmU6s0M-oEId zaL!}D9P7O(U?#oXw0p3!I7N0olc#^gwtxBX={NE2-AviD)5RWlMw@5x7r<(yZ$q)EikR*H7V>c!$ty z^4TH=oCAQd3%RwM&xNb2`^||{l?u08*qU4P$xS}_O>*tcG}KLt;?@S^Gpp2XANS`l zyU&vzcBAie`_cVbEAO+F@@Lho8;{LfE9htTna_MQcbiAIkMD0d zS+3>Anqp*yDOuZE9LKrrn|jIF-47+R%wfo4;0a)vHIBOth(~~!>p~= zM=RaFU69UawLUDpGL}z$tQsFV^+jxr;&rsQHjv7$LX|L^pB+u5MXaPb%oMIfr5|2Z zJ@-5x8p9s~0^Ivs%fuEOpuG>qGY^ayUJ`8{7IkHrgQ$C>_iFi0CS%v1A0Pfg^D0~; zCfp+Q{mLwLXx!`+9zDGt&%b*yM%+2;+=S>o1b=+z|IsXLWnS{~@jEV4khD$27+<*8 zU5GSmqDibz*^^?KL@bW7xpi&aN?AM&W}@|$ zF=OLd@h09lmbP`-b~=$!TRsIMHu;w(d3Ej}dA>{(pBt+eN6!~H>h zwL}SxXYr+P;^fOE!tZqnzi(k~4K#jVah@y2_F7SF+MTV_(tq1p{?<_bo&N22m(HVC zn_pkPaOdN3Z@Sr#vpl`_>&Wc$irMR!wf|Ve>jcTpzY6Bm%J%Kx>$fc>=)~dcY@pH< z%Aa{>rEe^M7EzRD75*$si_XW_uSER$k^bjmXAvp;&)V3Z_4F?(tzR}C|7@WIT+#dE zmQ?%_f$l0m&nmyPDM1gspoc45o7MqGWzZ98==P=E=?e7x@1K31fD4qrR}s9&e*>;X z{@w=ioIRf1DExi!3Ou`kKBoVDmgc@G`}=z=a7+E~hi`wOkAF?zBLQ##Tuz%S+CeZn z3BSY972VrlIH+p1&3`8!&?_Wy+TJiuCc@J-Ivn3HsYJ2;H~B!^u@-#%Pd+G+jlln} z@_{VUg~Q3+f8+yOB~80~c9~3#Hn(%=$$iyCp6(d_GWrAOYO`H-G}Gw=*Lu6#;R4p= zo!LgW@8bArme!e@|H!{BLy?nUY+gdD(>3w;9dD+_By8Qe1 z?KzyNiTZVLI!!Pd`tp`LD*F?y3Z|@Rp&z`ux2a2Y%V=&Wsc&Qgc-G^IE(!qFrH>xd z%P@;V4iKS_AJ~mNe%z? zSEx*iqB{lvLD2&4Z4PK53NH_Mg~p19i&&DPNo-L9)U8F?^ZvjuR*=+BC1(A_W2eK~ z)J+y;Di!Gut|g#BwW0)Q$leSOhcAXMCll1l##$KOiNfOPg&k22#3H19OYlLmK@}dI zvmc0nDS8EjN0-AJMp0Lhkt5PJoM+F1Q_-_5*g8JWF7>Z`tg0Vb*k^ICL1l!4N8DaG zF4uFan8U$BC7i^fjC4arNFXkD08EQxocm?$L~y$0h_mAnlhA@>kWSGx;gC=*;exy2 zuYn20aP4UQ1@L+&RnYL8!tB~^c>sPSEpi1%!XPFI*ts`OKH;?1{=tsAVbr&qB0e|x zF_Z=V9yo-D&!&o77EM1~ih<(88!f|_9osm0m#O@zzOMzdA4%VVE)hYD6ch|1cjzBL zrc%^&miYvr!^I{AI##*c^NG44#PT61fO@LI_gyZt-O$ z*7ncdFLzO+#_t0UQ>+0RE=%~>_|o8v9WZ|8AlrgT6gUGn?B%CkXyc*8C>bLbz8ZoI zC2bJ&=}5F%koD5D?N0 zm7zrnQp93P8swMf)3CeyhE73;r(nSc;9e{Sigt8kG8aeTUsE3tM~-TRI7A<04t2g< z$#XFmBbOI!b-L-`>WV9+`5Mw9gbEH`zTyGw5){c%&1wL{v~>JODf~zaDv|4Iv_6_9 zax=Z#cBlGVuG5rn4xTsjgK z%gQyIG%b~(gpkCe1~H;rL}8)X0RGV>A+m`jJRxk3KMq(wMYn_&5k`s;sH+7Vx|b+; zuo=d{Yp;6C&?f@`_$Qg)&4|HRgrfN}{rk}&OIoyE-#GL!e3wj=8Wfbn7_g31`+mdG z2EzZ$mvR3k4M3lxlfmj&MR3uGg~Cx)9Eg=>r@;r zx8HncDfjqBYDSwtqN-$E;XcS&>S&-l`lNGg!ig>ntKalqN&jNusI7AQ)IPNfcQt^I4w{d3ZnM$3v57Cr ztn_V$lhG|ApO4-7$SGzk%W8aNeXr8$qu%Ks^20}{}e38BTK z!wg1v`xFE+F-eeEYO*sQAHeDSg)FJ5(+)?=EfdRuyB9JR+kAcDwH=B3N)PU{6&m;3 zH89xdZRytzkBoe`7=}S!On84L2fn@U5$cB^HY5yElNZ3_BFelsV75;0d)*$PzUyCR zs{*cuCD5igeUcXq={d-(`(mm)fa&Q1Fa&HjYCTtZ_BJJ1S7=0tlF@zt!{-^n`D=my zVKPrxF-@9^jM7tNDPN5Q_W{5z<1XOngx+!AaT%IFJIUKHNbL*KF1NR+rYLFe^SzojGrfjyK7; z$ui^`+a&Yb8FIJguyq)?1+K2$h0juB319eijjl_qiuAP%%>>Tu^K zqiK9kP(f)_%i=a$!|E5sC$U*Bf!l&Wn?sPX>LeA`UC~>sqx@j8#k!rl^0(thn(?X& zVI6l>BvvO`!Qw0NJNNYn<0o=z>19BsN~WQ22JWHI?98h(uF!6F?WW4*ngeZ-;EW2| z5^=3c?UBwLbT9ykw;xWwCM$;p&{0ASx!x#?JO-fz-ZbZl-;3)HIgJFD)gZQzP zX3vOdP3P!#*$dFmVSMLX)6K{W_mek3G&vAsRho#s(Fdwlu+_CO`1%~W^hvw9QL9Rw zr*0YH*JZgnQ5EB-ry-WS2PvNWQJ(ngQ+sKJOp?jj5Me<$wY%l4!%V) zx*IS8kW%lkQQPSnJ=Tn&!jI4d#{nZ}nuLa5_EQ4LhJBHMXR7*LU(-`^KAcp~;K2ih z@aA_cKbc3xT7&bW67%u#5ntFq_@3&&xe#BGfXjyOzdL+=*Q30^`F>II8>vwc038J9 zv^`$<9$tSG-bfb#JO8Fe8S!8W5gv#%iE;9cR>tO6r^_!|@kx{$)1p7Wk`T8)zRtg@ zd?&ilAq?1&K}-N*;u3z)lhM@%m}tw~#RFe)0Qev@MKD^>FSyDabK6ne=ycW@ZPrmU z*?$BA{Wee13?VUy2pNb}KZ9;r2xVf=Uf4IY3fg``0?xM>fr%?= z<_%5JQHMYF?0PyHsQ=lvaG~e^`H@HXCyzJ<8*&gE^4^~k2=r>!3T~GZ9mIuhNF!A& zXg11COef4gOm@RS&>Kh4nyyT2ejE!Rs*L03H-8c>dN*h;c``0J2;xIZ0%GE0D1j+- z_oQ}ys>^EvB=Nh>&FPT(>F7Z8Nd5G1wA9$Y&`D`?!*n0`6T$tGna|& z&2BT%vj3E&+SfC((Ptj^y*S_rIC2iR(W?M_Nh*(zrUjGBThb?o%vi;!mxYnDDyWyG z6C;KQ2ZfX}$N$Ske?X0HL}XFY2Bm)3 zqvsuA(db%<-!?H}}c7bf#Vf4XRDkk;zFPhi8~T4ysR*pM5#A{pko+0#(+K<4jrs2)Rb7 zYrq`^wbxm7a0ZL`!&M`z)yu0jRBT4?K=`_j4N4A1gIEaawfiA88D!vvyv@TKz24W% z;}11J&GRAn5*qSTd#9QnU&kr(b4Z-MOl-~9?H@md&-;;q1Fc+xy<9_+j#KkoyUgQR zQkw_3J=HR_a3|OtS(}I53-%k` z7Y8G?z4Tn?+~=K)7yIgEiw90i0rZ#1L6_{c4^EdsVCNrS>YQ9SkXXhLp|^FrQrvGU z^q)UC0Z<&!7C+TCI3M=%+;D@AW_XTQon?O20gEp#0}heRBauE+As>b#A71Uqj^a4G z;2!c8KGfm8r6$qG$7gYUOUP%2$%pi|fnaMC+xQdC?F^9y6%j=^p|dlI&UKuBJt+s@ zuwCv|T7xp!)x@7~x3Pgdd6Zb;6S2WHr2rMB`79O9C+e{V>odOj z@&S#q5djas4C+k>9{((x+b3GLZuLe6<#5I=O2)qwWY#w_CT`{q{NJMZSruFvB-~h} zDcQzy*v7(`s!lla-SUfX=<6EohTXDe_{V=V(%kZMonGr>3h@0$KKP7ilEXQP+$2kT zyS!@jIRRHd*^*T8qp-GF(Tl1#Zu)alzuBDav}O3`QWpH z_vhikfAYbtsDZ#!T*8}w@&S&3R9(}|eG?GJU4LAFoZz2);I8@Fgrm?T`%gY7Lwt*H z_eK7nd~o-U)SblapM2mh&e5b0(X8-KLi{Y%$r6@#*Zz=e}zm?T1{|-O-Wi!X@t#KTFrQb%|%+x zrG+gNS}i^bTk5o08Vg%lw^}(1TYI%y2MXInwA#cA+oreL<_p`Ewc6DQ+qbpa_X#_U zwK~iSJFc`kZV5XbwmMx3J3qEM{}pyYX>-95aV2SUr4eysX>;Qd`7F}*Sz5$hq0RlH zh=)#_hp~vKb(^QNh?iHJSD=V@M4NZKh);T(Prit6S(|U2h+o^kyOxOmSeyT>$d{G2 zFIyr3hiw6uB7u)>fqzAUP}+lVVDiELrF<~^Pd;cM>1v>nXk_VX1vXeXjbTI z{wUF+)74@u(Q4h*>MYUb)zua#(H_y&9xu_6-qn#W(OK5jStrre*45P~(LL7HJuA_( z($%vi(RCFf9j=5XH3ll08fyjfuBDTfgbYcRs$9!5C)&yx`_!U0A&zz7Ez;Q%8X zV1xsVaDWjGFv0;wIKT)8F|!ockQ7cxN=|t)2WrX{YHIOdij!gH#B7nyqZw!cj`SS(-H@jgB>~a4_xYC@mE}okKR=+$>#&H9bEheYHG2c`!Zg zApJXhh8}B1j%>y+n~a2z4C{*2it-G#s5E=jOw@Oo8G{)wHkq*@nT~9kpUX3`(Xu|X zWtAyp5!z-Y4QA>?vX;ZL;E%JeP_n^;Sz@f&6gJtkQQ6rQ*~7BgG^5$kJK4x+IRW%J zYKl1$kvW_dIpJnGnmak}qdDYkxiG?kCQzItIExS(x=J24NgeS*9HmbflSTe@HQYy^ zDxRG%*^WF_pE^C7IP-)6MmWF-hXEMj03#e=gaeFlfDsM}AheW2xgy$IF{xV^;Q%8X zV1xt5B8+f=5e_iI0Y*5$2nQJ903#e=gaeFlfDsNb!U0A&zz7Ez;Q%8XV1xsVaDWjG zFv0;wIKT)87~udT9AJb4jBtPv4lu$2MmWF-2N>Z1BOG9a1B`Hh5e_iI0Y*5e!3YN! z;UHe-)mauOULMg|9xq;z-dT|^URl;zStnlA)>#E39L(*ptW6yqP2ccx3knGe2?03& z({VRO5<`f1czQAU5)(6|ba--Z8W8Iko)nQ;RM*+RcXWDodDAmGl?{{*dw8m9?K!`??H-w2{IQ-{UhnlaV{B&8Jto~HGUao0nr}k(3l0Dn;Q%8XV1xsVaDWjGFv0;wIKT)87~udT9AJb4jBvQgKRL=|(`6;qWK>+BSLQTwVcUNW}~QSr_AP)ViP zSz_p`uf58yI!W?LywoCE&$u&Hk381)h1}Ga!f`dk-j~W5o#?X?g~w{Bs~wfsDxn`a z#TRrK;o#dS34zvs+irBXYe0c(VwP!gH*J~-Zc-VjM<{Hf-)?e&YaXF%Rvc)8mw^!u zFv1}iMmWF-2N>Z1BOG9a!;^*Q#Nsy<(FmUsLm1%zBOG9a13d$baDWjGFv0;wIKT)8 z7~udT9AJb4jBtPv4lu$2MmWF-2N>Z1BOG9a1B`Hh5e_iI0Y*5$2nQJ903#e=gaeFl zfDsNb!U0A&zz7Ez;Q%8XV1xsVaDWjGFv0;wIEcUq2N>Z%^JamiryKpDvo~yXVzjSqdpJ4O?Y3&Rhx8HK zSL+Oz5pp(+37=MLP8c;i0A{uAYt-lU1iF}l5+V;|v3EByx>@Pac8o?K! zlU9z)Zu*`n_NKdos=CIfEQ`xt0E)_7U*`kI)c`7v1MfRTmb0r)ER3$JA;LupzP?@U z>V^@5m9^_pS}(tbW||0xn} z%Fc!J>~RPm*WBNVi2%G-YTBSl%{vra#qe0!kDFkUpI)PZ66|eTF~k>7SrI&&!fUZg z+&;7M)_InD!CpC{J74X&J2P^2&!3MAaHL*N1ksJ=4paMPs!ys{ppa9C(34mEwH#I9ajhfhI1|I0ZcI zmho6TuaoeI-kppE`u(1b2$1}9KUMcPZs*}r`t>(PK@?P>{{z}p5UNT6Jjr-JviMan zZfpS}i{b#f{#6L+bOEx+_yD%=Rj3t50jh%HAb!>rm{p|^UB^Zmx3gZ8Gqw=ZT5*Vc z^(vfadbVj z*WSlDXdPpil25XQFv?r$9DBi5L^c*N`cUrrb=981ZxdDFc*6CKdv(#xMR}g&37)sV zN<7V9n=T-+93Yk)0Ecc8gg}W1ho;&OPg);@EDC@_4K8M6vwf$6y$6>Y0@Oo(r}&*L zi8az+6OmCh;oqDZVMdUQA)2xtI$}yXK9ioJ-sF6)8*2q75D8!sjDbn3MoK%5NSF$T z#(eXz@LYryTFmT6J5mYrpDTM&*J z`i>$EJitVRN0dX7L8ZVAK_OgT4t5t&+rql^CeYeEa`Wt5I;aMN{Gdg|4(wW{N?s^*Gh0@@>&oTQo{4^>$(-7yS(oZ(kHo7Zw?PcRnMTbBp zB!7XOSd+ZRkX|~mrsw8SaAq;D`aCSXi4)&8z0d9UJf&XxBej9x;5g`c+U7$OG)sfD zhmS;T>P4?9=TPNPJpHGslNEoCR~IWXE-kW(O$Y&|+lt(q?X*HfU?GvmQ3wzYl{zwn zuoM`^t_zpk-kidX1etiJeUpULQAJO7tmv>o2K15tS#j8IeX4(gPE0!vAy__A(NRii z!Uh(hgdiF4pttvWE|uE;EZ3dvRId{Bs6uH!2`$MI{}!P5v8e!QI!l|DK37Ikru(Nk ziyg*_6e>w0MG%D{08teeNYZ_UG)SD0HSNwUSR$5?M^2DA**o8q-Qs)=E64-n9Y^D)|CT9_yfVuZ|kIZ*&^tIJq?vS-qnOSbmlI;Nn|uhdBb;9ddN zw~%65WCtF9I)cYmUIH^@x!giJKAK2-goM>#70p)ek4pn2S>@sMa(g>6opmXjl*v5c zUH~u@vVeP+IV3rZMB*!(QNSwni}I8!wc5&B|2{NX5WxJWeerte&YtQMJW}Kcu}gWkR9j=Em)ht4Wn?likt#S%Z99LA zvZFV~t$5u{F!}9P)9ioN^_e1Y_B*?Uz93ilK%Ag|ye_*B;qeUMcnu(O`rB57=L%M* zhg@iil$Vcg@G>X}D}E^HxZtuc2=gvc3-EYe9*-yhqA^2wQ^RqOFTJU({T}WZNAeuw zTv(!%IOQH5K*#U$!GCo8dcANxfldd^$fCax4Cj!&emSAI8o?zP?Z_Dkv*P|J`NaO@ z&3F@1NFO$U7a9+5pTEND4Fnfju^Eip`&_ZIiF#g+egc%T!ncCqO^u^Mj1^?UtiFe= zz(@3%hQVDS_yTPFRPFS}S&bFLMUPkmS#jfu5k-J-P#0BX|2dR7q)2jRQ$j0K((hsS zC;+T9R-A`$w;u}Gx?Ju@6uB7``KVMytZXIi6oru#Wk1|2#+_@9oK@RFb);@hqHYaO zv@N0(RpXRhx~x6k6dkM-eTqH&aFK~yxHo*U6bG)adbUIjVX zPco_r3OYR&1|M>o2{I+4@tbw(4^HLRvfkzd_KvdnN|WF3PMq_V$aFI z4s(f2Nv@yta$+e#OUZBCQiKOnoOV*!;8O+YQxl3(BxO_iLQ-uZscJT<@`I^HyQ$*v zY4U7oUu4thLee-OY374z)H`Xc@aZP>=@hc*3D#+dQR#{uJf1(9zOW_uk}(EW2nXvi zgl49Np@~F^rN(rme0`S`kH!#zMxPwTlqyD-{*x|Kk0~3CF1La%pN*;TCvA}rUCA?J zSp{vyJG!a~#u^{mIx@P3Ova{nv@OT9ZO^HRV$u|79335Rdc@fJI%tQ)7)Oq2#xlQ3 zlI0LinNdHvh;g4hKrvmj}s1OZ0yf$`F|#oezRpFL^JD8*X6>C>rA zhJ4iL(;}zVi;mY}x6+u*GJZ)jwPP|6w=kcivs5ayKFPF4&vInXa#qT6wafY(o#j!P z<%M4Q>4n#}(!wV?Gq98K%On*v)Q&ogz0}W_CE}!5{-rROJv&}0JJBvXIXXMFGCRtS zC5GH09X%&5t0Jhef)BmYoxW0kwE|>T`J!0)Ho9{3xN;n=YVuu5qj+x13yDl-Rp*P@ z-9+WQPgOue)u4E_z*1FyR_bt8^`yS+=!t(XIb;^ytG_a7J}Yl=lBDtl|EDg0!pW!4(em7wJt{=;) z?__Ae9&bRkZA6Z4Y!88oU!E|LE61`=l`#Eoln`&S!f#T!789Og5}%3{HGmLOG<%FU z;@UO~DmM;?Hp^W%H4HY(cGb~=n(^PYxZAZ@Ahb9PG`&W*XjZm}ptmjvwJ>2cT4h)3 z>@<%Qwtm!YQub?g;i$IdXx$%Z%@S?4q-gW~o&5QY=CyY{G<_A>VNM1$OvE>cep%G|Z)=@MZPDG4w} zXzA}xfBXD23~ED;&J^)3AGoegzvS|muDQ0((V~uC<+_UB1o=}0V-kcdQ=Lg1O>W}d zbK2cz4c!A0o#D{zZeGM5*YciKnVwDap7phcg*Ad7*#!F-gqv$(+rP<+C3?qCdv#oU zM=`p${JIu8dp9HdX6X8)5_`uMJM%F5#0UC>Wcn{-I;J_gAAfiEaI~Pk_8ZOH<{;YT zr`V_}AVu8(dRADwnC)Vg6iw!PU+n7{reomOiJ)si!=tRD;WizhKrvJRDJ6is+PArN zAU4Ti+^vTtmH=6jKw7f@uBz8W?LC~!``gm@zUg0ZS#bpnhj_Gg5PXVZrWSICwJM6M5u}zmX)0 zbs&h#85vQ)4P=@SJ!4hPvCp-3mR|N|ogOkiOUUJ{ZFr?Dd?hL?)2?_N6YgfMFl4KG zWvwoosCO7s*Pr@LF?udCiJ&&wO*w+3HZkYm6QATi96Q~rl}xW?Blim>5PK?rq00w#=JdWsl|6G+w5+y8~VyZnmk`vbmzh8)rX=^T1U z0Vyc~0RaI40i_#hDe0J@ySt>jySux)J0ulE)cIb&Yu(T9Kj2z(o}EYM*V22OvI^=S36uRaHq!Y`nGI?A6%N zPE~se$7auladvI^BFVjsNG zge_aXO^l7LtB;$2e(<=j>Lv|(tQ1(;9+F9bgGq#QS+zw#GXqhc12Jyf@~vq2j0u#$ z5+J+i$n9^JBsW{c1@=8m5^K#}%l`}@RA4P3DF_-Ja3#_F_thLJ!8Q)hnzPEpZ24YLr~(jRj1zx@NguNRvV7lka{ol<==~H~DzKN%aKt2i@}RUc zm08X93JnRb)h3!nq?(*CFr4;BpP1Y(lOS-S^L9Vafg|tGA@-C(NTNi#ogLp@{XBaz z5Kg)yoRbedjIM_#hb*QV8*>&baG0HRnm#~5ALo#l_nQ9nWH$e6-PNqz;2Kb;OvBPZ%&AEK{#$cMD<_%6FbM5KX0f%*StMAtMWerf+W^bsGBbkzQ4j7|;UTGj#&s@;!!`r~t|8(@sFEr6Rx_|y2Aavh;n09n|*|3Kw~|NDtf!UzQ#Q6wz^||LqmyWR zla-Sm=+d|vwJ;4eTq`M@aq7pTpEh-5S520E9ozG#)mJZ+Rf4wOZzS2?BBy`9C(QeX z*0xn0D0zCfdDpAFWhLlCpEiM6r)@82J0K2ueuEL?j7jc(on1q!CS|M;0TlQ9VYA4x8DqpJ@0j&Kg&`VhLiBE#>aj&(k-M6`JAhVHHHzQ`gn>F zLR0%5N=(6#Cy}!1!YhNrravW&`(lvy&C+yWZRe3?+5q&4xD!|EXd5s5b>QEQYkmZV zKv-{(vk0#=wE*5O7L9y{baD&pceOVRws`Y>NB`S+<_Rd!u(vrqyN9Gf`DO6otPDK1&WoZH zn@$D~AxlfKE}bjLnzmPQSZ}W+=I^o_j}Ac4gjq`!3ElY zCWXh`gl3Ef?-SUE0i=_ijT#2-1RNg?{W0AJ6tV9FoBPg3W$;3%R^t`prM^BeiTUxK zhTskM_F?m^w-&T(VxtA*L4#JMz|SbW7&I$EnN2bf^t2Y{9iiM>SNVbT$OP%M1Q(O_36%vGcKw;|z13Ge0G ziUiPG<2YKXYmHSyZg1T7)wc3Ipp(#Y)U3jcqd0dY- zX1krei1PEg;GFv7b!k!I=Z)XtemMX+sfhi>A$={uK#Fc$=h0w-FExy?5&%p80JYYw zTMl6Cc>ia1vGX4WMc#LUS$J2*ItaO!(knPurh@fKxls~RNYr;w71X=%`!T5CHKvUk zD7W`8zy%ig80C+zX^i{jxfE$LL1pi%#45ejQu-_}~`jn>EyGxbMZ{Hco6l+!4 zTG;AsHKm$^K8+Y z5fhKc!o4`t(Ta_Q>c?PUh;P~{E^(8VJM`6*)3nR!yU|m8jdm%~`Q(>~Lrx1EIPY|Q za9tw{*F@So(0)QH*3Y9Cn8>l(eDIHy4gpJ}fOO?{hQ#zh{o|KS3d;Ek&(o$GEraXR zrfeM&GaI6gg|!r>93wv1Yzv$i)uvA;CMRZJ>Ys?EpQ(DLgy!sbewJ8BeD8~l`1X%x z_cdr-&Xw?I{H;J~HAaToDMM0Twf^awP^-i&0efr|+dWCgVd$ z5SW72!XG%M5~>$jxu;l^4Kh+=rjyM1o6f2oGd`q#|Cua#bcU}^rFj8LF0B$TPm5|F zEn@vDB>1&lHIHiPKf&a3?MxemDzBwDyW|SSsq>GKRN8gA5tS78Hagax+D*=`rS{P# zx@8<6`R4B{+=4H>Rx^+v<*$-!#QQGD(8WIXAe$rt1?_A{+dd5oE!V{c+nKY7>5OYH z*QXX)ni5?sPO&aCXWv)q@QLZprz|&?$l2SdSLiG?FE`Z$+uK=etj=yX);0~A~bN`?~RBmT;wYB-zF>xkLY0D7A6)NXsct%-~#mrM)%z>T6Sn!Ij%e@!GwE z$B>xe-Tsf}Be^eLOC8(k0jXWr!C!oi#3X)AuXO(!`r;@3p#AS*rRP6PUV#~EV>I&B zUTj0CKT)SKmhfudD)mhui?|8y$FySHX2%f0P7^|Op?+E{r!YC?-KUt#n`)0i`ouZ_A<-^C|)nzORCjJ*$W zPP$JwXaBf1{_%J_x~|iL$34AO_rW=BNZe8Ykv{oZ-X+87jfG&#+SDh@ADKtuCoCiB z)9%ARVlJ~jOa5vb@_um1#gvdgAzPmfm3QUC?y{2ie>E2y;#z37VWsr3J)OdmH_+&-vd`m!BYVWTjb*V+5vmX2<$x zAHNBYvlj{m{*`uArJTgSF?I?x?mYkWwj;Ah1zmzS2)E%;bR;alrlDl(>a(g4iD(}L zSB;T5X3QO*P8#fQ`|m2W#WIl0U0QeEm({Pp_49KUB>4-b8MC>Jb|~ zju;7E4ETB<3LA9|r?ULae*anVqyz)>48cPeG`)QgaUW2nI~ zjp3M905(Om5H1`9g`@ETc^ftVIrn1IB%;Z3GKq(an1Y4c)AJ#HWX#3SH2VRFbT$In zpRbU_xfxB40mq@B%FhKNtYq@T;9+<&|53>>iZd}M!EluE@n#tUjZ^Y65z}CtfxHOr zRr);26OEG!)IO7|=bgw; z5TCw1>be37$3BMe}V zA;&~B|G-)<;1e15Uc%=nS*xt!hzL3Vw&Cr$q^fwaK&dptzw+voVH&TJ>yZrd2&v4* zPk4VEW%UrU0+qw=Kl43Y8+nK*0@_AG(sO;kCm~AHB8lV>qoZ-7X}~H4gc&!stC5Kuk88enzD%l-||!h zdf&Xqe|rLqI(HKL;=_;DB92YMPE6hglPKlVlqO-MBnQRbQpP*{q|FTKH1-(>DC1&t zzX7%MBctDF*52^mj;}K)RabW0p}j+R$|c1$u@#J{04RVoWAn5OyP&oUY9_sHJhQ#mn^BVD9ZRVo?X+ZYSy zYuYQ7zve3sv=67ozl!IIP|+PvR}2$%#(N&1n5m!t!aPi3T^6`0008FI$ro!`Ds%0V z>-hMJ=b1gAe!e88g{)CvwNTY2Ya~2t>~=D~HEVJ$Yx*~hoD8gdi-H_!8BG_i6@=bM^e{|LLeFlgvGrt0!-&Bk`4_yi}qNo&$#F zTsPE7FXp^#=4j-Ysk$oYr^=xBY)qsYo|^M%HX5li^QT_Oc@`B7#-nl=EhpzcN$w&I zP}cnEAC1I*jbPjb9&W`yTps}C1*{{Dm$b!#_wz!eA|kZHqF)zyC_k)?Ns1k*zv^0e zG5!JU^ZIp@isZi!Eg91iEQ>w3i*F1n&T4(re$P=7^=e46T<{OJGv1*Bx3MTT7eI_LW%xTq=KWJ0fYftkpKlj#tmc9HhO8a?*HrCX#g2l2e>GJ04vO3Fh(U0XX z26@i*wT@bxU!zssFuRv0 zEURK-tBU%op*E{bM=Jp=Fh}pz>xfU`U!xm?Sx)uPRr z1cL|XEz$eUwJ9b04uk(D47Q@*f4w&9Io2BS27&p-k$qs5E5w^Z?Jtb zRDLE=fBcW-QcL8js^Wa={e_CbcR~JZZpj-`qaXGPKZo@0NR1>c^d6Gm|ME3LOW3*9 zFybxRd6KC7lfCe-s{XHqFoR7uLd_XQMHLt6YSH) zF|`yhx12Yu=Chy^`0S=`c`Rtwt!af+vI*g_UDmP_Qgh%@|I+=zo>gD(!6Fdz1Q^*U1vHAjX~o(Zbf276^*=0~Wp5L_K0f=lY%POzp2w>7k?FkPSo53wd6C2GJj?SE z$=3xT=Vd&vi;B-Hnk7qy&#Pht%C0_2(wd7B*rpF})GVLWk)78(*vQ?RHEEk?y3IAw zEjDj2G*(||2VU4pUUaHzbojk)+pd*(bJ4i8&mq50HJk5~H7T%w+pY<*?FfDOfqPZ%gn3E_rdPZA2#|~pkhhffKagGjin+c% zw%AC?#Ho~GZS9Q@>!Ymfqn?zGQ_CV2?<3Kd22QVzkXJW^@Y`bApF&q^f0o|jz`+nv zy;%zUBnOW2wD+|L0s!;nCpZTNK={iM0XW5xINd#5m#6mw#xlXY)3cC)oyGo94B&6I z<3Azr@8TCrhD$yh$QD29H@*igh)1UaI2`=>Dk#?xkG|r*nu>lG<8?ZS$r#*zk$2;O zI0pv@?K;1}b_vWCqk3(BmYyt$_(czA|he@z%mQfX7v9vk~~`!@N;J>Tll_l1MV+xS&Hcmb1W0jFp5=P7Ch~B^_z9}o->4kg3sqd>t-#ZL2fQC)X zWpxAX55gtqw;Sb^0z!$|G%Br#Ol2dfgq=5G0Mjrd9~}|nBat}}&-~1-_Y}ksCJym8 z?p(ZOoz5a)IRAe3gKaifCX|?4DXC?m(WvIeS7czyGm!}91(iqEC;(d$2kG$jRm~-m;v-JcHIre{qt~T2RKW}mi zlgW#rI~f~yg5g?8kXvB3oW>L#4-N5#geR`mX(#u!t?+nP$K2f4daJ%w09zVL5eQy` z4x$f}V_a%>J4xdc((A8pvTq3Veo$AzG}Lb*dQ3rJ6KYY(;B&ZUSYS(I#hWMP6&oAi zn6@&6(z=!Ag^D;K;>j?hHP(1WB|?c@Y+7adIn_`5q;Tm0J_-QIB%{eF%_fs%8n%s~ zD3sqJ^8DaDZopt5Ed>Jby)=?)~)pBn_@)UYJ{m_!&sY$6Gf7!U;B(A?D<*l_6H* zLO@8QFr3ga9h3Ur(ubc>0I}%5DS)`(yW(=0pn9*kK&+t%NG6s#Is7YNJW`ZeL%3d2 z(}!EJn>|3)kyp{j>dnuOUzHUCiAvKO(T-FT4EVbB)9 z8?nXS+5Fs-n1?FfUnyi*Qkq#fUwMTQUmAbZ1Keh;33&g*gSW$}hyetOTB z(|^x5U(TLl`SQl3s&Q+f-(yck;;1t-uKt;d6>D2?$wrfostv zClz5Y#`}EPK8y-Zas)!{0p#~(ZAk4pzSymdcH zjIhlLregT}h=ZQK{j|{RO7gEm)B8m$vbfK5URqjW1K>tOy*RDrxSl}AJV|l@M1nDk z`NAg;+QdJK!JF{^jav39-2B8Qs{FKzW{Lw~MUht@TCloNs2lvwWfM8;tF~`=u5hUx zBt}M9=sp9=xlxnp6rGw8W*(fpn{O5Z+IhW#Z1Zq&oF%${6F72;GfMZiv<^$ege4SY z9c`2Ma6j1kwmU&69uxX2K3&LYGc(By)}{ebeSCPHP-!F@5z){0P$o#933Md)nK1^2 z`1d?FKdaQIt!JX>Tm=99{XD#cgXCqv3<~pwluG??NY)=S94gEDsSi(vIdJhH7n^}t z=H7EU(kO``6Z0|0lNk}*%(zzd>5ZR573k}@QrAz`bYDi5q za^L=e=3~> z1bT~La0Oi1(xw2UIWlbszn9M-BQA=g2|5#`AaG_KXCrf%ficD^+f4ZZ;qjbtm)UwL z?EE=zL|qv{*O~S+;`c)Bw?$T6pCvEDMgTRb*yF#S0kkKUx{O9^pDD%4WjK*gsm3dN zUhoHl@Pq-}K>`Q^{0(sjT3GEalp8*ZwoIuJRw`9m#GIg{W1~ITFOUwTvCG-tl{b06+L1yn|=M~5rB@H91ce&rCbUsnxK69lwr!P@A#T3BBN0i!KWr9T{7 zh`*$4bxP>+vudkD31n5Q_<$Lx7YOTx*7MSS0mg0PD5Qcw8$)4uhX-r5^6o+i+V9?c z#M=nwhYsZ4S33a8x#@*wTn{R(l;)v^PY$~_fKKh~Uuzq!1(7jwtJr?&`lA={znhnG zUnXU}%$1cVl2ZRHo`@IxCbNU*1dl_tjG+~3K>!8ev0Md$NFRdvay97x4&Q#{Qe$vG zZeN>vA^X4?hivBVJk`3k!MQsOtQ7{Xw77hZsP{~^w0V97gH7rxcdo`M#&&7Ja7>yb z#Nldv+L9fN-e;d=!BdMNLW}0p%k^yH)ka!mt=kS?0D}O-wL`%APyx-&B64 z_@*`MS9}I1kg+26=bwutYYLL4J|oZ6UZv_5h-NT7a3l{}5PN8hebZ%O@Wb0&+IiM+ z{?&ohFV6u7T{E*~yBRi|5Z;hHTRVzE^eBBr-(^Fp8tlYIuoMoRUf z=c+m+w(WiiW$WL_Fp=JA*h6EVG+}g@4u4a)Kl|@{kMQxMsO1FuB*h_0iRfLR;}w$cpDm*OgeD?Aa{_C7OI#?L*%5 z=7h=%=0)u8UyE=2pxWPH%l8BHBPE|DEiWe#? z0>wGrbDd*g$w?v-eaC8;KdVpA7PG*nl*$sazZ#YQH;s{gtpk!GB=+yM2jor z`9{?~S3)HB6NGC!Kl?WS&-eTnDXKhJ#JpGs)dU3&jrn{^1pGV&$S#tCmt;ZwbfW_D z1++p;4w?mmjH5y!1OjdaLiPK?4hJGgSrNAa)g&fS)qPQ7CZXfuSIuT`OAmTG3&iin zB%YEbjt^?S7uXLnz1}Zi!(tYHVv?@MmEd8LVl|VYGJCT>C_{IsN>M25rYeU#cylZ( zYk0_a#qhQrPtLC}$DH|v!=Zgzp#m|6qBDk4abZte;Yj5nS977=thv&-dHil6=Q*=- zx2Zxzp-TS5dq3v)8nSA{M`{n|f7pu*Xjndr9LbR#$x2zsDY1OW+1HwXr}1>Ct!?pf z98*iFP|K3#Wr77F%Hnkfi#B1QF0P^;Pt?!BBK>I=gXJQFZ6u4~agpH_i_ydX-t&#H zij4_bO~{H(=vYnjExMUm&4h~0Bw5Ynk6k)h`W1>T3|TELi!H0c#ty}w{aCF+EDci< ztWt`tb1bbjifyV{ZJUd2yIJjqi|wXa?U#$~w^<#Iiyf|5zdRIwL9#kxl{gZzIgyn( z(XlzRmN@gUxd@fGNV2)gm$<63ebp}cYRKkhS>oov=I&PF?#Jd4QsNQA=9yCBnZxE) zT;f&D=G|Q4-Oc7RT;em$=DS?tyUpfzT;g}d=KoOQk7R>mmBI;O2(nTH9V~#gG=K*d zC{!9K2@8@h4N`>#YnKKa!a^)dLmXhCZl$4qurOpuX;=&_Jf$=|2NqFW8c_|4Y%Y!L zhD8mRMoq(_mrJ9!VKK+0F;}qIhtgOiEDozIj*vZ`tSp|6J%P0>frmX&s4P*EJxRVS zNtHcWyDZs|J;kyt#eqH5tt{1#JuRdxErvZkr7S&%J)^iRqnbUlxh%7rJ!`luYnnZK zxh#8|J?FSA=ZgK?L)kYZdoEUaE+I!AS$Q5EM?PzLJ`YEMP(hmTX~5eM`=iTX$(hMN_klhM|p91c{N8xb9qHKN9AyN?P#tBdhGA-=9(O?oSf#GTCSYh=9)gPoWA0kd8nL0a?N5@%@T6Y zkyXvnanG|>>?C2vsdeaxcnPEvj-aX;&>7axYs}Ejw_pxK*wAaj%9{t;TS#rBtou zaIY6vtygnzG*@kOb8ik;ZBBD@Z!K4CZF6rQS8ZQ$?>toPAh~z3s&@%__Q*7 ztM_?$4uq-?h!v#%rz25Ha(k+y<$9+#5RYE9v-S31G?CM2y0h)a$!x*9Z>nAG_ZO=T zwmZ{Z9lx%32aqTwiBgg%C5cj!C?$zfk|-sKQj#boiBgg%C5cj!C?$zfk|-sKQj#bo ziBgg%C5cj!C?$zfk|-sKQj#boiBgg%C5cj!C?$zfk|-sKQj#boiBgg%C5cj!C?$zf zk|-sKQj#boiBgg%C5cj!C?$zfk|-sKQj#boiBgg%C5cj!C?$zfk|-sKQj&qVv`USo za|H^C90uc!WeX*01xndUP321!pBiko#+xcuYK#XWXx}wgt~FRKlp9R^PlC2M9*k$d zYpLGq@c41QHPKSD(*sAxqf>6J-5Usd&S^N=T6ZuK$Mh~oxvl zNII4F#swIhPNupYksFozEC5dWDqFR!umL#eriE2rrT9T-i zB&sEeYDuD6lBkv>swIhPNupYksFozEC5dWDqFR!umL#eriE2rrT9T-iB&sEePJ?Pm zqFR!umL#eriE2rrT9T-iB&sEeYDuD6lK;=QBtst_pNxGYBL|dD&M!^;qU=KwLemRs z+ItUAFTP*jbq!A>=2v`;Of`qcB;;3g4NZ8)q_+=_St4RqxA!OJSF8f#>N@-Hem=}D zuLq~*=TtTxo__y%|Cn3Zc=O{vx4J2#wC?)$=lAQ|n4Hp|504eiU6(gMI)}y=RyWg2 zYu%&MMy3~BBU2s2l3XHEyy7y)=axKUGkg-VCl^-kfBil_|Gu=oeSUT09hdpz{@23V zRzugo_}p^rx3ZrPzfZqkoBBtM%`W9uH65LOFRE)@+SvIV5IZ)zxN~rlTvQdGSKcu= zesO)9QdHI4J9KbzZtfp_cmK;LKFc~V?n`K5U`lRIMZ?hKd|6}1`p*9D;c0nOXLVc8 z>ek-!=1x^>&&<+#_sC>R-|+R_Pv`LDv&-v%lyCjxGlLUzZ3Cl=Yuo3SH`7aNePh!# zZM|Qk(xw;J>_ZY;`$rbnw-L$Tx`!w4e*Rk7+?`ok+dn?@h)%Z)PH65O&i=n2o%2u3 zDQ)Q3+CM6)YeOXEMrIXl?H%nModu@mZR{S7&MYo(?hcI4T;ANp<(8daUOR;+mo~It zT-{c+^bAieT;2ZIKRIje8H&p*pIThK|MhfpcfWmb?3a*j6BHkjSzJ)t($q6_a&cAJ z(%n8VwsUZN_We4su%fYhaDH_&rMNmgqc9{bKef0zDyt+UyINo|IGB+&wY3 zeEZ{}y0xcgbSkZ+W_W78zOz3fvnaW+vaq%V_Fq@zQ2^yGVa28U5nRou`;olEu!AUpWvhc|k>k>X81aYGgIFmn_QNft<8FtNQ$C-}9 z>?c{S%ho5^9>--TIX(|(C*R;$9H+TKWHzU&Am;MZ{3xOGQ07hlDB&GE&`!DJbU?r;ZM?ir$8+aphmTg8O9UZX-TT=99II4)J*1hJPr`N3VJu z;?KB^vQjRfN~e(LqJ4}Ni88U$%y6mb49>XBQ$gKJzL$cF^v$7*9BZf92VHJ?;aqD z6^q;KKN813RXe9VmKAZUP{OsH?-Fu0S+JeblR>-@048rQ2;vxr0W${STLI`aH*gH- zVESwlt6{Q^~C3MZC$@fR%1sG;4W*`EQs)8En2h&K1g{ zmV|@hj3$?t3x%mIqNkl}mMS%s(A>j#6<;lqlO=P!B~`#BE($=107aivlF%`nmt~8R zpppc=x_cQ*xeiSgf4?6+>v3L0kO=^s6kt5!rGUUzs5(Am)EHguQy`5H5MFfgzUgV) zct1J7D0}=hWlsPnn2cCnnHFsSvQ(OXT)s87-c+xz zb;Wys{-&FwyinMfozPioNme2mD%#2cWSnmY3<|4%@U^!a;@7*4SxGg(;RM`rVRWTQ zMG`lCQa-bR=@GlV;Yv3F)SV017r$E36srAcNAyd3^^PVFbzdNHp$T% zB1uG@P4zb7`O-d~KY3fqmLs~@UlI^H92~(B5UDc`W1{JUN<;7RqkQ68uY|e&E%9M_ zekY-4l2%uQhJjUcF~|hqm`b0}oG^YnmITl4J^Drvirx4Uxe3ZPPq(-Zv3A1 zm~P1V58GI?*>n1Gtsxg%@I<_kUS|$|{&0IWw;GBb=mIDwyNb9`15u zNzn~E#7^ENV~Gpw5MQQjNhY`0CnmI>V31=}6SNW0-;W7Ky8%4(wvy34_jO6caY235 zvHV&KR=H>7yApSkl}@_IC7AqNqUI^@T9lAa<-y!`saiSZ@rQ0F< zz%GE!5Y`WL-eB^Q{2C+Hg1w=|okRRg&c)gi@%VCh>nUg;&iFn&b|4qVNAa%{-^sbD zE+&pIjzQfV_GWoS9Fp0bbOeN*DYvojCblQT9#!WSHU!;oWNBF>ixHH>g28-+Sr@o- z?VX@6aW7%G1O!Cl(x=q$Uxdu%kN>>$m2lyOtTttD!o?!a3Hf|qoL;fr@&WU?FhK>n zTr>CIOKjibSYb8<;cQ}h6&nU^IXQP`1X4PC(@vC5+xk7%gr_QuUP7>Pf|4&u)cE<2 zOJX*^(LCSerb(4B13TS#Jer{g z+h}Ea9gvwL3%I%ekS^&ISRrK(Pq;y)w8w9W^Rcl|?;>YHALXVGqs0^<&S%4p;K#u$0lLU>TUU;*=;86T=%~?_>O>b`{p#8mae@eFX;DWyKIt134LE`R-zqg+!YV zTNq+ln#xC7dsu`gSPVag{y=w5Z-|F?vI^9#4hK>GVjN>$iz*6;+7cV zm`vlE`s2nBaf^9zjQeplGVvpz_yvY|2Ge-a#3<~5`1!neXn%aEOu`^2VU8hz-ZUY< zKcOFyFq?-=pxaN7I*7+YOPpayq?Jj`>`&}LBu?ig((EUu%OrJylBO7vs7;d+`ja{k zNt1a=RQpMxGRbXw3gJn~x^2l;=E>OBiRuT*Er?`&ofJ#Y6cy%_XE-Tp1u0F^DOQxJ z&aYAptRn2%1RNBp9Tii3)>0!}Q%Mt2;f!hZb*X-yX<<5VgFF-9Is%b6)FJ6<39r&E zf2O@yOOrKAuQsvET1(Fr#LX?58J(0Wo#Y-v%;qp9oUEx(Dng`GOfQiwtI4C8+(mtu=0dlai1NZjtnp&=(G<=Qz|`iP={-6I9~&J|rwAAepPYm@1|9+#}knmEps=|!JS1^t%6l&3^ra86%z z9-NBHSu$Rle$HQoTTnBeTh{)i&W5F;oxWu}v*DbhErY%*BCBIPzVEzzpggKcm!;>t zY((khgec3H4gJhHSm6bLCTs7-MF9SS-;9_meOl7?y6IcYc$YmM_X(DsQKrSg#?uc!_K4PW*?Ndg2?UEsXwM6+`4pCQct(@A$g5dag+1=TC|C z7w8Q`bM*px4KIJzvqXO5pGXthXpnp-BjQ~*o!+qRRG($ixPfRKt#8QcZ!A7Ewhz20t6-%fq+_Chb(B*|4~-!WdznQbo}e(z{r zA0vL|VOfv=yH1!-N1|9i*WYxO%5H|iZtTu}RxVoNsOQ3epCk49l5_`R;|HifgMti$ z;&lVr2Lqm&gFaq;WzvITGJS8w2W-O!e~k{7?hT5X4301jG1v`7B8K=t!y@=YdX@bj zlnV{*s7!sH>vj$kfNC9Rh@8IjSZ`9<>yHG2Mm&5dTsnz;xt=54m4}%29M(y`Y!%w) zf5Z$&15K~M@P)sOH7XnDjRerNB-`0|S5hHp$Vf+Es~Bg12tWh)*4)rY;+*K3NhJBLXS%8PCsxy#4hNdud#$vamX;la^+H zeUsEO^aEO+o7j-bG1$L=X0k6WS^*3=kOON?q)Ac36PsV^eTK{@<29_b;(z&VD33?} zonDR7R0^IHP@aCVIf?mw(vUB3Supa4GGsj~U^B|w{GRlnbMQ!+uJJE%^Cl_TqaKCF zRQY#UzrN$u$H{QwPY*uBxY;uplf8^pq>nASPbbr*lSml30XyYC*uT)(6Y)MgiFRmJ zC;#6*eWE!GkUsEl8eL)%405CfFT7Ntu%Xmmw#4uUzzDVI6-x*WfE~aK##94|NP#~= zFqZ%J@?BCAToON6032oj(ShsY z$AN{V&~W0gd5tk0d&!Iph|5$)gr{a^ql|IgLP@kiM^?+-n^S1<%kLPCC&JOnpaR-SRBV6700xleMww8&sz-dqn}XFNq%HCTIKhxv?7rQ2 zHAq4n%%GagNRm@^o05dE9O>!s+{#eHrfd6B0>@ePWRh;_Vo?KLIVS~cM88IEDa3s~R+FH)6oK7&A&i((L ziEp;~N)C!S>~`3%MAS#?*0y(aO7n473sbTQTi;!VKiAxEllcW!-(@LZtn_OccNS8Oh$y0akI)PjgJ1hnUH>% zH}l5Z7;uoXAKONrZF5{p?b*$;+B07-x^p{4=Q}3%JEDUe_T?RpLmU9$M^wK9AT@f^ zyu_vYB|#sO3E*TIV`KxMoEsd;>*v_?N9b#}29bBK=OSuOFR-x3FN6-=w;aXkoz_{^ zyG1@wYB^SNK{#(dM#=n8dw)+z@XHZ&%Y1OHXnQXy?aW%D%};*1cKJ)7Bv_=xMf}7C zM(au<=t@os5EaesNnT&+#4r|P3xrq*aSpPTmMG)u9>W6$NiMs#Q2l}TqhFj5icW-jQ*Zm2|-D@>~ zT>cAkMq2qte$>JMd1|Kxq>uw?!nj{3Hst62{6PNUrMa1)Bgud36>jQPzT-UWe+2aI z@;?6MSMVa;m=klC;|?MS*}%OIArtHTD#hy%MX)U`}=BzUT_9MM2g*VG+97B!)i$0 zbeKbs7xYmYW)S8^*-iNg&c2QC3aqDCH7$)q;2#sadV|mr2u`Y$3^b>RGJ)h}FQnEV zou5|o1#eP^$H^H}@LuUC6+UJd%P*me2~F0|Gd@eM$8N`v%IhD(CDCt4;sxEWE=**< z4y7}Anmb;oG8)P8t-3y5Y7z^g(In^-h}C(zR}g{k9gxonQ&5;W8s^=gkCJnk8KeIo zGwKCLpuu?h1A?w2?yjUT$)h-=vHGZC{M^mZQ3MSXzn2@Z;&p`GuMWgT;)S21g&`b! zp+PXLn|(aqfG0;7E_mJ;olxi$4n25^w5vz(d)%;N2Qt?yF!fN~DX^rPCvaS0F>)w= zU&qCbY4woh7|tza#;pbR(`tD0Ab3)Ic@%iPe9@mYOtA87M27GqNqCVOEg|(S+_?SqdIFkthZ{hzP43V3U-F!Z5@a0`5Mjza`ar zukl{)zLyO>j9-)Kx48mgz;W*#Oa`6194BB|;aod}=9FX@*RwDW%NV;J0eh~d7!1`q zcNNsKR(yFc_Q^W#C7gY@^sCxiJnnP+fZ5agjSy8RI5<}gdWvv(2OSOiP?6ni=-rq9 z%h2~%k&tfeo$r;dDAs!OM!t{1%YMfZ?vInXv$P5Zv94Av%hZfRCWCoapDduHxfaPr z@eOE?qMtwtflxtwR@}WriTSTkL+Y=q1!m|s0$nE0r)%>_#F6q%hw-7TPe%Tc^8bgO zyKajzY#)7p(?f@J4&6gYOAJVNw{&+%3OLj-q@Xk?A>Gp5-74MPAkwIe+vnNG+Iy{6 zu=gLo_i!KAeZ}{4N;rqSb5M4gv#Q?JGItlwuzyEHH;SQHUem^?jCIl%0}nYu(IakO z4+n1mR*|UG5jOVuhET(HkD}c43%gd#_wkPLv#z82i?i3db?`-+=U;}X2XqC;QS00+ zO3q8nojbWla*r<9ER$7VuvKaAX8fqgc6=G#J}?Mq(=x{}w0ofuT6cJGfFhzOBO)24 z!JuA`x7t#XEk>Z;G$YJW#warS(uUEA=M1-xuz_o*&hYW;4#+p>neJNn*}yx8!AR7% z98WkWe1(5?)98cmW8MCSKC%)%@=V{SCN|wc#%=F@-nS_K_4!T4WDHmjPu{%W{$SfGC2h7J-5W^r;j>FT+! z3`*mB%)$dsw($LwMT_UOUr3fV_Iyg8StOE2>Tj-z~D_axdYomZ7z#{Y)UQXgHQ)70*M5bAqA>232IyU66 zEbr>59vpIVv@O7fDjqymm`BGN%Py(;?fufS`4gl~rAGh#hwnf49MKi|JutqRss72= z9uy|>dD7t^!i5b|%Y6xNINL>bWpI8CL!i_>2kHf#p;x8g!nSD|>V6ZUN1a|=-p#OKAyY-+xL)OdODqUXc( zmq3EoXkU`C2@NHj1zG&q`=O^66fc|zhWyd`K3)Wh5^ZLY1j+=P-Ry8`#R*1#A{*i; z8^@kWbZE?=xGghe3(jZ7gubQRv6LMdeb43)4x^xA2Z+*pG31KE3GI~8u>@sf{e_BT zgmIL^xn}$cZa*^%yEsSvA_L=m!Ioc}AU441MFBd7R{B?vBG9}-cOcP8zJzA3J1+_fX0Cr z;r-j1c(Hn5TFM*FXTEba>Rhn2c%O`D6}BItXSgPx6%4zbVgk z5NQ!_bcFln?n^pKSPo9z2VZ@>?K}j}FVDQie4XDj=}29ZH5;S&x{$2PX;wb#>pS@C zB39mgNv)M{8N;tjqD`DN0#?4~VcsI}>0ER(R_03mxl47rTnt-Q=4W(nEA6FRO&3>M zlA8T${JLB%wAvPXF#YSItBZ^YSC>W<{d3|!x;cohF5_C z@?2fr#B4F`p!4v_SY11$y>FZE^6*Czk}saa13LG+mS4}TZrl$C%x--247*?5JgK_x z!I1Wf`0KNYp%mCp=CKpWx3*0f6Ij43?Hy;dHon*#I4s=lZSS+T%YYU10hQk8eTMle zvuMz`!L(ay?b<%y55Ea(Y2WNk?OD;0plLq~-%t0sVG>xuv(eHHc@*nM2ks9=_F=C} zR^J>ah6aBxp1vq!Xg<*!k!Y)hELA(MpR#MU7j+>0>b2gS1xdYGp8s^#*h97J8uMmt z6}iwhvVPG~^V{?~ETDTP_=n2Vn@xwO z>iSekkGoliEHDfa=w|?k5msT+H?>;VM`~|_m*@I2YGOh!?AQEx zpz`A3MI`um-v3r5)c$rQ>8bD1%n_+pE+M+;vdvz9_Ke={J8nW9Fza#fQ2$1F1F|LB@+%*RfdsHJ^RQ*uFW-=}de|t>=t}hwq1~^%!LDD=pg&LAiKszP z1eYLAwp)3`x~;ZTFQG-0p_(f9embT{IMIVbI?Ocl^ojlkSx02o&m+`9Wlr*Njo%|CcmJG?b*^7b5 zeCnWTqkN&SJb%Za#@--%!JsDkkTy%b`rM$}vq2VgdF&Soy1AwL2{i_(vOIf|Ms^DA zpA|ShDCk8hbhQtelD1e>30S?x`N$87(njDnB9dkk7xNPrTNB{`b_y8#12lHy5`PN- zGLx~h>#%d7<-itpo>k9xCQ0iXh5VJFVC>rW66H6sAp5-}2fJ8Dbl4gP*fkY@i-=%n zi8vq%v4>0+GgKS#O-Kr_g816uaJ9kSn6i8=peJyq3S$BhbHot-67- z6q>P=@FS(@n-l;b37r^%$}30M)ua_w`>C_aP=TO9YzlE~qHZ7;(^S_hL~RPG>K9V= zuc?GPso|qkx&q1*-YV%goyD(tGf7{%F&1a57rqo^HL#)lB$@HrBqL6MHINDv#5f}U zTD9bLX_5SxmUvbw6(X%|93jstfEOprRisxxo+GXb*CtdHEY8D*y;D&O=TU1wZ|xJ} zE!*pbFXaG7IjpF(U8$qjPKbW&XO(URLn0ng&^#CT#UJH|>YuSuI8l;DHvWk3A+;jj(U#J9gY# z(~mG8x}_Al9HFw+v5)J=bkBl0J|vVilBgf^eC?O``crq}&vEyG9n%g^d3rFid>yQr z-Hyol#{Llp_{5}3BK7S`RhKqGs|UM~ky>em1yo6ryI99n6<5evQOI4P3jM|exnklc zVLlV81fZ3W#A!Z^?*h>hve6=P^VR$qbLh`?@m|hRJ)c{3nUn8oQmC#|POMT2RZ&ly zyZNlUH&Sx9AdDXnPvjET~04<$)FR7ClmOXrvJ%(Y46$uif?K^WP-zE znsX~WNVB4MZd}y#x%lJ4=VFmEckPPxg%V-$%8#1WLkjt6rlmtgwTa?iLPcsYG#Xfq z_FkGbn6GZQnB4}OMI@}M53Rh#yTYX<`cD-s=$2;0L)zs5v+8@m` z=(pU9FFs5sKiXw7f+0S3{&J#NbHM(^l!5v3j=AZ8dCSwT?t^>gi4 zMlaW0i`VAy7Y5(FYEN5#p71KVa(!v#74O;ln9D1x->=wcEgEq*EV(Vf>K4WZtGiw6 ziWBQmW*cLn7Twt!35gqt9UH`J86~tUoo)k zjJLcu(0_2>jN`UMncS4=w2WJ|{Po+?`+PGN*XoLU%aLvi@nY-5Y^y}w3gK#X*JN26 zYV}KM6lb^vq-coOycO8=0{?D{buedu6tWnW zu<91mZ{C+kwfB1Fpr(3IVs^01yKR$XXBlSfe9`D2E#XQoYy&?qliqjSa9|&{r!H~$ zHFRJ)f8goA??uq%b0_X!vgi$$3{9N zt7-WrT{IFd9vx=ssd#8AViyImjbM8PKLE#x7{`VkZS@~5ogOJP9G(6?vYtQk$8}D7 z;VemWY{GM#sQ5l@<4fwaLk8TbEz&v7%{lv`C?`z*)4}tsX0tqqK)!>~$Gbj{1*yU? z^MVbNlJ4ilHRh!o{AC-5xgsZr^(VZOF20{#-krKQNF7#&nU*`~*E=-SE?6`;tkjX8 zs&1Ur8=P{zbiGV;Mb9~n4?As!$8{L$#w?s_OrJXJo=#S{I?}nNaGzyrx>-n_y~TI4 zvv4zYKSS7`_BhmyYR-=!o5$c*lOj4Z9xlkKW;ZbTx$W*5F1>pIx4Z2N_apW535)Yw z40j?|ce&j2yxY@7|GX7=-YVpDY2p0Om3tw^h0Ct{*N@A4h92=pmHYk|`vePz=^kkx z+mD+sQr$037cR6DF3#^f)T%CikpEDfy!a{Nsc?32ZTKS}*RyYU$${SZ0pc-}>v{52 zwQcC^xUqJZH2=Hi#~hB^dhN$W)u@&i=L_*8O< zEqadg_s8VWCH|t^J=o@(Y2&C`3R z-kW~Y`+CZQWYL?^@qj_;8?n|PNe1$qg0PwLhxe(z52dJ&#+xe_;X@V%A09rRd(LRw z)Kmftm`#g=y!n4Z^)4PbK=nk^BkW|T105o))h5P+heTfrRd{EQqy#(W^v9^b$I4E}Dq z@Fk^q4uXO@rA!-yJo~Kz148!4zMc{FoSxLe?_of>Yu*)MZx;&!{KP44WdiisYI7Kl z(CZ4qnZXFcR5pnK6iOs9#yjl*|A71OhhFOz{~{e__#}H$5iw04G2Ks4e3eduTMC6W z!s6|%anD@X{r$?SKcY@5#7+@_-RTnEID6i#Yu=h;c$k9`<{Yr_Sq#;b5}ncPcZ4|a z89*PDf>gKfd17udU$X(1V=B&w{4=)P*|BQIxHp6_dZ+t<9=BM&>@Aw^odJ?<*Ipp7 zSDX$f=C2>3rGQIj;ISb5Rp1EQ`;rh#LS0JTf}>xxJpwE}k7bkT5hws~K5lA*csiRY zggpYukAU)HQOjeK)+7=a_BT@cxKg)JH2BMAK=+~VBNcE?gJ50iDd@$U+Daf>BN-tC zMzwyE^7$iK>?Q!OiJ$r`-RLu)#oi!bsFi}Z-6OQpC^B`&>5F{7xG-QHGrzkw?OvDW z7SbZL5g}AmMDZL%1zS(R<TPbcwChQao z^sgQu;c>bI_ebGS2)Zfr1M)E>?7CG>U$y`Q3J;!sk#~G=0+Be*4TzXUmXKP8g_d8z z7RE~9_^rxW&uTD7BH-%m_?mq-UoOUUQsw4ohA0?}`V|qIKbnZIk*`{;Lnd3S{*mb% zsjB~Zv5ulIj#o{9Yb@MLsF`>a)h0d?0v05Cz_g)_@wLJ{vc2>C3c#>vSkxZ)6%%Ql z_r!~cb(Dty$`^2u_`Yg1*a|Lp7F6(crcmhv#67rb>wDxEr`!gd9cE&*uc}2qC15xa zRgCR$Ub9=rf!-7xhNM&xS@CKNiCN0Rd{qPiy2#g7c)LP9+Jat3C~}Y%MJf`4Uc(ig_#4fDE)1fa7^IAI=4W}j ztH6{XA}U5SmT0KoMzR7u=_`POJaye4<@NpNq;j1g)^wAT#?R?^iNt8~e3>8^CAGCz zzCKnp5sbSQFZm^in+Wy^Y6%y2$Rhf<{4YwqGRe$)OO4J1_&Ko*Lz(me9YSfmy_bYU z2A8XpcF;XJDjXF`AQ}UQdZ{!YgSsLZ)XYNlQeC3l%(Z1(nX9aBT!I_^xt}XuF#s?1 zC1!>oDl|D{AEh_@6l1Fw19clGr3Urq33v6gN3qk!#%~TW<&Q3;FV7af9NB@?XtL?{s zK}$Xm;r~-dw#aP+w{BQY=#08H6^JK&Bb1K{k`=@09b`8M`8j~|q;@h_^Bg zjZ2Tz)q121GIZwyVdrC0$y?;%>EXT9@A3`?nWsJl%bwfI!!jA9^^7I*@2~qh0H+T2 ziZLIhJO+Ao$rr9{mhVk{)Qhs=89`2JhQY@n0}57(pw`bHkbIDJvGVe!X$;dYX+k3C17BLL!q|RvC!ctr{vC1D2`sf99flD zG&+!vP{adBu-*e0JTMe|D;OF*bZE&r>c5TWN_rP9>PWQcBngei?yzW0N|HaVDs8CX z^TfG?ghMJDvRcFtOAS^s+E@hH3|gbS3z8=u$cIip=%U~}r0|hs_EOtEl#2V?$4I&L z6Gj>l5E~jf<_GCxdy+|rofaVibe_C#j7od$!Oh$~3!D~|r zRm~@UMyXX%8tG>DQA7^`#%aPSc%?~P{~frwY1mfRpGHU|e`cF+R>z0w-5;6`_xZEw z&!-#s=FGE(i*UVC7&Ss8T5$Kj&dGeNmK}4}d|mOp)H{0AJZR2*q~5cOjLMi=s1S2? zgS0bSLD>)NL${fo21ZUfyO@;vS^`A?Q=2od)cS9WQjO;Nn|T)pK3rfLv$sK}sn!V% zx)PpA&IF;Zb7AZ^y@dpPqI}P(!Jz)?w`yQZSC`k@@E3E1sIXR)GMFx!|JojA!{C{H zZ3Md@zet@zZHRZIte2}@CU_Y_#0h(uiU(^!2SYHk)PR%1BL z^NDNFD;n5SzgWXx1rM0Jnbn$*zV$6joE;|(j3kY!p|H_emcwm(H9};7hFm!Y?b4bk zS`1(|ym-f~kpfn;vvQeLrcSR)VS6h&oDBz+(f}!x@>Gq51VA}H6BpP#=Vg?=c z!32twKFg#^Ky#B7(Dp#2mb>joSeZ6OdxPZIMOCVqfvsB2)Y1Q}!l9|sy2~x2LCTrm z64{QRJ-et~4LJ@^N|~;7KO*~h*DX3qMNm<0o^YRe8A+8n=_-F+bh>hZ-siuuK6$Mf zX(k{;C^13i6xd4{y6b!ItAL`BT%xoA)@E1!a^3Y~vZZU^$P!e5r?9%_LUWeHFzO+o z;1dZF1`>nyi#-0&5S>Grq1OQsqJJsIlALDJyMm_vcA9kl=mx)G2gOS!tn@@0TyE$g ze_Ig#&g471{z@1s2eu6TtNH2Yh|R&iFw;#_%f{^%#Y9s@a8;$;=98b+Gr1yM<1g_Y zz44v7n^Um(*5vrM*$qNBB}{%$?7HQHj+ODCMO;?iUzI!$6V;-rvoM2mzoF#If=rK1EaNUe-aXQ71?Bykvs{hcEO%13@cXEU zhl|RVUI(PlaF85Pp-)%E5TD_lqX5KC^2A^U43m7LJ%-okn`Cm7SeRguriqS0HPYaC z)FibwXw*vhC|Y3#`Wa-H4}7|9TpdP)|x3*0Y>$;oe}3r-Uz16 z2mGx+m?Bs7YoqwhMyhNG@2hNm%ni3R)=B74-}F3D5;F zVFJ>H;;Pva{wx~#yIu$uWrATPLu|Q~XRIZOFKlese--k2q;9P3a-1;ZuNW2H*m9xn zDc}r3F`=?Pb}AAJDg^sQWUQ*x#du?dy8Sw;BKtRBR{gkfy%JjkO;#KMR>SwJhAS!h z{;c`t_B5fa#_%M=^y0V4tfqpCreS%;6__f`_G!7r=BV1QDv-&hh4$v3hAlSi^Ja@J z{b$WE*%tTgP44!^so9LVN*3|htQXL2rAuC^Is}5*oQ>J+=~=BD9Bh0J)Wl01Rn_c7 z9GsH&9nwo26WCnFiJfZL4A}Bq{Y!9%51h)_+*fAYZM0n%O58>4J?}<6sqMWE97507 zya~`9P7b`8hP?#keISm$5JyARQWeEgU(-@?o6;*v_SZh_em?sFVKM$}gTC~KfpGgk zrbxTX4V~%HSRxG5%#SVH^mgh0|3uM{Igo>?e-6lCrp(vdH?f z_->Ab;j)D3vM=1f&-%ofT~eN1!>p&7LM? z->_!i0&?I`bKn6v^shM#gB-zYj*=k9={3inASWd?CpD1M=9<%P$k}ks*)-&Qq2_!8 za&b^|aRK>pSMvi2xx}o!B;fl=Ui*`t?~1MV3c`0SQhP1UccWN)qsez`SbJ;1cjr)h z=fQXHUwa?M_W-YbNaA};uYLT)_p7A#R}J6q=Gx!ge1C>(|4j2eEz~}3@F5Rskr#Y_ z?`r=d`2egsfRG=Bq7H?DACIDWDGP zEk7ux4)l&6JEIOej~}PB4yTqMx1|oZhaZpK0}23)kLUpXKex*G7gxpI+RA0i|yBrFW@{0FvLVu+*tkBt5w8T~&p`hR5f_0jiA%bD)3-}jfh6M0%a z-A}(Cu1_~-dV2o;1u!|bVCdvdTj3zKvaJX_k)y3hB1MkvC{jbG?PyAevTZo6|Iu~~ z82m{sIHZ=5r9J#Sia zs6208^FKYeLy6+PXx&S9y=dDknK*1aYo4fSzue)hQQ9AN^~}BY*ZGvJ? zW!7Jh8_zy8_A}OgDmvPlej>gg53=#>7p*~w6r_*4sga_O&ebS+EK+jU$>&#)jr*=1^jrr--_WwKI~<9A|H=RYmvXsTKJ@oXDDd8PCtF;Yir9? zlesv%xc~9*3&hI@u#};9eSBd9*_OyNC8Cpg&+zgNOB8nHJ{;4_2ul4;6kU*FE68o4ol)wB}n9+Yt;HF;eGDIpt-^qxZdk6B5UOqW*4pa)mE73tEZ#^71*8iE@f1}N zv?+64XeGV1vm<|OP>@rtH%;viLv5K&Q<@+E+by8ZCd-jR^ARzv@K6_{C(P@ z3;i_E)}^FKl2QH5eljpfu@(jftf96nJ%l;+gRAwfilI7PERE|pQknzixY&qSjGfdC1b+HngJ^g`zULDK#IMbhT~khBfjtZ}5I2#~UWs@)eiVu0%J9wEiu zW&xl@2!YK7#1MG>^FVm62v9DJ9CbmPHJ!qQmDviMI5JSI6lbepJO_{3ahoMiIQX|F zMZ1}MPAtpD`L%eT@*06$QK;wgYf$RK&9+@uyKL@j=*Si=20Bc7{O{UkG2EH4CiKJC zfD*CMaKixugNUR2N+6Rf6xV0d%YMGOl`P)l`wOvSkLY%^7ok4R|JKh`<9_5Zu`4 z#C_PQy%CsoP;50TRHWRXy2JC&CR2JBt{#8m_EBp^(+;bjpH7Y)O8H6;RBTQm0w^Ard zm6yRx;@5m#Qd5<^l%#l1vEaOLrX!J@!c+6p7bi$0*^{E;!Hc4QIUYVRy8iJ{}W`0@Y*tQpY z>DT;$pS%5=`1SpDhc-M5c*j2edqL&J*#L6&v+-r=vo_OP3(i| zT~NRn%YX<&)7}g>pYMTdmFpD*-!mN2Z7uJ-395rUgP?)&cXVGKP}C-m)=F1nI!ClF z072rOix=ymPtXNwShGKJpkF%W$X58z&tz$~6358amAYR(ZGGUHzakx<_>x7VDglC6 zX&+u>rTKB`Ts{aNYV+3e&#%-?gTvCBu{Sos!U%5sDRzq6H&ua$gnLb23_8wV#hcF8 ziy(L8OcjZJINyg=*}!rR0-)BxUUebuSpL5cL#rH#7AOGk%A5SD+)$b#T{ zndx#m@(iYg6=@Vm0(t`?4&@UgN~D0iQ;M84Ao^ewg!T(1PXU1>`x9}*0JHv-Y(ylA);wia+x=EAWnmn;QOJ@A z#8LsAFWkz%&WHCN{_G(N5*Uc-jrC&j|5efo0YoC?fEc;$bGBG#KO0U%1Q;RY1X8UH z1ScGk5K;h`|B}h~SOrd==Y{bkrC5h@h&{h(O-%b8Ci^mFB1LkDG8-wJBjn4H>Q`fM z!xG6iO!PO}?jiY}t;&#Yu>?h<_)QL?z5h)~(_$uJ_c_@6J2(%=do9^p4#x$G`hBP5 zjSHlkccPy$hTA>xJ~`3-HKs>77Wxh1#W116QlZCIVZx{4dL~XsC{9l-&P4XeNkc_P z!AVcW$warz$^1ymKt<1pErR>V!+K21j!n;rjb!32=X^d!%lAkppd!qD%p=@JD|$>P z&KdP$nMbOeR%V$_c9~JZnNuy6R%wh*#aZO#7>`B}tyUYIP8*|vIH#Ejt^JU^6;-;8 z3G~(RJH0j@dvRJz@pQN4bdNSU$2J%5EFNc0TGz+)z^sfwlZ<~IYT`~tk9S6}cxF_a zJnT5dH;mW1 zRA-)2XPT1b?3!a&(faHNrkuu~+08*YN#r@@oH8BQ9F0N$9@p9XOrCd@a||rAk8lbN zWpRwPu}?h)p_y>aWU+szikOJym=9uKMshN*jxn#Rux~yxZD%p>#_}z;K@PFAkB_>DIA*&wfnAGp+#mBjmVbPr;`rUhhQgK1a-a8?{9~42K7V1pQ-40S zbACT|fg4MK&rUwCO@VzxfuKskQEdKNVS&VPK_P0Pja;GXSiy8`VS`PfF6Y0hz3>D2 zXZQX>bQ~$c@jM6)mk^hLxGLuht`yN)~+fP#69Tf~iQb8wInz;$pO1DKu&4vaU!oQ!R0HVY9Dbbmd}or}lEjVfTy^^j2l_ zbzuxRVF}8H`?=(WW+UEGv%QgEL`Jr=M7w}vxH1g565~%eVuM}7Rk_|tfIr}rCXT;L z`Nf(x4$e_!`S^<=Z@e^PJUMIpGloP3k4eQVk_u3N1$3w4H%jGPS%rjZr5RJDk8S0r zh{~|fmHsD{x&4**j8!OdReRV~7I9S(6;;^dRn)sxB`%-KTykgIE9Ol(hgBJt<3txv zKCk~`SzTe+u6Xx-Ja;pjb=T$Ne%!~yIM(BnxYJ;cAK47o)XcXPV&~aaKP!0d+v%TN z!XAHd{LQ9Ebe3cP#@q z3)!kOqZtRYYY3}r8E56c9~zRG-IctRszDIf>G?{%q-{g5K!Zd_!*t~5tF|xoqYZK| z8oTrwpf7U7XfjpIsQ758HPoDyUR3II&}sdqGRT4HsgU!6&jxzgbRM#K@$0!GWzuW zn;aTh`No9R)`7;V@SMVwiE8V;*7P@R#iZ3v5^X#Gmcrj{NoIwyl{I%KZPgO(MltPc z~~4n#!<0<*I%zT?++hc0*fpc#87F4=HS z2Bce2I+L4O*9-< z7O%S2ozT2IH|uGA?9QR-K3(nVq3MyA=wia^t=8$v-0L!|@08~3t&;7vd)yp%iSlb%-jZL%zK@A z2JPL_d^@T9%t?`+wB%RK8n*`;8xFw+L=Yly>^_P2eTn)cI=NNnF!5Rcvyd^%0`I+k z@AVQb4P&BMS|A<|wzD%ze^2&-XXFiSXQg^wz*?`lwGIkQN3}&~)+qKC1QbY)=Oqwn zP=skOl9hLY-%dUok|YgZBXb|oLnRK7nb){be)pkuV(e(b)+j*qh-_d|B-E{W{j9OJ zGtFewAXDk>yd=?_WX!i*LoG6h4(sG*)w2Ef zvRN@b6fd!0L?H5NFU&p^FEA)l8z6(BMZqv+fhlK{Z^GO2!*1UcHHd%bzLBPzLq(a> zc?g!`fXIk__g*7cS%>%m-;2$OqWR4Zm=a!Td<#2W%tHBUDlmN)ZTYn-P_t|y9kFzQ zVJX%^w%SSV`%zcO3KRo|Ao8a%QZQ*MxQL2{@c@QYQi>AcOE&|I{rJ$X9jMk5l9~3aqpcEB!&nDJqtDeX{8^=i? z$pJx))j^Kg_K;Plu4%M_IIU6}7u+Scj{4q@hHPMnl=d3HAB|E6^832>ntS8!&)Tee z!gfRg_tWOQJ~iZ$+N9(%dL?(y+!Q<79A;wH%J6DpGELC6JC(8b_aqK z(Sp2|x8E;wL*CvmzD3*K*|`FhhVI4-?3PPyPpf_Rd9`(32rOw3kp+e;NJEsn$<=E} zUQMrQdUR<|llO)u{KrK1E`h%M*F+OR%>J3^BobfxO)>mIE&4?}$Ud@day@|^@?q=1 z>(d@HK{IQ@Fyhl;@E`L1Y9d#Bzz^{s6YWV4cyBC5Yc{DO7Xy+;WO)V>rVl?H9fHDR zxBnN5?hH6~(m7;9ITfTo5czZ*lCrCDdn9|2h@OJM)eET!Bd^ya8PIHPtZ8ZPrl>T* z-m$?x={nsNOaiR1lx9&5je$rn?Dqhs7u#XZC(5CV{Sip(Cgfu5f;ba63V(GGLwv!h zvpXt%;QWt8^P7>tVy;6k9Lj$f;|{P%l5hQE(ZKeZ<{{%LXcrZ|bE*-;lJdgi@*}~- zD`MaOM@FN(CF^!42lZfKZecDRO#LB1wy=60W#%4nh(hq8?h7JUTKL`{|9H$2%u=-tOlmL-@VUyIa|8 zpJWarvC`88x}GD558bE<=K_f8m>E$!E zxBCHn3h5|HogMi&GG2?p%r9000JT&YsTj-_hKXS(S@qE1;M}v_ZTgs96VoUjGNrjQM4Kvi^ z;FoZI{dyJlyaXpXj?$uf)tkxFGD)_PXWn43KU`Ogbhszqz{9AB&po4fg*?CnUOx{o zQQnRo{+S4%6Vf&?3gtC0w2bx>=4mK$RlB9-RVGL}0QnXO2&gt0^ehOQbs=-o5gRx@FH3m zgRs99Y*={Cl46k)7Fwsl^?OCEB8-yWTgrK}a^NS;IW5TtJj37m8X4t|Fpk$jk{&Gs znjbw)5We&r(I3#HGVM!^JbpQsm!@m%<5nM#IE0^wkve{S7Th`+!Q?&~ts2^8lCMtl z4@!rJ95Lz>kFSS+-u*9>#<3|bFw`xP@QNtB&^+s={&nhzYuS`2 zZk+G*tt1*R@bzxU)a&bS){xiVu|$^k&legZUlJ;juR4r(86G83pdq{yXv2>B@g-9~ zhUSCCNNhj^@CO((#>CV19p0SL8OBx`GqY(c=r5R#gV5}iPaP^ryq z_Zyp}M$;fj30Qz4dQ+GHaIlg$)T22@=I=V+YjTp+3?ifF{p$Sw$*#)TY^A;91_y#! z1q@1OcKsxG$*L$f)KkP`ChDqBTr0#`j54+r&9F)cuv8L#M1EbJ?TgRpo%lgGCY8caLv3gyJ$r1}@dQ5yZ^iZycWo{895 z#sJrWGBp8Ul|swV z3N4Jz^R)hWN`1w+^3^AYj}~!m6@{|?b2?x}a`ci~w{w@ZmT_X&;X1joh3lyyZ|deq zNuh!@gv7V#7w)l2$NO(hcwQ_RgUcw4EAm+qL=n%0m5I2--s3uGgK6B9v0k|7rp2We zD?D*LPdOR;3?XCI5S}3ZuoT701P>QWELSfB0o*n^@#Z&$EG<;S0_i^!oJ01ZD@)0u z1Z1Byr8xDssWpnHg%LhYt`i&oWb~iywA#|^Q%far?!G(zf6jK^f|$E?0AlEp=y&$& z3+ZwcX*Duw4f1W!p{SqOtbz|J)`|^{e@p1x7qnh zbjLad>+8PL+Owp9rXAs0zj3p<+md^xbHCcES(;6f{)}#%FSR;{Z#I|qGJ1NRF5dn= zvP7}0?wwit5xy&Dh4C)B51)J{5`)J&NY}WJ9DXVJEO&dvBXfY@?$SfRe2e()Ll>in zz=?LQ&16{X;NMVzcvccyBo&3*kZ^Ztth4$i-L7$~^uk_M)c+x)*+iE`B)SEXRjBMa z2TDc^q)R^hS4J;SSYkf^P(b@%8SVIQETdz@zVWN9DNp!y>fApWy|_FbAg!9~sb(*A zzdQpQ^3BJPa+2eFoH6vdF8C*-6-8H?WBvchXenn^X0mT-|75gq*D?4y>z|DFD^sZ6 z1m69V(TaW*r$NpJ|73J6yvfX%?msemq2<$;Qty8<`hH~*Id@wdE#+oI@kXUs#J@hR z%gy0K&NFy%btA0muIskTGi*e7?Flom7el%|h;VHSOXVAOrpNu|j z-k}%?95!k4N(@-ry*qdqQIPg|9h1Aqt|Z>9@yRE>C1ja9AZXHl!!>he?LaiZy}+;A z_tOvBLm8}J-fyH|7gEqo$tneZ8_>H}`fGNq6%%ZeHg!{Gw7#w%!@E%3?dRkAs>$Lo zc&QEF|Lgl#XO0=o%i@*(jV(|6nwCPV>(T)>6CdmSOW$k+B?gRKz54OCv}v=C&bybw z;vj;LX9vIML5CYzo8%a>CyM{rscUhSk=M9?SP?WCAbsIwBy=bx^Go^~DMdbJ{jwI* zDM|)lB8tS2I<~L%`2N}Awz(Xw!&c_a#=D#=V@egjkT!a1${iwF*+F)N%{K=Vlvk2F z%Gfw7tO{OsxZ|6l*G-=8BcAy}_$JYym|EdyUPV|-?0@d&wLFJb`vBT3)MuUy0swym zb0YNbuUi@Kp$Qw724(J(hVDPBJ*akKgL(yU0KHN!+psWPQmh-UEL}1#jn)XYeAfBT zM<@OB(N?`m-keFZ^f>B0xI%qy*Bu;}=t*V3{6jCTASx9sN)FaVBH2fy-hoq;Y)XlZ zCjlasC?c5;Swl4-Obr4y3FMNZt$-p9~az z>ysIj{rr6JC2eE*%RvRZ!B5Qc1g?Y1se^oagDQ=KYC;W4llCsVstN0jC(H@ zn`#Bk+QPqnNL=Sfd_0QH1H~0UllF`W0OPolz__x^xT^NJs^lJZ)g}w{;dAiFG|4am z)CY%^)9xVb8x=W&MZ;%JX0Qvp$!lu?zZ(DYS=!@7Y>VleT0_}0jj__+A&ZA@ zHUQ14rd9oNGtM?Q@m+PiNir8u&h?XI0F)X27$*#CKg&V~CfXRqv7b$2o9Kw=WJ&uCCS(Mw^@zei{y}Npf``s3O z-FV}TyL)h#AdS1bySoGl5*lqZgb+Lg2yOv_ySo!0xVr@c1PF9aXa43|d+uGetIoMP zH>>}I?@d>YcRb@W(ZG{i2CWvG$i|0q1m{7 z!&^ zhcx%ORn7&pt9f-$7TEX~q|NmeW%bLBzv;;j8@&2r_<_TOir<)u%XD4WdUwHiVZl04 zUv6+=n%zK&a?xrb-SWd%yG||#CT>Ul#h+pZzV8%@LkhUM%_?zjA}Bs2remvn9of)@A#v2}ev8nVKAm+0n}%%7KrF~5fri3JZD zL`HuNOVW#C`i|?qr1GR0<8EY`W@Jt|m@sI>lkh$6nIn3?C=q2jMZZ32|NB9eQ8>|Z zn*Orp-dL)janDa9p#)=(kH&~pMxK?%_LIvUUfCgRJ9m?m1BE5F572vt{P z%~wo1mpxofxRXpYs7w-bOmI6*T&q_S#!arzOwJ!o@Pkb<%-iY&n`#%nRWq&P=$eMh zniiOwZt$(z1g~m;Ty2?5ZbMmW-8+rw!VskatNv3CD@ z%_q^!+T9F(UEH+83{Q5=X?#uR%*=CbF#K*#z%zKukAfOVJH>Q}FypIfRuTP_E0QgB%9x?4hCS`nC8wYzMsV_SWAZPk*!HD0mx+`e_C zz7;;cb$e=seqf1(wGFI+;x@?wn5}gvwq~fd38xydOFD@+1PK-;$qlR#)2&IufE2`X zq{M5Ki`GwwHrl(^$T&9olsj7NHU|QQA$H2HdtnuOeeHG%w;gItJIcud8W%fC>3ec8 zA*};>O&lv-Y92iU8-pfGePVheR6A{jJt7=iLk&ygJ34bAJ2PTSiyCgrJaOxE3oCyk zVrF|2R36g}I~xlN+Y1_}3j_PbPP-Tr#{*k8n7K15Ct-;L*O{GbjIc+Om=CIecbKqm zve+wT5%-!U&&9n~+e3W?$3O$i0GNhRNQqr2Y&FP%Bg|hvJlXWk1`EVNAVNVbNQU;XQ~JY^N8XXq#gQ)Oae%~e47PKG@v$$p zb85|@tLw2;(s9N{O?=628uRxo2eY`QW2ePqv%&3bm@~BhczpLbUDd^#>ZB0Ip-{u@ zlfO#_j$?V=iGPgC6!uBT)Jf%H<>&N{Vhzzci^b|N{(4E#hN-0*V!Nih6I-Oy5#7^w zIj7N$C(R|*cgqiTYjJn!C^>F% z5bwDVnaJC4kaQcn;~KXRhfOlCj5MuIQNNt)(wn{8s8w)R)OY`r>xOT!yj*fF&VIBq zx_03HA+&7+^&;i@aEsYPd+i*4CQ#$)e9yr{mGa^s=0aZl;;6*qv#G}s)kX75 zk8^{zMFZY>g`*s7&v}2rOVq{HgA1s^z-f%pjm2d&^W{(bOFP@PtBs3a8e%^$oPU*E z_BUN#Bwx<$Uw*yyd`@0`VD|bU;>1(rSS@YmBbPS)HEXwD00KD>Bs-2 ziZ>%04xgLg@EIh{9(w0FhNn#nbZPc?^MvBry~6&K9mO~s%?M388=)n`kH}YAdxu93 ztHYzj1L}6)sG$j1y~#G5?&QY~e`9!;UWRV&=qGUbO3c&IIfLA6>o0tcnTghrF4JbE zh~@^ydIF&t_Zn;gVUA=O9VIyp*BZ;pe%Tn=;uKMU0H3xyx6J_RfLCU0T|lgGbVkWt z*)Ea60KKIEOS}70IC%!*ypUn_{(`IXT|1KWv2fG=CCx`qbdnf^@JB{y<$xvxIvqQ6 z57@c~WZsLRJ)|sUpSVI#cbUK90vZBTBAp(n10TEts`D>@UAjV@ zxPXo~uem=xG;)jsM8?n4idx;qW1U`Se6LWT`TgNI_1ZSar!K@NUKeom2>XH?oL}<0 z^kFmx7~LTZMD+%}C4tW3hR@MF8IVx+_fBpN2K|g#G>Wk~oe4}=)JQoGzlx?ZDe|O6JEdHwuocGhk%wa@7WVW#{{;U}!JqrRdc# zyQbOoxakJ0qh;nLck|5=nUuuVf^D~i>5A{4t6P?sKN7coZ(d41Smk_@{5=}9DcNw8 zz$*1b|Apqy@7uT8-LPlhf$l#5`R=22?(h#tTVAM6JB0Mqotl z3lx+naK1T89H5=Hu{T=$97!h=k*LBdnw=2uuhf~8lWBJa%rND>%e)IC;y)#Ty?gj#w=gyTL*pE`3(IVDndc?B0{#-tRR z&lJ9hibA~Jf)j)ZRGiRWJ(Krud8$fKk;sq<3bmp+at~e-)sIjdc*UMgjN(R$$f24%Bjk{pC{;aS+c#ld&sL*{Y*Kh=wj5QW(p2jOCCh9N)`j!zHone$jF_Ah z;`Uov?^e(QFiH|bx;Hc?D+Ql$0C`WYOcZaGAev9FmL!zboC%`@peOJJyx;^7$xeA2 z^Q{g*>kLqPA=c=V+|X@(Tw#VWf1GxmmLk8VZu+2-H#e7#k>x5J@OPy6wLq0fNjIy= zs3FX=g)UB)9HS6*S`xWg`IV9*@-^8w-vA#|=e|Q8W;h{`ktbHr-C1+Mpc!>bV&YY` z1>Ga49To89t-7boJvpG88Mzj*_pLuVJE$Lnqyx4|beRjP*McY=cM$hE+35={k9Ga3 z$DOZIlqL_yfC}{F6IH)UR5d$uzGv{ZkyR-prx2bY?4_SVk8`9?LDU*( z7-1~$#_qvLGakhW7U=;h*MQS2*AKD-M=;|&041wiCl;vfdHY;eIPJE73LQE;1-;@d zUG1W4mpVb-H6h0dpx>x~?vq(h!2Qb=?5{yudSPn0-?UN$a$9KGy4>Hj2OgpV8Bsa8 z_&ypY5gORqB-XmGA*6m#wG>BRs6CCUJ!suucgks-`1?<6T_HOSug zs=HwR+)yk4EgE>lTOR6*8*9h(rgdZyhF$%>5!3$iu6eRch^m5sfF%tm$7Gr(poJUj zoa1IP{xM8h4OAUL_5;0QulsWoKL8HZaYP4rwgiWy ziK)y5M3S>QvS{nh)w$!XOAeS$_ik_(ccD~$SVE0e`kYgAG73T+ms+ruBjY=D`1N~{ z6czljzMX{p+t#9xk-$BE&5y5iQQr}G?kagpY#Dd04{YN6IG&uKpOmG23dF=$4QR z%(zw=FsHlA<@0f}=1cipWF|xw(#}!p5ELI#g)uvh}NxcRX&N!Uf1$ zG~PsZx1YIg4!_3*LySK@O0UT}*#<5eqeO*l)^cT>V3)mL*@+d_3AlM%rx zlAAcAL&hVN!z_o{e0fr-9k7yVump6_RDV~oTcGjU zrdd(XLh+}Sd9nncQlmM1lp&=(#LGHl%kKh!k&^Qq<*fi)v_Fcsc8@nrZYHLYC&8mu zMMeeFM9A381M_l|-}ELIKs#xq*mJDd^Hv{aXr-kY5%A)-34>-}K zPVX7&X^e=XaG8xj7y}?3+RdZ_Wv@@H&iP}4bYw!vgeuz)`r80LWMUWVCzPHiluQzO z0@8y5YO#-aT)Qxcz~?P6L)Qb=3=q3(0hM*5khMuwh`I2aR?-5c!hJQ34B_M~2YNe2WksJZJ+sJ*#fA0iUT=bq>R%3xHRb_ zU<*7!#2vvYTDmC)bm>W9zCw{0dQrr1Q3V?@9UB>=La-G*2lHNxV3G2RAsKuvm6C5N zI6#>uM&!;SHELXyMLW3xJDXWXjiEtxNe0b3JJY8ktu{Mtm?0kOzIGUtnaiG3jENAB zN$-SlQmI(igo%ZXN$)zzz@zxmuh=jf%^(I@KZeOT!X7cnUb~{$7{k((7}pf0X|}Ux zRP)iNKmGv1l7Xxg*Xkh44}wgEZ(K`v3oaj>Ozkl|zQ6LkQ~lvpz_+NH|Fu& z(f_~8Xq153b5!L2!O#Dbh5nx`^k3Wm|L*rcS!f!~u8xQQ!O#ES@w3YR6+iC{xqkUK zes1~)Kl5b&@kslNpP&9W{LD{zHK=bAg4aiGd&c{o%5dOnfF|S2ZiFz2GJKRHQmwxC zU-((NP+WV0Z@!BEt&ncV^%VGL?oTBNGYnsP>O>RQ-#eN$!Q@;Q0C1n^!OYg`W?bg=OLR`91`~{ue(t z2Z+eP@$-F962)Kq94jm;4ad(9{#lsc9uD#ie?9zzpPh4R#DdGXJ0DLk8uLj0PyF1` zpI3Gki0~iyS-cS8PmWMq9=G|$83Hi>|AwD0VfRH+oAx)1nw}TnTQoPr7WfSOzwmR< z-JoWeY2l|^Gegh`0_~gKK8ydx&t`D^oXLc;^A?hcw2dZ3+Ph=V9m%RzfMGZy^V2;g z((u~q7T-n+zsrm5$+Z9{V5FZK^+ybhrzjPRhP983&jZ5Lp^6jwPZoLw$p%!s#{*iq zd`%};h}^#P=|b5%UaO*TFJ4KGBlSlj^Nj^b>o0kpyeb>f_CnYgRDmfkCD?V%f@1xM z?|5I+^G%fn{;z=H^L^g<@?D0HF_|M`GG1@xjSJ}>b_W$+@M$D=e4;&elvS;lPhELg z1fUHXWw4)1#0e>4Swd7nfTpGubIh?3jf|?-=x|nt>~q?dmmF-nB?J~RQUr{uMm)@! z_vG3cqJp^)33~u&;2vrG{BRVWd;~179whv5kc$aH&dS~am=^RE7+#!e$8nI895*50 zGs`|9o`KA)1;WtlF(ZQIhfANuX@+7%r3M zwFo$F`A9q0rC>&Ku6Pr|&)aiHU~$?S+_dO?6v1`rjI0?*IN0oOA^PIK3(+kvXs5Db z#!EyNoB@F*pwyW0B0Fhk71?H;ngM?JPO%dDfIT847i`AL3d9(=1ytJTSDJCUC~JyM z_;C?=tFMpge#QtVj8a8G@&>34l5?Q}*}0eij_DL(*FArv6a%n(+X>P+(9k{=tkp96_2KR6|NBhq~;6NMm<5(0Iv3G!aglG3h2Pw7R^fl3wq(&*_BcY_PSV z-eP3Tj_ne@1o%!{?9g_0AZpGlNHkajXcFJcfy|UO7?vXavg=-u z(w8c;%%rYA8skGyu90ZP(@+u7BU++(ka4iKk#=;>!FH5fJ)2#cMXBqS8hW2qbCAp!9CF!O7 z<>7QvQ*IpHH^+M`vH49%@eXm-_+5n9%R&dLauV}BU9{KpxF>f+4?GLKdrrQHbNwnf-2BYpGMFmfeUx zsd03GSAyyqN}LQxk~W%6s{q5G1yLAbg$sf)kh3&#AcQGn<|w0^E&tGvQ0C4a@p*WK zm$$j4)(atmRUB|sBHTXl;N^$Qh>1^=5ykJp75ww7*@K@*JM4hWOJZqct3jqU2!uoM zU;)N76}b#Wskb3tyO}y63TkQL`5EcgJBZMO@ZSe8p%>}GVzcoU0-uq*gJfw;d=yrd z_Uro|D><i)6I9qR|x0W~E4C|3;I{D)h$02q?#y5zlLk7io)=zV}A4(>c5X_}d%?5tc>rI)R+w z3VOyrU?kd6!J3#EL|S6a3$%u9(_4R5jNsdeDcXT9BE-TSsXxG%&oGumDVl#I0>v8* z%;NXot!R}1kT@|w(%)7zCeCfahPw%R91z0n#F@e>_M+wWd7syVAy<%B{L>;=ccAxc zFRu7Zi*O^5z5|!hK|FG=-S&>13?%%8PeOrB(mY)po3{zL7HxG14X~83$Co(L;s&6`bDEUhg!yt_7v@xX z=X5>fq^0N7wQ_VQC%8ag3a0$ ztn0_j+vO>n$E>@f%!lRg_LV=J!q5M+rJj#|xDw^KEKmI@D*lU%)$N&m=Fay>%X(m z6=@`ooGchZbQrAv&O)oeSNqxjorON(6eV{RJYkVgk(YA$`0^1dYr-zQLaXdjsF>}e z-ln0M&7%6qsQXVAdPQ-Rr1-k8_|0LlYicn*eTj-pi4RiAOk9bnNfBdtiLXtG5@IP5 zeW}VxNu^9FLPRNMVX16iDQvqGh*$=uFN6J-E^{0!S+yw(vn|aWC@U{4yGJNTq%Z$= zTxKUz4u~jUaW1zlEPpdr?hdT5-YI{Uu25_#5qeRf5MRboUeUQ%QD{@~gRb&Xx^iN) z;)6})JB-SukxIssN{7PAIrJ(M`l>tYDkQ}!s-mioV^uj3RmlfcpI=mGAy%U)R^vxj zp2b${+Eia}S1*iI%T!e7A=d0E*NC&#bjQ~ame*MC)eK^MIUcK#WBbD6^5s_L%U0YM z1DhKB@-GLYU&t70&(Ld8aw<@RGm$AuF<;gUr`KMi*R`(H#_xRDwXXZjTvw)CS3gjv zcTxvKua}9at0<|fXR8;CtXGw(e{zP^)1B5&mDht_e3k60Ur_i;AOBSb=_@*7uH^5p zF$dgY?F>Tf#NgltrBm@E(S{FWUm@8IS`>|)3=JADzv{cv$|n#QkCU0^L>LB_Y5s1E z9BUArYqYR#5`Z*i7BnsOHkoWU@gOv((KRnCH90spr%E>mB{UljH@6lvb0D;&(6!(k zH-|a5Bulr%CA2iZNJ$(gjb9~wSD9h+vecHLF*B#Nk)h!2%c>7A%QGrl3tzVR3P^qY zP5=HkA-QZ@)yuZr->spkZ5nlLr8%VarzFjoS+zOk1?}zcjM^b+9mR+3pG@Rh+3|;bw{>~0balpcqRqD5C$#d)brYYo9Q^Knpy&a&cVDX(!B#uh*?Taaa*#VZ z%Uru{^?K4)d#X~q8&<0#y*&T-MZDxWO{i{#H(KD9-P{q< z+ToLF)^By?y@&6!ORS}11gfG0)To6Y-i__a_&BPL3eS$>(oMdQp5)yg>0a}rL3!14 z6sQ|GF={peq`KBllns2w27q;XUBHVZg4B{Joh5g;Bo zm0L9xJux+UGL`j2WC1kDjeYZ59Q2qQdp}{2PXZ_$CTcP(Jz5J#G#~El7&Mi(n2olO zY>E5L3c}@_LMwpT^(ls!d(UFoOtK=(b3-OAwjs#9X6q9Z2l!LC0dMx)!YsGvg4<@_ z(am#7&ztwYLCiE2t)AHHoBv)qziksPt^SSA`kR2=!du7!WOdfwY(C}IEO+4>tNUE_ z+KhuE7roH}**Xcd)n@CTq%>{vxY_@il)hW*HR)_|#~uT!jnPn9jIhoD;BVxCa|TAi zs|)6G-{+zw=J_y}&UMgqsJMt(K+)l*2R?~Wq2J5WmwitcJlBZOJ1w7IO>ekOIAYI! z#Rk}u`bjhs$xIUGo(KJ#Pg||RC2qt2&Zj@YidGVO7qkDP)c-@@A@w8mM#(&Gw*6Snf8}do(*V*xvKsy9lyZWTX zUGvqQ&{Y5+0U-r}$6@x#d@@JEU&R4&XAbEG8({RWw)7(vJ`MFeY<&Z_E^&V@(XMk0 z7?#}6>M%nJm>XHe%ft6n-*y}Z?#uznJR;$FX==&c7`z=8IIgyS>zDpkBm*w$H_qmE z5|-W~{CLZ!v2%Jxd^u@wMaA{g9rDNm!s-b7A_w?R}KgI>|tZnP8nR&eV zO%jfDwGS86^XmI8&_i-b5a_5x-oi4?cQ3&Mbb&F4?mBPN6MuGKug;~ zvZoChNhX%j;4TdtDepRM3qBCCm~#&0I?ntnsMo`YH!t|*LuTU7&njWWA85JKQ?@-N zlToby^6B&c;?w>LC)2ROpBslaH7Djz#F@0GS$LNKf{R$`J>~P z9`<7rwqSj=MfeUqHQ|c(T}Cnw7dU0(gY>o5?)BTLGuA&uLXLRv^3mHn@dfg)4STN~ z@qYeoN^iMScK+}F;&4qHMl@Hjj0_`&Q6=<(jS@dQ|n zJqmsIyzp%J->cG2QvD*h7g}GkgQZ48Et|zQSM=U+b=)t5nr{h~Zu8ASq>hR9njRGP z@Y^{P8dQKOcwV~JXb*qoHO+k!Z0^k$5+U53-I|0w$GBGuzTG$*DmZ6ISH2D+e)0i+ z%EL2Az1j#{+L|OfQ$}Ifk{~It>3l4p)2E+54MpMxS}4XoT|6EbZ6MN} zxiv?tl1%$5PRm8l!Kw`3_r%IGVaUurfi}A}s!nmjYVTsiS+%SO1%L~LiP^QE(V}R$ z96rX^q4x>Wwqo44%p&xGh^JA#!ilWE6C&z!h|hf>Oe$sjc!xrHe`MLKg@@{-1y&$n z(d?p*!78Rj9{GSI$Kzz2ZjM57aOSj~h(BGF3O9f*|j z!y!mOjBds!(|fO-L4H)>JhO-EzBeB+?ZSd<Atz4%DI;1?QCPce*O=H+B`+35kZ)bpl33M35m`CCk+P zjuZe+Gx(pcImY5K1^7>3h`|47Plw52GGKuIX-@+RKHhQ;3_kooX1wO1FP3j4fM`A%nSa~k2pC^_+*ZdZ-2X?~I6-~V}E*BtI&9863&To%i#4oFk--u^7#B?fyYy;dz z;7D3WTIqxJRk5&L$_|r;C3!fuRXi^&iC7=fICg{;HN!K$AE5yTq9ka+ry_AAFc+o# zSUWibyU%YmDx8Wk99}b!zo!bMBR>Ku*{2I)+`A;$5knoKh`K}_6a0=IHYqv=tu+#z zj0S7o=EUUeZQr2ezkt*{l3C^aBu=QxZZ z`%7n%^m^vWAH@SDe*g#cCw>-GIoacxZjS{5m-R8fmdT6VMJK!(V6bu{rCI}6<0foJ zdT#CI(~|RsRe1pj97WO?35(!z{cC3RUn8r?L=)+h@DxUX74{ca1dgKG zSky8Ava|>lac{=(MIF@R2_M=mQrarpSLKN+yDQHDJK&MUV6?F+$b?@GY%!jj%Tj3F zmzn6oX1dHZ7%0U859%TOFgY4&1?8g4ITF#Wf+u2x8tYhd zRt63`uUn@NXixK=>{g@@9+^DI6)n>VpkMpG_rBt4poK52VS<d+xrsSbT&1~UH4 zz(hYrMyBKWL^HnkIcIw;yJ9Mkw7D93Yz`$f3KPe>4-JVF=gxIOh6@+Tjn&2WF4n63 z8W8`cn#OZ?)kl-{Hr1xik4v7A--f~1!ucJ7TpcMnYeSqFtxE(Kz9fdG$2(1JqH!0m zP~MxL8*n$TyT1tN9cMdCUZUR-yeuBeu{f;{_;U2>i^dkk_lKd3{LMygm!%xbw2O@H zzVgf9=ii$<$eBGT)IT7WPF5(tnR>VEy&~POtf(;SEw>?x&K&$Eew849U;`t2Q!ymevVa12VR2c2@=Vlg7X|Zf*C=B z9(h*of3whk@$-;x-ff4Yu%LN6v3 zunRi<%|ZkE{L17d;8|#~`A-%vD)c)~LbLzk=T}v9lPAQwS&Pj>@GP{%KG)^Szp~J( z6VBEof3wg+d(eNf(9I>jmXv5VN^`_g##!fhX4wj$0^Kbc!pLbi<4*%k3>^--C zw)dQLKdRs5ldk!7mopZQpQrY-mf-j~c6;2r3!a63q8IxW1kXbI=Hsp(DRKwR zzU%TUF*G|?kA3|O7v@)PxPJ1h~>(TLp$E1P}!3ewx$$oFpan zI3J)zbq(Jn%;=tI9qzMMNo%HeRO{&idF=f z_OTS?zFUl53gjo9pep+LfgS>g8pw{n8%Me)06y4Cp9lBS+=$ZeNN)w4; z0Z)2Kk^5LeTILcEHNjAfE!bPeCt8M-zh&t&Ul~?p*(ml-6OlybKA>P78!lGA;8V*? ze|SF#ISJgKbuA;*&@V*Tca$G30{&Z;7S&4^aO-=?IFR_e1A78Qlhv=4T0+b*pom-} zn~NupB_~GNEgm(XCLpB9$fogaKr>B3?My%uc~EEIh0YVJp1>d|q}{-85Pm7hFm2G- zu3bM-z+_<1%&fua+n~kGpvu=l%HM<5j0&Q=gEn$Qb{$`>I(YTnz6AIxT*N6j*d;p` zk+|-$Ys>Mv6)Eg)4Fx-lIMtZ=b>W~o#89`!48&~`De3{Z3yDmKa{u}vUV zQ1yb2P*$2ye!2S?l9pQ3^g(TuR7~;CMcEP&;GkUgtXrC0F9!%`b)%z8sAcsshI+GQ z_(IbCoJlcFM@r1bG~`r&zE;r}&8k3Wkv6Ne7|V?pDfKHXi$M(c#|RHF0p`79=|ay2 zkY?)z3l*!4mcm%W*@PkZHH0NbGOR&z&pKEpG^*DTUO#;!famdVW$27V* z5Sq$*O-be1%lb|GBcLo?8J}ng57>x5dqO#gCpfE0IOo7P$4^Le9miHNp^6?ocIyoL z^egVuLpjawn}Vh}8rT&Lz(=Pjf^g-bsz_~)zL3efZ#mC%Q^DkF~AQ7u!__oj$m=4d>>}U-aD0wY8` zk7x=5Fioy|@}!H;sXL6RFHNOi%CVsNVMupDTtAf0AezTeUf(`ae?Dgc_vidp#e$Jw z9eBUdmQmMYL4Rj_K?~Wyx?Mj=bkSAXMMS{_Cqr?$@wq^^nG; zjyc1U9XNqrcoVJpCR*C^Rxh%;22wo~p2Quit{anN5GBtKl~+tG)=wz@j=cZf@!6;n{&*-(q4kGxy@5@*FGr-Ksb=R(Ko+&`Y>u0E`sL`z)mZxD`~|GX8wo|OCb zk@H^S`;EK7oxbQpC)X2`+%uE$?|o5NBit|>oD^?f+*-aT*ox=e$`0*BzEHn0-=dDR za`)XjPO`F=u<9J&>ixKdnH-04*NJl>hIhAxzPgoyv|Yq$z0a`ydA*AeRfbeyiI_{6 zEKHgLhnqaloXWx)w7V_&ynQCIO^q{$ieuy1Zw*r0@sQZLbcfl{hb^&4HZfgTvP!bO zFc_y}7GrDL5tfzUpx)w&5n))g$wJx%i0|s{?YOGiKDzF*n%cSs?_THZ8YJwxRPK^= z?Rs(A9<1B)YGg|;wun1eOQY_^3fd(y>``j$$vQME2z5v~Xey!_Ddn}u6B{XC*r*XJ zs-xPdme>J)?wRfGu~XaAbL}gL@7t;Fueb6?Bj>+ixuq}-))%)=^*0lhs@av z+I3l4Sn?h0TP!kLOX`|&3E9DH?ENJjafBSGC7koUurE{*-j~V_=~vT z8F@-NxKZnPDOmezSbA&d`=N^ZCyNI%a|H~^zGim3h1DOH>mKH=!{bYiuO<(rFC34a z9oN~Mthx@(sSiwXj-pChqia?m8XJ*$hH*_V6JpHcnH6LFo%B7Nx}Tj&`;WdY937J% zzZZAz;dEY0I!d{4I#Y3GHa&KM|0{iT-se2XP;i=RKXzYqHr43NlN88+IfI!TlDS-R zu}`w^1PTmZmWC-vFrO5~pqF)RlqbuSbQxEc7*sC`)S$ks9n!DDar`1=T&H00m06%+ zL#*kJvoVIhxl627h`4RYxnhyN-9fpAj~YC%p)gd# zH`rx1JZ0GHAU>LBFp?}ZJ|sMeV=$pHd+_rN_8Id$U7~B2T5SH}Tl&yx$AR0gqO&O3 z^Pi#auM^JOJkE`(&rNdNLpRPBHflc`xNlCiu6oq2ZJcfpdz2%3lxui=ig7ydxbU~| zm|?!q6!gHTxUfjNIB&f`Jid6nZdXcldDWCyLU;L7^0HX^^45Q)!}jtQv&qkx%LfC6 z+mg%Q%nHATE}t*t;X&v>dGfzee;|0uKbN@Io;zo&d+iO`qLPRsPhZ$*{{U{fB5iIQ z6?;`?pQAMYpgnWPQ6vX_YR8&RYbUrWOBY6y8b|u$h40CQAoT+$Rso)fc8d14NV_8R zydrz)aJ6}JMTX|{iol1O1hzo0dBs4pP4)H)L~}ji?=$!LignnFse9^$ zR5RnS4L6NY8(v8y=4Hn96)h!!V_9@ik!fJ6esejE z7XE(;>hRZu{x;k|Tg62EfSY!Y>>w<_mkQ|HDlAYdFiEX40&r_i@(MEJ_k8`Ts6g_x zze~8f>l9`R#h6V5w%p21zfu);63N&fet>AOQjw2fLabzRO#Dc^Fty8|;WYOVxB%vf zJAYwvUhBEcr@MUdG&wwI3NqlM-zV|q_mU6qBQo!7r0(KN?&ER0g(a}Ac9j--5`7O} zsTl_72s>Mql9++vf*JssiT0{1heBC%n}K;Gz)xt8URn3TmXx9I#sFHZfTJ-l1XZfW zq^exjM6de<`oO4^dy9a_(oZ zIRkC$4nDMaNZ}<*tIO^r%!vo6;c!CR&wxd^fMVS6{EUSjk`O25UVxD_;Z1iFHxyQL z3Hc%%cyafO?cfT52MjSnRGS3;?!kR-kr5Gn1}KI0(EN5c{4_j}Gtn>&9i4tY3vQRf zVg<6-P5TVt5utKWrAxyScAg@*y>7E zR{6NrT)*EHL)Az3{eU(B!YR~7I*o4`nFPud=;t82^yO3f3Z<*Su+JI zKmVmAES&cKIUgy4jxwFNKxf)^476B*(vc8_&&x_z4T-wqxRF|6#Akfgmdo%3) z%|sfsGMN7tKkvBHrXHn|AS)xni@JHY6b6)a(g@f%b$nXvFkrFBOgtyf%}$)Y1Zj~4 zGrlr@DB3J|7_6JMw}SW4KRaVR(3&sdtZ~_8+@hjlOlF1(xS!JdC9%q7TP_H|!`23;*1gi3ID{9{ zyXo!jO5+t3mvuSI1%t%MqA9X4S!odC0EiOn3PGAjz;75LV#T9?BjvXZhg(79;e}|? z?j(M<>$p6X6G3i?2h37!M zEJeUX*=N1C;$Jr*m|cWxkrZ5Z+ukg&(x`s}>zQ}|0jw$i16XfUeM3l$)|y6oeiGVR z9y2dnCmI6cZ(xs706GER$D39m++iYDk+_!P*TvLt_RdCMet~t2Orn_te{FGvYMoTl ze0vS}f=ToH=Qc@q$Nhc|de_-rPPb&mY~{4%@5_FvH!0WiG+j4N2XCaF?t)vS{wyAL z1Mp|WkT~+U0V5qq^jcn6X>SoJGCR;zY9mq$@=1crtx*IPMDZEr@tk}17>`%M>G#2boIq|}Y6sIn_7-*ad z;|Dxd!aA8;F1bFG{PyYSc8MW*F+qM1C1-rwYy&GQEK+ z7bSYro4sVDm@FHXsF{^Y2i8481sGa@G~(1AWXe|M@9?^%*^LcB z59?5VW8H^y9a|POAC;&M-eljZU8PmEX|??Hp%!|1Aa;`RtLwD=^4|H3X3^eqEvZ}8zcy$r?|UG z6=E6r0h9}$6;~T4A_e{*_U4r@=0wO86>5!I|?iLV1(oHu~(gM;g zAl=;{DBay49SYmoKJW9+_kAuepZd)>eL|034CmXTI*Vc;2>8$2!~ ze?Pc+NWm!mONpZ0zLFkEsO~(Ere}uDmEgCsfH-25y0yngX793!;CeK zFZHC9{FpLYnO!L}*)0$9VFxNVJRg)gCB-(qC!-^(UsU74{6Ph?%oY+42(y<>beCF) zB@_fW4taaaDkP!t7lh_?D(Q2BB$YeA&F(N)zKZA2cFLITW*`x!p0@{@4_+P!%IF|d za7v9v&XiZyRZ!#XhVM{THS1_AT7D#Q{@kq_d;0`{Z5KTQ*=MdM*XF>{RraJ7vF8I6 zk`+dsxIy^QOwAw&E{aBw`{&`+B{wE0GR1^P0V?bsr?(aT)Ax65I51+I{HG&+4nxGP zriUDM^>rj?POQpp%V;?bCVfsW$h?NZ#GVjcLOwV2TtnnMy>}e6nC|FEWf(oW{W#7T z9(6vOm_9i;fXTl=UilM43QO4WU}JH z6HODipQ>ZTzwJ~1xP^%0b-qs|-U4v$TFv~QDD-EtkkW0jAj5|gZCKBD9t1^ao#h5q zktP!3+(qYlJO{M|#DY`3AlYUffXCSWEt=D82_`HvB4%*{#Z-Wj zT?J50Tm+%RzM80-#M=?=p+8Qm3iIceB5bqO*i7zm3~|?Cbuwq@XbbR@Fru}!IXU6Xi+ zWYf_SJ_%Py`x@<(h@A7CS$?pg=c8GS*8TYY_+y!66_=pLZGI`%Relpar%qyb>$sCQ zy*|gU@NW!F<8mc&@125dUW&?m)qD$7w(TeC`YljKz=cQHop)bvrp;5?a9D}sWyEcw zj5Qm7>6t7z|72;@!y_-KexJpb{-|wVr9;GEuRfo}j&k*yws4vN>7d&ocuI?(C*&0% zNIjPr8=&0;!+L2O=^WoP628K`B| zfB1U8UH0pznnT0|-kGm->DJ~!1pITsXY+Zl!7nl&QvG>2uJfMomWMwqnaFU6whH1^c{>xs{#Kvrp zhtVSH`VI-bi{jAkvB_S{%I}y#RGpmFBr_!y1vz$F$zp7*LbGN8l=<)}eD4@8m0*H! z+$$Os0c>Cu|}vK{nDhH?E_j z89!&zOKR2>xUMMnBElZc6&% zHgC~`1!d^)dg;C~fS1jk?M%feazB}w%5&xRsz)!z>_}7y+_@o zlGuV)S;`VJ%F%9u?Dfjo^5g~cRB99icJkE)r`0^R@AB!S0t>(~1>q>n`u^eig;uD3 z%rA3?4YCSewllxzWo8@Zq{!P|Y zYQRFU@CA4$hqutO9o5RXFwoLkSB~ZN+d^y6a4R=#8!RikP-~1B7JKVSyPf9_lv@s= z+xEE=jtA@$H{J_fkqwL8Q%JHE2`GM^R&2n-8l{OE*OX+pWU;!Ha)Wh5wruj9v}K=OZAiCZOXZWUVHA#787lP4tY9SpKZ)A4;@j`hG7CGX?yxI6F;Wz({0%h*@e<435?NkMIgfA-j53ZAwsF;r3ZpAtbO`MpU5tvS)Lwj*X%H6ZktD0A zjh0u-y!@t4^-!yzBJWferfrgRHEn3ocs2CGllwZ%q=ou=&elQiTE?O1STN8@p7>_b z9b5QD+H#AXXzFGKws>0A>>I+Gbh{p1)^IENUWiA;E1pd2ZY$Nt^A4I} zb0XsL5gGh*H~%@=&%J`8m8E@~vJ-Fb@}j5NWB)@(y0zoP^yun8Q)=I!pMqR1+uLqD z{GI0koSpxRj`R=sudO_|@7u}M*0Uz0^(a5zg`WSQ)JXMe{ujSgA1pmP4z_=IZ*mv| zIDdDfM^GU$|BUE#9pmOJhg{?>!2<+&97gL#coA z!r+gB%{(mGnoD9_LM6Fk@!tK5QX?tkf-9u?4kp178~ou92D^M<=Z@6@*DEc$|kOX3|jI3}*A1^C#vmZP7f7kW=S57YeII z?2n{T%Ol~ui(|@1;nW`%%1TIPaWro6*caD_6Q+6*@9?tgD}Tl@{a+-d|1i^*J48}? z%?go}X2*^geZukGX!Jh!@ho!yCUGzl37kzAmCY3FdytroBx2L@?e4>y`inQ!nXLa# zO0WG%N`wDSN<$j~4sc}PNG|y_Tca={DIJVRO7rbWYNt$8K7IWO86?>#1pyOmJq8#d zT~GyHBp2(0>;Q6(IKto&6eJPJMs;;CaquBX zf7xEQBXTOSa4O}Oiuu>t1|txNS!)~ zH%Z}IdsQpI-JJ7win`@}n=G3H_MMSsb z5a+bf(Bt8tMoI{H77eIJi+2KSu@?ZYH(V;*+&iinAEqMzB&8Lsg@b=rr0g^5`rn1yLS70R(f(jC`o(eq7h(uVZm}OFy5REF@|1{(hpp#1TieM2s$i z!P(fT1g4220SuO3N#0}gR9#;;m}Bzz&PL9Cp3sGeVUXe5dw-|BHHAp*1*pkF&0O@! zdng4t!tf23pSOEul_`a$o!$yQvasZ>*febjq?|!Ui-!uvFNZ&lqc+TUN;>kO_n_}t|3#@)?3TCkQZ^;MA4L)MEt(a=)btVoKO8Kpmzdi+hLyx{Zess-`G zsk%Ru+MMzIY<1{LIiHb(#UDx?>+#w3$uW=dPu3DAD9CaGh4pC{q@RS07%5T}2o^Kk z6G*@Jqu9nkF5^C{|tf8i!kPvLJ zJ?>3Qe^F{Gn!yn&Dj*`=_v;gbrt(_VCMydu z!&j(K@@{6dlAw?DFVSx12@pwX7$PYR^~pjf)XLnT2A*EoiKKA7Xg6MN6WS0hM|qT$ zJYYF0z>EARDV_e=h~DnU%_go}s0$(~9nY!&L+)G+cw5&Q8)m2d`R5G-y2SiE!+qiB z<3v70QhHredXKCnZZyN_65UR!aRzqRboi$A5cTM2m2wsst-EBAXp28A@IED{WvR50 zZd~B?`ID5c{|s-egd>{LFho;&NCL zMFGk-#@|WwmbQ)735}1@-_ali6?O;bNWT*gc|UVD;z=oN?Q>VZAM?$SbNBB#hk zYiMt)+|j!%Kx-C4$rc&HVD4-4*ulWZ{1Kl5qrPiIaDiMw6E43IpgJd#+Los$+|}EZ zCx+Ztnao0$lt-U53VG6U?c7r8ESxnrDmyo3vMY)+{tu{L>PH8WMQ^!9j~06z2F4;) zJ4?ZkNx?A|fD+;tkiVS2C>@+3R6e6@#A`EnP?936=^z5{Z>=bZX zP6~!c?CehzsrfKzA7e5IVX}*}Q;Xcuh$#x9Dsn%gpqAXHk&bvGE5a?0Nv$|f^Smio zg`Has^ErVC-HRc5-6l4pc`A(|nwL%VCTVO|O;lkhvi42Mj&@L+CQ)q)?pJA4cJs*| zUMX)QBwjaB`zW&c*-^boO9>Q74ZKTXqez)BPpu_L4W37Iq-7#86T|Pg;@PR9?^09K z(zvwJghkTEyVI&%)6zu{9cjrN%%rS&uA+U)Z!_tYcj;xAA4-O}s)s16yfPZ~9f!jl z9Tn)C?lL;{?ONvf>gEH#*d-2>aP@gb4eck6MR1KM#mvJ; z@AJW5y||W#7&h$~x91LfCLC&LeZ+82SLO)p_r!$KkWQdgVJhOL^q+}Hz zPI^N5P8y38vkAnRPiFy3R}ROF}k!z>X7Oo>>K52cV44yLpPx(si~$DfSZrF5T^AbD5T1*OFm94Tc#nLkrP>e3k-4pgTE%czIT$TrJt63Tj-IJ$>RI-6q#N}2nHg@zW` zM<|tBD9a+|%k|F7bCoJG%qxbNDp(>aN{1^Vb1QD?E9dqrw52KoEh=eCD)ojdJFqHC z_bZLDJ|_lN@|b_FV*LCv@bgy5XWGrrPqC`vyFc$rR^2mJ6%Q9(MrLA{Wny3#;rmn) z{Ng5xVnV~N=+&sl--Mx_j*7mF0y zVgZtiX$n+9`oHLOu^nDwm$`hegP+wIQq|Wh)u)=(r*+kbKWmJqZ zO__^Lq0h;)vEx%5%HM7^6)rXN182e=`CFHtz|7O<%cb9`K>56tzCz$$wMvmBdu)cZ5?o*);No{FoG6XR~w|H z?K6EV>PDNtWP6xmTTDi)pnLPtVXdxt`v9mziN4)>s{LB5_6K(RbX5C|WCz5(1Hj3= z8|i>4b*9(0ABeRf;~?lnr@LjRZ%M~H?5XD#u) zKc1s3z2S3EYq!`h7)?1PUFLJF`!+7ao~He7X5T7S!wz=ecES6e%7~u9s7{%uJsg=m zHBr5&zq(5ZdKm8s7=HCK()US7_Q|gID&Lc7WcCFiO!a!7bU>eyayP-#etE9mxs0xP zhyI@GK1b>f!y^h)E@Jbg9+&(6gopt?v0ewm-k!1ncoo$^0N;QX=U~3ZfShmpFxp^l z|6pHBk39H27b_v^ZbA_|0OrelEw+`Cgx5nXgn}Xan8Qiu6)pf$d zkm83xRYPp#u9;7Ht}aRPMj^q`L~Zv(;YTF2Bme~U4P%I37RCqw8L7P=&b)nx^TD5> zU?g;js3Te+Hq(B7=}i$=kI^424fe9p+ID|GVF(`Oib3!4>}()uX@$%h5}n=mkw<2$nb4L%BA|@;n(OZTt!an}xr6rfx16B|>u~wEy%J(9nq<|FKf*$u|p3&;z{o5~k zZ+QDj(Ar3sA9Ps2JmQcQp!2Wd^rscpt~HOb6(KvTZNeCBnuTv|vBWAdAk&zVw&k~7 z3l0sI(O{k!(=~BKak^@4o|^(sq7fWh^}6uA$4o?E`0B&ck@qw_1H#t7$pO&(dgL)F zNCLcy%d`G4JR=0gIra0H++bSY>Ur3pZBONtAcF9CU& zG@P13@OW2}`qC06#uCDK>IGWo=p~lj+e6m*F=O%eZ6vlWw{}yxw>>fk(qp$X zo!9*K{zRwW(*p6%^Z628Ld!eNs-=bSwT4&%>8$ArJm3??zsa<^Z(S_u2fV&E35t}g z`VI*)T~(jphwn!SGF`#Nrf+rLSN|4V4v z1+Me;c4nQN%L(;%Q#tNn=igtf?1>_8GbPv~Mjv!Yf9SHGw zne;j0U$Q)-diH*d?cGv~@jG7B*Zg6+5-G=*6?f2-P#GI{g(7#vyP&&rXCOf=kbL{j z1%77wA5uEv)mYT(ZVX*p6MjmI$pM2=p@pEwnx@AQeCbKn@n<|w6Fu;nujeM*SL=4! z6EvZlxE7|sjOFh8E2;9q{Onfs`>)28fekw1@S?Y%&bNK5vlAb|7$+eCjREPbIw)se zR;l4gGysY?mVfb*oW=zXKK#FQq@_Y}Y5vub4h3;(_NM-!)HLG$C=~qpeE^1HdMlge zb|;95n^;*|Go~|{)P&~}dLGo34sxb-lyXz)$t3k8b%*lHbmfAmC)`DNLu5&i-|sQW zT5Qh*ur~Q4I?|3ZpDnbnaVBzL(JZQ2r%V*H48#H8trc7_2ry`J$Ckr9mmDVM&@MMr z1Uh+E8okk3)T>~U$Y^-9Oe}*bP!KXYI2DfjlJwH{TY*aUH5=uX{Y-^XgU<4kg08vG z1lRZMakxW*>J%+}bC8^x52+Cr0P7<`ey$QB)~A)O zR8KV{m~H$Ze|h+d3?H_Qq?RF4#<`S}w9 z%)p=qF^Yv6r3^wP9+vr*4y7vJCJ$s*Yu*iPt727-fwkKB0M4NP+%?x${DCvT})DjN=EG>|88Y0 zcV$nGPuR;Yg|kmN<$L3CU=}t+G^h|eN3{8DDppL!$fnJUIn7hT+Zl6JT}CV?iQm4m zuGP;c@C4&AjPGwdZ84UMjupuCFFUP(q`5)Y{S{h9g5_lWfi0=#9l*b4 z4{wxXh)TuqbXC+?YSzsp>kEI;&KMr!q6MZYkkul+i!UR53neVH31*gAztHrMs;&)Z zIyVCwpXW&6Y$%1I3GdoxueZAc}-QRj6(fK&m+> zjjRO(LM)x%I3JNx$@kQ~)@L#rcu8&8d(BhlHR&{^w6)}t_sIY5`Kw}-9m+{Kxw5%E zMr@yqb#Q2!GF}Ox08Y<*4+GlB(9pL8Xiq9Pwp%U0g!BwC@NTlb3#8jY?sSW zoEa;@M|CO}Ut~viQC}k_GC0qqn)aHDpSe%_OM=ZWJ?s{@#h0n1oGru8X54&kh z+`{e?_QI~Jr@-_ymq*1*%46pSwdJeI)lRCFis+Pz9p)dp6B)*4N-1s6jeht<9T?wP zb2nY7X!@Qx&_0|9Mc!OJ3jT>b1wtohL=`-305aE18B)8jU0tlm?$@qlQoFA+PeZ=j zn&Gx2x6>dZHTZ<)1fFa?%q;W~lD_8GrR06@EY70nIV|9q?^64pNAh_YMQ_lorj`g^ zS5x}juhFx98KjhOiyKO?V7A~M0{OcIr7c-rsiqAdx4DVtwXSl%Lg19z^At{MYd#-r z!#^GA=~ipOhIvFs`gP_uPBxe4e5VJ`WBUu`Q4vH(`W>44pN_Q1Y}!QF-<0~X^;eFb z3k0R!cX)!J)PFkC$F@pp??*o(I?_>1cA6=Oj&$soV$O%ZJJN5;Q*bQx|8%4glp2-L z&Ir+w?m!c?3;NTMUYvVseO3LZBQ3P}vDE|7kw#GJ9+vs(evkUPwqp~w#l=-L&qjST zC)bq4rCmY6rpY#E4|oIB%z=kz>$dohM?D!UH~pUNj~rk5-7K#DzUJuwNw@@(-Pa-s zy+w>wPh%M}*YU&N_7*5RMCdMUkl9rA@U^?fdM=I5UcVhgbfmrP|8%6ihCgDveP~$P ze&oqNVkYrAefDXy;D8rm%=IQZxNUsZ*TY{!r?p zzbN&ay4(c>r52lOlJKZG{F z_wD^nyVQlga*FxL*O}A_ao%};aXAMZI8VF z61#t$9!@y!!MFDWa3CCt^5$-6z<-i))%W&kcDimwPx0$)zw>9US9;+iLG5%TfAZ5z zk|@~&CjLLE?k}Ag6fu=VIc4K4vCli&e-d@3QMKU$_)&TxECwC={GfzA5J26Dk=cA# z21aP=gw()RgU)6%lmuH8jHFI5Q}aY(NMmY9VnQnXOZe{$VFLHA?88=$8VqPvVFs9h zaxm!TOZcrr7uls`=Hj0Qbppas7kA+^U?LrK(OF8RmbD@R)Ct9~bK!1ue)wMn>Z*2@ zEvb~UR)g>;deLzCvm)lB?#I+kgFUcDaBwiBC!3ESOQuI8x_%%pL>Ll*K-5CD3H&I9 zn|VFZ+RA~$PLN2fP$n~XqO_!?j5(tWzDTb`a1Xa*uaZEAY^DITwpXRL7047++3Ho7 z5m!qRR44AsdC{V!CHo?=K^sA-pSHXx7t+h`Gr+0UsqHhIl9f%Am0s*KL6MW~>N92P zH@Ey^+{*vrh{|e;&AOFaSw?O%sQ=WhpYm6)U9?w7RK z91^;w%125axq=3hc)kq>0F3JFv`hkw`;PUi<*Fyms)N|$*>(lM+kyc{l_bLOq4Lp) zCYsUF0^fPEgj43PhF@zLbeHR8fpH~34*T6FIlEO?S=yK@OVks4%w|J%kvayQ8YyGynw7=jG&m(BNmTp%-tw zWr}FAM-nq1XggOeNr)0eEtllTmoC)|f|koi<}21H4Gc3OS=IBAXjK8zzxltLP)%Dg zO{sHNYSC1@c+!K!t*wnJp+nPWhNGo_^+?x`#OR8juy5M1KzkNj2WwN?nR>>gpu(b{ z-2Av%Z~3vc>Jhz9fG_Wnb#ReZ?WLt6INpU9-a{0Wq|}eWW4WbAhIM ztPFa=m$OnabD=Rkkt$VTvOLka{4sTU?;k26ocQ9Mv=i#|e4gk#L<_||8BFAsj}_NV zT^>ss<4J!rk87rX!`uIHTVJYWIzziM(`Yb@c_G*DOE#)OQSH1p|3cxL1p(=W{44HH zANWeg9+!>jlymb{e3VW5VDR?JAY;?u+x>z=NL#f^e*yQ)kJ>NG9bOLjEY@v*ZWI@) zE#Pm_)^4Sls?rv1Bhl&@(`%j<>crLTj?w@5cnMj>kcVi=_vO-o@6s1XL*J;SiSnhJ z<|Vi7mrX{~W6YgH1y3io4N)%);jF~VUL#8d%0@I|MlWfM<_wJN9hX0RT%Ha2urOUe zHzvGPXXM1bobr9S^I>^KWoF%}X|3(?3iHYv%@up;l^&y&geS%ye2h&$uI$mwesNl9 zUN%0GZ9bH3I}OIPV{*3~e*I+e{QIiP zkx5_6s>`ocCF(UI*(IQV6Ln0?lTB!}6HYEzJBIgk#yB4ENHhUItN-nof?cYMXBS!6E zOn+^Lzi4*;#f(SUe1UPJm>X`Mh+-c7a-+m)gEh;%sd>XaW`niA2D{R{duzk`ej|v+ zLJxN{YIx&a&t_%_JuF^rS-eEv zBBR~%ciM~;votf>k}+7$%s?f=5HOlJ9&q`Ks`-OF(f%UL9sfZD+go)g?ewL1zv9YO+j4_^w#g4dD z``pWZDf<{O*XEYjrq1=tE^ul0_9t(6 z#63M2-_~!thVFP;+epLPZN@*?pgh?n9=B;)-nBoriN&@Z<+QEpv-XbNedn(esv{A? zvg<^<2g$Mx7p#t?Z44T>3WFQO^y|iYJb7>ZG#*bcE=xbUe$P|NuF=RYg3+$WXFvFf z-Ezi$M$G=W%3hM(p4+(HNBCayNkhhocJ|KhD^-b4Gh+EGb6G6*S;z-n75nNh?3**} z&m!&B%j_FQ4!W8SR2S{*e;sUC9TfK4W$l>NklN}D;aMD~pniSNT^jPkbJ8tnmTH$mmj5^kSaU7U&+)i^;I(A&P zd|ZBfT=8&R>EzT=zq`QFxF{jIbv@Zbds3itB#d`rqV23^bhsz6Thw=Q)E*TxeR9(8 zTy}kO>b#Io`s19%;6(7pC7#@=&X4OA*>jH{xAn4@$v=MT$X?g~xK|ZBmov(!I7oVU zwOJ^5DCl^4@(OuC7H)hzA>o3icG}G75hq-{BDgTajSu1z( z#6Barb|LzDN@z1n@JfgTe}PDTh&b$w%*M5$&4m#CjG|+m(nN@C^$hjL5gPtEdXYVi zr^)WlDZLu}yy@aBWXzTRy$EB&IMu5&R@QU2Ft>_iH;&{pE;Xk|=!e|sYdjrp)jSvV zFBUb)yDj;c5fSQyDpZUo|HV!ZsK1UP4-iC$2{nWZt2xrj3jwdrwe#FMyikP^4QjpD zdV|#O2qCR&@8#$&<=?wQJ?)wBscRJm>fd4q?+pwUM~^@;I>9*Iyg0o8Ov2`MAovo1 zxX(zs^Qq0s-cU^;1a)KH%ei=s*<89Rf`1EYz-#M`2^of|T9n44OWfb?x3Iy0y}=fB za8T!<2nmLA(HoTp3`G-d>4EgUjP`@qTKjqJ0TY8Q;eg)n*ZOeJ%Y>P$b_Abpq^4}d zic**2CUhq=#nOO;`>x*j;{(i@9?YMwpX(1D(PLzz42zTy1y(7ZbqzgMOboESHo^Bu z6TB${J(G`#Iwb-}q5v+R-zd;|s=msSDKg*hLQNP9L8`(q(j(=jL>+X!3rzKjD!$7w zNe&rsn_*8W#(|ZTQ&$=$e^zE2?Nl0)#0cup@K=+{!oEvwlDrA(P_%nSg9FfVait#I z+Wda&(t6X5u+w|krQaBWf5XZZ!s}lBs>P!&wIC1kn!q_8aj6+`GziZ|sA+s4bHLmF z)orsz7hoz0zvxi%bNBn~9jtrX^XMFz5{6tG&OA2-54?>%CCBHmBpAa7#v6W>zoV!$ zQ?5Gu+MQ1IV2RPZ`d+Z^&E$BqzFp@?eCkq%#vmO=7prg2@4eca48-h1eeWJZkR+P|_9$e84c8%5Nc;X?Ibm93$*`-kM6lARiDZ;7oA)db9Hr zIEwHx=S;dA^umB=-|nikFI}&}?HGP=#W`1H&TLQPP>%>fg9B`PgEcHBLRi!bz7{+PBtGF1hS_umNux^) z$IE3&QxZ^wU;}mb;pG_;+Jl;#&%ZUJCNCfVLI~^@A8h<6+09ICFkJ+>tpNk>Hb@Kn z6p!!je5Vid{YraX%T2{s%wb8MiGY4E>PIPeNL57t6Pyb)Q|w8nx7EEDnZyx z^I@-%>Sflv>*$m8pJzVU%=qIg3Dbvk%j&Hw8{0Br0t$2J+74kfy=bTc#JyND6*&3y zGSuD}1mWZ!+u70jMtT;q@J&n^WE!vvUnrE-Hdsnh)bdpsBGnj;?b8wJ7GxcC9K*0QYghA{k8S?p?c=_ak0SEr+9MY2z8K*_$_Z7zBp7X zz{4UA6pwAi)@u&%_&2i4rs$NiSDN*|Q7^(wi?Dt(sK{#dnPfkm>&qCto~yFP)_njf zVhM0E0*)p6v;f%N6u>it#MOc|IOFQ(M4yw^dYq>pz4oxJ4w1v#f~tclG5Ju?rG0Y< za8Q=b=-_zd(eXX_MvVbsd0uE$MbHE^=zepy_UOx&RJ4~9{Z<@$;EMY0w|vqRiN5^9 zdTGiwWHKZ&k$$bV*gP`Jm1jzrRSMPe$Q&?mZwXM_IyJ&q6g|3P~Vx8&!Kj}5eJ9|@F8zL%ih&z66NQiSM8SMV=;9v-L7 zpCoYG!2Y(=asN3^jq#uC^yJb6i1!J26g>3QV`cohqI#jTkmqOs`2$sF6OfNxKj-ng zP3WX?HB0P=;75twA8pt_eD=rC)NBS&BO5&qrCOBX>U*GQXP>j4m#e={W*to2u7znk z#BX(VvX5@oGoIbt?I%`B{1S})>Ueh?wkjTaHqs&faC1m!4F7fE+;Q`B_t|nAzAiw$ z_8Tj_6IE3KhEu)>vLfz6*L-hDl%KOi9o~g|ARjLLn9Q2!l9&^^Jo4Dpw zg`UKn3=rt#R^-GZ!xZ3qZ=h3I$Y zTi2s0x%3eL#Hs1l9MAxzdKn}la!bYs(vek#c*G|F18GlVpHMeJG}^%ybkJ5#pfo-v zPe7d=#5*9m!uQ@sD@*PkLqSqiF}{;;i&0j1#L?{q{Y>ldYaZUu-picolAl1B;BLWK zyI}0?rwU{kp#fkSGr;&3iJVY?KS&+QNI3_f3r>Jy%D-g-jQ|=s2@I!`&}wdLm<1WC zXp6O%&^l#FihZu=5^Kh&=iLoJ@oL~1a$`e+Z@!oC!m!diG;JPJRcgdfa z@qZ?JVD@4y{B-qjUV(}TDdoj3U^KPF8Z@@;fmYGDs#xttYgvbwq!FRBmEMZWz_J&fm)b#lGnGFC6pWFpX1!M) zXV;)|J$t}Z4IM&@DlbINI{uf*{a1RvLufy$IZTKsrM(5`>iv!^w3!NuIOo zq+-Xb7o@gn#2mYqVOyAkfR+W+GCgEU9_xqN3job}{sv&LNyl{cp9 zuIs$oe`M*($B}mE(L11ZMmuoDQK3TyL>F8EZ)#%#o4dG|v5HkskqF{U1xGDn`BGn+ zTLa-t02AD9u)x9ZFff$~V6&@}GY0dDrkqX{8-GlpuOT;eu$)0|x@562N(1sKW;L9Y z0a}Z=K@?N|h?v*Fj;|F7B^8Tj=wP78y`f%N3&aopr67;P76%#H(=9F#?q_)5XW=+G zLZo1x^sr|`r~eH(?b@mw*T~VK1+sKq&!o*8#GL$6fTTg8^cmryb%*G;we-5mY3k`X zs{GlGw)j?*KA4ex))oIh2Hs8ud51l1o^viS5!WorMMj( zx_{+4AisW;CG=@bF^Cdl0j(E)HWAT&2}3uXuV!xihWZ8^yqUR-p}d5O`2~!<{8DbCy-ZXLynJQq#tWq5OCC68^1O=(eq5lqTojsV3`HloiS;I#tD=0hXFjV{tob3SE-#P9*3!Z5 z34EsuKeb29;F6}pPYUwYX9z#yT)6Of`>ON~t7|3f%0{6o8qSozD1J1K-q|8+ED2rq zBcU{`%97JtZX}=!Sk9K}9eEk@+;Ez9E}j+@FWQ&_r<)C@XD&-}3tQ&sdB;7r3>=3l z>;dLy35!69yPeENmVlf;Nx9=QzF_Wk?;HL}B6Ed`3*--%+Ga1f(8;`AEoL`h;-lR7 zG>7B87BoGRfU)LWM<+=>^h=+1XDnNg&-Cn$s!^GAbQ%XYHc8Gsiq$Fx1~&UvodH#d z3D8m@!a^ail_BuWmTog$pbl-#OhMsUz0_a(MuLJioPx$O+8s>azK7j$i`{ujkHtTO z<(x&Js!+sa0)XcUb#ewoj3t+HE-R=KkJqjqa$GRYfE;>8JG12ZPY1TaYv9;*fh@%3 z2bS(!*r2(JM(nm}?2hdK7lX_Om+B^hHn*CE*~$=3tPj1Vg(;9ujT*s$IrHCl^o?^2 zGcHN=8`!pX!Bpq;Krg+_s2M?J=Eo*E+5{pYK|K~Y9e`rqMU6x6Vfsi8mmzkI0ZW&W zXNob4fkV&~`^3V9jZvv&gQK!l-3!SJ~3Akq>x41lqJlQlj`LQ%~SOtQq!>tFtSp!XV!^SWAfNW z3M?RUEzt9qQym8DCvOvdwDP~rH!zkpXt&DjEii0mwwr?&7@nXQed{$YwKCaZ)<&{M zeqdH!D=;+})}`G6R~MKYg(0KXI_ZT@4BF-=*0yVfuSn5cPAnV@G7;;! zRtbx)3^tWqtgqWwUaxGsM81D5$9i*F_~yLN-P%UakrkQL#stRd=DoY5#p=lrn;QIg_s zm%?9?8q1!RT=EyCE=jNahf@DTssDeW)YAWtl-frg3j9-{{)bNgL#O|t(?3=_gRtpT zTN}?d2NO9>##@^%b|>__|k_2G{W0G;c!6NSw2v@6y>>Ng8peG+XPM%3 zJ#Sl7alPQ!aD2V!GQfQ^FY>Cwb@ugc#SMJL_vZL!71m?auuQ&5bGshST6wz>-5@T! zPD-_MyOpHte79};3{Rvl!Q$j@Hz%yJVJGAHQqx{>QDyT%ehS{%{zJ%e^C4c(c=nO- zcZurbU+c86lR|We$C2q*yw>j4!`)wJh$Dc4XC_o%@4JR}8}2W0b>FXE%{?lA@LTfC zKE2Vyt$GYXC3iuLm6>xok#Gb$VaWJQu()5RBWfKF$dV9u6jRLX+v44)RepWG5{aEC zh;>P<%W@=QUIk=2a>;<(N4CIyB!I5Rdv1gp0IK>|M0t%15mAPY{~b{lDa(Osg+C^3 z28RkKu0x;3eZfz%3W8Hpr=nLNNfBV7pom}xKxNiCfoK>CGJO|@iw+3RM_{8Cy+Mqu z-WPZZwvk}M1_zN>(d!h1BeP46D?{Rlws25UB_+pcC;El@U1N=p*72iK#Q1Yr97Mmz zQ^%Z9OU81390g#B2Y+FZyF)yc^~jJA;FuNk?!5@z;{5?n~!o!YeGSa2+b4~ z*$gyp-~uLFiv}TSSOI!=U|lpIITdA-Hg9%7H5o05czr%bhMfd_a)inYQ9yPf4GJ0r zY;eJY{Kyl^K~En8lcQEZw{SAw&u@=AGsAhEWJZh0U)XS@f+Q^!M*`;vQ;rGNbp6mUW4F-|OLbWm}NJ^Bp8D5y#tAXZ{3geqNq+OIWKH`1l3_-3nG4R(q&i;w&AcYOKZAsY-yc!jQbv|`L~oi#AMAg)KQ|mFzkv+)@whjPET4Ga zvJKHnu5tDtg<6@DsuB3ptUINxQNiCIUykuVMP!_CWAlUvp-f#^pEkQZDd% ziE?d_w%qpdl2S%IjyA?gROn;pvqr{(1hELOW1@)^jpvwl{RTk?MHt;AbHTy*3T9YZ z#epQ1rXAQw+(AfPCigqK9f6rdeg_sN8feiB*sq31+w0EY;V#jHOuIPPWRUO-I_JF0falD7`eQ_BVQ2CW$O`+?p!xnzY8RvYaNqFe9}y5K|5A( zFoM2f?W4C7TPUvdcrVN$o4>b4(nCYK| z(^aq4jLCmQMfDOGOsUivjD1pt^*AvuINCTG8BL zoVsH7YST3jx}L4rXiE2Mcm0I&-`Km$zo;H|@%L-Up>*hmp&Nk_q#LBAyGvRSX^@7Y zLApb_L8L*tyF;YA6;WzD_`UDnK6~%id3Mf&^Wc8H=1*7;W?k!gUmqhJ0ma~HkAId>xvBIA&QQSxVxFILcbU*vPsJ$; zzr6+eKBfG4=Q}yG?2&~`d{Ket`?lk;50B1p@OEgKf~Y2b06iPZGPpc)$ax$(^Wy`E z(q;nN`-gEN{#7~N!^bs_Z@DBXXzyxYbn=S59neAiL*Y@<8ud*F%?(;mLSv#~@^O|d=G@q2K83wA*-NwNE{c5|IONJt4a4l|xB5#W67E|Q2&qZ=sN8|+hzE(#0aVzPhDpeG=u$IJ|Y zhr%Km2sTSx&`I2%>EdF6X?aQT22fCZrYwA+)`CMYaov#VYnTNyMCrd3oHb;^>XP*< z=JjiKgU?^;^IPbv>IQJ}1jpe8pJ<0Z{Sdl>8;Y=e5gOP8L!MUb9e|VU!vmlDlIi%a zZihcZg2&Fh`oQlgG7Hb(N&xqnQ*Lr5w@}a0voA)(K(NvOA zOJ-5sHqm80T6IfNtu`^$o-rS7A~vL=gLz}}X=8)sVrz$@ujC>uOJc7#V+rAWj11aONW`|<})JprP01eCjlnc*gaBH}~-K~(bZ4}b5C3kcG+(7?)= zdCMYYy*?a}M2oc~DJ>^i!yeBzB*T%6stnWwXgh z<|!fHlb7UtEtgZAyaa48pf2fbt}RsD?x~*XsS?}v_XiwqWmMjzX+aUGzNF9m)2V{f z(;_je-z-zjbJQcVJh>A z&W~WJz+kFbjw@=3_;i@@8H1xvfU#wnu}zP)1B3BP8DqD6Op|)YJydLxZGQ)91)?s?e zxqRk!8OJFG!_SE9OI!9|hxB(53=bGAe_H54`V7e42{)w7sDca_c3D3Tb8s-TpL%m( z+0o!O#m+{h@Ngk74Ei(O;9h1fp zosM0R)=|2F-A5yDHa)w5X1wBelEvx2i-cDSXUvQH`HOAz*&J44?d&pLBQxJ%W_pw} zxkQ$@jpRA4luXo@u+f$xIKidklBFy`r873AV+ExLDJ5Q8r9BvB?eb-+c4a%^Wr-uD zjCN@m8H^up!*g5VSx3nq%QH$wGV*Rpa`el^kIDnn$~T!SR^%&EY%7ZK%C`o~V{ua{?SVt(8|D(T3mHXf-S)2qhBs4?KF&Z|qi_O5xNU3QjHj0Uek+}4a1)vS3J z0|vEd2E0g$<>ubdt5!-J1MfT5)bIM_PctbAqiBfRNJ+_w$qgte6=|q_NNHAy=*TG< zuxOYJ4Dl7oS&k7D970iSqm<8lh+u6Ly!IyC$F&0Ff*ZYWl4 zaSdt-s%xz>XhXeg_0DWEC5;ouYU|%?i%)OmV{7dpC#ye}?>C?y#3E_HYVSR6PfTei zW9^VtY@b3Lf0`Sm8a41-HlP?^ZJV@j+rp|%_UX91?C`VijO6Y-xvSZ2tMw)Sf?D4} zGTnJ?Uvp00(uS4bf7i}c(YY`2#V@eaB8T<7zk(&v0Cy4#GOE0 zss@`w*b$#}l&A`oJ{hzVE_%Gg+IP=V8c?JdP0y0Ge>YTONK(d5(01Pi|4JV3OW2sI zDxy1zQa4<=I1CGyGf5cfz$Ta!9{G~hRZ&Tpy04NRK5X|D7AXAM@#PSIutKv^Z}EMv zk5H_Z1EI%jWiRwmn|9dRJ#761=DRpHYe@L`5Bw&J@J_gYK8tWs339GERu?@M6b*42 z@Vd?#4XG;#rMHy5Ko5X`&G;?Rx+4oBTF~;>v z6=~BOVLdg)_lHwG9K8^sC-SItDVv!$dBY0H`0R z7VM_BtdYMOZnUU}t0(d?1O;cl&@pWIYY6BfWajIN|K?Q9>2P#BECwOIT1O1T#;>L- zH!PnvcV-jTYlVLfg>aq@s!>i3aI64%;h?VYQRNBy{8^%*CI0QDF^_l1-GJ(T_v#v1 z`}pKqN6XkL@r2)7qil537?`=yx&yJtm^9>fHY^TUyz_(Mi;{PbH4{z{Ab<0HQ3`0B zzT<~^{i=fDI`xp|kUeA%{aK@~d?30I(fbRRO~=sH*8YZ`17Hl*L@Wpb5hp_8CmUx~ zM9)MAJkubJA{hMD+jvwPg2y{sxI66cw-o9&WeH{*l>M9DA)_R0gKD>>9Vc4v2JW$X zG;;{FRaOriAtZ3vzeCUBuBPvMUptYBaW1Bhw;^CBy-sR7m@dJuAKCH+%&mGvm9rtj zX^w4zn&XTpIUbghw-;m#`D>PI!~SiSO$~(K?|-2`BIw+=5^a&nAxevfDa4X`Rc{t{ zlBu5^)Tt2AC?EwoE8{u)(;6HP93T779cbsTJhqCFO;`wIwVhM6*!JbzlIg4ym{ScJuzStg|;R@^WqS^0}F9+MZlt*ls?@ zRk8Ja`G8$Dn*EuuJ+G!cKLNmlGEpi55#v(+ufQ|!I)0pSFNOcvMa8n^H~is+_jcbF zZ<_W{@^=?y154(m6Ym`j=41+RMiQT6{M?r*=o&Tqf=@Py7x-n!-=wAoad|8IW+e3* z;QHqO@CG#a)_#2iCEs~<(EBMdfcpaTXZWJ*<e^PI83JGUSQT;>e(bRu9q6qO?|F{R=AfA z(@+t?1hU%WA`eW%6w_7}Lke{JKk0N3GLmoz3GQfU7%qn-F1UMZ0Kf(KcSr!bZgw(( z?|>=Kj#L~Hi{^%Ipk#kM9wXO373vU(7XpP$^IsKenGAxmS4GO%qM>A3N1Em6I{GI! zwdLyZe-{do9~TO%$=67(fXm?SdZI~8hYK#*iH4_(MA77?)e@vn$>VWukYpt=Rr$?n z>V7h7^v6(&rHqj9%v75^vsp%(mWT~ZMx8;(`PMoGv^__5-i)rriVuGrFu-}bMv1vl zU#2q3feONKDEQt5@Z(=djgo+c$GAw#EqBMW#loqKpst7WRVIVquI&0MLG^4`N{}ag ze7zk!?c+pSIw5bU2J$Nwpi$u*Pg*^Py4qz3Vb}}&{n0T5zb9C$Fr~S=^Gh{UMYh10 z$h6#o22Vw9Ffq>`v9aePHfC=ah2olGnubgPP_vM5R=FOv#auisKbZg)(B5VRC#5G%~Z6>qYY~}v6HTW}NNKO|{-Rg`S$1cyw42Fl01O?NG z2H4a}`8x{+hv!=&0{8R`TWj$7D#HiVSJ-3fj2GWD?~t{~w}bab zpT$z+MbESyhqccP(v{rry>)dMEr?LsW{#`C+4rTJL?4lii^rrIG71cWPSeuGHYY-9 zp{z(igVfuAf)>B(uY1Eq`0nlDBN}9{EE7e&q4Ar?_|Ab!vMtbLy$NBRKi2P?Jx+Tc z{Cv)RI_|&11D2%17=Md*4Nr)@`ut`ZE0PvW<6H`T0=vDSGqp<`_=UotYXe{<)uJ$( zf{h)|`7$qB0=b6b zWI+zXIK^os{6fAo2{Pl?VZ422aXqP0RES6qk)*FrZ5zr|#>+e>c{WO)sFwp-BgPZR zUFAqq<$>)-G+~0YfaQFKe%WD|ILfwmCy6YN_Umvf>5qN&sj??!7)D1(Gwyoo4DOAA_Zn5+z6J?ratmh?Ccvhug^g!sp+l~ncV zxO;Vp7`FQMT#(OYTFS9#(<@TVd%U$G(hhnkz;b*dm#k6!ho&rgPB&ZG+~v2a@jrH- zl_2nx`Zb@@W@3H4yGEC>5Vd@V#Ikm%5;3wMv*T7rK6FB*-lk8hp0-|@@Sh|PT{Po1outQ}j#QB*2t zmeHL$(V#~4xopBNLt}I^sbq)XP|klvBmc=fix96}P<)2w*-cW}Q==n|;a$zL@ATzb zyH;v-WCImW$;FyK?J`=uXX?VV1gv=3;-@kehN_aQ5(E;s7)Vfp0xDov|q{OC<7zL*t=uy91iz9In=GPSmv2|ID2^+Dh00LALn2_i3Zc zUr0{ns?{!n_BK9Lc*kukZRn-!+YiaUWz^4>hhK%gO`@^3WYJk3(HVF9IU& zV$7M=FKo?|dedsa_b)m<+4v8gURSab_*4rw?df{EJTSV%o?& zR;c3;tQjGX*pQ|9tySYvuNaO`v?KfeDcy6-h*GWK29Aspx3NY+36xEA+7 zGF&h+!s%V1Nzs!?8Lzp|q9>Iam{_^Ilw5ybu>|;=89a z@$308E$t^}W}iJ{k1>11x2u-D`?!!_5b-e=`R7By%hW;FX^e=grdJJP_OEUPp`o+;U z7#SB=S~6!{LZ;mB{@lM}*cKNZj@^TN^h@;dxqtur*LnqGP5Y^5)K859*)6d@Qe7cz zVq_Ry6(n8vkJp0@x=;$msf4=1TDvgkx>7Q`a7MduP$c4S#ov*2L;85%N_7*^*FD$h zCVJQH43j|e=_W0d_+#Ep*4IrTT}yJpL3!0p&0a%}(nCWp`E#p#>!@o`p$E(+!DZJ& zHe(Z=82pmN<0M#@A%@jcQ3?RawL}CVz`GMiy$~2f1 zH%hre`wOMM2y0BhQa>v^K#C^4H@Q^G21zwPO@JZnWdbqM<@g!bw!lMTJzJ7O)yE?3oesD^PYm;uWzs{LuU7A08F0}&Xw|( zU?6brOQ2~A;GDul`;zdM!ak6}0Ru3qlcoJM6y+P6PG9r9EG-H{6n;Sx=#Xpuog^MN z9p8@npe62J_k(RTsh%cJX5la_>P6&9CwMLs*dWit&d)W(h#QXTkbC)| zsp!4H3?TVJ(t&37d}|s7o9+)Tmct{SG;nx+#B-&mu8KXH(UT~--Pj^Qc_5Vtd<0#& zVxTi|(DR{Tc5o;=m<x}qq6@qr4!|YR+)?V@8DHP&I%%)kq{uMF22?QR7Nm0$DB!Bz8EPNM%Ih**9H;@g zB0#sO1|xGjsR-c8Jk}iDn46%&Q&tQd?S%+`ddFx@KLvD^*a%`E8)e%C!R-ZAfT?0& zqu4u19&s|swxhC)sp=_6Ew98F)x`wZjQa#pKXT{0Zt90R#Slnf0A?PD73v@fMV)!2 z@O29NK>!=4g<`($k2Ej!yjm2}Ov4yI6>kMCko8>b*rmyiPeU@*xvXo$!F-8M* zOhc%nUv#Zf@F$goTdl~?S!PsC0p7VG+PP_^IjN2!*@sFxKTXn*Ii*TXStHGX4|84Z zbMIH@B91giNaxe;HH%rbiZHc$73K+q<_!(C)JEqB?X|G{v_6*4pATtqX3d{P&l~Wn zldNhL^r)EbY6uhdnDZ`#-_3J!^t=w$1~e9|s+z4i8f^L(9NcPbixy%&Y2(c;I1}pp z*jjKpRr^4$y{E9qW3(v#upni>$P%--;;kc@xk%HYqkO7mg&1ALK3(j)T|6k)aUD+x zs2U0+d>)Ld9Jo64Xkzp2MFtH)5doKvL!?m_Q6xqiWE zcAnKjAxFzcE&a#je90+qF{(sGm3H|qZ{@sr^-t}pHQt&c@j4NmDmnuc;nmZxtqrGQ zjWQawA`+!BD;Y_v&sDu`)RBgUWnGY>1X^OCb}JoDo$ zOClo6{o;$C4OXp;3i6Cz8yS2ZUmFNoRb5?s_H%8WcXq??#ZLC;O(WsG4(Z)w-u-!@ zLsX`tHMIj?V~u3~t6SqdXQxKzRWB};4X+-Iv!Lrnb|z|C>pzX)zs3iD zSMl5u3f_lu+$Hlo>$Q{LRyH#3Vdqp{yC`@H$ss3vxb zCu0<)SlE=yHY46PBbnHwmW`*muA}ASr61sDe2rFJu>}UaD+K6`RUD;TKxaP)ONnY_J3eTQYs!DLu7R zf7r<i*2Aw4f@L}58`YB< zITOCMe@KC)G?FJbYNQddrEBYCTI*!F>!gP1WT)ul66po=9kwIcow3@P>>lPn!OSqO zDrB@SBHETFvMV)S`M9T9@t&g?O|Q~gt6H0*N>-$V(Xg&sx5ila(>J~PZ`S3qHf7gl zjT074jJD0O$8$2r;T^~D@#6@sV^QSe2CBs_B8N)x-EKaI?(3>v?GtCWrhfMm2g2RK z6bD+Rli@}ON{5rt1qX`glkw{lqRJD*B+;qMr~~hhCapc)xwGSGBS%$7$9WZpStm!V zl+(p;$LSHL<%W1ml#shT^(PTkv1$=$5B23FTaXEuuGhOSR{bDZ8O zo+T7JtxY&>$U5y^8|J;`v2~gLsFbC z!bt+b=m8l1aLinbU&a@Ry>lm_6`j0`z~6!B;i&IvhMG3vf+3gqsV-zpmlAGzK~hq@ z4oG}TV9Dpw(wYcq+2?Sfv0jmrULp(^FcTR6DL^2`enABTnApyZNpzFi4KAYi8ZLB4 zu>Ox$4p6^;ivj+@{Zs=KN1<}nr}b`%&_!lOpkERXPWk0Kl|P)!-}2J>tk9sf7)!0l zqBZcqH3}ZULVd{^=Tg9VKJ+M+r-;e;k>Dhq=P(!ITAW9zth9cm;t$_cbP){CGMX#A zI4Nkt0=`|~YQalaGdmrp7eCjZws##(zUw*Ja33N;NItfKCj%k zq<;(k5rXRm%?QKQ4{lVrL!aA-Hj>-|zrEOTzULCA#9{};Y08fhz&{8Nhp2jnHN8uI z(Vy8s5+HM z3-8myNfg3J0t!uTllDnNM&r@ig>}vE>n3j_&r7qzvjl44qRw~00E9mRjL<>{M&rO^ zUwpKmxnEZ(bYhJ5(TsLaV`b<0w7v92n!F2y-=tEDq*C9-aow{O`sQGOW-)*g3_vMQ zEfj*!;{}G1!q@%5n@ot(1&?eDs_f?@Uw(~tJq7m6z*FJi={P^slB~KY5q~k-rNj;( zPb5POzPSI;aGqUbpk#;<@X~a8{<-o^xO`y1A0Q3+ro{i?f75Bt|4pZpKDxw;qmxMy zT;)v%b}^DIa$)DA(?Vj>IAO%Q2z*UbZ1iZBm%I1} zF*%i{N;dmYH}MK3(6^GfkzUzItEq+$pd(G%NcTcU2mfklRfksS=BycRg-Vv@M_kf) zOfyX~pKFOkf85p(mQTFSfn~w?&z$Z(k2i;!Vk1D8p_YL8b92uM?&@wrkYNW|JY63q zk}N8pKb4G098CAv;tL?Hj<^>CO?F2fj&ys13O6y4V?$6 z%O0Vy3kq;okl5)$Md}78L?cbxe2g;CO52f9>N6Uu-Bdh?0HZ5mgom74a__?Itn~mri8-ZQvSE8JI>Af8-`}wa*n-AzcVz&;9JaBHC$|_Vi4{JtMv`#)X8Q&c= zuR2wn9bR_|6@Eb$YuBwD{H2eK+IQTC-(-i02o;BHl&hhni@t$$QOj|o5^CwX$RGi7 zVt&B<)1&|-EUqa4`H3(D(Ljc)8UR9{Vr#i<+JALF(?h*4_$Tl4V}+WF4e?1KHnO1N zHw&uw7M;mWY?1k zc^{Ian_<9I07}5fg8B2FP&S%EEX$t%TBcK8j*(!_!^Lq3Kqfy3kd-d|6a#D^kw9Jn zJkC9dMYU|t=Z26zgL~0GAl`&E*V6#(rDfP7&QPi=HSkNhB)qMN$ldRjs@l!%d!d)! z(OEfk%JLA3x05~_Lc3@fczr)VpZgUhQ9qn839x+sE}|+N8`fh=Eu(!LLm)2YQHT54bt^{X-`TG4ZjqB$M5k9W4m?Tpv3|e{f?wRnE zd#D;unOu=`eO|}?!Ca3X1D(3aaPd7g z3X!f@T!I9YvIYnc(L+jq*I~yBsPM%)3--jT)0GP_Loy*W!--G4GbG>kN9sOjQf$#x zjv>`bIAh-?-5-{HfhS#zH2fO4_8JtfpNk8ix6uy7oatb6l<`vtmYoxy$4PdpMN`9& z*6o?|c_K}(^O;EjV2vjbmqrb?EHDm~QcpyK@`M?ct$6u;mr~2av zd0swuDKCMKtAW`GdhCpUYxKBwNc*^UXrKoq5K;7@Ld*cQQ_KWH!-c$At#K3NV*{Ts zzSjsiPJnsn=u-T{iI8dT}{X6$Z;E^1tjiF8CIqg}fYQ;T0=Dtvj?D2XNq~ zUj?SLTjxbCwa)A_M9U=TY!5iq281?2Qgdy{wt%#GfbrZGKOo2l$A-=TBw|cTKaH{@ zbqvh_8)Dk8RW8xpiWZko3fn>a&n8tXz5%t1&@&vs7sR>_Or>_$wsE?rV(Y@e+6@>k z75+LOb~goyTH|G$tvVvMM2IJA6vKMm87kH1_QpnBmM)ziuQ3Ms3XFwoc4H5OS0_3Ke7_UBHd|wA%rwzEpo_+EU(IA`4o8aSr z8*FBjC<-;>bQuF*uHV+`;2avQ{Ax^f=T4w8w|^%^KKEk6rA-mX8Hy#a z{>;YBF|Nuv7*4Kmw6|p;7&T*~*z$#7UFr3n(l(BVE;P-HL+i~38%35z>o8wS2lW%c z8Xcf_LOaDu6o|LA7j9VWgbB8so|@AM?E2EnwIE;YBw7265TgTa_GiaGk;unxa$Zal zbN&o7ke2#6?5JDe=#tDfD?akJcmYS<5b+ybe1sAb=AM^eK7YFN>K($zOpeTDvNNkm zcK=qKv+^p)`JU%Ra^=vr-dkd|4)){;gjy5A|aj z8kC^;p72!kch-LU1;d9afSzX^vW$CTazOX!pLG+l|43X##*u((Ehzy=pe%vJYQF0I zF!h1o{6X@!X|I*F{2Yl=V<2fby>K`KfY#VxqK*>qiQ%Pc#k}p9ZG|-2~m0VFs%e;jr5o4p9piX$vh1DkR+gHs>wem37k2 zO->>d7THafPMY^$71^w5*zrQx(Ettvls6}hcfcZ2d3$S&PDC9=G%QJEZ(IB4M=_)c zQ8ddXY!iYksY|pkVo~n#FJs;UiIrkl2 zVx`3X4lRj#wQ0~Z53bW{yBv=iP z{uRMOc4+j>NW zI$^ugg$xF)VFscWdOcQ#JQhYNh%qAtbK}mU%_;_yat7qvT@%_&jVIQ#;9|2LY;(rq zK6Xa!v)wxhMj1gy3rut?ZN?6>;!!zk3p++1!@bu**5+@EUzc0jq74{Q72A+8+RiB0 zQ?1(PFg_o#HmTmTUfDBgw6?2fbeh>yzGc)s*>gmC?R;GvLBeD(!056-hr(OpD$4Xu zw&a}(lbd#ln=zBS^=ntOVt4lvkM~TTVI`iiOkPLUUO7zO#U;+#wT_DbHLG5KpVS^s1TKr0PEI`APX4WwcYVk`~fWDe#l4Hjh%ku42TVGh+U z4K-#Cvn~yDVh(pN4S&xJM}(EaW0@mTN+WWZBa2J_AL#Tq=GeXePN&P_pZwo+`U59R zBH#a^(<&^<+W)50DNZb@f9dqUE7bp?)9ih+m3=Dg{o0lN|39MBpE=eRs@A@7eA}z~ zcE+)OUA2zj*g&h^c*40!RJ}>Xxy4w$#mTwNSG_IDxg%S>qr$nXUA=3}xo2Iy=ft`1 zUcLXG^B}DHAeQqmrTQ?3^QgG`sG9S*vHG}^^JJjMVRz56D(zZJ+O0zCMEY5O2IxNWxV?8P@OtCvE zD=jWRDz9ujI;ud_4zM2oM=SqFEB}9}mC44UH6=cZs|UacvHL*sV{{V~P>A%FQUuD4 zIY2@xFA|v$_vMELI@a&c$a_j5^v}%zZ7vAWMkOk`3uuA_3ei9VlF|NZWj%SWGj4Cc zxk8A*A@8f}|4o#+kX4m}DPX{G<-dsX(Fc=&EKIORaS$n_FS(W-&Tfk_p;@h-Fxy_V zSm>ebXQlBEOQv{a$rL;ZGl)WZ5t>JrtX7}f*iO$0TUH6^fUyR(OW?c22Mcat$D&Mw zs6ZP7;Y88}{2xC)FJmFHCn7LG4~>L^YJ;;bO(T>~0-vI71yiZ2p)mKSE9f1mbN0OZ zctijQiP_b}i&_}EK3+KSrviSJHRjTT{xL##~pY2%gFFGiOqyxnbj+bAtLgt8|yt{X~~tL$Ep zuY8M1X_#I{*oHAySC2{^+rx;mqTd7I74h0()=xT5=@Fr>MR?^bG2ND+){v_j}5S>C-~FJY|%v&Y~qi5 z8KgR?W-ABjkfniMYmi7Kf~p{58fkNA0#XxGQxFaO!U9mhf%s0^wA%I<98jg3SmIAo z$Yh>fM!F8-Gs0^}g5n5h1Xp#pLUhh=7BFljCl;pcq+j6W0@*wDF3Ljy$%h%SoP^pM z-ZK>3O!@(9sfm?Zhn&Yy@r2W_iEkY7FE%QHClN1z5z(t5oK2nzM2W#@=Hhpxl zsg{@K4!k>$pUW0VJ8A@XbCiA4$Aue`(1TnoXklCY$i-?1U!#JMSEDE)p7eKC6VN22}ZlubDOvzE(d6?kWnO1zMz*Qmu%_tVx5G~wtQs47l?X6lOO z(o_0UDN4U?`;c2J-Y;V1=WV?w&#uX9MJ70fwB~Y&nJu&O_?W+ChHSlop=jQbT69nnMq2L$0{^37$0(o^qi~QxLfJRKNJ)f4=MHso?McnTCkDH+mH5OQu7G8q^`(G$`}8+y7KG64!D zmkezw2t76n9S;m8>j`b54LjTn9Rr1ZVhBEv3_CCj8x0I=EehN33ESTc8v%uPGlcI+ zhVQuuR{RJLAc05rhX0m;*O|i++neD*&G6_Y_?uujZ)x~0Qp9FHJk~QJEiJ$`d z0rij>J)IsyfB~z88ON6XDFy>>1T($>J>fDvu^uxi20eKhJtYe>^)ele7d_n#6GIst zlRQ1kFcX_sOykT4ZzM$GSV?pVZK9`nqI7t4eNdu%Pa>&YV)0huJKCgYl1T#QNiIQ2 z>;*|#rHO3dqziCzVNa5iWHO6+vH)pJWl(YvQ}WlI41xP8jk|{F>NwwxFuM1LW zm{an5QVtGMl95u`BvTd3^zhA6C74rl3sPC@^}L2t6Sq=R7}NYBQt>3x^lZ|y3erL& zQV6?Ykj*q(aC)_5I>TTZ08M`ynC@khUbU5eR+64|2r1Ar${(JX>LeCE;U--chcNH!@1=VY)GxSEG~KZ@_B6-`C!{T*5*7k^L$89 zeqTghf?hrzCNtR)lt$q-!BG;OwKq5S-p6-nW_I8F|cRC1uQ|+=rz;lBKUO%N&tPtzSNZg)*It(rEKCq^+{la+sfj zDtasIqe6LsU|H5kK?Q5U{O|JGTSMiD%u?^dVpd4QNNG7zxfgCl=WRs^Z$-6U#hF({ zra)zD25WmHao0-aM5JC%WO<2xX{L9%C}uHNeWgl%m5*A+kV2JJWaXk=sn~M)PIr}e zLdB+CMcGQRUsB~mL|MH}bp&&b$nUDNk?JZK|Al_y^-9zgE7ieD#c#o?a=S{j)f$PL zniK9?h0R)z&8of?2x?UAO=OkKaP2@*-4BHdG=ma+pGr&vRtPyUgAW0dA~D`w9hMrR z?zFX<3=cI4$}p3PT7&6b%>Ec?xP>dgUc zEqQ6pxppn2EjGB#uUnfq4;u=|TjDco%rjdxd>C>JYKqz#-?TN93$;m(wq{|) zH;qzaDz>%XRW{zWy6RWgvDLrLY-7f3e?QY|UDq~1PCn8`GU?MYwpJ# zR4lc3!&~|)oWHU)Z;r-q+f$ASbu3P|cC_gsfRD9EPOaO877C2?QJnVM-nB_u0I@ zk&I&$A{0eZhD1UX`0`@}io%34S%i>cG5iIwdn*U602pM-Q}~BDVT$N6G7*@f@4}~# zoNXZVpaT?PA@tGWE>yyC-xJBD9~9p&x^J%E4iniUG{f#gVs9@OY)9xyNP$eHY*M5y z&^(-o2X%elqt{s%gh+ZT4OmR~aY_u!n+>a8_G#tYJmTfpN4(q{KuGKZKnLI54-^WI zAk)}_x?Zuc51R)Lv(b#oN{lM!4{HW`cxc)a3=TyK4|cK#+BV20I1D71jYeUPehD0V z+}G7eaJxzJD_4RPQ;f}G18dig#Fb;FW8?YVW0IhW)aU`Uu{T>gZwh<|MO;TX_*`Py zou8bH_m2&p*^hC^Onv6k}V}Xj0b!yqtV~@gnLSm z?MK9BIG*s!UwBq|&37thIw5Gs~*RCQDpd`?z zBQHS9~AF3Yj6kpyOuvqU`pAl_jT$4#qbW2+pStIY#ofmv{tvKwdvJXp2boc~qSWko$u z_i3{(cyl)5ehGvVK&%`HG7VhGUU1x8Lrz%c|Frz(#OaYR|FR}NGQ!80z&|kxI^gI{ zshV@hMt>6na}nA2G2qfC4MEF+#a%2ubt1>=#K(C*`8B%(SJZX31XvJ;@OrqSR>P<} ziRd`-d2{d?s3Mr&lgL+X30wS=Uv?fxllb;8#SE(^dhrBb`8~dX3bjw=0-or4Pc)=Y z1VgTR2imy}Ki)MO`bs*s?y$KoN$G*Y?e*!eV%`DO?r7oc#T^gM-wxilt-UeZ155ZI zkj;Gf=}?`;F+^3-*3kBI$+tdV?(pI6{$kw^p57iC*#AQjpqGavW^wR3|9~U^ke_{z z)^Iu23GXjt?ph}4gn|CmUw-5Z|LQMy=_9xb!}*_TF9@@A*) zoX(!SZ$$JE@FYDb#e=l}TVAiq%HTJ`=D!K%>DjZsuP0zZWE4$D(&?PBcBkf&(R$-c z%fFTx@O-q)i|+|Fs)@dJqN8n~T^EsVzsI{X9-g1TzhE%ANeopbzZTH38cd@K)lGA29tXBT1YrSB& zXJyK0jWD$4eP{g_GG9$J`uUEcV7}-A*&`< z(J@{hs`o;zJy5%cqpydJ=vOPTxA|j1>i9r1J%pm}Ynfwf$HemlD+G{SheGNcOQLIhD#ijz( zmrt)naT~=}!ePWU{z^)}D%9?Fa_%G(oH$?p0CBl!J)7cuztLxMTh!qCk5(oIA#p+Y zyG#KrfYTIe>fGO@u0e#BX3nZy6!=f*S$#+D10`{abh`SkLJEgbX9%h5u6#PLBa*78 z8dC}urR&jiunZI>Pn>Rpoovp6s6fUGu*sO)PzxkrC8!ebF44rmcY6O>9{)tQ-fBEY zCR3Y3uFig~Gn8EC>}#63TbP65;_hS^~-@oyh%>r?-2jpy*pyqM0 z$l?g*UQ^_58Ivx=g&ashjh+6gbIeEoG4$+-(^x&cn4iLdMY%)5Ob+18LK)EW+UKFf zUuoI^ZaA_OoEf>@7qorpaS=;EWVh61CKVp4F9drBo;F2WGSNtV`51ckPTODp5>9P` z5N{(kLQgwa`z6kgwd#9rUwDXTz}yx0jf**U=*b-%HCP`g%M0$Dl@BEqE#D-71*k*C z0>A#?lE#(5c6pqW=*mTZ#bmb?f6&FY#pc1L{TNL|dLw>Ou5n#^2{ZL^$LkcJ~377iXkpg0iukLavux{p0vkj=-S{U4N(k%=!-t# zh?ChlBW9uGl02YfO(Jy$X_hJ!f@-l{SV9;MH<^?Y$c24YJZ?f49K%aWc@Pq+dI1g% zrBeOB*t^T7IJYoR(~URo?ydoX1qjl(ySux)1PGqSH4xlgf&>BtY1|3!?(QK#NM|~G z&pC7E!&J?;k=p;^eXCZj^<2;WB{E7G=sgXRWBkakp(Mk<@N@kwVXNc`w|%U13eSkf z7K_e3y*y^>{m`gb(>#sx+gS^(*KW(WA9g{-7K9Pn*Ir6G6{0md56Xx%2~qPS{0su$ zE`TZ#^Y?^pNv9YzqlqD2pc#UE$^}Emqq47}4rhaJ%)0cu{KW9jsv6 zkjRGz2mzFsr@bG-f{rERaS1joiYfr+5%6RpmV<@5#e-^QX(p+9qRuPVNs@UaMqe!k zO{svr05tt;y(9_@KwlCAR2r;%O%=-$8Y6k})4D8^h}EXNAbOQPMCs7e{H=Yni-EJ- zLid#l!4E+DOyVZ)`_dviv*7Br57dqeGTInmQEU5fY(!wK$wRp4Qp^Q1UK9-w z4uudLK?;4|{t!3F5rlx-i<%AzM{WS2Dw)GyOfcXuaKP$0`u*&R0Cd*#A~-gH1P+62 z(<7@&V0G_eCI%kUxru7T3O=|E9>f_P1w*sDCbr{d`D^MN+B{UqVbEXRO6 zo90Ej&n$zQ@su!|uDQ3zTChCIGIOE z=xaM^sjCYjWMk;=HG7oi#|rO5-mA3#(z$JO z8(d+iopC_ycmQ|4MDo&vw(VTLM)i^C4~KlwCeH%h^+WNqR5eMHfsn^J>ObZcs_yVI zxd56%INVAQGS59dZmu~J*QZ`T-)S1^(h6}T;aT>W^ipOQ1%8dwfzWzwM%V_gUzVqu zpQh%M^yw;9N_4gI97jtSSP)rrQD^Tjw%Zt+&HA*RHEn?<2EdbaM)2fNA9_ zzaM9KaOBJ7m>CUayyq5v+4_T~X^jbaYGw*-1|yDljUV|*ZC)$Ansg=N&(v|Y6J^Jr zNnF$}|&}xzNT51(W>5b;Zh~I207II8s&50_T#{4hbZyuU@*Ez zS(WjA$Z^}`!I@Xlucd8OVu1-AM&Fbgle1Lajtx;#KPz_AVO`?R1KO(qgH+QWr!$=w zNC$pLW2URK#NA4%SHVJY+W$i^{?*FYVT8FB zSbi|AjO+nUgWs7y$Q)pny4=3m z`2=8Exzn2IC&8!+Oe>d(9NcRDqm?rZep$cztCf+PjZ`RLT6tx{PK+XR=HJk>1?gSR zfry>(($kl#7O(stFs=OU>%XDrE+T&HRaoem&l^3@UKXa6KbhRaLeCD0as0C%|AwBs zW|iFj(aL;#6#r;tmy7#4@<)YX&MaQ#5muj5ycs}D>o zZ&Y7+{0%(^^sH_EJY?wl(d8EMj%4c(vY}jHajH z%$8mJ;m2|==t6?s`d-@QqmC5RBb7ODUqdutREO#~{f*8J`-k?gMy~T&!|R7$_3gT5 zAzu07Z;wl(PwvU!>{TrB2{ zgMSu(jRHa}PSV>7T#Z=&@%h6Br_Tue>VlXbsT?Ib@r@$6&0o%JNehOQte=Sa1GzSY z(OG*r2+P1x&a~GC%t8CC!S|T@12i@E`K}LE;ZgV7H`tj$#{nkZZ%Lr$v|7sryD6jK zD8Ajh;t#*S#Bs*OP3%U;xxJiO^}MtB(;0{i7b*Fx>8Hr!22Cgm`+h)Akl0Zt@;iNb zLVMbmJCjKFQ54a;7PZrCxn6wqDu7%iHi&)%fEOkB?e=RA^vzNy5iu#1Jl__h8e0DE zpV)QJ2N7X$KuLx>>Q8L_J#hQNzay{>!4Xj;h}e(fB<+kF^bjClONLd~vpEJ}z3`bA zgt`x6F9C71gHTF)KutYZd=k}cz3&x!@vSBD#>IGzdWq5{s@6aRalNGJT_JP5l=H78 z_IjxiC4>8WG12?z`1;W9dg-B9sW*z0hAKXJhy__p;fZ73?DquK8k*ld})FFO&gfwv?7j|K6j!0?w($t7CPS38SbT+OG2}klglCa5FlFS|wB1iPL${)3rXn|EyH6s3@0G1k1$qeHjV*G8#5bOJztv z9f&V|ssQb#DURYU{!B48UOQndHTp0%kyr?)FOeRL7@93I5x-AZa}P{HR0vZq0hrTo z_|rEw$_`{twnR)W=hBVU)*a<4gjUHduuoQEsD$a4%CeRG31d*e1I9Lz#LtivVep&i+2Z>)F%zk&&JfqX17oF?4o8@^W#iXS57&G_V zQ0q-ztw33?a9NX(jG{=(-1V(i?c5yeo>mjZy!b+eBxMRnR7RFiNKR({LnM!kD5YZF zlvKjJbJM&|DolURcfmwaxVAj`LIv7_8d9iM0=7=@oF#{jcGtW@@WPO#j%v8ht3hqX zyoHx>o!`|u(!X`A*BAQHbl1rijaqbS-Yy!PE&O8BeG|OsXRO;3yU0|f%ht8n($VK~ zpo@{CY2DK1kXP=?xa7IOt%kJZ?y~sIv*hcu1btrg9#rhww(4Lg8_K9~k&CWh_yhCTZRJ~@V@ovQ(LtKQ>=MCXPCk%k-_tCc!) z`M(SuF^!sh;+pvvzAP*^>Z}!d8u3{fbygdpcCHnT8D&MSwI$SayR>$x2tt0WaWbx3 z;~TdquKzMJE`MvBm9y6ODsE_Ut|HiY)TMtUN@8-7cWguKJE8XYpmFxDG1Ob9 zyeR8}%i1`l3CL%|!pa0Wc%y{P1TSGDw`*gyC379Kbwx&V>%b&qeS?;8lR{*3hhMw- zm8lSd>GHcxe&@}H9Mglc^3%ztW2BD#mQ8(8{c{`Mi;p5VWm4Bsf_E32zsyZ9eFSb9 zMSiw0Ju;d+sF=Mj*@}?b;!WFXU)!=f-CCI3dXB2Q>M|R^G>7x8htFvF)1`$ZYffQg zHWR!JyDeg|+J0SY4%cl?IBu@zvyEyxj~&v2soRUCYK8}8AW+rDzceLek|5F*Cebw| z?q(&OG9^DWAyXB{B@&<{5~hxZd_k~;Pc(-P?yOQ;uB4meOx4pLOpBj-LrqBZ%% zK0}Rl^qKYSlePc5eWeFpx)3YPMTo{?n~Fe_I;WuCVIQNcjg0PryOoV^r%g_jO>y-B z{P}@_>6-C_js;PZ3G|KC)Vi4|zjgN;+g2%?Ljg-peY~^CLwa$(_ z(2vD_+lg`>zoUu^Gc|oDYtKG)RHtP>B6^&*afBat?DEb2>i1!ctG(c!efIBTwee$T za)+Oh$Fb1)R3gnfEeA)Z6ZVCpy6_qqJ!-Ej@*a#998`yD%-5X zlXN;q6Mjb{)6){u*7D2wJYPq?Xh+`K)7Y-lDrC-ra^XVPtpnv~Jgv}jLO67Ki+)Zz=Y;>tnNh(x z!F9*a=X{tGtv~8~)YqA_^n6@kDXRZ`l2dQ=@ces*By=44V#ZW*lIdbjSMs~;#loh< zj4cc)znN2At&X+{th?w<+*uJ=FHJaLNWZ8&wAsXR-4bZ)e>mD;y43y6yN9K>p~`!B zIkzd$zt!rvpMSa2eW^F((op7d%%pTOqw0Z^S>Ek(V|sPD>6&ik zb|v8aGsNiD)a}Qj{x4Uta2L0`sjJ<@tHr^q-^lI=a&FtYu83;3JF3^GA(wD|LccHF zptjkXp<+}9v|*njqZ*>JUjA3Sj93kEk01%dLq?PBTVfr{pen7@~K#n1maOpZR z^ahaZp`P!CDmP1Emz@l&Ez5TqEn|oy-cWtT_@92+NZU(*82ILhLa^Wl;XN7fqq^I< zIxXDL+RES^B7mOQi{TBBCW)QQj;xXXZS%Vs0Lix|azz`iW}-b#tG6jT?voc<24;{XK42ErZ(na1?5cVN$7%n@@Y$ec8&l?qA>NcHZux z1NO&flI$PE-unt6`AL>Jku4+Tg~EGulo_F5X$np!ZTly^XNmuC#Z)0KwL%w$Go}2R z2!KP+gBRn69qNw_@RswJIP%G~7Kv~du||6akUYoy1cqP1MGXHSV)J=&Er4qfiO>(H z{sE5t`{WLM%6SGj^?;L@f7sgvWbTWAHPYLYN-+t6 zxk~~0Z#4NnkVWu;)f=9tNiYjp5|RKf0Gyx(vw(Nhy=54oXBHC$Gh>&p!POk7RXyO( zS5HurKTnv|5P*Bvf|F?HRzjlNuk;VTJ$Bhb(=lQsK}jRYQjKCs?!V(ggNL}Tzxxq< z@y>0(2Tz_*Y;(m7n7vGW_8UfdUZ)Q{lzSdH4xGAr2WMA+Gm-}Y<^Uj(et0n=EBFz| zX<-c^5hKtG;=Lhi%2Nl@n_k5+KjkZhm^Cx-x*W7DMsPR6f4~1v^iQ=E?vU5W!2fgT z`S_Z40Q^tr`G#&No)iIb`uN65mV*Le!eHbvMN+GkB3X_%4 zr7*(Oo=9o5N=(5`qw;U{UY)C)Q)QBmz#3+?Ld++LDK1P*!A8s{jftjJN#)k4Ckkrw z*IyVJt*3O5MlO{^%<&4M`dz3!18nj9(UE(7bG191#>KVx`Kidt(mm)kdFZDU5{72! zHoDLnJp|84eTmRLgkWW0r5Qt72qJb@ju`h*9p%Xes zV(tDHGzSm??2{4>3)Rq?{52xDY+(~*d~E5I)=(glofcqVR4_eG98HKJ#U9CEU%Dy& zpL{Ym9X&vONtX(+PE0KKH=mqJ@tQR`O`WbvE8dFCw=@f@#r6Y{k@80b35j@y0UQd9 zn_hWt9PeQ(L33_dEOGB0WGZ-6lF)bXgd~tKhug^f5<5vUR%rn;YgS3Y`sEeNgerLl zv%*+mwkrEnLv><$7Y!WNq#HWM40@gRA$CRx-5?caB|s8~3_h7nt_E+OP408PutwG} zd~$75!w?yO$cTtwAj*T(17?|>qZqM`Ial`6;M#C(n$fZhPunLgg-wDn92}>MV)~fP z+Of-wxVoRPd_Q;p<{Un+0#L6}KyluUOe0bQ85sId6&t1j=!zV@h>{wJw1`-Q0~WH> zA*G1UfIci~XTZ=i`F!aCnuz;1{?;Ja$;gKkk_m`p_K24C<{Isy@s+tc!p|aXx^bDTWSX%pz|!5vME_ zLL`XZ(+m=5Yg-Hwq5{mJPjIE;>hNeB5D)^%b|}hnl8G}d2oA#?5S8E%c;Z3xFk9Mn z3*rvP{F0BvTbY6yZlmZNlL5D+*Zp#$7VKfM1!@ZIY4di9`o2mHU{SAY)eeQHjgLcQ za+ko+P5Ln6p!&0$xI5fGnf~0%qIOnq08r>oa~VLW#Qp$Q|~> zGz26u$O4csOmC<;gFva;JZEUwA4D32w;~2eF-_9;3h1eHoz$ow1-rv5xpiM*9DuCB zWn`NTuY`=(NEj=J_+fBa1yJy4=_9Sp*%$*KUrlY@uq^g-5`0>egDl02ZMxT zf65vTA{41(^aP~HjfX#gpGNpwf&X)iwud8r4iFVr4)Qb?nc8f4L;)6F5z+y4rqQcE zttri9>-H_rsXTtErZ@r4zdxL#fyV?${2>{U*!)smWqeFWKAIwTiVwg!087uT&JOn3 z*M&D~lgSoGH!>ksM9F}41j9epxuOA7U$aYAc^UvpL+N=Os(W}8#w#(U%lXP`joTd; zBCh!WVr8es4puqgBp>O&k=AJn^=S{DDzy*=XYmV3(k@#Le=fPO)$K=ZUWYHtg?n@q zULp-e`_gPDnn1KnhsqP8IOy;dDK&@XCBN4eJbpJ?MgM3?Tm)W+;UP zKogrhl+c)`vH~ zSpd&A<=sR%7Wf;?c4Gl*;b_kENlE8^e$4iIy8*lS^iQRz;`Jb{yNLW`NS~ppsKR7& z_y`T435yo+L8si*S7WT;tCT2mX*k&RU0X{QXjK_b*!3(Cn#;MY{j#O(VwUurbw6}x z7Rs^D-t#;lpWl+2_2Oo%6f~w|`}i5N`y$~AW9MBAtFyeZR*05xCfqcugm(NTQIFsd z{Ahw(MPP*EPGNoBonTyaSDG7_%=-D}*D`d^OCw_GjSq`Q-}dT`-}*gmnm@ERjZ%7t zn;XutqdbOGP};>42c1y-3G8}pNsr3v*ZT3}^C*6}j)%g}^Z6F2YqY?8(Zz10>{}9r zuLEGOqbQSeI;?;g%5~$y3QAfw=0J5nC7e%l`iFd9+piv=kZ!ZcqaC8oes+_`2#l`2 z$f1UA1e(=RhG2$UtcRsHs!y@CC;7$S?YiGXudA+Nl0xwaik^dTgghcuef#j`LRCtr zMVJsiY1C*jnq@R95#Du}9Uc~q`wr+;8hQ`|KZt1m%-G1I4_JDgX@hvXB;2zwE$Q?P;1-{Kpp~Q5nwFQ7e=}#X~p7k2sO7pJwk!5nIehTb%JFaC+ql z!ZsPr=43E)+7`~THX^bpo-q*%Fy;#o#|jC?{tS-h&X49n_eY&^sVynZ&LX$sxXo51 zHkxG2Bx)&R)C)k6yw3p8!_0=hj~O6n3vHEpc&EUyL8g~Nx$hH2#-rJ>!zNzq_d)B4 zA#V&-zMVe4iGJycfm~_{nqGN^UIa4z-%(LeI2t4FqH`e&P6r)iFKARGD zdO--^>Xk8HRoN!*rCGHp1Ub`~`p{g46%vwd1EKk-iG*mnsc29jF51q1d=W!&^c3MR z<00Z-936?Ph_p?9OHBqJI%pn0+YliX`?#B-y2%i`jZICx8u= zuncYEmru7gB(wF=!ds$K3YfR*>=w%u^FXDcOonv40($`sG;z*!c!9f|4_n-^bOhPE z1m%`2x4Ef4rDnSw}niIN7rXvV52=c34=)#~})vO1mk zZIt*S76{oooP>c7lRmfn4-ddY;U%NX&OYA_?vg|~=OoEBg(!Wf1b5bW2SwFf=!oAEO z^+3P8OuxR&u!GSk(3)z9(I3KSk_z27DNZz5JTRSQG?cV48#*vMJTSvJ6wNs3CSej~ zD=)>dHRmq3VpB11VzfN9u_ijSMq{v6+_N>cz4T|A@n({VwPj2_l+b3fv1PK4E_IA% zbc7#r$}V%rKX6_(bE&sg+O;(pD7S4b*WEl^dSudtuW-F&K&52%WUBDwWcCvHpIZ6I zgNgbdtz6;j%IpWz%6LajLH}rFSQsYXu9m=Vw~+Z=YsI^6<{--$pP|26Ie7EPD}>~) zR(?1Nss2YRW3hz&rK0j1{hO#vv*EC?UHxkt}Qn5EN z)j*p#*_#Dwn#I_^$ku#OWpB}~X)$GQwXJD&W&i41^EHIMExM*Hk-a^mrahm%qr9f0 zp8Z>E&9`p$&Y_ylDfX_#nyyXu?!%hyOZJ|JnjR=S1i2Q1#nDSt+e^jK$5h+L$M`gZ@=_lxV>7|KF6#KqvqXNFm=)*c$=FXEPpYDC+-!L$8=C-&i~tN5bp4KGIk+ zoJ1oPOQFzII-16!Rc$=lR5qT;Z8esw&|E&5Bj|OyKH6OIy#N$}MydFva;8K+jm>22 zOVwP3dWmA5VoUWxjefJ^##l?u(r5GjSW2bV+LdPexoVT~*1EN??t5c-N?+?YzWLvs zZj68ZywwwmfKH{{*09qL#%DL3XlvXXPNrANS8i`Q82`lUv^mkPk17Ahl>cMO|1stNe==pkI~24|2*x@D>ji>C(TgY2OJLkf6x2(S+e_BjOR?Td z72gYU%(VYH<`iD)+&;F>K92Q1&X+#!&OUk=O&Hx->(6DpRczsYrc~Bj0NY7$0>n$WB ztPewk29slG%@HyyF*F}Hh*>*?F)^fKF)V%F~pZlaH#R{haieb3PSf>LcvyE;Z`$}dEZ24oFocB%DERO)9BkdE7O$G_Y^c?&O<+A z$KN}Sbj0KREjUNo3L(0=ANf{ej2`*nI58=*@Qvrav@6y^ygMNU@dOJm1Vzq-u^BS( zJNCu{;u!iKjVOSc^|4Bksa+AAR3gBO^}zQaBKuCrTrFhDnczpzaOVr5zn@%-tjB23 zMD5FWyic-D`x9Lpq&FOsIm(k)FGiSo{V?Kb^bdwUQN}som?p;ji=hQxrma(^-*bO| z@BUrdVpb^yI;qq97ew!1jEh=L!9eslhdTqttQGAnL&B_N@0>!>toDq@)V&Avd`yUb zPF!kEjNbE2@N`Pi9JZYvXg<$(0nRQJClB*=65!+_IF>}MK0h1%G25&E!syul1xDM=EM1bX-owpn!C*A>Um0z`JeWIHOF7*QlhOQZ zp2p*8!E2?hf8)*@m;kD6MQv_?Tkm?3&?>jlswr+zznl)7xlVQ6GRem3OWj0ibP!xJ zob({!7mn`^5-YC%$mkQ8jD`T+;kGPJ*4vFCM4Wg|3%rNJ3pIJmbHl;@A4A|8LN0T6 zrpYJi^S1Xdd=rv+6O%W!i2+I6JB1fZrsOk9>_p%np>a_-A6zEZ66OJq3j`zpBLCel zuQqLqwiE3(1tT^q|K-s{#02?SELhajuijgWE{4Q!w~BhT<)M5_;O!DU_*Y2l=JO^u ztiRb@zYT7@Pw3xyb-1T;2nCe@$VC4VX`Omr4_6|CkPIKrnOM^yrTQb4&0QBpgcNfi zxeE?2Co0lwR6(s{8;|3X_Jh0Fo!hlzG||He*>~?bad1>ov${__r=|;C+Zs7n{alZj za*xWok1DAA5Gd^<1eD%@aI&cYxzLq{#65rZ(-);vcGpwc$kP){K zBnuR|X*eW(Kx8Ot8UQ(d;lzt-OQ`;QH<2RMg(xeTw^oew+B7God#@#A@WFJ=Mgl(k zS{ctgAk_nUBlLJMICG$*u}x5fn&7eh$Vrq0D?V?pq*&a(W4$^py48XyX6RrJArDaV12bI>ILkI~P zC-_UHi(yn6@+eyL^X;qWHi_p4=Vvjf2kedeVmTpTS}Xug-QHIZXKliMb6w_7*Hp4J zYWk5(3FJvwoCNoZI=JW4(bZRB)gPc4hXNu%5!3I}yp5y!(;Aq4_FHWh&;Y!qfq>8f z7#SoakVpwl1d~T@5{+HySi)DP1D_f#B@_N9Q)W~NSALW$8%z6#DQg`nXVd6a@9S$F zspg9YLlLWA+o>1JBv8q~bnOmt0>PZt;VimiiWr0|z6 zfS4PHq>Zk)iZ!hwSFs=OjLy*&giylkT!wHohY^Q9G>7qJ(U=^}`<)5lRWS!sDJ&_% zq6`!OuvCJY(O5#cc~P14-RXAGoL|e5+BsJX|BWik#e#At=txrVo#^=S6eA?Yx+Bim zM@M)o!@?}()kb4-F#w9O)+Cj1^!R~r(J?Hc#S(bPFB)>Z?_enpq=-&X+$%g!nh)S` zL}+OAYj#aHy1KUHxnj;x5+DkOB-j$b)eWFmXkja+p~V!~HjluW z8R8X3(h*jZVrIML3BECSGtXu&4oti$^*EyI{|mm}PW`XzVsRsC&v-%K|yp z5i}S-K|tfBtyPe~Iw@{wO&H3Jhi9dF-jV9L7&k;?MZ+@&Zdn6Mv%C()y+jO+#6_+K zz0s9$cN$XFi4rgic4G4~d;f{ta-dRi z+aXy74Vhz`Ab^~Mhn7$W&#=rO2+nqe-l1w^k%lZC6PA)D8Isp^scJfokDP{r#*HIX z<$+N#>hi~MxwvHZw4_%qLXK5jr+$t#pX)siYV{J@RfUn8NRQ&YiQdr_pulJE0tVv1 z$6@gq@*he`yJ<}*o@>F#y4RYdPCaI(%}#(?GGI;OiIe{YBQEoJZ6Uh=%YHolD#_6| z_>u9=oa%>fUX(&VMZDi@9c0@@oI-re zX=$c9YZ0(sE3>O%thwPW6;m#s_W5wkWXCo4Od&h z4-drP;Gg1*8xWcccYM`O>>>Pjz04g5(*Q(DDXfrbq&M3V8e2K?I8Z#gNLqJuAhkR= z)BOSAj}3&29SC7Je;rB@X^xa-nc=hgvzuI0EhLjUKt+nv9`2zb?{n& zuy@w7l`old1L(+rSR5})B2CB15`r*hDoK%EJh8tM%CEc&%B`doZL{@Hcgm9pPv#sW z*#Tnn0&(#)5dr4Y{8;|Uz&X7E-YlG$aIXbW+nz8P=cNx`BVm1~o|Ng6BOL@!7ccHW z>fRwC;e+-R4sQF%KE;f1ELYbMRHp` zN;{twm6;CRf^xM=XQXAL9pSWMG7M=Y?L1pyR4Aay#giv*LXwc*OD5u8C(bxGp12nX zc#Rbq|Jw7|_=rt!6#hrWM;&UL*K4UA!YHY!&hU)H6-zazX$yak?Pmm^UKhOMKT>@| zKhombosnY#*3JAD7k}y3cxZAX#+dbil?&3Ev+0$Z*#*M5dS`UFd2gxLZEJWH+*_mj zyZB@GZ^EhfgHC3E0<IWEDOly2|xH=?tOeu494Vm>rdd8c~Afs5o+ zUUhyOXJ%Z@3%z2#O_{-!mT%szE_C~P7Ux~KeR#K?bL88;v~lT|$+L9R?brQNbU5(m zyKN+K|L-$-*B|79c4I942j6VoBpq>V(~1X->6vO*wgw&Y_dMk&<=+*c1Rulg1o&JH z+dE+1divlN5?Ask==5jsGjn&yj~26^=kMEot)cu`?J3x~`LOk3#nlrz_devoF8DV_ z$opRh)IT2GDDUou-~Twn-u`{G^#^n%{u>SQhaQwe4tf%Xz-xmtl|T=U5Tr;@+B?W? zHU#(uQbgYsQv*TYhs3RcE}tP-1ic^7dt;K3s4Nho+i~atkszGNgl|2#>Ahp@5;1}j zI0_O$vBiMOh#nYOMwA?`k%)(ckDB9B4q%Z9B1+4Hr6FB3k$scol5zIwku1=#3iuis zdGIU$K9+mQu^h?Rf+d0&`&pUjJd-2K28 z^Z~Nvh{(!t!%FEMMKI3pfSUE-x43?m$H>S^0G!YuVS1Q6HzJAiph^5U!7ovxkHxWt z_zt%crhKwDR?@t^p`#>`aU?^jY(rM*vQ0UCFx(wUgNW@u{H9-F@Wodi0id4Ykx26`$eu?Yj|>O_}xB?^vFd+*M>s~*>h&Y3oGKij27M3wcLw+ z6^Wr7sG+QmuUJ>q#t5xK48?4ut3$-arNzasBIv*fC3K)~8{i$VRvOn-{^2x{Vvb*$ z8ux33=xrmodlf%A8!Vo}Ci$8Gwtub!9TcZ}r2PFbsPc&7^N(|I1Z^&WJNJyEmUy+o z!83O&9qcU0*xo?Vt)cpuE(UL-7SA*Nv#BFu21|%e`K))UJU9MAD9QL{N(`^SoVMT> zcLAJg32(C%P=-!VuV5wK);A3eEQdf%47o-Y11@W>J0lRUdK7@0*BB~f|+qG zC48Cqh?D`LCbjN9wQ?S?NcPMRV1XGawKfFSD$OVOGOPy;tE=m_A8^WgfAN zCZLeX>2!+hR&8muyyLh$@{#Gwx&~g|tW@!A)u^Unam6V?)pVyy?DCXoG4MJU7=Z?e zEXI#|rk>;z6l4^aNzkIp)~c$STX?Dj09m=ZCg^_?Z7Q=uMKZkusy0sY0F|LymLIoC zfqiVWvOW{+F4|{-+D94-6~zT_6xhb*RYWJXBEZ#uve@A0Xb_&i!$wqV(L(D23xORf zjkD={q`bNpU-euTykm9r@^m{fLfgMAcJ)mtrGg=+K7HOpg$%4e50GfcoDSuY~5sxjczp?Hj%JdDO4!OND6df|))h8*i?fDOeZ);e8Z zLP~oZQt(B6^nrM+kN$3x{$A?x!^HBh)#bP!F-ene{eBCk@GB-q^&}#3rpc(M2EWOW zS@G0d*$g-MYsd)eSrqFKlg0tcraqPSeiMTc9b-qU_3E_s z*t&JUuJzHVipesT;RWvR!K)Jo>(IbXg;^QF=_sOwS0;;P>uHf2%Lf8JuQtv-P3TiM z))!2|t@P*XHt6v;Vm3B*7&lYSH?{~Hw+W37$~x9`jE^wiZ0U#|4;q~k@}9XE9m<$e z4~n06@n6*$UVk(?krBP2G`#cSxepe;*f3?E6#wDF_lRWh)M9)qD*EiB|DvPzi(mA2 zg6O8zcO>l!<$dF?ZUnmB4X@fP)<<3g*enol+!>; z%tD&Ux@}=ws9ZwE)Ve5iKOTP{vBuiHbAR8*nmc!2zC2s?0i-V5uADEcY0Ihgps(?; zKc6G6Eep~ywFzIbK8vtfO|VJuJis98HQtmlEnhJd+cd)BG>2;N5gl6O+jQUApfT90 znc9}99HO}%%7@tI=h|Y#A6k{K%L>@K5ShAe9yl@WJ5p`9J{YhTf7kl78Y z(goGlpO%+979pM{Upfj!Icm*0#$uh>zc|*5IW=NAT01-Su%G>jbNUi;(kQ#xE?@#2 zIJ;~)Q&>BTd3Jh&Rk(wl3^~tR>MOfVxB54~_1cOLW6_P+Iu0;7*R+C0vBW1rjE9Ea zPHu{Qw^e{n`N|Bsn#?X5&$PasUKF3p;9V$p8jI#y4B=gxa$26^SV=T(XuX)0x%gb- za=7l&f8p}^mrEiTr`_bxLCUAY{a(y3sJ*awpg?wFJ;)Ygmopx}BhVl*FP86Hk;C{+o|KPd| z!6W|F4X#@Sfp`c02UQ|HkGDqdU5W1LJ~s<>H*<*|$N4u%oj1_Qn`gos%0EUV%%il- zxBLQ7&!S%*XR4mUn75Qpo-Ag!HJqF5!=96&mmEj8>|ZZAQSLT;F1eZS);Df>sl;o<10hf4&tsykkW1X8t}RDt=pd;3Z{u z3wl2%adab9aVvw;&BApn@8&IQW-9IGE&27nbIu#!?HwKEEtBbeDdw~F%bRidUZvn( zd+Acc&Q>k+2VBIBqjk$iP|7kZ{^1*R_NJQ|h zIrw2$p=)zx=~!Xy{Gri-%NOtJL0|1bPu$na&*v1&TZ=@-hn5LY7#Z1yq?89#1xKnv zx#879L)8FC%b=fOBw;>oKg0ZgPP_VOe0_Mm_@Mqkq3`|^{21n)gakew!j4S_tNVxA z`F}9;!+7IUt1vd?A3xFn{9K!`Hi8*fIX3%u%XUJro?p!4PXN&Wn8QCW&es+zZ=ZES zu`h}P4u;y`*ifU$w*eZ02*{rlb29;XM^BSfk5wt-yzyYjL_B^Gu$zJ-qSF6U&tsVX z<8tm(hQZ&bqDBk=k#{e68)pd&$hh*$H1jVY@U4A8?S zzrJAubO;_3da_4K7e>>;Y#5<(G3g4V;9f+))V|Jlk#yEK|laB{&!%;N-tHd z-i+G2$?f>sq^Ibk=lGvN*4TN*@<0=o(6D7BU)rH)5bI(AaG4soQW5OS`ttoxrel?g z;)QmI9q}%K&W0fCRwoeR$NEie@QMh!qt?ghEU7dQqJpRom=20q4w$kVZ5t*d+m8Bv z%wS3If_)qp$Nm0Z?y@{H`=m6h;c2Q^D7zglRBRHsi4E970Rz6t16b^@Y5F43hek2Y-(2%%}ww`7)ltcm{f3b!BZHv1VxMCpw~Vpqtl(iP4Y! zJ(Vy)7e!My>Lrs= zlxe6V5DXS3V-WCzievC_1R!PMVni|-{#OK4GJ89MdnpQR z?WO8SJPsPbKy^e!xh#r%S}CT|Vl=rL3W9@l9WjIX1grYP(ku)M)DPbC1|RZ#*EI;_ zqzOE&EwV|Avg{;mZritY0n^DSbQFwuW`z+%iZew&kyfVT;07Km^7%9aSzB(y`y=GB$oyV9cWy&big4e zm=0BECuq0C=^&^Yzbx73bgIvqfCK21$_eAh>A26UYn#QeH1E8FmX9qy{ej z^hyH2%X$szA*GdKh&E>B8D(OQtZM}lzH6525Qz-J2C8Hr^)AS@K5-V_`uckTfcieC3=%HiG6UJ{{~ z=_qo40zMyrII*=4K;J7D`X;fe#?{eao|nL1(tB;gZE>0l`ui?ne04Ah<)f!FSEdye zz{&}tDaoOEJ`;*YgXkdu*zb>=ej+GyYr9V;fG}#Dz0tp>kPKHBNTH;qHAu$$;(skP zqLAnb=N@*@$6ODGHys$tvntu(hqKShWiN$L_z0=!y9#iN;tWzo;~MN`&_D;iOP0WY z3-Yp^tnn2{-#C+-E>@{HJ0HwrYwnqr$$xKMI5ff&q2s1W&o(4tPq}O zLX^n9%y}iP3>{Q6%9{^|o_ti2Pq8UgA+VH@kXQlUf+vk--JDr8rdd6t#%x2Xevc{Yj zxivB;>=GTa=R29CYhxyr9PzU@)@>8IQOWJX(_owXn4^nhrrc7Rg)WSb=oZ>b{rd1z zZ)=&wnghNss@K3FL5lG6lat{Mk4L}y$h9lXalL4v&5Gc$)tglx92D84~_VESsu-DDH6I_jKb9jXN~%?i$>JySrN;5In)%-Q8V62=49#cM0yn38XWf zthIKned=7CnX0L&U9;}Hs&D`G*6;a#IA0wTQR1}Z@cqIAfl_7w<0ohWpGD4K)c`7@ z6#xS7EL5D~eItG^U;#P-s_xtShEz2s7hnW^3D$>VI~FF1v?zgcJf13z&@`>aam?D& zsTQ5{N|o9@l>lTM)y^qf*LcB&aCnL$?Al}L#f~+tjK(ZP{))W;532C%x-|5^HJEI~ z1@y-jcwyTcR_W8U@hPLanZ0h&a7hh=CaR2ZE+Ki`FxS~mzt?}(F`|xE=`$ZEACChT7!=%_J$(~d*eWVdNp>y88x*K)Jj~nBxwNdY|HwOMJj+cX@K@}=JNNY zB2&cRYmp;CKnE*g%cr3{lj^EAJU(Cw27Gf|an3XdK`afX;lPb*e*y~evv?J0fWv3H zb*Pn=;IrDh0i&E~cqB||nT2<8uP<}srE-f=NhpU**(0vP6rMv%h{>!Tk6By< zpdK#NOW4z0^RDZx-rD18h%5kiZu9&?OM5pq>D|ottyAdo_D!_7$B>@NUDqi79lE&Z zNiOeOfhOZRLtN)jsg56%zduS)Z!@JPhrsjDx1r6(`Ca*we|KDad~#FKo|EmlJC;Q} z)yqGfGdd&9FPtNnnazu+A-fYGhgl+Bc_y17mAa;pibCCnA=-X$-S(v@kOs!|$*oQ@ z7*Byi^X6%!rY}hLFEVGKjKqawzNoFDF$2*J(}Ks0*}QiUg7WM9@>-{IpOKgs;F_QA9e&pxC2K-hk5QhbA8|CZc?qIzyFyq-ZRK-~7B`mH5 z0k<}Cho*j$O10kuzyPte8l{?s5p)>_6 z1ph*c&s}CD(}f+2g_Ro=()(uLN^`%esr0>4aINiu_4dSp=EOu&D1xY&4C|;Kx>QS; zoN?x~sYQ~r8L=WDX?A#lG9B}43vuCD7dUfqdSEkwI7}`D00c1OkyTF^96m zK~S>PeUf#S0XxOcbDN^92S2$>#h?ilX@QBZuoA=j;_TGY{FZ#v+rpgSAqI8obKMf0 z7IR6*{VUjb*`>Wb1}V8XOE&mkwx$vJacu=bbJeh2BN=N8>TL(zGF2QJ^b=J9iMJX} z=0tfkp5ipv0%|olhZ1+Q7;tkyTueh}E1l_VBN^($eJZ`Ccs+A;eF;?!wNi1;SqHoj zLwJA@G>z5Xf+|^gEH#~mY1w<;Bg;K3H}puYm04@bQqjFbed{9|(Ne6`Lrv#$VtpD1 zYb%$!w~k8(ZcFp-b#$l~g}y`}Y#AFrL22J5o7!2rPpqMClp`N6k1_*j0^mpe(QVBL zD@0Cg9Pj9Yf}{f56N7kdRfQ`;qRd0vu|p+}Lk|lAoNb*fE5gBR8WF=-5zuhKarA!P zR8fqwk#+P+Z54dd$5t)$pT1Sd=FrFRX2u-Sm#x_P?NwMlRrn&?O#@Hdh#2DA;giVd z5(H(EX)Bk`ZS92_QaFuLqrN4n)29BEO_Q-s51L5-W|3jcke*cOuW*u?b&^ta!Vt?q z&|aC9hLSyelGZMrdqba-Hu~++G~2JG`d?dY;KO?GCEM?Z z`rlwS073%*gB=RL0g9X*nyvwwjU9%s0p<-mtZW0U3Ok%m1DpvvyiEiAJ9Y%HX9I#i zJ7RbPVmv!idIM5EJ92pgay>iB*9MdxcGQsu)ERcP_CJ@ zAO;5}ej_G12Nqo;78?gPUnBM#4jkD=92E{+okm;}4m_JiymuV5YW>97N@fMD-lRUmJ;gI7mhsNoF`mmm5j9ImnJ0$*wra9~;SkbAS+PIB9K~Xy0+tc{b7cbJB-5(Z_Q#q&G3-b264U zG1hZ3eQjdu;bb0ZVxHk-S#Dz4=43r;V!h&Idu(F+&B>1NnH__R1OGD}2RRof-DgfV zE-t>$TyMCzWj}MPaPjDT<}u;owfW5Zj*HLp^ZI`x){xQAp!l)bh3)T0sin1vg;gDc z<7Zbt(n@PvdWXIrom%?G-rPU>CFa-#C%g+!4o)k`tNuJR`K_|KV{LnHXaBhBOJ`kM z&&uZR(#CdeYtPK$TKCB0*S_Jao4fassV5g#L23E@<1>R3b8Q2o3#(hF7uVB^t9@hB z^=-W$Vjz3;t4?9bt^FelYg>V-`Q5{lH+PTA8#^Y_cbI8gR(Y7^*m821?J~@8l;gf+ca-aOSb3D^_i%EQ9{|sI zTo8h1e_R+rTXkF%!+UyMoFK#aA07T59sd7`4lkm05S&jWtPGL~ECJXs5=6ixWynHK zltIyhnOI0SLjd8VBp)0qa{r@|d4ReP2hqOftegZkyeS-v8Pv4C3lM)N1`7I5#M%z1 z0}n{cfc;KZygZ_u2A_hnyBaISfD63*UwhV^Ftdum!d!s4$$#{$e}3cY&52-llA5d_ z(6C|5fD*Tqp9osPNhMN{2W_nI$HC zrUpvE(y2nD5cNXSFb5(bii2zI_0IHHw0V;^H%hGE46KHDY0DI9saSgoWo}W1*pB=v zd7u7|i1p+z`z!aihSLO(pwS^#_pcM1mp+djpVx*S?R|gb^(G~%$X^yX~pr5MpD%71-*$Z8ybda% zu(3DwLIi(CJGJ&Cp->uKC4#SWlB2{aO2c_p!5|Ef$}*VaYHuxZ&vV68TcZwx0}#Jo zf=|4iM1!Yj9rF!y5A1}pf$ToB?OF(HgeLGd zc+PX_t}`s_1SZp(N8WfQXmm4k*3fr4!7e589nN_TmQcxu?)?08>SGs>;1WLPJ=IG# zNCiWTq-5(oVDNL=t-IgMw^h#^82syMEWh_%d3#L=G{^5pS4r^d6NV9TK@20S<0q_V zq2F$kph#_}QGITWldQtEZdqtLIxHZu; zR*gna*nX;Ci6N7SUNMXAvyG|j*J@meZnurC^NKCDjogup3Fe6{q>Kxei)$E-xs!{u zERTEGjh#k}tALI_jEFtZjbB@#*zh9#*&2I^$hfE*kMIx=^&EflB>Z(Cj=3l@wkhFg z1voYu(|a8Aq)Uz zB?+%4iwX!*wNY?Y((_bC$#^Fn6U4k}OHo`+vF1vFhfa-vHkLn0RQ68QeNI-F2N~GW zYud$QW~Q18q*czRLYt?B+@!9^`B|=}IeQD(B7s~pncUjQI6Tt5GSkJsJG>r4f?Z@j zgc(7R>3)Q4{+VRKnHfSYZFGqOOvxv-sgZQ)NKBb+wAp%ex$>bOS8c_; zt&0U%@*`=>8R#m#V+tb~s*&jGSK~|DB0ryGeL-Sr6rgQerR~sT>_VdLsif_bkNqm2 zJfz1k@EkXiNk8UIJ0+hqA&@%P<~Co+JX1-tEKj=%9%ESdrr9K<-Db$D^=8<8ra6$$ zThyaJTBSLQ%sI(SyOPiTUdeKSL~|dR`@@d;@r3#%lI9l@!|yg~D190jpTuWEdN@HE zB>SA(lRPx!Tnrx;6nkoH`+NiiW?Tho!ts23L1tn`YVvVv3gmoDgV{GR4Tky^3A+#h`-EMpUH78 z&fY%TEh_sRa<*p`ooiJ2hw%dEwesnvawf_OFe_rkltcwXP{lXfipipiW5}}NUPV7r zWv6_ls(s~tcxCc<1+9HXRu*m2&+z>Ah@8{Z;;O9j@vMU9@;v=2vD2!+jH+Gw>NWZ5 zG`s3Dtg5|{s<_DNos;Suq?+QQYW30TD~Xy&+nURuny(c#7yUKc$2I5BwJ-FwXA-rD zNYyv1Rn^F4{R%m2jPxt|*4tG%yU4{yr{!H)b;jd$lX`W?Nc9Gsbp?$X4?gwi+Lf1C zW$+R8;GgvqrS+RWWdMT)cmp2jw^imopu2WbGy|U(#`GI~VvKB3+-M5?4njg=d}0Gq z(zg`kzJwI(cvQrsG$<5w28P&gi5bqoBrHPFOcSJRzIa?6Bs>l#9A^yz#Ke5rBqAuL zLJp1MFGO#ANu-HWC4EV2yc!hOo0V^?G0%$C&dA@MHEa8R`DK|W&qO1eO`sM1#nj=8 z`L{2IZC}W$lb|G8S_@lj>{=E$60n56I8`+iRVB+YeSI(3;MS3bde&kU{WTrAl{=!v zRjB3DL}5@ixyuW=qXTiQLF)&DRHy9LNS{`vo7UjQR!xUCyNNdF(>B)V7BiuC)3e-y zv!e0|5*YdRnzQDzw{31gZ9$FgwFVt+zV^i3-8y9nA7{e=x{W} zo)2byeu3SdXFWI&9sb$}BI&0T?x#NQBM`=?tHCD{?%6!U70~EsCmG-r9^f_{AkFC~ zS??cc?Eh6w!sa+2MlvWNJSc_Q$B&9H>xVBa43cLyfl?h*B^go|9^%*-q^=(5ZyZdX z=mQ9YpdE)Cp@!)lyLQe7_^Eo0NqWs|@EmdmJcQz`V!BjFdhJkqonr7jU-9%iarMjI z7%ja4%iy{H>0mdw3m4m%{Ow?S3;WnIgG^$E+U7=eUWYqT@Pb>oLbWXk2K}xO0Kp`H z&>By9>rtU#TUO>V{T~BHsAKju<6p(c%oK-B{wA?o(j?{a{qg95g~H=`Ilwk+1^Sfn z)3Yx&iX(N7BMs-RQyav-ez+SD5f0@H5#jHjJn~;B-s*-;AprLA0H|MZn}p-yNkEBy zlZR^4j*1gTt{**{U7VMv3KU20YNjAn?BU6w-v%SUC#KDyX1&g*4b6O!7K5J@fg6)P zTf%M;cev0OQAentlbjw{rZ&P=-1H;m%=D?U4X$2c8z;U={$Pa{$6>b(@c8lT_^BZo zrW4+rBd({7k~iN>NhcS@FD|MJEKigec(T+Qo1tRB_8{SQRjm=3jOMvHA35$|b3+65h@f`EBkuVb+6yx($%B|5r#ZyYLvQ_c(#&G^w`3CU1^e z_|)I*#3Ak^e{u^cFz`<>TlG&co7?8hV)u9o`9x_tp=)|Z4{fu*4#?*f_9vMA{oEYt zVvg}*f$YTZazp6Th3#Jm4yrp4ati~P{;}W=|FYmMi^mpQo88J}<ixa zDB+%Q?f&%Hq3Fp{93C|YahV$Gk&X~8zt&3h0(gb{LkTmh!9;}&jEjKrmxEugBsTt_ z)Vto}xYnGr`@_MnKSH9}6#lrCb%$n&H@>C-XMknu?oH47kAuq}LWLHPb!RE^r6@F8 z;b5CL#WpZ~mdfx}>M~XU(7jNw6<~J6@Nh{V-8$M3m;*%0HHFOsK;;9FO|P&;u8wei zUBSfNk>}ruxCRSktnh2t1RCDgU)=j!TXKbjXqHI2g^fcuLYFmjX|p}jVBpgAkjt>8 zB&#&SPh+Qr*~LlOXMfr%d}m)+YhQC{-(WreSzGc;m?R_~K>cg$LPV+11%?EKY|{%! z+{Sh@+5YYN42*uvipCyW`gE1I+?jI%2X(eA6Ic#jlv;RoGFXs4CY?@}Lb``=a1c&c z&uP!QM}<#wskx6i_3!S={6;VU>~*iOyW0!l{vUK)Al+=_uODk3U7&!jC93|iA8Ph)%@aVkN#c+s+ zND|<({WcrfGPx;MXUZAXxzzN>G1t z1c1n*zQj|@dfh#R#E3YQC6qjy}E?O?H#h3B+M zGq7Jy9#uUOD^&$8p2-%KlOGb|w$x#fgGGTMpiqK@xC4uk70+;BYc$>OhKy&V`O1~% zt-fw1ac-s-d~iC`1PQ2TQE3*Zh_ncYKr};@9ZZCCK{fw4qbvtTX<=9}Oal}Jwz?Wk zsg^s>vQeymbo5)Sv(nuqKpBCgNvI6ZY5|wJge2o9I6(>;9ApWKQUpa-3L5OuREMot ze=z(SC_k9C{WzRE7XMAc$xg(63Z?|1xFx23W^ozx!13&H2(^viyc|K^%q(R&Pz;31M2azdz71Xx36W4t9Ub40Q0=bTI9VVwE zI*Cd3=!i3a8F~@uICFYf1sEo@ybD5WN-HMwBNz=Q>%{HbCsp?W0(j}gq6@V7-@`eL zE`mSQwUm?53&f>mzsOAex?J`;YtZ;`7u1fjBNW_^V%ph{tyMplm%P>GYfSnm`szkQ z&LJbzi{s`vy|}UA6nq)M6(BJ3kMOpI%02=zB@IQ`PA^b2A&D;Y9O1_VKp(6P4AAK{ z2M8ecA>*W0g9B9j^iDU)gW!Y%CnKnM7|Bdss9PU+Y(Ub2SW6MGCBf7utPOh+$qkxy zC`+p9c+F<$T2i8zKaSY|-xADj3f>&SHL^<@CXjJs3t?Tx`!7SsV8%5t2LUN)qyfFq zJl_KVS_!^_=UVW5a(sb)_FgI$`Pj>R2^yv2R>~oHcgPYVXV2__rmWouS_B!NW*9!Zk`5l0AZp&mh%q5^iy#mzi6#i$`Z$K)RSN# zl?ptXh)|q|S;#jC2(e<`2sE(5VfrgB2GEKxdjrx zhPB4}siiOHOp!OXO*wvoykf%c^YwWXbNsyF=Qdp%Rq&V$k#dTKuG9zAX)6W~#!zul z$u0B0=Q0mcQnp~iL>m#9ZHY)OK(HDEVYbii=q49FGuS*cdJ1rpy~{j5Cy^B^@3%KP zbFVZo0x&j=DR;$DDWX=8k+-WS6Qq=~9juUre^^6Wz-ZTm}N~2C;zsv}(dbU%3zG3aU+KNVA z%GVYIlE7k*#fcCiluux$pJS(o6I+1A0>jdSrK6;9BX9+Rq;Z^ZYr|Pa^)M&2LRq!L zqduHVFDQ(r5MU)naqk&qo{~@X;sW9dOK3PM$EGOvlM6|#7*vpS0ToG9HOw^%R2{mb z(;lUBu(m=t}R| z9lY{))i;5f5A9vFdKdV4-vsXHx)<$XE0}^A8;Ogr4?E6j4?4!|z&T?8q4qi)`_v3` zh8y6>#KB`Bxrg(cd5{HuE!wOG4~*yk)X!Ch5$u}7OL&!GB=XQ08B~)%jPcAX$lDa{ zkh4z&ojC?{ZE}i!wOj^ej=wR!N$tS5V!;-ez@FYw?oh;E3GtjH{(h4QVL?0-XA?kl zx6Hp0>(yz`;eSM||E0r?l=fSmec$oA?*ns>n_1g?UCG=_{zR;G*1n|=yXUS>9;XRr z&0nrH7fOEAm9tq}D3|$ArPXCG82@vg!u7uTgPWoL^4ikZ;SY5mx*Y!MaNgOBw^R0i zb+}ARs#TYy3Y)KAZ7R)8`dT;M!1iVT(;czGWg4H!&t?CPdlazWx##x7 z8Uoj2*BkI+F!}Tzo&QhicVPI>Ccm!2+g~b`KRzv!zue%ngD-l1=bz>GfRB0rH3EQU zHfWq)m>SVL6n+?~UU+T+cttoRBo z`a&;`J3o#vA_g}QNKGrW7a`b7i>KK~OwCVhiOBpEjUL%oUl1rM7Lp{jCeKF zLI687VFause;*`SZ3L;HHi!0P6a}*`wbfo4t{7J0XxXL zy@lxTk*hUX2Jplm9Uky9vdTCbc-OfJ(czPP`G0lzhUDl!bh!OLbohBoJ zZg@M&BqY~TJ%WHbN?|aTGT4!>*^nW{oEMltsyUIxsW>b?UjLMo zzlVI!fXf}2g@qizE04%8P$k%wEX=?{|C}sFm?DA6c&?YyFQo`3Fqj++saRkZTeghw zp}>n{PmB7gNH2_N6PPwzNleE`>Ntnz`~%Mg6VFvV!|QA;&_HPkhk7NXet5qi!7l5= z>2Pb)bmbm+5 zD%ze_c@H@mDOyNE>E5vSR!SvEUzrSBHDrfm7YVSJ*oWDq%#(#qB9MB%qO2WBrc;@x z$}x3MKNH6^3$+=G!9w(4iHCs<0NSfYbC%)YBI4MSS-e-HR>M+HDg4b1L2qhzSZdM( zbE`WfT>7f(3p2R6BM0KC_+L~7C=mrIrG=Z+FhpiaO2M-G(dv365vIriW>G3_f+L;s zWrds>u5&Xsdy%#Zk#<>QWLo`y_ik6Y+{p5~$@+v$ z9MGRcYBk2I#32#O!9Sz~XdqcLTo@0T6~aZ_d?nd(r0aN|ipN4+G$UOO%tb%om*UZ6 zQPVu3R0CXB-gz%@w^ulGGd_z~{cOvBCHxlbRRxIn2(-^OJ=!z7Bt!)khD=Gmm~yBXyr=E zVoLPkq$rX~X4^{?*GdGHBIf^^a4})@WiT>e<#dS{O$QxDN0nHIig=}%c_kpWA;gM5 z?7lI0k^h~R?pDx>d*w`J85oA6TIxS_`A3--uG-QYXj0G!n*7`-iq)kM;{R36rJ z5zP!9p-ih)3z60M61}4iJ=eFZSz4Vra0&$nV=?!uucxcSm}}STdNx99MYv7D4*CFt zHLGa-^2PWPxaz6{s#>k4$}jpugKKqrYa__(VfSnGA1fP47n*Y46iKh6SQ<2l7=&sV z1m&)OC9Q7_t!!t}r0+85R8nF5Wl*tbkPK(oO1eS%eH}&LFq&m!fF^O+=<~?OsX-^M zu~0*7?2Y98jpHkWI^ENB^h-h8vf!nY0w zS(ntCVCk95HR`!F%AGf=LfhINO4%D~+r5|H=h=GMGaA#_(up>%&NZ&JFfOg$Dw^8* z;(#T{{al6Q2J0NyDQ)@Pg=D z^1wVc%q2ZER#vPyF^u666kao54YO29Gl28%MwHoL>JEOMSw_X~eZSf6#V(0+Bj<)eVxx>Qv)gtNMd>Un6li6}a zaG!~6Ul=`0YU#W5u&}JMlsvk=T(_{ow4@^IxTuHxTWibMx&4}h{UitvW43bdFoP7U zJOmD)h^>+w4ya=ex;`ExW?PYTTBVI!tyLXpJ#cCrb{KuKG}*E=-4ZgR{bEden5}Bv z?quC#WZn4Dx=-oAR>tZ@@=&40T8GzK>-=zd!WtRX2AFM~$8=;%W&2ut~t_*vvHq1ideUSdOc#$`tF-|^o7Q@9mUp1^f;)y>yz<(C~s#- zol$rhUt}I@g!S=g>G8YG8F-iCrul~cnGD@ z+GK{EEH$4fP1^CepOBQ3s6F<;;1{p?==sR{d-h%`x@YSu4}|*4y(tBF8w<^KRP3k?HoKVf#@$g|T75aqEp? zbfYO}%V|+N@NAgjjI!pWjLe*<;kV1R_Lg&VSi6Noy_I2u#TLCK=ZgXE3+5E3y{U`! zht$n7&NZ2pt%nOts>=#&=XO@-4G)KPW9I_r%fL_0iD{?bX*>2sO?N(Vo?9zklo?;O z7@v^|U80NJ$Ov3pbKio^?+%TR@-D|ey}7q`{PF23zx1j!`6{jJ>Sx*aU$iC_d$mJ%FhgYGgF4E1{JD1mLG%jzEetesD zDc-uq0K0&dTz?z65-#;(<_i<3XrQvW9(=mM&KD%~7bg9!b5i$XYS=ZYhbg` z9=Rzs8+eBz-(uy%4IReUgwPuX&-VjmH%xCf_XciQ_%<&OZ`k7_ z*ko^c{N*@oZuw?JxJ=C0Mq~%--1aoyV?J*7ml=v;yf*;f9&OwT%PI-Y$O+)zP`+`8 zLA%3|xy!W>d&B1rapAW)Zqns<@{hZ+kGpTu-DP@ix2fD!;qImLuT&qq)bd>wx9`+v z+=c7ig_rJf&fK)#Oz2{08Iqf;eEndWdrx`ju21f6l)q|1E@p0X^p?*ftNMdw&z>op zxv{5*#?TKH{Cm4Ab3wijzhpiPIlF5-Njdh>1Qvv(w8F(O{uSZ>0^!pD&p0qapesVa z`=baqg!fMV_Zr(C@3u*G*&hR+0$t+a7ARzpI8os+pZw^&g1>sA9X$@ok9V#_cZ(s` zqsGqBqlHwAk7mS-x5jwmdj|DB0%jjO>mH0v3~Y6>*CDxYRcb?3tQh}ta{8n{xo==7 zmuWy{h<7GFVpb1I%(kbtPPQf7Kp)q5tBd*ORLH$zZ3J1G%8N*w!;XTK-@Y?K-(qQ(EE6$79l>{E+D#3oK& z09`?g3J}A@k=R9qpzx^>t?5B*5zL5!{O2qchh7Xnn8Lm`)Bx}lx$l4&YL&`!P|weZ z<<>7M*@kjRM)ZKV6*wnvI`vulc{aqwBg7@ok513NI^|wpGp7I*N`R*+M?%D19ESOV z1zR=5E{p)OfERT`-ARNjIUET})KpN(AfQ3YhX-+-+-G8$#qrU`upG)*7q!)guKRbu zXSs-*H~z;mKbxTl6J3b_$J19h5!a}IPvaV44Zi>YL?bw8*cEALz`yBmNW>aetO26K ziTKp12?D4_6DWDmuWc!IDdP=*Y1Cd=W(q+}xIWiUg}WFkkjn@DJ+;2k0*P?JPPu>S z@YA~!xnk9FEK>F%ivSuF19&em=Ugr*vvn3E_M~kUuSh2h52=Wh)!y@tdjNd$V`a^VhK>z?t zZh<8FzH!|TV=*9#uotRSHAt7mYe)aoj6NxhIBJ1R!rm(dUIGn>BPq!VTo8+-)7B&r zAMwse3FMNY&5Q+$f5F!Pa9va+*}`t_CwRdorc=f8Q?^kjE5U0OCu4^eAc%{3r9?`A zL@gy4tGt?{Bs8?Wtx`_J^$sOSi;xo2ToiRSKdd?}lZv~lY8J}k*R{=MI#fZ<6!PaF zI-HD#(nJSPnV<^i^^Rz3|^@8YdSaC`T34MvbI=mpE9QKb6 z&$7R>DQmW`g6Qy@1DymYRCqBnSW>*i3@BZBU|N&Hpj}GK7BY!8HgqpUhtuNd0wj4u z=)`>(iC4ewMhOvr4)EEXqXvLnYg)=E2jStknHP}7>!{sX#ZT%`PFg3@*3Wyag5+Sp zq_9dH@Dg-hA^j49UUvWq8?TTssap7JdqDBSglg|w!EA;vuzz*9CDO(y4Ie~@qx{w3 z&W0&T5FLK2K`IN;;jmo+5FPFX(czv9|E|NuvH$9DY={oGJ3argq!^?dE^AH=(cwbR z2@o9){D%%tK(P`Fc?bB}l>K3u>r+f+N9he7<^;N4OyjT~UCLL84vz!w$xZLgks|$5 zhu6x+{ng>1JAUy*Du@n`zPhma&TIWghkHSEI5OPsKXo`+U%`LV;h;Y{oa&DbU(W&m z3@nFP^PIzmn+9%r+-CFNMf>)+J`#ICl}MD5tWO+dAndFVHKYKeaeTQ8pb^D$(0ZRZ zSu91xkC|9MW&$G05?J6-@(kpF<6%uy?9?clL3kLV2m)hjtN_-Ajaz$KCMfjlcQ!wE zB<8CG8CH?r zEhR4%g7i-vt_KYEdJECvqaxf@jj<&Cd$_B|!vfO^aRCrXE9md=1aPKo6PGe* z*paDJy^kxsn`JVvlXD$XPt&q2WpQI5);zsQ?vzqy@fD~uxlGFFM+LFQS5A%)xMeCL z(*_otOzP8Mn=a-YGB;LEjd8nWH=LKz_MJ=}8)<~?ksJj~M^4*Sx#gZET9a%tjK3HC zoO|OQCvsIe;TII5k46tb&%K5X1I|*ZLS8u*juH_aG5HaUAYE%vD1&MtvUaNkG$27W z6h5F3Nj?A?uQvdmy%!2&^mwd6A^@6T2OzXhBr-*)@zFdg-#w5{$;om)r|f+>wOR#~ z26An;3bN(cWh+yN%u)#rD50dOlvg|DOKn;xH6%XN@%G8=MQ%w7L7TB*oo!zp zs`H5=LYM4}pl9W7p)k58g_i(^LV4|?m>z3QU`as5+nU0VtcW292Q8i&0bo>7#NgZ4 z*mBh2D*FULMUz!(&17016{Hb0I36{(qFSnS+w8URKWkBw;)PAsqG%7U!3JV2e6=~S zeaG==5Yn7lgg12T+*l3lh-)sPV{rgzL*5Y&kJ~~;N_itj)$uAt5F}qm+ zV9Nvp@~?cnaB+YpYJ$Es)ipALU!`3?rdET=lL&{}mDy86(a}ICYo}NtO&D#=;-AX( zrhPmHPzhPY6@1qguq?kA2+KQ|5E~%Cc$8H)Ist<0O*Y4I`BzC#C4x};u8F?1&PrUy zrA}xO^?V)sFj<6P2P_1TOf~`&&!fpHIf7JcqMwyk`tgE-!u8r<$vB|gs5Wrcl;NcA zXd+f>VoabWyeXWiM*X`KZ6G=v1gAV2i0x#g3!8`&T4X?gK8M3$~~?d8Mqo4bOe@kz)hbCn+^c(ddsM41mXl`2^`q4=F_}f z;px(LDngqMO_K0pVMhS|~qHpXr$U>cxTlU}xKJU#$SYo$ZP^y6E2CkGxk&H%4j z`+Xh{4O*#(apbnE@GxtmP^#|(-ujv|4=;2uZ&dAc0dtv98h#O7u^FFrJ|Nl8PQ&MhW?6^fhZJXMbePiKE43#ftdoiS92 z@FY^kWQJ^LqEtQ&(VgoDId;x&3*Koo!@f_<-WZgq<4eHNSc} z$$MuuC4O8MSWLX@@lF_U<6PdrRdV&d$;-L1D2Q-j{$#uPmqoMGJwW%@Wt>V=A2#Ph zm!$6#Du>Wo;?JNj#Kw9No>6JAWPqR-#?h~dz^giVTAf0nf~3cF$2F0 zT}rEM-w5ssn~c`F{c;|^8ei`EnQCOK8l1Wwa1rM5@||VySjpt%moZeCaV~H>&wG12 zkX(Ig%j65`&r)*43*#$>oRhiyjSsoe4OOK9{!bWQDfB~$KF)7*oo>gIxp+^rV|saNj;3Eiz{m%YHKuUr`W}#h3yzZd*qPn zyzl+>4<_C`g6<^+OOdUkMPY!d*r!T3U6_aBOnN#5!lso%<3-IJT0;-Zz;KQLA`jg* zA|PV!4iQiswo&XuMepmaOYj$#?dHo%70TY3+~!hLmG0U!D2G0ehf?fec7rG%lq3Fu z#dXOgC(*?hrZ4u<#o0}KUwa!Z13ELZz#zeIG*uKi97GK81(Jh>9aEX`OS`0pg5T%9Xu4I?wtW`6%3Z+;aiP%F5=7Lh%(1}3I zx%H1$x*l7*S|vYoXyRha@S3c|MS(7`Gi>Iu@fN(n=ToUO{7!%C-{lbp*F z{}sDuq|;}p(+sSt{FczdAcj0=yQ25=MYQxqMP?=i>j(6PO6$1sdnwdQci0{ZE6K=>$`OtPETVC zQvY`mYa$1b^1nx{nQDFhD`E{j{8z+U;_a92e@3i7FJ*N7iC8;y7yXZmSpP?d z|NmKsv;Cjwa6W%7{_xNIS1w}zPaER>@<*o^W}jl5!ji%>i|gBa_m9ucuWq`ACz6Y* zKSZZn2E-*5Rd)?dc*kY74~|&}#;t7aO?+Fn4Nhq6?7z8tm|a>6O)tu;X@+!Q?(Uxo zYMQTa?+fa_WK}d?{kS{7`Vp5`arf|4-O_b&ecL%SKEJY&S<&Dbn=vvy?;f4*5|QE- zmFAO>JwCVS9iQcwlsh@UeE;}-czV9Lwsm@W?VFH&d;d7Uy7{?lV0>;VKELwr;raOd z%G^I@Y<97r_RGP^d1+(o;(wI*e;VTdcTD+zl=y#?cun(?{aJ16Vbxh(=fmk)eJ?!I zdBY%{!+GNOQR;dT)8!jv;1Lq82h3P=)F9`b z8>NE;EHRBkByZXprHRNlevGPpGE^HyPp)~NOslcrJi#k05{B!*_Ik zJ1LUhd^;ocm7jY+9KW_XMph-~?wcy{uVy(VS*I`IS|%y?i-s1h_hTBKEDzx(9V8Dc zwhp=vQV!)8yg^Q~IFIY@DEyC-p3Aj-V1IAEg~zRc^~XnvU<7A=zfiiAr`?$9uTSFf ze5?ZAiTIk&`x(BT&tlm&mjWKSFu^VKS^7+na3_z9ZL)O0zBA5id05f_onP+|GspMcZTHXvQsRq+479#76_TRcT1g}5u zz(^uWgdDR4-JO`Ac#aN`{bUaSvxS&>Skkvw#=3-wGsmI(j}Fob{)mK@D+1O^a-7Zq zBlkEXe(4{zVtdrT*-GBSsnn3hB$^Aft}#RJ8WmypP>HeN-o*RjHH_u_BkEFb?_pz9 zgnt-QP^u*Jt|4ON;aCmew~NjZ<3u;d(4 z;>Xc^c5}|;qK$phH<2=`tT%k&&HGGhnIy8%sQwAmC9q6-<9vBZX|#^U9UdnldSI*! zZ=6GR20g`kR8vD(`T!{OfPi3XF(?#MF&KiK00e3P#q#7KFXVV3P;AEv6A;aS5;@7k zIBzuhTEw+X138)wfyM>X>%h^Q0{u>t^PvT7I=(%perUP<(3nHl$_xlVF%1Chi~}Gm zVytM60WieJVyys1U{ugV5y2vTE59HRBjgOmisM*ZD}A<3*sTx-O1xD91jO9u0#Jea z#N^naU9<{vc;R&Z1XBR7%^+Ghe1);1Z>ec@rH0;i00PDYtdI#~)@*%;X@M zT=(_)ef9Cc3I^S>YJrRbfahhYPD;3Dy|`;ULj9XM<(;Zyxe){kXkp`RAvyBEA+fk! zX1K2(FX?JlDT&$AMq7Vvtk&RoO}+5=3B{oKbD*KeK7g7iAm9ZwpaCt`9jdNC7zZq4!a#|FL}y0USaO;!vr%@w5}iemvlFuT;ioAT@F zRejzj7Su~x`RjB6ajVztiN*?h4CM+Dx-bSuQJCHzMA;Z z8v-g4R9bRJ#fp(QkbkfvQvihiX}|-a_7p(EYK*A@S9nao>0ud0^Bj^^sCLZ2U-Fhnm@hpd(H z7}%PM{92rfa;tO__zp9?V=1d?A>KaM+tCZJIju`Y=c%g^I=}>n+ zYAS6WHVhBI;|2$^;&frZ0eW4US00;-{GTbQhejzWfv{AcNdevFvbq<|=B6V0Z&Bf7 zJxplDK^b&?@V+;_4F+&K=jgDI0>rOVYu2ZwDqhEg)1|0&}@vK z8@Z`~J0!KzfX@2#dK=d{#4#s_E|x{XAGvEiz@xq^D%4t|^6r`*U3_to{=T5{`zIb` z2=3-<>2IX1F=J^47wFbfP4oV@%}1_nN2tfg>l6#XSp5aFczf(ozSj>j8s-X1>82%a zZ|CN2NJHgAQ^f;UjF5jRfHy1-WRL0`r2aa_`(OpoMBMLL;$MDs?%ZozyBkJ^<8CSi zUG?|>raNuZ|81$)#N_@=2#iFgS6lynqefTG$(fD*eF;*)%9#(>rk5kPZ?C-n9Fu30 zC3uY#a02^v2>Hbk8)WAD4Mcl7tvNI?ZX!P(O9#R5EBsyrgy{iq+4G>t*XuRJ%LJ>gd1v;|Kj zNh6Sv5x&KnjlegGO+Kt!!FgLD>L?#Xc`RJvZjJKZF@-@_@?d*(7!2$#tnE)t0?;yp z$s3Fxo?-w5Xs{=OM0j6Al&m-%wW)c(5?+|2^9a3jCv(#-3f0mEyMtY%h0uh5ARBC; zc~rTecbkGXOob9n)1HDkuS}wb0{M8uasne}Uxh(IPM|5rKUy%)>~Jb8STDlK%Lo=p z=A%Mtszn0RA&EeqHrqHilR87NvWc-#3ExtSC<>w~a!Qa>Nghy3hY83EbIM~?51HQciKnFcxM+Z0Oc#Y8vH zB#$uhcgsluswI+EF#@tKRz!UKw#`P7Qr)KbiZ;$dj@Fh!MTT9c05NT{8i z0$uZMT9=M>>mpD6VqmTHr@>-qzh}ho!Kd*s=%`{$yC?g!4$BuzhJ|8=#RoQ)Wj2A? z#o$R#=;|>2wl%}%MjR`T^$=X4v=JkOLj)X-eeJgM@2g=;d(Ct##sWa_BF` z*gu}Epm1hXr8s08R&*O?Y^6__x~#ZL%mhmDXTt1H*qKR{5{TK^$+4KJl@jp}ljue` zXiEecN-|kWIG9rDIKs0jOE@{b=y(pZxl+B@Y%+xISol(zL=Mx0OJEW-{qvh=9;PkK#x``8 zhm6*#5Zh;T_AQKWZ6Hoc`FiYO<|WMUT5Q}8^So`ceMd6hQv?K*a6bgyF?)J3hS~^y z2+wr2iHQi$i5_7N(`EdG1xYA@B(XE5EYYTUK{D<(@e^T8Oxc&%1cJd!*k1T=qkP*lxs*;1e#XR6jx}ERCHohlpItT zVpV<$tbmzRRxwoS1y=49SJG@(iegp8_EhdmR^2mH6^#^Lgr{Sdrek0i;(J#R{Nj8P z!H9-k-ltQID5?Irlvn0leG00%TC4((RIAe0+$+}5m(*0)Jk%fpYtja4h&XC54r-*4 zYRw4JpS9M8q7?|17E6@Mh>Fz7w2F!=*ZK$6n!c)gRN@`)>aZvol+vE4Et6}A1V}EY zC{PCJ{G!#uw$;Nfb)2n#IIGvEY-mtwNH%Ur>27$5XhnN!6wh)AghdsEsvm--zlz*aBSqrc&#UID$=r6+`{#` z)j72lD&JPx+FEwh>YUexV%gSx)Rs8h+A!M2ir(J&;N2Eu+8#>K>fhZCDQ>T%YeU^? z_mk`hRcwz;YZG*7IXGU*rubt=(ySj=@?iPW89cYKNHxR&gMxO4(I>9?bu{z_e` zbsdKy?Z`N7F=<^cW?eqTo$s-`L)g0;*xK<|TCwk|N!lnLM5HO~n9e!si0=LH>}2Wm zl|gMiBES5p%P45mm9g&Iq58ee2R%$aRV@0QY(5==_q`Qiy+aXQGNQfgRKWX~KBfO? zi2tL+)%E)|efqW2|J4xJ677M52IL8PP13ozM2R-H`fb_<>{bRG?gt#H2JQ3*#3To0 zBnK?-N$JxDoL2_@?gt~sgDj7 z#14tI4JoJ$XWkEIQ;qoA4L_9}k;oaA^XX6#g{at#2yTwJe(YvVA4zW;L7Ev!wySSe zp(qk<3r{DDO7AOc>#I_E(r-6ZGuCSy`*yqU?c;=Og%;`t63ATvM!NrYM&`Lu_27od zC@65WQ@?G~PGPuA?hVL!o8EaxP*oEVibOXKf{(M3Ieig@U0x8ctPCrOjw$(!@or8g zwe{|;5YrF?5L8!&55Ae-CIDdad}Sj2<~>e=AHj#oR;tlE=vbr57-=~8-OpihH(7Wkoc$OP80djGlnL+^sY`oo7{FY4~n43hG3 zm@8!Anrt9ER1{ou~y#D|KFWD-3o*9im<_^{wwzn7(ghiNe=G%WP2#A9RY%@d8Vxk z7%zTpcT;Y_*sMWCnOI4YMMeHWLYP@YBtA+qL0tAN98LmAU9IJne>tb#;ri`StL@4? zK&;$8$p-UMwm{mPLFU2(^vQsa0I2{hd)J^!&G(b0CT#larVMQEY;1MY`J<^^B*-Z8 zrhRvHd0b_6r>@Z~5)6yt-W4MQqWyOtc6?_i)7HdGguL(H0$OQU#-MF|BwNo z#l89Gvli3q9z$CjTU+1ld>@_qIw`5nL@e{kv;obbWAzTj_&U3v+oMwl;lYqI50)+c zD`mmyG_V-(rmy(Q)5z_%7bSTQla3QRMJGGQxq!@bFfCbN8VuIxK$3NmD^xKiEDk9+ zS?Cqt-!Vbq1!IQ9d}$_y#i@cn0kCmHlF5mc@(-j$o=LDpBvORw4x7Kw8`@YTb0~WBg z@IqrsY!?8BZ_xjP)gRFM(a%hsPWUOlBio;KJe>OGoSi%Tz%lsPqrJgi1!LtRVW0d& zCPALQdcr+P%KMfi5e!S(IO`aS`bVq(_z$h_ZgJ8qzS(+m&dGHVOS5kki+TNmTc#Tm zfWrye+jF_MyMo}cwzpllM}G>&|68@(@onM#&lKF#dBa(qx7(pvH#rZTPdYF@TD+J9 zrkr+OI~_SYA;mh4X#cLo2fjgJhoY0$qF|0}zwO-L;*z%`TxTs0``M@WuMmDI2rco2 zGkDY=cv6UrrHewL%cBy90QevrKeFVQz;1v-(DCb30NsZGWHMdA5rhm1B1e0$GUA@Y z#mk-G_K#ED{YQy6#~G`n3fQmprTpCxf6IISgum$JKMis9gPAm`pb0YyjYIVkjdH_C zOyVQW3WIh(R1VeBk!sA*kb3KB$UuNGS$MGrk41M7#}_oCQD+?TAhVG%bA)O>0t-z( zhD^aExEl)-Wo;Zg&=?~i9;Ze1z?f($-BS3`2~(34%}(V%&w4n#h_;+7H|Pu*r?`4l z;*zxk_ET;v^_bSlJWtKXOq;n6&>ppa%_twv^pt3(&jw})t9q`{jlaj+04B0ju)<+Y z^eWUmNnXOcZtCLuYN)2~!*8Fv)7^!^tWMt(fb%rV5SGJF_S#gW4JcL42Xt%#a|E)n z?U>M+M?cb`J+Kf9epV&`lFc&+ z&;xK;3VRjSaEN$}2^M=v)fU#E}DV|(&iWn0X6UhIT{C*gd7%7 zc6JpNM>ax;nkm^|oafheowjMp%!Rgj((mGV!O@5(fB>0N?+c1wDppgkUHb&{02463 zR6-l7I}i$a&_>NI zll?mf>&lLYmRrjJ3_d%fezH+#$zhz_W3jm6f?sRNM+3_aNqTZzy250spKX&mNc8j3 zaJ|5iJB)eUde}U9IU$(1H91U=miS}>icg_+_UHKo1}{=NBDw9u{2Q`y3Rs2Oa_upg@_@9?B*LD^!! zGWraiNZQ*eV)S60+<*k!2zkS|U(R}^U0DJr^U_g(c49yT_-cOWK+)}Q9ab?xrWe^2QcuBzso)RnE{8VR?Aje@iM4^3N0tQNbf#%ORMqNCkp40Uqko(% z+eSIy({h#zF*b^{_hGQpkdhDjN)YYEk3oC1KN!_kRZ#-9ckZvz*%fq$Mw$YXc(&i zMvB@~L1z-vbhF8N?KG7TrPWGbc-p?P(-F z3xBC?z$$fmPOo#?BHDf>0Qht2zSI%^s{aZ%B)YxWnCq9o_<%s2q~5OCqY_{EuZH+K zntRjV4RO822{+gBX|V&>ht}7tMzDtFzZ>GqYkw*6TF&ooFE3Yrqg{4_PM-MnCJo%l z{nZe63=vvcMy2&AM4>rz5n24ZAuiDIj}k}s97;nu@(_7!h|7D9Xc*cf)K=!6xC^Jq z{M`_LJV5rGkbdEuas8JP_nP`3exAHtxGO8~HS=EVu_3;C@G`U|DxSvnZzV48GFRX6 zsKkG7YrmYF{<|T*dfZoWxA@o)Z)gwRNUWp;=cJfh)+p_u`XszEZylMMc z{rKDN-nq4g{{E)_rO;vY`u)DV#QIF9-&Ny#i6!^<_q!5*Cc3g7t_R;ge6WB2`+EJ) zH?Gbq0T>LR;aj4C=y&hhw^QVbyibBzNJ=b>R}VU|)3MGq$y= zwV|SP6PAe+*6|VXcN6Q26T9${nst*=iIdd{Jbdb=B!W{w`KbH4Y2w9bj(H&$-E=Zy zbZxv0j6IAfVvNDO%<4TXb)qaPyllZe>@E+Y>_oiKx*kq`QO+G6uALt49TDz29$une zzB~~=A07djUO_VvK`K5_P?b)M ztPz5fRaRK0UzcA@g9?G0OcZ24F;6;I;BUm-k^jO0V-#M%2)tH%wx+uSejoUux_Z6 zPgXBE*1{wV@GQ4!8;a>`SLyR7Cr3&8p)hZqZ$>nnc;6GQ60M6s4tWIY@Zqf+g#ee~ z46}Bncsa|1Pw{=l3Bih){3A6#6_YTP($y8i^9DZ$E1^P1a!rSe>PEhmDD94nldmtsTAsu$w#Oh*rGzLNR5t(w2oz}K6-Bg zGEfyQ0Yck4?mx=CsZ#=kzSMtzwiYy%sZEF zfyuJiIYOS2C8;Jac_kxKlFtYcAGi@8!w_LZ;Iu*psI#^rv=GNbO-yr&EEA z)c)Mb=rKqqkl#I((5vvVAH#p(TWaGbts&pk+>t8idn^996hUOzQ@RWQjMt}I1)?0O zEy=`qj%aAXJ1x#y!}MPtjt1-@)Tpm!H(rS`yh=tSUSs;-3@ZlQ6c-R- zNsPfN%RUrK6=GGgZuSL&qp9xO#bMv5=vz=F^=dZu3uCzk0OzQ8etj1^9sKy9W-0>! z(T3!d%2UiU+-sW1(rAo7GereY$7YukFkFfjS&nDp_Gkb%*~1h$ge_BHx-mq&2$Kii z7DrCicf?u*3=5``n&!|+z^dGpsnjiBJt4cCzlKxLnc?ZkT*5{<@S|LGi2;kgB8CU{ z7WJ#x#e% zCY=)Sl0Wj&^;a8hS7+;A_u;Mz`K;b48GNO#StPDs&gfVw7hCOL-9t8PyjW%1Ht51#o1k86 z(>Kh6uGRRi?f7=?CDd)3LypAs4>SxHFO{pmtbPBm@-0K^tX=Q?_u5jIVa#{Kp8U0+ z)GJ*A>$J*mOjF)mm%sUiF?RoDJ^iQQwd?AYM%{1X4bYnK)#du11Op_^4b&55WO1YA z$aU6_8(&)2Ps=x^(>CbGHqZyUa6{U#2UPI)jNFlpu8}tpBAXk}H#PN)RfskTLgq*v z+DODT$wM~P>o@y8Z@MlUkA64a;@kw?8~0Lg)!}YYjcrm|d}53eWuAX%qi@h-J(*y5 zkYHoh;}GYEW(siPX~XvTxJV3GG)+nY)Bb#uKOEcg&$mg5Ofki`c^bxq#5)DhOrFk< z2;zx8voI8S0TZ(@5T1~bAW@Yh(S#33NYT8ILDQ1%kdVz(k$=#77QEA)zH?@7c2~O7 zFt$U`zH__0Q*m$Bl3*sfx1Eo%3u7{Wr?UH6E?n(o`9-3HR+N&CVXsD_lD5UJM!)&V zXY=j4UHy)dHz#j|j?F(qEq*Xr7^7KaKD7wYu%PzaGq310SnIH`;I(y7w3FKqp4*E# zw!kQ`xcX%gL1oz#xyOuWX^m#U1l`xt+;6wBEEBb?QrUNR%l3STYW1kt^=jCEO)ceX z$m7o}A8=yoLn0d3AQ$YnVz#&Mhc+J)CH`TLJFG!AJW~)sBM~7d8!6cIYQQSApg7t> zJW9|q7R`Eq-+Gt9`rGq^Pny|@f*lEomdS3`DN0f)asojW2m3SDOZnEvz1CtlHb0K7 zKSB>vX%0)24sV~?BpDtSc^yuM+wi9!f`41v*&TkWu<=?tj9RnyIXtw-vfXMstfZN$ zd1$Zh;Ha;VYVcbZbU9-AXgeN!REBoY%)HtnXIm?d+lDvM9%a?)X4Q!X?S>h2?Hx@) zj@M-E%=qoR4UegPkDDXxsLGB_F2D6<7LL-C4=0LDL`gnO(P&LhSk4$)Obe>aI*7~( zO3u^JEEL#|``OY4e{V~)A2zrAa&@qrxI93kxN6wCbOqnMQdxJ9+<=*HF-z=-i|kgw z_ucfiHLdp=OureDAD!48?0sjNKcUTY*#Ca=-LLjk&iH)K@GR;(O`ii7-zlZx>5lc= z8{D@S%u6>Fo41*gzxFn+8(PN-PCF;;@6p5`nBhqBh9&c-=z@+0SEqk0j)Aw1=$&gQ z?hUBXrkL-4q!s+gt99gG`=NgCSc2n(P2+?^@}mysbnxBr?)lldxD$?0ImzS-M(EkJ z-`T9**>1-f1XA5O#7rk>ihx2E9d#o%b>_R3K zwC8ajez1|AL$mfcEv>j-euv?=vvBcqM4RwunLtV3QKP?Wclf!W`4h!Dv67b+XDT$u_fzmdN(UxypN-@<5c_!)VnB6Mh3c=fyWDk=Wb(*5dk^{V;a z4fDiJ$j#M3;-{Vbu2ZEbSNfIX8+Vs1HCrxs#|H`bckXcY$z|KO*ItF!-l6WIU)+77 zdEE;|1EQrpqaD0MPv2LXyK;G033<$oU-(|T2eWu+bll)u-0-h>3}m=F?YqZRdc4KI zb)WPocJa`_yNNno`P3NVf zKTt4kP*gn#GlX!m(C+~79nT++Pg$NH-#d7OqJ|`U0XG2|(WvJ)Lozc2kj1;~KNwZl zx8jwa7MSBCp0Q-sn9F&D9Nlq=U_yEx!pCtKz|ku+)T_d>HZ1za`^9ZSSPl>a1oWV~ z#Qs`9!isyHyB&!Iop;9 z|6`x8T8Yfhz6Mic{IWxY4!w+0L|g}dy@@9aCqVQK`T$e+XdCyt4G%|^35sUAw-UY- zn*?7@?<(K^uD>4J&`Qw<5CD=ZF}NuL#XlGs1+6OP$ENgaB!e4&D;{H52nsHJ+g}aw z7<&0QsP#F0?ZD&XO(dI1reU1^! zY53*XeTLT+@X9AN~Xh~eJ;8i^<9v| zHL?RtR+CgIaEfDNka0d3#Tp<9$EZHRDd%}@os^TfVR9OfOdQDI=9-0xa~ZR$gPG4t z{9(h>Odp_RVu=rX2n$PQh!(s1x)vp2f!br9`}LYcfe3D#3fJC92FK!%v*krezAk

      z3D;r_}n?So8VhedRQ(fs`W&93{yGnb-TPufN&9y~u!Jr1i= zi(Fo)0b=U$k8Yhzp!W3>Vbr)a(2rHOy~lmW-xrS2Yq<(V?`4{IlRGOqj&G0fp$}w} zJyX;)aX~mLc?56MQsMl_qA1TckT7qv;7G|aAQEo3s&kPH;TPznx+t zAtP4kteQQ4I?D!_o%#Ka$R#Rv5tudV4j{oqx>9ftjxaOU zQ`_!F2C>4C(7I63@^q*?8T&+>9u8jrzz(~I*0fOxR)$^&(KGX;45>KRSijAir{882 zfE-JrJ>QUiBTgUqgf##a*C>E6u`4)Qh7LojOA>Xj-?y%EMI#UK{z$gl_KmXx2^ z3@WJ!1mzW(KWPULl9hi#M`VOR6YL7Wb@8X`zFbA+_HP5sx|)8NpN1MUEHf|0%6hok zyCcI5zRhU1Aa&b^Kh8}SgS47(=wRMrlw0%Aq;iM)GrLzStHdwITkyLb-u$7^rt7_G z4KuJarTsMzq%YJAL~#VKRL)#Afm05>SCQgn~2FWy=D z&oK&rnyWYuzFz;O%i1-!cq*T$V+aJ9bs>4?1Q3)Np?U9gBZd74=77dve4&y1;%XEjicSsbJ8 z(mCRFz3Nf1)DdzS)t8I&75ln>zJ)SXs8_3l@tZ&z9hgRc@goqu{(HpJXFyCr)rSLn zYg}x`*~5H+J~8_5so7+ zTVB4WJfHZSyO=R6i5t__;IQR!lA&5!yjSio3r6QZ-O4%}z5{~s$2aD0l9#FcomqBP z4koTzKG2+%BO7heZ^k8|AQiNx4&W-TKSdhPtOTks_iafY)PNxu0zOpWc|u1WTyta7 z>WKlbevJpf-Ek2Y;e9~;$D@gh{v3!Ar6a&z@>QLvp~BCY}i-GF%CtSofMH?8w$3!o+ULB}u+Bq!oUuFq}(q?r}1p&EeM?iCO6n;ViG z4S>REYqZVigSVydu{4sK*KQ_VD~o7jN}abrbvvVQXzL26lzZz!(k5t1q;-MRH|Bm- zQo*v0VH78}7ytbQzK+i}=*P{c!u0d%(3?9D#>iO2*LK=dr?h)9l3QRyIdhQ)ut3SO1Lb0`%Fk$2enTkgI-Lg{iEn#W#~5S0>?W zdQ)&*XeO@cdcoon@H%VnfOem0V~NLz=vj9Ay%9$mnOYF#*LUHm}?!)eB%pcK~&XEU<6?gW;Br%z;kdHlrTzDsZ&{ z_itY#h>}Ii#28^U-sRrJ-OAatR-n~IdCwtH-@c%7wc5&Yr5AF|iT;K&naprcw=EAh=3~#C#7HMz zLxJ-4ku(_b#Le@tQ=t!2PTi363eZXT$zW4c;0%Lt7pFjmeHfTBm>H^%kKD1>2Jso6 zqfJG!gnxd)$;ihX%xkEpER_Kh-L8PZ0=oTi7wiFo9(*2ui+hQ&*?L$+~I! z840*$2z(gUbu!)f8U6Yh1tuQMo{7uIUM+FGy*XxL9h+hy zqsk_Fuf@0IznZD(2ETB?2h2XdbTAddW714a&@@D2OCe-8r~TxUFVm4~ooyjCH^aF* z1G^+NlImlxpW*1Afj-|^;+7%oV!ALeH?}hm+cgHN3dpuLNFwuTdBTJW3NUiafueke zhJ1KiKFgA6v>iB0EYDzzkub2&utOE+Hec?Ur4$CUafli4F|P!|9LiRp;a9+eROr(| z>T5Ia%bsMFIK!5&r4`PkU9x9RR%p8w2RoY?OSXJj75Dgm2r9fO4FSC+%)uUELULkq zq9}YlLu?zjOFO>j`5;y3Qj@Ru+R8Uv<5i|r#tw^jaBet>T)326cogCL#J%|PJv%pw zfTg&A0gJ%Q+$PQ<`)5`T19`z%GH(s{BLbNtVAcuzY-j^TpAt#jUa%!76ep~yB$klI z7lcMQ6z94eyz^m8PE=2!Ax^Y-{HzpGb*pByG{9p=~A@L-iz zN}*SgaFlJ4KU9-!*5u064y@IZaG1y(%`@2|RBii=OUr0VD{V^a0_hu1O6u7Mnw(1- z5^W2-jvD&Y80DHR!}%*~AI-lU13}8FUJ*d$-NZfbVa-}Rll6me(O;$t7rM$^@Bm7=*5DWH`&#=X;Qgch^6w})siFWjiAiC zLHq0Xt|IZ*534@=jY87zuQ_jg0yxxfHV}>OPo*MQPHsFSDT!{k<3ojnC6lx&ZrxI_ z=Wh41wXSdXbCU2@zgeeMJo7H%YQH-=sm~;x_+PPlZ)VZ4$G>BB(Ol4%#iTfeenA(Pk8Y*LqJVr|QVdcQv8H28LGc7bY>@k%Apu@W)3A6oCxwAnyj$O!v z{$Ly3CuvJNdvFN27Q;V3&J4Pj78N$e?>x;hCYpr8tO~|b@6soJ$o7{!4twc~6`X#; zyRS7>Jn?0h@G+bW05E?LQZUD3ug<@TzY2tBmyNu2UI=HTfQ9Q4ecqh;1{Z}?;KzT+ zMip3MzB;1z8Oxt2SQ!=B2~g>$ zfT3f^RBVQ`Nq(dNT2EZd6giJ{Qgnw@>G}1s%!{Ovs{#Y6Ao`q75!gNbK!B(q5Gycb zhOD~SNt00K#kgnmB~i0nG(n%sA0$Zut{|h5LEE%>@P}(t0t*x<4WO8EOJx7KYF5{} zcn*8b7a}m?F@H$XxSgcn^5SESt;S`S(~7`ab7Sp!leP{Au8sc!@D)<=ZngYPYw1F4 z_-N(cZ#yGtJ%ghG+*U1}Qn&+LjcTW>baRAV(gmyu=nHhBZoX}5X<1$i-)%gRwKX>I z)Gop^L*Lp8P_bS@rp4()7yDX_!Aw^r~Y(p@`BnGnws=`fwlAb7Y9qo3k^*2`EoH;`*D6c*df%R+XRKpRF3i{*Zf*sx-0vtjV)@bDs^v%+M-asRU zpSZ*7uXuqNNX5U}?hpSJcdt!dJhpghNnX`KT$Y56zIWr|Ik{t8nEfxT-l+DOdlCEF z1?27@tR5*Md%8av*^nMaH)nZc^lWxLAb*RbZ1gJdnMke$bup>IjvBhxEdJqz_mtv+ z?q67a;BxSFJB?0j=zKF?!(Ui^`#Z%v-npx{zrnG^UszqPp~0h^#(Z?A4wuy*Cv_v3 zg)F#fJFrJ$6cccaP+ma|lLCwX$LcAP5NHV&fYq1w*B}G7l)j~uTB_`AT||*RN8snd zB_5u}rYc8JAgd_wtw5-C?AFl*pAnmoHYu3T0p|U)R{z%JY3sutxue*^&_`d}$%Ou`H%D=_B4Fn-viH~uUi$h#Giw}qGog|gGVaRc7*YK4+2eBc`jM0G-k zv$*_coL$KsEJ^~1yO|1ygxP&D;c7q}xce|$amKJdV{h{M-s5=t$kZLf@8@Bi9!_44 zu<&F9BOjGCk1v` z!H55rWvADS!lbjbows;P^3jbIY(@gJ5RCjt#_;uq4Vj#JiIrw9nI3hK4f~b~oty@< zIiy~j6Ze1$ACrc_lb*PkjdGZZ^p=|3nw~n0jiH!|_JEpBhn~rrjU$YTWs#aq@qwOG zk&VxqiffpfN0?rKjZH+6N~oDyn2lZxlTDh9N}`xrQc>WEBBv}lm3#`dA}0OwMOL+2 z%9ml(uWsoynpyQ0DYZPQb*u%Ig*gp|Da%o0tx^(gbl~RJv8HUC_QjNz&515LNp7Cv zP6x4X$vHj4DBpP|`I9I6FD5ZJCrwEuH=HE}HYb0)l|dZDh1^1;6)D3PlM_8tp!_L< z8&b;_Q;V(R3x}bV2NV@LX$^{YLcD2SxoKri zX&tv|@rh~G&CoW*2pa@@zbDJ^BBGa^ZB&P45|d%Nm|-@IYg~u*OV}e;$7ESf@n5)Q zT|HplERI<}VBH>O-Y<^bRZKY2fgZ5MeIHIZ6Na7^$Ndx*y(WiVvVFSsWc}sI{D&?6 zw>2wBml>5k0XaMabBP1JBmw&wD=s@T!4ln*lFY#r7;%XJK07P;E`8aRaT&6F8FgM+#z9X(edh$taYC*di5!iB;#A)y+#);aip4 z#?_yhtBVw?Yx=6y533(AYor3JOA4xM*lGlVYLumF?yVnc=#FY8ifh2^wc~TG7Wf0^bfqT~}9EpAtu1grH4M?q1rL1pfsCyw&t6>X~jd-Fn zO0Jg{sO4Ss@>hM(NS*LZy`gafe?UWWPQyZXgYISnH>fe5u5nSJ!NR&RPO{N6qETzG zu{oy^3Tld>Yr;Ed^s{b?l57f#Xli7S`8Y}zzDyQdnq(qUXv$EZoYq{=kP|IZmLO7` zRN9;?((;a9BI6hRr(Z-A(k*2oE$P3SedAhQRJRnSk<}cLHe#n#r4{G2w#I6=2B5d) z@3&^@$~1Ej4z`jG>rstH5Y;KS%}uv4qqG|+wSRb6YBm1VQgqlXZ`O{+*0w>{UUkqO zVbivuN4BM`u+yrrzf3Wi);`RDWqGG## zu{ z=Y6|Z_ZoYB*`M|pyMIK@n&Y1Lah={yM@k%YUd>}KLvt@E*M@_4O1RjU<6;@(0fkj6JXQ20z5Ml1RzbmjwSb|ibI5NG0=)C)on^5ECnlTLij zh^D%XqY3cz84hKLA7zf8SiG3Cw_nJIn`iuuV+_>EiTofU3KGtZ6r9v4AOaK(6I{j( zvP{lV?=CJoO!K}mo((q^8<`bSo>F)8{Ke!yuuNd^drF#OTHcYwGyqrOHvy$QXaXs2 zPmcrq+vSme?&y)gHDCfRWkNBaI`%iE&n3YNV^HhiGLj=laD2cg3JzqO6^{VCR*^}! z%b8r!Z=X9S%rR^IL}8)rMJ>@q>HrY6w_(oaO4Q9NMlK;M^1u1|2MP{Ceh@hTB@_Zg zQiBsv1L}bg`IQM{HV3dpW@Vup1Qx&js(!CgRxfE?dK1jf)5-%XBAcIH2wacN!hq%koQc-)k#JXQ zI^Iz@gbQvHi!Gv_3eCX1dL*2y(DZ-!I@MM;wb&m1Btd!0KYV>@+a43ZF%_+j84C-o zbCxXbVU9@U?(hYAGJrWm>-GUb;eSKxI0x6!+nt`w^(QFG6+69JG=0^gk>K9 zdIpGQXM6Cdlz}H;%1xl*K^powS{%V$p#^$P3z zs>+3=)5S>FWG%7|uKLqrh60l-SxK{J=-k2n@^O~Du8JkKQhYGrr z3v|~2pnTdvumt;)P;K8PoCJ7%2j`R5t6YJw4^tBoaBJW%Zg1axy@AjAUb}QQopXVq zx({ot@4ZJg?Kx3{n`Mk8D_TBmXzsJ=d9`JIY+l!&y#P>$HRNc?VeX*$=zkVCK zA_cn+0RiN?9F*3Ud-cqbF;O?^VqWiwXp}*(H@I#^xb>O zPPc!tdJqQ$9MvF&)45p5GaSv6 z$=11i+YCQx>`(UE$)J!HJB^$;qKG(|&QC?e=B8*9;O&|~?UtmJ*^Q4Rhp)c71H?sm z6DOcY9SrGUG5o^kB2qY*YG;Wkc?D5>G-xr{MXW@6Aw{UcU*vy55`K93 zKlhjkSLd5_pRfOT{Da~m{s*3}uID8V9b5`$+s;wM!=$m_(MO6tA$00u7gEIA;&#D+ z0^yFQL80Se3;%1^fx`-g65U9cVK^iWnd*3{aduq)%722R8JS(Zz%b#rT0_J0~lj@_{Y$+F} zil@^m;KyPCGfBNN-z^|?dA|!rmghk&{+C@3{Ku{rCQb>f(%TJ*-)iE@vvF{8kAso= zG?r*Trha-8Twg{YPZ`m8U%(Dm0I8>81u_fL(q{l5{CLv5Z*9MFdAzl+HDXy2-CfgZ z5kt}lE#g5$;+l=3jOSH!GeQF+%L#Wx8F@LU>=q!yl5$AI9I#Y7?bkAg7Q3&5I@&tF z+aR&*(i0N;9X7xgHSc-Mpx6jEmXm@oLc5bf5NikX=TN@0lh2_kgW9bhHPB3p|K!mN zSY?i%d0J&VcfDE9+FWb><_rf7LQqpG&0aCfCBy_Lcu6EM%>fuX%jWD|(SL0O^V&cL~jlWH?gs(&V z2s^HAJtFw5`@DYXW5pb)889}}b~E*d@_ngmixs>0wGWW3T7xIG+Ytefz2~AP&}Mpj zcs_`k=;`p>WjQ5yB00SwJVrZqRdD&f8?_^JAU3KabfRCh^WJy~&0!_qOVstGG+l7| zr%h@9!zO*6pI@*q_KsI8Z=(E9KopgH97!)=N~itn4>lBkZ|? zyJm1k4?>3(18!$0^+babA^tO=6HyRH;ewG`Ko2rnBNI)vKoslQu!Pp=m9OP`;Yim@CQyv!uoDuPA@8NlN zm9I=eVWy@Sf~Z2BMDt5y9s49Bn6MfQs0|tfya$C4)J@pK zBYY-7a!-0mcKon|yNrizUW45CRa=cbsw3@48W!9(e!wm6TDy}uwVg|=qTXls7$xNK z9oMNX%1FM2&J0VTa?|L~NTs>!jp3rv0f*pIa1tP|`vE~fd}eq6c_uwd58B734f>$C zpS`NE+r;AiqX&D$IA56KW2zcyirMJLDktkhGBK>hYEu*g9yDb|_ZimJ(Wv0UW3hlxxbJ$g`7CU>k^bA2(6B&URQxyafF(dI?tmnkpG^=N1QbRb zIG?|FVBsJlSQsU61x_-s#>0!63dX+IX5`z`TY?Wlxtp&#na4ue+?xm4QoP`Tlq_-a7^itsc*;qV?J4Q9pGWOI z{wNqdJ#)9+50V7jkfkodTNfZX_DS@j)7`-Le8qCq0MYzCd0XfZ*e#QjV9`ja@d7i7 z$}8+P2)Lframt%S6m^p5La~oax zV);y$IboD`o9UNh#rrE_(t^@0JM^8Epz7nKN5W0+jfkwMwcwQB5@s%(^8OLl+F$_R zojpkOP@FMKoZPcu;0~c?%O|A#K`ukj5~tkFLY6|S7&G+8c=W@ zPe~0{|DUk>`o?iuMMJSN*bZ7NEN~gf*O6}T=)U|ftbX6=9B6N_byYIf4JTHrk1b+w z=E>9ftMe~b|C=;#MsjkgCd}DGk~AFpFIZg$mNZ{ySwc(n9{VS0?!Qb#MKf_}`2JsO zr?8|s$L+^|lIDN0`W@RS`92}P@7yOb?xKINy6-}4*PSv=4lHT@{Nu}CtiE|pJMD{- zOzBylzIkE&_+w@EFIL~YoX-8Z{uiq+ce=QK`-|1Ry840tN}7v%FTdo%lIH$<1c|my zuVBLik^Tqj8{VV3Tes=m9lNi)VM%k!^Q^x~bMa?yO=#X-sa(L>D=go|Z(H}Z$6V)T z;(lw(#uFvqU`g|CKkD(k$8MCs>-$r`U83!u!{4ZGlDqwn`14K2yaMlv#RCu|@}HN7 z10OaWJTASqe{ECoUiFFx-lqSF+vET6yx1LBSCkJ+ntymsaGKnKjLqlEQvJ-4BL`HR(o13efA+~@~ASa&@I^F1JZ zi6)mGdDdPW>E0{hUTK3~eD~f{`(BCIUZO9(huOWN?Y*Q6y*uN*Lg&2{hyeY6&R^9Fsd{Q4MD`=(<18b3q3nFsoisw7$0``GRzhtDOM(EDG}N%fIQ z(F^x;X-Rb{_HVg$^M*aPAl0xgm6sH5Y8F~(OF#<D=7AoI0Wk3Zozb_#G{O$-1Tp zP%9OpEj{cnBH}?FMY@6z1O3}rm%Bm>QfwPGTo?{>5Di2Of~obGGJpoj2)z*SAGMAs zGawg!Am8~;-r#4lZ6B(66??q&NP_g6>3unjpUDz4s3~lv2IeEFU*7O+jO><$3lsn) zuY=N4u~x?#K30tu#))_|4w=5e&p0S|$$C@dK1Rr`;P_@NpY4rO$7t!mSh4+>UHe$o zokGUCLd*GBEuCTzy5h0Wczs+qw#9h!MH{mFcuVRyx|X6!_IUficuwee$H90PVp|*R zvJd`5uRqr~?L@z{QWC<1qM{-Xo&q1aqJsUz;7j6Y7;M2*aY9L8^24Z(OEHKTzJcG4t%%XJ}NI;ovjnt z(iYW<1~{-ydYH{DR6hb}p*v!M;DNfXGKQbdisE#zk@9BX4EffiBY z43>%Y7KZ9E;5RKU8Z5he)Q5I9dEUqJzRg(9Qq^>vCq)WculOuH_E|J*Wm^a+K|?1c z6s2(aanCMupG7y^Lp4=qrAIM@S4wcMM!aM#jruEoyIO$v zs}RijbR+#kyVc`&dNE+8P|2yxT)k5^P8e2?sb`9NuE~k2OGGPA&RUM@sRPV#7Fp_i z5?#xFv-WFsyhzl5gU6tTXRTRreLQZxnZEiP!FZcddn=N1XOltq-a6Bd^#*jqlNW<* za>Jnk0|@IzyTL|3!3I~r22!qJS(V|4=%*p}qH%i3Df-uwgBzoYhNE|ePraW_2P=MTf*+8Y zu4GKG-fw>lH&N2w_G#b#xhZy~JORBo$%!@oZM5>NJ^P1u2LZW#nPBI4mWip<4obvM zUsXGDf(aTSA9|WLys>GUqa+6M_{*m0+VzehnOO|$?yjhruHx>*!VZXUgVxZ@D|UA# z*G#=~ch267D2)fir$h;Rbr3TI>uiuWi&Hln(DF%8$wKIt%-SH(y``ppMzOcdd^{{y zf;3L%jh5yk4dw(}du$B7uaKo)V|8+P>Ts7BvZaahENSs^nDQDcav|?Oguc6U+gELW zM>qLyzIy+0eINPvzUbw<2lRs@HVf8{eyJ-Z8QCofV{utyC3z>VH!AyrvTp@dL=+w* zl$sA-_74JH4sI_G+C41J<`4KO4`+oeftZIA_J>+EG1^Q0x-}yD4+;jxa~dk*hC>R* z5wA^TE%XT4ObJciriqwSDp)`b-*G5d5gt9An_35oSeCr8liid~JF@2EWoSG~U9@zJ zShRs2-JTyMuvu?R9t{dxhZ`QB*&Q1qTVpF)|HwU7syX(CBFA_kZ!>jS`$yCSrU?f? zErTAcMM;j`>1=xOPTUMn6va+%>}?$5Z0560Y?Mzzj?yBJ24j&sVzy)w87v)^Y~l#p zlV!z{C{0spSW-)jKI%v$=-8$q8)if(rR&)4CfWKlpI(fg%3jz`e>v^^bt*=FR>fi$ z*>$=|V4bXD_Y2KV+}{q#$!>Mic31dpq3ujy!mjw}xFXLkpCp_&hD}oHy2fEBidN>%7g=ycw&#W68ElWv+8cw1>~QkMM$1_5$wC zzKz>~&EH|};%orAS)AuE#-Qos^cSu(UpU+w_Cu$aE(U8vXFaDT1FhyM*%ktY7qKLl z(@d6zq*hfdSDZ}Ntc2H>BsOcbzYRHv4?2F{cWj3`o=`Y$b6mM$USY^y9jJ62LQUty zY)_E)cReSLJg-i_I$f4r)vsUSzg%?%2yGyyI{tzPf7m{C>{o zT%F)dVfCFTqW=X;0=i{(pC$#!cOJrXS^nX?!*LB4dGx&X{g>x1!iU)#9T$k@^^E5= zD8dEp+jqqLYsUy@tn_pA?H!C|bI`Coj)^JmHxdHX?^vpOcwUnDkH*AauFw?Mg$~zW z#W$p-nG{5#gr&}uiPvcS=j3uG;OVU&gwR{uZx@&*x72@JP(R#0I^H5b-Y`#}uzb5_ z9lo{YzBQ40k9Bo>_H?_$?iPA@`x@J=N&EJ7cN*`9AKd(Af^ud;k9$0kq5?z^(Zmft zuODKG@5TT8!0rDrx&Px2r8^(CJEN*Q3*#-9$Q?BHZj#*{;hS4t!j96iJFU;G^5dP- zD_Dfw197THo&O%;>P}PFqYvX=+v~oI?Or$Cqf6;t|J!}D!@a@sJyx8D6p9&cw~1-( zU01t%+V6XFY;lIjabqIO5-CqoO;24bPhCn+m_MP+d!Vd&uwI5G?hnl(l}xrhUGgoR z#jW0BYr00hcQA2va(;C9^WggE;RbcK@)q~NiVU4HZ#hIn~Be6W5D zA^HiV^XB6J>0Ii?vE}8fEY}WPot(j>DYjbW2fZW$DnDia5*o%0$>435S9FsUQpt2 z1s$y!?w1cfX*RxTA8tIlNfsxPDNd7fekya~;Bk$jG6v%^7vi$Q1?B2K<*E7()BAWJ z`wVY+fzbe{5GKRA^jee3H1Ft)jOeVNg`quu!85rRiDW!ok41kpMK=4l$a5SLV#)!hI8wFb zP|lI2_fK;IL<^?TtKZnxOM#(U{xRFWKmGNd;(&06KzPy2sFmq>GvFU`VEZe7fWQl~ zy#KpIKZoQgMLPLw@c{O(FW-oOCCmO*+h!~InT7>GBc`CxmGCHi)<=2j`)=T)IPhos zpD1SN6$%glkAll)a}EAi(p&%xkVZ#@mDj;m1yN|Af0i~82Vm?cff^xMi6mTHMB+kX zUtR_Y(|WGT_J@^Jlz`Xmg>6I8G%RUO>Q9XG*P*j8;M(v64SZ3g=A%C;+=~pY1}i|I zU=Yy&vT9TcJF8adYNOq9z2o@<`$h}m>{#{rN95WVP~idfPpv(P43KzgQ8K7@3*djr z#em-U`XD@!R#Wz8IvA51R2qllT|^TT!o(s5@-Cqvjc8>#V*$A84v*F2%;i$})L*Wq zBXLx;4BE={0DPrh90|^QKe3w(OzUA6oa~C+5E@qr`(W)*DI!PcQe)0 zv3n@!XTsQ@A~z%|B^K7~ze?yWhtg(w)5QGvltH5oKA}hR?xmN8!;h8-3y*>#wCdr+ zv5nE^CyKz4(5c?T^~lON0teuw*~t&!r7?ha$kIp?jm9$DIGIZ^23$N}()q)eMFIOwim6EqOLch07V+2l^SjGiQ{i$U8@mIVwj=*qE4WC?5w$q6jd%ok?+YO zRZ|jwSSdzlz@|Axbd3YB>B~xs>7zsd(N16VbJlKt9|bCh%Ru`MP5+MT&)L^NaL!6d zFxiVHofO5Hl#DhDaE0Y&7C5D`8y$$WgBfP*0YYKC1_hIk-m1`VzQejFeeRtFCU zq89Q!EiJuz+Vy%!unzFha!-bkG#&Iq#O^@2BlHpnP)P;UPZT|?dU%v=wcQBa9_kyk zJc5!RP{dk}!aoE;?-iysW+@O3lX`!|+iY@62Q;a4BM<=_#iTFM?*d7Zum%4Pl`dN~K7*Gx#c?Moi|tdEnjoIH{?6h@QL|Hl`XJFeFF>0Qf3^ zL_#ASqbEk?R32o8_SU?vpgROnf;L(>M4~>ZD(}Yh!-X5w3;YiJ(`sC-*zF!s=dpk; zdsqZwuMw(8dLR33T~c`CXKK7?3h6CqaVEhfFV*>!Gv=sBDBW4wjX#+fT zl%c5;?^xzCXx}mV z?z@)=?=w?)kKv_V(yfY~3o7}t0JEO&j>Hkx0#7<#ML!tOC*C zg8{$qaN%e@7r{j@LHH$*a2CB?G+H=&J!-C{;Qx|*inB-rQA1#tY5|H5_^^GiGY_mv z&Ow?qp*Y7XF)D*EEitpT(KjrB9n$5mA+J@CMnkOd=7(nHoNE9DK_qyZaAbSKYr49-_4hO}!eI;-?UgLIne7pprit8L-bmfMd!Y6F^zjRCBBeV((W zi%lFB!daV_DXB8)tq^#km7YavdO622%gPqctx$J~P-372KJrdD>`H5TDj5)or6?HF z#S{TbQ3kZv^@77#-~fLs>362U#3Bt!_^0TQ76nRX9Hs${_a$;lh8acgs? zr$bumJLO__(u1T$==G;p0hfMBFOnABzkk1yhM%wiV6^n0P;v_gEUd<85sra8UCm7= z_R!|B`$qoV(lg?f^&cH*N zC1jM;^uiOe7UU@@Q?uDx^%OtSF%-VPt01x8M}myQKgr8Kljd>KW|>;)pl1=39hstk znN%6t%{+($38C~%-Q+q4O#7JxUkd^PA6^Bu8rejVx3v{^@w?ZtlF@FW&^&!@s_(^g z3B>@?AcZvbJR;z{?iPdqRNb2JOfSA3RXi4N<|j^4yXe3J~PZU(GGM5qU>ywe}MjI6EwaC zkozB>>v#i*Ig$(nMMOZ;E2SoZ4`ZpM`v`ydrn$vHiJ>Ap(dqY_Hu1NwYDEC-a=&)s z#WcQf56Gv7$d{B*231u04T{qKE`gsZuNoG*uY5I93O^Hsa(;+J#M5rZO+`Y>E(%aK zxjXr+a#5F(r=Xi3y)=Ay|2{gm2gK~xwEM}k;hIc5X4$PWOf;!=dGp50WYy=_RaLiQ z$4M3n?=jJBwF`yue&TV<&Fr9Wuyf}*(v$BBQFRE(h1Mf;R-nE&WywsQaT4W5W?pG^uc5dT$7B06Dv#66%i!2@DubK2GeezFj^S_F!))!~> zyf(mA!T~U0|L|YMGF%x@HyxDG-yq&vw*_O!l2qPf($*M2DF_iMks)K3LzGLIR9LB; zB|vo2Jq8+cM#=%2wOk2-Jxql?EFEcVSt=H%be17d7C5OH34qX9#BOJXVV>mYF@q95 zLnZ`5d;>z#pJ9deOjz_RznEQVgE5+DCMjsR);@DVXTM6Qa+4x*oYB1UBpC@CekCbQ zmT5B8_*qy(^L0J-COIvglc_WZC3g%h#njua1ybJIU0%sW`kHqZn{MG<#EhGF{F=F2O1 zTKPRX^TlElnK?RbT=+G4buo*LL2V28Ag1IL=E4*fdU{i>-p^MQ~XQ$NE8cEFD+Z| z>Ycvlp+0o~E!shPZ*lNwu`&&V@LPIMogsX_Pv#sYu*EHp-xj}J7*utREdPph+z|n5 zYdc&k@A<2K8ray~1NAXnCnsbEyRbB112u%@m{Pk~LtXluMr}{0c8_ z$i`5~#%YBqUS+}gh$-;)MAfV;acd&389xcR9D;AFwo{hOaGJzX4&W{SD1>Gwdm0Tc zS7l=UWQU$=#mwev3wA2^3Mo&A#$<5lWG2{p6_(5DmnWJtd(|^1_AzJXm1l*hp?n#psJUWt&gFqkAtnBuc}{+Z9tZ-?$cb%u%>I94^@oWbO3l%d zs<9dvR%iRIRyF`KtfH>eUM>?Eiz+ zUjb0+0N9*xM0IdfobZfw@UJ)#`0EhFIT7XR5LG#mbnB2zIFYUEkexYEpk8(Vf5z%5 z|KGyu%TAF0sitpRha`^9ENt%|e=4p{F05!D7(4%dlU7{a+%vd;d}i?>{`UUSKRL%X zG|4&gV`y4IUS-4J#9Vn}`~N`n|AFWub%p(rAX2y9M6pccmv26CU{6`j}vBvWGQnk+t zxe84ciZ!Y^|xr*OvHru^_oNbPOtKIGn zLO`cfYN^}pkHTX$o@n{HKb%CXn5WcQe>k4OZND|q+HgEwAQelg+}3zHU#3}U4BN3h zU#@#Mo~PX2e7WA@cD^;){_XpAPbfN-N=M7h{>VpGlc|o@AICGF74ua(+wRX-8tk{H zI@=$=@AN}s{|BP~zl7)(|5u29IArhqZ-`$1FNl7f`N!$*FGRoiZx9`!$7O(6)8|G8 zLpSGUSl!7%eHbptfh(0pSNe98jXRS|<{yYIG{&YrK{;RLmdJ;Y^J5CKztYevj^cP1 zCuN^{H>;H1!t)oR-$$w^8s07FW$QJK>B1m-ltKT-{j!A{@q@H=dUbP%t=wOTj`#CH z3I@@?eemG_2cqwPdz6Gh^cMeM#=j7~!Rx0445GLA#1s96=%M^i5Ew*n^~^L7c{nPV zUiSGHM9Fj@NDQf*tNH@D{cIH;Dd9 z>~xxltn)l?{#9#hhNAe@#nu0Y=#YorSAqRmCeRBx(AlDMaCy7Qe?oLE7(^##L(=(f zH$T6951-VFn{^!qtENBkjr5xMTnEP?6ar~iAh;FR5dss1SO_D1gb!!oP-=@Ecxoo; zo>iAfd8H!U^o&l*XBXY2b`zX)IgZc+`>@S(?8ls+1BNnRBQ)K2KxXpaXzf&E*Z0kd zobLx;zs32W@v?)DX+3mNsP1QH_^vugUJ3^{`NKy0J3QMmIfon9gh#h`1hKkua6k=! z58Ib2tX6rJE7gP#78Zn04Kk7n^>0%0m2ZDxEzzlf$enHp7#L zp`DI1I7F=g{-^?ggmF9NJ*5fWhPvwtbaSb^ueeI>)Uy7MRQm4UR66+Isq~(AW#5-0|fBFQGh%+VmMS}$q<~dO88BG+ZGE2 z&1_^qDbkHi3q*l1IRW3DUitXVpp05@D#VZhG=e%19uiUjF~m+{(XNhJEC}TJQqgg! zj+Cw?hsFa?MuMRA6^8^11Qi=&rXwKUF1a+Nf+aC~3~!zniy}O#3R%x})nb-HD0vK7 ziGk>Siy@&cU_%Vhh&jTHUg%$let53d8#Am8@97vK%GzoSKnURh8@?8Z!suHB1n2Mp z%6Xw9b_g?XCy|57-n~AvrXpG^&ib25AF*IHNE)~DY)J@rFmxVYm5A~9=6cSq3$%wL zT_~u5s|z;RwOj8rf2^S(ST^o&*YEaxXq`cFq(vFm3f=&e2#f^l^lNK}oD@_7GFSr8 z-*3BEE;hFi#5&Cj3!FNIw;`+sw|MVpWIXhsAlyh`JF$cyN1pfMV(c7A&NU!T zWd%2dmVw6j5Sy-~3kMmUO2MgLuRXk4q;C13(wWii-H(4yB=z14>rhpYJ*7x^3C5k{{ z*z#s*T4f;wH7=9>&Gz~5qa{4$wv! zz5AYcfF8Nzn-{g#)Wb41ER`MxOQoC2ub>yrXN-{pcsp(RqdPR(Wksj?>V>NBuv&#t z!pC_yrT(VU(-TFh?Q4C^aNZ-k!cytcR8fHlYTLnvi`@~b<(h@Qk5tDLJF9zsK6M;; z9I#aSo`%#BQEk#ltynd(ZAi-!z(>$|`D!!ZH)M%4sM!!50);1W4dJrPG^=?5M!KRAFf ze6p^ejL}lK(V9$P!7(*m6pK`b-T5$HkQ_>=t~V~w4~P@+N&pm3#E~c$I-w2vsOtki zYXWy|LjPdAi)#WQ_J4~P)@l)f`reP(i(+w0QH~{}4m`qDkS+IU zEX(9UvVsQY=>f9RxC}1V!Zi1=84&3yeSrKD5v!zEPk^8wxRf=M+tYz^9#t1q)&nJh7$D+ z4JHW-o*)IbASI3<4Z#yL83_duGbIT#4aF)m?Grf_2_-cuANms;{V6#kDkU>245F7a zbB~h0dZKv!hL`n}jklGY{}cw%!-QAaM9ay=S1BY`sby@L6{E@JMk(Id@=1-dDf^JC zwo<6KQfmt`8|af;4oaKC?j-6%j7}3ZTiGlH$xQ^)99GkuS|zPp?OZe2Y?;aJpVGWD z)4lc67kbm<_tLvv(|rXq!dj(+PLtiD*&3sXc#vRtQaY<4snxPj&)fb~&?nJ1SG7 z4_)^YW3N7UXE{^)|NPC2DRjq0;#qrthZ=_xeFU1eqRBUp&EUyI>n1xxA`JY+DW2mKAQY2ym z<+2!LDpEv!Ba~T~7266`(PA~xnAJ&(ZhV5?2r=sV(i_3n6V{6K+gQvhJ{c&KSlcmJ zR#4ls&^wa4*rG8y$8fnSFu2)Kd!5nwWJP$`Aj^1TK=O)=R9VqhPPkINokH~&iFS67ree9G zB8l!giIG8wJ}cP79`9WxiDfp0^*DhoE1tbQiQ{>a!8n=oFI+ct4%fDe%WLa(v5NJE&YvE!P!O0)@q?P-N?3$^0p=%>C*95qOmq~miC6-HVO3ht2gZ&?_1Q(+M_DkqmVmV zW80s1+cj9*1`HTG&L^qBblrkGqa2+IhA$m*BVewBj{k_Pr`^2CPIlfmM zzFkM}(CiSL+P|vlA|qiJ13oW!kxGLC7qVCweNKk|uBJQZjEI_zN`D;|ip%|%^a^5;{EYU^U zg@;Sg7Y-R6pkAex*qhoZkDJj>w)^n0kBD#z4sH8j|3AJ zqf;GYa~DmgN~8-N1cU?t;$n9)q<~L)iGZ2O?T$&{totsChmrbJx&KsC$5eLkczVYO z(guO!uqHf?m-wRcm3-pIsOiy`>36zb{3ir}$^OQPeq?1lD)uqpW{*K~xM8@@oi211 zL1Na8Y1Z~$YZq7hkJ60D*TExl@bttm$e@qXq0i*TXq?wrP;VMfbb^K5(`Cf3i+^4y zfS8YBMj(DlS(%c$8t*cPfK(nd)D*j^$MN*y@?&^9N@j|OeJ&Sc5s)&^*U?Vf`RV8J zhsMFhL4OVt(EvA!Ad#U3VgGqs_C&!C$mgMY4ApPsN|A!HP^?xJ5P#EHfjRNsy|J>~&Z;uAU1a1`JmdZ2sOf zk+X;ea~P=Y2ny(HaRQvxw|Ra0CnrY?U&j=ey@N|yhEs`?3z$aaSmzK0Rs3{kDQT|U z94lj6wSn8JvWDNAL%_uXX#SH!C$8xgx!e%LBviHH7-3qD3fS8dh#V&dOpa{6O2A9L z-2Aw?^KKcqw+9rY428P}isfxQRPS<%9GJo-I`JiP%k90nn(Srg=o+y!Cgd6xZdnT-X52?@1kywaBWO*J00%kq8w0g9I*#K41cJT0eyhI zJ3+Qh^L8B^Pv{&w{ogk)3TN<7Gr0~P5tYIV&i0{gih*#Y_1g}ME?MeMnEmv>X{zOV}FVBke<*C`}$ z+k#_ditLOlkdWspj5z`15%pJ+4^aYYj0x+UzKl72%`;w%iNXT9l3r_bmCBWk9 z->qO3bWQ`@pvV;UJH4|@tnMF1vwMFl=wEkW74&_0L{uyityifER2}zuwXgrd^_3_AU7I*}wOACDO&`hB?DqS$7s3P^}3LJY-S zQqKJ=Cg3~yG${c9pMFWTbgz~GjlT!3$ORcA=~vnJN8hi{e|jIy?e3|z|1f!Z18^96 zAg=)!Sj5CVArcXoB);-Ld#M3o2t+D80ud7sE=x|KFafn9DI5ai1aNQCKvXaRF1eC7 z4j?Lw8bgEh1pc5bQ8WOGNSbOUStt`vDU+pjs!^hx%4nm(ANeXbLy@fr7! zROdpk-f}X}5l9Gw=#HCRMwLs28;uCNEY)Ro)R^1|rE$TwI5r~yTC$^0f;UQ%JQAp6 zR^Bw!Xpu~~V!*0p)95e;j1=hD>3)r7+h^tcF7!oK7(_Q}zke>hvtMg++(zakdvx0B z)Lb7dGx+8>fHhC2^-=ISpAFdrO_n(c7 zGQr5(=j1|uWEKb$HJQ0t0U_smGca;XI{*P5`E4+@W=W89jOJV&T_=$x-AA^E5{*Rp zKXolT{cz}UYLWn?7icXcqCSdSoDwkN20?=>=%M?=QqVK`hb|*X2H&2oL0wLt?1%ar zMn^@JpJFkMP2`vww1qtW6WAjc(tXYlbvPT-0^-!FsX{FTJr5cZWIMn@m~l`qHCn+> z?ATP_@l*}7d{QR9$C!2)9B&*CE2L1a56m-iGY z4&X7;dI#_X{B~6XLE@0GTXFVMhg;eAqn8?G+k*Y?HJN1D@8htr!8bWX&Sf_MN^AMZ zajY&0HS(&#C}f?k1~S{}k4wUnpGbt93J$csN82A!JPQTYnMB4pT#(XWT#|R913Jb} zJN>+GMlk~Xe^4M15AVa3(H4fN439holhq3Xh+MXWJn|4uBzQvoPb3tj3z{hCEK~ue z2uRSe`6L~T0fJuP?a`Pf(*2uBurMiX;hK=e7IR7mRZzP>MVbN|-qf7HZDf!ug3TKV zthoJA;fY2-YI!6ng5O>Bc|wz1m?>62Ow;f_?>I@=f)%h%Duop|gT%jMW+;gWffdfe zs9j8fRPypQjSmR4Rs|xgz#dl9*FofArbxPIJtIK`V&r@k-e(P9fDmtzsv}6O)K~s& z!Cfw*gGEOoCyMGdSLIKCPC$zt&e2+nJdkTH*$I(?%(g-9XWgjUpV59iMcx9XtvA>R zLZ+08Hc4P0i@2;nNFlCNSQtJWz?3`*VXaYiSF~Qqd1Ln(XjMn;3G#%z$oEr1W&2D> z55m+^Qm6&fzWc-BnNf~qiumq_0>#s zYT|9dUwK|T=KA@h5hXP_B6|_peRQg-_WKe{+R+Rgt>~~POF=UjtTr2?M;=9}Jv`{m&RH=@ z=U^AWrMHMnSXVtrZEt2zQ1=j#g8KDfg0ozI^Z7VO|L4I6Nn6ly@?7e*L@^6l-&ktm>LED0o@`ZSK}eG{`-Q9u( zsdOd(KIiPy!=ChH&ujkGwcd5Fry-Au%tZ0^GHWn7XFl6YlDzYyM#|lX2nn*|>88>(QQ%&E>9BfV*CUdavT$K%3)7!;x#`N{HsTK-c_e-n1(82qQ2e*bx9?c5Vu zP1pG8(Rsgi@vT^B14i7dmmq7;j~@!ryC2kPvi?H!sndTT`ZunD_x1+0bhG#^uSMYC7gj&L4b45BI4EvyfD{M&kCx@;8wdI{qh<^Aaoy(aVzzAb9 z8Y`<1!lw5JqVIi@$yo%j6CvrO&`Ir*;3$NU5BIBT4Q!ssWJ6)OLI~3XJ-0}foB|Y< z4`|N~tl1A_r2rpt0)NdCE0ZFrbae8q4p^MF8~2C!K^tw01>uZ;Y&kU2E-Ny4_GZvg zOWeXCmUz)W07}b42dK`u`r zoOXmbU*T;7u14svK$=1X>qzqFw)kg)M0mx}Ir)@+MUoFANhBi~HzQ&zBYmi&*|ejH zCnFG{(Y(_xfW>Ihvtal8(UJtE-)~0c(nrhtMPCs zL^hISxk@2+N5~GP6;8jBTx>b~L;3*{1n#EEzAnk&Qf!{MWk>A%gQoy~=G`HGNt@DGQ*N6_Y@b&J%K&nw3w@ z5GzDdxkY}#G=mq}f~2ak3er@9n{6Z{L_-0fw@Hgovx~;XfTSSUAymcYbtx9FrtrOU zDPG#B$!3=?H79ImqSEpKCHeHcEJM3A{vcWmcRXz(S_3Xx8RAKH*%=PU=>n4PdoF`? z1M1g#@)00mg!;D0Mvo94h(T`I>(;CCf zOyL5h0SZj)mRgGLbN(_aT6791Y-FfFQk6nARiF?0+1zjnTChnOASL5qn9R|axm#q` z+kQ?8^Ap6H5v;`9I}P2BTS}auFY@x zWy+NomE3I-V8d$dSgs#AACyx;Q^!hYM$G^_7rI#ifLvCvj8a?EL8Iu@Z_b1)=yc(D z7C4j_*GDmzSc?M$7yv06$iFH#uQ6TNsu+c;0u9R@?Ea|>QC8shmIS+3O6u6y?gj# zL|kEU3 zb8!qqI`Z8;xZN(5U9z{kEc6xwXXXqM7ND$MdB}Uv&nrK={Bi6$T5*y^zgKu5y z`t19GR)_XVhjYS*c2S4;={9rahYy`L!+|!O&xf@uhpMDUU}jrajHAzDw#I64i^J2Ru$^NRMY@$JyYkDU3Ai;V25?Cny& z9`|J0u~i)FMcGA&+2s^0R4G@{t5heA6;z4VI7v0EE7xI&G<~&b3_1$tv#+fx zO39LH;gjk(KW@zu?L?63wlXZ;w{P=61t%Hx(4T_UB>VQcn&~YDCuNxe915E3M?4(F zvmCT#Py35jd)7O~=j|YqQKwk&XVte3GhGd1_?zFII%nw}f2f%(>Ig01OD=a&t&rQ# z%bnGN9qHp857!(gj88YR);67t)~Zali|ls!oW5zCyPcfPIXH=wpEi7Tf{k*jusr`h z=7eSPp%dpVi1SYjmqC)t9d?(qDkpjs7s#i}@lcmrV;4B*OPY+!Ut=!COD-E?mnh<4 z7{3kg5L~;~E(V3KC{?eJjIWR(E>k#Hci~qnbXVBP%LLYDq`E!$-6rHyCS<=ID8yHZ zoL4HFT#*T`&w&uPaT>Q9`|B?s-DpIwNxCmP)UMkiuRo1k_ZnR@WrwhF>=NI*VRT1@oi1xZDs$hrIx$if}5`M?Ym+N0}csmVz+ z3bgc!=L&Q|^TBdq1b{<*TY%5I{}w;bi3t-Ajo5eq9C{%v+y+m*cUcg}2?`9b`3QJ` z36BQOcvWzh;RKa@jIs{Npa{uCbWyq>9mt4&Y>AG(97kJd@2eVo zI~nO1dfgE(R>}fE@=l`g&YbcR-1yXWkIADYy@>`GekVP=I#Dt75Ty4jo&O3F`Z^7& z&3&QT92EWjgYLvsXr>L)G{KkI*GM1cK3Ohg>>ILr1eRT(O}X192Z7bRf2g@&5%}kP zs+WJ7OnzBPju-i$zsKwCKiY zs8S=+u{n~l^0Y~LT(1tN0kYpTD-Ggue^dz6LaXTpIJQ3in6@cQ0+tbAXxscVv~BJS zhPKU9#s}1Oef`=Myw2Xn7jJ;+TT$3QV^`<_!U>(QLLRoZ{UVv)<#Gwk0gX zI`lCOiB5zQ04)Y=5kt|unkac%qi5M*pS`M+pDE@L8cy~Gt5KdpJMijwPZ{#b=jrkO z=f!XS?r%oEoC%EemHgO1bs23C{+$L7r8E$sh1d%Rf|wI1M8^OkL2IM}p#mF0ai~Bp z%4rfHo===J+DMYAHeT<;tQYref*}nAO)$?`6LwE;Ix3-u09$L7$kIH5kh+yNUe$^& zKb~U(OPd1Wj!_f6Bmoc423J*3D^cT7D?i0wQr}9E1U3g+IY*k4kmL%Wg_Cz4OvMfW zDuxuPSYIn*rGAS`FtmVCkz+K!(C5<(2X-kH;%j!yTyEF9MHNCFXG0wZ9Pph@MhhG{R!oK<+gBjY#tcaT1$km>hhH_Y z%1DPLSOY%6rpMJR*tJ*MEb07>oNGcO=OP94iaZe{J}9`pZ(~|^)5aWY)~^*E3hhR* zs@_jCDP_7ZrY6`y0GaqVOr2CqEc9K!*aftb$HktB6uukbYgPka(k>NH-#>E=^L>0S zCO}h#1z;n*i(n7N70}j@tP;_3lVm9Fuo*^)CbjH~cT#{Ov&sef7yxT!V=rw-eV;uvMY@V)aJY(w7}h!BBGrk^_gIP zeI^hWBTrtYz^co7Ca)&V=Dt$F-6cHS#xIB}?J1HVjgZezebp~_D_RQ$IYBB zkHM$H5p~6)i?=~OG(;o{YRN(wwdg(_pK_W=ZSvV^!>9{6^*CbgIrIN_-8>Br0HpgF zi;7R{-x{A&Xo5sjBZ7uH`J@2iOm3v{p+!yiCdAAl=-9&J0I&-fUu+IC!z3wscq^kR zf)ucxk1zqxs6M}E>7|j}ur%MEQWO3tk}=`pQsRN{CAXM{7qgI|r55nT)|&?4Gnyi+ zfE024DB(%9C^4)K{VB#1rKBrC{=Z4g3rB6_;0z$P&h)X{($H(+M=(C#ax&Y;AfiFl zuczS|yLr^fxTCM*X5*iT=;AX%L>S3qJQyoBrS%8_1XghgO)A@L?-gm@Tq7p7!57jq z?2Ww>i%ISmv9gZ{9am%iDb{DWk9u^gVq?dZGS{&mkQO>&ugaaiyt!4*h{S)NS60d>4;P{l^pU3kldM$njX^aLMj;GPJs(G8 zb{HrrNeN0>RHx4ADVe*W`S{NEGt&@)*XTS3|c}ncYi;_a^1*V&;HA*J=SvW&mSO zUx}6vtXpIlJUyjGUD{xUXl|~uDf9QfZM;%|qh^N9^bk;hu)Lf-)m zN#)_4Y$3X7x#)quZl{)oi-xVEu>n<-7K}!UluR*Wcoy&&)ICTd)<1T4nS|>0Qp|Zj zP_BDdQ*H{ox&*V(BGeJI(&#%$t{)g4DkZm3);dYnlpCGn_qVekRC|qlnt^^Zd62D! zy>Iz+QCN7paMG(Kj!|X!e&13(8iBqowdeef672tqAL?UzUC)*YY~j+W#o5yYwTWmB z$fAO0$hVXHz?K8BOfb?an?GLh^Gy5En}nij3QEgk%|v`w2#34emgD|7DAaHz?NVW` zdEYX%0zq+8^H_OH!;s9^ix(OZdtebOAqdd?>hz(weHVbcFu5>s?$I7@!AT%9Uh~4; zB))B%Tw*H-w2dlMUORU2-xUImV3en##~tAI56!%KRr*Ff#>0_#cx9gtW`vqYv)OGm z)XJbOUA3XHLDqI_@Pj1J7e}WpVg_11u5Mq)V-{c9ALU{&a@aX1+TIYAYoc=xNi0?gh z)^^I9XPSKsKpR)pd3231;2eMWLm7_K$9hySnz-QTPu0WRQtT5PPYVTHGJu@2(PnfM zq(Oq7%twg>mBTiVB5TcolcP4Ae;y{9ssbB z2LOI0^mTMwi}LT7vUi#H8{zjIon80h3u3AW89zo7G2U+}XYaSWJ-58?`Wb!md|<89 zgXT5=xsvCZ-VXLN0G{LVh{AY3tQ+U96caE!RjS4|^c>t><=In^q2o`{xx}^BhiiPi zWC->RxLXUG`l34x^f`@Py$)P_;0l8|L+#MY-lAG81&+54WP`Cbx^2kJpv)Yim5FXc zo;ndy@vw1zyN&=Wacr~!^Hm16Z5_6W^kHwKQk4?ONA_5n{iL6IM3aL$<^XKNiJ4Ef) z+nOE8zCa#F(}YK2Pe-akL{7`W8I32V9{O3ki5h48#7idIzlmk_?!SgVWLqeA zd2*db%8Vsx$k*j{tcH9w&}x z4AYrXN*E0@K*TaDN-kZHOj+zCsX-J*;P(E9$)Qy0(;PF&60>!zosc~e)=@LmtV}jo zFuo9tEcAQzm{$msUyGctU_^s!Wv)YM3@BLI1cGB3cY}fR8ioC5qyO6q95UDMRit0G4dftJG4@( z;$=J9mb(%jX5AwcjA7JF?6jqV766HYNSQoECu1%*CE`lRjJ=6BrRZfhWvJh z0;s8FfI&KfMYg0tBZ-9#4W1)e>dsrDuf-T+1iovdRGY9+olMo+R#$t~uNFlo`)nZz zZz&_UFGCOHf5g}9+M=|gR*1>3P2G7@M5D3|`jrx`JxHT7zoV11YiMTfGK-^>rR8cc zK(t0jV!DlRRjB!k&g43l0%o>jb)SKJpY+EJS?InrkCmjzzU}#@t4^R&oy9vLYb(uu zt7~mjSP2YK6`MO+TLd55!96dG1GW*muV&$2?__?RS;wL61<)1~vstSc(0kKIzdnln zfMMkxln*AdBDE|wb1RncvIh7Re}OI0yJZM23kZhn_ka6Z@@@Sa4?e7jQ8JY= zoIW%>%O;}hFlGEuzLGI=n=w*oJ1QzMYPLV*&Zc0IQTD|qjJPxg);bPBA%+h>?(1QE zn@l`=X#zG=;;Zk8k0putM@d$;i6|w>LGlSfrQGgJsd@bg9%Cuz2Wi*EP=cNcW)f~Z zaw%f^3T>x*pk)yUW$u?Yot0*mE~WT7Ctf+A`BLL+ZB7rmh6`nIWY(3Feek2l?gGWG#wX2F;~1Qt?0Ea^&Y5P zwyQLdt;#woon-!X#+-V09RF+wPh1{GeF9l$VyS_^*Qc%4*Co~j*)~8`lDBOm--(W) zeG)cHwN*L1n|){)OQK(Slha(QCQ@sZeOnQ;T@y=H6-x*6oaK-5&UKcq{qnAJmhQXq zZU_q);j|M!6O8|F5M9UqFGR2CS7RO6p6hVa9QX&Kdz|)zDu({4rr)uoCbEt~A$s2F z!2eX!StsWIr_jMe1@Q0y zs$cK`a%g9o>Nl#Qqp7u}s;RZDxjnkIsiUK*C?`7)FApy-fED@!z&oHIT=3n)qsf=> z@V@_a&;P^Ci~qyT|HI8McgC_`cXz!!J^Vb`nCkBS{TqP5xak9rZ?ox(L|?M$hsJlf z=?{`)+zPjaQdr+Dp*VvE575vnt(7GW0mwOEw8& z+E1}avfWR$DJtDhb7(r+Pj?w)I>`7iZ+npGwO@LW_4)4TAlnDwzbZH(^ks*65q~N; zF>=gD1qnKKM};X?Wk*FB9>+(;IYG?FB?U=#$E77jWyfU|O~=ROkeWf}lmAC<-n<#~ zU)}S=qVn^$)25U2_RB$*i;kOl`-{$p{ql>h=ev`OZU7?dB^aK-;j#ybq2jU^jsNtr z4UnxKL>bI_JxrVIa6Q6UTyZ_h+I)IF#yQ0LbDU>k+yEeO zQ1Nq8n^3W+24kg7b}?VOgb!0t>?l*k;jGEU7cgP;LLKvzZ zwj-KF1-9@>)*p5gbe(?f*@$BZ4#b(C|2oJCu4>*-S6*#BEGe#PJ1$7ZxH@_XTx&bQ z=$p(w75FYzd-k+N?sHy*Na=BEGKJC6+i`O6bXAQ?!FTnJWa_zRTa23DeQp}@lnqWVh6Y=Qw1KJai(>$6xNzzNewQF?FBEhO)(@jNPBTeL36j}X35EY<1|TF-6b*}w?*3_xi2Be7x33aF%VP@A z;RNAtRsa!QVI~PFL2nQMi3l2&06l$0&T}sBFLMPT!6V++cc(y3N(DFWS}5<7Wol@`V(tdLs)H*C$*|HW50J4E);mGezAPR zEL$LnPD%tIA$=7)3n`!#rE2ZV(5TC9>Y!!kUQ+YvC~@fX@gi-MnlA&1!< z491tq6Ufi!DP_X9$H#q#7#KzgQ{$g;WfH1->Whi6?N6?*0na#)s-%Cc$=>@R{}>k_ zEN)jFBW7734(LU;rHrB6RY8*81cSt4>P;~EO9Z6LG*iR4i?_9MPR8k8*N!N|JiH2k zr;?fsyPTsxA4ihsghmp}xEsi2;z-fM<(ri_vV|-Q01{G@aT5P)>yxs-+6Rx-6#Yp@ zSqCTn!&$P?0{6l&GlPA~M1>Xq*wUo8hfQBQnFX70=2Y5ULy2mo-D{HN^~j`#nI(vA z5Pf;pXz#p0-2lk(yZOorHbXPPGMl&e$=fZ!f>f_)^o7pY>b}r@>$IamN7UQg-8Adg znTaZo<}sr=HQjQ`I;W2{D{I$j_Z^3#%bv)@)K_H|>HppBwn!KD_XGY$1Uw(BbpNkz zx8DmpQUe+a{I{$0cP}V@?`}$?zsORthn0}9W4s>jWV))J{L}3YA+!cqT}}bKwgCVy zN`3X(Nj2u3EI}_n5&xXfZ$)6V?j$*Kh)xU*yjeod6|BLcpEwCKNOBes7Kwfs5HtgWlj2{L($Utye8-Azg)P(8ceMW9Gv>m~EQ~A`!nR)zN*ll9#m>F=(Q#BAwbI}KtnO%|I^fe z#@C;`*T0)O;A+c%8YX~DDxfnj;KDRu$~S#@}HsC zreWoNVQW}n1&d)-UV>$d0ht2qwJl^74`D4S;URCrwFSbrd&8Gvje7+m`t^9s_&>-U zgyU*Pj4wt^ctxD>dQA#M&gmIXBXNKU>6cpQR|J^X4(T>R=(muVcUtK7^ym*3nT|r} zP8jLWN|-M6=&l~>n!HZBc67PTi9gDOtVFD@uA4y7)(buN^( z6++7;$jDvlLR$)ohKuJviWCmD6;+HDw*?i{zu^s~l|^Qh5B(si50YjIR@A3`y~LpL z(Mwqoq#7EbqMvwNl87{vsJ|U2onNpAFvplgD9GW~`kdB0-ni{m^5@^nIeZpRNA4$cb0_8EZ$(7q(IN zinKeniNEz3UrOnK$7C={X>dx6h@(-c#I(rFAavpYOrb!$M;ffrbb_!15`(O#k;q?) zSwX*Y;}>&9dSe9@GwB5d=$Z1WZ1Xsj@@)O`I7;(`^K(+?@?e?s%UZd@*b0TTX5_Yki$0@1?`LCI?1q})wOA8jg3I*fx-i;O- zm*psq7Mg^mnuXC=9Oor`ERstrvLwz|R$_2&%m2VsOsrJwqQs(Img49g0bwmGMBggV zT+X2JE`Cp4@HGt-QkE-JpXDP|;vraQwOyj=T@u7x8fI5)8dlmPSQ;0WZ+y&cOI%pk zR+4MSkak>JfKnb?R_2=)l*eq5H2PUzs6f=btk$5U_OZBLvz#KeT%yS!L8xMIG<(dz zd$b)HAmlKyT(XiDww6}9fx@tq7Ppm_v4@g&V8^^;=X8{oc4k+3 zfs*iJH2&vt{H-0+$tdBEmg;8|BgeREzK_*S%hm92YqD;uuTY|pQL_3bCODi{Oo03_pn{R9GSnF4&Hbtp6SKn5Lr#Absm@@l>`gYPP)b^J2#=7vf;NCVD z*Y;MD4)peRtGDgRz}D%<)(%vfuJZJ;v8pVVictHGx`z%lh*IY;Oh>GJC);et@m8l} zZYPX#N8niJXnIAuP}dMk$LUE86Kt0QRo6j#7nGa7Ja#R9BE42_-hU#xd+L4;>wZyg zacAyKZSVRP14iipqpgB5p1~l}9&C{wT*Dsx&pm`0J;WV7q^msyXx-*8y>_+T@EM%~ zJ3WjUz04iGtgF53&%Mm7y{1%sHj=%5!r;tUZqAOre{u7OUY=(>X$O2hkxqeeA|cX# zmDPT==YI8y9@*!*U+J|o<;BP8q{^iK;^v$p1BO(CR1qCO!`{bFy{ICTXexsSTZ7yV zg9xA7n#u=J#s^W+hV*iWWLSsvM7kjc4nxQhLnz}zI;O)~p9i9s@jyl5IP>DqmJZrJ z+@NVMk)LLGNn$5(_|hE%{;ZUah692uquqN$;T?DaP256F?+E8Sq8LE&q=3ZJ_v}_9 z!r#q}XGZ*<5d$*7Au4#?9eDB?cs#fOz5pvhcxRUbj~bPc15c1Wy%J->SV6`x+UnRh z(70yq1i$_0(F$Hzk}T|&jbXnynx1PdBA`}etSV#jPy`f*4|t{>{~=ZeBnF+-XqO9?;oQ$E{43ekM!|NSoMzQX{624rhfKD8y zNzegncaEWkLohBAm`1}`kq{CbBfJ*}yk~kfh{t5pD);HC84ke&?7|RgB@ue$6jNq{ z_!$YC5gyrr3I)S-Lk2hR3pf86H+AuMTE|%!>``GOKS|Niu;&TGt66w1HDbqUGO~}q zhq%}JM|4$Z=sE{&sT3fVf5~{wx8IikHyPho!PjB~6Y0(T4w+fHdkxF=$(3OKECXaH z|N0&OEK7 zN0xz)yxK6RDT`yzqg6)J;Fpi|+AHy2hV0R8Xd00O>wz2S0P;vNyHHjIfjw0TbYvJ63=COn zGn=`|TB{>!{`KA3a)juY)nMHt0>Fv<6sa*0s`1jks$FCZcT~-~76BmIWGjztalC!Y z%vTSyMGq-=aeQ@68QsTB)fdLZm)U7$_iP(o&F(Og`}l11oDYQN;_T|WMVGwAJh7wi z&}+N4+w!vAmWkLI$=$8G_jAy-Uk0R`#T_%fDhOF+5o<8U7&c-5VGh}ai01>yMM1ot z?{%uUU7hd^*dyK9Q;IrgS#rlrAtP#&4vuVpyf}p;i1)7-7kG1M>3VoRv?tMdn72+C zRdrw$yR!Oa8i{Kwq2?%){eUs^FjDzMNA7J9_Di}wf*pFO?j*(113D5vt)RD#15!QlE&0&tI^o|=%H-ytqqGz^eoMal3 zmjrQq^mAavch1aU&Y5h^UBXXRo=!0$@snb>lWW%Py0~GG0DlVP>OTJ}kc0KI#SVTt zUU-FHyvrJl?z*s!MHYm9KO`@>7_agaue_YDO2i<4D&$kNFi8wV@>36 zCNk&}IcL*Ey!ONlLZMF)_!g6d>mAN_-7lxcV*qt?kv=o=`XvC!eB=JX852-i!CkI0 z*1`&6p;Y=shwF!V7Jzw0$bQop)m8k0Bfsw*Zee*6H3#$6vU$kT7{SU+?kUaLia)`M zgTMv&_463+e~EF4U!oe1gphBKqiP3*6OS=o))9!8%aI@JIZgwuJb_q~5pt78xSLmK ziU|@Qjd@TCzC9>n-M(l%Jd`~CP<|O)w#~)|-W{N{&I7zlHm*iZH#|$^Gs}!N3CNmC^uJ%w8PmNuF!pJAQKX6LL6+zY%KDTb4#iQ zra#PK+XY>z5e66k!zQOpPaDQ$5LpUrZkVq;=~qVCzLW8)a5C{b?|Me)>LMd3k03T2;PPP)20#W#4jTylTfx?#$<@EkrU zBPGCv~F?zM6*h3F4P6o0VgKCM`v!1oguBgYpQ$;T+)2v9Ul#7X^QGfyErS zU^`q802UpM(x37pnzNd=ZX>&z&bz={X4*GDloU}?X^}8)q0}->hKJoK<&A_rr@elplIh>@}JG#xYb#sH)D8&9~0mF=N zM&`)al7j#_LR`s^>p-u{?b=1*@Y!3F zvOIGVmB~vuB7mqqHNN4n!mi)nA2y zU0(E3Yj&zg3_|@Txf`PWwi}O4_-6ObWoR(Ocn9AtSQeP0@n<*y`7<5RD)WFv_LC0a zgvUVJg2T|j8T_gaMq{)B!gv8$5n}v76+T*vb)e@{0+y3K%ufIpY^j_EQKm))pSF?N zq%cb{KOaREAk}xv$$%IhEL(dPneFJqWEuKnq;FWT+0p_QG~ai7d_{P4@sQ(yqK9%H z*FRChp8<(!NF|Nnsr;nF06v(&Q?UTU3R=ky>8 zrgF-0Hyzx3%l`Wj*Qn^5C=@Ee5j0T^ktCR2a-P26eLY1P9UgrO@uf6MBp5`z5Pzb_ zO~jo*>~P?}pHuW>s11e>riB66`^X}jL8t;nc_e_8&{*xZf}#*LypYf*(*clMt*F&$ zkX(Jn5IoZ>-_}_UZRMp=1HQHl*4Weo(lEi9RyF;e*O{joJHlH>8A8T&u6E{cr^^(v z^L}YKDXv&aX57X2T{_x*h0ECd@S*=BUjozh2OF6{GsVzJoIJcnCDC?nu0^T>!>0Fp zl=ma-orM!<0;YJFrCzm;sA;-Z2fCNxBX1MG$P(lWzm>(_GN8($!4vQu`FR_1mXk7g5P22JbYw>M6fiW9=^9;XZcg?7Y)E#0J~oyWht894 zSotejY;H#l{cC+~?WSv`8iyqY>m_E*yX&SVQY*^H)bW%F*RalkHSSM9p)SXI!|$Zl z-&0d3k1NmP7M`ud?w6*%A$-UIirPpKEKdi^eaOS>w2}MHGv#TOm`OE3rue;e)_(1M zKJ@scn&XKW8>wST(j1k6i+ zyXP+%cAkH^`H!B=zuX+l%JVNb=lD7Pmzx_8{EM6WL!~CMrS;U{{Az$wYrtU63wLI_0cP~zT+qx~@ zcrkGP?Z5N;>!b7+2y)lAms{wPC1T6(Cq#+tr|uW%$}cKAP@lTiZ zQ;@{c?-3274k+;_Bk3W=m1=13i39sh4P%kZ{7sI#gvg{6P?PpD?ea3=LXcHlL$FQC z>L!MXNVq)5V?fZ!CrSu<$| zJNRIi0D*!&Nfi-c+z|Z-Gy@mrTBKxlnGlZWYEIgI#a(g51RN2m5Q!Ypd{b=aE#Vje}OlgG&HNt^?d$utXv7(lL^6 z3kJ*zT3K8ic?FLuEKv zPQq1A@&?Mvg_xfE@Kd85KIb|H$aypj<-C`t4VC{eH)vWh^a%p5kjX6*{xsynGi(ko zPogsHZ!!FhL}9{vI0(0MCx1AMRN%ONIATs=BYv25WjGps#JO)chIS;5r#Y(ORlL?n z;!R_$#Yl31qN(%{ z&rG=ml=8=`PE?apQe3Y}*i@LhmE>2E0baJu-n9gui9)^{C4XB=^`S}?geu*> zi8bhfgd2|14u)*o^w>PIol|+=lypD|iP&|y?<|RLOd233&80OBFr3!1t47?ecIJ@y z)WC7^Id=%zXIOEl3%m5gX$sW&-{O`|wB|XZ5KLobei>5>%us)UuYT^YMY#?8Ef_80 zHhzv3@-+V3x+lJFl$1I4QAuetqu5r_}vTt7D)rfbhOAb^@ z=%;7TF!1Bee0*kTLuT|dnesbM7kwm=(_joB`R?^bQz8;gYNCpSEjkLtCmQ=TIo)fy z&dfNW(mm3UL_4M}sw_Z>j}8jKu4D*@L90q&v+CYl#PuA?llF*Y8H7shtKXZr5N5cv zGI)a=1Qe#&=`z43Giop8Hg375YnI{d8>6!yW82y^s5+gyW8e=VVDInb+HAgrtlz;u z-rurty+R*go*zW<8JgAMI@7sBoj-uI%>W21={F0?MJlaTD}8TAHH8Yb3<`Cq)#Fmw z4C?3%4P^YLD*>C8pLkoHCl-pQ_0o?PFPC+Hqb^0NW<*&2muM|$8)34Q7>NH;} z57#HjTuK7!I-%Dm{}@RVeUs6s-!QB1kG!0Fvt&oIoP8FWZ%LIk@VaPEqF8o$(BGg< zbJ==zzJv~38d+YZJrwc7pdt{jDzc%PSG;adw;s5{=`K(^Fj=npmLXA~DUzW3rsR@%`!@>EB$dz$krSEuatr0C#jfy`4c@~U}M*Y^v!$(#I)?D7N zEU|rG{!zOMT;Igw|Gc-hE^4$T3q2XBxXorvDQyJvdA&4#?MLSNVx;j?`}+Pw(Fl z6lnk`QiN2B!p^_@@m(B-ofp`okD#UxcV~zswprk^Idb!EzI-!s!ek}U ztA9-{qIEu{ZMA2BWvbgGqQ@s^h|g|xx1*oLuP?UFjbQbzXw3jB>go5zD#eY@mn`O) ztb&G3@da(zW$l6tEs{j+vt%6a%xve)96a{3;17gutYUWdB}EP@*$$$W4+I^oRml&A zK3Q{R9MqQ`7(t8=RJyD?BdrHltf`>lVe%jn)rOeWX7KD_K={y{&q`bE&;`HN*Fzz6 z-y*DQJFto|VsJG$=y2qVc%+VX)cN5#z%~ZYR=LTBl>I2kz&1zK7T?L%E9|J@lPxIg z=&0<-g#0L^%{I^SFq7{n=nkBPA(3abmOFU_$7fgWZj*y?Y^i29Dr#F?6;*g{Kp1uW ztI@$W>U45eZA6YrRvTuBkQ<{+dhlle%K z-2~(m5?ys_MCJ&-Jx!c&=n!^1eCs&=Y&+d$cW-~zs_MAt5wre`4?qxFNESR0P7bpUCz{}7ugfer7st6 z&@K_gE)m&X>PcMY>@R7RFNHr{QboC>8eP_b^L>=$KD-v7mHY&MBiJm# zM|&gukzb%%gjxK2$j14@dlQL^eVps7-v(FWYB#Ye*HX?-au+s|b_ZL7!*Zmz@_IM2 z?{5$9Znn#v8w;Hknn6nMw`Jbzi`m`cCf??@-?H+#C}!WP>A7sL-Li<^>Z#qT;JT{& zYHF$72~ON16uIbBYs*mys+xXuPY^A z*CgD%Xu%<9exXx4?xDI)q=ZLb#^rj0SuMVpJwdVjZ$5q`m6r_27k^y(dS8RF#6bie zU_v3#K)@nr0-!%+(S8Zqc1MNwsJ7_AjTG!e1mFhs_=Co0!G0Nf_nAZYB^hq6aJMgd zd@C2K4+K_s9t?4V`i2J^0PyOeeFA_*!Qx+PSH=qv{R&SWWmXd892+ZTGJirzW~o)7Nba4;(io12>O%cl@2tcI@;d1|+105hs zRplTNxU>OKxRSB`T2p)48fzrIsWlzcPa?}184cuvRV;bbY*GAUAw&fwq<+VBGMBK$!uBj#-O7h+OB+IC%32gb9H17JGkFYD&qp8kA%_5mv&=0)0PLPXNpF zB;+UHQgeLze@qi`+YM359b5bnGsw!jg5z7s#0|C&!-l;Wh2IZBiPzcnq zJWn{f`u)B;TGF!wf{Xc=k$>N`G842`0QCu0BJ4>C!Xi1__g27pRdpSsuG2)bPh-qV z01~LCCE<>9Fr}Hf6RZJaaDcNxIB%JvwuV7MKMYn8LxjB2+b1WX+fC1y>|LOylh8-D zXZCq4?#u(c4+u9xBZd+|f~8*g4MKqGZdMQ~c?HN1^j_85Wl>Aq=6e3~!8(1kiv*RJ zAce|wA{y+&bRY^sofoD9S`I``>xPG65`m#r03s1|1F4z(-yntwp$GW|BKG$ndtVCIkfanM+(ml{ zongIAckjz7946;xm-qp+{{+~p3V!drP8dr!T#WA!6B3!9fNn7?Dg>d42~{#qoLy=R zU5_QRtdJ6ZiqLob=;=+M<`g>37PSa;9~fwU}~ceVhH8U61b%y}}@J z0~jJRDTow4={Nc=7ZD{!nDlW1d=jLCLI=Xiyo4ErLPv!0_k)AQ^#9X1mJbj09ln4C zmO-TlQB48>01?c_;`|3D2NXGD{R@*TU_i2vIm$!?#TEVEag=WGmMQ124rBZ{V){)J<9ds^dhXufbQqm9=0OfA6-7qnhT}9_d%zxWDiv7g#QP_Su zKj?%M%9N7Yu!_8GHZ-90l`~Efiupfhiv;k@=h0x6#pIW(7zM73&pOuQ)K0(#iSvG! z#RRb5%QZ!*GBC$*lIx_9zzLxTL%HuD=}XuM(UD=GSo=W}9{Gu^@{Azq18ks%{j`5u ztcFKX1Wb}1LxURBti9nQnE2@vC6<@uJD*rvf} zfv(gxoAj-rVy^O7)~RhS>x2UUiKAxV!r332U}_HsU~%(ENp)!*V6gncvyYPH|(;OxN(PB(7ygq6{k$ONrBcfhW^u9 zRA`YRHX(^Tk%>)6lOiU0xpsht?TwT=++IKeh=Rtv1Z*L)dy9Sd8u%wKbPnF`A*3Wpxz#X2d_U^U-`p^uX2^) zqN%wHr7AG^rMM*UW?UC?S5Wzzt#u56ip{C0CXafh65xfjoXtOM3IjCsz^ERlM<1@e zBw~@y7agafWEYxzIt?n}23T|6mC57yC16ug12smPPMKmpE%8i|=5Yo*X6RdQr9>ey zgL5%ZY=c;M08umu1<(rqsI-=|KfZDFN`BcR0Cw{M{i8iEc0;V&TU*~os{rnWB|nbQ z0&WDs-ax->?lB$!qeRsQr%J1kYaYP2B&zyAKJl3t)9>MOu7D)j7!Mmp!70u~cja^2 z0rgJ+jzH8&QI3HWz7@h-iJ_(+n0@~lFUslRvi@09Jg8Z-?!nCy)at`EH zg0TP;D^JUCijYrhXodv%~MJ0sK&K()e)j}x`~$62%|hcoHy^==Hqq!Ar$hkW z3j&mRz~l;OQ<3CpU~8{sbE{|bS7jR2jPAqA*24$g$1k5RU{j_Om-hU00AQW%h4iaf z9YIhw1VRk+W;F9=Wdlit^rTg6ly;fU5r+pX_cz^wfrQoMUHuK~V^lgNoA+ zLm=`!cnj7v7s(?P!%*jhXG88{j#yAGKRTGhR{obbxv3pw)yKb zxr%nK2zt(K2FxWF;r&%Cb}_BNRLB#wzCtoutO4{K>CQXjgUb`gGi1TL~f}A$DDzewm8gA@m9zX z?~VeXK*4ZMmSM1q23e&^(xj!BV;{|9oiV)U#&vI%qj%H;Xe7TW9OMqjea7gAZ;U_~ z(G^7Z7s2WwpIi`Vg1yYZW1cmb72V~b=zpK2$zm9NM??i6iw35BT=*2RWM@_!;H~s2g;Y%h z{bKQAWASrir7(lA4PtQ|VsRCz1j+nGs077!3qskK;P{q4lN4wfQUemuUA-YDA|cZV z{sp3lFk*T6o9|4*K8L)E!jV|qLXk4O=}x-Mq55!6Ayi`wXfb9T++*d;mt~+B(QL}Wu_OafuYhO@ zEG^M>Rtpn$3N<$dM6UKlPm0W>5|ud*g~2p7612`$15S@HE{`x4V*3^l8lB#JVnkZ2 zs8}nH!p{d2*fTU5n>3n;L7G5Q7oG)|!D1m}Gpl7<@2CN<6BwTZTE(+s-z#OmDia=5 zIxpR9e^#@A)wh1A=Dw_-&6w%>V8EW9lYfu?$ams5+80%=tA$82yaPz<2^NO)=OymFRp1*SQ`;hAU zsP_*^)el+kU%5FewOSpu9xIJm9gQ6;ty>+fFDqSW9bGgleR3UrHY-DM9mD^an=}1S zxjCEC|LY?8D-nM!l4raUaqU+k{z}BFyWtqmYWi`k&T5Bg%FpV?IZw~(r^Oh5G|a17 z{b*b^E&tK9?t1#;m59F*@mC`LO2l7@_$v{ACE~9{{Qn0cPDlOX!yhE*f8SF*r%?aF zqlX%yg0`TBJ*IC%alNUUd1(v5 zX~5&OOZfDl-ZXBybVBoVvas~@()50zbkf1}@ZEH{HyJ(@8Hy4apTHSRr5PcH87jLO z&Vv~Q^qJBUnIA1OTaQycA>d5DkxV~e=KWEoFn!j5WY&9&EXlAePhgf}Zx-@y)^K4~ zJun+lD0_@9`%_r9jbV0IX=Z#$wsmhdCPfa(o1As?92cP+#IPKbksPPI90_2q>0yo| zMJ~EzuBl<}MObcWUM^ra_jV+=1egaA%tJ8DBcji9E6w{ol2;gzcXgNtf0CU=mw#iP zk0O=d0M6F|=F<=5?;#W%&=ok8=66XH0Ky6wEenW?3e|{}I3Ngt(XhXHdDQVzo^1dsOa8bS(pM`AJ!mN4W@exmp{2DI!i|czHKL z1y6ptK2LdVVL+$l+mT1Sv9hA}v}C!J3O4e}NWn@E%Zllr<+S0Iq@$Ivj}?;OicKkk z#h2kqhO+OYM5|@?$D^c&nwmd6G()H#c=I4N6FYUzmbLIu^)!O@&Ia`({`E3FHPE^B6g&0yPz?j*4H7-|K*0tQ{|4*a zhMt}V5rYQ6b^}3eDWz6pg-0URrv_Flbft6*6{|-5u|oB+y2{czw)DpIpN$6XO$%I2 z0v1i$5lv~iO}+}vuAa^A>CGPP&0cHGKEIp&2wMU^wFGIkgm|`q(^~@98o7H~Kv0cQ zRv6CZEeTq!FGcc{^wzZY)1}20Z58P)1=4S;rOWcx zYH}j*i`Lp&(%akG+dHINY8l^lt+mvz)i-+LH?Or1r+19Dccc+^u<_>IL^lV-o!`%N=+2`4?C5^wpNVe4e%@wh$y{FR<%HWaB z;JHt4P!*O78tUs1+j~`m<9hyY3|%T1-`qZZbM^ej(9``vuuI?H=u^JY?_fcjLw8_L z7u0qa|DoZZb~e5P>>q?=7i*n;rroVjJ-ULzQ2N5=Ny3+KZnnui&z?T;wWfJNLKKm` zND*wir{DI*`m7oHn{s=#bImoV(4z)LpZff;aXkS!Jw#qT3Qzse(By0ZP5L zNR(n7|8~=yGJS+zgMZz0Lm!P78-GSOsH0oNy2OR3%l=baZQ5Tqttx{KQK}g9Mg9w? zb$SN=>VzSrsABN-(`#%hdBz;pPEdMK}%?61x z*pi;uQqI^Ynnxl#>K&|`5w)99BQcwwFrzZCV`R|3?+sZJ4affS<(-p-MIJ5l?{3Jz z3E0yU10eX5A^iTO2iF5-&w>!70KoQx4t{ykpYAu_88HYOpGh5Rke=l28Tz-IrX5%L zmz#DQuI<1Y)o!+&8GoVE2^s%Ir+0|@kF;y-JZtm3u#H~mG{;CE(EtbUjBmwXI&IrQ z^za1#8`<1kG1zmN&rBeBz(l`_@)9~vTgpWr^Wuao>rXu`erciDZ1yQmkKsOm3rnU@-Vi};zt?FVO#({ zNJYD6#CT^u$_&Uo2d&KK2GxyVpSy7GHYaR7*`NNBLH|pqyLo3WdH)xkZXWQ_X{fK5 z8b_WjSVZ9dj-V{-@)F$k{5q|touKoz5`60y5sZG$+b7aF3g8;Y!UNzStOV!~5I@hn z0Bwb@Y)ale|JKtzOPQ_HW=P9G;F1yf5`_r#7tk!1(QF5w9T7xa2Il7)H}o5Jl+_5{ zHFC@K{PB$(ycKc9wM6eVP(C1l_b;ISR>`((gVUQCu-#dQ{9|K-XDe55Q`Tn1jQTI2 z4zxzkc=tEB&2_zLg0b}hy!Fhpiabd?{0?Wd61{;I-Cgz#tk3p}>=4>{)h^1=X6Bg3 z`c7u;TlHnhpK z4J$tmqHa2s&pN8ymej;N?c|nlrT0?kEW;(6Br}dQYGprh^IfI~>0}8{)jxpx@_V=r z`hU~YZ>l!3pY|zrw;&2x^(I+3sWEJL{P;Q~RkA+r@{?7e{LQ|$|D~sceKI1L56CAg zZDldirtvV&vH#L({pnc6N=9izcE(FTrK_kVZOil_H8rxxIoY1}h`58eyErs$H+7@N+9 zqh>j9JOK6=pPY>L#6@}L4axt7rbSD;__1iRhTZumJ$xp;n6dtarupR-v7=4!C;max zA)_X$!e$}DP-McX@jXd*I1vu*&?L@B)8rS!WYs*X#}%5##eW3DZ9w?TIS zlKGUw?@YSpu4?EKZM z==77wKA#=E2*Lu(!vvQ4^!$-nLSPY}Bw&n_u@t4$s9U7MCMT4ubDIbL+FCogMfn;Z~U2W!Pa55uT6;{`Ni+UbqxI>%PQJZU_nyr?b0+;E`}9E(UeqL9Wi>S?>x{a`#4cn z!XY;V04AYv(kdZnmZV^Cp<0nuGyGrESZIMM4EYss(!q+153G^@N1qC8A(2jh45?{A*61Y zvR&FyGThmnb(F9h2>@Thljoo4uTt_smJOHqyd||o`>h{4i4wHjo7jx{-Y8}wx;|13 zwwDIwrZ62l{I<-F0$Z(DtfHD8pX5wpHFi$L25SI9 zJbvZO0qH;-GFqPRnpV7=k*WZy>I=+T6Qb_g(8qb73j*JUaP4ln>TnIto*f+*3sTBj z>Pd6A8I^%P;8BK>w%J2Rqx~$P1BV9T1q71wyPH#R`J!_}+o>UJW2?hKhRK7lVeVuH zL#f4hsGR@!CCCNNyVIe#eF$(fA+w>Xumr$RNa!V@?Y5CcVIlhEeu0lSS5#$`Yx@Be zje0FAy5rhz+pdwPF6{x`w;Lb>Kh|fdFh#?38CW-M#9||Td!IuF7#IdqLZV{8p)VNv zu!rb!&D`+` zW6Dklp2$D|WDE>w1;AucFw%>OQ51lfXZM+dArDROlpIrrU_kFPxFhYZl*S2bC zTTWpIJ;BOE9G|YZdL*J85o*^#FVAVIbWW+5Y-X$v-=&SR<}&-|OnA0ZyIm)hLCF;u zHwEH+rz>dos|iIM^g#Zfu~S}0&?Ro`@B$ArQ`s23Tc8{9$@clVtX}EE_bd405w17d z1A8UnZ|LP?fkmmq^cIxxsY)Ip&hKx?>7`A|kb*IYM?8xVa%SEt8mM9M}m@K9);4vqbGdMFyb+z%9MscX=ZqTtz zw5e9MB~;o7pK8T7&pD4Q*qSt+=IypYhRY9JDm`yc`N|2F^Jfz+f@BGFG1{rSd!1_{ zOz8E=tw=}eu(RXeB^!Pq%pbgSsh6xgGb6lJpCOp7DV(roRxD?nC8##c)%o$pfN*Va z{H{E?@ZFow=~{R$ca4?%l`J-d>mPv0%`MbbN$lzCd-tl9Y7Aw~(ja_<>h`t}VTDTC~`R&!O-EcN{)L&V9#?tFP6a{^g;k)p-ZP$a`Ep`2Y zwfBSN)d%7(cf*U>2ViT@Tr4gXpe!ESk)P=oeoO9+X?<^w(you{w%kVw=KvPv-ThrD1H7iJj4LB1Voqrb9j2VkUs$xo za)W;m>TxZtOs2ayW!-j|@&9_5aGQ+I_j0Q6Q5OIziO7DGz78uEBP-G=PUGvG%dUk@hWM| zQ}GLrkUy=8YeAq;J=D_}$u;p7|Y{JvVQ^{ff3syYPkg+V&i? z?7`i<46S~*gVE(a_|a!B>V=3?lU|IdZC)kXIv;R!eVNqTyw3K;J`@%3m~DpOzYuXg zBkT*Sj^fSRVmrQMqdy+2YCd;ncb-37x_%>2KHYV|`|S8u@9w~F-Fv?0503ZsI+*f) zxb^nAF3i3=YHog<8}eDM7TEk@w)Ok-1td)EkN1@p|I;#`@56%p^^MV&r_<0syK7VH z4?|lJqG|z$YhPaosn;KlsZPjSP~UHXwiwtE{Xn`Ml7D&cYR@jH1W*fOcPm$SuLOv8 zmjqlAm>%B!21fAYcQ?2P2u=aOJ|X|jfV+c5>HP^c zu;3IT*$PxHV4tG%KrQ1yd^Z4$7ZknRuK*lSn;)o(7>Fwg=5l{o?Eq+Li)uUf>xhVz zpNhsF35}GbX)$H$Xbu_|i2Xzw09y?9x(^yg4qgKLEn$X&eh;dq58AVfUlREdK$YR(gh+qm z;m{xn3gO{IX>lu}Vatf2u!i)=n?WlP&L}MUnEBxXj1g7#mbjOh#KoNkdB;AY9&H0 zsz4a_2O}yV!M;I$!zHMWG4_Q(riLlGcaOSyJYse`Ocv2kE<7$DFX^KPxcDBSl&r9P zIJ{D#B(SCjK!#Kgits;@CPhqXX~Bl{^U^M`%k-$oJbO;Gs>dIwQ_6?G9X%TijG_Ed zk{@WF1VE1tq>H|;86~uc_CF#c442*4np`}iUp%9z8z(3J60c!M{MnK+5HAlvmnYvV z2T;JIvW(+TEu_Z>GaO4rcd#Eh%XM1Ht;S87XC(NSV4Y^jD2&Pmw&WnUP2BE~mA`CA zNF@S5SW7DM(neEv4F$gQFp6N8t5!@C0jMY}+@Zro2gYjlO zgn$nUk;V$Joo!g6@8Gdsd?PcVKz z&L$yGlb6VTR6Jm6L_Zo$R60Z~ddDdcA3ODrIcTLJR*pA%P)TPpg*^tM+XKC zlz}NpmaR$F+=`ah^YZ&lior}Y3shfgCr(8^8?l2G2~y*@QxlG50`&_4_JygX_-hq~ zfN6Zb#?LwfpLgn1`yCZ}z%*T0CCZ(W;Fh9(j7X5-+^wQ&rx$|Vmsh^*u%efG6vHXSk1mUhW~YWCwpQ6RVkkW%8l zG3S9&;QInN#CC6r^K(s5rk-s>TDe1H3PK;(`fF`Ah=1Ti& zsZCa8W?7l+NX6}kn*CL-w_1ak8@gf3`n=b^p-2yit_K-t7o@IZ2WpSCtq=2!kIQOIPG}5q zXihI^r($nF7Rt1(-)-FRY|MCfD9CO|YHcLmYA?DZE>ARp`#099>mv#`GQD+XW;eF6 zH>tmGY&xe@Y^$x?#I}nFJ%w_;t4_U7V_R}-TZcdNDmk{ge{XFP>!-u^ z08MpZ&Q}0%ys(Sf@ONwILHhlf+tXir5Wi_5`)I;JKA|vcp$)Dg`RF|m^P-Ao8z0*d#OXgER$-Dxs z`nO0PO%WoCKlzESN{s;yMC@vqUuWo?VA#I4EC0MZHL%O1yH3L|$tKszf~w2`Sz)gF z#Hp&t1*gj{#?5Uj|4D511C3E^;dk#oqi-AESzV2E&%U3%+XHcG-TwZ*r)gYcy*J>o z$0%l;9&X%QW_-`PCpow#6Vfb=V1u~pFl_iq#O`2(-M10Cc;LWrps;h`F@8OrIw^}9nGl2#YEE?1vsXA)5l9PKX< z*N>i2BHli7UbY{7a76ryjD4F-0$dMs1I)_a9<8w+1x~h|X_;4rn}5hS!j?71=r9ju zZVowb49D4xTs-=7c~rRYJ*G)JMy@S3N-Kf$nD)S2SJ}eF_IS|SBnhWIB}p&?M>&1* zTk@iLCXGz?H`82x^Bf=A`~#z`tm7G_lPuvAf7_G7rpRJlnle?thhXPt=p5fC$jb+lgyMe zRhH9Y#X38%{f0)AKh(7xNJp)2ViAs&-UW7ddSgt+sZIqZfEZXOO1z=MWvBK;xe~UKlq* z*daBjX1hBYLumPztharQhus@v`?YxcUxoImW0xbp?aNN=zirw-p!{rPboedn@TBAL zY~uj&cKGwv0f2gmc(IBhU_>NtP2B8I6L^F#u0U42@ir8XqU$G#fGxQhWQ{=F@%g|( zK=lgf>qzzSYAw?-y4-Pa>}sO(Dr(KK|F@&|o9i}wr=18#%5%r3PuERGo1AV=TJ@_R zlbt?x{p4=G-l^>TwB)q2f6n*oI<(?i0QV+f{95p%bHLfPu$r?c@{Oq5%?zV6_;lbW zzoC@;wUL(7Pg_H20Y|UM8|o-0$zprC>>=q;-E*8gzOEK%ZglVOY?F@^mt0$v+`>KGNaWlcA@FzZxVuhE&60L* zamH?*v}RsigvwkZ+w5e4IYFTVqcb$?0c4&b`?mvGO`{G}mq=UuGryS4c? z05(VfOp14}4#rU>BIp5+#Vy^(%RfZOUqzW^rDTlIl#E2%OO+%@l{HA^AOmx$r1C|i z0444L;^0U$zpur`c2jP#XbU*NNF_x`G~+CR&xEz^hQC<^=!4*S5!$gL z5hNZlTHK4=9+{!tryro?-Ej!G0z&BsAXP)|#>e4`An@4K(*!Aa(#=zL$zgCDPcANR z3VEVl0x76_Ja$H=avL!a5<^j z>0lrpSO*V{ivrfz!Y3RI@lS!AkVenrdbOucD8c$|A?8!_GJCJ@n=~m z?MLwfX^r#jAz+~c=s+{$ywViuqADQJE!O=cX>YXIk&!dgYRPaOpbW(n*E*oT+35`n zu{rXm?I+EGxyz|l&IxFb;~vbkeqcQqPdilIwEohKl`BmI7iG@SFiu}Qs~&)$*>Jdw zd^+kX-QKh|i!wK?Vl?ePj*g0kHq@a>56mRE+Tn!eW+dCIH{ zTrIgWAzUq)0up*F89FpvC%FO?ZYRy0ITC?O4wytyZC7H6gCd@CU2;9;(NT$SE2$Q&k#M|`fo*GF8GCieimI+h!rB{HkPJUl1z?KQ<^6OSPmzI z{H5g3BCJ$c2Pt@O=+ON&LlO$pQ8e%mMV3%-KnAXl*jXS_iJM#y`7AwVMj(O5Q9v-o zr~-lq0!)xh>T&|9C{00LxJ)_w{84@^GvaJUM93q3vOS27JQ&BYBp2kMja4Y4>|+_5 z=MW`j>Bhe250(jQDZvG_T`|N|v)^&gq(L=sGm15`{$^^3=Z>JmVV&p+2gQK9(UafK z_}Ks$*i|Y)OQ!8M4GnUq2bEw)`q0KM*da5(Ae3JQXjHM^0uX~pWzmLSDQyC2KfgPq zYKBL;EvSXM$H%Auju6y{Kr4HF7^K!9D#m5~3&_x^X6Q&OUpd}2ar!04hQvAdvgB=AO{%3H9otpI~D)9nG+C`H4AhZ zrh*fuQ0Y!VL;eSl=llzh4~j6u1L}umX{)~PMk=4Io?yE0)d@>5POz^QllpubZ2H3$ zA>+pK0?4yI3f1+pE(E##MAgz6^jx3e(Y{BQ2i$hdJhguku)!n5M`DQ`YCBE@POuqzriVbuWBy zI{+>E?yXvD#Spi`IBF(IEczT_IJ2(a}pCVuV&kG-fE3FxiO-%U;auEYV#9dTOVD+Cpt=A;_X3YRxegOyaM-&UGq5|`nF4IAQ77R<%Vp=V>l zoeIcf4WJSA#b}vC{NMuv1j+maQ$@NH-g`?B3y=lVE94@owg>?MWOJ!-Iglb`Nk1S? zw;vo!HxwEI!=kZ}9}sUFV4;#BiIVm?F5o)vajy*6iMUux!5qR?XrN-pppu8PQ1t9? zAza5YANXuvg~$GqA@}Qpyky8Neni920H~tcLTeT=r2gLUx;SZztSd{Ax5DShj$X7l z?1^SrxEg@$bE%9AgGxHx=Q2%~8pDNsixJEE`Ld>bty>8T<{ZBBFYjY}fasn2zZjY4 zUq*!0N&hz-AATo7NA~vLa9rjoZTJO_+rPkZ3ylbhJ_hQ#XTfsw1uK z+R_lKNHyXqqmc=wdWDZldz@gYRC@PpsJj~tBx<2Ti|{liIxln$0)L7YB7|cDJ!@?`q;2JSZ!N-I#`6dWCN7w{N8QO;d0K-rY6RA|!)9iS0 z=&$ohS(|BPY@UR`wb-QC%8qD-J*kqNy=8Xz8nGTqr$#pJ!t4x7p`&~d)V4TKB@U&T z2YDB4;P*-GShO+eMjKYk|j^JFuy=VON-wsq2bCbNR&C1!3bOjYYovFN7{Nifl;V6F#)otJps+uArVb7x!+6APjPt$XP_h5PrLt5|# zJ+d4!h*Jzu+{ByK)@s3ap2zY?t<7i-@0T4z-}&>vhrgSc^ZQr62R?eujO%6K>% z8vV!`{=p0ifk5~hMNEx^)(p^qz3w#PTtc1)keJkTx=wsd=NdIfo5fivOzfvfSTGM& z0*a&$KJjC0|BhzR6sq~_1+~(3vpVz%-&;HS=VW|_I*OtAz?Tb9IU>hJ1cjjMoB=Ax z+7Cl+=uxiD03z)PaEf0Vm-3-9vT zfju+H?*^L%Z-@atdP7@K07wfnAM>v|oegqbOoS9w62GM11ieB#?I}P|QDHK%Y{2`u zR8^|GoO8J~RPr}%fcX1_u< z=!bZh@eOUPTrZt)i z>G6-P78@JTF~3H;Ht+FZywVc>#B`%=lA9ueptIh`52UMZyV!yE=>I&QyOC1&-ez|zas)O1}YC!Esh&X+>vLxAm7Pi$iA>9{5DECqxXU{}o&-(oid>N|^ zyxRbZ!CdW=R(>G;1L58p71jH#kqKwGm0YqlGNTvckiC;g+WA%QK2>km0sl8_&P!4X zYEiQ7N95vdzHdoJ7iU$%NVL=YIrg=6%OZb_4Ka|rHoEHw;7*yTcd z$md54reF5Tc(r>)iBNArZ=kyOjZxdQhfs(6(H7L9Fa%Hs1P9Anh>kQpo#P2#ZJ1>`U zCn<=^qGKDUAiw*kp6K!g{h~o&w3m7|h$XAx*{{nOFq*SCRjFUVjaoQkxHO>8YP)*4 zo+m7kL8*y)puJ9|Bt?zbPd%84XlYn*j7*C|K1*#xx0oZ$VnEMtP?T#}Rl17=^*sZM z;#42qy*1~jd!7iQNK}Fb+6=ZRYd;EoB*qc?J4}BWEGU`-BY*wqDB^r>9KGj6OtynG zw%+I`YpR#^dw{ypL&g-XV}7moch;A7IrpA095FY+x|C}!U?6LoeVqro5hnAO zp@IlX3Pmus1*O1(L{4f4ysL@K3wOox+y>kS?1)vxz{*yw55b7E%N*m%reHuzY z2i5PEXc;jhqD4K~kg5AUW6pEqkB@r{ru)I7MV7Apy1Ro`b^UmWGx&(oPn2da+LA|CkqS^EOvCfX*(zS@Ntv#adqi3(m+ zj;y8tE*jM)8jV_-FPsryibSll4wVavB`av9#t+n1O`UaVTsTEE?`X7uv>J$qT1|=$ zlhlr@g`n+yqdGH*R@wm7$bfHVfy_rk9JJQ_bU~wGL8|6BigY0qlfiQ4p|(fP5U&!m zZd!0z@e2{Z$)F2o4GzJSicmd@NRx5p{TqGYiG}1oeRh=v7o;@BG%v?CAsgp}m%J>6 zr0Yk2BnTI>W2a_^YsWShVlWe83e2TJ?0EURV zGS$=*t%8$+-ZJIkvYe{2@B<)pxe(uQi<15$^U;z z#8v*ML_D;fE1Hcvxt=?ljiCP z9~hr4{l7uU|EN*;#%Gn(w{Pt37uL4=C*(wA6mIP7@9ZB3Cg-kg?+s7QFRpL*jZXcz zyo$*wJ^69r5SCa{-*$Tbv$DBsaANNK=k@O4aZ}eoOm5l4{POLu$IGkR&F=?3ahaAu zvEk`O`8CarT?2=w=M~N0+WJPez8@T)UBnlZH+<`#U0zQrstQXh2uaCHE~<)rrQ{5+ zl>FB#C4Z&lueI^l+W2d2{IxdzS{r|@jlb5$|1Z|YUn%)3C4Z&luax|ilD|^&S4#d$ z$zLh?Dfd!O37a-`70%VrR4uJN)Ar}_*)yV4)s2Jsg18LZNAjT zz0X~`UTWi;zq;VRo&U`8*v*EJ_lUpL#=E=@K5jissX;Cy1iZ&cNgtPneC`^%ywBnF z9_Qf&_A0l$uadW(4#fp7x=4NQD1DxeLw%q21^ygXcRl|?d-{Fc^{2X7;OQ-> zbFRw`8ZeP+U(2WFBzQhJvLISRK@R)P+mJw!Kx^J{`IasLNW7dq)7b?zNQ z5<0-|?WGf<-G%&B>a3Q%w0ph75xsc5f0a7r|5obg`R~qpIkh|9Ta*8%Qs>wM!8rHv zV}0Uc&qYZI2-OdstQF$<;2(Mf#n&Lnf72&E&jT_h`NZ;%Q>PIA$Em}J8Fvx}^(zp4 zl+@1pH&t)#^B?YGF%(t|5^bRr-QoT(s?JV?z~MZ==hdx_C03R$I$i3|=l+r=ht=N8 z+?*EDCmJ+Q7{IsgWC;H+txoxmR;LLPv!EJkU=(Yw{j1e&U$pv_2ozwzF=0sUlX!E_ zKVbc6PyusD40-Si1ZFtCe5j!G-)P<2THMD=%olk$w4u#kBuzFUvTS8&)}lZyX!vUe zcUS^mI1_S&wnQWo)z`h@coFXCJ&t&hk)%DY#C47&=aEzqu9SI>)Pj)=uhQA?BUvi! zDApkTn~@hmH8D5B#yDD_GRguig@`p;7&KZUQlGEQUD_~O&JYz7)SwxWCKEVf?n5RXdKISw9V zx`A@5$iQ{Jj13UHz3^Dq!$<^>=oJ|^D8+Tg0ol0{7vvfi3q~cT#!9>8`{_`!7773d z1#}-GjJ@(hKS#vIA*%e0s91;y`Uw948BoiHRF4OLc#{hZj}-4xP&*zwWy%NiR@Y(! zxO6iAvFwRARD=J!WtSTL$Fk?J{~lMRRD!6i`C3tTZWqNph{1bE?s-F|`f01^=RXM^x(9>pEGs4`tN|~ji@=;Qyy)(|rQtlJ8x$v*3ovuOk z6}6Xo!LMJc2@$I-W6we|tFds-cKi#q>!<_5X7FGD427yOol|O4D*r<5WV5quyR!z| z3@XW`Mz=`sR&#mdrx3hVL!g29mCB6KQ$#5L6SZ$8pmTFO%+5`KC+EvKm7t^1xe)<8 z1e&}7%9`TvueP0#I0LcwKW+PO)%s`kxZycp?&+vr7RS@b$U!`XB|KO6=`QEV{}Ar+ zivK0tVJrU%ciV;qn`6!B%Jj^4^s&20TgX7GGzEVd>O|%!TN$D*cq$Ej(p2BE&fB37dV^k>`<%wVG53U*usg5pe`oF$Z5m3u3sun- zoxQbRQHDBJb-LfJWUH_2AnMBX%&R;t^~!%6Oy=%!mjUtf3>U7rY_52EugFHOC_Sx! z$J&yo_=_hR>L+2iXSnq>omYQ%uT;+H8Ah(ob0;p_4+AD-uxFM=?e$jVS2s{tW-Gbo zUbt4@8L%j?>2ny!h#Dx`uI)A?9Nzw1yj@*7 z(Z_w(U*=xFt{lCo9J+Yvcx+gIVir7uS-uZ8Jlk2Hof3S0w*f(8v@yMI__Pito`7bl z1h8ztg>1mbtSNjlf&s@OlF&mXZ=mcMLG&3-m>VIT<)Q6SqnvGENf zw6nn}Y~mLgU+Hd||1`!WVa6+}slM4HW#P<3F(#&&Chy}Ulh~s2sMp^$rmz4TFRE?P zrEHO5ZP9p`EH;?*4{!P`Z!yNyF*&rdgz&Q8ZS|6w+QFETacyx}WO2f-aPhQrTWs&e zo4Qt*w!3bB2&w-h@QaUzS8&esXv?$~%FLN@N2ondnBoz z>AkAiulyaEtU6hNR(Tdf#l0N{NOL+IbGnfo<*`P!v!5ywrs``N8nD9JS$(P@<|5R> zntt25unhV*$~u0Z4EJ^`>R!>Fp)ScD5A0r;-d-c;o>|IAWFHHI^gZJ$i$i;hhF^QS zYZg)BdxOUo>Zq2ogqErydn%)QrHuP0a{I0pm5$(F?ywUc9{W%cX5L^LGoPycu0Tt^ zxqZRseP5a)zqLI-> zxo5^%1|Rc63=67Q3vsyf&koOAj$%!ZKBXV+Rvumcv=NOyDn3i7JZrA-u+G^#nz%kn zWwOnNvYnQ5zuys7m%&g6Sm7ZeQapR>8q@+F=RtJfFz%*UniB<9UXhV~dXCq>W>$ z&w0n=Sy-fFQiWqJ-+9m38O+$ZREA?G`22Sl# zCt!w?q4)_H$0?iU0-m)QF;x;R)*RW>0`=ShT~Y;eofj)r;@!FyM!!Ao_ysG=DN^hu zX67Y}*`@J_bNbTdvdHD;*`>paGYiSp66#e~uyg$<@RgF@)d9m5yWiEAgG-pdD*6$RG~`|BEASFUW=`j~6w z5!b3JSM>I4ZSXa3Yz^Ulx4>5s(XS?-aBnD3Z(>%igTCBkNw^WkxY?zx@q8AsdyUb3c6}*?n%rG z>nrLR?%xUrx{H(E?RL4}MBke3YZ{GfS_)cN6q_1oBmD@%=b#Lgb`O$CP>1(Qu zkENx5D2QI-A*hKvO64I$^TFElAxzWcDDfdeam%3TA?jQvZ2lo8Rwm;9Aud!V3io%y zy>txk?<7+GI5?-kb6!|aFB65!Z+}eF1WnT6KKVV_0z+9-ss}-PzopYW0QX+s`hP>D zUgV=aeqeko5PXc5ea!vyyXf30hxP$E#rs>acV^RLv0+7K$0N+z&4&dWmxgK)bM#yk$)@%X6}{Gzkhk<^PaDKo^5RV{$ zf9*UVjF3ny(-;5)5CK#|LdO9CSoCrNrZs;xjc&*#l>V>ALu zF$Sskb0QKg5PDiSY-M@Ipa^`dGrg;_{fQjWP(S32fD~p5;++yH;evnmdZG_<8sm~7 zI~&1cm;+N;jWAj49?*qA04!grR9JgeX1JHps09kQI?!kWnbjg)OEjWFPh8%ZT1BtjUsC75GfNX zDo6zfYIpzw~aD1p1#c$8a2nZh~L=*yLYw8r0J?{MP zG`Zi4q%kSP0`ZaM*B4RRB9>u65|S{mPDX&oA0O0{LjCHC^2l0R!lZOB zO3X##IH;_}Nua|qA{boe=<;L(J~EUR`q7k?+ACm8W8$<}$J3WbaP`t#Yt<%KAUC8P zsYYFSYvy%0h+B(WhZVqzpoU>X#vy+IDq&GnPELMf*Qc*YD>2cHuU>}SC_KE*Az%13({fV{hY*3d~gbYL#Q4TT@gTNLtzH|V$KW%*}YrOG@JS_** zkgE{F|L9ag!fWY7hk|eGQi32wiL(X#BFUI+>tGqF>4*;7fp3AZE9DSnviwOeF&p7_ zIzW`1!8y)9-EiINIxr*Iv1_9S#o#+d7crVikk&=;NC<7W@vdLe@VUTyvlS4EemAq`lKhMB zrOMT?A2ulP*LZ8b_WWurMd^X~0m9ae`q78ndl^4XAspSbR%nv-p^$4Qo>KIa-}2+J z;MfTIDt_|l#9~sh!iS44sEc1UT47vpjL5#lWIh5G6|Sm&oMReAk`Ts7H7C zJWTzUgDmN1bpWy9iFzVo62K;eTnx|UO8>aGhn!|A)--~3#4m|LPB-uMJ=#`?M>$~O zRe%%?1b_;i#S=vqo{$c`C<43x9fB~KDE5F5*m@ioaYRyLAP)6$AY1`ZgC%;QhCzH% zs`&Lt>K4+e4Zwuvp3;K@FZvCOa)1mo75}98i6sK#U9L3g`k@)%f$M5fY)@3XwU0l_|wXGQ~~a_YlBdgebI9Ju@LxYlrQi zA`A+{Le7LOn#0NJ%SA%jKmrsvK#A}Wg>>sB(#C_z@kzC!HX74uLD0ffB6yH+Ar}zw zojDYqWJHdAae<_6T_~U5Q@*PV>y@K$NmH7re89Ss6a)yu}!AeH5_5 zpn}+a8<1q(HAP^g9H1p-jE15F0UrRsbu$>EI5v~|#7M7D_I+CJJ`q8l1v3cQeHWe| zgGec;c1XdGBPkKz90E?JOlJwxx#y~c(pm$9Ucxnc8kzQk>d&TtvYP~=Y z`yOYu{~_(8#K^(_P3`@?o_*2<7xB4MXy}VLV5}!I<}n;}f|4Per~yV^%1Mp&6(91; zw1X{YX)3uZyF_iHmX4_GY$hr7dgVW2U5x{vZ{i$Y%9}P27m^Wqs)C76)VMz~v{0m^ zMf;wZyhGBa<(R8U$Yg>*E6*7+xid;TWwJWHTAYCOsK4H1vS#&ML`&mopwX?gHC;}f z8`5yEZWp)yUT;A}$YdREWcBUL&-cj*r9`R+7i9%W}lfnHskm*2_ zX?@1`iV;nderwrn}+h${!c;|`es{FWH#)c*;L z3^6Y3=n{9b?J#~bt3kN6Qa*v@=~N~-7ozKic52T#cN}+c)WQ2YeFJ&lL!y4b77sIhaVCVk z>GIl|O{ouHW;Ez|hMZWgvJ0Sc8`Y@2{MLYs%>tFvk8xW4HCS#Z18;Fg3asH0c8FZ4 zm=8U4KU!T0gKT?V^0N=;^2#5pb;I~m^9W{9O)z_gI*;c=PgWIYWAIafrg9iLP8p-* zS(<$GGdqBK=_m&yfIKA1NR;>yy&0nBlf|yid`hxPmh0fYGZbKAS+405QYD5M9FVsi zBF1U&j&)%mgr^bz9)@c)PGSG!m^^`dskM)d#r8sG-yVAk)Wx6%?# zhVI>1Bz!VY@#j$NjOV_vY&=Lhx8+s^&mmPL_UJgwFc5Tw?}s1}eaf#8Im-|ajT5{S z4r#gtEBmOto%5BsL9L$v?*?kp_w+Asx6)O-=cqegqT@^9Rwi)B!OdN`nNE_TwL8eg zH$BG$m-4C^@~sXZKKub=7D07tAq#8F*n$tz4R?GXq)6w!paRUOVoe2#3ir!EMn3 zaD*JTahkzoHNIFB3i`$o2mr#)`9&5KH2X!{9}nsd<8rF%#u$>1%n+!*}SXahT zrJbZzx!p5)%sdI?umFk(3Rdr2N=P8G#MXHOC3T2AsmWHus0krQehD)f0!-(~2cwUe z#?VJZJO*Mg24o^Naj=N1C}!}e&8uFgWCDAXQoDJ`;--iS`4SiFLOLL}k4yMA;p`NY z@5hGsg<*(9@&#omDXpO~4NTc|pc&6{8Sip==koa*zr8mx6Pbx`VqfdHrQi+;yJ!Ji z(vx7==#x-`NN$x|Pk~ZWYNz66K05^p?Sle$`9w#gxHO={!mK~a8{?Hq6Vd}BXCa~= z5!6E>)B;F0m3N4=cF@a=h((at%1AIgzy;^NW?zE}q^R;~)~I|6&Gk2@vS0wV4`#TK zI~p_~cIq?^_C(H7Gw~Zt(PtGl6f9A*y!2F&W7?Z`C@% z#0IihoXeuixYLwpnp3|(T*(5URm6rdJ?gv%@-6bzCQ3}QQ0yz#D5J5(*;NFS*fA8^ zX#ngWBkd!I90X{+4lUd#lH|dgNqX&xW@}`kcC-NOS!L>36>jzLb{fUs*h&cM>MU_m zR9)UIreBI+++zqLc<92fv^}+8yMqrLAz>oQ=v3(6 zshXpC9H~Wt)s#?XWoV!=S4x;94jbk7qh=2yAFagAy5jo8;%hTMb6{&TS#NP$1NaU- z#P`!Ia7seT0&}dZzcG~Vjg|xur1@FNj~<3?9p-yWW)aM0HI`%t6ib|_DIzdL<1mO2 zF^F!^B^B9t=9c~VxdJX@fq#vTyONdEWgXT^*qSIaTGbXekkBofm)E+v5yu`_rUuCz0{oGL4>{R(e7Q$kg)GiRmXd$$9+{N zV=Sk0Ri}GmyG1jnXDsJ;Rp(#_oo_7vLCO6bxQYLvGUnls7QwXkJ2#re^w_cc(ON6#wgq2H_w_a3` zOH8s}Op!}mvtHbgOTw~V!jVhTvtIHmmsDuIR4kWtYQ1zemrQZJOf{EmQ@v~lmt23n z+&Gu~e7*cSm%@I%!a0}XeZArzE+x1IB{Xhj+y-S*ZWY=F6;^Il-Ud}cZZ*jUHAQZ9 z%?5QtZVk%@4M%QG&j!t}+*+XxTCv>PsSVoM+&aY#I@R2|O%1vo_S|~?4SM6;`tuF? z>)ZzW4F>1jhW8DIf4Gg{8ja9+j9-_olJc0)Hkz>VnDRE73i6mqHkv8&m}@qg8}e9K zHd;9HSb8>Ee&w+WZM2Hzu}*EY&gQWxZnUZ9v2AL!?clNNZ?qfdv7c|0frAE+|Aq#T zylw;}|AQoLZ)|BUZ)|C8YKvlNY;SMO&&I;V&Be_PV0t|PUQ_HV@gt=9flYk#Y?zt!5`YVB{e zc9IPlH8z0bTdn=A*8Z7M80xLo{{PonJ8AZ(YSRD9RC}QwI)I!~2nY)RAme>w+eE^H zB~}6Ev616oqB0wRzA0}@#1Ny<+~BF~NG1HM)=oVb^i}Vt9=MMHzIeQ4^vAfWvH z@y*)Re@{_MHM^g#_5M?9r#`%cA^KZu4?dR>d%n*z>7n}y>kdzAOc)r;Z-de~n`a*F z2-^q72-mI?#evc_b7PMa-UUIZjdZ?7+VMe%1jS}Py7vxiB)UVVr+AgUYzVy>m0rKC zrZx%w6=}b!#QPg*51{*3q`mWFi!eHZD0D0%FR%CA>1xNQGWmvbl7&R(McMKoZ!5Igt@^age`L$J8kl4Bf%{A%-PM zBvmD-AjTpbXqCeZr0*-4=$y2fIfx3HaB^yiRFHxXj#QF5fFOdPBPYkwYLybl{2s(1 zL;u0sMTW5&G{p<%D8m#OGbk|4!H-=z=!$FyN%i}GuE(GxgTtJnAdUcmFJVt0JN-+e ztc=Xb-pQSC$O=O}ol?_HLX$-Y&5)^5a`M`;f>Aa&xPz?8BMky|gkk9(jFfCxXTF(oG|-#{>H!U%jP zqJF+)cfZTas`&)--pKw|oE?C}Tt``)c_UU&=SkRh5L0{sGKwPdJLpE?qp3j6C&R=v zfkzE_Aj=Jjc{bic&eJCcY8v5_g`#Ve%r|2GdG~%lRt36hSqcTLLYd1oq7J_*Pbxqs zm`{jD7vk}$G3*eK(I-U~5JnP~%P7vRWm(;E25(u@PxIw9;(oRS%Eo*xv+L>(2W~@+ zkFWxpiHAgD=hFBIjv@n^RVgTAKBsF?U@|}gQ*>QBPt(U)o{sG`Z}2q%RD@x*1kNL(i-qQg~G%dR&$7*7iWiMUAFn%+u05oWHxf6%b zA^Wz6$bXBnOEsRiaQ<7AJ-|UPUh2Q2?D-Jygx~|TY|Z=i_Xp8l@PPn0f*N-nVsV`w zB92mk+K{GHPf`&$Mw0xGKD;Vn8s_{FZRN})(SQTU^<2%S>g&u~vAFna?BVTK6s7>7@zXdU#pP}LQLE8>7 zc#t%3)}qEMMpGA;@!g!CpgQ0v%4 z5tDFhfBWPxl?WwDu_W+82H=*E6f&8=bTrr4^qN8kiAG%l;+opDl_`O;BO4kAaXlzh z&fk2(=@r2r59ur z_#U8NiaEpk(75GbRf<u%f9N5A;QW$t}@+GO!clM#iE$oZ~EMfw8Lo{48n=JcEm|qn;(Vi#~SS18;&`v z)4=o5KFQTI3CD(%p_*NLQ8mFZ2RcZ{nxG}xn&{*V6Y^zHkAeqvax|SO^HWy81CQsI zTP9g*LY*66CFb@H?!R=`?&g|0U>ux+Kk04Z z%s2OoJGg8k=qzbWG>%rT+vN@y?k~M-8tQfMX!xan<}v?keYeuBShnOS#-*z7C=(GE2eYJ|W&HKl>Z{~u^|6XgSxo}&SHH76|=t2u|vb=p#zEN24gYR<+ z;chklTWcrLxCj;JGr>$<0MVW~nhB0fKkF>?vKBE${AaD5S)D!1b;$(pexcv!m-9ch zcE|Vq#1_uMUt7&+cozpR=!^Vv%64cq7l$Y}C3T)|DttM&@KmFxVD-t)f}7jSqn7VRDV?g{%Yiw@df z_?-emwN@E0n(eOjokDo^Mgij|-NXXU5t{g0#mS$0x!W&s4fS#n_CF7ZXYB-T(`*w% z{~l0pcZv4q%cZw`t+i*Vhxho%@ML?9xo1tKWoHDwU-y~_CXq~Ktsjv5TWdGC%H>@> z{7L`O{hwOt$nuLqw#O8J@m`UuE2dGl>V{j zx#tY~miy29)qiU3FoK`EpH|O4OFp;W3QTwNu3g6dt+lV;_t36g?WJ4^BedOv>*4k6SYd4P7&%5g5rz1Vu+1a?%OWz0{r~e`L{F|yB-fNt{ZoU0pzMFnkQkxXG z@Bd5eS?^Zw*M4_{U-m3@6j?ld$xL{;uYJKjXXSj4J=yIuu(U5556s9)Dmzix&*pl0e{rc=RK?SGEb02zYU z<$^cM0?_rHt=EF{bpqqIol6m&5E-426`e>_!o9;n8_S)W*MevTf+}?#m_foI+YZ2v z5WHQN@|P~W8R3fbuCYi#7_qKJtj=o6&T7t1Vlfep<{0!)Yr6wxNQ z2*3s@1P?7tmq#Sm%{tOT&DTW}C3y8DL{X4KUy;r*lFO(T_K}Q&6}snxUJD^-58(+J zlTsK$P4{Mwzo<}9kW>&^g6Kysv6#9ZTD~4SXo_m7FiZdylTJ|30;EVm=hG*U9Egwb zmngzX&a1}{GJ@&1?vY~m4?2L5#TJ&E0crRMY(tU1diIS&caL}4<}c_Pq#mQ=#VAhHqsFd-pyvzs11c#uCH$f8xu3c4RN zNdmFVpI_?L;|JS<(t>L69rb#hf+V4d`X9ps6s7*wH-C#z+`#7fbZx!j^#Rk*d29jq6^N2oXC2_@Y z4HY8yr6PBwn+=s@d?<+GDoh$GPr@vp9;&3`;M?JP+8(OG9xmt^q9q)z6O%=|9+HO| zu6G-5BKlG5#?f3b{PU!`VWz&Zez>sf}FFnBZIRm|jro#a<4(r4?(08a9) zn+oApDVKIAtI)4+a74i+fI2G-P#i$OOko(hem_WotX5I+Xym>IIb#Ar(B#`59wLB( zxbPr1(kVhDEuyR$QTHgK8b0y|9gv(qJSj&>)y-?!Tw>+txFnby4 zzzK>&cq#yV3Sa^?^dRP(Y>bsY)?X=yu1o3j@dQdHM+R3lns0KpKL)#SZir8zsaY;D ze&(?=JboT|AXx(8M{oiaei-%l1R`@zlwD=SDHXYV1q@+qaeR1*t~?$32`m@@Bu5UW zI2po^EQPK-MdxUw!g0alDQ4diVsl0^b2LYY)Dt=Qd~#YE{eA!&fxB@kbsNRBaAu?u z@!a8f176sd?}~X`a{Rrju|KD?9;d)UNjdmoxezn{=xTv%lXF^WMP39VFo4qBw8)yY z06g`|TvgdNIk{0aFG5ZMaWt`9iBa|`;Wi3NluUJfwa?PTUih=~rRpVe_41?Ytk;v5 zTeBNNNiPUMFoK3E3K^HWs(3IuFR|KtUt~BLc=(@FA8$FWqBZo>H3EBNpM)O>l){)A?kn&jd3cdsc+t)i z9T52Ox zth3))7mL(^R>gqN#kJfzpY)gN+i2^f8$*3%Ab@%%HhTTNCByb*jg@slzVAnS^}6(y z_qO!FAFuU7QS|4_^vWaV3%Hj1p;u>iTP6!Dr|j#dS7#TJSCw^EosVZ)ef0NdR##`o zH>q3ZDu*^kmA0u3SPNGdYV~<~^x2PB_lT2@Q1TA+>kd&kPa4)#UA1=X<#uN$_g~gT zObv1$SEaWN*sj;E+gfhK>u%jwd-XMc2OExp4EX}Pcdys~z!(jFG0a?Ae~wnTR%hNu z+JLdxfX(^^;b8z}Pys2iF7CF0)VG05@(JF63o*qg>DoyC)DVSc6BE@4bx#c%yb+7E znL=oc6|#xf$B#|(6USf^Pjz!b#Rz|IlZ1qyKw*Ta-MH}G*67hNrGyEFDi;}viN+7` zCQ$Y-v4_&#qIK9>G~VLN++yC_!v3Pc*luEN-^+By#eup#1-b3Pxh=1|&AC^`CD6o^ z#r45sdpT$O>U7{!m1zTmN#*o5!`U`}BmNvTDdK za;>>-zWIXvu5KfP#@M#ro%scfxp7gGKFMC9kVPb?1=h)~S>L$D9ly0llX-~6r#uVu zx;>`RJ=-i&qnH8vI}0>u%P{PH=k_KOKZ{g7OSisF7n%WA56dxI%kPQ%E8xm~ucFK^ zckF&=YYub!mBaf*LY`=PX0c-UC^9Lp?0R8`&ZnIU?^YqS{%bvt+|0 ztaz`ijJB;hkq=`fUNKusyah+{oq3AIa)Jf_H=aXY3F~;*L%)>6?;$@kLK@P~*t2QO zb2Rj`vUqaa&GKoO3$oY>am~?<-m8swJ3y z(5zO#+IEuJcFEWta39yrF$TxqQM@cc|MYQ0nX6(Z2?VXG8i`+4U0nfQeN z);3j*9N=LbJhSQ7u=}2KlH6dYJ8ZXgYFD&+0?tA`9p?Gax7Iwa zaXd+5Z?195%5$12dO8z*I%;pPnr=VRcA7tQ+U9pUtI@o+Hn_ynu&SW5Mblyg>#*L4 zxxL1|NyEM8pm~tBzSC&Aui@aLVY$Q1ryHkiqGI&xsCvo`mWIp?DFd z>y++r@#N=ojZwJ{Lb3u!|(2%dWvyzx|aA>J`a2 zh}LtHBHKkR!sTeyMS1K>{m$9->}t62YNXdCgwZuq?%G_(73t3vkB#e@z_loeYj2F} z4fv8bb%ZT;|Kp$IPuZ))^RDZe*I{?A1|)7T%s0{kZkzfyV)v;MmV1(t=2Emb&mj^* z61*#+ZKezilMD2h6neh+<=hf8u z5J&sFX5}G4(yRRGp`GQyfBr7|{5To+A@ixnQ?DzAo z`9uHX+*_aVNw?0sUXi2P^GkDwT1v;mH$|(ARLP&3>zVsczmva=fxq-Md|{t^s_uV+ z()$A9eJ&mU(y#g46?)k>|JaFp+KB7Zq4*ra{|tT(v{q%4#7!oBZPN!e2S+sgyR3&< zg?>4~^99ho_`mmcoqrxnt?P|t8i6C!V)G4s@SliQpPGSRyOH0(R@ef;@A=Cw7RWC{0~c|9Bb#4diG6X?v*xw$XkVuFE3U5**TV~g z?F5HBLzE%}6K(*M0b!iTIRHBN9CaW76CE3rT+@XW_^(g4{qpSw(CUGI$}8EhRQtCY6KvTMhk834x+a zrA>p$aH<3V1`|xhUOrr@{~CWiPm0|Nkxu|OrD2)aRn149E6Au>4XO`IoMGUW;jRs`N61$|Cos1#ln9NHI0s;g)fIq}aDvg=~<`70& zs7L)C1*v`fb}}q?+C)C4*M_M$b=J4A)C({RFXIVdK3pin^V94I3CsJ`he#Ox6x*$~Owp+n`(=XE znMUI?16A;dzhiGab|NK#(yJ$t{heu14ij42Z9sO`jggbUIcBw-881Y3JrKI_HLImu~iOR$$Q?c4orTwxR0@6Zd zB`AbmrFdjC<4SkQd%vXW>9zo-+nFZ?0-?gFk2YtqIL;Y1i|=mrc-Ops*|H6gAH+}C zBbb})PT+r!i(nwFq=;V!e&uRjYr9%yS;}WXmh3^3Iv6w(1$F)3O^s z6&D(fusKk9RB;XOD&nk5EON7_Jj&J?=ZQXB&wi-4u}6;xq^Yx2bTj55bL2; zd%hgJkMS;E2rR210ue@5w2VM**ojP7%zOs;!vVY&yDZQBj^?PDGv%cT-K!?Vy2 zy?g$A0(jmDDtm2GCISGMkd~i<@q>%V zeAwkjWaNn2C2+f!!e|aAZD_wO#c)fF04yb)_*s?FK_*6MKR#oSFM%B>Sb}nqUnF~| zRcd_`?dF*TT;KwC$e_U1&?gnD)XZtU5F8LfG+4ER0d7}`cC9r3Iwg(B;y*#N@R|;Eq5a%|<%?sFc)e$8Bm`MIauu(LdU#4kNGV|p^zi8l zs`tm{Qk?Fa_L%hI8{QZ)b!yfqHFUyE1vR0tB>-q)E7=e9+!$^&Vwnlg7BhVxXdc_B zXs{6ig6mzNGoLGI1%(S~J{(F909Akhlw>AL?bq4ATReN>09IzWgq1gE22F3ekfO|B zlt6ePlsf|Y9a$jFh5!3^7+nZSodK{lLI|=(0pfY+(BvCAU`S^+QPStQR-an?>_ayl zndqIVR1Y<);b|!z+JqrM1ty@fz)D)3K_gwaNTUl9rwkWnRu_p-zLx{%N2vV?Cf28gei0sE5PzH*qioHv zO=F$QW`*SoqRxXEPkmB86P%>&QhcsQL)C1gjp3J{3uBRuwZ7S0j$c%kj~bgutScRP zhjp)$c$#BIE1fBkR(3d=sCw+H)UuZ|wnXNmhl#P=%a^B)ZJK_OZ&!I*BCVaq@U}L; zbMP8X*SW3Lq@Gfba3fFxe*c&&#b1vgTw9kJ_pi{rr&i8mw zU~sH)gtHl9!qP77OJ+d3R4!Cp`s&RduhX`stpQg0BJc?^RUxd%{?vlnUuTA$#=X|I zbHiU$l3ZBI@JP6R~DG9AH02@_9^t;W}t%@K9KB zVB+4uZ3;|$L8$LNy)EN4LuhbBM$kl>?ck17`stW($$S3()_w85?YzNIZ390AJ=Ff0 z+5tZApwiWM97f30^^_L`NyZ+b#00=8=UT(64UiuvsT&XVlY}D$b|1HsS;ro45wbq_ zO9}uIn*?pNNcM6w-nXsyQR%1q7@P;MZAX(J?Gl|QD*-a%gjW!bTb7Sugiac?uM0CE zY@lbgq6d9Jci>+ABZ8fYFV)!flHf!dceJ zEg1p(C&rNOSti!`a2B2F^quqy*R^t_|5B)&L<`Euu5`5Sc6$A(CmRR z;F%1-Lx$)#ia3{x6o4W=U<5U>fwYi=&4EE?5Y#PY2vEvSBBvl?$kR?T!tf@AhBd}? ziTS;{iX}mQU1;23P9dqEEbKOZ10=Z%r(k9HbdoQEJ0@ z>}GQd+@(FsJ!%X9#^B~{5wjSR{QQP^K~6vt#Wa>jfnox{-lE;x!eOBRwB}G=Wqp*$ zn?Eq7Rv~06Gv@FkfDBOrbgn?AnWBH(7*(efmm-6~5ku797+(bjZ*(rjG-Gj2#$w0N2koFItEUU%yKA@mgy;_sC}GAakAodmJMVm|YI7z44fE-}bWgdyX)o2^5bT!}Lh$s=&6 zq+bxb0fl^Hs`ijN^QJbSpijZZSkROlgVVW?$g#FW>RN$fLkD+W~_p$$WJ4Eu=S>2uWkHdz#c zG)xM_;CIBZ%>eZVS~OJJMah*VKOyE zye<)H5)2Zst0!LD^tkpO$z|hqDEVe zBwLDP(84K@$MC>@+0qTTDpJG&`4C`ntkOo}9J1UdeAS@=+Ux;22JI~ltiKK)1(+!&2&N}KY6Y7=Z*2##A~Y!eE~OCxN<{mXwkK>xy#Ywa6o zojVTeVr&Pew4Vk4IxBCzJC28E>a5c1s+w!dJM1W8=ptdd;5yM`s_4l&0(on6rnl>?6_E-NSPn9So_c2hK=6WusdeR-1+HZya_(=3&0YNzSk_6Am!JrvCI zBusNUr;&2@t$xhkgHFS}n3p0JmLg7N>Y2ZMw+D5DE4@pZ7t0t|e^$D#o;DAiTJBbc zT%9f;o;5;NttAX?+AwXRI&5__HS$zVi<~+5bRZdP$gJgvWa0^>4iX=#AG$z47`t zUjN4H-+28SuYcq9Z@m7E*T3=lH(vk7>)&|&8?S%k^>4f$KF|(5gBjtC*T3<4QtZsT zH(vk7>)&|&8?S%k^>4iXjo1Hwg4b6E-zOWsYg*`S5_OLH7q9=;!K(2t(z(@?z5C4Nh;(suMznE%IjTH8Zwj^9T$fUv#!FrkQ-TI z7e_4Determo~Eo`9Cb9POWSPS;u&8Y^DJ^#g#0e38ZwY?o^^trB zRms|uc+NNZ)cl8$96Cu!7Rm+eue^SGdJ2x;t@um6wQ}mx%qx&AvGlglC`_BJ4r!1O z)UVNM3Y}@_bFZ@IJ(fMziK)7CuL(Ytmf&<-utB-~@yhE}aDF+A&^XrSzVdoio>|^1 z9zXxgzr4O?xvIDc4a&j!mDh*Rj8sBY{)^XxDR>LE`RzSAme=kzq?L}N_kFjQ*Z)*i z*0X+cw7MtUfRk)4gEPJOz{$6X*3{IFFlHAjy0W#G(%ku?e;MhSv5bHJxmi@eCE*x$ zhx&EFfO`8?TZY~)(JQalKD}x|UEJgC_Zqura?RTQw&yha%IgK(uglx2Z?8dyiI60#~WyH)lv> zFPotq$wi7_-xSiP`i|m@cbQ+F``7nQ3C>N;MU zJ7Dzap~bjh>^hNe=zb1FUvYLOF}9`Yb}TOoZXFAvhzTQZ2?bns9tL(|xzQkjh_#LA zcsem05CN2cAR+W1itbKq=TL`hWSQv_HP+@qGyLJ9p@sW6Mxg#i@9p}8gZiAK`tZ{w&U$hP76OAx0(2%MDx~4l z5hN9$C0y$J{eJv#1@$0B{6p=*f2}<-(Z8(yg|KsLe{j(MV(+ek>d@9j&rjUl-Q9vq zaCZyt?oNON3lJalKz|5Uwt-a3PxBFC`>gu}HRn2%F594vv zsPX&$BIaNJPqpY`zo|VyAqsaeG+*vh zzCx{(LiL9yY9GH%np)oHTRxcW)Rg{^_O(1cBXlscejpWhsL)?fi&diV^-u|_U~VXP zV*XIMv_P3Zclq>C6@(<=4A-D?y;km)pdGH)Qu+#`L~A(Q6sm;5J&Ynf++080mQ>fM z%-y~{+__!V!pZ}8Iov}#0{AgZUiQuA{ZL(!BEQnexB60+Ek*u|Ax=N#0cl}F9uWsx ziT;Pd@E^(}+a<%ajeS}Lp>{!FXuwnW-cj*S_*XYip}oP)D(zHi5Ndzr z^l{@KYLBS)0n)uMAB%oHGBKi>x~M9grhNTBrS{l|54C_twbpaB0`5_4i6?3=3ZeE< z{}*a+_b+M>rNMzSi4{^*X)q`_?pA`)m1 z30Pw)gkiq4))M|p+b_;Iif}{P_3Oj4rRO@U;5(uxZg2kz-b;r8!tHbaQ`^5)r-ypQ zRyXJO*r-uZ5wL=$mw+dsIP3EoeQ!S3L{QJR;=i=L>Z7tinO^iG>!9$DU+Z}=XhCA< z^B!I^o{%2zU)sLrU)tXMkG4;pO9`m^@>$=1M7Ly0Z$)4{7%(o~ke=J2=2VMlpcuom zx!_@uf2WLSY@q?zD*)WmQSQw6RxFnE6}M=YmUVnwy~|k78LQHcbmG!&KBNDm?a8Y; z{x@yU&|IL){mGzpG+Hj8bct)`_>;66YCp zH(^}&pV#ipO}bHe9-O%zS4?TJ*LHW5XQkF*bQQ$W)@y!7?wdkv6w=Xv4NjC6oHZWB;Mn%jgDpoOEHi#QH#{A5uKCTn? zXOohXEVXS=;#+*b*qGhf7`0mM)!L*xc`;!GUZYuUW4LCeFWh97eZdfJk-fALU%SbE zz4^O$lT}ocNpz46zL^@|Qj2RV&T#9a;}#FR4i}#gPxu0VxFuJerSI^TPu|wcSU#zv zEpU>hm}-egp@0;*qBOl#DVbF!%C?%ZRe<)krJt3P^S1nIu>yIcV)BwwzZKMsmHF28 z#?`jkNr^goqekqCCg0Af^-ht$^|x0$I^@lI>@E7}8d`-rt25Td->j*QcZ@p|O;x!p z3g^x6K}?(=87UhFLy(mY&?dIQ*2csRUfn*N*CEr~k=)dfUeNj4#1#Z0?+59^>|U_# zx}U^(dUJY@t-aQ<%?`1B<+%&U+7Vw^c3M#YW$I$6gWAUmtA3 z6$Y{i@8pQ^Rtn{_t4!QecyDJjyZa$lM7(m({sc0wVk_pPIa+ok4u1bN_r5fZy@b;K zC-9b}(S8T6eMz3p~`;JY!^kl)WeAd~G##ym~IsI07I&ArkFAC_b3NtM- z*m;XOElV0%OZhm;@GZ+-SS!NWD@84;KxW1Gyw$PhwaMn;JcnqijjxV^^T{bjw3jSs!NW$kB;WYj=|(d8I951{mejg#}+=Pmq+&PkiXAk4E>@4 zePEVhbmNiErGY}8(L%#uMtm7bvVKUZaNLKJir|!(G$#kdn82z#T`(q*RW7o{% zd2q)PzSTgb^D<~>wUd7q%;UAi11GAG%PZxw7}4c(MFEPHy_CYIPOfdFMv_ZLR|ae#0xl5J*CGal_6j!pB)0!=Gw+oKESuy-YtXX+LG5Jq;Z`Ej&7H zT{*2Nce@0i5|X+v#=0#A9BreY;fj66sj|WMIa6akJ9IhY4nNzeJmU{NB|_LCv9+Z1 zv81{=dr$9SJLbO44)!<_@epzG*bO|V>-tExdqUe}#bkSqC+EoW-I*EVl+o0cRm}Q@ zE+5C54ttz4x2`)8fv4{5d6?D(8-u5!?1i?ACx67gP?xHR>ybc_yC}u!%bz;p95#|- zAVGrHnPZ;P1pH!Ma&qHVvNwG4404LU&&btY6PmnM9)C?)d&z2hp*r`P|KT-G%4-d^ z@>e(3QgX&RV*8qLGel=exF4E+`+bk=Y^M+@7khA2eP}fG59SQ> zs@DMDaUv?pM;ao|N3Vy<@4?cX!Xnbl+_3lrq{&M?q;U-``;&E_oZ$UqO+GuokI&xEZY};rI1X1;aqbo7xg?oea`E~mXy zDqtjp*E{LG5bt~9^&@X;Xa?e`dC{Bg&Z(18P?@v@^dYJ~T%WR;bwG-;Jh}-RJpT%! z>Jua*u<`V&8K?5G#h9HB>dgl~J*oQq7o~$G+Bj3?V0(zF&w`SLRgqWN{Za3LLvDO{ z&9>a^u{(vg*vM}3K};C$N!821A=MbTy@9CuFmhR@<)s_f_4Y(wt_-J^TI=D^KdL_W zJt;Di(O;^bz>@w5I-l}is$RKQ2ab*sQ+|T7ccd3;nM{MiMzpe$)b%{G?*Q>HdX>iW&T(YSXIdF8P@d*5U+f!ClF!hJ?&j>?*HNUCUJ7Fv_EH_8teM>oO^`3NUSsg6TXL6wk9FIeLEB~{W< zqjDnIzE?)%h&U)|{#x7V^L@=Oc@~!HVM6_GX?BI$bh^&`!Mg&Squ<>k5N}wWM%1Xeg(=wMp%Sl%kT2va^&=3gLRwPjo z@NnfP@=YJfj61OI4Ra3r>vwaHyK7QhoZqXX6=%PlibPs*(j4P<9XTr`&vL9LCMcj% zhk@&xh({HbWb=}Fz~8Q#bebuzoKpIMBAy2&?7*12zPX3lPcXX3D<%I;gntER5X}M6 z7x&UYB2~P_QyS8(ACf6!OuAVmxHE2&G+#Stu7v-VaN3I|MtTN>>ywzAAixv3SqYRR zzsu#>KC_VEgznzl=PfjvSVXrc1I)!lj0v1HzI)`tCm8Kfl!%X{q-esM1o#7(8K?au zx)8)5L-6u^m_>@=hd2DHzlHd*0tWHxounfXx_toA-vVBKnbuV^o)~VyeJz>L3s&ES z3#jxvxjR(Dx=-s2bmS}cKa5bWbW@jgWyL+WN@LW-O)2obwFj6*4p_&YqFglK+5jUghk_JHIA5x6En zR@x%P#y#OBEiD33vl@+#Tn2;2Bn!Ga5`b18QxO@M_=Sgt_5-ZEq;o%dCe%keZ0yiz zL~}$^!d?V+Xqd3&VAmQVDfGYzIR5pXXyw<`xZ}H$b`^=AL#Or6Xe|c9_Y&f8NH@92 zN>uU+YUPdP(xhsEST%2S;466~gHi zkfcIRDN9Ht=zYruRU`!m6-}@?Q@0C6?Po^Bi7+EHLk4&Va)FjnoT>B6^zuYRQwdR4 zxyD>fUy@-$MFz5w{P#XeNxMPQRcAx7s`p}lS&wIgl|U3I7AGBrRq09pnYho3$P&a-tp*Z8XiS+dOLQ@-|Z`WkYf_h+@YY-F~#M6_T<=nvs0pMPALz%T2oX7ff?88+?m=AAYP%r>#`%faJWXOWB z<2tVkR3*-Tk%H;1=uKJ%gB=si0M+^QFLJ6CXkS1{YNWK#&&DV$qnO?`HY;$1*Ti&4 zZiU_wbVJiu2b&v_g|RmGV8ot=raPIVI_d%6DW82<3jy))dyG06YT1ffmg^;Rr}0ea zJ}fE)JflxcFx~x#aJ)%4Qizq=a!!tq69J^e3vd2ZQG6a>4bIrKAw< zPdGEZzzJwQf^dJrG&my9aJEs9y;$h%M0;@vaxW#5taPbEKqMJVHI@B=J|#Ny03tO{ z4zfE5z<@@l+&Vzh(KMaA>gz=ll$&kD8$Uz;z=13n%=Cq65TAo1VlGVf-gG%=DIxQ9 zfn|Wr+g*C`Q(cZVr3Mxjde>d0 zy|9(fK=xqpSo*5s5`u$7kr9t=1cW6iY);^MOnPPg60n5t+cb=J6&~uhtnpJ2Fou>B zS`I1Le{oA)Wpn??^eFDu=>w4b^fQ1zf6WUFZjyo)b(0`zpNP=%f=qEem3?V61^1yj z)sX!*eyZV+-r|p$G<_?*$jkT*Hy!C2N{i5-l z8e7g-9`h9jJY^`-hgT9H9)=1%UnCqFLmuXkX!{*Dpg=)<+3{N}S`V`?sqAZ0ug# z&|Y;4L~^r7X9Gk{)EkY^rQobvHrTt=HJfZxK=IoAhDjnJ>cimL{s&4eL0E7>Hq5yx zKrd7L67weM1Bgxy;ILlrPD!PLj!wMZGm|a_*Z`SPNnvj6BvGK!kE3QM{F*`jH7bLE z5B#yWE)z=mD430rOgY=VAz4m2qlZQrl7PyWV{x2gL^y&5FOH7CNerz|Ne_$ZO))-` zMH)*1`kJ-Iwn3O^o|a0rjtIQsi6hoD-&)D4rOcJIqauI~B1l9_+w0MysR- zWarRzZc?UYzF-a|LC%>D%LQY_<_4B@lVwu3`DbcgLTEn~eXj)>yf`8=H5>6J68k0! z-zJK%#YGPFhY|~()IoSiuYQ371A7yfnG)u}^sy%M5DAFbN8Ys3{eE3MYc!phl`x<*Q!qbr|R zUt-Bjo^M!=^^=X3f5@u2CFqnb6UKpzlrEHXQlss-TZT3%vL!!QZz~Eh5gspFIm8N& zFH|IP8zy8z@^T9nY$=XzHHBsEOGu|lo6o{-O<-ZlCA7^dNh>v<`&%SU#w3(Ol3J;d z;3a-I%b@<^BHKnHd(Se)sR}$}Je++&f=CW!O+q6t zt=W`SIAy=eImuav2I*+RoP=5`pg^VBT9&J@kZR{;|CaG)uAa-bq;P>gd#I?Y^#m27 zcrUyTz5;pYjwR8DKJ%}A?ntj%(-Z)RS}KGR5-X%wM$%Y760}6n6x)zd zZ=%)M_QP>Ox4F0}`YX;+TEK{=#Pk%~j;4gLMJg$1jR{n)^3}4E+DgdS8-AB%cH8=% ze0G1^=6-uR*am>O)4mT9(q!061u8a7D^ca?Viq}o3Iwlo)gB>jc)ZK`BFO<6Ea}h;MdT3!Q^|Mw;*~IkZa&q_sq~BQM*Sv+d*Sk&%ixTeCgLV**NEgUbz{I zL^LMX*(UdiKJYkis2SeE2ff9%@g=6WXtmYB-iz2NOwu9w91E+9AEsE7r1V*zA3o@P z>q->-QYiFibu2uOv?b-4X_Xx<`4Bsa$l_R83x8j@DA{7~Lc5O*#R~1kOM`nJd<>&2 zc7W}@ARYU+#!R`bUvtByli8UIKkvP@+rD+%4~bn@2;Fy>4Sj!}q?TF|R%kz4!4%QD zA3-e|6CcmQftJ=9SwYZ7v3LPl;5ca)1M`1`wh`V#b+IQ4HTe%CqrZgON0<3yBp)E(*sjD@iD@}b0| zuf65%szoE=bHmAqLycCWAnmbCz2W5fQF7MdYp39oa$~IHq}-!%=A#Mtif-zPNsE#n zCx=tsdecI>btcEJRVrq=bmu%+M+2QdSXa!K63r#E*9CEJ9=GzbEyn6DpMaB- zXDU`!*;YXnt0!!0*A;7EwsrWE71g43{K^e-_D%ZAO?LJzKIbh__HEh9ZB_Q2R^YP3 ztDS!p>~%3Kcb^LO?EBZpz|VgQ_PHlJkb?c+y#7zYe)V6x{;6R9H?Kd#ulmF5{}k-` zsxF=j_RqZj|1huT|9`^kg`QjVOKY|v&shE$%l}WH{L`LiEKi}<*?xDi_oK{oytCsO z%RgiJ&1Wp%^Ni)6vHUZZf5!69SpFHyKV$i4EdPwl?zhPc8b^go});c3aUK{amYS&ulmmJITX_KP`GZv@gOOi<5ETuj5F_>=ktv zr$#d_3!Yl^Yxolx@Lt6-&Kt^ci_=B2SN38V4myw)y$#z{nYD#;%3iRTBLn#*S=Nnh)QEDK_O}IJ7k{$gL=v~@!Z`I3@=`rt|E;+` z&Hbmj{ze45y@&R)ffSeUDY*{S3vuA9Qj&D_;9f&Z$)LX=IAZUELM~E!FQ;$=>vqcD z5d2h<3HBRJe$P*uZ-Vta+{*;NEg4_mNsa|eL6u7g!Ac9&eRJyh);cN0zb(Za^G)1J zT7yKI1LvFU*DkCdb#lwK@=3tcJmAYZX|``b<(N*3sW>O8W=$R$%J;&}7oD%H`gD%? z)vcp1aFa4>@4*s_=`(Iu5kpJwmzqcw5{qMT$^I|L?zOxL=`93td;WEXT zl_m?9eUBFSn~a;uN0+CEPIm;G$+w>=K*)Hm6I#qaWPD!XLp)&X)gZGpciQX0{%X1C zFN5A+%L7nRhr5w7PHDpJV{-tMQyNj^t%ya8`6b0sWz_|hw^7xE(X{|tU;AhleFf%k zL*-g5U&`5HiItP<6(UKf447h>dPQUB3;B5v*%D*Lp@Ynj0LN~TC%5Pc4~gf5h;UJf zonLFaU`Kl5Wy6`3!Ck^55lYI@K~J@ICVx8k|Gn1!mmtTUOyZhiRXN92UXEwjBBiT_ zMU~b_3O2)KEyZgHRR&N}!gwgdCSo4$s_k30q4nO@;_4C%;d?`mqhDUVLRR{xrWm@%#1b~jTDq>s)n zfHd6=Ax(FOq0otfe%L=vcVrcAwz^l&I-0aG^Z_~-zS`}7vhGRKI$_`ede$%!R}b>N z1oDHy+311H1EbJ_fqhY-%152EmCn(=)ME6Ui)x^e?bDMB z)9SO-<@}`=Z_JKNmN1np6|4uvml z+AzoZSq<3f&Metsl^5gsSjo^>JvP?4 zTbXxWs%HDL;H3}LUOk#IS+ZUgIxtBaHCksgsf9B+?9)G5S-sRYt@^bp;9we$X1c$l z7*M*}-m!YsxAsubdgDw34w&mQi=m-5(Ks-g&^EM{UWWz0c;&Ua8-M|rC4d4i?|;^n z(|&5vLtC27c&(>-t?bjSL9wr6^&6n;RG`Xk;0DU(^KPJbCf?GSu@S8zv72{an5sIN z5xDRXgV#T2Y#^_;ku-8s>1Yuq8+e?18`fIhZwd}? z;(y+x6}3QYw18P{Weeoy5>+F?v8>?ULYp;jEv?}RZ{@Yw;ES!~XJ4lD-gN$CDKu7u zFWV$yq9X>{${ez^fZ6_lw=F?lCr#cYm8>tTV>QIQZSHB68MZCo$Sd4w9$=v3L@AZqH&$LQ+9=`L#I z#?I(L&+Ec2vL!I3UwT`LJs6T9l~NAEYciEM-DW~98OmpcK=ZrpX`g;@aT|^O35Vh45bGw9eoE4Q>Q;H$ zzk0emcItU@D*EdboAj(4*h;}-8Tx79Ce?`bPp(ZCk;G>i`yrg zv!ifzCLgx~x$Ka39g&#Q(-MH)s5q$Ubh&A&xET;cnbepV38Y!N9GMyD*y3a;ZO>Dr zPpNOtIl9o;ZH-tXxVaHTc-2;589XU1E>_4qw*ozD(=O_yF1W@n%3?1-9iAx57sV%@ zKhZ7)D?QPPUrT~7{7o*UbgLwNwD^54Q50X_gk6efzEjDWs! zJ-O6ixRRA~(Ei<^C?>4?b4^oDUw_S3kAO|b$4yJ^>cw|!gCbkQ6f2{jyk=cHd-z_) zRkkJ=A{GqiHm2UDuC_L=9(GyQ4hXjP4Af4po>p08&JmuDbFyw(Hm*$CssX*EIb+O!i1;($+@4j_#eiaBLpT92_Vcge7xD>ehHdpyJ zWgXR}{HnjXryTnAz0gmu&aXJmuRH5k@=rfQ@?QhY56nvbM}=gs^m>Mq{_f2Sb^KRv z9;^m{i+TNU6zLE6@(^6?uVVUer}DU9640=Q(FkeIXZu5%^WPylK0yVd<8zV%eiQ{P zQ9KHnJQA{}2R?kKM;!P#As>4wACIdLV@4hkD*qv09)K7y&=fg^5%lBd_3WBoZAd_M zYBC@`=70>5DSIi38Bs@3t|L{G%J{E3uejih@|%*j&g!&%n#3LY376T#*e7D?{ACKI*RIqyj^nOOg# z@hBAJN6^y$(D;!a9cVhr7m-S4?-@SW=FuvpUvDh6qV>xdAh1t`bwQD$vA=)@#6a^B zZ||M$pX?zxD^P<%{V>n57F_GQb>dl9S@zL5w745SFK|R-BDm_wru`IJCMY?j{>6OYt^aS z*?4p#X^^$3rO8<@d*n;uy3-u12SMiHV5s$GnmCdBfy7ubZy6X4T!{oZb%sPO^Cu!N zr65iGAwS;QORqp#*MbS>9m1qpxcI9W^9dxB987Fv6cMutB9xrqDL*J60pP8nLqSeP z_(rO&sv>dyfTZD(ms$h3CR9I>=iVeih~+Q!Ez3NaP%9qX4U!YKDlU{iT9B{HS6 z{~_{RiG^P+hBgYypovP#m;xNsiBU?-<6%(3f(WeOd21$!85IU65^DOV9m)-eS*D8U zS*O2cdys9H8?+F?Hl?_FeT-nfn|Z-x)=byjq3LA^$YHsqxay3SfR#G!tX&SQN#PP` zh`8V6xw?}tr&vZ=)H}qaa944H#pR<@>{1XXqC;=TcRA&9?O8rdy*DD61Tue%kDmcHJn)n=dADfgpz z`JmG!RziTH0u8|SvP1!NA=F4fB~en-=#u6KLbsTLhpvTA?Og)>)9}#tFbg@MvX!9) zaim{o)AO|;(E(9{&Y-hjj>^uK zig-&bg$jEPjT~i8ML18W@bA@mvm7`$PJk4TJQkb>5bnNOk>Trf`N3%x0Ie8d0#cnP z4iSd0K#-*4Gy`B3i(!`@MVlEBl%DD(5+!cGry|Yyr8w|S0$$U(PH%t=J@GwiIk*Vx zfm;<2pATFY$fg7c|H5iHZgCu5X(0gQH4{E^ax08u|UN2O;#yN^-p9q~-bDoe4zCZjfjy*8@(jH;9jwIZPdW=7N~<=oN!tGZGh^~#0{y8Y7l z^@CZ-Oyx>XFOc-l(m66`uPU!&7G0>rIS-`9m)>MfFR{w>DDb>%dY#J6sSfp`cJN+B zWU!jEL@$ie%hrDVJZ*h2~)k$~`nB<$t2{AtBQwq}!ylP~d;6^WqYqzpL}{_4PB(sXi@A zB?vU2R_s`pP>yyZ~NTVevAwxut>oD8QKMqN7N+sFbkJAgO00x z5#aVf6&~u-z5`d2AT4ZhO}q<4`0&&J&~NP_Rsg^bAM_52)eM@1Z~)1~?LB{*IqSaO zw}dOMFLaI8i>F1Laai(Jkq(%|Ko+ZgPbvacLG1A$S)P1OG>2tnsZcEtSL#Ac8b=Tm z6FemhKgcZ%>oM^fdHdTWGN*f*^7c9*5da%$EQ;=9yf2q@zj$HI$1Z+QGxH+dI-V=e zz;HP=3Q^)Gz8d*>Wz%1q{8LikaQP${;dN*RElORR)0}UtM-3l^IP1>i!~w86R^&5Z z=*%qvyJu~6{q{?ubQx4fi!dV$BZqw6@bJQ0x6+mP>7>;ik`$j zju$ACup+Hrcvsn9JX{mOv2P`=e>7w)J-9rV(h={oom}CylLCOEvb1Q zQE_%c&f^NWoq|nqp0G~q*C;d zWI`U7CkL)_=c6m>ZtWDbvb8&^ zuyd%ODOkV{!u26=*g9f(=nq(N7`trDKI|JNlYJGFQ@HL^Itql=EHrl03;j%a>9xx+ z=__N?R45~W)7lUHY1mBZ+XcnLR0?!-NfJe5aN2=8mjqDUUa|K59 ztzwf_B+7fT&|cW??fC3pck5ev6e#fHs6qIIn{s4nAIXV6ic_MUu>lc;%sX}{5oOUx zX48@QMt@x9;I*t{T~CmK5>R7vD4}z=-%=8@$0!PCk!VtEn^9m9n-lnMgo#*4;>}#( zs^P$!A>eD@>tkSqhvKP@_fLqUb!VZqn>i;~Fogp*5lxvba){1NK@?zYgLOENIXtrk;30=u)ZEQ~oeDo!-iZd8-omc~Kog$J=#j!+nwlc74iF|M zvLWL`rjhSKw4t7)qLGF*C*`uN{+t&Mm4EO-qc(>Ik9wPkUH<(% z+);%|$7m)I87y(hWbJWK6rBmX&bF?2yihF-0D6l#IaGMcQYi`+Iy@BKi(K!R#_l$c z0BXlGhn6Ul8qwbBMJ@Gei-ky(G%Ezl&u&UCThOF!d*^I3CK%47lHh7?vL^#sXHwZV zz=`ZKtHLGNEG^iqHQN}|D)6uqVg}Y$MD)6$lVe2rCPE|%;^`U^yOl0T& z$ZE*2VvjUE$7`H2>I0mG^P@ZRv^$cL(yumYw5Bq&I!Uw>(+py%EgZsn1c`ZNH7x^) zrPM!2Y~uhwgM{4|B?)^(YG?tNJ(9S=O+A!$&;TZljG2T&BO!W)>76$7Ze!3CI}(F* zexi7}CQC=6_>0XVSetGv8|^?)93x24V@E^OMp?FyQ)ekuuTT|x)dpVN)@Q;o^wvqpWt5|}o)RN@2IW9>n;R&`v1;Zn_5F5RB zp{1o`bUVQb%f)s_4s~}a_CSX9^eqH86eUU*F;VSWb>``k!+Ot7vAOR?K?B~v2fews zehXb_R$Al)y=MR}`ecBlqa%~z93~f>ByX)xiY)yBo+hMM_bGY5f_tu2B(GVy04|5qZe8nuY@rHx;s>5sb(#l$7Kk&gQ5{vWTLGJy5JrN5ym$^)dlBFgVu1eI= zLV+btz_E&}?32ZzvfZJR2TQ|hL{nORL!(Z8;Gt4znL1V@XpF=s&!|3|~UVnIMA3gE+K-T`)a$xw;_rS2Bz?`96R$!*naHiE@rIW!TYp5W@ z*g^Qntkcl_(HNio1c)^f-FaBJd=ex-r8zS)MLz)=_(AV9&VJmd>8!!wHkQP0>+?q)x$c25^yK;p%?JM@>i={&qV%-zyD9xGm(EL^5ylj4u=)Zpwh$2_UmUN|4ihmo{9YX zXCnVh6ZvN%|NkE%pCm2k2V{!|Dgc2}WzuYIK;=v6X7OfqTp6lA zI9@}#PwS{j4alSYx=;70TC=_FRp=9u$Fh`JZ0$4N?gJ;vbmjG#;P#t8R2juoK(!aC zjMS=5b6N4oB74Zj__jwzx64@7+4=WJ+cIDETKFgJE&VD68S|mz62`Li_WNWNuF;5G5!^9U&~|v=kUE|faRA$Hf(y0a*2It zGgj{B%`enPTanJbQtv0I_Yr9Uh{=En^oYIKpLPQrOmV^L*^Ed^%-l+~?bRP&bLPUL z{#8u>@40(o&)3>s9_26CiUXP>;Ld-F>Fz_#umEVT>?UbSq?%0Co?JC|wCbZlZko|4 z*e~nT{Pq3<4egPxgQSG0fIKROVJp=<4Fd0yk$T&hsws?h`DqroG) z?bHLPWWVZFpN#w2_#BeDn6xqz$vCuECAv1}Cx|Q z*`Yz%6Avofztl0kN@4I=v1d^Fd2%@4juy774M1dj?dZSBb}*H2up&K{3dWTNxmO`s z1r6mW%9CpknfTka>ree^SNg}bpKed^ZE3QRB?*0`;pjsVl^g=x(r_A2&MN~Y(!LZ| z6UIz_DSIG^$0ADPBx)+p2j~%z;;FBXXuj00QyOIv=|D+B1?cn+xg9 zchdnU=$if#?bsuvY}~?q(=0tRe4AQrPn?}R3Ux-4Y{ndtPPZWctD7#<5bJsHZ<@Vy zMsY?%WpqYkQF{_O$dp#t5UD1`y9qPWCo;7@&k8R-XMP1M*UGQMj|3pU}OIPMrAe->0d*-B{0!RJjm@=l1^P@3W zM&H6ZzyNh~f#5=)j$|?Wu`zt6suHKIC~UF#swIE)N4mB_Zo^`!he65CV&&CheBL6b z8Lx#=TRpp;cD>{}S2)=Y_ ziJIA{vyY?8nYo*6x!-F!>*X?Klo61vsYZpv0=PVa$0?+3G}KWxCc-?5w=ya70zB4W zG)_l9LB~90y)w%t8zf>pO;<4JEIad&Z}IaAU9GY4H{$MHDr~TIIx6HGv12*}3Rtq@RZ;W>?Xm=DHcU(SN!}3~R1?;@i`JfM; zGz_#b>EGG9vKIZZV~Gkfl`S-AY&7>~vj%C{G*()e@Yu3LO7biYCstN`HWD?U=r9|Z zC7W*#pc-Ub-F}c$VYNr+ii>K!`w6^WP?io8Y%3FnT2MCRf57Sl`~t7&2a zxj(||$DZtU8t}&BBPAv?C0BAKn9N(;qZE4Ve=gnk3Ex*&-Pg$3|9Wk#eQmF^x?jI< z|B0_LeReThR5x`tg<0ajUF$%^&mr8>;okkAIC)j3-$A+JAobkt1A0e^Npq=9u`jga z1kNEm`9Wg;8qLI4=zd1WCuPyvA>6;_lj$?q(;pmUUAQC4( zA*V0{ryS%X8~mZp*|vU{{qOLTz{bPD#-o^3r*q&@BfArLG|y@8qf_s-V+Hu|)5#he zpYy2du>;9*D~ogA$q|gK^USPnZ@g1ane&gnWAxaqmCUyJ>(W*D-Gwoy)j;QAZkO5z zrx;3?z$lkulao(@E>)t=*_9`;oi5Q|POO|xpjKRhPEKaLkC(vC;WNjxIxd&0KcmoG zuE|eM8>i1QchB()jxz1;@#P*w8GrRlg2z^G;F-7KogdL1q29^<2D|t=oJRY)y@uIO zon;6bcKzIcaxv=y9pT!V?Y5|6kJ03|r{hKr?`9o+x?XpRq2}^)6&uy(45z38SC^OQ z_YTso{hf(3A^*?oRX6k-y|96wzg^DAD9%uC&K?`V?nZ@f*a&AdYpLXMXA_me#JXFg zKIdWB9(4)l?6xmic5AW6`{?D)2_w$mpLHytyy_xWTyKcC=e8JE7GNlu5 z+X%0+ry5ZTy^<|A_Cmw4_`*mMa>K+$C3)r|cS+FoTsy#091r zszT8PN7L&icn{Lb8fpYD2?{>tT|N?Suew)W`{-WER#z}{Zgdo0=)PAUqpqTtudq(8 zu)$Y2onGZKS31L9r|j3}Hz{Vj@-|f)R=U^HItp`)CJ^D)u>B^8 z;nv^}k=J-4^0)6vZoh}!Mk2JXk9eyK-+WfR$>?|^nP>Rn<~EK&Flzjb(b}7YC{Q9n zeJsM=XWO?Qao#5B>VA>4Pvy`{Bd|$zzWX|N7wvcVDa$9T$l>eST@J&2=8a9d+NGDQ zugI&nxjw#e{JsUh@ABTg@x5x#6S2+a7*6=USem78R2JSk*LZuHY;#ils&)Npitby-{aUFX zf-?ou3Vv0*d*}-AZ<|}`Nb&FDw*-%Ll@Gf<)Xh9}{`OOWeH=11nx?S-w(D2L8HNW` z`nxvIIQ5^k`GL7{^aTXKA_d}7QAXqO!^B*FNy>e8oPTw2*rHD)MbM)jCH_EuDo}lJ zUkrTE6}ZVkvLp9+CN1aX1ns>X86rFoYBUi3)SUkwaP<8hEMOxpAo>LuAP!zYdZ>Z) zp8Rl3rSQ=-EQ%@|J^;%|NrC+x<$P>QA8fc66VL|oDS zN^_Mkn+r6O#_xG@6mO{+m&yJ66j+1sk>&*+>Nd+o_BMbW*_TkJ`f`7|OfC+c4Zz_# z)cyXIH`;ngGTRHXZAy8l!f-TFzSluW-ev@pr0!;jSk^%)9A@xfRAg~$Kr)d3hq0?q zvtQf$wpsg(FO~s-$e)n-Jb+Ek0STCF7~hwo?}xzLO!*$IAI`uIUFb84aw~54Bs=Z= z_en?igx&-ccxq`XIed%aoKTNDc+)8An)zJ$el%QoWeZeVXkBn@4k7@F=FR6Iam)A~ zEFx>hP(wg*Nk5k33)#=vpNKmMt!4Ws-4Ll?&~0KXa~Y@7$r)mALn%{`YLP4MqRA9! zsn_1oe|2|&H`nwqk%r;Wkw}OzGp4S$`eW=R-y94UWl&e_+2mrWEEG#|Axpm}B30oG z7iZ`Wm6TxYz6=t#?GA;PqJ=lJ01!#0Vda&vUly04D6}Ff8@df{h}U~q9e%MU56w?( z>l-?-{zmM_S_?CYq*+_5sxgBNr(h7zG~WBi*n3O>W<7A7>#*1ioSG4P3{L6+`B0yT zp#=f25bN0()Nx)^^u*_AAM2k;RV4fUFZTW_D2@l<`#qb%1_{C4J-EBOL-644P6&Yz zTqfw?Zo%E%-CctR*WePH?El&KZ0&BuFrLyu4Be4(9IN;WQDms!|np&43x*0?zhk$Qm*>E65IfTSBh8DMZ zr$eBb!$HQ?LW7M#-r@npAm^r@CnG1ou4qFD#%Pk}VZ!iePZ9tn)1msl@F~81-r$n? zIoQm(i1ucif8CO(qybQxv(%%aImr5Ni(c1BFBvh{RByuyd^V)Q6zY)jOYJs-1!EStHh=5XNQp<_}EjwI_u!fjHl|q6$zIH#}36 z^PM?uWLPTuo6)7q%CPV*J{)X&9gdY^M9m0YOgGI*dE-aPdJpNg9TXUE!Md&k7on&b z2oOhxM`5ka&k-rzaU8-{R@xvwz&C=U zfg^{SkG@h)9NGt*asoe`DX;07g{z3AQ4+c2E`IIHb2-f$pjs9n(h!TVr`5+PiSCY! zVk5?P17ECy(NKyb|KDclx!x#wV@gpVdnv{r!fvAqajc4{(JCBQ3Kaw=-@e8?45R!Q z5hMdjOvL><1l-(282+ImD>@Nz`=Ulew!9@>YB<6gIUm=`Mn%ppfRV9fNi94MKu8e) zO#KMW0JT`eMo_S+S8+P%r!5ynCcg592CVAw8H;19`hSJLWwC4Q@7~GnN`nZ=SuF;KA6|lO~_UfrP$-5Dk^(K+y22iRr<@`};V9p(2eL zwwc`z3|zK!YV`zsN#bz?lHb>846+ho)LtoNv}YX(pD3Fv${*r%iq0DqVasJ|E$bG+ z^{6C#A+H@pAYhFGBtpJmWEDdY9yV?SH5dVv01`&>YcJ~gbF&xCXNUDl7N(R^-F&B* zU70_Q*mfxWnLu!!J0sYbKQa zlaA`ni&1*#Lyx=CYK(bchp!{-WV=rD1Y^$#tG%CN!|fZUO9PA+qZd7XDTv{454G>j zAihFf;5Kgt3Vv{v2DJ)t*CO8Enpn2E$2ic&Sklxq|D3ye(IrBAI>-J zpUndDJx(MG{mY2AE|mtZP<_;3(H(?@kFA0{r%F*Gt2B>wVd5_ClHZgk^%RuACr#A8J$xzh2Jx40h%AP=Iq@-9q4iPw>(ae(yxd0@craS5#$Pyr!p3sP)mFGDeGw|ko6D+ZFJS;%##dY)lF zTd1ND3T~15=lSH;&@_R|Sm_5f;Lr5-5xHVD(4fAw%&yeVkS)<+2K4XP{oMIk^WRdp z835a&d_3Cufh={6Hq1(ceS>EHSBc`zZxhoWWtE%ihCvQ=Y$5$$BHv*CEbjsJ zrN6VXS}vU5`~C(?6Om98DT$JLl9~~g%}DrF;*}OG;4Aqt?uR+$o(P(hc!|@!c?6;-j z_kt$}l-N4aB?KY>9BdVZ!;UZ1($E4l5REA5d__lrbAOST|G|F47YPwMNrfU6MmecY zn;$qf0#Dz`Xz6uBZIsY+!nAOIBHPkNTFLO`U{vR0Y47~DU6gXsW}?}`>W9gx%TH*8 zZn9A#mOmsnBxo6O847HPaoo}9;zSHXFo7_KG3tr(`liX^1&JF#%C`i?Y^M_D!z`0t2Af;q@Tyuw2SEOoV&!zvlWTgx+lRY+--i!|UxDxA5ZNV)klyN5D+#GhJ+ zIwq{91t_q%W0&c%)2o3U4b(|9DIK#_4nKcnN$w;tnIQO=V=WWDVwk$}t|Zk6OD@f8 zIBmZ|Mx`VJWLgHRNTSTm(nrqzv6l^ERvbU8LYK=$>CgSa3@edXFXnKzH>|{zsciBZ z{o)_#sUZ(_TPY=c^X}uhMV@09zhi|=MI>%`rM6?0*_&#oGewQ6^S|X?BH-pli|)u0 zp4E#F`>c@zRlSts-FbPc)Knm(%Gs!M%Uq*Akz6|;&m zw&Ygx^F90eq}57%&0CAB^epyJ$dyAt&A0gK4GE`jqcB&c0@sxGtMx%w+dcO6bN1~) z@VA%9|9c|;|GFn%`@ikUe{dXYxY{&wo40b?b^5V8d36}bar(dZ_j3LTt$VQ= z{gcM|6aD&E>%`yVx}~Sge=tq}wH|oQg+Nq~K*a@Oss|x@9C6emN^&77)+1?hAsf{H z5{W>zuSap`LWTL(qwb>qTU|p<;6h8UN6Ysx;NwECar)H2*M^T`lcx)h+EEt({-lTe`YhigR)B@$>QX z18n~jMVliFBSt;F{Id8Q6Emc8a(-nQ80#9D6qQ+2*V%t~dU1Ju*E2em{I$v_Cfz1D zKIv;!&&ZTtd}inHgk4Dd`p*8;;+jJkw4rEbt5AEYhHEp;pyeW<4Zwx^UeKZ zL2XM`dBgSX!{zmDd|vs((@Rxr&(+O+_sHbZ`c`Iny>DE`*zD5#m~;YD_Ec=-=6|Ka67y!?lk|M2o3UjEZb1)~4}CcONI zm;dncA71{$%YS(J4=?}W_Ec=-=6|Ka67y!?lk|M2o3UjD<&e|Y&1FaP1?KfL^hm;dncA71|dU$FcqGG8J6 zAw~a#l!;iH3*$TCu+#P{-`oa@U2aOnwY^Et@2$7rTN|YNZz=mcDG>X~Pq=BB8fiK8 zX~^zI$$4b?c&P6^L#26q(a7mJ8yVesm_DVG{pO|!@{(2Jp+LQ(6TD+6(qi=GVQp(< zO~+u#Z)8@yW7FiJG4Nvh-9Wu|$NJpJ`Ohl{vyp>{T?X0+qs!*uz~Eqb&C4aG6? z4fbZ9W2ez1;L+se7HuT6=jHQl5)9(CQ)&{>X=2a5<4^Dws3Q~%;}vad5>1d}iMeAj z_U4|u;|RNB=e!ra=9PSIk{fQ4kPPP@^Wr&Zl8$PW{Gal_nVsrRY>ij^q)CA4K~9xV z_P_E!j91#4SD1`f5%s++(VeV4pK>}MlRKY?FCXXYCb1J98RKTsI0}Pj^DVg#klYP&&&T)`}Rn8p(x+>s30LoR68U= z=u3M0mwch^|X~v5uTM;oP;3++E?kla9P=;r!>0{C~m)sGS9`MGA>J3#mlDGIf6C z6e$wyERqx{R_rX+6e%(2EHM`;weKu-7b)}YEDI7TkLoN>5UEJ-tjHIsEbFYS6RB$J ztm+e~KJk(I4>f?}1_=}M%ex0BsU4_;qV z&#taR)A9!==Z2>iI)=uVzwMk~-OR3h8*)81&6r*O<{FvYJ~+0#u@jP--#a>e z_wc;7wKuo&ZU6Y}V_c?7L{e-2Xzu@1F^wKh;ZBhjvK7OaRU-KZUDy(;J5)CH-O^?aNGcn z8^Cb`IBo#P4dA!|95;aD25{T}jvL4#C9nz#`onPpIBo#P4dA!|95;aD25{T}jvK&n z12}E~#|=m;JHSrV?k|8R(Zqq?Zf5u zZG2w&!_!MuYtPlqefP-Z()w0rdA)C3#@OuA`xOB&i& zHh1kq;kdzZU{bDAcw%&RX;FP!OW(-J#gFQ?-p-+k-Gk$^%j@Lgs^;F|#r3VU(%LUs z#gQ3b(@Se(bIKw!i^k@b zRB}~XDp#ruo1C^MTdLOTEQX>fR9maRH90I*nohOWY_@qEOy;V#)oyovyg%QbYOCAr z3r57CRBNyQJ_NyIHJfg4I2eP{sphG5G#*W5@H+2IcQl>M70AX=s&_V@EtTt3nay;z zT&&ewPvxn1wO(zudtdC#bir{0mb2m%eW$aM47CL$9$uEvZfQJEIBo#P4G`hD0ThlKz;OdOZUDy( z;J5)CH-O^?aNGcn8^Cb`IBo#P4dA!|95;aD21@^iPCG(O;J5)CH-O^?aNGcn8^Cb` zIBo#P4dA!|95;aD2E&Xo1tr5uMN&PQVf_rl^9*fB!Di^e=D5@3>~P!wjvK&n12}E~ z#|_}P0US4g;|6ft0FE2LaRWGR0LKmBxB(nDfa3;m+yIUnz;OdOZUDy(;J5)CH-O^? zaNGcn8^Cb`0HFDa1W^80lhgdeP+? zsqg2#H4AID))1R?*V}K%r8NR0E_kO;o48}*dt2{iUD{y5A5X4sb`YMf1c!nVnP2wM ziD0|mA#~O4L9v2vHwS;^IfMsN?(Kgbf$V#Ck8=<&I|2)$eq5jGqt)L7Nca~02&gpB zU=RjZy%ZuAbujd@c{9H22ckGNAChgVn@C@|K}qKvj*`|q68?kQ01}Ecr}!fXjf(Hq zh9s!FcS5Hn03ZM?29Oc=ViBbA4s$|K$Q=5mXV)>7C1$V3Bqe7bUoT6~QfkFK_eRy- zsM`h{;fxi3P_ z)Y5Xq0Fy>T6azjj_V*I`vg(_FGmKz#ltxfa!yYwz|2Ghl_9&3EK<$XxPg*A=Lxo}y zgM4A7Gup;W)E!KX*-wIrg^QTOEkzxI*-!mSdmJE7ibtTPF;at!eLPEi6R`Xa-9`#3 z(Az-mnN!5HP_DqJuo$08zRr*y+D|eML?e_-t#X25P-&B8ha2Wd@m&DuP61t;dfG~Mp`)( z@AG=A%fy3(3Ee>!U|~9t3{86zE%5-g)L!|lm_Ig)*%I5g6o<|qe)utzH1V7@e z1;47cD6yO9Mc{xe!$ zB`sUMAMhLu>H%q^n5MNKPxiw_Zh)C6Hk*lo{r(@fIe%yIJazX@NoPtg(ccBfGE+SP zG1XeV8OZFXxS1fDeN0B?WwWnD_Qw6!((Uzgz}6m!Iye;Q+>7AMxGR40ruuWJ*cTFj z^ZDGkF2Eeg+}>y1gA65FegN9UWhi8irVCM4kJ%50SYis1A(9X`?uR;Xh5kX7LgoaE zxpQzuEB~wy5ASB9HQ*SQY&gZ74CZ|Uq3L5cQ;Pei+8drhV{h*;o`MRR0oc5$`HLA- zJk$0G_b(%qxV>PXzQwTd2VqS}G%y46&?dgvj!A9G^Dh%Q*o=p2uZ&jj@f;_nSayU* z6fgnYuxYy{fek}9Mv9zIv?u(Bv9ElO-;rT99;scsEP*@`XTf_=4Md9+4>ks8V@!pd zxWt8I{kO$5e;xiTXVH0S$j;91Ip&6te$`!lkizXyBE=vDh8c@#KE?4$a@elA_B_@X ze5P`AmYa2Ne<+N*+7&&zh<-1RePj4z+#WkyJNF{J|8J6_Ck&J zs$T}pX}%gmF8`0suO&_VN3)f`;yUS&4~W>?7WbI1?Ws8Cf!%Gf7nie$$a+cnEZ(F} zQ)=RoOoarm=l&ycgH-pqBbvc6s#EFaPeQf3z6vkH?%VbyL`p7U9*F4ug_r@SVPfiY zI$0a|Wg-M(YX~>mIU^}|*^+l#1F3#bNPWU1QCqjpsR55{LBca@Tle+^e~Ymscb3|G zo~&VdfA3xX32o15zS!~ycA51_9F4(#cBKYR)&@yj1-(3*69nB%_X#~F{QPU28gzXb zB=i@R3L%39v7O={6FG9ZA8I)ZS_TCMnEX{cC5{pco&&|}ab2SF;OjPa0z(Rtbux<6 z&s2siG(r?~?PLru`buAIK-rf#x$13m=4Ccf?}CzV|ip^ovdORLSxB~V^Y7y z((T7Kj>o2e;%H>zSgqo$L*tSd;*7q=S?;Or-mfuK6HP%IfJu@zJ+6uMv+ng124u@8MelJJo^ z(O)Ssz#%aZk{Dc`7&@L9ewr8wPJ%EeMJpx6IwZwIlAz^DN#jW=r%7pGSaJq)a+XqZ zjze-DB)MZ8Dp#KD2THVzV3l%=l2E3T{h1)|$E5g8K>16wdPTJ6MD*LUXdSc|J(4)F zZ*Nrn65o*|7%0bFH>Q4BNzJBB<5o`l`;sd9GqTDm4Rb$D4wN1hk!Dt&=0=-7shFM- znl3$lNd9XlrrtCGWW|e z*#IJr<8ORsIx98*?ce$dS~wBH<~w;gGA z-w?SN<{iH=4D-wV%#-KonfK#op2Y~`rDMSNOp+VF{FiUKXA?n>Ur6pdy#6|dB4j0; zzsr_>laCmkf-I7b+R6CuEC5Y~6c;8ew;I;`U?_^*M#*8xeP@U=Kv&jyVxcpno1xAs!LIo-)E+ z5FuKMCSU1vt5m59J`bW83X`rxd zFi>gujL<;rjPuv2J`uf6&BL;tCpFSfaP}@w`v|gMm48# zeTxb?MHP-XMyX&75jk1226q$2MB|l6Ez@Qr*{yLeoykCxk(UCp&^@p-%DW|RQgbf? zQEA4$Z6dg6aYbkq<~m~H}kY6r^gn3lJ1xN zL~4NTDca^1<6TrG6>e9WG=-hPic`0V+n|bWM2DDF0)MhZd(|Rkj3&k|f@1~jLj0Z& zo4ln}rhOkQEgzgVjJwerx@$4|95;H1E1O3r<0eLxrb@fsSMi?x=DoP!oqZzM>}tAp z=yOPIQvFSEAc}o-(O0J0xhy&WPISw$>3@jnbCQ-T(?bfpK@H~eueHS{yFm$|1|vx! z2y%f90Hi{)x0fub-!W>oUb-V%RY8T`Zw0V>jC(p2C2EmW(VlzJ{}9EU4oJzOo)`}z zNrU5-c_BJ64M z!8U{{VFZH(xIo}wR8B2q_xUz56ERrO`$9 z_Xu1g$429y5{KU&tABy=8exyYmK1cTf%i0hOqP=z3*9D(ADq{;5N@>0Fo!L=y%SJ< z6E-!6Vl8t^Z@B&2L?R%0 ztg|z=X*1S2duu2L${R~P4a~bE%!9|Or===qb+`KWSP8{_K1ro|$9I3~7M%$*=; z`pRaeH)hBRM|W2zgzhKYSY1F3Kv8M+k%-YFW?d? zhmD@g8&5s1q&j3s-tg)QhKHI%2-@aFqn;>?zRJzI=WlcblqLEnl-w+ z^_Kev98TSXY&i?n!cMeUq8A^E^IIHu8G4;Nt0V3%{kL^B278zdO=V_T$aIAxV<}i{ zocYyiUBjZo+XZy#DbRwqmklCP!!m-$(u3}Z=+&&4c=D9Q7P zHc*H6+p~*)Yd=+2QA8Hp3RlsjXOKdW-`wziQP;KmOaAt%3Ug~692?B6j3%sub~wFI zY=G@!fkZyM+Oxwtqp1np`#8S}&r>V$Cxypk3ZsodMQEL#_9tKRMAga~Mv1zxP& zh-;q-HpL0IYfzErQA$ck_Gju2DF|13@bU?aihOqIP1*ozGqGe-$stoj9OEWEv4cB^>?Q+2gHlwMx& z4_oVAkff)nh~A?#j9472?cjGiFrrIDjU#rg@v)vrj2|jsuG}-(zmMeo@O1KU zd7|ew`%mE<)Yh3-tNJ^#2hkD<;6uM=KU3W4`NwWl?Bj1Z)!H4gp`nJ2sbSn2Vcf~^ zy_a9K|4~#rmY0~rUrqYtROO<>dIl$4wLISDm(iM>tRt99FJ{=ft6oP)LAgSCSjsrZ@?@u||@i?F}rK!LN+ z5X|{WRh&>_ok)GVq+sK{2 zC3n7r7HEk_D6K~rs}>97mM^@P)@H}mk(LR@&6jzN#z7NQ*N2{rci$p;Ge$2IUt8)? zy77vi=GrI}(<{EOazmCzEbX@uyx zl~B0!TD#4Er)Qz*NNesc2Z}Kre^#R#1PH zNYG5^K10~E2{xY#mBjuE`$>~7i-cpx*ydijgMZ$OGsM}IK8uGtc9u!?sF(NK1vY2f zEs4$G>-AP&&1QNBi5s!fL#~$d!unH4yP17U-_HUG?7V+}!cc7H$wtRH{+Ln`jLhL; zlihV0cn7{-(x3f__{#N+8bW6Xrq?JkHE%vihV#D>4MLL&aTFR# z;$Ep~Ehc~}3DKgxoK}j}0OS#@g(DyZ>f`wRghFZZ(IjlhQ6exSl7_Ta1rhVe1;66H z1Vlm{j-cm1c7f3NDb^AyeP6(#MaJ}-?C<|9*Z<~#nZW{nJ$^?8DgpzwPYl?EN@uCX zz9u_$0;mDt7_stfaM7$3C=_%O%?0YOr6didp#`9EohYy-P3pfg^bK-22fPdYks|&@ zWyks$X9Mxj`|=84Z@yNlvU*U3^)6UNIuc)*)KiHrL5`=GHrb|8nMqOGed6imw{!w= z#`*z3kSlvbL&9EMs~S=O&_c+VgNraFekqL)TuGo0gwyL=z$_x@Qw*&XR=7k$Y3Kp1 zAp%^pFEX!Dv|j)SrCQ3Jvf_8A6bVuUNEnTECAm9mkBE z1?%aAs9Btb$9q|fhuFD7xq`{CKJlzu&dD20SS{JMZMS?FnKSiE=JVY#zpzbE5Ftjl zULweCc`6l`#rtEm^Wvg zG-c{LK8!>+O+EA{0;kv>`S_t|oU!V%aazFJ`}>>>jI5@4$s(|vKg>c_cqci1cEzSN z|AVegdD-lgW2H{Bh!8C0?zI|+=Hum9!LTk=x}FA8komu#j$1ZNU|Q&?>V$*ax%0YI z)2aJeValy{_kNR;rDj-LRs6Ns?;9>r+9fr<6&qepp`+p@4KaeK2F);7tnpc&q&ug_ zyyBRu`=X|z^84iwozFg%#=hboe8kgxo*qG%lOMJbf@$u z`3C-qd4|CfuKMzW{whE0{+lI`Lb!_yM(#F+!LZlU5IMNsqray2hIu%OcvWO}T=D~@_)+Xos{#lz@48Qiqhy6Xxy$Z2x%e0oiKyjg&MaEF_cWBhi z=J(fehq8w_Zy^HQ`#1~9atyQ4U)0qm@S2F^n6Z?j^{Pn;8k9O&-MA%}YlyJF#Z1Y5#pi?VSK$j8Z;~>W%@-`ZUsgPjAL4m(=HpXqahzj|P zPn1+UDQ&qpmHbRuuTwisfV+e}!cooEe;|E!xm0kZ;>9UTC+}&wta0;9GeSi7s~LN_ zyu6ck>UnJu$4Z4}1WPqFsa~c2O6BLAbG?>Mz1sbTDsyCK!`o-IhP0JxdwB=_g--p} zR-XhXA7_&z5d+Mm)LP#WXR`rRm_g6eN?i~Gt~r9J;ozcYW|X{(6+w2_pulQFkCBTF zgXlX$iPgsRxGan9Z@SYTR;zP-XdJ{vH)^8=B1#!tovNZYa2oYn>P#!0MVXD)S3i_D zmsHrfb{X&7X|$35b#;%(HrmpzZy%DcRY|z$KVn?#pmyZ|75z3jw|d_R>UQ&KxtPB^ zuj|@Gu9NOl?YoU!>xQw_NrZhed#dH{x%lM%>FD?D#h{Fzv%~5tNDE2w4+3^k%yj^A z?Ch@{!M^sQp@&sb3l#Im9s?j632Q5r1b+}4Q+W6Uv}J+i&f9|rprb()nt~9haWEG` zBZ;;w30YgZNueNFT?ASf?gf%Cg9Z4tuFD$X^LouejVuB&E%K0h`*4f}nC`=+HRH2S zcLNa3#)VpgM@ByqwCR!DVls8z3ZV(oN{oBvLliSvrzRP_i*D;a&iIgy;%@;au*0!y zK!^}jwe!wf$TDSqA4-E?Fsw*fv`ag@hZ7FeXFYa1B-y1CN>xA$PzBy_uw*Ty@0|K@ z0x44AHuH#NtflfbD`&GHEKD3ZR55W!E!FwOqDX#Ub5~k=*4HBWwcpMf$(_wkJUUxO zw`<TNm-`o2Lefu#e|pLKALEoA4c_jZu?nf+ zNqF3Gn0!HfrWo#-^w3r5HZ?tbjR^KAVHC1dmG%pjqAU;xLk-{1*pp+6VI#j$3qjYb z2Y~=CucOpIG+?D*5Mh5XGG9Le&$AJLA{7iGE*Q^z6!b{exMepIv%&KH5*V_`ACzly zNG~WnE*grQ#cE4y`WiZez!lPr5COsii)hhOTUK!7_G{U9YJ7*u#$Hc=!rowZII%%V zVx{a5R3`}^e&BGlNAmnX-l8jE(NPO1q43osyz&U9aTr@Rcpru!3|c<(oZH;;Gknep zfrXgU5l&1q|AmH<*kGa|X3QZia)m+quR$asU`!c=0=g5#5~r>c`PaW3y2P`JIk^El zEfiaB=j#T0%v@<&_Ao6~%Y|!jE9O`B*qj36d0GTn73@Djfq5^%WD>6usd)Lg=wHo8 z8`yd1B?g&okvW)c^QN-rI1IPB`4z5`jox#HZ$<-l?^+R+9mYk#$Gw_eNz{e1&$P6jY zM9K4v{vR(`f9}DQe;_yD;M?*6fa^7rzcialKY__tdZfZfYaAlK-sP!*!wVRgY#{N~ zute;Q6!s+;hh7>36PKP(!plg8ajS~Qg^_s}qQVVP%^Z9==wHEu{K5$S9oGA2vkx{T zo&J_U-x6X#(}%As%g4sVl*2BUBGIdw1{e~){O%IYk&G?q1?qdn9>7-^z>iO0H*T=I zpM*zd>;MLhe1MP+->@93oRyVq$U0HjDUs42@JhDaDsKiLMND-G-oOZs@&kvii$^2y z$DjeRXXM|FM|1;ZbYrQRZ8E!M#f7&99UdUrIO#b9m@^*TQNXJ(>{p9iufl{9-tc9u zwL^-f6>M#ac$-UYmPxk?J4LL)+z5b?Tn^GZ>=Uk0e@x;K2ow$Wh3~~X8wk#}W|Q*O zRXng#I5tvBu1aE^NJ=2fc4d=6P!=9jPUd$^mdF`3EzS|?NEWjsleonzRvil`r~B|g zkjmDYEH_c=taKJVA!RiY_(_?wQrToeS&VKtJ6t)uxg=MOw_usE@L|F?Q~6S5QqpKr zmVUD6GQTu-vaDL5f{&&se6qJ;@?}8f;@hNc@nm&)T^;#UeM(tvfJhU*YKM+$gtO`| z+9~^(sg~~c4jWY;Z{^Mh{;ofi%_&s9Hsfu}Q_hIfwybLDBGaI|sR5TSBW&^mCQM`G zgcCN?%qnVw;c6vQQ?`z?OKkLWY=Ubx zGh@rs386Ekg)DxK90f@7EYHeYMGgS}j+c>j_y0gj~)BCzg-vWw`QfAL|i;v&W z_G8vta*(}t^Dr!e3u5y z&&pW*?WlSj*rxN0e>6Mpw0^QJ;QXD!|I3ZTUxBBmNGvW-NWn&;E>HGKorwJnxx6eT zg*b&PAGO}X&dowk@!NiuMMSm5MSSgUa_tf^?Pn*L_Eyd!Q%ekk>kRWFD;u&n$JO+! z8g14R3{HLxcArKrf+akjr8$|USX!OvPdfETOZ@6O*+_LlxeFq$LLvmLV&b%tp9Q5p z&kC>T)Vk<|;x1DiEy>tc%2Jfe@oOuvPhGy(jSgLQ?9$CN(e0dEw!6?}X3$k;&)57* zrOmGMmSRPPL4%N2&&+v6{FR=rEtB4rvVMu)yX|7*qcQ{aVfB%fg>D^FS7tK`eydzv zJnMbabk@Y3{ZC2aut60;N&)d^J zriCoqX-O|$mccfP4J9kj3?F_0YV(H*MmoG{RwiZh+*v0t?4 z%rorF5g45F%U*xhzErQ;bTz!&HlyI#&BHY>0`1b6?)v%dqC1%r#O*4m@8;z0;?(SR zcJG#Lm{0xMwV2#>L$?@Xu|U2wFB91tG_tTK-MP=*LF%nQ*~v#>)Iv8?#xOHQi?lfX zzLz<;cY9?~j%K<2$D)|!JFmFqFB8kJDwaL|-)|T8zUF*?h_&Pi*uxPh-Lb7F>t&^) zlpC!1{)2q~nr;6^Z2wkm|ITFp-UVh!VTML6FwqsUj~-~1mSlxgyU*Kc1$MQ1{$r(G zG|SCseNw;Aqj11YxyxsFa1>A@5NUlRb|6%G;AeawGHU(d(}CFWflu~<1d5GY*MStH z&BVq5l!yKHQC7!W?>fhJt+l!WcKiNz!lrhnrN^dj%a&M2R>#MkDaX<1_K#i1W{L8g@_`WFZUy2Np~m0!4}}j}UqQtA7kvX9j6}4A!_o%C0)un6d}f?ZZy( zaU&1C2=_c&m%V?K{d$ia$U*ukFhagi7Hi>E4IU)+!)crVBtFgD1M4_;Q;6}j9ojFP zdmx;TD3U;(oa)?>9wQ7WoqjSqjl>F$$}@}3WBy`io3sD{Aiz)q^6iaK5J%RJ7bLQE zK#MC3S*jzJ3sOP|DWx1Ni*!h(B*EZ=d<+0LddD~2gKK%o0P3>>fipnrEb-mpFZyQK zuewTJFzl`_3J^UH4$d33j|H3xCFtCbiK+hkoMA77gbNhe&Rf2E681e-s~c?a6GdWEyx?g($lwsku#VX1CrI(J6L8~%0$dcvpTyBz07_hb ze2^WO^9gfD8=(``-f4uJS%o_e72NY$JBAVg#?@p-umgpAmqJmtMFA9uJpu@nQgcL+%(uT+v9tH#?{Q zE_?VmgJd2Viial>;8H;x;r$1UWZ{2Y z2uoLXlnnbQ`4>^*pDF=RFDr(LhK3r=RG_$JcG7^tPj2nvfN*byB zibnzwl>Z=TA46d`ZXpidVIS}5=Ug%JB~dW}@Z}&SiFC-gR0=jgr+A0I>n(ADZ=uup z=KTZDm{;Wd9ns)zTw++k9-`1cFew)@W?NJI`1^wO_u|)g310?|>ai}tGPj04*GgYR zUk8gBJm@I;XgS{!jXe^VNomTyf9iSgLkJ0Y9|yFDC(?hx6++gvfavx^ECnG}k{@PK z+_&>2Ie&YHfFH0Qa4`8GZ1i8=+C#MK9^W-yaI-f3+Y#kia_2i3|1$)BSLVYHb3aKA zsTb5m4)X|)`{R(15fbn^7$E@i=`|n>ynHTuLQhXu_8bZ&f{2TyzNzy{3Vs5hPcqtf z3}d|J;?W-!7THtggDI|TX%C2|{mcE>0690ofVV@{1LoIAe>Ry8I86WD(I%sjKKf_sb3GBb;pA@;6?+j17yzN-vN_yP4~C-?@z@aW zSq?#PnY61RH8fg7$BjMO2Gpg|(>Sq9h( zeXBa~R+93^xx)jqb{KXtk1Huo(NeiKQDA_fwB-t5K=Pp~{$LsogUvmDo>CczDbG>}?Ygo_5)6L1f zdj7V=-#-Q0X=8Q&g3Rs^gs4O2Zw;tJKm26c4n-4LPYE96f1!?0kT;}>+%?Uhi9%Oj z--@D$KK&j->Lx@Ry;Rb^@6XgYZV4G1dD(|>{1BjvgHdc`&?Ri8jvMJCa7h8m>Oz)U zP-^6xaH-eKKWzYP07|cnLy7l1OPN-(2`OR|DWG71}keNA!2IyY)Snm!Kk=4&nOLJ5<97+%^D;UzvLccf`<$*l@Z|&XtKhur> z$MMZ!j2fvBVRm@$AVN|(jEz!0tjh-Epx*?%654JJF zU7~b-8gAX^X2|=`lv((|D3|k=bO_rSJ>?K5g@if?1nb@25kwrl&}6O<7T;dpCYdKz zdK;d_NXwr)#18LQshnelMr zQaxo{^Q?{BExID|axAP+_b>!iYVk-D<>cPq=%e}xN=06nOg*%EEu&pFDfLR3n5oMA z`bbCI=zBw_-(qvm@{D!{`3GrsbDxTfU3b5xMvL_rF(f`cLT8uv)|z!GM%d|AgG)9w zCglj*XP!)AR}~Q7YqxN5w4L<=GVCjN^DibJpU|2sxf}?u&l}xPV?(Nd8#ehWAHfZG zK(aooROb4@QxbEg7p~@e`TnJ|XHRwve6?A|SB;}Dzdq4!@_F=Br{3B3dE%9yJ+8?v zm~Tlh9pyVBKFQjPQngcGIW&@|G_Ln|-482j+~2dfQ&$~v`xrDgv=0{N3JFp~z#Bsr zC_z^iDuHx}t15NOmDE{Zk}+qYxz?Hkn=5Qbt}cEtqj{B**P<{d1l46ip4Lt-NYnqc zc&V*JA!CemPTC!bBsYAkc(Vp`N~hj*ZF^DAGx4tCtb1WAD%QQ5w31Fb2ADljQEb(J z?}hwqVXX4E0Yuj1cN(fNOZtHuaQ1gEr`fzRvL1lFcNVXP+eN?A+M&D6Nm&3{6Fj43 zI&dcclEPd&C{n{xsDgATDZt*IcJ*D+U0*etRcvQYj#{bM&^?OWHhB=C`Y3nHvNgnI zHtO_`m0iB?nd#6^FE{K7c1y(`Lk?!{{&HZ$&NpPAQ}H*a+`6B*_rAXE*_(5?U5f~3#pBX0?fKSLaPQ#GHqJ%s;-^^rpN1y-HVB;eV*UUzno7m zo!fLT=za+8af6lRI(w7ofo-4us5!lqV69E@-OgJp{C$N{w8tJ5(TKmhzRq}Wa?L|t zLUrTMth+86-M52(rZg=C0OYn)73o^<#Qz)#G^jmSlTC`Lc&+9Upl-V_&#Jr9xe!Ip z_4M$H8q0^)C3qc_?C&Wa#{;FR)Y*!?SeRV~4E}ES{kMCoXZ+eHQPZmuBF2o8ZQDG; zhP@MqMw72wn>%J(P_R4p7m>zA5fA2K*F65KD0Qh#`2inF7VgeV_}T&!A0=Nk@_7PN zTtrS`#4MWyrzKYkWy57l~?W+&I1bs&DyyCRHULbZJKB$@* zI>PCwQz5qsvr7~{@Ljjx!SGs>x_H$$M_oB*U3b+T%~*n` zg0Sn(pi#ZI$roy0Py5p@QdpPC#tf*9qE90<;g-qW5M5*hMw9Y1SJx@G@)UbiV{xEw zmHV)@#liYoxc>B+!eT;f!S%TVgt8T zE7c`GB*&b%_-E}Lbg1h7&71F9n!_rrjp@U&q?Cq_7Boobzvgtt9~aCh@wU%*M4n__ ziX|+}xRm%kF8JAfNyGmwT>JV!%#CEmHm5Q_~4;q;NQ$W0YM>hFHPL0{VTKkLS$2uM`Oxy1#K(HgVl`o;<3*l~RVJw4dw)!Xgd@uSOwX53ls{z1F^vcmj) zT0`5*8TvQd$(N$f*U~2!A$^&Ue-I~!A1hHc9ocO9!?2gH+4kAr?tjdDXg8%j-O#^T znaup9k3_p{9V&mg)Tm=Tmcby00L0dZ!Wkud+1Fzpr_vX=1KNFVM4BTT6=Em)Tr}iOn{EU zrEzdMC_ICMXQBu!4&gY;fXyLFQ5G_eMK5ZTdcOX=PAW_$#`D9 z7;ic6cc`^zg12W1L!0N(7BN1{JRc>-7smHRVEy#@ex_J|fbVaG-D}U^OTq?F`2jTS zzTYphaBN^4Kah^ypT^&xgAHQvgP7Q07C)GcJs{v8kYYn*{E%L3sGJ`0*6?FLu}x%KyX+JB+3Mdy}%K<;K&GYbV6`+3ZTym=!-zovLHzbB*TQs z2;4D!;W1O(aX@(73YTIpOd;V?slrqm?nI#QL^v)jPMAi=rKbtgb8s09VFnX-k|jLJ z#+?!fPf2l^GGS&fE=w-V8o^~x2(zbfIrGAtMcnCS;b|o<7beO@;PdoFd8YU?far`B zKHpxHPr?^aMFli`VW6lm9M6aoG3fZBG*M9wzW5_URLsPmWr@zR@#h4hb5eYXOjOc~ zFO`c*NAP76qOvJGb6&(;#FsCN%9Z#En79H#sMHr%ni8r2ag`OJ+Fo2uBGgdDH8jHc zK=Ju-0xM3;q7!P<#I-quI)=E8NvLOu>)C_`fw)0RXq1T?dkGih;tL~$rU`M=6oEZ2 zW-k(&m&MIWLJLgNf*`i)OIl5d96-XcB695|ToRE-mGEdpexQUOP87sR1azV>O(M)8 ziWm|RlPG3M#B8EOAdyIk7iE%*y~H-Tq-})QJ|StJB1-2a(nVs&vSeIc4U~T1jO+Wi z+zRUd^BGrA`hn69lzyP}1En7*{XpplN= sLength { + return nil, kind, fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength-1, tokenIndex) + } + + elem := rValue.Index(tokenIndex) + return elem.Interface(), kind, nil + + default: + return nil, kind, fmt.Errorf("invalid token reference %q", decodedToken) + } + +} + +func setSingleImpl(node, data interface{}, decodedToken string, nameProvider *swag.NameProvider) error { + rValue := reflect.Indirect(reflect.ValueOf(node)) + + if ns, ok := node.(JSONSetable); ok { // pointer impl + return ns.JSONSet(decodedToken, data) + } + + if rValue.Type().Implements(jsonSetableType) { + return node.(JSONSetable).JSONSet(decodedToken, data) + } + + switch rValue.Kind() { + case reflect.Struct: + nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) + if !ok { + return fmt.Errorf("object has no field %q", decodedToken) + } + fld := rValue.FieldByName(nm) + if fld.IsValid() { + fld.Set(reflect.ValueOf(data)) + } + return nil + + case reflect.Map: + kv := reflect.ValueOf(decodedToken) + rValue.SetMapIndex(kv, reflect.ValueOf(data)) + return nil + + case reflect.Slice: + tokenIndex, err := strconv.Atoi(decodedToken) + if err != nil { + return err + } + sLength := rValue.Len() + if tokenIndex < 0 || tokenIndex >= sLength { + return fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength, tokenIndex) + } + + elem := rValue.Index(tokenIndex) + if !elem.CanSet() { + return fmt.Errorf("can't set slice index %s to %v", decodedToken, data) + } + elem.Set(reflect.ValueOf(data)) + return nil + + default: + return fmt.Errorf("invalid token reference %q", decodedToken) + } + +} + +func (p *Pointer) get(node interface{}, nameProvider *swag.NameProvider) (interface{}, reflect.Kind, error) { + + if nameProvider == nil { + nameProvider = swag.DefaultJSONNameProvider + } + + kind := reflect.Invalid + + // Full document when empty + if len(p.referenceTokens) == 0 { + return node, kind, nil + } + + for _, token := range p.referenceTokens { + + decodedToken := Unescape(token) + + r, knd, err := getSingleImpl(node, decodedToken, nameProvider) + if err != nil { + return nil, knd, err + } + node, kind = r, knd + + } + + rValue := reflect.ValueOf(node) + kind = rValue.Kind() + + return node, kind, nil +} + +func (p *Pointer) set(node, data interface{}, nameProvider *swag.NameProvider) error { + knd := reflect.ValueOf(node).Kind() + + if knd != reflect.Ptr && knd != reflect.Struct && knd != reflect.Map && knd != reflect.Slice && knd != reflect.Array { + return fmt.Errorf("only structs, pointers, maps and slices are supported for setting values") + } + + if nameProvider == nil { + nameProvider = swag.DefaultJSONNameProvider + } + + // Full document when empty + if len(p.referenceTokens) == 0 { + return nil + } + + lastI := len(p.referenceTokens) - 1 + for i, token := range p.referenceTokens { + isLastToken := i == lastI + decodedToken := Unescape(token) + + if isLastToken { + + return setSingleImpl(node, data, decodedToken, nameProvider) + } + + rValue := reflect.Indirect(reflect.ValueOf(node)) + kind := rValue.Kind() + + if rValue.Type().Implements(jsonPointableType) { + r, err := node.(JSONPointable).JSONLookup(decodedToken) + if err != nil { + return err + } + fld := reflect.ValueOf(r) + if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr { + node = fld.Addr().Interface() + continue + } + node = r + continue + } + + switch kind { + case reflect.Struct: + nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) + if !ok { + return fmt.Errorf("object has no field %q", decodedToken) + } + fld := rValue.FieldByName(nm) + if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr { + node = fld.Addr().Interface() + continue + } + node = fld.Interface() + + case reflect.Map: + kv := reflect.ValueOf(decodedToken) + mv := rValue.MapIndex(kv) + + if !mv.IsValid() { + return fmt.Errorf("object has no key %q", decodedToken) + } + if mv.CanAddr() && mv.Kind() != reflect.Interface && mv.Kind() != reflect.Map && mv.Kind() != reflect.Slice && mv.Kind() != reflect.Ptr { + node = mv.Addr().Interface() + continue + } + node = mv.Interface() + + case reflect.Slice: + tokenIndex, err := strconv.Atoi(decodedToken) + if err != nil { + return err + } + sLength := rValue.Len() + if tokenIndex < 0 || tokenIndex >= sLength { + return fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength, tokenIndex) + } + + elem := rValue.Index(tokenIndex) + if elem.CanAddr() && elem.Kind() != reflect.Interface && elem.Kind() != reflect.Map && elem.Kind() != reflect.Slice && elem.Kind() != reflect.Ptr { + node = elem.Addr().Interface() + continue + } + node = elem.Interface() + + default: + return fmt.Errorf("invalid token reference %q", decodedToken) + } + + } + + return nil +} + +// DecodedTokens returns the decoded tokens +func (p *Pointer) DecodedTokens() []string { + result := make([]string, 0, len(p.referenceTokens)) + for _, t := range p.referenceTokens { + result = append(result, Unescape(t)) + } + return result +} + +// IsEmpty returns true if this is an empty json pointer +// this indicates that it points to the root document +func (p *Pointer) IsEmpty() bool { + return len(p.referenceTokens) == 0 +} + +// Pointer to string representation function +func (p *Pointer) String() string { + + if len(p.referenceTokens) == 0 { + return emptyPointer + } + + pointerString := pointerSeparator + strings.Join(p.referenceTokens, pointerSeparator) + + return pointerString +} + +// Specific JSON pointer encoding here +// ~0 => ~ +// ~1 => / +// ... and vice versa + +const ( + encRefTok0 = `~0` + encRefTok1 = `~1` + decRefTok0 = `~` + decRefTok1 = `/` +) + +// Unescape unescapes a json pointer reference token string to the original representation +func Unescape(token string) string { + step1 := strings.Replace(token, encRefTok1, decRefTok1, -1) + step2 := strings.Replace(step1, encRefTok0, decRefTok0, -1) + return step2 +} + +// Escape escapes a pointer reference token string +func Escape(token string) string { + step1 := strings.Replace(token, decRefTok0, encRefTok0, -1) + step2 := strings.Replace(step1, decRefTok1, encRefTok1, -1) + return step2 +} diff --git a/vendor/github.com/go-openapi/jsonreference/.gitignore b/vendor/github.com/go-openapi/jsonreference/.gitignore new file mode 100644 index 0000000..769c244 --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/.gitignore @@ -0,0 +1 @@ +secrets.yml diff --git a/vendor/github.com/go-openapi/jsonreference/.golangci.yml b/vendor/github.com/go-openapi/jsonreference/.golangci.yml new file mode 100644 index 0000000..f9381ae --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/.golangci.yml @@ -0,0 +1,41 @@ +linters-settings: + govet: + check-shadowing: true + golint: + min-confidence: 0 + gocyclo: + min-complexity: 30 + maligned: + suggest-new: true + dupl: + threshold: 100 + goconst: + min-len: 2 + min-occurrences: 4 +linters: + enable-all: true + disable: + - maligned + - lll + - gochecknoglobals + - godox + - gocognit + - whitespace + - wsl + - funlen + - gochecknoglobals + - gochecknoinits + - scopelint + - wrapcheck + - exhaustivestruct + - exhaustive + - nlreturn + - testpackage + - gci + - gofumpt + - goerr113 + - gomnd + - tparallel + - nestif + - godot + - errorlint diff --git a/vendor/github.com/go-openapi/jsonreference/.travis.yml b/vendor/github.com/go-openapi/jsonreference/.travis.yml new file mode 100644 index 0000000..05482f4 --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/.travis.yml @@ -0,0 +1,24 @@ +after_success: +- bash <(curl -s https://codecov.io/bash) +go: +- 1.14.x +- 1.x +install: +- go get gotest.tools/gotestsum +jobs: + include: + # include linting job, but only for latest go version and amd64 arch + - go: 1.x + arch: amd64 + install: + go get github.com/golangci/golangci-lint/cmd/golangci-lint + script: + - golangci-lint run --new-from-rev master +env: +- GO111MODULE=on +language: go +notifications: + slack: + secure: OpQG/36F7DSF00HLm9WZMhyqFCYYyYTsVDObW226cWiR8PWYiNfLZiSEvIzT1Gx4dDjhigKTIqcLhG34CkL5iNXDjm9Yyo2RYhQPlK8NErNqUEXuBqn4RqYHW48VGhEhOyDd4Ei0E2FN5ZbgpvHgtpkdZ6XDi64r3Ac89isP9aPHXQTuv2Jog6b4/OKKiUTftLcTIst0p4Cp3gqOJWf1wnoj+IadWiECNVQT6zb47IYjtyw6+uV8iUjTzdKcRB6Zc6b4Dq7JAg1Zd7Jfxkql3hlKp4PNlRf9Cy7y5iA3G7MLyg3FcPX5z2kmcyPt2jOTRMBWUJ5zIQpOxizAcN8WsT3WWBL5KbuYK6k0PzujrIDLqdxGpNmjkkMfDBT9cKmZpm2FdW+oZgPFJP+oKmAo4u4KJz/vjiPTXgQlN5bmrLuRMCp+AwC5wkIohTqWZVPE2TK6ZSnMYcg/W39s+RP/9mJoyryAvPSpBOLTI+biCgaUCTOAZxNTWpMFc3tPYntc41WWkdKcooZ9JA5DwfcaVFyTGQ3YXz+HvX6G1z/gW0Q/A4dBi9mj2iE1xm7tRTT+4VQ2AXFvSEI1HJpfPgYnwAtwOD1v3Qm2EUHk9sCdtEDR4wVGEPIVn44GnwFMnGKx9JWppMPYwFu3SVDdHt+E+LOlhZUply11Aa+IVrT2KUQ= +script: +- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..9322b06 --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ivan+abuse@flanders.co.nz. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/jsonreference/LICENSE b/vendor/github.com/go-openapi/jsonreference/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/go-openapi/jsonreference/README.md b/vendor/github.com/go-openapi/jsonreference/README.md new file mode 100644 index 0000000..b94753a --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/README.md @@ -0,0 +1,15 @@ +# gojsonreference [![Build Status](https://travis-ci.org/go-openapi/jsonreference.svg?branch=master)](https://travis-ci.org/go-openapi/jsonreference) [![codecov](https://codecov.io/gh/go-openapi/jsonreference/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/jsonreference) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) + +[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/jsonreference/master/LICENSE) [![GoDoc](https://godoc.org/github.com/go-openapi/jsonreference?status.svg)](http://godoc.org/github.com/go-openapi/jsonreference) +An implementation of JSON Reference - Go language + +## Status +Feature complete. Stable API + +## Dependencies +https://github.com/go-openapi/jsonpointer + +## References +http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07 + +http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03 diff --git a/vendor/github.com/go-openapi/jsonreference/reference.go b/vendor/github.com/go-openapi/jsonreference/reference.go new file mode 100644 index 0000000..3bc0a6e --- /dev/null +++ b/vendor/github.com/go-openapi/jsonreference/reference.go @@ -0,0 +1,156 @@ +// Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) +// +// 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. + +// author sigu-399 +// author-github https://github.com/sigu-399 +// author-mail sigu.399@gmail.com +// +// repository-name jsonreference +// repository-desc An implementation of JSON Reference - Go language +// +// description Main and unique file. +// +// created 26-02-2013 + +package jsonreference + +import ( + "errors" + "net/url" + "strings" + + "github.com/PuerkitoBio/purell" + "github.com/go-openapi/jsonpointer" +) + +const ( + fragmentRune = `#` +) + +// New creates a new reference for the given string +func New(jsonReferenceString string) (Ref, error) { + + var r Ref + err := r.parse(jsonReferenceString) + return r, err + +} + +// MustCreateRef parses the ref string and panics when it's invalid. +// Use the New method for a version that returns an error +func MustCreateRef(ref string) Ref { + r, err := New(ref) + if err != nil { + panic(err) + } + return r +} + +// Ref represents a json reference object +type Ref struct { + referenceURL *url.URL + referencePointer jsonpointer.Pointer + + HasFullURL bool + HasURLPathOnly bool + HasFragmentOnly bool + HasFileScheme bool + HasFullFilePath bool +} + +// GetURL gets the URL for this reference +func (r *Ref) GetURL() *url.URL { + return r.referenceURL +} + +// GetPointer gets the json pointer for this reference +func (r *Ref) GetPointer() *jsonpointer.Pointer { + return &r.referencePointer +} + +// String returns the best version of the url for this reference +func (r *Ref) String() string { + + if r.referenceURL != nil { + return r.referenceURL.String() + } + + if r.HasFragmentOnly { + return fragmentRune + r.referencePointer.String() + } + + return r.referencePointer.String() +} + +// IsRoot returns true if this reference is a root document +func (r *Ref) IsRoot() bool { + return r.referenceURL != nil && + !r.IsCanonical() && + !r.HasURLPathOnly && + r.referenceURL.Fragment == "" +} + +// IsCanonical returns true when this pointer starts with http(s):// or file:// +func (r *Ref) IsCanonical() bool { + return (r.HasFileScheme && r.HasFullFilePath) || (!r.HasFileScheme && r.HasFullURL) +} + +// "Constructor", parses the given string JSON reference +func (r *Ref) parse(jsonReferenceString string) error { + + parsed, err := url.Parse(jsonReferenceString) + if err != nil { + return err + } + + r.referenceURL, _ = url.Parse(purell.NormalizeURL(parsed, purell.FlagsSafe|purell.FlagRemoveDuplicateSlashes)) + refURL := r.referenceURL + + if refURL.Scheme != "" && refURL.Host != "" { + r.HasFullURL = true + } else { + if refURL.Path != "" { + r.HasURLPathOnly = true + } else if refURL.RawQuery == "" && refURL.Fragment != "" { + r.HasFragmentOnly = true + } + } + + r.HasFileScheme = refURL.Scheme == "file" + r.HasFullFilePath = strings.HasPrefix(refURL.Path, "/") + + // invalid json-pointer error means url has no json-pointer fragment. simply ignore error + r.referencePointer, _ = jsonpointer.New(refURL.Fragment) + + return nil +} + +// Inherits creates a new reference from a parent and a child +// If the child cannot inherit from the parent, an error is returned +func (r *Ref) Inherits(child Ref) (*Ref, error) { + childURL := child.GetURL() + parentURL := r.GetURL() + if childURL == nil { + return nil, errors.New("child url is nil") + } + if parentURL == nil { + return &child, nil + } + + ref, err := New(parentURL.ResolveReference(childURL).String()) + if err != nil { + return nil, err + } + return &ref, nil +} diff --git a/vendor/github.com/go-openapi/spec/.editorconfig b/vendor/github.com/go-openapi/spec/.editorconfig new file mode 100644 index 0000000..3152da6 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/.editorconfig @@ -0,0 +1,26 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# Set default charset +[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] +charset = utf-8 + +# Tab indentation (no size specified) +[*.go] +indent_style = tab + +[*.md] +trim_trailing_whitespace = false + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/vendor/github.com/go-openapi/spec/.gitignore b/vendor/github.com/go-openapi/spec/.gitignore new file mode 100644 index 0000000..dd91ed6 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/.gitignore @@ -0,0 +1,2 @@ +secrets.yml +coverage.out diff --git a/vendor/github.com/go-openapi/spec/.golangci.yml b/vendor/github.com/go-openapi/spec/.golangci.yml new file mode 100644 index 0000000..835d55e --- /dev/null +++ b/vendor/github.com/go-openapi/spec/.golangci.yml @@ -0,0 +1,42 @@ +linters-settings: + govet: + check-shadowing: true + golint: + min-confidence: 0 + gocyclo: + min-complexity: 45 + maligned: + suggest-new: true + dupl: + threshold: 200 + goconst: + min-len: 2 + min-occurrences: 2 + +linters: + enable-all: true + disable: + - maligned + - unparam + - lll + - gochecknoinits + - gochecknoglobals + - funlen + - godox + - gocognit + - whitespace + - wsl + - wrapcheck + - testpackage + - nlreturn + - gomnd + - exhaustivestruct + - goerr113 + - errorlint + - nestif + - godot + - gofumpt + - paralleltest + - tparallel + - thelper + - ifshort diff --git a/vendor/github.com/go-openapi/spec/.travis.yml b/vendor/github.com/go-openapi/spec/.travis.yml new file mode 100644 index 0000000..2281a07 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/.travis.yml @@ -0,0 +1,31 @@ +after_success: +- bash <(curl -s https://codecov.io/bash) +go: +- 1.16.x +- 1.x +arch: + - amd64 +jobs: + include: + # only run fast tests on ppc64le + - go: 1.x + arch: ppc64le + script: + - gotestsum -f short-verbose -- ./... + + # include linting job, but only for latest go version and amd64 arch + - go: 1.x + arch: amd64 + install: + go get github.com/golangci/golangci-lint/cmd/golangci-lint + script: + - golangci-lint run --new-from-rev master + +install: +- GO111MODULE=off go get -u gotest.tools/gotestsum +language: go +notifications: + slack: + secure: QUWvCkBBK09GF7YtEvHHVt70JOkdlNBG0nIKu/5qc4/nW5HP8I2w0SEf/XR2je0eED1Qe3L/AfMCWwrEj+IUZc3l4v+ju8X8R3Lomhme0Eb0jd1MTMCuPcBT47YCj0M7RON7vXtbFfm1hFJ/jLe5+9FXz0hpXsR24PJc5ZIi/ogNwkaPqG4BmndzecpSh0vc2FJPZUD9LT0I09REY/vXR0oQAalLkW0asGD5taHZTUZq/kBpsNxaAFrLM23i4mUcf33M5fjLpvx5LRICrX/57XpBrDh2TooBU6Qj3CgoY0uPRYUmSNxbVx1czNzl2JtEpb5yjoxfVPQeg0BvQM00G8LJINISR+ohrjhkZmAqchDupAX+yFrxTtORa78CtnIL6z/aTNlgwwVD8kvL/1pFA/JWYmKDmz93mV/+6wubGzNSQCstzjkFA4/iZEKewKUoRIAi/fxyscP6L/rCpmY/4llZZvrnyTqVbt6URWpopUpH4rwYqreXAtJxJsfBJIeSmUIiDIOMGkCTvyTEW3fWGmGoqWtSHLoaWDyAIGb7azb+KvfpWtEcoPFWfSWU+LGee0A/YsUhBl7ADB9A0CJEuR8q4BPpKpfLwPKSiKSAXL7zDkyjExyhtgqbSl2jS+rKIHOZNL8JkCcTP2MKMVd563C5rC5FMKqu3S9m2b6380E= +script: +- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..9322b06 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ivan+abuse@flanders.co.nz. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/spec/LICENSE b/vendor/github.com/go-openapi/spec/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/go-openapi/spec/README.md b/vendor/github.com/go-openapi/spec/README.md new file mode 100644 index 0000000..18782c6 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/README.md @@ -0,0 +1,34 @@ +# OAI object model + +[![Build Status](https://travis-ci.org/go-openapi/spec.svg?branch=master)](https://travis-ci.org/go-openapi/spec) + +[![codecov](https://codecov.io/gh/go-openapi/spec/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/spec) +[![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) +[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/spec/master/LICENSE) +[![Go Reference](https://pkg.go.dev/badge/github.com/go-openapi/spec.svg)](https://pkg.go.dev/github.com/go-openapi/spec) +[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/spec)](https://goreportcard.com/report/github.com/go-openapi/spec) + +The object model for OpenAPI specification documents. + +### FAQ + +* What does this do? + +> 1. This package knows how to marshal and unmarshal Swagger API specifications into a golang object model +> 2. It knows how to resolve $ref and expand them to make a single root document + +* How does it play with the rest of the go-openapi packages ? + +> 1. This package is at the core of the go-openapi suite of packages and [code generator](https://github.com/go-swagger/go-swagger) +> 2. There is a [spec loading package](https://github.com/go-openapi/loads) to fetch specs as JSON or YAML from local or remote locations +> 3. There is a [spec validation package](https://github.com/go-openapi/validate) built on top of it +> 4. There is a [spec analysis package](https://github.com/go-openapi/analysis) built on top of it, to analyze, flatten, fix and merge spec documents + +* Does this library support OpenAPI 3? + +> No. +> This package currently only supports OpenAPI 2.0 (aka Swagger 2.0). +> There is no plan to make it evolve toward supporting OpenAPI 3.x. +> This [discussion thread](https://github.com/go-openapi/spec/issues/21) relates the full story. +> +> An early attempt to support Swagger 3 may be found at: https://github.com/go-openapi/spec3 diff --git a/vendor/github.com/go-openapi/spec/appveyor.yml b/vendor/github.com/go-openapi/spec/appveyor.yml new file mode 100644 index 0000000..0903593 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/appveyor.yml @@ -0,0 +1,32 @@ +version: "0.1.{build}" + +clone_folder: C:\go-openapi\spec +shallow_clone: true # for startup speed +pull_requests: + do_not_increment_build_number: true + +#skip_tags: true +#skip_branch_with_pr: true + +# appveyor.yml +build: off + +environment: + GOPATH: c:\gopath + +stack: go 1.15 + +test_script: + - go test -v -timeout 20m ./... + +deploy: off + +notifications: + - provider: Slack + incoming_webhook: https://hooks.slack.com/services/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 + auth_token: + secure: Sf7kZf7ZGbnwWUMpffHwMu5A0cHkLK2MYY32LNTPj4+/3qC3Ghl7+9v4TSLOqOlCwdRNjOGblAq7s+GDJed6/xgRQl1JtCi1klzZNrYX4q01pgTPvvGcwbBkIYgeMaPeIRcK9OZnud7sRXdttozgTOpytps2U6Js32ip7uj5mHSg2ub0FwoSJwlS6dbezZ8+eDhoha0F/guY99BEwx8Bd+zROrT2TFGsSGOFGN6wFc7moCqTHO/YkWib13a2QNXqOxCCVBy/lt76Wp+JkeFppjHlzs/2lP3EAk13RIUAaesdEUHvIHrzCyNJEd3/+KO2DzsWOYfpktd+KBCvgaYOsoo7ubdT3IROeAegZdCgo/6xgCEsmFc9ZcqCfN5yNx2A+BZ2Vwmpws+bQ1E1+B5HDzzaiLcYfG4X2O210QVGVDLWsv1jqD+uPYeHY2WRfh5ZsIUFvaqgUEnwHwrK44/8REAhQavt1QAj5uJpsRd7CkRVPWRNK+yIky+wgbVUFEchRNmS55E7QWf+W4+4QZkQi7vUTMc9nbTUu2Es9NfvfudOpM2wZbn98fjpb/qq/nRv6Bk+ca+7XD5/IgNLMbWp2ouDdzbiHLCOfDUiHiDJhLfFZx9Bwo7ZwfzeOlbrQX66bx7xRKYmOe4DLrXhNcpbsMa8qbfxlZRCmYbubB/Y8h4= + channel: bots + on_build_success: false + on_build_failure: true + on_build_status_changed: true diff --git a/vendor/github.com/go-openapi/spec/bindata.go b/vendor/github.com/go-openapi/spec/bindata.go new file mode 100644 index 0000000..afc8385 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/bindata.go @@ -0,0 +1,297 @@ +// Code generated by go-bindata. DO NOT EDIT. +// sources: +// schemas/jsonschema-draft-04.json (4.357kB) +// schemas/v2/schema.json (40.248kB) + +package spec + +import ( + "bytes" + "compress/gzip" + "crypto/sha256" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo + digest [sha256.Size]byte +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _jsonschemaDraft04Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x57\x3d\x6f\xdb\x3c\x10\xde\xf3\x2b\x08\x26\x63\xf2\x2a\x2f\xd0\xc9\x5b\xd1\x2e\x01\x5a\x34\x43\x37\x23\x03\x6d\x9d\x6c\x06\x14\xa9\x50\x54\x60\xc3\xd0\x7f\x2f\x28\x4a\x14\x29\x91\x92\x2d\xa7\x8d\x97\x28\xbc\xaf\xe7\x8e\xf7\xc5\xd3\x0d\x42\x08\x61\x9a\xe2\x15\xc2\x7b\xa5\x8a\x55\x92\xbc\x96\x82\x3f\x94\xdb\x3d\xe4\xe4\x3f\x21\x77\x49\x2a\x49\xa6\x1e\x1e\xbf\x24\xe6\xec\x16\xdf\x1b\xa1\x3b\xf3\xff\x02\xc9\x14\xca\xad\xa4\x85\xa2\x82\x6b\xe9\x6f\x42\x02\x32\x2c\x28\x07\x45\x5a\x15\x3d\x77\x46\x39\xd5\xcc\x25\x5e\x21\x83\xb8\x21\x18\xb6\xaf\x52\x92\xa3\x47\x68\x88\xea\x58\x80\x56\x4e\x1a\xf2\xbd\x4f\xcc\x29\x7f\x52\x90\x6b\x7d\xff\x0f\x48\xb4\x3d\x3f\x21\x7c\x27\x21\xd3\x2a\x6e\x31\xaa\x2d\x53\xdd\xf3\xe3\x42\x94\x54\xd1\x77\x78\xe2\x0a\x76\x20\xe3\x20\x68\xcb\x30\x86\x41\xf3\x2a\xc7\x2b\xf4\x78\x8e\xfe\xef\x90\x91\x8a\xa9\xc7\xb1\x1d\xc2\xd8\x2f\x0d\x75\xed\xc1\x4e\x9c\xc8\x25\x43\xac\xa8\xbe\xd7\xcc\xa9\xd1\xa9\x21\xa0\x1a\xbd\x04\x61\x94\x34\x2f\x18\xfc\x3e\x16\x50\x8e\x4d\x03\x6f\x1c\x58\xdb\x48\x23\xbc\x11\x82\x01\xe1\xfa\xd3\x3a\x8e\x30\xaf\x18\x33\x7f\xf3\x8d\x39\x11\x9b\x57\xd8\x2a\xfd\x55\x2a\x49\xf9\x0e\xc7\xec\x37\xd4\x25\xf7\xec\x5c\x66\xc7\xd7\x99\xaa\xcf\x4f\x89\x8a\xd3\xb7\x0a\x3a\xaa\x92\x15\xf4\x30\x6f\x1c\xb0\xd6\x46\xe7\x98\x39\x2d\xa4\x28\x40\x2a\x3a\x88\x9e\x29\xba\x88\x37\x2d\xca\x60\x38\xfa\xba\x5b\x20\xac\xa8\x62\xb0\x4c\xd4\xaf\xda\x45\x0a\xba\x5c\x3b\xb9\xc7\x79\xc5\x14\x2d\x18\x34\x19\x1c\x51\xdb\x25\x4d\xb4\x7e\x06\x14\x38\x6c\x59\x55\xd2\x77\xf8\x69\x59\xfc\x7b\x73\xed\x93\x43\xcb\x32\x6d\x3c\x28\xdc\x1b\x9a\xd3\x62\xab\xc2\x27\xf7\x41\xc9\x08\x2b\x23\x08\xad\x13\x57\x21\x9c\xd3\x72\x0d\x42\x72\xf8\x01\x7c\xa7\xf6\x83\xce\x39\xd7\x82\x3c\x1f\x2f\xd6\x60\x1b\xa2\xdf\x35\x89\x52\x20\xe7\x73\x74\xe0\x66\x26\x64\x4e\xb4\x97\x58\xc2\x0e\x0e\xe1\x60\x92\x34\x6d\xa0\x10\xd6\xb5\x83\x61\x27\xe6\x47\xd3\x89\xbd\x63\xfd\x3b\x8d\x03\x3d\x6c\x42\x2d\x5b\x70\xee\xe8\xdf\x4b\xf4\x66\x4e\xe1\x01\x45\x17\x80\x74\xad\x4f\xc3\xf3\xae\xc6\x1d\xc6\xd7\xc2\xce\xc9\xe1\x29\x30\x86\x2f\x4a\xa6\x4b\x15\x84\x73\xc9\x6f\xfd\x7f\xa5\x6e\x9e\xbd\xf1\xb0\xd4\xdd\x45\x5a\xc2\x3e\x4b\x78\xab\xa8\x84\x74\x4a\x91\x3b\x92\x23\x05\xf2\x1c\x1e\x7b\xf3\x09\xf8\xcf\xab\x24\xb6\x60\xa2\xe8\x4c\x9f\x75\x77\xaa\x8c\xe6\x01\x45\x36\x86\xcf\xc3\x63\x3a\xea\xd4\x8d\x7e\x06\xac\x14\x0a\xe0\x29\xf0\xed\x07\x22\x1a\x65\xda\x44\xae\xa2\x73\x1a\xe6\x90\x69\xa2\x8c\x46\xb2\x2f\xde\x49\x38\x08\xed\xfe\xfd\x41\xaf\x9f\xa9\x55\xd7\xdd\x22\x8d\xfa\x45\x63\xc5\x0f\x80\xf3\xb4\x08\xd6\x79\x30\x9e\x93\xee\x59\xa6\xd0\x4b\xee\x22\xe3\x33\xc1\x3a\x27\x68\x36\x78\x7e\x87\x0a\x06\xd5\x2e\x20\xd3\xaf\x15\xfb\xd8\x3b\x73\x14\xbb\x92\xed\x05\x5d\x2e\x29\x38\x2c\x94\xe4\x42\x45\x5e\xd3\xb5\x7d\xdf\x47\xca\x38\xb4\x5c\xaf\xfb\x7d\xdd\x6d\xf4\xa1\x2d\x77\xdd\x2f\xce\x6d\xc4\x7b\x8b\x4e\x67\xa9\x6f\xfe\x04\x00\x00\xff\xff\xb1\xd1\x27\x78\x05\x11\x00\x00") + +func jsonschemaDraft04JsonBytes() ([]byte, error) { + return bindataRead( + _jsonschemaDraft04Json, + "jsonschema-draft-04.json", + ) +} + +func jsonschemaDraft04Json() (*asset, error) { + bytes, err := jsonschemaDraft04JsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "jsonschema-draft-04.json", size: 4357, mode: os.FileMode(0640), modTime: time.Unix(1568963823, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe1, 0x48, 0x9d, 0xb, 0x47, 0x55, 0xf0, 0x27, 0x93, 0x30, 0x25, 0x91, 0xd3, 0xfc, 0xb8, 0xf0, 0x7b, 0x68, 0x93, 0xa8, 0x2a, 0x94, 0xf2, 0x48, 0x95, 0xf8, 0xe4, 0xed, 0xf1, 0x1b, 0x82, 0xe2}} + return a, nil +} + +var _v2SchemaJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5d\x4f\x93\xdb\x36\xb2\xbf\xfb\x53\xa0\x14\x57\xd9\xae\xd8\x92\xe3\xf7\x2e\xcf\x97\xd4\xbc\xd8\x49\x66\x37\x5e\x4f\x79\x26\xbb\x87\x78\x5c\x05\x91\x2d\x09\x09\x09\x30\x00\x38\x33\x5a\xef\x7c\xf7\x2d\xf0\x9f\x08\x02\x20\x41\x8a\xd2\xc8\x0e\x0f\xa9\x78\x28\xa0\xd1\xdd\x68\x34\x7e\xdd\xf8\xf7\xf9\x11\x42\x33\x49\x64\x04\xb3\xd7\x68\x76\x86\xfe\x76\xf9\xfe\x1f\xe8\x32\xd8\x40\x8c\xd1\x8a\x71\x74\x79\x8b\xd7\x6b\xe0\xe8\xd5\xfc\x25\x3a\xbb\x38\x9f\xcf\x9e\xab\x0a\x24\x54\xa5\x37\x52\x26\xaf\x17\x0b\x91\x17\x99\x13\xb6\xb8\x79\xb5\x10\x59\xdd\xf9\xef\x82\xd1\x6f\xf2\xc2\x8f\xf3\x4f\xb5\x1a\xea\xc7\x17\x45\x41\xc6\xd7\x8b\x90\xe3\x95\x7c\xf1\xf2\x7f\x8b\xca\x45\x3d\xb9\x4d\x32\xa6\xd8\xf2\x77\x08\x64\xfe\x8d\xc3\x9f\x29\xe1\xa0\x9a\xff\xed\x11\x42\x08\xcd\x8a\xd6\xb3\x9f\x15\x67\x74\xc5\xca\x7f\x27\x58\x6e\xc4\xec\x11\x42\xd7\x59\x5d\x1c\x86\x44\x12\x46\x71\x74\xc1\x59\x02\x5c\x12\x10\xb3\xd7\x68\x85\x23\x01\x59\x81\x04\x4b\x09\x9c\x6a\xbf\x7e\xce\x49\x7d\xba\x7b\x51\xfd\xa1\x44\xe2\xb0\x52\xac\x7d\xb3\x08\x61\x45\x68\x46\x56\x2c\x6e\x80\x86\x8c\xbf\xbd\x93\x40\x05\x61\x74\x96\x95\xbe\x7f\x84\xd0\x7d\x4e\xde\x42\xb7\xe4\xbe\x46\xbb\x14\x5b\x48\x4e\xe8\xba\x90\x05\xa1\x19\xd0\x34\xae\xc4\xce\xbe\xbc\x9a\xbf\x9c\x15\x7f\x5d\x57\xc5\x42\x10\x01\x27\x89\xe2\x48\x51\xb9\xda\x40\xd5\x87\x37\xc0\x15\x5f\x88\xad\x90\xdc\x10\x81\x42\x16\xa4\x31\x50\x39\x2f\x38\xad\xab\xb0\x53\xd8\xac\x94\x56\x6f\xc3\x84\xf4\x11\xa4\x50\xb3\xfa\xe9\xd3\x6f\x9f\x3e\xdf\x2f\xd0\xeb\x8f\x1f\x3f\x7e\xbc\xfe\xf6\xe9\xf7\xaf\x5f\x7f\xfc\x18\x7e\xfb\xec\xfb\xc7\xb3\x36\x79\x54\x43\xe8\x29\xc5\x31\x20\xc6\x11\x49\x9e\xe5\x12\x41\x66\xa0\xe8\xed\x1d\x8e\x93\x08\x5e\xa3\x27\x3b\xc3\x7c\xa2\x73\xba\xc4\x02\x2e\xb0\xdc\xf4\xe5\x76\xd1\xca\x96\xa2\x8a\x94\xcd\x21\xc9\x6c\xec\x2c\x70\x42\x9e\x34\x74\x9d\x19\x7c\xcd\x20\x9c\xea\x2e\x0a\xfe\x42\x84\xd4\x29\x04\x8c\x8a\xb4\x41\xa2\xc1\xdc\x19\x8a\x88\x90\x4a\x49\xef\xce\xdf\xbd\x45\x4a\x52\x81\x70\x10\x40\x22\x21\x44\xcb\x6d\xc5\xec\x4e\x3c\x1c\x45\xef\x57\x9a\xb5\x7d\xae\xfe\xe5\xe4\x31\x86\x90\xe0\xab\x6d\x02\x3b\x2e\xcb\x11\x90\xd9\xa8\xc6\x77\xc2\x59\x98\x06\xfd\xf9\x2e\x78\x45\x01\xa6\xa8\xa0\x71\x5c\xbe\x33\xa7\xd2\xd9\x5f\x95\xef\xd9\xd5\xac\xfd\xdc\x5d\xbf\x5e\xb8\xd1\x3e\xc7\x31\x48\xe0\x5e\x4c\x14\x65\xdf\xb8\xa8\x71\x10\x09\xa3\xc2\xc7\x02\xcb\xa2\x4e\x5a\x02\x82\x94\x13\xb9\xf5\x30\xe6\xb2\xa4\xb5\xfe\x9b\x3e\x7a\xb2\x55\xd2\xa8\x4a\xbc\x16\xb6\x71\x8e\x39\xc7\xdb\x9d\xe1\x10\x09\x71\xbd\x9c\xb3\x41\x89\xd7\xa5\x89\xdc\x57\xb5\x53\x4a\xfe\x4c\xe1\xbc\xa0\x21\x79\x0a\x1a\x0f\x70\xa7\x5c\x08\x8e\xde\xb0\xc0\x43\x24\xad\x74\x63\x0e\xb1\xd9\x90\xe1\xb0\x2d\x13\xa7\x6d\x78\xfd\x04\x14\x38\x8e\x90\xaa\xce\x63\xac\x3e\x23\xbc\x64\xa9\xb4\xf8\x03\x63\xde\xcd\xbe\x16\x13\x4a\x55\xac\x82\x12\xc6\xac\xd4\x35\xf7\x22\xd4\x3a\xff\x22\x73\x0e\x6e\x51\xa0\x75\x1e\xae\x8f\xe8\x5d\xc7\x59\xe6\xe4\x9a\x18\x8d\xd6\x1c\x53\x84\x4d\xb7\x67\x28\x37\x09\x84\x69\x88\x12\x0e\x01\x11\x80\x32\xa2\xf5\xb9\xaa\xc6\xd9\x73\x53\xab\xfb\xb4\x2e\x20\xc6\x54\x92\xa0\x9a\xf3\x69\x1a\x2f\x81\x77\x37\xae\x53\x1a\xce\x40\xc4\xa8\x82\x1c\xb5\xef\xda\x24\x7d\xb9\x61\x69\x14\xa2\x25\xa0\x90\xac\x56\xc0\x81\x4a\xb4\xe2\x2c\xce\x4a\x64\x7a\x9a\x23\xf4\x13\x91\x3f\xa7\x4b\xf4\x63\x84\x6f\x18\x87\x10\xbd\xc3\xfc\x8f\x90\xdd\x52\x44\x04\xc2\x51\xc4\x6e\x21\x74\x48\x21\x81\xc7\xe2\xfd\xea\x12\xf8\x0d\x09\xf6\xe9\x47\x35\xaf\x67\xc4\x14\xf7\x22\x27\x97\xe1\xe2\x76\x2d\x06\x8c\x4a\x1c\x48\x3f\x73\x2d\x0b\x5b\x29\x45\x24\x00\x2a\x0c\x11\xec\x94\xca\xc2\xa6\xc1\x37\x21\x43\x83\x3b\x5f\x97\xf1\x43\x5e\x53\x73\x19\xa5\x36\xd8\x2d\x05\x2e\x34\x0b\xeb\x39\xfc\x1d\x63\x51\x01\xbd\x3d\xbb\x90\x84\x40\x25\x59\x6d\x09\x5d\xa3\x1c\x37\xe6\x5c\x16\x9a\x40\x09\x70\xc1\xe8\x82\xf1\x35\xa6\xe4\xdf\x99\x5c\x8e\x9e\x4d\x79\xb4\x27\x2f\xbf\x7e\xf8\x05\x25\x8c\x50\xa9\x98\x29\x90\x62\x60\xea\x75\xae\x13\xca\xbf\x2b\x1a\x29\x27\x76\xd6\x20\xc6\x64\x5f\xe6\x32\x1a\x08\x87\x21\x07\x21\xbc\xb4\xe4\xe0\x32\x67\xa6\xcd\xf3\x1e\xcd\xd9\x6b\xb6\x6f\x8e\x27\xa7\xed\xdb\xe7\xbc\xcc\x1a\x07\xce\x6f\x87\x33\xf0\xba\x51\x17\x22\x66\x78\x79\x8e\xce\xe5\x13\x81\x80\x06\x2c\xe5\x78\x0d\xa1\xb2\xb8\x54\xa8\x79\x09\xbd\xbf\x3c\x47\x01\x8b\x13\x2c\xc9\x32\xaa\xaa\x1d\xd5\xee\xab\x36\xbd\x6c\xfd\x54\x6c\xc8\x08\x01\x3c\xbd\xe7\x07\x88\xb0\x24\x37\x79\x90\x28\x4a\x1d\x10\x1a\x92\x1b\x12\xa6\x38\x42\x40\xc3\x4c\x43\x62\x8e\xae\x36\xb0\x45\x71\x2a\xa4\x9a\x23\x79\x59\xb1\xa8\xf2\xa4\x0c\x60\x9f\xcc\x8d\x40\xf5\x80\xca\xa8\x99\xc3\xa7\x85\x1f\x31\x25\xa9\x82\xc5\x6d\xbd\xd8\x36\x76\x7c\x02\x28\x97\xf6\x1d\x74\x3b\x11\x7e\x91\xae\x32\xf8\x6c\xf4\xe6\x7b\x9a\xa5\x1f\x62\xc6\x21\xcf\x9a\xe5\xed\x8b\x02\xf3\x2c\x33\x33\xdf\x00\xca\xc9\x09\xb4\x04\xf5\xa5\x08\xd7\xc3\x02\x18\x66\xf1\xab\x1e\x83\x37\x4c\xcd\x12\xc1\x1d\x50\xf6\xaa\xbd\xfe\xe2\x73\x48\x38\x08\xa0\x32\x9b\x18\x44\x86\x0b\x6a\xc1\xaa\x26\x96\x2d\x96\x3c\xa0\x54\x65\x73\xe3\x08\xb5\x8b\x99\xbd\x82\xbc\x9e\xc2\xe8\x53\x46\x83\x3f\x33\x54\x2b\x5b\xad\x92\x79\xd9\x8f\x5d\x93\x98\xf2\xe6\xc6\x1c\xe6\x9a\x9e\xfc\x43\x82\x31\x66\x8e\x53\x77\xfe\x90\xe7\xf3\xf6\xe9\x62\x23\x3f\x10\x93\x18\xae\x72\x1a\x9d\xf9\x48\xcb\xcc\x5a\x65\xc7\x4a\x04\xf0\xf3\xd5\xd5\x05\x8a\x41\x08\xbc\x86\x86\x43\x51\x6c\xe0\x46\x57\xf6\x44\x40\x0d\xfb\xff\xa2\xc3\x7c\x3d\x39\x84\xdc\x09\x22\x64\x4f\x12\xd9\xba\xaa\xf6\xe3\xbd\x56\xdd\x91\x25\x6a\x14\x9c\x89\x34\x8e\x31\xdf\xee\x15\x7e\x2f\x39\x81\x15\x2a\x28\x95\x66\x51\xf5\xfd\x83\xc5\xfe\x15\x07\xcf\xf7\x08\xee\x1d\x8e\xb6\xc5\x52\xcc\x8c\x5a\x93\x66\xc5\xd8\x79\x38\x46\xd6\xa7\x88\x37\xc9\x2e\xe3\xd2\xa5\x7b\x4b\x3a\xdc\xa1\xdc\x9e\x29\xf1\x8c\x8a\x99\x16\x47\x8d\xd4\x78\x8b\xf6\x1c\xe9\x71\x54\x1b\x69\xa8\x4a\x93\x37\xe5\xb2\x2c\x4f\x0c\x92\xab\xa0\x73\x32\x72\x59\xd3\xf0\x2d\x8d\xed\xca\x37\x16\x19\x9e\xdb\x1c\xab\x17\x49\xc3\x0f\x37\xdc\x88\xb1\xb4\xd4\x42\xcb\x58\x5e\x6a\x52\x0b\x15\x10\x0a\xb0\x04\xe7\xf8\x58\x32\x16\x01\xa6\xcd\x01\xb2\xc2\x69\x24\x35\x38\x6f\x30\x6a\xae\x1b\xb4\x71\xaa\xad\x1d\xa0\xd6\x20\x2d\x8b\x3c\xc6\x82\x62\x27\x34\x6d\x15\x84\x7b\x43\xb1\x35\x78\xa6\x24\x77\x28\xc1\x6e\xfc\xe9\x48\x74\xf4\x15\xe3\xe1\x84\x42\x88\x40\x7a\x26\x49\x3b\x48\xb1\xa4\x19\x8e\x0c\xa7\xb5\x01\x6c\x0c\x97\x61\x8a\xc2\x32\xd8\x8c\x44\x69\x24\xbf\x65\x1d\x74\xd6\xe5\x44\xef\xec\x48\x5e\xb7\x8a\xa3\x29\x8e\x41\x64\xce\x1f\x88\xdc\x00\x47\x4b\x40\x98\x6e\xd1\x0d\x8e\x48\x98\x63\x5c\x21\xb1\x4c\x05\x0a\x58\x98\xc5\x6d\x4f\x0a\x77\x53\x4f\x8b\xc4\x44\x1f\xb2\xdf\x8d\x3b\xea\x9f\xfe\xf6\xf2\xc5\xff\x5d\x7f\xfe\x9f\xfb\x67\x8f\xff\xf3\xe9\x69\xd1\xfe\xb3\xc7\xfd\x3c\xf8\x3f\x71\x94\x82\x23\xd1\x72\x00\xb7\x42\x99\x6c\xc0\x60\x7b\x0f\x79\xea\xa8\x53\x4b\x56\x31\xfa\x0b\x52\x9f\x96\xdb\xcd\x2f\xd7\x67\xcd\x04\x19\x85\xfe\xdb\x02\x9a\x59\x03\xad\x63\x3c\xea\xff\x2e\x18\xfd\x00\xd9\xe2\x56\x60\x59\x93\xb9\xb6\xb2\x3e\x3c\x2c\xab\x0f\xa7\xb2\x89\x43\xc7\xf6\xd5\xce\x2e\xad\xa6\xa9\xed\xa6\xc6\x5a\xb4\xa6\x67\xdf\x8c\x26\x7b\x50\x5a\x91\x08\x2e\x6d\xd4\x3a\xc1\x9d\xf2\xdb\xde\x1e\xb2\x2c\x6c\xa5\x64\xc9\x16\xb4\x90\xaa\x4a\xb7\x0c\xde\x13\xc3\x2a\x9a\x11\x9b\x7a\x1b\x3d\x95\x97\x37\x31\x6b\x69\x7e\x34\xc0\x67\x1f\x66\x19\x49\xef\xf1\x25\xf5\xac\x0e\xea\x0a\x28\x8d\x4d\x7e\xd9\x57\x4b\x49\xe5\xc6\xb3\x25\xfd\xe6\x57\x42\x25\xac\xcd\xcf\x36\x74\x8e\xca\x24\x47\xe7\x80\xa8\x92\x72\xbd\x3d\x84\x2d\x65\xe2\x82\x1a\x9c\xc4\x44\x92\x1b\x10\x79\x8a\xc4\x4a\x2f\x60\x51\x04\x81\xaa\xf0\xa3\x95\x27\xd7\x12\x7b\xa3\x96\x03\x45\x96\xc1\x8a\x07\xc9\xb2\xb0\x95\x52\x8c\xef\x48\x9c\xc6\x7e\x94\xca\xc2\x0e\x07\x12\x44\xa9\x20\x37\xf0\xae\x0f\x49\xa3\x96\x9d\x4b\x42\x7b\x70\x59\x14\xee\xe0\xb2\x0f\x49\xa3\x96\x4b\x97\xbf\x00\x5d\x4b\x4f\xfc\xbb\x2b\xee\x92\xb9\x17\xb5\xaa\xb8\x0b\x97\x17\x9b\x43\xfd\xd6\xc2\xb2\xc2\x2e\x29\xcf\xfd\x87\x4a\x55\xda\x25\x63\x1f\x5a\x65\x69\x2b\x2d\x3d\x67\xe9\x41\xae\x5e\xc1\x6e\x2b\xd4\xdb\x3e\xa8\xd3\x26\xd2\x48\x92\x24\xca\x61\x86\x8f\x8c\xbb\xf2\x8e\x91\xdf\x1f\x06\x19\x33\xf3\x03\x4d\xba\xcd\xe2\x2d\xfb\x69\xe9\x16\x15\x13\xd5\x56\x85\x4e\x3c\x5b\x8a\xbf\x25\x72\x83\xee\x5e\x20\x22\xf2\xc8\xaa\x7b\xdb\x8e\xe4\x29\x58\xca\x38\xb7\x3f\x2e\x59\xb8\xbd\xa8\x16\x16\xf7\xdb\x79\x51\x9f\x5a\xb4\x8d\x87\x3a\x6e\xbc\x3e\xc5\xb4\xcd\x58\xf9\xf5\x3c\xb9\x6f\x49\xaf\x57\xc1\xfa\x1c\x5d\x6d\x88\x8a\x8b\xd3\x28\xcc\xb7\xef\x10\x8a\x4a\x74\xa9\x4a\xa7\x62\xbf\x0d\x76\x23\x6f\x59\xd9\x31\xee\x40\x11\xfb\x28\xec\x8d\x22\x1c\x13\x5a\x64\x94\x23\x16\x60\xbb\xd2\x7c\xa0\x98\xb2\xe5\x6e\xbc\x54\x33\xe0\x3e\xb9\x52\x17\xdb\xb7\x1b\xc8\x12\x20\x8c\x23\xca\x64\x7e\x78\xa3\x62\x5b\x75\x56\xd9\x9e\x2a\x91\x27\xb0\x70\x34\x1f\x90\x89\xb5\x86\x73\x7e\x71\xda\x1e\xfb\x3a\x72\xdc\x5e\x79\x88\xcb\x74\x79\xd9\x64\xe4\xd4\xc2\x9e\xce\xb1\xfe\x85\x5a\xc0\xe9\x0c\x34\x3d\xd0\x43\xce\xa1\x36\x39\xd5\xa1\x4e\xf5\xf8\xb1\xa9\x23\x08\x75\x84\xac\x53\x6c\x3a\xc5\xa6\x53\x6c\x3a\xc5\xa6\x7f\xc5\xd8\xf4\x51\xfd\xff\x25\x4e\xfa\x33\x05\xbe\x9d\x60\xd2\x04\x93\x6a\x5f\x33\x9b\x98\x50\xd2\xe1\x50\x52\xc6\xcc\xdb\x38\x91\xdb\xe6\xaa\xa2\x8f\xa1\x6a\xa6\xd4\xc6\x56\xd6\x8c\x40\x02\x68\x48\xe8\x1a\xe1\x9a\xd9\x2e\xb7\x05\xc3\x34\xda\x2a\xbb\xcd\x12\x36\x98\x22\x50\x4c\xa1\x1b\xc5\xd5\x84\xf0\xbe\x24\x84\xf7\x2f\x22\x37\xef\x94\xd7\x9f\xa0\xde\x04\xf5\x26\xa8\x37\x41\x3d\x64\x40\x3d\xe5\xf2\xde\x60\x89\x27\xb4\x37\xa1\xbd\xda\xd7\xd2\x2c\x26\xc0\x37\x01\x3e\x1b\xef\x5f\x06\xe0\x6b\x7c\x5c\x91\x08\x26\x10\x38\x81\xc0\x09\x04\x76\x4a\x3d\x81\xc0\xbf\x12\x08\x4c\xb0\xdc\x7c\x99\x00\xd0\x75\x70\xb4\xf8\x5a\x7c\xea\xde\x3e\x39\x08\x30\x5a\x27\x35\xed\xb4\x65\xad\x69\x74\x10\x88\x79\xe2\x30\x52\x19\xd6\x04\x21\xa7\x95\xd5\x0e\x03\xf8\xda\x20\xd7\x84\xb4\x26\xa4\x35\x21\xad\x09\x69\x21\x03\x69\x51\x46\xff\xff\x18\x9b\x54\xed\x87\x47\x06\x9d\x4e\x73\x6e\x9a\xb3\xa9\xce\x83\x5e\x4b\xc6\x71\x20\x45\xd7\x72\xf5\x40\x72\x0e\x34\x6c\xf4\x6c\xf3\xba\x5e\x4b\x97\x0e\x52\xb8\xbe\x8b\x79\xa0\x10\x86\xa1\x75\xb0\x6f\xec\xc8\xf4\x3d\x4d\x7b\x86\xc2\x02\x31\x12\x51\xbf\x07\x94\xad\x10\xd6\x2e\x79\xcf\xe9\x1c\xf5\x1e\x31\x23\x5c\x18\xfb\x9c\xfb\x70\xe0\x62\xbd\xf7\xb5\x94\xcf\xf3\xf6\xfa\xc5\x4e\x9c\x85\x76\x1d\xae\x37\xbc\xde\xa3\x41\xcb\x29\xd0\x5e\x70\x67\x50\x93\x6d\x98\xa8\xd3\x67\x0f\x68\xb1\xeb\x38\x47\x07\x10\x1b\xd2\xe2\x18\x68\x6d\x40\xbb\xa3\x40\xba\x21\xf2\x8e\x81\xfb\xf6\x92\x77\x2f\x70\xe8\xdb\xb2\x36\xbf\x30\x91\xc5\x21\xe7\x45\xcc\x34\x0c\x48\x8e\xd0\xf2\x9b\x7c\x3c\xbd\x1c\x04\x3e\x07\xe8\x7c\x2f\x84\x7a\x48\x4d\x1f\xba\xe1\x76\x45\x7b\x60\xe0\x01\xca\xee\x04\xca\x31\xbe\x73\x5f\xa3\x70\x0c\xad\x1f\xa5\xf5\x76\xd5\xbb\xd2\x7e\xfb\x30\x90\xcf\xfa\x67\x7a\xe6\xc3\x37\x42\x19\xe2\xc9\x9c\x61\x4c\xe7\xd1\x77\x55\x86\x6e\x8f\x7b\x85\x42\x33\xa3\xaa\x57\xae\xfd\xd5\xcc\x9c\x56\x68\xe2\xde\x0e\xa8\x2c\xa9\xb0\x7d\xf0\x54\x2d\x80\xf2\x48\x39\x3d\x98\x1a\x6d\x0b\x9d\xba\x53\xfb\xce\xf8\xd1\x7e\xbb\x60\x4f\x06\xf5\xce\xda\xab\xeb\xca\xcb\xd5\xac\x20\xda\x72\x3b\xa2\x4b\x38\xd7\xb5\x89\xbe\x42\xd9\xb9\x73\xc4\x0c\x6d\xb7\xd9\xf8\x8d\xbd\x3e\x9c\xf5\x53\x68\x48\x14\x36\x8f\x09\xc5\x92\xf1\x21\xd1\x09\x07\x1c\xbe\xa7\x91\xf3\x6a\xc8\xc1\x57\xb0\xdd\xc5\xc6\x1d\xad\x76\x1d\xa8\x82\x0e\x4c\x38\xfe\xa5\x8c\xc5\x0a\x40\x5d\xa1\xbb\x98\xd1\xfb\x74\x61\xed\x1a\x98\xaf\x3c\x8c\x1e\xe3\xc2\x92\x29\x74\x3e\x99\xd0\xf9\x41\x50\xd0\x38\x4b\x57\x7e\x5b\x7a\x0e\xe6\xce\x4e\xd7\x19\x35\x57\xbb\x3c\x3c\xd2\x5e\x4f\x4b\x4c\xf7\x0f\x4d\x2b\x91\x5d\x94\xa6\x95\xc8\x69\x25\x72\x5a\x89\x7c\xb8\x95\xc8\x07\x80\x8c\xda\x9c\x64\x7b\xb7\x71\xdf\x57\x12\x4b\x9a\x1f\x72\x0c\x13\x03\xad\x3c\xd5\x4e\xde\x8e\x57\x13\x6d\x34\x86\xcf\x97\xe6\xa4\x68\xc4\xb0\xf6\xc9\xc2\xeb\x8d\x0b\xd7\xcd\xfe\xba\xa6\xf5\x30\xeb\x30\x33\xbe\xc7\x56\x27\xab\x08\xd9\x6d\xbb\x09\xee\x7c\x2d\xcf\xee\x87\x38\xac\xc8\xdd\x90\x9a\x58\x4a\x4e\x96\xa9\x79\x79\xf3\xde\x20\xf0\x96\xe3\x24\x19\xeb\xba\xf2\x53\x19\xab\x12\xaf\x47\xb3\xa0\x3e\xef\x9b\x8d\x6d\x6d\x7b\xde\x3b\x3b\x1a\xc0\x3f\x95\x7e\xed\x78\xfb\x76\xb8\xaf\xb3\xdd\xc5\xeb\x95\xed\x5a\x62\x41\x82\xb3\x54\x6e\x80\x4a\x92\x6f\x36\xbd\x34\xae\xde\x6f\xa4\xc0\xbc\x08\xe3\x84\xfc\x1d\xb6\xe3\xd0\x62\x38\x95\x9b\x57\xe7\x71\x12\x91\x80\xc8\x31\x69\x5e\x60\x21\x6e\x19\x0f\xc7\xa4\x79\x96\x28\x3e\x47\x54\x65\x41\x36\x08\x40\x88\x1f\x58\x08\x56\xaa\xd5\xbf\xaf\xad\x96\xd7\xd6\xcf\x87\xf5\x34\x0f\x71\x93\x6e\x26\xed\x98\x5b\x9f\x4f\xcf\x95\x34\xc6\xd7\x11\xfa\xb0\x81\x22\x1a\xdb\xdf\x8e\xdc\xc3\xb9\xf8\xdd\x5d\x3c\x74\xe6\xea\xb7\x8b\xbf\xf5\x6e\xb3\x46\x2e\x64\xf4\xab\x3c\x4e\xcf\x36\x1d\xfe\xfa\xb8\x36\xba\x8a\xd8\xad\xf6\xc6\x41\x2a\x37\x8c\x17\x0f\xda\xfe\xda\xe7\x65\xbc\x71\x2c\x36\x57\x8a\x47\x12\x4c\xf1\xbd\x77\x6b\xa4\x50\x7e\x77\x7b\x22\x60\x89\xef\xcd\xf5\xb9\x0c\x97\x79\x0d\x2b\x35\x43\xcb\x3d\x24\xf1\x78\xfc\xf8\xcb\x1f\x15\x06\xe2\x78\xd8\x51\x21\xd9\x1f\xf0\xf5\x8f\x86\xa4\x50\xfa\xb1\x47\x43\xa5\xdd\x69\x14\xe8\xa3\xc0\x86\x91\xa7\x81\x50\xb4\x7c\xc0\x81\x80\x77\x7a\x9f\xc6\xc2\xa9\x8c\x05\x33\xb0\x3b\x31\xa4\xf4\xd7\x1b\x26\x55\x97\x7c\x65\xf8\x69\x1a\x84\x8e\x41\x78\xd9\xec\xc5\x11\x16\x1e\x74\x91\xf5\x56\xf5\x57\x49\x47\x5c\x92\xa9\x1e\x99\x36\xf4\xdb\xb1\x0e\xd3\x78\x02\xb0\x9b\x25\xcb\xe9\xe9\x1d\x0d\x44\x01\x42\x08\x91\x64\xd9\xdd\x37\x08\x17\xef\xf9\xe5\x0f\xbd\x46\x91\xf5\xf9\x89\x92\x37\xdd\x89\x59\x44\x1f\x9c\xee\x34\x1e\xbe\x47\x83\x32\x72\x8e\x37\xdf\xac\x69\x38\xef\x75\xb0\xda\xdb\xac\x83\x94\x2f\x39\xa6\x62\x05\x1c\x25\x9c\x49\x16\xb0\xa8\x3c\xc7\x7e\x76\x71\x3e\x6f\xb5\x24\xe7\xe8\xb7\xb9\xc7\x6c\x43\x92\xee\x21\xd4\x17\xa1\x7f\xba\x35\xfe\xae\x39\xbc\xde\xba\x69\xd9\x8e\xe1\x62\xde\x64\x7d\x16\x88\x1b\xed\x29\x11\xfd\x4f\xa9\xff\x99\x90\xc4\xf6\xf4\xf9\x6e\xe9\x28\x23\xd7\xca\xe5\xee\xee\x9f\x63\xb1\x5b\xfb\x10\xd7\x2f\x1d\xf2\xe3\xbf\xb9\xb5\x6f\xa4\x6d\x7d\x25\x79\xfb\x24\x31\xea\x56\xbe\x5d\x53\xcd\x2d\x36\xa3\x6d\xdf\xab\x1c\xb8\x6d\x6f\xc0\x98\xa7\xdd\xaa\x86\x8c\x1d\x39\xa3\x9d\x70\x2b\x9b\x68\xd9\xfd\x33\xfe\xa9\xb6\x4a\x2e\x63\x0f\xcf\x68\x27\xd9\x4c\xb9\x46\x6d\xcb\xbe\xa1\xa8\xd6\x5f\xc6\xd6\x9f\xf1\x4f\xf4\xd4\xb4\x78\xd0\xd6\xf4\x13\x3c\x3b\xac\xd0\xdc\x90\x34\xda\xc9\xb4\x9a\x1a\x8d\xbd\x93\x87\xd4\xe2\x21\x1b\xb3\x2b\xd1\xbe\xe7\x69\xd4\x53\x67\xd5\x40\xa0\xe3\x19\x3f\x6d\x1a\xbc\x0e\x86\x3c\x10\xb4\x3d\x2a\xcd\x78\x32\xe6\xab\xbd\x36\xc9\xf4\x3a\x58\xae\xc3\xf4\x47\xea\xbf\xfb\x47\xff\x0d\x00\x00\xff\xff\xd2\x32\x5a\x28\x38\x9d\x00\x00") + +func v2SchemaJsonBytes() ([]byte, error) { + return bindataRead( + _v2SchemaJson, + "v2/schema.json", + ) +} + +func v2SchemaJson() (*asset, error) { + bytes, err := v2SchemaJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "v2/schema.json", size: 40248, mode: os.FileMode(0640), modTime: time.Unix(1568964748, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x88, 0x5e, 0xf, 0xbf, 0x17, 0x74, 0x0, 0xb2, 0x5a, 0x7f, 0xbc, 0x58, 0xcd, 0xc, 0x25, 0x73, 0xd5, 0x29, 0x1c, 0x7a, 0xd0, 0xce, 0x79, 0xd4, 0x89, 0x31, 0x27, 0x90, 0xf2, 0xff, 0xe6}} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// AssetString returns the asset contents as a string (instead of a []byte). +func AssetString(name string) (string, error) { + data, err := Asset(name) + return string(data), err +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// MustAssetString is like AssetString but panics when Asset would return an +// error. It simplifies safe initialization of global variables. +func MustAssetString(name string) string { + return string(MustAsset(name)) +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetDigest returns the digest of the file with the given name. It returns an +// error if the asset could not be found or the digest could not be loaded. +func AssetDigest(name string) ([sha256.Size]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) + } + return a.digest, nil + } + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) +} + +// Digests returns a map of all known files and their checksums. +func Digests() (map[string][sha256.Size]byte, error) { + mp := make(map[string][sha256.Size]byte, len(_bindata)) + for name := range _bindata { + a, err := _bindata[name]() + if err != nil { + return nil, err + } + mp[name] = a.digest + } + return mp, nil +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "jsonschema-draft-04.json": jsonschemaDraft04Json, + + "v2/schema.json": v2SchemaJson, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"}, +// AssetDir("data/img") would return []string{"a.png", "b.png"}, +// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + canonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(canonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "jsonschema-draft-04.json": {jsonschemaDraft04Json, map[string]*bintree{}}, + "v2": {nil, map[string]*bintree{ + "schema.json": {v2SchemaJson, map[string]*bintree{}}, + }}, +}} + +// RestoreAsset restores an asset under the given directory. +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) +} + +// RestoreAssets restores an asset under the given directory recursively. +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + canonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) +} diff --git a/vendor/github.com/go-openapi/spec/cache.go b/vendor/github.com/go-openapi/spec/cache.go new file mode 100644 index 0000000..122993b --- /dev/null +++ b/vendor/github.com/go-openapi/spec/cache.go @@ -0,0 +1,98 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "sync" +) + +// ResolutionCache a cache for resolving urls +type ResolutionCache interface { + Get(string) (interface{}, bool) + Set(string, interface{}) +} + +type simpleCache struct { + lock sync.RWMutex + store map[string]interface{} +} + +func (s *simpleCache) ShallowClone() ResolutionCache { + store := make(map[string]interface{}, len(s.store)) + s.lock.RLock() + for k, v := range s.store { + store[k] = v + } + s.lock.RUnlock() + + return &simpleCache{ + store: store, + } +} + +// Get retrieves a cached URI +func (s *simpleCache) Get(uri string) (interface{}, bool) { + s.lock.RLock() + v, ok := s.store[uri] + + s.lock.RUnlock() + return v, ok +} + +// Set caches a URI +func (s *simpleCache) Set(uri string, data interface{}) { + s.lock.Lock() + s.store[uri] = data + s.lock.Unlock() +} + +var ( + // resCache is a package level cache for $ref resolution and expansion. + // It is initialized lazily by methods that have the need for it: no + // memory is allocated unless some expander methods are called. + // + // It is initialized with JSON schema and swagger schema, + // which do not mutate during normal operations. + // + // All subsequent utilizations of this cache are produced from a shallow + // clone of this initial version. + resCache *simpleCache + onceCache sync.Once + + _ ResolutionCache = &simpleCache{} +) + +// initResolutionCache initializes the URI resolution cache. To be wrapped in a sync.Once.Do call. +func initResolutionCache() { + resCache = defaultResolutionCache() +} + +func defaultResolutionCache() *simpleCache { + return &simpleCache{store: map[string]interface{}{ + "http://swagger.io/v2/schema.json": MustLoadSwagger20Schema(), + "http://json-schema.org/draft-04/schema": MustLoadJSONSchemaDraft04(), + }} +} + +func cacheOrDefault(cache ResolutionCache) ResolutionCache { + onceCache.Do(initResolutionCache) + + if cache != nil { + return cache + } + + // get a shallow clone of the base cache with swagger and json schema + return resCache.ShallowClone() +} diff --git a/vendor/github.com/go-openapi/spec/contact_info.go b/vendor/github.com/go-openapi/spec/contact_info.go new file mode 100644 index 0000000..2f7bb21 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/contact_info.go @@ -0,0 +1,57 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/swag" +) + +// ContactInfo contact information for the exposed API. +// +// For more information: http://goo.gl/8us55a#contactObject +type ContactInfo struct { + ContactInfoProps + VendorExtensible +} + +// ContactInfoProps hold the properties of a ContactInfo object +type ContactInfoProps struct { + Name string `json:"name,omitempty"` + URL string `json:"url,omitempty"` + Email string `json:"email,omitempty"` +} + +// UnmarshalJSON hydrates ContactInfo from json +func (c *ContactInfo) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &c.ContactInfoProps); err != nil { + return err + } + return json.Unmarshal(data, &c.VendorExtensible) +} + +// MarshalJSON produces ContactInfo as json +func (c ContactInfo) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(c.ContactInfoProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(c.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} diff --git a/vendor/github.com/go-openapi/spec/debug.go b/vendor/github.com/go-openapi/spec/debug.go new file mode 100644 index 0000000..fc889f6 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/debug.go @@ -0,0 +1,49 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "fmt" + "log" + "os" + "path" + "runtime" +) + +// Debug is true when the SWAGGER_DEBUG env var is not empty. +// +// It enables a more verbose logging of this package. +var Debug = os.Getenv("SWAGGER_DEBUG") != "" + +var ( + // specLogger is a debug logger for this package + specLogger *log.Logger +) + +func init() { + debugOptions() +} + +func debugOptions() { + specLogger = log.New(os.Stdout, "spec:", log.LstdFlags) +} + +func debugLog(msg string, args ...interface{}) { + // A private, trivial trace logger, based on go-openapi/spec/expander.go:debugLog() + if Debug { + _, file1, pos1, _ := runtime.Caller(1) + specLogger.Printf("%s:%d: %s", path.Base(file1), pos1, fmt.Sprintf(msg, args...)) + } +} diff --git a/vendor/github.com/go-openapi/spec/errors.go b/vendor/github.com/go-openapi/spec/errors.go new file mode 100644 index 0000000..6992c7b --- /dev/null +++ b/vendor/github.com/go-openapi/spec/errors.go @@ -0,0 +1,19 @@ +package spec + +import "errors" + +// Error codes +var ( + // ErrUnknownTypeForReference indicates that a resolved reference was found in an unsupported container type + ErrUnknownTypeForReference = errors.New("unknown type for the resolved reference") + + // ErrResolveRefNeedsAPointer indicates that a $ref target must be a valid JSON pointer + ErrResolveRefNeedsAPointer = errors.New("resolve ref: target needs to be a pointer") + + // ErrDerefUnsupportedType indicates that a resolved reference was found in an unsupported container type. + // At the moment, $ref are supported only inside: schemas, parameters, responses, path items + ErrDerefUnsupportedType = errors.New("deref: unsupported type") + + // ErrExpandUnsupportedType indicates that $ref expansion is attempted on some invalid type + ErrExpandUnsupportedType = errors.New("expand: unsupported type. Input should be of type *Parameter or *Response") +) diff --git a/vendor/github.com/go-openapi/spec/expander.go b/vendor/github.com/go-openapi/spec/expander.go new file mode 100644 index 0000000..d4ea889 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/expander.go @@ -0,0 +1,594 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "fmt" +) + +// ExpandOptions provides options for the spec expander. +// +// RelativeBase is the path to the root document. This can be a remote URL or a path to a local file. +// +// If left empty, the root document is assumed to be located in the current working directory: +// all relative $ref's will be resolved from there. +// +// PathLoader injects a document loading method. By default, this resolves to the function provided by the SpecLoader package variable. +// +type ExpandOptions struct { + RelativeBase string // the path to the root document to expand. This is a file, not a directory + SkipSchemas bool // do not expand schemas, just paths, parameters and responses + ContinueOnError bool // continue expanding even after and error is found + PathLoader func(string) (json.RawMessage, error) `json:"-"` // the document loading method that takes a path as input and yields a json document + AbsoluteCircularRef bool // circular $ref remaining after expansion remain absolute URLs +} + +func optionsOrDefault(opts *ExpandOptions) *ExpandOptions { + if opts != nil { + clone := *opts // shallow clone to avoid internal changes to be propagated to the caller + if clone.RelativeBase != "" { + clone.RelativeBase = normalizeBase(clone.RelativeBase) + } + // if the relative base is empty, let the schema loader choose a pseudo root document + return &clone + } + return &ExpandOptions{} +} + +// ExpandSpec expands the references in a swagger spec +func ExpandSpec(spec *Swagger, options *ExpandOptions) error { + options = optionsOrDefault(options) + resolver := defaultSchemaLoader(spec, options, nil, nil) + + specBasePath := options.RelativeBase + + if !options.SkipSchemas { + for key, definition := range spec.Definitions { + parentRefs := make([]string, 0, 10) + parentRefs = append(parentRefs, fmt.Sprintf("#/definitions/%s", key)) + + def, err := expandSchema(definition, parentRefs, resolver, specBasePath) + if resolver.shouldStopOnError(err) { + return err + } + if def != nil { + spec.Definitions[key] = *def + } + } + } + + for key := range spec.Parameters { + parameter := spec.Parameters[key] + if err := expandParameterOrResponse(¶meter, resolver, specBasePath); resolver.shouldStopOnError(err) { + return err + } + spec.Parameters[key] = parameter + } + + for key := range spec.Responses { + response := spec.Responses[key] + if err := expandParameterOrResponse(&response, resolver, specBasePath); resolver.shouldStopOnError(err) { + return err + } + spec.Responses[key] = response + } + + if spec.Paths != nil { + for key := range spec.Paths.Paths { + pth := spec.Paths.Paths[key] + if err := expandPathItem(&pth, resolver, specBasePath); resolver.shouldStopOnError(err) { + return err + } + spec.Paths.Paths[key] = pth + } + } + + return nil +} + +const rootBase = ".root" + +// baseForRoot loads in the cache the root document and produces a fake ".root" base path entry +// for further $ref resolution +// +// Setting the cache is optional and this parameter may safely be left to nil. +func baseForRoot(root interface{}, cache ResolutionCache) string { + if root == nil { + return "" + } + + // cache the root document to resolve $ref's + normalizedBase := normalizeBase(rootBase) + cache.Set(normalizedBase, root) + + return normalizedBase +} + +// ExpandSchema expands the refs in the schema object with reference to the root object. +// +// go-openapi/validate uses this function. +// +// Notice that it is impossible to reference a json schema in a different document other than root +// (use ExpandSchemaWithBasePath to resolve external references). +// +// Setting the cache is optional and this parameter may safely be left to nil. +func ExpandSchema(schema *Schema, root interface{}, cache ResolutionCache) error { + cache = cacheOrDefault(cache) + if root == nil { + root = schema + } + + opts := &ExpandOptions{ + // when a root is specified, cache the root as an in-memory document for $ref retrieval + RelativeBase: baseForRoot(root, cache), + SkipSchemas: false, + ContinueOnError: false, + } + + return ExpandSchemaWithBasePath(schema, cache, opts) +} + +// ExpandSchemaWithBasePath expands the refs in the schema object, base path configured through expand options. +// +// Setting the cache is optional and this parameter may safely be left to nil. +func ExpandSchemaWithBasePath(schema *Schema, cache ResolutionCache, opts *ExpandOptions) error { + if schema == nil { + return nil + } + + cache = cacheOrDefault(cache) + + opts = optionsOrDefault(opts) + + resolver := defaultSchemaLoader(nil, opts, cache, nil) + + parentRefs := make([]string, 0, 10) + s, err := expandSchema(*schema, parentRefs, resolver, opts.RelativeBase) + if err != nil { + return err + } + if s != nil { + // guard for when continuing on error + *schema = *s + } + + return nil +} + +func expandItems(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { + if target.Items == nil { + return &target, nil + } + + // array + if target.Items.Schema != nil { + t, err := expandSchema(*target.Items.Schema, parentRefs, resolver, basePath) + if err != nil { + return nil, err + } + *target.Items.Schema = *t + } + + // tuple + for i := range target.Items.Schemas { + t, err := expandSchema(target.Items.Schemas[i], parentRefs, resolver, basePath) + if err != nil { + return nil, err + } + target.Items.Schemas[i] = *t + } + + return &target, nil +} + +func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { + if target.Ref.String() == "" && target.Ref.IsRoot() { + newRef := normalizeRef(&target.Ref, basePath) + target.Ref = *newRef + return &target, nil + } + + // change the base path of resolution when an ID is encountered + // otherwise the basePath should inherit the parent's + if target.ID != "" { + basePath, _ = resolver.setSchemaID(target, target.ID, basePath) + } + + if target.Ref.String() != "" { + return expandSchemaRef(target, parentRefs, resolver, basePath) + } + + for k := range target.Definitions { + tt, err := expandSchema(target.Definitions[k], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if tt != nil { + target.Definitions[k] = *tt + } + } + + t, err := expandItems(target, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target = *t + } + + for i := range target.AllOf { + t, err := expandSchema(target.AllOf[i], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target.AllOf[i] = *t + } + } + + for i := range target.AnyOf { + t, err := expandSchema(target.AnyOf[i], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target.AnyOf[i] = *t + } + } + + for i := range target.OneOf { + t, err := expandSchema(target.OneOf[i], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target.OneOf[i] = *t + } + } + + if target.Not != nil { + t, err := expandSchema(*target.Not, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + *target.Not = *t + } + } + + for k := range target.Properties { + t, err := expandSchema(target.Properties[k], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target.Properties[k] = *t + } + } + + if target.AdditionalProperties != nil && target.AdditionalProperties.Schema != nil { + t, err := expandSchema(*target.AdditionalProperties.Schema, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + *target.AdditionalProperties.Schema = *t + } + } + + for k := range target.PatternProperties { + t, err := expandSchema(target.PatternProperties[k], parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + target.PatternProperties[k] = *t + } + } + + for k := range target.Dependencies { + if target.Dependencies[k].Schema != nil { + t, err := expandSchema(*target.Dependencies[k].Schema, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + *target.Dependencies[k].Schema = *t + } + } + } + + if target.AdditionalItems != nil && target.AdditionalItems.Schema != nil { + t, err := expandSchema(*target.AdditionalItems.Schema, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return &target, err + } + if t != nil { + *target.AdditionalItems.Schema = *t + } + } + return &target, nil +} + +func expandSchemaRef(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { + // if a Ref is found, all sibling fields are skipped + // Ref also changes the resolution scope of children expandSchema + + // here the resolution scope is changed because a $ref was encountered + normalizedRef := normalizeRef(&target.Ref, basePath) + normalizedBasePath := normalizedRef.RemoteURI() + + if resolver.isCircular(normalizedRef, basePath, parentRefs...) { + // this means there is a cycle in the recursion tree: return the Ref + // - circular refs cannot be expanded. We leave them as ref. + // - denormalization means that a new local file ref is set relative to the original basePath + debugLog("short circuit circular ref: basePath: %s, normalizedPath: %s, normalized ref: %s", + basePath, normalizedBasePath, normalizedRef.String()) + if !resolver.options.AbsoluteCircularRef { + target.Ref = denormalizeRef(normalizedRef, resolver.context.basePath, resolver.context.rootID) + } else { + target.Ref = *normalizedRef + } + return &target, nil + } + + var t *Schema + err := resolver.Resolve(&target.Ref, &t, basePath) + if resolver.shouldStopOnError(err) { + return nil, err + } + + if t == nil { + // guard for when continuing on error + return &target, nil + } + + parentRefs = append(parentRefs, normalizedRef.String()) + transitiveResolver := resolver.transitiveResolver(basePath, target.Ref) + + basePath = resolver.updateBasePath(transitiveResolver, normalizedBasePath) + + return expandSchema(*t, parentRefs, transitiveResolver, basePath) +} + +func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string) error { + if pathItem == nil { + return nil + } + + parentRefs := make([]string, 0, 10) + if err := resolver.deref(pathItem, parentRefs, basePath); resolver.shouldStopOnError(err) { + return err + } + + if pathItem.Ref.String() != "" { + transitiveResolver := resolver.transitiveResolver(basePath, pathItem.Ref) + basePath = transitiveResolver.updateBasePath(resolver, basePath) + resolver = transitiveResolver + } + + pathItem.Ref = Ref{} + for i := range pathItem.Parameters { + if err := expandParameterOrResponse(&(pathItem.Parameters[i]), resolver, basePath); resolver.shouldStopOnError(err) { + return err + } + } + + ops := []*Operation{ + pathItem.Get, + pathItem.Head, + pathItem.Options, + pathItem.Put, + pathItem.Post, + pathItem.Patch, + pathItem.Delete, + } + for _, op := range ops { + if err := expandOperation(op, resolver, basePath); resolver.shouldStopOnError(err) { + return err + } + } + + return nil +} + +func expandOperation(op *Operation, resolver *schemaLoader, basePath string) error { + if op == nil { + return nil + } + + for i := range op.Parameters { + param := op.Parameters[i] + if err := expandParameterOrResponse(¶m, resolver, basePath); resolver.shouldStopOnError(err) { + return err + } + op.Parameters[i] = param + } + + if op.Responses == nil { + return nil + } + + responses := op.Responses + if err := expandParameterOrResponse(responses.Default, resolver, basePath); resolver.shouldStopOnError(err) { + return err + } + + for code := range responses.StatusCodeResponses { + response := responses.StatusCodeResponses[code] + if err := expandParameterOrResponse(&response, resolver, basePath); resolver.shouldStopOnError(err) { + return err + } + responses.StatusCodeResponses[code] = response + } + + return nil +} + +// ExpandResponseWithRoot expands a response based on a root document, not a fetchable document +// +// Notice that it is impossible to reference a json schema in a different document other than root +// (use ExpandResponse to resolve external references). +// +// Setting the cache is optional and this parameter may safely be left to nil. +func ExpandResponseWithRoot(response *Response, root interface{}, cache ResolutionCache) error { + cache = cacheOrDefault(cache) + opts := &ExpandOptions{ + RelativeBase: baseForRoot(root, cache), + } + resolver := defaultSchemaLoader(root, opts, cache, nil) + + return expandParameterOrResponse(response, resolver, opts.RelativeBase) +} + +// ExpandResponse expands a response based on a basepath +// +// All refs inside response will be resolved relative to basePath +func ExpandResponse(response *Response, basePath string) error { + opts := optionsOrDefault(&ExpandOptions{ + RelativeBase: basePath, + }) + resolver := defaultSchemaLoader(nil, opts, nil, nil) + + return expandParameterOrResponse(response, resolver, opts.RelativeBase) +} + +// ExpandParameterWithRoot expands a parameter based on a root document, not a fetchable document. +// +// Notice that it is impossible to reference a json schema in a different document other than root +// (use ExpandParameter to resolve external references). +func ExpandParameterWithRoot(parameter *Parameter, root interface{}, cache ResolutionCache) error { + cache = cacheOrDefault(cache) + + opts := &ExpandOptions{ + RelativeBase: baseForRoot(root, cache), + } + resolver := defaultSchemaLoader(root, opts, cache, nil) + + return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) +} + +// ExpandParameter expands a parameter based on a basepath. +// This is the exported version of expandParameter +// all refs inside parameter will be resolved relative to basePath +func ExpandParameter(parameter *Parameter, basePath string) error { + opts := optionsOrDefault(&ExpandOptions{ + RelativeBase: basePath, + }) + resolver := defaultSchemaLoader(nil, opts, nil, nil) + + return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) +} + +func getRefAndSchema(input interface{}) (*Ref, *Schema, error) { + var ( + ref *Ref + sch *Schema + ) + + switch refable := input.(type) { + case *Parameter: + if refable == nil { + return nil, nil, nil + } + ref = &refable.Ref + sch = refable.Schema + case *Response: + if refable == nil { + return nil, nil, nil + } + ref = &refable.Ref + sch = refable.Schema + default: + return nil, nil, fmt.Errorf("unsupported type: %T: %w", input, ErrExpandUnsupportedType) + } + + return ref, sch, nil +} + +func expandParameterOrResponse(input interface{}, resolver *schemaLoader, basePath string) error { + ref, _, err := getRefAndSchema(input) + if err != nil { + return err + } + + if ref == nil { + return nil + } + + parentRefs := make([]string, 0, 10) + if err = resolver.deref(input, parentRefs, basePath); resolver.shouldStopOnError(err) { + return err + } + + ref, sch, _ := getRefAndSchema(input) + if ref.String() != "" { + transitiveResolver := resolver.transitiveResolver(basePath, *ref) + basePath = resolver.updateBasePath(transitiveResolver, basePath) + resolver = transitiveResolver + } + + if sch == nil { + // nothing to be expanded + if ref != nil { + *ref = Ref{} + } + return nil + } + + if sch.Ref.String() != "" { + rebasedRef, ern := NewRef(normalizeURI(sch.Ref.String(), basePath)) + if ern != nil { + return ern + } + + switch { + case resolver.isCircular(&rebasedRef, basePath, parentRefs...): + // this is a circular $ref: stop expansion + if !resolver.options.AbsoluteCircularRef { + sch.Ref = denormalizeRef(&rebasedRef, resolver.context.basePath, resolver.context.rootID) + } else { + sch.Ref = rebasedRef + } + case !resolver.options.SkipSchemas: + // schema expanded to a $ref in another root + sch.Ref = rebasedRef + debugLog("rebased to: %s", sch.Ref.String()) + default: + // skip schema expansion but rebase $ref to schema + sch.Ref = denormalizeRef(&rebasedRef, resolver.context.basePath, resolver.context.rootID) + } + } + + if ref != nil { + *ref = Ref{} + } + + // expand schema + if !resolver.options.SkipSchemas { + s, err := expandSchema(*sch, parentRefs, resolver, basePath) + if resolver.shouldStopOnError(err) { + return err + } + if s == nil { + // guard for when continuing on error + return nil + } + *sch = *s + } + + return nil +} diff --git a/vendor/github.com/go-openapi/spec/external_docs.go b/vendor/github.com/go-openapi/spec/external_docs.go new file mode 100644 index 0000000..88add91 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/external_docs.go @@ -0,0 +1,24 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +// ExternalDocumentation allows referencing an external resource for +// extended documentation. +// +// For more information: http://goo.gl/8us55a#externalDocumentationObject +type ExternalDocumentation struct { + Description string `json:"description,omitempty"` + URL string `json:"url,omitempty"` +} diff --git a/vendor/github.com/go-openapi/spec/header.go b/vendor/github.com/go-openapi/spec/header.go new file mode 100644 index 0000000..9dfd17b --- /dev/null +++ b/vendor/github.com/go-openapi/spec/header.go @@ -0,0 +1,203 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "strings" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +const ( + jsonArray = "array" +) + +// HeaderProps describes a response header +type HeaderProps struct { + Description string `json:"description,omitempty"` +} + +// Header describes a header for a response of the API +// +// For more information: http://goo.gl/8us55a#headerObject +type Header struct { + CommonValidations + SimpleSchema + VendorExtensible + HeaderProps +} + +// ResponseHeader creates a new header instance for use in a response +func ResponseHeader() *Header { + return new(Header) +} + +// WithDescription sets the description on this response, allows for chaining +func (h *Header) WithDescription(description string) *Header { + h.Description = description + return h +} + +// Typed a fluent builder method for the type of parameter +func (h *Header) Typed(tpe, format string) *Header { + h.Type = tpe + h.Format = format + return h +} + +// CollectionOf a fluent builder method for an array item +func (h *Header) CollectionOf(items *Items, format string) *Header { + h.Type = jsonArray + h.Items = items + h.CollectionFormat = format + return h +} + +// WithDefault sets the default value on this item +func (h *Header) WithDefault(defaultValue interface{}) *Header { + h.Default = defaultValue + return h +} + +// WithMaxLength sets a max length value +func (h *Header) WithMaxLength(max int64) *Header { + h.MaxLength = &max + return h +} + +// WithMinLength sets a min length value +func (h *Header) WithMinLength(min int64) *Header { + h.MinLength = &min + return h +} + +// WithPattern sets a pattern value +func (h *Header) WithPattern(pattern string) *Header { + h.Pattern = pattern + return h +} + +// WithMultipleOf sets a multiple of value +func (h *Header) WithMultipleOf(number float64) *Header { + h.MultipleOf = &number + return h +} + +// WithMaximum sets a maximum number value +func (h *Header) WithMaximum(max float64, exclusive bool) *Header { + h.Maximum = &max + h.ExclusiveMaximum = exclusive + return h +} + +// WithMinimum sets a minimum number value +func (h *Header) WithMinimum(min float64, exclusive bool) *Header { + h.Minimum = &min + h.ExclusiveMinimum = exclusive + return h +} + +// WithEnum sets a the enum values (replace) +func (h *Header) WithEnum(values ...interface{}) *Header { + h.Enum = append([]interface{}{}, values...) + return h +} + +// WithMaxItems sets the max items +func (h *Header) WithMaxItems(size int64) *Header { + h.MaxItems = &size + return h +} + +// WithMinItems sets the min items +func (h *Header) WithMinItems(size int64) *Header { + h.MinItems = &size + return h +} + +// UniqueValues dictates that this array can only have unique items +func (h *Header) UniqueValues() *Header { + h.UniqueItems = true + return h +} + +// AllowDuplicates this array can have duplicates +func (h *Header) AllowDuplicates() *Header { + h.UniqueItems = false + return h +} + +// WithValidations is a fluent method to set header validations +func (h *Header) WithValidations(val CommonValidations) *Header { + h.SetValidations(SchemaValidations{CommonValidations: val}) + return h +} + +// MarshalJSON marshal this to JSON +func (h Header) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(h.CommonValidations) + if err != nil { + return nil, err + } + b2, err := json.Marshal(h.SimpleSchema) + if err != nil { + return nil, err + } + b3, err := json.Marshal(h.HeaderProps) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2, b3), nil +} + +// UnmarshalJSON unmarshals this header from JSON +func (h *Header) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &h.CommonValidations); err != nil { + return err + } + if err := json.Unmarshal(data, &h.SimpleSchema); err != nil { + return err + } + if err := json.Unmarshal(data, &h.VendorExtensible); err != nil { + return err + } + return json.Unmarshal(data, &h.HeaderProps) +} + +// JSONLookup look up a value by the json property name +func (h Header) JSONLookup(token string) (interface{}, error) { + if ex, ok := h.Extensions[token]; ok { + return &ex, nil + } + + r, _, err := jsonpointer.GetForToken(h.CommonValidations, token) + if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { + return nil, err + } + if r != nil { + return r, nil + } + r, _, err = jsonpointer.GetForToken(h.SimpleSchema, token) + if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { + return nil, err + } + if r != nil { + return r, nil + } + r, _, err = jsonpointer.GetForToken(h.HeaderProps, token) + return r, err +} diff --git a/vendor/github.com/go-openapi/spec/info.go b/vendor/github.com/go-openapi/spec/info.go new file mode 100644 index 0000000..c458b49 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/info.go @@ -0,0 +1,165 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "strings" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// Extensions vendor specific extensions +type Extensions map[string]interface{} + +// Add adds a value to these extensions +func (e Extensions) Add(key string, value interface{}) { + realKey := strings.ToLower(key) + e[realKey] = value +} + +// GetString gets a string value from the extensions +func (e Extensions) GetString(key string) (string, bool) { + if v, ok := e[strings.ToLower(key)]; ok { + str, ok := v.(string) + return str, ok + } + return "", false +} + +// GetBool gets a string value from the extensions +func (e Extensions) GetBool(key string) (bool, bool) { + if v, ok := e[strings.ToLower(key)]; ok { + str, ok := v.(bool) + return str, ok + } + return false, false +} + +// GetStringSlice gets a string value from the extensions +func (e Extensions) GetStringSlice(key string) ([]string, bool) { + if v, ok := e[strings.ToLower(key)]; ok { + arr, isSlice := v.([]interface{}) + if !isSlice { + return nil, false + } + var strs []string + for _, iface := range arr { + str, isString := iface.(string) + if !isString { + return nil, false + } + strs = append(strs, str) + } + return strs, ok + } + return nil, false +} + +// VendorExtensible composition block. +type VendorExtensible struct { + Extensions Extensions +} + +// AddExtension adds an extension to this extensible object +func (v *VendorExtensible) AddExtension(key string, value interface{}) { + if value == nil { + return + } + if v.Extensions == nil { + v.Extensions = make(map[string]interface{}) + } + v.Extensions.Add(key, value) +} + +// MarshalJSON marshals the extensions to json +func (v VendorExtensible) MarshalJSON() ([]byte, error) { + toser := make(map[string]interface{}) + for k, v := range v.Extensions { + lk := strings.ToLower(k) + if strings.HasPrefix(lk, "x-") { + toser[k] = v + } + } + return json.Marshal(toser) +} + +// UnmarshalJSON for this extensible object +func (v *VendorExtensible) UnmarshalJSON(data []byte) error { + var d map[string]interface{} + if err := json.Unmarshal(data, &d); err != nil { + return err + } + for k, vv := range d { + lk := strings.ToLower(k) + if strings.HasPrefix(lk, "x-") { + if v.Extensions == nil { + v.Extensions = map[string]interface{}{} + } + v.Extensions[k] = vv + } + } + return nil +} + +// InfoProps the properties for an info definition +type InfoProps struct { + Description string `json:"description,omitempty"` + Title string `json:"title,omitempty"` + TermsOfService string `json:"termsOfService,omitempty"` + Contact *ContactInfo `json:"contact,omitempty"` + License *License `json:"license,omitempty"` + Version string `json:"version,omitempty"` +} + +// Info object provides metadata about the API. +// The metadata can be used by the clients if needed, and can be presented in the Swagger-UI for convenience. +// +// For more information: http://goo.gl/8us55a#infoObject +type Info struct { + VendorExtensible + InfoProps +} + +// JSONLookup look up a value by the json property name +func (i Info) JSONLookup(token string) (interface{}, error) { + if ex, ok := i.Extensions[token]; ok { + return &ex, nil + } + r, _, err := jsonpointer.GetForToken(i.InfoProps, token) + return r, err +} + +// MarshalJSON marshal this to JSON +func (i Info) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(i.InfoProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(i.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} + +// UnmarshalJSON marshal this from JSON +func (i *Info) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &i.InfoProps); err != nil { + return err + } + return json.Unmarshal(data, &i.VendorExtensible) +} diff --git a/vendor/github.com/go-openapi/spec/items.go b/vendor/github.com/go-openapi/spec/items.go new file mode 100644 index 0000000..e2afb21 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/items.go @@ -0,0 +1,234 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "strings" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +const ( + jsonRef = "$ref" +) + +// SimpleSchema describe swagger simple schemas for parameters and headers +type SimpleSchema struct { + Type string `json:"type,omitempty"` + Nullable bool `json:"nullable,omitempty"` + Format string `json:"format,omitempty"` + Items *Items `json:"items,omitempty"` + CollectionFormat string `json:"collectionFormat,omitempty"` + Default interface{} `json:"default,omitempty"` + Example interface{} `json:"example,omitempty"` +} + +// TypeName return the type (or format) of a simple schema +func (s *SimpleSchema) TypeName() string { + if s.Format != "" { + return s.Format + } + return s.Type +} + +// ItemsTypeName yields the type of items in a simple schema array +func (s *SimpleSchema) ItemsTypeName() string { + if s.Items == nil { + return "" + } + return s.Items.TypeName() +} + +// Items a limited subset of JSON-Schema's items object. +// It is used by parameter definitions that are not located in "body". +// +// For more information: http://goo.gl/8us55a#items-object +type Items struct { + Refable + CommonValidations + SimpleSchema + VendorExtensible +} + +// NewItems creates a new instance of items +func NewItems() *Items { + return &Items{} +} + +// Typed a fluent builder method for the type of item +func (i *Items) Typed(tpe, format string) *Items { + i.Type = tpe + i.Format = format + return i +} + +// AsNullable flags this schema as nullable. +func (i *Items) AsNullable() *Items { + i.Nullable = true + return i +} + +// CollectionOf a fluent builder method for an array item +func (i *Items) CollectionOf(items *Items, format string) *Items { + i.Type = jsonArray + i.Items = items + i.CollectionFormat = format + return i +} + +// WithDefault sets the default value on this item +func (i *Items) WithDefault(defaultValue interface{}) *Items { + i.Default = defaultValue + return i +} + +// WithMaxLength sets a max length value +func (i *Items) WithMaxLength(max int64) *Items { + i.MaxLength = &max + return i +} + +// WithMinLength sets a min length value +func (i *Items) WithMinLength(min int64) *Items { + i.MinLength = &min + return i +} + +// WithPattern sets a pattern value +func (i *Items) WithPattern(pattern string) *Items { + i.Pattern = pattern + return i +} + +// WithMultipleOf sets a multiple of value +func (i *Items) WithMultipleOf(number float64) *Items { + i.MultipleOf = &number + return i +} + +// WithMaximum sets a maximum number value +func (i *Items) WithMaximum(max float64, exclusive bool) *Items { + i.Maximum = &max + i.ExclusiveMaximum = exclusive + return i +} + +// WithMinimum sets a minimum number value +func (i *Items) WithMinimum(min float64, exclusive bool) *Items { + i.Minimum = &min + i.ExclusiveMinimum = exclusive + return i +} + +// WithEnum sets a the enum values (replace) +func (i *Items) WithEnum(values ...interface{}) *Items { + i.Enum = append([]interface{}{}, values...) + return i +} + +// WithMaxItems sets the max items +func (i *Items) WithMaxItems(size int64) *Items { + i.MaxItems = &size + return i +} + +// WithMinItems sets the min items +func (i *Items) WithMinItems(size int64) *Items { + i.MinItems = &size + return i +} + +// UniqueValues dictates that this array can only have unique items +func (i *Items) UniqueValues() *Items { + i.UniqueItems = true + return i +} + +// AllowDuplicates this array can have duplicates +func (i *Items) AllowDuplicates() *Items { + i.UniqueItems = false + return i +} + +// WithValidations is a fluent method to set Items validations +func (i *Items) WithValidations(val CommonValidations) *Items { + i.SetValidations(SchemaValidations{CommonValidations: val}) + return i +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (i *Items) UnmarshalJSON(data []byte) error { + var validations CommonValidations + if err := json.Unmarshal(data, &validations); err != nil { + return err + } + var ref Refable + if err := json.Unmarshal(data, &ref); err != nil { + return err + } + var simpleSchema SimpleSchema + if err := json.Unmarshal(data, &simpleSchema); err != nil { + return err + } + var vendorExtensible VendorExtensible + if err := json.Unmarshal(data, &vendorExtensible); err != nil { + return err + } + i.Refable = ref + i.CommonValidations = validations + i.SimpleSchema = simpleSchema + i.VendorExtensible = vendorExtensible + return nil +} + +// MarshalJSON converts this items object to JSON +func (i Items) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(i.CommonValidations) + if err != nil { + return nil, err + } + b2, err := json.Marshal(i.SimpleSchema) + if err != nil { + return nil, err + } + b3, err := json.Marshal(i.Refable) + if err != nil { + return nil, err + } + b4, err := json.Marshal(i.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b4, b3, b1, b2), nil +} + +// JSONLookup look up a value by the json property name +func (i Items) JSONLookup(token string) (interface{}, error) { + if token == jsonRef { + return &i.Ref, nil + } + + r, _, err := jsonpointer.GetForToken(i.CommonValidations, token) + if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { + return nil, err + } + if r != nil { + return r, nil + } + r, _, err = jsonpointer.GetForToken(i.SimpleSchema, token) + return r, err +} diff --git a/vendor/github.com/go-openapi/spec/license.go b/vendor/github.com/go-openapi/spec/license.go new file mode 100644 index 0000000..b42f803 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/license.go @@ -0,0 +1,56 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/swag" +) + +// License information for the exposed API. +// +// For more information: http://goo.gl/8us55a#licenseObject +type License struct { + LicenseProps + VendorExtensible +} + +// LicenseProps holds the properties of a License object +type LicenseProps struct { + Name string `json:"name,omitempty"` + URL string `json:"url,omitempty"` +} + +// UnmarshalJSON hydrates License from json +func (l *License) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &l.LicenseProps); err != nil { + return err + } + return json.Unmarshal(data, &l.VendorExtensible) +} + +// MarshalJSON produces License as json +func (l License) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(l.LicenseProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(l.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} diff --git a/vendor/github.com/go-openapi/spec/normalizer.go b/vendor/github.com/go-openapi/spec/normalizer.go new file mode 100644 index 0000000..d6c4839 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/normalizer.go @@ -0,0 +1,203 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "net/url" + "path" + "strings" +) + +const fileScheme = "file" + +// normalizeURI ensures that all $ref paths used internally by the expander are canonicalized. +// +// NOTE(windows): there is a tolerance over the strict URI format on windows. +// +// The normalizer accepts relative file URLs like 'Path\File.JSON' as well as absolute file URLs like +// 'C:\Path\file.Yaml'. +// +// Both are canonicalized with a "file://" scheme, slashes and a lower-cased path: +// 'file:///c:/path/file.yaml' +// +// URLs can be specified with a file scheme, like in 'file:///folder/file.json' or +// 'file:///c:\folder\File.json'. +// +// URLs like file://C:\folder are considered invalid (i.e. there is no host 'c:\folder') and a "repair" +// is attempted. +// +// The base path argument is assumed to be canonicalized (e.g. using normalizeBase()). +func normalizeURI(refPath, base string) string { + refURL, err := url.Parse(refPath) + if err != nil { + specLogger.Printf("warning: invalid URI in $ref %q: %v", refPath, err) + refURL, refPath = repairURI(refPath) + } + + fixWindowsURI(refURL, refPath) // noop on non-windows OS + + refURL.Path = path.Clean(refURL.Path) + if refURL.Path == "." { + refURL.Path = "" + } + + r := MustCreateRef(refURL.String()) + if r.IsCanonical() { + return refURL.String() + } + + baseURL, _ := url.Parse(base) + if path.IsAbs(refURL.Path) { + baseURL.Path = refURL.Path + } else if refURL.Path != "" { + baseURL.Path = path.Join(path.Dir(baseURL.Path), refURL.Path) + } + // copying fragment from ref to base + baseURL.Fragment = refURL.Fragment + + return baseURL.String() +} + +// denormalizeRef returns the simplest notation for a normalized $ref, given the path of the original root document. +// +// When calling this, we assume that: +// * $ref is a canonical URI +// * originalRelativeBase is a canonical URI +// +// denormalizeRef is currently used when we rewrite a $ref after a circular $ref has been detected. +// In this case, expansion stops and normally renders the internal canonical $ref. +// +// This internal $ref is eventually rebased to the original RelativeBase used for the expansion. +// +// There is a special case for schemas that are anchored with an "id": +// in that case, the rebasing is performed // against the id only if this is an anchor for the initial root document. +// All other intermediate "id"'s found along the way are ignored for the purpose of rebasing. +// +func denormalizeRef(ref *Ref, originalRelativeBase, id string) Ref { + debugLog("denormalizeRef called:\n$ref: %q\noriginal: %s\nroot ID:%s", ref.String(), originalRelativeBase, id) + + if ref.String() == "" || ref.IsRoot() || ref.HasFragmentOnly { + // short circuit: $ref to current doc + return *ref + } + + if id != "" { + idBaseURL, err := url.Parse(id) + if err == nil { // if the schema id is not usable as a URI, ignore it + if ref, ok := rebase(ref, idBaseURL, true); ok { // rebase, but keep references to root unchaged (do not want $ref: "") + // $ref relative to the ID of the schema in the root document + return ref + } + } + } + + originalRelativeBaseURL, _ := url.Parse(originalRelativeBase) + + r, _ := rebase(ref, originalRelativeBaseURL, false) + + return r +} + +func rebase(ref *Ref, v *url.URL, notEqual bool) (Ref, bool) { + var newBase url.URL + + u := ref.GetURL() + + if u.Scheme != v.Scheme || u.Host != v.Host { + return *ref, false + } + + docPath := v.Path + v.Path = path.Dir(v.Path) + + if v.Path == "." { + v.Path = "" + } else if !strings.HasSuffix(v.Path, "/") { + v.Path += "/" + } + + newBase.Fragment = u.Fragment + + if strings.HasPrefix(u.Path, docPath) { + newBase.Path = strings.TrimPrefix(u.Path, docPath) + } else { + newBase.Path = strings.TrimPrefix(u.Path, v.Path) + } + + if notEqual && newBase.Path == "" && newBase.Fragment == "" { + // do not want rebasing to end up in an empty $ref + return *ref, false + } + + if path.IsAbs(newBase.Path) { + // whenever we end up with an absolute path, specify the scheme and host + newBase.Scheme = v.Scheme + newBase.Host = v.Host + } + + return MustCreateRef(newBase.String()), true +} + +// normalizeRef canonicalize a Ref, using a canonical relativeBase as its absolute anchor +func normalizeRef(ref *Ref, relativeBase string) *Ref { + r := MustCreateRef(normalizeURI(ref.String(), relativeBase)) + return &r +} + +// normalizeBase performs a normalization of the input base path. +// +// This always yields a canonical URI (absolute), usable for the document cache. +// +// It ensures that all further internal work on basePath may safely assume +// a non-empty, cross-platform, canonical URI (i.e. absolute). +// +// This normalization tolerates windows paths (e.g. C:\x\y\File.dat) and transform this +// in a file:// URL with lower cased drive letter and path. +// +// See also: https://en.wikipedia.org/wiki/File_URI_scheme +func normalizeBase(in string) string { + u, err := url.Parse(in) + if err != nil { + specLogger.Printf("warning: invalid URI in RelativeBase %q: %v", in, err) + u, in = repairURI(in) + } + + u.Fragment = "" // any fragment in the base is irrelevant + + fixWindowsURI(u, in) // noop on non-windows OS + + u.Path = path.Clean(u.Path) + if u.Path == "." { // empty after Clean() + u.Path = "" + } + + if u.Scheme != "" { + if path.IsAbs(u.Path) || u.Scheme != fileScheme { + // this is absolute or explicitly not a local file: we're good + return u.String() + } + } + + // no scheme or file scheme with relative path: assume file and make it absolute + // enforce scheme file://... with absolute path. + // + // If the input path is relative, we anchor the path to the current working directory. + // NOTE: we may end up with a host component. Leave it unchanged: e.g. file://host/folder/file.json + + u.Scheme = fileScheme + u.Path = absPath(u.Path) // platform-dependent + u.RawQuery = "" // any query component is irrelevant for a base + return u.String() +} diff --git a/vendor/github.com/go-openapi/spec/normalizer_nonwindows.go b/vendor/github.com/go-openapi/spec/normalizer_nonwindows.go new file mode 100644 index 0000000..c8a0645 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/normalizer_nonwindows.go @@ -0,0 +1,43 @@ +// +build !windows + +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "net/url" + "path/filepath" +) + +// absPath makes a file path absolute and compatible with a URI path component. +// +// The parameter must be a path, not an URI. +func absPath(in string) string { + anchored, err := filepath.Abs(in) + if err != nil { + specLogger.Printf("warning: could not resolve current working directory: %v", err) + return in + } + return anchored +} + +func repairURI(in string) (*url.URL, string) { + u, _ := url.Parse("") + debugLog("repaired URI: original: %q, repaired: %q", in, "") + return u, "" +} + +func fixWindowsURI(u *url.URL, in string) { +} diff --git a/vendor/github.com/go-openapi/spec/normalizer_windows.go b/vendor/github.com/go-openapi/spec/normalizer_windows.go new file mode 100644 index 0000000..fe2d1ec --- /dev/null +++ b/vendor/github.com/go-openapi/spec/normalizer_windows.go @@ -0,0 +1,154 @@ +// -build windows + +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "net/url" + "os" + "path" + "path/filepath" + "strings" +) + +// absPath makes a file path absolute and compatible with a URI path component +// +// The parameter must be a path, not an URI. +func absPath(in string) string { + // NOTE(windows): filepath.Abs exhibits a special behavior on windows for empty paths. + // See https://github.com/golang/go/issues/24441 + if in == "" { + in = "." + } + + anchored, err := filepath.Abs(in) + if err != nil { + specLogger.Printf("warning: could not resolve current working directory: %v", err) + return in + } + + pth := strings.ReplaceAll(strings.ToLower(anchored), `\`, `/`) + if !strings.HasPrefix(pth, "/") { + pth = "/" + pth + } + + return path.Clean(pth) +} + +// repairURI tolerates invalid file URIs with common typos +// such as 'file://E:\folder\file', that break the regular URL parser. +// +// Adopting the same defaults as for unixes (e.g. return an empty path) would +// result into a counter-intuitive result for that case (e.g. E:\folder\file is +// eventually resolved as the current directory). The repair will detect the missing "/". +// +// Note that this only works for the file scheme. +func repairURI(in string) (*url.URL, string) { + const prefix = fileScheme + "://" + if !strings.HasPrefix(in, prefix) { + // giving up: resolve to empty path + u, _ := url.Parse("") + + return u, "" + } + + // attempt the repair, stripping the scheme should be sufficient + u, _ := url.Parse(strings.TrimPrefix(in, prefix)) + debugLog("repaired URI: original: %q, repaired: %q", in, u.String()) + + return u, u.String() +} + +// fixWindowsURI tolerates an absolute file path on windows such as C:\Base\File.yaml or \\host\share\Base\File.yaml +// and makes it a canonical URI: file:///c:/base/file.yaml +// +// Catch 22 notes for Windows: +// +// * There may be a drive letter on windows (it is lower-cased) +// * There may be a share UNC, e.g. \\server\folder\data.xml +// * Paths are case insensitive +// * Paths may already contain slashes +// * Paths must be slashed +// +// NOTE: there is no escaping. "/" may be valid separators just like "\". +// We don't use ToSlash() (which escapes everything) because windows now also +// tolerates the use of "/". Hence, both C:\File.yaml and C:/File.yaml will work. +func fixWindowsURI(u *url.URL, in string) { + drive := filepath.VolumeName(in) + + if len(drive) > 0 { + if len(u.Scheme) == 1 && strings.EqualFold(u.Scheme, drive[:1]) { // a path with a drive letter + u.Scheme = fileScheme + u.Host = "" + u.Path = strings.Join([]string{drive, u.Opaque, u.Path}, `/`) // reconstruct the full path component (no fragment, no query) + } else if u.Host == "" && strings.HasPrefix(u.Path, drive) { // a path with a \\host volume + // NOTE: the special host@port syntax for UNC is not supported (yet) + u.Scheme = fileScheme + + // this is a modified version of filepath.Dir() to apply on the VolumeName itself + i := len(drive) - 1 + for i >= 0 && !os.IsPathSeparator(drive[i]) { + i-- + } + host := drive[:i] // \\host\share => host + + u.Path = strings.TrimPrefix(u.Path, host) + u.Host = strings.TrimPrefix(host, `\\`) + } + + u.Opaque = "" + u.Path = strings.ReplaceAll(strings.ToLower(u.Path), `\`, `/`) + + // ensure we form an absolute path + if !strings.HasPrefix(u.Path, "/") { + u.Path = "/" + u.Path + } + + u.Path = path.Clean(u.Path) + + return + } + + if u.Scheme == fileScheme { + // Handle dodgy cases for file://{...} URIs on windows. + // A canonical URI should always be followed by an absolute path. + // + // Examples: + // * file:///folder/file => valid, unchanged + // * file:///c:\folder\file => slashed + // * file:///./folder/file => valid, cleaned to remove the dot + // * file:///.\folder\file => remapped to cwd + // * file:///. => dodgy, remapped to / (consistent with the behavior on unix) + // * file:///.. => dodgy, remapped to / (consistent with the behavior on unix) + if (!path.IsAbs(u.Path) && !filepath.IsAbs(u.Path)) || (strings.HasPrefix(u.Path, `/.`) && strings.Contains(u.Path, `\`)) { + // ensure we form an absolute path + u.Path, _ = filepath.Abs(strings.TrimLeft(u.Path, `/`)) + if !strings.HasPrefix(u.Path, "/") { + u.Path = "/" + u.Path + } + } + u.Path = strings.ToLower(u.Path) + } + + // NOTE: lower case normalization does not propagate to inner resources, + // generated when rebasing: when joining a relative URI with a file to an absolute base, + // only the base is currently lower-cased. + // + // For now, we assume this is good enough for most use cases + // and try not to generate too many differences + // between the output produced on different platforms. + u.Path = path.Clean(strings.ReplaceAll(u.Path, `\`, `/`)) +} diff --git a/vendor/github.com/go-openapi/spec/operation.go b/vendor/github.com/go-openapi/spec/operation.go new file mode 100644 index 0000000..995ce6a --- /dev/null +++ b/vendor/github.com/go-openapi/spec/operation.go @@ -0,0 +1,397 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "bytes" + "encoding/gob" + "encoding/json" + "sort" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +func init() { + gob.Register(map[string]interface{}{}) + gob.Register([]interface{}{}) +} + +// OperationProps describes an operation +// +// NOTES: +// - schemes, when present must be from [http, https, ws, wss]: see validate +// - Security is handled as a special case: see MarshalJSON function +type OperationProps struct { + Description string `json:"description,omitempty"` + Consumes []string `json:"consumes,omitempty"` + Produces []string `json:"produces,omitempty"` + Schemes []string `json:"schemes,omitempty"` + Tags []string `json:"tags,omitempty"` + Summary string `json:"summary,omitempty"` + ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` + ID string `json:"operationId,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Security []map[string][]string `json:"security,omitempty"` + Parameters []Parameter `json:"parameters,omitempty"` + Responses *Responses `json:"responses,omitempty"` +} + +// MarshalJSON takes care of serializing operation properties to JSON +// +// We use a custom marhaller here to handle a special cases related to +// the Security field. We need to preserve zero length slice +// while omitting the field when the value is nil/unset. +func (op OperationProps) MarshalJSON() ([]byte, error) { + type Alias OperationProps + if op.Security == nil { + return json.Marshal(&struct { + Security []map[string][]string `json:"security,omitempty"` + *Alias + }{ + Security: op.Security, + Alias: (*Alias)(&op), + }) + } + return json.Marshal(&struct { + Security []map[string][]string `json:"security"` + *Alias + }{ + Security: op.Security, + Alias: (*Alias)(&op), + }) +} + +// Operation describes a single API operation on a path. +// +// For more information: http://goo.gl/8us55a#operationObject +type Operation struct { + VendorExtensible + OperationProps +} + +// SuccessResponse gets a success response model +func (o *Operation) SuccessResponse() (*Response, int, bool) { + if o.Responses == nil { + return nil, 0, false + } + + responseCodes := make([]int, 0, len(o.Responses.StatusCodeResponses)) + for k := range o.Responses.StatusCodeResponses { + if k >= 200 && k < 300 { + responseCodes = append(responseCodes, k) + } + } + if len(responseCodes) > 0 { + sort.Ints(responseCodes) + v := o.Responses.StatusCodeResponses[responseCodes[0]] + return &v, responseCodes[0], true + } + + return o.Responses.Default, 0, false +} + +// JSONLookup look up a value by the json property name +func (o Operation) JSONLookup(token string) (interface{}, error) { + if ex, ok := o.Extensions[token]; ok { + return &ex, nil + } + r, _, err := jsonpointer.GetForToken(o.OperationProps, token) + return r, err +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (o *Operation) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &o.OperationProps); err != nil { + return err + } + return json.Unmarshal(data, &o.VendorExtensible) +} + +// MarshalJSON converts this items object to JSON +func (o Operation) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(o.OperationProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(o.VendorExtensible) + if err != nil { + return nil, err + } + concated := swag.ConcatJSON(b1, b2) + return concated, nil +} + +// NewOperation creates a new operation instance. +// It expects an ID as parameter but not passing an ID is also valid. +func NewOperation(id string) *Operation { + op := new(Operation) + op.ID = id + return op +} + +// WithID sets the ID property on this operation, allows for chaining. +func (o *Operation) WithID(id string) *Operation { + o.ID = id + return o +} + +// WithDescription sets the description on this operation, allows for chaining +func (o *Operation) WithDescription(description string) *Operation { + o.Description = description + return o +} + +// WithSummary sets the summary on this operation, allows for chaining +func (o *Operation) WithSummary(summary string) *Operation { + o.Summary = summary + return o +} + +// WithExternalDocs sets/removes the external docs for/from this operation. +// When you pass empty strings as params the external documents will be removed. +// When you pass non-empty string as one value then those values will be used on the external docs object. +// So when you pass a non-empty description, you should also pass the url and vice versa. +func (o *Operation) WithExternalDocs(description, url string) *Operation { + if description == "" && url == "" { + o.ExternalDocs = nil + return o + } + + if o.ExternalDocs == nil { + o.ExternalDocs = &ExternalDocumentation{} + } + o.ExternalDocs.Description = description + o.ExternalDocs.URL = url + return o +} + +// Deprecate marks the operation as deprecated +func (o *Operation) Deprecate() *Operation { + o.Deprecated = true + return o +} + +// Undeprecate marks the operation as not deprected +func (o *Operation) Undeprecate() *Operation { + o.Deprecated = false + return o +} + +// WithConsumes adds media types for incoming body values +func (o *Operation) WithConsumes(mediaTypes ...string) *Operation { + o.Consumes = append(o.Consumes, mediaTypes...) + return o +} + +// WithProduces adds media types for outgoing body values +func (o *Operation) WithProduces(mediaTypes ...string) *Operation { + o.Produces = append(o.Produces, mediaTypes...) + return o +} + +// WithTags adds tags for this operation +func (o *Operation) WithTags(tags ...string) *Operation { + o.Tags = append(o.Tags, tags...) + return o +} + +// AddParam adds a parameter to this operation, when a parameter for that location +// and with that name already exists it will be replaced +func (o *Operation) AddParam(param *Parameter) *Operation { + if param == nil { + return o + } + + for i, p := range o.Parameters { + if p.Name == param.Name && p.In == param.In { + params := append(o.Parameters[:i], *param) + params = append(params, o.Parameters[i+1:]...) + o.Parameters = params + return o + } + } + + o.Parameters = append(o.Parameters, *param) + return o +} + +// RemoveParam removes a parameter from the operation +func (o *Operation) RemoveParam(name, in string) *Operation { + for i, p := range o.Parameters { + if p.Name == name && p.In == in { + o.Parameters = append(o.Parameters[:i], o.Parameters[i+1:]...) + return o + } + } + return o +} + +// SecuredWith adds a security scope to this operation. +func (o *Operation) SecuredWith(name string, scopes ...string) *Operation { + o.Security = append(o.Security, map[string][]string{name: scopes}) + return o +} + +// WithDefaultResponse adds a default response to the operation. +// Passing a nil value will remove the response +func (o *Operation) WithDefaultResponse(response *Response) *Operation { + return o.RespondsWith(0, response) +} + +// RespondsWith adds a status code response to the operation. +// When the code is 0 the value of the response will be used as default response value. +// When the value of the response is nil it will be removed from the operation +func (o *Operation) RespondsWith(code int, response *Response) *Operation { + if o.Responses == nil { + o.Responses = new(Responses) + } + if code == 0 { + o.Responses.Default = response + return o + } + if response == nil { + delete(o.Responses.StatusCodeResponses, code) + return o + } + if o.Responses.StatusCodeResponses == nil { + o.Responses.StatusCodeResponses = make(map[int]Response) + } + o.Responses.StatusCodeResponses[code] = *response + return o +} + +type opsAlias OperationProps + +type gobAlias struct { + Security []map[string]struct { + List []string + Pad bool + } + Alias *opsAlias + SecurityIsEmpty bool +} + +// GobEncode provides a safe gob encoder for Operation, including empty security requirements +func (o Operation) GobEncode() ([]byte, error) { + raw := struct { + Ext VendorExtensible + Props OperationProps + }{ + Ext: o.VendorExtensible, + Props: o.OperationProps, + } + var b bytes.Buffer + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err +} + +// GobDecode provides a safe gob decoder for Operation, including empty security requirements +func (o *Operation) GobDecode(b []byte) error { + var raw struct { + Ext VendorExtensible + Props OperationProps + } + + buf := bytes.NewBuffer(b) + err := gob.NewDecoder(buf).Decode(&raw) + if err != nil { + return err + } + o.VendorExtensible = raw.Ext + o.OperationProps = raw.Props + return nil +} + +// GobEncode provides a safe gob encoder for Operation, including empty security requirements +func (op OperationProps) GobEncode() ([]byte, error) { + raw := gobAlias{ + Alias: (*opsAlias)(&op), + } + + var b bytes.Buffer + if op.Security == nil { + // nil security requirement + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err + } + + if len(op.Security) == 0 { + // empty, but non-nil security requirement + raw.SecurityIsEmpty = true + raw.Alias.Security = nil + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err + } + + raw.Security = make([]map[string]struct { + List []string + Pad bool + }, 0, len(op.Security)) + for _, req := range op.Security { + v := make(map[string]struct { + List []string + Pad bool + }, len(req)) + for k, val := range req { + v[k] = struct { + List []string + Pad bool + }{ + List: val, + } + } + raw.Security = append(raw.Security, v) + } + + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err +} + +// GobDecode provides a safe gob decoder for Operation, including empty security requirements +func (op *OperationProps) GobDecode(b []byte) error { + var raw gobAlias + + buf := bytes.NewBuffer(b) + err := gob.NewDecoder(buf).Decode(&raw) + if err != nil { + return err + } + if raw.Alias == nil { + return nil + } + + switch { + case raw.SecurityIsEmpty: + // empty, but non-nil security requirement + raw.Alias.Security = []map[string][]string{} + case len(raw.Alias.Security) == 0: + // nil security requirement + raw.Alias.Security = nil + default: + raw.Alias.Security = make([]map[string][]string, 0, len(raw.Security)) + for _, req := range raw.Security { + v := make(map[string][]string, len(req)) + for k, val := range req { + v[k] = make([]string, 0, len(val.List)) + v[k] = append(v[k], val.List...) + } + raw.Alias.Security = append(raw.Alias.Security, v) + } + } + + *op = *(*OperationProps)(raw.Alias) + return nil +} diff --git a/vendor/github.com/go-openapi/spec/parameter.go b/vendor/github.com/go-openapi/spec/parameter.go new file mode 100644 index 0000000..2b2b89b --- /dev/null +++ b/vendor/github.com/go-openapi/spec/parameter.go @@ -0,0 +1,326 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "strings" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// QueryParam creates a query parameter +func QueryParam(name string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "query"}} +} + +// HeaderParam creates a header parameter, this is always required by default +func HeaderParam(name string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "header", Required: true}} +} + +// PathParam creates a path parameter, this is always required +func PathParam(name string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "path", Required: true}} +} + +// BodyParam creates a body parameter +func BodyParam(name string, schema *Schema) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}} +} + +// FormDataParam creates a body parameter +func FormDataParam(name string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}} +} + +// FileParam creates a body parameter +func FileParam(name string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}, + SimpleSchema: SimpleSchema{Type: "file"}} +} + +// SimpleArrayParam creates a param for a simple array (string, int, date etc) +func SimpleArrayParam(name, tpe, fmt string) *Parameter { + return &Parameter{ParamProps: ParamProps{Name: name}, + SimpleSchema: SimpleSchema{Type: jsonArray, CollectionFormat: "csv", + Items: &Items{SimpleSchema: SimpleSchema{Type: tpe, Format: fmt}}}} +} + +// ParamRef creates a parameter that's a json reference +func ParamRef(uri string) *Parameter { + p := new(Parameter) + p.Ref = MustCreateRef(uri) + return p +} + +// ParamProps describes the specific attributes of an operation parameter +// +// NOTE: +// - Schema is defined when "in" == "body": see validate +// - AllowEmptyValue is allowed where "in" == "query" || "formData" +type ParamProps struct { + Description string `json:"description,omitempty"` + Name string `json:"name,omitempty"` + In string `json:"in,omitempty"` + Required bool `json:"required,omitempty"` + Schema *Schema `json:"schema,omitempty"` + AllowEmptyValue bool `json:"allowEmptyValue,omitempty"` +} + +// Parameter a unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). +// +// There are five possible parameter types. +// * Path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part +// of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, +// the path parameter is `itemId`. +// * Query - Parameters that are appended to the URL. For example, in `/items?id=###`, the query parameter is `id`. +// * Header - Custom headers that are expected as part of the request. +// * Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be +// _one_ body parameter. The name of the body parameter has no effect on the parameter itself and is used for +// documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist +// together for the same operation. +// * Form - Used to describe the payload of an HTTP request when either `application/x-www-form-urlencoded` or +// `multipart/form-data` are used as the content type of the request (in Swagger's definition, +// the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used +// to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be +// declared together with a body parameter for the same operation. Form parameters have a different format based on +// the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4). +// * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. +// For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple +// parameters that are being transferred. +// * `multipart/form-data` - each parameter takes a section in the payload with an internal header. +// For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is +// `submit-name`. This type of form parameters is more commonly used for file transfers. +// +// For more information: http://goo.gl/8us55a#parameterObject +type Parameter struct { + Refable + CommonValidations + SimpleSchema + VendorExtensible + ParamProps +} + +// JSONLookup look up a value by the json property name +func (p Parameter) JSONLookup(token string) (interface{}, error) { + if ex, ok := p.Extensions[token]; ok { + return &ex, nil + } + if token == jsonRef { + return &p.Ref, nil + } + + r, _, err := jsonpointer.GetForToken(p.CommonValidations, token) + if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { + return nil, err + } + if r != nil { + return r, nil + } + r, _, err = jsonpointer.GetForToken(p.SimpleSchema, token) + if err != nil && !strings.HasPrefix(err.Error(), "object has no field") { + return nil, err + } + if r != nil { + return r, nil + } + r, _, err = jsonpointer.GetForToken(p.ParamProps, token) + return r, err +} + +// WithDescription a fluent builder method for the description of the parameter +func (p *Parameter) WithDescription(description string) *Parameter { + p.Description = description + return p +} + +// Named a fluent builder method to override the name of the parameter +func (p *Parameter) Named(name string) *Parameter { + p.Name = name + return p +} + +// WithLocation a fluent builder method to override the location of the parameter +func (p *Parameter) WithLocation(in string) *Parameter { + p.In = in + return p +} + +// Typed a fluent builder method for the type of the parameter value +func (p *Parameter) Typed(tpe, format string) *Parameter { + p.Type = tpe + p.Format = format + return p +} + +// CollectionOf a fluent builder method for an array parameter +func (p *Parameter) CollectionOf(items *Items, format string) *Parameter { + p.Type = jsonArray + p.Items = items + p.CollectionFormat = format + return p +} + +// WithDefault sets the default value on this parameter +func (p *Parameter) WithDefault(defaultValue interface{}) *Parameter { + p.AsOptional() // with default implies optional + p.Default = defaultValue + return p +} + +// AllowsEmptyValues flags this parameter as being ok with empty values +func (p *Parameter) AllowsEmptyValues() *Parameter { + p.AllowEmptyValue = true + return p +} + +// NoEmptyValues flags this parameter as not liking empty values +func (p *Parameter) NoEmptyValues() *Parameter { + p.AllowEmptyValue = false + return p +} + +// AsOptional flags this parameter as optional +func (p *Parameter) AsOptional() *Parameter { + p.Required = false + return p +} + +// AsRequired flags this parameter as required +func (p *Parameter) AsRequired() *Parameter { + if p.Default != nil { // with a default required makes no sense + return p + } + p.Required = true + return p +} + +// WithMaxLength sets a max length value +func (p *Parameter) WithMaxLength(max int64) *Parameter { + p.MaxLength = &max + return p +} + +// WithMinLength sets a min length value +func (p *Parameter) WithMinLength(min int64) *Parameter { + p.MinLength = &min + return p +} + +// WithPattern sets a pattern value +func (p *Parameter) WithPattern(pattern string) *Parameter { + p.Pattern = pattern + return p +} + +// WithMultipleOf sets a multiple of value +func (p *Parameter) WithMultipleOf(number float64) *Parameter { + p.MultipleOf = &number + return p +} + +// WithMaximum sets a maximum number value +func (p *Parameter) WithMaximum(max float64, exclusive bool) *Parameter { + p.Maximum = &max + p.ExclusiveMaximum = exclusive + return p +} + +// WithMinimum sets a minimum number value +func (p *Parameter) WithMinimum(min float64, exclusive bool) *Parameter { + p.Minimum = &min + p.ExclusiveMinimum = exclusive + return p +} + +// WithEnum sets a the enum values (replace) +func (p *Parameter) WithEnum(values ...interface{}) *Parameter { + p.Enum = append([]interface{}{}, values...) + return p +} + +// WithMaxItems sets the max items +func (p *Parameter) WithMaxItems(size int64) *Parameter { + p.MaxItems = &size + return p +} + +// WithMinItems sets the min items +func (p *Parameter) WithMinItems(size int64) *Parameter { + p.MinItems = &size + return p +} + +// UniqueValues dictates that this array can only have unique items +func (p *Parameter) UniqueValues() *Parameter { + p.UniqueItems = true + return p +} + +// AllowDuplicates this array can have duplicates +func (p *Parameter) AllowDuplicates() *Parameter { + p.UniqueItems = false + return p +} + +// WithValidations is a fluent method to set parameter validations +func (p *Parameter) WithValidations(val CommonValidations) *Parameter { + p.SetValidations(SchemaValidations{CommonValidations: val}) + return p +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (p *Parameter) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &p.CommonValidations); err != nil { + return err + } + if err := json.Unmarshal(data, &p.Refable); err != nil { + return err + } + if err := json.Unmarshal(data, &p.SimpleSchema); err != nil { + return err + } + if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { + return err + } + return json.Unmarshal(data, &p.ParamProps) +} + +// MarshalJSON converts this items object to JSON +func (p Parameter) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(p.CommonValidations) + if err != nil { + return nil, err + } + b2, err := json.Marshal(p.SimpleSchema) + if err != nil { + return nil, err + } + b3, err := json.Marshal(p.Refable) + if err != nil { + return nil, err + } + b4, err := json.Marshal(p.VendorExtensible) + if err != nil { + return nil, err + } + b5, err := json.Marshal(p.ParamProps) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b3, b1, b2, b4, b5), nil +} diff --git a/vendor/github.com/go-openapi/spec/path_item.go b/vendor/github.com/go-openapi/spec/path_item.go new file mode 100644 index 0000000..68fc8e9 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/path_item.go @@ -0,0 +1,87 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// PathItemProps the path item specific properties +type PathItemProps struct { + Get *Operation `json:"get,omitempty"` + Put *Operation `json:"put,omitempty"` + Post *Operation `json:"post,omitempty"` + Delete *Operation `json:"delete,omitempty"` + Options *Operation `json:"options,omitempty"` + Head *Operation `json:"head,omitempty"` + Patch *Operation `json:"patch,omitempty"` + Parameters []Parameter `json:"parameters,omitempty"` +} + +// PathItem describes the operations available on a single path. +// A Path Item may be empty, due to [ACL constraints](http://goo.gl/8us55a#securityFiltering). +// The path itself is still exposed to the documentation viewer but they will +// not know which operations and parameters are available. +// +// For more information: http://goo.gl/8us55a#pathItemObject +type PathItem struct { + Refable + VendorExtensible + PathItemProps +} + +// JSONLookup look up a value by the json property name +func (p PathItem) JSONLookup(token string) (interface{}, error) { + if ex, ok := p.Extensions[token]; ok { + return &ex, nil + } + if token == jsonRef { + return &p.Ref, nil + } + r, _, err := jsonpointer.GetForToken(p.PathItemProps, token) + return r, err +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (p *PathItem) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &p.Refable); err != nil { + return err + } + if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { + return err + } + return json.Unmarshal(data, &p.PathItemProps) +} + +// MarshalJSON converts this items object to JSON +func (p PathItem) MarshalJSON() ([]byte, error) { + b3, err := json.Marshal(p.Refable) + if err != nil { + return nil, err + } + b4, err := json.Marshal(p.VendorExtensible) + if err != nil { + return nil, err + } + b5, err := json.Marshal(p.PathItemProps) + if err != nil { + return nil, err + } + concated := swag.ConcatJSON(b3, b4, b5) + return concated, nil +} diff --git a/vendor/github.com/go-openapi/spec/paths.go b/vendor/github.com/go-openapi/spec/paths.go new file mode 100644 index 0000000..9dc82a2 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/paths.go @@ -0,0 +1,97 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "fmt" + "strings" + + "github.com/go-openapi/swag" +) + +// Paths holds the relative paths to the individual endpoints. +// The path is appended to the [`basePath`](http://goo.gl/8us55a#swaggerBasePath) in order +// to construct the full URL. +// The Paths may be empty, due to [ACL constraints](http://goo.gl/8us55a#securityFiltering). +// +// For more information: http://goo.gl/8us55a#pathsObject +type Paths struct { + VendorExtensible + Paths map[string]PathItem `json:"-"` // custom serializer to flatten this, each entry must start with "/" +} + +// JSONLookup look up a value by the json property name +func (p Paths) JSONLookup(token string) (interface{}, error) { + if pi, ok := p.Paths[token]; ok { + return &pi, nil + } + if ex, ok := p.Extensions[token]; ok { + return &ex, nil + } + return nil, fmt.Errorf("object has no field %q", token) +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (p *Paths) UnmarshalJSON(data []byte) error { + var res map[string]json.RawMessage + if err := json.Unmarshal(data, &res); err != nil { + return err + } + for k, v := range res { + if strings.HasPrefix(strings.ToLower(k), "x-") { + if p.Extensions == nil { + p.Extensions = make(map[string]interface{}) + } + var d interface{} + if err := json.Unmarshal(v, &d); err != nil { + return err + } + p.Extensions[k] = d + } + if strings.HasPrefix(k, "/") { + if p.Paths == nil { + p.Paths = make(map[string]PathItem) + } + var pi PathItem + if err := json.Unmarshal(v, &pi); err != nil { + return err + } + p.Paths[k] = pi + } + } + return nil +} + +// MarshalJSON converts this items object to JSON +func (p Paths) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(p.VendorExtensible) + if err != nil { + return nil, err + } + + pths := make(map[string]PathItem) + for k, v := range p.Paths { + if strings.HasPrefix(k, "/") { + pths[k] = v + } + } + b2, err := json.Marshal(pths) + if err != nil { + return nil, err + } + concated := swag.ConcatJSON(b1, b2) + return concated, nil +} diff --git a/vendor/github.com/go-openapi/spec/properties.go b/vendor/github.com/go-openapi/spec/properties.go new file mode 100644 index 0000000..2af1378 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/properties.go @@ -0,0 +1,91 @@ +package spec + +import ( + "bytes" + "encoding/json" + "reflect" + "sort" +) + +// OrderSchemaItem holds a named schema (e.g. from a property of an object) +type OrderSchemaItem struct { + Name string + Schema +} + +// OrderSchemaItems is a sortable slice of named schemas. +// The ordering is defined by the x-order schema extension. +type OrderSchemaItems []OrderSchemaItem + +// MarshalJSON produces a json object with keys defined by the name schemas +// of the OrderSchemaItems slice, keeping the original order of the slice. +func (items OrderSchemaItems) MarshalJSON() ([]byte, error) { + buf := bytes.NewBuffer(nil) + buf.WriteString("{") + for i := range items { + if i > 0 { + buf.WriteString(",") + } + buf.WriteString("\"") + buf.WriteString(items[i].Name) + buf.WriteString("\":") + bs, err := json.Marshal(&items[i].Schema) + if err != nil { + return nil, err + } + buf.Write(bs) + } + buf.WriteString("}") + return buf.Bytes(), nil +} + +func (items OrderSchemaItems) Len() int { return len(items) } +func (items OrderSchemaItems) Swap(i, j int) { items[i], items[j] = items[j], items[i] } +func (items OrderSchemaItems) Less(i, j int) (ret bool) { + ii, oki := items[i].Extensions.GetString("x-order") + ij, okj := items[j].Extensions.GetString("x-order") + if oki { + if okj { + defer func() { + if err := recover(); err != nil { + defer func() { + if err = recover(); err != nil { + ret = items[i].Name < items[j].Name + } + }() + ret = reflect.ValueOf(ii).String() < reflect.ValueOf(ij).String() + } + }() + return reflect.ValueOf(ii).Int() < reflect.ValueOf(ij).Int() + } + return true + } else if okj { + return false + } + return items[i].Name < items[j].Name +} + +// SchemaProperties is a map representing the properties of a Schema object. +// It knows how to transform its keys into an ordered slice. +type SchemaProperties map[string]Schema + +// ToOrderedSchemaItems transforms the map of properties into a sortable slice +func (properties SchemaProperties) ToOrderedSchemaItems() OrderSchemaItems { + items := make(OrderSchemaItems, 0, len(properties)) + for k, v := range properties { + items = append(items, OrderSchemaItem{ + Name: k, + Schema: v, + }) + } + sort.Sort(items) + return items +} + +// MarshalJSON produces properties as json, keeping their order. +func (properties SchemaProperties) MarshalJSON() ([]byte, error) { + if properties == nil { + return []byte("null"), nil + } + return json.Marshal(properties.ToOrderedSchemaItems()) +} diff --git a/vendor/github.com/go-openapi/spec/ref.go b/vendor/github.com/go-openapi/spec/ref.go new file mode 100644 index 0000000..b0ef9bd --- /dev/null +++ b/vendor/github.com/go-openapi/spec/ref.go @@ -0,0 +1,193 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "bytes" + "encoding/gob" + "encoding/json" + "net/http" + "os" + "path/filepath" + + "github.com/go-openapi/jsonreference" +) + +// Refable is a struct for things that accept a $ref property +type Refable struct { + Ref Ref +} + +// MarshalJSON marshals the ref to json +func (r Refable) MarshalJSON() ([]byte, error) { + return r.Ref.MarshalJSON() +} + +// UnmarshalJSON unmarshalss the ref from json +func (r *Refable) UnmarshalJSON(d []byte) error { + return json.Unmarshal(d, &r.Ref) +} + +// Ref represents a json reference that is potentially resolved +type Ref struct { + jsonreference.Ref +} + +// RemoteURI gets the remote uri part of the ref +func (r *Ref) RemoteURI() string { + if r.String() == "" { + return "" + } + + u := *r.GetURL() + u.Fragment = "" + return u.String() +} + +// IsValidURI returns true when the url the ref points to can be found +func (r *Ref) IsValidURI(basepaths ...string) bool { + if r.String() == "" { + return true + } + + v := r.RemoteURI() + if v == "" { + return true + } + + if r.HasFullURL { + //nolint:noctx,gosec + rr, err := http.Get(v) + if err != nil { + return false + } + defer rr.Body.Close() + + return rr.StatusCode/100 == 2 + } + + if !(r.HasFileScheme || r.HasFullFilePath || r.HasURLPathOnly) { + return false + } + + // check for local file + pth := v + if r.HasURLPathOnly { + base := "." + if len(basepaths) > 0 { + base = filepath.Dir(filepath.Join(basepaths...)) + } + p, e := filepath.Abs(filepath.ToSlash(filepath.Join(base, pth))) + if e != nil { + return false + } + pth = p + } + + fi, err := os.Stat(filepath.ToSlash(pth)) + if err != nil { + return false + } + + return !fi.IsDir() +} + +// Inherits creates a new reference from a parent and a child +// If the child cannot inherit from the parent, an error is returned +func (r *Ref) Inherits(child Ref) (*Ref, error) { + ref, err := r.Ref.Inherits(child.Ref) + if err != nil { + return nil, err + } + return &Ref{Ref: *ref}, nil +} + +// NewRef creates a new instance of a ref object +// returns an error when the reference uri is an invalid uri +func NewRef(refURI string) (Ref, error) { + ref, err := jsonreference.New(refURI) + if err != nil { + return Ref{}, err + } + return Ref{Ref: ref}, nil +} + +// MustCreateRef creates a ref object but panics when refURI is invalid. +// Use the NewRef method for a version that returns an error. +func MustCreateRef(refURI string) Ref { + return Ref{Ref: jsonreference.MustCreateRef(refURI)} +} + +// MarshalJSON marshals this ref into a JSON object +func (r Ref) MarshalJSON() ([]byte, error) { + str := r.String() + if str == "" { + if r.IsRoot() { + return []byte(`{"$ref":""}`), nil + } + return []byte("{}"), nil + } + v := map[string]interface{}{"$ref": str} + return json.Marshal(v) +} + +// UnmarshalJSON unmarshals this ref from a JSON object +func (r *Ref) UnmarshalJSON(d []byte) error { + var v map[string]interface{} + if err := json.Unmarshal(d, &v); err != nil { + return err + } + return r.fromMap(v) +} + +// GobEncode provides a safe gob encoder for Ref +func (r Ref) GobEncode() ([]byte, error) { + var b bytes.Buffer + raw, err := r.MarshalJSON() + if err != nil { + return nil, err + } + err = gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err +} + +// GobDecode provides a safe gob decoder for Ref +func (r *Ref) GobDecode(b []byte) error { + var raw []byte + buf := bytes.NewBuffer(b) + err := gob.NewDecoder(buf).Decode(&raw) + if err != nil { + return err + } + return json.Unmarshal(raw, r) +} + +func (r *Ref) fromMap(v map[string]interface{}) error { + if v == nil { + return nil + } + + if vv, ok := v["$ref"]; ok { + if str, ok := vv.(string); ok { + ref, err := jsonreference.New(str) + if err != nil { + return err + } + *r = Ref{Ref: ref} + } + } + + return nil +} diff --git a/vendor/github.com/go-openapi/spec/resolver.go b/vendor/github.com/go-openapi/spec/resolver.go new file mode 100644 index 0000000..47d1ee1 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/resolver.go @@ -0,0 +1,127 @@ +package spec + +import ( + "fmt" + + "github.com/go-openapi/swag" +) + +func resolveAnyWithBase(root interface{}, ref *Ref, result interface{}, options *ExpandOptions) error { + options = optionsOrDefault(options) + resolver := defaultSchemaLoader(root, options, nil, nil) + + if err := resolver.Resolve(ref, result, options.RelativeBase); err != nil { + return err + } + + return nil +} + +// ResolveRefWithBase resolves a reference against a context root with preservation of base path +func ResolveRefWithBase(root interface{}, ref *Ref, options *ExpandOptions) (*Schema, error) { + result := new(Schema) + + if err := resolveAnyWithBase(root, ref, result, options); err != nil { + return nil, err + } + + return result, nil +} + +// ResolveRef resolves a reference for a schema against a context root +// ref is guaranteed to be in root (no need to go to external files) +// +// ResolveRef is ONLY called from the code generation module +func ResolveRef(root interface{}, ref *Ref) (*Schema, error) { + res, _, err := ref.GetPointer().Get(root) + if err != nil { + return nil, err + } + + switch sch := res.(type) { + case Schema: + return &sch, nil + case *Schema: + return sch, nil + case map[string]interface{}: + newSch := new(Schema) + if err = swag.DynamicJSONToStruct(sch, newSch); err != nil { + return nil, err + } + return newSch, nil + default: + return nil, fmt.Errorf("type: %T: %w", sch, ErrUnknownTypeForReference) + } +} + +// ResolveParameterWithBase resolves a parameter reference against a context root and base path +func ResolveParameterWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Parameter, error) { + result := new(Parameter) + + if err := resolveAnyWithBase(root, &ref, result, options); err != nil { + return nil, err + } + + return result, nil +} + +// ResolveParameter resolves a parameter reference against a context root +func ResolveParameter(root interface{}, ref Ref) (*Parameter, error) { + return ResolveParameterWithBase(root, ref, nil) +} + +// ResolveResponseWithBase resolves response a reference against a context root and base path +func ResolveResponseWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Response, error) { + result := new(Response) + + err := resolveAnyWithBase(root, &ref, result, options) + if err != nil { + return nil, err + } + + return result, nil +} + +// ResolveResponse resolves response a reference against a context root +func ResolveResponse(root interface{}, ref Ref) (*Response, error) { + return ResolveResponseWithBase(root, ref, nil) +} + +// ResolvePathItemWithBase resolves response a path item against a context root and base path +func ResolvePathItemWithBase(root interface{}, ref Ref, options *ExpandOptions) (*PathItem, error) { + result := new(PathItem) + + if err := resolveAnyWithBase(root, &ref, result, options); err != nil { + return nil, err + } + + return result, nil +} + +// ResolvePathItem resolves response a path item against a context root and base path +// +// Deprecated: use ResolvePathItemWithBase instead +func ResolvePathItem(root interface{}, ref Ref, options *ExpandOptions) (*PathItem, error) { + return ResolvePathItemWithBase(root, ref, options) +} + +// ResolveItemsWithBase resolves parameter items reference against a context root and base path. +// +// NOTE: stricly speaking, this construct is not supported by Swagger 2.0. +// Similarly, $ref are forbidden in response headers. +func ResolveItemsWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Items, error) { + result := new(Items) + + if err := resolveAnyWithBase(root, &ref, result, options); err != nil { + return nil, err + } + + return result, nil +} + +// ResolveItems resolves parameter items reference against a context root and base path. +// +// Deprecated: use ResolveItemsWithBase instead +func ResolveItems(root interface{}, ref Ref, options *ExpandOptions) (*Items, error) { + return ResolveItemsWithBase(root, ref, options) +} diff --git a/vendor/github.com/go-openapi/spec/response.go b/vendor/github.com/go-openapi/spec/response.go new file mode 100644 index 0000000..0340b60 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/response.go @@ -0,0 +1,152 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// ResponseProps properties specific to a response +type ResponseProps struct { + Description string `json:"description"` + Schema *Schema `json:"schema,omitempty"` + Headers map[string]Header `json:"headers,omitempty"` + Examples map[string]interface{} `json:"examples,omitempty"` +} + +// Response describes a single response from an API Operation. +// +// For more information: http://goo.gl/8us55a#responseObject +type Response struct { + Refable + ResponseProps + VendorExtensible +} + +// JSONLookup look up a value by the json property name +func (r Response) JSONLookup(token string) (interface{}, error) { + if ex, ok := r.Extensions[token]; ok { + return &ex, nil + } + if token == "$ref" { + return &r.Ref, nil + } + ptr, _, err := jsonpointer.GetForToken(r.ResponseProps, token) + return ptr, err +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (r *Response) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &r.ResponseProps); err != nil { + return err + } + if err := json.Unmarshal(data, &r.Refable); err != nil { + return err + } + return json.Unmarshal(data, &r.VendorExtensible) +} + +// MarshalJSON converts this items object to JSON +func (r Response) MarshalJSON() ([]byte, error) { + var ( + b1 []byte + err error + ) + + if r.Ref.String() == "" { + // when there is no $ref, empty description is rendered as an empty string + b1, err = json.Marshal(r.ResponseProps) + } else { + // when there is $ref inside the schema, description should be omitempty-ied + b1, err = json.Marshal(struct { + Description string `json:"description,omitempty"` + Schema *Schema `json:"schema,omitempty"` + Headers map[string]Header `json:"headers,omitempty"` + Examples map[string]interface{} `json:"examples,omitempty"` + }{ + Description: r.ResponseProps.Description, + Schema: r.ResponseProps.Schema, + Examples: r.ResponseProps.Examples, + }) + } + if err != nil { + return nil, err + } + + b2, err := json.Marshal(r.Refable) + if err != nil { + return nil, err + } + b3, err := json.Marshal(r.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2, b3), nil +} + +// NewResponse creates a new response instance +func NewResponse() *Response { + return new(Response) +} + +// ResponseRef creates a response as a json reference +func ResponseRef(url string) *Response { + resp := NewResponse() + resp.Ref = MustCreateRef(url) + return resp +} + +// WithDescription sets the description on this response, allows for chaining +func (r *Response) WithDescription(description string) *Response { + r.Description = description + return r +} + +// WithSchema sets the schema on this response, allows for chaining. +// Passing a nil argument removes the schema from this response +func (r *Response) WithSchema(schema *Schema) *Response { + r.Schema = schema + return r +} + +// AddHeader adds a header to this response +func (r *Response) AddHeader(name string, header *Header) *Response { + if header == nil { + return r.RemoveHeader(name) + } + if r.Headers == nil { + r.Headers = make(map[string]Header) + } + r.Headers[name] = *header + return r +} + +// RemoveHeader removes a header from this response +func (r *Response) RemoveHeader(name string) *Response { + delete(r.Headers, name) + return r +} + +// AddExample adds an example to this response +func (r *Response) AddExample(mediaType string, example interface{}) *Response { + if r.Examples == nil { + r.Examples = make(map[string]interface{}) + } + r.Examples[mediaType] = example + return r +} diff --git a/vendor/github.com/go-openapi/spec/responses.go b/vendor/github.com/go-openapi/spec/responses.go new file mode 100644 index 0000000..4efb6f8 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/responses.go @@ -0,0 +1,127 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "fmt" + "reflect" + "strconv" + + "github.com/go-openapi/swag" +) + +// Responses is a container for the expected responses of an operation. +// The container maps a HTTP response code to the expected response. +// It is not expected from the documentation to necessarily cover all possible HTTP response codes, +// since they may not be known in advance. However, it is expected from the documentation to cover +// a successful operation response and any known errors. +// +// The `default` can be used a default response object for all HTTP codes that are not covered +// individually by the specification. +// +// The `Responses Object` MUST contain at least one response code, and it SHOULD be the response +// for a successful operation call. +// +// For more information: http://goo.gl/8us55a#responsesObject +type Responses struct { + VendorExtensible + ResponsesProps +} + +// JSONLookup implements an interface to customize json pointer lookup +func (r Responses) JSONLookup(token string) (interface{}, error) { + if token == "default" { + return r.Default, nil + } + if ex, ok := r.Extensions[token]; ok { + return &ex, nil + } + if i, err := strconv.Atoi(token); err == nil { + if scr, ok := r.StatusCodeResponses[i]; ok { + return scr, nil + } + } + return nil, fmt.Errorf("object has no field %q", token) +} + +// UnmarshalJSON hydrates this items instance with the data from JSON +func (r *Responses) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &r.ResponsesProps); err != nil { + return err + } + if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { + return err + } + if reflect.DeepEqual(ResponsesProps{}, r.ResponsesProps) { + r.ResponsesProps = ResponsesProps{} + } + return nil +} + +// MarshalJSON converts this items object to JSON +func (r Responses) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(r.ResponsesProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(r.VendorExtensible) + if err != nil { + return nil, err + } + concated := swag.ConcatJSON(b1, b2) + return concated, nil +} + +// ResponsesProps describes all responses for an operation. +// It tells what is the default response and maps all responses with a +// HTTP status code. +type ResponsesProps struct { + Default *Response + StatusCodeResponses map[int]Response +} + +// MarshalJSON marshals responses as JSON +func (r ResponsesProps) MarshalJSON() ([]byte, error) { + toser := map[string]Response{} + if r.Default != nil { + toser["default"] = *r.Default + } + for k, v := range r.StatusCodeResponses { + toser[strconv.Itoa(k)] = v + } + return json.Marshal(toser) +} + +// UnmarshalJSON unmarshals responses from JSON +func (r *ResponsesProps) UnmarshalJSON(data []byte) error { + var res map[string]Response + if err := json.Unmarshal(data, &res); err != nil { + return nil + } + if v, ok := res["default"]; ok { + r.Default = &v + delete(res, "default") + } + for k, v := range res { + if nk, err := strconv.Atoi(k); err == nil { + if r.StatusCodeResponses == nil { + r.StatusCodeResponses = map[int]Response{} + } + r.StatusCodeResponses[nk] = v + } + } + return nil +} diff --git a/vendor/github.com/go-openapi/spec/schema.go b/vendor/github.com/go-openapi/spec/schema.go new file mode 100644 index 0000000..a8d0f73 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/schema.go @@ -0,0 +1,646 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "fmt" + "net/url" + "strings" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// BooleanProperty creates a boolean property +func BooleanProperty() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"boolean"}}} +} + +// BoolProperty creates a boolean property +func BoolProperty() *Schema { return BooleanProperty() } + +// StringProperty creates a string property +func StringProperty() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}}} +} + +// CharProperty creates a string property +func CharProperty() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}}} +} + +// Float64Property creates a float64/double property +func Float64Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"number"}, Format: "double"}} +} + +// Float32Property creates a float32/float property +func Float32Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"number"}, Format: "float"}} +} + +// Int8Property creates an int8 property +func Int8Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int8"}} +} + +// Int16Property creates an int16 property +func Int16Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int16"}} +} + +// Int32Property creates an int32 property +func Int32Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int32"}} +} + +// Int64Property creates an int64 property +func Int64Property() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"integer"}, Format: "int64"}} +} + +// StrFmtProperty creates a property for the named string format +func StrFmtProperty(format string) *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: format}} +} + +// DateProperty creates a date property +func DateProperty() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: "date"}} +} + +// DateTimeProperty creates a date time property +func DateTimeProperty() *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"string"}, Format: "date-time"}} +} + +// MapProperty creates a map property +func MapProperty(property *Schema) *Schema { + return &Schema{SchemaProps: SchemaProps{Type: []string{"object"}, + AdditionalProperties: &SchemaOrBool{Allows: true, Schema: property}}} +} + +// RefProperty creates a ref property +func RefProperty(name string) *Schema { + return &Schema{SchemaProps: SchemaProps{Ref: MustCreateRef(name)}} +} + +// RefSchema creates a ref property +func RefSchema(name string) *Schema { + return &Schema{SchemaProps: SchemaProps{Ref: MustCreateRef(name)}} +} + +// ArrayProperty creates an array property +func ArrayProperty(items *Schema) *Schema { + if items == nil { + return &Schema{SchemaProps: SchemaProps{Type: []string{"array"}}} + } + return &Schema{SchemaProps: SchemaProps{Items: &SchemaOrArray{Schema: items}, Type: []string{"array"}}} +} + +// ComposedSchema creates a schema with allOf +func ComposedSchema(schemas ...Schema) *Schema { + s := new(Schema) + s.AllOf = schemas + return s +} + +// SchemaURL represents a schema url +type SchemaURL string + +// MarshalJSON marshal this to JSON +func (r SchemaURL) MarshalJSON() ([]byte, error) { + if r == "" { + return []byte("{}"), nil + } + v := map[string]interface{}{"$schema": string(r)} + return json.Marshal(v) +} + +// UnmarshalJSON unmarshal this from JSON +func (r *SchemaURL) UnmarshalJSON(data []byte) error { + var v map[string]interface{} + if err := json.Unmarshal(data, &v); err != nil { + return err + } + return r.fromMap(v) +} + +func (r *SchemaURL) fromMap(v map[string]interface{}) error { + if v == nil { + return nil + } + if vv, ok := v["$schema"]; ok { + if str, ok := vv.(string); ok { + u, err := url.Parse(str) + if err != nil { + return err + } + + *r = SchemaURL(u.String()) + } + } + return nil +} + +// SchemaProps describes a JSON schema (draft 4) +type SchemaProps struct { + ID string `json:"id,omitempty"` + Ref Ref `json:"-"` + Schema SchemaURL `json:"-"` + Description string `json:"description,omitempty"` + Type StringOrArray `json:"type,omitempty"` + Nullable bool `json:"nullable,omitempty"` + Format string `json:"format,omitempty"` + Title string `json:"title,omitempty"` + Default interface{} `json:"default,omitempty"` + Maximum *float64 `json:"maximum,omitempty"` + ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` + Minimum *float64 `json:"minimum,omitempty"` + ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty"` + MaxLength *int64 `json:"maxLength,omitempty"` + MinLength *int64 `json:"minLength,omitempty"` + Pattern string `json:"pattern,omitempty"` + MaxItems *int64 `json:"maxItems,omitempty"` + MinItems *int64 `json:"minItems,omitempty"` + UniqueItems bool `json:"uniqueItems,omitempty"` + MultipleOf *float64 `json:"multipleOf,omitempty"` + Enum []interface{} `json:"enum,omitempty"` + MaxProperties *int64 `json:"maxProperties,omitempty"` + MinProperties *int64 `json:"minProperties,omitempty"` + Required []string `json:"required,omitempty"` + Items *SchemaOrArray `json:"items,omitempty"` + AllOf []Schema `json:"allOf,omitempty"` + OneOf []Schema `json:"oneOf,omitempty"` + AnyOf []Schema `json:"anyOf,omitempty"` + Not *Schema `json:"not,omitempty"` + Properties SchemaProperties `json:"properties,omitempty"` + AdditionalProperties *SchemaOrBool `json:"additionalProperties,omitempty"` + PatternProperties SchemaProperties `json:"patternProperties,omitempty"` + Dependencies Dependencies `json:"dependencies,omitempty"` + AdditionalItems *SchemaOrBool `json:"additionalItems,omitempty"` + Definitions Definitions `json:"definitions,omitempty"` +} + +// SwaggerSchemaProps are additional properties supported by swagger schemas, but not JSON-schema (draft 4) +type SwaggerSchemaProps struct { + Discriminator string `json:"discriminator,omitempty"` + ReadOnly bool `json:"readOnly,omitempty"` + XML *XMLObject `json:"xml,omitempty"` + ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` + Example interface{} `json:"example,omitempty"` +} + +// Schema the schema object allows the definition of input and output data types. +// These types can be objects, but also primitives and arrays. +// This object is based on the [JSON Schema Specification Draft 4](http://json-schema.org/) +// and uses a predefined subset of it. +// On top of this subset, there are extensions provided by this specification to allow for more complete documentation. +// +// For more information: http://goo.gl/8us55a#schemaObject +type Schema struct { + VendorExtensible + SchemaProps + SwaggerSchemaProps + ExtraProps map[string]interface{} `json:"-"` +} + +// JSONLookup implements an interface to customize json pointer lookup +func (s Schema) JSONLookup(token string) (interface{}, error) { + if ex, ok := s.Extensions[token]; ok { + return &ex, nil + } + + if ex, ok := s.ExtraProps[token]; ok { + return &ex, nil + } + + r, _, err := jsonpointer.GetForToken(s.SchemaProps, token) + if r != nil || (err != nil && !strings.HasPrefix(err.Error(), "object has no field")) { + return r, err + } + r, _, err = jsonpointer.GetForToken(s.SwaggerSchemaProps, token) + return r, err +} + +// WithID sets the id for this schema, allows for chaining +func (s *Schema) WithID(id string) *Schema { + s.ID = id + return s +} + +// WithTitle sets the title for this schema, allows for chaining +func (s *Schema) WithTitle(title string) *Schema { + s.Title = title + return s +} + +// WithDescription sets the description for this schema, allows for chaining +func (s *Schema) WithDescription(description string) *Schema { + s.Description = description + return s +} + +// WithProperties sets the properties for this schema +func (s *Schema) WithProperties(schemas map[string]Schema) *Schema { + s.Properties = schemas + return s +} + +// SetProperty sets a property on this schema +func (s *Schema) SetProperty(name string, schema Schema) *Schema { + if s.Properties == nil { + s.Properties = make(map[string]Schema) + } + s.Properties[name] = schema + return s +} + +// WithAllOf sets the all of property +func (s *Schema) WithAllOf(schemas ...Schema) *Schema { + s.AllOf = schemas + return s +} + +// WithMaxProperties sets the max number of properties an object can have +func (s *Schema) WithMaxProperties(max int64) *Schema { + s.MaxProperties = &max + return s +} + +// WithMinProperties sets the min number of properties an object must have +func (s *Schema) WithMinProperties(min int64) *Schema { + s.MinProperties = &min + return s +} + +// Typed sets the type of this schema for a single value item +func (s *Schema) Typed(tpe, format string) *Schema { + s.Type = []string{tpe} + s.Format = format + return s +} + +// AddType adds a type with potential format to the types for this schema +func (s *Schema) AddType(tpe, format string) *Schema { + s.Type = append(s.Type, tpe) + if format != "" { + s.Format = format + } + return s +} + +// AsNullable flags this schema as nullable. +func (s *Schema) AsNullable() *Schema { + s.Nullable = true + return s +} + +// CollectionOf a fluent builder method for an array parameter +func (s *Schema) CollectionOf(items Schema) *Schema { + s.Type = []string{jsonArray} + s.Items = &SchemaOrArray{Schema: &items} + return s +} + +// WithDefault sets the default value on this parameter +func (s *Schema) WithDefault(defaultValue interface{}) *Schema { + s.Default = defaultValue + return s +} + +// WithRequired flags this parameter as required +func (s *Schema) WithRequired(items ...string) *Schema { + s.Required = items + return s +} + +// AddRequired adds field names to the required properties array +func (s *Schema) AddRequired(items ...string) *Schema { + s.Required = append(s.Required, items...) + return s +} + +// WithMaxLength sets a max length value +func (s *Schema) WithMaxLength(max int64) *Schema { + s.MaxLength = &max + return s +} + +// WithMinLength sets a min length value +func (s *Schema) WithMinLength(min int64) *Schema { + s.MinLength = &min + return s +} + +// WithPattern sets a pattern value +func (s *Schema) WithPattern(pattern string) *Schema { + s.Pattern = pattern + return s +} + +// WithMultipleOf sets a multiple of value +func (s *Schema) WithMultipleOf(number float64) *Schema { + s.MultipleOf = &number + return s +} + +// WithMaximum sets a maximum number value +func (s *Schema) WithMaximum(max float64, exclusive bool) *Schema { + s.Maximum = &max + s.ExclusiveMaximum = exclusive + return s +} + +// WithMinimum sets a minimum number value +func (s *Schema) WithMinimum(min float64, exclusive bool) *Schema { + s.Minimum = &min + s.ExclusiveMinimum = exclusive + return s +} + +// WithEnum sets a the enum values (replace) +func (s *Schema) WithEnum(values ...interface{}) *Schema { + s.Enum = append([]interface{}{}, values...) + return s +} + +// WithMaxItems sets the max items +func (s *Schema) WithMaxItems(size int64) *Schema { + s.MaxItems = &size + return s +} + +// WithMinItems sets the min items +func (s *Schema) WithMinItems(size int64) *Schema { + s.MinItems = &size + return s +} + +// UniqueValues dictates that this array can only have unique items +func (s *Schema) UniqueValues() *Schema { + s.UniqueItems = true + return s +} + +// AllowDuplicates this array can have duplicates +func (s *Schema) AllowDuplicates() *Schema { + s.UniqueItems = false + return s +} + +// AddToAllOf adds a schema to the allOf property +func (s *Schema) AddToAllOf(schemas ...Schema) *Schema { + s.AllOf = append(s.AllOf, schemas...) + return s +} + +// WithDiscriminator sets the name of the discriminator field +func (s *Schema) WithDiscriminator(discriminator string) *Schema { + s.Discriminator = discriminator + return s +} + +// AsReadOnly flags this schema as readonly +func (s *Schema) AsReadOnly() *Schema { + s.ReadOnly = true + return s +} + +// AsWritable flags this schema as writeable (not read-only) +func (s *Schema) AsWritable() *Schema { + s.ReadOnly = false + return s +} + +// WithExample sets the example for this schema +func (s *Schema) WithExample(example interface{}) *Schema { + s.Example = example + return s +} + +// WithExternalDocs sets/removes the external docs for/from this schema. +// When you pass empty strings as params the external documents will be removed. +// When you pass non-empty string as one value then those values will be used on the external docs object. +// So when you pass a non-empty description, you should also pass the url and vice versa. +func (s *Schema) WithExternalDocs(description, url string) *Schema { + if description == "" && url == "" { + s.ExternalDocs = nil + return s + } + + if s.ExternalDocs == nil { + s.ExternalDocs = &ExternalDocumentation{} + } + s.ExternalDocs.Description = description + s.ExternalDocs.URL = url + return s +} + +// WithXMLName sets the xml name for the object +func (s *Schema) WithXMLName(name string) *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Name = name + return s +} + +// WithXMLNamespace sets the xml namespace for the object +func (s *Schema) WithXMLNamespace(namespace string) *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Namespace = namespace + return s +} + +// WithXMLPrefix sets the xml prefix for the object +func (s *Schema) WithXMLPrefix(prefix string) *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Prefix = prefix + return s +} + +// AsXMLAttribute flags this object as xml attribute +func (s *Schema) AsXMLAttribute() *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Attribute = true + return s +} + +// AsXMLElement flags this object as an xml node +func (s *Schema) AsXMLElement() *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Attribute = false + return s +} + +// AsWrappedXML flags this object as wrapped, this is mostly useful for array types +func (s *Schema) AsWrappedXML() *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Wrapped = true + return s +} + +// AsUnwrappedXML flags this object as an xml node +func (s *Schema) AsUnwrappedXML() *Schema { + if s.XML == nil { + s.XML = new(XMLObject) + } + s.XML.Wrapped = false + return s +} + +// SetValidations defines all schema validations. +// +// NOTE: Required, ReadOnly, AllOf, AnyOf, OneOf and Not are not considered. +func (s *Schema) SetValidations(val SchemaValidations) { + s.Maximum = val.Maximum + s.ExclusiveMaximum = val.ExclusiveMaximum + s.Minimum = val.Minimum + s.ExclusiveMinimum = val.ExclusiveMinimum + s.MaxLength = val.MaxLength + s.MinLength = val.MinLength + s.Pattern = val.Pattern + s.MaxItems = val.MaxItems + s.MinItems = val.MinItems + s.UniqueItems = val.UniqueItems + s.MultipleOf = val.MultipleOf + s.Enum = val.Enum + s.MinProperties = val.MinProperties + s.MaxProperties = val.MaxProperties + s.PatternProperties = val.PatternProperties +} + +// WithValidations is a fluent method to set schema validations +func (s *Schema) WithValidations(val SchemaValidations) *Schema { + s.SetValidations(val) + return s +} + +// Validations returns a clone of the validations for this schema +func (s Schema) Validations() SchemaValidations { + return SchemaValidations{ + CommonValidations: CommonValidations{ + Maximum: s.Maximum, + ExclusiveMaximum: s.ExclusiveMaximum, + Minimum: s.Minimum, + ExclusiveMinimum: s.ExclusiveMinimum, + MaxLength: s.MaxLength, + MinLength: s.MinLength, + Pattern: s.Pattern, + MaxItems: s.MaxItems, + MinItems: s.MinItems, + UniqueItems: s.UniqueItems, + MultipleOf: s.MultipleOf, + Enum: s.Enum, + }, + MinProperties: s.MinProperties, + MaxProperties: s.MaxProperties, + PatternProperties: s.PatternProperties, + } +} + +// MarshalJSON marshal this to JSON +func (s Schema) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(s.SchemaProps) + if err != nil { + return nil, fmt.Errorf("schema props %v", err) + } + b2, err := json.Marshal(s.VendorExtensible) + if err != nil { + return nil, fmt.Errorf("vendor props %v", err) + } + b3, err := s.Ref.MarshalJSON() + if err != nil { + return nil, fmt.Errorf("ref prop %v", err) + } + b4, err := s.Schema.MarshalJSON() + if err != nil { + return nil, fmt.Errorf("schema prop %v", err) + } + b5, err := json.Marshal(s.SwaggerSchemaProps) + if err != nil { + return nil, fmt.Errorf("common validations %v", err) + } + var b6 []byte + if s.ExtraProps != nil { + jj, err := json.Marshal(s.ExtraProps) + if err != nil { + return nil, fmt.Errorf("extra props %v", err) + } + b6 = jj + } + return swag.ConcatJSON(b1, b2, b3, b4, b5, b6), nil +} + +// UnmarshalJSON marshal this from JSON +func (s *Schema) UnmarshalJSON(data []byte) error { + props := struct { + SchemaProps + SwaggerSchemaProps + }{} + if err := json.Unmarshal(data, &props); err != nil { + return err + } + + sch := Schema{ + SchemaProps: props.SchemaProps, + SwaggerSchemaProps: props.SwaggerSchemaProps, + } + + var d map[string]interface{} + if err := json.Unmarshal(data, &d); err != nil { + return err + } + + _ = sch.Ref.fromMap(d) + _ = sch.Schema.fromMap(d) + + delete(d, "$ref") + delete(d, "$schema") + for _, pn := range swag.DefaultJSONNameProvider.GetJSONNames(s) { + delete(d, pn) + } + + for k, vv := range d { + lk := strings.ToLower(k) + if strings.HasPrefix(lk, "x-") { + if sch.Extensions == nil { + sch.Extensions = map[string]interface{}{} + } + sch.Extensions[k] = vv + continue + } + if sch.ExtraProps == nil { + sch.ExtraProps = map[string]interface{}{} + } + sch.ExtraProps[k] = vv + } + + *s = sch + + return nil +} diff --git a/vendor/github.com/go-openapi/spec/schema_loader.go b/vendor/github.com/go-openapi/spec/schema_loader.go new file mode 100644 index 0000000..b81175a --- /dev/null +++ b/vendor/github.com/go-openapi/spec/schema_loader.go @@ -0,0 +1,338 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + "fmt" + "log" + "net/url" + "reflect" + "strings" + + "github.com/go-openapi/swag" +) + +// PathLoader is a function to use when loading remote refs. +// +// This is a package level default. It may be overridden or bypassed by +// specifying the loader in ExpandOptions. +// +// NOTE: if you are using the go-openapi/loads package, it will override +// this value with its own default (a loader to retrieve YAML documents as +// well as JSON ones). +var PathLoader = func(pth string) (json.RawMessage, error) { + data, err := swag.LoadFromFileOrHTTP(pth) + if err != nil { + return nil, err + } + return json.RawMessage(data), nil +} + +// resolverContext allows to share a context during spec processing. +// At the moment, it just holds the index of circular references found. +type resolverContext struct { + // circulars holds all visited circular references, to shortcircuit $ref resolution. + // + // This structure is privately instantiated and needs not be locked against + // concurrent access, unless we chose to implement a parallel spec walking. + circulars map[string]bool + basePath string + loadDoc func(string) (json.RawMessage, error) + rootID string +} + +func newResolverContext(options *ExpandOptions) *resolverContext { + expandOptions := optionsOrDefault(options) + + // path loader may be overridden by options + var loader func(string) (json.RawMessage, error) + if expandOptions.PathLoader == nil { + loader = PathLoader + } else { + loader = expandOptions.PathLoader + } + + return &resolverContext{ + circulars: make(map[string]bool), + basePath: expandOptions.RelativeBase, // keep the root base path in context + loadDoc: loader, + } +} + +type schemaLoader struct { + root interface{} + options *ExpandOptions + cache ResolutionCache + context *resolverContext +} + +func (r *schemaLoader) transitiveResolver(basePath string, ref Ref) *schemaLoader { + if ref.IsRoot() || ref.HasFragmentOnly { + return r + } + + baseRef := MustCreateRef(basePath) + currentRef := normalizeRef(&ref, basePath) + if strings.HasPrefix(currentRef.String(), baseRef.String()) { + return r + } + + // set a new root against which to resolve + rootURL := currentRef.GetURL() + rootURL.Fragment = "" + root, _ := r.cache.Get(rootURL.String()) + + // shallow copy of resolver options to set a new RelativeBase when + // traversing multiple documents + newOptions := r.options + newOptions.RelativeBase = rootURL.String() + + return defaultSchemaLoader(root, newOptions, r.cache, r.context) +} + +func (r *schemaLoader) updateBasePath(transitive *schemaLoader, basePath string) string { + if transitive != r { + if transitive.options != nil && transitive.options.RelativeBase != "" { + return normalizeBase(transitive.options.RelativeBase) + } + } + + return basePath +} + +func (r *schemaLoader) resolveRef(ref *Ref, target interface{}, basePath string) error { + tgt := reflect.ValueOf(target) + if tgt.Kind() != reflect.Ptr { + return ErrResolveRefNeedsAPointer + } + + if ref.GetURL() == nil { + return nil + } + + var ( + res interface{} + data interface{} + err error + ) + + // Resolve against the root if it isn't nil, and if ref is pointing at the root, or has a fragment only which means + // it is pointing somewhere in the root. + root := r.root + if (ref.IsRoot() || ref.HasFragmentOnly) && root == nil && basePath != "" { + if baseRef, erb := NewRef(basePath); erb == nil { + root, _, _, _ = r.load(baseRef.GetURL()) + } + } + + if (ref.IsRoot() || ref.HasFragmentOnly) && root != nil { + data = root + } else { + baseRef := normalizeRef(ref, basePath) + data, _, _, err = r.load(baseRef.GetURL()) + if err != nil { + return err + } + } + + res = data + if ref.String() != "" { + res, _, err = ref.GetPointer().Get(data) + if err != nil { + return err + } + } + return swag.DynamicJSONToStruct(res, target) +} + +func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error) { + debugLog("loading schema from url: %s", refURL) + toFetch := *refURL + toFetch.Fragment = "" + + var err error + pth := toFetch.String() + normalized := normalizeBase(pth) + debugLog("loading doc from: %s", normalized) + + unescaped, err := url.PathUnescape(normalized) + if err != nil { + return nil, url.URL{}, false, err + } + + u := url.URL{Path: unescaped} + + data, fromCache := r.cache.Get(u.RequestURI()) + if fromCache { + return data, toFetch, fromCache, nil + } + + b, err := r.context.loadDoc(normalized) + if err != nil { + return nil, url.URL{}, false, err + } + + var doc interface{} + if err := json.Unmarshal(b, &doc); err != nil { + return nil, url.URL{}, false, err + } + r.cache.Set(normalized, doc) + + return doc, toFetch, fromCache, nil +} + +// isCircular detects cycles in sequences of $ref. +// +// It relies on a private context (which needs not be locked). +func (r *schemaLoader) isCircular(ref *Ref, basePath string, parentRefs ...string) (foundCycle bool) { + normalizedRef := normalizeURI(ref.String(), basePath) + if _, ok := r.context.circulars[normalizedRef]; ok { + // circular $ref has been already detected in another explored cycle + foundCycle = true + return + } + foundCycle = swag.ContainsStrings(parentRefs, normalizedRef) // normalized windows url's are lower cased + if foundCycle { + r.context.circulars[normalizedRef] = true + } + return +} + +// Resolve resolves a reference against basePath and stores the result in target. +// +// Resolve is not in charge of following references: it only resolves ref by following its URL. +// +// If the schema the ref is referring to holds nested refs, Resolve doesn't resolve them. +// +// If basePath is an empty string, ref is resolved against the root schema stored in the schemaLoader struct +func (r *schemaLoader) Resolve(ref *Ref, target interface{}, basePath string) error { + return r.resolveRef(ref, target, basePath) +} + +func (r *schemaLoader) deref(input interface{}, parentRefs []string, basePath string) error { + var ref *Ref + switch refable := input.(type) { + case *Schema: + ref = &refable.Ref + case *Parameter: + ref = &refable.Ref + case *Response: + ref = &refable.Ref + case *PathItem: + ref = &refable.Ref + default: + return fmt.Errorf("unsupported type: %T: %w", input, ErrDerefUnsupportedType) + } + + curRef := ref.String() + if curRef == "" { + return nil + } + + normalizedRef := normalizeRef(ref, basePath) + normalizedBasePath := normalizedRef.RemoteURI() + + if r.isCircular(normalizedRef, basePath, parentRefs...) { + return nil + } + + if err := r.resolveRef(ref, input, basePath); r.shouldStopOnError(err) { + return err + } + + if ref.String() == "" || ref.String() == curRef { + // done with rereferencing + return nil + } + + parentRefs = append(parentRefs, normalizedRef.String()) + return r.deref(input, parentRefs, normalizedBasePath) +} + +func (r *schemaLoader) shouldStopOnError(err error) bool { + if err != nil && !r.options.ContinueOnError { + return true + } + + if err != nil { + log.Println(err) + } + + return false +} + +func (r *schemaLoader) setSchemaID(target interface{}, id, basePath string) (string, string) { + debugLog("schema has ID: %s", id) + + // handling the case when id is a folder + // remember that basePath has to point to a file + var refPath string + if strings.HasSuffix(id, "/") { + // ensure this is detected as a file, not a folder + refPath = fmt.Sprintf("%s%s", id, "placeholder.json") + } else { + refPath = id + } + + // updates the current base path + // * important: ID can be a relative path + // * registers target to be fetchable from the new base proposed by this id + newBasePath := normalizeURI(refPath, basePath) + + // store found IDs for possible future reuse in $ref + r.cache.Set(newBasePath, target) + + // the root document has an ID: all $ref relative to that ID may + // be rebased relative to the root document + if basePath == r.context.basePath { + debugLog("root document is a schema with ID: %s (normalized as:%s)", id, newBasePath) + r.context.rootID = newBasePath + } + + return newBasePath, refPath +} + +func defaultSchemaLoader( + root interface{}, + expandOptions *ExpandOptions, + cache ResolutionCache, + context *resolverContext) *schemaLoader { + + if expandOptions == nil { + expandOptions = &ExpandOptions{} + } + + cache = cacheOrDefault(cache) + + if expandOptions.RelativeBase == "" { + // if no relative base is provided, assume the root document + // contains all $ref, or at least, that the relative documents + // may be resolved from the current working directory. + expandOptions.RelativeBase = baseForRoot(root, cache) + } + debugLog("effective expander options: %#v", expandOptions) + + if context == nil { + context = newResolverContext(expandOptions) + } + + return &schemaLoader{ + root: root, + options: expandOptions, + cache: cache, + context: context, + } +} diff --git a/vendor/github.com/go-openapi/spec/security_scheme.go b/vendor/github.com/go-openapi/spec/security_scheme.go new file mode 100644 index 0000000..9d0bdae --- /dev/null +++ b/vendor/github.com/go-openapi/spec/security_scheme.go @@ -0,0 +1,170 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +const ( + basic = "basic" + apiKey = "apiKey" + oauth2 = "oauth2" + implicit = "implicit" + password = "password" + application = "application" + accessCode = "accessCode" +) + +// BasicAuth creates a basic auth security scheme +func BasicAuth() *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{Type: basic}} +} + +// APIKeyAuth creates an api key auth security scheme +func APIKeyAuth(fieldName, valueSource string) *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{Type: apiKey, Name: fieldName, In: valueSource}} +} + +// OAuth2Implicit creates an implicit flow oauth2 security scheme +func OAuth2Implicit(authorizationURL string) *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ + Type: oauth2, + Flow: implicit, + AuthorizationURL: authorizationURL, + }} +} + +// OAuth2Password creates a password flow oauth2 security scheme +func OAuth2Password(tokenURL string) *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ + Type: oauth2, + Flow: password, + TokenURL: tokenURL, + }} +} + +// OAuth2Application creates an application flow oauth2 security scheme +func OAuth2Application(tokenURL string) *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ + Type: oauth2, + Flow: application, + TokenURL: tokenURL, + }} +} + +// OAuth2AccessToken creates an access token flow oauth2 security scheme +func OAuth2AccessToken(authorizationURL, tokenURL string) *SecurityScheme { + return &SecurityScheme{SecuritySchemeProps: SecuritySchemeProps{ + Type: oauth2, + Flow: accessCode, + AuthorizationURL: authorizationURL, + TokenURL: tokenURL, + }} +} + +// SecuritySchemeProps describes a swagger security scheme in the securityDefinitions section +type SecuritySchemeProps struct { + Description string `json:"description,omitempty"` + Type string `json:"type"` + Name string `json:"name,omitempty"` // api key + In string `json:"in,omitempty"` // api key + Flow string `json:"flow,omitempty"` // oauth2 + AuthorizationURL string `json:"authorizationUrl"` // oauth2 + TokenURL string `json:"tokenUrl,omitempty"` // oauth2 + Scopes map[string]string `json:"scopes,omitempty"` // oauth2 +} + +// AddScope adds a scope to this security scheme +func (s *SecuritySchemeProps) AddScope(scope, description string) { + if s.Scopes == nil { + s.Scopes = make(map[string]string) + } + s.Scopes[scope] = description +} + +// SecurityScheme allows the definition of a security scheme that can be used by the operations. +// Supported schemes are basic authentication, an API key (either as a header or as a query parameter) +// and OAuth2's common flows (implicit, password, application and access code). +// +// For more information: http://goo.gl/8us55a#securitySchemeObject +type SecurityScheme struct { + VendorExtensible + SecuritySchemeProps +} + +// JSONLookup implements an interface to customize json pointer lookup +func (s SecurityScheme) JSONLookup(token string) (interface{}, error) { + if ex, ok := s.Extensions[token]; ok { + return &ex, nil + } + + r, _, err := jsonpointer.GetForToken(s.SecuritySchemeProps, token) + return r, err +} + +// MarshalJSON marshal this to JSON +func (s SecurityScheme) MarshalJSON() ([]byte, error) { + var ( + b1 []byte + err error + ) + + if s.Type == oauth2 && (s.Flow == "implicit" || s.Flow == "accessCode") { + // when oauth2 for implicit or accessCode flows, empty AuthorizationURL is added as empty string + b1, err = json.Marshal(s.SecuritySchemeProps) + } else { + // when not oauth2, empty AuthorizationURL should be omitted + b1, err = json.Marshal(struct { + Description string `json:"description,omitempty"` + Type string `json:"type"` + Name string `json:"name,omitempty"` // api key + In string `json:"in,omitempty"` // api key + Flow string `json:"flow,omitempty"` // oauth2 + AuthorizationURL string `json:"authorizationUrl,omitempty"` // oauth2 + TokenURL string `json:"tokenUrl,omitempty"` // oauth2 + Scopes map[string]string `json:"scopes,omitempty"` // oauth2 + }{ + Description: s.Description, + Type: s.Type, + Name: s.Name, + In: s.In, + Flow: s.Flow, + AuthorizationURL: s.AuthorizationURL, + TokenURL: s.TokenURL, + Scopes: s.Scopes, + }) + } + if err != nil { + return nil, err + } + + b2, err := json.Marshal(s.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} + +// UnmarshalJSON marshal this from JSON +func (s *SecurityScheme) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &s.SecuritySchemeProps); err != nil { + return err + } + return json.Unmarshal(data, &s.VendorExtensible) +} diff --git a/vendor/github.com/go-openapi/spec/spec.go b/vendor/github.com/go-openapi/spec/spec.go new file mode 100644 index 0000000..7d38b6e --- /dev/null +++ b/vendor/github.com/go-openapi/spec/spec.go @@ -0,0 +1,78 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" +) + +//go:generate curl -L --progress -o ./schemas/v2/schema.json http://swagger.io/v2/schema.json +//go:generate curl -L --progress -o ./schemas/jsonschema-draft-04.json http://json-schema.org/draft-04/schema +//go:generate go-bindata -pkg=spec -prefix=./schemas -ignore=.*\.md ./schemas/... +//go:generate perl -pi -e s,Json,JSON,g bindata.go + +const ( + // SwaggerSchemaURL the url for the swagger 2.0 schema to validate specs + SwaggerSchemaURL = "http://swagger.io/v2/schema.json#" + // JSONSchemaURL the url for the json schema schema + JSONSchemaURL = "http://json-schema.org/draft-04/schema#" +) + +// MustLoadJSONSchemaDraft04 panics when Swagger20Schema returns an error +func MustLoadJSONSchemaDraft04() *Schema { + d, e := JSONSchemaDraft04() + if e != nil { + panic(e) + } + return d +} + +// JSONSchemaDraft04 loads the json schema document for json shema draft04 +func JSONSchemaDraft04() (*Schema, error) { + b, err := Asset("jsonschema-draft-04.json") + if err != nil { + return nil, err + } + + schema := new(Schema) + if err := json.Unmarshal(b, schema); err != nil { + return nil, err + } + return schema, nil +} + +// MustLoadSwagger20Schema panics when Swagger20Schema returns an error +func MustLoadSwagger20Schema() *Schema { + d, e := Swagger20Schema() + if e != nil { + panic(e) + } + return d +} + +// Swagger20Schema loads the swagger 2.0 schema from the embedded assets +func Swagger20Schema() (*Schema, error) { + + b, err := Asset("v2/schema.json") + if err != nil { + return nil, err + } + + schema := new(Schema) + if err := json.Unmarshal(b, schema); err != nil { + return nil, err + } + return schema, nil +} diff --git a/vendor/github.com/go-openapi/spec/swagger.go b/vendor/github.com/go-openapi/spec/swagger.go new file mode 100644 index 0000000..44722ff --- /dev/null +++ b/vendor/github.com/go-openapi/spec/swagger.go @@ -0,0 +1,448 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "bytes" + "encoding/gob" + "encoding/json" + "fmt" + "strconv" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// Swagger this is the root document object for the API specification. +// It combines what previously was the Resource Listing and API Declaration (version 1.2 and earlier) +// together into one document. +// +// For more information: http://goo.gl/8us55a#swagger-object- +type Swagger struct { + VendorExtensible + SwaggerProps +} + +// JSONLookup look up a value by the json property name +func (s Swagger) JSONLookup(token string) (interface{}, error) { + if ex, ok := s.Extensions[token]; ok { + return &ex, nil + } + r, _, err := jsonpointer.GetForToken(s.SwaggerProps, token) + return r, err +} + +// MarshalJSON marshals this swagger structure to json +func (s Swagger) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(s.SwaggerProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(s.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} + +// UnmarshalJSON unmarshals a swagger spec from json +func (s *Swagger) UnmarshalJSON(data []byte) error { + var sw Swagger + if err := json.Unmarshal(data, &sw.SwaggerProps); err != nil { + return err + } + if err := json.Unmarshal(data, &sw.VendorExtensible); err != nil { + return err + } + *s = sw + return nil +} + +// GobEncode provides a safe gob encoder for Swagger, including extensions +func (s Swagger) GobEncode() ([]byte, error) { + var b bytes.Buffer + raw := struct { + Props SwaggerProps + Ext VendorExtensible + }{ + Props: s.SwaggerProps, + Ext: s.VendorExtensible, + } + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err +} + +// GobDecode provides a safe gob decoder for Swagger, including extensions +func (s *Swagger) GobDecode(b []byte) error { + var raw struct { + Props SwaggerProps + Ext VendorExtensible + } + buf := bytes.NewBuffer(b) + err := gob.NewDecoder(buf).Decode(&raw) + if err != nil { + return err + } + s.SwaggerProps = raw.Props + s.VendorExtensible = raw.Ext + return nil +} + +// SwaggerProps captures the top-level properties of an Api specification +// +// NOTE: validation rules +// - the scheme, when present must be from [http, https, ws, wss] +// - BasePath must start with a leading "/" +// - Paths is required +type SwaggerProps struct { + ID string `json:"id,omitempty"` + Consumes []string `json:"consumes,omitempty"` + Produces []string `json:"produces,omitempty"` + Schemes []string `json:"schemes,omitempty"` + Swagger string `json:"swagger,omitempty"` + Info *Info `json:"info,omitempty"` + Host string `json:"host,omitempty"` + BasePath string `json:"basePath,omitempty"` + Paths *Paths `json:"paths"` + Definitions Definitions `json:"definitions,omitempty"` + Parameters map[string]Parameter `json:"parameters,omitempty"` + Responses map[string]Response `json:"responses,omitempty"` + SecurityDefinitions SecurityDefinitions `json:"securityDefinitions,omitempty"` + Security []map[string][]string `json:"security,omitempty"` + Tags []Tag `json:"tags,omitempty"` + ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` +} + +type swaggerPropsAlias SwaggerProps + +type gobSwaggerPropsAlias struct { + Security []map[string]struct { + List []string + Pad bool + } + Alias *swaggerPropsAlias + SecurityIsEmpty bool +} + +// GobEncode provides a safe gob encoder for SwaggerProps, including empty security requirements +func (o SwaggerProps) GobEncode() ([]byte, error) { + raw := gobSwaggerPropsAlias{ + Alias: (*swaggerPropsAlias)(&o), + } + + var b bytes.Buffer + if o.Security == nil { + // nil security requirement + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err + } + + if len(o.Security) == 0 { + // empty, but non-nil security requirement + raw.SecurityIsEmpty = true + raw.Alias.Security = nil + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err + } + + raw.Security = make([]map[string]struct { + List []string + Pad bool + }, 0, len(o.Security)) + for _, req := range o.Security { + v := make(map[string]struct { + List []string + Pad bool + }, len(req)) + for k, val := range req { + v[k] = struct { + List []string + Pad bool + }{ + List: val, + } + } + raw.Security = append(raw.Security, v) + } + + err := gob.NewEncoder(&b).Encode(raw) + return b.Bytes(), err +} + +// GobDecode provides a safe gob decoder for SwaggerProps, including empty security requirements +func (o *SwaggerProps) GobDecode(b []byte) error { + var raw gobSwaggerPropsAlias + + buf := bytes.NewBuffer(b) + err := gob.NewDecoder(buf).Decode(&raw) + if err != nil { + return err + } + if raw.Alias == nil { + return nil + } + + switch { + case raw.SecurityIsEmpty: + // empty, but non-nil security requirement + raw.Alias.Security = []map[string][]string{} + case len(raw.Alias.Security) == 0: + // nil security requirement + raw.Alias.Security = nil + default: + raw.Alias.Security = make([]map[string][]string, 0, len(raw.Security)) + for _, req := range raw.Security { + v := make(map[string][]string, len(req)) + for k, val := range req { + v[k] = make([]string, 0, len(val.List)) + v[k] = append(v[k], val.List...) + } + raw.Alias.Security = append(raw.Alias.Security, v) + } + } + + *o = *(*SwaggerProps)(raw.Alias) + return nil +} + +// Dependencies represent a dependencies property +type Dependencies map[string]SchemaOrStringArray + +// SchemaOrBool represents a schema or boolean value, is biased towards true for the boolean property +type SchemaOrBool struct { + Allows bool + Schema *Schema +} + +// JSONLookup implements an interface to customize json pointer lookup +func (s SchemaOrBool) JSONLookup(token string) (interface{}, error) { + if token == "allows" { + return s.Allows, nil + } + r, _, err := jsonpointer.GetForToken(s.Schema, token) + return r, err +} + +var jsTrue = []byte("true") +var jsFalse = []byte("false") + +// MarshalJSON convert this object to JSON +func (s SchemaOrBool) MarshalJSON() ([]byte, error) { + if s.Schema != nil { + return json.Marshal(s.Schema) + } + + if s.Schema == nil && !s.Allows { + return jsFalse, nil + } + return jsTrue, nil +} + +// UnmarshalJSON converts this bool or schema object from a JSON structure +func (s *SchemaOrBool) UnmarshalJSON(data []byte) error { + var nw SchemaOrBool + if len(data) >= 4 { + if data[0] == '{' { + var sch Schema + if err := json.Unmarshal(data, &sch); err != nil { + return err + } + nw.Schema = &sch + } + nw.Allows = !(data[0] == 'f' && data[1] == 'a' && data[2] == 'l' && data[3] == 's' && data[4] == 'e') + } + *s = nw + return nil +} + +// SchemaOrStringArray represents a schema or a string array +type SchemaOrStringArray struct { + Schema *Schema + Property []string +} + +// JSONLookup implements an interface to customize json pointer lookup +func (s SchemaOrStringArray) JSONLookup(token string) (interface{}, error) { + r, _, err := jsonpointer.GetForToken(s.Schema, token) + return r, err +} + +// MarshalJSON converts this schema object or array into JSON structure +func (s SchemaOrStringArray) MarshalJSON() ([]byte, error) { + if len(s.Property) > 0 { + return json.Marshal(s.Property) + } + if s.Schema != nil { + return json.Marshal(s.Schema) + } + return []byte("null"), nil +} + +// UnmarshalJSON converts this schema object or array from a JSON structure +func (s *SchemaOrStringArray) UnmarshalJSON(data []byte) error { + var first byte + if len(data) > 1 { + first = data[0] + } + var nw SchemaOrStringArray + if first == '{' { + var sch Schema + if err := json.Unmarshal(data, &sch); err != nil { + return err + } + nw.Schema = &sch + } + if first == '[' { + if err := json.Unmarshal(data, &nw.Property); err != nil { + return err + } + } + *s = nw + return nil +} + +// Definitions contains the models explicitly defined in this spec +// An object to hold data types that can be consumed and produced by operations. +// These data types can be primitives, arrays or models. +// +// For more information: http://goo.gl/8us55a#definitionsObject +type Definitions map[string]Schema + +// SecurityDefinitions a declaration of the security schemes available to be used in the specification. +// This does not enforce the security schemes on the operations and only serves to provide +// the relevant details for each scheme. +// +// For more information: http://goo.gl/8us55a#securityDefinitionsObject +type SecurityDefinitions map[string]*SecurityScheme + +// StringOrArray represents a value that can either be a string +// or an array of strings. Mainly here for serialization purposes +type StringOrArray []string + +// Contains returns true when the value is contained in the slice +func (s StringOrArray) Contains(value string) bool { + for _, str := range s { + if str == value { + return true + } + } + return false +} + +// JSONLookup implements an interface to customize json pointer lookup +func (s SchemaOrArray) JSONLookup(token string) (interface{}, error) { + if _, err := strconv.Atoi(token); err == nil { + r, _, err := jsonpointer.GetForToken(s.Schemas, token) + return r, err + } + r, _, err := jsonpointer.GetForToken(s.Schema, token) + return r, err +} + +// UnmarshalJSON unmarshals this string or array object from a JSON array or JSON string +func (s *StringOrArray) UnmarshalJSON(data []byte) error { + var first byte + if len(data) > 1 { + first = data[0] + } + + if first == '[' { + var parsed []string + if err := json.Unmarshal(data, &parsed); err != nil { + return err + } + *s = StringOrArray(parsed) + return nil + } + + var single interface{} + if err := json.Unmarshal(data, &single); err != nil { + return err + } + if single == nil { + return nil + } + switch v := single.(type) { + case string: + *s = StringOrArray([]string{v}) + return nil + default: + return fmt.Errorf("only string or array is allowed, not %T", single) + } +} + +// MarshalJSON converts this string or array to a JSON array or JSON string +func (s StringOrArray) MarshalJSON() ([]byte, error) { + if len(s) == 1 { + return json.Marshal([]string(s)[0]) + } + return json.Marshal([]string(s)) +} + +// SchemaOrArray represents a value that can either be a Schema +// or an array of Schema. Mainly here for serialization purposes +type SchemaOrArray struct { + Schema *Schema + Schemas []Schema +} + +// Len returns the number of schemas in this property +func (s SchemaOrArray) Len() int { + if s.Schema != nil { + return 1 + } + return len(s.Schemas) +} + +// ContainsType returns true when one of the schemas is of the specified type +func (s *SchemaOrArray) ContainsType(name string) bool { + if s.Schema != nil { + return s.Schema.Type != nil && s.Schema.Type.Contains(name) + } + return false +} + +// MarshalJSON converts this schema object or array into JSON structure +func (s SchemaOrArray) MarshalJSON() ([]byte, error) { + if len(s.Schemas) > 0 { + return json.Marshal(s.Schemas) + } + return json.Marshal(s.Schema) +} + +// UnmarshalJSON converts this schema object or array from a JSON structure +func (s *SchemaOrArray) UnmarshalJSON(data []byte) error { + var nw SchemaOrArray + var first byte + if len(data) > 1 { + first = data[0] + } + if first == '{' { + var sch Schema + if err := json.Unmarshal(data, &sch); err != nil { + return err + } + nw.Schema = &sch + } + if first == '[' { + if err := json.Unmarshal(data, &nw.Schemas); err != nil { + return err + } + } + *s = nw + return nil +} + +// vim:set ft=go noet sts=2 sw=2 ts=2: diff --git a/vendor/github.com/go-openapi/spec/tag.go b/vendor/github.com/go-openapi/spec/tag.go new file mode 100644 index 0000000..faa3d3d --- /dev/null +++ b/vendor/github.com/go-openapi/spec/tag.go @@ -0,0 +1,75 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +import ( + "encoding/json" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" +) + +// TagProps describe a tag entry in the top level tags section of a swagger spec +type TagProps struct { + Description string `json:"description,omitempty"` + Name string `json:"name,omitempty"` + ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` +} + +// NewTag creates a new tag +func NewTag(name, description string, externalDocs *ExternalDocumentation) Tag { + return Tag{TagProps: TagProps{Description: description, Name: name, ExternalDocs: externalDocs}} +} + +// Tag allows adding meta data to a single tag that is used by the +// [Operation Object](http://goo.gl/8us55a#operationObject). +// It is not mandatory to have a Tag Object per tag used there. +// +// For more information: http://goo.gl/8us55a#tagObject +type Tag struct { + VendorExtensible + TagProps +} + +// JSONLookup implements an interface to customize json pointer lookup +func (t Tag) JSONLookup(token string) (interface{}, error) { + if ex, ok := t.Extensions[token]; ok { + return &ex, nil + } + + r, _, err := jsonpointer.GetForToken(t.TagProps, token) + return r, err +} + +// MarshalJSON marshal this to JSON +func (t Tag) MarshalJSON() ([]byte, error) { + b1, err := json.Marshal(t.TagProps) + if err != nil { + return nil, err + } + b2, err := json.Marshal(t.VendorExtensible) + if err != nil { + return nil, err + } + return swag.ConcatJSON(b1, b2), nil +} + +// UnmarshalJSON marshal this from JSON +func (t *Tag) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &t.TagProps); err != nil { + return err + } + return json.Unmarshal(data, &t.VendorExtensible) +} diff --git a/vendor/github.com/go-openapi/spec/validations.go b/vendor/github.com/go-openapi/spec/validations.go new file mode 100644 index 0000000..6360a8e --- /dev/null +++ b/vendor/github.com/go-openapi/spec/validations.go @@ -0,0 +1,215 @@ +package spec + +// CommonValidations describe common JSON-schema validations +type CommonValidations struct { + Maximum *float64 `json:"maximum,omitempty"` + ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` + Minimum *float64 `json:"minimum,omitempty"` + ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty"` + MaxLength *int64 `json:"maxLength,omitempty"` + MinLength *int64 `json:"minLength,omitempty"` + Pattern string `json:"pattern,omitempty"` + MaxItems *int64 `json:"maxItems,omitempty"` + MinItems *int64 `json:"minItems,omitempty"` + UniqueItems bool `json:"uniqueItems,omitempty"` + MultipleOf *float64 `json:"multipleOf,omitempty"` + Enum []interface{} `json:"enum,omitempty"` +} + +// SetValidations defines all validations for a simple schema. +// +// NOTE: the input is the larger set of validations available for schemas. +// For simple schemas, MinProperties and MaxProperties are ignored. +func (v *CommonValidations) SetValidations(val SchemaValidations) { + v.Maximum = val.Maximum + v.ExclusiveMaximum = val.ExclusiveMaximum + v.Minimum = val.Minimum + v.ExclusiveMinimum = val.ExclusiveMinimum + v.MaxLength = val.MaxLength + v.MinLength = val.MinLength + v.Pattern = val.Pattern + v.MaxItems = val.MaxItems + v.MinItems = val.MinItems + v.UniqueItems = val.UniqueItems + v.MultipleOf = val.MultipleOf + v.Enum = val.Enum +} + +type clearedValidation struct { + Validation string + Value interface{} +} + +type clearedValidations []clearedValidation + +func (c clearedValidations) apply(cbs []func(string, interface{})) { + for _, cb := range cbs { + for _, cleared := range c { + cb(cleared.Validation, cleared.Value) + } + } +} + +// ClearNumberValidations clears all number validations. +// +// Some callbacks may be set by the caller to capture changed values. +func (v *CommonValidations) ClearNumberValidations(cbs ...func(string, interface{})) { + done := make(clearedValidations, 0, 5) + defer func() { + done.apply(cbs) + }() + + if v.Minimum != nil { + done = append(done, clearedValidation{Validation: "minimum", Value: v.Minimum}) + v.Minimum = nil + } + if v.Maximum != nil { + done = append(done, clearedValidation{Validation: "maximum", Value: v.Maximum}) + v.Maximum = nil + } + if v.ExclusiveMaximum { + done = append(done, clearedValidation{Validation: "exclusiveMaximum", Value: v.ExclusiveMaximum}) + v.ExclusiveMaximum = false + } + if v.ExclusiveMinimum { + done = append(done, clearedValidation{Validation: "exclusiveMinimum", Value: v.ExclusiveMinimum}) + v.ExclusiveMinimum = false + } + if v.MultipleOf != nil { + done = append(done, clearedValidation{Validation: "multipleOf", Value: v.MultipleOf}) + v.MultipleOf = nil + } +} + +// ClearStringValidations clears all string validations. +// +// Some callbacks may be set by the caller to capture changed values. +func (v *CommonValidations) ClearStringValidations(cbs ...func(string, interface{})) { + done := make(clearedValidations, 0, 3) + defer func() { + done.apply(cbs) + }() + + if v.Pattern != "" { + done = append(done, clearedValidation{Validation: "pattern", Value: v.Pattern}) + v.Pattern = "" + } + if v.MinLength != nil { + done = append(done, clearedValidation{Validation: "minLength", Value: v.MinLength}) + v.MinLength = nil + } + if v.MaxLength != nil { + done = append(done, clearedValidation{Validation: "maxLength", Value: v.MaxLength}) + v.MaxLength = nil + } +} + +// ClearArrayValidations clears all array validations. +// +// Some callbacks may be set by the caller to capture changed values. +func (v *CommonValidations) ClearArrayValidations(cbs ...func(string, interface{})) { + done := make(clearedValidations, 0, 3) + defer func() { + done.apply(cbs) + }() + + if v.MaxItems != nil { + done = append(done, clearedValidation{Validation: "maxItems", Value: v.MaxItems}) + v.MaxItems = nil + } + if v.MinItems != nil { + done = append(done, clearedValidation{Validation: "minItems", Value: v.MinItems}) + v.MinItems = nil + } + if v.UniqueItems { + done = append(done, clearedValidation{Validation: "uniqueItems", Value: v.UniqueItems}) + v.UniqueItems = false + } +} + +// Validations returns a clone of the validations for a simple schema. +// +// NOTE: in the context of simple schema objects, MinProperties, MaxProperties +// and PatternProperties remain unset. +func (v CommonValidations) Validations() SchemaValidations { + return SchemaValidations{ + CommonValidations: v, + } +} + +// HasNumberValidations indicates if the validations are for numbers or integers +func (v CommonValidations) HasNumberValidations() bool { + return v.Maximum != nil || v.Minimum != nil || v.MultipleOf != nil +} + +// HasStringValidations indicates if the validations are for strings +func (v CommonValidations) HasStringValidations() bool { + return v.MaxLength != nil || v.MinLength != nil || v.Pattern != "" +} + +// HasArrayValidations indicates if the validations are for arrays +func (v CommonValidations) HasArrayValidations() bool { + return v.MaxItems != nil || v.MinItems != nil || v.UniqueItems +} + +// HasEnum indicates if the validation includes some enum constraint +func (v CommonValidations) HasEnum() bool { + return len(v.Enum) > 0 +} + +// SchemaValidations describes the validation properties of a schema +// +// NOTE: at this moment, this is not embedded in SchemaProps because this would induce a breaking change +// in the exported members: all initializers using litterals would fail. +type SchemaValidations struct { + CommonValidations + + PatternProperties SchemaProperties `json:"patternProperties,omitempty"` + MaxProperties *int64 `json:"maxProperties,omitempty"` + MinProperties *int64 `json:"minProperties,omitempty"` +} + +// HasObjectValidations indicates if the validations are for objects +func (v SchemaValidations) HasObjectValidations() bool { + return v.MaxProperties != nil || v.MinProperties != nil || v.PatternProperties != nil +} + +// SetValidations for schema validations +func (v *SchemaValidations) SetValidations(val SchemaValidations) { + v.CommonValidations.SetValidations(val) + v.PatternProperties = val.PatternProperties + v.MaxProperties = val.MaxProperties + v.MinProperties = val.MinProperties +} + +// Validations for a schema +func (v SchemaValidations) Validations() SchemaValidations { + val := v.CommonValidations.Validations() + val.PatternProperties = v.PatternProperties + val.MinProperties = v.MinProperties + val.MaxProperties = v.MaxProperties + return val +} + +// ClearObjectValidations returns a clone of the validations with all object validations cleared. +// +// Some callbacks may be set by the caller to capture changed values. +func (v *SchemaValidations) ClearObjectValidations(cbs ...func(string, interface{})) { + done := make(clearedValidations, 0, 3) + defer func() { + done.apply(cbs) + }() + + if v.MaxProperties != nil { + done = append(done, clearedValidation{Validation: "maxProperties", Value: v.MaxProperties}) + v.MaxProperties = nil + } + if v.MinProperties != nil { + done = append(done, clearedValidation{Validation: "minProperties", Value: v.MinProperties}) + v.MinProperties = nil + } + if v.PatternProperties != nil { + done = append(done, clearedValidation{Validation: "patternProperties", Value: v.PatternProperties}) + v.PatternProperties = nil + } +} diff --git a/vendor/github.com/go-openapi/spec/xml_object.go b/vendor/github.com/go-openapi/spec/xml_object.go new file mode 100644 index 0000000..945a467 --- /dev/null +++ b/vendor/github.com/go-openapi/spec/xml_object.go @@ -0,0 +1,68 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 spec + +// XMLObject a metadata object that allows for more fine-tuned XML model definitions. +// +// For more information: http://goo.gl/8us55a#xmlObject +type XMLObject struct { + Name string `json:"name,omitempty"` + Namespace string `json:"namespace,omitempty"` + Prefix string `json:"prefix,omitempty"` + Attribute bool `json:"attribute,omitempty"` + Wrapped bool `json:"wrapped,omitempty"` +} + +// WithName sets the xml name for the object +func (x *XMLObject) WithName(name string) *XMLObject { + x.Name = name + return x +} + +// WithNamespace sets the xml namespace for the object +func (x *XMLObject) WithNamespace(namespace string) *XMLObject { + x.Namespace = namespace + return x +} + +// WithPrefix sets the xml prefix for the object +func (x *XMLObject) WithPrefix(prefix string) *XMLObject { + x.Prefix = prefix + return x +} + +// AsAttribute flags this object as xml attribute +func (x *XMLObject) AsAttribute() *XMLObject { + x.Attribute = true + return x +} + +// AsElement flags this object as an xml node +func (x *XMLObject) AsElement() *XMLObject { + x.Attribute = false + return x +} + +// AsWrapped flags this object as wrapped, this is mostly useful for array types +func (x *XMLObject) AsWrapped() *XMLObject { + x.Wrapped = true + return x +} + +// AsUnwrapped flags this object as an xml node +func (x *XMLObject) AsUnwrapped() *XMLObject { + x.Wrapped = false + return x +} diff --git a/vendor/github.com/go-openapi/swag/.editorconfig b/vendor/github.com/go-openapi/swag/.editorconfig new file mode 100644 index 0000000..3152da6 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/.editorconfig @@ -0,0 +1,26 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# Set default charset +[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] +charset = utf-8 + +# Tab indentation (no size specified) +[*.go] +indent_style = tab + +[*.md] +trim_trailing_whitespace = false + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/vendor/github.com/go-openapi/swag/.gitignore b/vendor/github.com/go-openapi/swag/.gitignore new file mode 100644 index 0000000..d69b53a --- /dev/null +++ b/vendor/github.com/go-openapi/swag/.gitignore @@ -0,0 +1,4 @@ +secrets.yml +vendor +Godeps +.idea diff --git a/vendor/github.com/go-openapi/swag/.golangci.yml b/vendor/github.com/go-openapi/swag/.golangci.yml new file mode 100644 index 0000000..842ac1c --- /dev/null +++ b/vendor/github.com/go-openapi/swag/.golangci.yml @@ -0,0 +1,41 @@ +linters-settings: + govet: + check-shadowing: true + golint: + min-confidence: 0 + gocyclo: + min-complexity: 25 + maligned: + suggest-new: true + dupl: + threshold: 100 + goconst: + min-len: 3 + min-occurrences: 2 + +linters: + enable-all: true + disable: + - maligned + - lll + - gochecknoinits + - gochecknoglobals + - nlreturn + - testpackage + - wrapcheck + - gomnd + - exhaustive + - exhaustivestruct + - goerr113 + - wsl + - whitespace + - gofumpt + - godot + - nestif + - godox + - funlen + - gci + - gocognit + - paralleltest + - thelper + - ifshort diff --git a/vendor/github.com/go-openapi/swag/.travis.yml b/vendor/github.com/go-openapi/swag/.travis.yml new file mode 100644 index 0000000..fc25a88 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/.travis.yml @@ -0,0 +1,37 @@ +after_success: +- bash <(curl -s https://codecov.io/bash) +go: +- 1.14.x +- 1.x +arch: +- amd64 +jobs: + include: + # include arch ppc, but only for latest go version - skip testing for race + - go: 1.x + arch: ppc64le + install: ~ + script: + - go test -v + + #- go: 1.x + # arch: arm + # install: ~ + # script: + # - go test -v + + # include linting job, but only for latest go version and amd64 arch + - go: 1.x + arch: amd64 + install: + go get github.com/golangci/golangci-lint/cmd/golangci-lint + script: + - golangci-lint run --new-from-rev master +install: +- GO111MODULE=off go get -u gotest.tools/gotestsum +language: go +notifications: + slack: + secure: QUWvCkBBK09GF7YtEvHHVt70JOkdlNBG0nIKu/5qc4/nW5HP8I2w0SEf/XR2je0eED1Qe3L/AfMCWwrEj+IUZc3l4v+ju8X8R3Lomhme0Eb0jd1MTMCuPcBT47YCj0M7RON7vXtbFfm1hFJ/jLe5+9FXz0hpXsR24PJc5ZIi/ogNwkaPqG4BmndzecpSh0vc2FJPZUD9LT0I09REY/vXR0oQAalLkW0asGD5taHZTUZq/kBpsNxaAFrLM23i4mUcf33M5fjLpvx5LRICrX/57XpBrDh2TooBU6Qj3CgoY0uPRYUmSNxbVx1czNzl2JtEpb5yjoxfVPQeg0BvQM00G8LJINISR+ohrjhkZmAqchDupAX+yFrxTtORa78CtnIL6z/aTNlgwwVD8kvL/1pFA/JWYmKDmz93mV/+6wubGzNSQCstzjkFA4/iZEKewKUoRIAi/fxyscP6L/rCpmY/4llZZvrnyTqVbt6URWpopUpH4rwYqreXAtJxJsfBJIeSmUIiDIOMGkCTvyTEW3fWGmGoqWtSHLoaWDyAIGb7azb+KvfpWtEcoPFWfSWU+LGee0A/YsUhBl7ADB9A0CJEuR8q4BPpKpfLwPKSiKSAXL7zDkyjExyhtgqbSl2jS+rKIHOZNL8JkCcTP2MKMVd563C5rC5FMKqu3S9m2b6380E= +script: +- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..9322b06 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ivan+abuse@flanders.co.nz. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/swag/LICENSE b/vendor/github.com/go-openapi/swag/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/go-openapi/swag/README.md b/vendor/github.com/go-openapi/swag/README.md new file mode 100644 index 0000000..217f6fa --- /dev/null +++ b/vendor/github.com/go-openapi/swag/README.md @@ -0,0 +1,21 @@ +# Swag [![Build Status](https://travis-ci.org/go-openapi/swag.svg?branch=master)](https://travis-ci.org/go-openapi/swag) [![codecov](https://codecov.io/gh/go-openapi/swag/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/swag) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) + +[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/swag/master/LICENSE) +[![GoDoc](https://godoc.org/github.com/go-openapi/swag?status.svg)](http://godoc.org/github.com/go-openapi/swag) +[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/swag)](https://goreportcard.com/report/github.com/go-openapi/swag) + +Contains a bunch of helper functions for go-openapi and go-swagger projects. + +You may also use it standalone for your projects. + +* convert between value and pointers for builtin types +* convert from string to builtin types (wraps strconv) +* fast json concatenation +* search in path +* load from file or http +* name mangling + + +This repo has only few dependencies outside of the standard library: + +* YAML utilities depend on gopkg.in/yaml.v2 diff --git a/vendor/github.com/go-openapi/swag/convert.go b/vendor/github.com/go-openapi/swag/convert.go new file mode 100644 index 0000000..fc085ae --- /dev/null +++ b/vendor/github.com/go-openapi/swag/convert.go @@ -0,0 +1,208 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "math" + "strconv" + "strings" +) + +// same as ECMA Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER +const ( + maxJSONFloat = float64(1<<53 - 1) // 9007199254740991.0 2^53 - 1 + minJSONFloat = -float64(1<<53 - 1) //-9007199254740991.0 -2^53 - 1 + epsilon float64 = 1e-9 +) + +// IsFloat64AJSONInteger allow for integers [-2^53, 2^53-1] inclusive +func IsFloat64AJSONInteger(f float64) bool { + if math.IsNaN(f) || math.IsInf(f, 0) || f < minJSONFloat || f > maxJSONFloat { + return false + } + fa := math.Abs(f) + g := float64(uint64(f)) + ga := math.Abs(g) + + diff := math.Abs(f - g) + + // more info: https://floating-point-gui.de/errors/comparison/#look-out-for-edge-cases + switch { + case f == g: // best case + return true + case f == float64(int64(f)) || f == float64(uint64(f)): // optimistic case + return true + case f == 0 || g == 0 || diff < math.SmallestNonzeroFloat64: // very close to 0 values + return diff < (epsilon * math.SmallestNonzeroFloat64) + } + // check the relative error + return diff/math.Min(fa+ga, math.MaxFloat64) < epsilon +} + +var evaluatesAsTrue map[string]struct{} + +func init() { + evaluatesAsTrue = map[string]struct{}{ + "true": {}, + "1": {}, + "yes": {}, + "ok": {}, + "y": {}, + "on": {}, + "selected": {}, + "checked": {}, + "t": {}, + "enabled": {}, + } +} + +// ConvertBool turn a string into a boolean +func ConvertBool(str string) (bool, error) { + _, ok := evaluatesAsTrue[strings.ToLower(str)] + return ok, nil +} + +// ConvertFloat32 turn a string into a float32 +func ConvertFloat32(str string) (float32, error) { + f, err := strconv.ParseFloat(str, 32) + if err != nil { + return 0, err + } + return float32(f), nil +} + +// ConvertFloat64 turn a string into a float64 +func ConvertFloat64(str string) (float64, error) { + return strconv.ParseFloat(str, 64) +} + +// ConvertInt8 turn a string into an int8 +func ConvertInt8(str string) (int8, error) { + i, err := strconv.ParseInt(str, 10, 8) + if err != nil { + return 0, err + } + return int8(i), nil +} + +// ConvertInt16 turn a string into an int16 +func ConvertInt16(str string) (int16, error) { + i, err := strconv.ParseInt(str, 10, 16) + if err != nil { + return 0, err + } + return int16(i), nil +} + +// ConvertInt32 turn a string into an int32 +func ConvertInt32(str string) (int32, error) { + i, err := strconv.ParseInt(str, 10, 32) + if err != nil { + return 0, err + } + return int32(i), nil +} + +// ConvertInt64 turn a string into an int64 +func ConvertInt64(str string) (int64, error) { + return strconv.ParseInt(str, 10, 64) +} + +// ConvertUint8 turn a string into an uint8 +func ConvertUint8(str string) (uint8, error) { + i, err := strconv.ParseUint(str, 10, 8) + if err != nil { + return 0, err + } + return uint8(i), nil +} + +// ConvertUint16 turn a string into an uint16 +func ConvertUint16(str string) (uint16, error) { + i, err := strconv.ParseUint(str, 10, 16) + if err != nil { + return 0, err + } + return uint16(i), nil +} + +// ConvertUint32 turn a string into an uint32 +func ConvertUint32(str string) (uint32, error) { + i, err := strconv.ParseUint(str, 10, 32) + if err != nil { + return 0, err + } + return uint32(i), nil +} + +// ConvertUint64 turn a string into an uint64 +func ConvertUint64(str string) (uint64, error) { + return strconv.ParseUint(str, 10, 64) +} + +// FormatBool turns a boolean into a string +func FormatBool(value bool) string { + return strconv.FormatBool(value) +} + +// FormatFloat32 turns a float32 into a string +func FormatFloat32(value float32) string { + return strconv.FormatFloat(float64(value), 'f', -1, 32) +} + +// FormatFloat64 turns a float64 into a string +func FormatFloat64(value float64) string { + return strconv.FormatFloat(value, 'f', -1, 64) +} + +// FormatInt8 turns an int8 into a string +func FormatInt8(value int8) string { + return strconv.FormatInt(int64(value), 10) +} + +// FormatInt16 turns an int16 into a string +func FormatInt16(value int16) string { + return strconv.FormatInt(int64(value), 10) +} + +// FormatInt32 turns an int32 into a string +func FormatInt32(value int32) string { + return strconv.Itoa(int(value)) +} + +// FormatInt64 turns an int64 into a string +func FormatInt64(value int64) string { + return strconv.FormatInt(value, 10) +} + +// FormatUint8 turns an uint8 into a string +func FormatUint8(value uint8) string { + return strconv.FormatUint(uint64(value), 10) +} + +// FormatUint16 turns an uint16 into a string +func FormatUint16(value uint16) string { + return strconv.FormatUint(uint64(value), 10) +} + +// FormatUint32 turns an uint32 into a string +func FormatUint32(value uint32) string { + return strconv.FormatUint(uint64(value), 10) +} + +// FormatUint64 turns an uint64 into a string +func FormatUint64(value uint64) string { + return strconv.FormatUint(value, 10) +} diff --git a/vendor/github.com/go-openapi/swag/convert_types.go b/vendor/github.com/go-openapi/swag/convert_types.go new file mode 100644 index 0000000..c49cc47 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/convert_types.go @@ -0,0 +1,730 @@ +package swag + +import "time" + +// This file was taken from the aws go sdk + +// String returns a pointer to of the string value passed in. +func String(v string) *string { + return &v +} + +// StringValue returns the value of the string pointer passed in or +// "" if the pointer is nil. +func StringValue(v *string) string { + if v != nil { + return *v + } + return "" +} + +// StringSlice converts a slice of string values into a slice of +// string pointers +func StringSlice(src []string) []*string { + dst := make([]*string, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// StringValueSlice converts a slice of string pointers into a slice of +// string values +func StringValueSlice(src []*string) []string { + dst := make([]string, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// StringMap converts a string map of string values into a string +// map of string pointers +func StringMap(src map[string]string) map[string]*string { + dst := make(map[string]*string) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// StringValueMap converts a string map of string pointers into a string +// map of string values +func StringValueMap(src map[string]*string) map[string]string { + dst := make(map[string]string) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Bool returns a pointer to of the bool value passed in. +func Bool(v bool) *bool { + return &v +} + +// BoolValue returns the value of the bool pointer passed in or +// false if the pointer is nil. +func BoolValue(v *bool) bool { + if v != nil { + return *v + } + return false +} + +// BoolSlice converts a slice of bool values into a slice of +// bool pointers +func BoolSlice(src []bool) []*bool { + dst := make([]*bool, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// BoolValueSlice converts a slice of bool pointers into a slice of +// bool values +func BoolValueSlice(src []*bool) []bool { + dst := make([]bool, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// BoolMap converts a string map of bool values into a string +// map of bool pointers +func BoolMap(src map[string]bool) map[string]*bool { + dst := make(map[string]*bool) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// BoolValueMap converts a string map of bool pointers into a string +// map of bool values +func BoolValueMap(src map[string]*bool) map[string]bool { + dst := make(map[string]bool) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int returns a pointer to of the int value passed in. +func Int(v int) *int { + return &v +} + +// IntValue returns the value of the int pointer passed in or +// 0 if the pointer is nil. +func IntValue(v *int) int { + if v != nil { + return *v + } + return 0 +} + +// IntSlice converts a slice of int values into a slice of +// int pointers +func IntSlice(src []int) []*int { + dst := make([]*int, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// IntValueSlice converts a slice of int pointers into a slice of +// int values +func IntValueSlice(src []*int) []int { + dst := make([]int, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// IntMap converts a string map of int values into a string +// map of int pointers +func IntMap(src map[string]int) map[string]*int { + dst := make(map[string]*int) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// IntValueMap converts a string map of int pointers into a string +// map of int values +func IntValueMap(src map[string]*int) map[string]int { + dst := make(map[string]int) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int32 returns a pointer to of the int32 value passed in. +func Int32(v int32) *int32 { + return &v +} + +// Int32Value returns the value of the int32 pointer passed in or +// 0 if the pointer is nil. +func Int32Value(v *int32) int32 { + if v != nil { + return *v + } + return 0 +} + +// Int32Slice converts a slice of int32 values into a slice of +// int32 pointers +func Int32Slice(src []int32) []*int32 { + dst := make([]*int32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int32ValueSlice converts a slice of int32 pointers into a slice of +// int32 values +func Int32ValueSlice(src []*int32) []int32 { + dst := make([]int32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int32Map converts a string map of int32 values into a string +// map of int32 pointers +func Int32Map(src map[string]int32) map[string]*int32 { + dst := make(map[string]*int32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int32ValueMap converts a string map of int32 pointers into a string +// map of int32 values +func Int32ValueMap(src map[string]*int32) map[string]int32 { + dst := make(map[string]int32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int64 returns a pointer to of the int64 value passed in. +func Int64(v int64) *int64 { + return &v +} + +// Int64Value returns the value of the int64 pointer passed in or +// 0 if the pointer is nil. +func Int64Value(v *int64) int64 { + if v != nil { + return *v + } + return 0 +} + +// Int64Slice converts a slice of int64 values into a slice of +// int64 pointers +func Int64Slice(src []int64) []*int64 { + dst := make([]*int64, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int64ValueSlice converts a slice of int64 pointers into a slice of +// int64 values +func Int64ValueSlice(src []*int64) []int64 { + dst := make([]int64, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int64Map converts a string map of int64 values into a string +// map of int64 pointers +func Int64Map(src map[string]int64) map[string]*int64 { + dst := make(map[string]*int64) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int64ValueMap converts a string map of int64 pointers into a string +// map of int64 values +func Int64ValueMap(src map[string]*int64) map[string]int64 { + dst := make(map[string]int64) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint16 returns a pointer to of the uint16 value passed in. +func Uint16(v uint16) *uint16 { + return &v +} + +// Uint16Value returns the value of the uint16 pointer passed in or +// 0 if the pointer is nil. +func Uint16Value(v *uint16) uint16 { + if v != nil { + return *v + } + + return 0 +} + +// Uint16Slice converts a slice of uint16 values into a slice of +// uint16 pointers +func Uint16Slice(src []uint16) []*uint16 { + dst := make([]*uint16, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + + return dst +} + +// Uint16ValueSlice converts a slice of uint16 pointers into a slice of +// uint16 values +func Uint16ValueSlice(src []*uint16) []uint16 { + dst := make([]uint16, len(src)) + + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + + return dst +} + +// Uint16Map converts a string map of uint16 values into a string +// map of uint16 pointers +func Uint16Map(src map[string]uint16) map[string]*uint16 { + dst := make(map[string]*uint16) + + for k, val := range src { + v := val + dst[k] = &v + } + + return dst +} + +// Uint16ValueMap converts a string map of uint16 pointers into a string +// map of uint16 values +func Uint16ValueMap(src map[string]*uint16) map[string]uint16 { + dst := make(map[string]uint16) + + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + + return dst +} + +// Uint returns a pointer to of the uint value passed in. +func Uint(v uint) *uint { + return &v +} + +// UintValue returns the value of the uint pointer passed in or +// 0 if the pointer is nil. +func UintValue(v *uint) uint { + if v != nil { + return *v + } + return 0 +} + +// UintSlice converts a slice of uint values into a slice of +// uint pointers +func UintSlice(src []uint) []*uint { + dst := make([]*uint, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// UintValueSlice converts a slice of uint pointers into a slice of +// uint values +func UintValueSlice(src []*uint) []uint { + dst := make([]uint, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// UintMap converts a string map of uint values into a string +// map of uint pointers +func UintMap(src map[string]uint) map[string]*uint { + dst := make(map[string]*uint) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// UintValueMap converts a string map of uint pointers into a string +// map of uint values +func UintValueMap(src map[string]*uint) map[string]uint { + dst := make(map[string]uint) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint32 returns a pointer to of the uint32 value passed in. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint32Value returns the value of the uint32 pointer passed in or +// 0 if the pointer is nil. +func Uint32Value(v *uint32) uint32 { + if v != nil { + return *v + } + return 0 +} + +// Uint32Slice converts a slice of uint32 values into a slice of +// uint32 pointers +func Uint32Slice(src []uint32) []*uint32 { + dst := make([]*uint32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint32ValueSlice converts a slice of uint32 pointers into a slice of +// uint32 values +func Uint32ValueSlice(src []*uint32) []uint32 { + dst := make([]uint32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint32Map converts a string map of uint32 values into a string +// map of uint32 pointers +func Uint32Map(src map[string]uint32) map[string]*uint32 { + dst := make(map[string]*uint32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint32ValueMap converts a string map of uint32 pointers into a string +// map of uint32 values +func Uint32ValueMap(src map[string]*uint32) map[string]uint32 { + dst := make(map[string]uint32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint64 returns a pointer to of the uint64 value passed in. +func Uint64(v uint64) *uint64 { + return &v +} + +// Uint64Value returns the value of the uint64 pointer passed in or +// 0 if the pointer is nil. +func Uint64Value(v *uint64) uint64 { + if v != nil { + return *v + } + return 0 +} + +// Uint64Slice converts a slice of uint64 values into a slice of +// uint64 pointers +func Uint64Slice(src []uint64) []*uint64 { + dst := make([]*uint64, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint64ValueSlice converts a slice of uint64 pointers into a slice of +// uint64 values +func Uint64ValueSlice(src []*uint64) []uint64 { + dst := make([]uint64, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint64Map converts a string map of uint64 values into a string +// map of uint64 pointers +func Uint64Map(src map[string]uint64) map[string]*uint64 { + dst := make(map[string]*uint64) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint64ValueMap converts a string map of uint64 pointers into a string +// map of uint64 values +func Uint64ValueMap(src map[string]*uint64) map[string]uint64 { + dst := make(map[string]uint64) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Float32 returns a pointer to of the float32 value passed in. +func Float32(v float32) *float32 { + return &v +} + +// Float32Value returns the value of the float32 pointer passed in or +// 0 if the pointer is nil. +func Float32Value(v *float32) float32 { + if v != nil { + return *v + } + + return 0 +} + +// Float32Slice converts a slice of float32 values into a slice of +// float32 pointers +func Float32Slice(src []float32) []*float32 { + dst := make([]*float32, len(src)) + + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + + return dst +} + +// Float32ValueSlice converts a slice of float32 pointers into a slice of +// float32 values +func Float32ValueSlice(src []*float32) []float32 { + dst := make([]float32, len(src)) + + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + + return dst +} + +// Float32Map converts a string map of float32 values into a string +// map of float32 pointers +func Float32Map(src map[string]float32) map[string]*float32 { + dst := make(map[string]*float32) + + for k, val := range src { + v := val + dst[k] = &v + } + + return dst +} + +// Float32ValueMap converts a string map of float32 pointers into a string +// map of float32 values +func Float32ValueMap(src map[string]*float32) map[string]float32 { + dst := make(map[string]float32) + + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + + return dst +} + +// Float64 returns a pointer to of the float64 value passed in. +func Float64(v float64) *float64 { + return &v +} + +// Float64Value returns the value of the float64 pointer passed in or +// 0 if the pointer is nil. +func Float64Value(v *float64) float64 { + if v != nil { + return *v + } + return 0 +} + +// Float64Slice converts a slice of float64 values into a slice of +// float64 pointers +func Float64Slice(src []float64) []*float64 { + dst := make([]*float64, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Float64ValueSlice converts a slice of float64 pointers into a slice of +// float64 values +func Float64ValueSlice(src []*float64) []float64 { + dst := make([]float64, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Float64Map converts a string map of float64 values into a string +// map of float64 pointers +func Float64Map(src map[string]float64) map[string]*float64 { + dst := make(map[string]*float64) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Float64ValueMap converts a string map of float64 pointers into a string +// map of float64 values +func Float64ValueMap(src map[string]*float64) map[string]float64 { + dst := make(map[string]float64) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Time returns a pointer to of the time.Time value passed in. +func Time(v time.Time) *time.Time { + return &v +} + +// TimeValue returns the value of the time.Time pointer passed in or +// time.Time{} if the pointer is nil. +func TimeValue(v *time.Time) time.Time { + if v != nil { + return *v + } + return time.Time{} +} + +// TimeSlice converts a slice of time.Time values into a slice of +// time.Time pointers +func TimeSlice(src []time.Time) []*time.Time { + dst := make([]*time.Time, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// TimeValueSlice converts a slice of time.Time pointers into a slice of +// time.Time values +func TimeValueSlice(src []*time.Time) []time.Time { + dst := make([]time.Time, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// TimeMap converts a string map of time.Time values into a string +// map of time.Time pointers +func TimeMap(src map[string]time.Time) map[string]*time.Time { + dst := make(map[string]*time.Time) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// TimeValueMap converts a string map of time.Time pointers into a string +// map of time.Time values +func TimeValueMap(src map[string]*time.Time) map[string]time.Time { + dst := make(map[string]time.Time) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} diff --git a/vendor/github.com/go-openapi/swag/doc.go b/vendor/github.com/go-openapi/swag/doc.go new file mode 100644 index 0000000..8d2c8c5 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/doc.go @@ -0,0 +1,32 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag contains a bunch of helper functions for go-openapi and go-swagger projects. + +You may also use it standalone for your projects. + + * convert between value and pointers for builtin types + * convert from string to builtin types (wraps strconv) + * fast json concatenation + * search in path + * load from file or http + * name mangling + + +This repo has only few dependencies outside of the standard library: + + * YAML utilities depend on gopkg.in/yaml.v2 +*/ +package swag diff --git a/vendor/github.com/go-openapi/swag/json.go b/vendor/github.com/go-openapi/swag/json.go new file mode 100644 index 0000000..7e9902c --- /dev/null +++ b/vendor/github.com/go-openapi/swag/json.go @@ -0,0 +1,312 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "bytes" + "encoding/json" + "log" + "reflect" + "strings" + "sync" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// nullJSON represents a JSON object with null type +var nullJSON = []byte("null") + +// DefaultJSONNameProvider the default cache for types +var DefaultJSONNameProvider = NewNameProvider() + +const comma = byte(',') + +var closers map[byte]byte + +func init() { + closers = map[byte]byte{ + '{': '}', + '[': ']', + } +} + +type ejMarshaler interface { + MarshalEasyJSON(w *jwriter.Writer) +} + +type ejUnmarshaler interface { + UnmarshalEasyJSON(w *jlexer.Lexer) +} + +// WriteJSON writes json data, prefers finding an appropriate interface to short-circuit the marshaler +// so it takes the fastest option available. +func WriteJSON(data interface{}) ([]byte, error) { + if d, ok := data.(ejMarshaler); ok { + jw := new(jwriter.Writer) + d.MarshalEasyJSON(jw) + return jw.BuildBytes() + } + if d, ok := data.(json.Marshaler); ok { + return d.MarshalJSON() + } + return json.Marshal(data) +} + +// ReadJSON reads json data, prefers finding an appropriate interface to short-circuit the unmarshaler +// so it takes the fastest option available +func ReadJSON(data []byte, value interface{}) error { + trimmedData := bytes.Trim(data, "\x00") + if d, ok := value.(ejUnmarshaler); ok { + jl := &jlexer.Lexer{Data: trimmedData} + d.UnmarshalEasyJSON(jl) + return jl.Error() + } + if d, ok := value.(json.Unmarshaler); ok { + return d.UnmarshalJSON(trimmedData) + } + return json.Unmarshal(trimmedData, value) +} + +// DynamicJSONToStruct converts an untyped json structure into a struct +func DynamicJSONToStruct(data interface{}, target interface{}) error { + // TODO: convert straight to a json typed map (mergo + iterate?) + b, err := WriteJSON(data) + if err != nil { + return err + } + return ReadJSON(b, target) +} + +// ConcatJSON concatenates multiple json objects efficiently +func ConcatJSON(blobs ...[]byte) []byte { + if len(blobs) == 0 { + return nil + } + + last := len(blobs) - 1 + for blobs[last] == nil || bytes.Equal(blobs[last], nullJSON) { + // strips trailing null objects + last-- + if last < 0 { + // there was nothing but "null"s or nil... + return nil + } + } + if last == 0 { + return blobs[0] + } + + var opening, closing byte + var idx, a int + buf := bytes.NewBuffer(nil) + + for i, b := range blobs[:last+1] { + if b == nil || bytes.Equal(b, nullJSON) { + // a null object is in the list: skip it + continue + } + if len(b) > 0 && opening == 0 { // is this an array or an object? + opening, closing = b[0], closers[b[0]] + } + + if opening != '{' && opening != '[' { + continue // don't know how to concatenate non container objects + } + + if len(b) < 3 { // yep empty but also the last one, so closing this thing + if i == last && a > 0 { + if err := buf.WriteByte(closing); err != nil { + log.Println(err) + } + } + continue + } + + idx = 0 + if a > 0 { // we need to join with a comma for everything beyond the first non-empty item + if err := buf.WriteByte(comma); err != nil { + log.Println(err) + } + idx = 1 // this is not the first or the last so we want to drop the leading bracket + } + + if i != last { // not the last one, strip brackets + if _, err := buf.Write(b[idx : len(b)-1]); err != nil { + log.Println(err) + } + } else { // last one, strip only the leading bracket + if _, err := buf.Write(b[idx:]); err != nil { + log.Println(err) + } + } + a++ + } + // somehow it ended up being empty, so provide a default value + if buf.Len() == 0 { + if err := buf.WriteByte(opening); err != nil { + log.Println(err) + } + if err := buf.WriteByte(closing); err != nil { + log.Println(err) + } + } + return buf.Bytes() +} + +// ToDynamicJSON turns an object into a properly JSON typed structure +func ToDynamicJSON(data interface{}) interface{} { + // TODO: convert straight to a json typed map (mergo + iterate?) + b, err := json.Marshal(data) + if err != nil { + log.Println(err) + } + var res interface{} + if err := json.Unmarshal(b, &res); err != nil { + log.Println(err) + } + return res +} + +// FromDynamicJSON turns an object into a properly JSON typed structure +func FromDynamicJSON(data, target interface{}) error { + b, err := json.Marshal(data) + if err != nil { + log.Println(err) + } + return json.Unmarshal(b, target) +} + +// NameProvider represents an object capable of translating from go property names +// to json property names +// This type is thread-safe. +type NameProvider struct { + lock *sync.Mutex + index map[reflect.Type]nameIndex +} + +type nameIndex struct { + jsonNames map[string]string + goNames map[string]string +} + +// NewNameProvider creates a new name provider +func NewNameProvider() *NameProvider { + return &NameProvider{ + lock: &sync.Mutex{}, + index: make(map[reflect.Type]nameIndex), + } +} + +func buildnameIndex(tpe reflect.Type, idx, reverseIdx map[string]string) { + for i := 0; i < tpe.NumField(); i++ { + targetDes := tpe.Field(i) + + if targetDes.PkgPath != "" { // unexported + continue + } + + if targetDes.Anonymous { // walk embedded structures tree down first + buildnameIndex(targetDes.Type, idx, reverseIdx) + continue + } + + if tag := targetDes.Tag.Get("json"); tag != "" { + + parts := strings.Split(tag, ",") + if len(parts) == 0 { + continue + } + + nm := parts[0] + if nm == "-" { + continue + } + if nm == "" { // empty string means we want to use the Go name + nm = targetDes.Name + } + + idx[nm] = targetDes.Name + reverseIdx[targetDes.Name] = nm + } + } +} + +func newNameIndex(tpe reflect.Type) nameIndex { + var idx = make(map[string]string, tpe.NumField()) + var reverseIdx = make(map[string]string, tpe.NumField()) + + buildnameIndex(tpe, idx, reverseIdx) + return nameIndex{jsonNames: idx, goNames: reverseIdx} +} + +// GetJSONNames gets all the json property names for a type +func (n *NameProvider) GetJSONNames(subject interface{}) []string { + n.lock.Lock() + defer n.lock.Unlock() + tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() + names, ok := n.index[tpe] + if !ok { + names = n.makeNameIndex(tpe) + } + + res := make([]string, 0, len(names.jsonNames)) + for k := range names.jsonNames { + res = append(res, k) + } + return res +} + +// GetJSONName gets the json name for a go property name +func (n *NameProvider) GetJSONName(subject interface{}, name string) (string, bool) { + tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() + return n.GetJSONNameForType(tpe, name) +} + +// GetJSONNameForType gets the json name for a go property name on a given type +func (n *NameProvider) GetJSONNameForType(tpe reflect.Type, name string) (string, bool) { + n.lock.Lock() + defer n.lock.Unlock() + names, ok := n.index[tpe] + if !ok { + names = n.makeNameIndex(tpe) + } + nme, ok := names.goNames[name] + return nme, ok +} + +func (n *NameProvider) makeNameIndex(tpe reflect.Type) nameIndex { + names := newNameIndex(tpe) + n.index[tpe] = names + return names +} + +// GetGoName gets the go name for a json property name +func (n *NameProvider) GetGoName(subject interface{}, name string) (string, bool) { + tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() + return n.GetGoNameForType(tpe, name) +} + +// GetGoNameForType gets the go name for a given type for a json property name +func (n *NameProvider) GetGoNameForType(tpe reflect.Type, name string) (string, bool) { + n.lock.Lock() + defer n.lock.Unlock() + names, ok := n.index[tpe] + if !ok { + names = n.makeNameIndex(tpe) + } + nme, ok := names.jsonNames[name] + return nme, ok +} diff --git a/vendor/github.com/go-openapi/swag/loading.go b/vendor/github.com/go-openapi/swag/loading.go new file mode 100644 index 0000000..9a60409 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/loading.go @@ -0,0 +1,120 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" + "net/url" + "path/filepath" + "runtime" + "strings" + "time" +) + +// LoadHTTPTimeout the default timeout for load requests +var LoadHTTPTimeout = 30 * time.Second + +// LoadHTTPBasicAuthUsername the username to use when load requests require basic auth +var LoadHTTPBasicAuthUsername = "" + +// LoadHTTPBasicAuthPassword the password to use when load requests require basic auth +var LoadHTTPBasicAuthPassword = "" + +// LoadHTTPCustomHeaders an optional collection of custom HTTP headers for load requests +var LoadHTTPCustomHeaders = map[string]string{} + +// LoadFromFileOrHTTP loads the bytes from a file or a remote http server based on the path passed in +func LoadFromFileOrHTTP(path string) ([]byte, error) { + return LoadStrategy(path, ioutil.ReadFile, loadHTTPBytes(LoadHTTPTimeout))(path) +} + +// LoadFromFileOrHTTPWithTimeout loads the bytes from a file or a remote http server based on the path passed in +// timeout arg allows for per request overriding of the request timeout +func LoadFromFileOrHTTPWithTimeout(path string, timeout time.Duration) ([]byte, error) { + return LoadStrategy(path, ioutil.ReadFile, loadHTTPBytes(timeout))(path) +} + +// LoadStrategy returns a loader function for a given path or uri +func LoadStrategy(path string, local, remote func(string) ([]byte, error)) func(string) ([]byte, error) { + if strings.HasPrefix(path, "http") { + return remote + } + return func(pth string) ([]byte, error) { + upth, err := pathUnescape(pth) + if err != nil { + return nil, err + } + + if strings.HasPrefix(pth, `file://`) { + if runtime.GOOS == "windows" { + // support for canonical file URIs on windows. + // Zero tolerance here for dodgy URIs. + u, _ := url.Parse(upth) + if u.Host != "" { + // assume UNC name (volume share) + // file://host/share/folder\... ==> \\host\share\path\folder + // NOTE: UNC port not yet supported + upth = strings.Join([]string{`\`, u.Host, u.Path}, `\`) + } else { + // file:///c:/folder/... ==> just remove the leading slash + upth = strings.TrimPrefix(upth, `file:///`) + } + } else { + upth = strings.TrimPrefix(upth, `file://`) + } + } + + return local(filepath.FromSlash(upth)) + } +} + +func loadHTTPBytes(timeout time.Duration) func(path string) ([]byte, error) { + return func(path string) ([]byte, error) { + client := &http.Client{Timeout: timeout} + req, err := http.NewRequest("GET", path, nil) // nolint: noctx + if err != nil { + return nil, err + } + + if LoadHTTPBasicAuthUsername != "" && LoadHTTPBasicAuthPassword != "" { + req.SetBasicAuth(LoadHTTPBasicAuthUsername, LoadHTTPBasicAuthPassword) + } + + for key, val := range LoadHTTPCustomHeaders { + req.Header.Set(key, val) + } + + resp, err := client.Do(req) + defer func() { + if resp != nil { + if e := resp.Body.Close(); e != nil { + log.Println(e) + } + } + }() + if err != nil { + return nil, err + } + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("could not access document at %q [%s] ", path, resp.Status) + } + + return ioutil.ReadAll(resp.Body) + } +} diff --git a/vendor/github.com/go-openapi/swag/name_lexem.go b/vendor/github.com/go-openapi/swag/name_lexem.go new file mode 100644 index 0000000..aa7f6a9 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/name_lexem.go @@ -0,0 +1,87 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import "unicode" + +type ( + nameLexem interface { + GetUnsafeGoName() string + GetOriginal() string + IsInitialism() bool + } + + initialismNameLexem struct { + original string + matchedInitialism string + } + + casualNameLexem struct { + original string + } +) + +func newInitialismNameLexem(original, matchedInitialism string) *initialismNameLexem { + return &initialismNameLexem{ + original: original, + matchedInitialism: matchedInitialism, + } +} + +func newCasualNameLexem(original string) *casualNameLexem { + return &casualNameLexem{ + original: original, + } +} + +func (l *initialismNameLexem) GetUnsafeGoName() string { + return l.matchedInitialism +} + +func (l *casualNameLexem) GetUnsafeGoName() string { + var first rune + var rest string + for i, orig := range l.original { + if i == 0 { + first = orig + continue + } + if i > 0 { + rest = l.original[i:] + break + } + } + if len(l.original) > 1 { + return string(unicode.ToUpper(first)) + lower(rest) + } + + return l.original +} + +func (l *initialismNameLexem) GetOriginal() string { + return l.original +} + +func (l *casualNameLexem) GetOriginal() string { + return l.original +} + +func (l *initialismNameLexem) IsInitialism() bool { + return true +} + +func (l *casualNameLexem) IsInitialism() bool { + return false +} diff --git a/vendor/github.com/go-openapi/swag/net.go b/vendor/github.com/go-openapi/swag/net.go new file mode 100644 index 0000000..821235f --- /dev/null +++ b/vendor/github.com/go-openapi/swag/net.go @@ -0,0 +1,38 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "net" + "strconv" +) + +// SplitHostPort splits a network address into a host and a port. +// The port is -1 when there is no port to be found +func SplitHostPort(addr string) (host string, port int, err error) { + h, p, err := net.SplitHostPort(addr) + if err != nil { + return "", -1, err + } + if p == "" { + return "", -1, &net.AddrError{Err: "missing port in address", Addr: addr} + } + + pi, err := strconv.Atoi(p) + if err != nil { + return "", -1, err + } + return h, pi, nil +} diff --git a/vendor/github.com/go-openapi/swag/path.go b/vendor/github.com/go-openapi/swag/path.go new file mode 100644 index 0000000..941bd01 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/path.go @@ -0,0 +1,59 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "os" + "path/filepath" + "runtime" + "strings" +) + +const ( + // GOPATHKey represents the env key for gopath + GOPATHKey = "GOPATH" +) + +// FindInSearchPath finds a package in a provided lists of paths +func FindInSearchPath(searchPath, pkg string) string { + pathsList := filepath.SplitList(searchPath) + for _, path := range pathsList { + if evaluatedPath, err := filepath.EvalSymlinks(filepath.Join(path, "src", pkg)); err == nil { + if _, err := os.Stat(evaluatedPath); err == nil { + return evaluatedPath + } + } + } + return "" +} + +// FindInGoSearchPath finds a package in the $GOPATH:$GOROOT +func FindInGoSearchPath(pkg string) string { + return FindInSearchPath(FullGoSearchPath(), pkg) +} + +// FullGoSearchPath gets the search paths for finding packages +func FullGoSearchPath() string { + allPaths := os.Getenv(GOPATHKey) + if allPaths == "" { + allPaths = filepath.Join(os.Getenv("HOME"), "go") + } + if allPaths != "" { + allPaths = strings.Join([]string{allPaths, runtime.GOROOT()}, ":") + } else { + allPaths = runtime.GOROOT() + } + return allPaths +} diff --git a/vendor/github.com/go-openapi/swag/post_go18.go b/vendor/github.com/go-openapi/swag/post_go18.go new file mode 100644 index 0000000..c2e686d --- /dev/null +++ b/vendor/github.com/go-openapi/swag/post_go18.go @@ -0,0 +1,23 @@ +// Copyright 2015 go-swagger maintainers +// +// 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. + +// +build go1.8 + +package swag + +import "net/url" + +func pathUnescape(path string) (string, error) { + return url.PathUnescape(path) +} diff --git a/vendor/github.com/go-openapi/swag/post_go19.go b/vendor/github.com/go-openapi/swag/post_go19.go new file mode 100644 index 0000000..eb2f2d8 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/post_go19.go @@ -0,0 +1,67 @@ +// Copyright 2015 go-swagger maintainers +// +// 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. + +// +build go1.9 + +package swag + +import ( + "sort" + "sync" +) + +// indexOfInitialisms is a thread-safe implementation of the sorted index of initialisms. +// Since go1.9, this may be implemented with sync.Map. +type indexOfInitialisms struct { + sortMutex *sync.Mutex + index *sync.Map +} + +func newIndexOfInitialisms() *indexOfInitialisms { + return &indexOfInitialisms{ + sortMutex: new(sync.Mutex), + index: new(sync.Map), + } +} + +func (m *indexOfInitialisms) load(initial map[string]bool) *indexOfInitialisms { + m.sortMutex.Lock() + defer m.sortMutex.Unlock() + for k, v := range initial { + m.index.Store(k, v) + } + return m +} + +func (m *indexOfInitialisms) isInitialism(key string) bool { + _, ok := m.index.Load(key) + return ok +} + +func (m *indexOfInitialisms) add(key string) *indexOfInitialisms { + m.index.Store(key, true) + return m +} + +func (m *indexOfInitialisms) sorted() (result []string) { + m.sortMutex.Lock() + defer m.sortMutex.Unlock() + m.index.Range(func(key, value interface{}) bool { + k := key.(string) + result = append(result, k) + return true + }) + sort.Sort(sort.Reverse(byInitialism(result))) + return +} diff --git a/vendor/github.com/go-openapi/swag/pre_go18.go b/vendor/github.com/go-openapi/swag/pre_go18.go new file mode 100644 index 0000000..6607f33 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/pre_go18.go @@ -0,0 +1,23 @@ +// Copyright 2015 go-swagger maintainers +// +// 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. + +// +build !go1.8 + +package swag + +import "net/url" + +func pathUnescape(path string) (string, error) { + return url.QueryUnescape(path) +} diff --git a/vendor/github.com/go-openapi/swag/pre_go19.go b/vendor/github.com/go-openapi/swag/pre_go19.go new file mode 100644 index 0000000..4bae187 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/pre_go19.go @@ -0,0 +1,69 @@ +// Copyright 2015 go-swagger maintainers +// +// 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. + +// +build !go1.9 + +package swag + +import ( + "sort" + "sync" +) + +// indexOfInitialisms is a thread-safe implementation of the sorted index of initialisms. +// Before go1.9, this may be implemented with a mutex on the map. +type indexOfInitialisms struct { + getMutex *sync.Mutex + index map[string]bool +} + +func newIndexOfInitialisms() *indexOfInitialisms { + return &indexOfInitialisms{ + getMutex: new(sync.Mutex), + index: make(map[string]bool, 50), + } +} + +func (m *indexOfInitialisms) load(initial map[string]bool) *indexOfInitialisms { + m.getMutex.Lock() + defer m.getMutex.Unlock() + for k, v := range initial { + m.index[k] = v + } + return m +} + +func (m *indexOfInitialisms) isInitialism(key string) bool { + m.getMutex.Lock() + defer m.getMutex.Unlock() + _, ok := m.index[key] + return ok +} + +func (m *indexOfInitialisms) add(key string) *indexOfInitialisms { + m.getMutex.Lock() + defer m.getMutex.Unlock() + m.index[key] = true + return m +} + +func (m *indexOfInitialisms) sorted() (result []string) { + m.getMutex.Lock() + defer m.getMutex.Unlock() + for k := range m.index { + result = append(result, k) + } + sort.Sort(sort.Reverse(byInitialism(result))) + return +} diff --git a/vendor/github.com/go-openapi/swag/split.go b/vendor/github.com/go-openapi/swag/split.go new file mode 100644 index 0000000..a1825fb --- /dev/null +++ b/vendor/github.com/go-openapi/swag/split.go @@ -0,0 +1,262 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "unicode" +) + +var nameReplaceTable = map[rune]string{ + '@': "At ", + '&': "And ", + '|': "Pipe ", + '$': "Dollar ", + '!': "Bang ", + '-': "", + '_': "", +} + +type ( + splitter struct { + postSplitInitialismCheck bool + initialisms []string + } + + splitterOption func(*splitter) *splitter +) + +// split calls the splitter; splitter provides more control and post options +func split(str string) []string { + lexems := newSplitter().split(str) + result := make([]string, 0, len(lexems)) + + for _, lexem := range lexems { + result = append(result, lexem.GetOriginal()) + } + + return result + +} + +func (s *splitter) split(str string) []nameLexem { + return s.toNameLexems(str) +} + +func newSplitter(options ...splitterOption) *splitter { + splitter := &splitter{ + postSplitInitialismCheck: false, + initialisms: initialisms, + } + + for _, option := range options { + splitter = option(splitter) + } + + return splitter +} + +// withPostSplitInitialismCheck allows to catch initialisms after main split process +func withPostSplitInitialismCheck(s *splitter) *splitter { + s.postSplitInitialismCheck = true + return s +} + +type ( + initialismMatch struct { + start, end int + body []rune + complete bool + } + initialismMatches []*initialismMatch +) + +func (s *splitter) toNameLexems(name string) []nameLexem { + nameRunes := []rune(name) + matches := s.gatherInitialismMatches(nameRunes) + return s.mapMatchesToNameLexems(nameRunes, matches) +} + +func (s *splitter) gatherInitialismMatches(nameRunes []rune) initialismMatches { + matches := make(initialismMatches, 0) + + for currentRunePosition, currentRune := range nameRunes { + newMatches := make(initialismMatches, 0, len(matches)) + + // check current initialism matches + for _, match := range matches { + if keepCompleteMatch := match.complete; keepCompleteMatch { + newMatches = append(newMatches, match) + continue + } + + // drop failed match + currentMatchRune := match.body[currentRunePosition-match.start] + if !s.initialismRuneEqual(currentMatchRune, currentRune) { + continue + } + + // try to complete ongoing match + if currentRunePosition-match.start == len(match.body)-1 { + // we are close; the next step is to check the symbol ahead + // if it is a small letter, then it is not the end of match + // but beginning of the next word + + if currentRunePosition < len(nameRunes)-1 { + nextRune := nameRunes[currentRunePosition+1] + if newWord := unicode.IsLower(nextRune); newWord { + // oh ok, it was the start of a new word + continue + } + } + + match.complete = true + match.end = currentRunePosition + } + + newMatches = append(newMatches, match) + } + + // check for new initialism matches + for _, initialism := range s.initialisms { + initialismRunes := []rune(initialism) + if s.initialismRuneEqual(initialismRunes[0], currentRune) { + newMatches = append(newMatches, &initialismMatch{ + start: currentRunePosition, + body: initialismRunes, + complete: false, + }) + } + } + + matches = newMatches + } + + return matches +} + +func (s *splitter) mapMatchesToNameLexems(nameRunes []rune, matches initialismMatches) []nameLexem { + nameLexems := make([]nameLexem, 0) + + var lastAcceptedMatch *initialismMatch + for _, match := range matches { + if !match.complete { + continue + } + + if firstMatch := lastAcceptedMatch == nil; firstMatch { + nameLexems = append(nameLexems, s.breakCasualString(nameRunes[:match.start])...) + nameLexems = append(nameLexems, s.breakInitialism(string(match.body))) + + lastAcceptedMatch = match + + continue + } + + if overlappedMatch := match.start <= lastAcceptedMatch.end; overlappedMatch { + continue + } + + middle := nameRunes[lastAcceptedMatch.end+1 : match.start] + nameLexems = append(nameLexems, s.breakCasualString(middle)...) + nameLexems = append(nameLexems, s.breakInitialism(string(match.body))) + + lastAcceptedMatch = match + } + + // we have not found any accepted matches + if lastAcceptedMatch == nil { + return s.breakCasualString(nameRunes) + } + + if lastAcceptedMatch.end+1 != len(nameRunes) { + rest := nameRunes[lastAcceptedMatch.end+1:] + nameLexems = append(nameLexems, s.breakCasualString(rest)...) + } + + return nameLexems +} + +func (s *splitter) initialismRuneEqual(a, b rune) bool { + return a == b +} + +func (s *splitter) breakInitialism(original string) nameLexem { + return newInitialismNameLexem(original, original) +} + +func (s *splitter) breakCasualString(str []rune) []nameLexem { + segments := make([]nameLexem, 0) + currentSegment := "" + + addCasualNameLexem := func(original string) { + segments = append(segments, newCasualNameLexem(original)) + } + + addInitialismNameLexem := func(original, match string) { + segments = append(segments, newInitialismNameLexem(original, match)) + } + + addNameLexem := func(original string) { + if s.postSplitInitialismCheck { + for _, initialism := range s.initialisms { + if upper(initialism) == upper(original) { + addInitialismNameLexem(original, initialism) + return + } + } + } + + addCasualNameLexem(original) + } + + for _, rn := range string(str) { + if replace, found := nameReplaceTable[rn]; found { + if currentSegment != "" { + addNameLexem(currentSegment) + currentSegment = "" + } + + if replace != "" { + addNameLexem(replace) + } + + continue + } + + if !unicode.In(rn, unicode.L, unicode.M, unicode.N, unicode.Pc) { + if currentSegment != "" { + addNameLexem(currentSegment) + currentSegment = "" + } + + continue + } + + if unicode.IsUpper(rn) { + if currentSegment != "" { + addNameLexem(currentSegment) + } + currentSegment = "" + } + + currentSegment += string(rn) + } + + if currentSegment != "" { + addNameLexem(currentSegment) + } + + return segments +} diff --git a/vendor/github.com/go-openapi/swag/util.go b/vendor/github.com/go-openapi/swag/util.go new file mode 100644 index 0000000..193702f --- /dev/null +++ b/vendor/github.com/go-openapi/swag/util.go @@ -0,0 +1,385 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "reflect" + "strings" + "unicode" +) + +// commonInitialisms are common acronyms that are kept as whole uppercased words. +var commonInitialisms *indexOfInitialisms + +// initialisms is a slice of sorted initialisms +var initialisms []string + +var isInitialism func(string) bool + +// GoNamePrefixFunc sets an optional rule to prefix go names +// which do not start with a letter. +// +// e.g. to help convert "123" into "{prefix}123" +// +// The default is to prefix with "X" +var GoNamePrefixFunc func(string) string + +func init() { + // Taken from https://github.com/golang/lint/blob/3390df4df2787994aea98de825b964ac7944b817/lint.go#L732-L769 + var configuredInitialisms = map[string]bool{ + "ACL": true, + "API": true, + "ASCII": true, + "CPU": true, + "CSS": true, + "DNS": true, + "EOF": true, + "GUID": true, + "HTML": true, + "HTTPS": true, + "HTTP": true, + "ID": true, + "IP": true, + "IPv4": true, + "IPv6": true, + "JSON": true, + "LHS": true, + "OAI": true, + "QPS": true, + "RAM": true, + "RHS": true, + "RPC": true, + "SLA": true, + "SMTP": true, + "SQL": true, + "SSH": true, + "TCP": true, + "TLS": true, + "TTL": true, + "UDP": true, + "UI": true, + "UID": true, + "UUID": true, + "URI": true, + "URL": true, + "UTF8": true, + "VM": true, + "XML": true, + "XMPP": true, + "XSRF": true, + "XSS": true, + } + + // a thread-safe index of initialisms + commonInitialisms = newIndexOfInitialisms().load(configuredInitialisms) + initialisms = commonInitialisms.sorted() + + // a test function + isInitialism = commonInitialisms.isInitialism +} + +const ( + // collectionFormatComma = "csv" + collectionFormatSpace = "ssv" + collectionFormatTab = "tsv" + collectionFormatPipe = "pipes" + collectionFormatMulti = "multi" +) + +// JoinByFormat joins a string array by a known format (e.g. swagger's collectionFormat attribute): +// ssv: space separated value +// tsv: tab separated value +// pipes: pipe (|) separated value +// csv: comma separated value (default) +func JoinByFormat(data []string, format string) []string { + if len(data) == 0 { + return data + } + var sep string + switch format { + case collectionFormatSpace: + sep = " " + case collectionFormatTab: + sep = "\t" + case collectionFormatPipe: + sep = "|" + case collectionFormatMulti: + return data + default: + sep = "," + } + return []string{strings.Join(data, sep)} +} + +// SplitByFormat splits a string by a known format: +// ssv: space separated value +// tsv: tab separated value +// pipes: pipe (|) separated value +// csv: comma separated value (default) +// +func SplitByFormat(data, format string) []string { + if data == "" { + return nil + } + var sep string + switch format { + case collectionFormatSpace: + sep = " " + case collectionFormatTab: + sep = "\t" + case collectionFormatPipe: + sep = "|" + case collectionFormatMulti: + return nil + default: + sep = "," + } + var result []string + for _, s := range strings.Split(data, sep) { + if ts := strings.TrimSpace(s); ts != "" { + result = append(result, ts) + } + } + return result +} + +type byInitialism []string + +func (s byInitialism) Len() int { + return len(s) +} +func (s byInitialism) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} +func (s byInitialism) Less(i, j int) bool { + if len(s[i]) != len(s[j]) { + return len(s[i]) < len(s[j]) + } + + return strings.Compare(s[i], s[j]) > 0 +} + +// Removes leading whitespaces +func trim(str string) string { + return strings.Trim(str, " ") +} + +// Shortcut to strings.ToUpper() +func upper(str string) string { + return strings.ToUpper(trim(str)) +} + +// Shortcut to strings.ToLower() +func lower(str string) string { + return strings.ToLower(trim(str)) +} + +// Camelize an uppercased word +func Camelize(word string) (camelized string) { + for pos, ru := range []rune(word) { + if pos > 0 { + camelized += string(unicode.ToLower(ru)) + } else { + camelized += string(unicode.ToUpper(ru)) + } + } + return +} + +// ToFileName lowercases and underscores a go type name +func ToFileName(name string) string { + in := split(name) + out := make([]string, 0, len(in)) + + for _, w := range in { + out = append(out, lower(w)) + } + + return strings.Join(out, "_") +} + +// ToCommandName lowercases and underscores a go type name +func ToCommandName(name string) string { + in := split(name) + out := make([]string, 0, len(in)) + + for _, w := range in { + out = append(out, lower(w)) + } + return strings.Join(out, "-") +} + +// ToHumanNameLower represents a code name as a human series of words +func ToHumanNameLower(name string) string { + in := newSplitter(withPostSplitInitialismCheck).split(name) + out := make([]string, 0, len(in)) + + for _, w := range in { + if !w.IsInitialism() { + out = append(out, lower(w.GetOriginal())) + } else { + out = append(out, w.GetOriginal()) + } + } + + return strings.Join(out, " ") +} + +// ToHumanNameTitle represents a code name as a human series of words with the first letters titleized +func ToHumanNameTitle(name string) string { + in := newSplitter(withPostSplitInitialismCheck).split(name) + + out := make([]string, 0, len(in)) + for _, w := range in { + original := w.GetOriginal() + if !w.IsInitialism() { + out = append(out, Camelize(original)) + } else { + out = append(out, original) + } + } + return strings.Join(out, " ") +} + +// ToJSONName camelcases a name which can be underscored or pascal cased +func ToJSONName(name string) string { + in := split(name) + out := make([]string, 0, len(in)) + + for i, w := range in { + if i == 0 { + out = append(out, lower(w)) + continue + } + out = append(out, Camelize(w)) + } + return strings.Join(out, "") +} + +// ToVarName camelcases a name which can be underscored or pascal cased +func ToVarName(name string) string { + res := ToGoName(name) + if isInitialism(res) { + return lower(res) + } + if len(res) <= 1 { + return lower(res) + } + return lower(res[:1]) + res[1:] +} + +// ToGoName translates a swagger name which can be underscored or camel cased to a name that golint likes +func ToGoName(name string) string { + lexems := newSplitter(withPostSplitInitialismCheck).split(name) + + result := "" + for _, lexem := range lexems { + goName := lexem.GetUnsafeGoName() + + // to support old behavior + if lexem.IsInitialism() { + goName = upper(goName) + } + result += goName + } + + if len(result) > 0 { + // Only prefix with X when the first character isn't an ascii letter + first := []rune(result)[0] + if !unicode.IsLetter(first) || (first > unicode.MaxASCII && !unicode.IsUpper(first)) { + if GoNamePrefixFunc == nil { + return "X" + result + } + result = GoNamePrefixFunc(name) + result + } + first = []rune(result)[0] + if unicode.IsLetter(first) && !unicode.IsUpper(first) { + result = string(append([]rune{unicode.ToUpper(first)}, []rune(result)[1:]...)) + } + } + + return result +} + +// ContainsStrings searches a slice of strings for a case-sensitive match +func ContainsStrings(coll []string, item string) bool { + for _, a := range coll { + if a == item { + return true + } + } + return false +} + +// ContainsStringsCI searches a slice of strings for a case-insensitive match +func ContainsStringsCI(coll []string, item string) bool { + for _, a := range coll { + if strings.EqualFold(a, item) { + return true + } + } + return false +} + +type zeroable interface { + IsZero() bool +} + +// IsZero returns true when the value passed into the function is a zero value. +// This allows for safer checking of interface values. +func IsZero(data interface{}) bool { + // check for things that have an IsZero method instead + if vv, ok := data.(zeroable); ok { + return vv.IsZero() + } + // continue with slightly more complex reflection + v := reflect.ValueOf(data) + switch v.Kind() { + case reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return v.IsNil() + case reflect.Struct, reflect.Array: + return reflect.DeepEqual(data, reflect.Zero(v.Type()).Interface()) + case reflect.Invalid: + return true + } + return false +} + +// AddInitialisms add additional initialisms +func AddInitialisms(words ...string) { + for _, word := range words { + // commonInitialisms[upper(word)] = true + commonInitialisms.add(upper(word)) + } + // sort again + initialisms = commonInitialisms.sorted() +} + +// CommandLineOptionsGroup represents a group of user-defined command line options +type CommandLineOptionsGroup struct { + ShortDescription string + LongDescription string + Options interface{} +} diff --git a/vendor/github.com/go-openapi/swag/yaml.go b/vendor/github.com/go-openapi/swag/yaml.go new file mode 100644 index 0000000..ec96914 --- /dev/null +++ b/vendor/github.com/go-openapi/swag/yaml.go @@ -0,0 +1,246 @@ +// Copyright 2015 go-swagger maintainers +// +// 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 swag + +import ( + "encoding/json" + "fmt" + "path/filepath" + "strconv" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" + yaml "gopkg.in/yaml.v2" +) + +// YAMLMatcher matches yaml +func YAMLMatcher(path string) bool { + ext := filepath.Ext(path) + return ext == ".yaml" || ext == ".yml" +} + +// YAMLToJSON converts YAML unmarshaled data into json compatible data +func YAMLToJSON(data interface{}) (json.RawMessage, error) { + jm, err := transformData(data) + if err != nil { + return nil, err + } + b, err := WriteJSON(jm) + return json.RawMessage(b), err +} + +// BytesToYAMLDoc converts a byte slice into a YAML document +func BytesToYAMLDoc(data []byte) (interface{}, error) { + var canary map[interface{}]interface{} // validate this is an object and not a different type + if err := yaml.Unmarshal(data, &canary); err != nil { + return nil, err + } + + var document yaml.MapSlice // preserve order that is present in the document + if err := yaml.Unmarshal(data, &document); err != nil { + return nil, err + } + return document, nil +} + +// JSONMapSlice represent a JSON object, with the order of keys maintained +type JSONMapSlice []JSONMapItem + +// MarshalJSON renders a JSONMapSlice as JSON +func (s JSONMapSlice) MarshalJSON() ([]byte, error) { + w := &jwriter.Writer{Flags: jwriter.NilMapAsEmpty | jwriter.NilSliceAsEmpty} + s.MarshalEasyJSON(w) + return w.BuildBytes() +} + +// MarshalEasyJSON renders a JSONMapSlice as JSON, using easyJSON +func (s JSONMapSlice) MarshalEasyJSON(w *jwriter.Writer) { + w.RawByte('{') + + ln := len(s) + last := ln - 1 + for i := 0; i < ln; i++ { + s[i].MarshalEasyJSON(w) + if i != last { // last item + w.RawByte(',') + } + } + + w.RawByte('}') +} + +// UnmarshalJSON makes a JSONMapSlice from JSON +func (s *JSONMapSlice) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + s.UnmarshalEasyJSON(&l) + return l.Error() +} + +// UnmarshalEasyJSON makes a JSONMapSlice from JSON, using easyJSON +func (s *JSONMapSlice) UnmarshalEasyJSON(in *jlexer.Lexer) { + if in.IsNull() { + in.Skip() + return + } + + var result JSONMapSlice + in.Delim('{') + for !in.IsDelim('}') { + var mi JSONMapItem + mi.UnmarshalEasyJSON(in) + result = append(result, mi) + } + *s = result +} + +// JSONMapItem represents the value of a key in a JSON object held by JSONMapSlice +type JSONMapItem struct { + Key string + Value interface{} +} + +// MarshalJSON renders a JSONMapItem as JSON +func (s JSONMapItem) MarshalJSON() ([]byte, error) { + w := &jwriter.Writer{Flags: jwriter.NilMapAsEmpty | jwriter.NilSliceAsEmpty} + s.MarshalEasyJSON(w) + return w.BuildBytes() +} + +// MarshalEasyJSON renders a JSONMapItem as JSON, using easyJSON +func (s JSONMapItem) MarshalEasyJSON(w *jwriter.Writer) { + w.String(s.Key) + w.RawByte(':') + w.Raw(WriteJSON(s.Value)) +} + +// UnmarshalJSON makes a JSONMapItem from JSON +func (s *JSONMapItem) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + s.UnmarshalEasyJSON(&l) + return l.Error() +} + +// UnmarshalEasyJSON makes a JSONMapItem from JSON, using easyJSON +func (s *JSONMapItem) UnmarshalEasyJSON(in *jlexer.Lexer) { + key := in.UnsafeString() + in.WantColon() + value := in.Interface() + in.WantComma() + s.Key = key + s.Value = value +} + +func transformData(input interface{}) (out interface{}, err error) { + format := func(t interface{}) (string, error) { + switch k := t.(type) { + case string: + return k, nil + case uint: + return strconv.FormatUint(uint64(k), 10), nil + case uint8: + return strconv.FormatUint(uint64(k), 10), nil + case uint16: + return strconv.FormatUint(uint64(k), 10), nil + case uint32: + return strconv.FormatUint(uint64(k), 10), nil + case uint64: + return strconv.FormatUint(k, 10), nil + case int: + return strconv.Itoa(k), nil + case int8: + return strconv.FormatInt(int64(k), 10), nil + case int16: + return strconv.FormatInt(int64(k), 10), nil + case int32: + return strconv.FormatInt(int64(k), 10), nil + case int64: + return strconv.FormatInt(k, 10), nil + default: + return "", fmt.Errorf("unexpected map key type, got: %T", k) + } + } + + switch in := input.(type) { + case yaml.MapSlice: + + o := make(JSONMapSlice, len(in)) + for i, mi := range in { + var nmi JSONMapItem + if nmi.Key, err = format(mi.Key); err != nil { + return nil, err + } + + v, ert := transformData(mi.Value) + if ert != nil { + return nil, ert + } + nmi.Value = v + o[i] = nmi + } + return o, nil + case map[interface{}]interface{}: + o := make(JSONMapSlice, 0, len(in)) + for ke, va := range in { + var nmi JSONMapItem + if nmi.Key, err = format(ke); err != nil { + return nil, err + } + + v, ert := transformData(va) + if ert != nil { + return nil, ert + } + nmi.Value = v + o = append(o, nmi) + } + return o, nil + case []interface{}: + len1 := len(in) + o := make([]interface{}, len1) + for i := 0; i < len1; i++ { + o[i], err = transformData(in[i]) + if err != nil { + return nil, err + } + } + return o, nil + } + return input, nil +} + +// YAMLDoc loads a yaml document from either http or a file and converts it to json +func YAMLDoc(path string) (json.RawMessage, error) { + yamlDoc, err := YAMLData(path) + if err != nil { + return nil, err + } + + data, err := YAMLToJSON(yamlDoc) + if err != nil { + return nil, err + } + + return data, nil +} + +// YAMLData loads a yaml document from either http or a file +func YAMLData(path string) (interface{}, error) { + data, err := LoadFromFileOrHTTP(path) + if err != nil { + return nil, err + } + + return BytesToYAMLDoc(data) +} diff --git a/vendor/github.com/josharian/intern/README.md b/vendor/github.com/josharian/intern/README.md new file mode 100644 index 0000000..ffc44b2 --- /dev/null +++ b/vendor/github.com/josharian/intern/README.md @@ -0,0 +1,5 @@ +Docs: https://godoc.org/github.com/josharian/intern + +See also [Go issue 5160](https://golang.org/issue/5160). + +License: MIT diff --git a/vendor/github.com/josharian/intern/intern.go b/vendor/github.com/josharian/intern/intern.go new file mode 100644 index 0000000..7acb1fe --- /dev/null +++ b/vendor/github.com/josharian/intern/intern.go @@ -0,0 +1,44 @@ +// Package intern interns strings. +// Interning is best effort only. +// Interned strings may be removed automatically +// at any time without notification. +// All functions may be called concurrently +// with themselves and each other. +package intern + +import "sync" + +var ( + pool sync.Pool = sync.Pool{ + New: func() interface{} { + return make(map[string]string) + }, + } +) + +// String returns s, interned. +func String(s string) string { + m := pool.Get().(map[string]string) + c, ok := m[s] + if ok { + pool.Put(m) + return c + } + m[s] = s + pool.Put(m) + return s +} + +// Bytes returns b converted to a string, interned. +func Bytes(b []byte) string { + m := pool.Get().(map[string]string) + c, ok := m[string(b)] + if ok { + pool.Put(m) + return c + } + s := string(b) + m[s] = s + pool.Put(m) + return s +} diff --git a/vendor/github.com/josharian/intern/license.md b/vendor/github.com/josharian/intern/license.md new file mode 100644 index 0000000..353d305 --- /dev/null +++ b/vendor/github.com/josharian/intern/license.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Josh Bleecher Snyder + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/mailru/easyjson/LICENSE b/vendor/github.com/mailru/easyjson/LICENSE new file mode 100644 index 0000000..fbff658 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2016 Mail.Ru Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/mailru/easyjson/buffer/pool.go b/vendor/github.com/mailru/easyjson/buffer/pool.go new file mode 100644 index 0000000..598a54a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/buffer/pool.go @@ -0,0 +1,278 @@ +// Package buffer implements a buffer for serialization, consisting of a chain of []byte-s to +// reduce copying and to allow reuse of individual chunks. +package buffer + +import ( + "io" + "net" + "sync" +) + +// PoolConfig contains configuration for the allocation and reuse strategy. +type PoolConfig struct { + StartSize int // Minimum chunk size that is allocated. + PooledSize int // Minimum chunk size that is reused, reusing chunks too small will result in overhead. + MaxSize int // Maximum chunk size that will be allocated. +} + +var config = PoolConfig{ + StartSize: 128, + PooledSize: 512, + MaxSize: 32768, +} + +// Reuse pool: chunk size -> pool. +var buffers = map[int]*sync.Pool{} + +func initBuffers() { + for l := config.PooledSize; l <= config.MaxSize; l *= 2 { + buffers[l] = new(sync.Pool) + } +} + +func init() { + initBuffers() +} + +// Init sets up a non-default pooling and allocation strategy. Should be run before serialization is done. +func Init(cfg PoolConfig) { + config = cfg + initBuffers() +} + +// putBuf puts a chunk to reuse pool if it can be reused. +func putBuf(buf []byte) { + size := cap(buf) + if size < config.PooledSize { + return + } + if c := buffers[size]; c != nil { + c.Put(buf[:0]) + } +} + +// getBuf gets a chunk from reuse pool or creates a new one if reuse failed. +func getBuf(size int) []byte { + if size >= config.PooledSize { + if c := buffers[size]; c != nil { + v := c.Get() + if v != nil { + return v.([]byte) + } + } + } + return make([]byte, 0, size) +} + +// Buffer is a buffer optimized for serialization without extra copying. +type Buffer struct { + + // Buf is the current chunk that can be used for serialization. + Buf []byte + + toPool []byte + bufs [][]byte +} + +// EnsureSpace makes sure that the current chunk contains at least s free bytes, +// possibly creating a new chunk. +func (b *Buffer) EnsureSpace(s int) { + if cap(b.Buf)-len(b.Buf) < s { + b.ensureSpaceSlow(s) + } +} + +func (b *Buffer) ensureSpaceSlow(s int) { + l := len(b.Buf) + if l > 0 { + if cap(b.toPool) != cap(b.Buf) { + // Chunk was reallocated, toPool can be pooled. + putBuf(b.toPool) + } + if cap(b.bufs) == 0 { + b.bufs = make([][]byte, 0, 8) + } + b.bufs = append(b.bufs, b.Buf) + l = cap(b.toPool) * 2 + } else { + l = config.StartSize + } + + if l > config.MaxSize { + l = config.MaxSize + } + b.Buf = getBuf(l) + b.toPool = b.Buf +} + +// AppendByte appends a single byte to buffer. +func (b *Buffer) AppendByte(data byte) { + b.EnsureSpace(1) + b.Buf = append(b.Buf, data) +} + +// AppendBytes appends a byte slice to buffer. +func (b *Buffer) AppendBytes(data []byte) { + if len(data) <= cap(b.Buf)-len(b.Buf) { + b.Buf = append(b.Buf, data...) // fast path + } else { + b.appendBytesSlow(data) + } +} + +func (b *Buffer) appendBytesSlow(data []byte) { + for len(data) > 0 { + b.EnsureSpace(1) + + sz := cap(b.Buf) - len(b.Buf) + if sz > len(data) { + sz = len(data) + } + + b.Buf = append(b.Buf, data[:sz]...) + data = data[sz:] + } +} + +// AppendString appends a string to buffer. +func (b *Buffer) AppendString(data string) { + if len(data) <= cap(b.Buf)-len(b.Buf) { + b.Buf = append(b.Buf, data...) // fast path + } else { + b.appendStringSlow(data) + } +} + +func (b *Buffer) appendStringSlow(data string) { + for len(data) > 0 { + b.EnsureSpace(1) + + sz := cap(b.Buf) - len(b.Buf) + if sz > len(data) { + sz = len(data) + } + + b.Buf = append(b.Buf, data[:sz]...) + data = data[sz:] + } +} + +// Size computes the size of a buffer by adding sizes of every chunk. +func (b *Buffer) Size() int { + size := len(b.Buf) + for _, buf := range b.bufs { + size += len(buf) + } + return size +} + +// DumpTo outputs the contents of a buffer to a writer and resets the buffer. +func (b *Buffer) DumpTo(w io.Writer) (written int, err error) { + bufs := net.Buffers(b.bufs) + if len(b.Buf) > 0 { + bufs = append(bufs, b.Buf) + } + n, err := bufs.WriteTo(w) + + for _, buf := range b.bufs { + putBuf(buf) + } + putBuf(b.toPool) + + b.bufs = nil + b.Buf = nil + b.toPool = nil + + return int(n), err +} + +// BuildBytes creates a single byte slice with all the contents of the buffer. Data is +// copied if it does not fit in a single chunk. You can optionally provide one byte +// slice as argument that it will try to reuse. +func (b *Buffer) BuildBytes(reuse ...[]byte) []byte { + if len(b.bufs) == 0 { + ret := b.Buf + b.toPool = nil + b.Buf = nil + return ret + } + + var ret []byte + size := b.Size() + + // If we got a buffer as argument and it is big enough, reuse it. + if len(reuse) == 1 && cap(reuse[0]) >= size { + ret = reuse[0][:0] + } else { + ret = make([]byte, 0, size) + } + for _, buf := range b.bufs { + ret = append(ret, buf...) + putBuf(buf) + } + + ret = append(ret, b.Buf...) + putBuf(b.toPool) + + b.bufs = nil + b.toPool = nil + b.Buf = nil + + return ret +} + +type readCloser struct { + offset int + bufs [][]byte +} + +func (r *readCloser) Read(p []byte) (n int, err error) { + for _, buf := range r.bufs { + // Copy as much as we can. + x := copy(p[n:], buf[r.offset:]) + n += x // Increment how much we filled. + + // Did we empty the whole buffer? + if r.offset+x == len(buf) { + // On to the next buffer. + r.offset = 0 + r.bufs = r.bufs[1:] + + // We can release this buffer. + putBuf(buf) + } else { + r.offset += x + } + + if n == len(p) { + break + } + } + // No buffers left or nothing read? + if len(r.bufs) == 0 { + err = io.EOF + } + return +} + +func (r *readCloser) Close() error { + // Release all remaining buffers. + for _, buf := range r.bufs { + putBuf(buf) + } + // In case Close gets called multiple times. + r.bufs = nil + + return nil +} + +// ReadCloser creates an io.ReadCloser with all the contents of the buffer. +func (b *Buffer) ReadCloser() io.ReadCloser { + ret := &readCloser{0, append(b.bufs, b.Buf)} + + b.bufs = nil + b.toPool = nil + b.Buf = nil + + return ret +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go new file mode 100644 index 0000000..ff7b27c --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go @@ -0,0 +1,24 @@ +// This file will only be included to the build if neither +// easyjson_nounsafe nor appengine build tag is set. See README notes +// for more details. + +//+build !easyjson_nounsafe +//+build !appengine + +package jlexer + +import ( + "reflect" + "unsafe" +) + +// bytesToStr creates a string pointing at the slice to avoid copying. +// +// Warning: the string returned by the function should be used with care, as the whole input data +// chunk may be either blocked from being freed by GC because of a single string or the buffer.Data +// may be garbage-collected even when the string exists. +func bytesToStr(data []byte) string { + h := (*reflect.SliceHeader)(unsafe.Pointer(&data)) + shdr := reflect.StringHeader{Data: h.Data, Len: h.Len} + return *(*string)(unsafe.Pointer(&shdr)) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go new file mode 100644 index 0000000..864d1be --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go @@ -0,0 +1,13 @@ +// This file is included to the build if any of the buildtags below +// are defined. Refer to README notes for more details. + +//+build easyjson_nounsafe appengine + +package jlexer + +// bytesToStr creates a string normally from []byte +// +// Note that this method is roughly 1.5x slower than using the 'unsafe' method. +func bytesToStr(data []byte) string { + return string(data) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/error.go b/vendor/github.com/mailru/easyjson/jlexer/error.go new file mode 100644 index 0000000..e90ec40 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/error.go @@ -0,0 +1,15 @@ +package jlexer + +import "fmt" + +// LexerError implements the error interface and represents all possible errors that can be +// generated during parsing the JSON data. +type LexerError struct { + Reason string + Offset int + Data string +} + +func (l *LexerError) Error() string { + return fmt.Sprintf("parse error: %s near offset %d of '%s'", l.Reason, l.Offset, l.Data) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go new file mode 100644 index 0000000..b5f5e26 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go @@ -0,0 +1,1244 @@ +// Package jlexer contains a JSON lexer implementation. +// +// It is expected that it is mostly used with generated parser code, so the interface is tuned +// for a parser that knows what kind of data is expected. +package jlexer + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "strconv" + "unicode" + "unicode/utf16" + "unicode/utf8" + + "github.com/josharian/intern" +) + +// tokenKind determines type of a token. +type tokenKind byte + +const ( + tokenUndef tokenKind = iota // No token. + tokenDelim // Delimiter: one of '{', '}', '[' or ']'. + tokenString // A string literal, e.g. "abc\u1234" + tokenNumber // Number literal, e.g. 1.5e5 + tokenBool // Boolean literal: true or false. + tokenNull // null keyword. +) + +// token describes a single token: type, position in the input and value. +type token struct { + kind tokenKind // Type of a token. + + boolValue bool // Value if a boolean literal token. + byteValueCloned bool // true if byteValue was allocated and does not refer to original json body + byteValue []byte // Raw value of a token. + delimValue byte +} + +// Lexer is a JSON lexer: it iterates over JSON tokens in a byte slice. +type Lexer struct { + Data []byte // Input data given to the lexer. + + start int // Start of the current token. + pos int // Current unscanned position in the input stream. + token token // Last scanned token, if token.kind != tokenUndef. + + firstElement bool // Whether current element is the first in array or an object. + wantSep byte // A comma or a colon character, which need to occur before a token. + + UseMultipleErrors bool // If we want to use multiple errors. + fatalError error // Fatal error occurred during lexing. It is usually a syntax error. + multipleErrors []*LexerError // Semantic errors occurred during lexing. Marshalling will be continued after finding this errors. +} + +// FetchToken scans the input for the next token. +func (r *Lexer) FetchToken() { + r.token.kind = tokenUndef + r.start = r.pos + + // Check if r.Data has r.pos element + // If it doesn't, it mean corrupted input data + if len(r.Data) < r.pos { + r.errParse("Unexpected end of data") + return + } + // Determine the type of a token by skipping whitespace and reading the + // first character. + for _, c := range r.Data[r.pos:] { + switch c { + case ':', ',': + if r.wantSep == c { + r.pos++ + r.start++ + r.wantSep = 0 + } else { + r.errSyntax() + } + + case ' ', '\t', '\r', '\n': + r.pos++ + r.start++ + + case '"': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenString + r.fetchString() + return + + case '{', '[': + if r.wantSep != 0 { + r.errSyntax() + } + r.firstElement = true + r.token.kind = tokenDelim + r.token.delimValue = r.Data[r.pos] + r.pos++ + return + + case '}', ']': + if !r.firstElement && (r.wantSep != ',') { + r.errSyntax() + } + r.wantSep = 0 + r.token.kind = tokenDelim + r.token.delimValue = r.Data[r.pos] + r.pos++ + return + + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-': + if r.wantSep != 0 { + r.errSyntax() + } + r.token.kind = tokenNumber + r.fetchNumber() + return + + case 'n': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenNull + r.fetchNull() + return + + case 't': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenBool + r.token.boolValue = true + r.fetchTrue() + return + + case 'f': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenBool + r.token.boolValue = false + r.fetchFalse() + return + + default: + r.errSyntax() + return + } + } + r.fatalError = io.EOF + return +} + +// isTokenEnd returns true if the char can follow a non-delimiter token +func isTokenEnd(c byte) bool { + return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == ':' +} + +// fetchNull fetches and checks remaining bytes of null keyword. +func (r *Lexer) fetchNull() { + r.pos += 4 + if r.pos > len(r.Data) || + r.Data[r.pos-3] != 'u' || + r.Data[r.pos-2] != 'l' || + r.Data[r.pos-1] != 'l' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 4 + r.errSyntax() + } +} + +// fetchTrue fetches and checks remaining bytes of true keyword. +func (r *Lexer) fetchTrue() { + r.pos += 4 + if r.pos > len(r.Data) || + r.Data[r.pos-3] != 'r' || + r.Data[r.pos-2] != 'u' || + r.Data[r.pos-1] != 'e' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 4 + r.errSyntax() + } +} + +// fetchFalse fetches and checks remaining bytes of false keyword. +func (r *Lexer) fetchFalse() { + r.pos += 5 + if r.pos > len(r.Data) || + r.Data[r.pos-4] != 'a' || + r.Data[r.pos-3] != 'l' || + r.Data[r.pos-2] != 's' || + r.Data[r.pos-1] != 'e' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 5 + r.errSyntax() + } +} + +// fetchNumber scans a number literal token. +func (r *Lexer) fetchNumber() { + hasE := false + afterE := false + hasDot := false + + r.pos++ + for i, c := range r.Data[r.pos:] { + switch { + case c >= '0' && c <= '9': + afterE = false + case c == '.' && !hasDot: + hasDot = true + case (c == 'e' || c == 'E') && !hasE: + hasE = true + hasDot = true + afterE = true + case (c == '+' || c == '-') && afterE: + afterE = false + default: + r.pos += i + if !isTokenEnd(c) { + r.errSyntax() + } else { + r.token.byteValue = r.Data[r.start:r.pos] + } + return + } + } + + r.pos = len(r.Data) + r.token.byteValue = r.Data[r.start:] +} + +// findStringLen tries to scan into the string literal for ending quote char to determine required size. +// The size will be exact if no escapes are present and may be inexact if there are escaped chars. +func findStringLen(data []byte) (isValid bool, length int) { + for { + idx := bytes.IndexByte(data, '"') + if idx == -1 { + return false, len(data) + } + if idx == 0 || (idx > 0 && data[idx-1] != '\\') { + return true, length + idx + } + + // count \\\\\\\ sequences. even number of slashes means quote is not really escaped + cnt := 1 + for idx-cnt-1 >= 0 && data[idx-cnt-1] == '\\' { + cnt++ + } + if cnt%2 == 0 { + return true, length + idx + } + + length += idx + 1 + data = data[idx+1:] + } +} + +// unescapeStringToken performs unescaping of string token. +// if no escaping is needed, original string is returned, otherwise - a new one allocated +func (r *Lexer) unescapeStringToken() (err error) { + data := r.token.byteValue + var unescapedData []byte + + for { + i := bytes.IndexByte(data, '\\') + if i == -1 { + break + } + + escapedRune, escapedBytes, err := decodeEscape(data[i:]) + if err != nil { + r.errParse(err.Error()) + return err + } + + if unescapedData == nil { + unescapedData = make([]byte, 0, len(r.token.byteValue)) + } + + var d [4]byte + s := utf8.EncodeRune(d[:], escapedRune) + unescapedData = append(unescapedData, data[:i]...) + unescapedData = append(unescapedData, d[:s]...) + + data = data[i+escapedBytes:] + } + + if unescapedData != nil { + r.token.byteValue = append(unescapedData, data...) + r.token.byteValueCloned = true + } + return +} + +// getu4 decodes \uXXXX from the beginning of s, returning the hex value, +// or it returns -1. +func getu4(s []byte) rune { + if len(s) < 6 || s[0] != '\\' || s[1] != 'u' { + return -1 + } + var val rune + for i := 2; i < len(s) && i < 6; i++ { + var v byte + c := s[i] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + v = c - '0' + case 'a', 'b', 'c', 'd', 'e', 'f': + v = c - 'a' + 10 + case 'A', 'B', 'C', 'D', 'E', 'F': + v = c - 'A' + 10 + default: + return -1 + } + + val <<= 4 + val |= rune(v) + } + return val +} + +// decodeEscape processes a single escape sequence and returns number of bytes processed. +func decodeEscape(data []byte) (decoded rune, bytesProcessed int, err error) { + if len(data) < 2 { + return 0, 0, errors.New("incorrect escape symbol \\ at the end of token") + } + + c := data[1] + switch c { + case '"', '/', '\\': + return rune(c), 2, nil + case 'b': + return '\b', 2, nil + case 'f': + return '\f', 2, nil + case 'n': + return '\n', 2, nil + case 'r': + return '\r', 2, nil + case 't': + return '\t', 2, nil + case 'u': + rr := getu4(data) + if rr < 0 { + return 0, 0, errors.New("incorrectly escaped \\uXXXX sequence") + } + + read := 6 + if utf16.IsSurrogate(rr) { + rr1 := getu4(data[read:]) + if dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar { + read += 6 + rr = dec + } else { + rr = unicode.ReplacementChar + } + } + return rr, read, nil + } + + return 0, 0, errors.New("incorrectly escaped bytes") +} + +// fetchString scans a string literal token. +func (r *Lexer) fetchString() { + r.pos++ + data := r.Data[r.pos:] + + isValid, length := findStringLen(data) + if !isValid { + r.pos += length + r.errParse("unterminated string literal") + return + } + r.token.byteValue = data[:length] + r.pos += length + 1 // skip closing '"' as well +} + +// scanToken scans the next token if no token is currently available in the lexer. +func (r *Lexer) scanToken() { + if r.token.kind != tokenUndef || r.fatalError != nil { + return + } + + r.FetchToken() +} + +// consume resets the current token to allow scanning the next one. +func (r *Lexer) consume() { + r.token.kind = tokenUndef + r.token.byteValueCloned = false + r.token.delimValue = 0 +} + +// Ok returns true if no error (including io.EOF) was encountered during scanning. +func (r *Lexer) Ok() bool { + return r.fatalError == nil +} + +const maxErrorContextLen = 13 + +func (r *Lexer) errParse(what string) { + if r.fatalError == nil { + var str string + if len(r.Data)-r.pos <= maxErrorContextLen { + str = string(r.Data) + } else { + str = string(r.Data[r.pos:r.pos+maxErrorContextLen-3]) + "..." + } + r.fatalError = &LexerError{ + Reason: what, + Offset: r.pos, + Data: str, + } + } +} + +func (r *Lexer) errSyntax() { + r.errParse("syntax error") +} + +func (r *Lexer) errInvalidToken(expected string) { + if r.fatalError != nil { + return + } + if r.UseMultipleErrors { + r.pos = r.start + r.consume() + r.SkipRecursive() + switch expected { + case "[": + r.token.delimValue = ']' + r.token.kind = tokenDelim + case "{": + r.token.delimValue = '}' + r.token.kind = tokenDelim + } + r.addNonfatalError(&LexerError{ + Reason: fmt.Sprintf("expected %s", expected), + Offset: r.start, + Data: string(r.Data[r.start:r.pos]), + }) + return + } + + var str string + if len(r.token.byteValue) <= maxErrorContextLen { + str = string(r.token.byteValue) + } else { + str = string(r.token.byteValue[:maxErrorContextLen-3]) + "..." + } + r.fatalError = &LexerError{ + Reason: fmt.Sprintf("expected %s", expected), + Offset: r.pos, + Data: str, + } +} + +func (r *Lexer) GetPos() int { + return r.pos +} + +// Delim consumes a token and verifies that it is the given delimiter. +func (r *Lexer) Delim(c byte) { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + + if !r.Ok() || r.token.delimValue != c { + r.consume() // errInvalidToken can change token if UseMultipleErrors is enabled. + r.errInvalidToken(string([]byte{c})) + } else { + r.consume() + } +} + +// IsDelim returns true if there was no scanning error and next token is the given delimiter. +func (r *Lexer) IsDelim(c byte) bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + return !r.Ok() || r.token.delimValue == c +} + +// Null verifies that the next token is null and consumes it. +func (r *Lexer) Null() { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenNull { + r.errInvalidToken("null") + } + r.consume() +} + +// IsNull returns true if the next token is a null keyword. +func (r *Lexer) IsNull() bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + return r.Ok() && r.token.kind == tokenNull +} + +// Skip skips a single token. +func (r *Lexer) Skip() { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + r.consume() +} + +// SkipRecursive skips next array or object completely, or just skips a single token if not +// an array/object. +// +// Note: no syntax validation is performed on the skipped data. +func (r *Lexer) SkipRecursive() { + r.scanToken() + var start, end byte + startPos := r.start + + switch r.token.delimValue { + case '{': + start, end = '{', '}' + case '[': + start, end = '[', ']' + default: + r.consume() + return + } + + r.consume() + + level := 1 + inQuotes := false + wasEscape := false + + for i, c := range r.Data[r.pos:] { + switch { + case c == start && !inQuotes: + level++ + case c == end && !inQuotes: + level-- + if level == 0 { + r.pos += i + 1 + if !json.Valid(r.Data[startPos:r.pos]) { + r.pos = len(r.Data) + r.fatalError = &LexerError{ + Reason: "skipped array/object json value is invalid", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + } + } + return + } + case c == '\\' && inQuotes: + wasEscape = !wasEscape + continue + case c == '"' && inQuotes: + inQuotes = wasEscape + case c == '"': + inQuotes = true + } + wasEscape = false + } + r.pos = len(r.Data) + r.fatalError = &LexerError{ + Reason: "EOF reached while skipping array/object or token", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + } +} + +// Raw fetches the next item recursively as a data slice +func (r *Lexer) Raw() []byte { + r.SkipRecursive() + if !r.Ok() { + return nil + } + return r.Data[r.start:r.pos] +} + +// IsStart returns whether the lexer is positioned at the start +// of an input string. +func (r *Lexer) IsStart() bool { + return r.pos == 0 +} + +// Consumed reads all remaining bytes from the input, publishing an error if +// there is anything but whitespace remaining. +func (r *Lexer) Consumed() { + if r.pos > len(r.Data) || !r.Ok() { + return + } + + for _, c := range r.Data[r.pos:] { + if c != ' ' && c != '\t' && c != '\r' && c != '\n' { + r.AddError(&LexerError{ + Reason: "invalid character '" + string(c) + "' after top-level value", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + }) + return + } + + r.pos++ + r.start++ + } +} + +func (r *Lexer) unsafeString(skipUnescape bool) (string, []byte) { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return "", nil + } + if !skipUnescape { + if err := r.unescapeStringToken(); err != nil { + r.errInvalidToken("string") + return "", nil + } + } + + bytes := r.token.byteValue + ret := bytesToStr(r.token.byteValue) + r.consume() + return ret, bytes +} + +// UnsafeString returns the string value if the token is a string literal. +// +// Warning: returned string may point to the input buffer, so the string should not outlive +// the input buffer. Intended pattern of usage is as an argument to a switch statement. +func (r *Lexer) UnsafeString() string { + ret, _ := r.unsafeString(false) + return ret +} + +// UnsafeBytes returns the byte slice if the token is a string literal. +func (r *Lexer) UnsafeBytes() []byte { + _, ret := r.unsafeString(false) + return ret +} + +// UnsafeFieldName returns current member name string token +func (r *Lexer) UnsafeFieldName(skipUnescape bool) string { + ret, _ := r.unsafeString(skipUnescape) + return ret +} + +// String reads a string literal. +func (r *Lexer) String() string { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return "" + } + if err := r.unescapeStringToken(); err != nil { + r.errInvalidToken("string") + return "" + } + var ret string + if r.token.byteValueCloned { + ret = bytesToStr(r.token.byteValue) + } else { + ret = string(r.token.byteValue) + } + r.consume() + return ret +} + +// StringIntern reads a string literal, and performs string interning on it. +func (r *Lexer) StringIntern() string { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return "" + } + if err := r.unescapeStringToken(); err != nil { + r.errInvalidToken("string") + return "" + } + ret := intern.Bytes(r.token.byteValue) + r.consume() + return ret +} + +// Bytes reads a string literal and base64 decodes it into a byte slice. +func (r *Lexer) Bytes() []byte { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return nil + } + if err := r.unescapeStringToken(); err != nil { + r.errInvalidToken("string") + return nil + } + ret := make([]byte, base64.StdEncoding.DecodedLen(len(r.token.byteValue))) + n, err := base64.StdEncoding.Decode(ret, r.token.byteValue) + if err != nil { + r.fatalError = &LexerError{ + Reason: err.Error(), + } + return nil + } + + r.consume() + return ret[:n] +} + +// Bool reads a true or false boolean keyword. +func (r *Lexer) Bool() bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenBool { + r.errInvalidToken("bool") + return false + } + ret := r.token.boolValue + r.consume() + return ret +} + +func (r *Lexer) number() string { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenNumber { + r.errInvalidToken("number") + return "" + } + ret := bytesToStr(r.token.byteValue) + r.consume() + return ret +} + +func (r *Lexer) Uint8() uint8 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint8(n) +} + +func (r *Lexer) Uint16() uint16 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint16(n) +} + +func (r *Lexer) Uint32() uint32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint32(n) +} + +func (r *Lexer) Uint64() uint64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Uint() uint { + return uint(r.Uint64()) +} + +func (r *Lexer) Int8() int8 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int8(n) +} + +func (r *Lexer) Int16() int16 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int16(n) +} + +func (r *Lexer) Int32() int32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int32(n) +} + +func (r *Lexer) Int64() int64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Int() int { + return int(r.Int64()) +} + +func (r *Lexer) Uint8Str() uint8 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint8(n) +} + +func (r *Lexer) Uint16Str() uint16 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint16(n) +} + +func (r *Lexer) Uint32Str() uint32 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint32(n) +} + +func (r *Lexer) Uint64Str() uint64 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) UintStr() uint { + return uint(r.Uint64Str()) +} + +func (r *Lexer) UintptrStr() uintptr { + return uintptr(r.Uint64Str()) +} + +func (r *Lexer) Int8Str() int8 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int8(n) +} + +func (r *Lexer) Int16Str() int16 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int16(n) +} + +func (r *Lexer) Int32Str() int32 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int32(n) +} + +func (r *Lexer) Int64Str() int64 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) IntStr() int { + return int(r.Int64Str()) +} + +func (r *Lexer) Float32() float32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseFloat(s, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return float32(n) +} + +func (r *Lexer) Float32Str() float32 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + n, err := strconv.ParseFloat(s, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return float32(n) +} + +func (r *Lexer) Float64() float64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseFloat(s, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Float64Str() float64 { + s, b := r.unsafeString(false) + if !r.Ok() { + return 0 + } + n, err := strconv.ParseFloat(s, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) Error() error { + return r.fatalError +} + +func (r *Lexer) AddError(e error) { + if r.fatalError == nil { + r.fatalError = e + } +} + +func (r *Lexer) AddNonFatalError(e error) { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Data: string(r.Data[r.start:r.pos]), + Reason: e.Error(), + }) +} + +func (r *Lexer) addNonfatalError(err *LexerError) { + if r.UseMultipleErrors { + // We don't want to add errors with the same offset. + if len(r.multipleErrors) != 0 && r.multipleErrors[len(r.multipleErrors)-1].Offset == err.Offset { + return + } + r.multipleErrors = append(r.multipleErrors, err) + return + } + r.fatalError = err +} + +func (r *Lexer) GetNonFatalErrors() []*LexerError { + return r.multipleErrors +} + +// JsonNumber fetches and json.Number from 'encoding/json' package. +// Both int, float or string, contains them are valid values +func (r *Lexer) JsonNumber() json.Number { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() { + r.errInvalidToken("json.Number") + return json.Number("") + } + + switch r.token.kind { + case tokenString: + return json.Number(r.String()) + case tokenNumber: + return json.Number(r.Raw()) + case tokenNull: + r.Null() + return json.Number("") + default: + r.errSyntax() + return json.Number("") + } +} + +// Interface fetches an interface{} analogous to the 'encoding/json' package. +func (r *Lexer) Interface() interface{} { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + + if !r.Ok() { + return nil + } + switch r.token.kind { + case tokenString: + return r.String() + case tokenNumber: + return r.Float64() + case tokenBool: + return r.Bool() + case tokenNull: + r.Null() + return nil + } + + if r.token.delimValue == '{' { + r.consume() + + ret := map[string]interface{}{} + for !r.IsDelim('}') { + key := r.String() + r.WantColon() + ret[key] = r.Interface() + r.WantComma() + } + r.Delim('}') + + if r.Ok() { + return ret + } else { + return nil + } + } else if r.token.delimValue == '[' { + r.consume() + + ret := []interface{}{} + for !r.IsDelim(']') { + ret = append(ret, r.Interface()) + r.WantComma() + } + r.Delim(']') + + if r.Ok() { + return ret + } else { + return nil + } + } + r.errSyntax() + return nil +} + +// WantComma requires a comma to be present before fetching next token. +func (r *Lexer) WantComma() { + r.wantSep = ',' + r.firstElement = false +} + +// WantColon requires a colon to be present before fetching next token. +func (r *Lexer) WantColon() { + r.wantSep = ':' + r.firstElement = false +} diff --git a/vendor/github.com/mailru/easyjson/jwriter/writer.go b/vendor/github.com/mailru/easyjson/jwriter/writer.go new file mode 100644 index 0000000..2c5b201 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jwriter/writer.go @@ -0,0 +1,405 @@ +// Package jwriter contains a JSON writer. +package jwriter + +import ( + "io" + "strconv" + "unicode/utf8" + + "github.com/mailru/easyjson/buffer" +) + +// Flags describe various encoding options. The behavior may be actually implemented in the encoder, but +// Flags field in Writer is used to set and pass them around. +type Flags int + +const ( + NilMapAsEmpty Flags = 1 << iota // Encode nil map as '{}' rather than 'null'. + NilSliceAsEmpty // Encode nil slice as '[]' rather than 'null'. +) + +// Writer is a JSON writer. +type Writer struct { + Flags Flags + + Error error + Buffer buffer.Buffer + NoEscapeHTML bool +} + +// Size returns the size of the data that was written out. +func (w *Writer) Size() int { + return w.Buffer.Size() +} + +// DumpTo outputs the data to given io.Writer, resetting the buffer. +func (w *Writer) DumpTo(out io.Writer) (written int, err error) { + return w.Buffer.DumpTo(out) +} + +// BuildBytes returns writer data as a single byte slice. You can optionally provide one byte slice +// as argument that it will try to reuse. +func (w *Writer) BuildBytes(reuse ...[]byte) ([]byte, error) { + if w.Error != nil { + return nil, w.Error + } + + return w.Buffer.BuildBytes(reuse...), nil +} + +// ReadCloser returns an io.ReadCloser that can be used to read the data. +// ReadCloser also resets the buffer. +func (w *Writer) ReadCloser() (io.ReadCloser, error) { + if w.Error != nil { + return nil, w.Error + } + + return w.Buffer.ReadCloser(), nil +} + +// RawByte appends raw binary data to the buffer. +func (w *Writer) RawByte(c byte) { + w.Buffer.AppendByte(c) +} + +// RawByte appends raw binary data to the buffer. +func (w *Writer) RawString(s string) { + w.Buffer.AppendString(s) +} + +// Raw appends raw binary data to the buffer or sets the error if it is given. Useful for +// calling with results of MarshalJSON-like functions. +func (w *Writer) Raw(data []byte, err error) { + switch { + case w.Error != nil: + return + case err != nil: + w.Error = err + case len(data) > 0: + w.Buffer.AppendBytes(data) + default: + w.RawString("null") + } +} + +// RawText encloses raw binary data in quotes and appends in to the buffer. +// Useful for calling with results of MarshalText-like functions. +func (w *Writer) RawText(data []byte, err error) { + switch { + case w.Error != nil: + return + case err != nil: + w.Error = err + case len(data) > 0: + w.String(string(data)) + default: + w.RawString("null") + } +} + +// Base64Bytes appends data to the buffer after base64 encoding it +func (w *Writer) Base64Bytes(data []byte) { + if data == nil { + w.Buffer.AppendString("null") + return + } + w.Buffer.AppendByte('"') + w.base64(data) + w.Buffer.AppendByte('"') +} + +func (w *Writer) Uint8(n uint8) { + w.Buffer.EnsureSpace(3) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint16(n uint16) { + w.Buffer.EnsureSpace(5) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint32(n uint32) { + w.Buffer.EnsureSpace(10) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint(n uint) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint64(n uint64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10) +} + +func (w *Writer) Int8(n int8) { + w.Buffer.EnsureSpace(4) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int16(n int16) { + w.Buffer.EnsureSpace(6) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int32(n int32) { + w.Buffer.EnsureSpace(11) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int(n int) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int64(n int64) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10) +} + +func (w *Writer) Uint8Str(n uint8) { + w.Buffer.EnsureSpace(3) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint16Str(n uint16) { + w.Buffer.EnsureSpace(5) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint32Str(n uint32) { + w.Buffer.EnsureSpace(10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) UintStr(n uint) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint64Str(n uint64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) UintptrStr(n uintptr) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int8Str(n int8) { + w.Buffer.EnsureSpace(4) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int16Str(n int16) { + w.Buffer.EnsureSpace(6) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int32Str(n int32) { + w.Buffer.EnsureSpace(11) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) IntStr(n int) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int64Str(n int64) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Float32(n float32) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32) +} + +func (w *Writer) Float32Str(n float32) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Float64(n float64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, n, 'g', -1, 64) +} + +func (w *Writer) Float64Str(n float64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 64) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Bool(v bool) { + w.Buffer.EnsureSpace(5) + if v { + w.Buffer.Buf = append(w.Buffer.Buf, "true"...) + } else { + w.Buffer.Buf = append(w.Buffer.Buf, "false"...) + } +} + +const chars = "0123456789abcdef" + +func getTable(falseValues ...int) [128]bool { + table := [128]bool{} + + for i := 0; i < 128; i++ { + table[i] = true + } + + for _, v := range falseValues { + table[v] = false + } + + return table +} + +var ( + htmlEscapeTable = getTable(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, 25, 26, 27, 28, 29, 30, 31, '"', '&', '<', '>', '\\') + htmlNoEscapeTable = getTable(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, 25, 26, 27, 28, 29, 30, 31, '"', '\\') +) + +func (w *Writer) String(s string) { + w.Buffer.AppendByte('"') + + // Portions of the string that contain no escapes are appended as + // byte slices. + + p := 0 // last non-escape symbol + + escapeTable := &htmlEscapeTable + if w.NoEscapeHTML { + escapeTable = &htmlNoEscapeTable + } + + for i := 0; i < len(s); { + c := s[i] + + if c < utf8.RuneSelf { + if escapeTable[c] { + // single-width character, no escaping is required + i++ + continue + } + + w.Buffer.AppendString(s[p:i]) + switch c { + case '\t': + w.Buffer.AppendString(`\t`) + case '\r': + w.Buffer.AppendString(`\r`) + case '\n': + w.Buffer.AppendString(`\n`) + case '\\': + w.Buffer.AppendString(`\\`) + case '"': + w.Buffer.AppendString(`\"`) + default: + w.Buffer.AppendString(`\u00`) + w.Buffer.AppendByte(chars[c>>4]) + w.Buffer.AppendByte(chars[c&0xf]) + } + + i++ + p = i + continue + } + + // broken utf + runeValue, runeWidth := utf8.DecodeRuneInString(s[i:]) + if runeValue == utf8.RuneError && runeWidth == 1 { + w.Buffer.AppendString(s[p:i]) + w.Buffer.AppendString(`\ufffd`) + i++ + p = i + continue + } + + // jsonp stuff - tab separator and line separator + if runeValue == '\u2028' || runeValue == '\u2029' { + w.Buffer.AppendString(s[p:i]) + w.Buffer.AppendString(`\u202`) + w.Buffer.AppendByte(chars[runeValue&0xf]) + i += runeWidth + p = i + continue + } + i += runeWidth + } + w.Buffer.AppendString(s[p:]) + w.Buffer.AppendByte('"') +} + +const encode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" +const padChar = '=' + +func (w *Writer) base64(in []byte) { + + if len(in) == 0 { + return + } + + w.Buffer.EnsureSpace(((len(in)-1)/3 + 1) * 4) + + si := 0 + n := (len(in) / 3) * 3 + + for si < n { + // Convert 3x 8bit source bytes into 4 bytes + val := uint(in[si+0])<<16 | uint(in[si+1])<<8 | uint(in[si+2]) + + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F], encode[val>>6&0x3F], encode[val&0x3F]) + + si += 3 + } + + remain := len(in) - si + if remain == 0 { + return + } + + // Add the remaining small block + val := uint(in[si+0]) << 16 + if remain == 2 { + val |= uint(in[si+1]) << 8 + } + + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F]) + + switch remain { + case 2: + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>6&0x3F], byte(padChar)) + case 1: + w.Buffer.Buf = append(w.Buffer.Buf, byte(padChar), byte(padChar)) + } +} diff --git a/vendor/github.com/petermattis/goid/.gitignore b/vendor/github.com/petermattis/goid/.gitignore new file mode 100644 index 0000000..2b9d6b5 --- /dev/null +++ b/vendor/github.com/petermattis/goid/.gitignore @@ -0,0 +1,4 @@ +*~ +*.test +.*.swp +.DS_Store diff --git a/vendor/github.com/petermattis/goid/LICENSE b/vendor/github.com/petermattis/goid/LICENSE new file mode 100644 index 0000000..e06d208 --- /dev/null +++ b/vendor/github.com/petermattis/goid/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/vendor/github.com/petermattis/goid/README.md b/vendor/github.com/petermattis/goid/README.md new file mode 100644 index 0000000..3fd144c --- /dev/null +++ b/vendor/github.com/petermattis/goid/README.md @@ -0,0 +1,4 @@ +# goid ![Build Status](https://github.com/petermattis/goid/actions/workflows/go.yml/badge.svg) + +Programatically retrieve the current goroutine's ID. See [the CI +configuration](.github/workflows/go.yml) for supported Go versions. diff --git a/vendor/github.com/petermattis/goid/goid.go b/vendor/github.com/petermattis/goid/goid.go new file mode 100644 index 0000000..408e619 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid.go @@ -0,0 +1,35 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +package goid + +import ( + "bytes" + "runtime" + "strconv" +) + +func ExtractGID(s []byte) int64 { + s = s[len("goroutine "):] + s = s[:bytes.IndexByte(s, ' ')] + gid, _ := strconv.ParseInt(string(s), 10, 64) + return gid +} + +// Parse the goid from runtime.Stack() output. Slow, but it works. +func getSlow() int64 { + var buf [64]byte + return ExtractGID(buf[:runtime.Stack(buf[:], false)]) +} diff --git a/vendor/github.com/petermattis/goid/goid_gccgo.go b/vendor/github.com/petermattis/goid/goid_gccgo.go new file mode 100644 index 0000000..31c14d9 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_gccgo.go @@ -0,0 +1,26 @@ +// Copyright 2018 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build gccgo +// +build gccgo + +package goid + +//extern runtime.getg +func getg() *g + +func Get() int64 { + return getg().goid +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.3.c b/vendor/github.com/petermattis/goid/goid_go1.3.c new file mode 100644 index 0000000..2e3f7ab --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.3.c @@ -0,0 +1,23 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +// +build !go1.4 + +#include + +void ·Get(int64 ret) { + ret = g->goid; + USED(&ret); +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.3.go b/vendor/github.com/petermattis/goid/goid_go1.3.go new file mode 100644 index 0000000..d73b699 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.3.go @@ -0,0 +1,22 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build !go1.4 +// +build !go1.4 + +package goid + +// Get returns the id of the current goroutine. +func Get() int64 diff --git a/vendor/github.com/petermattis/goid/goid_go1.4.go b/vendor/github.com/petermattis/goid/goid_go1.4.go new file mode 100644 index 0000000..4798980 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.4.go @@ -0,0 +1,35 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build go1.4 && !go1.5 +// +build go1.4,!go1.5 + +package goid + +import "unsafe" + +var pointerSize = unsafe.Sizeof(uintptr(0)) + +// Backdoor access to runtime·getg(). +func getg() uintptr // in goid_go1.4.s + +// Get returns the id of the current goroutine. +func Get() int64 { + // The goid is the 16th field in the G struct where each field is a + // pointer, uintptr or padded to that size. See runtime.h from the + // Go sources. I'm not aware of a cleaner way to determine the + // offset. + return *(*int64)(unsafe.Pointer(getg() + 16*pointerSize)) +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.4.s b/vendor/github.com/petermattis/goid/goid_go1.4.s new file mode 100644 index 0000000..21a07d6 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.4.s @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Assembly to get into package runtime without using exported symbols. +// See https://github.com/golang/go/blob/release-branch.go1.4/misc/cgo/test/backdoor/thunk.s + +// +build amd64 amd64p32 arm 386 +// +build go1.4,!go1.5 + +#include "textflag.h" + +#ifdef GOARCH_arm +#define JMP B +#endif + +TEXT ·getg(SB),NOSPLIT,$0-0 + JMP runtime·getg(SB) diff --git a/vendor/github.com/petermattis/goid/goid_go1.5.go b/vendor/github.com/petermattis/goid/goid_go1.5.go new file mode 100644 index 0000000..4521f79 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.5.go @@ -0,0 +1,28 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build (386 || amd64 || amd64p32 || arm || arm64 || s390x) && gc && go1.5 +// +build 386 amd64 amd64p32 arm arm64 s390x +// +build gc +// +build go1.5 + +package goid + +// Defined in goid_go1.5.s. +func getg() *g + +func Get() int64 { + return getg().goid +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.5.s b/vendor/github.com/petermattis/goid/goid_go1.5.s new file mode 100644 index 0000000..c49333f --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.5.s @@ -0,0 +1,44 @@ +// Copyright 2021 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +// Assembly to mimic runtime.getg. + +//go:build (386 || amd64 || amd64p32 || arm || arm64 || s390x) && gc && go1.5 +// +build 386 amd64 amd64p32 arm arm64 s390x +// +build gc +// +build go1.5 + +#include "textflag.h" + +// func getg() *g +TEXT ·getg(SB),NOSPLIT,$0-8 +#ifdef GOARCH_386 + MOVL (TLS), AX + MOVL AX, ret+0(FP) +#endif +#ifdef GOARCH_amd64 + MOVQ (TLS), AX + MOVQ AX, ret+0(FP) +#endif +#ifdef GOARCH_arm + MOVW g, ret+0(FP) +#endif +#ifdef GOARCH_arm64 + MOVD g, ret+0(FP) +#endif +#ifdef GOARCH_s390x + MOVD g, ret+0(FP) +#endif + RET diff --git a/vendor/github.com/petermattis/goid/goid_slow.go b/vendor/github.com/petermattis/goid/goid_slow.go new file mode 100644 index 0000000..8bdb435 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_slow.go @@ -0,0 +1,24 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build (go1.4 && !go1.5 && !amd64 && !amd64p32 && !arm && !386) || (go1.5 && !386 && !amd64 && !amd64p32 && !arm && !arm64 && !s390x) +// +build go1.4,!go1.5,!amd64,!amd64p32,!arm,!386 go1.5,!386,!amd64,!amd64p32,!arm,!arm64,!s390x + +package goid + +// Get returns the id of the current goroutine. +func Get() int64 { + return getSlow() +} diff --git a/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go b/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go new file mode 100644 index 0000000..dfcb74e --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go @@ -0,0 +1,17 @@ +//go:build gccgo && go1.8 +// +build gccgo,go1.8 + +package goid + +// https://github.com/gcc-mirror/gcc/blob/releases/gcc-7/libgo/go/runtime/runtime2.go#L329-L354 + +type g struct { + _panic uintptr + _defer uintptr + m uintptr + syscallsp uintptr + syscallpc uintptr + param uintptr + atomicstatus uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.23.go b/vendor/github.com/petermattis/goid/runtime_go1.23.go new file mode 100644 index 0000000..146d817 --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.23.go @@ -0,0 +1,38 @@ +//go:build gc && go1.23 +// +build gc,go1.23 + +package goid + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + syscallbp uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.5.go b/vendor/github.com/petermattis/goid/runtime_go1.5.go new file mode 100644 index 0000000..6ce2ab8 --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.5.go @@ -0,0 +1,57 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build go1.5 && !go1.6 +// +build go1.5,!go1.6 + +package goid + +// Just enough of the structs from runtime/runtime2.go to get the offset to goid. +// See https://github.com/golang/go/blob/release-branch.go1.5/src/runtime/runtime2.go + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + stackAlloc uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stkbar []uintptr + stkbarPos uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.6.go b/vendor/github.com/petermattis/goid/runtime_go1.6.go new file mode 100644 index 0000000..983d55b --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.6.go @@ -0,0 +1,43 @@ +//go:build gc && go1.6 && !go1.9 +// +build gc,go1.6,!go1.9 + +package goid + +// Just enough of the structs from runtime/runtime2.go to get the offset to goid. +// See https://github.com/golang/go/blob/release-branch.go1.6/src/runtime/runtime2.go + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + stackAlloc uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stkbar []uintptr + stkbarPos uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.9.go b/vendor/github.com/petermattis/goid/runtime_go1.9.go new file mode 100644 index 0000000..f9ef8f5 --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.9.go @@ -0,0 +1,37 @@ +//go:build gc && go1.9 && !go1.23 +// +build gc,go1.9,!go1.23 + +package goid + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/swaggo/swag/.gitignore b/vendor/github.com/swaggo/swag/.gitignore new file mode 100644 index 0000000..865a6f3 --- /dev/null +++ b/vendor/github.com/swaggo/swag/.gitignore @@ -0,0 +1,24 @@ +dist +testdata/simple*/docs +testdata/quotes/docs +testdata/quotes/quotes.so +testdata/delims/docs +testdata/delims/delims.so +example/basic/docs/* +example/celler/docs/* +cover.out + + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out +.idea +.vscode + +# Etc +.DS_Store + +/swag +/swag.exe diff --git a/vendor/github.com/swaggo/swag/.goreleaser.yml b/vendor/github.com/swaggo/swag/.goreleaser.yml new file mode 100644 index 0000000..a431d5d --- /dev/null +++ b/vendor/github.com/swaggo/swag/.goreleaser.yml @@ -0,0 +1,30 @@ +build: + main: cmd/swag/main.go + goos: + - linux + - darwin + goarch: + - amd64 + - arm64 + - 386 + env: + - CGO_ENABLED=0 + +archives: + - id: foo + name_template: >- + {{ .ProjectName }}_ + {{- .Version }}_ + {{- if eq .Os "linux"}}Linux{{ else if eq .Os "darwin"}}Darwin{{ else }}{{ .Os }}{{ end }}_ + {{- if eq .Arch "386" }}i386{{ else if eq .Arch "amd64" }}x86_64{{ else }}{{ .Arch }}{{ end }} + +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ .Tag }}-next" +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' diff --git a/vendor/github.com/swaggo/swag/CODE_OF_CONDUCT.md b/vendor/github.com/swaggo/swag/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..717d795 --- /dev/null +++ b/vendor/github.com/swaggo/swag/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [gitter.im/swaggo/swag](https://gitter.im/swaggo/swag).The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/swaggo/swag/CONTRIBUTING.md b/vendor/github.com/swaggo/swag/CONTRIBUTING.md new file mode 100644 index 0000000..f3a3a15 --- /dev/null +++ b/vendor/github.com/swaggo/swag/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request + +Please make an issue first if the change is likely to increase. diff --git a/vendor/github.com/swaggo/swag/Dockerfile b/vendor/github.com/swaggo/swag/Dockerfile new file mode 100644 index 0000000..410fe31 --- /dev/null +++ b/vendor/github.com/swaggo/swag/Dockerfile @@ -0,0 +1,30 @@ +# Dockerfile References: https://docs.docker.com/engine/reference/builder/ + +# Start from the latest golang base image +FROM golang:1.20-alpine as builder + +# Set the Current Working Directory inside the container +WORKDIR /app + +# Copy go mod and sum files +COPY go.mod go.sum ./ + +# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed +RUN go mod download + +# Copy the source from the current directory to the Working Directory inside the container +COPY . . + +# Build the Go app +RUN CGO_ENABLED=0 GOOS=linux go build -v -a -installsuffix cgo -o swag cmd/swag/main.go + + +######## Start a new stage from scratch ####### +FROM scratch + +WORKDIR /code/ + +# Copy the Pre-built binary file from the previous stage +COPY --from=builder /app/swag /bin/swag + +ENTRYPOINT ["/bin/swag"] diff --git a/vendor/github.com/swaggo/swag/Makefile b/vendor/github.com/swaggo/swag/Makefile new file mode 100644 index 0000000..0d8175d --- /dev/null +++ b/vendor/github.com/swaggo/swag/Makefile @@ -0,0 +1,89 @@ +GOCMD:=$(shell which go) +GOLINT:=$(shell which golint) +GOIMPORT:=$(shell which goimports) +GOFMT:=$(shell which gofmt) +GOBUILD:=$(GOCMD) build +GOINSTALL:=$(GOCMD) install +GOCLEAN:=$(GOCMD) clean +GOTEST:=$(GOCMD) test +GOMODTIDY:=$(GOCMD) mod tidy +GOGET:=$(GOCMD) get +GOLIST:=$(GOCMD) list +GOVET:=$(GOCMD) vet +GOPATH:=$(shell $(GOCMD) env GOPATH) +u := $(if $(update),-u) + +BINARY_NAME:=swag +PACKAGES:=$(shell $(GOLIST) github.com/swaggo/swag github.com/swaggo/swag/cmd/swag github.com/swaggo/swag/gen github.com/swaggo/swag/format) +GOFILES:=$(shell find . -name "*.go" -type f) + +export GO111MODULE := on + +all: test build + +.PHONY: build +build: deps + $(GOBUILD) -o $(BINARY_NAME) ./cmd/swag + +.PHONY: install +install: deps + $(GOINSTALL) ./cmd/swag + +.PHONY: test +test: + echo "mode: count" > coverage.out + for PKG in $(PACKAGES); do \ + $(GOCMD) test -v -covermode=count -coverprofile=profile.out $$PKG > tmp.out; \ + cat tmp.out; \ + if grep -q "^--- FAIL" tmp.out; then \ + rm tmp.out; \ + exit 1; \ + elif grep -q "build failed" tmp.out; then \ + rm tmp.out; \ + exit; \ + fi; \ + if [ -f profile.out ]; then \ + cat profile.out | grep -v "mode:" >> coverage.out; \ + rm profile.out; \ + fi; \ + done + +.PHONY: clean +clean: + $(GOCLEAN) + rm -f $(BINARY_NAME) + +.PHONY: deps +deps: + $(GOMODTIDY) + +.PHONY: devel-deps +devel-deps: + GO111MODULE=off $(GOGET) -v -u \ + golang.org/x/lint/golint + +.PHONY: lint +lint: devel-deps + for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done; + +.PHONY: vet +vet: deps devel-deps + $(GOVET) $(PACKAGES) + +.PHONY: fmt +fmt: + $(GOFMT) -s -w $(GOFILES) + +.PHONY: fmt-check +fmt-check: + @diff=$$($(GOFMT) -s -d $(GOFILES)); \ + if [ -n "$$diff" ]; then \ + echo "Please run 'make fmt' and commit the result:"; \ + echo "$${diff}"; \ + exit 1; \ + fi; + +.PHONY: view-covered +view-covered: + $(GOTEST) -coverprofile=cover.out $(TARGET) + $(GOCMD) tool cover -html=cover.out diff --git a/vendor/github.com/swaggo/swag/PULL_REQUEST_TEMPLATE.md b/vendor/github.com/swaggo/swag/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..697de1f --- /dev/null +++ b/vendor/github.com/swaggo/swag/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +**Describe the PR** +e.g. add cool parser. + +**Relation issue** +e.g. https://github.com/swaggo/swag/pull/118/files + +**Additional context** +Add any other context about the problem here. diff --git a/vendor/github.com/swaggo/swag/README.md b/vendor/github.com/swaggo/swag/README.md new file mode 100644 index 0000000..054e36e --- /dev/null +++ b/vendor/github.com/swaggo/swag/README.md @@ -0,0 +1,983 @@ +# swag + +🌍 *[English](README.md) ∙ [简体中文](README_zh-CN.md) ∙ [Português](README_pt.md)* + + + +[![Build Status](https://github.com/swaggo/swag/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/features/actions) +[![Coverage Status](https://img.shields.io/codecov/c/github/swaggo/swag/master.svg)](https://codecov.io/gh/swaggo/swag) +[![Go Report Card](https://goreportcard.com/badge/github.com/swaggo/swag)](https://goreportcard.com/report/github.com/swaggo/swag) +[![codebeat badge](https://codebeat.co/badges/71e2f5e5-9e6b-405d-baf9-7cc8b5037330)](https://codebeat.co/projects/github-com-swaggo-swag-master) +[![Go Doc](https://godoc.org/github.com/swaggo/swagg?status.svg)](https://godoc.org/github.com/swaggo/swag) +[![Backers on Open Collective](https://opencollective.com/swag/backers/badge.svg)](#backers) +[![Sponsors on Open Collective](https://opencollective.com/swag/sponsors/badge.svg)](#sponsors) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_shield) +[![Release](https://img.shields.io/github/release/swaggo/swag.svg?style=flat-square)](https://github.com/swaggo/swag/releases) + + +Swag converts Go annotations to Swagger Documentation 2.0. We've created a variety of plugins for popular [Go web frameworks](#supported-web-frameworks). This allows you to quickly integrate with an existing Go project (using Swagger UI). + +## Contents + - [Getting started](#getting-started) + - [Supported Web Frameworks](#supported-web-frameworks) + - [How to use it with Gin](#how-to-use-it-with-gin) + - [The swag formatter](#the-swag-formatter) + - [Implementation Status](#implementation-status) + - [Declarative Comments Format](#declarative-comments-format) + - [General API Info](#general-api-info) + - [API Operation](#api-operation) + - [Security](#security) + - [Examples](#examples) + - [Descriptions over multiple lines](#descriptions-over-multiple-lines) + - [User defined structure with an array type](#user-defined-structure-with-an-array-type) + - [Function scoped struct declaration](#function-scoped-struct-declaration) + - [Model composition in response](#model-composition-in-response) + - [Add a headers in response](#add-a-headers-in-response) + - [Use multiple path params](#use-multiple-path-params) + - [Example value of struct](#example-value-of-struct) + - [SchemaExample of body](#schemaexample-of-body) + - [Description of struct](#description-of-struct) + - [Use swaggertype tag to supported custom type](#use-swaggertype-tag-to-supported-custom-type) + - [Use global overrides to support a custom type](#use-global-overrides-to-support-a-custom-type) + - [Use swaggerignore tag to exclude a field](#use-swaggerignore-tag-to-exclude-a-field) + - [Add extension info to struct field](#add-extension-info-to-struct-field) + - [Rename model to display](#rename-model-to-display) + - [How to use security annotations](#how-to-use-security-annotations) + - [Add a description for enum items](#add-a-description-for-enum-items) + - [Generate only specific docs file types](#generate-only-specific-docs-file-types) + - [How to use Go generic types](#how-to-use-generics) +- [About the Project](#about-the-project) + +## Getting started + +1. Add comments to your API source code, See [Declarative Comments Format](#declarative-comments-format). + +2. Install swag by using: +```sh +go install github.com/swaggo/swag/cmd/swag@latest +``` +To build from source you need [Go](https://golang.org/dl/) (1.18 or newer). + +Alternatively you can run the docker image: +```sh +docker run --rm -v $(pwd):/code ghcr.io/swaggo/swag:latest +``` + +Or download a pre-compiled binary from the [release page](https://github.com/swaggo/swag/releases). + +3. Run `swag init` in the project's root folder which contains the `main.go` file. This will parse your comments and generate the required files (`docs` folder and `docs/docs.go`). +```sh +swag init +``` + + Make sure to import the generated `docs/docs.go` so that your specific configuration gets `init`'ed. If your General API annotations do not live in `main.go`, you can let swag know with `-g` flag. + ```go + import _ "example-module-name/docs" + ``` + ```sh + swag init -g http/api.go + ``` + +4. (optional) Use `swag fmt` format the SWAG comment. (Please upgrade to the latest version) + + ```sh + swag fmt + ``` + +## swag cli + +```sh +swag init -h +NAME: + swag init - Create docs.go + +USAGE: + swag init [command options] [arguments...] + +OPTIONS: + --quiet, -q Make the logger quiet. (default: false) + --generalInfo value, -g value Go file path in which 'swagger general API Info' is written (default: "main.go") + --dir value, -d value Directories you want to parse,comma separated and general-info file must be in the first one (default: "./") + --exclude value Exclude directories and files when searching, comma separated + --propertyStrategy value, -p value Property Naming Strategy like snakecase,camelcase,pascalcase (default: "camelcase") + --output value, -o value Output directory for all the generated files(swagger.json, swagger.yaml and docs.go) (default: "./docs") + --outputTypes value, --ot value Output types of generated files (docs.go, swagger.json, swagger.yaml) like go,json,yaml (default: "go,json,yaml") + --parseVendor Parse go files in 'vendor' folder, disabled by default (default: false) + --parseDependency, --pd Parse go files inside dependency folder, disabled by default (default: false) + --markdownFiles value, --md value Parse folder containing markdown files to use as description, disabled by default + --codeExampleFiles value, --cef value Parse folder containing code example files to use for the x-codeSamples extension, disabled by default + --parseInternal Parse go files in internal packages, disabled by default (default: false) + --generatedTime Generate timestamp at the top of docs.go, disabled by default (default: false) + --parseDepth value Dependency parse depth (default: 100) + --requiredByDefault Set validation required for all fields by default (default: false) + --instanceName value This parameter can be used to name different swagger document instances. It is optional. + --overridesFile value File to read global type overrides from. (default: ".swaggo") + --parseGoList Parse dependency via 'go list' (default: true) + --tags value, -t value A comma-separated list of tags to filter the APIs for which the documentation is generated.Special case if the tag is prefixed with the '!' character then the APIs with that tag will be excluded + --templateDelims value, --td value Provide custom delimeters for Go template generation. The format is leftDelim,rightDelim. For example: "[[,]]" + --collectionFormat value, --cf value Set default collection format (default: "csv") + --state value Initial state for the state machine (default: ""), @HostState in root file, @State in other files + --help, -h show help (default: false) +``` + +```bash +swag fmt -h +NAME: + swag fmt - format swag comments + +USAGE: + swag fmt [command options] [arguments...] + +OPTIONS: + --dir value, -d value Directories you want to parse,comma separated and general-info file must be in the first one (default: "./") + --exclude value Exclude directories and files when searching, comma separated + --generalInfo value, -g value Go file path in which 'swagger general API Info' is written (default: "main.go") + --help, -h show help (default: false) + +``` + +## Supported Web Frameworks + +- [gin](http://github.com/swaggo/gin-swagger) +- [echo](http://github.com/swaggo/echo-swagger) +- [buffalo](https://github.com/swaggo/buffalo-swagger) +- [net/http](https://github.com/swaggo/http-swagger) +- [gorilla/mux](https://github.com/swaggo/http-swagger) +- [go-chi/chi](https://github.com/swaggo/http-swagger) +- [flamingo](https://github.com/i-love-flamingo/swagger) +- [fiber](https://github.com/gofiber/swagger) +- [atreugo](https://github.com/Nerzal/atreugo-swagger) +- [hertz](https://github.com/hertz-contrib/swagger) + +## How to use it with Gin + +Find the example source code [here](https://github.com/swaggo/swag/tree/master/example/celler). + +Finish the steps in [Getting started](#getting-started) +1. After using `swag init` to generate Swagger 2.0 docs, import the following packages: +```go +import "github.com/swaggo/gin-swagger" // gin-swagger middleware +import "github.com/swaggo/files" // swagger embed files +``` + +2. Add [General API](#general-api-info) annotations in `main.go` code: + +```go +// @title Swagger Example API +// @version 1.0 +// @description This is a sample server celler server. +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html + +// @host localhost:8080 +// @BasePath /api/v1 + +// @securityDefinitions.basic BasicAuth + +// @externalDocs.description OpenAPI +// @externalDocs.url https://swagger.io/resources/open-api/ +func main() { + r := gin.Default() + + c := controller.NewController() + + v1 := r.Group("/api/v1") + { + accounts := v1.Group("/accounts") + { + accounts.GET(":id", c.ShowAccount) + accounts.GET("", c.ListAccounts) + accounts.POST("", c.AddAccount) + accounts.DELETE(":id", c.DeleteAccount) + accounts.PATCH(":id", c.UpdateAccount) + accounts.POST(":id/images", c.UploadAccountImage) + } + //... + } + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + r.Run(":8080") +} +//... +``` + +Additionally some general API info can be set dynamically. The generated code package `docs` exports `SwaggerInfo` variable which we can use to set the title, description, version, host and base path programmatically. Example using Gin: + +```go +package main + +import ( + "github.com/gin-gonic/gin" + "github.com/swaggo/files" + "github.com/swaggo/gin-swagger" + + "./docs" // docs is generated by Swag CLI, you have to import it. +) + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html +func main() { + + // programmatically set swagger info + docs.SwaggerInfo.Title = "Swagger Example API" + docs.SwaggerInfo.Description = "This is a sample server Petstore server." + docs.SwaggerInfo.Version = "1.0" + docs.SwaggerInfo.Host = "petstore.swagger.io" + docs.SwaggerInfo.BasePath = "/v2" + docs.SwaggerInfo.Schemes = []string{"http", "https"} + + r := gin.New() + + // use ginSwagger middleware to serve the API docs + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + + r.Run() +} +``` + +3. Add [API Operation](#api-operation) annotations in `controller` code + +``` go +package controller + +import ( + "fmt" + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/swaggo/swag/example/celler/httputil" + "github.com/swaggo/swag/example/celler/model" +) + +// ShowAccount godoc +// @Summary Show an account +// @Description get string by ID +// @Tags accounts +// @Accept json +// @Produce json +// @Param id path int true "Account ID" +// @Success 200 {object} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts/{id} [get] +func (c *Controller) ShowAccount(ctx *gin.Context) { + id := ctx.Param("id") + aid, err := strconv.Atoi(id) + if err != nil { + httputil.NewError(ctx, http.StatusBadRequest, err) + return + } + account, err := model.AccountOne(aid) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, account) +} + +// ListAccounts godoc +// @Summary List accounts +// @Description get accounts +// @Tags accounts +// @Accept json +// @Produce json +// @Param q query string false "name search by q" Format(email) +// @Success 200 {array} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts [get] +func (c *Controller) ListAccounts(ctx *gin.Context) { + q := ctx.Request.URL.Query().Get("q") + accounts, err := model.AccountsAll(q) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, accounts) +} +//... +``` + +```console +swag init +``` + +4. Run your app, and browse to http://localhost:8080/swagger/index.html. You will see Swagger 2.0 Api documents as shown below: + +![swagger_index.html](https://raw.githubusercontent.com/swaggo/swag/master/assets/swagger-image.png) + +## The swag formatter + +The Swag Comments can be automatically formatted, just like 'go fmt'. +Find the result of formatting [here](https://github.com/swaggo/swag/tree/master/example/celler). + +Usage: +```shell +swag fmt +``` + +Exclude folder: +```shell +swag fmt -d ./ --exclude ./internal +``` + +When using `swag fmt`, you need to ensure that you have a doc comment for the function to ensure correct formatting. +This is due to `swag fmt` indenting swag comments with tabs, which is only allowed *after* a standard doc comment. + +For example, use + +```go +// ListAccounts lists all existing accounts +// +// @Summary List accounts +// @Description get accounts +// @Tags accounts +// @Accept json +// @Produce json +// @Param q query string false "name search by q" Format(email) +// @Success 200 {array} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts [get] +func (c *Controller) ListAccounts(ctx *gin.Context) { +``` + +## Implementation Status + +[Swagger 2.0 document](https://swagger.io/docs/specification/2-0/basic-structure/) + +- [x] Basic Structure +- [x] API Host and Base Path +- [x] Paths and Operations +- [x] Describing Parameters +- [x] Describing Request Body +- [x] Describing Responses +- [x] MIME Types +- [x] Authentication + - [x] Basic Authentication + - [x] API Keys +- [x] Adding Examples +- [x] File Upload +- [x] Enums +- [x] Grouping Operations With Tags +- [ ] Swagger Extensions + +# Declarative Comments Format + +## General API Info + +**Example** +[celler/main.go](https://github.com/swaggo/swag/blob/master/example/celler/main.go) + +| annotation | description | example | +|-------------|--------------------------------------------|---------------------------------| +| title | **Required.** The title of the application.| // @title Swagger Example API | +| version | **Required.** Provides the version of the application API.| // @version 1.0 | +| description | A short description of the application. |// @description This is a sample server celler server. | +| tag.name | Name of a tag.| // @tag.name This is the name of the tag | +| tag.description | Description of the tag | // @tag.description Cool Description | +| tag.docs.url | Url of the external Documentation of the tag | // @tag.docs.url https://example.com| +| tag.docs.description | Description of the external Documentation of the tag| // @tag.docs.description Best example documentation | +| termsOfService | The Terms of Service for the API.| // @termsOfService http://swagger.io/terms/ | +| contact.name | The contact information for the exposed API.| // @contact.name API Support | +| contact.url | The URL pointing to the contact information. MUST be in the format of a URL. | // @contact.url http://www.swagger.io/support| +| contact.email| The email address of the contact person/organization. MUST be in the format of an email address.| // @contact.email support@swagger.io | +| license.name | **Required.** The license name used for the API.|// @license.name Apache 2.0| +| license.url | A URL to the license used for the API. MUST be in the format of a URL. | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html | +| host | The host (name or ip) serving the API. | // @host localhost:8080 | +| BasePath | The base path on which the API is served. | // @BasePath /api/v1 | +| accept | A list of MIME types the APIs can consume. Note that Accept only affects operations with a request body, such as POST, PUT and PATCH. Value MUST be as described under [Mime Types](#mime-types). | // @accept json | +| produce | A list of MIME types the APIs can produce. Value MUST be as described under [Mime Types](#mime-types). | // @produce json | +| query.collection.format | The default collection(array) param format in query,enums:csv,multi,pipes,tsv,ssv. If not set, csv is the default.| // @query.collection.format multi +| schemes | The transfer protocol for the operation that separated by spaces. | // @schemes http https | +| externalDocs.description | Description of the external document. | // @externalDocs.description OpenAPI | +| externalDocs.url | URL of the external document. | // @externalDocs.url https://swagger.io/resources/open-api/ | +| x-name | The extension key, must be start by x- and take only json value | // @x-example-key {"key": "value"} | + +### Using markdown descriptions +When a short string in your documentation is insufficient, or you need images, code examples and things like that you may want to use markdown descriptions. In order to use markdown descriptions use the following annotations. + + +| annotation | description | example | +|-------------|--------------------------------------------|---------------------------------| +| title | **Required.** The title of the application.| // @title Swagger Example API | +| version | **Required.** Provides the version of the application API.| // @version 1.0 | +| description.markdown | A short description of the application. Parsed from the api.md file. This is an alternative to @description |// @description.markdown No value needed, this parses the description from api.md | +| tag.name | Name of a tag.| // @tag.name This is the name of the tag | +| tag.description.markdown | Description of the tag this is an alternative to tag.description. The description will be read from a file named like tagname.md | // @tag.description.markdown | + + +## API Operation + +**Example** +[celler/controller](https://github.com/swaggo/swag/tree/master/example/celler/controller) + + +| annotation | description | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| description | A verbose explanation of the operation behavior. | +| description.markdown | A short description of the application. The description will be read from a file. E.g. `@description.markdown details` will load `details.md` | // @description.file endpoint.description.markdown | +| id | A unique string used to identify the operation. Must be unique among all API operations. | +| tags | A list of tags to each API operation that separated by commas. | +| summary | A short summary of what the operation does. | +| accept | A list of MIME types the APIs can consume. Note that Accept only affects operations with a request body, such as POST, PUT and PATCH. Value MUST be as described under [Mime Types](#mime-types). | +| produce | A list of MIME types the APIs can produce. Value MUST be as described under [Mime Types](#mime-types). | +| param | Parameters that separated by spaces. `param name`,`param type`,`data type`,`is mandatory?`,`comment` `attribute(optional)` | +| security | [Security](#security) to each API operation. | +| success | Success response that separated by spaces. `return code or default`,`{param type}`,`data type`,`comment` | +| failure | Failure response that separated by spaces. `return code or default`,`{param type}`,`data type`,`comment` | +| response | As same as `success` and `failure` | +| header | Header in response that separated by spaces. `return code`,`{param type}`,`data type`,`comment` | +| router | Path definition that separated by spaces. `path`,`[httpMethod]` | +| deprecatedrouter | As same as router, but deprecated. | +| x-name | The extension key, must be start by x- and take only json value. | +| x-codeSample | Optional Markdown usage. take `file` as parameter. This will then search for a file named like the summary in the given folder. | +| deprecated | Mark endpoint as deprecated. | + + + +## Mime Types + +`swag` accepts all MIME Types which are in the correct format, that is, match `*/*`. +Besides that, `swag` also accepts aliases for some MIME Types as follows: + +| Alias | MIME Type | +|-----------------------|-----------------------------------| +| json | application/json | +| xml | text/xml | +| plain | text/plain | +| html | text/html | +| mpfd | multipart/form-data | +| x-www-form-urlencoded | application/x-www-form-urlencoded | +| json-api | application/vnd.api+json | +| json-stream | application/x-json-stream | +| octet-stream | application/octet-stream | +| png | image/png | +| jpeg | image/jpeg | +| gif | image/gif | + + + +## Param Type + +- query +- path +- header +- body +- formData + +## Data Type + +- string (string) +- integer (int, uint, uint32, uint64) +- number (float32) +- boolean (bool) +- file (param data type when uploading) +- user defined struct + +## Security +| annotation | description | parameters | example | +|------------|-------------|------------|---------| +| securitydefinitions.basic | [Basic](https://swagger.io/docs/specification/2-0/authentication/basic-authentication/) auth. | | // @securityDefinitions.basic BasicAuth | +| securitydefinitions.apikey | [API key](https://swagger.io/docs/specification/2-0/authentication/api-keys/) auth. | in, name, description | // @securityDefinitions.apikey ApiKeyAuth | +| securitydefinitions.oauth2.application | [OAuth2 application](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope, description | // @securitydefinitions.oauth2.application OAuth2Application | +| securitydefinitions.oauth2.implicit | [OAuth2 implicit](https://swagger.io/docs/specification/authentication/oauth2/) auth. | authorizationUrl, scope, description | // @securitydefinitions.oauth2.implicit OAuth2Implicit | +| securitydefinitions.oauth2.password | [OAuth2 password](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope, description | // @securitydefinitions.oauth2.password OAuth2Password | +| securitydefinitions.oauth2.accessCode | [OAuth2 access code](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, authorizationUrl, scope, description | // @securitydefinitions.oauth2.accessCode OAuth2AccessCode | + + +| parameters annotation | example | +|---------------------------------|-------------------------------------------------------------------------| +| in | // @in header | +| name | // @name Authorization | +| tokenUrl | // @tokenUrl https://example.com/oauth/token | +| authorizationurl | // @authorizationurl https://example.com/oauth/authorize | +| scope.hoge | // @scope.write Grants write access | +| description | // @description OAuth protects our entity endpoints | + +## Attribute + +```go +// @Param enumstring query string false "string enums" Enums(A, B, C) +// @Param enumint query int false "int enums" Enums(1, 2, 3) +// @Param enumnumber query number false "int enums" Enums(1.1, 1.2, 1.3) +// @Param string query string false "string valid" minlength(5) maxlength(10) +// @Param int query int false "int valid" minimum(1) maximum(10) +// @Param default query string false "string default" default(A) +// @Param example query string false "string example" example(string) +// @Param collection query []string false "string collection" collectionFormat(multi) +// @Param extensions query []string false "string collection" extensions(x-example=test,x-nullable) +``` + +It also works for the struct fields: + +```go +type Foo struct { + Bar string `minLength:"4" maxLength:"16" example:"random string"` + Baz int `minimum:"10" maximum:"20" default:"15"` + Qux []string `enums:"foo,bar,baz"` +} +``` + +### Available + +Field Name | Type | Description +---|:---:|--- +validate | `string` | Determines the validation for the parameter. Possible values are: `required,optional`. +default | * | Declares the value of the parameter that the server will use if none is provided, for example a "count" to control the number of results per page might default to 100 if not supplied by the client in the request. (Note: "default" has no meaning for required parameters.) See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. Unlike JSON Schema this value MUST conform to the defined [`type`](#parameterType) for this parameter. +maximum | `number` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.2. +minimum | `number` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.3. +multipleOf | `number` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.1. +maxLength | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.1. +minLength | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.2. +enums | [\*] | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1. +format | `string` | The extending format for the previously mentioned [`type`](#parameterType). See [Data Type Formats](https://swagger.io/specification/v2/#dataTypeFormat) for further details. +collectionFormat | `string` |Determines the format of the array if type array is used. Possible values are:

      • `csv` - comma separated values `foo,bar`.
      • `ssv` - space separated values `foo bar`.
      • `tsv` - tab separated values `foo\tbar`.
      • `pipes` - pipe separated values foo|bar.
      • `multi` - corresponds to multiple parameter instances instead of multiple values for a single instance `foo=bar&foo=baz`. This is valid only for parameters [`in`](#parameterIn) "query" or "formData".
      Default value is `csv`. +example | * | Declares the example for the parameter value +extensions | `string` | Add extension to parameters. + +### Future + +Field Name | Type | Description +---|:---:|--- +pattern | `string` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. +maxItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.2. +minItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.3. +uniqueItems | `boolean` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.4. + +## Examples + +### Descriptions over multiple lines + +You can add descriptions spanning multiple lines in either the general api description or routes definitions like so: + +```go +// @description This is the first line +// @description This is the second line +// @description And so forth. +``` + +### User defined structure with an array type + +```go +// @Success 200 {array} model.Account <-- This is a user defined struct. +``` + +```go +package model + +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` +} +``` + + +### Function scoped struct declaration + +You can declare your request response structs inside a function body. +You must have to follow the naming convention `.. `. + +```go +package main + +// @Param request body main.MyHandler.request true "query params" +// @Success 200 {object} main.MyHandler.response +// @Router /test [post] +func MyHandler() { + type request struct { + RequestField string + } + + type response struct { + ResponseField string + } +} +``` + + +### Model composition in response +```go +// JSONResult's data field will be overridden by the specific type proto.Order +@success 200 {object} jsonresult.JSONResult{data=proto.Order} "desc" +``` + +```go +type JSONResult struct { + Code int `json:"code" ` + Message string `json:"message"` + Data interface{} `json:"data"` +} + +type Order struct { //in `proto` package + Id uint `json:"id"` + Data interface{} `json:"data"` +} +``` + +- also support array of objects and primitive types as nested response +```go +@success 200 {object} jsonresult.JSONResult{data=[]proto.Order} "desc" +@success 200 {object} jsonresult.JSONResult{data=string} "desc" +@success 200 {object} jsonresult.JSONResult{data=[]string} "desc" +``` + +- overriding multiple fields. field will be added if not exists +```go +@success 200 {object} jsonresult.JSONResult{data1=string,data2=[]string,data3=proto.Order,data4=[]proto.Order} "desc" +``` +- overriding deep-level fields +```go +type DeepObject struct { //in `proto` package + ... +} +@success 200 {object} jsonresult.JSONResult{data1=proto.Order{data=proto.DeepObject},data2=[]proto.Order{data=[]proto.DeepObject}} "desc" +``` +### Add a headers in response + +```go +// @Success 200 {string} string "ok" +// @failure 400 {string} string "error" +// @response default {string} string "other error" +// @Header 200 {string} Location "/entity/1" +// @Header 200,400,default {string} Token "token" +// @Header all {string} Token2 "token2" +``` + +### Use multiple path params + +```go +/// ... +// @Param group_id path int true "Group ID" +// @Param account_id path int true "Account ID" +// ... +// @Router /examples/groups/{group_id}/accounts/{account_id} [get] +``` + +### Add multiple paths + +```go +/// ... +// @Param group_id path int true "Group ID" +// @Param user_id path int true "User ID" +// ... +// @Router /examples/groups/{group_id}/user/{user_id}/address [put] +// @Router /examples/user/{user_id}/address [put] +``` + +### Example value of struct + +```go +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` + PhotoUrls []string `json:"photo_urls" example:"http://test/image/1.jpg,http://test/image/2.jpg"` +} +``` + +### SchemaExample of body + +```go +// @Param email body string true "message/rfc822" SchemaExample(Subject: Testmail\r\n\r\nBody Message\r\n) +``` + +### Description of struct + +```go +// Account model info +// @Description User account information +// @Description with user id and username +type Account struct { + // ID this is userid + ID int `json:"id"` + Name string `json:"name"` // This is Name +} +``` + +[#708](https://github.com/swaggo/swag/issues/708) The parser handles only struct comments starting with `@Description` attribute. +But it writes all struct field comments as is. + +So, generated swagger doc as follows: +```json +"Account": { + "type":"object", + "description": "User account information with user id and username" + "properties": { + "id": { + "type": "integer", + "description": "ID this is userid" + }, + "name": { + "type":"string", + "description": "This is Name" + } + } +} +``` + +### Use swaggertype tag to supported custom type +[#201](https://github.com/swaggo/swag/issues/201#issuecomment-475479409) + +```go +type TimestampTime struct { + time.Time +} + +///implement encoding.JSON.Marshaler interface +func (t *TimestampTime) MarshalJSON() ([]byte, error) { + bin := make([]byte, 16) + bin = strconv.AppendInt(bin[:0], t.Time.Unix(), 10) + return bin, nil +} + +func (t *TimestampTime) UnmarshalJSON(bin []byte) error { + v, err := strconv.ParseInt(string(bin), 10, 64) + if err != nil { + return err + } + t.Time = time.Unix(v, 0) + return nil +} +/// + +type Account struct { + // Override primitive type by simply specifying it via `swaggertype` tag + ID sql.NullInt64 `json:"id" swaggertype:"integer"` + + // Override struct type to a primitive type 'integer' by specifying it via `swaggertype` tag + RegisterTime TimestampTime `json:"register_time" swaggertype:"primitive,integer"` + + // Array types can be overridden using "array," format + Coeffs []big.Float `json:"coeffs" swaggertype:"array,number"` +} +``` + +[#379](https://github.com/swaggo/swag/issues/379) +```go +type CerticateKeyPair struct { + Crt []byte `json:"crt" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` + Key []byte `json:"key" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` +} +``` +generated swagger doc as follows: +```go +"api.MyBinding": { + "type":"object", + "properties":{ + "crt":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + }, + "key":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + } + } +} + +``` + +### Use global overrides to support a custom type + +If you are using generated files, the [`swaggertype`](#use-swaggertype-tag-to-supported-custom-type) or `swaggerignore` tags may not be possible. + +By passing a mapping to swag with `--overridesFile` you can tell swag to use one type in place of another wherever it appears. By default, if a `.swaggo` file is present in the current directory it will be used. + +Go code: +```go +type MyStruct struct { + ID sql.NullInt64 `json:"id"` + Name sql.NullString `json:"name"` +} +``` + +`.swaggo`: +``` +// Replace all NullInt64 with int +replace database/sql.NullInt64 int + +// Don't include any fields of type database/sql.NullString in the swagger docs +skip database/sql.NullString +``` + +Possible directives are comments (beginning with `//`), `replace path/to/a.type path/to/b.type`, and `skip path/to/a.type`. + +(Note that the full paths to any named types must be provided to prevent problems when multiple packages define a type with the same name) + +Rendered: +```go +"types.MyStruct": { + "id": "integer" +} +``` + + +### Use swaggerignore tag to exclude a field + +```go +type Account struct { + ID string `json:"id"` + Name string `json:"name"` + Ignored int `swaggerignore:"true"` +} +``` + +### Add extension info to struct field + +```go +type Account struct { + ID string `json:"id" extensions:"x-nullable,x-abc=def,!x-omitempty"` // extensions fields must start with "x-" +} +``` + +generate swagger doc as follows: + +```go +"Account": { + "type": "object", + "properties": { + "id": { + "type": "string", + "x-nullable": true, + "x-abc": "def", + "x-omitempty": false + } + } +} +``` +### Rename model to display + +```golang +type Resp struct { + Code int +}//@name Response +``` + +### How to use security annotations + +General API info. + +```go +// @securityDefinitions.basic BasicAuth + +// @securitydefinitions.oauth2.application OAuth2Application +// @tokenUrl https://example.com/oauth/token +// @scope.write Grants write access +// @scope.admin Grants read and write access to administrative information +``` + +Each API operation. + +```go +// @Security ApiKeyAuth +``` + +Make it AND condition + +```go +// @Security ApiKeyAuth +// @Security OAuth2Application[write, admin] +``` + +Make it OR condition + +```go +// @Security ApiKeyAuth || firebase +// @Security OAuth2Application[write, admin] || APIKeyAuth +``` + + +### Add a description for enum items + +```go +type Example struct { + // Sort order: + // * asc - Ascending, from A to Z. + // * desc - Descending, from Z to A. + Order string `enums:"asc,desc"` +} +``` + +### Generate only specific docs file types + +By default `swag` command generates Swagger specification in three different files/file types: +- docs.go +- swagger.json +- swagger.yaml + +If you would like to limit a set of file types which should be generated you can use `--outputTypes` (short `-ot`) flag. Default value is `go,json,yaml` - output types separated with comma. To limit output only to `go` and `yaml` files, you would write `go,yaml`. With complete command that would be `swag init --outputTypes go,yaml`. + +### How to use Generics + +```go +// @Success 200 {object} web.GenericNestedResponse[types.Post] +// @Success 204 {object} web.GenericNestedResponse[types.Post, Types.AnotherOne] +// @Success 201 {object} web.GenericNestedResponse[web.GenericInnerType[types.Post]] +func GetPosts(w http.ResponseWriter, r *http.Request) { + _ = web.GenericNestedResponse[types.Post]{} +} +``` +See [this file](https://github.com/swaggo/swag/blob/master/testdata/generics_nested/api/api.go) for more details +and other examples. + +### Change the default Go Template action delimiters +[#980](https://github.com/swaggo/swag/issues/980) +[#1177](https://github.com/swaggo/swag/issues/1177) + +If your swagger annotations or struct fields contain "{{" or "}}", the template generation will most likely fail, as these are the default delimiters for [go templates](https://pkg.go.dev/text/template#Template.Delims). + +To make the generation work properly, you can change the default delimiters with `-td`. For example: +```console +swag init -g http/api.go -td "[[,]]" +``` +The new delimiter is a string with the format "``,``". + +## About the Project +This project was inspired by [yvasiyarov/swagger](https://github.com/yvasiyarov/swagger) but we simplified the usage and added support a variety of [web frameworks](#supported-web-frameworks). Gopher image source is [tenntenn/gopher-stickers](https://github.com/tenntenn/gopher-stickers). It has licenses [creative commons licensing](http://creativecommons.org/licenses/by/3.0/deed.en). +## Contributors + +This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. + + + +## Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/swag#backer)] + + + + +## Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/swag#sponsor)] + + + + + + + + + + + + + + + +## License +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_large) diff --git a/vendor/github.com/swaggo/swag/README_pt.md b/vendor/github.com/swaggo/swag/README_pt.md new file mode 100644 index 0000000..7f95066 --- /dev/null +++ b/vendor/github.com/swaggo/swag/README_pt.md @@ -0,0 +1,968 @@ +# swag + +🌍 *[English](README.md) ∙ [简体中文](README_zh-CN.md) ∙ [Português](README_pt.md)* + + + +[![Build Status](https://github.com/swaggo/swag/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/features/actions) +[![Coverage Status](https://img.shields.io/codecov/c/github/swaggo/swag/master.svg)](https://codecov.io/gh/swaggo/swag) +[![Go Report Card](https://goreportcard.com/badge/github.com/swaggo/swag)](https://goreportcard.com/report/github.com/swaggo/swag) +[![codebeat badge](https://codebeat.co/badges/71e2f5e5-9e6b-405d-baf9-7cc8b5037330)](https://codebeat.co/projects/github-com-swaggo-swag-master) +[![Go Doc](https://godoc.org/github.com/swaggo/swagg?status.svg)](https://godoc.org/github.com/swaggo/swag) +[![Backers on Open Collective](https://opencollective.com/swag/backers/badge.svg)](#backers) +[![Sponsors on Open Collective](https://opencollective.com/swag/sponsors/badge.svg)](#sponsors) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_shield) +[![Release](https://img.shields.io/github/release/swaggo/swag.svg?style=flat-square)](https://github.com/swaggo/swag/releases) + +Swag converte anotações Go para Documentação Swagger 2.0. Criámos uma variedade de plugins para populares [Go web frameworks](#supported-web-frameworks). Isto permite uma integração rápida com um projecto Go existente (utilizando a Swagger UI). + +## Conteúdo +- [Começando](#começando) + - [Estruturas Web Suportadas](#estruturas-web-suportadas) + - [Como utilizá-lo com Gin](#como-como-ser-como-gin) + - [O formatador de swag](#a-formatação-de-swag) + - [Estado de Implementação](#implementação-estado) + - [Formato dos comentários declarativos](#formato-dos-comentarios-declarativos) + - [Informações Gerais API](#informações-gerais-api) + - [Operação API](#api-operacao) + - [Segurança](#seguranca) + - [Exemplos](#exemplos) + - [Descrições em múltiplas linhas](#descricoes-sobre-múltiplas-linhas) + - [Estrutura definida pelo utilizador com um tipo de matriz](#-estrutura-definida-pelo-utilizador-com-um-um-tipo) + - [Declaração de estruturação de funções](#function-scoped-struct-declaration) + - [Composição do modelo em resposta](#model-composição-em-resposta) + - [Adicionar um cabeçalho em resposta](#add-a-headers-in-response) + - [Utilizar parâmetros de caminhos múltiplos](#use-multiple-path-params) + - [Exemplo de valor de estrutura](#exemplo-do-valor-de-estrutura) + - [Schema Exemplo do corpo](#schemaexample-of-body) + - [Descrição da estrutura](#descrição-da-estrutura) + - [Usar etiqueta do tipo swaggertype para suportar o tipo personalizado](#use-swaggertype-tag-to-supported-custom-type) + - [Utilizar anulações globais para suportar um tipo personalizado](#use-global-overrides-to-support-a-custom-type) + - [Use swaggerignore tag para excluir um campo](#use-swaggerignore-tag-to-excluir-um-campo) + - [Adicionar informações de extensão ao campo de estruturação](#add-extension-info-to-struct-field) + - [Renomear modelo a expor](#renome-modelo-a-exibir) + - [Como utilizar as anotações de segurança](#como-utilizar-as-anotações-de-segurança) + - [Adicionar uma descrição para enumerar artigos](#add-a-description-for-enum-items) + - [Gerar apenas tipos de ficheiros de documentos específicos](#generate-only-specific-docs-file-file-types) + - [Como usar tipos genéricos](#como-usar-tipos-genéricos) +- [Sobre o projecto](#sobre-o-projecto) + +## Começando + +1. Adicione comentários ao código-fonte da API, consulte [Formato dos comentários declarativos](#declarative-comments-format). + +2. Descarregue o swag utilizando: +```sh +go install github.com/swaggo/swag/cmd/swag@latest +``` +Para construir a partir da fonte é necessário [Go](https://golang.org/dl/) (1.18 ou mais recente). + +Ou descarregar um binário pré-compilado a partir da [página de lançamento](https://github.com/swaggo/swag/releases). + +3. Executar `swag init` na pasta raiz do projecto que contém o ficheiro `main.go`. Isto irá analisar os seus comentários e gerar os ficheiros necessários (pasta `docs` e `docs/docs.go`). +```sh +swag init +``` + +Certifique-se de importar os `docs/docs.go` gerados para que a sua configuração específica fique "init" ed. Se as suas anotações API gerais não viverem em `main.go`, pode avisar a swag com a bandeira `-g`. +```sh +swag init -g http/api.go +``` + +4. (opcional) Utilizar o formato `swag fmt` no comentário SWAG. (Por favor, actualizar para a versão mais recente) + +```sh +swag fmt +``` + +## swag cli + +```sh +swag init -h +NOME: + swag init - Criar docs.go + +UTILIZAÇÃO: + swag init [opções de comando] [argumentos...] + +OPÇÕES: + --quiet, -q Fazer o logger ficar quiet (por padrão: falso) + --generalInfo valor, -g valor Go caminho do ficheiro em que 'swagger general API Info' está escrito (por padrão: "main.go") + --dir valor, -d valor Os directórios que deseja analisar, separados por vírgulas e de informação geral devem estar no primeiro (por padrão: "./") + --exclude valor Excluir directórios e ficheiros ao pesquisar, separados por vírgulas + -propertyStrategy da estratégia, -p valor da propriedadeEstratégia de nomeação de propriedades como snakecase,camelcase,pascalcase (por padrão: "camelcase") + --output de saída, -o valor directório de saída para todos os ficheiros gerados(swagger.json, swagger.yaml e docs.go) (por padrão: "./docs") + --outputTypes valor de saídaTypes, -- valor de saída Tipos de ficheiros gerados (docs.go, swagger.json, swagger.yaml) como go,json,yaml (por padrão: "go,json,yaml") + --parseVendor ParseVendor Parse go files na pasta 'vendor', desactivado por padrão (padrão: falso) + --parseInternal Parse go ficheiros em pacotes internos, desactivados por padrão (padrão: falso) + --generatedTime Gerar timestamp no topo dos docs.go, desactivado por padrão (padrão: falso) + --parteDepth value Dependência profundidade parse (por padrão: 100) + --templateDelims value, --td value fornecem delimitadores personalizados para a geração de modelos Go. O formato é leftDelim,rightDelim. Por exemplo: "[[,]]" + ... + + --help, -h mostrar ajuda (por padrão: falso) +``` + +```bash +swag fmt -h +NOME: + swag fmt - formato swag comentários + +UTILIZAÇÃO: + swag fmt [opções de comando] [argumentos...] + +OPÇÕES: + --dir valor, -d valor Os directórios que pretende analisar, separados por vírgulas e de informação geral devem estar no primeiro (por padrão: "./") + --excluir valor Excluir directórios e ficheiros ao pesquisar, separados por vírgulas + --generalInfo value, -g value Go file path in which 'swagger general API Info' is written (por padrão: "main.go") + --ajuda, -h mostrar ajuda (por padrão: falso) + +``` + +## Estruturas Web Suportadas + +- [gin](http://github.com/swaggo/gin-swagger) +- [echo](http://github.com/swaggo/echo-swagger) +- [buffalo](https://github.com/swaggo/buffalo-swagger) +- [net/http](https://github.com/swaggo/http-swagger) +- [gorilla/mux](https://github.com/swaggo/http-swagger) +- [go-chi/chi](https://github.com/swaggo/http-swagger) +- [flamingo](https://github.com/i-love-flamingo/swagger) +- [fiber](https://github.com/gofiber/swagger) +- [atreugo](https://github.com/Nerzal/atreugo-swagger) +- [hertz](https://github.com/hertz-contrib/swagger) + +## Como utilizá-lo com Gin + +Encontrar o código fonte de exemplo [aqui](https://github.com/swaggo/swag/tree/master/example/celler). + +1. Depois de utilizar `swag init` para gerar os documentos Swagger 2.0, importar os seguintes pacotes: +```go +import "github.com/swaggo/gin-swagger" // gin-swagger middleware +import "github.com/swaggo/files" // swagger embed files +``` + +2. Adicionar [Informações Gerais API](#general-api-info) anotações em código `main.go`: + + +```go +// @title Swagger Example API +// @version 1.0 +// @description This is a sample server celler server. +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html + +// @host localhost:8080 +// @BasePath /api/v1 + +// @securityDefinitions.basic BasicAuth + +// @externalDocs.description OpenAPI +// @externalDocs.url https://swagger.io/resources/open-api/ +func main() { + r := gin.Default() + + c := controller.NewController() + + v1 := r.Group("/api/v1") + { + accounts := v1.Group("/accounts") + { + accounts.GET(":id", c.ShowAccount) + accounts.GET("", c.ListAccounts) + accounts.POST("", c.AddAccount) + accounts.DELETE(":id", c.DeleteAccount) + accounts.PATCH(":id", c.UpdateAccount) + accounts.POST(":id/images", c.UploadAccountImage) + } + //... + } + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + r.Run(":8080") +} +//... +``` + +Além disso, algumas informações API gerais podem ser definidas de forma dinâmica. O pacote de código gerado `docs` exporta a variável `SwaggerInfo` que podemos utilizar para definir programticamente o título, descrição, versão, hospedeiro e caminho base. Exemplo utilizando Gin: + +```go +package main + +import ( + "github.com/gin-gonic/gin" + "github.com/swaggo/files" + "github.com/swaggo/gin-swagger" + + "./docs" // docs is generated by Swag CLI, you have to import it. +) + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html +func main() { + + // programmatically set swagger info + docs.SwaggerInfo.Title = "Swagger Example API" + docs.SwaggerInfo.Description = "This is a sample server Petstore server." + docs.SwaggerInfo.Version = "1.0" + docs.SwaggerInfo.Host = "petstore.swagger.io" + docs.SwaggerInfo.BasePath = "/v2" + docs.SwaggerInfo.Schemes = []string{"http", "https"} + + r := gin.New() + + // use ginSwagger middleware to serve the API docs + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + + r.Run() +} +``` + +3. Adicionar [Operação API](#api-operacao) anotações em código `controller` + +```go +package controller + +import ( + "fmt" + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/swaggo/swag/example/celler/httputil" + "github.com/swaggo/swag/example/celler/model" +) + +// ShowAccount godoc +// @Summary Show an account +// @Description get string by ID +// @Tags accounts +// @Accept json +// @Produce json +// @Param id path int true "Account ID" +// @Success 200 {object} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts/{id} [get] +func (c *Controller) ShowAccount(ctx *gin.Context) { + id := ctx.Param("id") + aid, err := strconv.Atoi(id) + if err != nil { + httputil.NewError(ctx, http.StatusBadRequest, err) + return + } + account, err := model.AccountOne(aid) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, account) +} + +// ListAccounts godoc +// @Summary List accounts +// @Description get accounts +// @Tags accounts +// @Accept json +// @Produce json +// @Param q query string false "name search by q" Format(email) +// @Success 200 {array} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts [get] +func (c *Controller) ListAccounts(ctx *gin.Context) { + q := ctx.Request.URL.Query().Get("q") + accounts, err := model.AccountsAll(q) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, accounts) +} +//... +``` + +```console +swag init +``` + +4. Execute a sua aplicação, e navegue para http://localhost:8080/swagger/index.html. Verá os documentos Swagger 2.0 Api, como mostrado abaixo: + +![swagger_index.html](https://raw.githubusercontent.com/swaggo/swag/master/assets/swagger-image.png) + +## O formatador de swag + +Os Swag Comments podem ser formatados automaticamente, assim como 'go fmt'. +Encontre o resultado da formatação [aqui](https://github.com/swaggo/swag/tree/master/example/celler). + +Usage: +```shell +swag fmt +``` + +Exclude folder: +```shell +swag fmt -d ./ --exclude ./internal +``` + +Ao utilizar `swag fmt`, é necessário assegurar-se de que tem um comentário doc para a função a fim de assegurar uma formatação correcta. +Isto deve-se ao `swag fmt` que traça comentários swag com separadores, o que só é permitido *após* um comentário doc padrão. + +Por exemplo, utilizar + +```go +// ListAccounts lists all existing accounts +// +// @Summary List accounts +// @Description get accounts +// @Tags accounts +// @Accept json +// @Produce json +// @Param q query string false "name search by q" Format(email) +// @Success 200 {array} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts [get] +func (c *Controller) ListAccounts(ctx *gin.Context) { +``` + +## Estado de Implementação + +[Documento Swagger 2.0](https://swagger.io/docs/specification/2-0/basic-structure/) + +- [x] Estrutura básica +- [x] Hospedeiro API e Caminho Base +- [x] Caminhos e operações +- [x] Descrição dos parâmetros +- [x] Descrever o corpo do pedido +- [x] Descrição das respostas +- [x] Tipos MIME +- [x] Autenticação + - [x] Autenticação básica + - [x] Chaves API +- [x] Acrescentar exemplos +- [x] Carregamento de ficheiros +- [x] Enums +- [x] Operações de Agrupamento com Etiquetas +- Extensões Swagger + +## Formato dos comentários declarativos + +## Informações Gerais API + +**Exemplo** +[celler/main.go](https://github.com/swaggo/swag/blob/master/example/celler/main.go) + +| anotação | descrição | exemplo | +|-------------|--------------------------------------------|---------------------------------| +| title | **Obrigatório.** O título da aplicação.| // @title Swagger Example API | +| version | **Obrigatório.** Fornece a versão da aplicação API.| // @version 1.0 | +| description | Uma breve descrição da candidatura. |// @descrição Este é um servidor servidor de celas de amostra. | +| tag.name | Nome de uma tag.| // @tag.name Este é o nome da tag | +| tag.description | Descrição da tag | // @tag.description Cool Description | +| tag.docs.url | Url da Documentação externa da tag | // @tag.docs.url https://example.com| +| tag.docs.description | Descrição da documentação externa da tag| // @tag.docs.description Melhor exemplo de documentação | +| TermsOfService | Os Termos de Serviço para o API.| // @termsOfService http://swagger.io/terms/ | +| contact.name | A informação de contacto para a API exposta.| // @contacto.name Suporte API | +| contact.url | O URL que aponta para as informações de contacto. DEVE estar no formato de um URL. | // @contact.url http://www.swagger.io/support| +| contact.email| O endereço de email da pessoa/organização de contacto. DEVE estar no formato de um endereço de correio electrónico.| // @contact.email support@swagger.io | +| license.name | **Obrigatório.** O nome da licença utilizada para a API.|// @licença.name Apache 2.0| +| license.url | Um URL para a licença utilizada para a API. DEVE estar no formato de um URL. | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html | +| host | O anfitrião (nome ou ip) que serve o API. | // @host localhost:8080 | +| BasePath | O caminho de base sobre o qual o API é servido. | // @BasePath /api/v1 | +| accept | Uma lista de tipos de MIME que os APIs podem consumir. Note que accept só afecta operações com um organismo de pedido, tais como POST, PUT e PATCH. O valor DEVE ser o descrito em [Tipos de Mime](#mime-types). | // @accept json | +| produce | Uma lista de tipos de MIME que os APIs podem produce. O valor DEVE ser o descrito em [Tipos de Mime](#mime-types). | // @produce json | +| query.collection.format | O formato padrão de param de colecção(array) em query,enums:csv,multi,pipes,tsv,ssv. Se não definido, csv é o padrão.| // @query.collection.format multi +| schemes | O protocolo de transferência para a operação que separou por espaços. | // @schemes http https | +| externalDocs.description | Descrição do documento externo. | // @externalDocs.description OpenAPI | +| externalDocs.url | URL do documento externo. | // @externalDocs.url https://swagger.io/resources/open-api/ | +| x-name | A chave de extensão, deve ser iniciada por x- e tomar apenas o valor json | // @x-example-key {"chave": "valor"} | + +### Usando descrições de remarcação para baixo +Quando uma pequena sequência na sua documentação é insuficiente, ou precisa de imagens, exemplos de códigos e coisas do género, pode querer usar descrições de marcação. Para utilizar as descrições markdown, utilize as seguintes anotações. + +| anotação | descrição | exemplo | +|-------------|--------------------------------------------|---------------------------------| +| title | **Obrigatório.** O título da aplicação.| // @title Swagger Example API | +| version | **Obrigatório.** Fornece a versão da aplicação API.| // @versão 1.0 | +| description.markdown | Uma breve descrição da candidatura. Parsed a partir do ficheiro api.md. Esta é uma alternativa a @description |// @description.markdown Sem valor necessário, isto analisa a descrição do ficheiro api.md |. +| tag.name | Nome de uma tag.| // @tag.name Este é o nome da tag | +| tag.description.markdown | Descrição da tag esta é uma alternativa à tag.description. A descrição será lida a partir de um ficheiro nomeado como tagname.md | // @tag.description.markdown | + +## Operação API + +**Exemplo** +[celler/controller](https://github.com/swaggo/swag/tree/master/example/celler/controller) + +| anotação | descrição | +|-------------|----------------------------------------------------------------------------------------------------------------------------| +| descrição | Uma explicação verbosa do comportamento da operação. | +| description.markdown | Uma breve descrição da candidatura. A descrição será lida a partir de um ficheiro. Por exemplo, `@description.markdown details` irá carregar `details.md`| // @description.file endpoint.description.markdown | +| id | Um fio único utilizado para identificar a operação. Deve ser única entre todas as operações API. | +| tags | Uma lista de tags para cada operação API que separou por vírgulas. | +| summary | Um breve resumo do que a operação faz. | +| accept | Uma lista de tipos de MIME que os APIs podem consumir. Note que accept só afecta operações com um organismo de pedido, tais como POST, PUT e PATCH. O valor DEVE ser o descrito em [Tipos de Mime](#mime-types). | +| produce | Uma lista de tipos de MIME que os APIs podem produce. O valor DEVE ser o descrito em [Tipos de Mime](#mime-types). | +| param | Parâmetros que se separaram por espaços. `param name`,`param type`,`data type`,`is mandatory?`,`comment` `attribute(optional)` | +| security | [Segurança](#security) para cada operação API. | +| success | resposta de sucesso que separou por espaços. `return code or default`,`{param type}`,`data type`,`comment` |. +| failure | Resposta de falha que separou por espaços. `return code or default`,`{param type}`,`data type`,`comment` | +| response | Igual ao `sucesso` e `falha` | +| header | Cabeçalho em resposta que separou por espaços. `código de retorno`,`{tipo de parâmetro}`,`tipo de dados`,`comentário` |. +| router | Definição do caminho que separou por espaços. caminho",`path`,`[httpMethod]` |[httpMethod]` | +| x-name | A chave de extensão, deve ser iniciada por x- e tomar apenas o valor json. | +| x-codeSample | Optional Markdown use. tomar `file` como parâmetro. Isto irá então procurar um ficheiro nomeado como o resumo na pasta dada. | +| deprecated | Marcar o ponto final como depreciado. | + +## Mime Types + +`swag` aceita todos os tipos MIME que estão no formato correcto, ou seja, correspondem `*/*`. +Além disso, `swag` também aceita pseudónimos para alguns tipos de MIME, como se segue: + + +| Alias | MIME Type | +|-----------------------|-----------------------------------| +| json | application/json | +| xml | text/xml | +| plain | text/plain | +| html | text/html | +| mpfd | multipart/form-data | +| x-www-form-urlencoded | application/x-www-form-urlencoded | +| json-api | application/vnd.api+json | +| json-stream | application/x-json-stream | +| octet-stream | application/octet-stream | +| png | image/png | +| jpeg | image/jpeg | +| gif | image/gif | + + + +## Tipo de parâmetro + +- query +- path +- header +- body +- formData + +## Tipo de dados + +- string (string) +- integer (int, uint, uint32, uint64) +- number (float32) +- boolean (bool) +- file (param data type when uploading) +- user defined struct + +## Segurança +| anotação | descrição | parâmetros | exemplo | +|------------|-------------|------------|---------| +| securitydefinitions.basic | [Basic](https://swagger.io/docs/specification/2-0/authentication/basic-authentication/) auth. | | // @securityDefinitions.basicAuth | [Básico]() +| securitydefinitions.apikey | [chave API](https://swagger.io/docs/specification/2-0/authentication/api-keys/) auth. | in, name, description | // @securityDefinitions.apikey ApiKeyAuth | +| securitydefinitions.oauth2.application | [Aplicação OAuth2](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope, description | // @securitydefinitions.oauth2.application OAuth2Application | +| securitydefinitions.oauth2.implicit | [OAuth2 implicit](https://swagger.io/docs/specification/authentication/oauth2/) auth. | authorizationUrl, scope, description | // @securitydefinitions.oauth2.implicit OAuth2Implicit | [OAuth2Implicit]() +| securitydefinitions.oauth2.password | [OAuth2 password](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope, description | // @securitydefinitions.oauth2.password OAuth2Password | +| securitydefinitions.oauth2.accessCode | [código de acesso OAuth2](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, authorizationUrl, scope, description | // @securitydefinitions.oauth2.accessCode OAuth2AccessCode | [código de acesso OAuth2.accessCode]() + + +| anotação de parâmetros | exemplo | +|---------------------------------|-------------------------------------------------------------------------| +| in | // @in header | +| name | // @name Authorization | +| tokenUrl | // @tokenUrl https://example.com/oauth/token | +| authorizationurl | // @authorizationurl https://example.com/oauth/authorize | +| scope.hoge | // @scope.write Grants write access | +| description | // @descrição OAuth protege os pontos finais da nossa entidade | + +## Atributo + +```go +// @Param enumstring query string false "string enums" Enums(A, B, C) +// @Param enumint query int false "int enums" Enums(1, 2, 3) +// @Param enumnumber query number false "int enums" Enums(1.1, 1.2, 1.3) +// @Param string query string false "string valid" minlength(5) maxlength(10) +// @Param int query int false "int valid" minimum(1) maximum(10) +// @Param default query string false "string default" default(A) +// @Param example query string false "string example" example(string) +// @Param collection query []string false "string collection" collectionFormat(multi) +// @Param extensions query []string false "string collection" extensions(x-example=test,x-nullable) +``` + +It also works for the struct fields: + +```go +type Foo struct { + Bar string `minLength:"4" maxLength:"16" example:"random string"` + Baz int `minimum:"10" maximum:"20" default:"15"` + Qux []string `enums:"foo,bar,baz"` +} +``` + +### Disponível + +Nome do campo | Tipo | Descrição +---|:---:|--- +validate | `string` | Determina a validação para o parâmetro. Os valores possíveis são: `required,optional`. +default | * | Declara o valor do parâmetro que o servidor utilizará se nenhum for fornecido, por exemplo, uma "contagem" para controlar o número de resultados por página poderá ser por defeito de 100 se não for fornecido pelo cliente no pedido. (Nota: "por defeito" não tem significado para os parâmetros requeridos). +See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. Ao contrário do esquema JSON, este valor DEVE estar em conformidade com o definido [`type`](#parameterType) para este parâmetro. +maximum | `number` | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.2. +minimum | `number` | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.3. +multipleOf | `number` | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.1. +maxLength | `integer` | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.1. +minLength | `integer` | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.2. +enums | [\*] | Ver https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1. +format | `string` | O formato de extensão para o anteriormente mencionado [`type`](#parameterType). Ver [Data Type Formats](https://swagger.io/specification/v2/#dataTypeFormat) para mais detalhes. +collectionFormat | `string` |Determina o formato da matriz se for utilizada uma matriz de tipos. Os valores possíveis são:
      • `csv` - valores separados por vírgulas `foo,bar`.
      • `ssv` - valores separados por espaço `foo bar`.
      • `tsv` - valores separados por tabulação `foo\tbar`.
      • `pipes` - valores separados por tubo foo|bar.
      • `multi` - corresponde a múltiplas instâncias de parâmetros em vez de múltiplos valores para uma única instância `foo=bar&foo=baz`. This is valid only for parameters [`in`](#parameterIn) "query" or "formData".
      Default value is `csv`. +example | * | Declara o exemplo para o valor do parâmetro +extensions | `string` | Acrescentar extensão aos parâmetros. + +### Futuro + +Nome do campo | Tipo | Description +---|:---:|--- +pattern | `string` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. +maxItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.2. +minItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.3. +uniqueItems | `boolean` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.4. + +## Exemplos + + +### Descrições em múltiplas linhas + +É possível acrescentar descrições que abranjam várias linhas tanto na descrição geral da api como em definições de rotas como esta: + +```go +// @description This is the first line +// @description This is the second line +// @description And so forth. +``` + +### Estrutura definida pelo utilizador com um tipo de matriz + +```go +// @Success 200 {array} model.Account <-- This is a user defined struct. +``` + +```go +package model + +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` +} +``` + + +### Declaração de estruturação de funções + +Pode declarar as estruturas de resposta do seu pedido dentro de um corpo funcional. +Deve ter de seguir a convenção de nomeação +`.. `. + +```go +package main + +// @Param request body main.MyHandler.request true "query params" +// @Success 200 {object} main.MyHandler.response +// @Router /test [post] +func MyHandler() { + type request struct { + RequestField string + } + + type response struct { + ResponseField string + } +} +``` + + +### Composição do modelo em resposta +```go +// JSONResult's data field will be overridden by the specific type proto.Order +@success 200 {object} jsonresult.JSONResult{data=proto.Order} "desc" +``` + +```go +type JSONResult struct { + Code int `json:"code" ` + Message string `json:"message"` + Data interface{} `json:"data"` +} + +type Order struct { //in `proto` package + Id uint `json:"id"` + Data interface{} `json:"data"` +} +``` + +- também suportam uma variedade de objectos e tipos primitivos como resposta aninhada +```go +@success 200 {object} jsonresult.JSONResult{data=[]proto.Order} "desc" +@success 200 {object} jsonresult.JSONResult{data=string} "desc" +@success 200 {object} jsonresult.JSONResult{data=[]string} "desc" +``` + +- campos múltiplos que se sobrepõem. campo será adicionado se não existir +```go +@success 200 {object} jsonresult.JSONResult{data1=string,data2=[]string,data3=proto.Order,data4=[]proto.Order} "desc" +``` +- overriding deep-level fields +```go +type DeepObject struct { //in `proto` package + ... +} +@success 200 {object} jsonresult.JSONResult{data1=proto.Order{data=proto.DeepObject},data2=[]proto.Order{data=[]proto.DeepObject}} "desc" +``` + +### Adicionar um cabeçalho em resposta + +```go +// @Success 200 {string} string "ok" +// @failure 400 {string} string "error" +// @response default {string} string "other error" +// @Header 200 {string} Location "/entity/1" +// @Header 200,400,default {string} Token "token" +// @Header all {string} Token2 "token2" +``` + + +### Utilizar parâmetros de caminhos múltiplos + +```go +/// ... +// @Param group_id path int true "Group ID" +// @Param account_id path int true "Account ID" +// ... +// @Router /examples/groups/{group_id}/accounts/{account_id} [get] +``` + +### Adicionar múltiplos caminhos + +```go +/// ... +// @Param group_id path int true "Group ID" +// @Param user_id path int true "User ID" +// ... +// @Router /examples/groups/{group_id}/user/{user_id}/address [put] +// @Router /examples/user/{user_id}/address [put] +``` + +### Exemplo de valor de estrutura + +```go +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` + PhotoUrls []string `json:"photo_urls" example:"http://test/image/1.jpg,http://test/image/2.jpg"` +} +``` + +### Schema Exemplo do corpo + +```go +// @Param email body string true "message/rfc822" SchemaExample(Subject: Testmail\r\n\r\nBody Message\r\n) +``` + +### Descrição da estrutura + +```go +// Account model info +// @Description User account information +// @Description with user id and username +type Account struct { + // ID this is userid + ID int `json:"id"` + Name string `json:"name"` // This is Name +} +``` + +[#708](https://github.com/swaggo/swag/issues/708) O analisador trata apenas de comentários estruturais a partir de `@Description` attribute. + +Assim, gerou o doc. de swagger como se segue: +```json +"Account": { + "type":"object", + "description": "User account information with user id and username" + "properties": { + "id": { + "type": "integer", + "description": "ID this is userid" + }, + "name": { + "type":"string", + "description": "This is Name" + } + } +} +``` + +### Usar etiqueta do tipo swaggertype para suportar o tipo personalizado +[#201](https://github.com/swaggo/swag/issues/201#issuecomment-475479409) + +```go +type TimestampTime struct { + time.Time +} + +///implement encoding.JSON.Marshaler interface +func (t *TimestampTime) MarshalJSON() ([]byte, error) { + bin := make([]byte, 16) + bin = strconv.AppendInt(bin[:0], t.Time.Unix(), 10) + return bin, nil +} + +func (t *TimestampTime) UnmarshalJSON(bin []byte) error { + v, err := strconv.ParseInt(string(bin), 10, 64) + if err != nil { + return err + } + t.Time = time.Unix(v, 0) + return nil +} +/// + +type Account struct { + // Override primitive type by simply specifying it via `swaggertype` tag + ID sql.NullInt64 `json:"id" swaggertype:"integer"` + + // Override struct type to a primitive type 'integer' by specifying it via `swaggertype` tag + RegisterTime TimestampTime `json:"register_time" swaggertype:"primitive,integer"` + + // Array types can be overridden using "array," format + Coeffs []big.Float `json:"coeffs" swaggertype:"array,number"` +} +``` + +[#379](https://github.com/swaggo/swag/issues/379) +```go +type CerticateKeyPair struct { + Crt []byte `json:"crt" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` + Key []byte `json:"key" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` +} +``` +generated swagger doc as follows: +```go +"api.MyBinding": { + "type":"object", + "properties":{ + "crt":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + }, + "key":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + } + } +} + +``` + +### Utilizar anulações globais para suportar um tipo personalizado + +Se estiver a utilizar ficheiros gerados, as etiquetas [`swaggertype`](#use-swaggertype-tag-to-supported-custom-type) ou `swaggerignore` podem não ser possíveis. + +Ao passar um mapeamento para swag com `--overridesFile` pode dizer swag para utilizar um tipo no lugar de outro onde quer que apareça. Por defeito, se um ficheiro `.swaggo` estiver presente no directório actual, será utilizado. + +Go code: +```go +type MyStruct struct { + ID sql.NullInt64 `json:"id"` + Name sql.NullString `json:"name"` +} +``` + +`.swaggo`: +``` +// Substituir todos os NullInt64 por int +replace database/sql.NullInt64 int + +// Não inclua quaisquer campos do tipo base de database/sql. +NullString no swagger docs +skip database/sql.NullString +``` + +As directivas possíveis são comentários (começando por `//`), `replace path/to/a.type path/to/b.type`, e `skip path/to/a.type`. + +(Note que os caminhos completos para qualquer tipo nomeado devem ser fornecidos para evitar problemas quando vários pacotes definem um tipo com o mesmo nome) + +Entregue em: +```go +"types.MyStruct": { + "id": "integer" +} + +### Use swaggerignore tag para excluir um campo + +```go +type Account struct { + ID string `json:"id"` + Name string `json:"name"` + Ignored int `swaggerignore:"true"` +} +``` + + +### Adicionar informações de extensão ao campo de estruturação + +```go +type Account struct { + ID string `json:"id" extensions:"x-nullable,x-abc=def,!x-omitempty"` // extensions fields must start with "x-" +} +``` + +gerar doc. de swagger como se segue: + +```go +"Account": { + "type": "object", + "properties": { + "id": { + "type": "string", + "x-nullable": true, + "x-abc": "def", + "x-omitempty": false + } + } +} +``` + + +### Renomear modelo a expor + +```golang +type Resp struct { + Code int +}//@name Response +``` + +### Como utilizar as anotações de segurança + +Informações API gerais. + +```go +// @securityDefinitions.basic BasicAuth + +// @securitydefinitions.oauth2.application OAuth2Application +// @tokenUrl https://example.com/oauth/token +// @scope.write Grants write access +// @scope.admin Grants read and write access to administrative information +``` + +Cada operação API. + +```go +// @Security ApiKeyAuth +``` + +Faça-o AND condicione-o + +```go +// @Security ApiKeyAuth +// @Security OAuth2Application[write, admin] +``` + +Faça-o OR condição + +```go +// @Security ApiKeyAuth || firebase +// @Security OAuth2Application[write, admin] || APIKeyAuth +``` + + + +### Adicionar uma descrição para enumerar artigos + +```go +type Example struct { + // Sort order: + // * asc - Ascending, from A to Z. + // * desc - Descending, from Z to A. + Order string `enums:"asc,desc"` +} +``` + +### Gerar apenas tipos de ficheiros de documentos específicos + +Por defeito, o comando `swag` gera especificação Swagger em três tipos diferentes de ficheiros/arquivos: +- docs.go +- swagger.json +- swagger.yaml + +Se desejar limitar um conjunto de tipos de ficheiros que devem ser gerados pode utilizar a bandeira `--outputTypes` (short `-ot`). O valor por defeito é `go,json,yaml` - tipos de saída separados por vírgula. Para limitar a saída apenas a ficheiros `go` e `yaml`, escrever-se-ia `go,yaml'. Com comando completo que seria `swag init --outputTypes go,yaml`. + +### Como usar tipos genéricos + +```go +// @Success 200 {object} web.GenericNestedResponse[types.Post] +// @Success 204 {object} web.GenericNestedResponse[types.Post, Types.AnotherOne] +// @Success 201 {object} web.GenericNestedResponse[web.GenericInnerType[types.Post]] +func GetPosts(w http.ResponseWriter, r *http.Request) { + _ = web.GenericNestedResponse[types.Post]{} +} +``` +Para mais detalhes e outros exemplos, veja [esse arquivo](https://github.com/swaggo/swag/blob/master/testdata/generics_nested/api/api.go) + +### Alterar os delimitadores de acção padrão Go Template +[#980](https://github.com/swaggo/swag/issues/980) +[#1177](https://github.com/swaggo/swag/issues/1177) + +Se as suas anotações ou campos estruturantes contêm "{{" or "}}", a geração de modelos irá muito provavelmente falhar, uma vez que estes são os delimitadores por defeito para [go templates](https://pkg.go.dev/text/template#Template.Delims). + +Para que a geração funcione correctamente, pode alterar os delimitadores por defeito com `-td'. Por exemplo: +``console +swag init -g http/api.go -td "[[,]" +``` + +O novo delimitador é um fio com o formato "``,``". + +## Sobre o projecto +Este projecto foi inspirado por [yvasiyarov/swagger](https://github.com/yvasiyarov/swagger) mas simplificámos a utilização e acrescentámos apoio a uma variedade de [frameworks web](#estruturas-web-suportadas). A fonte de imagem Gopher é [tenntenn/gopher-stickers](https://github.com/tenntenn/gopher-stickers). Tem licenças [creative commons licensing](http://creativecommons.org/licenses/by/3.0/deed.en). + +## Contribuidores + +Este projecto existe graças a todas as pessoas que contribuem. [[Contribute](CONTRIBUTING.md)]. + + + +## Apoios + +Obrigado a todos os nossos apoiantes! 🙏 [[Become a backer](https://opencollective.com/swag#backer)] + + + + +## Patrocinadores + +Apoiar este projecto tornando-se um patrocinador. O seu logótipo aparecerá aqui com um link para o seu website. [[Become a sponsor](https://opencollective.com/swag#sponsor)] + + + + + + + + + + + + + + +## Licença +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_large) diff --git a/vendor/github.com/swaggo/swag/README_zh-CN.md b/vendor/github.com/swaggo/swag/README_zh-CN.md new file mode 100644 index 0000000..87d600b --- /dev/null +++ b/vendor/github.com/swaggo/swag/README_zh-CN.md @@ -0,0 +1,770 @@ +# swag + +🌍 *[English](README.md) ∙ [简体中文](README_zh-CN.md)* + + + +[![Travis Status](https://img.shields.io/travis/swaggo/swag/master.svg)](https://travis-ci.org/swaggo/swag) +[![Coverage Status](https://img.shields.io/codecov/c/github/swaggo/swag/master.svg)](https://codecov.io/gh/swaggo/swag) +[![Go Report Card](https://goreportcard.com/badge/github.com/swaggo/swag)](https://goreportcard.com/report/github.com/swaggo/swag) +[![codebeat badge](https://codebeat.co/badges/71e2f5e5-9e6b-405d-baf9-7cc8b5037330)](https://codebeat.co/projects/github-com-swaggo-swag-master) +[![Go Doc](https://godoc.org/github.com/swaggo/swagg?status.svg)](https://godoc.org/github.com/swaggo/swag) +[![Backers on Open Collective](https://opencollective.com/swag/backers/badge.svg)](#backers) +[![Sponsors on Open Collective](https://opencollective.com/swag/sponsors/badge.svg)](#sponsors) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_shield) +[![Release](https://img.shields.io/github/release/swaggo/swag.svg?style=flat-square)](https://github.com/swaggo/swag/releases) + +Swag将Go的注释转换为Swagger2.0文档。我们为流行的 [Go Web Framework](#支持的Web框架) 创建了各种插件,这样可以与现有Go项目快速集成(使用Swagger UI)。 + +## 目录 + +- [快速开始](#快速开始) +- [支持的Web框架](#支持的web框架) +- [如何与Gin集成](#如何与gin集成) +- [格式化说明](#格式化说明) +- [开发现状](#开发现状) +- [声明式注释格式](#声明式注释格式) + - [通用API信息](#通用api信息) + - [API操作](#api操作) + - [安全性](#安全性) +- [样例](#样例) + - [多行的描述](#多行的描述) + - [用户自定义的具有数组类型的结构](#用户自定义的具有数组类型的结构) + - [响应对象中的模型组合](#响应对象中的模型组合) + - [在响应中增加头字段](#在响应中增加头字段) + - [使用多路径参数](#使用多路径参数) + - [结构体的示例值](#结构体的示例值) + - [结构体描述](#结构体描述) + - [使用`swaggertype`标签更改字段类型](#使用`swaggertype`标签更改字段类型) + - [使用`swaggerignore`标签排除字段](#使用swaggerignore标签排除字段) + - [将扩展信息添加到结构字段](#将扩展信息添加到结构字段) + - [对展示的模型重命名](#对展示的模型重命名) + - [如何使用安全性注释](#如何使用安全性注释) +- [项目相关](#项目相关) + +## 快速开始 + +1. 将注释添加到API源代码中,请参阅声明性注释格式。 +2. 使用如下命令下载swag: + +```bash +go install github.com/swaggo/swag/cmd/swag@latest +``` + +从源码开始构建的话,需要有Go环境(1.18及以上版本)。 + +或者从github的release页面下载预编译好的二进制文件。 + +3. 在包含`main.go`文件的项目根目录运行`swag init`。这将会解析注释并生成需要的文件(`docs`文件夹和`docs/docs.go`)。 + +```bash +swag init +``` + +确保导入了生成的`docs/docs.go`文件,这样特定的配置文件才会被初始化。如果通用API注释没有写在`main.go`中,可以使用`-g`标识符来告知swag。 + +```bash +swag init -g http/api.go +``` + +4. (可选) 使用`fmt`格式化 SWAG 注释。(请先升级到最新版本) + +```bash +swag fmt +``` + +## swag cli + +```bash +swag init -h +NAME: + swag init - Create docs.go + +USAGE: + swag init [command options] [arguments...] + +OPTIONS: + --generalInfo value, -g value API通用信息所在的go源文件路径,如果是相对路径则基于API解析目录 (默认: "main.go") + --dir value, -d value API解析目录 (默认: "./") + --exclude value 解析扫描时排除的目录,多个目录可用逗号分隔(默认:空) + --propertyStrategy value, -p value 结构体字段命名规则,三种:snakecase,camelcase,pascalcase (默认: "camelcase") + --output value, -o value 文件(swagger.json, swagger.yaml and doc.go)输出目录 (默认: "./docs") + --parseVendor 是否解析vendor目录里的go源文件,默认不 + --parseDependency 是否解析依赖目录中的go源文件,默认不 + --markdownFiles value, --md value 指定API的描述信息所使用的markdown文件所在的目录 + --generatedTime 是否输出时间到输出文件docs.go的顶部,默认是 + --codeExampleFiles value, --cef value 解析包含用于 x-codeSamples 扩展的代码示例文件的文件夹,默认禁用 + --parseInternal 解析 internal 包中的go文件,默认禁用 + --parseDepth value 依赖解析深度 (默认: 100) + --instanceName value 设置文档实例名 (默认: "swagger") +``` + +```bash +swag fmt -h +NAME: + swag fmt - format swag comments + +USAGE: + swag fmt [command options] [arguments...] + +OPTIONS: + --dir value, -d value API解析目录 (默认: "./") + --exclude value 解析扫描时排除的目录,多个目录可用逗号分隔(默认:空) + --generalInfo value, -g value API通用信息所在的go源文件路径,如果是相对路径则基于API解析目录 (默认: "main.go") + --help, -h show help (default: false) + +``` + +## 支持的Web框架 + +- [gin](http://github.com/swaggo/gin-swagger) +- [echo](http://github.com/swaggo/echo-swagger) +- [buffalo](https://github.com/swaggo/buffalo-swagger) +- [net/http](https://github.com/swaggo/http-swagger) +- [gorilla/mux](https://github.com/swaggo/http-swagger) +- [go-chi/chi](https://github.com/swaggo/http-swagger) +- [flamingo](https://github.com/i-love-flamingo/swagger) +- [fiber](https://github.com/gofiber/swagger) +- [atreugo](https://github.com/Nerzal/atreugo-swagger) +- [hertz](https://github.com/hertz-contrib/swagger) + +## 如何与Gin集成 + +[点击此处](https://github.com/swaggo/swag/tree/master/example/celler)查看示例源代码。 + +1. 使用`swag init`生成Swagger2.0文档后,导入如下代码包: + +```go +import "github.com/swaggo/gin-swagger" // gin-swagger middleware +import "github.com/swaggo/files" // swagger embed files +``` + +2. 在`main.go`源代码中添加通用的API注释: + +```go +// @title Swagger Example API +// @version 1.0 +// @description This is a sample server celler server. +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html + +// @host localhost:8080 +// @BasePath /api/v1 + +// @securityDefinitions.basic BasicAuth + +// @externalDocs.description OpenAPI +// @externalDocs.url https://swagger.io/resources/open-api/ +func main() { + r := gin.Default() + + c := controller.NewController() + + v1 := r.Group("/api/v1") + { + accounts := v1.Group("/accounts") + { + accounts.GET(":id", c.ShowAccount) + accounts.GET("", c.ListAccounts) + accounts.POST("", c.AddAccount) + accounts.DELETE(":id", c.DeleteAccount) + accounts.PATCH(":id", c.UpdateAccount) + accounts.POST(":id/images", c.UploadAccountImage) + } + //... + } + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + r.Run(":8080") +} +//... +``` + +此外,可以动态设置一些通用的API信息。生成的代码包`docs`导出`SwaggerInfo`变量,使用该变量可以通过编码的方式设置标题、描述、版本、主机和基础路径。使用Gin的示例: + +```go +package main + +import ( + "github.com/gin-gonic/gin" + "github.com/swaggo/files" + "github.com/swaggo/gin-swagger" + + "./docs" // docs is generated by Swag CLI, you have to import it. +) + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html +func main() { + + // programatically set swagger info + docs.SwaggerInfo.Title = "Swagger Example API" + docs.SwaggerInfo.Description = "This is a sample server Petstore server." + docs.SwaggerInfo.Version = "1.0" + docs.SwaggerInfo.Host = "petstore.swagger.io" + docs.SwaggerInfo.BasePath = "/v2" + docs.SwaggerInfo.Schemes = []string{"http", "https"} + + r := gin.New() + + // use ginSwagger middleware to serve the API docs + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + + r.Run() +} +``` + +3. 在`controller`代码中添加API操作注释: + +```go +package controller + +import ( + "fmt" + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/swaggo/swag/example/celler/httputil" + "github.com/swaggo/swag/example/celler/model" +) + +// ShowAccount godoc +// @Summary Show an account +// @Description get string by ID +// @Tags accounts +// @Accept json +// @Produce json +// @Param id path int true "Account ID" +// @Success 200 {object} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts/{id} [get] +func (c *Controller) ShowAccount(ctx *gin.Context) { + id := ctx.Param("id") + aid, err := strconv.Atoi(id) + if err != nil { + httputil.NewError(ctx, http.StatusBadRequest, err) + return + } + account, err := model.AccountOne(aid) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, account) +} + +// ListAccounts godoc +// @Summary List accounts +// @Description get accounts +// @Tags accounts +// @Accept json +// @Produce json +// @Param q query string false "name search by q" Format(email) +// @Success 200 {array} model.Account +// @Failure 400 {object} httputil.HTTPError +// @Failure 404 {object} httputil.HTTPError +// @Failure 500 {object} httputil.HTTPError +// @Router /accounts [get] +func (c *Controller) ListAccounts(ctx *gin.Context) { + q := ctx.Request.URL.Query().Get("q") + accounts, err := model.AccountsAll(q) + if err != nil { + httputil.NewError(ctx, http.StatusNotFound, err) + return + } + ctx.JSON(http.StatusOK, accounts) +} +//... +``` + +```bash +swag init +``` + +4. 运行程序,然后在浏览器中访问 http://localhost:8080/swagger/index.html 。将看到Swagger 2.0 Api文档,如下所示: + +![swagger_index.html](https://raw.githubusercontent.com/swaggo/swag/master/assets/swagger-image.png) + +## 格式化说明 + +可以针对Swag的注释自动格式化,就像`go fmt`。 +此处查看格式化结果 [here](https://github.com/swaggo/swag/tree/master/example/celler). + +示例: +```shell +swag fmt +``` + +排除目录(不扫描)示例: +```shell +swag fmt -d ./ --exclude ./internal +``` + +## 开发现状 + +[Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/) + +- [x] Basic Structure +- [x] API Host and Base Path +- [x] Paths and Operations +- [x] Describing Parameters +- [x] Describing Request Body +- [x] Describing Responses +- [x] MIME Types +- [x] Authentication + - [x] Basic Authentication + - [x] API Keys +- [x] Adding Examples +- [x] File Upload +- [x] Enums +- [x] Grouping Operations With Tags +- [ ] Swagger Extensions + +## 声明式注释格式 + +## 通用API信息 + +**示例** [`celler/main.go`](https://github.com/swaggo/swag/blob/master/example/celler/main.go) + +| 注释 | 说明 | 示例 | +| ----------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | +| title | **必填** 应用程序的名称。 | // @title Swagger Example API | +| version | **必填** 提供应用程序API的版本。 | // @version 1.0 | +| description | 应用程序的简短描述。 | // @description This is a sample server celler server. | +| tag.name | 标签的名称。 | // @tag.name This is the name of the tag | +| tag.description | 标签的描述。 | // @tag.description Cool Description | +| tag.docs.url | 标签的外部文档的URL。 | // @tag.docs.url https://example.com | +| tag.docs.description | 标签的外部文档说明。 | // @tag.docs.description Best example documentation | +| termsOfService | API的服务条款。 | // @termsOfService http://swagger.io/terms/ | +| contact.name | 公开的API的联系信息。 | // @contact.name API Support | +| contact.url | 联系信息的URL。 必须采用网址格式。 | // @contact.url http://www.swagger.io/support | +| contact.email | 联系人/组织的电子邮件地址。 必须采用电子邮件地址的格式。 | // @contact.email support@swagger.io | +| license.name | **必填** 用于API的许可证名称。 | // @license.name Apache 2.0 | +| license.url | 用于API的许可证的URL。 必须采用网址格式。 | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html | +| host | 运行API的主机(主机名或IP地址)。 | // @host localhost:8080 | +| BasePath | 运行API的基本路径。 | // @BasePath /api/v1 | +| accept | API 可以使用的 MIME 类型列表。 请注意,Accept 仅影响具有请求正文的操作,例如 POST、PUT 和 PATCH。 值必须如“[Mime类型](#mime类型)”中所述。 | // @accept json | +| produce | API可以生成的MIME类型的列表。值必须如“[Mime类型](#mime类型)”中所述。 | // @produce json | +| query.collection.format | 请求URI query里数组参数的默认格式:csv,multi,pipes,tsv,ssv。 如果未设置,则默认为csv。 | // @query.collection.format multi | +| schemes | 用空格分隔的请求的传输协议。 | // @schemes http https | +| externalDocs.description | Description of the external document. | // @externalDocs.description OpenAPI | +| externalDocs.url | URL of the external document. | // @externalDocs.url https://swagger.io/resources/open-api/ | +| x-name | 扩展的键必须以x-开头,并且只能使用json值 | // @x-example-key {"key": "value"} | + +### 使用Markdown描述 + +如果文档中的短字符串不足以完整表达,或者需要展示图片,代码示例等类似的内容,则可能需要使用Markdown描述。要使用Markdown描述,请使用一下注释。 + +| 注释 | 说明 | 示例 | +| ------------------------ | ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| title | **必填** 应用程序的名称。 | // @title Swagger Example API | +| version | **必填** 提供应用程序API的版本。 | // @version 1.0 | +| description.markdown | 应用程序的简短描述。 从`api.md`文件中解析。 这是`@description`的替代用法。 | // @description.markdown No value needed, this parses the description from api.md | +| tag.name | 标签的名称。 | // @tag.name This is the name of the tag | +| tag.description.markdown | 标签说明,这是`tag.description`的替代用法。 该描述将从名为`tagname.md的`文件中读取。 | // @tag.description.markdown | + +## API操作 + +Example [celler/controller](https://github.com/swaggo/swag/tree/master/example/celler/controller) + +| 注释 | 描述 | +|----------------------|------------------------------------------------------------------------------------------------| +| description | 操作行为的详细说明。 | +| description.markdown | 应用程序的简短描述。该描述将从名为`endpointname.md`的文件中读取。 | +| id | 用于标识操作的唯一字符串。在所有API操作中必须唯一。 | +| tags | 每个API操作的标签列表,以逗号分隔。 | +| summary | 该操作的简短摘要。 | +| accept | API 可以使用的 MIME 类型列表。 请注意,Accept 仅影响具有请求正文的操作,例如 POST、PUT 和 PATCH。 值必须如“[Mime类型](#mime类型)”中所述。 | +| produce | API可以生成的MIME类型的列表。值必须如“[Mime类型](#mime类型)”中所述。 | +| param | 用空格分隔的参数。`param name`,`param type`,`data type`,`is mandatory?`,`comment` `attribute(optional)` | +| security | 每个API操作的[安全性](#安全性)。 | +| success | 以空格分隔的成功响应。`return code`,`{param type}`,`data type`,`comment` | +| failure | 以空格分隔的故障响应。`return code`,`{param type}`,`data type`,`comment` | +| response | 与success、failure作用相同 | +| header | 以空格分隔的头字段。 `return code`,`{param type}`,`data type`,`comment` | +| router | 以空格分隔的路径定义。 `path`,`[httpMethod]` | +| deprecatedrouter | 与router相同,但是是deprecated的。 | +| x-name | 扩展字段必须以`x-`开头,并且只能使用json值。 | +| deprecated | 将当前API操作的所有路径设置为deprecated | + +## Mime类型 + +`swag` 接受所有格式正确的MIME类型, 即使匹配 `*/*`。除此之外,`swag`还接受某些MIME类型的别名,如下所示: + +| Alias | MIME Type | +| --------------------- | --------------------------------- | +| json | application/json | +| xml | text/xml | +| plain | text/plain | +| html | text/html | +| mpfd | multipart/form-data | +| x-www-form-urlencoded | application/x-www-form-urlencoded | +| json-api | application/vnd.api+json | +| json-stream | application/x-json-stream | +| octet-stream | application/octet-stream | +| png | image/png | +| jpeg | image/jpeg | +| gif | image/gif | + +## 参数类型 + +- query +- path +- header +- body +- formData + +## 数据类型 + +- string (string) +- integer (int, uint, uint32, uint64) +- number (float32) +- boolean (bool) +- user defined struct + +## 安全性 + +| 注释 | 描述 | 参数 | 示例 | +| -------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------ | +| securitydefinitions.basic | [Basic](https://swagger.io/docs/specification/2-0/authentication/basic-authentication/) auth. | | // @securityDefinitions.basic BasicAuth | +| securitydefinitions.apikey | [API key](https://swagger.io/docs/specification/2-0/authentication/api-keys/) auth. | in, name | // @securityDefinitions.apikey ApiKeyAuth | +| securitydefinitions.oauth2.application | [OAuth2 application](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope | // @securitydefinitions.oauth2.application OAuth2Application | +| securitydefinitions.oauth2.implicit | [OAuth2 implicit](https://swagger.io/docs/specification/authentication/oauth2/) auth. | authorizationUrl, scope | // @securitydefinitions.oauth2.implicit OAuth2Implicit | +| securitydefinitions.oauth2.password | [OAuth2 password](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, scope | // @securitydefinitions.oauth2.password OAuth2Password | +| securitydefinitions.oauth2.accessCode | [OAuth2 access code](https://swagger.io/docs/specification/authentication/oauth2/) auth. | tokenUrl, authorizationUrl, scope | // @securitydefinitions.oauth2.accessCode OAuth2AccessCode | + +| 参数注释 | 示例 | +| ---------------- | -------------------------------------------------------- | +| in | // @in header | +| name | // @name Authorization | +| tokenUrl | // @tokenUrl https://example.com/oauth/token | +| authorizationurl | // @authorizationurl https://example.com/oauth/authorize | +| scope.hoge | // @scope.write Grants write access | + +## 属性 + +```go +// @Param enumstring query string false "string enums" Enums(A, B, C) +// @Param enumint query int false "int enums" Enums(1, 2, 3) +// @Param enumnumber query number false "int enums" Enums(1.1, 1.2, 1.3) +// @Param string query string false "string valid" minlength(5) maxlength(10) +// @Param int query int false "int valid" minimum(1) maximum(10) +// @Param default query string false "string default" default(A) +// @Param collection query []string false "string collection" collectionFormat(multi) +// @Param extensions query []string false "string collection" extensions(x-example=test,x-nullable) +``` + +也适用于结构体字段: + +```go +type Foo struct { + Bar string `minLength:"4" maxLength:"16"` + Baz int `minimum:"10" maximum:"20" default:"15"` + Qux []string `enums:"foo,bar,baz"` +} +``` + +### 当前可用的 + +| 字段名 | 类型 | 描述 | +| ---------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| default | * | 声明如果未提供任何参数,则服务器将使用的默认参数值,例如,如果请求中的客户端未提供该参数,则用于控制每页结果数的“计数”可能默认为100。 (注意:“default”对于必需的参数没有意义)。参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2。 与JSON模式不同,此值务必符合此参数的定义[类型](#parameterType)。 | +| maximum | `number` | 参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.2. | +| minimum | `number` | 参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.3. | +| maxLength | `integer` | 参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.1. | +| minLength | `integer` | 参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.2. | +| enums | [\*] | 参看 https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1. | +| format | `string` | 上面提到的[类型](#parameterType)的扩展格式。有关更多详细信息,请参见[数据类型格式](https://swagger.io/specification/v2/#dataTypeFormat)。 | +| collectionFormat | `string` | 指定query数组参数的格式。 可能的值为:
      • `csv` - 逗号分隔值 `foo,bar`.
      • `ssv` - 空格分隔值 `foo bar`.
      • `tsv` - 制表符分隔值 `foo\tbar`.
      • `pipes` - 管道符分隔值 foo|bar.
      • `multi` - 对应于多个参数实例,而不是单个实例 `foo=bar&foo=baz` 的多个值。这仅对“`query`”或“`formData`”中的参数有效。
      默认值是 `csv`。 | + +### 进一步的 + +| 字段名 | 类型 | 描述 | +| ----------- | :-------: | ---------------------------------------------------------------------------------- | +| multipleOf | `number` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.1.1. | +| pattern | `string` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. | +| maxItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.2. | +| minItems | `integer` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.3. | +| uniqueItems | `boolean` | See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3.4. | + +## 样例 + +### 多行的描述 + +可以在常规api描述或路由定义中添加跨越多行的描述,如下所示: + +```go +// @description This is the first line +// @description This is the second line +// @description And so forth. +``` + +### 用户自定义的具有数组类型的结构 + +```go +// @Success 200 {array} model.Account <-- This is a user defined struct. +``` + +```go +package model + +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` +} +``` + +### 响应对象中的模型组合 + +```go +// JSONResult的data字段类型将被proto.Order类型替换 +@success 200 {object} jsonresult.JSONResult{data=proto.Order} "desc" +``` + +```go +type JSONResult struct { + Code int `json:"code" ` + Message string `json:"message"` + Data interface{} `json:"data"` +} + +type Order struct { //in `proto` package + ... +} +``` + +- 还支持对象数组和原始类型作为嵌套响应 + +```go +@success 200 {object} jsonresult.JSONResult{data=[]proto.Order} "desc" +@success 200 {object} jsonresult.JSONResult{data=string} "desc" +@success 200 {object} jsonresult.JSONResult{data=[]string} "desc" +``` + +- 替换多个字段的类型。如果某字段不存在,将添加该字段。 + +```go +@success 200 {object} jsonresult.JSONResult{data1=string,data2=[]string,data3=proto.Order,data4=[]proto.Order} "desc" +``` + +### 在响应中增加头字段 + +```go +// @Success 200 {string} string "ok" +// @failure 400 {string} string "error" +// @response default {string} string "other error" +// @Header 200 {string} Location "/entity/1" +// @Header 200,400,default {string} Token "token" +// @Header all {string} Token2 "token2" +``` + +### 使用多路径参数 + +```go +/// ... +// @Param group_id path int true "Group ID" +// @Param account_id path int true "Account ID" +// ... +// @Router /examples/groups/{group_id}/accounts/{account_id} [get] +``` + +### 结构体的示例值 + +```go +type Account struct { + ID int `json:"id" example:"1"` + Name string `json:"name" example:"account name"` + PhotoUrls []string `json:"photo_urls" example:"http://test/image/1.jpg,http://test/image/2.jpg"` +} +``` + +### 结构体描述 + +```go +type Account struct { + // ID this is userid + ID int `json:"id"` + Name string `json:"name"` // This is Name +} +``` + +### 使用`swaggertype`标签更改字段类型 + +[#201](https://github.com/swaggo/swag/issues/201#issuecomment-475479409) + +```go +type TimestampTime struct { + time.Time +} + +///实现encoding.JSON.Marshaler接口 +func (t *TimestampTime) MarshalJSON() ([]byte, error) { + bin := make([]byte, 16) + bin = strconv.AppendInt(bin[:0], t.Time.Unix(), 10) + return bin, nil +} + +///实现encoding.JSON.Unmarshaler接口 +func (t *TimestampTime) UnmarshalJSON(bin []byte) error { + v, err := strconv.ParseInt(string(bin), 10, 64) + if err != nil { + return err + } + t.Time = time.Unix(v, 0) + return nil +} +/// + +type Account struct { + // 使用`swaggertype`标签将别名类型更改为内置类型integer + ID sql.NullInt64 `json:"id" swaggertype:"integer"` + + // 使用`swaggertype`标签更改struct类型为内置类型integer + RegisterTime TimestampTime `json:"register_time" swaggertype:"primitive,integer"` + + // Array types can be overridden using "array," format + Coeffs []big.Float `json:"coeffs" swaggertype:"array,number"` +} +``` + +[#379](https://github.com/swaggo/swag/issues/379) + +```go +type CerticateKeyPair struct { + Crt []byte `json:"crt" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` + Key []byte `json:"key" swaggertype:"string" format:"base64" example:"U3dhZ2dlciByb2Nrcw=="` +} +``` + +生成的swagger文档如下: + +```go +"api.MyBinding": { + "type":"object", + "properties":{ + "crt":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + }, + "key":{ + "type":"string", + "format":"base64", + "example":"U3dhZ2dlciByb2Nrcw==" + } + } +} +``` + +### 使用`swaggerignore`标签排除字段 + +```go +type Account struct { + ID string `json:"id"` + Name string `json:"name"` + Ignored int `swaggerignore:"true"` +} +``` + +### 将扩展信息添加到结构字段 + +```go +type Account struct { + ID string `json:"id" extensions:"x-nullable,x-abc=def,!x-omitempty"` // 扩展字段必须以"x-"开头 +} +``` + +生成swagger文档,如下所示: + +```go +"Account": { + "type": "object", + "properties": { + "id": { + "type": "string", + "x-nullable": true, + "x-abc": "def", + "x-omitempty": false + } + } +} +``` + +### 对展示的模型重命名 + +```go +type Resp struct { + Code int +}//@name Response +``` + +### 如何使用安全性注释 + +通用API信息。 + +```go +// @securityDefinitions.basic BasicAuth + +// @securitydefinitions.oauth2.application OAuth2Application +// @tokenUrl https://example.com/oauth/token +// @scope.write Grants write access +// @scope.admin Grants read and write access to administrative information +``` + +每个API操作。 + +```go +// @Security ApiKeyAuth +``` + +使用AND条件。 + +```go +// @Security ApiKeyAuth +// @Security OAuth2Application[write, admin] +``` + +## 项目相关 + +This project was inspired by [yvasiyarov/swagger](https://github.com/yvasiyarov/swagger) but we simplified the usage and added support a variety of [web frameworks](#supported-web-frameworks). Gopher image source is [tenntenn/gopher-stickers](https://github.com/tenntenn/gopher-stickers). It has licenses [creative commons licensing](http://creativecommons.org/licenses/by/3.0/deed.en). + +## 贡献者 + +This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. + + +## 支持者 + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/swag#backer)] + + + +## 赞助商 + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/swag#sponsor)] + + + + + + + + + + + + +## License + +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fswaggo%2Fswag.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fswaggo%2Fswag?ref=badge_large) diff --git a/vendor/github.com/swaggo/swag/const.go b/vendor/github.com/swaggo/swag/const.go new file mode 100644 index 0000000..8375510 --- /dev/null +++ b/vendor/github.com/swaggo/swag/const.go @@ -0,0 +1,567 @@ +package swag + +import ( + "go/ast" + "go/token" + "reflect" + "strconv" + "strings" + "unicode/utf8" +) + +// ConstVariable a model to record a const variable +type ConstVariable struct { + Name *ast.Ident + Type ast.Expr + Value interface{} + Comment *ast.CommentGroup + File *ast.File + Pkg *PackageDefinitions +} + +var escapedChars = map[uint8]uint8{ + 'n': '\n', + 'r': '\r', + 't': '\t', + 'v': '\v', + '\\': '\\', + '"': '"', +} + +// EvaluateEscapedChar parse escaped character +func EvaluateEscapedChar(text string) rune { + if len(text) == 1 { + return rune(text[0]) + } + + if len(text) == 2 && text[0] == '\\' { + return rune(escapedChars[text[1]]) + } + + if len(text) == 6 && text[0:2] == "\\u" { + n, err := strconv.ParseInt(text[2:], 16, 32) + if err == nil { + return rune(n) + } + } + + return 0 +} + +// EvaluateEscapedString parse escaped characters in string +func EvaluateEscapedString(text string) string { + if !strings.ContainsRune(text, '\\') { + return text + } + result := make([]byte, 0, len(text)) + for i := 0; i < len(text); i++ { + if text[i] == '\\' { + i++ + if text[i] == 'u' { + i++ + char, err := strconv.ParseInt(text[i:i+4], 16, 32) + if err == nil { + result = utf8.AppendRune(result, rune(char)) + } + i += 3 + } else if c, ok := escapedChars[text[i]]; ok { + result = append(result, c) + } + } else { + result = append(result, text[i]) + } + } + return string(result) +} + +// EvaluateDataConversion evaluate the type a explicit type conversion +func EvaluateDataConversion(x interface{}, typeName string) interface{} { + switch value := x.(type) { + case int: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case uint: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case int8: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case uint8: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case int16: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case uint16: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case int32: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + case "string": + return string(value) + } + case uint32: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case int64: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case uint64: + switch typeName { + case "int": + return int(value) + case "byte": + return byte(value) + case "int8": + return int8(value) + case "int16": + return int16(value) + case "int32": + return int32(value) + case "int64": + return int64(value) + case "uint": + return uint(value) + case "uint8": + return uint8(value) + case "uint16": + return uint16(value) + case "uint32": + return uint32(value) + case "uint64": + return uint64(value) + case "rune": + return rune(value) + } + case string: + switch typeName { + case "string": + return value + } + } + return nil +} + +// EvaluateUnary evaluate the type and value of a unary expression +func EvaluateUnary(x interface{}, operator token.Token, xtype ast.Expr) (interface{}, ast.Expr) { + switch operator { + case token.SUB: + switch value := x.(type) { + case int: + return -value, xtype + case int8: + return -value, xtype + case int16: + return -value, xtype + case int32: + return -value, xtype + case int64: + return -value, xtype + } + case token.XOR: + switch value := x.(type) { + case int: + return ^value, xtype + case int8: + return ^value, xtype + case int16: + return ^value, xtype + case int32: + return ^value, xtype + case int64: + return ^value, xtype + case uint: + return ^value, xtype + case uint8: + return ^value, xtype + case uint16: + return ^value, xtype + case uint32: + return ^value, xtype + case uint64: + return ^value, xtype + } + } + return nil, nil +} + +// EvaluateBinary evaluate the type and value of a binary expression +func EvaluateBinary(x, y interface{}, operator token.Token, xtype, ytype ast.Expr) (interface{}, ast.Expr) { + if operator == token.SHR || operator == token.SHL { + var rightOperand uint64 + yValue := reflect.ValueOf(y) + if yValue.CanUint() { + rightOperand = yValue.Uint() + } else if yValue.CanInt() { + rightOperand = uint64(yValue.Int()) + } + + switch operator { + case token.SHL: + switch xValue := x.(type) { + case int: + return xValue << rightOperand, xtype + case int8: + return xValue << rightOperand, xtype + case int16: + return xValue << rightOperand, xtype + case int32: + return xValue << rightOperand, xtype + case int64: + return xValue << rightOperand, xtype + case uint: + return xValue << rightOperand, xtype + case uint8: + return xValue << rightOperand, xtype + case uint16: + return xValue << rightOperand, xtype + case uint32: + return xValue << rightOperand, xtype + case uint64: + return xValue << rightOperand, xtype + } + case token.SHR: + switch xValue := x.(type) { + case int: + return xValue >> rightOperand, xtype + case int8: + return xValue >> rightOperand, xtype + case int16: + return xValue >> rightOperand, xtype + case int32: + return xValue >> rightOperand, xtype + case int64: + return xValue >> rightOperand, xtype + case uint: + return xValue >> rightOperand, xtype + case uint8: + return xValue >> rightOperand, xtype + case uint16: + return xValue >> rightOperand, xtype + case uint32: + return xValue >> rightOperand, xtype + case uint64: + return xValue >> rightOperand, xtype + } + } + return nil, nil + } + + evalType := xtype + if evalType == nil { + evalType = ytype + } + + xValue := reflect.ValueOf(x) + yValue := reflect.ValueOf(y) + if xValue.Kind() == reflect.String && yValue.Kind() == reflect.String { + return xValue.String() + yValue.String(), evalType + } + + var targetValue reflect.Value + if xValue.Kind() != reflect.Int { + targetValue = reflect.New(xValue.Type()).Elem() + } else { + targetValue = reflect.New(yValue.Type()).Elem() + } + + switch operator { + case token.ADD: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() + yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() + yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) + yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() + uint64(yValue.Int())) + } + case token.SUB: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() - yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() - yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) - yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() - uint64(yValue.Int())) + } + case token.MUL: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() * yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() * yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) * yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() * uint64(yValue.Int())) + } + case token.QUO: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() / yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() / yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) / yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() / uint64(yValue.Int())) + } + case token.REM: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() % yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() % yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) % yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() % uint64(yValue.Int())) + } + case token.AND: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() & yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() & yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) & yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() & uint64(yValue.Int())) + } + case token.OR: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() | yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() | yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) | yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() | uint64(yValue.Int())) + } + case token.XOR: + if xValue.CanInt() && yValue.CanInt() { + targetValue.SetInt(xValue.Int() ^ yValue.Int()) + } else if xValue.CanUint() && yValue.CanUint() { + targetValue.SetUint(xValue.Uint() ^ yValue.Uint()) + } else if xValue.CanInt() && yValue.CanUint() { + targetValue.SetUint(uint64(xValue.Int()) ^ yValue.Uint()) + } else if xValue.CanUint() && yValue.CanInt() { + targetValue.SetUint(xValue.Uint() ^ uint64(yValue.Int())) + } + } + return targetValue.Interface(), evalType +} diff --git a/vendor/github.com/swaggo/swag/doc.go b/vendor/github.com/swaggo/swag/doc.go new file mode 100644 index 0000000..564b5c6 --- /dev/null +++ b/vendor/github.com/swaggo/swag/doc.go @@ -0,0 +1,5 @@ +/* +Package swag converts Go annotations to Swagger Documentation 2.0. +See https://github.com/swaggo/swag for more information about swag. +*/ +package swag // import "github.com/swaggo/swag" diff --git a/vendor/github.com/swaggo/swag/enums.go b/vendor/github.com/swaggo/swag/enums.go new file mode 100644 index 0000000..38658f2 --- /dev/null +++ b/vendor/github.com/swaggo/swag/enums.go @@ -0,0 +1,13 @@ +package swag + +const ( + enumVarNamesExtension = "x-enum-varnames" + enumCommentsExtension = "x-enum-comments" +) + +// EnumValue a model to record an enum consts variable +type EnumValue struct { + key string + Value interface{} + Comment string +} diff --git a/vendor/github.com/swaggo/swag/field_parser.go b/vendor/github.com/swaggo/swag/field_parser.go new file mode 100644 index 0000000..9b24e78 --- /dev/null +++ b/vendor/github.com/swaggo/swag/field_parser.go @@ -0,0 +1,680 @@ +package swag + +import ( + "fmt" + "go/ast" + "reflect" + "regexp" + "strconv" + "strings" + "sync" + "unicode" + + "github.com/go-openapi/spec" +) + +var _ FieldParser = &tagBaseFieldParser{p: nil, field: nil, tag: ""} + +const ( + requiredLabel = "required" + optionalLabel = "optional" + swaggerTypeTag = "swaggertype" + swaggerIgnoreTag = "swaggerignore" +) + +type tagBaseFieldParser struct { + p *Parser + field *ast.Field + tag reflect.StructTag +} + +func newTagBaseFieldParser(p *Parser, field *ast.Field) FieldParser { + fieldParser := tagBaseFieldParser{ + p: p, + field: field, + tag: "", + } + if fieldParser.field.Tag != nil { + fieldParser.tag = reflect.StructTag(strings.ReplaceAll(field.Tag.Value, "`", "")) + } + + return &fieldParser +} + +func (ps *tagBaseFieldParser) ShouldSkip() bool { + // Skip non-exported fields. + if ps.field.Names != nil && !ast.IsExported(ps.field.Names[0].Name) { + return true + } + + if ps.field.Tag == nil { + return false + } + + ignoreTag := ps.tag.Get(swaggerIgnoreTag) + if strings.EqualFold(ignoreTag, "true") { + return true + } + + // json:"tag,hoge" + name := strings.TrimSpace(strings.Split(ps.tag.Get(jsonTag), ",")[0]) + if name == "-" { + return true + } + + return false +} + +func (ps *tagBaseFieldParser) FieldName() (string, error) { + var name string + + if ps.field.Tag != nil { + // json:"tag,hoge" + name = strings.TrimSpace(strings.Split(ps.tag.Get(jsonTag), ",")[0]) + if name != "" { + return name, nil + } + + // use "form" tag over json tag + name = ps.FormName() + if name != "" { + return name, nil + } + } + + if ps.field.Names == nil { + return "", nil + } + + switch ps.p.PropNamingStrategy { + case SnakeCase: + return toSnakeCase(ps.field.Names[0].Name), nil + case PascalCase: + return ps.field.Names[0].Name, nil + default: + return toLowerCamelCase(ps.field.Names[0].Name), nil + } +} + +func (ps *tagBaseFieldParser) firstTagValue(tag string) string { + if ps.field.Tag != nil { + return strings.TrimRight(strings.TrimSpace(strings.Split(ps.tag.Get(tag), ",")[0]), "[]") + } + return "" +} + +func (ps *tagBaseFieldParser) FormName() string { + return ps.firstTagValue(formTag) +} + +func (ps *tagBaseFieldParser) HeaderName() string { + return ps.firstTagValue(headerTag) +} + +func (ps *tagBaseFieldParser) PathName() string { + return ps.firstTagValue(uriTag) +} + +func toSnakeCase(in string) string { + var ( + runes = []rune(in) + length = len(runes) + out []rune + ) + + for idx := 0; idx < length; idx++ { + if idx > 0 && unicode.IsUpper(runes[idx]) && + ((idx+1 < length && unicode.IsLower(runes[idx+1])) || unicode.IsLower(runes[idx-1])) { + out = append(out, '_') + } + + out = append(out, unicode.ToLower(runes[idx])) + } + + return string(out) +} + +func toLowerCamelCase(in string) string { + var flag bool + + out := make([]rune, len(in)) + + runes := []rune(in) + for i, curr := range runes { + if (i == 0 && unicode.IsUpper(curr)) || (flag && unicode.IsUpper(curr)) { + out[i] = unicode.ToLower(curr) + flag = true + + continue + } + + out[i] = curr + flag = false + } + + return string(out) +} + +func (ps *tagBaseFieldParser) CustomSchema() (*spec.Schema, error) { + if ps.field.Tag == nil { + return nil, nil + } + + typeTag := ps.tag.Get(swaggerTypeTag) + if typeTag != "" { + return BuildCustomSchema(strings.Split(typeTag, ",")) + } + + return nil, nil +} + +type structField struct { + schemaType string + arrayType string + formatType string + maximum *float64 + minimum *float64 + multipleOf *float64 + maxLength *int64 + minLength *int64 + maxItems *int64 + minItems *int64 + exampleValue interface{} + enums []interface{} + enumVarNames []interface{} + unique bool +} + +// splitNotWrapped slices s into all substrings separated by sep if sep is not +// wrapped by brackets and returns a slice of the substrings between those separators. +func splitNotWrapped(s string, sep rune) []string { + openCloseMap := map[rune]rune{ + '(': ')', + '[': ']', + '{': '}', + } + + var ( + result = make([]string, 0) + current = strings.Builder{} + openCount = 0 + openChar rune + ) + + for _, char := range s { + switch { + case openChar == 0 && openCloseMap[char] != 0: + openChar = char + + openCount++ + + current.WriteRune(char) + case char == openChar: + openCount++ + + current.WriteRune(char) + case openCount > 0 && char == openCloseMap[openChar]: + openCount-- + + current.WriteRune(char) + case openCount == 0 && char == sep: + result = append(result, current.String()) + + openChar = 0 + + current = strings.Builder{} + default: + current.WriteRune(char) + } + } + + if current.String() != "" { + result = append(result, current.String()) + } + + return result +} + +// ComplementSchema complement schema with field properties +func (ps *tagBaseFieldParser) ComplementSchema(schema *spec.Schema) error { + types := ps.p.GetSchemaTypePath(schema, 2) + if len(types) == 0 { + return fmt.Errorf("invalid type for field: %s", ps.field.Names[0]) + } + + if IsRefSchema(schema) { + var newSchema = spec.Schema{} + err := ps.complementSchema(&newSchema, types) + if err != nil { + return err + } + if !reflect.ValueOf(newSchema).IsZero() { + *schema = *(newSchema.WithAllOf(*schema)) + } + return nil + } + + return ps.complementSchema(schema, types) +} + +// complementSchema complement schema with field properties +func (ps *tagBaseFieldParser) complementSchema(schema *spec.Schema, types []string) error { + if ps.field.Tag == nil { + if ps.field.Doc != nil { + schema.Description = strings.TrimSpace(ps.field.Doc.Text()) + } + + if schema.Description == "" && ps.field.Comment != nil { + schema.Description = strings.TrimSpace(ps.field.Comment.Text()) + } + + return nil + } + + field := &structField{ + schemaType: types[0], + formatType: ps.tag.Get(formatTag), + } + + if len(types) > 1 && (types[0] == ARRAY || types[0] == OBJECT) { + field.arrayType = types[1] + } + + jsonTagValue := ps.tag.Get(jsonTag) + + bindingTagValue := ps.tag.Get(bindingTag) + if bindingTagValue != "" { + parseValidTags(bindingTagValue, field) + } + + validateTagValue := ps.tag.Get(validateTag) + if validateTagValue != "" { + parseValidTags(validateTagValue, field) + } + + enumsTagValue := ps.tag.Get(enumsTag) + if enumsTagValue != "" { + err := parseEnumTags(enumsTagValue, field) + if err != nil { + return err + } + } + + if IsNumericType(field.schemaType) || IsNumericType(field.arrayType) { + maximum, err := getFloatTag(ps.tag, maximumTag) + if err != nil { + return err + } + + if maximum != nil { + field.maximum = maximum + } + + minimum, err := getFloatTag(ps.tag, minimumTag) + if err != nil { + return err + } + + if minimum != nil { + field.minimum = minimum + } + + multipleOf, err := getFloatTag(ps.tag, multipleOfTag) + if err != nil { + return err + } + + if multipleOf != nil { + field.multipleOf = multipleOf + } + } + + if field.schemaType == STRING || field.arrayType == STRING { + maxLength, err := getIntTag(ps.tag, maxLengthTag) + if err != nil { + return err + } + + if maxLength != nil { + field.maxLength = maxLength + } + + minLength, err := getIntTag(ps.tag, minLengthTag) + if err != nil { + return err + } + + if minLength != nil { + field.minLength = minLength + } + } + + // json:"name,string" or json:",string" + exampleTagValue, ok := ps.tag.Lookup(exampleTag) + if ok { + field.exampleValue = exampleTagValue + + if !strings.Contains(jsonTagValue, ",string") { + example, err := defineTypeOfExample(field.schemaType, field.arrayType, exampleTagValue) + if err != nil { + return err + } + + field.exampleValue = example + } + } + + // perform this after setting everything else (min, max, etc...) + if strings.Contains(jsonTagValue, ",string") { + // @encoding/json: "It applies only to fields of string, floating point, integer, or boolean types." + defaultValues := map[string]string{ + // Zero Values as string + STRING: "", + INTEGER: "0", + BOOLEAN: "false", + NUMBER: "0", + } + + defaultValue, ok := defaultValues[field.schemaType] + if ok { + field.schemaType = STRING + *schema = *PrimitiveSchema(field.schemaType) + + if field.exampleValue == nil { + // if exampleValue is not defined by the user, + // we will force an example with a correct value + // (eg: int->"0", bool:"false") + field.exampleValue = defaultValue + } + } + } + + if ps.field.Doc != nil { + schema.Description = strings.TrimSpace(ps.field.Doc.Text()) + } + + if schema.Description == "" && ps.field.Comment != nil { + schema.Description = strings.TrimSpace(ps.field.Comment.Text()) + } + + schema.ReadOnly = ps.tag.Get(readOnlyTag) == "true" + + defaultTagValue := ps.tag.Get(defaultTag) + if defaultTagValue != "" { + value, err := defineType(field.schemaType, defaultTagValue) + if err != nil { + return err + } + + schema.Default = value + } + + schema.Example = field.exampleValue + + if field.schemaType != ARRAY { + schema.Format = field.formatType + } + + extensionsTagValue := ps.tag.Get(extensionsTag) + if extensionsTagValue != "" { + schema.Extensions = setExtensionParam(extensionsTagValue) + } + + varNamesTag := ps.tag.Get("x-enum-varnames") + if varNamesTag != "" { + varNames := strings.Split(varNamesTag, ",") + if len(varNames) != len(field.enums) { + return fmt.Errorf("invalid count of x-enum-varnames. expected %d, got %d", len(field.enums), len(varNames)) + } + + field.enumVarNames = nil + + for _, v := range varNames { + field.enumVarNames = append(field.enumVarNames, v) + } + + if field.schemaType == ARRAY { + // Add the var names in the items schema + if schema.Items.Schema.Extensions == nil { + schema.Items.Schema.Extensions = map[string]interface{}{} + } + schema.Items.Schema.Extensions[enumVarNamesExtension] = field.enumVarNames + } else { + // Add to top level schema + if schema.Extensions == nil { + schema.Extensions = map[string]interface{}{} + } + schema.Extensions[enumVarNamesExtension] = field.enumVarNames + } + } + + eleSchema := schema + + if field.schemaType == ARRAY { + // For Array only + schema.MaxItems = field.maxItems + schema.MinItems = field.minItems + schema.UniqueItems = field.unique + + eleSchema = schema.Items.Schema + eleSchema.Format = field.formatType + } + + eleSchema.Maximum = field.maximum + eleSchema.Minimum = field.minimum + eleSchema.MultipleOf = field.multipleOf + eleSchema.MaxLength = field.maxLength + eleSchema.MinLength = field.minLength + eleSchema.Enum = field.enums + + return nil +} + +func getFloatTag(structTag reflect.StructTag, tagName string) (*float64, error) { + strValue := structTag.Get(tagName) + if strValue == "" { + return nil, nil + } + + value, err := strconv.ParseFloat(strValue, 64) + if err != nil { + return nil, fmt.Errorf("can't parse numeric value of %q tag: %v", tagName, err) + } + + return &value, nil +} + +func getIntTag(structTag reflect.StructTag, tagName string) (*int64, error) { + strValue := structTag.Get(tagName) + if strValue == "" { + return nil, nil + } + + value, err := strconv.ParseInt(strValue, 10, 64) + if err != nil { + return nil, fmt.Errorf("can't parse numeric value of %q tag: %v", tagName, err) + } + + return &value, nil +} + +func (ps *tagBaseFieldParser) IsRequired() (bool, error) { + if ps.field.Tag == nil { + return false, nil + } + + bindingTag := ps.tag.Get(bindingTag) + if bindingTag != "" { + for _, val := range strings.Split(bindingTag, ",") { + switch val { + case requiredLabel: + return true, nil + case optionalLabel: + return false, nil + } + } + } + + validateTag := ps.tag.Get(validateTag) + if validateTag != "" { + for _, val := range strings.Split(validateTag, ",") { + switch val { + case requiredLabel: + return true, nil + case optionalLabel: + return false, nil + } + } + } + + return ps.p.RequiredByDefault, nil +} + +func parseValidTags(validTag string, sf *structField) { + // `validate:"required,max=10,min=1"` + // ps. required checked by IsRequired(). + for _, val := range strings.Split(validTag, ",") { + var ( + valValue string + keyVal = strings.Split(val, "=") + ) + + switch len(keyVal) { + case 1: + case 2: + valValue = strings.ReplaceAll(strings.ReplaceAll(keyVal[1], utf8HexComma, ","), utf8Pipe, "|") + default: + continue + } + + switch keyVal[0] { + case "max", "lte": + sf.setMax(valValue) + case "min", "gte": + sf.setMin(valValue) + case "oneof": + sf.setOneOf(valValue) + case "unique": + if sf.schemaType == ARRAY { + sf.unique = true + } + case "dive": + // ignore dive + return + default: + continue + } + } +} + +func parseEnumTags(enumTag string, field *structField) error { + enumType := field.schemaType + if field.schemaType == ARRAY { + enumType = field.arrayType + } + + field.enums = nil + + for _, e := range strings.Split(enumTag, ",") { + value, err := defineType(enumType, e) + if err != nil { + return err + } + + field.enums = append(field.enums, value) + } + + return nil +} + +func (sf *structField) setOneOf(valValue string) { + if len(sf.enums) != 0 { + return + } + + enumType := sf.schemaType + if sf.schemaType == ARRAY { + enumType = sf.arrayType + } + + valValues := parseOneOfParam2(valValue) + for i := range valValues { + value, err := defineType(enumType, valValues[i]) + if err != nil { + continue + } + + sf.enums = append(sf.enums, value) + } +} + +func (sf *structField) setMin(valValue string) { + value, err := strconv.ParseFloat(valValue, 64) + if err != nil { + return + } + + switch sf.schemaType { + case INTEGER, NUMBER: + sf.minimum = &value + case STRING: + intValue := int64(value) + sf.minLength = &intValue + case ARRAY: + intValue := int64(value) + sf.minItems = &intValue + } +} + +func (sf *structField) setMax(valValue string) { + value, err := strconv.ParseFloat(valValue, 64) + if err != nil { + return + } + + switch sf.schemaType { + case INTEGER, NUMBER: + sf.maximum = &value + case STRING: + intValue := int64(value) + sf.maxLength = &intValue + case ARRAY: + intValue := int64(value) + sf.maxItems = &intValue + } +} + +const ( + utf8HexComma = "0x2C" + utf8Pipe = "0x7C" +) + +// These code copy from +// https://github.com/go-playground/validator/blob/d4271985b44b735c6f76abc7a06532ee997f9476/baked_in.go#L207 +// ---. +var oneofValsCache = map[string][]string{} +var oneofValsCacheRWLock = sync.RWMutex{} +var splitParamsRegex = regexp.MustCompile(`'[^']*'|\S+`) + +func parseOneOfParam2(param string) []string { + oneofValsCacheRWLock.RLock() + values, ok := oneofValsCache[param] + oneofValsCacheRWLock.RUnlock() + + if !ok { + oneofValsCacheRWLock.Lock() + values = splitParamsRegex.FindAllString(param, -1) + + for i := 0; i < len(values); i++ { + values[i] = strings.ReplaceAll(values[i], "'", "") + } + + oneofValsCache[param] = values + + oneofValsCacheRWLock.Unlock() + } + + return values +} + +// ---. diff --git a/vendor/github.com/swaggo/swag/formatter.go b/vendor/github.com/swaggo/swag/formatter.go new file mode 100644 index 0000000..511e3a8 --- /dev/null +++ b/vendor/github.com/swaggo/swag/formatter.go @@ -0,0 +1,182 @@ +package swag + +import ( + "bytes" + "fmt" + "go/ast" + goparser "go/parser" + "go/token" + "log" + "os" + "regexp" + "sort" + "strings" + "text/tabwriter" +) + +// Check of @Param @Success @Failure @Response @Header +var specialTagForSplit = map[string]bool{ + paramAttr: true, + successAttr: true, + failureAttr: true, + responseAttr: true, + headerAttr: true, +} + +var skipChar = map[byte]byte{ + '"': '"', + '(': ')', + '{': '}', + '[': ']', +} + +// Formatter implements a formatter for Go source files. +type Formatter struct { + // debugging output goes here + debug Debugger +} + +// NewFormatter create a new formatter instance. +func NewFormatter() *Formatter { + formatter := &Formatter{ + debug: log.New(os.Stdout, "", log.LstdFlags), + } + return formatter +} + +// Format formats swag comments in contents. It uses fileName to report errors +// that happen during parsing of contents. +func (f *Formatter) Format(fileName string, contents []byte) ([]byte, error) { + fileSet := token.NewFileSet() + ast, err := goparser.ParseFile(fileSet, fileName, contents, goparser.ParseComments) + if err != nil { + return nil, err + } + + // Formatting changes are described as an edit list of byte range + // replacements. We make these content-level edits directly rather than + // changing the AST nodes and writing those out (via [go/printer] or + // [go/format]) so that we only change the formatting of Swag attribute + // comments. This won't touch the formatting of any other comments, or of + // functions, etc. + maxEdits := 0 + for _, comment := range ast.Comments { + maxEdits += len(comment.List) + } + edits := make(edits, 0, maxEdits) + + for _, comment := range ast.Comments { + formatFuncDoc(fileSet, comment.List, &edits) + } + + return edits.apply(contents), nil +} + +type edit struct { + begin int + end int + replacement []byte +} + +type edits []edit + +func (edits edits) apply(contents []byte) []byte { + // Apply the edits with the highest offset first, so that earlier edits + // don't affect the offsets of later edits. + sort.Slice(edits, func(i, j int) bool { + return edits[i].begin > edits[j].begin + }) + + for _, edit := range edits { + prefix := contents[:edit.begin] + suffix := contents[edit.end:] + contents = append(prefix, append(edit.replacement, suffix...)...) + } + + return contents +} + +// formatFuncDoc reformats the comment lines in commentList, and appends any +// changes to the edit list. +func formatFuncDoc(fileSet *token.FileSet, commentList []*ast.Comment, edits *edits) { + // Building the edit list to format a comment block is a two-step process. + // First, we iterate over each comment line looking for Swag attributes. In + // each one we find, we replace alignment whitespace with a tab character, + // then write the result into a tab writer. + + linesToComments := make(map[int]int, len(commentList)) + + buffer := &bytes.Buffer{} + w := tabwriter.NewWriter(buffer, 1, 4, 1, '\t', 0) + + for commentIndex, comment := range commentList { + text := comment.Text + if attr, body, found := swagComment(text); found { + formatted := "//\t" + attr + if body != "" { + formatted += "\t" + splitComment2(attr, body) + } + _, _ = fmt.Fprintln(w, formatted) + linesToComments[len(linesToComments)] = commentIndex + } + } + + // Once we've loaded all of the comment lines to be aligned into the tab + // writer, flushing it causes the aligned text to be written out to the + // backing buffer. + _ = w.Flush() + + // Now the second step: we iterate over the aligned comment lines that were + // written into the backing buffer, pair each one up to its original + // comment line, and use the combination to describe the edit that needs to + // be made to the original input. + formattedComments := bytes.Split(buffer.Bytes(), []byte("\n")) + for lineIndex, commentIndex := range linesToComments { + comment := commentList[commentIndex] + *edits = append(*edits, edit{ + begin: fileSet.Position(comment.Pos()).Offset, + end: fileSet.Position(comment.End()).Offset, + replacement: formattedComments[lineIndex], + }) + } +} + +func splitComment2(attr, body string) string { + if specialTagForSplit[strings.ToLower(attr)] { + for i := 0; i < len(body); i++ { + if skipEnd, ok := skipChar[body[i]]; ok { + skipStart, n := body[i], 1 + for i++; i < len(body); i++ { + if skipStart != skipEnd && body[i] == skipStart { + n++ + } else if body[i] == skipEnd { + n-- + if n == 0 { + break + } + } + } + } else if body[i] == ' ' || body[i] == '\t' { + j := i + for ; j < len(body) && (body[j] == ' ' || body[j] == '\t'); j++ { + } + body = replaceRange(body, i, j, "\t") + } + } + } + return body +} + +func replaceRange(s string, start, end int, new string) string { + return s[:start] + new + s[end:] +} + +var swagCommentLineExpression = regexp.MustCompile(`^\/\/\s+(@[\S.]+)\s*(.*)`) + +func swagComment(comment string) (string, string, bool) { + matches := swagCommentLineExpression.FindStringSubmatch(comment) + if matches == nil { + return "", "", false + } + return matches[1], matches[2], true +} diff --git a/vendor/github.com/swaggo/swag/generics.go b/vendor/github.com/swaggo/swag/generics.go new file mode 100644 index 0000000..07344bb --- /dev/null +++ b/vendor/github.com/swaggo/swag/generics.go @@ -0,0 +1,432 @@ +//go:build go1.18 +// +build go1.18 + +package swag + +import ( + "errors" + "fmt" + "go/ast" + "strings" + "unicode" + + "github.com/go-openapi/spec" +) + +type genericTypeSpec struct { + TypeSpec *TypeSpecDef + Name string +} + +type formalParamType struct { + Name string + Type string +} + +func (t *genericTypeSpec) TypeName() string { + if t.TypeSpec != nil { + return t.TypeSpec.TypeName() + } + return t.Name +} + +func normalizeGenericTypeName(name string) string { + return strings.Replace(name, ".", "_", -1) +} + +func (pkgDefs *PackagesDefinitions) getTypeFromGenericParam(genericParam string, file *ast.File) (typeSpecDef *TypeSpecDef) { + if strings.HasPrefix(genericParam, "[]") { + typeSpecDef = pkgDefs.getTypeFromGenericParam(genericParam[2:], file) + if typeSpecDef == nil { + return nil + } + var expr ast.Expr + switch typeSpecDef.TypeSpec.Type.(type) { + case *ast.ArrayType, *ast.MapType: + expr = typeSpecDef.TypeSpec.Type + default: + name := typeSpecDef.TypeName() + expr = ast.NewIdent(name) + if _, ok := pkgDefs.uniqueDefinitions[name]; !ok { + pkgDefs.uniqueDefinitions[name] = typeSpecDef + } + } + return &TypeSpecDef{ + TypeSpec: &ast.TypeSpec{ + Name: ast.NewIdent(string(IgnoreNameOverridePrefix) + "array_" + typeSpecDef.TypeName()), + Type: &ast.ArrayType{ + Elt: expr, + }, + }, + Enums: typeSpecDef.Enums, + PkgPath: typeSpecDef.PkgPath, + ParentSpec: typeSpecDef.ParentSpec, + NotUnique: false, + } + } + + if strings.HasPrefix(genericParam, "map[") { + parts := strings.SplitN(genericParam[4:], "]", 2) + if len(parts) != 2 { + return nil + } + typeSpecDef = pkgDefs.getTypeFromGenericParam(parts[1], file) + if typeSpecDef == nil { + return nil + } + var expr ast.Expr + switch typeSpecDef.TypeSpec.Type.(type) { + case *ast.ArrayType, *ast.MapType: + expr = typeSpecDef.TypeSpec.Type + default: + name := typeSpecDef.TypeName() + expr = ast.NewIdent(name) + if _, ok := pkgDefs.uniqueDefinitions[name]; !ok { + pkgDefs.uniqueDefinitions[name] = typeSpecDef + } + } + return &TypeSpecDef{ + TypeSpec: &ast.TypeSpec{ + Name: ast.NewIdent(string(IgnoreNameOverridePrefix) + "map_" + parts[0] + "_" + typeSpecDef.TypeName()), + Type: &ast.MapType{ + Key: ast.NewIdent(parts[0]), //assume key is string or integer + Value: expr, + }, + }, + Enums: typeSpecDef.Enums, + PkgPath: typeSpecDef.PkgPath, + ParentSpec: typeSpecDef.ParentSpec, + NotUnique: false, + } + + } + if IsGolangPrimitiveType(genericParam) { + return &TypeSpecDef{ + TypeSpec: &ast.TypeSpec{ + Name: ast.NewIdent(genericParam), + Type: ast.NewIdent(genericParam), + }, + } + } + return pkgDefs.FindTypeSpec(genericParam, file) +} + +func (pkgDefs *PackagesDefinitions) parametrizeGenericType(file *ast.File, original *TypeSpecDef, fullGenericForm string) *TypeSpecDef { + if original == nil || original.TypeSpec.TypeParams == nil || len(original.TypeSpec.TypeParams.List) == 0 { + return original + } + + name, genericParams := splitGenericsTypeName(fullGenericForm) + if genericParams == nil { + return nil + } + + //generic[x,y any,z any] considered, TODO what if the type is not `any`, but a concrete one, such as `int32|int64` or an certain interface{} + var formals []formalParamType + for _, field := range original.TypeSpec.TypeParams.List { + for _, ident := range field.Names { + formal := formalParamType{Name: ident.Name} + if ident, ok := field.Type.(*ast.Ident); ok { + formal.Type = ident.Name + } + formals = append(formals, formal) + } + } + if len(genericParams) != len(formals) { + return nil + } + genericParamTypeDefs := map[string]*genericTypeSpec{} + + for i, genericParam := range genericParams { + var typeDef *TypeSpecDef + if !IsGolangPrimitiveType(genericParam) { + typeDef = pkgDefs.getTypeFromGenericParam(genericParam, file) + if typeDef != nil { + genericParam = typeDef.TypeName() + if _, ok := pkgDefs.uniqueDefinitions[genericParam]; !ok { + pkgDefs.uniqueDefinitions[genericParam] = typeDef + } + } + } + genericParamTypeDefs[formals[i].Name] = &genericTypeSpec{ + TypeSpec: typeDef, + Name: genericParam, + } + } + + name = fmt.Sprintf("%s%s-", string(IgnoreNameOverridePrefix), original.TypeName()) + var nameParts []string + for _, def := range formals { + if specDef, ok := genericParamTypeDefs[def.Name]; ok { + nameParts = append(nameParts, specDef.TypeName()) + } + } + + name += normalizeGenericTypeName(strings.Join(nameParts, "-")) + + if typeSpec, ok := pkgDefs.uniqueDefinitions[name]; ok { + return typeSpec + } + + parametrizedTypeSpec := &TypeSpecDef{ + File: original.File, + PkgPath: original.PkgPath, + TypeSpec: &ast.TypeSpec{ + Name: &ast.Ident{ + Name: name, + NamePos: original.TypeSpec.Name.NamePos, + Obj: original.TypeSpec.Name.Obj, + }, + Doc: original.TypeSpec.Doc, + Assign: original.TypeSpec.Assign, + }, + } + pkgDefs.uniqueDefinitions[name] = parametrizedTypeSpec + + parametrizedTypeSpec.TypeSpec.Type = pkgDefs.resolveGenericType(original.File, original.TypeSpec.Type, genericParamTypeDefs) + + return parametrizedTypeSpec +} + +// splitGenericsTypeName splits a generic struct name in his parts +func splitGenericsTypeName(fullGenericForm string) (string, []string) { + //remove all spaces character + fullGenericForm = strings.Map(func(r rune) rune { + if unicode.IsSpace(r) { + return -1 + } + return r + }, fullGenericForm) + + // split only at the first '[' and remove the last ']' + if fullGenericForm[len(fullGenericForm)-1] != ']' { + return "", nil + } + + genericParams := strings.SplitN(fullGenericForm[:len(fullGenericForm)-1], "[", 2) + if len(genericParams) == 1 { + return "", nil + } + + // generic type name + genericTypeName := genericParams[0] + + depth := 0 + genericParams = strings.FieldsFunc(genericParams[1], func(r rune) bool { + if r == '[' { + depth++ + } else if r == ']' { + depth-- + } else if r == ',' && depth == 0 { + return true + } + return false + }) + if depth != 0 { + return "", nil + } + + return genericTypeName, genericParams +} + +func (pkgDefs *PackagesDefinitions) getParametrizedType(genTypeSpec *genericTypeSpec) ast.Expr { + if genTypeSpec.TypeSpec != nil && strings.Contains(genTypeSpec.Name, ".") { + parts := strings.SplitN(genTypeSpec.Name, ".", 2) + return &ast.SelectorExpr{ + X: &ast.Ident{Name: parts[0]}, + Sel: &ast.Ident{Name: parts[1]}, + } + } + + //a primitive type name or a type name in current package + return &ast.Ident{Name: genTypeSpec.Name} +} + +func (pkgDefs *PackagesDefinitions) resolveGenericType(file *ast.File, expr ast.Expr, genericParamTypeDefs map[string]*genericTypeSpec) ast.Expr { + switch astExpr := expr.(type) { + case *ast.Ident: + if genTypeSpec, ok := genericParamTypeDefs[astExpr.Name]; ok { + return pkgDefs.getParametrizedType(genTypeSpec) + } + case *ast.ArrayType: + return &ast.ArrayType{ + Elt: pkgDefs.resolveGenericType(file, astExpr.Elt, genericParamTypeDefs), + Len: astExpr.Len, + Lbrack: astExpr.Lbrack, + } + case *ast.MapType: + return &ast.MapType{ + Map: astExpr.Map, + Key: pkgDefs.resolveGenericType(file, astExpr.Key, genericParamTypeDefs), + Value: pkgDefs.resolveGenericType(file, astExpr.Value, genericParamTypeDefs), + } + case *ast.StarExpr: + return &ast.StarExpr{ + Star: astExpr.Star, + X: pkgDefs.resolveGenericType(file, astExpr.X, genericParamTypeDefs), + } + case *ast.IndexExpr, *ast.IndexListExpr: + fullGenericName, _ := getGenericFieldType(file, expr, genericParamTypeDefs) + typeDef := pkgDefs.FindTypeSpec(fullGenericName, file) + if typeDef != nil { + return typeDef.TypeSpec.Name + } + case *ast.StructType: + newStructTypeDef := &ast.StructType{ + Struct: astExpr.Struct, + Incomplete: astExpr.Incomplete, + Fields: &ast.FieldList{ + Opening: astExpr.Fields.Opening, + Closing: astExpr.Fields.Closing, + }, + } + + for _, field := range astExpr.Fields.List { + newField := &ast.Field{ + Type: field.Type, + Doc: field.Doc, + Names: field.Names, + Tag: field.Tag, + Comment: field.Comment, + } + + newField.Type = pkgDefs.resolveGenericType(file, field.Type, genericParamTypeDefs) + + newStructTypeDef.Fields.List = append(newStructTypeDef.Fields.List, newField) + } + return newStructTypeDef + } + return expr +} + +func getExtendedGenericFieldType(file *ast.File, field ast.Expr, genericParamTypeDefs map[string]*genericTypeSpec) (string, error) { + switch fieldType := field.(type) { + case *ast.ArrayType: + fieldName, err := getExtendedGenericFieldType(file, fieldType.Elt, genericParamTypeDefs) + return "[]" + fieldName, err + case *ast.StarExpr: + return getExtendedGenericFieldType(file, fieldType.X, genericParamTypeDefs) + case *ast.Ident: + if genericParamTypeDefs != nil { + if typeSpec, ok := genericParamTypeDefs[fieldType.Name]; ok { + return typeSpec.Name, nil + } + } + if fieldType.Obj == nil { + return fieldType.Name, nil + } + + tSpec := &TypeSpecDef{ + File: file, + TypeSpec: fieldType.Obj.Decl.(*ast.TypeSpec), + PkgPath: file.Name.Name, + } + return tSpec.TypeName(), nil + default: + return getFieldType(file, field, genericParamTypeDefs) + } +} + +func getGenericFieldType(file *ast.File, field ast.Expr, genericParamTypeDefs map[string]*genericTypeSpec) (string, error) { + var fullName string + var baseName string + var err error + switch fieldType := field.(type) { + case *ast.IndexListExpr: + baseName, err = getGenericTypeName(file, fieldType.X) + if err != nil { + return "", err + } + fullName = baseName + "[" + + for _, index := range fieldType.Indices { + fieldName, err := getExtendedGenericFieldType(file, index, genericParamTypeDefs) + if err != nil { + return "", err + } + + fullName += fieldName + "," + } + + fullName = strings.TrimRight(fullName, ",") + "]" + case *ast.IndexExpr: + baseName, err = getGenericTypeName(file, fieldType.X) + if err != nil { + return "", err + } + + indexName, err := getExtendedGenericFieldType(file, fieldType.Index, genericParamTypeDefs) + if err != nil { + return "", err + } + + fullName = fmt.Sprintf("%s[%s]", baseName, indexName) + } + + if fullName == "" { + return "", fmt.Errorf("unknown field type %#v", field) + } + + var packageName string + if !strings.Contains(baseName, ".") { + if file.Name == nil { + return "", errors.New("file name is nil") + } + packageName, _ = getFieldType(file, file.Name, genericParamTypeDefs) + } + + return strings.TrimLeft(fmt.Sprintf("%s.%s", packageName, fullName), "."), nil +} + +func getGenericTypeName(file *ast.File, field ast.Expr) (string, error) { + switch fieldType := field.(type) { + case *ast.Ident: + if fieldType.Obj == nil { + return fieldType.Name, nil + } + + tSpec := &TypeSpecDef{ + File: file, + TypeSpec: fieldType.Obj.Decl.(*ast.TypeSpec), + PkgPath: file.Name.Name, + } + return tSpec.TypeName(), nil + case *ast.ArrayType: + tSpec := &TypeSpecDef{ + File: file, + TypeSpec: fieldType.Elt.(*ast.Ident).Obj.Decl.(*ast.TypeSpec), + PkgPath: file.Name.Name, + } + return tSpec.TypeName(), nil + case *ast.SelectorExpr: + return fmt.Sprintf("%s.%s", fieldType.X.(*ast.Ident).Name, fieldType.Sel.Name), nil + } + return "", fmt.Errorf("unknown type %#v", field) +} + +func (parser *Parser) parseGenericTypeExpr(file *ast.File, typeExpr ast.Expr) (*spec.Schema, error) { + switch expr := typeExpr.(type) { + // suppress debug messages for these types + case *ast.InterfaceType: + case *ast.StructType: + case *ast.Ident: + case *ast.StarExpr: + case *ast.SelectorExpr: + case *ast.ArrayType: + case *ast.MapType: + case *ast.FuncType: + case *ast.IndexExpr, *ast.IndexListExpr: + name, err := getExtendedGenericFieldType(file, expr, nil) + if err == nil { + if schema, err := parser.getTypeSchema(name, file, false); err == nil { + return schema, nil + } + } + + parser.debug.Printf("Type definition of type '%T' is not supported yet. Using 'object' instead. (%s)\n", typeExpr, err) + default: + parser.debug.Printf("Type definition of type '%T' is not supported yet. Using 'object' instead.\n", typeExpr) + } + + return PrimitiveSchema(OBJECT), nil +} diff --git a/vendor/github.com/swaggo/swag/golist.go b/vendor/github.com/swaggo/swag/golist.go new file mode 100644 index 0000000..fa0b2cd --- /dev/null +++ b/vendor/github.com/swaggo/swag/golist.go @@ -0,0 +1,78 @@ +package swag + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "go/build" + "os/exec" + "path/filepath" +) + +func listPackages(ctx context.Context, dir string, env []string, args ...string) (pkgs []*build.Package, finalErr error) { + cmd := exec.CommandContext(ctx, "go", append([]string{"list", "-json", "-e"}, args...)...) + cmd.Env = env + cmd.Dir = dir + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + var stderrBuf bytes.Buffer + cmd.Stderr = &stderrBuf + defer func() { + if stderrBuf.Len() > 0 { + finalErr = fmt.Errorf("%v\n%s", finalErr, stderrBuf.Bytes()) + } + }() + + err = cmd.Start() + if err != nil { + return nil, err + } + dec := json.NewDecoder(stdout) + for dec.More() { + var pkg build.Package + err = dec.Decode(&pkg) + if err != nil { + return nil, err + } + pkgs = append(pkgs, &pkg) + } + err = cmd.Wait() + if err != nil { + return nil, err + } + return pkgs, nil +} + +func (parser *Parser) getAllGoFileInfoFromDepsByList(pkg *build.Package, parseFlag ParseFlag) error { + ignoreInternal := pkg.Goroot && !parser.ParseInternal + if ignoreInternal { // ignored internal + return nil + } + + if parser.skipPackageByPrefix(pkg.ImportPath) { + return nil // ignored by user-defined package path prefixes + } + + srcDir := pkg.Dir + var err error + for i := range pkg.GoFiles { + err = parser.parseFile(pkg.ImportPath, filepath.Join(srcDir, pkg.GoFiles[i]), nil, parseFlag) + if err != nil { + return err + } + } + + // parse .go source files that import "C" + for i := range pkg.CgoFiles { + err = parser.parseFile(pkg.ImportPath, filepath.Join(srcDir, pkg.CgoFiles[i]), nil, parseFlag) + if err != nil { + return err + } + } + + return nil +} diff --git a/vendor/github.com/swaggo/swag/license b/vendor/github.com/swaggo/swag/license new file mode 100644 index 0000000..a97865b --- /dev/null +++ b/vendor/github.com/swaggo/swag/license @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Eason Lin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/swaggo/swag/operation.go b/vendor/github.com/swaggo/swag/operation.go new file mode 100644 index 0000000..169510f --- /dev/null +++ b/vendor/github.com/swaggo/swag/operation.go @@ -0,0 +1,1245 @@ +package swag + +import ( + "encoding/json" + "fmt" + "go/ast" + goparser "go/parser" + "go/token" + "net/http" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" + + "github.com/go-openapi/spec" + "golang.org/x/tools/go/loader" +) + +// RouteProperties describes HTTP properties of a single router comment. +type RouteProperties struct { + HTTPMethod string + Path string + Deprecated bool +} + +// Operation describes a single API operation on a path. +// For more information: https://github.com/swaggo/swag#api-operation +type Operation struct { + parser *Parser + codeExampleFilesDir string + spec.Operation + RouterProperties []RouteProperties + State string +} + +var mimeTypeAliases = map[string]string{ + "json": "application/json", + "xml": "text/xml", + "plain": "text/plain", + "html": "text/html", + "mpfd": "multipart/form-data", + "x-www-form-urlencoded": "application/x-www-form-urlencoded", + "json-api": "application/vnd.api+json", + "json-stream": "application/x-json-stream", + "octet-stream": "application/octet-stream", + "png": "image/png", + "jpeg": "image/jpeg", + "gif": "image/gif", +} + +var mimeTypePattern = regexp.MustCompile("^[^/]+/[^/]+$") + +// NewOperation creates a new Operation with default properties. +// map[int]Response. +func NewOperation(parser *Parser, options ...func(*Operation)) *Operation { + if parser == nil { + parser = New() + } + + result := &Operation{ + parser: parser, + RouterProperties: []RouteProperties{}, + Operation: spec.Operation{ + OperationProps: spec.OperationProps{ + ID: "", + Description: "", + Summary: "", + Security: nil, + ExternalDocs: nil, + Deprecated: false, + Tags: []string{}, + Consumes: []string{}, + Produces: []string{}, + Schemes: []string{}, + Parameters: []spec.Parameter{}, + Responses: &spec.Responses{ + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{}, + }, + ResponsesProps: spec.ResponsesProps{ + Default: nil, + StatusCodeResponses: make(map[int]spec.Response), + }, + }, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{}, + }, + }, + codeExampleFilesDir: "", + } + + for _, option := range options { + option(result) + } + + return result +} + +// SetCodeExampleFilesDirectory sets the directory to search for codeExamples. +func SetCodeExampleFilesDirectory(directoryPath string) func(*Operation) { + return func(o *Operation) { + o.codeExampleFilesDir = directoryPath + } +} + +// ParseComment parses comment for given comment string and returns error if error occurs. +func (operation *Operation) ParseComment(comment string, astFile *ast.File) error { + commentLine := strings.TrimSpace(strings.TrimLeft(comment, "/")) + if len(commentLine) == 0 { + return nil + } + + fields := FieldsByAnySpace(commentLine, 2) + attribute := fields[0] + lowerAttribute := strings.ToLower(attribute) + var lineRemainder string + if len(fields) > 1 { + lineRemainder = fields[1] + } + switch lowerAttribute { + case stateAttr: + operation.ParseStateComment(lineRemainder) + case descriptionAttr: + operation.ParseDescriptionComment(lineRemainder) + case descriptionMarkdownAttr: + commentInfo, err := getMarkdownForTag(lineRemainder, operation.parser.markdownFileDir) + if err != nil { + return err + } + + operation.ParseDescriptionComment(string(commentInfo)) + case summaryAttr: + operation.Summary = lineRemainder + case idAttr: + operation.ID = lineRemainder + case tagsAttr: + operation.ParseTagsComment(lineRemainder) + case acceptAttr: + return operation.ParseAcceptComment(lineRemainder) + case produceAttr: + return operation.ParseProduceComment(lineRemainder) + case paramAttr: + return operation.ParseParamComment(lineRemainder, astFile) + case successAttr, failureAttr, responseAttr: + return operation.ParseResponseComment(lineRemainder, astFile) + case headerAttr: + return operation.ParseResponseHeaderComment(lineRemainder, astFile) + case routerAttr: + return operation.ParseRouterComment(lineRemainder, false) + case deprecatedRouterAttr: + return operation.ParseRouterComment(lineRemainder, true) + case securityAttr: + return operation.ParseSecurityComment(lineRemainder) + case deprecatedAttr: + operation.Deprecate() + case xCodeSamplesAttr: + return operation.ParseCodeSample(attribute, commentLine, lineRemainder) + default: + return operation.ParseMetadata(attribute, lowerAttribute, lineRemainder) + } + + return nil +} + +// ParseCodeSample parse code sample. +func (operation *Operation) ParseCodeSample(attribute, _, lineRemainder string) error { + if lineRemainder == "file" { + data, err := getCodeExampleForSummary(operation.Summary, operation.codeExampleFilesDir) + if err != nil { + return err + } + + var valueJSON interface{} + + err = json.Unmarshal(data, &valueJSON) + if err != nil { + return fmt.Errorf("annotation %s need a valid json value", attribute) + } + + // don't use the method provided by spec lib, because it will call toLower() on attribute names, which is wrongly + operation.Extensions[attribute[1:]] = valueJSON + + return nil + } + + // Fallback into existing logic + return operation.ParseMetadata(attribute, strings.ToLower(attribute), lineRemainder) +} + +// ParseStateComment parse state comment. +func (operation *Operation) ParseStateComment(lineRemainder string) { + operation.State = lineRemainder +} + +// ParseDescriptionComment parse description comment. +func (operation *Operation) ParseDescriptionComment(lineRemainder string) { + if operation.Description == "" { + operation.Description = lineRemainder + + return + } + + operation.Description += "\n" + lineRemainder +} + +// ParseMetadata parse metadata. +func (operation *Operation) ParseMetadata(attribute, lowerAttribute, lineRemainder string) error { + // parsing specific meta data extensions + if strings.HasPrefix(lowerAttribute, "@x-") { + if len(lineRemainder) == 0 { + return fmt.Errorf("annotation %s need a value", attribute) + } + + var valueJSON interface{} + + err := json.Unmarshal([]byte(lineRemainder), &valueJSON) + if err != nil { + return fmt.Errorf("annotation %s need a valid json value", attribute) + } + + // don't use the method provided by spec lib, because it will call toLower() on attribute names, which is wrongly + operation.Extensions[attribute[1:]] = valueJSON + } + + return nil +} + +var paramPattern = regexp.MustCompile(`(\S+)\s+(\w+)\s+([\S. ]+?)\s+(\w+)\s+"([^"]+)"`) + +func findInSlice(arr []string, target string) bool { + for _, str := range arr { + if str == target { + return true + } + } + + return false +} + +// ParseParamComment parses params return []string of param properties +// E.g. @Param queryText formData string true "The email for login" +// +// [param name] [paramType] [data type] [is mandatory?] [Comment] +// +// E.g. @Param some_id path int true "Some ID". +func (operation *Operation) ParseParamComment(commentLine string, astFile *ast.File) error { + matches := paramPattern.FindStringSubmatch(commentLine) + if len(matches) != 6 { + return fmt.Errorf("missing required param comment parameters \"%s\"", commentLine) + } + + name := matches[1] + paramType := matches[2] + refType := TransToValidSchemeType(matches[3]) + + // Detect refType + objectType := OBJECT + + if strings.HasPrefix(refType, "[]") { + objectType = ARRAY + refType = strings.TrimPrefix(refType, "[]") + refType = TransToValidSchemeType(refType) + } else if IsPrimitiveType(refType) || + paramType == "formData" && refType == "file" { + objectType = PRIMITIVE + } + + var enums []interface{} + if !IsPrimitiveType(refType) { + schema, _ := operation.parser.getTypeSchema(refType, astFile, false) + if schema != nil && len(schema.Type) == 1 && schema.Enum != nil { + if objectType == OBJECT { + objectType = PRIMITIVE + } + refType = TransToValidSchemeType(schema.Type[0]) + enums = schema.Enum + } + } + + requiredText := strings.ToLower(matches[4]) + required := requiredText == "true" || requiredText == requiredLabel + description := matches[5] + + param := createParameter(paramType, description, name, objectType, refType, required, enums, operation.parser.collectionFormatInQuery) + + switch paramType { + case "path", "header", "query", "formData": + switch objectType { + case ARRAY: + if !IsPrimitiveType(refType) && !(refType == "file" && paramType == "formData") { + return fmt.Errorf("%s is not supported array type for %s", refType, paramType) + } + case PRIMITIVE: + break + case OBJECT: + schema, err := operation.parser.getTypeSchema(refType, astFile, false) + if err != nil { + return err + } + + if len(schema.Properties) == 0 { + return nil + } + + items := schema.Properties.ToOrderedSchemaItems() + + for _, item := range items { + name, prop := item.Name, &item.Schema + if len(prop.Type) == 0 { + prop = operation.parser.getUnderlyingSchema(prop) + if len(prop.Type) == 0 { + continue + } + } + + nameOverrideType := paramType + // query also uses formData tags + if paramType == "query" { + nameOverrideType = "formData" + } + // load overridden type specific name from extensions if exists + if nameVal, ok := item.Schema.Extensions[nameOverrideType]; ok { + name = nameVal.(string) + } + + switch { + case prop.Type[0] == ARRAY: + if prop.Items.Schema == nil { + continue + } + itemSchema := prop.Items.Schema + if len(itemSchema.Type) == 0 { + itemSchema = operation.parser.getUnderlyingSchema(prop.Items.Schema) + } + if len(itemSchema.Type) == 0 { + continue + } + if !IsSimplePrimitiveType(itemSchema.Type[0]) { + continue + } + param = createParameter(paramType, prop.Description, name, prop.Type[0], itemSchema.Type[0], findInSlice(schema.Required, item.Name), itemSchema.Enum, operation.parser.collectionFormatInQuery) + + case IsSimplePrimitiveType(prop.Type[0]): + param = createParameter(paramType, prop.Description, name, PRIMITIVE, prop.Type[0], findInSlice(schema.Required, item.Name), nil, operation.parser.collectionFormatInQuery) + default: + operation.parser.debug.Printf("skip field [%s] in %s is not supported type for %s", name, refType, paramType) + continue + } + + param.Nullable = prop.Nullable + param.Format = prop.Format + param.Default = prop.Default + param.Example = prop.Example + param.Extensions = prop.Extensions + param.CommonValidations.Maximum = prop.Maximum + param.CommonValidations.Minimum = prop.Minimum + param.CommonValidations.ExclusiveMaximum = prop.ExclusiveMaximum + param.CommonValidations.ExclusiveMinimum = prop.ExclusiveMinimum + param.CommonValidations.MaxLength = prop.MaxLength + param.CommonValidations.MinLength = prop.MinLength + param.CommonValidations.Pattern = prop.Pattern + param.CommonValidations.MaxItems = prop.MaxItems + param.CommonValidations.MinItems = prop.MinItems + param.CommonValidations.UniqueItems = prop.UniqueItems + param.CommonValidations.MultipleOf = prop.MultipleOf + param.CommonValidations.Enum = prop.Enum + operation.Operation.Parameters = append(operation.Operation.Parameters, param) + } + + return nil + } + case "body": + if objectType == PRIMITIVE { + param.Schema = PrimitiveSchema(refType) + } else { + schema, err := operation.parseAPIObjectSchema(commentLine, objectType, refType, astFile) + if err != nil { + return err + } + + param.Schema = schema + } + default: + return fmt.Errorf("%s is not supported paramType", paramType) + } + + err := operation.parseParamAttribute(commentLine, objectType, refType, paramType, ¶m) + + if err != nil { + return err + } + + operation.Operation.Parameters = append(operation.Operation.Parameters, param) + + return nil +} + +const ( + formTag = "form" + jsonTag = "json" + uriTag = "uri" + headerTag = "header" + bindingTag = "binding" + defaultTag = "default" + enumsTag = "enums" + exampleTag = "example" + schemaExampleTag = "schemaExample" + formatTag = "format" + validateTag = "validate" + minimumTag = "minimum" + maximumTag = "maximum" + minLengthTag = "minLength" + maxLengthTag = "maxLength" + multipleOfTag = "multipleOf" + readOnlyTag = "readonly" + extensionsTag = "extensions" + collectionFormatTag = "collectionFormat" +) + +var regexAttributes = map[string]*regexp.Regexp{ + // for Enums(A, B) + enumsTag: regexp.MustCompile(`(?i)\s+enums\(.*\)`), + // for maximum(0) + maximumTag: regexp.MustCompile(`(?i)\s+maxinum|maximum\(.*\)`), + // for minimum(0) + minimumTag: regexp.MustCompile(`(?i)\s+mininum|minimum\(.*\)`), + // for default(0) + defaultTag: regexp.MustCompile(`(?i)\s+default\(.*\)`), + // for minlength(0) + minLengthTag: regexp.MustCompile(`(?i)\s+minlength\(.*\)`), + // for maxlength(0) + maxLengthTag: regexp.MustCompile(`(?i)\s+maxlength\(.*\)`), + // for format(email) + formatTag: regexp.MustCompile(`(?i)\s+format\(.*\)`), + // for extensions(x-example=test) + extensionsTag: regexp.MustCompile(`(?i)\s+extensions\(.*\)`), + // for collectionFormat(csv) + collectionFormatTag: regexp.MustCompile(`(?i)\s+collectionFormat\(.*\)`), + // example(0) + exampleTag: regexp.MustCompile(`(?i)\s+example\(.*\)`), + // schemaExample(0) + schemaExampleTag: regexp.MustCompile(`(?i)\s+schemaExample\(.*\)`), +} + +func (operation *Operation) parseParamAttribute(comment, objectType, schemaType, paramType string, param *spec.Parameter) error { + schemaType = TransToValidSchemeType(schemaType) + + for attrKey, re := range regexAttributes { + attr, err := findAttr(re, comment) + if err != nil { + continue + } + + switch attrKey { + case enumsTag: + err = setEnumParam(param, attr, objectType, schemaType, paramType) + case minimumTag, maximumTag: + err = setNumberParam(param, attrKey, schemaType, attr, comment) + case defaultTag: + err = setDefault(param, schemaType, attr) + case minLengthTag, maxLengthTag: + err = setStringParam(param, attrKey, schemaType, attr, comment) + case formatTag: + param.Format = attr + case exampleTag: + err = setExample(param, schemaType, attr) + case schemaExampleTag: + err = setSchemaExample(param, schemaType, attr) + case extensionsTag: + param.Extensions = setExtensionParam(attr) + case collectionFormatTag: + err = setCollectionFormatParam(param, attrKey, objectType, attr, comment) + } + + if err != nil { + return err + } + } + + return nil +} + +func findAttr(re *regexp.Regexp, commentLine string) (string, error) { + attr := re.FindString(commentLine) + + l, r := strings.Index(attr, "("), strings.Index(attr, ")") + if l == -1 || r == -1 { + return "", fmt.Errorf("can not find regex=%s, comment=%s", re.String(), commentLine) + } + + return strings.TrimSpace(attr[l+1 : r]), nil +} + +func setStringParam(param *spec.Parameter, name, schemaType, attr, commentLine string) error { + if schemaType != STRING { + return fmt.Errorf("%s is attribute to set to a number. comment=%s got=%s", name, commentLine, schemaType) + } + + n, err := strconv.ParseInt(attr, 10, 64) + if err != nil { + return fmt.Errorf("%s is allow only a number got=%s", name, attr) + } + + switch name { + case minLengthTag: + param.MinLength = &n + case maxLengthTag: + param.MaxLength = &n + } + + return nil +} + +func setNumberParam(param *spec.Parameter, name, schemaType, attr, commentLine string) error { + switch schemaType { + case INTEGER, NUMBER: + n, err := strconv.ParseFloat(attr, 64) + if err != nil { + return fmt.Errorf("maximum is allow only a number. comment=%s got=%s", commentLine, attr) + } + + switch name { + case minimumTag: + param.Minimum = &n + case maximumTag: + param.Maximum = &n + } + + return nil + default: + return fmt.Errorf("%s is attribute to set to a number. comment=%s got=%s", name, commentLine, schemaType) + } +} + +func setEnumParam(param *spec.Parameter, attr, objectType, schemaType, paramType string) error { + for _, e := range strings.Split(attr, ",") { + e = strings.TrimSpace(e) + + value, err := defineType(schemaType, e) + if err != nil { + return err + } + + switch objectType { + case ARRAY: + param.Items.Enum = append(param.Items.Enum, value) + default: + switch paramType { + case "body": + param.Schema.Enum = append(param.Schema.Enum, value) + default: + param.Enum = append(param.Enum, value) + } + } + } + + return nil +} + +func setExtensionParam(attr string) spec.Extensions { + extensions := spec.Extensions{} + + for _, val := range splitNotWrapped(attr, ',') { + parts := strings.SplitN(val, "=", 2) + if len(parts) == 2 { + extensions.Add(parts[0], parts[1]) + + continue + } + + if len(parts[0]) > 0 && string(parts[0][0]) == "!" { + extensions.Add(parts[0][1:], false) + + continue + } + + extensions.Add(parts[0], true) + } + + return extensions +} + +func setCollectionFormatParam(param *spec.Parameter, name, schemaType, attr, commentLine string) error { + if schemaType == ARRAY { + param.CollectionFormat = TransToValidCollectionFormat(attr) + + return nil + } + + return fmt.Errorf("%s is attribute to set to an array. comment=%s got=%s", name, commentLine, schemaType) +} + +func setDefault(param *spec.Parameter, schemaType string, value string) error { + val, err := defineType(schemaType, value) + if err != nil { + return nil // Don't set a default value if it's not valid + } + + param.Default = val + + return nil +} + +func setSchemaExample(param *spec.Parameter, schemaType string, value string) error { + val, err := defineType(schemaType, value) + if err != nil { + return nil // Don't set a example value if it's not valid + } + // skip schema + if param.Schema == nil { + return nil + } + + switch v := val.(type) { + case string: + // replaces \r \n \t in example string values. + param.Schema.Example = strings.NewReplacer(`\r`, "\r", `\n`, "\n", `\t`, "\t").Replace(v) + default: + param.Schema.Example = val + } + + return nil +} + +func setExample(param *spec.Parameter, schemaType string, value string) error { + val, err := defineType(schemaType, value) + if err != nil { + return nil // Don't set a example value if it's not valid + } + + param.Example = val + + return nil +} + +// defineType enum value define the type (object and array unsupported). +func defineType(schemaType string, value string) (v interface{}, err error) { + schemaType = TransToValidSchemeType(schemaType) + + switch schemaType { + case STRING: + return value, nil + case NUMBER: + v, err = strconv.ParseFloat(value, 64) + if err != nil { + return nil, fmt.Errorf("enum value %s can't convert to %s err: %s", value, schemaType, err) + } + case INTEGER: + v, err = strconv.Atoi(value) + if err != nil { + return nil, fmt.Errorf("enum value %s can't convert to %s err: %s", value, schemaType, err) + } + case BOOLEAN: + v, err = strconv.ParseBool(value) + if err != nil { + return nil, fmt.Errorf("enum value %s can't convert to %s err: %s", value, schemaType, err) + } + default: + return nil, fmt.Errorf("%s is unsupported type in enum value %s", schemaType, value) + } + + return v, nil +} + +// ParseTagsComment parses comment for given `tag` comment string. +func (operation *Operation) ParseTagsComment(commentLine string) { + for _, tag := range strings.Split(commentLine, ",") { + operation.Tags = append(operation.Tags, strings.TrimSpace(tag)) + } +} + +// ParseAcceptComment parses comment for given `accept` comment string. +func (operation *Operation) ParseAcceptComment(commentLine string) error { + return parseMimeTypeList(commentLine, &operation.Consumes, "%v accept type can't be accepted") +} + +// ParseProduceComment parses comment for given `produce` comment string. +func (operation *Operation) ParseProduceComment(commentLine string) error { + return parseMimeTypeList(commentLine, &operation.Produces, "%v produce type can't be accepted") +} + +// parseMimeTypeList parses a list of MIME Types for a comment like +// `produce` (`Content-Type:` response header) or +// `accept` (`Accept:` request header). +func parseMimeTypeList(mimeTypeList string, typeList *[]string, format string) error { + for _, typeName := range strings.Split(mimeTypeList, ",") { + if mimeTypePattern.MatchString(typeName) { + *typeList = append(*typeList, typeName) + + continue + } + + aliasMimeType, ok := mimeTypeAliases[typeName] + if !ok { + return fmt.Errorf(format, typeName) + } + + *typeList = append(*typeList, aliasMimeType) + } + + return nil +} + +var routerPattern = regexp.MustCompile(`^(/[\w./\-{}+:$]*)[[:blank:]]+\[(\w+)]`) + +// ParseRouterComment parses comment for given `router` comment string. +func (operation *Operation) ParseRouterComment(commentLine string, deprecated bool) error { + matches := routerPattern.FindStringSubmatch(commentLine) + if len(matches) != 3 { + return fmt.Errorf("can not parse router comment \"%s\"", commentLine) + } + + signature := RouteProperties{ + Path: matches[1], + HTTPMethod: strings.ToUpper(matches[2]), + Deprecated: deprecated, + } + + if _, ok := allMethod[signature.HTTPMethod]; !ok { + return fmt.Errorf("invalid method: %s", signature.HTTPMethod) + } + + operation.RouterProperties = append(operation.RouterProperties, signature) + + return nil +} + +// ParseSecurityComment parses comment for given `security` comment string. +func (operation *Operation) ParseSecurityComment(commentLine string) error { + if len(commentLine) == 0 { + operation.Security = []map[string][]string{} + return nil + } + + var ( + securityMap = make(map[string][]string) + securitySource = commentLine[strings.Index(commentLine, "@Security")+1:] + ) + + for _, securityOption := range strings.Split(securitySource, "||") { + securityOption = strings.TrimSpace(securityOption) + + left, right := strings.Index(securityOption, "["), strings.Index(securityOption, "]") + + if !(left == -1 && right == -1) { + scopes := securityOption[left+1 : right] + + var options []string + + for _, scope := range strings.Split(scopes, ",") { + options = append(options, strings.TrimSpace(scope)) + } + + securityKey := securityOption[0:left] + securityMap[securityKey] = append(securityMap[securityKey], options...) + } else { + securityKey := strings.TrimSpace(securityOption) + securityMap[securityKey] = []string{} + } + } + + operation.Security = append(operation.Security, securityMap) + + return nil +} + +// findTypeDef attempts to find the *ast.TypeSpec for a specific type given the +// type's name and the package's import path. +// TODO: improve finding external pkg. +func findTypeDef(importPath, typeName string) (*ast.TypeSpec, error) { + cwd, err := os.Getwd() + if err != nil { + return nil, err + } + + conf := loader.Config{ + ParserMode: goparser.SpuriousErrors, + Cwd: cwd, + } + + conf.Import(importPath) + + lprog, err := conf.Load() + if err != nil { + return nil, err + } + + // If the pkg is vendored, the actual pkg path is going to resemble + // something like "{importPath}/vendor/{importPath}" + for k := range lprog.AllPackages { + realPkgPath := k.Path() + + if strings.Contains(realPkgPath, "vendor/"+importPath) { + importPath = realPkgPath + } + } + + pkgInfo := lprog.Package(importPath) + + if pkgInfo == nil { + return nil, fmt.Errorf("package was nil") + } + + // TODO: possibly cache pkgInfo since it's an expensive operation + for i := range pkgInfo.Files { + for _, astDeclaration := range pkgInfo.Files[i].Decls { + generalDeclaration, ok := astDeclaration.(*ast.GenDecl) + if ok && generalDeclaration.Tok == token.TYPE { + for _, astSpec := range generalDeclaration.Specs { + typeSpec, ok := astSpec.(*ast.TypeSpec) + if ok { + if typeSpec.Name.String() == typeName { + return typeSpec, nil + } + } + } + } + } + } + + return nil, fmt.Errorf("type spec not found") +} + +var responsePattern = regexp.MustCompile(`^([\w,]+)\s+([\w{}]+)\s+([\w\-.\\{}=,\[\s\]]+)\s*(".*)?`) + +// ResponseType{data1=Type1,data2=Type2}. +var combinedPattern = regexp.MustCompile(`^([\w\-./\[\]]+){(.*)}$`) + +func (operation *Operation) parseObjectSchema(refType string, astFile *ast.File) (*spec.Schema, error) { + return parseObjectSchema(operation.parser, refType, astFile) +} + +func parseObjectSchema(parser *Parser, refType string, astFile *ast.File) (*spec.Schema, error) { + switch { + case refType == NIL: + return nil, nil + case refType == INTERFACE: + return PrimitiveSchema(OBJECT), nil + case refType == ANY: + return PrimitiveSchema(OBJECT), nil + case IsGolangPrimitiveType(refType): + refType = TransToValidSchemeType(refType) + + return PrimitiveSchema(refType), nil + case IsPrimitiveType(refType): + return PrimitiveSchema(refType), nil + case strings.HasPrefix(refType, "[]"): + schema, err := parseObjectSchema(parser, refType[2:], astFile) + if err != nil { + return nil, err + } + + return spec.ArrayProperty(schema), nil + case strings.HasPrefix(refType, "map["): + // ignore key type + idx := strings.Index(refType, "]") + if idx < 0 { + return nil, fmt.Errorf("invalid type: %s", refType) + } + + refType = refType[idx+1:] + if refType == INTERFACE || refType == ANY { + return spec.MapProperty(nil), nil + } + + schema, err := parseObjectSchema(parser, refType, astFile) + if err != nil { + return nil, err + } + + return spec.MapProperty(schema), nil + case strings.Contains(refType, "{"): + return parseCombinedObjectSchema(parser, refType, astFile) + default: + if parser != nil { // checking refType has existing in 'TypeDefinitions' + schema, err := parser.getTypeSchema(refType, astFile, true) + if err != nil { + return nil, err + } + + return schema, nil + } + + return RefSchema(refType), nil + } +} + +func parseFields(s string) []string { + nestLevel := 0 + + return strings.FieldsFunc(s, func(char rune) bool { + if char == '{' { + nestLevel++ + + return false + } else if char == '}' { + nestLevel-- + + return false + } + + return char == ',' && nestLevel == 0 + }) +} + +func parseCombinedObjectSchema(parser *Parser, refType string, astFile *ast.File) (*spec.Schema, error) { + matches := combinedPattern.FindStringSubmatch(refType) + if len(matches) != 3 { + return nil, fmt.Errorf("invalid type: %s", refType) + } + + schema, err := parseObjectSchema(parser, matches[1], astFile) + if err != nil { + return nil, err + } + + fields, props := parseFields(matches[2]), map[string]spec.Schema{} + + for _, field := range fields { + keyVal := strings.SplitN(field, "=", 2) + if len(keyVal) == 2 { + schema, err := parseObjectSchema(parser, keyVal[1], astFile) + if err != nil { + return nil, err + } + + if schema == nil { + schema = PrimitiveSchema(OBJECT) + } + + props[keyVal[0]] = *schema + } + } + + if len(props) == 0 { + return schema, nil + } + + if schema.Ref.GetURL() == nil && len(schema.Type) > 0 && schema.Type[0] == OBJECT && len(schema.Properties) == 0 && schema.AdditionalProperties == nil { + schema.Properties = props + return schema, nil + } + + return spec.ComposedSchema(*schema, spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{OBJECT}, + Properties: props, + }, + }), nil +} + +func (operation *Operation) parseAPIObjectSchema(commentLine, schemaType, refType string, astFile *ast.File) (*spec.Schema, error) { + if strings.HasSuffix(refType, ",") && strings.Contains(refType, "[") { + // regexp may have broken generic syntax. find closing bracket and add it back + allMatchesLenOffset := strings.Index(commentLine, refType) + len(refType) + lostPartEndIdx := strings.Index(commentLine[allMatchesLenOffset:], "]") + if lostPartEndIdx >= 0 { + refType += commentLine[allMatchesLenOffset : allMatchesLenOffset+lostPartEndIdx+1] + } + } + + switch schemaType { + case OBJECT: + if !strings.HasPrefix(refType, "[]") { + return operation.parseObjectSchema(refType, astFile) + } + + refType = refType[2:] + + fallthrough + case ARRAY: + schema, err := operation.parseObjectSchema(refType, astFile) + if err != nil { + return nil, err + } + + return spec.ArrayProperty(schema), nil + default: + return PrimitiveSchema(schemaType), nil + } +} + +// ParseResponseComment parses comment for given `response` comment string. +func (operation *Operation) ParseResponseComment(commentLine string, astFile *ast.File) error { + matches := responsePattern.FindStringSubmatch(commentLine) + if len(matches) != 5 { + err := operation.ParseEmptyResponseComment(commentLine) + if err != nil { + return operation.ParseEmptyResponseOnly(commentLine) + } + + return err + } + + description := strings.Trim(matches[4], "\"") + + schema, err := operation.parseAPIObjectSchema(commentLine, strings.Trim(matches[2], "{}"), strings.TrimSpace(matches[3]), astFile) + if err != nil { + return err + } + + for _, codeStr := range strings.Split(matches[1], ",") { + if strings.EqualFold(codeStr, defaultTag) { + operation.DefaultResponse().WithSchema(schema).WithDescription(description) + + continue + } + + code, err := strconv.Atoi(codeStr) + if err != nil { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + resp := spec.NewResponse().WithSchema(schema).WithDescription(description) + if description == "" { + resp.WithDescription(http.StatusText(code)) + } + + operation.AddResponse(code, resp) + } + + return nil +} + +func newHeaderSpec(schemaType, description string) spec.Header { + return spec.Header{ + SimpleSchema: spec.SimpleSchema{ + Type: schemaType, + }, + HeaderProps: spec.HeaderProps{ + Description: description, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: nil, + }, + CommonValidations: spec.CommonValidations{ + Maximum: nil, + ExclusiveMaximum: false, + Minimum: nil, + ExclusiveMinimum: false, + MaxLength: nil, + MinLength: nil, + Pattern: "", + MaxItems: nil, + MinItems: nil, + UniqueItems: false, + MultipleOf: nil, + Enum: nil, + }, + } +} + +// ParseResponseHeaderComment parses comment for given `response header` comment string. +func (operation *Operation) ParseResponseHeaderComment(commentLine string, _ *ast.File) error { + matches := responsePattern.FindStringSubmatch(commentLine) + if len(matches) != 5 { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + header := newHeaderSpec(strings.Trim(matches[2], "{}"), strings.Trim(matches[4], "\"")) + + headerKey := strings.TrimSpace(matches[3]) + + if strings.EqualFold(matches[1], "all") { + if operation.Responses.Default != nil { + operation.Responses.Default.Headers[headerKey] = header + } + + if operation.Responses.StatusCodeResponses != nil { + for code, response := range operation.Responses.StatusCodeResponses { + response.Headers[headerKey] = header + operation.Responses.StatusCodeResponses[code] = response + } + } + + return nil + } + + for _, codeStr := range strings.Split(matches[1], ",") { + if strings.EqualFold(codeStr, defaultTag) { + if operation.Responses.Default != nil { + operation.Responses.Default.Headers[headerKey] = header + } + + continue + } + + code, err := strconv.Atoi(codeStr) + if err != nil { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + if operation.Responses.StatusCodeResponses != nil { + response, responseExist := operation.Responses.StatusCodeResponses[code] + if responseExist { + response.Headers[headerKey] = header + + operation.Responses.StatusCodeResponses[code] = response + } + } + } + + return nil +} + +var emptyResponsePattern = regexp.MustCompile(`([\w,]+)\s+"(.*)"`) + +// ParseEmptyResponseComment parse only comment out status code and description,eg: @Success 200 "it's ok". +func (operation *Operation) ParseEmptyResponseComment(commentLine string) error { + matches := emptyResponsePattern.FindStringSubmatch(commentLine) + if len(matches) != 3 { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + description := strings.Trim(matches[2], "\"") + + for _, codeStr := range strings.Split(matches[1], ",") { + if strings.EqualFold(codeStr, defaultTag) { + operation.DefaultResponse().WithDescription(description) + + continue + } + + code, err := strconv.Atoi(codeStr) + if err != nil { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + operation.AddResponse(code, spec.NewResponse().WithDescription(description)) + } + + return nil +} + +// ParseEmptyResponseOnly parse only comment out status code ,eg: @Success 200. +func (operation *Operation) ParseEmptyResponseOnly(commentLine string) error { + for _, codeStr := range strings.Split(commentLine, ",") { + if strings.EqualFold(codeStr, defaultTag) { + _ = operation.DefaultResponse() + + continue + } + + code, err := strconv.Atoi(codeStr) + if err != nil { + return fmt.Errorf("can not parse response comment \"%s\"", commentLine) + } + + operation.AddResponse(code, spec.NewResponse().WithDescription(http.StatusText(code))) + } + + return nil +} + +// DefaultResponse return the default response member pointer. +func (operation *Operation) DefaultResponse() *spec.Response { + if operation.Responses.Default == nil { + operation.Responses.Default = &spec.Response{ + ResponseProps: spec.ResponseProps{ + Description: "", + Headers: make(map[string]spec.Header), + }, + } + } + + return operation.Responses.Default +} + +// AddResponse add a response for a code. +func (operation *Operation) AddResponse(code int, response *spec.Response) { + if response.Headers == nil { + response.Headers = make(map[string]spec.Header) + } + + operation.Responses.StatusCodeResponses[code] = *response +} + +// createParameter returns swagger spec.Parameter for given paramType, description, paramName, schemaType, required. +func createParameter(paramType, description, paramName, objectType, schemaType string, required bool, enums []interface{}, collectionFormat string) spec.Parameter { + // //five possible parameter types. query, path, body, header, form + result := spec.Parameter{ + ParamProps: spec.ParamProps{ + Name: paramName, + Description: description, + Required: required, + In: paramType, + }, + } + + if paramType == "body" { + return result + } + + switch objectType { + case ARRAY: + result.Type = objectType + result.CollectionFormat = collectionFormat + result.Items = &spec.Items{ + CommonValidations: spec.CommonValidations{ + Enum: enums, + }, + SimpleSchema: spec.SimpleSchema{ + Type: schemaType, + }, + } + case PRIMITIVE, OBJECT: + result.Type = schemaType + result.Enum = enums + } + return result +} + +func getCodeExampleForSummary(summaryName string, dirPath string) ([]byte, error) { + dirEntries, err := os.ReadDir(dirPath) + if err != nil { + return nil, err + } + + for _, entry := range dirEntries { + if entry.IsDir() { + continue + } + + fileName := entry.Name() + + if !strings.Contains(fileName, ".json") { + continue + } + + if strings.Contains(fileName, summaryName) { + fullPath := filepath.Join(dirPath, fileName) + + commentInfo, err := os.ReadFile(fullPath) + if err != nil { + return nil, fmt.Errorf("Failed to read code example file %s error: %s ", fullPath, err) + } + + return commentInfo, nil + } + } + + return nil, fmt.Errorf("unable to find code example file for tag %s in the given directory", summaryName) +} diff --git a/vendor/github.com/swaggo/swag/package.go b/vendor/github.com/swaggo/swag/package.go new file mode 100644 index 0000000..6c3129e --- /dev/null +++ b/vendor/github.com/swaggo/swag/package.go @@ -0,0 +1,187 @@ +package swag + +import ( + "go/ast" + "go/token" + "reflect" + "strconv" + "strings" +) + +// PackageDefinitions files and definition in a package. +type PackageDefinitions struct { + // files in this package, map key is file's relative path starting package path + Files map[string]*ast.File + + // definitions in this package, map key is typeName + TypeDefinitions map[string]*TypeSpecDef + + // const variables in this package, map key is the name + ConstTable map[string]*ConstVariable + + // const variables in order in this package + OrderedConst []*ConstVariable + + // package name + Name string + + // package path + Path string +} + +// ConstVariableGlobalEvaluator an interface used to evaluate enums across packages +type ConstVariableGlobalEvaluator interface { + EvaluateConstValue(pkg *PackageDefinitions, cv *ConstVariable, recursiveStack map[string]struct{}) (interface{}, ast.Expr) + EvaluateConstValueByName(file *ast.File, pkgPath, constVariableName string, recursiveStack map[string]struct{}) (interface{}, ast.Expr) + FindTypeSpec(typeName string, file *ast.File) *TypeSpecDef +} + +// NewPackageDefinitions new a PackageDefinitions object +func NewPackageDefinitions(name, pkgPath string) *PackageDefinitions { + return &PackageDefinitions{ + Name: name, + Path: pkgPath, + Files: make(map[string]*ast.File), + TypeDefinitions: make(map[string]*TypeSpecDef), + ConstTable: make(map[string]*ConstVariable), + } +} + +// AddFile add a file +func (pkg *PackageDefinitions) AddFile(pkgPath string, file *ast.File) *PackageDefinitions { + pkg.Files[pkgPath] = file + return pkg +} + +// AddTypeSpec add a type spec. +func (pkg *PackageDefinitions) AddTypeSpec(name string, typeSpec *TypeSpecDef) *PackageDefinitions { + pkg.TypeDefinitions[name] = typeSpec + return pkg +} + +// AddConst add a const variable. +func (pkg *PackageDefinitions) AddConst(astFile *ast.File, valueSpec *ast.ValueSpec) *PackageDefinitions { + for i := 0; i < len(valueSpec.Names) && i < len(valueSpec.Values); i++ { + variable := &ConstVariable{ + Name: valueSpec.Names[i], + Type: valueSpec.Type, + Value: valueSpec.Values[i], + Comment: valueSpec.Comment, + File: astFile, + } + pkg.ConstTable[valueSpec.Names[i].Name] = variable + pkg.OrderedConst = append(pkg.OrderedConst, variable) + } + return pkg +} + +func (pkg *PackageDefinitions) evaluateConstValue(file *ast.File, iota int, expr ast.Expr, globalEvaluator ConstVariableGlobalEvaluator, recursiveStack map[string]struct{}) (interface{}, ast.Expr) { + switch valueExpr := expr.(type) { + case *ast.Ident: + if valueExpr.Name == "iota" { + return iota, nil + } + if pkg.ConstTable != nil { + if cv, ok := pkg.ConstTable[valueExpr.Name]; ok { + return globalEvaluator.EvaluateConstValue(pkg, cv, recursiveStack) + } + } + case *ast.SelectorExpr: + pkgIdent, ok := valueExpr.X.(*ast.Ident) + if !ok { + return nil, nil + } + return globalEvaluator.EvaluateConstValueByName(file, pkgIdent.Name, valueExpr.Sel.Name, recursiveStack) + case *ast.BasicLit: + switch valueExpr.Kind { + case token.INT: + // handle underscored number, such as 1_000_000 + if strings.ContainsRune(valueExpr.Value, '_') { + valueExpr.Value = strings.Replace(valueExpr.Value, "_", "", -1) + } + if len(valueExpr.Value) >= 2 && valueExpr.Value[0] == '0' { + var start, base = 2, 8 + switch valueExpr.Value[1] { + case 'x', 'X': + //hex + base = 16 + case 'b', 'B': + //binary + base = 2 + default: + //octet + start = 1 + } + if x, err := strconv.ParseInt(valueExpr.Value[start:], base, 64); err == nil { + return int(x), nil + } else if x, err := strconv.ParseUint(valueExpr.Value[start:], base, 64); err == nil { + return x, nil + } else { + panic(err) + } + } + + //a basic literal integer is int type in default, or must have an explicit converting type in front + if x, err := strconv.ParseInt(valueExpr.Value, 10, 64); err == nil { + return int(x), nil + } else if x, err := strconv.ParseUint(valueExpr.Value, 10, 64); err == nil { + return x, nil + } else { + panic(err) + } + case token.STRING: + if valueExpr.Value[0] == '`' { + return valueExpr.Value[1 : len(valueExpr.Value)-1], nil + } + return EvaluateEscapedString(valueExpr.Value[1 : len(valueExpr.Value)-1]), nil + case token.CHAR: + return EvaluateEscapedChar(valueExpr.Value[1 : len(valueExpr.Value)-1]), nil + } + case *ast.UnaryExpr: + x, evalType := pkg.evaluateConstValue(file, iota, valueExpr.X, globalEvaluator, recursiveStack) + if x == nil { + return x, evalType + } + return EvaluateUnary(x, valueExpr.Op, evalType) + case *ast.BinaryExpr: + x, evalTypex := pkg.evaluateConstValue(file, iota, valueExpr.X, globalEvaluator, recursiveStack) + y, evalTypey := pkg.evaluateConstValue(file, iota, valueExpr.Y, globalEvaluator, recursiveStack) + if x == nil || y == nil { + return nil, nil + } + return EvaluateBinary(x, y, valueExpr.Op, evalTypex, evalTypey) + case *ast.ParenExpr: + return pkg.evaluateConstValue(file, iota, valueExpr.X, globalEvaluator, recursiveStack) + case *ast.CallExpr: + //data conversion + if len(valueExpr.Args) != 1 { + return nil, nil + } + arg := valueExpr.Args[0] + if ident, ok := valueExpr.Fun.(*ast.Ident); ok { + name := ident.Name + if name == "uintptr" { + name = "uint" + } + value, _ := pkg.evaluateConstValue(file, iota, arg, globalEvaluator, recursiveStack) + if IsGolangPrimitiveType(name) { + value = EvaluateDataConversion(value, name) + return value, nil + } else if name == "len" { + return reflect.ValueOf(value).Len(), nil + } + typeDef := globalEvaluator.FindTypeSpec(name, file) + if typeDef == nil { + return nil, nil + } + return value, valueExpr.Fun + } else if selector, ok := valueExpr.Fun.(*ast.SelectorExpr); ok { + typeDef := globalEvaluator.FindTypeSpec(fullTypeName(selector.X.(*ast.Ident).Name, selector.Sel.Name), file) + if typeDef == nil { + return nil, nil + } + return arg, typeDef.TypeSpec.Type + } + } + return nil, nil +} diff --git a/vendor/github.com/swaggo/swag/packages.go b/vendor/github.com/swaggo/swag/packages.go new file mode 100644 index 0000000..69a1b05 --- /dev/null +++ b/vendor/github.com/swaggo/swag/packages.go @@ -0,0 +1,574 @@ +package swag + +import ( + "fmt" + "go/ast" + goparser "go/parser" + "go/token" + "os" + "path/filepath" + "runtime" + "sort" + "strings" + + "golang.org/x/tools/go/loader" +) + +// PackagesDefinitions map[package import path]*PackageDefinitions. +type PackagesDefinitions struct { + files map[*ast.File]*AstFileInfo + packages map[string]*PackageDefinitions + uniqueDefinitions map[string]*TypeSpecDef + parseDependency ParseFlag + debug Debugger +} + +// NewPackagesDefinitions create object PackagesDefinitions. +func NewPackagesDefinitions() *PackagesDefinitions { + return &PackagesDefinitions{ + files: make(map[*ast.File]*AstFileInfo), + packages: make(map[string]*PackageDefinitions), + uniqueDefinitions: make(map[string]*TypeSpecDef), + } +} + +// ParseFile parse a source file. +func (pkgDefs *PackagesDefinitions) ParseFile(packageDir, path string, src interface{}, flag ParseFlag) error { + // positions are relative to FileSet + fileSet := token.NewFileSet() + astFile, err := goparser.ParseFile(fileSet, path, src, goparser.ParseComments) + if err != nil { + return fmt.Errorf("failed to parse file %s, error:%+v", path, err) + } + return pkgDefs.collectAstFile(fileSet, packageDir, path, astFile, flag) +} + +// collectAstFile collect ast.file. +func (pkgDefs *PackagesDefinitions) collectAstFile(fileSet *token.FileSet, packageDir, path string, astFile *ast.File, flag ParseFlag) error { + if pkgDefs.files == nil { + pkgDefs.files = make(map[*ast.File]*AstFileInfo) + } + + if pkgDefs.packages == nil { + pkgDefs.packages = make(map[string]*PackageDefinitions) + } + + // return without storing the file if we lack a packageDir + if packageDir == "" { + return nil + } + + path, err := filepath.Abs(path) + if err != nil { + return err + } + + dependency, ok := pkgDefs.packages[packageDir] + if ok { + // return without storing the file if it already exists + _, exists := dependency.Files[path] + if exists { + return nil + } + + dependency.Files[path] = astFile + } else { + pkgDefs.packages[packageDir] = NewPackageDefinitions(astFile.Name.Name, packageDir).AddFile(path, astFile) + } + + pkgDefs.files[astFile] = &AstFileInfo{ + FileSet: fileSet, + File: astFile, + Path: path, + PackagePath: packageDir, + ParseFlag: flag, + } + + return nil +} + +// RangeFiles for range the collection of ast.File in alphabetic order. +func (pkgDefs *PackagesDefinitions) RangeFiles(handle func(info *AstFileInfo) error) error { + sortedFiles := make([]*AstFileInfo, 0, len(pkgDefs.files)) + for _, info := range pkgDefs.files { + // ignore package path prefix with 'vendor' or $GOROOT, + // because the router info of api will not be included these files. + if strings.HasPrefix(info.PackagePath, "vendor") || strings.HasPrefix(info.Path, runtime.GOROOT()) { + continue + } + sortedFiles = append(sortedFiles, info) + } + + sort.Slice(sortedFiles, func(i, j int) bool { + return strings.Compare(sortedFiles[i].Path, sortedFiles[j].Path) < 0 + }) + + for _, info := range sortedFiles { + err := handle(info) + if err != nil { + return err + } + } + + return nil +} + +// ParseTypes parse types +// @Return parsed definitions. +func (pkgDefs *PackagesDefinitions) ParseTypes() (map[*TypeSpecDef]*Schema, error) { + parsedSchemas := make(map[*TypeSpecDef]*Schema) + for astFile, info := range pkgDefs.files { + pkgDefs.parseTypesFromFile(astFile, info.PackagePath, parsedSchemas) + pkgDefs.parseFunctionScopedTypesFromFile(astFile, info.PackagePath, parsedSchemas) + } + pkgDefs.removeAllNotUniqueTypes() + pkgDefs.evaluateAllConstVariables() + pkgDefs.collectConstEnums(parsedSchemas) + return parsedSchemas, nil +} + +func (pkgDefs *PackagesDefinitions) parseTypesFromFile(astFile *ast.File, packagePath string, parsedSchemas map[*TypeSpecDef]*Schema) { + for _, astDeclaration := range astFile.Decls { + generalDeclaration, ok := astDeclaration.(*ast.GenDecl) + if !ok { + continue + } + if generalDeclaration.Tok == token.TYPE { + for _, astSpec := range generalDeclaration.Specs { + if typeSpec, ok := astSpec.(*ast.TypeSpec); ok { + typeSpecDef := &TypeSpecDef{ + PkgPath: packagePath, + File: astFile, + TypeSpec: typeSpec, + } + + if idt, ok := typeSpec.Type.(*ast.Ident); ok && IsGolangPrimitiveType(idt.Name) && parsedSchemas != nil { + parsedSchemas[typeSpecDef] = &Schema{ + PkgPath: typeSpecDef.PkgPath, + Name: astFile.Name.Name, + Schema: PrimitiveSchema(TransToValidSchemeType(idt.Name)), + } + } + + if pkgDefs.uniqueDefinitions == nil { + pkgDefs.uniqueDefinitions = make(map[string]*TypeSpecDef) + } + + fullName := typeSpecDef.TypeName() + + anotherTypeDef, ok := pkgDefs.uniqueDefinitions[fullName] + if ok { + if anotherTypeDef == nil { + typeSpecDef.NotUnique = true + fullName = typeSpecDef.TypeName() + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } else if typeSpecDef.PkgPath != anotherTypeDef.PkgPath { + pkgDefs.uniqueDefinitions[fullName] = nil + anotherTypeDef.NotUnique = true + pkgDefs.uniqueDefinitions[anotherTypeDef.TypeName()] = anotherTypeDef + typeSpecDef.NotUnique = true + fullName = typeSpecDef.TypeName() + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } + } else { + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } + + if pkgDefs.packages[typeSpecDef.PkgPath] == nil { + pkgDefs.packages[typeSpecDef.PkgPath] = NewPackageDefinitions(astFile.Name.Name, typeSpecDef.PkgPath).AddTypeSpec(typeSpecDef.Name(), typeSpecDef) + } else if _, ok = pkgDefs.packages[typeSpecDef.PkgPath].TypeDefinitions[typeSpecDef.Name()]; !ok { + pkgDefs.packages[typeSpecDef.PkgPath].AddTypeSpec(typeSpecDef.Name(), typeSpecDef) + } + } + } + } else if generalDeclaration.Tok == token.CONST { + // collect consts + pkgDefs.collectConstVariables(astFile, packagePath, generalDeclaration) + } + } +} + +func (pkgDefs *PackagesDefinitions) parseFunctionScopedTypesFromFile(astFile *ast.File, packagePath string, parsedSchemas map[*TypeSpecDef]*Schema) { + for _, astDeclaration := range astFile.Decls { + funcDeclaration, ok := astDeclaration.(*ast.FuncDecl) + if ok && funcDeclaration.Body != nil { + for _, stmt := range funcDeclaration.Body.List { + if declStmt, ok := (stmt).(*ast.DeclStmt); ok { + if genDecl, ok := (declStmt.Decl).(*ast.GenDecl); ok && genDecl.Tok == token.TYPE { + for _, astSpec := range genDecl.Specs { + if typeSpec, ok := astSpec.(*ast.TypeSpec); ok { + typeSpecDef := &TypeSpecDef{ + PkgPath: packagePath, + File: astFile, + TypeSpec: typeSpec, + ParentSpec: astDeclaration, + } + + if idt, ok := typeSpec.Type.(*ast.Ident); ok && IsGolangPrimitiveType(idt.Name) && parsedSchemas != nil { + parsedSchemas[typeSpecDef] = &Schema{ + PkgPath: typeSpecDef.PkgPath, + Name: astFile.Name.Name, + Schema: PrimitiveSchema(TransToValidSchemeType(idt.Name)), + } + } + + if pkgDefs.uniqueDefinitions == nil { + pkgDefs.uniqueDefinitions = make(map[string]*TypeSpecDef) + } + + fullName := typeSpecDef.TypeName() + + anotherTypeDef, ok := pkgDefs.uniqueDefinitions[fullName] + if ok { + if anotherTypeDef == nil { + typeSpecDef.NotUnique = true + fullName = typeSpecDef.TypeName() + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } else if typeSpecDef.PkgPath != anotherTypeDef.PkgPath { + pkgDefs.uniqueDefinitions[fullName] = nil + anotherTypeDef.NotUnique = true + pkgDefs.uniqueDefinitions[anotherTypeDef.TypeName()] = anotherTypeDef + typeSpecDef.NotUnique = true + fullName = typeSpecDef.TypeName() + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } + } else { + pkgDefs.uniqueDefinitions[fullName] = typeSpecDef + } + + if pkgDefs.packages[typeSpecDef.PkgPath] == nil { + pkgDefs.packages[typeSpecDef.PkgPath] = NewPackageDefinitions(astFile.Name.Name, typeSpecDef.PkgPath).AddTypeSpec(fullName, typeSpecDef) + } else if _, ok = pkgDefs.packages[typeSpecDef.PkgPath].TypeDefinitions[fullName]; !ok { + pkgDefs.packages[typeSpecDef.PkgPath].AddTypeSpec(fullName, typeSpecDef) + } + } + } + + } + } + } + } + } +} + +func (pkgDefs *PackagesDefinitions) collectConstVariables(astFile *ast.File, packagePath string, generalDeclaration *ast.GenDecl) { + pkg, ok := pkgDefs.packages[packagePath] + if !ok { + pkg = NewPackageDefinitions(astFile.Name.Name, packagePath) + pkgDefs.packages[packagePath] = pkg + } + + var lastValueSpec *ast.ValueSpec + for _, astSpec := range generalDeclaration.Specs { + valueSpec, ok := astSpec.(*ast.ValueSpec) + if !ok { + continue + } + if len(valueSpec.Names) == 1 && len(valueSpec.Values) == 1 { + lastValueSpec = valueSpec + } else if len(valueSpec.Names) == 1 && len(valueSpec.Values) == 0 && valueSpec.Type == nil && lastValueSpec != nil { + valueSpec.Type = lastValueSpec.Type + valueSpec.Values = lastValueSpec.Values + } + pkg.AddConst(astFile, valueSpec) + } +} + +func (pkgDefs *PackagesDefinitions) evaluateAllConstVariables() { + for _, pkg := range pkgDefs.packages { + for _, constVar := range pkg.OrderedConst { + pkgDefs.EvaluateConstValue(pkg, constVar, nil) + } + } +} + +// EvaluateConstValue evaluate a const variable. +func (pkgDefs *PackagesDefinitions) EvaluateConstValue(pkg *PackageDefinitions, cv *ConstVariable, recursiveStack map[string]struct{}) (interface{}, ast.Expr) { + if expr, ok := cv.Value.(ast.Expr); ok { + defer func() { + if err := recover(); err != nil { + if fi, ok := pkgDefs.files[cv.File]; ok { + pos := fi.FileSet.Position(cv.Name.NamePos) + pkgDefs.debug.Printf("warning: failed to evaluate const %s at %s:%d:%d, %v", cv.Name.Name, fi.Path, pos.Line, pos.Column, err) + } + } + }() + if recursiveStack == nil { + recursiveStack = make(map[string]struct{}) + } + fullConstName := fullTypeName(pkg.Path, cv.Name.Name) + if _, ok = recursiveStack[fullConstName]; ok { + return nil, nil + } + recursiveStack[fullConstName] = struct{}{} + + value, evalType := pkg.evaluateConstValue(cv.File, cv.Name.Obj.Data.(int), expr, pkgDefs, recursiveStack) + if cv.Type == nil && evalType != nil { + cv.Type = evalType + } + if value != nil { + cv.Value = value + } + return value, cv.Type + } + return cv.Value, cv.Type +} + +// EvaluateConstValueByName evaluate a const variable by name. +func (pkgDefs *PackagesDefinitions) EvaluateConstValueByName(file *ast.File, pkgName, constVariableName string, recursiveStack map[string]struct{}) (interface{}, ast.Expr) { + matchedPkgPaths, externalPkgPaths := pkgDefs.findPackagePathFromImports(pkgName, file) + for _, pkgPath := range matchedPkgPaths { + if pkg, ok := pkgDefs.packages[pkgPath]; ok { + if cv, ok := pkg.ConstTable[constVariableName]; ok { + return pkgDefs.EvaluateConstValue(pkg, cv, recursiveStack) + } + } + } + if pkgDefs.parseDependency > 0 { + for _, pkgPath := range externalPkgPaths { + if err := pkgDefs.loadExternalPackage(pkgPath); err == nil { + if pkg, ok := pkgDefs.packages[pkgPath]; ok { + if cv, ok := pkg.ConstTable[constVariableName]; ok { + return pkgDefs.EvaluateConstValue(pkg, cv, recursiveStack) + } + } + } + } + } + return nil, nil +} + +func (pkgDefs *PackagesDefinitions) collectConstEnums(parsedSchemas map[*TypeSpecDef]*Schema) { + for _, pkg := range pkgDefs.packages { + for _, constVar := range pkg.OrderedConst { + if constVar.Type == nil { + continue + } + ident, ok := constVar.Type.(*ast.Ident) + if !ok || IsGolangPrimitiveType(ident.Name) { + continue + } + typeDef, ok := pkg.TypeDefinitions[ident.Name] + if !ok { + continue + } + + //delete it from parsed schemas, and will parse it again + if _, ok = parsedSchemas[typeDef]; ok { + delete(parsedSchemas, typeDef) + } + + if typeDef.Enums == nil { + typeDef.Enums = make([]EnumValue, 0) + } + + name := constVar.Name.Name + if _, ok = constVar.Value.(ast.Expr); ok { + continue + } + + enumValue := EnumValue{ + key: name, + Value: constVar.Value, + } + if constVar.Comment != nil && len(constVar.Comment.List) > 0 { + enumValue.Comment = constVar.Comment.List[0].Text + enumValue.Comment = strings.TrimPrefix(enumValue.Comment, "//") + enumValue.Comment = strings.TrimPrefix(enumValue.Comment, "/*") + enumValue.Comment = strings.TrimSuffix(enumValue.Comment, "*/") + enumValue.Comment = strings.TrimSpace(enumValue.Comment) + } + typeDef.Enums = append(typeDef.Enums, enumValue) + } + } +} + +func (pkgDefs *PackagesDefinitions) removeAllNotUniqueTypes() { + for key, ud := range pkgDefs.uniqueDefinitions { + if ud == nil { + delete(pkgDefs.uniqueDefinitions, key) + } + } +} + +func (pkgDefs *PackagesDefinitions) findTypeSpec(pkgPath string, typeName string) *TypeSpecDef { + if pkgDefs.packages == nil { + return nil + } + + pd, found := pkgDefs.packages[pkgPath] + if found { + typeSpec, ok := pd.TypeDefinitions[typeName] + if ok { + return typeSpec + } + } + + return nil +} + +func (pkgDefs *PackagesDefinitions) loadExternalPackage(importPath string) error { + cwd, err := os.Getwd() + if err != nil { + return err + } + + conf := loader.Config{ + ParserMode: goparser.ParseComments, + Cwd: cwd, + } + + conf.Import(importPath) + + loaderProgram, err := conf.Load() + if err != nil { + return err + } + + for _, info := range loaderProgram.AllPackages { + pkgPath := strings.TrimPrefix(info.Pkg.Path(), "vendor/") + for _, astFile := range info.Files { + pkgDefs.parseTypesFromFile(astFile, pkgPath, nil) + } + } + + return nil +} + +// findPackagePathFromImports finds out the package path of a package via ranging imports of an ast.File +// @pkg the name of the target package +// @file current ast.File in which to search imports +// @return the package paths of a package of @pkg. +func (pkgDefs *PackagesDefinitions) findPackagePathFromImports(pkg string, file *ast.File) (matchedPkgPaths, externalPkgPaths []string) { + if file == nil { + return + } + + if strings.ContainsRune(pkg, '.') { + pkg = strings.Split(pkg, ".")[0] + } + + matchLastPathPart := func(pkgPath string) bool { + paths := strings.Split(pkgPath, "/") + return paths[len(paths)-1] == pkg + } + + // prior to match named package + for _, imp := range file.Imports { + path := strings.Trim(imp.Path.Value, `"`) + if imp.Name != nil { + if imp.Name.Name == pkg { + // if name match, break loop and return + _, ok := pkgDefs.packages[path] + if ok { + matchedPkgPaths = []string{path} + externalPkgPaths = nil + } else { + externalPkgPaths = []string{path} + matchedPkgPaths = nil + } + break + } else if imp.Name.Name == "_" && len(pkg) > 0 { + //for unused types + pd, ok := pkgDefs.packages[path] + if ok { + if pd.Name == pkg { + matchedPkgPaths = append(matchedPkgPaths, path) + } + } else if matchLastPathPart(path) { + externalPkgPaths = append(externalPkgPaths, path) + } + } else if imp.Name.Name == "." && len(pkg) == 0 { + _, ok := pkgDefs.packages[path] + if ok { + matchedPkgPaths = append(matchedPkgPaths, path) + } else if len(pkg) == 0 || matchLastPathPart(path) { + externalPkgPaths = append(externalPkgPaths, path) + } + } + } else if pkgDefs.packages != nil && len(pkg) > 0 { + pd, ok := pkgDefs.packages[path] + if ok { + if pd.Name == pkg { + matchedPkgPaths = append(matchedPkgPaths, path) + } + } else if matchLastPathPart(path) { + externalPkgPaths = append(externalPkgPaths, path) + } + } + } + + if len(pkg) == 0 || file.Name.Name == pkg { + matchedPkgPaths = append(matchedPkgPaths, pkgDefs.files[file].PackagePath) + } + + return +} + +func (pkgDefs *PackagesDefinitions) findTypeSpecFromPackagePaths(matchedPkgPaths, externalPkgPaths []string, name string) (typeDef *TypeSpecDef) { + if pkgDefs.parseDependency > 0 { + for _, pkgPath := range externalPkgPaths { + if err := pkgDefs.loadExternalPackage(pkgPath); err == nil { + typeDef = pkgDefs.findTypeSpec(pkgPath, name) + if typeDef != nil { + return typeDef + } + } + } + } + + for _, pkgPath := range matchedPkgPaths { + typeDef = pkgDefs.findTypeSpec(pkgPath, name) + if typeDef != nil { + return typeDef + } + } + + return typeDef +} + +// FindTypeSpec finds out TypeSpecDef of a type by typeName +// @typeName the name of the target type, if it starts with a package name, find its own package path from imports on top of @file +// @file the ast.file in which @typeName is used +// @pkgPath the package path of @file. +func (pkgDefs *PackagesDefinitions) FindTypeSpec(typeName string, file *ast.File) *TypeSpecDef { + if IsGolangPrimitiveType(typeName) { + return nil + } + + if file == nil { // for test + return pkgDefs.uniqueDefinitions[typeName] + } + + parts := strings.Split(strings.Split(typeName, "[")[0], ".") + if len(parts) > 1 { + pkgPaths, externalPkgPaths := pkgDefs.findPackagePathFromImports(parts[0], file) + if len(externalPkgPaths) == 0 || pkgDefs.parseDependency == ParseNone { + typeDef, ok := pkgDefs.uniqueDefinitions[typeName] + if ok { + return typeDef + } + } + typeDef := pkgDefs.findTypeSpecFromPackagePaths(pkgPaths, externalPkgPaths, parts[1]) + return pkgDefs.parametrizeGenericType(file, typeDef, typeName) + } + + typeDef, ok := pkgDefs.uniqueDefinitions[fullTypeName(file.Name.Name, typeName)] + if ok { + return typeDef + } + + //in case that comment //@name renamed the type with a name without a dot + typeDef, ok = pkgDefs.uniqueDefinitions[typeName] + if ok { + return typeDef + } + + name := parts[0] + typeDef, ok = pkgDefs.uniqueDefinitions[fullTypeName(file.Name.Name, name)] + if !ok { + pkgPaths, externalPkgPaths := pkgDefs.findPackagePathFromImports("", file) + typeDef = pkgDefs.findTypeSpecFromPackagePaths(pkgPaths, externalPkgPaths, name) + } + return pkgDefs.parametrizeGenericType(file, typeDef, typeName) +} diff --git a/vendor/github.com/swaggo/swag/parser.go b/vendor/github.com/swaggo/swag/parser.go new file mode 100644 index 0000000..604f827 --- /dev/null +++ b/vendor/github.com/swaggo/swag/parser.go @@ -0,0 +1,1835 @@ +package swag + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "go/ast" + "go/build" + goparser "go/parser" + "go/token" + "log" + "net/http" + "os" + "os/exec" + "path/filepath" + "reflect" + "sort" + "strconv" + "strings" + + "github.com/KyleBanks/depth" + "github.com/go-openapi/spec" +) + +const ( + // CamelCase indicates using CamelCase strategy for struct field. + CamelCase = "camelcase" + + // PascalCase indicates using PascalCase strategy for struct field. + PascalCase = "pascalcase" + + // SnakeCase indicates using SnakeCase strategy for struct field. + SnakeCase = "snakecase" + + idAttr = "@id" + acceptAttr = "@accept" + produceAttr = "@produce" + paramAttr = "@param" + successAttr = "@success" + failureAttr = "@failure" + responseAttr = "@response" + headerAttr = "@header" + tagsAttr = "@tags" + routerAttr = "@router" + deprecatedRouterAttr = "@deprecatedrouter" + summaryAttr = "@summary" + deprecatedAttr = "@deprecated" + securityAttr = "@security" + titleAttr = "@title" + conNameAttr = "@contact.name" + conURLAttr = "@contact.url" + conEmailAttr = "@contact.email" + licNameAttr = "@license.name" + licURLAttr = "@license.url" + versionAttr = "@version" + descriptionAttr = "@description" + descriptionMarkdownAttr = "@description.markdown" + secBasicAttr = "@securitydefinitions.basic" + secAPIKeyAttr = "@securitydefinitions.apikey" + secApplicationAttr = "@securitydefinitions.oauth2.application" + secImplicitAttr = "@securitydefinitions.oauth2.implicit" + secPasswordAttr = "@securitydefinitions.oauth2.password" + secAccessCodeAttr = "@securitydefinitions.oauth2.accesscode" + tosAttr = "@termsofservice" + extDocsDescAttr = "@externaldocs.description" + extDocsURLAttr = "@externaldocs.url" + xCodeSamplesAttr = "@x-codesamples" + scopeAttrPrefix = "@scope." + stateAttr = "@state" +) + +// ParseFlag determine what to parse +type ParseFlag int + +const ( + // ParseNone parse nothing + ParseNone ParseFlag = 0x00 + // ParseModels parse models + ParseModels = 0x01 + // ParseOperations parse operations + ParseOperations = 0x02 + // ParseAll parse operations and models + ParseAll = ParseOperations | ParseModels +) + +var ( + // ErrRecursiveParseStruct recursively parsing struct. + ErrRecursiveParseStruct = errors.New("recursively parsing struct") + + // ErrFuncTypeField field type is func. + ErrFuncTypeField = errors.New("field type is func") + + // ErrFailedConvertPrimitiveType Failed to convert for swag to interpretable type. + ErrFailedConvertPrimitiveType = errors.New("swag property: failed convert primitive type") + + // ErrSkippedField .swaggo specifies field should be skipped. + ErrSkippedField = errors.New("field is skipped by global overrides") +) + +var allMethod = map[string]struct{}{ + http.MethodGet: {}, + http.MethodPut: {}, + http.MethodPost: {}, + http.MethodDelete: {}, + http.MethodOptions: {}, + http.MethodHead: {}, + http.MethodPatch: {}, +} + +// Parser implements a parser for Go source files. +type Parser struct { + // swagger represents the root document object for the API specification + swagger *spec.Swagger + + // packages store entities of APIs, definitions, file, package path etc. and their relations + packages *PackagesDefinitions + + // parsedSchemas store schemas which have been parsed from ast.TypeSpec + parsedSchemas map[*TypeSpecDef]*Schema + + // outputSchemas store schemas which will be export to swagger + outputSchemas map[*TypeSpecDef]*Schema + + // PropNamingStrategy naming strategy + PropNamingStrategy string + + // ParseVendor parse vendor folder + ParseVendor bool + + // ParseDependencies whether swag should be parse outside dependency folder: 0 none, 1 models, 2 operations, 3 all + ParseDependency ParseFlag + + // ParseInternal whether swag should parse internal packages + ParseInternal bool + + // Strict whether swag should error or warn when it detects cases which are most likely user errors + Strict bool + + // RequiredByDefault set validation required for all fields by default + RequiredByDefault bool + + // structStack stores full names of the structures that were already parsed or are being parsed now + structStack []*TypeSpecDef + + // markdownFileDir holds the path to the folder, where markdown files are stored + markdownFileDir string + + // codeExampleFilesDir holds path to the folder, where code example files are stored + codeExampleFilesDir string + + // collectionFormatInQuery set the default collectionFormat otherwise then 'csv' for array in query params + collectionFormatInQuery string + + // excludes excludes dirs and files in SearchDir + excludes map[string]struct{} + + // packagePrefix is a list of package path prefixes, packages that do not + // match any one of them will be excluded when searching. + packagePrefix []string + + // tells parser to include only specific extension + parseExtension string + + // debugging output goes here + debug Debugger + + // fieldParserFactory create FieldParser + fieldParserFactory FieldParserFactory + + // Overrides allows global replacements of types. A blank replacement will be skipped. + Overrides map[string]string + + // parseGoList whether swag use go list to parse dependency + parseGoList bool + + // tags to filter the APIs after + tags map[string]struct{} + + // HostState is the state of the host + HostState string +} + +// FieldParserFactory create FieldParser. +type FieldParserFactory func(ps *Parser, field *ast.Field) FieldParser + +// FieldParser parse struct field. +type FieldParser interface { + ShouldSkip() bool + FieldName() (string, error) + FormName() string + HeaderName() string + PathName() string + CustomSchema() (*spec.Schema, error) + ComplementSchema(schema *spec.Schema) error + IsRequired() (bool, error) +} + +// Debugger is the interface that wraps the basic Printf method. +type Debugger interface { + Printf(format string, v ...interface{}) +} + +// New creates a new Parser with default properties. +func New(options ...func(*Parser)) *Parser { + parser := &Parser{ + swagger: &spec.Swagger{ + SwaggerProps: spec.SwaggerProps{ + Info: &spec.Info{ + InfoProps: spec.InfoProps{ + Contact: &spec.ContactInfo{}, + License: nil, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{}, + }, + }, + Paths: &spec.Paths{ + Paths: make(map[string]spec.PathItem), + VendorExtensible: spec.VendorExtensible{ + Extensions: nil, + }, + }, + Definitions: make(map[string]spec.Schema), + SecurityDefinitions: make(map[string]*spec.SecurityScheme), + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: nil, + }, + }, + packages: NewPackagesDefinitions(), + debug: log.New(os.Stdout, "", log.LstdFlags), + parsedSchemas: make(map[*TypeSpecDef]*Schema), + outputSchemas: make(map[*TypeSpecDef]*Schema), + excludes: make(map[string]struct{}), + tags: make(map[string]struct{}), + fieldParserFactory: newTagBaseFieldParser, + Overrides: make(map[string]string), + } + + for _, option := range options { + option(parser) + } + + parser.packages.debug = parser.debug + + return parser +} + +// SetParseDependency sets whether to parse the dependent packages. +func SetParseDependency(parseDependency int) func(*Parser) { + return func(p *Parser) { + p.ParseDependency = ParseFlag(parseDependency) + if p.packages != nil { + p.packages.parseDependency = p.ParseDependency + } + } +} + +// SetMarkdownFileDirectory sets the directory to search for markdown files. +func SetMarkdownFileDirectory(directoryPath string) func(*Parser) { + return func(p *Parser) { + p.markdownFileDir = directoryPath + } +} + +// SetCodeExamplesDirectory sets the directory to search for code example files. +func SetCodeExamplesDirectory(directoryPath string) func(*Parser) { + return func(p *Parser) { + p.codeExampleFilesDir = directoryPath + } +} + +// SetExcludedDirsAndFiles sets directories and files to be excluded when searching. +func SetExcludedDirsAndFiles(excludes string) func(*Parser) { + return func(p *Parser) { + for _, f := range strings.Split(excludes, ",") { + f = strings.TrimSpace(f) + if f != "" { + f = filepath.Clean(f) + p.excludes[f] = struct{}{} + } + } + } +} + +// SetPackagePrefix sets a list of package path prefixes from a comma-separated +// string, packages that do not match any one of them will be excluded when +// searching. +func SetPackagePrefix(packagePrefix string) func(*Parser) { + return func(p *Parser) { + for _, f := range strings.Split(packagePrefix, ",") { + f = strings.TrimSpace(f) + if f != "" { + p.packagePrefix = append(p.packagePrefix, f) + } + } + } +} + +// SetTags sets the tags to be included +func SetTags(include string) func(*Parser) { + return func(p *Parser) { + for _, f := range strings.Split(include, ",") { + f = strings.TrimSpace(f) + if f != "" { + p.tags[f] = struct{}{} + } + } + } +} + +// SetParseExtension parses only those operations which match given extension +func SetParseExtension(parseExtension string) func(*Parser) { + return func(p *Parser) { + p.parseExtension = parseExtension + } +} + +// SetStrict sets whether swag should error or warn when it detects cases which are most likely user errors. +func SetStrict(strict bool) func(*Parser) { + return func(p *Parser) { + p.Strict = strict + } +} + +// SetDebugger allows the use of user-defined implementations. +func SetDebugger(logger Debugger) func(parser *Parser) { + return func(p *Parser) { + if logger != nil { + p.debug = logger + } + } +} + +// SetFieldParserFactory allows the use of user-defined implementations. +func SetFieldParserFactory(factory FieldParserFactory) func(parser *Parser) { + return func(p *Parser) { + p.fieldParserFactory = factory + } +} + +// SetOverrides allows the use of user-defined global type overrides. +func SetOverrides(overrides map[string]string) func(parser *Parser) { + return func(p *Parser) { + for k, v := range overrides { + p.Overrides[k] = v + } + } +} + +// SetCollectionFormat set default collection format +func SetCollectionFormat(collectionFormat string) func(*Parser) { + return func(p *Parser) { + p.collectionFormatInQuery = collectionFormat + } +} + +// ParseUsingGoList sets whether swag use go list to parse dependency +func ParseUsingGoList(enabled bool) func(parser *Parser) { + return func(p *Parser) { + p.parseGoList = enabled + } +} + +// ParseAPI parses general api info for given searchDir and mainAPIFile. +func (parser *Parser) ParseAPI(searchDir string, mainAPIFile string, parseDepth int) error { + return parser.ParseAPIMultiSearchDir([]string{searchDir}, mainAPIFile, parseDepth) +} + +// skipPackageByPrefix returns true the given pkgpath does not match +// any user-defined package path prefixes. +func (parser *Parser) skipPackageByPrefix(pkgpath string) bool { + if len(parser.packagePrefix) == 0 { + return false + } + for _, prefix := range parser.packagePrefix { + if strings.HasPrefix(pkgpath, prefix) { + return false + } + } + return true +} + +// ParseAPIMultiSearchDir is like ParseAPI but for multiple search dirs. +func (parser *Parser) ParseAPIMultiSearchDir(searchDirs []string, mainAPIFile string, parseDepth int) error { + for _, searchDir := range searchDirs { + parser.debug.Printf("Generate general API Info, search dir:%s", searchDir) + + packageDir, err := getPkgName(searchDir) + if err != nil { + parser.debug.Printf("warning: failed to get package name in dir: %s, error: %s", searchDir, err.Error()) + } + + err = parser.getAllGoFileInfo(packageDir, searchDir) + if err != nil { + return err + } + } + + absMainAPIFilePath, err := filepath.Abs(filepath.Join(searchDirs[0], mainAPIFile)) + if err != nil { + return err + } + + // Use 'go list' command instead of depth.Resolve() + if parser.ParseDependency > 0 { + if parser.parseGoList { + pkgs, err := listPackages(context.Background(), filepath.Dir(absMainAPIFilePath), nil, "-deps") + if err != nil { + return fmt.Errorf("pkg %s cannot find all dependencies, %s", filepath.Dir(absMainAPIFilePath), err) + } + + length := len(pkgs) + for i := 0; i < length; i++ { + err := parser.getAllGoFileInfoFromDepsByList(pkgs[i], parser.ParseDependency) + if err != nil { + return err + } + } + } else { + var t depth.Tree + t.ResolveInternal = true + t.MaxDepth = parseDepth + + pkgName, err := getPkgName(filepath.Dir(absMainAPIFilePath)) + if err != nil { + return err + } + + err = t.Resolve(pkgName) + if err != nil { + return fmt.Errorf("pkg %s cannot find all dependencies, %s", pkgName, err) + } + for i := 0; i < len(t.Root.Deps); i++ { + err := parser.getAllGoFileInfoFromDeps(&t.Root.Deps[i], parser.ParseDependency) + if err != nil { + return err + } + } + } + } + + err = parser.ParseGeneralAPIInfo(absMainAPIFilePath) + if err != nil { + return err + } + + parser.parsedSchemas, err = parser.packages.ParseTypes() + if err != nil { + return err + } + + err = parser.packages.RangeFiles(parser.ParseRouterAPIInfo) + if err != nil { + return err + } + + return parser.checkOperationIDUniqueness() +} + +func getPkgName(searchDir string) (string, error) { + cmd := exec.Command("go", "list", "-f={{.ImportPath}}") + cmd.Dir = searchDir + + var stdout, stderr strings.Builder + + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("execute go list command, %s, stdout:%s, stderr:%s", err, stdout.String(), stderr.String()) + } + + outStr, _ := stdout.String(), stderr.String() + + if outStr[0] == '_' { // will shown like _/{GOPATH}/src/{YOUR_PACKAGE} when NOT enable GO MODULE. + outStr = strings.TrimPrefix(outStr, "_"+build.Default.GOPATH+"/src/") + } + + f := strings.Split(outStr, "\n") + + outStr = f[0] + + return outStr, nil +} + +// ParseGeneralAPIInfo parses general api info for given mainAPIFile path. +func (parser *Parser) ParseGeneralAPIInfo(mainAPIFile string) error { + fileTree, err := goparser.ParseFile(token.NewFileSet(), mainAPIFile, nil, goparser.ParseComments) + if err != nil { + return fmt.Errorf("cannot parse source files %s: %s", mainAPIFile, err) + } + + parser.swagger.Swagger = "2.0" + + for _, comment := range fileTree.Comments { + comments := strings.Split(comment.Text(), "\n") + if !isGeneralAPIComment(comments) { + continue + } + + err = parseGeneralAPIInfo(parser, comments) + if err != nil { + return err + } + } + + return nil +} + +func parseGeneralAPIInfo(parser *Parser, comments []string) error { + previousAttribute := "" + + // parsing classic meta data model + for line := 0; line < len(comments); line++ { + commentLine := comments[line] + commentLine = strings.TrimSpace(commentLine) + if len(commentLine) == 0 { + continue + } + fields := FieldsByAnySpace(commentLine, 2) + + attribute := fields[0] + var value string + if len(fields) > 1 { + value = fields[1] + } + + switch attr := strings.ToLower(attribute); attr { + case versionAttr, titleAttr, tosAttr, licNameAttr, licURLAttr, conNameAttr, conURLAttr, conEmailAttr: + setSwaggerInfo(parser.swagger, attr, value) + case descriptionAttr: + if previousAttribute == attribute { + parser.swagger.Info.Description += "\n" + value + + continue + } + + setSwaggerInfo(parser.swagger, attr, value) + case descriptionMarkdownAttr: + commentInfo, err := getMarkdownForTag("api", parser.markdownFileDir) + if err != nil { + return err + } + + setSwaggerInfo(parser.swagger, descriptionAttr, string(commentInfo)) + + case "@host": + parser.swagger.Host = value + case "@hoststate": + fields = FieldsByAnySpace(commentLine, 3) + if len(fields) != 3 { + return fmt.Errorf("%s needs 3 arguments", attribute) + } + if parser.HostState == fields[1] { + parser.swagger.Host = fields[2] + } + case "@basepath": + parser.swagger.BasePath = value + + case acceptAttr: + err := parser.ParseAcceptComment(value) + if err != nil { + return err + } + case produceAttr: + err := parser.ParseProduceComment(value) + if err != nil { + return err + } + case "@schemes": + parser.swagger.Schemes = strings.Split(value, " ") + case "@tag.name": + parser.swagger.Tags = append(parser.swagger.Tags, spec.Tag{ + TagProps: spec.TagProps{ + Name: value, + }, + }) + case "@tag.description": + tag := parser.swagger.Tags[len(parser.swagger.Tags)-1] + tag.TagProps.Description = value + replaceLastTag(parser.swagger.Tags, tag) + case "@tag.description.markdown": + tag := parser.swagger.Tags[len(parser.swagger.Tags)-1] + + commentInfo, err := getMarkdownForTag(tag.TagProps.Name, parser.markdownFileDir) + if err != nil { + return err + } + + tag.TagProps.Description = string(commentInfo) + replaceLastTag(parser.swagger.Tags, tag) + case "@tag.docs.url": + tag := parser.swagger.Tags[len(parser.swagger.Tags)-1] + tag.TagProps.ExternalDocs = &spec.ExternalDocumentation{ + URL: value, + Description: "", + } + + replaceLastTag(parser.swagger.Tags, tag) + case "@tag.docs.description": + tag := parser.swagger.Tags[len(parser.swagger.Tags)-1] + if tag.TagProps.ExternalDocs == nil { + return fmt.Errorf("%s needs to come after a @tags.docs.url", attribute) + } + + tag.TagProps.ExternalDocs.Description = value + replaceLastTag(parser.swagger.Tags, tag) + + case secBasicAttr, secAPIKeyAttr, secApplicationAttr, secImplicitAttr, secPasswordAttr, secAccessCodeAttr: + scheme, err := parseSecAttributes(attribute, comments, &line) + if err != nil { + return err + } + + parser.swagger.SecurityDefinitions[value] = scheme + + case securityAttr: + parser.swagger.Security = append(parser.swagger.Security, parseSecurity(value)) + + case "@query.collection.format": + parser.collectionFormatInQuery = TransToValidCollectionFormat(value) + + case extDocsDescAttr, extDocsURLAttr: + if parser.swagger.ExternalDocs == nil { + parser.swagger.ExternalDocs = new(spec.ExternalDocumentation) + } + switch attr { + case extDocsDescAttr: + parser.swagger.ExternalDocs.Description = value + case extDocsURLAttr: + parser.swagger.ExternalDocs.URL = value + } + + default: + if strings.HasPrefix(attribute, "@x-") { + extensionName := attribute[1:] + + extExistsInSecurityDef := false + // for each security definition + for _, v := range parser.swagger.SecurityDefinitions { + // check if extension exists + _, extExistsInSecurityDef = v.VendorExtensible.Extensions.GetString(extensionName) + // if it exists in at least one, then we stop iterating + if extExistsInSecurityDef { + break + } + } + + // if it is present on security def, don't add it again + if extExistsInSecurityDef { + break + } + + if len(value) == 0 { + return fmt.Errorf("annotation %s need a value", attribute) + } + + var valueJSON interface{} + err := json.Unmarshal([]byte(value), &valueJSON) + if err != nil { + return fmt.Errorf("annotation %s need a valid json value", attribute) + } + + if strings.Contains(extensionName, "logo") { + parser.swagger.Info.Extensions.Add(extensionName, valueJSON) + } else { + if parser.swagger.Extensions == nil { + parser.swagger.Extensions = make(map[string]interface{}) + } + + parser.swagger.Extensions[attribute[1:]] = valueJSON + } + } + } + + previousAttribute = attribute + } + + return nil +} + +func setSwaggerInfo(swagger *spec.Swagger, attribute, value string) { + switch attribute { + case versionAttr: + swagger.Info.Version = value + case titleAttr: + swagger.Info.Title = value + case tosAttr: + swagger.Info.TermsOfService = value + case descriptionAttr: + swagger.Info.Description = value + case conNameAttr: + swagger.Info.Contact.Name = value + case conEmailAttr: + swagger.Info.Contact.Email = value + case conURLAttr: + swagger.Info.Contact.URL = value + case licNameAttr: + swagger.Info.License = initIfEmpty(swagger.Info.License) + swagger.Info.License.Name = value + case licURLAttr: + swagger.Info.License = initIfEmpty(swagger.Info.License) + swagger.Info.License.URL = value + } +} + +func parseSecAttributes(context string, lines []string, index *int) (*spec.SecurityScheme, error) { + const ( + in = "@in" + name = "@name" + descriptionAttr = "@description" + tokenURL = "@tokenurl" + authorizationURL = "@authorizationurl" + ) + + var search []string + + attribute := strings.ToLower(FieldsByAnySpace(lines[*index], 2)[0]) + switch attribute { + case secBasicAttr: + return spec.BasicAuth(), nil + case secAPIKeyAttr: + search = []string{in, name} + case secApplicationAttr, secPasswordAttr: + search = []string{tokenURL} + case secImplicitAttr: + search = []string{authorizationURL} + case secAccessCodeAttr: + search = []string{tokenURL, authorizationURL} + } + + // For the first line we get the attributes in the context parameter, so we skip to the next one + *index++ + + attrMap, scopes := make(map[string]string), make(map[string]string) + extensions, description := make(map[string]interface{}), "" + +loopline: + for ; *index < len(lines); *index++ { + v := strings.TrimSpace(lines[*index]) + if len(v) == 0 { + continue + } + + fields := FieldsByAnySpace(v, 2) + securityAttr := strings.ToLower(fields[0]) + var value string + if len(fields) > 1 { + value = fields[1] + } + + for _, findterm := range search { + if securityAttr == findterm { + attrMap[securityAttr] = value + continue loopline + } + } + + if isExists, err := isExistsScope(securityAttr); err != nil { + return nil, err + } else if isExists { + scopes[securityAttr[len(scopeAttrPrefix):]] = value + continue + } + + if strings.HasPrefix(securityAttr, "@x-") { + // Add the custom attribute without the @ + extensions[securityAttr[1:]] = value + continue + } + + // Not mandatory field + if securityAttr == descriptionAttr { + description = value + } + + // next securityDefinitions + if strings.Index(securityAttr, "@securitydefinitions.") == 0 { + // Go back to the previous line and break + *index-- + + break + } + } + + if len(attrMap) != len(search) { + return nil, fmt.Errorf("%s is %v required", context, search) + } + + var scheme *spec.SecurityScheme + + switch attribute { + case secAPIKeyAttr: + scheme = spec.APIKeyAuth(attrMap[name], attrMap[in]) + case secApplicationAttr: + scheme = spec.OAuth2Application(attrMap[tokenURL]) + case secImplicitAttr: + scheme = spec.OAuth2Implicit(attrMap[authorizationURL]) + case secPasswordAttr: + scheme = spec.OAuth2Password(attrMap[tokenURL]) + case secAccessCodeAttr: + scheme = spec.OAuth2AccessToken(attrMap[authorizationURL], attrMap[tokenURL]) + } + + scheme.Description = description + + for extKey, extValue := range extensions { + scheme.AddExtension(extKey, extValue) + } + + for scope, scopeDescription := range scopes { + scheme.AddScope(scope, scopeDescription) + } + + return scheme, nil +} + +func parseSecurity(commentLine string) map[string][]string { + securityMap := make(map[string][]string) + + for _, securityOption := range strings.Split(commentLine, "||") { + securityOption = strings.TrimSpace(securityOption) + + left, right := strings.Index(securityOption, "["), strings.Index(securityOption, "]") + + if !(left == -1 && right == -1) { + scopes := securityOption[left+1 : right] + + var options []string + + for _, scope := range strings.Split(scopes, ",") { + options = append(options, strings.TrimSpace(scope)) + } + + securityKey := securityOption[0:left] + securityMap[securityKey] = append(securityMap[securityKey], options...) + } else { + securityKey := strings.TrimSpace(securityOption) + securityMap[securityKey] = []string{} + } + } + + return securityMap +} + +func initIfEmpty(license *spec.License) *spec.License { + if license == nil { + return new(spec.License) + } + + return license +} + +// ParseAcceptComment parses comment for given `accept` comment string. +func (parser *Parser) ParseAcceptComment(commentLine string) error { + return parseMimeTypeList(commentLine, &parser.swagger.Consumes, "%v accept type can't be accepted") +} + +// ParseProduceComment parses comment for given `produce` comment string. +func (parser *Parser) ParseProduceComment(commentLine string) error { + return parseMimeTypeList(commentLine, &parser.swagger.Produces, "%v produce type can't be accepted") +} + +func isGeneralAPIComment(comments []string) bool { + for _, commentLine := range comments { + commentLine = strings.TrimSpace(commentLine) + if len(commentLine) == 0 { + continue + } + attribute := strings.ToLower(FieldsByAnySpace(commentLine, 2)[0]) + switch attribute { + // The @summary, @router, @success, @failure annotation belongs to Operation + case summaryAttr, routerAttr, successAttr, failureAttr, responseAttr: + return false + } + } + + return true +} + +func getMarkdownForTag(tagName string, dirPath string) ([]byte, error) { + dirEntries, err := os.ReadDir(dirPath) + if err != nil { + return nil, err + } + + for _, entry := range dirEntries { + if entry.IsDir() { + continue + } + + fileName := entry.Name() + + if !strings.Contains(fileName, ".md") { + continue + } + + if strings.Contains(fileName, tagName) { + fullPath := filepath.Join(dirPath, fileName) + + commentInfo, err := os.ReadFile(fullPath) + if err != nil { + return nil, fmt.Errorf("Failed to read markdown file %s error: %s ", fullPath, err) + } + + return commentInfo, nil + } + } + + return nil, fmt.Errorf("Unable to find markdown file for tag %s in the given directory", tagName) +} + +func isExistsScope(scope string) (bool, error) { + s := strings.Fields(scope) + for _, v := range s { + if strings.HasPrefix(v, scopeAttrPrefix) { + if strings.Contains(v, ",") { + return false, fmt.Errorf("@scope can't use comma(,) get=" + v) + } + } + } + + return strings.HasPrefix(scope, scopeAttrPrefix), nil +} + +func getTagsFromComment(comment string) (tags []string) { + commentLine := strings.TrimSpace(strings.TrimLeft(comment, "/")) + if len(commentLine) == 0 { + return nil + } + + attribute := strings.Fields(commentLine)[0] + lineRemainder, lowerAttribute := strings.TrimSpace(commentLine[len(attribute):]), strings.ToLower(attribute) + + if lowerAttribute == tagsAttr { + for _, tag := range strings.Split(lineRemainder, ",") { + tags = append(tags, strings.TrimSpace(tag)) + } + } + return + +} + +func (parser *Parser) matchTags(comments []*ast.Comment) (match bool) { + if len(parser.tags) == 0 { + return true + } + + match = false + for _, comment := range comments { + for _, tag := range getTagsFromComment(comment.Text) { + if _, has := parser.tags["!"+tag]; has { + return false + } + if _, has := parser.tags[tag]; has { + match = true // keep iterating as it may contain a tag that is excluded + } + } + } + + if !match { + // If all tags are negation then we should return true + for key := range parser.tags { + if key[0] != '!' { + return false + } + } + } + return true +} + +func matchExtension(extensionToMatch string, comments []*ast.Comment) (match bool) { + if len(extensionToMatch) != 0 { + for _, comment := range comments { + commentLine := strings.TrimSpace(strings.TrimLeft(comment.Text, "/")) + fields := FieldsByAnySpace(commentLine, 2) + if len(fields) > 0 { + lowerAttribute := strings.ToLower(fields[0]) + + if lowerAttribute == fmt.Sprintf("@x-%s", strings.ToLower(extensionToMatch)) { + return true + } + } + } + return false + } + return true +} + +// ParseRouterAPIInfo parses router api info for given astFile. +func (parser *Parser) ParseRouterAPIInfo(fileInfo *AstFileInfo) error { +DeclsLoop: + for _, astDescription := range fileInfo.File.Decls { + if (fileInfo.ParseFlag & ParseOperations) == ParseNone { + continue + } + astDeclaration, ok := astDescription.(*ast.FuncDecl) + if ok && astDeclaration.Doc != nil && astDeclaration.Doc.List != nil { + if parser.matchTags(astDeclaration.Doc.List) && + matchExtension(parser.parseExtension, astDeclaration.Doc.List) { + // for per 'function' comment, create a new 'Operation' object + operation := NewOperation(parser, SetCodeExampleFilesDirectory(parser.codeExampleFilesDir)) + for _, comment := range astDeclaration.Doc.List { + err := operation.ParseComment(comment.Text, fileInfo.File) + if err != nil { + return fmt.Errorf("ParseComment error in file %s :%+v", fileInfo.Path, err) + } + if operation.State != "" && operation.State != parser.HostState { + continue DeclsLoop + } + } + err := processRouterOperation(parser, operation) + if err != nil { + return err + } + } + } + } + + return nil +} + +func refRouteMethodOp(item *spec.PathItem, method string) (op **spec.Operation) { + switch method { + case http.MethodGet: + op = &item.Get + case http.MethodPost: + op = &item.Post + case http.MethodDelete: + op = &item.Delete + case http.MethodPut: + op = &item.Put + case http.MethodPatch: + op = &item.Patch + case http.MethodHead: + op = &item.Head + case http.MethodOptions: + op = &item.Options + } + + return +} + +func processRouterOperation(parser *Parser, operation *Operation) error { + for _, routeProperties := range operation.RouterProperties { + var ( + pathItem spec.PathItem + ok bool + ) + + pathItem, ok = parser.swagger.Paths.Paths[routeProperties.Path] + if !ok { + pathItem = spec.PathItem{} + } + + op := refRouteMethodOp(&pathItem, routeProperties.HTTPMethod) + + // check if we already have an operation for this path and method + if *op != nil { + err := fmt.Errorf("route %s %s is declared multiple times", routeProperties.HTTPMethod, routeProperties.Path) + if parser.Strict { + return err + } + + parser.debug.Printf("warning: %s\n", err) + } + + if len(operation.RouterProperties) > 1 { + newOp := *operation + var validParams []spec.Parameter + for _, param := range newOp.Operation.OperationProps.Parameters { + if param.In == "path" && !strings.Contains(routeProperties.Path, param.Name) { + // This path param is not actually contained in the path, skip adding it to the final params + continue + } + validParams = append(validParams, param) + } + newOp.Operation.OperationProps.Parameters = validParams + *op = &newOp.Operation + } else { + *op = &operation.Operation + } + + if routeProperties.Deprecated { + (*op).Deprecated = routeProperties.Deprecated + } + + parser.swagger.Paths.Paths[routeProperties.Path] = pathItem + } + + return nil +} + +func convertFromSpecificToPrimitive(typeName string) (string, error) { + name := typeName + if strings.ContainsRune(name, '.') { + name = strings.Split(name, ".")[1] + } + + switch strings.ToUpper(name) { + case "TIME", "OBJECTID", "UUID": + return STRING, nil + case "DECIMAL": + return NUMBER, nil + } + + return typeName, ErrFailedConvertPrimitiveType +} + +func (parser *Parser) getTypeSchema(typeName string, file *ast.File, ref bool) (*spec.Schema, error) { + if override, ok := parser.Overrides[typeName]; ok { + parser.debug.Printf("Override detected for %s: using %s instead", typeName, override) + return parseObjectSchema(parser, override, file) + } + + if IsInterfaceLike(typeName) { + return &spec.Schema{}, nil + } + if IsGolangPrimitiveType(typeName) { + return PrimitiveSchema(TransToValidSchemeType(typeName)), nil + } + + schemaType, err := convertFromSpecificToPrimitive(typeName) + if err == nil { + return PrimitiveSchema(schemaType), nil + } + + typeSpecDef := parser.packages.FindTypeSpec(typeName, file) + if typeSpecDef == nil { + return nil, fmt.Errorf("cannot find type definition: %s", typeName) + } + + if override, ok := parser.Overrides[typeSpecDef.FullPath()]; ok { + if override == "" { + parser.debug.Printf("Override detected for %s: ignoring", typeSpecDef.FullPath()) + + return nil, ErrSkippedField + } + + parser.debug.Printf("Override detected for %s: using %s instead", typeSpecDef.FullPath(), override) + + separator := strings.LastIndex(override, ".") + if separator == -1 { + // treat as a swaggertype tag + parts := strings.Split(override, ",") + + return BuildCustomSchema(parts) + } + + typeSpecDef = parser.packages.findTypeSpec(override[0:separator], override[separator+1:]) + } + + schema, ok := parser.parsedSchemas[typeSpecDef] + if !ok { + var err error + + schema, err = parser.ParseDefinition(typeSpecDef) + if err != nil { + if err == ErrRecursiveParseStruct && ref { + return parser.getRefTypeSchema(typeSpecDef, schema), nil + } + return nil, fmt.Errorf("%s: %w", typeName, err) + } + } + + if ref { + if IsComplexSchema(schema.Schema) { + return parser.getRefTypeSchema(typeSpecDef, schema), nil + } + // if it is a simple schema, just return a copy + newSchema := *schema.Schema + return &newSchema, nil + } + + return schema.Schema, nil +} + +func (parser *Parser) getRefTypeSchema(typeSpecDef *TypeSpecDef, schema *Schema) *spec.Schema { + _, ok := parser.outputSchemas[typeSpecDef] + if !ok { + parser.swagger.Definitions[schema.Name] = spec.Schema{} + + if schema.Schema != nil { + parser.swagger.Definitions[schema.Name] = *schema.Schema + } + + parser.outputSchemas[typeSpecDef] = schema + } + + refSchema := RefSchema(schema.Name) + + return refSchema +} + +func (parser *Parser) isInStructStack(typeSpecDef *TypeSpecDef) bool { + for _, specDef := range parser.structStack { + if typeSpecDef == specDef { + return true + } + } + + return false +} + +// ParseDefinition parses given type spec that corresponds to the type under +// given name and package, and populates swagger schema definitions registry +// with a schema for the given type +func (parser *Parser) ParseDefinition(typeSpecDef *TypeSpecDef) (*Schema, error) { + typeName := typeSpecDef.TypeName() + schema, found := parser.parsedSchemas[typeSpecDef] + if found { + parser.debug.Printf("Skipping '%s', already parsed.", typeName) + + return schema, nil + } + + if parser.isInStructStack(typeSpecDef) { + parser.debug.Printf("Skipping '%s', recursion detected.", typeName) + + return &Schema{ + Name: typeName, + PkgPath: typeSpecDef.PkgPath, + Schema: PrimitiveSchema(OBJECT), + }, + ErrRecursiveParseStruct + } + + parser.structStack = append(parser.structStack, typeSpecDef) + + parser.debug.Printf("Generating %s", typeName) + + definition, err := parser.parseTypeExpr(typeSpecDef.File, typeSpecDef.TypeSpec.Type, false) + if err != nil { + parser.debug.Printf("Error parsing type definition '%s': %s", typeName, err) + return nil, err + } + + if definition.Description == "" { + fillDefinitionDescription(definition, typeSpecDef.File, typeSpecDef) + } + + if len(typeSpecDef.Enums) > 0 { + var varnames []string + var enumComments = make(map[string]string) + for _, value := range typeSpecDef.Enums { + definition.Enum = append(definition.Enum, value.Value) + varnames = append(varnames, value.key) + if len(value.Comment) > 0 { + enumComments[value.key] = value.Comment + } + } + if definition.Extensions == nil { + definition.Extensions = make(spec.Extensions) + } + definition.Extensions[enumVarNamesExtension] = varnames + if len(enumComments) > 0 { + definition.Extensions[enumCommentsExtension] = enumComments + } + } + + sch := Schema{ + Name: typeName, + PkgPath: typeSpecDef.PkgPath, + Schema: definition, + } + parser.parsedSchemas[typeSpecDef] = &sch + + // update an empty schema as a result of recursion + s2, found := parser.outputSchemas[typeSpecDef] + if found { + parser.swagger.Definitions[s2.Name] = *definition + } + + return &sch, nil +} + +func fullTypeName(parts ...string) string { + return strings.Join(parts, ".") +} + +// fillDefinitionDescription additionally fills fields in definition (spec.Schema) +// TODO: If .go file contains many types, it may work for a long time +func fillDefinitionDescription(definition *spec.Schema, file *ast.File, typeSpecDef *TypeSpecDef) { + if file == nil { + return + } + for _, astDeclaration := range file.Decls { + generalDeclaration, ok := astDeclaration.(*ast.GenDecl) + if !ok || generalDeclaration.Tok != token.TYPE { + continue + } + + for _, astSpec := range generalDeclaration.Specs { + typeSpec, ok := astSpec.(*ast.TypeSpec) + if !ok || typeSpec != typeSpecDef.TypeSpec { + continue + } + + definition.Description = + extractDeclarationDescription(typeSpec.Doc, typeSpec.Comment, generalDeclaration.Doc) + } + } +} + +// extractDeclarationDescription gets first description +// from attribute descriptionAttr in commentGroups (ast.CommentGroup) +func extractDeclarationDescription(commentGroups ...*ast.CommentGroup) string { + var description string + + for _, commentGroup := range commentGroups { + if commentGroup == nil { + continue + } + + isHandlingDescription := false + + for _, comment := range commentGroup.List { + commentText := strings.TrimSpace(strings.TrimLeft(comment.Text, "/")) + if len(commentText) == 0 { + continue + } + attribute := FieldsByAnySpace(commentText, 2)[0] + + if strings.ToLower(attribute) != descriptionAttr { + if !isHandlingDescription { + continue + } + + break + } + + isHandlingDescription = true + description += " " + strings.TrimSpace(commentText[len(attribute):]) + } + } + + return strings.TrimLeft(description, " ") +} + +// parseTypeExpr parses given type expression that corresponds to the type under +// given name and package, and returns swagger schema for it. +func (parser *Parser) parseTypeExpr(file *ast.File, typeExpr ast.Expr, ref bool) (*spec.Schema, error) { + switch expr := typeExpr.(type) { + // type Foo interface{} + case *ast.InterfaceType: + return &spec.Schema{}, nil + + // type Foo struct {...} + case *ast.StructType: + return parser.parseStruct(file, expr.Fields) + + // type Foo Baz + case *ast.Ident: + return parser.getTypeSchema(expr.Name, file, ref) + + // type Foo *Baz + case *ast.StarExpr: + return parser.parseTypeExpr(file, expr.X, ref) + + // type Foo pkg.Bar + case *ast.SelectorExpr: + if xIdent, ok := expr.X.(*ast.Ident); ok { + return parser.getTypeSchema(fullTypeName(xIdent.Name, expr.Sel.Name), file, ref) + } + // type Foo []Baz + case *ast.ArrayType: + itemSchema, err := parser.parseTypeExpr(file, expr.Elt, true) + if err != nil { + return nil, err + } + + return spec.ArrayProperty(itemSchema), nil + // type Foo map[string]Bar + case *ast.MapType: + if _, ok := expr.Value.(*ast.InterfaceType); ok { + return spec.MapProperty(nil), nil + } + schema, err := parser.parseTypeExpr(file, expr.Value, true) + if err != nil { + return nil, err + } + + return spec.MapProperty(schema), nil + + case *ast.FuncType: + return nil, ErrFuncTypeField + // ... + } + + return parser.parseGenericTypeExpr(file, typeExpr) +} + +func (parser *Parser) parseStruct(file *ast.File, fields *ast.FieldList) (*spec.Schema, error) { + required, properties := make([]string, 0), make(map[string]spec.Schema) + + for _, field := range fields.List { + fieldProps, requiredFromAnon, err := parser.parseStructField(file, field) + if err != nil { + if errors.Is(err, ErrFuncTypeField) || errors.Is(err, ErrSkippedField) { + continue + } + + return nil, err + } + + if len(fieldProps) == 0 { + continue + } + + required = append(required, requiredFromAnon...) + + for k, v := range fieldProps { + properties[k] = v + } + } + + sort.Strings(required) + + return &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{OBJECT}, + Properties: properties, + Required: required, + }, + }, nil +} + +func (parser *Parser) parseStructField(file *ast.File, field *ast.Field) (map[string]spec.Schema, []string, error) { + if field.Tag != nil { + skip, ok := reflect.StructTag(strings.ReplaceAll(field.Tag.Value, "`", "")).Lookup("swaggerignore") + if ok && strings.EqualFold(skip, "true") { + return nil, nil, nil + } + } + + ps := parser.fieldParserFactory(parser, field) + + if ps.ShouldSkip() { + return nil, nil, nil + } + + fieldName, err := ps.FieldName() + if err != nil { + return nil, nil, err + } + + if fieldName == "" { + typeName, err := getFieldType(file, field.Type, nil) + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + + schema, err := parser.getTypeSchema(typeName, file, false) + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + + if len(schema.Type) > 0 && schema.Type[0] == OBJECT { + if len(schema.Properties) == 0 { + return nil, nil, nil + } + + properties := map[string]spec.Schema{} + for k, v := range schema.Properties { + properties[k] = v + } + + return properties, schema.SchemaProps.Required, nil + } + // for alias type of non-struct types ,such as array,map, etc. ignore field tag. + return map[string]spec.Schema{typeName: *schema}, nil, nil + + } + + schema, err := ps.CustomSchema() + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + + if schema == nil { + typeName, err := getFieldType(file, field.Type, nil) + if err == nil { + // named type + schema, err = parser.getTypeSchema(typeName, file, true) + } else { + // unnamed type + schema, err = parser.parseTypeExpr(file, field.Type, false) + } + + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + } + + err = ps.ComplementSchema(schema) + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + + var tagRequired []string + + required, err := ps.IsRequired() + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", fieldName, err) + } + + if required { + tagRequired = append(tagRequired, fieldName) + } + + if schema.Extensions == nil { + schema.Extensions = make(spec.Extensions) + } + if formName := ps.FormName(); len(formName) > 0 { + schema.Extensions["formData"] = formName + } + if headerName := ps.HeaderName(); len(headerName) > 0 { + schema.Extensions["header"] = headerName + } + if pathName := ps.PathName(); len(pathName) > 0 { + schema.Extensions["path"] = pathName + } + + return map[string]spec.Schema{fieldName: *schema}, tagRequired, nil +} + +func getFieldType(file *ast.File, field ast.Expr, genericParamTypeDefs map[string]*genericTypeSpec) (string, error) { + switch fieldType := field.(type) { + case *ast.Ident: + return fieldType.Name, nil + case *ast.SelectorExpr: + packageName, err := getFieldType(file, fieldType.X, genericParamTypeDefs) + if err != nil { + return "", err + } + + return fullTypeName(packageName, fieldType.Sel.Name), nil + case *ast.StarExpr: + fullName, err := getFieldType(file, fieldType.X, genericParamTypeDefs) + if err != nil { + return "", err + } + + return fullName, nil + default: + return getGenericFieldType(file, field, genericParamTypeDefs) + } +} + +func (parser *Parser) getUnderlyingSchema(schema *spec.Schema) *spec.Schema { + if schema == nil { + return nil + } + + if url := schema.Ref.GetURL(); url != nil { + if pos := strings.LastIndexByte(url.Fragment, '/'); pos >= 0 { + name := url.Fragment[pos+1:] + if schema, ok := parser.swagger.Definitions[name]; ok { + return &schema + } + } + } + + if len(schema.AllOf) > 0 { + merged := &spec.Schema{} + MergeSchema(merged, schema) + for _, s := range schema.AllOf { + MergeSchema(merged, parser.getUnderlyingSchema(&s)) + } + return merged + } + return nil +} + +// GetSchemaTypePath get path of schema type. +func (parser *Parser) GetSchemaTypePath(schema *spec.Schema, depth int) []string { + if schema == nil || depth == 0 { + return nil + } + + if underlying := parser.getUnderlyingSchema(schema); underlying != nil { + return parser.GetSchemaTypePath(underlying, depth) + } + + if len(schema.Type) > 0 { + switch schema.Type[0] { + case ARRAY: + depth-- + + s := []string{schema.Type[0]} + + return append(s, parser.GetSchemaTypePath(schema.Items.Schema, depth)...) + case OBJECT: + if schema.AdditionalProperties != nil && schema.AdditionalProperties.Schema != nil { + // for map + depth-- + + s := []string{schema.Type[0]} + + return append(s, parser.GetSchemaTypePath(schema.AdditionalProperties.Schema, depth)...) + } + } + + return []string{schema.Type[0]} + } + + return []string{ANY} +} + +func replaceLastTag(slice []spec.Tag, element spec.Tag) { + slice = append(slice[:len(slice)-1], element) +} + +// defineTypeOfExample example value define the type (object and array unsupported). +func defineTypeOfExample(schemaType, arrayType, exampleValue string) (interface{}, error) { + switch schemaType { + case STRING: + return exampleValue, nil + case NUMBER: + v, err := strconv.ParseFloat(exampleValue, 64) + if err != nil { + return nil, fmt.Errorf("example value %s can't convert to %s err: %s", exampleValue, schemaType, err) + } + + return v, nil + case INTEGER: + v, err := strconv.Atoi(exampleValue) + if err != nil { + return nil, fmt.Errorf("example value %s can't convert to %s err: %s", exampleValue, schemaType, err) + } + + return v, nil + case BOOLEAN: + v, err := strconv.ParseBool(exampleValue) + if err != nil { + return nil, fmt.Errorf("example value %s can't convert to %s err: %s", exampleValue, schemaType, err) + } + + return v, nil + case ARRAY: + values := strings.Split(exampleValue, ",") + result := make([]interface{}, 0) + for _, value := range values { + v, err := defineTypeOfExample(arrayType, "", value) + if err != nil { + return nil, err + } + + result = append(result, v) + } + + return result, nil + case OBJECT: + if arrayType == "" { + return nil, fmt.Errorf("%s is unsupported type in example value `%s`", schemaType, exampleValue) + } + + values := strings.Split(exampleValue, ",") + + result := map[string]interface{}{} + + for _, value := range values { + mapData := strings.SplitN(value, ":", 2) + + if len(mapData) == 2 { + v, err := defineTypeOfExample(arrayType, "", mapData[1]) + if err != nil { + return nil, err + } + + result[mapData[0]] = v + + continue + } + + return nil, fmt.Errorf("example value %s should format: key:value", exampleValue) + } + + return result, nil + } + + return nil, fmt.Errorf("%s is unsupported type in example value %s", schemaType, exampleValue) +} + +// GetAllGoFileInfo gets all Go source files information for given searchDir. +func (parser *Parser) getAllGoFileInfo(packageDir, searchDir string) error { + if parser.skipPackageByPrefix(packageDir) { + return nil // ignored by user-defined package path prefixes + } + return filepath.Walk(searchDir, func(path string, f os.FileInfo, _ error) error { + err := parser.Skip(path, f) + if err != nil { + return err + } + + if f.IsDir() { + return nil + } + + relPath, err := filepath.Rel(searchDir, path) + if err != nil { + return err + } + + return parser.parseFile(filepath.ToSlash(filepath.Dir(filepath.Clean(filepath.Join(packageDir, relPath)))), path, nil, ParseAll) + }) +} + +func (parser *Parser) getAllGoFileInfoFromDeps(pkg *depth.Pkg, parseFlag ParseFlag) error { + ignoreInternal := pkg.Internal && !parser.ParseInternal + if ignoreInternal || !pkg.Resolved { // ignored internal and not resolved dependencies + return nil + } + + if pkg.Raw != nil && parser.skipPackageByPrefix(pkg.Raw.ImportPath) { + return nil // ignored by user-defined package path prefixes + } + + // Skip cgo + if pkg.Raw == nil && pkg.Name == "C" { + return nil + } + + srcDir := pkg.Raw.Dir + + files, err := os.ReadDir(srcDir) // only parsing files in the dir(don't contain sub dir files) + if err != nil { + return err + } + + for _, f := range files { + if f.IsDir() { + continue + } + + path := filepath.Join(srcDir, f.Name()) + if err := parser.parseFile(pkg.Name, path, nil, parseFlag); err != nil { + return err + } + } + + for i := 0; i < len(pkg.Deps); i++ { + if err := parser.getAllGoFileInfoFromDeps(&pkg.Deps[i], parseFlag); err != nil { + return err + } + } + + return nil +} + +func (parser *Parser) parseFile(packageDir, path string, src interface{}, flag ParseFlag) error { + if strings.HasSuffix(strings.ToLower(path), "_test.go") || filepath.Ext(path) != ".go" { + return nil + } + + return parser.packages.ParseFile(packageDir, path, src, flag) +} + +func (parser *Parser) checkOperationIDUniqueness() error { + // operationsIds contains all operationId annotations to check it's unique + operationsIds := make(map[string]string) + + for path, item := range parser.swagger.Paths.Paths { + var method, id string + + for method = range allMethod { + op := refRouteMethodOp(&item, method) + if *op != nil { + id = (**op).ID + + break + } + } + + if id == "" { + continue + } + + current := fmt.Sprintf("%s %s", method, path) + + previous, ok := operationsIds[id] + if ok { + return fmt.Errorf( + "duplicated @id annotation '%s' found in '%s', previously declared in: '%s'", + id, current, previous) + } + + operationsIds[id] = current + } + + return nil +} + +// Skip returns filepath.SkipDir error if match vendor and hidden folder. +func (parser *Parser) Skip(path string, f os.FileInfo) error { + return walkWith(parser.excludes, parser.ParseVendor)(path, f) +} + +func walkWith(excludes map[string]struct{}, parseVendor bool) func(path string, fileInfo os.FileInfo) error { + return func(path string, f os.FileInfo) error { + if f.IsDir() { + if !parseVendor && f.Name() == "vendor" || // ignore "vendor" + f.Name() == "docs" || // exclude docs + len(f.Name()) > 1 && f.Name()[0] == '.' && f.Name() != ".." { // exclude all hidden folder + return filepath.SkipDir + } + + if excludes != nil { + if _, ok := excludes[path]; ok { + return filepath.SkipDir + } + } + } + + return nil + } +} + +// GetSwagger returns *spec.Swagger which is the root document object for the API specification. +func (parser *Parser) GetSwagger() *spec.Swagger { + return parser.swagger +} + +// addTestType just for tests. +func (parser *Parser) addTestType(typename string) { + typeDef := &TypeSpecDef{} + parser.packages.uniqueDefinitions[typename] = typeDef + parser.parsedSchemas[typeDef] = &Schema{ + PkgPath: "", + Name: typename, + Schema: PrimitiveSchema(OBJECT), + } +} diff --git a/vendor/github.com/swaggo/swag/schema.go b/vendor/github.com/swaggo/swag/schema.go new file mode 100644 index 0000000..b3a5b38 --- /dev/null +++ b/vendor/github.com/swaggo/swag/schema.go @@ -0,0 +1,293 @@ +package swag + +import ( + "errors" + "fmt" + "github.com/go-openapi/spec" +) + +const ( + // ARRAY represent a array value. + ARRAY = "array" + // OBJECT represent a object value. + OBJECT = "object" + // PRIMITIVE represent a primitive value. + PRIMITIVE = "primitive" + // BOOLEAN represent a boolean value. + BOOLEAN = "boolean" + // INTEGER represent a integer value. + INTEGER = "integer" + // NUMBER represent a number value. + NUMBER = "number" + // STRING represent a string value. + STRING = "string" + // FUNC represent a function value. + FUNC = "func" + // ERROR represent a error value. + ERROR = "error" + // INTERFACE represent a interface value. + INTERFACE = "interface{}" + // ANY represent a any value. + ANY = "any" + // NIL represent a empty value. + NIL = "nil" + + // IgnoreNameOverridePrefix Prepend to model to avoid renaming based on comment. + IgnoreNameOverridePrefix = '$' +) + +// CheckSchemaType checks if typeName is not a name of primitive type. +func CheckSchemaType(typeName string) error { + if !IsPrimitiveType(typeName) { + return fmt.Errorf("%s is not basic types", typeName) + } + + return nil +} + +// IsSimplePrimitiveType determine whether the type name is a simple primitive type. +func IsSimplePrimitiveType(typeName string) bool { + switch typeName { + case STRING, NUMBER, INTEGER, BOOLEAN: + return true + } + + return false +} + +// IsPrimitiveType determine whether the type name is a primitive type. +func IsPrimitiveType(typeName string) bool { + switch typeName { + case STRING, NUMBER, INTEGER, BOOLEAN, ARRAY, OBJECT, FUNC: + return true + } + + return false +} + +// IsInterfaceLike determines whether the swagger type name is an go named interface type like error type. +func IsInterfaceLike(typeName string) bool { + return typeName == ERROR || typeName == ANY +} + +// IsNumericType determines whether the swagger type name is a numeric type. +func IsNumericType(typeName string) bool { + return typeName == INTEGER || typeName == NUMBER +} + +// TransToValidSchemeType indicates type will transfer golang basic type to swagger supported type. +func TransToValidSchemeType(typeName string) string { + switch typeName { + case "uint", "int", "uint8", "int8", "uint16", "int16", "byte": + return INTEGER + case "uint32", "int32", "rune": + return INTEGER + case "uint64", "int64": + return INTEGER + case "float32", "float64": + return NUMBER + case "bool": + return BOOLEAN + case "string": + return STRING + } + + return typeName +} + +// IsGolangPrimitiveType determine whether the type name is a golang primitive type. +func IsGolangPrimitiveType(typeName string) bool { + switch typeName { + case "uint", + "int", + "uint8", + "int8", + "uint16", + "int16", + "byte", + "uint32", + "int32", + "rune", + "uint64", + "int64", + "float32", + "float64", + "bool", + "string": + return true + } + + return false +} + +// TransToValidCollectionFormat determine valid collection format. +func TransToValidCollectionFormat(format string) string { + switch format { + case "csv", "multi", "pipes", "tsv", "ssv": + return format + } + + return "" +} + +func ignoreNameOverride(name string) bool { + return len(name) != 0 && name[0] == IgnoreNameOverridePrefix +} + +// IsComplexSchema whether a schema is complex and should be a ref schema +func IsComplexSchema(schema *spec.Schema) bool { + // a enum type should be complex + if len(schema.Enum) > 0 { + return true + } + + // a deep array type is complex, how to determine deep? here more than 2 ,for example: [][]object,[][][]int + if len(schema.Type) > 2 { + return true + } + + //Object included, such as Object or []Object + for _, st := range schema.Type { + if st == OBJECT { + return true + } + } + return false +} + +// IsRefSchema whether a schema is a reference schema. +func IsRefSchema(schema *spec.Schema) bool { + return schema.Ref.Ref.GetURL() != nil +} + +// RefSchema build a reference schema. +func RefSchema(refType string) *spec.Schema { + return spec.RefSchema("#/definitions/" + refType) +} + +// PrimitiveSchema build a primitive schema. +func PrimitiveSchema(refType string) *spec.Schema { + return &spec.Schema{SchemaProps: spec.SchemaProps{Type: []string{refType}}} +} + +// BuildCustomSchema build custom schema specified by tag swaggertype. +func BuildCustomSchema(types []string) (*spec.Schema, error) { + if len(types) == 0 { + return nil, nil + } + + switch types[0] { + case PRIMITIVE: + if len(types) == 1 { + return nil, errors.New("need primitive type after primitive") + } + + return BuildCustomSchema(types[1:]) + case ARRAY: + if len(types) == 1 { + return nil, errors.New("need array item type after array") + } + + schema, err := BuildCustomSchema(types[1:]) + if err != nil { + return nil, err + } + + return spec.ArrayProperty(schema), nil + case OBJECT: + if len(types) == 1 { + return PrimitiveSchema(types[0]), nil + } + + schema, err := BuildCustomSchema(types[1:]) + if err != nil { + return nil, err + } + + return spec.MapProperty(schema), nil + default: + err := CheckSchemaType(types[0]) + if err != nil { + return nil, err + } + + return PrimitiveSchema(types[0]), nil + } +} + +// MergeSchema merge schemas +func MergeSchema(dst *spec.Schema, src *spec.Schema) *spec.Schema { + if len(src.Type) > 0 { + dst.Type = src.Type + } + if len(src.Properties) > 0 { + dst.Properties = src.Properties + } + if src.Items != nil { + dst.Items = src.Items + } + if src.AdditionalProperties != nil { + dst.AdditionalProperties = src.AdditionalProperties + } + if len(src.Description) > 0 { + dst.Description = src.Description + } + if src.Nullable { + dst.Nullable = src.Nullable + } + if len(src.Format) > 0 { + dst.Format = src.Format + } + if src.Default != nil { + dst.Default = src.Default + } + if src.Example != nil { + dst.Example = src.Example + } + if len(src.Extensions) > 0 { + dst.Extensions = src.Extensions + } + if src.Maximum != nil { + dst.Maximum = src.Maximum + } + if src.Minimum != nil { + dst.Minimum = src.Minimum + } + if src.ExclusiveMaximum { + dst.ExclusiveMaximum = src.ExclusiveMaximum + } + if src.ExclusiveMinimum { + dst.ExclusiveMinimum = src.ExclusiveMinimum + } + if src.MaxLength != nil { + dst.MaxLength = src.MaxLength + } + if src.MinLength != nil { + dst.MinLength = src.MinLength + } + if len(src.Pattern) > 0 { + dst.Pattern = src.Pattern + } + if src.MaxItems != nil { + dst.MaxItems = src.MaxItems + } + if src.MinItems != nil { + dst.MinItems = src.MinItems + } + if src.UniqueItems { + dst.UniqueItems = src.UniqueItems + } + if src.MultipleOf != nil { + dst.MultipleOf = src.MultipleOf + } + if len(src.Enum) > 0 { + dst.Enum = src.Enum + } + if len(src.Extensions) > 0 { + dst.Extensions = src.Extensions + } + if len(src.ExtraProps) > 0 { + dst.ExtraProps = src.ExtraProps + } + return dst +} diff --git a/vendor/github.com/swaggo/swag/spec.go b/vendor/github.com/swaggo/swag/spec.go new file mode 100644 index 0000000..c18a365 --- /dev/null +++ b/vendor/github.com/swaggo/swag/spec.go @@ -0,0 +1,64 @@ +package swag + +import ( + "bytes" + "encoding/json" + "strings" + "text/template" +) + +// Spec holds exported Swagger Info so clients can modify it. +type Spec struct { + Version string + Host string + BasePath string + Schemes []string + Title string + Description string + InfoInstanceName string + SwaggerTemplate string + LeftDelim string + RightDelim string +} + +// ReadDoc parses SwaggerTemplate into swagger document. +func (i *Spec) ReadDoc() string { + i.Description = strings.ReplaceAll(i.Description, "\n", "\\n") + + tpl := template.New("swagger_info").Funcs(template.FuncMap{ + "marshal": func(v interface{}) string { + a, _ := json.Marshal(v) + + return string(a) + }, + "escape": func(v interface{}) string { + // escape tabs + var str = strings.ReplaceAll(v.(string), "\t", "\\t") + // replace " with \", and if that results in \\", replace that with \\\" + str = strings.ReplaceAll(str, "\"", "\\\"") + + return strings.ReplaceAll(str, "\\\\\"", "\\\\\\\"") + }, + }) + + if i.LeftDelim != "" && i.RightDelim != "" { + tpl = tpl.Delims(i.LeftDelim, i.RightDelim) + } + + parsed, err := tpl.Parse(i.SwaggerTemplate) + if err != nil { + return i.SwaggerTemplate + } + + var doc bytes.Buffer + if err = parsed.Execute(&doc, i); err != nil { + return i.SwaggerTemplate + } + + return doc.String() +} + +// InstanceName returns Spec instance name. +func (i *Spec) InstanceName() string { + return i.InfoInstanceName +} diff --git a/vendor/github.com/swaggo/swag/swagger.go b/vendor/github.com/swaggo/swag/swagger.go new file mode 100644 index 0000000..74c162c --- /dev/null +++ b/vendor/github.com/swaggo/swag/swagger.go @@ -0,0 +1,72 @@ +package swag + +import ( + "errors" + "fmt" + "sync" +) + +// Name is a unique name be used to register swag instance. +const Name = "swagger" + +var ( + swaggerMu sync.RWMutex + swags map[string]Swagger +) + +// Swagger is an interface to read swagger document. +type Swagger interface { + ReadDoc() string +} + +// Register registers swagger for given name. +func Register(name string, swagger Swagger) { + swaggerMu.Lock() + defer swaggerMu.Unlock() + + if swagger == nil { + panic("swagger is nil") + } + + if swags == nil { + swags = make(map[string]Swagger) + } + + if _, ok := swags[name]; ok { + panic("Register called twice for swag: " + name) + } + + swags[name] = swagger +} + +// GetSwagger returns the swagger instance for given name. +// If not found, returns nil. +func GetSwagger(name string) Swagger { + swaggerMu.RLock() + defer swaggerMu.RUnlock() + + return swags[name] +} + +// ReadDoc reads swagger document. An optional name parameter can be passed to read a specific document. +// The default name is "swagger". +func ReadDoc(optionalName ...string) (string, error) { + swaggerMu.RLock() + defer swaggerMu.RUnlock() + + if swags == nil { + return "", errors.New("no swag has yet been registered") + } + + name := Name + if len(optionalName) != 0 && optionalName[0] != "" { + name = optionalName[0] + } + + swag, ok := swags[name] + if !ok { + return "", fmt.Errorf("no swag named \"%s\" was registered", name) + } + + return swag.ReadDoc(), nil +} diff --git a/vendor/github.com/swaggo/swag/types.go b/vendor/github.com/swaggo/swag/types.go new file mode 100644 index 0000000..0076a6b --- /dev/null +++ b/vendor/github.com/swaggo/swag/types.go @@ -0,0 +1,105 @@ +package swag + +import ( + "go/ast" + "go/token" + "regexp" + "strings" + + "github.com/go-openapi/spec" +) + +// Schema parsed schema. +type Schema struct { + *spec.Schema // + PkgPath string // package import path used to rename Name of a definition int case of conflict + Name string // Name in definitions +} + +// TypeSpecDef the whole information of a typeSpec. +type TypeSpecDef struct { + // ast file where TypeSpec is + File *ast.File + + // the TypeSpec of this type definition + TypeSpec *ast.TypeSpec + + Enums []EnumValue + + // path of package starting from under ${GOPATH}/src or from module path in go.mod + PkgPath string + ParentSpec ast.Decl + + NotUnique bool +} + +// Name the name of the typeSpec. +func (t *TypeSpecDef) Name() string { + if t.TypeSpec != nil && t.TypeSpec.Name != nil { + return t.TypeSpec.Name.Name + } + + return "" +} + +// TypeName the type name of the typeSpec. +func (t *TypeSpecDef) TypeName() string { + if ignoreNameOverride(t.TypeSpec.Name.Name) { + return t.TypeSpec.Name.Name[1:] + } else if t.TypeSpec.Comment != nil { + // get alias from comment '// @name ' + const regexCaseInsensitive = "(?i)" + reTypeName, err := regexp.Compile(regexCaseInsensitive + `^@name\s+(\S+)`) + if err != nil { + panic(err) + } + for _, comment := range t.TypeSpec.Comment.List { + trimmedComment := strings.TrimSpace(strings.TrimLeft(comment.Text, "/")) + texts := reTypeName.FindStringSubmatch(trimmedComment) + if len(texts) > 1 { + return texts[1] + } + } + } + + var names []string + if t.NotUnique { + pkgPath := strings.Map(func(r rune) rune { + if r == '\\' || r == '/' || r == '.' { + return '_' + } + return r + }, t.PkgPath) + names = append(names, pkgPath) + } else if t.File != nil { + names = append(names, t.File.Name.Name) + } + if parentFun, ok := (t.ParentSpec).(*ast.FuncDecl); ok && parentFun != nil { + names = append(names, parentFun.Name.Name) + } + names = append(names, t.TypeSpec.Name.Name) + return fullTypeName(names...) +} + +// FullPath return the full path of the typeSpec. +func (t *TypeSpecDef) FullPath() string { + return t.PkgPath + "." + t.Name() +} + +// AstFileInfo information of an ast.File. +type AstFileInfo struct { + //FileSet the FileSet object which is used to parse this go source file + FileSet *token.FileSet + + // File ast.File + File *ast.File + + // Path the path of the ast.File + Path string + + // PackagePath package import path of the ast.File + PackagePath string + + // ParseFlag determine what to parse + ParseFlag ParseFlag +} diff --git a/vendor/github.com/swaggo/swag/utils.go b/vendor/github.com/swaggo/swag/utils.go new file mode 100644 index 0000000..df31ff2 --- /dev/null +++ b/vendor/github.com/swaggo/swag/utils.go @@ -0,0 +1,55 @@ +package swag + +import "unicode" + +// FieldsFunc split a string s by a func splitter into max n parts +func FieldsFunc(s string, f func(rune2 rune) bool, n int) []string { + // A span is used to record a slice of s of the form s[start:end]. + // The start index is inclusive and the end index is exclusive. + type span struct { + start int + end int + } + spans := make([]span, 0, 32) + + // Find the field start and end indices. + // Doing this in a separate pass (rather than slicing the string s + // and collecting the result substrings right away) is significantly + // more efficient, possibly due to cache effects. + start := -1 // valid span start if >= 0 + for end, rune := range s { + if f(rune) { + if start >= 0 { + spans = append(spans, span{start, end}) + // Set start to a negative value. + // Note: using -1 here consistently and reproducibly + // slows down this code by a several percent on amd64. + start = ^start + } + } else { + if start < 0 { + start = end + if n > 0 && len(spans)+1 >= n { + break + } + } + } + } + + // Last field might end at EOF. + if start >= 0 { + spans = append(spans, span{start, len(s)}) + } + + // Create strings from recorded field indices. + a := make([]string, len(spans)) + for i, span := range spans { + a[i] = s[span.start:span.end] + } + return a +} + +// FieldsByAnySpace split a string s by any space character into max n parts +func FieldsByAnySpace(s string, n int) []string { + return FieldsFunc(s, unicode.IsSpace, n) +} diff --git a/vendor/github.com/swaggo/swag/version.go b/vendor/github.com/swaggo/swag/version.go new file mode 100644 index 0000000..ff2810e --- /dev/null +++ b/vendor/github.com/swaggo/swag/version.go @@ -0,0 +1,4 @@ +package swag + +// Version of swag. +const Version = "v1.16.3" diff --git a/vendor/github.com/tidwall/gjson/README.md b/vendor/github.com/tidwall/gjson/README.md index 96b2e4d..7701cae 100644 --- a/vendor/github.com/tidwall/gjson/README.md +++ b/vendor/github.com/tidwall/gjson/README.md @@ -1,7 +1,9 @@

      -GJSON + + + + GJSON +
      GoDoc GJSON Playground diff --git a/vendor/github.com/tidwall/gjson/SYNTAX.md b/vendor/github.com/tidwall/gjson/SYNTAX.md index 6721d7f..a3f0fac 100644 --- a/vendor/github.com/tidwall/gjson/SYNTAX.md +++ b/vendor/github.com/tidwall/gjson/SYNTAX.md @@ -1,6 +1,6 @@ # GJSON Path Syntax -A GJSON Path is a text string syntax that describes a search pattern for quickly retreiving values from a JSON payload. +A GJSON Path is a text string syntax that describes a search pattern for quickly retrieving values from a JSON payload. This document is designed to explain the structure of a GJSON Path through examples. @@ -15,12 +15,12 @@ This document is designed to explain the structure of a GJSON Path through examp - [Multipaths](#multipaths) - [Literals](#literals) -The definitive implemenation is [github.com/tidwall/gjson](https://github.com/tidwall/gjson). +The definitive implementation is [github.com/tidwall/gjson](https://github.com/tidwall/gjson). Use the [GJSON Playground](https://gjson.dev) to experiment with the syntax online. ## Path structure -A GJSON Path is intended to be easily expressed as a series of components seperated by a `.` character. +A GJSON Path is intended to be easily expressed as a series of components separated by a `.` character. Along with `.` character, there are a few more that have special meaning, including `|`, `#`, `@`, `\`, `*`, `!`, and `?`. @@ -46,7 +46,7 @@ The following GJSON Paths evaluate to the accompanying values. ### Basic -In many cases you'll just want to retreive values by object name or array index. +In many cases you'll just want to retrieve values by object name or array index. ```go name.last "Anderson" diff --git a/vendor/github.com/tidwall/gjson/gjson.go b/vendor/github.com/tidwall/gjson/gjson.go index 4acd087..779fe61 100644 --- a/vendor/github.com/tidwall/gjson/gjson.go +++ b/vendor/github.com/tidwall/gjson/gjson.go @@ -1252,7 +1252,7 @@ func parseObject(c *parseContext, i int, path string) (int, bool) { } // matchLimit will limit the complexity of the match operation to avoid ReDos -// attacks from arbritary inputs. +// attacks from arbitrary inputs. // See the github.com/tidwall/match.MatchLimit function for more information. func matchLimit(str, pattern string) bool { matched, _ := match.MatchLimit(str, pattern, 10000) @@ -1917,6 +1917,16 @@ func appendHex16(dst []byte, x uint16) []byte { ) } +// DisableEscapeHTML will disable the automatic escaping of certain +// "problamatic" HTML characters when encoding to JSON. +// These character include '>', '<' and '&', which get escaped to \u003e, +// \u0026, and \u003c respectively. +// +// This is a global flag and will affect all further gjson operations. +// Ideally, if used, it should be set one time before other gjson functions +// are called. +var DisableEscapeHTML = false + // AppendJSONString is a convenience function that converts the provided string // to a valid JSON string and appends it to dst. func AppendJSONString(dst []byte, s string) []byte { @@ -1940,7 +1950,8 @@ func AppendJSONString(dst []byte, s string) []byte { dst = append(dst, 'u') dst = appendHex16(dst, uint16(s[i])) } - } else if s[i] == '>' || s[i] == '<' || s[i] == '&' { + } else if !DisableEscapeHTML && + (s[i] == '>' || s[i] == '<' || s[i] == '&') { dst = append(dst, '\\', 'u') dst = appendHex16(dst, uint16(s[i])) } else if s[i] == '\\' { @@ -2194,7 +2205,7 @@ func unescape(json string) string { } // Less return true if a token is less than another token. -// The caseSensitive paramater is used when the tokens are Strings. +// The caseSensitive parameter is used when the tokens are Strings. // The order when comparing two different type is: // // Null < False < Number < String < True < JSON @@ -3353,7 +3364,7 @@ func (t Result) Path(json string) string { goto fail } if !strings.HasPrefix(json[t.Index:], t.Raw) { - // Result is not at the JSON index as exepcted. + // Result is not at the JSON index as expected. goto fail } for ; i >= 0; i-- { diff --git a/vendor/github.com/tidwall/gjson/logo.png b/vendor/github.com/tidwall/gjson/logo.png deleted file mode 100644 index 17a8bbe9d651e5d79cbd59a3645a152443440ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15936 zcmdseRa9I})9xU_0znfrFi3EBcXtB8-Q8tyw?MEE+&u)>;O-g-!QF!n?wrm0ecyln zi+`Pqb92@@b204MboZ|AuIj4isoIgsic)AO1SlX72u(&>{38ei4_w2jBEbT8g#0}> zfj{`J5}K~64(6^NM$Tp+5mN_aGq8-Ek%ieuGb2+^ry(I^6HUo1oax$2(u&{u+covw&X$WR|Y3j=W4v9v&Wy9&C&b&K688JUl#1%&bhTtPDU41{Y6zS0f06 zy$kt&Mi4i1F>$tXbhUD@2fvJHWbEMPDnJHE`mZV2IVvdp*TD8J|6V9y$(SHUj!Z0! z%uIH6FZ24RwTtUVv;Qr||Jd3^&C}70>7$v8gPXGnupj2+|LF{@-T(PPFAV`{c$J*3 zfK4&76?ZUkvoo`Il@S*p1OCHkYGukR$|buuylm3H z<}7aJY~^ldD(UQC2mWW3d9D5jDR|g;*tw0_nHkJkjZ7HWS$Vh_jJR2u8Q6HtIgQO& zSd4j$Sjqm~-}Jw&-oLaIxC6|@@jn9bnzJ+W7@M$}GZ-0hn=-JlaPctk7_+f5@NjXm zahsTP8Jln!kud=xGQB9ye^aFY+yb=o6ILj1BiHWiOsHjwSN(6-S#&IQQX(?!~oRWla6k zvj3m#lk>9cCv!wc6L6R*c~`T5NT-O!e%&k`LRLWCk5V)xyH@qD}#ba7*ern zD^KwwL26x@_H9n^_xJEwj%`LF z2_M&3l{$q7;~URr@StEw0z3u!#j3ZdE5%$S1w0iM^K2@_(3KW1T0xFBPH3#1nB2_f zvBMJo!z+(+E_6G$0(R-JL<$OXHd^e=iug&_x%->yfVBZnFV3sIHbvZbAFwXaW7AoKsJ9QG z>$+mQV_~P4&z8jBcSvrf!^$eZC-BSslJQJOm4Sir>t!xQeA0}meB*bk78Ll6JYotw zFN_tm1+Ok3dz)A2wN_Xinfj#Ee?*6SsMzd_g;n4n@*KNU9c5|uUDdVb5;09jU=BA8 z7Ip^CUs>Q(aGI&ybtyH$7K|L2U(LdFslcD0RJYaHH%xx{O^TZmsdabO$yfZSTX|)r z=-oR$toP)*A6N)!Ci&fYk#B|NMo}VC;kw_(;DJ=HK8MnXxCRjx zm+Ele5%M~`%RXZFhRaja zofW}k`izaw_BnN>(4NODngeC2ev#$a0Za@}FunO>tS9?CYq6*J5?4v-!SCmNEg}($ zsiIfoly7`UXRh?F`!)YcJa>S4yLz&L#;kL&6#~9Ni+?|0z}yLl+KUVh*{UN zQL82>H7J0_BwzsZbE2-owg@HT^}ncXoZ;dh4@Ag(^&lQPK)^E=LOJs3m1N!Uj9F54V7Fy*9;Hf!S| z2Vtfjj8{AZ6|UJ&-*wZR;=h8&K-WF?$U44F^rNysF*k#YfwM3ww(UIiz!K$Vl6g^; zpZSmDI41>YtUMi>*8?muaBUxB;C6#-g+)6l$2v@q$uZDbJ6wES8#l*s2D<1?VzXJ$ zNn3AE*NNnAtmKenlM+7=mM9>ZV6zb+`lI$2@hpIeP1DdcS*Cvz5A~9(XQ5ee8Zy?1 zV$H!Cd=InD(OPcd;^t`I|2d8dNC%ws6z&4#gegDv>rH+oz!8Nz>NP}eD-R;bVvA0S z5fJb?Ou@|fK(P*e**ICmfISbcs}Y$fZuREW@ZFBDNYmhXW7PA6V7+}jLHzU1y=p!n z^hyRvQ|hIqYYoin6oO1NuT}m&C#3Y93YZnNA2Tz$8cr96%FkEFIxLhO1c8xa?YS>1 zYfbRvnrv%W@wwZlMg$41zv!F1Uthy~PJ0n;XM;%WG#G1Z(D~^_heW34*YaC}4fwaY zQ_|5S2@Q6+L&grf$wpF2KXm2n`%skl-*5HsEQC3gz~7nJ8i!$efQc!-p`}FGdT|bp zjc+K291ok>nAU4-{|as^#|^q`l>3ommlA=!Yk*~f4lIlN?BhIKO<)tnThs?ySx%(Q zZ{BqMNZOg7QO=}w219Yn;z5ayrjclN12jx{->DqdA?>)@B*M55Z6*>9uOVG^g4+gB$$ z&!XEFAyF0vK@Hi45CHqg@K*IEb;v3e@Qc{QP%M+qSM^o+6flzV`6>&uh)6U4UOl>Y zUko)LSj?`l;=xRs21!m{!rvOi>)at<`A6r#TDg{HRsnKvk6eoC&S-x#Mq{7vf>j;i zpoU-IgJbwqGu*^D+T5dUG0a_I-j;HEIj*%e?#p&>hhO%ho;0*k&ga~7^2w21Ks!^N zJ88HQ;e-ECm0XE^;oQz-+JymauGTlg2o=jQD#D!&eneT>3#Y{`@=}~!gct3epErdK zU`nI?9GgnOgA%X>7A8>kKcDjv8zn1;!d*!BC&n1*8?K}4xYS*8J-uGJt;RUTVXir%{}C0=q5B02D<=xOiYxcn?4l1}Em4lV07IMeqs8t@G*e)leU z^LZ&bK;v9xiiAiYvcgAIY^ z{hsN<54t}2vf2`*A~p<)503a+JOop=cS87$R%0Y9b}n%u{HMx2QvUVcnksc$0lfh| zO+0575+Z)~?&@C8M99dsa?f$2%sd?hq|Ds&;G=9fK537ECE{4uO>1(q_^&|Vlh_Gr>&p4j#CTe1bR2DJ_0}1+G9&6IH~WZ{A=YBXE4q6-nx9bn^kCGD zKq`a|i1oH?5f(Dp2PUamK}6jL3(BY6_{%!xtDA#drfkJ=#M6{`HRjVF)bpUQq&Ef6 zyRCSNEr>MF%a_m1u9p-Py~pK8D7c5rSo^`&g9y&-@)_~;#h*R~7VEJ@5*>Y+Ig5{* z{KaPMCB3%XAcWYoc^46OK;ZSTx9HGO-}GxhBWm@2u4qc+2r6b_aBFo$7yfX_H3CEQ zaAx(~OTHSE^w9jPe|Db0^FFGfRAv|V-o14(YFFLKu2^KV)OYV$MilR}0%8L8mXrX# z?aXNsv{y&t%MTik%-A};(yQA&Eexy&Tel+t@?5=F>qE*mRdi^0cko1yYtB`K{ocK2 ze?^g1EeKeXFLrFjvhUiy$_GM26OFkX+qLLsXfuf_ zAiE6m$DGN>RDMk}<35n$|sHc(gYzBw5(l8USpk56G_tt5v zT2RPk>)0{R5nwf2>%09ZBb^t1O4UtbrXz%J=bQ7Aj>{^+T`g!YD&6-HAA&h~?oH{F z-*(;OvA=)%wE6M!TY|;d-~Kce;ebbI&U$_a!QI&6cp@;QC-Ynh;FOeB9wl}vAGWi_ zI6Eb)y%&;;oN5BIUcqEK(H~zuZ*l#_kGGu+l9nrvvTET;x{?m&Pz z)6(6l?`Nf+N{at87srvs@R$3YNC|1B5vn8BpnndfCUEtywUobq0}Eh3Y)W$a((OMt zeVTMUi_J2y7^X9|!b=N>O53xrkSYtG=HIjP+ixUv0p0}H|0JbRs^%hA!Jwk}>L&MM z80l=$8*p?p5nqzB2flUC+qS5co0cA{{~DgUCuuOfxzg5oVle|X6R|&z9HyjTBz7=W z6(hQ3!ou1{BT@o3I#0`zwh{7Z9D2aZ8IS0|LDbPB~{a9 zxp|-)J|}zIePx$CI@kZ{&VL_`9mP8HDU)6(_8QG5JF(05;fr7V+K5bA1Etfxgh#5W>6P@@ucg&Jzly%#@3VwSKV{@&j#^M( zTlz^^ZmfJ%6rHQ3%yEH?9(L!Qb(!Do<{dt5FB1GvxNV4LI{Pjr0R!MUrMb5A4pX>C zAxvpRy)idQ1E-@e{fUAX=xnu;V!H}&V4CM$%=yv*v=$M;MOYIcj@A-jG z?Rpip=$Wr@_3CPVC#tvr@>g2)Q4aUQ5cATrcEjnW2##{myh=>MLI$B&y6jSWY!swkxM01Od*SEg zL*Mh~ni#4$)U3y+i&vQhK|9qf!@Ie%77J-pfjx;IqN%|*VX(lO%{8>t0l{p^gB)j@ zJH57Z00N>gy2Swd*!!iFW0?|!a>O(rOZL2g&I>ppw~Od1Z5(JPKd=Q&^ICR7OvUvu z?=;QVzQ(dwYT=aA*Bg?3&P}yAThCa2|K}GvR-m-L*_!MseF=o;M zOc|!hnA_@||7VYZk>zZ=UNBMA*Vtu^yo#aiaXg2+Bh3A_ z*k(u*3VX`)Fpa0tfiD<{pqWjZHrb&h8UI8iP-1;S@Ctq-P$n^!{&NzMp(LvzzPbW5 z&{drM`nf{0E^A*AS;QZ4;qFHOENld#)$;q_vGmq_=O^r}ovg!Le`|uzGHczAnUBcG z`*F2&g&n(N8{#Biba+rq`+AT}7E##C*+mWAHcl~e8IF*BlD}ptBDDp7inFHgCu%CG zMQGj9<9umYwTdv9IK}7?I-Az9B4JJeXGNp&Y~9dg6EMByhM;=CJgzMOHPo|HyPwEF z>AJ~_8b(2SFF>9)iwy@AzPGmoydb?M{G9dKy6!c@N}i|Lt*7q!;Msy>FWlp16n&Oo zmA=5&{-W||a^yg79H=mpEMh=;B08fpy9ZhoVvt6ohvYk&9Dko*huy|_Vcj-#n-^%Y zs(?&;92eWq(+`)_??I^-a?v+g0KQKt*?l$Eba3dO7`iLIHz8VPfP?g+cWvw%=+?0$ zw8JC0o-q5rI(C{(+>M|Yd?#NqbO%~Z8MLGynQ3(_s2no9^BqZSUb>Vsq3+-&Z~pLd z_+I&t*zl@gEawwB70Gx!2LBP^FYe$`QL1{2+{*4>GM~87Lx9~C-tG~*?hRhhc=M|v zKz`3aEk0yz8Txxs?~Urdp+R0uG5?!T)2G;O-?IC#fm9y}er2kwt<)7;#|LG5_jh)$ z2Sc<@EHgtod#3K*7;KqZ%_)YTiJL+t8o!4XIkwUN@t`E$Yq7=AK*!U9H?3HzBPCK4 z1;{FwV^;P{uD18>%3tX3j%6R_MIMv&@f1V4k%w(DWcZccnI;9GVC^$jwAX_dysW1j zM`z~{y%DsP60N1h*GBx4LRqvFn|B3AG`4>4XHx@(`6tg$H8rQaVQ_b9%`q`{{4}r2 z=OP;`SSJVDA#p82i#aqb_VL+eJ|9?gaG4go0A~hZ1+MA=FDhbXUeMCt&#CDcTTP6} zxtZStJ{EiC|G-Fk6MeJpZ%|$9Rn@xfF(WyQBgyfy#vHNweKWz*P#EpEYl?H6KHpMe zvf?*tGh4Og7>Gv?^om*Qpu)Eyho@?PDF~@Ea^wN^&DqhE;aD3KU>Xh(01Gsi_yYOZ*mM@2DpdkOw<+vQpws53fo{ z&wajB`u(vzs_9!4?h&i8?CuR2u+G84+26IV*Kn`^r>fu|-veN(1Zn=_`3YN(XcZ|e1tk=THcWJbl zsYeS(c=;b95uXNv-?n*7v=S{~uMPFRje+fM2G~eIo<0k{7KhLSksr739qkp}2P;MF z#RHd6+;5fK#zzu#)US{5c4HuGKPuG*;1FXZM{@sop4IH+(rfX}ZIm^whc{X<>-WUx=Qlw6^^~L>&&#_wbjA%NM-BO- ziWfJ(=D?Q^MhL3 zhf&VlDz1)-0Zchw2k$O-icKDM^}Uif#Kk9m;R`tpuwOp5cG?~QR}6ZxbSN_q>1prP zakr4;NOzZ;Y^{A;uGpF=CV3`sPEq~4a=}w;)_$M_5ewbN6EZm-FnM6t)+yo$1Xzo8 zIpW+8HNz7 zlkMVkuwUHCF6C}Aw-E@>xDL3Tfbn_4oq*Rv>wJw&{jvDbvdHt}yMJ0Gb!csez+k{> zteQ9MH2^!E*)-B03O|-kOhidM>4!7jddvni6e+3Rhgmz{jFUl94}&j}0ME)Fp%mZ0 zXlE;DA$P!z`Ey7={LOdHkNp(zqOd+a5rWUY-&`B1w6#jF;9ooo#D?cdNf9r=4ZwBl zOS1FBam;Twsy90oaUIT{CrE+w=xr2`$no9-7C=scPgFEzAOBOZ<*$GeQ77bZwMSg@@7fXHj)VSZO3m{PYxnm7QPW=ydOs z{#chl`}vB`$gV*CX!a!p0D-WAVE#D;v=)%6LUt~fUM3C-2r&%X-h~3n92m=ymRYwXeipL(xBw46A4m}b zz`ipJfSi^h{{;9`Am@=3^@?4(vH)Plzr`-h3~f>NWL@{d&CLaZiG|xLcAC$!-`noB z4&_SEZ1pq&)UusTnZ1RoHFypZcN}#Eq#vv|MOIILF6sZa{{;$X363&PR_E3MC1@C^ zx;^*2YnYQiXAqu1qRWO2EB%sab?nau7YG4niID=(CE2JAH3TMJ{gmd4t!{42oMXA5 z=pHOdBnf^{06X{BZ;N29axO0saaETG~y-q@bv})p+406EHxk$8IMo93knK5R6iV?^+?4JEa=@BB{Wr;7$09%)WWpwdSJpc&gy?Xb#y=!13d4 znM6rJyf+X%lZo?o%SI9DF_A11@m+d`!3G!<29W9k_{MPczg;h)nTL@kmCpN_655)+ zV4#=PKa9~L!Z2&Ah&=5fCU1*LOJ_x$W27L$LOfiib%hP1*Z~zUp#+jQq7DbI-U%rP zk^T9Tl?*Eoupe)4-y&KT~+O##fDEImn4y>NutF;IVJ3=m*! z*rEW%TlVNiM?a>>U$u_$JuA>L6CZFXb!s@yP&g!R3gv~Bp}AgpK2=m0jV8VvIZv2C zmd^lRyVaiKaS$v6oYCt@$k#%)MsE3;z}yQ2L<8`{hpSucn4z6B`)k9mk!I(}zCa8Y zec8sli-a|~e-I8yodRg%#-Fe zUUq-YRYyjqA8u02I*uj{d;W>=)zk|nH^OPBH+T%!|4ND7zpZ*;!cs{XDZAc=)TpYy zygF?tJ_g{6^&8==X_&x=`hHuSa{O~;8JsY}g+Ry)97Lmf`m;+MhVx9uQw2LJB)YCN z@x%=aA>jGW@-K6kNsyeSxy?!*B;mpG3B8IhiJ`aL(iYA4>ejWW`Ba}KuFQ=qb|9UD zd1@S)Q6&PF^2(HexS@I93W4L)kM;M0t02}wjNHH_W_t5)TVGK6pzr>0Q^W#T7H~ar z!`O{mW@83Sl9!-P1c_I-0Gd=n(Al2Ah)MotJ8AbzM;HOuxA3PI2G5Xa4-KFnd(R<& zl~(O&-Jsc|!_LVQcPi|XD}`wzR1Xn(cG2(D_N3D~k*V(8k4i+i9K+ulxOuCy!l zG3U%zV9j+$hqsRH4K8qiX)Y%5kpNKe-@i7c^ly-X9EHpqEaj*3o>oZwj-~iM`20S0 zT+X3*f&BF+O!NkR{xf~GM<9^RlYs$K*d}c0boMm+LsFzfZDJ%7->?En1@nR69#5W9 zha7r+_<*>ozO^~mkB|Jz*z!F@=x~3DwK8pu~`vT=$gd#s-trjR06bA&FSRn zXosx!+Ar!=CCEZdm*mgGVygGr=a;bPp3`1$ojoLd5*z)h`E`i{b~Tk6I_M{*hrhdq z%km?-j{K^V=N^-HEYrs)!oparg}x|u^fEHypM^&WQ?T7d$N;k6=t`n8b5A;R7+fd< zweEqw_&I7h2Q`^|Nhl+xehysMZI!+Zv%IfOO*?!yw98BGB}51~t1J8V4~T$`Y~Rpg zC&EB-_kDWzSVdXeG7o$eVQN}aM@*<;RL@^rCgVF8kWxLDx|}q#y}Sgg z??KODbbqBH3$u%uWAZp`x1p_9+vh$RDq>q8DArehLiv#? zS7p(k_klZ2h^UNb09!*yqk7YKmjb|*xuZ{kcYnK_eZDQDgCKrv@~G^rCEkhh1KQ8t zT~&5d1+9jn{HLO`4hJ}XbT4W*8iQ!OH&R^30MdVf>goXR<52$G7-HwbKISxdG2?gX zUWamaU{hM>`{N6CBF`m|UO7f;#%00^HUQjv90sS3{=D}p=qL&|w9G5VQ=hdE?qpB* z8CVyn;Vhr1QP!CQcS~LOSrN!b4hgV%PU9lhY4qrPo;TID@g4v|;8auwD2G~SY|8TM zRd4Zg*tNyl*2c@A_Z{0+cYF_Pnwm+58d;%$qhs2q2XkwXMBxG|t)dcF{495+0LXAt z%=xkC)NYk>2z6<8b(io?P7{c7z!dMrujH=okhn5qE$`KV2r?QH33y;KVw{~_a|@d1 zgc0Z`b1>*sRl_Co)qBcExZwdxbAVy&napFK=rMOLMPFe2WYbbO%19sPa*w$o;yi)Q z){i?j*$ujpB;L{(m!Q9Sdnfg#tTM-#YfR{CBw}t`;qUq-!x&bmVfcN}-Po_I4}X}_ z^t5y1VNMmk9z)``Ic6iQsFY7DwU8AJM3TN>l5#qSx#b5zyk}gA%k0LtM)YSep6s(K^!|HPUZnNmZx2o z56)-Om(G2o{0FL>zz=R>3h!{P^*+b!qaH#4@l(IQkuiEnE!ScPnFiaVAO&1gyai|l zAdJrT+kK3Se%<(USIy}n=jk}2Ht2IX#e*edEZ~-uUSJSqWC~k*1T5@YJrKyPnw|X< z+W3-Y{WKrQdHr~R3#5&-TZ3zM;w6TqCbhn|Rj2*Z?S*6e-R?XXaRSs|oId=TVXLu{ zj|URNRPe7+kR)4)8|nkVLsFM7<=Vmf~HeV0cp1|XXS5L@wjNj5yKie+KA z%09g+z^n`}M7P_vg>2)FYXMz=YLgchlQ~%ARY;7G(ys;3HB-ed^wLOTkupT@Nfk&o zqI^Bl$76XEwk1?h=qO6mkigTz!Fhq&Y~rX|9n!A;SBB16W?nFjd=|4(?*6`uT>Om4 zq!ivu+WiqM6jPn_bYNMC+&k!sajqnXW6Bh6mHZwrOTOLYAspD>VRI&w0>>Ym%QSk7jV!gm~4K#@3Ekv@C& z1ZW^9I}1pIxbnRqUm@~9k$hFsgO$SclmV)dsY(@axX-x;K@08<7z*M;!)D+)GnB-h_pX#E4&BdOm}hnZK05O34%JkmnSPvltCp%pfh1YkKaB; z3r{eK1y}F0zteZ!VbKxN(mGE+RBO2}il&HvJsmW5)9f&i7~9pNsoJ;9UuU{fdVZPdaTpl3xn;a*6FGldFooO)ID5!f~o{A(@Q|Z#mgd97e)$p~ZNmCyO%SVP)0qcao?}@xnBznLG_-jRz&F1t?k^&(O-9@Xe66ob6E_pADB_QBgqLn-gy;LfXQBSJbXm4Qa z)@0fUbjL-DMg$ghS|B?CBkpf7|ESPv)cUf`>w<=*s{H62A8V`IiK$3LELwT3jzOb8 zl!S`+Tx&GX2;@<}_wVf9BLV{P^(7He508+NcJ@gXb$|bH_KiMExuqD$AfHUdt4cDv znhtuostMM!A9W3zyP;)%a8-~&aywa>^w*%F9kkeh*?k3sl)5}_ql5OAK9{{G;i=&{ zUtHfQwYq)Mv2b#<<*l>m4R5ck-D}D4z}ASJ5n|#5oacfBD7c8Ej7x(YE2s{iT$}G8 zwe%kv{OB)T?3TF&{@pgAVDqA%#pj(8sb{K9MGKWIs8|2FC9!(el>JYu3twNt=QY>E zEfe)z$ve+s#4HImOHv>x>;K~XCmW++46hoJ3_n6i`N8IeHpqE;laOh)fhBpsdn`Zm z=#=<=nmx{M{f?01b_7r#Sw*A=7N%8-I`SyqirAZn#cfO6?4!h|ub2b6?Zr>?Gx+w7 z<{S4WRHS>hqD7{`zLA&m^E6s)FM4@tcOl;dBnnQWimCjB_^)p8k672RtIbfAuFEw6 zgYuq`4j>h|oy0tO_clJuOF6%_;JJXGg4^VC^xm%7&7Hy10VSjE=3!N?H7J&iqdP}I zNOMAsr-?az+$AOgF>TROKSqm>+JU2`&iM{Ko72ZNnN>6ZNGPvfr7rwp!%~yBJSI?n zB3R6?SX`*e^MKP=??Xlg7}vTlQ%RIYvO<*`dtIXjAi@O&*XGS5Uh^+>(R3{UOg9!# zeFU6}>N+X$p5K_^4*d4ma(tvz--++&_^^mulRJJ-8!^^{Pd@#l&?DVnNZmyNE?sJo z1v4i@CO?oX!Dg1Lqv3TWiOw2-FS)k+Ljd}Ilpuew^DX&cs7!n~Bu5*_ zbNkTWkOG>zvpx~^d~foOLY<`#J9-4ss8Adupv(u66p=MohfRAYxhNA>HSU|gUFPg!w!n|-*n&2dvMVX3i(q* z9avlqEO5CvT+~(A1xN=y58K~En@L`vMnKT5ufo5MXk%ca7vW2=31I*Km~>+KC%76EmzQ{Epl*zpBy66^=k| zgxepQc7MxTEKkj~;bY@6Gd!n`K!v>&``bhrGUsu ziUsg|6^14}8h@IKz!**2yt0@~gdZ8TQ6A456}yw%F8pOXchJfG;IsFRiK@Z=(_=hNf1EVaQxVt%sqi_6s+|aA2Hs^Z1^jkF} z)1c0f3(n&QqBF4M>5l>N+2Cviy}C>Nvp)=5PwiM9D`yM8h&eBJ^iH_7m4)X9Q%5MW z!_c~><|XVWOt+Ve`j5xtKb#eCe342+D}=)aV%}@?*l_nK;*CILu4J}tqmJH`|Q{N79k>Ago$ zw+kbnqFbA;2Yd~D;IrHI?7OkQTl}|AhyXHl!kF?*%64_xllGp7XvzmFLZx)x^DQ#( z8yw9_Kg)1_V%`v*<7w+#aJ1^1V0 zi}6B_vKX`{IOQ9xZOX1JvESZ!V(|c{SDSNfEs(d|CL$lQ?eu!R|NTpI?eS+Kf7vNl z%!IbKTC}f)@d@}t?+klTHUjTrMxbJXOeb(+XezwY*G|WOOma4Pdp;kk0Fl~k&%h$# zkNqIcqQ*;D3DT7}0g$zkqn+g9IR#X2V^fthIf z6xut?2mox2Q$mF~UZ_v*={bqjQ*QF8smcNS^TPHE8vGd1^gz*sl^2S)?%;8oMxCX* z0SKz`wGxRnWD$dRPEJ3QEZIK37gU^>f=z&GmJiDQqp92G7HAK&!?*nn%c^fgy_Rc6 z2i%y;23Y}W_x9$Q$t)tiX=};p&i0?ga{!QL{KM0y9!)RXqLg$ix6$n3zDrBF#amXMJ8=viyxAutbQYXsIV&Y%NuDPMK&4 z49)cj0zMhnla%IgMc=|Vc20Hv6p#_`b$l?h_yQC$DIz&u_>1yOOYIZ}$7ErKy`9Iw zO&^zH_d%1a{z{drpduoOO9>4K0hs_Wqej8OE3;~Jz;l|XDy($&>P*2><8H_*uLF

      Bg_)L$48&o}ack zt!HAQladuqH6nxcdZjxF6vTK*7%AV0IOX}JZ^u_OkMumMel#gIzv1VJUb|?$j71?Q zE%B-a&vFk0&Z20HLn$L5hH9dQ4Ef5bKHOX_RfA5_`gJvR%bW4}0DCGg0Va&YC>upU z1&8GC>xLY}LkxejF;yq2sOY~5Cqo4UPpDVfIk~O=P(Gb%k`up^XsPRv9)fXL9y}y5 z_nYE{jUJUly7pJ?$r_eiajL0B@N?t6efF1pS9lk2UGDMWIj>@eS3OH*kme)>qMs4c zXm_q!8hu`I8Dhv5J1?UvlYLJ*X6D(~=y^sb&mT@}>JxIp-$sTvzSdP`p2 zJSTpI%GX_eG4+h<`8LXOC{XRWB^Zd0<_&>b2eoF`!(!~j1?f~Xrey`D;63!OSo@1j zhVkNITfkbp3}EkdgcmMq1ZjCrPrG8@X$!y3nZFDG<8?k82gdmVJ<<=koN(R0uQJ&q&;Hm9we)+ z>EiW_<2L!S=W{bXQR{t-Xk&^=i3!xJ1GH*$ft^*`kFY2U5$7}?R(xpv1OE!wXhM-U z{|-m&g!{Wci5J~AR7xhAcz2%T1X}X;Lm5kqn$n>CdZG%!jlgyEgu}8cSE=Tna>KaW zE{i{1$MRasX61aWzh$Kz+gg_XXfmLI)gJjN8%-etjvKrZa0TIVu@FNzi_DBbgG}?X zc%`<^VRHLdaERnl?k6tkmy~V-6wDDz--2n{wg8GA9pEX|*>WDA)uFS%@&MN%-fruuv;9cz5hkb^M5ny{e|a>hsQrwX-D^ zNBO*f*^1b~?2NHQ2g~@Hiq$_V;Z8|Q@sz(OJ-_;@xOeF3^57a-&;bjXTR0^(9&O1`Qs5mDXKaZ{gYh~^a4>N0el@Q8ji@;G0VwtnJC=gh zkvhS5%hY0~-FeS=8*`P?hYjBB(TJ(h3vvLJ;q{z?7Jf~hQZOlh z8(M!wZ6}#fur(A{mkQvWp^(z{kJ9Qcf&hRH6HK!c5b1?W28wck^aQ{Ju^0{PD&(m< zLbu{`I17`!l>tz)uDi~j;Q*7#M!X;*rP#E#K`0MHVO=C_Y>Kpq3I%tz)KS21z(70w zu+S+efLBlwQ<3knLW3-aM&dW%uuv1r?kQqDWsn|wHc35K!jBl%t~9oLn(8w!(iF2Y zj)Ca3zC|-dT69O*c44Drzb zTWRcGB4pjuzq;tNLKJ7H7&3CTH`^5&fs^&Csh+4TdNT~n>o18P123FK1<6Ap7>9OE zH?~wjjt8TicxY-E;Ld@{^P%j9BpeC^HJlw8iW2I<*Vc#1VH5Y&k@$T23>riN5a^fE z1xtK3We+L~pTm`C@mKj&g@flbKtRjuc?i2+3nW^d516YT2Qx*|&}0%IIZ{BK)n@-A z7W$f>T8g%2qR?15Ezb7#Al1jSng=Um;<;^4CZ)UF4*B#s16}WxXDR&e;IFDemyJBP zQD>pCTMx2W)Iwg$ckc4ElkYeRp?hVt(&_O^6u-=WO4y!T>T70vx)M)1f17nmsqw{$ zZhYP=C<2j}m^Lg-ex&8RKf~0WrfrL!~NLQ^Xk?)No>Z1xiNn~MBa)Y#@)-369lm6 zDH#U3Pv&kw{mt3+_t3uW8=*{`^%?Rl0~ff@XZrjZDZCjasI5PtLP6)zBrRO$pYlfV z4DCdS&(8)uR*23AuP?jhTi@#6yL=G*b~7!5d3?2d_2DzzR3V+SVCZe@ULo|*Qz`CV z*j}+=>D|^uy$<{s0tgCLYba;t*4jWsj}CfRI?T4cS90us!fy8Lz;(qp7V}H&`+loKEpPZr6wt`2EqWMWj z6-EjjNWU@D@IQdNmlvT5>qUq{`9m - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -## Preamble - -The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - -The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains -free software for all its users. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - -Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - -A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - -The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - -An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing -under this license. - -The precise terms and conditions for copying, distribution and -modification follow. - -## TERMS AND CONDITIONS - -### 0. Definitions. - -"This License" refers to version 3 of the GNU Affero General Public -License. - -"Copyright" also means copyright-like laws that apply to other kinds -of works, such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - -To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of -an exact copy. The resulting work is called a "modified version" of -the earlier work or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based -on the Program. - -To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - -To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user -through a computer network, with no transfer of a copy, is not -conveying. - -An interactive user interface displays "Appropriate Legal Notices" to -the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -### 1. Source Code. - -The "source code" for a work means the preferred form of the work for -making modifications to it. "Object code" means any non-source form of -a work. - -A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - -The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can -regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same -work. - -### 2. Basic Permissions. - -All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, -without conditions so long as your license otherwise remains in force. -You may convey covered works to others for the sole purpose of having -them make modifications exclusively for you, or provide you with -facilities for running those works, provided that you comply with the -terms of this License in conveying all material for which you do not -control copyright. Those thus making or running the covered works for -you must do so exclusively on your behalf, under your direction and -control, on terms that prohibit them from making any copies of your -copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the -conditions stated below. Sublicensing is not allowed; section 10 makes -it unnecessary. - -### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - -When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such -circumvention is effected by exercising rights under this License with -respect to the covered work, and you disclaim any intention to limit -operation or modification of the work as a means of enforcing, against -the work's users, your or third parties' legal rights to forbid -circumvention of technological measures. - -### 4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - -### 5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these -conditions: - -- a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. -- b) The work must carry prominent notices stating that it is - released under this License and any conditions added under - section 7. This requirement modifies the requirement in section 4 - to "keep intact all notices". -- c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. -- d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - -A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - -### 6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of -sections 4 and 5, provided that you also convey the machine-readable -Corresponding Source under the terms of this License, in one of these -ways: - -- a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. -- b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the Corresponding - Source from a network server at no charge. -- c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. -- d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. -- e) Convey the object code using peer-to-peer transmission, - provided you inform other peers where the object code and - Corresponding Source of the work are being offered to the general - public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - -A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, -family, or household purposes, or (2) anything designed or sold for -incorporation into a dwelling. In determining whether a product is a -consumer product, doubtful cases shall be resolved in favor of -coverage. For a particular product received by a particular user, -"normally used" refers to a typical or common use of that class of -product, regardless of the status of the particular user or of the way -in which the particular user actually uses, or expects or is expected -to use, the product. A product is a consumer product regardless of -whether the product has substantial commercial, industrial or -non-consumer uses, unless such uses represent the only significant -mode of use of the product. - -"Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to -install and execute modified versions of a covered work in that User -Product from a modified version of its Corresponding Source. The -information must suffice to ensure that the continued functioning of -the modified object code is in no case prevented or interfered with -solely because modification has been made. - -If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - -The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or -updates for a work that has been modified or installed by the -recipient, or for the User Product in which it has been modified or -installed. Access to a network may be denied when the modification -itself materially and adversely affects the operation of the network -or violates the rules and protocols for communication across the -network. - -Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - -### 7. Additional Terms. - -"Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders -of that material) supplement the terms of this License with terms: - -- a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or -- b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or -- c) Prohibiting misrepresentation of the origin of that material, - or requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or -- d) Limiting the use for publicity purposes of names of licensors - or authors of the material; or -- e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or -- f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions - of it) with contractual assumptions of liability to the recipient, - for any liability that these contractual assumptions directly - impose on those licensors and authors. - -All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; the -above requirements apply either way. - -### 8. Termination. - -You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - -However, if you cease all violation of this License, then your license -from a particular copyright holder is reinstated (a) provisionally, -unless and until the copyright holder explicitly and finally -terminates your license, and (b) permanently, if the copyright holder -fails to notify you of the violation by some reasonable means prior to -60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - -### 9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run -a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - -### 10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - -An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - -### 11. Patents. - -A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned -or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - -In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - -If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - -A patent license is "discriminatory" if it does not include within the -scope of its coverage, prohibits the exercise of, or is conditioned on -the non-exercise of one or more of the rights that are specifically -granted under this License. You may not convey a covered work if you -are a party to an arrangement with a third party that is in the -business of distributing software, under which you make payment to the -third party based on the extent of your activity of conveying the -work, and under which the third party grants, to any of the parties -who would receive the covered work from you, a discriminatory patent -license (a) in connection with copies of the covered work conveyed by -you (or copies made from those copies), or (b) primarily for and in -connection with specific products or compilations that contain the -covered work, unless you entered into that arrangement, or that patent -license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - -### 12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under -this License and any other pertinent obligations, then as a -consequence you may not convey it at all. For example, if you agree to -terms that obligate you to collect a royalty for further conveying -from those to whom you convey the Program, the only way you could -satisfy both those terms and this License would be to refrain entirely -from conveying the Program. - -### 13. Remote Network Interaction; Use with the GNU General Public License. - -Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your -version supports such interaction) an opportunity to receive the -Corresponding Source of your version by providing access to the -Corresponding Source from a network server at no charge, through some -standard or customary means of facilitating copying of software. This -Corresponding Source shall include the Corresponding Source for any -work covered by version 3 of the GNU General Public License that is -incorporated pursuant to the following paragraph. - -Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - -### 14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions -of the GNU Affero General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever -published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions -of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - -Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - -### 15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT -WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -### 16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR -CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT -NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR -LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM -TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -### 17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS diff --git a/vendor/gitlab.com/etke.cc/go/psd/README.md b/vendor/gitlab.com/etke.cc/go/psd/README.md deleted file mode 100644 index 309b6c0..0000000 --- a/vendor/gitlab.com/etke.cc/go/psd/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# PSD client - -Simple go client for [PSD](https://gitlab.com/etke.cc/int/psd) service. diff --git a/vendor/gitlab.com/etke.cc/go/secgen/.gitlab-ci.yml b/vendor/gitlab.com/etke.cc/go/secgen/.gitlab-ci.yml deleted file mode 100644 index 45fcf2d..0000000 --- a/vendor/gitlab.com/etke.cc/go/secgen/.gitlab-ci.yml +++ /dev/null @@ -1,11 +0,0 @@ -lint: - image: registry.gitlab.com/etke.cc/base - script: - - golangci-lint run ./... - -unit: - image: registry.gitlab.com/etke.cc/base - script: - - go test -coverprofile=cover.out ./... - - go tool cover -func=cover.out - - rm -f cover.out diff --git a/vendor/gitlab.com/etke.cc/go/validator/v2/.gitlab-ci.yml b/vendor/gitlab.com/etke.cc/go/validator/v2/.gitlab-ci.yml deleted file mode 100644 index bb358d5..0000000 --- a/vendor/gitlab.com/etke.cc/go/validator/v2/.gitlab-ci.yml +++ /dev/null @@ -1,11 +0,0 @@ -lint: - stage: test - image: registry.gitlab.com/etke.cc/base/build - script: - - just lint - -unit: - stage: test - image: registry.gitlab.com/etke.cc/base/build - script: - - just test diff --git a/vendor/go.mau.fi/util/confusable/confusables.go b/vendor/go.mau.fi/util/confusable/confusables.go new file mode 100644 index 0000000..cd613b2 --- /dev/null +++ b/vendor/go.mau.fi/util/confusable/confusables.go @@ -0,0 +1,12633 @@ +// Code generated by go generate; DO NOT EDIT. + +package confusable + +func GetReplacement(input rune) string { + switch input { + case 34: + return "''" + case 37: + return "º/₀" + case 48: + return "O" + case 49: + return "l" + case 73: + return "l" + case 96: + return "'" + case 109: + return "rn" + case 124: + return "l" + case 160: + return " " + case 162: + return "c̸" + case 165: + return "Y̵" + case 175: + return "ˉ" + case 180: + return "'" + case 181: + return "μ" + case 184: + return "," + case 198: + return "AE" + case 199: + return "C̦" + case 208: + return "D̵" + case 215: + return "x" + case 216: + return "O̸" + case 230: + return "ae" + case 231: + return "c̦" + case 240: + return "∂̵" + case 246: + return "ة" + case 248: + return "o̸" + case 272: + return "D̵" + case 273: + return "d̵" + case 282: + return "Ĕ" + case 283: + return "ĕ" + case 294: + return "H̵" + case 295: + return "h̵" + case 305: + return "i" + case 306: + return "lJ" + case 307: + return "ij" + case 319: + return "l·" + case 320: + return "l·" + case 321: + return "L̸" + case 322: + return "l̸" + case 326: + return "ɲ" + case 329: + return "'n" + case 336: + return "Ö" + case 338: + return "OE" + case 339: + return "oe" + case 355: + return "ƫ" + case 358: + return "T̵" + case 359: + return "t̵" + case 383: + return "f" + case 384: + return "b̵" + case 385: + return "'B" + case 386: + return "b̄" + case 387: + return "b̄" + case 388: + return "b" + case 391: + return "C'" + case 393: + return "D̵" + case 394: + return "'D" + case 396: + return "d̄" + case 397: + return "g" + case 401: + return "F̦" + case 402: + return "f̦" + case 403: + return "G'" + case 406: + return "l" + case 407: + return "l̵" + case 408: + return "K'" + case 409: + return "k̔" + case 410: + return "l̵" + case 413: + return "N̦" + case 414: + return "n̩" + case 415: + return "O̵" + case 416: + return "O'" + case 417: + return "o'" + case 420: + return "'P" + case 421: + return "p̔" + case 422: + return "R" + case 423: + return "2" + case 428: + return "'T" + case 429: + return "t̔" + case 430: + return "T̨" + case 435: + return "'Y" + case 436: + return "y̔" + case 437: + return "Z̵" + case 438: + return "z̵" + case 439: + return "3" + case 443: + return "2̵" + case 444: + return "5" + case 445: + return "s" + case 447: + return "þ" + case 448: + return "l" + case 449: + return "ll" + case 451: + return "!" + case 452: + return "DŽ" + case 453: + return "Dž" + case 454: + return "dž" + case 455: + return "LJ" + case 456: + return "Lj" + case 457: + return "lj" + case 458: + return "NJ" + case 459: + return "Nj" + case 460: + return "nj" + case 461: + return "Ă" + case 462: + return "ă" + case 463: + return "Ĭ" + case 464: + return "ĭ" + case 465: + return "Ŏ" + case 466: + return "ŏ" + case 467: + return "Ŭ" + case 468: + return "ŭ" + case 484: + return "G̵" + case 485: + return "g̵" + case 486: + return "Ğ" + case 487: + return "ğ" + case 497: + return "DZ" + case 498: + return "Dz" + case 499: + return "dz" + case 501: + return "ģ" + case 510: + return "Ó̸" + case 538: + return "Ţ" + case 539: + return "ƫ" + case 540: + return "3" + case 546: + return "8" + case 547: + return "8" + case 548: + return "Z̦" + case 549: + return "z̦" + case 550: + return "Å" + case 551: + return "å" + case 572: + return "c̸" + case 574: + return "T̸" + case 577: + return "?" + case 580: + return "U̵" + case 582: + return "E̸" + case 583: + return "e̸" + case 584: + return "J̵" + case 585: + return "j̵" + case 589: + return "r̵" + case 590: + return "Y̵" + case 591: + return "y̵" + case 593: + return "a" + case 595: + return "b̔" + case 598: + return "d̨" + case 599: + return "d̔" + case 601: + return "ǝ" + case 602: + return "ǝ˞" + case 603: + return "ꞓ" + case 608: + return "g̔" + case 609: + return "g" + case 611: + return "y" + case 614: + return "h̔" + case 616: + return "i̵" + case 617: + return "i" + case 618: + return "i" + case 619: + return "l̴" + case 621: + return "l̨" + case 622: + return "lȝ" + case 623: + return "w" + case 625: + return "rn̦" + case 627: + return "n̨" + case 629: + return "o̵" + case 630: + return "oᴇ" + case 636: + return "r̩" + case 637: + return "r̨" + case 642: + return "s̨" + case 651: + return "u" + case 655: + return "y" + case 656: + return "z̨" + case 658: + return "ȝ" + case 660: + return "?" + case 672: + return "q̔" + case 675: + return "dz" + case 676: + return "dȝ" + case 677: + return "dʑ" + case 678: + return "ts" + case 679: + return "tʃ" + case 680: + return "tɕ" + case 681: + return "fŋ" + case 682: + return "ls" + case 683: + return "lz" + case 691: + return "ᣴ" + case 697: + return "'" + case 698: + return "''" + case 699: + return "'" + case 700: + return "'" + case 701: + return "'" + case 702: + return "'" + case 703: + return "ՙ" + case 706: + return "<" + case 707: + return ">" + case 708: + return "^" + case 710: + return "^" + case 712: + return "'" + case 714: + return "'" + case 715: + return "'" + case 720: + return ":" + case 723: + return "ՙ" + case 727: + return "-" + case 728: + return "ˇ" + case 729: + return "ॱ" + case 730: + return "°" + case 731: + return "i" + case 732: + return "~" + case 733: + return "''" + case 737: + return "ᣳ" + case 738: + return "ᣵ" + case 740: + return "ˁ" + case 750: + return "''" + case 756: + return "'" + case 758: + return "''" + case 760: + return ":" + case 763: + return "˪" + case 773: + return "̄" + case 780: + return "̆" + case 781: + return "ٰ" + case 784: + return "̆̇" + case 785: + return "̂" + case 789: + return "̓" + case 791: + return "ِ" + case 800: + return "̱" + case 801: + return "̦" + case 802: + return "̨" + case 807: + return "̦" + case 822: + return "̵" + case 823: + return "̸" + case 825: + return "̦" + case 832: + return "̀" + case 833: + return "́" + case 834: + return "̃" + case 835: + return "̓" + case 837: + return "̨" + case 839: + return "̳" + case 855: + return "͐" + case 856: + return "̇" + case 870: + return "̊" + case 878: + return "̆" + case 880: + return "Ⱶ" + case 884: + return "'" + case 885: + return "ˏ" + case 886: + return "И" + case 887: + return "ᴎ" + case 890: + return "i" + case 891: + return "ɔ" + case 893: + return "ꜿ" + case 894: + return ";" + case 895: + return "J" + case 900: + return "'" + case 903: + return "·" + case 913: + return "A" + case 914: + return "B" + case 917: + return "E" + case 918: + return "Z" + case 919: + return "H" + case 920: + return "O̵" + case 921: + return "l" + case 922: + return "K" + case 923: + return "Ʌ" + case 924: + return "M" + case 925: + return "N" + case 927: + return "O" + case 929: + return "P" + case 931: + return "Ʃ" + case 932: + return "T" + case 933: + return "Y" + case 935: + return "X" + case 945: + return "a" + case 946: + return "ß" + case 947: + return "y" + case 948: + return "ẟ" + case 949: + return "ꞓ" + case 951: + return "n̩" + case 952: + return "O̵" + case 953: + return "i" + case 954: + return "ĸ" + case 957: + return "v" + case 959: + return "o" + case 961: + return "p" + case 963: + return "o" + case 964: + return "ᴛ" + case 965: + return "u" + case 966: + return "ɸ" + case 976: + return "ß" + case 977: + return "O̵" + case 978: + return "Y" + case 981: + return "ɸ" + case 982: + return "π" + case 987: + return "ς" + case 988: + return "F" + case 1000: + return "2" + case 1001: + return "ƨ" + case 1008: + return "ĸ" + case 1009: + return "p" + case 1010: + return "c" + case 1011: + return "j" + case 1012: + return "O̵" + case 1013: + return "ꞓ" + case 1015: + return "Þ" + case 1016: + return "þ" + case 1017: + return "C" + case 1018: + return "M" + case 1021: + return "Ɔ" + case 1023: + return "Ꜿ" + case 1028: + return "Ꞓ" + case 1029: + return "S" + case 1030: + return "l" + case 1032: + return "J" + case 1040: + return "A" + case 1041: + return "b̄" + case 1042: + return "B" + case 1043: + return "Γ" + case 1045: + return "E" + case 1047: + return "3" + case 1049: + return "Ѝ" + case 1050: + return "K" + case 1051: + return "Ʌ" + case 1052: + return "M" + case 1053: + return "H" + case 1054: + return "O" + case 1055: + return "Π" + case 1056: + return "P" + case 1057: + return "C" + case 1058: + return "T" + case 1059: + return "Y" + case 1060: + return "Φ" + case 1061: + return "X" + case 1067: + return "bl" + case 1068: + return "b" + case 1070: + return "lO" + case 1072: + return "a" + case 1073: + return "6" + case 1074: + return "ʙ" + case 1075: + return "r" + case 1077: + return "e" + case 1079: + return "ɜ" + case 1080: + return "ᴎ" + case 1082: + return "ĸ" + case 1084: + return "ʍ" + case 1085: + return "ʜ" + case 1086: + return "o" + case 1087: + return "π" + case 1088: + return "p" + case 1089: + return "c" + case 1090: + return "ᴛ" + case 1091: + return "y" + case 1092: + return "ɸ" + case 1093: + return "x" + case 1098: + return "ˉb" + case 1099: + return "ƅi" + case 1100: + return "ƅ" + case 1103: + return "ᴙ" + case 1108: + return "ꞓ" + case 1109: + return "s" + case 1110: + return "i" + case 1112: + return "j" + case 1115: + return "h̵" + case 1117: + return "й" + case 1121: + return "w" + case 1122: + return "b̵" + case 1123: + return "b̵" + case 1136: + return "Ψ" + case 1137: + return "ψ" + case 1138: + return "O̵" + case 1139: + return "o̵" + case 1140: + return "V" + case 1141: + return "v" + case 1148: + return "Ѡ҆҇" + case 1149: + return "w҆҇" + case 1162: + return "Ѝ̦" + case 1163: + return "й̦" + case 1164: + return "b̵" + case 1165: + return "b̵" + case 1168: + return "Γ'" + case 1169: + return "r'" + case 1170: + return "Γ̵" + case 1171: + return "r̵" + case 1174: + return "Ж̩" + case 1175: + return "ж̩" + case 1176: + return "3̦" + case 1177: + return "ɜ̦" + case 1178: + return "K̩" + case 1179: + return "ĸ̩" + case 1182: + return "K̵" + case 1183: + return "ĸ̵" + case 1186: + return "H̩" + case 1187: + return "ʜ̩" + case 1194: + return "C̦" + case 1195: + return "c̦" + case 1196: + return "T̩" + case 1197: + return "ᴛ̩" + case 1198: + return "Y" + case 1199: + return "y" + case 1200: + return "Y̵" + case 1201: + return "y̵" + case 1202: + return "X̩" + case 1211: + return "h" + case 1213: + return "e" + case 1214: + return "Ҽ̨" + case 1215: + return "ę" + case 1216: + return "l" + case 1221: + return "Ʌ̦" + case 1222: + return "л̦" + case 1223: + return "H̦" + case 1224: + return "ʜ̦" + case 1225: + return "H̦" + case 1226: + return "ʜ̦" + case 1227: + return "Ҷ" + case 1228: + return "ҷ" + case 1229: + return "M̦" + case 1230: + return "ʍ̦" + case 1231: + return "i" + case 1236: + return "AE" + case 1237: + return "ae" + case 1240: + return "Ə" + case 1241: + return "ǝ" + case 1248: + return "3" + case 1249: + return "ȝ" + case 1256: + return "O̵" + case 1257: + return "o̵" + case 1281: + return "d" + case 1290: + return "Ƕ" + case 1292: + return "G" + case 1293: + return "ɢ" + case 1296: + return "Ɛ" + case 1297: + return "ꞓ" + case 1307: + return "q" + case 1308: + return "W" + case 1309: + return "w" + case 1339: + return "ኮ" + case 1348: + return "ሆ" + case 1354: + return "ጣ" + case 1356: + return "ቡ" + case 1357: + return "U" + case 1359: + return "S" + case 1363: + return "Φ" + case 1365: + return "O" + case 1370: + return "'" + case 1373: + return "'" + case 1377: + return "w" + case 1379: + return "q" + case 1382: + return "q" + case 1390: + return "ẟ" + case 1392: + return "h" + case 1397: + return "ȷ" + case 1400: + return "n" + case 1402: + return "ɰ" + case 1404: + return "n" + case 1405: + return "u" + case 1409: + return "g" + case 1412: + return "f" + case 1413: + return "o" + case 1415: + return "եւ" + case 1417: + return ":" + case 1436: + return "́" + case 1437: + return "́" + case 1444: + return "֚" + case 1448: + return "֙" + case 1453: + return "֖" + case 1454: + return "֘" + case 1455: + return "̊" + case 1460: + return "̣" + case 1465: + return "̇" + case 1466: + return "̇" + case 1472: + return "l" + case 1473: + return "̇" + case 1474: + return "̇" + case 1475: + return ":" + case 1476: + return "̇" + case 1477: + return "̣" + case 1493: + return "l" + case 1496: + return "v" + case 1497: + return "'" + case 1503: + return "l" + case 1505: + return "o" + case 1520: + return "ll" + case 1521: + return "l'" + case 1522: + return "''" + case 1523: + return "'" + case 1524: + return "''" + case 1545: + return "º/₀₀" + case 1546: + return "º/₀₀₀" + case 1549: + return "," + case 1551: + return "ع" + case 1560: + return "́" + case 1561: + return "̓" + case 1562: + return "ِ" + case 1571: + return "lٴ" + case 1572: + return "وٴ" + case 1573: + return "lٕ" + case 1574: + return "ىٴ" + case 1575: + return "l" + case 1579: + return "ىۛ" + case 1588: + return "سۛ" + case 1597: + return "ى̂" + case 1599: + return "ىۛ" + case 1607: + return "o" + case 1610: + return "ى" + case 1611: + return "̋" + case 1614: + return "́" + case 1615: + return "̓" + case 1618: + return "̊" + case 1619: + return "̃" + case 1622: + return "̩" + case 1623: + return "̒" + case 1624: + return "̆" + case 1625: + return "̄" + case 1626: + return "̆" + case 1627: + return "̂" + case 1628: + return "̣" + case 1629: + return "̔" + case 1631: + return "ٕ" + case 1632: + return "." + case 1633: + return "l" + case 1637: + return "o" + case 1639: + return "V" + case 1640: + return "Ʌ" + case 1642: + return "º/₀" + case 1643: + return "," + case 1644: + return "،" + case 1645: + return "*" + case 1646: + return "ى" + case 1647: + return "ڡ" + case 1650: + return "lٴ" + case 1651: + return "lٕ" + case 1653: + return "lٴ" + case 1654: + return "وٴ" + case 1655: + return "و̓ٴ" + case 1656: + return "ىٴ" + case 1657: + return "ىؕ" + case 1662: + return "ىۛ" + case 1665: + return "حٔ" + case 1669: + return "حۛ" + case 1672: + return "دؕ" + case 1675: + return "ڊؕ" + case 1678: + return "دۛ" + case 1681: + return "رؕ" + case 1682: + return "ر̆" + case 1688: + return "رۛ" + case 1694: + return "صۛ" + case 1695: + return "طۛ" + case 1700: + return "ڡۛ" + case 1703: + return "ف" + case 1704: + return "ڡۛ" + case 1705: + return "ك" + case 1706: + return "ك" + case 1709: + return "كۛ" + case 1716: + return "گۛ" + case 1717: + return "ل̆" + case 1719: + return "لۛ" + case 1722: + return "ى" + case 1723: + return "ىؕ" + case 1725: + return "ىۛ" + case 1726: + return "o" + case 1729: + return "o" + case 1730: + return "ۀ" + case 1731: + return "ة" + case 1734: + return "و̆" + case 1735: + return "و̓" + case 1736: + return "وٰ" + case 1737: + return "و̂" + case 1739: + return "وۛ" + case 1740: + return "ى" + case 1742: + return "ى̆" + case 1744: + return "ٻ" + case 1745: + return "ىۛ" + case 1746: + return "ى" + case 1748: + return "-" + case 1749: + return "o" + case 1759: + return "̊" + case 1768: + return "̆̇" + case 1772: + return "̇" + case 1774: + return "د̂" + case 1775: + return "ر̂" + case 1776: + return "." + case 1777: + return "l" + case 1778: + return "٢" + case 1779: + return "٣" + case 1780: + return "٤" + case 1781: + return "o" + case 1782: + return "٦" + case 1783: + return "V" + case 1784: + return "Ʌ" + case 1785: + return "٩" + case 1789: + return "ء͈" + case 1790: + return "م͈" + case 1791: + return "ô" + case 1793: + return "." + case 1794: + return "." + case 1795: + return ":" + case 1796: + return ":" + case 1856: + return "̇" + case 1857: + return "̇" + case 1858: + return "ܼ" + case 1863: + return "́" + case 1873: + return "بۛ" + case 1878: + return "ى̆" + case 1890: + return "ڬ" + case 1891: + return "كۛ" + case 1895: + return "ݔ" + case 1896: + return "نؕ" + case 1897: + return "ن̆" + case 1900: + return "رٔ" + case 1905: + return "ڗؕ" + case 1906: + return "حٔ" + case 1918: + return "س̂" + case 1984: + return "O" + case 1994: + return "l" + case 2027: + return "̄" + case 2029: + return "̇" + case 2030: + return "̂" + case 2035: + return "̈" + case 2036: + return "'" + case 2037: + return "'" + case 2042: + return "_" + case 2209: + return "بٔ" + case 2212: + return "ڢۛ" + case 2215: + return "مۛ" + case 2216: + return "ىٔ" + case 2217: + return "ݔ" + case 2222: + return "د̤̣" + case 2223: + return "ص̤̣" + case 2224: + return "گ" + case 2225: + return "و" + case 2226: + return "ز̂" + case 2230: + return "بۢ" + case 2231: + return "ىۛۢ" + case 2233: + return "ر̆̇" + case 2234: + return "ى̆̇" + case 2235: + return "ڡ" + case 2236: + return "ڡ" + case 2237: + return "ى" + case 2277: + return "ٌ" + case 2280: + return "ٌ" + case 2282: + return "̇" + case 2283: + return "̈" + case 2285: + return "̣" + case 2286: + return "̤" + case 2288: + return "̋" + case 2289: + return "ٌ" + case 2290: + return "ٍ" + case 2291: + return "̓" + case 2296: + return "͐" + case 2297: + return "͔" + case 2298: + return "͕" + case 2303: + return "͐" + case 2304: + return "͒" + case 2305: + return "̆̇" + case 2306: + return "̇" + case 2307: + return ":" + case 2308: + return "अॆ" + case 2310: + return "अा" + case 2312: + return "र्इ" + case 2317: + return "एॅ" + case 2318: + return "एॆ" + case 2320: + return "एे" + case 2321: + return "अॉ" + case 2322: + return "अाॆ" + case 2323: + return "अाे" + case 2324: + return "अाै" + case 2364: + return "̣" + case 2386: + return "̱" + case 2387: + return "̀" + case 2388: + return "́" + case 2405: + return "।।" + case 2406: + return "o" + case 2407: + return "٩" + case 2429: + return "?" + case 2433: + return "̆̇" + case 2438: + return "অা" + case 2492: + return "̣" + case 2528: + return "ঋৃ" + case 2529: + return "ঋৃ" + case 2534: + return "O" + case 2538: + return "8" + case 2541: + return "9" + case 2562: + return "̇" + case 2563: + return "ঃ" + case 2566: + return "ਅਾ" + case 2567: + return "ੲਿ" + case 2568: + return "ੲੀ" + case 2569: + return "ੳੁ" + case 2570: + return "ੳੂ" + case 2575: + return "ੲੇ" + case 2576: + return "ਅੈ" + case 2580: + return "ਅੌ" + case 2620: + return "̣" + case 2635: + return "ॆ" + case 2637: + return "्" + case 2662: + return "o" + case 2663: + return "9" + case 2666: + return "8" + case 2689: + return "̆̇" + case 2690: + return "̇" + case 2691: + return ":" + case 2694: + return "અા" + case 2701: + return "અૅ" + case 2703: + return "અે" + case 2704: + return "અૈ" + case 2705: + return "અાૅ" + case 2707: + return "અાે" + case 2708: + return "અાૈ" + case 2748: + return "̣" + case 2749: + return "ऽ" + case 2753: + return "ु" + case 2754: + return "ू" + case 2765: + return "्" + case 2790: + return "o" + case 2792: + return "२" + case 2793: + return "३" + case 2794: + return "४" + case 2798: + return "८" + case 2800: + return "॰" + case 2817: + return "̆̇" + case 2819: + return "8" + case 2822: + return "ଅା" + case 2848: + return "O" + case 2876: + return "̣" + case 2918: + return "O" + case 2920: + return "9" + case 2946: + return "̊" + case 2954: + return "உள" + case 2972: + return "ஐ" + case 2992: + return "ஈ" + case 3006: + return "ஈ" + case 3016: + return "ன" + case 3018: + return "ெஈ" + case 3019: + return "ேஈ" + case 3020: + return "ெள" + case 3021: + return "̇" + case 3031: + return "ள" + case 3046: + return "o" + case 3047: + return "க" + case 3048: + return "உ" + case 3050: + return "ச" + case 3051: + return "ஈு" + case 3052: + return "சு" + case 3053: + return "எ" + case 3054: + return "அ" + case 3056: + return "ய" + case 3058: + return "சூ" + case 3060: + return "மீ" + case 3061: + return "௳" + case 3063: + return "எவ" + case 3064: + return "ஷ" + case 3066: + return "நீ" + case 3072: + return "̆̇" + case 3074: + return "o" + case 3075: + return "ঃ" + case 3091: + return "ఒౕ" + case 3092: + return "ఒౌ" + case 3104: + return "రּ" + case 3106: + return "డ̣" + case 3109: + return "ధּ" + case 3117: + return "బ̣" + case 3118: + return "వు" + case 3127: + return "వ̣" + case 3129: + return "వా" + case 3138: + return "ుా" + case 3140: + return "ృా" + case 3168: + return "ఋా" + case 3169: + return "ఌా" + case 3174: + return "o" + case 3201: + return "̆̇" + case 3202: + return "o" + case 3203: + return "ঃ" + case 3205: + return "అ" + case 3206: + return "ఆ" + case 3207: + return "ఇ" + case 3218: + return "ఒ" + case 3219: + return "ఒౕ" + case 3220: + return "ఒౌ" + case 3228: + return "జ" + case 3230: + return "ఞ" + case 3235: + return "ణ" + case 3247: + return "య" + case 3249: + return "ఱ" + case 3250: + return "ల" + case 3297: + return "ಌಾ" + case 3302: + return "o" + case 3303: + return "౧" + case 3304: + return "౨" + case 3311: + return "౯" + case 3329: + return "̆̇" + case 3330: + return "o" + case 3331: + return "ঃ" + case 3336: + return "ഇൗ" + case 3337: + return "உ" + case 3338: + return "உൗ" + case 3340: + return "നു" + case 3344: + return "എെ" + case 3347: + return "ഒാ" + case 3348: + return "ഒൗ" + case 3353: + return "നു" + case 3356: + return "ஐ" + case 3360: + return "o" + case 3363: + return "ண" + case 3377: + return "ര" + case 3380: + return "ழ" + case 3382: + return "ஶ" + case 3386: + return "டி" + case 3391: + return "ி" + case 3392: + return "ி" + case 3394: + return "ു" + case 3395: + return "ു" + case 3400: + return "െെ" + case 3406: + return "ॱ" + case 3418: + return "ന്മ" + case 3423: + return "oരo" + case 3425: + return "ഞ" + case 3430: + return "o" + case 3434: + return "ര്" + case 3435: + return "ദ്ര" + case 3436: + return "ന്ന" + case 3437: + return "9" + case 3438: + return "വ്ര" + case 3439: + return "ന്" + case 3446: + return "ഹ്മ" + case 3449: + return "നു" + case 3451: + return "ന്" + case 3452: + return "ര്" + case 3458: + return "o" + case 3459: + return "ঃ" + case 3561: + return "෨ා" + case 3562: + return "ජ" + case 3563: + return "ද" + case 3567: + return "෨ී" + case 3587: + return "ข" + case 3595: + return "ช" + case 3599: + return "ฎ" + case 3604: + return "ค" + case 3605: + return "ค" + case 3607: + return "ฑ" + case 3617: + return "ฆ" + case 3622: + return "ภ" + case 3635: + return "̊า" + case 3649: + return "เเ" + case 3653: + return "า" + case 3661: + return "̊" + case 3664: + return "o" + case 3720: + return "จ" + case 3725: + return "ย" + case 3738: + return "บ" + case 3739: + return "ป" + case 3741: + return "ฝ" + case 3742: + return "พ" + case 3743: + return "ฟ" + case 3763: + return "̊າ" + case 3768: + return "ุ" + case 3769: + return "ู" + case 3784: + return "่" + case 3785: + return "้" + case 3786: + return "๊" + case 3787: + return "๋" + case 3789: + return "̊" + case 3792: + return "o" + case 3804: + return "ຫນ" + case 3805: + return "ຫມ" + case 3840: + return "ཨོཾ" + case 3842: + return "འུྂཿ" + case 3843: + return "འུྂ༔" + case 3852: + return "་" + case 3854: + return "།།" + case 3867: + return "༚༚" + case 3870: + return "༝༝" + case 3871: + return "༚༝" + case 3895: + return "̥" + case 3946: + return "ར" + case 3959: + return "ྲཱྀ" + case 3961: + return "ླཱྀ" + case 4046: + return "༝༚" + case 4053: + return "卐" + case 4054: + return "卍" + case 4096: + return "ဂာ" + case 4112: + return "oာ" + case 4125: + return "o" + case 4127: + return "ပာ" + case 4137: + return "သြ" + case 4138: + return "သြော်" + case 4150: + return "̊" + case 4152: + return "ঃ" + case 4160: + return "o" + case 4171: + return "၊၊" + case 4197: + return "၁" + case 4198: + return "ပှ" + case 4207: + return "ပာှ" + case 4208: + return "ဃှ" + case 4222: + return "ၽှ" + case 4225: + return "ဂှ" + case 4254: + return "ႃ̊" + case 4256: + return "Ꞇ" + case 4327: + return "y" + case 4339: + return "ȝ" + case 4351: + return "o" + case 4353: + return "ᄀᄀ" + case 4356: + return "ᄃᄃ" + case 4360: + return "ᄇᄇ" + case 4362: + return "ᄉᄉ" + case 4365: + return "ᄌᄌ" + case 4371: + return "ᄂᄀ" + case 4372: + return "ᄂᄂ" + case 4373: + return "ᄂᄃ" + case 4374: + return "ᄂᄇ" + case 4375: + return "ᄃᄀ" + case 4376: + return "ᄅᄂ" + case 4377: + return "ᄅᄅ" + case 4378: + return "ᄅᄒ" + case 4379: + return "ᄅᄋ" + case 4380: + return "ᄆᄇ" + case 4381: + return "ᄆᄋ" + case 4382: + return "ᄇᄀ" + case 4383: + return "ᄇᄂ" + case 4384: + return "ᄇᄃ" + case 4385: + return "ᄇᄉ" + case 4386: + return "ᄇᄉᄀ" + case 4387: + return "ᄇᄉᄃ" + case 4388: + return "ᄇᄉᄇ" + case 4389: + return "ᄇᄉᄉ" + case 4390: + return "ᄇᄉᄌ" + case 4391: + return "ᄇᄌ" + case 4392: + return "ᄇᄎ" + case 4393: + return "ᄇᄐ" + case 4394: + return "ᄇᄑ" + case 4395: + return "ᄇᄋ" + case 4396: + return "ᄇᄇᄋ" + case 4397: + return "ᄉᄀ" + case 4398: + return "ᄉᄂ" + case 4399: + return "ᄉᄃ" + case 4400: + return "ᄉᄅ" + case 4401: + return "ᄉᄆ" + case 4402: + return "ᄉᄇ" + case 4403: + return "ᄉᄇᄀ" + case 4404: + return "ᄉᄉᄉ" + case 4405: + return "ᄉᄋ" + case 4406: + return "ᄉᄌ" + case 4407: + return "ᄉᄎ" + case 4408: + return "ᄉᄏ" + case 4409: + return "ᄉᄐ" + case 4410: + return "ᄉᄑ" + case 4411: + return "ᄅᄒ" + case 4413: + return "ᄼᄼ" + case 4415: + return "ᄾᄾ" + case 4417: + return "ᄋᄀ" + case 4418: + return "ᄋᄃ" + case 4419: + return "ᄋᄆ" + case 4420: + return "ᄋᄇ" + case 4421: + return "ᄋᄉ" + case 4422: + return "ᄋᅀ" + case 4423: + return "ᄋᄋ" + case 4424: + return "ᄋᄌ" + case 4425: + return "ᄋᄎ" + case 4426: + return "ᄋᄐ" + case 4427: + return "ᄋᄑ" + case 4429: + return "ᄌᄋ" + case 4431: + return "ᅎᅎ" + case 4433: + return "ᅐᅐ" + case 4434: + return "ᄎᄏ" + case 4435: + return "ᄎᄒ" + case 4438: + return "ᄑᄇ" + case 4439: + return "ᄑᄋ" + case 4440: + return "ᄒᄒ" + case 4442: + return "ᄀᄃ" + case 4443: + return "ᄂᄉ" + case 4444: + return "ᄂᄌ" + case 4445: + return "ᄂᄒ" + case 4446: + return "ᄃᄅ" + case 4450: + return "ᅡ丨" + case 4452: + return "ᅣ丨" + case 4454: + return "ᅥ丨" + case 4456: + return "ᅧ丨" + case 4458: + return "ᅩᅡ" + case 4459: + return "ᅩᅡ丨" + case 4460: + return "ᅩ丨" + case 4463: + return "ᅮᅥ" + case 4464: + return "ᅮᅥ丨" + case 4465: + return "ᅮ丨" + case 4467: + return "ー" + case 4468: + return "ー丨" + case 4469: + return "丨" + case 4470: + return "ᅡᅩ" + case 4471: + return "ᅡᅮ" + case 4472: + return "ᅣᅩ" + case 4473: + return "ᅣᅭ" + case 4474: + return "ᅥᅩ" + case 4475: + return "ᅥᅮ" + case 4476: + return "ᅥー" + case 4477: + return "ᅧᅩ" + case 4478: + return "ᅧᅮ" + case 4479: + return "ᅩᅥ" + case 4480: + return "ᅩᅥ丨" + case 4481: + return "ᅩᅧ丨" + case 4482: + return "ᅩᅩ" + case 4483: + return "ᅩᅮ" + case 4484: + return "ᅭᅣ" + case 4485: + return "ᅭᅣ丨" + case 4486: + return "ᅭᅣ" + case 4487: + return "ᅭᅩ" + case 4488: + return "ᅭ丨" + case 4489: + return "ᅮᅡ" + case 4490: + return "ᅮᅡ丨" + case 4491: + return "ᅮᅥー" + case 4492: + return "ᅮᅧ丨" + case 4493: + return "ᅮᅮ" + case 4494: + return "ᅲᅡ" + case 4495: + return "ᅲᅥ" + case 4496: + return "ᅲᅥ丨" + case 4497: + return "ᅲᅧ" + case 4498: + return "ᅲᅧ丨" + case 4499: + return "ᅲᅮ" + case 4500: + return "ᅲ丨" + case 4501: + return "ーᅮ" + case 4502: + return "ーー" + case 4503: + return "ー丨ᅮ" + case 4504: + return "丨ᅡ" + case 4505: + return "丨ᅣ" + case 4506: + return "丨ᅩ" + case 4507: + return "丨ᅮ" + case 4508: + return "丨ー" + case 4509: + return "丨ᆞ" + case 4511: + return "ᆞᅥ" + case 4512: + return "ᆞᅮ" + case 4513: + return "ᆞ丨" + case 4514: + return "ᆞᆞ" + case 4515: + return "ᅡー" + case 4516: + return "ᅣᅮ" + case 4517: + return "ᅧᅣ" + case 4518: + return "ᅩᅣ" + case 4519: + return "ᅩᅣ丨" + case 4520: + return "ᄀ" + case 4521: + return "ᄀᄀ" + case 4522: + return "ᄀᄉ" + case 4523: + return "ᄂ" + case 4524: + return "ᄂᄌ" + case 4525: + return "ᄂᄒ" + case 4526: + return "ᄃ" + case 4527: + return "ᄅ" + case 4528: + return "ᄅᄀ" + case 4529: + return "ᄅᄆ" + case 4530: + return "ᄅᄇ" + case 4531: + return "ᄅᄉ" + case 4532: + return "ᄅᄐ" + case 4533: + return "ᄅᄑ" + case 4534: + return "ᄅᄒ" + case 4535: + return "ᄆ" + case 4536: + return "ᄇ" + case 4537: + return "ᄇᄉ" + case 4538: + return "ᄉ" + case 4539: + return "ᄉᄉ" + case 4540: + return "ᄋ" + case 4541: + return "ᄌ" + case 4542: + return "ᄎ" + case 4543: + return "ᄏ" + case 4544: + return "ᄐ" + case 4545: + return "ᄑ" + case 4546: + return "ᄒ" + case 4547: + return "ᄀᄅ" + case 4548: + return "ᄀᄉᄀ" + case 4549: + return "ᄂᄀ" + case 4550: + return "ᄂᄃ" + case 4551: + return "ᄂᄉ" + case 4552: + return "ᄂᅀ" + case 4553: + return "ᄂᄐ" + case 4554: + return "ᄃᄀ" + case 4555: + return "ᄃᄅ" + case 4556: + return "ᄅᄀᄉ" + case 4557: + return "ᄅᄂ" + case 4558: + return "ᄅᄃ" + case 4559: + return "ᄅᄃᄒ" + case 4560: + return "ᄅᄅ" + case 4561: + return "ᄅᄆᄀ" + case 4562: + return "ᄅᄆᄉ" + case 4563: + return "ᄅᄇᄉ" + case 4564: + return "ᄅᄇᄒ" + case 4565: + return "ᄅᄇᄋ" + case 4566: + return "ᄅᄉᄉ" + case 4567: + return "ᄅᅀ" + case 4568: + return "ᄅᄏ" + case 4569: + return "ᄅᅙ" + case 4570: + return "ᄆᄀ" + case 4571: + return "ᄆᄅ" + case 4572: + return "ᄆᄇ" + case 4573: + return "ᄆᄉ" + case 4574: + return "ᄆᄉᄉ" + case 4575: + return "ᄆᅀ" + case 4576: + return "ᄆᄎ" + case 4577: + return "ᄆᄒ" + case 4578: + return "ᄆᄋ" + case 4579: + return "ᄇᄅ" + case 4580: + return "ᄇᄑ" + case 4581: + return "ᄇᄒ" + case 4582: + return "ᄇᄋ" + case 4583: + return "ᄉᄀ" + case 4584: + return "ᄉᄃ" + case 4585: + return "ᄉᄅ" + case 4586: + return "ᄉᄇ" + case 4587: + return "ᅀ" + case 4588: + return "ᄋᄀ" + case 4589: + return "ᄋᄀᄀ" + case 4590: + return "ᄋᄋ" + case 4591: + return "ᄋᄏ" + case 4592: + return "ᅌ" + case 4593: + return "ᄋᄉ" + case 4594: + return "ᄋᅀ" + case 4595: + return "ᄑᄇ" + case 4596: + return "ᄑᄋ" + case 4597: + return "ᄒᄂ" + case 4598: + return "ᄒᄅ" + case 4599: + return "ᄒᄆ" + case 4600: + return "ᄒᄇ" + case 4601: + return "ᅙ" + case 4602: + return "ᄀᄂ" + case 4603: + return "ᄀᄇ" + case 4604: + return "ᄀᄎ" + case 4605: + return "ᄀᄏ" + case 4606: + return "ᄀᄒ" + case 4607: + return "ᄂᄂ" + case 4608: + return "U" + case 4643: + return "ɰ" + case 4672: + return "Φ" + case 4704: + return "Ո" + case 4756: + return "ձ" + case 4816: + return "O" + case 5024: + return "D" + case 5025: + return "R" + case 5026: + return "T" + case 5028: + return "O'" + case 5029: + return "i" + case 5032: + return "Ⱶ" + case 5033: + return "Y" + case 5034: + return "A" + case 5035: + return "J" + case 5036: + return "E" + case 5038: + return "?" + case 5040: + return "Ⱶ" + case 5041: + return "Γ" + case 5043: + return "W" + case 5047: + return "M" + case 5051: + return "H" + case 5053: + return "Y" + case 5054: + return "O̵" + case 5055: + return "ƫ" + case 5056: + return "G" + case 5058: + return "h" + case 5059: + return "Z" + case 5063: + return "Ѡ" + case 5067: + return "Ɛ" + case 5068: + return "U̵" + case 5070: + return "4" + case 5071: + return "b" + case 5074: + return "R" + case 5076: + return "W" + case 5077: + return "S" + case 5081: + return "V" + case 5082: + return "S" + case 5086: + return "L" + case 5087: + return "C" + case 5090: + return "P" + case 5094: + return "K" + case 5095: + return "d" + case 5099: + return "O̵" + case 5102: + return "6" + case 5104: + return "ß" + case 5106: + return "h̔" + case 5107: + return "G" + case 5108: + return "B" + case 5115: + return "ɢ" + case 5116: + return "ʙ" + case 5120: + return "=" + case 5123: + return "Δ" + case 5132: + return "·ᐁ" + case 5133: + return "ᐁ·" + case 5134: + return "·Δ" + case 5135: + return "Δ·" + case 5136: + return "·ᐄ" + case 5137: + return "ᐄ·" + case 5138: + return "·ᐅ" + case 5139: + return "ᐅ·" + case 5140: + return "·ᐆ" + case 5141: + return "ᐆ·" + case 5143: + return "·ᐊ" + case 5144: + return "ᐊ·" + case 5145: + return "·ᐋ" + case 5146: + return "ᐋ·" + case 5159: + return "·" + case 5163: + return "ᐁᐠ" + case 5164: + return "Δᐠ" + case 5165: + return "ᐅᐠ" + case 5166: + return "ᐊᐠ" + case 5167: + return "V" + case 5169: + return "Ʌ" + case 5171: + return ">" + case 5175: + return "·>" + case 5176: + return "<" + case 5178: + return "·V" + case 5179: + return "V·" + case 5180: + return "·Ʌ" + case 5181: + return "Ʌ·" + case 5182: + return "·ᐲ" + case 5183: + return "ᐲ·" + case 5184: + return "·>" + case 5185: + return ">·" + case 5186: + return "·ᐴ" + case 5187: + return "ᐴ·" + case 5188: + return "·<" + case 5189: + return "<·" + case 5190: + return "·ᐹ" + case 5191: + return "ᐹ·" + case 5194: + return "'" + case 5196: + return "U" + case 5198: + return "Ո" + case 5204: + return "·ᑐ" + case 5207: + return "·U" + case 5208: + return "U·" + case 5209: + return "·Ո" + case 5210: + return "Ո·" + case 5211: + return "·ᑏ" + case 5212: + return "ᑏ·" + case 5213: + return "·ᑐ" + case 5214: + return "ᑐ·" + case 5215: + return "·ᑑ" + case 5216: + return "ᑑ·" + case 5217: + return "·ᑕ" + case 5218: + return "ᑕ·" + case 5219: + return "·ᑖ" + case 5220: + return "ᑖ·" + case 5223: + return "U'" + case 5224: + return "Ո'" + case 5225: + return "ᑐ'" + case 5226: + return "ᑕ'" + case 5229: + return "P" + case 5231: + return "d" + case 5234: + return "b" + case 5235: + return "ḃ" + case 5236: + return "·ᑫ" + case 5237: + return "ᑫ·" + case 5238: + return "·P" + case 5239: + return "p·" + case 5240: + return "·ᑮ" + case 5241: + return "ᑮ·" + case 5242: + return "·d" + case 5243: + return "d·" + case 5244: + return "·ᑰ" + case 5245: + return "ᑰ·" + case 5246: + return "·b" + case 5247: + return "b·" + case 5248: + return "·ḃ" + case 5249: + return "ḃ·" + case 5253: + return "ᑫ'" + case 5254: + return "P'" + case 5255: + return "d'" + case 5256: + return "b'" + case 5261: + return "J" + case 5266: + return "·ᒉ" + case 5267: + return "ᒉ·" + case 5268: + return "·ᒋ" + case 5269: + return "ᒋ·" + case 5270: + return "·ᒌ" + case 5271: + return "ᒌ·" + case 5272: + return "·J" + case 5273: + return "J·" + case 5274: + return "·ᒎ" + case 5275: + return "ᒎ·" + case 5276: + return "·ᒐ" + case 5277: + return "ᒐ·" + case 5278: + return "·ᒑ" + case 5279: + return "ᒑ·" + case 5285: + return "Γ" + case 5290: + return "L" + case 5292: + return "·ᒣ" + case 5293: + return "ᒣ·" + case 5294: + return "·Γ" + case 5295: + return "Γ·" + case 5296: + return "·ᒦ" + case 5297: + return "ᒦ·" + case 5298: + return "·ᒧ" + case 5299: + return "ᒧ·" + case 5300: + return "·ᒨ" + case 5301: + return "ᒨ·" + case 5302: + return "·L" + case 5303: + return "l·" + case 5304: + return "·ᒫ" + case 5305: + return "ᒫ·" + case 5311: + return "2" + case 5321: + return "·ᓀ" + case 5322: + return "ᓀ·" + case 5323: + return "·ᓇ" + case 5324: + return "ᓇ·" + case 5325: + return "·ᓈ" + case 5326: + return "ᓈ·" + case 5329: + return "ᐡ" + case 5340: + return "·ᓓ" + case 5341: + return "ᓓ·" + case 5342: + return "·ᓕ" + case 5343: + return "ᓕ·" + case 5344: + return "·ᓖ" + case 5345: + return "ᓖ·" + case 5346: + return "·ᓗ" + case 5347: + return "ᓗ·" + case 5348: + return "·ᓘ" + case 5349: + return "ᓘ·" + case 5350: + return "·ᓚ" + case 5351: + return "ᓚ·" + case 5352: + return "·ᓛ" + case 5353: + return "ᓛ·" + case 5366: + return "·ᓭ" + case 5367: + return "ᓭ·" + case 5368: + return "·ᓯ" + case 5369: + return "ᓯ·" + case 5370: + return "·ᓰ" + case 5371: + return "ᓰ·" + case 5372: + return "·ᓱ" + case 5373: + return "ᓱ·" + case 5374: + return "·ᓲ" + case 5375: + return "ᓲ·" + case 5376: + return "·ᓴ" + case 5377: + return "ᓴ·" + case 5378: + return "·ᓵ" + case 5379: + return "ᓵ·" + case 5388: + return "ᔋ<" + case 5389: + return "ᔋᑕ" + case 5390: + return "ᔋb" + case 5391: + return "ᔋᒐ" + case 5399: + return "·ᔐ" + case 5400: + return "ᔐ·" + case 5401: + return "·ᔑ" + case 5402: + return "ᔑ·" + case 5403: + return "·ᔒ" + case 5404: + return "ᔒ·" + case 5405: + return "·ᔓ" + case 5406: + return "ᔓ·" + case 5407: + return "·ᔔ" + case 5408: + return "ᔔ·" + case 5409: + return "·ᔕ" + case 5410: + return "ᔕ·" + case 5411: + return "·ᔖ" + case 5412: + return "ᔖ·" + case 5423: + return "·4" + case 5424: + return "4·" + case 5425: + return "·ᔨ" + case 5426: + return "ᔨ·" + case 5427: + return "·ᔩ" + case 5428: + return "ᔩ·" + case 5429: + return "·ᔪ" + case 5430: + return "ᔪ·" + case 5431: + return "·ᔫ" + case 5432: + return "ᔫ·" + case 5433: + return "·ᔭ" + case 5434: + return "ᔭ·" + case 5435: + return "·ᔮ" + case 5436: + return "ᔮ·" + case 5440: + return "ᐩ" + case 5441: + return "x" + case 5454: + return "·ᕌ" + case 5455: + return "ᕌ·" + case 5467: + return "·ᕚ" + case 5468: + return "ᕚ·" + case 5480: + return "·ᕧ" + case 5481: + return "ᕧ·" + case 5495: + return "ẟ" + case 5500: + return "H" + case 5501: + return "x" + case 5502: + return "ᕐᑬ" + case 5503: + return "ᕐP" + case 5504: + return "ᕐᑮ" + case 5505: + return "ᕐd" + case 5506: + return "ᕐᑰ" + case 5507: + return "ᕐb" + case 5508: + return "ᕐḃ" + case 5509: + return "ᕐᒃ" + case 5511: + return "R" + case 5518: + return "ᖕᒊ" + case 5519: + return "ᖕᒋ" + case 5520: + return "ᖕᒌ" + case 5521: + return "ᖕJ" + case 5522: + return "ᖕᒎ" + case 5523: + return "ᖕᒐ" + case 5524: + return "ᖕᒑ" + case 5551: + return "b" + case 5556: + return "F" + case 5557: + return "Ⅎ" + case 5559: + return "ꟻ" + case 5572: + return "Ɐ" + case 5573: + return "A" + case 5598: + return "D" + case 5610: + return "D" + case 5615: + return "Ѡ" + case 5616: + return "M" + case 5623: + return "B" + case 5634: + return "ᒐ" + case 5635: + return "ᒉ" + case 5636: + return "ᓓ" + case 5639: + return "ᓚ" + case 5666: + return "ᕃ" + case 5667: + return "ᕆ" + case 5668: + return "ᕊ" + case 5678: + return "Ʊ" + case 5679: + return "Ω" + case 5684: + return "Ʊ" + case 5685: + return "Ω" + case 5741: + return "X" + case 5742: + return "x" + case 5743: + return "ᕐᑫ" + case 5744: + return "ᖕᒉ" + case 5745: + return "ᖖᒋ" + case 5746: + return "ᖖᒌ" + case 5747: + return "ᖖJ" + case 5748: + return "ᖖᒎ" + case 5749: + return "ᖖᒐ" + case 5750: + return "ᖖᒑ" + case 5751: + return "ᖧ·" + case 5752: + return "ᖨ·" + case 5753: + return "ᖩ·" + case 5754: + return "ᖪ·" + case 5755: + return "ᖫ·" + case 5756: + return "ᖬ·" + case 5757: + return "ᖭ·" + case 5760: + return " " + case 5810: + return "<" + case 5815: + return "X" + case 5825: + return "l" + case 5826: + return "ᚽ" + case 5836: + return "'" + case 5845: + return "K" + case 5846: + return "M" + case 5848: + return "Ψ" + case 5857: + return "ᚼ" + case 5867: + return "·" + case 5868: + return ":" + case 5869: + return "+" + case 5872: + return "Φ" + case 5941: + return "/" + case 6051: + return "អ" + case 6071: + return "ิ" + case 6072: + return "ี" + case 6073: + return "ึ" + case 6074: + return "ื" + case 6086: + return "̊" + case 6091: + return "่" + case 6099: + return "̊" + case 6100: + return "ฯ" + case 6101: + return "๚" + case 6105: + return "๏" + case 6106: + return "๛" + case 6147: + return ":" + case 6153: + return ":" + case 6229: + return "ᠵ" + case 6294: + return "ᡜ" + case 6323: + return "·ᢱ" + case 6326: + return "·ᢴ" + case 6329: + return "·ᢸ" + case 6338: + return "·ᣀ" + case 6342: + return "·ᓂ" + case 6343: + return "ᓂ·" + case 6344: + return "·ᓃ" + case 6345: + return "ᓃ·" + case 6346: + return "·ᓄ" + case 6347: + return "ᓄ·" + case 6348: + return "·ᓅ" + case 6349: + return "ᓅ·" + case 6350: + return "·ᕃ" + case 6351: + return "·ᕆ" + case 6352: + return "·ᕇ" + case 6353: + return "·ᕈ" + case 6354: + return "·ᕉ" + case 6355: + return "·ᕋ" + case 6363: + return "ᣵ" + case 6364: + return "ᣟᐞ" + case 6365: + return "ᐞᣟ" + case 6368: + return "ᕃ·" + case 6371: + return "ᕞ·" + case 6372: + return "ᕦ·" + case 6373: + return "ᕫ·" + case 6376: + return "ᖆ·" + case 6378: + return "ᖗ·" + case 6381: + return "Ѡ·" + case 6384: + return "ᗴ·" + case 6386: + return "ᘛ·" + case 6608: + return "ᦞ" + case 6609: + return "ᦱ" + case 6784: + return "ᩅ" + case 6800: + return "ᩅ" + case 6825: + return "᪨᪨" + case 6827: + return "᪪᪨" + case 6836: + return "ۛ" + case 6839: + return "̨" + case 6994: + return "ᬍ" + case 6995: + return "ᬑ" + case 7000: + return "ᬨ" + case 7004: + return "᭐" + case 7007: + return "᭞᭞" + case 7228: + return "᰻᰻" + case 7295: + return "᱾᱾" + case 7376: + return "̂" + case 7378: + return "̄" + case 7379: + return "''" + case 7381: + return "̫" + case 7384: + return "̮" + case 7385: + return "̭" + case 7386: + return "̎" + case 7388: + return "̩" + case 7389: + return "̣" + case 7390: + return "̤" + case 7405: + return "̖" + case 7428: + return "c" + case 7432: + return "ɜ" + case 7435: + return "ĸ" + case 7437: + return "ʍ" + case 7439: + return "o" + case 7440: + return "ɔ" + case 7441: + return "o" + case 7444: + return "ǝo" + case 7452: + return "u" + case 7456: + return "v" + case 7457: + return "w" + case 7458: + return "z" + case 7460: + return "ƨ" + case 7462: + return "r" + case 7463: + return "ʌ" + case 7464: + return "π" + case 7465: + return "ᴘ" + case 7467: + return "л" + case 7486: + return "ᣖ" + case 7506: + return "º" + case 7531: + return "ue" + case 7534: + return "f̴" + case 7535: + return "rn̴" + case 7536: + return "n̴" + case 7538: + return "r̴" + case 7539: + return "ɾ̴" + case 7540: + return "s̴" + case 7541: + return "t̴" + case 7542: + return "z̴" + case 7544: + return "ᴴ" + case 7547: + return "i̵" + case 7548: + return "i̵" + case 7549: + return "p̵" + case 7550: + return "u̵" + case 7551: + return "ʊ̵" + case 7555: + return "g" + case 7564: + return "y" + case 7568: + return "ɋ" + case 7583: + return "ᵋ" + case 7586: + return "ᵍ" + case 7610: + return "ᣔ" + case 7611: + return "ᙆ" + case 7662: + return "ⷬ" + case 7747: + return "ꭑ" + case 7834: + return "ả" + case 7837: + return "f" + case 7935: + return "y" + case 8061: + return "ῴ" + case 8125: + return "'" + case 8126: + return "i" + case 8127: + return "'" + case 8128: + return "~" + case 8175: + return "'" + case 8182: + return "Ꮿ" + case 8189: + return "'" + case 8190: + return "'" + case 8192: + return " " + case 8193: + return " " + case 8194: + return " " + case 8195: + return " " + case 8196: + return " " + case 8197: + return " " + case 8198: + return " " + case 8199: + return " " + case 8200: + return " " + case 8201: + return " " + case 8202: + return " " + case 8208: + return "-" + case 8209: + return "-" + case 8210: + return "-" + case 8211: + return "-" + case 8212: + return "ー" + case 8213: + return "ー" + case 8214: + return "ll" + case 8216: + return "'" + case 8217: + return "'" + case 8218: + return "," + case 8219: + return "'" + case 8220: + return "''" + case 8221: + return "''" + case 8223: + return "''" + case 8226: + return "·" + case 8228: + return "." + case 8229: + return ".." + case 8230: + return "..." + case 8231: + return "·" + case 8232: + return " " + case 8233: + return " " + case 8239: + return " " + case 8240: + return "º/₀₀" + case 8241: + return "º/₀₀₀" + case 8242: + return "'" + case 8243: + return "''" + case 8244: + return "'''" + case 8245: + return "'" + case 8246: + return "''" + case 8247: + return "'''" + case 8249: + return "<" + case 8250: + return ">" + case 8252: + return "!!" + case 8254: + return "ˉ" + case 8257: + return "/" + case 8259: + return "-" + case 8260: + return "/" + case 8263: + return "??" + case 8264: + return "?!" + case 8265: + return "!?" + case 8270: + return "*" + case 8274: + return "º/₀" + case 8275: + return "~" + case 8279: + return "''''" + case 8282: + return ":" + case 8285: + return "ⵗ" + case 8286: + return "ⵂ" + case 8287: + return " " + case 8304: + return "º" + case 8313: + return "ꝰ" + case 8353: + return "C⃫" + case 8356: + return "£" + case 8357: + return "rn̸" + case 8360: + return "Rs" + case 8361: + return "W̵" + case 8363: + return "ḏ̵" + case 8364: + return "Ꞓ" + case 8365: + return "K̵" + case 8366: + return "T⃫" + case 8374: + return "lt" + case 8381: + return "Ք" + case 8411: + return "ۛ" + case 8448: + return "a/c" + case 8449: + return "a/s" + case 8450: + return "C" + case 8451: + return "°C" + case 8453: + return "c/o" + case 8454: + return "c/u" + case 8455: + return "Ɛ" + case 8456: + return "Э" + case 8457: + return "°F" + case 8458: + return "g" + case 8459: + return "H" + case 8460: + return "H" + case 8461: + return "H" + case 8462: + return "h" + case 8463: + return "h̵" + case 8464: + return "l" + case 8465: + return "l" + case 8466: + return "L" + case 8467: + return "l" + case 8469: + return "N" + case 8470: + return "No" + case 8473: + return "P" + case 8474: + return "Q" + case 8475: + return "R" + case 8476: + return "R" + case 8477: + return "R" + case 8481: + return "TEL" + case 8484: + return "Z" + case 8486: + return "Ω" + case 8487: + return "Ʊ" + case 8488: + return "Z" + case 8489: + return "ɿ" + case 8490: + return "K" + case 8492: + return "B" + case 8493: + return "C" + case 8494: + return "e" + case 8495: + return "e" + case 8496: + return "E" + case 8497: + return "F" + case 8499: + return "M" + case 8500: + return "o" + case 8501: + return "א" + case 8502: + return "ב" + case 8503: + return "ג" + case 8504: + return "ד" + case 8505: + return "i" + case 8507: + return "FAX" + case 8508: + return "π" + case 8509: + return "y" + case 8510: + return "Γ" + case 8511: + return "Π" + case 8512: + return "Ʃ" + case 8513: + return "ꓨ" + case 8514: + return "ꓶ" + case 8515: + return "𖼀" + case 8517: + return "D" + case 8518: + return "d" + case 8519: + return "e" + case 8520: + return "i" + case 8521: + return "j" + case 8544: + return "l" + case 8545: + return "ll" + case 8546: + return "lll" + case 8547: + return "lV" + case 8548: + return "V" + case 8549: + return "Vl" + case 8550: + return "Vll" + case 8551: + return "Vlll" + case 8552: + return "lX" + case 8553: + return "X" + case 8554: + return "Xl" + case 8555: + return "Xll" + case 8556: + return "L" + case 8557: + return "C" + case 8558: + return "D" + case 8559: + return "M" + case 8560: + return "i" + case 8561: + return "ii" + case 8562: + return "iii" + case 8563: + return "iv" + case 8564: + return "v" + case 8565: + return "vi" + case 8566: + return "vii" + case 8567: + return "viii" + case 8568: + return "ix" + case 8569: + return "x" + case 8570: + return "xi" + case 8571: + return "xii" + case 8572: + return "l" + case 8573: + return "c" + case 8574: + return "d" + case 8575: + return "rn" + case 8579: + return "Ɔ" + case 8580: + return "ɔ" + case 8593: + return "ᛏ" + case 8597: + return "ᛨ" + case 8629: + return "↲" + case 8634: + return "🄎" + case 8638: + return "ᛚ" + case 8639: + return "ᛐ" + case 8704: + return "Ɐ" + case 8707: + return "Ǝ" + case 8710: + return "Δ" + case 8719: + return "Π" + case 8721: + return "Ʃ" + case 8722: + return "-" + case 8724: + return "+̇" + case 8725: + return "/" + case 8726: + return "\\" + case 8727: + return "*" + case 8728: + return "°" + case 8729: + return "·" + case 8734: + return "oo" + case 8739: + return "l" + case 8741: + return "ll" + case 8744: + return "v" + case 8745: + return "Ո" + case 8746: + return "U" + case 8747: + return "ʃ" + case 8748: + return "ʃʃ" + case 8749: + return "ʃʃʃ" + case 8751: + return "∮∮" + case 8752: + return "∮∮∮" + case 8758: + return ":" + case 8760: + return "-̇" + case 8764: + return "~" + case 8784: + return "=̇" + case 8785: + return "=̣̇" + case 8791: + return "=̊" + case 8793: + return "=̂" + case 8794: + return "=̆" + case 8798: + return "=ͫ" + case 8803: + return "≡" + case 8810: + return "<<" + case 8811: + return ">>" + case 8834: + return "ᑕ" + case 8835: + return "ᑐ" + case 8853: + return "𐊨" + case 8854: + return "O̵" + case 8857: + return "ʘ" + case 8861: + return "O̵" + case 8868: + return "T" + case 8869: + return "ꓕ" + case 8896: + return "∧" + case 8897: + return "v" + case 8898: + return "Ո" + case 8899: + return "U" + case 8900: + return "ᛜ" + case 8901: + return "·" + case 8904: + return "ᛞ" + case 8918: + return "<·" + case 8919: + return "·>" + case 8920: + return "<<<" + case 8921: + return ">>>" + case 8942: + return "ⵗ" + case 8943: + return "···" + case 8948: + return "ꞓ" + case 8959: + return "E" + case 8960: + return "∅" + case 8997: + return "⌤" + case 9001: + return "❬" + case 9002: + return "❭" + case 9025: + return "〼" + case 9049: + return "Δ̲" + case 9050: + return "ᛜ̲" + case 9052: + return "°̲" + case 9055: + return "⊛" + case 9057: + return "T̈" + case 9058: + return "∇̈" + case 9059: + return "⋆̈" + case 9060: + return "°̈" + case 9061: + return "ة" + case 9064: + return "~̈" + case 9065: + return "ᐵ" + case 9067: + return "∇̴" + case 9068: + return "O̵" + case 9075: + return "i" + case 9076: + return "p" + case 9077: + return "ω" + case 9078: + return "a̲" + case 9079: + return "ꞓ̲" + case 9080: + return "i̲" + case 9081: + return "ω̲" + case 9082: + return "a" + case 9087: + return "ᚽ" + case 9116: + return "丨" + case 9119: + return "丨" + case 9122: + return "丨" + case 9125: + return "丨" + case 9130: + return "丨" + case 9134: + return "丨" + case 9153: + return "⍕" + case 9154: + return "⍎" + case 9155: + return "⍋" + case 9158: + return "⍭" + case 9192: + return "₁₀" + case 9212: + return "⏻" + case 9213: + return "l" + case 9214: + return "☾" + case 9290: + return "\\\\" + case 9312: + return "➀" + case 9313: + return "➁" + case 9314: + return "➂" + case 9315: + return "➃" + case 9316: + return "➄" + case 9317: + return "➅" + case 9318: + return "➆" + case 9319: + return "➇" + case 9320: + return "➈" + case 9321: + return "➉" + case 9332: + return "(l)" + case 9333: + return "(2)" + case 9334: + return "(3)" + case 9335: + return "(4)" + case 9336: + return "(5)" + case 9337: + return "(6)" + case 9338: + return "(7)" + case 9339: + return "(8)" + case 9340: + return "(9)" + case 9341: + return "(lO)" + case 9342: + return "(ll)" + case 9343: + return "(l2)" + case 9344: + return "(l3)" + case 9345: + return "(l4)" + case 9346: + return "(l5)" + case 9347: + return "(l6)" + case 9348: + return "(l7)" + case 9349: + return "(l8)" + case 9350: + return "(l9)" + case 9351: + return "(2O)" + case 9352: + return "l." + case 9353: + return "2." + case 9354: + return "3." + case 9355: + return "4." + case 9356: + return "5." + case 9357: + return "6." + case 9358: + return "7." + case 9359: + return "8." + case 9360: + return "9." + case 9361: + return "lO." + case 9362: + return "ll." + case 9363: + return "l2." + case 9364: + return "l3." + case 9365: + return "l4." + case 9366: + return "l5." + case 9367: + return "l6." + case 9368: + return "l7." + case 9369: + return "l8." + case 9370: + return "l9." + case 9371: + return "2O." + case 9372: + return "(a)" + case 9373: + return "(b)" + case 9374: + return "(c)" + case 9375: + return "(d)" + case 9376: + return "(e)" + case 9377: + return "(f)" + case 9378: + return "(g)" + case 9379: + return "(h)" + case 9380: + return "(i)" + case 9381: + return "(j)" + case 9382: + return "(k)" + case 9383: + return "(l)" + case 9384: + return "(rn)" + case 9385: + return "(n)" + case 9386: + return "(o)" + case 9387: + return "(p)" + case 9388: + return "(q)" + case 9389: + return "(r)" + case 9390: + return "(s)" + case 9391: + return "(t)" + case 9392: + return "(u)" + case 9393: + return "(v)" + case 9394: + return "(w)" + case 9395: + return "(x)" + case 9396: + return "(y)" + case 9397: + return "(z)" + case 9400: + return "©" + case 9413: + return "℗" + case 9415: + return "®" + case 9435: + return "Ⓘ" + case 9450: + return "🄍" + case 9472: + return "ー" + case 9473: + return "ー" + case 9475: + return "│" + case 9487: + return "┌" + case 9507: + return "├" + case 9585: + return "/" + case 9587: + return "X" + case 9608: + return "∎" + case 9616: + return "▌" + case 9620: + return "ˉ" + case 9623: + return "▖" + case 9629: + return "▘" + case 9632: + return "∎" + case 9649: + return "⏥" + case 9651: + return "Δ" + case 9655: + return "⊳" + case 9656: + return "▶" + case 9658: + return "▶" + case 9661: + return "𐊼" + case 9665: + return "⊲" + case 9671: + return "ᛜ" + case 9674: + return "ᛜ" + case 9675: + return "°" + case 9678: + return "⌾" + case 9696: + return "⌒" + case 9702: + return "°" + case 9737: + return "ʘ" + case 9744: + return "□" + case 9765: + return "𐦞" + case 9776: + return "Ⲷ" + case 9784: + return "⎈" + case 9806: + return "≏" + case 9826: + return "ᛜ" + case 9833: + return "𝅘𝅥" + case 9834: + return "𝅘𝅥𝅮" + case 9900: + return "॰" + case 10088: + return "(" + case 10089: + return ")" + case 10094: + return "<" + case 10095: + return ">" + case 10098: + return "(" + case 10099: + return ")" + case 10100: + return "{" + case 10101: + return "}" + case 10133: + return "+" + case 10134: + return "-" + case 10135: + return "÷" + case 10178: + return "ꓕ" + case 10184: + return "\\ᑕ" + case 10185: + return "ᑐ/" + case 10187: + return "/" + case 10189: + return "\\" + case 10201: + return "T" + case 10216: + return "❬" + case 10217: + return "❭" + case 10539: + return "x" + case 10540: + return "x" + case 10595: + return "ᛐᛚ" + case 10597: + return "⇃⇂" + case 10606: + return "ᛐ⇂" + case 10607: + return "⇃ᛚ" + case 10649: + return "ⵂ" + case 10672: + return "⍉" + case 10686: + return "⌾" + case 10692: + return "〼" + case 10693: + return "⍂" + case 10695: + return "⌻" + case 10710: + return "𐋀" + case 10713: + return "⦚" + case 10740: + return ":→" + case 10741: + return "\\" + case 10742: + return "/̄" + case 10744: + return "/" + case 10745: + return "\\" + case 10752: + return "ʘ" + case 10753: + return "𐊨" + case 10754: + return "⊗" + case 10755: + return "⊍" + case 10756: + return "⊎" + case 10757: + return "⊓" + case 10758: + return "⊔" + case 10764: + return "ʃʃʃʃ" + case 10781: + return "ᛞ" + case 10784: + return ">>" + case 10785: + return "ᛚ" + case 10786: + return "+̊" + case 10787: + return "+̂" + case 10788: + return "+̃" + case 10789: + return "+̣" + case 10790: + return "+̰" + case 10791: + return "+₂" + case 10793: + return "-̓" + case 10794: + return "-̣" + case 10799: + return "x" + case 10800: + return "ẋ" + case 10813: + return "⌙" + case 10814: + return "⨟" + case 10815: + return "∐" + case 10858: + return "~̇" + case 10862: + return "=⃰" + case 10868: + return "::=" + case 10869: + return "==" + case 10870: + return "===" + case 10917: + return "><" + case 10922: + return "ᗕ" + case 10923: + return "ᗒ" + case 10967: + return "ᑐᑕ" + case 11003: + return "///" + case 11005: + return "//" + case 11244: + return "↞" + case 11245: + return "↟" + case 11246: + return "↠" + case 11247: + return "↡" + case 11367: + return "H̩" + case 11369: + return "K̩" + case 11396: + return "Γ" + case 11397: + return "r" + case 11398: + return "Δ" + case 11400: + return "Ꞓ" + case 11401: + return "ꞓ" + case 11406: + return "H" + case 11410: + return "l" + case 11412: + return "K" + case 11413: + return "ĸ" + case 11414: + return "λ" + case 11416: + return "M" + case 11418: + return "N" + case 11422: + return "O" + case 11423: + return "o" + case 11424: + return "Π" + case 11426: + return "P" + case 11427: + return "p" + case 11428: + return "C" + case 11429: + return "c" + case 11430: + return "T" + case 11432: + return "Y" + case 11434: + return "Φ" + case 11435: + return "ɸ" + case 11436: + return "X" + case 11437: + return "χ" + case 11438: + return "Ψ" + case 11441: + return "ω" + case 11444: + return "<·" + case 11450: + return "-" + case 11452: + return "Ш" + case 11453: + return "ш" + case 11462: + return "/" + case 11466: + return "9" + case 11468: + return "3" + case 11469: + return "ȝ" + case 11472: + return "L" + case 11473: + return "ʟ" + case 11474: + return "6" + case 11484: + return "Ϭ" + case 11492: + return "ϗ" + case 11497: + return "☧" + case 11513: + return "\\\\" + case 11569: + return "O̵" + case 11575: + return "Ʌ" + case 11576: + return "V" + case 11577: + return "E" + case 11578: + return "Ǝ" + case 11585: + return "O̸" + case 11592: + return "···" + case 11593: + return "Ʃ" + case 11599: + return "l" + case 11601: + return "!" + case 11604: + return "O" + case 11605: + return "Q" + case 11609: + return "ʘ" + case 11613: + return "X" + case 11616: + return "Δ" + case 11619: + return "ᛯ" + case 11752: + return "ᷟ" + case 11754: + return "̊" + case 11757: + return "ͨ" + case 11759: + return "ͯ" + case 11766: + return "ͣ" + case 11767: + return "ͤ" + case 11802: + return "-̈" + case 11806: + return "~̇" + case 11807: + return "~̣" + case 11814: + return "ᑕ" + case 11815: + return "ᑐ" + case 11816: + return "((" + case 11817: + return "))" + case 11818: + return "∵" + case 11819: + return "∴" + case 11820: + return "∷" + case 11822: + return "؟" + case 11824: + return "°" + case 11825: + return "·" + case 11826: + return "،" + case 11829: + return "؛" + case 11833: + return "ẟ" + case 11837: + return "ⵂ" + case 11839: + return "¶" + case 11840: + return "=" + case 11906: + return "乛" + case 11907: + return "乚" + case 11909: + return "亻" + case 11913: + return "刂" + case 11915: + return "㔾" + case 11918: + return "兀" + case 11919: + return "尣" + case 11920: + return "尢" + case 11922: + return "巳" + case 11923: + return "幺" + case 11924: + return "彑" + case 11926: + return "忄" + case 11927: + return "㣺" + case 11928: + return "扌" + case 11929: + return "攵" + case 11931: + return "旡" + case 11934: + return "歺" + case 11935: + return "母" + case 11936: + return "民" + case 11937: + return "氵" + case 11938: + return "氺" + case 11939: + return "灬" + case 11940: + return "爫" + case 11942: + return "丬" + case 11944: + return "犭" + case 11947: + return "罒" + case 11949: + return "礻" + case 11951: + return "糹" + case 11953: + return "罓" + case 11954: + return "罒" + case 11961: + return "耂" + case 11962: + return "肀" + case 11966: + return "艹" + case 11967: + return "艹" + case 11968: + return "艹" + case 11969: + return "虎" + case 11970: + return "衤" + case 11971: + return "覀" + case 11972: + return "西" + case 11973: + return "见" + case 11976: + return "讠" + case 11977: + return "贝" + case 11979: + return "车" + case 11980: + return "辶" + case 11981: + return "辶" + case 11983: + return "阝" + case 11984: + return "钅" + case 11985: + return "長" + case 11986: + return "镸" + case 11987: + return "长" + case 11988: + return "门" + case 11990: + return "阝" + case 11992: + return "青" + case 11993: + return "韦" + case 11994: + return "页" + case 11995: + return "风" + case 11996: + return "飞" + case 11997: + return "食" + case 11999: + return "飠" + case 12000: + return "饣" + case 12002: + return "马" + case 12004: + return "鬼" + case 12005: + return "鱼" + case 12008: + return "麦" + case 12009: + return "黄" + case 12011: + return "斉" + case 12012: + return "齐" + case 12013: + return "歯" + case 12014: + return "齿" + case 12015: + return "竜" + case 12016: + return "龙" + case 12018: + return "亀" + case 12019: + return "龟" + case 12032: + return "ー" + case 12033: + return "丨" + case 12034: + return "\\" + case 12035: + return "/" + case 12036: + return "乙" + case 12037: + return "亅" + case 12038: + return "二" + case 12039: + return "亠" + case 12040: + return "人" + case 12041: + return "儿" + case 12042: + return "入" + case 12043: + return "八" + case 12044: + return "冂" + case 12045: + return "冖" + case 12046: + return "冫" + case 12047: + return "几" + case 12048: + return "凵" + case 12049: + return "刀" + case 12050: + return "力" + case 12051: + return "勹" + case 12052: + return "匕" + case 12053: + return "匚" + case 12054: + return "匸" + case 12055: + return "十" + case 12056: + return "卜" + case 12057: + return "卩" + case 12058: + return "厂" + case 12059: + return "厶" + case 12060: + return "又" + case 12061: + return "口" + case 12062: + return "口" + case 12063: + return "土" + case 12064: + return "土" + case 12065: + return "夂" + case 12066: + return "夊" + case 12067: + return "夕" + case 12068: + return "大" + case 12069: + return "女" + case 12070: + return "子" + case 12071: + return "宀" + case 12072: + return "寸" + case 12073: + return "小" + case 12074: + return "尢" + case 12075: + return "尸" + case 12076: + return "屮" + case 12077: + return "山" + case 12078: + return "巛" + case 12079: + return "工" + case 12080: + return "己" + case 12081: + return "巾" + case 12082: + return "干" + case 12083: + return "幺" + case 12084: + return "广" + case 12085: + return "廴" + case 12086: + return "廾" + case 12087: + return "弋" + case 12088: + return "弓" + case 12089: + return "彐" + case 12090: + return "彡" + case 12091: + return "彳" + case 12092: + return "心" + case 12093: + return "戈" + case 12094: + return "戶" + case 12095: + return "手" + case 12096: + return "支" + case 12097: + return "攴" + case 12098: + return "文" + case 12099: + return "斗" + case 12100: + return "斤" + case 12101: + return "方" + case 12102: + return "无" + case 12103: + return "日" + case 12104: + return "曰" + case 12105: + return "月" + case 12106: + return "木" + case 12107: + return "欠" + case 12108: + return "止" + case 12109: + return "歹" + case 12110: + return "殳" + case 12111: + return "毋" + case 12112: + return "比" + case 12113: + return "毛" + case 12114: + return "氏" + case 12115: + return "气" + case 12116: + return "水" + case 12117: + return "火" + case 12118: + return "爪" + case 12119: + return "父" + case 12120: + return "爻" + case 12121: + return "爿" + case 12122: + return "片" + case 12123: + return "牙" + case 12124: + return "牛" + case 12125: + return "犬" + case 12126: + return "玄" + case 12127: + return "玉" + case 12128: + return "瓜" + case 12129: + return "瓦" + case 12130: + return "甘" + case 12131: + return "生" + case 12132: + return "用" + case 12133: + return "田" + case 12134: + return "疋" + case 12135: + return "疒" + case 12136: + return "癶" + case 12137: + return "白" + case 12138: + return "皮" + case 12139: + return "皿" + case 12140: + return "目" + case 12141: + return "矛" + case 12142: + return "矢" + case 12143: + return "石" + case 12144: + return "示" + case 12145: + return "禸" + case 12146: + return "禾" + case 12147: + return "穴" + case 12148: + return "立" + case 12149: + return "竹" + case 12150: + return "米" + case 12151: + return "糸" + case 12152: + return "缶" + case 12153: + return "网" + case 12154: + return "羊" + case 12155: + return "羽" + case 12156: + return "老" + case 12157: + return "而" + case 12158: + return "耒" + case 12159: + return "耳" + case 12160: + return "聿" + case 12161: + return "肉" + case 12162: + return "臣" + case 12163: + return "自" + case 12164: + return "至" + case 12165: + return "臼" + case 12166: + return "舌" + case 12167: + return "舛" + case 12168: + return "舟" + case 12169: + return "艮" + case 12170: + return "色" + case 12171: + return "艸" + case 12172: + return "虍" + case 12173: + return "虫" + case 12174: + return "血" + case 12175: + return "行" + case 12176: + return "衣" + case 12177: + return "襾" + case 12178: + return "見" + case 12179: + return "角" + case 12180: + return "言" + case 12181: + return "谷" + case 12182: + return "豆" + case 12183: + return "豕" + case 12184: + return "豸" + case 12185: + return "貝" + case 12186: + return "赤" + case 12187: + return "走" + case 12188: + return "足" + case 12189: + return "身" + case 12190: + return "車" + case 12191: + return "辛" + case 12192: + return "辰" + case 12193: + return "辵" + case 12194: + return "邑" + case 12195: + return "酉" + case 12196: + return "釆" + case 12197: + return "里" + case 12198: + return "金" + case 12199: + return "長" + case 12200: + return "門" + case 12201: + return "阜" + case 12202: + return "隶" + case 12203: + return "隹" + case 12204: + return "雨" + case 12205: + return "靑" + case 12206: + return "非" + case 12207: + return "面" + case 12208: + return "革" + case 12209: + return "韋" + case 12210: + return "韭" + case 12211: + return "音" + case 12212: + return "頁" + case 12213: + return "風" + case 12214: + return "飛" + case 12215: + return "食" + case 12216: + return "首" + case 12217: + return "香" + case 12218: + return "馬" + case 12219: + return "骨" + case 12220: + return "高" + case 12221: + return "髟" + case 12222: + return "鬥" + case 12223: + return "鬯" + case 12224: + return "鬲" + case 12225: + return "鬼" + case 12226: + return "魚" + case 12227: + return "鳥" + case 12228: + return "鹵" + case 12229: + return "鹿" + case 12230: + return "麥" + case 12231: + return "麻" + case 12232: + return "黃" + case 12233: + return "黍" + case 12234: + return "黑" + case 12235: + return "黹" + case 12236: + return "黽" + case 12237: + return "鼎" + case 12238: + return "鼓" + case 12239: + return "鼠" + case 12240: + return "鼻" + case 12241: + return "齊" + case 12242: + return "齒" + case 12243: + return "龍" + case 12244: + return "龜" + case 12245: + return "龠" + case 12290: + return "˳" + case 12291: + return "''" + case 12295: + return "O" + case 12296: + return "❬" + case 12297: + return "❭" + case 12306: + return "₸" + case 12308: + return "(" + case 12309: + return ")" + case 12314: + return "⟦" + case 12315: + return "⟧" + case 12332: + return "̉" + case 12333: + return "̥" + case 12339: + return "/" + case 12342: + return "₸" + case 12344: + return "十" + case 12345: + return "卄" + case 12346: + return "卅" + case 12367: + return "❬" + case 12442: + return "̊" + case 12443: + return "゙" + case 12444: + return "゚" + case 12448: + return "=" + case 12452: + return "亻" + case 12456: + return "工" + case 12459: + return "力" + case 12479: + return "夕" + case 12488: + return "卜" + case 12491: + return "二" + case 12494: + return "/" + case 12495: + return "八" + case 12504: + return "へ" + case 12525: + return "口" + case 12539: + return "·" + case 12593: + return "ᄀ" + case 12594: + return "ᄀᄀ" + case 12595: + return "ᄀᄉ" + case 12596: + return "ᄂ" + case 12597: + return "ᄂᄌ" + case 12598: + return "ᄂᄒ" + case 12599: + return "ᄃ" + case 12600: + return "ᄃᄃ" + case 12601: + return "ᄅ" + case 12602: + return "ᄅᄀ" + case 12603: + return "ᄅᄆ" + case 12604: + return "ᄅᄇ" + case 12605: + return "ᄅᄉ" + case 12606: + return "ᄅᄐ" + case 12607: + return "ᄅᄑ" + case 12608: + return "ᄅᄒ" + case 12609: + return "ᄆ" + case 12610: + return "ᄇ" + case 12611: + return "ᄇᄇ" + case 12612: + return "ᄇᄉ" + case 12613: + return "ᄉ" + case 12614: + return "ᄉᄉ" + case 12615: + return "ᄋ" + case 12616: + return "ᄌ" + case 12617: + return "ᄌᄌ" + case 12618: + return "ᄎ" + case 12619: + return "ᄏ" + case 12620: + return "ᄐ" + case 12621: + return "ᄑ" + case 12622: + return "ᄒ" + case 12623: + return "ᅡ" + case 12624: + return "ᅡ丨" + case 12625: + return "ᅣ" + case 12626: + return "ᅣ丨" + case 12627: + return "ᅥ" + case 12628: + return "ᅥ丨" + case 12629: + return "ᅧ" + case 12630: + return "ᅧ丨" + case 12631: + return "ᅩ" + case 12632: + return "ᅩᅡ" + case 12633: + return "ᅩᅡ丨" + case 12634: + return "ᅩ丨" + case 12635: + return "ᅭ" + case 12636: + return "ᅮ" + case 12637: + return "ᅮᅥ" + case 12638: + return "ᅮᅥ丨" + case 12639: + return "ᅮ丨" + case 12640: + return "ᅲ" + case 12641: + return "ー" + case 12642: + return "ー丨" + case 12643: + return "丨" + case 12644: + return "ᅠ" + case 12645: + return "ᄂᄂ" + case 12646: + return "ᄂᄃ" + case 12647: + return "ᄂᄉ" + case 12648: + return "ᄂᅀ" + case 12649: + return "ᄅᄀᄉ" + case 12650: + return "ᄅᄃ" + case 12651: + return "ᄅᄇᄉ" + case 12652: + return "ᄅᅀ" + case 12653: + return "ᄅᅙ" + case 12654: + return "ᄆᄇ" + case 12655: + return "ᄆᄉ" + case 12656: + return "ᄆᅀ" + case 12657: + return "ᄆᄋ" + case 12658: + return "ᄇᄀ" + case 12659: + return "ᄇᄃ" + case 12660: + return "ᄇᄉᄀ" + case 12661: + return "ᄇᄉᄃ" + case 12662: + return "ᄇᄌ" + case 12663: + return "ᄇᄐ" + case 12664: + return "ᄇᄋ" + case 12665: + return "ᄇᄇᄋ" + case 12666: + return "ᄉᄀ" + case 12667: + return "ᄉᄂ" + case 12668: + return "ᄉᄃ" + case 12669: + return "ᄉᄇ" + case 12670: + return "ᄉᄌ" + case 12671: + return "ᅀ" + case 12672: + return "ᄋᄋ" + case 12673: + return "ᅌ" + case 12674: + return "ᄋᄉ" + case 12675: + return "ᄋᅀ" + case 12676: + return "ᄑᄋ" + case 12677: + return "ᄒᄒ" + case 12678: + return "ᅙ" + case 12679: + return "ᅭᅣ" + case 12680: + return "ᅭᅣ丨" + case 12681: + return "ᅭ丨" + case 12682: + return "ᅲᅧ" + case 12683: + return "ᅲᅧ丨" + case 12684: + return "ᅲ丨" + case 12685: + return "ᆞ" + case 12686: + return "ᆞ丨" + case 12752: + return "ー" + case 12753: + return "丨" + case 12755: + return "/" + case 12756: + return "\\" + case 12758: + return "乛" + case 12762: + return "亅" + case 12763: + return "❬" + case 12767: + return "乚" + case 12768: + return "乙" + case 12800: + return "(ᄀ)" + case 12801: + return "(ᄂ)" + case 12802: + return "(ᄃ)" + case 12803: + return "(ᄅ)" + case 12804: + return "(ᄆ)" + case 12805: + return "(ᄇ)" + case 12806: + return "(ᄉ)" + case 12807: + return "(ᄋ)" + case 12808: + return "(ᄌ)" + case 12809: + return "(ᄎ)" + case 12810: + return "(ᄏ)" + case 12811: + return "(ᄐ)" + case 12812: + return "(ᄑ)" + case 12813: + return "(ᄒ)" + case 12814: + return "(가)" + case 12815: + return "(나)" + case 12816: + return "(다)" + case 12817: + return "(라)" + case 12818: + return "(마)" + case 12819: + return "(바)" + case 12820: + return "(사)" + case 12821: + return "(아)" + case 12822: + return "(자)" + case 12823: + return "(차)" + case 12824: + return "(카)" + case 12825: + return "(타)" + case 12826: + return "(파)" + case 12827: + return "(하)" + case 12828: + return "(주)" + case 12829: + return "(오전)" + case 12830: + return "(오후)" + case 12832: + return "(ー)" + case 12833: + return "(二)" + case 12834: + return "(三)" + case 12835: + return "(四)" + case 12836: + return "(五)" + case 12837: + return "(六)" + case 12838: + return "(七)" + case 12839: + return "(八)" + case 12840: + return "(九)" + case 12841: + return "(十)" + case 12842: + return "(月)" + case 12843: + return "(火)" + case 12844: + return "(水)" + case 12845: + return "(木)" + case 12846: + return "(金)" + case 12847: + return "(土)" + case 12848: + return "(日)" + case 12849: + return "(株)" + case 12850: + return "(有)" + case 12851: + return "(社)" + case 12852: + return "(名)" + case 12853: + return "(特)" + case 12854: + return "(財)" + case 12855: + return "(祝)" + case 12856: + return "(労)" + case 12857: + return "(代)" + case 12858: + return "(呼)" + case 12859: + return "(学)" + case 12860: + return "(監)" + case 12861: + return "(企)" + case 12862: + return "(資)" + case 12863: + return "(協)" + case 12864: + return "(祭)" + case 12865: + return "(休)" + case 12866: + return "(自)" + case 12867: + return "(至)" + case 12992: + return "l月" + case 12993: + return "2月" + case 12994: + return "3月" + case 12995: + return "4月" + case 12996: + return "5月" + case 12997: + return "6月" + case 12998: + return "7月" + case 12999: + return "8月" + case 13000: + return "9月" + case 13001: + return "lO月" + case 13002: + return "ll月" + case 13003: + return "l2月" + case 13144: + return "O点" + case 13145: + return "l点" + case 13146: + return "2点" + case 13147: + return "3点" + case 13148: + return "4点" + case 13149: + return "5点" + case 13150: + return "6点" + case 13151: + return "7点" + case 13152: + return "8点" + case 13153: + return "9点" + case 13154: + return "lO点" + case 13155: + return "ll点" + case 13156: + return "l2点" + case 13157: + return "l3点" + case 13158: + return "l4点" + case 13159: + return "l5点" + case 13160: + return "l6点" + case 13161: + return "l7点" + case 13162: + return "l8点" + case 13163: + return "l9点" + case 13164: + return "2O点" + case 13165: + return "2l点" + case 13166: + return "22点" + case 13167: + return "23点" + case 13168: + return "24点" + case 13280: + return "l日" + case 13281: + return "2日" + case 13282: + return "3日" + case 13283: + return "4日" + case 13284: + return "5日" + case 13285: + return "6日" + case 13286: + return "7日" + case 13287: + return "8日" + case 13288: + return "9日" + case 13289: + return "lO日" + case 13290: + return "ll日" + case 13291: + return "l2日" + case 13292: + return "l3日" + case 13293: + return "l4日" + case 13294: + return "l5日" + case 13295: + return "l6日" + case 13296: + return "l7日" + case 13297: + return "l8日" + case 13298: + return "l9日" + case 13299: + return "2O日" + case 13300: + return "2l日" + case 13301: + return "22日" + case 13302: + return "23日" + case 13303: + return "24日" + case 13304: + return "25日" + case 13305: + return "26日" + case 13306: + return "27日" + case 13307: + return "28日" + case 13308: + return "29日" + case 13309: + return "3O日" + case 13310: + return "3l日" + case 14771: + return "㘽" + case 17307: + return "㖈" + case 17440: + return "㬻" + case 19968: + return "ー" + case 20022: + return "\\" + case 20031: + return "/" + case 20482: + return "併" + case 20540: + return "値" + case 21855: + return "啓" + case 22231: + return "口" + case 22635: + return "塡" + case 22763: + return "土" + case 22783: + return "墫" + case 23296: + return "媯" + case 24114: + return "帡" + case 24144: + return "㬺" + case 25144: + return "戶" + case 25609: + return "㩁" + case 26211: + return "䀿" + case 26217: + return "晚" + case 26358: + return "㫚" + case 26406: + return "䑃" + case 26623: + return "杮" + case 27113: + return "㮣" + case 27175: + return "榝" + case 28505: + return "溈" + case 30799: + return "研" + case 32118: + return "絕" + case 32934: + return "朌" + case 32970: + return "朐" + case 32976: + return "朏" + case 33014: + return "㬵" + case 33025: + return "朓" + case 33063: + return "朘" + case 33089: + return "胼" + case 33191: + return "朣" + case 34111: + return "蒍" + case 34369: + return "蘷" + case 35358: + return "䚶" + case 35453: + return "訮" + case 35727: + return "讆" + case 35939: + return "豜" + case 36230: + return "赿" + case 36346: + return "跥" + case 36507: + return "躗" + case 36647: + return "軿" + case 37086: + return "郎" + case 37806: + return "鎭" + case 38584: + return "隷" + case 40515: + return "鹂" + case 40658: + return "黑" + case 40899: + return "䀹" + case 42132: + return "ꋍ" + case 42140: + return "ꃀ" + case 42142: + return "ꁊ" + case 42151: + return "ꑘ" + case 42152: + return "ꄲ" + case 42156: + return "ꁐ" + case 42160: + return "ꏂ" + case 42170: + return "ꎿ" + case 42174: + return "ꊱ" + case 42175: + return "ꉙ" + case 42176: + return "ꎫ" + case 42178: + return "ꎵ" + case 42192: + return "B" + case 42193: + return "P" + case 42194: + return "d" + case 42195: + return "D" + case 42196: + return "T" + case 42198: + return "G" + case 42199: + return "K" + case 42201: + return "J" + case 42202: + return "C" + case 42203: + return "Ɔ" + case 42204: + return "Z" + case 42205: + return "F" + case 42206: + return "Ⅎ" + case 42207: + return "M" + case 42208: + return "N" + case 42209: + return "L" + case 42210: + return "S" + case 42211: + return "R" + case 42213: + return "Ʌ" + case 42214: + return "V" + case 42215: + return "H" + case 42218: + return "W" + case 42219: + return "X" + case 42220: + return "Y" + case 42221: + return "ᙠ" + case 42222: + return "A" + case 42223: + return "Ɐ" + case 42224: + return "E" + case 42225: + return "Ǝ" + case 42226: + return "l" + case 42227: + return "O" + case 42228: + return "U" + case 42229: + return "Ո" + case 42231: + return "ᗡ" + case 42232: + return "." + case 42233: + return "," + case 42234: + return ".." + case 42235: + return ".," + case 42237: + return ":" + case 42238: + return "-." + case 42239: + return "=" + case 42510: + return "." + case 42564: + return "2" + case 42565: + return "ƨ" + case 42567: + return "i" + case 42573: + return "ω" + case 42576: + return "Ъl" + case 42577: + return "ˉbi" + case 42600: + return "ʘ" + case 42607: + return "⃩" + case 42620: + return "̆" + case 42622: + return "ˇ" + case 42645: + return "h̔" + case 42648: + return "OO" + case 42649: + return "oo" + case 42650: + return "𐊨" + case 42657: + return "И" + case 42672: + return "ᚹ" + case 42673: + return "Ⱶ" + case 42701: + return "ʡ" + case 42702: + return "Ʌ" + case 42715: + return "Π" + case 42719: + return "V" + case 42731: + return "?" + case 42735: + return "2" + case 42736: + return "̂" + case 42737: + return "̄" + case 42740: + return "꛳꛳" + case 42772: + return "˫" + case 42774: + return "˪" + case 42792: + return "T3" + case 42793: + return "tȝ" + case 42801: + return "s" + case 42802: + return "AA" + case 42803: + return "aa" + case 42804: + return "AO" + case 42805: + return "ao" + case 42806: + return "AU" + case 42807: + return "au" + case 42808: + return "AV" + case 42809: + return "av" + case 42810: + return "AV" + case 42811: + return "av" + case 42812: + return "AY" + case 42813: + return "ay" + case 42816: + return "K̵" + case 42826: + return "O̵" + case 42827: + return "o̵" + case 42830: + return "OO" + case 42831: + return "oo" + case 42842: + return "2" + case 42849: + return "w̦" + case 42858: + return "3" + case 42859: + return "ȝ" + case 42862: + return "9" + case 42871: + return "tf" + case 42872: + return "&" + case 42874: + return "Ꝺ" + case 42889: + return ":" + case 42892: + return "'" + case 42895: + return "·" + case 42901: + return "ꜧ" + case 42904: + return "F" + case 42905: + return "f" + case 42906: + return "𐐒" + case 42907: + return "𐐺" + case 42909: + return "ʚ" + case 42910: + return "ꓤ" + case 42911: + return "u" + case 42923: + return "3" + case 42929: + return "ꓕ" + case 42930: + return "J" + case 42931: + return "X" + case 42932: + return "B" + case 42933: + return "ß" + case 42934: + return "Ꙍ" + case 42935: + return "ω" + case 42999: + return "ー" + case 43056: + return "।" + case 43360: + return "ᄃᄆ" + case 43361: + return "ᄃᄇ" + case 43362: + return "ᄃᄉ" + case 43363: + return "ᄃᄌ" + case 43364: + return "ᄅᄀ" + case 43365: + return "ᄅᄀᄀ" + case 43366: + return "ᄅᄃ" + case 43367: + return "ᄅᄃᄃ" + case 43368: + return "ᄅᄆ" + case 43369: + return "ᄅᄇ" + case 43370: + return "ᄅᄇᄇ" + case 43371: + return "ᄅᄇᄋ" + case 43372: + return "ᄅᄉ" + case 43373: + return "ᄅᄌ" + case 43374: + return "ᄅᄏ" + case 43375: + return "ᄆᄀ" + case 43376: + return "ᄆᄃ" + case 43377: + return "ᄆᄉ" + case 43378: + return "ᄇᄉᄐ" + case 43379: + return "ᄇᄏ" + case 43380: + return "ᄇᄒ" + case 43381: + return "ᄉᄉᄇ" + case 43382: + return "ᄋᄅ" + case 43383: + return "ᄋᄒ" + case 43384: + return "ᄌᄌᄒ" + case 43385: + return "ᄐᄐ" + case 43386: + return "ᄑᄒ" + case 43387: + return "ᄒᄉ" + case 43388: + return "ᅙᅙ" + case 43410: + return "ⰿ" + case 43427: + return "ꦝ" + case 43462: + return "꧐" + case 43471: + return "٢" + case 43603: + return "ꨁ" + case 43606: + return "ꨣ" + case 43826: + return "e" + case 43829: + return "f" + case 43837: + return "o" + case 43838: + return "o̸" + case 43839: + return "ɔ̸" + case 43841: + return "ǝo̸" + case 43842: + return "ǝo̵" + case 43847: + return "r" + case 43848: + return "r" + case 43853: + return "ʃ" + case 43854: + return "u" + case 43858: + return "u" + case 43859: + return "χ" + case 43861: + return "χ" + case 43866: + return "y" + case 43872: + return "љ" + case 43874: + return "ɔe" + case 43875: + return "uo" + case 43888: + return "ᴅ" + case 43889: + return "ʀ" + case 43890: + return "ᴛ" + case 43892: + return "ơ" + case 43893: + return "i" + case 43898: + return "ᴀ" + case 43899: + return "ᴊ" + case 43900: + return "ᴇ" + case 43902: + return "ɂ" + case 43904: + return "ⱶ" + case 43905: + return "r" + case 43907: + return "w" + case 43911: + return "ʍ" + case 43915: + return "ʜ" + case 43918: + return "o̵" + case 43920: + return "ɢ" + case 43923: + return "z" + case 43931: + return "ꞓ" + case 43932: + return "u̵" + case 43935: + return "ƅ" + case 43938: + return "ʀ" + case 43945: + return "v" + case 43946: + return "s" + case 43950: + return "ʟ" + case 43951: + return "c" + case 43954: + return "ᴘ" + case 43958: + return "ĸ" + case 43963: + return "o̵" + case 55216: + return "ᅩᅧ" + case 55217: + return "ᅩᅩ丨" + case 55218: + return "ᅭᅡ" + case 55219: + return "ᅭᅡ丨" + case 55220: + return "ᅭᅥ" + case 55221: + return "ᅮᅧ" + case 55222: + return "ᅮ丨丨" + case 55223: + return "ᅲᅡ丨" + case 55224: + return "ᅲᅩ" + case 55225: + return "ーᅡ" + case 55226: + return "ーᅥ" + case 55227: + return "ーᅥ丨" + case 55228: + return "ーᅩ" + case 55229: + return "丨ᅣᅩ" + case 55230: + return "丨ᅣ丨" + case 55231: + return "丨ᅧ" + case 55232: + return "丨ᅧ丨" + case 55233: + return "丨ᅩ丨" + case 55234: + return "丨ᅭ" + case 55235: + return "丨ᅲ" + case 55236: + return "丨丨" + case 55237: + return "ᆞᅡ" + case 55238: + return "ᆞᅥ丨" + case 55243: + return "ᄂᄅ" + case 55244: + return "ᄂᄎ" + case 55245: + return "ᄃᄃ" + case 55246: + return "ᄃᄃᄇ" + case 55247: + return "ᄃᄇ" + case 55248: + return "ᄃᄉ" + case 55249: + return "ᄃᄉᄀ" + case 55250: + return "ᄃᄌ" + case 55251: + return "ᄃᄎ" + case 55252: + return "ᄃᄐ" + case 55253: + return "ᄅᄀᄀ" + case 55254: + return "ᄅᄀᄒ" + case 55255: + return "ᄅᄅᄏ" + case 55256: + return "ᄅᄆᄒ" + case 55257: + return "ᄅᄇᄃ" + case 55258: + return "ᄅᄇᄑ" + case 55259: + return "ᄅᅌ" + case 55260: + return "ᄅᅙᄒ" + case 55261: + return "ᄅᄋ" + case 55262: + return "ᄆᄂ" + case 55263: + return "ᄆᄂᄂ" + case 55264: + return "ᄆᄆ" + case 55265: + return "ᄆᄇᄉ" + case 55266: + return "ᄆᄌ" + case 55267: + return "ᄇᄃ" + case 55268: + return "ᄇᄅᄑ" + case 55269: + return "ᄇᄆ" + case 55270: + return "ᄇᄇ" + case 55271: + return "ᄇᄉᄃ" + case 55272: + return "ᄇᄌ" + case 55273: + return "ᄇᄎ" + case 55274: + return "ᄉᄆ" + case 55275: + return "ᄉᄇᄋ" + case 55276: + return "ᄉᄉᄀ" + case 55277: + return "ᄉᄉᄃ" + case 55278: + return "ᄉᅀ" + case 55279: + return "ᄉᄌ" + case 55280: + return "ᄉᄎ" + case 55281: + return "ᄉᄐ" + case 55282: + return "ᄅᄒ" + case 55283: + return "ᅀᄇ" + case 55284: + return "ᅀᄇᄋ" + case 55285: + return "ᅌᄆ" + case 55286: + return "ᅌᄒ" + case 55287: + return "ᄌᄇ" + case 55288: + return "ᄌᄇᄇ" + case 55289: + return "ᄌᄌ" + case 55290: + return "ᄑᄉ" + case 55291: + return "ᄑᄐ" + case 63744: + return "豈" + case 63745: + return "更" + case 63746: + return "車" + case 63747: + return "賈" + case 63748: + return "滑" + case 63749: + return "串" + case 63750: + return "句" + case 63751: + return "龜" + case 63752: + return "龜" + case 63753: + return "契" + case 63754: + return "金" + case 63755: + return "喇" + case 63756: + return "奈" + case 63757: + return "懶" + case 63758: + return "癩" + case 63759: + return "羅" + case 63760: + return "蘿" + case 63761: + return "螺" + case 63762: + return "裸" + case 63763: + return "邏" + case 63764: + return "樂" + case 63765: + return "洛" + case 63766: + return "烙" + case 63767: + return "珞" + case 63768: + return "落" + case 63769: + return "酪" + case 63770: + return "駱" + case 63771: + return "亂" + case 63772: + return "卵" + case 63773: + return "欄" + case 63774: + return "爛" + case 63775: + return "蘭" + case 63776: + return "鸞" + case 63777: + return "嵐" + case 63778: + return "濫" + case 63779: + return "藍" + case 63780: + return "襤" + case 63781: + return "拉" + case 63782: + return "臘" + case 63783: + return "蠟" + case 63784: + return "廊" + case 63785: + return "朗" + case 63786: + return "浪" + case 63787: + return "狼" + case 63788: + return "郎" + case 63789: + return "來" + case 63790: + return "冷" + case 63791: + return "勞" + case 63792: + return "擄" + case 63793: + return "櫓" + case 63794: + return "爐" + case 63795: + return "盧" + case 63796: + return "老" + case 63797: + return "蘆" + case 63798: + return "虜" + case 63799: + return "路" + case 63800: + return "露" + case 63801: + return "魯" + case 63802: + return "鷺" + case 63803: + return "碌" + case 63804: + return "祿" + case 63805: + return "綠" + case 63806: + return "菉" + case 63807: + return "錄" + case 63808: + return "鹿" + case 63809: + return "論" + case 63810: + return "壟" + case 63811: + return "弄" + case 63812: + return "籠" + case 63813: + return "聾" + case 63814: + return "牢" + case 63815: + return "磊" + case 63816: + return "賂" + case 63817: + return "雷" + case 63818: + return "壘" + case 63819: + return "屢" + case 63820: + return "樓" + case 63821: + return "淚" + case 63822: + return "漏" + case 63823: + return "累" + case 63824: + return "縷" + case 63825: + return "陋" + case 63826: + return "勒" + case 63827: + return "肋" + case 63828: + return "凜" + case 63829: + return "凌" + case 63830: + return "稜" + case 63831: + return "綾" + case 63832: + return "菱" + case 63833: + return "陵" + case 63834: + return "讀" + case 63835: + return "拏" + case 63836: + return "樂" + case 63837: + return "諾" + case 63838: + return "丹" + case 63839: + return "寧" + case 63840: + return "怒" + case 63841: + return "率" + case 63842: + return "異" + case 63843: + return "北" + case 63844: + return "磻" + case 63845: + return "便" + case 63846: + return "復" + case 63847: + return "不" + case 63848: + return "泌" + case 63849: + return "數" + case 63850: + return "索" + case 63851: + return "參" + case 63852: + return "塞" + case 63853: + return "省" + case 63854: + return "葉" + case 63855: + return "說" + case 63856: + return "殺" + case 63857: + return "辰" + case 63858: + return "沈" + case 63859: + return "拾" + case 63860: + return "若" + case 63861: + return "掠" + case 63862: + return "略" + case 63863: + return "亮" + case 63864: + return "兩" + case 63865: + return "凉" + case 63866: + return "梁" + case 63867: + return "糧" + case 63868: + return "良" + case 63869: + return "諒" + case 63870: + return "量" + case 63871: + return "勵" + case 63872: + return "呂" + case 63873: + return "女" + case 63874: + return "廬" + case 63875: + return "旅" + case 63876: + return "濾" + case 63877: + return "礪" + case 63878: + return "閭" + case 63879: + return "驪" + case 63880: + return "麗" + case 63881: + return "黎" + case 63882: + return "力" + case 63883: + return "曆" + case 63884: + return "歷" + case 63885: + return "轢" + case 63886: + return "年" + case 63887: + return "憐" + case 63888: + return "戀" + case 63889: + return "撚" + case 63890: + return "漣" + case 63891: + return "煉" + case 63892: + return "璉" + case 63893: + return "秊" + case 63894: + return "練" + case 63895: + return "聯" + case 63896: + return "輦" + case 63897: + return "蓮" + case 63898: + return "連" + case 63899: + return "鍊" + case 63900: + return "列" + case 63901: + return "劣" + case 63902: + return "咽" + case 63903: + return "烈" + case 63904: + return "裂" + case 63905: + return "說" + case 63906: + return "廉" + case 63907: + return "念" + case 63908: + return "捻" + case 63909: + return "殮" + case 63910: + return "簾" + case 63911: + return "獵" + case 63912: + return "令" + case 63913: + return "囹" + case 63914: + return "寧" + case 63915: + return "嶺" + case 63916: + return "怜" + case 63917: + return "玲" + case 63918: + return "瑩" + case 63919: + return "羚" + case 63920: + return "聆" + case 63921: + return "鈴" + case 63922: + return "零" + case 63923: + return "靈" + case 63924: + return "領" + case 63925: + return "例" + case 63926: + return "禮" + case 63927: + return "醴" + case 63928: + return "隷" + case 63929: + return "惡" + case 63930: + return "了" + case 63931: + return "僚" + case 63932: + return "寮" + case 63933: + return "尿" + case 63934: + return "料" + case 63935: + return "樂" + case 63936: + return "燎" + case 63937: + return "療" + case 63938: + return "蓼" + case 63939: + return "遼" + case 63940: + return "龍" + case 63941: + return "暈" + case 63942: + return "阮" + case 63943: + return "劉" + case 63944: + return "杻" + case 63945: + return "柳" + case 63946: + return "流" + case 63947: + return "溜" + case 63948: + return "琉" + case 63949: + return "留" + case 63950: + return "硫" + case 63951: + return "紐" + case 63952: + return "類" + case 63953: + return "六" + case 63954: + return "戮" + case 63955: + return "陸" + case 63956: + return "倫" + case 63957: + return "崙" + case 63958: + return "淪" + case 63959: + return "輪" + case 63960: + return "律" + case 63961: + return "慄" + case 63962: + return "栗" + case 63963: + return "率" + case 63964: + return "隆" + case 63965: + return "利" + case 63966: + return "吏" + case 63967: + return "履" + case 63968: + return "易" + case 63969: + return "李" + case 63970: + return "梨" + case 63971: + return "泥" + case 63972: + return "理" + case 63973: + return "痢" + case 63974: + return "罹" + case 63975: + return "裏" + case 63976: + return "裡" + case 63977: + return "里" + case 63978: + return "離" + case 63979: + return "匿" + case 63980: + return "溺" + case 63981: + return "吝" + case 63982: + return "燐" + case 63983: + return "璘" + case 63984: + return "藺" + case 63985: + return "隣" + case 63986: + return "鱗" + case 63987: + return "麟" + case 63988: + return "林" + case 63989: + return "淋" + case 63990: + return "臨" + case 63991: + return "立" + case 63992: + return "笠" + case 63993: + return "粒" + case 63994: + return "狀" + case 63995: + return "炙" + case 63996: + return "識" + case 63997: + return "什" + case 63998: + return "茶" + case 63999: + return "刺" + case 64000: + return "切" + case 64001: + return "度" + case 64002: + return "拓" + case 64003: + return "糖" + case 64004: + return "宅" + case 64005: + return "洞" + case 64006: + return "暴" + case 64007: + return "輻" + case 64008: + return "行" + case 64009: + return "降" + case 64010: + return "見" + case 64011: + return "廓" + case 64012: + return "兀" + case 64013: + return "嗀" + case 64016: + return "塚" + case 64018: + return "晴" + case 64021: + return "凞" + case 64022: + return "猪" + case 64023: + return "益" + case 64024: + return "礼" + case 64025: + return "神" + case 64026: + return "祥" + case 64027: + return "福" + case 64028: + return "靖" + case 64029: + return "精" + case 64030: + return "羽" + case 64032: + return "蘒" + case 64034: + return "諸" + case 64037: + return "逸" + case 64038: + return "都" + case 64042: + return "飯" + case 64043: + return "飼" + case 64044: + return "館" + case 64045: + return "鶴" + case 64046: + return "郎" + case 64047: + return "隷" + case 64048: + return "侮" + case 64049: + return "僧" + case 64050: + return "免" + case 64051: + return "勉" + case 64052: + return "勤" + case 64053: + return "卑" + case 64054: + return "喝" + case 64055: + return "嘆" + case 64056: + return "器" + case 64057: + return "塀" + case 64058: + return "墨" + case 64059: + return "層" + case 64060: + return "屮" + case 64061: + return "悔" + case 64062: + return "慨" + case 64063: + return "憎" + case 64064: + return "懲" + case 64065: + return "敏" + case 64066: + return "既" + case 64067: + return "暑" + case 64068: + return "梅" + case 64069: + return "海" + case 64070: + return "渚" + case 64071: + return "漢" + case 64072: + return "煮" + case 64073: + return "爫" + case 64074: + return "琢" + case 64075: + return "碑" + case 64076: + return "社" + case 64077: + return "祉" + case 64078: + return "祈" + case 64079: + return "祐" + case 64080: + return "祖" + case 64081: + return "祝" + case 64082: + return "禍" + case 64083: + return "禎" + case 64084: + return "穀" + case 64085: + return "突" + case 64086: + return "節" + case 64087: + return "練" + case 64088: + return "縉" + case 64089: + return "繁" + case 64090: + return "署" + case 64091: + return "者" + case 64092: + return "臭" + case 64093: + return "艹" + case 64094: + return "艹" + case 64095: + return "著" + case 64096: + return "褐" + case 64097: + return "視" + case 64098: + return "謁" + case 64099: + return "謹" + case 64100: + return "賓" + case 64101: + return "贈" + case 64102: + return "辶" + case 64103: + return "逸" + case 64104: + return "難" + case 64105: + return "響" + case 64106: + return "頻" + case 64107: + return "恵" + case 64108: + return "𤋮" + case 64109: + return "舘" + case 64112: + return "並" + case 64113: + return "况" + case 64114: + return "全" + case 64115: + return "侀" + case 64116: + return "充" + case 64117: + return "冀" + case 64118: + return "勇" + case 64119: + return "勺" + case 64120: + return "喝" + case 64121: + return "啕" + case 64122: + return "喙" + case 64123: + return "嗢" + case 64124: + return "塚" + case 64125: + return "墳" + case 64126: + return "奄" + case 64127: + return "奔" + case 64128: + return "婢" + case 64129: + return "嬨" + case 64130: + return "廒" + case 64131: + return "廙" + case 64132: + return "彩" + case 64133: + return "徭" + case 64134: + return "惘" + case 64135: + return "慎" + case 64136: + return "愈" + case 64137: + return "憎" + case 64138: + return "慠" + case 64139: + return "懲" + case 64140: + return "戴" + case 64141: + return "揄" + case 64142: + return "搜" + case 64143: + return "摒" + case 64144: + return "敖" + case 64145: + return "晴" + case 64146: + return "朗" + case 64147: + return "望" + case 64148: + return "杖" + case 64149: + return "歹" + case 64150: + return "殺" + case 64151: + return "流" + case 64152: + return "滛" + case 64153: + return "滋" + case 64154: + return "漢" + case 64155: + return "瀞" + case 64156: + return "煮" + case 64157: + return "瞧" + case 64158: + return "爵" + case 64159: + return "犯" + case 64160: + return "猪" + case 64161: + return "瑱" + case 64162: + return "甆" + case 64163: + return "画" + case 64164: + return "瘝" + case 64165: + return "瘟" + case 64166: + return "益" + case 64167: + return "盛" + case 64168: + return "直" + case 64169: + return "睊" + case 64170: + return "着" + case 64171: + return "磌" + case 64172: + return "窱" + case 64173: + return "節" + case 64174: + return "类" + case 64175: + return "絛" + case 64176: + return "練" + case 64177: + return "缾" + case 64178: + return "者" + case 64179: + return "荒" + case 64180: + return "華" + case 64181: + return "蝹" + case 64182: + return "襁" + case 64183: + return "覆" + case 64184: + return "視" + case 64185: + return "調" + case 64186: + return "諸" + case 64187: + return "請" + case 64188: + return "謁" + case 64189: + return "諾" + case 64190: + return "諭" + case 64191: + return "謹" + case 64192: + return "變" + case 64193: + return "贈" + case 64194: + return "輸" + case 64195: + return "遲" + case 64196: + return "醙" + case 64197: + return "鉶" + case 64198: + return "陼" + case 64199: + return "難" + case 64200: + return "靖" + case 64201: + return "韛" + case 64202: + return "響" + case 64203: + return "頋" + case 64204: + return "頻" + case 64205: + return "鬒" + case 64206: + return "龜" + case 64207: + return "𢡊" + case 64208: + return "𢡄" + case 64209: + return "𣏕" + case 64210: + return "㮝" + case 64211: + return "䀘" + case 64212: + return "䀹" + case 64213: + return "𥉉" + case 64214: + return "𥳐" + case 64215: + return "𧻓" + case 64216: + return "齃" + case 64217: + return "龎" + case 64256: + return "ff" + case 64257: + return "fi" + case 64258: + return "fl" + case 64259: + return "ffi" + case 64260: + return "ffl" + case 64262: + return "st" + case 64275: + return "մն" + case 64276: + return "մե" + case 64277: + return "մի" + case 64278: + return "վն" + case 64279: + return "մխ" + case 64288: + return "ע" + case 64289: + return "א" + case 64290: + return "ד" + case 64291: + return "ה" + case 64292: + return "כ" + case 64293: + return "ל" + case 64294: + return "ם" + case 64295: + return "ר" + case 64296: + return "ת" + case 64297: + return "-̇" + case 64299: + return "שׁ" + case 64301: + return "שּׁ" + case 64303: + return "אַ" + case 64304: + return "אַ" + case 64313: + return "יִ" + case 64329: + return "שׁ" + case 64335: + return "אל" + case 64336: + return "ٱ" + case 64337: + return "ٱ" + case 64338: + return "ٻ" + case 64339: + return "ٻ" + case 64340: + return "ٻ" + case 64341: + return "ٻ" + case 64342: + return "ىۛ" + case 64343: + return "ىۛ" + case 64344: + return "ىۛ" + case 64345: + return "ىۛ" + case 64346: + return "ڀ" + case 64347: + return "ڀ" + case 64348: + return "ڀ" + case 64349: + return "ڀ" + case 64350: + return "ٺ" + case 64351: + return "ٺ" + case 64352: + return "ٺ" + case 64353: + return "ٺ" + case 64354: + return "ٿ" + case 64355: + return "ٿ" + case 64356: + return "ٿ" + case 64357: + return "ٿ" + case 64358: + return "ىؕ" + case 64359: + return "ىؕ" + case 64360: + return "ىؕ" + case 64361: + return "ىؕ" + case 64362: + return "ڡۛ" + case 64363: + return "ڡۛ" + case 64364: + return "ڡۛ" + case 64365: + return "ڡۛ" + case 64366: + return "ڦ" + case 64367: + return "ڦ" + case 64368: + return "ڦ" + case 64369: + return "ڦ" + case 64370: + return "ڄ" + case 64371: + return "ڄ" + case 64372: + return "ڄ" + case 64373: + return "ڄ" + case 64374: + return "ڃ" + case 64375: + return "ڃ" + case 64376: + return "ڃ" + case 64377: + return "ڃ" + case 64378: + return "چ" + case 64379: + return "چ" + case 64380: + return "چ" + case 64381: + return "چ" + case 64382: + return "ڇ" + case 64383: + return "ڇ" + case 64384: + return "ڇ" + case 64385: + return "ڇ" + case 64386: + return "ڍ" + case 64387: + return "ڍ" + case 64388: + return "ڌ" + case 64389: + return "ڌ" + case 64390: + return "دۛ" + case 64391: + return "دۛ" + case 64392: + return "دؕ" + case 64393: + return "دؕ" + case 64394: + return "رۛ" + case 64395: + return "رۛ" + case 64396: + return "رؕ" + case 64397: + return "رؕ" + case 64398: + return "ك" + case 64399: + return "ك" + case 64400: + return "ك" + case 64401: + return "ك" + case 64402: + return "گ" + case 64403: + return "گ" + case 64404: + return "گ" + case 64405: + return "گ" + case 64406: + return "ڳ" + case 64407: + return "ڳ" + case 64408: + return "ڳ" + case 64409: + return "ڳ" + case 64410: + return "ڱ" + case 64411: + return "ڱ" + case 64412: + return "ڱ" + case 64413: + return "ڱ" + case 64414: + return "ى" + case 64415: + return "ى" + case 64416: + return "ىؕ" + case 64417: + return "ىؕ" + case 64418: + return "ىؕ" + case 64419: + return "ىؕ" + case 64420: + return "ۀ" + case 64421: + return "ۀ" + case 64422: + return "o" + case 64423: + return "o" + case 64424: + return "o" + case 64425: + return "o" + case 64426: + return "o" + case 64427: + return "o" + case 64428: + return "o" + case 64429: + return "o" + case 64430: + return "ى" + case 64431: + return "ى" + case 64432: + return "ۓ" + case 64433: + return "ۓ" + case 64467: + return "كۛ" + case 64468: + return "كۛ" + case 64469: + return "كۛ" + case 64470: + return "كۛ" + case 64471: + return "و̓" + case 64472: + return "و̓" + case 64473: + return "و̆" + case 64474: + return "و̆" + case 64475: + return "وٰ" + case 64476: + return "وٰ" + case 64477: + return "و̓ٴ" + case 64478: + return "وۛ" + case 64479: + return "وۛ" + case 64480: + return "ۅ" + case 64481: + return "ۅ" + case 64482: + return "و̂" + case 64483: + return "و̂" + case 64484: + return "ٻ" + case 64485: + return "ٻ" + case 64486: + return "ٻ" + case 64487: + return "ٻ" + case 64488: + return "ى" + case 64489: + return "ى" + case 64490: + return "ىٴl" + case 64491: + return "ىٴl" + case 64492: + return "ىٴo" + case 64493: + return "ىٴo" + case 64494: + return "ىٴو" + case 64495: + return "ىٴو" + case 64496: + return "ىٴو̓" + case 64497: + return "ىٴو̓" + case 64498: + return "ىٴو̆" + case 64499: + return "ىٴو̆" + case 64500: + return "ىٴوٰ" + case 64501: + return "ىٴوٰ" + case 64502: + return "ىٴٻ" + case 64503: + return "ىٴٻ" + case 64504: + return "ىٴٻ" + case 64505: + return "ىٴى" + case 64506: + return "ىٴى" + case 64507: + return "ىٴى" + case 64508: + return "ى" + case 64509: + return "ى" + case 64510: + return "ى" + case 64511: + return "ى" + case 64512: + return "ىٴج" + case 64513: + return "ىٴح" + case 64514: + return "ىٴم" + case 64515: + return "ىٴى" + case 64516: + return "ىٴى" + case 64517: + return "بج" + case 64518: + return "بح" + case 64519: + return "بخ" + case 64520: + return "بم" + case 64521: + return "بى" + case 64522: + return "بى" + case 64523: + return "تج" + case 64524: + return "تح" + case 64525: + return "تخ" + case 64526: + return "تم" + case 64527: + return "تى" + case 64528: + return "تى" + case 64529: + return "ىۛج" + case 64530: + return "ىۛم" + case 64531: + return "ىۛى" + case 64532: + return "ىۛى" + case 64533: + return "جح" + case 64534: + return "جم" + case 64535: + return "حج" + case 64536: + return "حم" + case 64537: + return "خج" + case 64538: + return "خح" + case 64539: + return "خم" + case 64540: + return "سج" + case 64541: + return "سح" + case 64542: + return "سخ" + case 64543: + return "سم" + case 64544: + return "صح" + case 64545: + return "صم" + case 64546: + return "ضج" + case 64547: + return "ضح" + case 64548: + return "ضخ" + case 64549: + return "ضم" + case 64550: + return "طح" + case 64551: + return "طم" + case 64552: + return "ظم" + case 64553: + return "عج" + case 64554: + return "عم" + case 64555: + return "غج" + case 64556: + return "غم" + case 64557: + return "فج" + case 64558: + return "فح" + case 64559: + return "فخ" + case 64560: + return "فم" + case 64561: + return "فى" + case 64562: + return "فى" + case 64563: + return "قح" + case 64564: + return "قم" + case 64565: + return "قى" + case 64566: + return "قى" + case 64567: + return "كl" + case 64568: + return "كج" + case 64569: + return "كح" + case 64570: + return "كخ" + case 64571: + return "كل" + case 64572: + return "كم" + case 64573: + return "كى" + case 64574: + return "كى" + case 64575: + return "لج" + case 64576: + return "لح" + case 64577: + return "لخ" + case 64578: + return "لم" + case 64579: + return "لى" + case 64580: + return "لى" + case 64581: + return "مج" + case 64582: + return "مح" + case 64583: + return "مخ" + case 64584: + return "مم" + case 64585: + return "مى" + case 64586: + return "مى" + case 64587: + return "بخ" + case 64588: + return "نح" + case 64589: + return "نخ" + case 64590: + return "نم" + case 64591: + return "نى" + case 64592: + return "نى" + case 64593: + return "oج" + case 64594: + return "oم" + case 64595: + return "oى" + case 64596: + return "oى" + case 64597: + return "ىج" + case 64598: + return "ىح" + case 64599: + return "ىخ" + case 64600: + return "ىم" + case 64601: + return "ىى" + case 64602: + return "ىى" + case 64603: + return "ذٰ" + case 64604: + return "رٰ" + case 64605: + return "ىٰ" + case 64606: + return "ﹲّ" + case 64607: + return "ﹴّ" + case 64608: + return "ﹶّ" + case 64609: + return "ﹸّ" + case 64610: + return "ﹺّ" + case 64611: + return "ﹼٰ" + case 64612: + return "ىٴر" + case 64613: + return "ىٴز" + case 64614: + return "ىٴم" + case 64615: + return "ىٴن" + case 64616: + return "ىٴى" + case 64617: + return "ىٴى" + case 64618: + return "بر" + case 64619: + return "بز" + case 64620: + return "بم" + case 64621: + return "بن" + case 64622: + return "بى" + case 64623: + return "بى" + case 64624: + return "تر" + case 64625: + return "تز" + case 64626: + return "تم" + case 64627: + return "تن" + case 64628: + return "تى" + case 64629: + return "تى" + case 64630: + return "ىۛر" + case 64631: + return "ىۛز" + case 64632: + return "ىۛم" + case 64633: + return "ىۛن" + case 64634: + return "ىۛى" + case 64635: + return "ىۛى" + case 64636: + return "فى" + case 64637: + return "فى" + case 64638: + return "قى" + case 64639: + return "قى" + case 64640: + return "كl" + case 64641: + return "كل" + case 64642: + return "كم" + case 64643: + return "كى" + case 64644: + return "كى" + case 64645: + return "لم" + case 64646: + return "لى" + case 64647: + return "لى" + case 64648: + return "مl" + case 64649: + return "مم" + case 64650: + return "نر" + case 64651: + return "نز" + case 64652: + return "نم" + case 64653: + return "نن" + case 64654: + return "نى" + case 64655: + return "نى" + case 64656: + return "ىٰ" + case 64657: + return "ىر" + case 64658: + return "ىز" + case 64659: + return "ىم" + case 64660: + return "ىن" + case 64661: + return "ىى" + case 64662: + return "ىى" + case 64663: + return "ىٴج" + case 64664: + return "ىٴح" + case 64665: + return "ىٴخ" + case 64666: + return "ىٴم" + case 64667: + return "ىٴo" + case 64668: + return "بج" + case 64669: + return "بح" + case 64670: + return "بخ" + case 64671: + return "بم" + case 64672: + return "بo" + case 64673: + return "تج" + case 64674: + return "تح" + case 64675: + return "تخ" + case 64676: + return "تم" + case 64677: + return "تo" + case 64678: + return "ىۛم" + case 64679: + return "جح" + case 64680: + return "جم" + case 64681: + return "حج" + case 64682: + return "حم" + case 64683: + return "خج" + case 64684: + return "خم" + case 64685: + return "سج" + case 64686: + return "سح" + case 64687: + return "سخ" + case 64688: + return "سم" + case 64689: + return "صح" + case 64690: + return "صخ" + case 64691: + return "صم" + case 64692: + return "ضج" + case 64693: + return "ضح" + case 64694: + return "ضخ" + case 64695: + return "ضم" + case 64696: + return "طح" + case 64697: + return "ظم" + case 64698: + return "عج" + case 64699: + return "عم" + case 64700: + return "غج" + case 64701: + return "غم" + case 64702: + return "فج" + case 64703: + return "فح" + case 64704: + return "فخ" + case 64705: + return "فم" + case 64706: + return "قح" + case 64707: + return "قم" + case 64708: + return "كج" + case 64709: + return "كح" + case 64710: + return "كخ" + case 64711: + return "كل" + case 64712: + return "كم" + case 64713: + return "لج" + case 64714: + return "لح" + case 64715: + return "لخ" + case 64716: + return "لم" + case 64717: + return "لo" + case 64718: + return "مج" + case 64719: + return "مح" + case 64720: + return "مخ" + case 64721: + return "مم" + case 64722: + return "بخ" + case 64723: + return "نح" + case 64724: + return "نخ" + case 64725: + return "نم" + case 64726: + return "نo" + case 64727: + return "oج" + case 64728: + return "oم" + case 64729: + return "oٰ" + case 64730: + return "ىج" + case 64731: + return "ىح" + case 64732: + return "ىخ" + case 64733: + return "ىم" + case 64734: + return "ىo" + case 64735: + return "ىٴم" + case 64736: + return "ىٴo" + case 64737: + return "بم" + case 64738: + return "بo" + case 64739: + return "تم" + case 64740: + return "تo" + case 64741: + return "ىۛم" + case 64742: + return "ىۛo" + case 64743: + return "سم" + case 64744: + return "سo" + case 64745: + return "سۛم" + case 64746: + return "سۛo" + case 64747: + return "كل" + case 64748: + return "كم" + case 64749: + return "لم" + case 64750: + return "نم" + case 64751: + return "نo" + case 64752: + return "ىم" + case 64753: + return "ىo" + case 64754: + return "ﹷّ" + case 64755: + return "ﹹّ" + case 64756: + return "ﹻّ" + case 64757: + return "طى" + case 64758: + return "طى" + case 64759: + return "عى" + case 64760: + return "عى" + case 64761: + return "غى" + case 64762: + return "غى" + case 64763: + return "سى" + case 64764: + return "سى" + case 64765: + return "سۛى" + case 64766: + return "سۛى" + case 64767: + return "حى" + case 64768: + return "حى" + case 64769: + return "جى" + case 64770: + return "جى" + case 64771: + return "خى" + case 64772: + return "خى" + case 64773: + return "صى" + case 64774: + return "صى" + case 64775: + return "ضى" + case 64776: + return "ضى" + case 64777: + return "سۛج" + case 64778: + return "سۛح" + case 64779: + return "سۛخ" + case 64780: + return "سۛم" + case 64781: + return "سۛر" + case 64782: + return "سر" + case 64783: + return "صر" + case 64784: + return "ضر" + case 64785: + return "طى" + case 64786: + return "طى" + case 64787: + return "عى" + case 64788: + return "عى" + case 64789: + return "غى" + case 64790: + return "غى" + case 64791: + return "سى" + case 64792: + return "سى" + case 64793: + return "سۛى" + case 64794: + return "سۛى" + case 64795: + return "حى" + case 64796: + return "حى" + case 64797: + return "جى" + case 64798: + return "جى" + case 64799: + return "خى" + case 64800: + return "خى" + case 64801: + return "صى" + case 64802: + return "صى" + case 64803: + return "ضى" + case 64804: + return "ضى" + case 64805: + return "سۛج" + case 64806: + return "سۛح" + case 64807: + return "سۛخ" + case 64808: + return "سۛم" + case 64809: + return "سۛر" + case 64810: + return "سر" + case 64811: + return "صر" + case 64812: + return "ضر" + case 64813: + return "سۛج" + case 64814: + return "سۛح" + case 64815: + return "سۛخ" + case 64816: + return "سۛم" + case 64817: + return "سo" + case 64818: + return "سۛo" + case 64819: + return "طم" + case 64820: + return "سج" + case 64821: + return "سح" + case 64822: + return "سخ" + case 64823: + return "سۛج" + case 64824: + return "سۛح" + case 64825: + return "سۛخ" + case 64826: + return "طم" + case 64827: + return "ظم" + case 64828: + return "l̋" + case 64829: + return "l̋" + case 64830: + return "(" + case 64831: + return ")" + case 64848: + return "تجم" + case 64849: + return "تحج" + case 64850: + return "تحج" + case 64851: + return "تحم" + case 64852: + return "تخم" + case 64853: + return "تمج" + case 64854: + return "تمح" + case 64855: + return "تمخ" + case 64856: + return "جمح" + case 64857: + return "جمح" + case 64858: + return "حمى" + case 64859: + return "حمى" + case 64860: + return "سحج" + case 64861: + return "سجح" + case 64862: + return "سجى" + case 64863: + return "سمح" + case 64864: + return "سمح" + case 64865: + return "سمج" + case 64866: + return "سمم" + case 64867: + return "سمم" + case 64868: + return "صحح" + case 64869: + return "صحح" + case 64870: + return "صمم" + case 64871: + return "سۛحم" + case 64872: + return "سۛحم" + case 64873: + return "سۛجى" + case 64874: + return "سۛمخ" + case 64875: + return "سۛمخ" + case 64876: + return "سۛمم" + case 64877: + return "سۛمم" + case 64878: + return "ضحى" + case 64879: + return "ضخم" + case 64880: + return "ضخم" + case 64881: + return "طمح" + case 64882: + return "طمح" + case 64883: + return "طمم" + case 64884: + return "طمى" + case 64885: + return "عجم" + case 64886: + return "عمم" + case 64887: + return "عمم" + case 64888: + return "عمى" + case 64889: + return "غمم" + case 64890: + return "غمى" + case 64891: + return "غمى" + case 64892: + return "فخم" + case 64893: + return "فخم" + case 64894: + return "قمح" + case 64895: + return "قمم" + case 64896: + return "لحم" + case 64897: + return "لحى" + case 64898: + return "لحى" + case 64899: + return "لجج" + case 64900: + return "لجج" + case 64901: + return "لخم" + case 64902: + return "لخم" + case 64903: + return "لمح" + case 64904: + return "لمح" + case 64905: + return "محج" + case 64906: + return "محم" + case 64907: + return "محى" + case 64908: + return "مجح" + case 64909: + return "مجم" + case 64910: + return "مخج" + case 64911: + return "مخم" + case 64914: + return "مجخ" + case 64915: + return "oمج" + case 64916: + return "oمم" + case 64917: + return "نحم" + case 64918: + return "نحى" + case 64919: + return "نجم" + case 64920: + return "نجم" + case 64921: + return "نجى" + case 64922: + return "نمى" + case 64923: + return "نمى" + case 64924: + return "ىمم" + case 64925: + return "ىمم" + case 64926: + return "بخى" + case 64927: + return "تجى" + case 64928: + return "تجى" + case 64929: + return "تخى" + case 64930: + return "تخى" + case 64931: + return "تمى" + case 64932: + return "تمى" + case 64933: + return "جمى" + case 64934: + return "جحى" + case 64935: + return "جمى" + case 64936: + return "سخى" + case 64937: + return "صحى" + case 64938: + return "سۛحى" + case 64939: + return "ضحى" + case 64940: + return "لجى" + case 64941: + return "لمى" + case 64942: + return "ىحى" + case 64943: + return "ىجى" + case 64944: + return "ىمى" + case 64945: + return "ممى" + case 64946: + return "قمى" + case 64947: + return "نحى" + case 64948: + return "قمح" + case 64949: + return "لحم" + case 64950: + return "عمى" + case 64951: + return "كمى" + case 64952: + return "نجح" + case 64953: + return "مخى" + case 64954: + return "لجم" + case 64955: + return "كمم" + case 64956: + return "لجم" + case 64957: + return "نجح" + case 64958: + return "جحى" + case 64959: + return "حجى" + case 64960: + return "مجى" + case 64961: + return "فمى" + case 64962: + return "بحى" + case 64963: + return "كمم" + case 64964: + return "عجم" + case 64965: + return "صمم" + case 64966: + return "سخى" + case 64967: + return "نجى" + case 65008: + return "صلى" + case 65009: + return "قلى" + case 65010: + return "lللّٰo" + case 65011: + return "lكبر" + case 65012: + return "محمد" + case 65013: + return "صلعم" + case 65014: + return "رسول" + case 65015: + return "علىo" + case 65016: + return "وسلم" + case 65017: + return "صلى" + case 65018: + return "صلى lللo علىo وسلم" + case 65019: + return "جل جلlلo" + case 65020: + return "رىlل" + case 65049: + return "ⵗ" + case 65072: + return ":" + case 65073: + return "│" + case 65076: + return "⌇" + case 65077: + return "⏜" + case 65078: + return "⏝" + case 65079: + return "⏞" + case 65080: + return "⏟" + case 65081: + return "⏠" + case 65082: + return "⏡" + case 65097: + return "ˉ" + case 65098: + return "ˉ" + case 65099: + return "ˉ" + case 65100: + return "ˉ" + case 65101: + return "_" + case 65102: + return "_" + case 65103: + return "_" + case 65112: + return "-" + case 65128: + return "\\" + case 65152: + return "ء" + case 65153: + return "آ" + case 65154: + return "آ" + case 65155: + return "lٴ" + case 65156: + return "lٴ" + case 65157: + return "وٴ" + case 65158: + return "وٴ" + case 65159: + return "lٕ" + case 65160: + return "lٕ" + case 65161: + return "ىٴ" + case 65162: + return "ىٴ" + case 65163: + return "ىٴ" + case 65164: + return "ىٴ" + case 65165: + return "l" + case 65166: + return "l" + case 65167: + return "ب" + case 65168: + return "ب" + case 65169: + return "ب" + case 65170: + return "ب" + case 65171: + return "ة" + case 65172: + return "ة" + case 65173: + return "ت" + case 65174: + return "ت" + case 65175: + return "ت" + case 65176: + return "ت" + case 65177: + return "ىۛ" + case 65178: + return "ىۛ" + case 65179: + return "ىۛ" + case 65180: + return "ىۛ" + case 65181: + return "ج" + case 65182: + return "ج" + case 65183: + return "ج" + case 65184: + return "ج" + case 65185: + return "ح" + case 65186: + return "ح" + case 65187: + return "ح" + case 65188: + return "ح" + case 65189: + return "خ" + case 65190: + return "خ" + case 65191: + return "خ" + case 65192: + return "خ" + case 65193: + return "د" + case 65194: + return "د" + case 65195: + return "ذ" + case 65196: + return "ذ" + case 65197: + return "ر" + case 65198: + return "ر" + case 65199: + return "ز" + case 65200: + return "ز" + case 65201: + return "س" + case 65202: + return "س" + case 65203: + return "س" + case 65204: + return "س" + case 65205: + return "سۛ" + case 65206: + return "سۛ" + case 65207: + return "سۛ" + case 65208: + return "سۛ" + case 65209: + return "ص" + case 65210: + return "ص" + case 65211: + return "ص" + case 65212: + return "ص" + case 65213: + return "ض" + case 65214: + return "ض" + case 65215: + return "ض" + case 65216: + return "ض" + case 65217: + return "ط" + case 65218: + return "ط" + case 65219: + return "ط" + case 65220: + return "ط" + case 65221: + return "ظ" + case 65222: + return "ظ" + case 65223: + return "ظ" + case 65224: + return "ظ" + case 65225: + return "ع" + case 65226: + return "ع" + case 65227: + return "ع" + case 65228: + return "ع" + case 65229: + return "غ" + case 65230: + return "غ" + case 65231: + return "غ" + case 65232: + return "غ" + case 65233: + return "ف" + case 65234: + return "ف" + case 65235: + return "ف" + case 65236: + return "ف" + case 65237: + return "ق" + case 65238: + return "ق" + case 65239: + return "ق" + case 65240: + return "ق" + case 65241: + return "ك" + case 65242: + return "ك" + case 65243: + return "ك" + case 65244: + return "ك" + case 65245: + return "ل" + case 65246: + return "ل" + case 65247: + return "ل" + case 65248: + return "ل" + case 65249: + return "م" + case 65250: + return "م" + case 65251: + return "م" + case 65252: + return "م" + case 65253: + return "ن" + case 65254: + return "ن" + case 65255: + return "ن" + case 65256: + return "ن" + case 65257: + return "o" + case 65258: + return "o" + case 65259: + return "o" + case 65260: + return "o" + case 65261: + return "و" + case 65262: + return "و" + case 65263: + return "ى" + case 65264: + return "ى" + case 65265: + return "ى" + case 65266: + return "ى" + case 65267: + return "ى" + case 65268: + return "ى" + case 65269: + return "لآ" + case 65270: + return "لآ" + case 65271: + return "لlٴ" + case 65272: + return "لlٴ" + case 65273: + return "لlٕ" + case 65274: + return "لlٕ" + case 65275: + return "لl" + case 65276: + return "لl" + case 65281: + return "!" + case 65282: + return "''" + case 65287: + return "'" + case 65293: + return "ー" + case 65306: + return ":" + case 65313: + return "A" + case 65314: + return "B" + case 65315: + return "C" + case 65317: + return "E" + case 65320: + return "H" + case 65321: + return "l" + case 65322: + return "J" + case 65323: + return "K" + case 65325: + return "M" + case 65326: + return "N" + case 65327: + return "O" + case 65328: + return "P" + case 65331: + return "S" + case 65332: + return "T" + case 65336: + return "X" + case 65337: + return "Y" + case 65338: + return "Z" + case 65339: + return "(" + case 65340: + return "\\" + case 65341: + return ")" + case 65342: + return "︿" + case 65344: + return "'" + case 65345: + return "a" + case 65347: + return "c" + case 65349: + return "e" + case 65351: + return "g" + case 65352: + return "h" + case 65353: + return "i" + case 65354: + return "j" + case 65356: + return "l" + case 65359: + return "o" + case 65360: + return "p" + case 65363: + return "s" + case 65366: + return "v" + case 65368: + return "x" + case 65369: + return "y" + case 65372: + return "│" + case 65374: + return "〜" + case 65381: + return "·" + case 65507: + return "ˉ" + case 65512: + return "l" + case 65517: + return "▪" + case 65793: + return "·" + case 65934: + return "N̊" + case 65942: + return "X̵" + case 65943: + return "V̵" + case 65944: + return "l̵l̵S̵" + case 65945: + return "l̵l̵" + case 65952: + return "⳨" + case 66178: + return "B" + case 66181: + return "Δ" + case 66182: + return "E" + case 66183: + return "F" + case 66186: + return "l" + case 66189: + return "Ʌ" + case 66192: + return "X" + case 66194: + return "O" + case 66196: + return "ᛜ" + case 66197: + return "P" + case 66198: + return "S" + case 66199: + return "T" + case 66203: + return "+" + case 66208: + return "A" + case 66209: + return "B" + case 66210: + return "C" + case 66211: + return "Δ" + case 66213: + return "F" + case 66219: + return "O" + case 66221: + return "Ϙ" + case 66224: + return "M" + case 66225: + return "T" + case 66226: + return "Y" + case 66227: + return "Φ" + case 66228: + return "X" + case 66229: + return "Ψ" + case 66230: + return "Ω" + case 66232: + return "ⵀ" + case 66255: + return "H" + case 66273: + return "د" + case 66276: + return "و" + case 66280: + return "ط" + case 66290: + return "ص" + case 66293: + return "Z" + case 66305: + return "B" + case 66306: + return "C" + case 66313: + return "l" + case 66321: + return "M" + case 66322: + return "Ϙ" + case 66325: + return "T" + case 66327: + return "X" + case 66330: + return "8" + case 66335: + return "*" + case 66336: + return "l" + case 66338: + return "X" + case 66513: + return "𐎂" + case 66515: + return "𐎓" + case 66561: + return "Ɛ" + case 66564: + return "O" + case 66577: + return "ꓶ" + case 66581: + return "C" + case 66587: + return "L" + case 66591: + return "Ɒ" + case 66592: + return "S" + case 66595: + return "Ɔ" + case 66597: + return "И" + case 66601: + return "ꞓ" + case 66602: + return "ʚ" + case 66604: + return "o" + case 66621: + return "c" + case 66623: + return "ɷ" + case 66626: + return "ɞ" + case 66627: + return "ʟ" + case 66632: + return "s" + case 66635: + return "ɔ" + case 66637: + return "ᴎ" + case 66720: + return "𐒆" + case 66736: + return "Ʌ" + case 66740: + return "R" + case 66748: + return "Ӄ" + case 66754: + return "O" + case 66755: + return "ʘ" + case 66756: + return "Þ" + case 66765: + return "Ћ" + case 66766: + return "U" + case 66768: + return "ᛦ" + case 66769: + return "Ψ" + case 66770: + return "7" + case 66776: + return "ʌ" + case 66779: + return "λ" + case 66794: + return "o" + case 66795: + return "ꙩ" + case 66806: + return "u" + case 66809: + return "ψ" + case 66835: + return "N" + case 66838: + return "O" + case 66840: + return "K" + case 66844: + return "C" + case 66845: + return "V" + case 66853: + return "F" + case 66854: + return "L" + case 66855: + return "X" + case 68154: + return "̣" + case 68176: + return "." + case 68183: + return "𐩖𐩖" + case 68858: + return "𐲥" + case 68860: + return "𐲂" + case 69819: + return "॰" + case 70087: + return "॰" + case 70090: + return "̣" + case 70091: + return "ऺ" + case 70107: + return "꣼" + case 70108: + return "ꣻ" + case 70110: + return "≈" + case 70400: + return "̊" + case 70675: + return "𑐴𑑂𑐒" + case 70681: + return "𑐴𑑂𑐘" + case 70692: + return "𑐴𑑂𑐣" + case 70698: + return "𑐴𑑂𑐩" + case 70701: + return "𑐴𑑂𑐬" + case 70703: + return "𑐴𑑂𑐮" + case 70732: + return "𑑋𑑋" + case 70802: + return "ঘ" + case 70804: + return "চ" + case 70806: + return "জ" + case 70808: + return "ঞ" + case 70809: + return "ট" + case 70811: + return "ড" + case 70813: + return "ল" + case 70814: + return "ত" + case 70815: + return "থ" + case 70816: + return "দ" + case 70817: + return "ধ" + case 70818: + return "ন" + case 70819: + return "প" + case 70823: + return "ম" + case 70824: + return "য" + case 70825: + return "ব" + case 70826: + return "ণ" + case 70827: + return "র" + case 70829: + return "ষ" + case 70830: + return "স" + case 70832: + return "া" + case 70833: + return "ি" + case 70841: + return "ে" + case 70844: + return "ো" + case 70845: + return "ৗ" + case 70846: + return "ৌ" + case 70847: + return "̆̇" + case 70849: + return "ঃ" + case 70850: + return "্" + case 70851: + return "̣" + case 70852: + return "ঽ" + case 70853: + return "ẇ" + case 70864: + return "O" + case 70865: + return "১" + case 70866: + return "২" + case 70870: + return "৬" + case 71128: + return "𑖂" + case 71129: + return "𑖂" + case 71130: + return "𑖃" + case 71131: + return "𑖄" + case 71132: + return "𑖲" + case 71133: + return "𑖳" + case 71234: + return "𑙁𑙁" + case 71424: + return "rn" + case 71430: + return "v" + case 71434: + return "w" + case 71438: + return "w" + case 71439: + return "w" + case 71840: + return "V" + case 71842: + return "F" + case 71843: + return "L" + case 71844: + return "Y" + case 71846: + return "E" + case 71848: + return "∇" + case 71849: + return "Z" + case 71852: + return "9" + case 71854: + return "E" + case 71855: + return "4" + case 71858: + return "L" + case 71861: + return "O" + case 71863: + return "ᛜ" + case 71864: + return "U" + case 71867: + return "5" + case 71868: + return "T" + case 71872: + return "v" + case 71873: + return "s" + case 71874: + return "F" + case 71875: + return "i" + case 71876: + return "z" + case 71878: + return "7" + case 71880: + return "o" + case 71882: + return "3" + case 71884: + return "9" + case 71886: + return "ꞓ" + case 71893: + return "6" + case 71894: + return "9" + case 71895: + return "o" + case 71896: + return "u" + case 71900: + return "y" + case 71904: + return "O" + case 71907: + return "rn" + case 71908: + return "٩" + case 71909: + return "Z" + case 71910: + return "W" + case 71913: + return "C" + case 71916: + return "X" + case 71919: + return "W" + case 71922: + return "C" + case 72422: + return "𑫥𑫯" + case 72423: + return "𑫥𑫰" + case 72424: + return "𑫥𑫥" + case 72425: + return "𑫥𑫥𑫯" + case 72426: + return "𑫥𑫥𑫰" + case 72428: + return "𑫫𑫯" + case 72429: + return "𑫫𑫫" + case 72430: + return "𑫫𑫫𑫯" + case 72436: + return "𑫳𑫯" + case 72437: + return "𑫳𑫰" + case 72438: + return "𑫳𑫳" + case 72439: + return "𑫳𑫳𑫯" + case 72440: + return "𑫳𑫳𑫰" + case 72770: + return "𑱁𑱁" + case 72882: + return "𑲪" + case 73784: + return "𐎚" + case 78585: + return "𐦞" + case 93959: + return "Γ" + case 93960: + return "V" + case 93962: + return "T" + case 93974: + return "L" + case 93978: + return "Δ" + case 93980: + return "Ꙙ" + case 93990: + return "ꓶ" + case 93992: + return "l" + case 93997: + return "Ɛ" + case 94005: + return "R" + case 94010: + return "S" + case 94011: + return "3" + case 94013: + return "Ʌ" + case 94015: + return ">" + case 94016: + return "A" + case 94018: + return "U" + case 94019: + return "Y" + case 94033: + return "'" + case 94034: + return "'" + case 119060: + return "{" + case 119149: + return "." + case 119298: + return "Ӿ" + case 119302: + return "3" + case 119307: + return "И" + case 119309: + return "V" + case 119311: + return "\\" + case 119314: + return "7" + case 119315: + return "F" + case 119316: + return "𐊼" + case 119317: + return "ꓶ" + case 119318: + return "R" + case 119319: + return "Ɐ" + case 119322: + return "O̵" + case 119323: + return "⅄" + case 119324: + return "ꓕ" + case 119329: + return "Ɛ" + case 119330: + return "Ѡ" + case 119338: + return "L" + case 119339: + return "ꓶ" + case 119344: + return "ꟻ" + case 119350: + return "<" + case 119351: + return ">" + case 119352: + return "⊏" + case 119353: + return "⊐" + case 119354: + return "/" + case 119355: + return "\\" + case 119359: + return "ᛋ" + case 119365: + return "Ո" + case 119808: + return "A" + case 119809: + return "B" + case 119810: + return "C" + case 119811: + return "D" + case 119812: + return "E" + case 119813: + return "F" + case 119814: + return "G" + case 119815: + return "H" + case 119816: + return "l" + case 119817: + return "J" + case 119818: + return "K" + case 119819: + return "L" + case 119820: + return "M" + case 119821: + return "N" + case 119822: + return "O" + case 119823: + return "P" + case 119824: + return "Q" + case 119825: + return "R" + case 119826: + return "S" + case 119827: + return "T" + case 119828: + return "U" + case 119829: + return "V" + case 119830: + return "W" + case 119831: + return "X" + case 119832: + return "Y" + case 119833: + return "Z" + case 119834: + return "a" + case 119835: + return "b" + case 119836: + return "c" + case 119837: + return "d" + case 119838: + return "e" + case 119839: + return "f" + case 119840: + return "g" + case 119841: + return "h" + case 119842: + return "i" + case 119843: + return "j" + case 119844: + return "k" + case 119845: + return "l" + case 119846: + return "rn" + case 119847: + return "n" + case 119848: + return "o" + case 119849: + return "p" + case 119850: + return "q" + case 119851: + return "r" + case 119852: + return "s" + case 119853: + return "t" + case 119854: + return "u" + case 119855: + return "v" + case 119856: + return "w" + case 119857: + return "x" + case 119858: + return "y" + case 119859: + return "z" + case 119860: + return "A" + case 119861: + return "B" + case 119862: + return "C" + case 119863: + return "D" + case 119864: + return "E" + case 119865: + return "F" + case 119866: + return "G" + case 119867: + return "H" + case 119868: + return "l" + case 119869: + return "J" + case 119870: + return "K" + case 119871: + return "L" + case 119872: + return "M" + case 119873: + return "N" + case 119874: + return "O" + case 119875: + return "P" + case 119876: + return "Q" + case 119877: + return "R" + case 119878: + return "S" + case 119879: + return "T" + case 119880: + return "U" + case 119881: + return "V" + case 119882: + return "W" + case 119883: + return "X" + case 119884: + return "Y" + case 119885: + return "Z" + case 119886: + return "a" + case 119887: + return "b" + case 119888: + return "c" + case 119889: + return "d" + case 119890: + return "e" + case 119891: + return "f" + case 119892: + return "g" + case 119894: + return "i" + case 119895: + return "j" + case 119896: + return "k" + case 119897: + return "l" + case 119898: + return "rn" + case 119899: + return "n" + case 119900: + return "o" + case 119901: + return "p" + case 119902: + return "q" + case 119903: + return "r" + case 119904: + return "s" + case 119905: + return "t" + case 119906: + return "u" + case 119907: + return "v" + case 119908: + return "w" + case 119909: + return "x" + case 119910: + return "y" + case 119911: + return "z" + case 119912: + return "A" + case 119913: + return "B" + case 119914: + return "C" + case 119915: + return "D" + case 119916: + return "E" + case 119917: + return "F" + case 119918: + return "G" + case 119919: + return "H" + case 119920: + return "l" + case 119921: + return "J" + case 119922: + return "K" + case 119923: + return "L" + case 119924: + return "M" + case 119925: + return "N" + case 119926: + return "O" + case 119927: + return "P" + case 119928: + return "Q" + case 119929: + return "R" + case 119930: + return "S" + case 119931: + return "T" + case 119932: + return "U" + case 119933: + return "V" + case 119934: + return "W" + case 119935: + return "X" + case 119936: + return "Y" + case 119937: + return "Z" + case 119938: + return "a" + case 119939: + return "b" + case 119940: + return "c" + case 119941: + return "d" + case 119942: + return "e" + case 119943: + return "f" + case 119944: + return "g" + case 119945: + return "h" + case 119946: + return "i" + case 119947: + return "j" + case 119948: + return "k" + case 119949: + return "l" + case 119950: + return "rn" + case 119951: + return "n" + case 119952: + return "o" + case 119953: + return "p" + case 119954: + return "q" + case 119955: + return "r" + case 119956: + return "s" + case 119957: + return "t" + case 119958: + return "u" + case 119959: + return "v" + case 119960: + return "w" + case 119961: + return "x" + case 119962: + return "y" + case 119963: + return "z" + case 119964: + return "A" + case 119966: + return "C" + case 119967: + return "D" + case 119970: + return "G" + case 119973: + return "J" + case 119974: + return "K" + case 119977: + return "N" + case 119978: + return "O" + case 119979: + return "P" + case 119980: + return "Q" + case 119982: + return "S" + case 119983: + return "T" + case 119984: + return "U" + case 119985: + return "V" + case 119986: + return "W" + case 119987: + return "X" + case 119988: + return "Y" + case 119989: + return "Z" + case 119990: + return "a" + case 119991: + return "b" + case 119992: + return "c" + case 119993: + return "d" + case 119995: + return "f" + case 119997: + return "h" + case 119998: + return "i" + case 119999: + return "j" + case 120000: + return "k" + case 120001: + return "l" + case 120002: + return "rn" + case 120003: + return "n" + case 120005: + return "p" + case 120006: + return "q" + case 120007: + return "r" + case 120008: + return "s" + case 120009: + return "t" + case 120010: + return "u" + case 120011: + return "v" + case 120012: + return "w" + case 120013: + return "x" + case 120014: + return "y" + case 120015: + return "z" + case 120016: + return "A" + case 120017: + return "B" + case 120018: + return "C" + case 120019: + return "D" + case 120020: + return "E" + case 120021: + return "F" + case 120022: + return "G" + case 120023: + return "H" + case 120024: + return "l" + case 120025: + return "J" + case 120026: + return "K" + case 120027: + return "L" + case 120028: + return "M" + case 120029: + return "N" + case 120030: + return "O" + case 120031: + return "P" + case 120032: + return "Q" + case 120033: + return "R" + case 120034: + return "S" + case 120035: + return "T" + case 120036: + return "U" + case 120037: + return "V" + case 120038: + return "W" + case 120039: + return "X" + case 120040: + return "Y" + case 120041: + return "Z" + case 120042: + return "a" + case 120043: + return "b" + case 120044: + return "c" + case 120045: + return "d" + case 120046: + return "e" + case 120047: + return "f" + case 120048: + return "g" + case 120049: + return "h" + case 120050: + return "i" + case 120051: + return "j" + case 120052: + return "k" + case 120053: + return "l" + case 120054: + return "rn" + case 120055: + return "n" + case 120056: + return "o" + case 120057: + return "p" + case 120058: + return "q" + case 120059: + return "r" + case 120060: + return "s" + case 120061: + return "t" + case 120062: + return "u" + case 120063: + return "v" + case 120064: + return "w" + case 120065: + return "x" + case 120066: + return "y" + case 120067: + return "z" + case 120068: + return "A" + case 120069: + return "B" + case 120071: + return "D" + case 120072: + return "E" + case 120073: + return "F" + case 120074: + return "G" + case 120077: + return "J" + case 120078: + return "K" + case 120079: + return "L" + case 120080: + return "M" + case 120081: + return "N" + case 120082: + return "O" + case 120083: + return "P" + case 120084: + return "Q" + case 120086: + return "S" + case 120087: + return "T" + case 120088: + return "U" + case 120089: + return "V" + case 120090: + return "W" + case 120091: + return "X" + case 120092: + return "Y" + case 120094: + return "a" + case 120095: + return "b" + case 120096: + return "c" + case 120097: + return "d" + case 120098: + return "e" + case 120099: + return "f" + case 120100: + return "g" + case 120101: + return "h" + case 120102: + return "i" + case 120103: + return "j" + case 120104: + return "k" + case 120105: + return "l" + case 120106: + return "rn" + case 120107: + return "n" + case 120108: + return "o" + case 120109: + return "p" + case 120110: + return "q" + case 120111: + return "r" + case 120112: + return "s" + case 120113: + return "t" + case 120114: + return "u" + case 120115: + return "v" + case 120116: + return "w" + case 120117: + return "x" + case 120118: + return "y" + case 120119: + return "z" + case 120120: + return "A" + case 120121: + return "B" + case 120123: + return "D" + case 120124: + return "E" + case 120125: + return "F" + case 120126: + return "G" + case 120128: + return "l" + case 120129: + return "J" + case 120130: + return "K" + case 120131: + return "L" + case 120132: + return "M" + case 120134: + return "O" + case 120138: + return "S" + case 120139: + return "T" + case 120140: + return "U" + case 120141: + return "V" + case 120142: + return "W" + case 120143: + return "X" + case 120144: + return "Y" + case 120146: + return "a" + case 120147: + return "b" + case 120148: + return "c" + case 120149: + return "d" + case 120150: + return "e" + case 120151: + return "f" + case 120152: + return "g" + case 120153: + return "h" + case 120154: + return "i" + case 120155: + return "j" + case 120156: + return "k" + case 120157: + return "l" + case 120158: + return "rn" + case 120159: + return "n" + case 120160: + return "o" + case 120161: + return "p" + case 120162: + return "q" + case 120163: + return "r" + case 120164: + return "s" + case 120165: + return "t" + case 120166: + return "u" + case 120167: + return "v" + case 120168: + return "w" + case 120169: + return "x" + case 120170: + return "y" + case 120171: + return "z" + case 120172: + return "A" + case 120173: + return "B" + case 120174: + return "C" + case 120175: + return "D" + case 120176: + return "E" + case 120177: + return "F" + case 120178: + return "G" + case 120179: + return "H" + case 120180: + return "l" + case 120181: + return "J" + case 120182: + return "K" + case 120183: + return "L" + case 120184: + return "M" + case 120185: + return "N" + case 120186: + return "O" + case 120187: + return "P" + case 120188: + return "Q" + case 120189: + return "R" + case 120190: + return "S" + case 120191: + return "T" + case 120192: + return "U" + case 120193: + return "V" + case 120194: + return "W" + case 120195: + return "X" + case 120196: + return "Y" + case 120197: + return "Z" + case 120198: + return "a" + case 120199: + return "b" + case 120200: + return "c" + case 120201: + return "d" + case 120202: + return "e" + case 120203: + return "f" + case 120204: + return "g" + case 120205: + return "h" + case 120206: + return "i" + case 120207: + return "j" + case 120208: + return "k" + case 120209: + return "l" + case 120210: + return "rn" + case 120211: + return "n" + case 120212: + return "o" + case 120213: + return "p" + case 120214: + return "q" + case 120215: + return "r" + case 120216: + return "s" + case 120217: + return "t" + case 120218: + return "u" + case 120219: + return "v" + case 120220: + return "w" + case 120221: + return "x" + case 120222: + return "y" + case 120223: + return "z" + case 120224: + return "A" + case 120225: + return "B" + case 120226: + return "C" + case 120227: + return "D" + case 120228: + return "E" + case 120229: + return "F" + case 120230: + return "G" + case 120231: + return "H" + case 120232: + return "l" + case 120233: + return "J" + case 120234: + return "K" + case 120235: + return "L" + case 120236: + return "M" + case 120237: + return "N" + case 120238: + return "O" + case 120239: + return "P" + case 120240: + return "Q" + case 120241: + return "R" + case 120242: + return "S" + case 120243: + return "T" + case 120244: + return "U" + case 120245: + return "V" + case 120246: + return "W" + case 120247: + return "X" + case 120248: + return "Y" + case 120249: + return "Z" + case 120250: + return "a" + case 120251: + return "b" + case 120252: + return "c" + case 120253: + return "d" + case 120254: + return "e" + case 120255: + return "f" + case 120256: + return "g" + case 120257: + return "h" + case 120258: + return "i" + case 120259: + return "j" + case 120260: + return "k" + case 120261: + return "l" + case 120262: + return "rn" + case 120263: + return "n" + case 120264: + return "o" + case 120265: + return "p" + case 120266: + return "q" + case 120267: + return "r" + case 120268: + return "s" + case 120269: + return "t" + case 120270: + return "u" + case 120271: + return "v" + case 120272: + return "w" + case 120273: + return "x" + case 120274: + return "y" + case 120275: + return "z" + case 120276: + return "A" + case 120277: + return "B" + case 120278: + return "C" + case 120279: + return "D" + case 120280: + return "E" + case 120281: + return "F" + case 120282: + return "G" + case 120283: + return "H" + case 120284: + return "l" + case 120285: + return "J" + case 120286: + return "K" + case 120287: + return "L" + case 120288: + return "M" + case 120289: + return "N" + case 120290: + return "O" + case 120291: + return "P" + case 120292: + return "Q" + case 120293: + return "R" + case 120294: + return "S" + case 120295: + return "T" + case 120296: + return "U" + case 120297: + return "V" + case 120298: + return "W" + case 120299: + return "X" + case 120300: + return "Y" + case 120301: + return "Z" + case 120302: + return "a" + case 120303: + return "b" + case 120304: + return "c" + case 120305: + return "d" + case 120306: + return "e" + case 120307: + return "f" + case 120308: + return "g" + case 120309: + return "h" + case 120310: + return "i" + case 120311: + return "j" + case 120312: + return "k" + case 120313: + return "l" + case 120314: + return "rn" + case 120315: + return "n" + case 120316: + return "o" + case 120317: + return "p" + case 120318: + return "q" + case 120319: + return "r" + case 120320: + return "s" + case 120321: + return "t" + case 120322: + return "u" + case 120323: + return "v" + case 120324: + return "w" + case 120325: + return "x" + case 120326: + return "y" + case 120327: + return "z" + case 120328: + return "A" + case 120329: + return "B" + case 120330: + return "C" + case 120331: + return "D" + case 120332: + return "E" + case 120333: + return "F" + case 120334: + return "G" + case 120335: + return "H" + case 120336: + return "l" + case 120337: + return "J" + case 120338: + return "K" + case 120339: + return "L" + case 120340: + return "M" + case 120341: + return "N" + case 120342: + return "O" + case 120343: + return "P" + case 120344: + return "Q" + case 120345: + return "R" + case 120346: + return "S" + case 120347: + return "T" + case 120348: + return "U" + case 120349: + return "V" + case 120350: + return "W" + case 120351: + return "X" + case 120352: + return "Y" + case 120353: + return "Z" + case 120354: + return "a" + case 120355: + return "b" + case 120356: + return "c" + case 120357: + return "d" + case 120358: + return "e" + case 120359: + return "f" + case 120360: + return "g" + case 120361: + return "h" + case 120362: + return "i" + case 120363: + return "j" + case 120364: + return "k" + case 120365: + return "l" + case 120366: + return "rn" + case 120367: + return "n" + case 120368: + return "o" + case 120369: + return "p" + case 120370: + return "q" + case 120371: + return "r" + case 120372: + return "s" + case 120373: + return "t" + case 120374: + return "u" + case 120375: + return "v" + case 120376: + return "w" + case 120377: + return "x" + case 120378: + return "y" + case 120379: + return "z" + case 120380: + return "A" + case 120381: + return "B" + case 120382: + return "C" + case 120383: + return "D" + case 120384: + return "E" + case 120385: + return "F" + case 120386: + return "G" + case 120387: + return "H" + case 120388: + return "l" + case 120389: + return "J" + case 120390: + return "K" + case 120391: + return "L" + case 120392: + return "M" + case 120393: + return "N" + case 120394: + return "O" + case 120395: + return "P" + case 120396: + return "Q" + case 120397: + return "R" + case 120398: + return "S" + case 120399: + return "T" + case 120400: + return "U" + case 120401: + return "V" + case 120402: + return "W" + case 120403: + return "X" + case 120404: + return "Y" + case 120405: + return "Z" + case 120406: + return "a" + case 120407: + return "b" + case 120408: + return "c" + case 120409: + return "d" + case 120410: + return "e" + case 120411: + return "f" + case 120412: + return "g" + case 120413: + return "h" + case 120414: + return "i" + case 120415: + return "j" + case 120416: + return "k" + case 120417: + return "l" + case 120418: + return "rn" + case 120419: + return "n" + case 120420: + return "o" + case 120421: + return "p" + case 120422: + return "q" + case 120423: + return "r" + case 120424: + return "s" + case 120425: + return "t" + case 120426: + return "u" + case 120427: + return "v" + case 120428: + return "w" + case 120429: + return "x" + case 120430: + return "y" + case 120431: + return "z" + case 120432: + return "A" + case 120433: + return "B" + case 120434: + return "C" + case 120435: + return "D" + case 120436: + return "E" + case 120437: + return "F" + case 120438: + return "G" + case 120439: + return "H" + case 120440: + return "l" + case 120441: + return "J" + case 120442: + return "K" + case 120443: + return "L" + case 120444: + return "M" + case 120445: + return "N" + case 120446: + return "O" + case 120447: + return "P" + case 120448: + return "Q" + case 120449: + return "R" + case 120450: + return "S" + case 120451: + return "T" + case 120452: + return "U" + case 120453: + return "V" + case 120454: + return "W" + case 120455: + return "X" + case 120456: + return "Y" + case 120457: + return "Z" + case 120458: + return "a" + case 120459: + return "b" + case 120460: + return "c" + case 120461: + return "d" + case 120462: + return "e" + case 120463: + return "f" + case 120464: + return "g" + case 120465: + return "h" + case 120466: + return "i" + case 120467: + return "j" + case 120468: + return "k" + case 120469: + return "l" + case 120470: + return "rn" + case 120471: + return "n" + case 120472: + return "o" + case 120473: + return "p" + case 120474: + return "q" + case 120475: + return "r" + case 120476: + return "s" + case 120477: + return "t" + case 120478: + return "u" + case 120479: + return "v" + case 120480: + return "w" + case 120481: + return "x" + case 120482: + return "y" + case 120483: + return "z" + case 120484: + return "i" + case 120485: + return "ȷ" + case 120488: + return "A" + case 120489: + return "B" + case 120490: + return "Γ" + case 120491: + return "Δ" + case 120492: + return "E" + case 120493: + return "Z" + case 120494: + return "H" + case 120495: + return "O̵" + case 120496: + return "l" + case 120497: + return "K" + case 120498: + return "Ʌ" + case 120499: + return "M" + case 120500: + return "N" + case 120501: + return "Ξ" + case 120502: + return "O" + case 120503: + return "Π" + case 120504: + return "P" + case 120505: + return "O̵" + case 120506: + return "Ʃ" + case 120507: + return "T" + case 120508: + return "Y" + case 120509: + return "Φ" + case 120510: + return "X" + case 120511: + return "Ψ" + case 120512: + return "Ω" + case 120513: + return "∇" + case 120514: + return "a" + case 120515: + return "ß" + case 120516: + return "y" + case 120517: + return "ẟ" + case 120518: + return "ꞓ" + case 120519: + return "ζ" + case 120520: + return "n̩" + case 120521: + return "O̵" + case 120522: + return "i" + case 120523: + return "ĸ" + case 120524: + return "λ" + case 120525: + return "μ" + case 120526: + return "v" + case 120527: + return "ξ" + case 120528: + return "o" + case 120529: + return "π" + case 120530: + return "p" + case 120531: + return "ς" + case 120532: + return "o" + case 120533: + return "ᴛ" + case 120534: + return "u" + case 120535: + return "ɸ" + case 120536: + return "χ" + case 120537: + return "ψ" + case 120538: + return "ω" + case 120539: + return "∂" + case 120540: + return "ꞓ" + case 120541: + return "O̵" + case 120542: + return "ĸ" + case 120543: + return "ɸ" + case 120544: + return "p" + case 120545: + return "π" + case 120546: + return "A" + case 120547: + return "B" + case 120548: + return "Γ" + case 120549: + return "Δ" + case 120550: + return "E" + case 120551: + return "Z" + case 120552: + return "H" + case 120553: + return "O̵" + case 120554: + return "l" + case 120555: + return "K" + case 120556: + return "Ʌ" + case 120557: + return "M" + case 120558: + return "N" + case 120559: + return "Ξ" + case 120560: + return "O" + case 120561: + return "Π" + case 120562: + return "P" + case 120563: + return "O̵" + case 120564: + return "Ʃ" + case 120565: + return "T" + case 120566: + return "Y" + case 120567: + return "Φ" + case 120568: + return "X" + case 120569: + return "Ψ" + case 120570: + return "Ω" + case 120571: + return "∇" + case 120572: + return "a" + case 120573: + return "ß" + case 120574: + return "y" + case 120575: + return "ẟ" + case 120576: + return "ꞓ" + case 120577: + return "ζ" + case 120578: + return "n̩" + case 120579: + return "O̵" + case 120580: + return "i" + case 120581: + return "ĸ" + case 120582: + return "λ" + case 120583: + return "μ" + case 120584: + return "v" + case 120585: + return "ξ" + case 120586: + return "o" + case 120587: + return "π" + case 120588: + return "p" + case 120589: + return "ς" + case 120590: + return "o" + case 120591: + return "ᴛ" + case 120592: + return "u" + case 120593: + return "ɸ" + case 120594: + return "χ" + case 120595: + return "ψ" + case 120596: + return "ω" + case 120597: + return "∂" + case 120598: + return "ꞓ" + case 120599: + return "O̵" + case 120600: + return "ĸ" + case 120601: + return "ɸ" + case 120602: + return "p" + case 120603: + return "π" + case 120604: + return "A" + case 120605: + return "B" + case 120606: + return "Γ" + case 120607: + return "Δ" + case 120608: + return "E" + case 120609: + return "Z" + case 120610: + return "H" + case 120611: + return "O̵" + case 120612: + return "l" + case 120613: + return "K" + case 120614: + return "Ʌ" + case 120615: + return "M" + case 120616: + return "N" + case 120617: + return "Ξ" + case 120618: + return "O" + case 120619: + return "Π" + case 120620: + return "P" + case 120621: + return "O̵" + case 120622: + return "Ʃ" + case 120623: + return "T" + case 120624: + return "Y" + case 120625: + return "Φ" + case 120626: + return "X" + case 120627: + return "Ψ" + case 120628: + return "Ω" + case 120629: + return "∇" + case 120630: + return "a" + case 120631: + return "ß" + case 120632: + return "y" + case 120633: + return "ẟ" + case 120634: + return "ꞓ" + case 120635: + return "ζ" + case 120636: + return "n̩" + case 120637: + return "O̵" + case 120638: + return "i" + case 120639: + return "ĸ" + case 120640: + return "λ" + case 120641: + return "μ" + case 120642: + return "v" + case 120643: + return "ξ" + case 120644: + return "o" + case 120645: + return "π" + case 120646: + return "p" + case 120647: + return "ς" + case 120648: + return "o" + case 120649: + return "ᴛ" + case 120650: + return "u" + case 120651: + return "ɸ" + case 120652: + return "χ" + case 120653: + return "ψ" + case 120654: + return "ω" + case 120655: + return "∂" + case 120656: + return "ꞓ" + case 120657: + return "O̵" + case 120658: + return "ĸ" + case 120659: + return "ɸ" + case 120660: + return "p" + case 120661: + return "π" + case 120662: + return "A" + case 120663: + return "B" + case 120664: + return "Γ" + case 120665: + return "Δ" + case 120666: + return "E" + case 120667: + return "Z" + case 120668: + return "H" + case 120669: + return "O̵" + case 120670: + return "l" + case 120671: + return "K" + case 120672: + return "Ʌ" + case 120673: + return "M" + case 120674: + return "N" + case 120675: + return "Ξ" + case 120676: + return "O" + case 120677: + return "Π" + case 120678: + return "P" + case 120679: + return "O̵" + case 120680: + return "Ʃ" + case 120681: + return "T" + case 120682: + return "Y" + case 120683: + return "Φ" + case 120684: + return "X" + case 120685: + return "Ψ" + case 120686: + return "Ω" + case 120687: + return "∇" + case 120688: + return "a" + case 120689: + return "ß" + case 120690: + return "y" + case 120691: + return "ẟ" + case 120692: + return "ꞓ" + case 120693: + return "ζ" + case 120694: + return "n̩" + case 120695: + return "O̵" + case 120696: + return "i" + case 120697: + return "ĸ" + case 120698: + return "λ" + case 120699: + return "μ" + case 120700: + return "v" + case 120701: + return "ξ" + case 120702: + return "o" + case 120703: + return "π" + case 120704: + return "p" + case 120705: + return "ς" + case 120706: + return "o" + case 120707: + return "ᴛ" + case 120708: + return "u" + case 120709: + return "ɸ" + case 120710: + return "χ" + case 120711: + return "ψ" + case 120712: + return "ω" + case 120713: + return "∂" + case 120714: + return "ꞓ" + case 120715: + return "O̵" + case 120716: + return "ĸ" + case 120717: + return "ɸ" + case 120718: + return "p" + case 120719: + return "π" + case 120720: + return "A" + case 120721: + return "B" + case 120722: + return "Γ" + case 120723: + return "Δ" + case 120724: + return "E" + case 120725: + return "Z" + case 120726: + return "H" + case 120727: + return "O̵" + case 120728: + return "l" + case 120729: + return "K" + case 120730: + return "Ʌ" + case 120731: + return "M" + case 120732: + return "N" + case 120733: + return "Ξ" + case 120734: + return "O" + case 120735: + return "Π" + case 120736: + return "P" + case 120737: + return "O̵" + case 120738: + return "Ʃ" + case 120739: + return "T" + case 120740: + return "Y" + case 120741: + return "Φ" + case 120742: + return "X" + case 120743: + return "Ψ" + case 120744: + return "Ω" + case 120745: + return "∇" + case 120746: + return "a" + case 120747: + return "ß" + case 120748: + return "y" + case 120749: + return "ẟ" + case 120750: + return "ꞓ" + case 120751: + return "ζ" + case 120752: + return "n̩" + case 120753: + return "O̵" + case 120754: + return "i" + case 120755: + return "ĸ" + case 120756: + return "λ" + case 120757: + return "μ" + case 120758: + return "v" + case 120759: + return "ξ" + case 120760: + return "o" + case 120761: + return "π" + case 120762: + return "p" + case 120763: + return "ς" + case 120764: + return "o" + case 120765: + return "ᴛ" + case 120766: + return "u" + case 120767: + return "ɸ" + case 120768: + return "χ" + case 120769: + return "ψ" + case 120770: + return "ω" + case 120771: + return "∂" + case 120772: + return "ꞓ" + case 120773: + return "O̵" + case 120774: + return "ĸ" + case 120775: + return "ɸ" + case 120776: + return "p" + case 120777: + return "π" + case 120778: + return "F" + case 120779: + return "ϝ" + case 120782: + return "O" + case 120783: + return "l" + case 120784: + return "2" + case 120785: + return "3" + case 120786: + return "4" + case 120787: + return "5" + case 120788: + return "6" + case 120789: + return "7" + case 120790: + return "8" + case 120791: + return "9" + case 120792: + return "O" + case 120793: + return "l" + case 120794: + return "2" + case 120795: + return "3" + case 120796: + return "4" + case 120797: + return "5" + case 120798: + return "6" + case 120799: + return "7" + case 120800: + return "8" + case 120801: + return "9" + case 120802: + return "O" + case 120803: + return "l" + case 120804: + return "2" + case 120805: + return "3" + case 120806: + return "4" + case 120807: + return "5" + case 120808: + return "6" + case 120809: + return "7" + case 120810: + return "8" + case 120811: + return "9" + case 120812: + return "O" + case 120813: + return "l" + case 120814: + return "2" + case 120815: + return "3" + case 120816: + return "4" + case 120817: + return "5" + case 120818: + return "6" + case 120819: + return "7" + case 120820: + return "8" + case 120821: + return "9" + case 120822: + return "O" + case 120823: + return "l" + case 120824: + return "2" + case 120825: + return "3" + case 120826: + return "4" + case 120827: + return "5" + case 120828: + return "6" + case 120829: + return "7" + case 120830: + return "8" + case 120831: + return "9" + case 125127: + return "l" + case 125128: + return "∠" + case 125129: + return "٣" + case 125131: + return "8" + case 125132: + return "∂" + case 125133: + return "∂̵" + case 126464: + return "l" + case 126465: + return "ب" + case 126466: + return "ج" + case 126467: + return "د" + case 126469: + return "و" + case 126470: + return "ز" + case 126471: + return "ح" + case 126472: + return "ط" + case 126473: + return "ى" + case 126474: + return "ك" + case 126475: + return "ل" + case 126476: + return "م" + case 126477: + return "ن" + case 126478: + return "س" + case 126479: + return "ع" + case 126480: + return "ف" + case 126481: + return "ص" + case 126482: + return "ق" + case 126483: + return "ر" + case 126484: + return "سۛ" + case 126485: + return "ت" + case 126486: + return "ىۛ" + case 126487: + return "خ" + case 126488: + return "ذ" + case 126489: + return "ض" + case 126490: + return "ظ" + case 126491: + return "غ" + case 126492: + return "ى" + case 126493: + return "ى" + case 126494: + return "ڡ" + case 126495: + return "ڡ" + case 126497: + return "ب" + case 126498: + return "ج" + case 126500: + return "o" + case 126503: + return "ح" + case 126505: + return "ى" + case 126506: + return "ك" + case 126507: + return "ل" + case 126508: + return "م" + case 126509: + return "ن" + case 126510: + return "س" + case 126511: + return "ع" + case 126512: + return "ف" + case 126513: + return "ص" + case 126514: + return "ق" + case 126516: + return "سۛ" + case 126517: + return "ت" + case 126518: + return "ىۛ" + case 126519: + return "خ" + case 126521: + return "ض" + case 126523: + return "غ" + case 126530: + return "ج" + case 126535: + return "ح" + case 126537: + return "ى" + case 126539: + return "ل" + case 126541: + return "ن" + case 126542: + return "س" + case 126543: + return "ع" + case 126545: + return "ص" + case 126546: + return "ق" + case 126548: + return "سۛ" + case 126551: + return "خ" + case 126553: + return "ض" + case 126555: + return "غ" + case 126557: + return "ى" + case 126559: + return "ڡ" + case 126561: + return "ب" + case 126562: + return "ج" + case 126564: + return "o" + case 126567: + return "ح" + case 126568: + return "ط" + case 126569: + return "ى" + case 126570: + return "ك" + case 126572: + return "م" + case 126573: + return "ن" + case 126574: + return "س" + case 126575: + return "ع" + case 126576: + return "ف" + case 126577: + return "ص" + case 126578: + return "ق" + case 126580: + return "سۛ" + case 126581: + return "ت" + case 126582: + return "ىۛ" + case 126583: + return "خ" + case 126585: + return "ض" + case 126586: + return "ظ" + case 126587: + return "غ" + case 126588: + return "ى" + case 126590: + return "ڡ" + case 126592: + return "l" + case 126593: + return "ب" + case 126594: + return "ج" + case 126595: + return "د" + case 126596: + return "o" + case 126597: + return "و" + case 126598: + return "ز" + case 126599: + return "ح" + case 126600: + return "ط" + case 126601: + return "ى" + case 126603: + return "ل" + case 126604: + return "م" + case 126605: + return "ن" + case 126606: + return "س" + case 126607: + return "ع" + case 126608: + return "ف" + case 126609: + return "ص" + case 126610: + return "ق" + case 126611: + return "ر" + case 126612: + return "سۛ" + case 126613: + return "ت" + case 126614: + return "ىۛ" + case 126615: + return "خ" + case 126616: + return "ذ" + case 126617: + return "ض" + case 126618: + return "ظ" + case 126619: + return "غ" + case 126625: + return "ب" + case 126626: + return "ج" + case 126627: + return "د" + case 126629: + return "و" + case 126630: + return "ز" + case 126631: + return "ح" + case 126632: + return "ط" + case 126633: + return "ى" + case 126635: + return "ل" + case 126636: + return "م" + case 126637: + return "ن" + case 126638: + return "س" + case 126639: + return "ع" + case 126640: + return "ف" + case 126641: + return "ص" + case 126642: + return "ق" + case 126643: + return "ر" + case 126644: + return "سۛ" + case 126645: + return "ت" + case 126646: + return "ىۛ" + case 126647: + return "خ" + case 126648: + return "ذ" + case 126649: + return "ض" + case 126650: + return "ظ" + case 126651: + return "غ" + case 127232: + return "O." + case 127233: + return "O," + case 127234: + return "l," + case 127235: + return "2," + case 127236: + return "3," + case 127237: + return "4," + case 127238: + return "5," + case 127239: + return "6," + case 127240: + return "7," + case 127241: + return "8," + case 127242: + return "9," + case 127247: + return "$⃠" + case 127248: + return "(A)" + case 127249: + return "(B)" + case 127250: + return "(C)" + case 127251: + return "(D)" + case 127252: + return "(E)" + case 127253: + return "(F)" + case 127254: + return "(G)" + case 127255: + return "(H)" + case 127256: + return "(l)" + case 127257: + return "(J)" + case 127258: + return "(K)" + case 127259: + return "(L)" + case 127260: + return "(M)" + case 127261: + return "(N)" + case 127262: + return "(O)" + case 127263: + return "(P)" + case 127264: + return "(Q)" + case 127265: + return "(R)" + case 127266: + return "(S)" + case 127267: + return "(T)" + case 127268: + return "(U)" + case 127269: + return "(V)" + case 127270: + return "(W)" + case 127271: + return "(X)" + case 127272: + return "(Y)" + case 127273: + return "(Z)" + case 127274: + return "(S)" + case 127341: + return "㏄\t⃝" + case 127342: + return "C⃠" + case 127552: + return "(本)" + case 127553: + return "(三)" + case 127554: + return "(二)" + case 127555: + return "(安)" + case 127556: + return "(点)" + case 127557: + return "(打)" + case 127558: + return "(盗)" + case 127559: + return "(勝)" + case 127560: + return "(敗)" + case 127762: + return "☽" + case 127768: + return "☾" + case 127769: + return "☽" + case 128768: + return "QE" + case 128769: + return "Ꙙ" + case 128770: + return "Δ" + case 128772: + return "𐊼" + case 128775: + return "AR" + case 128776: + return "Vᷤ" + case 128778: + return "☩" + case 128788: + return "O̵" + case 128808: + return "𐊨" + case 128826: + return "⧟" + case 128844: + return "C" + case 128852: + return "ᛜ" + case 128853: + return "⊡" + case 128860: + return "sss" + case 128862: + return "≏" + case 128872: + return "T" + case 128875: + return "MB" + case 128876: + return "VB" + case 128881: + return "⊠" + case 130032: + return "O" + case 130033: + return "l" + case 130034: + return "2" + case 130035: + return "3" + case 130036: + return "4" + case 130037: + return "5" + case 130038: + return "6" + case 130039: + return "7" + case 130040: + return "8" + case 130041: + return "9" + case 139240: + return "❬" + case 194560: + return "丽" + case 194561: + return "丸" + case 194562: + return "乁" + case 194563: + return "𠄢" + case 194564: + return "你" + case 194565: + return "侮" + case 194566: + return "侻" + case 194567: + return "併" + case 194568: + return "偺" + case 194569: + return "備" + case 194570: + return "僧" + case 194571: + return "像" + case 194572: + return "㒞" + case 194573: + return "𠘺" + case 194574: + return "免" + case 194575: + return "兔" + case 194576: + return "兤" + case 194577: + return "具" + case 194578: + return "𠔜" + case 194579: + return "㒹" + case 194580: + return "內" + case 194581: + return "再" + case 194582: + return "𠕋" + case 194583: + return "冗" + case 194584: + return "冤" + case 194585: + return "仌" + case 194586: + return "冬" + case 194587: + return "况" + case 194588: + return "𩇟" + case 194589: + return "凵" + case 194590: + return "刃" + case 194591: + return "㓟" + case 194592: + return "刻" + case 194593: + return "剆" + case 194594: + return "割" + case 194595: + return "剷" + case 194596: + return "㔕" + case 194597: + return "勇" + case 194598: + return "勉" + case 194599: + return "勤" + case 194600: + return "勺" + case 194601: + return "包" + case 194602: + return "匆" + case 194603: + return "北" + case 194604: + return "卉" + case 194605: + return "卑" + case 194606: + return "博" + case 194607: + return "即" + case 194608: + return "卽" + case 194609: + return "卿" + case 194610: + return "卿" + case 194611: + return "卿" + case 194612: + return "𠨬" + case 194613: + return "灰" + case 194614: + return "及" + case 194615: + return "叟" + case 194616: + return "𠭣" + case 194617: + return "叫" + case 194618: + return "叱" + case 194619: + return "吆" + case 194620: + return "咞" + case 194621: + return "吸" + case 194622: + return "呈" + case 194623: + return "周" + case 194624: + return "咢" + case 194625: + return "哶" + case 194626: + return "唐" + case 194627: + return "啓" + case 194628: + return "啣" + case 194629: + return "善" + case 194630: + return "善" + case 194631: + return "喙" + case 194632: + return "喫" + case 194633: + return "喳" + case 194634: + return "嗂" + case 194635: + return "圖" + case 194636: + return "嘆" + case 194637: + return "圗" + case 194638: + return "噑" + case 194639: + return "噴" + case 194640: + return "切" + case 194641: + return "壮" + case 194642: + return "城" + case 194643: + return "埴" + case 194644: + return "堍" + case 194645: + return "型" + case 194646: + return "堲" + case 194647: + return "報" + case 194648: + return "墬" + case 194649: + return "𡓤" + case 194650: + return "売" + case 194651: + return "壷" + case 194652: + return "夆" + case 194653: + return "多" + case 194654: + return "夢" + case 194655: + return "奢" + case 194656: + return "𡚨" + case 194657: + return "𡛪" + case 194658: + return "姬" + case 194659: + return "娛" + case 194660: + return "娧" + case 194661: + return "姘" + case 194662: + return "婦" + case 194663: + return "㛮" + case 194664: + return "㛼" + case 194665: + return "嬈" + case 194666: + return "嬾" + case 194667: + return "嬾" + case 194668: + return "𡧈" + case 194669: + return "寃" + case 194670: + return "寘" + case 194671: + return "寧" + case 194672: + return "寳" + case 194673: + return "𡬘" + case 194674: + return "寿" + case 194675: + return "将" + case 194676: + return "当" + case 194677: + return "尢" + case 194678: + return "㞁" + case 194679: + return "屠" + case 194680: + return "屮" + case 194681: + return "峀" + case 194682: + return "岍" + case 194683: + return "𡷤" + case 194684: + return "嵃" + case 194685: + return "𡷦" + case 194686: + return "嵮" + case 194687: + return "嵫" + case 194688: + return "嵼" + case 194689: + return "巡" + case 194690: + return "巢" + case 194691: + return "㠯" + case 194692: + return "巽" + case 194693: + return "帨" + case 194694: + return "帽" + case 194695: + return "幩" + case 194696: + return "㡢" + case 194697: + return "𢆃" + case 194698: + return "㡼" + case 194699: + return "庰" + case 194700: + return "庳" + case 194701: + return "庶" + case 194702: + return "廊" + case 194703: + return "𪎒" + case 194704: + return "廾" + case 194705: + return "𢌱" + case 194706: + return "𢌱" + case 194707: + return "舁" + case 194708: + return "弢" + case 194709: + return "弢" + case 194710: + return "㣇" + case 194711: + return "𣊸" + case 194712: + return "𦇚" + case 194713: + return "形" + case 194714: + return "彫" + case 194715: + return "㣣" + case 194716: + return "徚" + case 194717: + return "忍" + case 194718: + return "志" + case 194719: + return "忹" + case 194720: + return "悁" + case 194721: + return "㤺" + case 194722: + return "㤜" + case 194723: + return "悔" + case 194724: + return "𢛔" + case 194725: + return "惇" + case 194726: + return "慈" + case 194727: + return "慌" + case 194728: + return "慎" + case 194729: + return "慌" + case 194730: + return "慺" + case 194731: + return "憎" + case 194732: + return "憲" + case 194733: + return "憤" + case 194734: + return "憯" + case 194735: + return "懞" + case 194736: + return "懲" + case 194737: + return "懶" + case 194738: + return "成" + case 194739: + return "戛" + case 194740: + return "扝" + case 194741: + return "抱" + case 194742: + return "拔" + case 194743: + return "捐" + case 194744: + return "𢬌" + case 194745: + return "挽" + case 194746: + return "拼" + case 194747: + return "捨" + case 194748: + return "掃" + case 194749: + return "揤" + case 194750: + return "𢯱" + case 194751: + return "搢" + case 194752: + return "揅" + case 194753: + return "掩" + case 194754: + return "㨮" + case 194755: + return "摩" + case 194756: + return "摾" + case 194757: + return "撝" + case 194758: + return "摷" + case 194759: + return "㩬" + case 194760: + return "敏" + case 194761: + return "敬" + case 194762: + return "𣀊" + case 194763: + return "旣" + case 194764: + return "書" + case 194765: + return "晉" + case 194766: + return "㬙" + case 194767: + return "暑" + case 194768: + return "㬈" + case 194769: + return "㫤" + case 194770: + return "冒" + case 194771: + return "冕" + case 194772: + return "最" + case 194773: + return "暜" + case 194774: + return "肭" + case 194775: + return "䏙" + case 194776: + return "朗" + case 194777: + return "望" + case 194778: + return "朡" + case 194779: + return "杞" + case 194780: + return "杓" + case 194781: + return "𣏃" + case 194782: + return "㭉" + case 194783: + return "柺" + case 194784: + return "枅" + case 194785: + return "桒" + case 194786: + return "梅" + case 194787: + return "𣑭" + case 194788: + return "梎" + case 194789: + return "栟" + case 194790: + return "椔" + case 194791: + return "㮝" + case 194792: + return "楂" + case 194793: + return "榣" + case 194794: + return "槪" + case 194795: + return "檨" + case 194796: + return "𣚣" + case 194797: + return "櫛" + case 194798: + return "㰘" + case 194799: + return "次" + case 194800: + return "𣢧" + case 194801: + return "歔" + case 194802: + return "㱎" + case 194803: + return "歲" + case 194804: + return "殟" + case 194805: + return "殺" + case 194806: + return "殻" + case 194807: + return "𣪍" + case 194808: + return "𡴋" + case 194809: + return "𣫺" + case 194810: + return "汎" + case 194811: + return "𣲼" + case 194812: + return "沿" + case 194813: + return "泍" + case 194814: + return "汧" + case 194815: + return "洖" + case 194816: + return "派" + case 194817: + return "海" + case 194818: + return "流" + case 194819: + return "浩" + case 194820: + return "浸" + case 194821: + return "涅" + case 194822: + return "𣴞" + case 194823: + return "洴" + case 194824: + return "港" + case 194825: + return "湮" + case 194826: + return "㴳" + case 194827: + return "滋" + case 194828: + return "滇" + case 194829: + return "𣻑" + case 194830: + return "淹" + case 194831: + return "潮" + case 194832: + return "𣽞" + case 194833: + return "𣾎" + case 194834: + return "濆" + case 194835: + return "瀹" + case 194836: + return "瀞" + case 194837: + return "瀛" + case 194838: + return "㶖" + case 194839: + return "灊" + case 194840: + return "災" + case 194841: + return "灷" + case 194842: + return "炭" + case 194843: + return "𠔥" + case 194844: + return "煅" + case 194845: + return "𤉣" + case 194846: + return "熜" + case 194847: + return "𤎫" + case 194848: + return "爨" + case 194849: + return "爵" + case 194850: + return "牐" + case 194851: + return "𤘈" + case 194852: + return "犀" + case 194853: + return "犕" + case 194854: + return "𤜵" + case 194855: + return "𤠔" + case 194856: + return "獺" + case 194857: + return "王" + case 194858: + return "㺬" + case 194859: + return "玥" + case 194860: + return "㺸" + case 194861: + return "㺸" + case 194862: + return "瑇" + case 194863: + return "瑜" + case 194864: + return "瑱" + case 194865: + return "璅" + case 194866: + return "瓊" + case 194867: + return "㼛" + case 194868: + return "甤" + case 194869: + return "𤰶" + case 194870: + return "甾" + case 194871: + return "𤲒" + case 194872: + return "異" + case 194873: + return "𢆟" + case 194874: + return "瘐" + case 194875: + return "𤾡" + case 194876: + return "𤾸" + case 194877: + return "𥁄" + case 194878: + return "㿼" + case 194879: + return "䀈" + case 194880: + return "直" + case 194881: + return "𥃳" + case 194882: + return "𥃲" + case 194883: + return "𥄙" + case 194884: + return "𥄳" + case 194885: + return "眞" + case 194886: + return "真" + case 194887: + return "真" + case 194888: + return "睊" + case 194889: + return "䀹" + case 194890: + return "瞋" + case 194891: + return "䁆" + case 194892: + return "䂖" + case 194893: + return "𥐝" + case 194894: + return "硎" + case 194895: + return "碌" + case 194896: + return "磌" + case 194897: + return "䃣" + case 194898: + return "𥘦" + case 194899: + return "祖" + case 194900: + return "𥚚" + case 194901: + return "𥛅" + case 194902: + return "福" + case 194903: + return "秫" + case 194904: + return "䄯" + case 194905: + return "穀" + case 194906: + return "穊" + case 194907: + return "穏" + case 194908: + return "𥥼" + case 194909: + return "𥪧" + case 194910: + return "𥪧" + case 194911: + return "竮" + case 194912: + return "䈂" + case 194913: + return "𥮫" + case 194914: + return "篆" + case 194915: + return "築" + case 194916: + return "䈧" + case 194917: + return "𥲀" + case 194918: + return "糒" + case 194919: + return "䊠" + case 194920: + return "糨" + case 194921: + return "糣" + case 194922: + return "紀" + case 194923: + return "𥾆" + case 194924: + return "絣" + case 194925: + return "䌁" + case 194926: + return "緇" + case 194927: + return "縂" + case 194928: + return "繅" + case 194929: + return "䌴" + case 194930: + return "𦈨" + case 194931: + return "𦉇" + case 194932: + return "䍙" + case 194933: + return "𦋙" + case 194934: + return "罺" + case 194935: + return "𦌾" + case 194936: + return "羕" + case 194937: + return "翺" + case 194938: + return "者" + case 194939: + return "𦓚" + case 194940: + return "𦔣" + case 194941: + return "聠" + case 194942: + return "𦖨" + case 194943: + return "聰" + case 194944: + return "𣍟" + case 194945: + return "䏕" + case 194946: + return "育" + case 194947: + return "脃" + case 194948: + return "䐋" + case 194949: + return "脾" + case 194950: + return "媵" + case 194951: + return "𦞧" + case 194952: + return "𦞵" + case 194953: + return "𣎓" + case 194954: + return "𣎜" + case 194955: + return "舁" + case 194956: + return "舄" + case 194957: + return "辞" + case 194958: + return "䑫" + case 194959: + return "芑" + case 194960: + return "芋" + case 194961: + return "芝" + case 194962: + return "劳" + case 194963: + return "花" + case 194964: + return "芳" + case 194965: + return "芽" + case 194966: + return "苦" + case 194967: + return "𦬼" + case 194968: + return "若" + case 194969: + return "茝" + case 194970: + return "荣" + case 194971: + return "莭" + case 194972: + return "茣" + case 194973: + return "莽" + case 194974: + return "菧" + case 194975: + return "著" + case 194976: + return "荓" + case 194977: + return "菊" + case 194978: + return "菌" + case 194979: + return "菜" + case 194980: + return "𦰶" + case 194981: + return "𦵫" + case 194982: + return "𦳕" + case 194983: + return "䔫" + case 194984: + return "蓱" + case 194985: + return "蓳" + case 194986: + return "蔖" + case 194987: + return "𧏊" + case 194988: + return "蕤" + case 194989: + return "𦼬" + case 194990: + return "䕝" + case 194991: + return "䕡" + case 194992: + return "𦾱" + case 194993: + return "𧃒" + case 194994: + return "䕫" + case 194995: + return "虐" + case 194996: + return "虜" + case 194997: + return "虧" + case 194998: + return "虩" + case 194999: + return "蚩" + case 195000: + return "蚈" + case 195001: + return "蜎" + case 195002: + return "蛢" + case 195003: + return "蝹" + case 195004: + return "蜨" + case 195005: + return "蝫" + case 195006: + return "螆" + case 195007: + return "䗗" + case 195008: + return "蟡" + case 195009: + return "蠁" + case 195010: + return "䗹" + case 195011: + return "衠" + case 195012: + return "衣" + case 195013: + return "𧙧" + case 195014: + return "裗" + case 195015: + return "裞" + case 195016: + return "䘵" + case 195017: + return "裺" + case 195018: + return "㒻" + case 195019: + return "𧢮" + case 195020: + return "𧥦" + case 195021: + return "䚾" + case 195022: + return "䛇" + case 195023: + return "誠" + case 195024: + return "諭" + case 195025: + return "變" + case 195026: + return "豕" + case 195027: + return "𧲨" + case 195028: + return "貫" + case 195029: + return "賁" + case 195030: + return "贛" + case 195031: + return "起" + case 195032: + return "𧼯" + case 195033: + return "𠠄" + case 195034: + return "跋" + case 195035: + return "趼" + case 195036: + return "跰" + case 195037: + return "𠣞" + case 195038: + return "軔" + case 195039: + return "輸" + case 195040: + return "𨗒" + case 195041: + return "𨗭" + case 195042: + return "邔" + case 195043: + return "郱" + case 195044: + return "鄑" + case 195045: + return "𨜮" + case 195046: + return "鄛" + case 195047: + return "鈸" + case 195048: + return "鋗" + case 195049: + return "鋘" + case 195050: + return "鉼" + case 195051: + return "鏹" + case 195052: + return "鐕" + case 195053: + return "𨯺" + case 195054: + return "開" + case 195055: + return "䦕" + case 195056: + return "閷" + case 195057: + return "𨵷" + case 195058: + return "䧦" + case 195059: + return "雃" + case 195060: + return "嶲" + case 195061: + return "霣" + case 195062: + return "𩅅" + case 195063: + return "𩈚" + case 195064: + return "䩮" + case 195065: + return "䩶" + case 195066: + return "韠" + case 195067: + return "𩐊" + case 195068: + return "䪲" + case 195069: + return "𩒖" + case 195070: + return "頋" + case 195071: + return "頋" + case 195072: + return "頩" + case 195073: + return "𩖶" + case 195074: + return "飢" + case 195075: + return "䬳" + case 195076: + return "餩" + case 195077: + return "馧" + case 195078: + return "駂" + case 195079: + return "駾" + case 195080: + return "䯎" + case 195081: + return "𩬰" + case 195082: + return "鬒" + case 195083: + return "鱀" + case 195084: + return "鳽" + case 195085: + return "䳎" + case 195086: + return "䳭" + case 195087: + return "鵧" + case 195088: + return "𪃎" + case 195089: + return "䳸" + case 195090: + return "𪄅" + case 195091: + return "𪈎" + case 195092: + return "𪊑" + case 195093: + return "麻" + case 195094: + return "䵖" + case 195095: + return "黹" + case 195096: + return "黾" + case 195097: + return "鼅" + case 195098: + return "鼏" + case 195099: + return "鼖" + case 195100: + return "鼻" + case 195101: + return "𪘀" + + default: + return "" + } +} diff --git a/vendor/go.mau.fi/util/confusable/skeleton.go b/vendor/go.mau.fi/util/confusable/skeleton.go new file mode 100644 index 0000000..5e26e16 --- /dev/null +++ b/vendor/go.mau.fi/util/confusable/skeleton.go @@ -0,0 +1,72 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package confusable implements confusable detection according to UTS #39. +package confusable + +import ( + "bytes" + "crypto/sha256" + "strings" + "unicode" + + "golang.org/x/text/unicode/norm" +) + +//go:generate go run ./generate.go + +// Skeleton is the skeleton function defined in UTS #39. +// +// If two strings have the same skeleton, they're considered confusable. +// The skeleton strings are not intended for displaying to users. +// +// See https://www.unicode.org/reports/tr39/#Confusable_Detection for more info. +func Skeleton(input string) string { + input = norm.NFD.String(input) + var builder strings.Builder + builder.Grow(len(input)) + for _, r := range input { + if !unicode.IsGraphic(r) { + continue + } + repl := GetReplacement(r) + if repl != "" { + builder.WriteString(repl) + } else { + builder.WriteRune(r) + } + } + return norm.NFD.String(builder.String()) +} + +// SkeletonBytes is the same as Skeleton, but it returns the skeleton as a byte slice. +func SkeletonBytes(input string) []byte { + input = norm.NFD.String(input) + var builder bytes.Buffer + builder.Grow(len(input)) + for _, r := range input { + if !unicode.IsGraphic(r) { + continue + } + repl := GetReplacement(r) + if repl != "" { + builder.WriteString(repl) + } else { + builder.WriteRune(r) + } + } + return norm.NFD.Bytes(builder.Bytes()) +} + +// SkeletonHash returns the sha256 hash of the skeleton of the string. +func SkeletonHash(input string) [32]byte { + return sha256.Sum256(SkeletonBytes(input)) +} + +// Confusable checks if two strings are confusable. +func Confusable(x, y string) bool { + return Skeleton(x) == Skeleton(y) +} diff --git a/vendor/go.mau.fi/util/dbutil/database.go b/vendor/go.mau.fi/util/dbutil/database.go index a15383c..a9960ce 100644 --- a/vendor/go.mau.fi/util/dbutil/database.go +++ b/vendor/go.mau.fi/util/dbutil/database.go @@ -14,6 +14,8 @@ import ( "regexp" "strings" "time" + + "go.mau.fi/util/exsync" ) type Dialect int @@ -114,12 +116,16 @@ type Database struct { Dialect Dialect UpgradeTable UpgradeTable - txnCtxKey contextKey + txnCtxKey contextKey + txnDeadlockMap *exsync.Set[int64] IgnoreForeignTables bool IgnoreUnsupportedDatabase bool + DeadlockDetection bool } +var ForceDeadlockDetection bool + var positionalParamPattern = regexp.MustCompile(`\$(\d+)`) func (db *Database) mutateQuery(query string) string { @@ -144,10 +150,12 @@ func (db *Database) Child(versionTable string, upgradeTable UpgradeTable, log Da Log: log, Dialect: db.Dialect, - txnCtxKey: db.txnCtxKey, + txnCtxKey: db.txnCtxKey, + txnDeadlockMap: db.txnDeadlockMap, IgnoreForeignTables: true, IgnoreUnsupportedDatabase: db.IgnoreUnsupportedDatabase, + DeadlockDetection: db.DeadlockDetection, } } @@ -164,7 +172,10 @@ func NewWithDB(db *sql.DB, rawDialect string) (*Database, error) { IgnoreForeignTables: true, VersionTable: "version", - txnCtxKey: contextKey(nextContextKeyDatabaseTransaction.Add(1)), + txnCtxKey: contextKey(nextContextKeyDatabaseTransaction.Add(1)), + txnDeadlockMap: exsync.NewSet[int64](), + + DeadlockDetection: ForceDeadlockDetection, } wrappedDB.LoggingDB.UnderlyingExecable = db wrappedDB.LoggingDB.db = wrappedDB @@ -194,6 +205,8 @@ type PoolConfig struct { type Config struct { PoolConfig `yaml:",inline"` ReadOnlyPool PoolConfig `yaml:"ro_pool"` + + DeadlockDetection bool `yaml:"deadlock_detection"` } func (db *Database) Close() error { @@ -211,6 +224,8 @@ func (db *Database) Close() error { } func (db *Database) Configure(cfg Config) error { + db.DeadlockDetection = cfg.DeadlockDetection || ForceDeadlockDetection + if err := db.configure(db.ReadOnlyDB, cfg.ReadOnlyPool); err != nil { return err } @@ -271,6 +286,8 @@ func NewFromConfig(owner string, cfg Config, logger DatabaseLogger) (*Database, } qs.Del("_txlock") + qs.Del("_auto_vacuum") + qs.Del("_vacuum") } qs.Set("_query_only", "true") diff --git a/vendor/go.mau.fi/util/dbutil/samples/01-sample.sql b/vendor/go.mau.fi/util/dbutil/samples/01-sample.sql deleted file mode 100644 index 963eb08..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/01-sample.sql +++ /dev/null @@ -1,21 +0,0 @@ --- v0 -> v3: Sample revision jump -CREATE TABLE foo ( - -- only: postgres - key BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - -- only: sqlite (line commented) --- key INTEGER PRIMARY KEY, - - data JSONB NOT NULL -); - --- only: sqlite until "end only" -CREATE TRIGGER test AFTER INSERT ON foo WHEN NEW.data->>'action' = 'delete' BEGIN - DELETE FROM test WHERE key <= NEW.data->>'index'; -END; --- end only sqlite --- only: postgres until "end only" -CREATE FUNCTION delete_data() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN - DELETE FROM test WHERE key <= NEW.data->>'index'; - RETURN NEW; -END $$; --- end only postgres diff --git a/vendor/go.mau.fi/util/dbutil/samples/04-notxn.sql b/vendor/go.mau.fi/util/dbutil/samples/04-notxn.sql deleted file mode 100644 index 7a61a72..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/04-notxn.sql +++ /dev/null @@ -1,4 +0,0 @@ --- v4: Sample outside transaction --- transaction: off - -INSERT INTO foo VALUES ('meow', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/samples/05-compat.sql b/vendor/go.mau.fi/util/dbutil/samples/05-compat.sql deleted file mode 100644 index 6b8cc1a..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/05-compat.sql +++ /dev/null @@ -1,3 +0,0 @@ --- v5 (compatible with v3+): Sample backwards-compatible upgrade - -INSERT INTO foo VALUES ('meow 2', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/01-postgres.sql b/vendor/go.mau.fi/util/dbutil/samples/output/01-postgres.sql deleted file mode 100644 index bd6b3a6..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/01-postgres.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE foo ( - key BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - - data JSONB NOT NULL -); - -CREATE FUNCTION delete_data() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN - DELETE FROM test WHERE key <= NEW.data->>'index'; - RETURN NEW; -END $$; diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/01-sqlite3.sql b/vendor/go.mau.fi/util/dbutil/samples/output/01-sqlite3.sql deleted file mode 100644 index 13f7c32..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/01-sqlite3.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE foo ( - key INTEGER PRIMARY KEY, - - data JSONB NOT NULL -); - -CREATE TRIGGER test AFTER INSERT ON foo WHEN NEW.data->>'action' = 'delete' BEGIN - DELETE FROM test WHERE key <= NEW.data->>'index'; -END; diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/04-postgres.sql b/vendor/go.mau.fi/util/dbutil/samples/output/04-postgres.sql deleted file mode 100644 index 53c9742..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/04-postgres.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO foo VALUES ('meow', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/04-sqlite3.sql b/vendor/go.mau.fi/util/dbutil/samples/output/04-sqlite3.sql deleted file mode 100644 index 53c9742..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/04-sqlite3.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO foo VALUES ('meow', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/05-postgres.sql b/vendor/go.mau.fi/util/dbutil/samples/output/05-postgres.sql deleted file mode 100644 index f8921e9..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/05-postgres.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO foo VALUES ('meow 2', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/samples/output/05-sqlite3.sql b/vendor/go.mau.fi/util/dbutil/samples/output/05-sqlite3.sql deleted file mode 100644 index f8921e9..0000000 --- a/vendor/go.mau.fi/util/dbutil/samples/output/05-sqlite3.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO foo VALUES ('meow 2', '{}'); diff --git a/vendor/go.mau.fi/util/dbutil/transaction.go b/vendor/go.mau.fi/util/dbutil/transaction.go index 9211136..d010ea5 100644 --- a/vendor/go.mau.fi/util/dbutil/transaction.go +++ b/vendor/go.mau.fi/util/dbutil/transaction.go @@ -15,6 +15,7 @@ import ( "sync/atomic" "time" + "github.com/petermattis/goid" "github.com/rs/zerolog" "go.mau.fi/util/exerrors" @@ -51,6 +52,10 @@ func (db *Database) QueryRow(ctx context.Context, query string, args ...any) *sq return db.Execable(ctx).QueryRowContext(ctx, query, args...) } +var ErrTransactionDeadlock = errors.New("attempt to start new transaction in goroutine with transaction") +var ErrQueryDeadlock = errors.New("attempt to query without context in goroutine with transaction") +var ErrAcquireDeadlock = errors.New("attempt to acquire connection without context in goroutine with transaction") + func (db *Database) BeginTx(ctx context.Context, opts *TxnOptions) (*LoggingTxn, error) { if ctx == nil { panic("BeginTx() called with nil ctx") @@ -65,6 +70,12 @@ func (db *Database) DoTxn(ctx context.Context, opts *TxnOptions, fn func(ctx con if ctx.Value(db.txnCtxKey) != nil { zerolog.Ctx(ctx).Trace().Msg("Already in a transaction, not creating a new one") return fn(ctx) + } else if db.DeadlockDetection { + goroutineID := goid.Get() + if !db.txnDeadlockMap.Add(goroutineID) { + panic(ErrTransactionDeadlock) + } + defer db.txnDeadlockMap.Remove(goroutineID) } log := zerolog.Ctx(ctx).With().Str("db_txn_id", random.String(12)).Logger() @@ -141,6 +152,9 @@ func (db *Database) Execable(ctx context.Context) Execable { if ok { return txn } + if db.DeadlockDetection && db.txnDeadlockMap.Has(goid.Get()) { + panic(ErrQueryDeadlock) + } return &db.LoggingDB } @@ -152,6 +166,9 @@ func (db *Database) AcquireConn(ctx context.Context) (Conn, error) { if ok { return nil, fmt.Errorf("cannot acquire connection while in a transaction") } + if db.DeadlockDetection && db.txnDeadlockMap.Has(goid.Get()) { + panic(ErrAcquireDeadlock) + } conn, err := db.RawDB.Conn(ctx) if err != nil { return nil, err diff --git a/vendor/go.mau.fi/util/exsync/event.go b/vendor/go.mau.fi/util/exsync/event.go new file mode 100644 index 0000000..32ddee9 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/event.go @@ -0,0 +1,86 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "context" + "sync" + "time" +) + +// Event is a wrapper around a channel that can be used to notify multiple waiters that some event has happened. +// +// It's modelled after Python's asyncio.Event: https://docs.python.org/3/library/asyncio-sync.html#asyncio.Event +type Event struct { + ch chan empty + set bool + l sync.RWMutex +} + +// NewEvent creates a new event. It will initially be unset. +func NewEvent() *Event { + return &Event{ + ch: make(chan empty), + } +} + +// GetChan returns the channel that will be closed when the event is set. +func (e *Event) GetChan() <-chan empty { + e.l.RLock() + defer e.l.RUnlock() + return e.ch +} + +// Wait waits for either the event to happen or the given context to be done. +// If the context is done first, the error is returned, otherwise the return value is nil. +func (e *Event) Wait(ctx context.Context) error { + select { + case <-e.GetChan(): + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +// WaitTimeout waits for either the event to happen within the given timeout. +// If the timeout expires first, the return value is false, otherwise it's true. +func (e *Event) WaitTimeout(timeout time.Duration) bool { + select { + case <-e.GetChan(): + return true + case <-time.After(timeout): + return false + } +} + +// IsSet returns true if the event has been set. +func (e *Event) IsSet() bool { + e.l.RLock() + defer e.l.RUnlock() + return e.set +} + +// Set sets the event, notifying all waiters. +func (e *Event) Set() { + e.l.Lock() + defer e.l.Unlock() + if !e.set { + close(e.ch) + e.set = true + } +} + +// Clear clears the event, making it unset. Future calls to Wait will now block until Set is called again. +// If the event is not already set, this is a no-op and existing calls to Wait will keep working. +func (e *Event) Clear() { + e.l.Lock() + defer e.l.Unlock() + if e.set { + e.ch = make(chan empty) + e.set = false + } +} diff --git a/vendor/go.mau.fi/util/exsync/returnonce.go b/vendor/go.mau.fi/util/exsync/returnonce.go new file mode 100644 index 0000000..f3f5ae7 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/returnonce.go @@ -0,0 +1,25 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import "sync" + +// ReturnableOnce is a wrapper for sync.Once that can return a value +// +// Deprecated: Use [sync.OnceValues] instead. +type ReturnableOnce[Value any] struct { + once sync.Once + output Value + err error +} + +func (ronce *ReturnableOnce[Value]) Do(fn func() (Value, error)) (Value, error) { + ronce.once.Do(func() { + ronce.output, ronce.err = fn() + }) + return ronce.output, ronce.err +} diff --git a/vendor/go.mau.fi/util/exsync/ringbuffer.go b/vendor/go.mau.fi/util/exsync/ringbuffer.go new file mode 100644 index 0000000..483098c --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/ringbuffer.go @@ -0,0 +1,139 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "errors" + "sync" +) + +type pair[Key comparable, Value any] struct { + Set bool + Key Key + Value Value +} + +type RingBuffer[Key comparable, Value any] struct { + ptr int + data []pair[Key, Value] + lock sync.RWMutex + size int +} + +func NewRingBuffer[Key comparable, Value any](size int) *RingBuffer[Key, Value] { + return &RingBuffer[Key, Value]{ + data: make([]pair[Key, Value], size), + } +} + +var ( + // StopIteration can be returned by the RingBuffer.Iter or MapRingBuffer callbacks to stop iteration immediately. + StopIteration = errors.New("stop iteration") //lint:ignore ST1012 not an error + + // SkipItem can be returned by the MapRingBuffer callback to skip adding a specific item. + SkipItem = errors.New("skip item") //lint:ignore ST1012 not an error +) + +func (rb *RingBuffer[Key, Value]) unlockedIter(callback func(key Key, val Value) error) error { + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + entry := rb.data[i] + if !entry.Set { + break + } + err := callback(entry.Key, entry.Value) + if err != nil { + if errors.Is(err, StopIteration) { + return nil + } + return err + } + } + return nil +} + +func (rb *RingBuffer[Key, Value]) Iter(callback func(key Key, val Value) error) error { + rb.lock.RLock() + defer rb.lock.RUnlock() + return rb.unlockedIter(callback) +} + +func MapRingBuffer[Key comparable, Value, Output any](rb *RingBuffer[Key, Value], callback func(key Key, val Value) (Output, error)) ([]Output, error) { + rb.lock.RLock() + defer rb.lock.RUnlock() + output := make([]Output, 0, rb.size) + err := rb.unlockedIter(func(key Key, val Value) error { + item, err := callback(key, val) + if err != nil { + if errors.Is(err, SkipItem) { + return nil + } + return err + } + output = append(output, item) + return nil + }) + return output, err +} + +func (rb *RingBuffer[Key, Value]) Size() int { + rb.lock.RLock() + defer rb.lock.RUnlock() + return rb.size +} + +func (rb *RingBuffer[Key, Value]) Contains(val Key) bool { + _, ok := rb.Get(val) + return ok +} + +func (rb *RingBuffer[Key, Value]) Get(key Key) (val Value, found bool) { + rb.lock.RLock() + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + if rb.data[i].Key == key { + val = rb.data[i].Value + found = true + break + } + } + rb.lock.RUnlock() + return +} + +func (rb *RingBuffer[Key, Value]) Replace(key Key, val Value) bool { + rb.lock.Lock() + defer rb.lock.Unlock() + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + if rb.data[i].Key == key { + rb.data[i].Value = val + return true + } + } + return false +} + +func (rb *RingBuffer[Key, Value]) Push(key Key, val Value) { + rb.lock.Lock() + rb.data[rb.ptr] = pair[Key, Value]{Key: key, Value: val, Set: true} + rb.ptr = (rb.ptr + 1) % len(rb.data) + if rb.size < len(rb.data) { + rb.size++ + } + rb.lock.Unlock() +} + +func clamp(index, len int) int { + if index < 0 { + return len + index + } else if index >= len { + return len - index + } else { + return index + } +} diff --git a/vendor/go.mau.fi/util/exsync/syncmap.go b/vendor/go.mau.fi/util/exsync/syncmap.go new file mode 100644 index 0000000..e5dae90 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/syncmap.go @@ -0,0 +1,94 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import "sync" + +// Map is a simple map with a built-in mutex. +type Map[Key comparable, Value any] struct { + data map[Key]Value + lock sync.RWMutex +} + +func NewMap[Key comparable, Value any]() *Map[Key, Value] { + return &Map[Key, Value]{ + data: make(map[Key]Value), + } +} + +// Set stores a value in the map. +func (sm *Map[Key, Value]) Set(key Key, value Value) { + sm.Swap(key, value) +} + +// Swap sets a value in the map and returns the old value. +// +// The boolean return parameter is true if the value already existed, false if not. +func (sm *Map[Key, Value]) Swap(key Key, value Value) (oldValue Value, wasReplaced bool) { + sm.lock.Lock() + oldValue, wasReplaced = sm.data[key] + sm.data[key] = value + sm.lock.Unlock() + return +} + +// Delete removes a key from the map. +func (sm *Map[Key, Value]) Delete(key Key) { + sm.Pop(key) +} + +// Pop removes a key from the map and returns the old value. +// +// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not). +func (sm *Map[Key, Value]) Pop(key Key) (value Value, ok bool) { + sm.lock.Lock() + value, ok = sm.data[key] + delete(sm.data, key) + sm.lock.Unlock() + return +} + +// Get gets a value in the map. +// +// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not). +func (sm *Map[Key, Value]) Get(key Key) (value Value, ok bool) { + sm.lock.RLock() + value, ok = sm.data[key] + sm.lock.RUnlock() + return +} + +// GetOrSet gets a value in the map if the key already exists, otherwise inserts the given value and returns it. +// +// The boolean return parameter is true if the key already exists, and false if the given value was inserted. +func (sm *Map[Key, Value]) GetOrSet(key Key, value Value) (actual Value, wasGet bool) { + sm.lock.Lock() + defer sm.lock.Unlock() + actual, wasGet = sm.data[key] + if wasGet { + return + } + sm.data[key] = value + actual = value + return +} + +// Clone returns a copy of the map. +func (sm *Map[Key, Value]) Clone() *Map[Key, Value] { + return &Map[Key, Value]{data: sm.CopyData()} +} + +// CopyData returns a copy of the data in the map as a normal (non-atomic) map. +func (sm *Map[Key, Value]) CopyData() map[Key]Value { + sm.lock.RLock() + copied := make(map[Key]Value, len(sm.data)) + for key, value := range sm.data { + copied[key] = value + } + sm.lock.RUnlock() + return copied +} diff --git a/vendor/go.mau.fi/util/exsync/syncset.go b/vendor/go.mau.fi/util/exsync/syncset.go new file mode 100644 index 0000000..95090f3 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/syncset.go @@ -0,0 +1,83 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "sync" +) + +type empty struct{} + +var emptyVal = empty{} + +// Set is a wrapper around a map[T]struct{} with a built-in mutex. +type Set[T comparable] struct { + m map[T]empty + l sync.RWMutex +} + +// NewSet constructs a Set with an empty map. +func NewSet[T comparable]() *Set[T] { + return NewSetWithMap[T](make(map[T]empty)) +} + +// NewSetWithSize constructs a Set with a map that has been allocated the given amount of space. +func NewSetWithSize[T comparable](size int) *Set[T] { + return NewSetWithMap[T](make(map[T]empty, size)) +} + +// NewSetWithMap constructs a Set with the given map. Accessing the map directly after passing it here is not safe. +func NewSetWithMap[T comparable](m map[T]empty) *Set[T] { + return &Set[T]{m: m} +} + +// NewSetWithItems constructs a Set with items from the given slice pre-filled. +// The slice is not modified or used after the function returns, so using it after this is safe. +func NewSetWithItems[T comparable](items []T) *Set[T] { + s := NewSetWithSize[T](len(items)) + for _, item := range items { + s.m[item] = emptyVal + } + return s +} + +// Add adds an item to the set. The return value is true if the item was added to the set, or false otherwise. +func (s *Set[T]) Add(item T) bool { + if s == nil { + return false + } + s.l.Lock() + _, exists := s.m[item] + if exists { + s.l.Unlock() + return false + } + s.m[item] = emptyVal + s.l.Unlock() + return true +} + +// Has checks if the given item is in the set. +func (s *Set[T]) Has(item T) bool { + if s == nil { + return false + } + s.l.RLock() + _, exists := s.m[item] + s.l.RUnlock() + return exists +} + +// Remove removes the given item from the set. +func (s *Set[T]) Remove(item T) { + if s == nil { + return + } + s.l.Lock() + delete(s.m, item) + s.l.Unlock() +} diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE index 6a66aea..2a7cf70 100644 --- a/vendor/golang.org/x/crypto/LICENSE +++ b/vendor/golang.org/x/crypto/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go index 7967665..98e6706 100644 --- a/vendor/golang.org/x/crypto/ssh/keys.go +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -488,7 +488,49 @@ func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { h := hash.New() h.Write(data) digest := h.Sum(nil) - return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, sig.Blob) + + // Signatures in PKCS1v15 must match the key's modulus in + // length. However with SSH, some signers provide RSA + // signatures which are missing the MSB 0's of the bignum + // represented. With ssh-rsa signatures, this is encouraged by + // the spec (even though e.g. OpenSSH will give the full + // length unconditionally). With rsa-sha2-* signatures, the + // verifier is allowed to support these, even though they are + // out of spec. See RFC 4253 Section 6.6 for ssh-rsa and RFC + // 8332 Section 3 for rsa-sha2-* details. + // + // In practice: + // * OpenSSH always allows "short" signatures: + // https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L526 + // but always generates padded signatures: + // https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L439 + // + // * PuTTY versions 0.81 and earlier will generate short + // signatures for all RSA signature variants. Note that + // PuTTY is embedded in other software, such as WinSCP and + // FileZilla. At the time of writing, a patch has been + // applied to PuTTY to generate padded signatures for + // rsa-sha2-*, but not yet released: + // https://git.tartarus.org/?p=simon/putty.git;a=commitdiff;h=a5bcf3d384e1bf15a51a6923c3724cbbee022d8e + // + // * SSH.NET versions 2024.0.0 and earlier will generate short + // signatures for all RSA signature variants, fixed in 2024.1.0: + // https://github.com/sshnet/SSH.NET/releases/tag/2024.1.0 + // + // As a result, we pad these up to the key size by inserting + // leading 0's. + // + // Note that support for short signatures with rsa-sha2-* may + // be removed in the future due to such signatures not being + // allowed by the spec. + blob := sig.Blob + keySize := (*rsa.PublicKey)(r).Size() + if len(blob) < keySize { + padded := make([]byte, keySize) + copy(padded[keySize-len(blob):], blob) + blob = padded + } + return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, blob) } func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey { diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE index 6a66aea..2a7cf70 100644 --- a/vendor/golang.org/x/net/LICENSE +++ b/vendor/golang.org/x/net/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/net/idna/go118.go b/vendor/golang.org/x/net/idna/go118.go new file mode 100644 index 0000000..712f1ad --- /dev/null +++ b/vendor/golang.org/x/net/idna/go118.go @@ -0,0 +1,13 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2021 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.18 + +package idna + +// Transitional processing is disabled by default in Go 1.18. +// https://golang.org/issue/47510 +const transitionalLookup = false diff --git a/vendor/golang.org/x/net/idna/idna10.0.0.go b/vendor/golang.org/x/net/idna/idna10.0.0.go new file mode 100644 index 0000000..7b37178 --- /dev/null +++ b/vendor/golang.org/x/net/idna/idna10.0.0.go @@ -0,0 +1,769 @@ +// 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.10 + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in https://www.unicode.org/reports/tr46. +// See https://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/net/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/bidi" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by some browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = transitional } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +// +// This option corresponds to the VerifyDnsLength flag in UTS #46. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// RemoveLeadingDots removes leading label separators. Leading runes that map to +// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well. +func RemoveLeadingDots(remove bool) Option { + return func(o *options) { o.removeLeadingDots = remove } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +// In particular, ValidateLabels also sets the CheckHyphens and CheckJoiners flags +// in UTS #46. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.checkJoiners = enable + o.checkHyphens = enable + if enable { + o.fromPuny = validateFromPunycode + } else { + o.fromPuny = nil + } + } +} + +// CheckHyphens sets whether to check for correct use of hyphens ('-') in +// labels. Most web browsers do not have this option set, since labels such as +// "r3---sn-apo3qvuoxuxbt-j5pe" are in common use. +// +// This option corresponds to the CheckHyphens flag in UTS #46. +func CheckHyphens(enable bool) Option { + return func(o *options) { o.checkHyphens = enable } +} + +// CheckJoiners sets whether to check the ContextJ rules as defined in Appendix +// A of RFC 5892, concerning the use of joiner runes. +// +// This option corresponds to the CheckJoiners flag in UTS #46. +func CheckJoiners(enable bool) Option { + return func(o *options) { + o.trie = trie + o.checkJoiners = enable + } +} + +// 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. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details. +// +// This option corresponds to the UseSTD3ASCIIRules flag in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { o.useSTD3Rules = use } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +// +// This option corresponds to the CheckBidi flag in UTS #46. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + checkHyphens bool + checkJoiners bool + verifyDNSLength bool + removeLeadingDots bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (mapped string, isBidi bool, err error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of an IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.checkHyphens { + s += ":CheckHyphens" + } + if p.checkJoiners { + s += ":CheckJoiners" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: transitionalLookup, + useSTD3Rules: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + verifyDNSLength: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see https://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + var isBidi bool + if p.mapping != nil { + s, isBidi, err = p.mapping(p, s) + } + // Remove leading empty labels. + if p.removeLeadingDots { + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + } + // TODO: allow for a quick check of the tables data. + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight + labels.set(u) + if err == nil && p.fromPuny != nil { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if isBidi && p.bidirule != nil && err == nil { + for labels.reset(); !labels.done(); labels.next() { + if !p.bidirule(labels.label()) { + err = &labelError{s, "B"} + break + } + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (mapped string, isBidi bool, err error) { + // TODO: consider first doing a quick check to see if any of these checks + // need to be done. This will make it slower in the general case, but + // faster in the common case. + mapped = norm.NFC.String(s) + isBidi = bidirule.DirectionString(mapped) == bidi.RightToLeft + return mapped, isBidi, nil +} + +func validateRegistration(p *Profile, s string) (idem string, bidi bool, err error) { + // TODO: filter need for normalization in loop below. + if !norm.NFC.IsNormalString(s) { + return s, false, &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + return s, bidi, runeError(utf8.RuneError) + } + bidi = bidi || info(v).isBidi(s[i:]) + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, bidi, runeError(r) + } + i += sz + } + return s, bidi, nil +} + +func (c info) isBidi(s string) bool { + if !c.isMapped() { + return c&attributesMask == rtl + } + // TODO: also store bidi info for mapped data. This is possible, but a bit + // cumbersome and not for the common case. + p, _ := bidi.LookupString(s) + switch p.Class() { + case bidi.R, bidi.AL, bidi.AN: + return true + } + return false +} + +func validateAndMap(p *Profile, s string) (vm string, bidi bool, err error) { + var ( + b []byte + k int + ) + // combinedInfoBits contains the or-ed bits of all runes. We use this + // to derive the mayNeedNorm bit later. This may trigger normalization + // overeagerly, but it will not do so in the common case. The end result + // is another 10% saving on BenchmarkProfile for the common case. + var combinedInfoBits info + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + b = append(b, s[k:i]...) + b = append(b, "\ufffd"...) + k = len(s) + if err == nil { + err = runeError(utf8.RuneError) + } + break + } + combinedInfoBits |= info(v) + bidi = bidi || info(v).isBidi(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[start:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + if combinedInfoBits&mayNeedNorm != 0 { + s = norm.NFC.String(s) + } + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, bidi, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + // TODO: detect whether string may have to be normalized in the following + // loop. + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + return runeError(utf8.RuneError) + } + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) (err error) { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if p.checkHyphens { + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + } + if !p.checkJoiners { + return nil + } + trie := p.trie // p.checkJoiners is only set if trie is set. + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/net/idna/idna9.0.0.go b/vendor/golang.org/x/net/idna/idna9.0.0.go new file mode 100644 index 0000000..cc6a892 --- /dev/null +++ b/vendor/golang.org/x/net/idna/idna9.0.0.go @@ -0,0 +1,717 @@ +// 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.10 + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in https://www.unicode.org/reports/tr46. +// See https://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/net/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by some browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = transitional } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +// +// This option corresponds to the VerifyDnsLength flag in UTS #46. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// RemoveLeadingDots removes leading label separators. Leading runes that map to +// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well. +func RemoveLeadingDots(remove bool) Option { + return func(o *options) { o.removeLeadingDots = remove } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +// In particular, ValidateLabels also sets the CheckHyphens and CheckJoiners flags +// in UTS #46. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.checkJoiners = enable + o.checkHyphens = enable + if enable { + o.fromPuny = validateFromPunycode + } else { + o.fromPuny = nil + } + } +} + +// CheckHyphens sets whether to check for correct use of hyphens ('-') in +// labels. Most web browsers do not have this option set, since labels such as +// "r3---sn-apo3qvuoxuxbt-j5pe" are in common use. +// +// This option corresponds to the CheckHyphens flag in UTS #46. +func CheckHyphens(enable bool) Option { + return func(o *options) { o.checkHyphens = enable } +} + +// CheckJoiners sets whether to check the ContextJ rules as defined in Appendix +// A of RFC 5892, concerning the use of joiner runes. +// +// This option corresponds to the CheckJoiners flag in UTS #46. +func CheckJoiners(enable bool) Option { + return func(o *options) { + o.trie = trie + o.checkJoiners = enable + } +} + +// 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. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details. +// +// This option corresponds to the UseSTD3ASCIIRules flag in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { o.useSTD3Rules = use } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +// +// This option corresponds to the CheckBidi flag in UTS #46. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + RemoveLeadingDots(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + checkHyphens bool + checkJoiners bool + verifyDNSLength bool + removeLeadingDots bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (string, error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of a IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.checkHyphens { + s += ":CheckHyphens" + } + if p.checkJoiners { + s += ":CheckJoiners" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: true, + removeLeadingDots: true, + useSTD3Rules: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + removeLeadingDots: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + verifyDNSLength: true, + checkHyphens: true, + checkJoiners: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see https://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + if p.mapping != nil { + s, err = p.mapping(p, s) + } + // Remove leading empty labels. + if p.removeLeadingDots { + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + } + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + labels.set(u) + if err == nil && p.fromPuny != nil { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (string, error) { + return norm.NFC.String(s), nil +} + +func validateRegistration(p *Profile, s string) (string, error) { + if !norm.NFC.IsNormalString(s) { + return s, &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, runeError(r) + } + i += sz + } + return s, nil +} + +func validateAndMap(p *Profile, s string) (string, error) { + var ( + err error + b []byte + k int + ) + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[start:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + s = norm.NFC.String(s) + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) error { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if p.bidirule != nil && !p.bidirule(s) { + return &labelError{s, "B"} + } + if p.checkHyphens { + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + } + if !p.checkJoiners { + return nil + } + trie := p.trie // p.checkJoiners is only set if trie is set. + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/net/idna/pre_go118.go b/vendor/golang.org/x/net/idna/pre_go118.go new file mode 100644 index 0000000..40e74bb --- /dev/null +++ b/vendor/golang.org/x/net/idna/pre_go118.go @@ -0,0 +1,11 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2021 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.18 + +package idna + +const transitionalLookup = true diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go new file mode 100644 index 0000000..e8e3ac1 --- /dev/null +++ b/vendor/golang.org/x/net/idna/punycode.go @@ -0,0 +1,217 @@ +// 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. + +package idna + +// This file implements the Punycode algorithm from RFC 3492. + +import ( + "math" + "strings" + "unicode/utf8" +) + +// These parameter values are specified in section 5. +// +// All computation is done with int32s, so that overflow behavior is identical +// regardless of whether int is 32-bit or 64-bit. +const ( + base int32 = 36 + damp int32 = 700 + initialBias int32 = 72 + initialN int32 = 128 + skew int32 = 38 + tmax int32 = 26 + tmin int32 = 1 +) + +func punyError(s string) error { return &labelError{s, "A3"} } + +// decode decodes a string as specified in section 6.2. +func decode(encoded string) (string, error) { + if encoded == "" { + return "", nil + } + pos := 1 + strings.LastIndex(encoded, "-") + if pos == 1 { + return "", punyError(encoded) + } + if pos == len(encoded) { + return encoded[:len(encoded)-1], nil + } + output := make([]rune, 0, len(encoded)) + if pos != 0 { + for _, r := range encoded[:pos-1] { + output = append(output, r) + } + } + i, n, bias := int32(0), initialN, initialBias + overflow := false + for pos < len(encoded) { + oldI, w := i, int32(1) + for k := base; ; k += base { + if pos == len(encoded) { + return "", punyError(encoded) + } + digit, ok := decodeDigit(encoded[pos]) + if !ok { + return "", punyError(encoded) + } + pos++ + i, overflow = madd(i, digit, w) + if overflow { + return "", punyError(encoded) + } + t := k - bias + if k <= bias { + t = tmin + } else if k >= bias+tmax { + t = tmax + } + if digit < t { + break + } + w, overflow = madd(0, w, base-t) + if overflow { + return "", punyError(encoded) + } + } + if len(output) >= 1024 { + return "", punyError(encoded) + } + x := int32(len(output) + 1) + bias = adapt(i-oldI, x, oldI == 0) + n += i / x + i %= x + if n < 0 || n > utf8.MaxRune { + return "", punyError(encoded) + } + output = append(output, 0) + copy(output[i+1:], output[i:]) + output[i] = n + i++ + } + return string(output), nil +} + +// encode encodes a string as specified in section 6.3 and prepends prefix to +// the result. +// +// The "while h < length(input)" line in the specification becomes "for +// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes. +func encode(prefix, s string) (string, error) { + output := make([]byte, len(prefix), len(prefix)+1+2*len(s)) + copy(output, prefix) + delta, n, bias := int32(0), initialN, initialBias + b, remaining := int32(0), int32(0) + for _, r := range s { + if r < 0x80 { + b++ + output = append(output, byte(r)) + } else { + remaining++ + } + } + h := b + if b > 0 { + output = append(output, '-') + } + overflow := false + for remaining != 0 { + m := int32(0x7fffffff) + for _, r := range s { + if m > r && r >= n { + m = r + } + } + delta, overflow = madd(delta, m-n, h+1) + if overflow { + return "", punyError(s) + } + n = m + for _, r := range s { + if r < n { + delta++ + if delta < 0 { + return "", punyError(s) + } + continue + } + if r > n { + continue + } + q := delta + for k := base; ; k += base { + t := k - bias + if k <= bias { + t = tmin + } else if k >= bias+tmax { + t = tmax + } + if q < t { + break + } + output = append(output, encodeDigit(t+(q-t)%(base-t))) + q = (q - t) / (base - t) + } + output = append(output, encodeDigit(q)) + bias = adapt(delta, h+1, h == b) + delta = 0 + h++ + remaining-- + } + delta++ + n++ + } + return string(output), nil +} + +// madd computes a + (b * c), detecting overflow. +func madd(a, b, c int32) (next int32, overflow bool) { + p := int64(b) * int64(c) + if p > math.MaxInt32-int64(a) { + return 0, true + } + return a + int32(p), false +} + +func decodeDigit(x byte) (digit int32, ok bool) { + switch { + case '0' <= x && x <= '9': + return int32(x - ('0' - 26)), true + case 'A' <= x && x <= 'Z': + return int32(x - 'A'), true + case 'a' <= x && x <= 'z': + return int32(x - 'a'), true + } + return 0, false +} + +func encodeDigit(digit int32) byte { + switch { + case 0 <= digit && digit < 26: + return byte(digit + 'a') + case 26 <= digit && digit < 36: + return byte(digit + ('0' - 26)) + } + panic("idna: internal error in punycode encoding") +} + +// adapt is the bias adaptation function specified in section 6.1. +func adapt(delta, numPoints int32, firstTime bool) int32 { + if firstTime { + delta /= damp + } else { + delta /= 2 + } + delta += delta / numPoints + k := int32(0) + for delta > ((base-tmin)*tmax)/2 { + delta /= base - tmin + k += base + } + return k + (base-tmin+1)*delta/(delta+skew) +} diff --git a/vendor/golang.org/x/net/idna/tables10.0.0.go b/vendor/golang.org/x/net/idna/tables10.0.0.go new file mode 100644 index 0000000..c6c2bf1 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables10.0.0.go @@ -0,0 +1,4559 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.10 && !go1.13 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +var mappings string = "" + // Size: 8175 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\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点\x042点" + + "\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œ\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\x03ppv\x02w" + + "c\x02mc\x02md\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 xorData string = "" + // Size: 4855 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\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\x04" + + "4\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 \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\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\x0671\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: 29052 bytes (28.37 KiB). Checksum: ef06e7ecc26f36dd. +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 < 125: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 125 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 127 blocks, 8128 entries, 16256 bytes +// The third block is the zero block. +var idnaValues = [8128]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: 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, + // 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: 0x0179, 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, + // 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, + 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: 0x01d9, + // 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: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 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: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 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, + 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, + 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: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 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: 0x0040, + 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: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 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: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 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: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 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, + 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, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 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, + 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, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x0040, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 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, + 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, + 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, + 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 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: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 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, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0040, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 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: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 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, + 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, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 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, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, + // Block 0x26, offset 0x980 + 0x980: 0x3308, 0x981: 0x0ca1, 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, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 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, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 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, + // Block 0x28, offset 0xa00 + 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, + 0xa06: 0x059d, 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: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9, + 0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 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, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 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: 0x05e5, 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: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, + 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + // 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, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // 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: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008, + 0xade: 0x1441, 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: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 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, + // 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: 0x064d, 0xb7b: 0x1459, + 0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686, + // Block 0x2e, offset 0xb80 + 0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 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: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, + 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, + 0xbaa: 0x070d, 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: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, + 0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 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, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 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: 0x079e, 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, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 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: 0x07bd, + 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + // 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: 0x07d5, + 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, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 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: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e, + 0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 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: 0x08ad, 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: 0x08cd, + 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x08ed, 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: 0x0905, 0xce3: 0x2439, + 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, + 0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, + 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, + 0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5, + 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + // 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: 0x0a06, 0xd35: 0x0a26, + 0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6, + 0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + // 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, + 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: 0x0b26, 0xd5d: 0x0b46, + 0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06, + 0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6, + 0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86, + 0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46, + 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, + 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + // 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, + 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, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 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: 0x0ebd, + 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, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + // 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, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d, + 0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d, + 0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d, + 0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 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, + 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, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd, + 0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd, + 0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d, + 0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d, + 0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d, + 0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd, + 0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d, + 0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd, + 0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d, + 0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd, + 0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd, + 0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d, + 0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd, + 0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d, + 0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd, + 0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 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: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd, + 0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d, + 0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d, + 0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd, + 0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d, + 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018, + // Block 0x3e, offset 0xf80 + 0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d, + 0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d, + 0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd, + 0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd, + 0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d, + 0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d, + 0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd, + 0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d, + 0xfb0: 0x3c9d, 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, + // 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: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15, + 0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75, + 0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded, + 0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d, + 0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5, + 0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d, + 0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d, + 0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd, + 0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040, + // Block 0x40, offset 0x1000 + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, + // Block 0x41, offset 0x1040 + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, + // Block 0x42, offset 0x1080 + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed, + 0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d, + 0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d, + // 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, + 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, + // 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: 0x6e11, + 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, + // 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, + 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, + 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: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // 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: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0040, + 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008, + 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, + // Block 0x49, offset 0x1240 + 0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575, + 0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635, + 0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008, + 0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715, + 0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5, + 0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935, + 0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5, + 0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5, + 0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35, + 0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5, + 0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 0x1298: 0x7cd5, 0x1299: 0x7cf5, 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: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001, + 0x12c6: 0x7001, 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: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, + // Block 0x4d, offset 0x1340 + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 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: 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: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, + // Block 0x50, offset 0x1400 + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, + // Block 0x51, offset 0x1440 + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, + // Block 0x52, offset 0x1480 + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, + // 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: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, + // Block 0x54, offset 0x1500 + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 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: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + // 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: 0xaeda, 0x1551: 0x7d55, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75, + 0x1558: 0x7d95, 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: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35, + 0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55, + // Block 0x56, offset 0x1580 + 0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56, + 0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95, + 0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040, + 0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081, + 0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, + // Block 0x58, offset 0x1600 + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 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: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, + // 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: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115, + 0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5, + 0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295, + 0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355, + 0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415, + 0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515, + 0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595, + 0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5, + 0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655, + 0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115, + 0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735, + 0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5, + 0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5, + 0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5, + 0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5, + 0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5, + 0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715, + 0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6, + 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35, + 0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 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: 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, + // 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, + 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, + 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, + 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: 0x0040, + 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, + // 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, + // Block 0x61, offset 0x1840 + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, + // Block 0x65, offset 0x1940 + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0040, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289, + 0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349, + 0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409, + 0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9, + 0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589, + 0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649, + 0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709, + 0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79, + 0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39, + 0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9, + 0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39, + 0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9, + 0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79, + 0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39, + 0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9, + 0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059, + 0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9, + 0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239, + 0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9, + 0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399, + 0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459, + 0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309, + 0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559, + 0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9, + 0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679, + 0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9, + 0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d, + 0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9, + 0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959, + 0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d, + 0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d, + 0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9, + 0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99, + 0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9, + 0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9, + 0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99, + 0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39, + 0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639, + 0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9, + 0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d, + 0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9, + 0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d, + 0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd, + 0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979, + 0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19, + 0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d, + 0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d, + 0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99, + 0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39, + 0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9, + 0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39, + 0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd, + 0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19, + 0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9, + 0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59, + 0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd, + 0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d, + 0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d, + 0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d, + 0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879, + 0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919, + 0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd, + 0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9, + 0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99, + 0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39, + 0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9, + 0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d, + 0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19, + 0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9, + 0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59, + 0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9, + 0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, +} + +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var idnaIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0, + 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5, + 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, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 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, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe, + 0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e, + 0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c, + 0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba, + // Block 0x10, offset 0x400 + 0x400: 0x127, 0x401: 0x128, 0x402: 0x129, 0x403: 0x12a, 0x404: 0x12b, 0x405: 0x12c, 0x406: 0x12d, 0x407: 0x12e, + 0x408: 0x12f, 0x409: 0xba, 0x40a: 0x130, 0x40b: 0x131, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x132, 0x411: 0x133, 0x412: 0x134, 0x413: 0x135, 0x414: 0xba, 0x415: 0xba, 0x416: 0x136, 0x417: 0x137, + 0x418: 0x138, 0x419: 0x139, 0x41a: 0x13a, 0x41b: 0x13b, 0x41c: 0x13c, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0xba, 0x421: 0xba, 0x422: 0x13d, 0x423: 0x13e, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0x13f, 0x429: 0x140, 0x42a: 0x141, 0x42b: 0x142, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x143, 0x431: 0x144, 0x432: 0x145, 0x433: 0xba, 0x434: 0x146, 0x435: 0x147, 0x436: 0xba, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x148, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x149, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x14a, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x14b, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x14c, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x142, 0x529: 0x14d, 0x52a: 0xba, 0x52b: 0x14e, 0x52c: 0x14f, 0x52d: 0x150, 0x52e: 0x151, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x152, 0x53e: 0x153, 0x53f: 0x154, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x155, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x156, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x157, 0x585: 0x158, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x159, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x15a, 0x5b2: 0x15b, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x15c, 0x5c4: 0x15d, 0x5c5: 0x15e, 0x5c6: 0x15f, 0x5c7: 0x160, + 0x5c8: 0x9b, 0x5c9: 0x161, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x162, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x163, 0x5e9: 0x164, 0x5ea: 0x165, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x166, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x167, 0x624: 0x6f, 0x625: 0x168, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x169, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x16a, 0x641: 0x9b, 0x642: 0x16b, 0x643: 0x16c, 0x644: 0x73, 0x645: 0x74, 0x646: 0x16d, 0x647: 0x16e, + 0x648: 0x75, 0x649: 0x16f, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x170, 0x65c: 0x9b, 0x65d: 0x171, 0x65e: 0x9b, 0x65f: 0x172, + 0x660: 0x173, 0x661: 0x174, 0x662: 0x175, 0x663: 0xba, 0x664: 0x176, 0x665: 0x177, 0x666: 0x178, 0x667: 0x179, + 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x17a, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x17b, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x17c, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x17d, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, + // Block 0x1d, offset 0x740 + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x17e, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x17f, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x180, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x181, 0x841: 0x182, 0x842: 0xba, 0x843: 0xba, 0x844: 0x183, 0x845: 0x183, 0x846: 0x183, 0x847: 0x184, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // 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, +} + +// idnaSparseOffset: 264 entries, 528 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x8a, 0x93, 0xa3, 0xb1, 0xbd, 0xc9, 0xda, 0xe4, 0xeb, 0xf8, 0x109, 0x110, 0x11b, 0x12a, 0x138, 0x142, 0x144, 0x149, 0x14c, 0x14f, 0x151, 0x15d, 0x168, 0x170, 0x176, 0x17c, 0x181, 0x186, 0x189, 0x18d, 0x193, 0x198, 0x1a4, 0x1ae, 0x1b4, 0x1c5, 0x1cf, 0x1d2, 0x1da, 0x1dd, 0x1ea, 0x1f2, 0x1f6, 0x1fd, 0x205, 0x215, 0x221, 0x223, 0x22d, 0x239, 0x245, 0x251, 0x259, 0x25e, 0x268, 0x279, 0x27d, 0x288, 0x28c, 0x295, 0x29d, 0x2a3, 0x2a8, 0x2ab, 0x2af, 0x2b5, 0x2b9, 0x2bd, 0x2c3, 0x2ca, 0x2d0, 0x2d8, 0x2df, 0x2ea, 0x2f4, 0x2f8, 0x2fb, 0x301, 0x305, 0x307, 0x30a, 0x30c, 0x30f, 0x319, 0x31c, 0x32b, 0x32f, 0x334, 0x337, 0x33b, 0x340, 0x345, 0x34b, 0x351, 0x360, 0x366, 0x36a, 0x379, 0x37e, 0x386, 0x390, 0x39b, 0x3a3, 0x3b4, 0x3bd, 0x3cd, 0x3da, 0x3e4, 0x3e9, 0x3f6, 0x3fa, 0x3ff, 0x401, 0x405, 0x407, 0x40b, 0x414, 0x41a, 0x41e, 0x42e, 0x438, 0x43d, 0x440, 0x446, 0x44d, 0x452, 0x456, 0x45c, 0x461, 0x46a, 0x46f, 0x475, 0x47c, 0x483, 0x48a, 0x48e, 0x493, 0x496, 0x49b, 0x4a7, 0x4ad, 0x4b2, 0x4b9, 0x4c1, 0x4c6, 0x4ca, 0x4da, 0x4e1, 0x4e5, 0x4e9, 0x4f0, 0x4f2, 0x4f5, 0x4f8, 0x4fc, 0x500, 0x506, 0x50f, 0x51b, 0x522, 0x52b, 0x533, 0x53a, 0x548, 0x555, 0x562, 0x56b, 0x56f, 0x57d, 0x585, 0x590, 0x599, 0x59f, 0x5a7, 0x5b0, 0x5ba, 0x5bd, 0x5c9, 0x5cc, 0x5d1, 0x5de, 0x5e7, 0x5f3, 0x5f6, 0x600, 0x609, 0x615, 0x622, 0x62a, 0x62d, 0x632, 0x635, 0x638, 0x63b, 0x642, 0x649, 0x64d, 0x658, 0x65b, 0x661, 0x666, 0x66a, 0x66d, 0x670, 0x673, 0x676, 0x679, 0x67e, 0x688, 0x68b, 0x68f, 0x69e, 0x6aa, 0x6ae, 0x6b3, 0x6b8, 0x6bc, 0x6c1, 0x6ca, 0x6d5, 0x6db, 0x6e3, 0x6e7, 0x6eb, 0x6f1, 0x6f7, 0x6fc, 0x6ff, 0x70f, 0x716, 0x719, 0x71c, 0x720, 0x726, 0x72b, 0x730, 0x735, 0x738, 0x73d, 0x740, 0x743, 0x747, 0x74b, 0x74e, 0x75e, 0x76f, 0x774, 0x776, 0x778} + +// idnaSparseValues: 1915 entries, 7660 bytes +var idnaSparseValues = [1915]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: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, 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: 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: 0x07}, + {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: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, 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 0x3f + {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: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {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 0x4f + {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 0x5e + {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 0x63 + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xc, offset 0x6b + {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 0x77 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xe, offset 0x85 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8a + {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 0x10, offset 0x93 + {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 0x11, offset 0xa3 + {value: 0x0000, lo: 0x0d}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x0040, 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: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, 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: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbd + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, 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 0x14, offset 0xc9 + {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 0x15, offset 0xda + {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: 0x08f1, 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 0x16, offset 0xe4 + {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 0x17, offset 0xeb + {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: 0x8d}, + {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: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x18, offset 0xf8 + {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 0x19, offset 0x109 + {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 0x1a, offset 0x110 + {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 0x1b, offset 0x11b + {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 0x1c, offset 0x12a + {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 0x1d, offset 0x138 + {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 0x1e, offset 0x142 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x144 + {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 0x20, offset 0x149 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14c + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x14f + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x151 + {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 0x24, offset 0x15d + {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 0x25, offset 0x168 + {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 0x26, offset 0x170 + {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 0x27, offset 0x176 + {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 0x28, offset 0x17c + {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 0x29, offset 0x181 + {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 0x2a, offset 0x186 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x189 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18d + {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 0x2d, offset 0x193 + {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 0x2e, offset 0x198 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a4 + {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 0x30, offset 0x1ae + {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 0x31, offset 0x1b4 + {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 0x32, offset 0x1c5 + {value: 0x0000, lo: 0x09}, + {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: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1cf + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x34, offset 0x1d2 + {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 0x35, offset 0x1da + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1dd + {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 0x37, offset 0x1ea + {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 0x38, offset 0x1f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f6 + {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 0x3a, offset 0x1fd + {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 0x3b, offset 0x205 + {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 0x3c, offset 0x215 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x221 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x223 + {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 0x3f, offset 0x22d + {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: 0x8b}, + {value: 0x0040, lo: 0x8c, 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: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x239 + {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 0x41, offset 0x245 + {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 0x42, offset 0x251 + {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 0x43, offset 0x259 + {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 0x44, offset 0x25e + {value: 0x0000, lo: 0x09}, + {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: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x45, offset 0x268 + {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: 0xb1}, + {value: 0x3008, lo: 0xb2, 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: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x46, offset 0x279 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x27d + {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 0x48, offset 0x288 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x28c + {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: 0x24c1, 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 0x295 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x29d + {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 0x4c, offset 0x2a3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2a8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2ab + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4f, offset 0x2af + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x50, offset 0x2b5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2b9 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2bd + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x53, offset 0x2c3 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x54, offset 0x2ca + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2d0 + {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 0x56, offset 0x2d8 + {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 0x57, offset 0x2df + {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 0x58, offset 0x2ea + {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 0x59, offset 0x2f4 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5a, offset 0x2f8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0x5b, offset 0x2fb + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5c, offset 0x301 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5d, offset 0x305 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x5e, offset 0x307 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x5f, offset 0x30a + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x30c + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x61, offset 0x30f + {value: 0x0000, lo: 0x09}, + {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: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x62, offset 0x319 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x63, offset 0x31c + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x64, offset 0x32b + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x66, offset 0x334 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0x67, offset 0x337 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x68, offset 0x33b + {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 0x69, offset 0x340 + {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 0x6a, offset 0x345 + {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 0x6b, offset 0x34b + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6c, offset 0x351 + {value: 0x0000, lo: 0x0e}, + {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: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x360 + {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 0x6e, offset 0x366 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6f, offset 0x36a + {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: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x70, offset 0x379 + {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 0x71, offset 0x37e + {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 0x72, offset 0x386 + {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: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x390 + {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 0x74, offset 0x39b + {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 0x75, offset 0x3a3 + {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 0x76, offset 0x3b4 + {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 0x77, offset 0x3bd + {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 0x78, offset 0x3cd + {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 0x79, offset 0x3da + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3e4 + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3e9 + {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 0x7c, offset 0x3f6 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7d, offset 0x3fa + {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 0x7e, offset 0x3ff + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x7f, offset 0x401 + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x80, offset 0x405 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x81, offset 0x407 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x82, offset 0x40b + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x83, offset 0x414 + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x84, offset 0x41a + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x85, offset 0x41e + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x86, offset 0x42e + {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 0x87, offset 0x438 + {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 0x43d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x89, offset 0x440 + {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 0x446 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8b, offset 0x44d + {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 0x452 + {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 0x456 + {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 0x45c + {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 0x461 + {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 0x90, offset 0x46a + {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 0x46f + {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 0x475 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x93, offset 0x47c + {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: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x94, offset 0x483 + {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 0x95, offset 0x48a + {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 0x48e + {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 0x493 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x98, offset 0x496 + {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 0x49b + {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 0x9a, offset 0x4a7 + {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 0x4ad + {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 0x4b2 + {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 0x9d, offset 0x4b9 + {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 0x9e, offset 0x4c1 + {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 0x4c6 + {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 0x4ca + {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: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa1, offset 0x4da + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, 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 0xa2, offset 0x4e1 + {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 0x4e5 + {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 0x4e9 + {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 0xa5, offset 0x4f0 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa6, offset 0x4f2 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa7, offset 0x4f5 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa8, offset 0x4f8 + {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 0x4fc + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x500 + {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 0xab, offset 0x506 + {value: 0x0000, lo: 0x08}, + {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: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x50f + {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: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x51b + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, 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 0xae, offset 0x522 + {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 0xaf, offset 0x52b + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, 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 0xb0, offset 0x533 + {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 0xb1, offset 0x53a + {value: 0x0000, lo: 0x0d}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, 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 0xb2, offset 0x548 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x555 + {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 0xb4, offset 0x562 + {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 0xb5, offset 0x56b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb6, offset 0x56f + {value: 0x0000, lo: 0x0d}, + {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: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb7, offset 0x57d + {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 0xb8, offset 0x585 + {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 0xb9, offset 0x590 + {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 0xba, offset 0x599 + {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 0xbb, offset 0x59f + {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 0xbc, offset 0x5a7 + {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 0xbd, offset 0x5b0 + {value: 0x0000, lo: 0x09}, + {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: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xbe, offset 0x5ba + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xbf, offset 0x5bd + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, 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 0xc0, offset 0x5c9 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc1, offset 0x5cc + {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 0xc2, offset 0x5d1 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, 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 0xc3, offset 0x5de + {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 0xc4, offset 0x5e7 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, 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: 0x0040, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xbf}, + // Block 0xc5, offset 0x5f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc6, offset 0x5f6 + {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 0xc7, offset 0x600 + {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 0xc8, offset 0x609 + {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 0xc9, offset 0x615 + {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 0xca, offset 0x622 + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xcb, offset 0x62a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xcc, offset 0x62d + {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 0xcd, offset 0x632 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xce, offset 0x635 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xcf, offset 0x638 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xd0, offset 0x63b + {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: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xd1, offset 0x642 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, 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 0xd2, offset 0x649 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xd3, offset 0x64d + {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 0xd4, offset 0x658 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd5, offset 0x65b + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd6, offset 0x661 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd7, offset 0x666 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xd8, offset 0x66a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd9, offset 0x66d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xda, offset 0x670 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xdb, offset 0x673 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xdc, offset 0x676 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xdd, offset 0x679 + {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 0xde, offset 0x67e + {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 0xdf, offset 0x688 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe0, offset 0x68b + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xe1, offset 0x68f + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, 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 0xe2, offset 0x69e + {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: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xe3, offset 0x6aa + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xe4, offset 0x6ae + {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 0xe5, offset 0x6b3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe6, offset 0x6b8 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xe7, offset 0x6bc + {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 0xe8, offset 0x6c1 + {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 0xe9, offset 0x6ca + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xea, offset 0x6d5 + {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 0xeb, offset 0x6db + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, 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 0xec, offset 0x6e3 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xed, offset 0x6e7 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xee, offset 0x6eb + {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 0xef, offset 0x6f1 + {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 0xf0, offset 0x6f7 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xf1, offset 0x6fc + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xf2, offset 0x6ff + {value: 0x0000, lo: 0x0f}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0xf3, offset 0x70f + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xf4, offset 0x716 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf5, offset 0x719 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xf6, offset 0x71c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf7, offset 0x720 + {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 0xf8, offset 0x726 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf9, offset 0x72b + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xfa, offset 0x730 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0xfb, offset 0x735 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xbf}, + // Block 0xfc, offset 0x738 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0xfd, offset 0x73d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xfe, offset 0x740 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xff, offset 0x743 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x100, offset 0x747 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x101, offset 0x74b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x102, offset 0x74e + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0x103, offset 0x75e + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x104, offset 0x76f + {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 0x105, offset 0x774 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x106, offset 0x776 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x107, offset 0x778 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 42114 bytes (41KiB); checksum: 355A58A4 diff --git a/vendor/golang.org/x/net/idna/tables11.0.0.go b/vendor/golang.org/x/net/idna/tables11.0.0.go new file mode 100644 index 0000000..7678939 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables11.0.0.go @@ -0,0 +1,4653 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.13 && !go1.14 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "11.0.0" + +var mappings string = "" + // Size: 8175 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\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点\x042点" + + "\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œ\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\x03ppv\x02w" + + "c\x02mc\x02md\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 xorData string = "" + // Size: 4855 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\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\x04" + + "4\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 \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\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\x0671\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: 29404 bytes (28.71 KiB). Checksum: 848c45acb5f7991c. +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 < 125: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 125 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 127 blocks, 8128 entries, 16256 bytes +// The third block is the zero block. +var idnaValues = [8128]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: 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, + // 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: 0x0179, 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, + // 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, + 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: 0x01d9, + // 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: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 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: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 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, + 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, + 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: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 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: 0x0040, + 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: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 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: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 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: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 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, + 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, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 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, + 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, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x3308, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 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, + 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, + 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, + 0x6b6: 0x0018, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 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: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 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, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0018, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 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: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 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, + 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, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 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, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, + // Block 0x26, offset 0x980 + 0x980: 0x3308, 0x981: 0x0ca1, 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, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 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, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 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, + // Block 0x28, offset 0xa00 + 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, + 0xa06: 0x059d, 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: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9, + 0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 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, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 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: 0x05e5, 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: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, + 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + // 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, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // 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: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008, + 0xade: 0x1441, 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: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 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, + // 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: 0x064d, 0xb7b: 0x1459, + 0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686, + // Block 0x2e, offset 0xb80 + 0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 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: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, + 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, + 0xbaa: 0x070d, 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: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, + 0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 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, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 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: 0x079e, 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, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 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: 0x07bd, + 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + // 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: 0x07d5, + 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, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 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: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e, + 0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 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: 0x08ad, 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: 0x08cd, + 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x08ed, 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: 0x0905, 0xce3: 0x2439, + 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, + 0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, + 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, + 0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5, + 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + // 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: 0x0a06, 0xd35: 0x0a26, + 0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6, + 0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + // 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, + 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: 0x0b26, 0xd5d: 0x0b46, + 0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06, + 0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6, + 0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86, + 0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46, + 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, + 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + // 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, + 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, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 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: 0x0ebd, + 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, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + // 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, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d, + 0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d, + 0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d, + 0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 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, + 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, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd, + 0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd, + 0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d, + 0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d, + 0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d, + 0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd, + 0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d, + 0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd, + 0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d, + 0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd, + 0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd, + 0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d, + 0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd, + 0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d, + 0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd, + 0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 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: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd, + 0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d, + 0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d, + 0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd, + 0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d, + 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018, + // Block 0x3e, offset 0xf80 + 0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d, + 0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d, + 0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd, + 0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd, + 0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d, + 0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d, + 0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd, + 0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d, + 0xfb0: 0x3c9d, 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, + // 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: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15, + 0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75, + 0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded, + 0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d, + 0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5, + 0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d, + 0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d, + 0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd, + 0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040, + // Block 0x40, offset 0x1000 + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, + // Block 0x41, offset 0x1040 + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, + // Block 0x42, offset 0x1080 + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed, + 0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d, + 0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d, + // 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, + 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, + // 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: 0x6e11, + 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, + // 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, + 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, + 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: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // 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: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0008, + 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008, + 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0008, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, + // Block 0x49, offset 0x1240 + 0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575, + 0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635, + 0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008, + 0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715, + 0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5, + 0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935, + 0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5, + 0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5, + 0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35, + 0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5, + 0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 0x1298: 0x7cd5, 0x1299: 0x7cf5, 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: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001, + 0x12c6: 0x7001, 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: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, + // Block 0x4d, offset 0x1340 + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 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: 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: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, + // Block 0x50, offset 0x1400 + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, + // Block 0x51, offset 0x1440 + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, + // Block 0x52, offset 0x1480 + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, + // 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: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, + // Block 0x54, offset 0x1500 + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 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: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + // 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: 0xaeda, 0x1551: 0x7d55, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75, + 0x1558: 0x7d95, 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: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35, + 0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55, + // Block 0x56, offset 0x1580 + 0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56, + 0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95, + 0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040, + 0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081, + 0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, + // Block 0x58, offset 0x1600 + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 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: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, + // 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: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115, + 0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5, + 0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295, + 0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355, + 0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415, + 0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515, + 0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595, + 0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5, + 0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655, + 0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115, + 0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735, + 0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5, + 0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5, + 0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5, + 0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5, + 0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5, + 0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715, + 0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6, + 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35, + 0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 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: 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, + // 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, + 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, + 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, + 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, + // 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, + // Block 0x61, offset 0x1840 + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, + // Block 0x65, offset 0x1940 + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0018, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289, + 0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349, + 0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409, + 0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9, + 0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589, + 0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649, + 0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709, + 0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79, + 0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39, + 0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9, + 0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39, + 0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9, + 0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79, + 0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39, + 0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9, + 0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059, + 0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9, + 0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239, + 0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9, + 0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399, + 0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459, + 0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309, + 0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559, + 0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9, + 0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679, + 0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9, + 0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d, + 0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9, + 0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959, + 0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d, + 0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d, + 0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9, + 0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99, + 0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9, + 0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9, + 0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99, + 0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39, + 0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639, + 0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9, + 0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d, + 0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9, + 0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d, + 0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd, + 0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979, + 0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19, + 0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d, + 0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d, + 0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99, + 0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39, + 0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9, + 0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39, + 0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd, + 0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19, + 0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9, + 0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59, + 0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd, + 0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d, + 0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d, + 0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d, + 0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879, + 0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919, + 0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd, + 0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9, + 0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99, + 0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39, + 0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9, + 0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d, + 0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19, + 0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9, + 0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59, + 0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9, + 0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, +} + +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var idnaIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0, + 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5, + 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, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 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, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe, + 0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e, + 0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c, + 0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0x126, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x127, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0x128, 0x3fd: 0x129, 0x3fe: 0xba, 0x3ff: 0xba, + // Block 0x10, offset 0x400 + 0x400: 0x12a, 0x401: 0x12b, 0x402: 0x12c, 0x403: 0x12d, 0x404: 0x12e, 0x405: 0x12f, 0x406: 0x130, 0x407: 0x131, + 0x408: 0x132, 0x409: 0xba, 0x40a: 0x133, 0x40b: 0x134, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x135, 0x411: 0x136, 0x412: 0x137, 0x413: 0x138, 0x414: 0xba, 0x415: 0xba, 0x416: 0x139, 0x417: 0x13a, + 0x418: 0x13b, 0x419: 0x13c, 0x41a: 0x13d, 0x41b: 0x13e, 0x41c: 0x13f, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0x140, 0x421: 0xba, 0x422: 0x141, 0x423: 0x142, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0x143, 0x429: 0x144, 0x42a: 0x145, 0x42b: 0x146, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x147, 0x431: 0x148, 0x432: 0x149, 0x433: 0xba, 0x434: 0x14a, 0x435: 0x14b, 0x436: 0x14c, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0x14d, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x14e, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x14f, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x150, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x151, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x152, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x146, 0x529: 0x153, 0x52a: 0xba, 0x52b: 0x154, 0x52c: 0x155, 0x52d: 0x156, 0x52e: 0x157, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0x158, 0x53a: 0x159, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x15a, 0x53e: 0x15b, 0x53f: 0x15c, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x15d, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x15e, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x15f, 0x585: 0x160, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x161, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x162, 0x5b2: 0x163, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x164, 0x5c4: 0x165, 0x5c5: 0x166, 0x5c6: 0x167, 0x5c7: 0x168, + 0x5c8: 0x9b, 0x5c9: 0x169, 0x5ca: 0xba, 0x5cb: 0x16a, 0x5cc: 0x9b, 0x5cd: 0x16b, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x16c, 0x5e9: 0x16d, 0x5ea: 0x16e, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x16f, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x170, 0x624: 0x6f, 0x625: 0x171, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0x172, 0x632: 0x173, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x174, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x175, 0x641: 0x9b, 0x642: 0x176, 0x643: 0x177, 0x644: 0x73, 0x645: 0x74, 0x646: 0x178, 0x647: 0x179, + 0x648: 0x75, 0x649: 0x17a, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x17b, 0x65c: 0x9b, 0x65d: 0x17c, 0x65e: 0x9b, 0x65f: 0x17d, + 0x660: 0x17e, 0x661: 0x17f, 0x662: 0x180, 0x663: 0xba, 0x664: 0x181, 0x665: 0x182, 0x666: 0x183, 0x667: 0x184, + 0x668: 0xba, 0x669: 0x185, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x186, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x187, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x188, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x189, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, + // Block 0x1d, offset 0x740 + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x18a, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x18b, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x18c, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x18d, 0x841: 0x18e, 0x842: 0xba, 0x843: 0xba, 0x844: 0x18f, 0x845: 0x18f, 0x846: 0x18f, 0x847: 0x190, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // 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, +} + +// idnaSparseOffset: 276 entries, 552 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x86, 0x8b, 0x94, 0xa4, 0xb2, 0xbe, 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, 0x224, 0x22e, 0x23a, 0x246, 0x252, 0x25a, 0x25f, 0x269, 0x27a, 0x27e, 0x289, 0x28d, 0x296, 0x29e, 0x2a4, 0x2a9, 0x2ac, 0x2b0, 0x2b6, 0x2ba, 0x2be, 0x2c2, 0x2c7, 0x2cd, 0x2d5, 0x2dc, 0x2e7, 0x2f1, 0x2f5, 0x2f8, 0x2fe, 0x302, 0x304, 0x307, 0x309, 0x30c, 0x316, 0x319, 0x328, 0x32c, 0x331, 0x334, 0x338, 0x33d, 0x342, 0x348, 0x34e, 0x35d, 0x363, 0x367, 0x376, 0x37b, 0x383, 0x38d, 0x398, 0x3a0, 0x3b1, 0x3ba, 0x3ca, 0x3d7, 0x3e1, 0x3e6, 0x3f3, 0x3f7, 0x3fc, 0x3fe, 0x402, 0x404, 0x408, 0x411, 0x417, 0x41b, 0x42b, 0x435, 0x43a, 0x43d, 0x443, 0x44a, 0x44f, 0x453, 0x459, 0x45e, 0x467, 0x46c, 0x472, 0x479, 0x480, 0x487, 0x48b, 0x490, 0x493, 0x498, 0x4a4, 0x4aa, 0x4af, 0x4b6, 0x4be, 0x4c3, 0x4c7, 0x4d7, 0x4de, 0x4e2, 0x4e6, 0x4ed, 0x4ef, 0x4f2, 0x4f5, 0x4f9, 0x502, 0x506, 0x50e, 0x516, 0x51c, 0x525, 0x531, 0x538, 0x541, 0x54b, 0x552, 0x560, 0x56d, 0x57a, 0x583, 0x587, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5eb, 0x5ee, 0x5f3, 0x5fe, 0x607, 0x613, 0x616, 0x620, 0x629, 0x635, 0x642, 0x64f, 0x65d, 0x664, 0x667, 0x66c, 0x66f, 0x672, 0x675, 0x67c, 0x683, 0x687, 0x692, 0x695, 0x698, 0x69b, 0x6a1, 0x6a6, 0x6aa, 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6be, 0x6c8, 0x6cb, 0x6cf, 0x6de, 0x6ea, 0x6ee, 0x6f3, 0x6f7, 0x6fc, 0x700, 0x705, 0x70e, 0x719, 0x71f, 0x727, 0x72a, 0x72d, 0x731, 0x735, 0x73b, 0x741, 0x746, 0x749, 0x759, 0x760, 0x763, 0x766, 0x76a, 0x770, 0x775, 0x77a, 0x782, 0x787, 0x78b, 0x78f, 0x792, 0x795, 0x799, 0x79d, 0x7a0, 0x7b0, 0x7c1, 0x7c6, 0x7c8, 0x7ca} + +// idnaSparseValues: 1997 entries, 7988 bytes +var idnaSparseValues = [1997]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: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, 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: 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: 0x0401, 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: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xe, offset 0x86 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8b + {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 0x10, offset 0x94 + {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 0x11, offset 0xa4 + {value: 0x0000, lo: 0x0d}, + {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: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb2 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, 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: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbe + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, 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 0x14, offset 0xca + {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 0x15, offset 0xdb + {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: 0x08f1, 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 0x16, offset 0xe5 + {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 0x17, offset 0xec + {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: 0x8d}, + {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: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x18, offset 0xf9 + {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 0x19, offset 0x10a + {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 0x1a, offset 0x111 + {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 0x1b, offset 0x11c + {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 0x1c, offset 0x12b + {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 0x1d, offset 0x139 + {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 0x1e, offset 0x143 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x145 + {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 0x20, offset 0x14a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14d + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x150 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x152 + {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 0x24, offset 0x15e + {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 0x25, offset 0x169 + {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 0x26, offset 0x171 + {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 0x27, offset 0x177 + {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 0x28, offset 0x17d + {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 0x29, offset 0x182 + {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 0x2a, offset 0x187 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x18a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18e + {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 0x2d, offset 0x194 + {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 0x2e, offset 0x199 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a5 + {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 0x30, offset 0x1af + {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 0x31, offset 0x1b5 + {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 0x32, offset 0x1c6 + {value: 0x0000, lo: 0x09}, + {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: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x34, offset 0x1d3 + {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 0x35, offset 0x1db + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1de + {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 0x37, offset 0x1eb + {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 0x38, offset 0x1f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f7 + {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 0x3a, offset 0x1fe + {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 0x3b, offset 0x206 + {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 0x3c, offset 0x216 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x222 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x224 + {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 0x3f, offset 0x22e + {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: 0x8b}, + {value: 0x0040, lo: 0x8c, 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: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x23a + {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 0x41, offset 0x246 + {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 0x42, offset 0x252 + {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 0x43, offset 0x25a + {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 0x44, offset 0x25f + {value: 0x0000, lo: 0x09}, + {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: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x45, offset 0x269 + {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: 0xb1}, + {value: 0x3008, lo: 0xb2, 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: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x46, offset 0x27a + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x27e + {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 0x48, offset 0x289 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x28d + {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: 0x24c1, 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 0x296 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x29e + {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 0x4c, offset 0x2a4 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2a9 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2ac + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4f, offset 0x2b0 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x50, offset 0x2b6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2ba + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2be + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xbf}, + // Block 0x53, offset 0x2c2 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x54, offset 0x2c7 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2cd + {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 0x56, offset 0x2d5 + {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 0x57, offset 0x2dc + {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 0x58, offset 0x2e7 + {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 0x59, offset 0x2f1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5a, offset 0x2f5 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0xbf}, + // Block 0x5b, offset 0x2f8 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5c, offset 0x2fe + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5d, offset 0x302 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x5e, offset 0x304 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x5f, offset 0x307 + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x309 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x61, offset 0x30c + {value: 0x0000, lo: 0x09}, + {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: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x62, offset 0x316 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x63, offset 0x319 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x64, offset 0x328 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x65, offset 0x32c + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x66, offset 0x331 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x67, offset 0x334 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x68, offset 0x338 + {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 0x69, offset 0x33d + {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 0x6a, offset 0x342 + {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 0x6b, offset 0x348 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6c, offset 0x34e + {value: 0x0000, lo: 0x0e}, + {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: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x35d + {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 0x6e, offset 0x363 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6f, offset 0x367 + {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 0x70, offset 0x376 + {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 0x71, offset 0x37b + {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 0x72, offset 0x383 + {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: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x38d + {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 0x74, offset 0x398 + {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 0x75, offset 0x3a0 + {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 0x76, offset 0x3b1 + {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 0x77, offset 0x3ba + {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 0x78, offset 0x3ca + {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 0x79, offset 0x3d7 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3e1 + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3e6 + {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 0x7c, offset 0x3f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7d, offset 0x3f7 + {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 0x7e, offset 0x3fc + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x7f, offset 0x3fe + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x80, offset 0x402 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x81, offset 0x404 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x82, offset 0x408 + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x83, offset 0x411 + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x84, offset 0x417 + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x85, offset 0x41b + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x86, offset 0x42b + {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 0x87, offset 0x435 + {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 0x43a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x89, offset 0x43d + {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 0x443 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8b, offset 0x44a + {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 0x44f + {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 0x453 + {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 0x459 + {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 0x45e + {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 0x90, offset 0x467 + {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 0x46c + {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 0x472 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x93, offset 0x479 + {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: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x94, offset 0x480 + {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 0x95, offset 0x487 + {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 0x48b + {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 0x490 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x98, offset 0x493 + {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 0x498 + {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 0x9a, offset 0x4a4 + {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 0x4aa + {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 0x4af + {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 0x9d, offset 0x4b6 + {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 0x9e, offset 0x4be + {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 0x4c3 + {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 0x4c7 + {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 0xa1, offset 0x4d7 + {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 0xa2, offset 0x4de + {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 0x4e2 + {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 0x4e6 + {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 0xa5, offset 0x4ed + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa6, offset 0x4ef + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa7, offset 0x4f2 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa8, offset 0x4f5 + {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 0x4f9 + {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 0xaa, offset 0x502 + {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 0x506 + {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 0xac, offset 0x50e + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xad, offset 0x516 + {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 0xae, offset 0x51c + {value: 0x0000, lo: 0x08}, + {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: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xaf, offset 0x525 + {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 0xb0, offset 0x531 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, 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 0xb1, offset 0x538 + {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 0xb2, offset 0x541 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, 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 0xb3, offset 0x54b + {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 0xb4, offset 0x552 + {value: 0x0000, lo: 0x0d}, + {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: 0x0040, lo: 0x8e, 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 0xb5, offset 0x560 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb6, offset 0x56d + {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 0xb7, offset 0x57a + {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 0xb8, offset 0x583 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb9, offset 0x587 + {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: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xba, offset 0x596 + {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 0xbb, offset 0x59e + {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 0xbc, offset 0x5a9 + {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 0xbd, offset 0x5b2 + {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 0xbe, offset 0x5b8 + {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 0xbf, offset 0x5c0 + {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 0xc0, offset 0x5c9 + {value: 0x0000, lo: 0x09}, + {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: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xc1, offset 0x5d3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc2, offset 0x5d6 + {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 0xc3, offset 0x5e2 + {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 0xc4, offset 0x5eb + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc5, offset 0x5ee + {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 0xc6, offset 0x5f3 + {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 0xc7, offset 0x5fe + {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 0xc8, offset 0x607 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, 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: 0xbf}, + // Block 0xc9, offset 0x613 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xca, offset 0x616 + {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 0xcb, offset 0x620 + {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 0xcc, offset 0x629 + {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 0xcd, offset 0x635 + {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 0xce, offset 0x642 + {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 0xcf, offset 0x64f + {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 0xd0, offset 0x65d + {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 0xd1, offset 0x664 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xd2, offset 0x667 + {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 0xd3, offset 0x66c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xd4, offset 0x66f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xd5, offset 0x672 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xd6, offset 0x675 + {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: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xd7, offset 0x67c + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, 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 0xd8, offset 0x683 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xd9, offset 0x687 + {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 0xda, offset 0x692 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xdb, offset 0x695 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xdc, offset 0x698 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0xdd, offset 0x69b + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xde, offset 0x6a1 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xdf, offset 0x6a6 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xe0, offset 0x6aa + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe1, offset 0x6ad + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xe2, offset 0x6b0 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xe3, offset 0x6b3 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xe4, offset 0x6b6 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xe5, offset 0x6b9 + {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 0xe6, offset 0x6be + {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 0xe7, offset 0x6c8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe8, offset 0x6cb + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xe9, offset 0x6cf + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, 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 0xea, offset 0x6de + {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: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xeb, offset 0x6ea + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xec, offset 0x6ee + {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 0xed, offset 0x6f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xee, offset 0x6f7 + {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 0xef, offset 0x6fc + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xf0, offset 0x700 + {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 0xf1, offset 0x705 + {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 0xf2, offset 0x70e + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xf3, offset 0x719 + {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 0xf4, offset 0x71f + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, 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 0xf5, offset 0x727 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0xf6, offset 0x72a + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xf7, offset 0x72d + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xf8, offset 0x731 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xf9, offset 0x735 + {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 0xfa, offset 0x73b + {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 0xfb, offset 0x741 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xfc, offset 0x746 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xfd, offset 0x749 + {value: 0x0000, lo: 0x0f}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0xfe, offset 0x759 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xff, offset 0x760 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x100, offset 0x763 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0xbf}, + // Block 0x101, offset 0x766 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x102, offset 0x76a + {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 0x103, offset 0x770 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x104, offset 0x775 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x105, offset 0x77a + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x106, offset 0x782 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x107, offset 0x787 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x108, offset 0x78b + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x109, offset 0x78f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0x10a, offset 0x792 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x10b, offset 0x795 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x10c, offset 0x799 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x10d, offset 0x79d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x10e, offset 0x7a0 + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0x10f, offset 0x7b0 + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x110, offset 0x7c1 + {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 0x111, offset 0x7c6 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x112, offset 0x7c8 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x113, offset 0x7ca + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 42466 bytes (41KiB); checksum: 355A58A4 diff --git a/vendor/golang.org/x/net/idna/tables12.0.0.go b/vendor/golang.org/x/net/idna/tables12.0.0.go new file mode 100644 index 0000000..0600cd2 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables12.0.0.go @@ -0,0 +1,4733 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.14 && !go1.16 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "12.0.0" + +var mappings string = "" + // Size: 8178 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\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点\x042点" + + "\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œ\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\x03ppv\x02w" + + "c\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 xorData string = "" + // Size: 4862 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\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\x0671\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: 29708 bytes (29.01 KiB). Checksum: c3ecc76d8fffa6e6. +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 < 125: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 125 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 127 blocks, 8128 entries, 16256 bytes +// The third block is the zero block. +var idnaValues = [8128]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: 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, + // 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: 0x0179, 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, + // 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, + 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: 0x01d9, + // 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: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 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: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 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, + 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, + 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: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 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: 0x0040, + 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: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 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: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 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: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 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, + 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, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 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, + 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, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x3308, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 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, + 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, + 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, + 0x6b6: 0x0018, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 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: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 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, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0018, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0018, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 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: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0008, 0x90d: 0x0008, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008, + 0x912: 0x0008, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 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, + 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, + 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, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 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, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, + // Block 0x26, offset 0x980 + 0x980: 0x3308, 0x981: 0x0ca1, 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, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 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, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 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, + // 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, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 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, + // 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, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // 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: 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, + 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: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 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, + // 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, + // 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, + 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, + // 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, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x0796, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 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, + // 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, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 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, + // 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, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 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, + // 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, + // 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, + 0xd36: 0x0a5e, 0xd37: 0x0a7e, 0xd38: 0x0a9e, 0xd39: 0x0abe, 0xd3a: 0x0ade, 0xd3b: 0x0afe, + 0xd3c: 0x0b1e, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + // 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, + 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, + 0xd5e: 0x0b7e, 0xd5f: 0x0b9e, 0xd60: 0x0bbe, 0xd61: 0x0bde, 0xd62: 0x0bfe, 0xd63: 0x0c1e, + 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, + // 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, + 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, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 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, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + // 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, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x2715, 0xe41: 0x2735, 0xe42: 0x2755, 0xe43: 0x2775, 0xe44: 0x2795, 0xe45: 0x27b5, + 0xe46: 0x27d5, 0xe47: 0x27f5, 0xe48: 0x2815, 0xe49: 0x2835, 0xe4a: 0x2855, 0xe4b: 0x2875, + 0xe4c: 0x2895, 0xe4d: 0x28b5, 0xe4e: 0x28d5, 0xe4f: 0x28f5, 0xe50: 0x2915, 0xe51: 0x2935, + 0xe52: 0x2955, 0xe53: 0x2975, 0xe54: 0x2995, 0xe55: 0x29b5, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 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, + 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, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29d5, 0xeb9: 0x29f5, 0xeba: 0x2a15, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b55, 0xec1: 0x2b75, 0xec2: 0x2b95, 0xec3: 0x2bb5, 0xec4: 0x2bd5, 0xec5: 0x2bf5, + 0xec6: 0x2bf5, 0xec7: 0x2bf5, 0xec8: 0x2c15, 0xec9: 0x2c15, 0xeca: 0x2c15, 0xecb: 0x2c15, + 0xecc: 0x2c35, 0xecd: 0x2c35, 0xece: 0x2c35, 0xecf: 0x2c55, 0xed0: 0x2c75, 0xed1: 0x2c75, + 0xed2: 0x2a95, 0xed3: 0x2a95, 0xed4: 0x2c75, 0xed5: 0x2c75, 0xed6: 0x2c95, 0xed7: 0x2c95, + 0xed8: 0x2c75, 0xed9: 0x2c75, 0xeda: 0x2a95, 0xedb: 0x2a95, 0xedc: 0x2c75, 0xedd: 0x2c75, + 0xede: 0x2c55, 0xedf: 0x2c55, 0xee0: 0x2cb5, 0xee1: 0x2cb5, 0xee2: 0x2cd5, 0xee3: 0x2cd5, + 0xee4: 0x0040, 0xee5: 0x2cf5, 0xee6: 0x2d15, 0xee7: 0x2d35, 0xee8: 0x2d35, 0xee9: 0x2d55, + 0xeea: 0x2d75, 0xeeb: 0x2d95, 0xeec: 0x2db5, 0xeed: 0x2dd5, 0xeee: 0x2df5, 0xeef: 0x2e15, + 0xef0: 0x2e35, 0xef1: 0x2e55, 0xef2: 0x2e55, 0xef3: 0x2e75, 0xef4: 0x2e95, 0xef5: 0x2e95, + 0xef6: 0x2eb5, 0xef7: 0x2ed5, 0xef8: 0x2e75, 0xef9: 0x2ef5, 0xefa: 0x2f15, 0xefb: 0x2ef5, + 0xefc: 0x2e75, 0xefd: 0x2f35, 0xefe: 0x2f55, 0xeff: 0x2f75, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f95, 0xf01: 0x2fb5, 0xf02: 0x2d15, 0xf03: 0x2cf5, 0xf04: 0x2fd5, 0xf05: 0x2ff5, + 0xf06: 0x3015, 0xf07: 0x3035, 0xf08: 0x3055, 0xf09: 0x3075, 0xf0a: 0x3095, 0xf0b: 0x30b5, + 0xf0c: 0x30d5, 0xf0d: 0x30f5, 0xf0e: 0x3115, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x3135, 0xf13: 0x3155, 0xf14: 0x3175, 0xf15: 0x3195, 0xf16: 0x31b5, 0xf17: 0x31d5, + 0xf18: 0x31f5, 0xf19: 0x3215, 0xf1a: 0x3235, 0xf1b: 0x3255, 0xf1c: 0x3175, 0xf1d: 0x3275, + 0xf1e: 0x3295, 0xf1f: 0x32b5, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 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, + 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, + // 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, + 0xf8c: 0x3875, 0xf8d: 0x3895, 0xf8e: 0x38b5, 0xf8f: 0x38d5, 0xf90: 0x38f5, 0xf91: 0x3915, + 0xf92: 0x3935, 0xf93: 0x3955, 0xf94: 0x3975, 0xf95: 0x3995, 0xf96: 0x39b5, 0xf97: 0x39d5, + 0xf98: 0x39f5, 0xf99: 0x3a15, 0xf9a: 0x3a35, 0xf9b: 0x3a55, 0xf9c: 0x3a75, 0xf9d: 0x3a95, + 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, + // 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, + 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, + 0xfe4: 0x3ead, 0xfe5: 0x3ead, 0xfe6: 0x3ec5, 0xfe7: 0x3ec5, 0xfe8: 0x3edd, 0xfe9: 0x3edd, + 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: 0x0040, + // Block 0x40, offset 0x1000 + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, + // Block 0x41, offset 0x1040 + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x4045, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x4065, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x4085, 0x1079: 0x4085, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, + // Block 0x42, offset 0x1080 + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x40a5, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40c5, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40e5, 0x108d: 0x40e5, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x4105, + 0x1092: 0x4125, 0x1093: 0x4145, 0x1094: 0x4165, 0x1095: 0x4185, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x41a5, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41c5, 0x10a0: 0x41e5, 0x10a1: 0x6419, 0x10a2: 0x4205, 0x10a3: 0x4225, + 0x10a4: 0x4245, 0x10a5: 0x6431, 0x10a6: 0x4265, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x4285, 0x10ab: 0x42a5, 0x10ac: 0x42c5, 0x10ad: 0x42e5, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x4305, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x4325, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x4345, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x4365, 0x10c1: 0x4385, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x43a5, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43c5, 0x10d6: 0x43e5, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x4405, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x4425, + // 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, + 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, + // 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: 0x6e11, + 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, + // 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, + 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, + 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, + // 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: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0008, + 0x1230: 0x6e59, 0x1231: 0x6e71, 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, + // 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: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 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: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x7001, + 0x12c6: 0x7001, 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: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, + // Block 0x4d, offset 0x1340 + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 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: 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: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, + // Block 0x50, offset 0x1400 + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, + // Block 0x51, offset 0x1440 + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, + // Block 0x52, offset 0x1480 + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, + // 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: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, + // Block 0x54, offset 0x1500 + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 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: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + // 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: 0xaeda, 0x1551: 0x7d8d, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 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: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 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: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, + 0x158c: 0x7fae, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7fcd, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fed, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7ecd, + 0x159e: 0x7f2d, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x800e, 0x15b1: 0xb009, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, + 0x15b6: 0x806e, 0x15b7: 0xb031, 0x15b8: 0x808e, 0x15b9: 0xb059, 0x15ba: 0x80ae, 0x15bb: 0xb081, + 0x15bc: 0x80ce, 0x15bd: 0xb0a9, 0x15be: 0x80ee, 0x15bf: 0xb0d1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, + // Block 0x58, offset 0x1600 + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 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: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, + // 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: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 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, + // 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: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x8a0e, + 0x1724: 0xb589, 0x1725: 0xb5a1, 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: 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, + // 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, + 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, + 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, + 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, + // 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, + // Block 0x61, offset 0x1840 + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, + // Block 0x65, offset 0x1940 + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b3d, 0x1c5f: 0x8b3d, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0018, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0xc1c1, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xc1f1, 0x1dc1: 0xc229, 0x1dc2: 0xc261, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc281, 0x1dd1: 0xc2a1, + 0x1dd2: 0xc2c1, 0x1dd3: 0xc2e1, 0x1dd4: 0xc301, 0x1dd5: 0xc321, 0x1dd6: 0xc341, 0x1dd7: 0xc361, + 0x1dd8: 0xc381, 0x1dd9: 0xc3a1, 0x1dda: 0xc3c1, 0x1ddb: 0xc3e1, 0x1ddc: 0xc401, 0x1ddd: 0xc421, + 0x1dde: 0xc441, 0x1ddf: 0xc461, 0x1de0: 0xc481, 0x1de1: 0xc4a1, 0x1de2: 0xc4c1, 0x1de3: 0xc4e1, + 0x1de4: 0xc501, 0x1de5: 0xc521, 0x1de6: 0xc541, 0x1de7: 0xc561, 0x1de8: 0xc581, 0x1de9: 0xc5a1, + 0x1dea: 0xc5c1, 0x1deb: 0xc5e1, 0x1dec: 0xc601, 0x1ded: 0xc621, 0x1dee: 0xc641, 0x1def: 0xc661, + 0x1df0: 0xc681, 0x1df1: 0xc6a1, 0x1df2: 0xc6c1, 0x1df3: 0xc6e1, 0x1df4: 0xc701, 0x1df5: 0xc721, + 0x1df6: 0xc741, 0x1df7: 0xc761, 0x1df8: 0xc781, 0x1df9: 0xc7a1, 0x1dfa: 0xc7c1, 0x1dfb: 0xc7e1, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xcb11, 0x1e01: 0xcb31, 0x1e02: 0xcb51, 0x1e03: 0x8b55, 0x1e04: 0xcb71, 0x1e05: 0xcb91, + 0x1e06: 0xcbb1, 0x1e07: 0xcbd1, 0x1e08: 0xcbf1, 0x1e09: 0xcc11, 0x1e0a: 0xcc31, 0x1e0b: 0xcc51, + 0x1e0c: 0xcc71, 0x1e0d: 0x8b75, 0x1e0e: 0xcc91, 0x1e0f: 0xccb1, 0x1e10: 0xccd1, 0x1e11: 0xccf1, + 0x1e12: 0x8b95, 0x1e13: 0xcd11, 0x1e14: 0xcd31, 0x1e15: 0xc441, 0x1e16: 0x8bb5, 0x1e17: 0xcd51, + 0x1e18: 0xcd71, 0x1e19: 0xcd91, 0x1e1a: 0xcdb1, 0x1e1b: 0xcdd1, 0x1e1c: 0x8bd5, 0x1e1d: 0xcdf1, + 0x1e1e: 0xce11, 0x1e1f: 0xce31, 0x1e20: 0xce51, 0x1e21: 0xce71, 0x1e22: 0xc7a1, 0x1e23: 0xce91, + 0x1e24: 0xceb1, 0x1e25: 0xced1, 0x1e26: 0xcef1, 0x1e27: 0xcf11, 0x1e28: 0xcf31, 0x1e29: 0xcf51, + 0x1e2a: 0xcf71, 0x1e2b: 0xcf91, 0x1e2c: 0xcfb1, 0x1e2d: 0xcfd1, 0x1e2e: 0xcff1, 0x1e2f: 0xd011, + 0x1e30: 0xd031, 0x1e31: 0xd051, 0x1e32: 0xd051, 0x1e33: 0xd051, 0x1e34: 0x8bf5, 0x1e35: 0xd071, + 0x1e36: 0xd091, 0x1e37: 0xd0b1, 0x1e38: 0x8c15, 0x1e39: 0xd0d1, 0x1e3a: 0xd0f1, 0x1e3b: 0xd111, + 0x1e3c: 0xd131, 0x1e3d: 0xd151, 0x1e3e: 0xd171, 0x1e3f: 0xd191, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd1b1, 0x1e41: 0xd1d1, 0x1e42: 0xd1f1, 0x1e43: 0xd211, 0x1e44: 0xd231, 0x1e45: 0xd251, + 0x1e46: 0xd251, 0x1e47: 0xd271, 0x1e48: 0xd291, 0x1e49: 0xd2b1, 0x1e4a: 0xd2d1, 0x1e4b: 0xd2f1, + 0x1e4c: 0xd311, 0x1e4d: 0xd331, 0x1e4e: 0xd351, 0x1e4f: 0xd371, 0x1e50: 0xd391, 0x1e51: 0xd3b1, + 0x1e52: 0xd3d1, 0x1e53: 0xd3f1, 0x1e54: 0xd411, 0x1e55: 0xd431, 0x1e56: 0xd451, 0x1e57: 0xd471, + 0x1e58: 0xd491, 0x1e59: 0x8c35, 0x1e5a: 0xd4b1, 0x1e5b: 0xd4d1, 0x1e5c: 0xd4f1, 0x1e5d: 0xc321, + 0x1e5e: 0xd511, 0x1e5f: 0xd531, 0x1e60: 0x8c55, 0x1e61: 0x8c75, 0x1e62: 0xd551, 0x1e63: 0xd571, + 0x1e64: 0xd591, 0x1e65: 0xd5b1, 0x1e66: 0xd5d1, 0x1e67: 0xd5f1, 0x1e68: 0x2040, 0x1e69: 0xd611, + 0x1e6a: 0xd631, 0x1e6b: 0xd631, 0x1e6c: 0x8c95, 0x1e6d: 0xd651, 0x1e6e: 0xd671, 0x1e6f: 0xd691, + 0x1e70: 0xd6b1, 0x1e71: 0x8cb5, 0x1e72: 0xd6d1, 0x1e73: 0xd6f1, 0x1e74: 0x2040, 0x1e75: 0xd711, + 0x1e76: 0xd731, 0x1e77: 0xd751, 0x1e78: 0xd771, 0x1e79: 0xd791, 0x1e7a: 0xd7b1, 0x1e7b: 0x8cd5, + 0x1e7c: 0xd7d1, 0x1e7d: 0x8cf5, 0x1e7e: 0xd7f1, 0x1e7f: 0xd811, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xd831, 0x1e81: 0xd851, 0x1e82: 0xd871, 0x1e83: 0xd891, 0x1e84: 0xd8b1, 0x1e85: 0xd8d1, + 0x1e86: 0xd8f1, 0x1e87: 0xd911, 0x1e88: 0xd931, 0x1e89: 0x8d15, 0x1e8a: 0xd951, 0x1e8b: 0xd971, + 0x1e8c: 0xd991, 0x1e8d: 0xd9b1, 0x1e8e: 0xd9d1, 0x1e8f: 0x8d35, 0x1e90: 0xd9f1, 0x1e91: 0x8d55, + 0x1e92: 0x8d75, 0x1e93: 0xda11, 0x1e94: 0xda31, 0x1e95: 0xda31, 0x1e96: 0xda51, 0x1e97: 0x8d95, + 0x1e98: 0x8db5, 0x1e99: 0xda71, 0x1e9a: 0xda91, 0x1e9b: 0xdab1, 0x1e9c: 0xdad1, 0x1e9d: 0xdaf1, + 0x1e9e: 0xdb11, 0x1e9f: 0xdb31, 0x1ea0: 0xdb51, 0x1ea1: 0xdb71, 0x1ea2: 0xdb91, 0x1ea3: 0xdbb1, + 0x1ea4: 0x8dd5, 0x1ea5: 0xdbd1, 0x1ea6: 0xdbf1, 0x1ea7: 0xdc11, 0x1ea8: 0xdc31, 0x1ea9: 0xdc11, + 0x1eaa: 0xdc51, 0x1eab: 0xdc71, 0x1eac: 0xdc91, 0x1ead: 0xdcb1, 0x1eae: 0xdcd1, 0x1eaf: 0xdcf1, + 0x1eb0: 0xdd11, 0x1eb1: 0xdd31, 0x1eb2: 0xdd51, 0x1eb3: 0xdd71, 0x1eb4: 0xdd91, 0x1eb5: 0xddb1, + 0x1eb6: 0xddd1, 0x1eb7: 0xddf1, 0x1eb8: 0x8df5, 0x1eb9: 0xde11, 0x1eba: 0xde31, 0x1ebb: 0xde51, + 0x1ebc: 0xde71, 0x1ebd: 0xde91, 0x1ebe: 0x8e15, 0x1ebf: 0xdeb1, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe5b1, 0x1ec1: 0xe5d1, 0x1ec2: 0xe5f1, 0x1ec3: 0xe611, 0x1ec4: 0xe631, 0x1ec5: 0xe651, + 0x1ec6: 0x8f35, 0x1ec7: 0xe671, 0x1ec8: 0xe691, 0x1ec9: 0xe6b1, 0x1eca: 0xe6d1, 0x1ecb: 0xe6f1, + 0x1ecc: 0xe711, 0x1ecd: 0x8f55, 0x1ece: 0xe731, 0x1ecf: 0xe751, 0x1ed0: 0x8f75, 0x1ed1: 0x8f95, + 0x1ed2: 0xe771, 0x1ed3: 0xe791, 0x1ed4: 0xe7b1, 0x1ed5: 0xe7d1, 0x1ed6: 0xe7f1, 0x1ed7: 0xe811, + 0x1ed8: 0xe831, 0x1ed9: 0xe851, 0x1eda: 0xe871, 0x1edb: 0x8fb5, 0x1edc: 0xe891, 0x1edd: 0x8fd5, + 0x1ede: 0xe8b1, 0x1edf: 0x2040, 0x1ee0: 0xe8d1, 0x1ee1: 0xe8f1, 0x1ee2: 0xe911, 0x1ee3: 0x8ff5, + 0x1ee4: 0xe931, 0x1ee5: 0xe951, 0x1ee6: 0x9015, 0x1ee7: 0x9035, 0x1ee8: 0xe971, 0x1ee9: 0xe991, + 0x1eea: 0xe9b1, 0x1eeb: 0xe9d1, 0x1eec: 0xe9f1, 0x1eed: 0xe9f1, 0x1eee: 0xea11, 0x1eef: 0xea31, + 0x1ef0: 0xea51, 0x1ef1: 0xea71, 0x1ef2: 0xea91, 0x1ef3: 0xeab1, 0x1ef4: 0xead1, 0x1ef5: 0x9055, + 0x1ef6: 0xeaf1, 0x1ef7: 0x9075, 0x1ef8: 0xeb11, 0x1ef9: 0x9095, 0x1efa: 0xeb31, 0x1efb: 0x90b5, + 0x1efc: 0x90d5, 0x1efd: 0x90f5, 0x1efe: 0xeb51, 0x1eff: 0xeb71, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xeb91, 0x1f01: 0x9115, 0x1f02: 0x9135, 0x1f03: 0x9155, 0x1f04: 0x9175, 0x1f05: 0xebb1, + 0x1f06: 0xebd1, 0x1f07: 0xebd1, 0x1f08: 0xebf1, 0x1f09: 0xec11, 0x1f0a: 0xec31, 0x1f0b: 0xec51, + 0x1f0c: 0xec71, 0x1f0d: 0x9195, 0x1f0e: 0xec91, 0x1f0f: 0xecb1, 0x1f10: 0xecd1, 0x1f11: 0xecf1, + 0x1f12: 0x91b5, 0x1f13: 0xed11, 0x1f14: 0x91d5, 0x1f15: 0x91f5, 0x1f16: 0xed31, 0x1f17: 0xed51, + 0x1f18: 0xed71, 0x1f19: 0xed91, 0x1f1a: 0xedb1, 0x1f1b: 0xedd1, 0x1f1c: 0x9215, 0x1f1d: 0x9235, + 0x1f1e: 0x9255, 0x1f1f: 0x2040, 0x1f20: 0xedf1, 0x1f21: 0x9275, 0x1f22: 0xee11, 0x1f23: 0xee31, + 0x1f24: 0xee51, 0x1f25: 0x9295, 0x1f26: 0xee71, 0x1f27: 0xee91, 0x1f28: 0xeeb1, 0x1f29: 0xeed1, + 0x1f2a: 0xeef1, 0x1f2b: 0x92b5, 0x1f2c: 0xef11, 0x1f2d: 0xef31, 0x1f2e: 0xef51, 0x1f2f: 0xef71, + 0x1f30: 0xef91, 0x1f31: 0xefb1, 0x1f32: 0x92d5, 0x1f33: 0x92f5, 0x1f34: 0xefd1, 0x1f35: 0x9315, + 0x1f36: 0xeff1, 0x1f37: 0x9335, 0x1f38: 0xf011, 0x1f39: 0xf031, 0x1f3a: 0xf051, 0x1f3b: 0x9355, + 0x1f3c: 0x9375, 0x1f3d: 0xf071, 0x1f3e: 0x9395, 0x1f3f: 0xf091, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6d1, 0x1f41: 0xf6f1, 0x1f42: 0xf711, 0x1f43: 0xf731, 0x1f44: 0xf751, 0x1f45: 0x9555, + 0x1f46: 0xf771, 0x1f47: 0xf791, 0x1f48: 0xf7b1, 0x1f49: 0xf7d1, 0x1f4a: 0xf7f1, 0x1f4b: 0x9575, + 0x1f4c: 0x9595, 0x1f4d: 0xf811, 0x1f4e: 0xf831, 0x1f4f: 0xf851, 0x1f50: 0xf871, 0x1f51: 0xf891, + 0x1f52: 0xf8b1, 0x1f53: 0x95b5, 0x1f54: 0xf8d1, 0x1f55: 0xf8f1, 0x1f56: 0xf911, 0x1f57: 0xf931, + 0x1f58: 0x95d5, 0x1f59: 0x95f5, 0x1f5a: 0xf951, 0x1f5b: 0xf971, 0x1f5c: 0xf991, 0x1f5d: 0x9615, + 0x1f5e: 0xf9b1, 0x1f5f: 0xf9d1, 0x1f60: 0x684d, 0x1f61: 0x9635, 0x1f62: 0xf9f1, 0x1f63: 0xfa11, + 0x1f64: 0xfa31, 0x1f65: 0x9655, 0x1f66: 0xfa51, 0x1f67: 0xfa71, 0x1f68: 0xfa91, 0x1f69: 0xfab1, + 0x1f6a: 0xfad1, 0x1f6b: 0xfaf1, 0x1f6c: 0xfb11, 0x1f6d: 0x9675, 0x1f6e: 0xfb31, 0x1f6f: 0xfb51, + 0x1f70: 0xfb71, 0x1f71: 0x9695, 0x1f72: 0xfb91, 0x1f73: 0xfbb1, 0x1f74: 0xfbd1, 0x1f75: 0xfbf1, + 0x1f76: 0x7b6d, 0x1f77: 0x96b5, 0x1f78: 0xfc11, 0x1f79: 0xfc31, 0x1f7a: 0xfc51, 0x1f7b: 0x96d5, + 0x1f7c: 0xfc71, 0x1f7d: 0x96f5, 0x1f7e: 0xfc91, 0x1f7f: 0xfc91, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfcb1, 0x1f81: 0x9715, 0x1f82: 0xfcd1, 0x1f83: 0xfcf1, 0x1f84: 0xfd11, 0x1f85: 0xfd31, + 0x1f86: 0xfd51, 0x1f87: 0xfd71, 0x1f88: 0xfd91, 0x1f89: 0x9735, 0x1f8a: 0xfdb1, 0x1f8b: 0xfdd1, + 0x1f8c: 0xfdf1, 0x1f8d: 0xfe11, 0x1f8e: 0xfe31, 0x1f8f: 0xfe51, 0x1f90: 0x9755, 0x1f91: 0xfe71, + 0x1f92: 0x9775, 0x1f93: 0x9795, 0x1f94: 0x97b5, 0x1f95: 0xfe91, 0x1f96: 0xfeb1, 0x1f97: 0xfed1, + 0x1f98: 0xfef1, 0x1f99: 0xff11, 0x1f9a: 0xff31, 0x1f9b: 0xff51, 0x1f9c: 0xff71, 0x1f9d: 0x97d5, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, +} + +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var idnaIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0x9b, + 0x1b0: 0xd0, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, + 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x37, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x38, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe0, + 0x1c8: 0xe1, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe2, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe5, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe6, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe7, + 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, + 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf8, 0x31f: 0xf9, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, + 0x3a8: 0x47, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x100, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x101, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9f, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, + 0x3d0: 0x10e, 0x3d1: 0x9f, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xba, 0x3e6: 0x11a, 0x3e7: 0x11b, + 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x5b, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x121, 0x3f1: 0x122, 0x3f2: 0x123, 0x3f3: 0x124, 0x3f4: 0x125, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0x127, 0x3fd: 0x128, 0x3fe: 0xba, 0x3ff: 0x129, + // Block 0x10, offset 0x400 + 0x400: 0x12a, 0x401: 0x12b, 0x402: 0x12c, 0x403: 0x12d, 0x404: 0x12e, 0x405: 0x12f, 0x406: 0x130, 0x407: 0x131, + 0x408: 0x132, 0x409: 0xba, 0x40a: 0x133, 0x40b: 0x134, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x135, 0x411: 0x136, 0x412: 0x137, 0x413: 0x138, 0x414: 0xba, 0x415: 0xba, 0x416: 0x139, 0x417: 0x13a, + 0x418: 0x13b, 0x419: 0x13c, 0x41a: 0x13d, 0x41b: 0x13e, 0x41c: 0x13f, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0x140, 0x421: 0xba, 0x422: 0x141, 0x423: 0x142, 0x424: 0xba, 0x425: 0xba, 0x426: 0x143, 0x427: 0x144, + 0x428: 0x145, 0x429: 0x146, 0x42a: 0x147, 0x42b: 0x148, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x149, 0x431: 0x14a, 0x432: 0x14b, 0x433: 0xba, 0x434: 0x14c, 0x435: 0x14d, 0x436: 0x14e, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0x14f, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0x150, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x151, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x152, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x153, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x154, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x155, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x148, 0x529: 0x156, 0x52a: 0xba, 0x52b: 0x157, 0x52c: 0x158, 0x52d: 0x159, 0x52e: 0x15a, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0x15b, 0x53a: 0x15c, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x15d, 0x53e: 0x15e, 0x53f: 0x15f, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x160, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x161, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x162, 0x585: 0x163, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x164, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x165, 0x5b2: 0x166, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x167, 0x5c4: 0x168, 0x5c5: 0x169, 0x5c6: 0x16a, 0x5c7: 0x16b, + 0x5c8: 0x9b, 0x5c9: 0x16c, 0x5ca: 0xba, 0x5cb: 0x16d, 0x5cc: 0x9b, 0x5cd: 0x16e, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x16f, 0x5e9: 0x170, 0x5ea: 0x171, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x172, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0x173, 0x605: 0x174, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0x175, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x121, 0x621: 0x121, 0x622: 0x121, 0x623: 0x176, 0x624: 0x6f, 0x625: 0x177, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0x178, 0x632: 0x179, 0x633: 0xba, 0x634: 0x17a, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x17b, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x17c, 0x641: 0x9b, 0x642: 0x17d, 0x643: 0x17e, 0x644: 0x73, 0x645: 0x74, 0x646: 0x17f, 0x647: 0x180, + 0x648: 0x75, 0x649: 0x181, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x182, 0x65c: 0x9b, 0x65d: 0x183, 0x65e: 0x9b, 0x65f: 0x184, + 0x660: 0x185, 0x661: 0x186, 0x662: 0x187, 0x663: 0xba, 0x664: 0x188, 0x665: 0x189, 0x666: 0x18a, 0x667: 0x18b, + 0x668: 0x9b, 0x669: 0x18c, 0x66a: 0x18d, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x18e, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x18f, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x190, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x191, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, + // Block 0x1d, offset 0x740 + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x192, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x193, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x194, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x195, 0x841: 0x196, 0x842: 0xba, 0x843: 0xba, 0x844: 0x197, 0x845: 0x197, 0x846: 0x197, 0x847: 0x198, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // 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, +} + +// idnaSparseOffset: 284 entries, 568 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x86, 0x8b, 0x94, 0xa4, 0xb2, 0xbe, 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, 0x224, 0x22e, 0x23a, 0x246, 0x252, 0x25a, 0x25f, 0x26c, 0x27d, 0x281, 0x28c, 0x290, 0x299, 0x2a1, 0x2a7, 0x2ac, 0x2af, 0x2b3, 0x2b9, 0x2bd, 0x2c1, 0x2c5, 0x2cb, 0x2d3, 0x2da, 0x2e5, 0x2ef, 0x2f3, 0x2f6, 0x2fc, 0x300, 0x302, 0x305, 0x307, 0x30a, 0x314, 0x317, 0x326, 0x32a, 0x32f, 0x332, 0x336, 0x33b, 0x340, 0x346, 0x352, 0x361, 0x367, 0x36b, 0x37a, 0x37f, 0x387, 0x391, 0x39c, 0x3a4, 0x3b5, 0x3be, 0x3ce, 0x3db, 0x3e5, 0x3ea, 0x3f7, 0x3fb, 0x400, 0x402, 0x406, 0x408, 0x40c, 0x415, 0x41b, 0x41f, 0x42f, 0x439, 0x43e, 0x441, 0x447, 0x44e, 0x453, 0x457, 0x45d, 0x462, 0x46b, 0x470, 0x476, 0x47d, 0x484, 0x48b, 0x48f, 0x494, 0x497, 0x49c, 0x4a8, 0x4ae, 0x4b3, 0x4ba, 0x4c2, 0x4c7, 0x4cb, 0x4db, 0x4e2, 0x4e6, 0x4ea, 0x4f1, 0x4f3, 0x4f6, 0x4f9, 0x4fd, 0x506, 0x50a, 0x512, 0x51a, 0x51e, 0x524, 0x52d, 0x539, 0x540, 0x549, 0x553, 0x55a, 0x568, 0x575, 0x582, 0x58b, 0x58f, 0x59f, 0x5a7, 0x5b2, 0x5bb, 0x5c1, 0x5c9, 0x5d2, 0x5dd, 0x5e0, 0x5ec, 0x5f5, 0x5f8, 0x5fd, 0x602, 0x60f, 0x61a, 0x623, 0x62d, 0x630, 0x63a, 0x643, 0x64f, 0x65c, 0x669, 0x677, 0x67e, 0x682, 0x685, 0x68a, 0x68d, 0x692, 0x695, 0x69c, 0x6a3, 0x6a7, 0x6b2, 0x6b5, 0x6b8, 0x6bb, 0x6c1, 0x6c7, 0x6cd, 0x6d0, 0x6d3, 0x6d6, 0x6dd, 0x6e0, 0x6e5, 0x6ef, 0x6f2, 0x6f6, 0x705, 0x711, 0x715, 0x71a, 0x71e, 0x723, 0x727, 0x72c, 0x735, 0x740, 0x746, 0x74c, 0x752, 0x758, 0x761, 0x764, 0x767, 0x76b, 0x76f, 0x773, 0x779, 0x77f, 0x784, 0x787, 0x797, 0x79e, 0x7a1, 0x7a6, 0x7aa, 0x7b0, 0x7b5, 0x7b9, 0x7bf, 0x7c5, 0x7c9, 0x7d2, 0x7d7, 0x7da, 0x7dd, 0x7e1, 0x7e5, 0x7e8, 0x7f8, 0x809, 0x80e, 0x810, 0x812} + +// idnaSparseValues: 2069 entries, 8276 bytes +var idnaSparseValues = [2069]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: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, 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: 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: 0x0401, 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: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xe, offset 0x86 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8b + {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 0x10, offset 0x94 + {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 0x11, offset 0xa4 + {value: 0x0000, lo: 0x0d}, + {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: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb2 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, 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: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbe + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, 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 0x14, offset 0xca + {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 0x15, offset 0xdb + {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: 0x08f1, 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 0x16, offset 0xe5 + {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 0x17, offset 0xec + {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: 0x8d}, + {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: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x18, offset 0xf9 + {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 0x19, offset 0x10a + {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 0x1a, offset 0x111 + {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 0x1b, offset 0x11c + {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 0x1c, offset 0x12b + {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 0x1d, offset 0x139 + {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 0x1e, offset 0x143 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x145 + {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 0x20, offset 0x14a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14d + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x150 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x152 + {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 0x24, offset 0x15e + {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 0x25, offset 0x169 + {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 0x26, offset 0x171 + {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 0x27, offset 0x177 + {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 0x28, offset 0x17d + {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 0x29, offset 0x182 + {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 0x2a, offset 0x187 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x18a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18e + {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 0x2d, offset 0x194 + {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 0x2e, offset 0x199 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a5 + {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 0x30, offset 0x1af + {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 0x31, offset 0x1b5 + {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 0x32, offset 0x1c6 + {value: 0x0000, lo: 0x09}, + {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: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x34, offset 0x1d3 + {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 0x35, offset 0x1db + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1de + {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 0x37, offset 0x1eb + {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 0x38, offset 0x1f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f7 + {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 0x3a, offset 0x1fe + {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 0x3b, offset 0x206 + {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 0x3c, offset 0x216 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x222 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x224 + {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 0x3f, offset 0x22e + {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: 0x8b}, + {value: 0x0040, lo: 0x8c, 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: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x23a + {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 0x41, offset 0x246 + {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 0x42, offset 0x252 + {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 0x43, offset 0x25a + {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 0x44, offset 0x25f + {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: 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 0x45, offset 0x26c + {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 0x46, offset 0x27d + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x281 + {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 0x48, offset 0x28c + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x290 + {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: 0x24c1, 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 0x299 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x2a1 + {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 0x4c, offset 0x2a7 + {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 0x4d, offset 0x2ac + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2af + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4f, offset 0x2b3 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x50, offset 0x2b9 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2bd + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2c1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xbf}, + // Block 0x53, offset 0x2c5 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ebd, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x54, offset 0x2cb + {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 0x55, offset 0x2d3 + {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 0x56, offset 0x2da + {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 0x57, offset 0x2e5 + {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 0x58, offset 0x2ef + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x59, offset 0x2f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x5a, offset 0x2f6 + {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 0x5b, offset 0x2fc + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0f15, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5c, offset 0x300 + {value: 0x0020, lo: 0x01}, + {value: 0x0f35, lo: 0x80, hi: 0xbf}, + // Block 0x5d, offset 0x302 + {value: 0x0020, lo: 0x02}, + {value: 0x1735, lo: 0x80, hi: 0x8f}, + {value: 0x1915, lo: 0x90, hi: 0xbf}, + // Block 0x5e, offset 0x305 + {value: 0x0020, lo: 0x01}, + {value: 0x1f15, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x307 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x60, offset 0x30a + {value: 0x0000, lo: 0x09}, + {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: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x61, offset 0x314 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x62, offset 0x317 + {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 0x63, offset 0x326 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x64, offset 0x32a + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x66, offset 0x332 + {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 0x336 + {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 0x33b + {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 0x340 + {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 0x346 + {value: 0x0000, lo: 0x0b}, + {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: 0x447d, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6b, offset 0x352 + {value: 0x0000, lo: 0x0e}, + {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: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6c, offset 0x361 + {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 0x367 + {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 0x36b + {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 0x6f, offset 0x37a + {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 0x37f + {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 0x71, offset 0x387 + {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 0x72, offset 0x391 + {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 0x73, offset 0x39c + {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 0x74, offset 0x3a4 + {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 0x75, offset 0x3b5 + {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 0x76, offset 0x3be + {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 0x77, offset 0x3ce + {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 0x78, offset 0x3db + {value: 0x0000, lo: 0x09}, + {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: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x44cd, lo: 0xb0, hi: 0xbf}, + // Block 0x79, offset 0x3e5 + {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 0x3ea + {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 0x7b, offset 0x3f7 + {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 0x3fb + {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 0x400 + {value: 0x0020, lo: 0x01}, + {value: 0x454d, lo: 0x80, hi: 0xbf}, + // Block 0x7e, offset 0x402 + {value: 0x0020, lo: 0x03}, + {value: 0x4d4d, lo: 0x80, hi: 0x94}, + {value: 0x4b0d, lo: 0x95, hi: 0x95}, + {value: 0x4fed, lo: 0x96, hi: 0xbf}, + // Block 0x7f, offset 0x406 + {value: 0x0020, lo: 0x01}, + {value: 0x552d, lo: 0x80, hi: 0xbf}, + // Block 0x80, offset 0x408 + {value: 0x0020, lo: 0x03}, + {value: 0x5d2d, lo: 0x80, hi: 0x84}, + {value: 0x568d, lo: 0x85, hi: 0x85}, + {value: 0x5dcd, lo: 0x86, hi: 0xbf}, + // Block 0x81, offset 0x40c + {value: 0x0020, lo: 0x08}, + {value: 0x6b8d, lo: 0x80, hi: 0x8f}, + {value: 0x6d4d, lo: 0x90, hi: 0x90}, + {value: 0x6d8d, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, 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 0x82, offset 0x415 + {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 0x83, offset 0x41b + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x84, offset 0x41f + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x85, offset 0x42f + {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 0x86, offset 0x439 + {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 0x87, offset 0x43e + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x88, offset 0x441 + {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 0x89, offset 0x447 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8a, offset 0x44e + {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 0x8b, offset 0x453 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8c, offset 0x457 + {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 0x8d, offset 0x45d + {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 0x8e, offset 0x462 + {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 0x8f, offset 0x46b + {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 0x90, offset 0x470 + {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 0x91, offset 0x476 + {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 0x92, offset 0x47d + {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 0x93, offset 0x484 + {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 0x94, offset 0x48b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x95, offset 0x48f + {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 0x96, offset 0x494 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x97, offset 0x497 + {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 0x98, offset 0x49c + {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 0x99, offset 0x4a8 + {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 0x9a, offset 0x4ae + {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 0x9b, offset 0x4b3 + {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 0x9c, offset 0x4ba + {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 0x9d, offset 0x4c2 + {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 0x9e, offset 0x4c7 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0x9f, offset 0x4cb + {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 0xa0, offset 0x4db + {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 0xa1, offset 0x4e2 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa2, offset 0x4e6 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa3, offset 0x4ea + {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 0xa4, offset 0x4f1 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa5, offset 0x4f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa6, offset 0x4f6 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa7, offset 0x4f9 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa8, offset 0x4fd + {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 0xa9, offset 0x506 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x50a + {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 0x512 + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xac, offset 0x51a + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xad, offset 0x51e + {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 0xae, offset 0x524 + {value: 0x0000, lo: 0x08}, + {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: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xaf, offset 0x52d + {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 0xb0, offset 0x539 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, 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 0xb1, offset 0x540 + {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 0xb2, offset 0x549 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, 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 0xb3, offset 0x553 + {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 0xb4, offset 0x55a + {value: 0x0000, lo: 0x0d}, + {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: 0x0040, lo: 0x8e, 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 0xb5, offset 0x568 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb6, offset 0x575 + {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 0xb7, offset 0x582 + {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 0xb8, offset 0x58b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb9, offset 0x58f + {value: 0x0000, lo: 0x0f}, + {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: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, 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: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xba, offset 0x59f + {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 0xbb, offset 0x5a7 + {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 0xbc, offset 0x5b2 + {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 0xbd, offset 0x5bb + {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 0xbe, offset 0x5c1 + {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 0xbf, offset 0x5c9 + {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 0xc0, offset 0x5d2 + {value: 0x0000, lo: 0x0a}, + {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: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc1, offset 0x5dd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc2, offset 0x5e0 + {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 0xc3, offset 0x5ec + {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 0xc4, offset 0x5f5 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc5, offset 0x5f8 + {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 0xc6, offset 0x5fd + {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 0xc7, offset 0x602 + {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 0xc8, offset 0x60f + {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 0xc9, offset 0x61a + {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 0xca, offset 0x623 + {value: 0x0000, lo: 0x09}, + {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: 0xbf}, + // Block 0xcb, offset 0x62d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xcc, offset 0x630 + {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 0xcd, offset 0x63a + {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 0xce, offset 0x643 + {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 0xcf, offset 0x64f + {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 0xd0, offset 0x65c + {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 0xd1, offset 0x669 + {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 0xd2, offset 0x677 + {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 0xd3, offset 0x67e + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xd4, offset 0x682 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xd5, offset 0x685 + {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 0xd6, offset 0x68a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xd7, offset 0x68d + {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 0xd8, offset 0x692 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xd9, offset 0x695 + {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: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xda, offset 0x69c + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, 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 0xdb, offset 0x6a3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xdc, offset 0x6a7 + {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 0xdd, offset 0x6b2 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xde, offset 0x6b5 + {value: 0x0000, lo: 0x02}, + {value: 0xe105, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xdf, offset 0x6b8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0xe0, offset 0x6bb + {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 0xe1, offset 0x6c1 + {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 0xe2, offset 0x6c7 + {value: 0x0000, lo: 0x05}, + {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: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xe3, offset 0x6cd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xe4, offset 0x6d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xe5, offset 0x6d3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xe6, offset 0x6d6 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xe7, offset 0x6dd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xe8, offset 0x6e0 + {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 0xe9, offset 0x6e5 + {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 0xea, offset 0x6ef + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xeb, offset 0x6f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xec, offset 0x6f6 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, 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 0xed, offset 0x705 + {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: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xee, offset 0x711 + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xef, offset 0x715 + {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 0xf0, offset 0x71a + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf1, offset 0x71e + {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 0xf2, offset 0x723 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xf3, offset 0x727 + {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 0xf4, offset 0x72c + {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 0xf5, offset 0x735 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xf6, offset 0x740 + {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 0xf7, offset 0x746 + {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 0xf8, offset 0x74c + {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 0xf9, offset 0x752 + {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 0xfa, offset 0x758 + {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 0xfb, offset 0x761 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0xfc, offset 0x764 + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xfd, offset 0x767 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0818, lo: 0x81, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xfe, offset 0x76b + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xff, offset 0x76f + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x100, offset 0x773 + {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 0x101, offset 0x779 + {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 0x102, offset 0x77f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1d9, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0x103, offset 0x784 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0x104, offset 0x787 + {value: 0x0000, lo: 0x0f}, + {value: 0xc801, lo: 0x80, hi: 0x80}, + {value: 0xc851, lo: 0x81, hi: 0x81}, + {value: 0xc8a1, lo: 0x82, hi: 0x82}, + {value: 0xc8f1, lo: 0x83, hi: 0x83}, + {value: 0xc941, lo: 0x84, hi: 0x84}, + {value: 0xc991, lo: 0x85, hi: 0x85}, + {value: 0xc9e1, lo: 0x86, hi: 0x86}, + {value: 0xca31, lo: 0x87, hi: 0x87}, + {value: 0xca81, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcad1, lo: 0x90, hi: 0x90}, + {value: 0xcaf1, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0x105, offset 0x797 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x106, offset 0x79e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x107, offset 0x7a1 + {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 0x108, offset 0x7a6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x109, offset 0x7aa + {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 0x10a, offset 0x7b0 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x10b, offset 0x7b5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x10c, offset 0x7b9 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0x10d, offset 0x7bf + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xa4}, + {value: 0x0018, lo: 0xa5, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xbf}, + // Block 0x10e, offset 0x7c5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x10f, offset 0x7c9 + {value: 0x0000, lo: 0x08}, + {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: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x110, offset 0x7d2 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x111, offset 0x7d7 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0x112, offset 0x7da + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x113, offset 0x7dd + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x114, offset 0x7e1 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x115, offset 0x7e5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x116, offset 0x7e8 + {value: 0x0020, lo: 0x0f}, + {value: 0xded1, lo: 0x80, hi: 0x89}, + {value: 0x8e35, lo: 0x8a, hi: 0x8a}, + {value: 0xe011, lo: 0x8b, hi: 0x9c}, + {value: 0x8e55, lo: 0x9d, hi: 0x9d}, + {value: 0xe251, lo: 0x9e, hi: 0xa2}, + {value: 0x8e75, lo: 0xa3, hi: 0xa3}, + {value: 0xe2f1, lo: 0xa4, hi: 0xab}, + {value: 0x7f0d, lo: 0xac, hi: 0xac}, + {value: 0xe3f1, lo: 0xad, hi: 0xaf}, + {value: 0x8e95, lo: 0xb0, hi: 0xb0}, + {value: 0xe451, lo: 0xb1, hi: 0xb6}, + {value: 0x8eb5, lo: 0xb7, hi: 0xb9}, + {value: 0xe511, lo: 0xba, hi: 0xba}, + {value: 0x8f15, lo: 0xbb, hi: 0xbb}, + {value: 0xe531, lo: 0xbc, hi: 0xbf}, + // Block 0x117, offset 0x7f8 + {value: 0x0020, lo: 0x10}, + {value: 0x93b5, lo: 0x80, hi: 0x80}, + {value: 0xf0b1, lo: 0x81, hi: 0x86}, + {value: 0x93d5, lo: 0x87, hi: 0x8a}, + {value: 0xda11, lo: 0x8b, hi: 0x8b}, + {value: 0xf171, lo: 0x8c, hi: 0x96}, + {value: 0x9455, lo: 0x97, hi: 0x97}, + {value: 0xf2d1, lo: 0x98, hi: 0xa3}, + {value: 0x9475, lo: 0xa4, hi: 0xa6}, + {value: 0xf451, lo: 0xa7, hi: 0xaa}, + {value: 0x94d5, lo: 0xab, hi: 0xab}, + {value: 0xf4d1, lo: 0xac, hi: 0xac}, + {value: 0x94f5, lo: 0xad, hi: 0xad}, + {value: 0xf4f1, lo: 0xae, hi: 0xaf}, + {value: 0x9515, lo: 0xb0, hi: 0xb1}, + {value: 0xf531, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x118, offset 0x809 + {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 0x119, offset 0x80e + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x11a, offset 0x810 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x11b, offset 0x812 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 42780 bytes (41KiB); checksum: 29936AB9 diff --git a/vendor/golang.org/x/net/idna/tables13.0.0.go b/vendor/golang.org/x/net/idna/tables13.0.0.go new file mode 100644 index 0000000..2fb768e --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables13.0.0.go @@ -0,0 +1,4959 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go: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: 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" + + "\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\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\x0671\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: 30196 bytes (29.49 KiB). Checksum: e2ae95a945f04016. +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 < 126: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 126 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 128 blocks, 8192 entries, 16384 bytes +// The third block is the zero block. +var idnaValues = [8192]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: 0x0040, + 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: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 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: 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, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 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: 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, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x3308, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 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: 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: 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, + 0x6b6: 0x0018, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 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: 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, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0018, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0018, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 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: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0008, 0x90d: 0x0008, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008, + 0x912: 0x0008, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 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: 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: 0x0211, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 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: 0x0239, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, + 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: 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: 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: 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, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 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: 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: 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: 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: 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, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // 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: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x062d, 0xadb: 0x064d, 0xadc: 0x0008, 0xadd: 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, + 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: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 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: 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: 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: 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: 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, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x0796, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 0x08d2, 0xd3e: 0x08da, 0xd3f: 0x08e2, + // Block 0x35, offset 0xd40 + 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, + 0xd5e: 0x0b7e, 0xd5f: 0x0b9e, 0xd60: 0x0bbe, 0xd61: 0x0bde, 0xd62: 0x0bfe, 0xd63: 0x0c1e, + 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: 0x0019, 0xd77: 0x02e9, 0xd78: 0x03d9, 0xd79: 0x02f1, 0xd7a: 0x02f9, 0xd7b: 0x03f1, + 0xd7c: 0x0309, 0xd7d: 0x00a9, 0xd7e: 0x0311, 0xd7f: 0x00b1, + // Block 0x36, offset 0xd80 + 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, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 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: 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: 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, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x2715, 0xe41: 0x2735, 0xe42: 0x2755, 0xe43: 0x2775, 0xe44: 0x2795, 0xe45: 0x27b5, + 0xe46: 0x27d5, 0xe47: 0x27f5, 0xe48: 0x2815, 0xe49: 0x2835, 0xe4a: 0x2855, 0xe4b: 0x2875, + 0xe4c: 0x2895, 0xe4d: 0x28b5, 0xe4e: 0x28d5, 0xe4f: 0x28f5, 0xe50: 0x2915, 0xe51: 0x2935, + 0xe52: 0x2955, 0xe53: 0x2975, 0xe54: 0x2995, 0xe55: 0x29b5, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 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: 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, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29d5, 0xeb9: 0x29f5, 0xeba: 0x2a15, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b55, 0xec1: 0x2b75, 0xec2: 0x2b95, 0xec3: 0x2bb5, 0xec4: 0x2bd5, 0xec5: 0x2bf5, + 0xec6: 0x2bf5, 0xec7: 0x2bf5, 0xec8: 0x2c15, 0xec9: 0x2c15, 0xeca: 0x2c15, 0xecb: 0x2c15, + 0xecc: 0x2c35, 0xecd: 0x2c35, 0xece: 0x2c35, 0xecf: 0x2c55, 0xed0: 0x2c75, 0xed1: 0x2c75, + 0xed2: 0x2a95, 0xed3: 0x2a95, 0xed4: 0x2c75, 0xed5: 0x2c75, 0xed6: 0x2c95, 0xed7: 0x2c95, + 0xed8: 0x2c75, 0xed9: 0x2c75, 0xeda: 0x2a95, 0xedb: 0x2a95, 0xedc: 0x2c75, 0xedd: 0x2c75, + 0xede: 0x2c55, 0xedf: 0x2c55, 0xee0: 0x2cb5, 0xee1: 0x2cb5, 0xee2: 0x2cd5, 0xee3: 0x2cd5, + 0xee4: 0x0040, 0xee5: 0x2cf5, 0xee6: 0x2d15, 0xee7: 0x2d35, 0xee8: 0x2d35, 0xee9: 0x2d55, + 0xeea: 0x2d75, 0xeeb: 0x2d95, 0xeec: 0x2db5, 0xeed: 0x2dd5, 0xeee: 0x2df5, 0xeef: 0x2e15, + 0xef0: 0x2e35, 0xef1: 0x2e55, 0xef2: 0x2e55, 0xef3: 0x2e75, 0xef4: 0x2e95, 0xef5: 0x2e95, + 0xef6: 0x2eb5, 0xef7: 0x2ed5, 0xef8: 0x2e75, 0xef9: 0x2ef5, 0xefa: 0x2f15, 0xefb: 0x2ef5, + 0xefc: 0x2e75, 0xefd: 0x2f35, 0xefe: 0x2f55, 0xeff: 0x2f75, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f95, 0xf01: 0x2fb5, 0xf02: 0x2d15, 0xf03: 0x2cf5, 0xf04: 0x2fd5, 0xf05: 0x2ff5, + 0xf06: 0x3015, 0xf07: 0x3035, 0xf08: 0x3055, 0xf09: 0x3075, 0xf0a: 0x3095, 0xf0b: 0x30b5, + 0xf0c: 0x30d5, 0xf0d: 0x30f5, 0xf0e: 0x3115, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x3135, 0xf13: 0x3155, 0xf14: 0x3175, 0xf15: 0x3195, 0xf16: 0x31b5, 0xf17: 0x31d5, + 0xf18: 0x31f5, 0xf19: 0x3215, 0xf1a: 0x3235, 0xf1b: 0x3255, 0xf1c: 0x3175, 0xf1d: 0x3275, + 0xf1e: 0x3295, 0xf1f: 0x32b5, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 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: 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: 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: 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, + 0xf8c: 0x3875, 0xf8d: 0x3895, 0xf8e: 0x38b5, 0xf8f: 0x38d5, 0xf90: 0x38f5, 0xf91: 0x3915, + 0xf92: 0x3935, 0xf93: 0x3955, 0xf94: 0x3975, 0xf95: 0x3995, 0xf96: 0x39b5, 0xf97: 0x39d5, + 0xf98: 0x39f5, 0xf99: 0x3a15, 0xf9a: 0x3a35, 0xf9b: 0x3a55, 0xf9c: 0x3a75, 0xf9d: 0x3a95, + 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: 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: 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, + 0xfe4: 0x3ead, 0xfe5: 0x3ead, 0xfe6: 0x3ec5, 0xfe7: 0x3ec5, 0xfe8: 0x3edd, 0xfe9: 0x3edd, + 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: 0x0d11, + // Block 0x40, offset 0x1000 + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 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: 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: 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: 0x0008, + 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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, + 0x1ff0: 0x0040, 0x1ff1: 0x0040, 0x1ff2: 0x0040, 0x1ff3: 0x0040, 0x1ff4: 0x0040, 0x1ff5: 0x0040, + 0x1ff6: 0x0040, 0x1ff7: 0x0040, 0x1ff8: 0x0040, 0x1ff9: 0x0040, 0x1ffa: 0x0040, 0x1ffb: 0x0040, + 0x1ffc: 0x0040, 0x1ffd: 0x0040, 0x1ffe: 0x0040, 0x1fff: 0x0040, +} + +// idnaIndex: 37 blocks, 2368 entries, 4736 bytes +// Block 0 is the zero block. +var idnaIndex = [2368]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7e, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7f, 0xca: 0x80, 0xcb: 0x07, 0xcc: 0x81, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x82, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x83, 0xd6: 0x84, 0xd7: 0x85, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x86, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x87, 0xde: 0x88, 0xdf: 0x89, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1e, 0xf1: 0x1f, 0xf2: 0x1f, 0xf3: 0x21, 0xf4: 0x22, + // Block 0x4, offset 0x100 + 0x120: 0x8a, 0x121: 0x13, 0x122: 0x8b, 0x123: 0x8c, 0x124: 0x8d, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8e, + 0x130: 0x8f, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x90, 0x135: 0x21, 0x136: 0x91, 0x137: 0x92, + 0x138: 0x93, 0x139: 0x94, 0x13a: 0x22, 0x13b: 0x95, 0x13c: 0x96, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x97, + // Block 0x5, offset 0x140 + 0x140: 0x98, 0x141: 0x99, 0x142: 0x9a, 0x143: 0x9b, 0x144: 0x9c, 0x145: 0x9d, 0x146: 0x9e, 0x147: 0x9f, + 0x148: 0xa0, 0x149: 0xa1, 0x14a: 0xa2, 0x14b: 0xa3, 0x14c: 0xa4, 0x14d: 0xa5, 0x14e: 0xa6, 0x14f: 0xa7, + 0x150: 0xa8, 0x151: 0xa0, 0x152: 0xa0, 0x153: 0xa0, 0x154: 0xa0, 0x155: 0xa0, 0x156: 0xa0, 0x157: 0xa0, + 0x158: 0xa0, 0x159: 0xa9, 0x15a: 0xaa, 0x15b: 0xab, 0x15c: 0xac, 0x15d: 0xad, 0x15e: 0xae, 0x15f: 0xaf, + 0x160: 0xb0, 0x161: 0xb1, 0x162: 0xb2, 0x163: 0xb3, 0x164: 0xb4, 0x165: 0xb5, 0x166: 0xb6, 0x167: 0xb7, + 0x168: 0xb8, 0x169: 0xb9, 0x16a: 0xba, 0x16b: 0xbb, 0x16c: 0xbc, 0x16d: 0xbd, 0x16e: 0xbe, 0x16f: 0xbf, + 0x170: 0xc0, 0x171: 0xc1, 0x172: 0xc2, 0x173: 0xc3, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc4, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc5, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc6, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc7, 0x187: 0x9c, + 0x188: 0xc8, 0x189: 0xc9, 0x18a: 0x9c, 0x18b: 0x9c, 0x18c: 0xca, 0x18d: 0x9c, 0x18e: 0x9c, 0x18f: 0x9c, + 0x190: 0xcb, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9c, 0x195: 0x9c, 0x196: 0x9c, 0x197: 0x9c, + 0x198: 0x9c, 0x199: 0x9c, 0x19a: 0x9c, 0x19b: 0x9c, 0x19c: 0x9c, 0x19d: 0x9c, 0x19e: 0x9c, 0x19f: 0x9c, + 0x1a0: 0x9c, 0x1a1: 0x9c, 0x1a2: 0x9c, 0x1a3: 0x9c, 0x1a4: 0x9c, 0x1a5: 0x9c, 0x1a6: 0x9c, 0x1a7: 0x9c, + 0x1a8: 0xcc, 0x1a9: 0xcd, 0x1aa: 0x9c, 0x1ab: 0xce, 0x1ac: 0x9c, 0x1ad: 0xcf, 0x1ae: 0xd0, 0x1af: 0x9c, + 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5, + 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: 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, + 0x1e8: 0xa0, 0x1e9: 0xa0, 0x1ea: 0xa0, 0x1eb: 0xa0, 0x1ec: 0xa0, 0x1ed: 0xa0, 0x1ee: 0xa0, 0x1ef: 0xa0, + 0x1f0: 0xa0, 0x1f1: 0xa0, 0x1f2: 0xa0, 0x1f3: 0xa0, 0x1f4: 0xa0, 0x1f5: 0xa0, 0x1f6: 0xa0, 0x1f7: 0xa0, + 0x1f8: 0xa0, 0x1f9: 0xa0, 0x1fa: 0xa0, 0x1fb: 0xa0, 0x1fc: 0xa0, 0x1fd: 0xa0, 0x1fe: 0xa0, 0x1ff: 0xa0, + // Block 0x8, offset 0x200 + 0x200: 0xa0, 0x201: 0xa0, 0x202: 0xa0, 0x203: 0xa0, 0x204: 0xa0, 0x205: 0xa0, 0x206: 0xa0, 0x207: 0xa0, + 0x208: 0xa0, 0x209: 0xa0, 0x20a: 0xa0, 0x20b: 0xa0, 0x20c: 0xa0, 0x20d: 0xa0, 0x20e: 0xa0, 0x20f: 0xa0, + 0x210: 0xa0, 0x211: 0xa0, 0x212: 0xa0, 0x213: 0xa0, 0x214: 0xa0, 0x215: 0xa0, 0x216: 0xa0, 0x217: 0xa0, + 0x218: 0xa0, 0x219: 0xa0, 0x21a: 0xa0, 0x21b: 0xa0, 0x21c: 0xa0, 0x21d: 0xa0, 0x21e: 0xa0, 0x21f: 0xa0, + 0x220: 0xa0, 0x221: 0xa0, 0x222: 0xa0, 0x223: 0xa0, 0x224: 0xa0, 0x225: 0xa0, 0x226: 0xa0, 0x227: 0xa0, + 0x228: 0xa0, 0x229: 0xa0, 0x22a: 0xa0, 0x22b: 0xa0, 0x22c: 0xa0, 0x22d: 0xa0, 0x22e: 0xa0, 0x22f: 0xa0, + 0x230: 0xa0, 0x231: 0xa0, 0x232: 0xa0, 0x233: 0xa0, 0x234: 0xa0, 0x235: 0xa0, 0x236: 0xa0, 0x237: 0x9c, + 0x238: 0xa0, 0x239: 0xa0, 0x23a: 0xa0, 0x23b: 0xa0, 0x23c: 0xa0, 0x23d: 0xa0, 0x23e: 0xa0, 0x23f: 0xa0, + // Block 0x9, offset 0x240 + 0x240: 0xa0, 0x241: 0xa0, 0x242: 0xa0, 0x243: 0xa0, 0x244: 0xa0, 0x245: 0xa0, 0x246: 0xa0, 0x247: 0xa0, + 0x248: 0xa0, 0x249: 0xa0, 0x24a: 0xa0, 0x24b: 0xa0, 0x24c: 0xa0, 0x24d: 0xa0, 0x24e: 0xa0, 0x24f: 0xa0, + 0x250: 0xa0, 0x251: 0xa0, 0x252: 0xa0, 0x253: 0xa0, 0x254: 0xa0, 0x255: 0xa0, 0x256: 0xa0, 0x257: 0xa0, + 0x258: 0xa0, 0x259: 0xa0, 0x25a: 0xa0, 0x25b: 0xa0, 0x25c: 0xa0, 0x25d: 0xa0, 0x25e: 0xa0, 0x25f: 0xa0, + 0x260: 0xa0, 0x261: 0xa0, 0x262: 0xa0, 0x263: 0xa0, 0x264: 0xa0, 0x265: 0xa0, 0x266: 0xa0, 0x267: 0xa0, + 0x268: 0xa0, 0x269: 0xa0, 0x26a: 0xa0, 0x26b: 0xa0, 0x26c: 0xa0, 0x26d: 0xa0, 0x26e: 0xa0, 0x26f: 0xa0, + 0x270: 0xa0, 0x271: 0xa0, 0x272: 0xa0, 0x273: 0xa0, 0x274: 0xa0, 0x275: 0xa0, 0x276: 0xa0, 0x277: 0xa0, + 0x278: 0xa0, 0x279: 0xa0, 0x27a: 0xa0, 0x27b: 0xa0, 0x27c: 0xa0, 0x27d: 0xa0, 0x27e: 0xa0, 0x27f: 0xa0, + // Block 0xa, offset 0x280 + 0x280: 0xa0, 0x281: 0xa0, 0x282: 0xa0, 0x283: 0xa0, 0x284: 0xa0, 0x285: 0xa0, 0x286: 0xa0, 0x287: 0xa0, + 0x288: 0xa0, 0x289: 0xa0, 0x28a: 0xa0, 0x28b: 0xa0, 0x28c: 0xa0, 0x28d: 0xa0, 0x28e: 0xa0, 0x28f: 0xa0, + 0x290: 0xa0, 0x291: 0xa0, 0x292: 0xa0, 0x293: 0xa0, 0x294: 0xa0, 0x295: 0xa0, 0x296: 0xa0, 0x297: 0xa0, + 0x298: 0xa0, 0x299: 0xa0, 0x29a: 0xa0, 0x29b: 0xa0, 0x29c: 0xa0, 0x29d: 0xa0, 0x29e: 0xa0, 0x29f: 0xa0, + 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: 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: 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: 0xfb, 0x31f: 0xfc, + // Block 0xd, offset 0x340 + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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, + 0x6b8: 0xa0, 0x6b9: 0xa0, 0x6ba: 0xa0, 0x6bb: 0xa0, 0x6bc: 0xa0, 0x6bd: 0xa0, 0x6be: 0xa0, 0x6bf: 0xa0, + // Block 0x1b, offset 0x6c0 + 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: 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, + // Block 0x1c, offset 0x700 + 0x700: 0xa0, 0x701: 0xa0, 0x702: 0xa0, 0x703: 0xa0, 0x704: 0xa0, 0x705: 0xa0, 0x706: 0xa0, 0x707: 0xa0, + 0x708: 0xa0, 0x709: 0xa0, 0x70a: 0xa0, 0x70b: 0xa0, 0x70c: 0xa0, 0x70d: 0xa0, 0x70e: 0xa0, 0x70f: 0xa0, + 0x710: 0xa0, 0x711: 0xa0, 0x712: 0xa0, 0x713: 0xa0, 0x714: 0xa0, 0x715: 0xa0, 0x716: 0xa0, 0x717: 0xa0, + 0x718: 0xa0, 0x719: 0xa0, 0x71a: 0xa0, 0x71b: 0xa0, 0x71c: 0xa0, 0x71d: 0xa0, 0x71e: 0xa0, 0x71f: 0xa0, + 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: 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: 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: 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: 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, + 0x820: 0x07, 0x821: 0x07, 0x822: 0x07, 0x823: 0x07, 0x824: 0x07, 0x825: 0x07, 0x826: 0x07, 0x827: 0x07, + 0x828: 0x07, 0x829: 0x07, 0x82a: 0x18, 0x82b: 0x19, 0x82c: 0x1a, 0x82d: 0x07, 0x82e: 0x1b, 0x82f: 0x1c, + 0x830: 0x07, 0x831: 0x1d, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, + 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, + 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, + 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, + 0x860: 0x0b, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, + 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, + 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: 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, + 0x8d0: 0x0b, 0x8d1: 0x0b, 0x8d2: 0x0b, 0x8d3: 0x0b, 0x8d4: 0x0b, 0x8d5: 0x0b, 0x8d6: 0x0b, 0x8d7: 0x0b, + 0x8d8: 0x0b, 0x8d9: 0x0b, 0x8da: 0x0b, 0x8db: 0x0b, 0x8dc: 0x0b, 0x8dd: 0x0b, 0x8de: 0x0b, 0x8df: 0x0b, + 0x8e0: 0x20, 0x8e1: 0x0b, 0x8e2: 0x0b, 0x8e3: 0x0b, 0x8e4: 0x0b, 0x8e5: 0x0b, 0x8e6: 0x0b, 0x8e7: 0x0b, + 0x8e8: 0x0b, 0x8e9: 0x0b, 0x8ea: 0x0b, 0x8eb: 0x0b, 0x8ec: 0x0b, 0x8ed: 0x0b, 0x8ee: 0x0b, 0x8ef: 0x0b, + 0x8f0: 0x0b, 0x8f1: 0x0b, 0x8f2: 0x0b, 0x8f3: 0x0b, 0x8f4: 0x0b, 0x8f5: 0x0b, 0x8f6: 0x0b, 0x8f7: 0x0b, + 0x8f8: 0x0b, 0x8f9: 0x0b, 0x8fa: 0x0b, 0x8fb: 0x0b, 0x8fc: 0x0b, 0x8fd: 0x0b, 0x8fe: 0x0b, 0x8ff: 0x0b, + // Block 0x24, offset 0x900 + 0x900: 0x0b, 0x901: 0x0b, 0x902: 0x0b, 0x903: 0x0b, 0x904: 0x0b, 0x905: 0x0b, 0x906: 0x0b, 0x907: 0x0b, + 0x908: 0x0b, 0x909: 0x0b, 0x90a: 0x0b, 0x90b: 0x0b, 0x90c: 0x0b, 0x90d: 0x0b, 0x90e: 0x0b, 0x90f: 0x0b, +} + +// 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, 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: 2123 entries, 8492 bytes +var idnaSparseValues = [2123]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: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xe, offset 0x85 + {value: 0x0000, lo: 0x05}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8b + {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 0x10, offset 0x94 + {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 0x11, offset 0xa4 + {value: 0x0000, lo: 0x0d}, + {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: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb2 + {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 0x13, offset 0xbd + {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 0x14, offset 0xca + {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 0x15, offset 0xdb + {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 0x16, offset 0xe5 + {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 0x17, offset 0xec + {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: 0x8d}, + {value: 0x0040, lo: 0x8e, 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 0x18, offset 0xf9 + {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 0x19, offset 0x10a + {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 0x1a, offset 0x111 + {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 0x1b, offset 0x11c + {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 0x1c, offset 0x12b + {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 0x1d, offset 0x139 + {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 0x1e, offset 0x143 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x145 + {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 0x20, offset 0x14a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14d + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x150 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x152 + {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 0x24, offset 0x15e + {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 0x25, offset 0x169 + {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 0x26, offset 0x171 + {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 0x27, offset 0x177 + {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 0x28, offset 0x17d + {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 0x29, offset 0x182 + {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 0x2a, offset 0x187 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x18a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18e + {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 0x2d, offset 0x194 + {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 0x2e, offset 0x199 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a5 + {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 0x30, offset 0x1af + {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 0x31, offset 0x1b5 + {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 0x32, offset 0x1c6 + {value: 0x0000, lo: 0x09}, + {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: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x34, offset 0x1d3 + {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 0x35, offset 0x1db + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1de + {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 0x37, offset 0x1eb + {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 0x38, offset 0x1f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f7 + {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 0x3a, offset 0x1fe + {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 0x3b, offset 0x206 + {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 0x3c, offset 0x216 + {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 0x3d, offset 0x222 + {value: 0x0000, lo: 0x02}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0xbf}, + // Block 0x3e, offset 0x225 + {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 0x3f, offset 0x22f + {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: 0x8b}, + {value: 0x0040, lo: 0x8c, 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: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x23b + {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 0x41, offset 0x247 + {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 0x42, offset 0x253 + {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 0x43, offset 0x25b + {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 0x44, offset 0x260 + {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 0x45, offset 0x26d + {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 0x46, offset 0x27e + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x282 + {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 0x48, offset 0x28d + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x291 + {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 0x4a, offset 0x29a + {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 0x4b, offset 0x2a2 + {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 0x4c, offset 0x2a8 + {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 0x4d, offset 0x2ad + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2b0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {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: 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: 0x0939, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2be + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2c2 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0xbf}, + // Block 0x53, offset 0x2c6 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ebd, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x54, offset 0x2cc + {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 0x55, offset 0x2d4 + {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 0x56, offset 0x2db + {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 0x57, offset 0x2e6 + {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 0x58, offset 0x2f0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x59, offset 0x2f4 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xbf}, + // Block 0x5a, offset 0x2f7 + {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 0x5b, offset 0x2fd + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0f15, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5c, offset 0x301 + {value: 0x0020, lo: 0x01}, + {value: 0x0f35, lo: 0x80, hi: 0xbf}, + // Block 0x5d, offset 0x303 + {value: 0x0020, lo: 0x02}, + {value: 0x1735, lo: 0x80, hi: 0x8f}, + {value: 0x1915, lo: 0x90, hi: 0xbf}, + // Block 0x5e, offset 0x306 + {value: 0x0020, lo: 0x01}, + {value: 0x1f15, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x308 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x60, offset 0x30b + {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 0x61, offset 0x315 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x0981, lo: 0xbf, hi: 0xbf}, + // Block 0x62, offset 0x318 + {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 0x63, offset 0x327 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x64, offset 0x32b + {value: 0x0008, lo: 0x03}, + {value: 0x098a, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {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 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 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 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 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 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: 0x0479, lo: 0x85, hi: 0x85}, + {value: 0x447d, lo: 0x86, hi: 0x86}, + {value: 0xe07d, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0xe01d, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0xb4}, + {value: 0xe01d, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb7}, + {value: 0x0741, lo: 0xb8, hi: 0xb8}, + {value: 0x13f1, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x362 + {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 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 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 0x70, offset 0x37c + {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 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 0x72, offset 0x390 + {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 0x73, offset 0x398 + {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 0x74, offset 0x3a2 + {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 0x75, offset 0x3ad + {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 0x76, offset 0x3b5 + {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 0x77, offset 0x3c6 + {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 0x78, offset 0x3cf + {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 0x79, offset 0x3df + {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 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: 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 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 0x7c, offset 0x3fd + {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 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 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 0x7f, offset 0x413 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x80, offset 0x415 + {value: 0x0020, lo: 0x01}, + {value: 0x454d, lo: 0x80, hi: 0xbf}, + // 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 0x82, offset 0x41b + {value: 0x0020, lo: 0x01}, + {value: 0x552d, lo: 0x80, hi: 0xbf}, + // 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 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: 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 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 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: 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}, + {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 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 0x8a, offset 0x453 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // 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 0x8c, offset 0x45c + {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 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 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 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 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 0x91, offset 0x477 + {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 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 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 0x94, offset 0x48b + {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 0x95, offset 0x492 + {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 0x96, offset 0x499 + {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 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 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 0x99, offset 0x4a9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // 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 0x9b, offset 0x4b1 + {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 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 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 0x9e, offset 0x4c8 + {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 0x9f, offset 0x4cf + {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 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 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 0xa2, offset 0x4e0 + {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 0xa3, offset 0x4f0 + {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 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 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 0xa6, offset 0x4ff + {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 0xa7, offset 0x506 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa8, offset 0x508 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa9, offset 0x50b + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // 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 0xab, offset 0x512 + {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 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 0xad, offset 0x51f + {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 0xae, offset 0x527 + {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 0xaf, offset 0x52f + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xb0, offset 0x537 + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, 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 0xb1, offset 0x543 + {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 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 0xb3, offset 0x555 + {value: 0x0000, lo: 0x08}, + {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: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xb4, offset 0x55e + {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 0xb5, offset 0x56a + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, 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 0xb6, offset 0x571 + {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 0xb7, offset 0x57a + {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 0xb8, offset 0x585 + {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 0xb9, offset 0x58c + {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 0xba, offset 0x59b + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xbb, offset 0x5a8 + {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 0xbc, offset 0x5b5 + {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 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 0xbe, offset 0x5c2 + {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 0xbf, offset 0x5d1 + {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 0xc0, offset 0x5d9 + {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 0xc1, offset 0x5e4 + {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 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 0xc3, offset 0x5f3 + {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 0xc4, offset 0x5fb + {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 0xc5, offset 0x604 + {value: 0x0000, lo: 0x0a}, + {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: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc6, offset 0x60f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc7, offset 0x612 + {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 0xc8, offset 0x61e + {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 0xc9, offset 0x627 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // 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 0xcb, offset 0x62f + {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 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 0xcd, offset 0x63d + {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 0xce, offset 0x64a + {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 0xcf, offset 0x655 + {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 0xd0, offset 0x65e + {value: 0x0000, lo: 0x09}, + {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: 0xbf}, + // Block 0xd1, offset 0x668 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd2, offset 0x66b + {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 0xd3, offset 0x675 + {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 0xd4, offset 0x67e + {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 0xd5, offset 0x68a + {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 0xd6, offset 0x697 + {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 0xd7, offset 0x6a4 + {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 0xd8, offset 0x6b2 + {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 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 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 0xdb, offset 0x6c1 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // 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 0xdd, offset 0x6c9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // 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 0xdf, offset 0x6d1 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xe0, offset 0x6d4 + {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: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xe1, offset 0x6db + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, 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 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 0xe3, offset 0x6e6 + {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 0xe4, offset 0x6f1 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xe5, offset 0x6f4 + {value: 0x0000, lo: 0x02}, + {value: 0xe105, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xe6, offset 0x6f7 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // 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 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 0xe9, offset 0x706 + {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 0xea, offset 0x70f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xeb, offset 0x712 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0xec, offset 0x715 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xed, offset 0x718 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xee, offset 0x71b + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xef, offset 0x722 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // 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 0xf1, offset 0x72a + {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 0xf2, offset 0x734 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // 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 0xf4, offset 0x73b + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {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 0xf5, offset 0x74a + {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: 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: 0x2271, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // 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 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 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 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 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 0xfc, offset 0x771 + {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 0xfd, offset 0x77a + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // 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 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 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 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 0x102, offset 0x79d + {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 0x103, offset 0x7a6 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0x104, offset 0x7a9 + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // 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 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 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 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 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 0x10a, offset 0x7c4 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x2491, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x10b, offset 0x7c9 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0x10c, offset 0x7cc + {value: 0x0000, lo: 0x0f}, + {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: 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 0x10d, offset 0x7dc + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x10e, offset 0x7e3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // 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 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 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 0x112, offset 0x7f5 + {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 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 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 0x115, offset 0x804 + {value: 0x0000, lo: 0x08}, + {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: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x116, offset 0x80d + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // 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 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 0x119, offset 0x81d + {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 0x11a, offset 0x82b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x11b, offset 0x82e + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // 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 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 0x11e, offset 0x839 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x11f, offset 0x83c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0xbf}, + // 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 0x844 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x122, offset 0x846 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x123, offset 0x848 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// 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 0000000..5ff05fe --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables15.0.0.go @@ -0,0 +1,5144 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go: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/tables9.0.0.go b/vendor/golang.org/x/net/idna/tables9.0.0.go new file mode 100644 index 0000000..0f25e84 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables9.0.0.go @@ -0,0 +1,4486 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build !go1.10 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var mappings string = "" + // Size: 8175 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\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点\x042点" + + "\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œ\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\x03ppv\x02w" + + "c\x02mc\x02md\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 xorData string = "" + // Size: 4855 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\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\x04" + + "4\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 \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\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\x0671\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: 28600 bytes (27.93 KiB). Checksum: 95575047b5d8fff. +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 < 124: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 124 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 126 blocks, 8064 entries, 16128 bytes +// The third block is the zero block. +var idnaValues = [8064]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: 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, + // 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: 0x0179, 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, + // 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, + 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: 0x01d9, + // 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: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 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: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 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, + 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, + 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: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 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: 0x0040, + 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: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 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: 0x3008, 0x541: 0x3308, 0x542: 0x3308, 0x543: 0x3308, 0x544: 0x3308, 0x545: 0x3308, + 0x546: 0x3308, 0x547: 0x3308, 0x548: 0x3308, 0x549: 0x3008, 0x54a: 0x3008, 0x54b: 0x3008, + 0x54c: 0x3008, 0x54d: 0x3b08, 0x54e: 0x3008, 0x54f: 0x3008, 0x550: 0x0008, 0x551: 0x3308, + 0x552: 0x3308, 0x553: 0x3308, 0x554: 0x3308, 0x555: 0x3308, 0x556: 0x3308, 0x557: 0x3308, + 0x558: 0x04c9, 0x559: 0x0501, 0x55a: 0x0539, 0x55b: 0x0571, 0x55c: 0x05a9, 0x55d: 0x05e1, + 0x55e: 0x0619, 0x55f: 0x0651, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x3308, 0x563: 0x3308, + 0x564: 0x0018, 0x565: 0x0018, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0008, + 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, + 0x570: 0x0018, 0x571: 0x0008, 0x572: 0x0008, 0x573: 0x0008, 0x574: 0x0008, 0x575: 0x0008, + 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0008, 0x57b: 0x0008, + 0x57c: 0x0008, 0x57d: 0x0008, 0x57e: 0x0008, 0x57f: 0x0008, + // Block 0x16, offset 0x580 + 0x580: 0x0008, 0x581: 0x3308, 0x582: 0x3008, 0x583: 0x3008, 0x584: 0x0040, 0x585: 0x0008, + 0x586: 0x0008, 0x587: 0x0008, 0x588: 0x0008, 0x589: 0x0008, 0x58a: 0x0008, 0x58b: 0x0008, + 0x58c: 0x0008, 0x58d: 0x0040, 0x58e: 0x0040, 0x58f: 0x0008, 0x590: 0x0008, 0x591: 0x0040, + 0x592: 0x0040, 0x593: 0x0008, 0x594: 0x0008, 0x595: 0x0008, 0x596: 0x0008, 0x597: 0x0008, + 0x598: 0x0008, 0x599: 0x0008, 0x59a: 0x0008, 0x59b: 0x0008, 0x59c: 0x0008, 0x59d: 0x0008, + 0x59e: 0x0008, 0x59f: 0x0008, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x0008, 0x5a3: 0x0008, + 0x5a4: 0x0008, 0x5a5: 0x0008, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0040, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0008, 0x5b1: 0x0040, 0x5b2: 0x0008, 0x5b3: 0x0040, 0x5b4: 0x0040, 0x5b5: 0x0040, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0040, 0x5bb: 0x0040, + 0x5bc: 0x3308, 0x5bd: 0x0008, 0x5be: 0x3008, 0x5bf: 0x3008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x0040, + 0x5c6: 0x0040, 0x5c7: 0x3008, 0x5c8: 0x3008, 0x5c9: 0x0040, 0x5ca: 0x0040, 0x5cb: 0x3008, + 0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x0008, 0x5cf: 0x0040, 0x5d0: 0x0040, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0040, 0x5d4: 0x0040, 0x5d5: 0x0040, 0x5d6: 0x0040, 0x5d7: 0x3008, + 0x5d8: 0x0040, 0x5d9: 0x0040, 0x5da: 0x0040, 0x5db: 0x0040, 0x5dc: 0x0689, 0x5dd: 0x06c1, + 0x5de: 0x0040, 0x5df: 0x06f9, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308, + 0x5e4: 0x0040, 0x5e5: 0x0040, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0008, 0x5f2: 0x0018, 0x5f3: 0x0018, 0x5f4: 0x0018, 0x5f5: 0x0018, + 0x5f6: 0x0018, 0x5f7: 0x0018, 0x5f8: 0x0018, 0x5f9: 0x0018, 0x5fa: 0x0018, 0x5fb: 0x0018, + 0x5fc: 0x0040, 0x5fd: 0x0040, 0x5fe: 0x0040, 0x5ff: 0x0040, + // Block 0x18, offset 0x600 + 0x600: 0x0040, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008, + 0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0040, + 0x60c: 0x0040, 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: 0x0731, 0x634: 0x0040, 0x635: 0x0008, + 0x636: 0x0769, 0x637: 0x0040, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x3308, 0x63d: 0x0040, 0x63e: 0x3008, 0x63f: 0x3008, + // Block 0x19, offset 0x640 + 0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x0040, 0x644: 0x0040, 0x645: 0x0040, + 0x646: 0x0040, 0x647: 0x3308, 0x648: 0x3308, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3308, + 0x64c: 0x3308, 0x64d: 0x3b08, 0x64e: 0x0040, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x3308, + 0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x0040, + 0x658: 0x0040, 0x659: 0x07a1, 0x65a: 0x07d9, 0x65b: 0x0811, 0x65c: 0x0008, 0x65d: 0x0040, + 0x65e: 0x0849, 0x65f: 0x0040, 0x660: 0x0040, 0x661: 0x0040, 0x662: 0x0040, 0x663: 0x0040, + 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: 0x3308, 0x671: 0x3308, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0008, 0x675: 0x3308, + 0x676: 0x0040, 0x677: 0x0040, 0x678: 0x0040, 0x679: 0x0040, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x0040, 0x67d: 0x0040, 0x67e: 0x0040, 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: 0x0008, + 0x68c: 0x0008, 0x68d: 0x0008, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0008, + 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: 0x0008, 0x6b4: 0x0040, 0x6b5: 0x0008, + 0x6b6: 0x0008, 0x6b7: 0x0008, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x3308, 0x6bd: 0x0008, 0x6be: 0x3008, 0x6bf: 0x3008, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3308, 0x6c4: 0x3308, 0x6c5: 0x3308, + 0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x3008, 0x6ca: 0x0040, 0x6cb: 0x3008, + 0x6cc: 0x3008, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0008, 0x6d1: 0x0040, + 0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040, + 0x6d8: 0x0040, 0x6d9: 0x0040, 0x6da: 0x0040, 0x6db: 0x0040, 0x6dc: 0x0040, 0x6dd: 0x0040, + 0x6de: 0x0040, 0x6df: 0x0040, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x3308, 0x6e3: 0x3308, + 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: 0x0018, 0x6f1: 0x0018, 0x6f2: 0x0040, 0x6f3: 0x0040, 0x6f4: 0x0040, 0x6f5: 0x0040, + 0x6f6: 0x0040, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3008, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008, + 0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008, + 0x70c: 0x0008, 0x70d: 0x0040, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0040, + 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: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x0040, + 0x746: 0x0040, 0x747: 0x3008, 0x748: 0x3008, 0x749: 0x0040, 0x74a: 0x0040, 0x74b: 0x3008, + 0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0040, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x3308, 0x757: 0x3008, + 0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0881, 0x75d: 0x08b9, + 0x75e: 0x0040, 0x75f: 0x0008, 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: 0x0008, 0x772: 0x0018, 0x773: 0x0018, 0x774: 0x0018, 0x775: 0x0018, + 0x776: 0x0018, 0x777: 0x0018, 0x778: 0x0040, 0x779: 0x0040, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x0040, 0x77f: 0x0040, + // Block 0x1e, offset 0x780 + 0x780: 0x0040, 0x781: 0x0040, 0x782: 0x3308, 0x783: 0x0008, 0x784: 0x0040, 0x785: 0x0008, + 0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0040, + 0x78c: 0x0040, 0x78d: 0x0040, 0x78e: 0x0008, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040, + 0x792: 0x0008, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0040, 0x797: 0x0040, + 0x798: 0x0040, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0008, 0x79d: 0x0040, + 0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0040, 0x7a1: 0x0040, 0x7a2: 0x0040, 0x7a3: 0x0008, + 0x7a4: 0x0008, 0x7a5: 0x0040, 0x7a6: 0x0040, 0x7a7: 0x0040, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0040, 0x7ac: 0x0040, 0x7ad: 0x0040, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0008, 0x7b1: 0x0008, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0008, 0x7b5: 0x0008, + 0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x3008, 0x7bf: 0x3008, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x3308, 0x7c1: 0x3008, 0x7c2: 0x3008, 0x7c3: 0x3008, 0x7c4: 0x3008, 0x7c5: 0x0040, + 0x7c6: 0x3308, 0x7c7: 0x3308, 0x7c8: 0x3308, 0x7c9: 0x0040, 0x7ca: 0x3308, 0x7cb: 0x3308, + 0x7cc: 0x3308, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040, + 0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x0040, + 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0040, 0x7dd: 0x0040, + 0x7de: 0x0040, 0x7df: 0x0040, 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: 0x0040, 0x7f1: 0x0040, 0x7f2: 0x0040, 0x7f3: 0x0040, 0x7f4: 0x0040, 0x7f5: 0x0040, + 0x7f6: 0x0040, 0x7f7: 0x0040, 0x7f8: 0x0018, 0x7f9: 0x0018, 0x7fa: 0x0018, 0x7fb: 0x0018, + 0x7fc: 0x0018, 0x7fd: 0x0018, 0x7fe: 0x0018, 0x7ff: 0x0018, + // Block 0x20, offset 0x800 + 0x800: 0x0008, 0x801: 0x3308, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x0040, 0x805: 0x0008, + 0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0008, + 0x80c: 0x0008, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040, + 0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0008, 0x817: 0x0008, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0008, 0x81c: 0x0008, 0x81d: 0x0008, + 0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x0008, 0x823: 0x0008, + 0x824: 0x0008, 0x825: 0x0008, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0040, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0040, 0x835: 0x0008, + 0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x3308, 0x83d: 0x0008, 0x83e: 0x3008, 0x83f: 0x3308, + // Block 0x21, offset 0x840 + 0x840: 0x3008, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040, + 0x846: 0x3308, 0x847: 0x3008, 0x848: 0x3008, 0x849: 0x0040, 0x84a: 0x3008, 0x84b: 0x3008, + 0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3008, 0x856: 0x3008, 0x857: 0x0040, + 0x858: 0x0040, 0x859: 0x0040, 0x85a: 0x0040, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0040, + 0x85e: 0x0008, 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: 0x0008, 0x872: 0x0008, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040, + 0x876: 0x0040, 0x877: 0x0040, 0x878: 0x0040, 0x879: 0x0040, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x0040, 0x87d: 0x0040, 0x87e: 0x0040, 0x87f: 0x0040, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3308, 0x882: 0x3308, 0x883: 0x3308, 0x884: 0x3308, 0x885: 0x0040, + 0x886: 0x3008, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3008, 0x88d: 0x3b08, 0x88e: 0x0008, 0x88f: 0x0018, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x3008, + 0x898: 0x0018, 0x899: 0x0018, 0x89a: 0x0018, 0x89b: 0x0018, 0x89c: 0x0018, 0x89d: 0x0018, + 0x89e: 0x0018, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0018, 0x8b1: 0x0018, 0x8b2: 0x0018, 0x8b3: 0x0018, 0x8b4: 0x0018, 0x8b5: 0x0018, + 0x8b6: 0x0018, 0x8b7: 0x0018, 0x8b8: 0x0018, 0x8b9: 0x0018, 0x8ba: 0x0008, 0x8bb: 0x0008, + 0x8bc: 0x0008, 0x8bd: 0x0008, 0x8be: 0x0008, 0x8bf: 0x0008, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0040, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x0040, 0x8c4: 0x0008, 0x8c5: 0x0040, + 0x8c6: 0x0040, 0x8c7: 0x0008, 0x8c8: 0x0008, 0x8c9: 0x0040, 0x8ca: 0x0008, 0x8cb: 0x0040, + 0x8cc: 0x0040, 0x8cd: 0x0008, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0008, + 0x8d8: 0x0040, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0008, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0040, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, + 0x8e4: 0x0040, 0x8e5: 0x0008, 0x8e6: 0x0040, 0x8e7: 0x0008, 0x8e8: 0x0040, 0x8e9: 0x0040, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0040, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0008, 0x8f1: 0x3308, 0x8f2: 0x0008, 0x8f3: 0x0929, 0x8f4: 0x3308, 0x8f5: 0x3308, + 0x8f6: 0x3308, 0x8f7: 0x3308, 0x8f8: 0x3308, 0x8f9: 0x3308, 0x8fa: 0x0040, 0x8fb: 0x3308, + 0x8fc: 0x3308, 0x8fd: 0x0008, 0x8fe: 0x0040, 0x8ff: 0x0040, + // Block 0x24, offset 0x900 + 0x900: 0x0008, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x09d1, 0x904: 0x0008, 0x905: 0x0008, + 0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0040, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, + 0x90c: 0x0008, 0x90d: 0x0a09, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008, + 0x912: 0x0a41, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0a79, + 0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0ab1, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0008, 0x925: 0x0008, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0ae9, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0040, 0x92e: 0x0040, 0x92f: 0x0040, + 0x930: 0x0040, 0x931: 0x3308, 0x932: 0x3308, 0x933: 0x0b21, 0x934: 0x3308, 0x935: 0x0b59, + 0x936: 0x0b91, 0x937: 0x0bc9, 0x938: 0x0c19, 0x939: 0x0c51, 0x93a: 0x3308, 0x93b: 0x3308, + 0x93c: 0x3308, 0x93d: 0x3308, 0x93e: 0x3308, 0x93f: 0x3008, + // Block 0x25, offset 0x940 + 0x940: 0x3308, 0x941: 0x0ca1, 0x942: 0x3308, 0x943: 0x3308, 0x944: 0x3b08, 0x945: 0x0018, + 0x946: 0x3308, 0x947: 0x3308, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x3308, 0x94e: 0x3308, 0x94f: 0x3308, 0x950: 0x3308, 0x951: 0x3308, + 0x952: 0x3308, 0x953: 0x0cd9, 0x954: 0x3308, 0x955: 0x3308, 0x956: 0x3308, 0x957: 0x3308, + 0x958: 0x0040, 0x959: 0x3308, 0x95a: 0x3308, 0x95b: 0x3308, 0x95c: 0x3308, 0x95d: 0x0d11, + 0x95e: 0x3308, 0x95f: 0x3308, 0x960: 0x3308, 0x961: 0x3308, 0x962: 0x0d49, 0x963: 0x3308, + 0x964: 0x3308, 0x965: 0x3308, 0x966: 0x3308, 0x967: 0x0d81, 0x968: 0x3308, 0x969: 0x3308, + 0x96a: 0x3308, 0x96b: 0x3308, 0x96c: 0x0db9, 0x96d: 0x3308, 0x96e: 0x3308, 0x96f: 0x3308, + 0x970: 0x3308, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x3308, 0x974: 0x3308, 0x975: 0x3308, + 0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x0df1, 0x97a: 0x3308, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x0040, 0x97e: 0x0018, 0x97f: 0x0018, + // Block 0x26, offset 0x980 + 0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0008, 0x984: 0x0008, 0x985: 0x0008, + 0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x0008, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008, + 0x992: 0x0008, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0008, + 0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0008, 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: 0x0008, + 0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0039, 0x9ad: 0x0ed1, 0x9ae: 0x0ee9, 0x9af: 0x0008, + 0x9b0: 0x0ef9, 0x9b1: 0x0f09, 0x9b2: 0x0f19, 0x9b3: 0x0f31, 0x9b4: 0x0249, 0x9b5: 0x0f41, + 0x9b6: 0x0259, 0x9b7: 0x0f51, 0x9b8: 0x0359, 0x9b9: 0x0f61, 0x9ba: 0x0f71, 0x9bb: 0x0008, + 0x9bc: 0x00d9, 0x9bd: 0x0f81, 0x9be: 0x0f99, 0x9bf: 0x0269, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0fa9, 0x9c1: 0x0fb9, 0x9c2: 0x0279, 0x9c3: 0x0039, 0x9c4: 0x0fc9, 0x9c5: 0x0fe1, + 0x9c6: 0x059d, 0x9c7: 0x0ee9, 0x9c8: 0x0ef9, 0x9c9: 0x0f09, 0x9ca: 0x0ff9, 0x9cb: 0x1011, + 0x9cc: 0x1029, 0x9cd: 0x0f31, 0x9ce: 0x0008, 0x9cf: 0x0f51, 0x9d0: 0x0f61, 0x9d1: 0x1041, + 0x9d2: 0x00d9, 0x9d3: 0x1059, 0x9d4: 0x05b5, 0x9d5: 0x05b5, 0x9d6: 0x0f99, 0x9d7: 0x0fa9, + 0x9d8: 0x0fb9, 0x9d9: 0x059d, 0x9da: 0x1071, 0x9db: 0x1089, 0x9dc: 0x05cd, 0x9dd: 0x1099, + 0x9de: 0x10b1, 0x9df: 0x10c9, 0x9e0: 0x10e1, 0x9e1: 0x10f9, 0x9e2: 0x0f41, 0x9e3: 0x0269, + 0x9e4: 0x0fb9, 0x9e5: 0x1089, 0x9e6: 0x1099, 0x9e7: 0x10b1, 0x9e8: 0x1111, 0x9e9: 0x10e1, + 0x9ea: 0x10f9, 0x9eb: 0x0008, 0x9ec: 0x0008, 0x9ed: 0x0008, 0x9ee: 0x0008, 0x9ef: 0x0008, + 0x9f0: 0x0008, 0x9f1: 0x0008, 0x9f2: 0x0008, 0x9f3: 0x0008, 0x9f4: 0x0008, 0x9f5: 0x0008, + 0x9f6: 0x0008, 0x9f7: 0x0008, 0x9f8: 0x1129, 0x9f9: 0x0008, 0x9fa: 0x0008, 0x9fb: 0x0008, + 0x9fc: 0x0008, 0x9fd: 0x0008, 0x9fe: 0x0008, 0x9ff: 0x0008, + // 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: 0x1141, 0xa1c: 0x1159, 0xa1d: 0x1169, + 0xa1e: 0x1181, 0xa1f: 0x1029, 0xa20: 0x1199, 0xa21: 0x11a9, 0xa22: 0x11c1, 0xa23: 0x11d9, + 0xa24: 0x11f1, 0xa25: 0x1209, 0xa26: 0x1221, 0xa27: 0x05e5, 0xa28: 0x1239, 0xa29: 0x1251, + 0xa2a: 0xe17d, 0xa2b: 0x1269, 0xa2c: 0x1281, 0xa2d: 0x1299, 0xa2e: 0x12b1, 0xa2f: 0x12c9, + 0xa30: 0x12e1, 0xa31: 0x12f9, 0xa32: 0x1311, 0xa33: 0x1329, 0xa34: 0x1341, 0xa35: 0x1359, + 0xa36: 0x1371, 0xa37: 0x1389, 0xa38: 0x05fd, 0xa39: 0x13a1, 0xa3a: 0x13b9, 0xa3b: 0x13d1, + 0xa3c: 0x13e1, 0xa3d: 0x13f9, 0xa3e: 0x1411, 0xa3f: 0x1429, + // Block 0x29, offset 0xa40 + 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, + 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, + 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, + 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0xe00d, 0xa57: 0x0008, + 0xa58: 0xe00d, 0xa59: 0x0008, 0xa5a: 0xe00d, 0xa5b: 0x0008, 0xa5c: 0xe00d, 0xa5d: 0x0008, + 0xa5e: 0xe00d, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, + 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, + 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, + 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, + 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, + 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, + // 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, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0615, 0xa9b: 0x0635, 0xa9c: 0x0008, 0xa9d: 0x0008, + 0xa9e: 0x1441, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // Block 0x2b, offset 0xac0 + 0xac0: 0x0008, 0xac1: 0x0008, 0xac2: 0x0008, 0xac3: 0x0008, 0xac4: 0x0008, 0xac5: 0x0008, + 0xac6: 0x0040, 0xac7: 0x0040, 0xac8: 0xe045, 0xac9: 0xe045, 0xaca: 0xe045, 0xacb: 0xe045, + 0xacc: 0xe045, 0xacd: 0xe045, 0xace: 0x0040, 0xacf: 0x0040, 0xad0: 0x0008, 0xad1: 0x0008, + 0xad2: 0x0008, 0xad3: 0x0008, 0xad4: 0x0008, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0040, 0xad9: 0xe045, 0xada: 0x0040, 0xadb: 0xe045, 0xadc: 0x0040, 0xadd: 0xe045, + 0xade: 0x0040, 0xadf: 0xe045, 0xae0: 0x0008, 0xae1: 0x0008, 0xae2: 0x0008, 0xae3: 0x0008, + 0xae4: 0x0008, 0xae5: 0x0008, 0xae6: 0x0008, 0xae7: 0x0008, 0xae8: 0xe045, 0xae9: 0xe045, + 0xaea: 0xe045, 0xaeb: 0xe045, 0xaec: 0xe045, 0xaed: 0xe045, 0xaee: 0xe045, 0xaef: 0xe045, + 0xaf0: 0x0008, 0xaf1: 0x1459, 0xaf2: 0x0008, 0xaf3: 0x1471, 0xaf4: 0x0008, 0xaf5: 0x1489, + 0xaf6: 0x0008, 0xaf7: 0x14a1, 0xaf8: 0x0008, 0xaf9: 0x14b9, 0xafa: 0x0008, 0xafb: 0x14d1, + 0xafc: 0x0008, 0xafd: 0x14e9, 0xafe: 0x0040, 0xaff: 0x0040, + // Block 0x2c, offset 0xb00 + 0xb00: 0x1501, 0xb01: 0x1531, 0xb02: 0x1561, 0xb03: 0x1591, 0xb04: 0x15c1, 0xb05: 0x15f1, + 0xb06: 0x1621, 0xb07: 0x1651, 0xb08: 0x1501, 0xb09: 0x1531, 0xb0a: 0x1561, 0xb0b: 0x1591, + 0xb0c: 0x15c1, 0xb0d: 0x15f1, 0xb0e: 0x1621, 0xb0f: 0x1651, 0xb10: 0x1681, 0xb11: 0x16b1, + 0xb12: 0x16e1, 0xb13: 0x1711, 0xb14: 0x1741, 0xb15: 0x1771, 0xb16: 0x17a1, 0xb17: 0x17d1, + 0xb18: 0x1681, 0xb19: 0x16b1, 0xb1a: 0x16e1, 0xb1b: 0x1711, 0xb1c: 0x1741, 0xb1d: 0x1771, + 0xb1e: 0x17a1, 0xb1f: 0x17d1, 0xb20: 0x1801, 0xb21: 0x1831, 0xb22: 0x1861, 0xb23: 0x1891, + 0xb24: 0x18c1, 0xb25: 0x18f1, 0xb26: 0x1921, 0xb27: 0x1951, 0xb28: 0x1801, 0xb29: 0x1831, + 0xb2a: 0x1861, 0xb2b: 0x1891, 0xb2c: 0x18c1, 0xb2d: 0x18f1, 0xb2e: 0x1921, 0xb2f: 0x1951, + 0xb30: 0x0008, 0xb31: 0x0008, 0xb32: 0x1981, 0xb33: 0x19b1, 0xb34: 0x19d9, 0xb35: 0x0040, + 0xb36: 0x0008, 0xb37: 0x1a01, 0xb38: 0xe045, 0xb39: 0xe045, 0xb3a: 0x064d, 0xb3b: 0x1459, + 0xb3c: 0x19b1, 0xb3d: 0x0666, 0xb3e: 0x1a31, 0xb3f: 0x0686, + // Block 0x2d, offset 0xb40 + 0xb40: 0x06a6, 0xb41: 0x1a4a, 0xb42: 0x1a79, 0xb43: 0x1aa9, 0xb44: 0x1ad1, 0xb45: 0x0040, + 0xb46: 0x0008, 0xb47: 0x1af9, 0xb48: 0x06c5, 0xb49: 0x1471, 0xb4a: 0x06dd, 0xb4b: 0x1489, + 0xb4c: 0x1aa9, 0xb4d: 0x1b2a, 0xb4e: 0x1b5a, 0xb4f: 0x1b8a, 0xb50: 0x0008, 0xb51: 0x0008, + 0xb52: 0x0008, 0xb53: 0x1bb9, 0xb54: 0x0040, 0xb55: 0x0040, 0xb56: 0x0008, 0xb57: 0x0008, + 0xb58: 0xe045, 0xb59: 0xe045, 0xb5a: 0x06f5, 0xb5b: 0x14a1, 0xb5c: 0x0040, 0xb5d: 0x1bd2, + 0xb5e: 0x1c02, 0xb5f: 0x1c32, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x1c61, + 0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045, + 0xb6a: 0x070d, 0xb6b: 0x14d1, 0xb6c: 0xe04d, 0xb6d: 0x1c7a, 0xb6e: 0x03d2, 0xb6f: 0x1caa, + 0xb70: 0x0040, 0xb71: 0x0040, 0xb72: 0x1cb9, 0xb73: 0x1ce9, 0xb74: 0x1d11, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x1d39, 0xb78: 0x0725, 0xb79: 0x14b9, 0xb7a: 0x0515, 0xb7b: 0x14e9, + 0xb7c: 0x1ce9, 0xb7d: 0x073e, 0xb7e: 0x075e, 0xb7f: 0x0040, + // Block 0x2e, offset 0xb80 + 0xb80: 0x000a, 0xb81: 0x000a, 0xb82: 0x000a, 0xb83: 0x000a, 0xb84: 0x000a, 0xb85: 0x000a, + 0xb86: 0x000a, 0xb87: 0x000a, 0xb88: 0x000a, 0xb89: 0x000a, 0xb8a: 0x000a, 0xb8b: 0x03c0, + 0xb8c: 0x0003, 0xb8d: 0x0003, 0xb8e: 0x0340, 0xb8f: 0x0b40, 0xb90: 0x0018, 0xb91: 0xe00d, + 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x077e, + 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, + 0xb9e: 0x0018, 0xb9f: 0x0018, 0xba0: 0x0018, 0xba1: 0x0018, 0xba2: 0x0018, 0xba3: 0x0018, + 0xba4: 0x0040, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0018, 0xba8: 0x0040, 0xba9: 0x0040, + 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x000a, + 0xbb0: 0x0018, 0xbb1: 0x0018, 0xbb2: 0x0018, 0xbb3: 0x1d69, 0xbb4: 0x1da1, 0xbb5: 0x0018, + 0xbb6: 0x1df1, 0xbb7: 0x1e29, 0xbb8: 0x0018, 0xbb9: 0x0018, 0xbba: 0x0018, 0xbbb: 0x0018, + 0xbbc: 0x1e7a, 0xbbd: 0x0018, 0xbbe: 0x079e, 0xbbf: 0x0018, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x0018, 0xbc1: 0x0018, 0xbc2: 0x0018, 0xbc3: 0x0018, 0xbc4: 0x0018, 0xbc5: 0x0018, + 0xbc6: 0x0018, 0xbc7: 0x1e92, 0xbc8: 0x1eaa, 0xbc9: 0x1ec2, 0xbca: 0x0018, 0xbcb: 0x0018, + 0xbcc: 0x0018, 0xbcd: 0x0018, 0xbce: 0x0018, 0xbcf: 0x0018, 0xbd0: 0x0018, 0xbd1: 0x0018, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x1ed9, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 0xbde: 0x0018, 0xbdf: 0x000a, 0xbe0: 0x03c0, 0xbe1: 0x0340, 0xbe2: 0x0340, 0xbe3: 0x0340, + 0xbe4: 0x03c0, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0040, 0xbe8: 0x0040, 0xbe9: 0x0040, + 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x0340, + 0xbf0: 0x1f41, 0xbf1: 0x0f41, 0xbf2: 0x0040, 0xbf3: 0x0040, 0xbf4: 0x1f51, 0xbf5: 0x1f61, + 0xbf6: 0x1f71, 0xbf7: 0x1f81, 0xbf8: 0x1f91, 0xbf9: 0x1fa1, 0xbfa: 0x1fb2, 0xbfb: 0x07bd, + 0xbfc: 0x1fc2, 0xbfd: 0x1fd2, 0xbfe: 0x1fe2, 0xbff: 0x0f71, + // Block 0x30, offset 0xc00 + 0xc00: 0x1f41, 0xc01: 0x00c9, 0xc02: 0x0069, 0xc03: 0x0079, 0xc04: 0x1f51, 0xc05: 0x1f61, + 0xc06: 0x1f71, 0xc07: 0x1f81, 0xc08: 0x1f91, 0xc09: 0x1fa1, 0xc0a: 0x1fb2, 0xc0b: 0x07d5, + 0xc0c: 0x1fc2, 0xc0d: 0x1fd2, 0xc0e: 0x1fe2, 0xc0f: 0x0040, 0xc10: 0x0039, 0xc11: 0x0f09, + 0xc12: 0x00d9, 0xc13: 0x0369, 0xc14: 0x0ff9, 0xc15: 0x0249, 0xc16: 0x0f51, 0xc17: 0x0359, + 0xc18: 0x0f61, 0xc19: 0x0f71, 0xc1a: 0x0f99, 0xc1b: 0x01d9, 0xc1c: 0x0fa9, 0xc1d: 0x0040, + 0xc1e: 0x0040, 0xc1f: 0x0040, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018, + 0xc24: 0x0018, 0xc25: 0x0018, 0xc26: 0x0018, 0xc27: 0x0018, 0xc28: 0x1ff1, 0xc29: 0x0018, + 0xc2a: 0x0018, 0xc2b: 0x0018, 0xc2c: 0x0018, 0xc2d: 0x0018, 0xc2e: 0x0018, 0xc2f: 0x0018, + 0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0018, 0xc34: 0x0018, 0xc35: 0x0018, + 0xc36: 0x0018, 0xc37: 0x0018, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018, + 0xc3c: 0x0018, 0xc3d: 0x0018, 0xc3e: 0x0018, 0xc3f: 0x0040, + // Block 0x31, offset 0xc40 + 0xc40: 0x07ee, 0xc41: 0x080e, 0xc42: 0x1159, 0xc43: 0x082d, 0xc44: 0x0018, 0xc45: 0x084e, + 0xc46: 0x086e, 0xc47: 0x1011, 0xc48: 0x0018, 0xc49: 0x088d, 0xc4a: 0x0f31, 0xc4b: 0x0249, + 0xc4c: 0x0249, 0xc4d: 0x0249, 0xc4e: 0x0249, 0xc4f: 0x2009, 0xc50: 0x0f41, 0xc51: 0x0f41, + 0xc52: 0x0359, 0xc53: 0x0359, 0xc54: 0x0018, 0xc55: 0x0f71, 0xc56: 0x2021, 0xc57: 0x0018, + 0xc58: 0x0018, 0xc59: 0x0f99, 0xc5a: 0x2039, 0xc5b: 0x0269, 0xc5c: 0x0269, 0xc5d: 0x0269, + 0xc5e: 0x0018, 0xc5f: 0x0018, 0xc60: 0x2049, 0xc61: 0x08ad, 0xc62: 0x2061, 0xc63: 0x0018, + 0xc64: 0x13d1, 0xc65: 0x0018, 0xc66: 0x2079, 0xc67: 0x0018, 0xc68: 0x13d1, 0xc69: 0x0018, + 0xc6a: 0x0f51, 0xc6b: 0x2091, 0xc6c: 0x0ee9, 0xc6d: 0x1159, 0xc6e: 0x0018, 0xc6f: 0x0f09, + 0xc70: 0x0f09, 0xc71: 0x1199, 0xc72: 0x0040, 0xc73: 0x0f61, 0xc74: 0x00d9, 0xc75: 0x20a9, + 0xc76: 0x20c1, 0xc77: 0x20d9, 0xc78: 0x20f1, 0xc79: 0x0f41, 0xc7a: 0x0018, 0xc7b: 0x08cd, + 0xc7c: 0x2109, 0xc7d: 0x10b1, 0xc7e: 0x10b1, 0xc7f: 0x2109, + // Block 0x32, offset 0xc80 + 0xc80: 0x08ed, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0ef9, + 0xc86: 0x0ef9, 0xc87: 0x0f09, 0xc88: 0x0f41, 0xc89: 0x0259, 0xc8a: 0x0018, 0xc8b: 0x0018, + 0xc8c: 0x0018, 0xc8d: 0x0018, 0xc8e: 0x0008, 0xc8f: 0x0018, 0xc90: 0x2121, 0xc91: 0x2151, + 0xc92: 0x2181, 0xc93: 0x21b9, 0xc94: 0x21e9, 0xc95: 0x2219, 0xc96: 0x2249, 0xc97: 0x2279, + 0xc98: 0x22a9, 0xc99: 0x22d9, 0xc9a: 0x2309, 0xc9b: 0x2339, 0xc9c: 0x2369, 0xc9d: 0x2399, + 0xc9e: 0x23c9, 0xc9f: 0x23f9, 0xca0: 0x0f41, 0xca1: 0x2421, 0xca2: 0x0905, 0xca3: 0x2439, + 0xca4: 0x1089, 0xca5: 0x2451, 0xca6: 0x0925, 0xca7: 0x2469, 0xca8: 0x2491, 0xca9: 0x0369, + 0xcaa: 0x24a9, 0xcab: 0x0945, 0xcac: 0x0359, 0xcad: 0x1159, 0xcae: 0x0ef9, 0xcaf: 0x0f61, + 0xcb0: 0x0f41, 0xcb1: 0x2421, 0xcb2: 0x0965, 0xcb3: 0x2439, 0xcb4: 0x1089, 0xcb5: 0x2451, + 0xcb6: 0x0985, 0xcb7: 0x2469, 0xcb8: 0x2491, 0xcb9: 0x0369, 0xcba: 0x24a9, 0xcbb: 0x09a5, + 0xcbc: 0x0359, 0xcbd: 0x1159, 0xcbe: 0x0ef9, 0xcbf: 0x0f61, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0018, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0018, + 0xcc6: 0x0018, 0xcc7: 0x0018, 0xcc8: 0x0018, 0xcc9: 0x0018, 0xcca: 0x0018, 0xccb: 0x0040, + 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, + 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, + 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0040, 0xcdd: 0x0040, + 0xcde: 0x0040, 0xcdf: 0x0040, 0xce0: 0x00c9, 0xce1: 0x0069, 0xce2: 0x0079, 0xce3: 0x1f51, + 0xce4: 0x1f61, 0xce5: 0x1f71, 0xce6: 0x1f81, 0xce7: 0x1f91, 0xce8: 0x1fa1, 0xce9: 0x2601, + 0xcea: 0x2619, 0xceb: 0x2631, 0xcec: 0x2649, 0xced: 0x2661, 0xcee: 0x2679, 0xcef: 0x2691, + 0xcf0: 0x26a9, 0xcf1: 0x26c1, 0xcf2: 0x26d9, 0xcf3: 0x26f1, 0xcf4: 0x0a06, 0xcf5: 0x0a26, + 0xcf6: 0x0a46, 0xcf7: 0x0a66, 0xcf8: 0x0a86, 0xcf9: 0x0aa6, 0xcfa: 0x0ac6, 0xcfb: 0x0ae6, + 0xcfc: 0x0b06, 0xcfd: 0x270a, 0xcfe: 0x2732, 0xcff: 0x275a, + // Block 0x34, offset 0xd00 + 0xd00: 0x2782, 0xd01: 0x27aa, 0xd02: 0x27d2, 0xd03: 0x27fa, 0xd04: 0x2822, 0xd05: 0x284a, + 0xd06: 0x2872, 0xd07: 0x289a, 0xd08: 0x0040, 0xd09: 0x0040, 0xd0a: 0x0040, 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: 0x0b26, 0xd1d: 0x0b46, + 0xd1e: 0x0b66, 0xd1f: 0x0b86, 0xd20: 0x0ba6, 0xd21: 0x0bc6, 0xd22: 0x0be6, 0xd23: 0x0c06, + 0xd24: 0x0c26, 0xd25: 0x0c46, 0xd26: 0x0c66, 0xd27: 0x0c86, 0xd28: 0x0ca6, 0xd29: 0x0cc6, + 0xd2a: 0x0ce6, 0xd2b: 0x0d06, 0xd2c: 0x0d26, 0xd2d: 0x0d46, 0xd2e: 0x0d66, 0xd2f: 0x0d86, + 0xd30: 0x0da6, 0xd31: 0x0dc6, 0xd32: 0x0de6, 0xd33: 0x0e06, 0xd34: 0x0e26, 0xd35: 0x0e46, + 0xd36: 0x0039, 0xd37: 0x0ee9, 0xd38: 0x1159, 0xd39: 0x0ef9, 0xd3a: 0x0f09, 0xd3b: 0x1199, + 0xd3c: 0x0f31, 0xd3d: 0x0249, 0xd3e: 0x0f41, 0xd3f: 0x0259, + // Block 0x35, offset 0xd40 + 0xd40: 0x0f51, 0xd41: 0x0359, 0xd42: 0x0f61, 0xd43: 0x0f71, 0xd44: 0x00d9, 0xd45: 0x0f99, + 0xd46: 0x2039, 0xd47: 0x0269, 0xd48: 0x01d9, 0xd49: 0x0fa9, 0xd4a: 0x0fb9, 0xd4b: 0x1089, + 0xd4c: 0x0279, 0xd4d: 0x0369, 0xd4e: 0x0289, 0xd4f: 0x13d1, 0xd50: 0x0039, 0xd51: 0x0ee9, + 0xd52: 0x1159, 0xd53: 0x0ef9, 0xd54: 0x0f09, 0xd55: 0x1199, 0xd56: 0x0f31, 0xd57: 0x0249, + 0xd58: 0x0f41, 0xd59: 0x0259, 0xd5a: 0x0f51, 0xd5b: 0x0359, 0xd5c: 0x0f61, 0xd5d: 0x0f71, + 0xd5e: 0x00d9, 0xd5f: 0x0f99, 0xd60: 0x2039, 0xd61: 0x0269, 0xd62: 0x01d9, 0xd63: 0x0fa9, + 0xd64: 0x0fb9, 0xd65: 0x1089, 0xd66: 0x0279, 0xd67: 0x0369, 0xd68: 0x0289, 0xd69: 0x13d1, + 0xd6a: 0x1f41, 0xd6b: 0x0018, 0xd6c: 0x0018, 0xd6d: 0x0018, 0xd6e: 0x0018, 0xd6f: 0x0018, + 0xd70: 0x0018, 0xd71: 0x0018, 0xd72: 0x0018, 0xd73: 0x0018, 0xd74: 0x0018, 0xd75: 0x0018, + 0xd76: 0x0018, 0xd77: 0x0018, 0xd78: 0x0018, 0xd79: 0x0018, 0xd7a: 0x0018, 0xd7b: 0x0018, + 0xd7c: 0x0018, 0xd7d: 0x0018, 0xd7e: 0x0018, 0xd7f: 0x0018, + // Block 0x36, offset 0xd80 + 0xd80: 0x0008, 0xd81: 0x0008, 0xd82: 0x0008, 0xd83: 0x0008, 0xd84: 0x0008, 0xd85: 0x0008, + 0xd86: 0x0008, 0xd87: 0x0008, 0xd88: 0x0008, 0xd89: 0x0008, 0xd8a: 0x0008, 0xd8b: 0x0008, + 0xd8c: 0x0008, 0xd8d: 0x0008, 0xd8e: 0x0008, 0xd8f: 0x0008, 0xd90: 0x0008, 0xd91: 0x0008, + 0xd92: 0x0008, 0xd93: 0x0008, 0xd94: 0x0008, 0xd95: 0x0008, 0xd96: 0x0008, 0xd97: 0x0008, + 0xd98: 0x0008, 0xd99: 0x0008, 0xd9a: 0x0008, 0xd9b: 0x0008, 0xd9c: 0x0008, 0xd9d: 0x0008, + 0xd9e: 0x0008, 0xd9f: 0x0040, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0x2971, 0xda3: 0x0ebd, + 0xda4: 0x2989, 0xda5: 0x0008, 0xda6: 0x0008, 0xda7: 0xe07d, 0xda8: 0x0008, 0xda9: 0xe01d, + 0xdaa: 0x0008, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0x0fe1, 0xdae: 0x1281, 0xdaf: 0x0fc9, + 0xdb0: 0x1141, 0xdb1: 0x0008, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0008, 0xdb5: 0xe01d, + 0xdb6: 0x0008, 0xdb7: 0x0008, 0xdb8: 0x0008, 0xdb9: 0x0008, 0xdba: 0x0008, 0xdbb: 0x0008, + 0xdbc: 0x0259, 0xdbd: 0x1089, 0xdbe: 0x29a1, 0xdbf: 0x29b9, + // Block 0x37, offset 0xdc0 + 0xdc0: 0xe00d, 0xdc1: 0x0008, 0xdc2: 0xe00d, 0xdc3: 0x0008, 0xdc4: 0xe00d, 0xdc5: 0x0008, + 0xdc6: 0xe00d, 0xdc7: 0x0008, 0xdc8: 0xe00d, 0xdc9: 0x0008, 0xdca: 0xe00d, 0xdcb: 0x0008, + 0xdcc: 0xe00d, 0xdcd: 0x0008, 0xdce: 0xe00d, 0xdcf: 0x0008, 0xdd0: 0xe00d, 0xdd1: 0x0008, + 0xdd2: 0xe00d, 0xdd3: 0x0008, 0xdd4: 0xe00d, 0xdd5: 0x0008, 0xdd6: 0xe00d, 0xdd7: 0x0008, + 0xdd8: 0xe00d, 0xdd9: 0x0008, 0xdda: 0xe00d, 0xddb: 0x0008, 0xddc: 0xe00d, 0xddd: 0x0008, + 0xdde: 0xe00d, 0xddf: 0x0008, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0xe00d, 0xde3: 0x0008, + 0xde4: 0x0008, 0xde5: 0x0018, 0xde6: 0x0018, 0xde7: 0x0018, 0xde8: 0x0018, 0xde9: 0x0018, + 0xdea: 0x0018, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0xe01d, 0xdee: 0x0008, 0xdef: 0x3308, + 0xdf0: 0x3308, 0xdf1: 0x3308, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0040, 0xdf5: 0x0040, + 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018, + 0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018, + // Block 0x38, offset 0xe00 + 0xe00: 0x26fd, 0xe01: 0x271d, 0xe02: 0x273d, 0xe03: 0x275d, 0xe04: 0x277d, 0xe05: 0x279d, + 0xe06: 0x27bd, 0xe07: 0x27dd, 0xe08: 0x27fd, 0xe09: 0x281d, 0xe0a: 0x283d, 0xe0b: 0x285d, + 0xe0c: 0x287d, 0xe0d: 0x289d, 0xe0e: 0x28bd, 0xe0f: 0x28dd, 0xe10: 0x28fd, 0xe11: 0x291d, + 0xe12: 0x293d, 0xe13: 0x295d, 0xe14: 0x297d, 0xe15: 0x299d, 0xe16: 0x0040, 0xe17: 0x0040, + 0xe18: 0x0040, 0xe19: 0x0040, 0xe1a: 0x0040, 0xe1b: 0x0040, 0xe1c: 0x0040, 0xe1d: 0x0040, + 0xe1e: 0x0040, 0xe1f: 0x0040, 0xe20: 0x0040, 0xe21: 0x0040, 0xe22: 0x0040, 0xe23: 0x0040, + 0xe24: 0x0040, 0xe25: 0x0040, 0xe26: 0x0040, 0xe27: 0x0040, 0xe28: 0x0040, 0xe29: 0x0040, + 0xe2a: 0x0040, 0xe2b: 0x0040, 0xe2c: 0x0040, 0xe2d: 0x0040, 0xe2e: 0x0040, 0xe2f: 0x0040, + 0xe30: 0x0040, 0xe31: 0x0040, 0xe32: 0x0040, 0xe33: 0x0040, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0040, 0xe3a: 0x0040, 0xe3b: 0x0040, + 0xe3c: 0x0040, 0xe3d: 0x0040, 0xe3e: 0x0040, 0xe3f: 0x0040, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, 0xe41: 0x0018, 0xe42: 0x29d1, 0xe43: 0x0018, 0xe44: 0x0018, 0xe45: 0x0008, + 0xe46: 0x0008, 0xe47: 0x0008, 0xe48: 0x0018, 0xe49: 0x0018, 0xe4a: 0x0018, 0xe4b: 0x0018, + 0xe4c: 0x0018, 0xe4d: 0x0018, 0xe4e: 0x0018, 0xe4f: 0x0018, 0xe50: 0x0018, 0xe51: 0x0018, + 0xe52: 0x0018, 0xe53: 0x0018, 0xe54: 0x0018, 0xe55: 0x0018, 0xe56: 0x0018, 0xe57: 0x0018, + 0xe58: 0x0018, 0xe59: 0x0018, 0xe5a: 0x0018, 0xe5b: 0x0018, 0xe5c: 0x0018, 0xe5d: 0x0018, + 0xe5e: 0x0018, 0xe5f: 0x0018, 0xe60: 0x0018, 0xe61: 0x0018, 0xe62: 0x0018, 0xe63: 0x0018, + 0xe64: 0x0018, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018, + 0xe6a: 0x3308, 0xe6b: 0x3308, 0xe6c: 0x3308, 0xe6d: 0x3308, 0xe6e: 0x3018, 0xe6f: 0x3018, + 0xe70: 0x0018, 0xe71: 0x0018, 0xe72: 0x0018, 0xe73: 0x0018, 0xe74: 0x0018, 0xe75: 0x0018, + 0xe76: 0xe125, 0xe77: 0x0018, 0xe78: 0x29bd, 0xe79: 0x29dd, 0xe7a: 0x29fd, 0xe7b: 0x0018, + 0xe7c: 0x0008, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2b3d, 0xe81: 0x2b5d, 0xe82: 0x2b7d, 0xe83: 0x2b9d, 0xe84: 0x2bbd, 0xe85: 0x2bdd, + 0xe86: 0x2bdd, 0xe87: 0x2bdd, 0xe88: 0x2bfd, 0xe89: 0x2bfd, 0xe8a: 0x2bfd, 0xe8b: 0x2bfd, + 0xe8c: 0x2c1d, 0xe8d: 0x2c1d, 0xe8e: 0x2c1d, 0xe8f: 0x2c3d, 0xe90: 0x2c5d, 0xe91: 0x2c5d, + 0xe92: 0x2a7d, 0xe93: 0x2a7d, 0xe94: 0x2c5d, 0xe95: 0x2c5d, 0xe96: 0x2c7d, 0xe97: 0x2c7d, + 0xe98: 0x2c5d, 0xe99: 0x2c5d, 0xe9a: 0x2a7d, 0xe9b: 0x2a7d, 0xe9c: 0x2c5d, 0xe9d: 0x2c5d, + 0xe9e: 0x2c3d, 0xe9f: 0x2c3d, 0xea0: 0x2c9d, 0xea1: 0x2c9d, 0xea2: 0x2cbd, 0xea3: 0x2cbd, + 0xea4: 0x0040, 0xea5: 0x2cdd, 0xea6: 0x2cfd, 0xea7: 0x2d1d, 0xea8: 0x2d1d, 0xea9: 0x2d3d, + 0xeaa: 0x2d5d, 0xeab: 0x2d7d, 0xeac: 0x2d9d, 0xead: 0x2dbd, 0xeae: 0x2ddd, 0xeaf: 0x2dfd, + 0xeb0: 0x2e1d, 0xeb1: 0x2e3d, 0xeb2: 0x2e3d, 0xeb3: 0x2e5d, 0xeb4: 0x2e7d, 0xeb5: 0x2e7d, + 0xeb6: 0x2e9d, 0xeb7: 0x2ebd, 0xeb8: 0x2e5d, 0xeb9: 0x2edd, 0xeba: 0x2efd, 0xebb: 0x2edd, + 0xebc: 0x2e5d, 0xebd: 0x2f1d, 0xebe: 0x2f3d, 0xebf: 0x2f5d, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2f7d, 0xec1: 0x2f9d, 0xec2: 0x2cfd, 0xec3: 0x2cdd, 0xec4: 0x2fbd, 0xec5: 0x2fdd, + 0xec6: 0x2ffd, 0xec7: 0x301d, 0xec8: 0x303d, 0xec9: 0x305d, 0xeca: 0x307d, 0xecb: 0x309d, + 0xecc: 0x30bd, 0xecd: 0x30dd, 0xece: 0x30fd, 0xecf: 0x0040, 0xed0: 0x0018, 0xed1: 0x0018, + 0xed2: 0x311d, 0xed3: 0x313d, 0xed4: 0x315d, 0xed5: 0x317d, 0xed6: 0x319d, 0xed7: 0x31bd, + 0xed8: 0x31dd, 0xed9: 0x31fd, 0xeda: 0x321d, 0xedb: 0x323d, 0xedc: 0x315d, 0xedd: 0x325d, + 0xede: 0x327d, 0xedf: 0x329d, 0xee0: 0x0008, 0xee1: 0x0008, 0xee2: 0x0008, 0xee3: 0x0008, + 0xee4: 0x0008, 0xee5: 0x0008, 0xee6: 0x0008, 0xee7: 0x0008, 0xee8: 0x0008, 0xee9: 0x0008, + 0xeea: 0x0008, 0xeeb: 0x0008, 0xeec: 0x0008, 0xeed: 0x0008, 0xeee: 0x0008, 0xeef: 0x0008, + 0xef0: 0x0008, 0xef1: 0x0008, 0xef2: 0x0008, 0xef3: 0x0008, 0xef4: 0x0008, 0xef5: 0x0008, + 0xef6: 0x0008, 0xef7: 0x0008, 0xef8: 0x0008, 0xef9: 0x0008, 0xefa: 0x0008, 0xefb: 0x0040, + 0xefc: 0x0040, 0xefd: 0x0040, 0xefe: 0x0040, 0xeff: 0x0040, + // Block 0x3c, offset 0xf00 + 0xf00: 0x36a2, 0xf01: 0x36d2, 0xf02: 0x3702, 0xf03: 0x3732, 0xf04: 0x32bd, 0xf05: 0x32dd, + 0xf06: 0x32fd, 0xf07: 0x331d, 0xf08: 0x0018, 0xf09: 0x0018, 0xf0a: 0x0018, 0xf0b: 0x0018, + 0xf0c: 0x0018, 0xf0d: 0x0018, 0xf0e: 0x0018, 0xf0f: 0x0018, 0xf10: 0x333d, 0xf11: 0x3761, + 0xf12: 0x3779, 0xf13: 0x3791, 0xf14: 0x37a9, 0xf15: 0x37c1, 0xf16: 0x37d9, 0xf17: 0x37f1, + 0xf18: 0x3809, 0xf19: 0x3821, 0xf1a: 0x3839, 0xf1b: 0x3851, 0xf1c: 0x3869, 0xf1d: 0x3881, + 0xf1e: 0x3899, 0xf1f: 0x38b1, 0xf20: 0x335d, 0xf21: 0x337d, 0xf22: 0x339d, 0xf23: 0x33bd, + 0xf24: 0x33dd, 0xf25: 0x33dd, 0xf26: 0x33fd, 0xf27: 0x341d, 0xf28: 0x343d, 0xf29: 0x345d, + 0xf2a: 0x347d, 0xf2b: 0x349d, 0xf2c: 0x34bd, 0xf2d: 0x34dd, 0xf2e: 0x34fd, 0xf2f: 0x351d, + 0xf30: 0x353d, 0xf31: 0x355d, 0xf32: 0x357d, 0xf33: 0x359d, 0xf34: 0x35bd, 0xf35: 0x35dd, + 0xf36: 0x35fd, 0xf37: 0x361d, 0xf38: 0x363d, 0xf39: 0x365d, 0xf3a: 0x367d, 0xf3b: 0x369d, + 0xf3c: 0x38c9, 0xf3d: 0x3901, 0xf3e: 0x36bd, 0xf3f: 0x0018, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36dd, 0xf41: 0x36fd, 0xf42: 0x371d, 0xf43: 0x373d, 0xf44: 0x375d, 0xf45: 0x377d, + 0xf46: 0x379d, 0xf47: 0x37bd, 0xf48: 0x37dd, 0xf49: 0x37fd, 0xf4a: 0x381d, 0xf4b: 0x383d, + 0xf4c: 0x385d, 0xf4d: 0x387d, 0xf4e: 0x389d, 0xf4f: 0x38bd, 0xf50: 0x38dd, 0xf51: 0x38fd, + 0xf52: 0x391d, 0xf53: 0x393d, 0xf54: 0x395d, 0xf55: 0x397d, 0xf56: 0x399d, 0xf57: 0x39bd, + 0xf58: 0x39dd, 0xf59: 0x39fd, 0xf5a: 0x3a1d, 0xf5b: 0x3a3d, 0xf5c: 0x3a5d, 0xf5d: 0x3a7d, + 0xf5e: 0x3a9d, 0xf5f: 0x3abd, 0xf60: 0x3add, 0xf61: 0x3afd, 0xf62: 0x3b1d, 0xf63: 0x3b3d, + 0xf64: 0x3b5d, 0xf65: 0x3b7d, 0xf66: 0x127d, 0xf67: 0x3b9d, 0xf68: 0x3bbd, 0xf69: 0x3bdd, + 0xf6a: 0x3bfd, 0xf6b: 0x3c1d, 0xf6c: 0x3c3d, 0xf6d: 0x3c5d, 0xf6e: 0x239d, 0xf6f: 0x3c7d, + 0xf70: 0x3c9d, 0xf71: 0x3939, 0xf72: 0x3951, 0xf73: 0x3969, 0xf74: 0x3981, 0xf75: 0x3999, + 0xf76: 0x39b1, 0xf77: 0x39c9, 0xf78: 0x39e1, 0xf79: 0x39f9, 0xf7a: 0x3a11, 0xf7b: 0x3a29, + 0xf7c: 0x3a41, 0xf7d: 0x3a59, 0xf7e: 0x3a71, 0xf7f: 0x3a89, + // Block 0x3e, offset 0xf80 + 0xf80: 0x3aa1, 0xf81: 0x3ac9, 0xf82: 0x3af1, 0xf83: 0x3b19, 0xf84: 0x3b41, 0xf85: 0x3b69, + 0xf86: 0x3b91, 0xf87: 0x3bb9, 0xf88: 0x3be1, 0xf89: 0x3c09, 0xf8a: 0x3c39, 0xf8b: 0x3c69, + 0xf8c: 0x3c99, 0xf8d: 0x3cbd, 0xf8e: 0x3cb1, 0xf8f: 0x3cdd, 0xf90: 0x3cfd, 0xf91: 0x3d15, + 0xf92: 0x3d2d, 0xf93: 0x3d45, 0xf94: 0x3d5d, 0xf95: 0x3d5d, 0xf96: 0x3d45, 0xf97: 0x3d75, + 0xf98: 0x07bd, 0xf99: 0x3d8d, 0xf9a: 0x3da5, 0xf9b: 0x3dbd, 0xf9c: 0x3dd5, 0xf9d: 0x3ded, + 0xf9e: 0x3e05, 0xf9f: 0x3e1d, 0xfa0: 0x3e35, 0xfa1: 0x3e4d, 0xfa2: 0x3e65, 0xfa3: 0x3e7d, + 0xfa4: 0x3e95, 0xfa5: 0x3e95, 0xfa6: 0x3ead, 0xfa7: 0x3ead, 0xfa8: 0x3ec5, 0xfa9: 0x3ec5, + 0xfaa: 0x3edd, 0xfab: 0x3ef5, 0xfac: 0x3f0d, 0xfad: 0x3f25, 0xfae: 0x3f3d, 0xfaf: 0x3f3d, + 0xfb0: 0x3f55, 0xfb1: 0x3f55, 0xfb2: 0x3f55, 0xfb3: 0x3f6d, 0xfb4: 0x3f85, 0xfb5: 0x3f9d, + 0xfb6: 0x3fb5, 0xfb7: 0x3f9d, 0xfb8: 0x3fcd, 0xfb9: 0x3fe5, 0xfba: 0x3f6d, 0xfbb: 0x3ffd, + 0xfbc: 0x4015, 0xfbd: 0x4015, 0xfbe: 0x4015, 0xfbf: 0x0040, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x3cc9, 0xfc1: 0x3d31, 0xfc2: 0x3d99, 0xfc3: 0x3e01, 0xfc4: 0x3e51, 0xfc5: 0x3eb9, + 0xfc6: 0x3f09, 0xfc7: 0x3f59, 0xfc8: 0x3fd9, 0xfc9: 0x4041, 0xfca: 0x4091, 0xfcb: 0x40e1, + 0xfcc: 0x4131, 0xfcd: 0x4199, 0xfce: 0x4201, 0xfcf: 0x4251, 0xfd0: 0x42a1, 0xfd1: 0x42d9, + 0xfd2: 0x4329, 0xfd3: 0x4391, 0xfd4: 0x43f9, 0xfd5: 0x4431, 0xfd6: 0x44b1, 0xfd7: 0x4549, + 0xfd8: 0x45c9, 0xfd9: 0x4619, 0xfda: 0x4699, 0xfdb: 0x4719, 0xfdc: 0x4781, 0xfdd: 0x47d1, + 0xfde: 0x4821, 0xfdf: 0x4871, 0xfe0: 0x48d9, 0xfe1: 0x4959, 0xfe2: 0x49c1, 0xfe3: 0x4a11, + 0xfe4: 0x4a61, 0xfe5: 0x4ab1, 0xfe6: 0x4ae9, 0xfe7: 0x4b21, 0xfe8: 0x4b59, 0xfe9: 0x4b91, + 0xfea: 0x4be1, 0xfeb: 0x4c31, 0xfec: 0x4cb1, 0xfed: 0x4d01, 0xfee: 0x4d69, 0xfef: 0x4de9, + 0xff0: 0x4e39, 0xff1: 0x4e71, 0xff2: 0x4ea9, 0xff3: 0x4f29, 0xff4: 0x4f91, 0xff5: 0x5011, + 0xff6: 0x5061, 0xff7: 0x50e1, 0xff8: 0x5119, 0xff9: 0x5169, 0xffa: 0x51b9, 0xffb: 0x5209, + 0xffc: 0x5259, 0xffd: 0x52a9, 0xffe: 0x5311, 0xfff: 0x5361, + // Block 0x40, offset 0x1000 + 0x1000: 0x5399, 0x1001: 0x53e9, 0x1002: 0x5439, 0x1003: 0x5489, 0x1004: 0x54f1, 0x1005: 0x5541, + 0x1006: 0x5591, 0x1007: 0x55e1, 0x1008: 0x5661, 0x1009: 0x56c9, 0x100a: 0x5701, 0x100b: 0x5781, + 0x100c: 0x57b9, 0x100d: 0x5821, 0x100e: 0x5889, 0x100f: 0x58d9, 0x1010: 0x5929, 0x1011: 0x5979, + 0x1012: 0x59e1, 0x1013: 0x5a19, 0x1014: 0x5a69, 0x1015: 0x5ad1, 0x1016: 0x5b09, 0x1017: 0x5b89, + 0x1018: 0x5bd9, 0x1019: 0x5c01, 0x101a: 0x5c29, 0x101b: 0x5c51, 0x101c: 0x5c79, 0x101d: 0x5ca1, + 0x101e: 0x5cc9, 0x101f: 0x5cf1, 0x1020: 0x5d19, 0x1021: 0x5d41, 0x1022: 0x5d69, 0x1023: 0x5d99, + 0x1024: 0x5dc9, 0x1025: 0x5df9, 0x1026: 0x5e29, 0x1027: 0x5e59, 0x1028: 0x5e89, 0x1029: 0x5eb9, + 0x102a: 0x5ee9, 0x102b: 0x5f19, 0x102c: 0x5f49, 0x102d: 0x5f79, 0x102e: 0x5fa9, 0x102f: 0x5fd9, + 0x1030: 0x6009, 0x1031: 0x402d, 0x1032: 0x6039, 0x1033: 0x6051, 0x1034: 0x404d, 0x1035: 0x6069, + 0x1036: 0x6081, 0x1037: 0x6099, 0x1038: 0x406d, 0x1039: 0x406d, 0x103a: 0x60b1, 0x103b: 0x60c9, + 0x103c: 0x6101, 0x103d: 0x6139, 0x103e: 0x6171, 0x103f: 0x61a9, + // Block 0x41, offset 0x1040 + 0x1040: 0x6211, 0x1041: 0x6229, 0x1042: 0x408d, 0x1043: 0x6241, 0x1044: 0x6259, 0x1045: 0x6271, + 0x1046: 0x6289, 0x1047: 0x62a1, 0x1048: 0x40ad, 0x1049: 0x62b9, 0x104a: 0x62e1, 0x104b: 0x62f9, + 0x104c: 0x40cd, 0x104d: 0x40cd, 0x104e: 0x6311, 0x104f: 0x6329, 0x1050: 0x6341, 0x1051: 0x40ed, + 0x1052: 0x410d, 0x1053: 0x412d, 0x1054: 0x414d, 0x1055: 0x416d, 0x1056: 0x6359, 0x1057: 0x6371, + 0x1058: 0x6389, 0x1059: 0x63a1, 0x105a: 0x63b9, 0x105b: 0x418d, 0x105c: 0x63d1, 0x105d: 0x63e9, + 0x105e: 0x6401, 0x105f: 0x41ad, 0x1060: 0x41cd, 0x1061: 0x6419, 0x1062: 0x41ed, 0x1063: 0x420d, + 0x1064: 0x422d, 0x1065: 0x6431, 0x1066: 0x424d, 0x1067: 0x6449, 0x1068: 0x6479, 0x1069: 0x6211, + 0x106a: 0x426d, 0x106b: 0x428d, 0x106c: 0x42ad, 0x106d: 0x42cd, 0x106e: 0x64b1, 0x106f: 0x64f1, + 0x1070: 0x6539, 0x1071: 0x6551, 0x1072: 0x42ed, 0x1073: 0x6569, 0x1074: 0x6581, 0x1075: 0x6599, + 0x1076: 0x430d, 0x1077: 0x65b1, 0x1078: 0x65c9, 0x1079: 0x65b1, 0x107a: 0x65e1, 0x107b: 0x65f9, + 0x107c: 0x432d, 0x107d: 0x6611, 0x107e: 0x6629, 0x107f: 0x6611, + // Block 0x42, offset 0x1080 + 0x1080: 0x434d, 0x1081: 0x436d, 0x1082: 0x0040, 0x1083: 0x6641, 0x1084: 0x6659, 0x1085: 0x6671, + 0x1086: 0x6689, 0x1087: 0x0040, 0x1088: 0x66c1, 0x1089: 0x66d9, 0x108a: 0x66f1, 0x108b: 0x6709, + 0x108c: 0x6721, 0x108d: 0x6739, 0x108e: 0x6401, 0x108f: 0x6751, 0x1090: 0x6769, 0x1091: 0x6781, + 0x1092: 0x438d, 0x1093: 0x6799, 0x1094: 0x6289, 0x1095: 0x43ad, 0x1096: 0x43cd, 0x1097: 0x67b1, + 0x1098: 0x0040, 0x1099: 0x43ed, 0x109a: 0x67c9, 0x109b: 0x67e1, 0x109c: 0x67f9, 0x109d: 0x6811, + 0x109e: 0x6829, 0x109f: 0x6859, 0x10a0: 0x6889, 0x10a1: 0x68b1, 0x10a2: 0x68d9, 0x10a3: 0x6901, + 0x10a4: 0x6929, 0x10a5: 0x6951, 0x10a6: 0x6979, 0x10a7: 0x69a1, 0x10a8: 0x69c9, 0x10a9: 0x69f1, + 0x10aa: 0x6a21, 0x10ab: 0x6a51, 0x10ac: 0x6a81, 0x10ad: 0x6ab1, 0x10ae: 0x6ae1, 0x10af: 0x6b11, + 0x10b0: 0x6b41, 0x10b1: 0x6b71, 0x10b2: 0x6ba1, 0x10b3: 0x6bd1, 0x10b4: 0x6c01, 0x10b5: 0x6c31, + 0x10b6: 0x6c61, 0x10b7: 0x6c91, 0x10b8: 0x6cc1, 0x10b9: 0x6cf1, 0x10ba: 0x6d21, 0x10bb: 0x6d51, + 0x10bc: 0x6d81, 0x10bd: 0x6db1, 0x10be: 0x6de1, 0x10bf: 0x440d, + // 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: 0x0ea1, 0x111d: 0x6e11, + 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: 0x442d, 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: 0x11d9, 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: 0x6e29, 0x11eb: 0x1029, 0x11ec: 0x11c1, 0x11ed: 0x6e41, 0x11ee: 0x1221, 0x11ef: 0x0040, + 0x11f0: 0x6e59, 0x11f1: 0x6e71, 0x11f2: 0x1239, 0x11f3: 0x444d, 0x11f4: 0xe00d, 0x11f5: 0x0008, + 0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0x0040, 0x11f9: 0x0040, 0x11fa: 0x0040, 0x11fb: 0x0040, + 0x11fc: 0x0040, 0x11fd: 0x0040, 0x11fe: 0x0040, 0x11ff: 0x0040, + // Block 0x48, offset 0x1200 + 0x1200: 0x64d5, 0x1201: 0x64f5, 0x1202: 0x6515, 0x1203: 0x6535, 0x1204: 0x6555, 0x1205: 0x6575, + 0x1206: 0x6595, 0x1207: 0x65b5, 0x1208: 0x65d5, 0x1209: 0x65f5, 0x120a: 0x6615, 0x120b: 0x6635, + 0x120c: 0x6655, 0x120d: 0x6675, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0x6695, 0x1211: 0x0008, + 0x1212: 0x66b5, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x66d5, 0x1216: 0x66f5, 0x1217: 0x6715, + 0x1218: 0x6735, 0x1219: 0x6755, 0x121a: 0x6775, 0x121b: 0x6795, 0x121c: 0x67b5, 0x121d: 0x67d5, + 0x121e: 0x67f5, 0x121f: 0x0008, 0x1220: 0x6815, 0x1221: 0x0008, 0x1222: 0x6835, 0x1223: 0x0008, + 0x1224: 0x0008, 0x1225: 0x6855, 0x1226: 0x6875, 0x1227: 0x0008, 0x1228: 0x0008, 0x1229: 0x0008, + 0x122a: 0x6895, 0x122b: 0x68b5, 0x122c: 0x68d5, 0x122d: 0x68f5, 0x122e: 0x6915, 0x122f: 0x6935, + 0x1230: 0x6955, 0x1231: 0x6975, 0x1232: 0x6995, 0x1233: 0x69b5, 0x1234: 0x69d5, 0x1235: 0x69f5, + 0x1236: 0x6a15, 0x1237: 0x6a35, 0x1238: 0x6a55, 0x1239: 0x6a75, 0x123a: 0x6a95, 0x123b: 0x6ab5, + 0x123c: 0x6ad5, 0x123d: 0x6af5, 0x123e: 0x6b15, 0x123f: 0x6b35, + // Block 0x49, offset 0x1240 + 0x1240: 0x7a95, 0x1241: 0x7ab5, 0x1242: 0x7ad5, 0x1243: 0x7af5, 0x1244: 0x7b15, 0x1245: 0x7b35, + 0x1246: 0x7b55, 0x1247: 0x7b75, 0x1248: 0x7b95, 0x1249: 0x7bb5, 0x124a: 0x7bd5, 0x124b: 0x7bf5, + 0x124c: 0x7c15, 0x124d: 0x7c35, 0x124e: 0x7c55, 0x124f: 0x6ec9, 0x1250: 0x6ef1, 0x1251: 0x6f19, + 0x1252: 0x7c75, 0x1253: 0x7c95, 0x1254: 0x7cb5, 0x1255: 0x6f41, 0x1256: 0x6f69, 0x1257: 0x6f91, + 0x1258: 0x7cd5, 0x1259: 0x7cf5, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x0040, + 0x125e: 0x0040, 0x125f: 0x0040, 0x1260: 0x0040, 0x1261: 0x0040, 0x1262: 0x0040, 0x1263: 0x0040, + 0x1264: 0x0040, 0x1265: 0x0040, 0x1266: 0x0040, 0x1267: 0x0040, 0x1268: 0x0040, 0x1269: 0x0040, + 0x126a: 0x0040, 0x126b: 0x0040, 0x126c: 0x0040, 0x126d: 0x0040, 0x126e: 0x0040, 0x126f: 0x0040, + 0x1270: 0x0040, 0x1271: 0x0040, 0x1272: 0x0040, 0x1273: 0x0040, 0x1274: 0x0040, 0x1275: 0x0040, + 0x1276: 0x0040, 0x1277: 0x0040, 0x1278: 0x0040, 0x1279: 0x0040, 0x127a: 0x0040, 0x127b: 0x0040, + 0x127c: 0x0040, 0x127d: 0x0040, 0x127e: 0x0040, 0x127f: 0x0040, + // Block 0x4a, offset 0x1280 + 0x1280: 0x6fb9, 0x1281: 0x6fd1, 0x1282: 0x6fe9, 0x1283: 0x7d15, 0x1284: 0x7d35, 0x1285: 0x7001, + 0x1286: 0x7001, 0x1287: 0x0040, 0x1288: 0x0040, 0x1289: 0x0040, 0x128a: 0x0040, 0x128b: 0x0040, + 0x128c: 0x0040, 0x128d: 0x0040, 0x128e: 0x0040, 0x128f: 0x0040, 0x1290: 0x0040, 0x1291: 0x0040, + 0x1292: 0x0040, 0x1293: 0x7019, 0x1294: 0x7041, 0x1295: 0x7069, 0x1296: 0x7091, 0x1297: 0x70b9, + 0x1298: 0x0040, 0x1299: 0x0040, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x70e1, + 0x129e: 0x3308, 0x129f: 0x7109, 0x12a0: 0x7131, 0x12a1: 0x20a9, 0x12a2: 0x20f1, 0x12a3: 0x7149, + 0x12a4: 0x7161, 0x12a5: 0x7179, 0x12a6: 0x7191, 0x12a7: 0x71a9, 0x12a8: 0x71c1, 0x12a9: 0x1fb2, + 0x12aa: 0x71d9, 0x12ab: 0x7201, 0x12ac: 0x7229, 0x12ad: 0x7261, 0x12ae: 0x7299, 0x12af: 0x72c1, + 0x12b0: 0x72e9, 0x12b1: 0x7311, 0x12b2: 0x7339, 0x12b3: 0x7361, 0x12b4: 0x7389, 0x12b5: 0x73b1, + 0x12b6: 0x73d9, 0x12b7: 0x0040, 0x12b8: 0x7401, 0x12b9: 0x7429, 0x12ba: 0x7451, 0x12bb: 0x7479, + 0x12bc: 0x74a1, 0x12bd: 0x0040, 0x12be: 0x74c9, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x74f1, 0x12c1: 0x7519, 0x12c2: 0x0040, 0x12c3: 0x7541, 0x12c4: 0x7569, 0x12c5: 0x0040, + 0x12c6: 0x7591, 0x12c7: 0x75b9, 0x12c8: 0x75e1, 0x12c9: 0x7609, 0x12ca: 0x7631, 0x12cb: 0x7659, + 0x12cc: 0x7681, 0x12cd: 0x76a9, 0x12ce: 0x76d1, 0x12cf: 0x76f9, 0x12d0: 0x7721, 0x12d1: 0x7721, + 0x12d2: 0x7739, 0x12d3: 0x7739, 0x12d4: 0x7739, 0x12d5: 0x7739, 0x12d6: 0x7751, 0x12d7: 0x7751, + 0x12d8: 0x7751, 0x12d9: 0x7751, 0x12da: 0x7769, 0x12db: 0x7769, 0x12dc: 0x7769, 0x12dd: 0x7769, + 0x12de: 0x7781, 0x12df: 0x7781, 0x12e0: 0x7781, 0x12e1: 0x7781, 0x12e2: 0x7799, 0x12e3: 0x7799, + 0x12e4: 0x7799, 0x12e5: 0x7799, 0x12e6: 0x77b1, 0x12e7: 0x77b1, 0x12e8: 0x77b1, 0x12e9: 0x77b1, + 0x12ea: 0x77c9, 0x12eb: 0x77c9, 0x12ec: 0x77c9, 0x12ed: 0x77c9, 0x12ee: 0x77e1, 0x12ef: 0x77e1, + 0x12f0: 0x77e1, 0x12f1: 0x77e1, 0x12f2: 0x77f9, 0x12f3: 0x77f9, 0x12f4: 0x77f9, 0x12f5: 0x77f9, + 0x12f6: 0x7811, 0x12f7: 0x7811, 0x12f8: 0x7811, 0x12f9: 0x7811, 0x12fa: 0x7829, 0x12fb: 0x7829, + 0x12fc: 0x7829, 0x12fd: 0x7829, 0x12fe: 0x7841, 0x12ff: 0x7841, + // Block 0x4c, offset 0x1300 + 0x1300: 0x7841, 0x1301: 0x7841, 0x1302: 0x7859, 0x1303: 0x7859, 0x1304: 0x7871, 0x1305: 0x7871, + 0x1306: 0x7889, 0x1307: 0x7889, 0x1308: 0x78a1, 0x1309: 0x78a1, 0x130a: 0x78b9, 0x130b: 0x78b9, + 0x130c: 0x78d1, 0x130d: 0x78d1, 0x130e: 0x78e9, 0x130f: 0x78e9, 0x1310: 0x78e9, 0x1311: 0x78e9, + 0x1312: 0x7901, 0x1313: 0x7901, 0x1314: 0x7901, 0x1315: 0x7901, 0x1316: 0x7919, 0x1317: 0x7919, + 0x1318: 0x7919, 0x1319: 0x7919, 0x131a: 0x7931, 0x131b: 0x7931, 0x131c: 0x7931, 0x131d: 0x7931, + 0x131e: 0x7949, 0x131f: 0x7949, 0x1320: 0x7961, 0x1321: 0x7961, 0x1322: 0x7961, 0x1323: 0x7961, + 0x1324: 0x7979, 0x1325: 0x7979, 0x1326: 0x7991, 0x1327: 0x7991, 0x1328: 0x7991, 0x1329: 0x7991, + 0x132a: 0x79a9, 0x132b: 0x79a9, 0x132c: 0x79a9, 0x132d: 0x79a9, 0x132e: 0x79c1, 0x132f: 0x79c1, + 0x1330: 0x79d9, 0x1331: 0x79d9, 0x1332: 0x0818, 0x1333: 0x0818, 0x1334: 0x0818, 0x1335: 0x0818, + 0x1336: 0x0818, 0x1337: 0x0818, 0x1338: 0x0818, 0x1339: 0x0818, 0x133a: 0x0818, 0x133b: 0x0818, + 0x133c: 0x0818, 0x133d: 0x0818, 0x133e: 0x0818, 0x133f: 0x0818, + // Block 0x4d, offset 0x1340 + 0x1340: 0x0818, 0x1341: 0x0818, 0x1342: 0x0040, 0x1343: 0x0040, 0x1344: 0x0040, 0x1345: 0x0040, + 0x1346: 0x0040, 0x1347: 0x0040, 0x1348: 0x0040, 0x1349: 0x0040, 0x134a: 0x0040, 0x134b: 0x0040, + 0x134c: 0x0040, 0x134d: 0x0040, 0x134e: 0x0040, 0x134f: 0x0040, 0x1350: 0x0040, 0x1351: 0x0040, + 0x1352: 0x0040, 0x1353: 0x79f1, 0x1354: 0x79f1, 0x1355: 0x79f1, 0x1356: 0x79f1, 0x1357: 0x7a09, + 0x1358: 0x7a09, 0x1359: 0x7a21, 0x135a: 0x7a21, 0x135b: 0x7a39, 0x135c: 0x7a39, 0x135d: 0x0479, + 0x135e: 0x7a51, 0x135f: 0x7a51, 0x1360: 0x7a69, 0x1361: 0x7a69, 0x1362: 0x7a81, 0x1363: 0x7a81, + 0x1364: 0x7a99, 0x1365: 0x7a99, 0x1366: 0x7a99, 0x1367: 0x7a99, 0x1368: 0x7ab1, 0x1369: 0x7ab1, + 0x136a: 0x7ac9, 0x136b: 0x7ac9, 0x136c: 0x7af1, 0x136d: 0x7af1, 0x136e: 0x7b19, 0x136f: 0x7b19, + 0x1370: 0x7b41, 0x1371: 0x7b41, 0x1372: 0x7b69, 0x1373: 0x7b69, 0x1374: 0x7b91, 0x1375: 0x7b91, + 0x1376: 0x7bb9, 0x1377: 0x7bb9, 0x1378: 0x7bb9, 0x1379: 0x7be1, 0x137a: 0x7be1, 0x137b: 0x7be1, + 0x137c: 0x7c09, 0x137d: 0x7c09, 0x137e: 0x7c09, 0x137f: 0x7c09, + // Block 0x4e, offset 0x1380 + 0x1380: 0x85f9, 0x1381: 0x8621, 0x1382: 0x8649, 0x1383: 0x8671, 0x1384: 0x8699, 0x1385: 0x86c1, + 0x1386: 0x86e9, 0x1387: 0x8711, 0x1388: 0x8739, 0x1389: 0x8761, 0x138a: 0x8789, 0x138b: 0x87b1, + 0x138c: 0x87d9, 0x138d: 0x8801, 0x138e: 0x8829, 0x138f: 0x8851, 0x1390: 0x8879, 0x1391: 0x88a1, + 0x1392: 0x88c9, 0x1393: 0x88f1, 0x1394: 0x8919, 0x1395: 0x8941, 0x1396: 0x8969, 0x1397: 0x8991, + 0x1398: 0x89b9, 0x1399: 0x89e1, 0x139a: 0x8a09, 0x139b: 0x8a31, 0x139c: 0x8a59, 0x139d: 0x8a81, + 0x139e: 0x8aaa, 0x139f: 0x8ada, 0x13a0: 0x8b0a, 0x13a1: 0x8b3a, 0x13a2: 0x8b6a, 0x13a3: 0x8b9a, + 0x13a4: 0x8bc9, 0x13a5: 0x8bf1, 0x13a6: 0x7c71, 0x13a7: 0x8c19, 0x13a8: 0x7be1, 0x13a9: 0x7c99, + 0x13aa: 0x8c41, 0x13ab: 0x8c69, 0x13ac: 0x7d39, 0x13ad: 0x8c91, 0x13ae: 0x7d61, 0x13af: 0x7d89, + 0x13b0: 0x8cb9, 0x13b1: 0x8ce1, 0x13b2: 0x7e29, 0x13b3: 0x8d09, 0x13b4: 0x7e51, 0x13b5: 0x7e79, + 0x13b6: 0x8d31, 0x13b7: 0x8d59, 0x13b8: 0x7ec9, 0x13b9: 0x8d81, 0x13ba: 0x7ef1, 0x13bb: 0x7f19, + 0x13bc: 0x83a1, 0x13bd: 0x83c9, 0x13be: 0x8441, 0x13bf: 0x8469, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x8491, 0x13c1: 0x8531, 0x13c2: 0x8559, 0x13c3: 0x8581, 0x13c4: 0x85a9, 0x13c5: 0x8649, + 0x13c6: 0x8671, 0x13c7: 0x8699, 0x13c8: 0x8da9, 0x13c9: 0x8739, 0x13ca: 0x8dd1, 0x13cb: 0x8df9, + 0x13cc: 0x8829, 0x13cd: 0x8e21, 0x13ce: 0x8851, 0x13cf: 0x8879, 0x13d0: 0x8a81, 0x13d1: 0x8e49, + 0x13d2: 0x8e71, 0x13d3: 0x89b9, 0x13d4: 0x8e99, 0x13d5: 0x89e1, 0x13d6: 0x8a09, 0x13d7: 0x7c21, + 0x13d8: 0x7c49, 0x13d9: 0x8ec1, 0x13da: 0x7c71, 0x13db: 0x8ee9, 0x13dc: 0x7cc1, 0x13dd: 0x7ce9, + 0x13de: 0x7d11, 0x13df: 0x7d39, 0x13e0: 0x8f11, 0x13e1: 0x7db1, 0x13e2: 0x7dd9, 0x13e3: 0x7e01, + 0x13e4: 0x7e29, 0x13e5: 0x8f39, 0x13e6: 0x7ec9, 0x13e7: 0x7f41, 0x13e8: 0x7f69, 0x13e9: 0x7f91, + 0x13ea: 0x7fb9, 0x13eb: 0x7fe1, 0x13ec: 0x8031, 0x13ed: 0x8059, 0x13ee: 0x8081, 0x13ef: 0x80a9, + 0x13f0: 0x80d1, 0x13f1: 0x80f9, 0x13f2: 0x8f61, 0x13f3: 0x8121, 0x13f4: 0x8149, 0x13f5: 0x8171, + 0x13f6: 0x8199, 0x13f7: 0x81c1, 0x13f8: 0x81e9, 0x13f9: 0x8239, 0x13fa: 0x8261, 0x13fb: 0x8289, + 0x13fc: 0x82b1, 0x13fd: 0x82d9, 0x13fe: 0x8301, 0x13ff: 0x8329, + // Block 0x50, offset 0x1400 + 0x1400: 0x8351, 0x1401: 0x8379, 0x1402: 0x83f1, 0x1403: 0x8419, 0x1404: 0x84b9, 0x1405: 0x84e1, + 0x1406: 0x8509, 0x1407: 0x8531, 0x1408: 0x8559, 0x1409: 0x85d1, 0x140a: 0x85f9, 0x140b: 0x8621, + 0x140c: 0x8649, 0x140d: 0x8f89, 0x140e: 0x86c1, 0x140f: 0x86e9, 0x1410: 0x8711, 0x1411: 0x8739, + 0x1412: 0x87b1, 0x1413: 0x87d9, 0x1414: 0x8801, 0x1415: 0x8829, 0x1416: 0x8fb1, 0x1417: 0x88a1, + 0x1418: 0x88c9, 0x1419: 0x8fd9, 0x141a: 0x8941, 0x141b: 0x8969, 0x141c: 0x8991, 0x141d: 0x89b9, + 0x141e: 0x9001, 0x141f: 0x7c71, 0x1420: 0x8ee9, 0x1421: 0x7d39, 0x1422: 0x8f11, 0x1423: 0x7e29, + 0x1424: 0x8f39, 0x1425: 0x7ec9, 0x1426: 0x9029, 0x1427: 0x80d1, 0x1428: 0x9051, 0x1429: 0x9079, + 0x142a: 0x90a1, 0x142b: 0x8531, 0x142c: 0x8559, 0x142d: 0x8649, 0x142e: 0x8829, 0x142f: 0x8fb1, + 0x1430: 0x89b9, 0x1431: 0x9001, 0x1432: 0x90c9, 0x1433: 0x9101, 0x1434: 0x9139, 0x1435: 0x9171, + 0x1436: 0x9199, 0x1437: 0x91c1, 0x1438: 0x91e9, 0x1439: 0x9211, 0x143a: 0x9239, 0x143b: 0x9261, + 0x143c: 0x9289, 0x143d: 0x92b1, 0x143e: 0x92d9, 0x143f: 0x9301, + // Block 0x51, offset 0x1440 + 0x1440: 0x9329, 0x1441: 0x9351, 0x1442: 0x9379, 0x1443: 0x93a1, 0x1444: 0x93c9, 0x1445: 0x93f1, + 0x1446: 0x9419, 0x1447: 0x9441, 0x1448: 0x9469, 0x1449: 0x9491, 0x144a: 0x94b9, 0x144b: 0x94e1, + 0x144c: 0x9079, 0x144d: 0x9509, 0x144e: 0x9531, 0x144f: 0x9559, 0x1450: 0x9581, 0x1451: 0x9171, + 0x1452: 0x9199, 0x1453: 0x91c1, 0x1454: 0x91e9, 0x1455: 0x9211, 0x1456: 0x9239, 0x1457: 0x9261, + 0x1458: 0x9289, 0x1459: 0x92b1, 0x145a: 0x92d9, 0x145b: 0x9301, 0x145c: 0x9329, 0x145d: 0x9351, + 0x145e: 0x9379, 0x145f: 0x93a1, 0x1460: 0x93c9, 0x1461: 0x93f1, 0x1462: 0x9419, 0x1463: 0x9441, + 0x1464: 0x9469, 0x1465: 0x9491, 0x1466: 0x94b9, 0x1467: 0x94e1, 0x1468: 0x9079, 0x1469: 0x9509, + 0x146a: 0x9531, 0x146b: 0x9559, 0x146c: 0x9581, 0x146d: 0x9491, 0x146e: 0x94b9, 0x146f: 0x94e1, + 0x1470: 0x9079, 0x1471: 0x9051, 0x1472: 0x90a1, 0x1473: 0x8211, 0x1474: 0x8059, 0x1475: 0x8081, + 0x1476: 0x80a9, 0x1477: 0x9491, 0x1478: 0x94b9, 0x1479: 0x94e1, 0x147a: 0x8211, 0x147b: 0x8239, + 0x147c: 0x95a9, 0x147d: 0x95a9, 0x147e: 0x0018, 0x147f: 0x0018, + // Block 0x52, offset 0x1480 + 0x1480: 0x0040, 0x1481: 0x0040, 0x1482: 0x0040, 0x1483: 0x0040, 0x1484: 0x0040, 0x1485: 0x0040, + 0x1486: 0x0040, 0x1487: 0x0040, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x95d1, 0x1491: 0x9609, + 0x1492: 0x9609, 0x1493: 0x9641, 0x1494: 0x9679, 0x1495: 0x96b1, 0x1496: 0x96e9, 0x1497: 0x9721, + 0x1498: 0x9759, 0x1499: 0x9759, 0x149a: 0x9791, 0x149b: 0x97c9, 0x149c: 0x9801, 0x149d: 0x9839, + 0x149e: 0x9871, 0x149f: 0x98a9, 0x14a0: 0x98a9, 0x14a1: 0x98e1, 0x14a2: 0x9919, 0x14a3: 0x9919, + 0x14a4: 0x9951, 0x14a5: 0x9951, 0x14a6: 0x9989, 0x14a7: 0x99c1, 0x14a8: 0x99c1, 0x14a9: 0x99f9, + 0x14aa: 0x9a31, 0x14ab: 0x9a31, 0x14ac: 0x9a69, 0x14ad: 0x9a69, 0x14ae: 0x9aa1, 0x14af: 0x9ad9, + 0x14b0: 0x9ad9, 0x14b1: 0x9b11, 0x14b2: 0x9b11, 0x14b3: 0x9b49, 0x14b4: 0x9b81, 0x14b5: 0x9bb9, + 0x14b6: 0x9bf1, 0x14b7: 0x9bf1, 0x14b8: 0x9c29, 0x14b9: 0x9c61, 0x14ba: 0x9c99, 0x14bb: 0x9cd1, + 0x14bc: 0x9d09, 0x14bd: 0x9d09, 0x14be: 0x9d41, 0x14bf: 0x9d79, + // Block 0x53, offset 0x14c0 + 0x14c0: 0xa949, 0x14c1: 0xa981, 0x14c2: 0xa9b9, 0x14c3: 0xa8a1, 0x14c4: 0x9bb9, 0x14c5: 0x9989, + 0x14c6: 0xa9f1, 0x14c7: 0xaa29, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, + 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x0040, 0x14d1: 0x0040, + 0x14d2: 0x0040, 0x14d3: 0x0040, 0x14d4: 0x0040, 0x14d5: 0x0040, 0x14d6: 0x0040, 0x14d7: 0x0040, + 0x14d8: 0x0040, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x0040, 0x14e1: 0x0040, 0x14e2: 0x0040, 0x14e3: 0x0040, + 0x14e4: 0x0040, 0x14e5: 0x0040, 0x14e6: 0x0040, 0x14e7: 0x0040, 0x14e8: 0x0040, 0x14e9: 0x0040, + 0x14ea: 0x0040, 0x14eb: 0x0040, 0x14ec: 0x0040, 0x14ed: 0x0040, 0x14ee: 0x0040, 0x14ef: 0x0040, + 0x14f0: 0xaa61, 0x14f1: 0xaa99, 0x14f2: 0xaad1, 0x14f3: 0xab19, 0x14f4: 0xab61, 0x14f5: 0xaba9, + 0x14f6: 0xabf1, 0x14f7: 0xac39, 0x14f8: 0xac81, 0x14f9: 0xacc9, 0x14fa: 0xad02, 0x14fb: 0xae12, + 0x14fc: 0xae91, 0x14fd: 0x0018, 0x14fe: 0x0040, 0x14ff: 0x0040, + // Block 0x54, offset 0x1500 + 0x1500: 0x33c0, 0x1501: 0x33c0, 0x1502: 0x33c0, 0x1503: 0x33c0, 0x1504: 0x33c0, 0x1505: 0x33c0, + 0x1506: 0x33c0, 0x1507: 0x33c0, 0x1508: 0x33c0, 0x1509: 0x33c0, 0x150a: 0x33c0, 0x150b: 0x33c0, + 0x150c: 0x33c0, 0x150d: 0x33c0, 0x150e: 0x33c0, 0x150f: 0x33c0, 0x1510: 0xaeda, 0x1511: 0x7d55, + 0x1512: 0x0040, 0x1513: 0xaeea, 0x1514: 0x03c2, 0x1515: 0xaefa, 0x1516: 0xaf0a, 0x1517: 0x7d75, + 0x1518: 0x7d95, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x3308, 0x1521: 0x3308, 0x1522: 0x3308, 0x1523: 0x3308, + 0x1524: 0x3308, 0x1525: 0x3308, 0x1526: 0x3308, 0x1527: 0x3308, 0x1528: 0x3308, 0x1529: 0x3308, + 0x152a: 0x3308, 0x152b: 0x3308, 0x152c: 0x3308, 0x152d: 0x3308, 0x152e: 0x3308, 0x152f: 0x3308, + 0x1530: 0x0040, 0x1531: 0x7db5, 0x1532: 0x7dd5, 0x1533: 0xaf1a, 0x1534: 0xaf1a, 0x1535: 0x1fd2, + 0x1536: 0x1fe2, 0x1537: 0xaf2a, 0x1538: 0xaf3a, 0x1539: 0x7df5, 0x153a: 0x7e15, 0x153b: 0x7e35, + 0x153c: 0x7df5, 0x153d: 0x7e55, 0x153e: 0x7e75, 0x153f: 0x7e55, + // Block 0x55, offset 0x1540 + 0x1540: 0x7e95, 0x1541: 0x7eb5, 0x1542: 0x7ed5, 0x1543: 0x7eb5, 0x1544: 0x7ef5, 0x1545: 0x0018, + 0x1546: 0x0018, 0x1547: 0xaf4a, 0x1548: 0xaf5a, 0x1549: 0x7f16, 0x154a: 0x7f36, 0x154b: 0x7f56, + 0x154c: 0x7f76, 0x154d: 0xaf1a, 0x154e: 0xaf1a, 0x154f: 0xaf1a, 0x1550: 0xaeda, 0x1551: 0x7f95, + 0x1552: 0x0040, 0x1553: 0x0040, 0x1554: 0x03c2, 0x1555: 0xaeea, 0x1556: 0xaf0a, 0x1557: 0xaefa, + 0x1558: 0x7fb5, 0x1559: 0x1fd2, 0x155a: 0x1fe2, 0x155b: 0xaf2a, 0x155c: 0xaf3a, 0x155d: 0x7e95, + 0x155e: 0x7ef5, 0x155f: 0xaf6a, 0x1560: 0xaf7a, 0x1561: 0xaf8a, 0x1562: 0x1fb2, 0x1563: 0xaf99, + 0x1564: 0xafaa, 0x1565: 0xafba, 0x1566: 0x1fc2, 0x1567: 0x0040, 0x1568: 0xafca, 0x1569: 0xafda, + 0x156a: 0xafea, 0x156b: 0xaffa, 0x156c: 0x0040, 0x156d: 0x0040, 0x156e: 0x0040, 0x156f: 0x0040, + 0x1570: 0x7fd6, 0x1571: 0xb009, 0x1572: 0x7ff6, 0x1573: 0x0808, 0x1574: 0x8016, 0x1575: 0x0040, + 0x1576: 0x8036, 0x1577: 0xb031, 0x1578: 0x8056, 0x1579: 0xb059, 0x157a: 0x8076, 0x157b: 0xb081, + 0x157c: 0x8096, 0x157d: 0xb0a9, 0x157e: 0x80b6, 0x157f: 0xb0d1, + // Block 0x56, offset 0x1580 + 0x1580: 0xb0f9, 0x1581: 0xb111, 0x1582: 0xb111, 0x1583: 0xb129, 0x1584: 0xb129, 0x1585: 0xb141, + 0x1586: 0xb141, 0x1587: 0xb159, 0x1588: 0xb159, 0x1589: 0xb171, 0x158a: 0xb171, 0x158b: 0xb171, + 0x158c: 0xb171, 0x158d: 0xb189, 0x158e: 0xb189, 0x158f: 0xb1a1, 0x1590: 0xb1a1, 0x1591: 0xb1a1, + 0x1592: 0xb1a1, 0x1593: 0xb1b9, 0x1594: 0xb1b9, 0x1595: 0xb1d1, 0x1596: 0xb1d1, 0x1597: 0xb1d1, + 0x1598: 0xb1d1, 0x1599: 0xb1e9, 0x159a: 0xb1e9, 0x159b: 0xb1e9, 0x159c: 0xb1e9, 0x159d: 0xb201, + 0x159e: 0xb201, 0x159f: 0xb201, 0x15a0: 0xb201, 0x15a1: 0xb219, 0x15a2: 0xb219, 0x15a3: 0xb219, + 0x15a4: 0xb219, 0x15a5: 0xb231, 0x15a6: 0xb231, 0x15a7: 0xb231, 0x15a8: 0xb231, 0x15a9: 0xb249, + 0x15aa: 0xb249, 0x15ab: 0xb261, 0x15ac: 0xb261, 0x15ad: 0xb279, 0x15ae: 0xb279, 0x15af: 0xb291, + 0x15b0: 0xb291, 0x15b1: 0xb2a9, 0x15b2: 0xb2a9, 0x15b3: 0xb2a9, 0x15b4: 0xb2a9, 0x15b5: 0xb2c1, + 0x15b6: 0xb2c1, 0x15b7: 0xb2c1, 0x15b8: 0xb2c1, 0x15b9: 0xb2d9, 0x15ba: 0xb2d9, 0x15bb: 0xb2d9, + 0x15bc: 0xb2d9, 0x15bd: 0xb2f1, 0x15be: 0xb2f1, 0x15bf: 0xb2f1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb2f1, 0x15c1: 0xb309, 0x15c2: 0xb309, 0x15c3: 0xb309, 0x15c4: 0xb309, 0x15c5: 0xb321, + 0x15c6: 0xb321, 0x15c7: 0xb321, 0x15c8: 0xb321, 0x15c9: 0xb339, 0x15ca: 0xb339, 0x15cb: 0xb339, + 0x15cc: 0xb339, 0x15cd: 0xb351, 0x15ce: 0xb351, 0x15cf: 0xb351, 0x15d0: 0xb351, 0x15d1: 0xb369, + 0x15d2: 0xb369, 0x15d3: 0xb369, 0x15d4: 0xb369, 0x15d5: 0xb381, 0x15d6: 0xb381, 0x15d7: 0xb381, + 0x15d8: 0xb381, 0x15d9: 0xb399, 0x15da: 0xb399, 0x15db: 0xb399, 0x15dc: 0xb399, 0x15dd: 0xb3b1, + 0x15de: 0xb3b1, 0x15df: 0xb3b1, 0x15e0: 0xb3b1, 0x15e1: 0xb3c9, 0x15e2: 0xb3c9, 0x15e3: 0xb3c9, + 0x15e4: 0xb3c9, 0x15e5: 0xb3e1, 0x15e6: 0xb3e1, 0x15e7: 0xb3e1, 0x15e8: 0xb3e1, 0x15e9: 0xb3f9, + 0x15ea: 0xb3f9, 0x15eb: 0xb3f9, 0x15ec: 0xb3f9, 0x15ed: 0xb411, 0x15ee: 0xb411, 0x15ef: 0x7ab1, + 0x15f0: 0x7ab1, 0x15f1: 0xb429, 0x15f2: 0xb429, 0x15f3: 0xb429, 0x15f4: 0xb429, 0x15f5: 0xb441, + 0x15f6: 0xb441, 0x15f7: 0xb469, 0x15f8: 0xb469, 0x15f9: 0xb491, 0x15fa: 0xb491, 0x15fb: 0xb4b9, + 0x15fc: 0xb4b9, 0x15fd: 0x0040, 0x15fe: 0x0040, 0x15ff: 0x03c0, + // Block 0x58, offset 0x1600 + 0x1600: 0x0040, 0x1601: 0xaefa, 0x1602: 0xb4e2, 0x1603: 0xaf6a, 0x1604: 0xafda, 0x1605: 0xafea, + 0x1606: 0xaf7a, 0x1607: 0xb4f2, 0x1608: 0x1fd2, 0x1609: 0x1fe2, 0x160a: 0xaf8a, 0x160b: 0x1fb2, + 0x160c: 0xaeda, 0x160d: 0xaf99, 0x160e: 0x29d1, 0x160f: 0xb502, 0x1610: 0x1f41, 0x1611: 0x00c9, + 0x1612: 0x0069, 0x1613: 0x0079, 0x1614: 0x1f51, 0x1615: 0x1f61, 0x1616: 0x1f71, 0x1617: 0x1f81, + 0x1618: 0x1f91, 0x1619: 0x1fa1, 0x161a: 0xaeea, 0x161b: 0x03c2, 0x161c: 0xafaa, 0x161d: 0x1fc2, + 0x161e: 0xafba, 0x161f: 0xaf0a, 0x1620: 0xaffa, 0x1621: 0x0039, 0x1622: 0x0ee9, 0x1623: 0x1159, + 0x1624: 0x0ef9, 0x1625: 0x0f09, 0x1626: 0x1199, 0x1627: 0x0f31, 0x1628: 0x0249, 0x1629: 0x0f41, + 0x162a: 0x0259, 0x162b: 0x0f51, 0x162c: 0x0359, 0x162d: 0x0f61, 0x162e: 0x0f71, 0x162f: 0x00d9, + 0x1630: 0x0f99, 0x1631: 0x2039, 0x1632: 0x0269, 0x1633: 0x01d9, 0x1634: 0x0fa9, 0x1635: 0x0fb9, + 0x1636: 0x1089, 0x1637: 0x0279, 0x1638: 0x0369, 0x1639: 0x0289, 0x163a: 0x13d1, 0x163b: 0xaf4a, + 0x163c: 0xafca, 0x163d: 0xaf5a, 0x163e: 0xb512, 0x163f: 0xaf1a, + // Block 0x59, offset 0x1640 + 0x1640: 0x1caa, 0x1641: 0x0039, 0x1642: 0x0ee9, 0x1643: 0x1159, 0x1644: 0x0ef9, 0x1645: 0x0f09, + 0x1646: 0x1199, 0x1647: 0x0f31, 0x1648: 0x0249, 0x1649: 0x0f41, 0x164a: 0x0259, 0x164b: 0x0f51, + 0x164c: 0x0359, 0x164d: 0x0f61, 0x164e: 0x0f71, 0x164f: 0x00d9, 0x1650: 0x0f99, 0x1651: 0x2039, + 0x1652: 0x0269, 0x1653: 0x01d9, 0x1654: 0x0fa9, 0x1655: 0x0fb9, 0x1656: 0x1089, 0x1657: 0x0279, + 0x1658: 0x0369, 0x1659: 0x0289, 0x165a: 0x13d1, 0x165b: 0xaf2a, 0x165c: 0xb522, 0x165d: 0xaf3a, + 0x165e: 0xb532, 0x165f: 0x80d5, 0x1660: 0x80f5, 0x1661: 0x29d1, 0x1662: 0x8115, 0x1663: 0x8115, + 0x1664: 0x8135, 0x1665: 0x8155, 0x1666: 0x8175, 0x1667: 0x8195, 0x1668: 0x81b5, 0x1669: 0x81d5, + 0x166a: 0x81f5, 0x166b: 0x8215, 0x166c: 0x8235, 0x166d: 0x8255, 0x166e: 0x8275, 0x166f: 0x8295, + 0x1670: 0x82b5, 0x1671: 0x82d5, 0x1672: 0x82f5, 0x1673: 0x8315, 0x1674: 0x8335, 0x1675: 0x8355, + 0x1676: 0x8375, 0x1677: 0x8395, 0x1678: 0x83b5, 0x1679: 0x83d5, 0x167a: 0x83f5, 0x167b: 0x8415, + 0x167c: 0x81b5, 0x167d: 0x8435, 0x167e: 0x8455, 0x167f: 0x8215, + // Block 0x5a, offset 0x1680 + 0x1680: 0x8475, 0x1681: 0x8495, 0x1682: 0x84b5, 0x1683: 0x84d5, 0x1684: 0x84f5, 0x1685: 0x8515, + 0x1686: 0x8535, 0x1687: 0x8555, 0x1688: 0x84d5, 0x1689: 0x8575, 0x168a: 0x84d5, 0x168b: 0x8595, + 0x168c: 0x8595, 0x168d: 0x85b5, 0x168e: 0x85b5, 0x168f: 0x85d5, 0x1690: 0x8515, 0x1691: 0x85f5, + 0x1692: 0x8615, 0x1693: 0x85f5, 0x1694: 0x8635, 0x1695: 0x8615, 0x1696: 0x8655, 0x1697: 0x8655, + 0x1698: 0x8675, 0x1699: 0x8675, 0x169a: 0x8695, 0x169b: 0x8695, 0x169c: 0x8615, 0x169d: 0x8115, + 0x169e: 0x86b5, 0x169f: 0x86d5, 0x16a0: 0x0040, 0x16a1: 0x86f5, 0x16a2: 0x8715, 0x16a3: 0x8735, + 0x16a4: 0x8755, 0x16a5: 0x8735, 0x16a6: 0x8775, 0x16a7: 0x8795, 0x16a8: 0x87b5, 0x16a9: 0x87b5, + 0x16aa: 0x87d5, 0x16ab: 0x87d5, 0x16ac: 0x87f5, 0x16ad: 0x87f5, 0x16ae: 0x87d5, 0x16af: 0x87d5, + 0x16b0: 0x8815, 0x16b1: 0x8835, 0x16b2: 0x8855, 0x16b3: 0x8875, 0x16b4: 0x8895, 0x16b5: 0x88b5, + 0x16b6: 0x88b5, 0x16b7: 0x88b5, 0x16b8: 0x88d5, 0x16b9: 0x88d5, 0x16ba: 0x88d5, 0x16bb: 0x88d5, + 0x16bc: 0x87b5, 0x16bd: 0x87b5, 0x16be: 0x87b5, 0x16bf: 0x0040, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x0040, 0x16c1: 0x0040, 0x16c2: 0x8715, 0x16c3: 0x86f5, 0x16c4: 0x88f5, 0x16c5: 0x86f5, + 0x16c6: 0x8715, 0x16c7: 0x86f5, 0x16c8: 0x0040, 0x16c9: 0x0040, 0x16ca: 0x8915, 0x16cb: 0x8715, + 0x16cc: 0x8935, 0x16cd: 0x88f5, 0x16ce: 0x8935, 0x16cf: 0x8715, 0x16d0: 0x0040, 0x16d1: 0x0040, + 0x16d2: 0x8955, 0x16d3: 0x8975, 0x16d4: 0x8875, 0x16d5: 0x8935, 0x16d6: 0x88f5, 0x16d7: 0x8935, + 0x16d8: 0x0040, 0x16d9: 0x0040, 0x16da: 0x8995, 0x16db: 0x89b5, 0x16dc: 0x8995, 0x16dd: 0x0040, + 0x16de: 0x0040, 0x16df: 0x0040, 0x16e0: 0xb541, 0x16e1: 0xb559, 0x16e2: 0xb571, 0x16e3: 0x89d6, + 0x16e4: 0xb589, 0x16e5: 0xb5a1, 0x16e6: 0x89f5, 0x16e7: 0x0040, 0x16e8: 0x8a15, 0x16e9: 0x8a35, + 0x16ea: 0x8a55, 0x16eb: 0x8a35, 0x16ec: 0x8a75, 0x16ed: 0x8a95, 0x16ee: 0x8ab5, 0x16ef: 0x0040, + 0x16f0: 0x0040, 0x16f1: 0x0040, 0x16f2: 0x0040, 0x16f3: 0x0040, 0x16f4: 0x0040, 0x16f5: 0x0040, + 0x16f6: 0x0040, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0340, 0x16fa: 0x0340, 0x16fb: 0x0340, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0a08, 0x1701: 0x0a08, 0x1702: 0x0a08, 0x1703: 0x0a08, 0x1704: 0x0a08, 0x1705: 0x0c08, + 0x1706: 0x0808, 0x1707: 0x0c08, 0x1708: 0x0818, 0x1709: 0x0c08, 0x170a: 0x0c08, 0x170b: 0x0808, + 0x170c: 0x0808, 0x170d: 0x0908, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0c08, 0x1711: 0x0c08, + 0x1712: 0x0c08, 0x1713: 0x0a08, 0x1714: 0x0a08, 0x1715: 0x0a08, 0x1716: 0x0a08, 0x1717: 0x0908, + 0x1718: 0x0a08, 0x1719: 0x0a08, 0x171a: 0x0a08, 0x171b: 0x0a08, 0x171c: 0x0a08, 0x171d: 0x0c08, + 0x171e: 0x0a08, 0x171f: 0x0a08, 0x1720: 0x0a08, 0x1721: 0x0c08, 0x1722: 0x0808, 0x1723: 0x0808, + 0x1724: 0x0c08, 0x1725: 0x3308, 0x1726: 0x3308, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0040, + 0x172a: 0x0040, 0x172b: 0x0a18, 0x172c: 0x0a18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0c18, + 0x1730: 0x0818, 0x1731: 0x0818, 0x1732: 0x0818, 0x1733: 0x0818, 0x1734: 0x0818, 0x1735: 0x0818, + 0x1736: 0x0818, 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: 0x0c08, 0x1742: 0x0a08, 0x1743: 0x0c08, 0x1744: 0x0c08, 0x1745: 0x0c08, + 0x1746: 0x0a08, 0x1747: 0x0a08, 0x1748: 0x0a08, 0x1749: 0x0c08, 0x174a: 0x0a08, 0x174b: 0x0a08, + 0x174c: 0x0c08, 0x174d: 0x0a08, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0a08, 0x1751: 0x0c08, + 0x1752: 0x0040, 0x1753: 0x0040, 0x1754: 0x0040, 0x1755: 0x0040, 0x1756: 0x0040, 0x1757: 0x0040, + 0x1758: 0x0040, 0x1759: 0x0818, 0x175a: 0x0818, 0x175b: 0x0818, 0x175c: 0x0818, 0x175d: 0x0040, + 0x175e: 0x0040, 0x175f: 0x0040, 0x1760: 0x0040, 0x1761: 0x0040, 0x1762: 0x0040, 0x1763: 0x0040, + 0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0c18, + 0x176a: 0x0c18, 0x176b: 0x0c18, 0x176c: 0x0c18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0818, + 0x1770: 0x0040, 0x1771: 0x0040, 0x1772: 0x0040, 0x1773: 0x0040, 0x1774: 0x0040, 0x1775: 0x0040, + 0x1776: 0x0040, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + // Block 0x5e, offset 0x1780 + 0x1780: 0x3308, 0x1781: 0x3308, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x0040, 0x1785: 0x0008, + 0x1786: 0x0008, 0x1787: 0x0008, 0x1788: 0x0008, 0x1789: 0x0008, 0x178a: 0x0008, 0x178b: 0x0008, + 0x178c: 0x0008, 0x178d: 0x0040, 0x178e: 0x0040, 0x178f: 0x0008, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0008, 0x1794: 0x0008, 0x1795: 0x0008, 0x1796: 0x0008, 0x1797: 0x0008, + 0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0008, 0x17a3: 0x0008, + 0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0040, + 0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008, + 0x17b0: 0x0008, 0x17b1: 0x0040, 0x17b2: 0x0008, 0x17b3: 0x0008, 0x17b4: 0x0040, 0x17b5: 0x0008, + 0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x3308, 0x17bd: 0x0008, 0x17be: 0x3008, 0x17bf: 0x3008, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x3308, 0x17c1: 0x3008, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x3008, 0x17c5: 0x0040, + 0x17c6: 0x0040, 0x17c7: 0x3008, 0x17c8: 0x3008, 0x17c9: 0x0040, 0x17ca: 0x0040, 0x17cb: 0x3008, + 0x17cc: 0x3008, 0x17cd: 0x3808, 0x17ce: 0x0040, 0x17cf: 0x0040, 0x17d0: 0x0008, 0x17d1: 0x0040, + 0x17d2: 0x0040, 0x17d3: 0x0040, 0x17d4: 0x0040, 0x17d5: 0x0040, 0x17d6: 0x0040, 0x17d7: 0x3008, + 0x17d8: 0x0040, 0x17d9: 0x0040, 0x17da: 0x0040, 0x17db: 0x0040, 0x17dc: 0x0040, 0x17dd: 0x0008, + 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x3008, 0x17e3: 0x3008, + 0x17e4: 0x0040, 0x17e5: 0x0040, 0x17e6: 0x3308, 0x17e7: 0x3308, 0x17e8: 0x3308, 0x17e9: 0x3308, + 0x17ea: 0x3308, 0x17eb: 0x3308, 0x17ec: 0x3308, 0x17ed: 0x0040, 0x17ee: 0x0040, 0x17ef: 0x0040, + 0x17f0: 0x3308, 0x17f1: 0x3308, 0x17f2: 0x3308, 0x17f3: 0x3308, 0x17f4: 0x3308, 0x17f5: 0x0040, + 0x17f6: 0x0040, 0x17f7: 0x0040, 0x17f8: 0x0040, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x0040, + 0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040, + // Block 0x60, offset 0x1800 + 0x1800: 0x0039, 0x1801: 0x0ee9, 0x1802: 0x1159, 0x1803: 0x0ef9, 0x1804: 0x0f09, 0x1805: 0x1199, + 0x1806: 0x0f31, 0x1807: 0x0249, 0x1808: 0x0f41, 0x1809: 0x0259, 0x180a: 0x0f51, 0x180b: 0x0359, + 0x180c: 0x0f61, 0x180d: 0x0f71, 0x180e: 0x00d9, 0x180f: 0x0f99, 0x1810: 0x2039, 0x1811: 0x0269, + 0x1812: 0x01d9, 0x1813: 0x0fa9, 0x1814: 0x0fb9, 0x1815: 0x1089, 0x1816: 0x0279, 0x1817: 0x0369, + 0x1818: 0x0289, 0x1819: 0x13d1, 0x181a: 0x0039, 0x181b: 0x0ee9, 0x181c: 0x1159, 0x181d: 0x0ef9, + 0x181e: 0x0f09, 0x181f: 0x1199, 0x1820: 0x0f31, 0x1821: 0x0249, 0x1822: 0x0f41, 0x1823: 0x0259, + 0x1824: 0x0f51, 0x1825: 0x0359, 0x1826: 0x0f61, 0x1827: 0x0f71, 0x1828: 0x00d9, 0x1829: 0x0f99, + 0x182a: 0x2039, 0x182b: 0x0269, 0x182c: 0x01d9, 0x182d: 0x0fa9, 0x182e: 0x0fb9, 0x182f: 0x1089, + 0x1830: 0x0279, 0x1831: 0x0369, 0x1832: 0x0289, 0x1833: 0x13d1, 0x1834: 0x0039, 0x1835: 0x0ee9, + 0x1836: 0x1159, 0x1837: 0x0ef9, 0x1838: 0x0f09, 0x1839: 0x1199, 0x183a: 0x0f31, 0x183b: 0x0249, + 0x183c: 0x0f41, 0x183d: 0x0259, 0x183e: 0x0f51, 0x183f: 0x0359, + // Block 0x61, offset 0x1840 + 0x1840: 0x0f61, 0x1841: 0x0f71, 0x1842: 0x00d9, 0x1843: 0x0f99, 0x1844: 0x2039, 0x1845: 0x0269, + 0x1846: 0x01d9, 0x1847: 0x0fa9, 0x1848: 0x0fb9, 0x1849: 0x1089, 0x184a: 0x0279, 0x184b: 0x0369, + 0x184c: 0x0289, 0x184d: 0x13d1, 0x184e: 0x0039, 0x184f: 0x0ee9, 0x1850: 0x1159, 0x1851: 0x0ef9, + 0x1852: 0x0f09, 0x1853: 0x1199, 0x1854: 0x0f31, 0x1855: 0x0040, 0x1856: 0x0f41, 0x1857: 0x0259, + 0x1858: 0x0f51, 0x1859: 0x0359, 0x185a: 0x0f61, 0x185b: 0x0f71, 0x185c: 0x00d9, 0x185d: 0x0f99, + 0x185e: 0x2039, 0x185f: 0x0269, 0x1860: 0x01d9, 0x1861: 0x0fa9, 0x1862: 0x0fb9, 0x1863: 0x1089, + 0x1864: 0x0279, 0x1865: 0x0369, 0x1866: 0x0289, 0x1867: 0x13d1, 0x1868: 0x0039, 0x1869: 0x0ee9, + 0x186a: 0x1159, 0x186b: 0x0ef9, 0x186c: 0x0f09, 0x186d: 0x1199, 0x186e: 0x0f31, 0x186f: 0x0249, + 0x1870: 0x0f41, 0x1871: 0x0259, 0x1872: 0x0f51, 0x1873: 0x0359, 0x1874: 0x0f61, 0x1875: 0x0f71, + 0x1876: 0x00d9, 0x1877: 0x0f99, 0x1878: 0x2039, 0x1879: 0x0269, 0x187a: 0x01d9, 0x187b: 0x0fa9, + 0x187c: 0x0fb9, 0x187d: 0x1089, 0x187e: 0x0279, 0x187f: 0x0369, + // Block 0x62, offset 0x1880 + 0x1880: 0x0289, 0x1881: 0x13d1, 0x1882: 0x0039, 0x1883: 0x0ee9, 0x1884: 0x1159, 0x1885: 0x0ef9, + 0x1886: 0x0f09, 0x1887: 0x1199, 0x1888: 0x0f31, 0x1889: 0x0249, 0x188a: 0x0f41, 0x188b: 0x0259, + 0x188c: 0x0f51, 0x188d: 0x0359, 0x188e: 0x0f61, 0x188f: 0x0f71, 0x1890: 0x00d9, 0x1891: 0x0f99, + 0x1892: 0x2039, 0x1893: 0x0269, 0x1894: 0x01d9, 0x1895: 0x0fa9, 0x1896: 0x0fb9, 0x1897: 0x1089, + 0x1898: 0x0279, 0x1899: 0x0369, 0x189a: 0x0289, 0x189b: 0x13d1, 0x189c: 0x0039, 0x189d: 0x0040, + 0x189e: 0x1159, 0x189f: 0x0ef9, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0f31, 0x18a3: 0x0040, + 0x18a4: 0x0040, 0x18a5: 0x0259, 0x18a6: 0x0f51, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0f71, + 0x18aa: 0x00d9, 0x18ab: 0x0f99, 0x18ac: 0x2039, 0x18ad: 0x0040, 0x18ae: 0x01d9, 0x18af: 0x0fa9, + 0x18b0: 0x0fb9, 0x18b1: 0x1089, 0x18b2: 0x0279, 0x18b3: 0x0369, 0x18b4: 0x0289, 0x18b5: 0x13d1, + 0x18b6: 0x0039, 0x18b7: 0x0ee9, 0x18b8: 0x1159, 0x18b9: 0x0ef9, 0x18ba: 0x0040, 0x18bb: 0x1199, + 0x18bc: 0x0040, 0x18bd: 0x0249, 0x18be: 0x0f41, 0x18bf: 0x0259, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0f51, 0x18c1: 0x0359, 0x18c2: 0x0f61, 0x18c3: 0x0f71, 0x18c4: 0x0040, 0x18c5: 0x0f99, + 0x18c6: 0x2039, 0x18c7: 0x0269, 0x18c8: 0x01d9, 0x18c9: 0x0fa9, 0x18ca: 0x0fb9, 0x18cb: 0x1089, + 0x18cc: 0x0279, 0x18cd: 0x0369, 0x18ce: 0x0289, 0x18cf: 0x13d1, 0x18d0: 0x0039, 0x18d1: 0x0ee9, + 0x18d2: 0x1159, 0x18d3: 0x0ef9, 0x18d4: 0x0f09, 0x18d5: 0x1199, 0x18d6: 0x0f31, 0x18d7: 0x0249, + 0x18d8: 0x0f41, 0x18d9: 0x0259, 0x18da: 0x0f51, 0x18db: 0x0359, 0x18dc: 0x0f61, 0x18dd: 0x0f71, + 0x18de: 0x00d9, 0x18df: 0x0f99, 0x18e0: 0x2039, 0x18e1: 0x0269, 0x18e2: 0x01d9, 0x18e3: 0x0fa9, + 0x18e4: 0x0fb9, 0x18e5: 0x1089, 0x18e6: 0x0279, 0x18e7: 0x0369, 0x18e8: 0x0289, 0x18e9: 0x13d1, + 0x18ea: 0x0039, 0x18eb: 0x0ee9, 0x18ec: 0x1159, 0x18ed: 0x0ef9, 0x18ee: 0x0f09, 0x18ef: 0x1199, + 0x18f0: 0x0f31, 0x18f1: 0x0249, 0x18f2: 0x0f41, 0x18f3: 0x0259, 0x18f4: 0x0f51, 0x18f5: 0x0359, + 0x18f6: 0x0f61, 0x18f7: 0x0f71, 0x18f8: 0x00d9, 0x18f9: 0x0f99, 0x18fa: 0x2039, 0x18fb: 0x0269, + 0x18fc: 0x01d9, 0x18fd: 0x0fa9, 0x18fe: 0x0fb9, 0x18ff: 0x1089, + // Block 0x64, offset 0x1900 + 0x1900: 0x0279, 0x1901: 0x0369, 0x1902: 0x0289, 0x1903: 0x13d1, 0x1904: 0x0039, 0x1905: 0x0ee9, + 0x1906: 0x0040, 0x1907: 0x0ef9, 0x1908: 0x0f09, 0x1909: 0x1199, 0x190a: 0x0f31, 0x190b: 0x0040, + 0x190c: 0x0040, 0x190d: 0x0259, 0x190e: 0x0f51, 0x190f: 0x0359, 0x1910: 0x0f61, 0x1911: 0x0f71, + 0x1912: 0x00d9, 0x1913: 0x0f99, 0x1914: 0x2039, 0x1915: 0x0040, 0x1916: 0x01d9, 0x1917: 0x0fa9, + 0x1918: 0x0fb9, 0x1919: 0x1089, 0x191a: 0x0279, 0x191b: 0x0369, 0x191c: 0x0289, 0x191d: 0x0040, + 0x191e: 0x0039, 0x191f: 0x0ee9, 0x1920: 0x1159, 0x1921: 0x0ef9, 0x1922: 0x0f09, 0x1923: 0x1199, + 0x1924: 0x0f31, 0x1925: 0x0249, 0x1926: 0x0f41, 0x1927: 0x0259, 0x1928: 0x0f51, 0x1929: 0x0359, + 0x192a: 0x0f61, 0x192b: 0x0f71, 0x192c: 0x00d9, 0x192d: 0x0f99, 0x192e: 0x2039, 0x192f: 0x0269, + 0x1930: 0x01d9, 0x1931: 0x0fa9, 0x1932: 0x0fb9, 0x1933: 0x1089, 0x1934: 0x0279, 0x1935: 0x0369, + 0x1936: 0x0289, 0x1937: 0x13d1, 0x1938: 0x0039, 0x1939: 0x0ee9, 0x193a: 0x0040, 0x193b: 0x0ef9, + 0x193c: 0x0f09, 0x193d: 0x1199, 0x193e: 0x0f31, 0x193f: 0x0040, + // Block 0x65, offset 0x1940 + 0x1940: 0x0f41, 0x1941: 0x0259, 0x1942: 0x0f51, 0x1943: 0x0359, 0x1944: 0x0f61, 0x1945: 0x0040, + 0x1946: 0x00d9, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x01d9, 0x194b: 0x0fa9, + 0x194c: 0x0fb9, 0x194d: 0x1089, 0x194e: 0x0279, 0x194f: 0x0369, 0x1950: 0x0289, 0x1951: 0x0040, + 0x1952: 0x0039, 0x1953: 0x0ee9, 0x1954: 0x1159, 0x1955: 0x0ef9, 0x1956: 0x0f09, 0x1957: 0x1199, + 0x1958: 0x0f31, 0x1959: 0x0249, 0x195a: 0x0f41, 0x195b: 0x0259, 0x195c: 0x0f51, 0x195d: 0x0359, + 0x195e: 0x0f61, 0x195f: 0x0f71, 0x1960: 0x00d9, 0x1961: 0x0f99, 0x1962: 0x2039, 0x1963: 0x0269, + 0x1964: 0x01d9, 0x1965: 0x0fa9, 0x1966: 0x0fb9, 0x1967: 0x1089, 0x1968: 0x0279, 0x1969: 0x0369, + 0x196a: 0x0289, 0x196b: 0x13d1, 0x196c: 0x0039, 0x196d: 0x0ee9, 0x196e: 0x1159, 0x196f: 0x0ef9, + 0x1970: 0x0f09, 0x1971: 0x1199, 0x1972: 0x0f31, 0x1973: 0x0249, 0x1974: 0x0f41, 0x1975: 0x0259, + 0x1976: 0x0f51, 0x1977: 0x0359, 0x1978: 0x0f61, 0x1979: 0x0f71, 0x197a: 0x00d9, 0x197b: 0x0f99, + 0x197c: 0x2039, 0x197d: 0x0269, 0x197e: 0x01d9, 0x197f: 0x0fa9, + // Block 0x66, offset 0x1980 + 0x1980: 0x0fb9, 0x1981: 0x1089, 0x1982: 0x0279, 0x1983: 0x0369, 0x1984: 0x0289, 0x1985: 0x13d1, + 0x1986: 0x0039, 0x1987: 0x0ee9, 0x1988: 0x1159, 0x1989: 0x0ef9, 0x198a: 0x0f09, 0x198b: 0x1199, + 0x198c: 0x0f31, 0x198d: 0x0249, 0x198e: 0x0f41, 0x198f: 0x0259, 0x1990: 0x0f51, 0x1991: 0x0359, + 0x1992: 0x0f61, 0x1993: 0x0f71, 0x1994: 0x00d9, 0x1995: 0x0f99, 0x1996: 0x2039, 0x1997: 0x0269, + 0x1998: 0x01d9, 0x1999: 0x0fa9, 0x199a: 0x0fb9, 0x199b: 0x1089, 0x199c: 0x0279, 0x199d: 0x0369, + 0x199e: 0x0289, 0x199f: 0x13d1, 0x19a0: 0x0039, 0x19a1: 0x0ee9, 0x19a2: 0x1159, 0x19a3: 0x0ef9, + 0x19a4: 0x0f09, 0x19a5: 0x1199, 0x19a6: 0x0f31, 0x19a7: 0x0249, 0x19a8: 0x0f41, 0x19a9: 0x0259, + 0x19aa: 0x0f51, 0x19ab: 0x0359, 0x19ac: 0x0f61, 0x19ad: 0x0f71, 0x19ae: 0x00d9, 0x19af: 0x0f99, + 0x19b0: 0x2039, 0x19b1: 0x0269, 0x19b2: 0x01d9, 0x19b3: 0x0fa9, 0x19b4: 0x0fb9, 0x19b5: 0x1089, + 0x19b6: 0x0279, 0x19b7: 0x0369, 0x19b8: 0x0289, 0x19b9: 0x13d1, 0x19ba: 0x0039, 0x19bb: 0x0ee9, + 0x19bc: 0x1159, 0x19bd: 0x0ef9, 0x19be: 0x0f09, 0x19bf: 0x1199, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0f31, 0x19c1: 0x0249, 0x19c2: 0x0f41, 0x19c3: 0x0259, 0x19c4: 0x0f51, 0x19c5: 0x0359, + 0x19c6: 0x0f61, 0x19c7: 0x0f71, 0x19c8: 0x00d9, 0x19c9: 0x0f99, 0x19ca: 0x2039, 0x19cb: 0x0269, + 0x19cc: 0x01d9, 0x19cd: 0x0fa9, 0x19ce: 0x0fb9, 0x19cf: 0x1089, 0x19d0: 0x0279, 0x19d1: 0x0369, + 0x19d2: 0x0289, 0x19d3: 0x13d1, 0x19d4: 0x0039, 0x19d5: 0x0ee9, 0x19d6: 0x1159, 0x19d7: 0x0ef9, + 0x19d8: 0x0f09, 0x19d9: 0x1199, 0x19da: 0x0f31, 0x19db: 0x0249, 0x19dc: 0x0f41, 0x19dd: 0x0259, + 0x19de: 0x0f51, 0x19df: 0x0359, 0x19e0: 0x0f61, 0x19e1: 0x0f71, 0x19e2: 0x00d9, 0x19e3: 0x0f99, + 0x19e4: 0x2039, 0x19e5: 0x0269, 0x19e6: 0x01d9, 0x19e7: 0x0fa9, 0x19e8: 0x0fb9, 0x19e9: 0x1089, + 0x19ea: 0x0279, 0x19eb: 0x0369, 0x19ec: 0x0289, 0x19ed: 0x13d1, 0x19ee: 0x0039, 0x19ef: 0x0ee9, + 0x19f0: 0x1159, 0x19f1: 0x0ef9, 0x19f2: 0x0f09, 0x19f3: 0x1199, 0x19f4: 0x0f31, 0x19f5: 0x0249, + 0x19f6: 0x0f41, 0x19f7: 0x0259, 0x19f8: 0x0f51, 0x19f9: 0x0359, 0x19fa: 0x0f61, 0x19fb: 0x0f71, + 0x19fc: 0x00d9, 0x19fd: 0x0f99, 0x19fe: 0x2039, 0x19ff: 0x0269, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x01d9, 0x1a01: 0x0fa9, 0x1a02: 0x0fb9, 0x1a03: 0x1089, 0x1a04: 0x0279, 0x1a05: 0x0369, + 0x1a06: 0x0289, 0x1a07: 0x13d1, 0x1a08: 0x0039, 0x1a09: 0x0ee9, 0x1a0a: 0x1159, 0x1a0b: 0x0ef9, + 0x1a0c: 0x0f09, 0x1a0d: 0x1199, 0x1a0e: 0x0f31, 0x1a0f: 0x0249, 0x1a10: 0x0f41, 0x1a11: 0x0259, + 0x1a12: 0x0f51, 0x1a13: 0x0359, 0x1a14: 0x0f61, 0x1a15: 0x0f71, 0x1a16: 0x00d9, 0x1a17: 0x0f99, + 0x1a18: 0x2039, 0x1a19: 0x0269, 0x1a1a: 0x01d9, 0x1a1b: 0x0fa9, 0x1a1c: 0x0fb9, 0x1a1d: 0x1089, + 0x1a1e: 0x0279, 0x1a1f: 0x0369, 0x1a20: 0x0289, 0x1a21: 0x13d1, 0x1a22: 0x0039, 0x1a23: 0x0ee9, + 0x1a24: 0x1159, 0x1a25: 0x0ef9, 0x1a26: 0x0f09, 0x1a27: 0x1199, 0x1a28: 0x0f31, 0x1a29: 0x0249, + 0x1a2a: 0x0f41, 0x1a2b: 0x0259, 0x1a2c: 0x0f51, 0x1a2d: 0x0359, 0x1a2e: 0x0f61, 0x1a2f: 0x0f71, + 0x1a30: 0x00d9, 0x1a31: 0x0f99, 0x1a32: 0x2039, 0x1a33: 0x0269, 0x1a34: 0x01d9, 0x1a35: 0x0fa9, + 0x1a36: 0x0fb9, 0x1a37: 0x1089, 0x1a38: 0x0279, 0x1a39: 0x0369, 0x1a3a: 0x0289, 0x1a3b: 0x13d1, + 0x1a3c: 0x0039, 0x1a3d: 0x0ee9, 0x1a3e: 0x1159, 0x1a3f: 0x0ef9, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x0f09, 0x1a41: 0x1199, 0x1a42: 0x0f31, 0x1a43: 0x0249, 0x1a44: 0x0f41, 0x1a45: 0x0259, + 0x1a46: 0x0f51, 0x1a47: 0x0359, 0x1a48: 0x0f61, 0x1a49: 0x0f71, 0x1a4a: 0x00d9, 0x1a4b: 0x0f99, + 0x1a4c: 0x2039, 0x1a4d: 0x0269, 0x1a4e: 0x01d9, 0x1a4f: 0x0fa9, 0x1a50: 0x0fb9, 0x1a51: 0x1089, + 0x1a52: 0x0279, 0x1a53: 0x0369, 0x1a54: 0x0289, 0x1a55: 0x13d1, 0x1a56: 0x0039, 0x1a57: 0x0ee9, + 0x1a58: 0x1159, 0x1a59: 0x0ef9, 0x1a5a: 0x0f09, 0x1a5b: 0x1199, 0x1a5c: 0x0f31, 0x1a5d: 0x0249, + 0x1a5e: 0x0f41, 0x1a5f: 0x0259, 0x1a60: 0x0f51, 0x1a61: 0x0359, 0x1a62: 0x0f61, 0x1a63: 0x0f71, + 0x1a64: 0x00d9, 0x1a65: 0x0f99, 0x1a66: 0x2039, 0x1a67: 0x0269, 0x1a68: 0x01d9, 0x1a69: 0x0fa9, + 0x1a6a: 0x0fb9, 0x1a6b: 0x1089, 0x1a6c: 0x0279, 0x1a6d: 0x0369, 0x1a6e: 0x0289, 0x1a6f: 0x13d1, + 0x1a70: 0x0039, 0x1a71: 0x0ee9, 0x1a72: 0x1159, 0x1a73: 0x0ef9, 0x1a74: 0x0f09, 0x1a75: 0x1199, + 0x1a76: 0x0f31, 0x1a77: 0x0249, 0x1a78: 0x0f41, 0x1a79: 0x0259, 0x1a7a: 0x0f51, 0x1a7b: 0x0359, + 0x1a7c: 0x0f61, 0x1a7d: 0x0f71, 0x1a7e: 0x00d9, 0x1a7f: 0x0f99, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x2039, 0x1a81: 0x0269, 0x1a82: 0x01d9, 0x1a83: 0x0fa9, 0x1a84: 0x0fb9, 0x1a85: 0x1089, + 0x1a86: 0x0279, 0x1a87: 0x0369, 0x1a88: 0x0289, 0x1a89: 0x13d1, 0x1a8a: 0x0039, 0x1a8b: 0x0ee9, + 0x1a8c: 0x1159, 0x1a8d: 0x0ef9, 0x1a8e: 0x0f09, 0x1a8f: 0x1199, 0x1a90: 0x0f31, 0x1a91: 0x0249, + 0x1a92: 0x0f41, 0x1a93: 0x0259, 0x1a94: 0x0f51, 0x1a95: 0x0359, 0x1a96: 0x0f61, 0x1a97: 0x0f71, + 0x1a98: 0x00d9, 0x1a99: 0x0f99, 0x1a9a: 0x2039, 0x1a9b: 0x0269, 0x1a9c: 0x01d9, 0x1a9d: 0x0fa9, + 0x1a9e: 0x0fb9, 0x1a9f: 0x1089, 0x1aa0: 0x0279, 0x1aa1: 0x0369, 0x1aa2: 0x0289, 0x1aa3: 0x13d1, + 0x1aa4: 0xba81, 0x1aa5: 0xba99, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0xbab1, 0x1aa9: 0x1099, + 0x1aaa: 0x10b1, 0x1aab: 0x10c9, 0x1aac: 0xbac9, 0x1aad: 0xbae1, 0x1aae: 0xbaf9, 0x1aaf: 0x1429, + 0x1ab0: 0x1a31, 0x1ab1: 0xbb11, 0x1ab2: 0xbb29, 0x1ab3: 0xbb41, 0x1ab4: 0xbb59, 0x1ab5: 0xbb71, + 0x1ab6: 0xbb89, 0x1ab7: 0x2109, 0x1ab8: 0x1111, 0x1ab9: 0x1429, 0x1aba: 0xbba1, 0x1abb: 0xbbb9, + 0x1abc: 0xbbd1, 0x1abd: 0x10e1, 0x1abe: 0x10f9, 0x1abf: 0xbbe9, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2079, 0x1ac1: 0xbc01, 0x1ac2: 0xbab1, 0x1ac3: 0x1099, 0x1ac4: 0x10b1, 0x1ac5: 0x10c9, + 0x1ac6: 0xbac9, 0x1ac7: 0xbae1, 0x1ac8: 0xbaf9, 0x1ac9: 0x1429, 0x1aca: 0x1a31, 0x1acb: 0xbb11, + 0x1acc: 0xbb29, 0x1acd: 0xbb41, 0x1ace: 0xbb59, 0x1acf: 0xbb71, 0x1ad0: 0xbb89, 0x1ad1: 0x2109, + 0x1ad2: 0x1111, 0x1ad3: 0xbba1, 0x1ad4: 0xbba1, 0x1ad5: 0xbbb9, 0x1ad6: 0xbbd1, 0x1ad7: 0x10e1, + 0x1ad8: 0x10f9, 0x1ad9: 0xbbe9, 0x1ada: 0x2079, 0x1adb: 0xbc21, 0x1adc: 0xbac9, 0x1add: 0x1429, + 0x1ade: 0xbb11, 0x1adf: 0x10e1, 0x1ae0: 0x1111, 0x1ae1: 0x2109, 0x1ae2: 0xbab1, 0x1ae3: 0x1099, + 0x1ae4: 0x10b1, 0x1ae5: 0x10c9, 0x1ae6: 0xbac9, 0x1ae7: 0xbae1, 0x1ae8: 0xbaf9, 0x1ae9: 0x1429, + 0x1aea: 0x1a31, 0x1aeb: 0xbb11, 0x1aec: 0xbb29, 0x1aed: 0xbb41, 0x1aee: 0xbb59, 0x1aef: 0xbb71, + 0x1af0: 0xbb89, 0x1af1: 0x2109, 0x1af2: 0x1111, 0x1af3: 0x1429, 0x1af4: 0xbba1, 0x1af5: 0xbbb9, + 0x1af6: 0xbbd1, 0x1af7: 0x10e1, 0x1af8: 0x10f9, 0x1af9: 0xbbe9, 0x1afa: 0x2079, 0x1afb: 0xbc01, + 0x1afc: 0xbab1, 0x1afd: 0x1099, 0x1afe: 0x10b1, 0x1aff: 0x10c9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xbac9, 0x1b01: 0xbae1, 0x1b02: 0xbaf9, 0x1b03: 0x1429, 0x1b04: 0x1a31, 0x1b05: 0xbb11, + 0x1b06: 0xbb29, 0x1b07: 0xbb41, 0x1b08: 0xbb59, 0x1b09: 0xbb71, 0x1b0a: 0xbb89, 0x1b0b: 0x2109, + 0x1b0c: 0x1111, 0x1b0d: 0xbba1, 0x1b0e: 0xbba1, 0x1b0f: 0xbbb9, 0x1b10: 0xbbd1, 0x1b11: 0x10e1, + 0x1b12: 0x10f9, 0x1b13: 0xbbe9, 0x1b14: 0x2079, 0x1b15: 0xbc21, 0x1b16: 0xbac9, 0x1b17: 0x1429, + 0x1b18: 0xbb11, 0x1b19: 0x10e1, 0x1b1a: 0x1111, 0x1b1b: 0x2109, 0x1b1c: 0xbab1, 0x1b1d: 0x1099, + 0x1b1e: 0x10b1, 0x1b1f: 0x10c9, 0x1b20: 0xbac9, 0x1b21: 0xbae1, 0x1b22: 0xbaf9, 0x1b23: 0x1429, + 0x1b24: 0x1a31, 0x1b25: 0xbb11, 0x1b26: 0xbb29, 0x1b27: 0xbb41, 0x1b28: 0xbb59, 0x1b29: 0xbb71, + 0x1b2a: 0xbb89, 0x1b2b: 0x2109, 0x1b2c: 0x1111, 0x1b2d: 0x1429, 0x1b2e: 0xbba1, 0x1b2f: 0xbbb9, + 0x1b30: 0xbbd1, 0x1b31: 0x10e1, 0x1b32: 0x10f9, 0x1b33: 0xbbe9, 0x1b34: 0x2079, 0x1b35: 0xbc01, + 0x1b36: 0xbab1, 0x1b37: 0x1099, 0x1b38: 0x10b1, 0x1b39: 0x10c9, 0x1b3a: 0xbac9, 0x1b3b: 0xbae1, + 0x1b3c: 0xbaf9, 0x1b3d: 0x1429, 0x1b3e: 0x1a31, 0x1b3f: 0xbb11, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbb29, 0x1b41: 0xbb41, 0x1b42: 0xbb59, 0x1b43: 0xbb71, 0x1b44: 0xbb89, 0x1b45: 0x2109, + 0x1b46: 0x1111, 0x1b47: 0xbba1, 0x1b48: 0xbba1, 0x1b49: 0xbbb9, 0x1b4a: 0xbbd1, 0x1b4b: 0x10e1, + 0x1b4c: 0x10f9, 0x1b4d: 0xbbe9, 0x1b4e: 0x2079, 0x1b4f: 0xbc21, 0x1b50: 0xbac9, 0x1b51: 0x1429, + 0x1b52: 0xbb11, 0x1b53: 0x10e1, 0x1b54: 0x1111, 0x1b55: 0x2109, 0x1b56: 0xbab1, 0x1b57: 0x1099, + 0x1b58: 0x10b1, 0x1b59: 0x10c9, 0x1b5a: 0xbac9, 0x1b5b: 0xbae1, 0x1b5c: 0xbaf9, 0x1b5d: 0x1429, + 0x1b5e: 0x1a31, 0x1b5f: 0xbb11, 0x1b60: 0xbb29, 0x1b61: 0xbb41, 0x1b62: 0xbb59, 0x1b63: 0xbb71, + 0x1b64: 0xbb89, 0x1b65: 0x2109, 0x1b66: 0x1111, 0x1b67: 0x1429, 0x1b68: 0xbba1, 0x1b69: 0xbbb9, + 0x1b6a: 0xbbd1, 0x1b6b: 0x10e1, 0x1b6c: 0x10f9, 0x1b6d: 0xbbe9, 0x1b6e: 0x2079, 0x1b6f: 0xbc01, + 0x1b70: 0xbab1, 0x1b71: 0x1099, 0x1b72: 0x10b1, 0x1b73: 0x10c9, 0x1b74: 0xbac9, 0x1b75: 0xbae1, + 0x1b76: 0xbaf9, 0x1b77: 0x1429, 0x1b78: 0x1a31, 0x1b79: 0xbb11, 0x1b7a: 0xbb29, 0x1b7b: 0xbb41, + 0x1b7c: 0xbb59, 0x1b7d: 0xbb71, 0x1b7e: 0xbb89, 0x1b7f: 0x2109, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x1111, 0x1b81: 0xbba1, 0x1b82: 0xbba1, 0x1b83: 0xbbb9, 0x1b84: 0xbbd1, 0x1b85: 0x10e1, + 0x1b86: 0x10f9, 0x1b87: 0xbbe9, 0x1b88: 0x2079, 0x1b89: 0xbc21, 0x1b8a: 0xbac9, 0x1b8b: 0x1429, + 0x1b8c: 0xbb11, 0x1b8d: 0x10e1, 0x1b8e: 0x1111, 0x1b8f: 0x2109, 0x1b90: 0xbab1, 0x1b91: 0x1099, + 0x1b92: 0x10b1, 0x1b93: 0x10c9, 0x1b94: 0xbac9, 0x1b95: 0xbae1, 0x1b96: 0xbaf9, 0x1b97: 0x1429, + 0x1b98: 0x1a31, 0x1b99: 0xbb11, 0x1b9a: 0xbb29, 0x1b9b: 0xbb41, 0x1b9c: 0xbb59, 0x1b9d: 0xbb71, + 0x1b9e: 0xbb89, 0x1b9f: 0x2109, 0x1ba0: 0x1111, 0x1ba1: 0x1429, 0x1ba2: 0xbba1, 0x1ba3: 0xbbb9, + 0x1ba4: 0xbbd1, 0x1ba5: 0x10e1, 0x1ba6: 0x10f9, 0x1ba7: 0xbbe9, 0x1ba8: 0x2079, 0x1ba9: 0xbc01, + 0x1baa: 0xbab1, 0x1bab: 0x1099, 0x1bac: 0x10b1, 0x1bad: 0x10c9, 0x1bae: 0xbac9, 0x1baf: 0xbae1, + 0x1bb0: 0xbaf9, 0x1bb1: 0x1429, 0x1bb2: 0x1a31, 0x1bb3: 0xbb11, 0x1bb4: 0xbb29, 0x1bb5: 0xbb41, + 0x1bb6: 0xbb59, 0x1bb7: 0xbb71, 0x1bb8: 0xbb89, 0x1bb9: 0x2109, 0x1bba: 0x1111, 0x1bbb: 0xbba1, + 0x1bbc: 0xbba1, 0x1bbd: 0xbbb9, 0x1bbe: 0xbbd1, 0x1bbf: 0x10e1, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x10f9, 0x1bc1: 0xbbe9, 0x1bc2: 0x2079, 0x1bc3: 0xbc21, 0x1bc4: 0xbac9, 0x1bc5: 0x1429, + 0x1bc6: 0xbb11, 0x1bc7: 0x10e1, 0x1bc8: 0x1111, 0x1bc9: 0x2109, 0x1bca: 0xbc41, 0x1bcb: 0xbc41, + 0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x1f41, 0x1bcf: 0x00c9, 0x1bd0: 0x0069, 0x1bd1: 0x0079, + 0x1bd2: 0x1f51, 0x1bd3: 0x1f61, 0x1bd4: 0x1f71, 0x1bd5: 0x1f81, 0x1bd6: 0x1f91, 0x1bd7: 0x1fa1, + 0x1bd8: 0x1f41, 0x1bd9: 0x00c9, 0x1bda: 0x0069, 0x1bdb: 0x0079, 0x1bdc: 0x1f51, 0x1bdd: 0x1f61, + 0x1bde: 0x1f71, 0x1bdf: 0x1f81, 0x1be0: 0x1f91, 0x1be1: 0x1fa1, 0x1be2: 0x1f41, 0x1be3: 0x00c9, + 0x1be4: 0x0069, 0x1be5: 0x0079, 0x1be6: 0x1f51, 0x1be7: 0x1f61, 0x1be8: 0x1f71, 0x1be9: 0x1f81, + 0x1bea: 0x1f91, 0x1beb: 0x1fa1, 0x1bec: 0x1f41, 0x1bed: 0x00c9, 0x1bee: 0x0069, 0x1bef: 0x0079, + 0x1bf0: 0x1f51, 0x1bf1: 0x1f61, 0x1bf2: 0x1f71, 0x1bf3: 0x1f81, 0x1bf4: 0x1f91, 0x1bf5: 0x1fa1, + 0x1bf6: 0x1f41, 0x1bf7: 0x00c9, 0x1bf8: 0x0069, 0x1bf9: 0x0079, 0x1bfa: 0x1f51, 0x1bfb: 0x1f61, + 0x1bfc: 0x1f71, 0x1bfd: 0x1f81, 0x1bfe: 0x1f91, 0x1bff: 0x1fa1, + // Block 0x70, offset 0x1c00 + 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: 0x8b05, 0x1c1f: 0x8b05, 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: 0xb189, 0x1c41: 0xb1a1, 0x1c42: 0xb201, 0x1c43: 0xb249, 0x1c44: 0x0040, 0x1c45: 0xb411, + 0x1c46: 0xb291, 0x1c47: 0xb219, 0x1c48: 0xb309, 0x1c49: 0xb429, 0x1c4a: 0xb399, 0x1c4b: 0xb3b1, + 0x1c4c: 0xb3c9, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0xb369, 0x1c51: 0xb2d9, + 0x1c52: 0xb381, 0x1c53: 0xb279, 0x1c54: 0xb2c1, 0x1c55: 0xb1d1, 0x1c56: 0xb1e9, 0x1c57: 0xb231, + 0x1c58: 0xb261, 0x1c59: 0xb2f1, 0x1c5a: 0xb321, 0x1c5b: 0xb351, 0x1c5c: 0xbc59, 0x1c5d: 0x7949, + 0x1c5e: 0xbc71, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, + 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0x0040, 0x1c69: 0xb429, + 0x1c6a: 0xb399, 0x1c6b: 0xb3b1, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, + 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, + 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0x0040, 0x1c7b: 0xb351, + 0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0xb201, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040, + 0x1c86: 0x0040, 0x1c87: 0xb219, 0x1c88: 0x0040, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, + 0x1c8c: 0x0040, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0x0040, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0x0040, 0x1c94: 0xb2c1, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0xb231, + 0x1c98: 0x0040, 0x1c99: 0xb2f1, 0x1c9a: 0x0040, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x7949, + 0x1c9e: 0x0040, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0x0040, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, + 0x1cbc: 0xbc59, 0x1cbd: 0x0040, 0x1cbe: 0xbc71, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0xb189, 0x1cc1: 0xb1a1, 0x1cc2: 0xb201, 0x1cc3: 0xb249, 0x1cc4: 0xb3f9, 0x1cc5: 0xb411, + 0x1cc6: 0xb291, 0x1cc7: 0xb219, 0x1cc8: 0xb309, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0xb3c9, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0xb369, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0xb279, 0x1cd4: 0xb2c1, 0x1cd5: 0xb1d1, 0x1cd6: 0xb1e9, 0x1cd7: 0xb231, + 0x1cd8: 0xb261, 0x1cd9: 0xb2f1, 0x1cda: 0xb321, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x0040, + 0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0xb249, + 0x1ce4: 0x0040, 0x1ce5: 0xb411, 0x1ce6: 0xb291, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0x0040, 0x1ceb: 0xb3b1, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0xb279, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0xb261, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0040, 0x1d01: 0xbca2, 0x1d02: 0xbcba, 0x1d03: 0xbcd2, 0x1d04: 0xbcea, 0x1d05: 0xbd02, + 0x1d06: 0xbd1a, 0x1d07: 0xbd32, 0x1d08: 0xbd4a, 0x1d09: 0xbd62, 0x1d0a: 0xbd7a, 0x1d0b: 0x0018, + 0x1d0c: 0x0018, 0x1d0d: 0x0040, 0x1d0e: 0x0040, 0x1d0f: 0x0040, 0x1d10: 0xbd92, 0x1d11: 0xbdb2, + 0x1d12: 0xbdd2, 0x1d13: 0xbdf2, 0x1d14: 0xbe12, 0x1d15: 0xbe32, 0x1d16: 0xbe52, 0x1d17: 0xbe72, + 0x1d18: 0xbe92, 0x1d19: 0xbeb2, 0x1d1a: 0xbed2, 0x1d1b: 0xbef2, 0x1d1c: 0xbf12, 0x1d1d: 0xbf32, + 0x1d1e: 0xbf52, 0x1d1f: 0xbf72, 0x1d20: 0xbf92, 0x1d21: 0xbfb2, 0x1d22: 0xbfd2, 0x1d23: 0xbff2, + 0x1d24: 0xc012, 0x1d25: 0xc032, 0x1d26: 0xc052, 0x1d27: 0xc072, 0x1d28: 0xc092, 0x1d29: 0xc0b2, + 0x1d2a: 0xc0d1, 0x1d2b: 0x1159, 0x1d2c: 0x0269, 0x1d2d: 0x6671, 0x1d2e: 0xc111, 0x1d2f: 0x0040, + 0x1d30: 0x0039, 0x1d31: 0x0ee9, 0x1d32: 0x1159, 0x1d33: 0x0ef9, 0x1d34: 0x0f09, 0x1d35: 0x1199, + 0x1d36: 0x0f31, 0x1d37: 0x0249, 0x1d38: 0x0f41, 0x1d39: 0x0259, 0x1d3a: 0x0f51, 0x1d3b: 0x0359, + 0x1d3c: 0x0f61, 0x1d3d: 0x0f71, 0x1d3e: 0x00d9, 0x1d3f: 0x0f99, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x2039, 0x1d41: 0x0269, 0x1d42: 0x01d9, 0x1d43: 0x0fa9, 0x1d44: 0x0fb9, 0x1d45: 0x1089, + 0x1d46: 0x0279, 0x1d47: 0x0369, 0x1d48: 0x0289, 0x1d49: 0x13d1, 0x1d4a: 0xc129, 0x1d4b: 0x65b1, + 0x1d4c: 0xc141, 0x1d4d: 0x1441, 0x1d4e: 0xc159, 0x1d4f: 0xc179, 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: 0xc191, 0x1d6b: 0xc1a9, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040, + 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: 0xc1d9, 0x1d81: 0xc211, 0x1d82: 0xc249, 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: 0xc269, 0x1d91: 0xc289, + 0x1d92: 0xc2a9, 0x1d93: 0xc2c9, 0x1d94: 0xc2e9, 0x1d95: 0xc309, 0x1d96: 0xc329, 0x1d97: 0xc349, + 0x1d98: 0xc369, 0x1d99: 0xc389, 0x1d9a: 0xc3a9, 0x1d9b: 0xc3c9, 0x1d9c: 0xc3e9, 0x1d9d: 0xc409, + 0x1d9e: 0xc429, 0x1d9f: 0xc449, 0x1da0: 0xc469, 0x1da1: 0xc489, 0x1da2: 0xc4a9, 0x1da3: 0xc4c9, + 0x1da4: 0xc4e9, 0x1da5: 0xc509, 0x1da6: 0xc529, 0x1da7: 0xc549, 0x1da8: 0xc569, 0x1da9: 0xc589, + 0x1daa: 0xc5a9, 0x1dab: 0xc5c9, 0x1dac: 0xc5e9, 0x1dad: 0xc609, 0x1dae: 0xc629, 0x1daf: 0xc649, + 0x1db0: 0xc669, 0x1db1: 0xc689, 0x1db2: 0xc6a9, 0x1db3: 0xc6c9, 0x1db4: 0xc6e9, 0x1db5: 0xc709, + 0x1db6: 0xc729, 0x1db7: 0xc749, 0x1db8: 0xc769, 0x1db9: 0xc789, 0x1dba: 0xc7a9, 0x1dbb: 0xc7c9, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xcaf9, 0x1dc1: 0xcb19, 0x1dc2: 0xcb39, 0x1dc3: 0x8b1d, 0x1dc4: 0xcb59, 0x1dc5: 0xcb79, + 0x1dc6: 0xcb99, 0x1dc7: 0xcbb9, 0x1dc8: 0xcbd9, 0x1dc9: 0xcbf9, 0x1dca: 0xcc19, 0x1dcb: 0xcc39, + 0x1dcc: 0xcc59, 0x1dcd: 0x8b3d, 0x1dce: 0xcc79, 0x1dcf: 0xcc99, 0x1dd0: 0xccb9, 0x1dd1: 0xccd9, + 0x1dd2: 0x8b5d, 0x1dd3: 0xccf9, 0x1dd4: 0xcd19, 0x1dd5: 0xc429, 0x1dd6: 0x8b7d, 0x1dd7: 0xcd39, + 0x1dd8: 0xcd59, 0x1dd9: 0xcd79, 0x1dda: 0xcd99, 0x1ddb: 0xcdb9, 0x1ddc: 0x8b9d, 0x1ddd: 0xcdd9, + 0x1dde: 0xcdf9, 0x1ddf: 0xce19, 0x1de0: 0xce39, 0x1de1: 0xce59, 0x1de2: 0xc789, 0x1de3: 0xce79, + 0x1de4: 0xce99, 0x1de5: 0xceb9, 0x1de6: 0xced9, 0x1de7: 0xcef9, 0x1de8: 0xcf19, 0x1de9: 0xcf39, + 0x1dea: 0xcf59, 0x1deb: 0xcf79, 0x1dec: 0xcf99, 0x1ded: 0xcfb9, 0x1dee: 0xcfd9, 0x1def: 0xcff9, + 0x1df0: 0xd019, 0x1df1: 0xd039, 0x1df2: 0xd039, 0x1df3: 0xd039, 0x1df4: 0x8bbd, 0x1df5: 0xd059, + 0x1df6: 0xd079, 0x1df7: 0xd099, 0x1df8: 0x8bdd, 0x1df9: 0xd0b9, 0x1dfa: 0xd0d9, 0x1dfb: 0xd0f9, + 0x1dfc: 0xd119, 0x1dfd: 0xd139, 0x1dfe: 0xd159, 0x1dff: 0xd179, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xd199, 0x1e01: 0xd1b9, 0x1e02: 0xd1d9, 0x1e03: 0xd1f9, 0x1e04: 0xd219, 0x1e05: 0xd239, + 0x1e06: 0xd239, 0x1e07: 0xd259, 0x1e08: 0xd279, 0x1e09: 0xd299, 0x1e0a: 0xd2b9, 0x1e0b: 0xd2d9, + 0x1e0c: 0xd2f9, 0x1e0d: 0xd319, 0x1e0e: 0xd339, 0x1e0f: 0xd359, 0x1e10: 0xd379, 0x1e11: 0xd399, + 0x1e12: 0xd3b9, 0x1e13: 0xd3d9, 0x1e14: 0xd3f9, 0x1e15: 0xd419, 0x1e16: 0xd439, 0x1e17: 0xd459, + 0x1e18: 0xd479, 0x1e19: 0x8bfd, 0x1e1a: 0xd499, 0x1e1b: 0xd4b9, 0x1e1c: 0xd4d9, 0x1e1d: 0xc309, + 0x1e1e: 0xd4f9, 0x1e1f: 0xd519, 0x1e20: 0x8c1d, 0x1e21: 0x8c3d, 0x1e22: 0xd539, 0x1e23: 0xd559, + 0x1e24: 0xd579, 0x1e25: 0xd599, 0x1e26: 0xd5b9, 0x1e27: 0xd5d9, 0x1e28: 0x2040, 0x1e29: 0xd5f9, + 0x1e2a: 0xd619, 0x1e2b: 0xd619, 0x1e2c: 0x8c5d, 0x1e2d: 0xd639, 0x1e2e: 0xd659, 0x1e2f: 0xd679, + 0x1e30: 0xd699, 0x1e31: 0x8c7d, 0x1e32: 0xd6b9, 0x1e33: 0xd6d9, 0x1e34: 0x2040, 0x1e35: 0xd6f9, + 0x1e36: 0xd719, 0x1e37: 0xd739, 0x1e38: 0xd759, 0x1e39: 0xd779, 0x1e3a: 0xd799, 0x1e3b: 0x8c9d, + 0x1e3c: 0xd7b9, 0x1e3d: 0x8cbd, 0x1e3e: 0xd7d9, 0x1e3f: 0xd7f9, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd819, 0x1e41: 0xd839, 0x1e42: 0xd859, 0x1e43: 0xd879, 0x1e44: 0xd899, 0x1e45: 0xd8b9, + 0x1e46: 0xd8d9, 0x1e47: 0xd8f9, 0x1e48: 0xd919, 0x1e49: 0x8cdd, 0x1e4a: 0xd939, 0x1e4b: 0xd959, + 0x1e4c: 0xd979, 0x1e4d: 0xd999, 0x1e4e: 0xd9b9, 0x1e4f: 0x8cfd, 0x1e50: 0xd9d9, 0x1e51: 0x8d1d, + 0x1e52: 0x8d3d, 0x1e53: 0xd9f9, 0x1e54: 0xda19, 0x1e55: 0xda19, 0x1e56: 0xda39, 0x1e57: 0x8d5d, + 0x1e58: 0x8d7d, 0x1e59: 0xda59, 0x1e5a: 0xda79, 0x1e5b: 0xda99, 0x1e5c: 0xdab9, 0x1e5d: 0xdad9, + 0x1e5e: 0xdaf9, 0x1e5f: 0xdb19, 0x1e60: 0xdb39, 0x1e61: 0xdb59, 0x1e62: 0xdb79, 0x1e63: 0xdb99, + 0x1e64: 0x8d9d, 0x1e65: 0xdbb9, 0x1e66: 0xdbd9, 0x1e67: 0xdbf9, 0x1e68: 0xdc19, 0x1e69: 0xdbf9, + 0x1e6a: 0xdc39, 0x1e6b: 0xdc59, 0x1e6c: 0xdc79, 0x1e6d: 0xdc99, 0x1e6e: 0xdcb9, 0x1e6f: 0xdcd9, + 0x1e70: 0xdcf9, 0x1e71: 0xdd19, 0x1e72: 0xdd39, 0x1e73: 0xdd59, 0x1e74: 0xdd79, 0x1e75: 0xdd99, + 0x1e76: 0xddb9, 0x1e77: 0xddd9, 0x1e78: 0x8dbd, 0x1e79: 0xddf9, 0x1e7a: 0xde19, 0x1e7b: 0xde39, + 0x1e7c: 0xde59, 0x1e7d: 0xde79, 0x1e7e: 0x8ddd, 0x1e7f: 0xde99, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xe599, 0x1e81: 0xe5b9, 0x1e82: 0xe5d9, 0x1e83: 0xe5f9, 0x1e84: 0xe619, 0x1e85: 0xe639, + 0x1e86: 0x8efd, 0x1e87: 0xe659, 0x1e88: 0xe679, 0x1e89: 0xe699, 0x1e8a: 0xe6b9, 0x1e8b: 0xe6d9, + 0x1e8c: 0xe6f9, 0x1e8d: 0x8f1d, 0x1e8e: 0xe719, 0x1e8f: 0xe739, 0x1e90: 0x8f3d, 0x1e91: 0x8f5d, + 0x1e92: 0xe759, 0x1e93: 0xe779, 0x1e94: 0xe799, 0x1e95: 0xe7b9, 0x1e96: 0xe7d9, 0x1e97: 0xe7f9, + 0x1e98: 0xe819, 0x1e99: 0xe839, 0x1e9a: 0xe859, 0x1e9b: 0x8f7d, 0x1e9c: 0xe879, 0x1e9d: 0x8f9d, + 0x1e9e: 0xe899, 0x1e9f: 0x2040, 0x1ea0: 0xe8b9, 0x1ea1: 0xe8d9, 0x1ea2: 0xe8f9, 0x1ea3: 0x8fbd, + 0x1ea4: 0xe919, 0x1ea5: 0xe939, 0x1ea6: 0x8fdd, 0x1ea7: 0x8ffd, 0x1ea8: 0xe959, 0x1ea9: 0xe979, + 0x1eaa: 0xe999, 0x1eab: 0xe9b9, 0x1eac: 0xe9d9, 0x1ead: 0xe9d9, 0x1eae: 0xe9f9, 0x1eaf: 0xea19, + 0x1eb0: 0xea39, 0x1eb1: 0xea59, 0x1eb2: 0xea79, 0x1eb3: 0xea99, 0x1eb4: 0xeab9, 0x1eb5: 0x901d, + 0x1eb6: 0xead9, 0x1eb7: 0x903d, 0x1eb8: 0xeaf9, 0x1eb9: 0x905d, 0x1eba: 0xeb19, 0x1ebb: 0x907d, + 0x1ebc: 0x909d, 0x1ebd: 0x90bd, 0x1ebe: 0xeb39, 0x1ebf: 0xeb59, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xeb79, 0x1ec1: 0x90dd, 0x1ec2: 0x90fd, 0x1ec3: 0x911d, 0x1ec4: 0x913d, 0x1ec5: 0xeb99, + 0x1ec6: 0xebb9, 0x1ec7: 0xebb9, 0x1ec8: 0xebd9, 0x1ec9: 0xebf9, 0x1eca: 0xec19, 0x1ecb: 0xec39, + 0x1ecc: 0xec59, 0x1ecd: 0x915d, 0x1ece: 0xec79, 0x1ecf: 0xec99, 0x1ed0: 0xecb9, 0x1ed1: 0xecd9, + 0x1ed2: 0x917d, 0x1ed3: 0xecf9, 0x1ed4: 0x919d, 0x1ed5: 0x91bd, 0x1ed6: 0xed19, 0x1ed7: 0xed39, + 0x1ed8: 0xed59, 0x1ed9: 0xed79, 0x1eda: 0xed99, 0x1edb: 0xedb9, 0x1edc: 0x91dd, 0x1edd: 0x91fd, + 0x1ede: 0x921d, 0x1edf: 0x2040, 0x1ee0: 0xedd9, 0x1ee1: 0x923d, 0x1ee2: 0xedf9, 0x1ee3: 0xee19, + 0x1ee4: 0xee39, 0x1ee5: 0x925d, 0x1ee6: 0xee59, 0x1ee7: 0xee79, 0x1ee8: 0xee99, 0x1ee9: 0xeeb9, + 0x1eea: 0xeed9, 0x1eeb: 0x927d, 0x1eec: 0xeef9, 0x1eed: 0xef19, 0x1eee: 0xef39, 0x1eef: 0xef59, + 0x1ef0: 0xef79, 0x1ef1: 0xef99, 0x1ef2: 0x929d, 0x1ef3: 0x92bd, 0x1ef4: 0xefb9, 0x1ef5: 0x92dd, + 0x1ef6: 0xefd9, 0x1ef7: 0x92fd, 0x1ef8: 0xeff9, 0x1ef9: 0xf019, 0x1efa: 0xf039, 0x1efb: 0x931d, + 0x1efc: 0x933d, 0x1efd: 0xf059, 0x1efe: 0x935d, 0x1eff: 0xf079, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xf6b9, 0x1f01: 0xf6d9, 0x1f02: 0xf6f9, 0x1f03: 0xf719, 0x1f04: 0xf739, 0x1f05: 0x951d, + 0x1f06: 0xf759, 0x1f07: 0xf779, 0x1f08: 0xf799, 0x1f09: 0xf7b9, 0x1f0a: 0xf7d9, 0x1f0b: 0x953d, + 0x1f0c: 0x955d, 0x1f0d: 0xf7f9, 0x1f0e: 0xf819, 0x1f0f: 0xf839, 0x1f10: 0xf859, 0x1f11: 0xf879, + 0x1f12: 0xf899, 0x1f13: 0x957d, 0x1f14: 0xf8b9, 0x1f15: 0xf8d9, 0x1f16: 0xf8f9, 0x1f17: 0xf919, + 0x1f18: 0x959d, 0x1f19: 0x95bd, 0x1f1a: 0xf939, 0x1f1b: 0xf959, 0x1f1c: 0xf979, 0x1f1d: 0x95dd, + 0x1f1e: 0xf999, 0x1f1f: 0xf9b9, 0x1f20: 0x6815, 0x1f21: 0x95fd, 0x1f22: 0xf9d9, 0x1f23: 0xf9f9, + 0x1f24: 0xfa19, 0x1f25: 0x961d, 0x1f26: 0xfa39, 0x1f27: 0xfa59, 0x1f28: 0xfa79, 0x1f29: 0xfa99, + 0x1f2a: 0xfab9, 0x1f2b: 0xfad9, 0x1f2c: 0xfaf9, 0x1f2d: 0x963d, 0x1f2e: 0xfb19, 0x1f2f: 0xfb39, + 0x1f30: 0xfb59, 0x1f31: 0x965d, 0x1f32: 0xfb79, 0x1f33: 0xfb99, 0x1f34: 0xfbb9, 0x1f35: 0xfbd9, + 0x1f36: 0x7b35, 0x1f37: 0x967d, 0x1f38: 0xfbf9, 0x1f39: 0xfc19, 0x1f3a: 0xfc39, 0x1f3b: 0x969d, + 0x1f3c: 0xfc59, 0x1f3d: 0x96bd, 0x1f3e: 0xfc79, 0x1f3f: 0xfc79, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xfc99, 0x1f41: 0x96dd, 0x1f42: 0xfcb9, 0x1f43: 0xfcd9, 0x1f44: 0xfcf9, 0x1f45: 0xfd19, + 0x1f46: 0xfd39, 0x1f47: 0xfd59, 0x1f48: 0xfd79, 0x1f49: 0x96fd, 0x1f4a: 0xfd99, 0x1f4b: 0xfdb9, + 0x1f4c: 0xfdd9, 0x1f4d: 0xfdf9, 0x1f4e: 0xfe19, 0x1f4f: 0xfe39, 0x1f50: 0x971d, 0x1f51: 0xfe59, + 0x1f52: 0x973d, 0x1f53: 0x975d, 0x1f54: 0x977d, 0x1f55: 0xfe79, 0x1f56: 0xfe99, 0x1f57: 0xfeb9, + 0x1f58: 0xfed9, 0x1f59: 0xfef9, 0x1f5a: 0xff19, 0x1f5b: 0xff39, 0x1f5c: 0xff59, 0x1f5d: 0x979d, + 0x1f5e: 0x0040, 0x1f5f: 0x0040, 0x1f60: 0x0040, 0x1f61: 0x0040, 0x1f62: 0x0040, 0x1f63: 0x0040, + 0x1f64: 0x0040, 0x1f65: 0x0040, 0x1f66: 0x0040, 0x1f67: 0x0040, 0x1f68: 0x0040, 0x1f69: 0x0040, + 0x1f6a: 0x0040, 0x1f6b: 0x0040, 0x1f6c: 0x0040, 0x1f6d: 0x0040, 0x1f6e: 0x0040, 0x1f6f: 0x0040, + 0x1f70: 0x0040, 0x1f71: 0x0040, 0x1f72: 0x0040, 0x1f73: 0x0040, 0x1f74: 0x0040, 0x1f75: 0x0040, + 0x1f76: 0x0040, 0x1f77: 0x0040, 0x1f78: 0x0040, 0x1f79: 0x0040, 0x1f7a: 0x0040, 0x1f7b: 0x0040, + 0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040, +} + +// idnaIndex: 35 blocks, 2240 entries, 4480 bytes +// Block 0 is the zero block. +var idnaIndex = [2240]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7c, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7d, 0xca: 0x7e, 0xcb: 0x07, 0xcc: 0x7f, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x80, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x81, 0xd6: 0x82, 0xd7: 0x83, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x84, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, + // Block 0x4, offset 0x100 + 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x13, 0x126: 0x14, 0x127: 0x15, + 0x128: 0x16, 0x129: 0x17, 0x12a: 0x18, 0x12b: 0x19, 0x12c: 0x1a, 0x12d: 0x1b, 0x12e: 0x1c, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1d, 0x132: 0x1e, 0x133: 0x1f, 0x134: 0x8f, 0x135: 0x20, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x21, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x22, 0x13e: 0x23, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x24, 0x175: 0x25, 0x176: 0x26, 0x177: 0xc3, + 0x178: 0x27, 0x179: 0x27, 0x17a: 0x28, 0x17b: 0x27, 0x17c: 0xc4, 0x17d: 0x29, 0x17e: 0x2a, 0x17f: 0x2b, + // Block 0x6, offset 0x180 + 0x180: 0x2c, 0x181: 0x2d, 0x182: 0x2e, 0x183: 0xc5, 0x184: 0x2f, 0x185: 0x30, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xca, + 0x190: 0xcb, 0x191: 0x31, 0x192: 0x32, 0x193: 0x33, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcc, 0x1a9: 0xcd, 0x1aa: 0x9b, 0x1ab: 0xce, 0x1ac: 0x9b, 0x1ad: 0xcf, 0x1ae: 0xd0, 0x1af: 0xd1, + 0x1b0: 0xd2, 0x1b1: 0x34, 0x1b2: 0x27, 0x1b3: 0x35, 0x1b4: 0xd3, 0x1b5: 0xd4, 0x1b6: 0xd5, 0x1b7: 0xd6, + 0x1b8: 0xd7, 0x1b9: 0xd8, 0x1ba: 0xd9, 0x1bb: 0xda, 0x1bc: 0xdb, 0x1bd: 0xdc, 0x1be: 0xdd, 0x1bf: 0x36, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x37, 0x1c1: 0xde, 0x1c2: 0xdf, 0x1c3: 0xe0, 0x1c4: 0xe1, 0x1c5: 0x38, 0x1c6: 0x39, 0x1c7: 0xe2, + 0x1c8: 0xe3, 0x1c9: 0x3a, 0x1ca: 0x3b, 0x1cb: 0x3c, 0x1cc: 0x3d, 0x1cd: 0x3e, 0x1ce: 0x3f, 0x1cf: 0x40, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe4, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe5, 0x2d3: 0xe6, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe7, 0x2d9: 0x41, 0x2da: 0x42, 0x2db: 0xe8, 0x2dc: 0x43, 0x2dd: 0x44, 0x2de: 0x45, 0x2df: 0xe9, + 0x2e0: 0xea, 0x2e1: 0xeb, 0x2e2: 0xec, 0x2e3: 0xed, 0x2e4: 0xee, 0x2e5: 0xef, 0x2e6: 0xf0, 0x2e7: 0xf1, + 0x2e8: 0xf2, 0x2e9: 0xf3, 0x2ea: 0xf4, 0x2eb: 0xf5, 0x2ec: 0xf6, 0x2ed: 0xf7, 0x2ee: 0xf8, 0x2ef: 0xf9, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xfa, 0x31f: 0xfb, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff, + 0x3a8: 0x46, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x47, 0x3ac: 0x48, 0x3ad: 0x49, 0x3ae: 0x4a, 0x3af: 0x4b, + 0x3b0: 0x102, 0x3b1: 0x4c, 0x3b2: 0x4d, 0x3b3: 0x4e, 0x3b4: 0x4f, 0x3b5: 0x50, 0x3b6: 0x103, 0x3b7: 0x51, + 0x3b8: 0x52, 0x3b9: 0x53, 0x3ba: 0x54, 0x3bb: 0x55, 0x3bc: 0x56, 0x3bd: 0x57, 0x3be: 0x58, 0x3bf: 0x59, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0x9f, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9b, 0x3c6: 0x108, 0x3c7: 0x109, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f, + 0x3d0: 0x110, 0x3d1: 0x9f, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xba, 0x3e6: 0x11c, 0x3e7: 0x11d, + 0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5a, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5b, 0x3ef: 0xba, + 0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x127, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba, + // Block 0x10, offset 0x400 + 0x400: 0x128, 0x401: 0x129, 0x402: 0x12a, 0x403: 0x12b, 0x404: 0x12c, 0x405: 0x12d, 0x406: 0x12e, 0x407: 0x12f, + 0x408: 0x130, 0x409: 0xba, 0x40a: 0x131, 0x40b: 0x132, 0x40c: 0x5c, 0x40d: 0x5d, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x133, 0x411: 0x134, 0x412: 0x135, 0x413: 0x136, 0x414: 0xba, 0x415: 0xba, 0x416: 0x137, 0x417: 0x138, + 0x418: 0x139, 0x419: 0x13a, 0x41a: 0x13b, 0x41b: 0x13c, 0x41c: 0x13d, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0xba, 0x421: 0xba, 0x422: 0x13e, 0x423: 0x13f, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0xba, 0x429: 0xba, 0x42a: 0xba, 0x42b: 0x140, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x141, 0x431: 0x142, 0x432: 0x143, 0x433: 0xba, 0x434: 0xba, 0x435: 0xba, 0x436: 0xba, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x144, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x145, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x146, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x147, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x148, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x140, 0x529: 0x149, 0x52a: 0xba, 0x52b: 0x14a, 0x52c: 0x14b, 0x52d: 0x14c, 0x52e: 0x14d, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x14e, 0x53e: 0x14f, 0x53f: 0x150, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x151, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x152, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x153, 0x581: 0xba, 0x582: 0xba, 0x583: 0xba, 0x584: 0xba, 0x585: 0xba, 0x586: 0xba, 0x587: 0xba, + 0x588: 0xba, 0x589: 0xba, 0x58a: 0xba, 0x58b: 0xba, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x154, 0x5b2: 0x155, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x156, 0x5c4: 0x157, 0x5c5: 0x158, 0x5c6: 0x159, 0x5c7: 0x15a, + 0x5c8: 0x9b, 0x5c9: 0x15b, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x15c, 0x5ce: 0xba, 0x5cf: 0xba, + 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: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x15d, 0x5e9: 0x15e, 0x5ea: 0x15f, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x160, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x161, 0x624: 0x6e, 0x625: 0x162, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x163, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x164, 0x641: 0x9b, 0x642: 0x165, 0x643: 0x166, 0x644: 0x72, 0x645: 0x73, 0x646: 0x167, 0x647: 0x168, + 0x648: 0x74, 0x649: 0x169, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x16a, 0x65c: 0x9b, 0x65d: 0x16b, 0x65e: 0x9b, 0x65f: 0x16c, + 0x660: 0x16d, 0x661: 0x16e, 0x662: 0x16f, 0x663: 0xba, 0x664: 0x170, 0x665: 0x171, 0x666: 0x172, 0x667: 0x173, + 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x174, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x175, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x176, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x177, 0x73b: 0xba, 0x73c: 0xba, 0x73d: 0xba, 0x73e: 0xba, 0x73f: 0xba, + // Block 0x1d, offset 0x740 + 0x740: 0xba, 0x741: 0xba, 0x742: 0xba, 0x743: 0xba, 0x744: 0xba, 0x745: 0xba, 0x746: 0xba, 0x747: 0xba, + 0x748: 0xba, 0x749: 0xba, 0x74a: 0xba, 0x74b: 0xba, 0x74c: 0xba, 0x74d: 0xba, 0x74e: 0xba, 0x74f: 0xba, + 0x750: 0xba, 0x751: 0xba, 0x752: 0xba, 0x753: 0xba, 0x754: 0xba, 0x755: 0xba, 0x756: 0xba, 0x757: 0xba, + 0x758: 0xba, 0x759: 0xba, 0x75a: 0xba, 0x75b: 0xba, 0x75c: 0xba, 0x75d: 0xba, 0x75e: 0xba, 0x75f: 0xba, + 0x760: 0x75, 0x761: 0x76, 0x762: 0x77, 0x763: 0x178, 0x764: 0x78, 0x765: 0x79, 0x766: 0x179, 0x767: 0x7a, + 0x768: 0x7b, 0x769: 0xba, 0x76a: 0xba, 0x76b: 0xba, 0x76c: 0xba, 0x76d: 0xba, 0x76e: 0xba, 0x76f: 0xba, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, + 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, + 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, + 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, + 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, + 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, + 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, + 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, + 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, + 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, + 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x17a, 0x801: 0x17b, 0x802: 0xba, 0x803: 0xba, 0x804: 0x17c, 0x805: 0x17c, 0x806: 0x17c, 0x807: 0x17d, + 0x808: 0xba, 0x809: 0xba, 0x80a: 0xba, 0x80b: 0xba, 0x80c: 0xba, 0x80d: 0xba, 0x80e: 0xba, 0x80f: 0xba, + 0x810: 0xba, 0x811: 0xba, 0x812: 0xba, 0x813: 0xba, 0x814: 0xba, 0x815: 0xba, 0x816: 0xba, 0x817: 0xba, + 0x818: 0xba, 0x819: 0xba, 0x81a: 0xba, 0x81b: 0xba, 0x81c: 0xba, 0x81d: 0xba, 0x81e: 0xba, 0x81f: 0xba, + 0x820: 0xba, 0x821: 0xba, 0x822: 0xba, 0x823: 0xba, 0x824: 0xba, 0x825: 0xba, 0x826: 0xba, 0x827: 0xba, + 0x828: 0xba, 0x829: 0xba, 0x82a: 0xba, 0x82b: 0xba, 0x82c: 0xba, 0x82d: 0xba, 0x82e: 0xba, 0x82f: 0xba, + 0x830: 0xba, 0x831: 0xba, 0x832: 0xba, 0x833: 0xba, 0x834: 0xba, 0x835: 0xba, 0x836: 0xba, 0x837: 0xba, + 0x838: 0xba, 0x839: 0xba, 0x83a: 0xba, 0x83b: 0xba, 0x83c: 0xba, 0x83d: 0xba, 0x83e: 0xba, 0x83f: 0xba, + // Block 0x21, offset 0x840 + 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, + 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, + 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, + 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, + 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, + 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, + 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: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, +} + +// idnaSparseOffset: 258 entries, 516 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x93, 0x98, 0xa1, 0xb1, 0xbf, 0xcc, 0xd8, 0xe9, 0xf3, 0xfa, 0x107, 0x118, 0x11f, 0x12a, 0x139, 0x147, 0x151, 0x153, 0x158, 0x15b, 0x15e, 0x160, 0x16c, 0x177, 0x17f, 0x185, 0x18b, 0x190, 0x195, 0x198, 0x19c, 0x1a2, 0x1a7, 0x1b3, 0x1bd, 0x1c3, 0x1d4, 0x1de, 0x1e1, 0x1e9, 0x1ec, 0x1f9, 0x201, 0x205, 0x20c, 0x214, 0x224, 0x230, 0x232, 0x23c, 0x248, 0x254, 0x260, 0x268, 0x26d, 0x277, 0x288, 0x28c, 0x297, 0x29b, 0x2a4, 0x2ac, 0x2b2, 0x2b7, 0x2ba, 0x2bd, 0x2c1, 0x2c7, 0x2cb, 0x2cf, 0x2d5, 0x2dc, 0x2e2, 0x2ea, 0x2f1, 0x2fc, 0x306, 0x30a, 0x30d, 0x313, 0x317, 0x319, 0x31c, 0x31e, 0x321, 0x32b, 0x32e, 0x33d, 0x341, 0x346, 0x349, 0x34d, 0x352, 0x357, 0x35d, 0x363, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f6, 0x3fb, 0x408, 0x40c, 0x411, 0x413, 0x417, 0x419, 0x41d, 0x426, 0x42c, 0x430, 0x440, 0x44a, 0x44f, 0x452, 0x458, 0x45f, 0x464, 0x468, 0x46e, 0x473, 0x47c, 0x481, 0x487, 0x48e, 0x495, 0x49c, 0x4a0, 0x4a5, 0x4a8, 0x4ad, 0x4b9, 0x4bf, 0x4c4, 0x4cb, 0x4d3, 0x4d8, 0x4dc, 0x4ec, 0x4f3, 0x4f7, 0x4fb, 0x502, 0x504, 0x507, 0x50a, 0x50e, 0x512, 0x518, 0x521, 0x52d, 0x534, 0x53d, 0x545, 0x54c, 0x55a, 0x567, 0x574, 0x57d, 0x581, 0x58f, 0x597, 0x5a2, 0x5ab, 0x5b1, 0x5b9, 0x5c2, 0x5cc, 0x5cf, 0x5db, 0x5de, 0x5e3, 0x5e6, 0x5f0, 0x5f9, 0x605, 0x608, 0x60d, 0x610, 0x613, 0x616, 0x61d, 0x624, 0x628, 0x633, 0x636, 0x63c, 0x641, 0x645, 0x648, 0x64b, 0x64e, 0x653, 0x65d, 0x660, 0x664, 0x673, 0x67f, 0x683, 0x688, 0x68d, 0x691, 0x696, 0x69f, 0x6aa, 0x6b0, 0x6b8, 0x6bc, 0x6c0, 0x6c6, 0x6cc, 0x6d1, 0x6d4, 0x6e2, 0x6e9, 0x6ec, 0x6ef, 0x6f3, 0x6f9, 0x6fe, 0x708, 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71d, 0x720, 0x730, 0x741, 0x746, 0x748, 0x74a} + +// idnaSparseValues: 1869 entries, 7476 bytes +var idnaSparseValues = [1869]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: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, 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: 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: 0x07}, + {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: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, 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 0x3f + {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: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {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 0x4f + {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 0x5e + {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 0x63 + {value: 0x0000, lo: 0x07}, + {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: 0xbf}, + // Block 0xc, offset 0x6b + {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 0x77 + {value: 0x0000, lo: 0x0d}, + {value: 0x0c08, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0x85}, + {value: 0x0c08, lo: 0x86, hi: 0x87}, + {value: 0x0a08, lo: 0x88, hi: 0x88}, + {value: 0x0c08, lo: 0x89, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0x93}, + {value: 0x0c08, lo: 0x94, hi: 0x94}, + {value: 0x0a08, lo: 0x95, hi: 0x95}, + {value: 0x0808, lo: 0x96, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xe, offset 0x85 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xf, offset 0x93 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0x10, offset 0x98 + {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 0x11, offset 0xa1 + {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 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0d}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x0040, 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: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbf + {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: 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: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xcc + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, 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 0x15, offset 0xd8 + {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 0x16, offset 0xe9 + {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: 0x08f1, 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 0x17, offset 0xf3 + {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 0x18, offset 0xfa + {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: 0x8d}, + {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: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x19, offset 0x107 + {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 0x1a, offset 0x118 + {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 0x1b, offset 0x11f + {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 0x1c, offset 0x12a + {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 0x1d, offset 0x139 + {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 0x1e, offset 0x147 + {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 0x1f, offset 0x151 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x20, offset 0x153 + {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 0x21, offset 0x158 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x22, offset 0x15b + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x23, offset 0x15e + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x24, offset 0x160 + {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 0x25, offset 0x16c + {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 0x26, offset 0x177 + {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 0x27, offset 0x17f + {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 0x28, offset 0x185 + {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 0x29, offset 0x18b + {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 0x2a, offset 0x190 + {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 0x2b, offset 0x195 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2c, offset 0x198 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2d, offset 0x19c + {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 0x2e, offset 0x1a2 + {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 0x2f, offset 0x1a7 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x30, offset 0x1b3 + {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 0x31, offset 0x1bd + {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 0x32, offset 0x1c3 + {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 0x33, offset 0x1d4 + {value: 0x0000, lo: 0x09}, + {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: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x34, offset 0x1de + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x35, offset 0x1e1 + {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 0x36, offset 0x1e9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x37, offset 0x1ec + {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 0x38, offset 0x1f9 + {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 0x39, offset 0x201 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x3a, offset 0x205 + {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 0x3b, offset 0x20c + {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 0x3c, offset 0x214 + {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 0x3d, offset 0x224 + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x230 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3f, offset 0x232 + {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 0x40, offset 0x23c + {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: 0x8b}, + {value: 0x0040, lo: 0x8c, 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: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x41, offset 0x248 + {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 0x42, offset 0x254 + {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 0x43, offset 0x260 + {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 0x44, offset 0x268 + {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 0x45, offset 0x26d + {value: 0x0000, lo: 0x09}, + {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: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x46, offset 0x277 + {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: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x47, offset 0x288 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x48, offset 0x28c + {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 0x49, offset 0x297 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x4a, offset 0x29b + {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: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4b, offset 0x2a4 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4c, offset 0x2ac + {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 0x4d, offset 0x2b2 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4e, offset 0x2b7 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x4f, offset 0x2ba + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x50, offset 0x2bd + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x51, offset 0x2c1 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x52, offset 0x2c7 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x53, offset 0x2cb + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x54, offset 0x2cf + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x55, offset 0x2d5 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x56, offset 0x2dc + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2e2 + {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 0x58, offset 0x2ea + {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 0x59, offset 0x2f1 + {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 0x5a, offset 0x2fc + {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 0x5b, offset 0x306 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5c, offset 0x30a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0xbf}, + // Block 0x5d, offset 0x30d + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5e, offset 0x313 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5f, offset 0x317 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x319 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x61, offset 0x31c + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x62, offset 0x31e + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x63, offset 0x321 + {value: 0x0000, lo: 0x09}, + {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: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x64, offset 0x32b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x32e + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x66, offset 0x33d + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x67, offset 0x341 + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x68, offset 0x346 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x69, offset 0x349 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x6a, offset 0x34d + {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 0x6b, offset 0x352 + {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 0x6c, offset 0x357 + {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 0x6d, offset 0x35d + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6e, offset 0x363 + {value: 0x0000, lo: 0x0e}, + {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: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6f, 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 0x70, 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 0x71, offset 0x37c + {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: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x72, 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 0x73, offset 0x390 + {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 0x74, offset 0x398 + {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: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x75, offset 0x3a2 + {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 0x76, offset 0x3ad + {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 0x77, offset 0x3b5 + {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 0x78, offset 0x3c6 + {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 0x79, offset 0x3cf + {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 0x7a, offset 0x3df + {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 0x7b, offset 0x3ec + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7c, offset 0x3f6 + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7d, offset 0x3fb + {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 0x7e, offset 0x408 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7f, offset 0x40c + {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 0x80, offset 0x411 + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x81, offset 0x413 + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x82, offset 0x417 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x83, offset 0x419 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x84, offset 0x41d + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x85, offset 0x426 + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x86, offset 0x42c + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x87, offset 0x430 + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x88, offset 0x440 + {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 0x89, offset 0x44a + {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 0x8a, offset 0x44f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8b, offset 0x452 + {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 0x8c, offset 0x458 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8d, offset 0x45f + {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 0x8e, offset 0x464 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8f, offset 0x468 + {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 0x90, offset 0x46e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x91, offset 0x473 + {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 0x92, offset 0x47c + {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 0x93, offset 0x481 + {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 0x94, offset 0x487 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x95, offset 0x48e + {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: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x96, offset 0x495 + {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 0x97, offset 0x49c + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x98, offset 0x4a0 + {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 0x99, offset 0x4a5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x9a, offset 0x4a8 + {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 0x9b, offset 0x4ad + {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 0x9c, offset 0x4b9 + {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 0x9d, offset 0x4bf + {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 0x9e, offset 0x4c4 + {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 0x9f, offset 0x4cb + {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 0xa0, offset 0x4d3 + {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 0xa1, offset 0x4d8 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0xa2, offset 0x4dc + {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: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa3, offset 0x4ec + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, 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 0xa4, offset 0x4f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa5, offset 0x4f7 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa6, offset 0x4fb + {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 0xa7, offset 0x502 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa8, offset 0x504 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa9, offset 0x507 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xaa, offset 0x50a + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xab, offset 0x50e + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x512 + {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 0xad, offset 0x518 + {value: 0x0000, lo: 0x08}, + {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: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xae, offset 0x521 + {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: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xaf, offset 0x52d + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, 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 0xb0, offset 0x534 + {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 0xb1, offset 0x53d + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, 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 0xb2, offset 0x545 + {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 0xb3, offset 0x54c + {value: 0x0000, lo: 0x0d}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, 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 0xb4, offset 0x55a + {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: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb5, offset 0x567 + {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 0xb6, offset 0x574 + {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 0xb7, offset 0x57d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb8, offset 0x581 + {value: 0x0000, lo: 0x0d}, + {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: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb9, offset 0x58f + {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 0xba, offset 0x597 + {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 0xbb, offset 0x5a2 + {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 0xbc, offset 0x5ab + {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 0xbd, offset 0x5b1 + {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 0xbe, offset 0x5b9 + {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 0xbf, offset 0x5c2 + {value: 0x0000, lo: 0x09}, + {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: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xc0, offset 0x5cc + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc1, offset 0x5cf + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, 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 0xc2, offset 0x5db + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc3, offset 0x5de + {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 0xc4, offset 0x5e3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc5, offset 0x5e6 + {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 0xc6, offset 0x5f0 + {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 0xc7, offset 0x5f9 + {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 0xc8, offset 0x605 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xc9, offset 0x608 + {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 0xca, offset 0x60d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xcb, offset 0x610 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xcc, offset 0x613 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xcd, offset 0x616 + {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: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xce, offset 0x61d + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, 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 0xcf, offset 0x624 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xd0, offset 0x628 + {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 0xd1, offset 0x633 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd2, offset 0x636 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd3, offset 0x63c + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd4, offset 0x641 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0xd5, offset 0x645 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd6, offset 0x648 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xd7, offset 0x64b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xd8, offset 0x64e + {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 0xd9, offset 0x653 + {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 0xda, offset 0x65d + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xdb, offset 0x660 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xdc, offset 0x664 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, 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 0xdd, offset 0x673 + {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: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xde, offset 0x67f + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xdf, offset 0x683 + {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 0xe0, offset 0x688 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe1, offset 0x68d + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xe2, offset 0x691 + {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 0xe3, offset 0x696 + {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 0xe4, offset 0x69f + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xe5, offset 0x6aa + {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 0xe6, offset 0x6b0 + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, 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 0xe7, offset 0x6b8 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe8, offset 0x6bc + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xe9, offset 0x6c0 + {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 0xea, offset 0x6c6 + {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 0xeb, offset 0x6cc + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xec, offset 0x6d1 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xed, offset 0x6d4 + {value: 0x0000, lo: 0x0d}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xee, offset 0x6e2 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xef, offset 0x6e9 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf0, offset 0x6ec + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xf1, offset 0x6ef + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf2, offset 0x6f3 + {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 0xf3, offset 0x6f9 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf4, offset 0x6fe + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf5, offset 0x708 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf6, offset 0x70d + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xf7, offset 0x710 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0xbf}, + // Block 0xf8, offset 0x713 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xf9, offset 0x716 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xfa, offset 0x719 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xfb, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xfc, offset 0x720 + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0xfd, offset 0x730 + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0xfe, offset 0x741 + {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 0xff, offset 0x746 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x100, offset 0x748 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x101, offset 0x74a + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 41662 bytes (40KiB); checksum: 355A58A4 diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go new file mode 100644 index 0000000..4212741 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie.go @@ -0,0 +1,51 @@ +// 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. + +package idna + +// Sparse block handling code. + +type valueRange struct { + value uint16 // header: value:stride + lo, hi byte // header: lo:n +} + +type sparseBlocks struct { + values []valueRange + offset []uint16 +} + +var idnaSparse = sparseBlocks{ + values: idnaSparseValues[:], + offset: idnaSparseOffset[:], +} + +// Don't use newIdnaTrie to avoid unconditional linking in of the table. +var trie = &idnaTrie{} + +// lookup determines the type of block n and looks up the value for b. +// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block +// is a list of ranges with an accompanying value. Given a matching range r, +// the value for b is by r.value + (b - r.lo) * stride. +func (t *sparseBlocks) lookup(n uint32, b byte) uint16 { + offset := t.offset[n] + header := t.values[offset] + lo := offset + 1 + hi := lo + uint16(header.lo) + for lo < hi { + m := lo + (hi-lo)/2 + r := t.values[m] + if r.lo <= b && b <= r.hi { + return r.value + uint16(b-r.lo)*header.value + } + if b < r.lo { + hi = m + } else { + lo = m + 1 + } + } + return 0 +} 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 0000000..8a75b96 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie12.0.0.go @@ -0,0 +1,30 @@ +// 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 + +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 0000000..fa45bb9 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie13.0.0.go @@ -0,0 +1,30 @@ +// 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 + +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/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go new file mode 100644 index 0000000..9c070a4 --- /dev/null +++ b/vendor/golang.org/x/net/idna/trieval.go @@ -0,0 +1,119 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package idna + +// This file contains definitions for interpreting the trie value of the idna +// trie generated by "go run gen*.go". It is shared by both the generator +// program and the resultant package. Sharing is achieved by the generator +// copying gen_trieval.go to trieval.go and changing what's above this comment. + +// info holds information from the IDNA mapping table for a single rune. It is +// the value returned by a trie lookup. In most cases, all information fits in +// a 16-bit value. For mappings, this value may contain an index into a slice +// with the mapped string. Such mappings can consist of the actual mapped value +// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the +// input rune. This technique is used by the cases packages and reduces the +// table size significantly. +// +// The per-rune values have the following format: +// +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category +// +// See the definitions below for a more detailed description of the various +// bits. +type info uint16 + +const ( + catSmallMask = 0x3 + catBigMask = 0xF8 + indexShift = 3 + xorBit = 0x4 // interpret the index as an xor pattern + inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined. + + joinShift = 8 + joinMask = 0x07 + + // Attributes + attributesMask = 0x1800 + viramaModifier = 0x1800 + modifier = 0x1000 + rtl = 0x0800 + + mayNeedNorm = 0x2000 +) + +// A category corresponds to a category defined in the IDNA mapping table. +type category uint16 + +const ( + unknown category = 0 // not currently defined in unicode. + mapped category = 1 + disallowedSTD3Mapped category = 2 + deviation category = 3 +) + +const ( + valid category = 0x08 + validNV8 category = 0x18 + validXV8 category = 0x28 + disallowed category = 0x40 + disallowedSTD3Valid category = 0x80 + ignored category = 0xC0 +) + +// join types and additional rune information +const ( + joiningL = (iota + 1) + joiningD + joiningT + joiningR + + //the following types are derived during processing + joinZWJ + joinZWNJ + joinVirama + numJoinTypes +) + +func (c info) isMapped() bool { + return c&0x3 != 0 +} + +func (c info) category() category { + small := c & catSmallMask + if small != 0 { + return category(small) + } + return category(c & catBigMask) +} + +func (c info) joinType() info { + if c.isMapped() { + return 0 + } + return (c >> joinShift) & joinMask +} + +func (c info) isModifier() bool { + return c&(modifier|catSmallMask) == modifier +} + +func (c info) isViramaModifier() bool { + return c&(attributesMask|catSmallMask) == viramaModifier +} diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE index 6a66aea..2a7cf70 100644 --- a/vendor/golang.org/x/sys/LICENSE +++ b/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 8fa707a..ec07aab 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -105,6 +105,8 @@ var ARM64 struct { HasSVE bool // Scalable Vector Extensions HasSVE2 bool // Scalable Vector Extensions 2 HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 + HasDIT bool // Data Independent Timing support + HasI8MM bool // Advanced SIMD Int8 matrix multiplication instructions _ CacheLinePad } diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go index 0e27a21..af2aa99 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -38,6 +38,8 @@ func initOptions() { {Name: "dcpop", Feature: &ARM64.HasDCPOP}, {Name: "asimddp", Feature: &ARM64.HasASIMDDP}, {Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM}, + {Name: "dit", Feature: &ARM64.HasDIT}, + {Name: "i8mm", Feature: &ARM64.HasI8MM}, } } @@ -145,6 +147,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { ARM64.HasLRCPC = true } + switch extractBits(isar1, 52, 55) { + case 1: + ARM64.HasI8MM = true + } + // ID_AA64PFR0_EL1 switch extractBits(pfr0, 16, 19) { case 0: @@ -168,6 +175,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { parseARM64SVERegister(getzfr0()) } + + switch extractBits(pfr0, 48, 51) { + case 1: + ARM64.HasDIT = true + } } func parseARM64SVERegister(zfr0 uint64) { diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go index 3d386d0..08f35ea 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -35,8 +35,10 @@ const ( hwcap_SHA512 = 1 << 21 hwcap_SVE = 1 << 22 hwcap_ASIMDFHM = 1 << 23 + hwcap_DIT = 1 << 24 hwcap2_SVE2 = 1 << 1 + hwcap2_I8MM = 1 << 13 ) // linuxKernelCanEmulateCPUID reports whether we're running @@ -106,9 +108,12 @@ func doinit() { ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) ARM64.HasSVE = isSet(hwCap, hwcap_SVE) ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) + ARM64.HasDIT = isSet(hwCap, hwcap_DIT) + // HWCAP2 feature bits ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2) + ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM) } func isSet(hwc uint, value uint) bool { diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 4ed2e48..d07dd09 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -58,6 +58,7 @@ includes_Darwin=' #define _DARWIN_USE_64_BIT_INODE #define __APPLE_USE_RFC_3542 #include +#include #include #include #include diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 4cc7b00..2d15200 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -402,6 +402,18 @@ func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq)) } +//sys renamexNp(from string, to string, flag uint32) (err error) + +func RenamexNp(from string, to string, flag uint32) (err error) { + return renamexNp(from, to, flag) +} + +//sys renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) + +func RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + return renameatxNp(fromfd, from, tofd, to, flag) +} + //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL func Uname(uname *Utsname) error { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 5682e26..3f1d3d4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -2592,3 +2592,4 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { } //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) +//sys Mseal(b []byte, flags uint) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index b25343c..b86ded5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -293,6 +293,7 @@ func Uname(uname *Utsname) error { //sys Mkfifoat(dirfd int, path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index e40fa85..4308ac1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1169,6 +1169,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index bb02aa6..c8068a7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1169,6 +1169,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 877a62b..01a70b2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -457,6 +457,7 @@ const ( B600 = 0x8 B75 = 0x2 B9600 = 0xd + BCACHEFS_SUPER_MAGIC = 0xca451a4e BDEVFS_MAGIC = 0x62646576 BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d @@ -928,6 +929,7 @@ const ( EPOLL_CTL_ADD = 0x1 EPOLL_CTL_DEL = 0x2 EPOLL_CTL_MOD = 0x3 + EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 ESP_V4_FLOW = 0xa ESP_V6_FLOW = 0xc @@ -941,9 +943,6 @@ const ( ETHTOOL_FEC_OFF = 0x4 ETHTOOL_FEC_RS = 0x8 ETHTOOL_FLAG_ALL = 0x7 - ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 - ETHTOOL_FLAG_OMIT_REPLY = 0x2 - ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_FLASHDEV = 0x33 ETHTOOL_FLASH_MAX_FILENAME = 0x80 ETHTOOL_FWVERS_LEN = 0x20 @@ -1705,6 +1704,7 @@ const ( KEXEC_ARCH_S390 = 0x160000 KEXEC_ARCH_SH = 0x2a0000 KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_CRASH_HOTPLUG_SUPPORT = 0x8 KEXEC_FILE_DEBUG = 0x8 KEXEC_FILE_NO_INITRAMFS = 0x4 KEXEC_FILE_ON_CRASH = 0x2 @@ -1780,6 +1780,7 @@ const ( KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 LANDLOCK_ACCESS_FS_EXECUTE = 0x1 + LANDLOCK_ACCESS_FS_IOCTL_DEV = 0x8000 LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 @@ -1861,6 +1862,19 @@ const ( MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FIXED_NOREPLACE = 0x100000 + MAP_HUGE_16GB = 0x88000000 + MAP_HUGE_16KB = 0x38000000 + MAP_HUGE_16MB = 0x60000000 + MAP_HUGE_1GB = 0x78000000 + MAP_HUGE_1MB = 0x50000000 + MAP_HUGE_256MB = 0x70000000 + MAP_HUGE_2GB = 0x7c000000 + MAP_HUGE_2MB = 0x54000000 + MAP_HUGE_32MB = 0x64000000 + MAP_HUGE_512KB = 0x4c000000 + MAP_HUGE_512MB = 0x74000000 + MAP_HUGE_64KB = 0x40000000 + MAP_HUGE_8MB = 0x5c000000 MAP_HUGE_MASK = 0x3f MAP_HUGE_SHIFT = 0x1a MAP_PRIVATE = 0x2 @@ -2498,6 +2512,23 @@ const ( PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_PPC_DEXCR_CTRL_CLEAR = 0x4 + PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10 + PR_PPC_DEXCR_CTRL_EDITABLE = 0x1 + PR_PPC_DEXCR_CTRL_MASK = 0x1f + PR_PPC_DEXCR_CTRL_SET = 0x2 + PR_PPC_DEXCR_CTRL_SET_ONEXEC = 0x8 + PR_PPC_DEXCR_IBRTPD = 0x1 + PR_PPC_DEXCR_NPHIE = 0x3 + PR_PPC_DEXCR_SBHE = 0x0 + PR_PPC_DEXCR_SRAPD = 0x2 + PR_PPC_GET_DEXCR = 0x48 + PR_PPC_SET_DEXCR = 0x49 + PR_RISCV_CTX_SW_FENCEI_OFF = 0x1 + PR_RISCV_CTX_SW_FENCEI_ON = 0x0 + PR_RISCV_SCOPE_PER_PROCESS = 0x0 + PR_RISCV_SCOPE_PER_THREAD = 0x1 + PR_RISCV_SET_ICACHE_FLUSH_CTX = 0x47 PR_RISCV_V_GET_CONTROL = 0x46 PR_RISCV_V_SET_CONTROL = 0x45 PR_RISCV_V_VSTATE_CTRL_CUR_MASK = 0x3 @@ -3192,6 +3223,7 @@ const ( STATX_MTIME = 0x40 STATX_NLINK = 0x4 STATX_SIZE = 0x200 + STATX_SUBVOL = 0x8000 STATX_TYPE = 0x1 STATX_UID = 0x8 STATX__RESERVED = 0x80000000 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 e4bc0bd..684a516 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 689317a..61d74b5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 5cca668..a28c9e3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 1427050..ab5d1fe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 ESR_MAGIC = 0x45535201 EXTPROC = 0x10000 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 28e39af..c523090 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 cd66e92..01e6ea7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 c1595eb..7aa610b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 ee9456b..92af771 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 8cfca81..b27ef5e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 60b0deb..237a2ce 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 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 f90aa72..4a5c555 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 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 ba9e015..a02fb49 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 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 07cdfd6..e26a7c6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 2f1dd21..c48f7c2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 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 f40519d..ad4b9aa 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -82,6 +82,8 @@ const ( EFD_CLOEXEC = 0x400000 EFD_NONBLOCK = 0x4000 EMT_TAGOVF = 0x1 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x400000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 07642c3..b622533 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 923e08c..cfe6646 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 7d73dda..13f624f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 0577001..fe222b7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 87d8612..1bc1a5a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -2229,3 +2229,19 @@ func Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mseal(b []byte, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 9dc4241..1851df1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 41b5617..0b43c69 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 0d3a075..e1ec0db 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 4019a65..880c6d6 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index c39f777..7c8452a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index ac4af24..b8ef95b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 57571d0..2ffdf86 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index f77d532..2af3b5c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index e62963e..1da08d5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index fae140b..b7a2513 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 0083135..6e85b0a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 9d1e0ff..f15dadf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -555,6 +555,12 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_mount(SB) + RET +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_nanosleep(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 79029ed..28b487d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index da115f9..1e7f321 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 53aef5d..524b082 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -457,4 +457,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 71d5247..d3e38f6 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -379,4 +379,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index c747706..70b35bf 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -421,4 +421,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index f96e214..6c778c2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -324,4 +324,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 2842534..37281cf 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -318,4 +318,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index d095301..7e567f1 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -441,4 +441,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 295c7f4..38ae55e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -371,4 +371,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index d1a9eac..55e92e6 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -371,4 +371,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index bec157c..60658d6 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -441,4 +441,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 7ee7bdc..e203e8a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -448,4 +448,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index fad1f25..5944b97 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -420,4 +420,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 7d3e163..c66d416 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -420,4 +420,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) 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 0ed53ad..9889f6a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -325,4 +325,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) 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 2fba04a..01d8682 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -386,4 +386,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 621d00d..7b703e7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -399,4 +399,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 4740b83..7f1961b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -110,7 +110,8 @@ type Statx_t struct { Mnt_id uint64 Dio_mem_align uint32 Dio_offset_align uint32 - _ [12]uint64 + Subvol uint64 + _ [11]uint64 } type Fsid struct { @@ -3473,7 +3474,7 @@ const ( DEVLINK_PORT_FN_ATTR_STATE = 0x2 DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 DEVLINK_PORT_FN_ATTR_CAPS = 0x4 - DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x5 + DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x6 ) type FsverityDigest struct { @@ -3806,6 +3807,9 @@ const ( ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 ETHTOOL_MSG_KERNEL_MAX = 0x2b + ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 + ETHTOOL_FLAG_OMIT_REPLY = 0x2 + ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 @@ -3975,7 +3979,7 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x5 + ETHTOOL_A_TSINFO_MAX = 0x6 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index 97651b5..b6e1ab7 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -1179,7 +1179,7 @@ type OBJECTS_AND_NAME struct { //sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD //sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW -//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) = advapi32.GetAce +//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) = advapi32.GetAce // Control returns the security descriptor control bits. func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 6525c62..1fa34fd 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -17,8 +17,10 @@ import ( "unsafe" ) -type Handle uintptr -type HWND uintptr +type ( + Handle uintptr + HWND uintptr +) const ( InvalidHandle = ^Handle(0) @@ -211,6 +213,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) //sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW //sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) [failretval==0] = user32.LoadKeyboardLayoutW +//sys UnloadKeyboardLayout(hkl Handle) (err error) = user32.UnloadKeyboardLayout +//sys GetKeyboardLayout(tid uint32) (hkl Handle) = user32.GetKeyboardLayout +//sys ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) = user32.ToUnicodeEx //sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow //sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW //sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx @@ -1368,9 +1374,11 @@ func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) } + func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) } + func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { return syscall.EWINDOWS } diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index d8cb71d..3f03b3d 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -2003,7 +2003,21 @@ const ( MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 ) -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 +// Flags for GetAdaptersAddresses, see +// https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses. +const ( + GAA_FLAG_SKIP_UNICAST = 0x1 + GAA_FLAG_SKIP_ANYCAST = 0x2 + GAA_FLAG_SKIP_MULTICAST = 0x4 + GAA_FLAG_SKIP_DNS_SERVER = 0x8 + GAA_FLAG_INCLUDE_PREFIX = 0x10 + GAA_FLAG_SKIP_FRIENDLY_NAME = 0x20 + GAA_FLAG_INCLUDE_WINS_INFO = 0x40 + GAA_FLAG_INCLUDE_GATEWAYS = 0x80 + GAA_FLAG_INCLUDE_ALL_INTERFACES = 0x100 + GAA_FLAG_INCLUDE_ALL_COMPARTMENTS = 0x200 + GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x400 +) const ( IF_TYPE_OTHER = 1 @@ -2017,6 +2031,50 @@ const ( IF_TYPE_IEEE1394 = 144 ) +// Enum NL_PREFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_prefix_origin +const ( + IpPrefixOriginOther = 0 + IpPrefixOriginManual = 1 + IpPrefixOriginWellKnown = 2 + IpPrefixOriginDhcp = 3 + IpPrefixOriginRouterAdvertisement = 4 + IpPrefixOriginUnchanged = 1 << 4 +) + +// Enum NL_SUFFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_suffix_origin +const ( + NlsoOther = 0 + NlsoManual = 1 + NlsoWellKnown = 2 + NlsoDhcp = 3 + NlsoLinkLayerAddress = 4 + NlsoRandom = 5 + IpSuffixOriginOther = 0 + IpSuffixOriginManual = 1 + IpSuffixOriginWellKnown = 2 + IpSuffixOriginDhcp = 3 + IpSuffixOriginLinkLayerAddress = 4 + IpSuffixOriginRandom = 5 + IpSuffixOriginUnchanged = 1 << 4 +) + +// Enum NL_DAD_STATE for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_dad_state +const ( + NldsInvalid = 0 + NldsTentative = 1 + NldsDuplicate = 2 + NldsDeprecated = 3 + NldsPreferred = 4 + IpDadStateInvalid = 0 + IpDadStateTentative = 1 + IpDadStateDuplicate = 2 + IpDadStateDeprecated = 3 + IpDadStatePreferred = 4 +) + type SocketAddress struct { Sockaddr *syscall.RawSockaddrAny SockaddrLength int32 @@ -3404,3 +3462,14 @@ type DCB struct { EvtChar byte wReserved1 uint16 } + +// Keyboard Layout Flags. +// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayoutw +const ( + KLF_ACTIVATE = 0x00000001 + KLF_SUBSTITUTE_OK = 0x00000002 + KLF_REORDER = 0x00000008 + KLF_REPLACELANG = 0x00000010 + KLF_NOTELLSHELL = 0x00000080 + KLF_SETFORPROCESS = 0x00000100 +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index eba7610..9bb979a 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -478,12 +478,16 @@ var ( procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow") procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow") procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo") + procGetKeyboardLayout = moduser32.NewProc("GetKeyboardLayout") procGetShellWindow = moduser32.NewProc("GetShellWindow") procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") procIsWindow = moduser32.NewProc("IsWindow") procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") procIsWindowVisible = moduser32.NewProc("IsWindowVisible") + procLoadKeyboardLayoutW = moduser32.NewProc("LoadKeyboardLayoutW") procMessageBoxW = moduser32.NewProc("MessageBoxW") + procToUnicodeEx = moduser32.NewProc("ToUnicodeEx") + procUnloadKeyboardLayout = moduser32.NewProc("UnloadKeyboardLayout") procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") @@ -789,6 +793,14 @@ func FreeSid(sid *SID) (err error) { return } +func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { + r1, _, e1 := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func GetLengthSid(sid *SID) (len uint32) { r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) len = uint32(r0) @@ -1225,14 +1237,6 @@ func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCE return } -func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) { - r0, _, _ := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) - if r0 == 0 { - ret = GetLastError() - } - return -} - func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) if r1 == 0 { @@ -4082,6 +4086,12 @@ func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { return } +func GetKeyboardLayout(tid uint32) (hkl Handle) { + r0, _, _ := syscall.Syscall(procGetKeyboardLayout.Addr(), 1, uintptr(tid), 0, 0) + hkl = Handle(r0) + return +} + func GetShellWindow() (shellWindow HWND) { r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) shellWindow = HWND(r0) @@ -4115,6 +4125,15 @@ func IsWindowVisible(hwnd HWND) (isVisible bool) { return } +func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadKeyboardLayoutW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(flags), 0) + hkl = Handle(r0) + if hkl == 0 { + err = errnoErr(e1) + } + return +} + func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) ret = int32(r0) @@ -4124,6 +4143,20 @@ func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret i return } +func ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) { + r0, _, _ := syscall.Syscall9(procToUnicodeEx.Addr(), 7, uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl), 0, 0) + ret = int32(r0) + return +} + +func UnloadKeyboardLayout(hkl Handle) (err error) { + r1, _, e1 := syscall.Syscall(procUnloadKeyboardLayout.Addr(), 1, uintptr(hkl), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) { var _p0 uint32 if inheritExisting { diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE index 6a66aea..2a7cf70 100644 --- a/vendor/golang.org/x/text/LICENSE +++ b/vendor/golang.org/x/text/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go new file mode 100644 index 0000000..e2b70f7 --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule.go @@ -0,0 +1,336 @@ +// 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. + +// Package bidirule implements the Bidi Rule defined by RFC 5893. +// +// This package is under development. The API may change without notice and +// without preserving backward compatibility. +package bidirule + +import ( + "errors" + "unicode/utf8" + + "golang.org/x/text/transform" + "golang.org/x/text/unicode/bidi" +) + +// This file contains an implementation of RFC 5893: Right-to-Left Scripts for +// Internationalized Domain Names for Applications (IDNA) +// +// A label is an individual component of a domain name. Labels are usually +// shown separated by dots; for example, the domain name "www.example.com" is +// composed of three labels: "www", "example", and "com". +// +// An RTL label is a label that contains at least one character of class R, AL, +// or AN. An LTR label is any label that is not an RTL label. +// +// A "Bidi domain name" is a domain name that contains at least one RTL label. +// +// The following guarantees can be made based on the above: +// +// o In a domain name consisting of only labels that satisfy the rule, +// the requirements of Section 3 are satisfied. Note that even LTR +// labels and pure ASCII labels have to be tested. +// +// o In a domain name consisting of only LDH labels (as defined in the +// Definitions document [RFC5890]) and labels that satisfy the rule, +// the requirements of Section 3 are satisfied as long as a label +// that starts with an ASCII digit does not come after a +// right-to-left label. +// +// No guarantee is given for other combinations. + +// ErrInvalid indicates a label is invalid according to the Bidi Rule. +var ErrInvalid = errors.New("bidirule: failed Bidi Rule") + +type ruleState uint8 + +const ( + ruleInitial ruleState = iota + ruleLTR + ruleLTRFinal + ruleRTL + ruleRTLFinal + ruleInvalid +) + +type ruleTransition struct { + next ruleState + mask uint16 +} + +var transitions = [...][2]ruleTransition{ + // [2.1] The first character must be a character with Bidi property L, R, or + // AL. If it has the R or AL property, it is an RTL label; if it has the L + // property, it is an LTR label. + ruleInitial: { + {ruleLTRFinal, 1 << bidi.L}, + {ruleRTLFinal, 1< len(input)? This should return an error. + +// RunAt reports the Run at the given position of the input text. +// +// This method can be used for computing line breaks on paragraphs. +func (p *Paragraph) RunAt(pos int) Run { + c := 0 + runNumber := 0 + for i, r := range p.o.runes { + c += len(r) + if pos < c { + runNumber = i + } + } + return p.o.Run(runNumber) +} + +func calculateOrdering(levels []level, runes []rune) Ordering { + var curDir Direction + + prevDir := Neutral + prevI := 0 + + o := Ordering{} + // lvl = 0,2,4,...: left to right + // lvl = 1,3,5,...: right to left + for i, lvl := range levels { + if lvl%2 == 0 { + curDir = LeftToRight + } else { + curDir = RightToLeft + } + if curDir != prevDir { + if i > 0 { + o.runes = append(o.runes, runes[prevI:i]) + o.directions = append(o.directions, prevDir) + o.startpos = append(o.startpos, prevI) + } + prevI = i + prevDir = curDir + } + } + o.runes = append(o.runes, runes[prevI:]) + o.directions = append(o.directions, prevDir) + o.startpos = append(o.startpos, prevI) + return o +} + +// Order computes the visual ordering of all the runs in a Paragraph. +func (p *Paragraph) Order() (Ordering, error) { + if len(p.types) == 0 { + return Ordering{}, nil + } + + for _, fn := range p.opts { + fn(&p.options) + } + lvl := level(-1) + if p.options.defaultDirection == RightToLeft { + lvl = 1 + } + para, err := newParagraph(p.types, p.pairTypes, p.pairValues, lvl) + if err != nil { + return Ordering{}, err + } + + levels := para.getLevels([]int{len(p.types)}) + + p.o = calculateOrdering(levels, p.runes) + return p.o, nil +} + +// Line computes the visual ordering of runs for a single line starting and +// ending at the given positions in the original text. +func (p *Paragraph) Line(start, end int) (Ordering, error) { + lineTypes := p.types[start:end] + para, err := newParagraph(lineTypes, p.pairTypes[start:end], p.pairValues[start:end], -1) + if err != nil { + return Ordering{}, err + } + levels := para.getLevels([]int{len(lineTypes)}) + o := calculateOrdering(levels, p.runes[start:end]) + return o, nil +} + +// An Ordering holds the computed visual order of runs of a Paragraph. Calling +// SetBytes or SetString on the originating Paragraph invalidates an Ordering. +// The methods of an Ordering should only be called by one goroutine at a time. +type Ordering struct { + runes [][]rune + directions []Direction + startpos []int +} + +// Direction reports the directionality of the runs. +// +// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. +func (o *Ordering) Direction() Direction { + return o.directions[0] +} + +// NumRuns returns the number of runs. +func (o *Ordering) NumRuns() int { + return len(o.runes) +} + +// Run returns the ith run within the ordering. +func (o *Ordering) Run(i int) Run { + r := Run{ + runes: o.runes[i], + direction: o.directions[i], + startpos: o.startpos[i], + } + return r +} + +// TODO: perhaps with options. +// // Reorder creates a reader that reads the runes in visual order per character. +// // Modifiers remain after the runes they modify. +// func (l *Runs) Reorder() io.Reader { +// panic("unimplemented") +// } + +// A Run is a continuous sequence of characters of a single direction. +type Run struct { + runes []rune + direction Direction + startpos int +} + +// String returns the text of the run in its original order. +func (r *Run) String() string { + return string(r.runes) +} + +// Bytes returns the text of the run in its original order. +func (r *Run) Bytes() []byte { + return []byte(r.String()) +} + +// TODO: methods for +// - Display order +// - headers and footers +// - bracket replacement. + +// Direction reports the direction of the run. +func (r *Run) Direction() Direction { + return r.direction +} + +// Pos returns the position of the Run within the text passed to SetBytes or SetString of the +// originating Paragraph value. +func (r *Run) Pos() (start, end int) { + return r.startpos, r.startpos + len(r.runes) - 1 +} + +// AppendReverse reverses the order of characters of in, appends them to out, +// and returns the result. Modifiers will still follow the runes they modify. +// Brackets are replaced with their counterparts. +func AppendReverse(out, in []byte) []byte { + ret := make([]byte, len(in)+len(out)) + copy(ret, out) + inRunes := bytes.Runes(in) + + for i, r := range inRunes { + prop, _ := LookupRune(r) + if prop.IsBracket() { + inRunes[i] = prop.reverseBracket(r) + } + } + + for i, j := 0, len(inRunes)-1; i < j; i, j = i+1, j-1 { + inRunes[i], inRunes[j] = inRunes[j], inRunes[i] + } + copy(ret[len(out):], string(inRunes)) + + return ret +} + +// ReverseString reverses the order of characters in s and returns a new string. +// Modifiers will still follow the runes they modify. Brackets are replaced with +// their counterparts. +func ReverseString(s string) string { + input := []rune(s) + li := len(input) + ret := make([]rune, li) + for i, r := range input { + prop, _ := LookupRune(r) + if prop.IsBracket() { + ret[li-i-1] = prop.reverseBracket(r) + } else { + ret[li-i-1] = r + } + } + return string(ret) +} diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go new file mode 100644 index 0000000..1853939 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/bracket.go @@ -0,0 +1,335 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import ( + "container/list" + "fmt" + "sort" +) + +// This file contains a port of the reference implementation of the +// Bidi Parentheses Algorithm: +// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java +// +// The implementation in this file covers definitions BD14-BD16 and rule N0 +// of UAX#9. +// +// Some preprocessing is done for each rune before data is passed to this +// algorithm: +// - opening and closing brackets are identified +// - a bracket pair type, like '(' and ')' is assigned a unique identifier that +// is identical for the opening and closing bracket. It is left to do these +// mappings. +// - The BPA algorithm requires that bracket characters that are canonical +// equivalents of each other be able to be substituted for each other. +// It is the responsibility of the caller to do this canonicalization. +// +// In implementing BD16, this implementation departs slightly from the "logical" +// algorithm defined in UAX#9. In particular, the stack referenced there +// supports operations that go beyond a "basic" stack. An equivalent +// implementation based on a linked list is used here. + +// Bidi_Paired_Bracket_Type +// BD14. An opening paired bracket is a character whose +// Bidi_Paired_Bracket_Type property value is Open. +// +// BD15. A closing paired bracket is a character whose +// Bidi_Paired_Bracket_Type property value is Close. +type bracketType byte + +const ( + bpNone bracketType = iota + bpOpen + bpClose +) + +// bracketPair holds a pair of index values for opening and closing bracket +// location of a bracket pair. +type bracketPair struct { + opener int + closer int +} + +func (b *bracketPair) String() string { + return fmt.Sprintf("(%v, %v)", b.opener, b.closer) +} + +// bracketPairs is a slice of bracketPairs with a sort.Interface implementation. +type bracketPairs []bracketPair + +func (b bracketPairs) Len() int { return len(b) } +func (b bracketPairs) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b bracketPairs) Less(i, j int) bool { return b[i].opener < b[j].opener } + +// resolvePairedBrackets runs the paired bracket part of the UBA algorithm. +// +// For each rune, it takes the indexes into the original string, the class the +// bracket type (in pairTypes) and the bracket identifier (pairValues). It also +// takes the direction type for the start-of-sentence and the embedding level. +// +// The identifiers for bracket types are the rune of the canonicalized opening +// bracket for brackets (open or close) or 0 for runes that are not brackets. +func resolvePairedBrackets(s *isolatingRunSequence) { + p := bracketPairer{ + sos: s.sos, + openers: list.New(), + codesIsolatedRun: s.types, + indexes: s.indexes, + } + dirEmbed := L + if s.level&1 != 0 { + dirEmbed = R + } + p.locateBrackets(s.p.pairTypes, s.p.pairValues) + p.resolveBrackets(dirEmbed, s.p.initialTypes) +} + +type bracketPairer struct { + sos Class // direction corresponding to start of sequence + + // The following is a restatement of BD 16 using non-algorithmic language. + // + // A bracket pair is a pair of characters consisting of an opening + // paired bracket and a closing paired bracket such that the + // Bidi_Paired_Bracket property value of the former equals the latter, + // subject to the following constraints. + // - both characters of a pair occur in the same isolating run sequence + // - the closing character of a pair follows the opening character + // - any bracket character can belong at most to one pair, the earliest possible one + // - any bracket character not part of a pair is treated like an ordinary character + // - pairs may nest properly, but their spans may not overlap otherwise + + // Bracket characters with canonical decompositions are supposed to be + // treated as if they had been normalized, to allow normalized and non- + // normalized text to give the same result. In this implementation that step + // is pushed out to the caller. The caller has to ensure that the pairValue + // slices contain the rune of the opening bracket after normalization for + // any opening or closing bracket. + + openers *list.List // list of positions for opening brackets + + // bracket pair positions sorted by location of opening bracket + pairPositions bracketPairs + + codesIsolatedRun []Class // directional bidi codes for an isolated run + indexes []int // array of index values into the original string + +} + +// matchOpener reports whether characters at given positions form a matching +// bracket pair. +func (p *bracketPairer) matchOpener(pairValues []rune, opener, closer int) bool { + return pairValues[p.indexes[opener]] == pairValues[p.indexes[closer]] +} + +const maxPairingDepth = 63 + +// locateBrackets locates matching bracket pairs according to BD16. +// +// This implementation uses a linked list instead of a stack, because, while +// elements are added at the front (like a push) they are not generally removed +// in atomic 'pop' operations, reducing the benefit of the stack archetype. +func (p *bracketPairer) locateBrackets(pairTypes []bracketType, pairValues []rune) { + // traverse the run + // do that explicitly (not in a for-each) so we can record position + for i, index := range p.indexes { + + // look at the bracket type for each character + if pairTypes[index] == bpNone || p.codesIsolatedRun[i] != ON { + // continue scanning + continue + } + switch pairTypes[index] { + case bpOpen: + // check if maximum pairing depth reached + if p.openers.Len() == maxPairingDepth { + p.openers.Init() + return + } + // remember opener location, most recent first + p.openers.PushFront(i) + + case bpClose: + // see if there is a match + count := 0 + for elem := p.openers.Front(); elem != nil; elem = elem.Next() { + count++ + opener := elem.Value.(int) + if p.matchOpener(pairValues, opener, i) { + // if the opener matches, add nested pair to the ordered list + p.pairPositions = append(p.pairPositions, bracketPair{opener, i}) + // remove up to and including matched opener + for ; count > 0; count-- { + p.openers.Remove(p.openers.Front()) + } + break + } + } + sort.Sort(p.pairPositions) + // if we get here, the closing bracket matched no openers + // and gets ignored + } + } +} + +// Bracket pairs within an isolating run sequence are processed as units so +// that both the opening and the closing paired bracket in a pair resolve to +// the same direction. +// +// N0. Process bracket pairs in an isolating run sequence sequentially in +// the logical order of the text positions of the opening paired brackets +// using the logic given below. Within this scope, bidirectional types EN +// and AN are treated as R. +// +// Identify the bracket pairs in the current isolating run sequence +// according to BD16. For each bracket-pair element in the list of pairs of +// text positions: +// +// a Inspect the bidirectional types of the characters enclosed within the +// bracket pair. +// +// b If any strong type (either L or R) matching the embedding direction is +// found, set the type for both brackets in the pair to match the embedding +// direction. +// +// o [ e ] o -> o e e e o +// +// o [ o e ] -> o e o e e +// +// o [ NI e ] -> o e NI e e +// +// c Otherwise, if a strong type (opposite the embedding direction) is +// found, test for adjacent strong types as follows: 1 First, check +// backwards before the opening paired bracket until the first strong type +// (L, R, or sos) is found. If that first preceding strong type is opposite +// the embedding direction, then set the type for both brackets in the pair +// to that type. 2 Otherwise, set the type for both brackets in the pair to +// the embedding direction. +// +// o [ o ] e -> o o o o e +// +// o [ o NI ] o -> o o o NI o o +// +// e [ o ] o -> e e o e o +// +// e [ o ] e -> e e o e e +// +// e ( o [ o ] NI ) e -> e e o o o o NI e e +// +// d Otherwise, do not set the type for the current bracket pair. Note that +// if the enclosed text contains no strong types the paired brackets will +// both resolve to the same level when resolved individually using rules N1 +// and N2. +// +// e ( NI ) o -> e ( NI ) o + +// getStrongTypeN0 maps character's directional code to strong type as required +// by rule N0. +// +// TODO: have separate type for "strong" directionality. +func (p *bracketPairer) getStrongTypeN0(index int) Class { + switch p.codesIsolatedRun[index] { + // in the scope of N0, number types are treated as R + case EN, AN, AL, R: + return R + case L: + return L + default: + return ON + } +} + +// classifyPairContent reports the strong types contained inside a Bracket Pair, +// assuming the given embedding direction. +// +// It returns ON if no strong type is found. If a single strong type is found, +// it returns this type. Otherwise it returns the embedding direction. +// +// TODO: use separate type for "strong" directionality. +func (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class { + dirOpposite := ON + for i := loc.opener + 1; i < loc.closer; i++ { + dir := p.getStrongTypeN0(i) + if dir == ON { + continue + } + if dir == dirEmbed { + return dir // type matching embedding direction found + } + dirOpposite = dir + } + // return ON if no strong type found, or class opposite to dirEmbed + return dirOpposite +} + +// classBeforePair determines which strong types are present before a Bracket +// Pair. Return R or L if strong type found, otherwise ON. +func (p *bracketPairer) classBeforePair(loc bracketPair) Class { + for i := loc.opener - 1; i >= 0; i-- { + if dir := p.getStrongTypeN0(i); dir != ON { + return dir + } + } + // no strong types found, return sos + return p.sos +} + +// assignBracketType implements rule N0 for a single bracket pair. +func (p *bracketPairer) assignBracketType(loc bracketPair, dirEmbed Class, initialTypes []Class) { + // rule "N0, a", inspect contents of pair + dirPair := p.classifyPairContent(loc, dirEmbed) + + // dirPair is now L, R, or N (no strong type found) + + // the following logical tests are performed out of order compared to + // the statement of the rules but yield the same results + if dirPair == ON { + return // case "d" - nothing to do + } + + if dirPair != dirEmbed { + // case "c": strong type found, opposite - check before (c.1) + dirPair = p.classBeforePair(loc) + if dirPair == dirEmbed || dirPair == ON { + // no strong opposite type found before - use embedding (c.2) + dirPair = dirEmbed + } + } + // else: case "b", strong type found matching embedding, + // no explicit action needed, as dirPair is already set to embedding + // direction + + // set the bracket types to the type found + p.setBracketsToType(loc, dirPair, initialTypes) +} + +func (p *bracketPairer) setBracketsToType(loc bracketPair, dirPair Class, initialTypes []Class) { + p.codesIsolatedRun[loc.opener] = dirPair + p.codesIsolatedRun[loc.closer] = dirPair + + for i := loc.opener + 1; i < loc.closer; i++ { + index := p.indexes[i] + if initialTypes[index] != NSM { + break + } + p.codesIsolatedRun[i] = dirPair + } + + for i := loc.closer + 1; i < len(p.indexes); i++ { + index := p.indexes[i] + if initialTypes[index] != NSM { + break + } + p.codesIsolatedRun[i] = dirPair + } +} + +// resolveBrackets implements rule N0 for a list of pairs. +func (p *bracketPairer) resolveBrackets(dirEmbed Class, initialTypes []Class) { + for _, loc := range p.pairPositions { + p.assignBracketType(loc, dirEmbed, initialTypes) + } +} diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go new file mode 100644 index 0000000..9d2ae54 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/core.go @@ -0,0 +1,1071 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bidi + +import ( + "fmt" + "log" +) + +// This implementation is a port based on the reference implementation found at: +// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/ +// +// described in Unicode Bidirectional Algorithm (UAX #9). +// +// Input: +// There are two levels of input to the algorithm, since clients may prefer to +// supply some information from out-of-band sources rather than relying on the +// default behavior. +// +// - Bidi class array +// - Bidi class array, with externally supplied base line direction +// +// Output: +// Output is separated into several stages: +// +// - levels array over entire paragraph +// - reordering array over entire paragraph +// - levels array over line +// - reordering array over line +// +// Note that for conformance to the Unicode Bidirectional Algorithm, +// implementations are only required to generate correct reordering and +// character directionality (odd or even levels) over a line. Generating +// identical level arrays over a line is not required. Bidi explicit format +// codes (LRE, RLE, LRO, RLO, PDF) and BN can be assigned arbitrary levels and +// positions as long as the rest of the input is properly reordered. +// +// As the algorithm is defined to operate on a single paragraph at a time, this +// implementation is written to handle single paragraphs. Thus rule P1 is +// presumed by this implementation-- the data provided to the implementation is +// assumed to be a single paragraph, and either contains no 'B' codes, or a +// single 'B' code at the end of the input. 'B' is allowed as input to +// illustrate how the algorithm assigns it a level. +// +// Also note that rules L3 and L4 depend on the rendering engine that uses the +// result of the bidi algorithm. This implementation assumes that the rendering +// engine expects combining marks in visual order (e.g. to the left of their +// base character in RTL runs) and that it adjusts the glyphs used to render +// mirrored characters that are in RTL runs so that they render appropriately. + +// level is the embedding level of a character. Even embedding levels indicate +// left-to-right order and odd levels indicate right-to-left order. The special +// level of -1 is reserved for undefined order. +type level int8 + +const implicitLevel level = -1 + +// in returns if x is equal to any of the values in set. +func (c Class) in(set ...Class) bool { + for _, s := range set { + if c == s { + return true + } + } + return false +} + +// A paragraph contains the state of a paragraph. +type paragraph struct { + initialTypes []Class + + // Arrays of properties needed for paired bracket evaluation in N0 + pairTypes []bracketType // paired Bracket types for paragraph + pairValues []rune // rune for opening bracket or pbOpen and pbClose; 0 for pbNone + + embeddingLevel level // default: = implicitLevel; + + // at the paragraph levels + resultTypes []Class + resultLevels []level + + // Index of matching PDI for isolate initiator characters. For other + // characters, the value of matchingPDI will be set to -1. For isolate + // initiators with no matching PDI, matchingPDI will be set to the length of + // the input string. + matchingPDI []int + + // Index of matching isolate initiator for PDI characters. For other + // characters, and for PDIs with no matching isolate initiator, the value of + // matchingIsolateInitiator will be set to -1. + matchingIsolateInitiator []int +} + +// newParagraph initializes a paragraph. The user needs to supply a few arrays +// corresponding to the preprocessed text input. The types correspond to the +// Unicode BiDi classes for each rune. pairTypes indicates the bracket type for +// each rune. pairValues provides a unique bracket class identifier for each +// rune (suggested is the rune of the open bracket for opening and matching +// close brackets, after normalization). The embedding levels are optional, but +// may be supplied to encode embedding levels of styled text. +func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) (*paragraph, error) { + var err error + if err = validateTypes(types); err != nil { + return nil, err + } + if err = validatePbTypes(pairTypes); err != nil { + return nil, err + } + if err = validatePbValues(pairValues, pairTypes); err != nil { + return nil, err + } + if err = validateParagraphEmbeddingLevel(levels); err != nil { + return nil, err + } + + p := ¶graph{ + initialTypes: append([]Class(nil), types...), + embeddingLevel: levels, + + pairTypes: pairTypes, + pairValues: pairValues, + + resultTypes: append([]Class(nil), types...), + } + p.run() + return p, nil +} + +func (p *paragraph) Len() int { return len(p.initialTypes) } + +// The algorithm. Does not include line-based processing (Rules L1, L2). +// These are applied later in the line-based phase of the algorithm. +func (p *paragraph) run() { + p.determineMatchingIsolates() + + // 1) determining the paragraph level + // Rule P1 is the requirement for entering this algorithm. + // Rules P2, P3. + // If no externally supplied paragraph embedding level, use default. + if p.embeddingLevel == implicitLevel { + p.embeddingLevel = p.determineParagraphEmbeddingLevel(0, p.Len()) + } + + // Initialize result levels to paragraph embedding level. + p.resultLevels = make([]level, p.Len()) + setLevels(p.resultLevels, p.embeddingLevel) + + // 2) Explicit levels and directions + // Rules X1-X8. + p.determineExplicitEmbeddingLevels() + + // Rule X9. + // We do not remove the embeddings, the overrides, the PDFs, and the BNs + // from the string explicitly. But they are not copied into isolating run + // sequences when they are created, so they are removed for all + // practical purposes. + + // Rule X10. + // Run remainder of algorithm one isolating run sequence at a time + for _, seq := range p.determineIsolatingRunSequences() { + // 3) resolving weak types + // Rules W1-W7. + seq.resolveWeakTypes() + + // 4a) resolving paired brackets + // Rule N0 + resolvePairedBrackets(seq) + + // 4b) resolving neutral types + // Rules N1-N3. + seq.resolveNeutralTypes() + + // 5) resolving implicit embedding levels + // Rules I1, I2. + seq.resolveImplicitLevels() + + // Apply the computed levels and types + seq.applyLevelsAndTypes() + } + + // Assign appropriate levels to 'hide' LREs, RLEs, LROs, RLOs, PDFs, and + // BNs. This is for convenience, so the resulting level array will have + // a value for every character. + p.assignLevelsToCharactersRemovedByX9() +} + +// determineMatchingIsolates determines the matching PDI for each isolate +// initiator and vice versa. +// +// Definition BD9. +// +// At the end of this function: +// +// - The member variable matchingPDI is set to point to the index of the +// matching PDI character for each isolate initiator character. If there is +// no matching PDI, it is set to the length of the input text. For other +// characters, it is set to -1. +// - The member variable matchingIsolateInitiator is set to point to the +// index of the matching isolate initiator character for each PDI character. +// If there is no matching isolate initiator, or the character is not a PDI, +// it is set to -1. +func (p *paragraph) determineMatchingIsolates() { + p.matchingPDI = make([]int, p.Len()) + p.matchingIsolateInitiator = make([]int, p.Len()) + + for i := range p.matchingIsolateInitiator { + p.matchingIsolateInitiator[i] = -1 + } + + for i := range p.matchingPDI { + p.matchingPDI[i] = -1 + + if t := p.resultTypes[i]; t.in(LRI, RLI, FSI) { + depthCounter := 1 + for j := i + 1; j < p.Len(); j++ { + if u := p.resultTypes[j]; u.in(LRI, RLI, FSI) { + depthCounter++ + } else if u == PDI { + if depthCounter--; depthCounter == 0 { + p.matchingPDI[i] = j + p.matchingIsolateInitiator[j] = i + break + } + } + } + if p.matchingPDI[i] == -1 { + p.matchingPDI[i] = p.Len() + } + } + } +} + +// determineParagraphEmbeddingLevel reports the resolved paragraph direction of +// the substring limited by the given range [start, end). +// +// Determines the paragraph level based on rules P2, P3. This is also used +// in rule X5c to find if an FSI should resolve to LRI or RLI. +func (p *paragraph) determineParagraphEmbeddingLevel(start, end int) level { + var strongType Class = unknownClass + + // Rule P2. + for i := start; i < end; i++ { + if t := p.resultTypes[i]; t.in(L, AL, R) { + strongType = t + break + } else if t.in(FSI, LRI, RLI) { + i = p.matchingPDI[i] // skip over to the matching PDI + if i > end { + log.Panic("assert (i <= end)") + } + } + } + // Rule P3. + switch strongType { + case unknownClass: // none found + // default embedding level when no strong types found is 0. + return 0 + case L: + return 0 + default: // AL, R + return 1 + } +} + +const maxDepth = 125 + +// This stack will store the embedding levels and override and isolated +// statuses +type directionalStatusStack struct { + stackCounter int + embeddingLevelStack [maxDepth + 1]level + overrideStatusStack [maxDepth + 1]Class + isolateStatusStack [maxDepth + 1]bool +} + +func (s *directionalStatusStack) empty() { s.stackCounter = 0 } +func (s *directionalStatusStack) pop() { s.stackCounter-- } +func (s *directionalStatusStack) depth() int { return s.stackCounter } + +func (s *directionalStatusStack) push(level level, overrideStatus Class, isolateStatus bool) { + s.embeddingLevelStack[s.stackCounter] = level + s.overrideStatusStack[s.stackCounter] = overrideStatus + s.isolateStatusStack[s.stackCounter] = isolateStatus + s.stackCounter++ +} + +func (s *directionalStatusStack) lastEmbeddingLevel() level { + return s.embeddingLevelStack[s.stackCounter-1] +} + +func (s *directionalStatusStack) lastDirectionalOverrideStatus() Class { + return s.overrideStatusStack[s.stackCounter-1] +} + +func (s *directionalStatusStack) lastDirectionalIsolateStatus() bool { + return s.isolateStatusStack[s.stackCounter-1] +} + +// Determine explicit levels using rules X1 - X8 +func (p *paragraph) determineExplicitEmbeddingLevels() { + var stack directionalStatusStack + var overflowIsolateCount, overflowEmbeddingCount, validIsolateCount int + + // Rule X1. + stack.push(p.embeddingLevel, ON, false) + + for i, t := range p.resultTypes { + // Rules X2, X3, X4, X5, X5a, X5b, X5c + switch t { + case RLE, LRE, RLO, LRO, RLI, LRI, FSI: + isIsolate := t.in(RLI, LRI, FSI) + isRTL := t.in(RLE, RLO, RLI) + + // override if this is an FSI that resolves to RLI + if t == FSI { + isRTL = (p.determineParagraphEmbeddingLevel(i+1, p.matchingPDI[i]) == 1) + } + if isIsolate { + p.resultLevels[i] = stack.lastEmbeddingLevel() + if stack.lastDirectionalOverrideStatus() != ON { + p.resultTypes[i] = stack.lastDirectionalOverrideStatus() + } + } + + var newLevel level + if isRTL { + // least greater odd + newLevel = (stack.lastEmbeddingLevel() + 1) | 1 + } else { + // least greater even + newLevel = (stack.lastEmbeddingLevel() + 2) &^ 1 + } + + if newLevel <= maxDepth && overflowIsolateCount == 0 && overflowEmbeddingCount == 0 { + if isIsolate { + validIsolateCount++ + } + // Push new embedding level, override status, and isolated + // status. + // No check for valid stack counter, since the level check + // suffices. + switch t { + case LRO: + stack.push(newLevel, L, isIsolate) + case RLO: + stack.push(newLevel, R, isIsolate) + default: + stack.push(newLevel, ON, isIsolate) + } + // Not really part of the spec + if !isIsolate { + p.resultLevels[i] = newLevel + } + } else { + // This is an invalid explicit formatting character, + // so apply the "Otherwise" part of rules X2-X5b. + if isIsolate { + overflowIsolateCount++ + } else { // !isIsolate + if overflowIsolateCount == 0 { + overflowEmbeddingCount++ + } + } + } + + // Rule X6a + case PDI: + if overflowIsolateCount > 0 { + overflowIsolateCount-- + } else if validIsolateCount == 0 { + // do nothing + } else { + overflowEmbeddingCount = 0 + for !stack.lastDirectionalIsolateStatus() { + stack.pop() + } + stack.pop() + validIsolateCount-- + } + p.resultLevels[i] = stack.lastEmbeddingLevel() + + // Rule X7 + case PDF: + // Not really part of the spec + p.resultLevels[i] = stack.lastEmbeddingLevel() + + if overflowIsolateCount > 0 { + // do nothing + } else if overflowEmbeddingCount > 0 { + overflowEmbeddingCount-- + } else if !stack.lastDirectionalIsolateStatus() && stack.depth() >= 2 { + stack.pop() + } + + case B: // paragraph separator. + // Rule X8. + + // These values are reset for clarity, in this implementation B + // can only occur as the last code in the array. + stack.empty() + overflowIsolateCount = 0 + overflowEmbeddingCount = 0 + validIsolateCount = 0 + p.resultLevels[i] = p.embeddingLevel + + default: + p.resultLevels[i] = stack.lastEmbeddingLevel() + if stack.lastDirectionalOverrideStatus() != ON { + p.resultTypes[i] = stack.lastDirectionalOverrideStatus() + } + } + } +} + +type isolatingRunSequence struct { + p *paragraph + + indexes []int // indexes to the original string + + types []Class // type of each character using the index + resolvedLevels []level // resolved levels after application of rules + level level + sos, eos Class +} + +func (i *isolatingRunSequence) Len() int { return len(i.indexes) } + +func maxLevel(a, b level) level { + if a > b { + return a + } + return b +} + +// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types, +// either L or R, for each isolating run sequence. +func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence { + length := len(indexes) + types := make([]Class, length) + for i, x := range indexes { + types[i] = p.resultTypes[x] + } + + // assign level, sos and eos + prevChar := indexes[0] - 1 + for prevChar >= 0 && isRemovedByX9(p.initialTypes[prevChar]) { + prevChar-- + } + prevLevel := p.embeddingLevel + if prevChar >= 0 { + prevLevel = p.resultLevels[prevChar] + } + + var succLevel level + lastType := types[length-1] + if lastType.in(LRI, RLI, FSI) { + succLevel = p.embeddingLevel + } else { + // the first character after the end of run sequence + limit := indexes[length-1] + 1 + for ; limit < p.Len() && isRemovedByX9(p.initialTypes[limit]); limit++ { + + } + succLevel = p.embeddingLevel + if limit < p.Len() { + succLevel = p.resultLevels[limit] + } + } + level := p.resultLevels[indexes[0]] + return &isolatingRunSequence{ + p: p, + indexes: indexes, + types: types, + level: level, + sos: typeForLevel(maxLevel(prevLevel, level)), + eos: typeForLevel(maxLevel(succLevel, level)), + } +} + +// Resolving weak types Rules W1-W7. +// +// Note that some weak types (EN, AN) remain after this processing is +// complete. +func (s *isolatingRunSequence) resolveWeakTypes() { + + // on entry, only these types remain + s.assertOnly(L, R, AL, EN, ES, ET, AN, CS, B, S, WS, ON, NSM, LRI, RLI, FSI, PDI) + + // Rule W1. + // Changes all NSMs. + precedingCharacterType := s.sos + for i, t := range s.types { + if t == NSM { + s.types[i] = precedingCharacterType + } else { + // if t.in(LRI, RLI, FSI, PDI) { + // precedingCharacterType = ON + // } + precedingCharacterType = t + } + } + + // Rule W2. + // EN does not change at the start of the run, because sos != AL. + for i, t := range s.types { + if t == EN { + for j := i - 1; j >= 0; j-- { + if t := s.types[j]; t.in(L, R, AL) { + if t == AL { + s.types[i] = AN + } + break + } + } + } + } + + // Rule W3. + for i, t := range s.types { + if t == AL { + s.types[i] = R + } + } + + // Rule W4. + // Since there must be values on both sides for this rule to have an + // effect, the scan skips the first and last value. + // + // Although the scan proceeds left to right, and changes the type + // values in a way that would appear to affect the computations + // later in the scan, there is actually no problem. A change in the + // current value can only affect the value to its immediate right, + // and only affect it if it is ES or CS. But the current value can + // only change if the value to its right is not ES or CS. Thus + // either the current value will not change, or its change will have + // no effect on the remainder of the analysis. + + for i := 1; i < s.Len()-1; i++ { + t := s.types[i] + if t == ES || t == CS { + prevSepType := s.types[i-1] + succSepType := s.types[i+1] + if prevSepType == EN && succSepType == EN { + s.types[i] = EN + } else if s.types[i] == CS && prevSepType == AN && succSepType == AN { + s.types[i] = AN + } + } + } + + // Rule W5. + for i, t := range s.types { + if t == ET { + // locate end of sequence + runStart := i + runEnd := s.findRunLimit(runStart, ET) + + // check values at ends of sequence + t := s.sos + if runStart > 0 { + t = s.types[runStart-1] + } + if t != EN { + t = s.eos + if runEnd < len(s.types) { + t = s.types[runEnd] + } + } + if t == EN { + setTypes(s.types[runStart:runEnd], EN) + } + // continue at end of sequence + i = runEnd + } + } + + // Rule W6. + for i, t := range s.types { + if t.in(ES, ET, CS) { + s.types[i] = ON + } + } + + // Rule W7. + for i, t := range s.types { + if t == EN { + // set default if we reach start of run + prevStrongType := s.sos + for j := i - 1; j >= 0; j-- { + t = s.types[j] + if t == L || t == R { // AL's have been changed to R + prevStrongType = t + break + } + } + if prevStrongType == L { + s.types[i] = L + } + } + } +} + +// 6) resolving neutral types Rules N1-N2. +func (s *isolatingRunSequence) resolveNeutralTypes() { + + // on entry, only these types can be in resultTypes + s.assertOnly(L, R, EN, AN, B, S, WS, ON, RLI, LRI, FSI, PDI) + + for i, t := range s.types { + switch t { + case WS, ON, B, S, RLI, LRI, FSI, PDI: + // find bounds of run of neutrals + runStart := i + runEnd := s.findRunLimit(runStart, B, S, WS, ON, RLI, LRI, FSI, PDI) + + // determine effective types at ends of run + var leadType, trailType Class + + // Note that the character found can only be L, R, AN, or + // EN. + if runStart == 0 { + leadType = s.sos + } else { + leadType = s.types[runStart-1] + if leadType.in(AN, EN) { + leadType = R + } + } + if runEnd == len(s.types) { + trailType = s.eos + } else { + trailType = s.types[runEnd] + if trailType.in(AN, EN) { + trailType = R + } + } + + var resolvedType Class + if leadType == trailType { + // Rule N1. + resolvedType = leadType + } else { + // Rule N2. + // Notice the embedding level of the run is used, not + // the paragraph embedding level. + resolvedType = typeForLevel(s.level) + } + + setTypes(s.types[runStart:runEnd], resolvedType) + + // skip over run of (former) neutrals + i = runEnd + } + } +} + +func setLevels(levels []level, newLevel level) { + for i := range levels { + levels[i] = newLevel + } +} + +func setTypes(types []Class, newType Class) { + for i := range types { + types[i] = newType + } +} + +// 7) resolving implicit embedding levels Rules I1, I2. +func (s *isolatingRunSequence) resolveImplicitLevels() { + + // on entry, only these types can be in resultTypes + s.assertOnly(L, R, EN, AN) + + s.resolvedLevels = make([]level, len(s.types)) + setLevels(s.resolvedLevels, s.level) + + if (s.level & 1) == 0 { // even level + for i, t := range s.types { + // Rule I1. + if t == L { + // no change + } else if t == R { + s.resolvedLevels[i] += 1 + } else { // t == AN || t == EN + s.resolvedLevels[i] += 2 + } + } + } else { // odd level + for i, t := range s.types { + // Rule I2. + if t == R { + // no change + } else { // t == L || t == AN || t == EN + s.resolvedLevels[i] += 1 + } + } + } +} + +// Applies the levels and types resolved in rules W1-I2 to the +// resultLevels array. +func (s *isolatingRunSequence) applyLevelsAndTypes() { + for i, x := range s.indexes { + s.p.resultTypes[x] = s.types[i] + s.p.resultLevels[x] = s.resolvedLevels[i] + } +} + +// Return the limit of the run consisting only of the types in validSet +// starting at index. This checks the value at index, and will return +// index if that value is not in validSet. +func (s *isolatingRunSequence) findRunLimit(index int, validSet ...Class) int { +loop: + for ; index < len(s.types); index++ { + t := s.types[index] + for _, valid := range validSet { + if t == valid { + continue loop + } + } + return index // didn't find a match in validSet + } + return len(s.types) +} + +// Algorithm validation. Assert that all values in types are in the +// provided set. +func (s *isolatingRunSequence) assertOnly(codes ...Class) { +loop: + for i, t := range s.types { + for _, c := range codes { + if t == c { + continue loop + } + } + log.Panicf("invalid bidi code %v present in assertOnly at position %d", t, s.indexes[i]) + } +} + +// determineLevelRuns returns an array of level runs. Each level run is +// described as an array of indexes into the input string. +// +// Determines the level runs. Rule X9 will be applied in determining the +// runs, in the way that makes sure the characters that are supposed to be +// removed are not included in the runs. +func (p *paragraph) determineLevelRuns() [][]int { + run := []int{} + allRuns := [][]int{} + currentLevel := implicitLevel + + for i := range p.initialTypes { + if !isRemovedByX9(p.initialTypes[i]) { + if p.resultLevels[i] != currentLevel { + // we just encountered a new run; wrap up last run + if currentLevel >= 0 { // only wrap it up if there was a run + allRuns = append(allRuns, run) + run = nil + } + // Start new run + currentLevel = p.resultLevels[i] + } + run = append(run, i) + } + } + // Wrap up the final run, if any + if len(run) > 0 { + allRuns = append(allRuns, run) + } + return allRuns +} + +// Definition BD13. Determine isolating run sequences. +func (p *paragraph) determineIsolatingRunSequences() []*isolatingRunSequence { + levelRuns := p.determineLevelRuns() + + // Compute the run that each character belongs to + runForCharacter := make([]int, p.Len()) + for i, run := range levelRuns { + for _, index := range run { + runForCharacter[index] = i + } + } + + sequences := []*isolatingRunSequence{} + + var currentRunSequence []int + + for _, run := range levelRuns { + first := run[0] + if p.initialTypes[first] != PDI || p.matchingIsolateInitiator[first] == -1 { + currentRunSequence = nil + // int run = i; + for { + // Copy this level run into currentRunSequence + currentRunSequence = append(currentRunSequence, run...) + + last := currentRunSequence[len(currentRunSequence)-1] + lastT := p.initialTypes[last] + if lastT.in(LRI, RLI, FSI) && p.matchingPDI[last] != p.Len() { + run = levelRuns[runForCharacter[p.matchingPDI[last]]] + } else { + break + } + } + sequences = append(sequences, p.isolatingRunSequence(currentRunSequence)) + } + } + return sequences +} + +// Assign level information to characters removed by rule X9. This is for +// ease of relating the level information to the original input data. Note +// that the levels assigned to these codes are arbitrary, they're chosen so +// as to avoid breaking level runs. +func (p *paragraph) assignLevelsToCharactersRemovedByX9() { + for i, t := range p.initialTypes { + if t.in(LRE, RLE, LRO, RLO, PDF, BN) { + p.resultTypes[i] = t + p.resultLevels[i] = -1 + } + } + // now propagate forward the levels information (could have + // propagated backward, the main thing is not to introduce a level + // break where one doesn't already exist). + + if p.resultLevels[0] == -1 { + p.resultLevels[0] = p.embeddingLevel + } + for i := 1; i < len(p.initialTypes); i++ { + if p.resultLevels[i] == -1 { + p.resultLevels[i] = p.resultLevels[i-1] + } + } + // Embedding information is for informational purposes only so need not be + // adjusted. +} + +// +// Output +// + +// getLevels computes levels array breaking lines at offsets in linebreaks. +// Rule L1. +// +// The linebreaks array must include at least one value. The values must be +// in strictly increasing order (no duplicates) between 1 and the length of +// the text, inclusive. The last value must be the length of the text. +func (p *paragraph) getLevels(linebreaks []int) []level { + // Note that since the previous processing has removed all + // P, S, and WS values from resultTypes, the values referred to + // in these rules are the initial types, before any processing + // has been applied (including processing of overrides). + // + // This example implementation has reinserted explicit format codes + // and BN, in order that the levels array correspond to the + // initial text. Their final placement is not normative. + // These codes are treated like WS in this implementation, + // so they don't interrupt sequences of WS. + + validateLineBreaks(linebreaks, p.Len()) + + result := append([]level(nil), p.resultLevels...) + + // don't worry about linebreaks since if there is a break within + // a series of WS values preceding S, the linebreak itself + // causes the reset. + for i, t := range p.initialTypes { + if t.in(B, S) { + // Rule L1, clauses one and two. + result[i] = p.embeddingLevel + + // Rule L1, clause three. + for j := i - 1; j >= 0; j-- { + if isWhitespace(p.initialTypes[j]) { // including format codes + result[j] = p.embeddingLevel + } else { + break + } + } + } + } + + // Rule L1, clause four. + start := 0 + for _, limit := range linebreaks { + for j := limit - 1; j >= start; j-- { + if isWhitespace(p.initialTypes[j]) { // including format codes + result[j] = p.embeddingLevel + } else { + break + } + } + start = limit + } + + return result +} + +// getReordering returns the reordering of lines from a visual index to a +// logical index for line breaks at the given offsets. +// +// Lines are concatenated from left to right. So for example, the fifth +// character from the left on the third line is +// +// getReordering(linebreaks)[linebreaks[1] + 4] +// +// (linebreaks[1] is the position after the last character of the second +// line, which is also the index of the first character on the third line, +// and adding four gets the fifth character from the left). +// +// The linebreaks array must include at least one value. The values must be +// in strictly increasing order (no duplicates) between 1 and the length of +// the text, inclusive. The last value must be the length of the text. +func (p *paragraph) getReordering(linebreaks []int) []int { + validateLineBreaks(linebreaks, p.Len()) + + return computeMultilineReordering(p.getLevels(linebreaks), linebreaks) +} + +// Return multiline reordering array for a given level array. Reordering +// does not occur across a line break. +func computeMultilineReordering(levels []level, linebreaks []int) []int { + result := make([]int, len(levels)) + + start := 0 + for _, limit := range linebreaks { + tempLevels := make([]level, limit-start) + copy(tempLevels, levels[start:]) + + for j, order := range computeReordering(tempLevels) { + result[start+j] = order + start + } + start = limit + } + return result +} + +// Return reordering array for a given level array. This reorders a single +// line. The reordering is a visual to logical map. For example, the +// leftmost char is string.charAt(order[0]). Rule L2. +func computeReordering(levels []level) []int { + result := make([]int, len(levels)) + // initialize order + for i := range result { + result[i] = i + } + + // locate highest level found on line. + // Note the rules say text, but no reordering across line bounds is + // performed, so this is sufficient. + highestLevel := level(0) + lowestOddLevel := level(maxDepth + 2) + for _, level := range levels { + if level > highestLevel { + highestLevel = level + } + if level&1 != 0 && level < lowestOddLevel { + lowestOddLevel = level + } + } + + for level := highestLevel; level >= lowestOddLevel; level-- { + for i := 0; i < len(levels); i++ { + if levels[i] >= level { + // find range of text at or above this level + start := i + limit := i + 1 + for limit < len(levels) && levels[limit] >= level { + limit++ + } + + for j, k := start, limit-1; j < k; j, k = j+1, k-1 { + result[j], result[k] = result[k], result[j] + } + // skip to end of level run + i = limit + } + } + } + + return result +} + +// isWhitespace reports whether the type is considered a whitespace type for the +// line break rules. +func isWhitespace(c Class) bool { + switch c { + case LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, BN, WS: + return true + } + return false +} + +// isRemovedByX9 reports whether the type is one of the types removed in X9. +func isRemovedByX9(c Class) bool { + switch c { + case LRE, RLE, LRO, RLO, PDF, BN: + return true + } + return false +} + +// typeForLevel reports the strong type (L or R) corresponding to the level. +func typeForLevel(level level) Class { + if (level & 0x1) == 0 { + return L + } + return R +} + +func validateTypes(types []Class) error { + if len(types) == 0 { + return fmt.Errorf("types is null") + } + for i, t := range types[:len(types)-1] { + if t == B { + return fmt.Errorf("B type before end of paragraph at index: %d", i) + } + } + return nil +} + +func validateParagraphEmbeddingLevel(embeddingLevel level) error { + if embeddingLevel != implicitLevel && + embeddingLevel != 0 && + embeddingLevel != 1 { + return fmt.Errorf("illegal paragraph embedding level: %d", embeddingLevel) + } + return nil +} + +func validateLineBreaks(linebreaks []int, textLength int) error { + prev := 0 + for i, next := range linebreaks { + if next <= prev { + return fmt.Errorf("bad linebreak: %d at index: %d", next, i) + } + prev = next + } + if prev != textLength { + return fmt.Errorf("last linebreak was %d, want %d", prev, textLength) + } + return nil +} + +func validatePbTypes(pairTypes []bracketType) error { + if len(pairTypes) == 0 { + return fmt.Errorf("pairTypes is null") + } + for i, pt := range pairTypes { + switch pt { + case bpNone, bpOpen, bpClose: + default: + return fmt.Errorf("illegal pairType value at %d: %v", i, pairTypes[i]) + } + } + return nil +} + +func validatePbValues(pairValues []rune, pairTypes []bracketType) error { + if pairValues == nil { + return fmt.Errorf("pairValues is null") + } + if len(pairTypes) != len(pairValues) { + return fmt.Errorf("pairTypes is different length from pairValues") + } + return nil +} diff --git a/vendor/golang.org/x/text/unicode/bidi/prop.go b/vendor/golang.org/x/text/unicode/bidi/prop.go new file mode 100644 index 0000000..7c9484e --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/prop.go @@ -0,0 +1,206 @@ +// 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. + +package bidi + +import "unicode/utf8" + +// Properties provides access to BiDi properties of runes. +type Properties struct { + entry uint8 + last uint8 +} + +var trie = newBidiTrie(0) + +// TODO: using this for bidirule reduces the running time by about 5%. Consider +// if this is worth exposing or if we can find a way to speed up the Class +// method. +// +// // CompactClass is like Class, but maps all of the BiDi control classes +// // (LRO, RLO, LRE, RLE, PDF, LRI, RLI, FSI, PDI) to the class Control. +// func (p Properties) CompactClass() Class { +// return Class(p.entry & 0x0F) +// } + +// Class returns the Bidi class for p. +func (p Properties) Class() Class { + c := Class(p.entry & 0x0F) + if c == Control { + c = controlByteToClass[p.last&0xF] + } + return c +} + +// IsBracket reports whether the rune is a bracket. +func (p Properties) IsBracket() bool { return p.entry&0xF0 != 0 } + +// IsOpeningBracket reports whether the rune is an opening bracket. +// IsBracket must return true. +func (p Properties) IsOpeningBracket() bool { return p.entry&openMask != 0 } + +// TODO: find a better API and expose. +func (p Properties) reverseBracket(r rune) rune { + return xorMasks[p.entry>>xorMaskShift] ^ r +} + +var controlByteToClass = [16]Class{ + 0xD: LRO, // U+202D LeftToRightOverride, + 0xE: RLO, // U+202E RightToLeftOverride, + 0xA: LRE, // U+202A LeftToRightEmbedding, + 0xB: RLE, // U+202B RightToLeftEmbedding, + 0xC: PDF, // U+202C PopDirectionalFormat, + 0x6: LRI, // U+2066 LeftToRightIsolate, + 0x7: RLI, // U+2067 RightToLeftIsolate, + 0x8: FSI, // U+2068 FirstStrongIsolate, + 0x9: PDI, // U+2069 PopDirectionalIsolate, +} + +// LookupRune returns properties for r. +func LookupRune(r rune) (p Properties, size int) { + var buf [4]byte + n := utf8.EncodeRune(buf[:], r) + return Lookup(buf[:n]) +} + +// TODO: these lookup methods are based on the generated trie code. The returned +// sizes have slightly different semantics from the generated code, in that it +// always returns size==1 for an illegal UTF-8 byte (instead of the length +// of the maximum invalid subsequence). Most Transformers, like unicode/norm, +// leave invalid UTF-8 untouched, in which case it has performance benefits to +// do so (without changing the semantics). Bidi requires the semantics used here +// for the bidirule implementation to be compatible with the Go semantics. +// They ultimately should perhaps be adopted by all trie implementations, for +// convenience sake. +// This unrolled code also boosts performance of the secure/bidirule package by +// about 30%. +// So, to remove this code: +// - add option to trie generator to define return type. +// - always return 1 byte size for ill-formed UTF-8 runes. + +// Lookup returns properties for the first rune in s and the width in bytes of +// its encoding. The size will be 0 if s does not hold enough bytes to complete +// the encoding. +func Lookup(s []byte) (p Properties, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return Properties{entry: bidiValues[c0]}, 1 + case c0 < 0xC2: + return Properties{}, 1 + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4 + } + // Illegal rune + return Properties{}, 1 +} + +// LookupString returns properties for the first rune in s and the width in +// bytes of its encoding. The size will be 0 if s does not hold enough bytes to +// complete the encoding. +func LookupString(s string) (p Properties, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return Properties{entry: bidiValues[c0]}, 1 + case c0 < 0xC2: + return Properties{}, 1 + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return Properties{}, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return Properties{}, 1 + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return Properties{}, 1 + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return Properties{}, 1 + } + return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4 + } + // Illegal rune + return Properties{}, 1 +} diff --git a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go new file mode 100644 index 0000000..d2bd711 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go @@ -0,0 +1,1815 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.10 && !go1.13 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 16128 bytes (15.75 KiB). Checksum: 8122d83e461996f. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 228 blocks, 14592 entries, 14592 bytes +// The third block is the zero block. +var bidiValues = [14592]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, + 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, + 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, + 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, + 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, + 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, + 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, + 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, + // Block 0x5e, offset 0x1780 + 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, + 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, + 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, + 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, + 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, + 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, + 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, + 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, + 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, + 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, + 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, + 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, + 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, + 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, + 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, + 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, + 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, + 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, + 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, + 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, + 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19ef: 0x000c, + 0x19f0: 0x000c, 0x19f1: 0x000c, + 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, + 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, + 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, + 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, + 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, + 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, + 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, + 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, + 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, + 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, + 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, + 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, + 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, + 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, + 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, + 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, + 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, + 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, + 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, + 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, + 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, + 0x1bf0: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, + 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, + 0x1c20: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c7b: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, + 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, + 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, + 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, + 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, + 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cdd: 0x000a, + 0x1cde: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d10: 0x000a, 0x1d11: 0x000a, + 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, + 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, + 0x1d1e: 0x000a, 0x1d1f: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, + 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e1e: 0x000a, 0x1e1f: 0x000a, + 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e50: 0x000a, 0x1e51: 0x000a, + 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, + 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, + 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, + 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, + 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, + 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, + 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, + 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, + 0x1e86: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f2f: 0x000c, + 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, + 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, + 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f5e: 0x000c, 0x1f5f: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1fb0: 0x000c, 0x1fb1: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, + 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, + 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, + 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, + 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, + 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, + // Block 0x80, offset 0x2000 + 0x2008: 0x000a, + // Block 0x81, offset 0x2040 + 0x2042: 0x000c, + 0x2046: 0x000c, 0x204b: 0x000c, + 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, + 0x206a: 0x000a, 0x206b: 0x000a, + 0x2078: 0x0004, 0x2079: 0x0004, + // Block 0x82, offset 0x2080 + 0x20b4: 0x000a, 0x20b5: 0x000a, + 0x20b6: 0x000a, 0x20b7: 0x000a, + // Block 0x83, offset 0x20c0 + 0x20c4: 0x000c, 0x20c5: 0x000c, + 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, + 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, + 0x20f0: 0x000c, 0x20f1: 0x000c, + // Block 0x84, offset 0x2100 + 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, + // Block 0x85, offset 0x2140 + 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, + 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, + // Block 0x86, offset 0x2180 + 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, + 0x21b3: 0x000c, + 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, + 0x21bc: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e5: 0x000c, + // Block 0x88, offset 0x2200 + 0x2229: 0x000c, + 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, + 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, + 0x2236: 0x000c, + // Block 0x89, offset 0x2240 + 0x2243: 0x000c, + 0x224c: 0x000c, + 0x227c: 0x000c, + // Block 0x8a, offset 0x2280 + 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, + 0x22b7: 0x000c, 0x22b8: 0x000c, + 0x22be: 0x000c, 0x22bf: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22c1: 0x000c, + 0x22ec: 0x000c, 0x22ed: 0x000c, + 0x22f6: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2325: 0x000c, 0x2328: 0x000c, + 0x232d: 0x000c, + // Block 0x8d, offset 0x2340 + 0x235d: 0x0001, + 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, + 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, + 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, + 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, + 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, + 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, + 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, + 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, + 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, + 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, + 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, + 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, + 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, + 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, + 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, + 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, + 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, + 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b, + 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b, + 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b, + 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b, + 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b, + 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d, + // Block 0x91, offset 0x2440 + 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c, + 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c, + 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a, + 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a, + 0x2458: 0x000a, 0x2459: 0x000a, + 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c, + 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c, + 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c, + 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a, + 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a, + 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a, + // Block 0x92, offset 0x2480 + 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a, + 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a, + 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a, + 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a, + 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003, + 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004, + 0x24aa: 0x0004, 0x24ab: 0x000a, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, + 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d, + 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d, + 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d, + 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d, + 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d, + 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d, + 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b, + // Block 0x94, offset 0x2500 + 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003, + 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002, + 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002, + 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a, + 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a, + 0x253b: 0x005a, + 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a, + // Block 0x95, offset 0x2540 + 0x2540: 0x000a, + 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a, + 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a, + 0x2564: 0x000a, 0x2565: 0x000a, + // Block 0x96, offset 0x2580 + 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a, + 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a, + 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a, + 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b, + 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a, + 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b, + // Block 0x97, offset 0x25c0 + 0x25c1: 0x000a, + // Block 0x98, offset 0x2600 + 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a, + 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a, + 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a, + 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a, + 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a, + 0x2620: 0x000a, + // Block 0x99, offset 0x2640 + 0x267d: 0x000c, + // Block 0x9a, offset 0x2680 + 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002, + 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002, + 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002, + 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002, + 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002, + // Block 0x9b, offset 0x26c0 + 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, + 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, + 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, + 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, + 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, + 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, + 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, + 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, + 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, + 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, + 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c, + 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a, + 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005, + 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005, + 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005, + 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, + 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005, + 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2881: 0x000c, + 0x28b8: 0x000c, 0x28b9: 0x000c, 0x28ba: 0x000c, 0x28bb: 0x000c, + 0x28bc: 0x000c, 0x28bd: 0x000c, 0x28be: 0x000c, 0x28bf: 0x000c, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000c, 0x28c1: 0x000c, 0x28c2: 0x000c, 0x28c3: 0x000c, 0x28c4: 0x000c, 0x28c5: 0x000c, + 0x28c6: 0x000c, + 0x28d2: 0x000a, 0x28d3: 0x000a, 0x28d4: 0x000a, 0x28d5: 0x000a, 0x28d6: 0x000a, 0x28d7: 0x000a, + 0x28d8: 0x000a, 0x28d9: 0x000a, 0x28da: 0x000a, 0x28db: 0x000a, 0x28dc: 0x000a, 0x28dd: 0x000a, + 0x28de: 0x000a, 0x28df: 0x000a, 0x28e0: 0x000a, 0x28e1: 0x000a, 0x28e2: 0x000a, 0x28e3: 0x000a, + 0x28e4: 0x000a, 0x28e5: 0x000a, + 0x28ff: 0x000c, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000c, 0x2901: 0x000c, + 0x2933: 0x000c, 0x2934: 0x000c, 0x2935: 0x000c, + 0x2936: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c, + 0x2967: 0x000c, 0x2968: 0x000c, 0x2969: 0x000c, + 0x296a: 0x000c, 0x296b: 0x000c, 0x296d: 0x000c, 0x296e: 0x000c, 0x296f: 0x000c, + 0x2970: 0x000c, 0x2971: 0x000c, 0x2972: 0x000c, 0x2973: 0x000c, 0x2974: 0x000c, + // Block 0xa6, offset 0x2980 + 0x29b3: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000c, 0x29c1: 0x000c, + 0x29f6: 0x000c, 0x29f7: 0x000c, 0x29f8: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, 0x29fb: 0x000c, + 0x29fc: 0x000c, 0x29fd: 0x000c, 0x29fe: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a0a: 0x000c, 0x2a0b: 0x000c, + 0x2a0c: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a6f: 0x000c, + 0x2a70: 0x000c, 0x2a71: 0x000c, 0x2a74: 0x000c, + 0x2a76: 0x000c, 0x2a77: 0x000c, + 0x2a7e: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a9f: 0x000c, 0x2aa3: 0x000c, + 0x2aa4: 0x000c, 0x2aa5: 0x000c, 0x2aa6: 0x000c, 0x2aa7: 0x000c, 0x2aa8: 0x000c, 0x2aa9: 0x000c, + 0x2aaa: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, + 0x2afc: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, + 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c, + 0x2b2a: 0x000c, 0x2b2b: 0x000c, 0x2b2c: 0x000c, + 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b32: 0x000c, 0x2b33: 0x000c, 0x2b34: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, + 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, 0x2b7f: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b82: 0x000c, 0x2b83: 0x000c, 0x2b84: 0x000c, + 0x2b86: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bf3: 0x000c, 0x2bf4: 0x000c, 0x2bf5: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bfa: 0x000c, + 0x2bff: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x000c, 0x2c02: 0x000c, 0x2c03: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c, + 0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7f: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x000c, + 0x2c9c: 0x000c, 0x2c9d: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c, + 0x2cf6: 0x000c, 0x2cf7: 0x000c, 0x2cf8: 0x000c, 0x2cf9: 0x000c, 0x2cfa: 0x000c, + 0x2cfd: 0x000c, 0x2cff: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x000c, + 0x2d20: 0x000a, 0x2d21: 0x000a, 0x2d22: 0x000a, 0x2d23: 0x000a, + 0x2d24: 0x000a, 0x2d25: 0x000a, 0x2d26: 0x000a, 0x2d27: 0x000a, 0x2d28: 0x000a, 0x2d29: 0x000a, + 0x2d2a: 0x000a, 0x2d2b: 0x000a, 0x2d2c: 0x000a, + // Block 0xb5, offset 0x2d40 + 0x2d6b: 0x000c, 0x2d6d: 0x000c, + 0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c, + 0x2d77: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2d9d: 0x000c, + 0x2d9e: 0x000c, 0x2d9f: 0x000c, 0x2da2: 0x000c, 0x2da3: 0x000c, + 0x2da4: 0x000c, 0x2da5: 0x000c, 0x2da7: 0x000c, 0x2da8: 0x000c, 0x2da9: 0x000c, + 0x2daa: 0x000c, 0x2dab: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc1: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, 0x2dc4: 0x000c, 0x2dc5: 0x000c, + 0x2dc6: 0x000c, 0x2dc9: 0x000c, 0x2dca: 0x000c, + 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c, + 0x2df6: 0x000c, 0x2df7: 0x000c, 0x2df8: 0x000c, 0x2dfb: 0x000c, + 0x2dfc: 0x000c, 0x2dfd: 0x000c, 0x2dfe: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e07: 0x000c, + 0x2e11: 0x000c, + 0x2e12: 0x000c, 0x2e13: 0x000c, 0x2e14: 0x000c, 0x2e15: 0x000c, 0x2e16: 0x000c, + 0x2e19: 0x000c, 0x2e1a: 0x000c, 0x2e1b: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e4a: 0x000c, 0x2e4b: 0x000c, + 0x2e4c: 0x000c, 0x2e4d: 0x000c, 0x2e4e: 0x000c, 0x2e4f: 0x000c, 0x2e50: 0x000c, 0x2e51: 0x000c, + 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, + 0x2e58: 0x000c, 0x2e59: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, 0x2ebb: 0x000c, + 0x2ebc: 0x000c, 0x2ebd: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, 0x2ed7: 0x000c, + 0x2ed8: 0x000c, 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, 0x2edc: 0x000c, 0x2edd: 0x000c, + 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee0: 0x000c, 0x2ee1: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, + 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee6: 0x000c, 0x2ee7: 0x000c, + 0x2eea: 0x000c, 0x2eeb: 0x000c, 0x2eec: 0x000c, 0x2eed: 0x000c, 0x2eee: 0x000c, 0x2eef: 0x000c, + 0x2ef0: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef5: 0x000c, + 0x2ef6: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f36: 0x000c, 0x2f3a: 0x000c, + 0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x000c, 0x2f41: 0x000c, 0x2f42: 0x000c, 0x2f43: 0x000c, 0x2f44: 0x000c, 0x2f45: 0x000c, + 0x2f47: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ff0: 0x000c, 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, + 0x2ff6: 0x000c, + // Block 0xc0, offset 0x3000 + 0x300f: 0x000c, 0x3010: 0x000c, 0x3011: 0x000c, + 0x3012: 0x000c, + // Block 0xc1, offset 0x3040 + 0x305d: 0x000c, + 0x305e: 0x000c, 0x3060: 0x000b, 0x3061: 0x000b, 0x3062: 0x000b, 0x3063: 0x000b, + // Block 0xc2, offset 0x3080 + 0x30a7: 0x000c, 0x30a8: 0x000c, 0x30a9: 0x000c, + 0x30b3: 0x000b, 0x30b4: 0x000b, 0x30b5: 0x000b, + 0x30b6: 0x000b, 0x30b7: 0x000b, 0x30b8: 0x000b, 0x30b9: 0x000b, 0x30ba: 0x000b, 0x30bb: 0x000c, + 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, 0x30bf: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x000c, 0x30c1: 0x000c, 0x30c2: 0x000c, 0x30c5: 0x000c, + 0x30c6: 0x000c, 0x30c7: 0x000c, 0x30c8: 0x000c, 0x30c9: 0x000c, 0x30ca: 0x000c, 0x30cb: 0x000c, + 0x30ea: 0x000c, 0x30eb: 0x000c, 0x30ec: 0x000c, 0x30ed: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3100: 0x000a, 0x3101: 0x000a, 0x3102: 0x000c, 0x3103: 0x000c, 0x3104: 0x000c, 0x3105: 0x000a, + // Block 0xc5, offset 0x3140 + 0x3140: 0x000a, 0x3141: 0x000a, 0x3142: 0x000a, 0x3143: 0x000a, 0x3144: 0x000a, 0x3145: 0x000a, + 0x3146: 0x000a, 0x3147: 0x000a, 0x3148: 0x000a, 0x3149: 0x000a, 0x314a: 0x000a, 0x314b: 0x000a, + 0x314c: 0x000a, 0x314d: 0x000a, 0x314e: 0x000a, 0x314f: 0x000a, 0x3150: 0x000a, 0x3151: 0x000a, + 0x3152: 0x000a, 0x3153: 0x000a, 0x3154: 0x000a, 0x3155: 0x000a, 0x3156: 0x000a, + // Block 0xc6, offset 0x3180 + 0x319b: 0x000a, + // Block 0xc7, offset 0x31c0 + 0x31d5: 0x000a, + // Block 0xc8, offset 0x3200 + 0x320f: 0x000a, + // Block 0xc9, offset 0x3240 + 0x3249: 0x000a, + // Block 0xca, offset 0x3280 + 0x3283: 0x000a, + 0x328e: 0x0002, 0x328f: 0x0002, 0x3290: 0x0002, 0x3291: 0x0002, + 0x3292: 0x0002, 0x3293: 0x0002, 0x3294: 0x0002, 0x3295: 0x0002, 0x3296: 0x0002, 0x3297: 0x0002, + 0x3298: 0x0002, 0x3299: 0x0002, 0x329a: 0x0002, 0x329b: 0x0002, 0x329c: 0x0002, 0x329d: 0x0002, + 0x329e: 0x0002, 0x329f: 0x0002, 0x32a0: 0x0002, 0x32a1: 0x0002, 0x32a2: 0x0002, 0x32a3: 0x0002, + 0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, 0x32a8: 0x0002, 0x32a9: 0x0002, + 0x32aa: 0x0002, 0x32ab: 0x0002, 0x32ac: 0x0002, 0x32ad: 0x0002, 0x32ae: 0x0002, 0x32af: 0x0002, + 0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002, + 0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002, + 0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c3: 0x000c, 0x32c4: 0x000c, 0x32c5: 0x000c, + 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c, + 0x32cc: 0x000c, 0x32cd: 0x000c, 0x32ce: 0x000c, 0x32cf: 0x000c, 0x32d0: 0x000c, 0x32d1: 0x000c, + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c, + 0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c, + 0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c, + 0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, 0x32e8: 0x000c, 0x32e9: 0x000c, + 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c, + 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, + 0x32f6: 0x000c, 0x32fb: 0x000c, + 0x32fc: 0x000c, 0x32fd: 0x000c, 0x32fe: 0x000c, 0x32ff: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3300: 0x000c, 0x3301: 0x000c, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000c, + 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x000c, + 0x330c: 0x000c, 0x330d: 0x000c, 0x330e: 0x000c, 0x330f: 0x000c, 0x3310: 0x000c, 0x3311: 0x000c, + 0x3312: 0x000c, 0x3313: 0x000c, 0x3314: 0x000c, 0x3315: 0x000c, 0x3316: 0x000c, 0x3317: 0x000c, + 0x3318: 0x000c, 0x3319: 0x000c, 0x331a: 0x000c, 0x331b: 0x000c, 0x331c: 0x000c, 0x331d: 0x000c, + 0x331e: 0x000c, 0x331f: 0x000c, 0x3320: 0x000c, 0x3321: 0x000c, 0x3322: 0x000c, 0x3323: 0x000c, + 0x3324: 0x000c, 0x3325: 0x000c, 0x3326: 0x000c, 0x3327: 0x000c, 0x3328: 0x000c, 0x3329: 0x000c, + 0x332a: 0x000c, 0x332b: 0x000c, 0x332c: 0x000c, + 0x3335: 0x000c, + // Block 0xcd, offset 0x3340 + 0x3344: 0x000c, + 0x335b: 0x000c, 0x335c: 0x000c, 0x335d: 0x000c, + 0x335e: 0x000c, 0x335f: 0x000c, 0x3361: 0x000c, 0x3362: 0x000c, 0x3363: 0x000c, + 0x3364: 0x000c, 0x3365: 0x000c, 0x3366: 0x000c, 0x3367: 0x000c, 0x3368: 0x000c, 0x3369: 0x000c, + 0x336a: 0x000c, 0x336b: 0x000c, 0x336c: 0x000c, 0x336d: 0x000c, 0x336e: 0x000c, 0x336f: 0x000c, + // Block 0xce, offset 0x3380 + 0x3380: 0x000c, 0x3381: 0x000c, 0x3382: 0x000c, 0x3383: 0x000c, 0x3384: 0x000c, 0x3385: 0x000c, + 0x3386: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c, + 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c, + 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, 0x3396: 0x000c, 0x3397: 0x000c, + 0x3398: 0x000c, 0x339b: 0x000c, 0x339c: 0x000c, 0x339d: 0x000c, + 0x339e: 0x000c, 0x339f: 0x000c, 0x33a0: 0x000c, 0x33a1: 0x000c, 0x33a3: 0x000c, + 0x33a4: 0x000c, 0x33a6: 0x000c, 0x33a7: 0x000c, 0x33a8: 0x000c, 0x33a9: 0x000c, + 0x33aa: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x0001, 0x33c1: 0x0001, 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, 0x33c5: 0x0001, + 0x33c6: 0x0001, 0x33c7: 0x0001, 0x33c8: 0x0001, 0x33c9: 0x0001, 0x33ca: 0x0001, 0x33cb: 0x0001, + 0x33cc: 0x0001, 0x33cd: 0x0001, 0x33ce: 0x0001, 0x33cf: 0x0001, 0x33d0: 0x000c, 0x33d1: 0x000c, + 0x33d2: 0x000c, 0x33d3: 0x000c, 0x33d4: 0x000c, 0x33d5: 0x000c, 0x33d6: 0x000c, 0x33d7: 0x0001, + 0x33d8: 0x0001, 0x33d9: 0x0001, 0x33da: 0x0001, 0x33db: 0x0001, 0x33dc: 0x0001, 0x33dd: 0x0001, + 0x33de: 0x0001, 0x33df: 0x0001, 0x33e0: 0x0001, 0x33e1: 0x0001, 0x33e2: 0x0001, 0x33e3: 0x0001, + 0x33e4: 0x0001, 0x33e5: 0x0001, 0x33e6: 0x0001, 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001, + 0x33ea: 0x0001, 0x33eb: 0x0001, 0x33ec: 0x0001, 0x33ed: 0x0001, 0x33ee: 0x0001, 0x33ef: 0x0001, + 0x33f0: 0x0001, 0x33f1: 0x0001, 0x33f2: 0x0001, 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001, + 0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001, + 0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001, + // Block 0xd0, offset 0x3400 + 0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3403: 0x0001, 0x3404: 0x000c, 0x3405: 0x000c, + 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x0001, + 0x340c: 0x0001, 0x340d: 0x0001, 0x340e: 0x0001, 0x340f: 0x0001, 0x3410: 0x0001, 0x3411: 0x0001, + 0x3412: 0x0001, 0x3413: 0x0001, 0x3414: 0x0001, 0x3415: 0x0001, 0x3416: 0x0001, 0x3417: 0x0001, + 0x3418: 0x0001, 0x3419: 0x0001, 0x341a: 0x0001, 0x341b: 0x0001, 0x341c: 0x0001, 0x341d: 0x0001, + 0x341e: 0x0001, 0x341f: 0x0001, 0x3420: 0x0001, 0x3421: 0x0001, 0x3422: 0x0001, 0x3423: 0x0001, + 0x3424: 0x0001, 0x3425: 0x0001, 0x3426: 0x0001, 0x3427: 0x0001, 0x3428: 0x0001, 0x3429: 0x0001, + 0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, 0x342e: 0x0001, 0x342f: 0x0001, + 0x3430: 0x0001, 0x3431: 0x0001, 0x3432: 0x0001, 0x3433: 0x0001, 0x3434: 0x0001, 0x3435: 0x0001, + 0x3436: 0x0001, 0x3437: 0x0001, 0x3438: 0x0001, 0x3439: 0x0001, 0x343a: 0x0001, 0x343b: 0x0001, + 0x343c: 0x0001, 0x343d: 0x0001, 0x343e: 0x0001, 0x343f: 0x0001, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000d, 0x3441: 0x000d, 0x3442: 0x000d, 0x3443: 0x000d, 0x3444: 0x000d, 0x3445: 0x000d, + 0x3446: 0x000d, 0x3447: 0x000d, 0x3448: 0x000d, 0x3449: 0x000d, 0x344a: 0x000d, 0x344b: 0x000d, + 0x344c: 0x000d, 0x344d: 0x000d, 0x344e: 0x000d, 0x344f: 0x000d, 0x3450: 0x000d, 0x3451: 0x000d, + 0x3452: 0x000d, 0x3453: 0x000d, 0x3454: 0x000d, 0x3455: 0x000d, 0x3456: 0x000d, 0x3457: 0x000d, + 0x3458: 0x000d, 0x3459: 0x000d, 0x345a: 0x000d, 0x345b: 0x000d, 0x345c: 0x000d, 0x345d: 0x000d, + 0x345e: 0x000d, 0x345f: 0x000d, 0x3460: 0x000d, 0x3461: 0x000d, 0x3462: 0x000d, 0x3463: 0x000d, + 0x3464: 0x000d, 0x3465: 0x000d, 0x3466: 0x000d, 0x3467: 0x000d, 0x3468: 0x000d, 0x3469: 0x000d, + 0x346a: 0x000d, 0x346b: 0x000d, 0x346c: 0x000d, 0x346d: 0x000d, 0x346e: 0x000d, 0x346f: 0x000d, + 0x3470: 0x000a, 0x3471: 0x000a, 0x3472: 0x000d, 0x3473: 0x000d, 0x3474: 0x000d, 0x3475: 0x000d, + 0x3476: 0x000d, 0x3477: 0x000d, 0x3478: 0x000d, 0x3479: 0x000d, 0x347a: 0x000d, 0x347b: 0x000d, + 0x347c: 0x000d, 0x347d: 0x000d, 0x347e: 0x000d, 0x347f: 0x000d, + // Block 0xd2, offset 0x3480 + 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000a, 0x3483: 0x000a, 0x3484: 0x000a, 0x3485: 0x000a, + 0x3486: 0x000a, 0x3487: 0x000a, 0x3488: 0x000a, 0x3489: 0x000a, 0x348a: 0x000a, 0x348b: 0x000a, + 0x348c: 0x000a, 0x348d: 0x000a, 0x348e: 0x000a, 0x348f: 0x000a, 0x3490: 0x000a, 0x3491: 0x000a, + 0x3492: 0x000a, 0x3493: 0x000a, 0x3494: 0x000a, 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a, + 0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x000a, + 0x349e: 0x000a, 0x349f: 0x000a, 0x34a0: 0x000a, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a, + 0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a, + 0x34aa: 0x000a, 0x34ab: 0x000a, + 0x34b0: 0x000a, 0x34b1: 0x000a, 0x34b2: 0x000a, 0x34b3: 0x000a, 0x34b4: 0x000a, 0x34b5: 0x000a, + 0x34b6: 0x000a, 0x34b7: 0x000a, 0x34b8: 0x000a, 0x34b9: 0x000a, 0x34ba: 0x000a, 0x34bb: 0x000a, + 0x34bc: 0x000a, 0x34bd: 0x000a, 0x34be: 0x000a, 0x34bf: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, + 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, + 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, + 0x34d2: 0x000a, 0x34d3: 0x000a, + 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, + 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, + 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, 0x34ed: 0x000a, 0x34ee: 0x000a, + 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, + 0x34f6: 0x000a, 0x34f7: 0x000a, 0x34f8: 0x000a, 0x34f9: 0x000a, 0x34fa: 0x000a, 0x34fb: 0x000a, + 0x34fc: 0x000a, 0x34fd: 0x000a, 0x34fe: 0x000a, 0x34ff: 0x000a, + // Block 0xd4, offset 0x3500 + 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, + 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, + 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3511: 0x000a, + 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, 0x3515: 0x000a, 0x3516: 0x000a, 0x3517: 0x000a, + 0x3518: 0x000a, 0x3519: 0x000a, 0x351a: 0x000a, 0x351b: 0x000a, 0x351c: 0x000a, 0x351d: 0x000a, + 0x351e: 0x000a, 0x351f: 0x000a, 0x3520: 0x000a, 0x3521: 0x000a, 0x3522: 0x000a, 0x3523: 0x000a, + 0x3524: 0x000a, 0x3525: 0x000a, 0x3526: 0x000a, 0x3527: 0x000a, 0x3528: 0x000a, 0x3529: 0x000a, + 0x352a: 0x000a, 0x352b: 0x000a, 0x352c: 0x000a, 0x352d: 0x000a, 0x352e: 0x000a, 0x352f: 0x000a, + 0x3530: 0x000a, 0x3531: 0x000a, 0x3532: 0x000a, 0x3533: 0x000a, 0x3534: 0x000a, 0x3535: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002, + 0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x000a, + 0x354c: 0x000a, + // Block 0xd6, offset 0x3580 + 0x35aa: 0x000a, 0x35ab: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a, + 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a, + 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, + 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a, + 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, + 0x3630: 0x000a, 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3650: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, + 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, + 0x3690: 0x000a, 0x3691: 0x000a, + 0x3692: 0x000a, 0x3693: 0x000a, 0x3694: 0x000a, 0x3695: 0x000a, 0x3696: 0x000a, 0x3697: 0x000a, + 0x3698: 0x000a, 0x3699: 0x000a, 0x369a: 0x000a, 0x369b: 0x000a, 0x369c: 0x000a, 0x369d: 0x000a, + 0x369e: 0x000a, 0x369f: 0x000a, 0x36a0: 0x000a, 0x36a1: 0x000a, 0x36a2: 0x000a, 0x36a3: 0x000a, + 0x36a4: 0x000a, 0x36a5: 0x000a, 0x36a6: 0x000a, 0x36a7: 0x000a, 0x36a8: 0x000a, 0x36a9: 0x000a, + 0x36aa: 0x000a, 0x36ab: 0x000a, 0x36ac: 0x000a, 0x36ad: 0x000a, 0x36ae: 0x000a, 0x36af: 0x000a, + 0x36b0: 0x000a, 0x36b1: 0x000a, 0x36b2: 0x000a, 0x36b3: 0x000a, 0x36b4: 0x000a, 0x36b5: 0x000a, + 0x36b6: 0x000a, 0x36b7: 0x000a, 0x36b8: 0x000a, 0x36b9: 0x000a, 0x36ba: 0x000a, 0x36bb: 0x000a, + 0x36bc: 0x000a, 0x36bd: 0x000a, 0x36be: 0x000a, 0x36bf: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, + 0x36c6: 0x000a, 0x36c7: 0x000a, + 0x36d0: 0x000a, 0x36d1: 0x000a, + 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, 0x36d7: 0x000a, + 0x36d8: 0x000a, 0x36d9: 0x000a, + 0x36e0: 0x000a, 0x36e1: 0x000a, 0x36e2: 0x000a, 0x36e3: 0x000a, + 0x36e4: 0x000a, 0x36e5: 0x000a, 0x36e6: 0x000a, 0x36e7: 0x000a, 0x36e8: 0x000a, 0x36e9: 0x000a, + 0x36ea: 0x000a, 0x36eb: 0x000a, 0x36ec: 0x000a, 0x36ed: 0x000a, 0x36ee: 0x000a, 0x36ef: 0x000a, + 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000a, 0x36f3: 0x000a, 0x36f4: 0x000a, 0x36f5: 0x000a, + 0x36f6: 0x000a, 0x36f7: 0x000a, 0x36f8: 0x000a, 0x36f9: 0x000a, 0x36fa: 0x000a, 0x36fb: 0x000a, + 0x36fc: 0x000a, 0x36fd: 0x000a, 0x36fe: 0x000a, 0x36ff: 0x000a, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, + 0x3706: 0x000a, 0x3707: 0x000a, + 0x3710: 0x000a, 0x3711: 0x000a, + 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, + 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, + 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, + 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, + 0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, + 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, + 0x3750: 0x000a, 0x3751: 0x000a, + 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, 0x3755: 0x000a, 0x3756: 0x000a, 0x3757: 0x000a, + 0x3758: 0x000a, 0x3759: 0x000a, 0x375a: 0x000a, 0x375b: 0x000a, 0x375c: 0x000a, 0x375d: 0x000a, + 0x375e: 0x000a, 0x375f: 0x000a, 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, + 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, + 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a, + 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, + 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a, + 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a, + // Block 0xde, offset 0x3780 + 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, + 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, + 0x378c: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a, + 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, + 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a, + 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a, + 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a, + 0x37aa: 0x000a, 0x37ab: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a, + 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a, + 0x37cc: 0x000a, 0x37cd: 0x000a, 0x37ce: 0x000a, 0x37cf: 0x000a, 0x37d0: 0x000a, 0x37d1: 0x000a, + 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a, + // Block 0xe0, offset 0x3800 + 0x3800: 0x000a, + 0x3810: 0x000a, 0x3811: 0x000a, + 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a, + 0x3818: 0x000a, 0x3819: 0x000a, 0x381a: 0x000a, 0x381b: 0x000a, 0x381c: 0x000a, 0x381d: 0x000a, + 0x381e: 0x000a, 0x381f: 0x000a, 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a, + 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, + // Block 0xe1, offset 0x3840 + 0x387e: 0x000b, 0x387f: 0x000b, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000b, 0x3881: 0x000b, 0x3882: 0x000b, 0x3883: 0x000b, 0x3884: 0x000b, 0x3885: 0x000b, + 0x3886: 0x000b, 0x3887: 0x000b, 0x3888: 0x000b, 0x3889: 0x000b, 0x388a: 0x000b, 0x388b: 0x000b, + 0x388c: 0x000b, 0x388d: 0x000b, 0x388e: 0x000b, 0x388f: 0x000b, 0x3890: 0x000b, 0x3891: 0x000b, + 0x3892: 0x000b, 0x3893: 0x000b, 0x3894: 0x000b, 0x3895: 0x000b, 0x3896: 0x000b, 0x3897: 0x000b, + 0x3898: 0x000b, 0x3899: 0x000b, 0x389a: 0x000b, 0x389b: 0x000b, 0x389c: 0x000b, 0x389d: 0x000b, + 0x389e: 0x000b, 0x389f: 0x000b, 0x38a0: 0x000b, 0x38a1: 0x000b, 0x38a2: 0x000b, 0x38a3: 0x000b, + 0x38a4: 0x000b, 0x38a5: 0x000b, 0x38a6: 0x000b, 0x38a7: 0x000b, 0x38a8: 0x000b, 0x38a9: 0x000b, + 0x38aa: 0x000b, 0x38ab: 0x000b, 0x38ac: 0x000b, 0x38ad: 0x000b, 0x38ae: 0x000b, 0x38af: 0x000b, + 0x38b0: 0x000b, 0x38b1: 0x000b, 0x38b2: 0x000b, 0x38b3: 0x000b, 0x38b4: 0x000b, 0x38b5: 0x000b, + 0x38b6: 0x000b, 0x38b7: 0x000b, 0x38b8: 0x000b, 0x38b9: 0x000b, 0x38ba: 0x000b, 0x38bb: 0x000b, + 0x38bc: 0x000b, 0x38bd: 0x000b, 0x38be: 0x000b, 0x38bf: 0x000b, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000c, 0x38c1: 0x000c, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000c, + 0x38c6: 0x000c, 0x38c7: 0x000c, 0x38c8: 0x000c, 0x38c9: 0x000c, 0x38ca: 0x000c, 0x38cb: 0x000c, + 0x38cc: 0x000c, 0x38cd: 0x000c, 0x38ce: 0x000c, 0x38cf: 0x000c, 0x38d0: 0x000c, 0x38d1: 0x000c, + 0x38d2: 0x000c, 0x38d3: 0x000c, 0x38d4: 0x000c, 0x38d5: 0x000c, 0x38d6: 0x000c, 0x38d7: 0x000c, + 0x38d8: 0x000c, 0x38d9: 0x000c, 0x38da: 0x000c, 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, + 0x38de: 0x000c, 0x38df: 0x000c, 0x38e0: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c, + 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c, + 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c, + 0x38f0: 0x000b, 0x38f1: 0x000b, 0x38f2: 0x000b, 0x38f3: 0x000b, 0x38f4: 0x000b, 0x38f5: 0x000b, + 0x38f6: 0x000b, 0x38f7: 0x000b, 0x38f8: 0x000b, 0x38f9: 0x000b, 0x38fa: 0x000b, 0x38fb: 0x000b, + 0x38fc: 0x000b, 0x38fd: 0x000b, 0x38fe: 0x000b, 0x38ff: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, + 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64, + 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, + 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, + 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x77, 0x253: 0x78, + 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, + 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, + 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a, + // Block 0xa, offset 0x280 + 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e, + 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97, + 0x2cb: 0x98, 0x2cd: 0x99, + 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a, + 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a, + 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9a, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a, + 0x2f8: 0x9a, 0x2f9: 0x9f, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0x9a, 0x2fd: 0x9a, 0x2fe: 0x9a, 0x2ff: 0x9a, + // Block 0xc, offset 0x300 + 0x300: 0xa0, 0x301: 0xa1, 0x302: 0xa2, 0x304: 0xa3, 0x305: 0xa4, 0x306: 0xa5, 0x307: 0xa6, + 0x308: 0xa7, 0x30b: 0xa8, 0x30c: 0xa9, 0x30d: 0xaa, + 0x310: 0xab, 0x311: 0xac, 0x312: 0xad, 0x313: 0xae, 0x316: 0xaf, 0x317: 0xb0, + 0x318: 0xb1, 0x319: 0xb2, 0x31a: 0xb3, 0x31c: 0xb4, + 0x328: 0xb5, 0x329: 0xb6, 0x32a: 0xb7, + 0x330: 0xb8, 0x332: 0xb9, 0x334: 0xba, 0x335: 0xbb, + // Block 0xd, offset 0x340 + 0x36b: 0xbc, 0x36c: 0xbd, + 0x37e: 0xbe, + // Block 0xe, offset 0x380 + 0x3b2: 0xbf, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xc0, 0x3c6: 0xc1, + 0x3c8: 0x54, 0x3c9: 0xc2, 0x3cc: 0x54, 0x3cd: 0xc3, + 0x3db: 0xc4, 0x3dc: 0xc5, 0x3dd: 0xc6, 0x3de: 0xc7, 0x3df: 0xc8, + 0x3e8: 0xc9, 0x3e9: 0xca, 0x3ea: 0xcb, + // Block 0x10, offset 0x400 + 0x400: 0xcc, + 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xcd, 0x424: 0x9a, 0x425: 0xce, 0x426: 0x9a, 0x427: 0x9a, + 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a, + 0x430: 0x9a, 0x431: 0x9a, 0x432: 0x9a, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcf, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a, + // Block 0x11, offset 0x440 + 0x440: 0xd0, 0x441: 0x54, 0x442: 0xd1, 0x443: 0xd2, 0x444: 0xd3, 0x445: 0xd4, + 0x449: 0xd5, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd6, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xd7, + 0x460: 0xd8, 0x461: 0xd9, 0x462: 0xda, 0x464: 0xdb, 0x465: 0xdc, 0x466: 0xdd, 0x467: 0xde, + 0x47f: 0xdf, + // Block 0x12, offset 0x480 + 0x4bf: 0xdf, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xe0, 0x541: 0xe0, 0x542: 0xe0, 0x543: 0xe0, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe1, + 0x548: 0xe0, 0x549: 0xe0, 0x54a: 0xe0, 0x54b: 0xe0, 0x54c: 0xe0, 0x54d: 0xe0, 0x54e: 0xe0, 0x54f: 0xe0, + 0x550: 0xe0, 0x551: 0xe0, 0x552: 0xe0, 0x553: 0xe0, 0x554: 0xe0, 0x555: 0xe0, 0x556: 0xe0, 0x557: 0xe0, + 0x558: 0xe0, 0x559: 0xe0, 0x55a: 0xe0, 0x55b: 0xe0, 0x55c: 0xe0, 0x55d: 0xe0, 0x55e: 0xe0, 0x55f: 0xe0, + 0x560: 0xe0, 0x561: 0xe0, 0x562: 0xe0, 0x563: 0xe0, 0x564: 0xe0, 0x565: 0xe0, 0x566: 0xe0, 0x567: 0xe0, + 0x568: 0xe0, 0x569: 0xe0, 0x56a: 0xe0, 0x56b: 0xe0, 0x56c: 0xe0, 0x56d: 0xe0, 0x56e: 0xe0, 0x56f: 0xe0, + 0x570: 0xe0, 0x571: 0xe0, 0x572: 0xe0, 0x573: 0xe0, 0x574: 0xe0, 0x575: 0xe0, 0x576: 0xe0, 0x577: 0xe0, + 0x578: 0xe0, 0x579: 0xe0, 0x57a: 0xe0, 0x57b: 0xe0, 0x57c: 0xe0, 0x57d: 0xe0, 0x57e: 0xe0, 0x57f: 0xe0, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 16184 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go new file mode 100644 index 0000000..f76bdca --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go @@ -0,0 +1,1887 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.13 && !go1.14 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "11.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 16512 bytes (16.12 KiB). Checksum: 2a9cf1317f2ffaa. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 234 blocks, 14976 entries, 14976 bytes +// The third block is the zero block. +var bidiValues = [14976]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, + 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, + 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, + 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, + 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, + 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, + 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, + 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, + // Block 0x5e, offset 0x1780 + 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, + 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, + 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, + 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, + 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, + 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, + 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, + 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, + 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, + 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, + 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, + 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, + 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, + 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, + 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, + 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, + 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, + 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, + 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19ef: 0x000c, + 0x19f0: 0x000c, 0x19f1: 0x000c, + 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, + 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, + 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, + 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, + 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, + 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, + 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, + 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, + 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, + 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, + 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, + 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, + 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, + 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, + 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, + 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, + 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, + 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, + 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, + 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, + 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, + 0x1bf0: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, + 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, + 0x1c20: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c7b: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, + 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, + 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, + 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, + 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, + 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cdd: 0x000a, + 0x1cde: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d10: 0x000a, 0x1d11: 0x000a, + 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, + 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, + 0x1d1e: 0x000a, 0x1d1f: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, + 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e1e: 0x000a, 0x1e1f: 0x000a, + 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e50: 0x000a, 0x1e51: 0x000a, + 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, + 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, + 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, + 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, + 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, + 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, + 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, + 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, + 0x1e86: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f2f: 0x000c, + 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, + 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, + 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f5e: 0x000c, 0x1f5f: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1fb0: 0x000c, 0x1fb1: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, + 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, + 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, + 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, + 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, + 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, + // Block 0x80, offset 0x2000 + 0x2008: 0x000a, + // Block 0x81, offset 0x2040 + 0x2042: 0x000c, + 0x2046: 0x000c, 0x204b: 0x000c, + 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, + 0x206a: 0x000a, 0x206b: 0x000a, + 0x2078: 0x0004, 0x2079: 0x0004, + // Block 0x82, offset 0x2080 + 0x20b4: 0x000a, 0x20b5: 0x000a, + 0x20b6: 0x000a, 0x20b7: 0x000a, + // Block 0x83, offset 0x20c0 + 0x20c4: 0x000c, 0x20c5: 0x000c, + 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, + 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, + 0x20f0: 0x000c, 0x20f1: 0x000c, + 0x20ff: 0x000c, + // Block 0x84, offset 0x2100 + 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, + // Block 0x85, offset 0x2140 + 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, + 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, + // Block 0x86, offset 0x2180 + 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, + 0x21b3: 0x000c, + 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, + 0x21bc: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e5: 0x000c, + // Block 0x88, offset 0x2200 + 0x2229: 0x000c, + 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, + 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, + 0x2236: 0x000c, + // Block 0x89, offset 0x2240 + 0x2243: 0x000c, + 0x224c: 0x000c, + 0x227c: 0x000c, + // Block 0x8a, offset 0x2280 + 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, + 0x22b7: 0x000c, 0x22b8: 0x000c, + 0x22be: 0x000c, 0x22bf: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22c1: 0x000c, + 0x22ec: 0x000c, 0x22ed: 0x000c, + 0x22f6: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2325: 0x000c, 0x2328: 0x000c, + 0x232d: 0x000c, + // Block 0x8d, offset 0x2340 + 0x235d: 0x0001, + 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, + 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, + 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, + 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, + 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, + 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, + 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, + 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, + 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, + 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, + 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, + 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, + 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, + 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, + 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, + 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, + 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, + 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b, + 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b, + 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b, + 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b, + 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b, + 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d, + // Block 0x91, offset 0x2440 + 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c, + 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c, + 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a, + 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a, + 0x2458: 0x000a, 0x2459: 0x000a, + 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c, + 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c, + 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c, + 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a, + 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a, + 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a, + // Block 0x92, offset 0x2480 + 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a, + 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a, + 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a, + 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a, + 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003, + 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004, + 0x24aa: 0x0004, 0x24ab: 0x000a, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, + 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d, + 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d, + 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d, + 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d, + 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d, + 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d, + 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b, + // Block 0x94, offset 0x2500 + 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003, + 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002, + 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002, + 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a, + 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a, + 0x253b: 0x005a, + 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a, + // Block 0x95, offset 0x2540 + 0x2540: 0x000a, + 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a, + 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a, + 0x2564: 0x000a, 0x2565: 0x000a, + // Block 0x96, offset 0x2580 + 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a, + 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a, + 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a, + 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b, + 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a, + 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b, + // Block 0x97, offset 0x25c0 + 0x25c1: 0x000a, + // Block 0x98, offset 0x2600 + 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a, + 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a, + 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a, + 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a, + 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a, + 0x2620: 0x000a, + // Block 0x99, offset 0x2640 + 0x267d: 0x000c, + // Block 0x9a, offset 0x2680 + 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002, + 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002, + 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002, + 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002, + 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002, + // Block 0x9b, offset 0x26c0 + 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, + 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, + 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, + 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, + 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, + 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, + 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, + 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, + 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, + 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, + 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c, + 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a, + 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a, + // Block 0xa1, offset 0x2840 + 0x2840: 0x000d, 0x2841: 0x000d, 0x2842: 0x000d, 0x2843: 0x000d, 0x2844: 0x000d, 0x2845: 0x000d, + 0x2846: 0x000d, 0x2847: 0x000d, 0x2848: 0x000d, 0x2849: 0x000d, 0x284a: 0x000d, 0x284b: 0x000d, + 0x284c: 0x000d, 0x284d: 0x000d, 0x284e: 0x000d, 0x284f: 0x000d, 0x2850: 0x000d, 0x2851: 0x000d, + 0x2852: 0x000d, 0x2853: 0x000d, 0x2854: 0x000d, 0x2855: 0x000d, 0x2856: 0x000d, 0x2857: 0x000d, + 0x2858: 0x000d, 0x2859: 0x000d, 0x285a: 0x000d, 0x285b: 0x000d, 0x285c: 0x000d, 0x285d: 0x000d, + 0x285e: 0x000d, 0x285f: 0x000d, 0x2860: 0x000d, 0x2861: 0x000d, 0x2862: 0x000d, 0x2863: 0x000d, + 0x2864: 0x000c, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x000c, 0x2868: 0x000d, 0x2869: 0x000d, + 0x286a: 0x000d, 0x286b: 0x000d, 0x286c: 0x000d, 0x286d: 0x000d, 0x286e: 0x000d, 0x286f: 0x000d, + 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, + 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x000d, 0x287b: 0x000d, + 0x287c: 0x000d, 0x287d: 0x000d, 0x287e: 0x000d, 0x287f: 0x000d, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, + 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, + 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, + 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, + 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, + 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x0001, 0x28c1: 0x0001, 0x28c2: 0x0001, 0x28c3: 0x0001, 0x28c4: 0x0001, 0x28c5: 0x0001, + 0x28c6: 0x0001, 0x28c7: 0x0001, 0x28c8: 0x0001, 0x28c9: 0x0001, 0x28ca: 0x0001, 0x28cb: 0x0001, + 0x28cc: 0x0001, 0x28cd: 0x0001, 0x28ce: 0x0001, 0x28cf: 0x0001, 0x28d0: 0x0001, 0x28d1: 0x0001, + 0x28d2: 0x0001, 0x28d3: 0x0001, 0x28d4: 0x0001, 0x28d5: 0x0001, 0x28d6: 0x0001, 0x28d7: 0x0001, + 0x28d8: 0x0001, 0x28d9: 0x0001, 0x28da: 0x0001, 0x28db: 0x0001, 0x28dc: 0x0001, 0x28dd: 0x0001, + 0x28de: 0x0001, 0x28df: 0x0001, 0x28e0: 0x0001, 0x28e1: 0x0001, 0x28e2: 0x0001, 0x28e3: 0x0001, + 0x28e4: 0x0001, 0x28e5: 0x0001, 0x28e6: 0x0001, 0x28e7: 0x0001, 0x28e8: 0x0001, 0x28e9: 0x0001, + 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, + 0x28f0: 0x000d, 0x28f1: 0x000d, 0x28f2: 0x000d, 0x28f3: 0x000d, 0x28f4: 0x000d, 0x28f5: 0x000d, + 0x28f6: 0x000d, 0x28f7: 0x000d, 0x28f8: 0x000d, 0x28f9: 0x000d, 0x28fa: 0x000d, 0x28fb: 0x000d, + 0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000d, 0x2901: 0x000d, 0x2902: 0x000d, 0x2903: 0x000d, 0x2904: 0x000d, 0x2905: 0x000d, + 0x2906: 0x000c, 0x2907: 0x000c, 0x2908: 0x000c, 0x2909: 0x000c, 0x290a: 0x000c, 0x290b: 0x000c, + 0x290c: 0x000c, 0x290d: 0x000c, 0x290e: 0x000c, 0x290f: 0x000c, 0x2910: 0x000c, 0x2911: 0x000d, + 0x2912: 0x000d, 0x2913: 0x000d, 0x2914: 0x000d, 0x2915: 0x000d, 0x2916: 0x000d, 0x2917: 0x000d, + 0x2918: 0x000d, 0x2919: 0x000d, 0x291a: 0x000d, 0x291b: 0x000d, 0x291c: 0x000d, 0x291d: 0x000d, + 0x291e: 0x000d, 0x291f: 0x000d, 0x2920: 0x000d, 0x2921: 0x000d, 0x2922: 0x000d, 0x2923: 0x000d, + 0x2924: 0x000d, 0x2925: 0x000d, 0x2926: 0x000d, 0x2927: 0x000d, 0x2928: 0x000d, 0x2929: 0x000d, + 0x292a: 0x000d, 0x292b: 0x000d, 0x292c: 0x000d, 0x292d: 0x000d, 0x292e: 0x000d, 0x292f: 0x000d, + 0x2930: 0x0001, 0x2931: 0x0001, 0x2932: 0x0001, 0x2933: 0x0001, 0x2934: 0x0001, 0x2935: 0x0001, + 0x2936: 0x0001, 0x2937: 0x0001, 0x2938: 0x0001, 0x2939: 0x0001, 0x293a: 0x0001, 0x293b: 0x0001, + 0x293c: 0x0001, 0x293d: 0x0001, 0x293e: 0x0001, 0x293f: 0x0001, + // Block 0xa5, offset 0x2940 + 0x2941: 0x000c, + 0x2978: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, 0x297b: 0x000c, + 0x297c: 0x000c, 0x297d: 0x000c, 0x297e: 0x000c, 0x297f: 0x000c, + // Block 0xa6, offset 0x2980 + 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, 0x2983: 0x000c, 0x2984: 0x000c, 0x2985: 0x000c, + 0x2986: 0x000c, + 0x2992: 0x000a, 0x2993: 0x000a, 0x2994: 0x000a, 0x2995: 0x000a, 0x2996: 0x000a, 0x2997: 0x000a, + 0x2998: 0x000a, 0x2999: 0x000a, 0x299a: 0x000a, 0x299b: 0x000a, 0x299c: 0x000a, 0x299d: 0x000a, + 0x299e: 0x000a, 0x299f: 0x000a, 0x29a0: 0x000a, 0x29a1: 0x000a, 0x29a2: 0x000a, 0x29a3: 0x000a, + 0x29a4: 0x000a, 0x29a5: 0x000a, + 0x29bf: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000c, 0x29c1: 0x000c, + 0x29f3: 0x000c, 0x29f4: 0x000c, 0x29f5: 0x000c, + 0x29f6: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000c, 0x2a01: 0x000c, 0x2a02: 0x000c, + 0x2a27: 0x000c, 0x2a28: 0x000c, 0x2a29: 0x000c, + 0x2a2a: 0x000c, 0x2a2b: 0x000c, 0x2a2d: 0x000c, 0x2a2e: 0x000c, 0x2a2f: 0x000c, + 0x2a30: 0x000c, 0x2a31: 0x000c, 0x2a32: 0x000c, 0x2a33: 0x000c, 0x2a34: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a73: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x000c, 0x2a81: 0x000c, + 0x2ab6: 0x000c, 0x2ab7: 0x000c, 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c, + 0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac9: 0x000c, 0x2aca: 0x000c, 0x2acb: 0x000c, + 0x2acc: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b2f: 0x000c, + 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b34: 0x000c, + 0x2b36: 0x000c, 0x2b37: 0x000c, + 0x2b3e: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b5f: 0x000c, 0x2b63: 0x000c, + 0x2b64: 0x000c, 0x2b65: 0x000c, 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x000c, + 0x2ba6: 0x000c, 0x2ba7: 0x000c, 0x2ba8: 0x000c, 0x2ba9: 0x000c, + 0x2baa: 0x000c, 0x2bab: 0x000c, 0x2bac: 0x000c, + 0x2bb0: 0x000c, 0x2bb1: 0x000c, 0x2bb2: 0x000c, 0x2bb3: 0x000c, 0x2bb4: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c, + 0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, 0x2bff: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c02: 0x000c, 0x2c03: 0x000c, 0x2c04: 0x000c, + 0x2c06: 0x000c, + 0x2c1e: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c, + 0x2c76: 0x000c, 0x2c77: 0x000c, 0x2c78: 0x000c, 0x2c7a: 0x000c, + 0x2c7f: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x000c, 0x2c82: 0x000c, 0x2c83: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c, + 0x2cfc: 0x000c, 0x2cfd: 0x000c, 0x2cff: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x000c, + 0x2d1c: 0x000c, 0x2d1d: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c, + 0x2d76: 0x000c, 0x2d77: 0x000c, 0x2d78: 0x000c, 0x2d79: 0x000c, 0x2d7a: 0x000c, + 0x2d7d: 0x000c, 0x2d7f: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x000c, + 0x2da0: 0x000a, 0x2da1: 0x000a, 0x2da2: 0x000a, 0x2da3: 0x000a, + 0x2da4: 0x000a, 0x2da5: 0x000a, 0x2da6: 0x000a, 0x2da7: 0x000a, 0x2da8: 0x000a, 0x2da9: 0x000a, + 0x2daa: 0x000a, 0x2dab: 0x000a, 0x2dac: 0x000a, + // Block 0xb7, offset 0x2dc0 + 0x2deb: 0x000c, 0x2ded: 0x000c, + 0x2df0: 0x000c, 0x2df1: 0x000c, 0x2df2: 0x000c, 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c, + 0x2df7: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e1d: 0x000c, + 0x2e1e: 0x000c, 0x2e1f: 0x000c, 0x2e22: 0x000c, 0x2e23: 0x000c, + 0x2e24: 0x000c, 0x2e25: 0x000c, 0x2e27: 0x000c, 0x2e28: 0x000c, 0x2e29: 0x000c, + 0x2e2a: 0x000c, 0x2e2b: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e6f: 0x000c, + 0x2e70: 0x000c, 0x2e71: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e74: 0x000c, 0x2e75: 0x000c, + 0x2e76: 0x000c, 0x2e77: 0x000c, 0x2e79: 0x000c, 0x2e7a: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2e81: 0x000c, 0x2e82: 0x000c, 0x2e83: 0x000c, 0x2e84: 0x000c, 0x2e85: 0x000c, + 0x2e86: 0x000c, 0x2e89: 0x000c, 0x2e8a: 0x000c, + 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2ebb: 0x000c, + 0x2ebc: 0x000c, 0x2ebd: 0x000c, 0x2ebe: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ec7: 0x000c, + 0x2ed1: 0x000c, + 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, + 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f0a: 0x000c, 0x2f0b: 0x000c, + 0x2f0c: 0x000c, 0x2f0d: 0x000c, 0x2f0e: 0x000c, 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, + 0x2f12: 0x000c, 0x2f13: 0x000c, 0x2f14: 0x000c, 0x2f15: 0x000c, 0x2f16: 0x000c, + 0x2f18: 0x000c, 0x2f19: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f70: 0x000c, 0x2f71: 0x000c, 0x2f72: 0x000c, 0x2f73: 0x000c, 0x2f74: 0x000c, 0x2f75: 0x000c, + 0x2f76: 0x000c, 0x2f78: 0x000c, 0x2f79: 0x000c, 0x2f7a: 0x000c, 0x2f7b: 0x000c, + 0x2f7c: 0x000c, 0x2f7d: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2f92: 0x000c, 0x2f93: 0x000c, 0x2f94: 0x000c, 0x2f95: 0x000c, 0x2f96: 0x000c, 0x2f97: 0x000c, + 0x2f98: 0x000c, 0x2f99: 0x000c, 0x2f9a: 0x000c, 0x2f9b: 0x000c, 0x2f9c: 0x000c, 0x2f9d: 0x000c, + 0x2f9e: 0x000c, 0x2f9f: 0x000c, 0x2fa0: 0x000c, 0x2fa1: 0x000c, 0x2fa2: 0x000c, 0x2fa3: 0x000c, + 0x2fa4: 0x000c, 0x2fa5: 0x000c, 0x2fa6: 0x000c, 0x2fa7: 0x000c, + 0x2faa: 0x000c, 0x2fab: 0x000c, 0x2fac: 0x000c, 0x2fad: 0x000c, 0x2fae: 0x000c, 0x2faf: 0x000c, + 0x2fb0: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb5: 0x000c, + 0x2fb6: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, + 0x2ff6: 0x000c, 0x2ffa: 0x000c, + 0x2ffc: 0x000c, 0x2ffd: 0x000c, 0x2fff: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3000: 0x000c, 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, + 0x3007: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3050: 0x000c, 0x3051: 0x000c, + 0x3055: 0x000c, 0x3057: 0x000c, + // Block 0xc2, offset 0x3080 + 0x30b3: 0x000c, 0x30b4: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3130: 0x000c, 0x3131: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3134: 0x000c, 0x3135: 0x000c, + 0x3136: 0x000c, + // Block 0xc5, offset 0x3140 + 0x314f: 0x000c, 0x3150: 0x000c, 0x3151: 0x000c, + 0x3152: 0x000c, + // Block 0xc6, offset 0x3180 + 0x319d: 0x000c, + 0x319e: 0x000c, 0x31a0: 0x000b, 0x31a1: 0x000b, 0x31a2: 0x000b, 0x31a3: 0x000b, + // Block 0xc7, offset 0x31c0 + 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, + 0x31f3: 0x000b, 0x31f4: 0x000b, 0x31f5: 0x000b, + 0x31f6: 0x000b, 0x31f7: 0x000b, 0x31f8: 0x000b, 0x31f9: 0x000b, 0x31fa: 0x000b, 0x31fb: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3205: 0x000c, + 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, + 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, 0x322d: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3240: 0x000a, 0x3241: 0x000a, 0x3242: 0x000c, 0x3243: 0x000c, 0x3244: 0x000c, 0x3245: 0x000a, + // Block 0xca, offset 0x3280 + 0x3280: 0x000a, 0x3281: 0x000a, 0x3282: 0x000a, 0x3283: 0x000a, 0x3284: 0x000a, 0x3285: 0x000a, + 0x3286: 0x000a, 0x3287: 0x000a, 0x3288: 0x000a, 0x3289: 0x000a, 0x328a: 0x000a, 0x328b: 0x000a, + 0x328c: 0x000a, 0x328d: 0x000a, 0x328e: 0x000a, 0x328f: 0x000a, 0x3290: 0x000a, 0x3291: 0x000a, + 0x3292: 0x000a, 0x3293: 0x000a, 0x3294: 0x000a, 0x3295: 0x000a, 0x3296: 0x000a, + // Block 0xcb, offset 0x32c0 + 0x32db: 0x000a, + // Block 0xcc, offset 0x3300 + 0x3315: 0x000a, + // Block 0xcd, offset 0x3340 + 0x334f: 0x000a, + // Block 0xce, offset 0x3380 + 0x3389: 0x000a, + // Block 0xcf, offset 0x33c0 + 0x33c3: 0x000a, + 0x33ce: 0x0002, 0x33cf: 0x0002, 0x33d0: 0x0002, 0x33d1: 0x0002, + 0x33d2: 0x0002, 0x33d3: 0x0002, 0x33d4: 0x0002, 0x33d5: 0x0002, 0x33d6: 0x0002, 0x33d7: 0x0002, + 0x33d8: 0x0002, 0x33d9: 0x0002, 0x33da: 0x0002, 0x33db: 0x0002, 0x33dc: 0x0002, 0x33dd: 0x0002, + 0x33de: 0x0002, 0x33df: 0x0002, 0x33e0: 0x0002, 0x33e1: 0x0002, 0x33e2: 0x0002, 0x33e3: 0x0002, + 0x33e4: 0x0002, 0x33e5: 0x0002, 0x33e6: 0x0002, 0x33e7: 0x0002, 0x33e8: 0x0002, 0x33e9: 0x0002, + 0x33ea: 0x0002, 0x33eb: 0x0002, 0x33ec: 0x0002, 0x33ed: 0x0002, 0x33ee: 0x0002, 0x33ef: 0x0002, + 0x33f0: 0x0002, 0x33f1: 0x0002, 0x33f2: 0x0002, 0x33f3: 0x0002, 0x33f4: 0x0002, 0x33f5: 0x0002, + 0x33f6: 0x0002, 0x33f7: 0x0002, 0x33f8: 0x0002, 0x33f9: 0x0002, 0x33fa: 0x0002, 0x33fb: 0x0002, + 0x33fc: 0x0002, 0x33fd: 0x0002, 0x33fe: 0x0002, 0x33ff: 0x0002, + // Block 0xd0, offset 0x3400 + 0x3400: 0x000c, 0x3401: 0x000c, 0x3402: 0x000c, 0x3403: 0x000c, 0x3404: 0x000c, 0x3405: 0x000c, + 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x000c, + 0x340c: 0x000c, 0x340d: 0x000c, 0x340e: 0x000c, 0x340f: 0x000c, 0x3410: 0x000c, 0x3411: 0x000c, + 0x3412: 0x000c, 0x3413: 0x000c, 0x3414: 0x000c, 0x3415: 0x000c, 0x3416: 0x000c, 0x3417: 0x000c, + 0x3418: 0x000c, 0x3419: 0x000c, 0x341a: 0x000c, 0x341b: 0x000c, 0x341c: 0x000c, 0x341d: 0x000c, + 0x341e: 0x000c, 0x341f: 0x000c, 0x3420: 0x000c, 0x3421: 0x000c, 0x3422: 0x000c, 0x3423: 0x000c, + 0x3424: 0x000c, 0x3425: 0x000c, 0x3426: 0x000c, 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c, + 0x342a: 0x000c, 0x342b: 0x000c, 0x342c: 0x000c, 0x342d: 0x000c, 0x342e: 0x000c, 0x342f: 0x000c, + 0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c, + 0x3436: 0x000c, 0x343b: 0x000c, + 0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3443: 0x000c, 0x3444: 0x000c, 0x3445: 0x000c, + 0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c, + 0x344c: 0x000c, 0x344d: 0x000c, 0x344e: 0x000c, 0x344f: 0x000c, 0x3450: 0x000c, 0x3451: 0x000c, + 0x3452: 0x000c, 0x3453: 0x000c, 0x3454: 0x000c, 0x3455: 0x000c, 0x3456: 0x000c, 0x3457: 0x000c, + 0x3458: 0x000c, 0x3459: 0x000c, 0x345a: 0x000c, 0x345b: 0x000c, 0x345c: 0x000c, 0x345d: 0x000c, + 0x345e: 0x000c, 0x345f: 0x000c, 0x3460: 0x000c, 0x3461: 0x000c, 0x3462: 0x000c, 0x3463: 0x000c, + 0x3464: 0x000c, 0x3465: 0x000c, 0x3466: 0x000c, 0x3467: 0x000c, 0x3468: 0x000c, 0x3469: 0x000c, + 0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c, + 0x3475: 0x000c, + // Block 0xd2, offset 0x3480 + 0x3484: 0x000c, + 0x349b: 0x000c, 0x349c: 0x000c, 0x349d: 0x000c, + 0x349e: 0x000c, 0x349f: 0x000c, 0x34a1: 0x000c, 0x34a2: 0x000c, 0x34a3: 0x000c, + 0x34a4: 0x000c, 0x34a5: 0x000c, 0x34a6: 0x000c, 0x34a7: 0x000c, 0x34a8: 0x000c, 0x34a9: 0x000c, + 0x34aa: 0x000c, 0x34ab: 0x000c, 0x34ac: 0x000c, 0x34ad: 0x000c, 0x34ae: 0x000c, 0x34af: 0x000c, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000c, 0x34c1: 0x000c, 0x34c2: 0x000c, 0x34c3: 0x000c, 0x34c4: 0x000c, 0x34c5: 0x000c, + 0x34c6: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c, + 0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c, + 0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, 0x34d6: 0x000c, 0x34d7: 0x000c, + 0x34d8: 0x000c, 0x34db: 0x000c, 0x34dc: 0x000c, 0x34dd: 0x000c, + 0x34de: 0x000c, 0x34df: 0x000c, 0x34e0: 0x000c, 0x34e1: 0x000c, 0x34e3: 0x000c, + 0x34e4: 0x000c, 0x34e6: 0x000c, 0x34e7: 0x000c, 0x34e8: 0x000c, 0x34e9: 0x000c, + 0x34ea: 0x000c, + // Block 0xd4, offset 0x3500 + 0x3500: 0x0001, 0x3501: 0x0001, 0x3502: 0x0001, 0x3503: 0x0001, 0x3504: 0x0001, 0x3505: 0x0001, + 0x3506: 0x0001, 0x3507: 0x0001, 0x3508: 0x0001, 0x3509: 0x0001, 0x350a: 0x0001, 0x350b: 0x0001, + 0x350c: 0x0001, 0x350d: 0x0001, 0x350e: 0x0001, 0x350f: 0x0001, 0x3510: 0x000c, 0x3511: 0x000c, + 0x3512: 0x000c, 0x3513: 0x000c, 0x3514: 0x000c, 0x3515: 0x000c, 0x3516: 0x000c, 0x3517: 0x0001, + 0x3518: 0x0001, 0x3519: 0x0001, 0x351a: 0x0001, 0x351b: 0x0001, 0x351c: 0x0001, 0x351d: 0x0001, + 0x351e: 0x0001, 0x351f: 0x0001, 0x3520: 0x0001, 0x3521: 0x0001, 0x3522: 0x0001, 0x3523: 0x0001, + 0x3524: 0x0001, 0x3525: 0x0001, 0x3526: 0x0001, 0x3527: 0x0001, 0x3528: 0x0001, 0x3529: 0x0001, + 0x352a: 0x0001, 0x352b: 0x0001, 0x352c: 0x0001, 0x352d: 0x0001, 0x352e: 0x0001, 0x352f: 0x0001, + 0x3530: 0x0001, 0x3531: 0x0001, 0x3532: 0x0001, 0x3533: 0x0001, 0x3534: 0x0001, 0x3535: 0x0001, + 0x3536: 0x0001, 0x3537: 0x0001, 0x3538: 0x0001, 0x3539: 0x0001, 0x353a: 0x0001, 0x353b: 0x0001, + 0x353c: 0x0001, 0x353d: 0x0001, 0x353e: 0x0001, 0x353f: 0x0001, + // Block 0xd5, offset 0x3540 + 0x3540: 0x0001, 0x3541: 0x0001, 0x3542: 0x0001, 0x3543: 0x0001, 0x3544: 0x000c, 0x3545: 0x000c, + 0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x0001, + 0x354c: 0x0001, 0x354d: 0x0001, 0x354e: 0x0001, 0x354f: 0x0001, 0x3550: 0x0001, 0x3551: 0x0001, + 0x3552: 0x0001, 0x3553: 0x0001, 0x3554: 0x0001, 0x3555: 0x0001, 0x3556: 0x0001, 0x3557: 0x0001, + 0x3558: 0x0001, 0x3559: 0x0001, 0x355a: 0x0001, 0x355b: 0x0001, 0x355c: 0x0001, 0x355d: 0x0001, + 0x355e: 0x0001, 0x355f: 0x0001, 0x3560: 0x0001, 0x3561: 0x0001, 0x3562: 0x0001, 0x3563: 0x0001, + 0x3564: 0x0001, 0x3565: 0x0001, 0x3566: 0x0001, 0x3567: 0x0001, 0x3568: 0x0001, 0x3569: 0x0001, + 0x356a: 0x0001, 0x356b: 0x0001, 0x356c: 0x0001, 0x356d: 0x0001, 0x356e: 0x0001, 0x356f: 0x0001, + 0x3570: 0x0001, 0x3571: 0x0001, 0x3572: 0x0001, 0x3573: 0x0001, 0x3574: 0x0001, 0x3575: 0x0001, + 0x3576: 0x0001, 0x3577: 0x0001, 0x3578: 0x0001, 0x3579: 0x0001, 0x357a: 0x0001, 0x357b: 0x0001, + 0x357c: 0x0001, 0x357d: 0x0001, 0x357e: 0x0001, 0x357f: 0x0001, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000d, 0x3581: 0x000d, 0x3582: 0x000d, 0x3583: 0x000d, 0x3584: 0x000d, 0x3585: 0x000d, + 0x3586: 0x000d, 0x3587: 0x000d, 0x3588: 0x000d, 0x3589: 0x000d, 0x358a: 0x000d, 0x358b: 0x000d, + 0x358c: 0x000d, 0x358d: 0x000d, 0x358e: 0x000d, 0x358f: 0x000d, 0x3590: 0x000d, 0x3591: 0x000d, + 0x3592: 0x000d, 0x3593: 0x000d, 0x3594: 0x000d, 0x3595: 0x000d, 0x3596: 0x000d, 0x3597: 0x000d, + 0x3598: 0x000d, 0x3599: 0x000d, 0x359a: 0x000d, 0x359b: 0x000d, 0x359c: 0x000d, 0x359d: 0x000d, + 0x359e: 0x000d, 0x359f: 0x000d, 0x35a0: 0x000d, 0x35a1: 0x000d, 0x35a2: 0x000d, 0x35a3: 0x000d, + 0x35a4: 0x000d, 0x35a5: 0x000d, 0x35a6: 0x000d, 0x35a7: 0x000d, 0x35a8: 0x000d, 0x35a9: 0x000d, + 0x35aa: 0x000d, 0x35ab: 0x000d, 0x35ac: 0x000d, 0x35ad: 0x000d, 0x35ae: 0x000d, 0x35af: 0x000d, + 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000d, 0x35b3: 0x000d, 0x35b4: 0x000d, 0x35b5: 0x000d, + 0x35b6: 0x000d, 0x35b7: 0x000d, 0x35b8: 0x000d, 0x35b9: 0x000d, 0x35ba: 0x000d, 0x35bb: 0x000d, + 0x35bc: 0x000d, 0x35bd: 0x000d, 0x35be: 0x000d, 0x35bf: 0x000d, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, + 0x35c6: 0x000a, 0x35c7: 0x000a, 0x35c8: 0x000a, 0x35c9: 0x000a, 0x35ca: 0x000a, 0x35cb: 0x000a, + 0x35cc: 0x000a, 0x35cd: 0x000a, 0x35ce: 0x000a, 0x35cf: 0x000a, 0x35d0: 0x000a, 0x35d1: 0x000a, + 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, + 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, + 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, + 0x35ea: 0x000a, 0x35eb: 0x000a, + 0x35f0: 0x000a, 0x35f1: 0x000a, 0x35f2: 0x000a, 0x35f3: 0x000a, 0x35f4: 0x000a, 0x35f5: 0x000a, + 0x35f6: 0x000a, 0x35f7: 0x000a, 0x35f8: 0x000a, 0x35f9: 0x000a, 0x35fa: 0x000a, 0x35fb: 0x000a, + 0x35fc: 0x000a, 0x35fd: 0x000a, 0x35fe: 0x000a, 0x35ff: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a, + 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a, + 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, + 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a, + 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, 0x362d: 0x000a, 0x362e: 0x000a, + 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, + 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, 0x363f: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, + 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, + 0x365e: 0x000a, 0x365f: 0x000a, 0x3660: 0x000a, 0x3661: 0x000a, 0x3662: 0x000a, 0x3663: 0x000a, + 0x3664: 0x000a, 0x3665: 0x000a, 0x3666: 0x000a, 0x3667: 0x000a, 0x3668: 0x000a, 0x3669: 0x000a, + 0x366a: 0x000a, 0x366b: 0x000a, 0x366c: 0x000a, 0x366d: 0x000a, 0x366e: 0x000a, 0x366f: 0x000a, + 0x3670: 0x000a, 0x3671: 0x000a, 0x3672: 0x000a, 0x3673: 0x000a, 0x3674: 0x000a, 0x3675: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x0002, 0x3681: 0x0002, 0x3682: 0x0002, 0x3683: 0x0002, 0x3684: 0x0002, 0x3685: 0x0002, + 0x3686: 0x0002, 0x3687: 0x0002, 0x3688: 0x0002, 0x3689: 0x0002, 0x368a: 0x0002, 0x368b: 0x000a, + 0x368c: 0x000a, + 0x36af: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36ea: 0x000a, 0x36eb: 0x000a, + // Block 0xdc, offset 0x3700 + 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, + 0x3724: 0x000a, 0x3725: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, + 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, + 0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, 0x3751: 0x000a, + 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, + 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, + 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, + 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, + 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, + 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, + // Block 0xde, offset 0x3780 + 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, + 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, + 0x378c: 0x000a, 0x378d: 0x000a, 0x378e: 0x000a, 0x378f: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a, + 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, + 0x3798: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a, + 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a, + 0x37d0: 0x000a, 0x37d1: 0x000a, + 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a, + 0x37d8: 0x000a, 0x37d9: 0x000a, 0x37da: 0x000a, 0x37db: 0x000a, 0x37dc: 0x000a, 0x37dd: 0x000a, + 0x37de: 0x000a, 0x37df: 0x000a, 0x37e0: 0x000a, 0x37e1: 0x000a, 0x37e2: 0x000a, 0x37e3: 0x000a, + 0x37e4: 0x000a, 0x37e5: 0x000a, 0x37e6: 0x000a, 0x37e7: 0x000a, 0x37e8: 0x000a, 0x37e9: 0x000a, + 0x37ea: 0x000a, 0x37eb: 0x000a, 0x37ec: 0x000a, 0x37ed: 0x000a, 0x37ee: 0x000a, 0x37ef: 0x000a, + 0x37f0: 0x000a, 0x37f1: 0x000a, 0x37f2: 0x000a, 0x37f3: 0x000a, 0x37f4: 0x000a, 0x37f5: 0x000a, + 0x37f6: 0x000a, 0x37f7: 0x000a, 0x37f8: 0x000a, 0x37f9: 0x000a, 0x37fa: 0x000a, 0x37fb: 0x000a, + 0x37fc: 0x000a, 0x37fd: 0x000a, 0x37fe: 0x000a, 0x37ff: 0x000a, + // Block 0xe0, offset 0x3800 + 0x3800: 0x000a, 0x3801: 0x000a, 0x3802: 0x000a, 0x3803: 0x000a, 0x3804: 0x000a, 0x3805: 0x000a, + 0x3806: 0x000a, 0x3807: 0x000a, + 0x3810: 0x000a, 0x3811: 0x000a, + 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a, + 0x3818: 0x000a, 0x3819: 0x000a, + 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a, + 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, 0x3827: 0x000a, 0x3828: 0x000a, 0x3829: 0x000a, + 0x382a: 0x000a, 0x382b: 0x000a, 0x382c: 0x000a, 0x382d: 0x000a, 0x382e: 0x000a, 0x382f: 0x000a, + 0x3830: 0x000a, 0x3831: 0x000a, 0x3832: 0x000a, 0x3833: 0x000a, 0x3834: 0x000a, 0x3835: 0x000a, + 0x3836: 0x000a, 0x3837: 0x000a, 0x3838: 0x000a, 0x3839: 0x000a, 0x383a: 0x000a, 0x383b: 0x000a, + 0x383c: 0x000a, 0x383d: 0x000a, 0x383e: 0x000a, 0x383f: 0x000a, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000a, 0x3841: 0x000a, 0x3842: 0x000a, 0x3843: 0x000a, 0x3844: 0x000a, 0x3845: 0x000a, + 0x3846: 0x000a, 0x3847: 0x000a, + 0x3850: 0x000a, 0x3851: 0x000a, + 0x3852: 0x000a, 0x3853: 0x000a, 0x3854: 0x000a, 0x3855: 0x000a, 0x3856: 0x000a, 0x3857: 0x000a, + 0x3858: 0x000a, 0x3859: 0x000a, 0x385a: 0x000a, 0x385b: 0x000a, 0x385c: 0x000a, 0x385d: 0x000a, + 0x385e: 0x000a, 0x385f: 0x000a, 0x3860: 0x000a, 0x3861: 0x000a, 0x3862: 0x000a, 0x3863: 0x000a, + 0x3864: 0x000a, 0x3865: 0x000a, 0x3866: 0x000a, 0x3867: 0x000a, 0x3868: 0x000a, 0x3869: 0x000a, + 0x386a: 0x000a, 0x386b: 0x000a, 0x386c: 0x000a, 0x386d: 0x000a, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, + 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, + 0x3890: 0x000a, 0x3891: 0x000a, + 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a, + 0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a, + 0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, + 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, + 0x38aa: 0x000a, 0x38ab: 0x000a, 0x38ac: 0x000a, 0x38ad: 0x000a, 0x38ae: 0x000a, 0x38af: 0x000a, + 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, + 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a, + 0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, + 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, + 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, + 0x38d2: 0x000a, 0x38d3: 0x000a, 0x38d4: 0x000a, 0x38d5: 0x000a, 0x38d6: 0x000a, 0x38d7: 0x000a, + 0x38d8: 0x000a, 0x38d9: 0x000a, 0x38da: 0x000a, 0x38db: 0x000a, 0x38dc: 0x000a, 0x38dd: 0x000a, + 0x38de: 0x000a, 0x38df: 0x000a, 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, + 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, + 0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, 0x38ef: 0x000a, + 0x38f0: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a, + 0x38f6: 0x000a, 0x38fa: 0x000a, + 0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a, + // Block 0xe4, offset 0x3900 + 0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, + 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, + 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3910: 0x000a, 0x3911: 0x000a, + 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, + 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, + 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, + 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, + 0x3936: 0x000a, 0x3937: 0x000a, 0x3938: 0x000a, 0x3939: 0x000a, + // Block 0xe5, offset 0x3940 + 0x3940: 0x000a, 0x3941: 0x000a, 0x3942: 0x000a, + 0x3950: 0x000a, 0x3951: 0x000a, + 0x3952: 0x000a, 0x3953: 0x000a, 0x3954: 0x000a, 0x3955: 0x000a, 0x3956: 0x000a, 0x3957: 0x000a, + 0x3958: 0x000a, 0x3959: 0x000a, 0x395a: 0x000a, 0x395b: 0x000a, 0x395c: 0x000a, 0x395d: 0x000a, + 0x395e: 0x000a, 0x395f: 0x000a, 0x3960: 0x000a, 0x3961: 0x000a, 0x3962: 0x000a, 0x3963: 0x000a, + 0x3964: 0x000a, 0x3965: 0x000a, 0x3966: 0x000a, 0x3967: 0x000a, 0x3968: 0x000a, 0x3969: 0x000a, + 0x396a: 0x000a, 0x396b: 0x000a, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x000a, + 0x3970: 0x000a, 0x3971: 0x000a, 0x3972: 0x000a, 0x3973: 0x000a, 0x3974: 0x000a, 0x3975: 0x000a, + 0x3976: 0x000a, 0x3977: 0x000a, 0x3978: 0x000a, 0x3979: 0x000a, 0x397a: 0x000a, 0x397b: 0x000a, + 0x397c: 0x000a, 0x397d: 0x000a, 0x397e: 0x000a, 0x397f: 0x000a, + // Block 0xe6, offset 0x3980 + 0x39a0: 0x000a, 0x39a1: 0x000a, 0x39a2: 0x000a, 0x39a3: 0x000a, + 0x39a4: 0x000a, 0x39a5: 0x000a, 0x39a6: 0x000a, 0x39a7: 0x000a, 0x39a8: 0x000a, 0x39a9: 0x000a, + 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, + // Block 0xe7, offset 0x39c0 + 0x39fe: 0x000b, 0x39ff: 0x000b, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x000b, 0x3a01: 0x000b, 0x3a02: 0x000b, 0x3a03: 0x000b, 0x3a04: 0x000b, 0x3a05: 0x000b, + 0x3a06: 0x000b, 0x3a07: 0x000b, 0x3a08: 0x000b, 0x3a09: 0x000b, 0x3a0a: 0x000b, 0x3a0b: 0x000b, + 0x3a0c: 0x000b, 0x3a0d: 0x000b, 0x3a0e: 0x000b, 0x3a0f: 0x000b, 0x3a10: 0x000b, 0x3a11: 0x000b, + 0x3a12: 0x000b, 0x3a13: 0x000b, 0x3a14: 0x000b, 0x3a15: 0x000b, 0x3a16: 0x000b, 0x3a17: 0x000b, + 0x3a18: 0x000b, 0x3a19: 0x000b, 0x3a1a: 0x000b, 0x3a1b: 0x000b, 0x3a1c: 0x000b, 0x3a1d: 0x000b, + 0x3a1e: 0x000b, 0x3a1f: 0x000b, 0x3a20: 0x000b, 0x3a21: 0x000b, 0x3a22: 0x000b, 0x3a23: 0x000b, + 0x3a24: 0x000b, 0x3a25: 0x000b, 0x3a26: 0x000b, 0x3a27: 0x000b, 0x3a28: 0x000b, 0x3a29: 0x000b, + 0x3a2a: 0x000b, 0x3a2b: 0x000b, 0x3a2c: 0x000b, 0x3a2d: 0x000b, 0x3a2e: 0x000b, 0x3a2f: 0x000b, + 0x3a30: 0x000b, 0x3a31: 0x000b, 0x3a32: 0x000b, 0x3a33: 0x000b, 0x3a34: 0x000b, 0x3a35: 0x000b, + 0x3a36: 0x000b, 0x3a37: 0x000b, 0x3a38: 0x000b, 0x3a39: 0x000b, 0x3a3a: 0x000b, 0x3a3b: 0x000b, + 0x3a3c: 0x000b, 0x3a3d: 0x000b, 0x3a3e: 0x000b, 0x3a3f: 0x000b, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x000c, 0x3a41: 0x000c, 0x3a42: 0x000c, 0x3a43: 0x000c, 0x3a44: 0x000c, 0x3a45: 0x000c, + 0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x000c, + 0x3a4c: 0x000c, 0x3a4d: 0x000c, 0x3a4e: 0x000c, 0x3a4f: 0x000c, 0x3a50: 0x000c, 0x3a51: 0x000c, + 0x3a52: 0x000c, 0x3a53: 0x000c, 0x3a54: 0x000c, 0x3a55: 0x000c, 0x3a56: 0x000c, 0x3a57: 0x000c, + 0x3a58: 0x000c, 0x3a59: 0x000c, 0x3a5a: 0x000c, 0x3a5b: 0x000c, 0x3a5c: 0x000c, 0x3a5d: 0x000c, + 0x3a5e: 0x000c, 0x3a5f: 0x000c, 0x3a60: 0x000c, 0x3a61: 0x000c, 0x3a62: 0x000c, 0x3a63: 0x000c, + 0x3a64: 0x000c, 0x3a65: 0x000c, 0x3a66: 0x000c, 0x3a67: 0x000c, 0x3a68: 0x000c, 0x3a69: 0x000c, + 0x3a6a: 0x000c, 0x3a6b: 0x000c, 0x3a6c: 0x000c, 0x3a6d: 0x000c, 0x3a6e: 0x000c, 0x3a6f: 0x000c, + 0x3a70: 0x000b, 0x3a71: 0x000b, 0x3a72: 0x000b, 0x3a73: 0x000b, 0x3a74: 0x000b, 0x3a75: 0x000b, + 0x3a76: 0x000b, 0x3a77: 0x000b, 0x3a78: 0x000b, 0x3a79: 0x000b, 0x3a7a: 0x000b, 0x3a7b: 0x000b, + 0x3a7c: 0x000b, 0x3a7d: 0x000b, 0x3a7e: 0x000b, 0x3a7f: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, + 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64, + 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, + 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, + 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x77, 0x253: 0x78, + 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, + 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, + 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a, + // Block 0xa, offset 0x280 + 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e, + 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97, + 0x2cb: 0x98, 0x2cd: 0x99, + 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a, + 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a, + 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9f, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a, + 0x2f8: 0x9a, 0x2f9: 0xa0, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0xa1, 0x2fd: 0xa2, 0x2fe: 0x9a, 0x2ff: 0x9a, + // Block 0xc, offset 0x300 + 0x300: 0xa3, 0x301: 0xa4, 0x302: 0xa5, 0x304: 0xa6, 0x305: 0xa7, 0x306: 0xa8, 0x307: 0xa9, + 0x308: 0xaa, 0x30b: 0xab, 0x30c: 0x26, 0x30d: 0xac, + 0x310: 0xad, 0x311: 0xae, 0x312: 0xaf, 0x313: 0xb0, 0x316: 0xb1, 0x317: 0xb2, + 0x318: 0xb3, 0x319: 0xb4, 0x31a: 0xb5, 0x31c: 0xb6, + 0x320: 0xb7, + 0x328: 0xb8, 0x329: 0xb9, 0x32a: 0xba, + 0x330: 0xbb, 0x332: 0xbc, 0x334: 0xbd, 0x335: 0xbe, 0x336: 0xbf, + 0x33b: 0xc0, + // Block 0xd, offset 0x340 + 0x36b: 0xc1, 0x36c: 0xc2, + 0x37e: 0xc3, + // Block 0xe, offset 0x380 + 0x3b2: 0xc4, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xc5, 0x3c6: 0xc6, + 0x3c8: 0x54, 0x3c9: 0xc7, 0x3cc: 0x54, 0x3cd: 0xc8, + 0x3db: 0xc9, 0x3dc: 0xca, 0x3dd: 0xcb, 0x3de: 0xcc, 0x3df: 0xcd, + 0x3e8: 0xce, 0x3e9: 0xcf, 0x3ea: 0xd0, + // Block 0x10, offset 0x400 + 0x400: 0xd1, + 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xd2, 0x424: 0x9a, 0x425: 0xd3, 0x426: 0x9a, 0x427: 0x9a, + 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a, + 0x430: 0x9a, 0x431: 0xa1, 0x432: 0x0e, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xd4, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a, + // Block 0x11, offset 0x440 + 0x440: 0xd5, 0x441: 0x54, 0x442: 0xd6, 0x443: 0xd7, 0x444: 0xd8, 0x445: 0xd9, + 0x449: 0xda, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xdb, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xdc, + 0x460: 0xdd, 0x461: 0xde, 0x462: 0xdf, 0x464: 0xe0, 0x465: 0xe1, 0x466: 0xe2, 0x467: 0xe3, + 0x469: 0xe4, + 0x47f: 0xe5, + // Block 0x12, offset 0x480 + 0x4bf: 0xe5, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xe6, 0x541: 0xe6, 0x542: 0xe6, 0x543: 0xe6, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe7, + 0x548: 0xe6, 0x549: 0xe6, 0x54a: 0xe6, 0x54b: 0xe6, 0x54c: 0xe6, 0x54d: 0xe6, 0x54e: 0xe6, 0x54f: 0xe6, + 0x550: 0xe6, 0x551: 0xe6, 0x552: 0xe6, 0x553: 0xe6, 0x554: 0xe6, 0x555: 0xe6, 0x556: 0xe6, 0x557: 0xe6, + 0x558: 0xe6, 0x559: 0xe6, 0x55a: 0xe6, 0x55b: 0xe6, 0x55c: 0xe6, 0x55d: 0xe6, 0x55e: 0xe6, 0x55f: 0xe6, + 0x560: 0xe6, 0x561: 0xe6, 0x562: 0xe6, 0x563: 0xe6, 0x564: 0xe6, 0x565: 0xe6, 0x566: 0xe6, 0x567: 0xe6, + 0x568: 0xe6, 0x569: 0xe6, 0x56a: 0xe6, 0x56b: 0xe6, 0x56c: 0xe6, 0x56d: 0xe6, 0x56e: 0xe6, 0x56f: 0xe6, + 0x570: 0xe6, 0x571: 0xe6, 0x572: 0xe6, 0x573: 0xe6, 0x574: 0xe6, 0x575: 0xe6, 0x576: 0xe6, 0x577: 0xe6, + 0x578: 0xe6, 0x579: 0xe6, 0x57a: 0xe6, 0x57b: 0xe6, 0x57c: 0xe6, 0x57d: 0xe6, 0x57e: 0xe6, 0x57f: 0xe6, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 16568 bytes (16KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go new file mode 100644 index 0000000..3aa2c3b --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go @@ -0,0 +1,1923 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.14 && !go1.16 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "12.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 16896 bytes (16.50 KiB). Checksum: 6f0927067913dc6d. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 240 blocks, 15360 entries, 15360 bytes +// The third block is the zero block. +var bidiValues = [15360]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7a: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, + 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, + 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, + 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, + 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, + 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, + 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, + 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, + // Block 0x5e, offset 0x1780 + 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, + 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, + 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, + 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, + 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, + 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, + 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, + 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, + 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, + 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, + 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, + 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, + 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, + 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, + 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, + 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, + 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, + 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, + 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19af: 0x000c, + 0x19b0: 0x000c, 0x19b1: 0x000c, + 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19ff: 0x000c, + // Block 0x68, offset 0x1a00 + 0x1a20: 0x000c, 0x1a21: 0x000c, 0x1a22: 0x000c, 0x1a23: 0x000c, + 0x1a24: 0x000c, 0x1a25: 0x000c, 0x1a26: 0x000c, 0x1a27: 0x000c, 0x1a28: 0x000c, 0x1a29: 0x000c, + 0x1a2a: 0x000c, 0x1a2b: 0x000c, 0x1a2c: 0x000c, 0x1a2d: 0x000c, 0x1a2e: 0x000c, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, 0x1a32: 0x000c, 0x1a33: 0x000c, 0x1a34: 0x000c, 0x1a35: 0x000c, + 0x1a36: 0x000c, 0x1a37: 0x000c, 0x1a38: 0x000c, 0x1a39: 0x000c, 0x1a3a: 0x000c, 0x1a3b: 0x000c, + 0x1a3c: 0x000c, 0x1a3d: 0x000c, 0x1a3e: 0x000c, 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x000a, 0x1a41: 0x000a, 0x1a42: 0x000a, 0x1a43: 0x000a, 0x1a44: 0x000a, 0x1a45: 0x000a, + 0x1a46: 0x000a, 0x1a47: 0x000a, 0x1a48: 0x000a, 0x1a49: 0x000a, 0x1a4a: 0x000a, 0x1a4b: 0x000a, + 0x1a4c: 0x000a, 0x1a4d: 0x000a, 0x1a4e: 0x000a, 0x1a4f: 0x000a, 0x1a50: 0x000a, 0x1a51: 0x000a, + 0x1a52: 0x000a, 0x1a53: 0x000a, 0x1a54: 0x000a, 0x1a55: 0x000a, 0x1a56: 0x000a, 0x1a57: 0x000a, + 0x1a58: 0x000a, 0x1a59: 0x000a, 0x1a5a: 0x000a, 0x1a5b: 0x000a, 0x1a5c: 0x000a, 0x1a5d: 0x000a, + 0x1a5e: 0x000a, 0x1a5f: 0x000a, 0x1a60: 0x000a, 0x1a61: 0x000a, 0x1a62: 0x003a, 0x1a63: 0x002a, + 0x1a64: 0x003a, 0x1a65: 0x002a, 0x1a66: 0x003a, 0x1a67: 0x002a, 0x1a68: 0x003a, 0x1a69: 0x002a, + 0x1a6a: 0x000a, 0x1a6b: 0x000a, 0x1a6c: 0x000a, 0x1a6d: 0x000a, 0x1a6e: 0x000a, 0x1a6f: 0x000a, + 0x1a70: 0x000a, 0x1a71: 0x000a, 0x1a72: 0x000a, 0x1a73: 0x000a, 0x1a74: 0x000a, 0x1a75: 0x000a, + 0x1a76: 0x000a, 0x1a77: 0x000a, 0x1a78: 0x000a, 0x1a79: 0x000a, 0x1a7a: 0x000a, 0x1a7b: 0x000a, + 0x1a7c: 0x000a, 0x1a7d: 0x000a, 0x1a7e: 0x000a, 0x1a7f: 0x000a, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x000a, 0x1ae3: 0x000a, + 0x1ae4: 0x000a, 0x1ae5: 0x000a, 0x1ae6: 0x000a, 0x1ae7: 0x000a, 0x1ae8: 0x000a, 0x1ae9: 0x000a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1a: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x0009, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, + 0x1b88: 0x003a, 0x1b89: 0x002a, 0x1b8a: 0x003a, 0x1b8b: 0x002a, + 0x1b8c: 0x003a, 0x1b8d: 0x002a, 0x1b8e: 0x003a, 0x1b8f: 0x002a, 0x1b90: 0x003a, 0x1b91: 0x002a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x003a, 0x1b95: 0x002a, 0x1b96: 0x003a, 0x1b97: 0x002a, + 0x1b98: 0x003a, 0x1b99: 0x002a, 0x1b9a: 0x003a, 0x1b9b: 0x002a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, + 0x1baa: 0x000c, 0x1bab: 0x000c, 0x1bac: 0x000c, 0x1bad: 0x000c, + 0x1bb0: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, + 0x1bbd: 0x000a, 0x1bbe: 0x000a, 0x1bbf: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bd9: 0x000c, 0x1bda: 0x000c, 0x1bdb: 0x000a, 0x1bdc: 0x000a, + 0x1be0: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c3b: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x000a, 0x1c41: 0x000a, 0x1c42: 0x000a, 0x1c43: 0x000a, 0x1c44: 0x000a, 0x1c45: 0x000a, + 0x1c46: 0x000a, 0x1c47: 0x000a, 0x1c48: 0x000a, 0x1c49: 0x000a, 0x1c4a: 0x000a, 0x1c4b: 0x000a, + 0x1c4c: 0x000a, 0x1c4d: 0x000a, 0x1c4e: 0x000a, 0x1c4f: 0x000a, 0x1c50: 0x000a, 0x1c51: 0x000a, + 0x1c52: 0x000a, 0x1c53: 0x000a, 0x1c54: 0x000a, 0x1c55: 0x000a, 0x1c56: 0x000a, 0x1c57: 0x000a, + 0x1c58: 0x000a, 0x1c59: 0x000a, 0x1c5a: 0x000a, 0x1c5b: 0x000a, 0x1c5c: 0x000a, 0x1c5d: 0x000a, + 0x1c5e: 0x000a, 0x1c5f: 0x000a, 0x1c60: 0x000a, 0x1c61: 0x000a, 0x1c62: 0x000a, 0x1c63: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c9d: 0x000a, + 0x1c9e: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, + 0x1cfc: 0x000a, 0x1cfd: 0x000a, 0x1cfe: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d31: 0x000a, 0x1d32: 0x000a, 0x1d33: 0x000a, 0x1d34: 0x000a, 0x1d35: 0x000a, + 0x1d36: 0x000a, 0x1d37: 0x000a, 0x1d38: 0x000a, 0x1d39: 0x000a, 0x1d3a: 0x000a, 0x1d3b: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, 0x1d3f: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d4c: 0x000a, 0x1d4d: 0x000a, 0x1d4e: 0x000a, 0x1d4f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dde: 0x000a, 0x1ddf: 0x000a, + 0x1dff: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e10: 0x000a, 0x1e11: 0x000a, + 0x1e12: 0x000a, 0x1e13: 0x000a, 0x1e14: 0x000a, 0x1e15: 0x000a, 0x1e16: 0x000a, 0x1e17: 0x000a, + 0x1e18: 0x000a, 0x1e19: 0x000a, 0x1e1a: 0x000a, 0x1e1b: 0x000a, 0x1e1c: 0x000a, 0x1e1d: 0x000a, + 0x1e1e: 0x000a, 0x1e1f: 0x000a, 0x1e20: 0x000a, 0x1e21: 0x000a, 0x1e22: 0x000a, 0x1e23: 0x000a, + 0x1e24: 0x000a, 0x1e25: 0x000a, 0x1e26: 0x000a, 0x1e27: 0x000a, 0x1e28: 0x000a, 0x1e29: 0x000a, + 0x1e2a: 0x000a, 0x1e2b: 0x000a, 0x1e2c: 0x000a, 0x1e2d: 0x000a, 0x1e2e: 0x000a, 0x1e2f: 0x000a, + 0x1e30: 0x000a, 0x1e31: 0x000a, 0x1e32: 0x000a, 0x1e33: 0x000a, 0x1e34: 0x000a, 0x1e35: 0x000a, + 0x1e36: 0x000a, 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, 0x1e3b: 0x000a, + 0x1e3c: 0x000a, 0x1e3d: 0x000a, 0x1e3e: 0x000a, 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x000a, 0x1e41: 0x000a, 0x1e42: 0x000a, 0x1e43: 0x000a, 0x1e44: 0x000a, 0x1e45: 0x000a, + 0x1e46: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e8d: 0x000a, 0x1e8e: 0x000a, 0x1e8f: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1eef: 0x000c, + 0x1ef0: 0x000c, 0x1ef1: 0x000c, 0x1ef2: 0x000c, 0x1ef3: 0x000a, 0x1ef4: 0x000c, 0x1ef5: 0x000c, + 0x1ef6: 0x000c, 0x1ef7: 0x000c, 0x1ef8: 0x000c, 0x1ef9: 0x000c, 0x1efa: 0x000c, 0x1efb: 0x000c, + 0x1efc: 0x000c, 0x1efd: 0x000c, 0x1efe: 0x000a, 0x1eff: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f1e: 0x000c, 0x1f1f: 0x000c, + // Block 0x7d, offset 0x1f40 + 0x1f70: 0x000c, 0x1f71: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x000a, 0x1f81: 0x000a, 0x1f82: 0x000a, 0x1f83: 0x000a, 0x1f84: 0x000a, 0x1f85: 0x000a, + 0x1f86: 0x000a, 0x1f87: 0x000a, 0x1f88: 0x000a, 0x1f89: 0x000a, 0x1f8a: 0x000a, 0x1f8b: 0x000a, + 0x1f8c: 0x000a, 0x1f8d: 0x000a, 0x1f8e: 0x000a, 0x1f8f: 0x000a, 0x1f90: 0x000a, 0x1f91: 0x000a, + 0x1f92: 0x000a, 0x1f93: 0x000a, 0x1f94: 0x000a, 0x1f95: 0x000a, 0x1f96: 0x000a, 0x1f97: 0x000a, + 0x1f98: 0x000a, 0x1f99: 0x000a, 0x1f9a: 0x000a, 0x1f9b: 0x000a, 0x1f9c: 0x000a, 0x1f9d: 0x000a, + 0x1f9e: 0x000a, 0x1f9f: 0x000a, 0x1fa0: 0x000a, 0x1fa1: 0x000a, + // Block 0x7f, offset 0x1fc0 + 0x1fc8: 0x000a, + // Block 0x80, offset 0x2000 + 0x2002: 0x000c, + 0x2006: 0x000c, 0x200b: 0x000c, + 0x2025: 0x000c, 0x2026: 0x000c, 0x2028: 0x000a, 0x2029: 0x000a, + 0x202a: 0x000a, 0x202b: 0x000a, + 0x2038: 0x0004, 0x2039: 0x0004, + // Block 0x81, offset 0x2040 + 0x2074: 0x000a, 0x2075: 0x000a, + 0x2076: 0x000a, 0x2077: 0x000a, + // Block 0x82, offset 0x2080 + 0x2084: 0x000c, 0x2085: 0x000c, + 0x20a0: 0x000c, 0x20a1: 0x000c, 0x20a2: 0x000c, 0x20a3: 0x000c, + 0x20a4: 0x000c, 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a7: 0x000c, 0x20a8: 0x000c, 0x20a9: 0x000c, + 0x20aa: 0x000c, 0x20ab: 0x000c, 0x20ac: 0x000c, 0x20ad: 0x000c, 0x20ae: 0x000c, 0x20af: 0x000c, + 0x20b0: 0x000c, 0x20b1: 0x000c, + 0x20bf: 0x000c, + // Block 0x83, offset 0x20c0 + 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, + // Block 0x84, offset 0x2100 + 0x2107: 0x000c, 0x2108: 0x000c, 0x2109: 0x000c, 0x210a: 0x000c, 0x210b: 0x000c, + 0x210c: 0x000c, 0x210d: 0x000c, 0x210e: 0x000c, 0x210f: 0x000c, 0x2110: 0x000c, 0x2111: 0x000c, + // Block 0x85, offset 0x2140 + 0x2140: 0x000c, 0x2141: 0x000c, 0x2142: 0x000c, + 0x2173: 0x000c, + 0x2176: 0x000c, 0x2177: 0x000c, 0x2178: 0x000c, 0x2179: 0x000c, + 0x217c: 0x000c, 0x217d: 0x000c, + // Block 0x86, offset 0x2180 + 0x21a5: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e9: 0x000c, + 0x21ea: 0x000c, 0x21eb: 0x000c, 0x21ec: 0x000c, 0x21ed: 0x000c, 0x21ee: 0x000c, + 0x21f1: 0x000c, 0x21f2: 0x000c, 0x21f5: 0x000c, + 0x21f6: 0x000c, + // Block 0x88, offset 0x2200 + 0x2203: 0x000c, + 0x220c: 0x000c, + 0x223c: 0x000c, + // Block 0x89, offset 0x2240 + 0x2270: 0x000c, 0x2272: 0x000c, 0x2273: 0x000c, 0x2274: 0x000c, + 0x2277: 0x000c, 0x2278: 0x000c, + 0x227e: 0x000c, 0x227f: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2281: 0x000c, + 0x22ac: 0x000c, 0x22ad: 0x000c, + 0x22b6: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22e5: 0x000c, 0x22e8: 0x000c, + 0x22ed: 0x000c, + // Block 0x8c, offset 0x2300 + 0x231d: 0x0001, + 0x231e: 0x000c, 0x231f: 0x0001, 0x2320: 0x0001, 0x2321: 0x0001, 0x2322: 0x0001, 0x2323: 0x0001, + 0x2324: 0x0001, 0x2325: 0x0001, 0x2326: 0x0001, 0x2327: 0x0001, 0x2328: 0x0001, 0x2329: 0x0003, + 0x232a: 0x0001, 0x232b: 0x0001, 0x232c: 0x0001, 0x232d: 0x0001, 0x232e: 0x0001, 0x232f: 0x0001, + 0x2330: 0x0001, 0x2331: 0x0001, 0x2332: 0x0001, 0x2333: 0x0001, 0x2334: 0x0001, 0x2335: 0x0001, + 0x2336: 0x0001, 0x2337: 0x0001, 0x2338: 0x0001, 0x2339: 0x0001, 0x233a: 0x0001, 0x233b: 0x0001, + 0x233c: 0x0001, 0x233d: 0x0001, 0x233e: 0x0001, 0x233f: 0x0001, + // Block 0x8d, offset 0x2340 + 0x2340: 0x0001, 0x2341: 0x0001, 0x2342: 0x0001, 0x2343: 0x0001, 0x2344: 0x0001, 0x2345: 0x0001, + 0x2346: 0x0001, 0x2347: 0x0001, 0x2348: 0x0001, 0x2349: 0x0001, 0x234a: 0x0001, 0x234b: 0x0001, + 0x234c: 0x0001, 0x234d: 0x0001, 0x234e: 0x0001, 0x234f: 0x0001, 0x2350: 0x000d, 0x2351: 0x000d, + 0x2352: 0x000d, 0x2353: 0x000d, 0x2354: 0x000d, 0x2355: 0x000d, 0x2356: 0x000d, 0x2357: 0x000d, + 0x2358: 0x000d, 0x2359: 0x000d, 0x235a: 0x000d, 0x235b: 0x000d, 0x235c: 0x000d, 0x235d: 0x000d, + 0x235e: 0x000d, 0x235f: 0x000d, 0x2360: 0x000d, 0x2361: 0x000d, 0x2362: 0x000d, 0x2363: 0x000d, + 0x2364: 0x000d, 0x2365: 0x000d, 0x2366: 0x000d, 0x2367: 0x000d, 0x2368: 0x000d, 0x2369: 0x000d, + 0x236a: 0x000d, 0x236b: 0x000d, 0x236c: 0x000d, 0x236d: 0x000d, 0x236e: 0x000d, 0x236f: 0x000d, + 0x2370: 0x000d, 0x2371: 0x000d, 0x2372: 0x000d, 0x2373: 0x000d, 0x2374: 0x000d, 0x2375: 0x000d, + 0x2376: 0x000d, 0x2377: 0x000d, 0x2378: 0x000d, 0x2379: 0x000d, 0x237a: 0x000d, 0x237b: 0x000d, + 0x237c: 0x000d, 0x237d: 0x000d, 0x237e: 0x000d, 0x237f: 0x000d, + // Block 0x8e, offset 0x2380 + 0x2380: 0x000d, 0x2381: 0x000d, 0x2382: 0x000d, 0x2383: 0x000d, 0x2384: 0x000d, 0x2385: 0x000d, + 0x2386: 0x000d, 0x2387: 0x000d, 0x2388: 0x000d, 0x2389: 0x000d, 0x238a: 0x000d, 0x238b: 0x000d, + 0x238c: 0x000d, 0x238d: 0x000d, 0x238e: 0x000d, 0x238f: 0x000d, 0x2390: 0x000d, 0x2391: 0x000d, + 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, + 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, + 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, + 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, + 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, + 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, + 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, + 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000a, 0x23bf: 0x000a, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, + 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, + 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000b, 0x23d1: 0x000b, + 0x23d2: 0x000b, 0x23d3: 0x000b, 0x23d4: 0x000b, 0x23d5: 0x000b, 0x23d6: 0x000b, 0x23d7: 0x000b, + 0x23d8: 0x000b, 0x23d9: 0x000b, 0x23da: 0x000b, 0x23db: 0x000b, 0x23dc: 0x000b, 0x23dd: 0x000b, + 0x23de: 0x000b, 0x23df: 0x000b, 0x23e0: 0x000b, 0x23e1: 0x000b, 0x23e2: 0x000b, 0x23e3: 0x000b, + 0x23e4: 0x000b, 0x23e5: 0x000b, 0x23e6: 0x000b, 0x23e7: 0x000b, 0x23e8: 0x000b, 0x23e9: 0x000b, + 0x23ea: 0x000b, 0x23eb: 0x000b, 0x23ec: 0x000b, 0x23ed: 0x000b, 0x23ee: 0x000b, 0x23ef: 0x000b, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000a, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000c, 0x2401: 0x000c, 0x2402: 0x000c, 0x2403: 0x000c, 0x2404: 0x000c, 0x2405: 0x000c, + 0x2406: 0x000c, 0x2407: 0x000c, 0x2408: 0x000c, 0x2409: 0x000c, 0x240a: 0x000c, 0x240b: 0x000c, + 0x240c: 0x000c, 0x240d: 0x000c, 0x240e: 0x000c, 0x240f: 0x000c, 0x2410: 0x000a, 0x2411: 0x000a, + 0x2412: 0x000a, 0x2413: 0x000a, 0x2414: 0x000a, 0x2415: 0x000a, 0x2416: 0x000a, 0x2417: 0x000a, + 0x2418: 0x000a, 0x2419: 0x000a, + 0x2420: 0x000c, 0x2421: 0x000c, 0x2422: 0x000c, 0x2423: 0x000c, + 0x2424: 0x000c, 0x2425: 0x000c, 0x2426: 0x000c, 0x2427: 0x000c, 0x2428: 0x000c, 0x2429: 0x000c, + 0x242a: 0x000c, 0x242b: 0x000c, 0x242c: 0x000c, 0x242d: 0x000c, 0x242e: 0x000c, 0x242f: 0x000c, + 0x2430: 0x000a, 0x2431: 0x000a, 0x2432: 0x000a, 0x2433: 0x000a, 0x2434: 0x000a, 0x2435: 0x000a, + 0x2436: 0x000a, 0x2437: 0x000a, 0x2438: 0x000a, 0x2439: 0x000a, 0x243a: 0x000a, 0x243b: 0x000a, + 0x243c: 0x000a, 0x243d: 0x000a, 0x243e: 0x000a, 0x243f: 0x000a, + // Block 0x91, offset 0x2440 + 0x2440: 0x000a, 0x2441: 0x000a, 0x2442: 0x000a, 0x2443: 0x000a, 0x2444: 0x000a, 0x2445: 0x000a, + 0x2446: 0x000a, 0x2447: 0x000a, 0x2448: 0x000a, 0x2449: 0x000a, 0x244a: 0x000a, 0x244b: 0x000a, + 0x244c: 0x000a, 0x244d: 0x000a, 0x244e: 0x000a, 0x244f: 0x000a, 0x2450: 0x0006, 0x2451: 0x000a, + 0x2452: 0x0006, 0x2454: 0x000a, 0x2455: 0x0006, 0x2456: 0x000a, 0x2457: 0x000a, + 0x2458: 0x000a, 0x2459: 0x009a, 0x245a: 0x008a, 0x245b: 0x007a, 0x245c: 0x006a, 0x245d: 0x009a, + 0x245e: 0x008a, 0x245f: 0x0004, 0x2460: 0x000a, 0x2461: 0x000a, 0x2462: 0x0003, 0x2463: 0x0003, + 0x2464: 0x000a, 0x2465: 0x000a, 0x2466: 0x000a, 0x2468: 0x000a, 0x2469: 0x0004, + 0x246a: 0x0004, 0x246b: 0x000a, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, + 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, + 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000d, 0x2491: 0x000d, + 0x2492: 0x000d, 0x2493: 0x000d, 0x2494: 0x000d, 0x2495: 0x000d, 0x2496: 0x000d, 0x2497: 0x000d, + 0x2498: 0x000d, 0x2499: 0x000d, 0x249a: 0x000d, 0x249b: 0x000d, 0x249c: 0x000d, 0x249d: 0x000d, + 0x249e: 0x000d, 0x249f: 0x000d, 0x24a0: 0x000d, 0x24a1: 0x000d, 0x24a2: 0x000d, 0x24a3: 0x000d, + 0x24a4: 0x000d, 0x24a5: 0x000d, 0x24a6: 0x000d, 0x24a7: 0x000d, 0x24a8: 0x000d, 0x24a9: 0x000d, + 0x24aa: 0x000d, 0x24ab: 0x000d, 0x24ac: 0x000d, 0x24ad: 0x000d, 0x24ae: 0x000d, 0x24af: 0x000d, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000b, + // Block 0x93, offset 0x24c0 + 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x0004, 0x24c4: 0x0004, 0x24c5: 0x0004, + 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x003a, 0x24c9: 0x002a, 0x24ca: 0x000a, 0x24cb: 0x0003, + 0x24cc: 0x0006, 0x24cd: 0x0003, 0x24ce: 0x0006, 0x24cf: 0x0006, 0x24d0: 0x0002, 0x24d1: 0x0002, + 0x24d2: 0x0002, 0x24d3: 0x0002, 0x24d4: 0x0002, 0x24d5: 0x0002, 0x24d6: 0x0002, 0x24d7: 0x0002, + 0x24d8: 0x0002, 0x24d9: 0x0002, 0x24da: 0x0006, 0x24db: 0x000a, 0x24dc: 0x000a, 0x24dd: 0x000a, + 0x24de: 0x000a, 0x24df: 0x000a, 0x24e0: 0x000a, + 0x24fb: 0x005a, + 0x24fc: 0x000a, 0x24fd: 0x004a, 0x24fe: 0x000a, 0x24ff: 0x000a, + // Block 0x94, offset 0x2500 + 0x2500: 0x000a, + 0x251b: 0x005a, 0x251c: 0x000a, 0x251d: 0x004a, + 0x251e: 0x000a, 0x251f: 0x00fa, 0x2520: 0x00ea, 0x2521: 0x000a, 0x2522: 0x003a, 0x2523: 0x002a, + 0x2524: 0x000a, 0x2525: 0x000a, + // Block 0x95, offset 0x2540 + 0x2560: 0x0004, 0x2561: 0x0004, 0x2562: 0x000a, 0x2563: 0x000a, + 0x2564: 0x000a, 0x2565: 0x0004, 0x2566: 0x0004, 0x2568: 0x000a, 0x2569: 0x000a, + 0x256a: 0x000a, 0x256b: 0x000a, 0x256c: 0x000a, 0x256d: 0x000a, 0x256e: 0x000a, + 0x2570: 0x000b, 0x2571: 0x000b, 0x2572: 0x000b, 0x2573: 0x000b, 0x2574: 0x000b, 0x2575: 0x000b, + 0x2576: 0x000b, 0x2577: 0x000b, 0x2578: 0x000b, 0x2579: 0x000a, 0x257a: 0x000a, 0x257b: 0x000a, + 0x257c: 0x000a, 0x257d: 0x000a, 0x257e: 0x000b, 0x257f: 0x000b, + // Block 0x96, offset 0x2580 + 0x2581: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x000a, 0x25c1: 0x000a, 0x25c2: 0x000a, 0x25c3: 0x000a, 0x25c4: 0x000a, 0x25c5: 0x000a, + 0x25c6: 0x000a, 0x25c7: 0x000a, 0x25c8: 0x000a, 0x25c9: 0x000a, 0x25ca: 0x000a, 0x25cb: 0x000a, + 0x25cc: 0x000a, 0x25d0: 0x000a, 0x25d1: 0x000a, + 0x25d2: 0x000a, 0x25d3: 0x000a, 0x25d4: 0x000a, 0x25d5: 0x000a, 0x25d6: 0x000a, 0x25d7: 0x000a, + 0x25d8: 0x000a, 0x25d9: 0x000a, 0x25da: 0x000a, 0x25db: 0x000a, + 0x25e0: 0x000a, + // Block 0x98, offset 0x2600 + 0x263d: 0x000c, + // Block 0x99, offset 0x2640 + 0x2660: 0x000c, 0x2661: 0x0002, 0x2662: 0x0002, 0x2663: 0x0002, + 0x2664: 0x0002, 0x2665: 0x0002, 0x2666: 0x0002, 0x2667: 0x0002, 0x2668: 0x0002, 0x2669: 0x0002, + 0x266a: 0x0002, 0x266b: 0x0002, 0x266c: 0x0002, 0x266d: 0x0002, 0x266e: 0x0002, 0x266f: 0x0002, + 0x2670: 0x0002, 0x2671: 0x0002, 0x2672: 0x0002, 0x2673: 0x0002, 0x2674: 0x0002, 0x2675: 0x0002, + 0x2676: 0x0002, 0x2677: 0x0002, 0x2678: 0x0002, 0x2679: 0x0002, 0x267a: 0x0002, 0x267b: 0x0002, + // Block 0x9a, offset 0x2680 + 0x26b6: 0x000c, 0x26b7: 0x000c, 0x26b8: 0x000c, 0x26b9: 0x000c, 0x26ba: 0x000c, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x0001, 0x26c1: 0x0001, 0x26c2: 0x0001, 0x26c3: 0x0001, 0x26c4: 0x0001, 0x26c5: 0x0001, + 0x26c6: 0x0001, 0x26c7: 0x0001, 0x26c8: 0x0001, 0x26c9: 0x0001, 0x26ca: 0x0001, 0x26cb: 0x0001, + 0x26cc: 0x0001, 0x26cd: 0x0001, 0x26ce: 0x0001, 0x26cf: 0x0001, 0x26d0: 0x0001, 0x26d1: 0x0001, + 0x26d2: 0x0001, 0x26d3: 0x0001, 0x26d4: 0x0001, 0x26d5: 0x0001, 0x26d6: 0x0001, 0x26d7: 0x0001, + 0x26d8: 0x0001, 0x26d9: 0x0001, 0x26da: 0x0001, 0x26db: 0x0001, 0x26dc: 0x0001, 0x26dd: 0x0001, + 0x26de: 0x0001, 0x26df: 0x0001, 0x26e0: 0x0001, 0x26e1: 0x0001, 0x26e2: 0x0001, 0x26e3: 0x0001, + 0x26e4: 0x0001, 0x26e5: 0x0001, 0x26e6: 0x0001, 0x26e7: 0x0001, 0x26e8: 0x0001, 0x26e9: 0x0001, + 0x26ea: 0x0001, 0x26eb: 0x0001, 0x26ec: 0x0001, 0x26ed: 0x0001, 0x26ee: 0x0001, 0x26ef: 0x0001, + 0x26f0: 0x0001, 0x26f1: 0x0001, 0x26f2: 0x0001, 0x26f3: 0x0001, 0x26f4: 0x0001, 0x26f5: 0x0001, + 0x26f6: 0x0001, 0x26f7: 0x0001, 0x26f8: 0x0001, 0x26f9: 0x0001, 0x26fa: 0x0001, 0x26fb: 0x0001, + 0x26fc: 0x0001, 0x26fd: 0x0001, 0x26fe: 0x0001, 0x26ff: 0x0001, + // Block 0x9c, offset 0x2700 + 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, + 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, + 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, + 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, + 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, + 0x271e: 0x0001, 0x271f: 0x000a, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, + 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, + 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, + 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, + 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, + 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x000c, 0x2742: 0x000c, 0x2743: 0x000c, 0x2744: 0x0001, 0x2745: 0x000c, + 0x2746: 0x000c, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x000c, 0x274d: 0x000c, 0x274e: 0x000c, 0x274f: 0x000c, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x000c, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x000c, 0x27a6: 0x000c, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x000a, 0x27fa: 0x000a, 0x27fb: 0x000a, + 0x27fc: 0x000a, 0x27fd: 0x000a, 0x27fe: 0x000a, 0x27ff: 0x000a, + // Block 0xa0, offset 0x2800 + 0x2800: 0x000d, 0x2801: 0x000d, 0x2802: 0x000d, 0x2803: 0x000d, 0x2804: 0x000d, 0x2805: 0x000d, + 0x2806: 0x000d, 0x2807: 0x000d, 0x2808: 0x000d, 0x2809: 0x000d, 0x280a: 0x000d, 0x280b: 0x000d, + 0x280c: 0x000d, 0x280d: 0x000d, 0x280e: 0x000d, 0x280f: 0x000d, 0x2810: 0x000d, 0x2811: 0x000d, + 0x2812: 0x000d, 0x2813: 0x000d, 0x2814: 0x000d, 0x2815: 0x000d, 0x2816: 0x000d, 0x2817: 0x000d, + 0x2818: 0x000d, 0x2819: 0x000d, 0x281a: 0x000d, 0x281b: 0x000d, 0x281c: 0x000d, 0x281d: 0x000d, + 0x281e: 0x000d, 0x281f: 0x000d, 0x2820: 0x000d, 0x2821: 0x000d, 0x2822: 0x000d, 0x2823: 0x000d, + 0x2824: 0x000c, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x000c, 0x2828: 0x000d, 0x2829: 0x000d, + 0x282a: 0x000d, 0x282b: 0x000d, 0x282c: 0x000d, 0x282d: 0x000d, 0x282e: 0x000d, 0x282f: 0x000d, + 0x2830: 0x0005, 0x2831: 0x0005, 0x2832: 0x0005, 0x2833: 0x0005, 0x2834: 0x0005, 0x2835: 0x0005, + 0x2836: 0x0005, 0x2837: 0x0005, 0x2838: 0x0005, 0x2839: 0x0005, 0x283a: 0x000d, 0x283b: 0x000d, + 0x283c: 0x000d, 0x283d: 0x000d, 0x283e: 0x000d, 0x283f: 0x000d, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005, + 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005, + 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005, + 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, + 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005, + 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, + 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, + 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, + 0x28b0: 0x000d, 0x28b1: 0x000d, 0x28b2: 0x000d, 0x28b3: 0x000d, 0x28b4: 0x000d, 0x28b5: 0x000d, + 0x28b6: 0x000d, 0x28b7: 0x000d, 0x28b8: 0x000d, 0x28b9: 0x000d, 0x28ba: 0x000d, 0x28bb: 0x000d, + 0x28bc: 0x000d, 0x28bd: 0x000d, 0x28be: 0x000d, 0x28bf: 0x000d, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, + 0x28c6: 0x000c, 0x28c7: 0x000c, 0x28c8: 0x000c, 0x28c9: 0x000c, 0x28ca: 0x000c, 0x28cb: 0x000c, + 0x28cc: 0x000c, 0x28cd: 0x000c, 0x28ce: 0x000c, 0x28cf: 0x000c, 0x28d0: 0x000c, 0x28d1: 0x000d, + 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, + 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, + 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, + 0x28e4: 0x000d, 0x28e5: 0x000d, 0x28e6: 0x000d, 0x28e7: 0x000d, 0x28e8: 0x000d, 0x28e9: 0x000d, + 0x28ea: 0x000d, 0x28eb: 0x000d, 0x28ec: 0x000d, 0x28ed: 0x000d, 0x28ee: 0x000d, 0x28ef: 0x000d, + 0x28f0: 0x0001, 0x28f1: 0x0001, 0x28f2: 0x0001, 0x28f3: 0x0001, 0x28f4: 0x0001, 0x28f5: 0x0001, + 0x28f6: 0x0001, 0x28f7: 0x0001, 0x28f8: 0x0001, 0x28f9: 0x0001, 0x28fa: 0x0001, 0x28fb: 0x0001, + 0x28fc: 0x0001, 0x28fd: 0x0001, 0x28fe: 0x0001, 0x28ff: 0x0001, + // Block 0xa4, offset 0x2900 + 0x2901: 0x000c, + 0x2938: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c, 0x293b: 0x000c, + 0x293c: 0x000c, 0x293d: 0x000c, 0x293e: 0x000c, 0x293f: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c, 0x2943: 0x000c, 0x2944: 0x000c, 0x2945: 0x000c, + 0x2946: 0x000c, + 0x2952: 0x000a, 0x2953: 0x000a, 0x2954: 0x000a, 0x2955: 0x000a, 0x2956: 0x000a, 0x2957: 0x000a, + 0x2958: 0x000a, 0x2959: 0x000a, 0x295a: 0x000a, 0x295b: 0x000a, 0x295c: 0x000a, 0x295d: 0x000a, + 0x295e: 0x000a, 0x295f: 0x000a, 0x2960: 0x000a, 0x2961: 0x000a, 0x2962: 0x000a, 0x2963: 0x000a, + 0x2964: 0x000a, 0x2965: 0x000a, + 0x297f: 0x000c, + // Block 0xa6, offset 0x2980 + 0x2980: 0x000c, 0x2981: 0x000c, + 0x29b3: 0x000c, 0x29b4: 0x000c, 0x29b5: 0x000c, + 0x29b6: 0x000c, 0x29b9: 0x000c, 0x29ba: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000c, 0x29c1: 0x000c, 0x29c2: 0x000c, + 0x29e7: 0x000c, 0x29e8: 0x000c, 0x29e9: 0x000c, + 0x29ea: 0x000c, 0x29eb: 0x000c, 0x29ed: 0x000c, 0x29ee: 0x000c, 0x29ef: 0x000c, + 0x29f0: 0x000c, 0x29f1: 0x000c, 0x29f2: 0x000c, 0x29f3: 0x000c, 0x29f4: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a33: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x000c, 0x2a41: 0x000c, + 0x2a76: 0x000c, 0x2a77: 0x000c, 0x2a78: 0x000c, 0x2a79: 0x000c, 0x2a7a: 0x000c, 0x2a7b: 0x000c, + 0x2a7c: 0x000c, 0x2a7d: 0x000c, 0x2a7e: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a89: 0x000c, 0x2a8a: 0x000c, 0x2a8b: 0x000c, + 0x2a8c: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2aef: 0x000c, + 0x2af0: 0x000c, 0x2af1: 0x000c, 0x2af4: 0x000c, + 0x2af6: 0x000c, 0x2af7: 0x000c, + 0x2afe: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b1f: 0x000c, 0x2b23: 0x000c, + 0x2b24: 0x000c, 0x2b25: 0x000c, 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c, + 0x2b2a: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, + 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, + 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, + 0x2bc6: 0x000c, + 0x2bde: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, + 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, + 0x2c3f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2cdc: 0x000c, 0x2cdd: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, + 0x2d3d: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, + 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, + 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, + 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, + // Block 0xb6, offset 0x2d80 + 0x2dab: 0x000c, 0x2dad: 0x000c, + 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db7: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2ddd: 0x000c, + 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, + 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, + 0x2dea: 0x000c, 0x2deb: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e2f: 0x000c, + 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e37: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, + 0x2e5a: 0x000c, 0x2e5b: 0x000c, + 0x2e60: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2e81: 0x000c, 0x2e82: 0x000c, 0x2e83: 0x000c, 0x2e84: 0x000c, 0x2e85: 0x000c, + 0x2e86: 0x000c, 0x2e89: 0x000c, 0x2e8a: 0x000c, + 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2ebb: 0x000c, + 0x2ebc: 0x000c, 0x2ebd: 0x000c, 0x2ebe: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ec7: 0x000c, + 0x2ed1: 0x000c, + 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, + 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f0a: 0x000c, 0x2f0b: 0x000c, + 0x2f0c: 0x000c, 0x2f0d: 0x000c, 0x2f0e: 0x000c, 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, + 0x2f12: 0x000c, 0x2f13: 0x000c, 0x2f14: 0x000c, 0x2f15: 0x000c, 0x2f16: 0x000c, + 0x2f18: 0x000c, 0x2f19: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f70: 0x000c, 0x2f71: 0x000c, 0x2f72: 0x000c, 0x2f73: 0x000c, 0x2f74: 0x000c, 0x2f75: 0x000c, + 0x2f76: 0x000c, 0x2f78: 0x000c, 0x2f79: 0x000c, 0x2f7a: 0x000c, 0x2f7b: 0x000c, + 0x2f7c: 0x000c, 0x2f7d: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2f92: 0x000c, 0x2f93: 0x000c, 0x2f94: 0x000c, 0x2f95: 0x000c, 0x2f96: 0x000c, 0x2f97: 0x000c, + 0x2f98: 0x000c, 0x2f99: 0x000c, 0x2f9a: 0x000c, 0x2f9b: 0x000c, 0x2f9c: 0x000c, 0x2f9d: 0x000c, + 0x2f9e: 0x000c, 0x2f9f: 0x000c, 0x2fa0: 0x000c, 0x2fa1: 0x000c, 0x2fa2: 0x000c, 0x2fa3: 0x000c, + 0x2fa4: 0x000c, 0x2fa5: 0x000c, 0x2fa6: 0x000c, 0x2fa7: 0x000c, + 0x2faa: 0x000c, 0x2fab: 0x000c, 0x2fac: 0x000c, 0x2fad: 0x000c, 0x2fae: 0x000c, 0x2faf: 0x000c, + 0x2fb0: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb5: 0x000c, + 0x2fb6: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, + 0x2ff6: 0x000c, 0x2ffa: 0x000c, + 0x2ffc: 0x000c, 0x2ffd: 0x000c, 0x2fff: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3000: 0x000c, 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, + 0x3007: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3050: 0x000c, 0x3051: 0x000c, + 0x3055: 0x000c, 0x3057: 0x000c, + // Block 0xc2, offset 0x3080 + 0x30b3: 0x000c, 0x30b4: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30d5: 0x000a, 0x30d6: 0x000a, 0x30d7: 0x000a, + 0x30d8: 0x000a, 0x30d9: 0x000a, 0x30da: 0x000a, 0x30db: 0x000a, 0x30dc: 0x000a, 0x30dd: 0x0004, + 0x30de: 0x0004, 0x30df: 0x0004, 0x30e0: 0x0004, 0x30e1: 0x000a, 0x30e2: 0x000a, 0x30e3: 0x000a, + 0x30e4: 0x000a, 0x30e5: 0x000a, 0x30e6: 0x000a, 0x30e7: 0x000a, 0x30e8: 0x000a, 0x30e9: 0x000a, + 0x30ea: 0x000a, 0x30eb: 0x000a, 0x30ec: 0x000a, 0x30ed: 0x000a, 0x30ee: 0x000a, 0x30ef: 0x000a, + 0x30f0: 0x000a, 0x30f1: 0x000a, + // Block 0xc4, offset 0x3100 + 0x3130: 0x000c, 0x3131: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3134: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3170: 0x000c, 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, + 0x3176: 0x000c, + // Block 0xc6, offset 0x3180 + 0x318f: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d2: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3222: 0x000a, + // Block 0xc9, offset 0x3240 + 0x325d: 0x000c, + 0x325e: 0x000c, 0x3260: 0x000b, 0x3261: 0x000b, 0x3262: 0x000b, 0x3263: 0x000b, + // Block 0xca, offset 0x3280 + 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, + 0x32b3: 0x000b, 0x32b4: 0x000b, 0x32b5: 0x000b, + 0x32b6: 0x000b, 0x32b7: 0x000b, 0x32b8: 0x000b, 0x32b9: 0x000b, 0x32ba: 0x000b, 0x32bb: 0x000c, + 0x32bc: 0x000c, 0x32bd: 0x000c, 0x32be: 0x000c, 0x32bf: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c5: 0x000c, + 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c, + 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3300: 0x000a, 0x3301: 0x000a, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000a, + // Block 0xcd, offset 0x3340 + 0x3340: 0x000a, 0x3341: 0x000a, 0x3342: 0x000a, 0x3343: 0x000a, 0x3344: 0x000a, 0x3345: 0x000a, + 0x3346: 0x000a, 0x3347: 0x000a, 0x3348: 0x000a, 0x3349: 0x000a, 0x334a: 0x000a, 0x334b: 0x000a, + 0x334c: 0x000a, 0x334d: 0x000a, 0x334e: 0x000a, 0x334f: 0x000a, 0x3350: 0x000a, 0x3351: 0x000a, + 0x3352: 0x000a, 0x3353: 0x000a, 0x3354: 0x000a, 0x3355: 0x000a, 0x3356: 0x000a, + // Block 0xce, offset 0x3380 + 0x339b: 0x000a, + // Block 0xcf, offset 0x33c0 + 0x33d5: 0x000a, + // Block 0xd0, offset 0x3400 + 0x340f: 0x000a, + // Block 0xd1, offset 0x3440 + 0x3449: 0x000a, + // Block 0xd2, offset 0x3480 + 0x3483: 0x000a, + 0x348e: 0x0002, 0x348f: 0x0002, 0x3490: 0x0002, 0x3491: 0x0002, + 0x3492: 0x0002, 0x3493: 0x0002, 0x3494: 0x0002, 0x3495: 0x0002, 0x3496: 0x0002, 0x3497: 0x0002, + 0x3498: 0x0002, 0x3499: 0x0002, 0x349a: 0x0002, 0x349b: 0x0002, 0x349c: 0x0002, 0x349d: 0x0002, + 0x349e: 0x0002, 0x349f: 0x0002, 0x34a0: 0x0002, 0x34a1: 0x0002, 0x34a2: 0x0002, 0x34a3: 0x0002, + 0x34a4: 0x0002, 0x34a5: 0x0002, 0x34a6: 0x0002, 0x34a7: 0x0002, 0x34a8: 0x0002, 0x34a9: 0x0002, + 0x34aa: 0x0002, 0x34ab: 0x0002, 0x34ac: 0x0002, 0x34ad: 0x0002, 0x34ae: 0x0002, 0x34af: 0x0002, + 0x34b0: 0x0002, 0x34b1: 0x0002, 0x34b2: 0x0002, 0x34b3: 0x0002, 0x34b4: 0x0002, 0x34b5: 0x0002, + 0x34b6: 0x0002, 0x34b7: 0x0002, 0x34b8: 0x0002, 0x34b9: 0x0002, 0x34ba: 0x0002, 0x34bb: 0x0002, + 0x34bc: 0x0002, 0x34bd: 0x0002, 0x34be: 0x0002, 0x34bf: 0x0002, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000c, 0x34c1: 0x000c, 0x34c2: 0x000c, 0x34c3: 0x000c, 0x34c4: 0x000c, 0x34c5: 0x000c, + 0x34c6: 0x000c, 0x34c7: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c, + 0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c, + 0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, 0x34d6: 0x000c, 0x34d7: 0x000c, + 0x34d8: 0x000c, 0x34d9: 0x000c, 0x34da: 0x000c, 0x34db: 0x000c, 0x34dc: 0x000c, 0x34dd: 0x000c, + 0x34de: 0x000c, 0x34df: 0x000c, 0x34e0: 0x000c, 0x34e1: 0x000c, 0x34e2: 0x000c, 0x34e3: 0x000c, + 0x34e4: 0x000c, 0x34e5: 0x000c, 0x34e6: 0x000c, 0x34e7: 0x000c, 0x34e8: 0x000c, 0x34e9: 0x000c, + 0x34ea: 0x000c, 0x34eb: 0x000c, 0x34ec: 0x000c, 0x34ed: 0x000c, 0x34ee: 0x000c, 0x34ef: 0x000c, + 0x34f0: 0x000c, 0x34f1: 0x000c, 0x34f2: 0x000c, 0x34f3: 0x000c, 0x34f4: 0x000c, 0x34f5: 0x000c, + 0x34f6: 0x000c, 0x34fb: 0x000c, + 0x34fc: 0x000c, 0x34fd: 0x000c, 0x34fe: 0x000c, 0x34ff: 0x000c, + // Block 0xd4, offset 0x3500 + 0x3500: 0x000c, 0x3501: 0x000c, 0x3502: 0x000c, 0x3503: 0x000c, 0x3504: 0x000c, 0x3505: 0x000c, + 0x3506: 0x000c, 0x3507: 0x000c, 0x3508: 0x000c, 0x3509: 0x000c, 0x350a: 0x000c, 0x350b: 0x000c, + 0x350c: 0x000c, 0x350d: 0x000c, 0x350e: 0x000c, 0x350f: 0x000c, 0x3510: 0x000c, 0x3511: 0x000c, + 0x3512: 0x000c, 0x3513: 0x000c, 0x3514: 0x000c, 0x3515: 0x000c, 0x3516: 0x000c, 0x3517: 0x000c, + 0x3518: 0x000c, 0x3519: 0x000c, 0x351a: 0x000c, 0x351b: 0x000c, 0x351c: 0x000c, 0x351d: 0x000c, + 0x351e: 0x000c, 0x351f: 0x000c, 0x3520: 0x000c, 0x3521: 0x000c, 0x3522: 0x000c, 0x3523: 0x000c, + 0x3524: 0x000c, 0x3525: 0x000c, 0x3526: 0x000c, 0x3527: 0x000c, 0x3528: 0x000c, 0x3529: 0x000c, + 0x352a: 0x000c, 0x352b: 0x000c, 0x352c: 0x000c, + 0x3535: 0x000c, + // Block 0xd5, offset 0x3540 + 0x3544: 0x000c, + 0x355b: 0x000c, 0x355c: 0x000c, 0x355d: 0x000c, + 0x355e: 0x000c, 0x355f: 0x000c, 0x3561: 0x000c, 0x3562: 0x000c, 0x3563: 0x000c, + 0x3564: 0x000c, 0x3565: 0x000c, 0x3566: 0x000c, 0x3567: 0x000c, 0x3568: 0x000c, 0x3569: 0x000c, + 0x356a: 0x000c, 0x356b: 0x000c, 0x356c: 0x000c, 0x356d: 0x000c, 0x356e: 0x000c, 0x356f: 0x000c, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000c, 0x3581: 0x000c, 0x3582: 0x000c, 0x3583: 0x000c, 0x3584: 0x000c, 0x3585: 0x000c, + 0x3586: 0x000c, 0x3588: 0x000c, 0x3589: 0x000c, 0x358a: 0x000c, 0x358b: 0x000c, + 0x358c: 0x000c, 0x358d: 0x000c, 0x358e: 0x000c, 0x358f: 0x000c, 0x3590: 0x000c, 0x3591: 0x000c, + 0x3592: 0x000c, 0x3593: 0x000c, 0x3594: 0x000c, 0x3595: 0x000c, 0x3596: 0x000c, 0x3597: 0x000c, + 0x3598: 0x000c, 0x359b: 0x000c, 0x359c: 0x000c, 0x359d: 0x000c, + 0x359e: 0x000c, 0x359f: 0x000c, 0x35a0: 0x000c, 0x35a1: 0x000c, 0x35a3: 0x000c, + 0x35a4: 0x000c, 0x35a6: 0x000c, 0x35a7: 0x000c, 0x35a8: 0x000c, 0x35a9: 0x000c, + 0x35aa: 0x000c, + // Block 0xd7, offset 0x35c0 + 0x35ec: 0x000c, 0x35ed: 0x000c, 0x35ee: 0x000c, 0x35ef: 0x000c, + 0x35ff: 0x0004, + // Block 0xd8, offset 0x3600 + 0x3600: 0x0001, 0x3601: 0x0001, 0x3602: 0x0001, 0x3603: 0x0001, 0x3604: 0x0001, 0x3605: 0x0001, + 0x3606: 0x0001, 0x3607: 0x0001, 0x3608: 0x0001, 0x3609: 0x0001, 0x360a: 0x0001, 0x360b: 0x0001, + 0x360c: 0x0001, 0x360d: 0x0001, 0x360e: 0x0001, 0x360f: 0x0001, 0x3610: 0x000c, 0x3611: 0x000c, + 0x3612: 0x000c, 0x3613: 0x000c, 0x3614: 0x000c, 0x3615: 0x000c, 0x3616: 0x000c, 0x3617: 0x0001, + 0x3618: 0x0001, 0x3619: 0x0001, 0x361a: 0x0001, 0x361b: 0x0001, 0x361c: 0x0001, 0x361d: 0x0001, + 0x361e: 0x0001, 0x361f: 0x0001, 0x3620: 0x0001, 0x3621: 0x0001, 0x3622: 0x0001, 0x3623: 0x0001, + 0x3624: 0x0001, 0x3625: 0x0001, 0x3626: 0x0001, 0x3627: 0x0001, 0x3628: 0x0001, 0x3629: 0x0001, + 0x362a: 0x0001, 0x362b: 0x0001, 0x362c: 0x0001, 0x362d: 0x0001, 0x362e: 0x0001, 0x362f: 0x0001, + 0x3630: 0x0001, 0x3631: 0x0001, 0x3632: 0x0001, 0x3633: 0x0001, 0x3634: 0x0001, 0x3635: 0x0001, + 0x3636: 0x0001, 0x3637: 0x0001, 0x3638: 0x0001, 0x3639: 0x0001, 0x363a: 0x0001, 0x363b: 0x0001, + 0x363c: 0x0001, 0x363d: 0x0001, 0x363e: 0x0001, 0x363f: 0x0001, + // Block 0xd9, offset 0x3640 + 0x3640: 0x0001, 0x3641: 0x0001, 0x3642: 0x0001, 0x3643: 0x0001, 0x3644: 0x000c, 0x3645: 0x000c, + 0x3646: 0x000c, 0x3647: 0x000c, 0x3648: 0x000c, 0x3649: 0x000c, 0x364a: 0x000c, 0x364b: 0x0001, + 0x364c: 0x0001, 0x364d: 0x0001, 0x364e: 0x0001, 0x364f: 0x0001, 0x3650: 0x0001, 0x3651: 0x0001, + 0x3652: 0x0001, 0x3653: 0x0001, 0x3654: 0x0001, 0x3655: 0x0001, 0x3656: 0x0001, 0x3657: 0x0001, + 0x3658: 0x0001, 0x3659: 0x0001, 0x365a: 0x0001, 0x365b: 0x0001, 0x365c: 0x0001, 0x365d: 0x0001, + 0x365e: 0x0001, 0x365f: 0x0001, 0x3660: 0x0001, 0x3661: 0x0001, 0x3662: 0x0001, 0x3663: 0x0001, + 0x3664: 0x0001, 0x3665: 0x0001, 0x3666: 0x0001, 0x3667: 0x0001, 0x3668: 0x0001, 0x3669: 0x0001, + 0x366a: 0x0001, 0x366b: 0x0001, 0x366c: 0x0001, 0x366d: 0x0001, 0x366e: 0x0001, 0x366f: 0x0001, + 0x3670: 0x0001, 0x3671: 0x0001, 0x3672: 0x0001, 0x3673: 0x0001, 0x3674: 0x0001, 0x3675: 0x0001, + 0x3676: 0x0001, 0x3677: 0x0001, 0x3678: 0x0001, 0x3679: 0x0001, 0x367a: 0x0001, 0x367b: 0x0001, + 0x367c: 0x0001, 0x367d: 0x0001, 0x367e: 0x0001, 0x367f: 0x0001, + // Block 0xda, offset 0x3680 + 0x3680: 0x000d, 0x3681: 0x000d, 0x3682: 0x000d, 0x3683: 0x000d, 0x3684: 0x000d, 0x3685: 0x000d, + 0x3686: 0x000d, 0x3687: 0x000d, 0x3688: 0x000d, 0x3689: 0x000d, 0x368a: 0x000d, 0x368b: 0x000d, + 0x368c: 0x000d, 0x368d: 0x000d, 0x368e: 0x000d, 0x368f: 0x000d, 0x3690: 0x0001, 0x3691: 0x0001, + 0x3692: 0x0001, 0x3693: 0x0001, 0x3694: 0x0001, 0x3695: 0x0001, 0x3696: 0x0001, 0x3697: 0x0001, + 0x3698: 0x0001, 0x3699: 0x0001, 0x369a: 0x0001, 0x369b: 0x0001, 0x369c: 0x0001, 0x369d: 0x0001, + 0x369e: 0x0001, 0x369f: 0x0001, 0x36a0: 0x0001, 0x36a1: 0x0001, 0x36a2: 0x0001, 0x36a3: 0x0001, + 0x36a4: 0x0001, 0x36a5: 0x0001, 0x36a6: 0x0001, 0x36a7: 0x0001, 0x36a8: 0x0001, 0x36a9: 0x0001, + 0x36aa: 0x0001, 0x36ab: 0x0001, 0x36ac: 0x0001, 0x36ad: 0x0001, 0x36ae: 0x0001, 0x36af: 0x0001, + 0x36b0: 0x0001, 0x36b1: 0x0001, 0x36b2: 0x0001, 0x36b3: 0x0001, 0x36b4: 0x0001, 0x36b5: 0x0001, + 0x36b6: 0x0001, 0x36b7: 0x0001, 0x36b8: 0x0001, 0x36b9: 0x0001, 0x36ba: 0x0001, 0x36bb: 0x0001, + 0x36bc: 0x0001, 0x36bd: 0x0001, 0x36be: 0x0001, 0x36bf: 0x0001, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x000d, 0x36c1: 0x000d, 0x36c2: 0x000d, 0x36c3: 0x000d, 0x36c4: 0x000d, 0x36c5: 0x000d, + 0x36c6: 0x000d, 0x36c7: 0x000d, 0x36c8: 0x000d, 0x36c9: 0x000d, 0x36ca: 0x000d, 0x36cb: 0x000d, + 0x36cc: 0x000d, 0x36cd: 0x000d, 0x36ce: 0x000d, 0x36cf: 0x000d, 0x36d0: 0x000d, 0x36d1: 0x000d, + 0x36d2: 0x000d, 0x36d3: 0x000d, 0x36d4: 0x000d, 0x36d5: 0x000d, 0x36d6: 0x000d, 0x36d7: 0x000d, + 0x36d8: 0x000d, 0x36d9: 0x000d, 0x36da: 0x000d, 0x36db: 0x000d, 0x36dc: 0x000d, 0x36dd: 0x000d, + 0x36de: 0x000d, 0x36df: 0x000d, 0x36e0: 0x000d, 0x36e1: 0x000d, 0x36e2: 0x000d, 0x36e3: 0x000d, + 0x36e4: 0x000d, 0x36e5: 0x000d, 0x36e6: 0x000d, 0x36e7: 0x000d, 0x36e8: 0x000d, 0x36e9: 0x000d, + 0x36ea: 0x000d, 0x36eb: 0x000d, 0x36ec: 0x000d, 0x36ed: 0x000d, 0x36ee: 0x000d, 0x36ef: 0x000d, + 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000d, 0x36f3: 0x000d, 0x36f4: 0x000d, 0x36f5: 0x000d, + 0x36f6: 0x000d, 0x36f7: 0x000d, 0x36f8: 0x000d, 0x36f9: 0x000d, 0x36fa: 0x000d, 0x36fb: 0x000d, + 0x36fc: 0x000d, 0x36fd: 0x000d, 0x36fe: 0x000d, 0x36ff: 0x000d, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, + 0x3706: 0x000a, 0x3707: 0x000a, 0x3708: 0x000a, 0x3709: 0x000a, 0x370a: 0x000a, 0x370b: 0x000a, + 0x370c: 0x000a, 0x370d: 0x000a, 0x370e: 0x000a, 0x370f: 0x000a, 0x3710: 0x000a, 0x3711: 0x000a, + 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, + 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, + 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, + 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, + 0x372a: 0x000a, 0x372b: 0x000a, + 0x3730: 0x000a, 0x3731: 0x000a, 0x3732: 0x000a, 0x3733: 0x000a, 0x3734: 0x000a, 0x3735: 0x000a, + 0x3736: 0x000a, 0x3737: 0x000a, 0x3738: 0x000a, 0x3739: 0x000a, 0x373a: 0x000a, 0x373b: 0x000a, + 0x373c: 0x000a, 0x373d: 0x000a, 0x373e: 0x000a, 0x373f: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, + 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, + 0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, 0x3751: 0x000a, + 0x3752: 0x000a, 0x3753: 0x000a, + 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, + 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, + 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, + 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, + 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a, + 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a, 0x377f: 0x000a, + // Block 0xde, offset 0x3780 + 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, + 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, + 0x378c: 0x000a, 0x378d: 0x000a, 0x378e: 0x000a, 0x378f: 0x000a, 0x3791: 0x000a, + 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, + 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a, + 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a, + 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a, + 0x37aa: 0x000a, 0x37ab: 0x000a, 0x37ac: 0x000a, 0x37ad: 0x000a, 0x37ae: 0x000a, 0x37af: 0x000a, + 0x37b0: 0x000a, 0x37b1: 0x000a, 0x37b2: 0x000a, 0x37b3: 0x000a, 0x37b4: 0x000a, 0x37b5: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x0002, 0x37c1: 0x0002, 0x37c2: 0x0002, 0x37c3: 0x0002, 0x37c4: 0x0002, 0x37c5: 0x0002, + 0x37c6: 0x0002, 0x37c7: 0x0002, 0x37c8: 0x0002, 0x37c9: 0x0002, 0x37ca: 0x0002, 0x37cb: 0x000a, + 0x37cc: 0x000a, + 0x37ef: 0x000a, + // Block 0xe0, offset 0x3800 + 0x382a: 0x000a, 0x382b: 0x000a, 0x382c: 0x000a, + // Block 0xe1, offset 0x3840 + 0x3860: 0x000a, 0x3861: 0x000a, 0x3862: 0x000a, 0x3863: 0x000a, + 0x3864: 0x000a, 0x3865: 0x000a, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, + 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, + 0x388c: 0x000a, 0x388d: 0x000a, 0x388e: 0x000a, 0x388f: 0x000a, 0x3890: 0x000a, 0x3891: 0x000a, + 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, + 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, + 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, + 0x38aa: 0x000a, 0x38ab: 0x000a, 0x38ac: 0x000a, + 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, + 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, + 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, + 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, + 0x38d2: 0x000a, 0x38d3: 0x000a, 0x38d4: 0x000a, 0x38d5: 0x000a, 0x38d6: 0x000a, 0x38d7: 0x000a, + 0x38d8: 0x000a, + 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, + 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, + 0x38ea: 0x000a, 0x38eb: 0x000a, + // Block 0xe4, offset 0x3900 + 0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, + 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, + 0x3910: 0x000a, 0x3911: 0x000a, + 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, + 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, + 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, 0x3923: 0x000a, + 0x3924: 0x000a, 0x3925: 0x000a, 0x3926: 0x000a, 0x3927: 0x000a, 0x3928: 0x000a, 0x3929: 0x000a, + 0x392a: 0x000a, 0x392b: 0x000a, 0x392c: 0x000a, 0x392d: 0x000a, 0x392e: 0x000a, 0x392f: 0x000a, + 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, + 0x3936: 0x000a, 0x3937: 0x000a, 0x3938: 0x000a, 0x3939: 0x000a, 0x393a: 0x000a, 0x393b: 0x000a, + 0x393c: 0x000a, 0x393d: 0x000a, 0x393e: 0x000a, 0x393f: 0x000a, + // Block 0xe5, offset 0x3940 + 0x3940: 0x000a, 0x3941: 0x000a, 0x3942: 0x000a, 0x3943: 0x000a, 0x3944: 0x000a, 0x3945: 0x000a, + 0x3946: 0x000a, 0x3947: 0x000a, + 0x3950: 0x000a, 0x3951: 0x000a, + 0x3952: 0x000a, 0x3953: 0x000a, 0x3954: 0x000a, 0x3955: 0x000a, 0x3956: 0x000a, 0x3957: 0x000a, + 0x3958: 0x000a, 0x3959: 0x000a, + 0x3960: 0x000a, 0x3961: 0x000a, 0x3962: 0x000a, 0x3963: 0x000a, + 0x3964: 0x000a, 0x3965: 0x000a, 0x3966: 0x000a, 0x3967: 0x000a, 0x3968: 0x000a, 0x3969: 0x000a, + 0x396a: 0x000a, 0x396b: 0x000a, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x000a, + 0x3970: 0x000a, 0x3971: 0x000a, 0x3972: 0x000a, 0x3973: 0x000a, 0x3974: 0x000a, 0x3975: 0x000a, + 0x3976: 0x000a, 0x3977: 0x000a, 0x3978: 0x000a, 0x3979: 0x000a, 0x397a: 0x000a, 0x397b: 0x000a, + 0x397c: 0x000a, 0x397d: 0x000a, 0x397e: 0x000a, 0x397f: 0x000a, + // Block 0xe6, offset 0x3980 + 0x3980: 0x000a, 0x3981: 0x000a, 0x3982: 0x000a, 0x3983: 0x000a, 0x3984: 0x000a, 0x3985: 0x000a, + 0x3986: 0x000a, 0x3987: 0x000a, + 0x3990: 0x000a, 0x3991: 0x000a, + 0x3992: 0x000a, 0x3993: 0x000a, 0x3994: 0x000a, 0x3995: 0x000a, 0x3996: 0x000a, 0x3997: 0x000a, + 0x3998: 0x000a, 0x3999: 0x000a, 0x399a: 0x000a, 0x399b: 0x000a, 0x399c: 0x000a, 0x399d: 0x000a, + 0x399e: 0x000a, 0x399f: 0x000a, 0x39a0: 0x000a, 0x39a1: 0x000a, 0x39a2: 0x000a, 0x39a3: 0x000a, + 0x39a4: 0x000a, 0x39a5: 0x000a, 0x39a6: 0x000a, 0x39a7: 0x000a, 0x39a8: 0x000a, 0x39a9: 0x000a, + 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x000a, 0x39c1: 0x000a, 0x39c2: 0x000a, 0x39c3: 0x000a, 0x39c4: 0x000a, 0x39c5: 0x000a, + 0x39c6: 0x000a, 0x39c7: 0x000a, 0x39c8: 0x000a, 0x39c9: 0x000a, 0x39ca: 0x000a, 0x39cb: 0x000a, + 0x39cd: 0x000a, 0x39ce: 0x000a, 0x39cf: 0x000a, 0x39d0: 0x000a, 0x39d1: 0x000a, + 0x39d2: 0x000a, 0x39d3: 0x000a, 0x39d4: 0x000a, 0x39d5: 0x000a, 0x39d6: 0x000a, 0x39d7: 0x000a, + 0x39d8: 0x000a, 0x39d9: 0x000a, 0x39da: 0x000a, 0x39db: 0x000a, 0x39dc: 0x000a, 0x39dd: 0x000a, + 0x39de: 0x000a, 0x39df: 0x000a, 0x39e0: 0x000a, 0x39e1: 0x000a, 0x39e2: 0x000a, 0x39e3: 0x000a, + 0x39e4: 0x000a, 0x39e5: 0x000a, 0x39e6: 0x000a, 0x39e7: 0x000a, 0x39e8: 0x000a, 0x39e9: 0x000a, + 0x39ea: 0x000a, 0x39eb: 0x000a, 0x39ec: 0x000a, 0x39ed: 0x000a, 0x39ee: 0x000a, 0x39ef: 0x000a, + 0x39f0: 0x000a, 0x39f1: 0x000a, 0x39f2: 0x000a, 0x39f3: 0x000a, 0x39f4: 0x000a, 0x39f5: 0x000a, + 0x39f6: 0x000a, 0x39f7: 0x000a, 0x39f8: 0x000a, 0x39f9: 0x000a, 0x39fa: 0x000a, 0x39fb: 0x000a, + 0x39fc: 0x000a, 0x39fd: 0x000a, 0x39fe: 0x000a, 0x39ff: 0x000a, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x000a, 0x3a01: 0x000a, 0x3a02: 0x000a, 0x3a03: 0x000a, 0x3a04: 0x000a, 0x3a05: 0x000a, + 0x3a06: 0x000a, 0x3a07: 0x000a, 0x3a08: 0x000a, 0x3a09: 0x000a, 0x3a0a: 0x000a, 0x3a0b: 0x000a, + 0x3a0c: 0x000a, 0x3a0d: 0x000a, 0x3a0e: 0x000a, 0x3a0f: 0x000a, 0x3a10: 0x000a, 0x3a11: 0x000a, + 0x3a12: 0x000a, 0x3a13: 0x000a, 0x3a14: 0x000a, 0x3a15: 0x000a, 0x3a16: 0x000a, 0x3a17: 0x000a, + 0x3a18: 0x000a, 0x3a19: 0x000a, 0x3a1a: 0x000a, 0x3a1b: 0x000a, 0x3a1c: 0x000a, 0x3a1d: 0x000a, + 0x3a1e: 0x000a, 0x3a1f: 0x000a, 0x3a20: 0x000a, 0x3a21: 0x000a, 0x3a22: 0x000a, 0x3a23: 0x000a, + 0x3a24: 0x000a, 0x3a25: 0x000a, 0x3a26: 0x000a, 0x3a27: 0x000a, 0x3a28: 0x000a, 0x3a29: 0x000a, + 0x3a2a: 0x000a, 0x3a2b: 0x000a, 0x3a2c: 0x000a, 0x3a2d: 0x000a, 0x3a2e: 0x000a, 0x3a2f: 0x000a, + 0x3a30: 0x000a, 0x3a31: 0x000a, 0x3a33: 0x000a, 0x3a34: 0x000a, 0x3a35: 0x000a, + 0x3a36: 0x000a, 0x3a3a: 0x000a, 0x3a3b: 0x000a, + 0x3a3c: 0x000a, 0x3a3d: 0x000a, 0x3a3e: 0x000a, 0x3a3f: 0x000a, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x000a, 0x3a41: 0x000a, 0x3a42: 0x000a, 0x3a43: 0x000a, 0x3a44: 0x000a, 0x3a45: 0x000a, + 0x3a46: 0x000a, 0x3a47: 0x000a, 0x3a48: 0x000a, 0x3a49: 0x000a, 0x3a4a: 0x000a, 0x3a4b: 0x000a, + 0x3a4c: 0x000a, 0x3a4d: 0x000a, 0x3a4e: 0x000a, 0x3a4f: 0x000a, 0x3a50: 0x000a, 0x3a51: 0x000a, + 0x3a52: 0x000a, 0x3a53: 0x000a, 0x3a54: 0x000a, 0x3a55: 0x000a, 0x3a56: 0x000a, 0x3a57: 0x000a, + 0x3a58: 0x000a, 0x3a59: 0x000a, 0x3a5a: 0x000a, 0x3a5b: 0x000a, 0x3a5c: 0x000a, 0x3a5d: 0x000a, + 0x3a5e: 0x000a, 0x3a5f: 0x000a, 0x3a60: 0x000a, 0x3a61: 0x000a, 0x3a62: 0x000a, + 0x3a65: 0x000a, 0x3a66: 0x000a, 0x3a67: 0x000a, 0x3a68: 0x000a, 0x3a69: 0x000a, + 0x3a6a: 0x000a, 0x3a6e: 0x000a, 0x3a6f: 0x000a, + 0x3a70: 0x000a, 0x3a71: 0x000a, 0x3a72: 0x000a, 0x3a73: 0x000a, 0x3a74: 0x000a, 0x3a75: 0x000a, + 0x3a76: 0x000a, 0x3a77: 0x000a, 0x3a78: 0x000a, 0x3a79: 0x000a, 0x3a7a: 0x000a, 0x3a7b: 0x000a, + 0x3a7c: 0x000a, 0x3a7d: 0x000a, 0x3a7e: 0x000a, 0x3a7f: 0x000a, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x000a, 0x3a81: 0x000a, 0x3a82: 0x000a, 0x3a83: 0x000a, 0x3a84: 0x000a, 0x3a85: 0x000a, + 0x3a86: 0x000a, 0x3a87: 0x000a, 0x3a88: 0x000a, 0x3a89: 0x000a, 0x3a8a: 0x000a, + 0x3a8d: 0x000a, 0x3a8e: 0x000a, 0x3a8f: 0x000a, 0x3a90: 0x000a, 0x3a91: 0x000a, + 0x3a92: 0x000a, 0x3a93: 0x000a, 0x3a94: 0x000a, 0x3a95: 0x000a, 0x3a96: 0x000a, 0x3a97: 0x000a, + 0x3a98: 0x000a, 0x3a99: 0x000a, 0x3a9a: 0x000a, 0x3a9b: 0x000a, 0x3a9c: 0x000a, 0x3a9d: 0x000a, + 0x3a9e: 0x000a, 0x3a9f: 0x000a, 0x3aa0: 0x000a, 0x3aa1: 0x000a, 0x3aa2: 0x000a, 0x3aa3: 0x000a, + 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x000a, 0x3aa8: 0x000a, 0x3aa9: 0x000a, + 0x3aaa: 0x000a, 0x3aab: 0x000a, 0x3aac: 0x000a, 0x3aad: 0x000a, 0x3aae: 0x000a, 0x3aaf: 0x000a, + 0x3ab0: 0x000a, 0x3ab1: 0x000a, 0x3ab2: 0x000a, 0x3ab3: 0x000a, 0x3ab4: 0x000a, 0x3ab5: 0x000a, + 0x3ab6: 0x000a, 0x3ab7: 0x000a, 0x3ab8: 0x000a, 0x3ab9: 0x000a, 0x3aba: 0x000a, 0x3abb: 0x000a, + 0x3abc: 0x000a, 0x3abd: 0x000a, 0x3abe: 0x000a, 0x3abf: 0x000a, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000a, 0x3ac1: 0x000a, 0x3ac2: 0x000a, 0x3ac3: 0x000a, 0x3ac4: 0x000a, 0x3ac5: 0x000a, + 0x3ac6: 0x000a, 0x3ac7: 0x000a, 0x3ac8: 0x000a, 0x3ac9: 0x000a, 0x3aca: 0x000a, 0x3acb: 0x000a, + 0x3acc: 0x000a, 0x3acd: 0x000a, 0x3ace: 0x000a, 0x3acf: 0x000a, 0x3ad0: 0x000a, 0x3ad1: 0x000a, + 0x3ad2: 0x000a, 0x3ad3: 0x000a, + 0x3ae0: 0x000a, 0x3ae1: 0x000a, 0x3ae2: 0x000a, 0x3ae3: 0x000a, + 0x3ae4: 0x000a, 0x3ae5: 0x000a, 0x3ae6: 0x000a, 0x3ae7: 0x000a, 0x3ae8: 0x000a, 0x3ae9: 0x000a, + 0x3aea: 0x000a, 0x3aeb: 0x000a, 0x3aec: 0x000a, 0x3aed: 0x000a, + 0x3af0: 0x000a, 0x3af1: 0x000a, 0x3af2: 0x000a, 0x3af3: 0x000a, + 0x3af8: 0x000a, 0x3af9: 0x000a, 0x3afa: 0x000a, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x000a, 0x3b01: 0x000a, 0x3b02: 0x000a, + 0x3b10: 0x000a, 0x3b11: 0x000a, + 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, + // Block 0xed, offset 0x3b40 + 0x3b7e: 0x000b, 0x3b7f: 0x000b, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x000b, 0x3b81: 0x000b, 0x3b82: 0x000b, 0x3b83: 0x000b, 0x3b84: 0x000b, 0x3b85: 0x000b, + 0x3b86: 0x000b, 0x3b87: 0x000b, 0x3b88: 0x000b, 0x3b89: 0x000b, 0x3b8a: 0x000b, 0x3b8b: 0x000b, + 0x3b8c: 0x000b, 0x3b8d: 0x000b, 0x3b8e: 0x000b, 0x3b8f: 0x000b, 0x3b90: 0x000b, 0x3b91: 0x000b, + 0x3b92: 0x000b, 0x3b93: 0x000b, 0x3b94: 0x000b, 0x3b95: 0x000b, 0x3b96: 0x000b, 0x3b97: 0x000b, + 0x3b98: 0x000b, 0x3b99: 0x000b, 0x3b9a: 0x000b, 0x3b9b: 0x000b, 0x3b9c: 0x000b, 0x3b9d: 0x000b, + 0x3b9e: 0x000b, 0x3b9f: 0x000b, 0x3ba0: 0x000b, 0x3ba1: 0x000b, 0x3ba2: 0x000b, 0x3ba3: 0x000b, + 0x3ba4: 0x000b, 0x3ba5: 0x000b, 0x3ba6: 0x000b, 0x3ba7: 0x000b, 0x3ba8: 0x000b, 0x3ba9: 0x000b, + 0x3baa: 0x000b, 0x3bab: 0x000b, 0x3bac: 0x000b, 0x3bad: 0x000b, 0x3bae: 0x000b, 0x3baf: 0x000b, + 0x3bb0: 0x000b, 0x3bb1: 0x000b, 0x3bb2: 0x000b, 0x3bb3: 0x000b, 0x3bb4: 0x000b, 0x3bb5: 0x000b, + 0x3bb6: 0x000b, 0x3bb7: 0x000b, 0x3bb8: 0x000b, 0x3bb9: 0x000b, 0x3bba: 0x000b, 0x3bbb: 0x000b, + 0x3bbc: 0x000b, 0x3bbd: 0x000b, 0x3bbe: 0x000b, 0x3bbf: 0x000b, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x000c, 0x3bc1: 0x000c, 0x3bc2: 0x000c, 0x3bc3: 0x000c, 0x3bc4: 0x000c, 0x3bc5: 0x000c, + 0x3bc6: 0x000c, 0x3bc7: 0x000c, 0x3bc8: 0x000c, 0x3bc9: 0x000c, 0x3bca: 0x000c, 0x3bcb: 0x000c, + 0x3bcc: 0x000c, 0x3bcd: 0x000c, 0x3bce: 0x000c, 0x3bcf: 0x000c, 0x3bd0: 0x000c, 0x3bd1: 0x000c, + 0x3bd2: 0x000c, 0x3bd3: 0x000c, 0x3bd4: 0x000c, 0x3bd5: 0x000c, 0x3bd6: 0x000c, 0x3bd7: 0x000c, + 0x3bd8: 0x000c, 0x3bd9: 0x000c, 0x3bda: 0x000c, 0x3bdb: 0x000c, 0x3bdc: 0x000c, 0x3bdd: 0x000c, + 0x3bde: 0x000c, 0x3bdf: 0x000c, 0x3be0: 0x000c, 0x3be1: 0x000c, 0x3be2: 0x000c, 0x3be3: 0x000c, + 0x3be4: 0x000c, 0x3be5: 0x000c, 0x3be6: 0x000c, 0x3be7: 0x000c, 0x3be8: 0x000c, 0x3be9: 0x000c, + 0x3bea: 0x000c, 0x3beb: 0x000c, 0x3bec: 0x000c, 0x3bed: 0x000c, 0x3bee: 0x000c, 0x3bef: 0x000c, + 0x3bf0: 0x000b, 0x3bf1: 0x000b, 0x3bf2: 0x000b, 0x3bf3: 0x000b, 0x3bf4: 0x000b, 0x3bf5: 0x000b, + 0x3bf6: 0x000b, 0x3bf7: 0x000b, 0x3bf8: 0x000b, 0x3bf9: 0x000b, 0x3bfa: 0x000b, 0x3bfb: 0x000b, + 0x3bfc: 0x000b, 0x3bfd: 0x000b, 0x3bfe: 0x000b, 0x3bff: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, + 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x54, + 0x1b3: 0x64, 0x1b5: 0x65, 0x1b7: 0x66, + 0x1b8: 0x67, 0x1b9: 0x68, 0x1ba: 0x69, 0x1bb: 0x6a, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6b, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6c, 0x1c2: 0x6d, 0x1c3: 0x6e, 0x1c7: 0x6f, + 0x1c8: 0x70, 0x1c9: 0x71, 0x1ca: 0x72, 0x1cb: 0x73, 0x1cd: 0x74, 0x1cf: 0x75, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x76, 0x253: 0x77, + 0x258: 0x78, 0x259: 0x79, 0x25a: 0x7a, 0x25b: 0x7b, 0x25c: 0x7c, 0x25e: 0x7d, + 0x260: 0x7e, 0x261: 0x7f, 0x263: 0x80, 0x264: 0x81, 0x265: 0x82, 0x266: 0x83, 0x267: 0x84, + 0x268: 0x85, 0x269: 0x86, 0x26a: 0x87, 0x26b: 0x88, 0x26f: 0x89, + // Block 0xa, offset 0x280 + 0x2ac: 0x8a, 0x2ad: 0x8b, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8c, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8d, + 0x2b8: 0x8e, 0x2b9: 0x8f, 0x2ba: 0x0e, 0x2bb: 0x90, 0x2bc: 0x91, 0x2bd: 0x92, 0x2bf: 0x93, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x94, 0x2c5: 0x54, 0x2c6: 0x95, 0x2c7: 0x96, + 0x2cb: 0x97, 0x2cd: 0x98, + 0x2e0: 0x99, 0x2e1: 0x99, 0x2e2: 0x99, 0x2e3: 0x99, 0x2e4: 0x9a, 0x2e5: 0x99, 0x2e6: 0x99, 0x2e7: 0x99, + 0x2e8: 0x9b, 0x2e9: 0x99, 0x2ea: 0x99, 0x2eb: 0x9c, 0x2ec: 0x9d, 0x2ed: 0x99, 0x2ee: 0x99, 0x2ef: 0x99, + 0x2f0: 0x99, 0x2f1: 0x99, 0x2f2: 0x99, 0x2f3: 0x99, 0x2f4: 0x9e, 0x2f5: 0x99, 0x2f6: 0x99, 0x2f7: 0x99, + 0x2f8: 0x99, 0x2f9: 0x9f, 0x2fa: 0x99, 0x2fb: 0x99, 0x2fc: 0xa0, 0x2fd: 0xa1, 0x2fe: 0x99, 0x2ff: 0x99, + // Block 0xc, offset 0x300 + 0x300: 0xa2, 0x301: 0xa3, 0x302: 0xa4, 0x304: 0xa5, 0x305: 0xa6, 0x306: 0xa7, 0x307: 0xa8, + 0x308: 0xa9, 0x30b: 0xaa, 0x30c: 0x26, 0x30d: 0xab, + 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, + 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, + 0x320: 0xb6, 0x327: 0xb7, + 0x328: 0xb8, 0x329: 0xb9, 0x32a: 0xba, + 0x330: 0xbb, 0x332: 0xbc, 0x334: 0xbd, 0x335: 0xbe, 0x336: 0xbf, + 0x33b: 0xc0, 0x33f: 0xc1, + // Block 0xd, offset 0x340 + 0x36b: 0xc2, 0x36c: 0xc3, + 0x37d: 0xc4, 0x37e: 0xc5, 0x37f: 0xc6, + // Block 0xe, offset 0x380 + 0x3b2: 0xc7, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xc8, 0x3c6: 0xc9, + 0x3c8: 0x54, 0x3c9: 0xca, 0x3cc: 0x54, 0x3cd: 0xcb, + 0x3db: 0xcc, 0x3dc: 0xcd, 0x3dd: 0xce, 0x3de: 0xcf, 0x3df: 0xd0, + 0x3e8: 0xd1, 0x3e9: 0xd2, 0x3ea: 0xd3, + // Block 0x10, offset 0x400 + 0x400: 0xd4, 0x404: 0xc3, + 0x40b: 0xd5, + 0x420: 0x99, 0x421: 0x99, 0x422: 0x99, 0x423: 0xd6, 0x424: 0x99, 0x425: 0xd7, 0x426: 0x99, 0x427: 0x99, + 0x428: 0x99, 0x429: 0x99, 0x42a: 0x99, 0x42b: 0x99, 0x42c: 0x99, 0x42d: 0x99, 0x42e: 0x99, 0x42f: 0x99, + 0x430: 0x99, 0x431: 0xa0, 0x432: 0x0e, 0x433: 0x99, 0x434: 0x0e, 0x435: 0xd8, 0x436: 0x99, 0x437: 0x99, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xd9, 0x43c: 0x99, 0x43d: 0x99, 0x43e: 0x99, 0x43f: 0x99, + // Block 0x11, offset 0x440 + 0x440: 0xda, 0x441: 0x54, 0x442: 0xdb, 0x443: 0xdc, 0x444: 0xdd, 0x445: 0xde, + 0x449: 0xdf, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xe0, 0x45c: 0x54, 0x45d: 0x6a, 0x45e: 0x54, 0x45f: 0xe1, + 0x460: 0xe2, 0x461: 0xe3, 0x462: 0xe4, 0x464: 0xe5, 0x465: 0xe6, 0x466: 0xe7, 0x467: 0xe8, + 0x468: 0x54, 0x469: 0xe9, 0x46a: 0xea, + 0x47f: 0xeb, + // Block 0x12, offset 0x480 + 0x4bf: 0xeb, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xec, 0x541: 0xec, 0x542: 0xec, 0x543: 0xec, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xed, + 0x548: 0xec, 0x549: 0xec, 0x54a: 0xec, 0x54b: 0xec, 0x54c: 0xec, 0x54d: 0xec, 0x54e: 0xec, 0x54f: 0xec, + 0x550: 0xec, 0x551: 0xec, 0x552: 0xec, 0x553: 0xec, 0x554: 0xec, 0x555: 0xec, 0x556: 0xec, 0x557: 0xec, + 0x558: 0xec, 0x559: 0xec, 0x55a: 0xec, 0x55b: 0xec, 0x55c: 0xec, 0x55d: 0xec, 0x55e: 0xec, 0x55f: 0xec, + 0x560: 0xec, 0x561: 0xec, 0x562: 0xec, 0x563: 0xec, 0x564: 0xec, 0x565: 0xec, 0x566: 0xec, 0x567: 0xec, + 0x568: 0xec, 0x569: 0xec, 0x56a: 0xec, 0x56b: 0xec, 0x56c: 0xec, 0x56d: 0xec, 0x56e: 0xec, 0x56f: 0xec, + 0x570: 0xec, 0x571: 0xec, 0x572: 0xec, 0x573: 0xec, 0x574: 0xec, 0x575: 0xec, 0x576: 0xec, 0x577: 0xec, + 0x578: 0xec, 0x579: 0xec, 0x57a: 0xec, 0x57b: 0xec, 0x57c: 0xec, 0x57d: 0xec, 0x57e: 0xec, 0x57f: 0xec, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 16952 bytes (16KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go new file mode 100644 index 0000000..a713757 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go @@ -0,0 +1,1955 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.16 && !go1.21 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "13.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 17408 bytes (17.00 KiB). Checksum: df85fcbfe9b8377f. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 248 blocks, 15872 entries, 15872 bytes +// The third block is the zero block. +var bidiValues = [15872]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x895: 0x000c, 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa81: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaca: 0x000c, + 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, + // Block 0x2c, offset 0xb00 + 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, + 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, + 0xb3f: 0x0004, + // Block 0x2d, offset 0xb40 + 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, + 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, + // Block 0x2e, offset 0xb80 + 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, + 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, + 0xbbc: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, + 0xbcc: 0x000c, 0xbcd: 0x000c, + // Block 0x30, offset 0xc00 + 0xc18: 0x000c, 0xc19: 0x000c, + 0xc35: 0x000c, + 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, + 0xc3c: 0x003a, 0xc3d: 0x002a, + // Block 0x31, offset 0xc40 + 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, + // Block 0x32, offset 0xc80 + 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, + 0xc86: 0x000c, 0xc87: 0x000c, + 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, + 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, + 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, + 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, + 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, + 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, + 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, + 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, + 0xcbc: 0x000c, + // Block 0x33, offset 0xcc0 + 0xcc6: 0x000c, + // Block 0x34, offset 0xd00 + 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, + 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, + 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, + 0xd3d: 0x000c, 0xd3e: 0x000c, + // Block 0x35, offset 0xd40 + 0xd58: 0x000c, 0xd59: 0x000c, + 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, + 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, + // Block 0x36, offset 0xd80 + 0xd82: 0x000c, 0xd85: 0x000c, + 0xd86: 0x000c, + 0xd8d: 0x000c, + 0xd9d: 0x000c, + // Block 0x37, offset 0xdc0 + 0xddd: 0x000c, + 0xdde: 0x000c, 0xddf: 0x000c, + // Block 0x38, offset 0xe00 + 0xe10: 0x000a, 0xe11: 0x000a, + 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, + 0xe18: 0x000a, 0xe19: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, + // Block 0x3a, offset 0xe80 + 0xe80: 0x0009, + 0xe9b: 0x007a, 0xe9c: 0x006a, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, 0xef4: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf12: 0x000c, 0xf13: 0x000c, + 0xf32: 0x000c, 0xf33: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf74: 0x000c, 0xf75: 0x000c, + 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, + 0xf7c: 0x000c, 0xf7d: 0x000c, + // Block 0x3e, offset 0xf80 + 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, + 0xf92: 0x000c, 0xf93: 0x000c, + 0xf9b: 0x0004, 0xf9d: 0x000c, + 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, + 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, + 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, + 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, + // Block 0x40, offset 0x1000 + 0x1005: 0x000c, + 0x1006: 0x000c, + 0x1029: 0x000c, + // Block 0x41, offset 0x1040 + 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, + 0x1067: 0x000c, 0x1068: 0x000c, + 0x1072: 0x000c, + 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, + // Block 0x42, offset 0x1080 + 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, + 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, + 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, + 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, + 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, + 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, + // Block 0x44, offset 0x1100 + 0x1117: 0x000c, + 0x1118: 0x000c, 0x111b: 0x000c, + // Block 0x45, offset 0x1140 + 0x1156: 0x000c, + 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, + 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, + 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, + 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, + 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117f: 0x000c, + // Block 0x46, offset 0x1180 + 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, + 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, + 0x1234: 0x000c, + 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, + 0x123c: 0x000c, + // Block 0x49, offset 0x1240 + 0x1242: 0x000c, + 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, + // Block 0x4a, offset 0x1280 + 0x1280: 0x000c, 0x1281: 0x000c, + 0x12a2: 0x000c, 0x12a3: 0x000c, + 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, + 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, + 0x12ed: 0x000c, 0x12ef: 0x000c, + 0x12f0: 0x000c, 0x12f1: 0x000c, + // Block 0x4c, offset 0x1300 + 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, + // Block 0x4d, offset 0x1340 + 0x1350: 0x000c, 0x1351: 0x000c, + 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, + 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, + 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, + 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, + 0x136d: 0x000c, + 0x1374: 0x000c, + 0x1378: 0x000c, 0x1379: 0x000c, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000c, 0x1381: 0x000c, 0x1382: 0x000c, 0x1383: 0x000c, 0x1384: 0x000c, 0x1385: 0x000c, + 0x1386: 0x000c, 0x1387: 0x000c, 0x1388: 0x000c, 0x1389: 0x000c, 0x138a: 0x000c, 0x138b: 0x000c, + 0x138c: 0x000c, 0x138d: 0x000c, 0x138e: 0x000c, 0x138f: 0x000c, 0x1390: 0x000c, 0x1391: 0x000c, + 0x1392: 0x000c, 0x1393: 0x000c, 0x1394: 0x000c, 0x1395: 0x000c, 0x1396: 0x000c, 0x1397: 0x000c, + 0x1398: 0x000c, 0x1399: 0x000c, 0x139a: 0x000c, 0x139b: 0x000c, 0x139c: 0x000c, 0x139d: 0x000c, + 0x139e: 0x000c, 0x139f: 0x000c, 0x13a0: 0x000c, 0x13a1: 0x000c, 0x13a2: 0x000c, 0x13a3: 0x000c, + 0x13a4: 0x000c, 0x13a5: 0x000c, 0x13a6: 0x000c, 0x13a7: 0x000c, 0x13a8: 0x000c, 0x13a9: 0x000c, + 0x13aa: 0x000c, 0x13ab: 0x000c, 0x13ac: 0x000c, 0x13ad: 0x000c, 0x13ae: 0x000c, 0x13af: 0x000c, + 0x13b0: 0x000c, 0x13b1: 0x000c, 0x13b2: 0x000c, 0x13b3: 0x000c, 0x13b4: 0x000c, 0x13b5: 0x000c, + 0x13b6: 0x000c, 0x13b7: 0x000c, 0x13b8: 0x000c, 0x13b9: 0x000c, 0x13bb: 0x000c, + 0x13bc: 0x000c, 0x13bd: 0x000c, 0x13be: 0x000c, 0x13bf: 0x000c, + // Block 0x4f, offset 0x13c0 + 0x13fd: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, + 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, + 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x000a, + 0x142d: 0x000a, 0x142e: 0x000a, 0x142f: 0x000a, + 0x143d: 0x000a, 0x143e: 0x000a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0009, 0x1441: 0x0009, 0x1442: 0x0009, 0x1443: 0x0009, 0x1444: 0x0009, 0x1445: 0x0009, + 0x1446: 0x0009, 0x1447: 0x0009, 0x1448: 0x0009, 0x1449: 0x0009, 0x144a: 0x0009, 0x144b: 0x000b, + 0x144c: 0x000b, 0x144d: 0x000b, 0x144f: 0x0001, 0x1450: 0x000a, 0x1451: 0x000a, + 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, + 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, + 0x145e: 0x000a, 0x145f: 0x000a, 0x1460: 0x000a, 0x1461: 0x000a, 0x1462: 0x000a, 0x1463: 0x000a, + 0x1464: 0x000a, 0x1465: 0x000a, 0x1466: 0x000a, 0x1467: 0x000a, 0x1468: 0x0009, 0x1469: 0x0007, + 0x146a: 0x000e, 0x146b: 0x000e, 0x146c: 0x000e, 0x146d: 0x000e, 0x146e: 0x000e, 0x146f: 0x0006, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x000a, + 0x1476: 0x000a, 0x1477: 0x000a, 0x1478: 0x000a, 0x1479: 0x000a, 0x147a: 0x000a, 0x147b: 0x000a, + 0x147c: 0x000a, 0x147d: 0x000a, 0x147e: 0x000a, 0x147f: 0x000a, + // Block 0x52, offset 0x1480 + 0x1480: 0x000a, 0x1481: 0x000a, 0x1482: 0x000a, 0x1483: 0x000a, 0x1484: 0x0006, 0x1485: 0x009a, + 0x1486: 0x008a, 0x1487: 0x000a, 0x1488: 0x000a, 0x1489: 0x000a, 0x148a: 0x000a, 0x148b: 0x000a, + 0x148c: 0x000a, 0x148d: 0x000a, 0x148e: 0x000a, 0x148f: 0x000a, 0x1490: 0x000a, 0x1491: 0x000a, + 0x1492: 0x000a, 0x1493: 0x000a, 0x1494: 0x000a, 0x1495: 0x000a, 0x1496: 0x000a, 0x1497: 0x000a, + 0x1498: 0x000a, 0x1499: 0x000a, 0x149a: 0x000a, 0x149b: 0x000a, 0x149c: 0x000a, 0x149d: 0x000a, + 0x149e: 0x000a, 0x149f: 0x0009, 0x14a0: 0x000b, 0x14a1: 0x000b, 0x14a2: 0x000b, 0x14a3: 0x000b, + 0x14a4: 0x000b, 0x14a5: 0x000b, 0x14a6: 0x000e, 0x14a7: 0x000e, 0x14a8: 0x000e, 0x14a9: 0x000e, + 0x14aa: 0x000b, 0x14ab: 0x000b, 0x14ac: 0x000b, 0x14ad: 0x000b, 0x14ae: 0x000b, 0x14af: 0x000b, + 0x14b0: 0x0002, 0x14b4: 0x0002, 0x14b5: 0x0002, + 0x14b6: 0x0002, 0x14b7: 0x0002, 0x14b8: 0x0002, 0x14b9: 0x0002, 0x14ba: 0x0003, 0x14bb: 0x0003, + 0x14bc: 0x000a, 0x14bd: 0x009a, 0x14be: 0x008a, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0002, 0x14c1: 0x0002, 0x14c2: 0x0002, 0x14c3: 0x0002, 0x14c4: 0x0002, 0x14c5: 0x0002, + 0x14c6: 0x0002, 0x14c7: 0x0002, 0x14c8: 0x0002, 0x14c9: 0x0002, 0x14ca: 0x0003, 0x14cb: 0x0003, + 0x14cc: 0x000a, 0x14cd: 0x009a, 0x14ce: 0x008a, + 0x14e0: 0x0004, 0x14e1: 0x0004, 0x14e2: 0x0004, 0x14e3: 0x0004, + 0x14e4: 0x0004, 0x14e5: 0x0004, 0x14e6: 0x0004, 0x14e7: 0x0004, 0x14e8: 0x0004, 0x14e9: 0x0004, + 0x14ea: 0x0004, 0x14eb: 0x0004, 0x14ec: 0x0004, 0x14ed: 0x0004, 0x14ee: 0x0004, 0x14ef: 0x0004, + 0x14f0: 0x0004, 0x14f1: 0x0004, 0x14f2: 0x0004, 0x14f3: 0x0004, 0x14f4: 0x0004, 0x14f5: 0x0004, + 0x14f6: 0x0004, 0x14f7: 0x0004, 0x14f8: 0x0004, 0x14f9: 0x0004, 0x14fa: 0x0004, 0x14fb: 0x0004, + 0x14fc: 0x0004, 0x14fd: 0x0004, 0x14fe: 0x0004, 0x14ff: 0x0004, + // Block 0x54, offset 0x1500 + 0x1500: 0x0004, 0x1501: 0x0004, 0x1502: 0x0004, 0x1503: 0x0004, 0x1504: 0x0004, 0x1505: 0x0004, + 0x1506: 0x0004, 0x1507: 0x0004, 0x1508: 0x0004, 0x1509: 0x0004, 0x150a: 0x0004, 0x150b: 0x0004, + 0x150c: 0x0004, 0x150d: 0x0004, 0x150e: 0x0004, 0x150f: 0x0004, 0x1510: 0x000c, 0x1511: 0x000c, + 0x1512: 0x000c, 0x1513: 0x000c, 0x1514: 0x000c, 0x1515: 0x000c, 0x1516: 0x000c, 0x1517: 0x000c, + 0x1518: 0x000c, 0x1519: 0x000c, 0x151a: 0x000c, 0x151b: 0x000c, 0x151c: 0x000c, 0x151d: 0x000c, + 0x151e: 0x000c, 0x151f: 0x000c, 0x1520: 0x000c, 0x1521: 0x000c, 0x1522: 0x000c, 0x1523: 0x000c, + 0x1524: 0x000c, 0x1525: 0x000c, 0x1526: 0x000c, 0x1527: 0x000c, 0x1528: 0x000c, 0x1529: 0x000c, + 0x152a: 0x000c, 0x152b: 0x000c, 0x152c: 0x000c, 0x152d: 0x000c, 0x152e: 0x000c, 0x152f: 0x000c, + 0x1530: 0x000c, + // Block 0x55, offset 0x1540 + 0x1540: 0x000a, 0x1541: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, 0x1545: 0x000a, + 0x1546: 0x000a, 0x1548: 0x000a, 0x1549: 0x000a, + 0x1554: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1565: 0x000a, 0x1567: 0x000a, 0x1569: 0x000a, + 0x156e: 0x0004, + 0x157a: 0x000a, 0x157b: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, + 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, + 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, + 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, + // Block 0x59, offset 0x1640 + 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, + 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x000a, 0x1649: 0x000a, 0x164a: 0x000a, 0x164b: 0x000a, + 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, + 0x1652: 0x0003, 0x1653: 0x0004, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, + 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, + 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, + 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x000a, + 0x166a: 0x000a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, + 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, + 0x1676: 0x000a, 0x1677: 0x000a, 0x1678: 0x000a, 0x1679: 0x000a, 0x167a: 0x000a, 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x003a, 0x1689: 0x002a, 0x168a: 0x003a, 0x168b: 0x002a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1695: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x009a, + 0x16aa: 0x008a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, + 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, + 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, + 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, 0x174b: 0x000a, + 0x174c: 0x000a, 0x174d: 0x000a, 0x174e: 0x000a, 0x174f: 0x000a, 0x1750: 0x000a, 0x1751: 0x000a, + 0x1752: 0x000a, 0x1753: 0x000a, 0x1754: 0x000a, 0x1755: 0x000a, 0x1756: 0x000a, 0x1757: 0x000a, + 0x1758: 0x000a, 0x1759: 0x000a, 0x175a: 0x000a, 0x175b: 0x000a, 0x175c: 0x000a, 0x175d: 0x000a, + 0x175e: 0x000a, 0x175f: 0x000a, 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x000a, 0x1789: 0x000a, 0x178a: 0x000a, + 0x17a0: 0x000a, 0x17a1: 0x000a, 0x17a2: 0x000a, 0x17a3: 0x000a, + 0x17a4: 0x000a, 0x17a5: 0x000a, 0x17a6: 0x000a, 0x17a7: 0x000a, 0x17a8: 0x000a, 0x17a9: 0x000a, + 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, + 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, + 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, + 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, + 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x0002, 0x17c9: 0x0002, 0x17ca: 0x0002, 0x17cb: 0x0002, + 0x17cc: 0x0002, 0x17cd: 0x0002, 0x17ce: 0x0002, 0x17cf: 0x0002, 0x17d0: 0x0002, 0x17d1: 0x0002, + 0x17d2: 0x0002, 0x17d3: 0x0002, 0x17d4: 0x0002, 0x17d5: 0x0002, 0x17d6: 0x0002, 0x17d7: 0x0002, + 0x17d8: 0x0002, 0x17d9: 0x0002, 0x17da: 0x0002, 0x17db: 0x0002, + // Block 0x60, offset 0x1800 + 0x182a: 0x000a, 0x182b: 0x000a, 0x182c: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x000a, 0x1869: 0x000a, + 0x186a: 0x000a, 0x186b: 0x000a, 0x186d: 0x000a, 0x186e: 0x000a, 0x186f: 0x000a, + 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x000a, + 0x1886: 0x000a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x003a, 0x18b1: 0x002a, 0x18b2: 0x003a, 0x18b3: 0x002a, 0x18b4: 0x003a, 0x18b5: 0x002a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, + 0x18d8: 0x000a, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x003a, 0x18e7: 0x002a, 0x18e8: 0x003a, 0x18e9: 0x002a, + 0x18ea: 0x003a, 0x18eb: 0x002a, 0x18ec: 0x003a, 0x18ed: 0x002a, 0x18ee: 0x003a, 0x18ef: 0x002a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x007a, 0x1904: 0x006a, 0x1905: 0x009a, + 0x1906: 0x008a, 0x1907: 0x00ba, 0x1908: 0x00aa, 0x1909: 0x009a, 0x190a: 0x008a, 0x190b: 0x007a, + 0x190c: 0x006a, 0x190d: 0x00da, 0x190e: 0x002a, 0x190f: 0x003a, 0x1910: 0x00ca, 0x1911: 0x009a, + 0x1912: 0x008a, 0x1913: 0x007a, 0x1914: 0x006a, 0x1915: 0x009a, 0x1916: 0x008a, 0x1917: 0x00ba, + 0x1918: 0x00aa, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x003a, 0x1959: 0x002a, 0x195a: 0x003a, 0x195b: 0x002a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x003a, 0x197d: 0x002a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, + 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19c9: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, + 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, + 0x19d2: 0x000a, 0x19d3: 0x000a, 0x19d4: 0x000a, 0x19d5: 0x000a, 0x19d7: 0x000a, + 0x19d8: 0x000a, 0x19d9: 0x000a, 0x19da: 0x000a, 0x19db: 0x000a, 0x19dc: 0x000a, 0x19dd: 0x000a, + 0x19de: 0x000a, 0x19df: 0x000a, 0x19e0: 0x000a, 0x19e1: 0x000a, 0x19e2: 0x000a, 0x19e3: 0x000a, + 0x19e4: 0x000a, 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19eb: 0x000a, 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, + 0x19f0: 0x000a, 0x19f1: 0x000a, 0x19f2: 0x000a, 0x19f3: 0x000a, 0x19f4: 0x000a, 0x19f5: 0x000a, + 0x19f6: 0x000a, 0x19f7: 0x000a, 0x19f8: 0x000a, 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, + 0x1a2a: 0x000a, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, + 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, + 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, + // Block 0x69, offset 0x1a40 + 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, + 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, + 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, + 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, + 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, + 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, + 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, + 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, + 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, + 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, + 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, + 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, + 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, + 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, + 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, + 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, + 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, + 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, + 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, + 0x1c30: 0x000a, + 0x1c36: 0x000a, 0x1c37: 0x000a, + 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, + 0x1c60: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1cbb: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, + 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, + 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d1d: 0x000a, + 0x1d1e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d50: 0x000a, 0x1d51: 0x000a, + 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, + 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, + 0x1d5e: 0x000a, 0x1d5f: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, + 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, + 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e5e: 0x000a, 0x1e5f: 0x000a, + 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e90: 0x000a, 0x1e91: 0x000a, + 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, + 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, + 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, + 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, + 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, + 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, + 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, + 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, + 0x1ec6: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f6f: 0x000c, + 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, + 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, + 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, + // Block 0x7e, offset 0x1f80 + 0x1f9e: 0x000c, 0x1f9f: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1ff0: 0x000c, 0x1ff1: 0x000c, + // Block 0x80, offset 0x2000 + 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, + 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, + 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, + 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, + 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, + 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, + // Block 0x81, offset 0x2040 + 0x2048: 0x000a, + // Block 0x82, offset 0x2080 + 0x2082: 0x000c, + 0x2086: 0x000c, 0x208b: 0x000c, + 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, + 0x20aa: 0x000a, 0x20ab: 0x000a, 0x20ac: 0x000c, + 0x20b8: 0x0004, 0x20b9: 0x0004, + // Block 0x83, offset 0x20c0 + 0x20f4: 0x000a, 0x20f5: 0x000a, + 0x20f6: 0x000a, 0x20f7: 0x000a, + // Block 0x84, offset 0x2100 + 0x2104: 0x000c, 0x2105: 0x000c, + 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, + 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, + 0x2130: 0x000c, 0x2131: 0x000c, + 0x213f: 0x000c, + // Block 0x85, offset 0x2140 + 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, + 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, + // Block 0x86, offset 0x2180 + 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, + 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, + 0x21f3: 0x000c, + 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, + 0x21fc: 0x000c, 0x21fd: 0x000c, + // Block 0x88, offset 0x2200 + 0x2225: 0x000c, + // Block 0x89, offset 0x2240 + 0x2269: 0x000c, + 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, + 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, + 0x2276: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2283: 0x000c, + 0x228c: 0x000c, + 0x22bc: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, + 0x22f7: 0x000c, 0x22f8: 0x000c, + 0x22fe: 0x000c, 0x22ff: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2301: 0x000c, + 0x232c: 0x000c, 0x232d: 0x000c, + 0x2336: 0x000c, + // Block 0x8d, offset 0x2340 + 0x236a: 0x000a, 0x236b: 0x000a, + // Block 0x8e, offset 0x2380 + 0x23a5: 0x000c, 0x23a8: 0x000c, + 0x23ad: 0x000c, + // Block 0x8f, offset 0x23c0 + 0x23dd: 0x0001, + 0x23de: 0x000c, 0x23df: 0x0001, 0x23e0: 0x0001, 0x23e1: 0x0001, 0x23e2: 0x0001, 0x23e3: 0x0001, + 0x23e4: 0x0001, 0x23e5: 0x0001, 0x23e6: 0x0001, 0x23e7: 0x0001, 0x23e8: 0x0001, 0x23e9: 0x0003, + 0x23ea: 0x0001, 0x23eb: 0x0001, 0x23ec: 0x0001, 0x23ed: 0x0001, 0x23ee: 0x0001, 0x23ef: 0x0001, + 0x23f0: 0x0001, 0x23f1: 0x0001, 0x23f2: 0x0001, 0x23f3: 0x0001, 0x23f4: 0x0001, 0x23f5: 0x0001, + 0x23f6: 0x0001, 0x23f7: 0x0001, 0x23f8: 0x0001, 0x23f9: 0x0001, 0x23fa: 0x0001, 0x23fb: 0x0001, + 0x23fc: 0x0001, 0x23fd: 0x0001, 0x23fe: 0x0001, 0x23ff: 0x0001, + // Block 0x90, offset 0x2400 + 0x2400: 0x0001, 0x2401: 0x0001, 0x2402: 0x0001, 0x2403: 0x0001, 0x2404: 0x0001, 0x2405: 0x0001, + 0x2406: 0x0001, 0x2407: 0x0001, 0x2408: 0x0001, 0x2409: 0x0001, 0x240a: 0x0001, 0x240b: 0x0001, + 0x240c: 0x0001, 0x240d: 0x0001, 0x240e: 0x0001, 0x240f: 0x0001, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000d, 0x243f: 0x000d, + // Block 0x91, offset 0x2440 + 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, + 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, + 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000d, 0x2451: 0x000d, + 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, + 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, + 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, + 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, + 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000a, 0x247f: 0x000a, + // Block 0x92, offset 0x2480 + 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, + 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, + 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000b, 0x2491: 0x000b, + 0x2492: 0x000b, 0x2493: 0x000b, 0x2494: 0x000b, 0x2495: 0x000b, 0x2496: 0x000b, 0x2497: 0x000b, + 0x2498: 0x000b, 0x2499: 0x000b, 0x249a: 0x000b, 0x249b: 0x000b, 0x249c: 0x000b, 0x249d: 0x000b, + 0x249e: 0x000b, 0x249f: 0x000b, 0x24a0: 0x000b, 0x24a1: 0x000b, 0x24a2: 0x000b, 0x24a3: 0x000b, + 0x24a4: 0x000b, 0x24a5: 0x000b, 0x24a6: 0x000b, 0x24a7: 0x000b, 0x24a8: 0x000b, 0x24a9: 0x000b, + 0x24aa: 0x000b, 0x24ab: 0x000b, 0x24ac: 0x000b, 0x24ad: 0x000b, 0x24ae: 0x000b, 0x24af: 0x000b, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000a, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000c, 0x24c1: 0x000c, 0x24c2: 0x000c, 0x24c3: 0x000c, 0x24c4: 0x000c, 0x24c5: 0x000c, + 0x24c6: 0x000c, 0x24c7: 0x000c, 0x24c8: 0x000c, 0x24c9: 0x000c, 0x24ca: 0x000c, 0x24cb: 0x000c, + 0x24cc: 0x000c, 0x24cd: 0x000c, 0x24ce: 0x000c, 0x24cf: 0x000c, 0x24d0: 0x000a, 0x24d1: 0x000a, + 0x24d2: 0x000a, 0x24d3: 0x000a, 0x24d4: 0x000a, 0x24d5: 0x000a, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x000a, + 0x24e0: 0x000c, 0x24e1: 0x000c, 0x24e2: 0x000c, 0x24e3: 0x000c, + 0x24e4: 0x000c, 0x24e5: 0x000c, 0x24e6: 0x000c, 0x24e7: 0x000c, 0x24e8: 0x000c, 0x24e9: 0x000c, + 0x24ea: 0x000c, 0x24eb: 0x000c, 0x24ec: 0x000c, 0x24ed: 0x000c, 0x24ee: 0x000c, 0x24ef: 0x000c, + 0x24f0: 0x000a, 0x24f1: 0x000a, 0x24f2: 0x000a, 0x24f3: 0x000a, 0x24f4: 0x000a, 0x24f5: 0x000a, + 0x24f6: 0x000a, 0x24f7: 0x000a, 0x24f8: 0x000a, 0x24f9: 0x000a, 0x24fa: 0x000a, 0x24fb: 0x000a, + 0x24fc: 0x000a, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, + // Block 0x94, offset 0x2500 + 0x2500: 0x000a, 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x000a, 0x2504: 0x000a, 0x2505: 0x000a, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x000a, 0x2509: 0x000a, 0x250a: 0x000a, 0x250b: 0x000a, + 0x250c: 0x000a, 0x250d: 0x000a, 0x250e: 0x000a, 0x250f: 0x000a, 0x2510: 0x0006, 0x2511: 0x000a, + 0x2512: 0x0006, 0x2514: 0x000a, 0x2515: 0x0006, 0x2516: 0x000a, 0x2517: 0x000a, + 0x2518: 0x000a, 0x2519: 0x009a, 0x251a: 0x008a, 0x251b: 0x007a, 0x251c: 0x006a, 0x251d: 0x009a, + 0x251e: 0x008a, 0x251f: 0x0004, 0x2520: 0x000a, 0x2521: 0x000a, 0x2522: 0x0003, 0x2523: 0x0003, + 0x2524: 0x000a, 0x2525: 0x000a, 0x2526: 0x000a, 0x2528: 0x000a, 0x2529: 0x0004, + 0x252a: 0x0004, 0x252b: 0x000a, + 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, + 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, + 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000d, + // Block 0x95, offset 0x2540 + 0x2540: 0x000d, 0x2541: 0x000d, 0x2542: 0x000d, 0x2543: 0x000d, 0x2544: 0x000d, 0x2545: 0x000d, + 0x2546: 0x000d, 0x2547: 0x000d, 0x2548: 0x000d, 0x2549: 0x000d, 0x254a: 0x000d, 0x254b: 0x000d, + 0x254c: 0x000d, 0x254d: 0x000d, 0x254e: 0x000d, 0x254f: 0x000d, 0x2550: 0x000d, 0x2551: 0x000d, + 0x2552: 0x000d, 0x2553: 0x000d, 0x2554: 0x000d, 0x2555: 0x000d, 0x2556: 0x000d, 0x2557: 0x000d, + 0x2558: 0x000d, 0x2559: 0x000d, 0x255a: 0x000d, 0x255b: 0x000d, 0x255c: 0x000d, 0x255d: 0x000d, + 0x255e: 0x000d, 0x255f: 0x000d, 0x2560: 0x000d, 0x2561: 0x000d, 0x2562: 0x000d, 0x2563: 0x000d, + 0x2564: 0x000d, 0x2565: 0x000d, 0x2566: 0x000d, 0x2567: 0x000d, 0x2568: 0x000d, 0x2569: 0x000d, + 0x256a: 0x000d, 0x256b: 0x000d, 0x256c: 0x000d, 0x256d: 0x000d, 0x256e: 0x000d, 0x256f: 0x000d, + 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, + 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, + 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000b, + // Block 0x96, offset 0x2580 + 0x2581: 0x000a, 0x2582: 0x000a, 0x2583: 0x0004, 0x2584: 0x0004, 0x2585: 0x0004, + 0x2586: 0x000a, 0x2587: 0x000a, 0x2588: 0x003a, 0x2589: 0x002a, 0x258a: 0x000a, 0x258b: 0x0003, + 0x258c: 0x0006, 0x258d: 0x0003, 0x258e: 0x0006, 0x258f: 0x0006, 0x2590: 0x0002, 0x2591: 0x0002, + 0x2592: 0x0002, 0x2593: 0x0002, 0x2594: 0x0002, 0x2595: 0x0002, 0x2596: 0x0002, 0x2597: 0x0002, + 0x2598: 0x0002, 0x2599: 0x0002, 0x259a: 0x0006, 0x259b: 0x000a, 0x259c: 0x000a, 0x259d: 0x000a, + 0x259e: 0x000a, 0x259f: 0x000a, 0x25a0: 0x000a, + 0x25bb: 0x005a, + 0x25bc: 0x000a, 0x25bd: 0x004a, 0x25be: 0x000a, 0x25bf: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x000a, + 0x25db: 0x005a, 0x25dc: 0x000a, 0x25dd: 0x004a, + 0x25de: 0x000a, 0x25df: 0x00fa, 0x25e0: 0x00ea, 0x25e1: 0x000a, 0x25e2: 0x003a, 0x25e3: 0x002a, + 0x25e4: 0x000a, 0x25e5: 0x000a, + // Block 0x98, offset 0x2600 + 0x2620: 0x0004, 0x2621: 0x0004, 0x2622: 0x000a, 0x2623: 0x000a, + 0x2624: 0x000a, 0x2625: 0x0004, 0x2626: 0x0004, 0x2628: 0x000a, 0x2629: 0x000a, + 0x262a: 0x000a, 0x262b: 0x000a, 0x262c: 0x000a, 0x262d: 0x000a, 0x262e: 0x000a, + 0x2630: 0x000b, 0x2631: 0x000b, 0x2632: 0x000b, 0x2633: 0x000b, 0x2634: 0x000b, 0x2635: 0x000b, + 0x2636: 0x000b, 0x2637: 0x000b, 0x2638: 0x000b, 0x2639: 0x000a, 0x263a: 0x000a, 0x263b: 0x000a, + 0x263c: 0x000a, 0x263d: 0x000a, 0x263e: 0x000b, 0x263f: 0x000b, + // Block 0x99, offset 0x2640 + 0x2641: 0x000a, + // Block 0x9a, offset 0x2680 + 0x2680: 0x000a, 0x2681: 0x000a, 0x2682: 0x000a, 0x2683: 0x000a, 0x2684: 0x000a, 0x2685: 0x000a, + 0x2686: 0x000a, 0x2687: 0x000a, 0x2688: 0x000a, 0x2689: 0x000a, 0x268a: 0x000a, 0x268b: 0x000a, + 0x268c: 0x000a, 0x2690: 0x000a, 0x2691: 0x000a, + 0x2692: 0x000a, 0x2693: 0x000a, 0x2694: 0x000a, 0x2695: 0x000a, 0x2696: 0x000a, 0x2697: 0x000a, + 0x2698: 0x000a, 0x2699: 0x000a, 0x269a: 0x000a, 0x269b: 0x000a, 0x269c: 0x000a, + 0x26a0: 0x000a, + // Block 0x9b, offset 0x26c0 + 0x26fd: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2720: 0x000c, 0x2721: 0x0002, 0x2722: 0x0002, 0x2723: 0x0002, + 0x2724: 0x0002, 0x2725: 0x0002, 0x2726: 0x0002, 0x2727: 0x0002, 0x2728: 0x0002, 0x2729: 0x0002, + 0x272a: 0x0002, 0x272b: 0x0002, 0x272c: 0x0002, 0x272d: 0x0002, 0x272e: 0x0002, 0x272f: 0x0002, + 0x2730: 0x0002, 0x2731: 0x0002, 0x2732: 0x0002, 0x2733: 0x0002, 0x2734: 0x0002, 0x2735: 0x0002, + 0x2736: 0x0002, 0x2737: 0x0002, 0x2738: 0x0002, 0x2739: 0x0002, 0x273a: 0x0002, 0x273b: 0x0002, + // Block 0x9d, offset 0x2740 + 0x2776: 0x000c, 0x2777: 0x000c, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x000a, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x000c, 0x2802: 0x000c, 0x2803: 0x000c, 0x2804: 0x0001, 0x2805: 0x000c, + 0x2806: 0x000c, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x000c, 0x280d: 0x000c, 0x280e: 0x000c, 0x280f: 0x000c, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x000c, 0x2839: 0x000c, 0x283a: 0x000c, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x000c, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, + 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, + 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, + 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, + 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, + 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x000a, 0x28ba: 0x000a, 0x28bb: 0x000a, + 0x28bc: 0x000a, 0x28bd: 0x000a, 0x28be: 0x000a, 0x28bf: 0x000a, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, + 0x28c6: 0x000d, 0x28c7: 0x000d, 0x28c8: 0x000d, 0x28c9: 0x000d, 0x28ca: 0x000d, 0x28cb: 0x000d, + 0x28cc: 0x000d, 0x28cd: 0x000d, 0x28ce: 0x000d, 0x28cf: 0x000d, 0x28d0: 0x000d, 0x28d1: 0x000d, + 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, + 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, + 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, + 0x28e4: 0x000c, 0x28e5: 0x000c, 0x28e6: 0x000c, 0x28e7: 0x000c, 0x28e8: 0x000d, 0x28e9: 0x000d, + 0x28ea: 0x000d, 0x28eb: 0x000d, 0x28ec: 0x000d, 0x28ed: 0x000d, 0x28ee: 0x000d, 0x28ef: 0x000d, + 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, + 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x000d, 0x28fb: 0x000d, + 0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d, + // Block 0xa4, offset 0x2900 + 0x2900: 0x0001, 0x2901: 0x0001, 0x2902: 0x0001, 0x2903: 0x0001, 0x2904: 0x0001, 0x2905: 0x0001, + 0x2906: 0x0001, 0x2907: 0x0001, 0x2908: 0x0001, 0x2909: 0x0001, 0x290a: 0x0001, 0x290b: 0x0001, + 0x290c: 0x0001, 0x290d: 0x0001, 0x290e: 0x0001, 0x290f: 0x0001, 0x2910: 0x0001, 0x2911: 0x0001, + 0x2912: 0x0001, 0x2913: 0x0001, 0x2914: 0x0001, 0x2915: 0x0001, 0x2916: 0x0001, 0x2917: 0x0001, + 0x2918: 0x0001, 0x2919: 0x0001, 0x291a: 0x0001, 0x291b: 0x0001, 0x291c: 0x0001, 0x291d: 0x0001, + 0x291e: 0x0001, 0x291f: 0x0001, 0x2920: 0x0005, 0x2921: 0x0005, 0x2922: 0x0005, 0x2923: 0x0005, + 0x2924: 0x0005, 0x2925: 0x0005, 0x2926: 0x0005, 0x2927: 0x0005, 0x2928: 0x0005, 0x2929: 0x0005, + 0x292a: 0x0005, 0x292b: 0x0005, 0x292c: 0x0005, 0x292d: 0x0005, 0x292e: 0x0005, 0x292f: 0x0005, + 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, + 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0005, 0x293b: 0x0005, + 0x293c: 0x0005, 0x293d: 0x0005, 0x293e: 0x0005, 0x293f: 0x0001, + // Block 0xa5, offset 0x2940 + 0x2940: 0x0001, 0x2941: 0x0001, 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, 0x2945: 0x0001, + 0x2946: 0x0001, 0x2947: 0x0001, 0x2948: 0x0001, 0x2949: 0x0001, 0x294a: 0x0001, 0x294b: 0x0001, + 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, + 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, + 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, + 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, + 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, + 0x296a: 0x0001, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x0001, 0x296e: 0x0001, 0x296f: 0x0001, + 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, + 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, + 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, + // Block 0xa6, offset 0x2980 + 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, + 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, + 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, + 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, + 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, + 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0001, 0x29a1: 0x0001, 0x29a2: 0x0001, 0x29a3: 0x0001, + 0x29a4: 0x0001, 0x29a5: 0x0001, 0x29a6: 0x0001, 0x29a7: 0x0001, 0x29a8: 0x0001, 0x29a9: 0x0001, + 0x29aa: 0x0001, 0x29ab: 0x0001, 0x29ac: 0x0001, 0x29ad: 0x0001, 0x29ae: 0x0001, 0x29af: 0x0001, + 0x29b0: 0x000d, 0x29b1: 0x000d, 0x29b2: 0x000d, 0x29b3: 0x000d, 0x29b4: 0x000d, 0x29b5: 0x000d, + 0x29b6: 0x000d, 0x29b7: 0x000d, 0x29b8: 0x000d, 0x29b9: 0x000d, 0x29ba: 0x000d, 0x29bb: 0x000d, + 0x29bc: 0x000d, 0x29bd: 0x000d, 0x29be: 0x000d, 0x29bf: 0x000d, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000d, 0x29c1: 0x000d, 0x29c2: 0x000d, 0x29c3: 0x000d, 0x29c4: 0x000d, 0x29c5: 0x000d, + 0x29c6: 0x000c, 0x29c7: 0x000c, 0x29c8: 0x000c, 0x29c9: 0x000c, 0x29ca: 0x000c, 0x29cb: 0x000c, + 0x29cc: 0x000c, 0x29cd: 0x000c, 0x29ce: 0x000c, 0x29cf: 0x000c, 0x29d0: 0x000c, 0x29d1: 0x000d, + 0x29d2: 0x000d, 0x29d3: 0x000d, 0x29d4: 0x000d, 0x29d5: 0x000d, 0x29d6: 0x000d, 0x29d7: 0x000d, + 0x29d8: 0x000d, 0x29d9: 0x000d, 0x29da: 0x000d, 0x29db: 0x000d, 0x29dc: 0x000d, 0x29dd: 0x000d, + 0x29de: 0x000d, 0x29df: 0x000d, 0x29e0: 0x000d, 0x29e1: 0x000d, 0x29e2: 0x000d, 0x29e3: 0x000d, + 0x29e4: 0x000d, 0x29e5: 0x000d, 0x29e6: 0x000d, 0x29e7: 0x000d, 0x29e8: 0x000d, 0x29e9: 0x000d, + 0x29ea: 0x000d, 0x29eb: 0x000d, 0x29ec: 0x000d, 0x29ed: 0x000d, 0x29ee: 0x000d, 0x29ef: 0x000d, + 0x29f0: 0x0001, 0x29f1: 0x0001, 0x29f2: 0x0001, 0x29f3: 0x0001, 0x29f4: 0x0001, 0x29f5: 0x0001, + 0x29f6: 0x0001, 0x29f7: 0x0001, 0x29f8: 0x0001, 0x29f9: 0x0001, 0x29fa: 0x0001, 0x29fb: 0x0001, + 0x29fc: 0x0001, 0x29fd: 0x0001, 0x29fe: 0x0001, 0x29ff: 0x0001, + // Block 0xa8, offset 0x2a00 + 0x2a01: 0x000c, + 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, 0x2a3f: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x000c, 0x2a41: 0x000c, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, + 0x2a46: 0x000c, + 0x2a52: 0x000a, 0x2a53: 0x000a, 0x2a54: 0x000a, 0x2a55: 0x000a, 0x2a56: 0x000a, 0x2a57: 0x000a, + 0x2a58: 0x000a, 0x2a59: 0x000a, 0x2a5a: 0x000a, 0x2a5b: 0x000a, 0x2a5c: 0x000a, 0x2a5d: 0x000a, + 0x2a5e: 0x000a, 0x2a5f: 0x000a, 0x2a60: 0x000a, 0x2a61: 0x000a, 0x2a62: 0x000a, 0x2a63: 0x000a, + 0x2a64: 0x000a, 0x2a65: 0x000a, + 0x2a7f: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x000c, 0x2a81: 0x000c, + 0x2ab3: 0x000c, 0x2ab4: 0x000c, 0x2ab5: 0x000c, + 0x2ab6: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, + 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, + 0x2aea: 0x000c, 0x2aeb: 0x000c, 0x2aed: 0x000c, 0x2aee: 0x000c, 0x2aef: 0x000c, + 0x2af0: 0x000c, 0x2af1: 0x000c, 0x2af2: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b33: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, 0x2b41: 0x000c, + 0x2b76: 0x000c, 0x2b77: 0x000c, 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, + 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b89: 0x000c, 0x2b8a: 0x000c, 0x2b8b: 0x000c, + 0x2b8c: 0x000c, 0x2b8f: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bef: 0x000c, + 0x2bf0: 0x000c, 0x2bf1: 0x000c, 0x2bf4: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, + 0x2bfe: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c1f: 0x000c, 0x2c23: 0x000c, + 0x2c24: 0x000c, 0x2c25: 0x000c, 0x2c26: 0x000c, 0x2c27: 0x000c, 0x2c28: 0x000c, 0x2c29: 0x000c, + 0x2c2a: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, + 0x2c66: 0x000c, 0x2c67: 0x000c, 0x2c68: 0x000c, 0x2c69: 0x000c, + 0x2c6a: 0x000c, 0x2c6b: 0x000c, 0x2c6c: 0x000c, + 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb8: 0x000c, 0x2cb9: 0x000c, 0x2cba: 0x000c, 0x2cbb: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbe: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc2: 0x000c, 0x2cc3: 0x000c, 0x2cc4: 0x000c, + 0x2cc6: 0x000c, + 0x2cde: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d3a: 0x000c, + 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, 0x2d42: 0x000c, 0x2d43: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2dbc: 0x000c, 0x2dbd: 0x000c, 0x2dbf: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x000c, + 0x2ddc: 0x000c, 0x2ddd: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e37: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, + 0x2e3d: 0x000c, 0x2e3f: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x000c, + 0x2e60: 0x000a, 0x2e61: 0x000a, 0x2e62: 0x000a, 0x2e63: 0x000a, + 0x2e64: 0x000a, 0x2e65: 0x000a, 0x2e66: 0x000a, 0x2e67: 0x000a, 0x2e68: 0x000a, 0x2e69: 0x000a, + 0x2e6a: 0x000a, 0x2e6b: 0x000a, 0x2e6c: 0x000a, + // Block 0xba, offset 0x2e80 + 0x2eab: 0x000c, 0x2ead: 0x000c, + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb7: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2edd: 0x000c, + 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, + 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee7: 0x000c, 0x2ee8: 0x000c, 0x2ee9: 0x000c, + 0x2eea: 0x000c, 0x2eeb: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f2f: 0x000c, + 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f36: 0x000c, 0x2f37: 0x000c, 0x2f39: 0x000c, 0x2f3a: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f7b: 0x000c, + 0x2f7c: 0x000c, 0x2f7e: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2f83: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fd4: 0x000c, 0x2fd5: 0x000c, 0x2fd6: 0x000c, 0x2fd7: 0x000c, + 0x2fda: 0x000c, 0x2fdb: 0x000c, + 0x2fe0: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, + 0x3006: 0x000c, 0x3009: 0x000c, 0x300a: 0x000c, + 0x3033: 0x000c, 0x3034: 0x000c, 0x3035: 0x000c, + 0x3036: 0x000c, 0x3037: 0x000c, 0x3038: 0x000c, 0x303b: 0x000c, + 0x303c: 0x000c, 0x303d: 0x000c, 0x303e: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3047: 0x000c, + 0x3051: 0x000c, + 0x3052: 0x000c, 0x3053: 0x000c, 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, + 0x3059: 0x000c, 0x305a: 0x000c, 0x305b: 0x000c, + // Block 0xc2, offset 0x3080 + 0x308a: 0x000c, 0x308b: 0x000c, + 0x308c: 0x000c, 0x308d: 0x000c, 0x308e: 0x000c, 0x308f: 0x000c, 0x3090: 0x000c, 0x3091: 0x000c, + 0x3092: 0x000c, 0x3093: 0x000c, 0x3094: 0x000c, 0x3095: 0x000c, 0x3096: 0x000c, + 0x3098: 0x000c, 0x3099: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c, 0x30f5: 0x000c, + 0x30f6: 0x000c, 0x30f8: 0x000c, 0x30f9: 0x000c, 0x30fa: 0x000c, 0x30fb: 0x000c, + 0x30fc: 0x000c, 0x30fd: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, 0x3117: 0x000c, + 0x3118: 0x000c, 0x3119: 0x000c, 0x311a: 0x000c, 0x311b: 0x000c, 0x311c: 0x000c, 0x311d: 0x000c, + 0x311e: 0x000c, 0x311f: 0x000c, 0x3120: 0x000c, 0x3121: 0x000c, 0x3122: 0x000c, 0x3123: 0x000c, + 0x3124: 0x000c, 0x3125: 0x000c, 0x3126: 0x000c, 0x3127: 0x000c, + 0x312a: 0x000c, 0x312b: 0x000c, 0x312c: 0x000c, 0x312d: 0x000c, 0x312e: 0x000c, 0x312f: 0x000c, + 0x3130: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3135: 0x000c, + 0x3136: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, + 0x3176: 0x000c, 0x317a: 0x000c, + 0x317c: 0x000c, 0x317d: 0x000c, 0x317f: 0x000c, + // Block 0xc6, offset 0x3180 + 0x3180: 0x000c, 0x3181: 0x000c, 0x3182: 0x000c, 0x3183: 0x000c, 0x3184: 0x000c, 0x3185: 0x000c, + 0x3187: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d5: 0x000c, 0x31d7: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3233: 0x000c, 0x3234: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3255: 0x000a, 0x3256: 0x000a, 0x3257: 0x000a, + 0x3258: 0x000a, 0x3259: 0x000a, 0x325a: 0x000a, 0x325b: 0x000a, 0x325c: 0x000a, 0x325d: 0x0004, + 0x325e: 0x0004, 0x325f: 0x0004, 0x3260: 0x0004, 0x3261: 0x000a, 0x3262: 0x000a, 0x3263: 0x000a, + 0x3264: 0x000a, 0x3265: 0x000a, 0x3266: 0x000a, 0x3267: 0x000a, 0x3268: 0x000a, 0x3269: 0x000a, + 0x326a: 0x000a, 0x326b: 0x000a, 0x326c: 0x000a, 0x326d: 0x000a, 0x326e: 0x000a, 0x326f: 0x000a, + 0x3270: 0x000a, 0x3271: 0x000a, + // Block 0xca, offset 0x3280 + 0x32b0: 0x000c, 0x32b1: 0x000c, 0x32b2: 0x000c, 0x32b3: 0x000c, 0x32b4: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, + 0x32f6: 0x000c, + // Block 0xcc, offset 0x3300 + 0x330f: 0x000c, + // Block 0xcd, offset 0x3340 + 0x334f: 0x000c, 0x3350: 0x000c, 0x3351: 0x000c, + 0x3352: 0x000c, + // Block 0xce, offset 0x3380 + 0x33a2: 0x000a, + 0x33a4: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33dd: 0x000c, + 0x33de: 0x000c, 0x33e0: 0x000b, 0x33e1: 0x000b, 0x33e2: 0x000b, 0x33e3: 0x000b, + // Block 0xd0, offset 0x3400 + 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c, + 0x3433: 0x000b, 0x3434: 0x000b, 0x3435: 0x000b, + 0x3436: 0x000b, 0x3437: 0x000b, 0x3438: 0x000b, 0x3439: 0x000b, 0x343a: 0x000b, 0x343b: 0x000c, + 0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3445: 0x000c, + 0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c, + 0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c, 0x346d: 0x000c, + // Block 0xd2, offset 0x3480 + 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000c, 0x3483: 0x000c, 0x3484: 0x000c, 0x3485: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, + 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, + 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, + 0x34d2: 0x000a, 0x34d3: 0x000a, 0x34d4: 0x000a, 0x34d5: 0x000a, 0x34d6: 0x000a, + // Block 0xd4, offset 0x3500 + 0x351b: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3555: 0x000a, + // Block 0xd6, offset 0x3580 + 0x358f: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35c9: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3603: 0x000a, + 0x360e: 0x0002, 0x360f: 0x0002, 0x3610: 0x0002, 0x3611: 0x0002, + 0x3612: 0x0002, 0x3613: 0x0002, 0x3614: 0x0002, 0x3615: 0x0002, 0x3616: 0x0002, 0x3617: 0x0002, + 0x3618: 0x0002, 0x3619: 0x0002, 0x361a: 0x0002, 0x361b: 0x0002, 0x361c: 0x0002, 0x361d: 0x0002, + 0x361e: 0x0002, 0x361f: 0x0002, 0x3620: 0x0002, 0x3621: 0x0002, 0x3622: 0x0002, 0x3623: 0x0002, + 0x3624: 0x0002, 0x3625: 0x0002, 0x3626: 0x0002, 0x3627: 0x0002, 0x3628: 0x0002, 0x3629: 0x0002, + 0x362a: 0x0002, 0x362b: 0x0002, 0x362c: 0x0002, 0x362d: 0x0002, 0x362e: 0x0002, 0x362f: 0x0002, + 0x3630: 0x0002, 0x3631: 0x0002, 0x3632: 0x0002, 0x3633: 0x0002, 0x3634: 0x0002, 0x3635: 0x0002, + 0x3636: 0x0002, 0x3637: 0x0002, 0x3638: 0x0002, 0x3639: 0x0002, 0x363a: 0x0002, 0x363b: 0x0002, + 0x363c: 0x0002, 0x363d: 0x0002, 0x363e: 0x0002, 0x363f: 0x0002, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000c, 0x3641: 0x000c, 0x3642: 0x000c, 0x3643: 0x000c, 0x3644: 0x000c, 0x3645: 0x000c, + 0x3646: 0x000c, 0x3647: 0x000c, 0x3648: 0x000c, 0x3649: 0x000c, 0x364a: 0x000c, 0x364b: 0x000c, + 0x364c: 0x000c, 0x364d: 0x000c, 0x364e: 0x000c, 0x364f: 0x000c, 0x3650: 0x000c, 0x3651: 0x000c, + 0x3652: 0x000c, 0x3653: 0x000c, 0x3654: 0x000c, 0x3655: 0x000c, 0x3656: 0x000c, 0x3657: 0x000c, + 0x3658: 0x000c, 0x3659: 0x000c, 0x365a: 0x000c, 0x365b: 0x000c, 0x365c: 0x000c, 0x365d: 0x000c, + 0x365e: 0x000c, 0x365f: 0x000c, 0x3660: 0x000c, 0x3661: 0x000c, 0x3662: 0x000c, 0x3663: 0x000c, + 0x3664: 0x000c, 0x3665: 0x000c, 0x3666: 0x000c, 0x3667: 0x000c, 0x3668: 0x000c, 0x3669: 0x000c, + 0x366a: 0x000c, 0x366b: 0x000c, 0x366c: 0x000c, 0x366d: 0x000c, 0x366e: 0x000c, 0x366f: 0x000c, + 0x3670: 0x000c, 0x3671: 0x000c, 0x3672: 0x000c, 0x3673: 0x000c, 0x3674: 0x000c, 0x3675: 0x000c, + 0x3676: 0x000c, 0x367b: 0x000c, + 0x367c: 0x000c, 0x367d: 0x000c, 0x367e: 0x000c, 0x367f: 0x000c, + // Block 0xda, offset 0x3680 + 0x3680: 0x000c, 0x3681: 0x000c, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000c, + 0x3686: 0x000c, 0x3687: 0x000c, 0x3688: 0x000c, 0x3689: 0x000c, 0x368a: 0x000c, 0x368b: 0x000c, + 0x368c: 0x000c, 0x368d: 0x000c, 0x368e: 0x000c, 0x368f: 0x000c, 0x3690: 0x000c, 0x3691: 0x000c, + 0x3692: 0x000c, 0x3693: 0x000c, 0x3694: 0x000c, 0x3695: 0x000c, 0x3696: 0x000c, 0x3697: 0x000c, + 0x3698: 0x000c, 0x3699: 0x000c, 0x369a: 0x000c, 0x369b: 0x000c, 0x369c: 0x000c, 0x369d: 0x000c, + 0x369e: 0x000c, 0x369f: 0x000c, 0x36a0: 0x000c, 0x36a1: 0x000c, 0x36a2: 0x000c, 0x36a3: 0x000c, + 0x36a4: 0x000c, 0x36a5: 0x000c, 0x36a6: 0x000c, 0x36a7: 0x000c, 0x36a8: 0x000c, 0x36a9: 0x000c, + 0x36aa: 0x000c, 0x36ab: 0x000c, 0x36ac: 0x000c, + 0x36b5: 0x000c, + // Block 0xdb, offset 0x36c0 + 0x36c4: 0x000c, + 0x36db: 0x000c, 0x36dc: 0x000c, 0x36dd: 0x000c, + 0x36de: 0x000c, 0x36df: 0x000c, 0x36e1: 0x000c, 0x36e2: 0x000c, 0x36e3: 0x000c, + 0x36e4: 0x000c, 0x36e5: 0x000c, 0x36e6: 0x000c, 0x36e7: 0x000c, 0x36e8: 0x000c, 0x36e9: 0x000c, + 0x36ea: 0x000c, 0x36eb: 0x000c, 0x36ec: 0x000c, 0x36ed: 0x000c, 0x36ee: 0x000c, 0x36ef: 0x000c, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000c, 0x3701: 0x000c, 0x3702: 0x000c, 0x3703: 0x000c, 0x3704: 0x000c, 0x3705: 0x000c, + 0x3706: 0x000c, 0x3708: 0x000c, 0x3709: 0x000c, 0x370a: 0x000c, 0x370b: 0x000c, + 0x370c: 0x000c, 0x370d: 0x000c, 0x370e: 0x000c, 0x370f: 0x000c, 0x3710: 0x000c, 0x3711: 0x000c, + 0x3712: 0x000c, 0x3713: 0x000c, 0x3714: 0x000c, 0x3715: 0x000c, 0x3716: 0x000c, 0x3717: 0x000c, + 0x3718: 0x000c, 0x371b: 0x000c, 0x371c: 0x000c, 0x371d: 0x000c, + 0x371e: 0x000c, 0x371f: 0x000c, 0x3720: 0x000c, 0x3721: 0x000c, 0x3723: 0x000c, + 0x3724: 0x000c, 0x3726: 0x000c, 0x3727: 0x000c, 0x3728: 0x000c, 0x3729: 0x000c, + 0x372a: 0x000c, + // Block 0xdd, offset 0x3740 + 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, + 0x377f: 0x0004, + // Block 0xde, offset 0x3780 + 0x3780: 0x0001, 0x3781: 0x0001, 0x3782: 0x0001, 0x3783: 0x0001, 0x3784: 0x0001, 0x3785: 0x0001, + 0x3786: 0x0001, 0x3787: 0x0001, 0x3788: 0x0001, 0x3789: 0x0001, 0x378a: 0x0001, 0x378b: 0x0001, + 0x378c: 0x0001, 0x378d: 0x0001, 0x378e: 0x0001, 0x378f: 0x0001, 0x3790: 0x000c, 0x3791: 0x000c, + 0x3792: 0x000c, 0x3793: 0x000c, 0x3794: 0x000c, 0x3795: 0x000c, 0x3796: 0x000c, 0x3797: 0x0001, + 0x3798: 0x0001, 0x3799: 0x0001, 0x379a: 0x0001, 0x379b: 0x0001, 0x379c: 0x0001, 0x379d: 0x0001, + 0x379e: 0x0001, 0x379f: 0x0001, 0x37a0: 0x0001, 0x37a1: 0x0001, 0x37a2: 0x0001, 0x37a3: 0x0001, + 0x37a4: 0x0001, 0x37a5: 0x0001, 0x37a6: 0x0001, 0x37a7: 0x0001, 0x37a8: 0x0001, 0x37a9: 0x0001, + 0x37aa: 0x0001, 0x37ab: 0x0001, 0x37ac: 0x0001, 0x37ad: 0x0001, 0x37ae: 0x0001, 0x37af: 0x0001, + 0x37b0: 0x0001, 0x37b1: 0x0001, 0x37b2: 0x0001, 0x37b3: 0x0001, 0x37b4: 0x0001, 0x37b5: 0x0001, + 0x37b6: 0x0001, 0x37b7: 0x0001, 0x37b8: 0x0001, 0x37b9: 0x0001, 0x37ba: 0x0001, 0x37bb: 0x0001, + 0x37bc: 0x0001, 0x37bd: 0x0001, 0x37be: 0x0001, 0x37bf: 0x0001, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x0001, 0x37c1: 0x0001, 0x37c2: 0x0001, 0x37c3: 0x0001, 0x37c4: 0x000c, 0x37c5: 0x000c, + 0x37c6: 0x000c, 0x37c7: 0x000c, 0x37c8: 0x000c, 0x37c9: 0x000c, 0x37ca: 0x000c, 0x37cb: 0x0001, + 0x37cc: 0x0001, 0x37cd: 0x0001, 0x37ce: 0x0001, 0x37cf: 0x0001, 0x37d0: 0x0001, 0x37d1: 0x0001, + 0x37d2: 0x0001, 0x37d3: 0x0001, 0x37d4: 0x0001, 0x37d5: 0x0001, 0x37d6: 0x0001, 0x37d7: 0x0001, + 0x37d8: 0x0001, 0x37d9: 0x0001, 0x37da: 0x0001, 0x37db: 0x0001, 0x37dc: 0x0001, 0x37dd: 0x0001, + 0x37de: 0x0001, 0x37df: 0x0001, 0x37e0: 0x0001, 0x37e1: 0x0001, 0x37e2: 0x0001, 0x37e3: 0x0001, + 0x37e4: 0x0001, 0x37e5: 0x0001, 0x37e6: 0x0001, 0x37e7: 0x0001, 0x37e8: 0x0001, 0x37e9: 0x0001, + 0x37ea: 0x0001, 0x37eb: 0x0001, 0x37ec: 0x0001, 0x37ed: 0x0001, 0x37ee: 0x0001, 0x37ef: 0x0001, + 0x37f0: 0x0001, 0x37f1: 0x0001, 0x37f2: 0x0001, 0x37f3: 0x0001, 0x37f4: 0x0001, 0x37f5: 0x0001, + 0x37f6: 0x0001, 0x37f7: 0x0001, 0x37f8: 0x0001, 0x37f9: 0x0001, 0x37fa: 0x0001, 0x37fb: 0x0001, + 0x37fc: 0x0001, 0x37fd: 0x0001, 0x37fe: 0x0001, 0x37ff: 0x0001, + // Block 0xe0, offset 0x3800 + 0x3800: 0x000d, 0x3801: 0x000d, 0x3802: 0x000d, 0x3803: 0x000d, 0x3804: 0x000d, 0x3805: 0x000d, + 0x3806: 0x000d, 0x3807: 0x000d, 0x3808: 0x000d, 0x3809: 0x000d, 0x380a: 0x000d, 0x380b: 0x000d, + 0x380c: 0x000d, 0x380d: 0x000d, 0x380e: 0x000d, 0x380f: 0x000d, 0x3810: 0x0001, 0x3811: 0x0001, + 0x3812: 0x0001, 0x3813: 0x0001, 0x3814: 0x0001, 0x3815: 0x0001, 0x3816: 0x0001, 0x3817: 0x0001, + 0x3818: 0x0001, 0x3819: 0x0001, 0x381a: 0x0001, 0x381b: 0x0001, 0x381c: 0x0001, 0x381d: 0x0001, + 0x381e: 0x0001, 0x381f: 0x0001, 0x3820: 0x0001, 0x3821: 0x0001, 0x3822: 0x0001, 0x3823: 0x0001, + 0x3824: 0x0001, 0x3825: 0x0001, 0x3826: 0x0001, 0x3827: 0x0001, 0x3828: 0x0001, 0x3829: 0x0001, + 0x382a: 0x0001, 0x382b: 0x0001, 0x382c: 0x0001, 0x382d: 0x0001, 0x382e: 0x0001, 0x382f: 0x0001, + 0x3830: 0x0001, 0x3831: 0x0001, 0x3832: 0x0001, 0x3833: 0x0001, 0x3834: 0x0001, 0x3835: 0x0001, + 0x3836: 0x0001, 0x3837: 0x0001, 0x3838: 0x0001, 0x3839: 0x0001, 0x383a: 0x0001, 0x383b: 0x0001, + 0x383c: 0x0001, 0x383d: 0x0001, 0x383e: 0x0001, 0x383f: 0x0001, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000d, 0x3841: 0x000d, 0x3842: 0x000d, 0x3843: 0x000d, 0x3844: 0x000d, 0x3845: 0x000d, + 0x3846: 0x000d, 0x3847: 0x000d, 0x3848: 0x000d, 0x3849: 0x000d, 0x384a: 0x000d, 0x384b: 0x000d, + 0x384c: 0x000d, 0x384d: 0x000d, 0x384e: 0x000d, 0x384f: 0x000d, 0x3850: 0x000d, 0x3851: 0x000d, + 0x3852: 0x000d, 0x3853: 0x000d, 0x3854: 0x000d, 0x3855: 0x000d, 0x3856: 0x000d, 0x3857: 0x000d, + 0x3858: 0x000d, 0x3859: 0x000d, 0x385a: 0x000d, 0x385b: 0x000d, 0x385c: 0x000d, 0x385d: 0x000d, + 0x385e: 0x000d, 0x385f: 0x000d, 0x3860: 0x000d, 0x3861: 0x000d, 0x3862: 0x000d, 0x3863: 0x000d, + 0x3864: 0x000d, 0x3865: 0x000d, 0x3866: 0x000d, 0x3867: 0x000d, 0x3868: 0x000d, 0x3869: 0x000d, + 0x386a: 0x000d, 0x386b: 0x000d, 0x386c: 0x000d, 0x386d: 0x000d, 0x386e: 0x000d, 0x386f: 0x000d, + 0x3870: 0x000a, 0x3871: 0x000a, 0x3872: 0x000d, 0x3873: 0x000d, 0x3874: 0x000d, 0x3875: 0x000d, + 0x3876: 0x000d, 0x3877: 0x000d, 0x3878: 0x000d, 0x3879: 0x000d, 0x387a: 0x000d, 0x387b: 0x000d, + 0x387c: 0x000d, 0x387d: 0x000d, 0x387e: 0x000d, 0x387f: 0x000d, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, + 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, + 0x388c: 0x000a, 0x388d: 0x000a, 0x388e: 0x000a, 0x388f: 0x000a, 0x3890: 0x000a, 0x3891: 0x000a, + 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a, + 0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a, + 0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, + 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, + 0x38aa: 0x000a, 0x38ab: 0x000a, + 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, + 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a, + 0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a, 0x38bf: 0x000a, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, + 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, + 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, + 0x38d2: 0x000a, 0x38d3: 0x000a, + 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, + 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, + 0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, + 0x38f1: 0x000a, 0x38f2: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a, + 0x38f6: 0x000a, 0x38f7: 0x000a, 0x38f8: 0x000a, 0x38f9: 0x000a, 0x38fa: 0x000a, 0x38fb: 0x000a, + 0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a, + // Block 0xe4, offset 0x3900 + 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, + 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, + 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3911: 0x000a, + 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, + 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, + 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, 0x3923: 0x000a, + 0x3924: 0x000a, 0x3925: 0x000a, 0x3926: 0x000a, 0x3927: 0x000a, 0x3928: 0x000a, 0x3929: 0x000a, + 0x392a: 0x000a, 0x392b: 0x000a, 0x392c: 0x000a, 0x392d: 0x000a, 0x392e: 0x000a, 0x392f: 0x000a, + 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, + // Block 0xe5, offset 0x3940 + 0x3940: 0x0002, 0x3941: 0x0002, 0x3942: 0x0002, 0x3943: 0x0002, 0x3944: 0x0002, 0x3945: 0x0002, + 0x3946: 0x0002, 0x3947: 0x0002, 0x3948: 0x0002, 0x3949: 0x0002, 0x394a: 0x0002, 0x394b: 0x000a, + 0x394c: 0x000a, 0x394d: 0x000a, 0x394e: 0x000a, 0x394f: 0x000a, + 0x396f: 0x000a, + // Block 0xe6, offset 0x3980 + 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, 0x39ae: 0x000a, 0x39af: 0x000a, + // Block 0xe7, offset 0x39c0 + 0x39ed: 0x000a, + // Block 0xe8, offset 0x3a00 + 0x3a20: 0x000a, 0x3a21: 0x000a, 0x3a22: 0x000a, 0x3a23: 0x000a, + 0x3a24: 0x000a, 0x3a25: 0x000a, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x000a, 0x3a41: 0x000a, 0x3a42: 0x000a, 0x3a43: 0x000a, 0x3a44: 0x000a, 0x3a45: 0x000a, + 0x3a46: 0x000a, 0x3a47: 0x000a, 0x3a48: 0x000a, 0x3a49: 0x000a, 0x3a4a: 0x000a, 0x3a4b: 0x000a, + 0x3a4c: 0x000a, 0x3a4d: 0x000a, 0x3a4e: 0x000a, 0x3a4f: 0x000a, 0x3a50: 0x000a, 0x3a51: 0x000a, + 0x3a52: 0x000a, 0x3a53: 0x000a, 0x3a54: 0x000a, 0x3a55: 0x000a, 0x3a56: 0x000a, 0x3a57: 0x000a, + 0x3a60: 0x000a, 0x3a61: 0x000a, 0x3a62: 0x000a, 0x3a63: 0x000a, + 0x3a64: 0x000a, 0x3a65: 0x000a, 0x3a66: 0x000a, 0x3a67: 0x000a, 0x3a68: 0x000a, 0x3a69: 0x000a, + 0x3a6a: 0x000a, 0x3a6b: 0x000a, 0x3a6c: 0x000a, + 0x3a70: 0x000a, 0x3a71: 0x000a, 0x3a72: 0x000a, 0x3a73: 0x000a, 0x3a74: 0x000a, 0x3a75: 0x000a, + 0x3a76: 0x000a, 0x3a77: 0x000a, 0x3a78: 0x000a, 0x3a79: 0x000a, 0x3a7a: 0x000a, 0x3a7b: 0x000a, + 0x3a7c: 0x000a, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x000a, 0x3a81: 0x000a, 0x3a82: 0x000a, 0x3a83: 0x000a, 0x3a84: 0x000a, 0x3a85: 0x000a, + 0x3a86: 0x000a, 0x3a87: 0x000a, 0x3a88: 0x000a, 0x3a89: 0x000a, 0x3a8a: 0x000a, 0x3a8b: 0x000a, + 0x3a8c: 0x000a, 0x3a8d: 0x000a, 0x3a8e: 0x000a, 0x3a8f: 0x000a, 0x3a90: 0x000a, 0x3a91: 0x000a, + 0x3a92: 0x000a, 0x3a93: 0x000a, 0x3a94: 0x000a, 0x3a95: 0x000a, 0x3a96: 0x000a, 0x3a97: 0x000a, + 0x3a98: 0x000a, + 0x3aa0: 0x000a, 0x3aa1: 0x000a, 0x3aa2: 0x000a, 0x3aa3: 0x000a, + 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x000a, 0x3aa8: 0x000a, 0x3aa9: 0x000a, + 0x3aaa: 0x000a, 0x3aab: 0x000a, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000a, 0x3ac1: 0x000a, 0x3ac2: 0x000a, 0x3ac3: 0x000a, 0x3ac4: 0x000a, 0x3ac5: 0x000a, + 0x3ac6: 0x000a, 0x3ac7: 0x000a, 0x3ac8: 0x000a, 0x3ac9: 0x000a, 0x3aca: 0x000a, 0x3acb: 0x000a, + 0x3ad0: 0x000a, 0x3ad1: 0x000a, + 0x3ad2: 0x000a, 0x3ad3: 0x000a, 0x3ad4: 0x000a, 0x3ad5: 0x000a, 0x3ad6: 0x000a, 0x3ad7: 0x000a, + 0x3ad8: 0x000a, 0x3ad9: 0x000a, 0x3ada: 0x000a, 0x3adb: 0x000a, 0x3adc: 0x000a, 0x3add: 0x000a, + 0x3ade: 0x000a, 0x3adf: 0x000a, 0x3ae0: 0x000a, 0x3ae1: 0x000a, 0x3ae2: 0x000a, 0x3ae3: 0x000a, + 0x3ae4: 0x000a, 0x3ae5: 0x000a, 0x3ae6: 0x000a, 0x3ae7: 0x000a, 0x3ae8: 0x000a, 0x3ae9: 0x000a, + 0x3aea: 0x000a, 0x3aeb: 0x000a, 0x3aec: 0x000a, 0x3aed: 0x000a, 0x3aee: 0x000a, 0x3aef: 0x000a, + 0x3af0: 0x000a, 0x3af1: 0x000a, 0x3af2: 0x000a, 0x3af3: 0x000a, 0x3af4: 0x000a, 0x3af5: 0x000a, + 0x3af6: 0x000a, 0x3af7: 0x000a, 0x3af8: 0x000a, 0x3af9: 0x000a, 0x3afa: 0x000a, 0x3afb: 0x000a, + 0x3afc: 0x000a, 0x3afd: 0x000a, 0x3afe: 0x000a, 0x3aff: 0x000a, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x000a, 0x3b01: 0x000a, 0x3b02: 0x000a, 0x3b03: 0x000a, 0x3b04: 0x000a, 0x3b05: 0x000a, + 0x3b06: 0x000a, 0x3b07: 0x000a, + 0x3b10: 0x000a, 0x3b11: 0x000a, + 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, 0x3b16: 0x000a, 0x3b17: 0x000a, + 0x3b18: 0x000a, 0x3b19: 0x000a, + 0x3b20: 0x000a, 0x3b21: 0x000a, 0x3b22: 0x000a, 0x3b23: 0x000a, + 0x3b24: 0x000a, 0x3b25: 0x000a, 0x3b26: 0x000a, 0x3b27: 0x000a, 0x3b28: 0x000a, 0x3b29: 0x000a, + 0x3b2a: 0x000a, 0x3b2b: 0x000a, 0x3b2c: 0x000a, 0x3b2d: 0x000a, 0x3b2e: 0x000a, 0x3b2f: 0x000a, + 0x3b30: 0x000a, 0x3b31: 0x000a, 0x3b32: 0x000a, 0x3b33: 0x000a, 0x3b34: 0x000a, 0x3b35: 0x000a, + 0x3b36: 0x000a, 0x3b37: 0x000a, 0x3b38: 0x000a, 0x3b39: 0x000a, 0x3b3a: 0x000a, 0x3b3b: 0x000a, + 0x3b3c: 0x000a, 0x3b3d: 0x000a, 0x3b3e: 0x000a, 0x3b3f: 0x000a, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x000a, 0x3b41: 0x000a, 0x3b42: 0x000a, 0x3b43: 0x000a, 0x3b44: 0x000a, 0x3b45: 0x000a, + 0x3b46: 0x000a, 0x3b47: 0x000a, + 0x3b50: 0x000a, 0x3b51: 0x000a, + 0x3b52: 0x000a, 0x3b53: 0x000a, 0x3b54: 0x000a, 0x3b55: 0x000a, 0x3b56: 0x000a, 0x3b57: 0x000a, + 0x3b58: 0x000a, 0x3b59: 0x000a, 0x3b5a: 0x000a, 0x3b5b: 0x000a, 0x3b5c: 0x000a, 0x3b5d: 0x000a, + 0x3b5e: 0x000a, 0x3b5f: 0x000a, 0x3b60: 0x000a, 0x3b61: 0x000a, 0x3b62: 0x000a, 0x3b63: 0x000a, + 0x3b64: 0x000a, 0x3b65: 0x000a, 0x3b66: 0x000a, 0x3b67: 0x000a, 0x3b68: 0x000a, 0x3b69: 0x000a, + 0x3b6a: 0x000a, 0x3b6b: 0x000a, 0x3b6c: 0x000a, 0x3b6d: 0x000a, + 0x3b70: 0x000a, 0x3b71: 0x000a, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x000a, 0x3b81: 0x000a, 0x3b82: 0x000a, 0x3b83: 0x000a, 0x3b84: 0x000a, 0x3b85: 0x000a, + 0x3b86: 0x000a, 0x3b87: 0x000a, 0x3b88: 0x000a, 0x3b89: 0x000a, 0x3b8a: 0x000a, 0x3b8b: 0x000a, + 0x3b8c: 0x000a, 0x3b8d: 0x000a, 0x3b8e: 0x000a, 0x3b8f: 0x000a, 0x3b90: 0x000a, 0x3b91: 0x000a, + 0x3b92: 0x000a, 0x3b93: 0x000a, 0x3b94: 0x000a, 0x3b95: 0x000a, 0x3b96: 0x000a, 0x3b97: 0x000a, + 0x3b98: 0x000a, 0x3b99: 0x000a, 0x3b9a: 0x000a, 0x3b9b: 0x000a, 0x3b9c: 0x000a, 0x3b9d: 0x000a, + 0x3b9e: 0x000a, 0x3b9f: 0x000a, 0x3ba0: 0x000a, 0x3ba1: 0x000a, 0x3ba2: 0x000a, 0x3ba3: 0x000a, + 0x3ba4: 0x000a, 0x3ba5: 0x000a, 0x3ba6: 0x000a, 0x3ba7: 0x000a, 0x3ba8: 0x000a, 0x3ba9: 0x000a, + 0x3baa: 0x000a, 0x3bab: 0x000a, 0x3bac: 0x000a, 0x3bad: 0x000a, 0x3bae: 0x000a, 0x3baf: 0x000a, + 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, + 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bba: 0x000a, 0x3bbb: 0x000a, + 0x3bbc: 0x000a, 0x3bbd: 0x000a, 0x3bbe: 0x000a, 0x3bbf: 0x000a, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x000a, 0x3bc1: 0x000a, 0x3bc2: 0x000a, 0x3bc3: 0x000a, 0x3bc4: 0x000a, 0x3bc5: 0x000a, + 0x3bc6: 0x000a, 0x3bc7: 0x000a, 0x3bc8: 0x000a, 0x3bc9: 0x000a, 0x3bca: 0x000a, 0x3bcb: 0x000a, + 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, + 0x3bd2: 0x000a, 0x3bd3: 0x000a, 0x3bd4: 0x000a, 0x3bd5: 0x000a, 0x3bd6: 0x000a, 0x3bd7: 0x000a, + 0x3bd8: 0x000a, 0x3bd9: 0x000a, 0x3bda: 0x000a, 0x3bdb: 0x000a, 0x3bdc: 0x000a, 0x3bdd: 0x000a, + 0x3bde: 0x000a, 0x3bdf: 0x000a, 0x3be0: 0x000a, 0x3be1: 0x000a, 0x3be2: 0x000a, 0x3be3: 0x000a, + 0x3be4: 0x000a, 0x3be5: 0x000a, 0x3be6: 0x000a, 0x3be7: 0x000a, 0x3be8: 0x000a, 0x3be9: 0x000a, + 0x3bea: 0x000a, 0x3beb: 0x000a, 0x3bec: 0x000a, 0x3bed: 0x000a, 0x3bee: 0x000a, 0x3bef: 0x000a, + 0x3bf0: 0x000a, 0x3bf1: 0x000a, 0x3bf2: 0x000a, 0x3bf3: 0x000a, 0x3bf4: 0x000a, 0x3bf5: 0x000a, + 0x3bf6: 0x000a, 0x3bf7: 0x000a, 0x3bf8: 0x000a, 0x3bf9: 0x000a, 0x3bfa: 0x000a, 0x3bfb: 0x000a, + 0x3bfc: 0x000a, 0x3bfd: 0x000a, 0x3bfe: 0x000a, 0x3bff: 0x000a, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x000a, 0x3c01: 0x000a, 0x3c02: 0x000a, 0x3c03: 0x000a, 0x3c04: 0x000a, 0x3c05: 0x000a, + 0x3c06: 0x000a, 0x3c07: 0x000a, 0x3c08: 0x000a, 0x3c09: 0x000a, 0x3c0a: 0x000a, 0x3c0b: 0x000a, + 0x3c0c: 0x000a, 0x3c0d: 0x000a, 0x3c0e: 0x000a, 0x3c0f: 0x000a, 0x3c10: 0x000a, 0x3c11: 0x000a, + 0x3c12: 0x000a, 0x3c13: 0x000a, + 0x3c20: 0x000a, 0x3c21: 0x000a, 0x3c22: 0x000a, 0x3c23: 0x000a, + 0x3c24: 0x000a, 0x3c25: 0x000a, 0x3c26: 0x000a, 0x3c27: 0x000a, 0x3c28: 0x000a, 0x3c29: 0x000a, + 0x3c2a: 0x000a, 0x3c2b: 0x000a, 0x3c2c: 0x000a, 0x3c2d: 0x000a, + 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, + 0x3c38: 0x000a, 0x3c39: 0x000a, 0x3c3a: 0x000a, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x000a, 0x3c41: 0x000a, 0x3c42: 0x000a, 0x3c43: 0x000a, 0x3c44: 0x000a, 0x3c45: 0x000a, + 0x3c46: 0x000a, + 0x3c50: 0x000a, 0x3c51: 0x000a, + 0x3c52: 0x000a, 0x3c53: 0x000a, 0x3c54: 0x000a, 0x3c55: 0x000a, 0x3c56: 0x000a, 0x3c57: 0x000a, + 0x3c58: 0x000a, 0x3c59: 0x000a, 0x3c5a: 0x000a, 0x3c5b: 0x000a, 0x3c5c: 0x000a, 0x3c5d: 0x000a, + 0x3c5e: 0x000a, 0x3c5f: 0x000a, 0x3c60: 0x000a, 0x3c61: 0x000a, 0x3c62: 0x000a, 0x3c63: 0x000a, + 0x3c64: 0x000a, 0x3c65: 0x000a, 0x3c66: 0x000a, 0x3c67: 0x000a, 0x3c68: 0x000a, + 0x3c70: 0x000a, 0x3c71: 0x000a, 0x3c72: 0x000a, 0x3c73: 0x000a, 0x3c74: 0x000a, 0x3c75: 0x000a, + 0x3c76: 0x000a, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x000a, 0x3c81: 0x000a, 0x3c82: 0x000a, + 0x3c90: 0x000a, 0x3c91: 0x000a, + 0x3c92: 0x000a, 0x3c93: 0x000a, 0x3c94: 0x000a, 0x3c95: 0x000a, 0x3c96: 0x000a, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x000a, 0x3cc1: 0x000a, 0x3cc2: 0x000a, 0x3cc3: 0x000a, 0x3cc4: 0x000a, 0x3cc5: 0x000a, + 0x3cc6: 0x000a, 0x3cc7: 0x000a, 0x3cc8: 0x000a, 0x3cc9: 0x000a, 0x3cca: 0x000a, 0x3ccb: 0x000a, + 0x3ccc: 0x000a, 0x3ccd: 0x000a, 0x3cce: 0x000a, 0x3ccf: 0x000a, 0x3cd0: 0x000a, 0x3cd1: 0x000a, + 0x3cd2: 0x000a, 0x3cd4: 0x000a, 0x3cd5: 0x000a, 0x3cd6: 0x000a, 0x3cd7: 0x000a, + 0x3cd8: 0x000a, 0x3cd9: 0x000a, 0x3cda: 0x000a, 0x3cdb: 0x000a, 0x3cdc: 0x000a, 0x3cdd: 0x000a, + 0x3cde: 0x000a, 0x3cdf: 0x000a, 0x3ce0: 0x000a, 0x3ce1: 0x000a, 0x3ce2: 0x000a, 0x3ce3: 0x000a, + 0x3ce4: 0x000a, 0x3ce5: 0x000a, 0x3ce6: 0x000a, 0x3ce7: 0x000a, 0x3ce8: 0x000a, 0x3ce9: 0x000a, + 0x3cea: 0x000a, 0x3ceb: 0x000a, 0x3cec: 0x000a, 0x3ced: 0x000a, 0x3cee: 0x000a, 0x3cef: 0x000a, + 0x3cf0: 0x000a, 0x3cf1: 0x000a, 0x3cf2: 0x000a, 0x3cf3: 0x000a, 0x3cf4: 0x000a, 0x3cf5: 0x000a, + 0x3cf6: 0x000a, 0x3cf7: 0x000a, 0x3cf8: 0x000a, 0x3cf9: 0x000a, 0x3cfa: 0x000a, 0x3cfb: 0x000a, + 0x3cfc: 0x000a, 0x3cfd: 0x000a, 0x3cfe: 0x000a, 0x3cff: 0x000a, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x000a, 0x3d01: 0x000a, 0x3d02: 0x000a, 0x3d03: 0x000a, 0x3d04: 0x000a, 0x3d05: 0x000a, + 0x3d06: 0x000a, 0x3d07: 0x000a, 0x3d08: 0x000a, 0x3d09: 0x000a, 0x3d0a: 0x000a, + 0x3d30: 0x0002, 0x3d31: 0x0002, 0x3d32: 0x0002, 0x3d33: 0x0002, 0x3d34: 0x0002, 0x3d35: 0x0002, + 0x3d36: 0x0002, 0x3d37: 0x0002, 0x3d38: 0x0002, 0x3d39: 0x0002, + // Block 0xf5, offset 0x3d40 + 0x3d7e: 0x000b, 0x3d7f: 0x000b, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x000b, 0x3d81: 0x000b, 0x3d82: 0x000b, 0x3d83: 0x000b, 0x3d84: 0x000b, 0x3d85: 0x000b, + 0x3d86: 0x000b, 0x3d87: 0x000b, 0x3d88: 0x000b, 0x3d89: 0x000b, 0x3d8a: 0x000b, 0x3d8b: 0x000b, + 0x3d8c: 0x000b, 0x3d8d: 0x000b, 0x3d8e: 0x000b, 0x3d8f: 0x000b, 0x3d90: 0x000b, 0x3d91: 0x000b, + 0x3d92: 0x000b, 0x3d93: 0x000b, 0x3d94: 0x000b, 0x3d95: 0x000b, 0x3d96: 0x000b, 0x3d97: 0x000b, + 0x3d98: 0x000b, 0x3d99: 0x000b, 0x3d9a: 0x000b, 0x3d9b: 0x000b, 0x3d9c: 0x000b, 0x3d9d: 0x000b, + 0x3d9e: 0x000b, 0x3d9f: 0x000b, 0x3da0: 0x000b, 0x3da1: 0x000b, 0x3da2: 0x000b, 0x3da3: 0x000b, + 0x3da4: 0x000b, 0x3da5: 0x000b, 0x3da6: 0x000b, 0x3da7: 0x000b, 0x3da8: 0x000b, 0x3da9: 0x000b, + 0x3daa: 0x000b, 0x3dab: 0x000b, 0x3dac: 0x000b, 0x3dad: 0x000b, 0x3dae: 0x000b, 0x3daf: 0x000b, + 0x3db0: 0x000b, 0x3db1: 0x000b, 0x3db2: 0x000b, 0x3db3: 0x000b, 0x3db4: 0x000b, 0x3db5: 0x000b, + 0x3db6: 0x000b, 0x3db7: 0x000b, 0x3db8: 0x000b, 0x3db9: 0x000b, 0x3dba: 0x000b, 0x3dbb: 0x000b, + 0x3dbc: 0x000b, 0x3dbd: 0x000b, 0x3dbe: 0x000b, 0x3dbf: 0x000b, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x000c, 0x3dc1: 0x000c, 0x3dc2: 0x000c, 0x3dc3: 0x000c, 0x3dc4: 0x000c, 0x3dc5: 0x000c, + 0x3dc6: 0x000c, 0x3dc7: 0x000c, 0x3dc8: 0x000c, 0x3dc9: 0x000c, 0x3dca: 0x000c, 0x3dcb: 0x000c, + 0x3dcc: 0x000c, 0x3dcd: 0x000c, 0x3dce: 0x000c, 0x3dcf: 0x000c, 0x3dd0: 0x000c, 0x3dd1: 0x000c, + 0x3dd2: 0x000c, 0x3dd3: 0x000c, 0x3dd4: 0x000c, 0x3dd5: 0x000c, 0x3dd6: 0x000c, 0x3dd7: 0x000c, + 0x3dd8: 0x000c, 0x3dd9: 0x000c, 0x3dda: 0x000c, 0x3ddb: 0x000c, 0x3ddc: 0x000c, 0x3ddd: 0x000c, + 0x3dde: 0x000c, 0x3ddf: 0x000c, 0x3de0: 0x000c, 0x3de1: 0x000c, 0x3de2: 0x000c, 0x3de3: 0x000c, + 0x3de4: 0x000c, 0x3de5: 0x000c, 0x3de6: 0x000c, 0x3de7: 0x000c, 0x3de8: 0x000c, 0x3de9: 0x000c, + 0x3dea: 0x000c, 0x3deb: 0x000c, 0x3dec: 0x000c, 0x3ded: 0x000c, 0x3dee: 0x000c, 0x3def: 0x000c, + 0x3df0: 0x000b, 0x3df1: 0x000b, 0x3df2: 0x000b, 0x3df3: 0x000b, 0x3df4: 0x000b, 0x3df5: 0x000b, + 0x3df6: 0x000b, 0x3df7: 0x000b, 0x3df8: 0x000b, 0x3df9: 0x000b, 0x3dfa: 0x000b, 0x3dfb: 0x000b, + 0x3dfc: 0x000b, 0x3dfd: 0x000b, 0x3dfe: 0x000b, 0x3dff: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, + 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, + // Block 0x5, offset 0x140 + 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, + 0x14d: 0x35, 0x14e: 0x36, + 0x150: 0x37, + 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, + 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, + 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, + 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x4c, + 0x17e: 0x4d, 0x17f: 0x4e, + // Block 0x6, offset 0x180 + 0x180: 0x4f, 0x181: 0x50, 0x182: 0x51, 0x183: 0x52, 0x184: 0x53, 0x185: 0x54, 0x186: 0x55, 0x187: 0x56, + 0x188: 0x57, 0x189: 0x56, 0x18a: 0x56, 0x18b: 0x56, 0x18c: 0x58, 0x18d: 0x59, 0x18e: 0x5a, 0x18f: 0x56, + 0x190: 0x5b, 0x191: 0x5c, 0x192: 0x5d, 0x193: 0x5e, 0x194: 0x56, 0x195: 0x56, 0x196: 0x56, 0x197: 0x56, + 0x198: 0x56, 0x199: 0x56, 0x19a: 0x5f, 0x19b: 0x56, 0x19c: 0x56, 0x19d: 0x60, 0x19e: 0x56, 0x19f: 0x61, + 0x1a4: 0x56, 0x1a5: 0x56, 0x1a6: 0x62, 0x1a7: 0x63, + 0x1a8: 0x56, 0x1a9: 0x56, 0x1aa: 0x56, 0x1ab: 0x56, 0x1ac: 0x56, 0x1ad: 0x64, 0x1ae: 0x65, 0x1af: 0x56, + 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, + 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x56, 0x1bd: 0x56, 0x1be: 0x56, 0x1bf: 0x6d, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, + 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, + // Block 0x8, offset 0x200 + 0x237: 0x56, + // Block 0x9, offset 0x240 + 0x252: 0x78, 0x253: 0x79, + 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, + 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26d: 0x8b, 0x26f: 0x8c, + // Block 0xa, offset 0x280 + 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8f, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x90, + 0x2b8: 0x91, 0x2b9: 0x92, 0x2ba: 0x0e, 0x2bb: 0x93, 0x2bc: 0x94, 0x2bd: 0x95, 0x2bf: 0x96, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x97, 0x2c5: 0x56, 0x2c6: 0x98, 0x2c7: 0x99, + 0x2cb: 0x9a, 0x2cd: 0x9b, + 0x2e0: 0x9c, 0x2e1: 0x9c, 0x2e2: 0x9c, 0x2e3: 0x9c, 0x2e4: 0x9d, 0x2e5: 0x9c, 0x2e6: 0x9c, 0x2e7: 0x9c, + 0x2e8: 0x9e, 0x2e9: 0x9c, 0x2ea: 0x9c, 0x2eb: 0x9f, 0x2ec: 0xa0, 0x2ed: 0x9c, 0x2ee: 0x9c, 0x2ef: 0x9c, + 0x2f0: 0x9c, 0x2f1: 0x9c, 0x2f2: 0x9c, 0x2f3: 0x9c, 0x2f4: 0xa1, 0x2f5: 0x9c, 0x2f6: 0x9c, 0x2f7: 0x9c, + 0x2f8: 0x9c, 0x2f9: 0xa2, 0x2fa: 0xa3, 0x2fb: 0x9c, 0x2fc: 0xa4, 0x2fd: 0xa5, 0x2fe: 0x9c, 0x2ff: 0x9c, + // Block 0xc, offset 0x300 + 0x300: 0xa6, 0x301: 0xa7, 0x302: 0xa8, 0x304: 0xa9, 0x305: 0xaa, 0x306: 0xab, 0x307: 0xac, + 0x308: 0xad, 0x30b: 0xae, 0x30c: 0x26, 0x30d: 0xaf, + 0x310: 0xb0, 0x311: 0xb1, 0x312: 0xb2, 0x313: 0xb3, 0x316: 0xb4, 0x317: 0xb5, + 0x318: 0xb6, 0x319: 0xb7, 0x31a: 0xb8, 0x31c: 0xb9, + 0x320: 0xba, 0x324: 0xbb, 0x325: 0xbc, 0x327: 0xbd, + 0x328: 0xbe, 0x329: 0xbf, 0x32a: 0xc0, + 0x330: 0xc1, 0x332: 0xc2, 0x334: 0xc3, 0x335: 0xc4, 0x336: 0xc5, + 0x33b: 0xc6, 0x33f: 0xc7, + // Block 0xd, offset 0x340 + 0x36b: 0xc8, 0x36c: 0xc9, + 0x37d: 0xca, 0x37e: 0xcb, 0x37f: 0xcc, + // Block 0xe, offset 0x380 + 0x3b2: 0xcd, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xce, 0x3c6: 0xcf, + 0x3c8: 0x56, 0x3c9: 0xd0, 0x3cc: 0x56, 0x3cd: 0xd1, + 0x3db: 0xd2, 0x3dc: 0xd3, 0x3dd: 0xd4, 0x3de: 0xd5, 0x3df: 0xd6, + 0x3e8: 0xd7, 0x3e9: 0xd8, 0x3ea: 0xd9, + // Block 0x10, offset 0x400 + 0x400: 0xda, 0x404: 0xc9, + 0x40b: 0xdb, + 0x420: 0x9c, 0x421: 0x9c, 0x422: 0x9c, 0x423: 0xdc, 0x424: 0x9c, 0x425: 0xdd, 0x426: 0x9c, 0x427: 0x9c, + 0x428: 0x9c, 0x429: 0x9c, 0x42a: 0x9c, 0x42b: 0x9c, 0x42c: 0x9c, 0x42d: 0x9c, 0x42e: 0x9c, 0x42f: 0x9c, + 0x430: 0x9c, 0x431: 0xa4, 0x432: 0x0e, 0x433: 0x9c, 0x434: 0x0e, 0x435: 0xde, 0x436: 0x9c, 0x437: 0x9c, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xdf, 0x43c: 0x9c, 0x43d: 0x9c, 0x43e: 0x9c, 0x43f: 0x9c, + // Block 0x11, offset 0x440 + 0x440: 0xe0, 0x441: 0x56, 0x442: 0xe1, 0x443: 0xe2, 0x444: 0xe3, 0x445: 0xe4, 0x446: 0xe5, + 0x449: 0xe6, 0x44c: 0x56, 0x44d: 0x56, 0x44e: 0x56, 0x44f: 0x56, + 0x450: 0x56, 0x451: 0x56, 0x452: 0x56, 0x453: 0x56, 0x454: 0x56, 0x455: 0x56, 0x456: 0x56, 0x457: 0x56, + 0x458: 0x56, 0x459: 0x56, 0x45a: 0x56, 0x45b: 0xe7, 0x45c: 0x56, 0x45d: 0x6c, 0x45e: 0x56, 0x45f: 0xe8, + 0x460: 0xe9, 0x461: 0xea, 0x462: 0xeb, 0x464: 0x56, 0x465: 0xec, 0x466: 0x56, 0x467: 0xed, + 0x468: 0x56, 0x469: 0xee, 0x46a: 0xef, 0x46b: 0xf0, 0x46c: 0x56, 0x46d: 0x56, 0x46e: 0xf1, 0x46f: 0xf2, + 0x47f: 0xf3, + // Block 0x12, offset 0x480 + 0x4bf: 0xf3, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xf4, 0x541: 0xf4, 0x542: 0xf4, 0x543: 0xf4, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xf5, + 0x548: 0xf4, 0x549: 0xf4, 0x54a: 0xf4, 0x54b: 0xf4, 0x54c: 0xf4, 0x54d: 0xf4, 0x54e: 0xf4, 0x54f: 0xf4, + 0x550: 0xf4, 0x551: 0xf4, 0x552: 0xf4, 0x553: 0xf4, 0x554: 0xf4, 0x555: 0xf4, 0x556: 0xf4, 0x557: 0xf4, + 0x558: 0xf4, 0x559: 0xf4, 0x55a: 0xf4, 0x55b: 0xf4, 0x55c: 0xf4, 0x55d: 0xf4, 0x55e: 0xf4, 0x55f: 0xf4, + 0x560: 0xf4, 0x561: 0xf4, 0x562: 0xf4, 0x563: 0xf4, 0x564: 0xf4, 0x565: 0xf4, 0x566: 0xf4, 0x567: 0xf4, + 0x568: 0xf4, 0x569: 0xf4, 0x56a: 0xf4, 0x56b: 0xf4, 0x56c: 0xf4, 0x56d: 0xf4, 0x56e: 0xf4, 0x56f: 0xf4, + 0x570: 0xf4, 0x571: 0xf4, 0x572: 0xf4, 0x573: 0xf4, 0x574: 0xf4, 0x575: 0xf4, 0x576: 0xf4, 0x577: 0xf4, + 0x578: 0xf4, 0x579: 0xf4, 0x57a: 0xf4, 0x57b: 0xf4, 0x57c: 0xf4, 0x57d: 0xf4, 0x57e: 0xf4, 0x57f: 0xf4, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 17464 bytes (17KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go new file mode 100644 index 0000000..f15746f --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go @@ -0,0 +1,2042 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go: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/bidi/tables9.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go new file mode 100644 index 0000000..c164d37 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go @@ -0,0 +1,1781 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build !go1.10 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 222 blocks, 14208 entries, 14208 bytes +// The third block is the zero block. +var bidiValues = [14208]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001, + 0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001, + 0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa01: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, + 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, + 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, + 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, + 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, + 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, + 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, + 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, + 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, + 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, + 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, + 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, + 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, + 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, + 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, + 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, + 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, + 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, + 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, + 0x1a2a: 0x000a, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, + 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, + 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, + // Block 0x69, offset 0x1a40 + 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, + 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, + 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, + 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, + 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, + 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, + 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, + 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, + 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, + 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, + 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, + 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, + 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, + 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, + 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, + 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, + 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, + 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, + 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, + 0x1c30: 0x000a, + 0x1c36: 0x000a, 0x1c37: 0x000a, + 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, + 0x1c60: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1cbb: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, + 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, + 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d1d: 0x000a, + 0x1d1e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d50: 0x000a, 0x1d51: 0x000a, + 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, + 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, + 0x1d5e: 0x000a, 0x1d5f: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, + 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, + 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e5e: 0x000a, 0x1e5f: 0x000a, + 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e90: 0x000a, 0x1e91: 0x000a, + 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, + 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, + 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, + 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, + 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, + 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, + 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, + 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, + 0x1ec6: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f6f: 0x000c, + 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, + 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, + 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, + // Block 0x7e, offset 0x1f80 + 0x1f9e: 0x000c, 0x1f9f: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1ff0: 0x000c, 0x1ff1: 0x000c, + // Block 0x80, offset 0x2000 + 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, + 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, + 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, + 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, + 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, + 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, + // Block 0x81, offset 0x2040 + 0x2048: 0x000a, + // Block 0x82, offset 0x2080 + 0x2082: 0x000c, + 0x2086: 0x000c, 0x208b: 0x000c, + 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, + 0x20aa: 0x000a, 0x20ab: 0x000a, + 0x20b8: 0x0004, 0x20b9: 0x0004, + // Block 0x83, offset 0x20c0 + 0x20f4: 0x000a, 0x20f5: 0x000a, + 0x20f6: 0x000a, 0x20f7: 0x000a, + // Block 0x84, offset 0x2100 + 0x2104: 0x000c, 0x2105: 0x000c, + 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, + 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, + 0x2130: 0x000c, 0x2131: 0x000c, + // Block 0x85, offset 0x2140 + 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, + 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, + // Block 0x86, offset 0x2180 + 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, + 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, + 0x21f3: 0x000c, + 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, + 0x21fc: 0x000c, + // Block 0x88, offset 0x2200 + 0x2225: 0x000c, + // Block 0x89, offset 0x2240 + 0x2269: 0x000c, + 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, + 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, + 0x2276: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2283: 0x000c, + 0x228c: 0x000c, + 0x22bc: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, + 0x22f7: 0x000c, 0x22f8: 0x000c, + 0x22fe: 0x000c, 0x22ff: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2301: 0x000c, + 0x232c: 0x000c, 0x232d: 0x000c, + 0x2336: 0x000c, + // Block 0x8d, offset 0x2340 + 0x2365: 0x000c, 0x2368: 0x000c, + 0x236d: 0x000c, + // Block 0x8e, offset 0x2380 + 0x239d: 0x0001, + 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, + 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, + 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, + 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, + 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, + 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, + 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, + 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, + // Block 0x91, offset 0x2440 + 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, + 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, + 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000b, 0x2451: 0x000b, + 0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b, + 0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b, + 0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b, + 0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b, + 0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c, + 0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c, + 0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a, + 0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x000a, + 0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c, + 0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c, + 0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c, + 0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a, + 0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a, + 0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a, + 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, + 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a, + 0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a, + 0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003, + 0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004, + 0x24ea: 0x0004, 0x24eb: 0x000a, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d, + // Block 0x94, offset 0x2500 + 0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d, + 0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d, + 0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d, + 0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d, + 0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d, + 0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d, + 0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d, + 0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d, + 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, + 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, + 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000b, + // Block 0x95, offset 0x2540 + 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004, + 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003, + 0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002, + 0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002, + 0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a, + 0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a, + 0x257b: 0x005a, + 0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a, + // Block 0x96, offset 0x2580 + 0x2580: 0x000a, + 0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a, + 0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a, + 0x25a4: 0x000a, 0x25a5: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a, + 0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a, + 0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a, + 0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b, + 0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a, + 0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b, + // Block 0x98, offset 0x2600 + 0x2601: 0x000a, + // Block 0x99, offset 0x2640 + 0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a, + 0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a, + 0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a, + 0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a, + 0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a, + 0x2660: 0x000a, + // Block 0x9a, offset 0x2680 + 0x26bd: 0x000c, + // Block 0x9b, offset 0x26c0 + 0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002, + 0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002, + 0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002, + 0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002, + 0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002, + // Block 0x9c, offset 0x2700 + 0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x000a, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c, + 0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a, + 0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, + 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, + 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, + 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, + 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, + 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, + // Block 0xa3, offset 0x28c0 + 0x28c1: 0x000c, + 0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c, + 0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c, + 0x2906: 0x000c, + 0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a, + 0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a, + 0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a, + 0x2924: 0x000a, 0x2925: 0x000a, + 0x293f: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, + 0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c, + 0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, + // Block 0xa6, offset 0x2980 + 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, + 0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c, + 0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c, + 0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29f3: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000c, 0x2a01: 0x000c, + 0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a4a: 0x000c, 0x2a4b: 0x000c, + 0x2a4c: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2aaf: 0x000c, + 0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c, + 0x2ab6: 0x000c, 0x2ab7: 0x000c, + 0x2abe: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2adf: 0x000c, 0x2ae3: 0x000c, + 0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, + 0x2aea: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, 0x2b01: 0x000c, + 0x2b3c: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, + 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, + 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, + 0x2bc6: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, + 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, + 0x2c3f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2cdc: 0x000c, 0x2cdd: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, + 0x2d3d: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, + 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, + 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, + 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, + // Block 0xb6, offset 0x2d80 + 0x2dab: 0x000c, 0x2dad: 0x000c, + 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db7: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2ddd: 0x000c, + 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, + 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, + 0x2dea: 0x000c, 0x2deb: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, + 0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c, + 0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c, + 0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c, + 0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c, + 0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c, + 0x2e76: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c, + 0x2ef6: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, + 0x2f12: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f5d: 0x000c, + 0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b, + // Block 0xbe, offset 0x2f80 + 0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c, + 0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b, + 0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c, + 0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c, + 0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c, + 0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a, + // Block 0xc1, offset 0x3040 + 0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a, + 0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a, + 0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a, + 0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a, + // Block 0xc2, offset 0x3080 + 0x309b: 0x000a, + // Block 0xc3, offset 0x30c0 + 0x30d5: 0x000a, + // Block 0xc4, offset 0x3100 + 0x310f: 0x000a, + // Block 0xc5, offset 0x3140 + 0x3149: 0x000a, + // Block 0xc6, offset 0x3180 + 0x3183: 0x000a, + 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, + 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, + 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, + 0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002, + 0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002, + 0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002, + 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002, + 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, + 0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c, + 0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c, + 0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c, + 0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c, + 0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c, + 0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, + 0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c, + 0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, + 0x31f6: 0x000c, 0x31fb: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, + 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, + 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, + 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c, + 0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c, + 0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c, + 0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c, + 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, + 0x3235: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3244: 0x000c, + 0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c, + 0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, + 0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c, + 0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c, + // Block 0xca, offset 0x3280 + 0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c, + 0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c, + 0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c, + 0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c, + 0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c, + 0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c, + 0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, + 0x32aa: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, + 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, + 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c, + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001, + 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, + 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, + 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, + 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001, + 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, + 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, + 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, + // Block 0xcc, offset 0x3300 + 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c, + 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001, + 0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001, + 0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001, + 0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001, + 0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, + 0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001, + 0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001, + 0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001, + 0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001, + 0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001, + // Block 0xcd, offset 0x3340 + 0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d, + 0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d, + 0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d, + 0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d, + 0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d, + 0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d, + 0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d, + 0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d, + 0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d, + 0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d, + 0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d, + // Block 0xce, offset 0x3380 + 0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a, + 0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a, + 0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a, + 0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a, + 0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a, + 0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a, + 0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a, + 0x33aa: 0x000a, 0x33ab: 0x000a, + 0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a, + 0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a, + 0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a, + 0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a, + 0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a, + 0x33d2: 0x000a, 0x33d3: 0x000a, + 0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a, + 0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a, + 0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a, + 0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a, + 0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a, + 0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a, + // Block 0xd0, offset 0x3400 + 0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a, + 0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a, + 0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a, + 0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a, + 0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a, + 0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a, + 0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a, + 0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a, + 0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a, + // Block 0xd1, offset 0x3440 + 0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002, + 0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a, + 0x344c: 0x000a, + // Block 0xd2, offset 0x3480 + 0x34aa: 0x000a, 0x34ab: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, + 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, + 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, + 0x34d2: 0x000a, + 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, + 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, + 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, + 0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, + 0x34f6: 0x000a, + // Block 0xd4, offset 0x3500 + 0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, + 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, + 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a, + 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a, + 0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a, + 0x3550: 0x000a, 0x3551: 0x000a, + 0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a, + 0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a, + 0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a, + 0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a, + 0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a, + 0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a, + 0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a, + 0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a, + 0x3586: 0x000a, 0x3587: 0x000a, + 0x3590: 0x000a, 0x3591: 0x000a, + 0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a, + 0x3598: 0x000a, 0x3599: 0x000a, + 0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a, + 0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a, + 0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a, + 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a, + 0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a, + 0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, + 0x35c6: 0x000a, 0x35c7: 0x000a, + 0x35d0: 0x000a, 0x35d1: 0x000a, + 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, + 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, + 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, + 0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a, + 0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a, + 0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, + 0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, + 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x3650: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, + 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, + 0x365e: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, + 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, + 0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36fe: 0x000b, 0x36ff: 0x000b, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b, + 0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b, + 0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b, + 0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b, + 0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b, + 0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b, + 0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b, + 0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b, + 0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b, + 0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b, + 0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c, + 0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c, + 0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c, + 0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c, + 0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c, + 0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c, + 0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c, + 0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, + 0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b, + 0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b, + 0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59, + 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65, + 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, + 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6d, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, + 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x78, 0x253: 0x79, + 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, + 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26f: 0x8b, + // Block 0xa, offset 0x280 + 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f, + 0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98, + 0x2cb: 0x99, 0x2cd: 0x9a, + 0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b, + 0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b, + 0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b, + 0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b, + // Block 0xc, offset 0x300 + 0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7, + 0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab, + 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, + 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, + 0x330: 0xb6, 0x332: 0xb7, + // Block 0xd, offset 0x340 + 0x36b: 0xb8, 0x36c: 0xb9, + 0x37e: 0xba, + // Block 0xe, offset 0x380 + 0x3b2: 0xbb, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xbc, 0x3c6: 0xbd, + 0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf, + 0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4, + 0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7, + // Block 0x10, offset 0x400 + 0x400: 0xc8, + 0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b, + 0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b, + 0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b, + // Block 0x11, offset 0x440 + 0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0, + 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2, + 0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36, + 0x47f: 0xd9, + // Block 0x12, offset 0x480 + 0x4bf: 0xd9, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb, + 0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda, + 0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda, + 0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda, + 0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda, + 0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda, + 0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda, + 0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 15800 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/trieval.go b/vendor/golang.org/x/text/unicode/bidi/trieval.go new file mode 100644 index 0000000..6a796e2 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/trieval.go @@ -0,0 +1,48 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package bidi + +// Class is the Unicode BiDi class. Each rune has a single class. +type Class uint + +const ( + L Class = iota // LeftToRight + R // RightToLeft + EN // EuropeanNumber + ES // EuropeanSeparator + ET // EuropeanTerminator + AN // ArabicNumber + CS // CommonSeparator + B // ParagraphSeparator + S // SegmentSeparator + WS // WhiteSpace + ON // OtherNeutral + BN // BoundaryNeutral + NSM // NonspacingMark + AL // ArabicLetter + Control // Control LRO - PDI + + numClass + + LRO // LeftToRightOverride + RLO // RightToLeftOverride + LRE // LeftToRightEmbedding + RLE // RightToLeftEmbedding + PDF // PopDirectionalFormat + LRI // LeftToRightIsolate + RLI // RightToLeftIsolate + FSI // FirstStrongIsolate + PDI // PopDirectionalIsolate + + unknownClass = ^Class(0) +) + +// A trie entry has the following bits: +// 7..5 XOR mask for brackets +// 4 1: Bracket open, 0: Bracket close +// 3..0 Class type + +const ( + openMask = 0x10 + xorMaskShift = 5 +) diff --git a/vendor/golang.org/x/text/width/kind_string.go b/vendor/golang.org/x/text/width/kind_string.go new file mode 100644 index 0000000..dd3febd --- /dev/null +++ b/vendor/golang.org/x/text/width/kind_string.go @@ -0,0 +1,28 @@ +// Code generated by "stringer -type=Kind"; DO NOT EDIT. + +package width + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[Neutral-0] + _ = x[EastAsianAmbiguous-1] + _ = x[EastAsianWide-2] + _ = x[EastAsianNarrow-3] + _ = x[EastAsianFullwidth-4] + _ = x[EastAsianHalfwidth-5] +} + +const _Kind_name = "NeutralEastAsianAmbiguousEastAsianWideEastAsianNarrowEastAsianFullwidthEastAsianHalfwidth" + +var _Kind_index = [...]uint8{0, 7, 25, 38, 53, 71, 89} + +func (i Kind) String() string { + if i < 0 || i >= Kind(len(_Kind_index)-1) { + return "Kind(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _Kind_name[_Kind_index[i]:_Kind_index[i+1]] +} diff --git a/vendor/golang.org/x/text/width/tables10.0.0.go b/vendor/golang.org/x/text/width/tables10.0.0.go new file mode 100644 index 0000000..07c1cb1 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables10.0.0.go @@ -0,0 +1,1328 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.10 && !go1.13 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14336 bytes (14.00 KiB). Checksum: c59df54630d3dc4a. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 101 blocks, 6464 entries, 12928 bytes +// The third block is the zero block. +var widthValues = [6464]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, 0x11e1: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, + 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, + 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, + 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, + 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, + 0x129e: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, + 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, + 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, + 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, + 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, + 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, + 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, + 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1344: 0x4000, + // Block 0x4e, offset 0x1380 + 0x138f: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, + 0x13d0: 0x2000, 0x13d1: 0x2000, + 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, + 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, + 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, + 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, + 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, + 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, + 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, + 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, + 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, + 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, + 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, + 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, + 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, + 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, + 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f4: 0x4000, + 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167f: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, + 0x16fa: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1715: 0x4000, 0x1716: 0x4000, + 0x1724: 0x4000, + // Block 0x5d, offset 0x1740 + 0x177b: 0x4000, + 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, + 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, + 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, + 0x17eb: 0x4000, 0x17ec: 0x4000, + 0x17f4: 0x4000, 0x17f5: 0x4000, + 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, + // Block 0x60, offset 0x1800 + 0x1810: 0x4000, 0x1811: 0x4000, + 0x1812: 0x4000, 0x1813: 0x4000, 0x1814: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, + 0x1818: 0x4000, 0x1819: 0x4000, 0x181a: 0x4000, 0x181b: 0x4000, 0x181c: 0x4000, 0x181d: 0x4000, + 0x181e: 0x4000, 0x181f: 0x4000, 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, + 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, + 0x182a: 0x4000, 0x182b: 0x4000, 0x182c: 0x4000, 0x182d: 0x4000, 0x182e: 0x4000, 0x182f: 0x4000, + 0x1830: 0x4000, 0x1831: 0x4000, 0x1832: 0x4000, 0x1833: 0x4000, 0x1834: 0x4000, 0x1835: 0x4000, + 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, + 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, + 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, + 0x184c: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, + 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, + 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, + 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, + 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, + 0x186a: 0x4000, 0x186b: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, + 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, + 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x4000, + 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x2000, 0x1901: 0x2000, 0x1902: 0x2000, 0x1903: 0x2000, 0x1904: 0x2000, 0x1905: 0x2000, + 0x1906: 0x2000, 0x1907: 0x2000, 0x1908: 0x2000, 0x1909: 0x2000, 0x190a: 0x2000, 0x190b: 0x2000, + 0x190c: 0x2000, 0x190d: 0x2000, 0x190e: 0x2000, 0x190f: 0x2000, 0x1910: 0x2000, 0x1911: 0x2000, + 0x1912: 0x2000, 0x1913: 0x2000, 0x1914: 0x2000, 0x1915: 0x2000, 0x1916: 0x2000, 0x1917: 0x2000, + 0x1918: 0x2000, 0x1919: 0x2000, 0x191a: 0x2000, 0x191b: 0x2000, 0x191c: 0x2000, 0x191d: 0x2000, + 0x191e: 0x2000, 0x191f: 0x2000, 0x1920: 0x2000, 0x1921: 0x2000, 0x1922: 0x2000, 0x1923: 0x2000, + 0x1924: 0x2000, 0x1925: 0x2000, 0x1926: 0x2000, 0x1927: 0x2000, 0x1928: 0x2000, 0x1929: 0x2000, + 0x192a: 0x2000, 0x192b: 0x2000, 0x192c: 0x2000, 0x192d: 0x2000, 0x192e: 0x2000, 0x192f: 0x2000, + 0x1930: 0x2000, 0x1931: 0x2000, 0x1932: 0x2000, 0x1933: 0x2000, 0x1934: 0x2000, 0x1935: 0x2000, + 0x1936: 0x2000, 0x1937: 0x2000, 0x1938: 0x2000, 0x1939: 0x2000, 0x193a: 0x2000, 0x193b: 0x2000, + 0x193c: 0x2000, 0x193d: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + // Block 0x10, offset 0x400 + 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, + 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, + 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, + 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, + 0x424: 0x5e, 0x425: 0x5f, 0x426: 0x60, 0x427: 0x61, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x62, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14936 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables11.0.0.go b/vendor/golang.org/x/text/width/tables11.0.0.go new file mode 100644 index 0000000..89288b3 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables11.0.0.go @@ -0,0 +1,1340 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.13 && !go1.14 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "11.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14336 bytes (14.00 KiB). Checksum: c0f7712776e71cd4. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 101 blocks, 6464 entries, 12928 bytes +// The third block is the zero block. +var widthValues = [6464]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, 0x11e1: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, 0x122d: 0x4000, 0x122e: 0x4000, 0x122f: 0x4000, + 0x1230: 0x4000, 0x1231: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, + 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, + 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, + 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, + 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, + 0x129e: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, + 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, + 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, + 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, + 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, + 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, + 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, + 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1344: 0x4000, + // Block 0x4e, offset 0x1380 + 0x138f: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, + 0x13d0: 0x2000, 0x13d1: 0x2000, + 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, + 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, + 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, + 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, + 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, + 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, + 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, + 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, + 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, + 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, + 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, + 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, + 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, + 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, + 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f4: 0x4000, + 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167f: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, + 0x16fa: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1715: 0x4000, 0x1716: 0x4000, + 0x1724: 0x4000, + // Block 0x5d, offset 0x1740 + 0x177b: 0x4000, + 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, + 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, + 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, + 0x17eb: 0x4000, 0x17ec: 0x4000, + 0x17f4: 0x4000, 0x17f5: 0x4000, + 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, 0x17f9: 0x4000, + // Block 0x60, offset 0x1800 + 0x1810: 0x4000, 0x1811: 0x4000, + 0x1812: 0x4000, 0x1813: 0x4000, 0x1814: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, + 0x1818: 0x4000, 0x1819: 0x4000, 0x181a: 0x4000, 0x181b: 0x4000, 0x181c: 0x4000, 0x181d: 0x4000, + 0x181e: 0x4000, 0x181f: 0x4000, 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, + 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, + 0x182a: 0x4000, 0x182b: 0x4000, 0x182c: 0x4000, 0x182d: 0x4000, 0x182e: 0x4000, 0x182f: 0x4000, + 0x1830: 0x4000, 0x1831: 0x4000, 0x1832: 0x4000, 0x1833: 0x4000, 0x1834: 0x4000, 0x1835: 0x4000, + 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, + 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, + 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, + 0x184c: 0x4000, 0x184d: 0x4000, 0x184e: 0x4000, 0x184f: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, + 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, + 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, + 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, + 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, + 0x186a: 0x4000, 0x186b: 0x4000, 0x186c: 0x4000, 0x186d: 0x4000, 0x186e: 0x4000, 0x186f: 0x4000, + 0x1870: 0x4000, 0x1873: 0x4000, 0x1874: 0x4000, 0x1875: 0x4000, + 0x1876: 0x4000, 0x187a: 0x4000, + 0x187c: 0x4000, 0x187d: 0x4000, 0x187e: 0x4000, 0x187f: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, + 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, + 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, + 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, + 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b2: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, + 0x18b6: 0x4000, 0x18b7: 0x4000, 0x18b8: 0x4000, 0x18b9: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, + 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, + 0x18ea: 0x4000, 0x18eb: 0x4000, 0x18ec: 0x4000, 0x18ed: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, + 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, + 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18f9: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, + 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x2000, 0x1901: 0x2000, 0x1902: 0x2000, 0x1903: 0x2000, 0x1904: 0x2000, 0x1905: 0x2000, + 0x1906: 0x2000, 0x1907: 0x2000, 0x1908: 0x2000, 0x1909: 0x2000, 0x190a: 0x2000, 0x190b: 0x2000, + 0x190c: 0x2000, 0x190d: 0x2000, 0x190e: 0x2000, 0x190f: 0x2000, 0x1910: 0x2000, 0x1911: 0x2000, + 0x1912: 0x2000, 0x1913: 0x2000, 0x1914: 0x2000, 0x1915: 0x2000, 0x1916: 0x2000, 0x1917: 0x2000, + 0x1918: 0x2000, 0x1919: 0x2000, 0x191a: 0x2000, 0x191b: 0x2000, 0x191c: 0x2000, 0x191d: 0x2000, + 0x191e: 0x2000, 0x191f: 0x2000, 0x1920: 0x2000, 0x1921: 0x2000, 0x1922: 0x2000, 0x1923: 0x2000, + 0x1924: 0x2000, 0x1925: 0x2000, 0x1926: 0x2000, 0x1927: 0x2000, 0x1928: 0x2000, 0x1929: 0x2000, + 0x192a: 0x2000, 0x192b: 0x2000, 0x192c: 0x2000, 0x192d: 0x2000, 0x192e: 0x2000, 0x192f: 0x2000, + 0x1930: 0x2000, 0x1931: 0x2000, 0x1932: 0x2000, 0x1933: 0x2000, 0x1934: 0x2000, 0x1935: 0x2000, + 0x1936: 0x2000, 0x1937: 0x2000, 0x1938: 0x2000, 0x1939: 0x2000, 0x193a: 0x2000, 0x193b: 0x2000, + 0x193c: 0x2000, 0x193d: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + // Block 0x10, offset 0x400 + 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, + 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, + 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, + 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, + 0x424: 0x5e, 0x425: 0x5f, 0x426: 0x60, 0x427: 0x61, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x62, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14936 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables12.0.0.go b/vendor/golang.org/x/text/width/tables12.0.0.go new file mode 100644 index 0000000..755ee91 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables12.0.0.go @@ -0,0 +1,1360 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.14 && !go1.16 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "12.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14720 bytes (14.38 KiB). Checksum: 3f4f2516ded5489b. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 104 blocks, 6656 entries, 13312 bytes +// The third block is the zero block. +var widthValues = [6656]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, 0x11e1: 0x4000, 0x11e2: 0x4000, 0x11e3: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, 0x122d: 0x4000, 0x122e: 0x4000, 0x122f: 0x4000, + 0x1230: 0x4000, 0x1231: 0x4000, 0x1232: 0x4000, 0x1233: 0x4000, 0x1234: 0x4000, 0x1235: 0x4000, + 0x1236: 0x4000, 0x1237: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, + 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, + 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, + 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, + 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, + 0x129e: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x4000, 0x12d1: 0x4000, + 0x12d2: 0x4000, + 0x12e4: 0x4000, 0x12e5: 0x4000, 0x12e6: 0x4000, 0x12e7: 0x4000, + 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, + 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, + 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, + 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, + 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, + 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, + 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, + 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1344: 0x4000, + // Block 0x4e, offset 0x1380 + 0x138f: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, + 0x13d0: 0x2000, 0x13d1: 0x2000, + 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, + 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, + 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, + 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, + 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, + 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, + 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, + 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, + 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, + 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, + 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, + 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, + 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, + 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, + 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f4: 0x4000, + 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167f: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, + 0x16fa: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1715: 0x4000, 0x1716: 0x4000, + 0x1724: 0x4000, + // Block 0x5d, offset 0x1740 + 0x177b: 0x4000, + 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, + 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, + 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, 0x17d5: 0x4000, + 0x17eb: 0x4000, 0x17ec: 0x4000, + 0x17f4: 0x4000, 0x17f5: 0x4000, + 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, 0x17f9: 0x4000, 0x17fa: 0x4000, + // Block 0x60, offset 0x1800 + 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, + 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, + 0x182a: 0x4000, 0x182b: 0x4000, + // Block 0x61, offset 0x1840 + 0x184d: 0x4000, 0x184e: 0x4000, 0x184f: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, + 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, + 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, + 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, + 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, + 0x186a: 0x4000, 0x186b: 0x4000, 0x186c: 0x4000, 0x186d: 0x4000, 0x186e: 0x4000, 0x186f: 0x4000, + 0x1870: 0x4000, 0x1871: 0x4000, 0x1872: 0x4000, 0x1873: 0x4000, 0x1874: 0x4000, 0x1875: 0x4000, + 0x1876: 0x4000, 0x1877: 0x4000, 0x1878: 0x4000, 0x1879: 0x4000, 0x187a: 0x4000, 0x187b: 0x4000, + 0x187c: 0x4000, 0x187d: 0x4000, 0x187e: 0x4000, 0x187f: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, + 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, + 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, + 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, 0x18a3: 0x4000, + 0x18a4: 0x4000, 0x18a5: 0x4000, 0x18a6: 0x4000, 0x18a7: 0x4000, 0x18a8: 0x4000, 0x18a9: 0x4000, + 0x18aa: 0x4000, 0x18ab: 0x4000, 0x18ac: 0x4000, 0x18ad: 0x4000, 0x18ae: 0x4000, 0x18af: 0x4000, + 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, + 0x18b6: 0x4000, 0x18ba: 0x4000, 0x18bb: 0x4000, + 0x18bc: 0x4000, 0x18bd: 0x4000, 0x18be: 0x4000, 0x18bf: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, 0x18c3: 0x4000, 0x18c4: 0x4000, 0x18c5: 0x4000, + 0x18c6: 0x4000, 0x18c7: 0x4000, 0x18c8: 0x4000, 0x18c9: 0x4000, 0x18ca: 0x4000, 0x18cb: 0x4000, + 0x18cc: 0x4000, 0x18cd: 0x4000, 0x18ce: 0x4000, 0x18cf: 0x4000, 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, + 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, + 0x18ea: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, + 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, + 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18f9: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, + 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x4000, 0x1901: 0x4000, 0x1902: 0x4000, 0x1903: 0x4000, 0x1904: 0x4000, 0x1905: 0x4000, + 0x1906: 0x4000, 0x1907: 0x4000, 0x1908: 0x4000, 0x1909: 0x4000, 0x190a: 0x4000, + 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, + 0x1912: 0x4000, 0x1913: 0x4000, 0x1914: 0x4000, 0x1915: 0x4000, 0x1916: 0x4000, 0x1917: 0x4000, + 0x1918: 0x4000, 0x1919: 0x4000, 0x191a: 0x4000, 0x191b: 0x4000, 0x191c: 0x4000, 0x191d: 0x4000, + 0x191e: 0x4000, 0x191f: 0x4000, 0x1920: 0x4000, 0x1921: 0x4000, 0x1922: 0x4000, 0x1923: 0x4000, + 0x1924: 0x4000, 0x1925: 0x4000, 0x1926: 0x4000, 0x1927: 0x4000, 0x1928: 0x4000, 0x1929: 0x4000, + 0x192a: 0x4000, 0x192b: 0x4000, 0x192c: 0x4000, 0x192d: 0x4000, 0x192e: 0x4000, 0x192f: 0x4000, + 0x1930: 0x4000, 0x1931: 0x4000, 0x1932: 0x4000, 0x1933: 0x4000, 0x1934: 0x4000, 0x1935: 0x4000, + 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193b: 0x4000, + 0x193c: 0x4000, 0x193d: 0x4000, 0x193e: 0x4000, 0x193f: 0x4000, + // Block 0x65, offset 0x1940 + 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, + 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, + // Block 0x66, offset 0x1980 + 0x1980: 0x4000, 0x1981: 0x4000, 0x1982: 0x4000, + 0x1990: 0x4000, 0x1991: 0x4000, + 0x1992: 0x4000, 0x1993: 0x4000, 0x1994: 0x4000, 0x1995: 0x4000, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x2000, 0x19c1: 0x2000, 0x19c2: 0x2000, 0x19c3: 0x2000, 0x19c4: 0x2000, 0x19c5: 0x2000, + 0x19c6: 0x2000, 0x19c7: 0x2000, 0x19c8: 0x2000, 0x19c9: 0x2000, 0x19ca: 0x2000, 0x19cb: 0x2000, + 0x19cc: 0x2000, 0x19cd: 0x2000, 0x19ce: 0x2000, 0x19cf: 0x2000, 0x19d0: 0x2000, 0x19d1: 0x2000, + 0x19d2: 0x2000, 0x19d3: 0x2000, 0x19d4: 0x2000, 0x19d5: 0x2000, 0x19d6: 0x2000, 0x19d7: 0x2000, + 0x19d8: 0x2000, 0x19d9: 0x2000, 0x19da: 0x2000, 0x19db: 0x2000, 0x19dc: 0x2000, 0x19dd: 0x2000, + 0x19de: 0x2000, 0x19df: 0x2000, 0x19e0: 0x2000, 0x19e1: 0x2000, 0x19e2: 0x2000, 0x19e3: 0x2000, + 0x19e4: 0x2000, 0x19e5: 0x2000, 0x19e6: 0x2000, 0x19e7: 0x2000, 0x19e8: 0x2000, 0x19e9: 0x2000, + 0x19ea: 0x2000, 0x19eb: 0x2000, 0x19ec: 0x2000, 0x19ed: 0x2000, 0x19ee: 0x2000, 0x19ef: 0x2000, + 0x19f0: 0x2000, 0x19f1: 0x2000, 0x19f2: 0x2000, 0x19f3: 0x2000, 0x19f4: 0x2000, 0x19f5: 0x2000, + 0x19f6: 0x2000, 0x19f7: 0x2000, 0x19f8: 0x2000, 0x19f9: 0x2000, 0x19fa: 0x2000, 0x19fb: 0x2000, + 0x19fc: 0x2000, 0x19fd: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + // Block 0x10, offset 0x400 + 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, + 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, + 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, + 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, 0x41f: 0x5e, + 0x424: 0x5f, 0x425: 0x60, 0x426: 0x61, 0x427: 0x62, + 0x429: 0x63, 0x42a: 0x64, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x65, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 15320 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables13.0.0.go b/vendor/golang.org/x/text/width/tables13.0.0.go new file mode 100644 index 0000000..40c169e --- /dev/null +++ b/vendor/golang.org/x/text/width/tables13.0.0.go @@ -0,0 +1,1361 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.16 && !go1.21 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "13.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14848 bytes (14.50 KiB). Checksum: 17e24343536472f6. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 105 blocks, 6720 entries, 13440 bytes +// The third block is the zero block. +var widthValues = [6720]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, 0xe3b: 0x4000, + 0xe3c: 0x4000, 0xe3d: 0x4000, 0xe3e: 0x4000, 0xe3f: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, 0xf3f: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, + // Block 0x3e, offset 0xf80 + 0xfa0: 0x4000, 0xfa1: 0x4000, 0xfa2: 0x4000, 0xfa3: 0x4000, + 0xfa4: 0x4000, 0xfa5: 0x4000, 0xfa6: 0x4000, 0xfa7: 0x4000, 0xfa8: 0x4000, 0xfa9: 0x4000, + 0xfaa: 0x4000, 0xfab: 0x4000, 0xfac: 0x4000, 0xfad: 0x4000, 0xfae: 0x4000, 0xfaf: 0x4000, + 0xfb0: 0x4000, 0xfb1: 0x4000, 0xfb2: 0x4000, 0xfb3: 0x4000, 0xfb4: 0x4000, 0xfb5: 0x4000, + 0xfb6: 0x4000, 0xfb7: 0x4000, 0xfb8: 0x4000, 0xfb9: 0x4000, 0xfba: 0x4000, 0xfbb: 0x4000, + 0xfbc: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x4000, 0xfc1: 0x4000, 0xfc2: 0x4000, 0xfc3: 0x4000, 0xfc4: 0x4000, 0xfc5: 0x4000, + 0xfc6: 0x4000, 0xfc7: 0x4000, 0xfc8: 0x4000, 0xfc9: 0x4000, 0xfca: 0x4000, 0xfcb: 0x4000, + 0xfcc: 0x4000, 0xfcd: 0x4000, 0xfce: 0x4000, 0xfcf: 0x4000, 0xfd0: 0x4000, 0xfd1: 0x4000, + 0xfd2: 0x4000, 0xfd3: 0x4000, 0xfd4: 0x4000, 0xfd5: 0x4000, 0xfd6: 0x4000, 0xfd7: 0x4000, + 0xfd8: 0x4000, 0xfd9: 0x4000, 0xfda: 0x4000, 0xfdb: 0x4000, 0xfdc: 0x4000, 0xfdd: 0x4000, + 0xfde: 0x4000, 0xfdf: 0x4000, 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x2000, 0x1001: 0x2000, 0x1002: 0x2000, 0x1003: 0x2000, 0x1004: 0x2000, 0x1005: 0x2000, + 0x1006: 0x2000, 0x1007: 0x2000, 0x1008: 0x2000, 0x1009: 0x2000, 0x100a: 0x2000, 0x100b: 0x2000, + 0x100c: 0x2000, 0x100d: 0x2000, 0x100e: 0x2000, 0x100f: 0x2000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, + 0x1030: 0x4000, 0x1031: 0x4000, 0x1032: 0x4000, 0x1033: 0x4000, 0x1034: 0x4000, 0x1035: 0x4000, + 0x1036: 0x4000, 0x1037: 0x4000, 0x1038: 0x4000, 0x1039: 0x4000, 0x103a: 0x4000, 0x103b: 0x4000, + 0x103c: 0x4000, 0x103d: 0x4000, 0x103e: 0x4000, 0x103f: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x4000, 0x1041: 0x4000, 0x1042: 0x4000, 0x1043: 0x4000, 0x1044: 0x4000, 0x1045: 0x4000, + 0x1046: 0x4000, 0x1047: 0x4000, 0x1048: 0x4000, 0x1049: 0x4000, 0x104a: 0x4000, 0x104b: 0x4000, + 0x104c: 0x4000, 0x104d: 0x4000, 0x104e: 0x4000, 0x104f: 0x4000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, 0x105a: 0x4000, 0x105b: 0x4000, 0x105c: 0x4000, 0x105d: 0x4000, + 0x105e: 0x4000, 0x105f: 0x4000, 0x1060: 0x4000, 0x1061: 0x4000, 0x1062: 0x4000, 0x1063: 0x4000, + 0x1064: 0x4000, 0x1065: 0x4000, 0x1066: 0x4000, 0x1068: 0x4000, 0x1069: 0x4000, + 0x106a: 0x4000, 0x106b: 0x4000, + // Block 0x42, offset 0x1080 + 0x1081: 0x9012, 0x1082: 0x9012, 0x1083: 0x9012, 0x1084: 0x9012, 0x1085: 0x9012, + 0x1086: 0x9012, 0x1087: 0x9012, 0x1088: 0x9012, 0x1089: 0x9012, 0x108a: 0x9012, 0x108b: 0x9012, + 0x108c: 0x9012, 0x108d: 0x9012, 0x108e: 0x9012, 0x108f: 0x9012, 0x1090: 0x9012, 0x1091: 0x9012, + 0x1092: 0x9012, 0x1093: 0x9012, 0x1094: 0x9012, 0x1095: 0x9012, 0x1096: 0x9012, 0x1097: 0x9012, + 0x1098: 0x9012, 0x1099: 0x9012, 0x109a: 0x9012, 0x109b: 0x9012, 0x109c: 0x9012, 0x109d: 0x9012, + 0x109e: 0x9012, 0x109f: 0x9012, 0x10a0: 0x9049, 0x10a1: 0x9049, 0x10a2: 0x9049, 0x10a3: 0x9049, + 0x10a4: 0x9049, 0x10a5: 0x9049, 0x10a6: 0x9049, 0x10a7: 0x9049, 0x10a8: 0x9049, 0x10a9: 0x9049, + 0x10aa: 0x9049, 0x10ab: 0x9049, 0x10ac: 0x9049, 0x10ad: 0x9049, 0x10ae: 0x9049, 0x10af: 0x9049, + 0x10b0: 0x9049, 0x10b1: 0x9049, 0x10b2: 0x9049, 0x10b3: 0x9049, 0x10b4: 0x9049, 0x10b5: 0x9049, + 0x10b6: 0x9049, 0x10b7: 0x9049, 0x10b8: 0x9049, 0x10b9: 0x9049, 0x10ba: 0x9049, 0x10bb: 0x9049, + 0x10bc: 0x9049, 0x10bd: 0x9049, 0x10be: 0x9049, 0x10bf: 0x9049, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x9049, 0x10c1: 0x9049, 0x10c2: 0x9049, 0x10c3: 0x9049, 0x10c4: 0x9049, 0x10c5: 0x9049, + 0x10c6: 0x9049, 0x10c7: 0x9049, 0x10c8: 0x9049, 0x10c9: 0x9049, 0x10ca: 0x9049, 0x10cb: 0x9049, + 0x10cc: 0x9049, 0x10cd: 0x9049, 0x10ce: 0x9049, 0x10cf: 0x9049, 0x10d0: 0x9049, 0x10d1: 0x9049, + 0x10d2: 0x9049, 0x10d3: 0x9049, 0x10d4: 0x9049, 0x10d5: 0x9049, 0x10d6: 0x9049, 0x10d7: 0x9049, + 0x10d8: 0x9049, 0x10d9: 0x9049, 0x10da: 0x9049, 0x10db: 0x9049, 0x10dc: 0x9049, 0x10dd: 0x9049, + 0x10de: 0x9049, 0x10df: 0x904a, 0x10e0: 0x904b, 0x10e1: 0xb04c, 0x10e2: 0xb04d, 0x10e3: 0xb04d, + 0x10e4: 0xb04e, 0x10e5: 0xb04f, 0x10e6: 0xb050, 0x10e7: 0xb051, 0x10e8: 0xb052, 0x10e9: 0xb053, + 0x10ea: 0xb054, 0x10eb: 0xb055, 0x10ec: 0xb056, 0x10ed: 0xb057, 0x10ee: 0xb058, 0x10ef: 0xb059, + 0x10f0: 0xb05a, 0x10f1: 0xb05b, 0x10f2: 0xb05c, 0x10f3: 0xb05d, 0x10f4: 0xb05e, 0x10f5: 0xb05f, + 0x10f6: 0xb060, 0x10f7: 0xb061, 0x10f8: 0xb062, 0x10f9: 0xb063, 0x10fa: 0xb064, 0x10fb: 0xb065, + 0x10fc: 0xb052, 0x10fd: 0xb066, 0x10fe: 0xb067, 0x10ff: 0xb055, + // Block 0x44, offset 0x1100 + 0x1100: 0xb068, 0x1101: 0xb069, 0x1102: 0xb06a, 0x1103: 0xb06b, 0x1104: 0xb05a, 0x1105: 0xb056, + 0x1106: 0xb06c, 0x1107: 0xb06d, 0x1108: 0xb06b, 0x1109: 0xb06e, 0x110a: 0xb06b, 0x110b: 0xb06f, + 0x110c: 0xb06f, 0x110d: 0xb070, 0x110e: 0xb070, 0x110f: 0xb071, 0x1110: 0xb056, 0x1111: 0xb072, + 0x1112: 0xb073, 0x1113: 0xb072, 0x1114: 0xb074, 0x1115: 0xb073, 0x1116: 0xb075, 0x1117: 0xb075, + 0x1118: 0xb076, 0x1119: 0xb076, 0x111a: 0xb077, 0x111b: 0xb077, 0x111c: 0xb073, 0x111d: 0xb078, + 0x111e: 0xb079, 0x111f: 0xb067, 0x1120: 0xb07a, 0x1121: 0xb07b, 0x1122: 0xb07b, 0x1123: 0xb07b, + 0x1124: 0xb07b, 0x1125: 0xb07b, 0x1126: 0xb07b, 0x1127: 0xb07b, 0x1128: 0xb07b, 0x1129: 0xb07b, + 0x112a: 0xb07b, 0x112b: 0xb07b, 0x112c: 0xb07b, 0x112d: 0xb07b, 0x112e: 0xb07b, 0x112f: 0xb07b, + 0x1130: 0xb07c, 0x1131: 0xb07c, 0x1132: 0xb07c, 0x1133: 0xb07c, 0x1134: 0xb07c, 0x1135: 0xb07c, + 0x1136: 0xb07c, 0x1137: 0xb07c, 0x1138: 0xb07c, 0x1139: 0xb07c, 0x113a: 0xb07c, 0x113b: 0xb07c, + 0x113c: 0xb07c, 0x113d: 0xb07c, 0x113e: 0xb07c, + // Block 0x45, offset 0x1140 + 0x1142: 0xb07d, 0x1143: 0xb07e, 0x1144: 0xb07f, 0x1145: 0xb080, + 0x1146: 0xb07f, 0x1147: 0xb07e, 0x114a: 0xb081, 0x114b: 0xb082, + 0x114c: 0xb083, 0x114d: 0xb07f, 0x114e: 0xb080, 0x114f: 0xb07f, + 0x1152: 0xb084, 0x1153: 0xb085, 0x1154: 0xb084, 0x1155: 0xb086, 0x1156: 0xb084, 0x1157: 0xb087, + 0x115a: 0xb088, 0x115b: 0xb089, 0x115c: 0xb08a, + 0x1160: 0x908b, 0x1161: 0x908b, 0x1162: 0x908c, 0x1163: 0x908d, + 0x1164: 0x908b, 0x1165: 0x908e, 0x1166: 0x908f, 0x1168: 0xb090, 0x1169: 0xb091, + 0x116a: 0xb092, 0x116b: 0xb091, 0x116c: 0xb093, 0x116d: 0xb094, 0x116e: 0xb095, + 0x117d: 0x2000, + // Block 0x46, offset 0x1180 + 0x11a0: 0x4000, 0x11a1: 0x4000, 0x11a2: 0x4000, 0x11a3: 0x4000, + 0x11a4: 0x4000, + 0x11b0: 0x4000, 0x11b1: 0x4000, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x4000, 0x11c1: 0x4000, 0x11c2: 0x4000, 0x11c3: 0x4000, 0x11c4: 0x4000, 0x11c5: 0x4000, + 0x11c6: 0x4000, 0x11c7: 0x4000, 0x11c8: 0x4000, 0x11c9: 0x4000, 0x11ca: 0x4000, 0x11cb: 0x4000, + 0x11cc: 0x4000, 0x11cd: 0x4000, 0x11ce: 0x4000, 0x11cf: 0x4000, 0x11d0: 0x4000, 0x11d1: 0x4000, + 0x11d2: 0x4000, 0x11d3: 0x4000, 0x11d4: 0x4000, 0x11d5: 0x4000, 0x11d6: 0x4000, 0x11d7: 0x4000, + 0x11d8: 0x4000, 0x11d9: 0x4000, 0x11da: 0x4000, 0x11db: 0x4000, 0x11dc: 0x4000, 0x11dd: 0x4000, + 0x11de: 0x4000, 0x11df: 0x4000, 0x11e0: 0x4000, 0x11e1: 0x4000, 0x11e2: 0x4000, 0x11e3: 0x4000, + 0x11e4: 0x4000, 0x11e5: 0x4000, 0x11e6: 0x4000, 0x11e7: 0x4000, 0x11e8: 0x4000, 0x11e9: 0x4000, + 0x11ea: 0x4000, 0x11eb: 0x4000, 0x11ec: 0x4000, 0x11ed: 0x4000, 0x11ee: 0x4000, 0x11ef: 0x4000, + 0x11f0: 0x4000, 0x11f1: 0x4000, 0x11f2: 0x4000, 0x11f3: 0x4000, 0x11f4: 0x4000, 0x11f5: 0x4000, + 0x11f6: 0x4000, 0x11f7: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, + 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, + 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, + 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, + 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, + 0x129e: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x4000, 0x12d1: 0x4000, + 0x12d2: 0x4000, + 0x12e4: 0x4000, 0x12e5: 0x4000, 0x12e6: 0x4000, 0x12e7: 0x4000, + 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, + 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, + 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, + 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, + 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, + 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, + 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, + 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1344: 0x4000, + // Block 0x4e, offset 0x1380 + 0x138f: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, + 0x13d0: 0x2000, 0x13d1: 0x2000, + 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, + 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, + 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, + 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, + 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, + 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, + 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, + 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, + 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, + 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, + 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, + 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, + 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, + 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, + 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f4: 0x4000, + 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167d: 0x4000, 0x167e: 0x4000, 0x167f: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bf: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x4000, 0x16c1: 0x4000, 0x16c2: 0x4000, 0x16c3: 0x4000, 0x16c4: 0x4000, 0x16c5: 0x4000, + 0x16c6: 0x4000, 0x16c7: 0x4000, 0x16c8: 0x4000, 0x16c9: 0x4000, 0x16ca: 0x4000, 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16cf: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, 0x16e8: 0x4000, 0x16e9: 0x4000, + 0x16ea: 0x4000, 0x16eb: 0x4000, 0x16ec: 0x4000, 0x16ed: 0x4000, 0x16ee: 0x4000, 0x16ef: 0x4000, + 0x16f0: 0x4000, 0x16f1: 0x4000, 0x16f2: 0x4000, 0x16f3: 0x4000, 0x16f4: 0x4000, 0x16f5: 0x4000, + 0x16f6: 0x4000, 0x16f7: 0x4000, 0x16f8: 0x4000, 0x16f9: 0x4000, 0x16fa: 0x4000, 0x16fb: 0x4000, + 0x16fc: 0x4000, 0x16fd: 0x4000, + // Block 0x5c, offset 0x1700 + 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x1710: 0x4000, 0x1711: 0x4000, + 0x1712: 0x4000, 0x1713: 0x4000, 0x1714: 0x4000, 0x1715: 0x4000, 0x1716: 0x4000, 0x1717: 0x4000, + 0x1718: 0x4000, 0x1719: 0x4000, 0x171a: 0x4000, 0x171b: 0x4000, 0x171c: 0x4000, 0x171d: 0x4000, + 0x171e: 0x4000, 0x171f: 0x4000, 0x1720: 0x4000, 0x1721: 0x4000, 0x1722: 0x4000, 0x1723: 0x4000, + 0x1724: 0x4000, 0x1725: 0x4000, 0x1726: 0x4000, 0x1727: 0x4000, + 0x173a: 0x4000, + // Block 0x5d, offset 0x1740 + 0x1755: 0x4000, 0x1756: 0x4000, + 0x1764: 0x4000, + // Block 0x5e, offset 0x1780 + 0x17bb: 0x4000, + 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, 0x17bf: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, + 0x17cc: 0x4000, 0x17cd: 0x4000, 0x17ce: 0x4000, 0x17cf: 0x4000, + // Block 0x60, offset 0x1800 + 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, + 0x180c: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, + 0x1812: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, + 0x182b: 0x4000, 0x182c: 0x4000, + 0x1834: 0x4000, 0x1835: 0x4000, + 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, + 0x183c: 0x4000, + // Block 0x61, offset 0x1840 + 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, + 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, + 0x186a: 0x4000, 0x186b: 0x4000, + // Block 0x62, offset 0x1880 + 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, + 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, 0x18a3: 0x4000, + 0x18a4: 0x4000, 0x18a5: 0x4000, 0x18a6: 0x4000, 0x18a7: 0x4000, 0x18a8: 0x4000, 0x18a9: 0x4000, + 0x18aa: 0x4000, 0x18ab: 0x4000, 0x18ac: 0x4000, 0x18ad: 0x4000, 0x18ae: 0x4000, 0x18af: 0x4000, + 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b2: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, + 0x18b6: 0x4000, 0x18b7: 0x4000, 0x18b8: 0x4000, 0x18b9: 0x4000, 0x18ba: 0x4000, + 0x18bc: 0x4000, 0x18bd: 0x4000, 0x18be: 0x4000, 0x18bf: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, 0x18c3: 0x4000, 0x18c4: 0x4000, 0x18c5: 0x4000, + 0x18c7: 0x4000, 0x18c8: 0x4000, 0x18c9: 0x4000, 0x18ca: 0x4000, 0x18cb: 0x4000, + 0x18cc: 0x4000, 0x18cd: 0x4000, 0x18ce: 0x4000, 0x18cf: 0x4000, 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, + 0x18ea: 0x4000, 0x18eb: 0x4000, 0x18ec: 0x4000, 0x18ed: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, + 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, + 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, + 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x4000, 0x1901: 0x4000, 0x1902: 0x4000, 0x1903: 0x4000, 0x1904: 0x4000, 0x1905: 0x4000, + 0x1906: 0x4000, 0x1907: 0x4000, 0x1908: 0x4000, 0x1909: 0x4000, 0x190a: 0x4000, 0x190b: 0x4000, + 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, + 0x1912: 0x4000, 0x1913: 0x4000, 0x1914: 0x4000, 0x1915: 0x4000, 0x1916: 0x4000, 0x1917: 0x4000, + 0x1918: 0x4000, 0x1919: 0x4000, 0x191a: 0x4000, 0x191b: 0x4000, 0x191c: 0x4000, 0x191d: 0x4000, + 0x191e: 0x4000, 0x191f: 0x4000, 0x1920: 0x4000, 0x1921: 0x4000, 0x1922: 0x4000, 0x1923: 0x4000, + 0x1924: 0x4000, 0x1925: 0x4000, 0x1926: 0x4000, 0x1927: 0x4000, 0x1928: 0x4000, 0x1929: 0x4000, + 0x192a: 0x4000, 0x192b: 0x4000, 0x192c: 0x4000, 0x192d: 0x4000, 0x192e: 0x4000, 0x192f: 0x4000, + 0x1930: 0x4000, 0x1931: 0x4000, 0x1932: 0x4000, 0x1933: 0x4000, 0x1934: 0x4000, 0x1935: 0x4000, + 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193b: 0x4000, + 0x193c: 0x4000, 0x193d: 0x4000, 0x193e: 0x4000, 0x193f: 0x4000, + // Block 0x65, offset 0x1940 + 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, 0x1974: 0x4000, + 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, + // Block 0x66, offset 0x1980 + 0x1980: 0x4000, 0x1981: 0x4000, 0x1982: 0x4000, 0x1983: 0x4000, 0x1984: 0x4000, 0x1985: 0x4000, + 0x1986: 0x4000, + 0x1990: 0x4000, 0x1991: 0x4000, + 0x1992: 0x4000, 0x1993: 0x4000, 0x1994: 0x4000, 0x1995: 0x4000, 0x1996: 0x4000, 0x1997: 0x4000, + 0x1998: 0x4000, 0x1999: 0x4000, 0x199a: 0x4000, 0x199b: 0x4000, 0x199c: 0x4000, 0x199d: 0x4000, + 0x199e: 0x4000, 0x199f: 0x4000, 0x19a0: 0x4000, 0x19a1: 0x4000, 0x19a2: 0x4000, 0x19a3: 0x4000, + 0x19a4: 0x4000, 0x19a5: 0x4000, 0x19a6: 0x4000, 0x19a7: 0x4000, 0x19a8: 0x4000, + 0x19b0: 0x4000, 0x19b1: 0x4000, 0x19b2: 0x4000, 0x19b3: 0x4000, 0x19b4: 0x4000, 0x19b5: 0x4000, + 0x19b6: 0x4000, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x4000, 0x19c1: 0x4000, 0x19c2: 0x4000, + 0x19d0: 0x4000, 0x19d1: 0x4000, + 0x19d2: 0x4000, 0x19d3: 0x4000, 0x19d4: 0x4000, 0x19d5: 0x4000, 0x19d6: 0x4000, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x2000, 0x1a01: 0x2000, 0x1a02: 0x2000, 0x1a03: 0x2000, 0x1a04: 0x2000, 0x1a05: 0x2000, + 0x1a06: 0x2000, 0x1a07: 0x2000, 0x1a08: 0x2000, 0x1a09: 0x2000, 0x1a0a: 0x2000, 0x1a0b: 0x2000, + 0x1a0c: 0x2000, 0x1a0d: 0x2000, 0x1a0e: 0x2000, 0x1a0f: 0x2000, 0x1a10: 0x2000, 0x1a11: 0x2000, + 0x1a12: 0x2000, 0x1a13: 0x2000, 0x1a14: 0x2000, 0x1a15: 0x2000, 0x1a16: 0x2000, 0x1a17: 0x2000, + 0x1a18: 0x2000, 0x1a19: 0x2000, 0x1a1a: 0x2000, 0x1a1b: 0x2000, 0x1a1c: 0x2000, 0x1a1d: 0x2000, + 0x1a1e: 0x2000, 0x1a1f: 0x2000, 0x1a20: 0x2000, 0x1a21: 0x2000, 0x1a22: 0x2000, 0x1a23: 0x2000, + 0x1a24: 0x2000, 0x1a25: 0x2000, 0x1a26: 0x2000, 0x1a27: 0x2000, 0x1a28: 0x2000, 0x1a29: 0x2000, + 0x1a2a: 0x2000, 0x1a2b: 0x2000, 0x1a2c: 0x2000, 0x1a2d: 0x2000, 0x1a2e: 0x2000, 0x1a2f: 0x2000, + 0x1a30: 0x2000, 0x1a31: 0x2000, 0x1a32: 0x2000, 0x1a33: 0x2000, 0x1a34: 0x2000, 0x1a35: 0x2000, + 0x1a36: 0x2000, 0x1a37: 0x2000, 0x1a38: 0x2000, 0x1a39: 0x2000, 0x1a3a: 0x2000, 0x1a3b: 0x2000, + 0x1a3c: 0x2000, 0x1a3d: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x0e, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3a, 0x253: 0x3b, + 0x265: 0x3c, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3e, 0x339: 0x3f, 0x33c: 0x40, 0x33d: 0x41, 0x33e: 0x42, 0x33f: 0x43, + // Block 0xd, offset 0x340 + 0x37f: 0x44, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x45, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x0e, 0x3ac: 0x0e, 0x3ad: 0x0e, 0x3ae: 0x0e, 0x3af: 0x0e, + 0x3b0: 0x0e, 0x3b1: 0x0e, 0x3b2: 0x0e, 0x3b3: 0x46, 0x3b4: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + // Block 0x10, offset 0x400 + 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, + 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, + 0x410: 0x56, 0x411: 0x57, 0x412: 0x0e, 0x413: 0x58, 0x414: 0x59, 0x415: 0x5a, 0x416: 0x5b, 0x417: 0x5c, + 0x418: 0x0e, 0x419: 0x5d, 0x41a: 0x0e, 0x41b: 0x5e, 0x41f: 0x5f, + 0x424: 0x60, 0x425: 0x61, 0x426: 0x0e, 0x427: 0x62, + 0x429: 0x63, 0x42a: 0x64, 0x42b: 0x65, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x66, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 15448 bytes (15KiB) diff --git a/vendor/golang.org/x/text/width/tables15.0.0.go b/vendor/golang.org/x/text/width/tables15.0.0.go new file mode 100644 index 0000000..2b85289 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables15.0.0.go @@ -0,0 +1,1367 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14912 bytes (14.56 KiB). Checksum: 4468b6cd178303d2. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 105 blocks, 6720 entries, 13440 bytes +// The third block is the zero block. +var widthValues = [6720]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, 0xe3b: 0x4000, + 0xe3c: 0x4000, 0xe3d: 0x4000, 0xe3e: 0x4000, 0xe3f: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, 0xf3f: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, + // Block 0x3e, offset 0xf80 + 0xfa0: 0x4000, 0xfa1: 0x4000, 0xfa2: 0x4000, 0xfa3: 0x4000, + 0xfa4: 0x4000, 0xfa5: 0x4000, 0xfa6: 0x4000, 0xfa7: 0x4000, 0xfa8: 0x4000, 0xfa9: 0x4000, + 0xfaa: 0x4000, 0xfab: 0x4000, 0xfac: 0x4000, 0xfad: 0x4000, 0xfae: 0x4000, 0xfaf: 0x4000, + 0xfb0: 0x4000, 0xfb1: 0x4000, 0xfb2: 0x4000, 0xfb3: 0x4000, 0xfb4: 0x4000, 0xfb5: 0x4000, + 0xfb6: 0x4000, 0xfb7: 0x4000, 0xfb8: 0x4000, 0xfb9: 0x4000, 0xfba: 0x4000, 0xfbb: 0x4000, + 0xfbc: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x4000, 0xfc1: 0x4000, 0xfc2: 0x4000, 0xfc3: 0x4000, 0xfc4: 0x4000, 0xfc5: 0x4000, + 0xfc6: 0x4000, 0xfc7: 0x4000, 0xfc8: 0x4000, 0xfc9: 0x4000, 0xfca: 0x4000, 0xfcb: 0x4000, + 0xfcc: 0x4000, 0xfcd: 0x4000, 0xfce: 0x4000, 0xfcf: 0x4000, 0xfd0: 0x4000, 0xfd1: 0x4000, + 0xfd2: 0x4000, 0xfd3: 0x4000, 0xfd4: 0x4000, 0xfd5: 0x4000, 0xfd6: 0x4000, 0xfd7: 0x4000, + 0xfd8: 0x4000, 0xfd9: 0x4000, 0xfda: 0x4000, 0xfdb: 0x4000, 0xfdc: 0x4000, 0xfdd: 0x4000, + 0xfde: 0x4000, 0xfdf: 0x4000, 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x2000, 0x1001: 0x2000, 0x1002: 0x2000, 0x1003: 0x2000, 0x1004: 0x2000, 0x1005: 0x2000, + 0x1006: 0x2000, 0x1007: 0x2000, 0x1008: 0x2000, 0x1009: 0x2000, 0x100a: 0x2000, 0x100b: 0x2000, + 0x100c: 0x2000, 0x100d: 0x2000, 0x100e: 0x2000, 0x100f: 0x2000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, + 0x1030: 0x4000, 0x1031: 0x4000, 0x1032: 0x4000, 0x1033: 0x4000, 0x1034: 0x4000, 0x1035: 0x4000, + 0x1036: 0x4000, 0x1037: 0x4000, 0x1038: 0x4000, 0x1039: 0x4000, 0x103a: 0x4000, 0x103b: 0x4000, + 0x103c: 0x4000, 0x103d: 0x4000, 0x103e: 0x4000, 0x103f: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x4000, 0x1041: 0x4000, 0x1042: 0x4000, 0x1043: 0x4000, 0x1044: 0x4000, 0x1045: 0x4000, + 0x1046: 0x4000, 0x1047: 0x4000, 0x1048: 0x4000, 0x1049: 0x4000, 0x104a: 0x4000, 0x104b: 0x4000, + 0x104c: 0x4000, 0x104d: 0x4000, 0x104e: 0x4000, 0x104f: 0x4000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, 0x105a: 0x4000, 0x105b: 0x4000, 0x105c: 0x4000, 0x105d: 0x4000, + 0x105e: 0x4000, 0x105f: 0x4000, 0x1060: 0x4000, 0x1061: 0x4000, 0x1062: 0x4000, 0x1063: 0x4000, + 0x1064: 0x4000, 0x1065: 0x4000, 0x1066: 0x4000, 0x1068: 0x4000, 0x1069: 0x4000, + 0x106a: 0x4000, 0x106b: 0x4000, + // Block 0x42, offset 0x1080 + 0x1081: 0x9012, 0x1082: 0x9012, 0x1083: 0x9012, 0x1084: 0x9012, 0x1085: 0x9012, + 0x1086: 0x9012, 0x1087: 0x9012, 0x1088: 0x9012, 0x1089: 0x9012, 0x108a: 0x9012, 0x108b: 0x9012, + 0x108c: 0x9012, 0x108d: 0x9012, 0x108e: 0x9012, 0x108f: 0x9012, 0x1090: 0x9012, 0x1091: 0x9012, + 0x1092: 0x9012, 0x1093: 0x9012, 0x1094: 0x9012, 0x1095: 0x9012, 0x1096: 0x9012, 0x1097: 0x9012, + 0x1098: 0x9012, 0x1099: 0x9012, 0x109a: 0x9012, 0x109b: 0x9012, 0x109c: 0x9012, 0x109d: 0x9012, + 0x109e: 0x9012, 0x109f: 0x9012, 0x10a0: 0x9049, 0x10a1: 0x9049, 0x10a2: 0x9049, 0x10a3: 0x9049, + 0x10a4: 0x9049, 0x10a5: 0x9049, 0x10a6: 0x9049, 0x10a7: 0x9049, 0x10a8: 0x9049, 0x10a9: 0x9049, + 0x10aa: 0x9049, 0x10ab: 0x9049, 0x10ac: 0x9049, 0x10ad: 0x9049, 0x10ae: 0x9049, 0x10af: 0x9049, + 0x10b0: 0x9049, 0x10b1: 0x9049, 0x10b2: 0x9049, 0x10b3: 0x9049, 0x10b4: 0x9049, 0x10b5: 0x9049, + 0x10b6: 0x9049, 0x10b7: 0x9049, 0x10b8: 0x9049, 0x10b9: 0x9049, 0x10ba: 0x9049, 0x10bb: 0x9049, + 0x10bc: 0x9049, 0x10bd: 0x9049, 0x10be: 0x9049, 0x10bf: 0x9049, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x9049, 0x10c1: 0x9049, 0x10c2: 0x9049, 0x10c3: 0x9049, 0x10c4: 0x9049, 0x10c5: 0x9049, + 0x10c6: 0x9049, 0x10c7: 0x9049, 0x10c8: 0x9049, 0x10c9: 0x9049, 0x10ca: 0x9049, 0x10cb: 0x9049, + 0x10cc: 0x9049, 0x10cd: 0x9049, 0x10ce: 0x9049, 0x10cf: 0x9049, 0x10d0: 0x9049, 0x10d1: 0x9049, + 0x10d2: 0x9049, 0x10d3: 0x9049, 0x10d4: 0x9049, 0x10d5: 0x9049, 0x10d6: 0x9049, 0x10d7: 0x9049, + 0x10d8: 0x9049, 0x10d9: 0x9049, 0x10da: 0x9049, 0x10db: 0x9049, 0x10dc: 0x9049, 0x10dd: 0x9049, + 0x10de: 0x9049, 0x10df: 0x904a, 0x10e0: 0x904b, 0x10e1: 0xb04c, 0x10e2: 0xb04d, 0x10e3: 0xb04d, + 0x10e4: 0xb04e, 0x10e5: 0xb04f, 0x10e6: 0xb050, 0x10e7: 0xb051, 0x10e8: 0xb052, 0x10e9: 0xb053, + 0x10ea: 0xb054, 0x10eb: 0xb055, 0x10ec: 0xb056, 0x10ed: 0xb057, 0x10ee: 0xb058, 0x10ef: 0xb059, + 0x10f0: 0xb05a, 0x10f1: 0xb05b, 0x10f2: 0xb05c, 0x10f3: 0xb05d, 0x10f4: 0xb05e, 0x10f5: 0xb05f, + 0x10f6: 0xb060, 0x10f7: 0xb061, 0x10f8: 0xb062, 0x10f9: 0xb063, 0x10fa: 0xb064, 0x10fb: 0xb065, + 0x10fc: 0xb052, 0x10fd: 0xb066, 0x10fe: 0xb067, 0x10ff: 0xb055, + // Block 0x44, offset 0x1100 + 0x1100: 0xb068, 0x1101: 0xb069, 0x1102: 0xb06a, 0x1103: 0xb06b, 0x1104: 0xb05a, 0x1105: 0xb056, + 0x1106: 0xb06c, 0x1107: 0xb06d, 0x1108: 0xb06b, 0x1109: 0xb06e, 0x110a: 0xb06b, 0x110b: 0xb06f, + 0x110c: 0xb06f, 0x110d: 0xb070, 0x110e: 0xb070, 0x110f: 0xb071, 0x1110: 0xb056, 0x1111: 0xb072, + 0x1112: 0xb073, 0x1113: 0xb072, 0x1114: 0xb074, 0x1115: 0xb073, 0x1116: 0xb075, 0x1117: 0xb075, + 0x1118: 0xb076, 0x1119: 0xb076, 0x111a: 0xb077, 0x111b: 0xb077, 0x111c: 0xb073, 0x111d: 0xb078, + 0x111e: 0xb079, 0x111f: 0xb067, 0x1120: 0xb07a, 0x1121: 0xb07b, 0x1122: 0xb07b, 0x1123: 0xb07b, + 0x1124: 0xb07b, 0x1125: 0xb07b, 0x1126: 0xb07b, 0x1127: 0xb07b, 0x1128: 0xb07b, 0x1129: 0xb07b, + 0x112a: 0xb07b, 0x112b: 0xb07b, 0x112c: 0xb07b, 0x112d: 0xb07b, 0x112e: 0xb07b, 0x112f: 0xb07b, + 0x1130: 0xb07c, 0x1131: 0xb07c, 0x1132: 0xb07c, 0x1133: 0xb07c, 0x1134: 0xb07c, 0x1135: 0xb07c, + 0x1136: 0xb07c, 0x1137: 0xb07c, 0x1138: 0xb07c, 0x1139: 0xb07c, 0x113a: 0xb07c, 0x113b: 0xb07c, + 0x113c: 0xb07c, 0x113d: 0xb07c, 0x113e: 0xb07c, + // Block 0x45, offset 0x1140 + 0x1142: 0xb07d, 0x1143: 0xb07e, 0x1144: 0xb07f, 0x1145: 0xb080, + 0x1146: 0xb07f, 0x1147: 0xb07e, 0x114a: 0xb081, 0x114b: 0xb082, + 0x114c: 0xb083, 0x114d: 0xb07f, 0x114e: 0xb080, 0x114f: 0xb07f, + 0x1152: 0xb084, 0x1153: 0xb085, 0x1154: 0xb084, 0x1155: 0xb086, 0x1156: 0xb084, 0x1157: 0xb087, + 0x115a: 0xb088, 0x115b: 0xb089, 0x115c: 0xb08a, + 0x1160: 0x908b, 0x1161: 0x908b, 0x1162: 0x908c, 0x1163: 0x908d, + 0x1164: 0x908b, 0x1165: 0x908e, 0x1166: 0x908f, 0x1168: 0xb090, 0x1169: 0xb091, + 0x116a: 0xb092, 0x116b: 0xb091, 0x116c: 0xb093, 0x116d: 0xb094, 0x116e: 0xb095, + 0x117d: 0x2000, + // Block 0x46, offset 0x1180 + 0x11a0: 0x4000, 0x11a1: 0x4000, 0x11a2: 0x4000, 0x11a3: 0x4000, + 0x11a4: 0x4000, + 0x11b0: 0x4000, 0x11b1: 0x4000, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x4000, 0x11c1: 0x4000, 0x11c2: 0x4000, 0x11c3: 0x4000, 0x11c4: 0x4000, 0x11c5: 0x4000, + 0x11c6: 0x4000, 0x11c7: 0x4000, 0x11c8: 0x4000, 0x11c9: 0x4000, 0x11ca: 0x4000, 0x11cb: 0x4000, + 0x11cc: 0x4000, 0x11cd: 0x4000, 0x11ce: 0x4000, 0x11cf: 0x4000, 0x11d0: 0x4000, 0x11d1: 0x4000, + 0x11d2: 0x4000, 0x11d3: 0x4000, 0x11d4: 0x4000, 0x11d5: 0x4000, 0x11d6: 0x4000, 0x11d7: 0x4000, + 0x11d8: 0x4000, 0x11d9: 0x4000, 0x11da: 0x4000, 0x11db: 0x4000, 0x11dc: 0x4000, 0x11dd: 0x4000, + 0x11de: 0x4000, 0x11df: 0x4000, 0x11e0: 0x4000, 0x11e1: 0x4000, 0x11e2: 0x4000, 0x11e3: 0x4000, + 0x11e4: 0x4000, 0x11e5: 0x4000, 0x11e6: 0x4000, 0x11e7: 0x4000, 0x11e8: 0x4000, 0x11e9: 0x4000, + 0x11ea: 0x4000, 0x11eb: 0x4000, 0x11ec: 0x4000, 0x11ed: 0x4000, 0x11ee: 0x4000, 0x11ef: 0x4000, + 0x11f0: 0x4000, 0x11f1: 0x4000, 0x11f2: 0x4000, 0x11f3: 0x4000, 0x11f4: 0x4000, 0x11f5: 0x4000, + 0x11f6: 0x4000, 0x11f7: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, + // Block 0x4a, offset 0x1280 + 0x12b0: 0x4000, 0x12b1: 0x4000, 0x12b2: 0x4000, 0x12b3: 0x4000, 0x12b5: 0x4000, + 0x12b6: 0x4000, 0x12b7: 0x4000, 0x12b8: 0x4000, 0x12b9: 0x4000, 0x12ba: 0x4000, 0x12bb: 0x4000, + 0x12bd: 0x4000, 0x12be: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x4000, 0x12c1: 0x4000, 0x12c2: 0x4000, 0x12c3: 0x4000, 0x12c4: 0x4000, 0x12c5: 0x4000, + 0x12c6: 0x4000, 0x12c7: 0x4000, 0x12c8: 0x4000, 0x12c9: 0x4000, 0x12ca: 0x4000, 0x12cb: 0x4000, + 0x12cc: 0x4000, 0x12cd: 0x4000, 0x12ce: 0x4000, 0x12cf: 0x4000, 0x12d0: 0x4000, 0x12d1: 0x4000, + 0x12d2: 0x4000, 0x12d3: 0x4000, 0x12d4: 0x4000, 0x12d5: 0x4000, 0x12d6: 0x4000, 0x12d7: 0x4000, + 0x12d8: 0x4000, 0x12d9: 0x4000, 0x12da: 0x4000, 0x12db: 0x4000, 0x12dc: 0x4000, 0x12dd: 0x4000, + 0x12de: 0x4000, 0x12df: 0x4000, 0x12e0: 0x4000, 0x12e1: 0x4000, 0x12e2: 0x4000, + 0x12f2: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1315: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + 0x133c: 0x4000, 0x133d: 0x4000, 0x133e: 0x4000, 0x133f: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1340: 0x4000, 0x1341: 0x4000, 0x1342: 0x4000, 0x1343: 0x4000, 0x1344: 0x4000, 0x1345: 0x4000, + 0x1346: 0x4000, 0x1347: 0x4000, 0x1348: 0x4000, 0x1349: 0x4000, 0x134a: 0x4000, 0x134b: 0x4000, + 0x134c: 0x4000, 0x134d: 0x4000, 0x134e: 0x4000, 0x134f: 0x4000, 0x1350: 0x4000, 0x1351: 0x4000, + 0x1352: 0x4000, 0x1353: 0x4000, 0x1354: 0x4000, 0x1355: 0x4000, 0x1356: 0x4000, 0x1357: 0x4000, + 0x1358: 0x4000, 0x1359: 0x4000, 0x135a: 0x4000, 0x135b: 0x4000, 0x135c: 0x4000, 0x135d: 0x4000, + 0x135e: 0x4000, 0x135f: 0x4000, 0x1360: 0x4000, 0x1361: 0x4000, 0x1362: 0x4000, 0x1363: 0x4000, + 0x1364: 0x4000, 0x1365: 0x4000, 0x1366: 0x4000, 0x1367: 0x4000, 0x1368: 0x4000, 0x1369: 0x4000, + 0x136a: 0x4000, 0x136b: 0x4000, 0x136c: 0x4000, 0x136d: 0x4000, 0x136e: 0x4000, 0x136f: 0x4000, + 0x1370: 0x4000, 0x1371: 0x4000, 0x1372: 0x4000, 0x1373: 0x4000, 0x1374: 0x4000, 0x1375: 0x4000, + 0x1376: 0x4000, 0x1377: 0x4000, 0x1378: 0x4000, 0x1379: 0x4000, 0x137a: 0x4000, 0x137b: 0x4000, + // Block 0x4e, offset 0x1380 + 0x1384: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13cf: 0x4000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, + 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x142a: 0x2000, 0x142b: 0x2000, 0x142c: 0x2000, 0x142d: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x2000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x2000, + 0x1452: 0x2000, 0x1453: 0x2000, 0x1454: 0x2000, 0x1455: 0x2000, 0x1456: 0x2000, 0x1457: 0x2000, + 0x1458: 0x2000, 0x1459: 0x2000, 0x145a: 0x2000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x1470: 0x2000, 0x1471: 0x2000, 0x1472: 0x2000, 0x1473: 0x2000, 0x1474: 0x2000, 0x1475: 0x2000, + 0x1476: 0x2000, 0x1477: 0x2000, 0x1478: 0x2000, 0x1479: 0x2000, 0x147a: 0x2000, 0x147b: 0x2000, + 0x147c: 0x2000, 0x147d: 0x2000, 0x147e: 0x2000, 0x147f: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x2000, 0x1481: 0x2000, 0x1482: 0x2000, 0x1483: 0x2000, 0x1484: 0x2000, 0x1485: 0x2000, + 0x1486: 0x2000, 0x1487: 0x2000, 0x1488: 0x2000, 0x1489: 0x2000, 0x148a: 0x2000, 0x148b: 0x2000, + 0x148c: 0x2000, 0x148d: 0x2000, 0x148e: 0x4000, 0x148f: 0x2000, 0x1490: 0x2000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x2000, 0x149c: 0x2000, 0x149d: 0x2000, + 0x149e: 0x2000, 0x149f: 0x2000, 0x14a0: 0x2000, 0x14a1: 0x2000, 0x14a2: 0x2000, 0x14a3: 0x2000, + 0x14a4: 0x2000, 0x14a5: 0x2000, 0x14a6: 0x2000, 0x14a7: 0x2000, 0x14a8: 0x2000, 0x14a9: 0x2000, + 0x14aa: 0x2000, 0x14ab: 0x2000, 0x14ac: 0x2000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, + 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, + 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, + 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, + 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, + 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, + 0x1510: 0x4000, 0x1511: 0x4000, + 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, + 0x1524: 0x4000, 0x1525: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, + 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, + 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, + 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, + 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, + 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, + 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, + 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1634: 0x4000, + 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167d: 0x4000, 0x167e: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, 0x16be: 0x4000, 0x16bf: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x4000, 0x16c1: 0x4000, 0x16c2: 0x4000, 0x16c3: 0x4000, 0x16c4: 0x4000, 0x16c5: 0x4000, + 0x16c6: 0x4000, 0x16c7: 0x4000, 0x16c8: 0x4000, 0x16c9: 0x4000, 0x16ca: 0x4000, 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16cf: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, 0x16e8: 0x4000, 0x16e9: 0x4000, + 0x16ea: 0x4000, 0x16eb: 0x4000, 0x16ec: 0x4000, 0x16ed: 0x4000, 0x16ee: 0x4000, 0x16ef: 0x4000, + 0x16f0: 0x4000, 0x16f1: 0x4000, 0x16f2: 0x4000, 0x16f3: 0x4000, 0x16f4: 0x4000, 0x16f5: 0x4000, + 0x16f6: 0x4000, 0x16f7: 0x4000, 0x16f8: 0x4000, 0x16f9: 0x4000, 0x16fa: 0x4000, 0x16fb: 0x4000, + 0x16fc: 0x4000, 0x16ff: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, + 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, 0x1710: 0x4000, 0x1711: 0x4000, + 0x1712: 0x4000, 0x1713: 0x4000, 0x1714: 0x4000, 0x1715: 0x4000, 0x1716: 0x4000, 0x1717: 0x4000, + 0x1718: 0x4000, 0x1719: 0x4000, 0x171a: 0x4000, 0x171b: 0x4000, 0x171c: 0x4000, 0x171d: 0x4000, + 0x171e: 0x4000, 0x171f: 0x4000, 0x1720: 0x4000, 0x1721: 0x4000, 0x1722: 0x4000, 0x1723: 0x4000, + 0x1724: 0x4000, 0x1725: 0x4000, 0x1726: 0x4000, 0x1727: 0x4000, 0x1728: 0x4000, 0x1729: 0x4000, + 0x172a: 0x4000, 0x172b: 0x4000, 0x172c: 0x4000, 0x172d: 0x4000, 0x172e: 0x4000, 0x172f: 0x4000, + 0x1730: 0x4000, 0x1731: 0x4000, 0x1732: 0x4000, 0x1733: 0x4000, 0x1734: 0x4000, 0x1735: 0x4000, + 0x1736: 0x4000, 0x1737: 0x4000, 0x1738: 0x4000, 0x1739: 0x4000, 0x173a: 0x4000, 0x173b: 0x4000, + 0x173c: 0x4000, 0x173d: 0x4000, + // Block 0x5d, offset 0x1740 + 0x174b: 0x4000, + 0x174c: 0x4000, 0x174d: 0x4000, 0x174e: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, + 0x1752: 0x4000, 0x1753: 0x4000, 0x1754: 0x4000, 0x1755: 0x4000, 0x1756: 0x4000, 0x1757: 0x4000, + 0x1758: 0x4000, 0x1759: 0x4000, 0x175a: 0x4000, 0x175b: 0x4000, 0x175c: 0x4000, 0x175d: 0x4000, + 0x175e: 0x4000, 0x175f: 0x4000, 0x1760: 0x4000, 0x1761: 0x4000, 0x1762: 0x4000, 0x1763: 0x4000, + 0x1764: 0x4000, 0x1765: 0x4000, 0x1766: 0x4000, 0x1767: 0x4000, + 0x177a: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1795: 0x4000, 0x1796: 0x4000, + 0x17a4: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17fb: 0x4000, + 0x17fc: 0x4000, 0x17fd: 0x4000, 0x17fe: 0x4000, 0x17ff: 0x4000, + // Block 0x60, offset 0x1800 + 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, + 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, + 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, + 0x184c: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, + 0x1852: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, + 0x185c: 0x4000, 0x185d: 0x4000, + 0x185e: 0x4000, 0x185f: 0x4000, + 0x186b: 0x4000, 0x186c: 0x4000, + 0x1874: 0x4000, 0x1875: 0x4000, + 0x1876: 0x4000, 0x1877: 0x4000, 0x1878: 0x4000, 0x1879: 0x4000, 0x187a: 0x4000, 0x187b: 0x4000, + 0x187c: 0x4000, + // Block 0x62, offset 0x1880 + 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, 0x18a3: 0x4000, + 0x18a4: 0x4000, 0x18a5: 0x4000, 0x18a6: 0x4000, 0x18a7: 0x4000, 0x18a8: 0x4000, 0x18a9: 0x4000, + 0x18aa: 0x4000, 0x18ab: 0x4000, + 0x18b0: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18cc: 0x4000, 0x18cd: 0x4000, 0x18ce: 0x4000, 0x18cf: 0x4000, 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, + 0x18ea: 0x4000, 0x18eb: 0x4000, 0x18ec: 0x4000, 0x18ed: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, + 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, + 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18f9: 0x4000, 0x18fa: 0x4000, + 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x4000, 0x1901: 0x4000, 0x1902: 0x4000, 0x1903: 0x4000, 0x1904: 0x4000, 0x1905: 0x4000, + 0x1907: 0x4000, 0x1908: 0x4000, 0x1909: 0x4000, 0x190a: 0x4000, 0x190b: 0x4000, + 0x190c: 0x4000, 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, + 0x1912: 0x4000, 0x1913: 0x4000, 0x1914: 0x4000, 0x1915: 0x4000, 0x1916: 0x4000, 0x1917: 0x4000, + 0x1918: 0x4000, 0x1919: 0x4000, 0x191a: 0x4000, 0x191b: 0x4000, 0x191c: 0x4000, 0x191d: 0x4000, + 0x191e: 0x4000, 0x191f: 0x4000, 0x1920: 0x4000, 0x1921: 0x4000, 0x1922: 0x4000, 0x1923: 0x4000, + 0x1924: 0x4000, 0x1925: 0x4000, 0x1926: 0x4000, 0x1927: 0x4000, 0x1928: 0x4000, 0x1929: 0x4000, + 0x192a: 0x4000, 0x192b: 0x4000, 0x192c: 0x4000, 0x192d: 0x4000, 0x192e: 0x4000, 0x192f: 0x4000, + 0x1930: 0x4000, 0x1931: 0x4000, 0x1932: 0x4000, 0x1933: 0x4000, 0x1934: 0x4000, 0x1935: 0x4000, + 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193b: 0x4000, + 0x193c: 0x4000, 0x193d: 0x4000, 0x193e: 0x4000, 0x193f: 0x4000, + // Block 0x65, offset 0x1940 + 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, 0x1974: 0x4000, 0x1975: 0x4000, + 0x1976: 0x4000, 0x1977: 0x4000, 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, 0x197b: 0x4000, + 0x197c: 0x4000, + // Block 0x66, offset 0x1980 + 0x1980: 0x4000, 0x1981: 0x4000, 0x1982: 0x4000, 0x1983: 0x4000, 0x1984: 0x4000, 0x1985: 0x4000, + 0x1986: 0x4000, 0x1987: 0x4000, 0x1988: 0x4000, + 0x1990: 0x4000, 0x1991: 0x4000, + 0x1992: 0x4000, 0x1993: 0x4000, 0x1994: 0x4000, 0x1995: 0x4000, 0x1996: 0x4000, 0x1997: 0x4000, + 0x1998: 0x4000, 0x1999: 0x4000, 0x199a: 0x4000, 0x199b: 0x4000, 0x199c: 0x4000, 0x199d: 0x4000, + 0x199e: 0x4000, 0x199f: 0x4000, 0x19a0: 0x4000, 0x19a1: 0x4000, 0x19a2: 0x4000, 0x19a3: 0x4000, + 0x19a4: 0x4000, 0x19a5: 0x4000, 0x19a6: 0x4000, 0x19a7: 0x4000, 0x19a8: 0x4000, 0x19a9: 0x4000, + 0x19aa: 0x4000, 0x19ab: 0x4000, 0x19ac: 0x4000, 0x19ad: 0x4000, 0x19ae: 0x4000, 0x19af: 0x4000, + 0x19b0: 0x4000, 0x19b1: 0x4000, 0x19b2: 0x4000, 0x19b3: 0x4000, 0x19b4: 0x4000, 0x19b5: 0x4000, + 0x19b6: 0x4000, 0x19b7: 0x4000, 0x19b8: 0x4000, 0x19b9: 0x4000, 0x19ba: 0x4000, 0x19bb: 0x4000, + 0x19bc: 0x4000, 0x19bd: 0x4000, 0x19bf: 0x4000, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x4000, 0x19c1: 0x4000, 0x19c2: 0x4000, 0x19c3: 0x4000, 0x19c4: 0x4000, 0x19c5: 0x4000, + 0x19ce: 0x4000, 0x19cf: 0x4000, 0x19d0: 0x4000, 0x19d1: 0x4000, + 0x19d2: 0x4000, 0x19d3: 0x4000, 0x19d4: 0x4000, 0x19d5: 0x4000, 0x19d6: 0x4000, 0x19d7: 0x4000, + 0x19d8: 0x4000, 0x19d9: 0x4000, 0x19da: 0x4000, 0x19db: 0x4000, + 0x19e0: 0x4000, 0x19e1: 0x4000, 0x19e2: 0x4000, 0x19e3: 0x4000, + 0x19e4: 0x4000, 0x19e5: 0x4000, 0x19e6: 0x4000, 0x19e7: 0x4000, 0x19e8: 0x4000, + 0x19f0: 0x4000, 0x19f1: 0x4000, 0x19f2: 0x4000, 0x19f3: 0x4000, 0x19f4: 0x4000, 0x19f5: 0x4000, + 0x19f6: 0x4000, 0x19f7: 0x4000, 0x19f8: 0x4000, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x2000, 0x1a01: 0x2000, 0x1a02: 0x2000, 0x1a03: 0x2000, 0x1a04: 0x2000, 0x1a05: 0x2000, + 0x1a06: 0x2000, 0x1a07: 0x2000, 0x1a08: 0x2000, 0x1a09: 0x2000, 0x1a0a: 0x2000, 0x1a0b: 0x2000, + 0x1a0c: 0x2000, 0x1a0d: 0x2000, 0x1a0e: 0x2000, 0x1a0f: 0x2000, 0x1a10: 0x2000, 0x1a11: 0x2000, + 0x1a12: 0x2000, 0x1a13: 0x2000, 0x1a14: 0x2000, 0x1a15: 0x2000, 0x1a16: 0x2000, 0x1a17: 0x2000, + 0x1a18: 0x2000, 0x1a19: 0x2000, 0x1a1a: 0x2000, 0x1a1b: 0x2000, 0x1a1c: 0x2000, 0x1a1d: 0x2000, + 0x1a1e: 0x2000, 0x1a1f: 0x2000, 0x1a20: 0x2000, 0x1a21: 0x2000, 0x1a22: 0x2000, 0x1a23: 0x2000, + 0x1a24: 0x2000, 0x1a25: 0x2000, 0x1a26: 0x2000, 0x1a27: 0x2000, 0x1a28: 0x2000, 0x1a29: 0x2000, + 0x1a2a: 0x2000, 0x1a2b: 0x2000, 0x1a2c: 0x2000, 0x1a2d: 0x2000, 0x1a2e: 0x2000, 0x1a2f: 0x2000, + 0x1a30: 0x2000, 0x1a31: 0x2000, 0x1a32: 0x2000, 0x1a33: 0x2000, 0x1a34: 0x2000, 0x1a35: 0x2000, + 0x1a36: 0x2000, 0x1a37: 0x2000, 0x1a38: 0x2000, 0x1a39: 0x2000, 0x1a3a: 0x2000, 0x1a3b: 0x2000, + 0x1a3c: 0x2000, 0x1a3d: 0x2000, +} + +// widthIndex: 23 blocks, 1472 entries, 1472 bytes +// Block 0 is the zero block. +var widthIndex = [1472]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x10, 0xf3: 0x13, 0xf4: 0x14, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x0e, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3a, 0x253: 0x3b, + 0x265: 0x3c, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3e, 0x339: 0x3f, 0x33c: 0x40, 0x33d: 0x41, 0x33e: 0x42, 0x33f: 0x43, + // Block 0xd, offset 0x340 + 0x37f: 0x44, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x45, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x0e, 0x3ac: 0x0e, 0x3ad: 0x0e, 0x3ae: 0x0e, 0x3af: 0x0e, + 0x3b0: 0x0e, 0x3b1: 0x0e, 0x3b2: 0x0e, 0x3b3: 0x46, 0x3b4: 0x47, + // Block 0xf, offset 0x3c0 + 0x3ff: 0x48, + // Block 0x10, offset 0x400 + 0x400: 0x0e, 0x401: 0x0e, 0x402: 0x0e, 0x403: 0x0e, 0x404: 0x49, 0x405: 0x4a, 0x406: 0x0e, 0x407: 0x0e, + 0x408: 0x0e, 0x409: 0x0e, 0x40a: 0x0e, 0x40b: 0x4b, + // Block 0x11, offset 0x440 + 0x440: 0x4c, 0x443: 0x4d, 0x444: 0x4e, 0x445: 0x4f, 0x446: 0x50, + 0x448: 0x51, 0x449: 0x52, 0x44c: 0x53, 0x44d: 0x54, 0x44e: 0x55, 0x44f: 0x56, + 0x450: 0x57, 0x451: 0x58, 0x452: 0x0e, 0x453: 0x59, 0x454: 0x5a, 0x455: 0x5b, 0x456: 0x5c, 0x457: 0x5d, + 0x458: 0x0e, 0x459: 0x5e, 0x45a: 0x0e, 0x45b: 0x5f, 0x45f: 0x60, + 0x464: 0x61, 0x465: 0x62, 0x466: 0x0e, 0x467: 0x0e, + 0x469: 0x63, 0x46a: 0x64, 0x46b: 0x65, + // Block 0x12, offset 0x480 + 0x496: 0x0b, 0x497: 0x06, + 0x498: 0x0c, 0x49a: 0x0d, 0x49b: 0x0e, 0x49f: 0x0f, + 0x4a0: 0x06, 0x4a1: 0x06, 0x4a2: 0x06, 0x4a3: 0x06, 0x4a4: 0x06, 0x4a5: 0x06, 0x4a6: 0x06, 0x4a7: 0x06, + 0x4a8: 0x06, 0x4a9: 0x06, 0x4aa: 0x06, 0x4ab: 0x06, 0x4ac: 0x06, 0x4ad: 0x06, 0x4ae: 0x06, 0x4af: 0x06, + 0x4b0: 0x06, 0x4b1: 0x06, 0x4b2: 0x06, 0x4b3: 0x06, 0x4b4: 0x06, 0x4b5: 0x06, 0x4b6: 0x06, 0x4b7: 0x06, + 0x4b8: 0x06, 0x4b9: 0x06, 0x4ba: 0x06, 0x4bb: 0x06, 0x4bc: 0x06, 0x4bd: 0x06, 0x4be: 0x06, 0x4bf: 0x06, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x09, + // Block 0x14, offset 0x500 + 0x500: 0x08, 0x501: 0x08, 0x502: 0x08, 0x503: 0x08, 0x504: 0x08, 0x505: 0x08, 0x506: 0x08, 0x507: 0x08, + 0x508: 0x08, 0x509: 0x08, 0x50a: 0x08, 0x50b: 0x08, 0x50c: 0x08, 0x50d: 0x08, 0x50e: 0x08, 0x50f: 0x08, + 0x510: 0x08, 0x511: 0x08, 0x512: 0x08, 0x513: 0x08, 0x514: 0x08, 0x515: 0x08, 0x516: 0x08, 0x517: 0x08, + 0x518: 0x08, 0x519: 0x08, 0x51a: 0x08, 0x51b: 0x08, 0x51c: 0x08, 0x51d: 0x08, 0x51e: 0x08, 0x51f: 0x08, + 0x520: 0x08, 0x521: 0x08, 0x522: 0x08, 0x523: 0x08, 0x524: 0x08, 0x525: 0x08, 0x526: 0x08, 0x527: 0x08, + 0x528: 0x08, 0x529: 0x08, 0x52a: 0x08, 0x52b: 0x08, 0x52c: 0x08, 0x52d: 0x08, 0x52e: 0x08, 0x52f: 0x08, + 0x530: 0x08, 0x531: 0x08, 0x532: 0x08, 0x533: 0x08, 0x534: 0x08, 0x535: 0x08, 0x536: 0x08, 0x537: 0x08, + 0x538: 0x08, 0x539: 0x08, 0x53a: 0x08, 0x53b: 0x08, 0x53c: 0x08, 0x53d: 0x08, 0x53e: 0x08, 0x53f: 0x66, + // Block 0x15, offset 0x540 + 0x560: 0x11, + 0x570: 0x09, 0x571: 0x09, 0x572: 0x09, 0x573: 0x09, 0x574: 0x09, 0x575: 0x09, 0x576: 0x09, 0x577: 0x09, + 0x578: 0x09, 0x579: 0x09, 0x57a: 0x09, 0x57b: 0x09, 0x57c: 0x09, 0x57d: 0x09, 0x57e: 0x09, 0x57f: 0x12, + // Block 0x16, offset 0x580 + 0x580: 0x09, 0x581: 0x09, 0x582: 0x09, 0x583: 0x09, 0x584: 0x09, 0x585: 0x09, 0x586: 0x09, 0x587: 0x09, + 0x588: 0x09, 0x589: 0x09, 0x58a: 0x09, 0x58b: 0x09, 0x58c: 0x09, 0x58d: 0x09, 0x58e: 0x09, 0x58f: 0x12, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 15512 bytes (15KiB) diff --git a/vendor/golang.org/x/text/width/tables9.0.0.go b/vendor/golang.org/x/text/width/tables9.0.0.go new file mode 100644 index 0000000..d981330 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables9.0.0.go @@ -0,0 +1,1296 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build !go1.10 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := widthIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = widthIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = widthIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14080 bytes (13.75 KiB). Checksum: 3b8aeb3dc03667a3. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 99 blocks, 6336 entries, 12672 bytes +// The third block is the zero block. +var widthValues = [6336]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12c4: 0x4000, + // Block 0x4c, offset 0x1300 + 0x130f: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1340: 0x2000, 0x1341: 0x2000, 0x1342: 0x2000, 0x1343: 0x2000, 0x1344: 0x2000, 0x1345: 0x2000, + 0x1346: 0x2000, 0x1347: 0x2000, 0x1348: 0x2000, 0x1349: 0x2000, 0x134a: 0x2000, + 0x1350: 0x2000, 0x1351: 0x2000, + 0x1352: 0x2000, 0x1353: 0x2000, 0x1354: 0x2000, 0x1355: 0x2000, 0x1356: 0x2000, 0x1357: 0x2000, + 0x1358: 0x2000, 0x1359: 0x2000, 0x135a: 0x2000, 0x135b: 0x2000, 0x135c: 0x2000, 0x135d: 0x2000, + 0x135e: 0x2000, 0x135f: 0x2000, 0x1360: 0x2000, 0x1361: 0x2000, 0x1362: 0x2000, 0x1363: 0x2000, + 0x1364: 0x2000, 0x1365: 0x2000, 0x1366: 0x2000, 0x1367: 0x2000, 0x1368: 0x2000, 0x1369: 0x2000, + 0x136a: 0x2000, 0x136b: 0x2000, 0x136c: 0x2000, 0x136d: 0x2000, + 0x1370: 0x2000, 0x1371: 0x2000, 0x1372: 0x2000, 0x1373: 0x2000, 0x1374: 0x2000, 0x1375: 0x2000, + 0x1376: 0x2000, 0x1377: 0x2000, 0x1378: 0x2000, 0x1379: 0x2000, 0x137a: 0x2000, 0x137b: 0x2000, + 0x137c: 0x2000, 0x137d: 0x2000, 0x137e: 0x2000, 0x137f: 0x2000, + // Block 0x4e, offset 0x1380 + 0x1380: 0x2000, 0x1381: 0x2000, 0x1382: 0x2000, 0x1383: 0x2000, 0x1384: 0x2000, 0x1385: 0x2000, + 0x1386: 0x2000, 0x1387: 0x2000, 0x1388: 0x2000, 0x1389: 0x2000, 0x138a: 0x2000, 0x138b: 0x2000, + 0x138c: 0x2000, 0x138d: 0x2000, 0x138e: 0x2000, 0x138f: 0x2000, 0x1390: 0x2000, 0x1391: 0x2000, + 0x1392: 0x2000, 0x1393: 0x2000, 0x1394: 0x2000, 0x1395: 0x2000, 0x1396: 0x2000, 0x1397: 0x2000, + 0x1398: 0x2000, 0x1399: 0x2000, 0x139a: 0x2000, 0x139b: 0x2000, 0x139c: 0x2000, 0x139d: 0x2000, + 0x139e: 0x2000, 0x139f: 0x2000, 0x13a0: 0x2000, 0x13a1: 0x2000, 0x13a2: 0x2000, 0x13a3: 0x2000, + 0x13a4: 0x2000, 0x13a5: 0x2000, 0x13a6: 0x2000, 0x13a7: 0x2000, 0x13a8: 0x2000, 0x13a9: 0x2000, + 0x13b0: 0x2000, 0x13b1: 0x2000, 0x13b2: 0x2000, 0x13b3: 0x2000, 0x13b4: 0x2000, 0x13b5: 0x2000, + 0x13b6: 0x2000, 0x13b7: 0x2000, 0x13b8: 0x2000, 0x13b9: 0x2000, 0x13ba: 0x2000, 0x13bb: 0x2000, + 0x13bc: 0x2000, 0x13bd: 0x2000, 0x13be: 0x2000, 0x13bf: 0x2000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, 0x13cb: 0x2000, + 0x13cc: 0x2000, 0x13cd: 0x2000, 0x13ce: 0x4000, 0x13cf: 0x2000, 0x13d0: 0x2000, 0x13d1: 0x4000, + 0x13d2: 0x4000, 0x13d3: 0x4000, 0x13d4: 0x4000, 0x13d5: 0x4000, 0x13d6: 0x4000, 0x13d7: 0x4000, + 0x13d8: 0x4000, 0x13d9: 0x4000, 0x13da: 0x4000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x4000, 0x1401: 0x4000, 0x1402: 0x4000, + 0x1410: 0x4000, 0x1411: 0x4000, + 0x1412: 0x4000, 0x1413: 0x4000, 0x1414: 0x4000, 0x1415: 0x4000, 0x1416: 0x4000, 0x1417: 0x4000, + 0x1418: 0x4000, 0x1419: 0x4000, 0x141a: 0x4000, 0x141b: 0x4000, 0x141c: 0x4000, 0x141d: 0x4000, + 0x141e: 0x4000, 0x141f: 0x4000, 0x1420: 0x4000, 0x1421: 0x4000, 0x1422: 0x4000, 0x1423: 0x4000, + 0x1424: 0x4000, 0x1425: 0x4000, 0x1426: 0x4000, 0x1427: 0x4000, 0x1428: 0x4000, 0x1429: 0x4000, + 0x142a: 0x4000, 0x142b: 0x4000, 0x142c: 0x4000, 0x142d: 0x4000, 0x142e: 0x4000, 0x142f: 0x4000, + 0x1430: 0x4000, 0x1431: 0x4000, 0x1432: 0x4000, 0x1433: 0x4000, 0x1434: 0x4000, 0x1435: 0x4000, + 0x1436: 0x4000, 0x1437: 0x4000, 0x1438: 0x4000, 0x1439: 0x4000, 0x143a: 0x4000, 0x143b: 0x4000, + // Block 0x51, offset 0x1440 + 0x1440: 0x4000, 0x1441: 0x4000, 0x1442: 0x4000, 0x1443: 0x4000, 0x1444: 0x4000, 0x1445: 0x4000, + 0x1446: 0x4000, 0x1447: 0x4000, 0x1448: 0x4000, + 0x1450: 0x4000, 0x1451: 0x4000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, 0x1483: 0x4000, 0x1484: 0x4000, 0x1485: 0x4000, + 0x1486: 0x4000, 0x1487: 0x4000, 0x1488: 0x4000, 0x1489: 0x4000, 0x148a: 0x4000, 0x148b: 0x4000, + 0x148c: 0x4000, 0x148d: 0x4000, 0x148e: 0x4000, 0x148f: 0x4000, 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, + 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + 0x14bc: 0x4000, 0x14bd: 0x4000, 0x14be: 0x4000, 0x14bf: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, 0x14c9: 0x4000, 0x14ca: 0x4000, 0x14cb: 0x4000, + 0x14cc: 0x4000, 0x14cd: 0x4000, 0x14ce: 0x4000, 0x14cf: 0x4000, 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, + 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, + 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, + 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, + 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, + 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, + 0x14fc: 0x4000, 0x14fe: 0x4000, 0x14ff: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, + 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, + 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, + 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, + 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, + 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1574: 0x4000, + 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, + 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, + 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, + 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, + 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, + 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, + 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, + // Block 0x59, offset 0x1640 + 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, + 0x167a: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1695: 0x4000, 0x1696: 0x4000, + 0x16a4: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16fb: 0x4000, + 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, + 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, + // Block 0x5d, offset 0x1740 + 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, + 0x174c: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, + 0x1752: 0x4000, + 0x176b: 0x4000, 0x176c: 0x4000, + 0x1774: 0x4000, 0x1775: 0x4000, + 0x1776: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1790: 0x4000, 0x1791: 0x4000, + 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, + 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, + 0x179e: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, + 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, + 0x17b0: 0x4000, 0x17b3: 0x4000, 0x17b4: 0x4000, 0x17b5: 0x4000, + 0x17b6: 0x4000, 0x17b7: 0x4000, 0x17b8: 0x4000, 0x17b9: 0x4000, 0x17ba: 0x4000, 0x17bb: 0x4000, + 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, + 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, 0x17d3: 0x4000, 0x17d4: 0x4000, 0x17d5: 0x4000, 0x17d6: 0x4000, 0x17d7: 0x4000, + 0x17d8: 0x4000, 0x17d9: 0x4000, 0x17da: 0x4000, 0x17db: 0x4000, 0x17dc: 0x4000, 0x17dd: 0x4000, + 0x17de: 0x4000, + // Block 0x60, offset 0x1800 + 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, + 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, + 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x2000, 0x1881: 0x2000, 0x1882: 0x2000, 0x1883: 0x2000, 0x1884: 0x2000, 0x1885: 0x2000, + 0x1886: 0x2000, 0x1887: 0x2000, 0x1888: 0x2000, 0x1889: 0x2000, 0x188a: 0x2000, 0x188b: 0x2000, + 0x188c: 0x2000, 0x188d: 0x2000, 0x188e: 0x2000, 0x188f: 0x2000, 0x1890: 0x2000, 0x1891: 0x2000, + 0x1892: 0x2000, 0x1893: 0x2000, 0x1894: 0x2000, 0x1895: 0x2000, 0x1896: 0x2000, 0x1897: 0x2000, + 0x1898: 0x2000, 0x1899: 0x2000, 0x189a: 0x2000, 0x189b: 0x2000, 0x189c: 0x2000, 0x189d: 0x2000, + 0x189e: 0x2000, 0x189f: 0x2000, 0x18a0: 0x2000, 0x18a1: 0x2000, 0x18a2: 0x2000, 0x18a3: 0x2000, + 0x18a4: 0x2000, 0x18a5: 0x2000, 0x18a6: 0x2000, 0x18a7: 0x2000, 0x18a8: 0x2000, 0x18a9: 0x2000, + 0x18aa: 0x2000, 0x18ab: 0x2000, 0x18ac: 0x2000, 0x18ad: 0x2000, 0x18ae: 0x2000, 0x18af: 0x2000, + 0x18b0: 0x2000, 0x18b1: 0x2000, 0x18b2: 0x2000, 0x18b3: 0x2000, 0x18b4: 0x2000, 0x18b5: 0x2000, + 0x18b6: 0x2000, 0x18b7: 0x2000, 0x18b8: 0x2000, 0x18b9: 0x2000, 0x18ba: 0x2000, 0x18bb: 0x2000, + 0x18bc: 0x2000, 0x18bd: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x48, + // Block 0x10, offset 0x400 + 0x400: 0x49, 0x403: 0x4a, 0x404: 0x4b, 0x405: 0x4c, 0x406: 0x4d, + 0x408: 0x4e, 0x409: 0x4f, 0x40c: 0x50, 0x40d: 0x51, 0x40e: 0x52, 0x40f: 0x53, + 0x410: 0x3a, 0x411: 0x54, 0x412: 0x0e, 0x413: 0x55, 0x414: 0x56, 0x415: 0x57, 0x416: 0x58, 0x417: 0x59, + 0x418: 0x0e, 0x419: 0x5a, 0x41a: 0x0e, 0x41b: 0x5b, + 0x424: 0x5c, 0x425: 0x5d, 0x426: 0x5e, 0x427: 0x5f, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x60, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// +// <0 padding> +// +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// +// { 0x01, 0xE0, 0x00, 0x00 } +// +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// +// E0 ^ A1 = 41. +// +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// +// E0 ^ A2 = 42. +// +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14680 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/transform.go b/vendor/golang.org/x/text/width/transform.go new file mode 100644 index 0000000..0049f70 --- /dev/null +++ b/vendor/golang.org/x/text/width/transform.go @@ -0,0 +1,239 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package width + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +type foldTransform struct { + transform.NopResetter +} + +func (foldTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + if src[n] < utf8.RuneSelf { + // ASCII fast path. + for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { + } + continue + } + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if elem(v)&tagNeedsFold != 0 { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (foldTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + if src[nSrc] < utf8.RuneSelf { + // ASCII fast path. + start, end := nSrc, len(src) + if d := len(dst) - nDst; d < end-start { + end = nSrc + d + } + for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { + } + n := copy(dst[nDst:], src[start:nSrc]) + if nDst += n; nDst == len(dst) { + nSrc = start + n + if nSrc == len(src) { + return nDst, nSrc, nil + } + if src[nSrc] < utf8.RuneSelf { + return nDst, nSrc, transform.ErrShortDst + } + } + continue + } + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if elem(v)&tagNeedsFold == 0 { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} + +type narrowTransform struct { + transform.NopResetter +} + +func (narrowTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + if src[n] < utf8.RuneSelf { + // ASCII fast path. + for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { + } + continue + } + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { + } else { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (narrowTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + if src[nSrc] < utf8.RuneSelf { + // ASCII fast path. + start, end := nSrc, len(src) + if d := len(dst) - nDst; d < end-start { + end = nSrc + d + } + for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { + } + n := copy(dst[nDst:], src[start:nSrc]) + if nDst += n; nDst == len(dst) { + nSrc = start + n + if nSrc == len(src) { + return nDst, nSrc, nil + } + if src[nSrc] < utf8.RuneSelf { + return nDst, nSrc, transform.ErrShortDst + } + } + continue + } + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} + +type wideTransform struct { + transform.NopResetter +} + +func (wideTransform) Span(src []byte, atEOF bool) (n int, err error) { + for n < len(src) { + // TODO: Consider ASCII fast path. Special-casing ASCII handling can + // reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably + // not enough to warrant the extra code and complexity. + v, size := trie.lookup(src[n:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + err = transform.ErrShortSrc + } else { + n = len(src) + } + break + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { + } else { + err = transform.ErrEndOfSpan + break + } + n += size + } + return n, err +} + +func (wideTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for nSrc < len(src) { + // TODO: Consider ASCII fast path. Special-casing ASCII handling can + // reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably + // not enough to warrant the extra code and complexity. + v, size := trie.lookup(src[nSrc:]) + if size == 0 { // incomplete UTF-8 encoding + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + size = 1 // gobble 1 byte + } + if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { + if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += size + } else { + data := inverseData[byte(v)] + if len(dst)-nDst < int(data[0]) { + return nDst, nSrc, transform.ErrShortDst + } + i := 1 + for end := int(data[0]); i < end; i++ { + dst[nDst] = data[i] + nDst++ + } + dst[nDst] = data[i] ^ src[nSrc+size-1] + nDst++ + } + nSrc += size + } + return nDst, nSrc, nil +} diff --git a/vendor/golang.org/x/text/width/trieval.go b/vendor/golang.org/x/text/width/trieval.go new file mode 100644 index 0000000..ca8e45f --- /dev/null +++ b/vendor/golang.org/x/text/width/trieval.go @@ -0,0 +1,30 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package width + +// elem is an entry of the width trie. The high byte is used to encode the type +// of the rune. The low byte is used to store the index to a mapping entry in +// the inverseData array. +type elem uint16 + +const ( + tagNeutral elem = iota << typeShift + tagAmbiguous + tagWide + tagNarrow + tagFullwidth + tagHalfwidth +) + +const ( + numTypeBits = 3 + typeShift = 16 - numTypeBits + + // tagNeedsFold is true for all fullwidth and halfwidth runes except for + // the Won sign U+20A9. + tagNeedsFold = 0x1000 + + // The Korean Won sign is halfwidth, but SHOULD NOT be mapped to a wide + // variant. + wonSign rune = 0x20A9 +) diff --git a/vendor/golang.org/x/text/width/width.go b/vendor/golang.org/x/text/width/width.go new file mode 100644 index 0000000..29c7509 --- /dev/null +++ b/vendor/golang.org/x/text/width/width.go @@ -0,0 +1,206 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate stringer -type=Kind +//go:generate go run gen.go gen_common.go gen_trieval.go + +// Package width provides functionality for handling different widths in text. +// +// Wide characters behave like ideographs; they tend to allow line breaks after +// each character and remain upright in vertical text layout. Narrow characters +// are kept together in words or runs that are rotated sideways in vertical text +// layout. +// +// For more information, see https://unicode.org/reports/tr11/. +package width // import "golang.org/x/text/width" + +import ( + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// TODO +// 1) Reduce table size by compressing blocks. +// 2) API proposition for computing display length +// (approximation, fixed pitch only). +// 3) Implement display length. + +// Kind indicates the type of width property as defined in https://unicode.org/reports/tr11/. +type Kind int + +const ( + // Neutral characters do not occur in legacy East Asian character sets. + Neutral Kind = iota + + // EastAsianAmbiguous characters that can be sometimes wide and sometimes + // narrow and require additional information not contained in the character + // code to further resolve their width. + EastAsianAmbiguous + + // EastAsianWide characters are wide in its usual form. They occur only in + // the context of East Asian typography. These runes may have explicit + // halfwidth counterparts. + EastAsianWide + + // EastAsianNarrow characters are narrow in its usual form. They often have + // fullwidth counterparts. + EastAsianNarrow + + // Note: there exist Narrow runes that do not have fullwidth or wide + // counterparts, despite what the definition says (e.g. U+27E6). + + // EastAsianFullwidth characters have a compatibility decompositions of type + // wide that map to a narrow counterpart. + EastAsianFullwidth + + // EastAsianHalfwidth characters have a compatibility decomposition of type + // narrow that map to a wide or ambiguous counterpart, plus U+20A9 ₩ WON + // SIGN. + EastAsianHalfwidth + + // Note: there exist runes that have a halfwidth counterparts but that are + // classified as Ambiguous, rather than wide (e.g. U+2190). +) + +// TODO: the generated tries need to return size 1 for invalid runes for the +// width to be computed correctly (each byte should render width 1) + +var trie = newWidthTrie(0) + +// Lookup reports the Properties of the first rune in b and the number of bytes +// of its UTF-8 encoding. +func Lookup(b []byte) (p Properties, size int) { + v, sz := trie.lookup(b) + return Properties{elem(v), b[sz-1]}, sz +} + +// LookupString reports the Properties of the first rune in s and the number of +// bytes of its UTF-8 encoding. +func LookupString(s string) (p Properties, size int) { + v, sz := trie.lookupString(s) + return Properties{elem(v), s[sz-1]}, sz +} + +// LookupRune reports the Properties of rune r. +func LookupRune(r rune) Properties { + var buf [4]byte + n := utf8.EncodeRune(buf[:], r) + v, _ := trie.lookup(buf[:n]) + last := byte(r) + if r >= utf8.RuneSelf { + last = 0x80 + byte(r&0x3f) + } + return Properties{elem(v), last} +} + +// Properties provides access to width properties of a rune. +type Properties struct { + elem elem + last byte +} + +func (e elem) kind() Kind { + return Kind(e >> typeShift) +} + +// Kind returns the Kind of a rune as defined in Unicode TR #11. +// See https://unicode.org/reports/tr11/ for more details. +func (p Properties) Kind() Kind { + return p.elem.kind() +} + +// Folded returns the folded variant of a rune or 0 if the rune is canonical. +func (p Properties) Folded() rune { + if p.elem&tagNeedsFold != 0 { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// Narrow returns the narrow variant of a rune or 0 if the rune is already +// narrow or doesn't have a narrow variant. +func (p Properties) Narrow() rune { + if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous) { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// Wide returns the wide variant of a rune or 0 if the rune is already +// wide or doesn't have a wide variant. +func (p Properties) Wide() rune { + if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianHalfwidth || k == EastAsianNarrow) { + buf := inverseData[byte(p.elem)] + buf[buf[0]] ^= p.last + r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) + return r + } + return 0 +} + +// TODO for Properties: +// - Add Fullwidth/Halfwidth or Inverted methods for computing variants +// mapping. +// - Add width information (including information on non-spacing runes). + +// Transformer implements the transform.Transformer interface. +type Transformer struct { + t transform.SpanningTransformer +} + +// Reset implements the transform.Transformer interface. +func (t Transformer) Reset() { t.t.Reset() } + +// Transform implements the transform.Transformer interface. +func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return t.t.Transform(dst, src, atEOF) +} + +// Span implements the transform.SpanningTransformer interface. +func (t Transformer) Span(src []byte, atEOF bool) (n int, err error) { + return t.t.Span(src, atEOF) +} + +// Bytes returns a new byte slice with the result of applying t to b. +func (t Transformer) Bytes(b []byte) []byte { + b, _, _ = transform.Bytes(t, b) + return b +} + +// String returns a string with the result of applying t to s. +func (t Transformer) String(s string) string { + s, _, _ = transform.String(t, s) + return s +} + +var ( + // Fold is a transform that maps all runes to their canonical width. + // + // Note that the NFKC and NFKD transforms in golang.org/x/text/unicode/norm + // provide a more generic folding mechanism. + Fold Transformer = Transformer{foldTransform{}} + + // Widen is a transform that maps runes to their wide variant, if + // available. + Widen Transformer = Transformer{wideTransform{}} + + // Narrow is a transform that maps runes to their narrow variant, if + // available. + Narrow Transformer = Transformer{narrowTransform{}} +) + +// TODO: Consider the following options: +// - Treat Ambiguous runes that have a halfwidth counterpart as wide, or some +// generalized variant of this. +// - Consider a wide Won character to be the default width (or some generalized +// variant of this). +// - Filter the set of characters that gets converted (the preferred approach is +// to allow applying filters to transforms). diff --git a/vendor/golang.org/x/tools/LICENSE b/vendor/golang.org/x/tools/LICENSE new file mode 100644 index 0000000..2a7cf70 --- /dev/null +++ b/vendor/golang.org/x/tools/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +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 LLC 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/golang.org/x/tools/PATENTS b/vendor/golang.org/x/tools/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/tools/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google 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, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go new file mode 100644 index 0000000..6e34df4 --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -0,0 +1,654 @@ +// Copyright 2013 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 astutil + +// This file defines utilities for working with source positions. + +import ( + "fmt" + "go/ast" + "go/token" + "sort" +) + +// PathEnclosingInterval returns the node that encloses the source +// interval [start, end), and all its ancestors up to the AST root. +// +// The definition of "enclosing" used by this function considers +// additional whitespace abutting a node to be enclosed by it. +// In this example: +// +// z := x + y // add them +// <-A-> +// <----B-----> +// +// the ast.BinaryExpr(+) node is considered to enclose interval B +// even though its [Pos()..End()) is actually only interval A. +// This behaviour makes user interfaces more tolerant of imperfect +// input. +// +// This function treats tokens as nodes, though they are not included +// in the result. e.g. PathEnclosingInterval("+") returns the +// enclosing ast.BinaryExpr("x + y"). +// +// If start==end, the 1-char interval following start is used instead. +// +// The 'exact' result is true if the interval contains only path[0] +// and perhaps some adjacent whitespace. It is false if the interval +// overlaps multiple children of path[0], or if it contains only +// interior whitespace of path[0]. +// In this example: +// +// z := x + y // add them +// <--C--> <---E--> +// ^ +// D +// +// intervals C, D and E are inexact. C is contained by the +// z-assignment statement, because it spans three of its children (:=, +// x, +). So too is the 1-char interval D, because it contains only +// interior whitespace of the assignment. E is considered interior +// whitespace of the BlockStmt containing the assignment. +// +// The resulting path is never empty; it always contains at least the +// 'root' *ast.File. Ideally PathEnclosingInterval would reject +// intervals that lie wholly or partially outside the range of the +// file, but unfortunately ast.File records only the token.Pos of +// the 'package' keyword, but not of the start of the file itself. +func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) { + // fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging + + // Precondition: node.[Pos..End) and adjoining whitespace contain [start, end). + var visit func(node ast.Node) bool + visit = func(node ast.Node) bool { + path = append(path, node) + + nodePos := node.Pos() + nodeEnd := node.End() + + // fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging + + // Intersect [start, end) with interval of node. + if start < nodePos { + start = nodePos + } + if end > nodeEnd { + end = nodeEnd + } + + // Find sole child that contains [start, end). + children := childrenOf(node) + l := len(children) + for i, child := range children { + // [childPos, childEnd) is unaugmented interval of child. + childPos := child.Pos() + childEnd := child.End() + + // [augPos, augEnd) is whitespace-augmented interval of child. + augPos := childPos + augEnd := childEnd + if i > 0 { + augPos = children[i-1].End() // start of preceding whitespace + } + if i < l-1 { + nextChildPos := children[i+1].Pos() + // Does [start, end) lie between child and next child? + if start >= augEnd && end <= nextChildPos { + return false // inexact match + } + augEnd = nextChildPos // end of following whitespace + } + + // fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n", + // i, augPos, augEnd, start, end) // debugging + + // Does augmented child strictly contain [start, end)? + if augPos <= start && end <= augEnd { + if is[tokenNode](child) { + return true + } + + // childrenOf elides the FuncType node beneath FuncDecl. + // Add it back here for TypeParams, Params, Results, + // all FieldLists). But we don't add it back for the "func" token + // even though it is is the tree at FuncDecl.Type.Func. + if decl, ok := node.(*ast.FuncDecl); ok { + if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv { + path = append(path, decl.Type) + } + } + + return visit(child) + } + + // Does [start, end) overlap multiple children? + // i.e. left-augmented child contains start + // but LR-augmented child does not contain end. + if start < childEnd && end > augEnd { + break + } + } + + // No single child contained [start, end), + // so node is the result. Is it exact? + + // (It's tempting to put this condition before the + // child loop, but it gives the wrong result in the + // case where a node (e.g. ExprStmt) and its sole + // child have equal intervals.) + if start == nodePos && end == nodeEnd { + return true // exact match + } + + return false // inexact: overlaps multiple children + } + + // Ensure [start,end) is nondecreasing. + if start > end { + start, end = end, start + } + + if start < root.End() && end > root.Pos() { + if start == end { + end = start + 1 // empty interval => interval of size 1 + } + exact = visit(root) + + // Reverse the path: + for i, l := 0, len(path); i < l/2; i++ { + path[i], path[l-1-i] = path[l-1-i], path[i] + } + } else { + // Selection lies within whitespace preceding the + // first (or following the last) declaration in the file. + // The result nonetheless always includes the ast.File. + path = append(path, root) + } + + return +} + +// tokenNode is a dummy implementation of ast.Node for a single token. +// They are used transiently by PathEnclosingInterval but never escape +// this package. +type tokenNode struct { + pos token.Pos + end token.Pos +} + +func (n tokenNode) Pos() token.Pos { + return n.pos +} + +func (n tokenNode) End() token.Pos { + return n.end +} + +func tok(pos token.Pos, len int) ast.Node { + return tokenNode{pos, pos + token.Pos(len)} +} + +// childrenOf returns the direct non-nil children of ast.Node n. +// It may include fake ast.Node implementations for bare tokens. +// it is not safe to call (e.g.) ast.Walk on such nodes. +func childrenOf(n ast.Node) []ast.Node { + var children []ast.Node + + // First add nodes for all true subtrees. + ast.Inspect(n, func(node ast.Node) bool { + if node == n { // push n + return true // recur + } + if node != nil { // push child + children = append(children, node) + } + return false // no recursion + }) + + // Then add fake Nodes for bare tokens. + switch n := n.(type) { + case *ast.ArrayType: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Elt.End(), len("]"))) + + case *ast.AssignStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.BasicLit: + children = append(children, + tok(n.ValuePos, len(n.Value))) + + case *ast.BinaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.BlockStmt: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("}"))) + + case *ast.BranchStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.CallExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + if n.Ellipsis != 0 { + children = append(children, tok(n.Ellipsis, len("..."))) + } + + case *ast.CaseClause: + if n.List == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.ChanType: + switch n.Dir { + case ast.RECV: + children = append(children, tok(n.Begin, len("<-chan"))) + case ast.SEND: + children = append(children, tok(n.Begin, len("chan<-"))) + case ast.RECV | ast.SEND: + children = append(children, tok(n.Begin, len("chan"))) + } + + case *ast.CommClause: + if n.Comm == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.Comment: + // nop + + case *ast.CommentGroup: + // nop + + case *ast.CompositeLit: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("{"))) + + case *ast.DeclStmt: + // nop + + case *ast.DeferStmt: + children = append(children, + tok(n.Defer, len("defer"))) + + case *ast.Ellipsis: + children = append(children, + tok(n.Ellipsis, len("..."))) + + case *ast.EmptyStmt: + // nop + + case *ast.ExprStmt: + // nop + + case *ast.Field: + // TODO(adonovan): Field.{Doc,Comment,Tag}? + + case *ast.FieldList: + children = append(children, + tok(n.Opening, len("(")), // or len("[") + tok(n.Closing, len(")"))) // or len("]") + + case *ast.File: + // TODO test: Doc + children = append(children, + tok(n.Package, len("package"))) + + case *ast.ForStmt: + children = append(children, + tok(n.For, len("for"))) + + case *ast.FuncDecl: + // TODO(adonovan): FuncDecl.Comment? + + // Uniquely, FuncDecl breaks the invariant that + // preorder traversal yields tokens in lexical order: + // in fact, FuncDecl.Recv precedes FuncDecl.Type.Func. + // + // As a workaround, we inline the case for FuncType + // here and order things correctly. + // We also need to insert the elided FuncType just + // before the 'visit' recursion. + // + children = nil // discard ast.Walk(FuncDecl) info subtrees + children = append(children, tok(n.Type.Func, len("func"))) + if n.Recv != nil { + children = append(children, n.Recv) + } + children = append(children, n.Name) + if tparams := n.Type.TypeParams; tparams != nil { + children = append(children, tparams) + } + if n.Type.Params != nil { + children = append(children, n.Type.Params) + } + if n.Type.Results != nil { + children = append(children, n.Type.Results) + } + if n.Body != nil { + children = append(children, n.Body) + } + + case *ast.FuncLit: + // nop + + case *ast.FuncType: + if n.Func != 0 { + children = append(children, + tok(n.Func, len("func"))) + } + + case *ast.GenDecl: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + if n.Lparen != 0 { + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + } + + case *ast.GoStmt: + children = append(children, + tok(n.Go, len("go"))) + + case *ast.Ident: + children = append(children, + tok(n.NamePos, len(n.Name))) + + case *ast.IfStmt: + children = append(children, + tok(n.If, len("if"))) + + case *ast.ImportSpec: + // TODO(adonovan): ImportSpec.{Doc,EndPos}? + + case *ast.IncDecStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.IndexExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.IndexListExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.InterfaceType: + children = append(children, + tok(n.Interface, len("interface"))) + + case *ast.KeyValueExpr: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.LabeledStmt: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.MapType: + children = append(children, + tok(n.Map, len("map"))) + + case *ast.ParenExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.RangeStmt: + children = append(children, + tok(n.For, len("for")), + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.ReturnStmt: + children = append(children, + tok(n.Return, len("return"))) + + case *ast.SelectStmt: + children = append(children, + tok(n.Select, len("select"))) + + case *ast.SelectorExpr: + // nop + + case *ast.SendStmt: + children = append(children, + tok(n.Arrow, len("<-"))) + + case *ast.SliceExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.StarExpr: + children = append(children, tok(n.Star, len("*"))) + + case *ast.StructType: + children = append(children, tok(n.Struct, len("struct"))) + + case *ast.SwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.TypeAssertExpr: + children = append(children, + tok(n.Lparen-1, len(".")), + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.TypeSpec: + // TODO(adonovan): TypeSpec.{Doc,Comment}? + + case *ast.TypeSwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.UnaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.ValueSpec: + // TODO(adonovan): ValueSpec.{Doc,Comment}? + + case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt: + // nop + } + + // TODO(adonovan): opt: merge the logic of ast.Inspect() into + // the switch above so we can make interleaved callbacks for + // both Nodes and Tokens in the right order and avoid the need + // to sort. + sort.Sort(byPos(children)) + + return children +} + +type byPos []ast.Node + +func (sl byPos) Len() int { + return len(sl) +} +func (sl byPos) Less(i, j int) bool { + return sl[i].Pos() < sl[j].Pos() +} +func (sl byPos) Swap(i, j int) { + sl[i], sl[j] = sl[j], sl[i] +} + +// NodeDescription returns a description of the concrete type of n suitable +// for a user interface. +// +// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident, +// StarExpr) we could be much more specific given the path to the AST +// root. Perhaps we should do that. +func NodeDescription(n ast.Node) string { + switch n := n.(type) { + case *ast.ArrayType: + return "array type" + case *ast.AssignStmt: + return "assignment" + case *ast.BadDecl: + return "bad declaration" + case *ast.BadExpr: + return "bad expression" + case *ast.BadStmt: + return "bad statement" + case *ast.BasicLit: + return "basic literal" + case *ast.BinaryExpr: + return fmt.Sprintf("binary %s operation", n.Op) + case *ast.BlockStmt: + return "block" + case *ast.BranchStmt: + switch n.Tok { + case token.BREAK: + return "break statement" + case token.CONTINUE: + return "continue statement" + case token.GOTO: + return "goto statement" + case token.FALLTHROUGH: + return "fall-through statement" + } + case *ast.CallExpr: + if len(n.Args) == 1 && !n.Ellipsis.IsValid() { + return "function call (or conversion)" + } + return "function call" + case *ast.CaseClause: + return "case clause" + case *ast.ChanType: + return "channel type" + case *ast.CommClause: + return "communication clause" + case *ast.Comment: + return "comment" + case *ast.CommentGroup: + return "comment group" + case *ast.CompositeLit: + return "composite literal" + case *ast.DeclStmt: + return NodeDescription(n.Decl) + " statement" + case *ast.DeferStmt: + return "defer statement" + case *ast.Ellipsis: + return "ellipsis" + case *ast.EmptyStmt: + return "empty statement" + case *ast.ExprStmt: + return "expression statement" + case *ast.Field: + // Can be any of these: + // struct {x, y int} -- struct field(s) + // struct {T} -- anon struct field + // interface {I} -- interface embedding + // interface {f()} -- interface method + // func (A) func(B) C -- receiver, param(s), result(s) + return "field/method/parameter" + case *ast.FieldList: + return "field/method/parameter list" + case *ast.File: + return "source file" + case *ast.ForStmt: + return "for loop" + case *ast.FuncDecl: + return "function declaration" + case *ast.FuncLit: + return "function literal" + case *ast.FuncType: + return "function type" + case *ast.GenDecl: + switch n.Tok { + case token.IMPORT: + return "import declaration" + case token.CONST: + return "constant declaration" + case token.TYPE: + return "type declaration" + case token.VAR: + return "variable declaration" + } + case *ast.GoStmt: + return "go statement" + case *ast.Ident: + return "identifier" + case *ast.IfStmt: + return "if statement" + case *ast.ImportSpec: + return "import specification" + case *ast.IncDecStmt: + if n.Tok == token.INC { + return "increment statement" + } + return "decrement statement" + case *ast.IndexExpr: + return "index expression" + case *ast.IndexListExpr: + return "index list expression" + case *ast.InterfaceType: + return "interface type" + case *ast.KeyValueExpr: + return "key/value association" + case *ast.LabeledStmt: + return "statement label" + case *ast.MapType: + return "map type" + case *ast.Package: + return "package" + case *ast.ParenExpr: + return "parenthesized " + NodeDescription(n.X) + case *ast.RangeStmt: + return "range loop" + case *ast.ReturnStmt: + return "return statement" + case *ast.SelectStmt: + return "select statement" + case *ast.SelectorExpr: + return "selector" + case *ast.SendStmt: + return "channel send" + case *ast.SliceExpr: + return "slice expression" + case *ast.StarExpr: + return "*-operation" // load/store expr or pointer type + case *ast.StructType: + return "struct type" + case *ast.SwitchStmt: + return "switch statement" + case *ast.TypeAssertExpr: + return "type assertion" + case *ast.TypeSpec: + return "type specification" + case *ast.TypeSwitchStmt: + return "type switch" + case *ast.UnaryExpr: + return fmt.Sprintf("unary %s operation", n.Op) + case *ast.ValueSpec: + return "value specification" + + } + panic(fmt.Sprintf("unexpected node type: %T", n)) +} + +func is[T any](x any) bool { + _, ok := x.(T) + return ok +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go new file mode 100644 index 0000000..18d1adb --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -0,0 +1,485 @@ +// Copyright 2013 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 astutil contains common utilities for working with the Go AST. +package astutil // import "golang.org/x/tools/go/ast/astutil" + +import ( + "fmt" + "go/ast" + "go/token" + "strconv" + "strings" +) + +// AddImport adds the import path to the file f, if absent. +func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) { + return AddNamedImport(fset, f, "", path) +} + +// AddNamedImport adds the import with the given name and path to the file f, if absent. +// If name is not empty, it is used to rename the import. +// +// For example, calling +// +// AddNamedImport(fset, f, "pathpkg", "path") +// +// adds +// +// import pathpkg "path" +func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) { + if imports(f, name, path) { + return false + } + + newImport := &ast.ImportSpec{ + Path: &ast.BasicLit{ + Kind: token.STRING, + Value: strconv.Quote(path), + }, + } + if name != "" { + newImport.Name = &ast.Ident{Name: name} + } + + // Find an import decl to add to. + // The goal is to find an existing import + // whose import path has the longest shared + // prefix with path. + var ( + bestMatch = -1 // length of longest shared prefix + lastImport = -1 // index in f.Decls of the file's final import decl + impDecl *ast.GenDecl // import decl containing the best match + impIndex = -1 // spec index in impDecl containing the best match + + isThirdPartyPath = isThirdParty(path) + ) + for i, decl := range f.Decls { + gen, ok := decl.(*ast.GenDecl) + if ok && gen.Tok == token.IMPORT { + lastImport = i + // Do not add to import "C", to avoid disrupting the + // association with its doc comment, breaking cgo. + if declImports(gen, "C") { + continue + } + + // Match an empty import decl if that's all that is available. + if len(gen.Specs) == 0 && bestMatch == -1 { + impDecl = gen + } + + // Compute longest shared prefix with imports in this group and find best + // matched import spec. + // 1. Always prefer import spec with longest shared prefix. + // 2. While match length is 0, + // - for stdlib package: prefer first import spec. + // - for third party package: prefer first third party import spec. + // We cannot use last import spec as best match for third party package + // because grouped imports are usually placed last by goimports -local + // flag. + // See issue #19190. + seenAnyThirdParty := false + for j, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + p := importPath(impspec) + n := matchLen(p, path) + if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) { + bestMatch = n + impDecl = gen + impIndex = j + } + seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p) + } + } + } + + // If no import decl found, add one after the last import. + if impDecl == nil { + impDecl = &ast.GenDecl{ + Tok: token.IMPORT, + } + if lastImport >= 0 { + impDecl.TokPos = f.Decls[lastImport].End() + } else { + // There are no existing imports. + // Our new import, preceded by a blank line, goes after the package declaration + // and after the comment, if any, that starts on the same line as the + // package declaration. + impDecl.TokPos = f.Package + + file := fset.File(f.Package) + pkgLine := file.Line(f.Package) + for _, c := range f.Comments { + if file.Line(c.Pos()) > pkgLine { + break + } + // +2 for a blank line + impDecl.TokPos = c.End() + 2 + } + } + f.Decls = append(f.Decls, nil) + copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:]) + f.Decls[lastImport+1] = impDecl + } + + // Insert new import at insertAt. + insertAt := 0 + if impIndex >= 0 { + // insert after the found import + insertAt = impIndex + 1 + } + impDecl.Specs = append(impDecl.Specs, nil) + copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:]) + impDecl.Specs[insertAt] = newImport + pos := impDecl.Pos() + if insertAt > 0 { + // If there is a comment after an existing import, preserve the comment + // position by adding the new import after the comment. + if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil { + pos = spec.Comment.End() + } else { + // Assign same position as the previous import, + // so that the sorter sees it as being in the same block. + pos = impDecl.Specs[insertAt-1].Pos() + } + } + if newImport.Name != nil { + newImport.Name.NamePos = pos + } + newImport.Path.ValuePos = pos + newImport.EndPos = pos + + // Clean up parens. impDecl contains at least one spec. + if len(impDecl.Specs) == 1 { + // Remove unneeded parens. + impDecl.Lparen = token.NoPos + } else if !impDecl.Lparen.IsValid() { + // impDecl needs parens added. + impDecl.Lparen = impDecl.Specs[0].Pos() + } + + f.Imports = append(f.Imports, newImport) + + if len(f.Decls) <= 1 { + return true + } + + // Merge all the import declarations into the first one. + var first *ast.GenDecl + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { + continue + } + if first == nil { + first = gen + continue // Don't touch the first one. + } + // We now know there is more than one package in this import + // declaration. Ensure that it ends up parenthesized. + first.Lparen = first.Pos() + // Move the imports of the other import declaration to the first one. + for _, spec := range gen.Specs { + spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() + first.Specs = append(first.Specs, spec) + } + f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + i-- + } + + return true +} + +func isThirdParty(importPath string) bool { + // Third party package import path usually contains "." (".com", ".org", ...) + // This logic is taken from golang.org/x/tools/imports package. + return strings.Contains(importPath, ".") +} + +// DeleteImport deletes the import path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) { + return DeleteNamedImport(fset, f, "", path) +} + +// DeleteNamedImport deletes the import with the given name and path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) { + var delspecs []*ast.ImportSpec + var delcomments []*ast.CommentGroup + + // Find the import nodes that import path, if any. + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT { + continue + } + for j := 0; j < len(gen.Specs); j++ { + spec := gen.Specs[j] + impspec := spec.(*ast.ImportSpec) + if importName(impspec) != name || importPath(impspec) != path { + continue + } + + // We found an import spec that imports path. + // Delete it. + delspecs = append(delspecs, impspec) + deleted = true + copy(gen.Specs[j:], gen.Specs[j+1:]) + gen.Specs = gen.Specs[:len(gen.Specs)-1] + + // If this was the last import spec in this decl, + // delete the decl, too. + if len(gen.Specs) == 0 { + copy(f.Decls[i:], f.Decls[i+1:]) + f.Decls = f.Decls[:len(f.Decls)-1] + i-- + break + } else if len(gen.Specs) == 1 { + if impspec.Doc != nil { + delcomments = append(delcomments, impspec.Doc) + } + if impspec.Comment != nil { + delcomments = append(delcomments, impspec.Comment) + } + for _, cg := range f.Comments { + // Found comment on the same line as the import spec. + if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line { + delcomments = append(delcomments, cg) + break + } + } + + spec := gen.Specs[0].(*ast.ImportSpec) + + // Move the documentation right after the import decl. + if spec.Doc != nil { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + } + for _, cg := range f.Comments { + if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + break + } + } + } + if j > 0 { + lastImpspec := gen.Specs[j-1].(*ast.ImportSpec) + lastLine := fset.PositionFor(lastImpspec.Path.ValuePos, false).Line + line := fset.PositionFor(impspec.Path.ValuePos, false).Line + + // We deleted an entry but now there may be + // a blank line-sized hole where the import was. + if line-lastLine > 1 || !gen.Rparen.IsValid() { + // There was a blank line immediately preceding the deleted import, + // so there's no need to close the hole. The right parenthesis is + // invalid after AddImport to an import statement without parenthesis. + // Do nothing. + } else if line != fset.File(gen.Rparen).LineCount() { + // There was no blank line. Close the hole. + fset.File(gen.Rparen).MergeLine(line) + } + } + j-- + } + } + + // Delete imports from f.Imports. + for i := 0; i < len(f.Imports); i++ { + imp := f.Imports[i] + for j, del := range delspecs { + if imp == del { + copy(f.Imports[i:], f.Imports[i+1:]) + f.Imports = f.Imports[:len(f.Imports)-1] + copy(delspecs[j:], delspecs[j+1:]) + delspecs = delspecs[:len(delspecs)-1] + i-- + break + } + } + } + + // Delete comments from f.Comments. + for i := 0; i < len(f.Comments); i++ { + cg := f.Comments[i] + for j, del := range delcomments { + if cg == del { + copy(f.Comments[i:], f.Comments[i+1:]) + f.Comments = f.Comments[:len(f.Comments)-1] + copy(delcomments[j:], delcomments[j+1:]) + delcomments = delcomments[:len(delcomments)-1] + i-- + break + } + } + } + + if len(delspecs) > 0 { + panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs)) + } + + return +} + +// RewriteImport rewrites any import of path oldPath to path newPath. +func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) { + for _, imp := range f.Imports { + if importPath(imp) == oldPath { + rewrote = true + // record old End, because the default is to compute + // it using the length of imp.Path.Value. + imp.EndPos = imp.End() + imp.Path.Value = strconv.Quote(newPath) + } + } + return +} + +// UsesImport reports whether a given import is used. +func UsesImport(f *ast.File, path string) (used bool) { + spec := importSpec(f, path) + if spec == nil { + return + } + + name := spec.Name.String() + switch name { + case "": + // If the package name is not explicitly specified, + // make an educated guess. This is not guaranteed to be correct. + lastSlash := strings.LastIndex(path, "/") + if lastSlash == -1 { + name = path + } else { + name = path[lastSlash+1:] + } + case "_", ".": + // Not sure if this import is used - err on the side of caution. + return true + } + + ast.Walk(visitFn(func(n ast.Node) { + sel, ok := n.(*ast.SelectorExpr) + if ok && isTopName(sel.X, name) { + used = true + } + }), f) + + return +} + +type visitFn func(node ast.Node) + +func (fn visitFn) Visit(node ast.Node) ast.Visitor { + fn(node) + return fn +} + +// imports reports whether f has an import with the specified name and path. +func imports(f *ast.File, name, path string) bool { + for _, s := range f.Imports { + if importName(s) == name && importPath(s) == path { + return true + } + } + return false +} + +// importSpec returns the import spec if f imports path, +// or nil otherwise. +func importSpec(f *ast.File, path string) *ast.ImportSpec { + for _, s := range f.Imports { + if importPath(s) == path { + return s + } + } + return nil +} + +// importName returns the name of s, +// or "" if the import is not named. +func importName(s *ast.ImportSpec) string { + if s.Name == nil { + return "" + } + return s.Name.Name +} + +// importPath returns the unquoted import path of s, +// or "" if the path is not properly quoted. +func importPath(s *ast.ImportSpec) string { + t, err := strconv.Unquote(s.Path.Value) + if err != nil { + return "" + } + return t +} + +// declImports reports whether gen contains an import of path. +func declImports(gen *ast.GenDecl, path string) bool { + if gen.Tok != token.IMPORT { + return false + } + for _, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + if importPath(impspec) == path { + return true + } + } + return false +} + +// matchLen returns the length of the longest path segment prefix shared by x and y. +func matchLen(x, y string) int { + n := 0 + for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ { + if x[i] == '/' { + n++ + } + } + return n +} + +// isTopName returns true if n is a top-level unresolved identifier with the given name. +func isTopName(n ast.Expr, name string) bool { + id, ok := n.(*ast.Ident) + return ok && id.Name == name && id.Obj == nil +} + +// Imports returns the file imports grouped by paragraph. +func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec { + var groups [][]*ast.ImportSpec + + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok || genDecl.Tok != token.IMPORT { + break + } + + group := []*ast.ImportSpec{} + + var lastLine int + for _, spec := range genDecl.Specs { + importSpec := spec.(*ast.ImportSpec) + pos := importSpec.Path.ValuePos + line := fset.Position(pos).Line + if lastLine > 0 && pos > 0 && line-lastLine > 1 { + groups = append(groups, group) + group = []*ast.ImportSpec{} + } + group = append(group, importSpec) + lastLine = line + } + groups = append(groups, group) + } + + return groups +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go new file mode 100644 index 0000000..58934f7 --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -0,0 +1,486 @@ +// 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 astutil + +import ( + "fmt" + "go/ast" + "reflect" + "sort" +) + +// An ApplyFunc is invoked by Apply for each node n, even if n is nil, +// before and/or after the node's children, using a Cursor describing +// the current node and providing operations on it. +// +// The return value of ApplyFunc controls the syntax tree traversal. +// See Apply for details. +type ApplyFunc func(*Cursor) bool + +// Apply traverses a syntax tree recursively, starting with root, +// and calling pre and post for each node as described below. +// Apply returns the syntax tree, possibly modified. +// +// If pre is not nil, it is called for each node before the node's +// children are traversed (pre-order). If pre returns false, no +// children are traversed, and post is not called for that node. +// +// If post is not nil, and a prior call of pre didn't return false, +// post is called for each node after its children are traversed +// (post-order). If post returns false, traversal is terminated and +// Apply returns immediately. +// +// Only fields that refer to AST nodes are considered children; +// i.e., token.Pos, Scopes, Objects, and fields of basic types +// (strings, etc.) are ignored. +// +// Children are traversed in the order in which they appear in the +// respective node's struct definition. A package's files are +// traversed in the filenames' alphabetical order. +func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) { + parent := &struct{ ast.Node }{root} + defer func() { + if r := recover(); r != nil && r != abort { + panic(r) + } + result = parent.Node + }() + a := &application{pre: pre, post: post} + a.apply(parent, "Node", nil, root) + return +} + +var abort = new(int) // singleton, to signal termination of Apply + +// A Cursor describes a node encountered during Apply. +// Information about the node and its parent is available +// from the Node, Parent, Name, and Index methods. +// +// If p is a variable of type and value of the current parent node +// c.Parent(), and f is the field identifier with name c.Name(), +// the following invariants hold: +// +// p.f == c.Node() if c.Index() < 0 +// p.f[c.Index()] == c.Node() if c.Index() >= 0 +// +// The methods Replace, Delete, InsertBefore, and InsertAfter +// can be used to change the AST without disrupting Apply. +type Cursor struct { + parent ast.Node + name string + iter *iterator // valid if non-nil + node ast.Node +} + +// Node returns the current Node. +func (c *Cursor) Node() ast.Node { return c.node } + +// Parent returns the parent of the current Node. +func (c *Cursor) Parent() ast.Node { return c.parent } + +// Name returns the name of the parent Node field that contains the current Node. +// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns +// the filename for the current Node. +func (c *Cursor) Name() string { return c.name } + +// Index reports the index >= 0 of the current Node in the slice of Nodes that +// contains it, or a value < 0 if the current Node is not part of a slice. +// The index of the current node changes if InsertBefore is called while +// processing the current node. +func (c *Cursor) Index() int { + if c.iter != nil { + return c.iter.index + } + return -1 +} + +// field returns the current node's parent field value. +func (c *Cursor) field() reflect.Value { + return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name) +} + +// Replace replaces the current Node with n. +// The replacement node is not walked by Apply. +func (c *Cursor) Replace(n ast.Node) { + if _, ok := c.node.(*ast.File); ok { + file, ok := n.(*ast.File) + if !ok { + panic("attempt to replace *ast.File with non-*ast.File") + } + c.parent.(*ast.Package).Files[c.name] = file + return + } + + v := c.field() + if i := c.Index(); i >= 0 { + v = v.Index(i) + } + v.Set(reflect.ValueOf(n)) +} + +// Delete deletes the current Node from its containing slice. +// If the current Node is not part of a slice, Delete panics. +// As a special case, if the current node is a package file, +// Delete removes it from the package's Files map. +func (c *Cursor) Delete() { + if _, ok := c.node.(*ast.File); ok { + delete(c.parent.(*ast.Package).Files, c.name) + return + } + + i := c.Index() + if i < 0 { + panic("Delete node not contained in slice") + } + v := c.field() + l := v.Len() + reflect.Copy(v.Slice(i, l), v.Slice(i+1, l)) + v.Index(l - 1).Set(reflect.Zero(v.Type().Elem())) + v.SetLen(l - 1) + c.iter.step-- +} + +// InsertAfter inserts n after the current Node in its containing slice. +// If the current Node is not part of a slice, InsertAfter panics. +// Apply does not walk n. +func (c *Cursor) InsertAfter(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertAfter node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l)) + v.Index(i + 1).Set(reflect.ValueOf(n)) + c.iter.step++ +} + +// InsertBefore inserts n before the current Node in its containing slice. +// If the current Node is not part of a slice, InsertBefore panics. +// Apply will not walk n. +func (c *Cursor) InsertBefore(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertBefore node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+1, l), v.Slice(i, l)) + v.Index(i).Set(reflect.ValueOf(n)) + c.iter.index++ +} + +// application carries all the shared data so we can pass it around cheaply. +type application struct { + pre, post ApplyFunc + cursor Cursor + iter iterator +} + +func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) { + // convert typed nil into untyped nil + if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() { + n = nil + } + + // avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead + saved := a.cursor + a.cursor.parent = parent + a.cursor.name = name + a.cursor.iter = iter + a.cursor.node = n + + if a.pre != nil && !a.pre(&a.cursor) { + a.cursor = saved + return + } + + // walk children + // (the order of the cases matches the order of the corresponding node types in go/ast) + switch n := n.(type) { + case nil: + // nothing to do + + // Comments and fields + case *ast.Comment: + // nothing to do + + case *ast.CommentGroup: + if n != nil { + a.applyList(n, "List") + } + + case *ast.Field: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.FieldList: + a.applyList(n, "List") + + // Expressions + case *ast.BadExpr, *ast.Ident, *ast.BasicLit: + // nothing to do + + case *ast.Ellipsis: + a.apply(n, "Elt", nil, n.Elt) + + case *ast.FuncLit: + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + case *ast.CompositeLit: + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Elts") + + case *ast.ParenExpr: + a.apply(n, "X", nil, n.X) + + case *ast.SelectorExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Sel", nil, n.Sel) + + case *ast.IndexExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Index", nil, n.Index) + + case *ast.IndexListExpr: + a.apply(n, "X", nil, n.X) + a.applyList(n, "Indices") + + case *ast.SliceExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Low", nil, n.Low) + a.apply(n, "High", nil, n.High) + a.apply(n, "Max", nil, n.Max) + + case *ast.TypeAssertExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Type", nil, n.Type) + + case *ast.CallExpr: + a.apply(n, "Fun", nil, n.Fun) + a.applyList(n, "Args") + + case *ast.StarExpr: + a.apply(n, "X", nil, n.X) + + case *ast.UnaryExpr: + a.apply(n, "X", nil, n.X) + + case *ast.BinaryExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Y", nil, n.Y) + + case *ast.KeyValueExpr: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + // Types + case *ast.ArrayType: + a.apply(n, "Len", nil, n.Len) + a.apply(n, "Elt", nil, n.Elt) + + case *ast.StructType: + a.apply(n, "Fields", nil, n.Fields) + + case *ast.FuncType: + if tparams := n.TypeParams; tparams != nil { + a.apply(n, "TypeParams", nil, tparams) + } + a.apply(n, "Params", nil, n.Params) + a.apply(n, "Results", nil, n.Results) + + case *ast.InterfaceType: + a.apply(n, "Methods", nil, n.Methods) + + case *ast.MapType: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + case *ast.ChanType: + a.apply(n, "Value", nil, n.Value) + + // Statements + case *ast.BadStmt: + // nothing to do + + case *ast.DeclStmt: + a.apply(n, "Decl", nil, n.Decl) + + case *ast.EmptyStmt: + // nothing to do + + case *ast.LabeledStmt: + a.apply(n, "Label", nil, n.Label) + a.apply(n, "Stmt", nil, n.Stmt) + + case *ast.ExprStmt: + a.apply(n, "X", nil, n.X) + + case *ast.SendStmt: + a.apply(n, "Chan", nil, n.Chan) + a.apply(n, "Value", nil, n.Value) + + case *ast.IncDecStmt: + a.apply(n, "X", nil, n.X) + + case *ast.AssignStmt: + a.applyList(n, "Lhs") + a.applyList(n, "Rhs") + + case *ast.GoStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.DeferStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.ReturnStmt: + a.applyList(n, "Results") + + case *ast.BranchStmt: + a.apply(n, "Label", nil, n.Label) + + case *ast.BlockStmt: + a.applyList(n, "List") + + case *ast.IfStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Body", nil, n.Body) + a.apply(n, "Else", nil, n.Else) + + case *ast.CaseClause: + a.applyList(n, "List") + a.applyList(n, "Body") + + case *ast.SwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Body", nil, n.Body) + + case *ast.TypeSwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Assign", nil, n.Assign) + a.apply(n, "Body", nil, n.Body) + + case *ast.CommClause: + a.apply(n, "Comm", nil, n.Comm) + a.applyList(n, "Body") + + case *ast.SelectStmt: + a.apply(n, "Body", nil, n.Body) + + case *ast.ForStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Post", nil, n.Post) + a.apply(n, "Body", nil, n.Body) + + case *ast.RangeStmt: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + a.apply(n, "X", nil, n.X) + a.apply(n, "Body", nil, n.Body) + + // Declarations + case *ast.ImportSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Path", nil, n.Path) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.ValueSpec: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Values") + a.apply(n, "Comment", nil, n.Comment) + + case *ast.TypeSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + if tparams := n.TypeParams; tparams != nil { + a.apply(n, "TypeParams", nil, tparams) + } + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.BadDecl: + // nothing to do + + case *ast.GenDecl: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Specs") + + case *ast.FuncDecl: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Recv", nil, n.Recv) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + // Files and packages + case *ast.File: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.applyList(n, "Decls") + // Don't walk n.Comments; they have either been walked already if + // they are Doc comments, or they can be easily walked explicitly. + + case *ast.Package: + // collect and sort names for reproducible behavior + var names []string + for name := range n.Files { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + a.apply(n, name, nil, n.Files[name]) + } + + default: + panic(fmt.Sprintf("Apply: unexpected node type %T", n)) + } + + if a.post != nil && !a.post(&a.cursor) { + panic(abort) + } + + a.cursor = saved +} + +// An iterator controls iteration over a slice of nodes. +type iterator struct { + index, step int +} + +func (a *application) applyList(parent ast.Node, name string) { + // avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead + saved := a.iter + a.iter.index = 0 + for { + // must reload parent.name each time, since cursor modifications might change it + v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name) + if a.iter.index >= v.Len() { + break + } + + // element x may be nil in a bad AST - be cautious + var x ast.Node + if e := v.Index(a.iter.index); e.IsValid() { + x = e.Interface().(ast.Node) + } + + a.iter.step = 1 + a.apply(parent, name, &a.iter, x) + a.iter.index += a.iter.step + } + a.iter = saved +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/util.go b/vendor/golang.org/x/tools/go/ast/astutil/util.go new file mode 100644 index 0000000..6bdcf70 --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/util.go @@ -0,0 +1,19 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import "go/ast" + +// Unparen returns e with any enclosing parentheses stripped. +// TODO(adonovan): use go1.22's ast.Unparen. +func Unparen(e ast.Expr) ast.Expr { + for { + p, ok := e.(*ast.ParenExpr) + if !ok { + return e + } + e = p.X + } +} diff --git a/vendor/golang.org/x/tools/go/buildutil/allpackages.go b/vendor/golang.org/x/tools/go/buildutil/allpackages.go new file mode 100644 index 0000000..dfb8cd6 --- /dev/null +++ b/vendor/golang.org/x/tools/go/buildutil/allpackages.go @@ -0,0 +1,195 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package buildutil provides utilities related to the go/build +// package in the standard library. +// +// All I/O is done via the build.Context file system interface, which must +// be concurrency-safe. +package buildutil // import "golang.org/x/tools/go/buildutil" + +import ( + "go/build" + "os" + "path/filepath" + "sort" + "strings" + "sync" +) + +// AllPackages returns the package path of each Go package in any source +// directory of the specified build context (e.g. $GOROOT or an element +// of $GOPATH). Errors are ignored. The results are sorted. +// All package paths are canonical, and thus may contain "/vendor/". +// +// The result may include import paths for directories that contain no +// *.go files, such as "archive" (in $GOROOT/src). +// +// All I/O is done via the build.Context file system interface, +// which must be concurrency-safe. +func AllPackages(ctxt *build.Context) []string { + var list []string + ForEachPackage(ctxt, func(pkg string, _ error) { + list = append(list, pkg) + }) + sort.Strings(list) + return list +} + +// ForEachPackage calls the found function with the package path of +// each Go package it finds in any source directory of the specified +// build context (e.g. $GOROOT or an element of $GOPATH). +// All package paths are canonical, and thus may contain "/vendor/". +// +// If the package directory exists but could not be read, the second +// argument to the found function provides the error. +// +// All I/O is done via the build.Context file system interface, +// which must be concurrency-safe. +func ForEachPackage(ctxt *build.Context, found func(importPath string, err error)) { + ch := make(chan item) + + var wg sync.WaitGroup + for _, root := range ctxt.SrcDirs() { + root := root + wg.Add(1) + go func() { + allPackages(ctxt, root, ch) + wg.Done() + }() + } + go func() { + wg.Wait() + close(ch) + }() + + // All calls to found occur in the caller's goroutine. + for i := range ch { + found(i.importPath, i.err) + } +} + +type item struct { + importPath string + err error // (optional) +} + +// We use a process-wide counting semaphore to limit +// the number of parallel calls to ReadDir. +var ioLimit = make(chan bool, 20) + +func allPackages(ctxt *build.Context, root string, ch chan<- item) { + root = filepath.Clean(root) + string(os.PathSeparator) + + var wg sync.WaitGroup + + var walkDir func(dir string) + walkDir = func(dir string) { + // Avoid .foo, _foo, and testdata directory trees. + base := filepath.Base(dir) + if base == "" || base[0] == '.' || base[0] == '_' || base == "testdata" { + return + } + + pkg := filepath.ToSlash(strings.TrimPrefix(dir, root)) + + // Prune search if we encounter any of these import paths. + switch pkg { + case "builtin": + return + } + + ioLimit <- true + files, err := ReadDir(ctxt, dir) + <-ioLimit + if pkg != "" || err != nil { + ch <- item{pkg, err} + } + for _, fi := range files { + fi := fi + if fi.IsDir() { + wg.Add(1) + go func() { + walkDir(filepath.Join(dir, fi.Name())) + wg.Done() + }() + } + } + } + + walkDir(root) + wg.Wait() +} + +// ExpandPatterns returns the set of packages matched by patterns, +// which may have the following forms: +// +// golang.org/x/tools/cmd/guru # a single package +// golang.org/x/tools/... # all packages beneath dir +// ... # the entire workspace. +// +// Order is significant: a pattern preceded by '-' removes matching +// packages from the set. For example, these patterns match all encoding +// packages except encoding/xml: +// +// encoding/... -encoding/xml +// +// A trailing slash in a pattern is ignored. (Path components of Go +// package names are separated by slash, not the platform's path separator.) +func ExpandPatterns(ctxt *build.Context, patterns []string) map[string]bool { + // TODO(adonovan): support other features of 'go list': + // - "std"/"cmd"/"all" meta-packages + // - "..." not at the end of a pattern + // - relative patterns using "./" or "../" prefix + + pkgs := make(map[string]bool) + doPkg := func(pkg string, neg bool) { + if neg { + delete(pkgs, pkg) + } else { + pkgs[pkg] = true + } + } + + // Scan entire workspace if wildcards are present. + // TODO(adonovan): opt: scan only the necessary subtrees of the workspace. + var all []string + for _, arg := range patterns { + if strings.HasSuffix(arg, "...") { + all = AllPackages(ctxt) + break + } + } + + for _, arg := range patterns { + if arg == "" { + continue + } + + neg := arg[0] == '-' + if neg { + arg = arg[1:] + } + + if arg == "..." { + // ... matches all packages + for _, pkg := range all { + doPkg(pkg, neg) + } + } else if dir := strings.TrimSuffix(arg, "/..."); dir != arg { + // dir/... matches all packages beneath dir + for _, pkg := range all { + if strings.HasPrefix(pkg, dir) && + (len(pkg) == len(dir) || pkg[len(dir)] == '/') { + doPkg(pkg, neg) + } + } + } else { + // single package + doPkg(strings.TrimSuffix(arg, "/"), neg) + } + } + + return pkgs +} diff --git a/vendor/golang.org/x/tools/go/buildutil/fakecontext.go b/vendor/golang.org/x/tools/go/buildutil/fakecontext.go new file mode 100644 index 0000000..763d188 --- /dev/null +++ b/vendor/golang.org/x/tools/go/buildutil/fakecontext.go @@ -0,0 +1,111 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package buildutil + +import ( + "fmt" + "go/build" + "io" + "os" + "path" + "path/filepath" + "sort" + "strings" + "time" +) + +// FakeContext returns a build.Context for the fake file tree specified +// by pkgs, which maps package import paths to a mapping from file base +// names to contents. +// +// The fake Context has a GOROOT of "/go" and no GOPATH, and overrides +// the necessary file access methods to read from memory instead of the +// real file system. +// +// Unlike a real file tree, the fake one has only two levels---packages +// and files---so ReadDir("/go/src/") returns all packages under +// /go/src/ including, for instance, "math" and "math/big". +// ReadDir("/go/src/math/big") would return all the files in the +// "math/big" package. +func FakeContext(pkgs map[string]map[string]string) *build.Context { + clean := func(filename string) string { + f := path.Clean(filepath.ToSlash(filename)) + // Removing "/go/src" while respecting segment + // boundaries has this unfortunate corner case: + if f == "/go/src" { + return "" + } + return strings.TrimPrefix(f, "/go/src/") + } + + ctxt := build.Default // copy + ctxt.GOROOT = "/go" + ctxt.GOPATH = "" + ctxt.Compiler = "gc" + ctxt.IsDir = func(dir string) bool { + dir = clean(dir) + if dir == "" { + return true // needed by (*build.Context).SrcDirs + } + return pkgs[dir] != nil + } + ctxt.ReadDir = func(dir string) ([]os.FileInfo, error) { + dir = clean(dir) + var fis []os.FileInfo + if dir == "" { + // enumerate packages + for importPath := range pkgs { + fis = append(fis, fakeDirInfo(importPath)) + } + } else { + // enumerate files of package + for basename := range pkgs[dir] { + fis = append(fis, fakeFileInfo(basename)) + } + } + sort.Sort(byName(fis)) + return fis, nil + } + ctxt.OpenFile = func(filename string) (io.ReadCloser, error) { + filename = clean(filename) + dir, base := path.Split(filename) + content, ok := pkgs[path.Clean(dir)][base] + if !ok { + return nil, fmt.Errorf("file not found: %s", filename) + } + return io.NopCloser(strings.NewReader(content)), nil + } + ctxt.IsAbsPath = func(path string) bool { + path = filepath.ToSlash(path) + // Don't rely on the default (filepath.Path) since on + // Windows, it reports virtual paths as non-absolute. + return strings.HasPrefix(path, "/") + } + return &ctxt +} + +type byName []os.FileInfo + +func (s byName) Len() int { return len(s) } +func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() } + +type fakeFileInfo string + +func (fi fakeFileInfo) Name() string { return string(fi) } +func (fakeFileInfo) Sys() interface{} { return nil } +func (fakeFileInfo) ModTime() time.Time { return time.Time{} } +func (fakeFileInfo) IsDir() bool { return false } +func (fakeFileInfo) Size() int64 { return 0 } +func (fakeFileInfo) Mode() os.FileMode { return 0644 } + +type fakeDirInfo string + +func (fd fakeDirInfo) Name() string { return string(fd) } +func (fakeDirInfo) Sys() interface{} { return nil } +func (fakeDirInfo) ModTime() time.Time { return time.Time{} } +func (fakeDirInfo) IsDir() bool { return true } +func (fakeDirInfo) Size() int64 { return 0 } +func (fakeDirInfo) Mode() os.FileMode { return 0755 } diff --git a/vendor/golang.org/x/tools/go/buildutil/overlay.go b/vendor/golang.org/x/tools/go/buildutil/overlay.go new file mode 100644 index 0000000..7e37165 --- /dev/null +++ b/vendor/golang.org/x/tools/go/buildutil/overlay.go @@ -0,0 +1,101 @@ +// 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. + +package buildutil + +import ( + "bufio" + "bytes" + "fmt" + "go/build" + "io" + "path/filepath" + "strconv" + "strings" +) + +// OverlayContext overlays a build.Context with additional files from +// a map. Files in the map take precedence over other files. +// +// In addition to plain string comparison, two file names are +// considered equal if their base names match and their directory +// components point at the same directory on the file system. That is, +// symbolic links are followed for directories, but not files. +// +// A common use case for OverlayContext is to allow editors to pass in +// a set of unsaved, modified files. +// +// Currently, only the Context.OpenFile function will respect the +// overlay. This may change in the future. +func OverlayContext(orig *build.Context, overlay map[string][]byte) *build.Context { + // TODO(dominikh): Implement IsDir, HasSubdir and ReadDir + + rc := func(data []byte) (io.ReadCloser, error) { + return io.NopCloser(bytes.NewBuffer(data)), nil + } + + copy := *orig // make a copy + ctxt := © + ctxt.OpenFile = func(path string) (io.ReadCloser, error) { + // Fast path: names match exactly. + if content, ok := overlay[path]; ok { + return rc(content) + } + + // Slow path: check for same file under a different + // alias, perhaps due to a symbolic link. + for filename, content := range overlay { + if sameFile(path, filename) { + return rc(content) + } + } + + return OpenFile(orig, path) + } + return ctxt +} + +// ParseOverlayArchive parses an archive containing Go files and their +// contents. The result is intended to be used with OverlayContext. +// +// # Archive format +// +// The archive consists of a series of files. Each file consists of a +// name, a decimal file size and the file contents, separated by +// newlines. No newline follows after the file contents. +func ParseOverlayArchive(archive io.Reader) (map[string][]byte, error) { + overlay := make(map[string][]byte) + r := bufio.NewReader(archive) + for { + // Read file name. + filename, err := r.ReadString('\n') + if err != nil { + if err == io.EOF { + break // OK + } + return nil, fmt.Errorf("reading archive file name: %v", err) + } + filename = filepath.Clean(strings.TrimSpace(filename)) + + // Read file size. + sz, err := r.ReadString('\n') + if err != nil { + return nil, fmt.Errorf("reading size of archive file %s: %v", filename, err) + } + sz = strings.TrimSpace(sz) + size, err := strconv.ParseUint(sz, 10, 32) + if err != nil { + return nil, fmt.Errorf("parsing size of archive file %s: %v", filename, err) + } + + // Read file content. + content := make([]byte, size) + if _, err := io.ReadFull(r, content); err != nil { + return nil, fmt.Errorf("reading archive file %s: %v", filename, err) + } + overlay[filename] = content + } + + return overlay, nil +} diff --git a/vendor/golang.org/x/tools/go/buildutil/tags.go b/vendor/golang.org/x/tools/go/buildutil/tags.go new file mode 100644 index 0000000..32c8d14 --- /dev/null +++ b/vendor/golang.org/x/tools/go/buildutil/tags.go @@ -0,0 +1,100 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package buildutil + +// This duplicated logic must be kept in sync with that from go build: +// $GOROOT/src/cmd/go/internal/work/build.go (tagsFlag.Set) +// $GOROOT/src/cmd/go/internal/base/flag.go (StringsFlag.Set) +// $GOROOT/src/cmd/internal/quoted/quoted.go (isSpaceByte, Split) + +import ( + "fmt" + "strings" +) + +const TagsFlagDoc = "a list of `build tags` to consider satisfied during the build. " + + "For more information about build tags, see the description of " + + "build constraints in the documentation for the go/build package" + +// TagsFlag is an implementation of the flag.Value and flag.Getter interfaces that parses +// a flag value the same as go build's -tags flag and populates a []string slice. +// +// See $GOROOT/src/go/build/doc.go for description of build tags. +// See $GOROOT/src/cmd/go/doc.go for description of 'go build -tags' flag. +// +// Example: +// +// flag.Var((*buildutil.TagsFlag)(&build.Default.BuildTags), "tags", buildutil.TagsFlagDoc) +type TagsFlag []string + +func (v *TagsFlag) Set(s string) error { + // See $GOROOT/src/cmd/go/internal/work/build.go (tagsFlag.Set) + // For compatibility with Go 1.12 and earlier, allow "-tags='a b c'" or even just "-tags='a'". + if strings.Contains(s, " ") || strings.Contains(s, "'") { + var err error + *v, err = splitQuotedFields(s) + if *v == nil { + *v = []string{} + } + return err + } + + // Starting in Go 1.13, the -tags flag is a comma-separated list of build tags. + *v = []string{} + for _, s := range strings.Split(s, ",") { + if s != "" { + *v = append(*v, s) + } + } + return nil +} + +func (v *TagsFlag) Get() interface{} { return *v } + +func splitQuotedFields(s string) ([]string, error) { + // See $GOROOT/src/cmd/internal/quoted/quoted.go (Split) + // This must remain in sync with that logic. + var f []string + for len(s) > 0 { + for len(s) > 0 && isSpaceByte(s[0]) { + s = s[1:] + } + if len(s) == 0 { + break + } + // Accepted quoted string. No unescaping inside. + if s[0] == '"' || s[0] == '\'' { + quote := s[0] + s = s[1:] + i := 0 + for i < len(s) && s[i] != quote { + i++ + } + if i >= len(s) { + return nil, fmt.Errorf("unterminated %c string", quote) + } + f = append(f, s[:i]) + s = s[i+1:] + continue + } + i := 0 + for i < len(s) && !isSpaceByte(s[i]) { + i++ + } + f = append(f, s[:i]) + s = s[i:] + } + return f, nil +} + +func (v *TagsFlag) String() string { + return "" +} + +func isSpaceByte(c byte) bool { + // See $GOROOT/src/cmd/internal/quoted/quoted.go (isSpaceByte, Split) + // This list must remain in sync with that. + return c == ' ' || c == '\t' || c == '\n' || c == '\r' +} diff --git a/vendor/golang.org/x/tools/go/buildutil/util.go b/vendor/golang.org/x/tools/go/buildutil/util.go new file mode 100644 index 0000000..bee6390 --- /dev/null +++ b/vendor/golang.org/x/tools/go/buildutil/util.go @@ -0,0 +1,209 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package buildutil + +import ( + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "io" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" +) + +// ParseFile behaves like parser.ParseFile, +// but uses the build context's file system interface, if any. +// +// If file is not absolute (as defined by IsAbsPath), the (dir, file) +// components are joined using JoinPath; dir must be absolute. +// +// The displayPath function, if provided, is used to transform the +// filename that will be attached to the ASTs. +// +// TODO(adonovan): call this from go/loader.parseFiles when the tree thaws. +func ParseFile(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, file string, mode parser.Mode) (*ast.File, error) { + if !IsAbsPath(ctxt, file) { + file = JoinPath(ctxt, dir, file) + } + rd, err := OpenFile(ctxt, file) + if err != nil { + return nil, err + } + defer rd.Close() // ignore error + if displayPath != nil { + file = displayPath(file) + } + return parser.ParseFile(fset, file, rd, mode) +} + +// ContainingPackage returns the package containing filename. +// +// If filename is not absolute, it is interpreted relative to working directory dir. +// All I/O is via the build context's file system interface, if any. +// +// The '...Files []string' fields of the resulting build.Package are not +// populated (build.FindOnly mode). +func ContainingPackage(ctxt *build.Context, dir, filename string) (*build.Package, error) { + if !IsAbsPath(ctxt, filename) { + filename = JoinPath(ctxt, dir, filename) + } + + // We must not assume the file tree uses + // "/" always, + // `\` always, + // or os.PathSeparator (which varies by platform), + // but to make any progress, we are forced to assume that + // paths will not use `\` unless the PathSeparator + // is also `\`, thus we can rely on filepath.ToSlash for some sanity. + + dirSlash := path.Dir(filepath.ToSlash(filename)) + "/" + + // We assume that no source root (GOPATH[i] or GOROOT) contains any other. + for _, srcdir := range ctxt.SrcDirs() { + srcdirSlash := filepath.ToSlash(srcdir) + "/" + if importPath, ok := HasSubdir(ctxt, srcdirSlash, dirSlash); ok { + return ctxt.Import(importPath, dir, build.FindOnly) + } + } + + return nil, fmt.Errorf("can't find package containing %s", filename) +} + +// -- Effective methods of file system interface ------------------------- + +// (go/build.Context defines these as methods, but does not export them.) + +// HasSubdir calls ctxt.HasSubdir (if not nil) or else uses +// the local file system to answer the question. +func HasSubdir(ctxt *build.Context, root, dir string) (rel string, ok bool) { + if f := ctxt.HasSubdir; f != nil { + return f(root, dir) + } + + // Try using paths we received. + if rel, ok = hasSubdir(root, dir); ok { + return + } + + // Try expanding symlinks and comparing + // expanded against unexpanded and + // expanded against expanded. + rootSym, _ := filepath.EvalSymlinks(root) + dirSym, _ := filepath.EvalSymlinks(dir) + + if rel, ok = hasSubdir(rootSym, dir); ok { + return + } + if rel, ok = hasSubdir(root, dirSym); ok { + return + } + return hasSubdir(rootSym, dirSym) +} + +func hasSubdir(root, dir string) (rel string, ok bool) { + const sep = string(filepath.Separator) + root = filepath.Clean(root) + if !strings.HasSuffix(root, sep) { + root += sep + } + + dir = filepath.Clean(dir) + if !strings.HasPrefix(dir, root) { + return "", false + } + + return filepath.ToSlash(dir[len(root):]), true +} + +// FileExists returns true if the specified file exists, +// using the build context's file system interface. +func FileExists(ctxt *build.Context, path string) bool { + if ctxt.OpenFile != nil { + r, err := ctxt.OpenFile(path) + if err != nil { + return false + } + r.Close() // ignore error + return true + } + _, err := os.Stat(path) + return err == nil +} + +// OpenFile behaves like os.Open, +// but uses the build context's file system interface, if any. +func OpenFile(ctxt *build.Context, path string) (io.ReadCloser, error) { + if ctxt.OpenFile != nil { + return ctxt.OpenFile(path) + } + return os.Open(path) +} + +// IsAbsPath behaves like filepath.IsAbs, +// but uses the build context's file system interface, if any. +func IsAbsPath(ctxt *build.Context, path string) bool { + if ctxt.IsAbsPath != nil { + return ctxt.IsAbsPath(path) + } + return filepath.IsAbs(path) +} + +// JoinPath behaves like filepath.Join, +// but uses the build context's file system interface, if any. +func JoinPath(ctxt *build.Context, path ...string) string { + if ctxt.JoinPath != nil { + return ctxt.JoinPath(path...) + } + return filepath.Join(path...) +} + +// IsDir behaves like os.Stat plus IsDir, +// but uses the build context's file system interface, if any. +func IsDir(ctxt *build.Context, path string) bool { + if ctxt.IsDir != nil { + return ctxt.IsDir(path) + } + fi, err := os.Stat(path) + return err == nil && fi.IsDir() +} + +// ReadDir behaves like ioutil.ReadDir, +// but uses the build context's file system interface, if any. +func ReadDir(ctxt *build.Context, path string) ([]os.FileInfo, error) { + if ctxt.ReadDir != nil { + return ctxt.ReadDir(path) + } + return ioutil.ReadDir(path) +} + +// SplitPathList behaves like filepath.SplitList, +// but uses the build context's file system interface, if any. +func SplitPathList(ctxt *build.Context, s string) []string { + if ctxt.SplitPathList != nil { + return ctxt.SplitPathList(s) + } + return filepath.SplitList(s) +} + +// sameFile returns true if x and y have the same basename and denote +// the same file. +func sameFile(x, y string) bool { + if path.Clean(x) == path.Clean(y) { + return true + } + if filepath.Base(x) == filepath.Base(y) { // (optimisation) + if xi, err := os.Stat(x); err == nil { + if yi, err := os.Stat(y); err == nil { + return os.SameFile(xi, yi) + } + } + } + return false +} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go new file mode 100644 index 0000000..697974b --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go @@ -0,0 +1,219 @@ +// Copyright 2013 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 cgo handles cgo preprocessing of files containing `import "C"`. +// +// DESIGN +// +// The approach taken is to run the cgo processor on the package's +// CgoFiles and parse the output, faking the filenames of the +// resulting ASTs so that the synthetic file containing the C types is +// called "C" (e.g. "~/go/src/net/C") and the preprocessed files +// have their original names (e.g. "~/go/src/net/cgo_unix.go"), +// not the names of the actual temporary files. +// +// The advantage of this approach is its fidelity to 'go build'. The +// downside is that the token.Position.Offset for each AST node is +// incorrect, being an offset within the temporary file. Line numbers +// should still be correct because of the //line comments. +// +// The logic of this file is mostly plundered from the 'go build' +// tool, which also invokes the cgo preprocessor. +// +// +// REJECTED ALTERNATIVE +// +// An alternative approach that we explored is to extend go/types' +// Importer mechanism to provide the identity of the importing package +// so that each time `import "C"` appears it resolves to a different +// synthetic package containing just the objects needed in that case. +// The loader would invoke cgo but parse only the cgo_types.go file +// defining the package-level objects, discarding the other files +// resulting from preprocessing. +// +// The benefit of this approach would have been that source-level +// syntax information would correspond exactly to the original cgo +// file, with no preprocessing involved, making source tools like +// godoc, guru, and eg happy. However, the approach was rejected +// due to the additional complexity it would impose on go/types. (It +// made for a beautiful demo, though.) +// +// cgo files, despite their *.go extension, are not legal Go source +// files per the specification since they may refer to unexported +// members of package "C" such as C.int. Also, a function such as +// C.getpwent has in effect two types, one matching its C type and one +// which additionally returns (errno C.int). The cgo preprocessor +// uses name mangling to distinguish these two functions in the +// processed code, but go/types would need to duplicate this logic in +// its handling of function calls, analogous to the treatment of map +// lookups in which y=m[k] and y,ok=m[k] are both legal. + +package cgo + +import ( + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "log" + "os" + "os/exec" + "path/filepath" + "regexp" + "strings" +) + +// ProcessFiles invokes the cgo preprocessor on bp.CgoFiles, parses +// the output and returns the resulting ASTs. +func ProcessFiles(bp *build.Package, fset *token.FileSet, DisplayPath func(path string) string, mode parser.Mode) ([]*ast.File, error) { + tmpdir, err := os.MkdirTemp("", strings.Replace(bp.ImportPath, "/", "_", -1)+"_C") + if err != nil { + return nil, err + } + defer os.RemoveAll(tmpdir) + + pkgdir := bp.Dir + if DisplayPath != nil { + pkgdir = DisplayPath(pkgdir) + } + + cgoFiles, cgoDisplayFiles, err := Run(bp, pkgdir, tmpdir, false) + if err != nil { + return nil, err + } + var files []*ast.File + for i := range cgoFiles { + rd, err := os.Open(cgoFiles[i]) + if err != nil { + return nil, err + } + display := filepath.Join(bp.Dir, cgoDisplayFiles[i]) + f, err := parser.ParseFile(fset, display, rd, mode) + rd.Close() + if err != nil { + return nil, err + } + files = append(files, f) + } + return files, nil +} + +var cgoRe = regexp.MustCompile(`[/\\:]`) + +// Run invokes the cgo preprocessor on bp.CgoFiles and returns two +// lists of files: the resulting processed files (in temporary +// directory tmpdir) and the corresponding names of the unprocessed files. +// +// Run is adapted from (*builder).cgo in +// $GOROOT/src/cmd/go/build.go, but these features are unsupported: +// Objective C, CGOPKGPATH, CGO_FLAGS. +// +// If useabs is set to true, absolute paths of the bp.CgoFiles will be passed in +// to the cgo preprocessor. This in turn will set the // line comments +// referring to those files to use absolute paths. This is needed for +// go/packages using the legacy go list support so it is able to find +// the original files. +func Run(bp *build.Package, pkgdir, tmpdir string, useabs bool) (files, displayFiles []string, err error) { + cgoCPPFLAGS, _, _, _ := cflags(bp, true) + _, cgoexeCFLAGS, _, _ := cflags(bp, false) + + if len(bp.CgoPkgConfig) > 0 { + pcCFLAGS, err := pkgConfigFlags(bp) + if err != nil { + return nil, nil, err + } + cgoCPPFLAGS = append(cgoCPPFLAGS, pcCFLAGS...) + } + + // Allows including _cgo_export.h from .[ch] files in the package. + cgoCPPFLAGS = append(cgoCPPFLAGS, "-I", tmpdir) + + // _cgo_gotypes.go (displayed "C") contains the type definitions. + files = append(files, filepath.Join(tmpdir, "_cgo_gotypes.go")) + displayFiles = append(displayFiles, "C") + for _, fn := range bp.CgoFiles { + // "foo.cgo1.go" (displayed "foo.go") is the processed Go source. + f := cgoRe.ReplaceAllString(fn[:len(fn)-len("go")], "_") + files = append(files, filepath.Join(tmpdir, f+"cgo1.go")) + displayFiles = append(displayFiles, fn) + } + + var cgoflags []string + if bp.Goroot && bp.ImportPath == "runtime/cgo" { + cgoflags = append(cgoflags, "-import_runtime_cgo=false") + } + if bp.Goroot && bp.ImportPath == "runtime/race" || bp.ImportPath == "runtime/cgo" { + cgoflags = append(cgoflags, "-import_syscall=false") + } + + var cgoFiles []string = bp.CgoFiles + if useabs { + cgoFiles = make([]string, len(bp.CgoFiles)) + for i := range cgoFiles { + cgoFiles[i] = filepath.Join(pkgdir, bp.CgoFiles[i]) + } + } + + args := stringList( + "go", "tool", "cgo", "-objdir", tmpdir, cgoflags, "--", + cgoCPPFLAGS, cgoexeCFLAGS, cgoFiles, + ) + if false { + log.Printf("Running cgo for package %q: %s (dir=%s)", bp.ImportPath, args, pkgdir) + } + cmd := exec.Command(args[0], args[1:]...) + cmd.Dir = pkgdir + cmd.Env = append(os.Environ(), "PWD="+pkgdir) + cmd.Stdout = os.Stderr + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return nil, nil, fmt.Errorf("cgo failed: %s: %s", args, err) + } + + return files, displayFiles, nil +} + +// -- unmodified from 'go build' --------------------------------------- + +// Return the flags to use when invoking the C or C++ compilers, or cgo. +func cflags(p *build.Package, def bool) (cppflags, cflags, cxxflags, ldflags []string) { + var defaults string + if def { + defaults = "-g -O2" + } + + cppflags = stringList(envList("CGO_CPPFLAGS", ""), p.CgoCPPFLAGS) + cflags = stringList(envList("CGO_CFLAGS", defaults), p.CgoCFLAGS) + cxxflags = stringList(envList("CGO_CXXFLAGS", defaults), p.CgoCXXFLAGS) + ldflags = stringList(envList("CGO_LDFLAGS", defaults), p.CgoLDFLAGS) + return +} + +// envList returns the value of the given environment variable broken +// into fields, using the default value when the variable is empty. +func envList(key, def string) []string { + v := os.Getenv(key) + if v == "" { + v = def + } + return strings.Fields(v) +} + +// stringList's arguments should be a sequence of string or []string values. +// stringList flattens them into a single []string. +func stringList(args ...interface{}) []string { + var x []string + for _, arg := range args { + switch arg := arg.(type) { + case []string: + x = append(x, arg...) + case string: + x = append(x, arg) + default: + panic("stringList: invalid argument") + } + } + return x +} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go new file mode 100644 index 0000000..2455be5 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go @@ -0,0 +1,42 @@ +// Copyright 2013 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 cgo + +import ( + "errors" + "fmt" + "go/build" + "os/exec" + "strings" +) + +// pkgConfig runs pkg-config with the specified arguments and returns the flags it prints. +func pkgConfig(mode string, pkgs []string) (flags []string, err error) { + cmd := exec.Command("pkg-config", append([]string{mode}, pkgs...)...) + out, err := cmd.Output() + if err != nil { + s := fmt.Sprintf("%s failed: %v", strings.Join(cmd.Args, " "), err) + if len(out) > 0 { + s = fmt.Sprintf("%s: %s", s, out) + } + if err, ok := err.(*exec.ExitError); ok && len(err.Stderr) > 0 { + s = fmt.Sprintf("%s\nstderr:\n%s", s, err.Stderr) + } + return nil, errors.New(s) + } + if len(out) > 0 { + flags = strings.Fields(string(out)) + } + return +} + +// pkgConfigFlags calls pkg-config if needed and returns the cflags +// needed to build the package. +func pkgConfigFlags(p *build.Package) (cflags []string, err error) { + if len(p.CgoPkgConfig) == 0 { + return nil, nil + } + return pkgConfig("--cflags", p.CgoPkgConfig) +} diff --git a/vendor/golang.org/x/tools/go/loader/doc.go b/vendor/golang.org/x/tools/go/loader/doc.go new file mode 100644 index 0000000..e35b1fd --- /dev/null +++ b/vendor/golang.org/x/tools/go/loader/doc.go @@ -0,0 +1,202 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package loader loads a complete Go program from source code, parsing +// and type-checking the initial packages plus their transitive closure +// of dependencies. The ASTs and the derived facts are retained for +// later use. +// +// Deprecated: This is an older API and does not have support +// for modules. Use golang.org/x/tools/go/packages instead. +// +// The package defines two primary types: Config, which specifies a +// set of initial packages to load and various other options; and +// Program, which is the result of successfully loading the packages +// specified by a configuration. +// +// The configuration can be set directly, but *Config provides various +// convenience methods to simplify the common cases, each of which can +// be called any number of times. Finally, these are followed by a +// call to Load() to actually load and type-check the program. +// +// var conf loader.Config +// +// // Use the command-line arguments to specify +// // a set of initial packages to load from source. +// // See FromArgsUsage for help. +// rest, err := conf.FromArgs(os.Args[1:], wantTests) +// +// // Parse the specified files and create an ad hoc package with path "foo". +// // All files must have the same 'package' declaration. +// conf.CreateFromFilenames("foo", "foo.go", "bar.go") +// +// // Create an ad hoc package with path "foo" from +// // the specified already-parsed files. +// // All ASTs must have the same 'package' declaration. +// conf.CreateFromFiles("foo", parsedFiles) +// +// // Add "runtime" to the set of packages to be loaded. +// conf.Import("runtime") +// +// // Adds "fmt" and "fmt_test" to the set of packages +// // to be loaded. "fmt" will include *_test.go files. +// conf.ImportWithTests("fmt") +// +// // Finally, load all the packages specified by the configuration. +// prog, err := conf.Load() +// +// See examples_test.go for examples of API usage. +// +// # CONCEPTS AND TERMINOLOGY +// +// The WORKSPACE is the set of packages accessible to the loader. The +// workspace is defined by Config.Build, a *build.Context. The +// default context treats subdirectories of $GOROOT and $GOPATH as +// packages, but this behavior may be overridden. +// +// An AD HOC package is one specified as a set of source files on the +// command line. In the simplest case, it may consist of a single file +// such as $GOROOT/src/net/http/triv.go. +// +// EXTERNAL TEST packages are those comprised of a set of *_test.go +// files all with the same 'package foo_test' declaration, all in the +// same directory. (go/build.Package calls these files XTestFiles.) +// +// An IMPORTABLE package is one that can be referred to by some import +// spec. Every importable package is uniquely identified by its +// PACKAGE PATH or just PATH, a string such as "fmt", "encoding/json", +// or "cmd/vendor/golang.org/x/arch/x86/x86asm". A package path +// typically denotes a subdirectory of the workspace. +// +// An import declaration uses an IMPORT PATH to refer to a package. +// Most import declarations use the package path as the import path. +// +// Due to VENDORING (https://golang.org/s/go15vendor), the +// interpretation of an import path may depend on the directory in which +// it appears. To resolve an import path to a package path, go/build +// must search the enclosing directories for a subdirectory named +// "vendor". +// +// ad hoc packages and external test packages are NON-IMPORTABLE. The +// path of an ad hoc package is inferred from the package +// declarations of its files and is therefore not a unique package key. +// For example, Config.CreatePkgs may specify two initial ad hoc +// packages, both with path "main". +// +// An AUGMENTED package is an importable package P plus all the +// *_test.go files with same 'package foo' declaration as P. +// (go/build.Package calls these files TestFiles.) +// +// The INITIAL packages are those specified in the configuration. A +// DEPENDENCY is a package loaded to satisfy an import in an initial +// package or another dependency. +package loader + +// IMPLEMENTATION NOTES +// +// 'go test', in-package test files, and import cycles +// --------------------------------------------------- +// +// An external test package may depend upon members of the augmented +// package that are not in the unaugmented package, such as functions +// that expose internals. (See bufio/export_test.go for an example.) +// So, the loader must ensure that for each external test package +// it loads, it also augments the corresponding non-test package. +// +// The import graph over n unaugmented packages must be acyclic; the +// import graph over n-1 unaugmented packages plus one augmented +// package must also be acyclic. ('go test' relies on this.) But the +// import graph over n augmented packages may contain cycles. +// +// First, all the (unaugmented) non-test packages and their +// dependencies are imported in the usual way; the loader reports an +// error if it detects an import cycle. +// +// Then, each package P for which testing is desired is augmented by +// the list P' of its in-package test files, by calling +// (*types.Checker).Files. This arrangement ensures that P' may +// reference definitions within P, but P may not reference definitions +// within P'. Furthermore, P' may import any other package, including +// ones that depend upon P, without an import cycle error. +// +// Consider two packages A and B, both of which have lists of +// in-package test files we'll call A' and B', and which have the +// following import graph edges: +// B imports A +// B' imports A +// A' imports B +// This last edge would be expected to create an error were it not +// for the special type-checking discipline above. +// Cycles of size greater than two are possible. For example: +// compress/bzip2/bzip2_test.go (package bzip2) imports "io/ioutil" +// io/ioutil/tempfile_test.go (package ioutil) imports "regexp" +// regexp/exec_test.go (package regexp) imports "compress/bzip2" +// +// +// Concurrency +// ----------- +// +// Let us define the import dependency graph as follows. Each node is a +// list of files passed to (Checker).Files at once. Many of these lists +// are the production code of an importable Go package, so those nodes +// are labelled by the package's path. The remaining nodes are +// ad hoc packages and lists of in-package *_test.go files that augment +// an importable package; those nodes have no label. +// +// The edges of the graph represent import statements appearing within a +// file. An edge connects a node (a list of files) to the node it +// imports, which is importable and thus always labelled. +// +// Loading is controlled by this dependency graph. +// +// To reduce I/O latency, we start loading a package's dependencies +// asynchronously as soon as we've parsed its files and enumerated its +// imports (scanImports). This performs a preorder traversal of the +// import dependency graph. +// +// To exploit hardware parallelism, we type-check unrelated packages in +// parallel, where "unrelated" means not ordered by the partial order of +// the import dependency graph. +// +// We use a concurrency-safe non-blocking cache (importer.imported) to +// record the results of type-checking, whether success or failure. An +// entry is created in this cache by startLoad the first time the +// package is imported. The first goroutine to request an entry becomes +// responsible for completing the task and broadcasting completion to +// subsequent requestors, which block until then. +// +// Type checking occurs in (parallel) postorder: we cannot type-check a +// set of files until we have loaded and type-checked all of their +// immediate dependencies (and thus all of their transitive +// dependencies). If the input were guaranteed free of import cycles, +// this would be trivial: we could simply wait for completion of the +// dependencies and then invoke the typechecker. +// +// But as we saw in the 'go test' section above, some cycles in the +// import graph over packages are actually legal, so long as the +// cycle-forming edge originates in the in-package test files that +// augment the package. This explains why the nodes of the import +// dependency graph are not packages, but lists of files: the unlabelled +// nodes avoid the cycles. Consider packages A and B where B imports A +// and A's in-package tests AT import B. The naively constructed import +// graph over packages would contain a cycle (A+AT) --> B --> (A+AT) but +// the graph over lists of files is AT --> B --> A, where AT is an +// unlabelled node. +// +// Awaiting completion of the dependencies in a cyclic graph would +// deadlock, so we must materialize the import dependency graph (as +// importer.graph) and check whether each import edge forms a cycle. If +// x imports y, and the graph already contains a path from y to x, then +// there is an import cycle, in which case the processing of x must not +// wait for the completion of processing of y. +// +// When the type-checker makes a callback (doImport) to the loader for a +// given import edge, there are two possible cases. In the normal case, +// the dependency has already been completely type-checked; doImport +// does a cache lookup and returns it. In the cyclic case, the entry in +// the cache is still necessarily incomplete, indicating a cycle. We +// perform the cycle check again to obtain the error message, and return +// the error. +// +// The result of using concurrency is about a 2.5x speedup for stdlib_test. diff --git a/vendor/golang.org/x/tools/go/loader/loader.go b/vendor/golang.org/x/tools/go/loader/loader.go new file mode 100644 index 0000000..013c0f5 --- /dev/null +++ b/vendor/golang.org/x/tools/go/loader/loader.go @@ -0,0 +1,1066 @@ +// Copyright 2013 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 loader + +// See doc.go for package documentation and implementation notes. + +import ( + "errors" + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "go/types" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "time" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/go/internal/cgo" + "golang.org/x/tools/internal/versions" +) + +var ignoreVendor build.ImportMode + +const trace = false // show timing info for type-checking + +// Config specifies the configuration for loading a whole program from +// Go source code. +// The zero value for Config is a ready-to-use default configuration. +type Config struct { + // Fset is the file set for the parser to use when loading the + // program. If nil, it may be lazily initialized by any + // method of Config. + Fset *token.FileSet + + // ParserMode specifies the mode to be used by the parser when + // loading source packages. + ParserMode parser.Mode + + // TypeChecker contains options relating to the type checker. + // + // The supplied IgnoreFuncBodies is not used; the effective + // value comes from the TypeCheckFuncBodies func below. + // The supplied Import function is not used either. + TypeChecker types.Config + + // TypeCheckFuncBodies is a predicate over package paths. + // A package for which the predicate is false will + // have its package-level declarations type checked, but not + // its function bodies; this can be used to quickly load + // dependencies from source. If nil, all func bodies are type + // checked. + TypeCheckFuncBodies func(path string) bool + + // If Build is non-nil, it is used to locate source packages. + // Otherwise &build.Default is used. + // + // By default, cgo is invoked to preprocess Go files that + // import the fake package "C". This behaviour can be + // disabled by setting CGO_ENABLED=0 in the environment prior + // to startup, or by setting Build.CgoEnabled=false. + Build *build.Context + + // The current directory, used for resolving relative package + // references such as "./go/loader". If empty, os.Getwd will be + // used instead. + Cwd string + + // If DisplayPath is non-nil, it is used to transform each + // file name obtained from Build.Import(). This can be used + // to prevent a virtualized build.Config's file names from + // leaking into the user interface. + DisplayPath func(path string) string + + // If AllowErrors is true, Load will return a Program even + // if some of the its packages contained I/O, parser or type + // errors; such errors are accessible via PackageInfo.Errors. If + // false, Load will fail if any package had an error. + AllowErrors bool + + // CreatePkgs specifies a list of non-importable initial + // packages to create. The resulting packages will appear in + // the corresponding elements of the Program.Created slice. + CreatePkgs []PkgSpec + + // ImportPkgs specifies a set of initial packages to load. + // The map keys are package paths. + // + // The map value indicates whether to load tests. If true, Load + // will add and type-check two lists of files to the package: + // non-test files followed by in-package *_test.go files. In + // addition, it will append the external test package (if any) + // to Program.Created. + ImportPkgs map[string]bool + + // FindPackage is called during Load to create the build.Package + // for a given import path from a given directory. + // If FindPackage is nil, (*build.Context).Import is used. + // A client may use this hook to adapt to a proprietary build + // system that does not follow the "go build" layout + // conventions, for example. + // + // It must be safe to call concurrently from multiple goroutines. + FindPackage func(ctxt *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error) + + // AfterTypeCheck is called immediately after a list of files + // has been type-checked and appended to info.Files. + // + // This optional hook function is the earliest opportunity for + // the client to observe the output of the type checker, + // which may be useful to reduce analysis latency when loading + // a large program. + // + // The function is permitted to modify info.Info, for instance + // to clear data structures that are no longer needed, which can + // dramatically reduce peak memory consumption. + // + // The function may be called twice for the same PackageInfo: + // once for the files of the package and again for the + // in-package test files. + // + // It must be safe to call concurrently from multiple goroutines. + AfterTypeCheck func(info *PackageInfo, files []*ast.File) +} + +// A PkgSpec specifies a non-importable package to be created by Load. +// Files are processed first, but typically only one of Files and +// Filenames is provided. The path needn't be globally unique. +// +// For vendoring purposes, the package's directory is the one that +// contains the first file. +type PkgSpec struct { + Path string // package path ("" => use package declaration) + Files []*ast.File // ASTs of already-parsed files + Filenames []string // names of files to be parsed +} + +// A Program is a Go program loaded from source as specified by a Config. +type Program struct { + Fset *token.FileSet // the file set for this program + + // Created[i] contains the initial package whose ASTs or + // filenames were supplied by Config.CreatePkgs[i], followed by + // the external test package, if any, of each package in + // Config.ImportPkgs ordered by ImportPath. + // + // NOTE: these files must not import "C". Cgo preprocessing is + // only performed on imported packages, not ad hoc packages. + // + // TODO(adonovan): we need to copy and adapt the logic of + // goFilesPackage (from $GOROOT/src/cmd/go/build.go) and make + // Config.Import and Config.Create methods return the same kind + // of entity, essentially a build.Package. + // Perhaps we can even reuse that type directly. + Created []*PackageInfo + + // Imported contains the initially imported packages, + // as specified by Config.ImportPkgs. + Imported map[string]*PackageInfo + + // AllPackages contains the PackageInfo of every package + // encountered by Load: all initial packages and all + // dependencies, including incomplete ones. + AllPackages map[*types.Package]*PackageInfo + + // importMap is the canonical mapping of package paths to + // packages. It contains all Imported initial packages, but not + // Created ones, and all imported dependencies. + importMap map[string]*types.Package +} + +// PackageInfo holds the ASTs and facts derived by the type-checker +// for a single package. +// +// Not mutated once exposed via the API. +type PackageInfo struct { + Pkg *types.Package + Importable bool // true if 'import "Pkg.Path()"' would resolve to this + TransitivelyErrorFree bool // true if Pkg and all its dependencies are free of errors + Files []*ast.File // syntax trees for the package's files + Errors []error // non-nil if the package had errors + types.Info // type-checker deductions. + dir string // package directory + + checker *types.Checker // transient type-checker state + errorFunc func(error) +} + +func (info *PackageInfo) String() string { return info.Pkg.Path() } + +func (info *PackageInfo) appendError(err error) { + if info.errorFunc != nil { + info.errorFunc(err) + } else { + fmt.Fprintln(os.Stderr, err) + } + info.Errors = append(info.Errors, err) +} + +func (conf *Config) fset() *token.FileSet { + if conf.Fset == nil { + conf.Fset = token.NewFileSet() + } + return conf.Fset +} + +// ParseFile is a convenience function (intended for testing) that invokes +// the parser using the Config's FileSet, which is initialized if nil. +// +// src specifies the parser input as a string, []byte, or io.Reader, and +// filename is its apparent name. If src is nil, the contents of +// filename are read from the file system. +func (conf *Config) ParseFile(filename string, src interface{}) (*ast.File, error) { + // TODO(adonovan): use conf.build() etc like parseFiles does. + return parser.ParseFile(conf.fset(), filename, src, conf.ParserMode) +} + +// FromArgsUsage is a partial usage message that applications calling +// FromArgs may wish to include in their -help output. +const FromArgsUsage = ` + is a list of arguments denoting a set of initial packages. +It may take one of two forms: + +1. A list of *.go source files. + + All of the specified files are loaded, parsed and type-checked + as a single package. All the files must belong to the same directory. + +2. A list of import paths, each denoting a package. + + The package's directory is found relative to the $GOROOT and + $GOPATH using similar logic to 'go build', and the *.go files in + that directory are loaded, parsed and type-checked as a single + package. + + In addition, all *_test.go files in the directory are then loaded + and parsed. Those files whose package declaration equals that of + the non-*_test.go files are included in the primary package. Test + files whose package declaration ends with "_test" are type-checked + as another package, the 'external' test package, so that a single + import path may denote two packages. (Whether this behaviour is + enabled is tool-specific, and may depend on additional flags.) + +A '--' argument terminates the list of packages. +` + +// FromArgs interprets args as a set of initial packages to load from +// source and updates the configuration. It returns the list of +// unconsumed arguments. +// +// It is intended for use in command-line interfaces that require a +// set of initial packages to be specified; see FromArgsUsage message +// for details. +// +// Only superficial errors are reported at this stage; errors dependent +// on I/O are detected during Load. +func (conf *Config) FromArgs(args []string, xtest bool) ([]string, error) { + var rest []string + for i, arg := range args { + if arg == "--" { + rest = args[i+1:] + args = args[:i] + break // consume "--" and return the remaining args + } + } + + if len(args) > 0 && strings.HasSuffix(args[0], ".go") { + // Assume args is a list of a *.go files + // denoting a single ad hoc package. + for _, arg := range args { + if !strings.HasSuffix(arg, ".go") { + return nil, fmt.Errorf("named files must be .go files: %s", arg) + } + } + conf.CreateFromFilenames("", args...) + } else { + // Assume args are directories each denoting a + // package and (perhaps) an external test, iff xtest. + for _, arg := range args { + if xtest { + conf.ImportWithTests(arg) + } else { + conf.Import(arg) + } + } + } + + return rest, nil +} + +// CreateFromFilenames is a convenience function that adds +// a conf.CreatePkgs entry to create a package of the specified *.go +// files. +func (conf *Config) CreateFromFilenames(path string, filenames ...string) { + conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Filenames: filenames}) +} + +// CreateFromFiles is a convenience function that adds a conf.CreatePkgs +// entry to create package of the specified path and parsed files. +func (conf *Config) CreateFromFiles(path string, files ...*ast.File) { + conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Files: files}) +} + +// ImportWithTests is a convenience function that adds path to +// ImportPkgs, the set of initial source packages located relative to +// $GOPATH. The package will be augmented by any *_test.go files in +// its directory that contain a "package x" (not "package x_test") +// declaration. +// +// In addition, if any *_test.go files contain a "package x_test" +// declaration, an additional package comprising just those files will +// be added to CreatePkgs. +func (conf *Config) ImportWithTests(path string) { conf.addImport(path, true) } + +// Import is a convenience function that adds path to ImportPkgs, the +// set of initial packages that will be imported from source. +func (conf *Config) Import(path string) { conf.addImport(path, false) } + +func (conf *Config) addImport(path string, tests bool) { + if path == "C" { + return // ignore; not a real package + } + if conf.ImportPkgs == nil { + conf.ImportPkgs = make(map[string]bool) + } + conf.ImportPkgs[path] = conf.ImportPkgs[path] || tests +} + +// PathEnclosingInterval returns the PackageInfo and ast.Node that +// contain source interval [start, end), and all the node's ancestors +// up to the AST root. It searches all ast.Files of all packages in prog. +// exact is defined as for astutil.PathEnclosingInterval. +// +// The zero value is returned if not found. +func (prog *Program) PathEnclosingInterval(start, end token.Pos) (pkg *PackageInfo, path []ast.Node, exact bool) { + for _, info := range prog.AllPackages { + for _, f := range info.Files { + if f.Pos() == token.NoPos { + // This can happen if the parser saw + // too many errors and bailed out. + // (Use parser.AllErrors to prevent that.) + continue + } + if !tokenFileContainsPos(prog.Fset.File(f.Pos()), start) { + continue + } + if path, exact := astutil.PathEnclosingInterval(f, start, end); path != nil { + return info, path, exact + } + } + } + return nil, nil, false +} + +// InitialPackages returns a new slice containing the set of initial +// packages (Created + Imported) in unspecified order. +func (prog *Program) InitialPackages() []*PackageInfo { + infos := make([]*PackageInfo, 0, len(prog.Created)+len(prog.Imported)) + infos = append(infos, prog.Created...) + for _, info := range prog.Imported { + infos = append(infos, info) + } + return infos +} + +// Package returns the ASTs and results of type checking for the +// specified package. +func (prog *Program) Package(path string) *PackageInfo { + if info, ok := prog.AllPackages[prog.importMap[path]]; ok { + return info + } + for _, info := range prog.Created { + if path == info.Pkg.Path() { + return info + } + } + return nil +} + +// ---------- Implementation ---------- + +// importer holds the working state of the algorithm. +type importer struct { + conf *Config // the client configuration + start time.Time // for logging + + progMu sync.Mutex // guards prog + prog *Program // the resulting program + + // findpkg is a memoization of FindPackage. + findpkgMu sync.Mutex // guards findpkg + findpkg map[findpkgKey]*findpkgValue + + importedMu sync.Mutex // guards imported + imported map[string]*importInfo // all imported packages (incl. failures) by import path + + // import dependency graph: graph[x][y] => x imports y + // + // Since non-importable packages cannot be cyclic, we ignore + // their imports, thus we only need the subgraph over importable + // packages. Nodes are identified by their import paths. + graphMu sync.Mutex + graph map[string]map[string]bool +} + +type findpkgKey struct { + importPath string + fromDir string + mode build.ImportMode +} + +type findpkgValue struct { + ready chan struct{} // closed to broadcast readiness + bp *build.Package + err error +} + +// importInfo tracks the success or failure of a single import. +// +// Upon completion, exactly one of info and err is non-nil: +// info on successful creation of a package, err otherwise. +// A successful package may still contain type errors. +type importInfo struct { + path string // import path + info *PackageInfo // results of typechecking (including errors) + complete chan struct{} // closed to broadcast that info is set. +} + +// awaitCompletion blocks until ii is complete, +// i.e. the info field is safe to inspect. +func (ii *importInfo) awaitCompletion() { + <-ii.complete // wait for close +} + +// Complete marks ii as complete. +// Its info and err fields will not be subsequently updated. +func (ii *importInfo) Complete(info *PackageInfo) { + if info == nil { + panic("info == nil") + } + ii.info = info + close(ii.complete) +} + +type importError struct { + path string // import path + err error // reason for failure to create a package +} + +// Load creates the initial packages specified by conf.{Create,Import}Pkgs, +// loading their dependencies packages as needed. +// +// On success, Load returns a Program containing a PackageInfo for +// each package. On failure, it returns an error. +// +// If AllowErrors is true, Load will return a Program even if some +// packages contained I/O, parser or type errors, or if dependencies +// were missing. (Such errors are accessible via PackageInfo.Errors. If +// false, Load will fail if any package had an error. +// +// It is an error if no packages were loaded. +func (conf *Config) Load() (*Program, error) { + // Create a simple default error handler for parse/type errors. + if conf.TypeChecker.Error == nil { + conf.TypeChecker.Error = func(e error) { fmt.Fprintln(os.Stderr, e) } + } + + // Set default working directory for relative package references. + if conf.Cwd == "" { + var err error + conf.Cwd, err = os.Getwd() + if err != nil { + return nil, err + } + } + + // Install default FindPackage hook using go/build logic. + if conf.FindPackage == nil { + conf.FindPackage = (*build.Context).Import + } + + prog := &Program{ + Fset: conf.fset(), + Imported: make(map[string]*PackageInfo), + importMap: make(map[string]*types.Package), + AllPackages: make(map[*types.Package]*PackageInfo), + } + + imp := importer{ + conf: conf, + prog: prog, + findpkg: make(map[findpkgKey]*findpkgValue), + imported: make(map[string]*importInfo), + start: time.Now(), + graph: make(map[string]map[string]bool), + } + + // -- loading proper (concurrent phase) -------------------------------- + + var errpkgs []string // packages that contained errors + + // Load the initially imported packages and their dependencies, + // in parallel. + // No vendor check on packages imported from the command line. + infos, importErrors := imp.importAll("", conf.Cwd, conf.ImportPkgs, ignoreVendor) + for _, ie := range importErrors { + conf.TypeChecker.Error(ie.err) // failed to create package + errpkgs = append(errpkgs, ie.path) + } + for _, info := range infos { + prog.Imported[info.Pkg.Path()] = info + } + + // Augment the designated initial packages by their tests. + // Dependencies are loaded in parallel. + var xtestPkgs []*build.Package + for importPath, augment := range conf.ImportPkgs { + if !augment { + continue + } + + // No vendor check on packages imported from command line. + bp, err := imp.findPackage(importPath, conf.Cwd, ignoreVendor) + if err != nil { + // Package not found, or can't even parse package declaration. + // Already reported by previous loop; ignore it. + continue + } + + // Needs external test package? + if len(bp.XTestGoFiles) > 0 { + xtestPkgs = append(xtestPkgs, bp) + } + + // Consult the cache using the canonical package path. + path := bp.ImportPath + imp.importedMu.Lock() // (unnecessary, we're sequential here) + ii, ok := imp.imported[path] + // Paranoid checks added due to issue #11012. + if !ok { + // Unreachable. + // The previous loop called importAll and thus + // startLoad for each path in ImportPkgs, which + // populates imp.imported[path] with a non-zero value. + panic(fmt.Sprintf("imported[%q] not found", path)) + } + if ii == nil { + // Unreachable. + // The ii values in this loop are the same as in + // the previous loop, which enforced the invariant + // that at least one of ii.err and ii.info is non-nil. + panic(fmt.Sprintf("imported[%q] == nil", path)) + } + if ii.info == nil { + // Unreachable. + // awaitCompletion has the postcondition + // ii.info != nil. + panic(fmt.Sprintf("imported[%q].info = nil", path)) + } + info := ii.info + imp.importedMu.Unlock() + + // Parse the in-package test files. + files, errs := imp.conf.parsePackageFiles(bp, 't') + for _, err := range errs { + info.appendError(err) + } + + // The test files augmenting package P cannot be imported, + // but may import packages that import P, + // so we must disable the cycle check. + imp.addFiles(info, files, false) + } + + createPkg := func(path, dir string, files []*ast.File, errs []error) { + info := imp.newPackageInfo(path, dir) + for _, err := range errs { + info.appendError(err) + } + + // Ad hoc packages are non-importable, + // so no cycle check is needed. + // addFiles loads dependencies in parallel. + imp.addFiles(info, files, false) + prog.Created = append(prog.Created, info) + } + + // Create packages specified by conf.CreatePkgs. + for _, cp := range conf.CreatePkgs { + files, errs := parseFiles(conf.fset(), conf.build(), nil, conf.Cwd, cp.Filenames, conf.ParserMode) + files = append(files, cp.Files...) + + path := cp.Path + if path == "" { + if len(files) > 0 { + path = files[0].Name.Name + } else { + path = "(unnamed)" + } + } + + dir := conf.Cwd + if len(files) > 0 && files[0].Pos().IsValid() { + dir = filepath.Dir(conf.fset().File(files[0].Pos()).Name()) + } + createPkg(path, dir, files, errs) + } + + // Create external test packages. + sort.Sort(byImportPath(xtestPkgs)) + for _, bp := range xtestPkgs { + files, errs := imp.conf.parsePackageFiles(bp, 'x') + createPkg(bp.ImportPath+"_test", bp.Dir, files, errs) + } + + // -- finishing up (sequential) ---------------------------------------- + + if len(prog.Imported)+len(prog.Created) == 0 { + return nil, errors.New("no initial packages were loaded") + } + + // Create infos for indirectly imported packages. + // e.g. incomplete packages without syntax, loaded from export data. + for _, obj := range prog.importMap { + info := prog.AllPackages[obj] + if info == nil { + prog.AllPackages[obj] = &PackageInfo{Pkg: obj, Importable: true} + } else { + // finished + info.checker = nil + info.errorFunc = nil + } + } + + if !conf.AllowErrors { + // Report errors in indirectly imported packages. + for _, info := range prog.AllPackages { + if len(info.Errors) > 0 { + errpkgs = append(errpkgs, info.Pkg.Path()) + } + } + if errpkgs != nil { + var more string + if len(errpkgs) > 3 { + more = fmt.Sprintf(" and %d more", len(errpkgs)-3) + errpkgs = errpkgs[:3] + } + return nil, fmt.Errorf("couldn't load packages due to errors: %s%s", + strings.Join(errpkgs, ", "), more) + } + } + + markErrorFreePackages(prog.AllPackages) + + return prog, nil +} + +type byImportPath []*build.Package + +func (b byImportPath) Len() int { return len(b) } +func (b byImportPath) Less(i, j int) bool { return b[i].ImportPath < b[j].ImportPath } +func (b byImportPath) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +// markErrorFreePackages sets the TransitivelyErrorFree flag on all +// applicable packages. +func markErrorFreePackages(allPackages map[*types.Package]*PackageInfo) { + // Build the transpose of the import graph. + importedBy := make(map[*types.Package]map[*types.Package]bool) + for P := range allPackages { + for _, Q := range P.Imports() { + clients, ok := importedBy[Q] + if !ok { + clients = make(map[*types.Package]bool) + importedBy[Q] = clients + } + clients[P] = true + } + } + + // Find all packages reachable from some error package. + reachable := make(map[*types.Package]bool) + var visit func(*types.Package) + visit = func(p *types.Package) { + if !reachable[p] { + reachable[p] = true + for q := range importedBy[p] { + visit(q) + } + } + } + for _, info := range allPackages { + if len(info.Errors) > 0 { + visit(info.Pkg) + } + } + + // Mark the others as "transitively error-free". + for _, info := range allPackages { + if !reachable[info.Pkg] { + info.TransitivelyErrorFree = true + } + } +} + +// build returns the effective build context. +func (conf *Config) build() *build.Context { + if conf.Build != nil { + return conf.Build + } + return &build.Default +} + +// parsePackageFiles enumerates the files belonging to package path, +// then loads, parses and returns them, plus a list of I/O or parse +// errors that were encountered. +// +// 'which' indicates which files to include: +// +// 'g': include non-test *.go source files (GoFiles + processed CgoFiles) +// 't': include in-package *_test.go source files (TestGoFiles) +// 'x': include external *_test.go source files. (XTestGoFiles) +func (conf *Config) parsePackageFiles(bp *build.Package, which rune) ([]*ast.File, []error) { + if bp.ImportPath == "unsafe" { + return nil, nil + } + var filenames []string + switch which { + case 'g': + filenames = bp.GoFiles + case 't': + filenames = bp.TestGoFiles + case 'x': + filenames = bp.XTestGoFiles + default: + panic(which) + } + + files, errs := parseFiles(conf.fset(), conf.build(), conf.DisplayPath, bp.Dir, filenames, conf.ParserMode) + + // Preprocess CgoFiles and parse the outputs (sequentially). + if which == 'g' && bp.CgoFiles != nil { + cgofiles, err := cgo.ProcessFiles(bp, conf.fset(), conf.DisplayPath, conf.ParserMode) + if err != nil { + errs = append(errs, err) + } else { + files = append(files, cgofiles...) + } + } + + return files, errs +} + +// doImport imports the package denoted by path. +// It implements the types.Importer signature. +// +// It returns an error if a package could not be created +// (e.g. go/build or parse error), but type errors are reported via +// the types.Config.Error callback (the first of which is also saved +// in the package's PackageInfo). +// +// Idempotent. +func (imp *importer) doImport(from *PackageInfo, to string) (*types.Package, error) { + if to == "C" { + // This should be unreachable, but ad hoc packages are + // not currently subject to cgo preprocessing. + // See https://golang.org/issue/11627. + return nil, fmt.Errorf(`the loader doesn't cgo-process ad hoc packages like %q; see Go issue 11627`, + from.Pkg.Path()) + } + + bp, err := imp.findPackage(to, from.dir, 0) + if err != nil { + return nil, err + } + + // The standard unsafe package is handled specially, + // and has no PackageInfo. + if bp.ImportPath == "unsafe" { + return types.Unsafe, nil + } + + // Look for the package in the cache using its canonical path. + path := bp.ImportPath + imp.importedMu.Lock() + ii := imp.imported[path] + imp.importedMu.Unlock() + if ii == nil { + panic("internal error: unexpected import: " + path) + } + if ii.info != nil { + return ii.info.Pkg, nil + } + + // Import of incomplete package: this indicates a cycle. + fromPath := from.Pkg.Path() + if cycle := imp.findPath(path, fromPath); cycle != nil { + // Normalize cycle: start from alphabetically largest node. + pos, start := -1, "" + for i, s := range cycle { + if pos < 0 || s > start { + pos, start = i, s + } + } + cycle = append(cycle, cycle[:pos]...)[pos:] // rotate cycle to start from largest + cycle = append(cycle, cycle[0]) // add start node to end to show cycliness + return nil, fmt.Errorf("import cycle: %s", strings.Join(cycle, " -> ")) + } + + panic("internal error: import of incomplete (yet acyclic) package: " + fromPath) +} + +// findPackage locates the package denoted by the importPath in the +// specified directory. +func (imp *importer) findPackage(importPath, fromDir string, mode build.ImportMode) (*build.Package, error) { + // We use a non-blocking duplicate-suppressing cache (gopl.io §9.7) + // to avoid holding the lock around FindPackage. + key := findpkgKey{importPath, fromDir, mode} + imp.findpkgMu.Lock() + v, ok := imp.findpkg[key] + if ok { + // cache hit + imp.findpkgMu.Unlock() + + <-v.ready // wait for entry to become ready + } else { + // Cache miss: this goroutine becomes responsible for + // populating the map entry and broadcasting its readiness. + v = &findpkgValue{ready: make(chan struct{})} + imp.findpkg[key] = v + imp.findpkgMu.Unlock() + + ioLimit <- true + v.bp, v.err = imp.conf.FindPackage(imp.conf.build(), importPath, fromDir, mode) + <-ioLimit + + if _, ok := v.err.(*build.NoGoError); ok { + v.err = nil // empty directory is not an error + } + + close(v.ready) // broadcast ready condition + } + return v.bp, v.err +} + +// importAll loads, parses, and type-checks the specified packages in +// parallel and returns their completed importInfos in unspecified order. +// +// fromPath is the package path of the importing package, if it is +// importable, "" otherwise. It is used for cycle detection. +// +// fromDir is the directory containing the import declaration that +// caused these imports. +func (imp *importer) importAll(fromPath, fromDir string, imports map[string]bool, mode build.ImportMode) (infos []*PackageInfo, errors []importError) { + if fromPath != "" { + // We're loading a set of imports. + // + // We must record graph edges from the importing package + // to its dependencies, and check for cycles. + imp.graphMu.Lock() + deps, ok := imp.graph[fromPath] + if !ok { + deps = make(map[string]bool) + imp.graph[fromPath] = deps + } + for importPath := range imports { + deps[importPath] = true + } + imp.graphMu.Unlock() + } + + var pending []*importInfo + for importPath := range imports { + if fromPath != "" { + if cycle := imp.findPath(importPath, fromPath); cycle != nil { + // Cycle-forming import: we must not check it + // since it would deadlock. + if trace { + fmt.Fprintf(os.Stderr, "import cycle: %q\n", cycle) + } + continue + } + } + bp, err := imp.findPackage(importPath, fromDir, mode) + if err != nil { + errors = append(errors, importError{ + path: importPath, + err: err, + }) + continue + } + pending = append(pending, imp.startLoad(bp)) + } + + for _, ii := range pending { + ii.awaitCompletion() + infos = append(infos, ii.info) + } + + return infos, errors +} + +// findPath returns an arbitrary path from 'from' to 'to' in the import +// graph, or nil if there was none. +func (imp *importer) findPath(from, to string) []string { + imp.graphMu.Lock() + defer imp.graphMu.Unlock() + + seen := make(map[string]bool) + var search func(stack []string, importPath string) []string + search = func(stack []string, importPath string) []string { + if !seen[importPath] { + seen[importPath] = true + stack = append(stack, importPath) + if importPath == to { + return stack + } + for x := range imp.graph[importPath] { + if p := search(stack, x); p != nil { + return p + } + } + } + return nil + } + return search(make([]string, 0, 20), from) +} + +// startLoad initiates the loading, parsing and type-checking of the +// specified package and its dependencies, if it has not already begun. +// +// It returns an importInfo, not necessarily in a completed state. The +// caller must call awaitCompletion() before accessing its info field. +// +// startLoad is concurrency-safe and idempotent. +func (imp *importer) startLoad(bp *build.Package) *importInfo { + path := bp.ImportPath + imp.importedMu.Lock() + ii, ok := imp.imported[path] + if !ok { + ii = &importInfo{path: path, complete: make(chan struct{})} + imp.imported[path] = ii + go func() { + info := imp.load(bp) + ii.Complete(info) + }() + } + imp.importedMu.Unlock() + + return ii +} + +// load implements package loading by parsing Go source files +// located by go/build. +func (imp *importer) load(bp *build.Package) *PackageInfo { + info := imp.newPackageInfo(bp.ImportPath, bp.Dir) + info.Importable = true + files, errs := imp.conf.parsePackageFiles(bp, 'g') + for _, err := range errs { + info.appendError(err) + } + + imp.addFiles(info, files, true) + + imp.progMu.Lock() + imp.prog.importMap[bp.ImportPath] = info.Pkg + imp.progMu.Unlock() + + return info +} + +// addFiles adds and type-checks the specified files to info, loading +// their dependencies if needed. The order of files determines the +// package initialization order. It may be called multiple times on the +// same package. Errors are appended to the info.Errors field. +// +// cycleCheck determines whether the imports within files create +// dependency edges that should be checked for potential cycles. +func (imp *importer) addFiles(info *PackageInfo, files []*ast.File, cycleCheck bool) { + // Ensure the dependencies are loaded, in parallel. + var fromPath string + if cycleCheck { + fromPath = info.Pkg.Path() + } + // TODO(adonovan): opt: make the caller do scanImports. + // Callers with a build.Package can skip it. + imp.importAll(fromPath, info.dir, scanImports(files), 0) + + if trace { + fmt.Fprintf(os.Stderr, "%s: start %q (%d)\n", + time.Since(imp.start), info.Pkg.Path(), len(files)) + } + + // Don't call checker.Files on Unsafe, even with zero files, + // because it would mutate the package, which is a global. + if info.Pkg == types.Unsafe { + if len(files) > 0 { + panic(`"unsafe" package contains unexpected files`) + } + } else { + // Ignore the returned (first) error since we + // already collect them all in the PackageInfo. + info.checker.Files(files) + info.Files = append(info.Files, files...) + } + + if imp.conf.AfterTypeCheck != nil { + imp.conf.AfterTypeCheck(info, files) + } + + if trace { + fmt.Fprintf(os.Stderr, "%s: stop %q\n", + time.Since(imp.start), info.Pkg.Path()) + } +} + +func (imp *importer) newPackageInfo(path, dir string) *PackageInfo { + var pkg *types.Package + if path == "unsafe" { + pkg = types.Unsafe + } else { + pkg = types.NewPackage(path, "") + } + info := &PackageInfo{ + Pkg: pkg, + Info: types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), + Uses: make(map[*ast.Ident]types.Object), + Implicits: make(map[ast.Node]types.Object), + Instances: make(map[*ast.Ident]types.Instance), + Scopes: make(map[ast.Node]*types.Scope), + Selections: make(map[*ast.SelectorExpr]*types.Selection), + }, + errorFunc: imp.conf.TypeChecker.Error, + dir: dir, + } + versions.InitFileVersions(&info.Info) + + // Copy the types.Config so we can vary it across PackageInfos. + tc := imp.conf.TypeChecker + tc.IgnoreFuncBodies = false + if f := imp.conf.TypeCheckFuncBodies; f != nil { + tc.IgnoreFuncBodies = !f(path) + } + tc.Importer = closure{imp, info} + tc.Error = info.appendError // appendError wraps the user's Error function + + info.checker = types.NewChecker(&tc, imp.conf.fset(), pkg, &info.Info) + imp.progMu.Lock() + imp.prog.AllPackages[pkg] = info + imp.progMu.Unlock() + return info +} + +type closure struct { + imp *importer + info *PackageInfo +} + +func (c closure) Import(to string) (*types.Package, error) { return c.imp.doImport(c.info, to) } diff --git a/vendor/golang.org/x/tools/go/loader/util.go b/vendor/golang.org/x/tools/go/loader/util.go new file mode 100644 index 0000000..3a80aca --- /dev/null +++ b/vendor/golang.org/x/tools/go/loader/util.go @@ -0,0 +1,123 @@ +// Copyright 2013 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 loader + +import ( + "go/ast" + "go/build" + "go/parser" + "go/token" + "io" + "os" + "strconv" + "sync" + + "golang.org/x/tools/go/buildutil" +) + +// We use a counting semaphore to limit +// the number of parallel I/O calls per process. +var ioLimit = make(chan bool, 10) + +// parseFiles parses the Go source files within directory dir and +// returns the ASTs of the ones that could be at least partially parsed, +// along with a list of I/O and parse errors encountered. +// +// I/O is done via ctxt, which may specify a virtual file system. +// displayPath is used to transform the filenames attached to the ASTs. +func parseFiles(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, files []string, mode parser.Mode) ([]*ast.File, []error) { + if displayPath == nil { + displayPath = func(path string) string { return path } + } + var wg sync.WaitGroup + n := len(files) + parsed := make([]*ast.File, n) + errors := make([]error, n) + for i, file := range files { + if !buildutil.IsAbsPath(ctxt, file) { + file = buildutil.JoinPath(ctxt, dir, file) + } + wg.Add(1) + go func(i int, file string) { + ioLimit <- true // wait + defer func() { + wg.Done() + <-ioLimit // signal + }() + var rd io.ReadCloser + var err error + if ctxt.OpenFile != nil { + rd, err = ctxt.OpenFile(file) + } else { + rd, err = os.Open(file) + } + if err != nil { + errors[i] = err // open failed + return + } + + // ParseFile may return both an AST and an error. + parsed[i], errors[i] = parser.ParseFile(fset, displayPath(file), rd, mode) + rd.Close() + }(i, file) + } + wg.Wait() + + // Eliminate nils, preserving order. + var o int + for _, f := range parsed { + if f != nil { + parsed[o] = f + o++ + } + } + parsed = parsed[:o] + + o = 0 + for _, err := range errors { + if err != nil { + errors[o] = err + o++ + } + } + errors = errors[:o] + + return parsed, errors +} + +// scanImports returns the set of all import paths from all +// import specs in the specified files. +func scanImports(files []*ast.File) map[string]bool { + imports := make(map[string]bool) + for _, f := range files { + for _, decl := range f.Decls { + if decl, ok := decl.(*ast.GenDecl); ok && decl.Tok == token.IMPORT { + for _, spec := range decl.Specs { + spec := spec.(*ast.ImportSpec) + + // NB: do not assume the program is well-formed! + path, err := strconv.Unquote(spec.Path.Value) + if err != nil { + continue // quietly ignore the error + } + if path == "C" { + continue // skip pseudopackage + } + imports[path] = true + } + } + } + } + return imports +} + +// ---------- Internal helpers ---------- + +// TODO(adonovan): make this a method: func (*token.File) Contains(token.Pos) +func tokenFileContainsPos(f *token.File, pos token.Pos) bool { + p := int(pos) + base := f.Base() + return base <= p && p < base+f.Size() +} diff --git a/vendor/golang.org/x/tools/internal/versions/constraint.go b/vendor/golang.org/x/tools/internal/versions/constraint.go new file mode 100644 index 0000000..179063d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/constraint.go @@ -0,0 +1,13 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package versions + +import "go/build/constraint" + +// ConstraintGoVersion is constraint.GoVersion (if built with go1.21+). +// Otherwise nil. +// +// Deprecate once x/tools is after go1.21. +var ConstraintGoVersion func(x constraint.Expr) string diff --git a/vendor/golang.org/x/tools/internal/versions/constraint_go121.go b/vendor/golang.org/x/tools/internal/versions/constraint_go121.go new file mode 100644 index 0000000..3801140 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/constraint_go121.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.21 +// +build go1.21 + +package versions + +import "go/build/constraint" + +func init() { + ConstraintGoVersion = constraint.GoVersion +} diff --git a/vendor/golang.org/x/tools/internal/versions/features.go b/vendor/golang.org/x/tools/internal/versions/features.go new file mode 100644 index 0000000..b53f178 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/features.go @@ -0,0 +1,43 @@ +// 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 versions + +// This file contains predicates for working with file versions to +// decide when a tool should consider a language feature enabled. + +// GoVersions that features in x/tools can be gated to. +const ( + Go1_18 = "go1.18" + Go1_19 = "go1.19" + Go1_20 = "go1.20" + Go1_21 = "go1.21" + Go1_22 = "go1.22" +) + +// Future is an invalid unknown Go version sometime in the future. +// Do not use directly with Compare. +const Future = "" + +// AtLeast reports whether the file version v comes after a Go release. +// +// Use this predicate to enable a behavior once a certain Go release +// has happened (and stays enabled in the future). +func AtLeast(v, release string) bool { + if v == Future { + return true // an unknown future version is always after y. + } + return Compare(Lang(v), Lang(release)) >= 0 +} + +// Before reports whether the file version v is strictly before a Go release. +// +// Use this predicate to disable a behavior once a certain Go release +// has happened (and stays enabled in the future). +func Before(v, release string) bool { + if v == Future { + return false // an unknown future version happens after y. + } + return Compare(Lang(v), Lang(release)) < 0 +} diff --git a/vendor/golang.org/x/tools/internal/versions/gover.go b/vendor/golang.org/x/tools/internal/versions/gover.go new file mode 100644 index 0000000..bbabcd2 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/gover.go @@ -0,0 +1,172 @@ +// 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. + +// This is a fork of internal/gover for use by x/tools until +// go1.21 and earlier are no longer supported by x/tools. + +package versions + +import "strings" + +// A gover is a parsed Go gover: major[.Minor[.Patch]][kind[pre]] +// The numbers are the original decimal strings to avoid integer overflows +// and since there is very little actual math. (Probably overflow doesn't matter in practice, +// but at the time this code was written, there was an existing test that used +// go1.99999999999, which does not fit in an int on 32-bit platforms. +// The "big decimal" representation avoids the problem entirely.) +type gover struct { + major string // decimal + minor string // decimal or "" + patch string // decimal or "" + kind string // "", "alpha", "beta", "rc" + pre string // decimal or "" +} + +// compare returns -1, 0, or +1 depending on whether +// x < y, x == y, or x > y, interpreted as toolchain versions. +// The versions x and y must not begin with a "go" prefix: just "1.21" not "go1.21". +// Malformed versions compare less than well-formed versions and equal to each other. +// The language version "1.21" compares less than the release candidate and eventual releases "1.21rc1" and "1.21.0". +func compare(x, y string) int { + vx := parse(x) + vy := parse(y) + + if c := cmpInt(vx.major, vy.major); c != 0 { + return c + } + if c := cmpInt(vx.minor, vy.minor); c != 0 { + return c + } + if c := cmpInt(vx.patch, vy.patch); c != 0 { + return c + } + if c := strings.Compare(vx.kind, vy.kind); c != 0 { // "" < alpha < beta < rc + return c + } + if c := cmpInt(vx.pre, vy.pre); c != 0 { + return c + } + return 0 +} + +// lang returns the Go language version. For example, lang("1.2.3") == "1.2". +func lang(x string) string { + v := parse(x) + if v.minor == "" || v.major == "1" && v.minor == "0" { + return v.major + } + return v.major + "." + v.minor +} + +// isValid reports whether the version x is valid. +func isValid(x string) bool { + return parse(x) != gover{} +} + +// parse parses the Go version string x into a version. +// It returns the zero version if x is malformed. +func parse(x string) gover { + var v gover + + // Parse major version. + var ok bool + v.major, x, ok = cutInt(x) + if !ok { + return gover{} + } + if x == "" { + // Interpret "1" as "1.0.0". + v.minor = "0" + v.patch = "0" + return v + } + + // Parse . before minor version. + if x[0] != '.' { + return gover{} + } + + // Parse minor version. + v.minor, x, ok = cutInt(x[1:]) + if !ok { + return gover{} + } + if x == "" { + // Patch missing is same as "0" for older versions. + // Starting in Go 1.21, patch missing is different from explicit .0. + if cmpInt(v.minor, "21") < 0 { + v.patch = "0" + } + return v + } + + // Parse patch if present. + if x[0] == '.' { + v.patch, x, ok = cutInt(x[1:]) + if !ok || x != "" { + // Note that we are disallowing prereleases (alpha, beta, rc) for patch releases here (x != ""). + // Allowing them would be a bit confusing because we already have: + // 1.21 < 1.21rc1 + // But a prerelease of a patch would have the opposite effect: + // 1.21.3rc1 < 1.21.3 + // We've never needed them before, so let's not start now. + return gover{} + } + return v + } + + // Parse prerelease. + i := 0 + for i < len(x) && (x[i] < '0' || '9' < x[i]) { + if x[i] < 'a' || 'z' < x[i] { + return gover{} + } + i++ + } + if i == 0 { + return gover{} + } + v.kind, x = x[:i], x[i:] + if x == "" { + return v + } + v.pre, x, ok = cutInt(x) + if !ok || x != "" { + return gover{} + } + + return v +} + +// cutInt scans the leading decimal number at the start of x to an integer +// and returns that value and the rest of the string. +func cutInt(x string) (n, rest string, ok bool) { + i := 0 + for i < len(x) && '0' <= x[i] && x[i] <= '9' { + i++ + } + if i == 0 || x[0] == '0' && i != 1 { // no digits or unnecessary leading zero + return "", "", false + } + return x[:i], x[i:], true +} + +// cmpInt returns cmp.Compare(x, y) interpreting x and y as decimal numbers. +// (Copied from golang.org/x/mod/semver's compareInt.) +func cmpInt(x, y string) int { + if x == y { + return 0 + } + if len(x) < len(y) { + return -1 + } + if len(x) > len(y) { + return +1 + } + if x < y { + return -1 + } else { + return +1 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain.go b/vendor/golang.org/x/tools/internal/versions/toolchain.go new file mode 100644 index 0000000..377bf7a --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package versions + +// toolchain is maximum version (<1.22) that the go toolchain used +// to build the current tool is known to support. +// +// When a tool is built with >=1.22, the value of toolchain is unused. +// +// x/tools does not support building with go <1.18. So we take this +// as the minimum possible maximum. +var toolchain string = Go1_18 diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go new file mode 100644 index 0000000..f65beed --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go119.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.19 +// +build go1.19 + +package versions + +func init() { + if Compare(toolchain, Go1_19) < 0 { + toolchain = Go1_19 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go new file mode 100644 index 0000000..1a9efa1 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go120.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.20 +// +build go1.20 + +package versions + +func init() { + if Compare(toolchain, Go1_20) < 0 { + toolchain = Go1_20 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go b/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go new file mode 100644 index 0000000..b7ef216 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/toolchain_go121.go @@ -0,0 +1,14 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.21 +// +build go1.21 + +package versions + +func init() { + if Compare(toolchain, Go1_21) < 0 { + toolchain = Go1_21 + } +} diff --git a/vendor/golang.org/x/tools/internal/versions/types.go b/vendor/golang.org/x/tools/internal/versions/types.go new file mode 100644 index 0000000..562eef2 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/types.go @@ -0,0 +1,19 @@ +// 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 versions + +import ( + "go/types" +) + +// GoVersion returns the Go version of the type package. +// It returns zero if no version can be determined. +func GoVersion(pkg *types.Package) string { + // TODO(taking): x/tools can call GoVersion() [from 1.21] after 1.25. + if pkg, ok := any(pkg).(interface{ GoVersion() string }); ok { + return pkg.GoVersion() + } + return "" +} diff --git a/vendor/golang.org/x/tools/internal/versions/types_go121.go b/vendor/golang.org/x/tools/internal/versions/types_go121.go new file mode 100644 index 0000000..b4345d3 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/types_go121.go @@ -0,0 +1,30 @@ +// 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 !go1.22 +// +build !go1.22 + +package versions + +import ( + "go/ast" + "go/types" +) + +// FileVersion returns a language version (<=1.21) derived from runtime.Version() +// or an unknown future version. +func FileVersion(info *types.Info, file *ast.File) string { + // In x/tools built with Go <= 1.21, we do not have Info.FileVersions + // available. We use a go version derived from the toolchain used to + // compile the tool by default. + // This will be <= go1.21. We take this as the maximum version that + // this tool can support. + // + // There are no features currently in x/tools that need to tell fine grained + // differences for versions <1.22. + return toolchain +} + +// InitFileVersions is a noop when compiled with this Go version. +func InitFileVersions(*types.Info) {} diff --git a/vendor/golang.org/x/tools/internal/versions/types_go122.go b/vendor/golang.org/x/tools/internal/versions/types_go122.go new file mode 100644 index 0000000..aac5db6 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/types_go122.go @@ -0,0 +1,41 @@ +// 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 go1.22 +// +build go1.22 + +package versions + +import ( + "go/ast" + "go/types" +) + +// FileVersion returns a file's Go version. +// The reported version is an unknown Future version if a +// version cannot be determined. +func FileVersion(info *types.Info, file *ast.File) string { + // In tools built with Go >= 1.22, the Go version of a file + // follow a cascades of sources: + // 1) types.Info.FileVersion, which follows the cascade: + // 1.a) file version (ast.File.GoVersion), + // 1.b) the package version (types.Config.GoVersion), or + // 2) is some unknown Future version. + // + // File versions require a valid package version to be provided to types + // in Config.GoVersion. Config.GoVersion is either from the package's module + // or the toolchain (go run). This value should be provided by go/packages + // or unitchecker.Config.GoVersion. + if v := info.FileVersions[file]; IsValid(v) { + return v + } + // Note: we could instead return runtime.Version() [if valid]. + // This would act as a max version on what a tool can support. + return Future +} + +// InitFileVersions initializes info to record Go versions for Go files. +func InitFileVersions(info *types.Info) { + info.FileVersions = make(map[*ast.File]string) +} diff --git a/vendor/golang.org/x/tools/internal/versions/versions.go b/vendor/golang.org/x/tools/internal/versions/versions.go new file mode 100644 index 0000000..8d1f745 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/versions/versions.go @@ -0,0 +1,57 @@ +// 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 versions + +import ( + "strings" +) + +// Note: If we use build tags to use go/versions when go >=1.22, +// we run into go.dev/issue/53737. Under some operations users would see an +// import of "go/versions" even if they would not compile the file. +// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include +// For this reason, this library just a clone of go/versions for the moment. + +// Lang returns the Go language version for version x. +// If x is not a valid version, Lang returns the empty string. +// For example: +// +// Lang("go1.21rc2") = "go1.21" +// Lang("go1.21.2") = "go1.21" +// Lang("go1.21") = "go1.21" +// Lang("go1") = "go1" +// Lang("bad") = "" +// Lang("1.21") = "" +func Lang(x string) string { + v := lang(stripGo(x)) + if v == "" { + return "" + } + return x[:2+len(v)] // "go"+v without allocation +} + +// Compare returns -1, 0, or +1 depending on whether +// x < y, x == y, or x > y, interpreted as Go versions. +// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". +// Invalid versions, including the empty string, compare less than +// valid versions and equal to each other. +// The language version "go1.21" compares less than the +// release candidate and eventual releases "go1.21rc1" and "go1.21.0". +// Custom toolchain suffixes are ignored during comparison: +// "go1.21.0" and "go1.21.0-bigcorp" are equal. +func Compare(x, y string) int { return compare(stripGo(x), stripGo(y)) } + +// IsValid reports whether the version x is valid. +func IsValid(x string) bool { return isValid(stripGo(x)) } + +// stripGo converts from a "go1.21" version to a "1.21" version. +// If v does not start with "go", stripGo returns the empty string (a known invalid version). +func stripGo(v string) string { + v, _, _ = strings.Cut(v, "-") // strip -bigcorp suffix. + if len(v) < 2 || v[:2] != "go" { + return "" + } + return v[2:] +} diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml new file mode 100644 index 0000000..7348c50 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/.travis.yml @@ -0,0 +1,17 @@ +language: go + +go: + - "1.4.x" + - "1.5.x" + - "1.6.x" + - "1.7.x" + - "1.8.x" + - "1.9.x" + - "1.10.x" + - "1.11.x" + - "1.12.x" + - "1.13.x" + - "1.14.x" + - "tip" + +go_import_path: gopkg.in/yaml.v2 diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/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/gopkg.in/yaml.v2/LICENSE.libyaml b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml new file mode 100644 index 0000000..8da58fb --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/gopkg.in/yaml.v2/NOTICE b/vendor/gopkg.in/yaml.v2/NOTICE new file mode 100644 index 0000000..866d74a --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +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/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md new file mode 100644 index 0000000..b50c6e8 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/README.md @@ -0,0 +1,133 @@ +# YAML support for the Go language + +Introduction +------------ + +The yaml package enables Go programs to comfortably encode and decode YAML +values. It was developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a +pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) +C library to parse and generate YAML data quickly and reliably. + +Compatibility +------------- + +The yaml package supports most of YAML 1.1 and 1.2, including support for +anchors, tags, map merging, etc. Multi-document unmarshalling is not yet +implemented, and base-60 floats from YAML 1.1 are purposefully not +supported since they're a poor design and are gone in YAML 1.2. + +Installation and usage +---------------------- + +The import path for the package is *gopkg.in/yaml.v2*. + +To install it, run: + + go get gopkg.in/yaml.v2 + +API documentation +----------------- + +If opened in a browser, the import path itself leads to the API documentation: + + * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) + +API stability +------------- + +The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). + + +License +------- + +The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. + + +Example +------- + +```Go +package main + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +// Note: struct fields must be public in order for unmarshal to +// correctly populate the data. +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go new file mode 100644 index 0000000..acf7140 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/apic.go @@ -0,0 +1,744 @@ +package yaml + +import ( + "io" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +var disableLineWrapping = false + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } + if disableLineWrapping { + emitter.best_width = -1 + } +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go new file mode 100644 index 0000000..129bc2a --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/decode.go @@ -0,0 +1,815 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "io" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + // For an alias node, alias holds the resolved alias. + alias *node + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node + doneInit bool +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + if len(b) == 0 { + b = []byte{'\n'} + } + yaml_parser_set_input_string(&p.parser, b) + return &p +} + +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } + return p.event.typ +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + p.init() + switch p.peek() { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + p.event.typ.String()) + } +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.expect(yaml_DOCUMENT_START_EVENT) + n.children = append(n.children, p.parse()) + p.expect(yaml_DOCUMENT_END_EVENT) + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + n.alias = p.doc.anchors[n.value] + if n.alias == nil { + failf("unknown anchor '%s' referenced", n.value) + } + p.expect(yaml_ALIAS_EVENT) + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.expect(yaml_SCALAR_EVENT) + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.expect(yaml_SEQUENCE_END_EVENT) + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.expect(yaml_MAPPING_END_EVENT) + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[*node]bool + mapType reflect.Type + terrors []string + strict bool + + decodeCount int + aliasCount int + aliasDepth int +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) +) + +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} + d.aliases = make(map[*node]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +const ( + // 400,000 decode operations is ~500kb of dense object declarations, or + // ~5kb of dense object declarations with 10000% alias expansion + alias_ratio_range_low = 400000 + + // 4,000,000 decode operations is ~5MB of dense object declarations, or + // ~4.5MB of dense object declarations with 10% alias expansion + alias_ratio_range_high = 4000000 + + // alias_ratio_range is the range over which we scale allowed alias ratios + alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low) +) + +func allowedAliasRatio(decodeCount int) float64 { + switch { + case decodeCount <= alias_ratio_range_low: + // allow 99% to come from alias expansion for small-to-medium documents + return 0.99 + case decodeCount >= alias_ratio_range_high: + // allow 10% to come from alias expansion for very large documents + return 0.10 + default: + // scale smoothly from 99% down to 10% over the range. + // this maps to 396,000 - 400,000 allowed alias-driven decodes over the range. + // 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps). + return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range) + } +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + d.decodeCount++ + if d.aliasDepth > 0 { + d.aliasCount++ + } + if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) { + failf("document contains excessive aliasing") + } + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n] = true + d.aliasDepth++ + good = d.unmarshal(n.alias, out) + d.aliasDepth-- + delete(d.aliases, n) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) bool { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == yaml_BINARY_TAG { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.value) + } + err := u.UnmarshalText(text) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + return true + } + if resolved != nil { + out.SetString(n.value) + return true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else if tag == yaml_TIMESTAMP_TAG { + // It looks like a timestamp but for backward compatibility + // reasons we set it as a string, so that code that unmarshals + // timestamp-like values into interface{} will continue to + // see a string and not a time.Time. + // TODO(v3) Drop this. + out.Set(reflect.ValueOf(n.value)) + } else { + out.Set(reflect.ValueOf(resolved)) + } + return true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + return true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + return true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + return true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + return true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + return true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + return true + case int64: + out.SetFloat(float64(resolved)) + return true + case uint64: + out.SetFloat(float64(resolved)) + return true + case float64: + out.SetFloat(resolved) + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + return true + } + } + d.terror(n, tag, out) + return false +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + d.setMapIndex(n.children[i+1], out, k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) { + if d.strict && out.MapIndex(k) != zeroValue { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface())) + return + } + out.SetMapIndex(k, v) +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + var doneFields []bool + if d.strict { + doneFields = make([]bool, len(sinfo.FieldsList)) + } + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + if d.strict { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + d.setMapIndex(n.children[i+1], inlineMap, name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type())) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + if n.alias != nil && n.alias.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + if ni.alias != nil && ni.alias.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go new file mode 100644 index 0000000..a1c2cc5 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/emitterc.go @@ -0,0 +1,1685 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an anchor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go new file mode 100644 index 0000000..0ee738e --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/encode.go @@ -0,0 +1,390 @@ +package yaml + +import ( + "encoding" + "fmt" + "io" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// jsonNumber is the interface of the encoding/json.Number datatype. +// Repeating the interface here avoids a dependency on encoding/json, and also +// supports other libraries like jsoniter, which use a similar datatype with +// the same interface. Detecting this interface is useful when dealing with +// structures containing json.Number, which is a string under the hood. The +// encoder should prefer the use of Int64(), Float64() and string(), in that +// order, when encoding this type. +type jsonNumber interface { + Float64() (float64, error) + Int64() (int64, error) + String() string +} + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + // doneInit holds whether the initial stream_start_event has been + // emitted. + doneInit bool +} + +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) + e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { + e.emitter.open_ended = false + yaml_stream_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + e.must(yaml_emitter_emit(&e.emitter, &e.event)) +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { + e.nilv() + return + } + iface := in.Interface() + switch m := iface.(type) { + case jsonNumber: + integer, err := m.Int64() + if err == nil { + // In this case the json.Number is a valid int64 + in = reflect.ValueOf(integer) + break + } + float, err := m.Float64() + if err == nil { + // In this case the json.Number is a valid float64 + in = reflect.ValueOf(float) + break + } + // fallback case - no number could be obtained + in = reflect.ValueOf(m.String()) + case time.Time, *time.Time: + // Although time.Time implements TextMarshaler, + // we don't want to treat it as a string for YAML + // purposes because YAML has special support for + // timestamps. + case Marshaler: + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + case encoding.TextMarshaler: + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return + } + switch in.Kind() { + case reflect.Interface: + e.marshal(tag, in.Elem()) + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.Type() == ptrTimeType { + e.timev(tag, in.Elem()) + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + if in.Type() == timeType { + e.timev(tag, in) + } else { + e.structv(tag, in) + } + case reflect.Slice, reflect.Array: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) + e.emit() + f() + yaml_mapping_end_event_initialize(&e.event) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } + if tag != "" { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = yaml_BINARY_TAG + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s) + } + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): + style = yaml_LITERAL_SCALAR_STYLE + case canUsePlain: + style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go new file mode 100644 index 0000000..81d05df --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/parserc.go @@ -0,0 +1,1095 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go new file mode 100644 index 0000000..7c1f5fa --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/readerc.go @@ -0,0 +1,412 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go new file mode 100644 index 0000000..4120e0c --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -0,0 +1,258 @@ +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + case yaml_FLOAT_TAG: + if rtag == yaml_INT_TAG { + switch v := out.(type) { + case int64: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + case int: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + } + } + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == yaml_TIMESTAMP_TAG { + t, ok := parseTimestamp(in) + if ok { + return yaml_TIMESTAMP_TAG, t + } + } + + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) + if err == nil { + if true || intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + } + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + return yaml_STR_TAG, in +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go new file mode 100644 index 0000000..0b9bb60 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -0,0 +1,2711 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + if parser.tokens_head != len(parser.tokens) { + // If queue is non-empty, check if any potential simple key may + // occupy the head position. + head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed] + if !ok { + break + } else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok { + return false + } else if !valid { + break + } + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { + if !simple_key.possible { + return false, true + } + + // The 1.2 specification says: + // + // "If the ? indicator is omitted, parsing needs to see past the + // implicit key to recognize it as such. To limit the amount of + // lookahead required, the “:” indicator must appear at most 1024 + // Unicode characters beyond the start of the key. In addition, the key + // is restricted to a single line." + // + if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { + // Check if the potential simple key to be removed is required. + if simple_key.required { + return false, yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + return false, true + } + return true, true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + } + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1 + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number) + } + return true +} + +// max_flow_level limits the flow_level +const max_flow_level = 10000 + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ + possible: false, + required: false, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + }) + + // Increase the flow level. + parser.flow_level++ + if parser.flow_level > max_flow_level { + return yaml_parser_set_scanner_error(parser, + "while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_flow_level)) + } + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + last := len(parser.simple_keys) - 1 + delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number) + parser.simple_keys = parser.simple_keys[:last] + } + return true +} + +// max_indents limits the indents stack size +const max_indents = 10000 + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + if len(parser.indents) > max_indents { + return yaml_parser_set_scanner_error(parser, + "while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark, + fmt.Sprintf("exceeded max depth of %d", max_indents)) + } + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + parser.simple_keys_by_tok = make(map[int]int) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + + } else if valid { + + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + delete(parser.simple_keys_by_tok, simple_key.token_number) + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab characters that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violates indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go new file mode 100644 index 0000000..4c45e66 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/sorter.go @@ -0,0 +1,113 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + return bl + } + var ai, bi int + var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go new file mode 100644 index 0000000..a2dde60 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/writerc.go @@ -0,0 +1,26 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true +} diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go new file mode 100644 index 0000000..3081388 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -0,0 +1,478 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/go-yaml/yaml +// +package yaml + +import ( + "errors" + "fmt" + "io" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members, or mapping +// keys that are duplicates, will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +// A Decoder reads and decodes YAML values from an input stream. +type Decoder struct { + strict bool + parser *parser +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// SetStrict sets whether strict decoding behaviour is enabled when +// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict. +func (dec *Decoder) SetStrict(strict bool) { + dec.strict = strict +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder(dec.strict) + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder(strict) + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be excluded if IsZero returns true. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + finfo.Id = len(fieldsList) + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + info.Id = len(fieldsList) + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + } + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func isZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} + +// FutureLineWrap globally disables line wrapping when encoding long strings. +// This is a temporary and thus deprecated method introduced to faciliate +// migration towards v3, which offers more control of line lengths on +// individual encodings, and has a default matching the behavior introduced +// by this function. +// +// The default formatting of v2 was erroneously changed in v2.3.0 and reverted +// in v2.4.0, at which point this function was introduced to help migration. +func FutureLineWrap() { + disableLineWrapping = true +} diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go new file mode 100644 index 0000000..f6a9c8e --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlh.go @@ -0,0 +1,739 @@ +package yaml + +import ( + "fmt" + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_writer io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/gopkg.in/yaml.v2/yamlprivateh.go new file mode 100644 index 0000000..8110ce3 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +} diff --git a/vendor/maunium.net/go/mautrix/.editorconfig b/vendor/maunium.net/go/mautrix/.editorconfig index 21d312a..1a167e7 100644 --- a/vendor/maunium.net/go/mautrix/.editorconfig +++ b/vendor/maunium.net/go/mautrix/.editorconfig @@ -10,3 +10,6 @@ insert_final_newline = true [*.{yaml,yml}] indent_style = space + +[provisioning.yaml] +indent_size = 2 diff --git a/vendor/maunium.net/go/mautrix/CHANGELOG.md b/vendor/maunium.net/go/mautrix/CHANGELOG.md index feaedcd..819f69d 100644 --- a/vendor/maunium.net/go/mautrix/CHANGELOG.md +++ b/vendor/maunium.net/go/mautrix/CHANGELOG.md @@ -1,3 +1,22 @@ +## v0.20.0 (2024-08-16) + +* Bumped minimum Go version to 1.22. +* *(bridgev2)* Added more features and fixed bugs. +* *(event)* Added types for [MSC4144]: Per-message profiles. +* *(federation)* Added implementation of server name resolution and a basic + client for making federation requests. +* *(crypto/ssss)* Changed recovery key/passphrase verify functions to take the + key ID as a parameter to ensure it's correctly set even if the key metadata + wasn't fetched via `GetKeyData`. +* *(format/mdext)* Added goldmark extensions for single-character bold, italic + and strikethrough parsing (as in `*foo*` -> **foo**, `_foo_` -> _foo_ and + `~foo~` -> ~~foo~~) +* *(format)* Changed `RenderMarkdown` et al to always include `m.mentions` in + returned content. The mention list is filled with matrix.to URLs from the + input by default. + +[MSC4144]: https://github.com/matrix-org/matrix-spec-proposals/pull/4144 + ## v0.19.0 (2024-07-16) * Renamed `master` branch to `main`. diff --git a/vendor/maunium.net/go/mautrix/client.go b/vendor/maunium.net/go/mautrix/client.go index 997d736..750e3c2 100644 --- a/vendor/maunium.net/go/mautrix/client.go +++ b/vendor/maunium.net/go/mautrix/client.go @@ -569,7 +569,9 @@ func ParseErrorResponse(req *http.Request, res *http.Response) ([]byte, error) { return contents, err } - respErr := &RespError{} + respErr := &RespError{ + StatusCode: res.StatusCode, + } if _ = json.Unmarshal(contents, respErr); respErr.ErrCode == "" { respErr = nil } @@ -1932,6 +1934,12 @@ func (cli *Client) SetReadMarkers(ctx context.Context, roomID id.RoomID, content return } +func (cli *Client) SetBeeperInboxState(ctx context.Context, roomID id.RoomID, content *ReqSetBeeperInboxState) (err error) { + urlPath := cli.BuildClientURL("unstable", "com.beeper.inbox", "user", cli.UserID, "rooms", roomID, "inbox_state") + _, err = cli.MakeRequest(ctx, http.MethodPut, urlPath, content, nil) + return +} + func (cli *Client) AddTag(ctx context.Context, roomID id.RoomID, tag event.RoomTag, order float64) error { return cli.AddTagWithCustomData(ctx, roomID, tag, &event.TagMetadata{ Order: json.Number(strconv.FormatFloat(order, 'e', -1, 64)), diff --git a/vendor/maunium.net/go/mautrix/crypto/attachment/attachments.go b/vendor/maunium.net/go/mautrix/crypto/attachment/attachments.go index 5f1e3be..344db4f 100644 --- a/vendor/maunium.net/go/mautrix/crypto/attachment/attachments.go +++ b/vendor/maunium.net/go/mautrix/crypto/attachment/attachments.go @@ -137,6 +137,8 @@ type encryptingReader struct { isDecrypting bool } +var _ io.ReadSeekCloser = (*encryptingReader)(nil) + func (r *encryptingReader) Seek(offset int64, whence int) (int64, error) { if r.closed { return 0, ReaderClosed @@ -195,7 +197,7 @@ func (r *encryptingReader) Close() (err error) { // The Close() method of the returned io.ReadCloser must be called for the SHA256 hash // in the EncryptedFile struct to be updated. The metadata is not valid before the hash // is filled. -func (ef *EncryptedFile) EncryptStream(reader io.Reader) io.ReadCloser { +func (ef *EncryptedFile) EncryptStream(reader io.Reader) io.ReadSeekCloser { ef.decodeKeys(false) block, _ := aes.NewCipher(ef.decoded.key[:]) return &encryptingReader{ @@ -250,7 +252,7 @@ func (ef *EncryptedFile) DecryptInPlace(data []byte) error { // // The Close call will validate the hash and return an error if it doesn't match. // In this case, the written data should be considered compromised and should not be used further. -func (ef *EncryptedFile) DecryptStream(reader io.Reader) io.ReadCloser { +func (ef *EncryptedFile) DecryptStream(reader io.Reader) io.ReadSeekCloser { block, _ := aes.NewCipher(ef.decoded.key[:]) return &encryptingReader{ stream: cipher.NewCTR(block, ef.decoded.iv[:]), diff --git a/vendor/maunium.net/go/mautrix/crypto/backup/encryptedsessiondata.go b/vendor/maunium.net/go/mautrix/crypto/backup/encryptedsessiondata.go index 37b0a6c..ec551db 100644 --- a/vendor/maunium.net/go/mautrix/crypto/backup/encryptedsessiondata.go +++ b/vendor/maunium.net/go/mautrix/crypto/backup/encryptedsessiondata.go @@ -47,28 +47,22 @@ func calculateEncryptionParameters(sharedSecret []byte) (key, macKey, iv []byte, return encryptionParams[:32], encryptionParams[32:64], encryptionParams[64:], nil } -// calculateCompatMAC calculates the MAC for compatibility with Olm and -// Vodozemac which do not actually write the ciphertext when computing the MAC. +// calculateCompatMAC calculates the MAC as described in step 5 of according to +// [Section 11.12.3.2.2] of the Spec which was updated in spec version 1.10 to +// reflect what is actually implemented in libolm and Vodozemac. // -// Deprecated: Use [calculateMAC] instead. +// Libolm implemented the MAC functionality incorrectly. The MAC is computed +// over an empty string rather than the ciphertext. Vodozemac implemented this +// functionality the same way as libolm for compatibility. In version 1.10 of +// the spec, the description of step 5 was updated to reflect the de-facto +// standard of libolm and Vodozemac. +// +// [Section 11.12.3.2.2]: https://spec.matrix.org/v1.11/client-server-api/#backup-algorithm-mmegolm_backupv1curve25519-aes-sha2 func calculateCompatMAC(macKey []byte) []byte { hash := hmac.New(sha256.New, macKey) return hash.Sum(nil)[:8] } -// calculateMAC calculates the MAC as described in step 5 of according to -// [Section 11.12.3.2.2] of the Spec. -// -// [Section 11.12.3.2.2]: https://spec.matrix.org/v1.9/client-server-api/#backup-algorithm-mmegolm_backupv1curve25519-aes-sha2 -func calculateMAC(macKey, ciphertext []byte) []byte { - hash := hmac.New(sha256.New, macKey) - _, err := hash.Write(ciphertext) - if err != nil { - panic(err) - } - return hash.Sum(nil)[:8] -} - // EncryptSessionData encrypts the given session data with the given recovery // key as defined in [Section 11.12.3.2.2 of the Spec]. // diff --git a/vendor/maunium.net/go/mautrix/crypto/cryptohelper/cryptohelper.go b/vendor/maunium.net/go/mautrix/crypto/cryptohelper/cryptohelper.go index a006501..7bb7037 100644 --- a/vendor/maunium.net/go/mautrix/crypto/cryptohelper/cryptohelper.go +++ b/vendor/maunium.net/go/mautrix/crypto/cryptohelper/cryptohelper.go @@ -351,12 +351,16 @@ func (helper *CryptoHelper) Decrypt(ctx context.Context, evt *event.Event) (*eve } func (helper *CryptoHelper) Encrypt(ctx context.Context, roomID id.RoomID, evtType event.Type, content any) (encrypted *event.EncryptedEventContent, err error) { + return helper.EncryptWithStateKey(ctx, roomID, evtType, nil, content) +} + +func (helper *CryptoHelper) EncryptWithStateKey(ctx context.Context, roomID id.RoomID, evtType event.Type, stateKey *string, content any) (encrypted *event.EncryptedEventContent, err error) { if helper == nil { return nil, fmt.Errorf("crypto helper is nil") } helper.lock.RLock() defer helper.lock.RUnlock() - encrypted, err = helper.mach.EncryptMegolmEvent(ctx, roomID, evtType, content) + encrypted, err = helper.mach.EncryptMegolmEventWithStateKey(ctx, roomID, evtType, stateKey, content) if err != nil { if !errors.Is(err, crypto.SessionExpired) && err != crypto.NoGroupSession && !errors.Is(err, crypto.SessionNotShared) { return @@ -371,7 +375,7 @@ func (helper *CryptoHelper) Encrypt(ctx context.Context, roomID id.RoomID, evtTy err = fmt.Errorf("failed to get room member list: %w", err) } else if err = helper.mach.ShareGroupSession(ctx, roomID, users); err != nil { err = fmt.Errorf("failed to share group session: %w", err) - } else if encrypted, err = helper.mach.EncryptMegolmEvent(ctx, roomID, evtType, content); err != nil { + } else if encrypted, err = helper.mach.EncryptMegolmEventWithStateKey(ctx, roomID, evtType, stateKey, content); err != nil { err = fmt.Errorf("failed to encrypt event after re-sharing group session: %w", err) } } diff --git a/vendor/maunium.net/go/mautrix/crypto/decryptmegolm.go b/vendor/maunium.net/go/mautrix/crypto/decryptmegolm.go index ba2811a..00f99ce 100644 --- a/vendor/maunium.net/go/mautrix/crypto/decryptmegolm.go +++ b/vendor/maunium.net/go/mautrix/crypto/decryptmegolm.go @@ -34,9 +34,10 @@ var ( ) type megolmEvent struct { - RoomID id.RoomID `json:"room_id"` - Type event.Type `json:"type"` - Content event.Content `json:"content"` + RoomID id.RoomID `json:"room_id"` + Type event.Type `json:"type"` + StateKey *string `json:"state_key"` + Content event.Content `json:"content"` } var ( @@ -148,7 +149,12 @@ func (mach *OlmMachine) DecryptMegolmEvent(ctx context.Context, evt *event.Event } else if megolmEvt.RoomID != encryptionRoomID { return nil, WrongRoom } - megolmEvt.Type.Class = evt.Type.Class + if evt.StateKey != nil && megolmEvt.StateKey != nil { + megolmEvt.Type.Class = event.StateEventType + } else { + megolmEvt.Type.Class = evt.Type.Class + megolmEvt.StateKey = nil + } log = log.With().Str("decrypted_event_type", megolmEvt.Type.Repr()).Logger() err = megolmEvt.Content.ParseRaw(megolmEvt.Type) if err != nil { @@ -163,6 +169,7 @@ func (mach *OlmMachine) DecryptMegolmEvent(ctx context.Context, evt *event.Event return &event.Event{ Sender: evt.Sender, Type: megolmEvt.Type, + StateKey: megolmEvt.StateKey, Timestamp: evt.Timestamp, ID: evt.ID, RoomID: evt.RoomID, diff --git a/vendor/maunium.net/go/mautrix/crypto/encryptmegolm.go b/vendor/maunium.net/go/mautrix/crypto/encryptmegolm.go index d8d5c7c..93fe640 100644 --- a/vendor/maunium.net/go/mautrix/crypto/encryptmegolm.go +++ b/vendor/maunium.net/go/mautrix/crypto/encryptmegolm.go @@ -52,9 +52,10 @@ func getMentions(content interface{}) *event.Mentions { } type rawMegolmEvent struct { - RoomID id.RoomID `json:"room_id"` - Type event.Type `json:"type"` - Content interface{} `json:"content"` + RoomID id.RoomID `json:"room_id"` + Type event.Type `json:"type"` + StateKey *string `json:"state_key,omitempty"` + Content interface{} `json:"content"` } // IsShareError returns true if the error is caused by the lack of an outgoing megolm session and can be solved with OlmMachine.ShareGroupSession @@ -83,6 +84,14 @@ func ParseMegolmMessageIndex(ciphertext []byte) (uint, error) { // If you use the event.Content struct, make sure you pass a pointer to the struct, // as JSON serialization will not work correctly otherwise. func (mach *OlmMachine) EncryptMegolmEvent(ctx context.Context, roomID id.RoomID, evtType event.Type, content interface{}) (*event.EncryptedEventContent, error) { + return mach.EncryptMegolmEventWithStateKey(ctx, roomID, evtType, nil, content) +} + +// EncryptMegolmEventWithStateKey encrypts data with the m.megolm.v1.aes-sha2 algorithm. +// +// If you use the event.Content struct, make sure you pass a pointer to the struct, +// as JSON serialization will not work correctly otherwise. +func (mach *OlmMachine) EncryptMegolmEventWithStateKey(ctx context.Context, roomID id.RoomID, evtType event.Type, stateKey *string, content interface{}) (*event.EncryptedEventContent, error) { mach.megolmEncryptLock.Lock() defer mach.megolmEncryptLock.Unlock() session, err := mach.CryptoStore.GetOutboundGroupSession(ctx, roomID) @@ -92,15 +101,17 @@ func (mach *OlmMachine) EncryptMegolmEvent(ctx context.Context, roomID id.RoomID return nil, NoGroupSession } plaintext, err := json.Marshal(&rawMegolmEvent{ - RoomID: roomID, - Type: evtType, - Content: content, + RoomID: roomID, + Type: evtType, + StateKey: stateKey, + Content: content, }) if err != nil { return nil, err } log := mach.machOrContextLog(ctx).With(). Str("event_type", evtType.Type). + Any("state_key", stateKey). Str("room_id", roomID.String()). Str("session_id", session.ID().String()). Uint("expected_index", session.Internal.MessageIndex()). diff --git a/vendor/maunium.net/go/mautrix/crypto/keysharing.go b/vendor/maunium.net/go/mautrix/crypto/keysharing.go index 362dee8..4d3b6f7 100644 --- a/vendor/maunium.net/go/mautrix/crypto/keysharing.go +++ b/vendor/maunium.net/go/mautrix/crypto/keysharing.go @@ -33,6 +33,7 @@ var ( KeyShareRejectBlacklisted = KeyShareRejection{event.RoomKeyWithheldBlacklisted, "You have been blacklisted by this device"} KeyShareRejectUnverified = KeyShareRejection{event.RoomKeyWithheldUnverified, "This device does not share keys to unverified devices"} KeyShareRejectOtherUser = KeyShareRejection{event.RoomKeyWithheldUnauthorized, "This device does not share keys to other users"} + KeyShareRejectNotRecipient = KeyShareRejection{event.RoomKeyWithheldUnauthorized, "You were not in the original recipient list for that session, or that session didn't originate from this device"} KeyShareRejectUnavailable = KeyShareRejection{event.RoomKeyWithheldUnavailable, "Requested session ID not found on this device"} KeyShareRejectInternalError = KeyShareRejection{event.RoomKeyWithheldUnavailable, "An internal error occurred while trying to share the requested session"} ) @@ -249,13 +250,18 @@ func (mach *OlmMachine) sendToOneDevice(ctx context.Context, userID id.UserID, d func (mach *OlmMachine) defaultAllowKeyShare(ctx context.Context, device *id.Device, evt event.RequestedKeyInfo) *KeyShareRejection { log := mach.machOrContextLog(ctx) if mach.Client.UserID != device.UserID { + if mach.DisableSharedGroupSessionTracking { + log.Debug().Msg("Rejecting key request from another user as recipient list tracking is disabled") + return &KeyShareRejectOtherUser + } isShared, err := mach.CryptoStore.IsOutboundGroupSessionShared(ctx, device.UserID, device.IdentityKey, evt.SessionID) if err != nil { log.Err(err).Msg("Rejecting key request due to internal error when checking session sharing") return &KeyShareRejectNoResponse } else if !isShared { + // TODO differentiate session not shared with requester vs session not created by this device? log.Debug().Msg("Rejecting key request for unshared session") - return &KeyShareRejectOtherUser + return &KeyShareRejectNotRecipient } log.Debug().Msg("Accepting key request for shared session") return nil @@ -337,6 +343,9 @@ func (mach *OlmMachine) HandleRoomKeyRequest(ctx context.Context, sender id.User mach.rejectKeyRequest(ctx, KeyShareRejectInternalError, device, content.Body) return } + if igs.ForwardingChains == nil { + igs.ForwardingChains = []string{} + } forwardedRoomKey := event.Content{ Parsed: &event.ForwardedRoomKeyEventContent{ diff --git a/vendor/maunium.net/go/mautrix/crypto/sql_store.go b/vendor/maunium.net/go/mautrix/crypto/sql_store.go index d93ee0c..a8ccab2 100644 --- a/vendor/maunium.net/go/mautrix/crypto/sql_store.go +++ b/vendor/maunium.net/go/mautrix/crypto/sql_store.go @@ -624,7 +624,7 @@ func (store *SQLCryptoStore) ValidateMessageIndex(ctx context.Context, senderKey Str("expected_event_id", expectedEventID.String()). Int64("expected_timestamp", expectedTimestamp). Int64("actual_timestamp", timestamp). - Msg("Failed to validate that message index wasn't duplicated") + Msg("Rejecting different event with duplicate message index") return false, nil } return true, nil diff --git a/vendor/maunium.net/go/mautrix/crypto/ssss/client.go b/vendor/maunium.net/go/mautrix/crypto/ssss/client.go index 0cfdd24..e30925d 100644 --- a/vendor/maunium.net/go/mautrix/crypto/ssss/client.go +++ b/vendor/maunium.net/go/mautrix/crypto/ssss/client.go @@ -53,7 +53,7 @@ func (mach *Machine) SetDefaultKeyID(ctx context.Context, keyID string) error { // GetKeyData gets the details about the given key ID. func (mach *Machine) GetKeyData(ctx context.Context, keyID string) (keyData *KeyMetadata, err error) { - keyData = &KeyMetadata{id: keyID} + keyData = &KeyMetadata{} err = mach.Client.GetAccountData(ctx, fmt.Sprintf("%s.%s", event.AccountDataSecretStorageKey.Type, keyID), keyData) return } diff --git a/vendor/maunium.net/go/mautrix/crypto/ssss/meta.go b/vendor/maunium.net/go/mautrix/crypto/ssss/meta.go index e752cf0..210bcdc 100644 --- a/vendor/maunium.net/go/mautrix/crypto/ssss/meta.go +++ b/vendor/maunium.net/go/mautrix/crypto/ssss/meta.go @@ -17,8 +17,6 @@ import ( // KeyMetadata represents server-side metadata about a SSSS key. The metadata can be used to get // the actual SSSS key from a passphrase or recovery key. type KeyMetadata struct { - id string - Name string `json:"name"` Algorithm Algorithm `json:"algorithm"` @@ -31,7 +29,7 @@ type KeyMetadata struct { } // VerifyRecoveryKey verifies that the given passphrase is valid and returns the computed SSSS key. -func (kd *KeyMetadata) VerifyPassphrase(passphrase string) (*Key, error) { +func (kd *KeyMetadata) VerifyPassphrase(keyID, passphrase string) (*Key, error) { ssssKey, err := kd.Passphrase.GetKey(passphrase) if err != nil { return nil, err @@ -40,15 +38,15 @@ func (kd *KeyMetadata) VerifyPassphrase(passphrase string) (*Key, error) { } return &Key{ - ID: kd.id, + ID: keyID, Key: ssssKey, Metadata: kd, }, nil } // VerifyRecoveryKey verifies that the given recovery key is valid and returns the decoded SSSS key. -func (kd *KeyMetadata) VerifyRecoveryKey(recoverKey string) (*Key, error) { - ssssKey := utils.DecodeBase58RecoveryKey(recoverKey) +func (kd *KeyMetadata) VerifyRecoveryKey(keyID, recoveryKey string) (*Key, error) { + ssssKey := utils.DecodeBase58RecoveryKey(recoveryKey) if ssssKey == nil { return nil, ErrInvalidRecoveryKey } else if !kd.VerifyKey(ssssKey) { @@ -56,7 +54,7 @@ func (kd *KeyMetadata) VerifyRecoveryKey(recoverKey string) (*Key, error) { } return &Key{ - ID: kd.id, + ID: keyID, Key: ssssKey, Metadata: kd, }, nil diff --git a/vendor/maunium.net/go/mautrix/error.go b/vendor/maunium.net/go/mautrix/error.go index bcd568d..acd9089 100644 --- a/vendor/maunium.net/go/mautrix/error.go +++ b/vendor/maunium.net/go/mautrix/error.go @@ -25,43 +25,43 @@ import ( // } var ( // Forbidden access, e.g. joining a room without permission, failed login. - MForbidden = RespError{ErrCode: "M_FORBIDDEN"} + MForbidden = RespError{ErrCode: "M_FORBIDDEN", StatusCode: http.StatusForbidden} // Unrecognized request, e.g. the endpoint does not exist or is not implemented. - MUnrecognized = RespError{ErrCode: "M_UNRECOGNIZED"} + MUnrecognized = RespError{ErrCode: "M_UNRECOGNIZED", StatusCode: http.StatusNotFound} // The access token specified was not recognised. - MUnknownToken = RespError{ErrCode: "M_UNKNOWN_TOKEN"} + MUnknownToken = RespError{ErrCode: "M_UNKNOWN_TOKEN", StatusCode: http.StatusUnauthorized} // No access token was specified for the request. - MMissingToken = RespError{ErrCode: "M_MISSING_TOKEN"} + MMissingToken = RespError{ErrCode: "M_MISSING_TOKEN", StatusCode: http.StatusUnauthorized} // Request contained valid JSON, but it was malformed in some way, e.g. missing required keys, invalid values for keys. - MBadJSON = RespError{ErrCode: "M_BAD_JSON"} + MBadJSON = RespError{ErrCode: "M_BAD_JSON", StatusCode: http.StatusBadRequest} // Request did not contain valid JSON. - MNotJSON = RespError{ErrCode: "M_NOT_JSON"} + MNotJSON = RespError{ErrCode: "M_NOT_JSON", StatusCode: http.StatusBadRequest} // No resource was found for this request. - MNotFound = RespError{ErrCode: "M_NOT_FOUND"} + MNotFound = RespError{ErrCode: "M_NOT_FOUND", StatusCode: http.StatusNotFound} // Too many requests have been sent in a short period of time. Wait a while then try again. - MLimitExceeded = RespError{ErrCode: "M_LIMIT_EXCEEDED"} + MLimitExceeded = RespError{ErrCode: "M_LIMIT_EXCEEDED", StatusCode: http.StatusTooManyRequests} // The user ID associated with the request has been deactivated. // Typically for endpoints that prove authentication, such as /login. MUserDeactivated = RespError{ErrCode: "M_USER_DEACTIVATED"} // Encountered when trying to register a user ID which has been taken. - MUserInUse = RespError{ErrCode: "M_USER_IN_USE"} + MUserInUse = RespError{ErrCode: "M_USER_IN_USE", StatusCode: http.StatusBadRequest} // Encountered when trying to register a user ID which is not valid. - MInvalidUsername = RespError{ErrCode: "M_INVALID_USERNAME"} + MInvalidUsername = RespError{ErrCode: "M_INVALID_USERNAME", StatusCode: http.StatusBadRequest} // Sent when the room alias given to the createRoom API is already in use. - MRoomInUse = RespError{ErrCode: "M_ROOM_IN_USE"} + MRoomInUse = RespError{ErrCode: "M_ROOM_IN_USE", StatusCode: http.StatusBadRequest} // The state change requested cannot be performed, such as attempting to unban a user who is not banned. MBadState = RespError{ErrCode: "M_BAD_STATE"} // The request or entity was too large. - MTooLarge = RespError{ErrCode: "M_TOO_LARGE"} + MTooLarge = RespError{ErrCode: "M_TOO_LARGE", StatusCode: http.StatusRequestEntityTooLarge} // The resource being requested is reserved by an application service, or the application service making the request has not created the resource. - MExclusive = RespError{ErrCode: "M_EXCLUSIVE"} + MExclusive = RespError{ErrCode: "M_EXCLUSIVE", StatusCode: http.StatusBadRequest} // The client's request to create a room used a room version that the server does not support. MUnsupportedRoomVersion = RespError{ErrCode: "M_UNSUPPORTED_ROOM_VERSION"} // The client attempted to join a room that has a version the server does not support. // Inspect the room_version property of the error response for the room's version. MIncompatibleRoomVersion = RespError{ErrCode: "M_INCOMPATIBLE_ROOM_VERSION"} // The client specified a parameter that has the wrong value. - MInvalidParam = RespError{ErrCode: "M_INVALID_PARAM"} + MInvalidParam = RespError{ErrCode: "M_INVALID_PARAM", StatusCode: http.StatusBadRequest} MURLNotSet = RespError{ErrCode: "M_URL_NOT_SET"} MBadStatus = RespError{ErrCode: "M_BAD_STATUS"} @@ -117,7 +117,9 @@ func (e HTTPError) Unwrap() error { type RespError struct { ErrCode string Err string - ExtraData map[string]interface{} + ExtraData map[string]any + + StatusCode int } func (e *RespError) UnmarshalJSON(data []byte) error { diff --git a/vendor/maunium.net/go/mautrix/event/accountdata.go b/vendor/maunium.net/go/mautrix/event/accountdata.go index 2d37e0b..30ca35a 100644 --- a/vendor/maunium.net/go/mautrix/event/accountdata.go +++ b/vendor/maunium.net/go/mautrix/event/accountdata.go @@ -9,6 +9,7 @@ package event import ( "encoding/json" "strings" + "time" "maunium.net/go/mautrix/id" ) @@ -85,3 +86,22 @@ type IgnoredUser struct { type MarkedUnreadEventContent struct { Unread bool `json:"unread"` } + +type BeeperMuteEventContent struct { + MutedUntil int64 `json:"muted_until,omitempty"` +} + +func (bmec *BeeperMuteEventContent) IsMuted() bool { + return bmec.MutedUntil < 0 || (bmec.MutedUntil > 0 && bmec.GetMutedUntilTime().After(time.Now())) +} + +var MutedForever = time.Date(9999, 12, 31, 23, 59, 59, 999999999, time.UTC) + +func (bmec *BeeperMuteEventContent) GetMutedUntilTime() time.Time { + if bmec.MutedUntil < 0 { + return MutedForever + } else if bmec.MutedUntil > 0 { + return time.UnixMilli(bmec.MutedUntil) + } + return time.Time{} +} diff --git a/vendor/maunium.net/go/mautrix/event/content.go b/vendor/maunium.net/go/mautrix/event/content.go index c24de56..e0026e9 100644 --- a/vendor/maunium.net/go/mautrix/event/content.go +++ b/vendor/maunium.net/go/mautrix/event/content.go @@ -55,6 +55,7 @@ var TypeMap = map[Type]reflect.Type{ AccountDataFullyRead: reflect.TypeOf(FullyReadEventContent{}), AccountDataIgnoredUserList: reflect.TypeOf(IgnoredUserListEventContent{}), AccountDataMarkedUnread: reflect.TypeOf(MarkedUnreadEventContent{}), + AccountDataBeeperMute: reflect.TypeOf(BeeperMuteEventContent{}), EphemeralEventTyping: reflect.TypeOf(TypingEventContent{}), EphemeralEventReceipt: reflect.TypeOf(ReceiptEventContent{}), @@ -242,6 +243,15 @@ func init() { gob.Register(&RoomKeyWithheldEventContent{}) } +func CastOrDefault[T any](content *Content) *T { + casted, ok := content.Parsed.(*T) + if ok { + return casted + } + casted2, _ := content.Parsed.(T) + return &casted2 +} + // Helper cast functions below func (content *Content) AsMember() *MemberEventContent { diff --git a/vendor/maunium.net/go/mautrix/event/message.go b/vendor/maunium.net/go/mautrix/event/message.go index 003f1fc..3c6edfd 100644 --- a/vendor/maunium.net/go/mautrix/event/message.go +++ b/vendor/maunium.net/go/mautrix/event/message.go @@ -131,10 +131,11 @@ type MessageEventContent struct { replyFallbackRemoved bool - MessageSendRetry *BeeperRetryMetadata `json:"com.beeper.message_send_retry,omitempty"` - BeeperGalleryImages []*MessageEventContent `json:"com.beeper.gallery.images,omitempty"` - BeeperGalleryCaption string `json:"com.beeper.gallery.caption,omitempty"` - BeeperGalleryCaptionHTML string `json:"com.beeper.gallery.caption_html,omitempty"` + MessageSendRetry *BeeperRetryMetadata `json:"com.beeper.message_send_retry,omitempty"` + BeeperGalleryImages []*MessageEventContent `json:"com.beeper.gallery.images,omitempty"` + BeeperGalleryCaption string `json:"com.beeper.gallery.caption,omitempty"` + BeeperGalleryCaptionHTML string `json:"com.beeper.gallery.caption_html,omitempty"` + BeeperPerMessageProfile *BeeperPerMessageProfile `json:"com.beeper.per_message_profile,omitempty"` BeeperLinkPreviews []*BeeperLinkPreview `json:"com.beeper.linkpreviews,omitempty"` diff --git a/vendor/maunium.net/go/mautrix/event/powerlevels.go b/vendor/maunium.net/go/mautrix/event/powerlevels.go index 1882f1e..2f4d457 100644 --- a/vendor/maunium.net/go/mautrix/event/powerlevels.go +++ b/vendor/maunium.net/go/mautrix/event/powerlevels.go @@ -134,10 +134,20 @@ func (pl *PowerLevelsEventContent) SetUserLevel(userID id.UserID, level int) { } } -func (pl *PowerLevelsEventContent) EnsureUserLevel(userID id.UserID, level int) bool { - existingLevel := pl.GetUserLevel(userID) +func (pl *PowerLevelsEventContent) EnsureUserLevel(target id.UserID, level int) bool { + return pl.EnsureUserLevelAs("", target, level) +} + +func (pl *PowerLevelsEventContent) EnsureUserLevelAs(actor, target id.UserID, level int) bool { + existingLevel := pl.GetUserLevel(target) + if actor != "" { + actorLevel := pl.GetUserLevel(actor) + if actorLevel <= existingLevel || actorLevel < level { + return false + } + } if existingLevel != level { - pl.SetUserLevel(userID, level) + pl.SetUserLevel(target, level) return true } return false @@ -170,7 +180,17 @@ func (pl *PowerLevelsEventContent) SetEventLevel(eventType Type, level int) { } func (pl *PowerLevelsEventContent) EnsureEventLevel(eventType Type, level int) bool { + return pl.EnsureEventLevelAs("", eventType, level) +} + +func (pl *PowerLevelsEventContent) EnsureEventLevelAs(actor id.UserID, eventType Type, level int) bool { existingLevel := pl.GetEventLevel(eventType) + if actor != "" { + actorLevel := pl.GetUserLevel(actor) + if existingLevel > actorLevel || level > actorLevel { + return false + } + } if existingLevel != level { pl.SetEventLevel(eventType, level) return true diff --git a/vendor/maunium.net/go/mautrix/event/profile.go b/vendor/maunium.net/go/mautrix/event/profile.go new file mode 100644 index 0000000..6dc4314 --- /dev/null +++ b/vendor/maunium.net/go/mautrix/event/profile.go @@ -0,0 +1,10 @@ +package event + +import "maunium.net/go/mautrix/id" + +type BeeperPerMessageProfile struct { + ID string `json:"id"` + Displayname string `json:"displayname,omitempty"` + AvatarURL *id.ContentURIString `json:"avatar_url,omitempty"` + AvatarFile *EncryptedFileInfo `json:"avatar_file,omitempty"` +} diff --git a/vendor/maunium.net/go/mautrix/event/relations.go b/vendor/maunium.net/go/mautrix/event/relations.go index ecd7a95..ea40cc0 100644 --- a/vendor/maunium.net/go/mautrix/event/relations.go +++ b/vendor/maunium.net/go/mautrix/event/relations.go @@ -73,7 +73,7 @@ func (rel *RelatesTo) GetReplyTo() id.EventID { } func (rel *RelatesTo) GetNonFallbackReplyTo() id.EventID { - if rel != nil && rel.InReplyTo != nil && !rel.IsFallingBack { + if rel != nil && rel.InReplyTo != nil && (rel.Type != RelThread || !rel.IsFallingBack) { return rel.InReplyTo.EventID } return "" diff --git a/vendor/maunium.net/go/mautrix/event/state.go b/vendor/maunium.net/go/mautrix/event/state.go index c47a91c..6a067ca 100644 --- a/vendor/maunium.net/go/mautrix/event/state.go +++ b/vendor/maunium.net/go/mautrix/event/state.go @@ -167,7 +167,8 @@ type BridgeEventContent struct { Network *BridgeInfoSection `json:"network,omitempty"` Channel BridgeInfoSection `json:"channel"` - BeeperRoomType string `json:"com.beeper.room_type,omitempty"` + BeeperRoomType string `json:"com.beeper.room_type,omitempty"` + BeeperRoomTypeV2 string `json:"com.beeper.room_type.v2,omitempty"` } type SpaceChildEventContent struct { diff --git a/vendor/maunium.net/go/mautrix/event/type.go b/vendor/maunium.net/go/mautrix/event/type.go index e5c6498..162e2ce 100644 --- a/vendor/maunium.net/go/mautrix/event/type.go +++ b/vendor/maunium.net/go/mautrix/event/type.go @@ -242,6 +242,7 @@ var ( AccountDataFullyRead = Type{"m.fully_read", AccountDataEventType} AccountDataIgnoredUserList = Type{"m.ignored_user_list", AccountDataEventType} AccountDataMarkedUnread = Type{"m.marked_unread", AccountDataEventType} + AccountDataBeeperMute = Type{"com.beeper.mute", AccountDataEventType} AccountDataSecretStorageDefaultKey = Type{"m.secret_storage.default_key", AccountDataEventType} AccountDataSecretStorageKey = Type{"m.secret_storage.key", AccountDataEventType} diff --git a/vendor/maunium.net/go/mautrix/format/htmlparser.go b/vendor/maunium.net/go/mautrix/format/htmlparser.go index 8ddd881..d099e8a 100644 --- a/vendor/maunium.net/go/mautrix/format/htmlparser.go +++ b/vendor/maunium.net/go/mautrix/format/htmlparser.go @@ -15,6 +15,7 @@ import ( "golang.org/x/net/html" + "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" ) @@ -66,9 +67,13 @@ type ColorConverter func(text, fg, bg string, ctx Context) string type CodeBlockConverter func(code, language string, ctx Context) string type PillConverter func(displayname, mxid, eventID string, ctx Context) string -func DefaultPillConverter(displayname, mxid, eventID string, _ Context) string { +const ContextKeyMentions = "_mentions" + +func DefaultPillConverter(displayname, mxid, eventID string, ctx Context) string { switch { case len(mxid) == 0, mxid[0] == '@': + existingMentions, _ := ctx.ReturnData[ContextKeyMentions].([]id.UserID) + ctx.ReturnData[ContextKeyMentions] = append(existingMentions, id.UserID(mxid)) // User link, always just show the displayname return displayname case len(eventID) > 0: @@ -417,11 +422,9 @@ func HTMLToText(html string) string { }).Parse(html, NewContext(context.TODO())) } -// HTMLToMarkdown converts Matrix HTML into markdown with the default settings. -// -// Currently, the only difference to HTMLToText is how links are formatted. -func HTMLToMarkdown(html string) string { - return (&HTMLParser{ +func HTMLToMarkdownAndMentions(html string) (parsed string, mentions *event.Mentions) { + ctx := NewContext(context.TODO()) + parsed = (&HTMLParser{ TabsToSpaces: 4, Newline: "\n", HorizontalLine: "\n---\n", @@ -432,5 +435,18 @@ func HTMLToMarkdown(html string) string { } return fmt.Sprintf("[%s](%s)", text, href) }, - }).Parse(html, NewContext(context.TODO())) + }).Parse(html, ctx) + mentionList, _ := ctx.ReturnData[ContextKeyMentions].([]id.UserID) + mentions = &event.Mentions{ + UserIDs: mentionList, + } + return +} + +// HTMLToMarkdown converts Matrix HTML into markdown with the default settings. +// +// Currently, the only difference to HTMLToText is how links are formatted. +func HTMLToMarkdown(html string) string { + parsed, _ := HTMLToMarkdownAndMentions(html) + return parsed } diff --git a/vendor/maunium.net/go/mautrix/format/markdown.go b/vendor/maunium.net/go/mautrix/format/markdown.go index fa2a8e8..11f9f68 100644 --- a/vendor/maunium.net/go/mautrix/format/markdown.go +++ b/vendor/maunium.net/go/mautrix/format/markdown.go @@ -50,18 +50,20 @@ func RenderMarkdownCustom(text string, renderer goldmark.Markdown) event.Message } func HTMLToContent(html string) event.MessageEventContent { - text := HTMLToMarkdown(html) + text, mentions := HTMLToMarkdownAndMentions(html) if html != text { return event.MessageEventContent{ FormattedBody: html, Format: event.FormatHTML, MsgType: event.MsgText, Body: text, + Mentions: mentions, } } return event.MessageEventContent{ - MsgType: event.MsgText, - Body: text, + MsgType: event.MsgText, + Body: text, + Mentions: &event.Mentions{}, } } @@ -79,8 +81,9 @@ func RenderMarkdown(text string, allowMarkdown, allowHTML bool) event.MessageEve return HTMLToContent(htmlBody) } else { return event.MessageEventContent{ - MsgType: event.MsgText, - Body: text, + MsgType: event.MsgText, + Body: text, + Mentions: &event.Mentions{}, } } } diff --git a/vendor/maunium.net/go/mautrix/format/mdext/shortemphasis.go b/vendor/maunium.net/go/mautrix/format/mdext/shortemphasis.go new file mode 100644 index 0000000..6219032 --- /dev/null +++ b/vendor/maunium.net/go/mautrix/format/mdext/shortemphasis.go @@ -0,0 +1,96 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package mdext + +import ( + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" +) + +var ShortEmphasis goldmark.Extender = &shortEmphasisExtender{} + +type shortEmphasisExtender struct{} + +func (s *shortEmphasisExtender) Extend(m goldmark.Markdown) { + m.Parser().AddOptions(parser.WithInlineParsers( + util.Prioritized(&italicsParser{}, 500), + util.Prioritized(&boldParser{}, 500), + )) +} + +type italicsDelimiterProcessor struct{} + +func (p *italicsDelimiterProcessor) IsDelimiter(b byte) bool { + return b == '_' +} + +func (p *italicsDelimiterProcessor) CanOpenCloser(opener, closer *parser.Delimiter) bool { + return opener.Char == closer.Char +} + +func (p *italicsDelimiterProcessor) OnMatch(consumes int) ast.Node { + return ast.NewEmphasis(1) +} + +var defaultItalicsDelimiterProcessor = &italicsDelimiterProcessor{} + +type italicsParser struct{} + +func (s *italicsParser) Trigger() []byte { + return []byte{'_'} +} + +func (s *italicsParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node { + before := block.PrecendingCharacter() + line, segment := block.PeekLine() + node := parser.ScanDelimiter(line, before, 1, defaultItalicsDelimiterProcessor) + if node == nil || node.OriginalLength > 1 || before == '_' { + return nil + } + node.Segment = segment.WithStop(segment.Start + node.OriginalLength) + block.Advance(node.OriginalLength) + pc.PushDelimiter(node) + return node +} + +type boldDelimiterProcessor struct{} + +func (p *boldDelimiterProcessor) IsDelimiter(b byte) bool { + return b == '*' +} + +func (p *boldDelimiterProcessor) CanOpenCloser(opener, closer *parser.Delimiter) bool { + return opener.Char == closer.Char +} + +func (p *boldDelimiterProcessor) OnMatch(consumes int) ast.Node { + return ast.NewEmphasis(2) +} + +var defaultBoldDelimiterProcessor = &boldDelimiterProcessor{} + +type boldParser struct{} + +func (s *boldParser) Trigger() []byte { + return []byte{'*'} +} + +func (s *boldParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node { + before := block.PrecendingCharacter() + line, segment := block.PeekLine() + node := parser.ScanDelimiter(line, before, 1, defaultBoldDelimiterProcessor) + if node == nil || node.OriginalLength > 1 || before == '*' { + return nil + } + node.Segment = segment.WithStop(segment.Start + node.OriginalLength) + block.Advance(node.OriginalLength) + pc.PushDelimiter(node) + return node +} diff --git a/vendor/maunium.net/go/mautrix/format/mdext/shortstrike.go b/vendor/maunium.net/go/mautrix/format/mdext/shortstrike.go new file mode 100644 index 0000000..00328f2 --- /dev/null +++ b/vendor/maunium.net/go/mautrix/format/mdext/shortstrike.go @@ -0,0 +1,76 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package mdext + +import ( + "github.com/yuin/goldmark" + gast "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/extension/ast" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" +) + +var ShortStrike goldmark.Extender = &shortStrikeExtender{length: 1} +var LongStrike goldmark.Extender = &shortStrikeExtender{length: 2} + +type shortStrikeExtender struct { + length int +} + +func (s *shortStrikeExtender) Extend(m goldmark.Markdown) { + m.Parser().AddOptions(parser.WithInlineParsers( + util.Prioritized(&strikethroughParser{length: s.length}, 500), + )) + m.Renderer().AddOptions(renderer.WithNodeRenderers( + util.Prioritized(extension.NewStrikethroughHTMLRenderer(), 500), + )) +} + +type strikethroughDelimiterProcessor struct{} + +func (p *strikethroughDelimiterProcessor) IsDelimiter(b byte) bool { + return b == '~' +} + +func (p *strikethroughDelimiterProcessor) CanOpenCloser(opener, closer *parser.Delimiter) bool { + return opener.Char == closer.Char +} + +func (p *strikethroughDelimiterProcessor) OnMatch(consumes int) gast.Node { + return ast.NewStrikethrough() +} + +var defaultStrikethroughDelimiterProcessor = &strikethroughDelimiterProcessor{} + +type strikethroughParser struct { + length int +} + +func (s *strikethroughParser) Trigger() []byte { + return []byte{'~'} +} + +func (s *strikethroughParser) Parse(parent gast.Node, block text.Reader, pc parser.Context) gast.Node { + before := block.PrecendingCharacter() + line, segment := block.PeekLine() + node := parser.ScanDelimiter(line, before, 1, defaultStrikethroughDelimiterProcessor) + if node == nil || node.OriginalLength != s.length || before == '~' { + return nil + } + + node.Segment = segment.WithStop(segment.Start + node.OriginalLength) + block.Advance(node.OriginalLength) + pc.PushDelimiter(node) + return node +} + +func (s *strikethroughParser) CloseBlock(parent gast.Node, pc parser.Context) { + // nothing to do +} diff --git a/vendor/maunium.net/go/mautrix/id/contenturi.go b/vendor/maunium.net/go/mautrix/id/contenturi.go index cfd00c3..e6a313f 100644 --- a/vendor/maunium.net/go/mautrix/id/contenturi.go +++ b/vendor/maunium.net/go/mautrix/id/contenturi.go @@ -12,6 +12,7 @@ import ( "encoding/json" "errors" "fmt" + "regexp" "strings" ) @@ -156,3 +157,21 @@ func (uri ContentURI) CUString() ContentURIString { func (uri ContentURI) IsEmpty() bool { return len(uri.Homeserver) == 0 || len(uri.FileID) == 0 } + +var simpleHomeserverRegex = regexp.MustCompile(`^[a-zA-Z0-9.:-]+$`) + +func (uri ContentURI) IsValid() bool { + return IsValidMediaID(uri.FileID) && uri.Homeserver != "" && simpleHomeserverRegex.MatchString(uri.Homeserver) +} + +func IsValidMediaID(mediaID string) bool { + if len(mediaID) == 0 { + return false + } + for _, char := range mediaID { + if (char < 'A' || char > 'Z') && (char < 'a' || char > 'z') && (char < '0' || char > '9') && char != '-' && char != '_' { + return false + } + } + return true +} diff --git a/vendor/maunium.net/go/mautrix/requests.go b/vendor/maunium.net/go/mautrix/requests.go index b6c2f89..f91aaa7 100644 --- a/vendor/maunium.net/go/mautrix/requests.go +++ b/vendor/maunium.net/go/mautrix/requests.go @@ -365,6 +365,17 @@ type ReqSetReadMarkers struct { BeeperFullyReadExtra interface{} `json:"com.beeper.fully_read.extra,omitempty"` } +type BeeperInboxDone struct { + Delta int64 `json:"at_delta"` + AtOrder int64 `json:"at_order"` +} + +type ReqSetBeeperInboxState struct { + MarkedUnread *bool `json:"marked_unread,omitempty"` + Done *BeeperInboxDone `json:"done,omitempty"` + ReadMarkers *ReqSetReadMarkers `json:"read_markers,omitempty"` +} + type ReqSendReceipt struct { ThreadID string `json:"thread_id,omitempty"` } diff --git a/vendor/maunium.net/go/mautrix/sqlstatestore/statestore.go b/vendor/maunium.net/go/mautrix/sqlstatestore/statestore.go index cd94215..0e5c418 100644 --- a/vendor/maunium.net/go/mautrix/sqlstatestore/statestore.go +++ b/vendor/maunium.net/go/mautrix/sqlstatestore/statestore.go @@ -17,6 +17,7 @@ import ( "strings" "github.com/rs/zerolog" + "go.mau.fi/util/confusable" "go.mau.fi/util/dbutil" "maunium.net/go/mautrix/event" @@ -37,6 +38,8 @@ const VersionTableName = "mx_version" type SQLStateStore struct { *dbutil.Database IsBridge bool + + DisableNameDisambiguation bool } func NewSQLStateStore(db *dbutil.Database, log dbutil.DatabaseLogger, isBridge bool) *SQLStateStore { @@ -65,6 +68,7 @@ func (store *SQLStateStore) MarkRegistered(ctx context.Context, userID id.UserID type Member struct { id.UserID event.MemberEventContent + NameSkeleton [32]byte } func (store *SQLStateStore) GetRoomMembers(ctx context.Context, roomID id.RoomID, memberships ...event.Membership) (map[id.UserID]*event.MemberEventContent, error) { @@ -191,13 +195,32 @@ func (store *SQLStateStore) SetMembership(ctx context.Context, roomID id.RoomID, } func (store *SQLStateStore) SetMember(ctx context.Context, roomID id.RoomID, userID id.UserID, member *event.MemberEventContent) error { + var nameSkeleton []byte + if !store.DisableNameDisambiguation && len(member.Displayname) > 0 { + nameSkeletonArr := confusable.SkeletonHash(member.Displayname) + nameSkeleton = nameSkeletonArr[:] + } _, err := store.Exec(ctx, ` - INSERT INTO mx_user_profile (room_id, user_id, membership, displayname, avatar_url) VALUES ($1, $2, $3, $4, $5) - ON CONFLICT (room_id, user_id) DO UPDATE SET membership=excluded.membership, displayname=excluded.displayname, avatar_url=excluded.avatar_url - `, roomID, userID, member.Membership, member.Displayname, member.AvatarURL) + INSERT INTO mx_user_profile (room_id, user_id, membership, displayname, avatar_url, name_skeleton) + VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT (room_id, user_id) DO UPDATE + SET membership=excluded.membership, + displayname=excluded.displayname, + avatar_url=excluded.avatar_url, + name_skeleton=excluded.name_skeleton + `, roomID, userID, member.Membership, member.Displayname, member.AvatarURL, nameSkeleton) return err } +func (store *SQLStateStore) IsConfusableName(ctx context.Context, roomID id.RoomID, currentUser id.UserID, name string) ([]id.UserID, error) { + if store.DisableNameDisambiguation { + return nil, nil + } + skeleton := confusable.SkeletonHash(name) + rows, err := store.Query(ctx, "SELECT user_id FROM mx_user_profile WHERE room_id=$1 AND name_skeleton=$2 AND user_id<>$3", roomID, skeleton[:], currentUser) + return dbutil.NewRowIterWithError(rows, dbutil.ScanSingleColumn[id.UserID], err).AsList() +} + func (store *SQLStateStore) ClearCachedMembers(ctx context.Context, roomID id.RoomID, memberships ...event.Membership) error { query := "DELETE FROM mx_user_profile WHERE room_id=$1" params := make([]any, len(memberships)+1) diff --git a/vendor/maunium.net/go/mautrix/sqlstatestore/v00-latest-revision.sql b/vendor/maunium.net/go/mautrix/sqlstatestore/v00-latest-revision.sql index 41c2b9a..b2bb2ae 100644 --- a/vendor/maunium.net/go/mautrix/sqlstatestore/v00-latest-revision.sql +++ b/vendor/maunium.net/go/mautrix/sqlstatestore/v00-latest-revision.sql @@ -1,4 +1,4 @@ --- v0 -> v5: Latest revision +-- v0 -> v6 (compatible with v3+): Latest revision CREATE TABLE mx_registrations ( user_id TEXT PRIMARY KEY @@ -13,9 +13,15 @@ CREATE TABLE mx_user_profile ( membership membership NOT NULL, displayname TEXT NOT NULL DEFAULT '', avatar_url TEXT NOT NULL DEFAULT '', + + name_skeleton bytea, + PRIMARY KEY (room_id, user_id) ); +CREATE INDEX mx_user_profile_membership_idx ON mx_user_profile (room_id, membership); +CREATE INDEX mx_user_profile_name_skeleton_idx ON mx_user_profile (room_id, name_skeleton); + CREATE TABLE mx_room_state ( room_id TEXT PRIMARY KEY, power_levels jsonb, diff --git a/vendor/maunium.net/go/mautrix/sqlstatestore/v06-displayname-disambiguation.go b/vendor/maunium.net/go/mautrix/sqlstatestore/v06-displayname-disambiguation.go new file mode 100644 index 0000000..d0d1d50 --- /dev/null +++ b/vendor/maunium.net/go/mautrix/sqlstatestore/v06-displayname-disambiguation.go @@ -0,0 +1,55 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package sqlstatestore + +import ( + "context" + + "go.mau.fi/util/confusable" + "go.mau.fi/util/dbutil" + + "maunium.net/go/mautrix/id" +) + +type roomUserName struct { + RoomID id.RoomID + UserID id.UserID + Name string +} + +func init() { + UpgradeTable.Register(-1, 6, 3, "Add disambiguation column for user profiles", dbutil.TxnModeOn, func(ctx context.Context, db *dbutil.Database) error { + _, err := db.Exec(ctx, ` + ALTER TABLE mx_user_profile ADD COLUMN name_skeleton bytea; + CREATE INDEX mx_user_profile_membership_idx ON mx_user_profile (room_id, membership); + CREATE INDEX mx_user_profile_name_skeleton_idx ON mx_user_profile (room_id, name_skeleton); + `) + if err != nil { + return err + } + const ChunkSize = 1000 + const GetEntriesChunkQuery = "SELECT room_id, user_id, displayname FROM mx_user_profile WHERE displayname<>'' LIMIT $1 OFFSET $2" + const SetSkeletonHashQuery = `UPDATE mx_user_profile SET name_skeleton = $3 WHERE room_id = $1 AND user_id = $2` + for offset := 0; ; offset += ChunkSize { + entries, err := dbutil.NewSimpleReflectRowIter[roomUserName](db.Query(ctx, GetEntriesChunkQuery, ChunkSize, offset)).AsList() + if err != nil { + return err + } + for _, entry := range entries { + skel := confusable.SkeletonHash(entry.Name) + _, err = db.Exec(ctx, SetSkeletonHashQuery, entry.RoomID, entry.UserID, skel[:]) + if err != nil { + return err + } + } + if len(entries) < ChunkSize { + break + } + } + return nil + }) +} diff --git a/vendor/maunium.net/go/mautrix/statestore.go b/vendor/maunium.net/go/mautrix/statestore.go index 7b4e2d2..fd8f81e 100644 --- a/vendor/maunium.net/go/mautrix/statestore.go +++ b/vendor/maunium.net/go/mautrix/statestore.go @@ -26,6 +26,7 @@ type StateStore interface { TryGetMember(ctx context.Context, roomID id.RoomID, userID id.UserID) (*event.MemberEventContent, error) SetMembership(ctx context.Context, roomID id.RoomID, userID id.UserID, membership event.Membership) error SetMember(ctx context.Context, roomID id.RoomID, userID id.UserID, member *event.MemberEventContent) error + IsConfusableName(ctx context.Context, roomID id.RoomID, currentUser id.UserID, name string) ([]id.UserID, error) ClearCachedMembers(ctx context.Context, roomID id.RoomID, memberships ...event.Membership) error SetPowerLevels(ctx context.Context, roomID id.RoomID, levels *event.PowerLevelsEventContent) error @@ -151,6 +152,11 @@ func (store *MemoryStateStore) GetMember(ctx context.Context, roomID id.RoomID, return member, err } +func (store *MemoryStateStore) IsConfusableName(ctx context.Context, roomID id.RoomID, currentUser id.UserID, name string) ([]id.UserID, error) { + // TODO implement? + return nil, nil +} + func (store *MemoryStateStore) TryGetMember(_ context.Context, roomID id.RoomID, userID id.UserID) (member *event.MemberEventContent, err error) { store.membersLock.RLock() defer store.membersLock.RUnlock() diff --git a/vendor/maunium.net/go/mautrix/version.go b/vendor/maunium.net/go/mautrix/version.go index d98634e..29c5eb4 100644 --- a/vendor/maunium.net/go/mautrix/version.go +++ b/vendor/maunium.net/go/mautrix/version.go @@ -7,7 +7,7 @@ import ( "strings" ) -const Version = "v0.19.0" +const Version = "v0.20.0" var GoModVersion = "" var Commit = "" diff --git a/vendor/maunium.net/go/mautrix/versions.go b/vendor/maunium.net/go/mautrix/versions.go index 246889c..60eb0f3 100644 --- a/vendor/maunium.net/go/mautrix/versions.go +++ b/vendor/maunium.net/go/mautrix/versions.go @@ -68,6 +68,8 @@ var ( BeeperFeatureRoomYeeting = UnstableFeature{UnstableFlag: "com.beeper.room_yeeting"} BeeperFeatureAutojoinInvites = UnstableFeature{UnstableFlag: "com.beeper.room_create_autojoin_invites"} BeeperFeatureArbitraryProfileMeta = UnstableFeature{UnstableFlag: "com.beeper.arbitrary_profile_meta"} + BeeperFeatureAccountDataMute = UnstableFeature{UnstableFlag: "com.beeper.account_data_mute"} + BeeperFeatureInboxState = UnstableFeature{UnstableFlag: "com.beeper.inbox_state"} ) func (versions *RespVersions) Supports(feature UnstableFeature) bool { diff --git a/vendor/modernc.org/libc/.gitignore b/vendor/modernc.org/libc/.gitignore index ec035d9..0e50e88 100644 --- a/vendor/modernc.org/libc/.gitignore +++ b/vendor/modernc.org/libc/.gitignore @@ -2,3 +2,4 @@ *.zip go.work go.sum +musl-* diff --git a/vendor/modernc.org/libc/Makefile b/vendor/modernc.org/libc/Makefile index 2323d87..a2ff9da 100644 --- a/vendor/modernc.org/libc/Makefile +++ b/vendor/modernc.org/libc/Makefile @@ -32,36 +32,30 @@ download: @if [ ! -f $(TAR) ]; then wget $(URL) ; fi edit: - @touch log @if [ -f "Session.vim" ]; then novim -S & else novim -p Makefile go.mod builder.json & fi editor: - gofmt -l -s -w *.go 2>&1 | tee log-editor - go test -c -o /dev/null 2>&1 | tee -a log-editor - go install -v 2>&1 | tee -a log-editor + gofmt -l -s -w *.go + go test -c -o /dev/null + go install -v go build -o /dev/null generator*.go generate: download mkdir -p $(DIR) || true rm -rf $(DIR)/* - GO_GENERATE_DIR=$(DIR) go run generator*.go 2>&1 | tee log-generate + GO_GENERATE_DIR=$(DIR) go run generator*.go go build -v - # go install github.com/mdempsky/unconvert@latest - go build -v 2>&1 | tee -a log-generate - go test -v -short -count=1 ./... | tee -a log-generate - git status | tee -a log-generate - grep 'TRC\|TODO\|ERRORF\|FAIL' log-generate || true + go test -v -short -count=1 ./... + git status dev: download mkdir -p $(DIR) || true rm -rf $(DIR)/* echo -n > /tmp/ccgo.log - GO_GENERATE_DIR=$(DIR) GO_GENERATE_DEV=1 go run -tags=ccgo.dmesg,ccgo.assert generator*.go 2>&1 | tee log-generate - go build -v | tee -a log-generate - go test -v -short -count=1 ./... | tee -a log-generate - git status | tee -a log-generate - grep 'TRC\|TODO\|ERRORF\|FAIL' log-generate || true - grep 'TRC\|TODO\|ERRORF\|FAIL' /tmp/ccgo.log || true + GO_GENERATE_DIR=$(DIR) GO_GENERATE_DEV=1 go run -tags=ccgo.dmesg,ccgo.assert generator*.go + go build -v + go test -v -short -count=1 ./... + git status membrk-test: echo -n > /tmp/ccgo.log @@ -71,10 +65,7 @@ membrk-test: grep -a 'TRC\|TODO\|ERRORF\|FAIL' log-test || true 2>&1 | tee -a log-test test: - echo -n > /tmp/ccgo.log - touch log-test - cp log-test log-test0 - go test -v -timeout 24h -count=1 2>&1 | tee log-test + go test -v -timeout 24h -count=1 short-test: echo -n > /tmp/ccgo.log diff --git a/vendor/modernc.org/libc/aliases.go b/vendor/modernc.org/libc/aliases.go index 7bc2d98..446174a 100644 --- a/vendor/modernc.org/libc/aliases.go +++ b/vendor/modernc.org/libc/aliases.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/asm_386.s b/vendor/modernc.org/libc/asm_386.s new file mode 100644 index 0000000..1a2d17e --- /dev/null +++ b/vendor/modernc.org/libc/asm_386.s @@ -0,0 +1,77 @@ +#include "textflag.h" + +// static inline void a_or_64(volatile uint64_t *p, uint64_t v) +TEXT ·a_or_64(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL v+4(FP), AX + LOCK + ORL AX, 0(BX) + MOVL v+8(FP), AX + LOCK + ORL AX, 4(BX) + RET + +// static inline void a_and_64(volatile uint64_t *p, uint64_t v) +TEXT ·a_and_64(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL v+4(FP), AX + LOCK + ANDL AX, 0(BX) + MOVL v+8(FP), AX + LOCK + ANDL AX, 4(BX) + RET + +// static inline int a_cas(volatile int *p, int t, int s) +TEXT ·a_cas(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL t+4(FP), AX + MOVL s+8(FP), CX + LOCK + CMPXCHGL CX, 0(BX) + MOVL AX, ret+12(FP) + RET + +// static inline void a_barrier() +TEXT ·a_barrier(SB),NOSPLIT,$0 + MFENCE + RET + +// #define a_crash a_crash +// static inline void a_crash() +// { +// __asm__ __volatile__( "hlt" : : : "memory" ); +// } +TEXT ·a_crash(SB),NOSPLIT,$0 + HLT + +// static inline void *a_cas_p(volatile void *p, void *t, void *s) +TEXT ·a_cas_p(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL t+4(FP), AX + MOVL s+8(FP), CX + LOCK + CMPXCHGL CX, 0(BX) + MOVL AX, ret+12(FP) + RET + +// static inline void a_or(volatile int *p, int v) +TEXT ·a_or(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL v+4(FP), AX + LOCK + ORL AX, 0(BX) + RET + +// static inline int a_fetch_add(volatile int *p, int v) +TEXT ·a_fetch_add(SB),NOSPLIT,$0 + MOVL p+0(FP), BX + MOVL v+4(FP), AX + LOCK + XADDL AX, 0(BX) + RET + +// static inline void a_spin() +TEXT ·a_spin(SB),NOSPLIT,$0 + PAUSE + RET diff --git a/vendor/modernc.org/libc/atomic.go b/vendor/modernc.org/libc/atomic.go index 66b5546..70ab300 100644 --- a/vendor/modernc.org/libc/atomic.go +++ b/vendor/modernc.org/libc/atomic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" @@ -40,11 +40,7 @@ func a_store_16(addr uintptr, val uint16) { // static inline int a_ctz_l(unsigned long x) func _a_ctz_l(tls *TLS, x ulong) int32 { - if unsafe.Sizeof(x) == 8 { - return int32(mbits.TrailingZeros64(x)) - } - - return int32(mbits.TrailingZeros32(uint32(x))) + return int32(mbits.TrailingZeros64(uint64(x))) } // static inline int a_ctz_64(uint64_t x) diff --git a/vendor/modernc.org/libc/builder.json b/vendor/modernc.org/libc/builder.json index 73a0955..15d55c1 100644 --- a/vendor/modernc.org/libc/builder.json +++ b/vendor/modernc.org/libc/builder.json @@ -1,9 +1,9 @@ { - "autogen": "linux/(amd64|arm64|loong64)", + "autogen": "linux/(amd64|arm64|loong64|ppc64le|s390x|riscv64|386|arm)", "autotag": "darwin/(amd64|arm64)|freebsd/(amd64|arm64)|linux/(386|amd64|arm|arm64|loong64|ppc64le|riscv64|s390x)|openbsd/(386|amd64|arm64)|windows/(amd64|arm64|386)", "autoupdate": "linux/amd64", "download": [ - {"re": "linux/(amd64|arm64|loong64)", "files": ["https://git.musl-libc.org/cgit/musl/snapshot/musl-7ada6dde6f9dc6a2836c3d92c2f762d35fd229e0.tar.gz"]} + {"re": "linux/(amd64|arm64|loong64|ppc64le|s390x|riscv64|386|arm)", "files": ["https://git.musl-libc.org/cgit/musl/snapshot/musl-7ada6dde6f9dc6a2836c3d92c2f762d35fd229e0.tar.gz"]} ], "test": "darwin/(amd64|arm64)|freebsd/(amd64|arm64)|linux/(386|amd64|arm|arm64|loong64|ppc64le|riscv64|s390x)|openbsd/(386|amd64|arm64)|windows/(amd64|arm64|386)" } diff --git a/vendor/modernc.org/libc/builtin.go b/vendor/modernc.org/libc/builtin.go index dedd5b5..9161360 100644 --- a/vendor/modernc.org/libc/builtin.go +++ b/vendor/modernc.org/libc/builtin.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" @@ -32,6 +32,10 @@ func X__builtin_round(tls *TLS, x float64) (r float64) { return Xround(tls, x) } +func X__builtin_lround(tls *TLS, x float64) (r long) { + return Xlround(tls, x) +} + func X__builtin_roundf(tls *TLS, x float32) (r float32) { return Xroundf(tls, x) } @@ -57,7 +61,7 @@ func X__builtin_ctz(t *TLS, n uint32) int32 { } func X__builtin_ctzl(tls *TLS, x ulong) int32 { - return int32(mbits.TrailingZeros64(x)) + return int32(mbits.TrailingZeros64(uint64(x))) } func X__builtin_clz(t *TLS, n uint32) int32 { @@ -65,7 +69,7 @@ func X__builtin_clz(t *TLS, n uint32) int32 { } func X__builtin_clzl(t *TLS, n ulong) int32 { - return int32(mbits.LeadingZeros64(n)) + return int32(mbits.LeadingZeros64(uint64(n))) } func X__builtin_clzll(t *TLS, n uint64) int32 { @@ -170,7 +174,7 @@ func X__builtin_popcount(t *TLS, x uint32) int32 { // int __builtin_popcountl (unsigned long x) func X__builtin_popcountl(t *TLS, x ulong) int32 { - return int32(mbits.OnesCount64(x)) + return int32(mbits.OnesCount64(uint64(x))) } // char * __builtin___strcpy_chk (char *dest, const char *src, size_t os); diff --git a/vendor/modernc.org/libc/ccgo.go b/vendor/modernc.org/libc/ccgo.go index 9812e36..a54b502 100644 --- a/vendor/modernc.org/libc/ccgo.go +++ b/vendor/modernc.org/libc/ccgo.go @@ -1,6 +1,6 @@ // Code generated by 'go generate' - DO NOT EDIT. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/ccgo_linux_386.go b/vendor/modernc.org/libc/ccgo_linux_386.go new file mode 100644 index 0000000..ef03237 --- /dev/null +++ b/vendor/modernc.org/libc/ccgo_linux_386.go @@ -0,0 +1,157066 @@ +// Code generated for linux/386 by 'gcc --package-name=libc --prefix-enumerator=_ --prefix-external=x_ --prefix-field=F --prefix-static-internal=_ --prefix-static-none=_ --prefix-tagged-enum=_ --prefix-tagged-struct=T --prefix-tagged-union=T --prefix-typename=T --prefix-undefined=_ -emit-func-aliases -eval-all-macros -extended-errors -ignore-asm-errors -isystem -mlong-double-64 -std=c99 -nostdinc -ffreestanding -D_XOPEN_SOURCE=700 -I./arch/i386 -I./arch/generic -Iobj/src/internal -I./src/include -I./src/internal -Iobj/include -I./include -march=i486 -mtune=generic -DNDEBUG -nostdlib -shared -o lib/libc.so.go obj/src/complex/__cexp.lo.go obj/src/complex/__cexpf.lo.go obj/src/complex/cabs.lo.go obj/src/complex/cabsf.lo.go obj/src/complex/cabsl.lo.go obj/src/complex/cacos.lo.go obj/src/complex/cacosf.lo.go obj/src/complex/cacosh.lo.go obj/src/complex/cacoshf.lo.go obj/src/complex/cacoshl.lo.go obj/src/complex/cacosl.lo.go obj/src/complex/carg.lo.go obj/src/complex/cargf.lo.go obj/src/complex/cargl.lo.go obj/src/complex/casin.lo.go obj/src/complex/casinf.lo.go obj/src/complex/casinh.lo.go obj/src/complex/casinhf.lo.go obj/src/complex/casinhl.lo.go obj/src/complex/casinl.lo.go obj/src/complex/catan.lo.go obj/src/complex/catanf.lo.go obj/src/complex/catanh.lo.go obj/src/complex/catanhf.lo.go obj/src/complex/catanhl.lo.go obj/src/complex/catanl.lo.go obj/src/complex/ccos.lo.go obj/src/complex/ccosf.lo.go obj/src/complex/ccosh.lo.go obj/src/complex/ccoshf.lo.go obj/src/complex/ccoshl.lo.go obj/src/complex/ccosl.lo.go obj/src/complex/cexp.lo.go obj/src/complex/cexpf.lo.go obj/src/complex/cexpl.lo.go obj/src/complex/cimag.lo.go obj/src/complex/cimagf.lo.go obj/src/complex/cimagl.lo.go obj/src/complex/clog.lo.go obj/src/complex/clogf.lo.go obj/src/complex/clogl.lo.go obj/src/complex/conj.lo.go obj/src/complex/conjf.lo.go obj/src/complex/conjl.lo.go obj/src/complex/cpow.lo.go obj/src/complex/cpowf.lo.go obj/src/complex/cpowl.lo.go obj/src/complex/cproj.lo.go obj/src/complex/cprojf.lo.go obj/src/complex/cprojl.lo.go obj/src/complex/creal.lo.go obj/src/complex/crealf.lo.go obj/src/complex/creall.lo.go obj/src/complex/csin.lo.go obj/src/complex/csinf.lo.go obj/src/complex/csinh.lo.go obj/src/complex/csinhf.lo.go obj/src/complex/csinhl.lo.go obj/src/complex/csinl.lo.go obj/src/complex/csqrt.lo.go obj/src/complex/csqrtf.lo.go obj/src/complex/csqrtl.lo.go obj/src/complex/ctan.lo.go obj/src/complex/ctanf.lo.go obj/src/complex/ctanh.lo.go obj/src/complex/ctanhf.lo.go obj/src/complex/ctanhl.lo.go obj/src/complex/ctanl.lo.go obj/src/conf/confstr.lo.go obj/src/conf/fpathconf.lo.go obj/src/conf/legacy.lo.go obj/src/conf/pathconf.lo.go obj/src/conf/sysconf.lo.go obj/src/crypt/crypt.lo.go obj/src/crypt/crypt_blowfish.lo.go obj/src/crypt/crypt_des.lo.go obj/src/crypt/crypt_md5.lo.go obj/src/crypt/crypt_r.lo.go obj/src/crypt/crypt_sha256.lo.go obj/src/crypt/crypt_sha512.lo.go obj/src/crypt/encrypt.lo.go obj/src/ctype/__ctype_b_loc.lo.go obj/src/ctype/__ctype_get_mb_cur_max.lo.go obj/src/ctype/__ctype_tolower_loc.lo.go obj/src/ctype/__ctype_toupper_loc.lo.go obj/src/ctype/isalnum.lo.go obj/src/ctype/isalpha.lo.go obj/src/ctype/isascii.lo.go obj/src/ctype/isblank.lo.go obj/src/ctype/iscntrl.lo.go obj/src/ctype/isdigit.lo.go obj/src/ctype/isgraph.lo.go obj/src/ctype/islower.lo.go obj/src/ctype/isprint.lo.go obj/src/ctype/ispunct.lo.go obj/src/ctype/isspace.lo.go obj/src/ctype/isupper.lo.go obj/src/ctype/iswalnum.lo.go obj/src/ctype/iswalpha.lo.go obj/src/ctype/iswblank.lo.go obj/src/ctype/iswcntrl.lo.go obj/src/ctype/iswctype.lo.go obj/src/ctype/iswdigit.lo.go obj/src/ctype/iswgraph.lo.go obj/src/ctype/iswlower.lo.go obj/src/ctype/iswprint.lo.go obj/src/ctype/iswpunct.lo.go obj/src/ctype/iswspace.lo.go obj/src/ctype/iswupper.lo.go obj/src/ctype/iswxdigit.lo.go obj/src/ctype/isxdigit.lo.go obj/src/ctype/toascii.lo.go obj/src/ctype/tolower.lo.go obj/src/ctype/toupper.lo.go obj/src/ctype/towctrans.lo.go obj/src/ctype/wcswidth.lo.go obj/src/ctype/wctrans.lo.go obj/src/ctype/wcwidth.lo.go obj/src/dirent/alphasort.lo.go obj/src/dirent/closedir.lo.go obj/src/dirent/dirfd.lo.go obj/src/dirent/fdopendir.lo.go obj/src/dirent/opendir.lo.go obj/src/dirent/readdir.lo.go obj/src/dirent/readdir_r.lo.go obj/src/dirent/rewinddir.lo.go obj/src/dirent/scandir.lo.go obj/src/dirent/seekdir.lo.go obj/src/dirent/telldir.lo.go obj/src/dirent/versionsort.lo.go obj/src/env/__environ.lo.go obj/src/env/__reset_tls.lo.go obj/src/env/__stack_chk_fail.lo.go obj/src/env/clearenv.lo.go obj/src/env/getenv.lo.go obj/src/env/putenv.lo.go obj/src/env/secure_getenv.lo.go obj/src/env/setenv.lo.go obj/src/env/unsetenv.lo.go obj/src/errno/strerror.lo.go obj/src/exit/_Exit.lo.go obj/src/exit/abort_lock.lo.go obj/src/exit/assert.lo.go obj/src/exit/at_quick_exit.lo.go obj/src/exit/quick_exit.lo.go obj/src/fcntl/creat.lo.go obj/src/fcntl/fcntl.lo.go obj/src/fcntl/open.lo.go obj/src/fcntl/openat.lo.go obj/src/fcntl/posix_fadvise.lo.go obj/src/fcntl/posix_fallocate.lo.go obj/src/fenv/fenv.lo.go obj/src/internal/defsysinfo.lo.go obj/src/internal/emulate_wait4.lo.go obj/src/internal/floatscan.lo.go obj/src/internal/intscan.lo.go obj/src/internal/libc.lo.go obj/src/internal/procfdname.lo.go obj/src/internal/shgetc.lo.go obj/src/internal/syscall_ret.lo.go obj/src/internal/vdso.lo.go obj/src/internal/version.lo.go obj/src/ipc/ftok.lo.go obj/src/ipc/msgctl.lo.go obj/src/ipc/msgget.lo.go obj/src/ipc/msgrcv.lo.go obj/src/ipc/msgsnd.lo.go obj/src/ipc/semctl.lo.go obj/src/ipc/semget.lo.go obj/src/ipc/semop.lo.go obj/src/ipc/semtimedop.lo.go obj/src/ipc/shmat.lo.go obj/src/ipc/shmctl.lo.go obj/src/ipc/shmdt.lo.go obj/src/ipc/shmget.lo.go obj/src/legacy/cuserid.lo.go obj/src/legacy/err.lo.go obj/src/legacy/euidaccess.lo.go obj/src/legacy/ftw.lo.go obj/src/legacy/futimes.lo.go obj/src/legacy/getdtablesize.lo.go obj/src/legacy/getloadavg.lo.go obj/src/legacy/getpagesize.lo.go obj/src/legacy/getpass.lo.go obj/src/legacy/getusershell.lo.go obj/src/legacy/isastream.lo.go obj/src/legacy/lutimes.lo.go obj/src/legacy/ulimit.lo.go obj/src/legacy/utmpx.lo.go obj/src/linux/adjtime.lo.go obj/src/linux/adjtimex.lo.go obj/src/linux/arch_prctl.lo.go obj/src/linux/brk.lo.go obj/src/linux/cache.lo.go obj/src/linux/cap.lo.go obj/src/linux/chroot.lo.go obj/src/linux/clock_adjtime.lo.go obj/src/linux/copy_file_range.lo.go obj/src/linux/epoll.lo.go obj/src/linux/eventfd.lo.go obj/src/linux/fallocate.lo.go obj/src/linux/fanotify.lo.go obj/src/linux/flock.lo.go obj/src/linux/getdents.lo.go obj/src/linux/getrandom.lo.go obj/src/linux/inotify.lo.go obj/src/linux/ioperm.lo.go obj/src/linux/iopl.lo.go obj/src/linux/klogctl.lo.go obj/src/linux/memfd_create.lo.go obj/src/linux/mlock2.lo.go obj/src/linux/module.lo.go obj/src/linux/mount.lo.go obj/src/linux/name_to_handle_at.lo.go obj/src/linux/open_by_handle_at.lo.go obj/src/linux/personality.lo.go obj/src/linux/pivot_root.lo.go obj/src/linux/prctl.lo.go obj/src/linux/preadv2.lo.go obj/src/linux/prlimit.lo.go obj/src/linux/process_vm.lo.go obj/src/linux/ptrace.lo.go obj/src/linux/pwritev2.lo.go obj/src/linux/quotactl.lo.go obj/src/linux/readahead.lo.go obj/src/linux/reboot.lo.go obj/src/linux/remap_file_pages.lo.go obj/src/linux/sbrk.lo.go obj/src/linux/sendfile.lo.go obj/src/linux/setfsgid.lo.go obj/src/linux/setfsuid.lo.go obj/src/linux/sethostname.lo.go obj/src/linux/setns.lo.go obj/src/linux/settimeofday.lo.go obj/src/linux/signalfd.lo.go obj/src/linux/splice.lo.go obj/src/linux/statx.lo.go obj/src/linux/stime.lo.go obj/src/linux/swap.lo.go obj/src/linux/sync_file_range.lo.go obj/src/linux/syncfs.lo.go obj/src/linux/sysinfo.lo.go obj/src/linux/tee.lo.go obj/src/linux/timerfd.lo.go obj/src/linux/unshare.lo.go obj/src/linux/utimes.lo.go obj/src/linux/vhangup.lo.go obj/src/linux/vmsplice.lo.go obj/src/linux/wait3.lo.go obj/src/linux/wait4.lo.go obj/src/linux/xattr.lo.go obj/src/locale/__lctrans.lo.go obj/src/locale/__mo_lookup.lo.go obj/src/locale/bind_textdomain_codeset.lo.go obj/src/locale/c_locale.lo.go obj/src/locale/catclose.lo.go obj/src/locale/catgets.lo.go obj/src/locale/catopen.lo.go obj/src/locale/dcngettext.lo.go obj/src/locale/duplocale.lo.go obj/src/locale/freelocale.lo.go obj/src/locale/iconv.lo.go obj/src/locale/iconv_close.lo.go obj/src/locale/langinfo.lo.go obj/src/locale/locale_map.lo.go obj/src/locale/localeconv.lo.go obj/src/locale/newlocale.lo.go obj/src/locale/pleval.lo.go obj/src/locale/setlocale.lo.go obj/src/locale/strcoll.lo.go obj/src/locale/strfmon.lo.go obj/src/locale/strtod_l.lo.go obj/src/locale/strxfrm.lo.go obj/src/locale/textdomain.lo.go obj/src/locale/uselocale.lo.go obj/src/locale/wcscoll.lo.go obj/src/locale/wcsxfrm.lo.go obj/src/malloc/reallocarray.lo.go obj/src/math/__cos.lo.go obj/src/math/__cosdf.lo.go obj/src/math/__cosl.lo.go obj/src/math/__expo2.lo.go obj/src/math/__expo2f.lo.go obj/src/math/__fpclassify.lo.go obj/src/math/__fpclassifyf.lo.go obj/src/math/__fpclassifyl.lo.go obj/src/math/__invtrigl.lo.go obj/src/math/__math_divzero.lo.go obj/src/math/__math_divzerof.lo.go obj/src/math/__math_invalid.lo.go obj/src/math/__math_invalidf.lo.go obj/src/math/__math_invalidl.lo.go obj/src/math/__math_oflow.lo.go obj/src/math/__math_oflowf.lo.go obj/src/math/__math_uflow.lo.go obj/src/math/__math_uflowf.lo.go obj/src/math/__math_xflow.lo.go obj/src/math/__math_xflowf.lo.go obj/src/math/__polevll.lo.go obj/src/math/__rem_pio2.lo.go obj/src/math/__rem_pio2_large.lo.go obj/src/math/__rem_pio2f.lo.go obj/src/math/__rem_pio2l.lo.go obj/src/math/__signbit.lo.go obj/src/math/__signbitf.lo.go obj/src/math/__signbitl.lo.go obj/src/math/__sin.lo.go obj/src/math/__sindf.lo.go obj/src/math/__sinl.lo.go obj/src/math/__tan.lo.go obj/src/math/__tandf.lo.go obj/src/math/__tanl.lo.go obj/src/math/acos.lo.go obj/src/math/acosf.lo.go obj/src/math/acosh.lo.go obj/src/math/acoshf.lo.go obj/src/math/acoshl.lo.go obj/src/math/acosl.lo.go obj/src/math/asin.lo.go obj/src/math/asinf.lo.go obj/src/math/asinh.lo.go obj/src/math/asinhf.lo.go obj/src/math/asinhl.lo.go obj/src/math/asinl.lo.go obj/src/math/atan.lo.go obj/src/math/atan2.lo.go obj/src/math/atan2f.lo.go obj/src/math/atan2l.lo.go obj/src/math/atanf.lo.go obj/src/math/atanh.lo.go obj/src/math/atanhf.lo.go obj/src/math/atanhl.lo.go obj/src/math/atanl.lo.go obj/src/math/cbrt.lo.go obj/src/math/cbrtf.lo.go obj/src/math/cbrtl.lo.go obj/src/math/ceil.lo.go obj/src/math/ceilf.lo.go obj/src/math/ceill.lo.go obj/src/math/copysign.lo.go obj/src/math/copysignf.lo.go obj/src/math/copysignl.lo.go obj/src/math/cos.lo.go obj/src/math/cosf.lo.go obj/src/math/cosh.lo.go obj/src/math/coshf.lo.go obj/src/math/coshl.lo.go obj/src/math/cosl.lo.go obj/src/math/erf.lo.go obj/src/math/erff.lo.go obj/src/math/erfl.lo.go obj/src/math/exp.lo.go obj/src/math/exp10.lo.go obj/src/math/exp10f.lo.go obj/src/math/exp10l.lo.go obj/src/math/exp2.lo.go obj/src/math/exp2f.lo.go obj/src/math/exp2f_data.lo.go obj/src/math/exp2l.lo.go obj/src/math/exp_data.lo.go obj/src/math/expf.lo.go obj/src/math/expl.lo.go obj/src/math/expm1.lo.go obj/src/math/expm1f.lo.go obj/src/math/expm1l.lo.go obj/src/math/fabs.lo.go obj/src/math/fabsf.lo.go obj/src/math/fabsl.lo.go obj/src/math/fdim.lo.go obj/src/math/fdimf.lo.go obj/src/math/fdiml.lo.go obj/src/math/finite.lo.go obj/src/math/finitef.lo.go obj/src/math/floor.lo.go obj/src/math/floorf.lo.go obj/src/math/floorl.lo.go obj/src/math/fma.lo.go obj/src/math/fmal.lo.go obj/src/math/fmax.lo.go obj/src/math/fmaxf.lo.go obj/src/math/fmaxl.lo.go obj/src/math/fmin.lo.go obj/src/math/fminf.lo.go obj/src/math/fminl.lo.go obj/src/math/fmod.lo.go obj/src/math/fmodf.lo.go obj/src/math/fmodl.lo.go obj/src/math/frexp.lo.go obj/src/math/frexpf.lo.go obj/src/math/frexpl.lo.go obj/src/math/hypot.lo.go obj/src/math/hypotf.lo.go obj/src/math/hypotl.lo.go obj/src/math/ilogb.lo.go obj/src/math/ilogbf.lo.go obj/src/math/ilogbl.lo.go obj/src/math/j0.lo.go obj/src/math/j0f.lo.go obj/src/math/j1.lo.go obj/src/math/j1f.lo.go obj/src/math/jn.lo.go obj/src/math/jnf.lo.go obj/src/math/ldexp.lo.go obj/src/math/ldexpf.lo.go obj/src/math/ldexpl.lo.go obj/src/math/lgamma.lo.go obj/src/math/lgamma_r.lo.go obj/src/math/lgammaf.lo.go obj/src/math/lgammaf_r.lo.go obj/src/math/lgammal.lo.go obj/src/math/llrint.lo.go obj/src/math/llrintf.lo.go obj/src/math/llrintl.lo.go obj/src/math/llround.lo.go obj/src/math/llroundf.lo.go obj/src/math/llroundl.lo.go obj/src/math/log.lo.go obj/src/math/log10.lo.go obj/src/math/log10f.lo.go obj/src/math/log10l.lo.go obj/src/math/log1p.lo.go obj/src/math/log1pf.lo.go obj/src/math/log1pl.lo.go obj/src/math/log2.lo.go obj/src/math/log2_data.lo.go obj/src/math/log2f.lo.go obj/src/math/log2f_data.lo.go obj/src/math/log2l.lo.go obj/src/math/log_data.lo.go obj/src/math/logb.lo.go obj/src/math/logbf.lo.go obj/src/math/logbl.lo.go obj/src/math/logf.lo.go obj/src/math/logf_data.lo.go obj/src/math/logl.lo.go obj/src/math/lrint.lo.go obj/src/math/lrintf.lo.go obj/src/math/lrintl.lo.go obj/src/math/lround.lo.go obj/src/math/lroundf.lo.go obj/src/math/lroundl.lo.go obj/src/math/modf.lo.go obj/src/math/modff.lo.go obj/src/math/modfl.lo.go obj/src/math/nan.lo.go obj/src/math/nanf.lo.go obj/src/math/nanl.lo.go obj/src/math/nextafter.lo.go obj/src/math/nextafterf.lo.go obj/src/math/nextafterl.lo.go obj/src/math/nexttoward.lo.go obj/src/math/nexttowardf.lo.go obj/src/math/nexttowardl.lo.go obj/src/math/pow.lo.go obj/src/math/pow_data.lo.go obj/src/math/powf.lo.go obj/src/math/powf_data.lo.go obj/src/math/powl.lo.go obj/src/math/remainder.lo.go obj/src/math/remainderf.lo.go obj/src/math/remainderl.lo.go obj/src/math/remquo.lo.go obj/src/math/remquof.lo.go obj/src/math/remquol.lo.go obj/src/math/rint.lo.go obj/src/math/rintf.lo.go obj/src/math/rintl.lo.go obj/src/math/round.lo.go obj/src/math/roundf.lo.go obj/src/math/roundl.lo.go obj/src/math/scalb.lo.go obj/src/math/scalbf.lo.go obj/src/math/scalbln.lo.go obj/src/math/scalblnf.lo.go obj/src/math/scalblnl.lo.go obj/src/math/scalbn.lo.go obj/src/math/scalbnf.lo.go obj/src/math/scalbnl.lo.go obj/src/math/signgam.lo.go obj/src/math/significand.lo.go obj/src/math/significandf.lo.go obj/src/math/sin.lo.go obj/src/math/sincos.lo.go obj/src/math/sincosf.lo.go obj/src/math/sincosl.lo.go obj/src/math/sinf.lo.go obj/src/math/sinh.lo.go obj/src/math/sinhf.lo.go obj/src/math/sinhl.lo.go obj/src/math/sinl.lo.go obj/src/math/sqrt.lo.go obj/src/math/sqrt_data.lo.go obj/src/math/sqrtf.lo.go obj/src/math/sqrtl.lo.go obj/src/math/tan.lo.go obj/src/math/tanf.lo.go obj/src/math/tanh.lo.go obj/src/math/tanhf.lo.go obj/src/math/tanhl.lo.go obj/src/math/tanl.lo.go obj/src/math/tgamma.lo.go obj/src/math/tgammaf.lo.go obj/src/math/tgammal.lo.go obj/src/math/trunc.lo.go obj/src/math/truncf.lo.go obj/src/math/truncl.lo.go obj/src/misc/a64l.lo.go obj/src/misc/basename.lo.go obj/src/misc/dirname.lo.go obj/src/misc/ffs.lo.go obj/src/misc/ffsl.lo.go obj/src/misc/ffsll.lo.go obj/src/misc/fmtmsg.lo.go obj/src/misc/get_current_dir_name.lo.go obj/src/misc/getauxval.lo.go obj/src/misc/getdomainname.lo.go obj/src/misc/getentropy.lo.go obj/src/misc/gethostid.lo.go obj/src/misc/getopt.lo.go obj/src/misc/getopt_long.lo.go obj/src/misc/getpriority.lo.go obj/src/misc/getresgid.lo.go obj/src/misc/getresuid.lo.go obj/src/misc/getrlimit.lo.go obj/src/misc/getrusage.lo.go obj/src/misc/getsubopt.lo.go obj/src/misc/ioctl.lo.go obj/src/misc/issetugid.lo.go obj/src/misc/lockf.lo.go obj/src/misc/login_tty.lo.go obj/src/misc/mntent.lo.go obj/src/misc/nftw.lo.go obj/src/misc/openpty.lo.go obj/src/misc/ptsname.lo.go obj/src/misc/pty.lo.go obj/src/misc/realpath.lo.go obj/src/misc/setdomainname.lo.go obj/src/misc/setpriority.lo.go obj/src/misc/setrlimit.lo.go obj/src/misc/syscall.lo.go obj/src/misc/syslog.lo.go obj/src/misc/uname.lo.go obj/src/mman/madvise.lo.go obj/src/mman/mincore.lo.go obj/src/mman/mlock.lo.go obj/src/mman/mlockall.lo.go obj/src/mman/mmap.lo.go obj/src/mman/mprotect.lo.go obj/src/mman/mremap.lo.go obj/src/mman/msync.lo.go obj/src/mman/munlock.lo.go obj/src/mman/munlockall.lo.go obj/src/mman/munmap.lo.go obj/src/mman/posix_madvise.lo.go obj/src/mman/shm_open.lo.go obj/src/multibyte/btowc.lo.go obj/src/multibyte/c16rtomb.lo.go obj/src/multibyte/c32rtomb.lo.go obj/src/multibyte/internal.lo.go obj/src/multibyte/mblen.lo.go obj/src/multibyte/mbrlen.lo.go obj/src/multibyte/mbrtoc16.lo.go obj/src/multibyte/mbrtoc32.lo.go obj/src/multibyte/mbrtowc.lo.go obj/src/multibyte/mbsinit.lo.go obj/src/multibyte/mbsnrtowcs.lo.go obj/src/multibyte/mbsrtowcs.lo.go obj/src/multibyte/mbstowcs.lo.go obj/src/multibyte/mbtowc.lo.go obj/src/multibyte/wcrtomb.lo.go obj/src/multibyte/wcsnrtombs.lo.go obj/src/multibyte/wcsrtombs.lo.go obj/src/multibyte/wcstombs.lo.go obj/src/multibyte/wctob.lo.go obj/src/multibyte/wctomb.lo.go obj/src/network/accept.lo.go obj/src/network/accept4.lo.go obj/src/network/bind.lo.go obj/src/network/connect.lo.go obj/src/network/dn_comp.lo.go obj/src/network/dn_expand.lo.go obj/src/network/dn_skipname.lo.go obj/src/network/dns_parse.lo.go obj/src/network/ent.lo.go obj/src/network/ether.lo.go obj/src/network/freeaddrinfo.lo.go obj/src/network/gai_strerror.lo.go obj/src/network/getaddrinfo.lo.go obj/src/network/gethostbyaddr.lo.go obj/src/network/gethostbyaddr_r.lo.go obj/src/network/gethostbyname.lo.go obj/src/network/gethostbyname2.lo.go obj/src/network/gethostbyname2_r.lo.go obj/src/network/gethostbyname_r.lo.go obj/src/network/getifaddrs.lo.go obj/src/network/getnameinfo.lo.go obj/src/network/getpeername.lo.go obj/src/network/getservbyname.lo.go obj/src/network/getservbyname_r.lo.go obj/src/network/getsockname.lo.go obj/src/network/getsockopt.lo.go obj/src/network/h_errno.lo.go obj/src/network/herror.lo.go obj/src/network/hstrerror.lo.go obj/src/network/htonl.lo.go obj/src/network/htons.lo.go obj/src/network/if_freenameindex.lo.go obj/src/network/if_indextoname.lo.go obj/src/network/if_nameindex.lo.go obj/src/network/if_nametoindex.lo.go obj/src/network/in6addr_any.lo.go obj/src/network/in6addr_loopback.lo.go obj/src/network/inet_addr.lo.go obj/src/network/inet_aton.lo.go obj/src/network/inet_legacy.lo.go obj/src/network/inet_ntoa.lo.go obj/src/network/inet_ntop.lo.go obj/src/network/inet_pton.lo.go obj/src/network/listen.lo.go obj/src/network/lookup_ipliteral.lo.go obj/src/network/lookup_name.lo.go obj/src/network/lookup_serv.lo.go obj/src/network/netlink.lo.go obj/src/network/netname.lo.go obj/src/network/ns_parse.lo.go obj/src/network/ntohl.lo.go obj/src/network/ntohs.lo.go obj/src/network/proto.lo.go obj/src/network/recv.lo.go obj/src/network/recvfrom.lo.go obj/src/network/recvmmsg.lo.go obj/src/network/recvmsg.lo.go obj/src/network/res_init.lo.go obj/src/network/res_mkquery.lo.go obj/src/network/res_msend.lo.go obj/src/network/res_send.lo.go obj/src/network/res_state.lo.go obj/src/network/resolvconf.lo.go obj/src/network/send.lo.go obj/src/network/sendmmsg.lo.go obj/src/network/sendmsg.lo.go obj/src/network/sendto.lo.go obj/src/network/serv.lo.go obj/src/network/setsockopt.lo.go obj/src/network/shutdown.lo.go obj/src/network/sockatmark.lo.go obj/src/network/socket.lo.go obj/src/network/socketpair.lo.go obj/src/passwd/fgetgrent.lo.go obj/src/passwd/fgetpwent.lo.go obj/src/passwd/getgr_a.lo.go obj/src/passwd/getgr_r.lo.go obj/src/passwd/getgrent.lo.go obj/src/passwd/getgrent_a.lo.go obj/src/passwd/getgrouplist.lo.go obj/src/passwd/getpw_a.lo.go obj/src/passwd/getpw_r.lo.go obj/src/passwd/getpwent.lo.go obj/src/passwd/getpwent_a.lo.go obj/src/passwd/getspent.lo.go obj/src/passwd/lckpwdf.lo.go obj/src/passwd/nscd_query.lo.go obj/src/passwd/putgrent.lo.go obj/src/passwd/putpwent.lo.go obj/src/passwd/putspent.lo.go obj/src/prng/__rand48_step.lo.go obj/src/prng/__seed48.lo.go obj/src/prng/drand48.lo.go obj/src/prng/lcong48.lo.go obj/src/prng/lrand48.lo.go obj/src/prng/mrand48.lo.go obj/src/prng/rand.lo.go obj/src/prng/rand_r.lo.go obj/src/prng/random.lo.go obj/src/prng/seed48.lo.go obj/src/prng/srand48.lo.go obj/src/process/execl.lo.go obj/src/process/execle.lo.go obj/src/process/execlp.lo.go obj/src/process/execv.lo.go obj/src/process/execve.lo.go obj/src/process/execvp.lo.go obj/src/process/fexecve.lo.go obj/src/process/fork.lo.go obj/src/process/posix_spawn_file_actions_addchdir.lo.go obj/src/process/posix_spawn_file_actions_addclose.lo.go obj/src/process/posix_spawn_file_actions_adddup2.lo.go obj/src/process/posix_spawn_file_actions_addfchdir.lo.go obj/src/process/posix_spawn_file_actions_addopen.lo.go obj/src/process/posix_spawn_file_actions_destroy.lo.go obj/src/process/posix_spawn_file_actions_init.lo.go obj/src/process/posix_spawnattr_destroy.lo.go obj/src/process/posix_spawnattr_getflags.lo.go obj/src/process/posix_spawnattr_getpgroup.lo.go obj/src/process/posix_spawnattr_getsigdefault.lo.go obj/src/process/posix_spawnattr_getsigmask.lo.go obj/src/process/posix_spawnattr_init.lo.go obj/src/process/posix_spawnattr_sched.lo.go obj/src/process/posix_spawnattr_setflags.lo.go obj/src/process/posix_spawnattr_setpgroup.lo.go obj/src/process/posix_spawnattr_setsigdefault.lo.go obj/src/process/posix_spawnattr_setsigmask.lo.go obj/src/process/vfork.lo.go obj/src/process/wait.lo.go obj/src/process/waitid.lo.go obj/src/process/waitpid.lo.go obj/src/regex/fnmatch.lo.go obj/src/regex/glob.lo.go obj/src/regex/regcomp.lo.go obj/src/regex/regerror.lo.go obj/src/regex/regexec.lo.go obj/src/regex/tre-mem.lo.go obj/src/search/hsearch.lo.go obj/src/search/insque.lo.go obj/src/search/lsearch.lo.go obj/src/search/tdelete.lo.go obj/src/search/tdestroy.lo.go obj/src/search/tfind.lo.go obj/src/search/tsearch.lo.go obj/src/search/twalk.lo.go obj/src/select/poll.lo.go obj/src/select/ppoll.lo.go obj/src/select/pselect.lo.go obj/src/select/select.lo.go obj/src/setjmp/longjmp.lo.go obj/src/setjmp/setjmp.lo.go obj/src/signal/block.lo.go obj/src/signal/getitimer.lo.go obj/src/signal/kill.lo.go obj/src/signal/killpg.lo.go obj/src/signal/psiginfo.lo.go obj/src/signal/psignal.lo.go obj/src/signal/raise.lo.go obj/src/signal/restore.lo.go obj/src/signal/setitimer.lo.go obj/src/signal/sigaction.lo.go obj/src/signal/sigaddset.lo.go obj/src/signal/sigaltstack.lo.go obj/src/signal/sigandset.lo.go obj/src/signal/sigdelset.lo.go obj/src/signal/sigemptyset.lo.go obj/src/signal/sigfillset.lo.go obj/src/signal/sigisemptyset.lo.go obj/src/signal/sigismember.lo.go obj/src/signal/sigorset.lo.go obj/src/signal/sigpending.lo.go obj/src/signal/sigprocmask.lo.go obj/src/signal/sigqueue.lo.go obj/src/signal/sigrtmax.lo.go obj/src/signal/sigrtmin.lo.go obj/src/signal/sigsetjmp.lo.go obj/src/signal/sigsetjmp_tail.lo.go obj/src/signal/sigsuspend.lo.go obj/src/signal/sigtimedwait.lo.go obj/src/signal/sigwait.lo.go obj/src/signal/sigwaitinfo.lo.go obj/src/stat/__xstat.lo.go obj/src/stat/chmod.lo.go obj/src/stat/fchmod.lo.go obj/src/stat/fchmodat.lo.go obj/src/stat/fstat.lo.go obj/src/stat/fstatat.lo.go obj/src/stat/futimens.lo.go obj/src/stat/futimesat.lo.go obj/src/stat/lchmod.lo.go obj/src/stat/lstat.lo.go obj/src/stat/mkdir.lo.go obj/src/stat/mkdirat.lo.go obj/src/stat/mkfifo.lo.go obj/src/stat/mkfifoat.lo.go obj/src/stat/mknod.lo.go obj/src/stat/mknodat.lo.go obj/src/stat/stat.lo.go obj/src/stat/statvfs.lo.go obj/src/stat/umask.lo.go obj/src/stat/utimensat.lo.go obj/src/stdio/__fclose_ca.lo.go obj/src/stdio/__fdopen.lo.go obj/src/stdio/__fmodeflags.lo.go obj/src/stdio/__fopen_rb_ca.lo.go obj/src/stdio/__overflow.lo.go obj/src/stdio/__stdio_close.lo.go obj/src/stdio/__stdio_exit.lo.go obj/src/stdio/__stdio_read.lo.go obj/src/stdio/__stdio_seek.lo.go obj/src/stdio/__stdio_write.lo.go obj/src/stdio/__stdout_write.lo.go obj/src/stdio/__toread.lo.go obj/src/stdio/__towrite.lo.go obj/src/stdio/__uflow.lo.go obj/src/stdio/asprintf.lo.go obj/src/stdio/clearerr.lo.go obj/src/stdio/dprintf.lo.go obj/src/stdio/ext.lo.go obj/src/stdio/ext2.lo.go obj/src/stdio/fclose.lo.go obj/src/stdio/feof.lo.go obj/src/stdio/ferror.lo.go obj/src/stdio/fflush.lo.go obj/src/stdio/fgetc.lo.go obj/src/stdio/fgetln.lo.go obj/src/stdio/fgetpos.lo.go obj/src/stdio/fgets.lo.go obj/src/stdio/fgetwc.lo.go obj/src/stdio/fgetws.lo.go obj/src/stdio/fileno.lo.go obj/src/stdio/flockfile.lo.go obj/src/stdio/fmemopen.lo.go obj/src/stdio/fopen.lo.go obj/src/stdio/fopencookie.lo.go obj/src/stdio/fprintf.lo.go obj/src/stdio/fputc.lo.go obj/src/stdio/fputs.lo.go obj/src/stdio/fputwc.lo.go obj/src/stdio/fputws.lo.go obj/src/stdio/fread.lo.go obj/src/stdio/freopen.lo.go obj/src/stdio/fscanf.lo.go obj/src/stdio/fseek.lo.go obj/src/stdio/fsetpos.lo.go obj/src/stdio/ftell.lo.go obj/src/stdio/ftrylockfile.lo.go obj/src/stdio/funlockfile.lo.go obj/src/stdio/fwide.lo.go obj/src/stdio/fwprintf.lo.go obj/src/stdio/fwrite.lo.go obj/src/stdio/fwscanf.lo.go obj/src/stdio/getc.lo.go obj/src/stdio/getc_unlocked.lo.go obj/src/stdio/getchar.lo.go obj/src/stdio/getchar_unlocked.lo.go obj/src/stdio/getdelim.lo.go obj/src/stdio/getline.lo.go obj/src/stdio/gets.lo.go obj/src/stdio/getw.lo.go obj/src/stdio/getwc.lo.go obj/src/stdio/getwchar.lo.go obj/src/stdio/ofl.lo.go obj/src/stdio/ofl_add.lo.go obj/src/stdio/open_memstream.lo.go obj/src/stdio/open_wmemstream.lo.go obj/src/stdio/pclose.lo.go obj/src/stdio/perror.lo.go obj/src/stdio/printf.lo.go obj/src/stdio/putc.lo.go obj/src/stdio/putc_unlocked.lo.go obj/src/stdio/putchar.lo.go obj/src/stdio/putchar_unlocked.lo.go obj/src/stdio/puts.lo.go obj/src/stdio/putw.lo.go obj/src/stdio/putwc.lo.go obj/src/stdio/putwchar.lo.go obj/src/stdio/remove.lo.go obj/src/stdio/rename.lo.go obj/src/stdio/rewind.lo.go obj/src/stdio/scanf.lo.go obj/src/stdio/setbuf.lo.go obj/src/stdio/setbuffer.lo.go obj/src/stdio/setlinebuf.lo.go obj/src/stdio/setvbuf.lo.go obj/src/stdio/snprintf.lo.go obj/src/stdio/sprintf.lo.go obj/src/stdio/sscanf.lo.go obj/src/stdio/stderr.lo.go obj/src/stdio/stdin.lo.go obj/src/stdio/stdout.lo.go obj/src/stdio/swprintf.lo.go obj/src/stdio/swscanf.lo.go obj/src/stdio/tempnam.lo.go obj/src/stdio/tmpfile.lo.go obj/src/stdio/tmpnam.lo.go obj/src/stdio/ungetc.lo.go obj/src/stdio/ungetwc.lo.go obj/src/stdio/vasprintf.lo.go obj/src/stdio/vdprintf.lo.go obj/src/stdio/vfprintf.lo.go obj/src/stdio/vfscanf.lo.go obj/src/stdio/vfwprintf.lo.go obj/src/stdio/vfwscanf.lo.go obj/src/stdio/vprintf.lo.go obj/src/stdio/vscanf.lo.go obj/src/stdio/vsnprintf.lo.go obj/src/stdio/vsprintf.lo.go obj/src/stdio/vsscanf.lo.go obj/src/stdio/vswprintf.lo.go obj/src/stdio/vswscanf.lo.go obj/src/stdio/vwprintf.lo.go obj/src/stdio/vwscanf.lo.go obj/src/stdio/wprintf.lo.go obj/src/stdio/wscanf.lo.go obj/src/stdlib/abs.lo.go obj/src/stdlib/atof.lo.go obj/src/stdlib/atoi.lo.go obj/src/stdlib/atol.lo.go obj/src/stdlib/atoll.lo.go obj/src/stdlib/bsearch.lo.go obj/src/stdlib/div.lo.go obj/src/stdlib/ecvt.lo.go obj/src/stdlib/fcvt.lo.go obj/src/stdlib/gcvt.lo.go obj/src/stdlib/imaxabs.lo.go obj/src/stdlib/imaxdiv.lo.go obj/src/stdlib/labs.lo.go obj/src/stdlib/ldiv.lo.go obj/src/stdlib/llabs.lo.go obj/src/stdlib/lldiv.lo.go obj/src/stdlib/qsort.lo.go obj/src/stdlib/qsort_nr.lo.go obj/src/stdlib/strtod.lo.go obj/src/stdlib/strtol.lo.go obj/src/stdlib/wcstod.lo.go obj/src/stdlib/wcstol.lo.go obj/src/string/bcmp.lo.go obj/src/string/bcopy.lo.go obj/src/string/bzero.lo.go obj/src/string/explicit_bzero.lo.go obj/src/string/index.lo.go obj/src/string/memccpy.lo.go obj/src/string/memchr.lo.go obj/src/string/memcmp.lo.go obj/src/string/memcpy.lo.go obj/src/string/memmem.lo.go obj/src/string/memmove.lo.go obj/src/string/mempcpy.lo.go obj/src/string/memrchr.lo.go obj/src/string/memset.lo.go obj/src/string/rindex.lo.go obj/src/string/stpcpy.lo.go obj/src/string/stpncpy.lo.go obj/src/string/strcasecmp.lo.go obj/src/string/strcasestr.lo.go obj/src/string/strcat.lo.go obj/src/string/strchr.lo.go obj/src/string/strchrnul.lo.go obj/src/string/strcmp.lo.go obj/src/string/strcpy.lo.go obj/src/string/strcspn.lo.go obj/src/string/strdup.lo.go obj/src/string/strerror_r.lo.go obj/src/string/strlcat.lo.go obj/src/string/strlcpy.lo.go obj/src/string/strlen.lo.go obj/src/string/strncasecmp.lo.go obj/src/string/strncat.lo.go obj/src/string/strncmp.lo.go obj/src/string/strncpy.lo.go obj/src/string/strndup.lo.go obj/src/string/strnlen.lo.go obj/src/string/strpbrk.lo.go obj/src/string/strrchr.lo.go obj/src/string/strsep.lo.go obj/src/string/strsignal.lo.go obj/src/string/strspn.lo.go obj/src/string/strstr.lo.go obj/src/string/strtok.lo.go obj/src/string/strtok_r.lo.go obj/src/string/strverscmp.lo.go obj/src/string/swab.lo.go obj/src/string/wcpcpy.lo.go obj/src/string/wcpncpy.lo.go obj/src/string/wcscasecmp.lo.go obj/src/string/wcscasecmp_l.lo.go obj/src/string/wcscat.lo.go obj/src/string/wcschr.lo.go obj/src/string/wcscmp.lo.go obj/src/string/wcscpy.lo.go obj/src/string/wcscspn.lo.go obj/src/string/wcsdup.lo.go obj/src/string/wcslen.lo.go obj/src/string/wcsncasecmp.lo.go obj/src/string/wcsncasecmp_l.lo.go obj/src/string/wcsncat.lo.go obj/src/string/wcsncmp.lo.go obj/src/string/wcsncpy.lo.go obj/src/string/wcsnlen.lo.go obj/src/string/wcspbrk.lo.go obj/src/string/wcsrchr.lo.go obj/src/string/wcsspn.lo.go obj/src/string/wcsstr.lo.go obj/src/string/wcstok.lo.go obj/src/string/wcswcs.lo.go obj/src/string/wmemchr.lo.go obj/src/string/wmemcmp.lo.go obj/src/string/wmemcpy.lo.go obj/src/string/wmemmove.lo.go obj/src/string/wmemset.lo.go obj/src/temp/mkdtemp.lo.go obj/src/temp/mkostemp.lo.go obj/src/temp/mkostemps.lo.go obj/src/temp/mkstemp.lo.go obj/src/temp/mkstemps.lo.go obj/src/temp/mktemp.lo.go obj/src/termios/cfgetospeed.lo.go obj/src/termios/cfmakeraw.lo.go obj/src/termios/cfsetospeed.lo.go obj/src/termios/tcdrain.lo.go obj/src/termios/tcflow.lo.go obj/src/termios/tcflush.lo.go obj/src/termios/tcgetattr.lo.go obj/src/termios/tcgetsid.lo.go obj/src/termios/tcgetwinsize.lo.go obj/src/termios/tcsendbreak.lo.go obj/src/termios/tcsetattr.lo.go obj/src/termios/tcsetwinsize.lo.go obj/src/time/__map_file.lo.go obj/src/time/__month_to_secs.lo.go obj/src/time/__secs_to_tm.lo.go obj/src/time/__tm_to_secs.lo.go obj/src/time/__tz.lo.go obj/src/time/__year_to_secs.lo.go obj/src/time/asctime.lo.go obj/src/time/asctime_r.lo.go obj/src/time/clock.lo.go obj/src/time/clock_getcpuclockid.lo.go obj/src/time/clock_getres.lo.go obj/src/time/clock_gettime.lo.go obj/src/time/clock_nanosleep.lo.go obj/src/time/clock_settime.lo.go obj/src/time/ctime.lo.go obj/src/time/ctime_r.lo.go obj/src/time/difftime.lo.go obj/src/time/ftime.lo.go obj/src/time/getdate.lo.go obj/src/time/gettimeofday.lo.go obj/src/time/gmtime.lo.go obj/src/time/gmtime_r.lo.go obj/src/time/localtime.lo.go obj/src/time/localtime_r.lo.go obj/src/time/mktime.lo.go obj/src/time/nanosleep.lo.go obj/src/time/strftime.lo.go obj/src/time/strptime.lo.go obj/src/time/time.lo.go obj/src/time/timegm.lo.go obj/src/time/timer_delete.lo.go obj/src/time/timer_getoverrun.lo.go obj/src/time/timer_gettime.lo.go obj/src/time/timer_settime.lo.go obj/src/time/times.lo.go obj/src/time/timespec_get.lo.go obj/src/time/utime.lo.go obj/src/time/wcsftime.lo.go obj/src/unistd/_exit.lo.go obj/src/unistd/access.lo.go obj/src/unistd/acct.lo.go obj/src/unistd/alarm.lo.go obj/src/unistd/chdir.lo.go obj/src/unistd/chown.lo.go obj/src/unistd/close.lo.go obj/src/unistd/ctermid.lo.go obj/src/unistd/dup.lo.go obj/src/unistd/dup2.lo.go obj/src/unistd/dup3.lo.go obj/src/unistd/faccessat.lo.go obj/src/unistd/fchdir.lo.go obj/src/unistd/fchown.lo.go obj/src/unistd/fchownat.lo.go obj/src/unistd/fdatasync.lo.go obj/src/unistd/fsync.lo.go obj/src/unistd/ftruncate.lo.go obj/src/unistd/getcwd.lo.go obj/src/unistd/getegid.lo.go obj/src/unistd/geteuid.lo.go obj/src/unistd/getgid.lo.go obj/src/unistd/getgroups.lo.go obj/src/unistd/gethostname.lo.go obj/src/unistd/getlogin.lo.go obj/src/unistd/getlogin_r.lo.go obj/src/unistd/getpgid.lo.go obj/src/unistd/getpgrp.lo.go obj/src/unistd/getpid.lo.go obj/src/unistd/getppid.lo.go obj/src/unistd/getsid.lo.go obj/src/unistd/getuid.lo.go obj/src/unistd/isatty.lo.go obj/src/unistd/lchown.lo.go obj/src/unistd/link.lo.go obj/src/unistd/linkat.lo.go obj/src/unistd/lseek.lo.go obj/src/unistd/nice.lo.go obj/src/unistd/pause.lo.go obj/src/unistd/pipe.lo.go obj/src/unistd/pipe2.lo.go obj/src/unistd/posix_close.lo.go obj/src/unistd/pread.lo.go obj/src/unistd/preadv.lo.go obj/src/unistd/pwrite.lo.go obj/src/unistd/pwritev.lo.go obj/src/unistd/read.lo.go obj/src/unistd/readlink.lo.go obj/src/unistd/readlinkat.lo.go obj/src/unistd/readv.lo.go obj/src/unistd/renameat.lo.go obj/src/unistd/rmdir.lo.go obj/src/unistd/setgid.lo.go obj/src/unistd/setpgid.lo.go obj/src/unistd/setpgrp.lo.go obj/src/unistd/setsid.lo.go obj/src/unistd/setuid.lo.go obj/src/unistd/setxid.lo.go obj/src/unistd/sleep.lo.go obj/src/unistd/symlink.lo.go obj/src/unistd/symlinkat.lo.go obj/src/unistd/sync.lo.go obj/src/unistd/tcgetpgrp.lo.go obj/src/unistd/tcsetpgrp.lo.go obj/src/unistd/truncate.lo.go obj/src/unistd/ttyname.lo.go obj/src/unistd/ttyname_r.lo.go obj/src/unistd/ualarm.lo.go obj/src/unistd/unlink.lo.go obj/src/unistd/unlinkat.lo.go obj/src/unistd/usleep.lo.go obj/src/unistd/write.lo.go obj/src/unistd/writev.lo.go obj/compat/time32/__xstat.lo.go obj/compat/time32/adjtime32.lo.go obj/compat/time32/adjtimex_time32.lo.go obj/compat/time32/clock_adjtime32.lo.go obj/compat/time32/clock_getres_time32.lo.go obj/compat/time32/clock_gettime32.lo.go obj/compat/time32/clock_nanosleep_time32.lo.go obj/compat/time32/clock_settime32.lo.go obj/compat/time32/ctime32.lo.go obj/compat/time32/ctime32_r.lo.go obj/compat/time32/difftime32.lo.go obj/compat/time32/fstat_time32.lo.go obj/compat/time32/fstatat_time32.lo.go obj/compat/time32/ftime32.lo.go obj/compat/time32/futimens_time32.lo.go obj/compat/time32/futimes_time32.lo.go obj/compat/time32/futimesat_time32.lo.go obj/compat/time32/getitimer_time32.lo.go obj/compat/time32/getrusage_time32.lo.go obj/compat/time32/gettimeofday_time32.lo.go obj/compat/time32/gmtime32.lo.go obj/compat/time32/gmtime32_r.lo.go obj/compat/time32/localtime32.lo.go obj/compat/time32/localtime32_r.lo.go obj/compat/time32/lstat_time32.lo.go obj/compat/time32/lutimes_time32.lo.go obj/compat/time32/mktime32.lo.go obj/compat/time32/nanosleep_time32.lo.go obj/compat/time32/ppoll_time32.lo.go obj/compat/time32/pselect_time32.lo.go obj/compat/time32/recvmmsg_time32.lo.go obj/compat/time32/select_time32.lo.go obj/compat/time32/semtimedop_time32.lo.go obj/compat/time32/setitimer_time32.lo.go obj/compat/time32/settimeofday_time32.lo.go obj/compat/time32/sigtimedwait_time32.lo.go obj/compat/time32/stat_time32.lo.go obj/compat/time32/stime32.lo.go obj/compat/time32/time32.lo.go obj/compat/time32/time32gm.lo.go obj/compat/time32/timer_gettime32.lo.go obj/compat/time32/timer_settime32.lo.go obj/compat/time32/timerfd_gettime32.lo.go obj/compat/time32/timerfd_settime32.lo.go obj/compat/time32/timespec_get_time32.lo.go obj/compat/time32/utime_time32.lo.go obj/compat/time32/utimensat_time32.lo.go obj/compat/time32/utimes_time32.lo.go obj/compat/time32/wait3_time32.lo.go obj/compat/time32/wait4_time32.lo.go -lgcc -lgcc_eh', DO NOT EDIT. + +//go:build linux && 386 + +package libc + +import ( + "reflect" + "unsafe" +) + +var ( + _ reflect.Type + _ unsafe.Pointer +) + +const BIG_ENDIAN = 4321 +const BYTE_ORDER = 1234 +const DBL_DECIMAL_DIG = 17 +const DBL_DIG = 15 +const DBL_EPSILON = 0 +const DBL_HAS_SUBNORM = 1 +const DBL_MANT_DIG = 53 +const DBL_MAX = 0 +const DBL_MAX_10_EXP = 308 +const DBL_MAX_EXP = 1024 +const DBL_MIN = 0 +const DBL_MIN_10_EXP = -307 +const DBL_MIN_EXP = -1021 +const DBL_TRUE_MIN = 0 +const DECIMAL_DIG = 17 +const FLT_DECIMAL_DIG = 9 +const FLT_DIG = 6 +const FLT_EPSILON = 0 +const FLT_EVAL_METHOD = 0 +const FLT_HAS_SUBNORM = 1 +const FLT_MANT_DIG = 24 +const FLT_MAX = 0 +const FLT_MAX_10_EXP = 38 +const FLT_MAX_EXP = 128 +const FLT_MIN = 0 +const FLT_MIN_10_EXP = -37 +const FLT_MIN_EXP = -125 +const FLT_RADIX = 2 +const FLT_ROUNDS = 0 +const FLT_TRUE_MIN = 0 +const FP_ILOGB0 = -2147483648 +const FP_ILOGBNAN = -2147483648 +const FP_INFINITE = 1 +const FP_NAN = 0 +const FP_NORMAL = 4 +const FP_SUBNORMAL = 3 +const FP_ZERO = 2 +const HUGE_VALF = 0 +const I = 0 +const INFINITY = 0 +const INT16_MAX = 32767 +const INT16_MIN = -32768 +const INT32_MAX = 2147483647 +const INT32_MIN = -2147483648 +const INT64_MAX = 9223372036854775807 +const INT64_MIN = -9223372036854775808 +const INT8_MAX = 127 +const INT8_MIN = -128 +const INTMAX_MAX = 9223372036854775807 +const INTMAX_MIN = -9223372036854775808 +const INTPTR_MAX = 2147483647 +const INTPTR_MIN = -2147483648 +const INT_FAST16_MAX = 2147483647 +const INT_FAST16_MIN = -2147483648 +const INT_FAST32_MAX = 2147483647 +const INT_FAST32_MIN = -2147483648 +const INT_FAST64_MAX = 9223372036854775807 +const INT_FAST64_MIN = -9223372036854775808 +const INT_FAST8_MAX = 127 +const INT_FAST8_MIN = -128 +const INT_LEAST16_MAX = 32767 +const INT_LEAST16_MIN = -32768 +const INT_LEAST32_MAX = 2147483647 +const INT_LEAST32_MIN = -2147483648 +const INT_LEAST64_MAX = 9223372036854775807 +const INT_LEAST64_MIN = -9223372036854775808 +const INT_LEAST8_MAX = 127 +const INT_LEAST8_MIN = -128 +const LDBL_DECIMAL_DIG = 17 +const LDBL_DIG = 15 +const LDBL_EPSILON = 0 +const LDBL_HAS_SUBNORM = 1 +const LDBL_MANT_DIG = 53 +const LDBL_MAX = 0 +const LDBL_MAX_10_EXP = 308 +const LDBL_MAX_EXP = 1024 +const LDBL_MIN = 0 +const LDBL_MIN_10_EXP = -307 +const LDBL_MIN_EXP = -1021 +const LDBL_TRUE_MIN = 0 +const LITTLE_ENDIAN = 1234 +const MATH_ERREXCEPT = 2 +const MATH_ERRNO = 1 +const M_1_PI = 0 +const M_2_PI = 0 +const M_2_SQRTPI = 0 +const M_E = 0 +const M_LN10 = 0 +const M_LN2 = 0 +const M_LOG10E = 0 +const M_LOG2E = 0 +const M_PI = 0 +const M_PI_2 = 0 +const M_PI_4 = 0 +const M_SQRT1_2 = 0 +const M_SQRT2 = 0 +const NAN = 0 +const NDEBUG = 1 +const PDP_ENDIAN = 3412 +const PTRDIFF_MAX = 2147483647 +const PTRDIFF_MIN = -2147483648 +const SIG_ATOMIC_MAX = 2147483647 +const SIG_ATOMIC_MIN = -2147483648 +const SIZE_MAX = 4294967295 +const TOINT_INTRINSICS = 0 +const UINT16_MAX = 65535 +const UINT32_MAX = 4294967295 +const UINT64_MAX = 18446744073709551615 +const UINT8_MAX = 255 +const UINTMAX_MAX = 18446744073709551615 +const UINTPTR_MAX = 4294967295 +const UINT_FAST16_MAX = 4294967295 +const UINT_FAST32_MAX = 4294967295 +const UINT_FAST64_MAX = 18446744073709551615 +const UINT_FAST8_MAX = 255 +const UINT_LEAST16_MAX = 65535 +const UINT_LEAST32_MAX = 4294967295 +const UINT_LEAST64_MAX = 18446744073709551615 +const UINT_LEAST8_MAX = 255 +const WANT_ROUNDING = 1 +const WANT_SNAN = 0 +const WCHAR_MAX = 2147483647 +const WCHAR_MIN = -2147483648 +const WINT_MAX = 4294967295 +const WINT_MIN = 0 +const _Complex_I = 0 +const _FILE_OFFSET_BITS = 64 +const _ILP32 = 1 +const _REDIR_TIME64 = 1 +const _XOPEN_SOURCE = 700 +const __ATOMIC_ACQUIRE = 2 +const __ATOMIC_ACQ_REL = 4 +const __ATOMIC_CONSUME = 1 +const __ATOMIC_HLE_ACQUIRE = 65536 +const __ATOMIC_HLE_RELEASE = 131072 +const __ATOMIC_RELAXED = 0 +const __ATOMIC_RELEASE = 3 +const __ATOMIC_SEQ_CST = 5 +const __BIGGEST_ALIGNMENT__ = 16 +const __BIG_ENDIAN = 4321 +const __BYTE_ORDER = 1234 +const __BYTE_ORDER__ = 1234 +const __CCGO__ = 1 +const __CHAR_BIT__ = 8 +const __DBL_DECIMAL_DIG__ = 17 +const __DBL_DIG__ = 15 +const __DBL_HAS_DENORM__ = 1 +const __DBL_HAS_INFINITY__ = 1 +const __DBL_HAS_QUIET_NAN__ = 1 +const __DBL_IS_IEC_60559__ = 2 +const __DBL_MANT_DIG__ = 53 +const __DBL_MAX_10_EXP__ = 308 +const __DBL_MAX_EXP__ = 1024 +const __DBL_MIN_10_EXP__ = -307 +const __DBL_MIN_EXP__ = -1021 +const __DEC128_EPSILON__ = 0 +const __DEC128_MANT_DIG__ = 34 +const __DEC128_MAX_EXP__ = 6145 +const __DEC128_MAX__ = 0 +const __DEC128_MIN_EXP__ = -6142 +const __DEC128_MIN__ = 0 +const __DEC128_SUBNORMAL_MIN__ = 0 +const __DEC32_EPSILON__ = 0 +const __DEC32_MANT_DIG__ = 7 +const __DEC32_MAX_EXP__ = 97 +const __DEC32_MAX__ = 0 +const __DEC32_MIN_EXP__ = -94 +const __DEC32_MIN__ = 0 +const __DEC32_SUBNORMAL_MIN__ = 0 +const __DEC64_EPSILON__ = 0 +const __DEC64_MANT_DIG__ = 16 +const __DEC64_MAX_EXP__ = 385 +const __DEC64_MAX__ = 0 +const __DEC64_MIN_EXP__ = -382 +const __DEC64_MIN__ = 0 +const __DEC64_SUBNORMAL_MIN__ = 0 +const __DECIMAL_BID_FORMAT__ = 1 +const __DECIMAL_DIG__ = 17 +const __DEC_EVAL_METHOD__ = 2 +const __ELF__ = 1 +const __FINITE_MATH_ONLY__ = 0 +const __FLOAT_WORD_ORDER__ = 1234 +const __FLT128_DECIMAL_DIG__ = 36 +const __FLT128_DENORM_MIN__ = 0 +const __FLT128_DIG__ = 33 +const __FLT128_EPSILON__ = 0 +const __FLT128_HAS_DENORM__ = 1 +const __FLT128_HAS_INFINITY__ = 1 +const __FLT128_HAS_QUIET_NAN__ = 1 +const __FLT128_IS_IEC_60559__ = 2 +const __FLT128_MANT_DIG__ = 113 +const __FLT128_MAX_10_EXP__ = 4932 +const __FLT128_MAX_EXP__ = 16384 +const __FLT128_MAX__ = 0 +const __FLT128_MIN_10_EXP__ = -4931 +const __FLT128_MIN_EXP__ = -16381 +const __FLT128_MIN__ = 0 +const __FLT128_NORM_MAX__ = 0 +const __FLT32X_DECIMAL_DIG__ = 17 +const __FLT32X_DENORM_MIN__ = 0 +const __FLT32X_DIG__ = 15 +const __FLT32X_EPSILON__ = 0 +const __FLT32X_HAS_DENORM__ = 1 +const __FLT32X_HAS_INFINITY__ = 1 +const __FLT32X_HAS_QUIET_NAN__ = 1 +const __FLT32X_IS_IEC_60559__ = 2 +const __FLT32X_MANT_DIG__ = 53 +const __FLT32X_MAX_10_EXP__ = 308 +const __FLT32X_MAX_EXP__ = 1024 +const __FLT32X_MAX__ = 0 +const __FLT32X_MIN_10_EXP__ = -307 +const __FLT32X_MIN_EXP__ = -1021 +const __FLT32X_MIN__ = 0 +const __FLT32X_NORM_MAX__ = 0 +const __FLT32_DECIMAL_DIG__ = 9 +const __FLT32_DENORM_MIN__ = 0 +const __FLT32_DIG__ = 6 +const __FLT32_EPSILON__ = 0 +const __FLT32_HAS_DENORM__ = 1 +const __FLT32_HAS_INFINITY__ = 1 +const __FLT32_HAS_QUIET_NAN__ = 1 +const __FLT32_IS_IEC_60559__ = 2 +const __FLT32_MANT_DIG__ = 24 +const __FLT32_MAX_10_EXP__ = 38 +const __FLT32_MAX_EXP__ = 128 +const __FLT32_MAX__ = 0 +const __FLT32_MIN_10_EXP__ = -37 +const __FLT32_MIN_EXP__ = -125 +const __FLT32_MIN__ = 0 +const __FLT32_NORM_MAX__ = 0 +const __FLT64X_DECIMAL_DIG__ = 36 +const __FLT64X_DENORM_MIN__ = 0 +const __FLT64X_DIG__ = 33 +const __FLT64X_EPSILON__ = 0 +const __FLT64X_HAS_DENORM__ = 1 +const __FLT64X_HAS_INFINITY__ = 1 +const __FLT64X_HAS_QUIET_NAN__ = 1 +const __FLT64X_IS_IEC_60559__ = 2 +const __FLT64X_MANT_DIG__ = 113 +const __FLT64X_MAX_10_EXP__ = 4932 +const __FLT64X_MAX_EXP__ = 16384 +const __FLT64X_MAX__ = 0 +const __FLT64X_MIN_10_EXP__ = -4931 +const __FLT64X_MIN_EXP__ = -16381 +const __FLT64X_MIN__ = 0 +const __FLT64X_NORM_MAX__ = 0 +const __FLT64_DECIMAL_DIG__ = 17 +const __FLT64_DENORM_MIN__ = 0 +const __FLT64_DIG__ = 15 +const __FLT64_EPSILON__ = 0 +const __FLT64_HAS_DENORM__ = 1 +const __FLT64_HAS_INFINITY__ = 1 +const __FLT64_HAS_QUIET_NAN__ = 1 +const __FLT64_IS_IEC_60559__ = 2 +const __FLT64_MANT_DIG__ = 53 +const __FLT64_MAX_10_EXP__ = 308 +const __FLT64_MAX_EXP__ = 1024 +const __FLT64_MAX__ = 0 +const __FLT64_MIN_10_EXP__ = -307 +const __FLT64_MIN_EXP__ = -1021 +const __FLT64_MIN__ = 0 +const __FLT64_NORM_MAX__ = 0 +const __FLT_DECIMAL_DIG__ = 9 +const __FLT_DENORM_MIN__ = 0 +const __FLT_DIG__ = 6 +const __FLT_EPSILON__ = 0 +const __FLT_EVAL_METHOD_TS_18661_3__ = 2 +const __FLT_EVAL_METHOD__ = 2 +const __FLT_HAS_DENORM__ = 1 +const __FLT_HAS_INFINITY__ = 1 +const __FLT_HAS_QUIET_NAN__ = 1 +const __FLT_IS_IEC_60559__ = 2 +const __FLT_MANT_DIG__ = 24 +const __FLT_MAX_10_EXP__ = 38 +const __FLT_MAX_EXP__ = 128 +const __FLT_MAX__ = 0 +const __FLT_MIN_10_EXP__ = -37 +const __FLT_MIN_EXP__ = -125 +const __FLT_MIN__ = 0 +const __FLT_NORM_MAX__ = 0 +const __FLT_RADIX__ = 2 +const __FUNCTION__ = 0 +const __GCC_ASM_FLAG_OUTPUTS__ = 1 +const __GCC_ATOMIC_BOOL_LOCK_FREE = 2 +const __GCC_ATOMIC_CHAR16_T_LOCK_FREE = 2 +const __GCC_ATOMIC_CHAR32_T_LOCK_FREE = 2 +const __GCC_ATOMIC_CHAR_LOCK_FREE = 2 +const __GCC_ATOMIC_INT_LOCK_FREE = 2 +const __GCC_ATOMIC_LLONG_LOCK_FREE = 2 +const __GCC_ATOMIC_LONG_LOCK_FREE = 2 +const __GCC_ATOMIC_POINTER_LOCK_FREE = 2 +const __GCC_ATOMIC_SHORT_LOCK_FREE = 2 +const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = 1 +const __GCC_ATOMIC_WCHAR_T_LOCK_FREE = 2 +const __GCC_CONSTRUCTIVE_SIZE = 64 +const __GCC_DESTRUCTIVE_SIZE = 64 +const __GCC_HAVE_DWARF2_CFI_ASM = 1 +const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 = 1 +const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 = 1 +const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 = 1 +const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 = 1 +const __GCC_IEC_559 = 2 +const __GCC_IEC_559_COMPLEX = 2 +const __GNUC_EXECUTION_CHARSET_NAME = "UTF-8" +const __GNUC_MINOR__ = 2 +const __GNUC_PATCHLEVEL__ = 0 +const __GNUC_STDC_INLINE__ = 1 +const __GNUC_WIDE_EXECUTION_CHARSET_NAME = "UTF-32LE" +const __GNUC__ = 12 +const __GXX_ABI_VERSION = 1017 +const __HAVE_SPECULATION_SAFE_VALUE = 1 +const __ILP32__ = 1 +const __INT16_MAX__ = 32767 +const __INT32_MAX__ = 2147483647 +const __INT32_TYPE__ = 0 +const __INT64_MAX__ = 9223372036854775807 +const __INT8_MAX__ = 127 +const __INTMAX_MAX__ = 9223372036854775807 +const __INTMAX_WIDTH__ = 64 +const __INTPTR_MAX__ = 2147483647 +const __INTPTR_TYPE__ = 0 +const __INTPTR_WIDTH__ = 32 +const __INT_FAST16_MAX__ = 2147483647 +const __INT_FAST16_TYPE__ = 0 +const __INT_FAST16_WIDTH__ = 32 +const __INT_FAST32_MAX__ = 2147483647 +const __INT_FAST32_TYPE__ = 0 +const __INT_FAST32_WIDTH__ = 32 +const __INT_FAST64_MAX__ = 9223372036854775807 +const __INT_FAST64_WIDTH__ = 64 +const __INT_FAST8_MAX__ = 127 +const __INT_FAST8_WIDTH__ = 8 +const __INT_LEAST16_MAX__ = 32767 +const __INT_LEAST16_WIDTH__ = 16 +const __INT_LEAST32_MAX__ = 2147483647 +const __INT_LEAST32_TYPE__ = 0 +const __INT_LEAST32_WIDTH__ = 32 +const __INT_LEAST64_MAX__ = 9223372036854775807 +const __INT_LEAST64_WIDTH__ = 64 +const __INT_LEAST8_MAX__ = 127 +const __INT_LEAST8_WIDTH__ = 8 +const __INT_MAX__ = 2147483647 +const __INT_WIDTH__ = 32 +const __LAHF_SAHF__ = 1 +const __LDBL_DECIMAL_DIG__ = 17 +const __LDBL_DENORM_MIN__ = 0 +const __LDBL_DIG__ = 15 +const __LDBL_EPSILON__ = 0 +const __LDBL_HAS_DENORM__ = 1 +const __LDBL_HAS_INFINITY__ = 1 +const __LDBL_HAS_QUIET_NAN__ = 1 +const __LDBL_IS_IEC_60559__ = 2 +const __LDBL_MANT_DIG__ = 53 +const __LDBL_MAX_10_EXP__ = 308 +const __LDBL_MAX_EXP__ = 1024 +const __LDBL_MAX__ = 0 +const __LDBL_MIN_10_EXP__ = -307 +const __LDBL_MIN_EXP__ = -1021 +const __LDBL_MIN__ = 0 +const __LDBL_NORM_MAX__ = 0 +const __LITTLE_ENDIAN = 1234 +const __LONG_DOUBLE_64__ = 1 +const __LONG_LONG_MAX__ = 9223372036854775807 +const __LONG_LONG_WIDTH__ = 64 +const __LONG_MAX = 2147483647 +const __LONG_MAX__ = 2147483647 +const __LONG_WIDTH__ = 32 +const __NO_INLINE__ = 1 +const __ORDER_BIG_ENDIAN__ = 4321 +const __ORDER_LITTLE_ENDIAN__ = 1234 +const __ORDER_PDP_ENDIAN__ = 3412 +const __PDP_ENDIAN = 3412 +const __PIC__ = 2 +const __PIE__ = 2 +const __PRAGMA_REDEFINE_EXTNAME = 1 +const __PRETTY_FUNCTION__ = 0 +const __PTRDIFF_MAX__ = 2147483647 +const __PTRDIFF_TYPE__ = 0 +const __PTRDIFF_WIDTH__ = 32 +const __SCHAR_MAX__ = 127 +const __SCHAR_WIDTH__ = 8 +const __SEG_FS = 1 +const __SEG_GS = 1 +const __SHRT_MAX__ = 32767 +const __SHRT_WIDTH__ = 16 +const __SIG_ATOMIC_MAX__ = 2147483647 +const __SIG_ATOMIC_MIN__ = -2147483648 +const __SIG_ATOMIC_TYPE__ = 0 +const __SIG_ATOMIC_WIDTH__ = 32 +const __SIZEOF_DOUBLE__ = 8 +const __SIZEOF_FLOAT128__ = 16 +const __SIZEOF_FLOAT80__ = 12 +const __SIZEOF_FLOAT__ = 4 +const __SIZEOF_INT__ = 4 +const __SIZEOF_LONG_DOUBLE__ = 8 +const __SIZEOF_LONG_LONG__ = 8 +const __SIZEOF_LONG__ = 4 +const __SIZEOF_POINTER__ = 4 +const __SIZEOF_PTRDIFF_T__ = 4 +const __SIZEOF_SHORT__ = 2 +const __SIZEOF_SIZE_T__ = 4 +const __SIZEOF_WCHAR_T__ = 4 +const __SIZEOF_WINT_T__ = 4 +const __SIZE_MAX__ = 4294967295 +const __SIZE_WIDTH__ = 32 +const __STDC_HOSTED__ = 0 +const __STDC_VERSION__ = 199901 +const __STDC__ = 1 +const __STRICT_ANSI__ = 1 +const __UINT16_MAX__ = 65535 +const __UINT32_MAX__ = 4294967295 +const __UINT64_MAX__ = 18446744073709551615 +const __UINT8_MAX__ = 255 +const __UINTMAX_MAX__ = 18446744073709551615 +const __UINTPTR_MAX__ = 4294967295 +const __UINT_FAST16_MAX__ = 4294967295 +const __UINT_FAST32_MAX__ = 4294967295 +const __UINT_FAST64_MAX__ = 18446744073709551615 +const __UINT_FAST8_MAX__ = 255 +const __UINT_LEAST16_MAX__ = 65535 +const __UINT_LEAST32_MAX__ = 4294967295 +const __UINT_LEAST64_MAX__ = 18446744073709551615 +const __UINT_LEAST8_MAX__ = 255 +const __USE_TIME_BITS64 = 1 +const __VERSION__ = "12.2.0" +const __WCHAR_MAX__ = 2147483647 +const __WCHAR_MIN__ = -2147483648 +const __WCHAR_WIDTH__ = 32 +const __WINT_MAX__ = 4294967295 +const __WINT_MIN__ = 0 +const __WINT_WIDTH__ = 32 +const __code_model_32__ = 1 +const __gnu_linux__ = 1 +const __i386 = 1 +const __i386__ = 1 +const __i686 = 1 +const __i686__ = 1 +const __inline = 0 +const __linux = 1 +const __linux__ = 1 +const __pentiumpro = 1 +const __pentiumpro__ = 1 +const __pic__ = 2 +const __pie__ = 2 +const __restrict = 0 +const __restrict_arr = 0 +const __unix = 1 +const __unix__ = 1 +const complex1 = 0 +const math_errhandling = 2 + +type t__builtin_va_list = uintptr + +type t__predefined_size_t = uint32 + +type t__predefined_wchar_t = int32 + +type t__predefined_ptrdiff_t = int32 + +type Tuintptr_t = uint32 + +type Tintptr_t = int32 + +type Tint8_t = int8 + +type Tint16_t = int16 + +type Tint32_t = int32 + +type Tint64_t = int64 + +type Tintmax_t = int64 + +type Tuint8_t = uint8 + +type Tuint16_t = uint16 + +type Tuint32_t = uint32 + +type Tuint64_t = uint64 + +type Tuintmax_t = uint64 + +type Tint_fast8_t = int8 + +type Tint_fast64_t = int64 + +type Tint_least8_t = int8 + +type Tint_least16_t = int16 + +type Tint_least32_t = int32 + +type Tint_least64_t = int64 + +type Tuint_fast8_t = uint8 + +type Tuint_fast64_t = uint64 + +type Tuint_least8_t = uint8 + +type Tuint_least16_t = uint16 + +type Tuint_least32_t = uint32 + +type Tuint_least64_t = uint64 + +type Tint_fast16_t = int32 + +type Tint_fast32_t = int32 + +type Tuint_fast16_t = uint32 + +type Tuint_fast32_t = uint32 + +type Tfloat_t = float64 + +type Tdouble_t = float64 + +var _k = uint32(1799) /* constant for reduction */ +var _kln2 = float64(1246.9717778273416) /* k * ln2 */ + +// C documentation +// +// /* +// * Compute exp(x), scaled to avoid spurious overflow. An exponent is +// * returned separately in 'expt'. +// * +// * Input: ln(DBL_MAX) <= x < ln(2 * DBL_MAX / DBL_MIN_DENORM) ~= 1454.91 +// * Output: 2**1023 <= y < 2**1024 +// */ +func ___frexp_exp(tls *TLS, x float64, expt uintptr) (r float64) { + var exp_x float64 + var hx Tuint32_t + var v1 Tuint64_t + _, _, _ = exp_x, hx, v1 + /* + * We use exp(x) = exp(x - kln2) * 2**k, carefully chosen to + * minimize |exp(kln2) - 2**k|. We also scale the exponent of + * exp_x to MAX_EXP so that the result can be multiplied by + * a tiny number without losing accuracy due to denormalization. + */ + exp_x = Xexp(tls, x-_kln2) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&exp_x)) >> int32(32)) + *(*int32)(unsafe.Pointer(expt)) = int32(hx>>Int32FromInt32(20) - uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1023)) + _k) + v1 = uint64(hx&Uint32FromInt32(0xfffff)|uint32((Int32FromInt32(0x3ff)+Int32FromInt32(1023))<= ln(DBL_MAX)) +// * where care is needed to avoid overflow. +// * +// * The present implementation is narrowly tailored for our hyperbolic and +// * exponential functions. We assume expt is small (0 or -1), and the caller +// * has filtered out very large x, for which overflow would be inevitable. +// */ +func X__ldexp_cexp(tls *TLS, z complex128, expt int32) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v expt=%v, (%v:)", tls, z, expt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float64 + var half_expt int32 + var v1, v2 Tuint64_t + var v3 [2]float64 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_exp(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + /* + * Arrange so that scale1 * scale2 == 2**expt. We use this to + * compensate for scalbn being horrendously slow. + */ + half_expt = expt / int32(2) + v1 = uint64((Int32FromInt32(0x3ff)+half_expt)<>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(127)) + _k1) + v1 = hx&uint32(0x7fffff) | uint32((Int32FromInt32(0x7f)+Int32FromInt32(127))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float32 + var half_expt int32 + var v1, v2 Tuint32_t + var v3 [2]float32 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_expf(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + half_expt = expt / int32(2) + v1 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale1 = *(*float32)(unsafe.Pointer(&v1)) + half_expt = expt - half_expt + v2 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale2 = *(*float32)(unsafe.Pointer(&v2)) + v3 = [2]float32{ + 0: Xcosf(tls, y) * exp_x * scale1 * scale2, + 1: Xsinf(tls, y) * exp_x * scale1 * scale2, + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +func Xcabs(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypot(tls, Float64FromComplex128(z), +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypotf(tls, Float32FromComplex64(z), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcabs(tls, Complex128FromComplex128(z)) +} + +const M_PI_21 = 1.5707963267948966 + +// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 + +/* acos(z) = pi/2 - asin(z) */ + +func Xcacos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + z = Xcasin(tls, z) + v1 = [2]float64{ + 0: float64(1.5707963267948966) - Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +var _float_pi_2 = float32(1.5707963267948966) + +func Xcacosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + z = Xcasinf(tls, z) + v1 = [2]float32{ + 0: _float_pi_2 - Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +const M_PI_22 = 0 + +/* acosh(z) = i acos(z) */ + +func Xcacosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint64 + var v3, v4 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float64)(unsafe.Pointer(bp)) = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(63)) + z = Xcacos(tls, z) + if zineg != 0 { + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint32 + var v3, v4 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(31)) + z = Xcacosf(tls, z) + if zineg != 0 { + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacosh(tls, Complex128FromComplex128(z))) +} + +func Xcacosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacos(tls, Complex128FromComplex128(z))) +} + +func Xcarg(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2(tls, +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], Float64FromComplex128(z)) +} + +func Xcargf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2f(tls, +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], Float32FromComplex64(z)) +} + +func Xcargl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcarg(tls, Complex128FromComplex128(z)) +} + +// FIXME + +/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ + +func Xcasin(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex128 + var x, y float64 + var v1, v2, v3 [2]float64 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float64{ + 0: float64(1) - (x-y)*(x+y), + 1: -Float64FromFloat64(2) * x * y, + } + w = *(*complex128)(unsafe.Pointer(&v1)) + v2 = [2]float64{ + 0: -y, + 1: x, + } + r = Xclog(tls, *(*complex128)(unsafe.Pointer(&v2))+Xcsqrt(tls, w)) + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float64FromComplex128(r), + } + return *(*complex128)(unsafe.Pointer(&v3)) +} + +// FIXME + +func Xcasinf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex64 + var x, y float32 + var v1, v2, v3 [2]float32 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float32{ + 0: float32(Float64FromFloat64(1) - float64((x-y)*(x+y))), + 1: float32(-Float64FromFloat64(2) * float64(x) * float64(y)), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + v2 = [2]float32{ + 0: -y, + 1: x, + } + r = Xclogf(tls, *(*complex64)(unsafe.Pointer(&v2))+Xcsqrtf(tls, w)) + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float32FromComplex64(r), + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +/* asinh(z) = -i asin(i z) */ + +func Xcasinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcasin(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcasinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcasinf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcasinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasinh(tls, Complex128FromComplex128(z))) +} + +func Xcasinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasin(tls, Complex128FromComplex128(z))) +} + +const MAXNUM = 0 +const M_PI1 = 3.141592653589793 + +var _DP1 = float64(3.141592651605606) +var _DP2 = float64(1.9841871479187034e-09) +var _DP3 = float64(1.1442377452219664e-17) + +func __redupi(tls *TLS, x float64) (r float64) { + var i int32 + var t float64 + _, _ = i, t + t = x / float64(3.141592653589793) + if t >= float64(0) { + t += float64(0.5) + } else { + t -= float64(0.5) + } + i = int32(t) /* the multiple */ + t = float64(i) + t = x - t*_DP1 - t*_DP2 - t*_DP3 + return t +} + +func Xcatan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float64 + var w complex128 + var v1 [2]float64 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = float64(1) - x2 - y*y + t = float64(0.5) * Xatan2(tls, float64(2)*x, a) + w = Complex128FromFloat64(__redupi(tls, t)) + t = y - float64(1) + a = x2 + t*t + t = y + float64(1) + a = (x2 + t*t) / a + v1 = [2]float64{ + 0: Float64FromComplex128(w), + 1: float64(0.25) * Xlog(tls, a), + } + w = *(*complex128)(unsafe.Pointer(&v1)) + return w +} + +const MAXNUMF = 0 + +var _DP11 = float64(3.140625) +var _DP21 = float64(0.0009675025939941406) +var _DP31 = float64(1.5099579909783765e-07) + +var _float_pi = float32(3.141592653589793) + +func __redupif(tls *TLS, xx float32) (r float32) { + var i int32 + var t, x float32 + _, _, _ = i, t, x + x = xx + t = x / _float_pi + if t >= Float32FromFloat32(0) { + t += Float32FromFloat32(0.5) + } else { + t -= Float32FromFloat32(0.5) + } + i = int32(t) /* the multiple */ + t = float32(i) + t = float32(float64(x) - float64(t)*_DP11 - float64(t)*_DP21 - float64(t)*_DP31) + return t +} + +func Xcatanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float32 + var w complex64 + var v1 [2]float32 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = Float32FromFloat32(1) - x2 - y*y + t = Float32FromFloat32(0.5) * Xatan2f(tls, Float32FromFloat32(2)*x, a) + w = Complex64FromFloat32(__redupif(tls, t)) + t = y - Float32FromFloat32(1) + a = x2 + t*t + t = y + Float32FromFloat32(1) + a = (x2 + t*t) / a + v1 = [2]float32{ + 0: Float32FromComplex64(w), + 1: Float32FromFloat32(0.25) * Xlogf(tls, a), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + return w +} + +const M_PI2 = 0 + +/* atanh = -i atan(i z) */ + +func Xcatanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcatan(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcatanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcatanf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcatanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatanh(tls, Complex128FromComplex128(z))) +} + +func Xcatanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatan(tls, Complex128FromComplex128(z))) +} + +/* cos(z) = cosh(i z) */ + +func Xccos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return Xccosh(tls, *(*complex128)(unsafe.Pointer(&v1))) +} + +func Xccosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return Xccoshf(tls, *(*complex64)(unsafe.Pointer(&v1))) +} + +var _huge = float64(8.98846567431158e+307) + +func Xccosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xcosh(tls, x), + 1: x * y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xcosh(tls, x) * Xcos(tls, y), + 1: Xsinh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: h * Xcos(tls, y), + 1: Xcopysign(tls, h, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] * Xcopysign(tls, Float64FromInt32(1), x), + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge * x + v6 = [2]float64{ + 0: h * h * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: y - y, + 1: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. + * + * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. + * The sign of 0 in the result is unspecified. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), x) * y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), (x+x)*y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * cosh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * cosh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * cosh(+-Inf + I NaN) = +Inf + I d(NaN). + * + * cosh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * x * Xcos(tls, y), + 1: x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * cosh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * cosh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge1 = float32(1.7014118346046923e+38) + +func Xccoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xcoshf(tls, x), + 1: x * y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xcoshf(tls, x) * Xcosf(tls, y), + 1: Xsinhf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: Xcopysignf(tls, h, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] * Xcopysignf(tls, Float32FromInt32(1), x), + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge1 * x + v6 = [2]float32{ + 0: h * h * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: y - y, + 1: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), x) * y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), (x+x)*y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * x * Xcosf(tls, y), + 1: x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xccoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccosh(tls, Complex128FromComplex128(z))) +} + +func Xccosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccos(tls, Complex128FromComplex128(z))) +} + +var _exp_ovfl = uint32(0x40862e42) /* high bits of MAX_EXP * ln2 ~= 710 */ +var _cexp_ovfl = uint32(0x4096b8e4) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexp(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var exp_x, x, y float64 + var hx, hy, lx, ly Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, exp_x, hx, hy, lx, ly, x, y, v1, v2, v3, v4, v5, v6 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = uint32(__u >> int32(32)) + ly = uint32(__u) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy|ly == uint32(0) { + v1 = [2]float64{ + 0: Xexp(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff)|lx == uint32(0) { + v2 = [2]float64{ + 0: Xcos(tls, y), + 1: Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7ff00000) { + if lx != uint32(0) || hx&uint32(0x7fffffff) != uint32(0x7ff00000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float64{ + 0: y - y, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float64{} + return *(*complex128)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float64{ + 0: x, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl && hx <= _cexp_ovfl { + /* + * x is between 709.7 and 1454.3, so we must scale to avoid + * overflow in exp(x). + */ + return X__ldexp_cexp(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexp(tls, x) + v6 = [2]float64{ + 0: exp_x * Xcos(tls, y), + 1: exp_x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + return r +} + +var _exp_ovfl1 = uint32(0x42b17218) /* MAX_EXP * ln2 ~= 88.722839355 */ +var _cexp_ovfl1 = uint32(0x43400074) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexpf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var exp_x, x, y float32 + var hx, hy Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float32 + _, _, _, _, _, _, _, _, _, _, _ = exp_x, hx, hy, x, y, v1, v2, v3, v4, v5, v6 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hy = *(*Tuint32_t)(unsafe.Pointer(&y)) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy == uint32(0) { + v1 = [2]float32{ + 0: Xexpf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff) == uint32(0) { + v2 = [2]float32{ + 0: Xcosf(tls, y), + 1: Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7f800000) { + if hx&uint32(0x7fffffff) != uint32(0x7f800000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float32{ + 0: y - y, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float32{} + return *(*complex64)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float32{ + 0: x, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl1 && hx <= _cexp_ovfl1 { + /* + * x is between 88.7 and 192, so we must scale to avoid + * overflow in expf(x). + */ + return X__ldexp_cexpf(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexpf(tls, x) + v6 = [2]float32{ + 0: exp_x * Xcosf(tls, y), + 1: exp_x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcexpl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcexp(tls, Complex128FromComplex128(z))) +} + +func Xcimag(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +// FIXME + +/* log(z) = log(|z|) + i arg(z) */ + +func Xclog(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float64 + var v1 [2]float64 + _, _, _ = phi, r, v1 + r = Xcabs(tls, z) + phi = Xcarg(tls, z) + v1 = [2]float64{ + 0: Xlog(tls, r), + 1: phi, + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +func Xclogf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float32 + var v1 [2]float32 + _, _, _ = phi, r, v1 + r = Xcabsf(tls, z) + phi = Xcargf(tls, z) + v1 = [2]float32{ + 0: Xlogf(tls, r), + 1: phi, + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xclogl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xclog(tls, Complex128FromComplex128(z))) +} + +func Xconj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +func Xconjf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xconjl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ + +func Xcpow(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexp(tls, c*Xclog(tls, z)) +} + +func Xcpowf(tls *TLS, z complex64, c complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexpf(tls, c*Xclogf(tls, z)) +} + +func Xcpowl(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcpow(tls, Complex128FromComplex128(z), Complex128FromComplex128(c))) +} + +func Xcproj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 bool + var v6 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = Float64FromComplex128(z) + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 bool + var v6 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = Float32FromComplex64(z) + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) == uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v6 = [2]float32{ + 0: X__builtin_inff(tls), + 1: Xcopysignf(tls, float32(0), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return z +} + +func Xcprojl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcproj(tls, Complex128FromComplex128(z))) +} + +func Xcreal(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +func Xcrealf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float32FromComplex64(z) +} + +func Xcreall(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +/* sin(z) = -i sinh(i z) */ + +func Xcsin(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcsinh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcsinf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcsinhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +var _huge2 = float64(8.98846567431158e+307) + +func Xcsinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xsinh(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xsinh(tls, x) * Xcos(tls, y), + 1: Xcosh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: Xcopysign(tls, h, x) * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z) * Xcopysign(tls, Float64FromInt32(1), x), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge2 * x + v6 = [2]float64{ + 0: h * Xcos(tls, y), + 1: h * h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * sinh(+-Inf +- I 0) = +-Inf + I +-0. + * + * sinh(NaN +- I 0) = d(NaN) + I +-0. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x, + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x, + 1: Xcopysign(tls, Float64FromInt32(0), y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * sinh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * sinh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). + * The sign of Inf in the result is unspecified. Choice = normally + * the same as d(NaN). + * + * sinh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * Xcos(tls, y), + 1: float64(X__builtin_inff(tls)) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * sinh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * sinh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge3 = float32(1.7014118346046923e+38) + +func Xcsinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xsinhf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xsinhf(tls, x) * Xcosf(tls, y), + 1: Xcoshf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: Xcopysignf(tls, h, x) * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z) * Xcopysignf(tls, Float32FromInt32(1), x), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge3 * x + v6 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: h * h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x, + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * Xcosf(tls, y), + 1: X__builtin_inff(tls) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xcsinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsinh(tls, Complex128FromComplex128(z))) +} + +func Xcsinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsin(tls, Complex128FromComplex128(z))) +} + +const THRESH = 7.446288774449766e+307 + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ + +func Xcsqrt(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b, t float64 + var result complex128 + var scale int32 + var v1, v12, v13, v14, v15, v4, v7 [2]float64 + var v10, v2, v5, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, result, scale, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float64FromComplex128(z) + b = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex128FromInt32(0) { + v1 = [2]float64{ + 1: b, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + *(*float64)(unsafe.Pointer(bp)) = b + v2 = *(*uint64)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + v12 = [2]float64{ + 0: Xfabs(tls, b-b), + 1: Xcopysign(tls, a, b), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float64{ + 0: a, + 1: Xcopysign(tls, b-b, b), + } + return *(*complex128)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* Scale to avoid overflow. */ + if Xfabs(tls, a) >= float64(7.446288774449766e+307) || Xfabs(tls, b) >= float64(7.446288774449766e+307) { + a *= float64(0.25) + b *= float64(0.25) + scale = int32(1) + } else { + scale = 0 + } + /* Algorithm 312, CACM vol 10, Oct 1967. */ + if a >= Float64FromInt32(0) { + t = Xsqrt(tls, (a+Xhypot(tls, a, b))*float64(0.5)) + v14 = [2]float64{ + 0: t, + 1: b / (Float64FromInt32(2) * t), + } + result = *(*complex128)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (-a+Xhypot(tls, a, b))*float64(0.5)) + v15 = [2]float64{ + 0: Xfabs(tls, b) / (Float64FromInt32(2) * t), + 1: Xcopysign(tls, t, b), + } + result = *(*complex128)(unsafe.Pointer(&v15)) + } + /* Rescale. */ + if scale != 0 { + result *= Complex128FromInt32(2) + } + return result +} + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +func Xcsqrtf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b float32 + var t float64 + var v1, v12, v13, v14, v15, v4, v7 [2]float32 + var v10, v2, v5, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float32FromComplex64(z) + b = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex64FromInt32(0) { + v1 = [2]float32{ + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + *(*float32)(unsafe.Pointer(bp)) = b + v2 = *(*uint32)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v4 = [2]float32{ + 0: X__builtin_inff(tls), + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = a + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + if BoolInt32(v5&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + t = float64((b - b) / (b - b)) /* raise invalid if b is not a NaN */ + v7 = [2]float32{ + 0: a, + 1: float32(t), + } + return *(*complex64)(unsafe.Pointer(&v7)) /* return NaN + NaN i */ + } + *(*float32)(unsafe.Pointer(bp)) = a + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if BoolInt32(v8&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + /* + * csqrtf(inf + NaN i) = inf + NaN i + * csqrtf(inf + y i) = inf + 0 i + * csqrtf(-inf + NaN i) = NaN +- inf i + * csqrtf(-inf + y i) = 0 + inf i + */ + *(*float32)(unsafe.Pointer(bp)) = a + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v12 = [2]float32{ + 0: Xfabsf(tls, b-b), + 1: Xcopysignf(tls, a, b), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float32{ + 0: a, + 1: Xcopysignf(tls, b-b, b), + } + return *(*complex64)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* + * We compute t in double precision to avoid overflow and to + * provide correct rounding in nearly all cases. + * This is Algorithm 312, CACM vol 10, Oct 1967. + */ + if a >= Float32FromInt32(0) { + t = Xsqrt(tls, (float64(a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v14 = [2]float32{ + 0: float32(t), + 1: float32(float64(b) / (Float64FromFloat64(2) * t)), + } + return *(*complex64)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (float64(-a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v15 = [2]float32{ + 0: float32(float64(Xfabsf(tls, b)) / (Float64FromFloat64(2) * t)), + 1: Xcopysignf(tls, float32(t), b), + } + return *(*complex64)(unsafe.Pointer(&v15)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcsqrtl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsqrt(tls, Complex128FromComplex128(z))) +} + +/* tan(z) = -i tanh(i z) */ + +func Xctan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xctanh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xctanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xctanhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xctanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, v3 Tuint64_t + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float64 + var hx, ix, lx Tuint32_t + var v1, v10, v12, v13, v4 [2]float64 + var v6, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, beta, denom, exp_mx, hx, ix, lx, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + ix = hx & uint32(0x7fffffff) + /* + * ctanh(NaN + i 0) = NaN + i 0 + * + * ctanh(NaN + i y) = NaN + i NaN for y != 0 + * + * The imaginary part has the sign of x*sin(2*y), but there's no + * special effort to get this right. + * + * ctanh(+-Inf +- i Inf) = +-1 +- 0 + * + * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite + * + * The imaginary part of the sign is unspecified. This special + * case is only needed to avoid a spurious invalid exception when + * y is infinite. + */ + if ix >= uint32(0x7ff00000) { + if ix&uint32(0xfffff)|lx != 0 { /* x is NaN */ + if y == Float64FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float64{ + 0: x, + 1: v2, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + v3 = uint64(hx-Uint32FromInt32(0x40000000))<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)<= uint32(0x40360000) { /* x >= 22 */ + exp_mx = Xexp(tls, -Xfabs(tls, x)) + v12 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(1), x), + 1: Float64FromInt32(4) * Xsin(tls, y) * Xcos(tls, y) * exp_mx * exp_mx, + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* Kahan's algorithm */ + t = Xtan(tls, y) + beta = float64(1) + t*t /* = 1 / cos^2(y) */ + s = Xsinh(tls, x) + rho = Xsqrt(tls, Float64FromInt32(1)+s*s) /* = cosh(x) */ + denom = Float64FromInt32(1) + beta*s*s + v13 = [2]float64{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +func Xctanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float32 + var hx, ix, v3 Tuint32_t + var v1, v10, v12, v13, v4 [2]float32 + var v6, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = beta, denom, exp_mx, hx, ix, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + if ix&uint32(0x7fffff) != 0 { + if y == Float32FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float32{ + 0: x, + 1: v2, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + v3 = hx - uint32(0x40000000) + x = *(*float32)(unsafe.Pointer(&v3)) + *(*float32)(unsafe.Pointer(bp)) = y + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 + _7: + if BoolInt32(v6&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v5 = y + } else { + v5 = Xsinf(tls, y) * Xcosf(tls, y) + } + v4 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), v5), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = y + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if !(BoolInt32(v8&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if ix != 0 { + v11 = y - y + } else { + v11 = x + } + v10 = [2]float32{ + 0: v11, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= uint32(0x41300000) { /* x >= 11 */ + exp_mx = Xexpf(tls, -Xfabsf(tls, x)) + v12 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(1), x), + 1: Float32FromInt32(4) * Xsinf(tls, y) * Xcosf(tls, y) * exp_mx * exp_mx, + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + t = Xtanf(tls, y) + beta = float32(float64(1) + float64(t*t)) + s = Xsinhf(tls, x) + rho = Xsqrtf(tls, Float32FromInt32(1)+s*s) + denom = Float32FromInt32(1) + beta*s*s + v13 = [2]float32{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xctanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctanh(tls, Complex128FromComplex128(z))) +} + +func Xctanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctan(tls, Complex128FromComplex128(z))) +} + +const BUFSIZ = 1024 +const E2BIG = 7 +const EACCES = 13 +const EADDRINUSE = 98 +const EADDRNOTAVAIL = 99 +const EADV = 68 +const EAFNOSUPPORT = 97 +const EAGAIN = 11 +const EALREADY = 114 +const EBADE = 52 +const EBADF = 9 +const EBADFD = 77 +const EBADMSG = 74 +const EBADR = 53 +const EBADRQC = 56 +const EBADSLT = 57 +const EBFONT = 59 +const EBUSY = 16 +const ECANCELED = 125 +const ECHILD = 10 +const ECHRNG = 44 +const ECOMM = 70 +const ECONNABORTED = 103 +const ECONNREFUSED = 111 +const ECONNRESET = 104 +const EDEADLK = 35 +const EDEADLOCK = 35 +const EDESTADDRREQ = 89 +const EDOM = 33 +const EDOTDOT = 73 +const EDQUOT = 122 +const EEXIST = 17 +const EFAULT = 14 +const EFBIG = 27 +const EHOSTDOWN = 112 +const EHOSTUNREACH = 113 +const EHWPOISON = 133 +const EIDRM = 43 +const EILSEQ = 84 +const EINPROGRESS = 115 +const EINTR = 4 +const EINVAL = 22 +const EIO = 5 +const EISCONN = 106 +const EISDIR = 21 +const EISNAM = 120 +const EKEYEXPIRED = 127 +const EKEYREJECTED = 129 +const EKEYREVOKED = 128 +const EL2HLT = 51 +const EL2NSYNC = 45 +const EL3HLT = 46 +const EL3RST = 47 +const ELIBACC = 79 +const ELIBBAD = 80 +const ELIBEXEC = 83 +const ELIBMAX = 82 +const ELIBSCN = 81 +const ELNRNG = 48 +const ELOOP = 40 +const EMEDIUMTYPE = 124 +const EMFILE = 24 +const EMLINK = 31 +const EMSGSIZE = 90 +const EMULTIHOP = 72 +const ENAMETOOLONG = 36 +const ENAVAIL = 119 +const ENETDOWN = 100 +const ENETRESET = 102 +const ENETUNREACH = 101 +const ENFILE = 23 +const ENOANO = 55 +const ENOBUFS = 105 +const ENOCSI = 50 +const ENODATA = 61 +const ENODEV = 19 +const ENOENT = 2 +const ENOEXEC = 8 +const ENOKEY = 126 +const ENOLCK = 37 +const ENOLINK = 67 +const ENOMEDIUM = 123 +const ENOMEM = 12 +const ENOMSG = 42 +const ENONET = 64 +const ENOPKG = 65 +const ENOPROTOOPT = 92 +const ENOSPC = 28 +const ENOSR = 63 +const ENOSTR = 60 +const ENOSYS = 38 +const ENOTBLK = 15 +const ENOTCONN = 107 +const ENOTDIR = 20 +const ENOTEMPTY = 39 +const ENOTNAM = 118 +const ENOTRECOVERABLE = 131 +const ENOTSOCK = 88 +const ENOTSUP = 95 +const ENOTTY = 25 +const ENOTUNIQ = 76 +const ENXIO = 6 +const EOPNOTSUPP = 95 +const EOVERFLOW = 75 +const EOWNERDEAD = 130 +const EPERM = 1 +const EPFNOSUPPORT = 96 +const EPIPE = 32 +const EPROTO = 71 +const EPROTONOSUPPORT = 93 +const EPROTOTYPE = 91 +const ERANGE = 34 +const EREMCHG = 78 +const EREMOTE = 66 +const EREMOTEIO = 121 +const ERESTART = 85 +const ERFKILL = 132 +const EROFS = 30 +const ESHUTDOWN = 108 +const ESOCKTNOSUPPORT = 94 +const ESPIPE = 29 +const ESRCH = 3 +const ESRMNT = 69 +const ESTALE = 116 +const ESTRPIPE = 86 +const ETIME = 62 +const ETIMEDOUT = 110 +const ETOOMANYREFS = 109 +const ETXTBSY = 26 +const EUCLEAN = 117 +const EUNATCH = 49 +const EUSERS = 87 +const EWOULDBLOCK = 11 +const EXDEV = 18 +const EXFULL = 54 +const FILENAME_MAX = 4096 +const FOPEN_MAX = 1000 +const F_LOCK = 1 +const F_OK = 0 +const F_TEST = 3 +const F_TLOCK = 2 +const F_ULOCK = 0 +const L_ctermid = 20 +const L_tmpnam = 20 +const POSIX_CLOSE_RESTART = 0 +const P_tmpdir = "/tmp" +const R_OK = 4 +const SEEK_DATA = 3 +const SEEK_HOLE = 4 +const STDERR_FILENO = 2 +const STDIN_FILENO = 0 +const STDOUT_FILENO = 1 +const TMP_MAX = 10000 +const W_OK = 2 +const X_OK = 1 +const _CS_GNU_LIBC_VERSION = 2 +const _CS_GNU_LIBPTHREAD_VERSION = 3 +const _CS_PATH = 0 +const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = 4 +const _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 +const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 +const _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 +const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 +const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 +const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 +const _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 +const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 +const _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 +const _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 +const _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 +const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 +const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 +const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 +const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 +const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 +const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 1 +const _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 +const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 +const _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 +const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 +const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 +const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 +const _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 +const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 +const _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 +const _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 +const _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 +const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 +const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 +const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 +const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 +const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 +const _CS_POSIX_V7_THREADS_CFLAGS = 1150 +const _CS_POSIX_V7_THREADS_LDFLAGS = 1151 +const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 5 +const _CS_V6_ENV = 1148 +const _CS_V7_ENV = 1149 +const _IOFBF = 0 +const _IOLBF = 1 +const _IONBF = 2 +const _PC_2_SYMLINKS = 20 +const _PC_ALLOC_SIZE_MIN = 18 +const _PC_ASYNC_IO = 10 +const _PC_CHOWN_RESTRICTED = 6 +const _PC_FILESIZEBITS = 13 +const _PC_LINK_MAX = 0 +const _PC_MAX_CANON = 1 +const _PC_MAX_INPUT = 2 +const _PC_NAME_MAX = 3 +const _PC_NO_TRUNC = 7 +const _PC_PATH_MAX = 4 +const _PC_PIPE_BUF = 5 +const _PC_PRIO_IO = 11 +const _PC_REC_INCR_XFER_SIZE = 14 +const _PC_REC_MAX_XFER_SIZE = 15 +const _PC_REC_MIN_XFER_SIZE = 16 +const _PC_REC_XFER_ALIGN = 17 +const _PC_SOCK_MAXBUF = 12 +const _PC_SYMLINK_MAX = 19 +const _PC_SYNC_IO = 9 +const _PC_VDISABLE = 8 +const _POSIX2_C_BIND = 200809 +const _POSIX2_VERSION = 200809 +const _POSIX_ADVISORY_INFO = 200809 +const _POSIX_ASYNCHRONOUS_IO = 200809 +const _POSIX_BARRIERS = 200809 +const _POSIX_CHOWN_RESTRICTED = 1 +const _POSIX_CLOCK_SELECTION = 200809 +const _POSIX_CPUTIME = 200809 +const _POSIX_FSYNC = 200809 +const _POSIX_IPV6 = 200809 +const _POSIX_JOB_CONTROL = 1 +const _POSIX_MAPPED_FILES = 200809 +const _POSIX_MEMLOCK = 200809 +const _POSIX_MEMLOCK_RANGE = 200809 +const _POSIX_MEMORY_PROTECTION = 200809 +const _POSIX_MESSAGE_PASSING = 200809 +const _POSIX_MONOTONIC_CLOCK = 200809 +const _POSIX_NO_TRUNC = 1 +const _POSIX_RAW_SOCKETS = 200809 +const _POSIX_READER_WRITER_LOCKS = 200809 +const _POSIX_REALTIME_SIGNALS = 200809 +const _POSIX_REGEXP = 1 +const _POSIX_SAVED_IDS = 1 +const _POSIX_SEMAPHORES = 200809 +const _POSIX_SHARED_MEMORY_OBJECTS = 200809 +const _POSIX_SHELL = 1 +const _POSIX_SPAWN = 200809 +const _POSIX_SPIN_LOCKS = 200809 +const _POSIX_THREADS = 200809 +const _POSIX_THREAD_ATTR_STACKADDR = 200809 +const _POSIX_THREAD_ATTR_STACKSIZE = 200809 +const _POSIX_THREAD_CPUTIME = 200809 +const _POSIX_THREAD_PRIORITY_SCHEDULING = 200809 +const _POSIX_THREAD_PROCESS_SHARED = 200809 +const _POSIX_THREAD_SAFE_FUNCTIONS = 200809 +const _POSIX_TIMEOUTS = 200809 +const _POSIX_TIMERS = 200809 +const _POSIX_V6_ILP32_OFFBIG = 1 +const _POSIX_V7_ILP32_OFFBIG = 1 +const _POSIX_VDISABLE = 0 +const _POSIX_VERSION = 200809 +const _SC_2_CHAR_TERM = 95 +const _SC_2_C_BIND = 47 +const _SC_2_C_DEV = 48 +const _SC_2_FORT_DEV = 49 +const _SC_2_FORT_RUN = 50 +const _SC_2_LOCALEDEF = 52 +const _SC_2_PBS = 168 +const _SC_2_PBS_ACCOUNTING = 169 +const _SC_2_PBS_CHECKPOINT = 175 +const _SC_2_PBS_LOCATE = 170 +const _SC_2_PBS_MESSAGE = 171 +const _SC_2_PBS_TRACK = 172 +const _SC_2_SW_DEV = 51 +const _SC_2_UPE = 97 +const _SC_2_VERSION = 46 +const _SC_ADVISORY_INFO = 132 +const _SC_AIO_LISTIO_MAX = 23 +const _SC_AIO_MAX = 24 +const _SC_AIO_PRIO_DELTA_MAX = 25 +const _SC_ARG_MAX = 0 +const _SC_ASYNCHRONOUS_IO = 12 +const _SC_ATEXIT_MAX = 87 +const _SC_AVPHYS_PAGES = 86 +const _SC_BARRIERS = 133 +const _SC_BC_BASE_MAX = 36 +const _SC_BC_DIM_MAX = 37 +const _SC_BC_SCALE_MAX = 38 +const _SC_BC_STRING_MAX = 39 +const _SC_CHILD_MAX = 1 +const _SC_CLK_TCK = 2 +const _SC_CLOCK_SELECTION = 137 +const _SC_COLL_WEIGHTS_MAX = 40 +const _SC_CPUTIME = 138 +const _SC_DELAYTIMER_MAX = 26 +const _SC_EXPR_NEST_MAX = 42 +const _SC_FSYNC = 15 +const _SC_GETGR_R_SIZE_MAX = 69 +const _SC_GETPW_R_SIZE_MAX = 70 +const _SC_HOST_NAME_MAX = 180 +const _SC_IOV_MAX = 60 +const _SC_IPV6 = 235 +const _SC_JOB_CONTROL = 7 +const _SC_LINE_MAX = 43 +const _SC_LOGIN_NAME_MAX = 71 +const _SC_MAPPED_FILES = 16 +const _SC_MEMLOCK = 17 +const _SC_MEMLOCK_RANGE = 18 +const _SC_MEMORY_PROTECTION = 19 +const _SC_MESSAGE_PASSING = 20 +const _SC_MINSIGSTKSZ = 249 +const _SC_MONOTONIC_CLOCK = 149 +const _SC_MQ_OPEN_MAX = 27 +const _SC_MQ_PRIO_MAX = 28 +const _SC_NGROUPS_MAX = 3 +const _SC_NPROCESSORS_CONF = 83 +const _SC_NPROCESSORS_ONLN = 84 +const _SC_NZERO = 109 +const _SC_OPEN_MAX = 4 +const _SC_PAGESIZE = 30 +const _SC_PAGE_SIZE = 30 +const _SC_PASS_MAX = 88 +const _SC_PHYS_PAGES = 85 +const _SC_PRIORITIZED_IO = 13 +const _SC_PRIORITY_SCHEDULING = 10 +const _SC_RAW_SOCKETS = 236 +const _SC_READER_WRITER_LOCKS = 153 +const _SC_REALTIME_SIGNALS = 9 +const _SC_REGEXP = 155 +const _SC_RE_DUP_MAX = 44 +const _SC_RTSIG_MAX = 31 +const _SC_SAVED_IDS = 8 +const _SC_SEMAPHORES = 21 +const _SC_SEM_NSEMS_MAX = 32 +const _SC_SEM_VALUE_MAX = 33 +const _SC_SHARED_MEMORY_OBJECTS = 22 +const _SC_SHELL = 157 +const _SC_SIGQUEUE_MAX = 34 +const _SC_SIGSTKSZ = 250 +const _SC_SPAWN = 159 +const _SC_SPIN_LOCKS = 154 +const _SC_SPORADIC_SERVER = 160 +const _SC_SS_REPL_MAX = 241 +const _SC_STREAMS = 174 +const _SC_STREAM_MAX = 5 +const _SC_SYMLOOP_MAX = 173 +const _SC_SYNCHRONIZED_IO = 14 +const _SC_THREADS = 67 +const _SC_THREAD_ATTR_STACKADDR = 77 +const _SC_THREAD_ATTR_STACKSIZE = 78 +const _SC_THREAD_CPUTIME = 139 +const _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 +const _SC_THREAD_KEYS_MAX = 74 +const _SC_THREAD_PRIORITY_SCHEDULING = 79 +const _SC_THREAD_PRIO_INHERIT = 80 +const _SC_THREAD_PRIO_PROTECT = 81 +const _SC_THREAD_PROCESS_SHARED = 82 +const _SC_THREAD_ROBUST_PRIO_INHERIT = 247 +const _SC_THREAD_ROBUST_PRIO_PROTECT = 248 +const _SC_THREAD_SAFE_FUNCTIONS = 68 +const _SC_THREAD_SPORADIC_SERVER = 161 +const _SC_THREAD_STACK_MIN = 75 +const _SC_THREAD_THREADS_MAX = 76 +const _SC_TIMEOUTS = 164 +const _SC_TIMERS = 11 +const _SC_TIMER_MAX = 35 +const _SC_TRACE = 181 +const _SC_TRACE_EVENT_FILTER = 182 +const _SC_TRACE_EVENT_NAME_MAX = 242 +const _SC_TRACE_INHERIT = 183 +const _SC_TRACE_LOG = 184 +const _SC_TRACE_NAME_MAX = 243 +const _SC_TRACE_SYS_MAX = 244 +const _SC_TRACE_USER_EVENT_MAX = 245 +const _SC_TTY_NAME_MAX = 72 +const _SC_TYPED_MEMORY_OBJECTS = 165 +const _SC_TZNAME_MAX = 6 +const _SC_UIO_MAXIOV = 60 +const _SC_V6_ILP32_OFF32 = 176 +const _SC_V6_ILP32_OFFBIG = 177 +const _SC_V6_LP64_OFF64 = 178 +const _SC_V6_LPBIG_OFFBIG = 179 +const _SC_V7_ILP32_OFF32 = 237 +const _SC_V7_ILP32_OFFBIG = 238 +const _SC_V7_LP64_OFF64 = 239 +const _SC_V7_LPBIG_OFFBIG = 240 +const _SC_VERSION = 29 +const _SC_XBS5_ILP32_OFF32 = 125 +const _SC_XBS5_ILP32_OFFBIG = 126 +const _SC_XBS5_LP64_OFF64 = 127 +const _SC_XBS5_LPBIG_OFFBIG = 128 +const _SC_XOPEN_CRYPT = 92 +const _SC_XOPEN_ENH_I18N = 93 +const _SC_XOPEN_LEGACY = 129 +const _SC_XOPEN_REALTIME = 130 +const _SC_XOPEN_REALTIME_THREADS = 131 +const _SC_XOPEN_SHM = 94 +const _SC_XOPEN_STREAMS = 246 +const _SC_XOPEN_UNIX = 91 +const _SC_XOPEN_VERSION = 89 +const _SC_XOPEN_XCU_VERSION = 90 +const _SC_XOPEN_XPG2 = 98 +const _SC_XOPEN_XPG3 = 99 +const _SC_XOPEN_XPG4 = 100 +const _XOPEN_ENH_I18N = 1 +const _XOPEN_UNIX = 1 +const _XOPEN_VERSION = 700 + +type Tsize_t = uint32 + +type Tssize_t = int32 + +type Toff_t = int64 + +type Tpid_t = int32 + +type Tuid_t = uint32 + +type Tgid_t = uint32 + +type Tuseconds_t = uint32 + +type Tva_list = uintptr + +type t__isoc_va_list = uintptr + +type Tfpos_t = struct { + F__lldata [0]int64 + F__align [0]float64 + F__opaque [16]int8 +} + +type T_G_fpos64_t = Tfpos_t + +func Xconfstr(tls *TLS, name int32, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v len1=%v, (%v:)", tls, name, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = __ccgo_ts + if !(name != 0) { + s = __ccgo_ts + 1 + } else { + if uint32(name) & ^Uint32FromUint32(4) != uint32(1) && uint32(name-int32(_CS_POSIX_V6_ILP32_OFF32_CFLAGS)) > uint32(35) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint32(0) + } + } + // snprintf is overkill but avoid wasting code size to implement + // this completely useless function and its truncation semantics + return uint32(Xsnprintf(tls, buf, len1, __ccgo_ts+15, VaList(bp+8, s)) + int32(1)) +} + +const ARG_MAX = 131072 +const BC_BASE_MAX = 99 +const BC_DIM_MAX = 2048 +const BC_SCALE_MAX = 99 +const BC_STRING_MAX = 1000 +const CHARCLASS_NAME_MAX = 14 +const CHAR_BIT = 8 +const CHAR_MAX = 255 +const CHAR_MIN = 0 +const COLL_WEIGHTS_MAX = 2 +const DELAYTIMER_MAX = 2147483647 +const EXPR_NEST_MAX = 32 +const FILESIZEBITS = 64 +const HOST_NAME_MAX = 255 +const INT_MAX = 2147483647 +const INT_MIN = -2147483648 +const IOV_MAX = 1024 +const LINE_MAX = 4096 +const LLONG_MAX = 9223372036854775807 +const LLONG_MIN = -9223372036854775808 +const LOGIN_NAME_MAX = 256 +const LONG_BIT = 32 +const LONG_MAX = 2147483647 +const LONG_MIN = -2147483648 +const MB_LEN_MAX = 4 +const MQ_PRIO_MAX = 32768 +const NAME_MAX = 255 +const NGROUPS_MAX = 32 +const NL_ARGMAX = 9 +const NL_LANGMAX = 32 +const NL_MSGMAX = 32767 +const NL_SETMAX = 255 +const NL_TEXTMAX = 2048 +const NZERO = 20 +const PAGESIZE = 4096 +const PAGE_SIZE = 4096 +const PATH_MAX = 4096 +const PIPE_BUF = 4096 +const PTHREAD_DESTRUCTOR_ITERATIONS = 4 +const PTHREAD_KEYS_MAX = 128 +const PTHREAD_STACK_MIN = 2048 +const RE_DUP_MAX = 255 +const SCHAR_MAX = 127 +const SCHAR_MIN = -128 +const SEEK_CUR = 1 +const SEEK_END = 2 +const SEEK_SET = 0 +const SEM_NSEMS_MAX = 256 +const SEM_VALUE_MAX = 2147483647 +const SHRT_MAX = 32767 +const SHRT_MIN = -32768 +const SSIZE_MAX = 2147483647 +const SYMLOOP_MAX = 40 +const TTY_NAME_MAX = 32 +const TZNAME_MAX = 6 +const UCHAR_MAX = 255 +const UINT_MAX = 4294967295 +const ULLONG_MAX = 18446744073709551615 +const ULONG_MAX = 4294967295 +const USHRT_MAX = 65535 +const WORD_BIT = 32 +const _POSIX2_BC_BASE_MAX = 99 +const _POSIX2_BC_DIM_MAX = 2048 +const _POSIX2_BC_SCALE_MAX = 99 +const _POSIX2_BC_STRING_MAX = 1000 +const _POSIX2_CHARCLASS_NAME_MAX = 14 +const _POSIX2_COLL_WEIGHTS_MAX = 2 +const _POSIX2_EXPR_NEST_MAX = 32 +const _POSIX2_LINE_MAX = 2048 +const _POSIX2_RE_DUP_MAX = 255 +const _POSIX_AIO_LISTIO_MAX = 2 +const _POSIX_AIO_MAX = 1 +const _POSIX_ARG_MAX = 4096 +const _POSIX_CHILD_MAX = 25 +const _POSIX_CLOCKRES_MIN = 20000000 +const _POSIX_DELAYTIMER_MAX = 32 +const _POSIX_HOST_NAME_MAX = 255 +const _POSIX_LINK_MAX = 8 +const _POSIX_LOGIN_NAME_MAX = 9 +const _POSIX_MAX_CANON = 255 +const _POSIX_MAX_INPUT = 255 +const _POSIX_MQ_OPEN_MAX = 8 +const _POSIX_MQ_PRIO_MAX = 32 +const _POSIX_NAME_MAX = 14 +const _POSIX_NGROUPS_MAX = 8 +const _POSIX_OPEN_MAX = 20 +const _POSIX_PATH_MAX = 256 +const _POSIX_PIPE_BUF = 512 +const _POSIX_RE_DUP_MAX = 255 +const _POSIX_RTSIG_MAX = 8 +const _POSIX_SEM_NSEMS_MAX = 256 +const _POSIX_SEM_VALUE_MAX = 32767 +const _POSIX_SIGQUEUE_MAX = 32 +const _POSIX_SSIZE_MAX = 32767 +const _POSIX_SS_REPL_MAX = 4 +const _POSIX_STREAM_MAX = 8 +const _POSIX_SYMLINK_MAX = 255 +const _POSIX_SYMLOOP_MAX = 8 +const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 +const _POSIX_THREAD_KEYS_MAX = 128 +const _POSIX_THREAD_THREADS_MAX = 64 +const _POSIX_TIMER_MAX = 32 +const _POSIX_TRACE_EVENT_NAME_MAX = 30 +const _POSIX_TRACE_NAME_MAX = 8 +const _POSIX_TRACE_SYS_MAX = 8 +const _POSIX_TRACE_USER_EVENT_MAX = 32 +const _POSIX_TTY_NAME_MAX = 9 +const _POSIX_TZNAME_MAX = 6 +const _XOPEN_IOV_MAX = 16 +const _XOPEN_NAME_MAX = 255 +const _XOPEN_PATH_MAX = 1024 + +func Xfpathconf(tls *TLS, fd int32, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint32(name) >= Uint32FromInt64(42)/Uint32FromInt64(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return int32(_values[name]) +} + +var _values = [21]int16{ + 0: int16(_POSIX_LINK_MAX), + 1: int16(_POSIX_MAX_CANON), + 2: int16(_POSIX_MAX_INPUT), + 3: int16(NAME_MAX), + 4: int16(PATH_MAX), + 5: int16(PIPE_BUF), + 6: int16(1), + 7: int16(1), + 9: int16(1), + 10: int16(-int32(1)), + 11: int16(-int32(1)), + 12: int16(-int32(1)), + 13: int16(FILESIZEBITS), + 14: int16(4096), + 15: int16(4096), + 16: int16(4096), + 17: int16(4096), + 18: int16(4096), + 19: int16(-int32(1)), + 20: int16(1), +} + +const SI_LOAD_SHIFT = 16 + +type Tsysinfo = struct { + Fuptime uint32 + Floads [3]uint32 + Ftotalram uint32 + Ffreeram uint32 + Fsharedram uint32 + Fbufferram uint32 + Ftotalswap uint32 + Ffreeswap uint32 + Fprocs uint16 + Fpad uint16 + Ftotalhigh uint32 + Ffreehigh uint32 + Fmem_unit uint32 + F__reserved [256]int8 +} + +func Xget_nprocs_conf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_NPROCESSORS_CONF)) +} + +func Xget_nprocs(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_NPROCESSORS_ONLN)) +} + +func Xget_phys_pages(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_PHYS_PAGES)) +} + +func Xget_avphys_pages(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_AVPHYS_PAGES)) +} + +func Xpathconf(tls *TLS, path uintptr, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfpathconf(tls, -int32(1), name) +} + +const AT_BASE = 7 +const AT_BASE_PLATFORM = 24 +const AT_CLKTCK = 17 +const AT_DCACHEBSIZE = 19 +const AT_EGID = 14 +const AT_ENTRY = 9 +const AT_EUID = 12 +const AT_EXECFD = 2 +const AT_EXECFN = 31 +const AT_FLAGS = 8 +const AT_FPUCW = 18 +const AT_GID = 13 +const AT_HWCAP = 16 +const AT_HWCAP2 = 26 +const AT_ICACHEBSIZE = 20 +const AT_IGNORE = 1 +const AT_IGNOREPPC = 22 +const AT_L1D_CACHEGEOMETRY = 43 +const AT_L1D_CACHESHAPE = 35 +const AT_L1D_CACHESIZE = 42 +const AT_L1I_CACHEGEOMETRY = 41 +const AT_L1I_CACHESHAPE = 34 +const AT_L1I_CACHESIZE = 40 +const AT_L2_CACHEGEOMETRY = 45 +const AT_L2_CACHESHAPE = 36 +const AT_L2_CACHESIZE = 44 +const AT_L3_CACHEGEOMETRY = 47 +const AT_L3_CACHESHAPE = 37 +const AT_L3_CACHESIZE = 46 +const AT_MINSIGSTKSZ = 51 +const AT_NOTELF = 10 +const AT_NULL = 0 +const AT_PAGESZ = 6 +const AT_PHDR = 3 +const AT_PHENT = 4 +const AT_PHNUM = 5 +const AT_PLATFORM = 15 +const AT_RANDOM = 25 +const AT_SECURE = 23 +const AT_SYSINFO = 32 +const AT_SYSINFO_EHDR = 33 +const AT_UCACHEBSIZE = 21 +const AT_UID = 11 +const BUS_ADRALN = 1 +const BUS_ADRERR = 2 +const BUS_MCEERR_AO = 5 +const BUS_MCEERR_AR = 4 +const BUS_OBJERR = 3 +const CLD_CONTINUED = 6 +const CLD_DUMPED = 3 +const CLD_EXITED = 1 +const CLD_KILLED = 2 +const CLD_STOPPED = 5 +const CLD_TRAPPED = 4 +const DF_1_CONFALT = 8192 +const DF_1_DIRECT = 256 +const DF_1_DISPRELDNE = 32768 +const DF_1_DISPRELPND = 65536 +const DF_1_EDITED = 2097152 +const DF_1_ENDFILTEE = 16384 +const DF_1_GLOBAL = 2 +const DF_1_GLOBAUDIT = 16777216 +const DF_1_GROUP = 4 +const DF_1_IGNMULDEF = 262144 +const DF_1_INITFIRST = 32 +const DF_1_INTERPOSE = 1024 +const DF_1_LOADFLTR = 16 +const DF_1_NODEFLIB = 2048 +const DF_1_NODELETE = 8 +const DF_1_NODIRECT = 131072 +const DF_1_NODUMP = 4096 +const DF_1_NOHDR = 1048576 +const DF_1_NOKSYMS = 524288 +const DF_1_NOOPEN = 64 +const DF_1_NORELOC = 4194304 +const DF_1_NOW = 1 +const DF_1_ORIGIN = 128 +const DF_1_PIE = 134217728 +const DF_1_SINGLETON = 33554432 +const DF_1_STUB = 67108864 +const DF_1_SYMINTPOSE = 8388608 +const DF_1_TRANS = 512 +const DF_BIND_NOW = 8 +const DF_ORIGIN = 1 +const DF_P1_GROUPPERM = 2 +const DF_P1_LAZYLOAD = 1 +const DF_STATIC_TLS = 16 +const DF_SYMBOLIC = 2 +const DF_TEXTREL = 4 +const DTF_1_CONFEXP = 2 +const DTF_1_PARINIT = 1 +const DT_ADDRNUM = 11 +const DT_ADDRRNGHI = 1879047935 +const DT_ADDRRNGLO = 1879047680 +const DT_ALPHA_NUM = 1 +const DT_ALPHA_PLTRO = 1879048192 +const DT_AUDIT = 1879047932 +const DT_AUXILIARY = 2147483645 +const DT_BIND_NOW = 24 +const DT_CHECKSUM = 1879047672 +const DT_CONFIG = 1879047930 +const DT_DEBUG = 21 +const DT_DEPAUDIT = 1879047931 +const DT_ENCODING = 32 +const DT_EXTRANUM = 3 +const DT_FEATURE_1 = 1879047676 +const DT_FILTER = 2147483647 +const DT_FINI = 13 +const DT_FINI_ARRAY = 26 +const DT_FINI_ARRAYSZ = 28 +const DT_FLAGS = 30 +const DT_FLAGS_1 = 1879048187 +const DT_GNU_CONFLICT = 1879047928 +const DT_GNU_CONFLICTSZ = 1879047670 +const DT_GNU_HASH = 1879047925 +const DT_GNU_LIBLIST = 1879047929 +const DT_GNU_LIBLISTSZ = 1879047671 +const DT_GNU_PRELINKED = 1879047669 +const DT_HASH = 4 +const DT_HIOS = 1879044096 +const DT_HIPROC = 2147483647 +const DT_IA_64_NUM = 1 +const DT_IA_64_PLT_RESERVE = 1879048192 +const DT_INIT = 12 +const DT_INIT_ARRAY = 25 +const DT_INIT_ARRAYSZ = 27 +const DT_JMPREL = 23 +const DT_LOOS = 1610612749 +const DT_LOPROC = 1879048192 +const DT_MIPS_AUX_DYNAMIC = 1879048241 +const DT_MIPS_BASE_ADDRESS = 1879048198 +const DT_MIPS_COMPACT_SIZE = 1879048239 +const DT_MIPS_CONFLICT = 1879048200 +const DT_MIPS_CONFLICTNO = 1879048203 +const DT_MIPS_CXX_FLAGS = 1879048226 +const DT_MIPS_DELTA_CLASS = 1879048215 +const DT_MIPS_DELTA_CLASSSYM = 1879048224 +const DT_MIPS_DELTA_CLASSSYM_NO = 1879048225 +const DT_MIPS_DELTA_CLASS_NO = 1879048216 +const DT_MIPS_DELTA_INSTANCE = 1879048217 +const DT_MIPS_DELTA_INSTANCE_NO = 1879048218 +const DT_MIPS_DELTA_RELOC = 1879048219 +const DT_MIPS_DELTA_RELOC_NO = 1879048220 +const DT_MIPS_DELTA_SYM = 1879048221 +const DT_MIPS_DELTA_SYM_NO = 1879048222 +const DT_MIPS_DYNSTR_ALIGN = 1879048235 +const DT_MIPS_FLAGS = 1879048197 +const DT_MIPS_GOTSYM = 1879048211 +const DT_MIPS_GP_VALUE = 1879048240 +const DT_MIPS_HIDDEN_GOTIDX = 1879048231 +const DT_MIPS_HIPAGENO = 1879048212 +const DT_MIPS_ICHECKSUM = 1879048195 +const DT_MIPS_INTERFACE = 1879048234 +const DT_MIPS_INTERFACE_SIZE = 1879048236 +const DT_MIPS_IVERSION = 1879048196 +const DT_MIPS_LIBLIST = 1879048201 +const DT_MIPS_LIBLISTNO = 1879048208 +const DT_MIPS_LOCALPAGE_GOTIDX = 1879048229 +const DT_MIPS_LOCAL_GOTIDX = 1879048230 +const DT_MIPS_LOCAL_GOTNO = 1879048202 +const DT_MIPS_MSYM = 1879048199 +const DT_MIPS_NUM = 54 +const DT_MIPS_OPTIONS = 1879048233 +const DT_MIPS_PERF_SUFFIX = 1879048238 +const DT_MIPS_PIXIE_INIT = 1879048227 +const DT_MIPS_PLTGOT = 1879048242 +const DT_MIPS_PROTECTED_GOTIDX = 1879048232 +const DT_MIPS_RLD_MAP = 1879048214 +const DT_MIPS_RLD_MAP_REL = 1879048245 +const DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 1879048237 +const DT_MIPS_RLD_VERSION = 1879048193 +const DT_MIPS_RWPLT = 1879048244 +const DT_MIPS_SYMBOL_LIB = 1879048228 +const DT_MIPS_SYMTABNO = 1879048209 +const DT_MIPS_TIME_STAMP = 1879048194 +const DT_MIPS_UNREFEXTNO = 1879048210 +const DT_MOVEENT = 1879047674 +const DT_MOVESZ = 1879047675 +const DT_MOVETAB = 1879047934 +const DT_NEEDED = 1 +const DT_NIOS2_GP = 1879048194 +const DT_NULL = 0 +const DT_NUM = 38 +const DT_PLTGOT = 3 +const DT_PLTPAD = 1879047933 +const DT_PLTPADSZ = 1879047673 +const DT_PLTREL = 20 +const DT_PLTRELSZ = 2 +const DT_POSFLAG_1 = 1879047677 +const DT_PPC64_GLINK = 1879048192 +const DT_PPC64_NUM = 4 +const DT_PPC64_OPD = 1879048193 +const DT_PPC64_OPDSZ = 1879048194 +const DT_PPC64_OPT = 1879048195 +const DT_PPC_GOT = 1879048192 +const DT_PPC_NUM = 2 +const DT_PPC_OPT = 1879048193 +const DT_PREINIT_ARRAY = 32 +const DT_PREINIT_ARRAYSZ = 33 +const DT_PROCNUM = 54 +const DT_REL = 17 +const DT_RELA = 7 +const DT_RELACOUNT = 1879048185 +const DT_RELAENT = 9 +const DT_RELASZ = 8 +const DT_RELCOUNT = 1879048186 +const DT_RELENT = 19 +const DT_RELR = 36 +const DT_RELRENT = 37 +const DT_RELRSZ = 35 +const DT_RELSZ = 18 +const DT_RPATH = 15 +const DT_RUNPATH = 29 +const DT_SONAME = 14 +const DT_SPARC_NUM = 2 +const DT_SPARC_REGISTER = 1879048193 +const DT_STRSZ = 10 +const DT_STRTAB = 5 +const DT_SYMBOLIC = 16 +const DT_SYMENT = 11 +const DT_SYMINENT = 1879047679 +const DT_SYMINFO = 1879047935 +const DT_SYMINSZ = 1879047678 +const DT_SYMTAB = 6 +const DT_SYMTAB_SHNDX = 34 +const DT_TEXTREL = 22 +const DT_TLSDESC_GOT = 1879047927 +const DT_TLSDESC_PLT = 1879047926 +const DT_VALNUM = 12 +const DT_VALRNGHI = 1879047679 +const DT_VALRNGLO = 1879047424 +const DT_VERDEF = 1879048188 +const DT_VERDEFNUM = 1879048189 +const DT_VERNEED = 1879048190 +const DT_VERNEEDNUM = 1879048191 +const DT_VERSIONTAGNUM = 16 +const DT_VERSYM = 1879048176 +const EFA_PARISC_1_0 = 523 +const EFA_PARISC_1_1 = 528 +const EFA_PARISC_2_0 = 532 +const EF_ALPHA_32BIT = 1 +const EF_ALPHA_CANRELAX = 2 +const EF_ARM_ABI_FLOAT_HARD = 1024 +const EF_ARM_ABI_FLOAT_SOFT = 512 +const EF_ARM_ALIGN8 = 64 +const EF_ARM_APCS_26 = 8 +const EF_ARM_APCS_FLOAT = 16 +const EF_ARM_BE8 = 8388608 +const EF_ARM_DYNSYMSUSESEGIDX = 8 +const EF_ARM_EABIMASK = 4278190080 +const EF_ARM_EABI_UNKNOWN = 0 +const EF_ARM_EABI_VER1 = 16777216 +const EF_ARM_EABI_VER2 = 33554432 +const EF_ARM_EABI_VER3 = 50331648 +const EF_ARM_EABI_VER4 = 67108864 +const EF_ARM_EABI_VER5 = 83886080 +const EF_ARM_HASENTRY = 2 +const EF_ARM_INTERWORK = 4 +const EF_ARM_LE8 = 4194304 +const EF_ARM_MAPSYMSFIRST = 16 +const EF_ARM_MAVERICK_FLOAT = 2048 +const EF_ARM_NEW_ABI = 128 +const EF_ARM_OLD_ABI = 256 +const EF_ARM_PIC = 32 +const EF_ARM_RELEXEC = 1 +const EF_ARM_SOFT_FLOAT = 512 +const EF_ARM_SYMSARESORTED = 4 +const EF_ARM_VFP_FLOAT = 1024 +const EF_CPU32 = 8454144 +const EF_IA_64_ABI64 = 16 +const EF_IA_64_ARCH = 4278190080 +const EF_IA_64_MASKOS = 15 +const EF_LARCH_ABI_DOUBLE_FLOAT = 3 +const EF_LARCH_ABI_MODIFIER_MASK = 7 +const EF_LARCH_ABI_SINGLE_FLOAT = 2 +const EF_LARCH_ABI_SOFT_FLOAT = 1 +const EF_LARCH_OBJABI_V1 = 64 +const EF_MIPS_64BIT_WHIRL = 16 +const EF_MIPS_ABI2 = 32 +const EF_MIPS_ABI_ON32 = 64 +const EF_MIPS_ARCH = 4026531840 +const EF_MIPS_ARCH_1 = 0 +const EF_MIPS_ARCH_2 = 268435456 +const EF_MIPS_ARCH_3 = 536870912 +const EF_MIPS_ARCH_32 = 1342177280 +const EF_MIPS_ARCH_32R2 = 1879048192 +const EF_MIPS_ARCH_4 = 805306368 +const EF_MIPS_ARCH_5 = 1073741824 +const EF_MIPS_ARCH_64 = 1610612736 +const EF_MIPS_ARCH_64R2 = 2147483648 +const EF_MIPS_CPIC = 4 +const EF_MIPS_FP64 = 512 +const EF_MIPS_NAN2008 = 1024 +const EF_MIPS_NOREORDER = 1 +const EF_MIPS_PIC = 2 +const EF_MIPS_XGOT = 8 +const EF_PARISC_ARCH = 65535 +const EF_PARISC_EXT = 131072 +const EF_PARISC_LAZYSWAP = 4194304 +const EF_PARISC_LSB = 262144 +const EF_PARISC_NO_KABP = 1048576 +const EF_PARISC_TRAPNIL = 65536 +const EF_PARISC_WIDE = 524288 +const EF_PPC64_ABI = 3 +const EF_PPC_EMB = 2147483648 +const EF_PPC_RELOCATABLE = 65536 +const EF_PPC_RELOCATABLE_LIB = 32768 +const EF_SH1 = 1 +const EF_SH2 = 2 +const EF_SH2A = 13 +const EF_SH2A_NOFPU = 19 +const EF_SH2A_SH3E = 24 +const EF_SH2A_SH3_NOFPU = 22 +const EF_SH2A_SH4 = 23 +const EF_SH2A_SH4_NOFPU = 21 +const EF_SH2E = 11 +const EF_SH3 = 3 +const EF_SH3E = 8 +const EF_SH3_DSP = 5 +const EF_SH3_NOMMU = 20 +const EF_SH4 = 9 +const EF_SH4A = 12 +const EF_SH4AL_DSP = 6 +const EF_SH4A_NOFPU = 17 +const EF_SH4_NOFPU = 16 +const EF_SH4_NOMMU_NOFPU = 18 +const EF_SH_DSP = 4 +const EF_SH_MACH_MASK = 31 +const EF_SH_UNKNOWN = 0 +const EF_SPARCV9_MM = 3 +const EF_SPARCV9_PSO = 1 +const EF_SPARCV9_RMO = 2 +const EF_SPARCV9_TSO = 0 +const EF_SPARC_32PLUS = 256 +const EF_SPARC_EXT_MASK = 16776960 +const EF_SPARC_HAL_R1 = 1024 +const EF_SPARC_LEDATA = 8388608 +const EF_SPARC_SUN_US1 = 512 +const EF_SPARC_SUN_US3 = 2048 +const EI_ABIVERSION = 8 +const EI_CLASS = 4 +const EI_DATA = 5 +const EI_MAG0 = 0 +const EI_MAG1 = 1 +const EI_MAG2 = 2 +const EI_MAG3 = 3 +const EI_NIDENT = 16 +const EI_OSABI = 7 +const EI_PAD = 9 +const EI_VERSION = 6 +const ELFCLASS32 = 1 +const ELFCLASS64 = 2 +const ELFCLASSNONE = 0 +const ELFCLASSNUM = 3 +const ELFCOMPRESS_HIOS = 1879048191 +const ELFCOMPRESS_HIPROC = 2147483647 +const ELFCOMPRESS_LOOS = 1610612736 +const ELFCOMPRESS_LOPROC = 1879048192 +const ELFCOMPRESS_ZLIB = 1 +const ELFCOMPRESS_ZSTD = 2 +const ELFDATA2LSB = 1 +const ELFDATA2MSB = 2 +const ELFDATANONE = 0 +const ELFDATANUM = 3 +const ELFMAG = "\\177ELF" +const ELFMAG0 = 127 +const ELFMAG1 = 69 +const ELFMAG2 = 76 +const ELFMAG3 = 70 +const ELFOSABI_AIX = 7 +const ELFOSABI_ARM = 97 +const ELFOSABI_FREEBSD = 9 +const ELFOSABI_GNU = 3 +const ELFOSABI_HPUX = 1 +const ELFOSABI_IRIX = 8 +const ELFOSABI_LINUX = 3 +const ELFOSABI_MODESTO = 11 +const ELFOSABI_NETBSD = 2 +const ELFOSABI_NONE = 0 +const ELFOSABI_OPENBSD = 12 +const ELFOSABI_SOLARIS = 6 +const ELFOSABI_STANDALONE = 255 +const ELFOSABI_SYSV = 0 +const ELFOSABI_TRU64 = 10 +const ELF_NOTE_ABI = 1 +const ELF_NOTE_GNU = "GNU" +const ELF_NOTE_OS_FREEBSD = 3 +const ELF_NOTE_OS_GNU = 1 +const ELF_NOTE_OS_LINUX = 0 +const ELF_NOTE_OS_SOLARIS2 = 2 +const ELF_NOTE_PAGESIZE_HINT = 1 +const ELF_NOTE_SOLARIS = "SUNW Solaris" +const EM_386 = 3 +const EM_56800EX = 200 +const EM_68HC05 = 72 +const EM_68HC08 = 71 +const EM_68HC11 = 70 +const EM_68HC12 = 53 +const EM_68HC16 = 69 +const EM_68K = 4 +const EM_78KOR = 199 +const EM_8051 = 165 +const EM_860 = 7 +const EM_88K = 5 +const EM_960 = 19 +const EM_AARCH64 = 183 +const EM_ALPHA = 36902 +const EM_ALTERA_NIOS2 = 113 +const EM_AMDGPU = 224 +const EM_ARC = 45 +const EM_ARCA = 109 +const EM_ARC_A5 = 93 +const EM_ARC_COMPACT = 93 +const EM_ARC_COMPACT2 = 195 +const EM_ARM = 40 +const EM_AVR = 83 +const EM_AVR32 = 185 +const EM_BA1 = 201 +const EM_BA2 = 202 +const EM_BLACKFIN = 106 +const EM_BPF = 247 +const EM_C166 = 116 +const EM_CDP = 215 +const EM_CE = 119 +const EM_CLOUDSHIELD = 192 +const EM_COGE = 216 +const EM_COLDFIRE = 52 +const EM_COOL = 217 +const EM_COREA_1ST = 193 +const EM_COREA_2ND = 194 +const EM_CR = 103 +const EM_CR16 = 177 +const EM_CRAYNV2 = 172 +const EM_CRIS = 76 +const EM_CRX = 114 +const EM_CSKY = 252 +const EM_CSR_KALIMBA = 219 +const EM_CUDA = 190 +const EM_CYPRESS_M8C = 161 +const EM_D10V = 85 +const EM_D30V = 86 +const EM_DSP24 = 136 +const EM_DSPIC30F = 118 +const EM_DXP = 112 +const EM_ECOG16 = 176 +const EM_ECOG1X = 168 +const EM_ECOG2 = 134 +const EM_EMX16 = 212 +const EM_EMX8 = 213 +const EM_ETPU = 178 +const EM_EXCESS = 111 +const EM_F2MC16 = 104 +const EM_FAKE_ALPHA = 41 +const EM_FIREPATH = 78 +const EM_FR20 = 37 +const EM_FR30 = 84 +const EM_FT32 = 222 +const EM_FX66 = 66 +const EM_H8S = 48 +const EM_H8_300 = 46 +const EM_H8_300H = 47 +const EM_H8_500 = 49 +const EM_HUANY = 81 +const EM_IA_64 = 50 +const EM_IP2K = 101 +const EM_JAVELIN = 77 +const EM_K10M = 181 +const EM_KM32 = 210 +const EM_KMX32 = 211 +const EM_KVARC = 214 +const EM_L10M = 180 +const EM_LATTICEMICO32 = 138 +const EM_LOONGARCH = 258 +const EM_M16C = 117 +const EM_M32 = 1 +const EM_M32C = 120 +const EM_M32R = 88 +const EM_MANIK = 171 +const EM_MAX = 102 +const EM_MAXQ30 = 169 +const EM_MCHP_PIC = 204 +const EM_MCST_ELBRUS = 175 +const EM_ME16 = 59 +const EM_METAG = 174 +const EM_MICROBLAZE = 189 +const EM_MIPS = 8 +const EM_MIPS_RS3_LE = 10 +const EM_MIPS_X = 51 +const EM_MMA = 54 +const EM_MMDSP_PLUS = 160 +const EM_MMIX = 80 +const EM_MN10200 = 90 +const EM_MN10300 = 89 +const EM_MOXIE = 223 +const EM_MSP430 = 105 +const EM_NCPU = 56 +const EM_NDR1 = 57 +const EM_NDS32 = 167 +const EM_NONE = 0 +const EM_NORC = 218 +const EM_NS32K = 97 +const EM_NUM = 259 +const EM_OPEN8 = 196 +const EM_OPENRISC = 92 +const EM_OR1K = 92 +const EM_PARISC = 15 +const EM_PCP = 55 +const EM_PDSP = 63 +const EM_PJ = 91 +const EM_PPC = 20 +const EM_PPC64 = 21 +const EM_PRISM = 82 +const EM_QDSP6 = 164 +const EM_R32C = 162 +const EM_RCE = 39 +const EM_RH32 = 38 +const EM_RISCV = 243 +const EM_RL78 = 197 +const EM_RS08 = 132 +const EM_RX = 173 +const EM_S370 = 9 +const EM_S390 = 22 +const EM_SCORE7 = 135 +const EM_SEP = 108 +const EM_SE_C17 = 139 +const EM_SE_C33 = 107 +const EM_SH = 42 +const EM_SHARC = 133 +const EM_SLE9X = 179 +const EM_SNP1K = 99 +const EM_SPARC = 2 +const EM_SPARC32PLUS = 18 +const EM_SPARCV9 = 43 +const EM_ST100 = 60 +const EM_ST19 = 74 +const EM_ST200 = 100 +const EM_ST7 = 68 +const EM_ST9PLUS = 67 +const EM_STARCORE = 58 +const EM_STM8 = 186 +const EM_STXP7X = 166 +const EM_SVX = 73 +const EM_TILE64 = 187 +const EM_TILEGX = 191 +const EM_TILEPRO = 188 +const EM_TINYJ = 61 +const EM_TI_ARP32 = 143 +const EM_TI_C2000 = 141 +const EM_TI_C5500 = 142 +const EM_TI_C6000 = 140 +const EM_TI_PRU = 144 +const EM_TMM_GPP = 96 +const EM_TPC = 98 +const EM_TRICORE = 44 +const EM_TRIMEDIA = 163 +const EM_TSK3000 = 131 +const EM_UNICORE = 110 +const EM_V800 = 36 +const EM_V850 = 87 +const EM_VAX = 75 +const EM_VIDEOCORE = 95 +const EM_VIDEOCORE3 = 137 +const EM_VIDEOCORE5 = 198 +const EM_VISIUM = 221 +const EM_VPP500 = 17 +const EM_X86_64 = 62 +const EM_XCORE = 203 +const EM_XGATE = 115 +const EM_XIMO16 = 170 +const EM_XTENSA = 94 +const EM_Z80 = 220 +const EM_ZSP = 79 +const ET_CORE = 4 +const ET_DYN = 3 +const ET_EXEC = 2 +const ET_HIOS = 65279 +const ET_HIPROC = 65535 +const ET_LOOS = 65024 +const ET_LOPROC = 65280 +const ET_NONE = 0 +const ET_NUM = 5 +const ET_REL = 1 +const EV_CURRENT = 1 +const EV_NONE = 0 +const EV_NUM = 2 +const EXIT_FAILURE = 1 +const EXIT_SUCCESS = 0 +const E_MIPS_ARCH_1 = 0 +const E_MIPS_ARCH_2 = 268435456 +const E_MIPS_ARCH_3 = 536870912 +const E_MIPS_ARCH_32 = 1342177280 +const E_MIPS_ARCH_4 = 805306368 +const E_MIPS_ARCH_5 = 1073741824 +const E_MIPS_ARCH_64 = 1610612736 +const FD_SETSIZE = 1024 +const FPE_FLTDIV = 3 +const FPE_FLTINV = 7 +const FPE_FLTOVF = 4 +const FPE_FLTRES = 6 +const FPE_FLTSUB = 8 +const FPE_FLTUND = 5 +const FPE_INTDIV = 1 +const FPE_INTOVF = 2 +const GRP_COMDAT = 1 +const ILL_BADSTK = 8 +const ILL_COPROC = 7 +const ILL_ILLADR = 3 +const ILL_ILLOPC = 1 +const ILL_ILLOPN = 2 +const ILL_ILLTRP = 4 +const ILL_PRVOPC = 5 +const ILL_PRVREG = 6 +const ITIMER_PROF = 2 +const ITIMER_REAL = 0 +const ITIMER_VIRTUAL = 1 +const JT_ARG_MAX = -254 +const JT_AVPHYS_PAGES = -247 +const JT_DELAYTIMER_MAX = -245 +const JT_MINSIGSTKSZ = -244 +const JT_MQ_PRIO_MAX = -253 +const JT_NPROCESSORS_CONF = -250 +const JT_NPROCESSORS_ONLN = -249 +const JT_PAGE_SIZE = -252 +const JT_PHYS_PAGES = -248 +const JT_SEM_VALUE_MAX = -251 +const JT_SIGSTKSZ = -243 +const JT_ZERO = -246 +const LITUSE_ALPHA_ADDR = 0 +const LITUSE_ALPHA_BASE = 1 +const LITUSE_ALPHA_BYTOFF = 2 +const LITUSE_ALPHA_JSR = 3 +const LITUSE_ALPHA_TLS_GD = 4 +const LITUSE_ALPHA_TLS_LDM = 5 +const LL_DELAY_LOAD = 16 +const LL_DELTA = 32 +const LL_EXACT_MATCH = 1 +const LL_EXPORTS = 8 +const LL_IGNORE_INT_VER = 2 +const LL_NONE = 0 +const LL_REQUIRE_MINOR = 4 +const MB_CUR_MAX = 0 +const MINSIGSTKSZ = 2048 +const MIPS_AFL_ASE_DSP = 1 +const MIPS_AFL_ASE_DSPR2 = 2 +const MIPS_AFL_ASE_EVA = 4 +const MIPS_AFL_ASE_MASK = 8191 +const MIPS_AFL_ASE_MCU = 8 +const MIPS_AFL_ASE_MDMX = 16 +const MIPS_AFL_ASE_MICROMIPS = 2048 +const MIPS_AFL_ASE_MIPS16 = 1024 +const MIPS_AFL_ASE_MIPS3D = 32 +const MIPS_AFL_ASE_MSA = 512 +const MIPS_AFL_ASE_MT = 64 +const MIPS_AFL_ASE_SMARTMIPS = 128 +const MIPS_AFL_ASE_VIRT = 256 +const MIPS_AFL_ASE_XPA = 4096 +const MIPS_AFL_EXT_10000 = 11 +const MIPS_AFL_EXT_3900 = 10 +const MIPS_AFL_EXT_4010 = 8 +const MIPS_AFL_EXT_4100 = 9 +const MIPS_AFL_EXT_4111 = 13 +const MIPS_AFL_EXT_4120 = 14 +const MIPS_AFL_EXT_4650 = 7 +const MIPS_AFL_EXT_5400 = 15 +const MIPS_AFL_EXT_5500 = 16 +const MIPS_AFL_EXT_5900 = 6 +const MIPS_AFL_EXT_LOONGSON_2E = 17 +const MIPS_AFL_EXT_LOONGSON_2F = 18 +const MIPS_AFL_EXT_LOONGSON_3A = 4 +const MIPS_AFL_EXT_OCTEON = 5 +const MIPS_AFL_EXT_OCTEON2 = 2 +const MIPS_AFL_EXT_OCTEONP = 3 +const MIPS_AFL_EXT_SB1 = 12 +const MIPS_AFL_EXT_XLR = 1 +const MIPS_AFL_FLAGS1_ODDSPREG = 1 +const MIPS_AFL_REG_128 = 3 +const MIPS_AFL_REG_32 = 1 +const MIPS_AFL_REG_64 = 2 +const MIPS_AFL_REG_NONE = 0 +const NT_386_IOPERM = 513 +const NT_386_TLS = 512 +const NT_ARC_V2 = 1536 +const NT_ARM_HW_BREAK = 1026 +const NT_ARM_HW_WATCH = 1027 +const NT_ARM_PACA_KEYS = 1031 +const NT_ARM_PACG_KEYS = 1032 +const NT_ARM_PAC_ENABLED_KEYS = 1034 +const NT_ARM_PAC_MASK = 1030 +const NT_ARM_SVE = 1029 +const NT_ARM_SYSTEM_CALL = 1028 +const NT_ARM_TAGGED_ADDR_CTRL = 1033 +const NT_ARM_TLS = 1025 +const NT_ARM_VFP = 1024 +const NT_ASRS = 8 +const NT_AUXV = 6 +const NT_FILE = 1179208773 +const NT_FPREGSET = 2 +const NT_GNU_ABI_TAG = 1 +const NT_GNU_BUILD_ID = 3 +const NT_GNU_GOLD_VERSION = 4 +const NT_GNU_PROPERTY_TYPE_0 = 5 +const NT_GWINDOWS = 7 +const NT_LOONGARCH_CPUCFG = 2560 +const NT_LOONGARCH_CSR = 2561 +const NT_LOONGARCH_LASX = 2563 +const NT_LOONGARCH_LBT = 2564 +const NT_LOONGARCH_LSX = 2562 +const NT_LWPSINFO = 17 +const NT_LWPSTATUS = 16 +const NT_METAG_CBUF = 1280 +const NT_METAG_RPIPE = 1281 +const NT_METAG_TLS = 1282 +const NT_MIPS_DSP = 2048 +const NT_MIPS_FP_MODE = 2049 +const NT_MIPS_MSA = 2050 +const NT_PLATFORM = 5 +const NT_PPC_DSCR = 261 +const NT_PPC_EBB = 262 +const NT_PPC_PMU = 263 +const NT_PPC_PPR = 260 +const NT_PPC_SPE = 257 +const NT_PPC_TAR = 259 +const NT_PPC_TM_CDSCR = 271 +const NT_PPC_TM_CFPR = 265 +const NT_PPC_TM_CGPR = 264 +const NT_PPC_TM_CPPR = 270 +const NT_PPC_TM_CTAR = 269 +const NT_PPC_TM_CVMX = 266 +const NT_PPC_TM_CVSX = 267 +const NT_PPC_TM_SPR = 268 +const NT_PPC_VMX = 256 +const NT_PPC_VSX = 258 +const NT_PRCRED = 14 +const NT_PRFPREG = 2 +const NT_PRFPXREG = 20 +const NT_PRPSINFO = 3 +const NT_PRSTATUS = 1 +const NT_PRXFPREG = 1189489535 +const NT_PRXREG = 4 +const NT_PSINFO = 13 +const NT_PSTATUS = 10 +const NT_RISCV_CSR = 2304 +const NT_RISCV_VECTOR = 2305 +const NT_S390_CTRS = 772 +const NT_S390_GS_BC = 780 +const NT_S390_GS_CB = 779 +const NT_S390_HIGH_GPRS = 768 +const NT_S390_LAST_BREAK = 774 +const NT_S390_PREFIX = 773 +const NT_S390_RI_CB = 781 +const NT_S390_SYSTEM_CALL = 775 +const NT_S390_TDB = 776 +const NT_S390_TIMER = 769 +const NT_S390_TODCMP = 770 +const NT_S390_TODPREG = 771 +const NT_S390_VXRS_HIGH = 778 +const NT_S390_VXRS_LOW = 777 +const NT_SIGINFO = 1397311305 +const NT_TASKSTRUCT = 4 +const NT_UTSNAME = 15 +const NT_VERSION = 1 +const NT_VMCOREDD = 1792 +const NT_X86_XSTATE = 514 +const ODK_EXCEPTIONS = 2 +const ODK_FILL = 5 +const ODK_HWAND = 7 +const ODK_HWOR = 8 +const ODK_HWPATCH = 4 +const ODK_NULL = 0 +const ODK_PAD = 3 +const ODK_REGINFO = 1 +const ODK_TAGS = 6 +const OEX_DISMISS = 524288 +const OEX_FPDBUG = 262144 +const OEX_FPU_DIV0 = 8 +const OEX_FPU_INEX = 1 +const OEX_FPU_INVAL = 16 +const OEX_FPU_MAX = 7936 +const OEX_FPU_MIN = 31 +const OEX_FPU_OFLO = 4 +const OEX_FPU_UFLO = 2 +const OEX_PAGE0 = 65536 +const OEX_PRECISEFP = 262144 +const OEX_SMM = 131072 +const OHWA0_R4KEOP_CHECKED = 1 +const OHWA1_R4KEOP_CLEAN = 2 +const OHW_R4KEOP = 1 +const OHW_R5KCVTL = 8 +const OHW_R5KEOP = 4 +const OHW_R8KPFETCH = 2 +const OPAD_POSTFIX = 2 +const OPAD_PREFIX = 1 +const OPAD_SYMBOL = 4 +const PF_ARM_ABS = 1073741824 +const PF_ARM_PI = 536870912 +const PF_ARM_SB = 268435456 +const PF_HP_CODE = 16777216 +const PF_HP_FAR_SHARED = 2097152 +const PF_HP_LAZYSWAP = 67108864 +const PF_HP_MODIFY = 33554432 +const PF_HP_NEAR_SHARED = 4194304 +const PF_HP_PAGE_SIZE = 1048576 +const PF_HP_SBP = 134217728 +const PF_IA_64_NORECOV = 2147483648 +const PF_MASKOS = 267386880 +const PF_MASKPROC = 4026531840 +const PF_MIPS_LOCAL = 268435456 +const PF_PARISC_SBP = 134217728 +const PF_R = 4 +const PF_W = 2 +const PF_X = 1 +const PN_XNUM = 65535 +const POLL_ERR = 4 +const POLL_HUP = 6 +const POLL_IN = 1 +const POLL_MSG = 3 +const POLL_OUT = 2 +const POLL_PRI = 5 +const PPC64_OPT_LOCALENTRY = 4 +const PPC64_OPT_MULTI_TOC = 2 +const PPC64_OPT_TLS = 1 +const PPC_OPT_TLS = 1 +const PRIO_MAX = 20 +const PRIO_MIN = -20 +const PRIO_PGRP = 1 +const PRIO_PROCESS = 0 +const PRIO_USER = 2 +const PT_ARM_EXIDX = 1879048193 +const PT_DYNAMIC = 2 +const PT_GNU_EH_FRAME = 1685382480 +const PT_GNU_PROPERTY = 1685382483 +const PT_GNU_RELRO = 1685382482 +const PT_GNU_STACK = 1685382481 +const PT_HIOS = 1879048191 +const PT_HIPROC = 2147483647 +const PT_HISUNW = 1879048191 +const PT_HP_CORE_COMM = 1610612740 +const PT_HP_CORE_KERNEL = 1610612739 +const PT_HP_CORE_LOADABLE = 1610612742 +const PT_HP_CORE_MMF = 1610612745 +const PT_HP_CORE_NONE = 1610612737 +const PT_HP_CORE_PROC = 1610612741 +const PT_HP_CORE_SHM = 1610612744 +const PT_HP_CORE_STACK = 1610612743 +const PT_HP_CORE_VERSION = 1610612738 +const PT_HP_FASTBIND = 1610612753 +const PT_HP_HSL_ANNOT = 1610612755 +const PT_HP_OPT_ANNOT = 1610612754 +const PT_HP_PARALLEL = 1610612752 +const PT_HP_STACK = 1610612756 +const PT_HP_TLS = 1610612736 +const PT_IA_64_ARCHEXT = 1879048192 +const PT_IA_64_HP_HSL_ANOT = 1610612755 +const PT_IA_64_HP_OPT_ANOT = 1610612754 +const PT_IA_64_HP_STACK = 1610612756 +const PT_IA_64_UNWIND = 1879048193 +const PT_INTERP = 3 +const PT_LOAD = 1 +const PT_LOOS = 1610612736 +const PT_LOPROC = 1879048192 +const PT_LOSUNW = 1879048186 +const PT_MIPS_ABIFLAGS = 1879048195 +const PT_MIPS_OPTIONS = 1879048194 +const PT_MIPS_REGINFO = 1879048192 +const PT_MIPS_RTPROC = 1879048193 +const PT_NOTE = 4 +const PT_NULL = 0 +const PT_NUM = 8 +const PT_PARISC_ARCHEXT = 1879048192 +const PT_PARISC_UNWIND = 1879048193 +const PT_PHDR = 6 +const PT_SHLIB = 5 +const PT_SUNWBSS = 1879048186 +const PT_SUNWSTACK = 1879048187 +const PT_TLS = 7 +const RAND_MAX = 2147483647 +const RHF_CORD = 4096 +const RHF_DEFAULT_DELAY_LOAD = 512 +const RHF_DELTA_C_PLUS_PLUS = 64 +const RHF_GUARANTEE_INIT = 32 +const RHF_GUARANTEE_START_INIT = 128 +const RHF_NONE = 0 +const RHF_NOTPOT = 2 +const RHF_NO_LIBRARY_REPLACEMENT = 4 +const RHF_NO_MOVE = 8 +const RHF_NO_UNRES_UNDEF = 8192 +const RHF_PIXIE = 256 +const RHF_QUICKSTART = 1 +const RHF_REQUICKSTART = 1024 +const RHF_REQUICKSTARTED = 2048 +const RHF_RLD_ORDER_SAFE = 16384 +const RHF_SGI_ONLY = 16 +const RLIMIT_AS = 9 +const RLIMIT_CORE = 4 +const RLIMIT_CPU = 0 +const RLIMIT_DATA = 2 +const RLIMIT_FSIZE = 1 +const RLIMIT_LOCKS = 10 +const RLIMIT_MEMLOCK = 8 +const RLIMIT_MSGQUEUE = 12 +const RLIMIT_NICE = 13 +const RLIMIT_NLIMITS = 16 +const RLIMIT_NOFILE = 7 +const RLIMIT_NPROC = 6 +const RLIMIT_RSS = 5 +const RLIMIT_RTPRIO = 14 +const RLIMIT_RTTIME = 15 +const RLIMIT_SIGPENDING = 11 +const RLIMIT_STACK = 3 +const RLIM_INFINITY = 18446744073709551615 +const RLIM_NLIMITS = 16 +const RLIM_SAVED_CUR = 18446744073709551615 +const RLIM_SAVED_MAX = 18446744073709551615 +const RUSAGE_CHILDREN = -1 +const RUSAGE_SELF = 0 +const RUSAGE_THREAD = 1 +const R_386_16 = 20 +const R_386_32 = 1 +const R_386_32PLT = 11 +const R_386_8 = 22 +const R_386_COPY = 5 +const R_386_GLOB_DAT = 6 +const R_386_GOT32 = 3 +const R_386_GOT32X = 43 +const R_386_GOTOFF = 9 +const R_386_GOTPC = 10 +const R_386_IRELATIVE = 42 +const R_386_JMP_SLOT = 7 +const R_386_NONE = 0 +const R_386_NUM = 44 +const R_386_PC16 = 21 +const R_386_PC32 = 2 +const R_386_PC8 = 23 +const R_386_PLT32 = 4 +const R_386_RELATIVE = 8 +const R_386_SIZE32 = 38 +const R_386_TLS_DESC = 41 +const R_386_TLS_DESC_CALL = 40 +const R_386_TLS_DTPMOD32 = 35 +const R_386_TLS_DTPOFF32 = 36 +const R_386_TLS_GD = 18 +const R_386_TLS_GD_32 = 24 +const R_386_TLS_GD_CALL = 26 +const R_386_TLS_GD_POP = 27 +const R_386_TLS_GD_PUSH = 25 +const R_386_TLS_GOTDESC = 39 +const R_386_TLS_GOTIE = 16 +const R_386_TLS_IE = 15 +const R_386_TLS_IE_32 = 33 +const R_386_TLS_LDM = 19 +const R_386_TLS_LDM_32 = 28 +const R_386_TLS_LDM_CALL = 30 +const R_386_TLS_LDM_POP = 31 +const R_386_TLS_LDM_PUSH = 29 +const R_386_TLS_LDO_32 = 32 +const R_386_TLS_LE = 17 +const R_386_TLS_LE_32 = 34 +const R_386_TLS_TPOFF = 14 +const R_386_TLS_TPOFF32 = 37 +const R_390_12 = 2 +const R_390_16 = 3 +const R_390_20 = 57 +const R_390_32 = 4 +const R_390_64 = 22 +const R_390_8 = 1 +const R_390_COPY = 9 +const R_390_GLOB_DAT = 10 +const R_390_GOT12 = 6 +const R_390_GOT16 = 15 +const R_390_GOT20 = 58 +const R_390_GOT32 = 7 +const R_390_GOT64 = 24 +const R_390_GOTENT = 26 +const R_390_GOTOFF16 = 27 +const R_390_GOTOFF32 = 13 +const R_390_GOTOFF64 = 28 +const R_390_GOTPC = 14 +const R_390_GOTPCDBL = 21 +const R_390_GOTPLT12 = 29 +const R_390_GOTPLT16 = 30 +const R_390_GOTPLT20 = 59 +const R_390_GOTPLT32 = 31 +const R_390_GOTPLT64 = 32 +const R_390_GOTPLTENT = 33 +const R_390_JMP_SLOT = 11 +const R_390_NONE = 0 +const R_390_NUM = 61 +const R_390_PC16 = 16 +const R_390_PC16DBL = 17 +const R_390_PC32 = 5 +const R_390_PC32DBL = 19 +const R_390_PC64 = 23 +const R_390_PLT16DBL = 18 +const R_390_PLT32 = 8 +const R_390_PLT32DBL = 20 +const R_390_PLT64 = 25 +const R_390_PLTOFF16 = 34 +const R_390_PLTOFF32 = 35 +const R_390_PLTOFF64 = 36 +const R_390_RELATIVE = 12 +const R_390_TLS_DTPMOD = 54 +const R_390_TLS_DTPOFF = 55 +const R_390_TLS_GD32 = 40 +const R_390_TLS_GD64 = 41 +const R_390_TLS_GDCALL = 38 +const R_390_TLS_GOTIE12 = 42 +const R_390_TLS_GOTIE20 = 60 +const R_390_TLS_GOTIE32 = 43 +const R_390_TLS_GOTIE64 = 44 +const R_390_TLS_IE32 = 47 +const R_390_TLS_IE64 = 48 +const R_390_TLS_IEENT = 49 +const R_390_TLS_LDCALL = 39 +const R_390_TLS_LDM32 = 45 +const R_390_TLS_LDM64 = 46 +const R_390_TLS_LDO32 = 52 +const R_390_TLS_LDO64 = 53 +const R_390_TLS_LE32 = 50 +const R_390_TLS_LE64 = 51 +const R_390_TLS_LOAD = 37 +const R_390_TLS_TPOFF = 56 +const R_68K_16 = 2 +const R_68K_32 = 1 +const R_68K_8 = 3 +const R_68K_COPY = 19 +const R_68K_GLOB_DAT = 20 +const R_68K_GOT16 = 8 +const R_68K_GOT16O = 11 +const R_68K_GOT32 = 7 +const R_68K_GOT32O = 10 +const R_68K_GOT8 = 9 +const R_68K_GOT8O = 12 +const R_68K_JMP_SLOT = 21 +const R_68K_NONE = 0 +const R_68K_NUM = 43 +const R_68K_PC16 = 5 +const R_68K_PC32 = 4 +const R_68K_PC8 = 6 +const R_68K_PLT16 = 14 +const R_68K_PLT16O = 17 +const R_68K_PLT32 = 13 +const R_68K_PLT32O = 16 +const R_68K_PLT8 = 15 +const R_68K_PLT8O = 18 +const R_68K_RELATIVE = 22 +const R_68K_TLS_DTPMOD32 = 40 +const R_68K_TLS_DTPREL32 = 41 +const R_68K_TLS_GD16 = 26 +const R_68K_TLS_GD32 = 25 +const R_68K_TLS_GD8 = 27 +const R_68K_TLS_IE16 = 35 +const R_68K_TLS_IE32 = 34 +const R_68K_TLS_IE8 = 36 +const R_68K_TLS_LDM16 = 29 +const R_68K_TLS_LDM32 = 28 +const R_68K_TLS_LDM8 = 30 +const R_68K_TLS_LDO16 = 32 +const R_68K_TLS_LDO32 = 31 +const R_68K_TLS_LDO8 = 33 +const R_68K_TLS_LE16 = 38 +const R_68K_TLS_LE32 = 37 +const R_68K_TLS_LE8 = 39 +const R_68K_TLS_TPREL32 = 42 +const R_AARCH64_ABS16 = 259 +const R_AARCH64_ABS32 = 258 +const R_AARCH64_ABS64 = 257 +const R_AARCH64_ADD_ABS_LO12_NC = 277 +const R_AARCH64_ADR_GOT_PAGE = 311 +const R_AARCH64_ADR_PREL_LO21 = 274 +const R_AARCH64_ADR_PREL_PG_HI21 = 275 +const R_AARCH64_ADR_PREL_PG_HI21_NC = 276 +const R_AARCH64_CALL26 = 283 +const R_AARCH64_CONDBR19 = 280 +const R_AARCH64_COPY = 1024 +const R_AARCH64_GLOB_DAT = 1025 +const R_AARCH64_GOTREL32 = 308 +const R_AARCH64_GOTREL64 = 307 +const R_AARCH64_GOT_LD_PREL19 = 309 +const R_AARCH64_JUMP26 = 282 +const R_AARCH64_JUMP_SLOT = 1026 +const R_AARCH64_LD64_GOTOFF_LO15 = 310 +const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +const R_AARCH64_LD64_GOT_LO12_NC = 312 +const R_AARCH64_LDST128_ABS_LO12_NC = 299 +const R_AARCH64_LDST16_ABS_LO12_NC = 284 +const R_AARCH64_LDST32_ABS_LO12_NC = 285 +const R_AARCH64_LDST64_ABS_LO12_NC = 286 +const R_AARCH64_LDST8_ABS_LO12_NC = 278 +const R_AARCH64_LD_PREL_LO19 = 273 +const R_AARCH64_MOVW_GOTOFF_G0 = 300 +const R_AARCH64_MOVW_GOTOFF_G0_NC = 301 +const R_AARCH64_MOVW_GOTOFF_G1 = 302 +const R_AARCH64_MOVW_GOTOFF_G1_NC = 303 +const R_AARCH64_MOVW_GOTOFF_G2 = 304 +const R_AARCH64_MOVW_GOTOFF_G2_NC = 305 +const R_AARCH64_MOVW_GOTOFF_G3 = 306 +const R_AARCH64_MOVW_PREL_G0 = 287 +const R_AARCH64_MOVW_PREL_G0_NC = 288 +const R_AARCH64_MOVW_PREL_G1 = 289 +const R_AARCH64_MOVW_PREL_G1_NC = 290 +const R_AARCH64_MOVW_PREL_G2 = 291 +const R_AARCH64_MOVW_PREL_G2_NC = 292 +const R_AARCH64_MOVW_PREL_G3 = 293 +const R_AARCH64_MOVW_SABS_G0 = 270 +const R_AARCH64_MOVW_SABS_G1 = 271 +const R_AARCH64_MOVW_SABS_G2 = 272 +const R_AARCH64_MOVW_UABS_G0 = 263 +const R_AARCH64_MOVW_UABS_G0_NC = 264 +const R_AARCH64_MOVW_UABS_G1 = 265 +const R_AARCH64_MOVW_UABS_G1_NC = 266 +const R_AARCH64_MOVW_UABS_G2 = 267 +const R_AARCH64_MOVW_UABS_G2_NC = 268 +const R_AARCH64_MOVW_UABS_G3 = 269 +const R_AARCH64_NONE = 0 +const R_AARCH64_P32_ABS32 = 1 +const R_AARCH64_P32_COPY = 180 +const R_AARCH64_P32_GLOB_DAT = 181 +const R_AARCH64_P32_IRELATIVE = 188 +const R_AARCH64_P32_JUMP_SLOT = 182 +const R_AARCH64_P32_RELATIVE = 183 +const R_AARCH64_P32_TLSDESC = 187 +const R_AARCH64_P32_TLS_DTPMOD = 184 +const R_AARCH64_P32_TLS_DTPREL = 185 +const R_AARCH64_P32_TLS_TPREL = 186 +const R_AARCH64_PREL16 = 262 +const R_AARCH64_PREL32 = 261 +const R_AARCH64_PREL64 = 260 +const R_AARCH64_RELATIVE = 1027 +const R_AARCH64_TLSDESC = 1031 +const R_AARCH64_TLSDESC_ADD = 568 +const R_AARCH64_TLSDESC_ADD_LO12 = 564 +const R_AARCH64_TLSDESC_ADR_PAGE21 = 562 +const R_AARCH64_TLSDESC_ADR_PREL21 = 561 +const R_AARCH64_TLSDESC_CALL = 569 +const R_AARCH64_TLSDESC_LD64_LO12 = 563 +const R_AARCH64_TLSDESC_LDR = 567 +const R_AARCH64_TLSDESC_LD_PREL19 = 560 +const R_AARCH64_TLSDESC_OFF_G0_NC = 566 +const R_AARCH64_TLSDESC_OFF_G1 = 565 +const R_AARCH64_TLSGD_ADD_LO12_NC = 514 +const R_AARCH64_TLSGD_ADR_PAGE21 = 513 +const R_AARCH64_TLSGD_ADR_PREL21 = 512 +const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +const R_AARCH64_TLSGD_MOVW_G1 = 515 +const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541 +const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542 +const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539 +const R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530 +const R_AARCH64_TLSLD_ADD_LO12_NC = 519 +const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +const R_AARCH64_TLSLD_ADR_PREL21 = 517 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532 +const R_AARCH64_TLSLD_LD_PREL19 = 522 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525 +const R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523 +const R_AARCH64_TLSLD_MOVW_G0_NC = 521 +const R_AARCH64_TLSLD_MOVW_G1 = 520 +const R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549 +const R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550 +const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553 +const R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547 +const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548 +const R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545 +const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546 +const R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544 +const R_AARCH64_TLS_DTPMOD = 1028 +const R_AARCH64_TLS_DTPMOD64 = 1028 +const R_AARCH64_TLS_DTPREL = 1029 +const R_AARCH64_TLS_DTPREL64 = 1029 +const R_AARCH64_TLS_TPREL = 1030 +const R_AARCH64_TLS_TPREL64 = 1030 +const R_AARCH64_TSTBR14 = 279 +const R_ALPHA_BRADDR = 7 +const R_ALPHA_COPY = 24 +const R_ALPHA_DTPMOD64 = 31 +const R_ALPHA_DTPREL16 = 36 +const R_ALPHA_DTPREL64 = 33 +const R_ALPHA_DTPRELHI = 34 +const R_ALPHA_DTPRELLO = 35 +const R_ALPHA_GLOB_DAT = 25 +const R_ALPHA_GOTDTPREL = 32 +const R_ALPHA_GOTTPREL = 37 +const R_ALPHA_GPDISP = 6 +const R_ALPHA_GPREL16 = 19 +const R_ALPHA_GPREL32 = 3 +const R_ALPHA_GPRELHIGH = 17 +const R_ALPHA_GPRELLOW = 18 +const R_ALPHA_HINT = 8 +const R_ALPHA_JMP_SLOT = 26 +const R_ALPHA_LITERAL = 4 +const R_ALPHA_LITUSE = 5 +const R_ALPHA_NONE = 0 +const R_ALPHA_NUM = 46 +const R_ALPHA_REFLONG = 1 +const R_ALPHA_REFQUAD = 2 +const R_ALPHA_RELATIVE = 27 +const R_ALPHA_SREL16 = 9 +const R_ALPHA_SREL32 = 10 +const R_ALPHA_SREL64 = 11 +const R_ALPHA_TLSGD = 29 +const R_ALPHA_TLS_GD_HI = 28 +const R_ALPHA_TLS_LDM = 30 +const R_ALPHA_TPREL16 = 41 +const R_ALPHA_TPREL64 = 38 +const R_ALPHA_TPRELHI = 39 +const R_ALPHA_TPRELLO = 40 +const R_ARM_ABS12 = 6 +const R_ARM_ABS16 = 5 +const R_ARM_ABS32 = 2 +const R_ARM_ABS32_NOI = 55 +const R_ARM_ABS8 = 8 +const R_ARM_ALU_PCREL_15_8 = 33 +const R_ARM_ALU_PCREL_23_15 = 34 +const R_ARM_ALU_PCREL_7_0 = 32 +const R_ARM_ALU_PC_G0 = 58 +const R_ARM_ALU_PC_G0_NC = 57 +const R_ARM_ALU_PC_G1 = 60 +const R_ARM_ALU_PC_G1_NC = 59 +const R_ARM_ALU_PC_G2 = 61 +const R_ARM_ALU_SBREL_19_12 = 36 +const R_ARM_ALU_SBREL_27_20 = 37 +const R_ARM_ALU_SB_G0 = 71 +const R_ARM_ALU_SB_G0_NC = 70 +const R_ARM_ALU_SB_G1 = 73 +const R_ARM_ALU_SB_G1_NC = 72 +const R_ARM_ALU_SB_G2 = 74 +const R_ARM_AMP_VCALL9 = 12 +const R_ARM_BASE_ABS = 31 +const R_ARM_CALL = 28 +const R_ARM_COPY = 20 +const R_ARM_GLOB_DAT = 21 +const R_ARM_GNU_VTENTRY = 100 +const R_ARM_GNU_VTINHERIT = 101 +const R_ARM_GOT32 = 26 +const R_ARM_GOTOFF = 24 +const R_ARM_GOTOFF12 = 98 +const R_ARM_GOTPC = 25 +const R_ARM_GOTRELAX = 99 +const R_ARM_GOT_ABS = 95 +const R_ARM_GOT_BREL12 = 97 +const R_ARM_GOT_PREL = 96 +const R_ARM_IRELATIVE = 160 +const R_ARM_JUMP24 = 29 +const R_ARM_JUMP_SLOT = 22 +const R_ARM_LDC_PC_G0 = 67 +const R_ARM_LDC_PC_G1 = 68 +const R_ARM_LDC_PC_G2 = 69 +const R_ARM_LDC_SB_G0 = 81 +const R_ARM_LDC_SB_G1 = 82 +const R_ARM_LDC_SB_G2 = 83 +const R_ARM_LDRS_PC_G0 = 64 +const R_ARM_LDRS_PC_G1 = 65 +const R_ARM_LDRS_PC_G2 = 66 +const R_ARM_LDRS_SB_G0 = 78 +const R_ARM_LDRS_SB_G1 = 79 +const R_ARM_LDRS_SB_G2 = 80 +const R_ARM_LDR_PC_G1 = 62 +const R_ARM_LDR_PC_G2 = 63 +const R_ARM_LDR_SBREL_11_0 = 35 +const R_ARM_LDR_SB_G0 = 75 +const R_ARM_LDR_SB_G1 = 76 +const R_ARM_LDR_SB_G2 = 77 +const R_ARM_ME_TOO = 128 +const R_ARM_MOVT_ABS = 44 +const R_ARM_MOVT_BREL = 85 +const R_ARM_MOVT_PREL = 46 +const R_ARM_MOVW_ABS_NC = 43 +const R_ARM_MOVW_BREL = 86 +const R_ARM_MOVW_BREL_NC = 84 +const R_ARM_MOVW_PREL_NC = 45 +const R_ARM_NONE = 0 +const R_ARM_NUM = 256 +const R_ARM_PC13 = 4 +const R_ARM_PC24 = 1 +const R_ARM_PLT32 = 27 +const R_ARM_PLT32_ABS = 94 +const R_ARM_PREL31 = 42 +const R_ARM_RABS22 = 253 +const R_ARM_RBASE = 255 +const R_ARM_REL32 = 3 +const R_ARM_REL32_NOI = 56 +const R_ARM_RELATIVE = 23 +const R_ARM_RPC24 = 254 +const R_ARM_RREL32 = 252 +const R_ARM_RSBREL32 = 250 +const R_ARM_RXPC25 = 249 +const R_ARM_SBREL31 = 39 +const R_ARM_SBREL32 = 9 +const R_ARM_TARGET1 = 38 +const R_ARM_TARGET2 = 41 +const R_ARM_THM_ABS5 = 7 +const R_ARM_THM_ALU_PREL_11_0 = 53 +const R_ARM_THM_GOT_BREL12 = 131 +const R_ARM_THM_JUMP19 = 51 +const R_ARM_THM_JUMP24 = 30 +const R_ARM_THM_JUMP6 = 52 +const R_ARM_THM_MOVT_ABS = 48 +const R_ARM_THM_MOVT_BREL = 88 +const R_ARM_THM_MOVT_PREL = 50 +const R_ARM_THM_MOVW_ABS_NC = 47 +const R_ARM_THM_MOVW_BREL = 89 +const R_ARM_THM_MOVW_BREL_NC = 87 +const R_ARM_THM_MOVW_PREL_NC = 49 +const R_ARM_THM_PC11 = 102 +const R_ARM_THM_PC12 = 54 +const R_ARM_THM_PC22 = 10 +const R_ARM_THM_PC8 = 11 +const R_ARM_THM_PC9 = 103 +const R_ARM_THM_RPC22 = 251 +const R_ARM_THM_SWI8 = 14 +const R_ARM_THM_TLS_CALL = 93 +const R_ARM_THM_TLS_DESCSEQ = 129 +const R_ARM_THM_TLS_DESCSEQ16 = 129 +const R_ARM_THM_TLS_DESCSEQ32 = 130 +const R_ARM_THM_XPC22 = 16 +const R_ARM_TLS_CALL = 91 +const R_ARM_TLS_DESC = 13 +const R_ARM_TLS_DESCSEQ = 92 +const R_ARM_TLS_DTPMOD32 = 17 +const R_ARM_TLS_DTPOFF32 = 18 +const R_ARM_TLS_GD32 = 104 +const R_ARM_TLS_GOTDESC = 90 +const R_ARM_TLS_IE12GP = 111 +const R_ARM_TLS_IE32 = 107 +const R_ARM_TLS_LDM32 = 105 +const R_ARM_TLS_LDO12 = 109 +const R_ARM_TLS_LDO32 = 106 +const R_ARM_TLS_LE12 = 110 +const R_ARM_TLS_LE32 = 108 +const R_ARM_TLS_TPOFF32 = 19 +const R_ARM_V4BX = 40 +const R_ARM_XPC25 = 15 +const R_BPF_MAP_FD = 1 +const R_BPF_NONE = 0 +const R_CKCORE_ADDR32 = 1 +const R_CKCORE_ADDRGOT = 17 +const R_CKCORE_ADDRGOT_HI16 = 36 +const R_CKCORE_ADDRGOT_LO16 = 37 +const R_CKCORE_ADDRPLT = 18 +const R_CKCORE_ADDRPLT_HI16 = 38 +const R_CKCORE_ADDRPLT_LO16 = 39 +const R_CKCORE_ADDR_HI16 = 24 +const R_CKCORE_ADDR_LO16 = 25 +const R_CKCORE_COPY = 10 +const R_CKCORE_DOFFSET_IMM18 = 44 +const R_CKCORE_DOFFSET_IMM18BY2 = 45 +const R_CKCORE_DOFFSET_IMM18BY4 = 46 +const R_CKCORE_DOFFSET_LO16 = 42 +const R_CKCORE_GLOB_DAT = 11 +const R_CKCORE_GOT12 = 30 +const R_CKCORE_GOT32 = 15 +const R_CKCORE_GOTOFF = 13 +const R_CKCORE_GOTOFF_HI16 = 28 +const R_CKCORE_GOTOFF_LO16 = 29 +const R_CKCORE_GOTPC = 14 +const R_CKCORE_GOTPC_HI16 = 26 +const R_CKCORE_GOTPC_LO16 = 27 +const R_CKCORE_GOT_HI16 = 31 +const R_CKCORE_GOT_IMM18BY4 = 48 +const R_CKCORE_GOT_LO16 = 32 +const R_CKCORE_JUMP_SLOT = 12 +const R_CKCORE_NONE = 0 +const R_CKCORE_PCREL32 = 5 +const R_CKCORE_PCRELIMM11BY2 = 3 +const R_CKCORE_PCRELIMM8BY4 = 2 +const R_CKCORE_PCRELJSR_IMM11BY2 = 6 +const R_CKCORE_PCREL_IMM10BY2 = 22 +const R_CKCORE_PCREL_IMM10BY4 = 23 +const R_CKCORE_PCREL_IMM16BY2 = 20 +const R_CKCORE_PCREL_IMM16BY4 = 21 +const R_CKCORE_PCREL_IMM18BY2 = 43 +const R_CKCORE_PCREL_IMM26BY2 = 19 +const R_CKCORE_PCREL_IMM7BY4 = 50 +const R_CKCORE_PCREL_JSR_IMM26BY2 = 40 +const R_CKCORE_PLT12 = 33 +const R_CKCORE_PLT32 = 16 +const R_CKCORE_PLT_HI16 = 34 +const R_CKCORE_PLT_IMM18BY4 = 49 +const R_CKCORE_PLT_LO16 = 35 +const R_CKCORE_RELATIVE = 9 +const R_CKCORE_TLS_DTPMOD32 = 56 +const R_CKCORE_TLS_DTPOFF32 = 57 +const R_CKCORE_TLS_GD32 = 53 +const R_CKCORE_TLS_IE32 = 52 +const R_CKCORE_TLS_LDM32 = 54 +const R_CKCORE_TLS_LDO32 = 55 +const R_CKCORE_TLS_LE32 = 51 +const R_CKCORE_TLS_TPOFF32 = 58 +const R_CKCORE_TOFFSET_LO16 = 41 +const R_CRIS_16 = 2 +const R_CRIS_16_GOT = 13 +const R_CRIS_16_GOTPLT = 15 +const R_CRIS_16_PCREL = 5 +const R_CRIS_32 = 3 +const R_CRIS_32_GOT = 14 +const R_CRIS_32_GOTPLT = 16 +const R_CRIS_32_GOTREL = 17 +const R_CRIS_32_PCREL = 6 +const R_CRIS_32_PLT_GOTREL = 18 +const R_CRIS_32_PLT_PCREL = 19 +const R_CRIS_8 = 1 +const R_CRIS_8_PCREL = 4 +const R_CRIS_COPY = 9 +const R_CRIS_GLOB_DAT = 10 +const R_CRIS_GNU_VTENTRY = 8 +const R_CRIS_GNU_VTINHERIT = 7 +const R_CRIS_JUMP_SLOT = 11 +const R_CRIS_NONE = 0 +const R_CRIS_NUM = 20 +const R_CRIS_RELATIVE = 12 +const R_IA64_COPY = 132 +const R_IA64_DIR32LSB = 37 +const R_IA64_DIR32MSB = 36 +const R_IA64_DIR64LSB = 39 +const R_IA64_DIR64MSB = 38 +const R_IA64_DTPMOD64LSB = 167 +const R_IA64_DTPMOD64MSB = 166 +const R_IA64_DTPREL14 = 177 +const R_IA64_DTPREL22 = 178 +const R_IA64_DTPREL32LSB = 181 +const R_IA64_DTPREL32MSB = 180 +const R_IA64_DTPREL64I = 179 +const R_IA64_DTPREL64LSB = 183 +const R_IA64_DTPREL64MSB = 182 +const R_IA64_FPTR32LSB = 69 +const R_IA64_FPTR32MSB = 68 +const R_IA64_FPTR64I = 67 +const R_IA64_FPTR64LSB = 71 +const R_IA64_FPTR64MSB = 70 +const R_IA64_GPREL22 = 42 +const R_IA64_GPREL32LSB = 45 +const R_IA64_GPREL32MSB = 44 +const R_IA64_GPREL64I = 43 +const R_IA64_GPREL64LSB = 47 +const R_IA64_GPREL64MSB = 46 +const R_IA64_IMM14 = 33 +const R_IA64_IMM22 = 34 +const R_IA64_IMM64 = 35 +const R_IA64_IPLTLSB = 129 +const R_IA64_IPLTMSB = 128 +const R_IA64_LDXMOV = 135 +const R_IA64_LTOFF22 = 50 +const R_IA64_LTOFF22X = 134 +const R_IA64_LTOFF64I = 51 +const R_IA64_LTOFF_DTPMOD22 = 170 +const R_IA64_LTOFF_DTPREL22 = 186 +const R_IA64_LTOFF_FPTR22 = 82 +const R_IA64_LTOFF_FPTR32LSB = 85 +const R_IA64_LTOFF_FPTR32MSB = 84 +const R_IA64_LTOFF_FPTR64I = 83 +const R_IA64_LTOFF_FPTR64LSB = 87 +const R_IA64_LTOFF_FPTR64MSB = 86 +const R_IA64_LTOFF_TPREL22 = 154 +const R_IA64_LTV32LSB = 117 +const R_IA64_LTV32MSB = 116 +const R_IA64_LTV64LSB = 119 +const R_IA64_LTV64MSB = 118 +const R_IA64_NONE = 0 +const R_IA64_PCREL21B = 73 +const R_IA64_PCREL21BI = 121 +const R_IA64_PCREL21F = 75 +const R_IA64_PCREL21M = 74 +const R_IA64_PCREL22 = 122 +const R_IA64_PCREL32LSB = 77 +const R_IA64_PCREL32MSB = 76 +const R_IA64_PCREL60B = 72 +const R_IA64_PCREL64I = 123 +const R_IA64_PCREL64LSB = 79 +const R_IA64_PCREL64MSB = 78 +const R_IA64_PLTOFF22 = 58 +const R_IA64_PLTOFF64I = 59 +const R_IA64_PLTOFF64LSB = 63 +const R_IA64_PLTOFF64MSB = 62 +const R_IA64_REL32LSB = 109 +const R_IA64_REL32MSB = 108 +const R_IA64_REL64LSB = 111 +const R_IA64_REL64MSB = 110 +const R_IA64_SECREL32LSB = 101 +const R_IA64_SECREL32MSB = 100 +const R_IA64_SECREL64LSB = 103 +const R_IA64_SECREL64MSB = 102 +const R_IA64_SEGREL32LSB = 93 +const R_IA64_SEGREL32MSB = 92 +const R_IA64_SEGREL64LSB = 95 +const R_IA64_SEGREL64MSB = 94 +const R_IA64_SUB = 133 +const R_IA64_TPREL14 = 145 +const R_IA64_TPREL22 = 146 +const R_IA64_TPREL64I = 147 +const R_IA64_TPREL64LSB = 151 +const R_IA64_TPREL64MSB = 150 +const R_LARCH_32 = 1 +const R_LARCH_32_PCREL = 99 +const R_LARCH_64 = 2 +const R_LARCH_ABS64_HI12 = 70 +const R_LARCH_ABS64_LO20 = 69 +const R_LARCH_ABS_HI20 = 67 +const R_LARCH_ABS_LO12 = 68 +const R_LARCH_ADD16 = 48 +const R_LARCH_ADD24 = 49 +const R_LARCH_ADD32 = 50 +const R_LARCH_ADD64 = 51 +const R_LARCH_ADD8 = 47 +const R_LARCH_B16 = 64 +const R_LARCH_B21 = 65 +const R_LARCH_B26 = 66 +const R_LARCH_COPY = 4 +const R_LARCH_GNU_VTENTRY = 58 +const R_LARCH_GNU_VTINHERIT = 57 +const R_LARCH_GOT64_HI12 = 82 +const R_LARCH_GOT64_LO20 = 81 +const R_LARCH_GOT64_PC_HI12 = 78 +const R_LARCH_GOT64_PC_LO20 = 77 +const R_LARCH_GOT_HI20 = 79 +const R_LARCH_GOT_LO12 = 80 +const R_LARCH_GOT_PC_HI20 = 75 +const R_LARCH_GOT_PC_LO12 = 76 +const R_LARCH_IRELATIVE = 12 +const R_LARCH_JUMP_SLOT = 5 +const R_LARCH_MARK_LA = 20 +const R_LARCH_MARK_PCREL = 21 +const R_LARCH_NONE = 0 +const R_LARCH_PCALA64_HI12 = 74 +const R_LARCH_PCALA64_LO20 = 73 +const R_LARCH_PCALA_HI20 = 71 +const R_LARCH_PCALA_LO12 = 72 +const R_LARCH_RELATIVE = 3 +const R_LARCH_RELAX = 100 +const R_LARCH_SOP_ADD = 35 +const R_LARCH_SOP_AND = 36 +const R_LARCH_SOP_ASSERT = 30 +const R_LARCH_SOP_IF_ELSE = 37 +const R_LARCH_SOP_NOT = 31 +const R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45 +const R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44 +const R_LARCH_SOP_POP_32_S_10_12 = 40 +const R_LARCH_SOP_POP_32_S_10_16 = 41 +const R_LARCH_SOP_POP_32_S_10_16_S2 = 42 +const R_LARCH_SOP_POP_32_S_10_5 = 38 +const R_LARCH_SOP_POP_32_S_5_20 = 43 +const R_LARCH_SOP_POP_32_U = 46 +const R_LARCH_SOP_POP_32_U_10_12 = 39 +const R_LARCH_SOP_PUSH_ABSOLUTE = 23 +const R_LARCH_SOP_PUSH_DUP = 24 +const R_LARCH_SOP_PUSH_GPREL = 25 +const R_LARCH_SOP_PUSH_PCREL = 22 +const R_LARCH_SOP_PUSH_PLT_PCREL = 29 +const R_LARCH_SOP_PUSH_TLS_GD = 28 +const R_LARCH_SOP_PUSH_TLS_GOT = 27 +const R_LARCH_SOP_PUSH_TLS_TPREL = 26 +const R_LARCH_SOP_SL = 33 +const R_LARCH_SOP_SR = 34 +const R_LARCH_SOP_SUB = 32 +const R_LARCH_SUB16 = 53 +const R_LARCH_SUB24 = 54 +const R_LARCH_SUB32 = 55 +const R_LARCH_SUB64 = 56 +const R_LARCH_SUB8 = 52 +const R_LARCH_TLS_DTPMOD32 = 6 +const R_LARCH_TLS_DTPMOD64 = 7 +const R_LARCH_TLS_DTPREL32 = 8 +const R_LARCH_TLS_DTPREL64 = 9 +const R_LARCH_TLS_GD_HI20 = 98 +const R_LARCH_TLS_GD_PC_HI20 = 97 +const R_LARCH_TLS_IE64_HI12 = 94 +const R_LARCH_TLS_IE64_LO20 = 93 +const R_LARCH_TLS_IE64_PC_HI12 = 90 +const R_LARCH_TLS_IE64_PC_LO20 = 89 +const R_LARCH_TLS_IE_HI20 = 91 +const R_LARCH_TLS_IE_LO12 = 92 +const R_LARCH_TLS_IE_PC_HI20 = 87 +const R_LARCH_TLS_IE_PC_LO12 = 88 +const R_LARCH_TLS_LD_HI20 = 96 +const R_LARCH_TLS_LD_PC_HI20 = 95 +const R_LARCH_TLS_LE64_HI12 = 86 +const R_LARCH_TLS_LE64_LO20 = 85 +const R_LARCH_TLS_LE_HI20 = 83 +const R_LARCH_TLS_LE_LO12 = 84 +const R_LARCH_TLS_TPREL32 = 10 +const R_LARCH_TLS_TPREL64 = 11 +const R_M32R_10_PCREL = 4 +const R_M32R_10_PCREL_RELA = 36 +const R_M32R_16 = 1 +const R_M32R_16_RELA = 33 +const R_M32R_18_PCREL = 5 +const R_M32R_18_PCREL_RELA = 37 +const R_M32R_24 = 3 +const R_M32R_24_RELA = 35 +const R_M32R_26_PCREL = 6 +const R_M32R_26_PCREL_RELA = 38 +const R_M32R_26_PLTREL = 49 +const R_M32R_32 = 2 +const R_M32R_32_RELA = 34 +const R_M32R_COPY = 50 +const R_M32R_GLOB_DAT = 51 +const R_M32R_GNU_VTENTRY = 12 +const R_M32R_GNU_VTINHERIT = 11 +const R_M32R_GOT16_HI_SLO = 57 +const R_M32R_GOT16_HI_ULO = 56 +const R_M32R_GOT16_LO = 58 +const R_M32R_GOT24 = 48 +const R_M32R_GOTOFF = 54 +const R_M32R_GOTOFF_HI_SLO = 63 +const R_M32R_GOTOFF_HI_ULO = 62 +const R_M32R_GOTOFF_LO = 64 +const R_M32R_GOTPC24 = 55 +const R_M32R_GOTPC_HI_SLO = 60 +const R_M32R_GOTPC_HI_ULO = 59 +const R_M32R_GOTPC_LO = 61 +const R_M32R_HI16_SLO = 8 +const R_M32R_HI16_SLO_RELA = 40 +const R_M32R_HI16_ULO = 7 +const R_M32R_HI16_ULO_RELA = 39 +const R_M32R_JMP_SLOT = 52 +const R_M32R_LO16 = 9 +const R_M32R_LO16_RELA = 41 +const R_M32R_NONE = 0 +const R_M32R_NUM = 256 +const R_M32R_REL32 = 45 +const R_M32R_RELATIVE = 53 +const R_M32R_RELA_GNU_VTENTRY = 44 +const R_M32R_RELA_GNU_VTINHERIT = 43 +const R_M32R_SDA16 = 10 +const R_M32R_SDA16_RELA = 42 +const R_MICROBLAZE_32 = 1 +const R_MICROBLAZE_32_LO = 6 +const R_MICROBLAZE_32_PCREL = 2 +const R_MICROBLAZE_32_PCREL_LO = 4 +const R_MICROBLAZE_32_SYM_OP_SYM = 10 +const R_MICROBLAZE_64 = 5 +const R_MICROBLAZE_64_NONE = 9 +const R_MICROBLAZE_64_PCREL = 3 +const R_MICROBLAZE_COPY = 21 +const R_MICROBLAZE_GLOB_DAT = 18 +const R_MICROBLAZE_GNU_VTENTRY = 12 +const R_MICROBLAZE_GNU_VTINHERIT = 11 +const R_MICROBLAZE_GOTOFF_32 = 20 +const R_MICROBLAZE_GOTOFF_64 = 19 +const R_MICROBLAZE_GOTPC_64 = 13 +const R_MICROBLAZE_GOT_64 = 14 +const R_MICROBLAZE_JUMP_SLOT = 17 +const R_MICROBLAZE_NONE = 0 +const R_MICROBLAZE_PLT_64 = 15 +const R_MICROBLAZE_REL = 16 +const R_MICROBLAZE_SRO32 = 7 +const R_MICROBLAZE_SRW32 = 8 +const R_MICROBLAZE_TLS = 22 +const R_MICROBLAZE_TLSDTPMOD32 = 25 +const R_MICROBLAZE_TLSDTPREL32 = 26 +const R_MICROBLAZE_TLSDTPREL64 = 27 +const R_MICROBLAZE_TLSGD = 23 +const R_MICROBLAZE_TLSGOTTPREL32 = 28 +const R_MICROBLAZE_TLSLD = 24 +const R_MICROBLAZE_TLSTPREL32 = 29 +const R_MIPS_16 = 1 +const R_MIPS_26 = 4 +const R_MIPS_32 = 2 +const R_MIPS_64 = 18 +const R_MIPS_ADD_IMMEDIATE = 34 +const R_MIPS_CALL16 = 11 +const R_MIPS_CALL_HI16 = 30 +const R_MIPS_CALL_LO16 = 31 +const R_MIPS_COPY = 126 +const R_MIPS_DELETE = 27 +const R_MIPS_GLOB_DAT = 51 +const R_MIPS_GOT16 = 9 +const R_MIPS_GOT_DISP = 19 +const R_MIPS_GOT_HI16 = 22 +const R_MIPS_GOT_LO16 = 23 +const R_MIPS_GOT_OFST = 21 +const R_MIPS_GOT_PAGE = 20 +const R_MIPS_GPREL16 = 7 +const R_MIPS_GPREL32 = 12 +const R_MIPS_HI16 = 5 +const R_MIPS_HIGHER = 28 +const R_MIPS_HIGHEST = 29 +const R_MIPS_INSERT_A = 25 +const R_MIPS_INSERT_B = 26 +const R_MIPS_JALR = 37 +const R_MIPS_JUMP_SLOT = 127 +const R_MIPS_LITERAL = 8 +const R_MIPS_LO16 = 6 +const R_MIPS_NONE = 0 +const R_MIPS_NUM = 128 +const R_MIPS_PC16 = 10 +const R_MIPS_PJUMP = 35 +const R_MIPS_REL16 = 33 +const R_MIPS_REL32 = 3 +const R_MIPS_RELGOT = 36 +const R_MIPS_SCN_DISP = 32 +const R_MIPS_SHIFT5 = 16 +const R_MIPS_SHIFT6 = 17 +const R_MIPS_SUB = 24 +const R_MIPS_TLS_DTPMOD32 = 38 +const R_MIPS_TLS_DTPMOD64 = 40 +const R_MIPS_TLS_DTPREL32 = 39 +const R_MIPS_TLS_DTPREL64 = 41 +const R_MIPS_TLS_DTPREL_HI16 = 44 +const R_MIPS_TLS_DTPREL_LO16 = 45 +const R_MIPS_TLS_GD = 42 +const R_MIPS_TLS_GOTTPREL = 46 +const R_MIPS_TLS_LDM = 43 +const R_MIPS_TLS_TPREL32 = 47 +const R_MIPS_TLS_TPREL64 = 48 +const R_MIPS_TLS_TPREL_HI16 = 49 +const R_MIPS_TLS_TPREL_LO16 = 50 +const R_MN10300_16 = 2 +const R_MN10300_24 = 9 +const R_MN10300_32 = 1 +const R_MN10300_8 = 3 +const R_MN10300_COPY = 20 +const R_MN10300_GLOB_DAT = 21 +const R_MN10300_GNU_VTENTRY = 8 +const R_MN10300_GNU_VTINHERIT = 7 +const R_MN10300_GOT16 = 19 +const R_MN10300_GOT24 = 18 +const R_MN10300_GOT32 = 17 +const R_MN10300_GOTOFF16 = 14 +const R_MN10300_GOTOFF24 = 13 +const R_MN10300_GOTOFF32 = 12 +const R_MN10300_GOTPC16 = 11 +const R_MN10300_GOTPC32 = 10 +const R_MN10300_JMP_SLOT = 22 +const R_MN10300_NONE = 0 +const R_MN10300_NUM = 24 +const R_MN10300_PCREL16 = 5 +const R_MN10300_PCREL32 = 4 +const R_MN10300_PCREL8 = 6 +const R_MN10300_PLT16 = 16 +const R_MN10300_PLT32 = 15 +const R_MN10300_RELATIVE = 23 +const R_NIOS2_ALIGN = 21 +const R_NIOS2_BFD_RELOC_16 = 13 +const R_NIOS2_BFD_RELOC_32 = 12 +const R_NIOS2_BFD_RELOC_8 = 14 +const R_NIOS2_CACHE_OPX = 6 +const R_NIOS2_CALL16 = 23 +const R_NIOS2_CALL26 = 4 +const R_NIOS2_CALL26_NOAT = 41 +const R_NIOS2_CALLR = 20 +const R_NIOS2_CALL_HA = 45 +const R_NIOS2_CALL_LO = 44 +const R_NIOS2_CJMP = 19 +const R_NIOS2_COPY = 36 +const R_NIOS2_GLOB_DAT = 37 +const R_NIOS2_GNU_VTENTRY = 17 +const R_NIOS2_GNU_VTINHERIT = 16 +const R_NIOS2_GOT16 = 22 +const R_NIOS2_GOTOFF = 40 +const R_NIOS2_GOTOFF_HA = 25 +const R_NIOS2_GOTOFF_LO = 24 +const R_NIOS2_GOT_HA = 43 +const R_NIOS2_GOT_LO = 42 +const R_NIOS2_GPREL = 15 +const R_NIOS2_HI16 = 9 +const R_NIOS2_HIADJ16 = 11 +const R_NIOS2_IMM5 = 5 +const R_NIOS2_IMM6 = 7 +const R_NIOS2_IMM8 = 8 +const R_NIOS2_JUMP_SLOT = 38 +const R_NIOS2_LO16 = 10 +const R_NIOS2_NONE = 0 +const R_NIOS2_PCREL16 = 3 +const R_NIOS2_PCREL_HA = 27 +const R_NIOS2_PCREL_LO = 26 +const R_NIOS2_RELATIVE = 39 +const R_NIOS2_S16 = 1 +const R_NIOS2_TLS_DTPMOD = 33 +const R_NIOS2_TLS_DTPREL = 34 +const R_NIOS2_TLS_GD16 = 28 +const R_NIOS2_TLS_IE16 = 31 +const R_NIOS2_TLS_LDM16 = 29 +const R_NIOS2_TLS_LDO16 = 30 +const R_NIOS2_TLS_LE16 = 32 +const R_NIOS2_TLS_TPREL = 35 +const R_NIOS2_U16 = 2 +const R_NIOS2_UJMP = 18 +const R_OR1K_16 = 2 +const R_OR1K_16_PCREL = 10 +const R_OR1K_32 = 1 +const R_OR1K_32_PCREL = 9 +const R_OR1K_8 = 3 +const R_OR1K_8_PCREL = 11 +const R_OR1K_COPY = 18 +const R_OR1K_GLOB_DAT = 19 +const R_OR1K_GNU_VTENTRY = 7 +const R_OR1K_GNU_VTINHERIT = 8 +const R_OR1K_GOT16 = 14 +const R_OR1K_GOTOFF_HI16 = 16 +const R_OR1K_GOTOFF_LO16 = 17 +const R_OR1K_GOTPC_HI16 = 12 +const R_OR1K_GOTPC_LO16 = 13 +const R_OR1K_HI_16_IN_INSN = 5 +const R_OR1K_INSN_REL_26 = 6 +const R_OR1K_JMP_SLOT = 20 +const R_OR1K_LO_16_IN_INSN = 4 +const R_OR1K_NONE = 0 +const R_OR1K_PLT26 = 15 +const R_OR1K_RELATIVE = 21 +const R_OR1K_TLS_DTPMOD = 34 +const R_OR1K_TLS_DTPOFF = 33 +const R_OR1K_TLS_GD_HI16 = 22 +const R_OR1K_TLS_GD_LO16 = 23 +const R_OR1K_TLS_IE_HI16 = 28 +const R_OR1K_TLS_IE_LO16 = 29 +const R_OR1K_TLS_LDM_HI16 = 24 +const R_OR1K_TLS_LDM_LO16 = 25 +const R_OR1K_TLS_LDO_HI16 = 26 +const R_OR1K_TLS_LDO_LO16 = 27 +const R_OR1K_TLS_LE_HI16 = 30 +const R_OR1K_TLS_LE_LO16 = 31 +const R_OR1K_TLS_TPOFF = 32 +const R_PARISC_COPY = 128 +const R_PARISC_DIR14DR = 84 +const R_PARISC_DIR14R = 6 +const R_PARISC_DIR14WR = 83 +const R_PARISC_DIR16DF = 87 +const R_PARISC_DIR16F = 85 +const R_PARISC_DIR16WF = 86 +const R_PARISC_DIR17F = 4 +const R_PARISC_DIR17R = 3 +const R_PARISC_DIR21L = 2 +const R_PARISC_DIR32 = 1 +const R_PARISC_DIR64 = 80 +const R_PARISC_DPREL14R = 22 +const R_PARISC_DPREL21L = 18 +const R_PARISC_EPLT = 130 +const R_PARISC_FPTR64 = 64 +const R_PARISC_GNU_VTENTRY = 232 +const R_PARISC_GNU_VTINHERIT = 233 +const R_PARISC_GPREL14DR = 92 +const R_PARISC_GPREL14R = 30 +const R_PARISC_GPREL14WR = 91 +const R_PARISC_GPREL16DF = 95 +const R_PARISC_GPREL16F = 93 +const R_PARISC_GPREL16WF = 94 +const R_PARISC_GPREL21L = 26 +const R_PARISC_GPREL64 = 88 +const R_PARISC_HIRESERVE = 255 +const R_PARISC_IPLT = 129 +const R_PARISC_LORESERVE = 128 +const R_PARISC_LTOFF14DR = 100 +const R_PARISC_LTOFF14R = 38 +const R_PARISC_LTOFF14WR = 99 +const R_PARISC_LTOFF16DF = 103 +const R_PARISC_LTOFF16F = 101 +const R_PARISC_LTOFF16WF = 102 +const R_PARISC_LTOFF21L = 34 +const R_PARISC_LTOFF64 = 96 +const R_PARISC_LTOFF_FPTR14DR = 124 +const R_PARISC_LTOFF_FPTR14R = 62 +const R_PARISC_LTOFF_FPTR14WR = 123 +const R_PARISC_LTOFF_FPTR16DF = 127 +const R_PARISC_LTOFF_FPTR16F = 125 +const R_PARISC_LTOFF_FPTR16WF = 126 +const R_PARISC_LTOFF_FPTR21L = 58 +const R_PARISC_LTOFF_FPTR32 = 57 +const R_PARISC_LTOFF_FPTR64 = 120 +const R_PARISC_LTOFF_TP14DR = 228 +const R_PARISC_LTOFF_TP14F = 167 +const R_PARISC_LTOFF_TP14R = 166 +const R_PARISC_LTOFF_TP14WR = 227 +const R_PARISC_LTOFF_TP16DF = 231 +const R_PARISC_LTOFF_TP16F = 229 +const R_PARISC_LTOFF_TP16WF = 230 +const R_PARISC_LTOFF_TP21L = 162 +const R_PARISC_LTOFF_TP64 = 224 +const R_PARISC_NONE = 0 +const R_PARISC_PCREL14DR = 76 +const R_PARISC_PCREL14R = 14 +const R_PARISC_PCREL14WR = 75 +const R_PARISC_PCREL16DF = 79 +const R_PARISC_PCREL16F = 77 +const R_PARISC_PCREL16WF = 78 +const R_PARISC_PCREL17F = 12 +const R_PARISC_PCREL17R = 11 +const R_PARISC_PCREL21L = 10 +const R_PARISC_PCREL22F = 74 +const R_PARISC_PCREL32 = 9 +const R_PARISC_PCREL64 = 72 +const R_PARISC_PLABEL14R = 70 +const R_PARISC_PLABEL21L = 66 +const R_PARISC_PLABEL32 = 65 +const R_PARISC_PLTOFF14DR = 116 +const R_PARISC_PLTOFF14R = 54 +const R_PARISC_PLTOFF14WR = 115 +const R_PARISC_PLTOFF16DF = 119 +const R_PARISC_PLTOFF16F = 117 +const R_PARISC_PLTOFF16WF = 118 +const R_PARISC_PLTOFF21L = 50 +const R_PARISC_SECREL32 = 41 +const R_PARISC_SECREL64 = 104 +const R_PARISC_SEGBASE = 48 +const R_PARISC_SEGREL32 = 49 +const R_PARISC_SEGREL64 = 112 +const R_PARISC_TLS_DTPMOD32 = 242 +const R_PARISC_TLS_DTPMOD64 = 243 +const R_PARISC_TLS_DTPOFF32 = 244 +const R_PARISC_TLS_DTPOFF64 = 245 +const R_PARISC_TLS_GD14R = 235 +const R_PARISC_TLS_GD21L = 234 +const R_PARISC_TLS_GDCALL = 236 +const R_PARISC_TLS_IE14R = 166 +const R_PARISC_TLS_IE21L = 162 +const R_PARISC_TLS_LDM14R = 238 +const R_PARISC_TLS_LDM21L = 237 +const R_PARISC_TLS_LDMCALL = 239 +const R_PARISC_TLS_LDO14R = 241 +const R_PARISC_TLS_LDO21L = 240 +const R_PARISC_TLS_LE14R = 158 +const R_PARISC_TLS_LE21L = 154 +const R_PARISC_TLS_TPREL32 = 153 +const R_PARISC_TLS_TPREL64 = 216 +const R_PARISC_TPREL14DR = 220 +const R_PARISC_TPREL14R = 158 +const R_PARISC_TPREL14WR = 219 +const R_PARISC_TPREL16DF = 223 +const R_PARISC_TPREL16F = 221 +const R_PARISC_TPREL16WF = 222 +const R_PARISC_TPREL21L = 154 +const R_PARISC_TPREL32 = 153 +const R_PARISC_TPREL64 = 216 +const R_PPC64_ADDR14 = 7 +const R_PPC64_ADDR14_BRNTAKEN = 9 +const R_PPC64_ADDR14_BRTAKEN = 8 +const R_PPC64_ADDR16 = 3 +const R_PPC64_ADDR16_DS = 56 +const R_PPC64_ADDR16_HA = 6 +const R_PPC64_ADDR16_HI = 5 +const R_PPC64_ADDR16_HIGH = 110 +const R_PPC64_ADDR16_HIGHA = 111 +const R_PPC64_ADDR16_HIGHER = 39 +const R_PPC64_ADDR16_HIGHERA = 40 +const R_PPC64_ADDR16_HIGHEST = 41 +const R_PPC64_ADDR16_HIGHESTA = 42 +const R_PPC64_ADDR16_LO = 4 +const R_PPC64_ADDR16_LO_DS = 57 +const R_PPC64_ADDR24 = 2 +const R_PPC64_ADDR30 = 37 +const R_PPC64_ADDR32 = 1 +const R_PPC64_ADDR64 = 38 +const R_PPC64_COPY = 19 +const R_PPC64_DTPMOD64 = 68 +const R_PPC64_DTPREL16 = 74 +const R_PPC64_DTPREL16_DS = 101 +const R_PPC64_DTPREL16_HA = 77 +const R_PPC64_DTPREL16_HI = 76 +const R_PPC64_DTPREL16_HIGH = 114 +const R_PPC64_DTPREL16_HIGHA = 115 +const R_PPC64_DTPREL16_HIGHER = 103 +const R_PPC64_DTPREL16_HIGHERA = 104 +const R_PPC64_DTPREL16_HIGHEST = 105 +const R_PPC64_DTPREL16_HIGHESTA = 106 +const R_PPC64_DTPREL16_LO = 75 +const R_PPC64_DTPREL16_LO_DS = 102 +const R_PPC64_DTPREL64 = 78 +const R_PPC64_GLOB_DAT = 20 +const R_PPC64_GOT16 = 14 +const R_PPC64_GOT16_DS = 58 +const R_PPC64_GOT16_HA = 17 +const R_PPC64_GOT16_HI = 16 +const R_PPC64_GOT16_LO = 15 +const R_PPC64_GOT16_LO_DS = 59 +const R_PPC64_GOT_DTPREL16_DS = 91 +const R_PPC64_GOT_DTPREL16_HA = 94 +const R_PPC64_GOT_DTPREL16_HI = 93 +const R_PPC64_GOT_DTPREL16_LO_DS = 92 +const R_PPC64_GOT_TLSGD16 = 79 +const R_PPC64_GOT_TLSGD16_HA = 82 +const R_PPC64_GOT_TLSGD16_HI = 81 +const R_PPC64_GOT_TLSGD16_LO = 80 +const R_PPC64_GOT_TLSLD16 = 83 +const R_PPC64_GOT_TLSLD16_HA = 86 +const R_PPC64_GOT_TLSLD16_HI = 85 +const R_PPC64_GOT_TLSLD16_LO = 84 +const R_PPC64_GOT_TPREL16_DS = 87 +const R_PPC64_GOT_TPREL16_HA = 90 +const R_PPC64_GOT_TPREL16_HI = 89 +const R_PPC64_GOT_TPREL16_LO_DS = 88 +const R_PPC64_IRELATIVE = 248 +const R_PPC64_JMP_IREL = 247 +const R_PPC64_JMP_SLOT = 21 +const R_PPC64_NONE = 0 +const R_PPC64_PLT16_HA = 31 +const R_PPC64_PLT16_HI = 30 +const R_PPC64_PLT16_LO = 29 +const R_PPC64_PLT16_LO_DS = 60 +const R_PPC64_PLT32 = 27 +const R_PPC64_PLT64 = 45 +const R_PPC64_PLTGOT16 = 52 +const R_PPC64_PLTGOT16_DS = 65 +const R_PPC64_PLTGOT16_HA = 55 +const R_PPC64_PLTGOT16_HI = 54 +const R_PPC64_PLTGOT16_LO = 53 +const R_PPC64_PLTGOT16_LO_DS = 66 +const R_PPC64_PLTREL32 = 28 +const R_PPC64_PLTREL64 = 46 +const R_PPC64_REL14 = 11 +const R_PPC64_REL14_BRNTAKEN = 13 +const R_PPC64_REL14_BRTAKEN = 12 +const R_PPC64_REL16 = 249 +const R_PPC64_REL16_HA = 252 +const R_PPC64_REL16_HI = 251 +const R_PPC64_REL16_LO = 250 +const R_PPC64_REL24 = 10 +const R_PPC64_REL32 = 26 +const R_PPC64_REL64 = 44 +const R_PPC64_RELATIVE = 22 +const R_PPC64_SECTOFF = 33 +const R_PPC64_SECTOFF_DS = 61 +const R_PPC64_SECTOFF_HA = 36 +const R_PPC64_SECTOFF_HI = 35 +const R_PPC64_SECTOFF_LO = 34 +const R_PPC64_SECTOFF_LO_DS = 62 +const R_PPC64_TLS = 67 +const R_PPC64_TLSGD = 107 +const R_PPC64_TLSLD = 108 +const R_PPC64_TOC = 51 +const R_PPC64_TOC16 = 47 +const R_PPC64_TOC16_DS = 63 +const R_PPC64_TOC16_HA = 50 +const R_PPC64_TOC16_HI = 49 +const R_PPC64_TOC16_LO = 48 +const R_PPC64_TOC16_LO_DS = 64 +const R_PPC64_TOCSAVE = 109 +const R_PPC64_TPREL16 = 69 +const R_PPC64_TPREL16_DS = 95 +const R_PPC64_TPREL16_HA = 72 +const R_PPC64_TPREL16_HI = 71 +const R_PPC64_TPREL16_HIGH = 112 +const R_PPC64_TPREL16_HIGHA = 113 +const R_PPC64_TPREL16_HIGHER = 97 +const R_PPC64_TPREL16_HIGHERA = 98 +const R_PPC64_TPREL16_HIGHEST = 99 +const R_PPC64_TPREL16_HIGHESTA = 100 +const R_PPC64_TPREL16_LO = 70 +const R_PPC64_TPREL16_LO_DS = 96 +const R_PPC64_TPREL64 = 73 +const R_PPC64_UADDR16 = 25 +const R_PPC64_UADDR32 = 24 +const R_PPC64_UADDR64 = 43 +const R_PPC_ADDR14 = 7 +const R_PPC_ADDR14_BRNTAKEN = 9 +const R_PPC_ADDR14_BRTAKEN = 8 +const R_PPC_ADDR16 = 3 +const R_PPC_ADDR16_HA = 6 +const R_PPC_ADDR16_HI = 5 +const R_PPC_ADDR16_LO = 4 +const R_PPC_ADDR24 = 2 +const R_PPC_ADDR32 = 1 +const R_PPC_COPY = 19 +const R_PPC_DIAB_RELSDA_HA = 185 +const R_PPC_DIAB_RELSDA_HI = 184 +const R_PPC_DIAB_RELSDA_LO = 183 +const R_PPC_DIAB_SDA21_HA = 182 +const R_PPC_DIAB_SDA21_HI = 181 +const R_PPC_DIAB_SDA21_LO = 180 +const R_PPC_DTPMOD32 = 68 +const R_PPC_DTPREL16 = 74 +const R_PPC_DTPREL16_HA = 77 +const R_PPC_DTPREL16_HI = 76 +const R_PPC_DTPREL16_LO = 75 +const R_PPC_DTPREL32 = 78 +const R_PPC_EMB_BIT_FLD = 115 +const R_PPC_EMB_MRKREF = 110 +const R_PPC_EMB_NADDR16 = 102 +const R_PPC_EMB_NADDR16_HA = 105 +const R_PPC_EMB_NADDR16_HI = 104 +const R_PPC_EMB_NADDR16_LO = 103 +const R_PPC_EMB_NADDR32 = 101 +const R_PPC_EMB_RELSDA = 116 +const R_PPC_EMB_RELSEC16 = 111 +const R_PPC_EMB_RELST_HA = 114 +const R_PPC_EMB_RELST_HI = 113 +const R_PPC_EMB_RELST_LO = 112 +const R_PPC_EMB_SDA21 = 109 +const R_PPC_EMB_SDA2I16 = 107 +const R_PPC_EMB_SDA2REL = 108 +const R_PPC_EMB_SDAI16 = 106 +const R_PPC_GLOB_DAT = 20 +const R_PPC_GOT16 = 14 +const R_PPC_GOT16_HA = 17 +const R_PPC_GOT16_HI = 16 +const R_PPC_GOT16_LO = 15 +const R_PPC_GOT_DTPREL16 = 91 +const R_PPC_GOT_DTPREL16_HA = 94 +const R_PPC_GOT_DTPREL16_HI = 93 +const R_PPC_GOT_DTPREL16_LO = 92 +const R_PPC_GOT_TLSGD16 = 79 +const R_PPC_GOT_TLSGD16_HA = 82 +const R_PPC_GOT_TLSGD16_HI = 81 +const R_PPC_GOT_TLSGD16_LO = 80 +const R_PPC_GOT_TLSLD16 = 83 +const R_PPC_GOT_TLSLD16_HA = 86 +const R_PPC_GOT_TLSLD16_HI = 85 +const R_PPC_GOT_TLSLD16_LO = 84 +const R_PPC_GOT_TPREL16 = 87 +const R_PPC_GOT_TPREL16_HA = 90 +const R_PPC_GOT_TPREL16_HI = 89 +const R_PPC_GOT_TPREL16_LO = 88 +const R_PPC_IRELATIVE = 248 +const R_PPC_JMP_SLOT = 21 +const R_PPC_LOCAL24PC = 23 +const R_PPC_NONE = 0 +const R_PPC_PLT16_HA = 31 +const R_PPC_PLT16_HI = 30 +const R_PPC_PLT16_LO = 29 +const R_PPC_PLT32 = 27 +const R_PPC_PLTREL24 = 18 +const R_PPC_PLTREL32 = 28 +const R_PPC_REL14 = 11 +const R_PPC_REL14_BRNTAKEN = 13 +const R_PPC_REL14_BRTAKEN = 12 +const R_PPC_REL16 = 249 +const R_PPC_REL16_HA = 252 +const R_PPC_REL16_HI = 251 +const R_PPC_REL16_LO = 250 +const R_PPC_REL24 = 10 +const R_PPC_REL32 = 26 +const R_PPC_RELATIVE = 22 +const R_PPC_SDAREL16 = 32 +const R_PPC_SECTOFF = 33 +const R_PPC_SECTOFF_HA = 36 +const R_PPC_SECTOFF_HI = 35 +const R_PPC_SECTOFF_LO = 34 +const R_PPC_TLS = 67 +const R_PPC_TLSGD = 95 +const R_PPC_TLSLD = 96 +const R_PPC_TOC16 = 255 +const R_PPC_TPREL16 = 69 +const R_PPC_TPREL16_HA = 72 +const R_PPC_TPREL16_HI = 71 +const R_PPC_TPREL16_LO = 70 +const R_PPC_TPREL32 = 73 +const R_PPC_UADDR16 = 25 +const R_PPC_UADDR32 = 24 +const R_RISCV_32 = 1 +const R_RISCV_32_PCREL = 57 +const R_RISCV_64 = 2 +const R_RISCV_ADD16 = 34 +const R_RISCV_ADD32 = 35 +const R_RISCV_ADD64 = 36 +const R_RISCV_ADD8 = 33 +const R_RISCV_ALIGN = 43 +const R_RISCV_BRANCH = 16 +const R_RISCV_CALL = 18 +const R_RISCV_CALL_PLT = 19 +const R_RISCV_COPY = 4 +const R_RISCV_GOT32_PCREL = 41 +const R_RISCV_GOT_HI20 = 20 +const R_RISCV_HI20 = 26 +const R_RISCV_IRELATIVE = 58 +const R_RISCV_JAL = 17 +const R_RISCV_JUMP_SLOT = 5 +const R_RISCV_LO12_I = 27 +const R_RISCV_LO12_S = 28 +const R_RISCV_NONE = 0 +const R_RISCV_PCREL_HI20 = 23 +const R_RISCV_PCREL_LO12_I = 24 +const R_RISCV_PCREL_LO12_S = 25 +const R_RISCV_PLT32 = 59 +const R_RISCV_RELATIVE = 3 +const R_RISCV_RELAX = 51 +const R_RISCV_RVC_BRANCH = 44 +const R_RISCV_RVC_JUMP = 45 +const R_RISCV_RVC_LUI = 46 +const R_RISCV_SET16 = 55 +const R_RISCV_SET32 = 56 +const R_RISCV_SET6 = 53 +const R_RISCV_SET8 = 54 +const R_RISCV_SET_ULEB128 = 60 +const R_RISCV_SUB16 = 38 +const R_RISCV_SUB32 = 39 +const R_RISCV_SUB6 = 52 +const R_RISCV_SUB64 = 40 +const R_RISCV_SUB8 = 37 +const R_RISCV_SUB_ULEB128 = 61 +const R_RISCV_TLSDESC = 12 +const R_RISCV_TLSDESC_ADD_LO12 = 64 +const R_RISCV_TLSDESC_CALL = 65 +const R_RISCV_TLSDESC_HI20 = 62 +const R_RISCV_TLSDESC_LOAD_LO12 = 63 +const R_RISCV_TLS_DTPMOD32 = 6 +const R_RISCV_TLS_DTPMOD64 = 7 +const R_RISCV_TLS_DTPREL32 = 8 +const R_RISCV_TLS_DTPREL64 = 9 +const R_RISCV_TLS_GD_HI20 = 22 +const R_RISCV_TLS_GOT_HI20 = 21 +const R_RISCV_TLS_TPREL32 = 10 +const R_RISCV_TLS_TPREL64 = 11 +const R_RISCV_TPREL_ADD = 32 +const R_RISCV_TPREL_HI20 = 29 +const R_RISCV_TPREL_LO12_I = 30 +const R_RISCV_TPREL_LO12_S = 31 +const R_SH_ALIGN = 29 +const R_SH_CODE = 30 +const R_SH_COPY = 162 +const R_SH_COUNT = 28 +const R_SH_DATA = 31 +const R_SH_DIR32 = 1 +const R_SH_DIR8BP = 7 +const R_SH_DIR8L = 9 +const R_SH_DIR8W = 8 +const R_SH_DIR8WPL = 5 +const R_SH_DIR8WPN = 3 +const R_SH_DIR8WPZ = 6 +const R_SH_FUNCDESC = 207 +const R_SH_FUNCDESC_VALUE = 208 +const R_SH_GLOB_DAT = 163 +const R_SH_GNU_VTENTRY = 35 +const R_SH_GNU_VTINHERIT = 34 +const R_SH_GOT20 = 201 +const R_SH_GOT32 = 160 +const R_SH_GOTFUNCDESC = 203 +const R_SH_GOTFUNCDEST20 = 204 +const R_SH_GOTOFF = 166 +const R_SH_GOTOFF20 = 202 +const R_SH_GOTOFFFUNCDESC = 205 +const R_SH_GOTOFFFUNCDEST20 = 206 +const R_SH_GOTPC = 167 +const R_SH_IND12W = 4 +const R_SH_JMP_SLOT = 164 +const R_SH_LABEL = 32 +const R_SH_NONE = 0 +const R_SH_NUM = 256 +const R_SH_PLT32 = 161 +const R_SH_REL32 = 2 +const R_SH_RELATIVE = 165 +const R_SH_SWITCH16 = 25 +const R_SH_SWITCH32 = 26 +const R_SH_SWITCH8 = 33 +const R_SH_TLS_DTPMOD32 = 149 +const R_SH_TLS_DTPOFF32 = 150 +const R_SH_TLS_GD_32 = 144 +const R_SH_TLS_IE_32 = 147 +const R_SH_TLS_LDO_32 = 146 +const R_SH_TLS_LD_32 = 145 +const R_SH_TLS_LE_32 = 148 +const R_SH_TLS_TPOFF32 = 151 +const R_SH_USES = 27 +const R_SPARC_10 = 30 +const R_SPARC_11 = 31 +const R_SPARC_13 = 11 +const R_SPARC_16 = 2 +const R_SPARC_22 = 10 +const R_SPARC_32 = 3 +const R_SPARC_5 = 44 +const R_SPARC_6 = 45 +const R_SPARC_64 = 32 +const R_SPARC_7 = 43 +const R_SPARC_8 = 1 +const R_SPARC_COPY = 19 +const R_SPARC_DISP16 = 5 +const R_SPARC_DISP32 = 6 +const R_SPARC_DISP64 = 46 +const R_SPARC_DISP8 = 4 +const R_SPARC_GLOB_DAT = 20 +const R_SPARC_GLOB_JMP = 42 +const R_SPARC_GNU_VTENTRY = 251 +const R_SPARC_GNU_VTINHERIT = 250 +const R_SPARC_GOT10 = 13 +const R_SPARC_GOT13 = 14 +const R_SPARC_GOT22 = 15 +const R_SPARC_GOTDATA_HIX22 = 80 +const R_SPARC_GOTDATA_LOX10 = 81 +const R_SPARC_GOTDATA_OP = 84 +const R_SPARC_GOTDATA_OP_HIX22 = 82 +const R_SPARC_GOTDATA_OP_LOX10 = 83 +const R_SPARC_H34 = 85 +const R_SPARC_H44 = 50 +const R_SPARC_HH22 = 34 +const R_SPARC_HI22 = 9 +const R_SPARC_HIPLT22 = 25 +const R_SPARC_HIX22 = 48 +const R_SPARC_HM10 = 35 +const R_SPARC_JMP_SLOT = 21 +const R_SPARC_L44 = 52 +const R_SPARC_LM22 = 36 +const R_SPARC_LO10 = 12 +const R_SPARC_LOPLT10 = 26 +const R_SPARC_LOX10 = 49 +const R_SPARC_M44 = 51 +const R_SPARC_NONE = 0 +const R_SPARC_NUM = 253 +const R_SPARC_OLO10 = 33 +const R_SPARC_PC10 = 16 +const R_SPARC_PC22 = 17 +const R_SPARC_PCPLT10 = 29 +const R_SPARC_PCPLT22 = 28 +const R_SPARC_PCPLT32 = 27 +const R_SPARC_PC_HH22 = 37 +const R_SPARC_PC_HM10 = 38 +const R_SPARC_PC_LM22 = 39 +const R_SPARC_PLT32 = 24 +const R_SPARC_PLT64 = 47 +const R_SPARC_REGISTER = 53 +const R_SPARC_RELATIVE = 22 +const R_SPARC_REV32 = 252 +const R_SPARC_SIZE32 = 86 +const R_SPARC_SIZE64 = 87 +const R_SPARC_TLS_DTPMOD32 = 74 +const R_SPARC_TLS_DTPMOD64 = 75 +const R_SPARC_TLS_DTPOFF32 = 76 +const R_SPARC_TLS_DTPOFF64 = 77 +const R_SPARC_TLS_GD_ADD = 58 +const R_SPARC_TLS_GD_CALL = 59 +const R_SPARC_TLS_GD_HI22 = 56 +const R_SPARC_TLS_GD_LO10 = 57 +const R_SPARC_TLS_IE_ADD = 71 +const R_SPARC_TLS_IE_HI22 = 67 +const R_SPARC_TLS_IE_LD = 69 +const R_SPARC_TLS_IE_LDX = 70 +const R_SPARC_TLS_IE_LO10 = 68 +const R_SPARC_TLS_LDM_ADD = 62 +const R_SPARC_TLS_LDM_CALL = 63 +const R_SPARC_TLS_LDM_HI22 = 60 +const R_SPARC_TLS_LDM_LO10 = 61 +const R_SPARC_TLS_LDO_ADD = 66 +const R_SPARC_TLS_LDO_HIX22 = 64 +const R_SPARC_TLS_LDO_LOX10 = 65 +const R_SPARC_TLS_LE_HIX22 = 72 +const R_SPARC_TLS_LE_LOX10 = 73 +const R_SPARC_TLS_TPOFF32 = 78 +const R_SPARC_TLS_TPOFF64 = 79 +const R_SPARC_UA16 = 55 +const R_SPARC_UA32 = 23 +const R_SPARC_UA64 = 54 +const R_SPARC_WDISP16 = 40 +const R_SPARC_WDISP19 = 41 +const R_SPARC_WDISP22 = 8 +const R_SPARC_WDISP30 = 7 +const R_SPARC_WPLT30 = 18 +const R_X86_64_16 = 12 +const R_X86_64_32 = 10 +const R_X86_64_32S = 11 +const R_X86_64_64 = 1 +const R_X86_64_8 = 14 +const R_X86_64_COPY = 5 +const R_X86_64_DTPMOD64 = 16 +const R_X86_64_DTPOFF32 = 21 +const R_X86_64_DTPOFF64 = 17 +const R_X86_64_GLOB_DAT = 6 +const R_X86_64_GOT32 = 3 +const R_X86_64_GOT64 = 27 +const R_X86_64_GOTOFF64 = 25 +const R_X86_64_GOTPC32 = 26 +const R_X86_64_GOTPC32_TLSDESC = 34 +const R_X86_64_GOTPC64 = 29 +const R_X86_64_GOTPCREL = 9 +const R_X86_64_GOTPCREL64 = 28 +const R_X86_64_GOTPCRELX = 41 +const R_X86_64_GOTPLT64 = 30 +const R_X86_64_GOTTPOFF = 22 +const R_X86_64_IRELATIVE = 37 +const R_X86_64_JUMP_SLOT = 7 +const R_X86_64_NONE = 0 +const R_X86_64_NUM = 43 +const R_X86_64_PC16 = 13 +const R_X86_64_PC32 = 2 +const R_X86_64_PC64 = 24 +const R_X86_64_PC8 = 15 +const R_X86_64_PLT32 = 4 +const R_X86_64_PLTOFF64 = 31 +const R_X86_64_RELATIVE = 8 +const R_X86_64_RELATIVE64 = 38 +const R_X86_64_REX_GOTPCRELX = 42 +const R_X86_64_SIZE32 = 32 +const R_X86_64_SIZE64 = 33 +const R_X86_64_TLSDESC = 36 +const R_X86_64_TLSDESC_CALL = 35 +const R_X86_64_TLSGD = 19 +const R_X86_64_TLSLD = 20 +const R_X86_64_TPOFF32 = 23 +const R_X86_64_TPOFF64 = 18 +const SA_EXPOSE_TAGBITS = 2048 +const SA_NOCLDSTOP = 1 +const SA_NOCLDWAIT = 2 +const SA_NODEFER = 1073741824 +const SA_ONSTACK = 134217728 +const SA_RESETHAND = 2147483648 +const SA_RESTART = 268435456 +const SA_RESTORER = 67108864 +const SA_SIGINFO = 4 +const SA_UNSUPPORTED = 1024 +const SCM_TIMESTAMPING_OLD = 37 +const SCM_TIMESTAMPNS_OLD = 35 +const SCM_TIMESTAMP_OLD = 29 +const SEGV_ACCERR = 2 +const SEGV_BNDERR = 3 +const SEGV_MAPERR = 1 +const SEGV_MTEAERR = 8 +const SEGV_MTESERR = 9 +const SEGV_PKUERR = 4 +const SELFMAG = 4 +const SHF_ALLOC = 2 +const SHF_ALPHA_GPREL = 268435456 +const SHF_ARM_COMDEF = 2147483648 +const SHF_ARM_ENTRYSECT = 268435456 +const SHF_COMPRESSED = 2048 +const SHF_EXCLUDE = 2147483648 +const SHF_EXECINSTR = 4 +const SHF_GROUP = 512 +const SHF_IA_64_NORECOV = 536870912 +const SHF_IA_64_SHORT = 268435456 +const SHF_INFO_LINK = 64 +const SHF_LINK_ORDER = 128 +const SHF_MASKOS = 267386880 +const SHF_MASKPROC = 4026531840 +const SHF_MERGE = 16 +const SHF_MIPS_ADDR = 1073741824 +const SHF_MIPS_GPREL = 268435456 +const SHF_MIPS_LOCAL = 67108864 +const SHF_MIPS_MERGE = 536870912 +const SHF_MIPS_NAMES = 33554432 +const SHF_MIPS_NODUPE = 16777216 +const SHF_MIPS_NOSTRIP = 134217728 +const SHF_MIPS_STRINGS = 2147483648 +const SHF_ORDERED = 1073741824 +const SHF_OS_NONCONFORMING = 256 +const SHF_PARISC_HUGE = 1073741824 +const SHF_PARISC_SBP = 2147483648 +const SHF_PARISC_SHORT = 536870912 +const SHF_STRINGS = 32 +const SHF_TLS = 1024 +const SHF_WRITE = 1 +const SHN_ABS = 65521 +const SHN_AFTER = 65281 +const SHN_BEFORE = 65280 +const SHN_COMMON = 65522 +const SHN_HIOS = 65343 +const SHN_HIPROC = 65311 +const SHN_HIRESERVE = 65535 +const SHN_LOOS = 65312 +const SHN_LOPROC = 65280 +const SHN_LORESERVE = 65280 +const SHN_MIPS_ACOMMON = 65280 +const SHN_MIPS_DATA = 65282 +const SHN_MIPS_SCOMMON = 65283 +const SHN_MIPS_SUNDEFINED = 65284 +const SHN_MIPS_TEXT = 65281 +const SHN_PARISC_ANSI_COMMON = 65280 +const SHN_PARISC_HUGE_COMMON = 65281 +const SHN_UNDEF = 0 +const SHN_XINDEX = 65535 +const SHT_ALPHA_DEBUG = 1879048193 +const SHT_ALPHA_REGINFO = 1879048194 +const SHT_ARM_ATTRIBUTES = 1879048195 +const SHT_ARM_EXIDX = 1879048193 +const SHT_ARM_PREEMPTMAP = 1879048194 +const SHT_CHECKSUM = 1879048184 +const SHT_DYNAMIC = 6 +const SHT_DYNSYM = 11 +const SHT_FINI_ARRAY = 15 +const SHT_GNU_ATTRIBUTES = 1879048181 +const SHT_GNU_HASH = 1879048182 +const SHT_GNU_LIBLIST = 1879048183 +const SHT_GNU_verdef = 1879048189 +const SHT_GNU_verneed = 1879048190 +const SHT_GNU_versym = 1879048191 +const SHT_GROUP = 17 +const SHT_HASH = 5 +const SHT_HIOS = 1879048191 +const SHT_HIPROC = 2147483647 +const SHT_HISUNW = 1879048191 +const SHT_HIUSER = 2415919103 +const SHT_IA_64_EXT = 1879048192 +const SHT_IA_64_UNWIND = 1879048193 +const SHT_INIT_ARRAY = 14 +const SHT_LOOS = 1610612736 +const SHT_LOPROC = 1879048192 +const SHT_LOSUNW = 1879048186 +const SHT_LOUSER = 2147483648 +const SHT_MIPS_AUXSYM = 1879048214 +const SHT_MIPS_CONFLICT = 1879048194 +const SHT_MIPS_CONTENT = 1879048204 +const SHT_MIPS_DEBUG = 1879048197 +const SHT_MIPS_DELTACLASS = 1879048221 +const SHT_MIPS_DELTADECL = 1879048223 +const SHT_MIPS_DELTAINST = 1879048220 +const SHT_MIPS_DELTASYM = 1879048219 +const SHT_MIPS_DENSE = 1879048211 +const SHT_MIPS_DWARF = 1879048222 +const SHT_MIPS_EH_REGION = 1879048231 +const SHT_MIPS_EVENTS = 1879048225 +const SHT_MIPS_EXTSYM = 1879048210 +const SHT_MIPS_FDESC = 1879048209 +const SHT_MIPS_GPTAB = 1879048195 +const SHT_MIPS_IFACE = 1879048203 +const SHT_MIPS_LIBLIST = 1879048192 +const SHT_MIPS_LINE = 1879048217 +const SHT_MIPS_LOCSTR = 1879048216 +const SHT_MIPS_LOCSYM = 1879048213 +const SHT_MIPS_MSYM = 1879048193 +const SHT_MIPS_OPTIONS = 1879048205 +const SHT_MIPS_OPTSYM = 1879048215 +const SHT_MIPS_PACKAGE = 1879048199 +const SHT_MIPS_PACKSYM = 1879048200 +const SHT_MIPS_PDESC = 1879048212 +const SHT_MIPS_PDR_EXCEPTION = 1879048233 +const SHT_MIPS_PIXIE = 1879048227 +const SHT_MIPS_REGINFO = 1879048198 +const SHT_MIPS_RELD = 1879048201 +const SHT_MIPS_RFDESC = 1879048218 +const SHT_MIPS_SHDR = 1879048208 +const SHT_MIPS_SYMBOL_LIB = 1879048224 +const SHT_MIPS_TRANSLATE = 1879048226 +const SHT_MIPS_UCODE = 1879048196 +const SHT_MIPS_WHIRL = 1879048230 +const SHT_MIPS_XLATE = 1879048228 +const SHT_MIPS_XLATE_DEBUG = 1879048229 +const SHT_MIPS_XLATE_OLD = 1879048232 +const SHT_NOBITS = 8 +const SHT_NOTE = 7 +const SHT_NULL = 0 +const SHT_NUM = 20 +const SHT_PARISC_DOC = 1879048194 +const SHT_PARISC_EXT = 1879048192 +const SHT_PARISC_UNWIND = 1879048193 +const SHT_PREINIT_ARRAY = 16 +const SHT_PROGBITS = 1 +const SHT_REL = 9 +const SHT_RELA = 4 +const SHT_RELR = 19 +const SHT_SHLIB = 10 +const SHT_STRTAB = 3 +const SHT_SUNW_COMDAT = 1879048187 +const SHT_SUNW_move = 1879048186 +const SHT_SUNW_syminfo = 1879048188 +const SHT_SYMTAB = 2 +const SHT_SYMTAB_SHNDX = 18 +const SIGABRT = 6 +const SIGALRM = 14 +const SIGBUS = 7 +const SIGCHLD = 17 +const SIGCONT = 18 +const SIGEV_NONE = 1 +const SIGEV_SIGNAL = 0 +const SIGEV_THREAD = 2 +const SIGEV_THREAD_ID = 4 +const SIGFPE = 8 +const SIGHUP = 1 +const SIGILL = 4 +const SIGINT = 2 +const SIGIO = 29 +const SIGIOT = 6 +const SIGKILL = 9 +const SIGPIPE = 13 +const SIGPOLL = 29 +const SIGPROF = 27 +const SIGPWR = 30 +const SIGQUIT = 3 +const SIGRTMAX = 0 +const SIGRTMIN = 0 +const SIGSEGV = 11 +const SIGSTKFLT = 16 +const SIGSTKSZ = 8192 +const SIGSTOP = 19 +const SIGSYS = 31 +const SIGTERM = 15 +const SIGTRAP = 5 +const SIGTSTP = 20 +const SIGTTIN = 21 +const SIGTTOU = 22 +const SIGUNUSED = 31 +const SIGURG = 23 +const SIGUSR1 = 10 +const SIGUSR2 = 12 +const SIGVTALRM = 26 +const SIGWINCH = 28 +const SIGXCPU = 24 +const SIGXFSZ = 25 +const SIG_BLOCK = 0 +const SIG_SETMASK = 2 +const SIG_UNBLOCK = 1 +const SIOCGSTAMPNS_OLD = 35079 +const SIOCGSTAMP_OLD = 35078 +const SI_ASYNCIO = -4 +const SI_ASYNCNL = -60 +const SI_KERNEL = 128 +const SI_MESGQ = -3 +const SI_QUEUE = -1 +const SI_SIGIO = -5 +const SI_TIMER = -2 +const SI_TKILL = -6 +const SI_USER = 0 +const SO_RCVTIMEO_OLD = 20 +const SO_SNDTIMEO_OLD = 21 +const SO_TIMESTAMPING_OLD = 37 +const SO_TIMESTAMPNS_OLD = 35 +const SO_TIMESTAMP_OLD = 29 +const SS_AUTODISARM = 2147483648 +const SS_DISABLE = 2 +const SS_FLAG_BITS = 2147483648 +const SS_ONSTACK = 1 +const STB_GLOBAL = 1 +const STB_GNU_UNIQUE = 10 +const STB_HIOS = 12 +const STB_HIPROC = 15 +const STB_LOCAL = 0 +const STB_LOOS = 10 +const STB_LOPROC = 13 +const STB_MIPS_SPLIT_COMMON = 13 +const STB_NUM = 3 +const STB_WEAK = 2 +const STN_UNDEF = 0 +const STO_ALPHA_NOPV = 128 +const STO_ALPHA_STD_GPLOAD = 136 +const STO_MIPS_DEFAULT = 0 +const STO_MIPS_HIDDEN = 2 +const STO_MIPS_INTERNAL = 1 +const STO_MIPS_PLT = 8 +const STO_MIPS_PROTECTED = 3 +const STO_MIPS_SC_ALIGN_UNUSED = 255 +const STO_PPC64_LOCAL_BIT = 5 +const STO_PPC64_LOCAL_MASK = 224 +const STT_ARM_16BIT = 15 +const STT_ARM_TFUNC = 13 +const STT_COMMON = 5 +const STT_FILE = 4 +const STT_FUNC = 2 +const STT_GNU_IFUNC = 10 +const STT_HIOS = 12 +const STT_HIPROC = 15 +const STT_HP_OPAQUE = 11 +const STT_HP_STUB = 12 +const STT_LOOS = 10 +const STT_LOPROC = 13 +const STT_NOTYPE = 0 +const STT_NUM = 7 +const STT_OBJECT = 1 +const STT_PARISC_MILLICODE = 13 +const STT_SECTION = 3 +const STT_SPARC_REGISTER = 13 +const STT_TLS = 6 +const STV_DEFAULT = 0 +const STV_HIDDEN = 2 +const STV_INTERNAL = 1 +const STV_PROTECTED = 3 +const SYMINFO_BT_LOWRESERVE = 65280 +const SYMINFO_BT_PARENT = 65534 +const SYMINFO_BT_SELF = 65535 +const SYMINFO_CURRENT = 1 +const SYMINFO_FLG_COPY = 4 +const SYMINFO_FLG_DIRECT = 1 +const SYMINFO_FLG_LAZYLOAD = 8 +const SYMINFO_FLG_PASSTHRU = 2 +const SYMINFO_NONE = 0 +const SYMINFO_NUM = 2 +const SYSCALL_MMAP2_UNIT = 4096 +const SYSCALL_RLIM_INFINITY = 18446744073709551615 +const SYS__llseek = 140 +const SYS__newselect = 142 +const SYS__sysctl = 149 +const SYS_accept = 364 +const SYS_accept4 = 364 +const SYS_access = 33 +const SYS_acct = 51 +const SYS_add_key = 286 +const SYS_adjtimex = 124 +const SYS_afs_syscall = 137 +const SYS_alarm = 27 +const SYS_arch_prctl = 384 +const SYS_bdflush = 134 +const SYS_bind = 361 +const SYS_bpf = 357 +const SYS_break = 17 +const SYS_brk = 45 +const SYS_cachestat = 451 +const SYS_capget = 184 +const SYS_capset = 185 +const SYS_chdir = 12 +const SYS_chmod = 15 +const SYS_chown32 = 212 +const SYS_chroot = 61 +const SYS_clock_adjtime = 343 +const SYS_clock_adjtime64 = 405 +const SYS_clock_getres = 266 +const SYS_clock_getres_time32 = 266 +const SYS_clock_getres_time64 = 406 +const SYS_clock_gettime = 265 +const SYS_clock_gettime32 = 265 +const SYS_clock_gettime64 = 403 +const SYS_clock_nanosleep = 267 +const SYS_clock_nanosleep_time32 = 267 +const SYS_clock_nanosleep_time64 = 407 +const SYS_clock_settime = 264 +const SYS_clock_settime32 = 264 +const SYS_clock_settime64 = 404 +const SYS_clone = 120 +const SYS_clone3 = 435 +const SYS_close = 6 +const SYS_close_range = 436 +const SYS_connect = 362 +const SYS_copy_file_range = 377 +const SYS_creat = 8 +const SYS_create_module = 127 +const SYS_delete_module = 129 +const SYS_dup = 41 +const SYS_dup2 = 63 +const SYS_dup3 = 330 +const SYS_epoll_create = 254 +const SYS_epoll_create1 = 329 +const SYS_epoll_ctl = 255 +const SYS_epoll_pwait = 319 +const SYS_epoll_pwait2 = 441 +const SYS_epoll_wait = 256 +const SYS_eventfd = 323 +const SYS_eventfd2 = 328 +const SYS_execve = 11 +const SYS_execveat = 358 +const SYS_exit = 1 +const SYS_exit_group = 252 +const SYS_faccessat = 307 +const SYS_faccessat2 = 439 +const SYS_fadvise64 = 250 +const SYS_fadvise64_64 = 272 +const SYS_fallocate = 324 +const SYS_fanotify_init = 338 +const SYS_fanotify_mark = 339 +const SYS_fchdir = 133 +const SYS_fchmod = 94 +const SYS_fchmodat = 306 +const SYS_fchmodat2 = 452 +const SYS_fchown32 = 207 +const SYS_fchownat = 298 +const SYS_fcntl64 = 221 +const SYS_fdatasync = 148 +const SYS_fgetxattr = 231 +const SYS_finit_module = 350 +const SYS_flistxattr = 234 +const SYS_flock = 143 +const SYS_fork = 2 +const SYS_fremovexattr = 237 +const SYS_fsconfig = 431 +const SYS_fsetxattr = 228 +const SYS_fsmount = 432 +const SYS_fsopen = 430 +const SYS_fspick = 433 +const SYS_fstat64 = 197 +const SYS_fstatat64 = 300 +const SYS_fstatfs64 = 269 +const SYS_fsync = 118 +const SYS_ftime = 35 +const SYS_ftruncate64 = 194 +const SYS_futex = 240 +const SYS_futex_time64 = 422 +const SYS_futex_waitv = 449 +const SYS_futimesat = 299 +const SYS_get_kernel_syms = 130 +const SYS_get_mempolicy = 275 +const SYS_get_robust_list = 312 +const SYS_get_thread_area = 244 +const SYS_getcpu = 318 +const SYS_getcwd = 183 +const SYS_getdents64 = 220 +const SYS_getegid32 = 202 +const SYS_geteuid32 = 201 +const SYS_getgid32 = 200 +const SYS_getgroups32 = 205 +const SYS_getitimer = 105 +const SYS_getpeername = 368 +const SYS_getpgid = 132 +const SYS_getpgrp = 65 +const SYS_getpid = 20 +const SYS_getpmsg = 188 +const SYS_getppid = 64 +const SYS_getpriority = 96 +const SYS_getrandom = 355 +const SYS_getresgid32 = 211 +const SYS_getresuid32 = 209 +const SYS_getrusage = 77 +const SYS_getsid = 147 +const SYS_getsockname = 367 +const SYS_getsockopt = 365 +const SYS_gettid = 224 +const SYS_gettimeofday = 78 +const SYS_gettimeofday_time32 = 78 +const SYS_getuid32 = 199 +const SYS_getxattr = 229 +const SYS_gtty = 32 +const SYS_idle = 112 +const SYS_init_module = 128 +const SYS_inotify_add_watch = 292 +const SYS_inotify_init = 291 +const SYS_inotify_init1 = 332 +const SYS_inotify_rm_watch = 293 +const SYS_io_cancel = 249 +const SYS_io_destroy = 246 +const SYS_io_getevents = 247 +const SYS_io_pgetevents = 385 +const SYS_io_pgetevents_time64 = 416 +const SYS_io_setup = 245 +const SYS_io_submit = 248 +const SYS_io_uring_enter = 426 +const SYS_io_uring_register = 427 +const SYS_io_uring_setup = 425 +const SYS_ioctl = 54 +const SYS_ioperm = 101 +const SYS_iopl = 110 +const SYS_ioprio_get = 290 +const SYS_ioprio_set = 289 +const SYS_ipc = 117 +const SYS_kcmp = 349 +const SYS_kexec_load = 283 +const SYS_keyctl = 288 +const SYS_kill = 37 +const SYS_landlock_add_rule = 445 +const SYS_landlock_create_ruleset = 444 +const SYS_landlock_restrict_self = 446 +const SYS_lchown32 = 198 +const SYS_lgetxattr = 230 +const SYS_link = 9 +const SYS_linkat = 303 +const SYS_listen = 363 +const SYS_listxattr = 232 +const SYS_llistxattr = 233 +const SYS_lock = 53 +const SYS_lookup_dcookie = 253 +const SYS_lremovexattr = 236 +const SYS_lseek = 19 +const SYS_lsetxattr = 227 +const SYS_lstat64 = 196 +const SYS_madvise = 219 +const SYS_mbind = 274 +const SYS_membarrier = 375 +const SYS_memfd_create = 356 +const SYS_memfd_secret = 447 +const SYS_migrate_pages = 294 +const SYS_mincore = 218 +const SYS_mkdir = 39 +const SYS_mkdirat = 296 +const SYS_mknod = 14 +const SYS_mknodat = 297 +const SYS_mlock = 150 +const SYS_mlock2 = 376 +const SYS_mlockall = 152 +const SYS_mmap = 90 +const SYS_mmap2 = 192 +const SYS_modify_ldt = 123 +const SYS_mount = 21 +const SYS_mount_setattr = 442 +const SYS_move_mount = 429 +const SYS_move_pages = 317 +const SYS_mprotect = 125 +const SYS_mpx = 56 +const SYS_mq_getsetattr = 282 +const SYS_mq_notify = 281 +const SYS_mq_open = 277 +const SYS_mq_timedreceive = 280 +const SYS_mq_timedreceive_time64 = 419 +const SYS_mq_timedsend = 279 +const SYS_mq_timedsend_time64 = 418 +const SYS_mq_unlink = 278 +const SYS_mremap = 163 +const SYS_msgctl = 402 +const SYS_msgget = 399 +const SYS_msgrcv = 401 +const SYS_msgsnd = 400 +const SYS_msync = 144 +const SYS_munlock = 151 +const SYS_munlockall = 153 +const SYS_munmap = 91 +const SYS_name_to_handle_at = 341 +const SYS_nanosleep = 162 +const SYS_nfsservctl = 169 +const SYS_nice = 34 +const SYS_oldfstat = 28 +const SYS_oldlstat = 84 +const SYS_oldolduname = 59 +const SYS_oldstat = 18 +const SYS_olduname = 109 +const SYS_open = 5 +const SYS_open_by_handle_at = 342 +const SYS_open_tree = 428 +const SYS_openat = 295 +const SYS_openat2 = 437 +const SYS_pause = 29 +const SYS_perf_event_open = 336 +const SYS_personality = 136 +const SYS_pidfd_getfd = 438 +const SYS_pidfd_open = 434 +const SYS_pidfd_send_signal = 424 +const SYS_pipe = 42 +const SYS_pipe2 = 331 +const SYS_pivot_root = 217 +const SYS_pkey_alloc = 381 +const SYS_pkey_free = 382 +const SYS_pkey_mprotect = 380 +const SYS_poll = 168 +const SYS_ppoll = 309 +const SYS_ppoll_time64 = 414 +const SYS_prctl = 172 +const SYS_pread64 = 180 +const SYS_preadv = 333 +const SYS_preadv2 = 378 +const SYS_prlimit64 = 340 +const SYS_process_madvise = 440 +const SYS_process_mrelease = 448 +const SYS_process_vm_readv = 347 +const SYS_process_vm_writev = 348 +const SYS_prof = 44 +const SYS_profil = 98 +const SYS_pselect6 = 308 +const SYS_pselect6_time64 = 413 +const SYS_ptrace = 26 +const SYS_putpmsg = 189 +const SYS_pwrite64 = 181 +const SYS_pwritev = 334 +const SYS_pwritev2 = 379 +const SYS_query_module = 167 +const SYS_quotactl = 131 +const SYS_read = 3 +const SYS_readahead = 225 +const SYS_readdir = 89 +const SYS_readlink = 85 +const SYS_readlinkat = 305 +const SYS_readv = 145 +const SYS_reboot = 88 +const SYS_recvfrom = 371 +const SYS_recvmmsg = 337 +const SYS_recvmmsg_time64 = 417 +const SYS_recvmsg = 372 +const SYS_remap_file_pages = 257 +const SYS_removexattr = 235 +const SYS_rename = 38 +const SYS_renameat = 302 +const SYS_renameat2 = 353 +const SYS_request_key = 287 +const SYS_restart_syscall = 0 +const SYS_rmdir = 40 +const SYS_rseq = 386 +const SYS_rt_sigaction = 174 +const SYS_rt_sigpending = 176 +const SYS_rt_sigprocmask = 175 +const SYS_rt_sigqueueinfo = 178 +const SYS_rt_sigreturn = 173 +const SYS_rt_sigsuspend = 179 +const SYS_rt_sigtimedwait = 177 +const SYS_rt_sigtimedwait_time64 = 421 +const SYS_rt_tgsigqueueinfo = 335 +const SYS_sched_get_priority_max = 159 +const SYS_sched_get_priority_min = 160 +const SYS_sched_getaffinity = 242 +const SYS_sched_getattr = 352 +const SYS_sched_getparam = 155 +const SYS_sched_getscheduler = 157 +const SYS_sched_rr_get_interval = 161 +const SYS_sched_rr_get_interval_time64 = 423 +const SYS_sched_setaffinity = 241 +const SYS_sched_setattr = 351 +const SYS_sched_setparam = 154 +const SYS_sched_setscheduler = 156 +const SYS_sched_yield = 158 +const SYS_seccomp = 354 +const SYS_semctl = 394 +const SYS_semget = 393 +const SYS_semtimedop_time64 = 420 +const SYS_sendfile64 = 239 +const SYS_sendmmsg = 345 +const SYS_sendmsg = 370 +const SYS_sendto = 369 +const SYS_set_mempolicy = 276 +const SYS_set_mempolicy_home_node = 450 +const SYS_set_robust_list = 311 +const SYS_set_thread_area = 243 +const SYS_set_tid_address = 258 +const SYS_setdomainname = 121 +const SYS_setfsgid32 = 216 +const SYS_setfsuid32 = 215 +const SYS_setgid32 = 214 +const SYS_setgroups32 = 206 +const SYS_sethostname = 74 +const SYS_setitimer = 104 +const SYS_setns = 346 +const SYS_setpgid = 57 +const SYS_setpriority = 97 +const SYS_setregid32 = 204 +const SYS_setresgid32 = 210 +const SYS_setresuid32 = 208 +const SYS_setreuid32 = 203 +const SYS_setrlimit = 75 +const SYS_setsid = 66 +const SYS_setsockopt = 366 +const SYS_settimeofday = 79 +const SYS_settimeofday_time32 = 79 +const SYS_setuid32 = 213 +const SYS_setxattr = 226 +const SYS_sgetmask = 68 +const SYS_shmat = 397 +const SYS_shmctl = 396 +const SYS_shmdt = 398 +const SYS_shmget = 395 +const SYS_shutdown = 373 +const SYS_sigaction = 67 +const SYS_sigaltstack = 186 +const SYS_signal = 48 +const SYS_signalfd = 321 +const SYS_signalfd4 = 327 +const SYS_sigpending = 73 +const SYS_sigprocmask = 126 +const SYS_sigreturn = 119 +const SYS_sigsuspend = 72 +const SYS_socket = 359 +const SYS_socketcall = 102 +const SYS_socketpair = 360 +const SYS_splice = 313 +const SYS_ssetmask = 69 +const SYS_stat64 = 195 +const SYS_statfs64 = 268 +const SYS_statx = 383 +const SYS_stime = 25 +const SYS_stty = 31 +const SYS_swapoff = 115 +const SYS_swapon = 87 +const SYS_symlink = 83 +const SYS_symlinkat = 304 +const SYS_sync = 36 +const SYS_sync_file_range = 314 +const SYS_syncfs = 344 +const SYS_sysfs = 135 +const SYS_sysinfo = 116 +const SYS_syslog = 103 +const SYS_tee = 315 +const SYS_tgkill = 270 +const SYS_time = 13 +const SYS_timer_create = 259 +const SYS_timer_delete = 263 +const SYS_timer_getoverrun = 262 +const SYS_timer_gettime = 261 +const SYS_timer_gettime32 = 261 +const SYS_timer_gettime64 = 408 +const SYS_timer_settime = 260 +const SYS_timer_settime32 = 260 +const SYS_timer_settime64 = 409 +const SYS_timerfd_create = 322 +const SYS_timerfd_gettime = 326 +const SYS_timerfd_gettime32 = 326 +const SYS_timerfd_gettime64 = 410 +const SYS_timerfd_settime = 325 +const SYS_timerfd_settime32 = 325 +const SYS_timerfd_settime64 = 411 +const SYS_times = 43 +const SYS_tkill = 238 +const SYS_truncate64 = 193 +const SYS_ugetrlimit = 191 +const SYS_ulimit = 58 +const SYS_umask = 60 +const SYS_umount = 22 +const SYS_umount2 = 52 +const SYS_uname = 122 +const SYS_unlink = 10 +const SYS_unlinkat = 301 +const SYS_unshare = 310 +const SYS_uselib = 86 +const SYS_userfaultfd = 374 +const SYS_ustat = 62 +const SYS_utime = 30 +const SYS_utimensat = 320 +const SYS_utimensat_time64 = 412 +const SYS_utimes = 271 +const SYS_vfork = 190 +const SYS_vhangup = 111 +const SYS_vm86 = 166 +const SYS_vm86old = 113 +const SYS_vmsplice = 316 +const SYS_vserver = 273 +const SYS_wait4 = 114 +const SYS_waitid = 284 +const SYS_waitpid = 7 +const SYS_write = 4 +const SYS_writev = 146 +const TRAP_BRANCH = 3 +const TRAP_BRKPT = 1 +const TRAP_HWBKPT = 4 +const TRAP_TRACE = 2 +const TRAP_UNK = 5 +const VER = -255 +const VER_DEF_CURRENT = 1 +const VER_DEF_NONE = 0 +const VER_DEF_NUM = 2 +const VER_FLG_BASE = 1 +const VER_FLG_WEAK = 2 +const VER_NDX_ELIMINATE = 65281 +const VER_NDX_GLOBAL = 1 +const VER_NDX_LOCAL = 0 +const VER_NDX_LORESERVE = 65280 +const VER_NEED_CURRENT = 1 +const VER_NEED_NONE = 0 +const VER_NEED_NUM = 2 +const WNOHANG = 1 +const WUNTRACED = 2 +const _NSIG = 65 +const __NR__llseek = 140 +const __NR__newselect = 142 +const __NR__sysctl = 149 +const __NR_accept4 = 364 +const __NR_access = 33 +const __NR_acct = 51 +const __NR_add_key = 286 +const __NR_adjtimex = 124 +const __NR_afs_syscall = 137 +const __NR_alarm = 27 +const __NR_arch_prctl = 384 +const __NR_bdflush = 134 +const __NR_bind = 361 +const __NR_bpf = 357 +const __NR_break = 17 +const __NR_brk = 45 +const __NR_cachestat = 451 +const __NR_capget = 184 +const __NR_capset = 185 +const __NR_chdir = 12 +const __NR_chmod = 15 +const __NR_chown = 182 +const __NR_chown32 = 212 +const __NR_chroot = 61 +const __NR_clock_adjtime = 343 +const __NR_clock_adjtime64 = 405 +const __NR_clock_getres_time32 = 266 +const __NR_clock_getres_time64 = 406 +const __NR_clock_gettime32 = 265 +const __NR_clock_gettime64 = 403 +const __NR_clock_nanosleep_time32 = 267 +const __NR_clock_nanosleep_time64 = 407 +const __NR_clock_settime32 = 264 +const __NR_clock_settime64 = 404 +const __NR_clone = 120 +const __NR_clone3 = 435 +const __NR_close = 6 +const __NR_close_range = 436 +const __NR_connect = 362 +const __NR_copy_file_range = 377 +const __NR_creat = 8 +const __NR_create_module = 127 +const __NR_delete_module = 129 +const __NR_dup = 41 +const __NR_dup2 = 63 +const __NR_dup3 = 330 +const __NR_epoll_create = 254 +const __NR_epoll_create1 = 329 +const __NR_epoll_ctl = 255 +const __NR_epoll_pwait = 319 +const __NR_epoll_pwait2 = 441 +const __NR_epoll_wait = 256 +const __NR_eventfd = 323 +const __NR_eventfd2 = 328 +const __NR_execve = 11 +const __NR_execveat = 358 +const __NR_exit = 1 +const __NR_exit_group = 252 +const __NR_faccessat = 307 +const __NR_faccessat2 = 439 +const __NR_fadvise64 = 250 +const __NR_fadvise64_64 = 272 +const __NR_fallocate = 324 +const __NR_fanotify_init = 338 +const __NR_fanotify_mark = 339 +const __NR_fchdir = 133 +const __NR_fchmod = 94 +const __NR_fchmodat = 306 +const __NR_fchmodat2 = 452 +const __NR_fchown = 95 +const __NR_fchown32 = 207 +const __NR_fchownat = 298 +const __NR_fcntl = 55 +const __NR_fcntl64 = 221 +const __NR_fdatasync = 148 +const __NR_fgetxattr = 231 +const __NR_finit_module = 350 +const __NR_flistxattr = 234 +const __NR_flock = 143 +const __NR_fork = 2 +const __NR_fremovexattr = 237 +const __NR_fsconfig = 431 +const __NR_fsetxattr = 228 +const __NR_fsmount = 432 +const __NR_fsopen = 430 +const __NR_fspick = 433 +const __NR_fstat = 108 +const __NR_fstat64 = 197 +const __NR_fstatat64 = 300 +const __NR_fstatfs = 100 +const __NR_fstatfs64 = 269 +const __NR_fsync = 118 +const __NR_ftime = 35 +const __NR_ftruncate = 93 +const __NR_ftruncate64 = 194 +const __NR_futex = 240 +const __NR_futex_time64 = 422 +const __NR_futex_waitv = 449 +const __NR_futimesat = 299 +const __NR_get_kernel_syms = 130 +const __NR_get_mempolicy = 275 +const __NR_get_robust_list = 312 +const __NR_get_thread_area = 244 +const __NR_getcpu = 318 +const __NR_getcwd = 183 +const __NR_getdents = 141 +const __NR_getdents64 = 220 +const __NR_getegid = 50 +const __NR_getegid32 = 202 +const __NR_geteuid = 49 +const __NR_geteuid32 = 201 +const __NR_getgid = 47 +const __NR_getgid32 = 200 +const __NR_getgroups = 80 +const __NR_getgroups32 = 205 +const __NR_getitimer = 105 +const __NR_getpeername = 368 +const __NR_getpgid = 132 +const __NR_getpgrp = 65 +const __NR_getpid = 20 +const __NR_getpmsg = 188 +const __NR_getppid = 64 +const __NR_getpriority = 96 +const __NR_getrandom = 355 +const __NR_getresgid = 171 +const __NR_getresgid32 = 211 +const __NR_getresuid = 165 +const __NR_getresuid32 = 209 +const __NR_getrlimit = 76 +const __NR_getrusage = 77 +const __NR_getsid = 147 +const __NR_getsockname = 367 +const __NR_getsockopt = 365 +const __NR_gettid = 224 +const __NR_gettimeofday_time32 = 78 +const __NR_getuid = 24 +const __NR_getuid32 = 199 +const __NR_getxattr = 229 +const __NR_gtty = 32 +const __NR_idle = 112 +const __NR_init_module = 128 +const __NR_inotify_add_watch = 292 +const __NR_inotify_init = 291 +const __NR_inotify_init1 = 332 +const __NR_inotify_rm_watch = 293 +const __NR_io_cancel = 249 +const __NR_io_destroy = 246 +const __NR_io_getevents = 247 +const __NR_io_pgetevents = 385 +const __NR_io_pgetevents_time64 = 416 +const __NR_io_setup = 245 +const __NR_io_submit = 248 +const __NR_io_uring_enter = 426 +const __NR_io_uring_register = 427 +const __NR_io_uring_setup = 425 +const __NR_ioctl = 54 +const __NR_ioperm = 101 +const __NR_iopl = 110 +const __NR_ioprio_get = 290 +const __NR_ioprio_set = 289 +const __NR_ipc = 117 +const __NR_kcmp = 349 +const __NR_kexec_load = 283 +const __NR_keyctl = 288 +const __NR_kill = 37 +const __NR_landlock_add_rule = 445 +const __NR_landlock_create_ruleset = 444 +const __NR_landlock_restrict_self = 446 +const __NR_lchown = 16 +const __NR_lchown32 = 198 +const __NR_lgetxattr = 230 +const __NR_link = 9 +const __NR_linkat = 303 +const __NR_listen = 363 +const __NR_listxattr = 232 +const __NR_llistxattr = 233 +const __NR_lock = 53 +const __NR_lookup_dcookie = 253 +const __NR_lremovexattr = 236 +const __NR_lseek = 19 +const __NR_lsetxattr = 227 +const __NR_lstat = 107 +const __NR_lstat64 = 196 +const __NR_madvise = 219 +const __NR_mbind = 274 +const __NR_membarrier = 375 +const __NR_memfd_create = 356 +const __NR_memfd_secret = 447 +const __NR_migrate_pages = 294 +const __NR_mincore = 218 +const __NR_mkdir = 39 +const __NR_mkdirat = 296 +const __NR_mknod = 14 +const __NR_mknodat = 297 +const __NR_mlock = 150 +const __NR_mlock2 = 376 +const __NR_mlockall = 152 +const __NR_mmap = 90 +const __NR_mmap2 = 192 +const __NR_modify_ldt = 123 +const __NR_mount = 21 +const __NR_mount_setattr = 442 +const __NR_move_mount = 429 +const __NR_move_pages = 317 +const __NR_mprotect = 125 +const __NR_mpx = 56 +const __NR_mq_getsetattr = 282 +const __NR_mq_notify = 281 +const __NR_mq_open = 277 +const __NR_mq_timedreceive = 280 +const __NR_mq_timedreceive_time64 = 419 +const __NR_mq_timedsend = 279 +const __NR_mq_timedsend_time64 = 418 +const __NR_mq_unlink = 278 +const __NR_mremap = 163 +const __NR_msgctl = 402 +const __NR_msgget = 399 +const __NR_msgrcv = 401 +const __NR_msgsnd = 400 +const __NR_msync = 144 +const __NR_munlock = 151 +const __NR_munlockall = 153 +const __NR_munmap = 91 +const __NR_name_to_handle_at = 341 +const __NR_nanosleep = 162 +const __NR_nfsservctl = 169 +const __NR_nice = 34 +const __NR_oldfstat = 28 +const __NR_oldlstat = 84 +const __NR_oldolduname = 59 +const __NR_oldstat = 18 +const __NR_olduname = 109 +const __NR_open = 5 +const __NR_open_by_handle_at = 342 +const __NR_open_tree = 428 +const __NR_openat = 295 +const __NR_openat2 = 437 +const __NR_pause = 29 +const __NR_perf_event_open = 336 +const __NR_personality = 136 +const __NR_pidfd_getfd = 438 +const __NR_pidfd_open = 434 +const __NR_pidfd_send_signal = 424 +const __NR_pipe = 42 +const __NR_pipe2 = 331 +const __NR_pivot_root = 217 +const __NR_pkey_alloc = 381 +const __NR_pkey_free = 382 +const __NR_pkey_mprotect = 380 +const __NR_poll = 168 +const __NR_ppoll = 309 +const __NR_ppoll_time64 = 414 +const __NR_prctl = 172 +const __NR_pread64 = 180 +const __NR_preadv = 333 +const __NR_preadv2 = 378 +const __NR_prlimit64 = 340 +const __NR_process_madvise = 440 +const __NR_process_mrelease = 448 +const __NR_process_vm_readv = 347 +const __NR_process_vm_writev = 348 +const __NR_prof = 44 +const __NR_profil = 98 +const __NR_pselect6 = 308 +const __NR_pselect6_time64 = 413 +const __NR_ptrace = 26 +const __NR_putpmsg = 189 +const __NR_pwrite64 = 181 +const __NR_pwritev = 334 +const __NR_pwritev2 = 379 +const __NR_query_module = 167 +const __NR_quotactl = 131 +const __NR_read = 3 +const __NR_readahead = 225 +const __NR_readdir = 89 +const __NR_readlink = 85 +const __NR_readlinkat = 305 +const __NR_readv = 145 +const __NR_reboot = 88 +const __NR_recvfrom = 371 +const __NR_recvmmsg = 337 +const __NR_recvmmsg_time64 = 417 +const __NR_recvmsg = 372 +const __NR_remap_file_pages = 257 +const __NR_removexattr = 235 +const __NR_rename = 38 +const __NR_renameat = 302 +const __NR_renameat2 = 353 +const __NR_request_key = 287 +const __NR_restart_syscall = 0 +const __NR_rmdir = 40 +const __NR_rseq = 386 +const __NR_rt_sigaction = 174 +const __NR_rt_sigpending = 176 +const __NR_rt_sigprocmask = 175 +const __NR_rt_sigqueueinfo = 178 +const __NR_rt_sigreturn = 173 +const __NR_rt_sigsuspend = 179 +const __NR_rt_sigtimedwait = 177 +const __NR_rt_sigtimedwait_time64 = 421 +const __NR_rt_tgsigqueueinfo = 335 +const __NR_sched_get_priority_max = 159 +const __NR_sched_get_priority_min = 160 +const __NR_sched_getaffinity = 242 +const __NR_sched_getattr = 352 +const __NR_sched_getparam = 155 +const __NR_sched_getscheduler = 157 +const __NR_sched_rr_get_interval = 161 +const __NR_sched_rr_get_interval_time64 = 423 +const __NR_sched_setaffinity = 241 +const __NR_sched_setattr = 351 +const __NR_sched_setparam = 154 +const __NR_sched_setscheduler = 156 +const __NR_sched_yield = 158 +const __NR_seccomp = 354 +const __NR_select = 82 +const __NR_semctl = 394 +const __NR_semget = 393 +const __NR_semtimedop_time64 = 420 +const __NR_sendfile = 187 +const __NR_sendfile64 = 239 +const __NR_sendmmsg = 345 +const __NR_sendmsg = 370 +const __NR_sendto = 369 +const __NR_set_mempolicy = 276 +const __NR_set_mempolicy_home_node = 450 +const __NR_set_robust_list = 311 +const __NR_set_thread_area = 243 +const __NR_set_tid_address = 258 +const __NR_setdomainname = 121 +const __NR_setfsgid = 139 +const __NR_setfsgid32 = 216 +const __NR_setfsuid = 138 +const __NR_setfsuid32 = 215 +const __NR_setgid = 46 +const __NR_setgid32 = 214 +const __NR_setgroups = 81 +const __NR_setgroups32 = 206 +const __NR_sethostname = 74 +const __NR_setitimer = 104 +const __NR_setns = 346 +const __NR_setpgid = 57 +const __NR_setpriority = 97 +const __NR_setregid = 71 +const __NR_setregid32 = 204 +const __NR_setresgid = 170 +const __NR_setresgid32 = 210 +const __NR_setresuid = 164 +const __NR_setresuid32 = 208 +const __NR_setreuid = 70 +const __NR_setreuid32 = 203 +const __NR_setrlimit = 75 +const __NR_setsid = 66 +const __NR_setsockopt = 366 +const __NR_settimeofday_time32 = 79 +const __NR_setuid = 23 +const __NR_setuid32 = 213 +const __NR_setxattr = 226 +const __NR_sgetmask = 68 +const __NR_shmat = 397 +const __NR_shmctl = 396 +const __NR_shmdt = 398 +const __NR_shmget = 395 +const __NR_shutdown = 373 +const __NR_sigaction = 67 +const __NR_sigaltstack = 186 +const __NR_signal = 48 +const __NR_signalfd = 321 +const __NR_signalfd4 = 327 +const __NR_sigpending = 73 +const __NR_sigprocmask = 126 +const __NR_sigreturn = 119 +const __NR_sigsuspend = 72 +const __NR_socket = 359 +const __NR_socketcall = 102 +const __NR_socketpair = 360 +const __NR_splice = 313 +const __NR_ssetmask = 69 +const __NR_stat = 106 +const __NR_stat64 = 195 +const __NR_statfs = 99 +const __NR_statfs64 = 268 +const __NR_statx = 383 +const __NR_stime = 25 +const __NR_stty = 31 +const __NR_swapoff = 115 +const __NR_swapon = 87 +const __NR_symlink = 83 +const __NR_symlinkat = 304 +const __NR_sync = 36 +const __NR_sync_file_range = 314 +const __NR_syncfs = 344 +const __NR_sysfs = 135 +const __NR_sysinfo = 116 +const __NR_syslog = 103 +const __NR_tee = 315 +const __NR_tgkill = 270 +const __NR_time = 13 +const __NR_timer_create = 259 +const __NR_timer_delete = 263 +const __NR_timer_getoverrun = 262 +const __NR_timer_gettime32 = 261 +const __NR_timer_gettime64 = 408 +const __NR_timer_settime32 = 260 +const __NR_timer_settime64 = 409 +const __NR_timerfd_create = 322 +const __NR_timerfd_gettime32 = 326 +const __NR_timerfd_gettime64 = 410 +const __NR_timerfd_settime32 = 325 +const __NR_timerfd_settime64 = 411 +const __NR_times = 43 +const __NR_tkill = 238 +const __NR_truncate = 92 +const __NR_truncate64 = 193 +const __NR_ugetrlimit = 191 +const __NR_ulimit = 58 +const __NR_umask = 60 +const __NR_umount = 22 +const __NR_umount2 = 52 +const __NR_uname = 122 +const __NR_unlink = 10 +const __NR_unlinkat = 301 +const __NR_unshare = 310 +const __NR_uselib = 86 +const __NR_userfaultfd = 374 +const __NR_ustat = 62 +const __NR_utime = 30 +const __NR_utimensat = 320 +const __NR_utimensat_time64 = 412 +const __NR_utimes = 271 +const __NR_vfork = 190 +const __NR_vhangup = 111 +const __NR_vm86 = 166 +const __NR_vm86old = 113 +const __NR_vmsplice = 316 +const __NR_vserver = 273 +const __NR_wait4 = 114 +const __NR_waitid = 284 +const __NR_waitpid = 7 +const __NR_write = 4 +const __NR_writev = 146 +const __SC_accept = 5 +const __SC_accept4 = 18 +const __SC_bind = 2 +const __SC_connect = 3 +const __SC_getpeername = 7 +const __SC_getsockname = 6 +const __SC_getsockopt = 15 +const __SC_listen = 4 +const __SC_recv = 10 +const __SC_recvfrom = 12 +const __SC_recvmmsg = 19 +const __SC_recvmsg = 17 +const __SC_send = 9 +const __SC_sendmmsg = 20 +const __SC_sendmsg = 16 +const __SC_sendto = 11 +const __SC_setsockopt = 14 +const __SC_shutdown = 13 +const __SC_socket = 1 +const __SC_socketpair = 8 +const libc = 0 + +type Ttime_t = int64 + +type Tsuseconds_t = int64 + +type Ttimeval = struct { + Ftv_sec Ttime_t + Ftv_usec Tsuseconds_t +} + +type Ttimespec = struct { + Ftv_sec Ttime_t + Ftv_nsec int32 + F__ccgo12 uint32 +} + +type Tsigset_t = struct { + F__bits [32]uint32 +} + +type t__sigset_t = Tsigset_t + +type Tfd_mask = uint32 + +type Tfd_set = struct { + Ffds_bits [32]uint32 +} + +type Titimerval = struct { + Fit_interval Ttimeval + Fit_value Ttimeval +} + +type Tid_t = uint32 + +type Trlim_t = uint64 + +type Trlimit = struct { + Frlim_cur Trlim_t + Frlim_max Trlim_t +} + +type Trusage = struct { + Fru_utime Ttimeval + Fru_stime Ttimeval + Fru_maxrss int32 + Fru_ixrss int32 + Fru_idrss int32 + Fru_isrss int32 + Fru_minflt int32 + Fru_majflt int32 + Fru_nswap int32 + Fru_inblock int32 + Fru_oublock int32 + Fru_msgsnd int32 + Fru_msgrcv int32 + Fru_nsignals int32 + Fru_nvcsw int32 + Fru_nivcsw int32 + F__reserved [16]int32 +} + +type Tclock_t = int32 + +type Tpthread_t = uintptr + +type Tpthread_attr_t = struct { + F__u struct { + F__vi [0][9]int32 + F__s [0][9]uint32 + F__i [9]int32 + } +} + +type Tstack_t = struct { + Fss_sp uintptr + Fss_flags int32 + Fss_size Tsize_t +} + +type Tsigaltstack = Tstack_t + +type Tmcontext_t = struct { + F__space [22]uint32 +} + +type Tucontext_t = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +type t__ucontext = Tucontext_t + +type Tsigval = struct { + Fsival_ptr [0]uintptr + Fsival_int int32 +} + +type Tsiginfo_t = struct { + Fsi_signo int32 + Fsi_errno int32 + Fsi_code int32 + F__si_fields struct { + F__si_common [0]struct { + F__first struct { + F__timer [0]struct { + Fsi_timerid int32 + Fsi_overrun int32 + } + F__piduid struct { + Fsi_pid Tpid_t + Fsi_uid Tuid_t + } + } + F__second struct { + F__sigchld [0]struct { + Fsi_status int32 + Fsi_utime Tclock_t + Fsi_stime Tclock_t + } + Fsi_value Tsigval + F__ccgo_pad2 [8]byte + } + } + F__sigfault [0]struct { + Fsi_addr uintptr + Fsi_addr_lsb int16 + F__first struct { + Fsi_pkey [0]uint32 + F__addr_bnd struct { + Fsi_lower uintptr + Fsi_upper uintptr + } + } + } + F__sigpoll [0]struct { + Fsi_band int32 + Fsi_fd int32 + } + F__sigsys [0]struct { + Fsi_call_addr uintptr + Fsi_syscall int32 + Fsi_arch uint32 + } + F__pad [116]int8 + } +} + +type Tsigaction = struct { + F__sa_handler struct { + Fsa_sigaction [0]uintptr + Fsa_handler uintptr + } + Fsa_mask Tsigset_t + Fsa_flags int32 + Fsa_restorer uintptr +} + +type Tsigevent = struct { + Fsigev_value Tsigval + Fsigev_signo int32 + Fsigev_notify int32 + F__sev_fields struct { + Fsigev_notify_thread_id [0]Tpid_t + F__sev_thread [0]struct { + Fsigev_notify_function uintptr + Fsigev_notify_attributes uintptr + } + F__pad [52]int8 + } +} + +type Tsig_atomic_t = int32 + +type TElf32_Half = uint16 + +type TElf64_Half = uint16 + +type TElf32_Word = uint32 + +type TElf32_Sword = int32 + +type TElf64_Word = uint32 + +type TElf64_Sword = int32 + +type TElf32_Xword = uint64 + +type TElf32_Sxword = int64 + +type TElf64_Xword = uint64 + +type TElf64_Sxword = int64 + +type TElf32_Addr = uint32 + +type TElf64_Addr = uint64 + +type TElf32_Off = uint32 + +type TElf64_Off = uint64 + +type TElf32_Section = uint16 + +type TElf64_Section = uint16 + +type TElf32_Versym = uint16 + +type TElf64_Versym = uint16 + +type TElf32_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf32_Half + Fe_machine TElf32_Half + Fe_version TElf32_Word + Fe_entry TElf32_Addr + Fe_phoff TElf32_Off + Fe_shoff TElf32_Off + Fe_flags TElf32_Word + Fe_ehsize TElf32_Half + Fe_phentsize TElf32_Half + Fe_phnum TElf32_Half + Fe_shentsize TElf32_Half + Fe_shnum TElf32_Half + Fe_shstrndx TElf32_Half +} + +type TElf64_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TElf32_Shdr = struct { + Fsh_name TElf32_Word + Fsh_type TElf32_Word + Fsh_flags TElf32_Word + Fsh_addr TElf32_Addr + Fsh_offset TElf32_Off + Fsh_size TElf32_Word + Fsh_link TElf32_Word + Fsh_info TElf32_Word + Fsh_addralign TElf32_Word + Fsh_entsize TElf32_Word +} + +type TElf64_Shdr = struct { + Fsh_name TElf64_Word + Fsh_type TElf64_Word + Fsh_flags TElf64_Xword + Fsh_addr TElf64_Addr + Fsh_offset TElf64_Off + Fsh_size TElf64_Xword + Fsh_link TElf64_Word + Fsh_info TElf64_Word + Fsh_addralign TElf64_Xword + Fsh_entsize TElf64_Xword +} + +type TElf32_Chdr = struct { + Fch_type TElf32_Word + Fch_size TElf32_Word + Fch_addralign TElf32_Word +} + +type TElf64_Chdr = struct { + Fch_type TElf64_Word + Fch_reserved TElf64_Word + Fch_size TElf64_Xword + Fch_addralign TElf64_Xword +} + +type TElf32_Sym = struct { + Fst_name TElf32_Word + Fst_value TElf32_Addr + Fst_size TElf32_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf32_Section +} + +type TElf64_Sym = struct { + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TElf32_Syminfo = struct { + Fsi_boundto TElf32_Half + Fsi_flags TElf32_Half +} + +type TElf64_Syminfo = struct { + Fsi_boundto TElf64_Half + Fsi_flags TElf64_Half +} + +type TElf32_Rel = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word +} + +type TElf64_Rel = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword +} + +type TElf32_Rela = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word + Fr_addend TElf32_Sword +} + +type TElf64_Rela = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword + Fr_addend TElf64_Sxword +} + +type TElf32_Relr = uint32 + +type TElf64_Relr = uint64 + +type TElf32_Phdr = struct { + Fp_type TElf32_Word + Fp_offset TElf32_Off + Fp_vaddr TElf32_Addr + Fp_paddr TElf32_Addr + Fp_filesz TElf32_Word + Fp_memsz TElf32_Word + Fp_flags TElf32_Word + Fp_align TElf32_Word +} + +type TElf64_Phdr = struct { + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TElf32_Dyn = struct { + Fd_tag TElf32_Sword + Fd_un struct { + Fd_ptr [0]TElf32_Addr + Fd_val TElf32_Word + } +} + +type TElf64_Dyn = struct { + Fd_tag TElf64_Sxword + Fd_un struct { + Fd_ptr [0]TElf64_Addr + Fd_val TElf64_Xword + } +} + +type TElf32_Verdef = struct { + Fvd_version TElf32_Half + Fvd_flags TElf32_Half + Fvd_ndx TElf32_Half + Fvd_cnt TElf32_Half + Fvd_hash TElf32_Word + Fvd_aux TElf32_Word + Fvd_next TElf32_Word +} + +type TElf64_Verdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TElf32_Verdaux = struct { + Fvda_name TElf32_Word + Fvda_next TElf32_Word +} + +type TElf64_Verdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +type TElf32_Verneed = struct { + Fvn_version TElf32_Half + Fvn_cnt TElf32_Half + Fvn_file TElf32_Word + Fvn_aux TElf32_Word + Fvn_next TElf32_Word +} + +type TElf64_Verneed = struct { + Fvn_version TElf64_Half + Fvn_cnt TElf64_Half + Fvn_file TElf64_Word + Fvn_aux TElf64_Word + Fvn_next TElf64_Word +} + +type TElf32_Vernaux = struct { + Fvna_hash TElf32_Word + Fvna_flags TElf32_Half + Fvna_other TElf32_Half + Fvna_name TElf32_Word + Fvna_next TElf32_Word +} + +type TElf64_Vernaux = struct { + Fvna_hash TElf64_Word + Fvna_flags TElf64_Half + Fvna_other TElf64_Half + Fvna_name TElf64_Word + Fvna_next TElf64_Word +} + +type TElf32_auxv_t = struct { + Fa_type Tuint32_t + Fa_un struct { + Fa_val Tuint32_t + } +} + +type TElf64_auxv_t = struct { + Fa_type Tuint64_t + Fa_un struct { + Fa_val Tuint64_t + } +} + +type TElf32_Nhdr = struct { + Fn_namesz TElf32_Word + Fn_descsz TElf32_Word + Fn_type TElf32_Word +} + +type TElf64_Nhdr = struct { + Fn_namesz TElf64_Word + Fn_descsz TElf64_Word + Fn_type TElf64_Word +} + +type TElf32_Move = struct { + Fm_value TElf32_Xword + Fm_info TElf32_Word + Fm_poffset TElf32_Word + Fm_repeat TElf32_Half + Fm_stride TElf32_Half +} + +type TElf64_Move = struct { + Fm_value TElf64_Xword + Fm_info TElf64_Xword + Fm_poffset TElf64_Xword + Fm_repeat TElf64_Half + Fm_stride TElf64_Half +} + +type TElf32_gptab = struct { + Fgt_entry [0]struct { + Fgt_g_value TElf32_Word + Fgt_bytes TElf32_Word + } + Fgt_header struct { + Fgt_current_g_value TElf32_Word + Fgt_unused TElf32_Word + } +} + +type TElf32_RegInfo = struct { + Fri_gprmask TElf32_Word + Fri_cprmask [4]TElf32_Word + Fri_gp_value TElf32_Sword +} + +type TElf_Options = struct { + Fkind uint8 + Fsize uint8 + Fsection TElf32_Section + Finfo TElf32_Word +} + +type TElf_Options_Hw = struct { + Fhwp_flags1 TElf32_Word + Fhwp_flags2 TElf32_Word +} + +type TElf32_Lib = struct { + Fl_name TElf32_Word + Fl_time_stamp TElf32_Word + Fl_checksum TElf32_Word + Fl_version TElf32_Word + Fl_flags TElf32_Word +} + +type TElf64_Lib = struct { + Fl_name TElf64_Word + Fl_time_stamp TElf64_Word + Fl_checksum TElf64_Word + Fl_version TElf64_Word + Fl_flags TElf64_Word +} + +type TElf32_Conflict = uint32 + +type TElf_MIPS_ABIFlags_v0 = struct { + Fversion TElf32_Half + Fisa_level uint8 + Fisa_rev uint8 + Fgpr_size uint8 + Fcpr1_size uint8 + Fcpr2_size uint8 + Ffp_abi uint8 + Fisa_ext TElf32_Word + Fases TElf32_Word + Fflags1 TElf32_Word + Fflags2 TElf32_Word +} + +const _Val_GNU_MIPS_ABI_FP_ANY = 0 +const _Val_GNU_MIPS_ABI_FP_DOUBLE = 1 +const _Val_GNU_MIPS_ABI_FP_SINGLE = 2 +const _Val_GNU_MIPS_ABI_FP_SOFT = 3 +const _Val_GNU_MIPS_ABI_FP_OLD_64 = 4 +const _Val_GNU_MIPS_ABI_FP_XX = 5 +const _Val_GNU_MIPS_ABI_FP_64 = 6 +const _Val_GNU_MIPS_ABI_FP_64A = 7 +const _Val_GNU_MIPS_ABI_FP_MAX = 7 + +type Tsyscall_arg_t = int32 + +type Twchar_t = int32 + +type Tdiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tldiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tlldiv_t = struct { + Fquot int64 + Frem int64 +} + +type t__locale_struct = struct { + Fcat [6]uintptr +} + +type Ttls_module = struct { + Fnext uintptr + Fimage uintptr + Flen1 Tsize_t + Fsize Tsize_t + Falign Tsize_t + Foffset Tsize_t +} + +type t__libc = struct { + Fcan_do_threads int8 + Fthreaded int8 + Fsecure int8 + Fneed_locks int8 + Fthreads_minus_1 int32 + Fauxv uintptr + Ftls_head uintptr + Ftls_size Tsize_t + Ftls_align Tsize_t + Ftls_cnt Tsize_t + Fpage_size Tsize_t + Fglobal_locale t__locale_struct +} + +func Xsysconf(tls *TLS, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(464) + defer tls.Free(464) + var cnt, i, val, v3 int32 + var mem, v1, v6 uint64 + var p5 uintptr + var _ /* lim at bp+0 */ Trlimit + var _ /* set at bp+16 */ [128]uint8 + var _ /* si at bp+144 */ Tsysinfo + _, _, _, _, _, _, _, _ = cnt, i, mem, val, v1, v3, v6, p5 + if uint32(name) >= Uint32FromInt64(502)/Uint32FromInt64(2) || !(_values1[name] != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } else { + if int32(_values1[name]) >= -int32(1) { + return int32(_values1[name]) + } else { + if int32(_values1[name]) < -int32(256) { + Xgetrlimit(tls, int32(_values1[name])&int32(16383), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur == ^Uint64FromUint64(0) { + return -int32(1) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur > uint64(0x7fffffff) { + v1 = uint64(0x7fffffff) + } else { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } + return int32(v1) + } + } + } + switch int32(uint8(_values1[name])) { + case (-Int32FromInt32(256) | Int32FromInt32(1)) & Int32FromInt32(255): + return int32(200809) + case (-Int32FromInt32(256) | Int32FromInt32(2)) & Int32FromInt32(255): + return int32(ARG_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(3)) & Int32FromInt32(255): + return int32(MQ_PRIO_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(4)) & Int32FromInt32(255): + return int32(PAGESIZE) + case (-Int32FromInt32(256) | Int32FromInt32(5)) & Int32FromInt32(255): + return int32(SEM_VALUE_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(11)) & Int32FromInt32(255): + return int32(DELAYTIMER_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(6)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(7)) & Int32FromInt32(255): + *(*[128]uint8)(unsafe.Pointer(bp + 16)) = [128]uint8{ + 0: uint8(1), + } + X__syscall3(tls, int32(SYS_sched_getaffinity), int32(Int32FromInt32(0)), int32(Uint32FromInt64(128)), int32(bp+16)) + v3 = Int32FromInt32(0) + cnt = v3 + i = v3 + for { + if !(uint32(i) < uint32(128)) { + break + } + for { + if !((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i] != 0) { + break + } + goto _4 + _4: + ; + p5 = bp + 16 + uintptr(i) + *(*uint8)(unsafe.Pointer(p5)) = uint8(int32(*(*uint8)(unsafe.Pointer(p5))) & (int32((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i]) - Int32FromInt32(1))) + cnt++ + } + goto _2 + _2: + ; + i++ + } + return cnt + case (-Int32FromInt32(256) | Int32FromInt32(8)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(9)) & Int32FromInt32(255): + X__lsysinfo(tls, bp+144) + if !((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit != 0) { + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit = uint32(1) + } + if name == int32(_SC_PHYS_PAGES) { + mem = uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ftotalram) + } else { + mem = uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ffreeram + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fbufferram) + } + mem *= uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit) + mem /= uint64(PAGESIZE) + if mem > uint64(0x7fffffff) { + v6 = uint64(0x7fffffff) + } else { + v6 = mem + } + return int32(v6) + case (-Int32FromInt32(256) | Int32FromInt32(12)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(13)) & Int32FromInt32(255): + val = int32(X__getauxval(tls, uint32(AT_MINSIGSTKSZ))) + if val < int32(MINSIGSTKSZ) { + val = int32(MINSIGSTKSZ) + } + if int32(_values1[name]) == -Int32FromInt32(256)|Int32FromInt32(13) { + val += int32(Int32FromInt32(SIGSTKSZ) - Int32FromInt32(MINSIGSTKSZ)) + } + return val + case (-Int32FromInt32(256) | Int32FromInt32(10)) & Int32FromInt32(255): + return 0 + } + return int32(_values1[name]) +} + +var _values1 = [251]int16{ + 0: int16(-Int32FromInt32(256) | Int32FromInt32(2)), + 1: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NPROC)), + 2: int16(100), + 3: int16(32), + 4: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NOFILE)), + 5: int16(-int32(1)), + 6: int16(TZNAME_MAX), + 7: int16(1), + 8: int16(1), + 9: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 10: int16(-int32(1)), + 11: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 12: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 13: int16(-int32(1)), + 14: int16(-int32(1)), + 15: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 16: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 17: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 18: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 19: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 20: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 21: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 22: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 23: int16(-int32(1)), + 24: int16(-int32(1)), + 25: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 26: int16(-Int32FromInt32(256) | Int32FromInt32(11)), + 27: int16(-int32(1)), + 28: int16(-Int32FromInt32(256) | Int32FromInt32(3)), + 29: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 30: int16(-Int32FromInt32(256) | Int32FromInt32(4)), + 31: int16(Int32FromInt32(_NSIG) - Int32FromInt32(1) - Int32FromInt32(31) - Int32FromInt32(3)), + 32: int16(SEM_NSEMS_MAX), + 33: int16(-Int32FromInt32(256) | Int32FromInt32(5)), + 34: int16(-int32(1)), + 35: int16(-int32(1)), + 36: int16(_POSIX2_BC_BASE_MAX), + 37: int16(_POSIX2_BC_DIM_MAX), + 38: int16(_POSIX2_BC_SCALE_MAX), + 39: int16(_POSIX2_BC_STRING_MAX), + 40: int16(COLL_WEIGHTS_MAX), + 42: int16(-int32(1)), + 43: int16(-int32(1)), + 44: int16(RE_DUP_MAX), + 46: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 47: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 48: int16(-int32(1)), + 49: int16(-int32(1)), + 50: int16(-int32(1)), + 51: int16(-int32(1)), + 52: int16(-int32(1)), + 60: int16(IOV_MAX), + 67: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 68: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 69: int16(-int32(1)), + 70: int16(-int32(1)), + 71: int16(256), + 72: int16(TTY_NAME_MAX), + 73: int16(PTHREAD_DESTRUCTOR_ITERATIONS), + 74: int16(PTHREAD_KEYS_MAX), + 75: int16(PTHREAD_STACK_MIN), + 76: int16(-int32(1)), + 77: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 78: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 79: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 80: int16(-int32(1)), + 81: int16(-int32(1)), + 82: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 83: int16(-Int32FromInt32(256) | Int32FromInt32(6)), + 84: int16(-Int32FromInt32(256) | Int32FromInt32(7)), + 85: int16(-Int32FromInt32(256) | Int32FromInt32(8)), + 86: int16(-Int32FromInt32(256) | Int32FromInt32(9)), + 87: int16(-int32(1)), + 88: int16(-int32(1)), + 89: int16(_XOPEN_VERSION), + 90: int16(_XOPEN_VERSION), + 91: int16(1), + 92: int16(-int32(1)), + 93: int16(1), + 94: int16(1), + 95: int16(-int32(1)), + 97: int16(-int32(1)), + 98: int16(-int32(1)), + 99: int16(-int32(1)), + 100: int16(-int32(1)), + 109: int16(NZERO), + 125: int16(-int32(1)), + 126: int16(1), + 127: int16(-int32(1)), + 128: int16(-int32(1)), + 129: int16(-int32(1)), + 130: int16(-int32(1)), + 131: int16(-int32(1)), + 132: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 133: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 137: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 138: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 139: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 149: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 153: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 154: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 155: int16(1), + 157: int16(1), + 159: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 160: int16(-int32(1)), + 161: int16(-int32(1)), + 164: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 165: int16(-int32(1)), + 168: int16(-int32(1)), + 169: int16(-int32(1)), + 170: int16(-int32(1)), + 171: int16(-int32(1)), + 172: int16(-int32(1)), + 173: int16(SYMLOOP_MAX), + 174: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 175: int16(-int32(1)), + 176: int16(-int32(1)), + 177: int16(1), + 178: int16(-int32(1)), + 179: int16(-int32(1)), + 180: int16(HOST_NAME_MAX), + 181: int16(-int32(1)), + 182: int16(-int32(1)), + 183: int16(-int32(1)), + 184: int16(-int32(1)), + 235: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 236: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 237: int16(-int32(1)), + 238: int16(1), + 239: int16(-int32(1)), + 240: int16(-int32(1)), + 241: int16(-int32(1)), + 242: int16(-int32(1)), + 243: int16(-int32(1)), + 244: int16(-int32(1)), + 245: int16(-int32(1)), + 246: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 247: int16(-int32(1)), + 248: int16(-int32(1)), + 249: int16(-Int32FromInt32(256) | Int32FromInt32(12)), + 250: int16(-Int32FromInt32(256) | Int32FromInt32(13)), +} + +type Tcrypt_data = struct { + Finitialized int32 + F__buf [256]int8 +} + +func Xcrypt(tls *TLS, key uintptr, salt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v, (%v:)", tls, key, salt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, uintptr(unsafe.Pointer(&_buf))) +} + +/* This buffer is sufficiently large for all + * currently-supported hash types. It needs to be updated if + * longer hashes are added. The cast to struct crypt_data * is + * purely to meet the public API requirements of the crypt_r + * function; the implementation of crypt_r uses the object + * purely as a char buffer. */ +var _buf [128]int8 + +const BF_N = 16 + +type Tlocale_t = uintptr + +type TBF_word = uint32 + +type TBF_word_signed = int32 + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ + +type TBF_key = [18]TBF_word + +type TBF_ctx = struct { + FPS [0][1042]TBF_word + Fs struct { + FP TBF_key + FS [4][256]TBF_word + } +} + +// C documentation +// +// /* +// * Magic IV for 64 Blowfish encryptions that we do at the end. +// * The string is "OrpheanBeholderScryDoubt" on big-endian. +// */ +var _BF_magic_w = [6]TBF_word{ + 0: uint32(0x4F727068), + 1: uint32(0x65616E42), + 2: uint32(0x65686F6C), + 3: uint32(0x64657253), + 4: uint32(0x63727944), + 5: uint32(0x6F756274), +} + +// C documentation +// +// /* +// * P-box and S-box tables initialized with digits of Pi. +// */ +var _BF_init_state = *(*TBF_ctx)(unsafe.Pointer(&struct { + FP TBF_key + FS [4][256]TBF_word +}{ + FP: TBF_key{ + 0: uint32(0x243f6a88), + 1: uint32(0x85a308d3), + 2: uint32(0x13198a2e), + 3: uint32(0x03707344), + 4: uint32(0xa4093822), + 5: uint32(0x299f31d0), + 6: uint32(0x082efa98), + 7: uint32(0xec4e6c89), + 8: uint32(0x452821e6), + 9: uint32(0x38d01377), + 10: uint32(0xbe5466cf), + 11: uint32(0x34e90c6c), + 12: uint32(0xc0ac29b7), + 13: uint32(0xc97c50dd), + 14: uint32(0x3f84d5b5), + 15: uint32(0xb5470917), + 16: uint32(0x9216d5d9), + 17: uint32(0x8979fb1b), + }, + FS: [4][256]TBF_word{ + 0: { + 0: uint32(0xd1310ba6), + 1: uint32(0x98dfb5ac), + 2: uint32(0x2ffd72db), + 3: uint32(0xd01adfb7), + 4: uint32(0xb8e1afed), + 5: uint32(0x6a267e96), + 6: uint32(0xba7c9045), + 7: uint32(0xf12c7f99), + 8: uint32(0x24a19947), + 9: uint32(0xb3916cf7), + 10: uint32(0x0801f2e2), + 11: uint32(0x858efc16), + 12: uint32(0x636920d8), + 13: uint32(0x71574e69), + 14: uint32(0xa458fea3), + 15: uint32(0xf4933d7e), + 16: uint32(0x0d95748f), + 17: uint32(0x728eb658), + 18: uint32(0x718bcd58), + 19: uint32(0x82154aee), + 20: uint32(0x7b54a41d), + 21: uint32(0xc25a59b5), + 22: uint32(0x9c30d539), + 23: uint32(0x2af26013), + 24: uint32(0xc5d1b023), + 25: uint32(0x286085f0), + 26: uint32(0xca417918), + 27: uint32(0xb8db38ef), + 28: uint32(0x8e79dcb0), + 29: uint32(0x603a180e), + 30: uint32(0x6c9e0e8b), + 31: uint32(0xb01e8a3e), + 32: uint32(0xd71577c1), + 33: uint32(0xbd314b27), + 34: uint32(0x78af2fda), + 35: uint32(0x55605c60), + 36: uint32(0xe65525f3), + 37: uint32(0xaa55ab94), + 38: uint32(0x57489862), + 39: uint32(0x63e81440), + 40: uint32(0x55ca396a), + 41: uint32(0x2aab10b6), + 42: uint32(0xb4cc5c34), + 43: uint32(0x1141e8ce), + 44: uint32(0xa15486af), + 45: uint32(0x7c72e993), + 46: uint32(0xb3ee1411), + 47: uint32(0x636fbc2a), + 48: uint32(0x2ba9c55d), + 49: uint32(0x741831f6), + 50: uint32(0xce5c3e16), + 51: uint32(0x9b87931e), + 52: uint32(0xafd6ba33), + 53: uint32(0x6c24cf5c), + 54: uint32(0x7a325381), + 55: uint32(0x28958677), + 56: uint32(0x3b8f4898), + 57: uint32(0x6b4bb9af), + 58: uint32(0xc4bfe81b), + 59: uint32(0x66282193), + 60: uint32(0x61d809cc), + 61: uint32(0xfb21a991), + 62: uint32(0x487cac60), + 63: uint32(0x5dec8032), + 64: uint32(0xef845d5d), + 65: uint32(0xe98575b1), + 66: uint32(0xdc262302), + 67: uint32(0xeb651b88), + 68: uint32(0x23893e81), + 69: uint32(0xd396acc5), + 70: uint32(0x0f6d6ff3), + 71: uint32(0x83f44239), + 72: uint32(0x2e0b4482), + 73: uint32(0xa4842004), + 74: uint32(0x69c8f04a), + 75: uint32(0x9e1f9b5e), + 76: uint32(0x21c66842), + 77: uint32(0xf6e96c9a), + 78: uint32(0x670c9c61), + 79: uint32(0xabd388f0), + 80: uint32(0x6a51a0d2), + 81: uint32(0xd8542f68), + 82: uint32(0x960fa728), + 83: uint32(0xab5133a3), + 84: uint32(0x6eef0b6c), + 85: uint32(0x137a3be4), + 86: uint32(0xba3bf050), + 87: uint32(0x7efb2a98), + 88: uint32(0xa1f1651d), + 89: uint32(0x39af0176), + 90: uint32(0x66ca593e), + 91: uint32(0x82430e88), + 92: uint32(0x8cee8619), + 93: uint32(0x456f9fb4), + 94: uint32(0x7d84a5c3), + 95: uint32(0x3b8b5ebe), + 96: uint32(0xe06f75d8), + 97: uint32(0x85c12073), + 98: uint32(0x401a449f), + 99: uint32(0x56c16aa6), + 100: uint32(0x4ed3aa62), + 101: uint32(0x363f7706), + 102: uint32(0x1bfedf72), + 103: uint32(0x429b023d), + 104: uint32(0x37d0d724), + 105: uint32(0xd00a1248), + 106: uint32(0xdb0fead3), + 107: uint32(0x49f1c09b), + 108: uint32(0x075372c9), + 109: uint32(0x80991b7b), + 110: uint32(0x25d479d8), + 111: uint32(0xf6e8def7), + 112: uint32(0xe3fe501a), + 113: uint32(0xb6794c3b), + 114: uint32(0x976ce0bd), + 115: uint32(0x04c006ba), + 116: uint32(0xc1a94fb6), + 117: uint32(0x409f60c4), + 118: uint32(0x5e5c9ec2), + 119: uint32(0x196a2463), + 120: uint32(0x68fb6faf), + 121: uint32(0x3e6c53b5), + 122: uint32(0x1339b2eb), + 123: uint32(0x3b52ec6f), + 124: uint32(0x6dfc511f), + 125: uint32(0x9b30952c), + 126: uint32(0xcc814544), + 127: uint32(0xaf5ebd09), + 128: uint32(0xbee3d004), + 129: uint32(0xde334afd), + 130: uint32(0x660f2807), + 131: uint32(0x192e4bb3), + 132: uint32(0xc0cba857), + 133: uint32(0x45c8740f), + 134: uint32(0xd20b5f39), + 135: uint32(0xb9d3fbdb), + 136: uint32(0x5579c0bd), + 137: uint32(0x1a60320a), + 138: uint32(0xd6a100c6), + 139: uint32(0x402c7279), + 140: uint32(0x679f25fe), + 141: uint32(0xfb1fa3cc), + 142: uint32(0x8ea5e9f8), + 143: uint32(0xdb3222f8), + 144: uint32(0x3c7516df), + 145: uint32(0xfd616b15), + 146: uint32(0x2f501ec8), + 147: uint32(0xad0552ab), + 148: uint32(0x323db5fa), + 149: uint32(0xfd238760), + 150: uint32(0x53317b48), + 151: uint32(0x3e00df82), + 152: uint32(0x9e5c57bb), + 153: uint32(0xca6f8ca0), + 154: uint32(0x1a87562e), + 155: uint32(0xdf1769db), + 156: uint32(0xd542a8f6), + 157: uint32(0x287effc3), + 158: uint32(0xac6732c6), + 159: uint32(0x8c4f5573), + 160: uint32(0x695b27b0), + 161: uint32(0xbbca58c8), + 162: uint32(0xe1ffa35d), + 163: uint32(0xb8f011a0), + 164: uint32(0x10fa3d98), + 165: uint32(0xfd2183b8), + 166: uint32(0x4afcb56c), + 167: uint32(0x2dd1d35b), + 168: uint32(0x9a53e479), + 169: uint32(0xb6f84565), + 170: uint32(0xd28e49bc), + 171: uint32(0x4bfb9790), + 172: uint32(0xe1ddf2da), + 173: uint32(0xa4cb7e33), + 174: uint32(0x62fb1341), + 175: uint32(0xcee4c6e8), + 176: uint32(0xef20cada), + 177: uint32(0x36774c01), + 178: uint32(0xd07e9efe), + 179: uint32(0x2bf11fb4), + 180: uint32(0x95dbda4d), + 181: uint32(0xae909198), + 182: uint32(0xeaad8e71), + 183: uint32(0x6b93d5a0), + 184: uint32(0xd08ed1d0), + 185: uint32(0xafc725e0), + 186: uint32(0x8e3c5b2f), + 187: uint32(0x8e7594b7), + 188: uint32(0x8ff6e2fb), + 189: uint32(0xf2122b64), + 190: uint32(0x8888b812), + 191: uint32(0x900df01c), + 192: uint32(0x4fad5ea0), + 193: uint32(0x688fc31c), + 194: uint32(0xd1cff191), + 195: uint32(0xb3a8c1ad), + 196: uint32(0x2f2f2218), + 197: uint32(0xbe0e1777), + 198: uint32(0xea752dfe), + 199: uint32(0x8b021fa1), + 200: uint32(0xe5a0cc0f), + 201: uint32(0xb56f74e8), + 202: uint32(0x18acf3d6), + 203: uint32(0xce89e299), + 204: uint32(0xb4a84fe0), + 205: uint32(0xfd13e0b7), + 206: uint32(0x7cc43b81), + 207: uint32(0xd2ada8d9), + 208: uint32(0x165fa266), + 209: uint32(0x80957705), + 210: uint32(0x93cc7314), + 211: uint32(0x211a1477), + 212: uint32(0xe6ad2065), + 213: uint32(0x77b5fa86), + 214: uint32(0xc75442f5), + 215: uint32(0xfb9d35cf), + 216: uint32(0xebcdaf0c), + 217: uint32(0x7b3e89a0), + 218: uint32(0xd6411bd3), + 219: uint32(0xae1e7e49), + 220: uint32(0x00250e2d), + 221: uint32(0x2071b35e), + 222: uint32(0x226800bb), + 223: uint32(0x57b8e0af), + 224: uint32(0x2464369b), + 225: uint32(0xf009b91e), + 226: uint32(0x5563911d), + 227: uint32(0x59dfa6aa), + 228: uint32(0x78c14389), + 229: uint32(0xd95a537f), + 230: uint32(0x207d5ba2), + 231: uint32(0x02e5b9c5), + 232: uint32(0x83260376), + 233: uint32(0x6295cfa9), + 234: uint32(0x11c81968), + 235: uint32(0x4e734a41), + 236: uint32(0xb3472dca), + 237: uint32(0x7b14a94a), + 238: uint32(0x1b510052), + 239: uint32(0x9a532915), + 240: uint32(0xd60f573f), + 241: uint32(0xbc9bc6e4), + 242: uint32(0x2b60a476), + 243: uint32(0x81e67400), + 244: uint32(0x08ba6fb5), + 245: uint32(0x571be91f), + 246: uint32(0xf296ec6b), + 247: uint32(0x2a0dd915), + 248: uint32(0xb6636521), + 249: uint32(0xe7b9f9b6), + 250: uint32(0xff34052e), + 251: uint32(0xc5855664), + 252: uint32(0x53b02d5d), + 253: uint32(0xa99f8fa1), + 254: uint32(0x08ba4799), + 255: uint32(0x6e85076a), + }, + 1: { + 0: uint32(0x4b7a70e9), + 1: uint32(0xb5b32944), + 2: uint32(0xdb75092e), + 3: uint32(0xc4192623), + 4: uint32(0xad6ea6b0), + 5: uint32(0x49a7df7d), + 6: uint32(0x9cee60b8), + 7: uint32(0x8fedb266), + 8: uint32(0xecaa8c71), + 9: uint32(0x699a17ff), + 10: uint32(0x5664526c), + 11: uint32(0xc2b19ee1), + 12: uint32(0x193602a5), + 13: uint32(0x75094c29), + 14: uint32(0xa0591340), + 15: uint32(0xe4183a3e), + 16: uint32(0x3f54989a), + 17: uint32(0x5b429d65), + 18: uint32(0x6b8fe4d6), + 19: uint32(0x99f73fd6), + 20: uint32(0xa1d29c07), + 21: uint32(0xefe830f5), + 22: uint32(0x4d2d38e6), + 23: uint32(0xf0255dc1), + 24: uint32(0x4cdd2086), + 25: uint32(0x8470eb26), + 26: uint32(0x6382e9c6), + 27: uint32(0x021ecc5e), + 28: uint32(0x09686b3f), + 29: uint32(0x3ebaefc9), + 30: uint32(0x3c971814), + 31: uint32(0x6b6a70a1), + 32: uint32(0x687f3584), + 33: uint32(0x52a0e286), + 34: uint32(0xb79c5305), + 35: uint32(0xaa500737), + 36: uint32(0x3e07841c), + 37: uint32(0x7fdeae5c), + 38: uint32(0x8e7d44ec), + 39: uint32(0x5716f2b8), + 40: uint32(0xb03ada37), + 41: uint32(0xf0500c0d), + 42: uint32(0xf01c1f04), + 43: uint32(0x0200b3ff), + 44: uint32(0xae0cf51a), + 45: uint32(0x3cb574b2), + 46: uint32(0x25837a58), + 47: uint32(0xdc0921bd), + 48: uint32(0xd19113f9), + 49: uint32(0x7ca92ff6), + 50: uint32(0x94324773), + 51: uint32(0x22f54701), + 52: uint32(0x3ae5e581), + 53: uint32(0x37c2dadc), + 54: uint32(0xc8b57634), + 55: uint32(0x9af3dda7), + 56: uint32(0xa9446146), + 57: uint32(0x0fd0030e), + 58: uint32(0xecc8c73e), + 59: uint32(0xa4751e41), + 60: uint32(0xe238cd99), + 61: uint32(0x3bea0e2f), + 62: uint32(0x3280bba1), + 63: uint32(0x183eb331), + 64: uint32(0x4e548b38), + 65: uint32(0x4f6db908), + 66: uint32(0x6f420d03), + 67: uint32(0xf60a04bf), + 68: uint32(0x2cb81290), + 69: uint32(0x24977c79), + 70: uint32(0x5679b072), + 71: uint32(0xbcaf89af), + 72: uint32(0xde9a771f), + 73: uint32(0xd9930810), + 74: uint32(0xb38bae12), + 75: uint32(0xdccf3f2e), + 76: uint32(0x5512721f), + 77: uint32(0x2e6b7124), + 78: uint32(0x501adde6), + 79: uint32(0x9f84cd87), + 80: uint32(0x7a584718), + 81: uint32(0x7408da17), + 82: uint32(0xbc9f9abc), + 83: uint32(0xe94b7d8c), + 84: uint32(0xec7aec3a), + 85: uint32(0xdb851dfa), + 86: uint32(0x63094366), + 87: uint32(0xc464c3d2), + 88: uint32(0xef1c1847), + 89: uint32(0x3215d908), + 90: uint32(0xdd433b37), + 91: uint32(0x24c2ba16), + 92: uint32(0x12a14d43), + 93: uint32(0x2a65c451), + 94: uint32(0x50940002), + 95: uint32(0x133ae4dd), + 96: uint32(0x71dff89e), + 97: uint32(0x10314e55), + 98: uint32(0x81ac77d6), + 99: uint32(0x5f11199b), + 100: uint32(0x043556f1), + 101: uint32(0xd7a3c76b), + 102: uint32(0x3c11183b), + 103: uint32(0x5924a509), + 104: uint32(0xf28fe6ed), + 105: uint32(0x97f1fbfa), + 106: uint32(0x9ebabf2c), + 107: uint32(0x1e153c6e), + 108: uint32(0x86e34570), + 109: uint32(0xeae96fb1), + 110: uint32(0x860e5e0a), + 111: uint32(0x5a3e2ab3), + 112: uint32(0x771fe71c), + 113: uint32(0x4e3d06fa), + 114: uint32(0x2965dcb9), + 115: uint32(0x99e71d0f), + 116: uint32(0x803e89d6), + 117: uint32(0x5266c825), + 118: uint32(0x2e4cc978), + 119: uint32(0x9c10b36a), + 120: uint32(0xc6150eba), + 121: uint32(0x94e2ea78), + 122: uint32(0xa5fc3c53), + 123: uint32(0x1e0a2df4), + 124: uint32(0xf2f74ea7), + 125: uint32(0x361d2b3d), + 126: uint32(0x1939260f), + 127: uint32(0x19c27960), + 128: uint32(0x5223a708), + 129: uint32(0xf71312b6), + 130: uint32(0xebadfe6e), + 131: uint32(0xeac31f66), + 132: uint32(0xe3bc4595), + 133: uint32(0xa67bc883), + 134: uint32(0xb17f37d1), + 135: uint32(0x018cff28), + 136: uint32(0xc332ddef), + 137: uint32(0xbe6c5aa5), + 138: uint32(0x65582185), + 139: uint32(0x68ab9802), + 140: uint32(0xeecea50f), + 141: uint32(0xdb2f953b), + 142: uint32(0x2aef7dad), + 143: uint32(0x5b6e2f84), + 144: uint32(0x1521b628), + 145: uint32(0x29076170), + 146: uint32(0xecdd4775), + 147: uint32(0x619f1510), + 148: uint32(0x13cca830), + 149: uint32(0xeb61bd96), + 150: uint32(0x0334fe1e), + 151: uint32(0xaa0363cf), + 152: uint32(0xb5735c90), + 153: uint32(0x4c70a239), + 154: uint32(0xd59e9e0b), + 155: uint32(0xcbaade14), + 156: uint32(0xeecc86bc), + 157: uint32(0x60622ca7), + 158: uint32(0x9cab5cab), + 159: uint32(0xb2f3846e), + 160: uint32(0x648b1eaf), + 161: uint32(0x19bdf0ca), + 162: uint32(0xa02369b9), + 163: uint32(0x655abb50), + 164: uint32(0x40685a32), + 165: uint32(0x3c2ab4b3), + 166: uint32(0x319ee9d5), + 167: uint32(0xc021b8f7), + 168: uint32(0x9b540b19), + 169: uint32(0x875fa099), + 170: uint32(0x95f7997e), + 171: uint32(0x623d7da8), + 172: uint32(0xf837889a), + 173: uint32(0x97e32d77), + 174: uint32(0x11ed935f), + 175: uint32(0x16681281), + 176: uint32(0x0e358829), + 177: uint32(0xc7e61fd6), + 178: uint32(0x96dedfa1), + 179: uint32(0x7858ba99), + 180: uint32(0x57f584a5), + 181: uint32(0x1b227263), + 182: uint32(0x9b83c3ff), + 183: uint32(0x1ac24696), + 184: uint32(0xcdb30aeb), + 185: uint32(0x532e3054), + 186: uint32(0x8fd948e4), + 187: uint32(0x6dbc3128), + 188: uint32(0x58ebf2ef), + 189: uint32(0x34c6ffea), + 190: uint32(0xfe28ed61), + 191: uint32(0xee7c3c73), + 192: uint32(0x5d4a14d9), + 193: uint32(0xe864b7e3), + 194: uint32(0x42105d14), + 195: uint32(0x203e13e0), + 196: uint32(0x45eee2b6), + 197: uint32(0xa3aaabea), + 198: uint32(0xdb6c4f15), + 199: uint32(0xfacb4fd0), + 200: uint32(0xc742f442), + 201: uint32(0xef6abbb5), + 202: uint32(0x654f3b1d), + 203: uint32(0x41cd2105), + 204: uint32(0xd81e799e), + 205: uint32(0x86854dc7), + 206: uint32(0xe44b476a), + 207: uint32(0x3d816250), + 208: uint32(0xcf62a1f2), + 209: uint32(0x5b8d2646), + 210: uint32(0xfc8883a0), + 211: uint32(0xc1c7b6a3), + 212: uint32(0x7f1524c3), + 213: uint32(0x69cb7492), + 214: uint32(0x47848a0b), + 215: uint32(0x5692b285), + 216: uint32(0x095bbf00), + 217: uint32(0xad19489d), + 218: uint32(0x1462b174), + 219: uint32(0x23820e00), + 220: uint32(0x58428d2a), + 221: uint32(0x0c55f5ea), + 222: uint32(0x1dadf43e), + 223: uint32(0x233f7061), + 224: uint32(0x3372f092), + 225: uint32(0x8d937e41), + 226: uint32(0xd65fecf1), + 227: uint32(0x6c223bdb), + 228: uint32(0x7cde3759), + 229: uint32(0xcbee7460), + 230: uint32(0x4085f2a7), + 231: uint32(0xce77326e), + 232: uint32(0xa6078084), + 233: uint32(0x19f8509e), + 234: uint32(0xe8efd855), + 235: uint32(0x61d99735), + 236: uint32(0xa969a7aa), + 237: uint32(0xc50c06c2), + 238: uint32(0x5a04abfc), + 239: uint32(0x800bcadc), + 240: uint32(0x9e447a2e), + 241: uint32(0xc3453484), + 242: uint32(0xfdd56705), + 243: uint32(0x0e1e9ec9), + 244: uint32(0xdb73dbd3), + 245: uint32(0x105588cd), + 246: uint32(0x675fda79), + 247: uint32(0xe3674340), + 248: uint32(0xc5c43465), + 249: uint32(0x713e38d8), + 250: uint32(0x3d28f89e), + 251: uint32(0xf16dff20), + 252: uint32(0x153e21e7), + 253: uint32(0x8fb03d4a), + 254: uint32(0xe6e39f2b), + 255: uint32(0xdb83adf7), + }, + 2: { + 0: uint32(0xe93d5a68), + 1: uint32(0x948140f7), + 2: uint32(0xf64c261c), + 3: uint32(0x94692934), + 4: uint32(0x411520f7), + 5: uint32(0x7602d4f7), + 6: uint32(0xbcf46b2e), + 7: uint32(0xd4a20068), + 8: uint32(0xd4082471), + 9: uint32(0x3320f46a), + 10: uint32(0x43b7d4b7), + 11: uint32(0x500061af), + 12: uint32(0x1e39f62e), + 13: uint32(0x97244546), + 14: uint32(0x14214f74), + 15: uint32(0xbf8b8840), + 16: uint32(0x4d95fc1d), + 17: uint32(0x96b591af), + 18: uint32(0x70f4ddd3), + 19: uint32(0x66a02f45), + 20: uint32(0xbfbc09ec), + 21: uint32(0x03bd9785), + 22: uint32(0x7fac6dd0), + 23: uint32(0x31cb8504), + 24: uint32(0x96eb27b3), + 25: uint32(0x55fd3941), + 26: uint32(0xda2547e6), + 27: uint32(0xabca0a9a), + 28: uint32(0x28507825), + 29: uint32(0x530429f4), + 30: uint32(0x0a2c86da), + 31: uint32(0xe9b66dfb), + 32: uint32(0x68dc1462), + 33: uint32(0xd7486900), + 34: uint32(0x680ec0a4), + 35: uint32(0x27a18dee), + 36: uint32(0x4f3ffea2), + 37: uint32(0xe887ad8c), + 38: uint32(0xb58ce006), + 39: uint32(0x7af4d6b6), + 40: uint32(0xaace1e7c), + 41: uint32(0xd3375fec), + 42: uint32(0xce78a399), + 43: uint32(0x406b2a42), + 44: uint32(0x20fe9e35), + 45: uint32(0xd9f385b9), + 46: uint32(0xee39d7ab), + 47: uint32(0x3b124e8b), + 48: uint32(0x1dc9faf7), + 49: uint32(0x4b6d1856), + 50: uint32(0x26a36631), + 51: uint32(0xeae397b2), + 52: uint32(0x3a6efa74), + 53: uint32(0xdd5b4332), + 54: uint32(0x6841e7f7), + 55: uint32(0xca7820fb), + 56: uint32(0xfb0af54e), + 57: uint32(0xd8feb397), + 58: uint32(0x454056ac), + 59: uint32(0xba489527), + 60: uint32(0x55533a3a), + 61: uint32(0x20838d87), + 62: uint32(0xfe6ba9b7), + 63: uint32(0xd096954b), + 64: uint32(0x55a867bc), + 65: uint32(0xa1159a58), + 66: uint32(0xcca92963), + 67: uint32(0x99e1db33), + 68: uint32(0xa62a4a56), + 69: uint32(0x3f3125f9), + 70: uint32(0x5ef47e1c), + 71: uint32(0x9029317c), + 72: uint32(0xfdf8e802), + 73: uint32(0x04272f70), + 74: uint32(0x80bb155c), + 75: uint32(0x05282ce3), + 76: uint32(0x95c11548), + 77: uint32(0xe4c66d22), + 78: uint32(0x48c1133f), + 79: uint32(0xc70f86dc), + 80: uint32(0x07f9c9ee), + 81: uint32(0x41041f0f), + 82: uint32(0x404779a4), + 83: uint32(0x5d886e17), + 84: uint32(0x325f51eb), + 85: uint32(0xd59bc0d1), + 86: uint32(0xf2bcc18f), + 87: uint32(0x41113564), + 88: uint32(0x257b7834), + 89: uint32(0x602a9c60), + 90: uint32(0xdff8e8a3), + 91: uint32(0x1f636c1b), + 92: uint32(0x0e12b4c2), + 93: uint32(0x02e1329e), + 94: uint32(0xaf664fd1), + 95: uint32(0xcad18115), + 96: uint32(0x6b2395e0), + 97: uint32(0x333e92e1), + 98: uint32(0x3b240b62), + 99: uint32(0xeebeb922), + 100: uint32(0x85b2a20e), + 101: uint32(0xe6ba0d99), + 102: uint32(0xde720c8c), + 103: uint32(0x2da2f728), + 104: uint32(0xd0127845), + 105: uint32(0x95b794fd), + 106: uint32(0x647d0862), + 107: uint32(0xe7ccf5f0), + 108: uint32(0x5449a36f), + 109: uint32(0x877d48fa), + 110: uint32(0xc39dfd27), + 111: uint32(0xf33e8d1e), + 112: uint32(0x0a476341), + 113: uint32(0x992eff74), + 114: uint32(0x3a6f6eab), + 115: uint32(0xf4f8fd37), + 116: uint32(0xa812dc60), + 117: uint32(0xa1ebddf8), + 118: uint32(0x991be14c), + 119: uint32(0xdb6e6b0d), + 120: uint32(0xc67b5510), + 121: uint32(0x6d672c37), + 122: uint32(0x2765d43b), + 123: uint32(0xdcd0e804), + 124: uint32(0xf1290dc7), + 125: uint32(0xcc00ffa3), + 126: uint32(0xb5390f92), + 127: uint32(0x690fed0b), + 128: uint32(0x667b9ffb), + 129: uint32(0xcedb7d9c), + 130: uint32(0xa091cf0b), + 131: uint32(0xd9155ea3), + 132: uint32(0xbb132f88), + 133: uint32(0x515bad24), + 134: uint32(0x7b9479bf), + 135: uint32(0x763bd6eb), + 136: uint32(0x37392eb3), + 137: uint32(0xcc115979), + 138: uint32(0x8026e297), + 139: uint32(0xf42e312d), + 140: uint32(0x6842ada7), + 141: uint32(0xc66a2b3b), + 142: uint32(0x12754ccc), + 143: uint32(0x782ef11c), + 144: uint32(0x6a124237), + 145: uint32(0xb79251e7), + 146: uint32(0x06a1bbe6), + 147: uint32(0x4bfb6350), + 148: uint32(0x1a6b1018), + 149: uint32(0x11caedfa), + 150: uint32(0x3d25bdd8), + 151: uint32(0xe2e1c3c9), + 152: uint32(0x44421659), + 153: uint32(0x0a121386), + 154: uint32(0xd90cec6e), + 155: uint32(0xd5abea2a), + 156: uint32(0x64af674e), + 157: uint32(0xda86a85f), + 158: uint32(0xbebfe988), + 159: uint32(0x64e4c3fe), + 160: uint32(0x9dbc8057), + 161: uint32(0xf0f7c086), + 162: uint32(0x60787bf8), + 163: uint32(0x6003604d), + 164: uint32(0xd1fd8346), + 165: uint32(0xf6381fb0), + 166: uint32(0x7745ae04), + 167: uint32(0xd736fccc), + 168: uint32(0x83426b33), + 169: uint32(0xf01eab71), + 170: uint32(0xb0804187), + 171: uint32(0x3c005e5f), + 172: uint32(0x77a057be), + 173: uint32(0xbde8ae24), + 174: uint32(0x55464299), + 175: uint32(0xbf582e61), + 176: uint32(0x4e58f48f), + 177: uint32(0xf2ddfda2), + 178: uint32(0xf474ef38), + 179: uint32(0x8789bdc2), + 180: uint32(0x5366f9c3), + 181: uint32(0xc8b38e74), + 182: uint32(0xb475f255), + 183: uint32(0x46fcd9b9), + 184: uint32(0x7aeb2661), + 185: uint32(0x8b1ddf84), + 186: uint32(0x846a0e79), + 187: uint32(0x915f95e2), + 188: uint32(0x466e598e), + 189: uint32(0x20b45770), + 190: uint32(0x8cd55591), + 191: uint32(0xc902de4c), + 192: uint32(0xb90bace1), + 193: uint32(0xbb8205d0), + 194: uint32(0x11a86248), + 195: uint32(0x7574a99e), + 196: uint32(0xb77f19b6), + 197: uint32(0xe0a9dc09), + 198: uint32(0x662d09a1), + 199: uint32(0xc4324633), + 200: uint32(0xe85a1f02), + 201: uint32(0x09f0be8c), + 202: uint32(0x4a99a025), + 203: uint32(0x1d6efe10), + 204: uint32(0x1ab93d1d), + 205: uint32(0x0ba5a4df), + 206: uint32(0xa186f20f), + 207: uint32(0x2868f169), + 208: uint32(0xdcb7da83), + 209: uint32(0x573906fe), + 210: uint32(0xa1e2ce9b), + 211: uint32(0x4fcd7f52), + 212: uint32(0x50115e01), + 213: uint32(0xa70683fa), + 214: uint32(0xa002b5c4), + 215: uint32(0x0de6d027), + 216: uint32(0x9af88c27), + 217: uint32(0x773f8641), + 218: uint32(0xc3604c06), + 219: uint32(0x61a806b5), + 220: uint32(0xf0177a28), + 221: uint32(0xc0f586e0), + 222: uint32(0x006058aa), + 223: uint32(0x30dc7d62), + 224: uint32(0x11e69ed7), + 225: uint32(0x2338ea63), + 226: uint32(0x53c2dd94), + 227: uint32(0xc2c21634), + 228: uint32(0xbbcbee56), + 229: uint32(0x90bcb6de), + 230: uint32(0xebfc7da1), + 231: uint32(0xce591d76), + 232: uint32(0x6f05e409), + 233: uint32(0x4b7c0188), + 234: uint32(0x39720a3d), + 235: uint32(0x7c927c24), + 236: uint32(0x86e3725f), + 237: uint32(0x724d9db9), + 238: uint32(0x1ac15bb4), + 239: uint32(0xd39eb8fc), + 240: uint32(0xed545578), + 241: uint32(0x08fca5b5), + 242: uint32(0xd83d7cd3), + 243: uint32(0x4dad0fc4), + 244: uint32(0x1e50ef5e), + 245: uint32(0xb161e6f8), + 246: uint32(0xa28514d9), + 247: uint32(0x6c51133c), + 248: uint32(0x6fd5c7e7), + 249: uint32(0x56e14ec4), + 250: uint32(0x362abfce), + 251: uint32(0xddc6c837), + 252: uint32(0xd79a3234), + 253: uint32(0x92638212), + 254: uint32(0x670efa8e), + 255: uint32(0x406000e0), + }, + 3: { + 0: uint32(0x3a39ce37), + 1: uint32(0xd3faf5cf), + 2: uint32(0xabc27737), + 3: uint32(0x5ac52d1b), + 4: uint32(0x5cb0679e), + 5: uint32(0x4fa33742), + 6: uint32(0xd3822740), + 7: uint32(0x99bc9bbe), + 8: uint32(0xd5118e9d), + 9: uint32(0xbf0f7315), + 10: uint32(0xd62d1c7e), + 11: uint32(0xc700c47b), + 12: uint32(0xb78c1b6b), + 13: uint32(0x21a19045), + 14: uint32(0xb26eb1be), + 15: uint32(0x6a366eb4), + 16: uint32(0x5748ab2f), + 17: uint32(0xbc946e79), + 18: uint32(0xc6a376d2), + 19: uint32(0x6549c2c8), + 20: uint32(0x530ff8ee), + 21: uint32(0x468dde7d), + 22: uint32(0xd5730a1d), + 23: uint32(0x4cd04dc6), + 24: uint32(0x2939bbdb), + 25: uint32(0xa9ba4650), + 26: uint32(0xac9526e8), + 27: uint32(0xbe5ee304), + 28: uint32(0xa1fad5f0), + 29: uint32(0x6a2d519a), + 30: uint32(0x63ef8ce2), + 31: uint32(0x9a86ee22), + 32: uint32(0xc089c2b8), + 33: uint32(0x43242ef6), + 34: uint32(0xa51e03aa), + 35: uint32(0x9cf2d0a4), + 36: uint32(0x83c061ba), + 37: uint32(0x9be96a4d), + 38: uint32(0x8fe51550), + 39: uint32(0xba645bd6), + 40: uint32(0x2826a2f9), + 41: uint32(0xa73a3ae1), + 42: uint32(0x4ba99586), + 43: uint32(0xef5562e9), + 44: uint32(0xc72fefd3), + 45: uint32(0xf752f7da), + 46: uint32(0x3f046f69), + 47: uint32(0x77fa0a59), + 48: uint32(0x80e4a915), + 49: uint32(0x87b08601), + 50: uint32(0x9b09e6ad), + 51: uint32(0x3b3ee593), + 52: uint32(0xe990fd5a), + 53: uint32(0x9e34d797), + 54: uint32(0x2cf0b7d9), + 55: uint32(0x022b8b51), + 56: uint32(0x96d5ac3a), + 57: uint32(0x017da67d), + 58: uint32(0xd1cf3ed6), + 59: uint32(0x7c7d2d28), + 60: uint32(0x1f9f25cf), + 61: uint32(0xadf2b89b), + 62: uint32(0x5ad6b472), + 63: uint32(0x5a88f54c), + 64: uint32(0xe029ac71), + 65: uint32(0xe019a5e6), + 66: uint32(0x47b0acfd), + 67: uint32(0xed93fa9b), + 68: uint32(0xe8d3c48d), + 69: uint32(0x283b57cc), + 70: uint32(0xf8d56629), + 71: uint32(0x79132e28), + 72: uint32(0x785f0191), + 73: uint32(0xed756055), + 74: uint32(0xf7960e44), + 75: uint32(0xe3d35e8c), + 76: uint32(0x15056dd4), + 77: uint32(0x88f46dba), + 78: uint32(0x03a16125), + 79: uint32(0x0564f0bd), + 80: uint32(0xc3eb9e15), + 81: uint32(0x3c9057a2), + 82: uint32(0x97271aec), + 83: uint32(0xa93a072a), + 84: uint32(0x1b3f6d9b), + 85: uint32(0x1e6321f5), + 86: uint32(0xf59c66fb), + 87: uint32(0x26dcf319), + 88: uint32(0x7533d928), + 89: uint32(0xb155fdf5), + 90: uint32(0x03563482), + 91: uint32(0x8aba3cbb), + 92: uint32(0x28517711), + 93: uint32(0xc20ad9f8), + 94: uint32(0xabcc5167), + 95: uint32(0xccad925f), + 96: uint32(0x4de81751), + 97: uint32(0x3830dc8e), + 98: uint32(0x379d5862), + 99: uint32(0x9320f991), + 100: uint32(0xea7a90c2), + 101: uint32(0xfb3e7bce), + 102: uint32(0x5121ce64), + 103: uint32(0x774fbe32), + 104: uint32(0xa8b6e37e), + 105: uint32(0xc3293d46), + 106: uint32(0x48de5369), + 107: uint32(0x6413e680), + 108: uint32(0xa2ae0810), + 109: uint32(0xdd6db224), + 110: uint32(0x69852dfd), + 111: uint32(0x09072166), + 112: uint32(0xb39a460a), + 113: uint32(0x6445c0dd), + 114: uint32(0x586cdecf), + 115: uint32(0x1c20c8ae), + 116: uint32(0x5bbef7dd), + 117: uint32(0x1b588d40), + 118: uint32(0xccd2017f), + 119: uint32(0x6bb4e3bb), + 120: uint32(0xdda26a7e), + 121: uint32(0x3a59ff45), + 122: uint32(0x3e350a44), + 123: uint32(0xbcb4cdd5), + 124: uint32(0x72eacea8), + 125: uint32(0xfa6484bb), + 126: uint32(0x8d6612ae), + 127: uint32(0xbf3c6f47), + 128: uint32(0xd29be463), + 129: uint32(0x542f5d9e), + 130: uint32(0xaec2771b), + 131: uint32(0xf64e6370), + 132: uint32(0x740e0d8d), + 133: uint32(0xe75b1357), + 134: uint32(0xf8721671), + 135: uint32(0xaf537d5d), + 136: uint32(0x4040cb08), + 137: uint32(0x4eb4e2cc), + 138: uint32(0x34d2466a), + 139: uint32(0x0115af84), + 140: uint32(0xe1b00428), + 141: uint32(0x95983a1d), + 142: uint32(0x06b89fb4), + 143: uint32(0xce6ea048), + 144: uint32(0x6f3f3b82), + 145: uint32(0x3520ab82), + 146: uint32(0x011a1d4b), + 147: uint32(0x277227f8), + 148: uint32(0x611560b1), + 149: uint32(0xe7933fdc), + 150: uint32(0xbb3a792b), + 151: uint32(0x344525bd), + 152: uint32(0xa08839e1), + 153: uint32(0x51ce794b), + 154: uint32(0x2f32c9b7), + 155: uint32(0xa01fbac9), + 156: uint32(0xe01cc87e), + 157: uint32(0xbcc7d1f6), + 158: uint32(0xcf0111c3), + 159: uint32(0xa1e8aac7), + 160: uint32(0x1a908749), + 161: uint32(0xd44fbd9a), + 162: uint32(0xd0dadecb), + 163: uint32(0xd50ada38), + 164: uint32(0x0339c32a), + 165: uint32(0xc6913667), + 166: uint32(0x8df9317c), + 167: uint32(0xe0b12b4f), + 168: uint32(0xf79e59b7), + 169: uint32(0x43f5bb3a), + 170: uint32(0xf2d519ff), + 171: uint32(0x27d9459c), + 172: uint32(0xbf97222c), + 173: uint32(0x15e6fc2a), + 174: uint32(0x0f91fc71), + 175: uint32(0x9b941525), + 176: uint32(0xfae59361), + 177: uint32(0xceb69ceb), + 178: uint32(0xc2a86459), + 179: uint32(0x12baa8d1), + 180: uint32(0xb6c1075e), + 181: uint32(0xe3056a0c), + 182: uint32(0x10d25065), + 183: uint32(0xcb03a442), + 184: uint32(0xe0ec6e0e), + 185: uint32(0x1698db3b), + 186: uint32(0x4c98a0be), + 187: uint32(0x3278e964), + 188: uint32(0x9f1f9532), + 189: uint32(0xe0d392df), + 190: uint32(0xd3a0342b), + 191: uint32(0x8971f21e), + 192: uint32(0x1b0a7441), + 193: uint32(0x4ba3348c), + 194: uint32(0xc5be7120), + 195: uint32(0xc37632d8), + 196: uint32(0xdf359f8d), + 197: uint32(0x9b992f2e), + 198: uint32(0xe60b6f47), + 199: uint32(0x0fe3f11d), + 200: uint32(0xe54cda54), + 201: uint32(0x1edad891), + 202: uint32(0xce6279cf), + 203: uint32(0xcd3e7e6f), + 204: uint32(0x1618b166), + 205: uint32(0xfd2c1d05), + 206: uint32(0x848fd2c5), + 207: uint32(0xf6fb2299), + 208: uint32(0xf523f357), + 209: uint32(0xa6327623), + 210: uint32(0x93a83531), + 211: uint32(0x56cccd02), + 212: uint32(0xacf08162), + 213: uint32(0x5a75ebb5), + 214: uint32(0x6e163697), + 215: uint32(0x88d273cc), + 216: uint32(0xde966292), + 217: uint32(0x81b949d0), + 218: uint32(0x4c50901b), + 219: uint32(0x71c65614), + 220: uint32(0xe6c6c7bd), + 221: uint32(0x327a140a), + 222: uint32(0x45e1d006), + 223: uint32(0xc3f27b9a), + 224: uint32(0xc9aa53fd), + 225: uint32(0x62a80f00), + 226: uint32(0xbb25bfe2), + 227: uint32(0x35bdd2f6), + 228: uint32(0x71126905), + 229: uint32(0xb2040222), + 230: uint32(0xb6cbcf7c), + 231: uint32(0xcd769c2b), + 232: uint32(0x53113ec0), + 233: uint32(0x1640e3d3), + 234: uint32(0x38abbd60), + 235: uint32(0x2547adf0), + 236: uint32(0xba38209c), + 237: uint32(0xf746ce76), + 238: uint32(0x77afa1c5), + 239: uint32(0x20756060), + 240: uint32(0x85cbfe4e), + 241: uint32(0x8ae88dd8), + 242: uint32(0x7aaaf9b0), + 243: uint32(0x4cf9aa7e), + 244: uint32(0x1948c25c), + 245: uint32(0x02fb8a8c), + 246: uint32(0x01c36ae4), + 247: uint32(0xd6ebe1f9), + 248: uint32(0x90d4f869), + 249: uint32(0xa65cdea0), + 250: uint32(0x3f09252d), + 251: uint32(0xc208e69f), + 252: uint32(0xb74e6132), + 253: uint32(0xce77e25b), + 254: uint32(0x578fdfe3), + 255: uint32(0x3ac372e6), + }, + }, +})) + +var _BF_itoa64 = [65]uint8{'.', '/', '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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +var _BF_atoi64 = [96]uint8{ + 0: uint8(64), + 1: uint8(64), + 2: uint8(64), + 3: uint8(64), + 4: uint8(64), + 5: uint8(64), + 6: uint8(64), + 7: uint8(64), + 8: uint8(64), + 9: uint8(64), + 10: uint8(64), + 11: uint8(64), + 12: uint8(64), + 13: uint8(64), + 15: uint8(1), + 16: uint8(54), + 17: uint8(55), + 18: uint8(56), + 19: uint8(57), + 20: uint8(58), + 21: uint8(59), + 22: uint8(60), + 23: uint8(61), + 24: uint8(62), + 25: uint8(63), + 26: uint8(64), + 27: uint8(64), + 28: uint8(64), + 29: uint8(64), + 30: uint8(64), + 31: uint8(64), + 32: uint8(64), + 33: uint8(2), + 34: uint8(3), + 35: uint8(4), + 36: uint8(5), + 37: uint8(6), + 38: uint8(7), + 39: uint8(8), + 40: uint8(9), + 41: uint8(10), + 42: uint8(11), + 43: uint8(12), + 44: uint8(13), + 45: uint8(14), + 46: uint8(15), + 47: uint8(16), + 48: uint8(17), + 49: uint8(18), + 50: uint8(19), + 51: uint8(20), + 52: uint8(21), + 53: uint8(22), + 54: uint8(23), + 55: uint8(24), + 56: uint8(25), + 57: uint8(26), + 58: uint8(27), + 59: uint8(64), + 60: uint8(64), + 61: uint8(64), + 62: uint8(64), + 63: uint8(64), + 64: uint8(64), + 65: uint8(28), + 66: uint8(29), + 67: uint8(30), + 68: uint8(31), + 69: uint8(32), + 70: uint8(33), + 71: uint8(34), + 72: uint8(35), + 73: uint8(36), + 74: uint8(37), + 75: uint8(38), + 76: uint8(39), + 77: uint8(40), + 78: uint8(41), + 79: uint8(42), + 80: uint8(43), + 81: uint8(44), + 82: uint8(45), + 83: uint8(46), + 84: uint8(47), + 85: uint8(48), + 86: uint8(49), + 87: uint8(50), + 88: uint8(51), + 89: uint8(52), + 90: uint8(53), + 91: uint8(64), + 92: uint8(64), + 93: uint8(64), + 94: uint8(64), + 95: uint8(64), +} + +func _BF_decode(tls *TLS, dst uintptr, src uintptr, size int32) (r int32) { + var c1, c2, c3, c4, tmp uint32 + var dptr, end, sptr, v1, v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, c2, c3, c4, dptr, end, sptr, tmp, v1, v2, v3, v4, v5, v6, v7 + dptr = dst + end = dptr + uintptr(size) + sptr = src + for cond := true; cond; cond = dptr < end { + v1 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v1))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c1 = tmp + v2 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v2))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c2 = tmp + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(c1<>int32(4)) + if dptr >= end { + break + } + v4 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v4))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c3 = tmp + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(c2&uint32(0x0F)<>int32(2)) + if dptr >= end { + break + } + v6 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v6))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c4 = tmp + v7 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(c3&uint32(0x03)<>int32(2)] + c1 = c1 & uint32(0x03) << int32(4) + if sptr >= end { + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = _BF_itoa64[c1] + break + } + v4 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v4))) + c1 |= c2 >> int32(4) + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = _BF_itoa64[c1] + c1 = c2 & uint32(0x0f) << int32(2) + if sptr >= end { + v6 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v6)) = _BF_itoa64[c1] + break + } + v7 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v7))) + c1 |= c2 >> int32(6) + v8 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v8)) = _BF_itoa64[c1] + v9 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v9)) = _BF_itoa64[c2&uint32(0x3f)] + } +} + +func _BF_swap(tls *TLS, x uintptr, count int32) { + var tmp TBF_word + var v1, v2 int32 + var v4 uintptr + _, _, _, _ = tmp, v1, v2, v4 + v1 = int32(1) + if *(*int8)(unsafe.Pointer(&v1)) != 0 { + for { + tmp = *(*TBF_word)(unsafe.Pointer(x)) + tmp = tmp<>Int32FromInt32(16) + v4 = x + x += 4 + *(*TBF_word)(unsafe.Pointer(v4)) = tmp&uint32(0x00FF00FF)<>Int32FromInt32(8)&uint32(0x00FF00FF) + goto _3 + _3: + ; + count-- + v2 = count + if !(v2 != 0) { + break + } + } + } +} + +func _BF_encrypt(tls *TLS, ctx uintptr, L TBF_word, R TBF_word, start uintptr, end uintptr) (r TBF_word) { + var i int32 + var ptr, v2, v3 uintptr + var tmp1, tmp2, tmp3, tmp4 TBF_word + _, _, _, _, _, _, _, _ = i, ptr, tmp1, tmp2, tmp3, tmp4, v2, v3 + ptr = start + for cond := true; cond; cond = ptr < end { + L ^= *(*TBF_word)(unsafe.Pointer(ctx)) + i = 0 + for { + if !(i < int32(16)) { + break + } + tmp1 = L & uint32(0xFF) + tmp2 = L >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = L >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = L >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + R ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1))*4)) + tmp3 += tmp1 + R ^= tmp3 + tmp1 = R & uint32(0xFF) + tmp2 = R >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = R >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = R >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + L ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1)+int32(1))*4)) + tmp3 += tmp1 + L ^= tmp3 + goto _1 + _1: + ; + i += int32(2) + } + tmp4 = R + R = L + L = tmp4 ^ *(*TBF_word)(unsafe.Pointer(ctx + uintptr(Int32FromInt32(BF_N)+Int32FromInt32(1))*4)) + v2 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v2)) = L + v3 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v3)) = R + } + return L +} + +func _BF_set_key(tls *TLS, key uintptr, expanded uintptr, initial uintptr, flags uint8) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bug, i, j uint32 + var diff, safety, sign, v1, v3 TBF_word + var ptr uintptr + var _ /* tmp at bp+0 */ [2]TBF_word + _, _, _, _, _, _, _, _, _ = bug, diff, i, j, ptr, safety, sign, v1, v3 + ptr = key + /* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = uint32(int32(flags) & int32(1)) + safety = uint32(flags) & uint32(2) << int32(15) + v1 = Uint32FromInt32(0) + diff = v1 + sign = v1 + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(BF_N)+Int32FromInt32(2))) { + break + } + v3 = Uint32FromInt32(0) + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] = v3 + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] = v3 + j = uint32(0) + for { + if !(j < uint32(4)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp)) |= uint32(uint8(*(*int8)(unsafe.Pointer(ptr)))) /* correct */ + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) |= uint32(*(*int8)(unsafe.Pointer(ptr))) /* bug */ + /* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if j != 0 { + sign |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] & uint32(0x80) + } + if !(*(*int8)(unsafe.Pointer(ptr)) != 0) { + ptr = key + } else { + ptr++ + } + goto _4 + _4: + ; + j++ + } + diff |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] /* Non-zero on any differences */ + *(*TBF_word)(unsafe.Pointer(expanded + uintptr(i)*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + *(*TBF_word)(unsafe.Pointer(initial + uintptr(i)*4)) = *(*TBF_word)(unsafe.Pointer(uintptr(unsafe.Pointer(&_BF_init_state)) + uintptr(i)*4)) ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + goto _2 + _2: + ; + i++ + } + /* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> int32(16) /* still zero iff exact match */ + diff &= uint32(0xffff) /* ditto */ + diff += uint32(0xffff) /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= uint32(9) /* move the non-benign sign extension flag to bit 16 */ + sign &= ^diff & safety /* action needed? */ + /* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + *(*TBF_word)(unsafe.Pointer(initial)) ^= sign +} + +var _flags_by_subtype = [26]uint8{ + 0: uint8(2), + 1: uint8(4), + 23: uint8(1), + 24: uint8(4), +} + +func _BF_crypt(tls *TLS, key uintptr, setting uintptr, output uintptr, min TBF_word) (r uintptr) { + bp := tls.Alloc(4272) + defer tls.Free(4272) + var L, L1, R, count, tmp1, tmp2, tmp3, tmp4, v1, v6 TBF_word + var done, i int32 + var ptr uintptr + var _ /* LR at bp+4264 */ [2]TBF_word + var _ /* data at bp+0 */ struct { + Fctx TBF_ctx + Fexpanded_key TBF_key + Fbinary struct { + Foutput [0][6]TBF_word + Fsalt [4]TBF_word + F__ccgo_pad2 [8]byte + } + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = L, L1, R, count, done, i, ptr, tmp1, tmp2, tmp3, tmp4, v1, v6 + if int32(*(*int8)(unsafe.Pointer(setting))) != int32('$') || int32(*(*int8)(unsafe.Pointer(setting + 1))) != int32('2') || uint32(int32(*(*int8)(unsafe.Pointer(setting + 2)))-int32('a')) > uint32(25) || !(_flags_by_subtype[int32(*(*int8)(unsafe.Pointer(setting + 2)))-int32('a')] != 0) || int32(*(*int8)(unsafe.Pointer(setting + 3))) != int32('$') || uint32(int32(*(*int8)(unsafe.Pointer(setting + 4)))-int32('0')) > uint32(1) || uint32(int32(*(*int8)(unsafe.Pointer(setting + 5)))-int32('0')) > uint32(9) || int32(*(*int8)(unsafe.Pointer(setting + 6))) != int32('$') { + return UintptrFromInt32(0) + } + count = Uint32FromInt32(1) << ((int32(*(*int8)(unsafe.Pointer(setting + 4)))-int32('0'))*int32(10) + (int32(*(*int8)(unsafe.Pointer(setting + 5))) - int32('0'))) + if count < min || _BF_decode(tls, bp+4240, setting+7, int32(16)) != 0 { + return UintptrFromInt32(0) + } + _BF_swap(tls, bp+4240, int32(4)) + _BF_set_key(tls, key, bp+4168, bp, _flags_by_subtype[int32(*(*int8)(unsafe.Pointer(setting + 2)))-int32('a')]) + Xmemcpy(tls, bp+72, uintptr(unsafe.Pointer(&_BF_init_state))+72, uint32(4096)) + L = uint32(0) + R = uint32(0) + ptr = bp + for cond := true; cond; cond = int32(1) != 0 { + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + if ptr >= bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4 { + break + } + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + } + for { + i = 0 + for { + if !(i < Int32FromInt32(BF_N)+Int32FromInt32(2)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i)*4)) + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i+int32(1))*4)) + goto _3 + _3: + ; + i += int32(2) + } + done = 0 + for cond := true; cond; cond = int32(1) != 0 { + _BF_encrypt(tls, bp, uint32(0), uint32(0), bp, bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4) + if done != 0 { + break + } + done = int32(1) + tmp1 = *(*TBF_word)(unsafe.Pointer(bp + 4240)) + tmp2 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)) + tmp4 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)) + i = 0 + for { + if !(i < int32(BF_N)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= tmp2 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(2))*4)) ^= tmp3 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(3))*4)) ^= tmp4 + goto _4 + _4: + ; + i += int32(4) + } + *(*TBF_word)(unsafe.Pointer(bp + 16*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + 17*4)) ^= tmp2 + } + goto _2 + _2: + ; + count-- + v1 = count + if !(v1 != 0) { + break + } + } + i = 0 + for { + if !(i < int32(6)) { + break + } + L1 = _BF_magic_w[i] + (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] = _BF_magic_w[i+int32(1)] + count = uint32(64) + for { + L1 = _BF_encrypt(tls, bp, L1, (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)], bp+4264, bp+4264) + goto _7 + _7: + ; + count-- + v6 = count + if !(v6 != 0) { + break + } + } + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i)*4)) = L1 + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i+int32(1))*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] + goto _5 + _5: + ; + i += int32(2) + } + Xmemcpy(tls, output, setting, uint32(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1))) + *(*int8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))) = int8(_BF_itoa64[int32(_BF_atoi64[int32(*(*int8)(unsafe.Pointer(setting + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))))-int32(0x20)])&int32(0x30)]) + /* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + _BF_swap(tls, bp+4240, int32(6)) + _BF_encode(tls, output+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), bp+4240, int32(23)) + *(*int8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)+Int32FromInt32(31)))) = int8('\000') + return output +} + +// C documentation +// +// /* +// * Please preserve the runtime self-test. It serves two purposes at once: +// * +// * 1. We really can't afford the risk of producing incompatible hashes e.g. +// * when there's something like gcc bug 26587 again, whereas an application or +// * library integrating this code might not also integrate our external tests or +// * it might not run them after every build. Even if it does, the miscompile +// * might only occur on the production build, but not on a testing build (such +// * as because of different optimization settings). It is painful to recover +// * from incorrectly-computed hashes - merely fixing whatever broke is not +// * enough. Thus, a proactive measure like this self-test is needed. +// * +// * 2. We don't want to leave sensitive data from our actual password hash +// * computation on the stack or in registers. Previous revisions of the code +// * would do explicit cleanups, but simply running the self-test after hash +// * computation is more reliable. +// * +// * The performance cost of this quick self-test is around 0.6% at the "$2a$08" +// * setting. +// */ +func X__crypt_blowfish(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(384) + defer tls.Free(384) + var flags uint32 + var k, p, retval, test_hash, test_key, test_setting uintptr + var ok int32 + var _ /* ae at bp+96 */ TBF_key + var _ /* ai at bp+168 */ TBF_key + var _ /* buf at bp+0 */ struct { + Fs [30]int8 + Fo [63]int8 + } + var _ /* ye at bp+240 */ TBF_key + var _ /* yi at bp+312 */ TBF_key + _, _, _, _, _, _, _, _ = flags, k, ok, p, retval, test_hash, test_key, test_setting + test_key = __ccgo_ts + 18 + test_setting = __ccgo_ts + 28 + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + /* Hash the supplied password */ + retval = _BF_crypt(tls, key, setting, output, uint32(16)) + /* + * Do a quick self-test. It is important that we make both calls to BF_crypt() + * from the same scope such that they likely use the same stack locations, + * which makes the second call overwrite the first call's sensitive data on the + * stack and makes it more likely that any alignment related issues would be + * detected by the self-test. + */ + Xmemcpy(tls, bp, test_setting, uint32(30)) + if retval != 0 { + flags = uint32(_flags_by_subtype[int32(*(*int8)(unsafe.Pointer(setting + 2)))-int32('a')]) + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + uintptr(flags&uint32(1))*34 + *(*int8)(unsafe.Pointer(bp + 2)) = *(*int8)(unsafe.Pointer(setting + 2)) + } + Xmemset(tls, bp+30, int32(0x55), uint32(63)) + *(*int8)(unsafe.Pointer(bp + 30 + uintptr(Uint32FromInt64(63)-Uint32FromInt32(1)))) = 0 + p = _BF_crypt(tls, test_key, bp, bp+30, uint32(1)) + ok = BoolInt32(p == bp+30 && !(Xmemcmp(tls, p, bp, uint32(Int32FromInt32(7)+Int32FromInt32(22))) != 0) && !(Xmemcmp(tls, p+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), test_hash, uint32(Int32FromInt32(31)+Int32FromInt32(1)+Int32FromInt32(1)+Int32FromInt32(1))) != 0)) + k = __ccgo_ts + 58 + _BF_set_key(tls, k, bp+96, bp+168, uint8(2)) /* $2a$ */ + _BF_set_key(tls, k, bp+240, bp+312, uint8(4)) /* $2y$ */ + *(*TBF_word)(unsafe.Pointer(bp + 168)) ^= uint32(0x10000) /* undo the safety (for comparison) */ + ok = BoolInt32(ok != 0 && (*(*TBF_key)(unsafe.Pointer(bp + 168)))[0] == uint32(0xdb9c59bc) && (*(*TBF_key)(unsafe.Pointer(bp + 240)))[int32(17)] == uint32(0x33343500) && !(Xmemcmp(tls, bp+96, bp+240, uint32(72)) != 0) && !(Xmemcmp(tls, bp+168, bp+312, uint32(72)) != 0)) + if ok != 0 && retval != 0 { + return retval + } + return __ccgo_ts + 70 +} + +var _test_hashes = [2][34]int8{ + 0: {'i', '1', 'D', '7', '0', '9', 'v', 'f', 'a', 'm', 'u', 'l', 'i', 'm', 'l', 'G', 'c', 'q', '0', 'q', 'q', '3', 'U', 'v', 'u', 'U', 'a', 's', 'v', 'E', 'a', 0, 'U'}, + 1: {'V', 'U', 'r', 'P', 'm', 'X', 'D', '6', 'q', '/', 'n', 'V', 'S', 'S', 'p', '7', 'p', 'N', 'D', 'h', 'C', 'R', '9', '0', '7', '1', 'I', 'f', 'I', 'R', 'e', 0, 'U'}, +} + +const _PASSWORD_EFMT1 = 95 + +type Texpanded_key = struct { + Fl [16]Tuint32_t + Fr [16]Tuint32_t +} + +var _key_shifts = [16]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(2), + 3: uint8(2), + 4: uint8(2), + 5: uint8(2), + 6: uint8(2), + 7: uint8(2), + 8: uint8(1), + 9: uint8(2), + 10: uint8(2), + 11: uint8(2), + 12: uint8(2), + 13: uint8(2), + 14: uint8(2), + 15: uint8(1), +} + +var _psbox = [8][64]Tuint32_t{ + 0: { + 0: uint32(0x00808200), + 2: uint32(0x00008000), + 3: uint32(0x00808202), + 4: uint32(0x00808002), + 5: uint32(0x00008202), + 6: uint32(0x00000002), + 7: uint32(0x00008000), + 8: uint32(0x00000200), + 9: uint32(0x00808200), + 10: uint32(0x00808202), + 11: uint32(0x00000200), + 12: uint32(0x00800202), + 13: uint32(0x00808002), + 14: uint32(0x00800000), + 15: uint32(0x00000002), + 16: uint32(0x00000202), + 17: uint32(0x00800200), + 18: uint32(0x00800200), + 19: uint32(0x00008200), + 20: uint32(0x00008200), + 21: uint32(0x00808000), + 22: uint32(0x00808000), + 23: uint32(0x00800202), + 24: uint32(0x00008002), + 25: uint32(0x00800002), + 26: uint32(0x00800002), + 27: uint32(0x00008002), + 29: uint32(0x00000202), + 30: uint32(0x00008202), + 31: uint32(0x00800000), + 32: uint32(0x00008000), + 33: uint32(0x00808202), + 34: uint32(0x00000002), + 35: uint32(0x00808000), + 36: uint32(0x00808200), + 37: uint32(0x00800000), + 38: uint32(0x00800000), + 39: uint32(0x00000200), + 40: uint32(0x00808002), + 41: uint32(0x00008000), + 42: uint32(0x00008200), + 43: uint32(0x00800002), + 44: uint32(0x00000200), + 45: uint32(0x00000002), + 46: uint32(0x00800202), + 47: uint32(0x00008202), + 48: uint32(0x00808202), + 49: uint32(0x00008002), + 50: uint32(0x00808000), + 51: uint32(0x00800202), + 52: uint32(0x00800002), + 53: uint32(0x00000202), + 54: uint32(0x00008202), + 55: uint32(0x00808200), + 56: uint32(0x00000202), + 57: uint32(0x00800200), + 58: uint32(0x00800200), + 60: uint32(0x00008002), + 61: uint32(0x00008200), + 63: uint32(0x00808002), + }, + 1: { + 0: uint32(0x40084010), + 1: uint32(0x40004000), + 2: uint32(0x00004000), + 3: uint32(0x00084010), + 4: uint32(0x00080000), + 5: uint32(0x00000010), + 6: uint32(0x40080010), + 7: uint32(0x40004010), + 8: uint32(0x40000010), + 9: uint32(0x40084010), + 10: uint32(0x40084000), + 11: uint32(0x40000000), + 12: uint32(0x40004000), + 13: uint32(0x00080000), + 14: uint32(0x00000010), + 15: uint32(0x40080010), + 16: uint32(0x00084000), + 17: uint32(0x00080010), + 18: uint32(0x40004010), + 20: uint32(0x40000000), + 21: uint32(0x00004000), + 22: uint32(0x00084010), + 23: uint32(0x40080000), + 24: uint32(0x00080010), + 25: uint32(0x40000010), + 27: uint32(0x00084000), + 28: uint32(0x00004010), + 29: uint32(0x40084000), + 30: uint32(0x40080000), + 31: uint32(0x00004010), + 33: uint32(0x00084010), + 34: uint32(0x40080010), + 35: uint32(0x00080000), + 36: uint32(0x40004010), + 37: uint32(0x40080000), + 38: uint32(0x40084000), + 39: uint32(0x00004000), + 40: uint32(0x40080000), + 41: uint32(0x40004000), + 42: uint32(0x00000010), + 43: uint32(0x40084010), + 44: uint32(0x00084010), + 45: uint32(0x00000010), + 46: uint32(0x00004000), + 47: uint32(0x40000000), + 48: uint32(0x00004010), + 49: uint32(0x40084000), + 50: uint32(0x00080000), + 51: uint32(0x40000010), + 52: uint32(0x00080010), + 53: uint32(0x40004010), + 54: uint32(0x40000010), + 55: uint32(0x00080010), + 56: uint32(0x00084000), + 58: uint32(0x40004000), + 59: uint32(0x00004010), + 60: uint32(0x40000000), + 61: uint32(0x40080010), + 62: uint32(0x40084010), + 63: uint32(0x00084000), + }, + 2: { + 0: uint32(0x00000104), + 1: uint32(0x04010100), + 3: uint32(0x04010004), + 4: uint32(0x04000100), + 6: uint32(0x00010104), + 7: uint32(0x04000100), + 8: uint32(0x00010004), + 9: uint32(0x04000004), + 10: uint32(0x04000004), + 11: uint32(0x00010000), + 12: uint32(0x04010104), + 13: uint32(0x00010004), + 14: uint32(0x04010000), + 15: uint32(0x00000104), + 16: uint32(0x04000000), + 17: uint32(0x00000004), + 18: uint32(0x04010100), + 19: uint32(0x00000100), + 20: uint32(0x00010100), + 21: uint32(0x04010000), + 22: uint32(0x04010004), + 23: uint32(0x00010104), + 24: uint32(0x04000104), + 25: uint32(0x00010100), + 26: uint32(0x00010000), + 27: uint32(0x04000104), + 28: uint32(0x00000004), + 29: uint32(0x04010104), + 30: uint32(0x00000100), + 31: uint32(0x04000000), + 32: uint32(0x04010100), + 33: uint32(0x04000000), + 34: uint32(0x00010004), + 35: uint32(0x00000104), + 36: uint32(0x00010000), + 37: uint32(0x04010100), + 38: uint32(0x04000100), + 40: uint32(0x00000100), + 41: uint32(0x00010004), + 42: uint32(0x04010104), + 43: uint32(0x04000100), + 44: uint32(0x04000004), + 45: uint32(0x00000100), + 47: uint32(0x04010004), + 48: uint32(0x04000104), + 49: uint32(0x00010000), + 50: uint32(0x04000000), + 51: uint32(0x04010104), + 52: uint32(0x00000004), + 53: uint32(0x00010104), + 54: uint32(0x00010100), + 55: uint32(0x04000004), + 56: uint32(0x04010000), + 57: uint32(0x04000104), + 58: uint32(0x00000104), + 59: uint32(0x04010000), + 60: uint32(0x00010104), + 61: uint32(0x00000004), + 62: uint32(0x04010004), + 63: uint32(0x00010100), + }, + 3: { + 0: uint32(0x80401000), + 1: uint32(0x80001040), + 2: uint32(0x80001040), + 3: uint32(0x00000040), + 4: uint32(0x00401040), + 5: uint32(0x80400040), + 6: uint32(0x80400000), + 7: uint32(0x80001000), + 9: uint32(0x00401000), + 10: uint32(0x00401000), + 11: uint32(0x80401040), + 12: uint32(0x80000040), + 14: uint32(0x00400040), + 15: uint32(0x80400000), + 16: uint32(0x80000000), + 17: uint32(0x00001000), + 18: uint32(0x00400000), + 19: uint32(0x80401000), + 20: uint32(0x00000040), + 21: uint32(0x00400000), + 22: uint32(0x80001000), + 23: uint32(0x00001040), + 24: uint32(0x80400040), + 25: uint32(0x80000000), + 26: uint32(0x00001040), + 27: uint32(0x00400040), + 28: uint32(0x00001000), + 29: uint32(0x00401040), + 30: uint32(0x80401040), + 31: uint32(0x80000040), + 32: uint32(0x00400040), + 33: uint32(0x80400000), + 34: uint32(0x00401000), + 35: uint32(0x80401040), + 36: uint32(0x80000040), + 39: uint32(0x00401000), + 40: uint32(0x00001040), + 41: uint32(0x00400040), + 42: uint32(0x80400040), + 43: uint32(0x80000000), + 44: uint32(0x80401000), + 45: uint32(0x80001040), + 46: uint32(0x80001040), + 47: uint32(0x00000040), + 48: uint32(0x80401040), + 49: uint32(0x80000040), + 50: uint32(0x80000000), + 51: uint32(0x00001000), + 52: uint32(0x80400000), + 53: uint32(0x80001000), + 54: uint32(0x00401040), + 55: uint32(0x80400040), + 56: uint32(0x80001000), + 57: uint32(0x00001040), + 58: uint32(0x00400000), + 59: uint32(0x80401000), + 60: uint32(0x00000040), + 61: uint32(0x00400000), + 62: uint32(0x00001000), + 63: uint32(0x00401040), + }, + 4: { + 0: uint32(0x00000080), + 1: uint32(0x01040080), + 2: uint32(0x01040000), + 3: uint32(0x21000080), + 4: uint32(0x00040000), + 5: uint32(0x00000080), + 6: uint32(0x20000000), + 7: uint32(0x01040000), + 8: uint32(0x20040080), + 9: uint32(0x00040000), + 10: uint32(0x01000080), + 11: uint32(0x20040080), + 12: uint32(0x21000080), + 13: uint32(0x21040000), + 14: uint32(0x00040080), + 15: uint32(0x20000000), + 16: uint32(0x01000000), + 17: uint32(0x20040000), + 18: uint32(0x20040000), + 20: uint32(0x20000080), + 21: uint32(0x21040080), + 22: uint32(0x21040080), + 23: uint32(0x01000080), + 24: uint32(0x21040000), + 25: uint32(0x20000080), + 27: uint32(0x21000000), + 28: uint32(0x01040080), + 29: uint32(0x01000000), + 30: uint32(0x21000000), + 31: uint32(0x00040080), + 32: uint32(0x00040000), + 33: uint32(0x21000080), + 34: uint32(0x00000080), + 35: uint32(0x01000000), + 36: uint32(0x20000000), + 37: uint32(0x01040000), + 38: uint32(0x21000080), + 39: uint32(0x20040080), + 40: uint32(0x01000080), + 41: uint32(0x20000000), + 42: uint32(0x21040000), + 43: uint32(0x01040080), + 44: uint32(0x20040080), + 45: uint32(0x00000080), + 46: uint32(0x01000000), + 47: uint32(0x21040000), + 48: uint32(0x21040080), + 49: uint32(0x00040080), + 50: uint32(0x21000000), + 51: uint32(0x21040080), + 52: uint32(0x01040000), + 54: uint32(0x20040000), + 55: uint32(0x21000000), + 56: uint32(0x00040080), + 57: uint32(0x01000080), + 58: uint32(0x20000080), + 59: uint32(0x00040000), + 61: uint32(0x20040000), + 62: uint32(0x01040080), + 63: uint32(0x20000080), + }, + 5: { + 0: uint32(0x10000008), + 1: uint32(0x10200000), + 2: uint32(0x00002000), + 3: uint32(0x10202008), + 4: uint32(0x10200000), + 5: uint32(0x00000008), + 6: uint32(0x10202008), + 7: uint32(0x00200000), + 8: uint32(0x10002000), + 9: uint32(0x00202008), + 10: uint32(0x00200000), + 11: uint32(0x10000008), + 12: uint32(0x00200008), + 13: uint32(0x10002000), + 14: uint32(0x10000000), + 15: uint32(0x00002008), + 17: uint32(0x00200008), + 18: uint32(0x10002008), + 19: uint32(0x00002000), + 20: uint32(0x00202000), + 21: uint32(0x10002008), + 22: uint32(0x00000008), + 23: uint32(0x10200008), + 24: uint32(0x10200008), + 26: uint32(0x00202008), + 27: uint32(0x10202000), + 28: uint32(0x00002008), + 29: uint32(0x00202000), + 30: uint32(0x10202000), + 31: uint32(0x10000000), + 32: uint32(0x10002000), + 33: uint32(0x00000008), + 34: uint32(0x10200008), + 35: uint32(0x00202000), + 36: uint32(0x10202008), + 37: uint32(0x00200000), + 38: uint32(0x00002008), + 39: uint32(0x10000008), + 40: uint32(0x00200000), + 41: uint32(0x10002000), + 42: uint32(0x10000000), + 43: uint32(0x00002008), + 44: uint32(0x10000008), + 45: uint32(0x10202008), + 46: uint32(0x00202000), + 47: uint32(0x10200000), + 48: uint32(0x00202008), + 49: uint32(0x10202000), + 51: uint32(0x10200008), + 52: uint32(0x00000008), + 53: uint32(0x00002000), + 54: uint32(0x10200000), + 55: uint32(0x00202008), + 56: uint32(0x00002000), + 57: uint32(0x00200008), + 58: uint32(0x10002008), + 60: uint32(0x10202000), + 61: uint32(0x10000000), + 62: uint32(0x00200008), + 63: uint32(0x10002008), + }, + 6: { + 0: uint32(0x00100000), + 1: uint32(0x02100001), + 2: uint32(0x02000401), + 4: uint32(0x00000400), + 5: uint32(0x02000401), + 6: uint32(0x00100401), + 7: uint32(0x02100400), + 8: uint32(0x02100401), + 9: uint32(0x00100000), + 11: uint32(0x02000001), + 12: uint32(0x00000001), + 13: uint32(0x02000000), + 14: uint32(0x02100001), + 15: uint32(0x00000401), + 16: uint32(0x02000400), + 17: uint32(0x00100401), + 18: uint32(0x00100001), + 19: uint32(0x02000400), + 20: uint32(0x02000001), + 21: uint32(0x02100000), + 22: uint32(0x02100400), + 23: uint32(0x00100001), + 24: uint32(0x02100000), + 25: uint32(0x00000400), + 26: uint32(0x00000401), + 27: uint32(0x02100401), + 28: uint32(0x00100400), + 29: uint32(0x00000001), + 30: uint32(0x02000000), + 31: uint32(0x00100400), + 32: uint32(0x02000000), + 33: uint32(0x00100400), + 34: uint32(0x00100000), + 35: uint32(0x02000401), + 36: uint32(0x02000401), + 37: uint32(0x02100001), + 38: uint32(0x02100001), + 39: uint32(0x00000001), + 40: uint32(0x00100001), + 41: uint32(0x02000000), + 42: uint32(0x02000400), + 43: uint32(0x00100000), + 44: uint32(0x02100400), + 45: uint32(0x00000401), + 46: uint32(0x00100401), + 47: uint32(0x02100400), + 48: uint32(0x00000401), + 49: uint32(0x02000001), + 50: uint32(0x02100401), + 51: uint32(0x02100000), + 52: uint32(0x00100400), + 54: uint32(0x00000001), + 55: uint32(0x02100401), + 57: uint32(0x00100401), + 58: uint32(0x02100000), + 59: uint32(0x00000400), + 60: uint32(0x02000001), + 61: uint32(0x02000400), + 62: uint32(0x00000400), + 63: uint32(0x00100001), + }, + 7: { + 0: uint32(0x08000820), + 1: uint32(0x00000800), + 2: uint32(0x00020000), + 3: uint32(0x08020820), + 4: uint32(0x08000000), + 5: uint32(0x08000820), + 6: uint32(0x00000020), + 7: uint32(0x08000000), + 8: uint32(0x00020020), + 9: uint32(0x08020000), + 10: uint32(0x08020820), + 11: uint32(0x00020800), + 12: uint32(0x08020800), + 13: uint32(0x00020820), + 14: uint32(0x00000800), + 15: uint32(0x00000020), + 16: uint32(0x08020000), + 17: uint32(0x08000020), + 18: uint32(0x08000800), + 19: uint32(0x00000820), + 20: uint32(0x00020800), + 21: uint32(0x00020020), + 22: uint32(0x08020020), + 23: uint32(0x08020800), + 24: uint32(0x00000820), + 27: uint32(0x08020020), + 28: uint32(0x08000020), + 29: uint32(0x08000800), + 30: uint32(0x00020820), + 31: uint32(0x00020000), + 32: uint32(0x00020820), + 33: uint32(0x00020000), + 34: uint32(0x08020800), + 35: uint32(0x00000800), + 36: uint32(0x00000020), + 37: uint32(0x08020020), + 38: uint32(0x00000800), + 39: uint32(0x00020820), + 40: uint32(0x08000800), + 41: uint32(0x00000020), + 42: uint32(0x08000020), + 43: uint32(0x08020000), + 44: uint32(0x08020020), + 45: uint32(0x08000000), + 46: uint32(0x00020000), + 47: uint32(0x08000820), + 49: uint32(0x08020820), + 50: uint32(0x00020020), + 51: uint32(0x08000020), + 52: uint32(0x08020000), + 53: uint32(0x08000800), + 54: uint32(0x08000820), + 56: uint32(0x08020820), + 57: uint32(0x00020800), + 58: uint32(0x00020800), + 59: uint32(0x00000820), + 60: uint32(0x00000820), + 61: uint32(0x00020020), + 62: uint32(0x08000000), + 63: uint32(0x08020800), + }, +} +var _ip_maskl = [16][16]Tuint32_t{ + 0: { + 1: uint32(0x00010000), + 3: uint32(0x00010000), + 4: uint32(0x01000000), + 5: uint32(0x01010000), + 6: uint32(0x01000000), + 7: uint32(0x01010000), + 9: uint32(0x00010000), + 11: uint32(0x00010000), + 12: uint32(0x01000000), + 13: uint32(0x01010000), + 14: uint32(0x01000000), + 15: uint32(0x01010000), + }, + 1: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 4: uint32(0x00000100), + 5: uint32(0x00000101), + 6: uint32(0x00000100), + 7: uint32(0x00000101), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 12: uint32(0x00000100), + 13: uint32(0x00000101), + 14: uint32(0x00000100), + 15: uint32(0x00000101), + }, + 2: { + 1: uint32(0x00020000), + 3: uint32(0x00020000), + 4: uint32(0x02000000), + 5: uint32(0x02020000), + 6: uint32(0x02000000), + 7: uint32(0x02020000), + 9: uint32(0x00020000), + 11: uint32(0x00020000), + 12: uint32(0x02000000), + 13: uint32(0x02020000), + 14: uint32(0x02000000), + 15: uint32(0x02020000), + }, + 3: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 4: uint32(0x00000200), + 5: uint32(0x00000202), + 6: uint32(0x00000200), + 7: uint32(0x00000202), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 12: uint32(0x00000200), + 13: uint32(0x00000202), + 14: uint32(0x00000200), + 15: uint32(0x00000202), + }, + 4: { + 1: uint32(0x00040000), + 3: uint32(0x00040000), + 4: uint32(0x04000000), + 5: uint32(0x04040000), + 6: uint32(0x04000000), + 7: uint32(0x04040000), + 9: uint32(0x00040000), + 11: uint32(0x00040000), + 12: uint32(0x04000000), + 13: uint32(0x04040000), + 14: uint32(0x04000000), + 15: uint32(0x04040000), + }, + 5: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 4: uint32(0x00000400), + 5: uint32(0x00000404), + 6: uint32(0x00000400), + 7: uint32(0x00000404), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 12: uint32(0x00000400), + 13: uint32(0x00000404), + 14: uint32(0x00000400), + 15: uint32(0x00000404), + }, + 6: { + 1: uint32(0x00080000), + 3: uint32(0x00080000), + 4: uint32(0x08000000), + 5: uint32(0x08080000), + 6: uint32(0x08000000), + 7: uint32(0x08080000), + 9: uint32(0x00080000), + 11: uint32(0x00080000), + 12: uint32(0x08000000), + 13: uint32(0x08080000), + 14: uint32(0x08000000), + 15: uint32(0x08080000), + }, + 7: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 4: uint32(0x00000800), + 5: uint32(0x00000808), + 6: uint32(0x00000800), + 7: uint32(0x00000808), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 12: uint32(0x00000800), + 13: uint32(0x00000808), + 14: uint32(0x00000800), + 15: uint32(0x00000808), + }, + 8: { + 1: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x10000000), + 5: uint32(0x10100000), + 6: uint32(0x10000000), + 7: uint32(0x10100000), + 9: uint32(0x00100000), + 11: uint32(0x00100000), + 12: uint32(0x10000000), + 13: uint32(0x10100000), + 14: uint32(0x10000000), + 15: uint32(0x10100000), + }, + 9: { + 1: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001010), + 6: uint32(0x00001000), + 7: uint32(0x00001010), + 9: uint32(0x00000010), + 11: uint32(0x00000010), + 12: uint32(0x00001000), + 13: uint32(0x00001010), + 14: uint32(0x00001000), + 15: uint32(0x00001010), + }, + 10: { + 1: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x20000000), + 5: uint32(0x20200000), + 6: uint32(0x20000000), + 7: uint32(0x20200000), + 9: uint32(0x00200000), + 11: uint32(0x00200000), + 12: uint32(0x20000000), + 13: uint32(0x20200000), + 14: uint32(0x20000000), + 15: uint32(0x20200000), + }, + 11: { + 1: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002020), + 6: uint32(0x00002000), + 7: uint32(0x00002020), + 9: uint32(0x00000020), + 11: uint32(0x00000020), + 12: uint32(0x00002000), + 13: uint32(0x00002020), + 14: uint32(0x00002000), + 15: uint32(0x00002020), + }, + 12: { + 1: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x40000000), + 5: uint32(0x40400000), + 6: uint32(0x40000000), + 7: uint32(0x40400000), + 9: uint32(0x00400000), + 11: uint32(0x00400000), + 12: uint32(0x40000000), + 13: uint32(0x40400000), + 14: uint32(0x40000000), + 15: uint32(0x40400000), + }, + 13: { + 1: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004040), + 6: uint32(0x00004000), + 7: uint32(0x00004040), + 9: uint32(0x00000040), + 11: uint32(0x00000040), + 12: uint32(0x00004000), + 13: uint32(0x00004040), + 14: uint32(0x00004000), + 15: uint32(0x00004040), + }, + 14: { + 1: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x80000000), + 5: uint32(0x80800000), + 6: uint32(0x80000000), + 7: uint32(0x80800000), + 9: uint32(0x00800000), + 11: uint32(0x00800000), + 12: uint32(0x80000000), + 13: uint32(0x80800000), + 14: uint32(0x80000000), + 15: uint32(0x80800000), + }, + 15: { + 1: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008080), + 6: uint32(0x00008000), + 7: uint32(0x00008080), + 9: uint32(0x00000080), + 11: uint32(0x00000080), + 12: uint32(0x00008000), + 13: uint32(0x00008080), + 14: uint32(0x00008000), + 15: uint32(0x00008080), + }, +} +var _ip_maskr = [16][16]Tuint32_t{ + 0: { + 2: uint32(0x00010000), + 3: uint32(0x00010000), + 6: uint32(0x00010000), + 7: uint32(0x00010000), + 8: uint32(0x01000000), + 9: uint32(0x01000000), + 10: uint32(0x01010000), + 11: uint32(0x01010000), + 12: uint32(0x01000000), + 13: uint32(0x01000000), + 14: uint32(0x01010000), + 15: uint32(0x01010000), + }, + 1: { + 2: uint32(0x00000001), + 3: uint32(0x00000001), + 6: uint32(0x00000001), + 7: uint32(0x00000001), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x00000101), + 11: uint32(0x00000101), + 12: uint32(0x00000100), + 13: uint32(0x00000100), + 14: uint32(0x00000101), + 15: uint32(0x00000101), + }, + 2: { + 2: uint32(0x00020000), + 3: uint32(0x00020000), + 6: uint32(0x00020000), + 7: uint32(0x00020000), + 8: uint32(0x02000000), + 9: uint32(0x02000000), + 10: uint32(0x02020000), + 11: uint32(0x02020000), + 12: uint32(0x02000000), + 13: uint32(0x02000000), + 14: uint32(0x02020000), + 15: uint32(0x02020000), + }, + 3: { + 2: uint32(0x00000002), + 3: uint32(0x00000002), + 6: uint32(0x00000002), + 7: uint32(0x00000002), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x00000202), + 11: uint32(0x00000202), + 12: uint32(0x00000200), + 13: uint32(0x00000200), + 14: uint32(0x00000202), + 15: uint32(0x00000202), + }, + 4: { + 2: uint32(0x00040000), + 3: uint32(0x00040000), + 6: uint32(0x00040000), + 7: uint32(0x00040000), + 8: uint32(0x04000000), + 9: uint32(0x04000000), + 10: uint32(0x04040000), + 11: uint32(0x04040000), + 12: uint32(0x04000000), + 13: uint32(0x04000000), + 14: uint32(0x04040000), + 15: uint32(0x04040000), + }, + 5: { + 2: uint32(0x00000004), + 3: uint32(0x00000004), + 6: uint32(0x00000004), + 7: uint32(0x00000004), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x00000404), + 11: uint32(0x00000404), + 12: uint32(0x00000400), + 13: uint32(0x00000400), + 14: uint32(0x00000404), + 15: uint32(0x00000404), + }, + 6: { + 2: uint32(0x00080000), + 3: uint32(0x00080000), + 6: uint32(0x00080000), + 7: uint32(0x00080000), + 8: uint32(0x08000000), + 9: uint32(0x08000000), + 10: uint32(0x08080000), + 11: uint32(0x08080000), + 12: uint32(0x08000000), + 13: uint32(0x08000000), + 14: uint32(0x08080000), + 15: uint32(0x08080000), + }, + 7: { + 2: uint32(0x00000008), + 3: uint32(0x00000008), + 6: uint32(0x00000008), + 7: uint32(0x00000008), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x00000808), + 11: uint32(0x00000808), + 12: uint32(0x00000800), + 13: uint32(0x00000800), + 14: uint32(0x00000808), + 15: uint32(0x00000808), + }, + 8: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 6: uint32(0x00100000), + 7: uint32(0x00100000), + 8: uint32(0x10000000), + 9: uint32(0x10000000), + 10: uint32(0x10100000), + 11: uint32(0x10100000), + 12: uint32(0x10000000), + 13: uint32(0x10000000), + 14: uint32(0x10100000), + 15: uint32(0x10100000), + }, + 9: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 6: uint32(0x00000010), + 7: uint32(0x00000010), + 8: uint32(0x00001000), + 9: uint32(0x00001000), + 10: uint32(0x00001010), + 11: uint32(0x00001010), + 12: uint32(0x00001000), + 13: uint32(0x00001000), + 14: uint32(0x00001010), + 15: uint32(0x00001010), + }, + 10: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 6: uint32(0x00200000), + 7: uint32(0x00200000), + 8: uint32(0x20000000), + 9: uint32(0x20000000), + 10: uint32(0x20200000), + 11: uint32(0x20200000), + 12: uint32(0x20000000), + 13: uint32(0x20000000), + 14: uint32(0x20200000), + 15: uint32(0x20200000), + }, + 11: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 6: uint32(0x00000020), + 7: uint32(0x00000020), + 8: uint32(0x00002000), + 9: uint32(0x00002000), + 10: uint32(0x00002020), + 11: uint32(0x00002020), + 12: uint32(0x00002000), + 13: uint32(0x00002000), + 14: uint32(0x00002020), + 15: uint32(0x00002020), + }, + 12: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 6: uint32(0x00400000), + 7: uint32(0x00400000), + 8: uint32(0x40000000), + 9: uint32(0x40000000), + 10: uint32(0x40400000), + 11: uint32(0x40400000), + 12: uint32(0x40000000), + 13: uint32(0x40000000), + 14: uint32(0x40400000), + 15: uint32(0x40400000), + }, + 13: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 6: uint32(0x00000040), + 7: uint32(0x00000040), + 8: uint32(0x00004000), + 9: uint32(0x00004000), + 10: uint32(0x00004040), + 11: uint32(0x00004040), + 12: uint32(0x00004000), + 13: uint32(0x00004000), + 14: uint32(0x00004040), + 15: uint32(0x00004040), + }, + 14: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 6: uint32(0x00800000), + 7: uint32(0x00800000), + 8: uint32(0x80000000), + 9: uint32(0x80000000), + 10: uint32(0x80800000), + 11: uint32(0x80800000), + 12: uint32(0x80000000), + 13: uint32(0x80000000), + 14: uint32(0x80800000), + 15: uint32(0x80800000), + }, + 15: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 6: uint32(0x00000080), + 7: uint32(0x00000080), + 8: uint32(0x00008000), + 9: uint32(0x00008000), + 10: uint32(0x00008080), + 11: uint32(0x00008080), + 12: uint32(0x00008000), + 13: uint32(0x00008000), + 14: uint32(0x00008080), + 15: uint32(0x00008080), + }, +} +var _fp_maskl = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _fp_maskr = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _key_perm_maskl = [8][16]Tuint32_t{ + 0: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00001010), + 7: uint32(0x00001010), + 8: uint32(0x00100000), + 9: uint32(0x00100000), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00101000), + 13: uint32(0x00101000), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 1: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002020), + 7: uint32(0x00002020), + 8: uint32(0x00200000), + 9: uint32(0x00200000), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00202000), + 13: uint32(0x00202000), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 2: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00004040), + 7: uint32(0x00004040), + 8: uint32(0x00400000), + 9: uint32(0x00400000), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00404000), + 13: uint32(0x00404000), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 3: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00008080), + 7: uint32(0x00008080), + 8: uint32(0x00800000), + 9: uint32(0x00800000), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00808000), + 13: uint32(0x00808000), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 4: { + 1: uint32(0x00000001), + 2: uint32(0x00000100), + 3: uint32(0x00000101), + 4: uint32(0x00010000), + 5: uint32(0x00010001), + 6: uint32(0x00010100), + 7: uint32(0x00010101), + 8: uint32(0x01000000), + 9: uint32(0x01000001), + 10: uint32(0x01000100), + 11: uint32(0x01000101), + 12: uint32(0x01010000), + 13: uint32(0x01010001), + 14: uint32(0x01010100), + 15: uint32(0x01010101), + }, + 5: { + 1: uint32(0x00000002), + 2: uint32(0x00000200), + 3: uint32(0x00000202), + 4: uint32(0x00020000), + 5: uint32(0x00020002), + 6: uint32(0x00020200), + 7: uint32(0x00020202), + 8: uint32(0x02000000), + 9: uint32(0x02000002), + 10: uint32(0x02000200), + 11: uint32(0x02000202), + 12: uint32(0x02020000), + 13: uint32(0x02020002), + 14: uint32(0x02020200), + 15: uint32(0x02020202), + }, + 6: { + 1: uint32(0x00000004), + 2: uint32(0x00000400), + 3: uint32(0x00000404), + 4: uint32(0x00040000), + 5: uint32(0x00040004), + 6: uint32(0x00040400), + 7: uint32(0x00040404), + 8: uint32(0x04000000), + 9: uint32(0x04000004), + 10: uint32(0x04000400), + 11: uint32(0x04000404), + 12: uint32(0x04040000), + 13: uint32(0x04040004), + 14: uint32(0x04040400), + 15: uint32(0x04040404), + }, + 7: { + 1: uint32(0x00000008), + 2: uint32(0x00000800), + 3: uint32(0x00000808), + 4: uint32(0x00080000), + 5: uint32(0x00080008), + 6: uint32(0x00080800), + 7: uint32(0x00080808), + 8: uint32(0x08000000), + 9: uint32(0x08000008), + 10: uint32(0x08000800), + 11: uint32(0x08000808), + 12: uint32(0x08080000), + 13: uint32(0x08080008), + 14: uint32(0x08080800), + 15: uint32(0x08080808), + }, +} +var _key_perm_maskr = [12][16]Tuint32_t{ + 0: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 5: uint32(0x00000001), + 7: uint32(0x00000001), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 13: uint32(0x00000001), + 15: uint32(0x00000001), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00101000), + 7: uint32(0x00101000), + 8: uint32(0x00000010), + 9: uint32(0x00000010), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00001010), + 13: uint32(0x00001010), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 2: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 5: uint32(0x00000002), + 7: uint32(0x00000002), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 13: uint32(0x00000002), + 15: uint32(0x00000002), + }, + 3: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00202000), + 7: uint32(0x00202000), + 8: uint32(0x00000020), + 9: uint32(0x00000020), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00002020), + 13: uint32(0x00002020), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 4: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 5: uint32(0x00000004), + 7: uint32(0x00000004), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 13: uint32(0x00000004), + 15: uint32(0x00000004), + }, + 5: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00404000), + 7: uint32(0x00404000), + 8: uint32(0x00000040), + 9: uint32(0x00000040), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00004040), + 13: uint32(0x00004040), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 6: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 5: uint32(0x00000008), + 7: uint32(0x00000008), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 13: uint32(0x00000008), + 15: uint32(0x00000008), + }, + 7: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00808000), + 7: uint32(0x00808000), + 8: uint32(0x00000080), + 9: uint32(0x00000080), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00008080), + 13: uint32(0x00008080), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 8: { + 2: uint32(0x01000000), + 3: uint32(0x01000000), + 4: uint32(0x00010000), + 5: uint32(0x00010000), + 6: uint32(0x01010000), + 7: uint32(0x01010000), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x01000100), + 11: uint32(0x01000100), + 12: uint32(0x00010100), + 13: uint32(0x00010100), + 14: uint32(0x01010100), + 15: uint32(0x01010100), + }, + 9: { + 2: uint32(0x02000000), + 3: uint32(0x02000000), + 4: uint32(0x00020000), + 5: uint32(0x00020000), + 6: uint32(0x02020000), + 7: uint32(0x02020000), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x02000200), + 11: uint32(0x02000200), + 12: uint32(0x00020200), + 13: uint32(0x00020200), + 14: uint32(0x02020200), + 15: uint32(0x02020200), + }, + 10: { + 2: uint32(0x04000000), + 3: uint32(0x04000000), + 4: uint32(0x00040000), + 5: uint32(0x00040000), + 6: uint32(0x04040000), + 7: uint32(0x04040000), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x04000400), + 11: uint32(0x04000400), + 12: uint32(0x00040400), + 13: uint32(0x00040400), + 14: uint32(0x04040400), + 15: uint32(0x04040400), + }, + 11: { + 2: uint32(0x08000000), + 3: uint32(0x08000000), + 4: uint32(0x00080000), + 5: uint32(0x00080000), + 6: uint32(0x08080000), + 7: uint32(0x08080000), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x08000800), + 11: uint32(0x08000800), + 12: uint32(0x00080800), + 13: uint32(0x00080800), + 14: uint32(0x08080800), + 15: uint32(0x08080800), + }, +} +var _comp_maskl0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00020000), + 2: uint32(0x00000001), + 3: uint32(0x00020001), + 4: uint32(0x00080000), + 5: uint32(0x000a0000), + 6: uint32(0x00080001), + 7: uint32(0x000a0001), + }, + 1: { + 1: uint32(0x00001000), + 3: uint32(0x00001000), + 4: uint32(0x00000040), + 5: uint32(0x00001040), + 6: uint32(0x00000040), + 7: uint32(0x00001040), + }, + 2: { + 1: uint32(0x00400000), + 2: uint32(0x00000020), + 3: uint32(0x00400020), + 4: uint32(0x00008000), + 5: uint32(0x00408000), + 6: uint32(0x00008020), + 7: uint32(0x00408020), + }, + 3: { + 1: uint32(0x00100000), + 2: uint32(0x00000800), + 3: uint32(0x00100800), + 5: uint32(0x00100000), + 6: uint32(0x00000800), + 7: uint32(0x00100800), + }, +} +var _comp_maskr0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00200000), + 2: uint32(0x00020000), + 3: uint32(0x00220000), + 4: uint32(0x00000002), + 5: uint32(0x00200002), + 6: uint32(0x00020002), + 7: uint32(0x00220002), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00000004), + 5: uint32(0x00000004), + 6: uint32(0x00100004), + 7: uint32(0x00100004), + }, + 2: { + 1: uint32(0x00004000), + 2: uint32(0x00000800), + 3: uint32(0x00004800), + 5: uint32(0x00004000), + 6: uint32(0x00000800), + 7: uint32(0x00004800), + }, + 3: { + 1: uint32(0x00400000), + 2: uint32(0x00008000), + 3: uint32(0x00408000), + 4: uint32(0x00000008), + 5: uint32(0x00400008), + 6: uint32(0x00008008), + 7: uint32(0x00408008), + }, +} +var _comp_maskl1 = [4][16]Tuint32_t{ + 0: { + 1: uint32(0x00000010), + 2: uint32(0x00004000), + 3: uint32(0x00004010), + 4: uint32(0x00040000), + 5: uint32(0x00040010), + 6: uint32(0x00044000), + 7: uint32(0x00044010), + 8: uint32(0x00000100), + 9: uint32(0x00000110), + 10: uint32(0x00004100), + 11: uint32(0x00004110), + 12: uint32(0x00040100), + 13: uint32(0x00040110), + 14: uint32(0x00044100), + 15: uint32(0x00044110), + }, + 1: { + 1: uint32(0x00800000), + 2: uint32(0x00000002), + 3: uint32(0x00800002), + 4: uint32(0x00000200), + 5: uint32(0x00800200), + 6: uint32(0x00000202), + 7: uint32(0x00800202), + 8: uint32(0x00200000), + 9: uint32(0x00a00000), + 10: uint32(0x00200002), + 11: uint32(0x00a00002), + 12: uint32(0x00200200), + 13: uint32(0x00a00200), + 14: uint32(0x00200202), + 15: uint32(0x00a00202), + }, + 2: { + 1: uint32(0x00002000), + 2: uint32(0x00000004), + 3: uint32(0x00002004), + 4: uint32(0x00000400), + 5: uint32(0x00002400), + 6: uint32(0x00000404), + 7: uint32(0x00002404), + 9: uint32(0x00002000), + 10: uint32(0x00000004), + 11: uint32(0x00002004), + 12: uint32(0x00000400), + 13: uint32(0x00002400), + 14: uint32(0x00000404), + 15: uint32(0x00002404), + }, + 3: { + 1: uint32(0x00010000), + 2: uint32(0x00000008), + 3: uint32(0x00010008), + 4: uint32(0x00000080), + 5: uint32(0x00010080), + 6: uint32(0x00000088), + 7: uint32(0x00010088), + 9: uint32(0x00010000), + 10: uint32(0x00000008), + 11: uint32(0x00010008), + 12: uint32(0x00000080), + 13: uint32(0x00010080), + 14: uint32(0x00000088), + 15: uint32(0x00010088), + }, +} +var _comp_maskr1 = [4][16]Tuint32_t{ + 0: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002080), + 7: uint32(0x00002080), + 8: uint32(0x00000001), + 9: uint32(0x00000001), + 10: uint32(0x00000081), + 11: uint32(0x00000081), + 12: uint32(0x00002001), + 13: uint32(0x00002001), + 14: uint32(0x00002081), + 15: uint32(0x00002081), + }, + 1: { + 1: uint32(0x00000010), + 2: uint32(0x00800000), + 3: uint32(0x00800010), + 4: uint32(0x00010000), + 5: uint32(0x00010010), + 6: uint32(0x00810000), + 7: uint32(0x00810010), + 8: uint32(0x00000200), + 9: uint32(0x00000210), + 10: uint32(0x00800200), + 11: uint32(0x00800210), + 12: uint32(0x00010200), + 13: uint32(0x00010210), + 14: uint32(0x00810200), + 15: uint32(0x00810210), + }, + 2: { + 1: uint32(0x00000400), + 2: uint32(0x00001000), + 3: uint32(0x00001400), + 4: uint32(0x00080000), + 5: uint32(0x00080400), + 6: uint32(0x00081000), + 7: uint32(0x00081400), + 8: uint32(0x00000020), + 9: uint32(0x00000420), + 10: uint32(0x00001020), + 11: uint32(0x00001420), + 12: uint32(0x00080020), + 13: uint32(0x00080420), + 14: uint32(0x00081020), + 15: uint32(0x00081420), + }, + 3: { + 1: uint32(0x00000100), + 2: uint32(0x00040000), + 3: uint32(0x00040100), + 5: uint32(0x00000100), + 6: uint32(0x00040000), + 7: uint32(0x00040100), + 8: uint32(0x00000040), + 9: uint32(0x00000140), + 10: uint32(0x00040040), + 11: uint32(0x00040140), + 12: uint32(0x00000040), + 13: uint32(0x00000140), + 14: uint32(0x00040040), + 15: uint32(0x00040140), + }, +} + +var _ascii64 = [65]uint8{'.', '/', '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', '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'} + +/* 0000000000111111111122222222223333333333444444444455555555556666 */ +/* 0123456789012345678901234567890123456789012345678901234567890123 */ + +// C documentation +// +// /* +// * We match the behavior of UFC-crypt on systems where "char" is signed by +// * default (the majority), regardless of char's signedness on our system. +// */ +func _ascii_to_bin(tls *TLS, ch int32) (r Tuint32_t) { + var retval, sch, v1 int32 + _, _, _ = retval, sch, v1 + if ch < int32(0x80) { + v1 = ch + } else { + v1 = -(int32(0x100) - ch) + } + sch = v1 + retval = sch - int32('.') + if sch >= int32('A') { + retval = sch - (Int32FromUint8('A') - Int32FromInt32(12)) + if sch >= int32('a') { + retval = sch - (Int32FromUint8('a') - Int32FromInt32(38)) + } + } + retval &= int32(0x3f) + return uint32(retval) +} + +// C documentation +// +// /* +// * When we choose to "support" invalid salts, nevertheless disallow those +// * containing characters that would violate the passwd file format. +// */ +func _ascii_is_unsafe(tls *TLS, ch uint8) (r int32) { + return BoolInt32(!(ch != 0) || int32(ch) == int32('\n') || int32(ch) == int32(':')) +} + +func _setup_salt(tls *TLS, salt Tuint32_t) (r Tuint32_t) { + var i uint32 + var obit, saltbit, saltbits Tuint32_t + _, _, _, _ = i, obit, saltbit, saltbits + saltbits = uint32(0) + saltbit = uint32(1) + obit = uint32(0x800000) + i = uint32(0) + for { + if !(i < uint32(24)) { + break + } + if salt&saltbit != 0 { + saltbits |= obit + } + saltbit <<= uint32(1) + obit >>= uint32(1) + goto _1 + _1: + ; + i++ + } + return saltbits +} + +func X__des_setkey(tls *TLS, key uintptr, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v ekey=%v, (%v:)", tls, key, ekey, origin(2)) + } + var i, ibit, j, round, shifts uint32 + var k0, k1, kl, kr, rawkey0, rawkey1, t0, t1, v1, v4 Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ibit, j, k0, k1, kl, kr, rawkey0, rawkey1, round, shifts, t0, t1, v1, v4 + rawkey0 = uint32(*(*uint8)(unsafe.Pointer(key + 3))) | uint32(*(*uint8)(unsafe.Pointer(key + 2)))<>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskl)) + uintptr(i+uint32(4))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j)*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) + ibit -= uint32(4) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j+uint32(1))*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(i+uint32(8))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + /* + * Rotate subkeys and do compression permutation. + */ + shifts = uint32(0) + round = uint32(0) + for { + if !(round < uint32(16)) { + break + } + shifts += uint32(_key_shifts[round]) + t0 = k0<>(Uint32FromInt32(28)-shifts) + t1 = k1<>(Uint32FromInt32(28)-shifts) + v4 = Uint32FromInt32(0) + kr = v4 + kl = v4 + ibit = uint32(25) + i = uint32(0) + for { + if !(i < uint32(4)) { + break + } + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl0)) + uintptr(i)*32 + uintptr(t0>>ibit&uint32(7))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr0)) + uintptr(i)*32 + uintptr(t1>>ibit&uint32(7))*4)) + ibit -= uint32(4) + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl1)) + uintptr(i)*64 + uintptr(t0>>ibit&uint32(0xf))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr1)) + uintptr(i)*64 + uintptr(t1>>ibit&uint32(0xf))*4)) + ibit -= uint32(3) + goto _5 + _5: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(ekey + uintptr(round)*4)) = kl + *(*Tuint32_t)(unsafe.Pointer(ekey + 64 + uintptr(round)*4)) = kr + goto _3 + _3: + ; + round++ + } +} + +// C documentation +// +// /* +// * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format. +// */ +func X__do_des(tls *TLS, l_in Tuint32_t, r_in Tuint32_t, l_out uintptr, r_out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v l_in=%v r_in=%v l_out=%v r_out=%v count=%v saltbits=%v ekey=%v, (%v:)", tls, l_in, r_in, l_out, r_out, count, saltbits, ekey, origin(2)) + } + var f, l, lo, r, r48l, r48r, ro, v1, v3, v7 Tuint32_t + var i, i1, ibit, ibit1, round, v4 uint32 + var kl, kr, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, i1, ibit, ibit1, kl, kr, l, lo, r, r48l, r48r, ro, round, v1, v3, v4, v5, v6, v7 + /* + * Do initial permutation (IP). + */ + v1 = Uint32FromInt32(0) + r = v1 + l = v1 + if l_in|r_in != 0 { + i = uint32(0) + ibit = Uint32FromInt32(28) + for { + if !(i < uint32(8)) { + break + } + l |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + r |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + } + for { + v3 = count + count-- + if !(v3 != 0) { + break + } + /* + * Do each round. + */ + round = uint32(16) + kl = ekey + kr = ekey + 64 + for { + v4 = round + round-- + if !(v4 != 0) { + break + } + /* + * Expand R to 48 bits (simulate the E-box). + */ + r48l = r&uint32(0x00000001)<>int32(9) | r&uint32(0x1f800000)>>int32(11) | r&uint32(0x01f80000)>>int32(13) | r&uint32(0x001f8000)>>int32(15) + r48r = r&uint32(0x0001f800)<>int32(31) + /* + * Do salting for crypt() and friends, and + * XOR with the permuted key. + */ + f = (r48l ^ r48r) & saltbits + v5 = kl + kl += 4 + r48l ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v5)) + v6 = kr + kr += 4 + r48r ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v6)) + /* + * Do S-box lookups (which shrink it back to 32 bits) + * and do the P-box permutation at the same time. + */ + f = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + uintptr(r48l>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 1*256 + uintptr(r48l>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 2*256 + uintptr(r48l>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 3*256 + uintptr(r48l&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 4*256 + uintptr(r48r>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 5*256 + uintptr(r48r>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 6*256 + uintptr(r48r>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 7*256 + uintptr(r48r&uint32(0x3f))*4)) + /* + * Now that we've permuted things, complete f(). + */ + f ^= l + l = r + r = f + } + r = l + l = f + } + /* + * Do final permutation (inverse of IP). + */ + v7 = Uint32FromInt32(0) + ro = v7 + lo = v7 + i1 = uint32(0) + ibit1 = Uint32FromInt32(28) + for { + if !(i1 < uint32(4)) { + break + } + ro |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + ibit1 -= uint32(4) + lo |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + goto _8 + _8: + ; + i1++ + ibit1 -= uint32(4) + } + *(*Tuint32_t)(unsafe.Pointer(l_out)) = lo + *(*Tuint32_t)(unsafe.Pointer(r_out)) = ro +} + +func _des_cipher(tls *TLS, in uintptr, out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rawl, rawr Tuint32_t + var _ /* l_out at bp+0 */ Tuint32_t + var _ /* r_out at bp+4 */ Tuint32_t + _, _ = rawl, rawr + rawl = uint32(*(*uint8)(unsafe.Pointer(in + 3))) | uint32(*(*uint8)(unsafe.Pointer(in + 2)))<> int32(24)) + *(*uint8)(unsafe.Pointer(out + 1)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 2)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 3)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp))) + *(*uint8)(unsafe.Pointer(out + 4)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(24)) + *(*uint8)(unsafe.Pointer(out + 5)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 6)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 7)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4))) +} + +func __crypt_extended_r_uut(tls *TLS, _key uintptr, _setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(144) + defer tls.Free(144) + var count, l, salt, value, value1 Tuint32_t + var i uint32 + var key, p, q, setting, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 uintptr + var _ /* ekey at bp+0 */ Texpanded_key + var _ /* keybuf at bp+128 */ [8]uint8 + var _ /* r0 at bp+136 */ Tuint32_t + var _ /* r1 at bp+140 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = count, i, key, l, p, q, salt, setting, value, value1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 + key = _key + setting = _setting + /* + * Copy the key, shifting each character left by one bit and padding + * with zeroes. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint32FromInt64(8)-Uint32FromInt32(1)) { + v1 = q + q++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(int32(*(*uint8)(unsafe.Pointer(key))) << int32(1)) + if *(*uint8)(unsafe.Pointer(key)) != 0 { + key++ + } + } + X__des_setkey(tls, bp+128, bp) + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('_') { + /* + * "new"-style: + * setting - underscore, 4 chars of count, 4 chars of salt + * key - unlimited characters + */ + i = uint32(1) + count = Uint32FromInt32(0) + for { + if !(i < uint32(5)) { + break + } + value = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + count |= value << ((i - uint32(1)) * uint32(6)) + goto _2 + _2: + ; + i++ + } + if !(count != 0) { + return UintptrFromInt32(0) + } + i = uint32(5) + salt = Uint32FromInt32(0) + for { + if !(i < uint32(9)) { + break + } + value1 = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value1]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + salt |= value1 << ((i - uint32(5)) * uint32(6)) + goto _3 + _3: + ; + i++ + } + for *(*uint8)(unsafe.Pointer(key)) != 0 { + /* + * Encrypt the key with itself. + */ + _des_cipher(tls, bp+128, bp+128, uint32(1), uint32(0), bp) + /* + * And XOR with the next 8 characters of the key. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint32FromInt64(8)-Uint32FromInt32(1)) && *(*uint8)(unsafe.Pointer(key)) != 0 { + v5 = q + q++ + p4 = v5 + v6 = key + key++ + *(*uint8)(unsafe.Pointer(p4)) = uint8(int32(*(*uint8)(unsafe.Pointer(p4))) ^ int32(*(*uint8)(unsafe.Pointer(v6)))<> int32(8) + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v7)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v10 = p + p++ + *(*uint8)(unsafe.Pointer(v10)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 136))<>Int32FromInt32(16)&uint32(0xffff) + v11 = p + p++ + *(*uint8)(unsafe.Pointer(v11)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v12 = p + p++ + *(*uint8)(unsafe.Pointer(v12)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v13 = p + p++ + *(*uint8)(unsafe.Pointer(v13)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v14 = p + p++ + *(*uint8)(unsafe.Pointer(v14)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 140)) << int32(2) + v15 = p + p++ + *(*uint8)(unsafe.Pointer(v15)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v16 = p + p++ + *(*uint8)(unsafe.Pointer(v16)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v17 = p + p++ + *(*uint8)(unsafe.Pointer(v17)) = _ascii64[l&uint32(0x3f)] + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return output +} + +func X__crypt_des(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var p, retval, test_hash, test_key, test_setting, v1 uintptr + var _ /* test_buf at bp+0 */ [21]int8 + _, _, _, _, _, _ = p, retval, test_hash, test_key, test_setting, v1 + test_key = __ccgo_ts + 72 + test_setting = __ccgo_ts + 93 + test_hash = __ccgo_ts + 103 + if int32(*(*int8)(unsafe.Pointer(setting))) != int32('_') { + test_setting = __ccgo_ts + 124 + test_hash = __ccgo_ts + 127 + } + /* + * Hash the supplied password. + */ + retval = __crypt_extended_r_uut(tls, key, setting, output) + /* + * Perform a quick self-test. It is important that we make both calls + * to _crypt_extended_r_uut() from the same scope such that they likely + * use the same stack locations, which makes the second call overwrite + * the first call's sensitive data on the stack and makes it more + * likely that any alignment related issues would be detected. + */ + p = __crypt_extended_r_uut(tls, test_key, test_setting, bp) + if p != 0 && !(Xstrcmp(tls, p, test_hash) != 0) && retval != 0 { + return retval + } + if int32(*(*int8)(unsafe.Pointer(setting))) == int32('*') { + v1 = __ccgo_ts + 141 + } else { + v1 = __ccgo_ts + 70 + } + return v1 +} + +const KEY_MAX = 30000 +const SALT_MAX = 8 + +/* public domain md5 implementation based on rfc1321 and libtomcrypt */ + +type Tmd5 = struct { + Flen1 Tuint64_t + Fh [4]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _rol(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n<>(Int32FromInt32(32)-k) +} + +var _tab = [64]Tuint32_t{ + 0: uint32(0xd76aa478), + 1: uint32(0xe8c7b756), + 2: uint32(0x242070db), + 3: uint32(0xc1bdceee), + 4: uint32(0xf57c0faf), + 5: uint32(0x4787c62a), + 6: uint32(0xa8304613), + 7: uint32(0xfd469501), + 8: uint32(0x698098d8), + 9: uint32(0x8b44f7af), + 10: uint32(0xffff5bb1), + 11: uint32(0x895cd7be), + 12: uint32(0x6b901122), + 13: uint32(0xfd987193), + 14: uint32(0xa679438e), + 15: uint32(0x49b40821), + 16: uint32(0xf61e2562), + 17: uint32(0xc040b340), + 18: uint32(0x265e5a51), + 19: uint32(0xe9b6c7aa), + 20: uint32(0xd62f105d), + 21: uint32(0x02441453), + 22: uint32(0xd8a1e681), + 23: uint32(0xe7d3fbc8), + 24: uint32(0x21e1cde6), + 25: uint32(0xc33707d6), + 26: uint32(0xf4d50d87), + 27: uint32(0x455a14ed), + 28: uint32(0xa9e3e905), + 29: uint32(0xfcefa3f8), + 30: uint32(0x676f02d9), + 31: uint32(0x8d2a4c8a), + 32: uint32(0xfffa3942), + 33: uint32(0x8771f681), + 34: uint32(0x6d9d6122), + 35: uint32(0xfde5380c), + 36: uint32(0xa4beea44), + 37: uint32(0x4bdecfa9), + 38: uint32(0xf6bb4b60), + 39: uint32(0xbebfbc70), + 40: uint32(0x289b7ec6), + 41: uint32(0xeaa127fa), + 42: uint32(0xd4ef3085), + 43: uint32(0x04881d05), + 44: uint32(0xd9d4d039), + 45: uint32(0xe6db99e5), + 46: uint32(0x1fa27cf8), + 47: uint32(0xc4ac5665), + 48: uint32(0xf4292244), + 49: uint32(0x432aff97), + 50: uint32(0xab9423a7), + 51: uint32(0xfc93a039), + 52: uint32(0x655b59c3), + 53: uint32(0x8f0ccc92), + 54: uint32(0xffeff47d), + 55: uint32(0x85845dd1), + 56: uint32(0x6fa87e4f), + 57: uint32(0xfe2ce6e0), + 58: uint32(0xa3014314), + 59: uint32(0x4e0811a1), + 60: uint32(0xf7537e82), + 61: uint32(0xbd3af235), + 62: uint32(0x2ad7d2bb), + 63: uint32(0xeb86d391), +} + +func _processblock(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, b, c, d, i Tuint32_t + var _ /* W at bp+0 */ [16]Tuint32_t + _, _, _, _, _ = a, b, c, d, i + i = uint32(0) + for { + if !(i < uint32(16)) { + break + } + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i)))) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(1))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(2))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(3))))) << int32(24) + goto _1 + _1: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + i = uint32(0) + for i < uint32(16) { + a += d ^ b&(c^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + a = _rol(tls, a, int32(7)) + b + i++ + d += c ^ a&(b^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + d = _rol(tls, d, int32(12)) + a + i++ + c += b ^ d&(a^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + c = _rol(tls, c, int32(17)) + d + i++ + b += a ^ c&(d^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + b = _rol(tls, b, int32(22)) + c + i++ + } + for i < uint32(32) { + a += c ^ d&(c^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(5)) + b + i++ + d += b ^ c&(b^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(9)) + a + i++ + c += a ^ b&(a^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(14)) + d + i++ + b += d ^ a&(d^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(20)) + c + i++ + } + for i < uint32(48) { + a += b ^ c ^ d + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(4)) + b + i++ + d += a ^ b ^ c + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(11)) + a + i++ + c += d ^ a ^ b + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(16)) + d + i++ + b += c ^ d ^ a + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(23)) + c + i++ + } + for i < uint32(64) { + a += c ^ (b | ^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(6)) + b + i++ + d += b ^ (a | ^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(10)) + a + i++ + c += a ^ (d | ^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(15)) + d + i++ + b += d ^ (c | ^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(21)) + c + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d +} + +func _pad(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 24 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+24+uintptr(r), 0, uint32(64)-r) + r = uint32(0) + _processblock(tls, s, s+24) + } + Xmemset(tls, s+24+uintptr(r), 0, uint32(56)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 56)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 57)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 58)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 59)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 60)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 61)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 62)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 63)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(56)) + _processblock(tls, s, s+24) +} + +func _md5_init(tls *TLS, s uintptr) { + (*Tmd5)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x67452301) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xefcdab89) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x98badcfe) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0x10325476) +} + +func _md5_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad(tls, s) + i = 0 + for { + if !(i < int32(4)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + goto _1 + _1: + ; + i++ + } +} + +func _md5_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(64)-r { + Xmemcpy(tls, s+24+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+24+uintptr(r), p, uint32(64)-r) + len1 -= uint32(64) - r + p += uintptr(uint32(64) - r) + _processblock(tls, s, s+24) + } + for { + if !(len1 >= uint32(64)) { + break + } + _processblock(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(64) + p += uintptr(64) + } + Xmemcpy(tls, s+24, p, len1) +} + +/*- + * Copyright (c) 2003 Poul-Henning Kamp + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* key limit is not part of the original design, added for DoS protection */ + +var _b64 = [65]uint8{'.', '/', '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', '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'} + +func _to64(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = int8(_b64[u%uint32(64)]) + u /= uint32(64) + } + return s +} + +func _md5crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(112) + defer tls.Free(112) + var i, klen, slen uint32 + var p, salt, v5 uintptr + var _ /* ctx at bp+0 */ Tmd5 + var _ /* md at bp+88 */ [16]uint8 + _, _, _, _, _, _ = i, klen, p, salt, slen, v5 + /* reject large keys */ + klen = Xstrnlen(tls, key, uint32(Int32FromInt32(KEY_MAX)+Int32FromInt32(1))) + if klen > uint32(KEY_MAX) { + return uintptr(0) + } + /* setting: $1$salt$ (closing $ is optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+143, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + i = uint32(0) + for { + if !(i < uint32(SALT_MAX) && *(*int8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + goto _1 + _1: + ; + i++ + } + slen = i + /* md5(key salt key) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, klen) + _md5_update(tls, bp, salt, slen) + _md5_update(tls, bp, key, klen) + _md5_sum(tls, bp, bp+88) + /* md5(key $1$ salt repeated-md weird-key[0]-0) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, klen) + _md5_update(tls, bp, setting, uint32(3)+slen) + i = klen + for { + if !(i > uint32(16)) { + break + } + _md5_update(tls, bp, bp+88, uint32(16)) + goto _2 + _2: + ; + i -= uint32(16) + } + _md5_update(tls, bp, bp+88, i) + (*(*[16]uint8)(unsafe.Pointer(bp + 88)))[0] = uint8(0) + i = klen + for { + if !(i != 0) { + break + } + if i&uint32(1) != 0 { + _md5_update(tls, bp, bp+88, uint32(1)) + } else { + _md5_update(tls, bp, key, uint32(1)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _md5_sum(tls, bp, bp+88) + /* md = f(md, key, salt) iteration */ + i = uint32(0) + for { + if !(i < uint32(1000)) { + break + } + _md5_init(tls, bp) + if i%uint32(2) != 0 { + _md5_update(tls, bp, key, klen) + } else { + _md5_update(tls, bp, bp+88, uint32(16)) + } + if i%uint32(3) != 0 { + _md5_update(tls, bp, salt, slen) + } + if i%uint32(7) != 0 { + _md5_update(tls, bp, key, klen) + } + if i%uint32(2) != 0 { + _md5_update(tls, bp, bp+88, uint32(16)) + } else { + _md5_update(tls, bp, key, klen) + } + _md5_sum(tls, bp, bp+88) + goto _4 + _4: + ; + i++ + } + /* output is $1$salt$hash */ + Xmemcpy(tls, output, setting, uint32(3)+slen) + p = output + uintptr(3) + uintptr(slen) + v5 = p + p++ + *(*int8)(unsafe.Pointer(v5)) = int8('$') + i = uint32(0) + for { + if !(i < uint32(5)) { + break + } + p = _to64(tls, p, uint32(int32((*(*[16]uint8)(unsafe.Pointer(bp + 88)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var p, q uintptr + var _ /* testbuf at bp+0 */ [64]int8 + _, _ = p, q + p = _md5crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _md5crypt(tls, uintptr(unsafe.Pointer(&_testkey)), uintptr(unsafe.Pointer(&_testsetting)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash)), uint32(35)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey = [18]int8{'X', 'y', '0', '1', '@', '#', 1, 2, -128, 127, -1, 13, 10, -127, 9, ' ', '!'} + +var _testsetting = [13]int8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$'} + +var _testhash = [35]int8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$', '9', 'Q', 'c', 'g', '8', 'D', 'y', 'v', 'i', 'e', 'k', 'V', '3', 't', 'D', 'G', 'M', 'Z', 'y', 'n', 'J', '1'} + +func X__crypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + var output uintptr + _ = output + /* Per the crypt_r API, the caller has provided a pointer to + * struct crypt_data; however, this implementation does not + * use the structure to store any internal state, and treats + * it purely as a char buffer for storing the result. */ + output = data + if int32(*(*int8)(unsafe.Pointer(salt))) == int32('$') && *(*int8)(unsafe.Pointer(salt + 1)) != 0 && *(*int8)(unsafe.Pointer(salt + 2)) != 0 { + if int32(*(*int8)(unsafe.Pointer(salt + 1))) == int32('1') && int32(*(*int8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_md5(tls, key, salt, output) + } + if int32(*(*int8)(unsafe.Pointer(salt + 1))) == int32('2') && int32(*(*int8)(unsafe.Pointer(salt + 3))) == int32('$') { + return X__crypt_blowfish(tls, key, salt, output) + } + if int32(*(*int8)(unsafe.Pointer(salt + 1))) == int32('5') && int32(*(*int8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha256(tls, key, salt, output) + } + if int32(*(*int8)(unsafe.Pointer(salt + 1))) == int32('6') && int32(*(*int8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha512(tls, key, salt, output) + } + } + return X__crypt_des(tls, key, salt, output) +} + +func Xcrypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, data) +} + +const KEY_MAX1 = 256 +const ROUNDS_DEFAULT = 5000 +const ROUNDS_MAX = 9999999 +const ROUNDS_MIN = 1000 +const SALT_MAX1 = 16 + +/* public domain sha256 implementation based on fips180-3 */ + +type Tsha256 = struct { + Flen1 Tuint64_t + Fh [8]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _ror(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n>>k | n<<(Int32FromInt32(32)-k) +} + +var _K = [64]Tuint32_t{ + 0: uint32(0x428a2f98), + 1: uint32(0x71374491), + 2: uint32(0xb5c0fbcf), + 3: uint32(0xe9b5dba5), + 4: uint32(0x3956c25b), + 5: uint32(0x59f111f1), + 6: uint32(0x923f82a4), + 7: uint32(0xab1c5ed5), + 8: uint32(0xd807aa98), + 9: uint32(0x12835b01), + 10: uint32(0x243185be), + 11: uint32(0x550c7dc3), + 12: uint32(0x72be5d74), + 13: uint32(0x80deb1fe), + 14: uint32(0x9bdc06a7), + 15: uint32(0xc19bf174), + 16: uint32(0xe49b69c1), + 17: uint32(0xefbe4786), + 18: uint32(0x0fc19dc6), + 19: uint32(0x240ca1cc), + 20: uint32(0x2de92c6f), + 21: uint32(0x4a7484aa), + 22: uint32(0x5cb0a9dc), + 23: uint32(0x76f988da), + 24: uint32(0x983e5152), + 25: uint32(0xa831c66d), + 26: uint32(0xb00327c8), + 27: uint32(0xbf597fc7), + 28: uint32(0xc6e00bf3), + 29: uint32(0xd5a79147), + 30: uint32(0x06ca6351), + 31: uint32(0x14292967), + 32: uint32(0x27b70a85), + 33: uint32(0x2e1b2138), + 34: uint32(0x4d2c6dfc), + 35: uint32(0x53380d13), + 36: uint32(0x650a7354), + 37: uint32(0x766a0abb), + 38: uint32(0x81c2c92e), + 39: uint32(0x92722c85), + 40: uint32(0xa2bfe8a1), + 41: uint32(0xa81a664b), + 42: uint32(0xc24b8b70), + 43: uint32(0xc76c51a3), + 44: uint32(0xd192e819), + 45: uint32(0xd6990624), + 46: uint32(0xf40e3585), + 47: uint32(0x106aa070), + 48: uint32(0x19a4c116), + 49: uint32(0x1e376c08), + 50: uint32(0x2748774c), + 51: uint32(0x34b0bcb5), + 52: uint32(0x391c0cb3), + 53: uint32(0x4ed8aa4a), + 54: uint32(0x5b9cca4f), + 55: uint32(0x682e6ff3), + 56: uint32(0x748f82ee), + 57: uint32(0x78a5636f), + 58: uint32(0x84c87814), + 59: uint32(0x8cc70208), + 60: uint32(0x90befffa), + 61: uint32(0xa4506ceb), + 62: uint32(0xbef9a3f7), + 63: uint32(0xc67178f2), +} + +func _processblock1(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var a, b, c, d, e, f, g, h, t1, t2 Tuint32_t + var i int32 + var _ /* W at bp+0 */ [64]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i)))) << int32(24) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(1))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(2))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(3))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(64)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(17)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(10) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(7)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(18)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(3)) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + e = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) + f = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) + g = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) + h = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) + i = 0 + for { + if !(i < int32(64)) { + break + } + t1 = h + (_ror(tls, e, int32(6)) ^ _ror(tls, e, int32(11)) ^ _ror(tls, e, int32(25))) + (g ^ e&(f^g)) + _K[i] + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] + t2 = _ror(tls, a, int32(2)) ^ _ror(tls, a, int32(13)) ^ _ror(tls, a, int32(22)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) += e + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) += f + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) += g + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) += h +} + +func _pad1(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 40 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+40+uintptr(r), 0, uint32(64)-r) + r = uint32(0) + _processblock1(tls, s, s+40) + } + Xmemset(tls, s+40+uintptr(r), 0, uint32(56)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 56)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 57)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 58)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 59)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 60)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 61)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 62)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 63)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1) + _processblock1(tls, s, s+40) +} + +func _sha256_init(tls *TLS, s uintptr) { + (*Tsha256)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x6a09e667) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xbb67ae85) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x3c6ef372) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0xa54ff53a) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) = uint32(0x510e527f) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) = uint32(0x9b05688c) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) = uint32(0x1f83d9ab) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) = uint32(0x5be0cd19) +} + +func _sha256_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad1(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + goto _1 + _1: + ; + i++ + } +} + +func _sha256_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(64)-r { + Xmemcpy(tls, s+40+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+40+uintptr(r), p, uint32(64)-r) + len1 -= uint32(64) - r + p += uintptr(uint32(64) - r) + _processblock1(tls, s, s+40) + } + for { + if !(len1 >= uint32(64)) { + break + } + _processblock1(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(64) + p += uintptr(64) + } + Xmemcpy(tls, s+40, p, len1) +} + +var _b641 = [65]uint8{'.', '/', '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', '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'} + +func _to641(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = int8(_b641[u%uint32(64)]) + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(32)) { + break + } + _sha256_update(tls, s, md, uint32(32)) + goto _1 + _1: + ; + i -= uint32(32) + } + _sha256_update(tls, s, md, i) +} + +func _sha256crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i, klen, r, slen, u uint32 + var p, salt uintptr + var _ /* ctx at bp+0 */ Tsha256 + var _ /* end at bp+220 */ uintptr + var _ /* kmd at bp+136 */ [32]uint8 + var _ /* md at bp+104 */ [32]uint8 + var _ /* rounds at bp+200 */ [20]int8 + var _ /* smd at bp+168 */ [32]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]int8)(unsafe.Pointer(bp + 200)) = [20]int8{} + /* reject large keys */ + klen = Xstrnlen(tls, key, uint32(Int32FromInt32(KEY_MAX1)+Int32FromInt32(1))) + if klen > uint32(KEY_MAX1) { + return uintptr(0) + } + /* setting: $5$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+147, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint32FromInt64(8)-Uint32FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint32FromInt64(8) - Uint32FromInt32(1)) + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+220, int32(10)) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 220))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 220)) + uintptr(1) + if u < uint32(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint32(ROUNDS_MAX) { + return uintptr(0) + } else { + r = u + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+200, __ccgo_ts+159, VaList(bp+232, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*int8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _1 + _1: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, klen) + _sha256_update(tls, bp, salt, slen) + _sha256_update(tls, bp, key, klen) + _sha256_sum(tls, bp, bp+104) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, klen) + _sha256_update(tls, bp, salt, slen) + _hashmd(tls, bp, klen, bp+104) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha256_update(tls, bp, bp+104, uint32(32)) + } else { + _sha256_update(tls, bp, key, klen) + } + goto _2 + _2: + ; + i >>= uint32(1) + } + _sha256_sum(tls, bp, bp+104) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha256_update(tls, bp, key, klen) + goto _3 + _3: + ; + i++ + } + _sha256_sum(tls, bp, bp+136) + /* DS = sha(repeat-salt) */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[0]))) { + break + } + _sha256_update(tls, bp, salt, slen) + goto _4 + _4: + ; + i++ + } + _sha256_sum(tls, bp, bp+168) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha256_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd(tls, bp, klen, bp+136) + } else { + _sha256_update(tls, bp, bp+104, uint32(32)) + } + if i%uint32(3) != 0 { + _sha256_update(tls, bp, bp+168, slen) + } + if i%uint32(7) != 0 { + _hashmd(tls, bp, klen, bp+136) + } + if i%uint32(2) != 0 { + _sha256_update(tls, bp, bp+104, uint32(32)) + } else { + _hashmd(tls, bp, klen, bp+136) + } + _sha256_sum(tls, bp, bp+104) + goto _5 + _5: + ; + i++ + } + /* output is $5$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+170, VaList(bp+232, bp+200, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(10)) { + break + } + p = _to641(tls, p, uint32(int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm1)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]int8 + _, _ = p, q + p = _sha256crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha256crypt(tls, uintptr(unsafe.Pointer(&_testkey1)), uintptr(unsafe.Pointer(&_testsetting1)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash1)), uint32(73)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey1 = [18]int8{'X', 'y', '0', '1', '@', '#', 1, 2, -128, 127, -1, 13, 10, -127, 9, ' ', '!'} + +var _testsetting1 = [30]int8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash1 = [73]int8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '3', 'V', 'f', 'D', 'j', 'P', 't', '0', '5', 'V', 'H', 'F', 'n', '4', '7', 'C', '/', 'o', 'j', 'F', 'Z', '6', 'K', 'R', 'P', 'Y', 'r', 'O', 'j', 'j', '1', 'l', 'L', 'b', 'H', '.', 'd', 'k', 'F', '3', 'b', 'Z', '6'} + +/* public domain sha512 implementation based on fips180-3 */ +/* >=2^64 bits messages are not supported (about 2000 peta bytes) */ + +type Tsha512 = struct { + Flen1 Tuint64_t + Fh [8]Tuint64_t + Fbuf [128]Tuint8_t +} + +func _ror1(tls *TLS, n Tuint64_t, k int32) (r Tuint64_t) { + return n>>k | n<<(Int32FromInt32(64)-k) +} + +var _K1 = [80]Tuint64_t{ + 0: uint64(0x428a2f98d728ae22), + 1: uint64(0x7137449123ef65cd), + 2: uint64(0xb5c0fbcfec4d3b2f), + 3: uint64(0xe9b5dba58189dbbc), + 4: uint64(0x3956c25bf348b538), + 5: uint64(0x59f111f1b605d019), + 6: uint64(0x923f82a4af194f9b), + 7: uint64(0xab1c5ed5da6d8118), + 8: uint64(0xd807aa98a3030242), + 9: uint64(0x12835b0145706fbe), + 10: uint64(0x243185be4ee4b28c), + 11: uint64(0x550c7dc3d5ffb4e2), + 12: uint64(0x72be5d74f27b896f), + 13: uint64(0x80deb1fe3b1696b1), + 14: uint64(0x9bdc06a725c71235), + 15: uint64(0xc19bf174cf692694), + 16: uint64(0xe49b69c19ef14ad2), + 17: uint64(0xefbe4786384f25e3), + 18: uint64(0x0fc19dc68b8cd5b5), + 19: uint64(0x240ca1cc77ac9c65), + 20: uint64(0x2de92c6f592b0275), + 21: uint64(0x4a7484aa6ea6e483), + 22: uint64(0x5cb0a9dcbd41fbd4), + 23: uint64(0x76f988da831153b5), + 24: uint64(0x983e5152ee66dfab), + 25: uint64(0xa831c66d2db43210), + 26: uint64(0xb00327c898fb213f), + 27: uint64(0xbf597fc7beef0ee4), + 28: uint64(0xc6e00bf33da88fc2), + 29: uint64(0xd5a79147930aa725), + 30: uint64(0x06ca6351e003826f), + 31: uint64(0x142929670a0e6e70), + 32: uint64(0x27b70a8546d22ffc), + 33: uint64(0x2e1b21385c26c926), + 34: uint64(0x4d2c6dfc5ac42aed), + 35: uint64(0x53380d139d95b3df), + 36: uint64(0x650a73548baf63de), + 37: uint64(0x766a0abb3c77b2a8), + 38: uint64(0x81c2c92e47edaee6), + 39: uint64(0x92722c851482353b), + 40: uint64(0xa2bfe8a14cf10364), + 41: uint64(0xa81a664bbc423001), + 42: uint64(0xc24b8b70d0f89791), + 43: uint64(0xc76c51a30654be30), + 44: uint64(0xd192e819d6ef5218), + 45: uint64(0xd69906245565a910), + 46: uint64(0xf40e35855771202a), + 47: uint64(0x106aa07032bbd1b8), + 48: uint64(0x19a4c116b8d2d0c8), + 49: uint64(0x1e376c085141ab53), + 50: uint64(0x2748774cdf8eeb99), + 51: uint64(0x34b0bcb5e19b48a8), + 52: uint64(0x391c0cb3c5c95a63), + 53: uint64(0x4ed8aa4ae3418acb), + 54: uint64(0x5b9cca4f7763e373), + 55: uint64(0x682e6ff3d6b2b8a3), + 56: uint64(0x748f82ee5defb2fc), + 57: uint64(0x78a5636f43172f60), + 58: uint64(0x84c87814a1f0ab72), + 59: uint64(0x8cc702081a6439ec), + 60: uint64(0x90befffa23631e28), + 61: uint64(0xa4506cebde82bde9), + 62: uint64(0xbef9a3f7b2c67915), + 63: uint64(0xc67178f2e372532b), + 64: uint64(0xca273eceea26619c), + 65: uint64(0xd186b8c721c0c207), + 66: uint64(0xeada7dd6cde0eb1e), + 67: uint64(0xf57d4f7fee6ed178), + 68: uint64(0x06f067aa72176fba), + 69: uint64(0x0a637dc5a2c898a6), + 70: uint64(0x113f9804bef90dae), + 71: uint64(0x1b710b35131c471b), + 72: uint64(0x28db77f523047d84), + 73: uint64(0x32caab7b40c72493), + 74: uint64(0x3c9ebe0a15c9bebc), + 75: uint64(0x431d67c49c100d4c), + 76: uint64(0x4cc5d4becb3e42b6), + 77: uint64(0x597f299cfc657e2a), + 78: uint64(0x5fcb6fab3ad6faec), + 79: uint64(0x6c44198c4a475817), +} + +func _processblock2(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(640) + defer tls.Free(640) + var a, b, c, d, e, f, g, h, t1, t2 Tuint64_t + var i int32 + var _ /* W at bp+0 */ [80]Tuint64_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i)))) << int32(56) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(1))))) << int32(48) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(2))))) << int32(40) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(3))))) << int32(32) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(4))))) << int32(24) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(5))))) << int32(16) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(6))))) << int32(8) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(7))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(80)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(61)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(6) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(1)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(8)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(7)) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint64_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) + c = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) + d = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) + e = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) + f = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) + g = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) + h = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) + i = 0 + for { + if !(i < int32(80)) { + break + } + t1 = h + (_ror1(tls, e, int32(14)) ^ _ror1(tls, e, int32(18)) ^ _ror1(tls, e, int32(41))) + (g ^ e&(f^g)) + _K1[i] + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] + t2 = _ror1(tls, a, int32(28)) ^ _ror1(tls, a, int32(34)) ^ _ror1(tls, a, int32(39)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint64_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) += b + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) += c + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) += d + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) += e + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) += f + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) += g + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) += h +} + +func _pad2(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 72 + uintptr(v1))) = uint8(0x80) + if r > uint32(112) { + Xmemset(tls, s+72+uintptr(r), 0, uint32(128)-r) + r = uint32(0) + _processblock2(tls, s, s+72) + } + Xmemset(tls, s+72+uintptr(r), 0, uint32(120)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 120)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 121)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 122)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 123)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 124)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 125)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 126)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 127)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1) + _processblock2(tls, s, s+72) +} + +func _sha512_init(tls *TLS, s uintptr) { + (*Tsha512)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint64_t)(unsafe.Pointer(s + 8)) = uint64(0x6a09e667f3bcc908) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) = uint64(0xbb67ae8584caa73b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) = uint64(0x3c6ef372fe94f82b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) = uint64(0xa54ff53a5f1d36f1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) = uint64(0x510e527fade682d1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) = uint64(0x9b05688c2b3e6c1f) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) = uint64(0x1f83d9abfb41bd6b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) = uint64(0x5be0cd19137e2179) +} + +func _sha512_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad2(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(1)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(2)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(3)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(4)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(5)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(6)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(7)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8))) + goto _1 + _1: + ; + i++ + } +} + +func _sha512_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(128)-r { + Xmemcpy(tls, s+72+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+72+uintptr(r), p, uint32(128)-r) + len1 -= uint32(128) - r + p += uintptr(uint32(128) - r) + _processblock2(tls, s, s+72) + } + for { + if !(len1 >= uint32(128)) { + break + } + _processblock2(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(128) + p += uintptr(128) + } + Xmemcpy(tls, s+72, p, len1) +} + +var _b642 = [65]uint8{'.', '/', '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', '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'} + +func _to642(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = int8(_b642[u%uint32(64)]) + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd1(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(64)) { + break + } + _sha512_update(tls, s, md, uint32(64)) + goto _1 + _1: + ; + i -= uint32(64) + } + _sha512_update(tls, s, md, i) +} + +func _sha512crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(448) + defer tls.Free(448) + var i, klen, r, slen, u uint32 + var p, salt uintptr + var _ /* ctx at bp+0 */ Tsha512 + var _ /* end at bp+412 */ uintptr + var _ /* kmd at bp+264 */ [64]uint8 + var _ /* md at bp+200 */ [64]uint8 + var _ /* rounds at bp+392 */ [20]int8 + var _ /* smd at bp+328 */ [64]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]int8)(unsafe.Pointer(bp + 392)) = [20]int8{} + /* reject large keys */ + i = uint32(0) + for { + if !(i <= uint32(KEY_MAX1) && *(*int8)(unsafe.Pointer(key + uintptr(i))) != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i > uint32(KEY_MAX1) { + return uintptr(0) + } + klen = i + /* setting: $6$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+181, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint32FromInt64(8)-Uint32FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint32FromInt64(8) - Uint32FromInt32(1)) + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+412, int32(10)) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 412))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 412)) + uintptr(1) + if u < uint32(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint32(ROUNDS_MAX) { + return uintptr(0) + } else { + r = u + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+392, __ccgo_ts+159, VaList(bp+424, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*int8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*int8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _2 + _2: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, klen) + _sha512_update(tls, bp, salt, slen) + _sha512_update(tls, bp, key, klen) + _sha512_sum(tls, bp, bp+200) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, klen) + _sha512_update(tls, bp, salt, slen) + _hashmd1(tls, bp, klen, bp+200) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha512_update(tls, bp, bp+200, uint32(64)) + } else { + _sha512_update(tls, bp, key, klen) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _sha512_sum(tls, bp, bp+200) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha512_update(tls, bp, key, klen) + goto _4 + _4: + ; + i++ + } + _sha512_sum(tls, bp, bp+264) + /* DS = sha(repeat-salt) */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[0]))) { + break + } + _sha512_update(tls, bp, salt, slen) + goto _5 + _5: + ; + i++ + } + _sha512_sum(tls, bp, bp+328) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha512_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } else { + _sha512_update(tls, bp, bp+200, uint32(64)) + } + if i%uint32(3) != 0 { + _sha512_update(tls, bp, bp+328, slen) + } + if i%uint32(7) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } + if i%uint32(2) != 0 { + _sha512_update(tls, bp, bp+200, uint32(64)) + } else { + _hashmd1(tls, bp, klen, bp+264) + } + _sha512_sum(tls, bp, bp+200) + goto _6 + _6: + ; + i++ + } + /* output is $6$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+185, VaList(bp+424, bp+392, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(21)) { + break + } + p = _to642(tls, p, uint32(int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm2)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]int8 + _, _ = p, q + p = _sha512crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha512crypt(tls, uintptr(unsafe.Pointer(&_testkey2)), uintptr(unsafe.Pointer(&_testsetting2)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash2)), uint32(116)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey2 = [18]int8{'X', 'y', '0', '1', '@', '#', 1, 2, -128, 127, -1, 13, 10, -127, 9, ' ', '!'} + +var _testsetting2 = [30]int8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash2 = [116]int8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', 'B', 'C', 'p', 't', '8', 'z', 'L', 'r', 'c', '/', 'R', 'c', 'y', 'u', 'X', 'm', 'C', 'D', 'O', 'E', '1', 'A', 'L', 'q', 'M', 'X', 'B', '2', 'M', 'H', '6', 'n', '1', 'g', '8', '9', '1', 'H', 'h', 'F', 'j', '8', '.', 'w', '7', 'L', 'x', 'G', 'v', '.', 'F', 'T', 'k', 'q', 'q', '6', 'V', 'x', 'c', '/', 'k', 'm', '3', 'Y', '0', 'j', 'E', '0', 'j', '2', '4', 'j', 'Y', '5', 'P', 'I', 'v', '/', 'o', 'O', 'u', '6', 'r', 'e', 'g', '1'} + +var ___encrypt_key Texpanded_key + +func Xsetkey(tls *TLS, key uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v, (%v:)", tls, key, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, j int32 + var p3 uintptr + var _ /* bkey at bp+0 */ [8]uint8 + _, _, _ = i, j, p3 + i = 0 + for { + if !(i < int32(8)) { + break + } + (*(*[8]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + j = int32(7) + for { + if !(j >= 0) { + break + } + p3 = bp + uintptr(i) + *(*uint8)(unsafe.Pointer(p3)) = uint8(uint32(*(*uint8)(unsafe.Pointer(p3))) | uint32(int32(*(*int8)(unsafe.Pointer(key)))&Int32FromInt32(1))<= 0) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + 128 + uintptr(i)*4)) |= uint32(int32(*(*int8)(unsafe.Pointer(p)))&Int32FromInt32(1)) << j + goto _2 + _2: + ; + j-- + p++ + } + goto _1 + _1: + ; + i++ + } + key = uintptr(unsafe.Pointer(&___encrypt_key)) + if edflag != 0 { + key = bp + i = 0 + for { + if !(i < int32(16)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + uintptr(int32(15)-i)*4)) + *(*Tuint32_t)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + 64 + uintptr(int32(15)-i)*4)) + goto _3 + _3: + ; + i++ + } + } + X__do_des(tls, (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[0], (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[int32(1)], bp+128, bp+128+uintptr(1)*4, uint32(1), uint32(0), key) + p = block + i = 0 + for { + if !(i < int32(2)) { + break + } + j = int32(31) + for { + if !(j >= 0) { + break + } + v6 = p + p++ + *(*int8)(unsafe.Pointer(v6)) = int8((*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[i] >> j & uint32(1)) + goto _5 + _5: + ; + j-- + } + goto _4 + _4: + ; + i++ + } +} + +var _table = [384]uint16{ + 128: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 129: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 130: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 131: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 132: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 133: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 134: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 135: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 136: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 137: uint16((Int32FromInt32(0x320)/Int32FromInt32(256) | Int32FromInt32(0x320)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 138: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 139: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 140: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 141: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 142: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 143: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 144: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 145: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 146: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 147: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 148: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 149: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 150: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 151: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 152: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 153: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 154: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 155: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 156: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 157: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 158: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 159: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 160: uint16((Int32FromInt32(0x160)/Int32FromInt32(256) | Int32FromInt32(0x160)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 161: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 162: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 163: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 164: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 165: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 166: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 167: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 168: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 169: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 170: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 171: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 172: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 173: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 174: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 175: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 176: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 177: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 178: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 179: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 180: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 181: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 182: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 183: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 184: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 185: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 186: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 187: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 188: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 189: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 190: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 191: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 192: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 193: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 194: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 195: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 196: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 197: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 198: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 199: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 200: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 201: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 202: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 203: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 204: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 205: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 206: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 207: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 208: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 209: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 210: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 211: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 212: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 213: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 214: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 215: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 216: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 217: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 218: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 219: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 220: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 221: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 222: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 223: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 224: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 225: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 226: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 227: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 228: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 229: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 230: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 231: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 232: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 233: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 234: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 235: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 236: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 237: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 238: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 239: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 240: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 241: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 242: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 243: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 244: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 245: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 246: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 247: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 248: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 249: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 250: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 251: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 252: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 253: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 254: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 255: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), +} + +var _ptable = uintptr(unsafe.Pointer(&_table)) + uintptr(128)*2 + +func X__ctype_b_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable)) +} + +const CLOCKS_PER_SEC = 1000000 +const CLOCK_BOOTTIME = 7 +const CLOCK_BOOTTIME_ALARM = 9 +const CLOCK_MONOTONIC = 1 +const CLOCK_MONOTONIC_COARSE = 6 +const CLOCK_MONOTONIC_RAW = 4 +const CLOCK_PROCESS_CPUTIME_ID = 2 +const CLOCK_REALTIME = 0 +const CLOCK_REALTIME_ALARM = 8 +const CLOCK_REALTIME_COARSE = 5 +const CLOCK_SGI_CYCLE = 10 +const CLOCK_TAI = 11 +const CLOCK_THREAD_CPUTIME_ID = 3 +const C_LOCALE = 0 +const DEFAULT_GUARD_MAX = 1048576 +const DEFAULT_GUARD_SIZE = 8192 +const DEFAULT_STACK_MAX = 8388608 +const DEFAULT_STACK_SIZE = 131072 +const DTP_OFFSET = 0 +const FUTEX_CLOCK_REALTIME = 256 +const FUTEX_CMP_REQUEUE = 4 +const FUTEX_FD = 2 +const FUTEX_LOCK_PI = 6 +const FUTEX_PRIVATE = 128 +const FUTEX_REQUEUE = 3 +const FUTEX_TRYLOCK_PI = 8 +const FUTEX_UNLOCK_PI = 7 +const FUTEX_WAIT = 0 +const FUTEX_WAIT_BITSET = 9 +const FUTEX_WAKE = 1 +const FUTEX_WAKE_OP = 5 +const LC_ALL = 6 +const LC_ALL_MASK = 2147483647 +const LC_COLLATE = 3 +const LC_COLLATE_MASK = 8 +const LC_CTYPE = 0 +const LC_CTYPE_MASK = 1 +const LC_GLOBAL_LOCALE = -1 +const LC_MESSAGES = 5 +const LC_MESSAGES_MASK = 32 +const LC_MONETARY = 4 +const LC_MONETARY_MASK = 16 +const LC_NUMERIC = 1 +const LC_NUMERIC_MASK = 2 +const LC_TIME = 2 +const LC_TIME_MASK = 4 +const LOCALE_NAME_MAX = 23 +const MAP_32BIT = 64 +const MAP_ANON = 32 +const MAP_ANONYMOUS = 32 +const MAP_DENYWRITE = 2048 +const MAP_EXECUTABLE = 4096 +const MAP_FAILED = -1 +const MAP_FILE = 0 +const MAP_FIXED = 16 +const MAP_FIXED_NOREPLACE = 1048576 +const MAP_GROWSDOWN = 256 +const MAP_HUGETLB = 262144 +const MAP_HUGE_16GB = 2281701376 +const MAP_HUGE_16KB = 939524096 +const MAP_HUGE_16MB = 1610612736 +const MAP_HUGE_1GB = 2013265920 +const MAP_HUGE_1MB = 1342177280 +const MAP_HUGE_256MB = 1879048192 +const MAP_HUGE_2GB = 2080374784 +const MAP_HUGE_2MB = 1409286144 +const MAP_HUGE_32MB = 1677721600 +const MAP_HUGE_512KB = 1275068416 +const MAP_HUGE_512MB = 1946157056 +const MAP_HUGE_64KB = 1073741824 +const MAP_HUGE_8MB = 1543503872 +const MAP_HUGE_MASK = 63 +const MAP_HUGE_SHIFT = 26 +const MAP_LOCKED = 8192 +const MAP_NONBLOCK = 65536 +const MAP_NORESERVE = 16384 +const MAP_POPULATE = 32768 +const MAP_PRIVATE = 2 +const MAP_SHARED = 1 +const MAP_SHARED_VALIDATE = 3 +const MAP_STACK = 131072 +const MAP_SYNC = 524288 +const MAP_TYPE = 15 +const MCL_CURRENT = 1 +const MCL_FUTURE = 2 +const MCL_ONFAULT = 4 +const MS_ASYNC = 1 +const MS_INVALIDATE = 2 +const MS_SYNC = 4 +const POSIX_MADV_DONTNEED = 4 +const POSIX_MADV_NORMAL = 0 +const POSIX_MADV_RANDOM = 1 +const POSIX_MADV_SEQUENTIAL = 2 +const POSIX_MADV_WILLNEED = 3 +const PROT_EXEC = 4 +const PROT_GROWSDOWN = 16777216 +const PROT_GROWSUP = 33554432 +const PROT_NONE = 0 +const PROT_READ = 1 +const PROT_WRITE = 2 +const PTHREAD_BARRIER_SERIAL_THREAD = -1 +const PTHREAD_CANCELED = -1 +const PTHREAD_CANCEL_ASYNCHRONOUS = 1 +const PTHREAD_CANCEL_DEFERRED = 0 +const PTHREAD_CANCEL_DISABLE = 1 +const PTHREAD_CANCEL_ENABLE = 0 +const PTHREAD_CANCEL_MASKED = 2 +const PTHREAD_CREATE_DETACHED = 1 +const PTHREAD_CREATE_JOINABLE = 0 +const PTHREAD_EXPLICIT_SCHED = 1 +const PTHREAD_INHERIT_SCHED = 0 +const PTHREAD_MUTEX_DEFAULT = 0 +const PTHREAD_MUTEX_ERRORCHECK = 2 +const PTHREAD_MUTEX_NORMAL = 0 +const PTHREAD_MUTEX_RECURSIVE = 1 +const PTHREAD_MUTEX_ROBUST = 1 +const PTHREAD_MUTEX_STALLED = 0 +const PTHREAD_ONCE_INIT = 0 +const PTHREAD_PRIO_INHERIT = 1 +const PTHREAD_PRIO_NONE = 0 +const PTHREAD_PRIO_PROTECT = 2 +const PTHREAD_PROCESS_PRIVATE = 0 +const PTHREAD_PROCESS_SHARED = 1 +const PTHREAD_SCOPE_PROCESS = 1 +const PTHREAD_SCOPE_SYSTEM = 0 +const SCHED_BATCH = 3 +const SCHED_DEADLINE = 6 +const SCHED_FIFO = 1 +const SCHED_IDLE = 5 +const SCHED_OTHER = 0 +const SCHED_RESET_ON_FORK = 1073741824 +const SCHED_RR = 2 +const SIGCANCEL = 33 +const SIGSYNCCALL = 34 +const SIGTIMER = 32 +const TIMER_ABSTIME = 1 +const TIME_UTC = 1 +const TP_OFFSET = 0 +const UTF8_LOCALE = 0 +const __CCGO_SIZEOF_GO_MUTEX = 8 +const __SU = 0 +const pthread = 0 +const tls_mod_off_t = 0 + +type Tlconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits int8 + Ffrac_digits int8 + Fp_cs_precedes int8 + Fp_sep_by_space int8 + Fn_cs_precedes int8 + Fn_sep_by_space int8 + Fp_sign_posn int8 + Fn_sign_posn int8 + Fint_p_cs_precedes int8 + Fint_p_sep_by_space int8 + Fint_n_cs_precedes int8 + Fint_n_sep_by_space int8 + Fint_p_sign_posn int8 + Fint_n_sign_posn int8 +} + +type t__locale_map = struct { + Fmap1 uintptr + Fmap_size Tsize_t + Fname [24]int8 + Fnext uintptr +} + +type Tclockid_t = int32 + +type t__pthread = struct { + Fself uintptr + Fdtv uintptr + Fprev uintptr + Fnext uintptr + Fsysinfo Tuintptr_t + Fcanary Tuintptr_t + Ftid int32 + Ferrno_val int32 + Fdetach_state int32 + Fcancel int32 + Fcanceldisable uint8 + Fcancelasync uint8 + F__ccgo42 uint8 + Fmap_base uintptr + Fmap_size Tsize_t + Fstack uintptr + Fstack_size Tsize_t + Fguard_size Tsize_t + Fresult uintptr + Fcancelbuf uintptr + Ftsd uintptr + Frobust_list struct { + Fhead uintptr + Foff int32 + Fpending uintptr + } + Fh_errno_val int32 + Ftimer_id int32 + Flocale Tlocale_t + Fkilllock [1]int32 + Fdlerror_buf uintptr + Fstdio_locks uintptr + F__ccgo_join_mutex [1]int64 +} + +type Tpthread_once_t = int32 + +type Tpthread_key_t = uint32 + +type Tpthread_spinlock_t = int32 + +type Tpthread_mutexattr_t = struct { + F__attr uint32 +} + +type Tpthread_condattr_t = struct { + F__attr uint32 +} + +type Tpthread_barrierattr_t = struct { + F__attr uint32 +} + +type Tpthread_rwlockattr_t = struct { + F__attr [2]uint32 +} + +type Tpthread_mutex_t = struct { + F__u struct { + F__vi [0][6]int32 + F__p [0][6]uintptr + F__i [6]int32 + } + F__ccgo_room int32 +} + +type Tpthread_cond_t = struct { + F__u struct { + F__vi [0][12]int32 + F__p [0][12]uintptr + F__i [12]int32 + } +} + +type Tpthread_rwlock_t = struct { + F__u struct { + F__vi [0][8]int32 + F__p [0][8]uintptr + F__i [8]int32 + } +} + +type Tpthread_barrier_t = struct { + F__u struct { + F__vi [0][5]int32 + F__p [0][5]uintptr + F__i [5]int32 + } +} + +type Tsched_param = struct { + Fsched_priority int32 + F__reserved1 int32 + F__reserved2 [4]int32 + F__reserved3 int32 +} + +type Ttimer_t = uintptr + +type Ttm = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + F__tm_gmtoff int32 + F__tm_zone uintptr +} + +type Titimerspec = struct { + Fit_interval Ttimespec + Fit_value Ttimespec +} + +type t__ptcb = struct { + F__f uintptr + F__x uintptr + F__next uintptr +} + +type Tmode_t = uint32 + +type Ta_cas_p_undefined_but_pointer_not_32bit = [1]int8 + +const _DT_EXITED = 0 +const _DT_EXITING = 1 +const _DT_JOINABLE = 2 +const _DT_DETACHED = 3 + +func X__ctype_get_mb_cur_max(tls *TLS) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + return uint32(v1) +} + +var _table1 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('a'), + 194: int32('b'), + 195: int32('c'), + 196: int32('d'), + 197: int32('e'), + 198: int32('f'), + 199: int32('g'), + 200: int32('h'), + 201: int32('i'), + 202: int32('j'), + 203: int32('k'), + 204: int32('l'), + 205: int32('m'), + 206: int32('n'), + 207: int32('o'), + 208: int32('p'), + 209: int32('q'), + 210: int32('r'), + 211: int32('s'), + 212: int32('t'), + 213: int32('u'), + 214: int32('v'), + 215: int32('w'), + 216: int32('x'), + 217: int32('y'), + 218: int32('z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('a'), + 226: int32('b'), + 227: int32('c'), + 228: int32('d'), + 229: int32('e'), + 230: int32('f'), + 231: int32('g'), + 232: int32('h'), + 233: int32('i'), + 234: int32('j'), + 235: int32('k'), + 236: int32('l'), + 237: int32('m'), + 238: int32('n'), + 239: int32('o'), + 240: int32('p'), + 241: int32('q'), + 242: int32('r'), + 243: int32('s'), + 244: int32('t'), + 245: int32('u'), + 246: int32('v'), + 247: int32('w'), + 248: int32('x'), + 249: int32('y'), + 250: int32('z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 + +func X__ctype_tolower_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable1)) +} + +var _table2 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('A'), + 194: int32('B'), + 195: int32('C'), + 196: int32('D'), + 197: int32('E'), + 198: int32('F'), + 199: int32('G'), + 200: int32('H'), + 201: int32('I'), + 202: int32('J'), + 203: int32('K'), + 204: int32('L'), + 205: int32('M'), + 206: int32('N'), + 207: int32('O'), + 208: int32('P'), + 209: int32('Q'), + 210: int32('R'), + 211: int32('S'), + 212: int32('T'), + 213: int32('U'), + 214: int32('V'), + 215: int32('W'), + 216: int32('X'), + 217: int32('Y'), + 218: int32('Z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('A'), + 226: int32('B'), + 227: int32('C'), + 228: int32('D'), + 229: int32('E'), + 230: int32('F'), + 231: int32('G'), + 232: int32('H'), + 233: int32('I'), + 234: int32('J'), + 235: int32('K'), + 236: int32('L'), + 237: int32('M'), + 238: int32('N'), + 239: int32('O'), + 240: int32('P'), + 241: int32('Q'), + 242: int32('R'), + 243: int32('S'), + 244: int32('T'), + 245: int32('U'), + 246: int32('V'), + 247: int32('W'), + 248: int32('X'), + 249: int32('Y'), + 250: int32('Z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable2 = uintptr(unsafe.Pointer(&_table2)) + uintptr(128)*4 + +func X__ctype_toupper_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable2)) +} + +func Xisalnum(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) != 0 || BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0) +} + +func X__isalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalnum(tls, c) +} + +func Xisalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalnum_l(tls, c, l) +} + +func Xisalpha(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) +} + +func X__isalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalpha(tls, c) +} + +func Xisalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalpha_l(tls, c, l) +} + +func Xisascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(c & ^Int32FromInt32(0x7f) != 0)) +} + +func Xisblank(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || c == int32('\t')) +} + +func X__isblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, c) +} + +func Xisblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isblank_l(tls, c, l) +} + +func Xiscntrl(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c) < uint32(0x20) || c == int32(0x7f)) +} + +func X__iscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiscntrl(tls, c) +} + +func Xiscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iscntrl_l(tls, c, l) +} + +func Xisdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('0') < uint32(10)) +} + +func X__isdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisdigit(tls, c) +} + +func Xisdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isdigit_l(tls, c, l) +} + +func Xisgraph(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) +} + +func X__isgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisgraph(tls, c) +} + +func Xisgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isgraph_l(tls, c, l) +} + +func Xislower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('a') < uint32(26)) +} + +func X__islower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xislower(tls, c) +} + +func Xislower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__islower_l(tls, c, l) +} + +func Xisprint(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x20) < uint32(0x5f)) +} + +func X__isprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisprint(tls, c) +} + +func Xisprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isprint_l(tls, c, l) +} + +func Xispunct(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) != 0 && !(Xisalnum(tls, c) != 0)) +} + +func X__ispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xispunct(tls, c) +} + +func Xispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ispunct_l(tls, c, l) +} + +func Xisspace(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || uint32(c)-uint32('\t') < uint32(5)) +} + +func X__isspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisspace(tls, c) +} + +func Xisspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isspace_l(tls, c, l) +} + +func Xisupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('A') < uint32(26)) +} + +func X__isupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisupper(tls, c) +} + +func Xisupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isupper_l(tls, c, l) +} + +type Twint_t = uint32 + +type Twctype_t = uint32 + +type Twctrans_t = uintptr + +func Xiswalnum(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(wc-uint32('0') < uint32(10)) != 0 || Xiswalpha(tls, wc) != 0) +} + +func X__iswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalnum(tls, c) +} + +func Xiswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalnum_l(tls, c, l) +} + +var _table3 = [3904]uint8{ + 0: uint8(18), + 1: uint8(17), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(17), + 18: uint8(34), + 19: uint8(35), + 20: uint8(36), + 21: uint8(17), + 22: uint8(37), + 23: uint8(38), + 24: uint8(39), + 25: uint8(40), + 26: uint8(41), + 27: uint8(42), + 28: uint8(43), + 29: uint8(44), + 30: uint8(17), + 31: uint8(45), + 32: uint8(46), + 33: uint8(47), + 34: uint8(16), + 35: uint8(16), + 36: uint8(48), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(16), + 48: uint8(52), + 49: uint8(53), + 50: uint8(16), + 51: uint8(16), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(54), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(55), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(56), + 165: uint8(17), + 166: uint8(57), + 167: uint8(58), + 168: uint8(59), + 169: uint8(60), + 170: uint8(61), + 171: uint8(62), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(63), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(64), + 251: uint8(65), + 252: uint8(17), + 253: uint8(66), + 254: uint8(67), + 255: uint8(68), + 256: uint8(69), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(73), + 261: uint8(74), + 262: uint8(17), + 263: uint8(75), + 264: uint8(76), + 265: uint8(77), + 266: uint8(78), + 267: uint8(79), + 268: uint8(80), + 269: uint8(81), + 270: uint8(16), + 271: uint8(82), + 272: uint8(83), + 273: uint8(84), + 274: uint8(85), + 275: uint8(86), + 276: uint8(87), + 277: uint8(88), + 278: uint8(89), + 279: uint8(90), + 280: uint8(91), + 281: uint8(92), + 282: uint8(93), + 283: uint8(16), + 284: uint8(94), + 285: uint8(95), + 286: uint8(96), + 287: uint8(16), + 288: uint8(17), + 289: uint8(17), + 290: uint8(17), + 291: uint8(97), + 292: uint8(98), + 293: uint8(99), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(17), + 305: uint8(17), + 306: uint8(17), + 307: uint8(17), + 308: uint8(100), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(17), + 325: uint8(17), + 326: uint8(101), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(17), + 361: uint8(17), + 362: uint8(102), + 363: uint8(103), + 364: uint8(16), + 365: uint8(16), + 366: uint8(104), + 367: uint8(105), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(106), + 392: uint8(17), + 393: uint8(17), + 394: uint8(107), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(108), + 434: uint8(109), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(110), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(111), + 469: uint8(112), + 470: uint8(113), + 471: uint8(114), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(115), + 481: uint8(116), + 482: uint8(117), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(118), + 489: uint8(119), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(120), + 495: uint8(16), + 496: uint8(16), + 497: uint8(121), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 584: uint8(254), + 585: uint8(255), + 586: uint8(255), + 587: uint8(7), + 588: uint8(254), + 589: uint8(255), + 590: uint8(255), + 591: uint8(7), + 597: uint8(4), + 598: uint8(32), + 599: uint8(4), + 600: uint8(255), + 601: uint8(255), + 602: uint8(127), + 603: uint8(255), + 604: uint8(255), + 605: uint8(255), + 606: uint8(127), + 607: uint8(255), + 608: uint8(255), + 609: uint8(255), + 610: uint8(255), + 611: uint8(255), + 612: uint8(255), + 613: uint8(255), + 614: uint8(255), + 615: uint8(255), + 616: uint8(255), + 617: uint8(255), + 618: uint8(255), + 619: uint8(255), + 620: uint8(255), + 621: uint8(255), + 622: uint8(255), + 623: uint8(255), + 624: uint8(255), + 625: uint8(255), + 626: uint8(255), + 627: uint8(255), + 628: uint8(255), + 629: uint8(255), + 630: uint8(255), + 631: uint8(255), + 632: uint8(195), + 633: uint8(255), + 634: uint8(3), + 636: uint8(31), + 637: uint8(80), + 648: uint8(32), + 654: uint8(223), + 655: uint8(188), + 656: uint8(64), + 657: uint8(215), + 658: uint8(255), + 659: uint8(255), + 660: uint8(251), + 661: uint8(255), + 662: uint8(255), + 663: uint8(255), + 664: uint8(255), + 665: uint8(255), + 666: uint8(255), + 667: uint8(255), + 668: uint8(255), + 669: uint8(255), + 670: uint8(191), + 671: uint8(255), + 672: uint8(255), + 673: uint8(255), + 674: uint8(255), + 675: uint8(255), + 676: uint8(255), + 677: uint8(255), + 678: uint8(255), + 679: uint8(255), + 680: uint8(255), + 681: uint8(255), + 682: uint8(255), + 683: uint8(255), + 684: uint8(255), + 685: uint8(255), + 686: uint8(255), + 687: uint8(255), + 688: uint8(3), + 689: uint8(252), + 690: uint8(255), + 691: uint8(255), + 692: uint8(255), + 693: uint8(255), + 694: uint8(255), + 695: uint8(255), + 696: uint8(255), + 697: uint8(255), + 698: uint8(255), + 699: uint8(255), + 700: uint8(255), + 701: uint8(255), + 702: uint8(255), + 703: uint8(255), + 704: uint8(255), + 705: uint8(255), + 706: uint8(255), + 707: uint8(255), + 708: uint8(255), + 709: uint8(255), + 710: uint8(254), + 711: uint8(255), + 712: uint8(255), + 713: uint8(255), + 714: uint8(127), + 715: uint8(2), + 716: uint8(255), + 717: uint8(255), + 718: uint8(255), + 719: uint8(255), + 720: uint8(255), + 721: uint8(1), + 726: uint8(255), + 727: uint8(191), + 728: uint8(182), + 730: uint8(255), + 731: uint8(255), + 732: uint8(255), + 733: uint8(135), + 734: uint8(7), + 738: uint8(255), + 739: uint8(7), + 740: uint8(255), + 741: uint8(255), + 742: uint8(255), + 743: uint8(255), + 744: uint8(255), + 745: uint8(255), + 746: uint8(255), + 747: uint8(254), + 748: uint8(255), + 749: uint8(195), + 750: uint8(255), + 751: uint8(255), + 752: uint8(255), + 753: uint8(255), + 754: uint8(255), + 755: uint8(255), + 756: uint8(255), + 757: uint8(255), + 758: uint8(255), + 759: uint8(255), + 760: uint8(255), + 761: uint8(255), + 762: uint8(239), + 763: uint8(31), + 764: uint8(254), + 765: uint8(225), + 766: uint8(255), + 767: uint8(159), + 770: uint8(255), + 771: uint8(255), + 772: uint8(255), + 773: uint8(255), + 774: uint8(255), + 775: uint8(255), + 777: uint8(224), + 778: uint8(255), + 779: uint8(255), + 780: uint8(255), + 781: uint8(255), + 782: uint8(255), + 783: uint8(255), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(255), + 788: uint8(255), + 789: uint8(255), + 790: uint8(3), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(7), + 798: uint8(48), + 799: uint8(4), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(252), + 804: uint8(255), + 805: uint8(31), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(1), + 812: uint8(255), + 813: uint8(7), + 820: uint8(255), + 821: uint8(255), + 822: uint8(223), + 823: uint8(63), + 826: uint8(240), + 827: uint8(255), + 828: uint8(248), + 829: uint8(3), + 830: uint8(255), + 831: uint8(255), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(239), + 840: uint8(255), + 841: uint8(223), + 842: uint8(225), + 843: uint8(255), + 844: uint8(207), + 845: uint8(255), + 846: uint8(254), + 847: uint8(255), + 848: uint8(239), + 849: uint8(159), + 850: uint8(249), + 851: uint8(255), + 852: uint8(255), + 853: uint8(253), + 854: uint8(197), + 855: uint8(227), + 856: uint8(159), + 857: uint8(89), + 858: uint8(128), + 859: uint8(176), + 860: uint8(207), + 861: uint8(255), + 862: uint8(3), + 863: uint8(16), + 864: uint8(238), + 865: uint8(135), + 866: uint8(249), + 867: uint8(255), + 868: uint8(255), + 869: uint8(253), + 870: uint8(109), + 871: uint8(195), + 872: uint8(135), + 873: uint8(25), + 874: uint8(2), + 875: uint8(94), + 876: uint8(192), + 877: uint8(255), + 878: uint8(63), + 880: uint8(238), + 881: uint8(191), + 882: uint8(251), + 883: uint8(255), + 884: uint8(255), + 885: uint8(253), + 886: uint8(237), + 887: uint8(227), + 888: uint8(191), + 889: uint8(27), + 890: uint8(1), + 892: uint8(207), + 893: uint8(255), + 895: uint8(30), + 896: uint8(238), + 897: uint8(159), + 898: uint8(249), + 899: uint8(255), + 900: uint8(255), + 901: uint8(253), + 902: uint8(237), + 903: uint8(227), + 904: uint8(159), + 905: uint8(25), + 906: uint8(192), + 907: uint8(176), + 908: uint8(207), + 909: uint8(255), + 910: uint8(2), + 912: uint8(236), + 913: uint8(199), + 914: uint8(61), + 915: uint8(214), + 916: uint8(24), + 917: uint8(199), + 918: uint8(255), + 919: uint8(195), + 920: uint8(199), + 921: uint8(29), + 922: uint8(129), + 924: uint8(192), + 925: uint8(255), + 928: uint8(239), + 929: uint8(223), + 930: uint8(253), + 931: uint8(255), + 932: uint8(255), + 933: uint8(253), + 934: uint8(255), + 935: uint8(227), + 936: uint8(223), + 937: uint8(29), + 938: uint8(96), + 939: uint8(7), + 940: uint8(207), + 941: uint8(255), + 944: uint8(239), + 945: uint8(223), + 946: uint8(253), + 947: uint8(255), + 948: uint8(255), + 949: uint8(253), + 950: uint8(239), + 951: uint8(227), + 952: uint8(223), + 953: uint8(29), + 954: uint8(96), + 955: uint8(64), + 956: uint8(207), + 957: uint8(255), + 958: uint8(6), + 960: uint8(239), + 961: uint8(223), + 962: uint8(253), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(231), + 968: uint8(223), + 969: uint8(93), + 970: uint8(240), + 971: uint8(128), + 972: uint8(207), + 973: uint8(255), + 975: uint8(252), + 976: uint8(236), + 977: uint8(255), + 978: uint8(127), + 979: uint8(252), + 980: uint8(255), + 981: uint8(255), + 982: uint8(251), + 983: uint8(47), + 984: uint8(127), + 985: uint8(128), + 986: uint8(95), + 987: uint8(255), + 988: uint8(192), + 989: uint8(255), + 990: uint8(12), + 992: uint8(254), + 993: uint8(255), + 994: uint8(255), + 995: uint8(255), + 996: uint8(255), + 997: uint8(127), + 998: uint8(255), + 999: uint8(7), + 1000: uint8(63), + 1001: uint8(32), + 1002: uint8(255), + 1003: uint8(3), + 1008: uint8(214), + 1009: uint8(247), + 1010: uint8(255), + 1011: uint8(255), + 1012: uint8(175), + 1013: uint8(255), + 1014: uint8(255), + 1015: uint8(59), + 1016: uint8(95), + 1017: uint8(32), + 1018: uint8(255), + 1019: uint8(243), + 1024: uint8(1), + 1028: uint8(255), + 1029: uint8(3), + 1032: uint8(255), + 1033: uint8(254), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(31), + 1038: uint8(254), + 1039: uint8(255), + 1040: uint8(3), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(254), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(31), + 1056: uint8(255), + 1057: uint8(255), + 1058: uint8(255), + 1059: uint8(255), + 1060: uint8(255), + 1061: uint8(255), + 1062: uint8(127), + 1063: uint8(249), + 1064: uint8(255), + 1065: uint8(3), + 1066: uint8(255), + 1067: uint8(255), + 1068: uint8(255), + 1069: uint8(255), + 1070: uint8(255), + 1071: uint8(255), + 1072: uint8(255), + 1073: uint8(255), + 1074: uint8(255), + 1075: uint8(63), + 1076: uint8(255), + 1077: uint8(255), + 1078: uint8(255), + 1079: uint8(255), + 1080: uint8(191), + 1081: uint8(32), + 1082: uint8(255), + 1083: uint8(255), + 1084: uint8(255), + 1085: uint8(255), + 1086: uint8(255), + 1087: uint8(247), + 1088: uint8(255), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(61), + 1098: uint8(127), + 1099: uint8(61), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(255), + 1104: uint8(255), + 1105: uint8(61), + 1106: uint8(255), + 1107: uint8(255), + 1108: uint8(255), + 1109: uint8(255), + 1110: uint8(61), + 1111: uint8(127), + 1112: uint8(61), + 1113: uint8(255), + 1114: uint8(127), + 1115: uint8(255), + 1116: uint8(255), + 1117: uint8(255), + 1118: uint8(255), + 1119: uint8(255), + 1120: uint8(255), + 1121: uint8(255), + 1122: uint8(61), + 1123: uint8(255), + 1124: uint8(255), + 1125: uint8(255), + 1126: uint8(255), + 1127: uint8(255), + 1128: uint8(255), + 1129: uint8(255), + 1130: uint8(255), + 1131: uint8(7), + 1136: uint8(255), + 1137: uint8(255), + 1140: uint8(255), + 1141: uint8(255), + 1142: uint8(255), + 1143: uint8(255), + 1144: uint8(255), + 1145: uint8(255), + 1146: uint8(255), + 1147: uint8(255), + 1148: uint8(255), + 1149: uint8(255), + 1150: uint8(63), + 1151: uint8(63), + 1152: uint8(254), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1183: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(159), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(254), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(7), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(199), + 1214: uint8(255), + 1215: uint8(1), + 1216: uint8(255), + 1217: uint8(223), + 1218: uint8(15), + 1220: uint8(255), + 1221: uint8(255), + 1222: uint8(15), + 1224: uint8(255), + 1225: uint8(255), + 1226: uint8(15), + 1228: uint8(255), + 1229: uint8(223), + 1230: uint8(13), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(207), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(1), + 1242: uint8(128), + 1243: uint8(16), + 1244: uint8(255), + 1245: uint8(3), + 1250: uint8(255), + 1251: uint8(3), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(1), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(7), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(63), + 1280: uint8(255), + 1281: uint8(255), + 1282: uint8(255), + 1283: uint8(127), + 1284: uint8(255), + 1285: uint8(15), + 1286: uint8(255), + 1287: uint8(1), + 1288: uint8(192), + 1289: uint8(255), + 1290: uint8(255), + 1291: uint8(255), + 1292: uint8(255), + 1293: uint8(63), + 1294: uint8(31), + 1296: uint8(255), + 1297: uint8(255), + 1298: uint8(255), + 1299: uint8(255), + 1300: uint8(255), + 1301: uint8(15), + 1302: uint8(255), + 1303: uint8(255), + 1304: uint8(255), + 1305: uint8(3), + 1306: uint8(255), + 1307: uint8(3), + 1312: uint8(255), + 1313: uint8(255), + 1314: uint8(255), + 1315: uint8(15), + 1316: uint8(255), + 1317: uint8(255), + 1318: uint8(255), + 1319: uint8(255), + 1320: uint8(255), + 1321: uint8(255), + 1322: uint8(255), + 1323: uint8(127), + 1324: uint8(254), + 1325: uint8(255), + 1326: uint8(31), + 1328: uint8(255), + 1329: uint8(3), + 1330: uint8(255), + 1331: uint8(3), + 1332: uint8(128), + 1344: uint8(255), + 1345: uint8(255), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(239), + 1351: uint8(255), + 1352: uint8(239), + 1353: uint8(15), + 1354: uint8(255), + 1355: uint8(3), + 1360: uint8(255), + 1361: uint8(255), + 1362: uint8(255), + 1363: uint8(255), + 1364: uint8(255), + 1365: uint8(243), + 1366: uint8(255), + 1367: uint8(255), + 1368: uint8(255), + 1369: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(191), + 1373: uint8(255), + 1374: uint8(3), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(255), + 1381: uint8(255), + 1382: uint8(127), + 1384: uint8(255), + 1385: uint8(227), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(63), + 1392: uint8(255), + 1393: uint8(1), + 1394: uint8(255), + 1395: uint8(255), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(231), + 1405: uint8(222), + 1406: uint8(111), + 1407: uint8(4), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(255), + 1416: uint8(255), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1436: uint8(128), + 1437: uint8(255), + 1438: uint8(31), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(63), + 1443: uint8(63), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(63), + 1449: uint8(63), + 1450: uint8(255), + 1451: uint8(170), + 1452: uint8(255), + 1453: uint8(255), + 1454: uint8(255), + 1455: uint8(63), + 1456: uint8(255), + 1457: uint8(255), + 1458: uint8(255), + 1459: uint8(255), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(223), + 1463: uint8(95), + 1464: uint8(220), + 1465: uint8(31), + 1466: uint8(207), + 1467: uint8(15), + 1468: uint8(255), + 1469: uint8(31), + 1470: uint8(220), + 1471: uint8(31), + 1486: uint8(2), + 1487: uint8(128), + 1490: uint8(255), + 1491: uint8(31), + 1504: uint8(132), + 1505: uint8(252), + 1506: uint8(47), + 1507: uint8(62), + 1508: uint8(80), + 1509: uint8(189), + 1510: uint8(255), + 1511: uint8(243), + 1512: uint8(224), + 1513: uint8(67), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(1), + 1558: uint8(192), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(3), + 1568: uint8(255), + 1569: uint8(255), + 1570: uint8(255), + 1571: uint8(255), + 1572: uint8(255), + 1573: uint8(127), + 1574: uint8(255), + 1575: uint8(255), + 1576: uint8(255), + 1577: uint8(255), + 1578: uint8(255), + 1579: uint8(127), + 1580: uint8(255), + 1581: uint8(255), + 1582: uint8(255), + 1583: uint8(255), + 1584: uint8(255), + 1585: uint8(255), + 1586: uint8(255), + 1587: uint8(255), + 1588: uint8(255), + 1589: uint8(255), + 1590: uint8(255), + 1591: uint8(255), + 1592: uint8(255), + 1593: uint8(255), + 1594: uint8(255), + 1595: uint8(255), + 1596: uint8(31), + 1597: uint8(120), + 1598: uint8(12), + 1600: uint8(255), + 1601: uint8(255), + 1602: uint8(255), + 1603: uint8(255), + 1604: uint8(191), + 1605: uint8(32), + 1606: uint8(255), + 1607: uint8(255), + 1608: uint8(255), + 1609: uint8(255), + 1610: uint8(255), + 1611: uint8(255), + 1612: uint8(255), + 1613: uint8(128), + 1616: uint8(255), + 1617: uint8(255), + 1618: uint8(127), + 1620: uint8(127), + 1621: uint8(127), + 1622: uint8(127), + 1623: uint8(127), + 1624: uint8(127), + 1625: uint8(127), + 1626: uint8(127), + 1627: uint8(127), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1637: uint8(128), + 1664: uint8(224), + 1668: uint8(254), + 1669: uint8(3), + 1670: uint8(62), + 1671: uint8(31), + 1672: uint8(254), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(127), + 1683: uint8(224), + 1684: uint8(254), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(255), + 1691: uint8(255), + 1692: uint8(255), + 1693: uint8(255), + 1694: uint8(255), + 1695: uint8(247), + 1696: uint8(224), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(255), + 1701: uint8(255), + 1702: uint8(254), + 1703: uint8(255), + 1704: uint8(255), + 1705: uint8(255), + 1706: uint8(255), + 1707: uint8(255), + 1708: uint8(255), + 1709: uint8(255), + 1710: uint8(255), + 1711: uint8(255), + 1712: uint8(255), + 1713: uint8(127), + 1716: uint8(255), + 1717: uint8(255), + 1718: uint8(255), + 1719: uint8(7), + 1726: uint8(255), + 1727: uint8(255), + 1728: uint8(255), + 1729: uint8(255), + 1730: uint8(255), + 1731: uint8(255), + 1732: uint8(255), + 1733: uint8(255), + 1734: uint8(255), + 1735: uint8(255), + 1736: uint8(255), + 1737: uint8(255), + 1738: uint8(255), + 1739: uint8(255), + 1740: uint8(255), + 1741: uint8(255), + 1742: uint8(255), + 1743: uint8(255), + 1744: uint8(255), + 1745: uint8(255), + 1746: uint8(255), + 1747: uint8(255), + 1748: uint8(255), + 1749: uint8(255), + 1750: uint8(63), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(255), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1792: uint8(255), + 1793: uint8(255), + 1794: uint8(255), + 1795: uint8(255), + 1796: uint8(255), + 1797: uint8(255), + 1798: uint8(255), + 1799: uint8(255), + 1800: uint8(255), + 1801: uint8(255), + 1802: uint8(255), + 1803: uint8(255), + 1804: uint8(255), + 1805: uint8(255), + 1806: uint8(255), + 1807: uint8(255), + 1808: uint8(255), + 1809: uint8(31), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(63), + 1824: uint8(255), + 1825: uint8(31), + 1826: uint8(255), + 1827: uint8(255), + 1828: uint8(255), + 1829: uint8(15), + 1832: uint8(255), + 1833: uint8(255), + 1834: uint8(255), + 1835: uint8(255), + 1836: uint8(255), + 1837: uint8(127), + 1838: uint8(240), + 1839: uint8(143), + 1840: uint8(255), + 1841: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(255), + 1849: uint8(255), + 1850: uint8(255), + 1851: uint8(255), + 1852: uint8(255), + 1853: uint8(255), + 1858: uint8(128), + 1859: uint8(255), + 1860: uint8(252), + 1861: uint8(255), + 1862: uint8(255), + 1863: uint8(255), + 1864: uint8(255), + 1865: uint8(255), + 1866: uint8(255), + 1867: uint8(255), + 1868: uint8(255), + 1869: uint8(255), + 1870: uint8(255), + 1871: uint8(255), + 1872: uint8(255), + 1873: uint8(249), + 1874: uint8(255), + 1875: uint8(255), + 1876: uint8(255), + 1877: uint8(255), + 1878: uint8(255), + 1879: uint8(255), + 1880: uint8(124), + 1886: uint8(128), + 1887: uint8(255), + 1888: uint8(191), + 1889: uint8(255), + 1890: uint8(255), + 1891: uint8(255), + 1892: uint8(255), + 1896: uint8(255), + 1897: uint8(255), + 1898: uint8(255), + 1899: uint8(255), + 1900: uint8(255), + 1901: uint8(255), + 1902: uint8(15), + 1904: uint8(255), + 1905: uint8(255), + 1906: uint8(255), + 1907: uint8(255), + 1908: uint8(255), + 1909: uint8(255), + 1910: uint8(255), + 1911: uint8(255), + 1912: uint8(47), + 1914: uint8(255), + 1915: uint8(3), + 1918: uint8(252), + 1919: uint8(232), + 1920: uint8(255), + 1921: uint8(255), + 1922: uint8(255), + 1923: uint8(255), + 1924: uint8(255), + 1925: uint8(7), + 1926: uint8(255), + 1927: uint8(255), + 1928: uint8(255), + 1929: uint8(255), + 1930: uint8(7), + 1932: uint8(255), + 1933: uint8(255), + 1934: uint8(255), + 1935: uint8(31), + 1936: uint8(255), + 1937: uint8(255), + 1938: uint8(255), + 1939: uint8(255), + 1940: uint8(255), + 1941: uint8(255), + 1942: uint8(247), + 1943: uint8(255), + 1945: uint8(128), + 1946: uint8(255), + 1947: uint8(3), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(255), + 1951: uint8(127), + 1952: uint8(255), + 1953: uint8(255), + 1954: uint8(255), + 1955: uint8(255), + 1956: uint8(255), + 1957: uint8(255), + 1958: uint8(127), + 1960: uint8(255), + 1961: uint8(63), + 1962: uint8(255), + 1963: uint8(3), + 1964: uint8(255), + 1965: uint8(255), + 1966: uint8(127), + 1967: uint8(252), + 1968: uint8(255), + 1969: uint8(255), + 1970: uint8(255), + 1971: uint8(255), + 1972: uint8(255), + 1973: uint8(255), + 1974: uint8(255), + 1975: uint8(127), + 1976: uint8(5), + 1979: uint8(56), + 1980: uint8(255), + 1981: uint8(255), + 1982: uint8(60), + 1984: uint8(126), + 1985: uint8(126), + 1986: uint8(126), + 1988: uint8(127), + 1989: uint8(127), + 1990: uint8(255), + 1991: uint8(255), + 1992: uint8(255), + 1993: uint8(255), + 1994: uint8(255), + 1995: uint8(247), + 1996: uint8(255), + 1998: uint8(255), + 1999: uint8(255), + 2000: uint8(255), + 2001: uint8(255), + 2002: uint8(255), + 2003: uint8(255), + 2004: uint8(255), + 2005: uint8(255), + 2006: uint8(255), + 2007: uint8(255), + 2008: uint8(255), + 2009: uint8(255), + 2010: uint8(255), + 2011: uint8(255), + 2012: uint8(255), + 2013: uint8(7), + 2014: uint8(255), + 2015: uint8(3), + 2016: uint8(255), + 2017: uint8(255), + 2018: uint8(255), + 2019: uint8(255), + 2020: uint8(255), + 2021: uint8(255), + 2022: uint8(255), + 2023: uint8(255), + 2024: uint8(255), + 2025: uint8(255), + 2026: uint8(255), + 2027: uint8(255), + 2028: uint8(255), + 2029: uint8(255), + 2030: uint8(255), + 2031: uint8(255), + 2032: uint8(255), + 2033: uint8(255), + 2034: uint8(255), + 2035: uint8(255), + 2036: uint8(15), + 2038: uint8(255), + 2039: uint8(255), + 2040: uint8(127), + 2041: uint8(248), + 2042: uint8(255), + 2043: uint8(255), + 2044: uint8(255), + 2045: uint8(255), + 2046: uint8(255), + 2047: uint8(15), + 2048: uint8(255), + 2049: uint8(255), + 2050: uint8(255), + 2051: uint8(255), + 2052: uint8(255), + 2053: uint8(255), + 2054: uint8(255), + 2055: uint8(255), + 2056: uint8(255), + 2057: uint8(255), + 2058: uint8(255), + 2059: uint8(255), + 2060: uint8(255), + 2061: uint8(63), + 2062: uint8(255), + 2063: uint8(255), + 2064: uint8(255), + 2065: uint8(255), + 2066: uint8(255), + 2067: uint8(255), + 2068: uint8(255), + 2069: uint8(255), + 2070: uint8(255), + 2071: uint8(255), + 2072: uint8(255), + 2073: uint8(255), + 2074: uint8(255), + 2075: uint8(3), + 2080: uint8(127), + 2082: uint8(248), + 2083: uint8(224), + 2084: uint8(255), + 2085: uint8(253), + 2086: uint8(127), + 2087: uint8(95), + 2088: uint8(219), + 2089: uint8(255), + 2090: uint8(255), + 2091: uint8(255), + 2092: uint8(255), + 2093: uint8(255), + 2094: uint8(255), + 2095: uint8(255), + 2096: uint8(255), + 2097: uint8(255), + 2098: uint8(255), + 2099: uint8(255), + 2100: uint8(255), + 2101: uint8(255), + 2102: uint8(3), + 2106: uint8(248), + 2107: uint8(255), + 2108: uint8(255), + 2109: uint8(255), + 2110: uint8(255), + 2111: uint8(255), + 2112: uint8(255), + 2113: uint8(255), + 2114: uint8(255), + 2115: uint8(255), + 2116: uint8(255), + 2117: uint8(255), + 2118: uint8(255), + 2119: uint8(63), + 2122: uint8(255), + 2123: uint8(255), + 2124: uint8(255), + 2125: uint8(255), + 2126: uint8(255), + 2127: uint8(255), + 2128: uint8(255), + 2129: uint8(255), + 2130: uint8(252), + 2131: uint8(255), + 2132: uint8(255), + 2133: uint8(255), + 2134: uint8(255), + 2135: uint8(255), + 2136: uint8(255), + 2142: uint8(255), + 2143: uint8(15), + 2158: uint8(223), + 2159: uint8(255), + 2160: uint8(255), + 2161: uint8(255), + 2162: uint8(255), + 2163: uint8(255), + 2164: uint8(255), + 2165: uint8(255), + 2166: uint8(255), + 2167: uint8(255), + 2168: uint8(255), + 2169: uint8(255), + 2170: uint8(255), + 2171: uint8(255), + 2172: uint8(255), + 2173: uint8(255), + 2174: uint8(255), + 2175: uint8(31), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(254), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(7), + 2184: uint8(254), + 2185: uint8(255), + 2186: uint8(255), + 2187: uint8(7), + 2188: uint8(192), + 2189: uint8(255), + 2190: uint8(255), + 2191: uint8(255), + 2192: uint8(255), + 2193: uint8(255), + 2194: uint8(255), + 2195: uint8(255), + 2196: uint8(255), + 2197: uint8(255), + 2198: uint8(255), + 2199: uint8(127), + 2200: uint8(252), + 2201: uint8(252), + 2202: uint8(252), + 2203: uint8(28), + 2208: uint8(255), + 2209: uint8(239), + 2210: uint8(255), + 2211: uint8(255), + 2212: uint8(127), + 2213: uint8(255), + 2214: uint8(255), + 2215: uint8(183), + 2216: uint8(255), + 2217: uint8(63), + 2218: uint8(255), + 2219: uint8(63), + 2224: uint8(255), + 2225: uint8(255), + 2226: uint8(255), + 2227: uint8(255), + 2228: uint8(255), + 2229: uint8(255), + 2230: uint8(255), + 2231: uint8(255), + 2232: uint8(255), + 2233: uint8(255), + 2234: uint8(255), + 2235: uint8(255), + 2236: uint8(255), + 2237: uint8(255), + 2238: uint8(255), + 2239: uint8(7), + 2248: uint8(255), + 2249: uint8(255), + 2250: uint8(255), + 2251: uint8(255), + 2252: uint8(255), + 2253: uint8(255), + 2254: uint8(31), + 2288: uint8(255), + 2289: uint8(255), + 2290: uint8(255), + 2291: uint8(31), + 2292: uint8(255), + 2293: uint8(255), + 2294: uint8(255), + 2295: uint8(255), + 2296: uint8(255), + 2297: uint8(255), + 2298: uint8(1), + 2304: uint8(255), + 2305: uint8(255), + 2306: uint8(255), + 2307: uint8(255), + 2309: uint8(224), + 2310: uint8(255), + 2311: uint8(255), + 2312: uint8(255), + 2313: uint8(7), + 2314: uint8(255), + 2315: uint8(255), + 2316: uint8(255), + 2317: uint8(255), + 2318: uint8(255), + 2319: uint8(7), + 2320: uint8(255), + 2321: uint8(255), + 2322: uint8(255), + 2323: uint8(63), + 2324: uint8(255), + 2325: uint8(255), + 2326: uint8(255), + 2327: uint8(255), + 2328: uint8(15), + 2329: uint8(255), + 2330: uint8(62), + 2336: uint8(255), + 2337: uint8(255), + 2338: uint8(255), + 2339: uint8(255), + 2340: uint8(255), + 2341: uint8(255), + 2342: uint8(255), + 2343: uint8(255), + 2344: uint8(255), + 2345: uint8(255), + 2346: uint8(255), + 2347: uint8(255), + 2348: uint8(255), + 2349: uint8(255), + 2350: uint8(255), + 2351: uint8(255), + 2352: uint8(255), + 2353: uint8(255), + 2354: uint8(255), + 2355: uint8(63), + 2356: uint8(255), + 2357: uint8(3), + 2358: uint8(255), + 2359: uint8(255), + 2360: uint8(255), + 2361: uint8(255), + 2362: uint8(15), + 2363: uint8(255), + 2364: uint8(255), + 2365: uint8(255), + 2366: uint8(255), + 2367: uint8(15), + 2368: uint8(255), + 2369: uint8(255), + 2370: uint8(255), + 2371: uint8(255), + 2372: uint8(255), + 2374: uint8(255), + 2375: uint8(255), + 2376: uint8(255), + 2377: uint8(255), + 2378: uint8(255), + 2379: uint8(255), + 2380: uint8(15), + 2400: uint8(255), + 2401: uint8(255), + 2402: uint8(255), + 2403: uint8(255), + 2404: uint8(255), + 2405: uint8(255), + 2406: uint8(127), + 2408: uint8(255), + 2409: uint8(255), + 2410: uint8(63), + 2412: uint8(255), + 2432: uint8(63), + 2433: uint8(253), + 2434: uint8(255), + 2435: uint8(255), + 2436: uint8(255), + 2437: uint8(255), + 2438: uint8(191), + 2439: uint8(145), + 2440: uint8(255), + 2441: uint8(255), + 2442: uint8(63), + 2444: uint8(255), + 2445: uint8(255), + 2446: uint8(127), + 2448: uint8(255), + 2449: uint8(255), + 2450: uint8(255), + 2451: uint8(127), + 2460: uint8(255), + 2461: uint8(255), + 2462: uint8(55), + 2464: uint8(255), + 2465: uint8(255), + 2466: uint8(63), + 2468: uint8(255), + 2469: uint8(255), + 2470: uint8(255), + 2471: uint8(3), + 2480: uint8(255), + 2481: uint8(255), + 2482: uint8(255), + 2483: uint8(255), + 2484: uint8(255), + 2485: uint8(255), + 2486: uint8(255), + 2487: uint8(192), + 2496: uint8(111), + 2497: uint8(240), + 2498: uint8(239), + 2499: uint8(254), + 2500: uint8(255), + 2501: uint8(255), + 2502: uint8(63), + 2508: uint8(255), + 2509: uint8(255), + 2510: uint8(255), + 2511: uint8(31), + 2512: uint8(255), + 2513: uint8(255), + 2514: uint8(255), + 2515: uint8(31), + 2520: uint8(255), + 2521: uint8(254), + 2522: uint8(255), + 2523: uint8(255), + 2524: uint8(31), + 2528: uint8(255), + 2529: uint8(255), + 2530: uint8(255), + 2531: uint8(255), + 2532: uint8(255), + 2533: uint8(255), + 2534: uint8(63), + 2536: uint8(255), + 2537: uint8(255), + 2538: uint8(63), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(7), + 2544: uint8(255), + 2545: uint8(255), + 2546: uint8(3), + 2560: uint8(255), + 2561: uint8(255), + 2562: uint8(255), + 2563: uint8(255), + 2564: uint8(255), + 2565: uint8(255), + 2566: uint8(255), + 2567: uint8(255), + 2568: uint8(255), + 2569: uint8(1), + 2576: uint8(255), + 2577: uint8(255), + 2578: uint8(255), + 2579: uint8(255), + 2580: uint8(255), + 2581: uint8(255), + 2582: uint8(7), + 2584: uint8(255), + 2585: uint8(255), + 2586: uint8(255), + 2587: uint8(255), + 2588: uint8(255), + 2589: uint8(255), + 2590: uint8(7), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2598: uint8(255), + 2599: uint8(3), + 2624: uint8(255), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(31), + 2628: uint8(128), + 2630: uint8(255), + 2631: uint8(255), + 2632: uint8(63), + 2652: uint8(255), + 2653: uint8(255), + 2654: uint8(127), + 2656: uint8(255), + 2657: uint8(255), + 2658: uint8(255), + 2659: uint8(255), + 2660: uint8(255), + 2661: uint8(255), + 2662: uint8(255), + 2663: uint8(255), + 2664: uint8(63), + 2668: uint8(192), + 2669: uint8(255), + 2672: uint8(252), + 2673: uint8(255), + 2674: uint8(255), + 2675: uint8(255), + 2676: uint8(255), + 2677: uint8(255), + 2678: uint8(255), + 2679: uint8(1), + 2682: uint8(255), + 2683: uint8(255), + 2684: uint8(255), + 2685: uint8(1), + 2686: uint8(255), + 2687: uint8(3), + 2688: uint8(255), + 2689: uint8(255), + 2690: uint8(255), + 2691: uint8(255), + 2692: uint8(255), + 2693: uint8(255), + 2694: uint8(199), + 2695: uint8(255), + 2696: uint8(112), + 2698: uint8(255), + 2699: uint8(255), + 2700: uint8(255), + 2701: uint8(255), + 2702: uint8(71), + 2704: uint8(255), + 2705: uint8(255), + 2706: uint8(255), + 2707: uint8(255), + 2708: uint8(255), + 2709: uint8(255), + 2710: uint8(255), + 2711: uint8(255), + 2712: uint8(30), + 2714: uint8(255), + 2715: uint8(23), + 2720: uint8(255), + 2721: uint8(255), + 2722: uint8(251), + 2723: uint8(255), + 2724: uint8(255), + 2725: uint8(255), + 2726: uint8(159), + 2727: uint8(64), + 2736: uint8(127), + 2737: uint8(189), + 2738: uint8(255), + 2739: uint8(191), + 2740: uint8(255), + 2741: uint8(1), + 2742: uint8(255), + 2743: uint8(255), + 2744: uint8(255), + 2745: uint8(255), + 2746: uint8(255), + 2747: uint8(255), + 2748: uint8(255), + 2749: uint8(1), + 2750: uint8(255), + 2751: uint8(3), + 2752: uint8(239), + 2753: uint8(159), + 2754: uint8(249), + 2755: uint8(255), + 2756: uint8(255), + 2757: uint8(253), + 2758: uint8(237), + 2759: uint8(227), + 2760: uint8(159), + 2761: uint8(25), + 2762: uint8(129), + 2763: uint8(224), + 2764: uint8(15), + 2784: uint8(255), + 2785: uint8(255), + 2786: uint8(255), + 2787: uint8(255), + 2788: uint8(255), + 2789: uint8(255), + 2790: uint8(255), + 2791: uint8(255), + 2792: uint8(187), + 2793: uint8(7), + 2794: uint8(255), + 2795: uint8(131), + 2800: uint8(255), + 2801: uint8(255), + 2802: uint8(255), + 2803: uint8(255), + 2804: uint8(255), + 2805: uint8(255), + 2806: uint8(255), + 2807: uint8(255), + 2808: uint8(179), + 2810: uint8(255), + 2811: uint8(3), + 2832: uint8(255), + 2833: uint8(255), + 2834: uint8(255), + 2835: uint8(255), + 2836: uint8(255), + 2837: uint8(255), + 2838: uint8(63), + 2839: uint8(127), + 2843: uint8(63), + 2848: uint8(255), + 2849: uint8(255), + 2850: uint8(255), + 2851: uint8(255), + 2852: uint8(255), + 2853: uint8(255), + 2854: uint8(255), + 2855: uint8(127), + 2856: uint8(17), + 2858: uint8(255), + 2859: uint8(3), + 2864: uint8(255), + 2865: uint8(255), + 2866: uint8(255), + 2867: uint8(255), + 2868: uint8(255), + 2869: uint8(255), + 2870: uint8(63), + 2871: uint8(1), + 2872: uint8(255), + 2873: uint8(3), + 2880: uint8(255), + 2881: uint8(255), + 2882: uint8(255), + 2883: uint8(231), + 2884: uint8(255), + 2885: uint8(7), + 2886: uint8(255), + 2887: uint8(3), + 2912: uint8(255), + 2913: uint8(255), + 2914: uint8(255), + 2915: uint8(255), + 2916: uint8(255), + 2917: uint8(255), + 2918: uint8(255), + 2919: uint8(1), + 2932: uint8(255), + 2933: uint8(255), + 2934: uint8(255), + 2935: uint8(255), + 2936: uint8(255), + 2937: uint8(255), + 2938: uint8(255), + 2939: uint8(255), + 2940: uint8(255), + 2941: uint8(3), + 2943: uint8(128), + 2964: uint8(255), + 2965: uint8(252), + 2966: uint8(255), + 2967: uint8(255), + 2968: uint8(255), + 2969: uint8(255), + 2970: uint8(255), + 2971: uint8(252), + 2972: uint8(26), + 2976: uint8(255), + 2977: uint8(255), + 2978: uint8(255), + 2979: uint8(255), + 2980: uint8(255), + 2981: uint8(255), + 2982: uint8(231), + 2983: uint8(127), + 2986: uint8(255), + 2987: uint8(255), + 2988: uint8(255), + 2989: uint8(255), + 2990: uint8(255), + 2991: uint8(255), + 2992: uint8(255), + 2993: uint8(255), + 2994: uint8(255), + 2995: uint8(32), + 3000: uint8(255), + 3001: uint8(255), + 3002: uint8(255), + 3003: uint8(255), + 3004: uint8(255), + 3005: uint8(255), + 3006: uint8(255), + 3007: uint8(1), + 3008: uint8(255), + 3009: uint8(253), + 3010: uint8(255), + 3011: uint8(255), + 3012: uint8(255), + 3013: uint8(255), + 3014: uint8(127), + 3015: uint8(127), + 3016: uint8(1), + 3018: uint8(255), + 3019: uint8(3), + 3022: uint8(252), + 3023: uint8(255), + 3024: uint8(255), + 3025: uint8(255), + 3026: uint8(252), + 3027: uint8(255), + 3028: uint8(255), + 3029: uint8(254), + 3030: uint8(127), + 3040: uint8(127), + 3041: uint8(251), + 3042: uint8(255), + 3043: uint8(255), + 3044: uint8(255), + 3045: uint8(255), + 3046: uint8(127), + 3047: uint8(180), + 3048: uint8(203), + 3050: uint8(255), + 3051: uint8(3), + 3052: uint8(191), + 3053: uint8(253), + 3054: uint8(255), + 3055: uint8(255), + 3056: uint8(255), + 3057: uint8(127), + 3058: uint8(123), + 3059: uint8(1), + 3060: uint8(255), + 3061: uint8(3), + 3100: uint8(255), + 3101: uint8(255), + 3102: uint8(127), + 3104: uint8(255), + 3105: uint8(255), + 3106: uint8(255), + 3107: uint8(255), + 3108: uint8(255), + 3109: uint8(255), + 3110: uint8(255), + 3111: uint8(255), + 3112: uint8(255), + 3113: uint8(255), + 3114: uint8(255), + 3115: uint8(255), + 3116: uint8(255), + 3117: uint8(255), + 3118: uint8(255), + 3119: uint8(255), + 3120: uint8(255), + 3121: uint8(255), + 3122: uint8(255), + 3123: uint8(3), + 3136: uint8(255), + 3137: uint8(255), + 3138: uint8(255), + 3139: uint8(255), + 3140: uint8(255), + 3141: uint8(255), + 3142: uint8(255), + 3143: uint8(255), + 3144: uint8(255), + 3145: uint8(255), + 3146: uint8(255), + 3147: uint8(255), + 3148: uint8(255), + 3149: uint8(127), + 3152: uint8(255), + 3153: uint8(255), + 3154: uint8(255), + 3155: uint8(255), + 3156: uint8(255), + 3157: uint8(255), + 3158: uint8(255), + 3159: uint8(255), + 3160: uint8(255), + 3161: uint8(255), + 3162: uint8(255), + 3163: uint8(255), + 3164: uint8(255), + 3165: uint8(255), + 3166: uint8(255), + 3167: uint8(255), + 3168: uint8(255), + 3169: uint8(255), + 3170: uint8(255), + 3171: uint8(255), + 3172: uint8(255), + 3173: uint8(255), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(15), + 3200: uint8(255), + 3201: uint8(255), + 3202: uint8(255), + 3203: uint8(255), + 3204: uint8(255), + 3205: uint8(127), + 3232: uint8(255), + 3233: uint8(255), + 3234: uint8(255), + 3235: uint8(255), + 3236: uint8(255), + 3237: uint8(255), + 3238: uint8(255), + 3239: uint8(255), + 3240: uint8(127), + 3264: uint8(255), + 3265: uint8(255), + 3266: uint8(255), + 3267: uint8(255), + 3268: uint8(255), + 3269: uint8(255), + 3270: uint8(255), + 3271: uint8(1), + 3272: uint8(255), + 3273: uint8(255), + 3274: uint8(255), + 3275: uint8(127), + 3276: uint8(255), + 3277: uint8(3), + 3290: uint8(255), + 3291: uint8(255), + 3292: uint8(255), + 3293: uint8(63), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3304: uint8(15), + 3306: uint8(255), + 3307: uint8(3), + 3308: uint8(248), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(224), + 3312: uint8(255), + 3313: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(255), + 3369: uint8(135), + 3370: uint8(255), + 3371: uint8(255), + 3372: uint8(255), + 3373: uint8(255), + 3374: uint8(255), + 3375: uint8(255), + 3376: uint8(255), + 3377: uint8(128), + 3378: uint8(255), + 3379: uint8(255), + 3388: uint8(11), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(255), + 3403: uint8(255), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(255), + 3408: uint8(255), + 3409: uint8(255), + 3410: uint8(255), + 3411: uint8(255), + 3412: uint8(255), + 3413: uint8(255), + 3414: uint8(255), + 3415: uint8(255), + 3416: uint8(255), + 3417: uint8(255), + 3418: uint8(255), + 3419: uint8(255), + 3420: uint8(255), + 3421: uint8(255), + 3422: uint8(255), + 3424: uint8(255), + 3425: uint8(255), + 3426: uint8(255), + 3427: uint8(255), + 3428: uint8(255), + 3429: uint8(255), + 3430: uint8(255), + 3431: uint8(255), + 3432: uint8(255), + 3433: uint8(255), + 3434: uint8(255), + 3435: uint8(255), + 3436: uint8(255), + 3437: uint8(255), + 3438: uint8(255), + 3439: uint8(255), + 3440: uint8(255), + 3441: uint8(255), + 3442: uint8(255), + 3443: uint8(255), + 3444: uint8(255), + 3445: uint8(255), + 3446: uint8(255), + 3447: uint8(255), + 3448: uint8(255), + 3449: uint8(255), + 3450: uint8(255), + 3451: uint8(255), + 3452: uint8(255), + 3453: uint8(255), + 3454: uint8(7), + 3456: uint8(255), + 3457: uint8(255), + 3458: uint8(255), + 3459: uint8(127), + 3466: uint8(7), + 3468: uint8(240), + 3470: uint8(255), + 3471: uint8(255), + 3472: uint8(255), + 3473: uint8(255), + 3474: uint8(255), + 3475: uint8(255), + 3476: uint8(255), + 3477: uint8(255), + 3478: uint8(255), + 3479: uint8(255), + 3480: uint8(255), + 3481: uint8(255), + 3482: uint8(255), + 3483: uint8(255), + 3484: uint8(255), + 3485: uint8(255), + 3486: uint8(255), + 3487: uint8(255), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(255), + 3506: uint8(255), + 3507: uint8(255), + 3508: uint8(255), + 3509: uint8(255), + 3510: uint8(255), + 3511: uint8(255), + 3512: uint8(255), + 3513: uint8(255), + 3514: uint8(255), + 3515: uint8(255), + 3516: uint8(255), + 3517: uint8(255), + 3518: uint8(255), + 3519: uint8(15), + 3520: uint8(255), + 3521: uint8(255), + 3522: uint8(255), + 3523: uint8(255), + 3524: uint8(255), + 3525: uint8(255), + 3526: uint8(255), + 3527: uint8(255), + 3528: uint8(255), + 3529: uint8(255), + 3530: uint8(255), + 3531: uint8(255), + 3532: uint8(255), + 3533: uint8(7), + 3534: uint8(255), + 3535: uint8(31), + 3536: uint8(255), + 3537: uint8(1), + 3538: uint8(255), + 3539: uint8(67), + 3552: uint8(255), + 3553: uint8(255), + 3554: uint8(255), + 3555: uint8(255), + 3556: uint8(255), + 3557: uint8(255), + 3558: uint8(255), + 3559: uint8(255), + 3560: uint8(255), + 3561: uint8(255), + 3562: uint8(223), + 3563: uint8(255), + 3564: uint8(255), + 3565: uint8(255), + 3566: uint8(255), + 3567: uint8(255), + 3568: uint8(255), + 3569: uint8(255), + 3570: uint8(255), + 3571: uint8(223), + 3572: uint8(100), + 3573: uint8(222), + 3574: uint8(255), + 3575: uint8(235), + 3576: uint8(239), + 3577: uint8(255), + 3578: uint8(255), + 3579: uint8(255), + 3580: uint8(255), + 3581: uint8(255), + 3582: uint8(255), + 3583: uint8(255), + 3584: uint8(191), + 3585: uint8(231), + 3586: uint8(223), + 3587: uint8(223), + 3588: uint8(255), + 3589: uint8(255), + 3590: uint8(255), + 3591: uint8(123), + 3592: uint8(95), + 3593: uint8(252), + 3594: uint8(253), + 3595: uint8(255), + 3596: uint8(255), + 3597: uint8(255), + 3598: uint8(255), + 3599: uint8(255), + 3600: uint8(255), + 3601: uint8(255), + 3602: uint8(255), + 3603: uint8(255), + 3604: uint8(255), + 3605: uint8(255), + 3606: uint8(255), + 3607: uint8(255), + 3608: uint8(255), + 3609: uint8(255), + 3610: uint8(255), + 3611: uint8(255), + 3612: uint8(255), + 3613: uint8(255), + 3614: uint8(255), + 3615: uint8(255), + 3616: uint8(255), + 3617: uint8(255), + 3618: uint8(255), + 3619: uint8(255), + 3620: uint8(255), + 3621: uint8(255), + 3622: uint8(255), + 3623: uint8(255), + 3624: uint8(255), + 3625: uint8(255), + 3626: uint8(255), + 3627: uint8(255), + 3628: uint8(255), + 3629: uint8(255), + 3630: uint8(255), + 3631: uint8(255), + 3632: uint8(255), + 3633: uint8(255), + 3634: uint8(255), + 3635: uint8(255), + 3636: uint8(63), + 3637: uint8(255), + 3638: uint8(255), + 3639: uint8(255), + 3640: uint8(253), + 3641: uint8(255), + 3642: uint8(255), + 3643: uint8(247), + 3644: uint8(255), + 3645: uint8(255), + 3646: uint8(255), + 3647: uint8(247), + 3648: uint8(255), + 3649: uint8(255), + 3650: uint8(223), + 3651: uint8(255), + 3652: uint8(255), + 3653: uint8(255), + 3654: uint8(223), + 3655: uint8(255), + 3656: uint8(255), + 3657: uint8(127), + 3658: uint8(255), + 3659: uint8(255), + 3660: uint8(255), + 3661: uint8(127), + 3662: uint8(255), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(253), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(253), + 3670: uint8(255), + 3671: uint8(255), + 3672: uint8(247), + 3673: uint8(207), + 3674: uint8(255), + 3675: uint8(255), + 3676: uint8(255), + 3677: uint8(255), + 3678: uint8(255), + 3679: uint8(255), + 3680: uint8(127), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(249), + 3684: uint8(219), + 3685: uint8(7), + 3712: uint8(255), + 3713: uint8(255), + 3714: uint8(255), + 3715: uint8(255), + 3716: uint8(255), + 3717: uint8(31), + 3718: uint8(128), + 3719: uint8(63), + 3720: uint8(255), + 3721: uint8(67), + 3768: uint8(255), + 3769: uint8(255), + 3770: uint8(255), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(15), + 3774: uint8(255), + 3775: uint8(3), + 3776: uint8(255), + 3777: uint8(255), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3782: uint8(255), + 3783: uint8(255), + 3784: uint8(255), + 3785: uint8(255), + 3786: uint8(255), + 3787: uint8(255), + 3788: uint8(255), + 3789: uint8(255), + 3790: uint8(255), + 3791: uint8(255), + 3792: uint8(255), + 3793: uint8(255), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(255), + 3798: uint8(255), + 3799: uint8(255), + 3800: uint8(31), + 3808: uint8(255), + 3809: uint8(255), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(255), + 3816: uint8(143), + 3817: uint8(8), + 3818: uint8(255), + 3819: uint8(3), + 3840: uint8(239), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(150), + 3845: uint8(254), + 3846: uint8(247), + 3847: uint8(10), + 3848: uint8(132), + 3849: uint8(234), + 3850: uint8(150), + 3851: uint8(170), + 3852: uint8(150), + 3853: uint8(247), + 3854: uint8(247), + 3855: uint8(94), + 3856: uint8(255), + 3857: uint8(251), + 3858: uint8(255), + 3859: uint8(15), + 3860: uint8(238), + 3861: uint8(251), + 3862: uint8(255), + 3863: uint8(15), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(3), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(3), + 3886: uint8(255), + 3887: uint8(255), + 3888: uint8(255), + 3889: uint8(3), +} + +func Xiswalpha(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table3[uint32(int32(_table3[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + if wc < uint32(0x2fffe) { + return int32(1) + } + return 0 +} + +func X__iswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalpha(tls, c) +} + +func Xiswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalpha_l(tls, c, l) +} + +func Xiswblank(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, int32(wc)) +} + +func X__iswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswblank(tls, c) +} + +func Xiswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswblank_l(tls, c, l) +} + +func Xiswcntrl(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc < uint32(32) || wc-Uint32FromInt32(0x7f) < uint32(33) || wc-Uint32FromInt32(0x2028) < uint32(2) || wc-Uint32FromInt32(0xfff9) < uint32(3)) +} + +func X__iswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswcntrl(tls, c) +} + +func Xiswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswcntrl_l(tls, c, l) +} + +const WCTYPE_ALNUM = 1 +const WCTYPE_ALPHA = 2 +const WCTYPE_BLANK = 3 +const WCTYPE_CNTRL = 4 +const WCTYPE_DIGIT = 5 +const WCTYPE_GRAPH = 6 +const WCTYPE_LOWER = 7 +const WCTYPE_PRINT = 8 +const WCTYPE_PUNCT = 9 +const WCTYPE_SPACE = 10 +const WCTYPE_UPPER = 11 +const WCTYPE_XDIGIT = 12 + +func Xiswctype(tls *TLS, wc Twint_t, type1 Twctype_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v type1=%v, (%v:)", tls, wc, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + switch type1 { + case uint32(WCTYPE_ALNUM): + return Xiswalnum(tls, wc) + case uint32(WCTYPE_ALPHA): + return Xiswalpha(tls, wc) + case uint32(WCTYPE_BLANK): + return Xiswblank(tls, wc) + case uint32(WCTYPE_CNTRL): + return Xiswcntrl(tls, wc) + case uint32(WCTYPE_DIGIT): + return BoolInt32(wc-uint32('0') < uint32(10)) + case uint32(WCTYPE_GRAPH): + return Xiswgraph(tls, wc) + case uint32(WCTYPE_LOWER): + return Xiswlower(tls, wc) + case uint32(WCTYPE_PRINT): + return Xiswprint(tls, wc) + case uint32(WCTYPE_PUNCT): + return Xiswpunct(tls, wc) + case uint32(WCTYPE_SPACE): + return Xiswspace(tls, wc) + case uint32(WCTYPE_UPPER): + return Xiswupper(tls, wc) + case uint32(WCTYPE_XDIGIT): + return Xiswxdigit(tls, wc) + } + return 0 +} + +func Xwctype(tls *TLS, s uintptr) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var p uintptr + _, _ = i, p + i = int32(1) + p = uintptr(unsafe.Pointer(&_names)) + for { + if !(*(*int8)(unsafe.Pointer(p)) != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32(*(*int8)(unsafe.Pointer(p))) && !(Xstrcmp(tls, s, p) != 0) { + return uint32(i) + } + goto _1 + _1: + ; + i++ + p += uintptr(6) + } + return uint32(0) +} + +/* order must match! */ +var _names = [73]int8{'a', 'l', 'n', 'u', 'm', 0, 'a', 'l', 'p', 'h', 'a', 0, 'b', 'l', 'a', 'n', 'k', 0, 'c', 'n', 't', 'r', 'l', 0, 'd', 'i', 'g', 'i', 't', 0, 'g', 'r', 'a', 'p', 'h', 0, 'l', 'o', 'w', 'e', 'r', 0, 'p', 'r', 'i', 'n', 't', 0, 'p', 'u', 'n', 'c', 't', 0, 's', 'p', 'a', 'c', 'e', 0, 'u', 'p', 'p', 'e', 'r', 0, 'x', 'd', 'i', 'g', 'i', 't'} + +func X__iswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswctype(tls, c, t) +} + +func X__wctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctype(tls, s) +} + +func Xiswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswctype_l(tls, c, t, l) +} + +func Xwctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctype_l(tls, s, l) +} + +func Xiswdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-uint32('0') < uint32(10)) +} + +func X__iswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswdigit(tls, c) +} + +func Xiswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswdigit_l(tls, c, l) +} + +func Xiswgraph(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* ISO C defines this function as: */ + return BoolInt32(!(Xiswspace(tls, wc) != 0) && Xiswprint(tls, wc) != 0) +} + +func X__iswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswgraph(tls, c) +} + +func Xiswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswgraph_l(tls, c, l) +} + +func Xiswlower(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowupper(tls, wc) != wc) +} + +func X__iswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswlower(tls, c) +} + +func Xiswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswlower_l(tls, c, l) +} + +/* Consider all legal codepoints as printable except for: + * - C0 and C1 control characters + * - U+2028 and U+2029 (line/para break) + * - U+FFF9 through U+FFFB (interlinear annotation controls) + * The following code is optimized heavily to make hot paths for the + * expected printable characters. */ + +func Xiswprint(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0xff) { + return BoolInt32((wc+uint32(1))&uint32(0x7f) >= uint32(0x21)) + } + if wc < uint32(0x2028) || wc-uint32(0x202a) < uint32(Int32FromInt32(0xd800)-Int32FromInt32(0x202a)) || wc-uint32(0xe000) < uint32(Int32FromInt32(0xfff9)-Int32FromInt32(0xe000)) { + return int32(1) + } + if wc-uint32(0xfffc) > uint32(Int32FromInt32(0x10ffff)-Int32FromInt32(0xfffc)) || wc&uint32(0xfffe) == uint32(0xfffe) { + return 0 + } + return int32(1) +} + +func X__iswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswprint(tls, c) +} + +func Xiswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswprint_l(tls, c, l) +} + +var _table4 = [4000]uint8{ + 0: uint8(18), + 1: uint8(16), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(16), + 18: uint8(16), + 19: uint8(34), + 20: uint8(35), + 21: uint8(16), + 22: uint8(36), + 23: uint8(37), + 24: uint8(38), + 25: uint8(39), + 26: uint8(40), + 27: uint8(41), + 28: uint8(42), + 29: uint8(43), + 30: uint8(16), + 31: uint8(44), + 32: uint8(45), + 33: uint8(46), + 34: uint8(17), + 35: uint8(17), + 36: uint8(47), + 37: uint8(17), + 38: uint8(17), + 39: uint8(17), + 40: uint8(17), + 41: uint8(17), + 42: uint8(17), + 43: uint8(48), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(52), + 48: uint8(53), + 49: uint8(54), + 50: uint8(55), + 51: uint8(17), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(56), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(57), + 165: uint8(16), + 166: uint8(58), + 167: uint8(59), + 168: uint8(60), + 169: uint8(61), + 170: uint8(62), + 171: uint8(63), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(16), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(64), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(65), + 249: uint8(16), + 250: uint8(16), + 251: uint8(66), + 252: uint8(16), + 253: uint8(67), + 254: uint8(68), + 255: uint8(69), + 256: uint8(16), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(16), + 261: uint8(73), + 262: uint8(16), + 263: uint8(16), + 264: uint8(74), + 265: uint8(75), + 266: uint8(76), + 267: uint8(77), + 268: uint8(78), + 269: uint8(16), + 270: uint8(79), + 271: uint8(80), + 272: uint8(81), + 273: uint8(82), + 274: uint8(83), + 275: uint8(84), + 276: uint8(85), + 277: uint8(86), + 278: uint8(87), + 279: uint8(88), + 280: uint8(89), + 281: uint8(90), + 282: uint8(91), + 283: uint8(16), + 284: uint8(92), + 285: uint8(93), + 286: uint8(94), + 287: uint8(95), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(96), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(97), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(98), + 363: uint8(99), + 364: uint8(16), + 365: uint8(16), + 366: uint8(100), + 367: uint8(101), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(102), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(103), + 465: uint8(104), + 466: uint8(105), + 467: uint8(106), + 468: uint8(16), + 469: uint8(16), + 470: uint8(107), + 471: uint8(108), + 472: uint8(17), + 473: uint8(17), + 474: uint8(109), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(110), + 482: uint8(111), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(112), + 489: uint8(113), + 490: uint8(16), + 491: uint8(16), + 492: uint8(114), + 493: uint8(115), + 494: uint8(116), + 495: uint8(16), + 496: uint8(117), + 497: uint8(118), + 498: uint8(119), + 499: uint8(17), + 500: uint8(17), + 501: uint8(17), + 502: uint8(120), + 503: uint8(121), + 504: uint8(122), + 505: uint8(123), + 506: uint8(124), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 580: uint8(254), + 581: uint8(255), + 583: uint8(252), + 584: uint8(1), + 587: uint8(248), + 588: uint8(1), + 591: uint8(120), + 596: uint8(255), + 597: uint8(251), + 598: uint8(223), + 599: uint8(251), + 602: uint8(128), + 606: uint8(128), + 632: uint8(60), + 634: uint8(252), + 635: uint8(255), + 636: uint8(224), + 637: uint8(175), + 638: uint8(255), + 639: uint8(255), + 640: uint8(255), + 641: uint8(255), + 642: uint8(255), + 643: uint8(255), + 644: uint8(255), + 645: uint8(255), + 646: uint8(255), + 647: uint8(255), + 648: uint8(223), + 649: uint8(255), + 650: uint8(255), + 651: uint8(255), + 652: uint8(255), + 653: uint8(255), + 654: uint8(32), + 655: uint8(64), + 656: uint8(176), + 670: uint8(64), + 688: uint8(252), + 689: uint8(3), + 715: uint8(252), + 721: uint8(230), + 722: uint8(254), + 723: uint8(255), + 724: uint8(255), + 725: uint8(255), + 727: uint8(64), + 728: uint8(73), + 734: uint8(24), + 736: uint8(255), + 737: uint8(255), + 739: uint8(216), + 747: uint8(1), + 749: uint8(60), + 762: uint8(16), + 763: uint8(224), + 764: uint8(1), + 765: uint8(30), + 767: uint8(96), + 768: uint8(255), + 769: uint8(191), + 776: uint8(255), + 777: uint8(7), + 797: uint8(248), + 798: uint8(207), + 799: uint8(227), + 803: uint8(3), + 805: uint8(32), + 806: uint8(255), + 807: uint8(127), + 811: uint8(78), + 826: uint8(8), + 828: uint8(7), + 829: uint8(252), + 839: uint8(16), + 841: uint8(32), + 842: uint8(30), + 844: uint8(48), + 846: uint8(1), + 855: uint8(16), + 857: uint8(32), + 862: uint8(252), + 863: uint8(111), + 871: uint8(16), + 873: uint8(32), + 878: uint8(64), + 887: uint8(16), + 889: uint8(32), + 894: uint8(3), + 895: uint8(224), + 903: uint8(16), + 905: uint8(32), + 910: uint8(253), + 921: uint8(32), + 926: uint8(255), + 927: uint8(7), + 928: uint8(16), + 937: uint8(32), + 942: uint8(128), + 943: uint8(255), + 944: uint8(16), + 951: uint8(16), + 953: uint8(32), + 967: uint8(24), + 969: uint8(160), + 971: uint8(127), + 974: uint8(255), + 975: uint8(3), + 985: uint8(4), + 990: uint8(16), + 997: uint8(128), + 999: uint8(128), + 1000: uint8(192), + 1001: uint8(223), + 1003: uint8(12), + 1015: uint8(4), + 1017: uint8(31), + 1024: uint8(254), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1029: uint8(252), + 1030: uint8(255), + 1031: uint8(255), + 1040: uint8(252), + 1047: uint8(192), + 1048: uint8(255), + 1049: uint8(223), + 1050: uint8(255), + 1051: uint8(7), + 1062: uint8(128), + 1063: uint8(6), + 1065: uint8(252), + 1075: uint8(192), + 1087: uint8(8), + 1099: uint8(224), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(31), + 1106: uint8(255), + 1107: uint8(3), + 1120: uint8(1), + 1165: uint8(96), + 1168: uint8(1), + 1171: uint8(24), + 1181: uint8(56), + 1186: uint8(16), + 1190: uint8(112), + 1206: uint8(48), + 1209: uint8(254), + 1210: uint8(127), + 1211: uint8(47), + 1214: uint8(255), + 1215: uint8(3), + 1216: uint8(255), + 1217: uint8(127), + 1255: uint8(14), + 1256: uint8(49), + 1275: uint8(196), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(255), + 1283: uint8(192), + 1292: uint8(1), + 1294: uint8(224), + 1295: uint8(159), + 1300: uint8(127), + 1301: uint8(63), + 1302: uint8(255), + 1303: uint8(127), + 1318: uint8(16), + 1320: uint8(16), + 1323: uint8(252), + 1324: uint8(255), + 1325: uint8(255), + 1326: uint8(255), + 1327: uint8(31), + 1333: uint8(12), + 1340: uint8(64), + 1342: uint8(12), + 1343: uint8(240), + 1350: uint8(128), + 1351: uint8(248), + 1359: uint8(192), + 1368: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(255), + 1373: uint8(33), + 1374: uint8(144), + 1375: uint8(3), + 1400: uint8(255), + 1401: uint8(255), + 1402: uint8(255), + 1403: uint8(255), + 1404: uint8(127), + 1406: uint8(224), + 1407: uint8(251), + 1431: uint8(160), + 1432: uint8(3), + 1433: uint8(224), + 1435: uint8(224), + 1437: uint8(224), + 1439: uint8(96), + 1440: uint8(128), + 1441: uint8(248), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(252), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(255), + 1449: uint8(255), + 1450: uint8(255), + 1451: uint8(127), + 1452: uint8(223), + 1453: uint8(255), + 1454: uint8(241), + 1455: uint8(127), + 1456: uint8(255), + 1457: uint8(127), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(255), + 1463: uint8(255), + 1466: uint8(255), + 1467: uint8(255), + 1468: uint8(255), + 1469: uint8(255), + 1470: uint8(1), + 1472: uint8(123), + 1473: uint8(3), + 1474: uint8(208), + 1475: uint8(193), + 1476: uint8(175), + 1477: uint8(66), + 1479: uint8(12), + 1480: uint8(31), + 1481: uint8(188), + 1482: uint8(255), + 1483: uint8(255), + 1489: uint8(14), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(255), + 1497: uint8(255), + 1498: uint8(255), + 1499: uint8(255), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(255), + 1503: uint8(255), + 1504: uint8(255), + 1505: uint8(255), + 1506: uint8(255), + 1507: uint8(255), + 1508: uint8(127), + 1512: uint8(255), + 1513: uint8(7), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(255), + 1522: uint8(255), + 1523: uint8(255), + 1524: uint8(255), + 1525: uint8(255), + 1526: uint8(63), + 1533: uint8(252), + 1534: uint8(255), + 1535: uint8(255), + 1536: uint8(255), + 1537: uint8(255), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(207), + 1551: uint8(255), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(63), + 1555: uint8(255), + 1556: uint8(255), + 1557: uint8(255), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1596: uint8(224), + 1597: uint8(135), + 1598: uint8(3), + 1599: uint8(254), + 1614: uint8(1), + 1615: uint8(128), + 1632: uint8(255), + 1633: uint8(255), + 1634: uint8(255), + 1635: uint8(255), + 1636: uint8(255), + 1637: uint8(127), + 1638: uint8(255), + 1639: uint8(255), + 1640: uint8(255), + 1641: uint8(255), + 1648: uint8(255), + 1649: uint8(255), + 1650: uint8(255), + 1651: uint8(251), + 1652: uint8(255), + 1653: uint8(255), + 1654: uint8(255), + 1655: uint8(255), + 1656: uint8(255), + 1657: uint8(255), + 1658: uint8(255), + 1659: uint8(255), + 1660: uint8(255), + 1661: uint8(255), + 1662: uint8(15), + 1664: uint8(255), + 1665: uint8(255), + 1666: uint8(255), + 1667: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1670: uint8(255), + 1671: uint8(255), + 1672: uint8(255), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(255), + 1683: uint8(255), + 1684: uint8(255), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(63), + 1694: uint8(255), + 1695: uint8(15), + 1696: uint8(30), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(1), + 1701: uint8(252), + 1702: uint8(193), + 1703: uint8(224), + 1715: uint8(30), + 1716: uint8(1), + 1727: uint8(8), + 1746: uint8(255), + 1747: uint8(255), + 1752: uint8(255), + 1753: uint8(255), + 1754: uint8(255), + 1755: uint8(255), + 1756: uint8(15), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(127), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1790: uint8(255), + 1791: uint8(255), + 1816: uint8(255), + 1817: uint8(255), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(127), + 1855: uint8(192), + 1857: uint8(224), + 1869: uint8(128), + 1870: uint8(15), + 1871: uint8(112), + 1886: uint8(255), + 1888: uint8(255), + 1889: uint8(255), + 1890: uint8(127), + 1892: uint8(3), + 1905: uint8(6), + 1920: uint8(64), + 1925: uint8(15), + 1926: uint8(255), + 1927: uint8(3), + 1934: uint8(240), + 1944: uint8(16), + 1945: uint8(192), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(3), + 1951: uint8(23), + 1957: uint8(248), + 1962: uint8(8), + 1963: uint8(128), + 1974: uint8(8), + 1976: uint8(255), + 1977: uint8(63), + 1979: uint8(192), + 1995: uint8(240), + 1998: uint8(128), + 1999: uint8(3), + 2007: uint8(128), + 2008: uint8(2), + 2011: uint8(192), + 2014: uint8(67), + 2027: uint8(8), + 2045: uint8(56), + 2048: uint8(1), + 2111: uint8(128), + 2117: uint8(2), + 2134: uint8(252), + 2135: uint8(255), + 2136: uint8(3), + 2151: uint8(192), + 2175: uint8(48), + 2176: uint8(255), + 2177: uint8(255), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(255), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(255), + 2184: uint8(255), + 2185: uint8(255), + 2186: uint8(247), + 2187: uint8(255), + 2188: uint8(127), + 2189: uint8(15), + 2207: uint8(128), + 2208: uint8(254), + 2209: uint8(255), + 2211: uint8(252), + 2212: uint8(1), + 2215: uint8(248), + 2216: uint8(1), + 2219: uint8(248), + 2220: uint8(63), + 2236: uint8(127), + 2237: uint8(127), + 2239: uint8(48), + 2240: uint8(135), + 2241: uint8(255), + 2242: uint8(255), + 2243: uint8(255), + 2244: uint8(255), + 2245: uint8(255), + 2246: uint8(143), + 2247: uint8(255), + 2254: uint8(224), + 2255: uint8(255), + 2256: uint8(255), + 2257: uint8(127), + 2258: uint8(255), + 2259: uint8(15), + 2260: uint8(1), + 2266: uint8(255), + 2267: uint8(255), + 2268: uint8(255), + 2269: uint8(255), + 2270: uint8(255), + 2271: uint8(63), + 2300: uint8(255), + 2301: uint8(255), + 2302: uint8(255), + 2303: uint8(15), + 2308: uint8(15), + 2323: uint8(128), + 2330: uint8(1), + 2349: uint8(128), + 2378: uint8(128), + 2379: uint8(255), + 2382: uint8(128), + 2383: uint8(255), + 2388: uint8(128), + 2389: uint8(255), + 2399: uint8(248), + 2402: uint8(192), + 2403: uint8(143), + 2407: uint8(128), + 2423: uint8(48), + 2424: uint8(255), + 2425: uint8(255), + 2426: uint8(252), + 2427: uint8(255), + 2428: uint8(255), + 2429: uint8(255), + 2430: uint8(255), + 2431: uint8(255), + 2439: uint8(135), + 2440: uint8(255), + 2441: uint8(1), + 2442: uint8(255), + 2443: uint8(1), + 2447: uint8(224), + 2451: uint8(224), + 2457: uint8(1), + 2460: uint8(96), + 2461: uint8(248), + 2462: uint8(127), + 2471: uint8(254), + 2475: uint8(255), + 2479: uint8(255), + 2483: uint8(30), + 2485: uint8(254), + 2527: uint8(252), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(255), + 2543: uint8(127), + 2563: uint8(224), + 2564: uint8(127), + 2568: uint8(192), + 2569: uint8(255), + 2570: uint8(255), + 2571: uint8(3), + 2600: uint8(192), + 2601: uint8(63), + 2602: uint8(252), + 2603: uint8(255), + 2604: uint8(63), + 2607: uint8(128), + 2608: uint8(3), + 2615: uint8(254), + 2616: uint8(3), + 2617: uint8(32), + 2630: uint8(24), + 2632: uint8(15), + 2638: uint8(56), + 2648: uint8(225), + 2649: uint8(63), + 2651: uint8(232), + 2652: uint8(254), + 2653: uint8(255), + 2654: uint8(31), + 2662: uint8(96), + 2663: uint8(63), + 2677: uint8(2), + 2685: uint8(6), + 2695: uint8(24), + 2697: uint8(32), + 2700: uint8(192), + 2701: uint8(31), + 2702: uint8(31), + 2728: uint8(68), + 2729: uint8(248), + 2731: uint8(104), + 2744: uint8(76), + 2775: uint8(128), + 2776: uint8(255), + 2777: uint8(255), + 2778: uint8(255), + 2791: uint8(128), + 2792: uint8(14), + 2796: uint8(255), + 2797: uint8(31), + 2806: uint8(192), + 2821: uint8(8), + 2823: uint8(252), + 2855: uint8(14), + 2877: uint8(252), + 2878: uint8(7), + 2908: uint8(5), + 2918: uint8(24), + 2919: uint8(128), + 2920: uint8(255), + 2931: uint8(223), + 2932: uint8(7), + 2951: uint8(128), + 2952: uint8(62), + 2955: uint8(252), + 2956: uint8(255), + 2957: uint8(31), + 2958: uint8(3), + 2984: uint8(52), + 2994: uint8(128), + 3038: uint8(128), + 3039: uint8(1), + 3064: uint8(255), + 3065: uint8(255), + 3066: uint8(255), + 3067: uint8(255), + 3068: uint8(255), + 3069: uint8(255), + 3070: uint8(3), + 3071: uint8(128), + 3086: uint8(31), + 3110: uint8(255), + 3111: uint8(1), + 3149: uint8(192), + 3166: uint8(63), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(48), + 3179: uint8(248), + 3180: uint8(3), + 3216: uint8(255), + 3217: uint8(255), + 3218: uint8(255), + 3219: uint8(7), + 3260: uint8(4), + 3283: uint8(176), + 3284: uint8(15), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3302: uint8(255), + 3303: uint8(255), + 3304: uint8(255), + 3305: uint8(255), + 3306: uint8(255), + 3307: uint8(255), + 3308: uint8(255), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(255), + 3312: uint8(255), + 3313: uint8(255), + 3314: uint8(255), + 3315: uint8(255), + 3316: uint8(255), + 3317: uint8(255), + 3318: uint8(255), + 3319: uint8(255), + 3320: uint8(255), + 3321: uint8(255), + 3322: uint8(255), + 3323: uint8(255), + 3324: uint8(255), + 3325: uint8(255), + 3326: uint8(63), + 3328: uint8(255), + 3329: uint8(255), + 3330: uint8(255), + 3331: uint8(255), + 3332: uint8(127), + 3333: uint8(254), + 3334: uint8(255), + 3335: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3344: uint8(255), + 3345: uint8(255), + 3346: uint8(255), + 3347: uint8(255), + 3348: uint8(255), + 3349: uint8(255), + 3350: uint8(255), + 3351: uint8(255), + 3352: uint8(255), + 3353: uint8(255), + 3354: uint8(255), + 3355: uint8(255), + 3356: uint8(255), + 3357: uint8(1), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(63), + 3388: uint8(255), + 3389: uint8(255), + 3390: uint8(15), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(127), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(1), + 3448: uint8(2), + 3451: uint8(8), + 3455: uint8(8), + 3458: uint8(32), + 3462: uint8(32), + 3465: uint8(128), + 3469: uint8(128), + 3473: uint8(2), + 3477: uint8(2), + 3480: uint8(8), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(15), + 3507: uint8(248), + 3508: uint8(254), + 3509: uint8(255), + 3526: uint8(127), + 3529: uint8(128), + 3581: uint8(240), + 3583: uint8(128), + 3608: uint8(128), + 3609: uint8(255), + 3610: uint8(127), + 3624: uint8(112), + 3625: uint8(7), + 3627: uint8(192), + 3662: uint8(254), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(255), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(255), + 3670: uint8(31), + 3680: uint8(254), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(255), + 3684: uint8(255), + 3685: uint8(255), + 3686: uint8(255), + 3687: uint8(63), + 3742: uint8(3), + 3744: uint8(255), + 3745: uint8(255), + 3746: uint8(255), + 3747: uint8(255), + 3748: uint8(255), + 3749: uint8(15), + 3750: uint8(255), + 3751: uint8(255), + 3752: uint8(255), + 3753: uint8(255), + 3754: uint8(255), + 3755: uint8(255), + 3756: uint8(255), + 3757: uint8(255), + 3758: uint8(255), + 3759: uint8(255), + 3760: uint8(255), + 3761: uint8(255), + 3762: uint8(15), + 3764: uint8(255), + 3765: uint8(127), + 3766: uint8(254), + 3767: uint8(255), + 3768: uint8(254), + 3769: uint8(255), + 3770: uint8(254), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(255), + 3774: uint8(63), + 3776: uint8(255), + 3777: uint8(31), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3785: uint8(252), + 3789: uint8(28), + 3793: uint8(252), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(31), + 3804: uint8(192), + 3805: uint8(255), + 3806: uint8(255), + 3807: uint8(255), + 3808: uint8(7), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(15), + 3816: uint8(255), + 3817: uint8(1), + 3818: uint8(3), + 3820: uint8(63), + 3840: uint8(255), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(255), + 3845: uint8(255), + 3846: uint8(255), + 3847: uint8(255), + 3848: uint8(255), + 3849: uint8(255), + 3850: uint8(255), + 3851: uint8(255), + 3852: uint8(255), + 3853: uint8(255), + 3854: uint8(255), + 3855: uint8(255), + 3856: uint8(255), + 3857: uint8(255), + 3858: uint8(255), + 3859: uint8(255), + 3860: uint8(255), + 3861: uint8(255), + 3862: uint8(255), + 3863: uint8(255), + 3864: uint8(255), + 3865: uint8(255), + 3866: uint8(63), + 3868: uint8(255), + 3869: uint8(31), + 3870: uint8(255), + 3871: uint8(7), + 3872: uint8(255), + 3873: uint8(255), + 3874: uint8(255), + 3875: uint8(255), + 3876: uint8(255), + 3877: uint8(255), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(255), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(255), + 3886: uint8(15), + 3888: uint8(255), + 3889: uint8(255), + 3890: uint8(255), + 3891: uint8(255), + 3892: uint8(255), + 3893: uint8(255), + 3894: uint8(255), + 3895: uint8(255), + 3896: uint8(255), + 3897: uint8(255), + 3898: uint8(255), + 3899: uint8(1), + 3900: uint8(255), + 3901: uint8(15), + 3904: uint8(255), + 3905: uint8(15), + 3906: uint8(255), + 3907: uint8(255), + 3908: uint8(255), + 3909: uint8(255), + 3910: uint8(255), + 3911: uint8(255), + 3912: uint8(255), + 3914: uint8(255), + 3915: uint8(3), + 3916: uint8(255), + 3917: uint8(255), + 3918: uint8(255), + 3919: uint8(255), + 3920: uint8(255), + 3922: uint8(255), + 3923: uint8(255), + 3924: uint8(255), + 3925: uint8(63), + 3936: uint8(255), + 3937: uint8(239), + 3938: uint8(255), + 3939: uint8(255), + 3940: uint8(255), + 3941: uint8(255), + 3942: uint8(255), + 3943: uint8(255), + 3944: uint8(255), + 3945: uint8(255), + 3946: uint8(255), + 3947: uint8(255), + 3948: uint8(255), + 3949: uint8(255), + 3950: uint8(123), + 3951: uint8(252), + 3952: uint8(255), + 3953: uint8(255), + 3954: uint8(255), + 3955: uint8(255), + 3956: uint8(231), + 3957: uint8(199), + 3958: uint8(255), + 3959: uint8(255), + 3960: uint8(255), + 3961: uint8(231), + 3962: uint8(255), + 3963: uint8(255), + 3964: uint8(255), + 3965: uint8(255), + 3966: uint8(255), + 3967: uint8(255), + 3968: uint8(255), + 3969: uint8(255), + 3970: uint8(255), + 3971: uint8(255), + 3972: uint8(255), + 3973: uint8(255), + 3974: uint8(255), + 3975: uint8(255), + 3976: uint8(255), + 3977: uint8(255), + 3978: uint8(15), + 3980: uint8(255), + 3981: uint8(63), + 3982: uint8(15), + 3983: uint8(7), + 3984: uint8(7), + 3986: uint8(63), +} + +func Xiswpunct(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table4[uint32(int32(_table4[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + return 0 +} + +func X__iswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswpunct(tls, c) +} + +func Xiswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswpunct_l(tls, c, l) +} + +type Tmbstate_t = struct { + F__opaque1 uint32 + F__opaque2 uint32 +} + +type t__mbstate_t = Tmbstate_t + +/* Our definition of whitespace is the Unicode White_Space property, + * minus non-breaking spaces (U+00A0, U+2007, and U+202F) and script- + * specific characters with non-blank glyphs (U+1680 and U+180E). */ + +func Xiswspace(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc != 0 && Xwcschr(tls, uintptr(unsafe.Pointer(&_spaces)), int32(wc)) != 0) +} + +var _spaces = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__iswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswspace(tls, c) +} + +func Xiswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswspace_l(tls, c, l) +} + +func Xiswupper(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowlower(tls, wc) != wc) +} + +func X__iswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswupper(tls, c) +} + +func Xiswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswupper_l(tls, c, l) +} + +func Xiswxdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-Uint32FromUint8('0') < uint32(10) || wc|Uint32FromInt32(32)-Uint32FromUint8('a') < uint32(6)) +} + +func X__iswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswxdigit(tls, c) +} + +func Xiswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswxdigit_l(tls, c, l) +} + +func Xisxdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) +} + +func X__isxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisxdigit(tls, c) +} + +func Xisxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isxdigit_l(tls, c, l) +} + +// C documentation +// +// /* nonsense function that should NEVER be used! */ +func Xtoascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return c & int32(0x7f) +} + +func Xtolower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('A') < uint32(26)) != 0 { + return c | int32(32) + } + return c +} + +func X__tolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtolower(tls, c) +} + +func Xtolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__tolower_l(tls, c, l) +} + +func Xtoupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('a') < uint32(26)) != 0 { + return c & int32(0x5f) + } + return c +} + +func X__toupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtoupper(tls, c) +} + +func Xtoupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__toupper_l(tls, c, l) +} + +var _tab1 = [2666]uint8{ + 0: uint8(7), + 1: uint8(8), + 2: uint8(9), + 3: uint8(10), + 4: uint8(11), + 5: uint8(12), + 6: uint8(6), + 7: uint8(6), + 8: uint8(6), + 9: uint8(6), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), + 13: uint8(6), + 14: uint8(6), + 15: uint8(6), + 16: uint8(13), + 17: uint8(6), + 18: uint8(6), + 19: uint8(14), + 20: uint8(6), + 21: uint8(6), + 22: uint8(6), + 23: uint8(6), + 24: uint8(6), + 25: uint8(6), + 26: uint8(6), + 27: uint8(6), + 28: uint8(15), + 29: uint8(16), + 30: uint8(17), + 31: uint8(18), + 32: uint8(6), + 33: uint8(19), + 34: uint8(6), + 35: uint8(6), + 36: uint8(6), + 37: uint8(6), + 38: uint8(6), + 39: uint8(6), + 40: uint8(6), + 41: uint8(6), + 42: uint8(6), + 43: uint8(6), + 44: uint8(20), + 45: uint8(21), + 46: uint8(6), + 47: uint8(6), + 48: uint8(6), + 49: uint8(6), + 50: uint8(6), + 51: uint8(6), + 52: uint8(6), + 53: uint8(6), + 54: uint8(6), + 55: uint8(6), + 56: uint8(6), + 57: uint8(6), + 58: uint8(6), + 59: uint8(6), + 60: uint8(6), + 61: uint8(6), + 62: uint8(6), + 63: uint8(6), + 64: uint8(6), + 65: uint8(6), + 66: uint8(6), + 67: uint8(6), + 68: uint8(6), + 69: uint8(6), + 70: uint8(6), + 71: uint8(6), + 72: uint8(6), + 73: uint8(6), + 74: uint8(6), + 75: uint8(6), + 76: uint8(6), + 77: uint8(6), + 78: uint8(6), + 79: uint8(6), + 80: uint8(6), + 81: uint8(6), + 82: uint8(6), + 83: uint8(6), + 84: uint8(6), + 85: uint8(6), + 86: uint8(6), + 87: uint8(6), + 88: uint8(6), + 89: uint8(6), + 90: uint8(6), + 91: uint8(6), + 92: uint8(6), + 93: uint8(6), + 94: uint8(6), + 95: uint8(6), + 96: uint8(6), + 97: uint8(6), + 98: uint8(6), + 99: uint8(6), + 100: uint8(6), + 101: uint8(6), + 102: uint8(6), + 103: uint8(6), + 104: uint8(6), + 105: uint8(6), + 106: uint8(6), + 107: uint8(6), + 108: uint8(6), + 109: uint8(6), + 110: uint8(6), + 111: uint8(6), + 112: uint8(6), + 113: uint8(6), + 114: uint8(6), + 115: uint8(6), + 116: uint8(6), + 117: uint8(6), + 118: uint8(6), + 119: uint8(6), + 120: uint8(6), + 121: uint8(6), + 122: uint8(6), + 123: uint8(6), + 124: uint8(6), + 125: uint8(6), + 126: uint8(6), + 127: uint8(6), + 128: uint8(6), + 129: uint8(6), + 130: uint8(6), + 131: uint8(6), + 132: uint8(6), + 133: uint8(6), + 134: uint8(6), + 135: uint8(6), + 136: uint8(6), + 137: uint8(6), + 138: uint8(6), + 139: uint8(6), + 140: uint8(6), + 141: uint8(6), + 142: uint8(6), + 143: uint8(6), + 144: uint8(6), + 145: uint8(6), + 146: uint8(6), + 147: uint8(6), + 148: uint8(6), + 149: uint8(6), + 150: uint8(6), + 151: uint8(6), + 152: uint8(6), + 153: uint8(6), + 154: uint8(6), + 155: uint8(6), + 156: uint8(6), + 157: uint8(6), + 158: uint8(6), + 159: uint8(6), + 160: uint8(6), + 161: uint8(6), + 162: uint8(6), + 163: uint8(6), + 164: uint8(6), + 165: uint8(6), + 166: uint8(22), + 167: uint8(23), + 168: uint8(6), + 169: uint8(6), + 170: uint8(6), + 171: uint8(24), + 172: uint8(6), + 173: uint8(6), + 174: uint8(6), + 175: uint8(6), + 176: uint8(6), + 177: uint8(6), + 178: uint8(6), + 179: uint8(6), + 180: uint8(6), + 181: uint8(6), + 182: uint8(6), + 183: uint8(6), + 184: uint8(6), + 185: uint8(6), + 186: uint8(6), + 187: uint8(6), + 188: uint8(6), + 189: uint8(6), + 190: uint8(6), + 191: uint8(6), + 192: uint8(6), + 193: uint8(6), + 194: uint8(6), + 195: uint8(6), + 196: uint8(6), + 197: uint8(6), + 198: uint8(6), + 199: uint8(6), + 200: uint8(6), + 201: uint8(6), + 202: uint8(6), + 203: uint8(6), + 204: uint8(6), + 205: uint8(6), + 206: uint8(6), + 207: uint8(6), + 208: uint8(6), + 209: uint8(6), + 210: uint8(6), + 211: uint8(6), + 212: uint8(6), + 213: uint8(6), + 214: uint8(6), + 215: uint8(6), + 216: uint8(6), + 217: uint8(6), + 218: uint8(6), + 219: uint8(6), + 220: uint8(6), + 221: uint8(6), + 222: uint8(6), + 223: uint8(6), + 224: uint8(6), + 225: uint8(6), + 226: uint8(6), + 227: uint8(6), + 228: uint8(6), + 229: uint8(6), + 230: uint8(6), + 231: uint8(6), + 232: uint8(6), + 233: uint8(6), + 234: uint8(6), + 235: uint8(6), + 236: uint8(6), + 237: uint8(6), + 238: uint8(6), + 239: uint8(6), + 240: uint8(6), + 241: uint8(6), + 242: uint8(6), + 243: uint8(6), + 244: uint8(6), + 245: uint8(6), + 246: uint8(6), + 247: uint8(6), + 248: uint8(6), + 249: uint8(6), + 250: uint8(6), + 251: uint8(6), + 252: uint8(6), + 253: uint8(6), + 254: uint8(6), + 255: uint8(25), + 256: uint8(6), + 257: uint8(6), + 258: uint8(6), + 259: uint8(6), + 260: uint8(26), + 261: uint8(6), + 262: uint8(6), + 263: uint8(6), + 264: uint8(6), + 265: uint8(6), + 266: uint8(6), + 267: uint8(6), + 268: uint8(27), + 269: uint8(6), + 270: uint8(6), + 271: uint8(6), + 272: uint8(6), + 273: uint8(6), + 274: uint8(6), + 275: uint8(6), + 276: uint8(6), + 277: uint8(6), + 278: uint8(6), + 279: uint8(6), + 280: uint8(28), + 281: uint8(6), + 282: uint8(6), + 283: uint8(6), + 284: uint8(6), + 285: uint8(6), + 286: uint8(6), + 287: uint8(6), + 288: uint8(6), + 289: uint8(6), + 290: uint8(6), + 291: uint8(6), + 292: uint8(6), + 293: uint8(6), + 294: uint8(6), + 295: uint8(6), + 296: uint8(6), + 297: uint8(6), + 298: uint8(6), + 299: uint8(6), + 300: uint8(6), + 301: uint8(6), + 302: uint8(6), + 303: uint8(6), + 304: uint8(6), + 305: uint8(6), + 306: uint8(6), + 307: uint8(6), + 308: uint8(6), + 309: uint8(6), + 310: uint8(6), + 311: uint8(6), + 312: uint8(6), + 313: uint8(6), + 314: uint8(6), + 315: uint8(6), + 316: uint8(6), + 317: uint8(6), + 318: uint8(6), + 319: uint8(6), + 320: uint8(6), + 321: uint8(6), + 322: uint8(6), + 323: uint8(6), + 324: uint8(6), + 325: uint8(6), + 326: uint8(6), + 327: uint8(6), + 328: uint8(6), + 329: uint8(6), + 330: uint8(6), + 331: uint8(6), + 332: uint8(6), + 333: uint8(6), + 334: uint8(6), + 335: uint8(6), + 336: uint8(6), + 337: uint8(6), + 338: uint8(6), + 339: uint8(6), + 340: uint8(6), + 341: uint8(6), + 342: uint8(6), + 343: uint8(6), + 344: uint8(6), + 345: uint8(6), + 346: uint8(6), + 347: uint8(6), + 348: uint8(6), + 349: uint8(6), + 350: uint8(6), + 351: uint8(6), + 352: uint8(6), + 353: uint8(6), + 354: uint8(6), + 355: uint8(6), + 356: uint8(6), + 357: uint8(6), + 358: uint8(6), + 359: uint8(6), + 360: uint8(6), + 361: uint8(6), + 362: uint8(6), + 363: uint8(6), + 364: uint8(6), + 365: uint8(6), + 366: uint8(29), + 367: uint8(6), + 368: uint8(6), + 369: uint8(6), + 370: uint8(6), + 371: uint8(6), + 372: uint8(6), + 373: uint8(6), + 374: uint8(6), + 375: uint8(6), + 376: uint8(6), + 377: uint8(6), + 378: uint8(6), + 379: uint8(6), + 380: uint8(6), + 381: uint8(6), + 382: uint8(6), + 383: uint8(6), + 384: uint8(6), + 385: uint8(6), + 386: uint8(6), + 387: uint8(6), + 388: uint8(6), + 389: uint8(6), + 390: uint8(6), + 391: uint8(6), + 392: uint8(6), + 393: uint8(6), + 394: uint8(6), + 395: uint8(6), + 396: uint8(6), + 397: uint8(6), + 398: uint8(6), + 399: uint8(6), + 400: uint8(6), + 401: uint8(6), + 402: uint8(6), + 403: uint8(6), + 404: uint8(6), + 405: uint8(6), + 406: uint8(6), + 407: uint8(6), + 408: uint8(6), + 409: uint8(6), + 410: uint8(6), + 411: uint8(6), + 412: uint8(6), + 413: uint8(6), + 414: uint8(6), + 415: uint8(6), + 416: uint8(6), + 417: uint8(6), + 418: uint8(6), + 419: uint8(6), + 420: uint8(6), + 421: uint8(6), + 422: uint8(6), + 423: uint8(6), + 424: uint8(6), + 425: uint8(6), + 426: uint8(6), + 427: uint8(6), + 428: uint8(6), + 429: uint8(6), + 430: uint8(6), + 431: uint8(6), + 432: uint8(6), + 433: uint8(6), + 434: uint8(6), + 435: uint8(6), + 436: uint8(6), + 437: uint8(6), + 438: uint8(6), + 439: uint8(6), + 440: uint8(6), + 441: uint8(6), + 442: uint8(6), + 443: uint8(6), + 444: uint8(6), + 445: uint8(6), + 446: uint8(6), + 447: uint8(6), + 448: uint8(6), + 449: uint8(6), + 450: uint8(6), + 451: uint8(6), + 452: uint8(6), + 453: uint8(6), + 454: uint8(6), + 455: uint8(6), + 456: uint8(6), + 457: uint8(6), + 458: uint8(6), + 459: uint8(6), + 460: uint8(6), + 461: uint8(6), + 462: uint8(6), + 463: uint8(6), + 464: uint8(6), + 465: uint8(6), + 466: uint8(6), + 467: uint8(6), + 468: uint8(6), + 469: uint8(6), + 470: uint8(6), + 471: uint8(6), + 472: uint8(6), + 473: uint8(6), + 474: uint8(6), + 475: uint8(6), + 476: uint8(6), + 477: uint8(6), + 478: uint8(6), + 479: uint8(6), + 480: uint8(6), + 481: uint8(6), + 482: uint8(6), + 483: uint8(6), + 484: uint8(6), + 485: uint8(6), + 486: uint8(6), + 487: uint8(6), + 488: uint8(6), + 489: uint8(30), + 490: uint8(6), + 491: uint8(6), + 492: uint8(6), + 493: uint8(6), + 494: uint8(6), + 495: uint8(6), + 496: uint8(6), + 497: uint8(6), + 498: uint8(6), + 499: uint8(6), + 500: uint8(6), + 501: uint8(6), + 502: uint8(6), + 503: uint8(6), + 504: uint8(6), + 505: uint8(6), + 506: uint8(6), + 507: uint8(6), + 508: uint8(6), + 509: uint8(6), + 510: uint8(6), + 511: uint8(6), + 623: uint8(36), + 624: uint8(43), + 625: uint8(43), + 626: uint8(43), + 627: uint8(43), + 628: uint8(43), + 629: uint8(43), + 630: uint8(43), + 631: uint8(43), + 632: uint8(1), + 634: uint8(84), + 635: uint8(86), + 636: uint8(86), + 637: uint8(86), + 638: uint8(86), + 639: uint8(86), + 640: uint8(86), + 641: uint8(86), + 642: uint8(86), + 662: uint8(24), + 666: uint8(43), + 667: uint8(43), + 668: uint8(43), + 669: uint8(43), + 670: uint8(43), + 671: uint8(43), + 672: uint8(43), + 673: uint8(7), + 674: uint8(43), + 675: uint8(43), + 676: uint8(91), + 677: uint8(86), + 678: uint8(86), + 679: uint8(86), + 680: uint8(86), + 681: uint8(86), + 682: uint8(86), + 683: uint8(86), + 684: uint8(74), + 685: uint8(86), + 686: uint8(86), + 687: uint8(5), + 688: uint8(49), + 689: uint8(80), + 690: uint8(49), + 691: uint8(80), + 692: uint8(49), + 693: uint8(80), + 694: uint8(49), + 695: uint8(80), + 696: uint8(49), + 697: uint8(80), + 698: uint8(49), + 699: uint8(80), + 700: uint8(49), + 701: uint8(80), + 702: uint8(49), + 703: uint8(80), + 704: uint8(36), + 705: uint8(80), + 706: uint8(121), + 707: uint8(49), + 708: uint8(80), + 709: uint8(49), + 710: uint8(80), + 711: uint8(49), + 712: uint8(56), + 713: uint8(80), + 714: uint8(49), + 715: uint8(80), + 716: uint8(49), + 717: uint8(80), + 718: uint8(49), + 719: uint8(80), + 720: uint8(49), + 721: uint8(80), + 722: uint8(49), + 723: uint8(80), + 724: uint8(49), + 725: uint8(80), + 726: uint8(49), + 727: uint8(80), + 728: uint8(78), + 729: uint8(49), + 730: uint8(2), + 731: uint8(78), + 732: uint8(13), + 733: uint8(13), + 734: uint8(78), + 735: uint8(3), + 736: uint8(78), + 738: uint8(36), + 739: uint8(110), + 741: uint8(78), + 742: uint8(49), + 743: uint8(38), + 744: uint8(110), + 745: uint8(81), + 746: uint8(78), + 747: uint8(36), + 748: uint8(80), + 749: uint8(78), + 750: uint8(57), + 751: uint8(20), + 752: uint8(129), + 753: uint8(27), + 754: uint8(29), + 755: uint8(29), + 756: uint8(83), + 757: uint8(49), + 758: uint8(80), + 759: uint8(49), + 760: uint8(80), + 761: uint8(13), + 762: uint8(49), + 763: uint8(80), + 764: uint8(49), + 765: uint8(80), + 766: uint8(49), + 767: uint8(80), + 768: uint8(27), + 769: uint8(83), + 770: uint8(36), + 771: uint8(80), + 772: uint8(49), + 773: uint8(2), + 774: uint8(92), + 775: uint8(123), + 776: uint8(92), + 777: uint8(123), + 778: uint8(92), + 779: uint8(123), + 780: uint8(92), + 781: uint8(123), + 782: uint8(92), + 783: uint8(123), + 784: uint8(20), + 785: uint8(121), + 786: uint8(92), + 787: uint8(123), + 788: uint8(92), + 789: uint8(123), + 790: uint8(92), + 791: uint8(45), + 792: uint8(43), + 793: uint8(73), + 794: uint8(3), + 795: uint8(72), + 796: uint8(3), + 797: uint8(120), + 798: uint8(92), + 799: uint8(123), + 800: uint8(20), + 802: uint8(150), + 803: uint8(10), + 804: uint8(1), + 805: uint8(43), + 806: uint8(40), + 807: uint8(6), + 808: uint8(6), + 810: uint8(42), + 811: uint8(6), + 812: uint8(42), + 813: uint8(42), + 814: uint8(43), + 815: uint8(7), + 816: uint8(187), + 817: uint8(181), + 818: uint8(43), + 819: uint8(30), + 821: uint8(43), + 822: uint8(7), + 823: uint8(43), + 824: uint8(43), + 825: uint8(43), + 826: uint8(1), + 827: uint8(43), + 828: uint8(43), + 829: uint8(43), + 830: uint8(43), + 831: uint8(43), + 832: uint8(43), + 833: uint8(43), + 834: uint8(43), + 835: uint8(43), + 836: uint8(43), + 837: uint8(43), + 838: uint8(43), + 839: uint8(43), + 840: uint8(43), + 841: uint8(43), + 842: uint8(43), + 843: uint8(43), + 844: uint8(43), + 845: uint8(43), + 846: uint8(43), + 847: uint8(43), + 848: uint8(43), + 849: uint8(43), + 850: uint8(43), + 851: uint8(43), + 852: uint8(43), + 853: uint8(43), + 854: uint8(43), + 855: uint8(43), + 856: uint8(43), + 857: uint8(43), + 858: uint8(43), + 859: uint8(1), + 860: uint8(43), + 861: uint8(43), + 862: uint8(43), + 863: uint8(43), + 864: uint8(43), + 865: uint8(43), + 866: uint8(43), + 867: uint8(43), + 868: uint8(43), + 869: uint8(43), + 870: uint8(43), + 871: uint8(43), + 872: uint8(43), + 873: uint8(43), + 874: uint8(43), + 875: uint8(43), + 876: uint8(43), + 877: uint8(43), + 878: uint8(43), + 879: uint8(43), + 880: uint8(43), + 881: uint8(43), + 882: uint8(43), + 883: uint8(42), + 884: uint8(43), + 885: uint8(43), + 886: uint8(43), + 887: uint8(43), + 888: uint8(43), + 889: uint8(43), + 890: uint8(43), + 891: uint8(43), + 892: uint8(43), + 893: uint8(43), + 894: uint8(43), + 895: uint8(43), + 896: uint8(43), + 897: uint8(205), + 898: uint8(70), + 899: uint8(205), + 900: uint8(43), + 902: uint8(37), + 903: uint8(43), + 904: uint8(7), + 905: uint8(1), + 906: uint8(6), + 907: uint8(1), + 908: uint8(85), + 909: uint8(86), + 910: uint8(86), + 911: uint8(86), + 912: uint8(86), + 913: uint8(86), + 914: uint8(85), + 915: uint8(86), + 916: uint8(86), + 917: uint8(2), + 918: uint8(36), + 919: uint8(129), + 920: uint8(129), + 921: uint8(129), + 922: uint8(129), + 923: uint8(129), + 924: uint8(21), + 925: uint8(129), + 926: uint8(129), + 927: uint8(129), + 930: uint8(43), + 932: uint8(178), + 933: uint8(209), + 934: uint8(178), + 935: uint8(209), + 936: uint8(178), + 937: uint8(209), + 938: uint8(178), + 939: uint8(209), + 942: uint8(205), + 943: uint8(204), + 944: uint8(1), + 946: uint8(215), + 947: uint8(215), + 948: uint8(215), + 949: uint8(215), + 950: uint8(215), + 951: uint8(131), + 952: uint8(129), + 953: uint8(129), + 954: uint8(129), + 955: uint8(129), + 956: uint8(129), + 957: uint8(129), + 958: uint8(129), + 959: uint8(129), + 960: uint8(129), + 961: uint8(129), + 962: uint8(172), + 963: uint8(172), + 964: uint8(172), + 965: uint8(172), + 966: uint8(172), + 967: uint8(172), + 968: uint8(172), + 969: uint8(172), + 970: uint8(172), + 971: uint8(172), + 972: uint8(28), + 978: uint8(49), + 979: uint8(80), + 980: uint8(49), + 981: uint8(80), + 982: uint8(49), + 983: uint8(80), + 984: uint8(49), + 985: uint8(80), + 986: uint8(49), + 987: uint8(80), + 988: uint8(49), + 989: uint8(2), + 992: uint8(49), + 993: uint8(80), + 994: uint8(49), + 995: uint8(80), + 996: uint8(49), + 997: uint8(80), + 998: uint8(49), + 999: uint8(80), + 1000: uint8(49), + 1001: uint8(80), + 1002: uint8(49), + 1003: uint8(80), + 1004: uint8(49), + 1005: uint8(80), + 1006: uint8(49), + 1007: uint8(80), + 1008: uint8(49), + 1009: uint8(80), + 1010: uint8(78), + 1011: uint8(49), + 1012: uint8(80), + 1013: uint8(49), + 1014: uint8(80), + 1015: uint8(78), + 1016: uint8(49), + 1017: uint8(80), + 1018: uint8(49), + 1019: uint8(80), + 1020: uint8(49), + 1021: uint8(80), + 1022: uint8(49), + 1023: uint8(80), + 1024: uint8(49), + 1025: uint8(80), + 1026: uint8(49), + 1027: uint8(80), + 1028: uint8(49), + 1029: uint8(80), + 1030: uint8(49), + 1031: uint8(2), + 1032: uint8(135), + 1033: uint8(166), + 1034: uint8(135), + 1035: uint8(166), + 1036: uint8(135), + 1037: uint8(166), + 1038: uint8(135), + 1039: uint8(166), + 1040: uint8(135), + 1041: uint8(166), + 1042: uint8(135), + 1043: uint8(166), + 1044: uint8(135), + 1045: uint8(166), + 1046: uint8(135), + 1047: uint8(166), + 1048: uint8(42), + 1049: uint8(43), + 1050: uint8(43), + 1051: uint8(43), + 1052: uint8(43), + 1053: uint8(43), + 1054: uint8(43), + 1055: uint8(43), + 1056: uint8(43), + 1057: uint8(43), + 1058: uint8(43), + 1059: uint8(43), + 1060: uint8(43), + 1064: uint8(84), + 1065: uint8(86), + 1066: uint8(86), + 1067: uint8(86), + 1068: uint8(86), + 1069: uint8(86), + 1070: uint8(86), + 1071: uint8(86), + 1072: uint8(86), + 1073: uint8(86), + 1074: uint8(86), + 1075: uint8(86), + 1076: uint8(86), + 1171: uint8(84), + 1172: uint8(86), + 1173: uint8(86), + 1174: uint8(86), + 1175: uint8(86), + 1176: uint8(86), + 1177: uint8(86), + 1178: uint8(86), + 1179: uint8(86), + 1180: uint8(86), + 1181: uint8(86), + 1182: uint8(86), + 1183: uint8(86), + 1184: uint8(12), + 1186: uint8(12), + 1187: uint8(42), + 1188: uint8(43), + 1189: uint8(43), + 1190: uint8(43), + 1191: uint8(43), + 1192: uint8(43), + 1193: uint8(43), + 1194: uint8(43), + 1195: uint8(43), + 1196: uint8(43), + 1197: uint8(43), + 1198: uint8(43), + 1199: uint8(43), + 1200: uint8(43), + 1201: uint8(7), + 1202: uint8(42), + 1203: uint8(1), + 1257: uint8(42), + 1258: uint8(43), + 1259: uint8(43), + 1260: uint8(43), + 1261: uint8(43), + 1262: uint8(43), + 1263: uint8(43), + 1264: uint8(43), + 1265: uint8(43), + 1266: uint8(43), + 1267: uint8(43), + 1268: uint8(43), + 1269: uint8(43), + 1270: uint8(43), + 1271: uint8(43), + 1272: uint8(43), + 1273: uint8(43), + 1274: uint8(43), + 1275: uint8(43), + 1276: uint8(43), + 1277: uint8(43), + 1278: uint8(43), + 1279: uint8(43), + 1280: uint8(43), + 1281: uint8(43), + 1282: uint8(43), + 1283: uint8(43), + 1284: uint8(86), + 1285: uint8(86), + 1286: uint8(108), + 1287: uint8(129), + 1288: uint8(21), + 1290: uint8(43), + 1291: uint8(43), + 1292: uint8(43), + 1293: uint8(43), + 1294: uint8(43), + 1295: uint8(43), + 1296: uint8(43), + 1297: uint8(43), + 1298: uint8(43), + 1299: uint8(43), + 1300: uint8(43), + 1301: uint8(43), + 1302: uint8(43), + 1303: uint8(43), + 1304: uint8(43), + 1305: uint8(43), + 1306: uint8(43), + 1307: uint8(43), + 1308: uint8(43), + 1309: uint8(43), + 1310: uint8(43), + 1311: uint8(43), + 1312: uint8(43), + 1313: uint8(43), + 1314: uint8(43), + 1315: uint8(43), + 1316: uint8(43), + 1317: uint8(43), + 1318: uint8(43), + 1319: uint8(43), + 1320: uint8(43), + 1321: uint8(43), + 1322: uint8(43), + 1323: uint8(43), + 1324: uint8(43), + 1325: uint8(43), + 1326: uint8(43), + 1327: uint8(43), + 1328: uint8(43), + 1329: uint8(43), + 1330: uint8(43), + 1331: uint8(43), + 1332: uint8(7), + 1333: uint8(108), + 1334: uint8(3), + 1335: uint8(65), + 1336: uint8(43), + 1337: uint8(43), + 1338: uint8(86), + 1339: uint8(86), + 1340: uint8(86), + 1341: uint8(86), + 1342: uint8(86), + 1343: uint8(86), + 1344: uint8(86), + 1345: uint8(86), + 1346: uint8(86), + 1347: uint8(86), + 1348: uint8(86), + 1349: uint8(86), + 1350: uint8(86), + 1351: uint8(86), + 1352: uint8(44), + 1353: uint8(86), + 1354: uint8(43), + 1355: uint8(43), + 1356: uint8(43), + 1357: uint8(43), + 1358: uint8(43), + 1359: uint8(43), + 1360: uint8(43), + 1361: uint8(43), + 1362: uint8(43), + 1363: uint8(43), + 1364: uint8(43), + 1365: uint8(43), + 1366: uint8(43), + 1367: uint8(43), + 1368: uint8(43), + 1369: uint8(43), + 1370: uint8(43), + 1371: uint8(43), + 1372: uint8(43), + 1373: uint8(43), + 1374: uint8(43), + 1375: uint8(1), + 1416: uint8(12), + 1417: uint8(108), + 1423: uint8(6), + 1462: uint8(6), + 1463: uint8(37), + 1464: uint8(6), + 1465: uint8(37), + 1466: uint8(6), + 1467: uint8(37), + 1468: uint8(6), + 1469: uint8(37), + 1470: uint8(6), + 1471: uint8(37), + 1472: uint8(6), + 1473: uint8(37), + 1474: uint8(6), + 1475: uint8(37), + 1476: uint8(6), + 1477: uint8(37), + 1478: uint8(6), + 1479: uint8(37), + 1480: uint8(6), + 1481: uint8(37), + 1482: uint8(6), + 1483: uint8(37), + 1484: uint8(6), + 1485: uint8(37), + 1486: uint8(6), + 1487: uint8(37), + 1488: uint8(6), + 1489: uint8(37), + 1490: uint8(6), + 1491: uint8(37), + 1492: uint8(6), + 1493: uint8(37), + 1494: uint8(6), + 1495: uint8(37), + 1496: uint8(6), + 1497: uint8(37), + 1498: uint8(6), + 1499: uint8(37), + 1500: uint8(6), + 1501: uint8(37), + 1502: uint8(6), + 1503: uint8(37), + 1504: uint8(6), + 1505: uint8(37), + 1506: uint8(6), + 1507: uint8(37), + 1508: uint8(6), + 1509: uint8(37), + 1510: uint8(6), + 1511: uint8(37), + 1512: uint8(86), + 1513: uint8(122), + 1514: uint8(158), + 1515: uint8(38), + 1516: uint8(6), + 1517: uint8(37), + 1518: uint8(6), + 1519: uint8(37), + 1520: uint8(6), + 1521: uint8(37), + 1522: uint8(6), + 1523: uint8(37), + 1524: uint8(6), + 1525: uint8(37), + 1526: uint8(6), + 1527: uint8(37), + 1528: uint8(6), + 1529: uint8(37), + 1530: uint8(6), + 1531: uint8(37), + 1532: uint8(6), + 1533: uint8(37), + 1534: uint8(6), + 1535: uint8(37), + 1536: uint8(6), + 1537: uint8(37), + 1538: uint8(6), + 1539: uint8(37), + 1540: uint8(6), + 1541: uint8(37), + 1542: uint8(6), + 1543: uint8(37), + 1544: uint8(6), + 1545: uint8(37), + 1546: uint8(6), + 1547: uint8(1), + 1548: uint8(43), + 1549: uint8(43), + 1550: uint8(79), + 1551: uint8(86), + 1552: uint8(86), + 1553: uint8(44), + 1554: uint8(43), + 1555: uint8(127), + 1556: uint8(86), + 1557: uint8(86), + 1558: uint8(57), + 1559: uint8(43), + 1560: uint8(43), + 1561: uint8(85), + 1562: uint8(86), + 1563: uint8(86), + 1564: uint8(43), + 1565: uint8(43), + 1566: uint8(79), + 1567: uint8(86), + 1568: uint8(86), + 1569: uint8(44), + 1570: uint8(43), + 1571: uint8(127), + 1572: uint8(86), + 1573: uint8(86), + 1574: uint8(129), + 1575: uint8(55), + 1576: uint8(117), + 1577: uint8(91), + 1578: uint8(123), + 1579: uint8(92), + 1580: uint8(43), + 1581: uint8(43), + 1582: uint8(79), + 1583: uint8(86), + 1584: uint8(86), + 1585: uint8(2), + 1586: uint8(172), + 1587: uint8(4), + 1590: uint8(57), + 1591: uint8(43), + 1592: uint8(43), + 1593: uint8(85), + 1594: uint8(86), + 1595: uint8(86), + 1596: uint8(43), + 1597: uint8(43), + 1598: uint8(79), + 1599: uint8(86), + 1600: uint8(86), + 1601: uint8(44), + 1602: uint8(43), + 1603: uint8(43), + 1604: uint8(86), + 1605: uint8(86), + 1606: uint8(50), + 1607: uint8(19), + 1608: uint8(129), + 1609: uint8(87), + 1611: uint8(111), + 1612: uint8(129), + 1613: uint8(126), + 1614: uint8(201), + 1615: uint8(215), + 1616: uint8(126), + 1617: uint8(45), + 1618: uint8(129), + 1619: uint8(129), + 1620: uint8(14), + 1621: uint8(126), + 1622: uint8(57), + 1623: uint8(127), + 1624: uint8(111), + 1625: uint8(87), + 1627: uint8(129), + 1628: uint8(129), + 1629: uint8(126), + 1630: uint8(21), + 1632: uint8(126), + 1633: uint8(3), + 1634: uint8(43), + 1635: uint8(43), + 1636: uint8(43), + 1637: uint8(43), + 1638: uint8(43), + 1639: uint8(43), + 1640: uint8(43), + 1641: uint8(43), + 1642: uint8(43), + 1643: uint8(43), + 1644: uint8(43), + 1645: uint8(43), + 1646: uint8(7), + 1647: uint8(43), + 1648: uint8(36), + 1649: uint8(43), + 1650: uint8(151), + 1651: uint8(43), + 1652: uint8(43), + 1653: uint8(43), + 1654: uint8(43), + 1655: uint8(43), + 1656: uint8(43), + 1657: uint8(43), + 1658: uint8(43), + 1659: uint8(43), + 1660: uint8(42), + 1661: uint8(43), + 1662: uint8(43), + 1663: uint8(43), + 1664: uint8(43), + 1665: uint8(43), + 1666: uint8(86), + 1667: uint8(86), + 1668: uint8(86), + 1669: uint8(86), + 1670: uint8(86), + 1671: uint8(128), + 1672: uint8(129), + 1673: uint8(129), + 1674: uint8(129), + 1675: uint8(129), + 1676: uint8(57), + 1677: uint8(187), + 1678: uint8(42), + 1679: uint8(43), + 1680: uint8(43), + 1681: uint8(43), + 1682: uint8(43), + 1683: uint8(43), + 1684: uint8(43), + 1685: uint8(43), + 1686: uint8(43), + 1687: uint8(43), + 1688: uint8(43), + 1689: uint8(43), + 1690: uint8(43), + 1691: uint8(43), + 1692: uint8(43), + 1693: uint8(43), + 1694: uint8(43), + 1695: uint8(43), + 1696: uint8(43), + 1697: uint8(43), + 1698: uint8(43), + 1699: uint8(43), + 1700: uint8(43), + 1701: uint8(43), + 1702: uint8(43), + 1703: uint8(43), + 1704: uint8(43), + 1705: uint8(43), + 1706: uint8(43), + 1707: uint8(43), + 1708: uint8(43), + 1709: uint8(43), + 1710: uint8(43), + 1711: uint8(43), + 1712: uint8(43), + 1713: uint8(43), + 1714: uint8(43), + 1715: uint8(43), + 1716: uint8(43), + 1717: uint8(43), + 1718: uint8(43), + 1719: uint8(1), + 1720: uint8(129), + 1721: uint8(129), + 1722: uint8(129), + 1723: uint8(129), + 1724: uint8(129), + 1725: uint8(129), + 1726: uint8(129), + 1727: uint8(129), + 1728: uint8(129), + 1729: uint8(129), + 1730: uint8(129), + 1731: uint8(129), + 1732: uint8(129), + 1733: uint8(129), + 1734: uint8(129), + 1735: uint8(201), + 1736: uint8(172), + 1737: uint8(172), + 1738: uint8(172), + 1739: uint8(172), + 1740: uint8(172), + 1741: uint8(172), + 1742: uint8(172), + 1743: uint8(172), + 1744: uint8(172), + 1745: uint8(172), + 1746: uint8(172), + 1747: uint8(172), + 1748: uint8(172), + 1749: uint8(172), + 1750: uint8(172), + 1751: uint8(208), + 1752: uint8(13), + 1754: uint8(78), + 1755: uint8(49), + 1756: uint8(2), + 1757: uint8(180), + 1758: uint8(193), + 1759: uint8(193), + 1760: uint8(215), + 1761: uint8(215), + 1762: uint8(36), + 1763: uint8(80), + 1764: uint8(49), + 1765: uint8(80), + 1766: uint8(49), + 1767: uint8(80), + 1768: uint8(49), + 1769: uint8(80), + 1770: uint8(49), + 1771: uint8(80), + 1772: uint8(49), + 1773: uint8(80), + 1774: uint8(49), + 1775: uint8(80), + 1776: uint8(49), + 1777: uint8(80), + 1778: uint8(49), + 1779: uint8(80), + 1780: uint8(49), + 1781: uint8(80), + 1782: uint8(49), + 1783: uint8(80), + 1784: uint8(49), + 1785: uint8(80), + 1786: uint8(49), + 1787: uint8(80), + 1788: uint8(49), + 1789: uint8(80), + 1790: uint8(49), + 1791: uint8(80), + 1792: uint8(49), + 1793: uint8(80), + 1794: uint8(49), + 1795: uint8(80), + 1796: uint8(215), + 1797: uint8(215), + 1798: uint8(83), + 1799: uint8(193), + 1800: uint8(71), + 1801: uint8(212), + 1802: uint8(215), + 1803: uint8(215), + 1804: uint8(215), + 1805: uint8(5), + 1806: uint8(43), + 1807: uint8(43), + 1808: uint8(43), + 1809: uint8(43), + 1810: uint8(43), + 1811: uint8(43), + 1812: uint8(43), + 1813: uint8(43), + 1814: uint8(43), + 1815: uint8(43), + 1816: uint8(43), + 1817: uint8(43), + 1818: uint8(7), + 1819: uint8(1), + 1821: uint8(1), + 1913: uint8(78), + 1914: uint8(49), + 1915: uint8(80), + 1916: uint8(49), + 1917: uint8(80), + 1918: uint8(49), + 1919: uint8(80), + 1920: uint8(49), + 1921: uint8(80), + 1922: uint8(49), + 1923: uint8(80), + 1924: uint8(49), + 1925: uint8(80), + 1926: uint8(49), + 1927: uint8(80), + 1928: uint8(13), + 1934: uint8(36), + 1935: uint8(80), + 1936: uint8(49), + 1937: uint8(80), + 1938: uint8(49), + 1939: uint8(80), + 1940: uint8(49), + 1941: uint8(80), + 1942: uint8(49), + 1943: uint8(80), + 1978: uint8(43), + 1979: uint8(43), + 1980: uint8(43), + 1981: uint8(43), + 1982: uint8(43), + 1983: uint8(43), + 1984: uint8(43), + 1985: uint8(43), + 1986: uint8(43), + 1987: uint8(43), + 1988: uint8(43), + 1989: uint8(121), + 1990: uint8(92), + 1991: uint8(123), + 1992: uint8(92), + 1993: uint8(123), + 1994: uint8(79), + 1995: uint8(123), + 1996: uint8(92), + 1997: uint8(123), + 1998: uint8(92), + 1999: uint8(123), + 2000: uint8(92), + 2001: uint8(123), + 2002: uint8(92), + 2003: uint8(123), + 2004: uint8(92), + 2005: uint8(123), + 2006: uint8(92), + 2007: uint8(123), + 2008: uint8(92), + 2009: uint8(123), + 2010: uint8(92), + 2011: uint8(123), + 2012: uint8(92), + 2013: uint8(123), + 2014: uint8(92), + 2015: uint8(45), + 2016: uint8(43), + 2017: uint8(43), + 2018: uint8(121), + 2019: uint8(20), + 2020: uint8(92), + 2021: uint8(123), + 2022: uint8(92), + 2023: uint8(45), + 2024: uint8(121), + 2025: uint8(42), + 2026: uint8(92), + 2027: uint8(39), + 2028: uint8(92), + 2029: uint8(123), + 2030: uint8(92), + 2031: uint8(123), + 2032: uint8(92), + 2033: uint8(123), + 2034: uint8(164), + 2036: uint8(10), + 2037: uint8(180), + 2038: uint8(92), + 2039: uint8(123), + 2040: uint8(92), + 2041: uint8(123), + 2042: uint8(79), + 2043: uint8(3), + 2044: uint8(42), + 2045: uint8(43), + 2046: uint8(43), + 2047: uint8(43), + 2048: uint8(43), + 2049: uint8(43), + 2050: uint8(43), + 2051: uint8(43), + 2052: uint8(43), + 2053: uint8(43), + 2054: uint8(43), + 2055: uint8(43), + 2056: uint8(43), + 2057: uint8(43), + 2058: uint8(43), + 2059: uint8(43), + 2060: uint8(43), + 2061: uint8(43), + 2062: uint8(43), + 2063: uint8(1), + 2091: uint8(72), + 2101: uint8(42), + 2102: uint8(43), + 2103: uint8(43), + 2104: uint8(43), + 2105: uint8(43), + 2106: uint8(43), + 2107: uint8(43), + 2108: uint8(43), + 2109: uint8(43), + 2110: uint8(43), + 2111: uint8(43), + 2112: uint8(43), + 2113: uint8(43), + 2114: uint8(43), + 2115: uint8(43), + 2116: uint8(43), + 2117: uint8(43), + 2118: uint8(43), + 2119: uint8(43), + 2120: uint8(43), + 2121: uint8(43), + 2122: uint8(43), + 2123: uint8(43), + 2124: uint8(43), + 2125: uint8(43), + 2126: uint8(43), + 2127: uint8(43), + 2161: uint8(43), + 2162: uint8(43), + 2163: uint8(43), + 2164: uint8(43), + 2165: uint8(43), + 2166: uint8(43), + 2167: uint8(43), + 2168: uint8(43), + 2169: uint8(7), + 2171: uint8(72), + 2172: uint8(86), + 2173: uint8(86), + 2174: uint8(86), + 2175: uint8(86), + 2176: uint8(86), + 2177: uint8(86), + 2178: uint8(86), + 2179: uint8(86), + 2180: uint8(2), + 2236: uint8(43), + 2237: uint8(43), + 2238: uint8(43), + 2239: uint8(43), + 2240: uint8(43), + 2241: uint8(43), + 2242: uint8(43), + 2243: uint8(43), + 2244: uint8(43), + 2245: uint8(43), + 2246: uint8(43), + 2247: uint8(43), + 2248: uint8(43), + 2249: uint8(85), + 2250: uint8(86), + 2251: uint8(86), + 2252: uint8(86), + 2253: uint8(86), + 2254: uint8(86), + 2255: uint8(86), + 2256: uint8(86), + 2257: uint8(86), + 2258: uint8(86), + 2259: uint8(86), + 2260: uint8(86), + 2261: uint8(86), + 2262: uint8(14), + 2294: uint8(36), + 2295: uint8(43), + 2296: uint8(43), + 2297: uint8(43), + 2298: uint8(43), + 2299: uint8(43), + 2300: uint8(43), + 2301: uint8(43), + 2302: uint8(43), + 2303: uint8(43), + 2304: uint8(43), + 2305: uint8(43), + 2306: uint8(7), + 2308: uint8(86), + 2309: uint8(86), + 2310: uint8(86), + 2311: uint8(86), + 2312: uint8(86), + 2313: uint8(86), + 2314: uint8(86), + 2315: uint8(86), + 2316: uint8(86), + 2317: uint8(86), + 2318: uint8(86), + 2319: uint8(86), + 2364: uint8(36), + 2365: uint8(43), + 2366: uint8(43), + 2367: uint8(43), + 2368: uint8(43), + 2369: uint8(43), + 2370: uint8(43), + 2371: uint8(43), + 2372: uint8(43), + 2373: uint8(43), + 2374: uint8(43), + 2375: uint8(43), + 2376: uint8(43), + 2377: uint8(43), + 2378: uint8(43), + 2379: uint8(43), + 2380: uint8(43), + 2381: uint8(7), + 2386: uint8(86), + 2387: uint8(86), + 2388: uint8(86), + 2389: uint8(86), + 2390: uint8(86), + 2391: uint8(86), + 2392: uint8(86), + 2393: uint8(86), + 2394: uint8(86), + 2395: uint8(86), + 2396: uint8(86), + 2397: uint8(86), + 2398: uint8(86), + 2399: uint8(86), + 2400: uint8(86), + 2401: uint8(86), + 2402: uint8(86), + 2461: uint8(42), + 2462: uint8(43), + 2463: uint8(43), + 2464: uint8(43), + 2465: uint8(43), + 2466: uint8(43), + 2467: uint8(43), + 2468: uint8(43), + 2469: uint8(43), + 2470: uint8(43), + 2471: uint8(43), + 2472: uint8(86), + 2473: uint8(86), + 2474: uint8(86), + 2475: uint8(86), + 2476: uint8(86), + 2477: uint8(86), + 2478: uint8(86), + 2479: uint8(86), + 2480: uint8(86), + 2481: uint8(86), + 2482: uint8(14), + 2515: uint8(42), + 2516: uint8(43), + 2517: uint8(43), + 2518: uint8(43), + 2519: uint8(43), + 2520: uint8(43), + 2521: uint8(43), + 2522: uint8(43), + 2523: uint8(43), + 2524: uint8(43), + 2525: uint8(43), + 2526: uint8(86), + 2527: uint8(86), + 2528: uint8(86), + 2529: uint8(86), + 2530: uint8(86), + 2531: uint8(86), + 2532: uint8(86), + 2533: uint8(86), + 2534: uint8(86), + 2535: uint8(86), + 2536: uint8(14), + 2580: uint8(43), + 2581: uint8(43), + 2582: uint8(43), + 2583: uint8(43), + 2584: uint8(43), + 2585: uint8(43), + 2586: uint8(43), + 2587: uint8(43), + 2588: uint8(43), + 2589: uint8(43), + 2590: uint8(43), + 2591: uint8(85), + 2592: uint8(86), + 2593: uint8(86), + 2594: uint8(86), + 2595: uint8(86), + 2596: uint8(86), + 2597: uint8(86), + 2598: uint8(86), + 2599: uint8(86), + 2600: uint8(86), + 2601: uint8(86), + 2602: uint8(14), +} +var _rules = [240]int32{ + 1: int32(0x2001), + 2: -int32(0x2000), + 3: int32(0x1dbf00), + 4: int32(0x2e700), + 5: int32(0x7900), + 6: int32(0x2402), + 7: int32(0x101), + 8: -int32(0x100), + 10: int32(0x201), + 11: -int32(0x200), + 12: -int32(0xc6ff), + 13: -int32(0xe800), + 14: -int32(0x78ff), + 15: -int32(0x12c00), + 16: int32(0xc300), + 17: int32(0xd201), + 18: int32(0xce01), + 19: int32(0xcd01), + 20: int32(0x4f01), + 21: int32(0xca01), + 22: int32(0xcb01), + 23: int32(0xcf01), + 24: int32(0x6100), + 25: int32(0xd301), + 26: int32(0xd101), + 27: int32(0xa300), + 28: int32(0xd501), + 29: int32(0x8200), + 30: int32(0xd601), + 31: int32(0xda01), + 32: int32(0xd901), + 33: int32(0xdb01), + 34: int32(0x3800), + 35: int32(0x3), + 36: -int32(0x4f00), + 37: -int32(0x60ff), + 38: -int32(0x37ff), + 39: int32(0x242802), + 41: int32(0x101), + 42: -int32(0x100), + 43: -int32(0xcd00), + 44: -int32(0xda00), + 45: -int32(0x81ff), + 46: int32(0x2a2b01), + 47: -int32(0xa2ff), + 48: int32(0x2a2801), + 49: int32(0x2a3f00), + 50: -int32(0xc2ff), + 51: int32(0x4501), + 52: int32(0x4701), + 53: int32(0x2a1f00), + 54: int32(0x2a1c00), + 55: int32(0x2a1e00), + 56: -int32(0xd200), + 57: -int32(0xce00), + 58: -int32(0xca00), + 59: -int32(0xcb00), + 60: int32(0xa54f00), + 61: int32(0xa54b00), + 62: -int32(0xcf00), + 63: int32(0xa52800), + 64: int32(0xa54400), + 65: -int32(0xd100), + 66: -int32(0xd300), + 67: int32(0x29f700), + 68: int32(0xa54100), + 69: int32(0x29fd00), + 70: -int32(0xd500), + 71: -int32(0xd600), + 72: int32(0x29e700), + 73: int32(0xa54300), + 74: int32(0xa52a00), + 75: -int32(0x4500), + 76: -int32(0xd900), + 77: -int32(0x4700), + 78: -int32(0xdb00), + 79: int32(0xa51500), + 80: int32(0xa51200), + 81: int32(0x4c2402), + 83: int32(0x2001), + 84: -int32(0x2000), + 85: int32(0x101), + 86: -int32(0x100), + 87: int32(0x5400), + 88: int32(0x7401), + 89: int32(0x2601), + 90: int32(0x2501), + 91: int32(0x4001), + 92: int32(0x3f01), + 93: -int32(0x2600), + 94: -int32(0x2500), + 95: -int32(0x1f00), + 96: -int32(0x4000), + 97: -int32(0x3f00), + 98: int32(0x801), + 99: -int32(0x3e00), + 100: -int32(0x3900), + 101: -int32(0x2f00), + 102: -int32(0x3600), + 103: -int32(0x800), + 104: -int32(0x5600), + 105: -int32(0x5000), + 106: int32(0x700), + 107: -int32(0x7400), + 108: -int32(0x3bff), + 109: -int32(0x6000), + 110: -int32(0x6ff), + 111: int32(0x701a02), + 112: int32(0x101), + 113: -int32(0x100), + 114: int32(0x2001), + 115: -int32(0x2000), + 116: int32(0x5001), + 117: int32(0xf01), + 118: -int32(0xf00), + 120: int32(0x3001), + 121: -int32(0x3000), + 122: int32(0x101), + 123: -int32(0x100), + 125: int32(0xbc000), + 126: int32(0x1c6001), + 128: int32(0x97d001), + 129: int32(0x801), + 130: -int32(0x800), + 131: int32(0x8a0502), + 133: -int32(0xbbfff), + 134: -int32(0x186200), + 135: int32(0x89c200), + 136: -int32(0x182500), + 137: -int32(0x186e00), + 138: -int32(0x186d00), + 139: -int32(0x186400), + 140: -int32(0x186300), + 141: -int32(0x185c00), + 143: int32(0x8a3800), + 144: int32(0x8a0400), + 145: int32(0xee600), + 146: int32(0x101), + 147: -int32(0x100), + 149: -int32(0x3b00), + 150: -int32(0x1dbeff), + 151: int32(0x8f1d02), + 152: int32(0x800), + 153: -int32(0x7ff), + 155: int32(0x5600), + 156: -int32(0x55ff), + 157: int32(0x4a00), + 158: int32(0x6400), + 159: int32(0x8000), + 160: int32(0x7000), + 161: int32(0x7e00), + 162: int32(0x900), + 163: -int32(0x49ff), + 164: -int32(0x8ff), + 165: -int32(0x1c2500), + 166: -int32(0x63ff), + 167: -int32(0x6fff), + 168: -int32(0x7fff), + 169: -int32(0x7dff), + 170: int32(0xac0502), + 172: int32(0x1001), + 173: -int32(0x1000), + 174: int32(0x1c01), + 175: int32(0x101), + 176: -int32(0x1d5cff), + 177: -int32(0x20beff), + 178: -int32(0x2045ff), + 179: -int32(0x1c00), + 180: int32(0xb10b02), + 181: int32(0x101), + 182: -int32(0x100), + 183: int32(0x3001), + 184: -int32(0x3000), + 186: -int32(0x29f6ff), + 187: -int32(0xee5ff), + 188: -int32(0x29e6ff), + 189: -int32(0x2a2b00), + 190: -int32(0x2a2800), + 191: -int32(0x2a1bff), + 192: -int32(0x29fcff), + 193: -int32(0x2a1eff), + 194: -int32(0x2a1dff), + 195: -int32(0x2a3eff), + 197: -int32(0x1c6000), + 199: int32(0x101), + 200: -int32(0x100), + 201: int32(0xbc0c02), + 203: int32(0x101), + 204: -int32(0x100), + 205: -int32(0xa543ff), + 206: int32(0x3a001), + 207: -int32(0x8a03ff), + 208: -int32(0xa527ff), + 209: int32(0x3000), + 210: -int32(0xa54eff), + 211: -int32(0xa54aff), + 212: -int32(0xa540ff), + 213: -int32(0xa511ff), + 214: -int32(0xa529ff), + 215: -int32(0xa514ff), + 216: -int32(0x2fff), + 217: -int32(0xa542ff), + 218: -int32(0x8a37ff), + 220: -int32(0x97d000), + 221: -int32(0x3a000), + 223: int32(0x2001), + 224: -int32(0x2000), + 226: int32(0x2801), + 227: -int32(0x2800), + 229: int32(0x4001), + 230: -int32(0x4000), + 232: int32(0x2001), + 233: -int32(0x2000), + 235: int32(0x2001), + 236: -int32(0x2000), + 238: int32(0x2201), + 239: -int32(0x2200), +} +var _rulebases = [512]uint8{ + 1: uint8(6), + 2: uint8(39), + 3: uint8(81), + 4: uint8(111), + 5: uint8(119), + 16: uint8(124), + 19: uint8(127), + 28: uint8(131), + 29: uint8(142), + 30: uint8(146), + 31: uint8(151), + 33: uint8(170), + 44: uint8(180), + 45: uint8(196), + 166: uint8(198), + 167: uint8(201), + 171: uint8(219), + 255: uint8(222), + 260: uint8(225), + 268: uint8(228), + 280: uint8(231), + 366: uint8(234), + 489: uint8(237), +} +var _exceptions = [200][2]uint8{ + 0: { + 0: uint8(48), + 1: uint8(12), + }, + 1: { + 0: uint8(49), + 1: uint8(13), + }, + 2: { + 0: uint8(120), + 1: uint8(14), + }, + 3: { + 0: uint8(127), + 1: uint8(15), + }, + 4: { + 0: uint8(128), + 1: uint8(16), + }, + 5: { + 0: uint8(129), + 1: uint8(17), + }, + 6: { + 0: uint8(134), + 1: uint8(18), + }, + 7: { + 0: uint8(137), + 1: uint8(19), + }, + 8: { + 0: uint8(138), + 1: uint8(19), + }, + 9: { + 0: uint8(142), + 1: uint8(20), + }, + 10: { + 0: uint8(143), + 1: uint8(21), + }, + 11: { + 0: uint8(144), + 1: uint8(22), + }, + 12: { + 0: uint8(147), + 1: uint8(19), + }, + 13: { + 0: uint8(148), + 1: uint8(23), + }, + 14: { + 0: uint8(149), + 1: uint8(24), + }, + 15: { + 0: uint8(150), + 1: uint8(25), + }, + 16: { + 0: uint8(151), + 1: uint8(26), + }, + 17: { + 0: uint8(154), + 1: uint8(27), + }, + 18: { + 0: uint8(156), + 1: uint8(25), + }, + 19: { + 0: uint8(157), + 1: uint8(28), + }, + 20: { + 0: uint8(158), + 1: uint8(29), + }, + 21: { + 0: uint8(159), + 1: uint8(30), + }, + 22: { + 0: uint8(166), + 1: uint8(31), + }, + 23: { + 0: uint8(169), + 1: uint8(31), + }, + 24: { + 0: uint8(174), + 1: uint8(31), + }, + 25: { + 0: uint8(177), + 1: uint8(32), + }, + 26: { + 0: uint8(178), + 1: uint8(32), + }, + 27: { + 0: uint8(183), + 1: uint8(33), + }, + 28: { + 0: uint8(191), + 1: uint8(34), + }, + 29: { + 0: uint8(197), + 1: uint8(35), + }, + 30: { + 0: uint8(200), + 1: uint8(35), + }, + 31: { + 0: uint8(203), + 1: uint8(35), + }, + 32: { + 0: uint8(221), + 1: uint8(36), + }, + 33: { + 0: uint8(242), + 1: uint8(35), + }, + 34: { + 0: uint8(246), + 1: uint8(37), + }, + 35: { + 0: uint8(247), + 1: uint8(38), + }, + 36: { + 0: uint8(32), + 1: uint8(45), + }, + 37: { + 0: uint8(58), + 1: uint8(46), + }, + 38: { + 0: uint8(61), + 1: uint8(47), + }, + 39: { + 0: uint8(62), + 1: uint8(48), + }, + 40: { + 0: uint8(63), + 1: uint8(49), + }, + 41: { + 0: uint8(64), + 1: uint8(49), + }, + 42: { + 0: uint8(67), + 1: uint8(50), + }, + 43: { + 0: uint8(68), + 1: uint8(51), + }, + 44: { + 0: uint8(69), + 1: uint8(52), + }, + 45: { + 0: uint8(80), + 1: uint8(53), + }, + 46: { + 0: uint8(81), + 1: uint8(54), + }, + 47: { + 0: uint8(82), + 1: uint8(55), + }, + 48: { + 0: uint8(83), + 1: uint8(56), + }, + 49: { + 0: uint8(84), + 1: uint8(57), + }, + 50: { + 0: uint8(89), + 1: uint8(58), + }, + 51: { + 0: uint8(91), + 1: uint8(59), + }, + 52: { + 0: uint8(92), + 1: uint8(60), + }, + 53: { + 0: uint8(97), + 1: uint8(61), + }, + 54: { + 0: uint8(99), + 1: uint8(62), + }, + 55: { + 0: uint8(101), + 1: uint8(63), + }, + 56: { + 0: uint8(102), + 1: uint8(64), + }, + 57: { + 0: uint8(104), + 1: uint8(65), + }, + 58: { + 0: uint8(105), + 1: uint8(66), + }, + 59: { + 0: uint8(106), + 1: uint8(64), + }, + 60: { + 0: uint8(107), + 1: uint8(67), + }, + 61: { + 0: uint8(108), + 1: uint8(68), + }, + 62: { + 0: uint8(111), + 1: uint8(66), + }, + 63: { + 0: uint8(113), + 1: uint8(69), + }, + 64: { + 0: uint8(114), + 1: uint8(70), + }, + 65: { + 0: uint8(117), + 1: uint8(71), + }, + 66: { + 0: uint8(125), + 1: uint8(72), + }, + 67: { + 0: uint8(130), + 1: uint8(73), + }, + 68: { + 0: uint8(135), + 1: uint8(74), + }, + 69: { + 0: uint8(137), + 1: uint8(75), + }, + 70: { + 0: uint8(138), + 1: uint8(76), + }, + 71: { + 0: uint8(139), + 1: uint8(76), + }, + 72: { + 0: uint8(140), + 1: uint8(77), + }, + 73: { + 0: uint8(146), + 1: uint8(78), + }, + 74: { + 0: uint8(157), + 1: uint8(79), + }, + 75: { + 0: uint8(158), + 1: uint8(80), + }, + 76: { + 0: uint8(69), + 1: uint8(87), + }, + 77: { + 0: uint8(123), + 1: uint8(29), + }, + 78: { + 0: uint8(124), + 1: uint8(29), + }, + 79: { + 0: uint8(125), + 1: uint8(29), + }, + 80: { + 0: uint8(127), + 1: uint8(88), + }, + 81: { + 0: uint8(134), + 1: uint8(89), + }, + 82: { + 0: uint8(136), + 1: uint8(90), + }, + 83: { + 0: uint8(137), + 1: uint8(90), + }, + 84: { + 0: uint8(138), + 1: uint8(90), + }, + 85: { + 0: uint8(140), + 1: uint8(91), + }, + 86: { + 0: uint8(142), + 1: uint8(92), + }, + 87: { + 0: uint8(143), + 1: uint8(92), + }, + 88: { + 0: uint8(172), + 1: uint8(93), + }, + 89: { + 0: uint8(173), + 1: uint8(94), + }, + 90: { + 0: uint8(174), + 1: uint8(94), + }, + 91: { + 0: uint8(175), + 1: uint8(94), + }, + 92: { + 0: uint8(194), + 1: uint8(95), + }, + 93: { + 0: uint8(204), + 1: uint8(96), + }, + 94: { + 0: uint8(205), + 1: uint8(97), + }, + 95: { + 0: uint8(206), + 1: uint8(97), + }, + 96: { + 0: uint8(207), + 1: uint8(98), + }, + 97: { + 0: uint8(208), + 1: uint8(99), + }, + 98: { + 0: uint8(209), + 1: uint8(100), + }, + 99: { + 0: uint8(213), + 1: uint8(101), + }, + 100: { + 0: uint8(214), + 1: uint8(102), + }, + 101: { + 0: uint8(215), + 1: uint8(103), + }, + 102: { + 0: uint8(240), + 1: uint8(104), + }, + 103: { + 0: uint8(241), + 1: uint8(105), + }, + 104: { + 0: uint8(242), + 1: uint8(106), + }, + 105: { + 0: uint8(243), + 1: uint8(107), + }, + 106: { + 0: uint8(244), + 1: uint8(108), + }, + 107: { + 0: uint8(245), + 1: uint8(109), + }, + 108: { + 0: uint8(249), + 1: uint8(110), + }, + 109: { + 0: uint8(253), + 1: uint8(45), + }, + 110: { + 0: uint8(254), + 1: uint8(45), + }, + 111: { + 0: uint8(255), + 1: uint8(45), + }, + 112: { + 0: uint8(80), + 1: uint8(105), + }, + 113: { + 0: uint8(81), + 1: uint8(105), + }, + 114: { + 0: uint8(82), + 1: uint8(105), + }, + 115: { + 0: uint8(83), + 1: uint8(105), + }, + 116: { + 0: uint8(84), + 1: uint8(105), + }, + 117: { + 0: uint8(85), + 1: uint8(105), + }, + 118: { + 0: uint8(86), + 1: uint8(105), + }, + 119: { + 0: uint8(87), + 1: uint8(105), + }, + 120: { + 0: uint8(88), + 1: uint8(105), + }, + 121: { + 0: uint8(89), + 1: uint8(105), + }, + 122: { + 0: uint8(90), + 1: uint8(105), + }, + 123: { + 0: uint8(91), + 1: uint8(105), + }, + 124: { + 0: uint8(92), + 1: uint8(105), + }, + 125: { + 0: uint8(93), + 1: uint8(105), + }, + 126: { + 0: uint8(94), + 1: uint8(105), + }, + 127: { + 0: uint8(95), + 1: uint8(105), + }, + 128: { + 0: uint8(130), + }, + 129: { + 0: uint8(131), + }, + 130: { + 0: uint8(132), + }, + 131: { + 0: uint8(133), + }, + 132: { + 0: uint8(134), + }, + 133: { + 0: uint8(135), + }, + 134: { + 0: uint8(136), + }, + 135: { + 0: uint8(137), + }, + 136: { + 0: uint8(192), + 1: uint8(117), + }, + 137: { + 0: uint8(207), + 1: uint8(118), + }, + 138: { + 0: uint8(128), + 1: uint8(137), + }, + 139: { + 0: uint8(129), + 1: uint8(138), + }, + 140: { + 0: uint8(130), + 1: uint8(139), + }, + 141: { + 0: uint8(133), + 1: uint8(140), + }, + 142: { + 0: uint8(134), + 1: uint8(141), + }, + 143: { + 0: uint8(112), + 1: uint8(157), + }, + 144: { + 0: uint8(113), + 1: uint8(157), + }, + 145: { + 0: uint8(118), + 1: uint8(158), + }, + 146: { + 0: uint8(119), + 1: uint8(158), + }, + 147: { + 0: uint8(120), + 1: uint8(159), + }, + 148: { + 0: uint8(121), + 1: uint8(159), + }, + 149: { + 0: uint8(122), + 1: uint8(160), + }, + 150: { + 0: uint8(123), + 1: uint8(160), + }, + 151: { + 0: uint8(124), + 1: uint8(161), + }, + 152: { + 0: uint8(125), + 1: uint8(161), + }, + 153: { + 0: uint8(179), + 1: uint8(162), + }, + 154: { + 0: uint8(186), + 1: uint8(163), + }, + 155: { + 0: uint8(187), + 1: uint8(163), + }, + 156: { + 0: uint8(188), + 1: uint8(164), + }, + 157: { + 0: uint8(190), + 1: uint8(165), + }, + 158: { + 0: uint8(195), + 1: uint8(162), + }, + 159: { + 0: uint8(204), + 1: uint8(164), + }, + 160: { + 0: uint8(218), + 1: uint8(166), + }, + 161: { + 0: uint8(219), + 1: uint8(166), + }, + 162: { + 0: uint8(229), + 1: uint8(106), + }, + 163: { + 0: uint8(234), + 1: uint8(167), + }, + 164: { + 0: uint8(235), + 1: uint8(167), + }, + 165: { + 0: uint8(236), + 1: uint8(110), + }, + 166: { + 0: uint8(243), + 1: uint8(162), + }, + 167: { + 0: uint8(248), + 1: uint8(168), + }, + 168: { + 0: uint8(249), + 1: uint8(168), + }, + 169: { + 0: uint8(250), + 1: uint8(169), + }, + 170: { + 0: uint8(251), + 1: uint8(169), + }, + 171: { + 0: uint8(252), + 1: uint8(164), + }, + 172: { + 0: uint8(38), + 1: uint8(176), + }, + 173: { + 0: uint8(42), + 1: uint8(177), + }, + 174: { + 0: uint8(43), + 1: uint8(178), + }, + 175: { + 0: uint8(78), + 1: uint8(179), + }, + 176: { + 0: uint8(132), + 1: uint8(8), + }, + 177: { + 0: uint8(98), + 1: uint8(186), + }, + 178: { + 0: uint8(99), + 1: uint8(187), + }, + 179: { + 0: uint8(100), + 1: uint8(188), + }, + 180: { + 0: uint8(101), + 1: uint8(189), + }, + 181: { + 0: uint8(102), + 1: uint8(190), + }, + 182: { + 0: uint8(109), + 1: uint8(191), + }, + 183: { + 0: uint8(110), + 1: uint8(192), + }, + 184: { + 0: uint8(111), + 1: uint8(193), + }, + 185: { + 0: uint8(112), + 1: uint8(194), + }, + 186: { + 0: uint8(126), + 1: uint8(195), + }, + 187: { + 0: uint8(127), + 1: uint8(195), + }, + 188: { + 0: uint8(125), + 1: uint8(207), + }, + 189: { + 0: uint8(141), + 1: uint8(208), + }, + 190: { + 0: uint8(148), + 1: uint8(209), + }, + 191: { + 0: uint8(171), + 1: uint8(210), + }, + 192: { + 0: uint8(172), + 1: uint8(211), + }, + 193: { + 0: uint8(173), + 1: uint8(212), + }, + 194: { + 0: uint8(176), + 1: uint8(213), + }, + 195: { + 0: uint8(177), + 1: uint8(214), + }, + 196: { + 0: uint8(178), + 1: uint8(215), + }, + 197: { + 0: uint8(196), + 1: uint8(216), + }, + 198: { + 0: uint8(197), + 1: uint8(217), + }, + 199: { + 0: uint8(198), + 1: uint8(218), + }, +} + +func _casemap(tls *TLS, c uint32, dir int32) (r1 int32) { + var b, rt, try, v, x, xb, xn, y uint32 + var c0, r, rd, v1 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = b, c0, r, rd, rt, try, v, x, xb, xn, y, v1 + c0 = int32(c) + if c >= uint32(0x20000) { + return int32(c) + } + b = c >> int32(8) + c &= uint32(255) + x = c / uint32(3) + y = c % uint32(3) + /* lookup entry in two-level base-6 table */ + v = uint32(_tab1[uint32(int32(_tab1[b])*int32(86))+x]) + v = v * uint32(_mt[y]) >> int32(11) % uint32(6) + /* use the bit vector out of the tables as an index into + * a block-specific set of rules and decode the rule into + * a type and a case-mapping delta. */ + r = _rules[uint32(_rulebases[b])+v] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + /* rules 0/1 are simple lower/upper case with a delta. + * apply according to desired mapping direction. */ + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* binary search. endpoints of the binary search for + * this block are stored in the rule delta field. */ + xn = uint32(rd & int32(0xff)) + xb = uint32(rd) >> int32(8) + for xn != 0 { + try = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2))) + if try == c { + r = _rules[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2 + 1))] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* Hard-coded for the four exceptional titlecase */ + if dir != 0 { + v1 = -int32(1) + } else { + v1 = int32(1) + } + return c0 + v1 + } else { + if try > c { + xn /= uint32(2) + } else { + xb += xn / uint32(2) + xn -= xn / uint32(2) + } + } + } + return c0 +} + +var _mt = [3]int32{ + 0: int32(2048), + 1: int32(342), + 2: int32(57), +} + +func Xtowlower(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, 0)) +} + +func Xtowupper(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, int32(1))) +} + +func X__towupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowupper(tls, c) +} + +func X__towlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowlower(tls, c) +} + +func Xtowlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towlower_l(tls, c, l) +} + +func Xtowupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towupper_l(tls, c, l) +} + +func Xwcswidth(tls *TLS, wcs uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v, (%v:)", tls, wcs, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, l, v3, v5 int32 + var v2 Tsize_t + var v4 bool + _, _, _, _, _, _ = k, l, v2, v3, v4, v5 + l = 0 + k = 0 + for { + v2 = n + n-- + if v4 = v2 != 0 && *(*Twchar_t)(unsafe.Pointer(wcs)) != 0; v4 { + v3 = Xwcwidth(tls, *(*Twchar_t)(unsafe.Pointer(wcs))) + k = v3 + } + if !(v4 && v3 >= 0) { + break + } + goto _1 + _1: + ; + l += k + wcs += 4 + } + if k < 0 { + v5 = k + } else { + v5 = l + } + return v5 +} + +func Xwctrans(tls *TLS, class uintptr) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v class=%v, (%v:)", tls, class, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(Xstrcmp(tls, class, __ccgo_ts+196) != 0) { + return UintptrFromInt32(1) + } + if !(Xstrcmp(tls, class, __ccgo_ts+204) != 0) { + return UintptrFromInt32(2) + } + return uintptr(0) +} + +func Xtowctrans(tls *TLS, wc Twint_t, trans Twctrans_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v trans=%v, (%v:)", tls, wc, trans, origin(2)) + defer func() { trc("-> %v", r) }() + } + if trans == UintptrFromInt32(1) { + return Xtowupper(tls, wc) + } + if trans == UintptrFromInt32(2) { + return Xtowlower(tls, wc) + } + return wc +} + +func X__wctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctrans(tls, s) +} + +func X__towctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowctrans(tls, c, t) +} + +func Xtowctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towctrans_l(tls, c, t, l) +} + +func Xwctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctrans_l(tls, s, l) +} + +var _table5 = [2784]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(18), + 4: uint8(19), + 5: uint8(20), + 6: uint8(21), + 7: uint8(22), + 8: uint8(23), + 9: uint8(24), + 10: uint8(25), + 11: uint8(26), + 12: uint8(27), + 13: uint8(28), + 14: uint8(29), + 15: uint8(30), + 16: uint8(31), + 17: uint8(32), + 18: uint8(16), + 19: uint8(33), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(34), + 24: uint8(35), + 25: uint8(36), + 26: uint8(37), + 27: uint8(38), + 28: uint8(39), + 29: uint8(40), + 30: uint8(16), + 31: uint8(16), + 32: uint8(41), + 33: uint8(16), + 34: uint8(16), + 35: uint8(16), + 36: uint8(16), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(42), + 45: uint8(43), + 46: uint8(16), + 47: uint8(16), + 48: uint8(44), + 49: uint8(16), + 50: uint8(16), + 51: uint8(16), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(16), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(16), + 165: uint8(16), + 166: uint8(45), + 167: uint8(16), + 168: uint8(46), + 169: uint8(47), + 170: uint8(48), + 171: uint8(49), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(50), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(16), + 250: uint8(16), + 251: uint8(51), + 252: uint8(16), + 253: uint8(16), + 254: uint8(52), + 255: uint8(53), + 256: uint8(16), + 257: uint8(54), + 258: uint8(55), + 259: uint8(56), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(57), + 267: uint8(16), + 268: uint8(16), + 269: uint8(58), + 270: uint8(16), + 271: uint8(59), + 272: uint8(60), + 273: uint8(61), + 274: uint8(62), + 275: uint8(63), + 276: uint8(64), + 277: uint8(65), + 278: uint8(66), + 279: uint8(67), + 280: uint8(68), + 281: uint8(69), + 282: uint8(70), + 283: uint8(16), + 284: uint8(71), + 285: uint8(72), + 286: uint8(73), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(74), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(75), + 363: uint8(76), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(77), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(78), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(79), + 466: uint8(80), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(81), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(82), + 481: uint8(83), + 482: uint8(84), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(85), + 489: uint8(86), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(16), + 497: uint8(16), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 588: uint8(255), + 589: uint8(255), + 624: uint8(248), + 625: uint8(3), + 658: uint8(254), + 659: uint8(255), + 660: uint8(255), + 661: uint8(255), + 662: uint8(255), + 663: uint8(191), + 664: uint8(182), + 672: uint8(63), + 674: uint8(255), + 675: uint8(23), + 681: uint8(248), + 682: uint8(255), + 683: uint8(255), + 686: uint8(1), + 698: uint8(192), + 699: uint8(191), + 700: uint8(159), + 701: uint8(61), + 705: uint8(128), + 706: uint8(2), + 710: uint8(255), + 711: uint8(255), + 712: uint8(255), + 713: uint8(7), + 724: uint8(192), + 725: uint8(255), + 726: uint8(1), + 733: uint8(248), + 734: uint8(15), + 735: uint8(32), + 738: uint8(192), + 739: uint8(251), + 740: uint8(239), + 741: uint8(62), + 747: uint8(14), + 762: uint8(248), + 763: uint8(255), + 764: uint8(255), + 765: uint8(255), + 766: uint8(255), + 767: uint8(255), + 768: uint8(7), + 775: uint8(20), + 776: uint8(254), + 777: uint8(33), + 778: uint8(254), + 780: uint8(12), + 784: uint8(2), + 791: uint8(16), + 792: uint8(30), + 793: uint8(32), + 796: uint8(12), + 799: uint8(64), + 800: uint8(6), + 807: uint8(16), + 808: uint8(134), + 809: uint8(57), + 810: uint8(2), + 814: uint8(35), + 816: uint8(6), + 823: uint8(16), + 824: uint8(190), + 825: uint8(33), + 828: uint8(12), + 831: uint8(252), + 832: uint8(2), + 839: uint8(144), + 840: uint8(30), + 841: uint8(32), + 842: uint8(64), + 844: uint8(12), + 848: uint8(4), + 856: uint8(1), + 857: uint8(32), + 864: uint8(17), + 871: uint8(192), + 872: uint8(193), + 873: uint8(61), + 874: uint8(96), + 876: uint8(12), + 880: uint8(2), + 887: uint8(144), + 888: uint8(64), + 889: uint8(48), + 892: uint8(12), + 896: uint8(3), + 903: uint8(24), + 904: uint8(30), + 905: uint8(32), + 908: uint8(12), + 921: uint8(4), + 922: uint8(92), + 934: uint8(242), + 935: uint8(7), + 936: uint8(128), + 937: uint8(127), + 950: uint8(242), + 951: uint8(31), + 953: uint8(63), + 963: uint8(3), + 966: uint8(160), + 967: uint8(2), + 974: uint8(254), + 975: uint8(127), + 976: uint8(223), + 977: uint8(224), + 978: uint8(255), + 979: uint8(254), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(31), + 984: uint8(64), + 997: uint8(224), + 998: uint8(253), + 999: uint8(102), + 1003: uint8(195), + 1004: uint8(1), + 1006: uint8(30), + 1008: uint8(100), + 1009: uint8(32), + 1011: uint8(32), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(255), + 1048: uint8(255), + 1049: uint8(255), + 1050: uint8(255), + 1051: uint8(255), + 1052: uint8(255), + 1053: uint8(255), + 1054: uint8(255), + 1055: uint8(255), + 1067: uint8(224), + 1090: uint8(28), + 1094: uint8(28), + 1098: uint8(12), + 1102: uint8(12), + 1110: uint8(176), + 1111: uint8(63), + 1112: uint8(64), + 1113: uint8(254), + 1114: uint8(15), + 1115: uint8(32), + 1121: uint8(120), + 1136: uint8(96), + 1141: uint8(2), + 1156: uint8(135), + 1157: uint8(1), + 1158: uint8(4), + 1159: uint8(14), + 1186: uint8(128), + 1187: uint8(9), + 1194: uint8(64), + 1195: uint8(127), + 1196: uint8(229), + 1197: uint8(31), + 1198: uint8(248), + 1199: uint8(159), + 1206: uint8(255), + 1207: uint8(127), + 1216: uint8(15), + 1222: uint8(208), + 1223: uint8(23), + 1224: uint8(4), + 1229: uint8(248), + 1230: uint8(15), + 1232: uint8(3), + 1236: uint8(60), + 1237: uint8(59), + 1244: uint8(64), + 1245: uint8(163), + 1246: uint8(3), + 1253: uint8(240), + 1254: uint8(207), + 1274: uint8(247), + 1275: uint8(255), + 1276: uint8(253), + 1277: uint8(33), + 1278: uint8(16), + 1279: uint8(3), + 1304: uint8(255), + 1305: uint8(255), + 1306: uint8(255), + 1307: uint8(255), + 1308: uint8(255), + 1309: uint8(255), + 1310: uint8(255), + 1311: uint8(251), + 1313: uint8(248), + 1317: uint8(124), + 1324: uint8(223), + 1325: uint8(255), + 1338: uint8(255), + 1339: uint8(255), + 1340: uint8(255), + 1341: uint8(255), + 1342: uint8(1), + 1373: uint8(128), + 1374: uint8(3), + 1391: uint8(128), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(255), + 1407: uint8(255), + 1413: uint8(60), + 1427: uint8(6), + 1453: uint8(128), + 1454: uint8(247), + 1455: uint8(63), + 1459: uint8(192), + 1470: uint8(3), + 1472: uint8(68), + 1473: uint8(8), + 1476: uint8(96), + 1496: uint8(48), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(3), + 1503: uint8(128), + 1508: uint8(192), + 1509: uint8(63), + 1512: uint8(128), + 1513: uint8(255), + 1514: uint8(3), + 1520: uint8(7), + 1526: uint8(200), + 1527: uint8(51), + 1532: uint8(32), + 1541: uint8(126), + 1542: uint8(102), + 1544: uint8(8), + 1545: uint8(16), + 1551: uint8(16), + 1558: uint8(157), + 1559: uint8(193), + 1560: uint8(2), + 1565: uint8(48), + 1566: uint8(64), + 1596: uint8(32), + 1597: uint8(33), + 1622: uint8(255), + 1623: uint8(255), + 1624: uint8(255), + 1625: uint8(255), + 1626: uint8(255), + 1627: uint8(255), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1635: uint8(64), + 1664: uint8(255), + 1665: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1695: uint8(128), + 1727: uint8(14), + 1759: uint8(32), + 1788: uint8(1), + 1806: uint8(192), + 1807: uint8(7), + 1824: uint8(110), + 1825: uint8(240), + 1831: uint8(135), + 1852: uint8(96), + 1860: uint8(240), + 1896: uint8(192), + 1897: uint8(255), + 1898: uint8(1), + 1920: uint8(2), + 1927: uint8(255), + 1928: uint8(127), + 1935: uint8(128), + 1936: uint8(3), + 1942: uint8(120), + 1943: uint8(38), + 1945: uint8(32), + 1952: uint8(7), + 1956: uint8(128), + 1957: uint8(239), + 1958: uint8(31), + 1966: uint8(8), + 1968: uint8(3), + 1974: uint8(192), + 1975: uint8(127), + 1977: uint8(30), + 1989: uint8(128), + 1990: uint8(211), + 1991: uint8(64), + 2011: uint8(128), + 2012: uint8(248), + 2013: uint8(7), + 2016: uint8(3), + 2023: uint8(24), + 2024: uint8(1), + 2028: uint8(192), + 2029: uint8(31), + 2030: uint8(31), + 2055: uint8(255), + 2056: uint8(92), + 2059: uint8(64), + 2070: uint8(248), + 2071: uint8(133), + 2072: uint8(13), + 2102: uint8(60), + 2103: uint8(176), + 2104: uint8(1), + 2107: uint8(48), + 2118: uint8(248), + 2119: uint8(167), + 2120: uint8(1), + 2133: uint8(40), + 2134: uint8(191), + 2147: uint8(224), + 2148: uint8(188), + 2149: uint8(15), + 2181: uint8(128), + 2182: uint8(255), + 2183: uint8(6), + 2234: uint8(240), + 2235: uint8(12), + 2236: uint8(1), + 2240: uint8(254), + 2241: uint8(7), + 2246: uint8(248), + 2247: uint8(121), + 2248: uint8(128), + 2250: uint8(126), + 2251: uint8(14), + 2257: uint8(252), + 2258: uint8(127), + 2259: uint8(3), + 2278: uint8(127), + 2279: uint8(191), + 2290: uint8(252), + 2291: uint8(255), + 2292: uint8(255), + 2293: uint8(252), + 2294: uint8(109), + 2310: uint8(126), + 2311: uint8(180), + 2312: uint8(191), + 2322: uint8(163), + 2366: uint8(24), + 2374: uint8(255), + 2375: uint8(1), + 2430: uint8(31), + 2438: uint8(127), + 2473: uint8(128), + 2481: uint8(128), + 2482: uint8(7), + 2515: uint8(96), + 2516: uint8(15), + 2540: uint8(128), + 2541: uint8(3), + 2542: uint8(248), + 2543: uint8(255), + 2544: uint8(231), + 2545: uint8(15), + 2549: uint8(60), + 2568: uint8(28), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2597: uint8(255), + 2598: uint8(127), + 2599: uint8(248), + 2600: uint8(255), + 2601: uint8(255), + 2602: uint8(255), + 2603: uint8(255), + 2604: uint8(255), + 2605: uint8(31), + 2606: uint8(32), + 2608: uint8(16), + 2611: uint8(248), + 2612: uint8(254), + 2613: uint8(255), + 2624: uint8(127), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(249), + 2628: uint8(219), + 2629: uint8(7), + 2662: uint8(127), + 2717: uint8(240), + 2746: uint8(127), + 2760: uint8(240), + 2761: uint8(7), +} + +var _wtable = [1600]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(16), + 4: uint8(16), + 5: uint8(16), + 6: uint8(16), + 7: uint8(16), + 8: uint8(16), + 9: uint8(16), + 10: uint8(16), + 11: uint8(16), + 12: uint8(16), + 13: uint8(16), + 14: uint8(16), + 15: uint8(16), + 16: uint8(16), + 17: uint8(18), + 18: uint8(16), + 19: uint8(16), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(16), + 24: uint8(16), + 25: uint8(16), + 26: uint8(16), + 27: uint8(16), + 28: uint8(16), + 29: uint8(16), + 30: uint8(16), + 31: uint8(16), + 32: uint8(16), + 33: uint8(16), + 34: uint8(16), + 35: uint8(19), + 36: uint8(16), + 37: uint8(20), + 38: uint8(21), + 39: uint8(22), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(23), + 44: uint8(16), + 45: uint8(16), + 46: uint8(24), + 47: uint8(25), + 48: uint8(26), + 49: uint8(27), + 50: uint8(28), + 51: uint8(17), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(29), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(17), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(30), + 165: uint8(16), + 166: uint8(16), + 167: uint8(16), + 168: uint8(16), + 169: uint8(31), + 170: uint8(16), + 171: uint8(16), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(32), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(17), + 251: uint8(16), + 252: uint8(16), + 253: uint8(16), + 254: uint8(33), + 255: uint8(34), + 256: uint8(16), + 257: uint8(16), + 258: uint8(16), + 259: uint8(16), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(16), + 267: uint8(16), + 268: uint8(16), + 269: uint8(16), + 270: uint8(16), + 271: uint8(16), + 272: uint8(16), + 273: uint8(16), + 274: uint8(16), + 275: uint8(16), + 276: uint8(16), + 277: uint8(16), + 278: uint8(16), + 279: uint8(16), + 280: uint8(16), + 281: uint8(16), + 282: uint8(16), + 283: uint8(16), + 284: uint8(16), + 285: uint8(16), + 286: uint8(16), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(16), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(16), + 363: uint8(16), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(35), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(36), + 392: uint8(17), + 393: uint8(17), + 394: uint8(37), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(38), + 434: uint8(39), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(16), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(16), + 482: uint8(16), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(16), + 489: uint8(16), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(40), + 497: uint8(41), + 498: uint8(42), + 499: uint8(43), + 500: uint8(44), + 501: uint8(45), + 502: uint8(46), + 503: uint8(47), + 504: uint8(16), + 505: uint8(48), + 506: uint8(49), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 611: uint8(12), + 613: uint8(6), + 637: uint8(30), + 638: uint8(9), + 671: uint8(96), + 674: uint8(48), + 681: uint8(255), + 682: uint8(15), + 687: uint8(128), + 690: uint8(8), + 692: uint8(2), + 693: uint8(12), + 695: uint8(96), + 696: uint8(48), + 697: uint8(64), + 698: uint8(16), + 701: uint8(4), + 702: uint8(44), + 703: uint8(36), + 704: uint8(32), + 705: uint8(12), + 709: uint8(1), + 713: uint8(80), + 714: uint8(184), + 722: uint8(224), + 726: uint8(1), + 727: uint8(128), + 739: uint8(24), + 746: uint8(33), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(251), + 788: uint8(255), + 789: uint8(255), + 790: uint8(255), + 791: uint8(255), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(255), + 798: uint8(15), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(255), + 804: uint8(255), + 805: uint8(255), + 806: uint8(255), + 807: uint8(255), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(255), + 812: uint8(255), + 813: uint8(255), + 814: uint8(255), + 815: uint8(255), + 816: uint8(255), + 817: uint8(255), + 818: uint8(255), + 819: uint8(255), + 820: uint8(255), + 821: uint8(255), + 822: uint8(255), + 823: uint8(255), + 824: uint8(255), + 825: uint8(255), + 826: uint8(63), + 830: uint8(255), + 831: uint8(15), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(127), + 840: uint8(254), + 841: uint8(255), + 842: uint8(255), + 843: uint8(255), + 844: uint8(255), + 845: uint8(255), + 846: uint8(255), + 847: uint8(255), + 848: uint8(255), + 849: uint8(255), + 850: uint8(127), + 851: uint8(254), + 852: uint8(255), + 853: uint8(255), + 854: uint8(255), + 855: uint8(255), + 856: uint8(255), + 857: uint8(255), + 858: uint8(255), + 859: uint8(255), + 860: uint8(255), + 861: uint8(255), + 862: uint8(255), + 863: uint8(255), + 864: uint8(224), + 865: uint8(255), + 866: uint8(255), + 867: uint8(255), + 868: uint8(255), + 869: uint8(255), + 870: uint8(254), + 871: uint8(255), + 872: uint8(255), + 873: uint8(255), + 874: uint8(255), + 875: uint8(255), + 876: uint8(255), + 877: uint8(255), + 878: uint8(255), + 879: uint8(255), + 880: uint8(255), + 881: uint8(127), + 882: uint8(255), + 883: uint8(255), + 884: uint8(255), + 885: uint8(255), + 886: uint8(255), + 887: uint8(7), + 888: uint8(255), + 889: uint8(255), + 890: uint8(255), + 891: uint8(255), + 892: uint8(15), + 894: uint8(255), + 895: uint8(255), + 896: uint8(255), + 897: uint8(255), + 898: uint8(255), + 899: uint8(127), + 900: uint8(255), + 901: uint8(255), + 902: uint8(255), + 903: uint8(255), + 904: uint8(255), + 906: uint8(255), + 907: uint8(255), + 908: uint8(255), + 909: uint8(255), + 910: uint8(255), + 911: uint8(255), + 912: uint8(255), + 913: uint8(255), + 914: uint8(255), + 915: uint8(255), + 916: uint8(255), + 917: uint8(255), + 918: uint8(255), + 919: uint8(255), + 920: uint8(255), + 921: uint8(255), + 922: uint8(255), + 923: uint8(255), + 924: uint8(255), + 925: uint8(255), + 926: uint8(255), + 927: uint8(255), + 928: uint8(255), + 929: uint8(255), + 930: uint8(255), + 931: uint8(255), + 932: uint8(255), + 933: uint8(255), + 934: uint8(255), + 935: uint8(255), + 936: uint8(255), + 937: uint8(255), + 938: uint8(255), + 939: uint8(255), + 940: uint8(255), + 941: uint8(255), + 942: uint8(255), + 943: uint8(255), + 944: uint8(255), + 945: uint8(255), + 946: uint8(255), + 947: uint8(255), + 948: uint8(255), + 949: uint8(255), + 950: uint8(255), + 951: uint8(255), + 960: uint8(255), + 961: uint8(255), + 962: uint8(255), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(255), + 968: uint8(255), + 969: uint8(255), + 970: uint8(255), + 971: uint8(255), + 972: uint8(255), + 973: uint8(255), + 974: uint8(255), + 975: uint8(255), + 976: uint8(255), + 977: uint8(31), + 978: uint8(255), + 979: uint8(255), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(255), + 984: uint8(127), + 1004: uint8(255), + 1005: uint8(255), + 1006: uint8(255), + 1007: uint8(31), + 1024: uint8(255), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1028: uint8(255), + 1029: uint8(255), + 1030: uint8(255), + 1031: uint8(255), + 1032: uint8(255), + 1033: uint8(255), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(15), + 1058: uint8(255), + 1059: uint8(3), + 1062: uint8(255), + 1063: uint8(255), + 1064: uint8(255), + 1065: uint8(255), + 1066: uint8(247), + 1067: uint8(255), + 1068: uint8(127), + 1069: uint8(15), + 1088: uint8(254), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(255), + 1098: uint8(255), + 1099: uint8(255), + 1100: uint8(1), + 1116: uint8(127), + 1148: uint8(15), + 1152: uint8(255), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(255), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(255), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(255), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(255), + 1214: uint8(7), + 1216: uint8(255), + 1217: uint8(255), + 1218: uint8(255), + 1219: uint8(127), + 1226: uint8(7), + 1228: uint8(240), + 1230: uint8(255), + 1231: uint8(255), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(255), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(255), + 1242: uint8(255), + 1243: uint8(255), + 1244: uint8(255), + 1245: uint8(255), + 1246: uint8(255), + 1247: uint8(255), + 1248: uint8(255), + 1249: uint8(255), + 1250: uint8(255), + 1251: uint8(255), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(255), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(255), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(15), + 1280: uint8(16), + 1305: uint8(128), + 1329: uint8(64), + 1330: uint8(254), + 1331: uint8(7), + 1344: uint8(7), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(255), + 1351: uint8(15), + 1352: uint8(255), + 1353: uint8(1), + 1354: uint8(3), + 1356: uint8(63), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(1), + 1381: uint8(224), + 1382: uint8(191), + 1383: uint8(255), + 1384: uint8(255), + 1385: uint8(255), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(223), + 1392: uint8(255), + 1393: uint8(255), + 1394: uint8(15), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(255), + 1400: uint8(255), + 1401: uint8(135), + 1402: uint8(15), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(17), + 1407: uint8(255), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(127), + 1416: uint8(253), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1432: uint8(255), + 1433: uint8(255), + 1434: uint8(255), + 1435: uint8(255), + 1436: uint8(255), + 1437: uint8(255), + 1438: uint8(255), + 1439: uint8(159), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(63), + 1449: uint8(120), + 1450: uint8(255), + 1451: uint8(255), + 1452: uint8(255), + 1455: uint8(4), + 1458: uint8(96), + 1460: uint8(16), + 1471: uint8(248), + 1472: uint8(255), + 1473: uint8(255), + 1474: uint8(255), + 1475: uint8(255), + 1476: uint8(255), + 1477: uint8(255), + 1478: uint8(255), + 1479: uint8(255), + 1480: uint8(255), + 1481: uint8(255), + 1488: uint8(255), + 1489: uint8(255), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(63), + 1497: uint8(16), + 1498: uint8(39), + 1501: uint8(24), + 1502: uint8(240), + 1503: uint8(7), + 1532: uint8(255), + 1533: uint8(15), + 1537: uint8(224), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(123), + 1551: uint8(252), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(255), + 1555: uint8(255), + 1556: uint8(231), + 1557: uint8(199), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(231), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1582: uint8(15), + 1583: uint8(7), + 1584: uint8(7), + 1586: uint8(63), +} + +func Xwcwidth(tls *TLS, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 int32 + _, _ = v1, v2 + if uint32(wc) < uint32(0xff) { + if (wc+int32(1))&int32(0x7f) >= int32(0x21) { + v1 = int32(1) + } else { + if wc != 0 { + v2 = -int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 + } + if uint32(wc)&uint32(0xfffeffff) < uint32(0xfffe) { + if int32(_table5[int32(_table5[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return 0 + } + if int32(_wtable[int32(_wtable[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return int32(2) + } + return int32(1) + } + if wc&int32(0xfffe) == int32(0xfffe) { + return -int32(1) + } + if uint32(wc)-uint32(0x20000) < uint32(0x20000) { + return int32(2) + } + if wc == int32(0xe0001) || uint32(wc)-uint32(0xe0020) < uint32(0x5f) || uint32(wc)-uint32(0xe0100) < uint32(0xef) { + return 0 + } + return int32(1) +} + +const d_fileno = 0 + +type Tino_t = uint64 + +type Tdirent = struct { + Fd_ino Tino_t + Fd_off Toff_t + Fd_reclen uint16 + Fd_type uint8 + Fd_name [256]int8 +} + +func Xalphasort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrcoll(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +type TDIR = struct { + Ftell Toff_t + Ffd int32 + Fbuf_pos int32 + Fbuf_end int32 + Flock [1]int32 + Fbuf [2048]int8 +} + +type t__dirstream = TDIR + +func Xclosedir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = Xclose(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd) + Xfree(tls, dir) + return ret +} + +func Xdirfd(tls *TLS, d uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(d)).Ffd +} + +const AT_EACCESS = 512 +const AT_FDCWD = -100 +const AT_REMOVEDIR = 512 +const AT_SYMLINK_FOLLOW = 1024 +const AT_SYMLINK_NOFOLLOW = 256 +const FD_CLOEXEC = 1 +const F_DUPFD = 0 +const F_DUPFD_CLOEXEC = 1030 +const F_GETFD = 1 +const F_GETFL = 3 +const F_GETLK = 12 +const F_GETOWN = 9 +const F_GETOWNER_UIDS = 17 +const F_GETOWN_EX = 16 +const F_GETSIG = 11 +const F_OFD_GETLK = 36 +const F_OFD_SETLK = 37 +const F_OFD_SETLKW = 38 +const F_RDLCK = 0 +const F_SETFD = 2 +const F_SETFL = 4 +const F_SETLK = 13 +const F_SETLKW = 14 +const F_SETOWN = 8 +const F_SETOWN_EX = 15 +const F_SETSIG = 10 +const F_UNLCK = 2 +const F_WRLCK = 1 +const O_ACCMODE = 2097155 +const O_APPEND = 1024 +const O_ASYNC = 8192 +const O_CLOEXEC = 524288 +const O_CREAT = 64 +const O_DIRECT = 16384 +const O_DIRECTORY = 65536 +const O_DSYNC = 4096 +const O_EXCL = 128 +const O_EXEC = 2097152 +const O_LARGEFILE = 32768 +const O_NDELAY = 2048 +const O_NOATIME = 262144 +const O_NOCTTY = 256 +const O_NOFOLLOW = 131072 +const O_NONBLOCK = 2048 +const O_PATH = 2097152 +const O_RDONLY = 0 +const O_RDWR = 2 +const O_RSYNC = 1052672 +const O_SEARCH = 2097152 +const O_SYNC = 1052672 +const O_TMPFILE = 4259840 +const O_TRUNC = 512 +const O_TTY_INIT = 0 +const O_WRONLY = 1 +const POSIX_FADV_DONTNEED = 4 +const POSIX_FADV_NOREUSE = 5 +const POSIX_FADV_NORMAL = 0 +const POSIX_FADV_RANDOM = 1 +const POSIX_FADV_SEQUENTIAL = 2 +const POSIX_FADV_WILLNEED = 3 +const S_IFBLK = 24576 +const S_IFCHR = 8192 +const S_IFDIR = 16384 +const S_IFIFO = 4096 +const S_IFLNK = 40960 +const S_IFMT = 61440 +const S_IFREG = 32768 +const S_IFSOCK = 49152 +const S_IRGRP = 32 +const S_IROTH = 4 +const S_IRUSR = 256 +const S_IRWXG = 56 +const S_IRWXO = 7 +const S_IRWXU = 448 +const S_ISGID = 1024 +const S_ISUID = 2048 +const S_ISVTX = 512 +const S_IWGRP = 16 +const S_IWOTH = 2 +const S_IWUSR = 128 +const S_IXGRP = 8 +const S_IXOTH = 1 +const S_IXUSR = 64 +const UTIME_NOW = 1073741823 +const UTIME_OMIT = 1073741822 + +type Tflock = struct { + Fl_type int16 + Fl_whence int16 + Fl_start Toff_t + Fl_len Toff_t + Fl_pid Tpid_t +} + +type Tnlink_t = uint32 + +type Tdev_t = uint64 + +type Tblksize_t = int32 + +type Tblkcnt_t = int64 + +type Tstat = struct { + Fst_dev Tdev_t + F__st_dev_padding int32 + F__st_ino_truncated int32 + Fst_mode Tmode_t + Fst_nlink Tnlink_t + Fst_uid Tuid_t + Fst_gid Tgid_t + Fst_rdev Tdev_t + F__st_rdev_padding int32 + Fst_size Toff_t + Fst_blksize Tblksize_t + Fst_blocks Tblkcnt_t + F__st_atim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + F__st_mtim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + F__st_ctim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + Fst_ino Tino_t + Fst_atim Ttimespec + Fst_mtim Ttimespec + Fst_ctim Ttimespec +} + +func Xfdopendir(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var dir, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _ = dir, v1 + if Xfstat(tls, fd, bp) < 0 { + return uintptr(0) + } + if Xfcntl(tls, fd, int32(F_GETFL), 0)&int32(O_PATH) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return uintptr(0) + } + if !((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&Uint32FromInt32(S_IFMT) == Uint32FromInt32(S_IFDIR)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTDIR) + return uintptr(0) + } + v1 = Xcalloc(tls, uint32(1), uint32(2072)) + dir = v1 + if !(v1 != 0) { + return uintptr(0) + } + Xfcntl(tls, fd, int32(F_SETFD), VaList(bp+152, int32(FD_CLOEXEC))) + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +const AT_EMPTY_PATH = 4096 +const AT_NO_AUTOMOUNT = 2048 +const AT_RECURSIVE = 32768 +const AT_STATX_DONT_SYNC = 16384 +const AT_STATX_FORCE_SYNC = 8192 +const AT_STATX_SYNC_AS_STAT = 0 +const AT_STATX_SYNC_TYPE = 24576 +const DN_ACCESS = 1 +const DN_ATTRIB = 32 +const DN_CREATE = 4 +const DN_DELETE = 8 +const DN_MODIFY = 2 +const DN_MULTISHOT = 2147483648 +const DN_RENAME = 16 +const DT_BLK = 6 +const DT_CHR = 2 +const DT_DIR = 4 +const DT_FIFO = 1 +const DT_LNK = 10 +const DT_REG = 8 +const DT_SOCK = 12 +const DT_UNKNOWN = 0 +const DT_WHT = 14 +const FALLOC_FL_KEEP_SIZE = 1 +const FALLOC_FL_PUNCH_HOLE = 2 +const FAPPEND = 1024 +const FASYNC = 8192 +const FFSYNC = 1052672 +const FNDELAY = 2048 +const FNONBLOCK = 2048 +const F_ADD_SEALS = 1033 +const F_CANCELLK = 1029 +const F_GETLEASE = 1025 +const F_GETPIPE_SZ = 1032 +const F_GET_FILE_RW_HINT = 1037 +const F_GET_RW_HINT = 1035 +const F_GET_SEALS = 1034 +const F_NOTIFY = 1026 +const F_OWNER_GID = 2 +const F_OWNER_PGRP = 2 +const F_OWNER_PID = 1 +const F_OWNER_TID = 0 +const F_SEAL_FUTURE_WRITE = 16 +const F_SEAL_GROW = 4 +const F_SEAL_SEAL = 1 +const F_SEAL_SHRINK = 2 +const F_SEAL_WRITE = 8 +const F_SETLEASE = 1024 +const F_SETPIPE_SZ = 1031 +const F_SET_FILE_RW_HINT = 1038 +const F_SET_RW_HINT = 1036 +const MAX_HANDLE_SZ = 128 +const RWF_WRITE_LIFE_NOT_SET = 0 +const RWH_WRITE_LIFE_EXTREME = 5 +const RWH_WRITE_LIFE_LONG = 4 +const RWH_WRITE_LIFE_MEDIUM = 3 +const RWH_WRITE_LIFE_NONE = 1 +const RWH_WRITE_LIFE_SHORT = 2 +const SPLICE_F_GIFT = 8 +const SPLICE_F_MORE = 4 +const SPLICE_F_MOVE = 1 +const SPLICE_F_NONBLOCK = 2 +const SYNC_FILE_RANGE_WAIT_AFTER = 4 +const SYNC_FILE_RANGE_WAIT_BEFORE = 1 +const SYNC_FILE_RANGE_WRITE = 2 +const alloca = 0 +const loff_t = 0 + +type Tiovec = struct { + Fiov_base uintptr + Fiov_len Tsize_t +} + +type Tfile_handle = struct { + Fhandle_bytes uint32 + Fhandle_type int32 +} + +type Tf_owner_ex = struct { + Ftype1 int32 + Fpid Tpid_t +} + +func Xopendir(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dir, v2 uintptr + var fd, v1 int32 + _, _, _, _ = dir, fd, v1, v2 + v1 = Xopen(tls, name, Int32FromInt32(O_RDONLY)|Int32FromInt32(O_DIRECTORY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + v2 = Xcalloc(tls, uint32(1), uint32(2072)) + dir = v2 + if !(v2 != 0) { + X__syscall1(tls, int32(SYS_close), fd) + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +type Tptrdiff_t = int32 + +type Tdirstream_buf_alignment_check = [1]int8 + +func Xreaddir(tls *TLS, dir uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var len1 int32 + _, _ = de, len1 + if (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos >= (*TDIR)(unsafe.Pointer(dir)).Fbuf_end { + len1 = int32(X__syscall3(tls, int32(SYS_getdents64), (*TDIR)(unsafe.Pointer(dir)).Ffd, int32(dir+24), int32(Uint32FromInt64(2048)))) + if len1 <= 0 { + if len1 < 0 && len1 != -int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = -len1 + } + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = len1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = 0 + } + de = dir + 24 + uintptr((*TDIR)(unsafe.Pointer(dir)).Fbuf_pos) + *(*int32)(unsafe.Pointer(dir + 12)) += int32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen) + (*TDIR)(unsafe.Pointer(dir)).Ftell = (*Tdirent)(unsafe.Pointer(de)).Fd_off + return de +} + +func Xreaddir_r(tls *TLS, dir uintptr, buf uintptr, result uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v buf=%v result=%v, (%v:)", tls, dir, buf, result, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var errno_save, ret, v1 int32 + _, _, _, _ = de, errno_save, ret, v1 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ___lock(tls, dir+20) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + de = Xreaddir(tls, dir) + v1 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ret = v1 + if v1 != 0 { + ___unlock(tls, dir+20) + return ret + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + if de != 0 { + Xmemcpy(tls, buf, de, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } else { + buf = UintptrFromInt32(0) + } + ___unlock(tls, dir+20) + *(*uintptr)(unsafe.Pointer(result)) = buf + return 0 +} + +func Xrewinddir(tls *TLS, dir uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, 0, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + (*TDIR)(unsafe.Pointer(dir)).Ftell = 0 + ___unlock(tls, dir+20) +} + +func Xscandir(tls *TLS, path uintptr, res uintptr, sel uintptr, cmp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v res=%v sel=%v cmp=%v, (%v:)", tls, path, res, sel, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cnt, len1, v2, v3 Tsize_t + var d, de, names, tmp, v1 uintptr + var old_errno int32 + _, _, _, _, _, _, _, _, _, _ = cnt, d, de, len1, names, old_errno, tmp, v1, v2, v3 + d = Xopendir(tls, path) + names = uintptr(0) + cnt = uint32(0) + len1 = uint32(0) + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if !(d != 0) { + return -int32(1) + } + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v1 = Xreaddir(tls, d) + de = v1 + if !(v1 != 0) { + break + } + if sel != 0 && !((*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{sel})))(tls, de) != 0) { + continue + } + if cnt >= len1 { + len1 = uint32(2)*len1 + uint32(1) + if len1 > Uint32FromUint32(0xffffffff)/Uint32FromInt64(4) { + break + } + tmp = Xrealloc(tls, names, len1*uint32(4)) + if !(tmp != 0) { + break + } + names = tmp + } + *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4)) = Xmalloc(tls, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + if !(*(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4)) != 0) { + break + } + v2 = cnt + cnt++ + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(v2)*4)), de, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } + Xclosedir(tls, d) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != 0 { + if names != 0 { + for { + v3 = cnt + cnt-- + if !(v3 > uint32(0)) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4))) + } + } + Xfree(tls, names) + return -int32(1) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if cmp != 0 { + Xqsort(tls, names, cnt, uint32(4), cmp) + } + *(*uintptr)(unsafe.Pointer(res)) = names + return int32(cnt) +} + +func Xseekdir(tls *TLS, dir uintptr, off int32) { + if __ccgo_strace { + trc("tls=%v dir=%v off=%v, (%v:)", tls, dir, off, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + (*TDIR)(unsafe.Pointer(dir)).Ftell = Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, int64(off), SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + ___unlock(tls, dir+20) +} + +func Xtelldir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32((*TDIR)(unsafe.Pointer(dir)).Ftell) +} + +func Xversionsort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrverscmp(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +func X__reset_tls(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var i, n Tsize_t + var mem, p uintptr + var self Tpthread_t + _, _, _, _, _ = i, mem, n, p, self + self = uintptr(___get_tp(tls)) + n = *(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv)) + if n != 0 { + p = X__libc.Ftls_head + i = Uint32FromInt32(1) + for { + if !(i <= n) { + break + } + mem = uintptr(*(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv + uintptr(i)*4)) - Uint32FromInt32(DTP_OFFSET)) + Xmemcpy(tls, mem, (*Ttls_module)(unsafe.Pointer(p)).Fimage, (*Ttls_module)(unsafe.Pointer(p)).Flen1) + Xmemset(tls, mem+uintptr((*Ttls_module)(unsafe.Pointer(p)).Flen1), 0, (*Ttls_module)(unsafe.Pointer(p)).Fsize-(*Ttls_module)(unsafe.Pointer(p)).Flen1) + goto _1 + _1: + ; + i++ + p = (*Ttls_module)(unsafe.Pointer(p)).Fnext + } + } +} + +func X__init_ssp(tls *TLS, entropy uintptr) { + if __ccgo_strace { + trc("tls=%v entropy=%v, (%v:)", tls, entropy, origin(2)) + } + if entropy != 0 { + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__stack_chk_guard)), entropy, uint32(4)) + } else { + X__stack_chk_guard = Tuintptr_t(uintptr(unsafe.Pointer(&X__stack_chk_guard))) * uint32(1103515245) + } + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fcanary = X__stack_chk_guard +} + +func X__stack_chk_fail(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _a_crash(tls) +} + +func X__stack_chk_fail_local(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stack_chk_fail(tls) +} + +const L_INCR = 1 +const L_SET = 0 +const L_XTND = 2 + +func _dummy(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xclearenv(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, v1 uintptr + _, _ = e, v1 + e = Xenviron + Xenviron = uintptr(0) + if e != 0 { + for *(*uintptr)(unsafe.Pointer(e)) != 0 { + v1 = e + e += 4 + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(v1)), uintptr(0)) + } + } + return 0 +} + +func Xgetenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e uintptr + var l Tsize_t + _, _ = e, l + l = uint32(int32(X__strchrnul(tls, name, int32('='))) - int32(name)) + if l != 0 && !(*(*int8)(unsafe.Pointer(name + uintptr(l))) != 0) && Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + return *(*uintptr)(unsafe.Pointer(e)) + uintptr(l) + uintptr(1) + } + goto _1 + _1: + ; + e += 4 + } + } + return uintptr(0) +} + +func _dummy1(tls *TLS, old uintptr, new1 uintptr) { +} + +func X__putenv(tls *TLS, s uintptr, l Tsize_t, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var e, newenv, tmp, v2 uintptr + var i Tsize_t + _, _, _, _, _ = e, i, newenv, tmp, v2 + i = uint32(0) + if Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint32(1)) != 0) { + tmp = *(*uintptr)(unsafe.Pointer(e)) + *(*uintptr)(unsafe.Pointer(e)) = s + X__env_rm_add(tls, tmp, r) + return 0 + } + goto _1 + _1: + ; + e += 4 + i++ + } + } + if Xenviron == _oldenv { + newenv = Xrealloc(tls, _oldenv, uint32(4)*(i+uint32(2))) + if !(newenv != 0) { + goto oom + } + } else { + newenv = Xmalloc(tls, uint32(4)*(i+uint32(2))) + if !(newenv != 0) { + goto oom + } + if i != 0 { + Xmemcpy(tls, newenv, Xenviron, uint32(4)*i) + } + Xfree(tls, _oldenv) + } + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*4)) = s + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint32(1))*4)) = uintptr(0) + v2 = newenv + _oldenv = v2 + Xenviron = v2 + if r != 0 { + X__env_rm_add(tls, uintptr(0), r) + } + return 0 + goto oom +oom: + ; + Xfree(tls, r) + return -int32(1) +} + +var _oldenv uintptr + +func Xputenv(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = uint32(int32(X__strchrnul(tls, s, int32('='))) - int32(s)) + if !(l != 0) || !(*(*int8)(unsafe.Pointer(s + uintptr(l))) != 0) { + return Xunsetenv(tls, s) + } + return X__putenv(tls, s, l, uintptr(0)) +} + +const L_cuserid = 20 +const NL_NMAX = 16 + +type Tcookie_io_functions_t = struct { + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fclose1 uintptr +} + +type T_IO_cookie_io_functions_t = Tcookie_io_functions_t + +func Xsecure_getenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if X__libc.Fsecure != 0 { + v1 = UintptrFromInt32(0) + } else { + v1 = Xgetenv(tls, name) + } + return v1 +} + +func X__env_rm_add(tls *TLS, old uintptr, new1 uintptr) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + } + var i, v3 Tsize_t + var t, v2 uintptr + _, _, _, _ = i, t, v2, v3 + i = uint32(0) + for { + if !(i < _env_alloced_n) { + break + } + if *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) == old { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) = new1 + Xfree(tls, old) + return + } else { + if !(*(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) != 0) && new1 != 0 { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) = new1 + new1 = uintptr(0) + } + } + goto _1 + _1: + ; + i++ + } + if !(new1 != 0) { + return + } + t = Xrealloc(tls, _env_alloced, uint32(4)*(_env_alloced_n+uint32(1))) + if !(t != 0) { + return + } + v2 = t + _env_alloced = v2 + v3 = _env_alloced_n + _env_alloced_n++ + *(*uintptr)(unsafe.Pointer(v2 + uintptr(v3)*4)) = new1 +} + +var _env_alloced uintptr + +var _env_alloced_n Tsize_t + +func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) (r int32) { + if __ccgo_strace { + trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l1, l2, v1 Tsize_t + var s uintptr + var v2 bool + _, _, _, _, _ = l1, l2, s, v1, v2 + if v2 = !(var1 != 0); !v2 { + v1 = uint32(int32(X__strchrnul(tls, var1, int32('='))) - int32(var1)) + l1 = v1 + } + if v2 || !(v1 != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { + return 0 + } + l2 = Xstrlen(tls, value) + s = Xmalloc(tls, l1+l2+uint32(2)) + if !(s != 0) { + return -int32(1) + } + Xmemcpy(tls, s, var1, l1) + *(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=') + Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint32(1)) + return X__putenv(tls, s, l1, s) +} + +func _dummy2(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xunsetenv(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, eo, v2 uintptr + var l Tsize_t + _, _, _, _ = e, eo, l, v2 + l = uint32(int32(X__strchrnul(tls, name, int32('='))) - int32(name)) + if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if Xenviron != 0 { + e = Xenviron + eo = e + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) + } else { + if eo != e { + v2 = eo + eo += 4 + *(*uintptr)(unsafe.Pointer(v2)) = *(*uintptr)(unsafe.Pointer(e)) + } else { + eo += 4 + } + } + goto _1 + _1: + ; + e += 4 + } + if eo != e { + *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) + } + } + return 0 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +type Terrmsgstr_t = struct { + Fstr0 [21]int8 + FstrEILSEQ [22]int8 + FstrEDOM [13]int8 + FstrERANGE [25]int8 + FstrENOTTY [10]int8 + FstrEACCES [18]int8 + FstrEPERM [24]int8 + FstrENOENT [26]int8 + FstrESRCH [16]int8 + FstrEEXIST [12]int8 + FstrEOVERFLOW [30]int8 + FstrENOSPC [24]int8 + FstrENOMEM [14]int8 + FstrEBUSY [14]int8 + FstrEINTR [24]int8 + FstrEAGAIN [33]int8 + FstrESPIPE [13]int8 + FstrEXDEV [18]int8 + FstrEROFS [22]int8 + FstrENOTEMPTY [20]int8 + FstrECONNRESET [25]int8 + FstrETIMEDOUT [20]int8 + FstrECONNREFUSED [19]int8 + FstrEHOSTDOWN [13]int8 + FstrEHOSTUNREACH [20]int8 + FstrEADDRINUSE [15]int8 + FstrEPIPE [12]int8 + FstrEIO [10]int8 + FstrENXIO [26]int8 + FstrENOTBLK [22]int8 + FstrENODEV [15]int8 + FstrENOTDIR [16]int8 + FstrEISDIR [15]int8 + FstrETXTBSY [15]int8 + FstrENOEXEC [18]int8 + FstrEINVAL [17]int8 + FstrE2BIG [23]int8 + FstrELOOP [19]int8 + FstrENAMETOOLONG [18]int8 + FstrENFILE [30]int8 + FstrEMFILE [30]int8 + FstrEBADF [20]int8 + FstrECHILD [17]int8 + FstrEFAULT [12]int8 + FstrEFBIG [15]int8 + FstrEMLINK [15]int8 + FstrENOLCK [19]int8 + FstrEDEADLK [30]int8 + FstrENOTRECOVERABLE [22]int8 + FstrEOWNERDEAD [20]int8 + FstrECANCELED [19]int8 + FstrENOSYS [25]int8 + FstrENOMSG [27]int8 + FstrEIDRM [19]int8 + FstrENOSTR [20]int8 + FstrENODATA [18]int8 + FstrETIME [15]int8 + FstrENOSR [25]int8 + FstrENOLINK [22]int8 + FstrEPROTO [15]int8 + FstrEBADMSG [12]int8 + FstrEBADFD [29]int8 + FstrENOTSOCK [13]int8 + FstrEDESTADDRREQ [29]int8 + FstrEMSGSIZE [18]int8 + FstrEPROTOTYPE [31]int8 + FstrENOPROTOOPT [23]int8 + FstrEPROTONOSUPPORT [23]int8 + FstrESOCKTNOSUPPORT [26]int8 + FstrENOTSUP [14]int8 + FstrEPFNOSUPPORT [30]int8 + FstrEAFNOSUPPORT [41]int8 + FstrEADDRNOTAVAIL [22]int8 + FstrENETDOWN [16]int8 + FstrENETUNREACH [20]int8 + FstrENETRESET [28]int8 + FstrECONNABORTED [19]int8 + FstrENOBUFS [26]int8 + FstrEISCONN [20]int8 + FstrENOTCONN [21]int8 + FstrESHUTDOWN [34]int8 + FstrEALREADY [30]int8 + FstrEINPROGRESS [22]int8 + FstrESTALE [18]int8 + FstrEREMOTEIO [17]int8 + FstrEDQUOT [15]int8 + FstrENOMEDIUM [16]int8 + FstrEMEDIUMTYPE [18]int8 + FstrEMULTIHOP [19]int8 + FstrENOKEY [27]int8 + FstrEKEYEXPIRED [16]int8 + FstrEKEYREVOKED [21]int8 + FstrEKEYREJECTED [28]int8 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +var _errmsgstr = Terrmsgstr_t{ + Fstr0: [21]int8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', ' ', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n'}, + FstrEILSEQ: [22]int8{'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'b', 'y', 't', 'e', ' ', 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e'}, + FstrEDOM: [13]int8{'D', 'o', 'm', 'a', 'i', 'n', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrERANGE: [25]int8{'R', 'e', 's', 'u', 'l', 't', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a', 'b', 'l', 'e'}, + FstrENOTTY: [10]int8{'N', 'o', 't', ' ', 'a', ' ', 't', 't', 'y'}, + FstrEACCES: [18]int8{'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', ' ', 'd', 'e', 'n', 'i', 'e', 'd'}, + FstrEPERM: [24]int8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'e', 'r', 'm', 'i', 't', 't', 'e', 'd'}, + FstrENOENT: [26]int8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'f', 'i', 'l', 'e', ' ', 'o', 'r', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrESRCH: [16]int8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEEXIST: [12]int8{'F', 'i', 'l', 'e', ' ', 'e', 'x', 'i', 's', 't', 's'}, + FstrEOVERFLOW: [30]int8{'V', 'a', 'l', 'u', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'a', 't', 'a', ' ', 't', 'y', 'p', 'e'}, + FstrENOSPC: [24]int8{'N', 'o', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'l', 'e', 'f', 't', ' ', 'o', 'n', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOMEM: [14]int8{'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y'}, + FstrEBUSY: [14]int8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrEINTR: [24]int8{'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 'e', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l'}, + FstrEAGAIN: [33]int8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 't', 'e', 'm', 'p', 'o', 'r', 'a', 'r', 'i', 'l', 'y', ' ', 'u', 'n', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrESPIPE: [13]int8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 's', 'e', 'e', 'k'}, + FstrEXDEV: [18]int8{'C', 'r', 'o', 's', 's', '-', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'l', 'i', 'n', 'k'}, + FstrEROFS: [22]int8{'R', 'e', 'a', 'd', '-', 'o', 'n', 'l', 'y', ' ', 'f', 'i', 'l', 'e', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrENOTEMPTY: [20]int8{'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'n', 'o', 't', ' ', 'e', 'm', 'p', 't', 'y'}, + FstrECONNRESET: [25]int8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'p', 'e', 'e', 'r'}, + FstrETIMEDOUT: [20]int8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 't', 'i', 'm', 'e', 'd', ' ', 'o', 'u', 't'}, + FstrECONNREFUSED: [19]int8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 'f', 'u', 's', 'e', 'd'}, + FstrEHOSTDOWN: [13]int8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrEHOSTUNREACH: [20]int8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrEADDRINUSE: [15]int8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'i', 'n', ' ', 'u', 's', 'e'}, + FstrEPIPE: [12]int8{'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e'}, + FstrEIO: [10]int8{'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrENXIO: [26]int8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'o', 'r', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrENOTBLK: [22]int8{'B', 'l', 'o', 'c', 'k', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrENODEV: [15]int8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOTDIR: [16]int8{'N', 'o', 't', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrEISDIR: [15]int8{'I', 's', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrETXTBSY: [15]int8{'T', 'e', 'x', 't', ' ', 'f', 'i', 'l', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrENOEXEC: [18]int8{'E', 'x', 'e', 'c', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEINVAL: [17]int8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'a', 'r', 'g', 'u', 'm', 'e', 'n', 't'}, + FstrE2BIG: [23]int8{'A', 'r', 'g', 'u', 'm', 'e', 'n', 't', ' ', 'l', 'i', 's', 't', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrELOOP: [19]int8{'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', ' ', 'l', 'i', 'n', 'k', ' ', 'l', 'o', 'o', 'p'}, + FstrENAMETOOLONG: [18]int8{'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrENFILE: [30]int8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'o', 'p', 'e', 'n', ' ', 'f', 'i', 'l', 'e', 's', ' ', 'i', 'n', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrEMFILE: [30]int8{'N', 'o', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEBADF: [20]int8{'B', 'a', 'd', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r'}, + FstrECHILD: [17]int8{'N', 'o', ' ', 'c', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEFAULT: [12]int8{'B', 'a', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrEFBIG: [15]int8{'F', 'i', 'l', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEMLINK: [15]int8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'l', 'i', 'n', 'k', 's'}, + FstrENOLCK: [19]int8{'N', 'o', ' ', 'l', 'o', 'c', 'k', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEDEADLK: [30]int8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'd', 'e', 'a', 'd', 'l', 'o', 'c', 'k', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'o', 'c', 'c', 'u', 'r'}, + FstrENOTRECOVERABLE: [22]int8{'S', 't', 'a', 't', 'e', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e'}, + FstrEOWNERDEAD: [20]int8{'P', 'r', 'e', 'v', 'i', 'o', 'u', 's', ' ', 'o', 'w', 'n', 'e', 'r', ' ', 'd', 'i', 'e', 'd'}, + FstrECANCELED: [19]int8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'c', 'a', 'n', 'c', 'e', 'l', 'e', 'd'}, + FstrENOSYS: [25]int8{'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'i', 'm', 'p', 'l', 'e', 'm', 'e', 'n', 't', 'e', 'd'}, + FstrENOMSG: [27]int8{'N', 'o', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 'o', 'f', ' ', 'd', 'e', 's', 'i', 'r', 'e', 'd', ' ', 't', 'y', 'p', 'e'}, + FstrEIDRM: [19]int8{'I', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd'}, + FstrENOSTR: [20]int8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 'n', 'o', 't', ' ', 'a', ' ', 's', 't', 'r', 'e', 'a', 'm'}, + FstrENODATA: [18]int8{'N', 'o', ' ', 'd', 'a', 't', 'a', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrETIME: [15]int8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 't', 'i', 'm', 'e', 'o', 'u', 't'}, + FstrENOSR: [25]int8{'O', 'u', 't', ' ', 'o', 'f', ' ', 's', 't', 'r', 'e', 'a', 'm', 's', ' ', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's'}, + FstrENOLINK: [22]int8{'L', 'i', 'n', 'k', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 's', 'e', 'v', 'e', 'r', 'e', 'd'}, + FstrEPROTO: [15]int8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEBADMSG: [12]int8{'B', 'a', 'd', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'}, + FstrEBADFD: [29]int8{'F', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', ' ', 'i', 'n', ' ', 'b', 'a', 'd', ' ', 's', 't', 'a', 't', 'e'}, + FstrENOTSOCK: [13]int8{'N', 'o', 't', ' ', 'a', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrEDESTADDRREQ: [29]int8{'D', 'e', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrEMSGSIZE: [18]int8{'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEPROTOTYPE: [31]int8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'w', 'r', 'o', 'n', 'g', ' ', 't', 'y', 'p', 'e', ' ', 'f', 'o', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrENOPROTOOPT: [23]int8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEPROTONOSUPPORT: [23]int8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrESOCKTNOSUPPORT: [26]int8{'S', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrENOTSUP: [14]int8{'N', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEPFNOSUPPORT: [30]int8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEAFNOSUPPORT: [41]int8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'b', 'y', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'}, + FstrEADDRNOTAVAIL: [22]int8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrENETDOWN: [16]int8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrENETUNREACH: [20]int8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrENETRESET: [28]int8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'n', 'e', 't', 'w', 'o', 'r', 'k'}, + FstrECONNABORTED: [19]int8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'a', 'b', 'o', 'r', 't', 'e', 'd'}, + FstrENOBUFS: [26]int8{'N', 'o', ' ', 'b', 'u', 'f', 'f', 'e', 'r', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEISCONN: [20]int8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'i', 's', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrENOTCONN: [21]int8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'n', 'o', 't', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrESHUTDOWN: [34]int8{'C', 'a', 'n', 'n', 'o', 't', ' ', 's', 'e', 'n', 'd', ' ', 'a', 'f', 't', 'e', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 's', 'h', 'u', 't', 'd', 'o', 'w', 'n'}, + FstrEALREADY: [30]int8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrEINPROGRESS: [22]int8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrESTALE: [18]int8{'S', 't', 'a', 'l', 'e', ' ', 'f', 'i', 'l', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e'}, + FstrEREMOTEIO: [17]int8{'R', 'e', 'm', 'o', 't', 'e', ' ', 'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEDQUOT: [15]int8{'Q', 'u', 'o', 't', 'a', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd'}, + FstrENOMEDIUM: [16]int8{'N', 'o', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 'f', 'o', 'u', 'n', 'd'}, + FstrEMEDIUMTYPE: [18]int8{'W', 'r', 'o', 'n', 'g', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 't', 'y', 'p', 'e'}, + FstrEMULTIHOP: [19]int8{'M', 'u', 'l', 't', 'i', 'h', 'o', 'p', ' ', 'a', 't', 't', 'e', 'm', 'p', 't', 'e', 'd'}, + FstrENOKEY: [27]int8{'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd', ' ', 'k', 'e', 'y', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEKEYEXPIRED: [16]int8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd'}, + FstrEKEYREVOKED: [21]int8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 'r', 'e', 'v', 'o', 'k', 'e', 'd'}, + FstrEKEYREJECTED: [28]int8{'K', 'e', 'y', ' ', 'w', 'a', 's', ' ', 'r', 'e', 'j', 'e', 'c', 't', 'e', 'd', ' ', 'b', 'y', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e'}, +} + +var _errmsgidx = [132]uint16{ + 1: uint16(uint32(UintptrFromInt32(0) + 109)), + 2: uint16(uint32(UintptrFromInt32(0) + 133)), + 3: uint16(uint32(UintptrFromInt32(0) + 159)), + 4: uint16(uint32(UintptrFromInt32(0) + 269)), + 5: uint16(uint32(UintptrFromInt32(0) + 523)), + 6: uint16(uint32(UintptrFromInt32(0) + 533)), + 7: uint16(uint32(UintptrFromInt32(0) + 677)), + 8: uint16(uint32(UintptrFromInt32(0) + 642)), + 9: uint16(uint32(UintptrFromInt32(0) + 797)), + 10: uint16(uint32(UintptrFromInt32(0) + 817)), + 11: uint16(uint32(UintptrFromInt32(0) + 293)), + 12: uint16(uint32(UintptrFromInt32(0) + 241)), + 13: uint16(uint32(UintptrFromInt32(0) + 91)), + 14: uint16(uint32(UintptrFromInt32(0) + 834)), + 15: uint16(uint32(UintptrFromInt32(0) + 559)), + 16: uint16(uint32(UintptrFromInt32(0) + 255)), + 17: uint16(uint32(UintptrFromInt32(0) + 175)), + 18: uint16(uint32(UintptrFromInt32(0) + 339)), + 19: uint16(uint32(UintptrFromInt32(0) + 581)), + 20: uint16(uint32(UintptrFromInt32(0) + 596)), + 21: uint16(uint32(UintptrFromInt32(0) + 612)), + 22: uint16(uint32(UintptrFromInt32(0) + 660)), + 23: uint16(uint32(UintptrFromInt32(0) + 737)), + 24: uint16(uint32(UintptrFromInt32(0) + 767)), + 25: uint16(uint32(UintptrFromInt32(0) + 81)), + 26: uint16(uint32(UintptrFromInt32(0) + 627)), + 27: uint16(uint32(UintptrFromInt32(0) + 846)), + 28: uint16(uint32(UintptrFromInt32(0) + 217)), + 29: uint16(uint32(UintptrFromInt32(0) + 326)), + 30: uint16(uint32(UintptrFromInt32(0) + 357)), + 31: uint16(uint32(UintptrFromInt32(0) + 861)), + 32: uint16(uint32(UintptrFromInt32(0) + 511)), + 33: uint16(uint32(UintptrFromInt32(0) + 43)), + 34: uint16(uint32(UintptrFromInt32(0) + 56)), + 35: uint16(uint32(UintptrFromInt32(0) + 895)), + 36: uint16(uint32(UintptrFromInt32(0) + 719)), + 37: uint16(uint32(UintptrFromInt32(0) + 876)), + 38: uint16(uint32(UintptrFromInt32(0) + 986)), + 39: uint16(uint32(UintptrFromInt32(0) + 379)), + 40: uint16(uint32(UintptrFromInt32(0) + 700)), + 42: uint16(uint32(UintptrFromInt32(0) + 1011)), + 43: uint16(uint32(UintptrFromInt32(0) + 1038)), + 60: uint16(uint32(UintptrFromInt32(0) + 1057)), + 61: uint16(uint32(UintptrFromInt32(0) + 1077)), + 62: uint16(uint32(UintptrFromInt32(0) + 1095)), + 63: uint16(uint32(UintptrFromInt32(0) + 1110)), + 67: uint16(uint32(UintptrFromInt32(0) + 1135)), + 71: uint16(uint32(UintptrFromInt32(0) + 1157)), + 72: uint16(uint32(UintptrFromInt32(0) + 1803)), + 74: uint16(uint32(UintptrFromInt32(0) + 1172)), + 75: uint16(uint32(UintptrFromInt32(0) + 187)), + 77: uint16(uint32(UintptrFromInt32(0) + 1184)), + 84: uint16(uint32(UintptrFromInt32(0) + 21)), + 88: uint16(uint32(UintptrFromInt32(0) + 1213)), + 89: uint16(uint32(UintptrFromInt32(0) + 1226)), + 90: uint16(uint32(UintptrFromInt32(0) + 1255)), + 91: uint16(uint32(UintptrFromInt32(0) + 1273)), + 92: uint16(uint32(UintptrFromInt32(0) + 1304)), + 93: uint16(uint32(UintptrFromInt32(0) + 1327)), + 94: uint16(uint32(UintptrFromInt32(0) + 1350)), + 95: uint16(uint32(UintptrFromInt32(0) + 1376)), + 96: uint16(uint32(UintptrFromInt32(0) + 1390)), + 97: uint16(uint32(UintptrFromInt32(0) + 1420)), + 98: uint16(uint32(UintptrFromInt32(0) + 496)), + 99: uint16(uint32(UintptrFromInt32(0) + 1461)), + 100: uint16(uint32(UintptrFromInt32(0) + 1483)), + 101: uint16(uint32(UintptrFromInt32(0) + 1499)), + 102: uint16(uint32(UintptrFromInt32(0) + 1519)), + 103: uint16(uint32(UintptrFromInt32(0) + 1547)), + 104: uint16(uint32(UintptrFromInt32(0) + 399)), + 105: uint16(uint32(UintptrFromInt32(0) + 1566)), + 106: uint16(uint32(UintptrFromInt32(0) + 1592)), + 107: uint16(uint32(UintptrFromInt32(0) + 1612)), + 108: uint16(uint32(UintptrFromInt32(0) + 1633)), + 110: uint16(uint32(UintptrFromInt32(0) + 424)), + 111: uint16(uint32(UintptrFromInt32(0) + 444)), + 112: uint16(uint32(UintptrFromInt32(0) + 463)), + 113: uint16(uint32(UintptrFromInt32(0) + 476)), + 114: uint16(uint32(UintptrFromInt32(0) + 1667)), + 115: uint16(uint32(UintptrFromInt32(0) + 1697)), + 116: uint16(uint32(UintptrFromInt32(0) + 1719)), + 121: uint16(uint32(UintptrFromInt32(0) + 1737)), + 122: uint16(uint32(UintptrFromInt32(0) + 1754)), + 123: uint16(uint32(UintptrFromInt32(0) + 1769)), + 124: uint16(uint32(UintptrFromInt32(0) + 1785)), + 125: uint16(uint32(UintptrFromInt32(0) + 967)), + 126: uint16(uint32(UintptrFromInt32(0) + 1822)), + 127: uint16(uint32(UintptrFromInt32(0) + 1849)), + 128: uint16(uint32(UintptrFromInt32(0) + 1865)), + 129: uint16(uint32(UintptrFromInt32(0) + 1886)), + 130: uint16(uint32(UintptrFromInt32(0) + 947)), + 131: uint16(uint32(UintptrFromInt32(0) + 925)), +} + +func X__strerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + if uint32(e) >= Uint32FromInt64(264)/Uint32FromInt64(2) { + e = 0 + } + s = uintptr(unsafe.Pointer(&_errmsgstr)) + uintptr(_errmsgidx[e]) + return X__lctrans(tls, s, *(*uintptr)(unsafe.Pointer(loc + 5*4))) +} + +func Xstrerror(tls *TLS, e int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v, (%v:)", tls, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, loc) +} + +func X_Exit(tls *TLS, ec int32) { + if __ccgo_strace { + trc("tls=%v ec=%v, (%v:)", tls, ec, origin(2)) + } + X__syscall1(tls, int32(SYS_exit_group), ec) + for { + X__syscall1(tls, int32(SYS_exit), ec) + goto _1 + _1: + } +} + +func X__assert_fail(tls *TLS, expr uintptr, file uintptr, line int32, func1 uintptr) { + if __ccgo_strace { + trc("tls=%v expr=%v file=%v line=%v func1=%v, (%v:)", tls, expr, file, line, func1, origin(2)) + } + bp := tls.Alloc(48) + defer tls.Free(48) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+212, VaList(bp+8, expr, file, func1, line)) + Xabort(tls) +} + +const COUNT = 32 + +var _funcs [32]uintptr +var _count int32 +var _lock [1]int32 + +func X__funcs_on_quick_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var func1 uintptr + var v1 int32 + _, _ = func1, v1 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + for _count > 0 { + _count-- + v1 = _count + func1 = _funcs[v1] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + (*(*func(*TLS))(unsafe.Pointer(&struct{ uintptr }{func1})))(tls) + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + } +} + +func Xat_quick_exit(tls *TLS, func1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v func1=%v, (%v:)", tls, func1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + r = 0 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + if _count == int32(32) { + r = -int32(1) + } else { + v1 = _count + _count++ + _funcs[v1] = func1 + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + return r +} + +func _dummy3(tls *TLS) { +} + +func Xquick_exit(tls *TLS, code int32) { + if __ccgo_strace { + trc("tls=%v code=%v, (%v:)", tls, code, origin(2)) + } + X__funcs_on_quick_exit(tls) + X_Exit(tls, code) +} + +func Xcreat(tls *TLS, filename uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xopen(tls, filename, Int32FromInt32(O_CREAT)|Int32FromInt32(O_WRONLY)|Int32FromInt32(O_TRUNC), VaList(bp+8, mode)) +} + +func Xfcntl(tls *TLS, fd int32, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cmd=%v va=%v, (%v:)", tls, fd, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var arg uint32 + var ret, ret1, v1 int32 + var _ /* ex at bp+0 */ Tf_owner_ex + _, _, _, _, _ = ap, arg, ret, ret1, v1 + ap = va + arg = VaUint32(&ap) + _ = ap + if cmd == int32(F_SETFL) { + arg |= uint32(O_LARGEFILE) + } + if cmd == int32(F_SETLKW) { + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg)), 0, 0, 0))) + } + if cmd == int32(F_GETOWN) { + ret = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETOWN_EX)), int32(bp))) + if ret == -int32(EINVAL) { + return int32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg)))) + } + if ret != 0 { + return X__syscall_ret(tls, uint32(ret)) + } + if (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Ftype1 == int32(F_OWNER_PGRP) { + v1 = -(*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } else { + v1 = (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } + return v1 + } + if cmd == int32(F_DUPFD_CLOEXEC) { + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD_CLOEXEC)), int32(arg))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(ret1)) + } + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD_CLOEXEC)), int32(Int32FromInt32(0)))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall1(tls, int32(SYS_close), ret1) + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD)), int32(arg))) + if ret1 >= 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(ret1)) + } + switch cmd { + case int32(F_SETLK): + fallthrough + case int32(F_GETLK): + fallthrough + case int32(F_GETOWN_EX): + fallthrough + case int32(F_SETOWN_EX): + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg))))) + default: + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(arg)))) + } + return r +} + +func Xopen(tls *TLS, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v flags=%v va=%v, (%v:)", tls, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var fd int32 + var mode Tmode_t + _, _, _ = ap, fd, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + fd = int32(___syscall_cp(tls, int32(SYS_open), int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(mode), 0, 0, 0)) + if fd >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(fd)) +} + +func Xopenat(tls *TLS, fd int32, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v flags=%v va=%v, (%v:)", tls, fd, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var mode Tmode_t + _, _ = ap, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_openat), fd, int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(mode), 0, 0))) +} + +func Xposix_fadvise(tls *TLS, fd int32, base Toff_t, len1 Toff_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v advice=%v, (%v:)", tls, fd, base, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int32(SYS_fadvise64_64), fd, int32(base), int32(len1), advice)) +} + +func Xposix_fallocate(tls *TLS, fd int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v, (%v:)", tls, fd, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int32(SYS_fallocate), fd, int32(Int32FromInt32(0)), int32(base), int32(len1))) +} + +const FE_ALL_EXCEPT = 63 +const FE_DIVBYZERO = 4 +const FE_DOWNWARD = 1024 +const FE_INEXACT = 32 +const FE_INVALID = 1 +const FE_OVERFLOW = 8 +const FE_TONEAREST = 0 +const FE_TOWARDZERO = 3072 +const FE_UNDERFLOW = 16 +const FE_UPWARD = 2048 +const __FE_DENORM = 2 + +type Tfexcept_t = uint16 + +type Tfenv_t = struct { + F__control_word uint16 + F__unused1 uint16 + F__status_word uint16 + F__unused2 uint16 + F__tags uint16 + F__unused3 uint16 + F__eip uint32 + F__cs_selector uint16 + F__ccgo_align8 [2]byte + F__ccgo20 uint16 + F__data_offset uint32 + F__data_selector uint16 + F__unused5 uint16 +} + +/* Dummy functions for archs lacking fenv implementation */ + +func Xfeclearexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xferaiseexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xfetestexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xfegetround(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return FE_TONEAREST +} + +func X__fesetround(tls *TLS, r int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return 0 +} + +func Xfegetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xfesetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const WCONTINUED = 8 +const WEXITED = 4 +const WNOWAIT = 16777216 +const WSTOPPED = 2 +const __WALL = 1073741824 +const __WCLONE = 2147483648 +const __WNOTHREAD = 536870912 + +type Tidtype_t = int32 + +const _P_ALL = 0 +const _P_PID = 1 +const _P_PGID = 2 +const _P_PIDFD = 3 +const F_APP = 128 +const F_EOF = 16 +const F_ERR = 32 +const F_NORD = 4 +const F_NOWR = 8 +const F_PERM = 1 +const F_SVB = 64 +const KMAX = 128 +const LDBL_EPSILON1 = 2.22044604925031308085e-16 +const LDBL_MAX1 = 1.79769313486231570815e+308 +const LDBL_MIN1 = 2.22507385850720138309e-308 +const LD_B1B_DIG = 2 +const LD_B1B_MAX = 254740991 +const MASK = 127 +const MAYBE_WAITERS = 1073741824 +const UNGET = 8 + +type TFILE = struct { + Fflags uint32 + Frpos uintptr + Frend uintptr + Fclose1 uintptr + Fwend uintptr + Fwpos uintptr + Fmustbezero_1 uintptr + Fwbase uintptr + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fbuf uintptr + Fbuf_size Tsize_t + Fprev uintptr + Fnext uintptr + Ffd int32 + Fpipe_pid int32 + Flockcount int32 + Fmode int32 + Flock int32 + Flbf int32 + Fcookie uintptr + Foff Toff_t + Fgetln_buf uintptr + Fmustbezero_2 uintptr + Fshend uintptr + Fshlim Toff_t + Fshcnt Toff_t + Fprev_locked uintptr + Fnext_locked uintptr + Flocale uintptr +} + +type T_IO_FILE = TFILE + +func _scanexp(tls *TLS, f uintptr, pok int32) (r int64) { + var c, neg, x, v1, v10, v14, v18, v4 int32 + var y, v22 int64 + var v11, v12, v15, v16, v19, v2, v20, v3, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, neg, x, y, v1, v10, v11, v12, v14, v15, v16, v18, v19, v2, v20, v22, v3, v4, v5, v6 + neg = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + if c == int32('+') || c == int32('-') { + neg = BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__shgetc(tls, f) + } + c = v4 + if uint32(c-int32('0')) >= uint32(10) && pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if uint32(c-int32('0')) >= uint32(10) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return -Int64FromInt64(0x7fffffffffffffff) - Int64FromInt32(1) + } + x = 0 + for { + if !(uint32(c-int32('0')) < uint32(10) && x < Int32FromInt32(INT_MAX)/Int32FromInt32(10)) { + break + } + x = int32(10)*x + c - int32('0') + goto _9 + _9: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v12 = f + 4 + v11 = *(*uintptr)(unsafe.Pointer(v12)) + *(*uintptr)(unsafe.Pointer(v12))++ + v10 = int32(*(*uint8)(unsafe.Pointer(v11))) + } else { + v10 = X__shgetc(tls, f) + } + c = v10 + } + y = int64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y < Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(100)) { + break + } + y = int64(10)*y + int64(c) - int64('0') + goto _13 + _13: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + for { + if !(uint32(c-int32('0')) < uint32(10)) { + break + } + goto _17 + _17: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v20 = f + 4 + v19 = *(*uintptr)(unsafe.Pointer(v20)) + *(*uintptr)(unsafe.Pointer(v20))++ + v18 = int32(*(*uint8)(unsafe.Pointer(v19))) + } else { + v18 = X__shgetc(tls, f) + } + c = v18 + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if neg != 0 { + v22 = -y + } else { + v22 = y + } + return v22 +} + +func _decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) (r float64) { + bp := tls.Alloc(512) + defer tls.Free(512) + var a, bitlim, denormal, e2, emax, gotdig, gotrad, i, j, k, lnz, p10, rp, rpm9, sh, z, v13, v14, v2, v21, v23, v29, v30, v6, v9 int32 + var bias, frac, y float64 + var carry, carry1, carry2, t, tmp, tmp2 Tuint32_t + var dc, e10, lrp int64 + var tmp1 Tuint64_t + var v10, v11, v15, v16, v3, v4, v7, v8 uintptr + var _ /* x at bp+0 */ [128]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, bias, bitlim, carry, carry1, carry2, dc, denormal, e10, e2, emax, frac, gotdig, gotrad, i, j, k, lnz, lrp, p10, rp, rpm9, sh, t, tmp, tmp1, tmp2, y, z, v10, v11, v13, v14, v15, v16, v2, v21, v23, v29, v3, v30, v4, v6, v7, v8, v9 + lrp = 0 + dc = 0 + e10 = 0 + lnz = 0 + gotdig = 0 + gotrad = 0 + emax = -emin - bits + int32(3) + denormal = 0 + frac = Float64FromInt32(0) + bias = Float64FromInt32(0) + j = 0 + k = 0 + /* Don't let leading zeros consume buffer space */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _1 + _1: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + c = v2 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v8 = f + 4 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + v6 = int32(*(*uint8)(unsafe.Pointer(v7))) + } else { + v6 = X__shgetc(tls, f) + } + c = v6 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + lrp-- + goto _5 + _5: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 4 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + c = v9 + } + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + gotrad = int32(1) + lrp = dc + } else { + if k < Int32FromInt32(KMAX)-Int32FromInt32(3) { + dc++ + if c != int32('0') { + lnz = int32(dc) + } + if j != 0 { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]*uint32(10) + uint32(c) - uint32('0') + } else { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(c - int32('0')) + } + j++ + v13 = j + if v13 == int32(9) { + k++ + j = 0 + } + gotdig = int32(1) + } else { + dc++ + if c != int32('0') { + lnz = (Int32FromInt32(KMAX) - Int32FromInt32(4)) * Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(Int32FromInt32(KMAX)-Int32FromInt32(4))*4)) |= uint32(1) + } + } + } + goto _12 + _12: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + if !(gotrad != 0) { + lrp = dc + } + if gotdig != 0 && c|int32(32) == int32('e') { + e10 = _scanexp(tls, f, pok) + if e10 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e10 = 0 + } + lrp += e10 + } else { + if c >= 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if !(gotdig != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + /* Handle zero specially to avoid nasty special cases later */ + if !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] != 0) { + return float64(sign) * float64(0) + } + /* Optimize small integers (w/no exponent) and over/under-flow */ + if lrp == dc && dc < int64(10) && (bits > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bits == uint32(0)) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if lrp > int64(-emin/int32(2)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if lrp < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + /* Align incomplete final B1B digit */ + if j != 0 { + for { + if !(j < int32(9)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32(10) + goto _19 + _19: + ; + j++ + } + k++ + j = 0 + } + a = 0 + z = k + e2 = 0 + rp = int32(lrp) + /* Optimize small to mid-size integers (even in exp. notation) */ + if lnz < int32(9) && lnz <= rp && rp < int32(18) { + if rp == int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if rp < int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) / float64(_p10s[int32(8)-rp]) + } + bitlim = bits - int32(3)*(rp-Int32FromInt32(9)) + if bitlim > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bitlim == uint32(0) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) * float64(_p10s[rp-int32(10)]) + } + } + /* Drop trailing zeros */ + for { + if !!((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z-int32(1)] != 0) { + break + } + goto _20 + _20: + ; + z-- + } + /* Align radix point to B1B digit boundary */ + if rp%int32(9) != 0 { + if rp >= 0 { + v21 = rp % int32(9) + } else { + v21 = rp%int32(9) + int32(9) + } + rpm9 = v21 + p10 = _p10s[int32(8)-rpm9] + carry = uint32(0) + k = a + for { + if !(k != z) { + break + } + tmp = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] % uint32(p10) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]/uint32(p10) + carry + carry = uint32(int32(1000000000)/p10) * tmp + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + rp -= int32(9) + } + goto _22 + _22: + ; + k++ + } + if carry != 0 { + v23 = z + z++ + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v23] = carry + } + rp += int32(9) - rpm9 + } + /* Upscale until desired number of bits are left of radix point */ + for rp < Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) || rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) && (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] < _th[0] { + carry1 = uint32(0) + e2 -= int32(29) + k = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + for { + tmp1 = uint64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k])< uint64(1000000000) { + carry1 = uint32(tmp1 / uint64(1000000000)) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1 % uint64(1000000000)) + } else { + carry1 = uint32(0) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1) + } + if k == (z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) && k != a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + z = k + } + if k == a { + break + } + goto _24 + _24: + ; + k = (k - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry1 != 0 { + rp += int32(9) + a = (a - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if a == z { + z = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] = carry1 + } + } + /* Downscale until exactly number of bits are left of radix point */ + for { + carry2 = uint32(0) + sh = int32(1) + i = 0 + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + k = (a + i) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if k == z || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] < _th[i] { + i = int32(LD_B1B_DIG) + break + } + if (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] > _th[i] { + break + } + goto _26 + _26: + ; + i++ + } + if i == int32(LD_B1B_DIG) && rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + break + } + /* FIXME: find a way to compute optimal sh */ + if rp > Int32FromInt32(9)+Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + sh = int32(9) + } + e2 += sh + k = a + for { + if !(k != z) { + break + } + tmp2 = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] & uint32(int32(1)<>sh + carry2 + carry2 = uint32(Int32FromInt32(1000000000)>>sh) * tmp2 + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + i-- + rp -= int32(9) + } + goto _27 + _27: + ; + k = (k + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry2 != 0 { + if (z+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != a { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] = carry2 + z = (z + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= uint32(1) + } + } + goto _25 + _25: + } + /* Assemble desired bits into floating point variable */ + v29 = Int32FromInt32(0) + i = v29 + y = float64(v29) + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + v30 = (z + Int32FromInt32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + z = v30 + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v30-int32(1)] = uint32(0) + } + y = Float64FromFloat64(1e+09)*y + float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))]) + goto _28 + _28: + ; + i++ + } + y *= float64(sign) + /* Limit precision for denormal results */ + if bits > int32(LDBL_MANT_DIG)+e2-emin { + bits = int32(LDBL_MANT_DIG) + e2 - emin + if bits < 0 { + bits = 0 + } + denormal = int32(1) + } + /* Calculate bias term to force rounding, move out lower bits */ + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), y) + frac = Xfmodl(tls, y, Xscalbn(tls, Float64FromInt32(1), int32(LDBL_MANT_DIG)-bits)) + y -= frac + y += bias + } + /* Process tail of decimal input so it can affect rounding */ + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z { + t = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] + if t < uint32(500000000) && (t != 0 || (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z) { + frac += float64(0.25) * float64(sign) + } else { + if t > uint32(500000000) { + frac += float64(0.75) * float64(sign) + } else { + if t == uint32(500000000) { + if (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + frac += float64(0.5) * float64(sign) + } else { + frac += float64(0.75) * float64(sign) + } + } + } + } + if int32(LDBL_MANT_DIG)-bits >= int32(2) && !(Xfmodl(tls, frac, Float64FromInt32(1)) != 0) { + frac++ + } + } + y += frac + y -= bias + if (e2+int32(LDBL_MANT_DIG))&int32(INT_MAX) > emax-int32(5) { + if Xfabsl(tls, y) >= Float64FromInt32(2)/Float64FromFloat64(2.22044604925031308085e-16) { + if denormal != 0 && bits == int32(LDBL_MANT_DIG)+e2-emin { + denormal = 0 + } + y *= Float64FromFloat64(0.5) + e2++ + } + if e2+int32(LDBL_MANT_DIG) > emax || denormal != 0 && frac != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + } + return Xscalbnl(tls, y, e2) +} + +var _th = [2]Tuint32_t{ + 0: uint32(9007199), + 1: uint32(254740991), +} + +var _p10s = [8]int32{ + 0: int32(10), + 1: int32(100), + 2: int32(1000), + 3: int32(10000), + 4: int32(100000), + 5: int32(1000000), + 6: int32(10000000), + 7: int32(100000000), +} + +func _hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) (r float64) { + var bias, scale, y float64 + var c, d, gotdig, gotrad, gottail, v1, v12, v16, v5, v8 int32 + var dc, e2, rp int64 + var x Tuint32_t + var v10, v13, v14, v17, v18, v2, v3, v6, v7, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bias, c, d, dc, e2, gotdig, gotrad, gottail, rp, scale, x, y, v1, v10, v12, v13, v14, v16, v17, v18, v2, v3, v5, v6, v7, v8, v9 + x = uint32(0) + y = Float64FromInt32(0) + scale = Float64FromInt32(1) + bias = Float64FromInt32(0) + gottail = 0 + gotrad = 0 + gotdig = 0 + rp = 0 + dc = 0 + e2 = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + /* Skip leading zeros */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _4 + _4: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__shgetc(tls, f) + } + c = v5 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + /* Count zeros after the radix point before significand */ + rp = 0 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _11 + _11: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 4 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + rp-- + } + } + for { + if !(uint32(c-int32('0')) < uint32(10) || uint32(c|int32(32)-int32('a')) < uint32(6) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + rp = dc + gotrad = int32(1) + } else { + gotdig = int32(1) + if c > int32('9') { + d = c | int32(32) + int32(10) - int32('a') + } else { + d = c - int32('0') + } + if dc < int64(8) { + x = x*uint32(16) + uint32(d) + } else { + if dc < int64(Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)+Int32FromInt32(1)) { + scale /= Float64FromInt32(16) + y += float64(d) * scale + } else { + if d != 0 && !(gottail != 0) { + y += Float64FromFloat64(0.5) * scale + gottail = int32(1) + } + } + } + dc++ + } + goto _15 + _15: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v18 = f + 4 + v17 = *(*uintptr)(unsafe.Pointer(v18)) + *(*uintptr)(unsafe.Pointer(v18))++ + v16 = int32(*(*uint8)(unsafe.Pointer(v17))) + } else { + v16 = X__shgetc(tls, f) + } + c = v16 + } + if !(gotdig != 0) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if gotrad != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return float64(sign) * float64(0) + } + if !(gotrad != 0) { + rp = dc + } + for dc < int64(8) { + x *= uint32(16) + dc++ + } + if c|int32(32) == int32('p') { + e2 = _scanexp(tls, f, pok) + if e2 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e2 = 0 + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + e2 += int64(4)*rp - int64(32) + if !(x != 0) { + return float64(sign) * float64(0) + } + if e2 > int64(-emin) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if e2 < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + for x < uint32(0x80000000) { + if y >= Float64FromFloat64(0.5) { + x += x + uint32(1) + y += y - Float64FromInt32(1) + } else { + x += x + y += y + } + e2-- + } + if int64(bits) > int64(32)+e2-int64(emin) { + bits = int32(int64(32) + e2 - int64(emin)) + if bits < 0 { + bits = 0 + } + } + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(32)+Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), float64(sign)) + } + if bits < int32(32) && y != 0 && !(x&Uint32FromInt32(1) != 0) { + x++ + y = Float64FromInt32(0) + } + y = bias + float64(sign)*float64(x) + float64(sign)*y + y -= bias + if !(y != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + return Xscalbnl(tls, y, int32(e2)) +} + +func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) (r float64) { + if __ccgo_strace { + trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bits, c, emin, sign, v1, v12, v19, v2, v22, v27, v34, v5, v6, v8 int32 + var i, v31 Tsize_t + var v10, v13, v14, v20, v21, v23, v24, v28, v29, v3, v35, v36, v4, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bits, c, emin, i, sign, v1, v10, v12, v13, v14, v19, v2, v20, v21, v22, v23, v24, v27, v28, v29, v3, v31, v34, v35, v36, v4, v5, v6, v8, v9 + sign = int32(1) + switch prec { + case 0: + bits = int32(FLT_MANT_DIG) + emin = -int32(125) - bits + case int32(1): + bits = int32(DBL_MANT_DIG) + emin = -int32(1021) - bits + case int32(2): + bits = int32(LDBL_MANT_DIG) + emin = -int32(1021) - bits + default: + return Float64FromInt32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + sign -= int32(2) * BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + i = uint32(0) + for { + if !(i < uint32(8) && c|int32(32) == int32(*(*int8)(unsafe.Pointer(__ccgo_ts + 247 + uintptr(i))))) { + break + } + if i < uint32(7) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 4 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + } + goto _11 + _11: + ; + i++ + } + if i == uint32(3) || i == uint32(8) || i > uint32(3) && pok != 0 { + if i != uint32(8) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + for { + if !(i > uint32(3)) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + goto _16 + _16: + ; + i-- + } + } + } + return float64(float32(sign) * X__builtin_inff(tls)) + } + if !(i != 0) { + i = uint32(0) + for { + if !(i < uint32(3) && c|int32(32) == int32(*(*int8)(unsafe.Pointer(__ccgo_ts + 256 + uintptr(i))))) { + break + } + if i < uint32(2) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v21 = f + 4 + v20 = *(*uintptr)(unsafe.Pointer(v21)) + *(*uintptr)(unsafe.Pointer(v21))++ + v19 = int32(*(*uint8)(unsafe.Pointer(v20))) + } else { + v19 = X__shgetc(tls, f) + } + c = v19 + } + goto _18 + _18: + ; + i++ + } + } + if i == uint32(3) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v24 = f + 4 + v23 = *(*uintptr)(unsafe.Pointer(v24)) + *(*uintptr)(unsafe.Pointer(v24))++ + v22 = int32(*(*uint8)(unsafe.Pointer(v23))) + } else { + v22 = X__shgetc(tls, f) + } + if v22 != int32('(') { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + i = uint32(1) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v29 = f + 4 + v28 = *(*uintptr)(unsafe.Pointer(v29)) + *(*uintptr)(unsafe.Pointer(v29))++ + v27 = int32(*(*uint8)(unsafe.Pointer(v28))) + } else { + v27 = X__shgetc(tls, f) + } + c = v27 + if uint32(c-int32('0')) < uint32(10) || uint32(c-int32('A')) < uint32(26) || uint32(c-int32('a')) < uint32(26) || c == int32('_') { + goto _26 + } + if c == int32(')') { + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !(pok != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + for { + v31 = i + i-- + if !(v31 != 0) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + goto _26 + _26: + ; + i++ + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if i != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + if c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v36 = f + 4 + v35 = *(*uintptr)(unsafe.Pointer(v36)) + *(*uintptr)(unsafe.Pointer(v36))++ + v34 = int32(*(*uint8)(unsafe.Pointer(v35))) + } else { + v34 = X__shgetc(tls, f) + } + c = v34 + if c|int32(32) == int32('x') { + return _hexfloat(tls, f, bits, emin, sign, pok) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + c = int32('0') + } + return _decfloat(tls, f, c, bits, emin, sign, pok) +} + +// C documentation +// +// /* Lookup table for digit values. -1==255>=36 -> invalid */ +var _table6 = [257]uint8{ + 0: uint8(-Int32FromInt32(1)), + 1: uint8(-Int32FromInt32(1)), + 2: uint8(-Int32FromInt32(1)), + 3: uint8(-Int32FromInt32(1)), + 4: uint8(-Int32FromInt32(1)), + 5: uint8(-Int32FromInt32(1)), + 6: uint8(-Int32FromInt32(1)), + 7: uint8(-Int32FromInt32(1)), + 8: uint8(-Int32FromInt32(1)), + 9: uint8(-Int32FromInt32(1)), + 10: uint8(-Int32FromInt32(1)), + 11: uint8(-Int32FromInt32(1)), + 12: uint8(-Int32FromInt32(1)), + 13: uint8(-Int32FromInt32(1)), + 14: uint8(-Int32FromInt32(1)), + 15: uint8(-Int32FromInt32(1)), + 16: uint8(-Int32FromInt32(1)), + 17: uint8(-Int32FromInt32(1)), + 18: uint8(-Int32FromInt32(1)), + 19: uint8(-Int32FromInt32(1)), + 20: uint8(-Int32FromInt32(1)), + 21: uint8(-Int32FromInt32(1)), + 22: uint8(-Int32FromInt32(1)), + 23: uint8(-Int32FromInt32(1)), + 24: uint8(-Int32FromInt32(1)), + 25: uint8(-Int32FromInt32(1)), + 26: uint8(-Int32FromInt32(1)), + 27: uint8(-Int32FromInt32(1)), + 28: uint8(-Int32FromInt32(1)), + 29: uint8(-Int32FromInt32(1)), + 30: uint8(-Int32FromInt32(1)), + 31: uint8(-Int32FromInt32(1)), + 32: uint8(-Int32FromInt32(1)), + 33: uint8(-Int32FromInt32(1)), + 34: uint8(-Int32FromInt32(1)), + 35: uint8(-Int32FromInt32(1)), + 36: uint8(-Int32FromInt32(1)), + 37: uint8(-Int32FromInt32(1)), + 38: uint8(-Int32FromInt32(1)), + 39: uint8(-Int32FromInt32(1)), + 40: uint8(-Int32FromInt32(1)), + 41: uint8(-Int32FromInt32(1)), + 42: uint8(-Int32FromInt32(1)), + 43: uint8(-Int32FromInt32(1)), + 44: uint8(-Int32FromInt32(1)), + 45: uint8(-Int32FromInt32(1)), + 46: uint8(-Int32FromInt32(1)), + 47: uint8(-Int32FromInt32(1)), + 48: uint8(-Int32FromInt32(1)), + 50: uint8(1), + 51: uint8(2), + 52: uint8(3), + 53: uint8(4), + 54: uint8(5), + 55: uint8(6), + 56: uint8(7), + 57: uint8(8), + 58: uint8(9), + 59: uint8(-Int32FromInt32(1)), + 60: uint8(-Int32FromInt32(1)), + 61: uint8(-Int32FromInt32(1)), + 62: uint8(-Int32FromInt32(1)), + 63: uint8(-Int32FromInt32(1)), + 64: uint8(-Int32FromInt32(1)), + 65: uint8(-Int32FromInt32(1)), + 66: uint8(10), + 67: uint8(11), + 68: uint8(12), + 69: uint8(13), + 70: uint8(14), + 71: uint8(15), + 72: uint8(16), + 73: uint8(17), + 74: uint8(18), + 75: uint8(19), + 76: uint8(20), + 77: uint8(21), + 78: uint8(22), + 79: uint8(23), + 80: uint8(24), + 81: uint8(25), + 82: uint8(26), + 83: uint8(27), + 84: uint8(28), + 85: uint8(29), + 86: uint8(30), + 87: uint8(31), + 88: uint8(32), + 89: uint8(33), + 90: uint8(34), + 91: uint8(35), + 92: uint8(-Int32FromInt32(1)), + 93: uint8(-Int32FromInt32(1)), + 94: uint8(-Int32FromInt32(1)), + 95: uint8(-Int32FromInt32(1)), + 96: uint8(-Int32FromInt32(1)), + 97: uint8(-Int32FromInt32(1)), + 98: uint8(10), + 99: uint8(11), + 100: uint8(12), + 101: uint8(13), + 102: uint8(14), + 103: uint8(15), + 104: uint8(16), + 105: uint8(17), + 106: uint8(18), + 107: uint8(19), + 108: uint8(20), + 109: uint8(21), + 110: uint8(22), + 111: uint8(23), + 112: uint8(24), + 113: uint8(25), + 114: uint8(26), + 115: uint8(27), + 116: uint8(28), + 117: uint8(29), + 118: uint8(30), + 119: uint8(31), + 120: uint8(32), + 121: uint8(33), + 122: uint8(34), + 123: uint8(35), + 124: uint8(-Int32FromInt32(1)), + 125: uint8(-Int32FromInt32(1)), + 126: uint8(-Int32FromInt32(1)), + 127: uint8(-Int32FromInt32(1)), + 128: uint8(-Int32FromInt32(1)), + 129: uint8(-Int32FromInt32(1)), + 130: uint8(-Int32FromInt32(1)), + 131: uint8(-Int32FromInt32(1)), + 132: uint8(-Int32FromInt32(1)), + 133: uint8(-Int32FromInt32(1)), + 134: uint8(-Int32FromInt32(1)), + 135: uint8(-Int32FromInt32(1)), + 136: uint8(-Int32FromInt32(1)), + 137: uint8(-Int32FromInt32(1)), + 138: uint8(-Int32FromInt32(1)), + 139: uint8(-Int32FromInt32(1)), + 140: uint8(-Int32FromInt32(1)), + 141: uint8(-Int32FromInt32(1)), + 142: uint8(-Int32FromInt32(1)), + 143: uint8(-Int32FromInt32(1)), + 144: uint8(-Int32FromInt32(1)), + 145: uint8(-Int32FromInt32(1)), + 146: uint8(-Int32FromInt32(1)), + 147: uint8(-Int32FromInt32(1)), + 148: uint8(-Int32FromInt32(1)), + 149: uint8(-Int32FromInt32(1)), + 150: uint8(-Int32FromInt32(1)), + 151: uint8(-Int32FromInt32(1)), + 152: uint8(-Int32FromInt32(1)), + 153: uint8(-Int32FromInt32(1)), + 154: uint8(-Int32FromInt32(1)), + 155: uint8(-Int32FromInt32(1)), + 156: uint8(-Int32FromInt32(1)), + 157: uint8(-Int32FromInt32(1)), + 158: uint8(-Int32FromInt32(1)), + 159: uint8(-Int32FromInt32(1)), + 160: uint8(-Int32FromInt32(1)), + 161: uint8(-Int32FromInt32(1)), + 162: uint8(-Int32FromInt32(1)), + 163: uint8(-Int32FromInt32(1)), + 164: uint8(-Int32FromInt32(1)), + 165: uint8(-Int32FromInt32(1)), + 166: uint8(-Int32FromInt32(1)), + 167: uint8(-Int32FromInt32(1)), + 168: uint8(-Int32FromInt32(1)), + 169: uint8(-Int32FromInt32(1)), + 170: uint8(-Int32FromInt32(1)), + 171: uint8(-Int32FromInt32(1)), + 172: uint8(-Int32FromInt32(1)), + 173: uint8(-Int32FromInt32(1)), + 174: uint8(-Int32FromInt32(1)), + 175: uint8(-Int32FromInt32(1)), + 176: uint8(-Int32FromInt32(1)), + 177: uint8(-Int32FromInt32(1)), + 178: uint8(-Int32FromInt32(1)), + 179: uint8(-Int32FromInt32(1)), + 180: uint8(-Int32FromInt32(1)), + 181: uint8(-Int32FromInt32(1)), + 182: uint8(-Int32FromInt32(1)), + 183: uint8(-Int32FromInt32(1)), + 184: uint8(-Int32FromInt32(1)), + 185: uint8(-Int32FromInt32(1)), + 186: uint8(-Int32FromInt32(1)), + 187: uint8(-Int32FromInt32(1)), + 188: uint8(-Int32FromInt32(1)), + 189: uint8(-Int32FromInt32(1)), + 190: uint8(-Int32FromInt32(1)), + 191: uint8(-Int32FromInt32(1)), + 192: uint8(-Int32FromInt32(1)), + 193: uint8(-Int32FromInt32(1)), + 194: uint8(-Int32FromInt32(1)), + 195: uint8(-Int32FromInt32(1)), + 196: uint8(-Int32FromInt32(1)), + 197: uint8(-Int32FromInt32(1)), + 198: uint8(-Int32FromInt32(1)), + 199: uint8(-Int32FromInt32(1)), + 200: uint8(-Int32FromInt32(1)), + 201: uint8(-Int32FromInt32(1)), + 202: uint8(-Int32FromInt32(1)), + 203: uint8(-Int32FromInt32(1)), + 204: uint8(-Int32FromInt32(1)), + 205: uint8(-Int32FromInt32(1)), + 206: uint8(-Int32FromInt32(1)), + 207: uint8(-Int32FromInt32(1)), + 208: uint8(-Int32FromInt32(1)), + 209: uint8(-Int32FromInt32(1)), + 210: uint8(-Int32FromInt32(1)), + 211: uint8(-Int32FromInt32(1)), + 212: uint8(-Int32FromInt32(1)), + 213: uint8(-Int32FromInt32(1)), + 214: uint8(-Int32FromInt32(1)), + 215: uint8(-Int32FromInt32(1)), + 216: uint8(-Int32FromInt32(1)), + 217: uint8(-Int32FromInt32(1)), + 218: uint8(-Int32FromInt32(1)), + 219: uint8(-Int32FromInt32(1)), + 220: uint8(-Int32FromInt32(1)), + 221: uint8(-Int32FromInt32(1)), + 222: uint8(-Int32FromInt32(1)), + 223: uint8(-Int32FromInt32(1)), + 224: uint8(-Int32FromInt32(1)), + 225: uint8(-Int32FromInt32(1)), + 226: uint8(-Int32FromInt32(1)), + 227: uint8(-Int32FromInt32(1)), + 228: uint8(-Int32FromInt32(1)), + 229: uint8(-Int32FromInt32(1)), + 230: uint8(-Int32FromInt32(1)), + 231: uint8(-Int32FromInt32(1)), + 232: uint8(-Int32FromInt32(1)), + 233: uint8(-Int32FromInt32(1)), + 234: uint8(-Int32FromInt32(1)), + 235: uint8(-Int32FromInt32(1)), + 236: uint8(-Int32FromInt32(1)), + 237: uint8(-Int32FromInt32(1)), + 238: uint8(-Int32FromInt32(1)), + 239: uint8(-Int32FromInt32(1)), + 240: uint8(-Int32FromInt32(1)), + 241: uint8(-Int32FromInt32(1)), + 242: uint8(-Int32FromInt32(1)), + 243: uint8(-Int32FromInt32(1)), + 244: uint8(-Int32FromInt32(1)), + 245: uint8(-Int32FromInt32(1)), + 246: uint8(-Int32FromInt32(1)), + 247: uint8(-Int32FromInt32(1)), + 248: uint8(-Int32FromInt32(1)), + 249: uint8(-Int32FromInt32(1)), + 250: uint8(-Int32FromInt32(1)), + 251: uint8(-Int32FromInt32(1)), + 252: uint8(-Int32FromInt32(1)), + 253: uint8(-Int32FromInt32(1)), + 254: uint8(-Int32FromInt32(1)), + 255: uint8(-Int32FromInt32(1)), + 256: uint8(-Int32FromInt32(1)), +} + +func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bs, c, neg, v1, v11, v14, v2, v21, v25, v29, v33, v37, v41, v45, v5, v6, v8 int32 + var val, v10, v12, v13, v15, v16, v22, v23, v26, v27, v3, v30, v31, v34, v35, v38, v39, v4, v42, v43, v46, v47, v9 uintptr + var x uint32 + var y uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bs, c, neg, val, x, y, v1, v10, v11, v12, v13, v14, v15, v16, v2, v21, v22, v23, v25, v26, v27, v29, v3, v30, v31, v33, v34, v35, v37, v38, v39, v4, v41, v42, v43, v45, v46, v47, v5, v6, v8, v9 + val = uintptr(unsafe.Pointer(&_table6)) + uintptr(1) + neg = 0 + if base > uint32(36) || base == uint32(1) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + neg = -BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + if (base == uint32(0) || base == uint32(16)) && c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v13 = f + 4 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = int32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = X__shgetc(tls, f) + } + c = v11 + if c|int32(32) == int32('x') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + if int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= int32(16) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return uint64(0) + } + base = uint32(16) + } else { + if base == uint32(0) { + base = uint32(8) + } + } + } else { + if base == uint32(0) { + base = uint32(10) + } + if uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + if base == uint32(10) { + x = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(10)-Uint32FromInt32(1)) { + break + } + x = x*uint32(10) + uint32(c-Int32FromUint8('0')) + goto _20 + _20: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v23 = f + 4 + v22 = *(*uintptr)(unsafe.Pointer(v23)) + *(*uintptr)(unsafe.Pointer(v23))++ + v21 = int32(*(*uint8)(unsafe.Pointer(v22))) + } else { + v21 = X__shgetc(tls, f) + } + c = v21 + } + y = uint64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y <= (Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))/Uint64FromInt32(10) && uint64(10)*y <= Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)-uint64(c-Int32FromUint8('0'))) { + break + } + y = y*uint64(10) + uint64(c-Int32FromUint8('0')) + goto _24 + _24: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v27 = f + 4 + v26 = *(*uintptr)(unsafe.Pointer(v27)) + *(*uintptr)(unsafe.Pointer(v27))++ + v25 = int32(*(*uint8)(unsafe.Pointer(v26))) + } else { + v25 = X__shgetc(tls, f) + } + c = v25 + } + if uint32(c-int32('0')) >= uint32(10) { + goto done + } + } else { + if !(base&(base-Uint32FromInt32(1)) != 0) { + bs = int32(*(*int8)(unsafe.Pointer(__ccgo_ts + 260 + uintptr(uint32(0x17)*base>>int32(5)&uint32(7))))) + x = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(32)) { + break + } + x = x<>bs) { + break + } + y = y<= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if y >= lim { + if !(lim&Uint64FromInt32(1) != 0) && !(neg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim - uint64(1) + } else { + if y > lim { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim + } + } + } + return y ^ uint64(neg) - uint64(neg) +} + +func X__procfdname(tls *TLS, buf uintptr, fd uint32) { + if __ccgo_strace { + trc("tls=%v buf=%v fd=%v, (%v:)", tls, buf, fd, origin(2)) + } + var i, j, v5 uint32 + var v2 int8 + _, _, _, _ = i, j, v2, v5 + i = uint32(0) + for { + v2 = *(*int8)(unsafe.Pointer(__ccgo_ts + 269 + uintptr(i))) + *(*int8)(unsafe.Pointer(buf + uintptr(i))) = v2 + if !(v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if !(fd != 0) { + *(*int8)(unsafe.Pointer(buf + uintptr(i))) = int8('0') + *(*int8)(unsafe.Pointer(buf + uintptr(i+uint32(1)))) = 0 + return + } + j = fd + for { + if !(j != 0) { + break + } + goto _3 + _3: + ; + j /= uint32(10) + i++ + } + *(*int8)(unsafe.Pointer(buf + uintptr(i))) = 0 + for { + if !(fd != 0) { + break + } + i-- + v5 = i + *(*int8)(unsafe.Pointer(buf + uintptr(v5))) = int8(uint32('0') + fd%uint32(10)) + goto _4 + _4: + ; + fd /= uint32(10) + } +} + +/* The shcnt field stores the number of bytes read so far, offset by + * the value of buf-rpos at the last function call (__shlim or __shgetc), + * so that between calls the inline shcnt macro can add rpos-buf to get + * the actual count. */ + +func X__shlim(tls *TLS, f uintptr, lim Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Fshlim = lim + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + /* If lim is nonzero, rend must be a valid pointer. */ + if lim != 0 && int64(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) > lim { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } +} + +func X__shgetc(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 int32 + var cnt Toff_t + var v2 bool + _, _, _, _ = c, cnt, v1, v2 + cnt = (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if v2 = (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*TFILE)(unsafe.Pointer(f)).Fshlim; !v2 { + v1 = X__uflow(tls, f) + c = v1 + } + if v2 || v1 < 0 { + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + cnt + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + (*TFILE)(unsafe.Pointer(f)).Fshlim = int64(-int32(1)) + return -int32(1) + } + cnt++ + if (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && int64(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) > (*TFILE)(unsafe.Pointer(f)).Fshlim-cnt { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr((*TFILE)(unsafe.Pointer(f)).Fshlim-cnt) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + cnt + if (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf { + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(-Int32FromInt32(1)))) = uint8(c) + } + return c +} + +func X__syscall_ret(tls *TLS, r uint32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + if r > -Uint32FromUint32(4096) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(-r) + return -int32(1) + } + return int32(r) +} + +type TElf_Symndx = uint32 + +type Tdl_phdr_info = struct { + Fdlpi_addr TElf32_Addr + Fdlpi_name uintptr + Fdlpi_phdr uintptr + Fdlpi_phnum TElf32_Half + Fdlpi_adds uint64 + Fdlpi_subs uint64 + Fdlpi_tls_modid Tsize_t + Fdlpi_tls_data uintptr +} + +type Tlink_map = struct { + Fl_addr TElf32_Addr + Fl_name uintptr + Fl_ld uintptr + Fl_next uintptr + Fl_prev uintptr +} + +type Tr_debug = struct { + Fr_version int32 + Fr_map uintptr + Fr_brk TElf32_Addr + Fr_state int32 + Fr_ldbase TElf32_Addr +} + +const _RT_CONSISTENT = 0 +const _RT_ADD = 1 +const _RT_DELETE = 2 +const VERSION = "1.2.5" + +const IPC_CREAT = 512 +const IPC_EXCL = 1024 +const IPC_INFO = 3 +const IPC_NOWAIT = 2048 +const IPC_RMID = 0 +const IPC_SET = 1 +const IPC_STAT = 258 +const __ipc_perm_key = 0 +const __ipc_perm_seq = 0 + +type Tkey_t = int32 + +type Tipc_perm = struct { + F__key Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + F__seq int32 + F__pad1 int32 + F__pad2 int32 +} + +func Xftok(tls *TLS, path uintptr, id int32) (r Tkey_t) { + if __ccgo_strace { + trc("tls=%v path=%v id=%v, (%v:)", tls, path, id, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* st at bp+0 */ Tstat + if Xstat(tls, path, bp) < 0 { + return -int32(1) + } + return int32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ino&Uint64FromInt32(0xffff) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0xff)< %v", r1) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var orig uintptr + var r int32 + var _ /* out at bp+0 */ Tmsqid_ds + _, _ = orig, r + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tmsqid_ds)(unsafe.Pointer(bp)) = Tmsqid_ds{} + orig = buf + buf = bp + } + r = int32(X__syscall6(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_msgctl)), q, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(Int32FromInt32(0)), int32(buf), int32(Int32FromInt32(0)))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + buf = orig + *(*Tmsqid_ds)(unsafe.Pointer(buf)) = *(*Tmsqid_ds)(unsafe.Pointer(bp)) + (*Tmsqid_ds)(unsafe.Pointer(buf)).Fmsg_stime = int64((*Tmsqid_ds)(unsafe.Pointer(buf)).F__msg_stime_lo) | (0+int64((*Tmsqid_ds)(unsafe.Pointer(buf)).F__msg_stime_hi))< %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_msgget)), k, flag))) +} + +func Xmsgrcv(tls *TLS, q int32, m uintptr, len1 Tsize_t, type1 int32, flag int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v type1=%v flag=%v, (%v:)", tls, q, m, len1, type1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[2]int32)(unsafe.Pointer(bp)) = [2]int32{ + 0: int32(m), + 1: type1, + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_msgrcv)), q, int32(len1), flag, int32(bp), 0))) +} + +func Xmsgsnd(tls *TLS, q int32, m uintptr, len1 Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v flag=%v, (%v:)", tls, q, m, len1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_msgsnd)), q, int32(len1), flag, int32(m), 0))) +} + +const GETALL = 13 +const GETNCNT = 14 +const GETPID = 11 +const GETVAL = 12 +const GETZCNT = 15 +const SEM_INFO = 19 +const SEM_STAT = 274 +const SEM_STAT_ANY = 276 +const SEM_UNDO = 4096 +const SETALL = 17 +const SETVAL = 16 +const _SEM_SEMUN_UNDEFINED = 1 + +type Tsemid_ds = struct { + Fsem_perm Tipc_perm + F__sem_otime_lo uint32 + F__sem_otime_hi uint32 + F__sem_ctime_lo uint32 + F__sem_ctime_hi uint32 + Fsem_nsems uint16 + F__sem_nsems_pad [2]int8 + F__unused3 int32 + F__unused4 int32 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t +} + +type Tseminfo = struct { + Fsemmap int32 + Fsemmni int32 + Fsemmns int32 + Fsemmnu int32 + Fsemmsl int32 + Fsemopm int32 + Fsemume int32 + Fsemusz int32 + Fsemvmx int32 + Fsemaem int32 +} + +type Tsembuf = struct { + Fsem_num uint16 + Fsem_op int16 + Fsem_flg int16 +} + +type Tsemun = struct { + Fbuf [0]uintptr + Farray [0]uintptr + Fval int32 +} + +func Xsemctl(tls *TLS, id int32, num int32, cmd int32, va uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v num=%v cmd=%v va=%v, (%v:)", tls, id, num, cmd, va, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var ap Tva_list + var orig uintptr + var r int32 + var _ /* arg at bp+0 */ Tsemun + var _ /* out at bp+4 */ Tsemid_ds + _, _, _ = ap, orig, r + *(*Tsemun)(unsafe.Pointer(bp)) = Tsemun{} + *(*int32)(unsafe.Pointer(bp)) = 0 + switch cmd & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)) { + case int32(SETVAL): + fallthrough + case int32(GETALL): + fallthrough + case int32(SETALL): + fallthrough + case int32(IPC_SET): + fallthrough + case int32(IPC_INFO): + fallthrough + case int32(SEM_INFO): + fallthrough + case Int32FromInt32(IPC_STAT) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(18) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(20) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + ap = va + *(*Tsemun)(unsafe.Pointer(bp)) = *(*Tsemun)(unsafe.Pointer(VaOther(&ap, 4))) + _ = ap + } + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tsemid_ds)(unsafe.Pointer(bp + 4)) = Tsemid_ds{} + orig = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp)) = bp + 4 + } + r = int32(X__syscall5(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_semctl)), id, num, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(bp))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*uintptr)(unsafe.Pointer(bp)) = orig + *(*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) = *(*Tsemid_ds)(unsafe.Pointer(bp + 4)) + (*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fsem_otime = int64((*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).F__sem_otime_lo) | (0+int64((*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).F__sem_otime_hi))< %v", r) }() + } + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if n > int32(USHRT_MAX) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_semget)), key, n, fl))) +} + +func Xsemop(tls *TLS, id int32, buf uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v, (%v:)", tls, id, buf, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_semop)), id, int32(n), int32(Int32FromInt32(0)), int32(buf)))) +} + +const NO_TIME32 = 0 +const __key = 0 +const __seq = 0 + +type Tipc_perm1 = struct { + Fkey Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + Fseq int32 + F__pad1 int32 + F__pad2 int32 +} + +type Tsemid_ds1 = struct { + Fsem_perm Tipc_perm1 + F__sem_otime_lo uint32 + F__sem_otime_hi uint32 + F__sem_ctime_lo uint32 + F__sem_ctime_hi uint32 + Fsem_nsems uint16 + F__sem_nsems_pad [2]int8 + F__unused3 int32 + F__unused4 int32 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t +} + +func Xsemtimedop(tls *TLS, id int32, buf uintptr, n Tsize_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts=%v, (%v:)", tls, id, buf, n, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v4 uintptr + var v5 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(NO_TIME32 != 0) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_semtimedop_time64), id, int32(buf), int32(n), int32(v3))) + } + if Bool(NO_TIME32 != 0) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if ts != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v5 = uint64(s) + } else { + v5 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v5), + 1: ns, + } + v4 = bp + 16 + } else { + v4 = uintptr(0) + } + ts = v4 + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_semtimedop)), id, int32(n), int32(Int32FromInt32(0)), int32(buf), int32(ts)))) +} + +const SHMLBA = 4096 +const SHM_DEST = 512 +const SHM_EXEC = 32768 +const SHM_HUGETLB = 2048 +const SHM_HUGE_16GB = 2281701376 +const SHM_HUGE_16MB = 1610612736 +const SHM_HUGE_1GB = 2013265920 +const SHM_HUGE_1MB = 1342177280 +const SHM_HUGE_256MB = 1879048192 +const SHM_HUGE_2GB = 2080374784 +const SHM_HUGE_2MB = 1409286144 +const SHM_HUGE_32MB = 1677721600 +const SHM_HUGE_512KB = 1275068416 +const SHM_HUGE_512MB = 1946157056 +const SHM_HUGE_64KB = 1073741824 +const SHM_HUGE_8MB = 1543503872 +const SHM_HUGE_MASK = 63 +const SHM_HUGE_SHIFT = 26 +const SHM_INFO = 14 +const SHM_LOCK = 11 +const SHM_LOCKED = 1024 +const SHM_NORESERVE = 4096 +const SHM_R = 256 +const SHM_RDONLY = 4096 +const SHM_REMAP = 16384 +const SHM_RND = 8192 +const SHM_STAT = 269 +const SHM_STAT_ANY = 271 +const SHM_UNLOCK = 12 +const SHM_W = 128 + +type Tshmid_ds = struct { + Fshm_perm Tipc_perm + Fshm_segsz Tsize_t + F__shm_atime_lo uint32 + F__shm_atime_hi uint32 + F__shm_dtime_lo uint32 + F__shm_dtime_hi uint32 + F__shm_ctime_lo uint32 + F__shm_ctime_hi uint32 + Fshm_cpid Tpid_t + Fshm_lpid Tpid_t + Fshm_nattch uint32 + F__pad1 uint32 + F__pad2 uint32 + F__pad3 uint32 + Fshm_atime Ttime_t + Fshm_dtime Ttime_t + Fshm_ctime Ttime_t +} + +type Tshminfo = struct { + Fshmmax uint32 + Fshmmin uint32 + Fshmmni uint32 + Fshmseg uint32 + Fshmall uint32 + F__unused [4]uint32 +} + +type Tshm_info = struct { + F__used_ids int32 + Fshm_tot uint32 + Fshm_rss uint32 + Fshm_swp uint32 + F__swap_attempts uint32 + F__swap_successes uint32 +} + +type Tshmatt_t = uint32 + +func Xshmat(tls *TLS, id int32, _addr uintptr, flag int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v id=%v _addr=%v flag=%v, (%v:)", tls, id, _addr, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _addr + var ret uint32 + var v1 uintptr + _, _ = ret, v1 + ret = uint32(X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_shmat)), id, flag, int32(bp), int32(*(*uintptr)(unsafe.Pointer(bp))))))) + if ret > -Uint32FromInt32(SHMLBA) { + v1 = uintptr(ret) + } else { + v1 = *(*uintptr)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xshmctl(tls *TLS, id int32, cmd int32, buf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v cmd=%v buf=%v, (%v:)", tls, id, cmd, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var orig uintptr + var r int32 + var _ /* out at bp+0 */ Tshmid_ds + _, _ = orig, r + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tshmid_ds)(unsafe.Pointer(bp)) = Tshmid_ds{} + orig = buf + buf = bp + } + r = int32(X__syscall6(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_shmctl)), id, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(Int32FromInt32(0)), int32(buf), int32(Int32FromInt32(0)))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + buf = orig + *(*Tshmid_ds)(unsafe.Pointer(buf)) = *(*Tshmid_ds)(unsafe.Pointer(bp)) + (*Tshmid_ds)(unsafe.Pointer(buf)).Fshm_atime = int64((*Tshmid_ds)(unsafe.Pointer(buf)).F__shm_atime_lo) | (0+int64((*Tshmid_ds)(unsafe.Pointer(buf)).F__shm_atime_hi))< %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_shmdt)), int32(Int32FromInt32(0)), int32(Int32FromInt32(0)), int32(Int32FromInt32(0)), int32(addr)))) +} + +func Xshmget(tls *TLS, key Tkey_t, size Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v size=%v flag=%v, (%v:)", tls, key, size, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size > uint32(Int32FromInt32(INT32_MAX)) { + size = Uint32FromUint32(0xffffffff) + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_ipc), int32(Int32FromInt32(IPCOP_shmget)), key, int32(size), flag))) +} + +type Tpasswd = struct { + Fpw_name uintptr + Fpw_passwd uintptr + Fpw_uid Tuid_t + Fpw_gid Tgid_t + Fpw_gecos uintptr + Fpw_dir uintptr + Fpw_shell uintptr +} + +func Xcuserid(tls *TLS, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1056) + defer tls.Free(1056) + var len1 Tsize_t + var _ /* ppw at bp+28 */ uintptr + var _ /* pw at bp+0 */ Tpasswd + var _ /* pwb at bp+32 */ [256]int32 + _ = len1 + if buf != 0 { + *(*int8)(unsafe.Pointer(buf)) = 0 + } + Xgetpwuid_r(tls, Xgeteuid(tls), bp, bp+32, uint32(1024), bp+28) + if !(*(*uintptr)(unsafe.Pointer(bp + 28)) != 0) { + return buf + } + len1 = Xstrnlen(tls, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, uint32(L_cuserid)) + if len1 == uint32(L_cuserid) { + return buf + } + if !(buf != 0) { + buf = uintptr(unsafe.Pointer(&_usridbuf)) + } + Xmemcpy(tls, buf, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, len1+uint32(1)) + return buf +} + +var _usridbuf [20]int8 + +func Xvwarn(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + Xfputs(tls, __ccgo_ts+289, uintptr(unsafe.Pointer(&X__stderr_FILE))) + } + Xperror(tls, uintptr(0)) +} + +func Xvwarnx(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + } + Xputc(tls, int32('\n'), uintptr(unsafe.Pointer(&X__stderr_FILE))) +} + +func Xverr(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarn(tls, fmt, ap) + _exit(tls, status) +} + +func Xverrx(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarnx(tls, fmt, ap) + _exit(tls, status) +} + +func Xwarn(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarn(tls, fmt, ap) + _ = ap +} + +func Xwarnx(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarnx(tls, fmt, ap) + _ = ap +} + +func Xerr(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverr(tls, status, fmt, ap) + _ = ap +} + +func Xerrx(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverrx(tls, status, fmt, ap) + _ = ap +} + +func Xeuidaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfaccessat(tls, -int32(100), filename, amode, int32(AT_EACCESS)) +} + +func Xeaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xeuidaccess(tls, filename, amode) +} + +const FTW_CHDIR = 4 +const FTW_D = 2 +const FTW_DEPTH = 8 +const FTW_DNR = 3 +const FTW_DP = 6 +const FTW_F = 1 +const FTW_MOUNT = 2 +const FTW_NS = 4 +const FTW_PHYS = 1 +const FTW_SL = 5 +const FTW_SLN = 7 + +type TFTW = struct { + Fbase int32 + Flevel int32 +} + +func Xftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v, (%v:)", tls, path, fn, fd_limit, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The following cast assumes that calling a function with one + * argument more than it needs behaves as expected. This is + * actually undefined, but works on all real-world machines. */ + return Xnftw(tls, path, fn, fd_limit, int32(FTW_PHYS)) +} + +const STATX_ALL = 4095 +const STATX_ATIME = 32 +const STATX_BASIC_STATS = 2047 +const STATX_BLOCKS = 1024 +const STATX_BTIME = 2048 +const STATX_CTIME = 128 +const STATX_GID = 16 +const STATX_INO = 256 +const STATX_MODE = 2 +const STATX_MTIME = 64 +const STATX_NLINK = 4 +const STATX_SIZE = 512 +const STATX_TYPE = 1 +const STATX_UID = 8 +const S_IEXEC = 64 +const S_IREAD = 256 +const S_IWRITE = 128 + +type Tstatx_timestamp = struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + F__pad Tuint32_t +} + +type Tstatx = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + F__pad0 [1]Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime Tstatx_timestamp + Fstx_btime Tstatx_timestamp + Fstx_ctime Tstatx_timestamp + Fstx_mtime Tstatx_timestamp + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + F__pad1 [14]Tuint64_t +} + +type Ttimezone = struct { + Ftz_minuteswest int32 + Ftz_dsttime int32 +} + +func Xfutimes(tls *TLS, fd int32, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tv=%v, (%v:)", tls, fd, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* times at bp+0 */ [2]Ttimespec + if !(tv != 0) { + return Xfutimens(tls, fd, uintptr(0)) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000)) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000)) + return Xfutimens(tls, fd, bp) +} + +const prlimit64 = 0 + +func Xgetdtablesize(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* rl at bp+0 */ Trlimit + _ = v1 + Xgetrlimit(tls, int32(RLIMIT_NOFILE), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur < uint64(INT_MAX) { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } else { + v1 = uint64(INT_MAX) + } + return int32(v1) +} + +func Xgetloadavg(tls *TLS, a uintptr, n int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v n=%v, (%v:)", tls, a, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var i, v1 int32 + var _ /* si at bp+0 */ Tsysinfo + _, _ = i, v1 + if n <= 0 { + if n != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 + } + Xsysinfo(tls, bp) + if n > int32(3) { + n = int32(3) + } + i = 0 + for { + if !(i < n) { + break + } + *(*float64)(unsafe.Pointer(a + uintptr(i)*8)) = Float64FromFloat64(1) / float64(Int32FromInt32(1)< %v", r) }() + } + return int32(PAGESIZE) +} + +const B0 = 0 +const B1000000 = 4104 +const B110 = 3 +const B115200 = 4098 +const B1152000 = 4105 +const B1200 = 9 +const B134 = 4 +const B150 = 5 +const B1500000 = 4106 +const B1800 = 10 +const B19200 = 14 +const B200 = 6 +const B2000000 = 4107 +const B230400 = 4099 +const B2400 = 11 +const B2500000 = 4108 +const B300 = 7 +const B3000000 = 4109 +const B3500000 = 4110 +const B38400 = 15 +const B4000000 = 4111 +const B460800 = 4100 +const B4800 = 12 +const B50 = 1 +const B500000 = 4101 +const B57600 = 4097 +const B576000 = 4102 +const B600 = 8 +const B75 = 2 +const B921600 = 4103 +const B9600 = 13 +const BRKINT = 2 +const BS0 = 0 +const BS1 = 8192 +const BSDLY = 8192 +const CBAUD = 4111 +const CBAUDEX = 4096 +const CIBAUD = 269418496 +const CLOCAL = 2048 +const CMSPAR = 1073741824 +const CR0 = 0 +const CR1 = 512 +const CR2 = 1024 +const CR3 = 1536 +const CRDLY = 1536 +const CREAD = 128 +const CRTSCTS = 2147483648 +const CS5 = 0 +const CS6 = 16 +const CS7 = 32 +const CS8 = 48 +const CSIZE = 48 +const CSTOPB = 64 +const ECHO = 8 +const ECHOCTL = 512 +const ECHOE = 16 +const ECHOK = 32 +const ECHOKE = 2048 +const ECHONL = 64 +const ECHOPRT = 1024 +const EXTA = 14 +const EXTB = 15 +const EXTPROC = 65536 +const FF0 = 0 +const FF1 = 32768 +const FFDLY = 32768 +const FLUSHO = 4096 +const HUPCL = 1024 +const ICANON = 2 +const ICRNL = 256 +const IEXTEN = 32768 +const IGNBRK = 1 +const IGNCR = 128 +const IGNPAR = 4 +const IMAXBEL = 8192 +const INLCR = 64 +const INPCK = 16 +const ISIG = 1 +const ISTRIP = 32 +const IUCLC = 512 +const IUTF8 = 16384 +const IXANY = 2048 +const IXOFF = 4096 +const IXON = 1024 +const NCCS = 32 +const NL0 = 0 +const NL1 = 256 +const NLDLY = 256 +const NOFLSH = 128 +const OCRNL = 8 +const OFDEL = 128 +const OFILL = 64 +const OLCUC = 2 +const ONLCR = 4 +const ONLRET = 32 +const ONOCR = 16 +const OPOST = 1 +const PARENB = 256 +const PARMRK = 8 +const PARODD = 512 +const PENDIN = 16384 +const TAB0 = 0 +const TAB1 = 2048 +const TAB2 = 4096 +const TAB3 = 6144 +const TABDLY = 6144 +const TCIFLUSH = 0 +const TCIOFF = 2 +const TCIOFLUSH = 2 +const TCION = 3 +const TCOFLUSH = 1 +const TCOOFF = 0 +const TCOON = 1 +const TCSADRAIN = 1 +const TCSAFLUSH = 2 +const TCSANOW = 0 +const TOSTOP = 256 +const VDISCARD = 13 +const VEOF = 4 +const VEOL = 11 +const VEOL2 = 16 +const VERASE = 2 +const VINTR = 0 +const VKILL = 3 +const VLNEXT = 15 +const VMIN = 6 +const VQUIT = 1 +const VREPRINT = 12 +const VSTART = 8 +const VSTOP = 9 +const VSUSP = 10 +const VSWTC = 7 +const VT0 = 0 +const VT1 = 16384 +const VTDLY = 16384 +const VTIME = 5 +const VWERASE = 14 +const XCASE = 4 +const XTABS = 6144 + +type Twinsize = struct { + Fws_row uint16 + Fws_col uint16 + Fws_xpixel uint16 + Fws_ypixel uint16 +} + +type Tcc_t = uint8 + +type Tspeed_t = uint32 + +type Ttcflag_t = uint32 + +type Ttermios = struct { + Fc_iflag Ttcflag_t + Fc_oflag Ttcflag_t + Fc_cflag Ttcflag_t + Fc_lflag Ttcflag_t + Fc_line Tcc_t + Fc_cc [32]Tcc_t + F__c_ispeed Tspeed_t + F__c_ospeed Tspeed_t +} + +func Xgetpass(tls *TLS, prompt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v prompt=%v, (%v:)", tls, prompt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd, v1 int32 + var l Tssize_t + var v2 uintptr + var _ /* s at bp+0 */ Ttermios + var _ /* t at bp+60 */ Ttermios + _, _, _, _ = fd, l, v1, v2 + v1 = Xopen(tls, __ccgo_ts+292, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + Xtcgetattr(tls, fd, bp+60) + *(*Ttermios)(unsafe.Pointer(bp)) = *(*Ttermios)(unsafe.Pointer(bp + 60)) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ISIG))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag |= uint32(ICANON) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag &= uint32(^(Int32FromInt32(INLCR) | Int32FromInt32(IGNCR))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag |= uint32(ICRNL) + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp+60) + Xtcdrain(tls, fd) + Xdprintf(tls, fd, __ccgo_ts+15, VaList(bp+128, prompt)) + l = Xread(tls, fd, uintptr(unsafe.Pointer(&_password)), uint32(128)) + if l >= 0 { + if l > 0 && int32(_password[l-int32(1)]) == int32('\n') || uint32(l) == uint32(128) { + l-- + } + _password[l] = 0 + } + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp) + Xdprintf(tls, fd, __ccgo_ts+301, 0) + Xclose(tls, fd) + if l < 0 { + v2 = uintptr(0) + } else { + v2 = uintptr(unsafe.Pointer(&_password)) + } + return v2 +} + +var _password [128]int8 + +var _defshells = [18]int8{'/', 'b', 'i', 'n', '/', 's', 'h', 10, '/', 'b', 'i', 'n', '/', 'c', 's', 'h', 10} + +var _line uintptr +var _linesize Tsize_t +var _f uintptr + +func Xendusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f != 0 { + Xfclose(tls, _f) + } + _f = uintptr(0) +} + +func Xsetusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if !(_f != 0) { + _f = Xfopen(tls, __ccgo_ts+303, __ccgo_ts+315) + } + if !(_f != 0) { + _f = Xfmemopen(tls, uintptr(unsafe.Pointer(&_defshells)), Uint32FromInt64(18)-Uint32FromInt32(1), __ccgo_ts+319) + } +} + +func Xgetusershell(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tssize_t + _ = l + if !(_f != 0) { + Xsetusershell(tls) + } + if !(_f != 0) { + return uintptr(0) + } + l = Xgetline(tls, uintptr(unsafe.Pointer(&_line)), uintptr(unsafe.Pointer(&_linesize)), _f) + if l <= 0 { + return uintptr(0) + } + if int32(*(*int8)(unsafe.Pointer(_line + uintptr(l-int32(1))))) == int32('\n') { + *(*int8)(unsafe.Pointer(_line + uintptr(l-int32(1)))) = 0 + } + return _line +} + +const ANYMARK = 1 +const FLUSHBAND = 4 +const FLUSHR = 1 +const FLUSHRW = 3 +const FLUSHW = 2 +const FMNAMESZ = 8 +const I_ATMARK = 21279 +const I_CANPUT = 21282 +const I_CKBAND = 21277 +const I_FDINSERT = 21264 +const I_FIND = 21259 +const I_FLUSH = 21253 +const I_FLUSHBAND = 21276 +const I_GETBAND = 21278 +const I_GETCLTIME = 21281 +const I_GETSIG = 21258 +const I_GRDOPT = 21255 +const I_GWROPT = 21268 +const I_LINK = 21260 +const I_LIST = 21269 +const I_LOOK = 21252 +const I_NREAD = 21249 +const I_PEEK = 21263 +const I_PLINK = 21270 +const I_POP = 21251 +const I_PUNLINK = 21271 +const I_PUSH = 21250 +const I_RECVFD = 21262 +const I_SENDFD = 21265 +const I_SETCLTIME = 21280 +const I_SETSIG = 21257 +const I_SRDOPT = 21254 +const I_STR = 21256 +const I_SWROPT = 21267 +const I_UNLINK = 21261 +const LASTMARK = 2 +const MORECTL = 1 +const MOREDATA = 2 +const MSG_ANY = 2 +const MSG_BAND = 4 +const MSG_HIPRI = 1 +const MUXID_ALL = -1 +const RMSGD = 1 +const RMSGN = 2 +const RNORM = 0 +const RPROTDAT = 4 +const RPROTDIS = 8 +const RPROTMASK = 28 +const RPROTNORM = 16 +const RS_HIPRI = 1 +const SNDPIPE = 2 +const SNDZERO = 1 +const S_BANDURG = 512 +const S_ERROR = 16 +const S_HANGUP = 32 +const S_HIPRI = 2 +const S_INPUT = 1 +const S_MSG = 8 +const S_OUTPUT = 4 +const S_RDBAND = 128 +const S_RDNORM = 64 +const S_WRBAND = 256 +const S_WRNORM = 4 +const __SID = 21248 + +type Tbandinfo = struct { + Fbi_pri uint8 + Fbi_flag int32 +} + +type Tstrbuf = struct { + Fmaxlen int32 + Flen1 int32 + Fbuf uintptr +} + +type Tstrpeek = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 +} + +type Tstrfdinsert = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 + Ffildes int32 + Foffset int32 +} + +type Tstrioctl = struct { + Fic_cmd int32 + Fic_timout int32 + Fic_len int32 + Fic_dp uintptr +} + +type Tstrrecvfd = struct { + Ffd int32 + Fuid int32 + Fgid int32 + F__fill [8]int8 +} + +type Tstr_mlist = struct { + Fl_name [9]int8 +} + +type Tstr_list = struct { + Fsl_nmods int32 + Fsl_modlist uintptr +} + +func Xisastream(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if Xfcntl(tls, fd, int32(F_GETFD), 0) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xlutimes(tls *TLS, filename uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v tv=%v, (%v:)", tls, filename, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + var _ /* times at bp+0 */ [2]Ttimespec + _ = v1 + if tv != 0 { + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000)) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000)) + } + if tv != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), filename, v1, int32(AT_SYMLINK_NOFOLLOW)) +} + +const UL_GETFSIZE = 1 +const UL_SETFSIZE = 2 + +func Xulimit(tls *TLS, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v va=%v, (%v:)", tls, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var val int32 + var _ /* rl at bp+0 */ Trlimit + _, _ = ap, val + Xgetrlimit(tls, int32(RLIMIT_FSIZE), bp) + if cmd == int32(UL_SETFSIZE) { + ap = va + val = VaInt32(&ap) + _ = ap + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = uint64(512) * uint64(val) + if Xsetrlimit(tls, int32(RLIMIT_FSIZE), bp) != 0 { + return -int32(1) + } + } + return int32((*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur / uint64(512)) +} + +const BOOT_TIME = 2 +const DEAD_PROCESS = 8 +const EMPTY = 0 +const INIT_PROCESS = 5 +const LOGIN_PROCESS = 6 +const NEW_TIME = 3 +const OLD_TIME = 4 +const RUN_LVL = 1 +const USER_PROCESS = 7 +const e_exit = 0 +const e_termination = 0 + +type Tutmpx = struct { + Fut_type int16 + F__ut_pad1 int16 + Fut_pid Tpid_t + Fut_line [32]int8 + Fut_id [4]int8 + Fut_user [32]int8 + Fut_host [256]int8 + Fut_exit struct { + F__e_termination int16 + F__e_exit int16 + } + Fut_session int32 + F__ut_pad2 int32 + Fut_tv Ttimeval + Fut_addr_v6 [4]uint32 + F__unused [20]int8 +} + +func Xendutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetutxent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xpututxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xupdwtmpx(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } +} + +func ___utmpxname(tls *TLS, f uintptr) (r int32) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return -int32(1) +} + +func Xendutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendutxent(tls) +} + +func Xgetutent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxent(tls) +} + +func Xgetutid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxid(tls, ut) +} + +func Xgetutline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxline(tls, ut) +} + +func Xpututline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xpututxline(tls, ut) +} + +func Xsetutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetutxent(tls) +} + +func Xupdwtmp(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } + Xupdwtmpx(tls, f, u) +} + +const ADJ_ESTERROR = 8 +const ADJ_FREQUENCY = 2 +const ADJ_MAXERROR = 4 +const ADJ_MICRO = 4096 +const ADJ_NANO = 8192 +const ADJ_OFFSET = 1 +const ADJ_OFFSET_SINGLESHOT = 32769 +const ADJ_OFFSET_SS_READ = 40961 +const ADJ_SETOFFSET = 256 +const ADJ_STATUS = 16 +const ADJ_TAI = 128 +const ADJ_TICK = 16384 +const ADJ_TIMECONST = 32 +const MAXTC = 6 +const MOD_CLKA = 32769 +const MOD_CLKB = 16384 +const MOD_ESTERROR = 8 +const MOD_FREQUENCY = 2 +const MOD_MAXERROR = 4 +const MOD_MICRO = 4096 +const MOD_NANO = 8192 +const MOD_OFFSET = 1 +const MOD_STATUS = 16 +const MOD_TAI = 128 +const MOD_TIMECONST = 32 +const STA_CLK = 32768 +const STA_CLOCKERR = 4096 +const STA_DEL = 32 +const STA_FLL = 8 +const STA_FREQHOLD = 128 +const STA_INS = 16 +const STA_MODE = 16384 +const STA_NANO = 8192 +const STA_PLL = 1 +const STA_PPSERROR = 2048 +const STA_PPSFREQ = 2 +const STA_PPSJITTER = 512 +const STA_PPSSIGNAL = 256 +const STA_PPSTIME = 4 +const STA_PPSWANDER = 1024 +const STA_RONLY = 65280 +const STA_UNSYNC = 64 +const TIME_BAD = 5 +const TIME_DEL = 2 +const TIME_ERROR = 5 +const TIME_INS = 1 +const TIME_OK = 0 +const TIME_OOP = 3 +const TIME_WAIT = 4 + +type Tntptimeval = struct { + Ftime Ttimeval + Fmaxerror int32 + Festerror int32 +} + +type Ttimex = struct { + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + Ftime Ttimeval + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 +} + +func Xadjtime(tls *TLS, in uintptr, out uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v in=%v out=%v, (%v:)", tls, in, out, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1 Tsuseconds_t + var _ /* tx at bp+0 */ Ttimex + _ = v1 + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{} + if in != 0 { + if (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec > int64(1000) || (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec > int64(1000000000) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + (*(*Ttimex)(unsafe.Pointer(bp))).Foffset = int32((*Ttimeval)(unsafe.Pointer(in)).Ftv_sec*int64(1000000) + (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec) + (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes = uint32(ADJ_OFFSET_SINGLESHOT) + } + if Xadjtimex(tls, bp) < 0 { + return -int32(1) + } + if out != 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec = int64((*(*Ttimex)(unsafe.Pointer(bp))).Foffset / int32(1000000)) + v1 = int64((*(*Ttimex)(unsafe.Pointer(bp))).Foffset % Int32FromInt32(1000000)) + (*Ttimeval)(unsafe.Pointer(out)).Ftv_usec = v1 + if v1 < 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec-- + *(*Tsuseconds_t)(unsafe.Pointer(out + 8)) += int64(1000000) + } + } + return 0 +} + +func Xadjtimex(tls *TLS, tx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx=%v, (%v:)", tls, tx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclock_adjtime(tls, CLOCK_REALTIME, tx) +} + +func Xarch_prctl(tls *TLS, code int32, addr uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v code=%v addr=%v, (%v:)", tls, code, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_arch_prctl), code, int32(addr)))) +} + +func Xbrk(tls *TLS, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v end=%v, (%v:)", tls, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(ENOMEM))) +} + +func Xcapset(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_capset), int32(a), int32(b)))) +} + +func Xcapget(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_capget), int32(a), int32(b)))) +} + +func Xchroot(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chroot), int32(path)))) +} + +type Tktimex64 = struct { + Fmodes uint32 + F__ccgo4 uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + F__ccgo44 uint32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + F__ccgo116 uint32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +type Tktimex = struct { + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + Ftime_sec int32 + Ftime_usec int32 + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 +} + +func Xclock_adjtime(tls *TLS, clock_id Tclockid_t, utx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v utx=%v, (%v:)", tls, clock_id, utx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(336) + defer tls.Free(336) + var r int32 + var _ /* ktx at bp+0 */ Tktimex64 + var _ /* ktx at bp+208 */ Tktimex + _ = r + r = -int32(ENOSYS) + *(*Tktimex64)(unsafe.Pointer(bp)) = Tktimex64{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: int64((*Ttimex)(unsafe.Pointer(utx)).Foffset), + Ffreq: int64((*Ttimex)(unsafe.Pointer(utx)).Ffreq), + Fmaxerror: int64((*Ttimex)(unsafe.Pointer(utx)).Fmaxerror), + Festerror: int64((*Ttimex)(unsafe.Pointer(utx)).Festerror), + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: int64((*Ttimex)(unsafe.Pointer(utx)).Fconstant), + Fprecision: int64((*Ttimex)(unsafe.Pointer(utx)).Fprecision), + Ftolerance: int64((*Ttimex)(unsafe.Pointer(utx)).Ftolerance), + Ftime_sec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec, + Ftime_usec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec, + Ftick: int64((*Ttimex)(unsafe.Pointer(utx)).Ftick), + Fppsfreq: int64((*Ttimex)(unsafe.Pointer(utx)).Fppsfreq), + Fjitter: int64((*Ttimex)(unsafe.Pointer(utx)).Fjitter), + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: int64((*Ttimex)(unsafe.Pointer(utx)).Fstabil), + Fjitcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fjitcnt), + Fcalcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fcalcnt), + Ferrcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Ferrcnt), + Fstbcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fstbcnt), + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + r = int32(X__syscall2(tls, int32(SYS_clock_adjtime64), clock_id, int32(bp))) + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex64)(unsafe.Pointer(bp))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Foffset) + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ffreq) + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fmaxerror) + (*Ttimex)(unsafe.Pointer(utx)).Festerror = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Festerror) + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex64)(unsafe.Pointer(bp))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fconstant) + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fprecision) + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ftolerance) + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftime_sec + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftime_usec + (*Ttimex)(unsafe.Pointer(utx)).Ftick = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ftick) + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fppsfreq) + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fjitter) + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex64)(unsafe.Pointer(bp))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fstabil) + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fjitcnt) + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fcalcnt) + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ferrcnt) + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fstbcnt) + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftai + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if (*Ttimex)(unsafe.Pointer(utx)).Fmodes&uint32(ADJ_SETOFFSET) != 0 && !!((uint64((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if uint32(8) > uint32(4) { + *(*Tktimex)(unsafe.Pointer(bp + 208)) = Tktimex{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: (*Ttimex)(unsafe.Pointer(utx)).Foffset, + Ffreq: (*Ttimex)(unsafe.Pointer(utx)).Ffreq, + Fmaxerror: (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror, + Festerror: (*Ttimex)(unsafe.Pointer(utx)).Festerror, + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: (*Ttimex)(unsafe.Pointer(utx)).Fconstant, + Fprecision: (*Ttimex)(unsafe.Pointer(utx)).Fprecision, + Ftolerance: (*Ttimex)(unsafe.Pointer(utx)).Ftolerance, + Ftime_sec: int32((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec), + Ftime_usec: int32((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec), + Ftick: (*Ttimex)(unsafe.Pointer(utx)).Ftick, + Fppsfreq: (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq, + Fjitter: (*Ttimex)(unsafe.Pointer(utx)).Fjitter, + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: (*Ttimex)(unsafe.Pointer(utx)).Fstabil, + Fjitcnt: (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt, + Fcalcnt: (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt, + Ferrcnt: (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt, + Fstbcnt: (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt, + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + if clock_id == CLOCK_REALTIME { + r = int32(X__syscall1(tls, int32(SYS_adjtimex), int32(bp+208))) + } else { + r = int32(X__syscall2(tls, int32(SYS_clock_adjtime), clock_id, int32(bp+208))) + } + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Foffset + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ffreq + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fmaxerror + (*Ttimex)(unsafe.Pointer(utx)).Festerror = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Festerror + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fconstant + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fprecision + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftolerance + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = int64((*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftime_sec) + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = int64((*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftime_usec) + (*Ttimex)(unsafe.Pointer(utx)).Ftick = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftick + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fppsfreq + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fjitter + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstabil + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fjitcnt + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fcalcnt + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ferrcnt + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstbcnt + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftai + } + return X__syscall_ret(tls, uint32(r)) + } + if clock_id == CLOCK_REALTIME { + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_adjtimex), int32(utx)))) + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_clock_adjtime), clock_id, int32(utx)))) +} + +func Xcopy_file_range(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_copy_file_range), fd_in, int32(off_in), fd_out, int32(off_out), int32(len1), int32(flags)))) +} + +const EPOLLERR = 8 +const EPOLLET = 2147483648 +const EPOLLEXCLUSIVE = 268435456 +const EPOLLHUP = 16 +const EPOLLIN = 1 +const EPOLLMSG = 1024 +const EPOLLNVAL = 32 +const EPOLLONESHOT = 1073741824 +const EPOLLOUT = 4 +const EPOLLPRI = 2 +const EPOLLRDBAND = 128 +const EPOLLRDHUP = 8192 +const EPOLLRDNORM = 64 +const EPOLLWAKEUP = 536870912 +const EPOLLWRBAND = 512 +const EPOLLWRNORM = 256 +const EPOLL_CLOEXEC = 524288 +const EPOLL_CTL_ADD = 1 +const EPOLL_CTL_DEL = 2 +const EPOLL_CTL_MOD = 3 +const EPOLL_NONBLOCK = 2048 + +type Tfsblkcnt_t = uint64 + +type Tfsfilcnt_t = uint64 + +type _EPOLL_EVENTS = int32 + +const ___EPOLL_DUMMY = 0 + +type Tepoll_data_t = struct { + Ffd [0]int32 + Fu32 [0]Tuint32_t + Fu64 [0]Tuint64_t + Fptr uintptr + F__ccgo_pad4 [4]byte +} + +type Tepoll_data = Tepoll_data_t + +type Tepoll_event = struct { + Fevents Tuint32_t + Fdata Tepoll_data_t +} + +func Xepoll_create(tls *TLS, size int32) (r int32) { + if __ccgo_strace { + trc("tls=%v size=%v, (%v:)", tls, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size <= 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return Xepoll_create1(tls, 0) +} + +func Xepoll_create1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_epoll_create1), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int32(SYS_epoll_create), int32(Int32FromInt32(1)))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xepoll_ctl(tls *TLS, fd int32, op int32, fd2 int32, ev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v fd2=%v ev=%v, (%v:)", tls, fd, op, fd2, ev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_epoll_ctl), fd, op, fd2, int32(ev)))) +} + +func Xepoll_pwait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32, sigs uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v sigs=%v, (%v:)", tls, fd, ev, cnt, to, sigs, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(___syscall_cp(tls, int32(SYS_epoll_pwait), fd, int32(ev), cnt, to, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if r == -int32(ENOSYS) && !(sigs != 0) { + r = int32(___syscall_cp(tls, int32(SYS_epoll_wait), fd, int32(ev), cnt, to, 0, 0)) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xepoll_wait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v, (%v:)", tls, fd, ev, cnt, to, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xepoll_pwait(tls, fd, ev, cnt, to, uintptr(0)) +} + +const EFD_CLOEXEC = 524288 +const EFD_NONBLOCK = 2048 +const EFD_SEMAPHORE = 1 + +type Teventfd_t = uint64 + +func Xeventfd(tls *TLS, count uint32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v count=%v flags=%v, (%v:)", tls, count, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int32(SYS_eventfd2), int32(count), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int32(SYS_eventfd), int32(count))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xeventfd_read(tls *TLS, fd int32, value uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v value=%v, (%v:)", tls, fd, value, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if uint32(8) == uint32(Xread(tls, fd, value, uint32(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xeventfd_write(tls *TLS, fd int32, _value Teventfd_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v _value=%v, (%v:)", tls, fd, _value, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Teventfd_t)(unsafe.Pointer(bp)) = _value + var v1 int32 + _ = v1 + if uint32(8) == uint32(Xwrite(tls, fd, bp, uint32(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xfallocate(tls *TLS, fd int32, mode int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v base=%v len1=%v, (%v:)", tls, fd, mode, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_fallocate), fd, mode, int32(base), int32(len1)))) +} + +const FANOTIFY_METADATA_VERSION = 3 +const FAN_ACCESS = 1 +const FAN_ACCESS_PERM = 131072 +const FAN_ALLOW = 1 +const FAN_ALL_CLASS_BITS = 12 +const FAN_ALL_EVENTS = 59 +const FAN_ALL_INIT_FLAGS = 63 +const FAN_ALL_MARK_FLAGS = 255 +const FAN_ALL_OUTGOING_EVENTS = 213051 +const FAN_ALL_PERM_EVENTS = 196608 +const FAN_ATTRIB = 4 +const FAN_AUDIT = 16 +const FAN_CLASS_CONTENT = 4 +const FAN_CLASS_NOTIF = 0 +const FAN_CLASS_PRE_CONTENT = 8 +const FAN_CLOEXEC = 1 +const FAN_CLOSE = 24 +const FAN_CLOSE_NOWRITE = 16 +const FAN_CLOSE_WRITE = 8 +const FAN_CREATE = 256 +const FAN_DELETE = 512 +const FAN_DELETE_SELF = 1024 +const FAN_DENY = 2 +const FAN_DIR_MODIFY = 524288 +const FAN_ENABLE_AUDIT = 64 +const FAN_EVENT_INFO_TYPE_DFID = 3 +const FAN_EVENT_INFO_TYPE_DFID_NAME = 2 +const FAN_EVENT_INFO_TYPE_FID = 1 +const FAN_EVENT_METADATA_LEN = 0 +const FAN_EVENT_ON_CHILD = 134217728 +const FAN_MARK_ADD = 1 +const FAN_MARK_DONT_FOLLOW = 4 +const FAN_MARK_FILESYSTEM = 256 +const FAN_MARK_FLUSH = 128 +const FAN_MARK_IGNORED_MASK = 32 +const FAN_MARK_IGNORED_SURV_MODIFY = 64 +const FAN_MARK_INODE = 0 +const FAN_MARK_MOUNT = 16 +const FAN_MARK_ONLYDIR = 8 +const FAN_MARK_REMOVE = 2 +const FAN_MARK_TYPE_MASK = 272 +const FAN_MODIFY = 2 +const FAN_MOVE = 192 +const FAN_MOVED_FROM = 64 +const FAN_MOVED_TO = 128 +const FAN_MOVE_SELF = 2048 +const FAN_NOFD = -1 +const FAN_NONBLOCK = 2 +const FAN_ONDIR = 1073741824 +const FAN_OPEN = 32 +const FAN_OPEN_EXEC = 4096 +const FAN_OPEN_EXEC_PERM = 262144 +const FAN_OPEN_PERM = 65536 +const FAN_Q_OVERFLOW = 16384 +const FAN_REPORT_DFID_NAME = 3072 +const FAN_REPORT_DIR_FID = 1024 +const FAN_REPORT_FID = 512 +const FAN_REPORT_NAME = 2048 +const FAN_REPORT_TID = 256 +const FAN_UNLIMITED_MARKS = 32 +const FAN_UNLIMITED_QUEUE = 16 +const ST_APPEND = 256 +const ST_IMMUTABLE = 512 +const ST_MANDLOCK = 64 +const ST_NOATIME = 1024 +const ST_NODEV = 4 +const ST_NODIRATIME = 2048 +const ST_NOEXEC = 8 +const ST_NOSUID = 2 +const ST_RDONLY = 1 +const ST_RELATIME = 4096 +const ST_SYNCHRONOUS = 16 +const ST_WRITE = 128 + +type Tstatvfs = struct { + Ff_bsize uint32 + Ff_frsize uint32 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_favail Tfsfilcnt_t + Ff_fsid uint32 + F__ccgo60 uint32 + Ff_flag uint32 + Ff_namemax uint32 + Ff_type uint32 + F__reserved [5]int32 +} + +type Tfsid_t = struct { + F__val [2]int32 +} + +type t__fsid_t = Tfsid_t + +type Tstatfs = struct { + Ff_type uint32 + Ff_bsize uint32 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_fsid Tfsid_t + Ff_namelen uint32 + Ff_frsize uint32 + Ff_flags uint32 + Ff_spare [4]uint32 +} + +type Tfanotify_event_metadata = struct { + Fevent_len uint32 + Fvers uint8 + Freserved uint8 + Fmetadata_len uint16 + Fmask uint64 + Ffd int32 + Fpid int32 +} + +type Tfanotify_event_info_header = struct { + Finfo_type uint8 + Fpad uint8 + Flen1 uint16 +} + +type Tfanotify_event_info_fid = struct { + Fhdr Tfanotify_event_info_header + Ffsid Tfsid_t +} + +type Tfanotify_response = struct { + Ffd int32 + Fresponse uint32 +} + +func Xfanotify_init(tls *TLS, flags uint32, event_f_flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v event_f_flags=%v, (%v:)", tls, flags, event_f_flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_fanotify_init), int32(flags), int32(event_f_flags)))) +} + +func Xfanotify_mark(tls *TLS, fanotify_fd int32, flags uint32, mask uint64, dfd int32, pathname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fanotify_fd=%v flags=%v mask=%v dfd=%v pathname=%v, (%v:)", tls, fanotify_fd, flags, mask, dfd, pathname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fanotify_mark), fanotify_fd, int32(flags), int32(mask), dfd, int32(pathname)))) +} + +const LOCK_EX = 2 +const LOCK_NB = 4 +const LOCK_SH = 1 +const LOCK_UN = 8 + +func Xflock(tls *TLS, fd int32, op int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v, (%v:)", tls, fd, op, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_flock), fd, op))) +} + +func Xgetdents(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + if len1 > uint32(INT_MAX) { + len1 = uint32(INT_MAX) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getdents64), fd, int32(buf), int32(len1)))) +} + +const GRND_INSECURE = 4 +const GRND_NONBLOCK = 1 +const GRND_RANDOM = 2 + +func Xgetrandom(tls *TLS, buf uintptr, buflen Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v buf=%v buflen=%v flags=%v, (%v:)", tls, buf, buflen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_getrandom), int32(buf), int32(buflen), int32(flags), 0, 0, 0))) +} + +const IN_ACCESS = 1 +const IN_ALL_EVENTS = 4095 +const IN_ATTRIB = 4 +const IN_CLOEXEC = 524288 +const IN_CLOSE = 24 +const IN_CLOSE_NOWRITE = 16 +const IN_CLOSE_WRITE = 8 +const IN_CREATE = 256 +const IN_DELETE = 512 +const IN_DELETE_SELF = 1024 +const IN_DONT_FOLLOW = 33554432 +const IN_EXCL_UNLINK = 67108864 +const IN_IGNORED = 32768 +const IN_ISDIR = 1073741824 +const IN_MASK_ADD = 536870912 +const IN_MASK_CREATE = 268435456 +const IN_MODIFY = 2 +const IN_MOVE = 192 +const IN_MOVED_FROM = 64 +const IN_MOVED_TO = 128 +const IN_MOVE_SELF = 2048 +const IN_NONBLOCK = 2048 +const IN_ONESHOT = 2147483648 +const IN_ONLYDIR = 16777216 +const IN_OPEN = 32 +const IN_Q_OVERFLOW = 16384 +const IN_UNMOUNT = 8192 + +type Tinotify_event = struct { + Fwd int32 + Fmask Tuint32_t + Fcookie Tuint32_t + Flen1 Tuint32_t +} + +func Xinotify_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xinotify_init1(tls, 0) +} + +func Xinotify_init1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_inotify_init1), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall0(tls, int32(SYS_inotify_init))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xinotify_add_watch(tls *TLS, fd int32, pathname uintptr, mask Tuint32_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pathname=%v mask=%v, (%v:)", tls, fd, pathname, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_inotify_add_watch), fd, int32(pathname), int32(mask)))) +} + +func Xinotify_rm_watch(tls *TLS, fd int32, wd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wd=%v, (%v:)", tls, fd, wd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_inotify_rm_watch), fd, wd))) +} + +func Xioperm(tls *TLS, from uint32, num uint32, turn_on int32) (r int32) { + if __ccgo_strace { + trc("tls=%v from=%v num=%v turn_on=%v, (%v:)", tls, from, num, turn_on, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioperm), int32(from), int32(num), turn_on))) +} + +func Xiopl(tls *TLS, level int32) (r int32) { + if __ccgo_strace { + trc("tls=%v level=%v, (%v:)", tls, level, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_iopl), level))) +} + +func Xklogctl(tls *TLS, type1 int32, buf uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v buf=%v len1=%v, (%v:)", tls, type1, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_syslog), type1, int32(buf), len1))) +} + +const MADV_COLD = 20 +const MADV_DODUMP = 17 +const MADV_DOFORK = 11 +const MADV_DONTDUMP = 16 +const MADV_DONTFORK = 10 +const MADV_DONTNEED = 4 +const MADV_FREE = 8 +const MADV_HUGEPAGE = 14 +const MADV_HWPOISON = 100 +const MADV_KEEPONFORK = 19 +const MADV_MERGEABLE = 12 +const MADV_NOHUGEPAGE = 15 +const MADV_NORMAL = 0 +const MADV_PAGEOUT = 21 +const MADV_RANDOM = 1 +const MADV_REMOVE = 9 +const MADV_SEQUENTIAL = 2 +const MADV_SOFT_OFFLINE = 101 +const MADV_UNMERGEABLE = 13 +const MADV_WILLNEED = 3 +const MADV_WIPEONFORK = 18 +const MFD_ALLOW_SEALING = 2 +const MFD_CLOEXEC = 1 +const MFD_HUGETLB = 4 +const MLOCK_ONFAULT = 1 +const MREMAP_DONTUNMAP = 4 +const MREMAP_FIXED = 2 +const MREMAP_MAYMOVE = 1 +const _GNU_SOURCE = 1 + +func Xmemfd_create(tls *TLS, name uintptr, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flags=%v, (%v:)", tls, name, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_memfd_create), int32(name), int32(flags)))) +} + +func Xmlock2(tls *TLS, addr uintptr, len1 Tsize_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v flags=%v, (%v:)", tls, addr, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if flags == uint32(0) { + return Xmlock(tls, addr, len1) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mlock2), int32(addr), int32(len1), int32(flags)))) +} + +func Xinit_module(tls *TLS, a uintptr, b uint32, c uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v, (%v:)", tls, a, b, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_init_module), int32(a), int32(b), int32(c)))) +} + +func Xdelete_module(tls *TLS, a uintptr, b uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_delete_module), int32(a), int32(b)))) +} + +const BLKBSZGET = 2147488368 +const BLKBSZSET = 1073746545 +const BLKFLSBUF = 4705 +const BLKFRAGET = 4709 +const BLKFRASET = 4708 +const BLKGETSIZE = 4704 +const BLKGETSIZE64 = 2147488370 +const BLKRAGET = 4707 +const BLKRASET = 4706 +const BLKROGET = 4702 +const BLKROSET = 4701 +const BLKRRPART = 4703 +const BLKSECTGET = 4711 +const BLKSECTSET = 4710 +const BLKSSZGET = 4712 +const FIOASYNC = 21586 +const FIOCLEX = 21585 +const FIOGETOWN = 35075 +const FIONBIO = 21537 +const FIONCLEX = 21584 +const FIONREAD = 21531 +const FIOQSIZE = 21600 +const FIOSETOWN = 35073 +const MNT_DETACH = 2 +const MNT_EXPIRE = 4 +const MNT_FORCE = 1 +const MS_ACTIVE = 1073741824 +const MS_BIND = 4096 +const MS_BORN = 536870912 +const MS_DIRSYNC = 128 +const MS_I_VERSION = 8388608 +const MS_KERNMOUNT = 4194304 +const MS_LAZYTIME = 33554432 +const MS_MANDLOCK = 64 +const MS_MGC_MSK = 4294901760 +const MS_MGC_VAL = 3236757504 +const MS_MOVE = 8192 +const MS_NOATIME = 1024 +const MS_NODEV = 4 +const MS_NODIRATIME = 2048 +const MS_NOEXEC = 8 +const MS_NOREMOTELOCK = 134217728 +const MS_NOSEC = 268435456 +const MS_NOSUID = 2 +const MS_NOSYMFOLLOW = 256 +const MS_NOUSER = 2147483648 +const MS_POSIXACL = 65536 +const MS_PRIVATE = 262144 +const MS_RDONLY = 1 +const MS_REC = 16384 +const MS_RELATIME = 2097152 +const MS_REMOUNT = 32 +const MS_RMT_MASK = 41943121 +const MS_SHARED = 1048576 +const MS_SILENT = 32768 +const MS_SLAVE = 524288 +const MS_STRICTATIME = 16777216 +const MS_SYNCHRONOUS = 16 +const MS_UNBINDABLE = 131072 +const N_6PACK = 7 +const N_AX25 = 5 +const N_CAIF = 20 +const N_GIGASET_M101 = 16 +const N_GSM0710 = 21 +const N_HCI = 15 +const N_HDLC = 13 +const N_IRDA = 11 +const N_MASC = 8 +const N_MOUSE = 2 +const N_NCI = 25 +const N_NULL = 27 +const N_PPP = 3 +const N_PPS = 18 +const N_PROFIBUS_FDL = 10 +const N_R3964 = 9 +const N_SLCAN = 17 +const N_SLIP = 1 +const N_SMSBLOCK = 12 +const N_SPEAKUP = 26 +const N_STRIP = 4 +const N_SYNC_PPP = 14 +const N_TI_WL = 22 +const N_TRACEROUTER = 24 +const N_TRACESINK = 23 +const N_TTY = 0 +const N_V253 = 19 +const N_X25 = 6 +const SIOCADDDLCI = 35200 +const SIOCADDMULTI = 35121 +const SIOCADDRT = 35083 +const SIOCATMARK = 35077 +const SIOCDARP = 35155 +const SIOCDELDLCI = 35201 +const SIOCDELMULTI = 35122 +const SIOCDELRT = 35084 +const SIOCDEVPRIVATE = 35312 +const SIOCDIFADDR = 35126 +const SIOCDRARP = 35168 +const SIOCGARP = 35156 +const SIOCGIFADDR = 35093 +const SIOCGIFBR = 35136 +const SIOCGIFBRDADDR = 35097 +const SIOCGIFCONF = 35090 +const SIOCGIFCOUNT = 35128 +const SIOCGIFDSTADDR = 35095 +const SIOCGIFENCAP = 35109 +const SIOCGIFFLAGS = 35091 +const SIOCGIFHWADDR = 35111 +const SIOCGIFINDEX = 35123 +const SIOCGIFMAP = 35184 +const SIOCGIFMEM = 35103 +const SIOCGIFMETRIC = 35101 +const SIOCGIFMTU = 35105 +const SIOCGIFNAME = 35088 +const SIOCGIFNETMASK = 35099 +const SIOCGIFPFLAGS = 35125 +const SIOCGIFSLAVE = 35113 +const SIOCGIFTXQLEN = 35138 +const SIOCGPGRP = 35076 +const SIOCGRARP = 35169 +const SIOCGSTAMP = 2147518726 +const SIOCGSTAMPNS = 2147518727 +const SIOCPROTOPRIVATE = 35296 +const SIOCRTMSG = 35085 +const SIOCSARP = 35157 +const SIOCSIFADDR = 35094 +const SIOCSIFBR = 35137 +const SIOCSIFBRDADDR = 35098 +const SIOCSIFDSTADDR = 35096 +const SIOCSIFENCAP = 35110 +const SIOCSIFFLAGS = 35092 +const SIOCSIFHWADDR = 35108 +const SIOCSIFHWBROADCAST = 35127 +const SIOCSIFLINK = 35089 +const SIOCSIFMAP = 35185 +const SIOCSIFMEM = 35104 +const SIOCSIFMETRIC = 35102 +const SIOCSIFMTU = 35106 +const SIOCSIFNAME = 35107 +const SIOCSIFNETMASK = 35100 +const SIOCSIFPFLAGS = 35124 +const SIOCSIFSLAVE = 35120 +const SIOCSIFTXQLEN = 35139 +const SIOCSPGRP = 35074 +const SIOCSRARP = 35170 +const SIOGIFINDEX = 35123 +const TCFLSH = 21515 +const TCGETA = 21509 +const TCGETS = 21505 +const TCGETX = 21554 +const TCSBRK = 21513 +const TCSBRKP = 21541 +const TCSETA = 21510 +const TCSETAF = 21512 +const TCSETAW = 21511 +const TCSETS = 21506 +const TCSETSF = 21508 +const TCSETSW = 21507 +const TCSETX = 21555 +const TCSETXF = 21556 +const TCSETXW = 21557 +const TCXONC = 21514 +const TIOCCBRK = 21544 +const TIOCCONS = 21533 +const TIOCEXCL = 21516 +const TIOCGDEV = 2147767346 +const TIOCGETD = 21540 +const TIOCGEXCL = 2147767360 +const TIOCGICOUNT = 21597 +const TIOCGISO7816 = 2150126658 +const TIOCGLCKTRMIOS = 21590 +const TIOCGPGRP = 21519 +const TIOCGPKT = 2147767352 +const TIOCGPTLCK = 2147767353 +const TIOCGPTN = 2147767344 +const TIOCGPTPEER = 21569 +const TIOCGRS485 = 21550 +const TIOCGSERIAL = 21534 +const TIOCGSID = 21545 +const TIOCGSOFTCAR = 21529 +const TIOCGWINSZ = 21523 +const TIOCINQ = 21531 +const TIOCLINUX = 21532 +const TIOCMBIC = 21527 +const TIOCMBIS = 21526 +const TIOCMGET = 21525 +const TIOCMIWAIT = 21596 +const TIOCMSET = 21528 +const TIOCM_CAR = 64 +const TIOCM_CD = 64 +const TIOCM_CTS = 32 +const TIOCM_DSR = 256 +const TIOCM_DTR = 2 +const TIOCM_LE = 1 +const TIOCM_LOOP = 32768 +const TIOCM_OUT1 = 8192 +const TIOCM_OUT2 = 16384 +const TIOCM_RI = 128 +const TIOCM_RNG = 128 +const TIOCM_RTS = 4 +const TIOCM_SR = 16 +const TIOCM_ST = 8 +const TIOCNOTTY = 21538 +const TIOCNXCL = 21517 +const TIOCOUTQ = 21521 +const TIOCPKT = 21536 +const TIOCPKT_DATA = 0 +const TIOCPKT_DOSTOP = 32 +const TIOCPKT_FLUSHREAD = 1 +const TIOCPKT_FLUSHWRITE = 2 +const TIOCPKT_IOCTL = 64 +const TIOCPKT_NOSTOP = 16 +const TIOCPKT_START = 8 +const TIOCPKT_STOP = 4 +const TIOCSBRK = 21543 +const TIOCSCTTY = 21518 +const TIOCSERCONFIG = 21587 +const TIOCSERGETLSR = 21593 +const TIOCSERGETMULTI = 21594 +const TIOCSERGSTRUCT = 21592 +const TIOCSERGWILD = 21588 +const TIOCSERSETMULTI = 21595 +const TIOCSERSWILD = 21589 +const TIOCSER_TEMT = 1 +const TIOCSETD = 21539 +const TIOCSIG = 1074025526 +const TIOCSISO7816 = 3223868483 +const TIOCSLCKTRMIOS = 21591 +const TIOCSPGRP = 21520 +const TIOCSPTLCK = 1074025521 +const TIOCSRS485 = 21551 +const TIOCSSERIAL = 21535 +const TIOCSSOFTCAR = 21530 +const TIOCSTI = 21522 +const TIOCSWINSZ = 21524 +const TIOCVHANGUP = 21559 +const UMOUNT_NOFOLLOW = 8 +const _IOC_NONE = 0 +const _IOC_READ = 2 +const _IOC_WRITE = 1 + +func Xmount(tls *TLS, special uintptr, dir uintptr, fstype uintptr, flags uint32, data uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v dir=%v fstype=%v flags=%v data=%v, (%v:)", tls, special, dir, fstype, flags, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_mount), int32(special), int32(dir), int32(fstype), int32(flags), int32(data)))) +} + +func Xumount(tls *TLS, special uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v, (%v:)", tls, special, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_umount2), int32(special), int32(Int32FromInt32(0))))) +} + +func Xumount2(tls *TLS, special uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v flags=%v, (%v:)", tls, special, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_umount2), int32(special), flags))) +} + +func Xname_to_handle_at(tls *TLS, dirfd int32, pathname uintptr, handle uintptr, mount_id uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v handle=%v mount_id=%v flags=%v, (%v:)", tls, dirfd, pathname, handle, mount_id, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_name_to_handle_at), dirfd, int32(pathname), int32(handle), int32(mount_id), flags))) +} + +func Xopen_by_handle_at(tls *TLS, mount_fd int32, handle uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mount_fd=%v handle=%v flags=%v, (%v:)", tls, mount_fd, handle, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open_by_handle_at), mount_fd, int32(handle), flags))) +} + +const ADDR_COMPAT_LAYOUT = 2097152 +const ADDR_LIMIT_32BIT = 8388608 +const ADDR_LIMIT_3GB = 134217728 +const ADDR_NO_RANDOMIZE = 262144 +const FDPIC_FUNCPTRS = 524288 +const MMAP_PAGE_ZERO = 1048576 +const PER_BSD = 6 +const PER_HPUX = 16 +const PER_IRIX32 = 67108873 +const PER_IRIX64 = 67108875 +const PER_IRIXN32 = 67108874 +const PER_ISCR4 = 67108869 +const PER_LINUX = 0 +const PER_LINUX32 = 8 +const PER_LINUX32_3GB = 134217736 +const PER_LINUX_32BIT = 8388608 +const PER_LINUX_FDPIC = 524288 +const PER_MASK = 255 +const PER_OSF4 = 15 +const PER_OSR5 = 100663299 +const PER_RISCOS = 12 +const PER_SCOSVR3 = 117440515 +const PER_SOLARIS = 67108877 +const PER_SUNOS = 67108870 +const PER_SVR3 = 83886082 +const PER_SVR4 = 68157441 +const PER_UW7 = 68157454 +const PER_WYSEV386 = 83886084 +const PER_XENIX = 83886087 +const READ_IMPLIES_EXEC = 4194304 +const SHORT_INODE = 16777216 +const STICKY_TIMEOUTS = 67108864 +const UNAME26 = 131072 +const WHOLE_SECONDS = 33554432 + +func Xpersonality(tls *TLS, persona uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v persona=%v, (%v:)", tls, persona, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_personality), int32(persona)))) +} + +func Xpivot_root(tls *TLS, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v new1=%v old=%v, (%v:)", tls, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_pivot_root), int32(new1), int32(old)))) +} + +const PR_CAPBSET_DROP = 24 +const PR_CAPBSET_READ = 23 +const PR_CAP_AMBIENT = 47 +const PR_CAP_AMBIENT_CLEAR_ALL = 4 +const PR_CAP_AMBIENT_IS_SET = 1 +const PR_CAP_AMBIENT_LOWER = 3 +const PR_CAP_AMBIENT_RAISE = 2 +const PR_ENDIAN_BIG = 0 +const PR_ENDIAN_LITTLE = 1 +const PR_ENDIAN_PPC_LITTLE = 2 +const PR_FPEMU_NOPRINT = 1 +const PR_FPEMU_SIGFPE = 2 +const PR_FP_EXC_ASYNC = 2 +const PR_FP_EXC_DISABLED = 0 +const PR_FP_EXC_DIV = 65536 +const PR_FP_EXC_INV = 1048576 +const PR_FP_EXC_NONRECOV = 1 +const PR_FP_EXC_OVF = 131072 +const PR_FP_EXC_PRECISE = 3 +const PR_FP_EXC_RES = 524288 +const PR_FP_EXC_SW_ENABLE = 128 +const PR_FP_EXC_UND = 262144 +const PR_FP_MODE_FR = 1 +const PR_FP_MODE_FRE = 2 +const PR_GET_CHILD_SUBREAPER = 37 +const PR_GET_DUMPABLE = 3 +const PR_GET_ENDIAN = 19 +const PR_GET_FPEMU = 9 +const PR_GET_FPEXC = 11 +const PR_GET_FP_MODE = 46 +const PR_GET_IO_FLUSHER = 58 +const PR_GET_KEEPCAPS = 7 +const PR_GET_NAME = 16 +const PR_GET_NO_NEW_PRIVS = 39 +const PR_GET_PDEATHSIG = 2 +const PR_GET_SECCOMP = 21 +const PR_GET_SECUREBITS = 27 +const PR_GET_SPECULATION_CTRL = 52 +const PR_GET_TAGGED_ADDR_CTRL = 56 +const PR_GET_THP_DISABLE = 42 +const PR_GET_TID_ADDRESS = 40 +const PR_GET_TIMERSLACK = 30 +const PR_GET_TIMING = 13 +const PR_GET_TSC = 25 +const PR_GET_UNALIGN = 5 +const PR_MCE_KILL = 33 +const PR_MCE_KILL_CLEAR = 0 +const PR_MCE_KILL_DEFAULT = 2 +const PR_MCE_KILL_EARLY = 1 +const PR_MCE_KILL_GET = 34 +const PR_MCE_KILL_LATE = 0 +const PR_MCE_KILL_SET = 1 +const PR_MPX_DISABLE_MANAGEMENT = 44 +const PR_MPX_ENABLE_MANAGEMENT = 43 +const PR_MTE_TAG_MASK = 524280 +const PR_MTE_TAG_SHIFT = 3 +const PR_MTE_TCF_ASYNC = 4 +const PR_MTE_TCF_MASK = 6 +const PR_MTE_TCF_NONE = 0 +const PR_MTE_TCF_SHIFT = 1 +const PR_MTE_TCF_SYNC = 2 +const PR_PAC_APDAKEY = 4 +const PR_PAC_APDBKEY = 8 +const PR_PAC_APGAKEY = 16 +const PR_PAC_APIAKEY = 1 +const PR_PAC_APIBKEY = 2 +const PR_PAC_GET_ENABLED_KEYS = 61 +const PR_PAC_RESET_KEYS = 54 +const PR_PAC_SET_ENABLED_KEYS = 60 +const PR_SET_CHILD_SUBREAPER = 36 +const PR_SET_DUMPABLE = 4 +const PR_SET_ENDIAN = 20 +const PR_SET_FPEMU = 10 +const PR_SET_FPEXC = 12 +const PR_SET_FP_MODE = 45 +const PR_SET_IO_FLUSHER = 57 +const PR_SET_KEEPCAPS = 8 +const PR_SET_MM = 35 +const PR_SET_MM_ARG_END = 9 +const PR_SET_MM_ARG_START = 8 +const PR_SET_MM_AUXV = 12 +const PR_SET_MM_BRK = 7 +const PR_SET_MM_END_CODE = 2 +const PR_SET_MM_END_DATA = 4 +const PR_SET_MM_ENV_END = 11 +const PR_SET_MM_ENV_START = 10 +const PR_SET_MM_EXE_FILE = 13 +const PR_SET_MM_MAP = 14 +const PR_SET_MM_MAP_SIZE = 15 +const PR_SET_MM_START_BRK = 6 +const PR_SET_MM_START_CODE = 1 +const PR_SET_MM_START_DATA = 3 +const PR_SET_MM_START_STACK = 5 +const PR_SET_NAME = 15 +const PR_SET_NO_NEW_PRIVS = 38 +const PR_SET_PDEATHSIG = 1 +const PR_SET_PTRACER = 1499557217 +const PR_SET_PTRACER_ANY = 18446744073709551615 +const PR_SET_SECCOMP = 22 +const PR_SET_SECUREBITS = 28 +const PR_SET_SPECULATION_CTRL = 53 +const PR_SET_SYSCALL_USER_DISPATCH = 59 +const PR_SET_TAGGED_ADDR_CTRL = 55 +const PR_SET_THP_DISABLE = 41 +const PR_SET_TIMERSLACK = 29 +const PR_SET_TIMING = 14 +const PR_SET_TSC = 26 +const PR_SET_UNALIGN = 6 +const PR_SPEC_DISABLE = 4 +const PR_SPEC_DISABLE_NOEXEC = 16 +const PR_SPEC_ENABLE = 2 +const PR_SPEC_FORCE_DISABLE = 8 +const PR_SPEC_INDIRECT_BRANCH = 1 +const PR_SPEC_NOT_AFFECTED = 0 +const PR_SPEC_PRCTL = 1 +const PR_SPEC_STORE_BYPASS = 0 +const PR_SVE_GET_VL = 51 +const PR_SVE_SET_VL = 50 +const PR_SVE_SET_VL_ONEXEC = 262144 +const PR_SVE_VL_INHERIT = 131072 +const PR_SVE_VL_LEN_MASK = 65535 +const PR_SYS_DISPATCH_OFF = 0 +const PR_SYS_DISPATCH_ON = 1 +const PR_TAGGED_ADDR_ENABLE = 1 +const PR_TASK_PERF_EVENTS_DISABLE = 31 +const PR_TASK_PERF_EVENTS_ENABLE = 32 +const PR_TIMING_STATISTICAL = 0 +const PR_TIMING_TIMESTAMP = 1 +const PR_TSC_ENABLE = 1 +const PR_TSC_SIGSEGV = 2 +const PR_UNALIGN_NOPRINT = 1 +const PR_UNALIGN_SIGBUS = 2 +const SYSCALL_DISPATCH_FILTER_ALLOW = 0 +const SYSCALL_DISPATCH_FILTER_BLOCK = 1 + +type Tprctl_mm_map = struct { + Fstart_code Tuint64_t + Fend_code Tuint64_t + Fstart_data Tuint64_t + Fend_data Tuint64_t + Fstart_brk Tuint64_t + Fbrk Tuint64_t + Fstart_stack Tuint64_t + Farg_start Tuint64_t + Farg_end Tuint64_t + Fenv_start Tuint64_t + Fenv_end Tuint64_t + Fauxv uintptr + Fauxv_size Tuint32_t + Fexe_fd Tuint32_t +} + +func Xprctl(tls *TLS, op int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v va=%v, (%v:)", tls, op, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var i int32 + var x [4]uint32 + _, _, _ = ap, i, x + ap = va + i = 0 + for { + if !(i < int32(4)) { + break + } + x[i] = VaUint32(&ap) + goto _1 + _1: + ; + i++ + } + _ = ap + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_prctl), op, int32(x[0]), int32(x[int32(1)]), int32(x[int32(2)]), int32(x[int32(3)])))) +} + +const RWF_APPEND = 16 +const RWF_DSYNC = 2 +const RWF_HIPRI = 1 +const RWF_NOWAIT = 8 +const RWF_SYNC = 4 +const UIO_MAXIOV = 1024 + +func Xpreadv2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xreadv(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv2), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), flags))) +} + +func Xprlimit(tls *TLS, pid Tpid_t, resource int32, new_limit uintptr, old_limit uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v resource=%v new_limit=%v old_limit=%v, (%v:)", tls, pid, resource, new_limit, old_limit, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tmp at bp+0 */ Trlimit + _ = r + if new_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(new_limit)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + new_limit = bp + } + r = X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_prlimit64), pid, resource, int32(new_limit), int32(old_limit)))) + if !(r != 0) && old_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max = ^Uint64FromUint64(0) + } + } + return r +} + +func Xprocess_vm_writev(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint32, rvec uintptr, riovcnt uint32, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_process_vm_writev), pid, int32(lvec), int32(liovcnt), int32(rvec), int32(riovcnt), int32(flags)))) +} + +func Xprocess_vm_readv(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint32, rvec uintptr, riovcnt uint32, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_process_vm_readv), pid, int32(lvec), int32(liovcnt), int32(rvec), int32(riovcnt), int32(flags)))) +} + +const PTRACE_ATTACH = 16 +const PTRACE_CONT = 7 +const PTRACE_DETACH = 17 +const PTRACE_EVENT_CLONE = 3 +const PTRACE_EVENT_EXEC = 4 +const PTRACE_EVENT_EXIT = 6 +const PTRACE_EVENT_FORK = 1 +const PTRACE_EVENT_SECCOMP = 7 +const PTRACE_EVENT_STOP = 128 +const PTRACE_EVENT_VFORK = 2 +const PTRACE_EVENT_VFORK_DONE = 5 +const PTRACE_GETEVENTMSG = 16897 +const PTRACE_GETFPREGS = 14 +const PTRACE_GETFPXREGS = 18 +const PTRACE_GETREGS = 12 +const PTRACE_GETREGSET = 16900 +const PTRACE_GETSIGINFO = 16898 +const PTRACE_GETSIGMASK = 16906 +const PTRACE_GET_RSEQ_CONFIGURATION = 16911 +const PTRACE_GET_SYSCALL_INFO = 16910 +const PTRACE_GET_THREAD_AREA = 25 +const PTRACE_INTERRUPT = 16903 +const PTRACE_KILL = 8 +const PTRACE_LISTEN = 16904 +const PTRACE_O_EXITKILL = 1048576 +const PTRACE_O_MASK = 3145983 +const PTRACE_O_SUSPEND_SECCOMP = 2097152 +const PTRACE_O_TRACECLONE = 8 +const PTRACE_O_TRACEEXEC = 16 +const PTRACE_O_TRACEEXIT = 64 +const PTRACE_O_TRACEFORK = 2 +const PTRACE_O_TRACESECCOMP = 128 +const PTRACE_O_TRACESYSGOOD = 1 +const PTRACE_O_TRACEVFORK = 4 +const PTRACE_O_TRACEVFORKDONE = 32 +const PTRACE_PEEKDATA = 2 +const PTRACE_PEEKSIGINFO = 16905 +const PTRACE_PEEKSIGINFO_SHARED = 1 +const PTRACE_PEEKTEXT = 1 +const PTRACE_PEEKUSER = 3 +const PTRACE_POKEDATA = 5 +const PTRACE_POKETEXT = 4 +const PTRACE_POKEUSER = 6 +const PTRACE_SECCOMP_GET_FILTER = 16908 +const PTRACE_SECCOMP_GET_METADATA = 16909 +const PTRACE_SEIZE = 16902 +const PTRACE_SETFPREGS = 15 +const PTRACE_SETFPXREGS = 19 +const PTRACE_SETOPTIONS = 16896 +const PTRACE_SETREGS = 13 +const PTRACE_SETREGSET = 16901 +const PTRACE_SETSIGINFO = 16899 +const PTRACE_SETSIGMASK = 16907 +const PTRACE_SET_THREAD_AREA = 26 +const PTRACE_SINGLEBLOCK = 33 +const PTRACE_SINGLESTEP = 9 +const PTRACE_SYSCALL = 24 +const PTRACE_SYSCALL_INFO_ENTRY = 1 +const PTRACE_SYSCALL_INFO_EXIT = 2 +const PTRACE_SYSCALL_INFO_NONE = 0 +const PTRACE_SYSCALL_INFO_SECCOMP = 3 +const PTRACE_SYSEMU = 31 +const PTRACE_SYSEMU_SINGLESTEP = 32 +const PTRACE_TRACEME = 0 +const PT_ATTACH = 16 +const PT_CONTINUE = 7 +const PT_DETACH = 17 +const PT_GETEVENTMSG = 16897 +const PT_GETFPREGS = 14 +const PT_GETFPXREGS = 18 +const PT_GETREGS = 12 +const PT_GETSIGINFO = 16898 +const PT_GET_THREAD_AREA = 25 +const PT_KILL = 8 +const PT_READ_D = 2 +const PT_READ_I = 1 +const PT_READ_U = 3 +const PT_SETFPREGS = 15 +const PT_SETFPXREGS = 19 +const PT_SETOPTIONS = 16896 +const PT_SETREGS = 13 +const PT_SETSIGINFO = 16899 +const PT_SET_THREAD_AREA = 26 +const PT_STEP = 9 +const PT_STEPBLOCK = 33 +const PT_SYSCALL = 24 +const PT_SYSEMU = 31 +const PT_SYSEMU_SINGLESTEP = 32 +const PT_TRACE_ME = 0 +const PT_WRITE_D = 5 +const PT_WRITE_I = 4 +const PT_WRITE_U = 6 + +type t__ptrace_peeksiginfo_args = struct { + Foff Tuint64_t + Fflags Tuint32_t + Fnr Tint32_t +} + +type t__ptrace_seccomp_metadata = struct { + Ffilter_off Tuint64_t + Fflags Tuint64_t +} + +type t__ptrace_syscall_info = struct { + Fop Tuint8_t + F__pad [3]Tuint8_t + Farch Tuint32_t + Finstruction_pointer Tuint64_t + Fstack_pointer Tuint64_t + F__ccgo5_24 struct { + Fexit [0]struct { + Frval Tint64_t + Fis_error Tuint8_t + } + Fseccomp [0]struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + Fret_data Tuint32_t + } + Fentry struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + } + F__ccgo_pad3 [4]byte + } +} + +type t__ptrace_rseq_configuration = struct { + Frseq_abi_pointer Tuint64_t + Frseq_abi_size Tuint32_t + Fsignature Tuint32_t + Fflags Tuint32_t + Fpad Tuint32_t +} + +func Xptrace(tls *TLS, req int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v va=%v, (%v:)", tls, req, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var addr, addr2, data uintptr + var ap Tva_list + var pid Tpid_t + var ret int32 + var _ /* result at bp+0 */ int32 + _, _, _, _, _, _ = addr, addr2, ap, data, pid, ret + addr2 = uintptr(0) + ap = va + pid = VaInt32(&ap) + addr = VaUintptr(&ap) + data = VaUintptr(&ap) + /* PTRACE_{READ,WRITE}{DATA,TEXT} (16...19) are specific to SPARC. */ + _ = ap + if uint32(req)-uint32(1) < uint32(3) { + data = bp + } + ret = X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_ptrace), req, pid, int32(addr), int32(data), int32(addr2)))) + if ret < 0 || uint32(req)-uint32(1) >= uint32(3) { + return ret + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xpwritev2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xwritev(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev2), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), flags))) +} + +const GRPQUOTA = 1 +const IIF_ALL = 7 +const IIF_BGRACE = 1 +const IIF_FLAGS = 4 +const IIF_IGRACE = 2 +const MAXQUOTAS = 2 +const MAX_DQ_TIME = 604800 +const MAX_IQ_TIME = 604800 +const NR_DQHASH = 43 +const NR_DQUOTS = 256 +const QFMT_OCFS2 = 3 +const QFMT_VFS_OLD = 1 +const QFMT_VFS_V0 = 2 +const QFMT_VFS_V1 = 4 +const QIF_ALL = 63 +const QIF_BLIMITS = 1 +const QIF_BTIME = 16 +const QIF_ILIMITS = 4 +const QIF_INODES = 8 +const QIF_ITIME = 32 +const QIF_LIMITS = 5 +const QIF_SPACE = 2 +const QIF_TIMES = 48 +const QIF_USAGE = 10 +const QUOTAFILENAME = "quota" +const QUOTAGROUP = "staff" +const Q_GETFMT = 8388612 +const Q_GETINFO = 8388613 +const Q_GETQUOTA = 8388615 +const Q_QUOTAOFF = 8388611 +const Q_QUOTAON = 8388610 +const Q_SETINFO = 8388614 +const Q_SETQUOTA = 8388616 +const Q_SYNC = 8388609 +const SUBCMDMASK = 255 +const SUBCMDSHIFT = 8 +const USRQUOTA = 0 +const _LINUX_QUOTA_VERSION = 2 + +type Tdqblk = struct { + Fdqb_bhardlimit Tuint64_t + Fdqb_bsoftlimit Tuint64_t + Fdqb_curspace Tuint64_t + Fdqb_ihardlimit Tuint64_t + Fdqb_isoftlimit Tuint64_t + Fdqb_curinodes Tuint64_t + Fdqb_btime Tuint64_t + Fdqb_itime Tuint64_t + Fdqb_valid Tuint32_t +} + +type Tdqinfo = struct { + Fdqi_bgrace Tuint64_t + Fdqi_igrace Tuint64_t + Fdqi_flags Tuint32_t + Fdqi_valid Tuint32_t +} + +func Xquotactl(tls *TLS, cmd int32, special uintptr, id int32, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v special=%v id=%v addr=%v, (%v:)", tls, cmd, special, id, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_quotactl), cmd, int32(special), id, int32(addr)))) +} + +func Xreadahead(tls *TLS, fd int32, pos Toff_t, len1 Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v, (%v:)", tls, fd, pos, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_readahead), fd, int32(pos), int32(len1)))) +} + +const RB_AUTOBOOT = 19088743 +const RB_DISABLE_CAD = 0 +const RB_ENABLE_CAD = 2309737967 +const RB_HALT_SYSTEM = 3454992675 +const RB_KEXEC = 1163412803 +const RB_POWER_OFF = 1126301404 +const RB_SW_SUSPEND = 3489725666 + +func Xreboot(tls *TLS, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v, (%v:)", tls, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_reboot), int32(Uint32FromUint32(0xfee1dead)), int32(Int32FromInt32(672274793)), type1))) +} + +func Xremap_file_pages(tls *TLS, addr uintptr, size Tsize_t, prot int32, pgoff Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v size=%v prot=%v pgoff=%v flags=%v, (%v:)", tls, addr, size, prot, pgoff, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_remap_file_pages), int32(addr), int32(size), prot, int32(pgoff), flags))) +} + +func Xsbrk(tls *TLS, inc Tintptr_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if inc != 0 { + return uintptr(X__syscall_ret(tls, uint32(-Int32FromInt32(ENOMEM)))) + } + return uintptr(X__syscall1(tls, int32(SYS_brk), int32(Int32FromInt32(0)))) +} + +func Xsendfile(tls *TLS, out_fd int32, in_fd int32, ofs uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v out_fd=%v in_fd=%v ofs=%v count=%v, (%v:)", tls, out_fd, in_fd, ofs, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_sendfile64), out_fd, in_fd, int32(ofs), int32(count)))) +} + +func Xsetfsgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_setfsgid32), int32(gid)))) +} + +func Xsetfsuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_setfsuid32), int32(uid)))) +} + +func Xsethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_sethostname), int32(name), int32(len1)))) +} + +const CLONE_CHILD_CLEARTID = 2097152 +const CLONE_CHILD_SETTID = 16777216 +const CLONE_DETACHED = 4194304 +const CLONE_FILES = 1024 +const CLONE_FS = 512 +const CLONE_IO = 2147483648 +const CLONE_NEWCGROUP = 33554432 +const CLONE_NEWIPC = 134217728 +const CLONE_NEWNET = 1073741824 +const CLONE_NEWNS = 131072 +const CLONE_NEWPID = 536870912 +const CLONE_NEWTIME = 128 +const CLONE_NEWUSER = 268435456 +const CLONE_NEWUTS = 67108864 +const CLONE_PARENT = 32768 +const CLONE_PARENT_SETTID = 1048576 +const CLONE_PIDFD = 4096 +const CLONE_PTRACE = 8192 +const CLONE_SETTLS = 524288 +const CLONE_SIGHAND = 2048 +const CLONE_SYSVSEM = 262144 +const CLONE_THREAD = 65536 +const CLONE_UNTRACED = 8388608 +const CLONE_VFORK = 16384 +const CLONE_VM = 256 +const CPU_SETSIZE = 1024 +const CSIGNAL = 255 + +type Tcpu_set_t = struct { + F__bits [32]uint32 +} + +func Xsetns(tls *TLS, fd int32, nstype int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v nstype=%v, (%v:)", tls, fd, nstype, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setns), fd, nstype))) +} + +const __tm_gmtoff = 0 +const __tm_zone = 0 + +type Ttm1 = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + Ftm_gmtoff int32 + Ftm_zone uintptr +} + +func Xsettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if !(tv != 0) { + return 0 + } + if uint64((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec) >= uint64(1000000) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec, + Ftv_nsec: int32((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec * int64(1000)), + } + return Xclock_settime(tls, CLOCK_REALTIME, bp) +} + +const SFD_CLOEXEC = 524288 +const SFD_NONBLOCK = 2048 + +type Tsignalfd_siginfo = struct { + Fssi_signo Tuint32_t + Fssi_errno Tint32_t + Fssi_code Tint32_t + Fssi_pid Tuint32_t + Fssi_uid Tuint32_t + Fssi_fd Tint32_t + Fssi_tid Tuint32_t + Fssi_band Tuint32_t + Fssi_overrun Tuint32_t + Fssi_trapno Tuint32_t + Fssi_status Tint32_t + Fssi_int Tint32_t + Fssi_ptr Tuint64_t + Fssi_utime Tuint64_t + Fssi_stime Tuint64_t + Fssi_addr Tuint64_t + Fssi_addr_lsb Tuint16_t + F__pad2 Tuint16_t + Fssi_syscall Tint32_t + Fssi_call_addr Tuint64_t + Fssi_arch Tuint32_t + F__pad [28]Tuint8_t +} + +func Xsignalfd(tls *TLS, fd int32, sigs uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v sigs=%v flags=%v, (%v:)", tls, fd, sigs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall4(tls, int32(SYS_signalfd4), fd, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), flags)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + ret = int32(X__syscall3(tls, int32(SYS_signalfd), fd, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if ret >= 0 { + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flags&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return X__syscall_ret(tls, uint32(ret)) +} + +func Xsplice(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_splice), fd_in, int32(off_in), fd_out, int32(off_out), int32(len1), int32(flags)))) +} + +func Xstatx(tls *TLS, dirfd int32, path uintptr, flags int32, mask uint32, stx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v path=%v flags=%v mask=%v stx=%v, (%v:)", tls, dirfd, path, flags, mask, stx, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var ret int32 + var _ /* st at bp+0 */ Tstat + _ = ret + ret = int32(X__syscall5(tls, int32(SYS_statx), dirfd, int32(path), flags, int32(mask), int32(stx))) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + ret = Xfstatat(tls, dirfd, path, bp, flags) + if ret != 0 { + return ret + } + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_major = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(31)>>Int32FromInt32(1)&Uint64FromUint32(0xfffff000) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(8)&Uint64FromInt32(0x00000fff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_minor = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(12)&Uint64FromUint32(0xffffff00) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0x000000ff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mode = uint16((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_nlink = (*(*Tstat)(unsafe.Pointer(bp))).Fst_nlink + (*Tstatx)(unsafe.Pointer(stx)).Fstx_uid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_uid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_gid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_gid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_size = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blksize = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_blksize) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blocks = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_blocks) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_btime = Tstatx_timestamp{} + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mask = uint32(0x7ff) + return 0 +} + +func Xstime(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimeval + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: *(*Ttime_t)(unsafe.Pointer(t)), + } + return Xsettimeofday(tls, bp, UintptrFromInt32(0)) +} + +const SWAP_FLAG_DISCARD = 65536 +const SWAP_FLAG_PREFER = 32768 +const SWAP_FLAG_PRIO_MASK = 32767 +const SWAP_FLAG_PRIO_SHIFT = 0 + +func Xswapon(tls *TLS, path uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v flags=%v, (%v:)", tls, path, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_swapon), int32(path), flags))) +} + +func Xswapoff(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_swapoff), int32(path)))) +} + +func Xsync_file_range(tls *TLS, fd int32, pos Toff_t, len1 Toff_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v flags=%v, (%v:)", tls, fd, pos, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_sync_file_range), fd, int32(pos), int32(len1), int32(flags)))) +} + +func Xsyncfs(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_syncfs), fd))) +} + +func X__lsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_sysinfo), int32(info)))) +} + +func Xsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lsysinfo(tls, info) +} + +func Xtee(tls *TLS, src int32, dest int32, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v src=%v dest=%v len1=%v flags=%v, (%v:)", tls, src, dest, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_tee), src, dest, int32(len1), int32(flags)))) +} + +const TFD_CLOEXEC = 524288 +const TFD_NONBLOCK = 2048 +const TFD_TIMER_ABSTIME = 1 +const TFD_TIMER_CANCEL_ON_SET = 2 + +func Xtimerfd_create(tls *TLS, clockid int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v clockid=%v flags=%v, (%v:)", tls, clockid, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_timerfd_create), clockid, flags))) +} + +func Xtimerfd_settime(tls *TLS, fd int32, flags int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v new1=%v old=%v, (%v:)", tls, fd, flags, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var ins, r, vns int32 + var is, vs Ttime_t + var _ /* old32 at bp+48 */ [4]int32 + _, _, _, _, _ = ins, is, r, vns, vs + is = (*Titimerspec)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerspec)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ins = (*Titimerspec)(unsafe.Pointer(new1)).Fit_interval.Ftv_nsec + vns = (*Titimerspec)(unsafe.Pointer(new1)).Fit_value.Ftv_nsec + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || Bool(uint32(8) > uint32(4)) && old != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: int64(ins), + 2: vs, + 3: int64(vns), + } + r = int32(X__syscall4(tls, int32(SYS_timerfd_settime64), fd, flags, int32(bp), int32(old))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(is), + 1: ins, + 2: int32(vs), + 3: vns, + } + r = int32(X__syscall4(tls, int32(SYS_timerfd_settime32), fd, flags, int32(bp+32), int32(bp+48))) + if !(r != 0) && old != 0 { + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[0]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_timerfd_settime32), fd, flags, int32(new1), int32(old)))) +} + +func Xtimerfd_gettime(tls *TLS, fd int32, cur uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cur=%v, (%v:)", tls, fd, cur, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* cur32 at bp+0 */ [4]int32 + _ = r + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_timerfd_gettime64), fd, int32(cur))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_timerfd_gettime32), fd, int32(bp))) + if !(r != 0) { + (*Titimerspec)(unsafe.Pointer(cur)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerspec)(unsafe.Pointer(cur)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(cur)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(cur)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_timerfd_gettime32), fd, int32(cur)))) +} + +func Xunshare(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_unshare), flags))) +} + +func Xutimes(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, -int32(100), path, times) +} + +func Xvhangup(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_vhangup)))) +} + +func Xvmsplice(tls *TLS, fd int32, iov uintptr, cnt Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v cnt=%v flags=%v, (%v:)", tls, fd, iov, cnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_vmsplice), fd, int32(iov), int32(cnt), int32(flags)))) +} + +const NSIG = 65 +const SA_NOMASK = 1073741824 +const SA_ONESHOT = 2147483648 +const SYS_SECCOMP = 1 +const SYS_USER_DISPATCH = 2 +const __ucontext = 0 + +const _REG_GS = 0 +const _REG_FS = 1 +const _REG_ES = 2 +const _REG_DS = 3 +const _REG_EDI = 4 +const _REG_ESI = 5 +const _REG_EBP = 6 +const _REG_ESP = 7 +const _REG_EBX = 8 +const _REG_EDX = 9 +const _REG_ECX = 10 +const _REG_EAX = 11 +const _REG_TRAPNO = 12 +const _REG_ERR = 13 +const _REG_EIP = 14 +const _REG_CS = 15 +const _REG_EFL = 16 +const _REG_UESP = 17 +const _REG_SS = 18 + +type Tgreg_t = int32 + +type Tgregset_t = [19]int32 + +type Tfpregset_t = uintptr + +type T_fpstate = struct { + Fcw uint32 + Fsw uint32 + Ftag uint32 + Fipoff uint32 + Fcssel uint32 + Fdataoff uint32 + Fdatasel uint32 + F_st [8]struct { + Fsignificand [4]uint16 + Fexponent uint16 + } + Fstatus uint32 +} + +type Tsigcontext = struct { + Fgs uint16 + F__gsh uint16 + Ffs uint16 + F__fsh uint16 + Fes uint16 + F__esh uint16 + Fds uint16 + F__dsh uint16 + Fedi uint32 + Fesi uint32 + Febp uint32 + Fesp uint32 + Febx uint32 + Fedx uint32 + Fecx uint32 + Feax uint32 + Ftrapno uint32 + Ferr uint32 + Feip uint32 + Fcs uint16 + F__csh uint16 + Feflags uint32 + Fesp_at_signal uint32 + Fss uint16 + F__ssh uint16 + Ffpstate uintptr + Foldmask uint32 + Fcr2 uint32 +} + +type Tmcontext_t1 = struct { + Fgregs Tgregset_t + Ffpregs Tfpregset_t + Foldmask uint32 + Fcr2 uint32 +} + +type Tucontext_t1 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +type Tucontext = Tucontext_t1 + +type Tsig_t = uintptr + +type Tsighandler_t = uintptr + +func Xwait3(tls *TLS, status uintptr, options int32, usage uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwait4(tls, -int32(1), status, options, usage) +} + +func Xwait4(tls *TLS, pid Tpid_t, status uintptr, options int32, ru uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v ru=%v, (%v:)", tls, pid, status, options, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dest, v1 uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int32 + _, _, _ = dest, r, v1 + if ru != 0 { + v1 = ru + 32 - uintptr(Uint32FromInt32(4)*Uint32FromInt64(4)) + } else { + v1 = uintptr(0) + } + dest = v1 + r = int32(X__syscall4(tls, int32(SYS_wait4), pid, int32(status), options, int32(dest))) + if r > 0 && ru != 0 && Bool(uint32(8) > uint32(4)) { + Xmemcpy(tls, bp, dest, Uint32FromInt32(4)*Uint32FromInt64(4)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]), + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]), + } + } + return X__syscall_ret(tls, uint32(r)) +} + +const XATTR_CREATE = 1 +const XATTR_REPLACE = 2 +const __UAPI_DEF_XATTR = 0 + +func Xgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_getxattr), int32(path), int32(name), int32(value), int32(size)))) +} + +func Xlgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_lgetxattr), int32(path), int32(name), int32(value), int32(size)))) +} + +func Xfgetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v, (%v:)", tls, filedes, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_fgetxattr), filedes, int32(name), int32(value), int32(size)))) +} + +func Xlistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_listxattr), int32(path), int32(list), int32(size)))) +} + +func Xllistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_llistxattr), int32(path), int32(list), int32(size)))) +} + +func Xflistxattr(tls *TLS, filedes int32, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v list=%v size=%v, (%v:)", tls, filedes, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_flistxattr), filedes, int32(list), int32(size)))) +} + +func Xsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_setxattr), int32(path), int32(name), int32(value), int32(size), flags))) +} + +func Xlsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_lsetxattr), int32(path), int32(name), int32(value), int32(size), flags))) +} + +func Xfsetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, filedes, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fsetxattr), filedes, int32(name), int32(value), int32(size), flags))) +} + +func Xremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_removexattr), int32(path), int32(name)))) +} + +func Xlremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_lremovexattr), int32(path), int32(name)))) +} + +func Xfremovexattr(tls *TLS, fd int32, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_fremovexattr), fd, int32(name)))) +} + +type Tucontext_t2 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +func _dummy4(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + return msg +} + +func X__lctrans(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, lm) +} + +func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + 5*4))) +} + +func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { + var v1 uint32 + _ = v1 + if c != 0 { + v1 = x>>int32(24) | x>>int32(8)&uint32(0xff00) | x< %v", r) }() + } + var b, n, o, ol, os, t, tl, ts Tuint32_t + var mo uintptr + var sign, sw int32 + _, _, _, _, _, _, _, _, _, _, _ = b, mo, n, o, ol, os, sign, sw, t, tl, ts + mo = p + sw = int32(*(*Tuint32_t)(unsafe.Pointer(mo)) - uint32(0x950412de)) + b = uint32(0) + n = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 2*4)), sw) + o = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 3*4)), sw) + t = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 4*4)), sw) + if n >= size/uint32(4) || o >= size-uint32(4)*n || t >= size-uint32(4)*n || (o|t)%uint32(4) != 0 { + return uintptr(0) + } + o /= uint32(4) + t /= uint32(4) + for { + ol = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2)))*4)), sw) + os = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if os >= size || ol >= size-os || *(*int8)(unsafe.Pointer(p + uintptr(os+ol))) != 0 { + return uintptr(0) + } + sign = Xstrcmp(tls, s, p+uintptr(os)) + if !(sign != 0) { + tl = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2)))*4)), sw) + ts = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if ts >= size || tl >= size-ts || *(*int8)(unsafe.Pointer(p + uintptr(ts+tl))) != 0 { + return uintptr(0) + } + return p + uintptr(ts) + } else { + if n == uint32(1) { + return uintptr(0) + } else { + if sign < 0 { + n /= uint32(2) + } else { + b += n / uint32(2) + n -= n / uint32(2) + } + } + } + goto _1 + _1: + } + return uintptr(0) +} + +const __USE_GNU_GETTEXT = 1 + +func Xbind_textdomain_codeset(tls *TLS, domainname uintptr, codeset uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v codeset=%v, (%v:)", tls, domainname, codeset, origin(2)) + defer func() { trc("-> %v", r) }() + } + if codeset != 0 && Xstrcasecmp(tls, codeset, __ccgo_ts+322) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + } + return UintptrFromInt32(0) +} + +var _empty_mo = [5]Tuint32_t{ + 0: uint32(0x950412de), + 2: uint32(-Int32FromInt32(1)), + 3: uint32(-Int32FromInt32(1)), + 4: uint32(-Int32FromInt32(1)), +} + +const NL_CAT_LOCALE = 1 +const NL_SETD = 1 + +type Tnl_item = int32 + +type Tnl_catd = uintptr + +func Xcatclose(tls *TLS, catd Tnl_catd) (r int32) { + if __ccgo_strace { + trc("tls=%v catd=%v, (%v:)", tls, catd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var map1 uintptr + var v1, v2 Tuint32_t + _, _, _ = map1, v1, v2 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4< y { + v8 = int32(1) + } else { + v8 = 0 + } + v7 = v8 + } + return v7 +} + +func Xcatgets(tls *TLS, catd Tnl_catd, set_id int32, msg_id int32, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v catd=%v set_id=%v msg_id=%v s=%v, (%v:)", tls, catd, set_id, msg_id, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var map1, msg, msgs, set, sets, strings uintptr + var nmsgs, nsets, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 Tuint32_t + var _ /* msg_id_be at bp+4 */ Tuint32_t + var _ /* set_id_be at bp+0 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = map1, msg, msgs, nmsgs, nsets, set, sets, strings, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(4))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7<>int32(24) | v10>>int32(8)&uint32(0xff00) | v10<>int32(24) | v13>>int32(8)&uint32(0xff00) | v13<>int32(24) | v16>>int32(8)&uint32(0xff00) | v16<>int32(24) | v19>>int32(8)&uint32(0xff00) | v19<>int32(24) | v22>>int32(8)&uint32(0xff00) | v22<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< %v", r) }() + } + bp := tls.Alloc(4096) + defer tls.Free(4096) + var catd Tnl_catd + var i, l Tsize_t + var lang, p, path, v, z, v1, v3, v6, v7 uintptr + var v2 bool + var _ /* buf at bp+0 */ [4096]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = catd, i, l, lang, p, path, v, z, v1, v2, v3, v6, v7 + if Xstrchr(tls, name, int32('/')) != 0 { + return _do_catopen(tls, name) + } + if v2 = X__libc.Fsecure != 0; !v2 { + v1 = Xgetenv(tls, __ccgo_ts+328) + path = v1 + } + if v2 || !(v1 != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + if oflag != 0 { + v3 = Xnl_langinfo(tls, Int32FromInt32(LC_MESSAGES)<= uint32(4096)-i { + break + } + Xmemcpy(tls, bp+uintptr(i), v, l) + i += l + goto _5 + _5: + ; + p++ + } + if !(*(*int8)(unsafe.Pointer(z)) != 0) && (p < z || !(i != 0)) { + break + } + if p < z { + goto _4 + } + if *(*int8)(unsafe.Pointer(z)) != 0 { + z++ + } + (*(*[4096]int8)(unsafe.Pointer(bp)))[i] = 0 + /* Leading : or :: in NLSPATH is same as %N */ + if i != 0 { + v7 = bp + } else { + v7 = name + } + catd = _do_catopen(tls, v7) + if catd != uintptr(-Int32FromInt32(1)) { + return catd + } + goto _4 + _4: + ; + p = z + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) +} + +const calloc = 0 +const free = 0 +const malloc = 0 +const realloc = 0 + +type Tbinding = struct { + Fnext uintptr + Fdirlen int32 + Factive int32 + Fdomainname uintptr + Fdirname uintptr +} + +var _bindings uintptr + +func _gettextdir(tls *TLS, domainname uintptr, dirlen uintptr) (r uintptr) { + var p uintptr + _ = p + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(p+8) != 0 { + *(*Tsize_t)(unsafe.Pointer(dirlen)) = uint32((*Tbinding)(unsafe.Pointer(p)).Fdirlen) + return (*Tbinding)(unsafe.Pointer(p)).Fdirname + } + goto _1 + _1: + ; + p = (*Tbinding)(unsafe.Pointer(p)).Fnext + } + return uintptr(0) +} + +var _lock1 [1]int32 + +func Xbindtextdomain(tls *TLS, domainname uintptr, dirname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v dirname=%v, (%v:)", tls, domainname, dirname, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dirlen, domlen Tsize_t + var p1, q uintptr + _, _, _, _ = dirlen, domlen, p1, q + if !(domainname != 0) { + return uintptr(0) + } + if !(dirname != 0) { + *(*Tsize_t)(unsafe.Pointer(bp)) = uint32(0) + return _gettextdir(tls, domainname, bp) + } + domlen = Xstrnlen(tls, domainname, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + dirlen = Xstrnlen(tls, dirname, uint32(PATH_MAX)) + if domlen > uint32(NAME_MAX) || dirlen >= uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock1))) + p1 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p1 != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p1)).Fdomainname, domainname) != 0) && !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p1)).Fdirname, dirname) != 0) { + break + } + goto _1 + _1: + ; + p1 = (*Tbinding)(unsafe.Pointer(p1)).Fnext + } + if !(p1 != 0) { + p1 = Xcalloc(tls, uint32(20)+domlen+dirlen+uint32(2), uint32(1)) + if !(p1 != 0) { + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return uintptr(0) + } + (*Tbinding)(unsafe.Pointer(p1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + (*Tbinding)(unsafe.Pointer(p1)).Fdirlen = int32(dirlen) + (*Tbinding)(unsafe.Pointer(p1)).Fdomainname = p1 + 20 + (*Tbinding)(unsafe.Pointer(p1)).Fdirname = p1 + 20 + uintptr(domlen) + uintptr(1) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p1)).Fdomainname, domainname, domlen+uint32(1)) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p1)).Fdirname, dirname, dirlen+uint32(1)) + _ = uintptr(_a_cas(tls, uintptr(unsafe.Pointer(&_bindings)), int32(AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings)))), int32(p1))) + goto _2 + _2: + } + _a_store(tls, p1+8, int32(1)) + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && q != p1 { + _a_store(tls, q+8, 0) + } + goto _3 + _3: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return (*Tbinding)(unsafe.Pointer(p1)).Fdirname +} + +var _catnames = [6][12]int8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +var _catlens = [6]int8{ + 0: int8(8), + 1: int8(10), + 2: int8(7), + 3: int8(10), + 4: int8(11), + 5: int8(11), +} + +type Tmsgcat = struct { + Fnext uintptr + Fmap1 uintptr + Fmap_size Tsize_t + Fplural_rule uintptr + Fnplurals int32 + Fbinding uintptr + Flm uintptr + Fcat int32 +} + +func _dummy_gettextdomain(tls *TLS) (r uintptr) { + return __ccgo_ts + 350 +} + +func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint32, category int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v category=%v, (%v:)", tls, domainname, msgid1, msgid2, n, category, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var alt_modlen, catlen, dirlen, domlen, l, loclen, modlen, rem, v5 Tsize_t + var catname, csp, dirname, lm, loc, locname, locp, map1, modname, name, old_cats, p1, q, r, rule, trans, v10, v17, v3, v8, v9 uintptr + var np, plural, v20 uint32 + var old_errno, v11, v12, v14, v15 int32 + var v6 t__predefined_size_t + var _ /* map_size at bp+0 */ Tsize_t + var _ /* z at bp+4 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old_cats, old_errno, p1, plural, q, r, rem, rule, trans, v10, v11, v12, v14, v15, v17, v20, v3, v5, v6, v8, v9 + defer func() { Xrealloc(tls, name, 0) }() + loc = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + /* match gnu gettext behaviour */ + if !(msgid1 != 0) { + goto notrans + } + if uint32(category) >= uint32(LC_ALL) { + goto notrans + } + if !(domainname != 0) { + domainname = X__gettextdomain(tls) + } + domlen = Xstrnlen(tls, domainname, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if domlen > uint32(NAME_MAX) { + goto notrans + } + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(q+8) != 0 { + break + } + goto _1 + _1: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + if !(q != 0) { + goto notrans + } + lm = *(*uintptr)(unsafe.Pointer(loc + uintptr(category)*4)) + if !!(lm != 0) { + goto _2 + } + goto notrans +notrans: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if n == uint32(1) { + v3 = msgid1 + } else { + v3 = msgid2 + } + return v3 +_2: + ; + p1 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + for { + if !(p1 != 0) { + break + } + if (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding == q && (*Tmsgcat)(unsafe.Pointer(p1)).Flm == lm && (*Tmsgcat)(unsafe.Pointer(p1)).Fcat == category { + break + } + goto _4 + _4: + ; + p1 = (*Tmsgcat)(unsafe.Pointer(p1)).Fnext + } + if !(p1 != 0) { + dirname = (*Tbinding)(unsafe.Pointer(q)).Fdirname + locname = lm + 8 + catname = uintptr(unsafe.Pointer(&_catnames)) + uintptr(category)*12 + dirlen = uint32((*Tbinding)(unsafe.Pointer(q)).Fdirlen) + loclen = Xstrlen(tls, locname) + catlen = uint32(_catlens[category]) + /* Logically split @mod suffix from locale name. */ + modname = Xmemchr(tls, locname, int32('@'), loclen) + if !(modname != 0) { + modname = locname + uintptr(loclen) + } + v5 = loclen - uint32(int32(modname)-int32(locname)) + modlen = v5 + alt_modlen = v5 + loclen = uint32(int32(modname) - int32(locname)) + /* Drop .charset identifier; it is not used. */ + csp = Xmemchr(tls, locname, int32('.'), loclen) + if csp != 0 { + loclen = uint32(int32(csp) - int32(locname)) + } + v6 = dirlen + uint32(1) + loclen + modlen + uint32(1) + catlen + uint32(1) + domlen + uint32(3) + uint32(1) + name = Xrealloc(tls, name, v6) + for { + Xsnprintf(tls, name, v6, __ccgo_ts+359, VaList(bp+16, dirname, int32(loclen), locname, int32(alt_modlen), modname, catname, domainname)) + v8 = X__map_file(tls, name, bp) + map1 = v8 + if v8 != 0 { + break + } + /* Try dropping @mod, _YY, then both. */ + if alt_modlen != 0 { + alt_modlen = uint32(0) + } else { + v9 = Xmemchr(tls, locname, int32('_'), loclen) + locp = v9 + if v9 != 0 { + loclen = uint32(int32(locp) - int32(locname)) + alt_modlen = modlen + } else { + break + } + } + goto _7 + _7: + } + if !(map1 != 0) { + goto notrans + } + p1 = Xcalloc(tls, uint32(32), uint32(1)) + if !(p1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + goto notrans + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fcat = category + (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding = q + (*Tmsgcat)(unsafe.Pointer(p1)).Flm = lm + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1 = map1 + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp)) + rule = __ccgo_ts + 381 + np = uint32(2) + r = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, __ccgo_ts) + for r != 0 && Xstrncmp(tls, r, __ccgo_ts+387, uint32(13)) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 4)) = Xstrchr(tls, r, int32('\n')) + if *(*uintptr)(unsafe.Pointer(bp + 4)) != 0 { + v10 = *(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(1) + } else { + v10 = uintptr(0) + } + r = v10 + } + if r != 0 { + r += uintptr(13) + for { + v11 = int32(*(*int8)(unsafe.Pointer(r))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + if !(v12 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+401, uint32(9)) != 0) { + np = Xstrtoul(tls, r+uintptr(9), bp+4, int32(10)) + r = *(*uintptr)(unsafe.Pointer(bp + 4)) + } + for *(*int8)(unsafe.Pointer(r)) != 0 && int32(*(*int8)(unsafe.Pointer(r))) != int32(';') { + r++ + } + if *(*int8)(unsafe.Pointer(r)) != 0 { + r++ + for { + v14 = int32(*(*int8)(unsafe.Pointer(r))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + if !(v15 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+411, uint32(7)) != 0) { + rule = r + uintptr(7) + } + } + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals = int32(np) + (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule = rule + for { + old_cats = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + (*Tmsgcat)(unsafe.Pointer(p1)).Fnext = old_cats + goto _19 + _19: + ; + v17 = uintptr(_a_cas(tls, uintptr(unsafe.Pointer(&_cats)), int32(old_cats), int32(p1))) + goto _18 + _18: + ; + if !(v17 != old_cats) { + break + } + } + } + trans = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, msgid1) + if !(trans != 0) { + goto notrans + } + /* Non-plural-processing gettext forms pass a null pointer as + * msgid2 to request that dcngettext suppress plural processing. */ + if msgid2 != 0 && (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals != 0 { + plural = X__pleval(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule, n) + if plural > uint32((*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals) { + goto notrans + } + for { + v20 = plural + plural-- + if !(v20 != 0) { + break + } + rem = (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size - uint32(int32(trans)-int32((*Tmsgcat)(unsafe.Pointer(p1)).Fmap1)) + l = Xstrnlen(tls, trans, rem) + if l+uint32(1) >= rem { + goto notrans + } + trans += uintptr(l + uint32(1)) + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return trans +} + +var _cats uintptr + +func Xdcgettext(tls *TLS, domainname uintptr, msgid uintptr, category int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v category=%v, (%v:)", tls, domainname, msgid, category, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint32(1), category) +} + +func Xdngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, domainname, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid1, msgid2, n, int32(LC_MESSAGES)) +} + +func Xdgettext(tls *TLS, domainname uintptr, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v, (%v:)", tls, domainname, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint32(1), int32(LC_MESSAGES)) +} + +func X__duplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var new1 Tlocale_t + _ = new1 + new1 = Xmalloc(tls, uint32(24)) + if !(new1 != 0) { + return uintptr(0) + } + if old == uintptr(-Int32FromInt32(1)) { + old = uintptr(unsafe.Pointer(&X__libc)) + 32 + } + *(*t__locale_struct)(unsafe.Pointer(new1)) = *(*t__locale_struct)(unsafe.Pointer(old)) + return new1 +} + +func Xduplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__duplocale(tls, old) +} + +func Xfreelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + if X__loc_is_allocated(tls, l) != 0 { + Xfree(tls, l) + } +} + +func X__freelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + Xfreelocale(tls, l) +} + +const BIG5 = 224 +const EUC_JP = 208 +const EUC_KR = 232 +const GB18030 = 216 +const GB2312 = 218 +const GBK = 217 +const ISO2022_JP = 210 +const SHIFT_JIS = 209 +const UCS2 = 204 +const UCS2BE = 196 +const UCS2LE = 197 +const US_ASCII = 199 +const UTF_16 = 202 +const UTF_16BE = 194 +const UTF_16LE = 193 +const UTF_32 = 203 +const UTF_32BE = 192 +const UTF_32LE = 195 +const UTF_8 = 200 +const WCHAR_T = 198 +const mbrtowc_utf8 = 0 +const wctomb_utf8 = 0 + +type Ticonv_t = uintptr + +/* Definitions of charmaps. Each charmap consists of: + * 1. Empty-string-terminated list of null-terminated aliases. + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ + +var _charmaps = [4907]uint8{'u', 't', 'f', '8', 0, 'c', 'h', 'a', 'r', 0, 0, 200, 'w', 'c', 'h', 'a', 'r', 't', 0, 0, 198, 'u', 'c', 's', '2', 'b', 'e', 0, 0, 196, 'u', 'c', 's', '2', 'l', 'e', 0, 0, 197, 'u', 't', 'f', '1', '6', 'b', 'e', 0, 0, 194, 'u', 't', 'f', '1', '6', 'l', 'e', 0, 0, 193, 'u', 'c', 's', '4', 'b', 'e', 0, 'u', 't', 'f', '3', '2', 'b', 'e', 0, 0, 192, 'u', 'c', 's', '4', 'l', 'e', 0, 'u', 't', 'f', '3', '2', 'l', 'e', 0, 0, 195, 'a', 's', 'c', 'i', 'i', 0, 'u', 's', 'a', 's', 'c', 'i', 'i', 0, 'i', 's', 'o', '6', '4', '6', 0, 'i', 's', 'o', '6', '4', '6', 'u', 's', 0, 0, 199, 'u', 't', 'f', '1', '6', 0, 0, 202, 'u', 'c', 's', '4', 0, 'u', 't', 'f', '3', '2', 0, 0, 203, 'u', 'c', 's', '2', 0, 0, 204, 'e', 'u', 'c', 'j', 'p', 0, 0, 208, 's', 'h', 'i', 'f', 't', 'j', 'i', 's', 0, 's', 'j', 'i', 's', 0, 'c', 'p', '9', '3', '2', 0, 0, 209, 'i', 's', 'o', '2', '0', '2', '2', 'j', 'p', 0, 0, 210, 'g', 'b', '1', '8', '0', '3', '0', 0, 0, 216, 'g', 'b', 'k', 0, 'c', 'p', '9', '3', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '9', '3', '6', 0, 0, 217, 'g', 'b', '2', '3', '1', '2', 0, 0, 218, 'b', 'i', 'g', '5', 0, 'b', 'i', 'g', 'f', 'i', 'v', 'e', 0, 'c', 'p', '9', '5', '0', 0, 'b', 'i', 'g', '5', 'h', 'k', 's', 'c', 's', 0, 0, 224, 'e', 'u', 'c', 'k', 'r', 0, 'k', 's', 'c', '5', '6', '0', '1', 0, 'k', 's', 'x', '1', '0', '0', '1', 0, 'c', 'p', '9', '4', '9', 0, 0, 232, 'i', 's', 'o', '8', '8', '5', '9', '1', 0, 'l', 'a', 't', 'i', 'n', '1', 0, 0, '@', 'i', 's', 'o', '8', '8', '5', '9', '2', 0, 0, '(', 160, 16, 244, 'W', 'N', 164, 220, 244, 212, ')', 168, 'T', '5', 'U', 'V', 'n', 181, '"', 23, '\\', 176, 20, 20, 152, 'N', 180, 224, 4, 149, '_', 184, 'X', 'E', 149, 'V', 'o', 13, '6', 'W', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '3', 0, 0, '(', 160, 144, 244, 215, '(', 164, 0, ' ', 210, ')', 168, 176, '4', 21, 'G', '.', 181, 2, 0, '\\', 176, 148, '$', 203, ',', 180, 212, '2', 210, '-', 184, 180, 'D', 'U', 'G', '/', 245, 2, '@', '\\', 192, 4, '#', 12, 0, 196, '(', 132, 208, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 0, 'D', '#', 205, '4', 212, 'x', 'd', 205, '5', 26, 'e', 163, 205, '6', 220, 132, 21, 213, '7', 224, 132, '#', 14, 0, 228, ',', 148, 208, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 0, 196, '#', 207, '<', 244, '|', 'd', 207, '=', 27, 229, 163, 207, '>', 252, 136, '%', 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '4', 0, 0, '(', 160, 16, '$', 211, 'R', 164, 152, 'T', 211, ')', 168, 'T', '%', 17, 'H', '[', 181, '"', 215, '+', 176, 20, 20, 24, 'S', 180, 156, 'd', 147, '_', 184, 'X', '5', 'Q', 'H', '\\', 5, '5', 151, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 12, 'J', 16, 245, '4', 20, 'L', 212, 'T', 'c', 205, '5', 216, 156, 165, 205, '6', 220, 't', 245, 213, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 'N', 'J', 17, 249, 'D', 'T', 'L', 244, 212, 'c', 207, '=', 248, 160, 165, 207, '>', 252, 'x', 5, 22, '`', 'i', 's', 'o', '8', '8', '5', '9', '5', 0, 0, '(', 160, 'D', '\'', 221, 't', 212, 'U', 'g', 221, 'u', 216, 'e', 167, 221, 'v', 220, 181, 210, 157, 'w', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, '&', 127, 8, 'b', 136, '"', 142, 'H', 'b', 137, '&', 158, 136, 'b', 138, '*', 158, 178, '"', 139, 'i', 's', 'o', '8', '8', '5', '9', '6', 0, 0, '(', 160, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'b', 182, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 152, 0, 0, 0, 0, 153, 0, 148, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, 158, '|', 246, 233, '\'', 0, 0, 0, 0, 0, 0, 127, 2, 26, 168, 160, 131, 18, 'Z', 168, 161, 135, '"', 154, 168, 162, 139, '2', 218, 168, 163, 143, 'B', 26, ')', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '7', 0, 0, '(', 160, 'L', 'L', 241, '(', '$', 151, 'l', 202, ')', 168, 164, 146, 216, '*', 172, 180, 2, '@', 196, 176, 196, '"', 203, ',', 138, '-', 198, 216, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'i', 's', 'o', '8', '8', '5', '9', '8', 0, 0, '(', 160, 0, ' ', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 196, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'i', 's', 'o', '8', '8', '5', '9', '9', 0, 0, '4', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '0', 0, 0, '(', 160, 16, '$', 17, 'H', '(', 153, 4, 211, ')', '5', 'A', 'T', 213, 'V', 'r', 181, 242, 'U', 'P', 176, 20, '4', 'Q', 'H', ')', 157, 20, 211, '-', '6', 'E', 'd', 21, 'W', 's', 'E', 12, 150, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 204, '3', 208, 244, '4', 212, '4', 212, 'T', 'c', 'M', 'W', 216, 156, 165, 205, '6', 220, 't', 227, 205, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 206, ';', 240, 248, 'D', 212, '<', 244, 212, 'c', 143, 'W', 248, 160, 165, 207, '>', 252, 244, 227, 143, 'L', 'i', 's', 'o', '8', '8', '5', '9', '1', '1', 0, 't', 'i', 's', '6', '2', '0', 0, 0, '(', 160, 'x', 250, ')', 168, 161, 138, ':', '*', 169, 165, 154, 'z', '*', 170, 169, 170, 186, '*', 171, 173, 186, 250, '*', 172, 177, 202, ':', '+', 173, 181, 218, 'z', '+', 174, 185, 234, 186, '+', 175, 189, 250, 250, '+', 176, 193, 10, ';', ',', 177, 197, 26, '{', ',', 178, 201, '*', 187, ',', 179, 205, ':', 251, ',', 180, 209, 'J', ';', '-', 181, 213, 'Z', '{', '-', 0, 0, 0, 0, 0, 182, 217, 'j', 187, '-', 183, 221, 'z', 251, '-', 184, 225, 138, ';', '.', 185, 229, 154, '{', '.', 186, 233, 170, 187, '.', 187, 237, 186, 251, '.', 188, 241, 202, ';', '/', 189, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '1', '3', 0, 0, '(', 160, '\\', ',', 202, '(', 164, '`', 'l', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 22, 215, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, 197, 'i', 's', 'o', '8', '8', '5', '9', '1', '4', 0, 0, '(', 160, 212, 'k', 239, '(', 10, '-', 't', 239, ')', 3, 167, 'R', '0', 190, 9, 183, 226, 'J', '[', 249, 234, 235, 209, 'G', 251, 242, 'k', 'K', 191, 4, 251, 'k', 240, 191, 10, 31, 140, '0', 192, 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 'i', 'E', '#', 205, '4', 212, 'T', 'c', 'M', 192, 216, 'd', 163, 205, '6', 220, 't', 179, 214, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 'j', 197, '#', 207, '<', 244, 212, 'c', 143, 192, 248, 228, 163, 207, '>', 252, 244, 195, 214, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '5', 0, 'l', 'a', 't', 'i', 'n', '9', 0, 0, ')', '$', 151, 'R', 213, ')', 'V', 165, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 'r', 213, 'b', 203, '-', 's', 229, 162, 203, '.', 'G', '!', 213, 214, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '6', 0, 0, '(', 160, 16, 'T', 'P', 'N', '$', 'c', '\\', 213, ')', 'V', 165, 146, 215, '*', 'n', 181, 242, 22, '\\', 176, 196, 194, 144, 'N', 'r', ']', 'l', 203, '-', 's', '5', 164, 215, '.', 'G', '!', 213, 'V', '\\', 192, 4, '#', 140, '@', 196, 24, 'd', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 16, 237, '$', 205, '4', 212, 20, 'e', 205, 'S', 'e', 'e', 163, 205, '6', 220, 'X', 180, 215, '7', 224, 132, '#', 206, '@', 228, 28, 'd', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 17, 241, '$', 207, '<', 244, 24, 'e', 15, 'T', 'f', 229, 163, 207, '>', 252, '\\', 196, 215, '?', 'c', 'p', '1', '2', '5', '0', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '0', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', '\\', 149, 199, 'O', 'e', '%', 151, '[', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 'l', 213, 199, 'P', 'i', '5', 215, '[', 160, 248, 245, 'W', 'N', 164, 16, 'd', 202, ')', 168, 164, '2', 213, '*', 172, 180, 226, 10, '\\', 176, 196, 18, 152, 'N', 180, 212, 'b', 203, '-', 184, 20, 'D', 213, '.', '7', 13, 134, 'S', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'c', 'p', '1', '2', '5', '1', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '1', 0, 0, ' ', 210, 'M', 'W', 'q', 136, 24, 's', 156, 177, 198, '$', 'w', 156, 157, 199, 218, 'q', 183, 157, 'w', ' ', 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, '|', 226, 199, '(', 170, 152, '"', 139, 160, 't', 183, '"', 'v', 164, 180, 'h', 202, ')', 209, 165, 'B', 221, '*', 172, 180, 226, 202, 'u', 176, 196, 'b', 29, 137, '.', 214, 'b', 203, '-', 31, 154, ',', 226, '.', '&', 'V', '7', 'b', 137, 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 'c', 'p', '1', '2', '5', '2', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '2', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, ' ', 23, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, '0', 'W', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'c', 'p', '1', '2', '5', '3', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '3', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 0, 0, 0, 0, 160, ',', 198, 216, '(', 164, 148, 'b', 202, ')', 168, 164, 2, 192, '*', 172, 180, 226, 'J', 196, 176, 196, '"', 203, ',', 138, 213, 'b', 203, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'c', 'p', '1', '2', '5', '4', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '4', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'c', 'p', '1', '2', '5', '5', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '5', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 0, 0, 0, 0, 0, 160, 132, '"', 202, '(', '"', 151, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 203, '/', '/', 194, 24, 163, 140, '3', 210, 'X', 163, 141, '7', 226, 8, '@', 142, ':', 238, 200, 'c', 143, '>', 254, 8, 'd', 144, ']', 'z', 249, '%', 152, 'a', 2, 0, 0, 0, 0, 0, 0, 0, 0, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'c', 'p', '1', '2', '5', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '6', 0, 0, ' ', '$', 'O', 'Z', '1', ']', 24, 's', 156, 177, 198, '}', 'u', ',', 169, 199, 'G', 'Q', 'z', 'i', 165, 153, 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 152, 158, 'l', 233, 199, 'H', '-', 204, 176, 166, 160, 136, ')', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 178, 233, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, '2', 230, '.', 188, 244, 226, 11, 153, 156, 150, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, '5', '{', 242, 217, 167, 159, 127, 2, 26, 168, 160, 224, 12, '*', 14, 161, 133, 26, 'z', 232, '9', 232, 164, 163, 206, ':', 136, '&', 234, 206, ';', 138, '.', 202, 'h', 163, 244, '8', 250, 232, '=', 144, 230, 19, 233, '>', 252, '4', 236, 'p', 167, 'c', 'p', '1', '2', '5', '7', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '7', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 160, 226, 23, '.', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 188, 18, 24, 0, 160, 0, ' ', 202, '(', 164, 0, '`', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, '`', 'c', 'p', '1', '2', '5', '8', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '8', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 140, '@', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 132, '5', 227, 204, '3', 16, 'E', 's', 216, '4', 212, 212, 'e', 205, '5', 216, 'd', 163, 205, '6', 220, 220, 'e', 216, '7', 224, 132, '#', 206, '@', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 133, 181, 227, 206, ';', 17, 197, 131, 216, '<', 244, 216, 'e', 207, '=', 248, 228, 163, 207, '>', 252, 224, '5', 242, '?', 'k', 'o', 'i', '8', 'r', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, 'A', 11, '=', '4', 209, 'E', 27, '}', '4', 210, 'I', '+', 189, '4', 211, 'M', ';', 253, 't', 't', 'P', 'G', '-', 245, 212, 'T', 'W', 'm', 245, 213, 'X', 'g', 173, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'k', 'o', 'i', '8', 'u', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, '"', 10, 'M', 'b', 137, 'E', 27, '}', '4', 210, 'I', 187, 184, '4', 211, 'M', ';', 253, 't', 't', 212, 'E', 'm', 221, 'u', 'T', 'W', 'm', 245, 213, 'X', 183, 168, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'c', 'p', '4', '3', '7', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 141, '(', 163, 148, 18, '2', ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 192, 204, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 179, '}', 'c', 153, 'p', 165, 21, 'W', 139, 'q', 168, 'm', 182, 154, 'm', '*', '#', 'w', 219, 202, '-', 199, 242, 178, 203, '1', 203, '|', 15, 203, 176, 160, '|', 'K', 202, ' ', 203, '2', '6', '(', 'c', 'p', '8', '5', '0', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 13, '>', 163, '`', 's', 13, ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 184, 194, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', 7, '#', 12, '0', 169, 'D', 253, 's', 209, 'K', 139, 'R', 138, 205, '7', 243, 188, 's', 206, '3', 247, '<', 206, '0', 'H', 11, '}', '5', 213, 'N', 251, 172, '5', ')', 240, '@', 163, 204, '2', 200, 180, 212, 140, '3', 207, 224, '\\', 's', 215, '\\', 155, 194, 204, 214, 211, '|', 'C', 141, '4', 245, 'T', 'S', 139, '?', 222, 'h', 179, 'M', '6', 253, 't', 243, 10, '-', 173, 196, '"', 177, '/', 182, 156, 'r', 15, '.', 176, 160, 'r', 'K', '.', 179, 200, '2', '6', '(', 'c', 'p', '8', '6', '6', 0, 0, ' ', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 209, '}', 'H', 157, 136, 215, 149, 216, 221, 138, 176, 160, '|', 'K', 202, '&', 147, '2', '6', '(', 'i', 'b', 'm', '1', '0', '4', '7', 0, 'c', 'p', '1', '0', '4', '7', 0, 0, 1, 156, '$', '`', 200, 31, 151, '4', 226, 200, 2, 12, '4', 224, 192, 3, 16, 'D', ' ', 193, 4, 157, 20, 130, 192, '!', 24, 'd', ' ', 201, '#', 28, 't', 224, 193, 7, 128, 4, '"', 200, ' ', 132, '(', 'p', 193, 6, 136, '$', 162, 200, '"', 140, 20, '`', 192, 1, 144, 'D', 'b', 193, '$', 148, 'T', 'b', 9, 1, 152, 'd', 162, 201, '&', 20, 'T', 224, 137, 6, ' ', 128, '"', 14, '9', 224, 132, '3', 'N', '9', 231, 196, '#', 138, 11, '<', 160, 176, 2, 31, '&', 164, 163, 206, ':', 232, 180, 227, 206, ';', 236, '|', 19, 2, 9, '*', 164, 176, 131, 23, '-', 188, ' ', 12, '1', 192, 4, '3', 'L', '1', 199, 'D', 'c', 10, 11, '%', '|', 225, 195, 15, 248, '$', 163, 204, '2', 200, '4', 227, 204, '3', 204, 128, 161, 195, 8, '@', 156, 208, 131, 8, 216, 132, '!', 198, 24, 'd', 148, 'a', 198, 25, 'h', 164, 177, 202, '.', 240, 244, 227, 'O', ',', 176, 168, 177, 6, 27, 'm', 184, 241, 6, 28, 'q', 200, 161, 138, '.', 230, 224, 'b', 12, ')', 181, 248, '1', 7, 29, 'u', 216, 'q', 7, 30, 'y', 232, 17, 202, '/', 208, 'l', 225, 141, '+', 172, 140, 'R', 202, '-', 169, 156, 'b', 11, '/', 189, 248, 210, 13, '*', 175, 't', 'A', 203, '5', '{', 4, '!', 196, 16, 'D', 20, 'a', 196, 17, 'H', '$', 209, 10, '=', 246, 200, '3', 'O', '=', '}', '(', 177, 4, 19, 'M', '8', 241, 4, 20, 'Q', 'H', 145, 203, '>', 252, 228, 163, 207, '?', '\\', 220, '3', 5, 21, 'U', 'X', 'q', 5, 22, 'Y', 'h', '!', 11, '5', 214, 'H', '3', 'M', '5', '0', 196, ' ', 195, 12, '4', 212, '`', 195, 13, '8', 228, '0', 203, '6', 220, 'd', 163, 205, '\''} + +// C documentation +// +// /* Table of characters that appear in legacy 8-bit codepages, +// * limited to 1024 slots (10 bit indices). The first 256 entries +// * are elided since those characters are obviously all included. */ +var _legacy_chars = [612]uint16{ + 0: uint16(256), + 1: uint16(257), + 2: uint16(258), + 3: uint16(259), + 4: uint16(260), + 5: uint16(261), + 6: uint16(262), + 7: uint16(263), + 8: uint16(264), + 9: uint16(265), + 10: uint16(266), + 11: uint16(267), + 12: uint16(268), + 13: uint16(269), + 14: uint16(270), + 15: uint16(271), + 16: uint16(272), + 17: uint16(273), + 18: uint16(274), + 19: uint16(275), + 20: uint16(278), + 21: uint16(279), + 22: uint16(280), + 23: uint16(281), + 24: uint16(282), + 25: uint16(283), + 26: uint16(284), + 27: uint16(285), + 28: uint16(286), + 29: uint16(287), + 30: uint16(288), + 31: uint16(289), + 32: uint16(290), + 33: uint16(291), + 34: uint16(292), + 35: uint16(293), + 36: uint16(294), + 37: uint16(295), + 38: uint16(296), + 39: uint16(297), + 40: uint16(298), + 41: uint16(299), + 42: uint16(302), + 43: uint16(303), + 44: uint16(304), + 45: uint16(305), + 46: uint16(308), + 47: uint16(309), + 48: uint16(310), + 49: uint16(311), + 50: uint16(312), + 51: uint16(313), + 52: uint16(314), + 53: uint16(315), + 54: uint16(316), + 55: uint16(317), + 56: uint16(318), + 57: uint16(321), + 58: uint16(322), + 59: uint16(323), + 60: uint16(324), + 61: uint16(325), + 62: uint16(326), + 63: uint16(327), + 64: uint16(328), + 65: uint16(330), + 66: uint16(331), + 67: uint16(332), + 68: uint16(333), + 69: uint16(336), + 70: uint16(337), + 71: uint16(338), + 72: uint16(339), + 73: uint16(340), + 74: uint16(341), + 75: uint16(342), + 76: uint16(343), + 77: uint16(344), + 78: uint16(345), + 79: uint16(346), + 80: uint16(347), + 81: uint16(348), + 82: uint16(349), + 83: uint16(350), + 84: uint16(351), + 85: uint16(352), + 86: uint16(353), + 87: uint16(354), + 88: uint16(355), + 89: uint16(356), + 90: uint16(357), + 91: uint16(358), + 92: uint16(359), + 93: uint16(360), + 94: uint16(361), + 95: uint16(362), + 96: uint16(363), + 97: uint16(364), + 98: uint16(365), + 99: uint16(366), + 100: uint16(367), + 101: uint16(368), + 102: uint16(369), + 103: uint16(370), + 104: uint16(371), + 105: uint16(372), + 106: uint16(373), + 107: uint16(374), + 108: uint16(375), + 109: uint16(376), + 110: uint16(377), + 111: uint16(378), + 112: uint16(379), + 113: uint16(380), + 114: uint16(381), + 115: uint16(382), + 116: uint16(402), + 117: uint16(416), + 118: uint16(417), + 119: uint16(431), + 120: uint16(432), + 121: uint16(536), + 122: uint16(537), + 123: uint16(538), + 124: uint16(539), + 125: uint16(710), + 126: uint16(711), + 127: uint16(728), + 128: uint16(729), + 129: uint16(731), + 130: uint16(732), + 131: uint16(733), + 132: uint16(768), + 133: uint16(769), + 134: uint16(771), + 135: uint16(777), + 136: uint16(803), + 137: uint16(890), + 138: uint16(900), + 139: uint16(901), + 140: uint16(902), + 141: uint16(904), + 142: uint16(905), + 143: uint16(906), + 144: uint16(908), + 145: uint16(910), + 146: uint16(911), + 147: uint16(912), + 148: uint16(913), + 149: uint16(914), + 150: uint16(915), + 151: uint16(916), + 152: uint16(917), + 153: uint16(918), + 154: uint16(919), + 155: uint16(920), + 156: uint16(921), + 157: uint16(922), + 158: uint16(923), + 159: uint16(924), + 160: uint16(925), + 161: uint16(926), + 162: uint16(927), + 163: uint16(928), + 164: uint16(929), + 165: uint16(931), + 166: uint16(932), + 167: uint16(933), + 168: uint16(934), + 169: uint16(935), + 170: uint16(936), + 171: uint16(937), + 172: uint16(938), + 173: uint16(939), + 174: uint16(940), + 175: uint16(941), + 176: uint16(942), + 177: uint16(943), + 178: uint16(944), + 179: uint16(945), + 180: uint16(946), + 181: uint16(947), + 182: uint16(948), + 183: uint16(949), + 184: uint16(950), + 185: uint16(951), + 186: uint16(952), + 187: uint16(953), + 188: uint16(954), + 189: uint16(955), + 190: uint16(956), + 191: uint16(957), + 192: uint16(958), + 193: uint16(959), + 194: uint16(960), + 195: uint16(961), + 196: uint16(962), + 197: uint16(963), + 198: uint16(964), + 199: uint16(965), + 200: uint16(966), + 201: uint16(967), + 202: uint16(968), + 203: uint16(969), + 204: uint16(970), + 205: uint16(971), + 206: uint16(972), + 207: uint16(973), + 208: uint16(974), + 209: uint16(1025), + 210: uint16(1026), + 211: uint16(1027), + 212: uint16(1028), + 213: uint16(1029), + 214: uint16(1030), + 215: uint16(1031), + 216: uint16(1032), + 217: uint16(1033), + 218: uint16(1034), + 219: uint16(1035), + 220: uint16(1036), + 221: uint16(1038), + 222: uint16(1039), + 223: uint16(1040), + 224: uint16(1041), + 225: uint16(1042), + 226: uint16(1043), + 227: uint16(1044), + 228: uint16(1045), + 229: uint16(1046), + 230: uint16(1047), + 231: uint16(1048), + 232: uint16(1049), + 233: uint16(1050), + 234: uint16(1051), + 235: uint16(1052), + 236: uint16(1053), + 237: uint16(1054), + 238: uint16(1055), + 239: uint16(1056), + 240: uint16(1057), + 241: uint16(1058), + 242: uint16(1059), + 243: uint16(1060), + 244: uint16(1061), + 245: uint16(1062), + 246: uint16(1063), + 247: uint16(1064), + 248: uint16(1065), + 249: uint16(1066), + 250: uint16(1067), + 251: uint16(1068), + 252: uint16(1069), + 253: uint16(1070), + 254: uint16(1071), + 255: uint16(1072), + 256: uint16(1073), + 257: uint16(1074), + 258: uint16(1075), + 259: uint16(1076), + 260: uint16(1077), + 261: uint16(1078), + 262: uint16(1079), + 263: uint16(1080), + 264: uint16(1081), + 265: uint16(1082), + 266: uint16(1083), + 267: uint16(1084), + 268: uint16(1085), + 269: uint16(1086), + 270: uint16(1087), + 271: uint16(1088), + 272: uint16(1089), + 273: uint16(1090), + 274: uint16(1091), + 275: uint16(1092), + 276: uint16(1093), + 277: uint16(1094), + 278: uint16(1095), + 279: uint16(1096), + 280: uint16(1097), + 281: uint16(1098), + 282: uint16(1099), + 283: uint16(1100), + 284: uint16(1101), + 285: uint16(1102), + 286: uint16(1103), + 287: uint16(1105), + 288: uint16(1106), + 289: uint16(1107), + 290: uint16(1108), + 291: uint16(1109), + 292: uint16(1110), + 293: uint16(1111), + 294: uint16(1112), + 295: uint16(1113), + 296: uint16(1114), + 297: uint16(1115), + 298: uint16(1116), + 299: uint16(1118), + 300: uint16(1119), + 301: uint16(1168), + 302: uint16(1169), + 303: uint16(1456), + 304: uint16(1457), + 305: uint16(1458), + 306: uint16(1459), + 307: uint16(1460), + 308: uint16(1461), + 309: uint16(1462), + 310: uint16(1463), + 311: uint16(1464), + 312: uint16(1465), + 313: uint16(1467), + 314: uint16(1468), + 315: uint16(1469), + 316: uint16(1470), + 317: uint16(1471), + 318: uint16(1472), + 319: uint16(1473), + 320: uint16(1474), + 321: uint16(1475), + 322: uint16(1488), + 323: uint16(1489), + 324: uint16(1490), + 325: uint16(1491), + 326: uint16(1492), + 327: uint16(1493), + 328: uint16(1494), + 329: uint16(1495), + 330: uint16(1496), + 331: uint16(1497), + 332: uint16(1498), + 333: uint16(1499), + 334: uint16(1500), + 335: uint16(1501), + 336: uint16(1502), + 337: uint16(1503), + 338: uint16(1504), + 339: uint16(1505), + 340: uint16(1506), + 341: uint16(1507), + 342: uint16(1508), + 343: uint16(1509), + 344: uint16(1510), + 345: uint16(1511), + 346: uint16(1512), + 347: uint16(1513), + 348: uint16(1514), + 349: uint16(1520), + 350: uint16(1521), + 351: uint16(1522), + 352: uint16(1523), + 353: uint16(1524), + 354: uint16(1548), + 355: uint16(1563), + 356: uint16(1567), + 357: uint16(1569), + 358: uint16(1570), + 359: uint16(1571), + 360: uint16(1572), + 361: uint16(1573), + 362: uint16(1574), + 363: uint16(1575), + 364: uint16(1576), + 365: uint16(1577), + 366: uint16(1578), + 367: uint16(1579), + 368: uint16(1580), + 369: uint16(1581), + 370: uint16(1582), + 371: uint16(1583), + 372: uint16(1584), + 373: uint16(1585), + 374: uint16(1586), + 375: uint16(1587), + 376: uint16(1588), + 377: uint16(1589), + 378: uint16(1590), + 379: uint16(1591), + 380: uint16(1592), + 381: uint16(1593), + 382: uint16(1594), + 383: uint16(1600), + 384: uint16(1601), + 385: uint16(1602), + 386: uint16(1603), + 387: uint16(1604), + 388: uint16(1605), + 389: uint16(1606), + 390: uint16(1607), + 391: uint16(1608), + 392: uint16(1609), + 393: uint16(1610), + 394: uint16(1611), + 395: uint16(1612), + 396: uint16(1613), + 397: uint16(1614), + 398: uint16(1615), + 399: uint16(1616), + 400: uint16(1617), + 401: uint16(1618), + 402: uint16(1657), + 403: uint16(1662), + 404: uint16(1670), + 405: uint16(1672), + 406: uint16(1681), + 407: uint16(1688), + 408: uint16(1705), + 409: uint16(1711), + 410: uint16(1722), + 411: uint16(1726), + 412: uint16(1729), + 413: uint16(1746), + 414: uint16(3585), + 415: uint16(3586), + 416: uint16(3587), + 417: uint16(3588), + 418: uint16(3589), + 419: uint16(3590), + 420: uint16(3591), + 421: uint16(3592), + 422: uint16(3593), + 423: uint16(3594), + 424: uint16(3595), + 425: uint16(3596), + 426: uint16(3597), + 427: uint16(3598), + 428: uint16(3599), + 429: uint16(3600), + 430: uint16(3601), + 431: uint16(3602), + 432: uint16(3603), + 433: uint16(3604), + 434: uint16(3605), + 435: uint16(3606), + 436: uint16(3607), + 437: uint16(3608), + 438: uint16(3609), + 439: uint16(3610), + 440: uint16(3611), + 441: uint16(3612), + 442: uint16(3613), + 443: uint16(3614), + 444: uint16(3615), + 445: uint16(3616), + 446: uint16(3617), + 447: uint16(3618), + 448: uint16(3619), + 449: uint16(3620), + 450: uint16(3621), + 451: uint16(3622), + 452: uint16(3623), + 453: uint16(3624), + 454: uint16(3625), + 455: uint16(3626), + 456: uint16(3627), + 457: uint16(3628), + 458: uint16(3629), + 459: uint16(3630), + 460: uint16(3631), + 461: uint16(3632), + 462: uint16(3633), + 463: uint16(3634), + 464: uint16(3635), + 465: uint16(3636), + 466: uint16(3637), + 467: uint16(3638), + 468: uint16(3639), + 469: uint16(3640), + 470: uint16(3641), + 471: uint16(3642), + 472: uint16(3647), + 473: uint16(3648), + 474: uint16(3649), + 475: uint16(3650), + 476: uint16(3651), + 477: uint16(3652), + 478: uint16(3653), + 479: uint16(3654), + 480: uint16(3655), + 481: uint16(3656), + 482: uint16(3657), + 483: uint16(3658), + 484: uint16(3659), + 485: uint16(3660), + 486: uint16(3661), + 487: uint16(3662), + 488: uint16(3663), + 489: uint16(3664), + 490: uint16(3665), + 491: uint16(3666), + 492: uint16(3667), + 493: uint16(3668), + 494: uint16(3669), + 495: uint16(3670), + 496: uint16(3671), + 497: uint16(3672), + 498: uint16(3673), + 499: uint16(3674), + 500: uint16(3675), + 501: uint16(7682), + 502: uint16(7683), + 503: uint16(7690), + 504: uint16(7691), + 505: uint16(7710), + 506: uint16(7711), + 507: uint16(7744), + 508: uint16(7745), + 509: uint16(7766), + 510: uint16(7767), + 511: uint16(7776), + 512: uint16(7777), + 513: uint16(7786), + 514: uint16(7787), + 515: uint16(7808), + 516: uint16(7809), + 517: uint16(7810), + 518: uint16(7811), + 519: uint16(7812), + 520: uint16(7813), + 521: uint16(7922), + 522: uint16(7923), + 523: uint16(8204), + 524: uint16(8205), + 525: uint16(8206), + 526: uint16(8207), + 527: uint16(8211), + 528: uint16(8212), + 529: uint16(8213), + 530: uint16(8215), + 531: uint16(8216), + 532: uint16(8217), + 533: uint16(8218), + 534: uint16(8220), + 535: uint16(8221), + 536: uint16(8222), + 537: uint16(8224), + 538: uint16(8225), + 539: uint16(8226), + 540: uint16(8230), + 541: uint16(8240), + 542: uint16(8249), + 543: uint16(8250), + 544: uint16(8319), + 545: uint16(8359), + 546: uint16(8362), + 547: uint16(8363), + 548: uint16(8364), + 549: uint16(8367), + 550: uint16(8470), + 551: uint16(8482), + 552: uint16(8729), + 553: uint16(8730), + 554: uint16(8734), + 555: uint16(8745), + 556: uint16(8776), + 557: uint16(8801), + 558: uint16(8804), + 559: uint16(8805), + 560: uint16(8976), + 561: uint16(8992), + 562: uint16(8993), + 563: uint16(9472), + 564: uint16(9474), + 565: uint16(9484), + 566: uint16(9488), + 567: uint16(9492), + 568: uint16(9496), + 569: uint16(9500), + 570: uint16(9508), + 571: uint16(9516), + 572: uint16(9524), + 573: uint16(9532), + 574: uint16(9552), + 575: uint16(9553), + 576: uint16(9554), + 577: uint16(9555), + 578: uint16(9556), + 579: uint16(9557), + 580: uint16(9558), + 581: uint16(9559), + 582: uint16(9560), + 583: uint16(9561), + 584: uint16(9562), + 585: uint16(9563), + 586: uint16(9564), + 587: uint16(9565), + 588: uint16(9566), + 589: uint16(9567), + 590: uint16(9568), + 591: uint16(9569), + 592: uint16(9570), + 593: uint16(9571), + 594: uint16(9572), + 595: uint16(9573), + 596: uint16(9574), + 597: uint16(9575), + 598: uint16(9576), + 599: uint16(9577), + 600: uint16(9578), + 601: uint16(9579), + 602: uint16(9580), + 603: uint16(9600), + 604: uint16(9604), + 605: uint16(9608), + 606: uint16(9612), + 607: uint16(9616), + 608: uint16(9617), + 609: uint16(9618), + 610: uint16(9619), + 611: uint16(9632), +} + +var _jis0208 = [84][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(65292), + 4: uint16(65294), + 5: uint16(12539), + 6: uint16(65306), + 7: uint16(65307), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(12443), + 11: uint16(12444), + 12: uint16(180), + 13: uint16(65344), + 14: uint16(168), + 15: uint16(65342), + 16: uint16(65507), + 17: uint16(65343), + 18: uint16(12541), + 19: uint16(12542), + 20: uint16(12445), + 21: uint16(12446), + 22: uint16(12291), + 23: uint16(20189), + 24: uint16(12293), + 25: uint16(12294), + 26: uint16(12295), + 27: uint16(12540), + 28: uint16(8213), + 29: uint16(8208), + 30: uint16(65295), + 31: uint16(92), + 32: uint16(12316), + 33: uint16(8214), + 34: uint16(65372), + 35: uint16(8230), + 36: uint16(8229), + 37: uint16(8216), + 38: uint16(8217), + 39: uint16(8220), + 40: uint16(8221), + 41: uint16(65288), + 42: uint16(65289), + 43: uint16(12308), + 44: uint16(12309), + 45: uint16(65339), + 46: uint16(65341), + 47: uint16(65371), + 48: uint16(65373), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(12298), + 52: uint16(12299), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(12302), + 56: uint16(12303), + 57: uint16(12304), + 58: uint16(12305), + 59: uint16(65291), + 60: uint16(8722), + 61: uint16(177), + 62: uint16(215), + 63: uint16(247), + 64: uint16(65309), + 65: uint16(8800), + 66: uint16(65308), + 67: uint16(65310), + 68: uint16(8806), + 69: uint16(8807), + 70: uint16(8734), + 71: uint16(8756), + 72: uint16(9794), + 73: uint16(9792), + 74: uint16(176), + 75: uint16(8242), + 76: uint16(8243), + 77: uint16(8451), + 78: uint16(65509), + 79: uint16(65284), + 80: uint16(162), + 81: uint16(163), + 82: uint16(65285), + 83: uint16(65283), + 84: uint16(65286), + 85: uint16(65290), + 86: uint16(65312), + 87: uint16(167), + 88: uint16(9734), + 89: uint16(9733), + 90: uint16(9675), + 91: uint16(9679), + 92: uint16(9678), + 93: uint16(9671), + }, + 1: { + 0: uint16(9670), + 1: uint16(9633), + 2: uint16(9632), + 3: uint16(9651), + 4: uint16(9650), + 5: uint16(9661), + 6: uint16(9660), + 7: uint16(8251), + 8: uint16(12306), + 9: uint16(8594), + 10: uint16(8592), + 11: uint16(8593), + 12: uint16(8595), + 13: uint16(12307), + 25: uint16(8712), + 26: uint16(8715), + 27: uint16(8838), + 28: uint16(8839), + 29: uint16(8834), + 30: uint16(8835), + 31: uint16(8746), + 32: uint16(8745), + 41: uint16(8743), + 42: uint16(8744), + 43: uint16(172), + 44: uint16(8658), + 45: uint16(8660), + 46: uint16(8704), + 47: uint16(8707), + 59: uint16(8736), + 60: uint16(8869), + 61: uint16(8978), + 62: uint16(8706), + 63: uint16(8711), + 64: uint16(8801), + 65: uint16(8786), + 66: uint16(8810), + 67: uint16(8811), + 68: uint16(8730), + 69: uint16(8765), + 70: uint16(8733), + 71: uint16(8757), + 72: uint16(8747), + 73: uint16(8748), + 81: uint16(8491), + 82: uint16(8240), + 83: uint16(9839), + 84: uint16(9837), + 85: uint16(9834), + 86: uint16(8224), + 87: uint16(8225), + 88: uint16(182), + 93: uint16(9711), + }, + 2: { + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + }, + 3: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 4: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 5: { + 0: uint16(913), + 1: uint16(914), + 2: uint16(915), + 3: uint16(916), + 4: uint16(917), + 5: uint16(918), + 6: uint16(919), + 7: uint16(920), + 8: uint16(921), + 9: uint16(922), + 10: uint16(923), + 11: uint16(924), + 12: uint16(925), + 13: uint16(926), + 14: uint16(927), + 15: uint16(928), + 16: uint16(929), + 17: uint16(931), + 18: uint16(932), + 19: uint16(933), + 20: uint16(934), + 21: uint16(935), + 22: uint16(936), + 23: uint16(937), + 32: uint16(945), + 33: uint16(946), + 34: uint16(947), + 35: uint16(948), + 36: uint16(949), + 37: uint16(950), + 38: uint16(951), + 39: uint16(952), + 40: uint16(953), + 41: uint16(954), + 42: uint16(955), + 43: uint16(956), + 44: uint16(957), + 45: uint16(958), + 46: uint16(959), + 47: uint16(960), + 48: uint16(961), + 49: uint16(963), + 50: uint16(964), + 51: uint16(965), + 52: uint16(966), + 53: uint16(967), + 54: uint16(968), + 55: uint16(969), + }, + 6: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 7: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + }, + 8: {}, + 9: {}, + 10: {}, + 11: {}, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(20124), + 1: uint16(21782), + 2: uint16(23043), + 3: uint16(38463), + 4: uint16(21696), + 5: uint16(24859), + 6: uint16(25384), + 7: uint16(23030), + 8: uint16(36898), + 9: uint16(33909), + 10: uint16(33564), + 11: uint16(31312), + 12: uint16(24746), + 13: uint16(25569), + 14: uint16(28197), + 15: uint16(26093), + 16: uint16(33894), + 17: uint16(33446), + 18: uint16(39925), + 19: uint16(26771), + 20: uint16(22311), + 21: uint16(26017), + 22: uint16(25201), + 23: uint16(23451), + 24: uint16(22992), + 25: uint16(34427), + 26: uint16(39156), + 27: uint16(32098), + 28: uint16(32190), + 29: uint16(39822), + 30: uint16(25110), + 31: uint16(31903), + 32: uint16(34999), + 33: uint16(23433), + 34: uint16(24245), + 35: uint16(25353), + 36: uint16(26263), + 37: uint16(26696), + 38: uint16(38343), + 39: uint16(38797), + 40: uint16(26447), + 41: uint16(20197), + 42: uint16(20234), + 43: uint16(20301), + 44: uint16(20381), + 45: uint16(20553), + 46: uint16(22258), + 47: uint16(22839), + 48: uint16(22996), + 49: uint16(23041), + 50: uint16(23561), + 51: uint16(24799), + 52: uint16(24847), + 53: uint16(24944), + 54: uint16(26131), + 55: uint16(26885), + 56: uint16(28858), + 57: uint16(30031), + 58: uint16(30064), + 59: uint16(31227), + 60: uint16(32173), + 61: uint16(32239), + 62: uint16(32963), + 63: uint16(33806), + 64: uint16(34915), + 65: uint16(35586), + 66: uint16(36949), + 67: uint16(36986), + 68: uint16(21307), + 69: uint16(20117), + 70: uint16(20133), + 71: uint16(22495), + 72: uint16(32946), + 73: uint16(37057), + 74: uint16(30959), + 75: uint16(19968), + 76: uint16(22769), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(31282), + 80: uint16(33576), + 81: uint16(33419), + 82: uint16(39983), + 83: uint16(20801), + 84: uint16(21360), + 85: uint16(21693), + 86: uint16(21729), + 87: uint16(22240), + 88: uint16(23035), + 89: uint16(24341), + 90: uint16(39154), + 91: uint16(28139), + 92: uint16(32996), + 93: uint16(34093), + }, + 16: { + 0: uint16(38498), + 1: uint16(38512), + 2: uint16(38560), + 3: uint16(38907), + 4: uint16(21515), + 5: uint16(21491), + 6: uint16(23431), + 7: uint16(28879), + 8: uint16(32701), + 9: uint16(36802), + 10: uint16(38632), + 11: uint16(21359), + 12: uint16(40284), + 13: uint16(31418), + 14: uint16(19985), + 15: uint16(30867), + 16: uint16(33276), + 17: uint16(28198), + 18: uint16(22040), + 19: uint16(21764), + 20: uint16(27421), + 21: uint16(34074), + 22: uint16(39995), + 23: uint16(23013), + 24: uint16(21417), + 25: uint16(28006), + 26: uint16(29916), + 27: uint16(38287), + 28: uint16(22082), + 29: uint16(20113), + 30: uint16(36939), + 31: uint16(38642), + 32: uint16(33615), + 33: uint16(39180), + 34: uint16(21473), + 35: uint16(21942), + 36: uint16(23344), + 37: uint16(24433), + 38: uint16(26144), + 39: uint16(26355), + 40: uint16(26628), + 41: uint16(27704), + 42: uint16(27891), + 43: uint16(27945), + 44: uint16(29787), + 45: uint16(30408), + 46: uint16(31310), + 47: uint16(38964), + 48: uint16(33521), + 49: uint16(34907), + 50: uint16(35424), + 51: uint16(37613), + 52: uint16(28082), + 53: uint16(30123), + 54: uint16(30410), + 55: uint16(39365), + 56: uint16(24742), + 57: uint16(35585), + 58: uint16(36234), + 59: uint16(38322), + 60: uint16(27022), + 61: uint16(21421), + 62: uint16(20870), + 63: uint16(22290), + 64: uint16(22576), + 65: uint16(22852), + 66: uint16(23476), + 67: uint16(24310), + 68: uint16(24616), + 69: uint16(25513), + 70: uint16(25588), + 71: uint16(27839), + 72: uint16(28436), + 73: uint16(28814), + 74: uint16(28948), + 75: uint16(29017), + 76: uint16(29141), + 77: uint16(29503), + 78: uint16(32257), + 79: uint16(33398), + 80: uint16(33489), + 81: uint16(34199), + 82: uint16(36960), + 83: uint16(37467), + 84: uint16(40219), + 85: uint16(22633), + 86: uint16(26044), + 87: uint16(27738), + 88: uint16(29989), + 89: uint16(20985), + 90: uint16(22830), + 91: uint16(22885), + 92: uint16(24448), + 93: uint16(24540), + }, + 17: { + 0: uint16(25276), + 1: uint16(26106), + 2: uint16(27178), + 3: uint16(27431), + 4: uint16(27572), + 5: uint16(29579), + 6: uint16(32705), + 7: uint16(35158), + 8: uint16(40236), + 9: uint16(40206), + 10: uint16(40644), + 11: uint16(23713), + 12: uint16(27798), + 13: uint16(33659), + 14: uint16(20740), + 15: uint16(23627), + 16: uint16(25014), + 17: uint16(33222), + 18: uint16(26742), + 19: uint16(29281), + 20: uint16(20057), + 21: uint16(20474), + 22: uint16(21368), + 23: uint16(24681), + 24: uint16(28201), + 25: uint16(31311), + 26: uint16(38899), + 27: uint16(19979), + 28: uint16(21270), + 29: uint16(20206), + 30: uint16(20309), + 31: uint16(20285), + 32: uint16(20385), + 33: uint16(20339), + 34: uint16(21152), + 35: uint16(21487), + 36: uint16(22025), + 37: uint16(22799), + 38: uint16(23233), + 39: uint16(23478), + 40: uint16(23521), + 41: uint16(31185), + 42: uint16(26247), + 43: uint16(26524), + 44: uint16(26550), + 45: uint16(27468), + 46: uint16(27827), + 47: uint16(28779), + 48: uint16(29634), + 49: uint16(31117), + 50: uint16(31166), + 51: uint16(31292), + 52: uint16(31623), + 53: uint16(33457), + 54: uint16(33499), + 55: uint16(33540), + 56: uint16(33655), + 57: uint16(33775), + 58: uint16(33747), + 59: uint16(34662), + 60: uint16(35506), + 61: uint16(22057), + 62: uint16(36008), + 63: uint16(36838), + 64: uint16(36942), + 65: uint16(38686), + 66: uint16(34442), + 67: uint16(20420), + 68: uint16(23784), + 69: uint16(25105), + 70: uint16(29273), + 71: uint16(30011), + 72: uint16(33253), + 73: uint16(33469), + 74: uint16(34558), + 75: uint16(36032), + 76: uint16(38597), + 77: uint16(39187), + 78: uint16(39381), + 79: uint16(20171), + 80: uint16(20250), + 81: uint16(35299), + 82: uint16(22238), + 83: uint16(22602), + 84: uint16(22730), + 85: uint16(24315), + 86: uint16(24555), + 87: uint16(24618), + 88: uint16(24724), + 89: uint16(24674), + 90: uint16(25040), + 91: uint16(25106), + 92: uint16(25296), + 93: uint16(25913), + }, + 18: { + 0: uint16(39745), + 1: uint16(26214), + 2: uint16(26800), + 3: uint16(28023), + 4: uint16(28784), + 5: uint16(30028), + 6: uint16(30342), + 7: uint16(32117), + 8: uint16(33445), + 9: uint16(34809), + 10: uint16(38283), + 11: uint16(38542), + 12: uint16(35997), + 13: uint16(20977), + 14: uint16(21182), + 15: uint16(22806), + 16: uint16(21683), + 17: uint16(23475), + 18: uint16(23830), + 19: uint16(24936), + 20: uint16(27010), + 21: uint16(28079), + 22: uint16(30861), + 23: uint16(33995), + 24: uint16(34903), + 25: uint16(35442), + 26: uint16(37799), + 27: uint16(39608), + 28: uint16(28012), + 29: uint16(39336), + 30: uint16(34521), + 31: uint16(22435), + 32: uint16(26623), + 33: uint16(34510), + 34: uint16(37390), + 35: uint16(21123), + 36: uint16(22151), + 37: uint16(21508), + 38: uint16(24275), + 39: uint16(25313), + 40: uint16(25785), + 41: uint16(26684), + 42: uint16(26680), + 43: uint16(27579), + 44: uint16(29554), + 45: uint16(30906), + 46: uint16(31339), + 47: uint16(35226), + 48: uint16(35282), + 49: uint16(36203), + 50: uint16(36611), + 51: uint16(37101), + 52: uint16(38307), + 53: uint16(38548), + 54: uint16(38761), + 55: uint16(23398), + 56: uint16(23731), + 57: uint16(27005), + 58: uint16(38989), + 59: uint16(38990), + 60: uint16(25499), + 61: uint16(31520), + 62: uint16(27179), + 63: uint16(27263), + 64: uint16(26806), + 65: uint16(39949), + 66: uint16(28511), + 67: uint16(21106), + 68: uint16(21917), + 69: uint16(24688), + 70: uint16(25324), + 71: uint16(27963), + 72: uint16(28167), + 73: uint16(28369), + 74: uint16(33883), + 75: uint16(35088), + 76: uint16(36676), + 77: uint16(19988), + 78: uint16(39993), + 79: uint16(21494), + 80: uint16(26907), + 81: uint16(27194), + 82: uint16(38788), + 83: uint16(26666), + 84: uint16(20828), + 85: uint16(31427), + 86: uint16(33970), + 87: uint16(37340), + 88: uint16(37772), + 89: uint16(22107), + 90: uint16(40232), + 91: uint16(26658), + 92: uint16(33541), + 93: uint16(33841), + }, + 19: { + 0: uint16(31909), + 1: uint16(21000), + 2: uint16(33477), + 3: uint16(29926), + 4: uint16(20094), + 5: uint16(20355), + 6: uint16(20896), + 7: uint16(23506), + 8: uint16(21002), + 9: uint16(21208), + 10: uint16(21223), + 11: uint16(24059), + 12: uint16(21914), + 13: uint16(22570), + 14: uint16(23014), + 15: uint16(23436), + 16: uint16(23448), + 17: uint16(23515), + 18: uint16(24178), + 19: uint16(24185), + 20: uint16(24739), + 21: uint16(24863), + 22: uint16(24931), + 23: uint16(25022), + 24: uint16(25563), + 25: uint16(25954), + 26: uint16(26577), + 27: uint16(26707), + 28: uint16(26874), + 29: uint16(27454), + 30: uint16(27475), + 31: uint16(27735), + 32: uint16(28450), + 33: uint16(28567), + 34: uint16(28485), + 35: uint16(29872), + 36: uint16(29976), + 37: uint16(30435), + 38: uint16(30475), + 39: uint16(31487), + 40: uint16(31649), + 41: uint16(31777), + 42: uint16(32233), + 43: uint16(32566), + 44: uint16(32752), + 45: uint16(32925), + 46: uint16(33382), + 47: uint16(33694), + 48: uint16(35251), + 49: uint16(35532), + 50: uint16(36011), + 51: uint16(36996), + 52: uint16(37969), + 53: uint16(38291), + 54: uint16(38289), + 55: uint16(38306), + 56: uint16(38501), + 57: uint16(38867), + 58: uint16(39208), + 59: uint16(33304), + 60: uint16(20024), + 61: uint16(21547), + 62: uint16(23736), + 63: uint16(24012), + 64: uint16(29609), + 65: uint16(30284), + 66: uint16(30524), + 67: uint16(23721), + 68: uint16(32747), + 69: uint16(36107), + 70: uint16(38593), + 71: uint16(38929), + 72: uint16(38996), + 73: uint16(39000), + 74: uint16(20225), + 75: uint16(20238), + 76: uint16(21361), + 77: uint16(21916), + 78: uint16(22120), + 79: uint16(22522), + 80: uint16(22855), + 81: uint16(23305), + 82: uint16(23492), + 83: uint16(23696), + 84: uint16(24076), + 85: uint16(24190), + 86: uint16(24524), + 87: uint16(25582), + 88: uint16(26426), + 89: uint16(26071), + 90: uint16(26082), + 91: uint16(26399), + 92: uint16(26827), + 93: uint16(26820), + }, + 20: { + 0: uint16(27231), + 1: uint16(24112), + 2: uint16(27589), + 3: uint16(27671), + 4: uint16(27773), + 5: uint16(30079), + 6: uint16(31048), + 7: uint16(23395), + 8: uint16(31232), + 9: uint16(32000), + 10: uint16(24509), + 11: uint16(35215), + 12: uint16(35352), + 13: uint16(36020), + 14: uint16(36215), + 15: uint16(36556), + 16: uint16(36637), + 17: uint16(39138), + 18: uint16(39438), + 19: uint16(39740), + 20: uint16(20096), + 21: uint16(20605), + 22: uint16(20736), + 23: uint16(22931), + 24: uint16(23452), + 25: uint16(25135), + 26: uint16(25216), + 27: uint16(25836), + 28: uint16(27450), + 29: uint16(29344), + 30: uint16(30097), + 31: uint16(31047), + 32: uint16(32681), + 33: uint16(34811), + 34: uint16(35516), + 35: uint16(35696), + 36: uint16(25516), + 37: uint16(33738), + 38: uint16(38816), + 39: uint16(21513), + 40: uint16(21507), + 41: uint16(21931), + 42: uint16(26708), + 43: uint16(27224), + 44: uint16(35440), + 45: uint16(30759), + 46: uint16(26485), + 47: uint16(40653), + 48: uint16(21364), + 49: uint16(23458), + 50: uint16(33050), + 51: uint16(34384), + 52: uint16(36870), + 53: uint16(19992), + 54: uint16(20037), + 55: uint16(20167), + 56: uint16(20241), + 57: uint16(21450), + 58: uint16(21560), + 59: uint16(23470), + 60: uint16(24339), + 61: uint16(24613), + 62: uint16(25937), + 63: uint16(26429), + 64: uint16(27714), + 65: uint16(27762), + 66: uint16(27875), + 67: uint16(28792), + 68: uint16(29699), + 69: uint16(31350), + 70: uint16(31406), + 71: uint16(31496), + 72: uint16(32026), + 73: uint16(31998), + 74: uint16(32102), + 75: uint16(26087), + 76: uint16(29275), + 77: uint16(21435), + 78: uint16(23621), + 79: uint16(24040), + 80: uint16(25298), + 81: uint16(25312), + 82: uint16(25369), + 83: uint16(28192), + 84: uint16(34394), + 85: uint16(35377), + 86: uint16(36317), + 87: uint16(37624), + 88: uint16(28417), + 89: uint16(31142), + 90: uint16(39770), + 91: uint16(20136), + 92: uint16(20139), + 93: uint16(20140), + }, + 21: { + 0: uint16(20379), + 1: uint16(20384), + 2: uint16(20689), + 3: uint16(20807), + 4: uint16(31478), + 5: uint16(20849), + 6: uint16(20982), + 7: uint16(21332), + 8: uint16(21281), + 9: uint16(21375), + 10: uint16(21483), + 11: uint16(21932), + 12: uint16(22659), + 13: uint16(23777), + 14: uint16(24375), + 15: uint16(24394), + 16: uint16(24623), + 17: uint16(24656), + 18: uint16(24685), + 19: uint16(25375), + 20: uint16(25945), + 21: uint16(27211), + 22: uint16(27841), + 23: uint16(29378), + 24: uint16(29421), + 25: uint16(30703), + 26: uint16(33016), + 27: uint16(33029), + 28: uint16(33288), + 29: uint16(34126), + 30: uint16(37111), + 31: uint16(37857), + 32: uint16(38911), + 33: uint16(39255), + 34: uint16(39514), + 35: uint16(20208), + 36: uint16(20957), + 37: uint16(23597), + 38: uint16(26241), + 39: uint16(26989), + 40: uint16(23616), + 41: uint16(26354), + 42: uint16(26997), + 43: uint16(29577), + 44: uint16(26704), + 45: uint16(31873), + 46: uint16(20677), + 47: uint16(21220), + 48: uint16(22343), + 49: uint16(24062), + 50: uint16(37670), + 51: uint16(26020), + 52: uint16(27427), + 53: uint16(27453), + 54: uint16(29748), + 55: uint16(31105), + 56: uint16(31165), + 57: uint16(31563), + 58: uint16(32202), + 59: uint16(33465), + 60: uint16(33740), + 61: uint16(34943), + 62: uint16(35167), + 63: uint16(35641), + 64: uint16(36817), + 65: uint16(37329), + 66: uint16(21535), + 67: uint16(37504), + 68: uint16(20061), + 69: uint16(20534), + 70: uint16(21477), + 71: uint16(21306), + 72: uint16(29399), + 73: uint16(29590), + 74: uint16(30697), + 75: uint16(33510), + 76: uint16(36527), + 77: uint16(39366), + 78: uint16(39368), + 79: uint16(39378), + 80: uint16(20855), + 81: uint16(24858), + 82: uint16(34398), + 83: uint16(21936), + 84: uint16(31354), + 85: uint16(20598), + 86: uint16(23507), + 87: uint16(36935), + 88: uint16(38533), + 89: uint16(20018), + 90: uint16(27355), + 91: uint16(37351), + 92: uint16(23633), + 93: uint16(23624), + }, + 22: { + 0: uint16(25496), + 1: uint16(31391), + 2: uint16(27795), + 3: uint16(38772), + 4: uint16(36705), + 5: uint16(31402), + 6: uint16(29066), + 7: uint16(38536), + 8: uint16(31874), + 9: uint16(26647), + 10: uint16(32368), + 11: uint16(26705), + 12: uint16(37740), + 13: uint16(21234), + 14: uint16(21531), + 15: uint16(34219), + 16: uint16(35347), + 17: uint16(32676), + 18: uint16(36557), + 19: uint16(37089), + 20: uint16(21350), + 21: uint16(34952), + 22: uint16(31041), + 23: uint16(20418), + 24: uint16(20670), + 25: uint16(21009), + 26: uint16(20804), + 27: uint16(21843), + 28: uint16(22317), + 29: uint16(29674), + 30: uint16(22411), + 31: uint16(22865), + 32: uint16(24418), + 33: uint16(24452), + 34: uint16(24693), + 35: uint16(24950), + 36: uint16(24935), + 37: uint16(25001), + 38: uint16(25522), + 39: uint16(25658), + 40: uint16(25964), + 41: uint16(26223), + 42: uint16(26690), + 43: uint16(28179), + 44: uint16(30054), + 45: uint16(31293), + 46: uint16(31995), + 47: uint16(32076), + 48: uint16(32153), + 49: uint16(32331), + 50: uint16(32619), + 51: uint16(33550), + 52: uint16(33610), + 53: uint16(34509), + 54: uint16(35336), + 55: uint16(35427), + 56: uint16(35686), + 57: uint16(36605), + 58: uint16(38938), + 59: uint16(40335), + 60: uint16(33464), + 61: uint16(36814), + 62: uint16(39912), + 63: uint16(21127), + 64: uint16(25119), + 65: uint16(25731), + 66: uint16(28608), + 67: uint16(38553), + 68: uint16(26689), + 69: uint16(20625), + 70: uint16(27424), + 71: uint16(27770), + 72: uint16(28500), + 73: uint16(31348), + 74: uint16(32080), + 75: uint16(34880), + 76: uint16(35363), + 77: uint16(26376), + 78: uint16(20214), + 79: uint16(20537), + 80: uint16(20518), + 81: uint16(20581), + 82: uint16(20860), + 83: uint16(21048), + 84: uint16(21091), + 85: uint16(21927), + 86: uint16(22287), + 87: uint16(22533), + 88: uint16(23244), + 89: uint16(24314), + 90: uint16(25010), + 91: uint16(25080), + 92: uint16(25331), + 93: uint16(25458), + }, + 23: { + 0: uint16(26908), + 1: uint16(27177), + 2: uint16(29309), + 3: uint16(29356), + 4: uint16(29486), + 5: uint16(30740), + 6: uint16(30831), + 7: uint16(32121), + 8: uint16(30476), + 9: uint16(32937), + 10: uint16(35211), + 11: uint16(35609), + 12: uint16(36066), + 13: uint16(36562), + 14: uint16(36963), + 15: uint16(37749), + 16: uint16(38522), + 17: uint16(38997), + 18: uint16(39443), + 19: uint16(40568), + 20: uint16(20803), + 21: uint16(21407), + 22: uint16(21427), + 23: uint16(24187), + 24: uint16(24358), + 25: uint16(28187), + 26: uint16(28304), + 27: uint16(29572), + 28: uint16(29694), + 29: uint16(32067), + 30: uint16(33335), + 31: uint16(35328), + 32: uint16(35578), + 33: uint16(38480), + 34: uint16(20046), + 35: uint16(20491), + 36: uint16(21476), + 37: uint16(21628), + 38: uint16(22266), + 39: uint16(22993), + 40: uint16(23396), + 41: uint16(24049), + 42: uint16(24235), + 43: uint16(24359), + 44: uint16(25144), + 45: uint16(25925), + 46: uint16(26543), + 47: uint16(28246), + 48: uint16(29392), + 49: uint16(31946), + 50: uint16(34996), + 51: uint16(32929), + 52: uint16(32993), + 53: uint16(33776), + 54: uint16(34382), + 55: uint16(35463), + 56: uint16(36328), + 57: uint16(37431), + 58: uint16(38599), + 59: uint16(39015), + 60: uint16(40723), + 61: uint16(20116), + 62: uint16(20114), + 63: uint16(20237), + 64: uint16(21320), + 65: uint16(21577), + 66: uint16(21566), + 67: uint16(23087), + 68: uint16(24460), + 69: uint16(24481), + 70: uint16(24735), + 71: uint16(26791), + 72: uint16(27278), + 73: uint16(29786), + 74: uint16(30849), + 75: uint16(35486), + 76: uint16(35492), + 77: uint16(35703), + 78: uint16(37264), + 79: uint16(20062), + 80: uint16(39881), + 81: uint16(20132), + 82: uint16(20348), + 83: uint16(20399), + 84: uint16(20505), + 85: uint16(20502), + 86: uint16(20809), + 87: uint16(20844), + 88: uint16(21151), + 89: uint16(21177), + 90: uint16(21246), + 91: uint16(21402), + 92: uint16(21475), + 93: uint16(21521), + }, + 24: { + 0: uint16(21518), + 1: uint16(21897), + 2: uint16(22353), + 3: uint16(22434), + 4: uint16(22909), + 5: uint16(23380), + 6: uint16(23389), + 7: uint16(23439), + 8: uint16(24037), + 9: uint16(24039), + 10: uint16(24055), + 11: uint16(24184), + 12: uint16(24195), + 13: uint16(24218), + 14: uint16(24247), + 15: uint16(24344), + 16: uint16(24658), + 17: uint16(24908), + 18: uint16(25239), + 19: uint16(25304), + 20: uint16(25511), + 21: uint16(25915), + 22: uint16(26114), + 23: uint16(26179), + 24: uint16(26356), + 25: uint16(26477), + 26: uint16(26657), + 27: uint16(26775), + 28: uint16(27083), + 29: uint16(27743), + 30: uint16(27946), + 31: uint16(28009), + 32: uint16(28207), + 33: uint16(28317), + 34: uint16(30002), + 35: uint16(30343), + 36: uint16(30828), + 37: uint16(31295), + 38: uint16(31968), + 39: uint16(32005), + 40: uint16(32024), + 41: uint16(32094), + 42: uint16(32177), + 43: uint16(32789), + 44: uint16(32771), + 45: uint16(32943), + 46: uint16(32945), + 47: uint16(33108), + 48: uint16(33167), + 49: uint16(33322), + 50: uint16(33618), + 51: uint16(34892), + 52: uint16(34913), + 53: uint16(35611), + 54: uint16(36002), + 55: uint16(36092), + 56: uint16(37066), + 57: uint16(37237), + 58: uint16(37489), + 59: uint16(30783), + 60: uint16(37628), + 61: uint16(38308), + 62: uint16(38477), + 63: uint16(38917), + 64: uint16(39321), + 65: uint16(39640), + 66: uint16(40251), + 67: uint16(21083), + 68: uint16(21163), + 69: uint16(21495), + 70: uint16(21512), + 71: uint16(22741), + 72: uint16(25335), + 73: uint16(28640), + 74: uint16(35946), + 75: uint16(36703), + 76: uint16(40633), + 77: uint16(20811), + 78: uint16(21051), + 79: uint16(21578), + 80: uint16(22269), + 81: uint16(31296), + 82: uint16(37239), + 83: uint16(40288), + 84: uint16(40658), + 85: uint16(29508), + 86: uint16(28425), + 87: uint16(33136), + 88: uint16(29969), + 89: uint16(24573), + 90: uint16(24794), + 91: uint16(39592), + 92: uint16(29403), + 93: uint16(36796), + }, + 25: { + 0: uint16(27492), + 1: uint16(38915), + 2: uint16(20170), + 3: uint16(22256), + 4: uint16(22372), + 5: uint16(22718), + 6: uint16(23130), + 7: uint16(24680), + 8: uint16(25031), + 9: uint16(26127), + 10: uint16(26118), + 11: uint16(26681), + 12: uint16(26801), + 13: uint16(28151), + 14: uint16(30165), + 15: uint16(32058), + 16: uint16(33390), + 17: uint16(39746), + 18: uint16(20123), + 19: uint16(20304), + 20: uint16(21449), + 21: uint16(21766), + 22: uint16(23919), + 23: uint16(24038), + 24: uint16(24046), + 25: uint16(26619), + 26: uint16(27801), + 27: uint16(29811), + 28: uint16(30722), + 29: uint16(35408), + 30: uint16(37782), + 31: uint16(35039), + 32: uint16(22352), + 33: uint16(24231), + 34: uint16(25387), + 35: uint16(20661), + 36: uint16(20652), + 37: uint16(20877), + 38: uint16(26368), + 39: uint16(21705), + 40: uint16(22622), + 41: uint16(22971), + 42: uint16(23472), + 43: uint16(24425), + 44: uint16(25165), + 45: uint16(25505), + 46: uint16(26685), + 47: uint16(27507), + 48: uint16(28168), + 49: uint16(28797), + 50: uint16(37319), + 51: uint16(29312), + 52: uint16(30741), + 53: uint16(30758), + 54: uint16(31085), + 55: uint16(25998), + 56: uint16(32048), + 57: uint16(33756), + 58: uint16(35009), + 59: uint16(36617), + 60: uint16(38555), + 61: uint16(21092), + 62: uint16(22312), + 63: uint16(26448), + 64: uint16(32618), + 65: uint16(36001), + 66: uint16(20916), + 67: uint16(22338), + 68: uint16(38442), + 69: uint16(22586), + 70: uint16(27018), + 71: uint16(32948), + 72: uint16(21682), + 73: uint16(23822), + 74: uint16(22524), + 75: uint16(30869), + 76: uint16(40442), + 77: uint16(20316), + 78: uint16(21066), + 79: uint16(21643), + 80: uint16(25662), + 81: uint16(26152), + 82: uint16(26388), + 83: uint16(26613), + 84: uint16(31364), + 85: uint16(31574), + 86: uint16(32034), + 87: uint16(37679), + 88: uint16(26716), + 89: uint16(39853), + 90: uint16(31545), + 91: uint16(21273), + 92: uint16(20874), + 93: uint16(21047), + }, + 26: { + 0: uint16(23519), + 1: uint16(25334), + 2: uint16(25774), + 3: uint16(25830), + 4: uint16(26413), + 5: uint16(27578), + 6: uint16(34217), + 7: uint16(38609), + 8: uint16(30352), + 9: uint16(39894), + 10: uint16(25420), + 11: uint16(37638), + 12: uint16(39851), + 13: uint16(30399), + 14: uint16(26194), + 15: uint16(19977), + 16: uint16(20632), + 17: uint16(21442), + 18: uint16(23665), + 19: uint16(24808), + 20: uint16(25746), + 21: uint16(25955), + 22: uint16(26719), + 23: uint16(29158), + 24: uint16(29642), + 25: uint16(29987), + 26: uint16(31639), + 27: uint16(32386), + 28: uint16(34453), + 29: uint16(35715), + 30: uint16(36059), + 31: uint16(37240), + 32: uint16(39184), + 33: uint16(26028), + 34: uint16(26283), + 35: uint16(27531), + 36: uint16(20181), + 37: uint16(20180), + 38: uint16(20282), + 39: uint16(20351), + 40: uint16(21050), + 41: uint16(21496), + 42: uint16(21490), + 43: uint16(21987), + 44: uint16(22235), + 45: uint16(22763), + 46: uint16(22987), + 47: uint16(22985), + 48: uint16(23039), + 49: uint16(23376), + 50: uint16(23629), + 51: uint16(24066), + 52: uint16(24107), + 53: uint16(24535), + 54: uint16(24605), + 55: uint16(25351), + 56: uint16(25903), + 57: uint16(23388), + 58: uint16(26031), + 59: uint16(26045), + 60: uint16(26088), + 61: uint16(26525), + 62: uint16(27490), + 63: uint16(27515), + 64: uint16(27663), + 65: uint16(29509), + 66: uint16(31049), + 67: uint16(31169), + 68: uint16(31992), + 69: uint16(32025), + 70: uint16(32043), + 71: uint16(32930), + 72: uint16(33026), + 73: uint16(33267), + 74: uint16(35222), + 75: uint16(35422), + 76: uint16(35433), + 77: uint16(35430), + 78: uint16(35468), + 79: uint16(35566), + 80: uint16(36039), + 81: uint16(36060), + 82: uint16(38604), + 83: uint16(39164), + 84: uint16(27503), + 85: uint16(20107), + 86: uint16(20284), + 87: uint16(20365), + 88: uint16(20816), + 89: uint16(23383), + 90: uint16(23546), + 91: uint16(24904), + 92: uint16(25345), + 93: uint16(26178), + }, + 27: { + 0: uint16(27425), + 1: uint16(28363), + 2: uint16(27835), + 3: uint16(29246), + 4: uint16(29885), + 5: uint16(30164), + 6: uint16(30913), + 7: uint16(31034), + 8: uint16(32780), + 9: uint16(32819), + 10: uint16(33258), + 11: uint16(33940), + 12: uint16(36766), + 13: uint16(27728), + 14: uint16(40575), + 15: uint16(24335), + 16: uint16(35672), + 17: uint16(40235), + 18: uint16(31482), + 19: uint16(36600), + 20: uint16(23437), + 21: uint16(38635), + 22: uint16(19971), + 23: uint16(21489), + 24: uint16(22519), + 25: uint16(22833), + 26: uint16(23241), + 27: uint16(23460), + 28: uint16(24713), + 29: uint16(28287), + 30: uint16(28422), + 31: uint16(30142), + 32: uint16(36074), + 33: uint16(23455), + 34: uint16(34048), + 35: uint16(31712), + 36: uint16(20594), + 37: uint16(26612), + 38: uint16(33437), + 39: uint16(23649), + 40: uint16(34122), + 41: uint16(32286), + 42: uint16(33294), + 43: uint16(20889), + 44: uint16(23556), + 45: uint16(25448), + 46: uint16(36198), + 47: uint16(26012), + 48: uint16(29038), + 49: uint16(31038), + 50: uint16(32023), + 51: uint16(32773), + 52: uint16(35613), + 53: uint16(36554), + 54: uint16(36974), + 55: uint16(34503), + 56: uint16(37034), + 57: uint16(20511), + 58: uint16(21242), + 59: uint16(23610), + 60: uint16(26451), + 61: uint16(28796), + 62: uint16(29237), + 63: uint16(37196), + 64: uint16(37320), + 65: uint16(37675), + 66: uint16(33509), + 67: uint16(23490), + 68: uint16(24369), + 69: uint16(24825), + 70: uint16(20027), + 71: uint16(21462), + 72: uint16(23432), + 73: uint16(25163), + 74: uint16(26417), + 75: uint16(27530), + 76: uint16(29417), + 77: uint16(29664), + 78: uint16(31278), + 79: uint16(33131), + 80: uint16(36259), + 81: uint16(37202), + 82: uint16(39318), + 83: uint16(20754), + 84: uint16(21463), + 85: uint16(21610), + 86: uint16(23551), + 87: uint16(25480), + 88: uint16(27193), + 89: uint16(32172), + 90: uint16(38656), + 91: uint16(22234), + 92: uint16(21454), + 93: uint16(21608), + }, + 28: { + 0: uint16(23447), + 1: uint16(23601), + 2: uint16(24030), + 3: uint16(20462), + 4: uint16(24833), + 5: uint16(25342), + 6: uint16(27954), + 7: uint16(31168), + 8: uint16(31179), + 9: uint16(32066), + 10: uint16(32333), + 11: uint16(32722), + 12: uint16(33261), + 13: uint16(33311), + 14: uint16(33936), + 15: uint16(34886), + 16: uint16(35186), + 17: uint16(35728), + 18: uint16(36468), + 19: uint16(36655), + 20: uint16(36913), + 21: uint16(37195), + 22: uint16(37228), + 23: uint16(38598), + 24: uint16(37276), + 25: uint16(20160), + 26: uint16(20303), + 27: uint16(20805), + 28: uint16(21313), + 29: uint16(24467), + 30: uint16(25102), + 31: uint16(26580), + 32: uint16(27713), + 33: uint16(28171), + 34: uint16(29539), + 35: uint16(32294), + 36: uint16(37325), + 37: uint16(37507), + 38: uint16(21460), + 39: uint16(22809), + 40: uint16(23487), + 41: uint16(28113), + 42: uint16(31069), + 43: uint16(32302), + 44: uint16(31899), + 45: uint16(22654), + 46: uint16(29087), + 47: uint16(20986), + 48: uint16(34899), + 49: uint16(36848), + 50: uint16(20426), + 51: uint16(23803), + 52: uint16(26149), + 53: uint16(30636), + 54: uint16(31459), + 55: uint16(33308), + 56: uint16(39423), + 57: uint16(20934), + 58: uint16(24490), + 59: uint16(26092), + 60: uint16(26991), + 61: uint16(27529), + 62: uint16(28147), + 63: uint16(28310), + 64: uint16(28516), + 65: uint16(30462), + 66: uint16(32020), + 67: uint16(24033), + 68: uint16(36981), + 69: uint16(37255), + 70: uint16(38918), + 71: uint16(20966), + 72: uint16(21021), + 73: uint16(25152), + 74: uint16(26257), + 75: uint16(26329), + 76: uint16(28186), + 77: uint16(24246), + 78: uint16(32210), + 79: uint16(32626), + 80: uint16(26360), + 81: uint16(34223), + 82: uint16(34295), + 83: uint16(35576), + 84: uint16(21161), + 85: uint16(21465), + 86: uint16(22899), + 87: uint16(24207), + 88: uint16(24464), + 89: uint16(24661), + 90: uint16(37604), + 91: uint16(38500), + 92: uint16(20663), + 93: uint16(20767), + }, + 29: { + 0: uint16(21213), + 1: uint16(21280), + 2: uint16(21319), + 3: uint16(21484), + 4: uint16(21736), + 5: uint16(21830), + 6: uint16(21809), + 7: uint16(22039), + 8: uint16(22888), + 9: uint16(22974), + 10: uint16(23100), + 11: uint16(23477), + 12: uint16(23558), + 13: uint16(23567), + 14: uint16(23569), + 15: uint16(23578), + 16: uint16(24196), + 17: uint16(24202), + 18: uint16(24288), + 19: uint16(24432), + 20: uint16(25215), + 21: uint16(25220), + 22: uint16(25307), + 23: uint16(25484), + 24: uint16(25463), + 25: uint16(26119), + 26: uint16(26124), + 27: uint16(26157), + 28: uint16(26230), + 29: uint16(26494), + 30: uint16(26786), + 31: uint16(27167), + 32: uint16(27189), + 33: uint16(27836), + 34: uint16(28040), + 35: uint16(28169), + 36: uint16(28248), + 37: uint16(28988), + 38: uint16(28966), + 39: uint16(29031), + 40: uint16(30151), + 41: uint16(30465), + 42: uint16(30813), + 43: uint16(30977), + 44: uint16(31077), + 45: uint16(31216), + 46: uint16(31456), + 47: uint16(31505), + 48: uint16(31911), + 49: uint16(32057), + 50: uint16(32918), + 51: uint16(33750), + 52: uint16(33931), + 53: uint16(34121), + 54: uint16(34909), + 55: uint16(35059), + 56: uint16(35359), + 57: uint16(35388), + 58: uint16(35412), + 59: uint16(35443), + 60: uint16(35937), + 61: uint16(36062), + 62: uint16(37284), + 63: uint16(37478), + 64: uint16(37758), + 65: uint16(37912), + 66: uint16(38556), + 67: uint16(38808), + 68: uint16(19978), + 69: uint16(19976), + 70: uint16(19998), + 71: uint16(20055), + 72: uint16(20887), + 73: uint16(21104), + 74: uint16(22478), + 75: uint16(22580), + 76: uint16(22732), + 77: uint16(23330), + 78: uint16(24120), + 79: uint16(24773), + 80: uint16(25854), + 81: uint16(26465), + 82: uint16(26454), + 83: uint16(27972), + 84: uint16(29366), + 85: uint16(30067), + 86: uint16(31331), + 87: uint16(33976), + 88: uint16(35698), + 89: uint16(37304), + 90: uint16(37664), + 91: uint16(22065), + 92: uint16(22516), + 93: uint16(39166), + }, + 30: { + 0: uint16(25325), + 1: uint16(26893), + 2: uint16(27542), + 3: uint16(29165), + 4: uint16(32340), + 5: uint16(32887), + 6: uint16(33394), + 7: uint16(35302), + 8: uint16(39135), + 9: uint16(34645), + 10: uint16(36785), + 11: uint16(23611), + 12: uint16(20280), + 13: uint16(20449), + 14: uint16(20405), + 15: uint16(21767), + 16: uint16(23072), + 17: uint16(23517), + 18: uint16(23529), + 19: uint16(24515), + 20: uint16(24910), + 21: uint16(25391), + 22: uint16(26032), + 23: uint16(26187), + 24: uint16(26862), + 25: uint16(27035), + 26: uint16(28024), + 27: uint16(28145), + 28: uint16(30003), + 29: uint16(30137), + 30: uint16(30495), + 31: uint16(31070), + 32: uint16(31206), + 33: uint16(32051), + 34: uint16(33251), + 35: uint16(33455), + 36: uint16(34218), + 37: uint16(35242), + 38: uint16(35386), + 39: uint16(36523), + 40: uint16(36763), + 41: uint16(36914), + 42: uint16(37341), + 43: uint16(38663), + 44: uint16(20154), + 45: uint16(20161), + 46: uint16(20995), + 47: uint16(22645), + 48: uint16(22764), + 49: uint16(23563), + 50: uint16(29978), + 51: uint16(23613), + 52: uint16(33102), + 53: uint16(35338), + 54: uint16(36805), + 55: uint16(38499), + 56: uint16(38765), + 57: uint16(31525), + 58: uint16(35535), + 59: uint16(38920), + 60: uint16(37218), + 61: uint16(22259), + 62: uint16(21416), + 63: uint16(36887), + 64: uint16(21561), + 65: uint16(22402), + 66: uint16(24101), + 67: uint16(25512), + 68: uint16(27700), + 69: uint16(28810), + 70: uint16(30561), + 71: uint16(31883), + 72: uint16(32736), + 73: uint16(34928), + 74: uint16(36930), + 75: uint16(37204), + 76: uint16(37648), + 77: uint16(37656), + 78: uint16(38543), + 79: uint16(29790), + 80: uint16(39620), + 81: uint16(23815), + 82: uint16(23913), + 83: uint16(25968), + 84: uint16(26530), + 85: uint16(36264), + 86: uint16(38619), + 87: uint16(25454), + 88: uint16(26441), + 89: uint16(26905), + 90: uint16(33733), + 91: uint16(38935), + 92: uint16(38592), + 93: uint16(35070), + }, + 31: { + 0: uint16(28548), + 1: uint16(25722), + 2: uint16(23544), + 3: uint16(19990), + 4: uint16(28716), + 5: uint16(30045), + 6: uint16(26159), + 7: uint16(20932), + 8: uint16(21046), + 9: uint16(21218), + 10: uint16(22995), + 11: uint16(24449), + 12: uint16(24615), + 13: uint16(25104), + 14: uint16(25919), + 15: uint16(25972), + 16: uint16(26143), + 17: uint16(26228), + 18: uint16(26866), + 19: uint16(26646), + 20: uint16(27491), + 21: uint16(28165), + 22: uint16(29298), + 23: uint16(29983), + 24: uint16(30427), + 25: uint16(31934), + 26: uint16(32854), + 27: uint16(22768), + 28: uint16(35069), + 29: uint16(35199), + 30: uint16(35488), + 31: uint16(35475), + 32: uint16(35531), + 33: uint16(36893), + 34: uint16(37266), + 35: uint16(38738), + 36: uint16(38745), + 37: uint16(25993), + 38: uint16(31246), + 39: uint16(33030), + 40: uint16(38587), + 41: uint16(24109), + 42: uint16(24796), + 43: uint16(25114), + 44: uint16(26021), + 45: uint16(26132), + 46: uint16(26512), + 47: uint16(30707), + 48: uint16(31309), + 49: uint16(31821), + 50: uint16(32318), + 51: uint16(33034), + 52: uint16(36012), + 53: uint16(36196), + 54: uint16(36321), + 55: uint16(36447), + 56: uint16(30889), + 57: uint16(20999), + 58: uint16(25305), + 59: uint16(25509), + 60: uint16(25666), + 61: uint16(25240), + 62: uint16(35373), + 63: uint16(31363), + 64: uint16(31680), + 65: uint16(35500), + 66: uint16(38634), + 67: uint16(32118), + 68: uint16(33292), + 69: uint16(34633), + 70: uint16(20185), + 71: uint16(20808), + 72: uint16(21315), + 73: uint16(21344), + 74: uint16(23459), + 75: uint16(23554), + 76: uint16(23574), + 77: uint16(24029), + 78: uint16(25126), + 79: uint16(25159), + 80: uint16(25776), + 81: uint16(26643), + 82: uint16(26676), + 83: uint16(27849), + 84: uint16(27973), + 85: uint16(27927), + 86: uint16(26579), + 87: uint16(28508), + 88: uint16(29006), + 89: uint16(29053), + 90: uint16(26059), + 91: uint16(31359), + 92: uint16(31661), + 93: uint16(32218), + }, + 32: { + 0: uint16(32330), + 1: uint16(32680), + 2: uint16(33146), + 3: uint16(33307), + 4: uint16(33337), + 5: uint16(34214), + 6: uint16(35438), + 7: uint16(36046), + 8: uint16(36341), + 9: uint16(36984), + 10: uint16(36983), + 11: uint16(37549), + 12: uint16(37521), + 13: uint16(38275), + 14: uint16(39854), + 15: uint16(21069), + 16: uint16(21892), + 17: uint16(28472), + 18: uint16(28982), + 19: uint16(20840), + 20: uint16(31109), + 21: uint16(32341), + 22: uint16(33203), + 23: uint16(31950), + 24: uint16(22092), + 25: uint16(22609), + 26: uint16(23720), + 27: uint16(25514), + 28: uint16(26366), + 29: uint16(26365), + 30: uint16(26970), + 31: uint16(29401), + 32: uint16(30095), + 33: uint16(30094), + 34: uint16(30990), + 35: uint16(31062), + 36: uint16(31199), + 37: uint16(31895), + 38: uint16(32032), + 39: uint16(32068), + 40: uint16(34311), + 41: uint16(35380), + 42: uint16(38459), + 43: uint16(36961), + 44: uint16(40736), + 45: uint16(20711), + 46: uint16(21109), + 47: uint16(21452), + 48: uint16(21474), + 49: uint16(20489), + 50: uint16(21930), + 51: uint16(22766), + 52: uint16(22863), + 53: uint16(29245), + 54: uint16(23435), + 55: uint16(23652), + 56: uint16(21277), + 57: uint16(24803), + 58: uint16(24819), + 59: uint16(25436), + 60: uint16(25475), + 61: uint16(25407), + 62: uint16(25531), + 63: uint16(25805), + 64: uint16(26089), + 65: uint16(26361), + 66: uint16(24035), + 67: uint16(27085), + 68: uint16(27133), + 69: uint16(28437), + 70: uint16(29157), + 71: uint16(20105), + 72: uint16(30185), + 73: uint16(30456), + 74: uint16(31379), + 75: uint16(31967), + 76: uint16(32207), + 77: uint16(32156), + 78: uint16(32865), + 79: uint16(33609), + 80: uint16(33624), + 81: uint16(33900), + 82: uint16(33980), + 83: uint16(34299), + 84: uint16(35013), + 85: uint16(36208), + 86: uint16(36865), + 87: uint16(36973), + 88: uint16(37783), + 89: uint16(38684), + 90: uint16(39442), + 91: uint16(20687), + 92: uint16(22679), + 93: uint16(24974), + }, + 33: { + 0: uint16(33235), + 1: uint16(34101), + 2: uint16(36104), + 3: uint16(36896), + 4: uint16(20419), + 5: uint16(20596), + 6: uint16(21063), + 7: uint16(21363), + 8: uint16(24687), + 9: uint16(25417), + 10: uint16(26463), + 11: uint16(28204), + 12: uint16(36275), + 13: uint16(36895), + 14: uint16(20439), + 15: uint16(23646), + 16: uint16(36042), + 17: uint16(26063), + 18: uint16(32154), + 19: uint16(21330), + 20: uint16(34966), + 21: uint16(20854), + 22: uint16(25539), + 23: uint16(23384), + 24: uint16(23403), + 25: uint16(23562), + 26: uint16(25613), + 27: uint16(26449), + 28: uint16(36956), + 29: uint16(20182), + 30: uint16(22810), + 31: uint16(22826), + 32: uint16(27760), + 33: uint16(35409), + 34: uint16(21822), + 35: uint16(22549), + 36: uint16(22949), + 37: uint16(24816), + 38: uint16(25171), + 39: uint16(26561), + 40: uint16(33333), + 41: uint16(26965), + 42: uint16(38464), + 43: uint16(39364), + 44: uint16(39464), + 45: uint16(20307), + 46: uint16(22534), + 47: uint16(23550), + 48: uint16(32784), + 49: uint16(23729), + 50: uint16(24111), + 51: uint16(24453), + 52: uint16(24608), + 53: uint16(24907), + 54: uint16(25140), + 55: uint16(26367), + 56: uint16(27888), + 57: uint16(28382), + 58: uint16(32974), + 59: uint16(33151), + 60: uint16(33492), + 61: uint16(34955), + 62: uint16(36024), + 63: uint16(36864), + 64: uint16(36910), + 65: uint16(38538), + 66: uint16(40667), + 67: uint16(39899), + 68: uint16(20195), + 69: uint16(21488), + 70: uint16(22823), + 71: uint16(31532), + 72: uint16(37261), + 73: uint16(38988), + 74: uint16(40441), + 75: uint16(28381), + 76: uint16(28711), + 77: uint16(21331), + 78: uint16(21828), + 79: uint16(23429), + 80: uint16(25176), + 81: uint16(25246), + 82: uint16(25299), + 83: uint16(27810), + 84: uint16(28655), + 85: uint16(29730), + 86: uint16(35351), + 87: uint16(37944), + 88: uint16(28609), + 89: uint16(35582), + 90: uint16(33592), + 91: uint16(20967), + 92: uint16(34552), + 93: uint16(21482), + }, + 34: { + 0: uint16(21481), + 1: uint16(20294), + 2: uint16(36948), + 3: uint16(36784), + 4: uint16(22890), + 5: uint16(33073), + 6: uint16(24061), + 7: uint16(31466), + 8: uint16(36799), + 9: uint16(26842), + 10: uint16(35895), + 11: uint16(29432), + 12: uint16(40008), + 13: uint16(27197), + 14: uint16(35504), + 15: uint16(20025), + 16: uint16(21336), + 17: uint16(22022), + 18: uint16(22374), + 19: uint16(25285), + 20: uint16(25506), + 21: uint16(26086), + 22: uint16(27470), + 23: uint16(28129), + 24: uint16(28251), + 25: uint16(28845), + 26: uint16(30701), + 27: uint16(31471), + 28: uint16(31658), + 29: uint16(32187), + 30: uint16(32829), + 31: uint16(32966), + 32: uint16(34507), + 33: uint16(35477), + 34: uint16(37723), + 35: uint16(22243), + 36: uint16(22727), + 37: uint16(24382), + 38: uint16(26029), + 39: uint16(26262), + 40: uint16(27264), + 41: uint16(27573), + 42: uint16(30007), + 43: uint16(35527), + 44: uint16(20516), + 45: uint16(30693), + 46: uint16(22320), + 47: uint16(24347), + 48: uint16(24677), + 49: uint16(26234), + 50: uint16(27744), + 51: uint16(30196), + 52: uint16(31258), + 53: uint16(32622), + 54: uint16(33268), + 55: uint16(34584), + 56: uint16(36933), + 57: uint16(39347), + 58: uint16(31689), + 59: uint16(30044), + 60: uint16(31481), + 61: uint16(31569), + 62: uint16(33988), + 63: uint16(36880), + 64: uint16(31209), + 65: uint16(31378), + 66: uint16(33590), + 67: uint16(23265), + 68: uint16(30528), + 69: uint16(20013), + 70: uint16(20210), + 71: uint16(23449), + 72: uint16(24544), + 73: uint16(25277), + 74: uint16(26172), + 75: uint16(26609), + 76: uint16(27880), + 77: uint16(34411), + 78: uint16(34935), + 79: uint16(35387), + 80: uint16(37198), + 81: uint16(37619), + 82: uint16(39376), + 83: uint16(27159), + 84: uint16(28710), + 85: uint16(29482), + 86: uint16(33511), + 87: uint16(33879), + 88: uint16(36015), + 89: uint16(19969), + 90: uint16(20806), + 91: uint16(20939), + 92: uint16(21899), + 93: uint16(23541), + }, + 35: { + 0: uint16(24086), + 1: uint16(24115), + 2: uint16(24193), + 3: uint16(24340), + 4: uint16(24373), + 5: uint16(24427), + 6: uint16(24500), + 7: uint16(25074), + 8: uint16(25361), + 9: uint16(26274), + 10: uint16(26397), + 11: uint16(28526), + 12: uint16(29266), + 13: uint16(30010), + 14: uint16(30522), + 15: uint16(32884), + 16: uint16(33081), + 17: uint16(33144), + 18: uint16(34678), + 19: uint16(35519), + 20: uint16(35548), + 21: uint16(36229), + 22: uint16(36339), + 23: uint16(37530), + 24: uint16(38263), + 25: uint16(38914), + 26: uint16(40165), + 27: uint16(21189), + 28: uint16(25431), + 29: uint16(30452), + 30: uint16(26389), + 31: uint16(27784), + 32: uint16(29645), + 33: uint16(36035), + 34: uint16(37806), + 35: uint16(38515), + 36: uint16(27941), + 37: uint16(22684), + 38: uint16(26894), + 39: uint16(27084), + 40: uint16(36861), + 41: uint16(37786), + 42: uint16(30171), + 43: uint16(36890), + 44: uint16(22618), + 45: uint16(26626), + 46: uint16(25524), + 47: uint16(27131), + 48: uint16(20291), + 49: uint16(28460), + 50: uint16(26584), + 51: uint16(36795), + 52: uint16(34086), + 53: uint16(32180), + 54: uint16(37716), + 55: uint16(26943), + 56: uint16(28528), + 57: uint16(22378), + 58: uint16(22775), + 59: uint16(23340), + 60: uint16(32044), + 61: uint16(29226), + 62: uint16(21514), + 63: uint16(37347), + 64: uint16(40372), + 65: uint16(20141), + 66: uint16(20302), + 67: uint16(20572), + 68: uint16(20597), + 69: uint16(21059), + 70: uint16(35998), + 71: uint16(21576), + 72: uint16(22564), + 73: uint16(23450), + 74: uint16(24093), + 75: uint16(24213), + 76: uint16(24237), + 77: uint16(24311), + 78: uint16(24351), + 79: uint16(24716), + 80: uint16(25269), + 81: uint16(25402), + 82: uint16(25552), + 83: uint16(26799), + 84: uint16(27712), + 85: uint16(30855), + 86: uint16(31118), + 87: uint16(31243), + 88: uint16(32224), + 89: uint16(33351), + 90: uint16(35330), + 91: uint16(35558), + 92: uint16(36420), + 93: uint16(36883), + }, + 36: { + 0: uint16(37048), + 1: uint16(37165), + 2: uint16(37336), + 3: uint16(40718), + 4: uint16(27877), + 5: uint16(25688), + 6: uint16(25826), + 7: uint16(25973), + 8: uint16(28404), + 9: uint16(30340), + 10: uint16(31515), + 11: uint16(36969), + 12: uint16(37841), + 13: uint16(28346), + 14: uint16(21746), + 15: uint16(24505), + 16: uint16(25764), + 17: uint16(36685), + 18: uint16(36845), + 19: uint16(37444), + 20: uint16(20856), + 21: uint16(22635), + 22: uint16(22825), + 23: uint16(23637), + 24: uint16(24215), + 25: uint16(28155), + 26: uint16(32399), + 27: uint16(29980), + 28: uint16(36028), + 29: uint16(36578), + 30: uint16(39003), + 31: uint16(28857), + 32: uint16(20253), + 33: uint16(27583), + 34: uint16(28593), + 35: uint16(30000), + 36: uint16(38651), + 37: uint16(20814), + 38: uint16(21520), + 39: uint16(22581), + 40: uint16(22615), + 41: uint16(22956), + 42: uint16(23648), + 43: uint16(24466), + 44: uint16(26007), + 45: uint16(26460), + 46: uint16(28193), + 47: uint16(30331), + 48: uint16(33759), + 49: uint16(36077), + 50: uint16(36884), + 51: uint16(37117), + 52: uint16(37709), + 53: uint16(30757), + 54: uint16(30778), + 55: uint16(21162), + 56: uint16(24230), + 57: uint16(22303), + 58: uint16(22900), + 59: uint16(24594), + 60: uint16(20498), + 61: uint16(20826), + 62: uint16(20908), + 63: uint16(20941), + 64: uint16(20992), + 65: uint16(21776), + 66: uint16(22612), + 67: uint16(22616), + 68: uint16(22871), + 69: uint16(23445), + 70: uint16(23798), + 71: uint16(23947), + 72: uint16(24764), + 73: uint16(25237), + 74: uint16(25645), + 75: uint16(26481), + 76: uint16(26691), + 77: uint16(26812), + 78: uint16(26847), + 79: uint16(30423), + 80: uint16(28120), + 81: uint16(28271), + 82: uint16(28059), + 83: uint16(28783), + 84: uint16(29128), + 85: uint16(24403), + 86: uint16(30168), + 87: uint16(31095), + 88: uint16(31561), + 89: uint16(31572), + 90: uint16(31570), + 91: uint16(31958), + 92: uint16(32113), + 93: uint16(21040), + }, + 37: { + 0: uint16(33891), + 1: uint16(34153), + 2: uint16(34276), + 3: uint16(35342), + 4: uint16(35588), + 5: uint16(35910), + 6: uint16(36367), + 7: uint16(36867), + 8: uint16(36879), + 9: uint16(37913), + 10: uint16(38518), + 11: uint16(38957), + 12: uint16(39472), + 13: uint16(38360), + 14: uint16(20685), + 15: uint16(21205), + 16: uint16(21516), + 17: uint16(22530), + 18: uint16(23566), + 19: uint16(24999), + 20: uint16(25758), + 21: uint16(27934), + 22: uint16(30643), + 23: uint16(31461), + 24: uint16(33012), + 25: uint16(33796), + 26: uint16(36947), + 27: uint16(37509), + 28: uint16(23776), + 29: uint16(40199), + 30: uint16(21311), + 31: uint16(24471), + 32: uint16(24499), + 33: uint16(28060), + 34: uint16(29305), + 35: uint16(30563), + 36: uint16(31167), + 37: uint16(31716), + 38: uint16(27602), + 39: uint16(29420), + 40: uint16(35501), + 41: uint16(26627), + 42: uint16(27233), + 43: uint16(20984), + 44: uint16(31361), + 45: uint16(26932), + 46: uint16(23626), + 47: uint16(40182), + 48: uint16(33515), + 49: uint16(23493), + 50: uint16(37193), + 51: uint16(28702), + 52: uint16(22136), + 53: uint16(23663), + 54: uint16(24775), + 55: uint16(25958), + 56: uint16(27788), + 57: uint16(35930), + 58: uint16(36929), + 59: uint16(38931), + 60: uint16(21585), + 61: uint16(26311), + 62: uint16(37389), + 63: uint16(22856), + 64: uint16(37027), + 65: uint16(20869), + 66: uint16(20045), + 67: uint16(20970), + 68: uint16(34201), + 69: uint16(35598), + 70: uint16(28760), + 71: uint16(25466), + 72: uint16(37707), + 73: uint16(26978), + 74: uint16(39348), + 75: uint16(32260), + 76: uint16(30071), + 77: uint16(21335), + 78: uint16(26976), + 79: uint16(36575), + 80: uint16(38627), + 81: uint16(27741), + 82: uint16(20108), + 83: uint16(23612), + 84: uint16(24336), + 85: uint16(36841), + 86: uint16(21250), + 87: uint16(36049), + 88: uint16(32905), + 89: uint16(34425), + 90: uint16(24319), + 91: uint16(26085), + 92: uint16(20083), + 93: uint16(20837), + }, + 38: { + 0: uint16(22914), + 1: uint16(23615), + 2: uint16(38894), + 3: uint16(20219), + 4: uint16(22922), + 5: uint16(24525), + 6: uint16(35469), + 7: uint16(28641), + 8: uint16(31152), + 9: uint16(31074), + 10: uint16(23527), + 11: uint16(33905), + 12: uint16(29483), + 13: uint16(29105), + 14: uint16(24180), + 15: uint16(24565), + 16: uint16(25467), + 17: uint16(25754), + 18: uint16(29123), + 19: uint16(31896), + 20: uint16(20035), + 21: uint16(24316), + 22: uint16(20043), + 23: uint16(22492), + 24: uint16(22178), + 25: uint16(24745), + 26: uint16(28611), + 27: uint16(32013), + 28: uint16(33021), + 29: uint16(33075), + 30: uint16(33215), + 31: uint16(36786), + 32: uint16(35223), + 33: uint16(34468), + 34: uint16(24052), + 35: uint16(25226), + 36: uint16(25773), + 37: uint16(35207), + 38: uint16(26487), + 39: uint16(27874), + 40: uint16(27966), + 41: uint16(29750), + 42: uint16(30772), + 43: uint16(23110), + 44: uint16(32629), + 45: uint16(33453), + 46: uint16(39340), + 47: uint16(20467), + 48: uint16(24259), + 49: uint16(25309), + 50: uint16(25490), + 51: uint16(25943), + 52: uint16(26479), + 53: uint16(30403), + 54: uint16(29260), + 55: uint16(32972), + 56: uint16(32954), + 57: uint16(36649), + 58: uint16(37197), + 59: uint16(20493), + 60: uint16(22521), + 61: uint16(23186), + 62: uint16(26757), + 63: uint16(26995), + 64: uint16(29028), + 65: uint16(29437), + 66: uint16(36023), + 67: uint16(22770), + 68: uint16(36064), + 69: uint16(38506), + 70: uint16(36889), + 71: uint16(34687), + 72: uint16(31204), + 73: uint16(30695), + 74: uint16(33833), + 75: uint16(20271), + 76: uint16(21093), + 77: uint16(21338), + 78: uint16(25293), + 79: uint16(26575), + 80: uint16(27850), + 81: uint16(30333), + 82: uint16(31636), + 83: uint16(31893), + 84: uint16(33334), + 85: uint16(34180), + 86: uint16(36843), + 87: uint16(26333), + 88: uint16(28448), + 89: uint16(29190), + 90: uint16(32283), + 91: uint16(33707), + 92: uint16(39361), + 93: uint16(40614), + }, + 39: { + 0: uint16(20989), + 1: uint16(31665), + 2: uint16(30834), + 3: uint16(31672), + 4: uint16(32903), + 5: uint16(31560), + 6: uint16(27368), + 7: uint16(24161), + 8: uint16(32908), + 9: uint16(30033), + 10: uint16(30048), + 11: uint16(20843), + 12: uint16(37474), + 13: uint16(28300), + 14: uint16(30330), + 15: uint16(37271), + 16: uint16(39658), + 17: uint16(20240), + 18: uint16(32624), + 19: uint16(25244), + 20: uint16(31567), + 21: uint16(38309), + 22: uint16(40169), + 23: uint16(22138), + 24: uint16(22617), + 25: uint16(34532), + 26: uint16(38588), + 27: uint16(20276), + 28: uint16(21028), + 29: uint16(21322), + 30: uint16(21453), + 31: uint16(21467), + 32: uint16(24070), + 33: uint16(25644), + 34: uint16(26001), + 35: uint16(26495), + 36: uint16(27710), + 37: uint16(27726), + 38: uint16(29256), + 39: uint16(29359), + 40: uint16(29677), + 41: uint16(30036), + 42: uint16(32321), + 43: uint16(33324), + 44: uint16(34281), + 45: uint16(36009), + 46: uint16(31684), + 47: uint16(37318), + 48: uint16(29033), + 49: uint16(38930), + 50: uint16(39151), + 51: uint16(25405), + 52: uint16(26217), + 53: uint16(30058), + 54: uint16(30436), + 55: uint16(30928), + 56: uint16(34115), + 57: uint16(34542), + 58: uint16(21290), + 59: uint16(21329), + 60: uint16(21542), + 61: uint16(22915), + 62: uint16(24199), + 63: uint16(24444), + 64: uint16(24754), + 65: uint16(25161), + 66: uint16(25209), + 67: uint16(25259), + 68: uint16(26000), + 69: uint16(27604), + 70: uint16(27852), + 71: uint16(30130), + 72: uint16(30382), + 73: uint16(30865), + 74: uint16(31192), + 75: uint16(32203), + 76: uint16(32631), + 77: uint16(32933), + 78: uint16(34987), + 79: uint16(35513), + 80: uint16(36027), + 81: uint16(36991), + 82: uint16(38750), + 83: uint16(39131), + 84: uint16(27147), + 85: uint16(31800), + 86: uint16(20633), + 87: uint16(23614), + 88: uint16(24494), + 89: uint16(26503), + 90: uint16(27608), + 91: uint16(29749), + 92: uint16(30473), + 93: uint16(32654), + }, + 40: { + 0: uint16(40763), + 1: uint16(26570), + 2: uint16(31255), + 3: uint16(21305), + 4: uint16(30091), + 5: uint16(39661), + 6: uint16(24422), + 7: uint16(33181), + 8: uint16(33777), + 9: uint16(32920), + 10: uint16(24380), + 11: uint16(24517), + 12: uint16(30050), + 13: uint16(31558), + 14: uint16(36924), + 15: uint16(26727), + 16: uint16(23019), + 17: uint16(23195), + 18: uint16(32016), + 19: uint16(30334), + 20: uint16(35628), + 21: uint16(20469), + 22: uint16(24426), + 23: uint16(27161), + 24: uint16(27703), + 25: uint16(28418), + 26: uint16(29922), + 27: uint16(31080), + 28: uint16(34920), + 29: uint16(35413), + 30: uint16(35961), + 31: uint16(24287), + 32: uint16(25551), + 33: uint16(30149), + 34: uint16(31186), + 35: uint16(33495), + 36: uint16(37672), + 37: uint16(37618), + 38: uint16(33948), + 39: uint16(34541), + 40: uint16(39981), + 41: uint16(21697), + 42: uint16(24428), + 43: uint16(25996), + 44: uint16(27996), + 45: uint16(28693), + 46: uint16(36007), + 47: uint16(36051), + 48: uint16(38971), + 49: uint16(25935), + 50: uint16(29942), + 51: uint16(19981), + 52: uint16(20184), + 53: uint16(22496), + 54: uint16(22827), + 55: uint16(23142), + 56: uint16(23500), + 57: uint16(20904), + 58: uint16(24067), + 59: uint16(24220), + 60: uint16(24598), + 61: uint16(25206), + 62: uint16(25975), + 63: uint16(26023), + 64: uint16(26222), + 65: uint16(28014), + 66: uint16(29238), + 67: uint16(31526), + 68: uint16(33104), + 69: uint16(33178), + 70: uint16(33433), + 71: uint16(35676), + 72: uint16(36000), + 73: uint16(36070), + 74: uint16(36212), + 75: uint16(38428), + 76: uint16(38468), + 77: uint16(20398), + 78: uint16(25771), + 79: uint16(27494), + 80: uint16(33310), + 81: uint16(33889), + 82: uint16(34154), + 83: uint16(37096), + 84: uint16(23553), + 85: uint16(26963), + 86: uint16(39080), + 87: uint16(33914), + 88: uint16(34135), + 89: uint16(20239), + 90: uint16(21103), + 91: uint16(24489), + 92: uint16(24133), + 93: uint16(26381), + }, + 41: { + 0: uint16(31119), + 1: uint16(33145), + 2: uint16(35079), + 3: uint16(35206), + 4: uint16(28149), + 5: uint16(24343), + 6: uint16(25173), + 7: uint16(27832), + 8: uint16(20175), + 9: uint16(29289), + 10: uint16(39826), + 11: uint16(20998), + 12: uint16(21563), + 13: uint16(22132), + 14: uint16(22707), + 15: uint16(24996), + 16: uint16(25198), + 17: uint16(28954), + 18: uint16(22894), + 19: uint16(31881), + 20: uint16(31966), + 21: uint16(32027), + 22: uint16(38640), + 23: uint16(25991), + 24: uint16(32862), + 25: uint16(19993), + 26: uint16(20341), + 27: uint16(20853), + 28: uint16(22592), + 29: uint16(24163), + 30: uint16(24179), + 31: uint16(24330), + 32: uint16(26564), + 33: uint16(20006), + 34: uint16(34109), + 35: uint16(38281), + 36: uint16(38491), + 37: uint16(31859), + 38: uint16(38913), + 39: uint16(20731), + 40: uint16(22721), + 41: uint16(30294), + 42: uint16(30887), + 43: uint16(21029), + 44: uint16(30629), + 45: uint16(34065), + 46: uint16(31622), + 47: uint16(20559), + 48: uint16(22793), + 49: uint16(29255), + 50: uint16(31687), + 51: uint16(32232), + 52: uint16(36794), + 53: uint16(36820), + 54: uint16(36941), + 55: uint16(20415), + 56: uint16(21193), + 57: uint16(23081), + 58: uint16(24321), + 59: uint16(38829), + 60: uint16(20445), + 61: uint16(33303), + 62: uint16(37610), + 63: uint16(22275), + 64: uint16(25429), + 65: uint16(27497), + 66: uint16(29995), + 67: uint16(35036), + 68: uint16(36628), + 69: uint16(31298), + 70: uint16(21215), + 71: uint16(22675), + 72: uint16(24917), + 73: uint16(25098), + 74: uint16(26286), + 75: uint16(27597), + 76: uint16(31807), + 77: uint16(33769), + 78: uint16(20515), + 79: uint16(20472), + 80: uint16(21253), + 81: uint16(21574), + 82: uint16(22577), + 83: uint16(22857), + 84: uint16(23453), + 85: uint16(23792), + 86: uint16(23791), + 87: uint16(23849), + 88: uint16(24214), + 89: uint16(25265), + 90: uint16(25447), + 91: uint16(25918), + 92: uint16(26041), + 93: uint16(26379), + }, + 42: { + 0: uint16(27861), + 1: uint16(27873), + 2: uint16(28921), + 3: uint16(30770), + 4: uint16(32299), + 5: uint16(32990), + 6: uint16(33459), + 7: uint16(33804), + 8: uint16(34028), + 9: uint16(34562), + 10: uint16(35090), + 11: uint16(35370), + 12: uint16(35914), + 13: uint16(37030), + 14: uint16(37586), + 15: uint16(39165), + 16: uint16(40179), + 17: uint16(40300), + 18: uint16(20047), + 19: uint16(20129), + 20: uint16(20621), + 21: uint16(21078), + 22: uint16(22346), + 23: uint16(22952), + 24: uint16(24125), + 25: uint16(24536), + 26: uint16(24537), + 27: uint16(25151), + 28: uint16(26292), + 29: uint16(26395), + 30: uint16(26576), + 31: uint16(26834), + 32: uint16(20882), + 33: uint16(32033), + 34: uint16(32938), + 35: uint16(33192), + 36: uint16(35584), + 37: uint16(35980), + 38: uint16(36031), + 39: uint16(37502), + 40: uint16(38450), + 41: uint16(21536), + 42: uint16(38956), + 43: uint16(21271), + 44: uint16(20693), + 45: uint16(21340), + 46: uint16(22696), + 47: uint16(25778), + 48: uint16(26420), + 49: uint16(29287), + 50: uint16(30566), + 51: uint16(31302), + 52: uint16(37350), + 53: uint16(21187), + 54: uint16(27809), + 55: uint16(27526), + 56: uint16(22528), + 57: uint16(24140), + 58: uint16(22868), + 59: uint16(26412), + 60: uint16(32763), + 61: uint16(20961), + 62: uint16(30406), + 63: uint16(25705), + 64: uint16(30952), + 65: uint16(39764), + 66: uint16(40635), + 67: uint16(22475), + 68: uint16(22969), + 69: uint16(26151), + 70: uint16(26522), + 71: uint16(27598), + 72: uint16(21737), + 73: uint16(27097), + 74: uint16(24149), + 75: uint16(33180), + 76: uint16(26517), + 77: uint16(39850), + 78: uint16(26622), + 79: uint16(40018), + 80: uint16(26717), + 81: uint16(20134), + 82: uint16(20451), + 83: uint16(21448), + 84: uint16(25273), + 85: uint16(26411), + 86: uint16(27819), + 87: uint16(36804), + 88: uint16(20397), + 89: uint16(32365), + 90: uint16(40639), + 91: uint16(19975), + 92: uint16(24930), + 93: uint16(28288), + }, + 43: { + 0: uint16(28459), + 1: uint16(34067), + 2: uint16(21619), + 3: uint16(26410), + 4: uint16(39749), + 5: uint16(24051), + 6: uint16(31637), + 7: uint16(23724), + 8: uint16(23494), + 9: uint16(34588), + 10: uint16(28234), + 11: uint16(34001), + 12: uint16(31252), + 13: uint16(33032), + 14: uint16(22937), + 15: uint16(31885), + 16: uint16(27665), + 17: uint16(30496), + 18: uint16(21209), + 19: uint16(22818), + 20: uint16(28961), + 21: uint16(29279), + 22: uint16(30683), + 23: uint16(38695), + 24: uint16(40289), + 25: uint16(26891), + 26: uint16(23167), + 27: uint16(23064), + 28: uint16(20901), + 29: uint16(21517), + 30: uint16(21629), + 31: uint16(26126), + 32: uint16(30431), + 33: uint16(36855), + 34: uint16(37528), + 35: uint16(40180), + 36: uint16(23018), + 37: uint16(29277), + 38: uint16(28357), + 39: uint16(20813), + 40: uint16(26825), + 41: uint16(32191), + 42: uint16(32236), + 43: uint16(38754), + 44: uint16(40634), + 45: uint16(25720), + 46: uint16(27169), + 47: uint16(33538), + 48: uint16(22916), + 49: uint16(23391), + 50: uint16(27611), + 51: uint16(29467), + 52: uint16(30450), + 53: uint16(32178), + 54: uint16(32791), + 55: uint16(33945), + 56: uint16(20786), + 57: uint16(26408), + 58: uint16(40665), + 59: uint16(30446), + 60: uint16(26466), + 61: uint16(21247), + 62: uint16(39173), + 63: uint16(23588), + 64: uint16(25147), + 65: uint16(31870), + 66: uint16(36016), + 67: uint16(21839), + 68: uint16(24758), + 69: uint16(32011), + 70: uint16(38272), + 71: uint16(21249), + 72: uint16(20063), + 73: uint16(20918), + 74: uint16(22812), + 75: uint16(29242), + 76: uint16(32822), + 77: uint16(37326), + 78: uint16(24357), + 79: uint16(30690), + 80: uint16(21380), + 81: uint16(24441), + 82: uint16(32004), + 83: uint16(34220), + 84: uint16(35379), + 85: uint16(36493), + 86: uint16(38742), + 87: uint16(26611), + 88: uint16(34222), + 89: uint16(37971), + 90: uint16(24841), + 91: uint16(24840), + 92: uint16(27833), + 93: uint16(30290), + }, + 44: { + 0: uint16(35565), + 1: uint16(36664), + 2: uint16(21807), + 3: uint16(20305), + 4: uint16(20778), + 5: uint16(21191), + 6: uint16(21451), + 7: uint16(23461), + 8: uint16(24189), + 9: uint16(24736), + 10: uint16(24962), + 11: uint16(25558), + 12: uint16(26377), + 13: uint16(26586), + 14: uint16(28263), + 15: uint16(28044), + 16: uint16(29494), + 17: uint16(29495), + 18: uint16(30001), + 19: uint16(31056), + 20: uint16(35029), + 21: uint16(35480), + 22: uint16(36938), + 23: uint16(37009), + 24: uint16(37109), + 25: uint16(38596), + 26: uint16(34701), + 27: uint16(22805), + 28: uint16(20104), + 29: uint16(20313), + 30: uint16(19982), + 31: uint16(35465), + 32: uint16(36671), + 33: uint16(38928), + 34: uint16(20653), + 35: uint16(24188), + 36: uint16(22934), + 37: uint16(23481), + 38: uint16(24248), + 39: uint16(25562), + 40: uint16(25594), + 41: uint16(25793), + 42: uint16(26332), + 43: uint16(26954), + 44: uint16(27096), + 45: uint16(27915), + 46: uint16(28342), + 47: uint16(29076), + 48: uint16(29992), + 49: uint16(31407), + 50: uint16(32650), + 51: uint16(32768), + 52: uint16(33865), + 53: uint16(33993), + 54: uint16(35201), + 55: uint16(35617), + 56: uint16(36362), + 57: uint16(36965), + 58: uint16(38525), + 59: uint16(39178), + 60: uint16(24958), + 61: uint16(25233), + 62: uint16(27442), + 63: uint16(27779), + 64: uint16(28020), + 65: uint16(32716), + 66: uint16(32764), + 67: uint16(28096), + 68: uint16(32645), + 69: uint16(34746), + 70: uint16(35064), + 71: uint16(26469), + 72: uint16(33713), + 73: uint16(38972), + 74: uint16(38647), + 75: uint16(27931), + 76: uint16(32097), + 77: uint16(33853), + 78: uint16(37226), + 79: uint16(20081), + 80: uint16(21365), + 81: uint16(23888), + 82: uint16(27396), + 83: uint16(28651), + 84: uint16(34253), + 85: uint16(34349), + 86: uint16(35239), + 87: uint16(21033), + 88: uint16(21519), + 89: uint16(23653), + 90: uint16(26446), + 91: uint16(26792), + 92: uint16(29702), + 93: uint16(29827), + }, + 45: { + 0: uint16(30178), + 1: uint16(35023), + 2: uint16(35041), + 3: uint16(37324), + 4: uint16(38626), + 5: uint16(38520), + 6: uint16(24459), + 7: uint16(29575), + 8: uint16(31435), + 9: uint16(33870), + 10: uint16(25504), + 11: uint16(30053), + 12: uint16(21129), + 13: uint16(27969), + 14: uint16(28316), + 15: uint16(29705), + 16: uint16(30041), + 17: uint16(30827), + 18: uint16(31890), + 19: uint16(38534), + 20: uint16(31452), + 21: uint16(40845), + 22: uint16(20406), + 23: uint16(24942), + 24: uint16(26053), + 25: uint16(34396), + 26: uint16(20102), + 27: uint16(20142), + 28: uint16(20698), + 29: uint16(20001), + 30: uint16(20940), + 31: uint16(23534), + 32: uint16(26009), + 33: uint16(26753), + 34: uint16(28092), + 35: uint16(29471), + 36: uint16(30274), + 37: uint16(30637), + 38: uint16(31260), + 39: uint16(31975), + 40: uint16(33391), + 41: uint16(35538), + 42: uint16(36988), + 43: uint16(37327), + 44: uint16(38517), + 45: uint16(38936), + 46: uint16(21147), + 47: uint16(32209), + 48: uint16(20523), + 49: uint16(21400), + 50: uint16(26519), + 51: uint16(28107), + 52: uint16(29136), + 53: uint16(29747), + 54: uint16(33256), + 55: uint16(36650), + 56: uint16(38563), + 57: uint16(40023), + 58: uint16(40607), + 59: uint16(29792), + 60: uint16(22593), + 61: uint16(28057), + 62: uint16(32047), + 63: uint16(39006), + 64: uint16(20196), + 65: uint16(20278), + 66: uint16(20363), + 67: uint16(20919), + 68: uint16(21169), + 69: uint16(23994), + 70: uint16(24604), + 71: uint16(29618), + 72: uint16(31036), + 73: uint16(33491), + 74: uint16(37428), + 75: uint16(38583), + 76: uint16(38646), + 77: uint16(38666), + 78: uint16(40599), + 79: uint16(40802), + 80: uint16(26278), + 81: uint16(27508), + 82: uint16(21015), + 83: uint16(21155), + 84: uint16(28872), + 85: uint16(35010), + 86: uint16(24265), + 87: uint16(24651), + 88: uint16(24976), + 89: uint16(28451), + 90: uint16(29001), + 91: uint16(31806), + 92: uint16(32244), + 93: uint16(32879), + }, + 46: { + 0: uint16(34030), + 1: uint16(36899), + 2: uint16(37676), + 3: uint16(21570), + 4: uint16(39791), + 5: uint16(27347), + 6: uint16(28809), + 7: uint16(36034), + 8: uint16(36335), + 9: uint16(38706), + 10: uint16(21172), + 11: uint16(23105), + 12: uint16(24266), + 13: uint16(24324), + 14: uint16(26391), + 15: uint16(27004), + 16: uint16(27028), + 17: uint16(28010), + 18: uint16(28431), + 19: uint16(29282), + 20: uint16(29436), + 21: uint16(31725), + 22: uint16(32769), + 23: uint16(32894), + 24: uint16(34635), + 25: uint16(37070), + 26: uint16(20845), + 27: uint16(40595), + 28: uint16(31108), + 29: uint16(32907), + 30: uint16(37682), + 31: uint16(35542), + 32: uint16(20525), + 33: uint16(21644), + 34: uint16(35441), + 35: uint16(27498), + 36: uint16(36036), + 37: uint16(33031), + 38: uint16(24785), + 39: uint16(26528), + 40: uint16(40434), + 41: uint16(20121), + 42: uint16(20120), + 43: uint16(39952), + 44: uint16(35435), + 45: uint16(34241), + 46: uint16(34152), + 47: uint16(26880), + 48: uint16(28286), + 49: uint16(30871), + 50: uint16(33109), + }, + 47: { + 0: uint16(24332), + 1: uint16(19984), + 2: uint16(19989), + 3: uint16(20010), + 4: uint16(20017), + 5: uint16(20022), + 6: uint16(20028), + 7: uint16(20031), + 8: uint16(20034), + 9: uint16(20054), + 10: uint16(20056), + 11: uint16(20098), + 12: uint16(20101), + 13: uint16(35947), + 14: uint16(20106), + 15: uint16(33298), + 16: uint16(24333), + 17: uint16(20110), + 18: uint16(20126), + 19: uint16(20127), + 20: uint16(20128), + 21: uint16(20130), + 22: uint16(20144), + 23: uint16(20147), + 24: uint16(20150), + 25: uint16(20174), + 26: uint16(20173), + 27: uint16(20164), + 28: uint16(20166), + 29: uint16(20162), + 30: uint16(20183), + 31: uint16(20190), + 32: uint16(20205), + 33: uint16(20191), + 34: uint16(20215), + 35: uint16(20233), + 36: uint16(20314), + 37: uint16(20272), + 38: uint16(20315), + 39: uint16(20317), + 40: uint16(20311), + 41: uint16(20295), + 42: uint16(20342), + 43: uint16(20360), + 44: uint16(20367), + 45: uint16(20376), + 46: uint16(20347), + 47: uint16(20329), + 48: uint16(20336), + 49: uint16(20369), + 50: uint16(20335), + 51: uint16(20358), + 52: uint16(20374), + 53: uint16(20760), + 54: uint16(20436), + 55: uint16(20447), + 56: uint16(20430), + 57: uint16(20440), + 58: uint16(20443), + 59: uint16(20433), + 60: uint16(20442), + 61: uint16(20432), + 62: uint16(20452), + 63: uint16(20453), + 64: uint16(20506), + 65: uint16(20520), + 66: uint16(20500), + 67: uint16(20522), + 68: uint16(20517), + 69: uint16(20485), + 70: uint16(20252), + 71: uint16(20470), + 72: uint16(20513), + 73: uint16(20521), + 74: uint16(20524), + 75: uint16(20478), + 76: uint16(20463), + 77: uint16(20497), + 78: uint16(20486), + 79: uint16(20547), + 80: uint16(20551), + 81: uint16(26371), + 82: uint16(20565), + 83: uint16(20560), + 84: uint16(20552), + 85: uint16(20570), + 86: uint16(20566), + 87: uint16(20588), + 88: uint16(20600), + 89: uint16(20608), + 90: uint16(20634), + 91: uint16(20613), + 92: uint16(20660), + 93: uint16(20658), + }, + 48: { + 0: uint16(20681), + 1: uint16(20682), + 2: uint16(20659), + 3: uint16(20674), + 4: uint16(20694), + 5: uint16(20702), + 6: uint16(20709), + 7: uint16(20717), + 8: uint16(20707), + 9: uint16(20718), + 10: uint16(20729), + 11: uint16(20725), + 12: uint16(20745), + 13: uint16(20737), + 14: uint16(20738), + 15: uint16(20758), + 16: uint16(20757), + 17: uint16(20756), + 18: uint16(20762), + 19: uint16(20769), + 20: uint16(20794), + 21: uint16(20791), + 22: uint16(20796), + 23: uint16(20795), + 24: uint16(20799), + 25: uint16(20800), + 26: uint16(20818), + 27: uint16(20812), + 28: uint16(20820), + 29: uint16(20834), + 30: uint16(31480), + 31: uint16(20841), + 32: uint16(20842), + 33: uint16(20846), + 34: uint16(20864), + 35: uint16(20866), + 36: uint16(22232), + 37: uint16(20876), + 38: uint16(20873), + 39: uint16(20879), + 40: uint16(20881), + 41: uint16(20883), + 42: uint16(20885), + 43: uint16(20886), + 44: uint16(20900), + 45: uint16(20902), + 46: uint16(20898), + 47: uint16(20905), + 48: uint16(20906), + 49: uint16(20907), + 50: uint16(20915), + 51: uint16(20913), + 52: uint16(20914), + 53: uint16(20912), + 54: uint16(20917), + 55: uint16(20925), + 56: uint16(20933), + 57: uint16(20937), + 58: uint16(20955), + 59: uint16(20960), + 60: uint16(34389), + 61: uint16(20969), + 62: uint16(20973), + 63: uint16(20976), + 64: uint16(20981), + 65: uint16(20990), + 66: uint16(20996), + 67: uint16(21003), + 68: uint16(21012), + 69: uint16(21006), + 70: uint16(21031), + 71: uint16(21034), + 72: uint16(21038), + 73: uint16(21043), + 74: uint16(21049), + 75: uint16(21071), + 76: uint16(21060), + 77: uint16(21067), + 78: uint16(21068), + 79: uint16(21086), + 80: uint16(21076), + 81: uint16(21098), + 82: uint16(21108), + 83: uint16(21097), + 84: uint16(21107), + 85: uint16(21119), + 86: uint16(21117), + 87: uint16(21133), + 88: uint16(21140), + 89: uint16(21138), + 90: uint16(21105), + 91: uint16(21128), + 92: uint16(21137), + 93: uint16(36776), + }, + 49: { + 0: uint16(36775), + 1: uint16(21164), + 2: uint16(21165), + 3: uint16(21180), + 4: uint16(21173), + 5: uint16(21185), + 6: uint16(21197), + 7: uint16(21207), + 8: uint16(21214), + 9: uint16(21219), + 10: uint16(21222), + 11: uint16(39149), + 12: uint16(21216), + 13: uint16(21235), + 14: uint16(21237), + 15: uint16(21240), + 16: uint16(21241), + 17: uint16(21254), + 18: uint16(21256), + 19: uint16(30008), + 20: uint16(21261), + 21: uint16(21264), + 22: uint16(21263), + 23: uint16(21269), + 24: uint16(21274), + 25: uint16(21283), + 26: uint16(21295), + 27: uint16(21297), + 28: uint16(21299), + 29: uint16(21304), + 30: uint16(21312), + 31: uint16(21318), + 32: uint16(21317), + 33: uint16(19991), + 34: uint16(21321), + 35: uint16(21325), + 36: uint16(20950), + 37: uint16(21342), + 38: uint16(21353), + 39: uint16(21358), + 40: uint16(22808), + 41: uint16(21371), + 42: uint16(21367), + 43: uint16(21378), + 44: uint16(21398), + 45: uint16(21408), + 46: uint16(21414), + 47: uint16(21413), + 48: uint16(21422), + 49: uint16(21424), + 50: uint16(21430), + 51: uint16(21443), + 52: uint16(31762), + 53: uint16(38617), + 54: uint16(21471), + 55: uint16(26364), + 56: uint16(29166), + 57: uint16(21486), + 58: uint16(21480), + 59: uint16(21485), + 60: uint16(21498), + 61: uint16(21505), + 62: uint16(21565), + 63: uint16(21568), + 64: uint16(21548), + 65: uint16(21549), + 66: uint16(21564), + 67: uint16(21550), + 68: uint16(21558), + 69: uint16(21545), + 70: uint16(21533), + 71: uint16(21582), + 72: uint16(21647), + 73: uint16(21621), + 74: uint16(21646), + 75: uint16(21599), + 76: uint16(21617), + 77: uint16(21623), + 78: uint16(21616), + 79: uint16(21650), + 80: uint16(21627), + 81: uint16(21632), + 82: uint16(21622), + 83: uint16(21636), + 84: uint16(21648), + 85: uint16(21638), + 86: uint16(21703), + 87: uint16(21666), + 88: uint16(21688), + 89: uint16(21669), + 90: uint16(21676), + 91: uint16(21700), + 92: uint16(21704), + 93: uint16(21672), + }, + 50: { + 0: uint16(21675), + 1: uint16(21698), + 2: uint16(21668), + 3: uint16(21694), + 4: uint16(21692), + 5: uint16(21720), + 6: uint16(21733), + 7: uint16(21734), + 8: uint16(21775), + 9: uint16(21780), + 10: uint16(21757), + 11: uint16(21742), + 12: uint16(21741), + 13: uint16(21754), + 14: uint16(21730), + 15: uint16(21817), + 16: uint16(21824), + 17: uint16(21859), + 18: uint16(21836), + 19: uint16(21806), + 20: uint16(21852), + 21: uint16(21829), + 22: uint16(21846), + 23: uint16(21847), + 24: uint16(21816), + 25: uint16(21811), + 26: uint16(21853), + 27: uint16(21913), + 28: uint16(21888), + 29: uint16(21679), + 30: uint16(21898), + 31: uint16(21919), + 32: uint16(21883), + 33: uint16(21886), + 34: uint16(21912), + 35: uint16(21918), + 36: uint16(21934), + 37: uint16(21884), + 38: uint16(21891), + 39: uint16(21929), + 40: uint16(21895), + 41: uint16(21928), + 42: uint16(21978), + 43: uint16(21957), + 44: uint16(21983), + 45: uint16(21956), + 46: uint16(21980), + 47: uint16(21988), + 48: uint16(21972), + 49: uint16(22036), + 50: uint16(22007), + 51: uint16(22038), + 52: uint16(22014), + 53: uint16(22013), + 54: uint16(22043), + 55: uint16(22009), + 56: uint16(22094), + 57: uint16(22096), + 58: uint16(29151), + 59: uint16(22068), + 60: uint16(22070), + 61: uint16(22066), + 62: uint16(22072), + 63: uint16(22123), + 64: uint16(22116), + 65: uint16(22063), + 66: uint16(22124), + 67: uint16(22122), + 68: uint16(22150), + 69: uint16(22144), + 70: uint16(22154), + 71: uint16(22176), + 72: uint16(22164), + 73: uint16(22159), + 74: uint16(22181), + 75: uint16(22190), + 76: uint16(22198), + 77: uint16(22196), + 78: uint16(22210), + 79: uint16(22204), + 80: uint16(22209), + 81: uint16(22211), + 82: uint16(22208), + 83: uint16(22216), + 84: uint16(22222), + 85: uint16(22225), + 86: uint16(22227), + 87: uint16(22231), + 88: uint16(22254), + 89: uint16(22265), + 90: uint16(22272), + 91: uint16(22271), + 92: uint16(22276), + 93: uint16(22281), + }, + 51: { + 0: uint16(22280), + 1: uint16(22283), + 2: uint16(22285), + 3: uint16(22291), + 4: uint16(22296), + 5: uint16(22294), + 6: uint16(21959), + 7: uint16(22300), + 8: uint16(22310), + 9: uint16(22327), + 10: uint16(22328), + 11: uint16(22350), + 12: uint16(22331), + 13: uint16(22336), + 14: uint16(22351), + 15: uint16(22377), + 16: uint16(22464), + 17: uint16(22408), + 18: uint16(22369), + 19: uint16(22399), + 20: uint16(22409), + 21: uint16(22419), + 22: uint16(22432), + 23: uint16(22451), + 24: uint16(22436), + 25: uint16(22442), + 26: uint16(22448), + 27: uint16(22467), + 28: uint16(22470), + 29: uint16(22484), + 30: uint16(22482), + 31: uint16(22483), + 32: uint16(22538), + 33: uint16(22486), + 34: uint16(22499), + 35: uint16(22539), + 36: uint16(22553), + 37: uint16(22557), + 38: uint16(22642), + 39: uint16(22561), + 40: uint16(22626), + 41: uint16(22603), + 42: uint16(22640), + 43: uint16(27584), + 44: uint16(22610), + 45: uint16(22589), + 46: uint16(22649), + 47: uint16(22661), + 48: uint16(22713), + 49: uint16(22687), + 50: uint16(22699), + 51: uint16(22714), + 52: uint16(22750), + 53: uint16(22715), + 54: uint16(22712), + 55: uint16(22702), + 56: uint16(22725), + 57: uint16(22739), + 58: uint16(22737), + 59: uint16(22743), + 60: uint16(22745), + 61: uint16(22744), + 62: uint16(22757), + 63: uint16(22748), + 64: uint16(22756), + 65: uint16(22751), + 66: uint16(22767), + 67: uint16(22778), + 68: uint16(22777), + 69: uint16(22779), + 70: uint16(22780), + 71: uint16(22781), + 72: uint16(22786), + 73: uint16(22794), + 74: uint16(22800), + 75: uint16(22811), + 76: uint16(26790), + 77: uint16(22821), + 78: uint16(22828), + 79: uint16(22829), + 80: uint16(22834), + 81: uint16(22840), + 82: uint16(22846), + 83: uint16(31442), + 84: uint16(22869), + 85: uint16(22864), + 86: uint16(22862), + 87: uint16(22874), + 88: uint16(22872), + 89: uint16(22882), + 90: uint16(22880), + 91: uint16(22887), + 92: uint16(22892), + 93: uint16(22889), + }, + 52: { + 0: uint16(22904), + 1: uint16(22913), + 2: uint16(22941), + 3: uint16(20318), + 4: uint16(20395), + 5: uint16(22947), + 6: uint16(22962), + 7: uint16(22982), + 8: uint16(23016), + 9: uint16(23004), + 10: uint16(22925), + 11: uint16(23001), + 12: uint16(23002), + 13: uint16(23077), + 14: uint16(23071), + 15: uint16(23057), + 16: uint16(23068), + 17: uint16(23049), + 18: uint16(23066), + 19: uint16(23104), + 20: uint16(23148), + 21: uint16(23113), + 22: uint16(23093), + 23: uint16(23094), + 24: uint16(23138), + 25: uint16(23146), + 26: uint16(23194), + 27: uint16(23228), + 28: uint16(23230), + 29: uint16(23243), + 30: uint16(23234), + 31: uint16(23229), + 32: uint16(23267), + 33: uint16(23255), + 34: uint16(23270), + 35: uint16(23273), + 36: uint16(23254), + 37: uint16(23290), + 38: uint16(23291), + 39: uint16(23308), + 40: uint16(23307), + 41: uint16(23318), + 42: uint16(23346), + 43: uint16(23248), + 44: uint16(23338), + 45: uint16(23350), + 46: uint16(23358), + 47: uint16(23363), + 48: uint16(23365), + 49: uint16(23360), + 50: uint16(23377), + 51: uint16(23381), + 52: uint16(23386), + 53: uint16(23387), + 54: uint16(23397), + 55: uint16(23401), + 56: uint16(23408), + 57: uint16(23411), + 58: uint16(23413), + 59: uint16(23416), + 60: uint16(25992), + 61: uint16(23418), + 62: uint16(23424), + 63: uint16(23427), + 64: uint16(23462), + 65: uint16(23480), + 66: uint16(23491), + 67: uint16(23495), + 68: uint16(23497), + 69: uint16(23508), + 70: uint16(23504), + 71: uint16(23524), + 72: uint16(23526), + 73: uint16(23522), + 74: uint16(23518), + 75: uint16(23525), + 76: uint16(23531), + 77: uint16(23536), + 78: uint16(23542), + 79: uint16(23539), + 80: uint16(23557), + 81: uint16(23559), + 82: uint16(23560), + 83: uint16(23565), + 84: uint16(23571), + 85: uint16(23584), + 86: uint16(23586), + 87: uint16(23592), + 88: uint16(23608), + 89: uint16(23609), + 90: uint16(23617), + 91: uint16(23622), + 92: uint16(23630), + 93: uint16(23635), + }, + 53: { + 0: uint16(23632), + 1: uint16(23631), + 2: uint16(23409), + 3: uint16(23660), + 4: uint16(23662), + 5: uint16(20066), + 6: uint16(23670), + 7: uint16(23673), + 8: uint16(23692), + 9: uint16(23697), + 10: uint16(23700), + 11: uint16(22939), + 12: uint16(23723), + 13: uint16(23739), + 14: uint16(23734), + 15: uint16(23740), + 16: uint16(23735), + 17: uint16(23749), + 18: uint16(23742), + 19: uint16(23751), + 20: uint16(23769), + 21: uint16(23785), + 22: uint16(23805), + 23: uint16(23802), + 24: uint16(23789), + 25: uint16(23948), + 26: uint16(23786), + 27: uint16(23819), + 28: uint16(23829), + 29: uint16(23831), + 30: uint16(23900), + 31: uint16(23839), + 32: uint16(23835), + 33: uint16(23825), + 34: uint16(23828), + 35: uint16(23842), + 36: uint16(23834), + 37: uint16(23833), + 38: uint16(23832), + 39: uint16(23884), + 40: uint16(23890), + 41: uint16(23886), + 42: uint16(23883), + 43: uint16(23916), + 44: uint16(23923), + 45: uint16(23926), + 46: uint16(23943), + 47: uint16(23940), + 48: uint16(23938), + 49: uint16(23970), + 50: uint16(23965), + 51: uint16(23980), + 52: uint16(23982), + 53: uint16(23997), + 54: uint16(23952), + 55: uint16(23991), + 56: uint16(23996), + 57: uint16(24009), + 58: uint16(24013), + 59: uint16(24019), + 60: uint16(24018), + 61: uint16(24022), + 62: uint16(24027), + 63: uint16(24043), + 64: uint16(24050), + 65: uint16(24053), + 66: uint16(24075), + 67: uint16(24090), + 68: uint16(24089), + 69: uint16(24081), + 70: uint16(24091), + 71: uint16(24118), + 72: uint16(24119), + 73: uint16(24132), + 74: uint16(24131), + 75: uint16(24128), + 76: uint16(24142), + 77: uint16(24151), + 78: uint16(24148), + 79: uint16(24159), + 80: uint16(24162), + 81: uint16(24164), + 82: uint16(24135), + 83: uint16(24181), + 84: uint16(24182), + 85: uint16(24186), + 86: uint16(40636), + 87: uint16(24191), + 88: uint16(24224), + 89: uint16(24257), + 90: uint16(24258), + 91: uint16(24264), + 92: uint16(24272), + 93: uint16(24271), + }, + 54: { + 0: uint16(24278), + 1: uint16(24291), + 2: uint16(24285), + 3: uint16(24282), + 4: uint16(24283), + 5: uint16(24290), + 6: uint16(24289), + 7: uint16(24296), + 8: uint16(24297), + 9: uint16(24300), + 10: uint16(24305), + 11: uint16(24307), + 12: uint16(24304), + 13: uint16(24308), + 14: uint16(24312), + 15: uint16(24318), + 16: uint16(24323), + 17: uint16(24329), + 18: uint16(24413), + 19: uint16(24412), + 20: uint16(24331), + 21: uint16(24337), + 22: uint16(24342), + 23: uint16(24361), + 24: uint16(24365), + 25: uint16(24376), + 26: uint16(24385), + 27: uint16(24392), + 28: uint16(24396), + 29: uint16(24398), + 30: uint16(24367), + 31: uint16(24401), + 32: uint16(24406), + 33: uint16(24407), + 34: uint16(24409), + 35: uint16(24417), + 36: uint16(24429), + 37: uint16(24435), + 38: uint16(24439), + 39: uint16(24451), + 40: uint16(24450), + 41: uint16(24447), + 42: uint16(24458), + 43: uint16(24456), + 44: uint16(24465), + 45: uint16(24455), + 46: uint16(24478), + 47: uint16(24473), + 48: uint16(24472), + 49: uint16(24480), + 50: uint16(24488), + 51: uint16(24493), + 52: uint16(24508), + 53: uint16(24534), + 54: uint16(24571), + 55: uint16(24548), + 56: uint16(24568), + 57: uint16(24561), + 58: uint16(24541), + 59: uint16(24755), + 60: uint16(24575), + 61: uint16(24609), + 62: uint16(24672), + 63: uint16(24601), + 64: uint16(24592), + 65: uint16(24617), + 66: uint16(24590), + 67: uint16(24625), + 68: uint16(24603), + 69: uint16(24597), + 70: uint16(24619), + 71: uint16(24614), + 72: uint16(24591), + 73: uint16(24634), + 74: uint16(24666), + 75: uint16(24641), + 76: uint16(24682), + 77: uint16(24695), + 78: uint16(24671), + 79: uint16(24650), + 80: uint16(24646), + 81: uint16(24653), + 82: uint16(24675), + 83: uint16(24643), + 84: uint16(24676), + 85: uint16(24642), + 86: uint16(24684), + 87: uint16(24683), + 88: uint16(24665), + 89: uint16(24705), + 90: uint16(24717), + 91: uint16(24807), + 92: uint16(24707), + 93: uint16(24730), + }, + 55: { + 0: uint16(24708), + 1: uint16(24731), + 2: uint16(24726), + 3: uint16(24727), + 4: uint16(24722), + 5: uint16(24743), + 6: uint16(24715), + 7: uint16(24801), + 8: uint16(24760), + 9: uint16(24800), + 10: uint16(24787), + 11: uint16(24756), + 12: uint16(24560), + 13: uint16(24765), + 14: uint16(24774), + 15: uint16(24757), + 16: uint16(24792), + 17: uint16(24909), + 18: uint16(24853), + 19: uint16(24838), + 20: uint16(24822), + 21: uint16(24823), + 22: uint16(24832), + 23: uint16(24820), + 24: uint16(24826), + 25: uint16(24835), + 26: uint16(24865), + 27: uint16(24827), + 28: uint16(24817), + 29: uint16(24845), + 30: uint16(24846), + 31: uint16(24903), + 32: uint16(24894), + 33: uint16(24872), + 34: uint16(24871), + 35: uint16(24906), + 36: uint16(24895), + 37: uint16(24892), + 38: uint16(24876), + 39: uint16(24884), + 40: uint16(24893), + 41: uint16(24898), + 42: uint16(24900), + 43: uint16(24947), + 44: uint16(24951), + 45: uint16(24920), + 46: uint16(24921), + 47: uint16(24922), + 48: uint16(24939), + 49: uint16(24948), + 50: uint16(24943), + 51: uint16(24933), + 52: uint16(24945), + 53: uint16(24927), + 54: uint16(24925), + 55: uint16(24915), + 56: uint16(24949), + 57: uint16(24985), + 58: uint16(24982), + 59: uint16(24967), + 60: uint16(25004), + 61: uint16(24980), + 62: uint16(24986), + 63: uint16(24970), + 64: uint16(24977), + 65: uint16(25003), + 66: uint16(25006), + 67: uint16(25036), + 68: uint16(25034), + 69: uint16(25033), + 70: uint16(25079), + 71: uint16(25032), + 72: uint16(25027), + 73: uint16(25030), + 74: uint16(25018), + 75: uint16(25035), + 76: uint16(32633), + 77: uint16(25037), + 78: uint16(25062), + 79: uint16(25059), + 80: uint16(25078), + 81: uint16(25082), + 82: uint16(25076), + 83: uint16(25087), + 84: uint16(25085), + 85: uint16(25084), + 86: uint16(25086), + 87: uint16(25088), + 88: uint16(25096), + 89: uint16(25097), + 90: uint16(25101), + 91: uint16(25100), + 92: uint16(25108), + 93: uint16(25115), + }, + 56: { + 0: uint16(25118), + 1: uint16(25121), + 2: uint16(25130), + 3: uint16(25134), + 4: uint16(25136), + 5: uint16(25138), + 6: uint16(25139), + 7: uint16(25153), + 8: uint16(25166), + 9: uint16(25182), + 10: uint16(25187), + 11: uint16(25179), + 12: uint16(25184), + 13: uint16(25192), + 14: uint16(25212), + 15: uint16(25218), + 16: uint16(25225), + 17: uint16(25214), + 18: uint16(25234), + 19: uint16(25235), + 20: uint16(25238), + 21: uint16(25300), + 22: uint16(25219), + 23: uint16(25236), + 24: uint16(25303), + 25: uint16(25297), + 26: uint16(25275), + 27: uint16(25295), + 28: uint16(25343), + 29: uint16(25286), + 30: uint16(25812), + 31: uint16(25288), + 32: uint16(25308), + 33: uint16(25292), + 34: uint16(25290), + 35: uint16(25282), + 36: uint16(25287), + 37: uint16(25243), + 38: uint16(25289), + 39: uint16(25356), + 40: uint16(25326), + 41: uint16(25329), + 42: uint16(25383), + 43: uint16(25346), + 44: uint16(25352), + 45: uint16(25327), + 46: uint16(25333), + 47: uint16(25424), + 48: uint16(25406), + 49: uint16(25421), + 50: uint16(25628), + 51: uint16(25423), + 52: uint16(25494), + 53: uint16(25486), + 54: uint16(25472), + 55: uint16(25515), + 56: uint16(25462), + 57: uint16(25507), + 58: uint16(25487), + 59: uint16(25481), + 60: uint16(25503), + 61: uint16(25525), + 62: uint16(25451), + 63: uint16(25449), + 64: uint16(25534), + 65: uint16(25577), + 66: uint16(25536), + 67: uint16(25542), + 68: uint16(25571), + 69: uint16(25545), + 70: uint16(25554), + 71: uint16(25590), + 72: uint16(25540), + 73: uint16(25622), + 74: uint16(25652), + 75: uint16(25606), + 76: uint16(25619), + 77: uint16(25638), + 78: uint16(25654), + 79: uint16(25885), + 80: uint16(25623), + 81: uint16(25640), + 82: uint16(25615), + 83: uint16(25703), + 84: uint16(25711), + 85: uint16(25718), + 86: uint16(25678), + 87: uint16(25898), + 88: uint16(25749), + 89: uint16(25747), + 90: uint16(25765), + 91: uint16(25769), + 92: uint16(25736), + 93: uint16(25788), + }, + 57: { + 0: uint16(25818), + 1: uint16(25810), + 2: uint16(25797), + 3: uint16(25799), + 4: uint16(25787), + 5: uint16(25816), + 6: uint16(25794), + 7: uint16(25841), + 8: uint16(25831), + 9: uint16(33289), + 10: uint16(25824), + 11: uint16(25825), + 12: uint16(25260), + 13: uint16(25827), + 14: uint16(25839), + 15: uint16(25900), + 16: uint16(25846), + 17: uint16(25844), + 18: uint16(25842), + 19: uint16(25850), + 20: uint16(25856), + 21: uint16(25853), + 22: uint16(25880), + 23: uint16(25884), + 24: uint16(25861), + 25: uint16(25892), + 26: uint16(25891), + 27: uint16(25899), + 28: uint16(25908), + 29: uint16(25909), + 30: uint16(25911), + 31: uint16(25910), + 32: uint16(25912), + 33: uint16(30027), + 34: uint16(25928), + 35: uint16(25942), + 36: uint16(25941), + 37: uint16(25933), + 38: uint16(25944), + 39: uint16(25950), + 40: uint16(25949), + 41: uint16(25970), + 42: uint16(25976), + 43: uint16(25986), + 44: uint16(25987), + 45: uint16(35722), + 46: uint16(26011), + 47: uint16(26015), + 48: uint16(26027), + 49: uint16(26039), + 50: uint16(26051), + 51: uint16(26054), + 52: uint16(26049), + 53: uint16(26052), + 54: uint16(26060), + 55: uint16(26066), + 56: uint16(26075), + 57: uint16(26073), + 58: uint16(26080), + 59: uint16(26081), + 60: uint16(26097), + 61: uint16(26482), + 62: uint16(26122), + 63: uint16(26115), + 64: uint16(26107), + 65: uint16(26483), + 66: uint16(26165), + 67: uint16(26166), + 68: uint16(26164), + 69: uint16(26140), + 70: uint16(26191), + 71: uint16(26180), + 72: uint16(26185), + 73: uint16(26177), + 74: uint16(26206), + 75: uint16(26205), + 76: uint16(26212), + 77: uint16(26215), + 78: uint16(26216), + 79: uint16(26207), + 80: uint16(26210), + 81: uint16(26224), + 82: uint16(26243), + 83: uint16(26248), + 84: uint16(26254), + 85: uint16(26249), + 86: uint16(26244), + 87: uint16(26264), + 88: uint16(26269), + 89: uint16(26305), + 90: uint16(26297), + 91: uint16(26313), + 92: uint16(26302), + 93: uint16(26300), + }, + 58: { + 0: uint16(26308), + 1: uint16(26296), + 2: uint16(26326), + 3: uint16(26330), + 4: uint16(26336), + 5: uint16(26175), + 6: uint16(26342), + 7: uint16(26345), + 8: uint16(26352), + 9: uint16(26357), + 10: uint16(26359), + 11: uint16(26383), + 12: uint16(26390), + 13: uint16(26398), + 14: uint16(26406), + 15: uint16(26407), + 16: uint16(38712), + 17: uint16(26414), + 18: uint16(26431), + 19: uint16(26422), + 20: uint16(26433), + 21: uint16(26424), + 22: uint16(26423), + 23: uint16(26438), + 24: uint16(26462), + 25: uint16(26464), + 26: uint16(26457), + 27: uint16(26467), + 28: uint16(26468), + 29: uint16(26505), + 30: uint16(26480), + 31: uint16(26537), + 32: uint16(26492), + 33: uint16(26474), + 34: uint16(26508), + 35: uint16(26507), + 36: uint16(26534), + 37: uint16(26529), + 38: uint16(26501), + 39: uint16(26551), + 40: uint16(26607), + 41: uint16(26548), + 42: uint16(26604), + 43: uint16(26547), + 44: uint16(26601), + 45: uint16(26552), + 46: uint16(26596), + 47: uint16(26590), + 48: uint16(26589), + 49: uint16(26594), + 50: uint16(26606), + 51: uint16(26553), + 52: uint16(26574), + 53: uint16(26566), + 54: uint16(26599), + 55: uint16(27292), + 56: uint16(26654), + 57: uint16(26694), + 58: uint16(26665), + 59: uint16(26688), + 60: uint16(26701), + 61: uint16(26674), + 62: uint16(26702), + 63: uint16(26803), + 64: uint16(26667), + 65: uint16(26713), + 66: uint16(26723), + 67: uint16(26743), + 68: uint16(26751), + 69: uint16(26783), + 70: uint16(26767), + 71: uint16(26797), + 72: uint16(26772), + 73: uint16(26781), + 74: uint16(26779), + 75: uint16(26755), + 76: uint16(27310), + 77: uint16(26809), + 78: uint16(26740), + 79: uint16(26805), + 80: uint16(26784), + 81: uint16(26810), + 82: uint16(26895), + 83: uint16(26765), + 84: uint16(26750), + 85: uint16(26881), + 86: uint16(26826), + 87: uint16(26888), + 88: uint16(26840), + 89: uint16(26914), + 90: uint16(26918), + 91: uint16(26849), + 92: uint16(26892), + 93: uint16(26829), + }, + 59: { + 0: uint16(26836), + 1: uint16(26855), + 2: uint16(26837), + 3: uint16(26934), + 4: uint16(26898), + 5: uint16(26884), + 6: uint16(26839), + 7: uint16(26851), + 8: uint16(26917), + 9: uint16(26873), + 10: uint16(26848), + 11: uint16(26863), + 12: uint16(26920), + 13: uint16(26922), + 14: uint16(26906), + 15: uint16(26915), + 16: uint16(26913), + 17: uint16(26822), + 18: uint16(27001), + 19: uint16(26999), + 20: uint16(26972), + 21: uint16(27000), + 22: uint16(26987), + 23: uint16(26964), + 24: uint16(27006), + 25: uint16(26990), + 26: uint16(26937), + 27: uint16(26996), + 28: uint16(26941), + 29: uint16(26969), + 30: uint16(26928), + 31: uint16(26977), + 32: uint16(26974), + 33: uint16(26973), + 34: uint16(27009), + 35: uint16(26986), + 36: uint16(27058), + 37: uint16(27054), + 38: uint16(27088), + 39: uint16(27071), + 40: uint16(27073), + 41: uint16(27091), + 42: uint16(27070), + 43: uint16(27086), + 44: uint16(23528), + 45: uint16(27082), + 46: uint16(27101), + 47: uint16(27067), + 48: uint16(27075), + 49: uint16(27047), + 50: uint16(27182), + 51: uint16(27025), + 52: uint16(27040), + 53: uint16(27036), + 54: uint16(27029), + 55: uint16(27060), + 56: uint16(27102), + 57: uint16(27112), + 58: uint16(27138), + 59: uint16(27163), + 60: uint16(27135), + 61: uint16(27402), + 62: uint16(27129), + 63: uint16(27122), + 64: uint16(27111), + 65: uint16(27141), + 66: uint16(27057), + 67: uint16(27166), + 68: uint16(27117), + 69: uint16(27156), + 70: uint16(27115), + 71: uint16(27146), + 72: uint16(27154), + 73: uint16(27329), + 74: uint16(27171), + 75: uint16(27155), + 76: uint16(27204), + 77: uint16(27148), + 78: uint16(27250), + 79: uint16(27190), + 80: uint16(27256), + 81: uint16(27207), + 82: uint16(27234), + 83: uint16(27225), + 84: uint16(27238), + 85: uint16(27208), + 86: uint16(27192), + 87: uint16(27170), + 88: uint16(27280), + 89: uint16(27277), + 90: uint16(27296), + 91: uint16(27268), + 92: uint16(27298), + 93: uint16(27299), + }, + 60: { + 0: uint16(27287), + 1: uint16(34327), + 2: uint16(27323), + 3: uint16(27331), + 4: uint16(27330), + 5: uint16(27320), + 6: uint16(27315), + 7: uint16(27308), + 8: uint16(27358), + 9: uint16(27345), + 10: uint16(27359), + 11: uint16(27306), + 12: uint16(27354), + 13: uint16(27370), + 14: uint16(27387), + 15: uint16(27397), + 16: uint16(34326), + 17: uint16(27386), + 18: uint16(27410), + 19: uint16(27414), + 20: uint16(39729), + 21: uint16(27423), + 22: uint16(27448), + 23: uint16(27447), + 24: uint16(30428), + 25: uint16(27449), + 26: uint16(39150), + 27: uint16(27463), + 28: uint16(27459), + 29: uint16(27465), + 30: uint16(27472), + 31: uint16(27481), + 32: uint16(27476), + 33: uint16(27483), + 34: uint16(27487), + 35: uint16(27489), + 36: uint16(27512), + 37: uint16(27513), + 38: uint16(27519), + 39: uint16(27520), + 40: uint16(27524), + 41: uint16(27523), + 42: uint16(27533), + 43: uint16(27544), + 44: uint16(27541), + 45: uint16(27550), + 46: uint16(27556), + 47: uint16(27562), + 48: uint16(27563), + 49: uint16(27567), + 50: uint16(27570), + 51: uint16(27569), + 52: uint16(27571), + 53: uint16(27575), + 54: uint16(27580), + 55: uint16(27590), + 56: uint16(27595), + 57: uint16(27603), + 58: uint16(27615), + 59: uint16(27628), + 60: uint16(27627), + 61: uint16(27635), + 62: uint16(27631), + 63: uint16(40638), + 64: uint16(27656), + 65: uint16(27667), + 66: uint16(27668), + 67: uint16(27675), + 68: uint16(27684), + 69: uint16(27683), + 70: uint16(27742), + 71: uint16(27733), + 72: uint16(27746), + 73: uint16(27754), + 74: uint16(27778), + 75: uint16(27789), + 76: uint16(27802), + 77: uint16(27777), + 78: uint16(27803), + 79: uint16(27774), + 80: uint16(27752), + 81: uint16(27763), + 82: uint16(27794), + 83: uint16(27792), + 84: uint16(27844), + 85: uint16(27889), + 86: uint16(27859), + 87: uint16(27837), + 88: uint16(27863), + 89: uint16(27845), + 90: uint16(27869), + 91: uint16(27822), + 92: uint16(27825), + 93: uint16(27838), + }, + 61: { + 0: uint16(27834), + 1: uint16(27867), + 2: uint16(27887), + 3: uint16(27865), + 4: uint16(27882), + 5: uint16(27935), + 6: uint16(34893), + 7: uint16(27958), + 8: uint16(27947), + 9: uint16(27965), + 10: uint16(27960), + 11: uint16(27929), + 12: uint16(27957), + 13: uint16(27955), + 14: uint16(27922), + 15: uint16(27916), + 16: uint16(28003), + 17: uint16(28051), + 18: uint16(28004), + 19: uint16(27994), + 20: uint16(28025), + 21: uint16(27993), + 22: uint16(28046), + 23: uint16(28053), + 24: uint16(28644), + 25: uint16(28037), + 26: uint16(28153), + 27: uint16(28181), + 28: uint16(28170), + 29: uint16(28085), + 30: uint16(28103), + 31: uint16(28134), + 32: uint16(28088), + 33: uint16(28102), + 34: uint16(28140), + 35: uint16(28126), + 36: uint16(28108), + 37: uint16(28136), + 38: uint16(28114), + 39: uint16(28101), + 40: uint16(28154), + 41: uint16(28121), + 42: uint16(28132), + 43: uint16(28117), + 44: uint16(28138), + 45: uint16(28142), + 46: uint16(28205), + 47: uint16(28270), + 48: uint16(28206), + 49: uint16(28185), + 50: uint16(28274), + 51: uint16(28255), + 52: uint16(28222), + 53: uint16(28195), + 54: uint16(28267), + 55: uint16(28203), + 56: uint16(28278), + 57: uint16(28237), + 58: uint16(28191), + 59: uint16(28227), + 60: uint16(28218), + 61: uint16(28238), + 62: uint16(28196), + 63: uint16(28415), + 64: uint16(28189), + 65: uint16(28216), + 66: uint16(28290), + 67: uint16(28330), + 68: uint16(28312), + 69: uint16(28361), + 70: uint16(28343), + 71: uint16(28371), + 72: uint16(28349), + 73: uint16(28335), + 74: uint16(28356), + 75: uint16(28338), + 76: uint16(28372), + 77: uint16(28373), + 78: uint16(28303), + 79: uint16(28325), + 80: uint16(28354), + 81: uint16(28319), + 82: uint16(28481), + 83: uint16(28433), + 84: uint16(28748), + 85: uint16(28396), + 86: uint16(28408), + 87: uint16(28414), + 88: uint16(28479), + 89: uint16(28402), + 90: uint16(28465), + 91: uint16(28399), + 92: uint16(28466), + 93: uint16(28364), + }, + 62: { + 0: uint16(28478), + 1: uint16(28435), + 2: uint16(28407), + 3: uint16(28550), + 4: uint16(28538), + 5: uint16(28536), + 6: uint16(28545), + 7: uint16(28544), + 8: uint16(28527), + 9: uint16(28507), + 10: uint16(28659), + 11: uint16(28525), + 12: uint16(28546), + 13: uint16(28540), + 14: uint16(28504), + 15: uint16(28558), + 16: uint16(28561), + 17: uint16(28610), + 18: uint16(28518), + 19: uint16(28595), + 20: uint16(28579), + 21: uint16(28577), + 22: uint16(28580), + 23: uint16(28601), + 24: uint16(28614), + 25: uint16(28586), + 26: uint16(28639), + 27: uint16(28629), + 28: uint16(28652), + 29: uint16(28628), + 30: uint16(28632), + 31: uint16(28657), + 32: uint16(28654), + 33: uint16(28635), + 34: uint16(28681), + 35: uint16(28683), + 36: uint16(28666), + 37: uint16(28689), + 38: uint16(28673), + 39: uint16(28687), + 40: uint16(28670), + 41: uint16(28699), + 42: uint16(28698), + 43: uint16(28532), + 44: uint16(28701), + 45: uint16(28696), + 46: uint16(28703), + 47: uint16(28720), + 48: uint16(28734), + 49: uint16(28722), + 50: uint16(28753), + 51: uint16(28771), + 52: uint16(28825), + 53: uint16(28818), + 54: uint16(28847), + 55: uint16(28913), + 56: uint16(28844), + 57: uint16(28856), + 58: uint16(28851), + 59: uint16(28846), + 60: uint16(28895), + 61: uint16(28875), + 62: uint16(28893), + 63: uint16(28889), + 64: uint16(28937), + 65: uint16(28925), + 66: uint16(28956), + 67: uint16(28953), + 68: uint16(29029), + 69: uint16(29013), + 70: uint16(29064), + 71: uint16(29030), + 72: uint16(29026), + 73: uint16(29004), + 74: uint16(29014), + 75: uint16(29036), + 76: uint16(29071), + 77: uint16(29179), + 78: uint16(29060), + 79: uint16(29077), + 80: uint16(29096), + 81: uint16(29100), + 82: uint16(29143), + 83: uint16(29113), + 84: uint16(29118), + 85: uint16(29138), + 86: uint16(29129), + 87: uint16(29140), + 88: uint16(29134), + 89: uint16(29152), + 90: uint16(29164), + 91: uint16(29159), + 92: uint16(29173), + 93: uint16(29180), + }, + 63: { + 0: uint16(29177), + 1: uint16(29183), + 2: uint16(29197), + 3: uint16(29200), + 4: uint16(29211), + 5: uint16(29224), + 6: uint16(29229), + 7: uint16(29228), + 8: uint16(29232), + 9: uint16(29234), + 10: uint16(29243), + 11: uint16(29244), + 12: uint16(29247), + 13: uint16(29248), + 14: uint16(29254), + 15: uint16(29259), + 16: uint16(29272), + 17: uint16(29300), + 18: uint16(29310), + 19: uint16(29314), + 20: uint16(29313), + 21: uint16(29319), + 22: uint16(29330), + 23: uint16(29334), + 24: uint16(29346), + 25: uint16(29351), + 26: uint16(29369), + 27: uint16(29362), + 28: uint16(29379), + 29: uint16(29382), + 30: uint16(29380), + 31: uint16(29390), + 32: uint16(29394), + 33: uint16(29410), + 34: uint16(29408), + 35: uint16(29409), + 36: uint16(29433), + 37: uint16(29431), + 38: uint16(20495), + 39: uint16(29463), + 40: uint16(29450), + 41: uint16(29468), + 42: uint16(29462), + 43: uint16(29469), + 44: uint16(29492), + 45: uint16(29487), + 46: uint16(29481), + 47: uint16(29477), + 48: uint16(29502), + 49: uint16(29518), + 50: uint16(29519), + 51: uint16(40664), + 52: uint16(29527), + 53: uint16(29546), + 54: uint16(29544), + 55: uint16(29552), + 56: uint16(29560), + 57: uint16(29557), + 58: uint16(29563), + 59: uint16(29562), + 60: uint16(29640), + 61: uint16(29619), + 62: uint16(29646), + 63: uint16(29627), + 64: uint16(29632), + 65: uint16(29669), + 66: uint16(29678), + 67: uint16(29662), + 68: uint16(29858), + 69: uint16(29701), + 70: uint16(29807), + 71: uint16(29733), + 72: uint16(29688), + 73: uint16(29746), + 74: uint16(29754), + 75: uint16(29781), + 76: uint16(29759), + 77: uint16(29791), + 78: uint16(29785), + 79: uint16(29761), + 80: uint16(29788), + 81: uint16(29801), + 82: uint16(29808), + 83: uint16(29795), + 84: uint16(29802), + 85: uint16(29814), + 86: uint16(29822), + 87: uint16(29835), + 88: uint16(29854), + 89: uint16(29863), + 90: uint16(29898), + 91: uint16(29903), + 92: uint16(29908), + 93: uint16(29681), + }, + 64: { + 0: uint16(29920), + 1: uint16(29923), + 2: uint16(29927), + 3: uint16(29929), + 4: uint16(29934), + 5: uint16(29938), + 6: uint16(29936), + 7: uint16(29937), + 8: uint16(29944), + 9: uint16(29943), + 10: uint16(29956), + 11: uint16(29955), + 12: uint16(29957), + 13: uint16(29964), + 14: uint16(29966), + 15: uint16(29965), + 16: uint16(29973), + 17: uint16(29971), + 18: uint16(29982), + 19: uint16(29990), + 20: uint16(29996), + 21: uint16(30012), + 22: uint16(30020), + 23: uint16(30029), + 24: uint16(30026), + 25: uint16(30025), + 26: uint16(30043), + 27: uint16(30022), + 28: uint16(30042), + 29: uint16(30057), + 30: uint16(30052), + 31: uint16(30055), + 32: uint16(30059), + 33: uint16(30061), + 34: uint16(30072), + 35: uint16(30070), + 36: uint16(30086), + 37: uint16(30087), + 38: uint16(30068), + 39: uint16(30090), + 40: uint16(30089), + 41: uint16(30082), + 42: uint16(30100), + 43: uint16(30106), + 44: uint16(30109), + 45: uint16(30117), + 46: uint16(30115), + 47: uint16(30146), + 48: uint16(30131), + 49: uint16(30147), + 50: uint16(30133), + 51: uint16(30141), + 52: uint16(30136), + 53: uint16(30140), + 54: uint16(30129), + 55: uint16(30157), + 56: uint16(30154), + 57: uint16(30162), + 58: uint16(30169), + 59: uint16(30179), + 60: uint16(30174), + 61: uint16(30206), + 62: uint16(30207), + 63: uint16(30204), + 64: uint16(30209), + 65: uint16(30192), + 66: uint16(30202), + 67: uint16(30194), + 68: uint16(30195), + 69: uint16(30219), + 70: uint16(30221), + 71: uint16(30217), + 72: uint16(30239), + 73: uint16(30247), + 74: uint16(30240), + 75: uint16(30241), + 76: uint16(30242), + 77: uint16(30244), + 78: uint16(30260), + 79: uint16(30256), + 80: uint16(30267), + 81: uint16(30279), + 82: uint16(30280), + 83: uint16(30278), + 84: uint16(30300), + 85: uint16(30296), + 86: uint16(30305), + 87: uint16(30306), + 88: uint16(30312), + 89: uint16(30313), + 90: uint16(30314), + 91: uint16(30311), + 92: uint16(30316), + 93: uint16(30320), + }, + 65: { + 0: uint16(30322), + 1: uint16(30326), + 2: uint16(30328), + 3: uint16(30332), + 4: uint16(30336), + 5: uint16(30339), + 6: uint16(30344), + 7: uint16(30347), + 8: uint16(30350), + 9: uint16(30358), + 10: uint16(30355), + 11: uint16(30361), + 12: uint16(30362), + 13: uint16(30384), + 14: uint16(30388), + 15: uint16(30392), + 16: uint16(30393), + 17: uint16(30394), + 18: uint16(30402), + 19: uint16(30413), + 20: uint16(30422), + 21: uint16(30418), + 22: uint16(30430), + 23: uint16(30433), + 24: uint16(30437), + 25: uint16(30439), + 26: uint16(30442), + 27: uint16(34351), + 28: uint16(30459), + 29: uint16(30472), + 30: uint16(30471), + 31: uint16(30468), + 32: uint16(30505), + 33: uint16(30500), + 34: uint16(30494), + 35: uint16(30501), + 36: uint16(30502), + 37: uint16(30491), + 38: uint16(30519), + 39: uint16(30520), + 40: uint16(30535), + 41: uint16(30554), + 42: uint16(30568), + 43: uint16(30571), + 44: uint16(30555), + 45: uint16(30565), + 46: uint16(30591), + 47: uint16(30590), + 48: uint16(30585), + 49: uint16(30606), + 50: uint16(30603), + 51: uint16(30609), + 52: uint16(30624), + 53: uint16(30622), + 54: uint16(30640), + 55: uint16(30646), + 56: uint16(30649), + 57: uint16(30655), + 58: uint16(30652), + 59: uint16(30653), + 60: uint16(30651), + 61: uint16(30663), + 62: uint16(30669), + 63: uint16(30679), + 64: uint16(30682), + 65: uint16(30684), + 66: uint16(30691), + 67: uint16(30702), + 68: uint16(30716), + 69: uint16(30732), + 70: uint16(30738), + 71: uint16(31014), + 72: uint16(30752), + 73: uint16(31018), + 74: uint16(30789), + 75: uint16(30862), + 76: uint16(30836), + 77: uint16(30854), + 78: uint16(30844), + 79: uint16(30874), + 80: uint16(30860), + 81: uint16(30883), + 82: uint16(30901), + 83: uint16(30890), + 84: uint16(30895), + 85: uint16(30929), + 86: uint16(30918), + 87: uint16(30923), + 88: uint16(30932), + 89: uint16(30910), + 90: uint16(30908), + 91: uint16(30917), + 92: uint16(30922), + 93: uint16(30956), + }, + 66: { + 0: uint16(30951), + 1: uint16(30938), + 2: uint16(30973), + 3: uint16(30964), + 4: uint16(30983), + 5: uint16(30994), + 6: uint16(30993), + 7: uint16(31001), + 8: uint16(31020), + 9: uint16(31019), + 10: uint16(31040), + 11: uint16(31072), + 12: uint16(31063), + 13: uint16(31071), + 14: uint16(31066), + 15: uint16(31061), + 16: uint16(31059), + 17: uint16(31098), + 18: uint16(31103), + 19: uint16(31114), + 20: uint16(31133), + 21: uint16(31143), + 22: uint16(40779), + 23: uint16(31146), + 24: uint16(31150), + 25: uint16(31155), + 26: uint16(31161), + 27: uint16(31162), + 28: uint16(31177), + 29: uint16(31189), + 30: uint16(31207), + 31: uint16(31212), + 32: uint16(31201), + 33: uint16(31203), + 34: uint16(31240), + 35: uint16(31245), + 36: uint16(31256), + 37: uint16(31257), + 38: uint16(31264), + 39: uint16(31263), + 40: uint16(31104), + 41: uint16(31281), + 42: uint16(31291), + 43: uint16(31294), + 44: uint16(31287), + 45: uint16(31299), + 46: uint16(31319), + 47: uint16(31305), + 48: uint16(31329), + 49: uint16(31330), + 50: uint16(31337), + 51: uint16(40861), + 52: uint16(31344), + 53: uint16(31353), + 54: uint16(31357), + 55: uint16(31368), + 56: uint16(31383), + 57: uint16(31381), + 58: uint16(31384), + 59: uint16(31382), + 60: uint16(31401), + 61: uint16(31432), + 62: uint16(31408), + 63: uint16(31414), + 64: uint16(31429), + 65: uint16(31428), + 66: uint16(31423), + 67: uint16(36995), + 68: uint16(31431), + 69: uint16(31434), + 70: uint16(31437), + 71: uint16(31439), + 72: uint16(31445), + 73: uint16(31443), + 74: uint16(31449), + 75: uint16(31450), + 76: uint16(31453), + 77: uint16(31457), + 78: uint16(31458), + 79: uint16(31462), + 80: uint16(31469), + 81: uint16(31472), + 82: uint16(31490), + 83: uint16(31503), + 84: uint16(31498), + 85: uint16(31494), + 86: uint16(31539), + 87: uint16(31512), + 88: uint16(31513), + 89: uint16(31518), + 90: uint16(31541), + 91: uint16(31528), + 92: uint16(31542), + 93: uint16(31568), + }, + 67: { + 0: uint16(31610), + 1: uint16(31492), + 2: uint16(31565), + 3: uint16(31499), + 4: uint16(31564), + 5: uint16(31557), + 6: uint16(31605), + 7: uint16(31589), + 8: uint16(31604), + 9: uint16(31591), + 10: uint16(31600), + 11: uint16(31601), + 12: uint16(31596), + 13: uint16(31598), + 14: uint16(31645), + 15: uint16(31640), + 16: uint16(31647), + 17: uint16(31629), + 18: uint16(31644), + 19: uint16(31642), + 20: uint16(31627), + 21: uint16(31634), + 22: uint16(31631), + 23: uint16(31581), + 24: uint16(31641), + 25: uint16(31691), + 26: uint16(31681), + 27: uint16(31692), + 28: uint16(31695), + 29: uint16(31668), + 30: uint16(31686), + 31: uint16(31709), + 32: uint16(31721), + 33: uint16(31761), + 34: uint16(31764), + 35: uint16(31718), + 36: uint16(31717), + 37: uint16(31840), + 38: uint16(31744), + 39: uint16(31751), + 40: uint16(31763), + 41: uint16(31731), + 42: uint16(31735), + 43: uint16(31767), + 44: uint16(31757), + 45: uint16(31734), + 46: uint16(31779), + 47: uint16(31783), + 48: uint16(31786), + 49: uint16(31775), + 50: uint16(31799), + 51: uint16(31787), + 52: uint16(31805), + 53: uint16(31820), + 54: uint16(31811), + 55: uint16(31828), + 56: uint16(31823), + 57: uint16(31808), + 58: uint16(31824), + 59: uint16(31832), + 60: uint16(31839), + 61: uint16(31844), + 62: uint16(31830), + 63: uint16(31845), + 64: uint16(31852), + 65: uint16(31861), + 66: uint16(31875), + 67: uint16(31888), + 68: uint16(31908), + 69: uint16(31917), + 70: uint16(31906), + 71: uint16(31915), + 72: uint16(31905), + 73: uint16(31912), + 74: uint16(31923), + 75: uint16(31922), + 76: uint16(31921), + 77: uint16(31918), + 78: uint16(31929), + 79: uint16(31933), + 80: uint16(31936), + 81: uint16(31941), + 82: uint16(31938), + 83: uint16(31960), + 84: uint16(31954), + 85: uint16(31964), + 86: uint16(31970), + 87: uint16(39739), + 88: uint16(31983), + 89: uint16(31986), + 90: uint16(31988), + 91: uint16(31990), + 92: uint16(31994), + 93: uint16(32006), + }, + 68: { + 0: uint16(32002), + 1: uint16(32028), + 2: uint16(32021), + 3: uint16(32010), + 4: uint16(32069), + 5: uint16(32075), + 6: uint16(32046), + 7: uint16(32050), + 8: uint16(32063), + 9: uint16(32053), + 10: uint16(32070), + 11: uint16(32115), + 12: uint16(32086), + 13: uint16(32078), + 14: uint16(32114), + 15: uint16(32104), + 16: uint16(32110), + 17: uint16(32079), + 18: uint16(32099), + 19: uint16(32147), + 20: uint16(32137), + 21: uint16(32091), + 22: uint16(32143), + 23: uint16(32125), + 24: uint16(32155), + 25: uint16(32186), + 26: uint16(32174), + 27: uint16(32163), + 28: uint16(32181), + 29: uint16(32199), + 30: uint16(32189), + 31: uint16(32171), + 32: uint16(32317), + 33: uint16(32162), + 34: uint16(32175), + 35: uint16(32220), + 36: uint16(32184), + 37: uint16(32159), + 38: uint16(32176), + 39: uint16(32216), + 40: uint16(32221), + 41: uint16(32228), + 42: uint16(32222), + 43: uint16(32251), + 44: uint16(32242), + 45: uint16(32225), + 46: uint16(32261), + 47: uint16(32266), + 48: uint16(32291), + 49: uint16(32289), + 50: uint16(32274), + 51: uint16(32305), + 52: uint16(32287), + 53: uint16(32265), + 54: uint16(32267), + 55: uint16(32290), + 56: uint16(32326), + 57: uint16(32358), + 58: uint16(32315), + 59: uint16(32309), + 60: uint16(32313), + 61: uint16(32323), + 62: uint16(32311), + 63: uint16(32306), + 64: uint16(32314), + 65: uint16(32359), + 66: uint16(32349), + 67: uint16(32342), + 68: uint16(32350), + 69: uint16(32345), + 70: uint16(32346), + 71: uint16(32377), + 72: uint16(32362), + 73: uint16(32361), + 74: uint16(32380), + 75: uint16(32379), + 76: uint16(32387), + 77: uint16(32213), + 78: uint16(32381), + 79: uint16(36782), + 80: uint16(32383), + 81: uint16(32392), + 82: uint16(32393), + 83: uint16(32396), + 84: uint16(32402), + 85: uint16(32400), + 86: uint16(32403), + 87: uint16(32404), + 88: uint16(32406), + 89: uint16(32398), + 90: uint16(32411), + 91: uint16(32412), + 92: uint16(32568), + 93: uint16(32570), + }, + 69: { + 0: uint16(32581), + 1: uint16(32588), + 2: uint16(32589), + 3: uint16(32590), + 4: uint16(32592), + 5: uint16(32593), + 6: uint16(32597), + 7: uint16(32596), + 8: uint16(32600), + 9: uint16(32607), + 10: uint16(32608), + 11: uint16(32616), + 12: uint16(32617), + 13: uint16(32615), + 14: uint16(32632), + 15: uint16(32642), + 16: uint16(32646), + 17: uint16(32643), + 18: uint16(32648), + 19: uint16(32647), + 20: uint16(32652), + 21: uint16(32660), + 22: uint16(32670), + 23: uint16(32669), + 24: uint16(32666), + 25: uint16(32675), + 26: uint16(32687), + 27: uint16(32690), + 28: uint16(32697), + 29: uint16(32686), + 30: uint16(32694), + 31: uint16(32696), + 32: uint16(35697), + 33: uint16(32709), + 34: uint16(32710), + 35: uint16(32714), + 36: uint16(32725), + 37: uint16(32724), + 38: uint16(32737), + 39: uint16(32742), + 40: uint16(32745), + 41: uint16(32755), + 42: uint16(32761), + 43: uint16(39132), + 44: uint16(32774), + 45: uint16(32772), + 46: uint16(32779), + 47: uint16(32786), + 48: uint16(32792), + 49: uint16(32793), + 50: uint16(32796), + 51: uint16(32801), + 52: uint16(32808), + 53: uint16(32831), + 54: uint16(32827), + 55: uint16(32842), + 56: uint16(32838), + 57: uint16(32850), + 58: uint16(32856), + 59: uint16(32858), + 60: uint16(32863), + 61: uint16(32866), + 62: uint16(32872), + 63: uint16(32883), + 64: uint16(32882), + 65: uint16(32880), + 66: uint16(32886), + 67: uint16(32889), + 68: uint16(32893), + 69: uint16(32895), + 70: uint16(32900), + 71: uint16(32902), + 72: uint16(32901), + 73: uint16(32923), + 74: uint16(32915), + 75: uint16(32922), + 76: uint16(32941), + 77: uint16(20880), + 78: uint16(32940), + 79: uint16(32987), + 80: uint16(32997), + 81: uint16(32985), + 82: uint16(32989), + 83: uint16(32964), + 84: uint16(32986), + 85: uint16(32982), + 86: uint16(33033), + 87: uint16(33007), + 88: uint16(33009), + 89: uint16(33051), + 90: uint16(33065), + 91: uint16(33059), + 92: uint16(33071), + 93: uint16(33099), + }, + 70: { + 0: uint16(38539), + 1: uint16(33094), + 2: uint16(33086), + 3: uint16(33107), + 4: uint16(33105), + 5: uint16(33020), + 6: uint16(33137), + 7: uint16(33134), + 8: uint16(33125), + 9: uint16(33126), + 10: uint16(33140), + 11: uint16(33155), + 12: uint16(33160), + 13: uint16(33162), + 14: uint16(33152), + 15: uint16(33154), + 16: uint16(33184), + 17: uint16(33173), + 18: uint16(33188), + 19: uint16(33187), + 20: uint16(33119), + 21: uint16(33171), + 22: uint16(33193), + 23: uint16(33200), + 24: uint16(33205), + 25: uint16(33214), + 26: uint16(33208), + 27: uint16(33213), + 28: uint16(33216), + 29: uint16(33218), + 30: uint16(33210), + 31: uint16(33225), + 32: uint16(33229), + 33: uint16(33233), + 34: uint16(33241), + 35: uint16(33240), + 36: uint16(33224), + 37: uint16(33242), + 38: uint16(33247), + 39: uint16(33248), + 40: uint16(33255), + 41: uint16(33274), + 42: uint16(33275), + 43: uint16(33278), + 44: uint16(33281), + 45: uint16(33282), + 46: uint16(33285), + 47: uint16(33287), + 48: uint16(33290), + 49: uint16(33293), + 50: uint16(33296), + 51: uint16(33302), + 52: uint16(33321), + 53: uint16(33323), + 54: uint16(33336), + 55: uint16(33331), + 56: uint16(33344), + 57: uint16(33369), + 58: uint16(33368), + 59: uint16(33373), + 60: uint16(33370), + 61: uint16(33375), + 62: uint16(33380), + 63: uint16(33378), + 64: uint16(33384), + 65: uint16(33386), + 66: uint16(33387), + 67: uint16(33326), + 68: uint16(33393), + 69: uint16(33399), + 70: uint16(33400), + 71: uint16(33406), + 72: uint16(33421), + 73: uint16(33426), + 74: uint16(33451), + 75: uint16(33439), + 76: uint16(33467), + 77: uint16(33452), + 78: uint16(33505), + 79: uint16(33507), + 80: uint16(33503), + 81: uint16(33490), + 82: uint16(33524), + 83: uint16(33523), + 84: uint16(33530), + 85: uint16(33683), + 86: uint16(33539), + 87: uint16(33531), + 88: uint16(33529), + 89: uint16(33502), + 90: uint16(33542), + 91: uint16(33500), + 92: uint16(33545), + 93: uint16(33497), + }, + 71: { + 0: uint16(33589), + 1: uint16(33588), + 2: uint16(33558), + 3: uint16(33586), + 4: uint16(33585), + 5: uint16(33600), + 6: uint16(33593), + 7: uint16(33616), + 8: uint16(33605), + 9: uint16(33583), + 10: uint16(33579), + 11: uint16(33559), + 12: uint16(33560), + 13: uint16(33669), + 14: uint16(33690), + 15: uint16(33706), + 16: uint16(33695), + 17: uint16(33698), + 18: uint16(33686), + 19: uint16(33571), + 20: uint16(33678), + 21: uint16(33671), + 22: uint16(33674), + 23: uint16(33660), + 24: uint16(33717), + 25: uint16(33651), + 26: uint16(33653), + 27: uint16(33696), + 28: uint16(33673), + 29: uint16(33704), + 30: uint16(33780), + 31: uint16(33811), + 32: uint16(33771), + 33: uint16(33742), + 34: uint16(33789), + 35: uint16(33795), + 36: uint16(33752), + 37: uint16(33803), + 38: uint16(33729), + 39: uint16(33783), + 40: uint16(33799), + 41: uint16(33760), + 42: uint16(33778), + 43: uint16(33805), + 44: uint16(33826), + 45: uint16(33824), + 46: uint16(33725), + 47: uint16(33848), + 48: uint16(34054), + 49: uint16(33787), + 50: uint16(33901), + 51: uint16(33834), + 52: uint16(33852), + 53: uint16(34138), + 54: uint16(33924), + 55: uint16(33911), + 56: uint16(33899), + 57: uint16(33965), + 58: uint16(33902), + 59: uint16(33922), + 60: uint16(33897), + 61: uint16(33862), + 62: uint16(33836), + 63: uint16(33903), + 64: uint16(33913), + 65: uint16(33845), + 66: uint16(33994), + 67: uint16(33890), + 68: uint16(33977), + 69: uint16(33983), + 70: uint16(33951), + 71: uint16(34009), + 72: uint16(33997), + 73: uint16(33979), + 74: uint16(34010), + 75: uint16(34000), + 76: uint16(33985), + 77: uint16(33990), + 78: uint16(34006), + 79: uint16(33953), + 80: uint16(34081), + 81: uint16(34047), + 82: uint16(34036), + 83: uint16(34071), + 84: uint16(34072), + 85: uint16(34092), + 86: uint16(34079), + 87: uint16(34069), + 88: uint16(34068), + 89: uint16(34044), + 90: uint16(34112), + 91: uint16(34147), + 92: uint16(34136), + 93: uint16(34120), + }, + 72: { + 0: uint16(34113), + 1: uint16(34306), + 2: uint16(34123), + 3: uint16(34133), + 4: uint16(34176), + 5: uint16(34212), + 6: uint16(34184), + 7: uint16(34193), + 8: uint16(34186), + 9: uint16(34216), + 10: uint16(34157), + 11: uint16(34196), + 12: uint16(34203), + 13: uint16(34282), + 14: uint16(34183), + 15: uint16(34204), + 16: uint16(34167), + 17: uint16(34174), + 18: uint16(34192), + 19: uint16(34249), + 20: uint16(34234), + 21: uint16(34255), + 22: uint16(34233), + 23: uint16(34256), + 24: uint16(34261), + 25: uint16(34269), + 26: uint16(34277), + 27: uint16(34268), + 28: uint16(34297), + 29: uint16(34314), + 30: uint16(34323), + 31: uint16(34315), + 32: uint16(34302), + 33: uint16(34298), + 34: uint16(34310), + 35: uint16(34338), + 36: uint16(34330), + 37: uint16(34352), + 38: uint16(34367), + 39: uint16(34381), + 40: uint16(20053), + 41: uint16(34388), + 42: uint16(34399), + 43: uint16(34407), + 44: uint16(34417), + 45: uint16(34451), + 46: uint16(34467), + 47: uint16(34473), + 48: uint16(34474), + 49: uint16(34443), + 50: uint16(34444), + 51: uint16(34486), + 52: uint16(34479), + 53: uint16(34500), + 54: uint16(34502), + 55: uint16(34480), + 56: uint16(34505), + 57: uint16(34851), + 58: uint16(34475), + 59: uint16(34516), + 60: uint16(34526), + 61: uint16(34537), + 62: uint16(34540), + 63: uint16(34527), + 64: uint16(34523), + 65: uint16(34543), + 66: uint16(34578), + 67: uint16(34566), + 68: uint16(34568), + 69: uint16(34560), + 70: uint16(34563), + 71: uint16(34555), + 72: uint16(34577), + 73: uint16(34569), + 74: uint16(34573), + 75: uint16(34553), + 76: uint16(34570), + 77: uint16(34612), + 78: uint16(34623), + 79: uint16(34615), + 80: uint16(34619), + 81: uint16(34597), + 82: uint16(34601), + 83: uint16(34586), + 84: uint16(34656), + 85: uint16(34655), + 86: uint16(34680), + 87: uint16(34636), + 88: uint16(34638), + 89: uint16(34676), + 90: uint16(34647), + 91: uint16(34664), + 92: uint16(34670), + 93: uint16(34649), + }, + 73: { + 0: uint16(34643), + 1: uint16(34659), + 2: uint16(34666), + 3: uint16(34821), + 4: uint16(34722), + 5: uint16(34719), + 6: uint16(34690), + 7: uint16(34735), + 8: uint16(34763), + 9: uint16(34749), + 10: uint16(34752), + 11: uint16(34768), + 12: uint16(38614), + 13: uint16(34731), + 14: uint16(34756), + 15: uint16(34739), + 16: uint16(34759), + 17: uint16(34758), + 18: uint16(34747), + 19: uint16(34799), + 20: uint16(34802), + 21: uint16(34784), + 22: uint16(34831), + 23: uint16(34829), + 24: uint16(34814), + 25: uint16(34806), + 26: uint16(34807), + 27: uint16(34830), + 28: uint16(34770), + 29: uint16(34833), + 30: uint16(34838), + 31: uint16(34837), + 32: uint16(34850), + 33: uint16(34849), + 34: uint16(34865), + 35: uint16(34870), + 36: uint16(34873), + 37: uint16(34855), + 38: uint16(34875), + 39: uint16(34884), + 40: uint16(34882), + 41: uint16(34898), + 42: uint16(34905), + 43: uint16(34910), + 44: uint16(34914), + 45: uint16(34923), + 46: uint16(34945), + 47: uint16(34942), + 48: uint16(34974), + 49: uint16(34933), + 50: uint16(34941), + 51: uint16(34997), + 52: uint16(34930), + 53: uint16(34946), + 54: uint16(34967), + 55: uint16(34962), + 56: uint16(34990), + 57: uint16(34969), + 58: uint16(34978), + 59: uint16(34957), + 60: uint16(34980), + 61: uint16(34992), + 62: uint16(35007), + 63: uint16(34993), + 64: uint16(35011), + 65: uint16(35012), + 66: uint16(35028), + 67: uint16(35032), + 68: uint16(35033), + 69: uint16(35037), + 70: uint16(35065), + 71: uint16(35074), + 72: uint16(35068), + 73: uint16(35060), + 74: uint16(35048), + 75: uint16(35058), + 76: uint16(35076), + 77: uint16(35084), + 78: uint16(35082), + 79: uint16(35091), + 80: uint16(35139), + 81: uint16(35102), + 82: uint16(35109), + 83: uint16(35114), + 84: uint16(35115), + 85: uint16(35137), + 86: uint16(35140), + 87: uint16(35131), + 88: uint16(35126), + 89: uint16(35128), + 90: uint16(35148), + 91: uint16(35101), + 92: uint16(35168), + 93: uint16(35166), + }, + 74: { + 0: uint16(35174), + 1: uint16(35172), + 2: uint16(35181), + 3: uint16(35178), + 4: uint16(35183), + 5: uint16(35188), + 6: uint16(35191), + 7: uint16(35198), + 8: uint16(35203), + 9: uint16(35208), + 10: uint16(35210), + 11: uint16(35219), + 12: uint16(35224), + 13: uint16(35233), + 14: uint16(35241), + 15: uint16(35238), + 16: uint16(35244), + 17: uint16(35247), + 18: uint16(35250), + 19: uint16(35258), + 20: uint16(35261), + 21: uint16(35263), + 22: uint16(35264), + 23: uint16(35290), + 24: uint16(35292), + 25: uint16(35293), + 26: uint16(35303), + 27: uint16(35316), + 28: uint16(35320), + 29: uint16(35331), + 30: uint16(35350), + 31: uint16(35344), + 32: uint16(35340), + 33: uint16(35355), + 34: uint16(35357), + 35: uint16(35365), + 36: uint16(35382), + 37: uint16(35393), + 38: uint16(35419), + 39: uint16(35410), + 40: uint16(35398), + 41: uint16(35400), + 42: uint16(35452), + 43: uint16(35437), + 44: uint16(35436), + 45: uint16(35426), + 46: uint16(35461), + 47: uint16(35458), + 48: uint16(35460), + 49: uint16(35496), + 50: uint16(35489), + 51: uint16(35473), + 52: uint16(35493), + 53: uint16(35494), + 54: uint16(35482), + 55: uint16(35491), + 56: uint16(35524), + 57: uint16(35533), + 58: uint16(35522), + 59: uint16(35546), + 60: uint16(35563), + 61: uint16(35571), + 62: uint16(35559), + 63: uint16(35556), + 64: uint16(35569), + 65: uint16(35604), + 66: uint16(35552), + 67: uint16(35554), + 68: uint16(35575), + 69: uint16(35550), + 70: uint16(35547), + 71: uint16(35596), + 72: uint16(35591), + 73: uint16(35610), + 74: uint16(35553), + 75: uint16(35606), + 76: uint16(35600), + 77: uint16(35607), + 78: uint16(35616), + 79: uint16(35635), + 80: uint16(38827), + 81: uint16(35622), + 82: uint16(35627), + 83: uint16(35646), + 84: uint16(35624), + 85: uint16(35649), + 86: uint16(35660), + 87: uint16(35663), + 88: uint16(35662), + 89: uint16(35657), + 90: uint16(35670), + 91: uint16(35675), + 92: uint16(35674), + 93: uint16(35691), + }, + 75: { + 0: uint16(35679), + 1: uint16(35692), + 2: uint16(35695), + 3: uint16(35700), + 4: uint16(35709), + 5: uint16(35712), + 6: uint16(35724), + 7: uint16(35726), + 8: uint16(35730), + 9: uint16(35731), + 10: uint16(35734), + 11: uint16(35737), + 12: uint16(35738), + 13: uint16(35898), + 14: uint16(35905), + 15: uint16(35903), + 16: uint16(35912), + 17: uint16(35916), + 18: uint16(35918), + 19: uint16(35920), + 20: uint16(35925), + 21: uint16(35938), + 22: uint16(35948), + 23: uint16(35960), + 24: uint16(35962), + 25: uint16(35970), + 26: uint16(35977), + 27: uint16(35973), + 28: uint16(35978), + 29: uint16(35981), + 30: uint16(35982), + 31: uint16(35988), + 32: uint16(35964), + 33: uint16(35992), + 34: uint16(25117), + 35: uint16(36013), + 36: uint16(36010), + 37: uint16(36029), + 38: uint16(36018), + 39: uint16(36019), + 40: uint16(36014), + 41: uint16(36022), + 42: uint16(36040), + 43: uint16(36033), + 44: uint16(36068), + 45: uint16(36067), + 46: uint16(36058), + 47: uint16(36093), + 48: uint16(36090), + 49: uint16(36091), + 50: uint16(36100), + 51: uint16(36101), + 52: uint16(36106), + 53: uint16(36103), + 54: uint16(36111), + 55: uint16(36109), + 56: uint16(36112), + 57: uint16(40782), + 58: uint16(36115), + 59: uint16(36045), + 60: uint16(36116), + 61: uint16(36118), + 62: uint16(36199), + 63: uint16(36205), + 64: uint16(36209), + 65: uint16(36211), + 66: uint16(36225), + 67: uint16(36249), + 68: uint16(36290), + 69: uint16(36286), + 70: uint16(36282), + 71: uint16(36303), + 72: uint16(36314), + 73: uint16(36310), + 74: uint16(36300), + 75: uint16(36315), + 76: uint16(36299), + 77: uint16(36330), + 78: uint16(36331), + 79: uint16(36319), + 80: uint16(36323), + 81: uint16(36348), + 82: uint16(36360), + 83: uint16(36361), + 84: uint16(36351), + 85: uint16(36381), + 86: uint16(36382), + 87: uint16(36368), + 88: uint16(36383), + 89: uint16(36418), + 90: uint16(36405), + 91: uint16(36400), + 92: uint16(36404), + 93: uint16(36426), + }, + 76: { + 0: uint16(36423), + 1: uint16(36425), + 2: uint16(36428), + 3: uint16(36432), + 4: uint16(36424), + 5: uint16(36441), + 6: uint16(36452), + 7: uint16(36448), + 8: uint16(36394), + 9: uint16(36451), + 10: uint16(36437), + 11: uint16(36470), + 12: uint16(36466), + 13: uint16(36476), + 14: uint16(36481), + 15: uint16(36487), + 16: uint16(36485), + 17: uint16(36484), + 18: uint16(36491), + 19: uint16(36490), + 20: uint16(36499), + 21: uint16(36497), + 22: uint16(36500), + 23: uint16(36505), + 24: uint16(36522), + 25: uint16(36513), + 26: uint16(36524), + 27: uint16(36528), + 28: uint16(36550), + 29: uint16(36529), + 30: uint16(36542), + 31: uint16(36549), + 32: uint16(36552), + 33: uint16(36555), + 34: uint16(36571), + 35: uint16(36579), + 36: uint16(36604), + 37: uint16(36603), + 38: uint16(36587), + 39: uint16(36606), + 40: uint16(36618), + 41: uint16(36613), + 42: uint16(36629), + 43: uint16(36626), + 44: uint16(36633), + 45: uint16(36627), + 46: uint16(36636), + 47: uint16(36639), + 48: uint16(36635), + 49: uint16(36620), + 50: uint16(36646), + 51: uint16(36659), + 52: uint16(36667), + 53: uint16(36665), + 54: uint16(36677), + 55: uint16(36674), + 56: uint16(36670), + 57: uint16(36684), + 58: uint16(36681), + 59: uint16(36678), + 60: uint16(36686), + 61: uint16(36695), + 62: uint16(36700), + 63: uint16(36706), + 64: uint16(36707), + 65: uint16(36708), + 66: uint16(36764), + 67: uint16(36767), + 68: uint16(36771), + 69: uint16(36781), + 70: uint16(36783), + 71: uint16(36791), + 72: uint16(36826), + 73: uint16(36837), + 74: uint16(36834), + 75: uint16(36842), + 76: uint16(36847), + 77: uint16(36999), + 78: uint16(36852), + 79: uint16(36869), + 80: uint16(36857), + 81: uint16(36858), + 82: uint16(36881), + 83: uint16(36885), + 84: uint16(36897), + 85: uint16(36877), + 86: uint16(36894), + 87: uint16(36886), + 88: uint16(36875), + 89: uint16(36903), + 90: uint16(36918), + 91: uint16(36917), + 92: uint16(36921), + 93: uint16(36856), + }, + 77: { + 0: uint16(36943), + 1: uint16(36944), + 2: uint16(36945), + 3: uint16(36946), + 4: uint16(36878), + 5: uint16(36937), + 6: uint16(36926), + 7: uint16(36950), + 8: uint16(36952), + 9: uint16(36958), + 10: uint16(36968), + 11: uint16(36975), + 12: uint16(36982), + 13: uint16(38568), + 14: uint16(36978), + 15: uint16(36994), + 16: uint16(36989), + 17: uint16(36993), + 18: uint16(36992), + 19: uint16(37002), + 20: uint16(37001), + 21: uint16(37007), + 22: uint16(37032), + 23: uint16(37039), + 24: uint16(37041), + 25: uint16(37045), + 26: uint16(37090), + 27: uint16(37092), + 28: uint16(25160), + 29: uint16(37083), + 30: uint16(37122), + 31: uint16(37138), + 32: uint16(37145), + 33: uint16(37170), + 34: uint16(37168), + 35: uint16(37194), + 36: uint16(37206), + 37: uint16(37208), + 38: uint16(37219), + 39: uint16(37221), + 40: uint16(37225), + 41: uint16(37235), + 42: uint16(37234), + 43: uint16(37259), + 44: uint16(37257), + 45: uint16(37250), + 46: uint16(37282), + 47: uint16(37291), + 48: uint16(37295), + 49: uint16(37290), + 50: uint16(37301), + 51: uint16(37300), + 52: uint16(37306), + 53: uint16(37312), + 54: uint16(37313), + 55: uint16(37321), + 56: uint16(37323), + 57: uint16(37328), + 58: uint16(37334), + 59: uint16(37343), + 60: uint16(37345), + 61: uint16(37339), + 62: uint16(37372), + 63: uint16(37365), + 64: uint16(37366), + 65: uint16(37406), + 66: uint16(37375), + 67: uint16(37396), + 68: uint16(37420), + 69: uint16(37397), + 70: uint16(37393), + 71: uint16(37470), + 72: uint16(37463), + 73: uint16(37445), + 74: uint16(37449), + 75: uint16(37476), + 76: uint16(37448), + 77: uint16(37525), + 78: uint16(37439), + 79: uint16(37451), + 80: uint16(37456), + 81: uint16(37532), + 82: uint16(37526), + 83: uint16(37523), + 84: uint16(37531), + 85: uint16(37466), + 86: uint16(37583), + 87: uint16(37561), + 88: uint16(37559), + 89: uint16(37609), + 90: uint16(37647), + 91: uint16(37626), + 92: uint16(37700), + 93: uint16(37678), + }, + 78: { + 0: uint16(37657), + 1: uint16(37666), + 2: uint16(37658), + 3: uint16(37667), + 4: uint16(37690), + 5: uint16(37685), + 6: uint16(37691), + 7: uint16(37724), + 8: uint16(37728), + 9: uint16(37756), + 10: uint16(37742), + 11: uint16(37718), + 12: uint16(37808), + 13: uint16(37804), + 14: uint16(37805), + 15: uint16(37780), + 16: uint16(37817), + 17: uint16(37846), + 18: uint16(37847), + 19: uint16(37864), + 20: uint16(37861), + 21: uint16(37848), + 22: uint16(37827), + 23: uint16(37853), + 24: uint16(37840), + 25: uint16(37832), + 26: uint16(37860), + 27: uint16(37914), + 28: uint16(37908), + 29: uint16(37907), + 30: uint16(37891), + 31: uint16(37895), + 32: uint16(37904), + 33: uint16(37942), + 34: uint16(37931), + 35: uint16(37941), + 36: uint16(37921), + 37: uint16(37946), + 38: uint16(37953), + 39: uint16(37970), + 40: uint16(37956), + 41: uint16(37979), + 42: uint16(37984), + 43: uint16(37986), + 44: uint16(37982), + 45: uint16(37994), + 46: uint16(37417), + 47: uint16(38000), + 48: uint16(38005), + 49: uint16(38007), + 50: uint16(38013), + 51: uint16(37978), + 52: uint16(38012), + 53: uint16(38014), + 54: uint16(38017), + 55: uint16(38015), + 56: uint16(38274), + 57: uint16(38279), + 58: uint16(38282), + 59: uint16(38292), + 60: uint16(38294), + 61: uint16(38296), + 62: uint16(38297), + 63: uint16(38304), + 64: uint16(38312), + 65: uint16(38311), + 66: uint16(38317), + 67: uint16(38332), + 68: uint16(38331), + 69: uint16(38329), + 70: uint16(38334), + 71: uint16(38346), + 72: uint16(28662), + 73: uint16(38339), + 74: uint16(38349), + 75: uint16(38348), + 76: uint16(38357), + 77: uint16(38356), + 78: uint16(38358), + 79: uint16(38364), + 80: uint16(38369), + 81: uint16(38373), + 82: uint16(38370), + 83: uint16(38433), + 84: uint16(38440), + 85: uint16(38446), + 86: uint16(38447), + 87: uint16(38466), + 88: uint16(38476), + 89: uint16(38479), + 90: uint16(38475), + 91: uint16(38519), + 92: uint16(38492), + 93: uint16(38494), + }, + 79: { + 0: uint16(38493), + 1: uint16(38495), + 2: uint16(38502), + 3: uint16(38514), + 4: uint16(38508), + 5: uint16(38541), + 6: uint16(38552), + 7: uint16(38549), + 8: uint16(38551), + 9: uint16(38570), + 10: uint16(38567), + 11: uint16(38577), + 12: uint16(38578), + 13: uint16(38576), + 14: uint16(38580), + 15: uint16(38582), + 16: uint16(38584), + 17: uint16(38585), + 18: uint16(38606), + 19: uint16(38603), + 20: uint16(38601), + 21: uint16(38605), + 22: uint16(35149), + 23: uint16(38620), + 24: uint16(38669), + 25: uint16(38613), + 26: uint16(38649), + 27: uint16(38660), + 28: uint16(38662), + 29: uint16(38664), + 30: uint16(38675), + 31: uint16(38670), + 32: uint16(38673), + 33: uint16(38671), + 34: uint16(38678), + 35: uint16(38681), + 36: uint16(38692), + 37: uint16(38698), + 38: uint16(38704), + 39: uint16(38713), + 40: uint16(38717), + 41: uint16(38718), + 42: uint16(38724), + 43: uint16(38726), + 44: uint16(38728), + 45: uint16(38722), + 46: uint16(38729), + 47: uint16(38748), + 48: uint16(38752), + 49: uint16(38756), + 50: uint16(38758), + 51: uint16(38760), + 52: uint16(21202), + 53: uint16(38763), + 54: uint16(38769), + 55: uint16(38777), + 56: uint16(38789), + 57: uint16(38780), + 58: uint16(38785), + 59: uint16(38778), + 60: uint16(38790), + 61: uint16(38795), + 62: uint16(38799), + 63: uint16(38800), + 64: uint16(38812), + 65: uint16(38824), + 66: uint16(38822), + 67: uint16(38819), + 68: uint16(38835), + 69: uint16(38836), + 70: uint16(38851), + 71: uint16(38854), + 72: uint16(38856), + 73: uint16(38859), + 74: uint16(38876), + 75: uint16(38893), + 76: uint16(40783), + 77: uint16(38898), + 78: uint16(31455), + 79: uint16(38902), + 80: uint16(38901), + 81: uint16(38927), + 82: uint16(38924), + 83: uint16(38968), + 84: uint16(38948), + 85: uint16(38945), + 86: uint16(38967), + 87: uint16(38973), + 88: uint16(38982), + 89: uint16(38991), + 90: uint16(38987), + 91: uint16(39019), + 92: uint16(39023), + 93: uint16(39024), + }, + 80: { + 0: uint16(39025), + 1: uint16(39028), + 2: uint16(39027), + 3: uint16(39082), + 4: uint16(39087), + 5: uint16(39089), + 6: uint16(39094), + 7: uint16(39108), + 8: uint16(39107), + 9: uint16(39110), + 10: uint16(39145), + 11: uint16(39147), + 12: uint16(39171), + 13: uint16(39177), + 14: uint16(39186), + 15: uint16(39188), + 16: uint16(39192), + 17: uint16(39201), + 18: uint16(39197), + 19: uint16(39198), + 20: uint16(39204), + 21: uint16(39200), + 22: uint16(39212), + 23: uint16(39214), + 24: uint16(39229), + 25: uint16(39230), + 26: uint16(39234), + 27: uint16(39241), + 28: uint16(39237), + 29: uint16(39248), + 30: uint16(39243), + 31: uint16(39249), + 32: uint16(39250), + 33: uint16(39244), + 34: uint16(39253), + 35: uint16(39319), + 36: uint16(39320), + 37: uint16(39333), + 38: uint16(39341), + 39: uint16(39342), + 40: uint16(39356), + 41: uint16(39391), + 42: uint16(39387), + 43: uint16(39389), + 44: uint16(39384), + 45: uint16(39377), + 46: uint16(39405), + 47: uint16(39406), + 48: uint16(39409), + 49: uint16(39410), + 50: uint16(39419), + 51: uint16(39416), + 52: uint16(39425), + 53: uint16(39439), + 54: uint16(39429), + 55: uint16(39394), + 56: uint16(39449), + 57: uint16(39467), + 58: uint16(39479), + 59: uint16(39493), + 60: uint16(39490), + 61: uint16(39488), + 62: uint16(39491), + 63: uint16(39486), + 64: uint16(39509), + 65: uint16(39501), + 66: uint16(39515), + 67: uint16(39511), + 68: uint16(39519), + 69: uint16(39522), + 70: uint16(39525), + 71: uint16(39524), + 72: uint16(39529), + 73: uint16(39531), + 74: uint16(39530), + 75: uint16(39597), + 76: uint16(39600), + 77: uint16(39612), + 78: uint16(39616), + 79: uint16(39631), + 80: uint16(39633), + 81: uint16(39635), + 82: uint16(39636), + 83: uint16(39646), + 84: uint16(39647), + 85: uint16(39650), + 86: uint16(39651), + 87: uint16(39654), + 88: uint16(39663), + 89: uint16(39659), + 90: uint16(39662), + 91: uint16(39668), + 92: uint16(39665), + 93: uint16(39671), + }, + 81: { + 0: uint16(39675), + 1: uint16(39686), + 2: uint16(39704), + 3: uint16(39706), + 4: uint16(39711), + 5: uint16(39714), + 6: uint16(39715), + 7: uint16(39717), + 8: uint16(39719), + 9: uint16(39720), + 10: uint16(39721), + 11: uint16(39722), + 12: uint16(39726), + 13: uint16(39727), + 14: uint16(39730), + 15: uint16(39748), + 16: uint16(39747), + 17: uint16(39759), + 18: uint16(39757), + 19: uint16(39758), + 20: uint16(39761), + 21: uint16(39768), + 22: uint16(39796), + 23: uint16(39827), + 24: uint16(39811), + 25: uint16(39825), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39839), + 29: uint16(39840), + 30: uint16(39848), + 31: uint16(39860), + 32: uint16(39872), + 33: uint16(39882), + 34: uint16(39865), + 35: uint16(39878), + 36: uint16(39887), + 37: uint16(39889), + 38: uint16(39890), + 39: uint16(39907), + 40: uint16(39906), + 41: uint16(39908), + 42: uint16(39892), + 43: uint16(39905), + 44: uint16(39994), + 45: uint16(39922), + 46: uint16(39921), + 47: uint16(39920), + 48: uint16(39957), + 49: uint16(39956), + 50: uint16(39945), + 51: uint16(39955), + 52: uint16(39948), + 53: uint16(39942), + 54: uint16(39944), + 55: uint16(39954), + 56: uint16(39946), + 57: uint16(39940), + 58: uint16(39982), + 59: uint16(39963), + 60: uint16(39973), + 61: uint16(39972), + 62: uint16(39969), + 63: uint16(39984), + 64: uint16(40007), + 65: uint16(39986), + 66: uint16(40006), + 67: uint16(39998), + 68: uint16(40026), + 69: uint16(40032), + 70: uint16(40039), + 71: uint16(40054), + 72: uint16(40056), + 73: uint16(40167), + 74: uint16(40172), + 75: uint16(40176), + 76: uint16(40201), + 77: uint16(40200), + 78: uint16(40171), + 79: uint16(40195), + 80: uint16(40198), + 81: uint16(40234), + 82: uint16(40230), + 83: uint16(40367), + 84: uint16(40227), + 85: uint16(40223), + 86: uint16(40260), + 87: uint16(40213), + 88: uint16(40210), + 89: uint16(40257), + 90: uint16(40255), + 91: uint16(40254), + 92: uint16(40262), + 93: uint16(40264), + }, + 82: { + 0: uint16(40285), + 1: uint16(40286), + 2: uint16(40292), + 3: uint16(40273), + 4: uint16(40272), + 5: uint16(40281), + 6: uint16(40306), + 7: uint16(40329), + 8: uint16(40327), + 9: uint16(40363), + 10: uint16(40303), + 11: uint16(40314), + 12: uint16(40346), + 13: uint16(40356), + 14: uint16(40361), + 15: uint16(40370), + 16: uint16(40388), + 17: uint16(40385), + 18: uint16(40379), + 19: uint16(40376), + 20: uint16(40378), + 21: uint16(40390), + 22: uint16(40399), + 23: uint16(40386), + 24: uint16(40409), + 25: uint16(40403), + 26: uint16(40440), + 27: uint16(40422), + 28: uint16(40429), + 29: uint16(40431), + 30: uint16(40445), + 31: uint16(40474), + 32: uint16(40475), + 33: uint16(40478), + 34: uint16(40565), + 35: uint16(40569), + 36: uint16(40573), + 37: uint16(40577), + 38: uint16(40584), + 39: uint16(40587), + 40: uint16(40588), + 41: uint16(40594), + 42: uint16(40597), + 43: uint16(40593), + 44: uint16(40605), + 45: uint16(40613), + 46: uint16(40617), + 47: uint16(40632), + 48: uint16(40618), + 49: uint16(40621), + 50: uint16(38753), + 51: uint16(40652), + 52: uint16(40654), + 53: uint16(40655), + 54: uint16(40656), + 55: uint16(40660), + 56: uint16(40668), + 57: uint16(40670), + 58: uint16(40669), + 59: uint16(40672), + 60: uint16(40677), + 61: uint16(40680), + 62: uint16(40687), + 63: uint16(40692), + 64: uint16(40694), + 65: uint16(40695), + 66: uint16(40697), + 67: uint16(40699), + 68: uint16(40700), + 69: uint16(40701), + 70: uint16(40711), + 71: uint16(40712), + 72: uint16(30391), + 73: uint16(40725), + 74: uint16(40737), + 75: uint16(40748), + 76: uint16(40766), + 77: uint16(40778), + 78: uint16(40786), + 79: uint16(40788), + 80: uint16(40803), + 81: uint16(40799), + 82: uint16(40800), + 83: uint16(40801), + 84: uint16(40806), + 85: uint16(40807), + 86: uint16(40812), + 87: uint16(40810), + 88: uint16(40823), + 89: uint16(40818), + 90: uint16(40822), + 91: uint16(40853), + 92: uint16(40860), + 93: uint16(40864), + }, + 83: { + 0: uint16(22575), + 1: uint16(27079), + 2: uint16(36953), + 3: uint16(29796), + 4: uint16(20956), + 5: uint16(29081), + }, +} + +var _gb18030 = [126][190]uint16{ + 0: { + 0: uint16(19970), + 1: uint16(19972), + 2: uint16(19973), + 3: uint16(19974), + 4: uint16(19983), + 5: uint16(19986), + 6: uint16(19991), + 7: uint16(19999), + 8: uint16(20000), + 9: uint16(20001), + 10: uint16(20003), + 11: uint16(20006), + 12: uint16(20009), + 13: uint16(20014), + 14: uint16(20015), + 15: uint16(20017), + 16: uint16(20019), + 17: uint16(20021), + 18: uint16(20023), + 19: uint16(20028), + 20: uint16(20032), + 21: uint16(20033), + 22: uint16(20034), + 23: uint16(20036), + 24: uint16(20038), + 25: uint16(20042), + 26: uint16(20049), + 27: uint16(20053), + 28: uint16(20055), + 29: uint16(20058), + 30: uint16(20059), + 31: uint16(20066), + 32: uint16(20067), + 33: uint16(20068), + 34: uint16(20069), + 35: uint16(20071), + 36: uint16(20072), + 37: uint16(20074), + 38: uint16(20075), + 39: uint16(20076), + 40: uint16(20077), + 41: uint16(20078), + 42: uint16(20079), + 43: uint16(20082), + 44: uint16(20084), + 45: uint16(20085), + 46: uint16(20086), + 47: uint16(20087), + 48: uint16(20088), + 49: uint16(20089), + 50: uint16(20090), + 51: uint16(20091), + 52: uint16(20092), + 53: uint16(20093), + 54: uint16(20095), + 55: uint16(20096), + 56: uint16(20097), + 57: uint16(20098), + 58: uint16(20099), + 59: uint16(20100), + 60: uint16(20101), + 61: uint16(20103), + 62: uint16(20106), + 63: uint16(20112), + 64: uint16(20118), + 65: uint16(20119), + 66: uint16(20121), + 67: uint16(20124), + 68: uint16(20125), + 69: uint16(20126), + 70: uint16(20131), + 71: uint16(20138), + 72: uint16(20143), + 73: uint16(20144), + 74: uint16(20145), + 75: uint16(20148), + 76: uint16(20150), + 77: uint16(20151), + 78: uint16(20152), + 79: uint16(20153), + 80: uint16(20156), + 81: uint16(20157), + 82: uint16(20158), + 83: uint16(20168), + 84: uint16(20172), + 85: uint16(20175), + 86: uint16(20176), + 87: uint16(20178), + 88: uint16(20186), + 89: uint16(20187), + 90: uint16(20188), + 91: uint16(20192), + 92: uint16(20194), + 93: uint16(20198), + 94: uint16(20199), + 95: uint16(20201), + 96: uint16(20205), + 97: uint16(20206), + 98: uint16(20207), + 99: uint16(20209), + 100: uint16(20212), + 101: uint16(20216), + 102: uint16(20217), + 103: uint16(20218), + 104: uint16(20220), + 105: uint16(20222), + 106: uint16(20224), + 107: uint16(20226), + 108: uint16(20227), + 109: uint16(20228), + 110: uint16(20229), + 111: uint16(20230), + 112: uint16(20231), + 113: uint16(20232), + 114: uint16(20235), + 115: uint16(20236), + 116: uint16(20242), + 117: uint16(20243), + 118: uint16(20244), + 119: uint16(20245), + 120: uint16(20246), + 121: uint16(20252), + 122: uint16(20253), + 123: uint16(20257), + 124: uint16(20259), + 125: uint16(20264), + 126: uint16(20265), + 127: uint16(20268), + 128: uint16(20269), + 129: uint16(20270), + 130: uint16(20273), + 131: uint16(20275), + 132: uint16(20277), + 133: uint16(20279), + 134: uint16(20281), + 135: uint16(20283), + 136: uint16(20286), + 137: uint16(20287), + 138: uint16(20288), + 139: uint16(20289), + 140: uint16(20290), + 141: uint16(20292), + 142: uint16(20293), + 143: uint16(20295), + 144: uint16(20296), + 145: uint16(20297), + 146: uint16(20298), + 147: uint16(20299), + 148: uint16(20300), + 149: uint16(20306), + 150: uint16(20308), + 151: uint16(20310), + 152: uint16(20321), + 153: uint16(20322), + 154: uint16(20326), + 155: uint16(20328), + 156: uint16(20330), + 157: uint16(20331), + 158: uint16(20333), + 159: uint16(20334), + 160: uint16(20337), + 161: uint16(20338), + 162: uint16(20341), + 163: uint16(20343), + 164: uint16(20344), + 165: uint16(20345), + 166: uint16(20346), + 167: uint16(20349), + 168: uint16(20352), + 169: uint16(20353), + 170: uint16(20354), + 171: uint16(20357), + 172: uint16(20358), + 173: uint16(20359), + 174: uint16(20362), + 175: uint16(20364), + 176: uint16(20366), + 177: uint16(20368), + 178: uint16(20370), + 179: uint16(20371), + 180: uint16(20373), + 181: uint16(20374), + 182: uint16(20376), + 183: uint16(20377), + 184: uint16(20378), + 185: uint16(20380), + 186: uint16(20382), + 187: uint16(20383), + 188: uint16(20385), + 189: uint16(20386), + }, + 1: { + 0: uint16(20388), + 1: uint16(20395), + 2: uint16(20397), + 3: uint16(20400), + 4: uint16(20401), + 5: uint16(20402), + 6: uint16(20403), + 7: uint16(20404), + 8: uint16(20406), + 9: uint16(20407), + 10: uint16(20408), + 11: uint16(20409), + 12: uint16(20410), + 13: uint16(20411), + 14: uint16(20412), + 15: uint16(20413), + 16: uint16(20414), + 17: uint16(20416), + 18: uint16(20417), + 19: uint16(20418), + 20: uint16(20422), + 21: uint16(20423), + 22: uint16(20424), + 23: uint16(20425), + 24: uint16(20427), + 25: uint16(20428), + 26: uint16(20429), + 27: uint16(20434), + 28: uint16(20435), + 29: uint16(20436), + 30: uint16(20437), + 31: uint16(20438), + 32: uint16(20441), + 33: uint16(20443), + 34: uint16(20448), + 35: uint16(20450), + 36: uint16(20452), + 37: uint16(20453), + 38: uint16(20455), + 39: uint16(20459), + 40: uint16(20460), + 41: uint16(20464), + 42: uint16(20466), + 43: uint16(20468), + 44: uint16(20469), + 45: uint16(20470), + 46: uint16(20471), + 47: uint16(20473), + 48: uint16(20475), + 49: uint16(20476), + 50: uint16(20477), + 51: uint16(20479), + 52: uint16(20480), + 53: uint16(20481), + 54: uint16(20482), + 55: uint16(20483), + 56: uint16(20484), + 57: uint16(20485), + 58: uint16(20486), + 59: uint16(20487), + 60: uint16(20488), + 61: uint16(20489), + 62: uint16(20490), + 63: uint16(20491), + 64: uint16(20494), + 65: uint16(20496), + 66: uint16(20497), + 67: uint16(20499), + 68: uint16(20501), + 69: uint16(20502), + 70: uint16(20503), + 71: uint16(20507), + 72: uint16(20509), + 73: uint16(20510), + 74: uint16(20512), + 75: uint16(20514), + 76: uint16(20515), + 77: uint16(20516), + 78: uint16(20519), + 79: uint16(20523), + 80: uint16(20527), + 81: uint16(20528), + 82: uint16(20529), + 83: uint16(20530), + 84: uint16(20531), + 85: uint16(20532), + 86: uint16(20533), + 87: uint16(20534), + 88: uint16(20535), + 89: uint16(20536), + 90: uint16(20537), + 91: uint16(20539), + 92: uint16(20541), + 93: uint16(20543), + 94: uint16(20544), + 95: uint16(20545), + 96: uint16(20546), + 97: uint16(20548), + 98: uint16(20549), + 99: uint16(20550), + 100: uint16(20553), + 101: uint16(20554), + 102: uint16(20555), + 103: uint16(20557), + 104: uint16(20560), + 105: uint16(20561), + 106: uint16(20562), + 107: uint16(20563), + 108: uint16(20564), + 109: uint16(20566), + 110: uint16(20567), + 111: uint16(20568), + 112: uint16(20569), + 113: uint16(20571), + 114: uint16(20573), + 115: uint16(20574), + 116: uint16(20575), + 117: uint16(20576), + 118: uint16(20577), + 119: uint16(20578), + 120: uint16(20579), + 121: uint16(20580), + 122: uint16(20582), + 123: uint16(20583), + 124: uint16(20584), + 125: uint16(20585), + 126: uint16(20586), + 127: uint16(20587), + 128: uint16(20589), + 129: uint16(20590), + 130: uint16(20591), + 131: uint16(20592), + 132: uint16(20593), + 133: uint16(20594), + 134: uint16(20595), + 135: uint16(20596), + 136: uint16(20597), + 137: uint16(20600), + 138: uint16(20601), + 139: uint16(20602), + 140: uint16(20604), + 141: uint16(20605), + 142: uint16(20609), + 143: uint16(20610), + 144: uint16(20611), + 145: uint16(20612), + 146: uint16(20614), + 147: uint16(20615), + 148: uint16(20617), + 149: uint16(20618), + 150: uint16(20619), + 151: uint16(20620), + 152: uint16(20622), + 153: uint16(20623), + 154: uint16(20624), + 155: uint16(20625), + 156: uint16(20626), + 157: uint16(20627), + 158: uint16(20628), + 159: uint16(20629), + 160: uint16(20630), + 161: uint16(20631), + 162: uint16(20632), + 163: uint16(20633), + 164: uint16(20634), + 165: uint16(20635), + 166: uint16(20636), + 167: uint16(20637), + 168: uint16(20638), + 169: uint16(20639), + 170: uint16(20640), + 171: uint16(20641), + 172: uint16(20642), + 173: uint16(20644), + 174: uint16(20646), + 175: uint16(20650), + 176: uint16(20651), + 177: uint16(20653), + 178: uint16(20654), + 179: uint16(20655), + 180: uint16(20656), + 181: uint16(20657), + 182: uint16(20659), + 183: uint16(20660), + 184: uint16(20661), + 185: uint16(20662), + 186: uint16(20663), + 187: uint16(20664), + 188: uint16(20665), + 189: uint16(20668), + }, + 2: { + 0: uint16(20669), + 1: uint16(20670), + 2: uint16(20671), + 3: uint16(20672), + 4: uint16(20673), + 5: uint16(20674), + 6: uint16(20675), + 7: uint16(20676), + 8: uint16(20677), + 9: uint16(20678), + 10: uint16(20679), + 11: uint16(20680), + 12: uint16(20681), + 13: uint16(20682), + 14: uint16(20683), + 15: uint16(20684), + 16: uint16(20685), + 17: uint16(20686), + 18: uint16(20688), + 19: uint16(20689), + 20: uint16(20690), + 21: uint16(20691), + 22: uint16(20692), + 23: uint16(20693), + 24: uint16(20695), + 25: uint16(20696), + 26: uint16(20697), + 27: uint16(20699), + 28: uint16(20700), + 29: uint16(20701), + 30: uint16(20702), + 31: uint16(20703), + 32: uint16(20704), + 33: uint16(20705), + 34: uint16(20706), + 35: uint16(20707), + 36: uint16(20708), + 37: uint16(20709), + 38: uint16(20712), + 39: uint16(20713), + 40: uint16(20714), + 41: uint16(20715), + 42: uint16(20719), + 43: uint16(20720), + 44: uint16(20721), + 45: uint16(20722), + 46: uint16(20724), + 47: uint16(20726), + 48: uint16(20727), + 49: uint16(20728), + 50: uint16(20729), + 51: uint16(20730), + 52: uint16(20732), + 53: uint16(20733), + 54: uint16(20734), + 55: uint16(20735), + 56: uint16(20736), + 57: uint16(20737), + 58: uint16(20738), + 59: uint16(20739), + 60: uint16(20740), + 61: uint16(20741), + 62: uint16(20744), + 63: uint16(20745), + 64: uint16(20746), + 65: uint16(20748), + 66: uint16(20749), + 67: uint16(20750), + 68: uint16(20751), + 69: uint16(20752), + 70: uint16(20753), + 71: uint16(20755), + 72: uint16(20756), + 73: uint16(20757), + 74: uint16(20758), + 75: uint16(20759), + 76: uint16(20760), + 77: uint16(20761), + 78: uint16(20762), + 79: uint16(20763), + 80: uint16(20764), + 81: uint16(20765), + 82: uint16(20766), + 83: uint16(20767), + 84: uint16(20768), + 85: uint16(20770), + 86: uint16(20771), + 87: uint16(20772), + 88: uint16(20773), + 89: uint16(20774), + 90: uint16(20775), + 91: uint16(20776), + 92: uint16(20777), + 93: uint16(20778), + 94: uint16(20779), + 95: uint16(20780), + 96: uint16(20781), + 97: uint16(20782), + 98: uint16(20783), + 99: uint16(20784), + 100: uint16(20785), + 101: uint16(20786), + 102: uint16(20787), + 103: uint16(20788), + 104: uint16(20789), + 105: uint16(20790), + 106: uint16(20791), + 107: uint16(20792), + 108: uint16(20793), + 109: uint16(20794), + 110: uint16(20795), + 111: uint16(20796), + 112: uint16(20797), + 113: uint16(20798), + 114: uint16(20802), + 115: uint16(20807), + 116: uint16(20810), + 117: uint16(20812), + 118: uint16(20814), + 119: uint16(20815), + 120: uint16(20816), + 121: uint16(20818), + 122: uint16(20819), + 123: uint16(20823), + 124: uint16(20824), + 125: uint16(20825), + 126: uint16(20827), + 127: uint16(20829), + 128: uint16(20830), + 129: uint16(20831), + 130: uint16(20832), + 131: uint16(20833), + 132: uint16(20835), + 133: uint16(20836), + 134: uint16(20838), + 135: uint16(20839), + 136: uint16(20841), + 137: uint16(20842), + 138: uint16(20847), + 139: uint16(20850), + 140: uint16(20858), + 141: uint16(20862), + 142: uint16(20863), + 143: uint16(20867), + 144: uint16(20868), + 145: uint16(20870), + 146: uint16(20871), + 147: uint16(20874), + 148: uint16(20875), + 149: uint16(20878), + 150: uint16(20879), + 151: uint16(20880), + 152: uint16(20881), + 153: uint16(20883), + 154: uint16(20884), + 155: uint16(20888), + 156: uint16(20890), + 157: uint16(20893), + 158: uint16(20894), + 159: uint16(20895), + 160: uint16(20897), + 161: uint16(20899), + 162: uint16(20902), + 163: uint16(20903), + 164: uint16(20904), + 165: uint16(20905), + 166: uint16(20906), + 167: uint16(20909), + 168: uint16(20910), + 169: uint16(20916), + 170: uint16(20920), + 171: uint16(20921), + 172: uint16(20922), + 173: uint16(20926), + 174: uint16(20927), + 175: uint16(20929), + 176: uint16(20930), + 177: uint16(20931), + 178: uint16(20933), + 179: uint16(20936), + 180: uint16(20938), + 181: uint16(20941), + 182: uint16(20942), + 183: uint16(20944), + 184: uint16(20946), + 185: uint16(20947), + 186: uint16(20948), + 187: uint16(20949), + 188: uint16(20950), + 189: uint16(20951), + }, + 3: { + 0: uint16(20952), + 1: uint16(20953), + 2: uint16(20954), + 3: uint16(20956), + 4: uint16(20958), + 5: uint16(20959), + 6: uint16(20962), + 7: uint16(20963), + 8: uint16(20965), + 9: uint16(20966), + 10: uint16(20967), + 11: uint16(20968), + 12: uint16(20969), + 13: uint16(20970), + 14: uint16(20972), + 15: uint16(20974), + 16: uint16(20977), + 17: uint16(20978), + 18: uint16(20980), + 19: uint16(20983), + 20: uint16(20990), + 21: uint16(20996), + 22: uint16(20997), + 23: uint16(21001), + 24: uint16(21003), + 25: uint16(21004), + 26: uint16(21007), + 27: uint16(21008), + 28: uint16(21011), + 29: uint16(21012), + 30: uint16(21013), + 31: uint16(21020), + 32: uint16(21022), + 33: uint16(21023), + 34: uint16(21025), + 35: uint16(21026), + 36: uint16(21027), + 37: uint16(21029), + 38: uint16(21030), + 39: uint16(21031), + 40: uint16(21034), + 41: uint16(21036), + 42: uint16(21039), + 43: uint16(21041), + 44: uint16(21042), + 45: uint16(21044), + 46: uint16(21045), + 47: uint16(21052), + 48: uint16(21054), + 49: uint16(21060), + 50: uint16(21061), + 51: uint16(21062), + 52: uint16(21063), + 53: uint16(21064), + 54: uint16(21065), + 55: uint16(21067), + 56: uint16(21070), + 57: uint16(21071), + 58: uint16(21074), + 59: uint16(21075), + 60: uint16(21077), + 61: uint16(21079), + 62: uint16(21080), + 63: uint16(21081), + 64: uint16(21082), + 65: uint16(21083), + 66: uint16(21085), + 67: uint16(21087), + 68: uint16(21088), + 69: uint16(21090), + 70: uint16(21091), + 71: uint16(21092), + 72: uint16(21094), + 73: uint16(21096), + 74: uint16(21099), + 75: uint16(21100), + 76: uint16(21101), + 77: uint16(21102), + 78: uint16(21104), + 79: uint16(21105), + 80: uint16(21107), + 81: uint16(21108), + 82: uint16(21109), + 83: uint16(21110), + 84: uint16(21111), + 85: uint16(21112), + 86: uint16(21113), + 87: uint16(21114), + 88: uint16(21115), + 89: uint16(21116), + 90: uint16(21118), + 91: uint16(21120), + 92: uint16(21123), + 93: uint16(21124), + 94: uint16(21125), + 95: uint16(21126), + 96: uint16(21127), + 97: uint16(21129), + 98: uint16(21130), + 99: uint16(21131), + 100: uint16(21132), + 101: uint16(21133), + 102: uint16(21134), + 103: uint16(21135), + 104: uint16(21137), + 105: uint16(21138), + 106: uint16(21140), + 107: uint16(21141), + 108: uint16(21142), + 109: uint16(21143), + 110: uint16(21144), + 111: uint16(21145), + 112: uint16(21146), + 113: uint16(21148), + 114: uint16(21156), + 115: uint16(21157), + 116: uint16(21158), + 117: uint16(21159), + 118: uint16(21166), + 119: uint16(21167), + 120: uint16(21168), + 121: uint16(21172), + 122: uint16(21173), + 123: uint16(21174), + 124: uint16(21175), + 125: uint16(21176), + 126: uint16(21177), + 127: uint16(21178), + 128: uint16(21179), + 129: uint16(21180), + 130: uint16(21181), + 131: uint16(21184), + 132: uint16(21185), + 133: uint16(21186), + 134: uint16(21188), + 135: uint16(21189), + 136: uint16(21190), + 137: uint16(21192), + 138: uint16(21194), + 139: uint16(21196), + 140: uint16(21197), + 141: uint16(21198), + 142: uint16(21199), + 143: uint16(21201), + 144: uint16(21203), + 145: uint16(21204), + 146: uint16(21205), + 147: uint16(21207), + 148: uint16(21209), + 149: uint16(21210), + 150: uint16(21211), + 151: uint16(21212), + 152: uint16(21213), + 153: uint16(21214), + 154: uint16(21216), + 155: uint16(21217), + 156: uint16(21218), + 157: uint16(21219), + 158: uint16(21221), + 159: uint16(21222), + 160: uint16(21223), + 161: uint16(21224), + 162: uint16(21225), + 163: uint16(21226), + 164: uint16(21227), + 165: uint16(21228), + 166: uint16(21229), + 167: uint16(21230), + 168: uint16(21231), + 169: uint16(21233), + 170: uint16(21234), + 171: uint16(21235), + 172: uint16(21236), + 173: uint16(21237), + 174: uint16(21238), + 175: uint16(21239), + 176: uint16(21240), + 177: uint16(21243), + 178: uint16(21244), + 179: uint16(21245), + 180: uint16(21249), + 181: uint16(21250), + 182: uint16(21251), + 183: uint16(21252), + 184: uint16(21255), + 185: uint16(21257), + 186: uint16(21258), + 187: uint16(21259), + 188: uint16(21260), + 189: uint16(21262), + }, + 4: { + 0: uint16(21265), + 1: uint16(21266), + 2: uint16(21267), + 3: uint16(21268), + 4: uint16(21272), + 5: uint16(21275), + 6: uint16(21276), + 7: uint16(21278), + 8: uint16(21279), + 9: uint16(21282), + 10: uint16(21284), + 11: uint16(21285), + 12: uint16(21287), + 13: uint16(21288), + 14: uint16(21289), + 15: uint16(21291), + 16: uint16(21292), + 17: uint16(21293), + 18: uint16(21295), + 19: uint16(21296), + 20: uint16(21297), + 21: uint16(21298), + 22: uint16(21299), + 23: uint16(21300), + 24: uint16(21301), + 25: uint16(21302), + 26: uint16(21303), + 27: uint16(21304), + 28: uint16(21308), + 29: uint16(21309), + 30: uint16(21312), + 31: uint16(21314), + 32: uint16(21316), + 33: uint16(21318), + 34: uint16(21323), + 35: uint16(21324), + 36: uint16(21325), + 37: uint16(21328), + 38: uint16(21332), + 39: uint16(21336), + 40: uint16(21337), + 41: uint16(21339), + 42: uint16(21341), + 43: uint16(21349), + 44: uint16(21352), + 45: uint16(21354), + 46: uint16(21356), + 47: uint16(21357), + 48: uint16(21362), + 49: uint16(21366), + 50: uint16(21369), + 51: uint16(21371), + 52: uint16(21372), + 53: uint16(21373), + 54: uint16(21374), + 55: uint16(21376), + 56: uint16(21377), + 57: uint16(21379), + 58: uint16(21383), + 59: uint16(21384), + 60: uint16(21386), + 61: uint16(21390), + 62: uint16(21391), + 63: uint16(21392), + 64: uint16(21393), + 65: uint16(21394), + 66: uint16(21395), + 67: uint16(21396), + 68: uint16(21398), + 69: uint16(21399), + 70: uint16(21401), + 71: uint16(21403), + 72: uint16(21404), + 73: uint16(21406), + 74: uint16(21408), + 75: uint16(21409), + 76: uint16(21412), + 77: uint16(21415), + 78: uint16(21418), + 79: uint16(21419), + 80: uint16(21420), + 81: uint16(21421), + 82: uint16(21423), + 83: uint16(21424), + 84: uint16(21425), + 85: uint16(21426), + 86: uint16(21427), + 87: uint16(21428), + 88: uint16(21429), + 89: uint16(21431), + 90: uint16(21432), + 91: uint16(21433), + 92: uint16(21434), + 93: uint16(21436), + 94: uint16(21437), + 95: uint16(21438), + 96: uint16(21440), + 97: uint16(21443), + 98: uint16(21444), + 99: uint16(21445), + 100: uint16(21446), + 101: uint16(21447), + 102: uint16(21454), + 103: uint16(21455), + 104: uint16(21456), + 105: uint16(21458), + 106: uint16(21459), + 107: uint16(21461), + 108: uint16(21466), + 109: uint16(21468), + 110: uint16(21469), + 111: uint16(21470), + 112: uint16(21473), + 113: uint16(21474), + 114: uint16(21479), + 115: uint16(21492), + 116: uint16(21498), + 117: uint16(21502), + 118: uint16(21503), + 119: uint16(21504), + 120: uint16(21506), + 121: uint16(21509), + 122: uint16(21511), + 123: uint16(21515), + 124: uint16(21524), + 125: uint16(21528), + 126: uint16(21529), + 127: uint16(21530), + 128: uint16(21532), + 129: uint16(21538), + 130: uint16(21540), + 131: uint16(21541), + 132: uint16(21546), + 133: uint16(21552), + 134: uint16(21555), + 135: uint16(21558), + 136: uint16(21559), + 137: uint16(21562), + 138: uint16(21565), + 139: uint16(21567), + 140: uint16(21569), + 141: uint16(21570), + 142: uint16(21572), + 143: uint16(21573), + 144: uint16(21575), + 145: uint16(21577), + 146: uint16(21580), + 147: uint16(21581), + 148: uint16(21582), + 149: uint16(21583), + 150: uint16(21585), + 151: uint16(21594), + 152: uint16(21597), + 153: uint16(21598), + 154: uint16(21599), + 155: uint16(21600), + 156: uint16(21601), + 157: uint16(21603), + 158: uint16(21605), + 159: uint16(21607), + 160: uint16(21609), + 161: uint16(21610), + 162: uint16(21611), + 163: uint16(21612), + 164: uint16(21613), + 165: uint16(21614), + 166: uint16(21615), + 167: uint16(21616), + 168: uint16(21620), + 169: uint16(21625), + 170: uint16(21626), + 171: uint16(21630), + 172: uint16(21631), + 173: uint16(21633), + 174: uint16(21635), + 175: uint16(21637), + 176: uint16(21639), + 177: uint16(21640), + 178: uint16(21641), + 179: uint16(21642), + 180: uint16(21645), + 181: uint16(21649), + 182: uint16(21651), + 183: uint16(21655), + 184: uint16(21656), + 185: uint16(21660), + 186: uint16(21662), + 187: uint16(21663), + 188: uint16(21664), + 189: uint16(21665), + }, + 5: { + 0: uint16(21666), + 1: uint16(21669), + 2: uint16(21678), + 3: uint16(21680), + 4: uint16(21682), + 5: uint16(21685), + 6: uint16(21686), + 7: uint16(21687), + 8: uint16(21689), + 9: uint16(21690), + 10: uint16(21692), + 11: uint16(21694), + 12: uint16(21699), + 13: uint16(21701), + 14: uint16(21706), + 15: uint16(21707), + 16: uint16(21718), + 17: uint16(21720), + 18: uint16(21723), + 19: uint16(21728), + 20: uint16(21729), + 21: uint16(21730), + 22: uint16(21731), + 23: uint16(21732), + 24: uint16(21739), + 25: uint16(21740), + 26: uint16(21743), + 27: uint16(21744), + 28: uint16(21745), + 29: uint16(21748), + 30: uint16(21749), + 31: uint16(21750), + 32: uint16(21751), + 33: uint16(21752), + 34: uint16(21753), + 35: uint16(21755), + 36: uint16(21758), + 37: uint16(21760), + 38: uint16(21762), + 39: uint16(21763), + 40: uint16(21764), + 41: uint16(21765), + 42: uint16(21768), + 43: uint16(21770), + 44: uint16(21771), + 45: uint16(21772), + 46: uint16(21773), + 47: uint16(21774), + 48: uint16(21778), + 49: uint16(21779), + 50: uint16(21781), + 51: uint16(21782), + 52: uint16(21783), + 53: uint16(21784), + 54: uint16(21785), + 55: uint16(21786), + 56: uint16(21788), + 57: uint16(21789), + 58: uint16(21790), + 59: uint16(21791), + 60: uint16(21793), + 61: uint16(21797), + 62: uint16(21798), + 63: uint16(21800), + 64: uint16(21801), + 65: uint16(21803), + 66: uint16(21805), + 67: uint16(21810), + 68: uint16(21812), + 69: uint16(21813), + 70: uint16(21814), + 71: uint16(21816), + 72: uint16(21817), + 73: uint16(21818), + 74: uint16(21819), + 75: uint16(21821), + 76: uint16(21824), + 77: uint16(21826), + 78: uint16(21829), + 79: uint16(21831), + 80: uint16(21832), + 81: uint16(21835), + 82: uint16(21836), + 83: uint16(21837), + 84: uint16(21838), + 85: uint16(21839), + 86: uint16(21841), + 87: uint16(21842), + 88: uint16(21843), + 89: uint16(21844), + 90: uint16(21847), + 91: uint16(21848), + 92: uint16(21849), + 93: uint16(21850), + 94: uint16(21851), + 95: uint16(21853), + 96: uint16(21854), + 97: uint16(21855), + 98: uint16(21856), + 99: uint16(21858), + 100: uint16(21859), + 101: uint16(21864), + 102: uint16(21865), + 103: uint16(21867), + 104: uint16(21871), + 105: uint16(21872), + 106: uint16(21873), + 107: uint16(21874), + 108: uint16(21875), + 109: uint16(21876), + 110: uint16(21881), + 111: uint16(21882), + 112: uint16(21885), + 113: uint16(21887), + 114: uint16(21893), + 115: uint16(21894), + 116: uint16(21900), + 117: uint16(21901), + 118: uint16(21902), + 119: uint16(21904), + 120: uint16(21906), + 121: uint16(21907), + 122: uint16(21909), + 123: uint16(21910), + 124: uint16(21911), + 125: uint16(21914), + 126: uint16(21915), + 127: uint16(21918), + 128: uint16(21920), + 129: uint16(21921), + 130: uint16(21922), + 131: uint16(21923), + 132: uint16(21924), + 133: uint16(21925), + 134: uint16(21926), + 135: uint16(21928), + 136: uint16(21929), + 137: uint16(21930), + 138: uint16(21931), + 139: uint16(21932), + 140: uint16(21933), + 141: uint16(21934), + 142: uint16(21935), + 143: uint16(21936), + 144: uint16(21938), + 145: uint16(21940), + 146: uint16(21942), + 147: uint16(21944), + 148: uint16(21946), + 149: uint16(21948), + 150: uint16(21951), + 151: uint16(21952), + 152: uint16(21953), + 153: uint16(21954), + 154: uint16(21955), + 155: uint16(21958), + 156: uint16(21959), + 157: uint16(21960), + 158: uint16(21962), + 159: uint16(21963), + 160: uint16(21966), + 161: uint16(21967), + 162: uint16(21968), + 163: uint16(21973), + 164: uint16(21975), + 165: uint16(21976), + 166: uint16(21977), + 167: uint16(21978), + 168: uint16(21979), + 169: uint16(21982), + 170: uint16(21984), + 171: uint16(21986), + 172: uint16(21991), + 173: uint16(21993), + 174: uint16(21997), + 175: uint16(21998), + 176: uint16(22000), + 177: uint16(22001), + 178: uint16(22004), + 179: uint16(22006), + 180: uint16(22008), + 181: uint16(22009), + 182: uint16(22010), + 183: uint16(22011), + 184: uint16(22012), + 185: uint16(22015), + 186: uint16(22018), + 187: uint16(22019), + 188: uint16(22020), + 189: uint16(22021), + }, + 6: { + 0: uint16(22022), + 1: uint16(22023), + 2: uint16(22026), + 3: uint16(22027), + 4: uint16(22029), + 5: uint16(22032), + 6: uint16(22033), + 7: uint16(22034), + 8: uint16(22035), + 9: uint16(22036), + 10: uint16(22037), + 11: uint16(22038), + 12: uint16(22039), + 13: uint16(22041), + 14: uint16(22042), + 15: uint16(22044), + 16: uint16(22045), + 17: uint16(22048), + 18: uint16(22049), + 19: uint16(22050), + 20: uint16(22053), + 21: uint16(22054), + 22: uint16(22056), + 23: uint16(22057), + 24: uint16(22058), + 25: uint16(22059), + 26: uint16(22062), + 27: uint16(22063), + 28: uint16(22064), + 29: uint16(22067), + 30: uint16(22069), + 31: uint16(22071), + 32: uint16(22072), + 33: uint16(22074), + 34: uint16(22076), + 35: uint16(22077), + 36: uint16(22078), + 37: uint16(22080), + 38: uint16(22081), + 39: uint16(22082), + 40: uint16(22083), + 41: uint16(22084), + 42: uint16(22085), + 43: uint16(22086), + 44: uint16(22087), + 45: uint16(22088), + 46: uint16(22089), + 47: uint16(22090), + 48: uint16(22091), + 49: uint16(22095), + 50: uint16(22096), + 51: uint16(22097), + 52: uint16(22098), + 53: uint16(22099), + 54: uint16(22101), + 55: uint16(22102), + 56: uint16(22106), + 57: uint16(22107), + 58: uint16(22109), + 59: uint16(22110), + 60: uint16(22111), + 61: uint16(22112), + 62: uint16(22113), + 63: uint16(22115), + 64: uint16(22117), + 65: uint16(22118), + 66: uint16(22119), + 67: uint16(22125), + 68: uint16(22126), + 69: uint16(22127), + 70: uint16(22128), + 71: uint16(22130), + 72: uint16(22131), + 73: uint16(22132), + 74: uint16(22133), + 75: uint16(22135), + 76: uint16(22136), + 77: uint16(22137), + 78: uint16(22138), + 79: uint16(22141), + 80: uint16(22142), + 81: uint16(22143), + 82: uint16(22144), + 83: uint16(22145), + 84: uint16(22146), + 85: uint16(22147), + 86: uint16(22148), + 87: uint16(22151), + 88: uint16(22152), + 89: uint16(22153), + 90: uint16(22154), + 91: uint16(22155), + 92: uint16(22156), + 93: uint16(22157), + 94: uint16(22160), + 95: uint16(22161), + 96: uint16(22162), + 97: uint16(22164), + 98: uint16(22165), + 99: uint16(22166), + 100: uint16(22167), + 101: uint16(22168), + 102: uint16(22169), + 103: uint16(22170), + 104: uint16(22171), + 105: uint16(22172), + 106: uint16(22173), + 107: uint16(22174), + 108: uint16(22175), + 109: uint16(22176), + 110: uint16(22177), + 111: uint16(22178), + 112: uint16(22180), + 113: uint16(22181), + 114: uint16(22182), + 115: uint16(22183), + 116: uint16(22184), + 117: uint16(22185), + 118: uint16(22186), + 119: uint16(22187), + 120: uint16(22188), + 121: uint16(22189), + 122: uint16(22190), + 123: uint16(22192), + 124: uint16(22193), + 125: uint16(22194), + 126: uint16(22195), + 127: uint16(22196), + 128: uint16(22197), + 129: uint16(22198), + 130: uint16(22200), + 131: uint16(22201), + 132: uint16(22202), + 133: uint16(22203), + 134: uint16(22205), + 135: uint16(22206), + 136: uint16(22207), + 137: uint16(22208), + 138: uint16(22209), + 139: uint16(22210), + 140: uint16(22211), + 141: uint16(22212), + 142: uint16(22213), + 143: uint16(22214), + 144: uint16(22215), + 145: uint16(22216), + 146: uint16(22217), + 147: uint16(22219), + 148: uint16(22220), + 149: uint16(22221), + 150: uint16(22222), + 151: uint16(22223), + 152: uint16(22224), + 153: uint16(22225), + 154: uint16(22226), + 155: uint16(22227), + 156: uint16(22229), + 157: uint16(22230), + 158: uint16(22232), + 159: uint16(22233), + 160: uint16(22236), + 161: uint16(22243), + 162: uint16(22245), + 163: uint16(22246), + 164: uint16(22247), + 165: uint16(22248), + 166: uint16(22249), + 167: uint16(22250), + 168: uint16(22252), + 169: uint16(22254), + 170: uint16(22255), + 171: uint16(22258), + 172: uint16(22259), + 173: uint16(22262), + 174: uint16(22263), + 175: uint16(22264), + 176: uint16(22267), + 177: uint16(22268), + 178: uint16(22272), + 179: uint16(22273), + 180: uint16(22274), + 181: uint16(22277), + 182: uint16(22279), + 183: uint16(22283), + 184: uint16(22284), + 185: uint16(22285), + 186: uint16(22286), + 187: uint16(22287), + 188: uint16(22288), + 189: uint16(22289), + }, + 7: { + 0: uint16(22290), + 1: uint16(22291), + 2: uint16(22292), + 3: uint16(22293), + 4: uint16(22294), + 5: uint16(22295), + 6: uint16(22296), + 7: uint16(22297), + 8: uint16(22298), + 9: uint16(22299), + 10: uint16(22301), + 11: uint16(22302), + 12: uint16(22304), + 13: uint16(22305), + 14: uint16(22306), + 15: uint16(22308), + 16: uint16(22309), + 17: uint16(22310), + 18: uint16(22311), + 19: uint16(22315), + 20: uint16(22321), + 21: uint16(22322), + 22: uint16(22324), + 23: uint16(22325), + 24: uint16(22326), + 25: uint16(22327), + 26: uint16(22328), + 27: uint16(22332), + 28: uint16(22333), + 29: uint16(22335), + 30: uint16(22337), + 31: uint16(22339), + 32: uint16(22340), + 33: uint16(22341), + 34: uint16(22342), + 35: uint16(22344), + 36: uint16(22345), + 37: uint16(22347), + 38: uint16(22354), + 39: uint16(22355), + 40: uint16(22356), + 41: uint16(22357), + 42: uint16(22358), + 43: uint16(22360), + 44: uint16(22361), + 45: uint16(22370), + 46: uint16(22371), + 47: uint16(22373), + 48: uint16(22375), + 49: uint16(22380), + 50: uint16(22382), + 51: uint16(22384), + 52: uint16(22385), + 53: uint16(22386), + 54: uint16(22388), + 55: uint16(22389), + 56: uint16(22392), + 57: uint16(22393), + 58: uint16(22394), + 59: uint16(22397), + 60: uint16(22398), + 61: uint16(22399), + 62: uint16(22400), + 63: uint16(22401), + 64: uint16(22407), + 65: uint16(22408), + 66: uint16(22409), + 67: uint16(22410), + 68: uint16(22413), + 69: uint16(22414), + 70: uint16(22415), + 71: uint16(22416), + 72: uint16(22417), + 73: uint16(22420), + 74: uint16(22421), + 75: uint16(22422), + 76: uint16(22423), + 77: uint16(22424), + 78: uint16(22425), + 79: uint16(22426), + 80: uint16(22428), + 81: uint16(22429), + 82: uint16(22430), + 83: uint16(22431), + 84: uint16(22437), + 85: uint16(22440), + 86: uint16(22442), + 87: uint16(22444), + 88: uint16(22447), + 89: uint16(22448), + 90: uint16(22449), + 91: uint16(22451), + 92: uint16(22453), + 93: uint16(22454), + 94: uint16(22455), + 95: uint16(22457), + 96: uint16(22458), + 97: uint16(22459), + 98: uint16(22460), + 99: uint16(22461), + 100: uint16(22462), + 101: uint16(22463), + 102: uint16(22464), + 103: uint16(22465), + 104: uint16(22468), + 105: uint16(22469), + 106: uint16(22470), + 107: uint16(22471), + 108: uint16(22472), + 109: uint16(22473), + 110: uint16(22474), + 111: uint16(22476), + 112: uint16(22477), + 113: uint16(22480), + 114: uint16(22481), + 115: uint16(22483), + 116: uint16(22486), + 117: uint16(22487), + 118: uint16(22491), + 119: uint16(22492), + 120: uint16(22494), + 121: uint16(22497), + 122: uint16(22498), + 123: uint16(22499), + 124: uint16(22501), + 125: uint16(22502), + 126: uint16(22503), + 127: uint16(22504), + 128: uint16(22505), + 129: uint16(22506), + 130: uint16(22507), + 131: uint16(22508), + 132: uint16(22510), + 133: uint16(22512), + 134: uint16(22513), + 135: uint16(22514), + 136: uint16(22515), + 137: uint16(22517), + 138: uint16(22518), + 139: uint16(22519), + 140: uint16(22523), + 141: uint16(22524), + 142: uint16(22526), + 143: uint16(22527), + 144: uint16(22529), + 145: uint16(22531), + 146: uint16(22532), + 147: uint16(22533), + 148: uint16(22536), + 149: uint16(22537), + 150: uint16(22538), + 151: uint16(22540), + 152: uint16(22542), + 153: uint16(22543), + 154: uint16(22544), + 155: uint16(22546), + 156: uint16(22547), + 157: uint16(22548), + 158: uint16(22550), + 159: uint16(22551), + 160: uint16(22552), + 161: uint16(22554), + 162: uint16(22555), + 163: uint16(22556), + 164: uint16(22557), + 165: uint16(22559), + 166: uint16(22562), + 167: uint16(22563), + 168: uint16(22565), + 169: uint16(22566), + 170: uint16(22567), + 171: uint16(22568), + 172: uint16(22569), + 173: uint16(22571), + 174: uint16(22572), + 175: uint16(22573), + 176: uint16(22574), + 177: uint16(22575), + 178: uint16(22577), + 179: uint16(22578), + 180: uint16(22579), + 181: uint16(22580), + 182: uint16(22582), + 183: uint16(22583), + 184: uint16(22584), + 185: uint16(22585), + 186: uint16(22586), + 187: uint16(22587), + 188: uint16(22588), + 189: uint16(22589), + }, + 8: { + 0: uint16(22590), + 1: uint16(22591), + 2: uint16(22592), + 3: uint16(22593), + 4: uint16(22594), + 5: uint16(22595), + 6: uint16(22597), + 7: uint16(22598), + 8: uint16(22599), + 9: uint16(22600), + 10: uint16(22601), + 11: uint16(22602), + 12: uint16(22603), + 13: uint16(22606), + 14: uint16(22607), + 15: uint16(22608), + 16: uint16(22610), + 17: uint16(22611), + 18: uint16(22613), + 19: uint16(22614), + 20: uint16(22615), + 21: uint16(22617), + 22: uint16(22618), + 23: uint16(22619), + 24: uint16(22620), + 25: uint16(22621), + 26: uint16(22623), + 27: uint16(22624), + 28: uint16(22625), + 29: uint16(22626), + 30: uint16(22627), + 31: uint16(22628), + 32: uint16(22630), + 33: uint16(22631), + 34: uint16(22632), + 35: uint16(22633), + 36: uint16(22634), + 37: uint16(22637), + 38: uint16(22638), + 39: uint16(22639), + 40: uint16(22640), + 41: uint16(22641), + 42: uint16(22642), + 43: uint16(22643), + 44: uint16(22644), + 45: uint16(22645), + 46: uint16(22646), + 47: uint16(22647), + 48: uint16(22648), + 49: uint16(22649), + 50: uint16(22650), + 51: uint16(22651), + 52: uint16(22652), + 53: uint16(22653), + 54: uint16(22655), + 55: uint16(22658), + 56: uint16(22660), + 57: uint16(22662), + 58: uint16(22663), + 59: uint16(22664), + 60: uint16(22666), + 61: uint16(22667), + 62: uint16(22668), + 63: uint16(22669), + 64: uint16(22670), + 65: uint16(22671), + 66: uint16(22672), + 67: uint16(22673), + 68: uint16(22676), + 69: uint16(22677), + 70: uint16(22678), + 71: uint16(22679), + 72: uint16(22680), + 73: uint16(22683), + 74: uint16(22684), + 75: uint16(22685), + 76: uint16(22688), + 77: uint16(22689), + 78: uint16(22690), + 79: uint16(22691), + 80: uint16(22692), + 81: uint16(22693), + 82: uint16(22694), + 83: uint16(22695), + 84: uint16(22698), + 85: uint16(22699), + 86: uint16(22700), + 87: uint16(22701), + 88: uint16(22702), + 89: uint16(22703), + 90: uint16(22704), + 91: uint16(22705), + 92: uint16(22706), + 93: uint16(22707), + 94: uint16(22708), + 95: uint16(22709), + 96: uint16(22710), + 97: uint16(22711), + 98: uint16(22712), + 99: uint16(22713), + 100: uint16(22714), + 101: uint16(22715), + 102: uint16(22717), + 103: uint16(22718), + 104: uint16(22719), + 105: uint16(22720), + 106: uint16(22722), + 107: uint16(22723), + 108: uint16(22724), + 109: uint16(22726), + 110: uint16(22727), + 111: uint16(22728), + 112: uint16(22729), + 113: uint16(22730), + 114: uint16(22731), + 115: uint16(22732), + 116: uint16(22733), + 117: uint16(22734), + 118: uint16(22735), + 119: uint16(22736), + 120: uint16(22738), + 121: uint16(22739), + 122: uint16(22740), + 123: uint16(22742), + 124: uint16(22743), + 125: uint16(22744), + 126: uint16(22745), + 127: uint16(22746), + 128: uint16(22747), + 129: uint16(22748), + 130: uint16(22749), + 131: uint16(22750), + 132: uint16(22751), + 133: uint16(22752), + 134: uint16(22753), + 135: uint16(22754), + 136: uint16(22755), + 137: uint16(22757), + 138: uint16(22758), + 139: uint16(22759), + 140: uint16(22760), + 141: uint16(22761), + 142: uint16(22762), + 143: uint16(22765), + 144: uint16(22767), + 145: uint16(22769), + 146: uint16(22770), + 147: uint16(22772), + 148: uint16(22773), + 149: uint16(22775), + 150: uint16(22776), + 151: uint16(22778), + 152: uint16(22779), + 153: uint16(22780), + 154: uint16(22781), + 155: uint16(22782), + 156: uint16(22783), + 157: uint16(22784), + 158: uint16(22785), + 159: uint16(22787), + 160: uint16(22789), + 161: uint16(22790), + 162: uint16(22792), + 163: uint16(22793), + 164: uint16(22794), + 165: uint16(22795), + 166: uint16(22796), + 167: uint16(22798), + 168: uint16(22800), + 169: uint16(22801), + 170: uint16(22802), + 171: uint16(22803), + 172: uint16(22807), + 173: uint16(22808), + 174: uint16(22811), + 175: uint16(22813), + 176: uint16(22814), + 177: uint16(22816), + 178: uint16(22817), + 179: uint16(22818), + 180: uint16(22819), + 181: uint16(22822), + 182: uint16(22824), + 183: uint16(22828), + 184: uint16(22832), + 185: uint16(22834), + 186: uint16(22835), + 187: uint16(22837), + 188: uint16(22838), + 189: uint16(22843), + }, + 9: { + 0: uint16(22845), + 1: uint16(22846), + 2: uint16(22847), + 3: uint16(22848), + 4: uint16(22851), + 5: uint16(22853), + 6: uint16(22854), + 7: uint16(22858), + 8: uint16(22860), + 9: uint16(22861), + 10: uint16(22864), + 11: uint16(22866), + 12: uint16(22867), + 13: uint16(22873), + 14: uint16(22875), + 15: uint16(22876), + 16: uint16(22877), + 17: uint16(22878), + 18: uint16(22879), + 19: uint16(22881), + 20: uint16(22883), + 21: uint16(22884), + 22: uint16(22886), + 23: uint16(22887), + 24: uint16(22888), + 25: uint16(22889), + 26: uint16(22890), + 27: uint16(22891), + 28: uint16(22892), + 29: uint16(22893), + 30: uint16(22894), + 31: uint16(22895), + 32: uint16(22896), + 33: uint16(22897), + 34: uint16(22898), + 35: uint16(22901), + 36: uint16(22903), + 37: uint16(22906), + 38: uint16(22907), + 39: uint16(22908), + 40: uint16(22910), + 41: uint16(22911), + 42: uint16(22912), + 43: uint16(22917), + 44: uint16(22921), + 45: uint16(22923), + 46: uint16(22924), + 47: uint16(22926), + 48: uint16(22927), + 49: uint16(22928), + 50: uint16(22929), + 51: uint16(22932), + 52: uint16(22933), + 53: uint16(22936), + 54: uint16(22938), + 55: uint16(22939), + 56: uint16(22940), + 57: uint16(22941), + 58: uint16(22943), + 59: uint16(22944), + 60: uint16(22945), + 61: uint16(22946), + 62: uint16(22950), + 63: uint16(22951), + 64: uint16(22956), + 65: uint16(22957), + 66: uint16(22960), + 67: uint16(22961), + 68: uint16(22963), + 69: uint16(22964), + 70: uint16(22965), + 71: uint16(22966), + 72: uint16(22967), + 73: uint16(22968), + 74: uint16(22970), + 75: uint16(22972), + 76: uint16(22973), + 77: uint16(22975), + 78: uint16(22976), + 79: uint16(22977), + 80: uint16(22978), + 81: uint16(22979), + 82: uint16(22980), + 83: uint16(22981), + 84: uint16(22983), + 85: uint16(22984), + 86: uint16(22985), + 87: uint16(22988), + 88: uint16(22989), + 89: uint16(22990), + 90: uint16(22991), + 91: uint16(22997), + 92: uint16(22998), + 93: uint16(23001), + 94: uint16(23003), + 95: uint16(23006), + 96: uint16(23007), + 97: uint16(23008), + 98: uint16(23009), + 99: uint16(23010), + 100: uint16(23012), + 101: uint16(23014), + 102: uint16(23015), + 103: uint16(23017), + 104: uint16(23018), + 105: uint16(23019), + 106: uint16(23021), + 107: uint16(23022), + 108: uint16(23023), + 109: uint16(23024), + 110: uint16(23025), + 111: uint16(23026), + 112: uint16(23027), + 113: uint16(23028), + 114: uint16(23029), + 115: uint16(23030), + 116: uint16(23031), + 117: uint16(23032), + 118: uint16(23034), + 119: uint16(23036), + 120: uint16(23037), + 121: uint16(23038), + 122: uint16(23040), + 123: uint16(23042), + 124: uint16(23050), + 125: uint16(23051), + 126: uint16(23053), + 127: uint16(23054), + 128: uint16(23055), + 129: uint16(23056), + 130: uint16(23058), + 131: uint16(23060), + 132: uint16(23061), + 133: uint16(23062), + 134: uint16(23063), + 135: uint16(23065), + 136: uint16(23066), + 137: uint16(23067), + 138: uint16(23069), + 139: uint16(23070), + 140: uint16(23073), + 141: uint16(23074), + 142: uint16(23076), + 143: uint16(23078), + 144: uint16(23079), + 145: uint16(23080), + 146: uint16(23082), + 147: uint16(23083), + 148: uint16(23084), + 149: uint16(23085), + 150: uint16(23086), + 151: uint16(23087), + 152: uint16(23088), + 153: uint16(23091), + 154: uint16(23093), + 155: uint16(23095), + 156: uint16(23096), + 157: uint16(23097), + 158: uint16(23098), + 159: uint16(23099), + 160: uint16(23101), + 161: uint16(23102), + 162: uint16(23103), + 163: uint16(23105), + 164: uint16(23106), + 165: uint16(23107), + 166: uint16(23108), + 167: uint16(23109), + 168: uint16(23111), + 169: uint16(23112), + 170: uint16(23115), + 171: uint16(23116), + 172: uint16(23117), + 173: uint16(23118), + 174: uint16(23119), + 175: uint16(23120), + 176: uint16(23121), + 177: uint16(23122), + 178: uint16(23123), + 179: uint16(23124), + 180: uint16(23126), + 181: uint16(23127), + 182: uint16(23128), + 183: uint16(23129), + 184: uint16(23131), + 185: uint16(23132), + 186: uint16(23133), + 187: uint16(23134), + 188: uint16(23135), + 189: uint16(23136), + }, + 10: { + 0: uint16(23137), + 1: uint16(23139), + 2: uint16(23140), + 3: uint16(23141), + 4: uint16(23142), + 5: uint16(23144), + 6: uint16(23145), + 7: uint16(23147), + 8: uint16(23148), + 9: uint16(23149), + 10: uint16(23150), + 11: uint16(23151), + 12: uint16(23152), + 13: uint16(23153), + 14: uint16(23154), + 15: uint16(23155), + 16: uint16(23160), + 17: uint16(23161), + 18: uint16(23163), + 19: uint16(23164), + 20: uint16(23165), + 21: uint16(23166), + 22: uint16(23168), + 23: uint16(23169), + 24: uint16(23170), + 25: uint16(23171), + 26: uint16(23172), + 27: uint16(23173), + 28: uint16(23174), + 29: uint16(23175), + 30: uint16(23176), + 31: uint16(23177), + 32: uint16(23178), + 33: uint16(23179), + 34: uint16(23180), + 35: uint16(23181), + 36: uint16(23182), + 37: uint16(23183), + 38: uint16(23184), + 39: uint16(23185), + 40: uint16(23187), + 41: uint16(23188), + 42: uint16(23189), + 43: uint16(23190), + 44: uint16(23191), + 45: uint16(23192), + 46: uint16(23193), + 47: uint16(23196), + 48: uint16(23197), + 49: uint16(23198), + 50: uint16(23199), + 51: uint16(23200), + 52: uint16(23201), + 53: uint16(23202), + 54: uint16(23203), + 55: uint16(23204), + 56: uint16(23205), + 57: uint16(23206), + 58: uint16(23207), + 59: uint16(23208), + 60: uint16(23209), + 61: uint16(23211), + 62: uint16(23212), + 63: uint16(23213), + 64: uint16(23214), + 65: uint16(23215), + 66: uint16(23216), + 67: uint16(23217), + 68: uint16(23220), + 69: uint16(23222), + 70: uint16(23223), + 71: uint16(23225), + 72: uint16(23226), + 73: uint16(23227), + 74: uint16(23228), + 75: uint16(23229), + 76: uint16(23231), + 77: uint16(23232), + 78: uint16(23235), + 79: uint16(23236), + 80: uint16(23237), + 81: uint16(23238), + 82: uint16(23239), + 83: uint16(23240), + 84: uint16(23242), + 85: uint16(23243), + 86: uint16(23245), + 87: uint16(23246), + 88: uint16(23247), + 89: uint16(23248), + 90: uint16(23249), + 91: uint16(23251), + 92: uint16(23253), + 93: uint16(23255), + 94: uint16(23257), + 95: uint16(23258), + 96: uint16(23259), + 97: uint16(23261), + 98: uint16(23262), + 99: uint16(23263), + 100: uint16(23266), + 101: uint16(23268), + 102: uint16(23269), + 103: uint16(23271), + 104: uint16(23272), + 105: uint16(23274), + 106: uint16(23276), + 107: uint16(23277), + 108: uint16(23278), + 109: uint16(23279), + 110: uint16(23280), + 111: uint16(23282), + 112: uint16(23283), + 113: uint16(23284), + 114: uint16(23285), + 115: uint16(23286), + 116: uint16(23287), + 117: uint16(23288), + 118: uint16(23289), + 119: uint16(23290), + 120: uint16(23291), + 121: uint16(23292), + 122: uint16(23293), + 123: uint16(23294), + 124: uint16(23295), + 125: uint16(23296), + 126: uint16(23297), + 127: uint16(23298), + 128: uint16(23299), + 129: uint16(23300), + 130: uint16(23301), + 131: uint16(23302), + 132: uint16(23303), + 133: uint16(23304), + 134: uint16(23306), + 135: uint16(23307), + 136: uint16(23308), + 137: uint16(23309), + 138: uint16(23310), + 139: uint16(23311), + 140: uint16(23312), + 141: uint16(23313), + 142: uint16(23314), + 143: uint16(23315), + 144: uint16(23316), + 145: uint16(23317), + 146: uint16(23320), + 147: uint16(23321), + 148: uint16(23322), + 149: uint16(23323), + 150: uint16(23324), + 151: uint16(23325), + 152: uint16(23326), + 153: uint16(23327), + 154: uint16(23328), + 155: uint16(23329), + 156: uint16(23330), + 157: uint16(23331), + 158: uint16(23332), + 159: uint16(23333), + 160: uint16(23334), + 161: uint16(23335), + 162: uint16(23336), + 163: uint16(23337), + 164: uint16(23338), + 165: uint16(23339), + 166: uint16(23340), + 167: uint16(23341), + 168: uint16(23342), + 169: uint16(23343), + 170: uint16(23344), + 171: uint16(23345), + 172: uint16(23347), + 173: uint16(23349), + 174: uint16(23350), + 175: uint16(23352), + 176: uint16(23353), + 177: uint16(23354), + 178: uint16(23355), + 179: uint16(23356), + 180: uint16(23357), + 181: uint16(23358), + 182: uint16(23359), + 183: uint16(23361), + 184: uint16(23362), + 185: uint16(23363), + 186: uint16(23364), + 187: uint16(23365), + 188: uint16(23366), + 189: uint16(23367), + }, + 11: { + 0: uint16(23368), + 1: uint16(23369), + 2: uint16(23370), + 3: uint16(23371), + 4: uint16(23372), + 5: uint16(23373), + 6: uint16(23374), + 7: uint16(23375), + 8: uint16(23378), + 9: uint16(23382), + 10: uint16(23390), + 11: uint16(23392), + 12: uint16(23393), + 13: uint16(23399), + 14: uint16(23400), + 15: uint16(23403), + 16: uint16(23405), + 17: uint16(23406), + 18: uint16(23407), + 19: uint16(23410), + 20: uint16(23412), + 21: uint16(23414), + 22: uint16(23415), + 23: uint16(23416), + 24: uint16(23417), + 25: uint16(23419), + 26: uint16(23420), + 27: uint16(23422), + 28: uint16(23423), + 29: uint16(23426), + 30: uint16(23430), + 31: uint16(23434), + 32: uint16(23437), + 33: uint16(23438), + 34: uint16(23440), + 35: uint16(23441), + 36: uint16(23442), + 37: uint16(23444), + 38: uint16(23446), + 39: uint16(23455), + 40: uint16(23463), + 41: uint16(23464), + 42: uint16(23465), + 43: uint16(23468), + 44: uint16(23469), + 45: uint16(23470), + 46: uint16(23471), + 47: uint16(23473), + 48: uint16(23474), + 49: uint16(23479), + 50: uint16(23482), + 51: uint16(23483), + 52: uint16(23484), + 53: uint16(23488), + 54: uint16(23489), + 55: uint16(23491), + 56: uint16(23496), + 57: uint16(23497), + 58: uint16(23498), + 59: uint16(23499), + 60: uint16(23501), + 61: uint16(23502), + 62: uint16(23503), + 63: uint16(23505), + 64: uint16(23508), + 65: uint16(23509), + 66: uint16(23510), + 67: uint16(23511), + 68: uint16(23512), + 69: uint16(23513), + 70: uint16(23514), + 71: uint16(23515), + 72: uint16(23516), + 73: uint16(23520), + 74: uint16(23522), + 75: uint16(23523), + 76: uint16(23526), + 77: uint16(23527), + 78: uint16(23529), + 79: uint16(23530), + 80: uint16(23531), + 81: uint16(23532), + 82: uint16(23533), + 83: uint16(23535), + 84: uint16(23537), + 85: uint16(23538), + 86: uint16(23539), + 87: uint16(23540), + 88: uint16(23541), + 89: uint16(23542), + 90: uint16(23543), + 91: uint16(23549), + 92: uint16(23550), + 93: uint16(23552), + 94: uint16(23554), + 95: uint16(23555), + 96: uint16(23557), + 97: uint16(23559), + 98: uint16(23560), + 99: uint16(23563), + 100: uint16(23564), + 101: uint16(23565), + 102: uint16(23566), + 103: uint16(23568), + 104: uint16(23570), + 105: uint16(23571), + 106: uint16(23575), + 107: uint16(23577), + 108: uint16(23579), + 109: uint16(23582), + 110: uint16(23583), + 111: uint16(23584), + 112: uint16(23585), + 113: uint16(23587), + 114: uint16(23590), + 115: uint16(23592), + 116: uint16(23593), + 117: uint16(23594), + 118: uint16(23595), + 119: uint16(23597), + 120: uint16(23598), + 121: uint16(23599), + 122: uint16(23600), + 123: uint16(23602), + 124: uint16(23603), + 125: uint16(23605), + 126: uint16(23606), + 127: uint16(23607), + 128: uint16(23619), + 129: uint16(23620), + 130: uint16(23622), + 131: uint16(23623), + 132: uint16(23628), + 133: uint16(23629), + 134: uint16(23634), + 135: uint16(23635), + 136: uint16(23636), + 137: uint16(23638), + 138: uint16(23639), + 139: uint16(23640), + 140: uint16(23642), + 141: uint16(23643), + 142: uint16(23644), + 143: uint16(23645), + 144: uint16(23647), + 145: uint16(23650), + 146: uint16(23652), + 147: uint16(23655), + 148: uint16(23656), + 149: uint16(23657), + 150: uint16(23658), + 151: uint16(23659), + 152: uint16(23660), + 153: uint16(23661), + 154: uint16(23664), + 155: uint16(23666), + 156: uint16(23667), + 157: uint16(23668), + 158: uint16(23669), + 159: uint16(23670), + 160: uint16(23671), + 161: uint16(23672), + 162: uint16(23675), + 163: uint16(23676), + 164: uint16(23677), + 165: uint16(23678), + 166: uint16(23680), + 167: uint16(23683), + 168: uint16(23684), + 169: uint16(23685), + 170: uint16(23686), + 171: uint16(23687), + 172: uint16(23689), + 173: uint16(23690), + 174: uint16(23691), + 175: uint16(23694), + 176: uint16(23695), + 177: uint16(23698), + 178: uint16(23699), + 179: uint16(23701), + 180: uint16(23709), + 181: uint16(23710), + 182: uint16(23711), + 183: uint16(23712), + 184: uint16(23713), + 185: uint16(23716), + 186: uint16(23717), + 187: uint16(23718), + 188: uint16(23719), + 189: uint16(23720), + }, + 12: { + 0: uint16(23722), + 1: uint16(23726), + 2: uint16(23727), + 3: uint16(23728), + 4: uint16(23730), + 5: uint16(23732), + 6: uint16(23734), + 7: uint16(23737), + 8: uint16(23738), + 9: uint16(23739), + 10: uint16(23740), + 11: uint16(23742), + 12: uint16(23744), + 13: uint16(23746), + 14: uint16(23747), + 15: uint16(23749), + 16: uint16(23750), + 17: uint16(23751), + 18: uint16(23752), + 19: uint16(23753), + 20: uint16(23754), + 21: uint16(23756), + 22: uint16(23757), + 23: uint16(23758), + 24: uint16(23759), + 25: uint16(23760), + 26: uint16(23761), + 27: uint16(23763), + 28: uint16(23764), + 29: uint16(23765), + 30: uint16(23766), + 31: uint16(23767), + 32: uint16(23768), + 33: uint16(23770), + 34: uint16(23771), + 35: uint16(23772), + 36: uint16(23773), + 37: uint16(23774), + 38: uint16(23775), + 39: uint16(23776), + 40: uint16(23778), + 41: uint16(23779), + 42: uint16(23783), + 43: uint16(23785), + 44: uint16(23787), + 45: uint16(23788), + 46: uint16(23790), + 47: uint16(23791), + 48: uint16(23793), + 49: uint16(23794), + 50: uint16(23795), + 51: uint16(23796), + 52: uint16(23797), + 53: uint16(23798), + 54: uint16(23799), + 55: uint16(23800), + 56: uint16(23801), + 57: uint16(23802), + 58: uint16(23804), + 59: uint16(23805), + 60: uint16(23806), + 61: uint16(23807), + 62: uint16(23808), + 63: uint16(23809), + 64: uint16(23812), + 65: uint16(23813), + 66: uint16(23816), + 67: uint16(23817), + 68: uint16(23818), + 69: uint16(23819), + 70: uint16(23820), + 71: uint16(23821), + 72: uint16(23823), + 73: uint16(23824), + 74: uint16(23825), + 75: uint16(23826), + 76: uint16(23827), + 77: uint16(23829), + 78: uint16(23831), + 79: uint16(23832), + 80: uint16(23833), + 81: uint16(23834), + 82: uint16(23836), + 83: uint16(23837), + 84: uint16(23839), + 85: uint16(23840), + 86: uint16(23841), + 87: uint16(23842), + 88: uint16(23843), + 89: uint16(23845), + 90: uint16(23848), + 91: uint16(23850), + 92: uint16(23851), + 93: uint16(23852), + 94: uint16(23855), + 95: uint16(23856), + 96: uint16(23857), + 97: uint16(23858), + 98: uint16(23859), + 99: uint16(23861), + 100: uint16(23862), + 101: uint16(23863), + 102: uint16(23864), + 103: uint16(23865), + 104: uint16(23866), + 105: uint16(23867), + 106: uint16(23868), + 107: uint16(23871), + 108: uint16(23872), + 109: uint16(23873), + 110: uint16(23874), + 111: uint16(23875), + 112: uint16(23876), + 113: uint16(23877), + 114: uint16(23878), + 115: uint16(23880), + 116: uint16(23881), + 117: uint16(23885), + 118: uint16(23886), + 119: uint16(23887), + 120: uint16(23888), + 121: uint16(23889), + 122: uint16(23890), + 123: uint16(23891), + 124: uint16(23892), + 125: uint16(23893), + 126: uint16(23894), + 127: uint16(23895), + 128: uint16(23897), + 129: uint16(23898), + 130: uint16(23900), + 131: uint16(23902), + 132: uint16(23903), + 133: uint16(23904), + 134: uint16(23905), + 135: uint16(23906), + 136: uint16(23907), + 137: uint16(23908), + 138: uint16(23909), + 139: uint16(23910), + 140: uint16(23911), + 141: uint16(23912), + 142: uint16(23914), + 143: uint16(23917), + 144: uint16(23918), + 145: uint16(23920), + 146: uint16(23921), + 147: uint16(23922), + 148: uint16(23923), + 149: uint16(23925), + 150: uint16(23926), + 151: uint16(23927), + 152: uint16(23928), + 153: uint16(23929), + 154: uint16(23930), + 155: uint16(23931), + 156: uint16(23932), + 157: uint16(23933), + 158: uint16(23934), + 159: uint16(23935), + 160: uint16(23936), + 161: uint16(23937), + 162: uint16(23939), + 163: uint16(23940), + 164: uint16(23941), + 165: uint16(23942), + 166: uint16(23943), + 167: uint16(23944), + 168: uint16(23945), + 169: uint16(23946), + 170: uint16(23947), + 171: uint16(23948), + 172: uint16(23949), + 173: uint16(23950), + 174: uint16(23951), + 175: uint16(23952), + 176: uint16(23953), + 177: uint16(23954), + 178: uint16(23955), + 179: uint16(23956), + 180: uint16(23957), + 181: uint16(23958), + 182: uint16(23959), + 183: uint16(23960), + 184: uint16(23962), + 185: uint16(23963), + 186: uint16(23964), + 187: uint16(23966), + 188: uint16(23967), + 189: uint16(23968), + }, + 13: { + 0: uint16(23969), + 1: uint16(23970), + 2: uint16(23971), + 3: uint16(23972), + 4: uint16(23973), + 5: uint16(23974), + 6: uint16(23975), + 7: uint16(23976), + 8: uint16(23977), + 9: uint16(23978), + 10: uint16(23979), + 11: uint16(23980), + 12: uint16(23981), + 13: uint16(23982), + 14: uint16(23983), + 15: uint16(23984), + 16: uint16(23985), + 17: uint16(23986), + 18: uint16(23987), + 19: uint16(23988), + 20: uint16(23989), + 21: uint16(23990), + 22: uint16(23992), + 23: uint16(23993), + 24: uint16(23994), + 25: uint16(23995), + 26: uint16(23996), + 27: uint16(23997), + 28: uint16(23998), + 29: uint16(23999), + 30: uint16(24000), + 31: uint16(24001), + 32: uint16(24002), + 33: uint16(24003), + 34: uint16(24004), + 35: uint16(24006), + 36: uint16(24007), + 37: uint16(24008), + 38: uint16(24009), + 39: uint16(24010), + 40: uint16(24011), + 41: uint16(24012), + 42: uint16(24014), + 43: uint16(24015), + 44: uint16(24016), + 45: uint16(24017), + 46: uint16(24018), + 47: uint16(24019), + 48: uint16(24020), + 49: uint16(24021), + 50: uint16(24022), + 51: uint16(24023), + 52: uint16(24024), + 53: uint16(24025), + 54: uint16(24026), + 55: uint16(24028), + 56: uint16(24031), + 57: uint16(24032), + 58: uint16(24035), + 59: uint16(24036), + 60: uint16(24042), + 61: uint16(24044), + 62: uint16(24045), + 63: uint16(24048), + 64: uint16(24053), + 65: uint16(24054), + 66: uint16(24056), + 67: uint16(24057), + 68: uint16(24058), + 69: uint16(24059), + 70: uint16(24060), + 71: uint16(24063), + 72: uint16(24064), + 73: uint16(24068), + 74: uint16(24071), + 75: uint16(24073), + 76: uint16(24074), + 77: uint16(24075), + 78: uint16(24077), + 79: uint16(24078), + 80: uint16(24082), + 81: uint16(24083), + 82: uint16(24087), + 83: uint16(24094), + 84: uint16(24095), + 85: uint16(24096), + 86: uint16(24097), + 87: uint16(24098), + 88: uint16(24099), + 89: uint16(24100), + 90: uint16(24101), + 91: uint16(24104), + 92: uint16(24105), + 93: uint16(24106), + 94: uint16(24107), + 95: uint16(24108), + 96: uint16(24111), + 97: uint16(24112), + 98: uint16(24114), + 99: uint16(24115), + 100: uint16(24116), + 101: uint16(24117), + 102: uint16(24118), + 103: uint16(24121), + 104: uint16(24122), + 105: uint16(24126), + 106: uint16(24127), + 107: uint16(24128), + 108: uint16(24129), + 109: uint16(24131), + 110: uint16(24134), + 111: uint16(24135), + 112: uint16(24136), + 113: uint16(24137), + 114: uint16(24138), + 115: uint16(24139), + 116: uint16(24141), + 117: uint16(24142), + 118: uint16(24143), + 119: uint16(24144), + 120: uint16(24145), + 121: uint16(24146), + 122: uint16(24147), + 123: uint16(24150), + 124: uint16(24151), + 125: uint16(24152), + 126: uint16(24153), + 127: uint16(24154), + 128: uint16(24156), + 129: uint16(24157), + 130: uint16(24159), + 131: uint16(24160), + 132: uint16(24163), + 133: uint16(24164), + 134: uint16(24165), + 135: uint16(24166), + 136: uint16(24167), + 137: uint16(24168), + 138: uint16(24169), + 139: uint16(24170), + 140: uint16(24171), + 141: uint16(24172), + 142: uint16(24173), + 143: uint16(24174), + 144: uint16(24175), + 145: uint16(24176), + 146: uint16(24177), + 147: uint16(24181), + 148: uint16(24183), + 149: uint16(24185), + 150: uint16(24190), + 151: uint16(24193), + 152: uint16(24194), + 153: uint16(24195), + 154: uint16(24197), + 155: uint16(24200), + 156: uint16(24201), + 157: uint16(24204), + 158: uint16(24205), + 159: uint16(24206), + 160: uint16(24210), + 161: uint16(24216), + 162: uint16(24219), + 163: uint16(24221), + 164: uint16(24225), + 165: uint16(24226), + 166: uint16(24227), + 167: uint16(24228), + 168: uint16(24232), + 169: uint16(24233), + 170: uint16(24234), + 171: uint16(24235), + 172: uint16(24236), + 173: uint16(24238), + 174: uint16(24239), + 175: uint16(24240), + 176: uint16(24241), + 177: uint16(24242), + 178: uint16(24244), + 179: uint16(24250), + 180: uint16(24251), + 181: uint16(24252), + 182: uint16(24253), + 183: uint16(24255), + 184: uint16(24256), + 185: uint16(24257), + 186: uint16(24258), + 187: uint16(24259), + 188: uint16(24260), + 189: uint16(24261), + }, + 14: { + 0: uint16(24262), + 1: uint16(24263), + 2: uint16(24264), + 3: uint16(24267), + 4: uint16(24268), + 5: uint16(24269), + 6: uint16(24270), + 7: uint16(24271), + 8: uint16(24272), + 9: uint16(24276), + 10: uint16(24277), + 11: uint16(24279), + 12: uint16(24280), + 13: uint16(24281), + 14: uint16(24282), + 15: uint16(24284), + 16: uint16(24285), + 17: uint16(24286), + 18: uint16(24287), + 19: uint16(24288), + 20: uint16(24289), + 21: uint16(24290), + 22: uint16(24291), + 23: uint16(24292), + 24: uint16(24293), + 25: uint16(24294), + 26: uint16(24295), + 27: uint16(24297), + 28: uint16(24299), + 29: uint16(24300), + 30: uint16(24301), + 31: uint16(24302), + 32: uint16(24303), + 33: uint16(24304), + 34: uint16(24305), + 35: uint16(24306), + 36: uint16(24307), + 37: uint16(24309), + 38: uint16(24312), + 39: uint16(24313), + 40: uint16(24315), + 41: uint16(24316), + 42: uint16(24317), + 43: uint16(24325), + 44: uint16(24326), + 45: uint16(24327), + 46: uint16(24329), + 47: uint16(24332), + 48: uint16(24333), + 49: uint16(24334), + 50: uint16(24336), + 51: uint16(24338), + 52: uint16(24340), + 53: uint16(24342), + 54: uint16(24345), + 55: uint16(24346), + 56: uint16(24348), + 57: uint16(24349), + 58: uint16(24350), + 59: uint16(24353), + 60: uint16(24354), + 61: uint16(24355), + 62: uint16(24356), + 63: uint16(24360), + 64: uint16(24363), + 65: uint16(24364), + 66: uint16(24366), + 67: uint16(24368), + 68: uint16(24370), + 69: uint16(24371), + 70: uint16(24372), + 71: uint16(24373), + 72: uint16(24374), + 73: uint16(24375), + 74: uint16(24376), + 75: uint16(24379), + 76: uint16(24381), + 77: uint16(24382), + 78: uint16(24383), + 79: uint16(24385), + 80: uint16(24386), + 81: uint16(24387), + 82: uint16(24388), + 83: uint16(24389), + 84: uint16(24390), + 85: uint16(24391), + 86: uint16(24392), + 87: uint16(24393), + 88: uint16(24394), + 89: uint16(24395), + 90: uint16(24396), + 91: uint16(24397), + 92: uint16(24398), + 93: uint16(24399), + 94: uint16(24401), + 95: uint16(24404), + 96: uint16(24409), + 97: uint16(24410), + 98: uint16(24411), + 99: uint16(24412), + 100: uint16(24414), + 101: uint16(24415), + 102: uint16(24416), + 103: uint16(24419), + 104: uint16(24421), + 105: uint16(24423), + 106: uint16(24424), + 107: uint16(24427), + 108: uint16(24430), + 109: uint16(24431), + 110: uint16(24434), + 111: uint16(24436), + 112: uint16(24437), + 113: uint16(24438), + 114: uint16(24440), + 115: uint16(24442), + 116: uint16(24445), + 117: uint16(24446), + 118: uint16(24447), + 119: uint16(24451), + 120: uint16(24454), + 121: uint16(24461), + 122: uint16(24462), + 123: uint16(24463), + 124: uint16(24465), + 125: uint16(24467), + 126: uint16(24468), + 127: uint16(24470), + 128: uint16(24474), + 129: uint16(24475), + 130: uint16(24477), + 131: uint16(24478), + 132: uint16(24479), + 133: uint16(24480), + 134: uint16(24482), + 135: uint16(24483), + 136: uint16(24484), + 137: uint16(24485), + 138: uint16(24486), + 139: uint16(24487), + 140: uint16(24489), + 141: uint16(24491), + 142: uint16(24492), + 143: uint16(24495), + 144: uint16(24496), + 145: uint16(24497), + 146: uint16(24498), + 147: uint16(24499), + 148: uint16(24500), + 149: uint16(24502), + 150: uint16(24504), + 151: uint16(24505), + 152: uint16(24506), + 153: uint16(24507), + 154: uint16(24510), + 155: uint16(24511), + 156: uint16(24512), + 157: uint16(24513), + 158: uint16(24514), + 159: uint16(24519), + 160: uint16(24520), + 161: uint16(24522), + 162: uint16(24523), + 163: uint16(24526), + 164: uint16(24531), + 165: uint16(24532), + 166: uint16(24533), + 167: uint16(24538), + 168: uint16(24539), + 169: uint16(24540), + 170: uint16(24542), + 171: uint16(24543), + 172: uint16(24546), + 173: uint16(24547), + 174: uint16(24549), + 175: uint16(24550), + 176: uint16(24552), + 177: uint16(24553), + 178: uint16(24556), + 179: uint16(24559), + 180: uint16(24560), + 181: uint16(24562), + 182: uint16(24563), + 183: uint16(24564), + 184: uint16(24566), + 185: uint16(24567), + 186: uint16(24569), + 187: uint16(24570), + 188: uint16(24572), + 189: uint16(24583), + }, + 15: { + 0: uint16(24584), + 1: uint16(24585), + 2: uint16(24587), + 3: uint16(24588), + 4: uint16(24592), + 5: uint16(24593), + 6: uint16(24595), + 7: uint16(24599), + 8: uint16(24600), + 9: uint16(24602), + 10: uint16(24606), + 11: uint16(24607), + 12: uint16(24610), + 13: uint16(24611), + 14: uint16(24612), + 15: uint16(24620), + 16: uint16(24621), + 17: uint16(24622), + 18: uint16(24624), + 19: uint16(24625), + 20: uint16(24626), + 21: uint16(24627), + 22: uint16(24628), + 23: uint16(24630), + 24: uint16(24631), + 25: uint16(24632), + 26: uint16(24633), + 27: uint16(24634), + 28: uint16(24637), + 29: uint16(24638), + 30: uint16(24640), + 31: uint16(24644), + 32: uint16(24645), + 33: uint16(24646), + 34: uint16(24647), + 35: uint16(24648), + 36: uint16(24649), + 37: uint16(24650), + 38: uint16(24652), + 39: uint16(24654), + 40: uint16(24655), + 41: uint16(24657), + 42: uint16(24659), + 43: uint16(24660), + 44: uint16(24662), + 45: uint16(24663), + 46: uint16(24664), + 47: uint16(24667), + 48: uint16(24668), + 49: uint16(24670), + 50: uint16(24671), + 51: uint16(24672), + 52: uint16(24673), + 53: uint16(24677), + 54: uint16(24678), + 55: uint16(24686), + 56: uint16(24689), + 57: uint16(24690), + 58: uint16(24692), + 59: uint16(24693), + 60: uint16(24695), + 61: uint16(24702), + 62: uint16(24704), + 63: uint16(24705), + 64: uint16(24706), + 65: uint16(24709), + 66: uint16(24710), + 67: uint16(24711), + 68: uint16(24712), + 69: uint16(24714), + 70: uint16(24715), + 71: uint16(24718), + 72: uint16(24719), + 73: uint16(24720), + 74: uint16(24721), + 75: uint16(24723), + 76: uint16(24725), + 77: uint16(24727), + 78: uint16(24728), + 79: uint16(24729), + 80: uint16(24732), + 81: uint16(24734), + 82: uint16(24737), + 83: uint16(24738), + 84: uint16(24740), + 85: uint16(24741), + 86: uint16(24743), + 87: uint16(24745), + 88: uint16(24746), + 89: uint16(24750), + 90: uint16(24752), + 91: uint16(24755), + 92: uint16(24757), + 93: uint16(24758), + 94: uint16(24759), + 95: uint16(24761), + 96: uint16(24762), + 97: uint16(24765), + 98: uint16(24766), + 99: uint16(24767), + 100: uint16(24768), + 101: uint16(24769), + 102: uint16(24770), + 103: uint16(24771), + 104: uint16(24772), + 105: uint16(24775), + 106: uint16(24776), + 107: uint16(24777), + 108: uint16(24780), + 109: uint16(24781), + 110: uint16(24782), + 111: uint16(24783), + 112: uint16(24784), + 113: uint16(24786), + 114: uint16(24787), + 115: uint16(24788), + 116: uint16(24790), + 117: uint16(24791), + 118: uint16(24793), + 119: uint16(24795), + 120: uint16(24798), + 121: uint16(24801), + 122: uint16(24802), + 123: uint16(24803), + 124: uint16(24804), + 125: uint16(24805), + 126: uint16(24810), + 127: uint16(24817), + 128: uint16(24818), + 129: uint16(24821), + 130: uint16(24823), + 131: uint16(24824), + 132: uint16(24827), + 133: uint16(24828), + 134: uint16(24829), + 135: uint16(24830), + 136: uint16(24831), + 137: uint16(24834), + 138: uint16(24835), + 139: uint16(24836), + 140: uint16(24837), + 141: uint16(24839), + 142: uint16(24842), + 143: uint16(24843), + 144: uint16(24844), + 145: uint16(24848), + 146: uint16(24849), + 147: uint16(24850), + 148: uint16(24851), + 149: uint16(24852), + 150: uint16(24854), + 151: uint16(24855), + 152: uint16(24856), + 153: uint16(24857), + 154: uint16(24859), + 155: uint16(24860), + 156: uint16(24861), + 157: uint16(24862), + 158: uint16(24865), + 159: uint16(24866), + 160: uint16(24869), + 161: uint16(24872), + 162: uint16(24873), + 163: uint16(24874), + 164: uint16(24876), + 165: uint16(24877), + 166: uint16(24878), + 167: uint16(24879), + 168: uint16(24880), + 169: uint16(24881), + 170: uint16(24882), + 171: uint16(24883), + 172: uint16(24884), + 173: uint16(24885), + 174: uint16(24886), + 175: uint16(24887), + 176: uint16(24888), + 177: uint16(24889), + 178: uint16(24890), + 179: uint16(24891), + 180: uint16(24892), + 181: uint16(24893), + 182: uint16(24894), + 183: uint16(24896), + 184: uint16(24897), + 185: uint16(24898), + 186: uint16(24899), + 187: uint16(24900), + 188: uint16(24901), + 189: uint16(24902), + }, + 16: { + 0: uint16(24903), + 1: uint16(24905), + 2: uint16(24907), + 3: uint16(24909), + 4: uint16(24911), + 5: uint16(24912), + 6: uint16(24914), + 7: uint16(24915), + 8: uint16(24916), + 9: uint16(24918), + 10: uint16(24919), + 11: uint16(24920), + 12: uint16(24921), + 13: uint16(24922), + 14: uint16(24923), + 15: uint16(24924), + 16: uint16(24926), + 17: uint16(24927), + 18: uint16(24928), + 19: uint16(24929), + 20: uint16(24931), + 21: uint16(24932), + 22: uint16(24933), + 23: uint16(24934), + 24: uint16(24937), + 25: uint16(24938), + 26: uint16(24939), + 27: uint16(24940), + 28: uint16(24941), + 29: uint16(24942), + 30: uint16(24943), + 31: uint16(24945), + 32: uint16(24946), + 33: uint16(24947), + 34: uint16(24948), + 35: uint16(24950), + 36: uint16(24952), + 37: uint16(24953), + 38: uint16(24954), + 39: uint16(24955), + 40: uint16(24956), + 41: uint16(24957), + 42: uint16(24958), + 43: uint16(24959), + 44: uint16(24960), + 45: uint16(24961), + 46: uint16(24962), + 47: uint16(24963), + 48: uint16(24964), + 49: uint16(24965), + 50: uint16(24966), + 51: uint16(24967), + 52: uint16(24968), + 53: uint16(24969), + 54: uint16(24970), + 55: uint16(24972), + 56: uint16(24973), + 57: uint16(24975), + 58: uint16(24976), + 59: uint16(24977), + 60: uint16(24978), + 61: uint16(24979), + 62: uint16(24981), + 63: uint16(24982), + 64: uint16(24983), + 65: uint16(24984), + 66: uint16(24985), + 67: uint16(24986), + 68: uint16(24987), + 69: uint16(24988), + 70: uint16(24990), + 71: uint16(24991), + 72: uint16(24992), + 73: uint16(24993), + 74: uint16(24994), + 75: uint16(24995), + 76: uint16(24996), + 77: uint16(24997), + 78: uint16(24998), + 79: uint16(25002), + 80: uint16(25003), + 81: uint16(25005), + 82: uint16(25006), + 83: uint16(25007), + 84: uint16(25008), + 85: uint16(25009), + 86: uint16(25010), + 87: uint16(25011), + 88: uint16(25012), + 89: uint16(25013), + 90: uint16(25014), + 91: uint16(25016), + 92: uint16(25017), + 93: uint16(25018), + 94: uint16(25019), + 95: uint16(25020), + 96: uint16(25021), + 97: uint16(25023), + 98: uint16(25024), + 99: uint16(25025), + 100: uint16(25027), + 101: uint16(25028), + 102: uint16(25029), + 103: uint16(25030), + 104: uint16(25031), + 105: uint16(25033), + 106: uint16(25036), + 107: uint16(25037), + 108: uint16(25038), + 109: uint16(25039), + 110: uint16(25040), + 111: uint16(25043), + 112: uint16(25045), + 113: uint16(25046), + 114: uint16(25047), + 115: uint16(25048), + 116: uint16(25049), + 117: uint16(25050), + 118: uint16(25051), + 119: uint16(25052), + 120: uint16(25053), + 121: uint16(25054), + 122: uint16(25055), + 123: uint16(25056), + 124: uint16(25057), + 125: uint16(25058), + 126: uint16(25059), + 127: uint16(25060), + 128: uint16(25061), + 129: uint16(25063), + 130: uint16(25064), + 131: uint16(25065), + 132: uint16(25066), + 133: uint16(25067), + 134: uint16(25068), + 135: uint16(25069), + 136: uint16(25070), + 137: uint16(25071), + 138: uint16(25072), + 139: uint16(25073), + 140: uint16(25074), + 141: uint16(25075), + 142: uint16(25076), + 143: uint16(25078), + 144: uint16(25079), + 145: uint16(25080), + 146: uint16(25081), + 147: uint16(25082), + 148: uint16(25083), + 149: uint16(25084), + 150: uint16(25085), + 151: uint16(25086), + 152: uint16(25088), + 153: uint16(25089), + 154: uint16(25090), + 155: uint16(25091), + 156: uint16(25092), + 157: uint16(25093), + 158: uint16(25095), + 159: uint16(25097), + 160: uint16(25107), + 161: uint16(25108), + 162: uint16(25113), + 163: uint16(25116), + 164: uint16(25117), + 165: uint16(25118), + 166: uint16(25120), + 167: uint16(25123), + 168: uint16(25126), + 169: uint16(25127), + 170: uint16(25128), + 171: uint16(25129), + 172: uint16(25131), + 173: uint16(25133), + 174: uint16(25135), + 175: uint16(25136), + 176: uint16(25137), + 177: uint16(25138), + 178: uint16(25141), + 179: uint16(25142), + 180: uint16(25144), + 181: uint16(25145), + 182: uint16(25146), + 183: uint16(25147), + 184: uint16(25148), + 185: uint16(25154), + 186: uint16(25156), + 187: uint16(25157), + 188: uint16(25158), + 189: uint16(25162), + }, + 17: { + 0: uint16(25167), + 1: uint16(25168), + 2: uint16(25173), + 3: uint16(25174), + 4: uint16(25175), + 5: uint16(25177), + 6: uint16(25178), + 7: uint16(25180), + 8: uint16(25181), + 9: uint16(25182), + 10: uint16(25183), + 11: uint16(25184), + 12: uint16(25185), + 13: uint16(25186), + 14: uint16(25188), + 15: uint16(25189), + 16: uint16(25192), + 17: uint16(25201), + 18: uint16(25202), + 19: uint16(25204), + 20: uint16(25205), + 21: uint16(25207), + 22: uint16(25208), + 23: uint16(25210), + 24: uint16(25211), + 25: uint16(25213), + 26: uint16(25217), + 27: uint16(25218), + 28: uint16(25219), + 29: uint16(25221), + 30: uint16(25222), + 31: uint16(25223), + 32: uint16(25224), + 33: uint16(25227), + 34: uint16(25228), + 35: uint16(25229), + 36: uint16(25230), + 37: uint16(25231), + 38: uint16(25232), + 39: uint16(25236), + 40: uint16(25241), + 41: uint16(25244), + 42: uint16(25245), + 43: uint16(25246), + 44: uint16(25251), + 45: uint16(25254), + 46: uint16(25255), + 47: uint16(25257), + 48: uint16(25258), + 49: uint16(25261), + 50: uint16(25262), + 51: uint16(25263), + 52: uint16(25264), + 53: uint16(25266), + 54: uint16(25267), + 55: uint16(25268), + 56: uint16(25270), + 57: uint16(25271), + 58: uint16(25272), + 59: uint16(25274), + 60: uint16(25278), + 61: uint16(25280), + 62: uint16(25281), + 63: uint16(25283), + 64: uint16(25291), + 65: uint16(25295), + 66: uint16(25297), + 67: uint16(25301), + 68: uint16(25309), + 69: uint16(25310), + 70: uint16(25312), + 71: uint16(25313), + 72: uint16(25316), + 73: uint16(25322), + 74: uint16(25323), + 75: uint16(25328), + 76: uint16(25330), + 77: uint16(25333), + 78: uint16(25336), + 79: uint16(25337), + 80: uint16(25338), + 81: uint16(25339), + 82: uint16(25344), + 83: uint16(25347), + 84: uint16(25348), + 85: uint16(25349), + 86: uint16(25350), + 87: uint16(25354), + 88: uint16(25355), + 89: uint16(25356), + 90: uint16(25357), + 91: uint16(25359), + 92: uint16(25360), + 93: uint16(25362), + 94: uint16(25363), + 95: uint16(25364), + 96: uint16(25365), + 97: uint16(25367), + 98: uint16(25368), + 99: uint16(25369), + 100: uint16(25372), + 101: uint16(25382), + 102: uint16(25383), + 103: uint16(25385), + 104: uint16(25388), + 105: uint16(25389), + 106: uint16(25390), + 107: uint16(25392), + 108: uint16(25393), + 109: uint16(25395), + 110: uint16(25396), + 111: uint16(25397), + 112: uint16(25398), + 113: uint16(25399), + 114: uint16(25400), + 115: uint16(25403), + 116: uint16(25404), + 117: uint16(25406), + 118: uint16(25407), + 119: uint16(25408), + 120: uint16(25409), + 121: uint16(25412), + 122: uint16(25415), + 123: uint16(25416), + 124: uint16(25418), + 125: uint16(25425), + 126: uint16(25426), + 127: uint16(25427), + 128: uint16(25428), + 129: uint16(25430), + 130: uint16(25431), + 131: uint16(25432), + 132: uint16(25433), + 133: uint16(25434), + 134: uint16(25435), + 135: uint16(25436), + 136: uint16(25437), + 137: uint16(25440), + 138: uint16(25444), + 139: uint16(25445), + 140: uint16(25446), + 141: uint16(25448), + 142: uint16(25450), + 143: uint16(25451), + 144: uint16(25452), + 145: uint16(25455), + 146: uint16(25456), + 147: uint16(25458), + 148: uint16(25459), + 149: uint16(25460), + 150: uint16(25461), + 151: uint16(25464), + 152: uint16(25465), + 153: uint16(25468), + 154: uint16(25469), + 155: uint16(25470), + 156: uint16(25471), + 157: uint16(25473), + 158: uint16(25475), + 159: uint16(25476), + 160: uint16(25477), + 161: uint16(25478), + 162: uint16(25483), + 163: uint16(25485), + 164: uint16(25489), + 165: uint16(25491), + 166: uint16(25492), + 167: uint16(25493), + 168: uint16(25495), + 169: uint16(25497), + 170: uint16(25498), + 171: uint16(25499), + 172: uint16(25500), + 173: uint16(25501), + 174: uint16(25502), + 175: uint16(25503), + 176: uint16(25505), + 177: uint16(25508), + 178: uint16(25510), + 179: uint16(25515), + 180: uint16(25519), + 181: uint16(25521), + 182: uint16(25522), + 183: uint16(25525), + 184: uint16(25526), + 185: uint16(25529), + 186: uint16(25531), + 187: uint16(25533), + 188: uint16(25535), + 189: uint16(25536), + }, + 18: { + 0: uint16(25537), + 1: uint16(25538), + 2: uint16(25539), + 3: uint16(25541), + 4: uint16(25543), + 5: uint16(25544), + 6: uint16(25546), + 7: uint16(25547), + 8: uint16(25548), + 9: uint16(25553), + 10: uint16(25555), + 11: uint16(25556), + 12: uint16(25557), + 13: uint16(25559), + 14: uint16(25560), + 15: uint16(25561), + 16: uint16(25562), + 17: uint16(25563), + 18: uint16(25564), + 19: uint16(25565), + 20: uint16(25567), + 21: uint16(25570), + 22: uint16(25572), + 23: uint16(25573), + 24: uint16(25574), + 25: uint16(25575), + 26: uint16(25576), + 27: uint16(25579), + 28: uint16(25580), + 29: uint16(25582), + 30: uint16(25583), + 31: uint16(25584), + 32: uint16(25585), + 33: uint16(25587), + 34: uint16(25589), + 35: uint16(25591), + 36: uint16(25593), + 37: uint16(25594), + 38: uint16(25595), + 39: uint16(25596), + 40: uint16(25598), + 41: uint16(25603), + 42: uint16(25604), + 43: uint16(25606), + 44: uint16(25607), + 45: uint16(25608), + 46: uint16(25609), + 47: uint16(25610), + 48: uint16(25613), + 49: uint16(25614), + 50: uint16(25617), + 51: uint16(25618), + 52: uint16(25621), + 53: uint16(25622), + 54: uint16(25623), + 55: uint16(25624), + 56: uint16(25625), + 57: uint16(25626), + 58: uint16(25629), + 59: uint16(25631), + 60: uint16(25634), + 61: uint16(25635), + 62: uint16(25636), + 63: uint16(25637), + 64: uint16(25639), + 65: uint16(25640), + 66: uint16(25641), + 67: uint16(25643), + 68: uint16(25646), + 69: uint16(25647), + 70: uint16(25648), + 71: uint16(25649), + 72: uint16(25650), + 73: uint16(25651), + 74: uint16(25653), + 75: uint16(25654), + 76: uint16(25655), + 77: uint16(25656), + 78: uint16(25657), + 79: uint16(25659), + 80: uint16(25660), + 81: uint16(25662), + 82: uint16(25664), + 83: uint16(25666), + 84: uint16(25667), + 85: uint16(25673), + 86: uint16(25675), + 87: uint16(25676), + 88: uint16(25677), + 89: uint16(25678), + 90: uint16(25679), + 91: uint16(25680), + 92: uint16(25681), + 93: uint16(25683), + 94: uint16(25685), + 95: uint16(25686), + 96: uint16(25687), + 97: uint16(25689), + 98: uint16(25690), + 99: uint16(25691), + 100: uint16(25692), + 101: uint16(25693), + 102: uint16(25695), + 103: uint16(25696), + 104: uint16(25697), + 105: uint16(25698), + 106: uint16(25699), + 107: uint16(25700), + 108: uint16(25701), + 109: uint16(25702), + 110: uint16(25704), + 111: uint16(25706), + 112: uint16(25707), + 113: uint16(25708), + 114: uint16(25710), + 115: uint16(25711), + 116: uint16(25712), + 117: uint16(25713), + 118: uint16(25714), + 119: uint16(25715), + 120: uint16(25716), + 121: uint16(25717), + 122: uint16(25718), + 123: uint16(25719), + 124: uint16(25723), + 125: uint16(25724), + 126: uint16(25725), + 127: uint16(25726), + 128: uint16(25727), + 129: uint16(25728), + 130: uint16(25729), + 131: uint16(25731), + 132: uint16(25734), + 133: uint16(25736), + 134: uint16(25737), + 135: uint16(25738), + 136: uint16(25739), + 137: uint16(25740), + 138: uint16(25741), + 139: uint16(25742), + 140: uint16(25743), + 141: uint16(25744), + 142: uint16(25747), + 143: uint16(25748), + 144: uint16(25751), + 145: uint16(25752), + 146: uint16(25754), + 147: uint16(25755), + 148: uint16(25756), + 149: uint16(25757), + 150: uint16(25759), + 151: uint16(25760), + 152: uint16(25761), + 153: uint16(25762), + 154: uint16(25763), + 155: uint16(25765), + 156: uint16(25766), + 157: uint16(25767), + 158: uint16(25768), + 159: uint16(25770), + 160: uint16(25771), + 161: uint16(25775), + 162: uint16(25777), + 163: uint16(25778), + 164: uint16(25779), + 165: uint16(25780), + 166: uint16(25782), + 167: uint16(25785), + 168: uint16(25787), + 169: uint16(25789), + 170: uint16(25790), + 171: uint16(25791), + 172: uint16(25793), + 173: uint16(25795), + 174: uint16(25796), + 175: uint16(25798), + 176: uint16(25799), + 177: uint16(25800), + 178: uint16(25801), + 179: uint16(25802), + 180: uint16(25803), + 181: uint16(25804), + 182: uint16(25807), + 183: uint16(25809), + 184: uint16(25811), + 185: uint16(25812), + 186: uint16(25813), + 187: uint16(25814), + 188: uint16(25817), + 189: uint16(25818), + }, + 19: { + 0: uint16(25819), + 1: uint16(25820), + 2: uint16(25821), + 3: uint16(25823), + 4: uint16(25824), + 5: uint16(25825), + 6: uint16(25827), + 7: uint16(25829), + 8: uint16(25831), + 9: uint16(25832), + 10: uint16(25833), + 11: uint16(25834), + 12: uint16(25835), + 13: uint16(25836), + 14: uint16(25837), + 15: uint16(25838), + 16: uint16(25839), + 17: uint16(25840), + 18: uint16(25841), + 19: uint16(25842), + 20: uint16(25843), + 21: uint16(25844), + 22: uint16(25845), + 23: uint16(25846), + 24: uint16(25847), + 25: uint16(25848), + 26: uint16(25849), + 27: uint16(25850), + 28: uint16(25851), + 29: uint16(25852), + 30: uint16(25853), + 31: uint16(25854), + 32: uint16(25855), + 33: uint16(25857), + 34: uint16(25858), + 35: uint16(25859), + 36: uint16(25860), + 37: uint16(25861), + 38: uint16(25862), + 39: uint16(25863), + 40: uint16(25864), + 41: uint16(25866), + 42: uint16(25867), + 43: uint16(25868), + 44: uint16(25869), + 45: uint16(25870), + 46: uint16(25871), + 47: uint16(25872), + 48: uint16(25873), + 49: uint16(25875), + 50: uint16(25876), + 51: uint16(25877), + 52: uint16(25878), + 53: uint16(25879), + 54: uint16(25881), + 55: uint16(25882), + 56: uint16(25883), + 57: uint16(25884), + 58: uint16(25885), + 59: uint16(25886), + 60: uint16(25887), + 61: uint16(25888), + 62: uint16(25889), + 63: uint16(25890), + 64: uint16(25891), + 65: uint16(25892), + 66: uint16(25894), + 67: uint16(25895), + 68: uint16(25896), + 69: uint16(25897), + 70: uint16(25898), + 71: uint16(25900), + 72: uint16(25901), + 73: uint16(25904), + 74: uint16(25905), + 75: uint16(25906), + 76: uint16(25907), + 77: uint16(25911), + 78: uint16(25914), + 79: uint16(25916), + 80: uint16(25917), + 81: uint16(25920), + 82: uint16(25921), + 83: uint16(25922), + 84: uint16(25923), + 85: uint16(25924), + 86: uint16(25926), + 87: uint16(25927), + 88: uint16(25930), + 89: uint16(25931), + 90: uint16(25933), + 91: uint16(25934), + 92: uint16(25936), + 93: uint16(25938), + 94: uint16(25939), + 95: uint16(25940), + 96: uint16(25943), + 97: uint16(25944), + 98: uint16(25946), + 99: uint16(25948), + 100: uint16(25951), + 101: uint16(25952), + 102: uint16(25953), + 103: uint16(25956), + 104: uint16(25957), + 105: uint16(25959), + 106: uint16(25960), + 107: uint16(25961), + 108: uint16(25962), + 109: uint16(25965), + 110: uint16(25966), + 111: uint16(25967), + 112: uint16(25969), + 113: uint16(25971), + 114: uint16(25973), + 115: uint16(25974), + 116: uint16(25976), + 117: uint16(25977), + 118: uint16(25978), + 119: uint16(25979), + 120: uint16(25980), + 121: uint16(25981), + 122: uint16(25982), + 123: uint16(25983), + 124: uint16(25984), + 125: uint16(25985), + 126: uint16(25986), + 127: uint16(25987), + 128: uint16(25988), + 129: uint16(25989), + 130: uint16(25990), + 131: uint16(25992), + 132: uint16(25993), + 133: uint16(25994), + 134: uint16(25997), + 135: uint16(25998), + 136: uint16(25999), + 137: uint16(26002), + 138: uint16(26004), + 139: uint16(26005), + 140: uint16(26006), + 141: uint16(26008), + 142: uint16(26010), + 143: uint16(26013), + 144: uint16(26014), + 145: uint16(26016), + 146: uint16(26018), + 147: uint16(26019), + 148: uint16(26022), + 149: uint16(26024), + 150: uint16(26026), + 151: uint16(26028), + 152: uint16(26030), + 153: uint16(26033), + 154: uint16(26034), + 155: uint16(26035), + 156: uint16(26036), + 157: uint16(26037), + 158: uint16(26038), + 159: uint16(26039), + 160: uint16(26040), + 161: uint16(26042), + 162: uint16(26043), + 163: uint16(26046), + 164: uint16(26047), + 165: uint16(26048), + 166: uint16(26050), + 167: uint16(26055), + 168: uint16(26056), + 169: uint16(26057), + 170: uint16(26058), + 171: uint16(26061), + 172: uint16(26064), + 173: uint16(26065), + 174: uint16(26067), + 175: uint16(26068), + 176: uint16(26069), + 177: uint16(26072), + 178: uint16(26073), + 179: uint16(26074), + 180: uint16(26075), + 181: uint16(26076), + 182: uint16(26077), + 183: uint16(26078), + 184: uint16(26079), + 185: uint16(26081), + 186: uint16(26083), + 187: uint16(26084), + 188: uint16(26090), + 189: uint16(26091), + }, + 20: { + 0: uint16(26098), + 1: uint16(26099), + 2: uint16(26100), + 3: uint16(26101), + 4: uint16(26104), + 5: uint16(26105), + 6: uint16(26107), + 7: uint16(26108), + 8: uint16(26109), + 9: uint16(26110), + 10: uint16(26111), + 11: uint16(26113), + 12: uint16(26116), + 13: uint16(26117), + 14: uint16(26119), + 15: uint16(26120), + 16: uint16(26121), + 17: uint16(26123), + 18: uint16(26125), + 19: uint16(26128), + 20: uint16(26129), + 21: uint16(26130), + 22: uint16(26134), + 23: uint16(26135), + 24: uint16(26136), + 25: uint16(26138), + 26: uint16(26139), + 27: uint16(26140), + 28: uint16(26142), + 29: uint16(26145), + 30: uint16(26146), + 31: uint16(26147), + 32: uint16(26148), + 33: uint16(26150), + 34: uint16(26153), + 35: uint16(26154), + 36: uint16(26155), + 37: uint16(26156), + 38: uint16(26158), + 39: uint16(26160), + 40: uint16(26162), + 41: uint16(26163), + 42: uint16(26167), + 43: uint16(26168), + 44: uint16(26169), + 45: uint16(26170), + 46: uint16(26171), + 47: uint16(26173), + 48: uint16(26175), + 49: uint16(26176), + 50: uint16(26178), + 51: uint16(26180), + 52: uint16(26181), + 53: uint16(26182), + 54: uint16(26183), + 55: uint16(26184), + 56: uint16(26185), + 57: uint16(26186), + 58: uint16(26189), + 59: uint16(26190), + 60: uint16(26192), + 61: uint16(26193), + 62: uint16(26200), + 63: uint16(26201), + 64: uint16(26203), + 65: uint16(26204), + 66: uint16(26205), + 67: uint16(26206), + 68: uint16(26208), + 69: uint16(26210), + 70: uint16(26211), + 71: uint16(26213), + 72: uint16(26215), + 73: uint16(26217), + 74: uint16(26218), + 75: uint16(26219), + 76: uint16(26220), + 77: uint16(26221), + 78: uint16(26225), + 79: uint16(26226), + 80: uint16(26227), + 81: uint16(26229), + 82: uint16(26232), + 83: uint16(26233), + 84: uint16(26235), + 85: uint16(26236), + 86: uint16(26237), + 87: uint16(26239), + 88: uint16(26240), + 89: uint16(26241), + 90: uint16(26243), + 91: uint16(26245), + 92: uint16(26246), + 93: uint16(26248), + 94: uint16(26249), + 95: uint16(26250), + 96: uint16(26251), + 97: uint16(26253), + 98: uint16(26254), + 99: uint16(26255), + 100: uint16(26256), + 101: uint16(26258), + 102: uint16(26259), + 103: uint16(26260), + 104: uint16(26261), + 105: uint16(26264), + 106: uint16(26265), + 107: uint16(26266), + 108: uint16(26267), + 109: uint16(26268), + 110: uint16(26270), + 111: uint16(26271), + 112: uint16(26272), + 113: uint16(26273), + 114: uint16(26274), + 115: uint16(26275), + 116: uint16(26276), + 117: uint16(26277), + 118: uint16(26278), + 119: uint16(26281), + 120: uint16(26282), + 121: uint16(26283), + 122: uint16(26284), + 123: uint16(26285), + 124: uint16(26287), + 125: uint16(26288), + 126: uint16(26289), + 127: uint16(26290), + 128: uint16(26291), + 129: uint16(26293), + 130: uint16(26294), + 131: uint16(26295), + 132: uint16(26296), + 133: uint16(26298), + 134: uint16(26299), + 135: uint16(26300), + 136: uint16(26301), + 137: uint16(26303), + 138: uint16(26304), + 139: uint16(26305), + 140: uint16(26306), + 141: uint16(26307), + 142: uint16(26308), + 143: uint16(26309), + 144: uint16(26310), + 145: uint16(26311), + 146: uint16(26312), + 147: uint16(26313), + 148: uint16(26314), + 149: uint16(26315), + 150: uint16(26316), + 151: uint16(26317), + 152: uint16(26318), + 153: uint16(26319), + 154: uint16(26320), + 155: uint16(26321), + 156: uint16(26322), + 157: uint16(26323), + 158: uint16(26324), + 159: uint16(26325), + 160: uint16(26326), + 161: uint16(26327), + 162: uint16(26328), + 163: uint16(26330), + 164: uint16(26334), + 165: uint16(26335), + 166: uint16(26336), + 167: uint16(26337), + 168: uint16(26338), + 169: uint16(26339), + 170: uint16(26340), + 171: uint16(26341), + 172: uint16(26343), + 173: uint16(26344), + 174: uint16(26346), + 175: uint16(26347), + 176: uint16(26348), + 177: uint16(26349), + 178: uint16(26350), + 179: uint16(26351), + 180: uint16(26353), + 181: uint16(26357), + 182: uint16(26358), + 183: uint16(26360), + 184: uint16(26362), + 185: uint16(26363), + 186: uint16(26365), + 187: uint16(26369), + 188: uint16(26370), + 189: uint16(26371), + }, + 21: { + 0: uint16(26372), + 1: uint16(26373), + 2: uint16(26374), + 3: uint16(26375), + 4: uint16(26380), + 5: uint16(26382), + 6: uint16(26383), + 7: uint16(26385), + 8: uint16(26386), + 9: uint16(26387), + 10: uint16(26390), + 11: uint16(26392), + 12: uint16(26393), + 13: uint16(26394), + 14: uint16(26396), + 15: uint16(26398), + 16: uint16(26400), + 17: uint16(26401), + 18: uint16(26402), + 19: uint16(26403), + 20: uint16(26404), + 21: uint16(26405), + 22: uint16(26407), + 23: uint16(26409), + 24: uint16(26414), + 25: uint16(26416), + 26: uint16(26418), + 27: uint16(26419), + 28: uint16(26422), + 29: uint16(26423), + 30: uint16(26424), + 31: uint16(26425), + 32: uint16(26427), + 33: uint16(26428), + 34: uint16(26430), + 35: uint16(26431), + 36: uint16(26433), + 37: uint16(26436), + 38: uint16(26437), + 39: uint16(26439), + 40: uint16(26442), + 41: uint16(26443), + 42: uint16(26445), + 43: uint16(26450), + 44: uint16(26452), + 45: uint16(26453), + 46: uint16(26455), + 47: uint16(26456), + 48: uint16(26457), + 49: uint16(26458), + 50: uint16(26459), + 51: uint16(26461), + 52: uint16(26466), + 53: uint16(26467), + 54: uint16(26468), + 55: uint16(26470), + 56: uint16(26471), + 57: uint16(26475), + 58: uint16(26476), + 59: uint16(26478), + 60: uint16(26481), + 61: uint16(26484), + 62: uint16(26486), + 63: uint16(26488), + 64: uint16(26489), + 65: uint16(26490), + 66: uint16(26491), + 67: uint16(26493), + 68: uint16(26496), + 69: uint16(26498), + 70: uint16(26499), + 71: uint16(26501), + 72: uint16(26502), + 73: uint16(26504), + 74: uint16(26506), + 75: uint16(26508), + 76: uint16(26509), + 77: uint16(26510), + 78: uint16(26511), + 79: uint16(26513), + 80: uint16(26514), + 81: uint16(26515), + 82: uint16(26516), + 83: uint16(26518), + 84: uint16(26521), + 85: uint16(26523), + 86: uint16(26527), + 87: uint16(26528), + 88: uint16(26529), + 89: uint16(26532), + 90: uint16(26534), + 91: uint16(26537), + 92: uint16(26540), + 93: uint16(26542), + 94: uint16(26545), + 95: uint16(26546), + 96: uint16(26548), + 97: uint16(26553), + 98: uint16(26554), + 99: uint16(26555), + 100: uint16(26556), + 101: uint16(26557), + 102: uint16(26558), + 103: uint16(26559), + 104: uint16(26560), + 105: uint16(26562), + 106: uint16(26565), + 107: uint16(26566), + 108: uint16(26567), + 109: uint16(26568), + 110: uint16(26569), + 111: uint16(26570), + 112: uint16(26571), + 113: uint16(26572), + 114: uint16(26573), + 115: uint16(26574), + 116: uint16(26581), + 117: uint16(26582), + 118: uint16(26583), + 119: uint16(26587), + 120: uint16(26591), + 121: uint16(26593), + 122: uint16(26595), + 123: uint16(26596), + 124: uint16(26598), + 125: uint16(26599), + 126: uint16(26600), + 127: uint16(26602), + 128: uint16(26603), + 129: uint16(26605), + 130: uint16(26606), + 131: uint16(26610), + 132: uint16(26613), + 133: uint16(26614), + 134: uint16(26615), + 135: uint16(26616), + 136: uint16(26617), + 137: uint16(26618), + 138: uint16(26619), + 139: uint16(26620), + 140: uint16(26622), + 141: uint16(26625), + 142: uint16(26626), + 143: uint16(26627), + 144: uint16(26628), + 145: uint16(26630), + 146: uint16(26637), + 147: uint16(26640), + 148: uint16(26642), + 149: uint16(26644), + 150: uint16(26645), + 151: uint16(26648), + 152: uint16(26649), + 153: uint16(26650), + 154: uint16(26651), + 155: uint16(26652), + 156: uint16(26654), + 157: uint16(26655), + 158: uint16(26656), + 159: uint16(26658), + 160: uint16(26659), + 161: uint16(26660), + 162: uint16(26661), + 163: uint16(26662), + 164: uint16(26663), + 165: uint16(26664), + 166: uint16(26667), + 167: uint16(26668), + 168: uint16(26669), + 169: uint16(26670), + 170: uint16(26671), + 171: uint16(26672), + 172: uint16(26673), + 173: uint16(26676), + 174: uint16(26677), + 175: uint16(26678), + 176: uint16(26682), + 177: uint16(26683), + 178: uint16(26687), + 179: uint16(26695), + 180: uint16(26699), + 181: uint16(26701), + 182: uint16(26703), + 183: uint16(26706), + 184: uint16(26710), + 185: uint16(26711), + 186: uint16(26712), + 187: uint16(26713), + 188: uint16(26714), + 189: uint16(26715), + }, + 22: { + 0: uint16(26716), + 1: uint16(26717), + 2: uint16(26718), + 3: uint16(26719), + 4: uint16(26730), + 5: uint16(26732), + 6: uint16(26733), + 7: uint16(26734), + 8: uint16(26735), + 9: uint16(26736), + 10: uint16(26737), + 11: uint16(26738), + 12: uint16(26739), + 13: uint16(26741), + 14: uint16(26744), + 15: uint16(26745), + 16: uint16(26746), + 17: uint16(26747), + 18: uint16(26748), + 19: uint16(26749), + 20: uint16(26750), + 21: uint16(26751), + 22: uint16(26752), + 23: uint16(26754), + 24: uint16(26756), + 25: uint16(26759), + 26: uint16(26760), + 27: uint16(26761), + 28: uint16(26762), + 29: uint16(26763), + 30: uint16(26764), + 31: uint16(26765), + 32: uint16(26766), + 33: uint16(26768), + 34: uint16(26769), + 35: uint16(26770), + 36: uint16(26772), + 37: uint16(26773), + 38: uint16(26774), + 39: uint16(26776), + 40: uint16(26777), + 41: uint16(26778), + 42: uint16(26779), + 43: uint16(26780), + 44: uint16(26781), + 45: uint16(26782), + 46: uint16(26783), + 47: uint16(26784), + 48: uint16(26785), + 49: uint16(26787), + 50: uint16(26788), + 51: uint16(26789), + 52: uint16(26793), + 53: uint16(26794), + 54: uint16(26795), + 55: uint16(26796), + 56: uint16(26798), + 57: uint16(26801), + 58: uint16(26802), + 59: uint16(26804), + 60: uint16(26806), + 61: uint16(26807), + 62: uint16(26808), + 63: uint16(26809), + 64: uint16(26810), + 65: uint16(26811), + 66: uint16(26812), + 67: uint16(26813), + 68: uint16(26814), + 69: uint16(26815), + 70: uint16(26817), + 71: uint16(26819), + 72: uint16(26820), + 73: uint16(26821), + 74: uint16(26822), + 75: uint16(26823), + 76: uint16(26824), + 77: uint16(26826), + 78: uint16(26828), + 79: uint16(26830), + 80: uint16(26831), + 81: uint16(26832), + 82: uint16(26833), + 83: uint16(26835), + 84: uint16(26836), + 85: uint16(26838), + 86: uint16(26839), + 87: uint16(26841), + 88: uint16(26843), + 89: uint16(26844), + 90: uint16(26845), + 91: uint16(26846), + 92: uint16(26847), + 93: uint16(26849), + 94: uint16(26850), + 95: uint16(26852), + 96: uint16(26853), + 97: uint16(26854), + 98: uint16(26855), + 99: uint16(26856), + 100: uint16(26857), + 101: uint16(26858), + 102: uint16(26859), + 103: uint16(26860), + 104: uint16(26861), + 105: uint16(26863), + 106: uint16(26866), + 107: uint16(26867), + 108: uint16(26868), + 109: uint16(26870), + 110: uint16(26871), + 111: uint16(26872), + 112: uint16(26875), + 113: uint16(26877), + 114: uint16(26878), + 115: uint16(26879), + 116: uint16(26880), + 117: uint16(26882), + 118: uint16(26883), + 119: uint16(26884), + 120: uint16(26886), + 121: uint16(26887), + 122: uint16(26888), + 123: uint16(26889), + 124: uint16(26890), + 125: uint16(26892), + 126: uint16(26895), + 127: uint16(26897), + 128: uint16(26899), + 129: uint16(26900), + 130: uint16(26901), + 131: uint16(26902), + 132: uint16(26903), + 133: uint16(26904), + 134: uint16(26905), + 135: uint16(26906), + 136: uint16(26907), + 137: uint16(26908), + 138: uint16(26909), + 139: uint16(26910), + 140: uint16(26913), + 141: uint16(26914), + 142: uint16(26915), + 143: uint16(26917), + 144: uint16(26918), + 145: uint16(26919), + 146: uint16(26920), + 147: uint16(26921), + 148: uint16(26922), + 149: uint16(26923), + 150: uint16(26924), + 151: uint16(26926), + 152: uint16(26927), + 153: uint16(26929), + 154: uint16(26930), + 155: uint16(26931), + 156: uint16(26933), + 157: uint16(26934), + 158: uint16(26935), + 159: uint16(26936), + 160: uint16(26938), + 161: uint16(26939), + 162: uint16(26940), + 163: uint16(26942), + 164: uint16(26944), + 165: uint16(26945), + 166: uint16(26947), + 167: uint16(26948), + 168: uint16(26949), + 169: uint16(26950), + 170: uint16(26951), + 171: uint16(26952), + 172: uint16(26953), + 173: uint16(26954), + 174: uint16(26955), + 175: uint16(26956), + 176: uint16(26957), + 177: uint16(26958), + 178: uint16(26959), + 179: uint16(26960), + 180: uint16(26961), + 181: uint16(26962), + 182: uint16(26963), + 183: uint16(26965), + 184: uint16(26966), + 185: uint16(26968), + 186: uint16(26969), + 187: uint16(26971), + 188: uint16(26972), + 189: uint16(26975), + }, + 23: { + 0: uint16(26977), + 1: uint16(26978), + 2: uint16(26980), + 3: uint16(26981), + 4: uint16(26983), + 5: uint16(26984), + 6: uint16(26985), + 7: uint16(26986), + 8: uint16(26988), + 9: uint16(26989), + 10: uint16(26991), + 11: uint16(26992), + 12: uint16(26994), + 13: uint16(26995), + 14: uint16(26996), + 15: uint16(26997), + 16: uint16(26998), + 17: uint16(27002), + 18: uint16(27003), + 19: uint16(27005), + 20: uint16(27006), + 21: uint16(27007), + 22: uint16(27009), + 23: uint16(27011), + 24: uint16(27013), + 25: uint16(27018), + 26: uint16(27019), + 27: uint16(27020), + 28: uint16(27022), + 29: uint16(27023), + 30: uint16(27024), + 31: uint16(27025), + 32: uint16(27026), + 33: uint16(27027), + 34: uint16(27030), + 35: uint16(27031), + 36: uint16(27033), + 37: uint16(27034), + 38: uint16(27037), + 39: uint16(27038), + 40: uint16(27039), + 41: uint16(27040), + 42: uint16(27041), + 43: uint16(27042), + 44: uint16(27043), + 45: uint16(27044), + 46: uint16(27045), + 47: uint16(27046), + 48: uint16(27049), + 49: uint16(27050), + 50: uint16(27052), + 51: uint16(27054), + 52: uint16(27055), + 53: uint16(27056), + 54: uint16(27058), + 55: uint16(27059), + 56: uint16(27061), + 57: uint16(27062), + 58: uint16(27064), + 59: uint16(27065), + 60: uint16(27066), + 61: uint16(27068), + 62: uint16(27069), + 63: uint16(27070), + 64: uint16(27071), + 65: uint16(27072), + 66: uint16(27074), + 67: uint16(27075), + 68: uint16(27076), + 69: uint16(27077), + 70: uint16(27078), + 71: uint16(27079), + 72: uint16(27080), + 73: uint16(27081), + 74: uint16(27083), + 75: uint16(27085), + 76: uint16(27087), + 77: uint16(27089), + 78: uint16(27090), + 79: uint16(27091), + 80: uint16(27093), + 81: uint16(27094), + 82: uint16(27095), + 83: uint16(27096), + 84: uint16(27097), + 85: uint16(27098), + 86: uint16(27100), + 87: uint16(27101), + 88: uint16(27102), + 89: uint16(27105), + 90: uint16(27106), + 91: uint16(27107), + 92: uint16(27108), + 93: uint16(27109), + 94: uint16(27110), + 95: uint16(27111), + 96: uint16(27112), + 97: uint16(27113), + 98: uint16(27114), + 99: uint16(27115), + 100: uint16(27116), + 101: uint16(27118), + 102: uint16(27119), + 103: uint16(27120), + 104: uint16(27121), + 105: uint16(27123), + 106: uint16(27124), + 107: uint16(27125), + 108: uint16(27126), + 109: uint16(27127), + 110: uint16(27128), + 111: uint16(27129), + 112: uint16(27130), + 113: uint16(27131), + 114: uint16(27132), + 115: uint16(27134), + 116: uint16(27136), + 117: uint16(27137), + 118: uint16(27138), + 119: uint16(27139), + 120: uint16(27140), + 121: uint16(27141), + 122: uint16(27142), + 123: uint16(27143), + 124: uint16(27144), + 125: uint16(27145), + 126: uint16(27147), + 127: uint16(27148), + 128: uint16(27149), + 129: uint16(27150), + 130: uint16(27151), + 131: uint16(27152), + 132: uint16(27153), + 133: uint16(27154), + 134: uint16(27155), + 135: uint16(27156), + 136: uint16(27157), + 137: uint16(27158), + 138: uint16(27161), + 139: uint16(27162), + 140: uint16(27163), + 141: uint16(27164), + 142: uint16(27165), + 143: uint16(27166), + 144: uint16(27168), + 145: uint16(27170), + 146: uint16(27171), + 147: uint16(27172), + 148: uint16(27173), + 149: uint16(27174), + 150: uint16(27175), + 151: uint16(27177), + 152: uint16(27179), + 153: uint16(27180), + 154: uint16(27181), + 155: uint16(27182), + 156: uint16(27184), + 157: uint16(27186), + 158: uint16(27187), + 159: uint16(27188), + 160: uint16(27190), + 161: uint16(27191), + 162: uint16(27192), + 163: uint16(27193), + 164: uint16(27194), + 165: uint16(27195), + 166: uint16(27196), + 167: uint16(27199), + 168: uint16(27200), + 169: uint16(27201), + 170: uint16(27202), + 171: uint16(27203), + 172: uint16(27205), + 173: uint16(27206), + 174: uint16(27208), + 175: uint16(27209), + 176: uint16(27210), + 177: uint16(27211), + 178: uint16(27212), + 179: uint16(27213), + 180: uint16(27214), + 181: uint16(27215), + 182: uint16(27217), + 183: uint16(27218), + 184: uint16(27219), + 185: uint16(27220), + 186: uint16(27221), + 187: uint16(27222), + 188: uint16(27223), + 189: uint16(27226), + }, + 24: { + 0: uint16(27228), + 1: uint16(27229), + 2: uint16(27230), + 3: uint16(27231), + 4: uint16(27232), + 5: uint16(27234), + 6: uint16(27235), + 7: uint16(27236), + 8: uint16(27238), + 9: uint16(27239), + 10: uint16(27240), + 11: uint16(27241), + 12: uint16(27242), + 13: uint16(27243), + 14: uint16(27244), + 15: uint16(27245), + 16: uint16(27246), + 17: uint16(27247), + 18: uint16(27248), + 19: uint16(27250), + 20: uint16(27251), + 21: uint16(27252), + 22: uint16(27253), + 23: uint16(27254), + 24: uint16(27255), + 25: uint16(27256), + 26: uint16(27258), + 27: uint16(27259), + 28: uint16(27261), + 29: uint16(27262), + 30: uint16(27263), + 31: uint16(27265), + 32: uint16(27266), + 33: uint16(27267), + 34: uint16(27269), + 35: uint16(27270), + 36: uint16(27271), + 37: uint16(27272), + 38: uint16(27273), + 39: uint16(27274), + 40: uint16(27275), + 41: uint16(27276), + 42: uint16(27277), + 43: uint16(27279), + 44: uint16(27282), + 45: uint16(27283), + 46: uint16(27284), + 47: uint16(27285), + 48: uint16(27286), + 49: uint16(27288), + 50: uint16(27289), + 51: uint16(27290), + 52: uint16(27291), + 53: uint16(27292), + 54: uint16(27293), + 55: uint16(27294), + 56: uint16(27295), + 57: uint16(27297), + 58: uint16(27298), + 59: uint16(27299), + 60: uint16(27300), + 61: uint16(27301), + 62: uint16(27302), + 63: uint16(27303), + 64: uint16(27304), + 65: uint16(27306), + 66: uint16(27309), + 67: uint16(27310), + 68: uint16(27311), + 69: uint16(27312), + 70: uint16(27313), + 71: uint16(27314), + 72: uint16(27315), + 73: uint16(27316), + 74: uint16(27317), + 75: uint16(27318), + 76: uint16(27319), + 77: uint16(27320), + 78: uint16(27321), + 79: uint16(27322), + 80: uint16(27323), + 81: uint16(27324), + 82: uint16(27325), + 83: uint16(27326), + 84: uint16(27327), + 85: uint16(27328), + 86: uint16(27329), + 87: uint16(27330), + 88: uint16(27331), + 89: uint16(27332), + 90: uint16(27333), + 91: uint16(27334), + 92: uint16(27335), + 93: uint16(27336), + 94: uint16(27337), + 95: uint16(27338), + 96: uint16(27339), + 97: uint16(27340), + 98: uint16(27341), + 99: uint16(27342), + 100: uint16(27343), + 101: uint16(27344), + 102: uint16(27345), + 103: uint16(27346), + 104: uint16(27347), + 105: uint16(27348), + 106: uint16(27349), + 107: uint16(27350), + 108: uint16(27351), + 109: uint16(27352), + 110: uint16(27353), + 111: uint16(27354), + 112: uint16(27355), + 113: uint16(27356), + 114: uint16(27357), + 115: uint16(27358), + 116: uint16(27359), + 117: uint16(27360), + 118: uint16(27361), + 119: uint16(27362), + 120: uint16(27363), + 121: uint16(27364), + 122: uint16(27365), + 123: uint16(27366), + 124: uint16(27367), + 125: uint16(27368), + 126: uint16(27369), + 127: uint16(27370), + 128: uint16(27371), + 129: uint16(27372), + 130: uint16(27373), + 131: uint16(27374), + 132: uint16(27375), + 133: uint16(27376), + 134: uint16(27377), + 135: uint16(27378), + 136: uint16(27379), + 137: uint16(27380), + 138: uint16(27381), + 139: uint16(27382), + 140: uint16(27383), + 141: uint16(27384), + 142: uint16(27385), + 143: uint16(27386), + 144: uint16(27387), + 145: uint16(27388), + 146: uint16(27389), + 147: uint16(27390), + 148: uint16(27391), + 149: uint16(27392), + 150: uint16(27393), + 151: uint16(27394), + 152: uint16(27395), + 153: uint16(27396), + 154: uint16(27397), + 155: uint16(27398), + 156: uint16(27399), + 157: uint16(27400), + 158: uint16(27401), + 159: uint16(27402), + 160: uint16(27403), + 161: uint16(27404), + 162: uint16(27405), + 163: uint16(27406), + 164: uint16(27407), + 165: uint16(27408), + 166: uint16(27409), + 167: uint16(27410), + 168: uint16(27411), + 169: uint16(27412), + 170: uint16(27413), + 171: uint16(27414), + 172: uint16(27415), + 173: uint16(27416), + 174: uint16(27417), + 175: uint16(27418), + 176: uint16(27419), + 177: uint16(27420), + 178: uint16(27421), + 179: uint16(27422), + 180: uint16(27423), + 181: uint16(27429), + 182: uint16(27430), + 183: uint16(27432), + 184: uint16(27433), + 185: uint16(27434), + 186: uint16(27435), + 187: uint16(27436), + 188: uint16(27437), + 189: uint16(27438), + }, + 25: { + 0: uint16(27439), + 1: uint16(27440), + 2: uint16(27441), + 3: uint16(27443), + 4: uint16(27444), + 5: uint16(27445), + 6: uint16(27446), + 7: uint16(27448), + 8: uint16(27451), + 9: uint16(27452), + 10: uint16(27453), + 11: uint16(27455), + 12: uint16(27456), + 13: uint16(27457), + 14: uint16(27458), + 15: uint16(27460), + 16: uint16(27461), + 17: uint16(27464), + 18: uint16(27466), + 19: uint16(27467), + 20: uint16(27469), + 21: uint16(27470), + 22: uint16(27471), + 23: uint16(27472), + 24: uint16(27473), + 25: uint16(27474), + 26: uint16(27475), + 27: uint16(27476), + 28: uint16(27477), + 29: uint16(27478), + 30: uint16(27479), + 31: uint16(27480), + 32: uint16(27482), + 33: uint16(27483), + 34: uint16(27484), + 35: uint16(27485), + 36: uint16(27486), + 37: uint16(27487), + 38: uint16(27488), + 39: uint16(27489), + 40: uint16(27496), + 41: uint16(27497), + 42: uint16(27499), + 43: uint16(27500), + 44: uint16(27501), + 45: uint16(27502), + 46: uint16(27503), + 47: uint16(27504), + 48: uint16(27505), + 49: uint16(27506), + 50: uint16(27507), + 51: uint16(27508), + 52: uint16(27509), + 53: uint16(27510), + 54: uint16(27511), + 55: uint16(27512), + 56: uint16(27514), + 57: uint16(27517), + 58: uint16(27518), + 59: uint16(27519), + 60: uint16(27520), + 61: uint16(27525), + 62: uint16(27528), + 63: uint16(27532), + 64: uint16(27534), + 65: uint16(27535), + 66: uint16(27536), + 67: uint16(27537), + 68: uint16(27540), + 69: uint16(27541), + 70: uint16(27543), + 71: uint16(27544), + 72: uint16(27545), + 73: uint16(27548), + 74: uint16(27549), + 75: uint16(27550), + 76: uint16(27551), + 77: uint16(27552), + 78: uint16(27554), + 79: uint16(27555), + 80: uint16(27556), + 81: uint16(27557), + 82: uint16(27558), + 83: uint16(27559), + 84: uint16(27560), + 85: uint16(27561), + 86: uint16(27563), + 87: uint16(27564), + 88: uint16(27565), + 89: uint16(27566), + 90: uint16(27567), + 91: uint16(27568), + 92: uint16(27569), + 93: uint16(27570), + 94: uint16(27574), + 95: uint16(27576), + 96: uint16(27577), + 97: uint16(27578), + 98: uint16(27579), + 99: uint16(27580), + 100: uint16(27581), + 101: uint16(27582), + 102: uint16(27584), + 103: uint16(27587), + 104: uint16(27588), + 105: uint16(27590), + 106: uint16(27591), + 107: uint16(27592), + 108: uint16(27593), + 109: uint16(27594), + 110: uint16(27596), + 111: uint16(27598), + 112: uint16(27600), + 113: uint16(27601), + 114: uint16(27608), + 115: uint16(27610), + 116: uint16(27612), + 117: uint16(27613), + 118: uint16(27614), + 119: uint16(27615), + 120: uint16(27616), + 121: uint16(27618), + 122: uint16(27619), + 123: uint16(27620), + 124: uint16(27621), + 125: uint16(27622), + 126: uint16(27623), + 127: uint16(27624), + 128: uint16(27625), + 129: uint16(27628), + 130: uint16(27629), + 131: uint16(27630), + 132: uint16(27632), + 133: uint16(27633), + 134: uint16(27634), + 135: uint16(27636), + 136: uint16(27638), + 137: uint16(27639), + 138: uint16(27640), + 139: uint16(27642), + 140: uint16(27643), + 141: uint16(27644), + 142: uint16(27646), + 143: uint16(27647), + 144: uint16(27648), + 145: uint16(27649), + 146: uint16(27650), + 147: uint16(27651), + 148: uint16(27652), + 149: uint16(27656), + 150: uint16(27657), + 151: uint16(27658), + 152: uint16(27659), + 153: uint16(27660), + 154: uint16(27662), + 155: uint16(27666), + 156: uint16(27671), + 157: uint16(27676), + 158: uint16(27677), + 159: uint16(27678), + 160: uint16(27680), + 161: uint16(27683), + 162: uint16(27685), + 163: uint16(27691), + 164: uint16(27692), + 165: uint16(27693), + 166: uint16(27697), + 167: uint16(27699), + 168: uint16(27702), + 169: uint16(27703), + 170: uint16(27705), + 171: uint16(27706), + 172: uint16(27707), + 173: uint16(27708), + 174: uint16(27710), + 175: uint16(27711), + 176: uint16(27715), + 177: uint16(27716), + 178: uint16(27717), + 179: uint16(27720), + 180: uint16(27723), + 181: uint16(27724), + 182: uint16(27725), + 183: uint16(27726), + 184: uint16(27727), + 185: uint16(27729), + 186: uint16(27730), + 187: uint16(27731), + 188: uint16(27734), + 189: uint16(27736), + }, + 26: { + 0: uint16(27737), + 1: uint16(27738), + 2: uint16(27746), + 3: uint16(27747), + 4: uint16(27749), + 5: uint16(27750), + 6: uint16(27751), + 7: uint16(27755), + 8: uint16(27756), + 9: uint16(27757), + 10: uint16(27758), + 11: uint16(27759), + 12: uint16(27761), + 13: uint16(27763), + 14: uint16(27765), + 15: uint16(27767), + 16: uint16(27768), + 17: uint16(27770), + 18: uint16(27771), + 19: uint16(27772), + 20: uint16(27775), + 21: uint16(27776), + 22: uint16(27780), + 23: uint16(27783), + 24: uint16(27786), + 25: uint16(27787), + 26: uint16(27789), + 27: uint16(27790), + 28: uint16(27793), + 29: uint16(27794), + 30: uint16(27797), + 31: uint16(27798), + 32: uint16(27799), + 33: uint16(27800), + 34: uint16(27802), + 35: uint16(27804), + 36: uint16(27805), + 37: uint16(27806), + 38: uint16(27808), + 39: uint16(27810), + 40: uint16(27816), + 41: uint16(27820), + 42: uint16(27823), + 43: uint16(27824), + 44: uint16(27828), + 45: uint16(27829), + 46: uint16(27830), + 47: uint16(27831), + 48: uint16(27834), + 49: uint16(27840), + 50: uint16(27841), + 51: uint16(27842), + 52: uint16(27843), + 53: uint16(27846), + 54: uint16(27847), + 55: uint16(27848), + 56: uint16(27851), + 57: uint16(27853), + 58: uint16(27854), + 59: uint16(27855), + 60: uint16(27857), + 61: uint16(27858), + 62: uint16(27864), + 63: uint16(27865), + 64: uint16(27866), + 65: uint16(27868), + 66: uint16(27869), + 67: uint16(27871), + 68: uint16(27876), + 69: uint16(27878), + 70: uint16(27879), + 71: uint16(27881), + 72: uint16(27884), + 73: uint16(27885), + 74: uint16(27890), + 75: uint16(27892), + 76: uint16(27897), + 77: uint16(27903), + 78: uint16(27904), + 79: uint16(27906), + 80: uint16(27907), + 81: uint16(27909), + 82: uint16(27910), + 83: uint16(27912), + 84: uint16(27913), + 85: uint16(27914), + 86: uint16(27917), + 87: uint16(27919), + 88: uint16(27920), + 89: uint16(27921), + 90: uint16(27923), + 91: uint16(27924), + 92: uint16(27925), + 93: uint16(27926), + 94: uint16(27928), + 95: uint16(27932), + 96: uint16(27933), + 97: uint16(27935), + 98: uint16(27936), + 99: uint16(27937), + 100: uint16(27938), + 101: uint16(27939), + 102: uint16(27940), + 103: uint16(27942), + 104: uint16(27944), + 105: uint16(27945), + 106: uint16(27948), + 107: uint16(27949), + 108: uint16(27951), + 109: uint16(27952), + 110: uint16(27956), + 111: uint16(27958), + 112: uint16(27959), + 113: uint16(27960), + 114: uint16(27962), + 115: uint16(27967), + 116: uint16(27968), + 117: uint16(27970), + 118: uint16(27972), + 119: uint16(27977), + 120: uint16(27980), + 121: uint16(27984), + 122: uint16(27989), + 123: uint16(27990), + 124: uint16(27991), + 125: uint16(27992), + 126: uint16(27995), + 127: uint16(27997), + 128: uint16(27999), + 129: uint16(28001), + 130: uint16(28002), + 131: uint16(28004), + 132: uint16(28005), + 133: uint16(28007), + 134: uint16(28008), + 135: uint16(28011), + 136: uint16(28012), + 137: uint16(28013), + 138: uint16(28016), + 139: uint16(28017), + 140: uint16(28018), + 141: uint16(28019), + 142: uint16(28021), + 143: uint16(28022), + 144: uint16(28025), + 145: uint16(28026), + 146: uint16(28027), + 147: uint16(28029), + 148: uint16(28030), + 149: uint16(28031), + 150: uint16(28032), + 151: uint16(28033), + 152: uint16(28035), + 153: uint16(28036), + 154: uint16(28038), + 155: uint16(28039), + 156: uint16(28042), + 157: uint16(28043), + 158: uint16(28045), + 159: uint16(28047), + 160: uint16(28048), + 161: uint16(28050), + 162: uint16(28054), + 163: uint16(28055), + 164: uint16(28056), + 165: uint16(28057), + 166: uint16(28058), + 167: uint16(28060), + 168: uint16(28066), + 169: uint16(28069), + 170: uint16(28076), + 171: uint16(28077), + 172: uint16(28080), + 173: uint16(28081), + 174: uint16(28083), + 175: uint16(28084), + 176: uint16(28086), + 177: uint16(28087), + 178: uint16(28089), + 179: uint16(28090), + 180: uint16(28091), + 181: uint16(28092), + 182: uint16(28093), + 183: uint16(28094), + 184: uint16(28097), + 185: uint16(28098), + 186: uint16(28099), + 187: uint16(28104), + 188: uint16(28105), + 189: uint16(28106), + }, + 27: { + 0: uint16(28109), + 1: uint16(28110), + 2: uint16(28111), + 3: uint16(28112), + 4: uint16(28114), + 5: uint16(28115), + 6: uint16(28116), + 7: uint16(28117), + 8: uint16(28119), + 9: uint16(28122), + 10: uint16(28123), + 11: uint16(28124), + 12: uint16(28127), + 13: uint16(28130), + 14: uint16(28131), + 15: uint16(28133), + 16: uint16(28135), + 17: uint16(28136), + 18: uint16(28137), + 19: uint16(28138), + 20: uint16(28141), + 21: uint16(28143), + 22: uint16(28144), + 23: uint16(28146), + 24: uint16(28148), + 25: uint16(28149), + 26: uint16(28150), + 27: uint16(28152), + 28: uint16(28154), + 29: uint16(28157), + 30: uint16(28158), + 31: uint16(28159), + 32: uint16(28160), + 33: uint16(28161), + 34: uint16(28162), + 35: uint16(28163), + 36: uint16(28164), + 37: uint16(28166), + 38: uint16(28167), + 39: uint16(28168), + 40: uint16(28169), + 41: uint16(28171), + 42: uint16(28175), + 43: uint16(28178), + 44: uint16(28179), + 45: uint16(28181), + 46: uint16(28184), + 47: uint16(28185), + 48: uint16(28187), + 49: uint16(28188), + 50: uint16(28190), + 51: uint16(28191), + 52: uint16(28194), + 53: uint16(28198), + 54: uint16(28199), + 55: uint16(28200), + 56: uint16(28202), + 57: uint16(28204), + 58: uint16(28206), + 59: uint16(28208), + 60: uint16(28209), + 61: uint16(28211), + 62: uint16(28213), + 63: uint16(28214), + 64: uint16(28215), + 65: uint16(28217), + 66: uint16(28219), + 67: uint16(28220), + 68: uint16(28221), + 69: uint16(28222), + 70: uint16(28223), + 71: uint16(28224), + 72: uint16(28225), + 73: uint16(28226), + 74: uint16(28229), + 75: uint16(28230), + 76: uint16(28231), + 77: uint16(28232), + 78: uint16(28233), + 79: uint16(28234), + 80: uint16(28235), + 81: uint16(28236), + 82: uint16(28239), + 83: uint16(28240), + 84: uint16(28241), + 85: uint16(28242), + 86: uint16(28245), + 87: uint16(28247), + 88: uint16(28249), + 89: uint16(28250), + 90: uint16(28252), + 91: uint16(28253), + 92: uint16(28254), + 93: uint16(28256), + 94: uint16(28257), + 95: uint16(28258), + 96: uint16(28259), + 97: uint16(28260), + 98: uint16(28261), + 99: uint16(28262), + 100: uint16(28263), + 101: uint16(28264), + 102: uint16(28265), + 103: uint16(28266), + 104: uint16(28268), + 105: uint16(28269), + 106: uint16(28271), + 107: uint16(28272), + 108: uint16(28273), + 109: uint16(28274), + 110: uint16(28275), + 111: uint16(28276), + 112: uint16(28277), + 113: uint16(28278), + 114: uint16(28279), + 115: uint16(28280), + 116: uint16(28281), + 117: uint16(28282), + 118: uint16(28283), + 119: uint16(28284), + 120: uint16(28285), + 121: uint16(28288), + 122: uint16(28289), + 123: uint16(28290), + 124: uint16(28292), + 125: uint16(28295), + 126: uint16(28296), + 127: uint16(28298), + 128: uint16(28299), + 129: uint16(28300), + 130: uint16(28301), + 131: uint16(28302), + 132: uint16(28305), + 133: uint16(28306), + 134: uint16(28307), + 135: uint16(28308), + 136: uint16(28309), + 137: uint16(28310), + 138: uint16(28311), + 139: uint16(28313), + 140: uint16(28314), + 141: uint16(28315), + 142: uint16(28317), + 143: uint16(28318), + 144: uint16(28320), + 145: uint16(28321), + 146: uint16(28323), + 147: uint16(28324), + 148: uint16(28326), + 149: uint16(28328), + 150: uint16(28329), + 151: uint16(28331), + 152: uint16(28332), + 153: uint16(28333), + 154: uint16(28334), + 155: uint16(28336), + 156: uint16(28339), + 157: uint16(28341), + 158: uint16(28344), + 159: uint16(28345), + 160: uint16(28348), + 161: uint16(28350), + 162: uint16(28351), + 163: uint16(28352), + 164: uint16(28355), + 165: uint16(28356), + 166: uint16(28357), + 167: uint16(28358), + 168: uint16(28360), + 169: uint16(28361), + 170: uint16(28362), + 171: uint16(28364), + 172: uint16(28365), + 173: uint16(28366), + 174: uint16(28368), + 175: uint16(28370), + 176: uint16(28374), + 177: uint16(28376), + 178: uint16(28377), + 179: uint16(28379), + 180: uint16(28380), + 181: uint16(28381), + 182: uint16(28387), + 183: uint16(28391), + 184: uint16(28394), + 185: uint16(28395), + 186: uint16(28396), + 187: uint16(28397), + 188: uint16(28398), + 189: uint16(28399), + }, + 28: { + 0: uint16(28400), + 1: uint16(28401), + 2: uint16(28402), + 3: uint16(28403), + 4: uint16(28405), + 5: uint16(28406), + 6: uint16(28407), + 7: uint16(28408), + 8: uint16(28410), + 9: uint16(28411), + 10: uint16(28412), + 11: uint16(28413), + 12: uint16(28414), + 13: uint16(28415), + 14: uint16(28416), + 15: uint16(28417), + 16: uint16(28419), + 17: uint16(28420), + 18: uint16(28421), + 19: uint16(28423), + 20: uint16(28424), + 21: uint16(28426), + 22: uint16(28427), + 23: uint16(28428), + 24: uint16(28429), + 25: uint16(28430), + 26: uint16(28432), + 27: uint16(28433), + 28: uint16(28434), + 29: uint16(28438), + 30: uint16(28439), + 31: uint16(28440), + 32: uint16(28441), + 33: uint16(28442), + 34: uint16(28443), + 35: uint16(28444), + 36: uint16(28445), + 37: uint16(28446), + 38: uint16(28447), + 39: uint16(28449), + 40: uint16(28450), + 41: uint16(28451), + 42: uint16(28453), + 43: uint16(28454), + 44: uint16(28455), + 45: uint16(28456), + 46: uint16(28460), + 47: uint16(28462), + 48: uint16(28464), + 49: uint16(28466), + 50: uint16(28468), + 51: uint16(28469), + 52: uint16(28471), + 53: uint16(28472), + 54: uint16(28473), + 55: uint16(28474), + 56: uint16(28475), + 57: uint16(28476), + 58: uint16(28477), + 59: uint16(28479), + 60: uint16(28480), + 61: uint16(28481), + 62: uint16(28482), + 63: uint16(28483), + 64: uint16(28484), + 65: uint16(28485), + 66: uint16(28488), + 67: uint16(28489), + 68: uint16(28490), + 69: uint16(28492), + 70: uint16(28494), + 71: uint16(28495), + 72: uint16(28496), + 73: uint16(28497), + 74: uint16(28498), + 75: uint16(28499), + 76: uint16(28500), + 77: uint16(28501), + 78: uint16(28502), + 79: uint16(28503), + 80: uint16(28505), + 81: uint16(28506), + 82: uint16(28507), + 83: uint16(28509), + 84: uint16(28511), + 85: uint16(28512), + 86: uint16(28513), + 87: uint16(28515), + 88: uint16(28516), + 89: uint16(28517), + 90: uint16(28519), + 91: uint16(28520), + 92: uint16(28521), + 93: uint16(28522), + 94: uint16(28523), + 95: uint16(28524), + 96: uint16(28527), + 97: uint16(28528), + 98: uint16(28529), + 99: uint16(28531), + 100: uint16(28533), + 101: uint16(28534), + 102: uint16(28535), + 103: uint16(28537), + 104: uint16(28539), + 105: uint16(28541), + 106: uint16(28542), + 107: uint16(28543), + 108: uint16(28544), + 109: uint16(28545), + 110: uint16(28546), + 111: uint16(28547), + 112: uint16(28549), + 113: uint16(28550), + 114: uint16(28551), + 115: uint16(28554), + 116: uint16(28555), + 117: uint16(28559), + 118: uint16(28560), + 119: uint16(28561), + 120: uint16(28562), + 121: uint16(28563), + 122: uint16(28564), + 123: uint16(28565), + 124: uint16(28566), + 125: uint16(28567), + 126: uint16(28568), + 127: uint16(28569), + 128: uint16(28570), + 129: uint16(28571), + 130: uint16(28573), + 131: uint16(28574), + 132: uint16(28575), + 133: uint16(28576), + 134: uint16(28578), + 135: uint16(28579), + 136: uint16(28580), + 137: uint16(28581), + 138: uint16(28582), + 139: uint16(28584), + 140: uint16(28585), + 141: uint16(28586), + 142: uint16(28587), + 143: uint16(28588), + 144: uint16(28589), + 145: uint16(28590), + 146: uint16(28591), + 147: uint16(28592), + 148: uint16(28593), + 149: uint16(28594), + 150: uint16(28596), + 151: uint16(28597), + 152: uint16(28599), + 153: uint16(28600), + 154: uint16(28602), + 155: uint16(28603), + 156: uint16(28604), + 157: uint16(28605), + 158: uint16(28606), + 159: uint16(28607), + 160: uint16(28609), + 161: uint16(28611), + 162: uint16(28612), + 163: uint16(28613), + 164: uint16(28614), + 165: uint16(28615), + 166: uint16(28616), + 167: uint16(28618), + 168: uint16(28619), + 169: uint16(28620), + 170: uint16(28621), + 171: uint16(28622), + 172: uint16(28623), + 173: uint16(28624), + 174: uint16(28627), + 175: uint16(28628), + 176: uint16(28629), + 177: uint16(28630), + 178: uint16(28631), + 179: uint16(28632), + 180: uint16(28633), + 181: uint16(28634), + 182: uint16(28635), + 183: uint16(28636), + 184: uint16(28637), + 185: uint16(28639), + 186: uint16(28642), + 187: uint16(28643), + 188: uint16(28644), + 189: uint16(28645), + }, + 29: { + 0: uint16(28646), + 1: uint16(28647), + 2: uint16(28648), + 3: uint16(28649), + 4: uint16(28650), + 5: uint16(28651), + 6: uint16(28652), + 7: uint16(28653), + 8: uint16(28656), + 9: uint16(28657), + 10: uint16(28658), + 11: uint16(28659), + 12: uint16(28660), + 13: uint16(28661), + 14: uint16(28662), + 15: uint16(28663), + 16: uint16(28664), + 17: uint16(28665), + 18: uint16(28666), + 19: uint16(28667), + 20: uint16(28668), + 21: uint16(28669), + 22: uint16(28670), + 23: uint16(28671), + 24: uint16(28672), + 25: uint16(28673), + 26: uint16(28674), + 27: uint16(28675), + 28: uint16(28676), + 29: uint16(28677), + 30: uint16(28678), + 31: uint16(28679), + 32: uint16(28680), + 33: uint16(28681), + 34: uint16(28682), + 35: uint16(28683), + 36: uint16(28684), + 37: uint16(28685), + 38: uint16(28686), + 39: uint16(28687), + 40: uint16(28688), + 41: uint16(28690), + 42: uint16(28691), + 43: uint16(28692), + 44: uint16(28693), + 45: uint16(28694), + 46: uint16(28695), + 47: uint16(28696), + 48: uint16(28697), + 49: uint16(28700), + 50: uint16(28701), + 51: uint16(28702), + 52: uint16(28703), + 53: uint16(28704), + 54: uint16(28705), + 55: uint16(28706), + 56: uint16(28708), + 57: uint16(28709), + 58: uint16(28710), + 59: uint16(28711), + 60: uint16(28712), + 61: uint16(28713), + 62: uint16(28714), + 63: uint16(28715), + 64: uint16(28716), + 65: uint16(28717), + 66: uint16(28718), + 67: uint16(28719), + 68: uint16(28720), + 69: uint16(28721), + 70: uint16(28722), + 71: uint16(28723), + 72: uint16(28724), + 73: uint16(28726), + 74: uint16(28727), + 75: uint16(28728), + 76: uint16(28730), + 77: uint16(28731), + 78: uint16(28732), + 79: uint16(28733), + 80: uint16(28734), + 81: uint16(28735), + 82: uint16(28736), + 83: uint16(28737), + 84: uint16(28738), + 85: uint16(28739), + 86: uint16(28740), + 87: uint16(28741), + 88: uint16(28742), + 89: uint16(28743), + 90: uint16(28744), + 91: uint16(28745), + 92: uint16(28746), + 93: uint16(28747), + 94: uint16(28749), + 95: uint16(28750), + 96: uint16(28752), + 97: uint16(28753), + 98: uint16(28754), + 99: uint16(28755), + 100: uint16(28756), + 101: uint16(28757), + 102: uint16(28758), + 103: uint16(28759), + 104: uint16(28760), + 105: uint16(28761), + 106: uint16(28762), + 107: uint16(28763), + 108: uint16(28764), + 109: uint16(28765), + 110: uint16(28767), + 111: uint16(28768), + 112: uint16(28769), + 113: uint16(28770), + 114: uint16(28771), + 115: uint16(28772), + 116: uint16(28773), + 117: uint16(28774), + 118: uint16(28775), + 119: uint16(28776), + 120: uint16(28777), + 121: uint16(28778), + 122: uint16(28782), + 123: uint16(28785), + 124: uint16(28786), + 125: uint16(28787), + 126: uint16(28788), + 127: uint16(28791), + 128: uint16(28793), + 129: uint16(28794), + 130: uint16(28795), + 131: uint16(28797), + 132: uint16(28801), + 133: uint16(28802), + 134: uint16(28803), + 135: uint16(28804), + 136: uint16(28806), + 137: uint16(28807), + 138: uint16(28808), + 139: uint16(28811), + 140: uint16(28812), + 141: uint16(28813), + 142: uint16(28815), + 143: uint16(28816), + 144: uint16(28817), + 145: uint16(28819), + 146: uint16(28823), + 147: uint16(28824), + 148: uint16(28826), + 149: uint16(28827), + 150: uint16(28830), + 151: uint16(28831), + 152: uint16(28832), + 153: uint16(28833), + 154: uint16(28834), + 155: uint16(28835), + 156: uint16(28836), + 157: uint16(28837), + 158: uint16(28838), + 159: uint16(28839), + 160: uint16(28840), + 161: uint16(28841), + 162: uint16(28842), + 163: uint16(28848), + 164: uint16(28850), + 165: uint16(28852), + 166: uint16(28853), + 167: uint16(28854), + 168: uint16(28858), + 169: uint16(28862), + 170: uint16(28863), + 171: uint16(28868), + 172: uint16(28869), + 173: uint16(28870), + 174: uint16(28871), + 175: uint16(28873), + 176: uint16(28875), + 177: uint16(28876), + 178: uint16(28877), + 179: uint16(28878), + 180: uint16(28879), + 181: uint16(28880), + 182: uint16(28881), + 183: uint16(28882), + 184: uint16(28883), + 185: uint16(28884), + 186: uint16(28885), + 187: uint16(28886), + 188: uint16(28887), + 189: uint16(28890), + }, + 30: { + 0: uint16(28892), + 1: uint16(28893), + 2: uint16(28894), + 3: uint16(28896), + 4: uint16(28897), + 5: uint16(28898), + 6: uint16(28899), + 7: uint16(28901), + 8: uint16(28906), + 9: uint16(28910), + 10: uint16(28912), + 11: uint16(28913), + 12: uint16(28914), + 13: uint16(28915), + 14: uint16(28916), + 15: uint16(28917), + 16: uint16(28918), + 17: uint16(28920), + 18: uint16(28922), + 19: uint16(28923), + 20: uint16(28924), + 21: uint16(28926), + 22: uint16(28927), + 23: uint16(28928), + 24: uint16(28929), + 25: uint16(28930), + 26: uint16(28931), + 27: uint16(28932), + 28: uint16(28933), + 29: uint16(28934), + 30: uint16(28935), + 31: uint16(28936), + 32: uint16(28939), + 33: uint16(28940), + 34: uint16(28941), + 35: uint16(28942), + 36: uint16(28943), + 37: uint16(28945), + 38: uint16(28946), + 39: uint16(28948), + 40: uint16(28951), + 41: uint16(28955), + 42: uint16(28956), + 43: uint16(28957), + 44: uint16(28958), + 45: uint16(28959), + 46: uint16(28960), + 47: uint16(28961), + 48: uint16(28962), + 49: uint16(28963), + 50: uint16(28964), + 51: uint16(28965), + 52: uint16(28967), + 53: uint16(28968), + 54: uint16(28969), + 55: uint16(28970), + 56: uint16(28971), + 57: uint16(28972), + 58: uint16(28973), + 59: uint16(28974), + 60: uint16(28978), + 61: uint16(28979), + 62: uint16(28980), + 63: uint16(28981), + 64: uint16(28983), + 65: uint16(28984), + 66: uint16(28985), + 67: uint16(28986), + 68: uint16(28987), + 69: uint16(28988), + 70: uint16(28989), + 71: uint16(28990), + 72: uint16(28991), + 73: uint16(28992), + 74: uint16(28993), + 75: uint16(28994), + 76: uint16(28995), + 77: uint16(28996), + 78: uint16(28998), + 79: uint16(28999), + 80: uint16(29000), + 81: uint16(29001), + 82: uint16(29003), + 83: uint16(29005), + 84: uint16(29007), + 85: uint16(29008), + 86: uint16(29009), + 87: uint16(29010), + 88: uint16(29011), + 89: uint16(29012), + 90: uint16(29013), + 91: uint16(29014), + 92: uint16(29015), + 93: uint16(29016), + 94: uint16(29017), + 95: uint16(29018), + 96: uint16(29019), + 97: uint16(29021), + 98: uint16(29023), + 99: uint16(29024), + 100: uint16(29025), + 101: uint16(29026), + 102: uint16(29027), + 103: uint16(29029), + 104: uint16(29033), + 105: uint16(29034), + 106: uint16(29035), + 107: uint16(29036), + 108: uint16(29037), + 109: uint16(29039), + 110: uint16(29040), + 111: uint16(29041), + 112: uint16(29044), + 113: uint16(29045), + 114: uint16(29046), + 115: uint16(29047), + 116: uint16(29049), + 117: uint16(29051), + 118: uint16(29052), + 119: uint16(29054), + 120: uint16(29055), + 121: uint16(29056), + 122: uint16(29057), + 123: uint16(29058), + 124: uint16(29059), + 125: uint16(29061), + 126: uint16(29062), + 127: uint16(29063), + 128: uint16(29064), + 129: uint16(29065), + 130: uint16(29067), + 131: uint16(29068), + 132: uint16(29069), + 133: uint16(29070), + 134: uint16(29072), + 135: uint16(29073), + 136: uint16(29074), + 137: uint16(29075), + 138: uint16(29077), + 139: uint16(29078), + 140: uint16(29079), + 141: uint16(29082), + 142: uint16(29083), + 143: uint16(29084), + 144: uint16(29085), + 145: uint16(29086), + 146: uint16(29089), + 147: uint16(29090), + 148: uint16(29091), + 149: uint16(29092), + 150: uint16(29093), + 151: uint16(29094), + 152: uint16(29095), + 153: uint16(29097), + 154: uint16(29098), + 155: uint16(29099), + 156: uint16(29101), + 157: uint16(29102), + 158: uint16(29103), + 159: uint16(29104), + 160: uint16(29105), + 161: uint16(29106), + 162: uint16(29108), + 163: uint16(29110), + 164: uint16(29111), + 165: uint16(29112), + 166: uint16(29114), + 167: uint16(29115), + 168: uint16(29116), + 169: uint16(29117), + 170: uint16(29118), + 171: uint16(29119), + 172: uint16(29120), + 173: uint16(29121), + 174: uint16(29122), + 175: uint16(29124), + 176: uint16(29125), + 177: uint16(29126), + 178: uint16(29127), + 179: uint16(29128), + 180: uint16(29129), + 181: uint16(29130), + 182: uint16(29131), + 183: uint16(29132), + 184: uint16(29133), + 185: uint16(29135), + 186: uint16(29136), + 187: uint16(29137), + 188: uint16(29138), + 189: uint16(29139), + }, + 31: { + 0: uint16(29142), + 1: uint16(29143), + 2: uint16(29144), + 3: uint16(29145), + 4: uint16(29146), + 5: uint16(29147), + 6: uint16(29148), + 7: uint16(29149), + 8: uint16(29150), + 9: uint16(29151), + 10: uint16(29153), + 11: uint16(29154), + 12: uint16(29155), + 13: uint16(29156), + 14: uint16(29158), + 15: uint16(29160), + 16: uint16(29161), + 17: uint16(29162), + 18: uint16(29163), + 19: uint16(29164), + 20: uint16(29165), + 21: uint16(29167), + 22: uint16(29168), + 23: uint16(29169), + 24: uint16(29170), + 25: uint16(29171), + 26: uint16(29172), + 27: uint16(29173), + 28: uint16(29174), + 29: uint16(29175), + 30: uint16(29176), + 31: uint16(29178), + 32: uint16(29179), + 33: uint16(29180), + 34: uint16(29181), + 35: uint16(29182), + 36: uint16(29183), + 37: uint16(29184), + 38: uint16(29185), + 39: uint16(29186), + 40: uint16(29187), + 41: uint16(29188), + 42: uint16(29189), + 43: uint16(29191), + 44: uint16(29192), + 45: uint16(29193), + 46: uint16(29194), + 47: uint16(29195), + 48: uint16(29196), + 49: uint16(29197), + 50: uint16(29198), + 51: uint16(29199), + 52: uint16(29200), + 53: uint16(29201), + 54: uint16(29202), + 55: uint16(29203), + 56: uint16(29204), + 57: uint16(29205), + 58: uint16(29206), + 59: uint16(29207), + 60: uint16(29208), + 61: uint16(29209), + 62: uint16(29210), + 63: uint16(29211), + 64: uint16(29212), + 65: uint16(29214), + 66: uint16(29215), + 67: uint16(29216), + 68: uint16(29217), + 69: uint16(29218), + 70: uint16(29219), + 71: uint16(29220), + 72: uint16(29221), + 73: uint16(29222), + 74: uint16(29223), + 75: uint16(29225), + 76: uint16(29227), + 77: uint16(29229), + 78: uint16(29230), + 79: uint16(29231), + 80: uint16(29234), + 81: uint16(29235), + 82: uint16(29236), + 83: uint16(29242), + 84: uint16(29244), + 85: uint16(29246), + 86: uint16(29248), + 87: uint16(29249), + 88: uint16(29250), + 89: uint16(29251), + 90: uint16(29252), + 91: uint16(29253), + 92: uint16(29254), + 93: uint16(29257), + 94: uint16(29258), + 95: uint16(29259), + 96: uint16(29262), + 97: uint16(29263), + 98: uint16(29264), + 99: uint16(29265), + 100: uint16(29267), + 101: uint16(29268), + 102: uint16(29269), + 103: uint16(29271), + 104: uint16(29272), + 105: uint16(29274), + 106: uint16(29276), + 107: uint16(29278), + 108: uint16(29280), + 109: uint16(29283), + 110: uint16(29284), + 111: uint16(29285), + 112: uint16(29288), + 113: uint16(29290), + 114: uint16(29291), + 115: uint16(29292), + 116: uint16(29293), + 117: uint16(29296), + 118: uint16(29297), + 119: uint16(29299), + 120: uint16(29300), + 121: uint16(29302), + 122: uint16(29303), + 123: uint16(29304), + 124: uint16(29307), + 125: uint16(29308), + 126: uint16(29309), + 127: uint16(29314), + 128: uint16(29315), + 129: uint16(29317), + 130: uint16(29318), + 131: uint16(29319), + 132: uint16(29320), + 133: uint16(29321), + 134: uint16(29324), + 135: uint16(29326), + 136: uint16(29328), + 137: uint16(29329), + 138: uint16(29331), + 139: uint16(29332), + 140: uint16(29333), + 141: uint16(29334), + 142: uint16(29335), + 143: uint16(29336), + 144: uint16(29337), + 145: uint16(29338), + 146: uint16(29339), + 147: uint16(29340), + 148: uint16(29341), + 149: uint16(29342), + 150: uint16(29344), + 151: uint16(29345), + 152: uint16(29346), + 153: uint16(29347), + 154: uint16(29348), + 155: uint16(29349), + 156: uint16(29350), + 157: uint16(29351), + 158: uint16(29352), + 159: uint16(29353), + 160: uint16(29354), + 161: uint16(29355), + 162: uint16(29358), + 163: uint16(29361), + 164: uint16(29362), + 165: uint16(29363), + 166: uint16(29365), + 167: uint16(29370), + 168: uint16(29371), + 169: uint16(29372), + 170: uint16(29373), + 171: uint16(29374), + 172: uint16(29375), + 173: uint16(29376), + 174: uint16(29381), + 175: uint16(29382), + 176: uint16(29383), + 177: uint16(29385), + 178: uint16(29386), + 179: uint16(29387), + 180: uint16(29388), + 181: uint16(29391), + 182: uint16(29393), + 183: uint16(29395), + 184: uint16(29396), + 185: uint16(29397), + 186: uint16(29398), + 187: uint16(29400), + 188: uint16(29402), + 189: uint16(29403), + }, + 32: { + 0: uint16(58566), + 1: uint16(58567), + 2: uint16(58568), + 3: uint16(58569), + 4: uint16(58570), + 5: uint16(58571), + 6: uint16(58572), + 7: uint16(58573), + 8: uint16(58574), + 9: uint16(58575), + 10: uint16(58576), + 11: uint16(58577), + 12: uint16(58578), + 13: uint16(58579), + 14: uint16(58580), + 15: uint16(58581), + 16: uint16(58582), + 17: uint16(58583), + 18: uint16(58584), + 19: uint16(58585), + 20: uint16(58586), + 21: uint16(58587), + 22: uint16(58588), + 23: uint16(58589), + 24: uint16(58590), + 25: uint16(58591), + 26: uint16(58592), + 27: uint16(58593), + 28: uint16(58594), + 29: uint16(58595), + 30: uint16(58596), + 31: uint16(58597), + 32: uint16(58598), + 33: uint16(58599), + 34: uint16(58600), + 35: uint16(58601), + 36: uint16(58602), + 37: uint16(58603), + 38: uint16(58604), + 39: uint16(58605), + 40: uint16(58606), + 41: uint16(58607), + 42: uint16(58608), + 43: uint16(58609), + 44: uint16(58610), + 45: uint16(58611), + 46: uint16(58612), + 47: uint16(58613), + 48: uint16(58614), + 49: uint16(58615), + 50: uint16(58616), + 51: uint16(58617), + 52: uint16(58618), + 53: uint16(58619), + 54: uint16(58620), + 55: uint16(58621), + 56: uint16(58622), + 57: uint16(58623), + 58: uint16(58624), + 59: uint16(58625), + 60: uint16(58626), + 61: uint16(58627), + 62: uint16(58628), + 63: uint16(58629), + 64: uint16(58630), + 65: uint16(58631), + 66: uint16(58632), + 67: uint16(58633), + 68: uint16(58634), + 69: uint16(58635), + 70: uint16(58636), + 71: uint16(58637), + 72: uint16(58638), + 73: uint16(58639), + 74: uint16(58640), + 75: uint16(58641), + 76: uint16(58642), + 77: uint16(58643), + 78: uint16(58644), + 79: uint16(58645), + 80: uint16(58646), + 81: uint16(58647), + 82: uint16(58648), + 83: uint16(58649), + 84: uint16(58650), + 85: uint16(58651), + 86: uint16(58652), + 87: uint16(58653), + 88: uint16(58654), + 89: uint16(58655), + 90: uint16(58656), + 91: uint16(58657), + 92: uint16(58658), + 93: uint16(58659), + 94: uint16(58660), + 95: uint16(58661), + 96: uint16(12288), + 97: uint16(12289), + 98: uint16(12290), + 99: uint16(183), + 100: uint16(713), + 101: uint16(711), + 102: uint16(168), + 103: uint16(12291), + 104: uint16(12293), + 105: uint16(8212), + 106: uint16(65374), + 107: uint16(8214), + 108: uint16(8230), + 109: uint16(8216), + 110: uint16(8217), + 111: uint16(8220), + 112: uint16(8221), + 113: uint16(12308), + 114: uint16(12309), + 115: uint16(12296), + 116: uint16(12297), + 117: uint16(12298), + 118: uint16(12299), + 119: uint16(12300), + 120: uint16(12301), + 121: uint16(12302), + 122: uint16(12303), + 123: uint16(12310), + 124: uint16(12311), + 125: uint16(12304), + 126: uint16(12305), + 127: uint16(177), + 128: uint16(215), + 129: uint16(247), + 130: uint16(8758), + 131: uint16(8743), + 132: uint16(8744), + 133: uint16(8721), + 134: uint16(8719), + 135: uint16(8746), + 136: uint16(8745), + 137: uint16(8712), + 138: uint16(8759), + 139: uint16(8730), + 140: uint16(8869), + 141: uint16(8741), + 142: uint16(8736), + 143: uint16(8978), + 144: uint16(8857), + 145: uint16(8747), + 146: uint16(8750), + 147: uint16(8801), + 148: uint16(8780), + 149: uint16(8776), + 150: uint16(8765), + 151: uint16(8733), + 152: uint16(8800), + 153: uint16(8814), + 154: uint16(8815), + 155: uint16(8804), + 156: uint16(8805), + 157: uint16(8734), + 158: uint16(8757), + 159: uint16(8756), + 160: uint16(9794), + 161: uint16(9792), + 162: uint16(176), + 163: uint16(8242), + 164: uint16(8243), + 165: uint16(8451), + 166: uint16(65284), + 167: uint16(164), + 168: uint16(65504), + 169: uint16(65505), + 170: uint16(8240), + 171: uint16(167), + 172: uint16(8470), + 173: uint16(9734), + 174: uint16(9733), + 175: uint16(9675), + 176: uint16(9679), + 177: uint16(9678), + 178: uint16(9671), + 179: uint16(9670), + 180: uint16(9633), + 181: uint16(9632), + 182: uint16(9651), + 183: uint16(9650), + 184: uint16(8251), + 185: uint16(8594), + 186: uint16(8592), + 187: uint16(8593), + 188: uint16(8595), + 189: uint16(12307), + }, + 33: { + 0: uint16(58662), + 1: uint16(58663), + 2: uint16(58664), + 3: uint16(58665), + 4: uint16(58666), + 5: uint16(58667), + 6: uint16(58668), + 7: uint16(58669), + 8: uint16(58670), + 9: uint16(58671), + 10: uint16(58672), + 11: uint16(58673), + 12: uint16(58674), + 13: uint16(58675), + 14: uint16(58676), + 15: uint16(58677), + 16: uint16(58678), + 17: uint16(58679), + 18: uint16(58680), + 19: uint16(58681), + 20: uint16(58682), + 21: uint16(58683), + 22: uint16(58684), + 23: uint16(58685), + 24: uint16(58686), + 25: uint16(58687), + 26: uint16(58688), + 27: uint16(58689), + 28: uint16(58690), + 29: uint16(58691), + 30: uint16(58692), + 31: uint16(58693), + 32: uint16(58694), + 33: uint16(58695), + 34: uint16(58696), + 35: uint16(58697), + 36: uint16(58698), + 37: uint16(58699), + 38: uint16(58700), + 39: uint16(58701), + 40: uint16(58702), + 41: uint16(58703), + 42: uint16(58704), + 43: uint16(58705), + 44: uint16(58706), + 45: uint16(58707), + 46: uint16(58708), + 47: uint16(58709), + 48: uint16(58710), + 49: uint16(58711), + 50: uint16(58712), + 51: uint16(58713), + 52: uint16(58714), + 53: uint16(58715), + 54: uint16(58716), + 55: uint16(58717), + 56: uint16(58718), + 57: uint16(58719), + 58: uint16(58720), + 59: uint16(58721), + 60: uint16(58722), + 61: uint16(58723), + 62: uint16(58724), + 63: uint16(58725), + 64: uint16(58726), + 65: uint16(58727), + 66: uint16(58728), + 67: uint16(58729), + 68: uint16(58730), + 69: uint16(58731), + 70: uint16(58732), + 71: uint16(58733), + 72: uint16(58734), + 73: uint16(58735), + 74: uint16(58736), + 75: uint16(58737), + 76: uint16(58738), + 77: uint16(58739), + 78: uint16(58740), + 79: uint16(58741), + 80: uint16(58742), + 81: uint16(58743), + 82: uint16(58744), + 83: uint16(58745), + 84: uint16(58746), + 85: uint16(58747), + 86: uint16(58748), + 87: uint16(58749), + 88: uint16(58750), + 89: uint16(58751), + 90: uint16(58752), + 91: uint16(58753), + 92: uint16(58754), + 93: uint16(58755), + 94: uint16(58756), + 95: uint16(58757), + 96: uint16(8560), + 97: uint16(8561), + 98: uint16(8562), + 99: uint16(8563), + 100: uint16(8564), + 101: uint16(8565), + 102: uint16(8566), + 103: uint16(8567), + 104: uint16(8568), + 105: uint16(8569), + 106: uint16(59238), + 107: uint16(59239), + 108: uint16(59240), + 109: uint16(59241), + 110: uint16(59242), + 111: uint16(59243), + 112: uint16(9352), + 113: uint16(9353), + 114: uint16(9354), + 115: uint16(9355), + 116: uint16(9356), + 117: uint16(9357), + 118: uint16(9358), + 119: uint16(9359), + 120: uint16(9360), + 121: uint16(9361), + 122: uint16(9362), + 123: uint16(9363), + 124: uint16(9364), + 125: uint16(9365), + 126: uint16(9366), + 127: uint16(9367), + 128: uint16(9368), + 129: uint16(9369), + 130: uint16(9370), + 131: uint16(9371), + 132: uint16(9332), + 133: uint16(9333), + 134: uint16(9334), + 135: uint16(9335), + 136: uint16(9336), + 137: uint16(9337), + 138: uint16(9338), + 139: uint16(9339), + 140: uint16(9340), + 141: uint16(9341), + 142: uint16(9342), + 143: uint16(9343), + 144: uint16(9344), + 145: uint16(9345), + 146: uint16(9346), + 147: uint16(9347), + 148: uint16(9348), + 149: uint16(9349), + 150: uint16(9350), + 151: uint16(9351), + 152: uint16(9312), + 153: uint16(9313), + 154: uint16(9314), + 155: uint16(9315), + 156: uint16(9316), + 157: uint16(9317), + 158: uint16(9318), + 159: uint16(9319), + 160: uint16(9320), + 161: uint16(9321), + 162: uint16(8364), + 163: uint16(59245), + 164: uint16(12832), + 165: uint16(12833), + 166: uint16(12834), + 167: uint16(12835), + 168: uint16(12836), + 169: uint16(12837), + 170: uint16(12838), + 171: uint16(12839), + 172: uint16(12840), + 173: uint16(12841), + 174: uint16(59246), + 175: uint16(59247), + 176: uint16(8544), + 177: uint16(8545), + 178: uint16(8546), + 179: uint16(8547), + 180: uint16(8548), + 181: uint16(8549), + 182: uint16(8550), + 183: uint16(8551), + 184: uint16(8552), + 185: uint16(8553), + 186: uint16(8554), + 187: uint16(8555), + 188: uint16(59248), + 189: uint16(59249), + }, + 34: { + 0: uint16(58758), + 1: uint16(58759), + 2: uint16(58760), + 3: uint16(58761), + 4: uint16(58762), + 5: uint16(58763), + 6: uint16(58764), + 7: uint16(58765), + 8: uint16(58766), + 9: uint16(58767), + 10: uint16(58768), + 11: uint16(58769), + 12: uint16(58770), + 13: uint16(58771), + 14: uint16(58772), + 15: uint16(58773), + 16: uint16(58774), + 17: uint16(58775), + 18: uint16(58776), + 19: uint16(58777), + 20: uint16(58778), + 21: uint16(58779), + 22: uint16(58780), + 23: uint16(58781), + 24: uint16(58782), + 25: uint16(58783), + 26: uint16(58784), + 27: uint16(58785), + 28: uint16(58786), + 29: uint16(58787), + 30: uint16(58788), + 31: uint16(58789), + 32: uint16(58790), + 33: uint16(58791), + 34: uint16(58792), + 35: uint16(58793), + 36: uint16(58794), + 37: uint16(58795), + 38: uint16(58796), + 39: uint16(58797), + 40: uint16(58798), + 41: uint16(58799), + 42: uint16(58800), + 43: uint16(58801), + 44: uint16(58802), + 45: uint16(58803), + 46: uint16(58804), + 47: uint16(58805), + 48: uint16(58806), + 49: uint16(58807), + 50: uint16(58808), + 51: uint16(58809), + 52: uint16(58810), + 53: uint16(58811), + 54: uint16(58812), + 55: uint16(58813), + 56: uint16(58814), + 57: uint16(58815), + 58: uint16(58816), + 59: uint16(58817), + 60: uint16(58818), + 61: uint16(58819), + 62: uint16(58820), + 63: uint16(58821), + 64: uint16(58822), + 65: uint16(58823), + 66: uint16(58824), + 67: uint16(58825), + 68: uint16(58826), + 69: uint16(58827), + 70: uint16(58828), + 71: uint16(58829), + 72: uint16(58830), + 73: uint16(58831), + 74: uint16(58832), + 75: uint16(58833), + 76: uint16(58834), + 77: uint16(58835), + 78: uint16(58836), + 79: uint16(58837), + 80: uint16(58838), + 81: uint16(58839), + 82: uint16(58840), + 83: uint16(58841), + 84: uint16(58842), + 85: uint16(58843), + 86: uint16(58844), + 87: uint16(58845), + 88: uint16(58846), + 89: uint16(58847), + 90: uint16(58848), + 91: uint16(58849), + 92: uint16(58850), + 93: uint16(58851), + 94: uint16(58852), + 95: uint16(58853), + 96: uint16(65281), + 97: uint16(65282), + 98: uint16(65283), + 99: uint16(65509), + 100: uint16(65285), + 101: uint16(65286), + 102: uint16(65287), + 103: uint16(65288), + 104: uint16(65289), + 105: uint16(65290), + 106: uint16(65291), + 107: uint16(65292), + 108: uint16(65293), + 109: uint16(65294), + 110: uint16(65295), + 111: uint16(65296), + 112: uint16(65297), + 113: uint16(65298), + 114: uint16(65299), + 115: uint16(65300), + 116: uint16(65301), + 117: uint16(65302), + 118: uint16(65303), + 119: uint16(65304), + 120: uint16(65305), + 121: uint16(65306), + 122: uint16(65307), + 123: uint16(65308), + 124: uint16(65309), + 125: uint16(65310), + 126: uint16(65311), + 127: uint16(65312), + 128: uint16(65313), + 129: uint16(65314), + 130: uint16(65315), + 131: uint16(65316), + 132: uint16(65317), + 133: uint16(65318), + 134: uint16(65319), + 135: uint16(65320), + 136: uint16(65321), + 137: uint16(65322), + 138: uint16(65323), + 139: uint16(65324), + 140: uint16(65325), + 141: uint16(65326), + 142: uint16(65327), + 143: uint16(65328), + 144: uint16(65329), + 145: uint16(65330), + 146: uint16(65331), + 147: uint16(65332), + 148: uint16(65333), + 149: uint16(65334), + 150: uint16(65335), + 151: uint16(65336), + 152: uint16(65337), + 153: uint16(65338), + 154: uint16(65339), + 155: uint16(65340), + 156: uint16(65341), + 157: uint16(65342), + 158: uint16(65343), + 159: uint16(65344), + 160: uint16(65345), + 161: uint16(65346), + 162: uint16(65347), + 163: uint16(65348), + 164: uint16(65349), + 165: uint16(65350), + 166: uint16(65351), + 167: uint16(65352), + 168: uint16(65353), + 169: uint16(65354), + 170: uint16(65355), + 171: uint16(65356), + 172: uint16(65357), + 173: uint16(65358), + 174: uint16(65359), + 175: uint16(65360), + 176: uint16(65361), + 177: uint16(65362), + 178: uint16(65363), + 179: uint16(65364), + 180: uint16(65365), + 181: uint16(65366), + 182: uint16(65367), + 183: uint16(65368), + 184: uint16(65369), + 185: uint16(65370), + 186: uint16(65371), + 187: uint16(65372), + 188: uint16(65373), + 189: uint16(65507), + }, + 35: { + 0: uint16(58854), + 1: uint16(58855), + 2: uint16(58856), + 3: uint16(58857), + 4: uint16(58858), + 5: uint16(58859), + 6: uint16(58860), + 7: uint16(58861), + 8: uint16(58862), + 9: uint16(58863), + 10: uint16(58864), + 11: uint16(58865), + 12: uint16(58866), + 13: uint16(58867), + 14: uint16(58868), + 15: uint16(58869), + 16: uint16(58870), + 17: uint16(58871), + 18: uint16(58872), + 19: uint16(58873), + 20: uint16(58874), + 21: uint16(58875), + 22: uint16(58876), + 23: uint16(58877), + 24: uint16(58878), + 25: uint16(58879), + 26: uint16(58880), + 27: uint16(58881), + 28: uint16(58882), + 29: uint16(58883), + 30: uint16(58884), + 31: uint16(58885), + 32: uint16(58886), + 33: uint16(58887), + 34: uint16(58888), + 35: uint16(58889), + 36: uint16(58890), + 37: uint16(58891), + 38: uint16(58892), + 39: uint16(58893), + 40: uint16(58894), + 41: uint16(58895), + 42: uint16(58896), + 43: uint16(58897), + 44: uint16(58898), + 45: uint16(58899), + 46: uint16(58900), + 47: uint16(58901), + 48: uint16(58902), + 49: uint16(58903), + 50: uint16(58904), + 51: uint16(58905), + 52: uint16(58906), + 53: uint16(58907), + 54: uint16(58908), + 55: uint16(58909), + 56: uint16(58910), + 57: uint16(58911), + 58: uint16(58912), + 59: uint16(58913), + 60: uint16(58914), + 61: uint16(58915), + 62: uint16(58916), + 63: uint16(58917), + 64: uint16(58918), + 65: uint16(58919), + 66: uint16(58920), + 67: uint16(58921), + 68: uint16(58922), + 69: uint16(58923), + 70: uint16(58924), + 71: uint16(58925), + 72: uint16(58926), + 73: uint16(58927), + 74: uint16(58928), + 75: uint16(58929), + 76: uint16(58930), + 77: uint16(58931), + 78: uint16(58932), + 79: uint16(58933), + 80: uint16(58934), + 81: uint16(58935), + 82: uint16(58936), + 83: uint16(58937), + 84: uint16(58938), + 85: uint16(58939), + 86: uint16(58940), + 87: uint16(58941), + 88: uint16(58942), + 89: uint16(58943), + 90: uint16(58944), + 91: uint16(58945), + 92: uint16(58946), + 93: uint16(58947), + 94: uint16(58948), + 95: uint16(58949), + 96: uint16(12353), + 97: uint16(12354), + 98: uint16(12355), + 99: uint16(12356), + 100: uint16(12357), + 101: uint16(12358), + 102: uint16(12359), + 103: uint16(12360), + 104: uint16(12361), + 105: uint16(12362), + 106: uint16(12363), + 107: uint16(12364), + 108: uint16(12365), + 109: uint16(12366), + 110: uint16(12367), + 111: uint16(12368), + 112: uint16(12369), + 113: uint16(12370), + 114: uint16(12371), + 115: uint16(12372), + 116: uint16(12373), + 117: uint16(12374), + 118: uint16(12375), + 119: uint16(12376), + 120: uint16(12377), + 121: uint16(12378), + 122: uint16(12379), + 123: uint16(12380), + 124: uint16(12381), + 125: uint16(12382), + 126: uint16(12383), + 127: uint16(12384), + 128: uint16(12385), + 129: uint16(12386), + 130: uint16(12387), + 131: uint16(12388), + 132: uint16(12389), + 133: uint16(12390), + 134: uint16(12391), + 135: uint16(12392), + 136: uint16(12393), + 137: uint16(12394), + 138: uint16(12395), + 139: uint16(12396), + 140: uint16(12397), + 141: uint16(12398), + 142: uint16(12399), + 143: uint16(12400), + 144: uint16(12401), + 145: uint16(12402), + 146: uint16(12403), + 147: uint16(12404), + 148: uint16(12405), + 149: uint16(12406), + 150: uint16(12407), + 151: uint16(12408), + 152: uint16(12409), + 153: uint16(12410), + 154: uint16(12411), + 155: uint16(12412), + 156: uint16(12413), + 157: uint16(12414), + 158: uint16(12415), + 159: uint16(12416), + 160: uint16(12417), + 161: uint16(12418), + 162: uint16(12419), + 163: uint16(12420), + 164: uint16(12421), + 165: uint16(12422), + 166: uint16(12423), + 167: uint16(12424), + 168: uint16(12425), + 169: uint16(12426), + 170: uint16(12427), + 171: uint16(12428), + 172: uint16(12429), + 173: uint16(12430), + 174: uint16(12431), + 175: uint16(12432), + 176: uint16(12433), + 177: uint16(12434), + 178: uint16(12435), + 179: uint16(59250), + 180: uint16(59251), + 181: uint16(59252), + 182: uint16(59253), + 183: uint16(59254), + 184: uint16(59255), + 185: uint16(59256), + 186: uint16(59257), + 187: uint16(59258), + 188: uint16(59259), + 189: uint16(59260), + }, + 36: { + 0: uint16(58950), + 1: uint16(58951), + 2: uint16(58952), + 3: uint16(58953), + 4: uint16(58954), + 5: uint16(58955), + 6: uint16(58956), + 7: uint16(58957), + 8: uint16(58958), + 9: uint16(58959), + 10: uint16(58960), + 11: uint16(58961), + 12: uint16(58962), + 13: uint16(58963), + 14: uint16(58964), + 15: uint16(58965), + 16: uint16(58966), + 17: uint16(58967), + 18: uint16(58968), + 19: uint16(58969), + 20: uint16(58970), + 21: uint16(58971), + 22: uint16(58972), + 23: uint16(58973), + 24: uint16(58974), + 25: uint16(58975), + 26: uint16(58976), + 27: uint16(58977), + 28: uint16(58978), + 29: uint16(58979), + 30: uint16(58980), + 31: uint16(58981), + 32: uint16(58982), + 33: uint16(58983), + 34: uint16(58984), + 35: uint16(58985), + 36: uint16(58986), + 37: uint16(58987), + 38: uint16(58988), + 39: uint16(58989), + 40: uint16(58990), + 41: uint16(58991), + 42: uint16(58992), + 43: uint16(58993), + 44: uint16(58994), + 45: uint16(58995), + 46: uint16(58996), + 47: uint16(58997), + 48: uint16(58998), + 49: uint16(58999), + 50: uint16(59000), + 51: uint16(59001), + 52: uint16(59002), + 53: uint16(59003), + 54: uint16(59004), + 55: uint16(59005), + 56: uint16(59006), + 57: uint16(59007), + 58: uint16(59008), + 59: uint16(59009), + 60: uint16(59010), + 61: uint16(59011), + 62: uint16(59012), + 63: uint16(59013), + 64: uint16(59014), + 65: uint16(59015), + 66: uint16(59016), + 67: uint16(59017), + 68: uint16(59018), + 69: uint16(59019), + 70: uint16(59020), + 71: uint16(59021), + 72: uint16(59022), + 73: uint16(59023), + 74: uint16(59024), + 75: uint16(59025), + 76: uint16(59026), + 77: uint16(59027), + 78: uint16(59028), + 79: uint16(59029), + 80: uint16(59030), + 81: uint16(59031), + 82: uint16(59032), + 83: uint16(59033), + 84: uint16(59034), + 85: uint16(59035), + 86: uint16(59036), + 87: uint16(59037), + 88: uint16(59038), + 89: uint16(59039), + 90: uint16(59040), + 91: uint16(59041), + 92: uint16(59042), + 93: uint16(59043), + 94: uint16(59044), + 95: uint16(59045), + 96: uint16(12449), + 97: uint16(12450), + 98: uint16(12451), + 99: uint16(12452), + 100: uint16(12453), + 101: uint16(12454), + 102: uint16(12455), + 103: uint16(12456), + 104: uint16(12457), + 105: uint16(12458), + 106: uint16(12459), + 107: uint16(12460), + 108: uint16(12461), + 109: uint16(12462), + 110: uint16(12463), + 111: uint16(12464), + 112: uint16(12465), + 113: uint16(12466), + 114: uint16(12467), + 115: uint16(12468), + 116: uint16(12469), + 117: uint16(12470), + 118: uint16(12471), + 119: uint16(12472), + 120: uint16(12473), + 121: uint16(12474), + 122: uint16(12475), + 123: uint16(12476), + 124: uint16(12477), + 125: uint16(12478), + 126: uint16(12479), + 127: uint16(12480), + 128: uint16(12481), + 129: uint16(12482), + 130: uint16(12483), + 131: uint16(12484), + 132: uint16(12485), + 133: uint16(12486), + 134: uint16(12487), + 135: uint16(12488), + 136: uint16(12489), + 137: uint16(12490), + 138: uint16(12491), + 139: uint16(12492), + 140: uint16(12493), + 141: uint16(12494), + 142: uint16(12495), + 143: uint16(12496), + 144: uint16(12497), + 145: uint16(12498), + 146: uint16(12499), + 147: uint16(12500), + 148: uint16(12501), + 149: uint16(12502), + 150: uint16(12503), + 151: uint16(12504), + 152: uint16(12505), + 153: uint16(12506), + 154: uint16(12507), + 155: uint16(12508), + 156: uint16(12509), + 157: uint16(12510), + 158: uint16(12511), + 159: uint16(12512), + 160: uint16(12513), + 161: uint16(12514), + 162: uint16(12515), + 163: uint16(12516), + 164: uint16(12517), + 165: uint16(12518), + 166: uint16(12519), + 167: uint16(12520), + 168: uint16(12521), + 169: uint16(12522), + 170: uint16(12523), + 171: uint16(12524), + 172: uint16(12525), + 173: uint16(12526), + 174: uint16(12527), + 175: uint16(12528), + 176: uint16(12529), + 177: uint16(12530), + 178: uint16(12531), + 179: uint16(12532), + 180: uint16(12533), + 181: uint16(12534), + 182: uint16(59261), + 183: uint16(59262), + 184: uint16(59263), + 185: uint16(59264), + 186: uint16(59265), + 187: uint16(59266), + 188: uint16(59267), + 189: uint16(59268), + }, + 37: { + 0: uint16(59046), + 1: uint16(59047), + 2: uint16(59048), + 3: uint16(59049), + 4: uint16(59050), + 5: uint16(59051), + 6: uint16(59052), + 7: uint16(59053), + 8: uint16(59054), + 9: uint16(59055), + 10: uint16(59056), + 11: uint16(59057), + 12: uint16(59058), + 13: uint16(59059), + 14: uint16(59060), + 15: uint16(59061), + 16: uint16(59062), + 17: uint16(59063), + 18: uint16(59064), + 19: uint16(59065), + 20: uint16(59066), + 21: uint16(59067), + 22: uint16(59068), + 23: uint16(59069), + 24: uint16(59070), + 25: uint16(59071), + 26: uint16(59072), + 27: uint16(59073), + 28: uint16(59074), + 29: uint16(59075), + 30: uint16(59076), + 31: uint16(59077), + 32: uint16(59078), + 33: uint16(59079), + 34: uint16(59080), + 35: uint16(59081), + 36: uint16(59082), + 37: uint16(59083), + 38: uint16(59084), + 39: uint16(59085), + 40: uint16(59086), + 41: uint16(59087), + 42: uint16(59088), + 43: uint16(59089), + 44: uint16(59090), + 45: uint16(59091), + 46: uint16(59092), + 47: uint16(59093), + 48: uint16(59094), + 49: uint16(59095), + 50: uint16(59096), + 51: uint16(59097), + 52: uint16(59098), + 53: uint16(59099), + 54: uint16(59100), + 55: uint16(59101), + 56: uint16(59102), + 57: uint16(59103), + 58: uint16(59104), + 59: uint16(59105), + 60: uint16(59106), + 61: uint16(59107), + 62: uint16(59108), + 63: uint16(59109), + 64: uint16(59110), + 65: uint16(59111), + 66: uint16(59112), + 67: uint16(59113), + 68: uint16(59114), + 69: uint16(59115), + 70: uint16(59116), + 71: uint16(59117), + 72: uint16(59118), + 73: uint16(59119), + 74: uint16(59120), + 75: uint16(59121), + 76: uint16(59122), + 77: uint16(59123), + 78: uint16(59124), + 79: uint16(59125), + 80: uint16(59126), + 81: uint16(59127), + 82: uint16(59128), + 83: uint16(59129), + 84: uint16(59130), + 85: uint16(59131), + 86: uint16(59132), + 87: uint16(59133), + 88: uint16(59134), + 89: uint16(59135), + 90: uint16(59136), + 91: uint16(59137), + 92: uint16(59138), + 93: uint16(59139), + 94: uint16(59140), + 95: uint16(59141), + 96: uint16(913), + 97: uint16(914), + 98: uint16(915), + 99: uint16(916), + 100: uint16(917), + 101: uint16(918), + 102: uint16(919), + 103: uint16(920), + 104: uint16(921), + 105: uint16(922), + 106: uint16(923), + 107: uint16(924), + 108: uint16(925), + 109: uint16(926), + 110: uint16(927), + 111: uint16(928), + 112: uint16(929), + 113: uint16(931), + 114: uint16(932), + 115: uint16(933), + 116: uint16(934), + 117: uint16(935), + 118: uint16(936), + 119: uint16(937), + 120: uint16(59269), + 121: uint16(59270), + 122: uint16(59271), + 123: uint16(59272), + 124: uint16(59273), + 125: uint16(59274), + 126: uint16(59275), + 127: uint16(59276), + 128: uint16(945), + 129: uint16(946), + 130: uint16(947), + 131: uint16(948), + 132: uint16(949), + 133: uint16(950), + 134: uint16(951), + 135: uint16(952), + 136: uint16(953), + 137: uint16(954), + 138: uint16(955), + 139: uint16(956), + 140: uint16(957), + 141: uint16(958), + 142: uint16(959), + 143: uint16(960), + 144: uint16(961), + 145: uint16(963), + 146: uint16(964), + 147: uint16(965), + 148: uint16(966), + 149: uint16(967), + 150: uint16(968), + 151: uint16(969), + 152: uint16(59277), + 153: uint16(59278), + 154: uint16(59279), + 155: uint16(59280), + 156: uint16(59281), + 157: uint16(59282), + 158: uint16(59283), + 159: uint16(65077), + 160: uint16(65078), + 161: uint16(65081), + 162: uint16(65082), + 163: uint16(65087), + 164: uint16(65088), + 165: uint16(65085), + 166: uint16(65086), + 167: uint16(65089), + 168: uint16(65090), + 169: uint16(65091), + 170: uint16(65092), + 171: uint16(59284), + 172: uint16(59285), + 173: uint16(65083), + 174: uint16(65084), + 175: uint16(65079), + 176: uint16(65080), + 177: uint16(65073), + 178: uint16(59286), + 179: uint16(65075), + 180: uint16(65076), + 181: uint16(59287), + 182: uint16(59288), + 183: uint16(59289), + 184: uint16(59290), + 185: uint16(59291), + 186: uint16(59292), + 187: uint16(59293), + 188: uint16(59294), + 189: uint16(59295), + }, + 38: { + 0: uint16(59142), + 1: uint16(59143), + 2: uint16(59144), + 3: uint16(59145), + 4: uint16(59146), + 5: uint16(59147), + 6: uint16(59148), + 7: uint16(59149), + 8: uint16(59150), + 9: uint16(59151), + 10: uint16(59152), + 11: uint16(59153), + 12: uint16(59154), + 13: uint16(59155), + 14: uint16(59156), + 15: uint16(59157), + 16: uint16(59158), + 17: uint16(59159), + 18: uint16(59160), + 19: uint16(59161), + 20: uint16(59162), + 21: uint16(59163), + 22: uint16(59164), + 23: uint16(59165), + 24: uint16(59166), + 25: uint16(59167), + 26: uint16(59168), + 27: uint16(59169), + 28: uint16(59170), + 29: uint16(59171), + 30: uint16(59172), + 31: uint16(59173), + 32: uint16(59174), + 33: uint16(59175), + 34: uint16(59176), + 35: uint16(59177), + 36: uint16(59178), + 37: uint16(59179), + 38: uint16(59180), + 39: uint16(59181), + 40: uint16(59182), + 41: uint16(59183), + 42: uint16(59184), + 43: uint16(59185), + 44: uint16(59186), + 45: uint16(59187), + 46: uint16(59188), + 47: uint16(59189), + 48: uint16(59190), + 49: uint16(59191), + 50: uint16(59192), + 51: uint16(59193), + 52: uint16(59194), + 53: uint16(59195), + 54: uint16(59196), + 55: uint16(59197), + 56: uint16(59198), + 57: uint16(59199), + 58: uint16(59200), + 59: uint16(59201), + 60: uint16(59202), + 61: uint16(59203), + 62: uint16(59204), + 63: uint16(59205), + 64: uint16(59206), + 65: uint16(59207), + 66: uint16(59208), + 67: uint16(59209), + 68: uint16(59210), + 69: uint16(59211), + 70: uint16(59212), + 71: uint16(59213), + 72: uint16(59214), + 73: uint16(59215), + 74: uint16(59216), + 75: uint16(59217), + 76: uint16(59218), + 77: uint16(59219), + 78: uint16(59220), + 79: uint16(59221), + 80: uint16(59222), + 81: uint16(59223), + 82: uint16(59224), + 83: uint16(59225), + 84: uint16(59226), + 85: uint16(59227), + 86: uint16(59228), + 87: uint16(59229), + 88: uint16(59230), + 89: uint16(59231), + 90: uint16(59232), + 91: uint16(59233), + 92: uint16(59234), + 93: uint16(59235), + 94: uint16(59236), + 95: uint16(59237), + 96: uint16(1040), + 97: uint16(1041), + 98: uint16(1042), + 99: uint16(1043), + 100: uint16(1044), + 101: uint16(1045), + 102: uint16(1025), + 103: uint16(1046), + 104: uint16(1047), + 105: uint16(1048), + 106: uint16(1049), + 107: uint16(1050), + 108: uint16(1051), + 109: uint16(1052), + 110: uint16(1053), + 111: uint16(1054), + 112: uint16(1055), + 113: uint16(1056), + 114: uint16(1057), + 115: uint16(1058), + 116: uint16(1059), + 117: uint16(1060), + 118: uint16(1061), + 119: uint16(1062), + 120: uint16(1063), + 121: uint16(1064), + 122: uint16(1065), + 123: uint16(1066), + 124: uint16(1067), + 125: uint16(1068), + 126: uint16(1069), + 127: uint16(1070), + 128: uint16(1071), + 129: uint16(59296), + 130: uint16(59297), + 131: uint16(59298), + 132: uint16(59299), + 133: uint16(59300), + 134: uint16(59301), + 135: uint16(59302), + 136: uint16(59303), + 137: uint16(59304), + 138: uint16(59305), + 139: uint16(59306), + 140: uint16(59307), + 141: uint16(59308), + 142: uint16(59309), + 143: uint16(59310), + 144: uint16(1072), + 145: uint16(1073), + 146: uint16(1074), + 147: uint16(1075), + 148: uint16(1076), + 149: uint16(1077), + 150: uint16(1105), + 151: uint16(1078), + 152: uint16(1079), + 153: uint16(1080), + 154: uint16(1081), + 155: uint16(1082), + 156: uint16(1083), + 157: uint16(1084), + 158: uint16(1085), + 159: uint16(1086), + 160: uint16(1087), + 161: uint16(1088), + 162: uint16(1089), + 163: uint16(1090), + 164: uint16(1091), + 165: uint16(1092), + 166: uint16(1093), + 167: uint16(1094), + 168: uint16(1095), + 169: uint16(1096), + 170: uint16(1097), + 171: uint16(1098), + 172: uint16(1099), + 173: uint16(1100), + 174: uint16(1101), + 175: uint16(1102), + 176: uint16(1103), + 177: uint16(59311), + 178: uint16(59312), + 179: uint16(59313), + 180: uint16(59314), + 181: uint16(59315), + 182: uint16(59316), + 183: uint16(59317), + 184: uint16(59318), + 185: uint16(59319), + 186: uint16(59320), + 187: uint16(59321), + 188: uint16(59322), + 189: uint16(59323), + }, + 39: { + 0: uint16(714), + 1: uint16(715), + 2: uint16(729), + 3: uint16(8211), + 4: uint16(8213), + 5: uint16(8229), + 6: uint16(8245), + 7: uint16(8453), + 8: uint16(8457), + 9: uint16(8598), + 10: uint16(8599), + 11: uint16(8600), + 12: uint16(8601), + 13: uint16(8725), + 14: uint16(8735), + 15: uint16(8739), + 16: uint16(8786), + 17: uint16(8806), + 18: uint16(8807), + 19: uint16(8895), + 20: uint16(9552), + 21: uint16(9553), + 22: uint16(9554), + 23: uint16(9555), + 24: uint16(9556), + 25: uint16(9557), + 26: uint16(9558), + 27: uint16(9559), + 28: uint16(9560), + 29: uint16(9561), + 30: uint16(9562), + 31: uint16(9563), + 32: uint16(9564), + 33: uint16(9565), + 34: uint16(9566), + 35: uint16(9567), + 36: uint16(9568), + 37: uint16(9569), + 38: uint16(9570), + 39: uint16(9571), + 40: uint16(9572), + 41: uint16(9573), + 42: uint16(9574), + 43: uint16(9575), + 44: uint16(9576), + 45: uint16(9577), + 46: uint16(9578), + 47: uint16(9579), + 48: uint16(9580), + 49: uint16(9581), + 50: uint16(9582), + 51: uint16(9583), + 52: uint16(9584), + 53: uint16(9585), + 54: uint16(9586), + 55: uint16(9587), + 56: uint16(9601), + 57: uint16(9602), + 58: uint16(9603), + 59: uint16(9604), + 60: uint16(9605), + 61: uint16(9606), + 62: uint16(9607), + 63: uint16(9608), + 64: uint16(9609), + 65: uint16(9610), + 66: uint16(9611), + 67: uint16(9612), + 68: uint16(9613), + 69: uint16(9614), + 70: uint16(9615), + 71: uint16(9619), + 72: uint16(9620), + 73: uint16(9621), + 74: uint16(9660), + 75: uint16(9661), + 76: uint16(9698), + 77: uint16(9699), + 78: uint16(9700), + 79: uint16(9701), + 80: uint16(9737), + 81: uint16(8853), + 82: uint16(12306), + 83: uint16(12317), + 84: uint16(12318), + 85: uint16(59324), + 86: uint16(59325), + 87: uint16(59326), + 88: uint16(59327), + 89: uint16(59328), + 90: uint16(59329), + 91: uint16(59330), + 92: uint16(59331), + 93: uint16(59332), + 94: uint16(59333), + 95: uint16(59334), + 96: uint16(257), + 97: uint16(225), + 98: uint16(462), + 99: uint16(224), + 100: uint16(275), + 101: uint16(233), + 102: uint16(283), + 103: uint16(232), + 104: uint16(299), + 105: uint16(237), + 106: uint16(464), + 107: uint16(236), + 108: uint16(333), + 109: uint16(243), + 110: uint16(466), + 111: uint16(242), + 112: uint16(363), + 113: uint16(250), + 114: uint16(468), + 115: uint16(249), + 116: uint16(470), + 117: uint16(472), + 118: uint16(474), + 119: uint16(476), + 120: uint16(252), + 121: uint16(234), + 122: uint16(593), + 123: uint16(59335), + 124: uint16(324), + 125: uint16(328), + 126: uint16(505), + 127: uint16(609), + 128: uint16(59337), + 129: uint16(59338), + 130: uint16(59339), + 131: uint16(59340), + 132: uint16(12549), + 133: uint16(12550), + 134: uint16(12551), + 135: uint16(12552), + 136: uint16(12553), + 137: uint16(12554), + 138: uint16(12555), + 139: uint16(12556), + 140: uint16(12557), + 141: uint16(12558), + 142: uint16(12559), + 143: uint16(12560), + 144: uint16(12561), + 145: uint16(12562), + 146: uint16(12563), + 147: uint16(12564), + 148: uint16(12565), + 149: uint16(12566), + 150: uint16(12567), + 151: uint16(12568), + 152: uint16(12569), + 153: uint16(12570), + 154: uint16(12571), + 155: uint16(12572), + 156: uint16(12573), + 157: uint16(12574), + 158: uint16(12575), + 159: uint16(12576), + 160: uint16(12577), + 161: uint16(12578), + 162: uint16(12579), + 163: uint16(12580), + 164: uint16(12581), + 165: uint16(12582), + 166: uint16(12583), + 167: uint16(12584), + 168: uint16(12585), + 169: uint16(59341), + 170: uint16(59342), + 171: uint16(59343), + 172: uint16(59344), + 173: uint16(59345), + 174: uint16(59346), + 175: uint16(59347), + 176: uint16(59348), + 177: uint16(59349), + 178: uint16(59350), + 179: uint16(59351), + 180: uint16(59352), + 181: uint16(59353), + 182: uint16(59354), + 183: uint16(59355), + 184: uint16(59356), + 185: uint16(59357), + 186: uint16(59358), + 187: uint16(59359), + 188: uint16(59360), + 189: uint16(59361), + }, + 40: { + 0: uint16(12321), + 1: uint16(12322), + 2: uint16(12323), + 3: uint16(12324), + 4: uint16(12325), + 5: uint16(12326), + 6: uint16(12327), + 7: uint16(12328), + 8: uint16(12329), + 9: uint16(12963), + 10: uint16(13198), + 11: uint16(13199), + 12: uint16(13212), + 13: uint16(13213), + 14: uint16(13214), + 15: uint16(13217), + 16: uint16(13252), + 17: uint16(13262), + 18: uint16(13265), + 19: uint16(13266), + 20: uint16(13269), + 21: uint16(65072), + 22: uint16(65506), + 23: uint16(65508), + 24: uint16(59362), + 25: uint16(8481), + 26: uint16(12849), + 27: uint16(59363), + 28: uint16(8208), + 29: uint16(59364), + 30: uint16(59365), + 31: uint16(59366), + 32: uint16(12540), + 33: uint16(12443), + 34: uint16(12444), + 35: uint16(12541), + 36: uint16(12542), + 37: uint16(12294), + 38: uint16(12445), + 39: uint16(12446), + 40: uint16(65097), + 41: uint16(65098), + 42: uint16(65099), + 43: uint16(65100), + 44: uint16(65101), + 45: uint16(65102), + 46: uint16(65103), + 47: uint16(65104), + 48: uint16(65105), + 49: uint16(65106), + 50: uint16(65108), + 51: uint16(65109), + 52: uint16(65110), + 53: uint16(65111), + 54: uint16(65113), + 55: uint16(65114), + 56: uint16(65115), + 57: uint16(65116), + 58: uint16(65117), + 59: uint16(65118), + 60: uint16(65119), + 61: uint16(65120), + 62: uint16(65121), + 63: uint16(65122), + 64: uint16(65123), + 65: uint16(65124), + 66: uint16(65125), + 67: uint16(65126), + 68: uint16(65128), + 69: uint16(65129), + 70: uint16(65130), + 71: uint16(65131), + 72: uint16(12350), + 73: uint16(12272), + 74: uint16(12273), + 75: uint16(12274), + 76: uint16(12275), + 77: uint16(12276), + 78: uint16(12277), + 79: uint16(12278), + 80: uint16(12279), + 81: uint16(12280), + 82: uint16(12281), + 83: uint16(12282), + 84: uint16(12283), + 85: uint16(12295), + 86: uint16(59380), + 87: uint16(59381), + 88: uint16(59382), + 89: uint16(59383), + 90: uint16(59384), + 91: uint16(59385), + 92: uint16(59386), + 93: uint16(59387), + 94: uint16(59388), + 95: uint16(59389), + 96: uint16(59390), + 97: uint16(59391), + 98: uint16(59392), + 99: uint16(9472), + 100: uint16(9473), + 101: uint16(9474), + 102: uint16(9475), + 103: uint16(9476), + 104: uint16(9477), + 105: uint16(9478), + 106: uint16(9479), + 107: uint16(9480), + 108: uint16(9481), + 109: uint16(9482), + 110: uint16(9483), + 111: uint16(9484), + 112: uint16(9485), + 113: uint16(9486), + 114: uint16(9487), + 115: uint16(9488), + 116: uint16(9489), + 117: uint16(9490), + 118: uint16(9491), + 119: uint16(9492), + 120: uint16(9493), + 121: uint16(9494), + 122: uint16(9495), + 123: uint16(9496), + 124: uint16(9497), + 125: uint16(9498), + 126: uint16(9499), + 127: uint16(9500), + 128: uint16(9501), + 129: uint16(9502), + 130: uint16(9503), + 131: uint16(9504), + 132: uint16(9505), + 133: uint16(9506), + 134: uint16(9507), + 135: uint16(9508), + 136: uint16(9509), + 137: uint16(9510), + 138: uint16(9511), + 139: uint16(9512), + 140: uint16(9513), + 141: uint16(9514), + 142: uint16(9515), + 143: uint16(9516), + 144: uint16(9517), + 145: uint16(9518), + 146: uint16(9519), + 147: uint16(9520), + 148: uint16(9521), + 149: uint16(9522), + 150: uint16(9523), + 151: uint16(9524), + 152: uint16(9525), + 153: uint16(9526), + 154: uint16(9527), + 155: uint16(9528), + 156: uint16(9529), + 157: uint16(9530), + 158: uint16(9531), + 159: uint16(9532), + 160: uint16(9533), + 161: uint16(9534), + 162: uint16(9535), + 163: uint16(9536), + 164: uint16(9537), + 165: uint16(9538), + 166: uint16(9539), + 167: uint16(9540), + 168: uint16(9541), + 169: uint16(9542), + 170: uint16(9543), + 171: uint16(9544), + 172: uint16(9545), + 173: uint16(9546), + 174: uint16(9547), + 175: uint16(59393), + 176: uint16(59394), + 177: uint16(59395), + 178: uint16(59396), + 179: uint16(59397), + 180: uint16(59398), + 181: uint16(59399), + 182: uint16(59400), + 183: uint16(59401), + 184: uint16(59402), + 185: uint16(59403), + 186: uint16(59404), + 187: uint16(59405), + 188: uint16(59406), + 189: uint16(59407), + }, + 41: { + 0: uint16(29404), + 1: uint16(29405), + 2: uint16(29407), + 3: uint16(29410), + 4: uint16(29411), + 5: uint16(29412), + 6: uint16(29413), + 7: uint16(29414), + 8: uint16(29415), + 9: uint16(29418), + 10: uint16(29419), + 11: uint16(29429), + 12: uint16(29430), + 13: uint16(29433), + 14: uint16(29437), + 15: uint16(29438), + 16: uint16(29439), + 17: uint16(29440), + 18: uint16(29442), + 19: uint16(29444), + 20: uint16(29445), + 21: uint16(29446), + 22: uint16(29447), + 23: uint16(29448), + 24: uint16(29449), + 25: uint16(29451), + 26: uint16(29452), + 27: uint16(29453), + 28: uint16(29455), + 29: uint16(29456), + 30: uint16(29457), + 31: uint16(29458), + 32: uint16(29460), + 33: uint16(29464), + 34: uint16(29465), + 35: uint16(29466), + 36: uint16(29471), + 37: uint16(29472), + 38: uint16(29475), + 39: uint16(29476), + 40: uint16(29478), + 41: uint16(29479), + 42: uint16(29480), + 43: uint16(29485), + 44: uint16(29487), + 45: uint16(29488), + 46: uint16(29490), + 47: uint16(29491), + 48: uint16(29493), + 49: uint16(29494), + 50: uint16(29498), + 51: uint16(29499), + 52: uint16(29500), + 53: uint16(29501), + 54: uint16(29504), + 55: uint16(29505), + 56: uint16(29506), + 57: uint16(29507), + 58: uint16(29508), + 59: uint16(29509), + 60: uint16(29510), + 61: uint16(29511), + 62: uint16(29512), + 63: uint16(29513), + 64: uint16(29514), + 65: uint16(29515), + 66: uint16(29516), + 67: uint16(29518), + 68: uint16(29519), + 69: uint16(29521), + 70: uint16(29523), + 71: uint16(29524), + 72: uint16(29525), + 73: uint16(29526), + 74: uint16(29528), + 75: uint16(29529), + 76: uint16(29530), + 77: uint16(29531), + 78: uint16(29532), + 79: uint16(29533), + 80: uint16(29534), + 81: uint16(29535), + 82: uint16(29537), + 83: uint16(29538), + 84: uint16(29539), + 85: uint16(29540), + 86: uint16(29541), + 87: uint16(29542), + 88: uint16(29543), + 89: uint16(29544), + 90: uint16(29545), + 91: uint16(29546), + 92: uint16(29547), + 93: uint16(29550), + 94: uint16(29552), + 95: uint16(29553), + 96: uint16(57344), + 97: uint16(57345), + 98: uint16(57346), + 99: uint16(57347), + 100: uint16(57348), + 101: uint16(57349), + 102: uint16(57350), + 103: uint16(57351), + 104: uint16(57352), + 105: uint16(57353), + 106: uint16(57354), + 107: uint16(57355), + 108: uint16(57356), + 109: uint16(57357), + 110: uint16(57358), + 111: uint16(57359), + 112: uint16(57360), + 113: uint16(57361), + 114: uint16(57362), + 115: uint16(57363), + 116: uint16(57364), + 117: uint16(57365), + 118: uint16(57366), + 119: uint16(57367), + 120: uint16(57368), + 121: uint16(57369), + 122: uint16(57370), + 123: uint16(57371), + 124: uint16(57372), + 125: uint16(57373), + 126: uint16(57374), + 127: uint16(57375), + 128: uint16(57376), + 129: uint16(57377), + 130: uint16(57378), + 131: uint16(57379), + 132: uint16(57380), + 133: uint16(57381), + 134: uint16(57382), + 135: uint16(57383), + 136: uint16(57384), + 137: uint16(57385), + 138: uint16(57386), + 139: uint16(57387), + 140: uint16(57388), + 141: uint16(57389), + 142: uint16(57390), + 143: uint16(57391), + 144: uint16(57392), + 145: uint16(57393), + 146: uint16(57394), + 147: uint16(57395), + 148: uint16(57396), + 149: uint16(57397), + 150: uint16(57398), + 151: uint16(57399), + 152: uint16(57400), + 153: uint16(57401), + 154: uint16(57402), + 155: uint16(57403), + 156: uint16(57404), + 157: uint16(57405), + 158: uint16(57406), + 159: uint16(57407), + 160: uint16(57408), + 161: uint16(57409), + 162: uint16(57410), + 163: uint16(57411), + 164: uint16(57412), + 165: uint16(57413), + 166: uint16(57414), + 167: uint16(57415), + 168: uint16(57416), + 169: uint16(57417), + 170: uint16(57418), + 171: uint16(57419), + 172: uint16(57420), + 173: uint16(57421), + 174: uint16(57422), + 175: uint16(57423), + 176: uint16(57424), + 177: uint16(57425), + 178: uint16(57426), + 179: uint16(57427), + 180: uint16(57428), + 181: uint16(57429), + 182: uint16(57430), + 183: uint16(57431), + 184: uint16(57432), + 185: uint16(57433), + 186: uint16(57434), + 187: uint16(57435), + 188: uint16(57436), + 189: uint16(57437), + }, + 42: { + 0: uint16(29554), + 1: uint16(29555), + 2: uint16(29556), + 3: uint16(29557), + 4: uint16(29558), + 5: uint16(29559), + 6: uint16(29560), + 7: uint16(29561), + 8: uint16(29562), + 9: uint16(29563), + 10: uint16(29564), + 11: uint16(29565), + 12: uint16(29567), + 13: uint16(29568), + 14: uint16(29569), + 15: uint16(29570), + 16: uint16(29571), + 17: uint16(29573), + 18: uint16(29574), + 19: uint16(29576), + 20: uint16(29578), + 21: uint16(29580), + 22: uint16(29581), + 23: uint16(29583), + 24: uint16(29584), + 25: uint16(29586), + 26: uint16(29587), + 27: uint16(29588), + 28: uint16(29589), + 29: uint16(29591), + 30: uint16(29592), + 31: uint16(29593), + 32: uint16(29594), + 33: uint16(29596), + 34: uint16(29597), + 35: uint16(29598), + 36: uint16(29600), + 37: uint16(29601), + 38: uint16(29603), + 39: uint16(29604), + 40: uint16(29605), + 41: uint16(29606), + 42: uint16(29607), + 43: uint16(29608), + 44: uint16(29610), + 45: uint16(29612), + 46: uint16(29613), + 47: uint16(29617), + 48: uint16(29620), + 49: uint16(29621), + 50: uint16(29622), + 51: uint16(29624), + 52: uint16(29625), + 53: uint16(29628), + 54: uint16(29629), + 55: uint16(29630), + 56: uint16(29631), + 57: uint16(29633), + 58: uint16(29635), + 59: uint16(29636), + 60: uint16(29637), + 61: uint16(29638), + 62: uint16(29639), + 63: uint16(29643), + 64: uint16(29644), + 65: uint16(29646), + 66: uint16(29650), + 67: uint16(29651), + 68: uint16(29652), + 69: uint16(29653), + 70: uint16(29654), + 71: uint16(29655), + 72: uint16(29656), + 73: uint16(29658), + 74: uint16(29659), + 75: uint16(29660), + 76: uint16(29661), + 77: uint16(29663), + 78: uint16(29665), + 79: uint16(29666), + 80: uint16(29667), + 81: uint16(29668), + 82: uint16(29670), + 83: uint16(29672), + 84: uint16(29674), + 85: uint16(29675), + 86: uint16(29676), + 87: uint16(29678), + 88: uint16(29679), + 89: uint16(29680), + 90: uint16(29681), + 91: uint16(29683), + 92: uint16(29684), + 93: uint16(29685), + 94: uint16(29686), + 95: uint16(29687), + 96: uint16(57438), + 97: uint16(57439), + 98: uint16(57440), + 99: uint16(57441), + 100: uint16(57442), + 101: uint16(57443), + 102: uint16(57444), + 103: uint16(57445), + 104: uint16(57446), + 105: uint16(57447), + 106: uint16(57448), + 107: uint16(57449), + 108: uint16(57450), + 109: uint16(57451), + 110: uint16(57452), + 111: uint16(57453), + 112: uint16(57454), + 113: uint16(57455), + 114: uint16(57456), + 115: uint16(57457), + 116: uint16(57458), + 117: uint16(57459), + 118: uint16(57460), + 119: uint16(57461), + 120: uint16(57462), + 121: uint16(57463), + 122: uint16(57464), + 123: uint16(57465), + 124: uint16(57466), + 125: uint16(57467), + 126: uint16(57468), + 127: uint16(57469), + 128: uint16(57470), + 129: uint16(57471), + 130: uint16(57472), + 131: uint16(57473), + 132: uint16(57474), + 133: uint16(57475), + 134: uint16(57476), + 135: uint16(57477), + 136: uint16(57478), + 137: uint16(57479), + 138: uint16(57480), + 139: uint16(57481), + 140: uint16(57482), + 141: uint16(57483), + 142: uint16(57484), + 143: uint16(57485), + 144: uint16(57486), + 145: uint16(57487), + 146: uint16(57488), + 147: uint16(57489), + 148: uint16(57490), + 149: uint16(57491), + 150: uint16(57492), + 151: uint16(57493), + 152: uint16(57494), + 153: uint16(57495), + 154: uint16(57496), + 155: uint16(57497), + 156: uint16(57498), + 157: uint16(57499), + 158: uint16(57500), + 159: uint16(57501), + 160: uint16(57502), + 161: uint16(57503), + 162: uint16(57504), + 163: uint16(57505), + 164: uint16(57506), + 165: uint16(57507), + 166: uint16(57508), + 167: uint16(57509), + 168: uint16(57510), + 169: uint16(57511), + 170: uint16(57512), + 171: uint16(57513), + 172: uint16(57514), + 173: uint16(57515), + 174: uint16(57516), + 175: uint16(57517), + 176: uint16(57518), + 177: uint16(57519), + 178: uint16(57520), + 179: uint16(57521), + 180: uint16(57522), + 181: uint16(57523), + 182: uint16(57524), + 183: uint16(57525), + 184: uint16(57526), + 185: uint16(57527), + 186: uint16(57528), + 187: uint16(57529), + 188: uint16(57530), + 189: uint16(57531), + }, + 43: { + 0: uint16(29688), + 1: uint16(29689), + 2: uint16(29690), + 3: uint16(29691), + 4: uint16(29692), + 5: uint16(29693), + 6: uint16(29694), + 7: uint16(29695), + 8: uint16(29696), + 9: uint16(29697), + 10: uint16(29698), + 11: uint16(29700), + 12: uint16(29703), + 13: uint16(29704), + 14: uint16(29707), + 15: uint16(29708), + 16: uint16(29709), + 17: uint16(29710), + 18: uint16(29713), + 19: uint16(29714), + 20: uint16(29715), + 21: uint16(29716), + 22: uint16(29717), + 23: uint16(29718), + 24: uint16(29719), + 25: uint16(29720), + 26: uint16(29721), + 27: uint16(29724), + 28: uint16(29725), + 29: uint16(29726), + 30: uint16(29727), + 31: uint16(29728), + 32: uint16(29729), + 33: uint16(29731), + 34: uint16(29732), + 35: uint16(29735), + 36: uint16(29737), + 37: uint16(29739), + 38: uint16(29741), + 39: uint16(29743), + 40: uint16(29745), + 41: uint16(29746), + 42: uint16(29751), + 43: uint16(29752), + 44: uint16(29753), + 45: uint16(29754), + 46: uint16(29755), + 47: uint16(29757), + 48: uint16(29758), + 49: uint16(29759), + 50: uint16(29760), + 51: uint16(29762), + 52: uint16(29763), + 53: uint16(29764), + 54: uint16(29765), + 55: uint16(29766), + 56: uint16(29767), + 57: uint16(29768), + 58: uint16(29769), + 59: uint16(29770), + 60: uint16(29771), + 61: uint16(29772), + 62: uint16(29773), + 63: uint16(29774), + 64: uint16(29775), + 65: uint16(29776), + 66: uint16(29777), + 67: uint16(29778), + 68: uint16(29779), + 69: uint16(29780), + 70: uint16(29782), + 71: uint16(29784), + 72: uint16(29789), + 73: uint16(29792), + 74: uint16(29793), + 75: uint16(29794), + 76: uint16(29795), + 77: uint16(29796), + 78: uint16(29797), + 79: uint16(29798), + 80: uint16(29799), + 81: uint16(29800), + 82: uint16(29801), + 83: uint16(29802), + 84: uint16(29803), + 85: uint16(29804), + 86: uint16(29806), + 87: uint16(29807), + 88: uint16(29809), + 89: uint16(29810), + 90: uint16(29811), + 91: uint16(29812), + 92: uint16(29813), + 93: uint16(29816), + 94: uint16(29817), + 95: uint16(29818), + 96: uint16(57532), + 97: uint16(57533), + 98: uint16(57534), + 99: uint16(57535), + 100: uint16(57536), + 101: uint16(57537), + 102: uint16(57538), + 103: uint16(57539), + 104: uint16(57540), + 105: uint16(57541), + 106: uint16(57542), + 107: uint16(57543), + 108: uint16(57544), + 109: uint16(57545), + 110: uint16(57546), + 111: uint16(57547), + 112: uint16(57548), + 113: uint16(57549), + 114: uint16(57550), + 115: uint16(57551), + 116: uint16(57552), + 117: uint16(57553), + 118: uint16(57554), + 119: uint16(57555), + 120: uint16(57556), + 121: uint16(57557), + 122: uint16(57558), + 123: uint16(57559), + 124: uint16(57560), + 125: uint16(57561), + 126: uint16(57562), + 127: uint16(57563), + 128: uint16(57564), + 129: uint16(57565), + 130: uint16(57566), + 131: uint16(57567), + 132: uint16(57568), + 133: uint16(57569), + 134: uint16(57570), + 135: uint16(57571), + 136: uint16(57572), + 137: uint16(57573), + 138: uint16(57574), + 139: uint16(57575), + 140: uint16(57576), + 141: uint16(57577), + 142: uint16(57578), + 143: uint16(57579), + 144: uint16(57580), + 145: uint16(57581), + 146: uint16(57582), + 147: uint16(57583), + 148: uint16(57584), + 149: uint16(57585), + 150: uint16(57586), + 151: uint16(57587), + 152: uint16(57588), + 153: uint16(57589), + 154: uint16(57590), + 155: uint16(57591), + 156: uint16(57592), + 157: uint16(57593), + 158: uint16(57594), + 159: uint16(57595), + 160: uint16(57596), + 161: uint16(57597), + 162: uint16(57598), + 163: uint16(57599), + 164: uint16(57600), + 165: uint16(57601), + 166: uint16(57602), + 167: uint16(57603), + 168: uint16(57604), + 169: uint16(57605), + 170: uint16(57606), + 171: uint16(57607), + 172: uint16(57608), + 173: uint16(57609), + 174: uint16(57610), + 175: uint16(57611), + 176: uint16(57612), + 177: uint16(57613), + 178: uint16(57614), + 179: uint16(57615), + 180: uint16(57616), + 181: uint16(57617), + 182: uint16(57618), + 183: uint16(57619), + 184: uint16(57620), + 185: uint16(57621), + 186: uint16(57622), + 187: uint16(57623), + 188: uint16(57624), + 189: uint16(57625), + }, + 44: { + 0: uint16(29819), + 1: uint16(29820), + 2: uint16(29821), + 3: uint16(29823), + 4: uint16(29826), + 5: uint16(29828), + 6: uint16(29829), + 7: uint16(29830), + 8: uint16(29832), + 9: uint16(29833), + 10: uint16(29834), + 11: uint16(29836), + 12: uint16(29837), + 13: uint16(29839), + 14: uint16(29841), + 15: uint16(29842), + 16: uint16(29843), + 17: uint16(29844), + 18: uint16(29845), + 19: uint16(29846), + 20: uint16(29847), + 21: uint16(29848), + 22: uint16(29849), + 23: uint16(29850), + 24: uint16(29851), + 25: uint16(29853), + 26: uint16(29855), + 27: uint16(29856), + 28: uint16(29857), + 29: uint16(29858), + 30: uint16(29859), + 31: uint16(29860), + 32: uint16(29861), + 33: uint16(29862), + 34: uint16(29866), + 35: uint16(29867), + 36: uint16(29868), + 37: uint16(29869), + 38: uint16(29870), + 39: uint16(29871), + 40: uint16(29872), + 41: uint16(29873), + 42: uint16(29874), + 43: uint16(29875), + 44: uint16(29876), + 45: uint16(29877), + 46: uint16(29878), + 47: uint16(29879), + 48: uint16(29880), + 49: uint16(29881), + 50: uint16(29883), + 51: uint16(29884), + 52: uint16(29885), + 53: uint16(29886), + 54: uint16(29887), + 55: uint16(29888), + 56: uint16(29889), + 57: uint16(29890), + 58: uint16(29891), + 59: uint16(29892), + 60: uint16(29893), + 61: uint16(29894), + 62: uint16(29895), + 63: uint16(29896), + 64: uint16(29897), + 65: uint16(29898), + 66: uint16(29899), + 67: uint16(29900), + 68: uint16(29901), + 69: uint16(29902), + 70: uint16(29903), + 71: uint16(29904), + 72: uint16(29905), + 73: uint16(29907), + 74: uint16(29908), + 75: uint16(29909), + 76: uint16(29910), + 77: uint16(29911), + 78: uint16(29912), + 79: uint16(29913), + 80: uint16(29914), + 81: uint16(29915), + 82: uint16(29917), + 83: uint16(29919), + 84: uint16(29921), + 85: uint16(29925), + 86: uint16(29927), + 87: uint16(29928), + 88: uint16(29929), + 89: uint16(29930), + 90: uint16(29931), + 91: uint16(29932), + 92: uint16(29933), + 93: uint16(29936), + 94: uint16(29937), + 95: uint16(29938), + 96: uint16(57626), + 97: uint16(57627), + 98: uint16(57628), + 99: uint16(57629), + 100: uint16(57630), + 101: uint16(57631), + 102: uint16(57632), + 103: uint16(57633), + 104: uint16(57634), + 105: uint16(57635), + 106: uint16(57636), + 107: uint16(57637), + 108: uint16(57638), + 109: uint16(57639), + 110: uint16(57640), + 111: uint16(57641), + 112: uint16(57642), + 113: uint16(57643), + 114: uint16(57644), + 115: uint16(57645), + 116: uint16(57646), + 117: uint16(57647), + 118: uint16(57648), + 119: uint16(57649), + 120: uint16(57650), + 121: uint16(57651), + 122: uint16(57652), + 123: uint16(57653), + 124: uint16(57654), + 125: uint16(57655), + 126: uint16(57656), + 127: uint16(57657), + 128: uint16(57658), + 129: uint16(57659), + 130: uint16(57660), + 131: uint16(57661), + 132: uint16(57662), + 133: uint16(57663), + 134: uint16(57664), + 135: uint16(57665), + 136: uint16(57666), + 137: uint16(57667), + 138: uint16(57668), + 139: uint16(57669), + 140: uint16(57670), + 141: uint16(57671), + 142: uint16(57672), + 143: uint16(57673), + 144: uint16(57674), + 145: uint16(57675), + 146: uint16(57676), + 147: uint16(57677), + 148: uint16(57678), + 149: uint16(57679), + 150: uint16(57680), + 151: uint16(57681), + 152: uint16(57682), + 153: uint16(57683), + 154: uint16(57684), + 155: uint16(57685), + 156: uint16(57686), + 157: uint16(57687), + 158: uint16(57688), + 159: uint16(57689), + 160: uint16(57690), + 161: uint16(57691), + 162: uint16(57692), + 163: uint16(57693), + 164: uint16(57694), + 165: uint16(57695), + 166: uint16(57696), + 167: uint16(57697), + 168: uint16(57698), + 169: uint16(57699), + 170: uint16(57700), + 171: uint16(57701), + 172: uint16(57702), + 173: uint16(57703), + 174: uint16(57704), + 175: uint16(57705), + 176: uint16(57706), + 177: uint16(57707), + 178: uint16(57708), + 179: uint16(57709), + 180: uint16(57710), + 181: uint16(57711), + 182: uint16(57712), + 183: uint16(57713), + 184: uint16(57714), + 185: uint16(57715), + 186: uint16(57716), + 187: uint16(57717), + 188: uint16(57718), + 189: uint16(57719), + }, + 45: { + 0: uint16(29939), + 1: uint16(29941), + 2: uint16(29944), + 3: uint16(29945), + 4: uint16(29946), + 5: uint16(29947), + 6: uint16(29948), + 7: uint16(29949), + 8: uint16(29950), + 9: uint16(29952), + 10: uint16(29953), + 11: uint16(29954), + 12: uint16(29955), + 13: uint16(29957), + 14: uint16(29958), + 15: uint16(29959), + 16: uint16(29960), + 17: uint16(29961), + 18: uint16(29962), + 19: uint16(29963), + 20: uint16(29964), + 21: uint16(29966), + 22: uint16(29968), + 23: uint16(29970), + 24: uint16(29972), + 25: uint16(29973), + 26: uint16(29974), + 27: uint16(29975), + 28: uint16(29979), + 29: uint16(29981), + 30: uint16(29982), + 31: uint16(29984), + 32: uint16(29985), + 33: uint16(29986), + 34: uint16(29987), + 35: uint16(29988), + 36: uint16(29990), + 37: uint16(29991), + 38: uint16(29994), + 39: uint16(29998), + 40: uint16(30004), + 41: uint16(30006), + 42: uint16(30009), + 43: uint16(30012), + 44: uint16(30013), + 45: uint16(30015), + 46: uint16(30017), + 47: uint16(30018), + 48: uint16(30019), + 49: uint16(30020), + 50: uint16(30022), + 51: uint16(30023), + 52: uint16(30025), + 53: uint16(30026), + 54: uint16(30029), + 55: uint16(30032), + 56: uint16(30033), + 57: uint16(30034), + 58: uint16(30035), + 59: uint16(30037), + 60: uint16(30038), + 61: uint16(30039), + 62: uint16(30040), + 63: uint16(30045), + 64: uint16(30046), + 65: uint16(30047), + 66: uint16(30048), + 67: uint16(30049), + 68: uint16(30050), + 69: uint16(30051), + 70: uint16(30052), + 71: uint16(30055), + 72: uint16(30056), + 73: uint16(30057), + 74: uint16(30059), + 75: uint16(30060), + 76: uint16(30061), + 77: uint16(30062), + 78: uint16(30063), + 79: uint16(30064), + 80: uint16(30065), + 81: uint16(30067), + 82: uint16(30069), + 83: uint16(30070), + 84: uint16(30071), + 85: uint16(30074), + 86: uint16(30075), + 87: uint16(30076), + 88: uint16(30077), + 89: uint16(30078), + 90: uint16(30080), + 91: uint16(30081), + 92: uint16(30082), + 93: uint16(30084), + 94: uint16(30085), + 95: uint16(30087), + 96: uint16(57720), + 97: uint16(57721), + 98: uint16(57722), + 99: uint16(57723), + 100: uint16(57724), + 101: uint16(57725), + 102: uint16(57726), + 103: uint16(57727), + 104: uint16(57728), + 105: uint16(57729), + 106: uint16(57730), + 107: uint16(57731), + 108: uint16(57732), + 109: uint16(57733), + 110: uint16(57734), + 111: uint16(57735), + 112: uint16(57736), + 113: uint16(57737), + 114: uint16(57738), + 115: uint16(57739), + 116: uint16(57740), + 117: uint16(57741), + 118: uint16(57742), + 119: uint16(57743), + 120: uint16(57744), + 121: uint16(57745), + 122: uint16(57746), + 123: uint16(57747), + 124: uint16(57748), + 125: uint16(57749), + 126: uint16(57750), + 127: uint16(57751), + 128: uint16(57752), + 129: uint16(57753), + 130: uint16(57754), + 131: uint16(57755), + 132: uint16(57756), + 133: uint16(57757), + 134: uint16(57758), + 135: uint16(57759), + 136: uint16(57760), + 137: uint16(57761), + 138: uint16(57762), + 139: uint16(57763), + 140: uint16(57764), + 141: uint16(57765), + 142: uint16(57766), + 143: uint16(57767), + 144: uint16(57768), + 145: uint16(57769), + 146: uint16(57770), + 147: uint16(57771), + 148: uint16(57772), + 149: uint16(57773), + 150: uint16(57774), + 151: uint16(57775), + 152: uint16(57776), + 153: uint16(57777), + 154: uint16(57778), + 155: uint16(57779), + 156: uint16(57780), + 157: uint16(57781), + 158: uint16(57782), + 159: uint16(57783), + 160: uint16(57784), + 161: uint16(57785), + 162: uint16(57786), + 163: uint16(57787), + 164: uint16(57788), + 165: uint16(57789), + 166: uint16(57790), + 167: uint16(57791), + 168: uint16(57792), + 169: uint16(57793), + 170: uint16(57794), + 171: uint16(57795), + 172: uint16(57796), + 173: uint16(57797), + 174: uint16(57798), + 175: uint16(57799), + 176: uint16(57800), + 177: uint16(57801), + 178: uint16(57802), + 179: uint16(57803), + 180: uint16(57804), + 181: uint16(57805), + 182: uint16(57806), + 183: uint16(57807), + 184: uint16(57808), + 185: uint16(57809), + 186: uint16(57810), + 187: uint16(57811), + 188: uint16(57812), + 189: uint16(57813), + }, + 46: { + 0: uint16(30088), + 1: uint16(30089), + 2: uint16(30090), + 3: uint16(30092), + 4: uint16(30093), + 5: uint16(30094), + 6: uint16(30096), + 7: uint16(30099), + 8: uint16(30101), + 9: uint16(30104), + 10: uint16(30107), + 11: uint16(30108), + 12: uint16(30110), + 13: uint16(30114), + 14: uint16(30118), + 15: uint16(30119), + 16: uint16(30120), + 17: uint16(30121), + 18: uint16(30122), + 19: uint16(30125), + 20: uint16(30134), + 21: uint16(30135), + 22: uint16(30138), + 23: uint16(30139), + 24: uint16(30143), + 25: uint16(30144), + 26: uint16(30145), + 27: uint16(30150), + 28: uint16(30155), + 29: uint16(30156), + 30: uint16(30158), + 31: uint16(30159), + 32: uint16(30160), + 33: uint16(30161), + 34: uint16(30163), + 35: uint16(30167), + 36: uint16(30169), + 37: uint16(30170), + 38: uint16(30172), + 39: uint16(30173), + 40: uint16(30175), + 41: uint16(30176), + 42: uint16(30177), + 43: uint16(30181), + 44: uint16(30185), + 45: uint16(30188), + 46: uint16(30189), + 47: uint16(30190), + 48: uint16(30191), + 49: uint16(30194), + 50: uint16(30195), + 51: uint16(30197), + 52: uint16(30198), + 53: uint16(30199), + 54: uint16(30200), + 55: uint16(30202), + 56: uint16(30203), + 57: uint16(30205), + 58: uint16(30206), + 59: uint16(30210), + 60: uint16(30212), + 61: uint16(30214), + 62: uint16(30215), + 63: uint16(30216), + 64: uint16(30217), + 65: uint16(30219), + 66: uint16(30221), + 67: uint16(30222), + 68: uint16(30223), + 69: uint16(30225), + 70: uint16(30226), + 71: uint16(30227), + 72: uint16(30228), + 73: uint16(30230), + 74: uint16(30234), + 75: uint16(30236), + 76: uint16(30237), + 77: uint16(30238), + 78: uint16(30241), + 79: uint16(30243), + 80: uint16(30247), + 81: uint16(30248), + 82: uint16(30252), + 83: uint16(30254), + 84: uint16(30255), + 85: uint16(30257), + 86: uint16(30258), + 87: uint16(30262), + 88: uint16(30263), + 89: uint16(30265), + 90: uint16(30266), + 91: uint16(30267), + 92: uint16(30269), + 93: uint16(30273), + 94: uint16(30274), + 95: uint16(30276), + 96: uint16(57814), + 97: uint16(57815), + 98: uint16(57816), + 99: uint16(57817), + 100: uint16(57818), + 101: uint16(57819), + 102: uint16(57820), + 103: uint16(57821), + 104: uint16(57822), + 105: uint16(57823), + 106: uint16(57824), + 107: uint16(57825), + 108: uint16(57826), + 109: uint16(57827), + 110: uint16(57828), + 111: uint16(57829), + 112: uint16(57830), + 113: uint16(57831), + 114: uint16(57832), + 115: uint16(57833), + 116: uint16(57834), + 117: uint16(57835), + 118: uint16(57836), + 119: uint16(57837), + 120: uint16(57838), + 121: uint16(57839), + 122: uint16(57840), + 123: uint16(57841), + 124: uint16(57842), + 125: uint16(57843), + 126: uint16(57844), + 127: uint16(57845), + 128: uint16(57846), + 129: uint16(57847), + 130: uint16(57848), + 131: uint16(57849), + 132: uint16(57850), + 133: uint16(57851), + 134: uint16(57852), + 135: uint16(57853), + 136: uint16(57854), + 137: uint16(57855), + 138: uint16(57856), + 139: uint16(57857), + 140: uint16(57858), + 141: uint16(57859), + 142: uint16(57860), + 143: uint16(57861), + 144: uint16(57862), + 145: uint16(57863), + 146: uint16(57864), + 147: uint16(57865), + 148: uint16(57866), + 149: uint16(57867), + 150: uint16(57868), + 151: uint16(57869), + 152: uint16(57870), + 153: uint16(57871), + 154: uint16(57872), + 155: uint16(57873), + 156: uint16(57874), + 157: uint16(57875), + 158: uint16(57876), + 159: uint16(57877), + 160: uint16(57878), + 161: uint16(57879), + 162: uint16(57880), + 163: uint16(57881), + 164: uint16(57882), + 165: uint16(57883), + 166: uint16(57884), + 167: uint16(57885), + 168: uint16(57886), + 169: uint16(57887), + 170: uint16(57888), + 171: uint16(57889), + 172: uint16(57890), + 173: uint16(57891), + 174: uint16(57892), + 175: uint16(57893), + 176: uint16(57894), + 177: uint16(57895), + 178: uint16(57896), + 179: uint16(57897), + 180: uint16(57898), + 181: uint16(57899), + 182: uint16(57900), + 183: uint16(57901), + 184: uint16(57902), + 185: uint16(57903), + 186: uint16(57904), + 187: uint16(57905), + 188: uint16(57906), + 189: uint16(57907), + }, + 47: { + 0: uint16(30277), + 1: uint16(30278), + 2: uint16(30279), + 3: uint16(30280), + 4: uint16(30281), + 5: uint16(30282), + 6: uint16(30283), + 7: uint16(30286), + 8: uint16(30287), + 9: uint16(30288), + 10: uint16(30289), + 11: uint16(30290), + 12: uint16(30291), + 13: uint16(30293), + 14: uint16(30295), + 15: uint16(30296), + 16: uint16(30297), + 17: uint16(30298), + 18: uint16(30299), + 19: uint16(30301), + 20: uint16(30303), + 21: uint16(30304), + 22: uint16(30305), + 23: uint16(30306), + 24: uint16(30308), + 25: uint16(30309), + 26: uint16(30310), + 27: uint16(30311), + 28: uint16(30312), + 29: uint16(30313), + 30: uint16(30314), + 31: uint16(30316), + 32: uint16(30317), + 33: uint16(30318), + 34: uint16(30320), + 35: uint16(30321), + 36: uint16(30322), + 37: uint16(30323), + 38: uint16(30324), + 39: uint16(30325), + 40: uint16(30326), + 41: uint16(30327), + 42: uint16(30329), + 43: uint16(30330), + 44: uint16(30332), + 45: uint16(30335), + 46: uint16(30336), + 47: uint16(30337), + 48: uint16(30339), + 49: uint16(30341), + 50: uint16(30345), + 51: uint16(30346), + 52: uint16(30348), + 53: uint16(30349), + 54: uint16(30351), + 55: uint16(30352), + 56: uint16(30354), + 57: uint16(30356), + 58: uint16(30357), + 59: uint16(30359), + 60: uint16(30360), + 61: uint16(30362), + 62: uint16(30363), + 63: uint16(30364), + 64: uint16(30365), + 65: uint16(30366), + 66: uint16(30367), + 67: uint16(30368), + 68: uint16(30369), + 69: uint16(30370), + 70: uint16(30371), + 71: uint16(30373), + 72: uint16(30374), + 73: uint16(30375), + 74: uint16(30376), + 75: uint16(30377), + 76: uint16(30378), + 77: uint16(30379), + 78: uint16(30380), + 79: uint16(30381), + 80: uint16(30383), + 81: uint16(30384), + 82: uint16(30387), + 83: uint16(30389), + 84: uint16(30390), + 85: uint16(30391), + 86: uint16(30392), + 87: uint16(30393), + 88: uint16(30394), + 89: uint16(30395), + 90: uint16(30396), + 91: uint16(30397), + 92: uint16(30398), + 93: uint16(30400), + 94: uint16(30401), + 95: uint16(30403), + 96: uint16(21834), + 97: uint16(38463), + 98: uint16(22467), + 99: uint16(25384), + 100: uint16(21710), + 101: uint16(21769), + 102: uint16(21696), + 103: uint16(30353), + 104: uint16(30284), + 105: uint16(34108), + 106: uint16(30702), + 107: uint16(33406), + 108: uint16(30861), + 109: uint16(29233), + 110: uint16(38552), + 111: uint16(38797), + 112: uint16(27688), + 113: uint16(23433), + 114: uint16(20474), + 115: uint16(25353), + 116: uint16(26263), + 117: uint16(23736), + 118: uint16(33018), + 119: uint16(26696), + 120: uint16(32942), + 121: uint16(26114), + 122: uint16(30414), + 123: uint16(20985), + 124: uint16(25942), + 125: uint16(29100), + 126: uint16(32753), + 127: uint16(34948), + 128: uint16(20658), + 129: uint16(22885), + 130: uint16(25034), + 131: uint16(28595), + 132: uint16(33453), + 133: uint16(25420), + 134: uint16(25170), + 135: uint16(21485), + 136: uint16(21543), + 137: uint16(31494), + 138: uint16(20843), + 139: uint16(30116), + 140: uint16(24052), + 141: uint16(25300), + 142: uint16(36299), + 143: uint16(38774), + 144: uint16(25226), + 145: uint16(32793), + 146: uint16(22365), + 147: uint16(38712), + 148: uint16(32610), + 149: uint16(29240), + 150: uint16(30333), + 151: uint16(26575), + 152: uint16(30334), + 153: uint16(25670), + 154: uint16(20336), + 155: uint16(36133), + 156: uint16(25308), + 157: uint16(31255), + 158: uint16(26001), + 159: uint16(29677), + 160: uint16(25644), + 161: uint16(25203), + 162: uint16(33324), + 163: uint16(39041), + 164: uint16(26495), + 165: uint16(29256), + 166: uint16(25198), + 167: uint16(25292), + 168: uint16(20276), + 169: uint16(29923), + 170: uint16(21322), + 171: uint16(21150), + 172: uint16(32458), + 173: uint16(37030), + 174: uint16(24110), + 175: uint16(26758), + 176: uint16(27036), + 177: uint16(33152), + 178: uint16(32465), + 179: uint16(26834), + 180: uint16(30917), + 181: uint16(34444), + 182: uint16(38225), + 183: uint16(20621), + 184: uint16(35876), + 185: uint16(33502), + 186: uint16(32990), + 187: uint16(21253), + 188: uint16(35090), + 189: uint16(21093), + }, + 48: { + 0: uint16(30404), + 1: uint16(30407), + 2: uint16(30409), + 3: uint16(30411), + 4: uint16(30412), + 5: uint16(30419), + 6: uint16(30421), + 7: uint16(30425), + 8: uint16(30426), + 9: uint16(30428), + 10: uint16(30429), + 11: uint16(30430), + 12: uint16(30432), + 13: uint16(30433), + 14: uint16(30434), + 15: uint16(30435), + 16: uint16(30436), + 17: uint16(30438), + 18: uint16(30439), + 19: uint16(30440), + 20: uint16(30441), + 21: uint16(30442), + 22: uint16(30443), + 23: uint16(30444), + 24: uint16(30445), + 25: uint16(30448), + 26: uint16(30451), + 27: uint16(30453), + 28: uint16(30454), + 29: uint16(30455), + 30: uint16(30458), + 31: uint16(30459), + 32: uint16(30461), + 33: uint16(30463), + 34: uint16(30464), + 35: uint16(30466), + 36: uint16(30467), + 37: uint16(30469), + 38: uint16(30470), + 39: uint16(30474), + 40: uint16(30476), + 41: uint16(30478), + 42: uint16(30479), + 43: uint16(30480), + 44: uint16(30481), + 45: uint16(30482), + 46: uint16(30483), + 47: uint16(30484), + 48: uint16(30485), + 49: uint16(30486), + 50: uint16(30487), + 51: uint16(30488), + 52: uint16(30491), + 53: uint16(30492), + 54: uint16(30493), + 55: uint16(30494), + 56: uint16(30497), + 57: uint16(30499), + 58: uint16(30500), + 59: uint16(30501), + 60: uint16(30503), + 61: uint16(30506), + 62: uint16(30507), + 63: uint16(30508), + 64: uint16(30510), + 65: uint16(30512), + 66: uint16(30513), + 67: uint16(30514), + 68: uint16(30515), + 69: uint16(30516), + 70: uint16(30521), + 71: uint16(30523), + 72: uint16(30525), + 73: uint16(30526), + 74: uint16(30527), + 75: uint16(30530), + 76: uint16(30532), + 77: uint16(30533), + 78: uint16(30534), + 79: uint16(30536), + 80: uint16(30537), + 81: uint16(30538), + 82: uint16(30539), + 83: uint16(30540), + 84: uint16(30541), + 85: uint16(30542), + 86: uint16(30543), + 87: uint16(30546), + 88: uint16(30547), + 89: uint16(30548), + 90: uint16(30549), + 91: uint16(30550), + 92: uint16(30551), + 93: uint16(30552), + 94: uint16(30553), + 95: uint16(30556), + 96: uint16(34180), + 97: uint16(38649), + 98: uint16(20445), + 99: uint16(22561), + 100: uint16(39281), + 101: uint16(23453), + 102: uint16(25265), + 103: uint16(25253), + 104: uint16(26292), + 105: uint16(35961), + 106: uint16(40077), + 107: uint16(29190), + 108: uint16(26479), + 109: uint16(30865), + 110: uint16(24754), + 111: uint16(21329), + 112: uint16(21271), + 113: uint16(36744), + 114: uint16(32972), + 115: uint16(36125), + 116: uint16(38049), + 117: uint16(20493), + 118: uint16(29384), + 119: uint16(22791), + 120: uint16(24811), + 121: uint16(28953), + 122: uint16(34987), + 123: uint16(22868), + 124: uint16(33519), + 125: uint16(26412), + 126: uint16(31528), + 127: uint16(23849), + 128: uint16(32503), + 129: uint16(29997), + 130: uint16(27893), + 131: uint16(36454), + 132: uint16(36856), + 133: uint16(36924), + 134: uint16(40763), + 135: uint16(27604), + 136: uint16(37145), + 137: uint16(31508), + 138: uint16(24444), + 139: uint16(30887), + 140: uint16(34006), + 141: uint16(34109), + 142: uint16(27605), + 143: uint16(27609), + 144: uint16(27606), + 145: uint16(24065), + 146: uint16(24199), + 147: uint16(30201), + 148: uint16(38381), + 149: uint16(25949), + 150: uint16(24330), + 151: uint16(24517), + 152: uint16(36767), + 153: uint16(22721), + 154: uint16(33218), + 155: uint16(36991), + 156: uint16(38491), + 157: uint16(38829), + 158: uint16(36793), + 159: uint16(32534), + 160: uint16(36140), + 161: uint16(25153), + 162: uint16(20415), + 163: uint16(21464), + 164: uint16(21342), + 165: uint16(36776), + 166: uint16(36777), + 167: uint16(36779), + 168: uint16(36941), + 169: uint16(26631), + 170: uint16(24426), + 171: uint16(33176), + 172: uint16(34920), + 173: uint16(40150), + 174: uint16(24971), + 175: uint16(21035), + 176: uint16(30250), + 177: uint16(24428), + 178: uint16(25996), + 179: uint16(28626), + 180: uint16(28392), + 181: uint16(23486), + 182: uint16(25672), + 183: uint16(20853), + 184: uint16(20912), + 185: uint16(26564), + 186: uint16(19993), + 187: uint16(31177), + 188: uint16(39292), + 189: uint16(28851), + }, + 49: { + 0: uint16(30557), + 1: uint16(30558), + 2: uint16(30559), + 3: uint16(30560), + 4: uint16(30564), + 5: uint16(30567), + 6: uint16(30569), + 7: uint16(30570), + 8: uint16(30573), + 9: uint16(30574), + 10: uint16(30575), + 11: uint16(30576), + 12: uint16(30577), + 13: uint16(30578), + 14: uint16(30579), + 15: uint16(30580), + 16: uint16(30581), + 17: uint16(30582), + 18: uint16(30583), + 19: uint16(30584), + 20: uint16(30586), + 21: uint16(30587), + 22: uint16(30588), + 23: uint16(30593), + 24: uint16(30594), + 25: uint16(30595), + 26: uint16(30598), + 27: uint16(30599), + 28: uint16(30600), + 29: uint16(30601), + 30: uint16(30602), + 31: uint16(30603), + 32: uint16(30607), + 33: uint16(30608), + 34: uint16(30611), + 35: uint16(30612), + 36: uint16(30613), + 37: uint16(30614), + 38: uint16(30615), + 39: uint16(30616), + 40: uint16(30617), + 41: uint16(30618), + 42: uint16(30619), + 43: uint16(30620), + 44: uint16(30621), + 45: uint16(30622), + 46: uint16(30625), + 47: uint16(30627), + 48: uint16(30628), + 49: uint16(30630), + 50: uint16(30632), + 51: uint16(30635), + 52: uint16(30637), + 53: uint16(30638), + 54: uint16(30639), + 55: uint16(30641), + 56: uint16(30642), + 57: uint16(30644), + 58: uint16(30646), + 59: uint16(30647), + 60: uint16(30648), + 61: uint16(30649), + 62: uint16(30650), + 63: uint16(30652), + 64: uint16(30654), + 65: uint16(30656), + 66: uint16(30657), + 67: uint16(30658), + 68: uint16(30659), + 69: uint16(30660), + 70: uint16(30661), + 71: uint16(30662), + 72: uint16(30663), + 73: uint16(30664), + 74: uint16(30665), + 75: uint16(30666), + 76: uint16(30667), + 77: uint16(30668), + 78: uint16(30670), + 79: uint16(30671), + 80: uint16(30672), + 81: uint16(30673), + 82: uint16(30674), + 83: uint16(30675), + 84: uint16(30676), + 85: uint16(30677), + 86: uint16(30678), + 87: uint16(30680), + 88: uint16(30681), + 89: uint16(30682), + 90: uint16(30685), + 91: uint16(30686), + 92: uint16(30687), + 93: uint16(30688), + 94: uint16(30689), + 95: uint16(30692), + 96: uint16(30149), + 97: uint16(24182), + 98: uint16(29627), + 99: uint16(33760), + 100: uint16(25773), + 101: uint16(25320), + 102: uint16(38069), + 103: uint16(27874), + 104: uint16(21338), + 105: uint16(21187), + 106: uint16(25615), + 107: uint16(38082), + 108: uint16(31636), + 109: uint16(20271), + 110: uint16(24091), + 111: uint16(33334), + 112: uint16(33046), + 113: uint16(33162), + 114: uint16(28196), + 115: uint16(27850), + 116: uint16(39539), + 117: uint16(25429), + 118: uint16(21340), + 119: uint16(21754), + 120: uint16(34917), + 121: uint16(22496), + 122: uint16(19981), + 123: uint16(24067), + 124: uint16(27493), + 125: uint16(31807), + 126: uint16(37096), + 127: uint16(24598), + 128: uint16(25830), + 129: uint16(29468), + 130: uint16(35009), + 131: uint16(26448), + 132: uint16(25165), + 133: uint16(36130), + 134: uint16(30572), + 135: uint16(36393), + 136: uint16(37319), + 137: uint16(24425), + 138: uint16(33756), + 139: uint16(34081), + 140: uint16(39184), + 141: uint16(21442), + 142: uint16(34453), + 143: uint16(27531), + 144: uint16(24813), + 145: uint16(24808), + 146: uint16(28799), + 147: uint16(33485), + 148: uint16(33329), + 149: uint16(20179), + 150: uint16(27815), + 151: uint16(34255), + 152: uint16(25805), + 153: uint16(31961), + 154: uint16(27133), + 155: uint16(26361), + 156: uint16(33609), + 157: uint16(21397), + 158: uint16(31574), + 159: uint16(20391), + 160: uint16(20876), + 161: uint16(27979), + 162: uint16(23618), + 163: uint16(36461), + 164: uint16(25554), + 165: uint16(21449), + 166: uint16(33580), + 167: uint16(33590), + 168: uint16(26597), + 169: uint16(30900), + 170: uint16(25661), + 171: uint16(23519), + 172: uint16(23700), + 173: uint16(24046), + 174: uint16(35815), + 175: uint16(25286), + 176: uint16(26612), + 177: uint16(35962), + 178: uint16(25600), + 179: uint16(25530), + 180: uint16(34633), + 181: uint16(39307), + 182: uint16(35863), + 183: uint16(32544), + 184: uint16(38130), + 185: uint16(20135), + 186: uint16(38416), + 187: uint16(39076), + 188: uint16(26124), + 189: uint16(29462), + }, + 50: { + 0: uint16(30694), + 1: uint16(30696), + 2: uint16(30698), + 3: uint16(30703), + 4: uint16(30704), + 5: uint16(30705), + 6: uint16(30706), + 7: uint16(30708), + 8: uint16(30709), + 9: uint16(30711), + 10: uint16(30713), + 11: uint16(30714), + 12: uint16(30715), + 13: uint16(30716), + 14: uint16(30723), + 15: uint16(30724), + 16: uint16(30725), + 17: uint16(30726), + 18: uint16(30727), + 19: uint16(30728), + 20: uint16(30730), + 21: uint16(30731), + 22: uint16(30734), + 23: uint16(30735), + 24: uint16(30736), + 25: uint16(30739), + 26: uint16(30741), + 27: uint16(30745), + 28: uint16(30747), + 29: uint16(30750), + 30: uint16(30752), + 31: uint16(30753), + 32: uint16(30754), + 33: uint16(30756), + 34: uint16(30760), + 35: uint16(30762), + 36: uint16(30763), + 37: uint16(30766), + 38: uint16(30767), + 39: uint16(30769), + 40: uint16(30770), + 41: uint16(30771), + 42: uint16(30773), + 43: uint16(30774), + 44: uint16(30781), + 45: uint16(30783), + 46: uint16(30785), + 47: uint16(30786), + 48: uint16(30787), + 49: uint16(30788), + 50: uint16(30790), + 51: uint16(30792), + 52: uint16(30793), + 53: uint16(30794), + 54: uint16(30795), + 55: uint16(30797), + 56: uint16(30799), + 57: uint16(30801), + 58: uint16(30803), + 59: uint16(30804), + 60: uint16(30808), + 61: uint16(30809), + 62: uint16(30810), + 63: uint16(30811), + 64: uint16(30812), + 65: uint16(30814), + 66: uint16(30815), + 67: uint16(30816), + 68: uint16(30817), + 69: uint16(30818), + 70: uint16(30819), + 71: uint16(30820), + 72: uint16(30821), + 73: uint16(30822), + 74: uint16(30823), + 75: uint16(30824), + 76: uint16(30825), + 77: uint16(30831), + 78: uint16(30832), + 79: uint16(30833), + 80: uint16(30834), + 81: uint16(30835), + 82: uint16(30836), + 83: uint16(30837), + 84: uint16(30838), + 85: uint16(30840), + 86: uint16(30841), + 87: uint16(30842), + 88: uint16(30843), + 89: uint16(30845), + 90: uint16(30846), + 91: uint16(30847), + 92: uint16(30848), + 93: uint16(30849), + 94: uint16(30850), + 95: uint16(30851), + 96: uint16(22330), + 97: uint16(23581), + 98: uint16(24120), + 99: uint16(38271), + 100: uint16(20607), + 101: uint16(32928), + 102: uint16(21378), + 103: uint16(25950), + 104: uint16(30021), + 105: uint16(21809), + 106: uint16(20513), + 107: uint16(36229), + 108: uint16(25220), + 109: uint16(38046), + 110: uint16(26397), + 111: uint16(22066), + 112: uint16(28526), + 113: uint16(24034), + 114: uint16(21557), + 115: uint16(28818), + 116: uint16(36710), + 117: uint16(25199), + 118: uint16(25764), + 119: uint16(25507), + 120: uint16(24443), + 121: uint16(28552), + 122: uint16(37108), + 123: uint16(33251), + 124: uint16(36784), + 125: uint16(23576), + 126: uint16(26216), + 127: uint16(24561), + 128: uint16(27785), + 129: uint16(38472), + 130: uint16(36225), + 131: uint16(34924), + 132: uint16(25745), + 133: uint16(31216), + 134: uint16(22478), + 135: uint16(27225), + 136: uint16(25104), + 137: uint16(21576), + 138: uint16(20056), + 139: uint16(31243), + 140: uint16(24809), + 141: uint16(28548), + 142: uint16(35802), + 143: uint16(25215), + 144: uint16(36894), + 145: uint16(39563), + 146: uint16(31204), + 147: uint16(21507), + 148: uint16(30196), + 149: uint16(25345), + 150: uint16(21273), + 151: uint16(27744), + 152: uint16(36831), + 153: uint16(24347), + 154: uint16(39536), + 155: uint16(32827), + 156: uint16(40831), + 157: uint16(20360), + 158: uint16(23610), + 159: uint16(36196), + 160: uint16(32709), + 161: uint16(26021), + 162: uint16(28861), + 163: uint16(20805), + 164: uint16(20914), + 165: uint16(34411), + 166: uint16(23815), + 167: uint16(23456), + 168: uint16(25277), + 169: uint16(37228), + 170: uint16(30068), + 171: uint16(36364), + 172: uint16(31264), + 173: uint16(24833), + 174: uint16(31609), + 175: uint16(20167), + 176: uint16(32504), + 177: uint16(30597), + 178: uint16(19985), + 179: uint16(33261), + 180: uint16(21021), + 181: uint16(20986), + 182: uint16(27249), + 183: uint16(21416), + 184: uint16(36487), + 185: uint16(38148), + 186: uint16(38607), + 187: uint16(28353), + 188: uint16(38500), + 189: uint16(26970), + }, + 51: { + 0: uint16(30852), + 1: uint16(30853), + 2: uint16(30854), + 3: uint16(30856), + 4: uint16(30858), + 5: uint16(30859), + 6: uint16(30863), + 7: uint16(30864), + 8: uint16(30866), + 9: uint16(30868), + 10: uint16(30869), + 11: uint16(30870), + 12: uint16(30873), + 13: uint16(30877), + 14: uint16(30878), + 15: uint16(30880), + 16: uint16(30882), + 17: uint16(30884), + 18: uint16(30886), + 19: uint16(30888), + 20: uint16(30889), + 21: uint16(30890), + 22: uint16(30891), + 23: uint16(30892), + 24: uint16(30893), + 25: uint16(30894), + 26: uint16(30895), + 27: uint16(30901), + 28: uint16(30902), + 29: uint16(30903), + 30: uint16(30904), + 31: uint16(30906), + 32: uint16(30907), + 33: uint16(30908), + 34: uint16(30909), + 35: uint16(30911), + 36: uint16(30912), + 37: uint16(30914), + 38: uint16(30915), + 39: uint16(30916), + 40: uint16(30918), + 41: uint16(30919), + 42: uint16(30920), + 43: uint16(30924), + 44: uint16(30925), + 45: uint16(30926), + 46: uint16(30927), + 47: uint16(30929), + 48: uint16(30930), + 49: uint16(30931), + 50: uint16(30934), + 51: uint16(30935), + 52: uint16(30936), + 53: uint16(30938), + 54: uint16(30939), + 55: uint16(30940), + 56: uint16(30941), + 57: uint16(30942), + 58: uint16(30943), + 59: uint16(30944), + 60: uint16(30945), + 61: uint16(30946), + 62: uint16(30947), + 63: uint16(30948), + 64: uint16(30949), + 65: uint16(30950), + 66: uint16(30951), + 67: uint16(30953), + 68: uint16(30954), + 69: uint16(30955), + 70: uint16(30957), + 71: uint16(30958), + 72: uint16(30959), + 73: uint16(30960), + 74: uint16(30961), + 75: uint16(30963), + 76: uint16(30965), + 77: uint16(30966), + 78: uint16(30968), + 79: uint16(30969), + 80: uint16(30971), + 81: uint16(30972), + 82: uint16(30973), + 83: uint16(30974), + 84: uint16(30975), + 85: uint16(30976), + 86: uint16(30978), + 87: uint16(30979), + 88: uint16(30980), + 89: uint16(30982), + 90: uint16(30983), + 91: uint16(30984), + 92: uint16(30985), + 93: uint16(30986), + 94: uint16(30987), + 95: uint16(30988), + 96: uint16(30784), + 97: uint16(20648), + 98: uint16(30679), + 99: uint16(25616), + 100: uint16(35302), + 101: uint16(22788), + 102: uint16(25571), + 103: uint16(24029), + 104: uint16(31359), + 105: uint16(26941), + 106: uint16(20256), + 107: uint16(33337), + 108: uint16(21912), + 109: uint16(20018), + 110: uint16(30126), + 111: uint16(31383), + 112: uint16(24162), + 113: uint16(24202), + 114: uint16(38383), + 115: uint16(21019), + 116: uint16(21561), + 117: uint16(28810), + 118: uint16(25462), + 119: uint16(38180), + 120: uint16(22402), + 121: uint16(26149), + 122: uint16(26943), + 123: uint16(37255), + 124: uint16(21767), + 125: uint16(28147), + 126: uint16(32431), + 127: uint16(34850), + 128: uint16(25139), + 129: uint16(32496), + 130: uint16(30133), + 131: uint16(33576), + 132: uint16(30913), + 133: uint16(38604), + 134: uint16(36766), + 135: uint16(24904), + 136: uint16(29943), + 137: uint16(35789), + 138: uint16(27492), + 139: uint16(21050), + 140: uint16(36176), + 141: uint16(27425), + 142: uint16(32874), + 143: uint16(33905), + 144: uint16(22257), + 145: uint16(21254), + 146: uint16(20174), + 147: uint16(19995), + 148: uint16(20945), + 149: uint16(31895), + 150: uint16(37259), + 151: uint16(31751), + 152: uint16(20419), + 153: uint16(36479), + 154: uint16(31713), + 155: uint16(31388), + 156: uint16(25703), + 157: uint16(23828), + 158: uint16(20652), + 159: uint16(33030), + 160: uint16(30209), + 161: uint16(31929), + 162: uint16(28140), + 163: uint16(32736), + 164: uint16(26449), + 165: uint16(23384), + 166: uint16(23544), + 167: uint16(30923), + 168: uint16(25774), + 169: uint16(25619), + 170: uint16(25514), + 171: uint16(25387), + 172: uint16(38169), + 173: uint16(25645), + 174: uint16(36798), + 175: uint16(31572), + 176: uint16(30249), + 177: uint16(25171), + 178: uint16(22823), + 179: uint16(21574), + 180: uint16(27513), + 181: uint16(20643), + 182: uint16(25140), + 183: uint16(24102), + 184: uint16(27526), + 185: uint16(20195), + 186: uint16(36151), + 187: uint16(34955), + 188: uint16(24453), + 189: uint16(36910), + }, + 52: { + 0: uint16(30989), + 1: uint16(30990), + 2: uint16(30991), + 3: uint16(30992), + 4: uint16(30993), + 5: uint16(30994), + 6: uint16(30996), + 7: uint16(30997), + 8: uint16(30998), + 9: uint16(30999), + 10: uint16(31000), + 11: uint16(31001), + 12: uint16(31002), + 13: uint16(31003), + 14: uint16(31004), + 15: uint16(31005), + 16: uint16(31007), + 17: uint16(31008), + 18: uint16(31009), + 19: uint16(31010), + 20: uint16(31011), + 21: uint16(31013), + 22: uint16(31014), + 23: uint16(31015), + 24: uint16(31016), + 25: uint16(31017), + 26: uint16(31018), + 27: uint16(31019), + 28: uint16(31020), + 29: uint16(31021), + 30: uint16(31022), + 31: uint16(31023), + 32: uint16(31024), + 33: uint16(31025), + 34: uint16(31026), + 35: uint16(31027), + 36: uint16(31029), + 37: uint16(31030), + 38: uint16(31031), + 39: uint16(31032), + 40: uint16(31033), + 41: uint16(31037), + 42: uint16(31039), + 43: uint16(31042), + 44: uint16(31043), + 45: uint16(31044), + 46: uint16(31045), + 47: uint16(31047), + 48: uint16(31050), + 49: uint16(31051), + 50: uint16(31052), + 51: uint16(31053), + 52: uint16(31054), + 53: uint16(31055), + 54: uint16(31056), + 55: uint16(31057), + 56: uint16(31058), + 57: uint16(31060), + 58: uint16(31061), + 59: uint16(31064), + 60: uint16(31065), + 61: uint16(31073), + 62: uint16(31075), + 63: uint16(31076), + 64: uint16(31078), + 65: uint16(31081), + 66: uint16(31082), + 67: uint16(31083), + 68: uint16(31084), + 69: uint16(31086), + 70: uint16(31088), + 71: uint16(31089), + 72: uint16(31090), + 73: uint16(31091), + 74: uint16(31092), + 75: uint16(31093), + 76: uint16(31094), + 77: uint16(31097), + 78: uint16(31099), + 79: uint16(31100), + 80: uint16(31101), + 81: uint16(31102), + 82: uint16(31103), + 83: uint16(31106), + 84: uint16(31107), + 85: uint16(31110), + 86: uint16(31111), + 87: uint16(31112), + 88: uint16(31113), + 89: uint16(31115), + 90: uint16(31116), + 91: uint16(31117), + 92: uint16(31118), + 93: uint16(31120), + 94: uint16(31121), + 95: uint16(31122), + 96: uint16(24608), + 97: uint16(32829), + 98: uint16(25285), + 99: uint16(20025), + 100: uint16(21333), + 101: uint16(37112), + 102: uint16(25528), + 103: uint16(32966), + 104: uint16(26086), + 105: uint16(27694), + 106: uint16(20294), + 107: uint16(24814), + 108: uint16(28129), + 109: uint16(35806), + 110: uint16(24377), + 111: uint16(34507), + 112: uint16(24403), + 113: uint16(25377), + 114: uint16(20826), + 115: uint16(33633), + 116: uint16(26723), + 117: uint16(20992), + 118: uint16(25443), + 119: uint16(36424), + 120: uint16(20498), + 121: uint16(23707), + 122: uint16(31095), + 123: uint16(23548), + 124: uint16(21040), + 125: uint16(31291), + 126: uint16(24764), + 127: uint16(36947), + 128: uint16(30423), + 129: uint16(24503), + 130: uint16(24471), + 131: uint16(30340), + 132: uint16(36460), + 133: uint16(28783), + 134: uint16(30331), + 135: uint16(31561), + 136: uint16(30634), + 137: uint16(20979), + 138: uint16(37011), + 139: uint16(22564), + 140: uint16(20302), + 141: uint16(28404), + 142: uint16(36842), + 143: uint16(25932), + 144: uint16(31515), + 145: uint16(29380), + 146: uint16(28068), + 147: uint16(32735), + 148: uint16(23265), + 149: uint16(25269), + 150: uint16(24213), + 151: uint16(22320), + 152: uint16(33922), + 153: uint16(31532), + 154: uint16(24093), + 155: uint16(24351), + 156: uint16(36882), + 157: uint16(32532), + 158: uint16(39072), + 159: uint16(25474), + 160: uint16(28359), + 161: uint16(30872), + 162: uint16(28857), + 163: uint16(20856), + 164: uint16(38747), + 165: uint16(22443), + 166: uint16(30005), + 167: uint16(20291), + 168: uint16(30008), + 169: uint16(24215), + 170: uint16(24806), + 171: uint16(22880), + 172: uint16(28096), + 173: uint16(27583), + 174: uint16(30857), + 175: uint16(21500), + 176: uint16(38613), + 177: uint16(20939), + 178: uint16(20993), + 179: uint16(25481), + 180: uint16(21514), + 181: uint16(38035), + 182: uint16(35843), + 183: uint16(36300), + 184: uint16(29241), + 185: uint16(30879), + 186: uint16(34678), + 187: uint16(36845), + 188: uint16(35853), + 189: uint16(21472), + }, + 53: { + 0: uint16(31123), + 1: uint16(31124), + 2: uint16(31125), + 3: uint16(31126), + 4: uint16(31127), + 5: uint16(31128), + 6: uint16(31129), + 7: uint16(31131), + 8: uint16(31132), + 9: uint16(31133), + 10: uint16(31134), + 11: uint16(31135), + 12: uint16(31136), + 13: uint16(31137), + 14: uint16(31138), + 15: uint16(31139), + 16: uint16(31140), + 17: uint16(31141), + 18: uint16(31142), + 19: uint16(31144), + 20: uint16(31145), + 21: uint16(31146), + 22: uint16(31147), + 23: uint16(31148), + 24: uint16(31149), + 25: uint16(31150), + 26: uint16(31151), + 27: uint16(31152), + 28: uint16(31153), + 29: uint16(31154), + 30: uint16(31156), + 31: uint16(31157), + 32: uint16(31158), + 33: uint16(31159), + 34: uint16(31160), + 35: uint16(31164), + 36: uint16(31167), + 37: uint16(31170), + 38: uint16(31172), + 39: uint16(31173), + 40: uint16(31175), + 41: uint16(31176), + 42: uint16(31178), + 43: uint16(31180), + 44: uint16(31182), + 45: uint16(31183), + 46: uint16(31184), + 47: uint16(31187), + 48: uint16(31188), + 49: uint16(31190), + 50: uint16(31191), + 51: uint16(31193), + 52: uint16(31194), + 53: uint16(31195), + 54: uint16(31196), + 55: uint16(31197), + 56: uint16(31198), + 57: uint16(31200), + 58: uint16(31201), + 59: uint16(31202), + 60: uint16(31205), + 61: uint16(31208), + 62: uint16(31210), + 63: uint16(31212), + 64: uint16(31214), + 65: uint16(31217), + 66: uint16(31218), + 67: uint16(31219), + 68: uint16(31220), + 69: uint16(31221), + 70: uint16(31222), + 71: uint16(31223), + 72: uint16(31225), + 73: uint16(31226), + 74: uint16(31228), + 75: uint16(31230), + 76: uint16(31231), + 77: uint16(31233), + 78: uint16(31236), + 79: uint16(31237), + 80: uint16(31239), + 81: uint16(31240), + 82: uint16(31241), + 83: uint16(31242), + 84: uint16(31244), + 85: uint16(31247), + 86: uint16(31248), + 87: uint16(31249), + 88: uint16(31250), + 89: uint16(31251), + 90: uint16(31253), + 91: uint16(31254), + 92: uint16(31256), + 93: uint16(31257), + 94: uint16(31259), + 95: uint16(31260), + 96: uint16(19969), + 97: uint16(30447), + 98: uint16(21486), + 99: uint16(38025), + 100: uint16(39030), + 101: uint16(40718), + 102: uint16(38189), + 103: uint16(23450), + 104: uint16(35746), + 105: uint16(20002), + 106: uint16(19996), + 107: uint16(20908), + 108: uint16(33891), + 109: uint16(25026), + 110: uint16(21160), + 111: uint16(26635), + 112: uint16(20375), + 113: uint16(24683), + 114: uint16(20923), + 115: uint16(27934), + 116: uint16(20828), + 117: uint16(25238), + 118: uint16(26007), + 119: uint16(38497), + 120: uint16(35910), + 121: uint16(36887), + 122: uint16(30168), + 123: uint16(37117), + 124: uint16(30563), + 125: uint16(27602), + 126: uint16(29322), + 127: uint16(29420), + 128: uint16(35835), + 129: uint16(22581), + 130: uint16(30585), + 131: uint16(36172), + 132: uint16(26460), + 133: uint16(38208), + 134: uint16(32922), + 135: uint16(24230), + 136: uint16(28193), + 137: uint16(22930), + 138: uint16(31471), + 139: uint16(30701), + 140: uint16(38203), + 141: uint16(27573), + 142: uint16(26029), + 143: uint16(32526), + 144: uint16(22534), + 145: uint16(20817), + 146: uint16(38431), + 147: uint16(23545), + 148: uint16(22697), + 149: uint16(21544), + 150: uint16(36466), + 151: uint16(25958), + 152: uint16(39039), + 153: uint16(22244), + 154: uint16(38045), + 155: uint16(30462), + 156: uint16(36929), + 157: uint16(25479), + 158: uint16(21702), + 159: uint16(22810), + 160: uint16(22842), + 161: uint16(22427), + 162: uint16(36530), + 163: uint16(26421), + 164: uint16(36346), + 165: uint16(33333), + 166: uint16(21057), + 167: uint16(24816), + 168: uint16(22549), + 169: uint16(34558), + 170: uint16(23784), + 171: uint16(40517), + 172: uint16(20420), + 173: uint16(39069), + 174: uint16(35769), + 175: uint16(23077), + 176: uint16(24694), + 177: uint16(21380), + 178: uint16(25212), + 179: uint16(36943), + 180: uint16(37122), + 181: uint16(39295), + 182: uint16(24681), + 183: uint16(32780), + 184: uint16(20799), + 185: uint16(32819), + 186: uint16(23572), + 187: uint16(39285), + 188: uint16(27953), + 189: uint16(20108), + }, + 54: { + 0: uint16(31261), + 1: uint16(31263), + 2: uint16(31265), + 3: uint16(31266), + 4: uint16(31268), + 5: uint16(31269), + 6: uint16(31270), + 7: uint16(31271), + 8: uint16(31272), + 9: uint16(31273), + 10: uint16(31274), + 11: uint16(31275), + 12: uint16(31276), + 13: uint16(31277), + 14: uint16(31278), + 15: uint16(31279), + 16: uint16(31280), + 17: uint16(31281), + 18: uint16(31282), + 19: uint16(31284), + 20: uint16(31285), + 21: uint16(31286), + 22: uint16(31288), + 23: uint16(31290), + 24: uint16(31294), + 25: uint16(31296), + 26: uint16(31297), + 27: uint16(31298), + 28: uint16(31299), + 29: uint16(31300), + 30: uint16(31301), + 31: uint16(31303), + 32: uint16(31304), + 33: uint16(31305), + 34: uint16(31306), + 35: uint16(31307), + 36: uint16(31308), + 37: uint16(31309), + 38: uint16(31310), + 39: uint16(31311), + 40: uint16(31312), + 41: uint16(31314), + 42: uint16(31315), + 43: uint16(31316), + 44: uint16(31317), + 45: uint16(31318), + 46: uint16(31320), + 47: uint16(31321), + 48: uint16(31322), + 49: uint16(31323), + 50: uint16(31324), + 51: uint16(31325), + 52: uint16(31326), + 53: uint16(31327), + 54: uint16(31328), + 55: uint16(31329), + 56: uint16(31330), + 57: uint16(31331), + 58: uint16(31332), + 59: uint16(31333), + 60: uint16(31334), + 61: uint16(31335), + 62: uint16(31336), + 63: uint16(31337), + 64: uint16(31338), + 65: uint16(31339), + 66: uint16(31340), + 67: uint16(31341), + 68: uint16(31342), + 69: uint16(31343), + 70: uint16(31345), + 71: uint16(31346), + 72: uint16(31347), + 73: uint16(31349), + 74: uint16(31355), + 75: uint16(31356), + 76: uint16(31357), + 77: uint16(31358), + 78: uint16(31362), + 79: uint16(31365), + 80: uint16(31367), + 81: uint16(31369), + 82: uint16(31370), + 83: uint16(31371), + 84: uint16(31372), + 85: uint16(31374), + 86: uint16(31375), + 87: uint16(31376), + 88: uint16(31379), + 89: uint16(31380), + 90: uint16(31385), + 91: uint16(31386), + 92: uint16(31387), + 93: uint16(31390), + 94: uint16(31393), + 95: uint16(31394), + 96: uint16(36144), + 97: uint16(21457), + 98: uint16(32602), + 99: uint16(31567), + 100: uint16(20240), + 101: uint16(20047), + 102: uint16(38400), + 103: uint16(27861), + 104: uint16(29648), + 105: uint16(34281), + 106: uint16(24070), + 107: uint16(30058), + 108: uint16(32763), + 109: uint16(27146), + 110: uint16(30718), + 111: uint16(38034), + 112: uint16(32321), + 113: uint16(20961), + 114: uint16(28902), + 115: uint16(21453), + 116: uint16(36820), + 117: uint16(33539), + 118: uint16(36137), + 119: uint16(29359), + 120: uint16(39277), + 121: uint16(27867), + 122: uint16(22346), + 123: uint16(33459), + 124: uint16(26041), + 125: uint16(32938), + 126: uint16(25151), + 127: uint16(38450), + 128: uint16(22952), + 129: uint16(20223), + 130: uint16(35775), + 131: uint16(32442), + 132: uint16(25918), + 133: uint16(33778), + 134: uint16(38750), + 135: uint16(21857), + 136: uint16(39134), + 137: uint16(32933), + 138: uint16(21290), + 139: uint16(35837), + 140: uint16(21536), + 141: uint16(32954), + 142: uint16(24223), + 143: uint16(27832), + 144: uint16(36153), + 145: uint16(33452), + 146: uint16(37210), + 147: uint16(21545), + 148: uint16(27675), + 149: uint16(20998), + 150: uint16(32439), + 151: uint16(22367), + 152: uint16(28954), + 153: uint16(27774), + 154: uint16(31881), + 155: uint16(22859), + 156: uint16(20221), + 157: uint16(24575), + 158: uint16(24868), + 159: uint16(31914), + 160: uint16(20016), + 161: uint16(23553), + 162: uint16(26539), + 163: uint16(34562), + 164: uint16(23792), + 165: uint16(38155), + 166: uint16(39118), + 167: uint16(30127), + 168: uint16(28925), + 169: uint16(36898), + 170: uint16(20911), + 171: uint16(32541), + 172: uint16(35773), + 173: uint16(22857), + 174: uint16(20964), + 175: uint16(20315), + 176: uint16(21542), + 177: uint16(22827), + 178: uint16(25975), + 179: uint16(32932), + 180: uint16(23413), + 181: uint16(25206), + 182: uint16(25282), + 183: uint16(36752), + 184: uint16(24133), + 185: uint16(27679), + 186: uint16(31526), + 187: uint16(20239), + 188: uint16(20440), + 189: uint16(26381), + }, + 55: { + 0: uint16(31395), + 1: uint16(31396), + 2: uint16(31399), + 3: uint16(31401), + 4: uint16(31402), + 5: uint16(31403), + 6: uint16(31406), + 7: uint16(31407), + 8: uint16(31408), + 9: uint16(31409), + 10: uint16(31410), + 11: uint16(31412), + 12: uint16(31413), + 13: uint16(31414), + 14: uint16(31415), + 15: uint16(31416), + 16: uint16(31417), + 17: uint16(31418), + 18: uint16(31419), + 19: uint16(31420), + 20: uint16(31421), + 21: uint16(31422), + 22: uint16(31424), + 23: uint16(31425), + 24: uint16(31426), + 25: uint16(31427), + 26: uint16(31428), + 27: uint16(31429), + 28: uint16(31430), + 29: uint16(31431), + 30: uint16(31432), + 31: uint16(31433), + 32: uint16(31434), + 33: uint16(31436), + 34: uint16(31437), + 35: uint16(31438), + 36: uint16(31439), + 37: uint16(31440), + 38: uint16(31441), + 39: uint16(31442), + 40: uint16(31443), + 41: uint16(31444), + 42: uint16(31445), + 43: uint16(31447), + 44: uint16(31448), + 45: uint16(31450), + 46: uint16(31451), + 47: uint16(31452), + 48: uint16(31453), + 49: uint16(31457), + 50: uint16(31458), + 51: uint16(31460), + 52: uint16(31463), + 53: uint16(31464), + 54: uint16(31465), + 55: uint16(31466), + 56: uint16(31467), + 57: uint16(31468), + 58: uint16(31470), + 59: uint16(31472), + 60: uint16(31473), + 61: uint16(31474), + 62: uint16(31475), + 63: uint16(31476), + 64: uint16(31477), + 65: uint16(31478), + 66: uint16(31479), + 67: uint16(31480), + 68: uint16(31483), + 69: uint16(31484), + 70: uint16(31486), + 71: uint16(31488), + 72: uint16(31489), + 73: uint16(31490), + 74: uint16(31493), + 75: uint16(31495), + 76: uint16(31497), + 77: uint16(31500), + 78: uint16(31501), + 79: uint16(31502), + 80: uint16(31504), + 81: uint16(31506), + 82: uint16(31507), + 83: uint16(31510), + 84: uint16(31511), + 85: uint16(31512), + 86: uint16(31514), + 87: uint16(31516), + 88: uint16(31517), + 89: uint16(31519), + 90: uint16(31521), + 91: uint16(31522), + 92: uint16(31523), + 93: uint16(31527), + 94: uint16(31529), + 95: uint16(31533), + 96: uint16(28014), + 97: uint16(28074), + 98: uint16(31119), + 99: uint16(34993), + 100: uint16(24343), + 101: uint16(29995), + 102: uint16(25242), + 103: uint16(36741), + 104: uint16(20463), + 105: uint16(37340), + 106: uint16(26023), + 107: uint16(33071), + 108: uint16(33105), + 109: uint16(24220), + 110: uint16(33104), + 111: uint16(36212), + 112: uint16(21103), + 113: uint16(35206), + 114: uint16(36171), + 115: uint16(22797), + 116: uint16(20613), + 117: uint16(20184), + 118: uint16(38428), + 119: uint16(29238), + 120: uint16(33145), + 121: uint16(36127), + 122: uint16(23500), + 123: uint16(35747), + 124: uint16(38468), + 125: uint16(22919), + 126: uint16(32538), + 127: uint16(21648), + 128: uint16(22134), + 129: uint16(22030), + 130: uint16(35813), + 131: uint16(25913), + 132: uint16(27010), + 133: uint16(38041), + 134: uint16(30422), + 135: uint16(28297), + 136: uint16(24178), + 137: uint16(29976), + 138: uint16(26438), + 139: uint16(26577), + 140: uint16(31487), + 141: uint16(32925), + 142: uint16(36214), + 143: uint16(24863), + 144: uint16(31174), + 145: uint16(25954), + 146: uint16(36195), + 147: uint16(20872), + 148: uint16(21018), + 149: uint16(38050), + 150: uint16(32568), + 151: uint16(32923), + 152: uint16(32434), + 153: uint16(23703), + 154: uint16(28207), + 155: uint16(26464), + 156: uint16(31705), + 157: uint16(30347), + 158: uint16(39640), + 159: uint16(33167), + 160: uint16(32660), + 161: uint16(31957), + 162: uint16(25630), + 163: uint16(38224), + 164: uint16(31295), + 165: uint16(21578), + 166: uint16(21733), + 167: uint16(27468), + 168: uint16(25601), + 169: uint16(25096), + 170: uint16(40509), + 171: uint16(33011), + 172: uint16(30105), + 173: uint16(21106), + 174: uint16(38761), + 175: uint16(33883), + 176: uint16(26684), + 177: uint16(34532), + 178: uint16(38401), + 179: uint16(38548), + 180: uint16(38124), + 181: uint16(20010), + 182: uint16(21508), + 183: uint16(32473), + 184: uint16(26681), + 185: uint16(36319), + 186: uint16(32789), + 187: uint16(26356), + 188: uint16(24218), + 189: uint16(32697), + }, + 56: { + 0: uint16(31535), + 1: uint16(31536), + 2: uint16(31538), + 3: uint16(31540), + 4: uint16(31541), + 5: uint16(31542), + 6: uint16(31543), + 7: uint16(31545), + 8: uint16(31547), + 9: uint16(31549), + 10: uint16(31551), + 11: uint16(31552), + 12: uint16(31553), + 13: uint16(31554), + 14: uint16(31555), + 15: uint16(31556), + 16: uint16(31558), + 17: uint16(31560), + 18: uint16(31562), + 19: uint16(31565), + 20: uint16(31566), + 21: uint16(31571), + 22: uint16(31573), + 23: uint16(31575), + 24: uint16(31577), + 25: uint16(31580), + 26: uint16(31582), + 27: uint16(31583), + 28: uint16(31585), + 29: uint16(31587), + 30: uint16(31588), + 31: uint16(31589), + 32: uint16(31590), + 33: uint16(31591), + 34: uint16(31592), + 35: uint16(31593), + 36: uint16(31594), + 37: uint16(31595), + 38: uint16(31596), + 39: uint16(31597), + 40: uint16(31599), + 41: uint16(31600), + 42: uint16(31603), + 43: uint16(31604), + 44: uint16(31606), + 45: uint16(31608), + 46: uint16(31610), + 47: uint16(31612), + 48: uint16(31613), + 49: uint16(31615), + 50: uint16(31617), + 51: uint16(31618), + 52: uint16(31619), + 53: uint16(31620), + 54: uint16(31622), + 55: uint16(31623), + 56: uint16(31624), + 57: uint16(31625), + 58: uint16(31626), + 59: uint16(31627), + 60: uint16(31628), + 61: uint16(31630), + 62: uint16(31631), + 63: uint16(31633), + 64: uint16(31634), + 65: uint16(31635), + 66: uint16(31638), + 67: uint16(31640), + 68: uint16(31641), + 69: uint16(31642), + 70: uint16(31643), + 71: uint16(31646), + 72: uint16(31647), + 73: uint16(31648), + 74: uint16(31651), + 75: uint16(31652), + 76: uint16(31653), + 77: uint16(31662), + 78: uint16(31663), + 79: uint16(31664), + 80: uint16(31666), + 81: uint16(31667), + 82: uint16(31669), + 83: uint16(31670), + 84: uint16(31671), + 85: uint16(31673), + 86: uint16(31674), + 87: uint16(31675), + 88: uint16(31676), + 89: uint16(31677), + 90: uint16(31678), + 91: uint16(31679), + 92: uint16(31680), + 93: uint16(31682), + 94: uint16(31683), + 95: uint16(31684), + 96: uint16(22466), + 97: uint16(32831), + 98: uint16(26775), + 99: uint16(24037), + 100: uint16(25915), + 101: uint16(21151), + 102: uint16(24685), + 103: uint16(40858), + 104: uint16(20379), + 105: uint16(36524), + 106: uint16(20844), + 107: uint16(23467), + 108: uint16(24339), + 109: uint16(24041), + 110: uint16(27742), + 111: uint16(25329), + 112: uint16(36129), + 113: uint16(20849), + 114: uint16(38057), + 115: uint16(21246), + 116: uint16(27807), + 117: uint16(33503), + 118: uint16(29399), + 119: uint16(22434), + 120: uint16(26500), + 121: uint16(36141), + 122: uint16(22815), + 123: uint16(36764), + 124: uint16(33735), + 125: uint16(21653), + 126: uint16(31629), + 127: uint16(20272), + 128: uint16(27837), + 129: uint16(23396), + 130: uint16(22993), + 131: uint16(40723), + 132: uint16(21476), + 133: uint16(34506), + 134: uint16(39592), + 135: uint16(35895), + 136: uint16(32929), + 137: uint16(25925), + 138: uint16(39038), + 139: uint16(22266), + 140: uint16(38599), + 141: uint16(21038), + 142: uint16(29916), + 143: uint16(21072), + 144: uint16(23521), + 145: uint16(25346), + 146: uint16(35074), + 147: uint16(20054), + 148: uint16(25296), + 149: uint16(24618), + 150: uint16(26874), + 151: uint16(20851), + 152: uint16(23448), + 153: uint16(20896), + 154: uint16(35266), + 155: uint16(31649), + 156: uint16(39302), + 157: uint16(32592), + 158: uint16(24815), + 159: uint16(28748), + 160: uint16(36143), + 161: uint16(20809), + 162: uint16(24191), + 163: uint16(36891), + 164: uint16(29808), + 165: uint16(35268), + 166: uint16(22317), + 167: uint16(30789), + 168: uint16(24402), + 169: uint16(40863), + 170: uint16(38394), + 171: uint16(36712), + 172: uint16(39740), + 173: uint16(35809), + 174: uint16(30328), + 175: uint16(26690), + 176: uint16(26588), + 177: uint16(36330), + 178: uint16(36149), + 179: uint16(21053), + 180: uint16(36746), + 181: uint16(28378), + 182: uint16(26829), + 183: uint16(38149), + 184: uint16(37101), + 185: uint16(22269), + 186: uint16(26524), + 187: uint16(35065), + 188: uint16(36807), + 189: uint16(21704), + }, + 57: { + 0: uint16(31685), + 1: uint16(31688), + 2: uint16(31689), + 3: uint16(31690), + 4: uint16(31691), + 5: uint16(31693), + 6: uint16(31694), + 7: uint16(31695), + 8: uint16(31696), + 9: uint16(31698), + 10: uint16(31700), + 11: uint16(31701), + 12: uint16(31702), + 13: uint16(31703), + 14: uint16(31704), + 15: uint16(31707), + 16: uint16(31708), + 17: uint16(31710), + 18: uint16(31711), + 19: uint16(31712), + 20: uint16(31714), + 21: uint16(31715), + 22: uint16(31716), + 23: uint16(31719), + 24: uint16(31720), + 25: uint16(31721), + 26: uint16(31723), + 27: uint16(31724), + 28: uint16(31725), + 29: uint16(31727), + 30: uint16(31728), + 31: uint16(31730), + 32: uint16(31731), + 33: uint16(31732), + 34: uint16(31733), + 35: uint16(31734), + 36: uint16(31736), + 37: uint16(31737), + 38: uint16(31738), + 39: uint16(31739), + 40: uint16(31741), + 41: uint16(31743), + 42: uint16(31744), + 43: uint16(31745), + 44: uint16(31746), + 45: uint16(31747), + 46: uint16(31748), + 47: uint16(31749), + 48: uint16(31750), + 49: uint16(31752), + 50: uint16(31753), + 51: uint16(31754), + 52: uint16(31757), + 53: uint16(31758), + 54: uint16(31760), + 55: uint16(31761), + 56: uint16(31762), + 57: uint16(31763), + 58: uint16(31764), + 59: uint16(31765), + 60: uint16(31767), + 61: uint16(31768), + 62: uint16(31769), + 63: uint16(31770), + 64: uint16(31771), + 65: uint16(31772), + 66: uint16(31773), + 67: uint16(31774), + 68: uint16(31776), + 69: uint16(31777), + 70: uint16(31778), + 71: uint16(31779), + 72: uint16(31780), + 73: uint16(31781), + 74: uint16(31784), + 75: uint16(31785), + 76: uint16(31787), + 77: uint16(31788), + 78: uint16(31789), + 79: uint16(31790), + 80: uint16(31791), + 81: uint16(31792), + 82: uint16(31793), + 83: uint16(31794), + 84: uint16(31795), + 85: uint16(31796), + 86: uint16(31797), + 87: uint16(31798), + 88: uint16(31799), + 89: uint16(31801), + 90: uint16(31802), + 91: uint16(31803), + 92: uint16(31804), + 93: uint16(31805), + 94: uint16(31806), + 95: uint16(31810), + 96: uint16(39608), + 97: uint16(23401), + 98: uint16(28023), + 99: uint16(27686), + 100: uint16(20133), + 101: uint16(23475), + 102: uint16(39559), + 103: uint16(37219), + 104: uint16(25000), + 105: uint16(37039), + 106: uint16(38889), + 107: uint16(21547), + 108: uint16(28085), + 109: uint16(23506), + 110: uint16(20989), + 111: uint16(21898), + 112: uint16(32597), + 113: uint16(32752), + 114: uint16(25788), + 115: uint16(25421), + 116: uint16(26097), + 117: uint16(25022), + 118: uint16(24717), + 119: uint16(28938), + 120: uint16(27735), + 121: uint16(27721), + 122: uint16(22831), + 123: uint16(26477), + 124: uint16(33322), + 125: uint16(22741), + 126: uint16(22158), + 127: uint16(35946), + 128: uint16(27627), + 129: uint16(37085), + 130: uint16(22909), + 131: uint16(32791), + 132: uint16(21495), + 133: uint16(28009), + 134: uint16(21621), + 135: uint16(21917), + 136: uint16(33655), + 137: uint16(33743), + 138: uint16(26680), + 139: uint16(31166), + 140: uint16(21644), + 141: uint16(20309), + 142: uint16(21512), + 143: uint16(30418), + 144: uint16(35977), + 145: uint16(38402), + 146: uint16(27827), + 147: uint16(28088), + 148: uint16(36203), + 149: uint16(35088), + 150: uint16(40548), + 151: uint16(36154), + 152: uint16(22079), + 153: uint16(40657), + 154: uint16(30165), + 155: uint16(24456), + 156: uint16(29408), + 157: uint16(24680), + 158: uint16(21756), + 159: uint16(20136), + 160: uint16(27178), + 161: uint16(34913), + 162: uint16(24658), + 163: uint16(36720), + 164: uint16(21700), + 165: uint16(28888), + 166: uint16(34425), + 167: uint16(40511), + 168: uint16(27946), + 169: uint16(23439), + 170: uint16(24344), + 171: uint16(32418), + 172: uint16(21897), + 173: uint16(20399), + 174: uint16(29492), + 175: uint16(21564), + 176: uint16(21402), + 177: uint16(20505), + 178: uint16(21518), + 179: uint16(21628), + 180: uint16(20046), + 181: uint16(24573), + 182: uint16(29786), + 183: uint16(22774), + 184: uint16(33899), + 185: uint16(32993), + 186: uint16(34676), + 187: uint16(29392), + 188: uint16(31946), + 189: uint16(28246), + }, + 58: { + 0: uint16(31811), + 1: uint16(31812), + 2: uint16(31813), + 3: uint16(31814), + 4: uint16(31815), + 5: uint16(31816), + 6: uint16(31817), + 7: uint16(31818), + 8: uint16(31819), + 9: uint16(31820), + 10: uint16(31822), + 11: uint16(31823), + 12: uint16(31824), + 13: uint16(31825), + 14: uint16(31826), + 15: uint16(31827), + 16: uint16(31828), + 17: uint16(31829), + 18: uint16(31830), + 19: uint16(31831), + 20: uint16(31832), + 21: uint16(31833), + 22: uint16(31834), + 23: uint16(31835), + 24: uint16(31836), + 25: uint16(31837), + 26: uint16(31838), + 27: uint16(31839), + 28: uint16(31840), + 29: uint16(31841), + 30: uint16(31842), + 31: uint16(31843), + 32: uint16(31844), + 33: uint16(31845), + 34: uint16(31846), + 35: uint16(31847), + 36: uint16(31848), + 37: uint16(31849), + 38: uint16(31850), + 39: uint16(31851), + 40: uint16(31852), + 41: uint16(31853), + 42: uint16(31854), + 43: uint16(31855), + 44: uint16(31856), + 45: uint16(31857), + 46: uint16(31858), + 47: uint16(31861), + 48: uint16(31862), + 49: uint16(31863), + 50: uint16(31864), + 51: uint16(31865), + 52: uint16(31866), + 53: uint16(31870), + 54: uint16(31871), + 55: uint16(31872), + 56: uint16(31873), + 57: uint16(31874), + 58: uint16(31875), + 59: uint16(31876), + 60: uint16(31877), + 61: uint16(31878), + 62: uint16(31879), + 63: uint16(31880), + 64: uint16(31882), + 65: uint16(31883), + 66: uint16(31884), + 67: uint16(31885), + 68: uint16(31886), + 69: uint16(31887), + 70: uint16(31888), + 71: uint16(31891), + 72: uint16(31892), + 73: uint16(31894), + 74: uint16(31897), + 75: uint16(31898), + 76: uint16(31899), + 77: uint16(31904), + 78: uint16(31905), + 79: uint16(31907), + 80: uint16(31910), + 81: uint16(31911), + 82: uint16(31912), + 83: uint16(31913), + 84: uint16(31915), + 85: uint16(31916), + 86: uint16(31917), + 87: uint16(31919), + 88: uint16(31920), + 89: uint16(31924), + 90: uint16(31925), + 91: uint16(31926), + 92: uint16(31927), + 93: uint16(31928), + 94: uint16(31930), + 95: uint16(31931), + 96: uint16(24359), + 97: uint16(34382), + 98: uint16(21804), + 99: uint16(25252), + 100: uint16(20114), + 101: uint16(27818), + 102: uint16(25143), + 103: uint16(33457), + 104: uint16(21719), + 105: uint16(21326), + 106: uint16(29502), + 107: uint16(28369), + 108: uint16(30011), + 109: uint16(21010), + 110: uint16(21270), + 111: uint16(35805), + 112: uint16(27088), + 113: uint16(24458), + 114: uint16(24576), + 115: uint16(28142), + 116: uint16(22351), + 117: uint16(27426), + 118: uint16(29615), + 119: uint16(26707), + 120: uint16(36824), + 121: uint16(32531), + 122: uint16(25442), + 123: uint16(24739), + 124: uint16(21796), + 125: uint16(30186), + 126: uint16(35938), + 127: uint16(28949), + 128: uint16(28067), + 129: uint16(23462), + 130: uint16(24187), + 131: uint16(33618), + 132: uint16(24908), + 133: uint16(40644), + 134: uint16(30970), + 135: uint16(34647), + 136: uint16(31783), + 137: uint16(30343), + 138: uint16(20976), + 139: uint16(24822), + 140: uint16(29004), + 141: uint16(26179), + 142: uint16(24140), + 143: uint16(24653), + 144: uint16(35854), + 145: uint16(28784), + 146: uint16(25381), + 147: uint16(36745), + 148: uint16(24509), + 149: uint16(24674), + 150: uint16(34516), + 151: uint16(22238), + 152: uint16(27585), + 153: uint16(24724), + 154: uint16(24935), + 155: uint16(21321), + 156: uint16(24800), + 157: uint16(26214), + 158: uint16(36159), + 159: uint16(31229), + 160: uint16(20250), + 161: uint16(28905), + 162: uint16(27719), + 163: uint16(35763), + 164: uint16(35826), + 165: uint16(32472), + 166: uint16(33636), + 167: uint16(26127), + 168: uint16(23130), + 169: uint16(39746), + 170: uint16(27985), + 171: uint16(28151), + 172: uint16(35905), + 173: uint16(27963), + 174: uint16(20249), + 175: uint16(28779), + 176: uint16(33719), + 177: uint16(25110), + 178: uint16(24785), + 179: uint16(38669), + 180: uint16(36135), + 181: uint16(31096), + 182: uint16(20987), + 183: uint16(22334), + 184: uint16(22522), + 185: uint16(26426), + 186: uint16(30072), + 187: uint16(31293), + 188: uint16(31215), + 189: uint16(31637), + }, + 59: { + 0: uint16(31935), + 1: uint16(31936), + 2: uint16(31938), + 3: uint16(31939), + 4: uint16(31940), + 5: uint16(31942), + 6: uint16(31945), + 7: uint16(31947), + 8: uint16(31950), + 9: uint16(31951), + 10: uint16(31952), + 11: uint16(31953), + 12: uint16(31954), + 13: uint16(31955), + 14: uint16(31956), + 15: uint16(31960), + 16: uint16(31962), + 17: uint16(31963), + 18: uint16(31965), + 19: uint16(31966), + 20: uint16(31969), + 21: uint16(31970), + 22: uint16(31971), + 23: uint16(31972), + 24: uint16(31973), + 25: uint16(31974), + 26: uint16(31975), + 27: uint16(31977), + 28: uint16(31978), + 29: uint16(31979), + 30: uint16(31980), + 31: uint16(31981), + 32: uint16(31982), + 33: uint16(31984), + 34: uint16(31985), + 35: uint16(31986), + 36: uint16(31987), + 37: uint16(31988), + 38: uint16(31989), + 39: uint16(31990), + 40: uint16(31991), + 41: uint16(31993), + 42: uint16(31994), + 43: uint16(31996), + 44: uint16(31997), + 45: uint16(31998), + 46: uint16(31999), + 47: uint16(32000), + 48: uint16(32001), + 49: uint16(32002), + 50: uint16(32003), + 51: uint16(32004), + 52: uint16(32005), + 53: uint16(32006), + 54: uint16(32007), + 55: uint16(32008), + 56: uint16(32009), + 57: uint16(32011), + 58: uint16(32012), + 59: uint16(32013), + 60: uint16(32014), + 61: uint16(32015), + 62: uint16(32016), + 63: uint16(32017), + 64: uint16(32018), + 65: uint16(32019), + 66: uint16(32020), + 67: uint16(32021), + 68: uint16(32022), + 69: uint16(32023), + 70: uint16(32024), + 71: uint16(32025), + 72: uint16(32026), + 73: uint16(32027), + 74: uint16(32028), + 75: uint16(32029), + 76: uint16(32030), + 77: uint16(32031), + 78: uint16(32033), + 79: uint16(32035), + 80: uint16(32036), + 81: uint16(32037), + 82: uint16(32038), + 83: uint16(32040), + 84: uint16(32041), + 85: uint16(32042), + 86: uint16(32044), + 87: uint16(32045), + 88: uint16(32046), + 89: uint16(32048), + 90: uint16(32049), + 91: uint16(32050), + 92: uint16(32051), + 93: uint16(32052), + 94: uint16(32053), + 95: uint16(32054), + 96: uint16(32908), + 97: uint16(39269), + 98: uint16(36857), + 99: uint16(28608), + 100: uint16(35749), + 101: uint16(40481), + 102: uint16(23020), + 103: uint16(32489), + 104: uint16(32521), + 105: uint16(21513), + 106: uint16(26497), + 107: uint16(26840), + 108: uint16(36753), + 109: uint16(31821), + 110: uint16(38598), + 111: uint16(21450), + 112: uint16(24613), + 113: uint16(30142), + 114: uint16(27762), + 115: uint16(21363), + 116: uint16(23241), + 117: uint16(32423), + 118: uint16(25380), + 119: uint16(20960), + 120: uint16(33034), + 121: uint16(24049), + 122: uint16(34015), + 123: uint16(25216), + 124: uint16(20864), + 125: uint16(23395), + 126: uint16(20238), + 127: uint16(31085), + 128: uint16(21058), + 129: uint16(24760), + 130: uint16(27982), + 131: uint16(23492), + 132: uint16(23490), + 133: uint16(35745), + 134: uint16(35760), + 135: uint16(26082), + 136: uint16(24524), + 137: uint16(38469), + 138: uint16(22931), + 139: uint16(32487), + 140: uint16(32426), + 141: uint16(22025), + 142: uint16(26551), + 143: uint16(22841), + 144: uint16(20339), + 145: uint16(23478), + 146: uint16(21152), + 147: uint16(33626), + 148: uint16(39050), + 149: uint16(36158), + 150: uint16(30002), + 151: uint16(38078), + 152: uint16(20551), + 153: uint16(31292), + 154: uint16(20215), + 155: uint16(26550), + 156: uint16(39550), + 157: uint16(23233), + 158: uint16(27516), + 159: uint16(30417), + 160: uint16(22362), + 161: uint16(23574), + 162: uint16(31546), + 163: uint16(38388), + 164: uint16(29006), + 165: uint16(20860), + 166: uint16(32937), + 167: uint16(33392), + 168: uint16(22904), + 169: uint16(32516), + 170: uint16(33575), + 171: uint16(26816), + 172: uint16(26604), + 173: uint16(30897), + 174: uint16(30839), + 175: uint16(25315), + 176: uint16(25441), + 177: uint16(31616), + 178: uint16(20461), + 179: uint16(21098), + 180: uint16(20943), + 181: uint16(33616), + 182: uint16(27099), + 183: uint16(37492), + 184: uint16(36341), + 185: uint16(36145), + 186: uint16(35265), + 187: uint16(38190), + 188: uint16(31661), + 189: uint16(20214), + }, + 60: { + 0: uint16(32055), + 1: uint16(32056), + 2: uint16(32057), + 3: uint16(32058), + 4: uint16(32059), + 5: uint16(32060), + 6: uint16(32061), + 7: uint16(32062), + 8: uint16(32063), + 9: uint16(32064), + 10: uint16(32065), + 11: uint16(32066), + 12: uint16(32067), + 13: uint16(32068), + 14: uint16(32069), + 15: uint16(32070), + 16: uint16(32071), + 17: uint16(32072), + 18: uint16(32073), + 19: uint16(32074), + 20: uint16(32075), + 21: uint16(32076), + 22: uint16(32077), + 23: uint16(32078), + 24: uint16(32079), + 25: uint16(32080), + 26: uint16(32081), + 27: uint16(32082), + 28: uint16(32083), + 29: uint16(32084), + 30: uint16(32085), + 31: uint16(32086), + 32: uint16(32087), + 33: uint16(32088), + 34: uint16(32089), + 35: uint16(32090), + 36: uint16(32091), + 37: uint16(32092), + 38: uint16(32093), + 39: uint16(32094), + 40: uint16(32095), + 41: uint16(32096), + 42: uint16(32097), + 43: uint16(32098), + 44: uint16(32099), + 45: uint16(32100), + 46: uint16(32101), + 47: uint16(32102), + 48: uint16(32103), + 49: uint16(32104), + 50: uint16(32105), + 51: uint16(32106), + 52: uint16(32107), + 53: uint16(32108), + 54: uint16(32109), + 55: uint16(32111), + 56: uint16(32112), + 57: uint16(32113), + 58: uint16(32114), + 59: uint16(32115), + 60: uint16(32116), + 61: uint16(32117), + 62: uint16(32118), + 63: uint16(32120), + 64: uint16(32121), + 65: uint16(32122), + 66: uint16(32123), + 67: uint16(32124), + 68: uint16(32125), + 69: uint16(32126), + 70: uint16(32127), + 71: uint16(32128), + 72: uint16(32129), + 73: uint16(32130), + 74: uint16(32131), + 75: uint16(32132), + 76: uint16(32133), + 77: uint16(32134), + 78: uint16(32135), + 79: uint16(32136), + 80: uint16(32137), + 81: uint16(32138), + 82: uint16(32139), + 83: uint16(32140), + 84: uint16(32141), + 85: uint16(32142), + 86: uint16(32143), + 87: uint16(32144), + 88: uint16(32145), + 89: uint16(32146), + 90: uint16(32147), + 91: uint16(32148), + 92: uint16(32149), + 93: uint16(32150), + 94: uint16(32151), + 95: uint16(32152), + 96: uint16(20581), + 97: uint16(33328), + 98: uint16(21073), + 99: uint16(39279), + 100: uint16(28176), + 101: uint16(28293), + 102: uint16(28071), + 103: uint16(24314), + 104: uint16(20725), + 105: uint16(23004), + 106: uint16(23558), + 107: uint16(27974), + 108: uint16(27743), + 109: uint16(30086), + 110: uint16(33931), + 111: uint16(26728), + 112: uint16(22870), + 113: uint16(35762), + 114: uint16(21280), + 115: uint16(37233), + 116: uint16(38477), + 117: uint16(34121), + 118: uint16(26898), + 119: uint16(30977), + 120: uint16(28966), + 121: uint16(33014), + 122: uint16(20132), + 123: uint16(37066), + 124: uint16(27975), + 125: uint16(39556), + 126: uint16(23047), + 127: uint16(22204), + 128: uint16(25605), + 129: uint16(38128), + 130: uint16(30699), + 131: uint16(20389), + 132: uint16(33050), + 133: uint16(29409), + 134: uint16(35282), + 135: uint16(39290), + 136: uint16(32564), + 137: uint16(32478), + 138: uint16(21119), + 139: uint16(25945), + 140: uint16(37237), + 141: uint16(36735), + 142: uint16(36739), + 143: uint16(21483), + 144: uint16(31382), + 145: uint16(25581), + 146: uint16(25509), + 147: uint16(30342), + 148: uint16(31224), + 149: uint16(34903), + 150: uint16(38454), + 151: uint16(25130), + 152: uint16(21163), + 153: uint16(33410), + 154: uint16(26708), + 155: uint16(26480), + 156: uint16(25463), + 157: uint16(30571), + 158: uint16(31469), + 159: uint16(27905), + 160: uint16(32467), + 161: uint16(35299), + 162: uint16(22992), + 163: uint16(25106), + 164: uint16(34249), + 165: uint16(33445), + 166: uint16(30028), + 167: uint16(20511), + 168: uint16(20171), + 169: uint16(30117), + 170: uint16(35819), + 171: uint16(23626), + 172: uint16(24062), + 173: uint16(31563), + 174: uint16(26020), + 175: uint16(37329), + 176: uint16(20170), + 177: uint16(27941), + 178: uint16(35167), + 179: uint16(32039), + 180: uint16(38182), + 181: uint16(20165), + 182: uint16(35880), + 183: uint16(36827), + 184: uint16(38771), + 185: uint16(26187), + 186: uint16(31105), + 187: uint16(36817), + 188: uint16(28908), + 189: uint16(28024), + }, + 61: { + 0: uint16(32153), + 1: uint16(32154), + 2: uint16(32155), + 3: uint16(32156), + 4: uint16(32157), + 5: uint16(32158), + 6: uint16(32159), + 7: uint16(32160), + 8: uint16(32161), + 9: uint16(32162), + 10: uint16(32163), + 11: uint16(32164), + 12: uint16(32165), + 13: uint16(32167), + 14: uint16(32168), + 15: uint16(32169), + 16: uint16(32170), + 17: uint16(32171), + 18: uint16(32172), + 19: uint16(32173), + 20: uint16(32175), + 21: uint16(32176), + 22: uint16(32177), + 23: uint16(32178), + 24: uint16(32179), + 25: uint16(32180), + 26: uint16(32181), + 27: uint16(32182), + 28: uint16(32183), + 29: uint16(32184), + 30: uint16(32185), + 31: uint16(32186), + 32: uint16(32187), + 33: uint16(32188), + 34: uint16(32189), + 35: uint16(32190), + 36: uint16(32191), + 37: uint16(32192), + 38: uint16(32193), + 39: uint16(32194), + 40: uint16(32195), + 41: uint16(32196), + 42: uint16(32197), + 43: uint16(32198), + 44: uint16(32199), + 45: uint16(32200), + 46: uint16(32201), + 47: uint16(32202), + 48: uint16(32203), + 49: uint16(32204), + 50: uint16(32205), + 51: uint16(32206), + 52: uint16(32207), + 53: uint16(32208), + 54: uint16(32209), + 55: uint16(32210), + 56: uint16(32211), + 57: uint16(32212), + 58: uint16(32213), + 59: uint16(32214), + 60: uint16(32215), + 61: uint16(32216), + 62: uint16(32217), + 63: uint16(32218), + 64: uint16(32219), + 65: uint16(32220), + 66: uint16(32221), + 67: uint16(32222), + 68: uint16(32223), + 69: uint16(32224), + 70: uint16(32225), + 71: uint16(32226), + 72: uint16(32227), + 73: uint16(32228), + 74: uint16(32229), + 75: uint16(32230), + 76: uint16(32231), + 77: uint16(32232), + 78: uint16(32233), + 79: uint16(32234), + 80: uint16(32235), + 81: uint16(32236), + 82: uint16(32237), + 83: uint16(32238), + 84: uint16(32239), + 85: uint16(32240), + 86: uint16(32241), + 87: uint16(32242), + 88: uint16(32243), + 89: uint16(32244), + 90: uint16(32245), + 91: uint16(32246), + 92: uint16(32247), + 93: uint16(32248), + 94: uint16(32249), + 95: uint16(32250), + 96: uint16(23613), + 97: uint16(21170), + 98: uint16(33606), + 99: uint16(20834), + 100: uint16(33550), + 101: uint16(30555), + 102: uint16(26230), + 103: uint16(40120), + 104: uint16(20140), + 105: uint16(24778), + 106: uint16(31934), + 107: uint16(31923), + 108: uint16(32463), + 109: uint16(20117), + 110: uint16(35686), + 111: uint16(26223), + 112: uint16(39048), + 113: uint16(38745), + 114: uint16(22659), + 115: uint16(25964), + 116: uint16(38236), + 117: uint16(24452), + 118: uint16(30153), + 119: uint16(38742), + 120: uint16(31455), + 121: uint16(31454), + 122: uint16(20928), + 123: uint16(28847), + 124: uint16(31384), + 125: uint16(25578), + 126: uint16(31350), + 127: uint16(32416), + 128: uint16(29590), + 129: uint16(38893), + 130: uint16(20037), + 131: uint16(28792), + 132: uint16(20061), + 133: uint16(37202), + 134: uint16(21417), + 135: uint16(25937), + 136: uint16(26087), + 137: uint16(33276), + 138: uint16(33285), + 139: uint16(21646), + 140: uint16(23601), + 141: uint16(30106), + 142: uint16(38816), + 143: uint16(25304), + 144: uint16(29401), + 145: uint16(30141), + 146: uint16(23621), + 147: uint16(39545), + 148: uint16(33738), + 149: uint16(23616), + 150: uint16(21632), + 151: uint16(30697), + 152: uint16(20030), + 153: uint16(27822), + 154: uint16(32858), + 155: uint16(25298), + 156: uint16(25454), + 157: uint16(24040), + 158: uint16(20855), + 159: uint16(36317), + 160: uint16(36382), + 161: uint16(38191), + 162: uint16(20465), + 163: uint16(21477), + 164: uint16(24807), + 165: uint16(28844), + 166: uint16(21095), + 167: uint16(25424), + 168: uint16(40515), + 169: uint16(23071), + 170: uint16(20518), + 171: uint16(30519), + 172: uint16(21367), + 173: uint16(32482), + 174: uint16(25733), + 175: uint16(25899), + 176: uint16(25225), + 177: uint16(25496), + 178: uint16(20500), + 179: uint16(29237), + 180: uint16(35273), + 181: uint16(20915), + 182: uint16(35776), + 183: uint16(32477), + 184: uint16(22343), + 185: uint16(33740), + 186: uint16(38055), + 187: uint16(20891), + 188: uint16(21531), + 189: uint16(23803), + }, + 62: { + 0: uint16(32251), + 1: uint16(32252), + 2: uint16(32253), + 3: uint16(32254), + 4: uint16(32255), + 5: uint16(32256), + 6: uint16(32257), + 7: uint16(32258), + 8: uint16(32259), + 9: uint16(32260), + 10: uint16(32261), + 11: uint16(32262), + 12: uint16(32263), + 13: uint16(32264), + 14: uint16(32265), + 15: uint16(32266), + 16: uint16(32267), + 17: uint16(32268), + 18: uint16(32269), + 19: uint16(32270), + 20: uint16(32271), + 21: uint16(32272), + 22: uint16(32273), + 23: uint16(32274), + 24: uint16(32275), + 25: uint16(32276), + 26: uint16(32277), + 27: uint16(32278), + 28: uint16(32279), + 29: uint16(32280), + 30: uint16(32281), + 31: uint16(32282), + 32: uint16(32283), + 33: uint16(32284), + 34: uint16(32285), + 35: uint16(32286), + 36: uint16(32287), + 37: uint16(32288), + 38: uint16(32289), + 39: uint16(32290), + 40: uint16(32291), + 41: uint16(32292), + 42: uint16(32293), + 43: uint16(32294), + 44: uint16(32295), + 45: uint16(32296), + 46: uint16(32297), + 47: uint16(32298), + 48: uint16(32299), + 49: uint16(32300), + 50: uint16(32301), + 51: uint16(32302), + 52: uint16(32303), + 53: uint16(32304), + 54: uint16(32305), + 55: uint16(32306), + 56: uint16(32307), + 57: uint16(32308), + 58: uint16(32309), + 59: uint16(32310), + 60: uint16(32311), + 61: uint16(32312), + 62: uint16(32313), + 63: uint16(32314), + 64: uint16(32316), + 65: uint16(32317), + 66: uint16(32318), + 67: uint16(32319), + 68: uint16(32320), + 69: uint16(32322), + 70: uint16(32323), + 71: uint16(32324), + 72: uint16(32325), + 73: uint16(32326), + 74: uint16(32328), + 75: uint16(32329), + 76: uint16(32330), + 77: uint16(32331), + 78: uint16(32332), + 79: uint16(32333), + 80: uint16(32334), + 81: uint16(32335), + 82: uint16(32336), + 83: uint16(32337), + 84: uint16(32338), + 85: uint16(32339), + 86: uint16(32340), + 87: uint16(32341), + 88: uint16(32342), + 89: uint16(32343), + 90: uint16(32344), + 91: uint16(32345), + 92: uint16(32346), + 93: uint16(32347), + 94: uint16(32348), + 95: uint16(32349), + 96: uint16(20426), + 97: uint16(31459), + 98: uint16(27994), + 99: uint16(37089), + 100: uint16(39567), + 101: uint16(21888), + 102: uint16(21654), + 103: uint16(21345), + 104: uint16(21679), + 105: uint16(24320), + 106: uint16(25577), + 107: uint16(26999), + 108: uint16(20975), + 109: uint16(24936), + 110: uint16(21002), + 111: uint16(22570), + 112: uint16(21208), + 113: uint16(22350), + 114: uint16(30733), + 115: uint16(30475), + 116: uint16(24247), + 117: uint16(24951), + 118: uint16(31968), + 119: uint16(25179), + 120: uint16(25239), + 121: uint16(20130), + 122: uint16(28821), + 123: uint16(32771), + 124: uint16(25335), + 125: uint16(28900), + 126: uint16(38752), + 127: uint16(22391), + 128: uint16(33499), + 129: uint16(26607), + 130: uint16(26869), + 131: uint16(30933), + 132: uint16(39063), + 133: uint16(31185), + 134: uint16(22771), + 135: uint16(21683), + 136: uint16(21487), + 137: uint16(28212), + 138: uint16(20811), + 139: uint16(21051), + 140: uint16(23458), + 141: uint16(35838), + 142: uint16(32943), + 143: uint16(21827), + 144: uint16(22438), + 145: uint16(24691), + 146: uint16(22353), + 147: uint16(21549), + 148: uint16(31354), + 149: uint16(24656), + 150: uint16(23380), + 151: uint16(25511), + 152: uint16(25248), + 153: uint16(21475), + 154: uint16(25187), + 155: uint16(23495), + 156: uint16(26543), + 157: uint16(21741), + 158: uint16(31391), + 159: uint16(33510), + 160: uint16(37239), + 161: uint16(24211), + 162: uint16(35044), + 163: uint16(22840), + 164: uint16(22446), + 165: uint16(25358), + 166: uint16(36328), + 167: uint16(33007), + 168: uint16(22359), + 169: uint16(31607), + 170: uint16(20393), + 171: uint16(24555), + 172: uint16(23485), + 173: uint16(27454), + 174: uint16(21281), + 175: uint16(31568), + 176: uint16(29378), + 177: uint16(26694), + 178: uint16(30719), + 179: uint16(30518), + 180: uint16(26103), + 181: uint16(20917), + 182: uint16(20111), + 183: uint16(30420), + 184: uint16(23743), + 185: uint16(31397), + 186: uint16(33909), + 187: uint16(22862), + 188: uint16(39745), + 189: uint16(20608), + }, + 63: { + 0: uint16(32350), + 1: uint16(32351), + 2: uint16(32352), + 3: uint16(32353), + 4: uint16(32354), + 5: uint16(32355), + 6: uint16(32356), + 7: uint16(32357), + 8: uint16(32358), + 9: uint16(32359), + 10: uint16(32360), + 11: uint16(32361), + 12: uint16(32362), + 13: uint16(32363), + 14: uint16(32364), + 15: uint16(32365), + 16: uint16(32366), + 17: uint16(32367), + 18: uint16(32368), + 19: uint16(32369), + 20: uint16(32370), + 21: uint16(32371), + 22: uint16(32372), + 23: uint16(32373), + 24: uint16(32374), + 25: uint16(32375), + 26: uint16(32376), + 27: uint16(32377), + 28: uint16(32378), + 29: uint16(32379), + 30: uint16(32380), + 31: uint16(32381), + 32: uint16(32382), + 33: uint16(32383), + 34: uint16(32384), + 35: uint16(32385), + 36: uint16(32387), + 37: uint16(32388), + 38: uint16(32389), + 39: uint16(32390), + 40: uint16(32391), + 41: uint16(32392), + 42: uint16(32393), + 43: uint16(32394), + 44: uint16(32395), + 45: uint16(32396), + 46: uint16(32397), + 47: uint16(32398), + 48: uint16(32399), + 49: uint16(32400), + 50: uint16(32401), + 51: uint16(32402), + 52: uint16(32403), + 53: uint16(32404), + 54: uint16(32405), + 55: uint16(32406), + 56: uint16(32407), + 57: uint16(32408), + 58: uint16(32409), + 59: uint16(32410), + 60: uint16(32412), + 61: uint16(32413), + 62: uint16(32414), + 63: uint16(32430), + 64: uint16(32436), + 65: uint16(32443), + 66: uint16(32444), + 67: uint16(32470), + 68: uint16(32484), + 69: uint16(32492), + 70: uint16(32505), + 71: uint16(32522), + 72: uint16(32528), + 73: uint16(32542), + 74: uint16(32567), + 75: uint16(32569), + 76: uint16(32571), + 77: uint16(32572), + 78: uint16(32573), + 79: uint16(32574), + 80: uint16(32575), + 81: uint16(32576), + 82: uint16(32577), + 83: uint16(32579), + 84: uint16(32582), + 85: uint16(32583), + 86: uint16(32584), + 87: uint16(32585), + 88: uint16(32586), + 89: uint16(32587), + 90: uint16(32588), + 91: uint16(32589), + 92: uint16(32590), + 93: uint16(32591), + 94: uint16(32594), + 95: uint16(32595), + 96: uint16(39304), + 97: uint16(24871), + 98: uint16(28291), + 99: uint16(22372), + 100: uint16(26118), + 101: uint16(25414), + 102: uint16(22256), + 103: uint16(25324), + 104: uint16(25193), + 105: uint16(24275), + 106: uint16(38420), + 107: uint16(22403), + 108: uint16(25289), + 109: uint16(21895), + 110: uint16(34593), + 111: uint16(33098), + 112: uint16(36771), + 113: uint16(21862), + 114: uint16(33713), + 115: uint16(26469), + 116: uint16(36182), + 117: uint16(34013), + 118: uint16(23146), + 119: uint16(26639), + 120: uint16(25318), + 121: uint16(31726), + 122: uint16(38417), + 123: uint16(20848), + 124: uint16(28572), + 125: uint16(35888), + 126: uint16(25597), + 127: uint16(35272), + 128: uint16(25042), + 129: uint16(32518), + 130: uint16(28866), + 131: uint16(28389), + 132: uint16(29701), + 133: uint16(27028), + 134: uint16(29436), + 135: uint16(24266), + 136: uint16(37070), + 137: uint16(26391), + 138: uint16(28010), + 139: uint16(25438), + 140: uint16(21171), + 141: uint16(29282), + 142: uint16(32769), + 143: uint16(20332), + 144: uint16(23013), + 145: uint16(37226), + 146: uint16(28889), + 147: uint16(28061), + 148: uint16(21202), + 149: uint16(20048), + 150: uint16(38647), + 151: uint16(38253), + 152: uint16(34174), + 153: uint16(30922), + 154: uint16(32047), + 155: uint16(20769), + 156: uint16(22418), + 157: uint16(25794), + 158: uint16(32907), + 159: uint16(31867), + 160: uint16(27882), + 161: uint16(26865), + 162: uint16(26974), + 163: uint16(20919), + 164: uint16(21400), + 165: uint16(26792), + 166: uint16(29313), + 167: uint16(40654), + 168: uint16(31729), + 169: uint16(29432), + 170: uint16(31163), + 171: uint16(28435), + 172: uint16(29702), + 173: uint16(26446), + 174: uint16(37324), + 175: uint16(40100), + 176: uint16(31036), + 177: uint16(33673), + 178: uint16(33620), + 179: uint16(21519), + 180: uint16(26647), + 181: uint16(20029), + 182: uint16(21385), + 183: uint16(21169), + 184: uint16(30782), + 185: uint16(21382), + 186: uint16(21033), + 187: uint16(20616), + 188: uint16(20363), + 189: uint16(20432), + }, + 64: { + 0: uint16(32598), + 1: uint16(32601), + 2: uint16(32603), + 3: uint16(32604), + 4: uint16(32605), + 5: uint16(32606), + 6: uint16(32608), + 7: uint16(32611), + 8: uint16(32612), + 9: uint16(32613), + 10: uint16(32614), + 11: uint16(32615), + 12: uint16(32619), + 13: uint16(32620), + 14: uint16(32621), + 15: uint16(32623), + 16: uint16(32624), + 17: uint16(32627), + 18: uint16(32629), + 19: uint16(32630), + 20: uint16(32631), + 21: uint16(32632), + 22: uint16(32634), + 23: uint16(32635), + 24: uint16(32636), + 25: uint16(32637), + 26: uint16(32639), + 27: uint16(32640), + 28: uint16(32642), + 29: uint16(32643), + 30: uint16(32644), + 31: uint16(32645), + 32: uint16(32646), + 33: uint16(32647), + 34: uint16(32648), + 35: uint16(32649), + 36: uint16(32651), + 37: uint16(32653), + 38: uint16(32655), + 39: uint16(32656), + 40: uint16(32657), + 41: uint16(32658), + 42: uint16(32659), + 43: uint16(32661), + 44: uint16(32662), + 45: uint16(32663), + 46: uint16(32664), + 47: uint16(32665), + 48: uint16(32667), + 49: uint16(32668), + 50: uint16(32672), + 51: uint16(32674), + 52: uint16(32675), + 53: uint16(32677), + 54: uint16(32678), + 55: uint16(32680), + 56: uint16(32681), + 57: uint16(32682), + 58: uint16(32683), + 59: uint16(32684), + 60: uint16(32685), + 61: uint16(32686), + 62: uint16(32689), + 63: uint16(32691), + 64: uint16(32692), + 65: uint16(32693), + 66: uint16(32694), + 67: uint16(32695), + 68: uint16(32698), + 69: uint16(32699), + 70: uint16(32702), + 71: uint16(32704), + 72: uint16(32706), + 73: uint16(32707), + 74: uint16(32708), + 75: uint16(32710), + 76: uint16(32711), + 77: uint16(32712), + 78: uint16(32713), + 79: uint16(32715), + 80: uint16(32717), + 81: uint16(32719), + 82: uint16(32720), + 83: uint16(32721), + 84: uint16(32722), + 85: uint16(32723), + 86: uint16(32726), + 87: uint16(32727), + 88: uint16(32729), + 89: uint16(32730), + 90: uint16(32731), + 91: uint16(32732), + 92: uint16(32733), + 93: uint16(32734), + 94: uint16(32738), + 95: uint16(32739), + 96: uint16(30178), + 97: uint16(31435), + 98: uint16(31890), + 99: uint16(27813), + 100: uint16(38582), + 101: uint16(21147), + 102: uint16(29827), + 103: uint16(21737), + 104: uint16(20457), + 105: uint16(32852), + 106: uint16(33714), + 107: uint16(36830), + 108: uint16(38256), + 109: uint16(24265), + 110: uint16(24604), + 111: uint16(28063), + 112: uint16(24088), + 113: uint16(25947), + 114: uint16(33080), + 115: uint16(38142), + 116: uint16(24651), + 117: uint16(28860), + 118: uint16(32451), + 119: uint16(31918), + 120: uint16(20937), + 121: uint16(26753), + 122: uint16(31921), + 123: uint16(33391), + 124: uint16(20004), + 125: uint16(36742), + 126: uint16(37327), + 127: uint16(26238), + 128: uint16(20142), + 129: uint16(35845), + 130: uint16(25769), + 131: uint16(32842), + 132: uint16(20698), + 133: uint16(30103), + 134: uint16(29134), + 135: uint16(23525), + 136: uint16(36797), + 137: uint16(28518), + 138: uint16(20102), + 139: uint16(25730), + 140: uint16(38243), + 141: uint16(24278), + 142: uint16(26009), + 143: uint16(21015), + 144: uint16(35010), + 145: uint16(28872), + 146: uint16(21155), + 147: uint16(29454), + 148: uint16(29747), + 149: uint16(26519), + 150: uint16(30967), + 151: uint16(38678), + 152: uint16(20020), + 153: uint16(37051), + 154: uint16(40158), + 155: uint16(28107), + 156: uint16(20955), + 157: uint16(36161), + 158: uint16(21533), + 159: uint16(25294), + 160: uint16(29618), + 161: uint16(33777), + 162: uint16(38646), + 163: uint16(40836), + 164: uint16(38083), + 165: uint16(20278), + 166: uint16(32666), + 167: uint16(20940), + 168: uint16(28789), + 169: uint16(38517), + 170: uint16(23725), + 171: uint16(39046), + 172: uint16(21478), + 173: uint16(20196), + 174: uint16(28316), + 175: uint16(29705), + 176: uint16(27060), + 177: uint16(30827), + 178: uint16(39311), + 179: uint16(30041), + 180: uint16(21016), + 181: uint16(30244), + 182: uint16(27969), + 183: uint16(26611), + 184: uint16(20845), + 185: uint16(40857), + 186: uint16(32843), + 187: uint16(21657), + 188: uint16(31548), + 189: uint16(31423), + }, + 65: { + 0: uint16(32740), + 1: uint16(32743), + 2: uint16(32744), + 3: uint16(32746), + 4: uint16(32747), + 5: uint16(32748), + 6: uint16(32749), + 7: uint16(32751), + 8: uint16(32754), + 9: uint16(32756), + 10: uint16(32757), + 11: uint16(32758), + 12: uint16(32759), + 13: uint16(32760), + 14: uint16(32761), + 15: uint16(32762), + 16: uint16(32765), + 17: uint16(32766), + 18: uint16(32767), + 19: uint16(32770), + 20: uint16(32775), + 21: uint16(32776), + 22: uint16(32777), + 23: uint16(32778), + 24: uint16(32782), + 25: uint16(32783), + 26: uint16(32785), + 27: uint16(32787), + 28: uint16(32794), + 29: uint16(32795), + 30: uint16(32797), + 31: uint16(32798), + 32: uint16(32799), + 33: uint16(32801), + 34: uint16(32803), + 35: uint16(32804), + 36: uint16(32811), + 37: uint16(32812), + 38: uint16(32813), + 39: uint16(32814), + 40: uint16(32815), + 41: uint16(32816), + 42: uint16(32818), + 43: uint16(32820), + 44: uint16(32825), + 45: uint16(32826), + 46: uint16(32828), + 47: uint16(32830), + 48: uint16(32832), + 49: uint16(32833), + 50: uint16(32836), + 51: uint16(32837), + 52: uint16(32839), + 53: uint16(32840), + 54: uint16(32841), + 55: uint16(32846), + 56: uint16(32847), + 57: uint16(32848), + 58: uint16(32849), + 59: uint16(32851), + 60: uint16(32853), + 61: uint16(32854), + 62: uint16(32855), + 63: uint16(32857), + 64: uint16(32859), + 65: uint16(32860), + 66: uint16(32861), + 67: uint16(32862), + 68: uint16(32863), + 69: uint16(32864), + 70: uint16(32865), + 71: uint16(32866), + 72: uint16(32867), + 73: uint16(32868), + 74: uint16(32869), + 75: uint16(32870), + 76: uint16(32871), + 77: uint16(32872), + 78: uint16(32875), + 79: uint16(32876), + 80: uint16(32877), + 81: uint16(32878), + 82: uint16(32879), + 83: uint16(32880), + 84: uint16(32882), + 85: uint16(32883), + 86: uint16(32884), + 87: uint16(32885), + 88: uint16(32886), + 89: uint16(32887), + 90: uint16(32888), + 91: uint16(32889), + 92: uint16(32890), + 93: uint16(32891), + 94: uint16(32892), + 95: uint16(32893), + 96: uint16(38534), + 97: uint16(22404), + 98: uint16(25314), + 99: uint16(38471), + 100: uint16(27004), + 101: uint16(23044), + 102: uint16(25602), + 103: uint16(31699), + 104: uint16(28431), + 105: uint16(38475), + 106: uint16(33446), + 107: uint16(21346), + 108: uint16(39045), + 109: uint16(24208), + 110: uint16(28809), + 111: uint16(25523), + 112: uint16(21348), + 113: uint16(34383), + 114: uint16(40065), + 115: uint16(40595), + 116: uint16(30860), + 117: uint16(38706), + 118: uint16(36335), + 119: uint16(36162), + 120: uint16(40575), + 121: uint16(28510), + 122: uint16(31108), + 123: uint16(24405), + 124: uint16(38470), + 125: uint16(25134), + 126: uint16(39540), + 127: uint16(21525), + 128: uint16(38109), + 129: uint16(20387), + 130: uint16(26053), + 131: uint16(23653), + 132: uint16(23649), + 133: uint16(32533), + 134: uint16(34385), + 135: uint16(27695), + 136: uint16(24459), + 137: uint16(29575), + 138: uint16(28388), + 139: uint16(32511), + 140: uint16(23782), + 141: uint16(25371), + 142: uint16(23402), + 143: uint16(28390), + 144: uint16(21365), + 145: uint16(20081), + 146: uint16(25504), + 147: uint16(30053), + 148: uint16(25249), + 149: uint16(36718), + 150: uint16(20262), + 151: uint16(20177), + 152: uint16(27814), + 153: uint16(32438), + 154: uint16(35770), + 155: uint16(33821), + 156: uint16(34746), + 157: uint16(32599), + 158: uint16(36923), + 159: uint16(38179), + 160: uint16(31657), + 161: uint16(39585), + 162: uint16(35064), + 163: uint16(33853), + 164: uint16(27931), + 165: uint16(39558), + 166: uint16(32476), + 167: uint16(22920), + 168: uint16(40635), + 169: uint16(29595), + 170: uint16(30721), + 171: uint16(34434), + 172: uint16(39532), + 173: uint16(39554), + 174: uint16(22043), + 175: uint16(21527), + 176: uint16(22475), + 177: uint16(20080), + 178: uint16(40614), + 179: uint16(21334), + 180: uint16(36808), + 181: uint16(33033), + 182: uint16(30610), + 183: uint16(39314), + 184: uint16(34542), + 185: uint16(28385), + 186: uint16(34067), + 187: uint16(26364), + 188: uint16(24930), + 189: uint16(28459), + }, + 66: { + 0: uint16(32894), + 1: uint16(32897), + 2: uint16(32898), + 3: uint16(32901), + 4: uint16(32904), + 5: uint16(32906), + 6: uint16(32909), + 7: uint16(32910), + 8: uint16(32911), + 9: uint16(32912), + 10: uint16(32913), + 11: uint16(32914), + 12: uint16(32916), + 13: uint16(32917), + 14: uint16(32919), + 15: uint16(32921), + 16: uint16(32926), + 17: uint16(32931), + 18: uint16(32934), + 19: uint16(32935), + 20: uint16(32936), + 21: uint16(32940), + 22: uint16(32944), + 23: uint16(32947), + 24: uint16(32949), + 25: uint16(32950), + 26: uint16(32952), + 27: uint16(32953), + 28: uint16(32955), + 29: uint16(32965), + 30: uint16(32967), + 31: uint16(32968), + 32: uint16(32969), + 33: uint16(32970), + 34: uint16(32971), + 35: uint16(32975), + 36: uint16(32976), + 37: uint16(32977), + 38: uint16(32978), + 39: uint16(32979), + 40: uint16(32980), + 41: uint16(32981), + 42: uint16(32984), + 43: uint16(32991), + 44: uint16(32992), + 45: uint16(32994), + 46: uint16(32995), + 47: uint16(32998), + 48: uint16(33006), + 49: uint16(33013), + 50: uint16(33015), + 51: uint16(33017), + 52: uint16(33019), + 53: uint16(33022), + 54: uint16(33023), + 55: uint16(33024), + 56: uint16(33025), + 57: uint16(33027), + 58: uint16(33028), + 59: uint16(33029), + 60: uint16(33031), + 61: uint16(33032), + 62: uint16(33035), + 63: uint16(33036), + 64: uint16(33045), + 65: uint16(33047), + 66: uint16(33049), + 67: uint16(33051), + 68: uint16(33052), + 69: uint16(33053), + 70: uint16(33055), + 71: uint16(33056), + 72: uint16(33057), + 73: uint16(33058), + 74: uint16(33059), + 75: uint16(33060), + 76: uint16(33061), + 77: uint16(33062), + 78: uint16(33063), + 79: uint16(33064), + 80: uint16(33065), + 81: uint16(33066), + 82: uint16(33067), + 83: uint16(33069), + 84: uint16(33070), + 85: uint16(33072), + 86: uint16(33075), + 87: uint16(33076), + 88: uint16(33077), + 89: uint16(33079), + 90: uint16(33081), + 91: uint16(33082), + 92: uint16(33083), + 93: uint16(33084), + 94: uint16(33085), + 95: uint16(33087), + 96: uint16(35881), + 97: uint16(33426), + 98: uint16(33579), + 99: uint16(30450), + 100: uint16(27667), + 101: uint16(24537), + 102: uint16(33725), + 103: uint16(29483), + 104: uint16(33541), + 105: uint16(38170), + 106: uint16(27611), + 107: uint16(30683), + 108: uint16(38086), + 109: uint16(21359), + 110: uint16(33538), + 111: uint16(20882), + 112: uint16(24125), + 113: uint16(35980), + 114: uint16(36152), + 115: uint16(20040), + 116: uint16(29611), + 117: uint16(26522), + 118: uint16(26757), + 119: uint16(37238), + 120: uint16(38665), + 121: uint16(29028), + 122: uint16(27809), + 123: uint16(30473), + 124: uint16(23186), + 125: uint16(38209), + 126: uint16(27599), + 127: uint16(32654), + 128: uint16(26151), + 129: uint16(23504), + 130: uint16(22969), + 131: uint16(23194), + 132: uint16(38376), + 133: uint16(38391), + 134: uint16(20204), + 135: uint16(33804), + 136: uint16(33945), + 137: uint16(27308), + 138: uint16(30431), + 139: uint16(38192), + 140: uint16(29467), + 141: uint16(26790), + 142: uint16(23391), + 143: uint16(30511), + 144: uint16(37274), + 145: uint16(38753), + 146: uint16(31964), + 147: uint16(36855), + 148: uint16(35868), + 149: uint16(24357), + 150: uint16(31859), + 151: uint16(31192), + 152: uint16(35269), + 153: uint16(27852), + 154: uint16(34588), + 155: uint16(23494), + 156: uint16(24130), + 157: uint16(26825), + 158: uint16(30496), + 159: uint16(32501), + 160: uint16(20885), + 161: uint16(20813), + 162: uint16(21193), + 163: uint16(23081), + 164: uint16(32517), + 165: uint16(38754), + 166: uint16(33495), + 167: uint16(25551), + 168: uint16(30596), + 169: uint16(34256), + 170: uint16(31186), + 171: uint16(28218), + 172: uint16(24217), + 173: uint16(22937), + 174: uint16(34065), + 175: uint16(28781), + 176: uint16(27665), + 177: uint16(25279), + 178: uint16(30399), + 179: uint16(25935), + 180: uint16(24751), + 181: uint16(38397), + 182: uint16(26126), + 183: uint16(34719), + 184: uint16(40483), + 185: uint16(38125), + 186: uint16(21517), + 187: uint16(21629), + 188: uint16(35884), + 189: uint16(25720), + }, + 67: { + 0: uint16(33088), + 1: uint16(33089), + 2: uint16(33090), + 3: uint16(33091), + 4: uint16(33092), + 5: uint16(33093), + 6: uint16(33095), + 7: uint16(33097), + 8: uint16(33101), + 9: uint16(33102), + 10: uint16(33103), + 11: uint16(33106), + 12: uint16(33110), + 13: uint16(33111), + 14: uint16(33112), + 15: uint16(33115), + 16: uint16(33116), + 17: uint16(33117), + 18: uint16(33118), + 19: uint16(33119), + 20: uint16(33121), + 21: uint16(33122), + 22: uint16(33123), + 23: uint16(33124), + 24: uint16(33126), + 25: uint16(33128), + 26: uint16(33130), + 27: uint16(33131), + 28: uint16(33132), + 29: uint16(33135), + 30: uint16(33138), + 31: uint16(33139), + 32: uint16(33141), + 33: uint16(33142), + 34: uint16(33143), + 35: uint16(33144), + 36: uint16(33153), + 37: uint16(33155), + 38: uint16(33156), + 39: uint16(33157), + 40: uint16(33158), + 41: uint16(33159), + 42: uint16(33161), + 43: uint16(33163), + 44: uint16(33164), + 45: uint16(33165), + 46: uint16(33166), + 47: uint16(33168), + 48: uint16(33170), + 49: uint16(33171), + 50: uint16(33172), + 51: uint16(33173), + 52: uint16(33174), + 53: uint16(33175), + 54: uint16(33177), + 55: uint16(33178), + 56: uint16(33182), + 57: uint16(33183), + 58: uint16(33184), + 59: uint16(33185), + 60: uint16(33186), + 61: uint16(33188), + 62: uint16(33189), + 63: uint16(33191), + 64: uint16(33193), + 65: uint16(33195), + 66: uint16(33196), + 67: uint16(33197), + 68: uint16(33198), + 69: uint16(33199), + 70: uint16(33200), + 71: uint16(33201), + 72: uint16(33202), + 73: uint16(33204), + 74: uint16(33205), + 75: uint16(33206), + 76: uint16(33207), + 77: uint16(33208), + 78: uint16(33209), + 79: uint16(33212), + 80: uint16(33213), + 81: uint16(33214), + 82: uint16(33215), + 83: uint16(33220), + 84: uint16(33221), + 85: uint16(33223), + 86: uint16(33224), + 87: uint16(33225), + 88: uint16(33227), + 89: uint16(33229), + 90: uint16(33230), + 91: uint16(33231), + 92: uint16(33232), + 93: uint16(33233), + 94: uint16(33234), + 95: uint16(33235), + 96: uint16(25721), + 97: uint16(34321), + 98: uint16(27169), + 99: uint16(33180), + 100: uint16(30952), + 101: uint16(25705), + 102: uint16(39764), + 103: uint16(25273), + 104: uint16(26411), + 105: uint16(33707), + 106: uint16(22696), + 107: uint16(40664), + 108: uint16(27819), + 109: uint16(28448), + 110: uint16(23518), + 111: uint16(38476), + 112: uint16(35851), + 113: uint16(29279), + 114: uint16(26576), + 115: uint16(25287), + 116: uint16(29281), + 117: uint16(20137), + 118: uint16(22982), + 119: uint16(27597), + 120: uint16(22675), + 121: uint16(26286), + 122: uint16(24149), + 123: uint16(21215), + 124: uint16(24917), + 125: uint16(26408), + 126: uint16(30446), + 127: uint16(30566), + 128: uint16(29287), + 129: uint16(31302), + 130: uint16(25343), + 131: uint16(21738), + 132: uint16(21584), + 133: uint16(38048), + 134: uint16(37027), + 135: uint16(23068), + 136: uint16(32435), + 137: uint16(27670), + 138: uint16(20035), + 139: uint16(22902), + 140: uint16(32784), + 141: uint16(22856), + 142: uint16(21335), + 143: uint16(30007), + 144: uint16(38590), + 145: uint16(22218), + 146: uint16(25376), + 147: uint16(33041), + 148: uint16(24700), + 149: uint16(38393), + 150: uint16(28118), + 151: uint16(21602), + 152: uint16(39297), + 153: uint16(20869), + 154: uint16(23273), + 155: uint16(33021), + 156: uint16(22958), + 157: uint16(38675), + 158: uint16(20522), + 159: uint16(27877), + 160: uint16(23612), + 161: uint16(25311), + 162: uint16(20320), + 163: uint16(21311), + 164: uint16(33147), + 165: uint16(36870), + 166: uint16(28346), + 167: uint16(34091), + 168: uint16(25288), + 169: uint16(24180), + 170: uint16(30910), + 171: uint16(25781), + 172: uint16(25467), + 173: uint16(24565), + 174: uint16(23064), + 175: uint16(37247), + 176: uint16(40479), + 177: uint16(23615), + 178: uint16(25423), + 179: uint16(32834), + 180: uint16(23421), + 181: uint16(21870), + 182: uint16(38218), + 183: uint16(38221), + 184: uint16(28037), + 185: uint16(24744), + 186: uint16(26592), + 187: uint16(29406), + 188: uint16(20957), + 189: uint16(23425), + }, + 68: { + 0: uint16(33236), + 1: uint16(33237), + 2: uint16(33238), + 3: uint16(33239), + 4: uint16(33240), + 5: uint16(33241), + 6: uint16(33242), + 7: uint16(33243), + 8: uint16(33244), + 9: uint16(33245), + 10: uint16(33246), + 11: uint16(33247), + 12: uint16(33248), + 13: uint16(33249), + 14: uint16(33250), + 15: uint16(33252), + 16: uint16(33253), + 17: uint16(33254), + 18: uint16(33256), + 19: uint16(33257), + 20: uint16(33259), + 21: uint16(33262), + 22: uint16(33263), + 23: uint16(33264), + 24: uint16(33265), + 25: uint16(33266), + 26: uint16(33269), + 27: uint16(33270), + 28: uint16(33271), + 29: uint16(33272), + 30: uint16(33273), + 31: uint16(33274), + 32: uint16(33277), + 33: uint16(33279), + 34: uint16(33283), + 35: uint16(33287), + 36: uint16(33288), + 37: uint16(33289), + 38: uint16(33290), + 39: uint16(33291), + 40: uint16(33294), + 41: uint16(33295), + 42: uint16(33297), + 43: uint16(33299), + 44: uint16(33301), + 45: uint16(33302), + 46: uint16(33303), + 47: uint16(33304), + 48: uint16(33305), + 49: uint16(33306), + 50: uint16(33309), + 51: uint16(33312), + 52: uint16(33316), + 53: uint16(33317), + 54: uint16(33318), + 55: uint16(33319), + 56: uint16(33321), + 57: uint16(33326), + 58: uint16(33330), + 59: uint16(33338), + 60: uint16(33340), + 61: uint16(33341), + 62: uint16(33343), + 63: uint16(33344), + 64: uint16(33345), + 65: uint16(33346), + 66: uint16(33347), + 67: uint16(33349), + 68: uint16(33350), + 69: uint16(33352), + 70: uint16(33354), + 71: uint16(33356), + 72: uint16(33357), + 73: uint16(33358), + 74: uint16(33360), + 75: uint16(33361), + 76: uint16(33362), + 77: uint16(33363), + 78: uint16(33364), + 79: uint16(33365), + 80: uint16(33366), + 81: uint16(33367), + 82: uint16(33369), + 83: uint16(33371), + 84: uint16(33372), + 85: uint16(33373), + 86: uint16(33374), + 87: uint16(33376), + 88: uint16(33377), + 89: uint16(33378), + 90: uint16(33379), + 91: uint16(33380), + 92: uint16(33381), + 93: uint16(33382), + 94: uint16(33383), + 95: uint16(33385), + 96: uint16(25319), + 97: uint16(27870), + 98: uint16(29275), + 99: uint16(25197), + 100: uint16(38062), + 101: uint16(32445), + 102: uint16(33043), + 103: uint16(27987), + 104: uint16(20892), + 105: uint16(24324), + 106: uint16(22900), + 107: uint16(21162), + 108: uint16(24594), + 109: uint16(22899), + 110: uint16(26262), + 111: uint16(34384), + 112: uint16(30111), + 113: uint16(25386), + 114: uint16(25062), + 115: uint16(31983), + 116: uint16(35834), + 117: uint16(21734), + 118: uint16(27431), + 119: uint16(40485), + 120: uint16(27572), + 121: uint16(34261), + 122: uint16(21589), + 123: uint16(20598), + 124: uint16(27812), + 125: uint16(21866), + 126: uint16(36276), + 127: uint16(29228), + 128: uint16(24085), + 129: uint16(24597), + 130: uint16(29750), + 131: uint16(25293), + 132: uint16(25490), + 133: uint16(29260), + 134: uint16(24472), + 135: uint16(28227), + 136: uint16(27966), + 137: uint16(25856), + 138: uint16(28504), + 139: uint16(30424), + 140: uint16(30928), + 141: uint16(30460), + 142: uint16(30036), + 143: uint16(21028), + 144: uint16(21467), + 145: uint16(20051), + 146: uint16(24222), + 147: uint16(26049), + 148: uint16(32810), + 149: uint16(32982), + 150: uint16(25243), + 151: uint16(21638), + 152: uint16(21032), + 153: uint16(28846), + 154: uint16(34957), + 155: uint16(36305), + 156: uint16(27873), + 157: uint16(21624), + 158: uint16(32986), + 159: uint16(22521), + 160: uint16(35060), + 161: uint16(36180), + 162: uint16(38506), + 163: uint16(37197), + 164: uint16(20329), + 165: uint16(27803), + 166: uint16(21943), + 167: uint16(30406), + 168: uint16(30768), + 169: uint16(25256), + 170: uint16(28921), + 171: uint16(28558), + 172: uint16(24429), + 173: uint16(34028), + 174: uint16(26842), + 175: uint16(30844), + 176: uint16(31735), + 177: uint16(33192), + 178: uint16(26379), + 179: uint16(40527), + 180: uint16(25447), + 181: uint16(30896), + 182: uint16(22383), + 183: uint16(30738), + 184: uint16(38713), + 185: uint16(25209), + 186: uint16(25259), + 187: uint16(21128), + 188: uint16(29749), + 189: uint16(27607), + }, + 69: { + 0: uint16(33386), + 1: uint16(33387), + 2: uint16(33388), + 3: uint16(33389), + 4: uint16(33393), + 5: uint16(33397), + 6: uint16(33398), + 7: uint16(33399), + 8: uint16(33400), + 9: uint16(33403), + 10: uint16(33404), + 11: uint16(33408), + 12: uint16(33409), + 13: uint16(33411), + 14: uint16(33413), + 15: uint16(33414), + 16: uint16(33415), + 17: uint16(33417), + 18: uint16(33420), + 19: uint16(33424), + 20: uint16(33427), + 21: uint16(33428), + 22: uint16(33429), + 23: uint16(33430), + 24: uint16(33434), + 25: uint16(33435), + 26: uint16(33438), + 27: uint16(33440), + 28: uint16(33442), + 29: uint16(33443), + 30: uint16(33447), + 31: uint16(33458), + 32: uint16(33461), + 33: uint16(33462), + 34: uint16(33466), + 35: uint16(33467), + 36: uint16(33468), + 37: uint16(33471), + 38: uint16(33472), + 39: uint16(33474), + 40: uint16(33475), + 41: uint16(33477), + 42: uint16(33478), + 43: uint16(33481), + 44: uint16(33488), + 45: uint16(33494), + 46: uint16(33497), + 47: uint16(33498), + 48: uint16(33501), + 49: uint16(33506), + 50: uint16(33511), + 51: uint16(33512), + 52: uint16(33513), + 53: uint16(33514), + 54: uint16(33516), + 55: uint16(33517), + 56: uint16(33518), + 57: uint16(33520), + 58: uint16(33522), + 59: uint16(33523), + 60: uint16(33525), + 61: uint16(33526), + 62: uint16(33528), + 63: uint16(33530), + 64: uint16(33532), + 65: uint16(33533), + 66: uint16(33534), + 67: uint16(33535), + 68: uint16(33536), + 69: uint16(33546), + 70: uint16(33547), + 71: uint16(33549), + 72: uint16(33552), + 73: uint16(33554), + 74: uint16(33555), + 75: uint16(33558), + 76: uint16(33560), + 77: uint16(33561), + 78: uint16(33565), + 79: uint16(33566), + 80: uint16(33567), + 81: uint16(33568), + 82: uint16(33569), + 83: uint16(33570), + 84: uint16(33571), + 85: uint16(33572), + 86: uint16(33573), + 87: uint16(33574), + 88: uint16(33577), + 89: uint16(33578), + 90: uint16(33582), + 91: uint16(33584), + 92: uint16(33586), + 93: uint16(33591), + 94: uint16(33595), + 95: uint16(33597), + 96: uint16(21860), + 97: uint16(33086), + 98: uint16(30130), + 99: uint16(30382), + 100: uint16(21305), + 101: uint16(30174), + 102: uint16(20731), + 103: uint16(23617), + 104: uint16(35692), + 105: uint16(31687), + 106: uint16(20559), + 107: uint16(29255), + 108: uint16(39575), + 109: uint16(39128), + 110: uint16(28418), + 111: uint16(29922), + 112: uint16(31080), + 113: uint16(25735), + 114: uint16(30629), + 115: uint16(25340), + 116: uint16(39057), + 117: uint16(36139), + 118: uint16(21697), + 119: uint16(32856), + 120: uint16(20050), + 121: uint16(22378), + 122: uint16(33529), + 123: uint16(33805), + 124: uint16(24179), + 125: uint16(20973), + 126: uint16(29942), + 127: uint16(35780), + 128: uint16(23631), + 129: uint16(22369), + 130: uint16(27900), + 131: uint16(39047), + 132: uint16(23110), + 133: uint16(30772), + 134: uint16(39748), + 135: uint16(36843), + 136: uint16(31893), + 137: uint16(21078), + 138: uint16(25169), + 139: uint16(38138), + 140: uint16(20166), + 141: uint16(33670), + 142: uint16(33889), + 143: uint16(33769), + 144: uint16(33970), + 145: uint16(22484), + 146: uint16(26420), + 147: uint16(22275), + 148: uint16(26222), + 149: uint16(28006), + 150: uint16(35889), + 151: uint16(26333), + 152: uint16(28689), + 153: uint16(26399), + 154: uint16(27450), + 155: uint16(26646), + 156: uint16(25114), + 157: uint16(22971), + 158: uint16(19971), + 159: uint16(20932), + 160: uint16(28422), + 161: uint16(26578), + 162: uint16(27791), + 163: uint16(20854), + 164: uint16(26827), + 165: uint16(22855), + 166: uint16(27495), + 167: uint16(30054), + 168: uint16(23822), + 169: uint16(33040), + 170: uint16(40784), + 171: uint16(26071), + 172: uint16(31048), + 173: uint16(31041), + 174: uint16(39569), + 175: uint16(36215), + 176: uint16(23682), + 177: uint16(20062), + 178: uint16(20225), + 179: uint16(21551), + 180: uint16(22865), + 181: uint16(30732), + 182: uint16(22120), + 183: uint16(27668), + 184: uint16(36804), + 185: uint16(24323), + 186: uint16(27773), + 187: uint16(27875), + 188: uint16(35755), + 189: uint16(25488), + }, + 70: { + 0: uint16(33598), + 1: uint16(33599), + 2: uint16(33601), + 3: uint16(33602), + 4: uint16(33604), + 5: uint16(33605), + 6: uint16(33608), + 7: uint16(33610), + 8: uint16(33611), + 9: uint16(33612), + 10: uint16(33613), + 11: uint16(33614), + 12: uint16(33619), + 13: uint16(33621), + 14: uint16(33622), + 15: uint16(33623), + 16: uint16(33624), + 17: uint16(33625), + 18: uint16(33629), + 19: uint16(33634), + 20: uint16(33648), + 21: uint16(33649), + 22: uint16(33650), + 23: uint16(33651), + 24: uint16(33652), + 25: uint16(33653), + 26: uint16(33654), + 27: uint16(33657), + 28: uint16(33658), + 29: uint16(33662), + 30: uint16(33663), + 31: uint16(33664), + 32: uint16(33665), + 33: uint16(33666), + 34: uint16(33667), + 35: uint16(33668), + 36: uint16(33671), + 37: uint16(33672), + 38: uint16(33674), + 39: uint16(33675), + 40: uint16(33676), + 41: uint16(33677), + 42: uint16(33679), + 43: uint16(33680), + 44: uint16(33681), + 45: uint16(33684), + 46: uint16(33685), + 47: uint16(33686), + 48: uint16(33687), + 49: uint16(33689), + 50: uint16(33690), + 51: uint16(33693), + 52: uint16(33695), + 53: uint16(33697), + 54: uint16(33698), + 55: uint16(33699), + 56: uint16(33700), + 57: uint16(33701), + 58: uint16(33702), + 59: uint16(33703), + 60: uint16(33708), + 61: uint16(33709), + 62: uint16(33710), + 63: uint16(33711), + 64: uint16(33717), + 65: uint16(33723), + 66: uint16(33726), + 67: uint16(33727), + 68: uint16(33730), + 69: uint16(33731), + 70: uint16(33732), + 71: uint16(33734), + 72: uint16(33736), + 73: uint16(33737), + 74: uint16(33739), + 75: uint16(33741), + 76: uint16(33742), + 77: uint16(33744), + 78: uint16(33745), + 79: uint16(33746), + 80: uint16(33747), + 81: uint16(33749), + 82: uint16(33751), + 83: uint16(33753), + 84: uint16(33754), + 85: uint16(33755), + 86: uint16(33758), + 87: uint16(33762), + 88: uint16(33763), + 89: uint16(33764), + 90: uint16(33766), + 91: uint16(33767), + 92: uint16(33768), + 93: uint16(33771), + 94: uint16(33772), + 95: uint16(33773), + 96: uint16(24688), + 97: uint16(27965), + 98: uint16(29301), + 99: uint16(25190), + 100: uint16(38030), + 101: uint16(38085), + 102: uint16(21315), + 103: uint16(36801), + 104: uint16(31614), + 105: uint16(20191), + 106: uint16(35878), + 107: uint16(20094), + 108: uint16(40660), + 109: uint16(38065), + 110: uint16(38067), + 111: uint16(21069), + 112: uint16(28508), + 113: uint16(36963), + 114: uint16(27973), + 115: uint16(35892), + 116: uint16(22545), + 117: uint16(23884), + 118: uint16(27424), + 119: uint16(27465), + 120: uint16(26538), + 121: uint16(21595), + 122: uint16(33108), + 123: uint16(32652), + 124: uint16(22681), + 125: uint16(34103), + 126: uint16(24378), + 127: uint16(25250), + 128: uint16(27207), + 129: uint16(38201), + 130: uint16(25970), + 131: uint16(24708), + 132: uint16(26725), + 133: uint16(30631), + 134: uint16(20052), + 135: uint16(20392), + 136: uint16(24039), + 137: uint16(38808), + 138: uint16(25772), + 139: uint16(32728), + 140: uint16(23789), + 141: uint16(20431), + 142: uint16(31373), + 143: uint16(20999), + 144: uint16(33540), + 145: uint16(19988), + 146: uint16(24623), + 147: uint16(31363), + 148: uint16(38054), + 149: uint16(20405), + 150: uint16(20146), + 151: uint16(31206), + 152: uint16(29748), + 153: uint16(21220), + 154: uint16(33465), + 155: uint16(25810), + 156: uint16(31165), + 157: uint16(23517), + 158: uint16(27777), + 159: uint16(38738), + 160: uint16(36731), + 161: uint16(27682), + 162: uint16(20542), + 163: uint16(21375), + 164: uint16(28165), + 165: uint16(25806), + 166: uint16(26228), + 167: uint16(27696), + 168: uint16(24773), + 169: uint16(39031), + 170: uint16(35831), + 171: uint16(24198), + 172: uint16(29756), + 173: uint16(31351), + 174: uint16(31179), + 175: uint16(19992), + 176: uint16(37041), + 177: uint16(29699), + 178: uint16(27714), + 179: uint16(22234), + 180: uint16(37195), + 181: uint16(27845), + 182: uint16(36235), + 183: uint16(21306), + 184: uint16(34502), + 185: uint16(26354), + 186: uint16(36527), + 187: uint16(23624), + 188: uint16(39537), + 189: uint16(28192), + }, + 71: { + 0: uint16(33774), + 1: uint16(33775), + 2: uint16(33779), + 3: uint16(33780), + 4: uint16(33781), + 5: uint16(33782), + 6: uint16(33783), + 7: uint16(33786), + 8: uint16(33787), + 9: uint16(33788), + 10: uint16(33790), + 11: uint16(33791), + 12: uint16(33792), + 13: uint16(33794), + 14: uint16(33797), + 15: uint16(33799), + 16: uint16(33800), + 17: uint16(33801), + 18: uint16(33802), + 19: uint16(33808), + 20: uint16(33810), + 21: uint16(33811), + 22: uint16(33812), + 23: uint16(33813), + 24: uint16(33814), + 25: uint16(33815), + 26: uint16(33817), + 27: uint16(33818), + 28: uint16(33819), + 29: uint16(33822), + 30: uint16(33823), + 31: uint16(33824), + 32: uint16(33825), + 33: uint16(33826), + 34: uint16(33827), + 35: uint16(33833), + 36: uint16(33834), + 37: uint16(33835), + 38: uint16(33836), + 39: uint16(33837), + 40: uint16(33838), + 41: uint16(33839), + 42: uint16(33840), + 43: uint16(33842), + 44: uint16(33843), + 45: uint16(33844), + 46: uint16(33845), + 47: uint16(33846), + 48: uint16(33847), + 49: uint16(33849), + 50: uint16(33850), + 51: uint16(33851), + 52: uint16(33854), + 53: uint16(33855), + 54: uint16(33856), + 55: uint16(33857), + 56: uint16(33858), + 57: uint16(33859), + 58: uint16(33860), + 59: uint16(33861), + 60: uint16(33863), + 61: uint16(33864), + 62: uint16(33865), + 63: uint16(33866), + 64: uint16(33867), + 65: uint16(33868), + 66: uint16(33869), + 67: uint16(33870), + 68: uint16(33871), + 69: uint16(33872), + 70: uint16(33874), + 71: uint16(33875), + 72: uint16(33876), + 73: uint16(33877), + 74: uint16(33878), + 75: uint16(33880), + 76: uint16(33885), + 77: uint16(33886), + 78: uint16(33887), + 79: uint16(33888), + 80: uint16(33890), + 81: uint16(33892), + 82: uint16(33893), + 83: uint16(33894), + 84: uint16(33895), + 85: uint16(33896), + 86: uint16(33898), + 87: uint16(33902), + 88: uint16(33903), + 89: uint16(33904), + 90: uint16(33906), + 91: uint16(33908), + 92: uint16(33911), + 93: uint16(33913), + 94: uint16(33915), + 95: uint16(33916), + 96: uint16(21462), + 97: uint16(23094), + 98: uint16(40843), + 99: uint16(36259), + 100: uint16(21435), + 101: uint16(22280), + 102: uint16(39079), + 103: uint16(26435), + 104: uint16(37275), + 105: uint16(27849), + 106: uint16(20840), + 107: uint16(30154), + 108: uint16(25331), + 109: uint16(29356), + 110: uint16(21048), + 111: uint16(21149), + 112: uint16(32570), + 113: uint16(28820), + 114: uint16(30264), + 115: uint16(21364), + 116: uint16(40522), + 117: uint16(27063), + 118: uint16(30830), + 119: uint16(38592), + 120: uint16(35033), + 121: uint16(32676), + 122: uint16(28982), + 123: uint16(29123), + 124: uint16(20873), + 125: uint16(26579), + 126: uint16(29924), + 127: uint16(22756), + 128: uint16(25880), + 129: uint16(22199), + 130: uint16(35753), + 131: uint16(39286), + 132: uint16(25200), + 133: uint16(32469), + 134: uint16(24825), + 135: uint16(28909), + 136: uint16(22764), + 137: uint16(20161), + 138: uint16(20154), + 139: uint16(24525), + 140: uint16(38887), + 141: uint16(20219), + 142: uint16(35748), + 143: uint16(20995), + 144: uint16(22922), + 145: uint16(32427), + 146: uint16(25172), + 147: uint16(20173), + 148: uint16(26085), + 149: uint16(25102), + 150: uint16(33592), + 151: uint16(33993), + 152: uint16(33635), + 153: uint16(34701), + 154: uint16(29076), + 155: uint16(28342), + 156: uint16(23481), + 157: uint16(32466), + 158: uint16(20887), + 159: uint16(25545), + 160: uint16(26580), + 161: uint16(32905), + 162: uint16(33593), + 163: uint16(34837), + 164: uint16(20754), + 165: uint16(23418), + 166: uint16(22914), + 167: uint16(36785), + 168: uint16(20083), + 169: uint16(27741), + 170: uint16(20837), + 171: uint16(35109), + 172: uint16(36719), + 173: uint16(38446), + 174: uint16(34122), + 175: uint16(29790), + 176: uint16(38160), + 177: uint16(38384), + 178: uint16(28070), + 179: uint16(33509), + 180: uint16(24369), + 181: uint16(25746), + 182: uint16(27922), + 183: uint16(33832), + 184: uint16(33134), + 185: uint16(40131), + 186: uint16(22622), + 187: uint16(36187), + 188: uint16(19977), + 189: uint16(21441), + }, + 72: { + 0: uint16(33917), + 1: uint16(33918), + 2: uint16(33919), + 3: uint16(33920), + 4: uint16(33921), + 5: uint16(33923), + 6: uint16(33924), + 7: uint16(33925), + 8: uint16(33926), + 9: uint16(33930), + 10: uint16(33933), + 11: uint16(33935), + 12: uint16(33936), + 13: uint16(33937), + 14: uint16(33938), + 15: uint16(33939), + 16: uint16(33940), + 17: uint16(33941), + 18: uint16(33942), + 19: uint16(33944), + 20: uint16(33946), + 21: uint16(33947), + 22: uint16(33949), + 23: uint16(33950), + 24: uint16(33951), + 25: uint16(33952), + 26: uint16(33954), + 27: uint16(33955), + 28: uint16(33956), + 29: uint16(33957), + 30: uint16(33958), + 31: uint16(33959), + 32: uint16(33960), + 33: uint16(33961), + 34: uint16(33962), + 35: uint16(33963), + 36: uint16(33964), + 37: uint16(33965), + 38: uint16(33966), + 39: uint16(33968), + 40: uint16(33969), + 41: uint16(33971), + 42: uint16(33973), + 43: uint16(33974), + 44: uint16(33975), + 45: uint16(33979), + 46: uint16(33980), + 47: uint16(33982), + 48: uint16(33984), + 49: uint16(33986), + 50: uint16(33987), + 51: uint16(33989), + 52: uint16(33990), + 53: uint16(33991), + 54: uint16(33992), + 55: uint16(33995), + 56: uint16(33996), + 57: uint16(33998), + 58: uint16(33999), + 59: uint16(34002), + 60: uint16(34004), + 61: uint16(34005), + 62: uint16(34007), + 63: uint16(34008), + 64: uint16(34009), + 65: uint16(34010), + 66: uint16(34011), + 67: uint16(34012), + 68: uint16(34014), + 69: uint16(34017), + 70: uint16(34018), + 71: uint16(34020), + 72: uint16(34023), + 73: uint16(34024), + 74: uint16(34025), + 75: uint16(34026), + 76: uint16(34027), + 77: uint16(34029), + 78: uint16(34030), + 79: uint16(34031), + 80: uint16(34033), + 81: uint16(34034), + 82: uint16(34035), + 83: uint16(34036), + 84: uint16(34037), + 85: uint16(34038), + 86: uint16(34039), + 87: uint16(34040), + 88: uint16(34041), + 89: uint16(34042), + 90: uint16(34043), + 91: uint16(34045), + 92: uint16(34046), + 93: uint16(34048), + 94: uint16(34049), + 95: uint16(34050), + 96: uint16(20254), + 97: uint16(25955), + 98: uint16(26705), + 99: uint16(21971), + 100: uint16(20007), + 101: uint16(25620), + 102: uint16(39578), + 103: uint16(25195), + 104: uint16(23234), + 105: uint16(29791), + 106: uint16(33394), + 107: uint16(28073), + 108: uint16(26862), + 109: uint16(20711), + 110: uint16(33678), + 111: uint16(30722), + 112: uint16(26432), + 113: uint16(21049), + 114: uint16(27801), + 115: uint16(32433), + 116: uint16(20667), + 117: uint16(21861), + 118: uint16(29022), + 119: uint16(31579), + 120: uint16(26194), + 121: uint16(29642), + 122: uint16(33515), + 123: uint16(26441), + 124: uint16(23665), + 125: uint16(21024), + 126: uint16(29053), + 127: uint16(34923), + 128: uint16(38378), + 129: uint16(38485), + 130: uint16(25797), + 131: uint16(36193), + 132: uint16(33203), + 133: uint16(21892), + 134: uint16(27733), + 135: uint16(25159), + 136: uint16(32558), + 137: uint16(22674), + 138: uint16(20260), + 139: uint16(21830), + 140: uint16(36175), + 141: uint16(26188), + 142: uint16(19978), + 143: uint16(23578), + 144: uint16(35059), + 145: uint16(26786), + 146: uint16(25422), + 147: uint16(31245), + 148: uint16(28903), + 149: uint16(33421), + 150: uint16(21242), + 151: uint16(38902), + 152: uint16(23569), + 153: uint16(21736), + 154: uint16(37045), + 155: uint16(32461), + 156: uint16(22882), + 157: uint16(36170), + 158: uint16(34503), + 159: uint16(33292), + 160: uint16(33293), + 161: uint16(36198), + 162: uint16(25668), + 163: uint16(23556), + 164: uint16(24913), + 165: uint16(28041), + 166: uint16(31038), + 167: uint16(35774), + 168: uint16(30775), + 169: uint16(30003), + 170: uint16(21627), + 171: uint16(20280), + 172: uint16(36523), + 173: uint16(28145), + 174: uint16(23072), + 175: uint16(32453), + 176: uint16(31070), + 177: uint16(27784), + 178: uint16(23457), + 179: uint16(23158), + 180: uint16(29978), + 181: uint16(32958), + 182: uint16(24910), + 183: uint16(28183), + 184: uint16(22768), + 185: uint16(29983), + 186: uint16(29989), + 187: uint16(29298), + 188: uint16(21319), + 189: uint16(32499), + }, + 73: { + 0: uint16(34051), + 1: uint16(34052), + 2: uint16(34053), + 3: uint16(34054), + 4: uint16(34055), + 5: uint16(34056), + 6: uint16(34057), + 7: uint16(34058), + 8: uint16(34059), + 9: uint16(34061), + 10: uint16(34062), + 11: uint16(34063), + 12: uint16(34064), + 13: uint16(34066), + 14: uint16(34068), + 15: uint16(34069), + 16: uint16(34070), + 17: uint16(34072), + 18: uint16(34073), + 19: uint16(34075), + 20: uint16(34076), + 21: uint16(34077), + 22: uint16(34078), + 23: uint16(34080), + 24: uint16(34082), + 25: uint16(34083), + 26: uint16(34084), + 27: uint16(34085), + 28: uint16(34086), + 29: uint16(34087), + 30: uint16(34088), + 31: uint16(34089), + 32: uint16(34090), + 33: uint16(34093), + 34: uint16(34094), + 35: uint16(34095), + 36: uint16(34096), + 37: uint16(34097), + 38: uint16(34098), + 39: uint16(34099), + 40: uint16(34100), + 41: uint16(34101), + 42: uint16(34102), + 43: uint16(34110), + 44: uint16(34111), + 45: uint16(34112), + 46: uint16(34113), + 47: uint16(34114), + 48: uint16(34116), + 49: uint16(34117), + 50: uint16(34118), + 51: uint16(34119), + 52: uint16(34123), + 53: uint16(34124), + 54: uint16(34125), + 55: uint16(34126), + 56: uint16(34127), + 57: uint16(34128), + 58: uint16(34129), + 59: uint16(34130), + 60: uint16(34131), + 61: uint16(34132), + 62: uint16(34133), + 63: uint16(34135), + 64: uint16(34136), + 65: uint16(34138), + 66: uint16(34139), + 67: uint16(34140), + 68: uint16(34141), + 69: uint16(34143), + 70: uint16(34144), + 71: uint16(34145), + 72: uint16(34146), + 73: uint16(34147), + 74: uint16(34149), + 75: uint16(34150), + 76: uint16(34151), + 77: uint16(34153), + 78: uint16(34154), + 79: uint16(34155), + 80: uint16(34156), + 81: uint16(34157), + 82: uint16(34158), + 83: uint16(34159), + 84: uint16(34160), + 85: uint16(34161), + 86: uint16(34163), + 87: uint16(34165), + 88: uint16(34166), + 89: uint16(34167), + 90: uint16(34168), + 91: uint16(34172), + 92: uint16(34173), + 93: uint16(34175), + 94: uint16(34176), + 95: uint16(34177), + 96: uint16(30465), + 97: uint16(30427), + 98: uint16(21097), + 99: uint16(32988), + 100: uint16(22307), + 101: uint16(24072), + 102: uint16(22833), + 103: uint16(29422), + 104: uint16(26045), + 105: uint16(28287), + 106: uint16(35799), + 107: uint16(23608), + 108: uint16(34417), + 109: uint16(21313), + 110: uint16(30707), + 111: uint16(25342), + 112: uint16(26102), + 113: uint16(20160), + 114: uint16(39135), + 115: uint16(34432), + 116: uint16(23454), + 117: uint16(35782), + 118: uint16(21490), + 119: uint16(30690), + 120: uint16(20351), + 121: uint16(23630), + 122: uint16(39542), + 123: uint16(22987), + 124: uint16(24335), + 125: uint16(31034), + 126: uint16(22763), + 127: uint16(19990), + 128: uint16(26623), + 129: uint16(20107), + 130: uint16(25325), + 131: uint16(35475), + 132: uint16(36893), + 133: uint16(21183), + 134: uint16(26159), + 135: uint16(21980), + 136: uint16(22124), + 137: uint16(36866), + 138: uint16(20181), + 139: uint16(20365), + 140: uint16(37322), + 141: uint16(39280), + 142: uint16(27663), + 143: uint16(24066), + 144: uint16(24643), + 145: uint16(23460), + 146: uint16(35270), + 147: uint16(35797), + 148: uint16(25910), + 149: uint16(25163), + 150: uint16(39318), + 151: uint16(23432), + 152: uint16(23551), + 153: uint16(25480), + 154: uint16(21806), + 155: uint16(21463), + 156: uint16(30246), + 157: uint16(20861), + 158: uint16(34092), + 159: uint16(26530), + 160: uint16(26803), + 161: uint16(27530), + 162: uint16(25234), + 163: uint16(36755), + 164: uint16(21460), + 165: uint16(33298), + 166: uint16(28113), + 167: uint16(30095), + 168: uint16(20070), + 169: uint16(36174), + 170: uint16(23408), + 171: uint16(29087), + 172: uint16(34223), + 173: uint16(26257), + 174: uint16(26329), + 175: uint16(32626), + 176: uint16(34560), + 177: uint16(40653), + 178: uint16(40736), + 179: uint16(23646), + 180: uint16(26415), + 181: uint16(36848), + 182: uint16(26641), + 183: uint16(26463), + 184: uint16(25101), + 185: uint16(31446), + 186: uint16(22661), + 187: uint16(24246), + 188: uint16(25968), + 189: uint16(28465), + }, + 74: { + 0: uint16(34178), + 1: uint16(34179), + 2: uint16(34182), + 3: uint16(34184), + 4: uint16(34185), + 5: uint16(34186), + 6: uint16(34187), + 7: uint16(34188), + 8: uint16(34189), + 9: uint16(34190), + 10: uint16(34192), + 11: uint16(34193), + 12: uint16(34194), + 13: uint16(34195), + 14: uint16(34196), + 15: uint16(34197), + 16: uint16(34198), + 17: uint16(34199), + 18: uint16(34200), + 19: uint16(34201), + 20: uint16(34202), + 21: uint16(34205), + 22: uint16(34206), + 23: uint16(34207), + 24: uint16(34208), + 25: uint16(34209), + 26: uint16(34210), + 27: uint16(34211), + 28: uint16(34213), + 29: uint16(34214), + 30: uint16(34215), + 31: uint16(34217), + 32: uint16(34219), + 33: uint16(34220), + 34: uint16(34221), + 35: uint16(34225), + 36: uint16(34226), + 37: uint16(34227), + 38: uint16(34228), + 39: uint16(34229), + 40: uint16(34230), + 41: uint16(34232), + 42: uint16(34234), + 43: uint16(34235), + 44: uint16(34236), + 45: uint16(34237), + 46: uint16(34238), + 47: uint16(34239), + 48: uint16(34240), + 49: uint16(34242), + 50: uint16(34243), + 51: uint16(34244), + 52: uint16(34245), + 53: uint16(34246), + 54: uint16(34247), + 55: uint16(34248), + 56: uint16(34250), + 57: uint16(34251), + 58: uint16(34252), + 59: uint16(34253), + 60: uint16(34254), + 61: uint16(34257), + 62: uint16(34258), + 63: uint16(34260), + 64: uint16(34262), + 65: uint16(34263), + 66: uint16(34264), + 67: uint16(34265), + 68: uint16(34266), + 69: uint16(34267), + 70: uint16(34269), + 71: uint16(34270), + 72: uint16(34271), + 73: uint16(34272), + 74: uint16(34273), + 75: uint16(34274), + 76: uint16(34275), + 77: uint16(34277), + 78: uint16(34278), + 79: uint16(34279), + 80: uint16(34280), + 81: uint16(34282), + 82: uint16(34283), + 83: uint16(34284), + 84: uint16(34285), + 85: uint16(34286), + 86: uint16(34287), + 87: uint16(34288), + 88: uint16(34289), + 89: uint16(34290), + 90: uint16(34291), + 91: uint16(34292), + 92: uint16(34293), + 93: uint16(34294), + 94: uint16(34295), + 95: uint16(34296), + 96: uint16(24661), + 97: uint16(21047), + 98: uint16(32781), + 99: uint16(25684), + 100: uint16(34928), + 101: uint16(29993), + 102: uint16(24069), + 103: uint16(26643), + 104: uint16(25332), + 105: uint16(38684), + 106: uint16(21452), + 107: uint16(29245), + 108: uint16(35841), + 109: uint16(27700), + 110: uint16(30561), + 111: uint16(31246), + 112: uint16(21550), + 113: uint16(30636), + 114: uint16(39034), + 115: uint16(33308), + 116: uint16(35828), + 117: uint16(30805), + 118: uint16(26388), + 119: uint16(28865), + 120: uint16(26031), + 121: uint16(25749), + 122: uint16(22070), + 123: uint16(24605), + 124: uint16(31169), + 125: uint16(21496), + 126: uint16(19997), + 127: uint16(27515), + 128: uint16(32902), + 129: uint16(23546), + 130: uint16(21987), + 131: uint16(22235), + 132: uint16(20282), + 133: uint16(20284), + 134: uint16(39282), + 135: uint16(24051), + 136: uint16(26494), + 137: uint16(32824), + 138: uint16(24578), + 139: uint16(39042), + 140: uint16(36865), + 141: uint16(23435), + 142: uint16(35772), + 143: uint16(35829), + 144: uint16(25628), + 145: uint16(33368), + 146: uint16(25822), + 147: uint16(22013), + 148: uint16(33487), + 149: uint16(37221), + 150: uint16(20439), + 151: uint16(32032), + 152: uint16(36895), + 153: uint16(31903), + 154: uint16(20723), + 155: uint16(22609), + 156: uint16(28335), + 157: uint16(23487), + 158: uint16(35785), + 159: uint16(32899), + 160: uint16(37240), + 161: uint16(33948), + 162: uint16(31639), + 163: uint16(34429), + 164: uint16(38539), + 165: uint16(38543), + 166: uint16(32485), + 167: uint16(39635), + 168: uint16(30862), + 169: uint16(23681), + 170: uint16(31319), + 171: uint16(36930), + 172: uint16(38567), + 173: uint16(31071), + 174: uint16(23385), + 175: uint16(25439), + 176: uint16(31499), + 177: uint16(34001), + 178: uint16(26797), + 179: uint16(21766), + 180: uint16(32553), + 181: uint16(29712), + 182: uint16(32034), + 183: uint16(38145), + 184: uint16(25152), + 185: uint16(22604), + 186: uint16(20182), + 187: uint16(23427), + 188: uint16(22905), + 189: uint16(22612), + }, + 75: { + 0: uint16(34297), + 1: uint16(34298), + 2: uint16(34300), + 3: uint16(34301), + 4: uint16(34302), + 5: uint16(34304), + 6: uint16(34305), + 7: uint16(34306), + 8: uint16(34307), + 9: uint16(34308), + 10: uint16(34310), + 11: uint16(34311), + 12: uint16(34312), + 13: uint16(34313), + 14: uint16(34314), + 15: uint16(34315), + 16: uint16(34316), + 17: uint16(34317), + 18: uint16(34318), + 19: uint16(34319), + 20: uint16(34320), + 21: uint16(34322), + 22: uint16(34323), + 23: uint16(34324), + 24: uint16(34325), + 25: uint16(34327), + 26: uint16(34328), + 27: uint16(34329), + 28: uint16(34330), + 29: uint16(34331), + 30: uint16(34332), + 31: uint16(34333), + 32: uint16(34334), + 33: uint16(34335), + 34: uint16(34336), + 35: uint16(34337), + 36: uint16(34338), + 37: uint16(34339), + 38: uint16(34340), + 39: uint16(34341), + 40: uint16(34342), + 41: uint16(34344), + 42: uint16(34346), + 43: uint16(34347), + 44: uint16(34348), + 45: uint16(34349), + 46: uint16(34350), + 47: uint16(34351), + 48: uint16(34352), + 49: uint16(34353), + 50: uint16(34354), + 51: uint16(34355), + 52: uint16(34356), + 53: uint16(34357), + 54: uint16(34358), + 55: uint16(34359), + 56: uint16(34361), + 57: uint16(34362), + 58: uint16(34363), + 59: uint16(34365), + 60: uint16(34366), + 61: uint16(34367), + 62: uint16(34368), + 63: uint16(34369), + 64: uint16(34370), + 65: uint16(34371), + 66: uint16(34372), + 67: uint16(34373), + 68: uint16(34374), + 69: uint16(34375), + 70: uint16(34376), + 71: uint16(34377), + 72: uint16(34378), + 73: uint16(34379), + 74: uint16(34380), + 75: uint16(34386), + 76: uint16(34387), + 77: uint16(34389), + 78: uint16(34390), + 79: uint16(34391), + 80: uint16(34392), + 81: uint16(34393), + 82: uint16(34395), + 83: uint16(34396), + 84: uint16(34397), + 85: uint16(34399), + 86: uint16(34400), + 87: uint16(34401), + 88: uint16(34403), + 89: uint16(34404), + 90: uint16(34405), + 91: uint16(34406), + 92: uint16(34407), + 93: uint16(34408), + 94: uint16(34409), + 95: uint16(34410), + 96: uint16(29549), + 97: uint16(25374), + 98: uint16(36427), + 99: uint16(36367), + 100: uint16(32974), + 101: uint16(33492), + 102: uint16(25260), + 103: uint16(21488), + 104: uint16(27888), + 105: uint16(37214), + 106: uint16(22826), + 107: uint16(24577), + 108: uint16(27760), + 109: uint16(22349), + 110: uint16(25674), + 111: uint16(36138), + 112: uint16(30251), + 113: uint16(28393), + 114: uint16(22363), + 115: uint16(27264), + 116: uint16(30192), + 117: uint16(28525), + 118: uint16(35885), + 119: uint16(35848), + 120: uint16(22374), + 121: uint16(27631), + 122: uint16(34962), + 123: uint16(30899), + 124: uint16(25506), + 125: uint16(21497), + 126: uint16(28845), + 127: uint16(27748), + 128: uint16(22616), + 129: uint16(25642), + 130: uint16(22530), + 131: uint16(26848), + 132: uint16(33179), + 133: uint16(21776), + 134: uint16(31958), + 135: uint16(20504), + 136: uint16(36538), + 137: uint16(28108), + 138: uint16(36255), + 139: uint16(28907), + 140: uint16(25487), + 141: uint16(28059), + 142: uint16(28372), + 143: uint16(32486), + 144: uint16(33796), + 145: uint16(26691), + 146: uint16(36867), + 147: uint16(28120), + 148: uint16(38518), + 149: uint16(35752), + 150: uint16(22871), + 151: uint16(29305), + 152: uint16(34276), + 153: uint16(33150), + 154: uint16(30140), + 155: uint16(35466), + 156: uint16(26799), + 157: uint16(21076), + 158: uint16(36386), + 159: uint16(38161), + 160: uint16(25552), + 161: uint16(39064), + 162: uint16(36420), + 163: uint16(21884), + 164: uint16(20307), + 165: uint16(26367), + 166: uint16(22159), + 167: uint16(24789), + 168: uint16(28053), + 169: uint16(21059), + 170: uint16(23625), + 171: uint16(22825), + 172: uint16(28155), + 173: uint16(22635), + 174: uint16(30000), + 175: uint16(29980), + 176: uint16(24684), + 177: uint16(33300), + 178: uint16(33094), + 179: uint16(25361), + 180: uint16(26465), + 181: uint16(36834), + 182: uint16(30522), + 183: uint16(36339), + 184: uint16(36148), + 185: uint16(38081), + 186: uint16(24086), + 187: uint16(21381), + 188: uint16(21548), + 189: uint16(28867), + }, + 76: { + 0: uint16(34413), + 1: uint16(34415), + 2: uint16(34416), + 3: uint16(34418), + 4: uint16(34419), + 5: uint16(34420), + 6: uint16(34421), + 7: uint16(34422), + 8: uint16(34423), + 9: uint16(34424), + 10: uint16(34435), + 11: uint16(34436), + 12: uint16(34437), + 13: uint16(34438), + 14: uint16(34439), + 15: uint16(34440), + 16: uint16(34441), + 17: uint16(34446), + 18: uint16(34447), + 19: uint16(34448), + 20: uint16(34449), + 21: uint16(34450), + 22: uint16(34452), + 23: uint16(34454), + 24: uint16(34455), + 25: uint16(34456), + 26: uint16(34457), + 27: uint16(34458), + 28: uint16(34459), + 29: uint16(34462), + 30: uint16(34463), + 31: uint16(34464), + 32: uint16(34465), + 33: uint16(34466), + 34: uint16(34469), + 35: uint16(34470), + 36: uint16(34475), + 37: uint16(34477), + 38: uint16(34478), + 39: uint16(34482), + 40: uint16(34483), + 41: uint16(34487), + 42: uint16(34488), + 43: uint16(34489), + 44: uint16(34491), + 45: uint16(34492), + 46: uint16(34493), + 47: uint16(34494), + 48: uint16(34495), + 49: uint16(34497), + 50: uint16(34498), + 51: uint16(34499), + 52: uint16(34501), + 53: uint16(34504), + 54: uint16(34508), + 55: uint16(34509), + 56: uint16(34514), + 57: uint16(34515), + 58: uint16(34517), + 59: uint16(34518), + 60: uint16(34519), + 61: uint16(34522), + 62: uint16(34524), + 63: uint16(34525), + 64: uint16(34528), + 65: uint16(34529), + 66: uint16(34530), + 67: uint16(34531), + 68: uint16(34533), + 69: uint16(34534), + 70: uint16(34535), + 71: uint16(34536), + 72: uint16(34538), + 73: uint16(34539), + 74: uint16(34540), + 75: uint16(34543), + 76: uint16(34549), + 77: uint16(34550), + 78: uint16(34551), + 79: uint16(34554), + 80: uint16(34555), + 81: uint16(34556), + 82: uint16(34557), + 83: uint16(34559), + 84: uint16(34561), + 85: uint16(34564), + 86: uint16(34565), + 87: uint16(34566), + 88: uint16(34571), + 89: uint16(34572), + 90: uint16(34574), + 91: uint16(34575), + 92: uint16(34576), + 93: uint16(34577), + 94: uint16(34580), + 95: uint16(34582), + 96: uint16(27712), + 97: uint16(24311), + 98: uint16(20572), + 99: uint16(20141), + 100: uint16(24237), + 101: uint16(25402), + 102: uint16(33351), + 103: uint16(36890), + 104: uint16(26704), + 105: uint16(37230), + 106: uint16(30643), + 107: uint16(21516), + 108: uint16(38108), + 109: uint16(24420), + 110: uint16(31461), + 111: uint16(26742), + 112: uint16(25413), + 113: uint16(31570), + 114: uint16(32479), + 115: uint16(30171), + 116: uint16(20599), + 117: uint16(25237), + 118: uint16(22836), + 119: uint16(36879), + 120: uint16(20984), + 121: uint16(31171), + 122: uint16(31361), + 123: uint16(22270), + 124: uint16(24466), + 125: uint16(36884), + 126: uint16(28034), + 127: uint16(23648), + 128: uint16(22303), + 129: uint16(21520), + 130: uint16(20820), + 131: uint16(28237), + 132: uint16(22242), + 133: uint16(25512), + 134: uint16(39059), + 135: uint16(33151), + 136: uint16(34581), + 137: uint16(35114), + 138: uint16(36864), + 139: uint16(21534), + 140: uint16(23663), + 141: uint16(33216), + 142: uint16(25302), + 143: uint16(25176), + 144: uint16(33073), + 145: uint16(40501), + 146: uint16(38464), + 147: uint16(39534), + 148: uint16(39548), + 149: uint16(26925), + 150: uint16(22949), + 151: uint16(25299), + 152: uint16(21822), + 153: uint16(25366), + 154: uint16(21703), + 155: uint16(34521), + 156: uint16(27964), + 157: uint16(23043), + 158: uint16(29926), + 159: uint16(34972), + 160: uint16(27498), + 161: uint16(22806), + 162: uint16(35916), + 163: uint16(24367), + 164: uint16(28286), + 165: uint16(29609), + 166: uint16(39037), + 167: uint16(20024), + 168: uint16(28919), + 169: uint16(23436), + 170: uint16(30871), + 171: uint16(25405), + 172: uint16(26202), + 173: uint16(30358), + 174: uint16(24779), + 175: uint16(23451), + 176: uint16(23113), + 177: uint16(19975), + 178: uint16(33109), + 179: uint16(27754), + 180: uint16(29579), + 181: uint16(20129), + 182: uint16(26505), + 183: uint16(32593), + 184: uint16(24448), + 185: uint16(26106), + 186: uint16(26395), + 187: uint16(24536), + 188: uint16(22916), + 189: uint16(23041), + }, + 77: { + 0: uint16(34585), + 1: uint16(34587), + 2: uint16(34589), + 3: uint16(34591), + 4: uint16(34592), + 5: uint16(34596), + 6: uint16(34598), + 7: uint16(34599), + 8: uint16(34600), + 9: uint16(34602), + 10: uint16(34603), + 11: uint16(34604), + 12: uint16(34605), + 13: uint16(34607), + 14: uint16(34608), + 15: uint16(34610), + 16: uint16(34611), + 17: uint16(34613), + 18: uint16(34614), + 19: uint16(34616), + 20: uint16(34617), + 21: uint16(34618), + 22: uint16(34620), + 23: uint16(34621), + 24: uint16(34624), + 25: uint16(34625), + 26: uint16(34626), + 27: uint16(34627), + 28: uint16(34628), + 29: uint16(34629), + 30: uint16(34630), + 31: uint16(34634), + 32: uint16(34635), + 33: uint16(34637), + 34: uint16(34639), + 35: uint16(34640), + 36: uint16(34641), + 37: uint16(34642), + 38: uint16(34644), + 39: uint16(34645), + 40: uint16(34646), + 41: uint16(34648), + 42: uint16(34650), + 43: uint16(34651), + 44: uint16(34652), + 45: uint16(34653), + 46: uint16(34654), + 47: uint16(34655), + 48: uint16(34657), + 49: uint16(34658), + 50: uint16(34662), + 51: uint16(34663), + 52: uint16(34664), + 53: uint16(34665), + 54: uint16(34666), + 55: uint16(34667), + 56: uint16(34668), + 57: uint16(34669), + 58: uint16(34671), + 59: uint16(34673), + 60: uint16(34674), + 61: uint16(34675), + 62: uint16(34677), + 63: uint16(34679), + 64: uint16(34680), + 65: uint16(34681), + 66: uint16(34682), + 67: uint16(34687), + 68: uint16(34688), + 69: uint16(34689), + 70: uint16(34692), + 71: uint16(34694), + 72: uint16(34695), + 73: uint16(34697), + 74: uint16(34698), + 75: uint16(34700), + 76: uint16(34702), + 77: uint16(34703), + 78: uint16(34704), + 79: uint16(34705), + 80: uint16(34706), + 81: uint16(34708), + 82: uint16(34709), + 83: uint16(34710), + 84: uint16(34712), + 85: uint16(34713), + 86: uint16(34714), + 87: uint16(34715), + 88: uint16(34716), + 89: uint16(34717), + 90: uint16(34718), + 91: uint16(34720), + 92: uint16(34721), + 93: uint16(34722), + 94: uint16(34723), + 95: uint16(34724), + 96: uint16(24013), + 97: uint16(24494), + 98: uint16(21361), + 99: uint16(38886), + 100: uint16(36829), + 101: uint16(26693), + 102: uint16(22260), + 103: uint16(21807), + 104: uint16(24799), + 105: uint16(20026), + 106: uint16(28493), + 107: uint16(32500), + 108: uint16(33479), + 109: uint16(33806), + 110: uint16(22996), + 111: uint16(20255), + 112: uint16(20266), + 113: uint16(23614), + 114: uint16(32428), + 115: uint16(26410), + 116: uint16(34074), + 117: uint16(21619), + 118: uint16(30031), + 119: uint16(32963), + 120: uint16(21890), + 121: uint16(39759), + 122: uint16(20301), + 123: uint16(28205), + 124: uint16(35859), + 125: uint16(23561), + 126: uint16(24944), + 127: uint16(21355), + 128: uint16(30239), + 129: uint16(28201), + 130: uint16(34442), + 131: uint16(25991), + 132: uint16(38395), + 133: uint16(32441), + 134: uint16(21563), + 135: uint16(31283), + 136: uint16(32010), + 137: uint16(38382), + 138: uint16(21985), + 139: uint16(32705), + 140: uint16(29934), + 141: uint16(25373), + 142: uint16(34583), + 143: uint16(28065), + 144: uint16(31389), + 145: uint16(25105), + 146: uint16(26017), + 147: uint16(21351), + 148: uint16(25569), + 149: uint16(27779), + 150: uint16(24043), + 151: uint16(21596), + 152: uint16(38056), + 153: uint16(20044), + 154: uint16(27745), + 155: uint16(35820), + 156: uint16(23627), + 157: uint16(26080), + 158: uint16(33436), + 159: uint16(26791), + 160: uint16(21566), + 161: uint16(21556), + 162: uint16(27595), + 163: uint16(27494), + 164: uint16(20116), + 165: uint16(25410), + 166: uint16(21320), + 167: uint16(33310), + 168: uint16(20237), + 169: uint16(20398), + 170: uint16(22366), + 171: uint16(25098), + 172: uint16(38654), + 173: uint16(26212), + 174: uint16(29289), + 175: uint16(21247), + 176: uint16(21153), + 177: uint16(24735), + 178: uint16(35823), + 179: uint16(26132), + 180: uint16(29081), + 181: uint16(26512), + 182: uint16(35199), + 183: uint16(30802), + 184: uint16(30717), + 185: uint16(26224), + 186: uint16(22075), + 187: uint16(21560), + 188: uint16(38177), + 189: uint16(29306), + }, + 78: { + 0: uint16(34725), + 1: uint16(34726), + 2: uint16(34727), + 3: uint16(34729), + 4: uint16(34730), + 5: uint16(34734), + 6: uint16(34736), + 7: uint16(34737), + 8: uint16(34738), + 9: uint16(34740), + 10: uint16(34742), + 11: uint16(34743), + 12: uint16(34744), + 13: uint16(34745), + 14: uint16(34747), + 15: uint16(34748), + 16: uint16(34750), + 17: uint16(34751), + 18: uint16(34753), + 19: uint16(34754), + 20: uint16(34755), + 21: uint16(34756), + 22: uint16(34757), + 23: uint16(34759), + 24: uint16(34760), + 25: uint16(34761), + 26: uint16(34764), + 27: uint16(34765), + 28: uint16(34766), + 29: uint16(34767), + 30: uint16(34768), + 31: uint16(34772), + 32: uint16(34773), + 33: uint16(34774), + 34: uint16(34775), + 35: uint16(34776), + 36: uint16(34777), + 37: uint16(34778), + 38: uint16(34780), + 39: uint16(34781), + 40: uint16(34782), + 41: uint16(34783), + 42: uint16(34785), + 43: uint16(34786), + 44: uint16(34787), + 45: uint16(34788), + 46: uint16(34790), + 47: uint16(34791), + 48: uint16(34792), + 49: uint16(34793), + 50: uint16(34795), + 51: uint16(34796), + 52: uint16(34797), + 53: uint16(34799), + 54: uint16(34800), + 55: uint16(34801), + 56: uint16(34802), + 57: uint16(34803), + 58: uint16(34804), + 59: uint16(34805), + 60: uint16(34806), + 61: uint16(34807), + 62: uint16(34808), + 63: uint16(34810), + 64: uint16(34811), + 65: uint16(34812), + 66: uint16(34813), + 67: uint16(34815), + 68: uint16(34816), + 69: uint16(34817), + 70: uint16(34818), + 71: uint16(34820), + 72: uint16(34821), + 73: uint16(34822), + 74: uint16(34823), + 75: uint16(34824), + 76: uint16(34825), + 77: uint16(34827), + 78: uint16(34828), + 79: uint16(34829), + 80: uint16(34830), + 81: uint16(34831), + 82: uint16(34832), + 83: uint16(34833), + 84: uint16(34834), + 85: uint16(34836), + 86: uint16(34839), + 87: uint16(34840), + 88: uint16(34841), + 89: uint16(34842), + 90: uint16(34844), + 91: uint16(34845), + 92: uint16(34846), + 93: uint16(34847), + 94: uint16(34848), + 95: uint16(34851), + 96: uint16(31232), + 97: uint16(24687), + 98: uint16(24076), + 99: uint16(24713), + 100: uint16(33181), + 101: uint16(22805), + 102: uint16(24796), + 103: uint16(29060), + 104: uint16(28911), + 105: uint16(28330), + 106: uint16(27728), + 107: uint16(29312), + 108: uint16(27268), + 109: uint16(34989), + 110: uint16(24109), + 111: uint16(20064), + 112: uint16(23219), + 113: uint16(21916), + 114: uint16(38115), + 115: uint16(27927), + 116: uint16(31995), + 117: uint16(38553), + 118: uint16(25103), + 119: uint16(32454), + 120: uint16(30606), + 121: uint16(34430), + 122: uint16(21283), + 123: uint16(38686), + 124: uint16(36758), + 125: uint16(26247), + 126: uint16(23777), + 127: uint16(20384), + 128: uint16(29421), + 129: uint16(19979), + 130: uint16(21414), + 131: uint16(22799), + 132: uint16(21523), + 133: uint16(25472), + 134: uint16(38184), + 135: uint16(20808), + 136: uint16(20185), + 137: uint16(40092), + 138: uint16(32420), + 139: uint16(21688), + 140: uint16(36132), + 141: uint16(34900), + 142: uint16(33335), + 143: uint16(38386), + 144: uint16(28046), + 145: uint16(24358), + 146: uint16(23244), + 147: uint16(26174), + 148: uint16(38505), + 149: uint16(29616), + 150: uint16(29486), + 151: uint16(21439), + 152: uint16(33146), + 153: uint16(39301), + 154: uint16(32673), + 155: uint16(23466), + 156: uint16(38519), + 157: uint16(38480), + 158: uint16(32447), + 159: uint16(30456), + 160: uint16(21410), + 161: uint16(38262), + 162: uint16(39321), + 163: uint16(31665), + 164: uint16(35140), + 165: uint16(28248), + 166: uint16(20065), + 167: uint16(32724), + 168: uint16(31077), + 169: uint16(35814), + 170: uint16(24819), + 171: uint16(21709), + 172: uint16(20139), + 173: uint16(39033), + 174: uint16(24055), + 175: uint16(27233), + 176: uint16(20687), + 177: uint16(21521), + 178: uint16(35937), + 179: uint16(33831), + 180: uint16(30813), + 181: uint16(38660), + 182: uint16(21066), + 183: uint16(21742), + 184: uint16(22179), + 185: uint16(38144), + 186: uint16(28040), + 187: uint16(23477), + 188: uint16(28102), + 189: uint16(26195), + }, + 79: { + 0: uint16(34852), + 1: uint16(34853), + 2: uint16(34854), + 3: uint16(34855), + 4: uint16(34856), + 5: uint16(34857), + 6: uint16(34858), + 7: uint16(34859), + 8: uint16(34860), + 9: uint16(34861), + 10: uint16(34862), + 11: uint16(34863), + 12: uint16(34864), + 13: uint16(34865), + 14: uint16(34867), + 15: uint16(34868), + 16: uint16(34869), + 17: uint16(34870), + 18: uint16(34871), + 19: uint16(34872), + 20: uint16(34874), + 21: uint16(34875), + 22: uint16(34877), + 23: uint16(34878), + 24: uint16(34879), + 25: uint16(34881), + 26: uint16(34882), + 27: uint16(34883), + 28: uint16(34886), + 29: uint16(34887), + 30: uint16(34888), + 31: uint16(34889), + 32: uint16(34890), + 33: uint16(34891), + 34: uint16(34894), + 35: uint16(34895), + 36: uint16(34896), + 37: uint16(34897), + 38: uint16(34898), + 39: uint16(34899), + 40: uint16(34901), + 41: uint16(34902), + 42: uint16(34904), + 43: uint16(34906), + 44: uint16(34907), + 45: uint16(34908), + 46: uint16(34909), + 47: uint16(34910), + 48: uint16(34911), + 49: uint16(34912), + 50: uint16(34918), + 51: uint16(34919), + 52: uint16(34922), + 53: uint16(34925), + 54: uint16(34927), + 55: uint16(34929), + 56: uint16(34931), + 57: uint16(34932), + 58: uint16(34933), + 59: uint16(34934), + 60: uint16(34936), + 61: uint16(34937), + 62: uint16(34938), + 63: uint16(34939), + 64: uint16(34940), + 65: uint16(34944), + 66: uint16(34947), + 67: uint16(34950), + 68: uint16(34951), + 69: uint16(34953), + 70: uint16(34954), + 71: uint16(34956), + 72: uint16(34958), + 73: uint16(34959), + 74: uint16(34960), + 75: uint16(34961), + 76: uint16(34963), + 77: uint16(34964), + 78: uint16(34965), + 79: uint16(34967), + 80: uint16(34968), + 81: uint16(34969), + 82: uint16(34970), + 83: uint16(34971), + 84: uint16(34973), + 85: uint16(34974), + 86: uint16(34975), + 87: uint16(34976), + 88: uint16(34977), + 89: uint16(34979), + 90: uint16(34981), + 91: uint16(34982), + 92: uint16(34983), + 93: uint16(34984), + 94: uint16(34985), + 95: uint16(34986), + 96: uint16(23567), + 97: uint16(23389), + 98: uint16(26657), + 99: uint16(32918), + 100: uint16(21880), + 101: uint16(31505), + 102: uint16(25928), + 103: uint16(26964), + 104: uint16(20123), + 105: uint16(27463), + 106: uint16(34638), + 107: uint16(38795), + 108: uint16(21327), + 109: uint16(25375), + 110: uint16(25658), + 111: uint16(37034), + 112: uint16(26012), + 113: uint16(32961), + 114: uint16(35856), + 115: uint16(20889), + 116: uint16(26800), + 117: uint16(21368), + 118: uint16(34809), + 119: uint16(25032), + 120: uint16(27844), + 121: uint16(27899), + 122: uint16(35874), + 123: uint16(23633), + 124: uint16(34218), + 125: uint16(33455), + 126: uint16(38156), + 127: uint16(27427), + 128: uint16(36763), + 129: uint16(26032), + 130: uint16(24571), + 131: uint16(24515), + 132: uint16(20449), + 133: uint16(34885), + 134: uint16(26143), + 135: uint16(33125), + 136: uint16(29481), + 137: uint16(24826), + 138: uint16(20852), + 139: uint16(21009), + 140: uint16(22411), + 141: uint16(24418), + 142: uint16(37026), + 143: uint16(34892), + 144: uint16(37266), + 145: uint16(24184), + 146: uint16(26447), + 147: uint16(24615), + 148: uint16(22995), + 149: uint16(20804), + 150: uint16(20982), + 151: uint16(33016), + 152: uint16(21256), + 153: uint16(27769), + 154: uint16(38596), + 155: uint16(29066), + 156: uint16(20241), + 157: uint16(20462), + 158: uint16(32670), + 159: uint16(26429), + 160: uint16(21957), + 161: uint16(38152), + 162: uint16(31168), + 163: uint16(34966), + 164: uint16(32483), + 165: uint16(22687), + 166: uint16(25100), + 167: uint16(38656), + 168: uint16(34394), + 169: uint16(22040), + 170: uint16(39035), + 171: uint16(24464), + 172: uint16(35768), + 173: uint16(33988), + 174: uint16(37207), + 175: uint16(21465), + 176: uint16(26093), + 177: uint16(24207), + 178: uint16(30044), + 179: uint16(24676), + 180: uint16(32110), + 181: uint16(23167), + 182: uint16(32490), + 183: uint16(32493), + 184: uint16(36713), + 185: uint16(21927), + 186: uint16(23459), + 187: uint16(24748), + 188: uint16(26059), + 189: uint16(29572), + }, + 80: { + 0: uint16(34988), + 1: uint16(34990), + 2: uint16(34991), + 3: uint16(34992), + 4: uint16(34994), + 5: uint16(34995), + 6: uint16(34996), + 7: uint16(34997), + 8: uint16(34998), + 9: uint16(35000), + 10: uint16(35001), + 11: uint16(35002), + 12: uint16(35003), + 13: uint16(35005), + 14: uint16(35006), + 15: uint16(35007), + 16: uint16(35008), + 17: uint16(35011), + 18: uint16(35012), + 19: uint16(35015), + 20: uint16(35016), + 21: uint16(35018), + 22: uint16(35019), + 23: uint16(35020), + 24: uint16(35021), + 25: uint16(35023), + 26: uint16(35024), + 27: uint16(35025), + 28: uint16(35027), + 29: uint16(35030), + 30: uint16(35031), + 31: uint16(35034), + 32: uint16(35035), + 33: uint16(35036), + 34: uint16(35037), + 35: uint16(35038), + 36: uint16(35040), + 37: uint16(35041), + 38: uint16(35046), + 39: uint16(35047), + 40: uint16(35049), + 41: uint16(35050), + 42: uint16(35051), + 43: uint16(35052), + 44: uint16(35053), + 45: uint16(35054), + 46: uint16(35055), + 47: uint16(35058), + 48: uint16(35061), + 49: uint16(35062), + 50: uint16(35063), + 51: uint16(35066), + 52: uint16(35067), + 53: uint16(35069), + 54: uint16(35071), + 55: uint16(35072), + 56: uint16(35073), + 57: uint16(35075), + 58: uint16(35076), + 59: uint16(35077), + 60: uint16(35078), + 61: uint16(35079), + 62: uint16(35080), + 63: uint16(35081), + 64: uint16(35083), + 65: uint16(35084), + 66: uint16(35085), + 67: uint16(35086), + 68: uint16(35087), + 69: uint16(35089), + 70: uint16(35092), + 71: uint16(35093), + 72: uint16(35094), + 73: uint16(35095), + 74: uint16(35096), + 75: uint16(35100), + 76: uint16(35101), + 77: uint16(35102), + 78: uint16(35103), + 79: uint16(35104), + 80: uint16(35106), + 81: uint16(35107), + 82: uint16(35108), + 83: uint16(35110), + 84: uint16(35111), + 85: uint16(35112), + 86: uint16(35113), + 87: uint16(35116), + 88: uint16(35117), + 89: uint16(35118), + 90: uint16(35119), + 91: uint16(35121), + 92: uint16(35122), + 93: uint16(35123), + 94: uint16(35125), + 95: uint16(35127), + 96: uint16(36873), + 97: uint16(30307), + 98: uint16(30505), + 99: uint16(32474), + 100: uint16(38772), + 101: uint16(34203), + 102: uint16(23398), + 103: uint16(31348), + 104: uint16(38634), + 105: uint16(34880), + 106: uint16(21195), + 107: uint16(29071), + 108: uint16(24490), + 109: uint16(26092), + 110: uint16(35810), + 111: uint16(23547), + 112: uint16(39535), + 113: uint16(24033), + 114: uint16(27529), + 115: uint16(27739), + 116: uint16(35757), + 117: uint16(35759), + 118: uint16(36874), + 119: uint16(36805), + 120: uint16(21387), + 121: uint16(25276), + 122: uint16(40486), + 123: uint16(40493), + 124: uint16(21568), + 125: uint16(20011), + 126: uint16(33469), + 127: uint16(29273), + 128: uint16(34460), + 129: uint16(23830), + 130: uint16(34905), + 131: uint16(28079), + 132: uint16(38597), + 133: uint16(21713), + 134: uint16(20122), + 135: uint16(35766), + 136: uint16(28937), + 137: uint16(21693), + 138: uint16(38409), + 139: uint16(28895), + 140: uint16(28153), + 141: uint16(30416), + 142: uint16(20005), + 143: uint16(30740), + 144: uint16(34578), + 145: uint16(23721), + 146: uint16(24310), + 147: uint16(35328), + 148: uint16(39068), + 149: uint16(38414), + 150: uint16(28814), + 151: uint16(27839), + 152: uint16(22852), + 153: uint16(25513), + 154: uint16(30524), + 155: uint16(34893), + 156: uint16(28436), + 157: uint16(33395), + 158: uint16(22576), + 159: uint16(29141), + 160: uint16(21388), + 161: uint16(30746), + 162: uint16(38593), + 163: uint16(21761), + 164: uint16(24422), + 165: uint16(28976), + 166: uint16(23476), + 167: uint16(35866), + 168: uint16(39564), + 169: uint16(27523), + 170: uint16(22830), + 171: uint16(40495), + 172: uint16(31207), + 173: uint16(26472), + 174: uint16(25196), + 175: uint16(20335), + 176: uint16(30113), + 177: uint16(32650), + 178: uint16(27915), + 179: uint16(38451), + 180: uint16(27687), + 181: uint16(20208), + 182: uint16(30162), + 183: uint16(20859), + 184: uint16(26679), + 185: uint16(28478), + 186: uint16(36992), + 187: uint16(33136), + 188: uint16(22934), + 189: uint16(29814), + }, + 81: { + 0: uint16(35128), + 1: uint16(35129), + 2: uint16(35130), + 3: uint16(35131), + 4: uint16(35132), + 5: uint16(35133), + 6: uint16(35134), + 7: uint16(35135), + 8: uint16(35136), + 9: uint16(35138), + 10: uint16(35139), + 11: uint16(35141), + 12: uint16(35142), + 13: uint16(35143), + 14: uint16(35144), + 15: uint16(35145), + 16: uint16(35146), + 17: uint16(35147), + 18: uint16(35148), + 19: uint16(35149), + 20: uint16(35150), + 21: uint16(35151), + 22: uint16(35152), + 23: uint16(35153), + 24: uint16(35154), + 25: uint16(35155), + 26: uint16(35156), + 27: uint16(35157), + 28: uint16(35158), + 29: uint16(35159), + 30: uint16(35160), + 31: uint16(35161), + 32: uint16(35162), + 33: uint16(35163), + 34: uint16(35164), + 35: uint16(35165), + 36: uint16(35168), + 37: uint16(35169), + 38: uint16(35170), + 39: uint16(35171), + 40: uint16(35172), + 41: uint16(35173), + 42: uint16(35175), + 43: uint16(35176), + 44: uint16(35177), + 45: uint16(35178), + 46: uint16(35179), + 47: uint16(35180), + 48: uint16(35181), + 49: uint16(35182), + 50: uint16(35183), + 51: uint16(35184), + 52: uint16(35185), + 53: uint16(35186), + 54: uint16(35187), + 55: uint16(35188), + 56: uint16(35189), + 57: uint16(35190), + 58: uint16(35191), + 59: uint16(35192), + 60: uint16(35193), + 61: uint16(35194), + 62: uint16(35196), + 63: uint16(35197), + 64: uint16(35198), + 65: uint16(35200), + 66: uint16(35202), + 67: uint16(35204), + 68: uint16(35205), + 69: uint16(35207), + 70: uint16(35208), + 71: uint16(35209), + 72: uint16(35210), + 73: uint16(35211), + 74: uint16(35212), + 75: uint16(35213), + 76: uint16(35214), + 77: uint16(35215), + 78: uint16(35216), + 79: uint16(35217), + 80: uint16(35218), + 81: uint16(35219), + 82: uint16(35220), + 83: uint16(35221), + 84: uint16(35222), + 85: uint16(35223), + 86: uint16(35224), + 87: uint16(35225), + 88: uint16(35226), + 89: uint16(35227), + 90: uint16(35228), + 91: uint16(35229), + 92: uint16(35230), + 93: uint16(35231), + 94: uint16(35232), + 95: uint16(35233), + 96: uint16(25671), + 97: uint16(23591), + 98: uint16(36965), + 99: uint16(31377), + 100: uint16(35875), + 101: uint16(23002), + 102: uint16(21676), + 103: uint16(33280), + 104: uint16(33647), + 105: uint16(35201), + 106: uint16(32768), + 107: uint16(26928), + 108: uint16(22094), + 109: uint16(32822), + 110: uint16(29239), + 111: uint16(37326), + 112: uint16(20918), + 113: uint16(20063), + 114: uint16(39029), + 115: uint16(25494), + 116: uint16(19994), + 117: uint16(21494), + 118: uint16(26355), + 119: uint16(33099), + 120: uint16(22812), + 121: uint16(28082), + 122: uint16(19968), + 123: uint16(22777), + 124: uint16(21307), + 125: uint16(25558), + 126: uint16(38129), + 127: uint16(20381), + 128: uint16(20234), + 129: uint16(34915), + 130: uint16(39056), + 131: uint16(22839), + 132: uint16(36951), + 133: uint16(31227), + 134: uint16(20202), + 135: uint16(33008), + 136: uint16(30097), + 137: uint16(27778), + 138: uint16(23452), + 139: uint16(23016), + 140: uint16(24413), + 141: uint16(26885), + 142: uint16(34433), + 143: uint16(20506), + 144: uint16(24050), + 145: uint16(20057), + 146: uint16(30691), + 147: uint16(20197), + 148: uint16(33402), + 149: uint16(25233), + 150: uint16(26131), + 151: uint16(37009), + 152: uint16(23673), + 153: uint16(20159), + 154: uint16(24441), + 155: uint16(33222), + 156: uint16(36920), + 157: uint16(32900), + 158: uint16(30123), + 159: uint16(20134), + 160: uint16(35028), + 161: uint16(24847), + 162: uint16(27589), + 163: uint16(24518), + 164: uint16(20041), + 165: uint16(30410), + 166: uint16(28322), + 167: uint16(35811), + 168: uint16(35758), + 169: uint16(35850), + 170: uint16(35793), + 171: uint16(24322), + 172: uint16(32764), + 173: uint16(32716), + 174: uint16(32462), + 175: uint16(33589), + 176: uint16(33643), + 177: uint16(22240), + 178: uint16(27575), + 179: uint16(38899), + 180: uint16(38452), + 181: uint16(23035), + 182: uint16(21535), + 183: uint16(38134), + 184: uint16(28139), + 185: uint16(23493), + 186: uint16(39278), + 187: uint16(23609), + 188: uint16(24341), + 189: uint16(38544), + }, + 82: { + 0: uint16(35234), + 1: uint16(35235), + 2: uint16(35236), + 3: uint16(35237), + 4: uint16(35238), + 5: uint16(35239), + 6: uint16(35240), + 7: uint16(35241), + 8: uint16(35242), + 9: uint16(35243), + 10: uint16(35244), + 11: uint16(35245), + 12: uint16(35246), + 13: uint16(35247), + 14: uint16(35248), + 15: uint16(35249), + 16: uint16(35250), + 17: uint16(35251), + 18: uint16(35252), + 19: uint16(35253), + 20: uint16(35254), + 21: uint16(35255), + 22: uint16(35256), + 23: uint16(35257), + 24: uint16(35258), + 25: uint16(35259), + 26: uint16(35260), + 27: uint16(35261), + 28: uint16(35262), + 29: uint16(35263), + 30: uint16(35264), + 31: uint16(35267), + 32: uint16(35277), + 33: uint16(35283), + 34: uint16(35284), + 35: uint16(35285), + 36: uint16(35287), + 37: uint16(35288), + 38: uint16(35289), + 39: uint16(35291), + 40: uint16(35293), + 41: uint16(35295), + 42: uint16(35296), + 43: uint16(35297), + 44: uint16(35298), + 45: uint16(35300), + 46: uint16(35303), + 47: uint16(35304), + 48: uint16(35305), + 49: uint16(35306), + 50: uint16(35308), + 51: uint16(35309), + 52: uint16(35310), + 53: uint16(35312), + 54: uint16(35313), + 55: uint16(35314), + 56: uint16(35316), + 57: uint16(35317), + 58: uint16(35318), + 59: uint16(35319), + 60: uint16(35320), + 61: uint16(35321), + 62: uint16(35322), + 63: uint16(35323), + 64: uint16(35324), + 65: uint16(35325), + 66: uint16(35326), + 67: uint16(35327), + 68: uint16(35329), + 69: uint16(35330), + 70: uint16(35331), + 71: uint16(35332), + 72: uint16(35333), + 73: uint16(35334), + 74: uint16(35336), + 75: uint16(35337), + 76: uint16(35338), + 77: uint16(35339), + 78: uint16(35340), + 79: uint16(35341), + 80: uint16(35342), + 81: uint16(35343), + 82: uint16(35344), + 83: uint16(35345), + 84: uint16(35346), + 85: uint16(35347), + 86: uint16(35348), + 87: uint16(35349), + 88: uint16(35350), + 89: uint16(35351), + 90: uint16(35352), + 91: uint16(35353), + 92: uint16(35354), + 93: uint16(35355), + 94: uint16(35356), + 95: uint16(35357), + 96: uint16(21360), + 97: uint16(33521), + 98: uint16(27185), + 99: uint16(23156), + 100: uint16(40560), + 101: uint16(24212), + 102: uint16(32552), + 103: uint16(33721), + 104: uint16(33828), + 105: uint16(33829), + 106: uint16(33639), + 107: uint16(34631), + 108: uint16(36814), + 109: uint16(36194), + 110: uint16(30408), + 111: uint16(24433), + 112: uint16(39062), + 113: uint16(30828), + 114: uint16(26144), + 115: uint16(21727), + 116: uint16(25317), + 117: uint16(20323), + 118: uint16(33219), + 119: uint16(30152), + 120: uint16(24248), + 121: uint16(38605), + 122: uint16(36362), + 123: uint16(34553), + 124: uint16(21647), + 125: uint16(27891), + 126: uint16(28044), + 127: uint16(27704), + 128: uint16(24703), + 129: uint16(21191), + 130: uint16(29992), + 131: uint16(24189), + 132: uint16(20248), + 133: uint16(24736), + 134: uint16(24551), + 135: uint16(23588), + 136: uint16(30001), + 137: uint16(37038), + 138: uint16(38080), + 139: uint16(29369), + 140: uint16(27833), + 141: uint16(28216), + 142: uint16(37193), + 143: uint16(26377), + 144: uint16(21451), + 145: uint16(21491), + 146: uint16(20305), + 147: uint16(37321), + 148: uint16(35825), + 149: uint16(21448), + 150: uint16(24188), + 151: uint16(36802), + 152: uint16(28132), + 153: uint16(20110), + 154: uint16(30402), + 155: uint16(27014), + 156: uint16(34398), + 157: uint16(24858), + 158: uint16(33286), + 159: uint16(20313), + 160: uint16(20446), + 161: uint16(36926), + 162: uint16(40060), + 163: uint16(24841), + 164: uint16(28189), + 165: uint16(28180), + 166: uint16(38533), + 167: uint16(20104), + 168: uint16(23089), + 169: uint16(38632), + 170: uint16(19982), + 171: uint16(23679), + 172: uint16(31161), + 173: uint16(23431), + 174: uint16(35821), + 175: uint16(32701), + 176: uint16(29577), + 177: uint16(22495), + 178: uint16(33419), + 179: uint16(37057), + 180: uint16(21505), + 181: uint16(36935), + 182: uint16(21947), + 183: uint16(23786), + 184: uint16(24481), + 185: uint16(24840), + 186: uint16(27442), + 187: uint16(29425), + 188: uint16(32946), + 189: uint16(35465), + }, + 83: { + 0: uint16(35358), + 1: uint16(35359), + 2: uint16(35360), + 3: uint16(35361), + 4: uint16(35362), + 5: uint16(35363), + 6: uint16(35364), + 7: uint16(35365), + 8: uint16(35366), + 9: uint16(35367), + 10: uint16(35368), + 11: uint16(35369), + 12: uint16(35370), + 13: uint16(35371), + 14: uint16(35372), + 15: uint16(35373), + 16: uint16(35374), + 17: uint16(35375), + 18: uint16(35376), + 19: uint16(35377), + 20: uint16(35378), + 21: uint16(35379), + 22: uint16(35380), + 23: uint16(35381), + 24: uint16(35382), + 25: uint16(35383), + 26: uint16(35384), + 27: uint16(35385), + 28: uint16(35386), + 29: uint16(35387), + 30: uint16(35388), + 31: uint16(35389), + 32: uint16(35391), + 33: uint16(35392), + 34: uint16(35393), + 35: uint16(35394), + 36: uint16(35395), + 37: uint16(35396), + 38: uint16(35397), + 39: uint16(35398), + 40: uint16(35399), + 41: uint16(35401), + 42: uint16(35402), + 43: uint16(35403), + 44: uint16(35404), + 45: uint16(35405), + 46: uint16(35406), + 47: uint16(35407), + 48: uint16(35408), + 49: uint16(35409), + 50: uint16(35410), + 51: uint16(35411), + 52: uint16(35412), + 53: uint16(35413), + 54: uint16(35414), + 55: uint16(35415), + 56: uint16(35416), + 57: uint16(35417), + 58: uint16(35418), + 59: uint16(35419), + 60: uint16(35420), + 61: uint16(35421), + 62: uint16(35422), + 63: uint16(35423), + 64: uint16(35424), + 65: uint16(35425), + 66: uint16(35426), + 67: uint16(35427), + 68: uint16(35428), + 69: uint16(35429), + 70: uint16(35430), + 71: uint16(35431), + 72: uint16(35432), + 73: uint16(35433), + 74: uint16(35434), + 75: uint16(35435), + 76: uint16(35436), + 77: uint16(35437), + 78: uint16(35438), + 79: uint16(35439), + 80: uint16(35440), + 81: uint16(35441), + 82: uint16(35442), + 83: uint16(35443), + 84: uint16(35444), + 85: uint16(35445), + 86: uint16(35446), + 87: uint16(35447), + 88: uint16(35448), + 89: uint16(35450), + 90: uint16(35451), + 91: uint16(35452), + 92: uint16(35453), + 93: uint16(35454), + 94: uint16(35455), + 95: uint16(35456), + 96: uint16(28020), + 97: uint16(23507), + 98: uint16(35029), + 99: uint16(39044), + 100: uint16(35947), + 101: uint16(39533), + 102: uint16(40499), + 103: uint16(28170), + 104: uint16(20900), + 105: uint16(20803), + 106: uint16(22435), + 107: uint16(34945), + 108: uint16(21407), + 109: uint16(25588), + 110: uint16(36757), + 111: uint16(22253), + 112: uint16(21592), + 113: uint16(22278), + 114: uint16(29503), + 115: uint16(28304), + 116: uint16(32536), + 117: uint16(36828), + 118: uint16(33489), + 119: uint16(24895), + 120: uint16(24616), + 121: uint16(38498), + 122: uint16(26352), + 123: uint16(32422), + 124: uint16(36234), + 125: uint16(36291), + 126: uint16(38053), + 127: uint16(23731), + 128: uint16(31908), + 129: uint16(26376), + 130: uint16(24742), + 131: uint16(38405), + 132: uint16(32792), + 133: uint16(20113), + 134: uint16(37095), + 135: uint16(21248), + 136: uint16(38504), + 137: uint16(20801), + 138: uint16(36816), + 139: uint16(34164), + 140: uint16(37213), + 141: uint16(26197), + 142: uint16(38901), + 143: uint16(23381), + 144: uint16(21277), + 145: uint16(30776), + 146: uint16(26434), + 147: uint16(26685), + 148: uint16(21705), + 149: uint16(28798), + 150: uint16(23472), + 151: uint16(36733), + 152: uint16(20877), + 153: uint16(22312), + 154: uint16(21681), + 155: uint16(25874), + 156: uint16(26242), + 157: uint16(36190), + 158: uint16(36163), + 159: uint16(33039), + 160: uint16(33900), + 161: uint16(36973), + 162: uint16(31967), + 163: uint16(20991), + 164: uint16(34299), + 165: uint16(26531), + 166: uint16(26089), + 167: uint16(28577), + 168: uint16(34468), + 169: uint16(36481), + 170: uint16(22122), + 171: uint16(36896), + 172: uint16(30338), + 173: uint16(28790), + 174: uint16(29157), + 175: uint16(36131), + 176: uint16(25321), + 177: uint16(21017), + 178: uint16(27901), + 179: uint16(36156), + 180: uint16(24590), + 181: uint16(22686), + 182: uint16(24974), + 183: uint16(26366), + 184: uint16(36192), + 185: uint16(25166), + 186: uint16(21939), + 187: uint16(28195), + 188: uint16(26413), + 189: uint16(36711), + }, + 84: { + 0: uint16(35457), + 1: uint16(35458), + 2: uint16(35459), + 3: uint16(35460), + 4: uint16(35461), + 5: uint16(35462), + 6: uint16(35463), + 7: uint16(35464), + 8: uint16(35467), + 9: uint16(35468), + 10: uint16(35469), + 11: uint16(35470), + 12: uint16(35471), + 13: uint16(35472), + 14: uint16(35473), + 15: uint16(35474), + 16: uint16(35476), + 17: uint16(35477), + 18: uint16(35478), + 19: uint16(35479), + 20: uint16(35480), + 21: uint16(35481), + 22: uint16(35482), + 23: uint16(35483), + 24: uint16(35484), + 25: uint16(35485), + 26: uint16(35486), + 27: uint16(35487), + 28: uint16(35488), + 29: uint16(35489), + 30: uint16(35490), + 31: uint16(35491), + 32: uint16(35492), + 33: uint16(35493), + 34: uint16(35494), + 35: uint16(35495), + 36: uint16(35496), + 37: uint16(35497), + 38: uint16(35498), + 39: uint16(35499), + 40: uint16(35500), + 41: uint16(35501), + 42: uint16(35502), + 43: uint16(35503), + 44: uint16(35504), + 45: uint16(35505), + 46: uint16(35506), + 47: uint16(35507), + 48: uint16(35508), + 49: uint16(35509), + 50: uint16(35510), + 51: uint16(35511), + 52: uint16(35512), + 53: uint16(35513), + 54: uint16(35514), + 55: uint16(35515), + 56: uint16(35516), + 57: uint16(35517), + 58: uint16(35518), + 59: uint16(35519), + 60: uint16(35520), + 61: uint16(35521), + 62: uint16(35522), + 63: uint16(35523), + 64: uint16(35524), + 65: uint16(35525), + 66: uint16(35526), + 67: uint16(35527), + 68: uint16(35528), + 69: uint16(35529), + 70: uint16(35530), + 71: uint16(35531), + 72: uint16(35532), + 73: uint16(35533), + 74: uint16(35534), + 75: uint16(35535), + 76: uint16(35536), + 77: uint16(35537), + 78: uint16(35538), + 79: uint16(35539), + 80: uint16(35540), + 81: uint16(35541), + 82: uint16(35542), + 83: uint16(35543), + 84: uint16(35544), + 85: uint16(35545), + 86: uint16(35546), + 87: uint16(35547), + 88: uint16(35548), + 89: uint16(35549), + 90: uint16(35550), + 91: uint16(35551), + 92: uint16(35552), + 93: uint16(35553), + 94: uint16(35554), + 95: uint16(35555), + 96: uint16(38113), + 97: uint16(38392), + 98: uint16(30504), + 99: uint16(26629), + 100: uint16(27048), + 101: uint16(21643), + 102: uint16(20045), + 103: uint16(28856), + 104: uint16(35784), + 105: uint16(25688), + 106: uint16(25995), + 107: uint16(23429), + 108: uint16(31364), + 109: uint16(20538), + 110: uint16(23528), + 111: uint16(30651), + 112: uint16(27617), + 113: uint16(35449), + 114: uint16(31896), + 115: uint16(27838), + 116: uint16(30415), + 117: uint16(26025), + 118: uint16(36759), + 119: uint16(23853), + 120: uint16(23637), + 121: uint16(34360), + 122: uint16(26632), + 123: uint16(21344), + 124: uint16(25112), + 125: uint16(31449), + 126: uint16(28251), + 127: uint16(32509), + 128: uint16(27167), + 129: uint16(31456), + 130: uint16(24432), + 131: uint16(28467), + 132: uint16(24352), + 133: uint16(25484), + 134: uint16(28072), + 135: uint16(26454), + 136: uint16(19976), + 137: uint16(24080), + 138: uint16(36134), + 139: uint16(20183), + 140: uint16(32960), + 141: uint16(30260), + 142: uint16(38556), + 143: uint16(25307), + 144: uint16(26157), + 145: uint16(25214), + 146: uint16(27836), + 147: uint16(36213), + 148: uint16(29031), + 149: uint16(32617), + 150: uint16(20806), + 151: uint16(32903), + 152: uint16(21484), + 153: uint16(36974), + 154: uint16(25240), + 155: uint16(21746), + 156: uint16(34544), + 157: uint16(36761), + 158: uint16(32773), + 159: uint16(38167), + 160: uint16(34071), + 161: uint16(36825), + 162: uint16(27993), + 163: uint16(29645), + 164: uint16(26015), + 165: uint16(30495), + 166: uint16(29956), + 167: uint16(30759), + 168: uint16(33275), + 169: uint16(36126), + 170: uint16(38024), + 171: uint16(20390), + 172: uint16(26517), + 173: uint16(30137), + 174: uint16(35786), + 175: uint16(38663), + 176: uint16(25391), + 177: uint16(38215), + 178: uint16(38453), + 179: uint16(33976), + 180: uint16(25379), + 181: uint16(30529), + 182: uint16(24449), + 183: uint16(29424), + 184: uint16(20105), + 185: uint16(24596), + 186: uint16(25972), + 187: uint16(25327), + 188: uint16(27491), + 189: uint16(25919), + }, + 85: { + 0: uint16(35556), + 1: uint16(35557), + 2: uint16(35558), + 3: uint16(35559), + 4: uint16(35560), + 5: uint16(35561), + 6: uint16(35562), + 7: uint16(35563), + 8: uint16(35564), + 9: uint16(35565), + 10: uint16(35566), + 11: uint16(35567), + 12: uint16(35568), + 13: uint16(35569), + 14: uint16(35570), + 15: uint16(35571), + 16: uint16(35572), + 17: uint16(35573), + 18: uint16(35574), + 19: uint16(35575), + 20: uint16(35576), + 21: uint16(35577), + 22: uint16(35578), + 23: uint16(35579), + 24: uint16(35580), + 25: uint16(35581), + 26: uint16(35582), + 27: uint16(35583), + 28: uint16(35584), + 29: uint16(35585), + 30: uint16(35586), + 31: uint16(35587), + 32: uint16(35588), + 33: uint16(35589), + 34: uint16(35590), + 35: uint16(35592), + 36: uint16(35593), + 37: uint16(35594), + 38: uint16(35595), + 39: uint16(35596), + 40: uint16(35597), + 41: uint16(35598), + 42: uint16(35599), + 43: uint16(35600), + 44: uint16(35601), + 45: uint16(35602), + 46: uint16(35603), + 47: uint16(35604), + 48: uint16(35605), + 49: uint16(35606), + 50: uint16(35607), + 51: uint16(35608), + 52: uint16(35609), + 53: uint16(35610), + 54: uint16(35611), + 55: uint16(35612), + 56: uint16(35613), + 57: uint16(35614), + 58: uint16(35615), + 59: uint16(35616), + 60: uint16(35617), + 61: uint16(35618), + 62: uint16(35619), + 63: uint16(35620), + 64: uint16(35621), + 65: uint16(35623), + 66: uint16(35624), + 67: uint16(35625), + 68: uint16(35626), + 69: uint16(35627), + 70: uint16(35628), + 71: uint16(35629), + 72: uint16(35630), + 73: uint16(35631), + 74: uint16(35632), + 75: uint16(35633), + 76: uint16(35634), + 77: uint16(35635), + 78: uint16(35636), + 79: uint16(35637), + 80: uint16(35638), + 81: uint16(35639), + 82: uint16(35640), + 83: uint16(35641), + 84: uint16(35642), + 85: uint16(35643), + 86: uint16(35644), + 87: uint16(35645), + 88: uint16(35646), + 89: uint16(35647), + 90: uint16(35648), + 91: uint16(35649), + 92: uint16(35650), + 93: uint16(35651), + 94: uint16(35652), + 95: uint16(35653), + 96: uint16(24103), + 97: uint16(30151), + 98: uint16(37073), + 99: uint16(35777), + 100: uint16(33437), + 101: uint16(26525), + 102: uint16(25903), + 103: uint16(21553), + 104: uint16(34584), + 105: uint16(30693), + 106: uint16(32930), + 107: uint16(33026), + 108: uint16(27713), + 109: uint16(20043), + 110: uint16(32455), + 111: uint16(32844), + 112: uint16(30452), + 113: uint16(26893), + 114: uint16(27542), + 115: uint16(25191), + 116: uint16(20540), + 117: uint16(20356), + 118: uint16(22336), + 119: uint16(25351), + 120: uint16(27490), + 121: uint16(36286), + 122: uint16(21482), + 123: uint16(26088), + 124: uint16(32440), + 125: uint16(24535), + 126: uint16(25370), + 127: uint16(25527), + 128: uint16(33267), + 129: uint16(33268), + 130: uint16(32622), + 131: uint16(24092), + 132: uint16(23769), + 133: uint16(21046), + 134: uint16(26234), + 135: uint16(31209), + 136: uint16(31258), + 137: uint16(36136), + 138: uint16(28825), + 139: uint16(30164), + 140: uint16(28382), + 141: uint16(27835), + 142: uint16(31378), + 143: uint16(20013), + 144: uint16(30405), + 145: uint16(24544), + 146: uint16(38047), + 147: uint16(34935), + 148: uint16(32456), + 149: uint16(31181), + 150: uint16(32959), + 151: uint16(37325), + 152: uint16(20210), + 153: uint16(20247), + 154: uint16(33311), + 155: uint16(21608), + 156: uint16(24030), + 157: uint16(27954), + 158: uint16(35788), + 159: uint16(31909), + 160: uint16(36724), + 161: uint16(32920), + 162: uint16(24090), + 163: uint16(21650), + 164: uint16(30385), + 165: uint16(23449), + 166: uint16(26172), + 167: uint16(39588), + 168: uint16(29664), + 169: uint16(26666), + 170: uint16(34523), + 171: uint16(26417), + 172: uint16(29482), + 173: uint16(35832), + 174: uint16(35803), + 175: uint16(36880), + 176: uint16(31481), + 177: uint16(28891), + 178: uint16(29038), + 179: uint16(25284), + 180: uint16(30633), + 181: uint16(22065), + 182: uint16(20027), + 183: uint16(33879), + 184: uint16(26609), + 185: uint16(21161), + 186: uint16(34496), + 187: uint16(36142), + 188: uint16(38136), + 189: uint16(31569), + }, + 86: { + 0: uint16(35654), + 1: uint16(35655), + 2: uint16(35656), + 3: uint16(35657), + 4: uint16(35658), + 5: uint16(35659), + 6: uint16(35660), + 7: uint16(35661), + 8: uint16(35662), + 9: uint16(35663), + 10: uint16(35664), + 11: uint16(35665), + 12: uint16(35666), + 13: uint16(35667), + 14: uint16(35668), + 15: uint16(35669), + 16: uint16(35670), + 17: uint16(35671), + 18: uint16(35672), + 19: uint16(35673), + 20: uint16(35674), + 21: uint16(35675), + 22: uint16(35676), + 23: uint16(35677), + 24: uint16(35678), + 25: uint16(35679), + 26: uint16(35680), + 27: uint16(35681), + 28: uint16(35682), + 29: uint16(35683), + 30: uint16(35684), + 31: uint16(35685), + 32: uint16(35687), + 33: uint16(35688), + 34: uint16(35689), + 35: uint16(35690), + 36: uint16(35691), + 37: uint16(35693), + 38: uint16(35694), + 39: uint16(35695), + 40: uint16(35696), + 41: uint16(35697), + 42: uint16(35698), + 43: uint16(35699), + 44: uint16(35700), + 45: uint16(35701), + 46: uint16(35702), + 47: uint16(35703), + 48: uint16(35704), + 49: uint16(35705), + 50: uint16(35706), + 51: uint16(35707), + 52: uint16(35708), + 53: uint16(35709), + 54: uint16(35710), + 55: uint16(35711), + 56: uint16(35712), + 57: uint16(35713), + 58: uint16(35714), + 59: uint16(35715), + 60: uint16(35716), + 61: uint16(35717), + 62: uint16(35718), + 63: uint16(35719), + 64: uint16(35720), + 65: uint16(35721), + 66: uint16(35722), + 67: uint16(35723), + 68: uint16(35724), + 69: uint16(35725), + 70: uint16(35726), + 71: uint16(35727), + 72: uint16(35728), + 73: uint16(35729), + 74: uint16(35730), + 75: uint16(35731), + 76: uint16(35732), + 77: uint16(35733), + 78: uint16(35734), + 79: uint16(35735), + 80: uint16(35736), + 81: uint16(35737), + 82: uint16(35738), + 83: uint16(35739), + 84: uint16(35740), + 85: uint16(35741), + 86: uint16(35742), + 87: uint16(35743), + 88: uint16(35756), + 89: uint16(35761), + 90: uint16(35771), + 91: uint16(35783), + 92: uint16(35792), + 93: uint16(35818), + 94: uint16(35849), + 95: uint16(35870), + 96: uint16(20303), + 97: uint16(27880), + 98: uint16(31069), + 99: uint16(39547), + 100: uint16(25235), + 101: uint16(29226), + 102: uint16(25341), + 103: uint16(19987), + 104: uint16(30742), + 105: uint16(36716), + 106: uint16(25776), + 107: uint16(36186), + 108: uint16(31686), + 109: uint16(26729), + 110: uint16(24196), + 111: uint16(35013), + 112: uint16(22918), + 113: uint16(25758), + 114: uint16(22766), + 115: uint16(29366), + 116: uint16(26894), + 117: uint16(38181), + 118: uint16(36861), + 119: uint16(36184), + 120: uint16(22368), + 121: uint16(32512), + 122: uint16(35846), + 123: uint16(20934), + 124: uint16(25417), + 125: uint16(25305), + 126: uint16(21331), + 127: uint16(26700), + 128: uint16(29730), + 129: uint16(33537), + 130: uint16(37196), + 131: uint16(21828), + 132: uint16(30528), + 133: uint16(28796), + 134: uint16(27978), + 135: uint16(20857), + 136: uint16(21672), + 137: uint16(36164), + 138: uint16(23039), + 139: uint16(28363), + 140: uint16(28100), + 141: uint16(23388), + 142: uint16(32043), + 143: uint16(20180), + 144: uint16(31869), + 145: uint16(28371), + 146: uint16(23376), + 147: uint16(33258), + 148: uint16(28173), + 149: uint16(23383), + 150: uint16(39683), + 151: uint16(26837), + 152: uint16(36394), + 153: uint16(23447), + 154: uint16(32508), + 155: uint16(24635), + 156: uint16(32437), + 157: uint16(37049), + 158: uint16(36208), + 159: uint16(22863), + 160: uint16(25549), + 161: uint16(31199), + 162: uint16(36275), + 163: uint16(21330), + 164: uint16(26063), + 165: uint16(31062), + 166: uint16(35781), + 167: uint16(38459), + 168: uint16(32452), + 169: uint16(38075), + 170: uint16(32386), + 171: uint16(22068), + 172: uint16(37257), + 173: uint16(26368), + 174: uint16(32618), + 175: uint16(23562), + 176: uint16(36981), + 177: uint16(26152), + 178: uint16(24038), + 179: uint16(20304), + 180: uint16(26590), + 181: uint16(20570), + 182: uint16(20316), + 183: uint16(22352), + 184: uint16(24231), + 185: uint16(59408), + 186: uint16(59409), + 187: uint16(59410), + 188: uint16(59411), + 189: uint16(59412), + }, + 87: { + 0: uint16(35896), + 1: uint16(35897), + 2: uint16(35898), + 3: uint16(35899), + 4: uint16(35900), + 5: uint16(35901), + 6: uint16(35902), + 7: uint16(35903), + 8: uint16(35904), + 9: uint16(35906), + 10: uint16(35907), + 11: uint16(35908), + 12: uint16(35909), + 13: uint16(35912), + 14: uint16(35914), + 15: uint16(35915), + 16: uint16(35917), + 17: uint16(35918), + 18: uint16(35919), + 19: uint16(35920), + 20: uint16(35921), + 21: uint16(35922), + 22: uint16(35923), + 23: uint16(35924), + 24: uint16(35926), + 25: uint16(35927), + 26: uint16(35928), + 27: uint16(35929), + 28: uint16(35931), + 29: uint16(35932), + 30: uint16(35933), + 31: uint16(35934), + 32: uint16(35935), + 33: uint16(35936), + 34: uint16(35939), + 35: uint16(35940), + 36: uint16(35941), + 37: uint16(35942), + 38: uint16(35943), + 39: uint16(35944), + 40: uint16(35945), + 41: uint16(35948), + 42: uint16(35949), + 43: uint16(35950), + 44: uint16(35951), + 45: uint16(35952), + 46: uint16(35953), + 47: uint16(35954), + 48: uint16(35956), + 49: uint16(35957), + 50: uint16(35958), + 51: uint16(35959), + 52: uint16(35963), + 53: uint16(35964), + 54: uint16(35965), + 55: uint16(35966), + 56: uint16(35967), + 57: uint16(35968), + 58: uint16(35969), + 59: uint16(35971), + 60: uint16(35972), + 61: uint16(35974), + 62: uint16(35975), + 63: uint16(35976), + 64: uint16(35979), + 65: uint16(35981), + 66: uint16(35982), + 67: uint16(35983), + 68: uint16(35984), + 69: uint16(35985), + 70: uint16(35986), + 71: uint16(35987), + 72: uint16(35989), + 73: uint16(35990), + 74: uint16(35991), + 75: uint16(35993), + 76: uint16(35994), + 77: uint16(35995), + 78: uint16(35996), + 79: uint16(35997), + 80: uint16(35998), + 81: uint16(35999), + 82: uint16(36000), + 83: uint16(36001), + 84: uint16(36002), + 85: uint16(36003), + 86: uint16(36004), + 87: uint16(36005), + 88: uint16(36006), + 89: uint16(36007), + 90: uint16(36008), + 91: uint16(36009), + 92: uint16(36010), + 93: uint16(36011), + 94: uint16(36012), + 95: uint16(36013), + 96: uint16(20109), + 97: uint16(19980), + 98: uint16(20800), + 99: uint16(19984), + 100: uint16(24319), + 101: uint16(21317), + 102: uint16(19989), + 103: uint16(20120), + 104: uint16(19998), + 105: uint16(39730), + 106: uint16(23404), + 107: uint16(22121), + 108: uint16(20008), + 109: uint16(31162), + 110: uint16(20031), + 111: uint16(21269), + 112: uint16(20039), + 113: uint16(22829), + 114: uint16(29243), + 115: uint16(21358), + 116: uint16(27664), + 117: uint16(22239), + 118: uint16(32996), + 119: uint16(39319), + 120: uint16(27603), + 121: uint16(30590), + 122: uint16(40727), + 123: uint16(20022), + 124: uint16(20127), + 125: uint16(40720), + 126: uint16(20060), + 127: uint16(20073), + 128: uint16(20115), + 129: uint16(33416), + 130: uint16(23387), + 131: uint16(21868), + 132: uint16(22031), + 133: uint16(20164), + 134: uint16(21389), + 135: uint16(21405), + 136: uint16(21411), + 137: uint16(21413), + 138: uint16(21422), + 139: uint16(38757), + 140: uint16(36189), + 141: uint16(21274), + 142: uint16(21493), + 143: uint16(21286), + 144: uint16(21294), + 145: uint16(21310), + 146: uint16(36188), + 147: uint16(21350), + 148: uint16(21347), + 149: uint16(20994), + 150: uint16(21000), + 151: uint16(21006), + 152: uint16(21037), + 153: uint16(21043), + 154: uint16(21055), + 155: uint16(21056), + 156: uint16(21068), + 157: uint16(21086), + 158: uint16(21089), + 159: uint16(21084), + 160: uint16(33967), + 161: uint16(21117), + 162: uint16(21122), + 163: uint16(21121), + 164: uint16(21136), + 165: uint16(21139), + 166: uint16(20866), + 167: uint16(32596), + 168: uint16(20155), + 169: uint16(20163), + 170: uint16(20169), + 171: uint16(20162), + 172: uint16(20200), + 173: uint16(20193), + 174: uint16(20203), + 175: uint16(20190), + 176: uint16(20251), + 177: uint16(20211), + 178: uint16(20258), + 179: uint16(20324), + 180: uint16(20213), + 181: uint16(20261), + 182: uint16(20263), + 183: uint16(20233), + 184: uint16(20267), + 185: uint16(20318), + 186: uint16(20327), + 187: uint16(25912), + 188: uint16(20314), + 189: uint16(20317), + }, + 88: { + 0: uint16(36014), + 1: uint16(36015), + 2: uint16(36016), + 3: uint16(36017), + 4: uint16(36018), + 5: uint16(36019), + 6: uint16(36020), + 7: uint16(36021), + 8: uint16(36022), + 9: uint16(36023), + 10: uint16(36024), + 11: uint16(36025), + 12: uint16(36026), + 13: uint16(36027), + 14: uint16(36028), + 15: uint16(36029), + 16: uint16(36030), + 17: uint16(36031), + 18: uint16(36032), + 19: uint16(36033), + 20: uint16(36034), + 21: uint16(36035), + 22: uint16(36036), + 23: uint16(36037), + 24: uint16(36038), + 25: uint16(36039), + 26: uint16(36040), + 27: uint16(36041), + 28: uint16(36042), + 29: uint16(36043), + 30: uint16(36044), + 31: uint16(36045), + 32: uint16(36046), + 33: uint16(36047), + 34: uint16(36048), + 35: uint16(36049), + 36: uint16(36050), + 37: uint16(36051), + 38: uint16(36052), + 39: uint16(36053), + 40: uint16(36054), + 41: uint16(36055), + 42: uint16(36056), + 43: uint16(36057), + 44: uint16(36058), + 45: uint16(36059), + 46: uint16(36060), + 47: uint16(36061), + 48: uint16(36062), + 49: uint16(36063), + 50: uint16(36064), + 51: uint16(36065), + 52: uint16(36066), + 53: uint16(36067), + 54: uint16(36068), + 55: uint16(36069), + 56: uint16(36070), + 57: uint16(36071), + 58: uint16(36072), + 59: uint16(36073), + 60: uint16(36074), + 61: uint16(36075), + 62: uint16(36076), + 63: uint16(36077), + 64: uint16(36078), + 65: uint16(36079), + 66: uint16(36080), + 67: uint16(36081), + 68: uint16(36082), + 69: uint16(36083), + 70: uint16(36084), + 71: uint16(36085), + 72: uint16(36086), + 73: uint16(36087), + 74: uint16(36088), + 75: uint16(36089), + 76: uint16(36090), + 77: uint16(36091), + 78: uint16(36092), + 79: uint16(36093), + 80: uint16(36094), + 81: uint16(36095), + 82: uint16(36096), + 83: uint16(36097), + 84: uint16(36098), + 85: uint16(36099), + 86: uint16(36100), + 87: uint16(36101), + 88: uint16(36102), + 89: uint16(36103), + 90: uint16(36104), + 91: uint16(36105), + 92: uint16(36106), + 93: uint16(36107), + 94: uint16(36108), + 95: uint16(36109), + 96: uint16(20319), + 97: uint16(20311), + 98: uint16(20274), + 99: uint16(20285), + 100: uint16(20342), + 101: uint16(20340), + 102: uint16(20369), + 103: uint16(20361), + 104: uint16(20355), + 105: uint16(20367), + 106: uint16(20350), + 107: uint16(20347), + 108: uint16(20394), + 109: uint16(20348), + 110: uint16(20396), + 111: uint16(20372), + 112: uint16(20454), + 113: uint16(20456), + 114: uint16(20458), + 115: uint16(20421), + 116: uint16(20442), + 117: uint16(20451), + 118: uint16(20444), + 119: uint16(20433), + 120: uint16(20447), + 121: uint16(20472), + 122: uint16(20521), + 123: uint16(20556), + 124: uint16(20467), + 125: uint16(20524), + 126: uint16(20495), + 127: uint16(20526), + 128: uint16(20525), + 129: uint16(20478), + 130: uint16(20508), + 131: uint16(20492), + 132: uint16(20517), + 133: uint16(20520), + 134: uint16(20606), + 135: uint16(20547), + 136: uint16(20565), + 137: uint16(20552), + 138: uint16(20558), + 139: uint16(20588), + 140: uint16(20603), + 141: uint16(20645), + 142: uint16(20647), + 143: uint16(20649), + 144: uint16(20666), + 145: uint16(20694), + 146: uint16(20742), + 147: uint16(20717), + 148: uint16(20716), + 149: uint16(20710), + 150: uint16(20718), + 151: uint16(20743), + 152: uint16(20747), + 153: uint16(20189), + 154: uint16(27709), + 155: uint16(20312), + 156: uint16(20325), + 157: uint16(20430), + 158: uint16(40864), + 159: uint16(27718), + 160: uint16(31860), + 161: uint16(20846), + 162: uint16(24061), + 163: uint16(40649), + 164: uint16(39320), + 165: uint16(20865), + 166: uint16(22804), + 167: uint16(21241), + 168: uint16(21261), + 169: uint16(35335), + 170: uint16(21264), + 171: uint16(20971), + 172: uint16(22809), + 173: uint16(20821), + 174: uint16(20128), + 175: uint16(20822), + 176: uint16(20147), + 177: uint16(34926), + 178: uint16(34980), + 179: uint16(20149), + 180: uint16(33044), + 181: uint16(35026), + 182: uint16(31104), + 183: uint16(23348), + 184: uint16(34819), + 185: uint16(32696), + 186: uint16(20907), + 187: uint16(20913), + 188: uint16(20925), + 189: uint16(20924), + }, + 89: { + 0: uint16(36110), + 1: uint16(36111), + 2: uint16(36112), + 3: uint16(36113), + 4: uint16(36114), + 5: uint16(36115), + 6: uint16(36116), + 7: uint16(36117), + 8: uint16(36118), + 9: uint16(36119), + 10: uint16(36120), + 11: uint16(36121), + 12: uint16(36122), + 13: uint16(36123), + 14: uint16(36124), + 15: uint16(36128), + 16: uint16(36177), + 17: uint16(36178), + 18: uint16(36183), + 19: uint16(36191), + 20: uint16(36197), + 21: uint16(36200), + 22: uint16(36201), + 23: uint16(36202), + 24: uint16(36204), + 25: uint16(36206), + 26: uint16(36207), + 27: uint16(36209), + 28: uint16(36210), + 29: uint16(36216), + 30: uint16(36217), + 31: uint16(36218), + 32: uint16(36219), + 33: uint16(36220), + 34: uint16(36221), + 35: uint16(36222), + 36: uint16(36223), + 37: uint16(36224), + 38: uint16(36226), + 39: uint16(36227), + 40: uint16(36230), + 41: uint16(36231), + 42: uint16(36232), + 43: uint16(36233), + 44: uint16(36236), + 45: uint16(36237), + 46: uint16(36238), + 47: uint16(36239), + 48: uint16(36240), + 49: uint16(36242), + 50: uint16(36243), + 51: uint16(36245), + 52: uint16(36246), + 53: uint16(36247), + 54: uint16(36248), + 55: uint16(36249), + 56: uint16(36250), + 57: uint16(36251), + 58: uint16(36252), + 59: uint16(36253), + 60: uint16(36254), + 61: uint16(36256), + 62: uint16(36257), + 63: uint16(36258), + 64: uint16(36260), + 65: uint16(36261), + 66: uint16(36262), + 67: uint16(36263), + 68: uint16(36264), + 69: uint16(36265), + 70: uint16(36266), + 71: uint16(36267), + 72: uint16(36268), + 73: uint16(36269), + 74: uint16(36270), + 75: uint16(36271), + 76: uint16(36272), + 77: uint16(36274), + 78: uint16(36278), + 79: uint16(36279), + 80: uint16(36281), + 81: uint16(36283), + 82: uint16(36285), + 83: uint16(36288), + 84: uint16(36289), + 85: uint16(36290), + 86: uint16(36293), + 87: uint16(36295), + 88: uint16(36296), + 89: uint16(36297), + 90: uint16(36298), + 91: uint16(36301), + 92: uint16(36304), + 93: uint16(36306), + 94: uint16(36307), + 95: uint16(36308), + 96: uint16(20935), + 97: uint16(20886), + 98: uint16(20898), + 99: uint16(20901), + 100: uint16(35744), + 101: uint16(35750), + 102: uint16(35751), + 103: uint16(35754), + 104: uint16(35764), + 105: uint16(35765), + 106: uint16(35767), + 107: uint16(35778), + 108: uint16(35779), + 109: uint16(35787), + 110: uint16(35791), + 111: uint16(35790), + 112: uint16(35794), + 113: uint16(35795), + 114: uint16(35796), + 115: uint16(35798), + 116: uint16(35800), + 117: uint16(35801), + 118: uint16(35804), + 119: uint16(35807), + 120: uint16(35808), + 121: uint16(35812), + 122: uint16(35816), + 123: uint16(35817), + 124: uint16(35822), + 125: uint16(35824), + 126: uint16(35827), + 127: uint16(35830), + 128: uint16(35833), + 129: uint16(35836), + 130: uint16(35839), + 131: uint16(35840), + 132: uint16(35842), + 133: uint16(35844), + 134: uint16(35847), + 135: uint16(35852), + 136: uint16(35855), + 137: uint16(35857), + 138: uint16(35858), + 139: uint16(35860), + 140: uint16(35861), + 141: uint16(35862), + 142: uint16(35865), + 143: uint16(35867), + 144: uint16(35864), + 145: uint16(35869), + 146: uint16(35871), + 147: uint16(35872), + 148: uint16(35873), + 149: uint16(35877), + 150: uint16(35879), + 151: uint16(35882), + 152: uint16(35883), + 153: uint16(35886), + 154: uint16(35887), + 155: uint16(35890), + 156: uint16(35891), + 157: uint16(35893), + 158: uint16(35894), + 159: uint16(21353), + 160: uint16(21370), + 161: uint16(38429), + 162: uint16(38434), + 163: uint16(38433), + 164: uint16(38449), + 165: uint16(38442), + 166: uint16(38461), + 167: uint16(38460), + 168: uint16(38466), + 169: uint16(38473), + 170: uint16(38484), + 171: uint16(38495), + 172: uint16(38503), + 173: uint16(38508), + 174: uint16(38514), + 175: uint16(38516), + 176: uint16(38536), + 177: uint16(38541), + 178: uint16(38551), + 179: uint16(38576), + 180: uint16(37015), + 181: uint16(37019), + 182: uint16(37021), + 183: uint16(37017), + 184: uint16(37036), + 185: uint16(37025), + 186: uint16(37044), + 187: uint16(37043), + 188: uint16(37046), + 189: uint16(37050), + }, + 90: { + 0: uint16(36309), + 1: uint16(36312), + 2: uint16(36313), + 3: uint16(36316), + 4: uint16(36320), + 5: uint16(36321), + 6: uint16(36322), + 7: uint16(36325), + 8: uint16(36326), + 9: uint16(36327), + 10: uint16(36329), + 11: uint16(36333), + 12: uint16(36334), + 13: uint16(36336), + 14: uint16(36337), + 15: uint16(36338), + 16: uint16(36340), + 17: uint16(36342), + 18: uint16(36348), + 19: uint16(36350), + 20: uint16(36351), + 21: uint16(36352), + 22: uint16(36353), + 23: uint16(36354), + 24: uint16(36355), + 25: uint16(36356), + 26: uint16(36358), + 27: uint16(36359), + 28: uint16(36360), + 29: uint16(36363), + 30: uint16(36365), + 31: uint16(36366), + 32: uint16(36368), + 33: uint16(36369), + 34: uint16(36370), + 35: uint16(36371), + 36: uint16(36373), + 37: uint16(36374), + 38: uint16(36375), + 39: uint16(36376), + 40: uint16(36377), + 41: uint16(36378), + 42: uint16(36379), + 43: uint16(36380), + 44: uint16(36384), + 45: uint16(36385), + 46: uint16(36388), + 47: uint16(36389), + 48: uint16(36390), + 49: uint16(36391), + 50: uint16(36392), + 51: uint16(36395), + 52: uint16(36397), + 53: uint16(36400), + 54: uint16(36402), + 55: uint16(36403), + 56: uint16(36404), + 57: uint16(36406), + 58: uint16(36407), + 59: uint16(36408), + 60: uint16(36411), + 61: uint16(36412), + 62: uint16(36414), + 63: uint16(36415), + 64: uint16(36419), + 65: uint16(36421), + 66: uint16(36422), + 67: uint16(36428), + 68: uint16(36429), + 69: uint16(36430), + 70: uint16(36431), + 71: uint16(36432), + 72: uint16(36435), + 73: uint16(36436), + 74: uint16(36437), + 75: uint16(36438), + 76: uint16(36439), + 77: uint16(36440), + 78: uint16(36442), + 79: uint16(36443), + 80: uint16(36444), + 81: uint16(36445), + 82: uint16(36446), + 83: uint16(36447), + 84: uint16(36448), + 85: uint16(36449), + 86: uint16(36450), + 87: uint16(36451), + 88: uint16(36452), + 89: uint16(36453), + 90: uint16(36455), + 91: uint16(36456), + 92: uint16(36458), + 93: uint16(36459), + 94: uint16(36462), + 95: uint16(36465), + 96: uint16(37048), + 97: uint16(37040), + 98: uint16(37071), + 99: uint16(37061), + 100: uint16(37054), + 101: uint16(37072), + 102: uint16(37060), + 103: uint16(37063), + 104: uint16(37075), + 105: uint16(37094), + 106: uint16(37090), + 107: uint16(37084), + 108: uint16(37079), + 109: uint16(37083), + 110: uint16(37099), + 111: uint16(37103), + 112: uint16(37118), + 113: uint16(37124), + 114: uint16(37154), + 115: uint16(37150), + 116: uint16(37155), + 117: uint16(37169), + 118: uint16(37167), + 119: uint16(37177), + 120: uint16(37187), + 121: uint16(37190), + 122: uint16(21005), + 123: uint16(22850), + 124: uint16(21154), + 125: uint16(21164), + 126: uint16(21165), + 127: uint16(21182), + 128: uint16(21759), + 129: uint16(21200), + 130: uint16(21206), + 131: uint16(21232), + 132: uint16(21471), + 133: uint16(29166), + 134: uint16(30669), + 135: uint16(24308), + 136: uint16(20981), + 137: uint16(20988), + 138: uint16(39727), + 139: uint16(21430), + 140: uint16(24321), + 141: uint16(30042), + 142: uint16(24047), + 143: uint16(22348), + 144: uint16(22441), + 145: uint16(22433), + 146: uint16(22654), + 147: uint16(22716), + 148: uint16(22725), + 149: uint16(22737), + 150: uint16(22313), + 151: uint16(22316), + 152: uint16(22314), + 153: uint16(22323), + 154: uint16(22329), + 155: uint16(22318), + 156: uint16(22319), + 157: uint16(22364), + 158: uint16(22331), + 159: uint16(22338), + 160: uint16(22377), + 161: uint16(22405), + 162: uint16(22379), + 163: uint16(22406), + 164: uint16(22396), + 165: uint16(22395), + 166: uint16(22376), + 167: uint16(22381), + 168: uint16(22390), + 169: uint16(22387), + 170: uint16(22445), + 171: uint16(22436), + 172: uint16(22412), + 173: uint16(22450), + 174: uint16(22479), + 175: uint16(22439), + 176: uint16(22452), + 177: uint16(22419), + 178: uint16(22432), + 179: uint16(22485), + 180: uint16(22488), + 181: uint16(22490), + 182: uint16(22489), + 183: uint16(22482), + 184: uint16(22456), + 185: uint16(22516), + 186: uint16(22511), + 187: uint16(22520), + 188: uint16(22500), + 189: uint16(22493), + }, + 91: { + 0: uint16(36467), + 1: uint16(36469), + 2: uint16(36471), + 3: uint16(36472), + 4: uint16(36473), + 5: uint16(36474), + 6: uint16(36475), + 7: uint16(36477), + 8: uint16(36478), + 9: uint16(36480), + 10: uint16(36482), + 11: uint16(36483), + 12: uint16(36484), + 13: uint16(36486), + 14: uint16(36488), + 15: uint16(36489), + 16: uint16(36490), + 17: uint16(36491), + 18: uint16(36492), + 19: uint16(36493), + 20: uint16(36494), + 21: uint16(36497), + 22: uint16(36498), + 23: uint16(36499), + 24: uint16(36501), + 25: uint16(36502), + 26: uint16(36503), + 27: uint16(36504), + 28: uint16(36505), + 29: uint16(36506), + 30: uint16(36507), + 31: uint16(36509), + 32: uint16(36511), + 33: uint16(36512), + 34: uint16(36513), + 35: uint16(36514), + 36: uint16(36515), + 37: uint16(36516), + 38: uint16(36517), + 39: uint16(36518), + 40: uint16(36519), + 41: uint16(36520), + 42: uint16(36521), + 43: uint16(36522), + 44: uint16(36525), + 45: uint16(36526), + 46: uint16(36528), + 47: uint16(36529), + 48: uint16(36531), + 49: uint16(36532), + 50: uint16(36533), + 51: uint16(36534), + 52: uint16(36535), + 53: uint16(36536), + 54: uint16(36537), + 55: uint16(36539), + 56: uint16(36540), + 57: uint16(36541), + 58: uint16(36542), + 59: uint16(36543), + 60: uint16(36544), + 61: uint16(36545), + 62: uint16(36546), + 63: uint16(36547), + 64: uint16(36548), + 65: uint16(36549), + 66: uint16(36550), + 67: uint16(36551), + 68: uint16(36552), + 69: uint16(36553), + 70: uint16(36554), + 71: uint16(36555), + 72: uint16(36556), + 73: uint16(36557), + 74: uint16(36559), + 75: uint16(36560), + 76: uint16(36561), + 77: uint16(36562), + 78: uint16(36563), + 79: uint16(36564), + 80: uint16(36565), + 81: uint16(36566), + 82: uint16(36567), + 83: uint16(36568), + 84: uint16(36569), + 85: uint16(36570), + 86: uint16(36571), + 87: uint16(36572), + 88: uint16(36573), + 89: uint16(36574), + 90: uint16(36575), + 91: uint16(36576), + 92: uint16(36577), + 93: uint16(36578), + 94: uint16(36579), + 95: uint16(36580), + 96: uint16(22539), + 97: uint16(22541), + 98: uint16(22525), + 99: uint16(22509), + 100: uint16(22528), + 101: uint16(22558), + 102: uint16(22553), + 103: uint16(22596), + 104: uint16(22560), + 105: uint16(22629), + 106: uint16(22636), + 107: uint16(22657), + 108: uint16(22665), + 109: uint16(22682), + 110: uint16(22656), + 111: uint16(39336), + 112: uint16(40729), + 113: uint16(25087), + 114: uint16(33401), + 115: uint16(33405), + 116: uint16(33407), + 117: uint16(33423), + 118: uint16(33418), + 119: uint16(33448), + 120: uint16(33412), + 121: uint16(33422), + 122: uint16(33425), + 123: uint16(33431), + 124: uint16(33433), + 125: uint16(33451), + 126: uint16(33464), + 127: uint16(33470), + 128: uint16(33456), + 129: uint16(33480), + 130: uint16(33482), + 131: uint16(33507), + 132: uint16(33432), + 133: uint16(33463), + 134: uint16(33454), + 135: uint16(33483), + 136: uint16(33484), + 137: uint16(33473), + 138: uint16(33449), + 139: uint16(33460), + 140: uint16(33441), + 141: uint16(33450), + 142: uint16(33439), + 143: uint16(33476), + 144: uint16(33486), + 145: uint16(33444), + 146: uint16(33505), + 147: uint16(33545), + 148: uint16(33527), + 149: uint16(33508), + 150: uint16(33551), + 151: uint16(33543), + 152: uint16(33500), + 153: uint16(33524), + 154: uint16(33490), + 155: uint16(33496), + 156: uint16(33548), + 157: uint16(33531), + 158: uint16(33491), + 159: uint16(33553), + 160: uint16(33562), + 161: uint16(33542), + 162: uint16(33556), + 163: uint16(33557), + 164: uint16(33504), + 165: uint16(33493), + 166: uint16(33564), + 167: uint16(33617), + 168: uint16(33627), + 169: uint16(33628), + 170: uint16(33544), + 171: uint16(33682), + 172: uint16(33596), + 173: uint16(33588), + 174: uint16(33585), + 175: uint16(33691), + 176: uint16(33630), + 177: uint16(33583), + 178: uint16(33615), + 179: uint16(33607), + 180: uint16(33603), + 181: uint16(33631), + 182: uint16(33600), + 183: uint16(33559), + 184: uint16(33632), + 185: uint16(33581), + 186: uint16(33594), + 187: uint16(33587), + 188: uint16(33638), + 189: uint16(33637), + }, + 92: { + 0: uint16(36581), + 1: uint16(36582), + 2: uint16(36583), + 3: uint16(36584), + 4: uint16(36585), + 5: uint16(36586), + 6: uint16(36587), + 7: uint16(36588), + 8: uint16(36589), + 9: uint16(36590), + 10: uint16(36591), + 11: uint16(36592), + 12: uint16(36593), + 13: uint16(36594), + 14: uint16(36595), + 15: uint16(36596), + 16: uint16(36597), + 17: uint16(36598), + 18: uint16(36599), + 19: uint16(36600), + 20: uint16(36601), + 21: uint16(36602), + 22: uint16(36603), + 23: uint16(36604), + 24: uint16(36605), + 25: uint16(36606), + 26: uint16(36607), + 27: uint16(36608), + 28: uint16(36609), + 29: uint16(36610), + 30: uint16(36611), + 31: uint16(36612), + 32: uint16(36613), + 33: uint16(36614), + 34: uint16(36615), + 35: uint16(36616), + 36: uint16(36617), + 37: uint16(36618), + 38: uint16(36619), + 39: uint16(36620), + 40: uint16(36621), + 41: uint16(36622), + 42: uint16(36623), + 43: uint16(36624), + 44: uint16(36625), + 45: uint16(36626), + 46: uint16(36627), + 47: uint16(36628), + 48: uint16(36629), + 49: uint16(36630), + 50: uint16(36631), + 51: uint16(36632), + 52: uint16(36633), + 53: uint16(36634), + 54: uint16(36635), + 55: uint16(36636), + 56: uint16(36637), + 57: uint16(36638), + 58: uint16(36639), + 59: uint16(36640), + 60: uint16(36641), + 61: uint16(36642), + 62: uint16(36643), + 63: uint16(36644), + 64: uint16(36645), + 65: uint16(36646), + 66: uint16(36647), + 67: uint16(36648), + 68: uint16(36649), + 69: uint16(36650), + 70: uint16(36651), + 71: uint16(36652), + 72: uint16(36653), + 73: uint16(36654), + 74: uint16(36655), + 75: uint16(36656), + 76: uint16(36657), + 77: uint16(36658), + 78: uint16(36659), + 79: uint16(36660), + 80: uint16(36661), + 81: uint16(36662), + 82: uint16(36663), + 83: uint16(36664), + 84: uint16(36665), + 85: uint16(36666), + 86: uint16(36667), + 87: uint16(36668), + 88: uint16(36669), + 89: uint16(36670), + 90: uint16(36671), + 91: uint16(36672), + 92: uint16(36673), + 93: uint16(36674), + 94: uint16(36675), + 95: uint16(36676), + 96: uint16(33640), + 97: uint16(33563), + 98: uint16(33641), + 99: uint16(33644), + 100: uint16(33642), + 101: uint16(33645), + 102: uint16(33646), + 103: uint16(33712), + 104: uint16(33656), + 105: uint16(33715), + 106: uint16(33716), + 107: uint16(33696), + 108: uint16(33706), + 109: uint16(33683), + 110: uint16(33692), + 111: uint16(33669), + 112: uint16(33660), + 113: uint16(33718), + 114: uint16(33705), + 115: uint16(33661), + 116: uint16(33720), + 117: uint16(33659), + 118: uint16(33688), + 119: uint16(33694), + 120: uint16(33704), + 121: uint16(33722), + 122: uint16(33724), + 123: uint16(33729), + 124: uint16(33793), + 125: uint16(33765), + 126: uint16(33752), + 127: uint16(22535), + 128: uint16(33816), + 129: uint16(33803), + 130: uint16(33757), + 131: uint16(33789), + 132: uint16(33750), + 133: uint16(33820), + 134: uint16(33848), + 135: uint16(33809), + 136: uint16(33798), + 137: uint16(33748), + 138: uint16(33759), + 139: uint16(33807), + 140: uint16(33795), + 141: uint16(33784), + 142: uint16(33785), + 143: uint16(33770), + 144: uint16(33733), + 145: uint16(33728), + 146: uint16(33830), + 147: uint16(33776), + 148: uint16(33761), + 149: uint16(33884), + 150: uint16(33873), + 151: uint16(33882), + 152: uint16(33881), + 153: uint16(33907), + 154: uint16(33927), + 155: uint16(33928), + 156: uint16(33914), + 157: uint16(33929), + 158: uint16(33912), + 159: uint16(33852), + 160: uint16(33862), + 161: uint16(33897), + 162: uint16(33910), + 163: uint16(33932), + 164: uint16(33934), + 165: uint16(33841), + 166: uint16(33901), + 167: uint16(33985), + 168: uint16(33997), + 169: uint16(34000), + 170: uint16(34022), + 171: uint16(33981), + 172: uint16(34003), + 173: uint16(33994), + 174: uint16(33983), + 175: uint16(33978), + 176: uint16(34016), + 177: uint16(33953), + 178: uint16(33977), + 179: uint16(33972), + 180: uint16(33943), + 181: uint16(34021), + 182: uint16(34019), + 183: uint16(34060), + 184: uint16(29965), + 185: uint16(34104), + 186: uint16(34032), + 187: uint16(34105), + 188: uint16(34079), + 189: uint16(34106), + }, + 93: { + 0: uint16(36677), + 1: uint16(36678), + 2: uint16(36679), + 3: uint16(36680), + 4: uint16(36681), + 5: uint16(36682), + 6: uint16(36683), + 7: uint16(36684), + 8: uint16(36685), + 9: uint16(36686), + 10: uint16(36687), + 11: uint16(36688), + 12: uint16(36689), + 13: uint16(36690), + 14: uint16(36691), + 15: uint16(36692), + 16: uint16(36693), + 17: uint16(36694), + 18: uint16(36695), + 19: uint16(36696), + 20: uint16(36697), + 21: uint16(36698), + 22: uint16(36699), + 23: uint16(36700), + 24: uint16(36701), + 25: uint16(36702), + 26: uint16(36703), + 27: uint16(36704), + 28: uint16(36705), + 29: uint16(36706), + 30: uint16(36707), + 31: uint16(36708), + 32: uint16(36709), + 33: uint16(36714), + 34: uint16(36736), + 35: uint16(36748), + 36: uint16(36754), + 37: uint16(36765), + 38: uint16(36768), + 39: uint16(36769), + 40: uint16(36770), + 41: uint16(36772), + 42: uint16(36773), + 43: uint16(36774), + 44: uint16(36775), + 45: uint16(36778), + 46: uint16(36780), + 47: uint16(36781), + 48: uint16(36782), + 49: uint16(36783), + 50: uint16(36786), + 51: uint16(36787), + 52: uint16(36788), + 53: uint16(36789), + 54: uint16(36791), + 55: uint16(36792), + 56: uint16(36794), + 57: uint16(36795), + 58: uint16(36796), + 59: uint16(36799), + 60: uint16(36800), + 61: uint16(36803), + 62: uint16(36806), + 63: uint16(36809), + 64: uint16(36810), + 65: uint16(36811), + 66: uint16(36812), + 67: uint16(36813), + 68: uint16(36815), + 69: uint16(36818), + 70: uint16(36822), + 71: uint16(36823), + 72: uint16(36826), + 73: uint16(36832), + 74: uint16(36833), + 75: uint16(36835), + 76: uint16(36839), + 77: uint16(36844), + 78: uint16(36847), + 79: uint16(36849), + 80: uint16(36850), + 81: uint16(36852), + 82: uint16(36853), + 83: uint16(36854), + 84: uint16(36858), + 85: uint16(36859), + 86: uint16(36860), + 87: uint16(36862), + 88: uint16(36863), + 89: uint16(36871), + 90: uint16(36872), + 91: uint16(36876), + 92: uint16(36878), + 93: uint16(36883), + 94: uint16(36885), + 95: uint16(36888), + 96: uint16(34134), + 97: uint16(34107), + 98: uint16(34047), + 99: uint16(34044), + 100: uint16(34137), + 101: uint16(34120), + 102: uint16(34152), + 103: uint16(34148), + 104: uint16(34142), + 105: uint16(34170), + 106: uint16(30626), + 107: uint16(34115), + 108: uint16(34162), + 109: uint16(34171), + 110: uint16(34212), + 111: uint16(34216), + 112: uint16(34183), + 113: uint16(34191), + 114: uint16(34169), + 115: uint16(34222), + 116: uint16(34204), + 117: uint16(34181), + 118: uint16(34233), + 119: uint16(34231), + 120: uint16(34224), + 121: uint16(34259), + 122: uint16(34241), + 123: uint16(34268), + 124: uint16(34303), + 125: uint16(34343), + 126: uint16(34309), + 127: uint16(34345), + 128: uint16(34326), + 129: uint16(34364), + 130: uint16(24318), + 131: uint16(24328), + 132: uint16(22844), + 133: uint16(22849), + 134: uint16(32823), + 135: uint16(22869), + 136: uint16(22874), + 137: uint16(22872), + 138: uint16(21263), + 139: uint16(23586), + 140: uint16(23589), + 141: uint16(23596), + 142: uint16(23604), + 143: uint16(25164), + 144: uint16(25194), + 145: uint16(25247), + 146: uint16(25275), + 147: uint16(25290), + 148: uint16(25306), + 149: uint16(25303), + 150: uint16(25326), + 151: uint16(25378), + 152: uint16(25334), + 153: uint16(25401), + 154: uint16(25419), + 155: uint16(25411), + 156: uint16(25517), + 157: uint16(25590), + 158: uint16(25457), + 159: uint16(25466), + 160: uint16(25486), + 161: uint16(25524), + 162: uint16(25453), + 163: uint16(25516), + 164: uint16(25482), + 165: uint16(25449), + 166: uint16(25518), + 167: uint16(25532), + 168: uint16(25586), + 169: uint16(25592), + 170: uint16(25568), + 171: uint16(25599), + 172: uint16(25540), + 173: uint16(25566), + 174: uint16(25550), + 175: uint16(25682), + 176: uint16(25542), + 177: uint16(25534), + 178: uint16(25669), + 179: uint16(25665), + 180: uint16(25611), + 181: uint16(25627), + 182: uint16(25632), + 183: uint16(25612), + 184: uint16(25638), + 185: uint16(25633), + 186: uint16(25694), + 187: uint16(25732), + 188: uint16(25709), + 189: uint16(25750), + }, + 94: { + 0: uint16(36889), + 1: uint16(36892), + 2: uint16(36899), + 3: uint16(36900), + 4: uint16(36901), + 5: uint16(36903), + 6: uint16(36904), + 7: uint16(36905), + 8: uint16(36906), + 9: uint16(36907), + 10: uint16(36908), + 11: uint16(36912), + 12: uint16(36913), + 13: uint16(36914), + 14: uint16(36915), + 15: uint16(36916), + 16: uint16(36919), + 17: uint16(36921), + 18: uint16(36922), + 19: uint16(36925), + 20: uint16(36927), + 21: uint16(36928), + 22: uint16(36931), + 23: uint16(36933), + 24: uint16(36934), + 25: uint16(36936), + 26: uint16(36937), + 27: uint16(36938), + 28: uint16(36939), + 29: uint16(36940), + 30: uint16(36942), + 31: uint16(36948), + 32: uint16(36949), + 33: uint16(36950), + 34: uint16(36953), + 35: uint16(36954), + 36: uint16(36956), + 37: uint16(36957), + 38: uint16(36958), + 39: uint16(36959), + 40: uint16(36960), + 41: uint16(36961), + 42: uint16(36964), + 43: uint16(36966), + 44: uint16(36967), + 45: uint16(36969), + 46: uint16(36970), + 47: uint16(36971), + 48: uint16(36972), + 49: uint16(36975), + 50: uint16(36976), + 51: uint16(36977), + 52: uint16(36978), + 53: uint16(36979), + 54: uint16(36982), + 55: uint16(36983), + 56: uint16(36984), + 57: uint16(36985), + 58: uint16(36986), + 59: uint16(36987), + 60: uint16(36988), + 61: uint16(36990), + 62: uint16(36993), + 63: uint16(36996), + 64: uint16(36997), + 65: uint16(36998), + 66: uint16(36999), + 67: uint16(37001), + 68: uint16(37002), + 69: uint16(37004), + 70: uint16(37005), + 71: uint16(37006), + 72: uint16(37007), + 73: uint16(37008), + 74: uint16(37010), + 75: uint16(37012), + 76: uint16(37014), + 77: uint16(37016), + 78: uint16(37018), + 79: uint16(37020), + 80: uint16(37022), + 81: uint16(37023), + 82: uint16(37024), + 83: uint16(37028), + 84: uint16(37029), + 85: uint16(37031), + 86: uint16(37032), + 87: uint16(37033), + 88: uint16(37035), + 89: uint16(37037), + 90: uint16(37042), + 91: uint16(37047), + 92: uint16(37052), + 93: uint16(37053), + 94: uint16(37055), + 95: uint16(37056), + 96: uint16(25722), + 97: uint16(25783), + 98: uint16(25784), + 99: uint16(25753), + 100: uint16(25786), + 101: uint16(25792), + 102: uint16(25808), + 103: uint16(25815), + 104: uint16(25828), + 105: uint16(25826), + 106: uint16(25865), + 107: uint16(25893), + 108: uint16(25902), + 109: uint16(24331), + 110: uint16(24530), + 111: uint16(29977), + 112: uint16(24337), + 113: uint16(21343), + 114: uint16(21489), + 115: uint16(21501), + 116: uint16(21481), + 117: uint16(21480), + 118: uint16(21499), + 119: uint16(21522), + 120: uint16(21526), + 121: uint16(21510), + 122: uint16(21579), + 123: uint16(21586), + 124: uint16(21587), + 125: uint16(21588), + 126: uint16(21590), + 127: uint16(21571), + 128: uint16(21537), + 129: uint16(21591), + 130: uint16(21593), + 131: uint16(21539), + 132: uint16(21554), + 133: uint16(21634), + 134: uint16(21652), + 135: uint16(21623), + 136: uint16(21617), + 137: uint16(21604), + 138: uint16(21658), + 139: uint16(21659), + 140: uint16(21636), + 141: uint16(21622), + 142: uint16(21606), + 143: uint16(21661), + 144: uint16(21712), + 145: uint16(21677), + 146: uint16(21698), + 147: uint16(21684), + 148: uint16(21714), + 149: uint16(21671), + 150: uint16(21670), + 151: uint16(21715), + 152: uint16(21716), + 153: uint16(21618), + 154: uint16(21667), + 155: uint16(21717), + 156: uint16(21691), + 157: uint16(21695), + 158: uint16(21708), + 159: uint16(21721), + 160: uint16(21722), + 161: uint16(21724), + 162: uint16(21673), + 163: uint16(21674), + 164: uint16(21668), + 165: uint16(21725), + 166: uint16(21711), + 167: uint16(21726), + 168: uint16(21787), + 169: uint16(21735), + 170: uint16(21792), + 171: uint16(21757), + 172: uint16(21780), + 173: uint16(21747), + 174: uint16(21794), + 175: uint16(21795), + 176: uint16(21775), + 177: uint16(21777), + 178: uint16(21799), + 179: uint16(21802), + 180: uint16(21863), + 181: uint16(21903), + 182: uint16(21941), + 183: uint16(21833), + 184: uint16(21869), + 185: uint16(21825), + 186: uint16(21845), + 187: uint16(21823), + 188: uint16(21840), + 189: uint16(21820), + }, + 95: { + 0: uint16(37058), + 1: uint16(37059), + 2: uint16(37062), + 3: uint16(37064), + 4: uint16(37065), + 5: uint16(37067), + 6: uint16(37068), + 7: uint16(37069), + 8: uint16(37074), + 9: uint16(37076), + 10: uint16(37077), + 11: uint16(37078), + 12: uint16(37080), + 13: uint16(37081), + 14: uint16(37082), + 15: uint16(37086), + 16: uint16(37087), + 17: uint16(37088), + 18: uint16(37091), + 19: uint16(37092), + 20: uint16(37093), + 21: uint16(37097), + 22: uint16(37098), + 23: uint16(37100), + 24: uint16(37102), + 25: uint16(37104), + 26: uint16(37105), + 27: uint16(37106), + 28: uint16(37107), + 29: uint16(37109), + 30: uint16(37110), + 31: uint16(37111), + 32: uint16(37113), + 33: uint16(37114), + 34: uint16(37115), + 35: uint16(37116), + 36: uint16(37119), + 37: uint16(37120), + 38: uint16(37121), + 39: uint16(37123), + 40: uint16(37125), + 41: uint16(37126), + 42: uint16(37127), + 43: uint16(37128), + 44: uint16(37129), + 45: uint16(37130), + 46: uint16(37131), + 47: uint16(37132), + 48: uint16(37133), + 49: uint16(37134), + 50: uint16(37135), + 51: uint16(37136), + 52: uint16(37137), + 53: uint16(37138), + 54: uint16(37139), + 55: uint16(37140), + 56: uint16(37141), + 57: uint16(37142), + 58: uint16(37143), + 59: uint16(37144), + 60: uint16(37146), + 61: uint16(37147), + 62: uint16(37148), + 63: uint16(37149), + 64: uint16(37151), + 65: uint16(37152), + 66: uint16(37153), + 67: uint16(37156), + 68: uint16(37157), + 69: uint16(37158), + 70: uint16(37159), + 71: uint16(37160), + 72: uint16(37161), + 73: uint16(37162), + 74: uint16(37163), + 75: uint16(37164), + 76: uint16(37165), + 77: uint16(37166), + 78: uint16(37168), + 79: uint16(37170), + 80: uint16(37171), + 81: uint16(37172), + 82: uint16(37173), + 83: uint16(37174), + 84: uint16(37175), + 85: uint16(37176), + 86: uint16(37178), + 87: uint16(37179), + 88: uint16(37180), + 89: uint16(37181), + 90: uint16(37182), + 91: uint16(37183), + 92: uint16(37184), + 93: uint16(37185), + 94: uint16(37186), + 95: uint16(37188), + 96: uint16(21815), + 97: uint16(21846), + 98: uint16(21877), + 99: uint16(21878), + 100: uint16(21879), + 101: uint16(21811), + 102: uint16(21808), + 103: uint16(21852), + 104: uint16(21899), + 105: uint16(21970), + 106: uint16(21891), + 107: uint16(21937), + 108: uint16(21945), + 109: uint16(21896), + 110: uint16(21889), + 111: uint16(21919), + 112: uint16(21886), + 113: uint16(21974), + 114: uint16(21905), + 115: uint16(21883), + 116: uint16(21983), + 117: uint16(21949), + 118: uint16(21950), + 119: uint16(21908), + 120: uint16(21913), + 121: uint16(21994), + 122: uint16(22007), + 123: uint16(21961), + 124: uint16(22047), + 125: uint16(21969), + 126: uint16(21995), + 127: uint16(21996), + 128: uint16(21972), + 129: uint16(21990), + 130: uint16(21981), + 131: uint16(21956), + 132: uint16(21999), + 133: uint16(21989), + 134: uint16(22002), + 135: uint16(22003), + 136: uint16(21964), + 137: uint16(21965), + 138: uint16(21992), + 139: uint16(22005), + 140: uint16(21988), + 141: uint16(36756), + 142: uint16(22046), + 143: uint16(22024), + 144: uint16(22028), + 145: uint16(22017), + 146: uint16(22052), + 147: uint16(22051), + 148: uint16(22014), + 149: uint16(22016), + 150: uint16(22055), + 151: uint16(22061), + 152: uint16(22104), + 153: uint16(22073), + 154: uint16(22103), + 155: uint16(22060), + 156: uint16(22093), + 157: uint16(22114), + 158: uint16(22105), + 159: uint16(22108), + 160: uint16(22092), + 161: uint16(22100), + 162: uint16(22150), + 163: uint16(22116), + 164: uint16(22129), + 165: uint16(22123), + 166: uint16(22139), + 167: uint16(22140), + 168: uint16(22149), + 169: uint16(22163), + 170: uint16(22191), + 171: uint16(22228), + 172: uint16(22231), + 173: uint16(22237), + 174: uint16(22241), + 175: uint16(22261), + 176: uint16(22251), + 177: uint16(22265), + 178: uint16(22271), + 179: uint16(22276), + 180: uint16(22282), + 181: uint16(22281), + 182: uint16(22300), + 183: uint16(24079), + 184: uint16(24089), + 185: uint16(24084), + 186: uint16(24081), + 187: uint16(24113), + 188: uint16(24123), + 189: uint16(24124), + }, + 96: { + 0: uint16(37189), + 1: uint16(37191), + 2: uint16(37192), + 3: uint16(37201), + 4: uint16(37203), + 5: uint16(37204), + 6: uint16(37205), + 7: uint16(37206), + 8: uint16(37208), + 9: uint16(37209), + 10: uint16(37211), + 11: uint16(37212), + 12: uint16(37215), + 13: uint16(37216), + 14: uint16(37222), + 15: uint16(37223), + 16: uint16(37224), + 17: uint16(37227), + 18: uint16(37229), + 19: uint16(37235), + 20: uint16(37242), + 21: uint16(37243), + 22: uint16(37244), + 23: uint16(37248), + 24: uint16(37249), + 25: uint16(37250), + 26: uint16(37251), + 27: uint16(37252), + 28: uint16(37254), + 29: uint16(37256), + 30: uint16(37258), + 31: uint16(37262), + 32: uint16(37263), + 33: uint16(37267), + 34: uint16(37268), + 35: uint16(37269), + 36: uint16(37270), + 37: uint16(37271), + 38: uint16(37272), + 39: uint16(37273), + 40: uint16(37276), + 41: uint16(37277), + 42: uint16(37278), + 43: uint16(37279), + 44: uint16(37280), + 45: uint16(37281), + 46: uint16(37284), + 47: uint16(37285), + 48: uint16(37286), + 49: uint16(37287), + 50: uint16(37288), + 51: uint16(37289), + 52: uint16(37291), + 53: uint16(37292), + 54: uint16(37296), + 55: uint16(37297), + 56: uint16(37298), + 57: uint16(37299), + 58: uint16(37302), + 59: uint16(37303), + 60: uint16(37304), + 61: uint16(37305), + 62: uint16(37307), + 63: uint16(37308), + 64: uint16(37309), + 65: uint16(37310), + 66: uint16(37311), + 67: uint16(37312), + 68: uint16(37313), + 69: uint16(37314), + 70: uint16(37315), + 71: uint16(37316), + 72: uint16(37317), + 73: uint16(37318), + 74: uint16(37320), + 75: uint16(37323), + 76: uint16(37328), + 77: uint16(37330), + 78: uint16(37331), + 79: uint16(37332), + 80: uint16(37333), + 81: uint16(37334), + 82: uint16(37335), + 83: uint16(37336), + 84: uint16(37337), + 85: uint16(37338), + 86: uint16(37339), + 87: uint16(37341), + 88: uint16(37342), + 89: uint16(37343), + 90: uint16(37344), + 91: uint16(37345), + 92: uint16(37346), + 93: uint16(37347), + 94: uint16(37348), + 95: uint16(37349), + 96: uint16(24119), + 97: uint16(24132), + 98: uint16(24148), + 99: uint16(24155), + 100: uint16(24158), + 101: uint16(24161), + 102: uint16(23692), + 103: uint16(23674), + 104: uint16(23693), + 105: uint16(23696), + 106: uint16(23702), + 107: uint16(23688), + 108: uint16(23704), + 109: uint16(23705), + 110: uint16(23697), + 111: uint16(23706), + 112: uint16(23708), + 113: uint16(23733), + 114: uint16(23714), + 115: uint16(23741), + 116: uint16(23724), + 117: uint16(23723), + 118: uint16(23729), + 119: uint16(23715), + 120: uint16(23745), + 121: uint16(23735), + 122: uint16(23748), + 123: uint16(23762), + 124: uint16(23780), + 125: uint16(23755), + 126: uint16(23781), + 127: uint16(23810), + 128: uint16(23811), + 129: uint16(23847), + 130: uint16(23846), + 131: uint16(23854), + 132: uint16(23844), + 133: uint16(23838), + 134: uint16(23814), + 135: uint16(23835), + 136: uint16(23896), + 137: uint16(23870), + 138: uint16(23860), + 139: uint16(23869), + 140: uint16(23916), + 141: uint16(23899), + 142: uint16(23919), + 143: uint16(23901), + 144: uint16(23915), + 145: uint16(23883), + 146: uint16(23882), + 147: uint16(23913), + 148: uint16(23924), + 149: uint16(23938), + 150: uint16(23961), + 151: uint16(23965), + 152: uint16(35955), + 153: uint16(23991), + 154: uint16(24005), + 155: uint16(24435), + 156: uint16(24439), + 157: uint16(24450), + 158: uint16(24455), + 159: uint16(24457), + 160: uint16(24460), + 161: uint16(24469), + 162: uint16(24473), + 163: uint16(24476), + 164: uint16(24488), + 165: uint16(24493), + 166: uint16(24501), + 167: uint16(24508), + 168: uint16(34914), + 169: uint16(24417), + 170: uint16(29357), + 171: uint16(29360), + 172: uint16(29364), + 173: uint16(29367), + 174: uint16(29368), + 175: uint16(29379), + 176: uint16(29377), + 177: uint16(29390), + 178: uint16(29389), + 179: uint16(29394), + 180: uint16(29416), + 181: uint16(29423), + 182: uint16(29417), + 183: uint16(29426), + 184: uint16(29428), + 185: uint16(29431), + 186: uint16(29441), + 187: uint16(29427), + 188: uint16(29443), + 189: uint16(29434), + }, + 97: { + 0: uint16(37350), + 1: uint16(37351), + 2: uint16(37352), + 3: uint16(37353), + 4: uint16(37354), + 5: uint16(37355), + 6: uint16(37356), + 7: uint16(37357), + 8: uint16(37358), + 9: uint16(37359), + 10: uint16(37360), + 11: uint16(37361), + 12: uint16(37362), + 13: uint16(37363), + 14: uint16(37364), + 15: uint16(37365), + 16: uint16(37366), + 17: uint16(37367), + 18: uint16(37368), + 19: uint16(37369), + 20: uint16(37370), + 21: uint16(37371), + 22: uint16(37372), + 23: uint16(37373), + 24: uint16(37374), + 25: uint16(37375), + 26: uint16(37376), + 27: uint16(37377), + 28: uint16(37378), + 29: uint16(37379), + 30: uint16(37380), + 31: uint16(37381), + 32: uint16(37382), + 33: uint16(37383), + 34: uint16(37384), + 35: uint16(37385), + 36: uint16(37386), + 37: uint16(37387), + 38: uint16(37388), + 39: uint16(37389), + 40: uint16(37390), + 41: uint16(37391), + 42: uint16(37392), + 43: uint16(37393), + 44: uint16(37394), + 45: uint16(37395), + 46: uint16(37396), + 47: uint16(37397), + 48: uint16(37398), + 49: uint16(37399), + 50: uint16(37400), + 51: uint16(37401), + 52: uint16(37402), + 53: uint16(37403), + 54: uint16(37404), + 55: uint16(37405), + 56: uint16(37406), + 57: uint16(37407), + 58: uint16(37408), + 59: uint16(37409), + 60: uint16(37410), + 61: uint16(37411), + 62: uint16(37412), + 63: uint16(37413), + 64: uint16(37414), + 65: uint16(37415), + 66: uint16(37416), + 67: uint16(37417), + 68: uint16(37418), + 69: uint16(37419), + 70: uint16(37420), + 71: uint16(37421), + 72: uint16(37422), + 73: uint16(37423), + 74: uint16(37424), + 75: uint16(37425), + 76: uint16(37426), + 77: uint16(37427), + 78: uint16(37428), + 79: uint16(37429), + 80: uint16(37430), + 81: uint16(37431), + 82: uint16(37432), + 83: uint16(37433), + 84: uint16(37434), + 85: uint16(37435), + 86: uint16(37436), + 87: uint16(37437), + 88: uint16(37438), + 89: uint16(37439), + 90: uint16(37440), + 91: uint16(37441), + 92: uint16(37442), + 93: uint16(37443), + 94: uint16(37444), + 95: uint16(37445), + 96: uint16(29435), + 97: uint16(29463), + 98: uint16(29459), + 99: uint16(29473), + 100: uint16(29450), + 101: uint16(29470), + 102: uint16(29469), + 103: uint16(29461), + 104: uint16(29474), + 105: uint16(29497), + 106: uint16(29477), + 107: uint16(29484), + 108: uint16(29496), + 109: uint16(29489), + 110: uint16(29520), + 111: uint16(29517), + 112: uint16(29527), + 113: uint16(29536), + 114: uint16(29548), + 115: uint16(29551), + 116: uint16(29566), + 117: uint16(33307), + 118: uint16(22821), + 119: uint16(39143), + 120: uint16(22820), + 121: uint16(22786), + 122: uint16(39267), + 123: uint16(39271), + 124: uint16(39272), + 125: uint16(39273), + 126: uint16(39274), + 127: uint16(39275), + 128: uint16(39276), + 129: uint16(39284), + 130: uint16(39287), + 131: uint16(39293), + 132: uint16(39296), + 133: uint16(39300), + 134: uint16(39303), + 135: uint16(39306), + 136: uint16(39309), + 137: uint16(39312), + 138: uint16(39313), + 139: uint16(39315), + 140: uint16(39316), + 141: uint16(39317), + 142: uint16(24192), + 143: uint16(24209), + 144: uint16(24203), + 145: uint16(24214), + 146: uint16(24229), + 147: uint16(24224), + 148: uint16(24249), + 149: uint16(24245), + 150: uint16(24254), + 151: uint16(24243), + 152: uint16(36179), + 153: uint16(24274), + 154: uint16(24273), + 155: uint16(24283), + 156: uint16(24296), + 157: uint16(24298), + 158: uint16(33210), + 159: uint16(24516), + 160: uint16(24521), + 161: uint16(24534), + 162: uint16(24527), + 163: uint16(24579), + 164: uint16(24558), + 165: uint16(24580), + 166: uint16(24545), + 167: uint16(24548), + 168: uint16(24574), + 169: uint16(24581), + 170: uint16(24582), + 171: uint16(24554), + 172: uint16(24557), + 173: uint16(24568), + 174: uint16(24601), + 175: uint16(24629), + 176: uint16(24614), + 177: uint16(24603), + 178: uint16(24591), + 179: uint16(24589), + 180: uint16(24617), + 181: uint16(24619), + 182: uint16(24586), + 183: uint16(24639), + 184: uint16(24609), + 185: uint16(24696), + 186: uint16(24697), + 187: uint16(24699), + 188: uint16(24698), + 189: uint16(24642), + }, + 98: { + 0: uint16(37446), + 1: uint16(37447), + 2: uint16(37448), + 3: uint16(37449), + 4: uint16(37450), + 5: uint16(37451), + 6: uint16(37452), + 7: uint16(37453), + 8: uint16(37454), + 9: uint16(37455), + 10: uint16(37456), + 11: uint16(37457), + 12: uint16(37458), + 13: uint16(37459), + 14: uint16(37460), + 15: uint16(37461), + 16: uint16(37462), + 17: uint16(37463), + 18: uint16(37464), + 19: uint16(37465), + 20: uint16(37466), + 21: uint16(37467), + 22: uint16(37468), + 23: uint16(37469), + 24: uint16(37470), + 25: uint16(37471), + 26: uint16(37472), + 27: uint16(37473), + 28: uint16(37474), + 29: uint16(37475), + 30: uint16(37476), + 31: uint16(37477), + 32: uint16(37478), + 33: uint16(37479), + 34: uint16(37480), + 35: uint16(37481), + 36: uint16(37482), + 37: uint16(37483), + 38: uint16(37484), + 39: uint16(37485), + 40: uint16(37486), + 41: uint16(37487), + 42: uint16(37488), + 43: uint16(37489), + 44: uint16(37490), + 45: uint16(37491), + 46: uint16(37493), + 47: uint16(37494), + 48: uint16(37495), + 49: uint16(37496), + 50: uint16(37497), + 51: uint16(37498), + 52: uint16(37499), + 53: uint16(37500), + 54: uint16(37501), + 55: uint16(37502), + 56: uint16(37503), + 57: uint16(37504), + 58: uint16(37505), + 59: uint16(37506), + 60: uint16(37507), + 61: uint16(37508), + 62: uint16(37509), + 63: uint16(37510), + 64: uint16(37511), + 65: uint16(37512), + 66: uint16(37513), + 67: uint16(37514), + 68: uint16(37515), + 69: uint16(37516), + 70: uint16(37517), + 71: uint16(37519), + 72: uint16(37520), + 73: uint16(37521), + 74: uint16(37522), + 75: uint16(37523), + 76: uint16(37524), + 77: uint16(37525), + 78: uint16(37526), + 79: uint16(37527), + 80: uint16(37528), + 81: uint16(37529), + 82: uint16(37530), + 83: uint16(37531), + 84: uint16(37532), + 85: uint16(37533), + 86: uint16(37534), + 87: uint16(37535), + 88: uint16(37536), + 89: uint16(37537), + 90: uint16(37538), + 91: uint16(37539), + 92: uint16(37540), + 93: uint16(37541), + 94: uint16(37542), + 95: uint16(37543), + 96: uint16(24682), + 97: uint16(24701), + 98: uint16(24726), + 99: uint16(24730), + 100: uint16(24749), + 101: uint16(24733), + 102: uint16(24707), + 103: uint16(24722), + 104: uint16(24716), + 105: uint16(24731), + 106: uint16(24812), + 107: uint16(24763), + 108: uint16(24753), + 109: uint16(24797), + 110: uint16(24792), + 111: uint16(24774), + 112: uint16(24794), + 113: uint16(24756), + 114: uint16(24864), + 115: uint16(24870), + 116: uint16(24853), + 117: uint16(24867), + 118: uint16(24820), + 119: uint16(24832), + 120: uint16(24846), + 121: uint16(24875), + 122: uint16(24906), + 123: uint16(24949), + 124: uint16(25004), + 125: uint16(24980), + 126: uint16(24999), + 127: uint16(25015), + 128: uint16(25044), + 129: uint16(25077), + 130: uint16(24541), + 131: uint16(38579), + 132: uint16(38377), + 133: uint16(38379), + 134: uint16(38385), + 135: uint16(38387), + 136: uint16(38389), + 137: uint16(38390), + 138: uint16(38396), + 139: uint16(38398), + 140: uint16(38403), + 141: uint16(38404), + 142: uint16(38406), + 143: uint16(38408), + 144: uint16(38410), + 145: uint16(38411), + 146: uint16(38412), + 147: uint16(38413), + 148: uint16(38415), + 149: uint16(38418), + 150: uint16(38421), + 151: uint16(38422), + 152: uint16(38423), + 153: uint16(38425), + 154: uint16(38426), + 155: uint16(20012), + 156: uint16(29247), + 157: uint16(25109), + 158: uint16(27701), + 159: uint16(27732), + 160: uint16(27740), + 161: uint16(27722), + 162: uint16(27811), + 163: uint16(27781), + 164: uint16(27792), + 165: uint16(27796), + 166: uint16(27788), + 167: uint16(27752), + 168: uint16(27753), + 169: uint16(27764), + 170: uint16(27766), + 171: uint16(27782), + 172: uint16(27817), + 173: uint16(27856), + 174: uint16(27860), + 175: uint16(27821), + 176: uint16(27895), + 177: uint16(27896), + 178: uint16(27889), + 179: uint16(27863), + 180: uint16(27826), + 181: uint16(27872), + 182: uint16(27862), + 183: uint16(27898), + 184: uint16(27883), + 185: uint16(27886), + 186: uint16(27825), + 187: uint16(27859), + 188: uint16(27887), + 189: uint16(27902), + }, + 99: { + 0: uint16(37544), + 1: uint16(37545), + 2: uint16(37546), + 3: uint16(37547), + 4: uint16(37548), + 5: uint16(37549), + 6: uint16(37551), + 7: uint16(37552), + 8: uint16(37553), + 9: uint16(37554), + 10: uint16(37555), + 11: uint16(37556), + 12: uint16(37557), + 13: uint16(37558), + 14: uint16(37559), + 15: uint16(37560), + 16: uint16(37561), + 17: uint16(37562), + 18: uint16(37563), + 19: uint16(37564), + 20: uint16(37565), + 21: uint16(37566), + 22: uint16(37567), + 23: uint16(37568), + 24: uint16(37569), + 25: uint16(37570), + 26: uint16(37571), + 27: uint16(37572), + 28: uint16(37573), + 29: uint16(37574), + 30: uint16(37575), + 31: uint16(37577), + 32: uint16(37578), + 33: uint16(37579), + 34: uint16(37580), + 35: uint16(37581), + 36: uint16(37582), + 37: uint16(37583), + 38: uint16(37584), + 39: uint16(37585), + 40: uint16(37586), + 41: uint16(37587), + 42: uint16(37588), + 43: uint16(37589), + 44: uint16(37590), + 45: uint16(37591), + 46: uint16(37592), + 47: uint16(37593), + 48: uint16(37594), + 49: uint16(37595), + 50: uint16(37596), + 51: uint16(37597), + 52: uint16(37598), + 53: uint16(37599), + 54: uint16(37600), + 55: uint16(37601), + 56: uint16(37602), + 57: uint16(37603), + 58: uint16(37604), + 59: uint16(37605), + 60: uint16(37606), + 61: uint16(37607), + 62: uint16(37608), + 63: uint16(37609), + 64: uint16(37610), + 65: uint16(37611), + 66: uint16(37612), + 67: uint16(37613), + 68: uint16(37614), + 69: uint16(37615), + 70: uint16(37616), + 71: uint16(37617), + 72: uint16(37618), + 73: uint16(37619), + 74: uint16(37620), + 75: uint16(37621), + 76: uint16(37622), + 77: uint16(37623), + 78: uint16(37624), + 79: uint16(37625), + 80: uint16(37626), + 81: uint16(37627), + 82: uint16(37628), + 83: uint16(37629), + 84: uint16(37630), + 85: uint16(37631), + 86: uint16(37632), + 87: uint16(37633), + 88: uint16(37634), + 89: uint16(37635), + 90: uint16(37636), + 91: uint16(37637), + 92: uint16(37638), + 93: uint16(37639), + 94: uint16(37640), + 95: uint16(37641), + 96: uint16(27961), + 97: uint16(27943), + 98: uint16(27916), + 99: uint16(27971), + 100: uint16(27976), + 101: uint16(27911), + 102: uint16(27908), + 103: uint16(27929), + 104: uint16(27918), + 105: uint16(27947), + 106: uint16(27981), + 107: uint16(27950), + 108: uint16(27957), + 109: uint16(27930), + 110: uint16(27983), + 111: uint16(27986), + 112: uint16(27988), + 113: uint16(27955), + 114: uint16(28049), + 115: uint16(28015), + 116: uint16(28062), + 117: uint16(28064), + 118: uint16(27998), + 119: uint16(28051), + 120: uint16(28052), + 121: uint16(27996), + 122: uint16(28000), + 123: uint16(28028), + 124: uint16(28003), + 125: uint16(28186), + 126: uint16(28103), + 127: uint16(28101), + 128: uint16(28126), + 129: uint16(28174), + 130: uint16(28095), + 131: uint16(28128), + 132: uint16(28177), + 133: uint16(28134), + 134: uint16(28125), + 135: uint16(28121), + 136: uint16(28182), + 137: uint16(28075), + 138: uint16(28172), + 139: uint16(28078), + 140: uint16(28203), + 141: uint16(28270), + 142: uint16(28238), + 143: uint16(28267), + 144: uint16(28338), + 145: uint16(28255), + 146: uint16(28294), + 147: uint16(28243), + 148: uint16(28244), + 149: uint16(28210), + 150: uint16(28197), + 151: uint16(28228), + 152: uint16(28383), + 153: uint16(28337), + 154: uint16(28312), + 155: uint16(28384), + 156: uint16(28461), + 157: uint16(28386), + 158: uint16(28325), + 159: uint16(28327), + 160: uint16(28349), + 161: uint16(28347), + 162: uint16(28343), + 163: uint16(28375), + 164: uint16(28340), + 165: uint16(28367), + 166: uint16(28303), + 167: uint16(28354), + 168: uint16(28319), + 169: uint16(28514), + 170: uint16(28486), + 171: uint16(28487), + 172: uint16(28452), + 173: uint16(28437), + 174: uint16(28409), + 175: uint16(28463), + 176: uint16(28470), + 177: uint16(28491), + 178: uint16(28532), + 179: uint16(28458), + 180: uint16(28425), + 181: uint16(28457), + 182: uint16(28553), + 183: uint16(28557), + 184: uint16(28556), + 185: uint16(28536), + 186: uint16(28530), + 187: uint16(28540), + 188: uint16(28538), + 189: uint16(28625), + }, + 100: { + 0: uint16(37642), + 1: uint16(37643), + 2: uint16(37644), + 3: uint16(37645), + 4: uint16(37646), + 5: uint16(37647), + 6: uint16(37648), + 7: uint16(37649), + 8: uint16(37650), + 9: uint16(37651), + 10: uint16(37652), + 11: uint16(37653), + 12: uint16(37654), + 13: uint16(37655), + 14: uint16(37656), + 15: uint16(37657), + 16: uint16(37658), + 17: uint16(37659), + 18: uint16(37660), + 19: uint16(37661), + 20: uint16(37662), + 21: uint16(37663), + 22: uint16(37664), + 23: uint16(37665), + 24: uint16(37666), + 25: uint16(37667), + 26: uint16(37668), + 27: uint16(37669), + 28: uint16(37670), + 29: uint16(37671), + 30: uint16(37672), + 31: uint16(37673), + 32: uint16(37674), + 33: uint16(37675), + 34: uint16(37676), + 35: uint16(37677), + 36: uint16(37678), + 37: uint16(37679), + 38: uint16(37680), + 39: uint16(37681), + 40: uint16(37682), + 41: uint16(37683), + 42: uint16(37684), + 43: uint16(37685), + 44: uint16(37686), + 45: uint16(37687), + 46: uint16(37688), + 47: uint16(37689), + 48: uint16(37690), + 49: uint16(37691), + 50: uint16(37692), + 51: uint16(37693), + 52: uint16(37695), + 53: uint16(37696), + 54: uint16(37697), + 55: uint16(37698), + 56: uint16(37699), + 57: uint16(37700), + 58: uint16(37701), + 59: uint16(37702), + 60: uint16(37703), + 61: uint16(37704), + 62: uint16(37705), + 63: uint16(37706), + 64: uint16(37707), + 65: uint16(37708), + 66: uint16(37709), + 67: uint16(37710), + 68: uint16(37711), + 69: uint16(37712), + 70: uint16(37713), + 71: uint16(37714), + 72: uint16(37715), + 73: uint16(37716), + 74: uint16(37717), + 75: uint16(37718), + 76: uint16(37719), + 77: uint16(37720), + 78: uint16(37721), + 79: uint16(37722), + 80: uint16(37723), + 81: uint16(37724), + 82: uint16(37725), + 83: uint16(37726), + 84: uint16(37727), + 85: uint16(37728), + 86: uint16(37729), + 87: uint16(37730), + 88: uint16(37731), + 89: uint16(37732), + 90: uint16(37733), + 91: uint16(37734), + 92: uint16(37735), + 93: uint16(37736), + 94: uint16(37737), + 95: uint16(37739), + 96: uint16(28617), + 97: uint16(28583), + 98: uint16(28601), + 99: uint16(28598), + 100: uint16(28610), + 101: uint16(28641), + 102: uint16(28654), + 103: uint16(28638), + 104: uint16(28640), + 105: uint16(28655), + 106: uint16(28698), + 107: uint16(28707), + 108: uint16(28699), + 109: uint16(28729), + 110: uint16(28725), + 111: uint16(28751), + 112: uint16(28766), + 113: uint16(23424), + 114: uint16(23428), + 115: uint16(23445), + 116: uint16(23443), + 117: uint16(23461), + 118: uint16(23480), + 119: uint16(29999), + 120: uint16(39582), + 121: uint16(25652), + 122: uint16(23524), + 123: uint16(23534), + 124: uint16(35120), + 125: uint16(23536), + 126: uint16(36423), + 127: uint16(35591), + 128: uint16(36790), + 129: uint16(36819), + 130: uint16(36821), + 131: uint16(36837), + 132: uint16(36846), + 133: uint16(36836), + 134: uint16(36841), + 135: uint16(36838), + 136: uint16(36851), + 137: uint16(36840), + 138: uint16(36869), + 139: uint16(36868), + 140: uint16(36875), + 141: uint16(36902), + 142: uint16(36881), + 143: uint16(36877), + 144: uint16(36886), + 145: uint16(36897), + 146: uint16(36917), + 147: uint16(36918), + 148: uint16(36909), + 149: uint16(36911), + 150: uint16(36932), + 151: uint16(36945), + 152: uint16(36946), + 153: uint16(36944), + 154: uint16(36968), + 155: uint16(36952), + 156: uint16(36962), + 157: uint16(36955), + 158: uint16(26297), + 159: uint16(36980), + 160: uint16(36989), + 161: uint16(36994), + 162: uint16(37000), + 163: uint16(36995), + 164: uint16(37003), + 165: uint16(24400), + 166: uint16(24407), + 167: uint16(24406), + 168: uint16(24408), + 169: uint16(23611), + 170: uint16(21675), + 171: uint16(23632), + 172: uint16(23641), + 173: uint16(23409), + 174: uint16(23651), + 175: uint16(23654), + 176: uint16(32700), + 177: uint16(24362), + 178: uint16(24361), + 179: uint16(24365), + 180: uint16(33396), + 181: uint16(24380), + 182: uint16(39739), + 183: uint16(23662), + 184: uint16(22913), + 185: uint16(22915), + 186: uint16(22925), + 187: uint16(22953), + 188: uint16(22954), + 189: uint16(22947), + }, + 101: { + 0: uint16(37740), + 1: uint16(37741), + 2: uint16(37742), + 3: uint16(37743), + 4: uint16(37744), + 5: uint16(37745), + 6: uint16(37746), + 7: uint16(37747), + 8: uint16(37748), + 9: uint16(37749), + 10: uint16(37750), + 11: uint16(37751), + 12: uint16(37752), + 13: uint16(37753), + 14: uint16(37754), + 15: uint16(37755), + 16: uint16(37756), + 17: uint16(37757), + 18: uint16(37758), + 19: uint16(37759), + 20: uint16(37760), + 21: uint16(37761), + 22: uint16(37762), + 23: uint16(37763), + 24: uint16(37764), + 25: uint16(37765), + 26: uint16(37766), + 27: uint16(37767), + 28: uint16(37768), + 29: uint16(37769), + 30: uint16(37770), + 31: uint16(37771), + 32: uint16(37772), + 33: uint16(37773), + 34: uint16(37774), + 35: uint16(37776), + 36: uint16(37777), + 37: uint16(37778), + 38: uint16(37779), + 39: uint16(37780), + 40: uint16(37781), + 41: uint16(37782), + 42: uint16(37783), + 43: uint16(37784), + 44: uint16(37785), + 45: uint16(37786), + 46: uint16(37787), + 47: uint16(37788), + 48: uint16(37789), + 49: uint16(37790), + 50: uint16(37791), + 51: uint16(37792), + 52: uint16(37793), + 53: uint16(37794), + 54: uint16(37795), + 55: uint16(37796), + 56: uint16(37797), + 57: uint16(37798), + 58: uint16(37799), + 59: uint16(37800), + 60: uint16(37801), + 61: uint16(37802), + 62: uint16(37803), + 63: uint16(37804), + 64: uint16(37805), + 65: uint16(37806), + 66: uint16(37807), + 67: uint16(37808), + 68: uint16(37809), + 69: uint16(37810), + 70: uint16(37811), + 71: uint16(37812), + 72: uint16(37813), + 73: uint16(37814), + 74: uint16(37815), + 75: uint16(37816), + 76: uint16(37817), + 77: uint16(37818), + 78: uint16(37819), + 79: uint16(37820), + 80: uint16(37821), + 81: uint16(37822), + 82: uint16(37823), + 83: uint16(37824), + 84: uint16(37825), + 85: uint16(37826), + 86: uint16(37827), + 87: uint16(37828), + 88: uint16(37829), + 89: uint16(37830), + 90: uint16(37831), + 91: uint16(37832), + 92: uint16(37833), + 93: uint16(37835), + 94: uint16(37836), + 95: uint16(37837), + 96: uint16(22935), + 97: uint16(22986), + 98: uint16(22955), + 99: uint16(22942), + 100: uint16(22948), + 101: uint16(22994), + 102: uint16(22962), + 103: uint16(22959), + 104: uint16(22999), + 105: uint16(22974), + 106: uint16(23045), + 107: uint16(23046), + 108: uint16(23005), + 109: uint16(23048), + 110: uint16(23011), + 111: uint16(23000), + 112: uint16(23033), + 113: uint16(23052), + 114: uint16(23049), + 115: uint16(23090), + 116: uint16(23092), + 117: uint16(23057), + 118: uint16(23075), + 119: uint16(23059), + 120: uint16(23104), + 121: uint16(23143), + 122: uint16(23114), + 123: uint16(23125), + 124: uint16(23100), + 125: uint16(23138), + 126: uint16(23157), + 127: uint16(33004), + 128: uint16(23210), + 129: uint16(23195), + 130: uint16(23159), + 131: uint16(23162), + 132: uint16(23230), + 133: uint16(23275), + 134: uint16(23218), + 135: uint16(23250), + 136: uint16(23252), + 137: uint16(23224), + 138: uint16(23264), + 139: uint16(23267), + 140: uint16(23281), + 141: uint16(23254), + 142: uint16(23270), + 143: uint16(23256), + 144: uint16(23260), + 145: uint16(23305), + 146: uint16(23319), + 147: uint16(23318), + 148: uint16(23346), + 149: uint16(23351), + 150: uint16(23360), + 151: uint16(23573), + 152: uint16(23580), + 153: uint16(23386), + 154: uint16(23397), + 155: uint16(23411), + 156: uint16(23377), + 157: uint16(23379), + 158: uint16(23394), + 159: uint16(39541), + 160: uint16(39543), + 161: uint16(39544), + 162: uint16(39546), + 163: uint16(39551), + 164: uint16(39549), + 165: uint16(39552), + 166: uint16(39553), + 167: uint16(39557), + 168: uint16(39560), + 169: uint16(39562), + 170: uint16(39568), + 171: uint16(39570), + 172: uint16(39571), + 173: uint16(39574), + 174: uint16(39576), + 175: uint16(39579), + 176: uint16(39580), + 177: uint16(39581), + 178: uint16(39583), + 179: uint16(39584), + 180: uint16(39586), + 181: uint16(39587), + 182: uint16(39589), + 183: uint16(39591), + 184: uint16(32415), + 185: uint16(32417), + 186: uint16(32419), + 187: uint16(32421), + 188: uint16(32424), + 189: uint16(32425), + }, + 102: { + 0: uint16(37838), + 1: uint16(37839), + 2: uint16(37840), + 3: uint16(37841), + 4: uint16(37842), + 5: uint16(37843), + 6: uint16(37844), + 7: uint16(37845), + 8: uint16(37847), + 9: uint16(37848), + 10: uint16(37849), + 11: uint16(37850), + 12: uint16(37851), + 13: uint16(37852), + 14: uint16(37853), + 15: uint16(37854), + 16: uint16(37855), + 17: uint16(37856), + 18: uint16(37857), + 19: uint16(37858), + 20: uint16(37859), + 21: uint16(37860), + 22: uint16(37861), + 23: uint16(37862), + 24: uint16(37863), + 25: uint16(37864), + 26: uint16(37865), + 27: uint16(37866), + 28: uint16(37867), + 29: uint16(37868), + 30: uint16(37869), + 31: uint16(37870), + 32: uint16(37871), + 33: uint16(37872), + 34: uint16(37873), + 35: uint16(37874), + 36: uint16(37875), + 37: uint16(37876), + 38: uint16(37877), + 39: uint16(37878), + 40: uint16(37879), + 41: uint16(37880), + 42: uint16(37881), + 43: uint16(37882), + 44: uint16(37883), + 45: uint16(37884), + 46: uint16(37885), + 47: uint16(37886), + 48: uint16(37887), + 49: uint16(37888), + 50: uint16(37889), + 51: uint16(37890), + 52: uint16(37891), + 53: uint16(37892), + 54: uint16(37893), + 55: uint16(37894), + 56: uint16(37895), + 57: uint16(37896), + 58: uint16(37897), + 59: uint16(37898), + 60: uint16(37899), + 61: uint16(37900), + 62: uint16(37901), + 63: uint16(37902), + 64: uint16(37903), + 65: uint16(37904), + 66: uint16(37905), + 67: uint16(37906), + 68: uint16(37907), + 69: uint16(37908), + 70: uint16(37909), + 71: uint16(37910), + 72: uint16(37911), + 73: uint16(37912), + 74: uint16(37913), + 75: uint16(37914), + 76: uint16(37915), + 77: uint16(37916), + 78: uint16(37917), + 79: uint16(37918), + 80: uint16(37919), + 81: uint16(37920), + 82: uint16(37921), + 83: uint16(37922), + 84: uint16(37923), + 85: uint16(37924), + 86: uint16(37925), + 87: uint16(37926), + 88: uint16(37927), + 89: uint16(37928), + 90: uint16(37929), + 91: uint16(37930), + 92: uint16(37931), + 93: uint16(37932), + 94: uint16(37933), + 95: uint16(37934), + 96: uint16(32429), + 97: uint16(32432), + 98: uint16(32446), + 99: uint16(32448), + 100: uint16(32449), + 101: uint16(32450), + 102: uint16(32457), + 103: uint16(32459), + 104: uint16(32460), + 105: uint16(32464), + 106: uint16(32468), + 107: uint16(32471), + 108: uint16(32475), + 109: uint16(32480), + 110: uint16(32481), + 111: uint16(32488), + 112: uint16(32491), + 113: uint16(32494), + 114: uint16(32495), + 115: uint16(32497), + 116: uint16(32498), + 117: uint16(32525), + 118: uint16(32502), + 119: uint16(32506), + 120: uint16(32507), + 121: uint16(32510), + 122: uint16(32513), + 123: uint16(32514), + 124: uint16(32515), + 125: uint16(32519), + 126: uint16(32520), + 127: uint16(32523), + 128: uint16(32524), + 129: uint16(32527), + 130: uint16(32529), + 131: uint16(32530), + 132: uint16(32535), + 133: uint16(32537), + 134: uint16(32540), + 135: uint16(32539), + 136: uint16(32543), + 137: uint16(32545), + 138: uint16(32546), + 139: uint16(32547), + 140: uint16(32548), + 141: uint16(32549), + 142: uint16(32550), + 143: uint16(32551), + 144: uint16(32554), + 145: uint16(32555), + 146: uint16(32556), + 147: uint16(32557), + 148: uint16(32559), + 149: uint16(32560), + 150: uint16(32561), + 151: uint16(32562), + 152: uint16(32563), + 153: uint16(32565), + 154: uint16(24186), + 155: uint16(30079), + 156: uint16(24027), + 157: uint16(30014), + 158: uint16(37013), + 159: uint16(29582), + 160: uint16(29585), + 161: uint16(29614), + 162: uint16(29602), + 163: uint16(29599), + 164: uint16(29647), + 165: uint16(29634), + 166: uint16(29649), + 167: uint16(29623), + 168: uint16(29619), + 169: uint16(29632), + 170: uint16(29641), + 171: uint16(29640), + 172: uint16(29669), + 173: uint16(29657), + 174: uint16(39036), + 175: uint16(29706), + 176: uint16(29673), + 177: uint16(29671), + 178: uint16(29662), + 179: uint16(29626), + 180: uint16(29682), + 181: uint16(29711), + 182: uint16(29738), + 183: uint16(29787), + 184: uint16(29734), + 185: uint16(29733), + 186: uint16(29736), + 187: uint16(29744), + 188: uint16(29742), + 189: uint16(29740), + }, + 103: { + 0: uint16(37935), + 1: uint16(37936), + 2: uint16(37937), + 3: uint16(37938), + 4: uint16(37939), + 5: uint16(37940), + 6: uint16(37941), + 7: uint16(37942), + 8: uint16(37943), + 9: uint16(37944), + 10: uint16(37945), + 11: uint16(37946), + 12: uint16(37947), + 13: uint16(37948), + 14: uint16(37949), + 15: uint16(37951), + 16: uint16(37952), + 17: uint16(37953), + 18: uint16(37954), + 19: uint16(37955), + 20: uint16(37956), + 21: uint16(37957), + 22: uint16(37958), + 23: uint16(37959), + 24: uint16(37960), + 25: uint16(37961), + 26: uint16(37962), + 27: uint16(37963), + 28: uint16(37964), + 29: uint16(37965), + 30: uint16(37966), + 31: uint16(37967), + 32: uint16(37968), + 33: uint16(37969), + 34: uint16(37970), + 35: uint16(37971), + 36: uint16(37972), + 37: uint16(37973), + 38: uint16(37974), + 39: uint16(37975), + 40: uint16(37976), + 41: uint16(37977), + 42: uint16(37978), + 43: uint16(37979), + 44: uint16(37980), + 45: uint16(37981), + 46: uint16(37982), + 47: uint16(37983), + 48: uint16(37984), + 49: uint16(37985), + 50: uint16(37986), + 51: uint16(37987), + 52: uint16(37988), + 53: uint16(37989), + 54: uint16(37990), + 55: uint16(37991), + 56: uint16(37992), + 57: uint16(37993), + 58: uint16(37994), + 59: uint16(37996), + 60: uint16(37997), + 61: uint16(37998), + 62: uint16(37999), + 63: uint16(38000), + 64: uint16(38001), + 65: uint16(38002), + 66: uint16(38003), + 67: uint16(38004), + 68: uint16(38005), + 69: uint16(38006), + 70: uint16(38007), + 71: uint16(38008), + 72: uint16(38009), + 73: uint16(38010), + 74: uint16(38011), + 75: uint16(38012), + 76: uint16(38013), + 77: uint16(38014), + 78: uint16(38015), + 79: uint16(38016), + 80: uint16(38017), + 81: uint16(38018), + 82: uint16(38019), + 83: uint16(38020), + 84: uint16(38033), + 85: uint16(38038), + 86: uint16(38040), + 87: uint16(38087), + 88: uint16(38095), + 89: uint16(38099), + 90: uint16(38100), + 91: uint16(38106), + 92: uint16(38118), + 93: uint16(38139), + 94: uint16(38172), + 95: uint16(38176), + 96: uint16(29723), + 97: uint16(29722), + 98: uint16(29761), + 99: uint16(29788), + 100: uint16(29783), + 101: uint16(29781), + 102: uint16(29785), + 103: uint16(29815), + 104: uint16(29805), + 105: uint16(29822), + 106: uint16(29852), + 107: uint16(29838), + 108: uint16(29824), + 109: uint16(29825), + 110: uint16(29831), + 111: uint16(29835), + 112: uint16(29854), + 113: uint16(29864), + 114: uint16(29865), + 115: uint16(29840), + 116: uint16(29863), + 117: uint16(29906), + 118: uint16(29882), + 119: uint16(38890), + 120: uint16(38891), + 121: uint16(38892), + 122: uint16(26444), + 123: uint16(26451), + 124: uint16(26462), + 125: uint16(26440), + 126: uint16(26473), + 127: uint16(26533), + 128: uint16(26503), + 129: uint16(26474), + 130: uint16(26483), + 131: uint16(26520), + 132: uint16(26535), + 133: uint16(26485), + 134: uint16(26536), + 135: uint16(26526), + 136: uint16(26541), + 137: uint16(26507), + 138: uint16(26487), + 139: uint16(26492), + 140: uint16(26608), + 141: uint16(26633), + 142: uint16(26584), + 143: uint16(26634), + 144: uint16(26601), + 145: uint16(26544), + 146: uint16(26636), + 147: uint16(26585), + 148: uint16(26549), + 149: uint16(26586), + 150: uint16(26547), + 151: uint16(26589), + 152: uint16(26624), + 153: uint16(26563), + 154: uint16(26552), + 155: uint16(26594), + 156: uint16(26638), + 157: uint16(26561), + 158: uint16(26621), + 159: uint16(26674), + 160: uint16(26675), + 161: uint16(26720), + 162: uint16(26721), + 163: uint16(26702), + 164: uint16(26722), + 165: uint16(26692), + 166: uint16(26724), + 167: uint16(26755), + 168: uint16(26653), + 169: uint16(26709), + 170: uint16(26726), + 171: uint16(26689), + 172: uint16(26727), + 173: uint16(26688), + 174: uint16(26686), + 175: uint16(26698), + 176: uint16(26697), + 177: uint16(26665), + 178: uint16(26805), + 179: uint16(26767), + 180: uint16(26740), + 181: uint16(26743), + 182: uint16(26771), + 183: uint16(26731), + 184: uint16(26818), + 185: uint16(26990), + 186: uint16(26876), + 187: uint16(26911), + 188: uint16(26912), + 189: uint16(26873), + }, + 104: { + 0: uint16(38183), + 1: uint16(38195), + 2: uint16(38205), + 3: uint16(38211), + 4: uint16(38216), + 5: uint16(38219), + 6: uint16(38229), + 7: uint16(38234), + 8: uint16(38240), + 9: uint16(38254), + 10: uint16(38260), + 11: uint16(38261), + 12: uint16(38263), + 13: uint16(38264), + 14: uint16(38265), + 15: uint16(38266), + 16: uint16(38267), + 17: uint16(38268), + 18: uint16(38269), + 19: uint16(38270), + 20: uint16(38272), + 21: uint16(38273), + 22: uint16(38274), + 23: uint16(38275), + 24: uint16(38276), + 25: uint16(38277), + 26: uint16(38278), + 27: uint16(38279), + 28: uint16(38280), + 29: uint16(38281), + 30: uint16(38282), + 31: uint16(38283), + 32: uint16(38284), + 33: uint16(38285), + 34: uint16(38286), + 35: uint16(38287), + 36: uint16(38288), + 37: uint16(38289), + 38: uint16(38290), + 39: uint16(38291), + 40: uint16(38292), + 41: uint16(38293), + 42: uint16(38294), + 43: uint16(38295), + 44: uint16(38296), + 45: uint16(38297), + 46: uint16(38298), + 47: uint16(38299), + 48: uint16(38300), + 49: uint16(38301), + 50: uint16(38302), + 51: uint16(38303), + 52: uint16(38304), + 53: uint16(38305), + 54: uint16(38306), + 55: uint16(38307), + 56: uint16(38308), + 57: uint16(38309), + 58: uint16(38310), + 59: uint16(38311), + 60: uint16(38312), + 61: uint16(38313), + 62: uint16(38314), + 63: uint16(38315), + 64: uint16(38316), + 65: uint16(38317), + 66: uint16(38318), + 67: uint16(38319), + 68: uint16(38320), + 69: uint16(38321), + 70: uint16(38322), + 71: uint16(38323), + 72: uint16(38324), + 73: uint16(38325), + 74: uint16(38326), + 75: uint16(38327), + 76: uint16(38328), + 77: uint16(38329), + 78: uint16(38330), + 79: uint16(38331), + 80: uint16(38332), + 81: uint16(38333), + 82: uint16(38334), + 83: uint16(38335), + 84: uint16(38336), + 85: uint16(38337), + 86: uint16(38338), + 87: uint16(38339), + 88: uint16(38340), + 89: uint16(38341), + 90: uint16(38342), + 91: uint16(38343), + 92: uint16(38344), + 93: uint16(38345), + 94: uint16(38346), + 95: uint16(38347), + 96: uint16(26916), + 97: uint16(26864), + 98: uint16(26891), + 99: uint16(26881), + 100: uint16(26967), + 101: uint16(26851), + 102: uint16(26896), + 103: uint16(26993), + 104: uint16(26937), + 105: uint16(26976), + 106: uint16(26946), + 107: uint16(26973), + 108: uint16(27012), + 109: uint16(26987), + 110: uint16(27008), + 111: uint16(27032), + 112: uint16(27000), + 113: uint16(26932), + 114: uint16(27084), + 115: uint16(27015), + 116: uint16(27016), + 117: uint16(27086), + 118: uint16(27017), + 119: uint16(26982), + 120: uint16(26979), + 121: uint16(27001), + 122: uint16(27035), + 123: uint16(27047), + 124: uint16(27067), + 125: uint16(27051), + 126: uint16(27053), + 127: uint16(27092), + 128: uint16(27057), + 129: uint16(27073), + 130: uint16(27082), + 131: uint16(27103), + 132: uint16(27029), + 133: uint16(27104), + 134: uint16(27021), + 135: uint16(27135), + 136: uint16(27183), + 137: uint16(27117), + 138: uint16(27159), + 139: uint16(27160), + 140: uint16(27237), + 141: uint16(27122), + 142: uint16(27204), + 143: uint16(27198), + 144: uint16(27296), + 145: uint16(27216), + 146: uint16(27227), + 147: uint16(27189), + 148: uint16(27278), + 149: uint16(27257), + 150: uint16(27197), + 151: uint16(27176), + 152: uint16(27224), + 153: uint16(27260), + 154: uint16(27281), + 155: uint16(27280), + 156: uint16(27305), + 157: uint16(27287), + 158: uint16(27307), + 159: uint16(29495), + 160: uint16(29522), + 161: uint16(27521), + 162: uint16(27522), + 163: uint16(27527), + 164: uint16(27524), + 165: uint16(27538), + 166: uint16(27539), + 167: uint16(27533), + 168: uint16(27546), + 169: uint16(27547), + 170: uint16(27553), + 171: uint16(27562), + 172: uint16(36715), + 173: uint16(36717), + 174: uint16(36721), + 175: uint16(36722), + 176: uint16(36723), + 177: uint16(36725), + 178: uint16(36726), + 179: uint16(36728), + 180: uint16(36727), + 181: uint16(36729), + 182: uint16(36730), + 183: uint16(36732), + 184: uint16(36734), + 185: uint16(36737), + 186: uint16(36738), + 187: uint16(36740), + 188: uint16(36743), + 189: uint16(36747), + }, + 105: { + 0: uint16(38348), + 1: uint16(38349), + 2: uint16(38350), + 3: uint16(38351), + 4: uint16(38352), + 5: uint16(38353), + 6: uint16(38354), + 7: uint16(38355), + 8: uint16(38356), + 9: uint16(38357), + 10: uint16(38358), + 11: uint16(38359), + 12: uint16(38360), + 13: uint16(38361), + 14: uint16(38362), + 15: uint16(38363), + 16: uint16(38364), + 17: uint16(38365), + 18: uint16(38366), + 19: uint16(38367), + 20: uint16(38368), + 21: uint16(38369), + 22: uint16(38370), + 23: uint16(38371), + 24: uint16(38372), + 25: uint16(38373), + 26: uint16(38374), + 27: uint16(38375), + 28: uint16(38380), + 29: uint16(38399), + 30: uint16(38407), + 31: uint16(38419), + 32: uint16(38424), + 33: uint16(38427), + 34: uint16(38430), + 35: uint16(38432), + 36: uint16(38435), + 37: uint16(38436), + 38: uint16(38437), + 39: uint16(38438), + 40: uint16(38439), + 41: uint16(38440), + 42: uint16(38441), + 43: uint16(38443), + 44: uint16(38444), + 45: uint16(38445), + 46: uint16(38447), + 47: uint16(38448), + 48: uint16(38455), + 49: uint16(38456), + 50: uint16(38457), + 51: uint16(38458), + 52: uint16(38462), + 53: uint16(38465), + 54: uint16(38467), + 55: uint16(38474), + 56: uint16(38478), + 57: uint16(38479), + 58: uint16(38481), + 59: uint16(38482), + 60: uint16(38483), + 61: uint16(38486), + 62: uint16(38487), + 63: uint16(38488), + 64: uint16(38489), + 65: uint16(38490), + 66: uint16(38492), + 67: uint16(38493), + 68: uint16(38494), + 69: uint16(38496), + 70: uint16(38499), + 71: uint16(38501), + 72: uint16(38502), + 73: uint16(38507), + 74: uint16(38509), + 75: uint16(38510), + 76: uint16(38511), + 77: uint16(38512), + 78: uint16(38513), + 79: uint16(38515), + 80: uint16(38520), + 81: uint16(38521), + 82: uint16(38522), + 83: uint16(38523), + 84: uint16(38524), + 85: uint16(38525), + 86: uint16(38526), + 87: uint16(38527), + 88: uint16(38528), + 89: uint16(38529), + 90: uint16(38530), + 91: uint16(38531), + 92: uint16(38532), + 93: uint16(38535), + 94: uint16(38537), + 95: uint16(38538), + 96: uint16(36749), + 97: uint16(36750), + 98: uint16(36751), + 99: uint16(36760), + 100: uint16(36762), + 101: uint16(36558), + 102: uint16(25099), + 103: uint16(25111), + 104: uint16(25115), + 105: uint16(25119), + 106: uint16(25122), + 107: uint16(25121), + 108: uint16(25125), + 109: uint16(25124), + 110: uint16(25132), + 111: uint16(33255), + 112: uint16(29935), + 113: uint16(29940), + 114: uint16(29951), + 115: uint16(29967), + 116: uint16(29969), + 117: uint16(29971), + 118: uint16(25908), + 119: uint16(26094), + 120: uint16(26095), + 121: uint16(26096), + 122: uint16(26122), + 123: uint16(26137), + 124: uint16(26482), + 125: uint16(26115), + 126: uint16(26133), + 127: uint16(26112), + 128: uint16(28805), + 129: uint16(26359), + 130: uint16(26141), + 131: uint16(26164), + 132: uint16(26161), + 133: uint16(26166), + 134: uint16(26165), + 135: uint16(32774), + 136: uint16(26207), + 137: uint16(26196), + 138: uint16(26177), + 139: uint16(26191), + 140: uint16(26198), + 141: uint16(26209), + 142: uint16(26199), + 143: uint16(26231), + 144: uint16(26244), + 145: uint16(26252), + 146: uint16(26279), + 147: uint16(26269), + 148: uint16(26302), + 149: uint16(26331), + 150: uint16(26332), + 151: uint16(26342), + 152: uint16(26345), + 153: uint16(36146), + 154: uint16(36147), + 155: uint16(36150), + 156: uint16(36155), + 157: uint16(36157), + 158: uint16(36160), + 159: uint16(36165), + 160: uint16(36166), + 161: uint16(36168), + 162: uint16(36169), + 163: uint16(36167), + 164: uint16(36173), + 165: uint16(36181), + 166: uint16(36185), + 167: uint16(35271), + 168: uint16(35274), + 169: uint16(35275), + 170: uint16(35276), + 171: uint16(35278), + 172: uint16(35279), + 173: uint16(35280), + 174: uint16(35281), + 175: uint16(29294), + 176: uint16(29343), + 177: uint16(29277), + 178: uint16(29286), + 179: uint16(29295), + 180: uint16(29310), + 181: uint16(29311), + 182: uint16(29316), + 183: uint16(29323), + 184: uint16(29325), + 185: uint16(29327), + 186: uint16(29330), + 187: uint16(25352), + 188: uint16(25394), + 189: uint16(25520), + }, + 106: { + 0: uint16(38540), + 1: uint16(38542), + 2: uint16(38545), + 3: uint16(38546), + 4: uint16(38547), + 5: uint16(38549), + 6: uint16(38550), + 7: uint16(38554), + 8: uint16(38555), + 9: uint16(38557), + 10: uint16(38558), + 11: uint16(38559), + 12: uint16(38560), + 13: uint16(38561), + 14: uint16(38562), + 15: uint16(38563), + 16: uint16(38564), + 17: uint16(38565), + 18: uint16(38566), + 19: uint16(38568), + 20: uint16(38569), + 21: uint16(38570), + 22: uint16(38571), + 23: uint16(38572), + 24: uint16(38573), + 25: uint16(38574), + 26: uint16(38575), + 27: uint16(38577), + 28: uint16(38578), + 29: uint16(38580), + 30: uint16(38581), + 31: uint16(38583), + 32: uint16(38584), + 33: uint16(38586), + 34: uint16(38587), + 35: uint16(38591), + 36: uint16(38594), + 37: uint16(38595), + 38: uint16(38600), + 39: uint16(38602), + 40: uint16(38603), + 41: uint16(38608), + 42: uint16(38609), + 43: uint16(38611), + 44: uint16(38612), + 45: uint16(38614), + 46: uint16(38615), + 47: uint16(38616), + 48: uint16(38617), + 49: uint16(38618), + 50: uint16(38619), + 51: uint16(38620), + 52: uint16(38621), + 53: uint16(38622), + 54: uint16(38623), + 55: uint16(38625), + 56: uint16(38626), + 57: uint16(38627), + 58: uint16(38628), + 59: uint16(38629), + 60: uint16(38630), + 61: uint16(38631), + 62: uint16(38635), + 63: uint16(38636), + 64: uint16(38637), + 65: uint16(38638), + 66: uint16(38640), + 67: uint16(38641), + 68: uint16(38642), + 69: uint16(38644), + 70: uint16(38645), + 71: uint16(38648), + 72: uint16(38650), + 73: uint16(38651), + 74: uint16(38652), + 75: uint16(38653), + 76: uint16(38655), + 77: uint16(38658), + 78: uint16(38659), + 79: uint16(38661), + 80: uint16(38666), + 81: uint16(38667), + 82: uint16(38668), + 83: uint16(38672), + 84: uint16(38673), + 85: uint16(38674), + 86: uint16(38676), + 87: uint16(38677), + 88: uint16(38679), + 89: uint16(38680), + 90: uint16(38681), + 91: uint16(38682), + 92: uint16(38683), + 93: uint16(38685), + 94: uint16(38687), + 95: uint16(38688), + 96: uint16(25663), + 97: uint16(25816), + 98: uint16(32772), + 99: uint16(27626), + 100: uint16(27635), + 101: uint16(27645), + 102: uint16(27637), + 103: uint16(27641), + 104: uint16(27653), + 105: uint16(27655), + 106: uint16(27654), + 107: uint16(27661), + 108: uint16(27669), + 109: uint16(27672), + 110: uint16(27673), + 111: uint16(27674), + 112: uint16(27681), + 113: uint16(27689), + 114: uint16(27684), + 115: uint16(27690), + 116: uint16(27698), + 117: uint16(25909), + 118: uint16(25941), + 119: uint16(25963), + 120: uint16(29261), + 121: uint16(29266), + 122: uint16(29270), + 123: uint16(29232), + 124: uint16(34402), + 125: uint16(21014), + 126: uint16(32927), + 127: uint16(32924), + 128: uint16(32915), + 129: uint16(32956), + 130: uint16(26378), + 131: uint16(32957), + 132: uint16(32945), + 133: uint16(32939), + 134: uint16(32941), + 135: uint16(32948), + 136: uint16(32951), + 137: uint16(32999), + 138: uint16(33000), + 139: uint16(33001), + 140: uint16(33002), + 141: uint16(32987), + 142: uint16(32962), + 143: uint16(32964), + 144: uint16(32985), + 145: uint16(32973), + 146: uint16(32983), + 147: uint16(26384), + 148: uint16(32989), + 149: uint16(33003), + 150: uint16(33009), + 151: uint16(33012), + 152: uint16(33005), + 153: uint16(33037), + 154: uint16(33038), + 155: uint16(33010), + 156: uint16(33020), + 157: uint16(26389), + 158: uint16(33042), + 159: uint16(35930), + 160: uint16(33078), + 161: uint16(33054), + 162: uint16(33068), + 163: uint16(33048), + 164: uint16(33074), + 165: uint16(33096), + 166: uint16(33100), + 167: uint16(33107), + 168: uint16(33140), + 169: uint16(33113), + 170: uint16(33114), + 171: uint16(33137), + 172: uint16(33120), + 173: uint16(33129), + 174: uint16(33148), + 175: uint16(33149), + 176: uint16(33133), + 177: uint16(33127), + 178: uint16(22605), + 179: uint16(23221), + 180: uint16(33160), + 181: uint16(33154), + 182: uint16(33169), + 183: uint16(28373), + 184: uint16(33187), + 185: uint16(33194), + 186: uint16(33228), + 187: uint16(26406), + 188: uint16(33226), + 189: uint16(33211), + }, + 107: { + 0: uint16(38689), + 1: uint16(38690), + 2: uint16(38691), + 3: uint16(38692), + 4: uint16(38693), + 5: uint16(38694), + 6: uint16(38695), + 7: uint16(38696), + 8: uint16(38697), + 9: uint16(38699), + 10: uint16(38700), + 11: uint16(38702), + 12: uint16(38703), + 13: uint16(38705), + 14: uint16(38707), + 15: uint16(38708), + 16: uint16(38709), + 17: uint16(38710), + 18: uint16(38711), + 19: uint16(38714), + 20: uint16(38715), + 21: uint16(38716), + 22: uint16(38717), + 23: uint16(38719), + 24: uint16(38720), + 25: uint16(38721), + 26: uint16(38722), + 27: uint16(38723), + 28: uint16(38724), + 29: uint16(38725), + 30: uint16(38726), + 31: uint16(38727), + 32: uint16(38728), + 33: uint16(38729), + 34: uint16(38730), + 35: uint16(38731), + 36: uint16(38732), + 37: uint16(38733), + 38: uint16(38734), + 39: uint16(38735), + 40: uint16(38736), + 41: uint16(38737), + 42: uint16(38740), + 43: uint16(38741), + 44: uint16(38743), + 45: uint16(38744), + 46: uint16(38746), + 47: uint16(38748), + 48: uint16(38749), + 49: uint16(38751), + 50: uint16(38755), + 51: uint16(38756), + 52: uint16(38758), + 53: uint16(38759), + 54: uint16(38760), + 55: uint16(38762), + 56: uint16(38763), + 57: uint16(38764), + 58: uint16(38765), + 59: uint16(38766), + 60: uint16(38767), + 61: uint16(38768), + 62: uint16(38769), + 63: uint16(38770), + 64: uint16(38773), + 65: uint16(38775), + 66: uint16(38776), + 67: uint16(38777), + 68: uint16(38778), + 69: uint16(38779), + 70: uint16(38781), + 71: uint16(38782), + 72: uint16(38783), + 73: uint16(38784), + 74: uint16(38785), + 75: uint16(38786), + 76: uint16(38787), + 77: uint16(38788), + 78: uint16(38790), + 79: uint16(38791), + 80: uint16(38792), + 81: uint16(38793), + 82: uint16(38794), + 83: uint16(38796), + 84: uint16(38798), + 85: uint16(38799), + 86: uint16(38800), + 87: uint16(38803), + 88: uint16(38805), + 89: uint16(38806), + 90: uint16(38807), + 91: uint16(38809), + 92: uint16(38810), + 93: uint16(38811), + 94: uint16(38812), + 95: uint16(38813), + 96: uint16(33217), + 97: uint16(33190), + 98: uint16(27428), + 99: uint16(27447), + 100: uint16(27449), + 101: uint16(27459), + 102: uint16(27462), + 103: uint16(27481), + 104: uint16(39121), + 105: uint16(39122), + 106: uint16(39123), + 107: uint16(39125), + 108: uint16(39129), + 109: uint16(39130), + 110: uint16(27571), + 111: uint16(24384), + 112: uint16(27586), + 113: uint16(35315), + 114: uint16(26000), + 115: uint16(40785), + 116: uint16(26003), + 117: uint16(26044), + 118: uint16(26054), + 119: uint16(26052), + 120: uint16(26051), + 121: uint16(26060), + 122: uint16(26062), + 123: uint16(26066), + 124: uint16(26070), + 125: uint16(28800), + 126: uint16(28828), + 127: uint16(28822), + 128: uint16(28829), + 129: uint16(28859), + 130: uint16(28864), + 131: uint16(28855), + 132: uint16(28843), + 133: uint16(28849), + 134: uint16(28904), + 135: uint16(28874), + 136: uint16(28944), + 137: uint16(28947), + 138: uint16(28950), + 139: uint16(28975), + 140: uint16(28977), + 141: uint16(29043), + 142: uint16(29020), + 143: uint16(29032), + 144: uint16(28997), + 145: uint16(29042), + 146: uint16(29002), + 147: uint16(29048), + 148: uint16(29050), + 149: uint16(29080), + 150: uint16(29107), + 151: uint16(29109), + 152: uint16(29096), + 153: uint16(29088), + 154: uint16(29152), + 155: uint16(29140), + 156: uint16(29159), + 157: uint16(29177), + 158: uint16(29213), + 159: uint16(29224), + 160: uint16(28780), + 161: uint16(28952), + 162: uint16(29030), + 163: uint16(29113), + 164: uint16(25150), + 165: uint16(25149), + 166: uint16(25155), + 167: uint16(25160), + 168: uint16(25161), + 169: uint16(31035), + 170: uint16(31040), + 171: uint16(31046), + 172: uint16(31049), + 173: uint16(31067), + 174: uint16(31068), + 175: uint16(31059), + 176: uint16(31066), + 177: uint16(31074), + 178: uint16(31063), + 179: uint16(31072), + 180: uint16(31087), + 181: uint16(31079), + 182: uint16(31098), + 183: uint16(31109), + 184: uint16(31114), + 185: uint16(31130), + 186: uint16(31143), + 187: uint16(31155), + 188: uint16(24529), + 189: uint16(24528), + }, + 108: { + 0: uint16(38814), + 1: uint16(38815), + 2: uint16(38817), + 3: uint16(38818), + 4: uint16(38820), + 5: uint16(38821), + 6: uint16(38822), + 7: uint16(38823), + 8: uint16(38824), + 9: uint16(38825), + 10: uint16(38826), + 11: uint16(38828), + 12: uint16(38830), + 13: uint16(38832), + 14: uint16(38833), + 15: uint16(38835), + 16: uint16(38837), + 17: uint16(38838), + 18: uint16(38839), + 19: uint16(38840), + 20: uint16(38841), + 21: uint16(38842), + 22: uint16(38843), + 23: uint16(38844), + 24: uint16(38845), + 25: uint16(38846), + 26: uint16(38847), + 27: uint16(38848), + 28: uint16(38849), + 29: uint16(38850), + 30: uint16(38851), + 31: uint16(38852), + 32: uint16(38853), + 33: uint16(38854), + 34: uint16(38855), + 35: uint16(38856), + 36: uint16(38857), + 37: uint16(38858), + 38: uint16(38859), + 39: uint16(38860), + 40: uint16(38861), + 41: uint16(38862), + 42: uint16(38863), + 43: uint16(38864), + 44: uint16(38865), + 45: uint16(38866), + 46: uint16(38867), + 47: uint16(38868), + 48: uint16(38869), + 49: uint16(38870), + 50: uint16(38871), + 51: uint16(38872), + 52: uint16(38873), + 53: uint16(38874), + 54: uint16(38875), + 55: uint16(38876), + 56: uint16(38877), + 57: uint16(38878), + 58: uint16(38879), + 59: uint16(38880), + 60: uint16(38881), + 61: uint16(38882), + 62: uint16(38883), + 63: uint16(38884), + 64: uint16(38885), + 65: uint16(38888), + 66: uint16(38894), + 67: uint16(38895), + 68: uint16(38896), + 69: uint16(38897), + 70: uint16(38898), + 71: uint16(38900), + 72: uint16(38903), + 73: uint16(38904), + 74: uint16(38905), + 75: uint16(38906), + 76: uint16(38907), + 77: uint16(38908), + 78: uint16(38909), + 79: uint16(38910), + 80: uint16(38911), + 81: uint16(38912), + 82: uint16(38913), + 83: uint16(38914), + 84: uint16(38915), + 85: uint16(38916), + 86: uint16(38917), + 87: uint16(38918), + 88: uint16(38919), + 89: uint16(38920), + 90: uint16(38921), + 91: uint16(38922), + 92: uint16(38923), + 93: uint16(38924), + 94: uint16(38925), + 95: uint16(38926), + 96: uint16(24636), + 97: uint16(24669), + 98: uint16(24666), + 99: uint16(24679), + 100: uint16(24641), + 101: uint16(24665), + 102: uint16(24675), + 103: uint16(24747), + 104: uint16(24838), + 105: uint16(24845), + 106: uint16(24925), + 107: uint16(25001), + 108: uint16(24989), + 109: uint16(25035), + 110: uint16(25041), + 111: uint16(25094), + 112: uint16(32896), + 113: uint16(32895), + 114: uint16(27795), + 115: uint16(27894), + 116: uint16(28156), + 117: uint16(30710), + 118: uint16(30712), + 119: uint16(30720), + 120: uint16(30729), + 121: uint16(30743), + 122: uint16(30744), + 123: uint16(30737), + 124: uint16(26027), + 125: uint16(30765), + 126: uint16(30748), + 127: uint16(30749), + 128: uint16(30777), + 129: uint16(30778), + 130: uint16(30779), + 131: uint16(30751), + 132: uint16(30780), + 133: uint16(30757), + 134: uint16(30764), + 135: uint16(30755), + 136: uint16(30761), + 137: uint16(30798), + 138: uint16(30829), + 139: uint16(30806), + 140: uint16(30807), + 141: uint16(30758), + 142: uint16(30800), + 143: uint16(30791), + 144: uint16(30796), + 145: uint16(30826), + 146: uint16(30875), + 147: uint16(30867), + 148: uint16(30874), + 149: uint16(30855), + 150: uint16(30876), + 151: uint16(30881), + 152: uint16(30883), + 153: uint16(30898), + 154: uint16(30905), + 155: uint16(30885), + 156: uint16(30932), + 157: uint16(30937), + 158: uint16(30921), + 159: uint16(30956), + 160: uint16(30962), + 161: uint16(30981), + 162: uint16(30964), + 163: uint16(30995), + 164: uint16(31012), + 165: uint16(31006), + 166: uint16(31028), + 167: uint16(40859), + 168: uint16(40697), + 169: uint16(40699), + 170: uint16(40700), + 171: uint16(30449), + 172: uint16(30468), + 173: uint16(30477), + 174: uint16(30457), + 175: uint16(30471), + 176: uint16(30472), + 177: uint16(30490), + 178: uint16(30498), + 179: uint16(30489), + 180: uint16(30509), + 181: uint16(30502), + 182: uint16(30517), + 183: uint16(30520), + 184: uint16(30544), + 185: uint16(30545), + 186: uint16(30535), + 187: uint16(30531), + 188: uint16(30554), + 189: uint16(30568), + }, + 109: { + 0: uint16(38927), + 1: uint16(38928), + 2: uint16(38929), + 3: uint16(38930), + 4: uint16(38931), + 5: uint16(38932), + 6: uint16(38933), + 7: uint16(38934), + 8: uint16(38935), + 9: uint16(38936), + 10: uint16(38937), + 11: uint16(38938), + 12: uint16(38939), + 13: uint16(38940), + 14: uint16(38941), + 15: uint16(38942), + 16: uint16(38943), + 17: uint16(38944), + 18: uint16(38945), + 19: uint16(38946), + 20: uint16(38947), + 21: uint16(38948), + 22: uint16(38949), + 23: uint16(38950), + 24: uint16(38951), + 25: uint16(38952), + 26: uint16(38953), + 27: uint16(38954), + 28: uint16(38955), + 29: uint16(38956), + 30: uint16(38957), + 31: uint16(38958), + 32: uint16(38959), + 33: uint16(38960), + 34: uint16(38961), + 35: uint16(38962), + 36: uint16(38963), + 37: uint16(38964), + 38: uint16(38965), + 39: uint16(38966), + 40: uint16(38967), + 41: uint16(38968), + 42: uint16(38969), + 43: uint16(38970), + 44: uint16(38971), + 45: uint16(38972), + 46: uint16(38973), + 47: uint16(38974), + 48: uint16(38975), + 49: uint16(38976), + 50: uint16(38977), + 51: uint16(38978), + 52: uint16(38979), + 53: uint16(38980), + 54: uint16(38981), + 55: uint16(38982), + 56: uint16(38983), + 57: uint16(38984), + 58: uint16(38985), + 59: uint16(38986), + 60: uint16(38987), + 61: uint16(38988), + 62: uint16(38989), + 63: uint16(38990), + 64: uint16(38991), + 65: uint16(38992), + 66: uint16(38993), + 67: uint16(38994), + 68: uint16(38995), + 69: uint16(38996), + 70: uint16(38997), + 71: uint16(38998), + 72: uint16(38999), + 73: uint16(39000), + 74: uint16(39001), + 75: uint16(39002), + 76: uint16(39003), + 77: uint16(39004), + 78: uint16(39005), + 79: uint16(39006), + 80: uint16(39007), + 81: uint16(39008), + 82: uint16(39009), + 83: uint16(39010), + 84: uint16(39011), + 85: uint16(39012), + 86: uint16(39013), + 87: uint16(39014), + 88: uint16(39015), + 89: uint16(39016), + 90: uint16(39017), + 91: uint16(39018), + 92: uint16(39019), + 93: uint16(39020), + 94: uint16(39021), + 95: uint16(39022), + 96: uint16(30562), + 97: uint16(30565), + 98: uint16(30591), + 99: uint16(30605), + 100: uint16(30589), + 101: uint16(30592), + 102: uint16(30604), + 103: uint16(30609), + 104: uint16(30623), + 105: uint16(30624), + 106: uint16(30640), + 107: uint16(30645), + 108: uint16(30653), + 109: uint16(30010), + 110: uint16(30016), + 111: uint16(30030), + 112: uint16(30027), + 113: uint16(30024), + 114: uint16(30043), + 115: uint16(30066), + 116: uint16(30073), + 117: uint16(30083), + 118: uint16(32600), + 119: uint16(32609), + 120: uint16(32607), + 121: uint16(35400), + 122: uint16(32616), + 123: uint16(32628), + 124: uint16(32625), + 125: uint16(32633), + 126: uint16(32641), + 127: uint16(32638), + 128: uint16(30413), + 129: uint16(30437), + 130: uint16(34866), + 131: uint16(38021), + 132: uint16(38022), + 133: uint16(38023), + 134: uint16(38027), + 135: uint16(38026), + 136: uint16(38028), + 137: uint16(38029), + 138: uint16(38031), + 139: uint16(38032), + 140: uint16(38036), + 141: uint16(38039), + 142: uint16(38037), + 143: uint16(38042), + 144: uint16(38043), + 145: uint16(38044), + 146: uint16(38051), + 147: uint16(38052), + 148: uint16(38059), + 149: uint16(38058), + 150: uint16(38061), + 151: uint16(38060), + 152: uint16(38063), + 153: uint16(38064), + 154: uint16(38066), + 155: uint16(38068), + 156: uint16(38070), + 157: uint16(38071), + 158: uint16(38072), + 159: uint16(38073), + 160: uint16(38074), + 161: uint16(38076), + 162: uint16(38077), + 163: uint16(38079), + 164: uint16(38084), + 165: uint16(38088), + 166: uint16(38089), + 167: uint16(38090), + 168: uint16(38091), + 169: uint16(38092), + 170: uint16(38093), + 171: uint16(38094), + 172: uint16(38096), + 173: uint16(38097), + 174: uint16(38098), + 175: uint16(38101), + 176: uint16(38102), + 177: uint16(38103), + 178: uint16(38105), + 179: uint16(38104), + 180: uint16(38107), + 181: uint16(38110), + 182: uint16(38111), + 183: uint16(38112), + 184: uint16(38114), + 185: uint16(38116), + 186: uint16(38117), + 187: uint16(38119), + 188: uint16(38120), + 189: uint16(38122), + }, + 110: { + 0: uint16(39023), + 1: uint16(39024), + 2: uint16(39025), + 3: uint16(39026), + 4: uint16(39027), + 5: uint16(39028), + 6: uint16(39051), + 7: uint16(39054), + 8: uint16(39058), + 9: uint16(39061), + 10: uint16(39065), + 11: uint16(39075), + 12: uint16(39080), + 13: uint16(39081), + 14: uint16(39082), + 15: uint16(39083), + 16: uint16(39084), + 17: uint16(39085), + 18: uint16(39086), + 19: uint16(39087), + 20: uint16(39088), + 21: uint16(39089), + 22: uint16(39090), + 23: uint16(39091), + 24: uint16(39092), + 25: uint16(39093), + 26: uint16(39094), + 27: uint16(39095), + 28: uint16(39096), + 29: uint16(39097), + 30: uint16(39098), + 31: uint16(39099), + 32: uint16(39100), + 33: uint16(39101), + 34: uint16(39102), + 35: uint16(39103), + 36: uint16(39104), + 37: uint16(39105), + 38: uint16(39106), + 39: uint16(39107), + 40: uint16(39108), + 41: uint16(39109), + 42: uint16(39110), + 43: uint16(39111), + 44: uint16(39112), + 45: uint16(39113), + 46: uint16(39114), + 47: uint16(39115), + 48: uint16(39116), + 49: uint16(39117), + 50: uint16(39119), + 51: uint16(39120), + 52: uint16(39124), + 53: uint16(39126), + 54: uint16(39127), + 55: uint16(39131), + 56: uint16(39132), + 57: uint16(39133), + 58: uint16(39136), + 59: uint16(39137), + 60: uint16(39138), + 61: uint16(39139), + 62: uint16(39140), + 63: uint16(39141), + 64: uint16(39142), + 65: uint16(39145), + 66: uint16(39146), + 67: uint16(39147), + 68: uint16(39148), + 69: uint16(39149), + 70: uint16(39150), + 71: uint16(39151), + 72: uint16(39152), + 73: uint16(39153), + 74: uint16(39154), + 75: uint16(39155), + 76: uint16(39156), + 77: uint16(39157), + 78: uint16(39158), + 79: uint16(39159), + 80: uint16(39160), + 81: uint16(39161), + 82: uint16(39162), + 83: uint16(39163), + 84: uint16(39164), + 85: uint16(39165), + 86: uint16(39166), + 87: uint16(39167), + 88: uint16(39168), + 89: uint16(39169), + 90: uint16(39170), + 91: uint16(39171), + 92: uint16(39172), + 93: uint16(39173), + 94: uint16(39174), + 95: uint16(39175), + 96: uint16(38121), + 97: uint16(38123), + 98: uint16(38126), + 99: uint16(38127), + 100: uint16(38131), + 101: uint16(38132), + 102: uint16(38133), + 103: uint16(38135), + 104: uint16(38137), + 105: uint16(38140), + 106: uint16(38141), + 107: uint16(38143), + 108: uint16(38147), + 109: uint16(38146), + 110: uint16(38150), + 111: uint16(38151), + 112: uint16(38153), + 113: uint16(38154), + 114: uint16(38157), + 115: uint16(38158), + 116: uint16(38159), + 117: uint16(38162), + 118: uint16(38163), + 119: uint16(38164), + 120: uint16(38165), + 121: uint16(38166), + 122: uint16(38168), + 123: uint16(38171), + 124: uint16(38173), + 125: uint16(38174), + 126: uint16(38175), + 127: uint16(38178), + 128: uint16(38186), + 129: uint16(38187), + 130: uint16(38185), + 131: uint16(38188), + 132: uint16(38193), + 133: uint16(38194), + 134: uint16(38196), + 135: uint16(38198), + 136: uint16(38199), + 137: uint16(38200), + 138: uint16(38204), + 139: uint16(38206), + 140: uint16(38207), + 141: uint16(38210), + 142: uint16(38197), + 143: uint16(38212), + 144: uint16(38213), + 145: uint16(38214), + 146: uint16(38217), + 147: uint16(38220), + 148: uint16(38222), + 149: uint16(38223), + 150: uint16(38226), + 151: uint16(38227), + 152: uint16(38228), + 153: uint16(38230), + 154: uint16(38231), + 155: uint16(38232), + 156: uint16(38233), + 157: uint16(38235), + 158: uint16(38238), + 159: uint16(38239), + 160: uint16(38237), + 161: uint16(38241), + 162: uint16(38242), + 163: uint16(38244), + 164: uint16(38245), + 165: uint16(38246), + 166: uint16(38247), + 167: uint16(38248), + 168: uint16(38249), + 169: uint16(38250), + 170: uint16(38251), + 171: uint16(38252), + 172: uint16(38255), + 173: uint16(38257), + 174: uint16(38258), + 175: uint16(38259), + 176: uint16(38202), + 177: uint16(30695), + 178: uint16(30700), + 179: uint16(38601), + 180: uint16(31189), + 181: uint16(31213), + 182: uint16(31203), + 183: uint16(31211), + 184: uint16(31238), + 185: uint16(23879), + 186: uint16(31235), + 187: uint16(31234), + 188: uint16(31262), + 189: uint16(31252), + }, + 111: { + 0: uint16(39176), + 1: uint16(39177), + 2: uint16(39178), + 3: uint16(39179), + 4: uint16(39180), + 5: uint16(39182), + 6: uint16(39183), + 7: uint16(39185), + 8: uint16(39186), + 9: uint16(39187), + 10: uint16(39188), + 11: uint16(39189), + 12: uint16(39190), + 13: uint16(39191), + 14: uint16(39192), + 15: uint16(39193), + 16: uint16(39194), + 17: uint16(39195), + 18: uint16(39196), + 19: uint16(39197), + 20: uint16(39198), + 21: uint16(39199), + 22: uint16(39200), + 23: uint16(39201), + 24: uint16(39202), + 25: uint16(39203), + 26: uint16(39204), + 27: uint16(39205), + 28: uint16(39206), + 29: uint16(39207), + 30: uint16(39208), + 31: uint16(39209), + 32: uint16(39210), + 33: uint16(39211), + 34: uint16(39212), + 35: uint16(39213), + 36: uint16(39215), + 37: uint16(39216), + 38: uint16(39217), + 39: uint16(39218), + 40: uint16(39219), + 41: uint16(39220), + 42: uint16(39221), + 43: uint16(39222), + 44: uint16(39223), + 45: uint16(39224), + 46: uint16(39225), + 47: uint16(39226), + 48: uint16(39227), + 49: uint16(39228), + 50: uint16(39229), + 51: uint16(39230), + 52: uint16(39231), + 53: uint16(39232), + 54: uint16(39233), + 55: uint16(39234), + 56: uint16(39235), + 57: uint16(39236), + 58: uint16(39237), + 59: uint16(39238), + 60: uint16(39239), + 61: uint16(39240), + 62: uint16(39241), + 63: uint16(39242), + 64: uint16(39243), + 65: uint16(39244), + 66: uint16(39245), + 67: uint16(39246), + 68: uint16(39247), + 69: uint16(39248), + 70: uint16(39249), + 71: uint16(39250), + 72: uint16(39251), + 73: uint16(39254), + 74: uint16(39255), + 75: uint16(39256), + 76: uint16(39257), + 77: uint16(39258), + 78: uint16(39259), + 79: uint16(39260), + 80: uint16(39261), + 81: uint16(39262), + 82: uint16(39263), + 83: uint16(39264), + 84: uint16(39265), + 85: uint16(39266), + 86: uint16(39268), + 87: uint16(39270), + 88: uint16(39283), + 89: uint16(39288), + 90: uint16(39289), + 91: uint16(39291), + 92: uint16(39294), + 93: uint16(39298), + 94: uint16(39299), + 95: uint16(39305), + 96: uint16(31289), + 97: uint16(31287), + 98: uint16(31313), + 99: uint16(40655), + 100: uint16(39333), + 101: uint16(31344), + 102: uint16(30344), + 103: uint16(30350), + 104: uint16(30355), + 105: uint16(30361), + 106: uint16(30372), + 107: uint16(29918), + 108: uint16(29920), + 109: uint16(29996), + 110: uint16(40480), + 111: uint16(40482), + 112: uint16(40488), + 113: uint16(40489), + 114: uint16(40490), + 115: uint16(40491), + 116: uint16(40492), + 117: uint16(40498), + 118: uint16(40497), + 119: uint16(40502), + 120: uint16(40504), + 121: uint16(40503), + 122: uint16(40505), + 123: uint16(40506), + 124: uint16(40510), + 125: uint16(40513), + 126: uint16(40514), + 127: uint16(40516), + 128: uint16(40518), + 129: uint16(40519), + 130: uint16(40520), + 131: uint16(40521), + 132: uint16(40523), + 133: uint16(40524), + 134: uint16(40526), + 135: uint16(40529), + 136: uint16(40533), + 137: uint16(40535), + 138: uint16(40538), + 139: uint16(40539), + 140: uint16(40540), + 141: uint16(40542), + 142: uint16(40547), + 143: uint16(40550), + 144: uint16(40551), + 145: uint16(40552), + 146: uint16(40553), + 147: uint16(40554), + 148: uint16(40555), + 149: uint16(40556), + 150: uint16(40561), + 151: uint16(40557), + 152: uint16(40563), + 153: uint16(30098), + 154: uint16(30100), + 155: uint16(30102), + 156: uint16(30112), + 157: uint16(30109), + 158: uint16(30124), + 159: uint16(30115), + 160: uint16(30131), + 161: uint16(30132), + 162: uint16(30136), + 163: uint16(30148), + 164: uint16(30129), + 165: uint16(30128), + 166: uint16(30147), + 167: uint16(30146), + 168: uint16(30166), + 169: uint16(30157), + 170: uint16(30179), + 171: uint16(30184), + 172: uint16(30182), + 173: uint16(30180), + 174: uint16(30187), + 175: uint16(30183), + 176: uint16(30211), + 177: uint16(30193), + 178: uint16(30204), + 179: uint16(30207), + 180: uint16(30224), + 181: uint16(30208), + 182: uint16(30213), + 183: uint16(30220), + 184: uint16(30231), + 185: uint16(30218), + 186: uint16(30245), + 187: uint16(30232), + 188: uint16(30229), + 189: uint16(30233), + }, + 112: { + 0: uint16(39308), + 1: uint16(39310), + 2: uint16(39322), + 3: uint16(39323), + 4: uint16(39324), + 5: uint16(39325), + 6: uint16(39326), + 7: uint16(39327), + 8: uint16(39328), + 9: uint16(39329), + 10: uint16(39330), + 11: uint16(39331), + 12: uint16(39332), + 13: uint16(39334), + 14: uint16(39335), + 15: uint16(39337), + 16: uint16(39338), + 17: uint16(39339), + 18: uint16(39340), + 19: uint16(39341), + 20: uint16(39342), + 21: uint16(39343), + 22: uint16(39344), + 23: uint16(39345), + 24: uint16(39346), + 25: uint16(39347), + 26: uint16(39348), + 27: uint16(39349), + 28: uint16(39350), + 29: uint16(39351), + 30: uint16(39352), + 31: uint16(39353), + 32: uint16(39354), + 33: uint16(39355), + 34: uint16(39356), + 35: uint16(39357), + 36: uint16(39358), + 37: uint16(39359), + 38: uint16(39360), + 39: uint16(39361), + 40: uint16(39362), + 41: uint16(39363), + 42: uint16(39364), + 43: uint16(39365), + 44: uint16(39366), + 45: uint16(39367), + 46: uint16(39368), + 47: uint16(39369), + 48: uint16(39370), + 49: uint16(39371), + 50: uint16(39372), + 51: uint16(39373), + 52: uint16(39374), + 53: uint16(39375), + 54: uint16(39376), + 55: uint16(39377), + 56: uint16(39378), + 57: uint16(39379), + 58: uint16(39380), + 59: uint16(39381), + 60: uint16(39382), + 61: uint16(39383), + 62: uint16(39384), + 63: uint16(39385), + 64: uint16(39386), + 65: uint16(39387), + 66: uint16(39388), + 67: uint16(39389), + 68: uint16(39390), + 69: uint16(39391), + 70: uint16(39392), + 71: uint16(39393), + 72: uint16(39394), + 73: uint16(39395), + 74: uint16(39396), + 75: uint16(39397), + 76: uint16(39398), + 77: uint16(39399), + 78: uint16(39400), + 79: uint16(39401), + 80: uint16(39402), + 81: uint16(39403), + 82: uint16(39404), + 83: uint16(39405), + 84: uint16(39406), + 85: uint16(39407), + 86: uint16(39408), + 87: uint16(39409), + 88: uint16(39410), + 89: uint16(39411), + 90: uint16(39412), + 91: uint16(39413), + 92: uint16(39414), + 93: uint16(39415), + 94: uint16(39416), + 95: uint16(39417), + 96: uint16(30235), + 97: uint16(30268), + 98: uint16(30242), + 99: uint16(30240), + 100: uint16(30272), + 101: uint16(30253), + 102: uint16(30256), + 103: uint16(30271), + 104: uint16(30261), + 105: uint16(30275), + 106: uint16(30270), + 107: uint16(30259), + 108: uint16(30285), + 109: uint16(30302), + 110: uint16(30292), + 111: uint16(30300), + 112: uint16(30294), + 113: uint16(30315), + 114: uint16(30319), + 115: uint16(32714), + 116: uint16(31462), + 117: uint16(31352), + 118: uint16(31353), + 119: uint16(31360), + 120: uint16(31366), + 121: uint16(31368), + 122: uint16(31381), + 123: uint16(31398), + 124: uint16(31392), + 125: uint16(31404), + 126: uint16(31400), + 127: uint16(31405), + 128: uint16(31411), + 129: uint16(34916), + 130: uint16(34921), + 131: uint16(34930), + 132: uint16(34941), + 133: uint16(34943), + 134: uint16(34946), + 135: uint16(34978), + 136: uint16(35014), + 137: uint16(34999), + 138: uint16(35004), + 139: uint16(35017), + 140: uint16(35042), + 141: uint16(35022), + 142: uint16(35043), + 143: uint16(35045), + 144: uint16(35057), + 145: uint16(35098), + 146: uint16(35068), + 147: uint16(35048), + 148: uint16(35070), + 149: uint16(35056), + 150: uint16(35105), + 151: uint16(35097), + 152: uint16(35091), + 153: uint16(35099), + 154: uint16(35082), + 155: uint16(35124), + 156: uint16(35115), + 157: uint16(35126), + 158: uint16(35137), + 159: uint16(35174), + 160: uint16(35195), + 161: uint16(30091), + 162: uint16(32997), + 163: uint16(30386), + 164: uint16(30388), + 165: uint16(30684), + 166: uint16(32786), + 167: uint16(32788), + 168: uint16(32790), + 169: uint16(32796), + 170: uint16(32800), + 171: uint16(32802), + 172: uint16(32805), + 173: uint16(32806), + 174: uint16(32807), + 175: uint16(32809), + 176: uint16(32808), + 177: uint16(32817), + 178: uint16(32779), + 179: uint16(32821), + 180: uint16(32835), + 181: uint16(32838), + 182: uint16(32845), + 183: uint16(32850), + 184: uint16(32873), + 185: uint16(32881), + 186: uint16(35203), + 187: uint16(39032), + 188: uint16(39040), + 189: uint16(39043), + }, + 113: { + 0: uint16(39418), + 1: uint16(39419), + 2: uint16(39420), + 3: uint16(39421), + 4: uint16(39422), + 5: uint16(39423), + 6: uint16(39424), + 7: uint16(39425), + 8: uint16(39426), + 9: uint16(39427), + 10: uint16(39428), + 11: uint16(39429), + 12: uint16(39430), + 13: uint16(39431), + 14: uint16(39432), + 15: uint16(39433), + 16: uint16(39434), + 17: uint16(39435), + 18: uint16(39436), + 19: uint16(39437), + 20: uint16(39438), + 21: uint16(39439), + 22: uint16(39440), + 23: uint16(39441), + 24: uint16(39442), + 25: uint16(39443), + 26: uint16(39444), + 27: uint16(39445), + 28: uint16(39446), + 29: uint16(39447), + 30: uint16(39448), + 31: uint16(39449), + 32: uint16(39450), + 33: uint16(39451), + 34: uint16(39452), + 35: uint16(39453), + 36: uint16(39454), + 37: uint16(39455), + 38: uint16(39456), + 39: uint16(39457), + 40: uint16(39458), + 41: uint16(39459), + 42: uint16(39460), + 43: uint16(39461), + 44: uint16(39462), + 45: uint16(39463), + 46: uint16(39464), + 47: uint16(39465), + 48: uint16(39466), + 49: uint16(39467), + 50: uint16(39468), + 51: uint16(39469), + 52: uint16(39470), + 53: uint16(39471), + 54: uint16(39472), + 55: uint16(39473), + 56: uint16(39474), + 57: uint16(39475), + 58: uint16(39476), + 59: uint16(39477), + 60: uint16(39478), + 61: uint16(39479), + 62: uint16(39480), + 63: uint16(39481), + 64: uint16(39482), + 65: uint16(39483), + 66: uint16(39484), + 67: uint16(39485), + 68: uint16(39486), + 69: uint16(39487), + 70: uint16(39488), + 71: uint16(39489), + 72: uint16(39490), + 73: uint16(39491), + 74: uint16(39492), + 75: uint16(39493), + 76: uint16(39494), + 77: uint16(39495), + 78: uint16(39496), + 79: uint16(39497), + 80: uint16(39498), + 81: uint16(39499), + 82: uint16(39500), + 83: uint16(39501), + 84: uint16(39502), + 85: uint16(39503), + 86: uint16(39504), + 87: uint16(39505), + 88: uint16(39506), + 89: uint16(39507), + 90: uint16(39508), + 91: uint16(39509), + 92: uint16(39510), + 93: uint16(39511), + 94: uint16(39512), + 95: uint16(39513), + 96: uint16(39049), + 97: uint16(39052), + 98: uint16(39053), + 99: uint16(39055), + 100: uint16(39060), + 101: uint16(39066), + 102: uint16(39067), + 103: uint16(39070), + 104: uint16(39071), + 105: uint16(39073), + 106: uint16(39074), + 107: uint16(39077), + 108: uint16(39078), + 109: uint16(34381), + 110: uint16(34388), + 111: uint16(34412), + 112: uint16(34414), + 113: uint16(34431), + 114: uint16(34426), + 115: uint16(34428), + 116: uint16(34427), + 117: uint16(34472), + 118: uint16(34445), + 119: uint16(34443), + 120: uint16(34476), + 121: uint16(34461), + 122: uint16(34471), + 123: uint16(34467), + 124: uint16(34474), + 125: uint16(34451), + 126: uint16(34473), + 127: uint16(34486), + 128: uint16(34500), + 129: uint16(34485), + 130: uint16(34510), + 131: uint16(34480), + 132: uint16(34490), + 133: uint16(34481), + 134: uint16(34479), + 135: uint16(34505), + 136: uint16(34511), + 137: uint16(34484), + 138: uint16(34537), + 139: uint16(34545), + 140: uint16(34546), + 141: uint16(34541), + 142: uint16(34547), + 143: uint16(34512), + 144: uint16(34579), + 145: uint16(34526), + 146: uint16(34548), + 147: uint16(34527), + 148: uint16(34520), + 149: uint16(34513), + 150: uint16(34563), + 151: uint16(34567), + 152: uint16(34552), + 153: uint16(34568), + 154: uint16(34570), + 155: uint16(34573), + 156: uint16(34569), + 157: uint16(34595), + 158: uint16(34619), + 159: uint16(34590), + 160: uint16(34597), + 161: uint16(34606), + 162: uint16(34586), + 163: uint16(34622), + 164: uint16(34632), + 165: uint16(34612), + 166: uint16(34609), + 167: uint16(34601), + 168: uint16(34615), + 169: uint16(34623), + 170: uint16(34690), + 171: uint16(34594), + 172: uint16(34685), + 173: uint16(34686), + 174: uint16(34683), + 175: uint16(34656), + 176: uint16(34672), + 177: uint16(34636), + 178: uint16(34670), + 179: uint16(34699), + 180: uint16(34643), + 181: uint16(34659), + 182: uint16(34684), + 183: uint16(34660), + 184: uint16(34649), + 185: uint16(34661), + 186: uint16(34707), + 187: uint16(34735), + 188: uint16(34728), + 189: uint16(34770), + }, + 114: { + 0: uint16(39514), + 1: uint16(39515), + 2: uint16(39516), + 3: uint16(39517), + 4: uint16(39518), + 5: uint16(39519), + 6: uint16(39520), + 7: uint16(39521), + 8: uint16(39522), + 9: uint16(39523), + 10: uint16(39524), + 11: uint16(39525), + 12: uint16(39526), + 13: uint16(39527), + 14: uint16(39528), + 15: uint16(39529), + 16: uint16(39530), + 17: uint16(39531), + 18: uint16(39538), + 19: uint16(39555), + 20: uint16(39561), + 21: uint16(39565), + 22: uint16(39566), + 23: uint16(39572), + 24: uint16(39573), + 25: uint16(39577), + 26: uint16(39590), + 27: uint16(39593), + 28: uint16(39594), + 29: uint16(39595), + 30: uint16(39596), + 31: uint16(39597), + 32: uint16(39598), + 33: uint16(39599), + 34: uint16(39602), + 35: uint16(39603), + 36: uint16(39604), + 37: uint16(39605), + 38: uint16(39609), + 39: uint16(39611), + 40: uint16(39613), + 41: uint16(39614), + 42: uint16(39615), + 43: uint16(39619), + 44: uint16(39620), + 45: uint16(39622), + 46: uint16(39623), + 47: uint16(39624), + 48: uint16(39625), + 49: uint16(39626), + 50: uint16(39629), + 51: uint16(39630), + 52: uint16(39631), + 53: uint16(39632), + 54: uint16(39634), + 55: uint16(39636), + 56: uint16(39637), + 57: uint16(39638), + 58: uint16(39639), + 59: uint16(39641), + 60: uint16(39642), + 61: uint16(39643), + 62: uint16(39644), + 63: uint16(39645), + 64: uint16(39646), + 65: uint16(39648), + 66: uint16(39650), + 67: uint16(39651), + 68: uint16(39652), + 69: uint16(39653), + 70: uint16(39655), + 71: uint16(39656), + 72: uint16(39657), + 73: uint16(39658), + 74: uint16(39660), + 75: uint16(39662), + 76: uint16(39664), + 77: uint16(39665), + 78: uint16(39666), + 79: uint16(39667), + 80: uint16(39668), + 81: uint16(39669), + 82: uint16(39670), + 83: uint16(39671), + 84: uint16(39672), + 85: uint16(39674), + 86: uint16(39676), + 87: uint16(39677), + 88: uint16(39678), + 89: uint16(39679), + 90: uint16(39680), + 91: uint16(39681), + 92: uint16(39682), + 93: uint16(39684), + 94: uint16(39685), + 95: uint16(39686), + 96: uint16(34758), + 97: uint16(34696), + 98: uint16(34693), + 99: uint16(34733), + 100: uint16(34711), + 101: uint16(34691), + 102: uint16(34731), + 103: uint16(34789), + 104: uint16(34732), + 105: uint16(34741), + 106: uint16(34739), + 107: uint16(34763), + 108: uint16(34771), + 109: uint16(34749), + 110: uint16(34769), + 111: uint16(34752), + 112: uint16(34762), + 113: uint16(34779), + 114: uint16(34794), + 115: uint16(34784), + 116: uint16(34798), + 117: uint16(34838), + 118: uint16(34835), + 119: uint16(34814), + 120: uint16(34826), + 121: uint16(34843), + 122: uint16(34849), + 123: uint16(34873), + 124: uint16(34876), + 125: uint16(32566), + 126: uint16(32578), + 127: uint16(32580), + 128: uint16(32581), + 129: uint16(33296), + 130: uint16(31482), + 131: uint16(31485), + 132: uint16(31496), + 133: uint16(31491), + 134: uint16(31492), + 135: uint16(31509), + 136: uint16(31498), + 137: uint16(31531), + 138: uint16(31503), + 139: uint16(31559), + 140: uint16(31544), + 141: uint16(31530), + 142: uint16(31513), + 143: uint16(31534), + 144: uint16(31537), + 145: uint16(31520), + 146: uint16(31525), + 147: uint16(31524), + 148: uint16(31539), + 149: uint16(31550), + 150: uint16(31518), + 151: uint16(31576), + 152: uint16(31578), + 153: uint16(31557), + 154: uint16(31605), + 155: uint16(31564), + 156: uint16(31581), + 157: uint16(31584), + 158: uint16(31598), + 159: uint16(31611), + 160: uint16(31586), + 161: uint16(31602), + 162: uint16(31601), + 163: uint16(31632), + 164: uint16(31654), + 165: uint16(31655), + 166: uint16(31672), + 167: uint16(31660), + 168: uint16(31645), + 169: uint16(31656), + 170: uint16(31621), + 171: uint16(31658), + 172: uint16(31644), + 173: uint16(31650), + 174: uint16(31659), + 175: uint16(31668), + 176: uint16(31697), + 177: uint16(31681), + 178: uint16(31692), + 179: uint16(31709), + 180: uint16(31706), + 181: uint16(31717), + 182: uint16(31718), + 183: uint16(31722), + 184: uint16(31756), + 185: uint16(31742), + 186: uint16(31740), + 187: uint16(31759), + 188: uint16(31766), + 189: uint16(31755), + }, + 115: { + 0: uint16(39687), + 1: uint16(39689), + 2: uint16(39690), + 3: uint16(39691), + 4: uint16(39692), + 5: uint16(39693), + 6: uint16(39694), + 7: uint16(39696), + 8: uint16(39697), + 9: uint16(39698), + 10: uint16(39700), + 11: uint16(39701), + 12: uint16(39702), + 13: uint16(39703), + 14: uint16(39704), + 15: uint16(39705), + 16: uint16(39706), + 17: uint16(39707), + 18: uint16(39708), + 19: uint16(39709), + 20: uint16(39710), + 21: uint16(39712), + 22: uint16(39713), + 23: uint16(39714), + 24: uint16(39716), + 25: uint16(39717), + 26: uint16(39718), + 27: uint16(39719), + 28: uint16(39720), + 29: uint16(39721), + 30: uint16(39722), + 31: uint16(39723), + 32: uint16(39724), + 33: uint16(39725), + 34: uint16(39726), + 35: uint16(39728), + 36: uint16(39729), + 37: uint16(39731), + 38: uint16(39732), + 39: uint16(39733), + 40: uint16(39734), + 41: uint16(39735), + 42: uint16(39736), + 43: uint16(39737), + 44: uint16(39738), + 45: uint16(39741), + 46: uint16(39742), + 47: uint16(39743), + 48: uint16(39744), + 49: uint16(39750), + 50: uint16(39754), + 51: uint16(39755), + 52: uint16(39756), + 53: uint16(39758), + 54: uint16(39760), + 55: uint16(39762), + 56: uint16(39763), + 57: uint16(39765), + 58: uint16(39766), + 59: uint16(39767), + 60: uint16(39768), + 61: uint16(39769), + 62: uint16(39770), + 63: uint16(39771), + 64: uint16(39772), + 65: uint16(39773), + 66: uint16(39774), + 67: uint16(39775), + 68: uint16(39776), + 69: uint16(39777), + 70: uint16(39778), + 71: uint16(39779), + 72: uint16(39780), + 73: uint16(39781), + 74: uint16(39782), + 75: uint16(39783), + 76: uint16(39784), + 77: uint16(39785), + 78: uint16(39786), + 79: uint16(39787), + 80: uint16(39788), + 81: uint16(39789), + 82: uint16(39790), + 83: uint16(39791), + 84: uint16(39792), + 85: uint16(39793), + 86: uint16(39794), + 87: uint16(39795), + 88: uint16(39796), + 89: uint16(39797), + 90: uint16(39798), + 91: uint16(39799), + 92: uint16(39800), + 93: uint16(39801), + 94: uint16(39802), + 95: uint16(39803), + 96: uint16(31775), + 97: uint16(31786), + 98: uint16(31782), + 99: uint16(31800), + 100: uint16(31809), + 101: uint16(31808), + 102: uint16(33278), + 103: uint16(33281), + 104: uint16(33282), + 105: uint16(33284), + 106: uint16(33260), + 107: uint16(34884), + 108: uint16(33313), + 109: uint16(33314), + 110: uint16(33315), + 111: uint16(33325), + 112: uint16(33327), + 113: uint16(33320), + 114: uint16(33323), + 115: uint16(33336), + 116: uint16(33339), + 117: uint16(33331), + 118: uint16(33332), + 119: uint16(33342), + 120: uint16(33348), + 121: uint16(33353), + 122: uint16(33355), + 123: uint16(33359), + 124: uint16(33370), + 125: uint16(33375), + 126: uint16(33384), + 127: uint16(34942), + 128: uint16(34949), + 129: uint16(34952), + 130: uint16(35032), + 131: uint16(35039), + 132: uint16(35166), + 133: uint16(32669), + 134: uint16(32671), + 135: uint16(32679), + 136: uint16(32687), + 137: uint16(32688), + 138: uint16(32690), + 139: uint16(31868), + 140: uint16(25929), + 141: uint16(31889), + 142: uint16(31901), + 143: uint16(31900), + 144: uint16(31902), + 145: uint16(31906), + 146: uint16(31922), + 147: uint16(31932), + 148: uint16(31933), + 149: uint16(31937), + 150: uint16(31943), + 151: uint16(31948), + 152: uint16(31949), + 153: uint16(31944), + 154: uint16(31941), + 155: uint16(31959), + 156: uint16(31976), + 157: uint16(33390), + 158: uint16(26280), + 159: uint16(32703), + 160: uint16(32718), + 161: uint16(32725), + 162: uint16(32741), + 163: uint16(32737), + 164: uint16(32742), + 165: uint16(32745), + 166: uint16(32750), + 167: uint16(32755), + 168: uint16(31992), + 169: uint16(32119), + 170: uint16(32166), + 171: uint16(32174), + 172: uint16(32327), + 173: uint16(32411), + 174: uint16(40632), + 175: uint16(40628), + 176: uint16(36211), + 177: uint16(36228), + 178: uint16(36244), + 179: uint16(36241), + 180: uint16(36273), + 181: uint16(36199), + 182: uint16(36205), + 183: uint16(35911), + 184: uint16(35913), + 185: uint16(37194), + 186: uint16(37200), + 187: uint16(37198), + 188: uint16(37199), + 189: uint16(37220), + }, + 116: { + 0: uint16(39804), + 1: uint16(39805), + 2: uint16(39806), + 3: uint16(39807), + 4: uint16(39808), + 5: uint16(39809), + 6: uint16(39810), + 7: uint16(39811), + 8: uint16(39812), + 9: uint16(39813), + 10: uint16(39814), + 11: uint16(39815), + 12: uint16(39816), + 13: uint16(39817), + 14: uint16(39818), + 15: uint16(39819), + 16: uint16(39820), + 17: uint16(39821), + 18: uint16(39822), + 19: uint16(39823), + 20: uint16(39824), + 21: uint16(39825), + 22: uint16(39826), + 23: uint16(39827), + 24: uint16(39828), + 25: uint16(39829), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39832), + 29: uint16(39833), + 30: uint16(39834), + 31: uint16(39835), + 32: uint16(39836), + 33: uint16(39837), + 34: uint16(39838), + 35: uint16(39839), + 36: uint16(39840), + 37: uint16(39841), + 38: uint16(39842), + 39: uint16(39843), + 40: uint16(39844), + 41: uint16(39845), + 42: uint16(39846), + 43: uint16(39847), + 44: uint16(39848), + 45: uint16(39849), + 46: uint16(39850), + 47: uint16(39851), + 48: uint16(39852), + 49: uint16(39853), + 50: uint16(39854), + 51: uint16(39855), + 52: uint16(39856), + 53: uint16(39857), + 54: uint16(39858), + 55: uint16(39859), + 56: uint16(39860), + 57: uint16(39861), + 58: uint16(39862), + 59: uint16(39863), + 60: uint16(39864), + 61: uint16(39865), + 62: uint16(39866), + 63: uint16(39867), + 64: uint16(39868), + 65: uint16(39869), + 66: uint16(39870), + 67: uint16(39871), + 68: uint16(39872), + 69: uint16(39873), + 70: uint16(39874), + 71: uint16(39875), + 72: uint16(39876), + 73: uint16(39877), + 74: uint16(39878), + 75: uint16(39879), + 76: uint16(39880), + 77: uint16(39881), + 78: uint16(39882), + 79: uint16(39883), + 80: uint16(39884), + 81: uint16(39885), + 82: uint16(39886), + 83: uint16(39887), + 84: uint16(39888), + 85: uint16(39889), + 86: uint16(39890), + 87: uint16(39891), + 88: uint16(39892), + 89: uint16(39893), + 90: uint16(39894), + 91: uint16(39895), + 92: uint16(39896), + 93: uint16(39897), + 94: uint16(39898), + 95: uint16(39899), + 96: uint16(37218), + 97: uint16(37217), + 98: uint16(37232), + 99: uint16(37225), + 100: uint16(37231), + 101: uint16(37245), + 102: uint16(37246), + 103: uint16(37234), + 104: uint16(37236), + 105: uint16(37241), + 106: uint16(37260), + 107: uint16(37253), + 108: uint16(37264), + 109: uint16(37261), + 110: uint16(37265), + 111: uint16(37282), + 112: uint16(37283), + 113: uint16(37290), + 114: uint16(37293), + 115: uint16(37294), + 116: uint16(37295), + 117: uint16(37301), + 118: uint16(37300), + 119: uint16(37306), + 120: uint16(35925), + 121: uint16(40574), + 122: uint16(36280), + 123: uint16(36331), + 124: uint16(36357), + 125: uint16(36441), + 126: uint16(36457), + 127: uint16(36277), + 128: uint16(36287), + 129: uint16(36284), + 130: uint16(36282), + 131: uint16(36292), + 132: uint16(36310), + 133: uint16(36311), + 134: uint16(36314), + 135: uint16(36318), + 136: uint16(36302), + 137: uint16(36303), + 138: uint16(36315), + 139: uint16(36294), + 140: uint16(36332), + 141: uint16(36343), + 142: uint16(36344), + 143: uint16(36323), + 144: uint16(36345), + 145: uint16(36347), + 146: uint16(36324), + 147: uint16(36361), + 148: uint16(36349), + 149: uint16(36372), + 150: uint16(36381), + 151: uint16(36383), + 152: uint16(36396), + 153: uint16(36398), + 154: uint16(36387), + 155: uint16(36399), + 156: uint16(36410), + 157: uint16(36416), + 158: uint16(36409), + 159: uint16(36405), + 160: uint16(36413), + 161: uint16(36401), + 162: uint16(36425), + 163: uint16(36417), + 164: uint16(36418), + 165: uint16(36433), + 166: uint16(36434), + 167: uint16(36426), + 168: uint16(36464), + 169: uint16(36470), + 170: uint16(36476), + 171: uint16(36463), + 172: uint16(36468), + 173: uint16(36485), + 174: uint16(36495), + 175: uint16(36500), + 176: uint16(36496), + 177: uint16(36508), + 178: uint16(36510), + 179: uint16(35960), + 180: uint16(35970), + 181: uint16(35978), + 182: uint16(35973), + 183: uint16(35992), + 184: uint16(35988), + 185: uint16(26011), + 186: uint16(35286), + 187: uint16(35294), + 188: uint16(35290), + 189: uint16(35292), + }, + 117: { + 0: uint16(39900), + 1: uint16(39901), + 2: uint16(39902), + 3: uint16(39903), + 4: uint16(39904), + 5: uint16(39905), + 6: uint16(39906), + 7: uint16(39907), + 8: uint16(39908), + 9: uint16(39909), + 10: uint16(39910), + 11: uint16(39911), + 12: uint16(39912), + 13: uint16(39913), + 14: uint16(39914), + 15: uint16(39915), + 16: uint16(39916), + 17: uint16(39917), + 18: uint16(39918), + 19: uint16(39919), + 20: uint16(39920), + 21: uint16(39921), + 22: uint16(39922), + 23: uint16(39923), + 24: uint16(39924), + 25: uint16(39925), + 26: uint16(39926), + 27: uint16(39927), + 28: uint16(39928), + 29: uint16(39929), + 30: uint16(39930), + 31: uint16(39931), + 32: uint16(39932), + 33: uint16(39933), + 34: uint16(39934), + 35: uint16(39935), + 36: uint16(39936), + 37: uint16(39937), + 38: uint16(39938), + 39: uint16(39939), + 40: uint16(39940), + 41: uint16(39941), + 42: uint16(39942), + 43: uint16(39943), + 44: uint16(39944), + 45: uint16(39945), + 46: uint16(39946), + 47: uint16(39947), + 48: uint16(39948), + 49: uint16(39949), + 50: uint16(39950), + 51: uint16(39951), + 52: uint16(39952), + 53: uint16(39953), + 54: uint16(39954), + 55: uint16(39955), + 56: uint16(39956), + 57: uint16(39957), + 58: uint16(39958), + 59: uint16(39959), + 60: uint16(39960), + 61: uint16(39961), + 62: uint16(39962), + 63: uint16(39963), + 64: uint16(39964), + 65: uint16(39965), + 66: uint16(39966), + 67: uint16(39967), + 68: uint16(39968), + 69: uint16(39969), + 70: uint16(39970), + 71: uint16(39971), + 72: uint16(39972), + 73: uint16(39973), + 74: uint16(39974), + 75: uint16(39975), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39978), + 79: uint16(39979), + 80: uint16(39980), + 81: uint16(39981), + 82: uint16(39982), + 83: uint16(39983), + 84: uint16(39984), + 85: uint16(39985), + 86: uint16(39986), + 87: uint16(39987), + 88: uint16(39988), + 89: uint16(39989), + 90: uint16(39990), + 91: uint16(39991), + 92: uint16(39992), + 93: uint16(39993), + 94: uint16(39994), + 95: uint16(39995), + 96: uint16(35301), + 97: uint16(35307), + 98: uint16(35311), + 99: uint16(35390), + 100: uint16(35622), + 101: uint16(38739), + 102: uint16(38633), + 103: uint16(38643), + 104: uint16(38639), + 105: uint16(38662), + 106: uint16(38657), + 107: uint16(38664), + 108: uint16(38671), + 109: uint16(38670), + 110: uint16(38698), + 111: uint16(38701), + 112: uint16(38704), + 113: uint16(38718), + 114: uint16(40832), + 115: uint16(40835), + 116: uint16(40837), + 117: uint16(40838), + 118: uint16(40839), + 119: uint16(40840), + 120: uint16(40841), + 121: uint16(40842), + 122: uint16(40844), + 123: uint16(40702), + 124: uint16(40715), + 125: uint16(40717), + 126: uint16(38585), + 127: uint16(38588), + 128: uint16(38589), + 129: uint16(38606), + 130: uint16(38610), + 131: uint16(30655), + 132: uint16(38624), + 133: uint16(37518), + 134: uint16(37550), + 135: uint16(37576), + 136: uint16(37694), + 137: uint16(37738), + 138: uint16(37834), + 139: uint16(37775), + 140: uint16(37950), + 141: uint16(37995), + 142: uint16(40063), + 143: uint16(40066), + 144: uint16(40069), + 145: uint16(40070), + 146: uint16(40071), + 147: uint16(40072), + 148: uint16(31267), + 149: uint16(40075), + 150: uint16(40078), + 151: uint16(40080), + 152: uint16(40081), + 153: uint16(40082), + 154: uint16(40084), + 155: uint16(40085), + 156: uint16(40090), + 157: uint16(40091), + 158: uint16(40094), + 159: uint16(40095), + 160: uint16(40096), + 161: uint16(40097), + 162: uint16(40098), + 163: uint16(40099), + 164: uint16(40101), + 165: uint16(40102), + 166: uint16(40103), + 167: uint16(40104), + 168: uint16(40105), + 169: uint16(40107), + 170: uint16(40109), + 171: uint16(40110), + 172: uint16(40112), + 173: uint16(40113), + 174: uint16(40114), + 175: uint16(40115), + 176: uint16(40116), + 177: uint16(40117), + 178: uint16(40118), + 179: uint16(40119), + 180: uint16(40122), + 181: uint16(40123), + 182: uint16(40124), + 183: uint16(40125), + 184: uint16(40132), + 185: uint16(40133), + 186: uint16(40134), + 187: uint16(40135), + 188: uint16(40138), + 189: uint16(40139), + }, + 118: { + 0: uint16(39996), + 1: uint16(39997), + 2: uint16(39998), + 3: uint16(39999), + 4: uint16(40000), + 5: uint16(40001), + 6: uint16(40002), + 7: uint16(40003), + 8: uint16(40004), + 9: uint16(40005), + 10: uint16(40006), + 11: uint16(40007), + 12: uint16(40008), + 13: uint16(40009), + 14: uint16(40010), + 15: uint16(40011), + 16: uint16(40012), + 17: uint16(40013), + 18: uint16(40014), + 19: uint16(40015), + 20: uint16(40016), + 21: uint16(40017), + 22: uint16(40018), + 23: uint16(40019), + 24: uint16(40020), + 25: uint16(40021), + 26: uint16(40022), + 27: uint16(40023), + 28: uint16(40024), + 29: uint16(40025), + 30: uint16(40026), + 31: uint16(40027), + 32: uint16(40028), + 33: uint16(40029), + 34: uint16(40030), + 35: uint16(40031), + 36: uint16(40032), + 37: uint16(40033), + 38: uint16(40034), + 39: uint16(40035), + 40: uint16(40036), + 41: uint16(40037), + 42: uint16(40038), + 43: uint16(40039), + 44: uint16(40040), + 45: uint16(40041), + 46: uint16(40042), + 47: uint16(40043), + 48: uint16(40044), + 49: uint16(40045), + 50: uint16(40046), + 51: uint16(40047), + 52: uint16(40048), + 53: uint16(40049), + 54: uint16(40050), + 55: uint16(40051), + 56: uint16(40052), + 57: uint16(40053), + 58: uint16(40054), + 59: uint16(40055), + 60: uint16(40056), + 61: uint16(40057), + 62: uint16(40058), + 63: uint16(40059), + 64: uint16(40061), + 65: uint16(40062), + 66: uint16(40064), + 67: uint16(40067), + 68: uint16(40068), + 69: uint16(40073), + 70: uint16(40074), + 71: uint16(40076), + 72: uint16(40079), + 73: uint16(40083), + 74: uint16(40086), + 75: uint16(40087), + 76: uint16(40088), + 77: uint16(40089), + 78: uint16(40093), + 79: uint16(40106), + 80: uint16(40108), + 81: uint16(40111), + 82: uint16(40121), + 83: uint16(40126), + 84: uint16(40127), + 85: uint16(40128), + 86: uint16(40129), + 87: uint16(40130), + 88: uint16(40136), + 89: uint16(40137), + 90: uint16(40145), + 91: uint16(40146), + 92: uint16(40154), + 93: uint16(40155), + 94: uint16(40160), + 95: uint16(40161), + 96: uint16(40140), + 97: uint16(40141), + 98: uint16(40142), + 99: uint16(40143), + 100: uint16(40144), + 101: uint16(40147), + 102: uint16(40148), + 103: uint16(40149), + 104: uint16(40151), + 105: uint16(40152), + 106: uint16(40153), + 107: uint16(40156), + 108: uint16(40157), + 109: uint16(40159), + 110: uint16(40162), + 111: uint16(38780), + 112: uint16(38789), + 113: uint16(38801), + 114: uint16(38802), + 115: uint16(38804), + 116: uint16(38831), + 117: uint16(38827), + 118: uint16(38819), + 119: uint16(38834), + 120: uint16(38836), + 121: uint16(39601), + 122: uint16(39600), + 123: uint16(39607), + 124: uint16(40536), + 125: uint16(39606), + 126: uint16(39610), + 127: uint16(39612), + 128: uint16(39617), + 129: uint16(39616), + 130: uint16(39621), + 131: uint16(39618), + 132: uint16(39627), + 133: uint16(39628), + 134: uint16(39633), + 135: uint16(39749), + 136: uint16(39747), + 137: uint16(39751), + 138: uint16(39753), + 139: uint16(39752), + 140: uint16(39757), + 141: uint16(39761), + 142: uint16(39144), + 143: uint16(39181), + 144: uint16(39214), + 145: uint16(39253), + 146: uint16(39252), + 147: uint16(39647), + 148: uint16(39649), + 149: uint16(39654), + 150: uint16(39663), + 151: uint16(39659), + 152: uint16(39675), + 153: uint16(39661), + 154: uint16(39673), + 155: uint16(39688), + 156: uint16(39695), + 157: uint16(39699), + 158: uint16(39711), + 159: uint16(39715), + 160: uint16(40637), + 161: uint16(40638), + 162: uint16(32315), + 163: uint16(40578), + 164: uint16(40583), + 165: uint16(40584), + 166: uint16(40587), + 167: uint16(40594), + 168: uint16(37846), + 169: uint16(40605), + 170: uint16(40607), + 171: uint16(40667), + 172: uint16(40668), + 173: uint16(40669), + 174: uint16(40672), + 175: uint16(40671), + 176: uint16(40674), + 177: uint16(40681), + 178: uint16(40679), + 179: uint16(40677), + 180: uint16(40682), + 181: uint16(40687), + 182: uint16(40738), + 183: uint16(40748), + 184: uint16(40751), + 185: uint16(40761), + 186: uint16(40759), + 187: uint16(40765), + 188: uint16(40766), + 189: uint16(40772), + }, + 119: { + 0: uint16(40163), + 1: uint16(40164), + 2: uint16(40165), + 3: uint16(40166), + 4: uint16(40167), + 5: uint16(40168), + 6: uint16(40169), + 7: uint16(40170), + 8: uint16(40171), + 9: uint16(40172), + 10: uint16(40173), + 11: uint16(40174), + 12: uint16(40175), + 13: uint16(40176), + 14: uint16(40177), + 15: uint16(40178), + 16: uint16(40179), + 17: uint16(40180), + 18: uint16(40181), + 19: uint16(40182), + 20: uint16(40183), + 21: uint16(40184), + 22: uint16(40185), + 23: uint16(40186), + 24: uint16(40187), + 25: uint16(40188), + 26: uint16(40189), + 27: uint16(40190), + 28: uint16(40191), + 29: uint16(40192), + 30: uint16(40193), + 31: uint16(40194), + 32: uint16(40195), + 33: uint16(40196), + 34: uint16(40197), + 35: uint16(40198), + 36: uint16(40199), + 37: uint16(40200), + 38: uint16(40201), + 39: uint16(40202), + 40: uint16(40203), + 41: uint16(40204), + 42: uint16(40205), + 43: uint16(40206), + 44: uint16(40207), + 45: uint16(40208), + 46: uint16(40209), + 47: uint16(40210), + 48: uint16(40211), + 49: uint16(40212), + 50: uint16(40213), + 51: uint16(40214), + 52: uint16(40215), + 53: uint16(40216), + 54: uint16(40217), + 55: uint16(40218), + 56: uint16(40219), + 57: uint16(40220), + 58: uint16(40221), + 59: uint16(40222), + 60: uint16(40223), + 61: uint16(40224), + 62: uint16(40225), + 63: uint16(40226), + 64: uint16(40227), + 65: uint16(40228), + 66: uint16(40229), + 67: uint16(40230), + 68: uint16(40231), + 69: uint16(40232), + 70: uint16(40233), + 71: uint16(40234), + 72: uint16(40235), + 73: uint16(40236), + 74: uint16(40237), + 75: uint16(40238), + 76: uint16(40239), + 77: uint16(40240), + 78: uint16(40241), + 79: uint16(40242), + 80: uint16(40243), + 81: uint16(40244), + 82: uint16(40245), + 83: uint16(40246), + 84: uint16(40247), + 85: uint16(40248), + 86: uint16(40249), + 87: uint16(40250), + 88: uint16(40251), + 89: uint16(40252), + 90: uint16(40253), + 91: uint16(40254), + 92: uint16(40255), + 93: uint16(40256), + 94: uint16(40257), + 95: uint16(40258), + 96: uint16(57908), + 97: uint16(57909), + 98: uint16(57910), + 99: uint16(57911), + 100: uint16(57912), + 101: uint16(57913), + 102: uint16(57914), + 103: uint16(57915), + 104: uint16(57916), + 105: uint16(57917), + 106: uint16(57918), + 107: uint16(57919), + 108: uint16(57920), + 109: uint16(57921), + 110: uint16(57922), + 111: uint16(57923), + 112: uint16(57924), + 113: uint16(57925), + 114: uint16(57926), + 115: uint16(57927), + 116: uint16(57928), + 117: uint16(57929), + 118: uint16(57930), + 119: uint16(57931), + 120: uint16(57932), + 121: uint16(57933), + 122: uint16(57934), + 123: uint16(57935), + 124: uint16(57936), + 125: uint16(57937), + 126: uint16(57938), + 127: uint16(57939), + 128: uint16(57940), + 129: uint16(57941), + 130: uint16(57942), + 131: uint16(57943), + 132: uint16(57944), + 133: uint16(57945), + 134: uint16(57946), + 135: uint16(57947), + 136: uint16(57948), + 137: uint16(57949), + 138: uint16(57950), + 139: uint16(57951), + 140: uint16(57952), + 141: uint16(57953), + 142: uint16(57954), + 143: uint16(57955), + 144: uint16(57956), + 145: uint16(57957), + 146: uint16(57958), + 147: uint16(57959), + 148: uint16(57960), + 149: uint16(57961), + 150: uint16(57962), + 151: uint16(57963), + 152: uint16(57964), + 153: uint16(57965), + 154: uint16(57966), + 155: uint16(57967), + 156: uint16(57968), + 157: uint16(57969), + 158: uint16(57970), + 159: uint16(57971), + 160: uint16(57972), + 161: uint16(57973), + 162: uint16(57974), + 163: uint16(57975), + 164: uint16(57976), + 165: uint16(57977), + 166: uint16(57978), + 167: uint16(57979), + 168: uint16(57980), + 169: uint16(57981), + 170: uint16(57982), + 171: uint16(57983), + 172: uint16(57984), + 173: uint16(57985), + 174: uint16(57986), + 175: uint16(57987), + 176: uint16(57988), + 177: uint16(57989), + 178: uint16(57990), + 179: uint16(57991), + 180: uint16(57992), + 181: uint16(57993), + 182: uint16(57994), + 183: uint16(57995), + 184: uint16(57996), + 185: uint16(57997), + 186: uint16(57998), + 187: uint16(57999), + 188: uint16(58000), + 189: uint16(58001), + }, + 120: { + 0: uint16(40259), + 1: uint16(40260), + 2: uint16(40261), + 3: uint16(40262), + 4: uint16(40263), + 5: uint16(40264), + 6: uint16(40265), + 7: uint16(40266), + 8: uint16(40267), + 9: uint16(40268), + 10: uint16(40269), + 11: uint16(40270), + 12: uint16(40271), + 13: uint16(40272), + 14: uint16(40273), + 15: uint16(40274), + 16: uint16(40275), + 17: uint16(40276), + 18: uint16(40277), + 19: uint16(40278), + 20: uint16(40279), + 21: uint16(40280), + 22: uint16(40281), + 23: uint16(40282), + 24: uint16(40283), + 25: uint16(40284), + 26: uint16(40285), + 27: uint16(40286), + 28: uint16(40287), + 29: uint16(40288), + 30: uint16(40289), + 31: uint16(40290), + 32: uint16(40291), + 33: uint16(40292), + 34: uint16(40293), + 35: uint16(40294), + 36: uint16(40295), + 37: uint16(40296), + 38: uint16(40297), + 39: uint16(40298), + 40: uint16(40299), + 41: uint16(40300), + 42: uint16(40301), + 43: uint16(40302), + 44: uint16(40303), + 45: uint16(40304), + 46: uint16(40305), + 47: uint16(40306), + 48: uint16(40307), + 49: uint16(40308), + 50: uint16(40309), + 51: uint16(40310), + 52: uint16(40311), + 53: uint16(40312), + 54: uint16(40313), + 55: uint16(40314), + 56: uint16(40315), + 57: uint16(40316), + 58: uint16(40317), + 59: uint16(40318), + 60: uint16(40319), + 61: uint16(40320), + 62: uint16(40321), + 63: uint16(40322), + 64: uint16(40323), + 65: uint16(40324), + 66: uint16(40325), + 67: uint16(40326), + 68: uint16(40327), + 69: uint16(40328), + 70: uint16(40329), + 71: uint16(40330), + 72: uint16(40331), + 73: uint16(40332), + 74: uint16(40333), + 75: uint16(40334), + 76: uint16(40335), + 77: uint16(40336), + 78: uint16(40337), + 79: uint16(40338), + 80: uint16(40339), + 81: uint16(40340), + 82: uint16(40341), + 83: uint16(40342), + 84: uint16(40343), + 85: uint16(40344), + 86: uint16(40345), + 87: uint16(40346), + 88: uint16(40347), + 89: uint16(40348), + 90: uint16(40349), + 91: uint16(40350), + 92: uint16(40351), + 93: uint16(40352), + 94: uint16(40353), + 95: uint16(40354), + 96: uint16(58002), + 97: uint16(58003), + 98: uint16(58004), + 99: uint16(58005), + 100: uint16(58006), + 101: uint16(58007), + 102: uint16(58008), + 103: uint16(58009), + 104: uint16(58010), + 105: uint16(58011), + 106: uint16(58012), + 107: uint16(58013), + 108: uint16(58014), + 109: uint16(58015), + 110: uint16(58016), + 111: uint16(58017), + 112: uint16(58018), + 113: uint16(58019), + 114: uint16(58020), + 115: uint16(58021), + 116: uint16(58022), + 117: uint16(58023), + 118: uint16(58024), + 119: uint16(58025), + 120: uint16(58026), + 121: uint16(58027), + 122: uint16(58028), + 123: uint16(58029), + 124: uint16(58030), + 125: uint16(58031), + 126: uint16(58032), + 127: uint16(58033), + 128: uint16(58034), + 129: uint16(58035), + 130: uint16(58036), + 131: uint16(58037), + 132: uint16(58038), + 133: uint16(58039), + 134: uint16(58040), + 135: uint16(58041), + 136: uint16(58042), + 137: uint16(58043), + 138: uint16(58044), + 139: uint16(58045), + 140: uint16(58046), + 141: uint16(58047), + 142: uint16(58048), + 143: uint16(58049), + 144: uint16(58050), + 145: uint16(58051), + 146: uint16(58052), + 147: uint16(58053), + 148: uint16(58054), + 149: uint16(58055), + 150: uint16(58056), + 151: uint16(58057), + 152: uint16(58058), + 153: uint16(58059), + 154: uint16(58060), + 155: uint16(58061), + 156: uint16(58062), + 157: uint16(58063), + 158: uint16(58064), + 159: uint16(58065), + 160: uint16(58066), + 161: uint16(58067), + 162: uint16(58068), + 163: uint16(58069), + 164: uint16(58070), + 165: uint16(58071), + 166: uint16(58072), + 167: uint16(58073), + 168: uint16(58074), + 169: uint16(58075), + 170: uint16(58076), + 171: uint16(58077), + 172: uint16(58078), + 173: uint16(58079), + 174: uint16(58080), + 175: uint16(58081), + 176: uint16(58082), + 177: uint16(58083), + 178: uint16(58084), + 179: uint16(58085), + 180: uint16(58086), + 181: uint16(58087), + 182: uint16(58088), + 183: uint16(58089), + 184: uint16(58090), + 185: uint16(58091), + 186: uint16(58092), + 187: uint16(58093), + 188: uint16(58094), + 189: uint16(58095), + }, + 121: { + 0: uint16(40355), + 1: uint16(40356), + 2: uint16(40357), + 3: uint16(40358), + 4: uint16(40359), + 5: uint16(40360), + 6: uint16(40361), + 7: uint16(40362), + 8: uint16(40363), + 9: uint16(40364), + 10: uint16(40365), + 11: uint16(40366), + 12: uint16(40367), + 13: uint16(40368), + 14: uint16(40369), + 15: uint16(40370), + 16: uint16(40371), + 17: uint16(40372), + 18: uint16(40373), + 19: uint16(40374), + 20: uint16(40375), + 21: uint16(40376), + 22: uint16(40377), + 23: uint16(40378), + 24: uint16(40379), + 25: uint16(40380), + 26: uint16(40381), + 27: uint16(40382), + 28: uint16(40383), + 29: uint16(40384), + 30: uint16(40385), + 31: uint16(40386), + 32: uint16(40387), + 33: uint16(40388), + 34: uint16(40389), + 35: uint16(40390), + 36: uint16(40391), + 37: uint16(40392), + 38: uint16(40393), + 39: uint16(40394), + 40: uint16(40395), + 41: uint16(40396), + 42: uint16(40397), + 43: uint16(40398), + 44: uint16(40399), + 45: uint16(40400), + 46: uint16(40401), + 47: uint16(40402), + 48: uint16(40403), + 49: uint16(40404), + 50: uint16(40405), + 51: uint16(40406), + 52: uint16(40407), + 53: uint16(40408), + 54: uint16(40409), + 55: uint16(40410), + 56: uint16(40411), + 57: uint16(40412), + 58: uint16(40413), + 59: uint16(40414), + 60: uint16(40415), + 61: uint16(40416), + 62: uint16(40417), + 63: uint16(40418), + 64: uint16(40419), + 65: uint16(40420), + 66: uint16(40421), + 67: uint16(40422), + 68: uint16(40423), + 69: uint16(40424), + 70: uint16(40425), + 71: uint16(40426), + 72: uint16(40427), + 73: uint16(40428), + 74: uint16(40429), + 75: uint16(40430), + 76: uint16(40431), + 77: uint16(40432), + 78: uint16(40433), + 79: uint16(40434), + 80: uint16(40435), + 81: uint16(40436), + 82: uint16(40437), + 83: uint16(40438), + 84: uint16(40439), + 85: uint16(40440), + 86: uint16(40441), + 87: uint16(40442), + 88: uint16(40443), + 89: uint16(40444), + 90: uint16(40445), + 91: uint16(40446), + 92: uint16(40447), + 93: uint16(40448), + 94: uint16(40449), + 95: uint16(40450), + 96: uint16(58096), + 97: uint16(58097), + 98: uint16(58098), + 99: uint16(58099), + 100: uint16(58100), + 101: uint16(58101), + 102: uint16(58102), + 103: uint16(58103), + 104: uint16(58104), + 105: uint16(58105), + 106: uint16(58106), + 107: uint16(58107), + 108: uint16(58108), + 109: uint16(58109), + 110: uint16(58110), + 111: uint16(58111), + 112: uint16(58112), + 113: uint16(58113), + 114: uint16(58114), + 115: uint16(58115), + 116: uint16(58116), + 117: uint16(58117), + 118: uint16(58118), + 119: uint16(58119), + 120: uint16(58120), + 121: uint16(58121), + 122: uint16(58122), + 123: uint16(58123), + 124: uint16(58124), + 125: uint16(58125), + 126: uint16(58126), + 127: uint16(58127), + 128: uint16(58128), + 129: uint16(58129), + 130: uint16(58130), + 131: uint16(58131), + 132: uint16(58132), + 133: uint16(58133), + 134: uint16(58134), + 135: uint16(58135), + 136: uint16(58136), + 137: uint16(58137), + 138: uint16(58138), + 139: uint16(58139), + 140: uint16(58140), + 141: uint16(58141), + 142: uint16(58142), + 143: uint16(58143), + 144: uint16(58144), + 145: uint16(58145), + 146: uint16(58146), + 147: uint16(58147), + 148: uint16(58148), + 149: uint16(58149), + 150: uint16(58150), + 151: uint16(58151), + 152: uint16(58152), + 153: uint16(58153), + 154: uint16(58154), + 155: uint16(58155), + 156: uint16(58156), + 157: uint16(58157), + 158: uint16(58158), + 159: uint16(58159), + 160: uint16(58160), + 161: uint16(58161), + 162: uint16(58162), + 163: uint16(58163), + 164: uint16(58164), + 165: uint16(58165), + 166: uint16(58166), + 167: uint16(58167), + 168: uint16(58168), + 169: uint16(58169), + 170: uint16(58170), + 171: uint16(58171), + 172: uint16(58172), + 173: uint16(58173), + 174: uint16(58174), + 175: uint16(58175), + 176: uint16(58176), + 177: uint16(58177), + 178: uint16(58178), + 179: uint16(58179), + 180: uint16(58180), + 181: uint16(58181), + 182: uint16(58182), + 183: uint16(58183), + 184: uint16(58184), + 185: uint16(58185), + 186: uint16(58186), + 187: uint16(58187), + 188: uint16(58188), + 189: uint16(58189), + }, + 122: { + 0: uint16(40451), + 1: uint16(40452), + 2: uint16(40453), + 3: uint16(40454), + 4: uint16(40455), + 5: uint16(40456), + 6: uint16(40457), + 7: uint16(40458), + 8: uint16(40459), + 9: uint16(40460), + 10: uint16(40461), + 11: uint16(40462), + 12: uint16(40463), + 13: uint16(40464), + 14: uint16(40465), + 15: uint16(40466), + 16: uint16(40467), + 17: uint16(40468), + 18: uint16(40469), + 19: uint16(40470), + 20: uint16(40471), + 21: uint16(40472), + 22: uint16(40473), + 23: uint16(40474), + 24: uint16(40475), + 25: uint16(40476), + 26: uint16(40477), + 27: uint16(40478), + 28: uint16(40484), + 29: uint16(40487), + 30: uint16(40494), + 31: uint16(40496), + 32: uint16(40500), + 33: uint16(40507), + 34: uint16(40508), + 35: uint16(40512), + 36: uint16(40525), + 37: uint16(40528), + 38: uint16(40530), + 39: uint16(40531), + 40: uint16(40532), + 41: uint16(40534), + 42: uint16(40537), + 43: uint16(40541), + 44: uint16(40543), + 45: uint16(40544), + 46: uint16(40545), + 47: uint16(40546), + 48: uint16(40549), + 49: uint16(40558), + 50: uint16(40559), + 51: uint16(40562), + 52: uint16(40564), + 53: uint16(40565), + 54: uint16(40566), + 55: uint16(40567), + 56: uint16(40568), + 57: uint16(40569), + 58: uint16(40570), + 59: uint16(40571), + 60: uint16(40572), + 61: uint16(40573), + 62: uint16(40576), + 63: uint16(40577), + 64: uint16(40579), + 65: uint16(40580), + 66: uint16(40581), + 67: uint16(40582), + 68: uint16(40585), + 69: uint16(40586), + 70: uint16(40588), + 71: uint16(40589), + 72: uint16(40590), + 73: uint16(40591), + 74: uint16(40592), + 75: uint16(40593), + 76: uint16(40596), + 77: uint16(40597), + 78: uint16(40598), + 79: uint16(40599), + 80: uint16(40600), + 81: uint16(40601), + 82: uint16(40602), + 83: uint16(40603), + 84: uint16(40604), + 85: uint16(40606), + 86: uint16(40608), + 87: uint16(40609), + 88: uint16(40610), + 89: uint16(40611), + 90: uint16(40612), + 91: uint16(40613), + 92: uint16(40615), + 93: uint16(40616), + 94: uint16(40617), + 95: uint16(40618), + 96: uint16(58190), + 97: uint16(58191), + 98: uint16(58192), + 99: uint16(58193), + 100: uint16(58194), + 101: uint16(58195), + 102: uint16(58196), + 103: uint16(58197), + 104: uint16(58198), + 105: uint16(58199), + 106: uint16(58200), + 107: uint16(58201), + 108: uint16(58202), + 109: uint16(58203), + 110: uint16(58204), + 111: uint16(58205), + 112: uint16(58206), + 113: uint16(58207), + 114: uint16(58208), + 115: uint16(58209), + 116: uint16(58210), + 117: uint16(58211), + 118: uint16(58212), + 119: uint16(58213), + 120: uint16(58214), + 121: uint16(58215), + 122: uint16(58216), + 123: uint16(58217), + 124: uint16(58218), + 125: uint16(58219), + 126: uint16(58220), + 127: uint16(58221), + 128: uint16(58222), + 129: uint16(58223), + 130: uint16(58224), + 131: uint16(58225), + 132: uint16(58226), + 133: uint16(58227), + 134: uint16(58228), + 135: uint16(58229), + 136: uint16(58230), + 137: uint16(58231), + 138: uint16(58232), + 139: uint16(58233), + 140: uint16(58234), + 141: uint16(58235), + 142: uint16(58236), + 143: uint16(58237), + 144: uint16(58238), + 145: uint16(58239), + 146: uint16(58240), + 147: uint16(58241), + 148: uint16(58242), + 149: uint16(58243), + 150: uint16(58244), + 151: uint16(58245), + 152: uint16(58246), + 153: uint16(58247), + 154: uint16(58248), + 155: uint16(58249), + 156: uint16(58250), + 157: uint16(58251), + 158: uint16(58252), + 159: uint16(58253), + 160: uint16(58254), + 161: uint16(58255), + 162: uint16(58256), + 163: uint16(58257), + 164: uint16(58258), + 165: uint16(58259), + 166: uint16(58260), + 167: uint16(58261), + 168: uint16(58262), + 169: uint16(58263), + 170: uint16(58264), + 171: uint16(58265), + 172: uint16(58266), + 173: uint16(58267), + 174: uint16(58268), + 175: uint16(58269), + 176: uint16(58270), + 177: uint16(58271), + 178: uint16(58272), + 179: uint16(58273), + 180: uint16(58274), + 181: uint16(58275), + 182: uint16(58276), + 183: uint16(58277), + 184: uint16(58278), + 185: uint16(58279), + 186: uint16(58280), + 187: uint16(58281), + 188: uint16(58282), + 189: uint16(58283), + }, + 123: { + 0: uint16(40619), + 1: uint16(40620), + 2: uint16(40621), + 3: uint16(40622), + 4: uint16(40623), + 5: uint16(40624), + 6: uint16(40625), + 7: uint16(40626), + 8: uint16(40627), + 9: uint16(40629), + 10: uint16(40630), + 11: uint16(40631), + 12: uint16(40633), + 13: uint16(40634), + 14: uint16(40636), + 15: uint16(40639), + 16: uint16(40640), + 17: uint16(40641), + 18: uint16(40642), + 19: uint16(40643), + 20: uint16(40645), + 21: uint16(40646), + 22: uint16(40647), + 23: uint16(40648), + 24: uint16(40650), + 25: uint16(40651), + 26: uint16(40652), + 27: uint16(40656), + 28: uint16(40658), + 29: uint16(40659), + 30: uint16(40661), + 31: uint16(40662), + 32: uint16(40663), + 33: uint16(40665), + 34: uint16(40666), + 35: uint16(40670), + 36: uint16(40673), + 37: uint16(40675), + 38: uint16(40676), + 39: uint16(40678), + 40: uint16(40680), + 41: uint16(40683), + 42: uint16(40684), + 43: uint16(40685), + 44: uint16(40686), + 45: uint16(40688), + 46: uint16(40689), + 47: uint16(40690), + 48: uint16(40691), + 49: uint16(40692), + 50: uint16(40693), + 51: uint16(40694), + 52: uint16(40695), + 53: uint16(40696), + 54: uint16(40698), + 55: uint16(40701), + 56: uint16(40703), + 57: uint16(40704), + 58: uint16(40705), + 59: uint16(40706), + 60: uint16(40707), + 61: uint16(40708), + 62: uint16(40709), + 63: uint16(40710), + 64: uint16(40711), + 65: uint16(40712), + 66: uint16(40713), + 67: uint16(40714), + 68: uint16(40716), + 69: uint16(40719), + 70: uint16(40721), + 71: uint16(40722), + 72: uint16(40724), + 73: uint16(40725), + 74: uint16(40726), + 75: uint16(40728), + 76: uint16(40730), + 77: uint16(40731), + 78: uint16(40732), + 79: uint16(40733), + 80: uint16(40734), + 81: uint16(40735), + 82: uint16(40737), + 83: uint16(40739), + 84: uint16(40740), + 85: uint16(40741), + 86: uint16(40742), + 87: uint16(40743), + 88: uint16(40744), + 89: uint16(40745), + 90: uint16(40746), + 91: uint16(40747), + 92: uint16(40749), + 93: uint16(40750), + 94: uint16(40752), + 95: uint16(40753), + 96: uint16(58284), + 97: uint16(58285), + 98: uint16(58286), + 99: uint16(58287), + 100: uint16(58288), + 101: uint16(58289), + 102: uint16(58290), + 103: uint16(58291), + 104: uint16(58292), + 105: uint16(58293), + 106: uint16(58294), + 107: uint16(58295), + 108: uint16(58296), + 109: uint16(58297), + 110: uint16(58298), + 111: uint16(58299), + 112: uint16(58300), + 113: uint16(58301), + 114: uint16(58302), + 115: uint16(58303), + 116: uint16(58304), + 117: uint16(58305), + 118: uint16(58306), + 119: uint16(58307), + 120: uint16(58308), + 121: uint16(58309), + 122: uint16(58310), + 123: uint16(58311), + 124: uint16(58312), + 125: uint16(58313), + 126: uint16(58314), + 127: uint16(58315), + 128: uint16(58316), + 129: uint16(58317), + 130: uint16(58318), + 131: uint16(58319), + 132: uint16(58320), + 133: uint16(58321), + 134: uint16(58322), + 135: uint16(58323), + 136: uint16(58324), + 137: uint16(58325), + 138: uint16(58326), + 139: uint16(58327), + 140: uint16(58328), + 141: uint16(58329), + 142: uint16(58330), + 143: uint16(58331), + 144: uint16(58332), + 145: uint16(58333), + 146: uint16(58334), + 147: uint16(58335), + 148: uint16(58336), + 149: uint16(58337), + 150: uint16(58338), + 151: uint16(58339), + 152: uint16(58340), + 153: uint16(58341), + 154: uint16(58342), + 155: uint16(58343), + 156: uint16(58344), + 157: uint16(58345), + 158: uint16(58346), + 159: uint16(58347), + 160: uint16(58348), + 161: uint16(58349), + 162: uint16(58350), + 163: uint16(58351), + 164: uint16(58352), + 165: uint16(58353), + 166: uint16(58354), + 167: uint16(58355), + 168: uint16(58356), + 169: uint16(58357), + 170: uint16(58358), + 171: uint16(58359), + 172: uint16(58360), + 173: uint16(58361), + 174: uint16(58362), + 175: uint16(58363), + 176: uint16(58364), + 177: uint16(58365), + 178: uint16(58366), + 179: uint16(58367), + 180: uint16(58368), + 181: uint16(58369), + 182: uint16(58370), + 183: uint16(58371), + 184: uint16(58372), + 185: uint16(58373), + 186: uint16(58374), + 187: uint16(58375), + 188: uint16(58376), + 189: uint16(58377), + }, + 124: { + 0: uint16(40754), + 1: uint16(40755), + 2: uint16(40756), + 3: uint16(40757), + 4: uint16(40758), + 5: uint16(40760), + 6: uint16(40762), + 7: uint16(40764), + 8: uint16(40767), + 9: uint16(40768), + 10: uint16(40769), + 11: uint16(40770), + 12: uint16(40771), + 13: uint16(40773), + 14: uint16(40774), + 15: uint16(40775), + 16: uint16(40776), + 17: uint16(40777), + 18: uint16(40778), + 19: uint16(40779), + 20: uint16(40780), + 21: uint16(40781), + 22: uint16(40782), + 23: uint16(40783), + 24: uint16(40786), + 25: uint16(40787), + 26: uint16(40788), + 27: uint16(40789), + 28: uint16(40790), + 29: uint16(40791), + 30: uint16(40792), + 31: uint16(40793), + 32: uint16(40794), + 33: uint16(40795), + 34: uint16(40796), + 35: uint16(40797), + 36: uint16(40798), + 37: uint16(40799), + 38: uint16(40800), + 39: uint16(40801), + 40: uint16(40802), + 41: uint16(40803), + 42: uint16(40804), + 43: uint16(40805), + 44: uint16(40806), + 45: uint16(40807), + 46: uint16(40808), + 47: uint16(40809), + 48: uint16(40810), + 49: uint16(40811), + 50: uint16(40812), + 51: uint16(40813), + 52: uint16(40814), + 53: uint16(40815), + 54: uint16(40816), + 55: uint16(40817), + 56: uint16(40818), + 57: uint16(40819), + 58: uint16(40820), + 59: uint16(40821), + 60: uint16(40822), + 61: uint16(40823), + 62: uint16(40824), + 63: uint16(40825), + 64: uint16(40826), + 65: uint16(40827), + 66: uint16(40828), + 67: uint16(40829), + 68: uint16(40830), + 69: uint16(40833), + 70: uint16(40834), + 71: uint16(40845), + 72: uint16(40846), + 73: uint16(40847), + 74: uint16(40848), + 75: uint16(40849), + 76: uint16(40850), + 77: uint16(40851), + 78: uint16(40852), + 79: uint16(40853), + 80: uint16(40854), + 81: uint16(40855), + 82: uint16(40856), + 83: uint16(40860), + 84: uint16(40861), + 85: uint16(40862), + 86: uint16(40865), + 87: uint16(40866), + 88: uint16(40867), + 89: uint16(40868), + 90: uint16(40869), + 91: uint16(63788), + 92: uint16(63865), + 93: uint16(63893), + 94: uint16(63975), + 95: uint16(63985), + 96: uint16(58378), + 97: uint16(58379), + 98: uint16(58380), + 99: uint16(58381), + 100: uint16(58382), + 101: uint16(58383), + 102: uint16(58384), + 103: uint16(58385), + 104: uint16(58386), + 105: uint16(58387), + 106: uint16(58388), + 107: uint16(58389), + 108: uint16(58390), + 109: uint16(58391), + 110: uint16(58392), + 111: uint16(58393), + 112: uint16(58394), + 113: uint16(58395), + 114: uint16(58396), + 115: uint16(58397), + 116: uint16(58398), + 117: uint16(58399), + 118: uint16(58400), + 119: uint16(58401), + 120: uint16(58402), + 121: uint16(58403), + 122: uint16(58404), + 123: uint16(58405), + 124: uint16(58406), + 125: uint16(58407), + 126: uint16(58408), + 127: uint16(58409), + 128: uint16(58410), + 129: uint16(58411), + 130: uint16(58412), + 131: uint16(58413), + 132: uint16(58414), + 133: uint16(58415), + 134: uint16(58416), + 135: uint16(58417), + 136: uint16(58418), + 137: uint16(58419), + 138: uint16(58420), + 139: uint16(58421), + 140: uint16(58422), + 141: uint16(58423), + 142: uint16(58424), + 143: uint16(58425), + 144: uint16(58426), + 145: uint16(58427), + 146: uint16(58428), + 147: uint16(58429), + 148: uint16(58430), + 149: uint16(58431), + 150: uint16(58432), + 151: uint16(58433), + 152: uint16(58434), + 153: uint16(58435), + 154: uint16(58436), + 155: uint16(58437), + 156: uint16(58438), + 157: uint16(58439), + 158: uint16(58440), + 159: uint16(58441), + 160: uint16(58442), + 161: uint16(58443), + 162: uint16(58444), + 163: uint16(58445), + 164: uint16(58446), + 165: uint16(58447), + 166: uint16(58448), + 167: uint16(58449), + 168: uint16(58450), + 169: uint16(58451), + 170: uint16(58452), + 171: uint16(58453), + 172: uint16(58454), + 173: uint16(58455), + 174: uint16(58456), + 175: uint16(58457), + 176: uint16(58458), + 177: uint16(58459), + 178: uint16(58460), + 179: uint16(58461), + 180: uint16(58462), + 181: uint16(58463), + 182: uint16(58464), + 183: uint16(58465), + 184: uint16(58466), + 185: uint16(58467), + 186: uint16(58468), + 187: uint16(58469), + 188: uint16(58470), + 189: uint16(58471), + }, + 125: { + 0: uint16(64012), + 1: uint16(64013), + 2: uint16(64014), + 3: uint16(64015), + 4: uint16(64017), + 5: uint16(64019), + 6: uint16(64020), + 7: uint16(64024), + 8: uint16(64031), + 9: uint16(64032), + 10: uint16(64033), + 11: uint16(64035), + 12: uint16(64036), + 13: uint16(64039), + 14: uint16(64040), + 15: uint16(64041), + 16: uint16(11905), + 17: uint16(59414), + 18: uint16(59415), + 19: uint16(59416), + 20: uint16(11908), + 21: uint16(13427), + 22: uint16(13383), + 23: uint16(11912), + 24: uint16(11915), + 25: uint16(59422), + 26: uint16(13726), + 27: uint16(13850), + 28: uint16(13838), + 29: uint16(11916), + 30: uint16(11927), + 31: uint16(14702), + 32: uint16(14616), + 33: uint16(59430), + 34: uint16(14799), + 35: uint16(14815), + 36: uint16(14963), + 37: uint16(14800), + 38: uint16(59435), + 39: uint16(59436), + 40: uint16(15182), + 41: uint16(15470), + 42: uint16(15584), + 43: uint16(11943), + 44: uint16(59441), + 45: uint16(59442), + 46: uint16(11946), + 47: uint16(16470), + 48: uint16(16735), + 49: uint16(11950), + 50: uint16(17207), + 51: uint16(11955), + 52: uint16(11958), + 53: uint16(11959), + 54: uint16(59451), + 55: uint16(17329), + 56: uint16(17324), + 57: uint16(11963), + 58: uint16(17373), + 59: uint16(17622), + 60: uint16(18017), + 61: uint16(17996), + 62: uint16(59459), + 63: uint16(18211), + 64: uint16(18217), + 65: uint16(18300), + 66: uint16(18317), + 67: uint16(11978), + 68: uint16(18759), + 69: uint16(18810), + 70: uint16(18813), + 71: uint16(18818), + 72: uint16(18819), + 73: uint16(18821), + 74: uint16(18822), + 75: uint16(18847), + 76: uint16(18843), + 77: uint16(18871), + 78: uint16(18870), + 79: uint16(59476), + 80: uint16(59477), + 81: uint16(19619), + 82: uint16(19615), + 83: uint16(19616), + 84: uint16(19617), + 85: uint16(19575), + 86: uint16(19618), + 87: uint16(19731), + 88: uint16(19732), + 89: uint16(19733), + 90: uint16(19734), + 91: uint16(19735), + 92: uint16(19736), + 93: uint16(19737), + 94: uint16(19886), + 95: uint16(59492), + 96: uint16(58472), + 97: uint16(58473), + 98: uint16(58474), + 99: uint16(58475), + 100: uint16(58476), + 101: uint16(58477), + 102: uint16(58478), + 103: uint16(58479), + 104: uint16(58480), + 105: uint16(58481), + 106: uint16(58482), + 107: uint16(58483), + 108: uint16(58484), + 109: uint16(58485), + 110: uint16(58486), + 111: uint16(58487), + 112: uint16(58488), + 113: uint16(58489), + 114: uint16(58490), + 115: uint16(58491), + 116: uint16(58492), + 117: uint16(58493), + 118: uint16(58494), + 119: uint16(58495), + 120: uint16(58496), + 121: uint16(58497), + 122: uint16(58498), + 123: uint16(58499), + 124: uint16(58500), + 125: uint16(58501), + 126: uint16(58502), + 127: uint16(58503), + 128: uint16(58504), + 129: uint16(58505), + 130: uint16(58506), + 131: uint16(58507), + 132: uint16(58508), + 133: uint16(58509), + 134: uint16(58510), + 135: uint16(58511), + 136: uint16(58512), + 137: uint16(58513), + 138: uint16(58514), + 139: uint16(58515), + 140: uint16(58516), + 141: uint16(58517), + 142: uint16(58518), + 143: uint16(58519), + 144: uint16(58520), + 145: uint16(58521), + 146: uint16(58522), + 147: uint16(58523), + 148: uint16(58524), + 149: uint16(58525), + 150: uint16(58526), + 151: uint16(58527), + 152: uint16(58528), + 153: uint16(58529), + 154: uint16(58530), + 155: uint16(58531), + 156: uint16(58532), + 157: uint16(58533), + 158: uint16(58534), + 159: uint16(58535), + 160: uint16(58536), + 161: uint16(58537), + 162: uint16(58538), + 163: uint16(58539), + 164: uint16(58540), + 165: uint16(58541), + 166: uint16(58542), + 167: uint16(58543), + 168: uint16(58544), + 169: uint16(58545), + 170: uint16(58546), + 171: uint16(58547), + 172: uint16(58548), + 173: uint16(58549), + 174: uint16(58550), + 175: uint16(58551), + 176: uint16(58552), + 177: uint16(58553), + 178: uint16(58554), + 179: uint16(58555), + 180: uint16(58556), + 181: uint16(58557), + 182: uint16(58558), + 183: uint16(58559), + 184: uint16(58560), + 185: uint16(58561), + 186: uint16(58562), + 187: uint16(58563), + 188: uint16(58564), + 189: uint16(58565), + }, +} + +var _big5 = [89][157]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(65292), + 2: uint16(12289), + 3: uint16(12290), + 4: uint16(65294), + 5: uint16(8231), + 6: uint16(65307), + 7: uint16(65306), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(65072), + 11: uint16(8230), + 12: uint16(8229), + 13: uint16(65104), + 14: uint16(65105), + 15: uint16(65106), + 16: uint16(183), + 17: uint16(65108), + 18: uint16(65109), + 19: uint16(65110), + 20: uint16(65111), + 21: uint16(65372), + 22: uint16(8211), + 23: uint16(65073), + 24: uint16(8212), + 25: uint16(65075), + 26: uint16(9588), + 27: uint16(65076), + 28: uint16(65103), + 29: uint16(65288), + 30: uint16(65289), + 31: uint16(65077), + 32: uint16(65078), + 33: uint16(65371), + 34: uint16(65373), + 35: uint16(65079), + 36: uint16(65080), + 37: uint16(12308), + 38: uint16(12309), + 39: uint16(65081), + 40: uint16(65082), + 41: uint16(12304), + 42: uint16(12305), + 43: uint16(65083), + 44: uint16(65084), + 45: uint16(12298), + 46: uint16(12299), + 47: uint16(65085), + 48: uint16(65086), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(65087), + 52: uint16(65088), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(65089), + 56: uint16(65090), + 57: uint16(12302), + 58: uint16(12303), + 59: uint16(65091), + 60: uint16(65092), + 61: uint16(65113), + 62: uint16(65114), + 63: uint16(65115), + 64: uint16(65116), + 65: uint16(65117), + 66: uint16(65118), + 67: uint16(8216), + 68: uint16(8217), + 69: uint16(8220), + 70: uint16(8221), + 71: uint16(12317), + 72: uint16(12318), + 73: uint16(8245), + 74: uint16(8242), + 75: uint16(65283), + 76: uint16(65286), + 77: uint16(65290), + 78: uint16(8251), + 79: uint16(167), + 80: uint16(12291), + 81: uint16(9675), + 82: uint16(9679), + 83: uint16(9651), + 84: uint16(9650), + 85: uint16(9678), + 86: uint16(9734), + 87: uint16(9733), + 88: uint16(9671), + 89: uint16(9670), + 90: uint16(9633), + 91: uint16(9632), + 92: uint16(9661), + 93: uint16(9660), + 94: uint16(12963), + 95: uint16(8453), + 96: uint16(175), + 97: uint16(65507), + 98: uint16(65343), + 99: uint16(717), + 100: uint16(65097), + 101: uint16(65098), + 102: uint16(65101), + 103: uint16(65102), + 104: uint16(65099), + 105: uint16(65100), + 106: uint16(65119), + 107: uint16(65120), + 108: uint16(65121), + 109: uint16(65291), + 110: uint16(65293), + 111: uint16(215), + 112: uint16(247), + 113: uint16(177), + 114: uint16(8730), + 115: uint16(65308), + 116: uint16(65310), + 117: uint16(65309), + 118: uint16(8806), + 119: uint16(8807), + 120: uint16(8800), + 121: uint16(8734), + 122: uint16(8786), + 123: uint16(8801), + 124: uint16(65122), + 125: uint16(65123), + 126: uint16(65124), + 127: uint16(65125), + 128: uint16(65126), + 129: uint16(65374), + 130: uint16(8745), + 131: uint16(8746), + 132: uint16(8869), + 133: uint16(8736), + 134: uint16(8735), + 135: uint16(8895), + 136: uint16(13266), + 137: uint16(13265), + 138: uint16(8747), + 139: uint16(8750), + 140: uint16(8757), + 141: uint16(8756), + 142: uint16(9792), + 143: uint16(9794), + 144: uint16(8853), + 145: uint16(8857), + 146: uint16(8593), + 147: uint16(8595), + 148: uint16(8592), + 149: uint16(8594), + 150: uint16(8598), + 151: uint16(8599), + 152: uint16(8601), + 153: uint16(8600), + 154: uint16(8741), + 155: uint16(8739), + 156: uint16(65295), + }, + 1: { + 0: uint16(65340), + 1: uint16(8725), + 2: uint16(65128), + 3: uint16(65284), + 4: uint16(65509), + 5: uint16(12306), + 6: uint16(65504), + 7: uint16(65505), + 8: uint16(65285), + 9: uint16(65312), + 10: uint16(8451), + 11: uint16(8457), + 12: uint16(65129), + 13: uint16(65130), + 14: uint16(65131), + 15: uint16(13269), + 16: uint16(13212), + 17: uint16(13213), + 18: uint16(13214), + 19: uint16(13262), + 20: uint16(13217), + 21: uint16(13198), + 22: uint16(13199), + 23: uint16(13252), + 24: uint16(176), + 25: uint16(20825), + 26: uint16(20827), + 27: uint16(20830), + 28: uint16(20829), + 29: uint16(20833), + 30: uint16(20835), + 31: uint16(21991), + 32: uint16(29929), + 33: uint16(31950), + 34: uint16(9601), + 35: uint16(9602), + 36: uint16(9603), + 37: uint16(9604), + 38: uint16(9605), + 39: uint16(9606), + 40: uint16(9607), + 41: uint16(9608), + 42: uint16(9615), + 43: uint16(9614), + 44: uint16(9613), + 45: uint16(9612), + 46: uint16(9611), + 47: uint16(9610), + 48: uint16(9609), + 49: uint16(9532), + 50: uint16(9524), + 51: uint16(9516), + 52: uint16(9508), + 53: uint16(9500), + 54: uint16(9620), + 55: uint16(9472), + 56: uint16(9474), + 57: uint16(9621), + 58: uint16(9484), + 59: uint16(9488), + 60: uint16(9492), + 61: uint16(9496), + 62: uint16(9581), + 63: uint16(9582), + 64: uint16(9584), + 65: uint16(9583), + 66: uint16(9552), + 67: uint16(9566), + 68: uint16(9578), + 69: uint16(9569), + 70: uint16(9698), + 71: uint16(9699), + 72: uint16(9701), + 73: uint16(9700), + 74: uint16(9585), + 75: uint16(9586), + 76: uint16(9587), + 77: uint16(65296), + 78: uint16(65297), + 79: uint16(65298), + 80: uint16(65299), + 81: uint16(65300), + 82: uint16(65301), + 83: uint16(65302), + 84: uint16(65303), + 85: uint16(65304), + 86: uint16(65305), + 87: uint16(8544), + 88: uint16(8545), + 89: uint16(8546), + 90: uint16(8547), + 91: uint16(8548), + 92: uint16(8549), + 93: uint16(8550), + 94: uint16(8551), + 95: uint16(8552), + 96: uint16(8553), + 97: uint16(12321), + 98: uint16(12322), + 99: uint16(12323), + 100: uint16(12324), + 101: uint16(12325), + 102: uint16(12326), + 103: uint16(12327), + 104: uint16(12328), + 105: uint16(12329), + 106: uint16(21313), + 107: uint16(21316), + 108: uint16(21317), + 109: uint16(65313), + 110: uint16(65314), + 111: uint16(65315), + 112: uint16(65316), + 113: uint16(65317), + 114: uint16(65318), + 115: uint16(65319), + 116: uint16(65320), + 117: uint16(65321), + 118: uint16(65322), + 119: uint16(65323), + 120: uint16(65324), + 121: uint16(65325), + 122: uint16(65326), + 123: uint16(65327), + 124: uint16(65328), + 125: uint16(65329), + 126: uint16(65330), + 127: uint16(65331), + 128: uint16(65332), + 129: uint16(65333), + 130: uint16(65334), + 131: uint16(65335), + 132: uint16(65336), + 133: uint16(65337), + 134: uint16(65338), + 135: uint16(65345), + 136: uint16(65346), + 137: uint16(65347), + 138: uint16(65348), + 139: uint16(65349), + 140: uint16(65350), + 141: uint16(65351), + 142: uint16(65352), + 143: uint16(65353), + 144: uint16(65354), + 145: uint16(65355), + 146: uint16(65356), + 147: uint16(65357), + 148: uint16(65358), + 149: uint16(65359), + 150: uint16(65360), + 151: uint16(65361), + 152: uint16(65362), + 153: uint16(65363), + 154: uint16(65364), + 155: uint16(65365), + 156: uint16(65366), + }, + 2: { + 0: uint16(65367), + 1: uint16(65368), + 2: uint16(65369), + 3: uint16(65370), + 4: uint16(913), + 5: uint16(914), + 6: uint16(915), + 7: uint16(916), + 8: uint16(917), + 9: uint16(918), + 10: uint16(919), + 11: uint16(920), + 12: uint16(921), + 13: uint16(922), + 14: uint16(923), + 15: uint16(924), + 16: uint16(925), + 17: uint16(926), + 18: uint16(927), + 19: uint16(928), + 20: uint16(929), + 21: uint16(931), + 22: uint16(932), + 23: uint16(933), + 24: uint16(934), + 25: uint16(935), + 26: uint16(936), + 27: uint16(937), + 28: uint16(945), + 29: uint16(946), + 30: uint16(947), + 31: uint16(948), + 32: uint16(949), + 33: uint16(950), + 34: uint16(951), + 35: uint16(952), + 36: uint16(953), + 37: uint16(954), + 38: uint16(955), + 39: uint16(956), + 40: uint16(957), + 41: uint16(958), + 42: uint16(959), + 43: uint16(960), + 44: uint16(961), + 45: uint16(963), + 46: uint16(964), + 47: uint16(965), + 48: uint16(966), + 49: uint16(967), + 50: uint16(968), + 51: uint16(969), + 52: uint16(12549), + 53: uint16(12550), + 54: uint16(12551), + 55: uint16(12552), + 56: uint16(12553), + 57: uint16(12554), + 58: uint16(12555), + 59: uint16(12556), + 60: uint16(12557), + 61: uint16(12558), + 62: uint16(12559), + 63: uint16(12560), + 64: uint16(12561), + 65: uint16(12562), + 66: uint16(12563), + 67: uint16(12564), + 68: uint16(12565), + 69: uint16(12566), + 70: uint16(12567), + 71: uint16(12568), + 72: uint16(12569), + 73: uint16(12570), + 74: uint16(12571), + 75: uint16(12572), + 76: uint16(12573), + 77: uint16(12574), + 78: uint16(12575), + 79: uint16(12576), + 80: uint16(12577), + 81: uint16(12578), + 82: uint16(12579), + 83: uint16(12580), + 84: uint16(12581), + 85: uint16(12582), + 86: uint16(12583), + 87: uint16(12584), + 88: uint16(12585), + 89: uint16(729), + 90: uint16(713), + 91: uint16(714), + 92: uint16(711), + 93: uint16(715), + 94: uint16(9216), + 95: uint16(9217), + 96: uint16(9218), + 97: uint16(9219), + 98: uint16(9220), + 99: uint16(9221), + 100: uint16(9222), + 101: uint16(9223), + 102: uint16(9224), + 103: uint16(9225), + 104: uint16(9226), + 105: uint16(9227), + 106: uint16(9228), + 107: uint16(9229), + 108: uint16(9230), + 109: uint16(9231), + 110: uint16(9232), + 111: uint16(9233), + 112: uint16(9234), + 113: uint16(9235), + 114: uint16(9236), + 115: uint16(9237), + 116: uint16(9238), + 117: uint16(9239), + 118: uint16(9240), + 119: uint16(9241), + 120: uint16(9242), + 121: uint16(9243), + 122: uint16(9244), + 123: uint16(9245), + 124: uint16(9246), + 125: uint16(9247), + 126: uint16(9249), + 127: uint16(8364), + }, + 3: { + 0: uint16(19968), + 1: uint16(20057), + 2: uint16(19969), + 3: uint16(19971), + 4: uint16(20035), + 5: uint16(20061), + 6: uint16(20102), + 7: uint16(20108), + 8: uint16(20154), + 9: uint16(20799), + 10: uint16(20837), + 11: uint16(20843), + 12: uint16(20960), + 13: uint16(20992), + 14: uint16(20993), + 15: uint16(21147), + 16: uint16(21269), + 17: uint16(21313), + 18: uint16(21340), + 19: uint16(21448), + 20: uint16(19977), + 21: uint16(19979), + 22: uint16(19976), + 23: uint16(19978), + 24: uint16(20011), + 25: uint16(20024), + 26: uint16(20961), + 27: uint16(20037), + 28: uint16(20040), + 29: uint16(20063), + 30: uint16(20062), + 31: uint16(20110), + 32: uint16(20129), + 33: uint16(20800), + 34: uint16(20995), + 35: uint16(21242), + 36: uint16(21315), + 37: uint16(21449), + 38: uint16(21475), + 39: uint16(22303), + 40: uint16(22763), + 41: uint16(22805), + 42: uint16(22823), + 43: uint16(22899), + 44: uint16(23376), + 45: uint16(23377), + 46: uint16(23379), + 47: uint16(23544), + 48: uint16(23567), + 49: uint16(23586), + 50: uint16(23608), + 51: uint16(23665), + 52: uint16(24029), + 53: uint16(24037), + 54: uint16(24049), + 55: uint16(24050), + 56: uint16(24051), + 57: uint16(24062), + 58: uint16(24178), + 59: uint16(24318), + 60: uint16(24331), + 61: uint16(24339), + 62: uint16(25165), + 63: uint16(19985), + 64: uint16(19984), + 65: uint16(19981), + 66: uint16(20013), + 67: uint16(20016), + 68: uint16(20025), + 69: uint16(20043), + 70: uint16(23609), + 71: uint16(20104), + 72: uint16(20113), + 73: uint16(20117), + 74: uint16(20114), + 75: uint16(20116), + 76: uint16(20130), + 77: uint16(20161), + 78: uint16(20160), + 79: uint16(20163), + 80: uint16(20166), + 81: uint16(20167), + 82: uint16(20173), + 83: uint16(20170), + 84: uint16(20171), + 85: uint16(20164), + 86: uint16(20803), + 87: uint16(20801), + 88: uint16(20839), + 89: uint16(20845), + 90: uint16(20846), + 91: uint16(20844), + 92: uint16(20887), + 93: uint16(20982), + 94: uint16(20998), + 95: uint16(20999), + 96: uint16(21000), + 97: uint16(21243), + 98: uint16(21246), + 99: uint16(21247), + 100: uint16(21270), + 101: uint16(21305), + 102: uint16(21320), + 103: uint16(21319), + 104: uint16(21317), + 105: uint16(21342), + 106: uint16(21380), + 107: uint16(21451), + 108: uint16(21450), + 109: uint16(21453), + 110: uint16(22764), + 111: uint16(22825), + 112: uint16(22827), + 113: uint16(22826), + 114: uint16(22829), + 115: uint16(23380), + 116: uint16(23569), + 117: uint16(23588), + 118: uint16(23610), + 119: uint16(23663), + 120: uint16(24052), + 121: uint16(24187), + 122: uint16(24319), + 123: uint16(24340), + 124: uint16(24341), + 125: uint16(24515), + 126: uint16(25096), + 127: uint16(25142), + 128: uint16(25163), + 129: uint16(25166), + 130: uint16(25903), + 131: uint16(25991), + 132: uint16(26007), + 133: uint16(26020), + 134: uint16(26041), + 135: uint16(26085), + 136: uint16(26352), + 137: uint16(26376), + 138: uint16(26408), + 139: uint16(27424), + 140: uint16(27490), + 141: uint16(27513), + 142: uint16(27595), + 143: uint16(27604), + 144: uint16(27611), + 145: uint16(27663), + 146: uint16(27700), + 147: uint16(28779), + 148: uint16(29226), + 149: uint16(29238), + 150: uint16(29243), + 151: uint16(29255), + 152: uint16(29273), + 153: uint16(29275), + 154: uint16(29356), + 155: uint16(29579), + 156: uint16(19993), + }, + 4: { + 0: uint16(19990), + 1: uint16(19989), + 2: uint16(19988), + 3: uint16(19992), + 4: uint16(20027), + 5: uint16(20045), + 6: uint16(20047), + 7: uint16(20046), + 8: uint16(20197), + 9: uint16(20184), + 10: uint16(20180), + 11: uint16(20181), + 12: uint16(20182), + 13: uint16(20183), + 14: uint16(20195), + 15: uint16(20196), + 16: uint16(20185), + 17: uint16(20190), + 18: uint16(20805), + 19: uint16(20804), + 20: uint16(20873), + 21: uint16(20874), + 22: uint16(20908), + 23: uint16(20985), + 24: uint16(20986), + 25: uint16(20984), + 26: uint16(21002), + 27: uint16(21152), + 28: uint16(21151), + 29: uint16(21253), + 30: uint16(21254), + 31: uint16(21271), + 32: uint16(21277), + 33: uint16(20191), + 34: uint16(21322), + 35: uint16(21321), + 36: uint16(21345), + 37: uint16(21344), + 38: uint16(21359), + 39: uint16(21358), + 40: uint16(21435), + 41: uint16(21487), + 42: uint16(21476), + 43: uint16(21491), + 44: uint16(21484), + 45: uint16(21486), + 46: uint16(21481), + 47: uint16(21480), + 48: uint16(21500), + 49: uint16(21496), + 50: uint16(21493), + 51: uint16(21483), + 52: uint16(21478), + 53: uint16(21482), + 54: uint16(21490), + 55: uint16(21489), + 56: uint16(21488), + 57: uint16(21477), + 58: uint16(21485), + 59: uint16(21499), + 60: uint16(22235), + 61: uint16(22234), + 62: uint16(22806), + 63: uint16(22830), + 64: uint16(22833), + 65: uint16(22900), + 66: uint16(22902), + 67: uint16(23381), + 68: uint16(23427), + 69: uint16(23612), + 70: uint16(24040), + 71: uint16(24039), + 72: uint16(24038), + 73: uint16(24066), + 74: uint16(24067), + 75: uint16(24179), + 76: uint16(24188), + 77: uint16(24321), + 78: uint16(24344), + 79: uint16(24343), + 80: uint16(24517), + 81: uint16(25098), + 82: uint16(25171), + 83: uint16(25172), + 84: uint16(25170), + 85: uint16(25169), + 86: uint16(26021), + 87: uint16(26086), + 88: uint16(26414), + 89: uint16(26412), + 90: uint16(26410), + 91: uint16(26411), + 92: uint16(26413), + 93: uint16(27491), + 94: uint16(27597), + 95: uint16(27665), + 96: uint16(27664), + 97: uint16(27704), + 98: uint16(27713), + 99: uint16(27712), + 100: uint16(27710), + 101: uint16(29359), + 102: uint16(29572), + 103: uint16(29577), + 104: uint16(29916), + 105: uint16(29926), + 106: uint16(29976), + 107: uint16(29983), + 108: uint16(29992), + 109: uint16(29993), + 110: uint16(30000), + 111: uint16(30001), + 112: uint16(30002), + 113: uint16(30003), + 114: uint16(30091), + 115: uint16(30333), + 116: uint16(30382), + 117: uint16(30399), + 118: uint16(30446), + 119: uint16(30683), + 120: uint16(30690), + 121: uint16(30707), + 122: uint16(31034), + 123: uint16(31166), + 124: uint16(31348), + 125: uint16(31435), + 126: uint16(19998), + 127: uint16(19999), + 128: uint16(20050), + 129: uint16(20051), + 130: uint16(20073), + 131: uint16(20121), + 132: uint16(20132), + 133: uint16(20134), + 134: uint16(20133), + 135: uint16(20223), + 136: uint16(20233), + 137: uint16(20249), + 138: uint16(20234), + 139: uint16(20245), + 140: uint16(20237), + 141: uint16(20240), + 142: uint16(20241), + 143: uint16(20239), + 144: uint16(20210), + 145: uint16(20214), + 146: uint16(20219), + 147: uint16(20208), + 148: uint16(20211), + 149: uint16(20221), + 150: uint16(20225), + 151: uint16(20235), + 152: uint16(20809), + 153: uint16(20807), + 154: uint16(20806), + 155: uint16(20808), + 156: uint16(20840), + }, + 5: { + 0: uint16(20849), + 1: uint16(20877), + 2: uint16(20912), + 3: uint16(21015), + 4: uint16(21009), + 5: uint16(21010), + 6: uint16(21006), + 7: uint16(21014), + 8: uint16(21155), + 9: uint16(21256), + 10: uint16(21281), + 11: uint16(21280), + 12: uint16(21360), + 13: uint16(21361), + 14: uint16(21513), + 15: uint16(21519), + 16: uint16(21516), + 17: uint16(21514), + 18: uint16(21520), + 19: uint16(21505), + 20: uint16(21515), + 21: uint16(21508), + 22: uint16(21521), + 23: uint16(21517), + 24: uint16(21512), + 25: uint16(21507), + 26: uint16(21518), + 27: uint16(21510), + 28: uint16(21522), + 29: uint16(22240), + 30: uint16(22238), + 31: uint16(22237), + 32: uint16(22323), + 33: uint16(22320), + 34: uint16(22312), + 35: uint16(22317), + 36: uint16(22316), + 37: uint16(22319), + 38: uint16(22313), + 39: uint16(22809), + 40: uint16(22810), + 41: uint16(22839), + 42: uint16(22840), + 43: uint16(22916), + 44: uint16(22904), + 45: uint16(22915), + 46: uint16(22909), + 47: uint16(22905), + 48: uint16(22914), + 49: uint16(22913), + 50: uint16(23383), + 51: uint16(23384), + 52: uint16(23431), + 53: uint16(23432), + 54: uint16(23429), + 55: uint16(23433), + 56: uint16(23546), + 57: uint16(23574), + 58: uint16(23673), + 59: uint16(24030), + 60: uint16(24070), + 61: uint16(24182), + 62: uint16(24180), + 63: uint16(24335), + 64: uint16(24347), + 65: uint16(24537), + 66: uint16(24534), + 67: uint16(25102), + 68: uint16(25100), + 69: uint16(25101), + 70: uint16(25104), + 71: uint16(25187), + 72: uint16(25179), + 73: uint16(25176), + 74: uint16(25910), + 75: uint16(26089), + 76: uint16(26088), + 77: uint16(26092), + 78: uint16(26093), + 79: uint16(26354), + 80: uint16(26355), + 81: uint16(26377), + 82: uint16(26429), + 83: uint16(26420), + 84: uint16(26417), + 85: uint16(26421), + 86: uint16(27425), + 87: uint16(27492), + 88: uint16(27515), + 89: uint16(27670), + 90: uint16(27741), + 91: uint16(27735), + 92: uint16(27737), + 93: uint16(27743), + 94: uint16(27744), + 95: uint16(27728), + 96: uint16(27733), + 97: uint16(27745), + 98: uint16(27739), + 99: uint16(27725), + 100: uint16(27726), + 101: uint16(28784), + 102: uint16(29279), + 103: uint16(29277), + 104: uint16(30334), + 105: uint16(31481), + 106: uint16(31859), + 107: uint16(31992), + 108: uint16(32566), + 109: uint16(32650), + 110: uint16(32701), + 111: uint16(32769), + 112: uint16(32771), + 113: uint16(32780), + 114: uint16(32786), + 115: uint16(32819), + 116: uint16(32895), + 117: uint16(32905), + 118: uint16(32907), + 119: uint16(32908), + 120: uint16(33251), + 121: uint16(33258), + 122: uint16(33267), + 123: uint16(33276), + 124: uint16(33292), + 125: uint16(33307), + 126: uint16(33311), + 127: uint16(33390), + 128: uint16(33394), + 129: uint16(33406), + 130: uint16(34411), + 131: uint16(34880), + 132: uint16(34892), + 133: uint16(34915), + 134: uint16(35199), + 135: uint16(38433), + 136: uint16(20018), + 137: uint16(20136), + 138: uint16(20301), + 139: uint16(20303), + 140: uint16(20295), + 141: uint16(20311), + 142: uint16(20318), + 143: uint16(20276), + 144: uint16(20315), + 145: uint16(20309), + 146: uint16(20272), + 147: uint16(20304), + 148: uint16(20305), + 149: uint16(20285), + 150: uint16(20282), + 151: uint16(20280), + 152: uint16(20291), + 153: uint16(20308), + 154: uint16(20284), + 155: uint16(20294), + 156: uint16(20323), + }, + 6: { + 0: uint16(20316), + 1: uint16(20320), + 2: uint16(20271), + 3: uint16(20302), + 4: uint16(20278), + 5: uint16(20313), + 6: uint16(20317), + 7: uint16(20296), + 8: uint16(20314), + 9: uint16(20812), + 10: uint16(20811), + 11: uint16(20813), + 12: uint16(20853), + 13: uint16(20918), + 14: uint16(20919), + 15: uint16(21029), + 16: uint16(21028), + 17: uint16(21033), + 18: uint16(21034), + 19: uint16(21032), + 20: uint16(21163), + 21: uint16(21161), + 22: uint16(21162), + 23: uint16(21164), + 24: uint16(21283), + 25: uint16(21363), + 26: uint16(21365), + 27: uint16(21533), + 28: uint16(21549), + 29: uint16(21534), + 30: uint16(21566), + 31: uint16(21542), + 32: uint16(21582), + 33: uint16(21543), + 34: uint16(21574), + 35: uint16(21571), + 36: uint16(21555), + 37: uint16(21576), + 38: uint16(21570), + 39: uint16(21531), + 40: uint16(21545), + 41: uint16(21578), + 42: uint16(21561), + 43: uint16(21563), + 44: uint16(21560), + 45: uint16(21550), + 46: uint16(21557), + 47: uint16(21558), + 48: uint16(21536), + 49: uint16(21564), + 50: uint16(21568), + 51: uint16(21553), + 52: uint16(21547), + 53: uint16(21535), + 54: uint16(21548), + 55: uint16(22250), + 56: uint16(22256), + 57: uint16(22244), + 58: uint16(22251), + 59: uint16(22346), + 60: uint16(22353), + 61: uint16(22336), + 62: uint16(22349), + 63: uint16(22343), + 64: uint16(22350), + 65: uint16(22334), + 66: uint16(22352), + 67: uint16(22351), + 68: uint16(22331), + 69: uint16(22767), + 70: uint16(22846), + 71: uint16(22941), + 72: uint16(22930), + 73: uint16(22952), + 74: uint16(22942), + 75: uint16(22947), + 76: uint16(22937), + 77: uint16(22934), + 78: uint16(22925), + 79: uint16(22948), + 80: uint16(22931), + 81: uint16(22922), + 82: uint16(22949), + 83: uint16(23389), + 84: uint16(23388), + 85: uint16(23386), + 86: uint16(23387), + 87: uint16(23436), + 88: uint16(23435), + 89: uint16(23439), + 90: uint16(23596), + 91: uint16(23616), + 92: uint16(23617), + 93: uint16(23615), + 94: uint16(23614), + 95: uint16(23696), + 96: uint16(23697), + 97: uint16(23700), + 98: uint16(23692), + 99: uint16(24043), + 100: uint16(24076), + 101: uint16(24207), + 102: uint16(24199), + 103: uint16(24202), + 104: uint16(24311), + 105: uint16(24324), + 106: uint16(24351), + 107: uint16(24420), + 108: uint16(24418), + 109: uint16(24439), + 110: uint16(24441), + 111: uint16(24536), + 112: uint16(24524), + 113: uint16(24535), + 114: uint16(24525), + 115: uint16(24561), + 116: uint16(24555), + 117: uint16(24568), + 118: uint16(24554), + 119: uint16(25106), + 120: uint16(25105), + 121: uint16(25220), + 122: uint16(25239), + 123: uint16(25238), + 124: uint16(25216), + 125: uint16(25206), + 126: uint16(25225), + 127: uint16(25197), + 128: uint16(25226), + 129: uint16(25212), + 130: uint16(25214), + 131: uint16(25209), + 132: uint16(25203), + 133: uint16(25234), + 134: uint16(25199), + 135: uint16(25240), + 136: uint16(25198), + 137: uint16(25237), + 138: uint16(25235), + 139: uint16(25233), + 140: uint16(25222), + 141: uint16(25913), + 142: uint16(25915), + 143: uint16(25912), + 144: uint16(26097), + 145: uint16(26356), + 146: uint16(26463), + 147: uint16(26446), + 148: uint16(26447), + 149: uint16(26448), + 150: uint16(26449), + 151: uint16(26460), + 152: uint16(26454), + 153: uint16(26462), + 154: uint16(26441), + 155: uint16(26438), + 156: uint16(26464), + }, + 7: { + 0: uint16(26451), + 1: uint16(26455), + 2: uint16(27493), + 3: uint16(27599), + 4: uint16(27714), + 5: uint16(27742), + 6: uint16(27801), + 7: uint16(27777), + 8: uint16(27784), + 9: uint16(27785), + 10: uint16(27781), + 11: uint16(27803), + 12: uint16(27754), + 13: uint16(27770), + 14: uint16(27792), + 15: uint16(27760), + 16: uint16(27788), + 17: uint16(27752), + 18: uint16(27798), + 19: uint16(27794), + 20: uint16(27773), + 21: uint16(27779), + 22: uint16(27762), + 23: uint16(27774), + 24: uint16(27764), + 25: uint16(27782), + 26: uint16(27766), + 27: uint16(27789), + 28: uint16(27796), + 29: uint16(27800), + 30: uint16(27778), + 31: uint16(28790), + 32: uint16(28796), + 33: uint16(28797), + 34: uint16(28792), + 35: uint16(29282), + 36: uint16(29281), + 37: uint16(29280), + 38: uint16(29380), + 39: uint16(29378), + 40: uint16(29590), + 41: uint16(29996), + 42: uint16(29995), + 43: uint16(30007), + 44: uint16(30008), + 45: uint16(30338), + 46: uint16(30447), + 47: uint16(30691), + 48: uint16(31169), + 49: uint16(31168), + 50: uint16(31167), + 51: uint16(31350), + 52: uint16(31995), + 53: uint16(32597), + 54: uint16(32918), + 55: uint16(32915), + 56: uint16(32925), + 57: uint16(32920), + 58: uint16(32923), + 59: uint16(32922), + 60: uint16(32946), + 61: uint16(33391), + 62: uint16(33426), + 63: uint16(33419), + 64: uint16(33421), + 65: uint16(35211), + 66: uint16(35282), + 67: uint16(35328), + 68: uint16(35895), + 69: uint16(35910), + 70: uint16(35925), + 71: uint16(35997), + 72: uint16(36196), + 73: uint16(36208), + 74: uint16(36275), + 75: uint16(36523), + 76: uint16(36554), + 77: uint16(36763), + 78: uint16(36784), + 79: uint16(36802), + 80: uint16(36806), + 81: uint16(36805), + 82: uint16(36804), + 83: uint16(24033), + 84: uint16(37009), + 85: uint16(37026), + 86: uint16(37034), + 87: uint16(37030), + 88: uint16(37027), + 89: uint16(37193), + 90: uint16(37318), + 91: uint16(37324), + 92: uint16(38450), + 93: uint16(38446), + 94: uint16(38449), + 95: uint16(38442), + 96: uint16(38444), + 97: uint16(20006), + 98: uint16(20054), + 99: uint16(20083), + 100: uint16(20107), + 101: uint16(20123), + 102: uint16(20126), + 103: uint16(20139), + 104: uint16(20140), + 105: uint16(20335), + 106: uint16(20381), + 107: uint16(20365), + 108: uint16(20339), + 109: uint16(20351), + 110: uint16(20332), + 111: uint16(20379), + 112: uint16(20363), + 113: uint16(20358), + 114: uint16(20355), + 115: uint16(20336), + 116: uint16(20341), + 117: uint16(20360), + 118: uint16(20329), + 119: uint16(20347), + 120: uint16(20374), + 121: uint16(20350), + 122: uint16(20367), + 123: uint16(20369), + 124: uint16(20346), + 125: uint16(20820), + 126: uint16(20818), + 127: uint16(20821), + 128: uint16(20841), + 129: uint16(20855), + 130: uint16(20854), + 131: uint16(20856), + 132: uint16(20925), + 133: uint16(20989), + 134: uint16(21051), + 135: uint16(21048), + 136: uint16(21047), + 137: uint16(21050), + 138: uint16(21040), + 139: uint16(21038), + 140: uint16(21046), + 141: uint16(21057), + 142: uint16(21182), + 143: uint16(21179), + 144: uint16(21330), + 145: uint16(21332), + 146: uint16(21331), + 147: uint16(21329), + 148: uint16(21350), + 149: uint16(21367), + 150: uint16(21368), + 151: uint16(21369), + 152: uint16(21462), + 153: uint16(21460), + 154: uint16(21463), + 155: uint16(21619), + 156: uint16(21621), + }, + 8: { + 0: uint16(21654), + 1: uint16(21624), + 2: uint16(21653), + 3: uint16(21632), + 4: uint16(21627), + 5: uint16(21623), + 6: uint16(21636), + 7: uint16(21650), + 8: uint16(21638), + 9: uint16(21628), + 10: uint16(21648), + 11: uint16(21617), + 12: uint16(21622), + 13: uint16(21644), + 14: uint16(21658), + 15: uint16(21602), + 16: uint16(21608), + 17: uint16(21643), + 18: uint16(21629), + 19: uint16(21646), + 20: uint16(22266), + 21: uint16(22403), + 22: uint16(22391), + 23: uint16(22378), + 24: uint16(22377), + 25: uint16(22369), + 26: uint16(22374), + 27: uint16(22372), + 28: uint16(22396), + 29: uint16(22812), + 30: uint16(22857), + 31: uint16(22855), + 32: uint16(22856), + 33: uint16(22852), + 34: uint16(22868), + 35: uint16(22974), + 36: uint16(22971), + 37: uint16(22996), + 38: uint16(22969), + 39: uint16(22958), + 40: uint16(22993), + 41: uint16(22982), + 42: uint16(22992), + 43: uint16(22989), + 44: uint16(22987), + 45: uint16(22995), + 46: uint16(22986), + 47: uint16(22959), + 48: uint16(22963), + 49: uint16(22994), + 50: uint16(22981), + 51: uint16(23391), + 52: uint16(23396), + 53: uint16(23395), + 54: uint16(23447), + 55: uint16(23450), + 56: uint16(23448), + 57: uint16(23452), + 58: uint16(23449), + 59: uint16(23451), + 60: uint16(23578), + 61: uint16(23624), + 62: uint16(23621), + 63: uint16(23622), + 64: uint16(23735), + 65: uint16(23713), + 66: uint16(23736), + 67: uint16(23721), + 68: uint16(23723), + 69: uint16(23729), + 70: uint16(23731), + 71: uint16(24088), + 72: uint16(24090), + 73: uint16(24086), + 74: uint16(24085), + 75: uint16(24091), + 76: uint16(24081), + 77: uint16(24184), + 78: uint16(24218), + 79: uint16(24215), + 80: uint16(24220), + 81: uint16(24213), + 82: uint16(24214), + 83: uint16(24310), + 84: uint16(24358), + 85: uint16(24359), + 86: uint16(24361), + 87: uint16(24448), + 88: uint16(24449), + 89: uint16(24447), + 90: uint16(24444), + 91: uint16(24541), + 92: uint16(24544), + 93: uint16(24573), + 94: uint16(24565), + 95: uint16(24575), + 96: uint16(24591), + 97: uint16(24596), + 98: uint16(24623), + 99: uint16(24629), + 100: uint16(24598), + 101: uint16(24618), + 102: uint16(24597), + 103: uint16(24609), + 104: uint16(24615), + 105: uint16(24617), + 106: uint16(24619), + 107: uint16(24603), + 108: uint16(25110), + 109: uint16(25109), + 110: uint16(25151), + 111: uint16(25150), + 112: uint16(25152), + 113: uint16(25215), + 114: uint16(25289), + 115: uint16(25292), + 116: uint16(25284), + 117: uint16(25279), + 118: uint16(25282), + 119: uint16(25273), + 120: uint16(25298), + 121: uint16(25307), + 122: uint16(25259), + 123: uint16(25299), + 124: uint16(25300), + 125: uint16(25291), + 126: uint16(25288), + 127: uint16(25256), + 128: uint16(25277), + 129: uint16(25276), + 130: uint16(25296), + 131: uint16(25305), + 132: uint16(25287), + 133: uint16(25293), + 134: uint16(25269), + 135: uint16(25306), + 136: uint16(25265), + 137: uint16(25304), + 138: uint16(25302), + 139: uint16(25303), + 140: uint16(25286), + 141: uint16(25260), + 142: uint16(25294), + 143: uint16(25918), + 144: uint16(26023), + 145: uint16(26044), + 146: uint16(26106), + 147: uint16(26132), + 148: uint16(26131), + 149: uint16(26124), + 150: uint16(26118), + 151: uint16(26114), + 152: uint16(26126), + 153: uint16(26112), + 154: uint16(26127), + 155: uint16(26133), + 156: uint16(26122), + }, + 9: { + 0: uint16(26119), + 1: uint16(26381), + 2: uint16(26379), + 3: uint16(26477), + 4: uint16(26507), + 5: uint16(26517), + 6: uint16(26481), + 7: uint16(26524), + 8: uint16(26483), + 9: uint16(26487), + 10: uint16(26503), + 11: uint16(26525), + 12: uint16(26519), + 13: uint16(26479), + 14: uint16(26480), + 15: uint16(26495), + 16: uint16(26505), + 17: uint16(26494), + 18: uint16(26512), + 19: uint16(26485), + 20: uint16(26522), + 21: uint16(26515), + 22: uint16(26492), + 23: uint16(26474), + 24: uint16(26482), + 25: uint16(27427), + 26: uint16(27494), + 27: uint16(27495), + 28: uint16(27519), + 29: uint16(27667), + 30: uint16(27675), + 31: uint16(27875), + 32: uint16(27880), + 33: uint16(27891), + 34: uint16(27825), + 35: uint16(27852), + 36: uint16(27877), + 37: uint16(27827), + 38: uint16(27837), + 39: uint16(27838), + 40: uint16(27836), + 41: uint16(27874), + 42: uint16(27819), + 43: uint16(27861), + 44: uint16(27859), + 45: uint16(27832), + 46: uint16(27844), + 47: uint16(27833), + 48: uint16(27841), + 49: uint16(27822), + 50: uint16(27863), + 51: uint16(27845), + 52: uint16(27889), + 53: uint16(27839), + 54: uint16(27835), + 55: uint16(27873), + 56: uint16(27867), + 57: uint16(27850), + 58: uint16(27820), + 59: uint16(27887), + 60: uint16(27868), + 61: uint16(27862), + 62: uint16(27872), + 63: uint16(28821), + 64: uint16(28814), + 65: uint16(28818), + 66: uint16(28810), + 67: uint16(28825), + 68: uint16(29228), + 69: uint16(29229), + 70: uint16(29240), + 71: uint16(29256), + 72: uint16(29287), + 73: uint16(29289), + 74: uint16(29376), + 75: uint16(29390), + 76: uint16(29401), + 77: uint16(29399), + 78: uint16(29392), + 79: uint16(29609), + 80: uint16(29608), + 81: uint16(29599), + 82: uint16(29611), + 83: uint16(29605), + 84: uint16(30013), + 85: uint16(30109), + 86: uint16(30105), + 87: uint16(30106), + 88: uint16(30340), + 89: uint16(30402), + 90: uint16(30450), + 91: uint16(30452), + 92: uint16(30693), + 93: uint16(30717), + 94: uint16(31038), + 95: uint16(31040), + 96: uint16(31041), + 97: uint16(31177), + 98: uint16(31176), + 99: uint16(31354), + 100: uint16(31353), + 101: uint16(31482), + 102: uint16(31998), + 103: uint16(32596), + 104: uint16(32652), + 105: uint16(32651), + 106: uint16(32773), + 107: uint16(32954), + 108: uint16(32933), + 109: uint16(32930), + 110: uint16(32945), + 111: uint16(32929), + 112: uint16(32939), + 113: uint16(32937), + 114: uint16(32948), + 115: uint16(32938), + 116: uint16(32943), + 117: uint16(33253), + 118: uint16(33278), + 119: uint16(33293), + 120: uint16(33459), + 121: uint16(33437), + 122: uint16(33433), + 123: uint16(33453), + 124: uint16(33469), + 125: uint16(33439), + 126: uint16(33465), + 127: uint16(33457), + 128: uint16(33452), + 129: uint16(33445), + 130: uint16(33455), + 131: uint16(33464), + 132: uint16(33443), + 133: uint16(33456), + 134: uint16(33470), + 135: uint16(33463), + 136: uint16(34382), + 137: uint16(34417), + 138: uint16(21021), + 139: uint16(34920), + 140: uint16(36555), + 141: uint16(36814), + 142: uint16(36820), + 143: uint16(36817), + 144: uint16(37045), + 145: uint16(37048), + 146: uint16(37041), + 147: uint16(37046), + 148: uint16(37319), + 149: uint16(37329), + 150: uint16(38263), + 151: uint16(38272), + 152: uint16(38428), + 153: uint16(38464), + 154: uint16(38463), + 155: uint16(38459), + 156: uint16(38468), + }, + 10: { + 0: uint16(38466), + 1: uint16(38585), + 2: uint16(38632), + 3: uint16(38738), + 4: uint16(38750), + 5: uint16(20127), + 6: uint16(20141), + 7: uint16(20142), + 8: uint16(20449), + 9: uint16(20405), + 10: uint16(20399), + 11: uint16(20415), + 12: uint16(20448), + 13: uint16(20433), + 14: uint16(20431), + 15: uint16(20445), + 16: uint16(20419), + 17: uint16(20406), + 18: uint16(20440), + 19: uint16(20447), + 20: uint16(20426), + 21: uint16(20439), + 22: uint16(20398), + 23: uint16(20432), + 24: uint16(20420), + 25: uint16(20418), + 26: uint16(20442), + 27: uint16(20430), + 28: uint16(20446), + 29: uint16(20407), + 30: uint16(20823), + 31: uint16(20882), + 32: uint16(20881), + 33: uint16(20896), + 34: uint16(21070), + 35: uint16(21059), + 36: uint16(21066), + 37: uint16(21069), + 38: uint16(21068), + 39: uint16(21067), + 40: uint16(21063), + 41: uint16(21191), + 42: uint16(21193), + 43: uint16(21187), + 44: uint16(21185), + 45: uint16(21261), + 46: uint16(21335), + 47: uint16(21371), + 48: uint16(21402), + 49: uint16(21467), + 50: uint16(21676), + 51: uint16(21696), + 52: uint16(21672), + 53: uint16(21710), + 54: uint16(21705), + 55: uint16(21688), + 56: uint16(21670), + 57: uint16(21683), + 58: uint16(21703), + 59: uint16(21698), + 60: uint16(21693), + 61: uint16(21674), + 62: uint16(21697), + 63: uint16(21700), + 64: uint16(21704), + 65: uint16(21679), + 66: uint16(21675), + 67: uint16(21681), + 68: uint16(21691), + 69: uint16(21673), + 70: uint16(21671), + 71: uint16(21695), + 72: uint16(22271), + 73: uint16(22402), + 74: uint16(22411), + 75: uint16(22432), + 76: uint16(22435), + 77: uint16(22434), + 78: uint16(22478), + 79: uint16(22446), + 80: uint16(22419), + 81: uint16(22869), + 82: uint16(22865), + 83: uint16(22863), + 84: uint16(22862), + 85: uint16(22864), + 86: uint16(23004), + 87: uint16(23000), + 88: uint16(23039), + 89: uint16(23011), + 90: uint16(23016), + 91: uint16(23043), + 92: uint16(23013), + 93: uint16(23018), + 94: uint16(23002), + 95: uint16(23014), + 96: uint16(23041), + 97: uint16(23035), + 98: uint16(23401), + 99: uint16(23459), + 100: uint16(23462), + 101: uint16(23460), + 102: uint16(23458), + 103: uint16(23461), + 104: uint16(23553), + 105: uint16(23630), + 106: uint16(23631), + 107: uint16(23629), + 108: uint16(23627), + 109: uint16(23769), + 110: uint16(23762), + 111: uint16(24055), + 112: uint16(24093), + 113: uint16(24101), + 114: uint16(24095), + 115: uint16(24189), + 116: uint16(24224), + 117: uint16(24230), + 118: uint16(24314), + 119: uint16(24328), + 120: uint16(24365), + 121: uint16(24421), + 122: uint16(24456), + 123: uint16(24453), + 124: uint16(24458), + 125: uint16(24459), + 126: uint16(24455), + 127: uint16(24460), + 128: uint16(24457), + 129: uint16(24594), + 130: uint16(24605), + 131: uint16(24608), + 132: uint16(24613), + 133: uint16(24590), + 134: uint16(24616), + 135: uint16(24653), + 136: uint16(24688), + 137: uint16(24680), + 138: uint16(24674), + 139: uint16(24646), + 140: uint16(24643), + 141: uint16(24684), + 142: uint16(24683), + 143: uint16(24682), + 144: uint16(24676), + 145: uint16(25153), + 146: uint16(25308), + 147: uint16(25366), + 148: uint16(25353), + 149: uint16(25340), + 150: uint16(25325), + 151: uint16(25345), + 152: uint16(25326), + 153: uint16(25341), + 154: uint16(25351), + 155: uint16(25329), + 156: uint16(25335), + }, + 11: { + 0: uint16(25327), + 1: uint16(25324), + 2: uint16(25342), + 3: uint16(25332), + 4: uint16(25361), + 5: uint16(25346), + 6: uint16(25919), + 7: uint16(25925), + 8: uint16(26027), + 9: uint16(26045), + 10: uint16(26082), + 11: uint16(26149), + 12: uint16(26157), + 13: uint16(26144), + 14: uint16(26151), + 15: uint16(26159), + 16: uint16(26143), + 17: uint16(26152), + 18: uint16(26161), + 19: uint16(26148), + 20: uint16(26359), + 21: uint16(26623), + 22: uint16(26579), + 23: uint16(26609), + 24: uint16(26580), + 25: uint16(26576), + 26: uint16(26604), + 27: uint16(26550), + 28: uint16(26543), + 29: uint16(26613), + 30: uint16(26601), + 31: uint16(26607), + 32: uint16(26564), + 33: uint16(26577), + 34: uint16(26548), + 35: uint16(26586), + 36: uint16(26597), + 37: uint16(26552), + 38: uint16(26575), + 39: uint16(26590), + 40: uint16(26611), + 41: uint16(26544), + 42: uint16(26585), + 43: uint16(26594), + 44: uint16(26589), + 45: uint16(26578), + 46: uint16(27498), + 47: uint16(27523), + 48: uint16(27526), + 49: uint16(27573), + 50: uint16(27602), + 51: uint16(27607), + 52: uint16(27679), + 53: uint16(27849), + 54: uint16(27915), + 55: uint16(27954), + 56: uint16(27946), + 57: uint16(27969), + 58: uint16(27941), + 59: uint16(27916), + 60: uint16(27953), + 61: uint16(27934), + 62: uint16(27927), + 63: uint16(27963), + 64: uint16(27965), + 65: uint16(27966), + 66: uint16(27958), + 67: uint16(27931), + 68: uint16(27893), + 69: uint16(27961), + 70: uint16(27943), + 71: uint16(27960), + 72: uint16(27945), + 73: uint16(27950), + 74: uint16(27957), + 75: uint16(27918), + 76: uint16(27947), + 77: uint16(28843), + 78: uint16(28858), + 79: uint16(28851), + 80: uint16(28844), + 81: uint16(28847), + 82: uint16(28845), + 83: uint16(28856), + 84: uint16(28846), + 85: uint16(28836), + 86: uint16(29232), + 87: uint16(29298), + 88: uint16(29295), + 89: uint16(29300), + 90: uint16(29417), + 91: uint16(29408), + 92: uint16(29409), + 93: uint16(29623), + 94: uint16(29642), + 95: uint16(29627), + 96: uint16(29618), + 97: uint16(29645), + 98: uint16(29632), + 99: uint16(29619), + 100: uint16(29978), + 101: uint16(29997), + 102: uint16(30031), + 103: uint16(30028), + 104: uint16(30030), + 105: uint16(30027), + 106: uint16(30123), + 107: uint16(30116), + 108: uint16(30117), + 109: uint16(30114), + 110: uint16(30115), + 111: uint16(30328), + 112: uint16(30342), + 113: uint16(30343), + 114: uint16(30344), + 115: uint16(30408), + 116: uint16(30406), + 117: uint16(30403), + 118: uint16(30405), + 119: uint16(30465), + 120: uint16(30457), + 121: uint16(30456), + 122: uint16(30473), + 123: uint16(30475), + 124: uint16(30462), + 125: uint16(30460), + 126: uint16(30471), + 127: uint16(30684), + 128: uint16(30722), + 129: uint16(30740), + 130: uint16(30732), + 131: uint16(30733), + 132: uint16(31046), + 133: uint16(31049), + 134: uint16(31048), + 135: uint16(31047), + 136: uint16(31161), + 137: uint16(31162), + 138: uint16(31185), + 139: uint16(31186), + 140: uint16(31179), + 141: uint16(31359), + 142: uint16(31361), + 143: uint16(31487), + 144: uint16(31485), + 145: uint16(31869), + 146: uint16(32002), + 147: uint16(32005), + 148: uint16(32000), + 149: uint16(32009), + 150: uint16(32007), + 151: uint16(32004), + 152: uint16(32006), + 153: uint16(32568), + 154: uint16(32654), + 155: uint16(32703), + 156: uint16(32772), + }, + 12: { + 0: uint16(32784), + 1: uint16(32781), + 2: uint16(32785), + 3: uint16(32822), + 4: uint16(32982), + 5: uint16(32997), + 6: uint16(32986), + 7: uint16(32963), + 8: uint16(32964), + 9: uint16(32972), + 10: uint16(32993), + 11: uint16(32987), + 12: uint16(32974), + 13: uint16(32990), + 14: uint16(32996), + 15: uint16(32989), + 16: uint16(33268), + 17: uint16(33314), + 18: uint16(33511), + 19: uint16(33539), + 20: uint16(33541), + 21: uint16(33507), + 22: uint16(33499), + 23: uint16(33510), + 24: uint16(33540), + 25: uint16(33509), + 26: uint16(33538), + 27: uint16(33545), + 28: uint16(33490), + 29: uint16(33495), + 30: uint16(33521), + 31: uint16(33537), + 32: uint16(33500), + 33: uint16(33492), + 34: uint16(33489), + 35: uint16(33502), + 36: uint16(33491), + 37: uint16(33503), + 38: uint16(33519), + 39: uint16(33542), + 40: uint16(34384), + 41: uint16(34425), + 42: uint16(34427), + 43: uint16(34426), + 44: uint16(34893), + 45: uint16(34923), + 46: uint16(35201), + 47: uint16(35284), + 48: uint16(35336), + 49: uint16(35330), + 50: uint16(35331), + 51: uint16(35998), + 52: uint16(36000), + 53: uint16(36212), + 54: uint16(36211), + 55: uint16(36276), + 56: uint16(36557), + 57: uint16(36556), + 58: uint16(36848), + 59: uint16(36838), + 60: uint16(36834), + 61: uint16(36842), + 62: uint16(36837), + 63: uint16(36845), + 64: uint16(36843), + 65: uint16(36836), + 66: uint16(36840), + 67: uint16(37066), + 68: uint16(37070), + 69: uint16(37057), + 70: uint16(37059), + 71: uint16(37195), + 72: uint16(37194), + 73: uint16(37325), + 74: uint16(38274), + 75: uint16(38480), + 76: uint16(38475), + 77: uint16(38476), + 78: uint16(38477), + 79: uint16(38754), + 80: uint16(38761), + 81: uint16(38859), + 82: uint16(38893), + 83: uint16(38899), + 84: uint16(38913), + 85: uint16(39080), + 86: uint16(39131), + 87: uint16(39135), + 88: uint16(39318), + 89: uint16(39321), + 90: uint16(20056), + 91: uint16(20147), + 92: uint16(20492), + 93: uint16(20493), + 94: uint16(20515), + 95: uint16(20463), + 96: uint16(20518), + 97: uint16(20517), + 98: uint16(20472), + 99: uint16(20521), + 100: uint16(20502), + 101: uint16(20486), + 102: uint16(20540), + 103: uint16(20511), + 104: uint16(20506), + 105: uint16(20498), + 106: uint16(20497), + 107: uint16(20474), + 108: uint16(20480), + 109: uint16(20500), + 110: uint16(20520), + 111: uint16(20465), + 112: uint16(20513), + 113: uint16(20491), + 114: uint16(20505), + 115: uint16(20504), + 116: uint16(20467), + 117: uint16(20462), + 118: uint16(20525), + 119: uint16(20522), + 120: uint16(20478), + 121: uint16(20523), + 122: uint16(20489), + 123: uint16(20860), + 124: uint16(20900), + 125: uint16(20901), + 126: uint16(20898), + 127: uint16(20941), + 128: uint16(20940), + 129: uint16(20934), + 130: uint16(20939), + 131: uint16(21078), + 132: uint16(21084), + 133: uint16(21076), + 134: uint16(21083), + 135: uint16(21085), + 136: uint16(21290), + 137: uint16(21375), + 138: uint16(21407), + 139: uint16(21405), + 140: uint16(21471), + 141: uint16(21736), + 142: uint16(21776), + 143: uint16(21761), + 144: uint16(21815), + 145: uint16(21756), + 146: uint16(21733), + 147: uint16(21746), + 148: uint16(21766), + 149: uint16(21754), + 150: uint16(21780), + 151: uint16(21737), + 152: uint16(21741), + 153: uint16(21729), + 154: uint16(21769), + 155: uint16(21742), + 156: uint16(21738), + }, + 13: { + 0: uint16(21734), + 1: uint16(21799), + 2: uint16(21767), + 3: uint16(21757), + 4: uint16(21775), + 5: uint16(22275), + 6: uint16(22276), + 7: uint16(22466), + 8: uint16(22484), + 9: uint16(22475), + 10: uint16(22467), + 11: uint16(22537), + 12: uint16(22799), + 13: uint16(22871), + 14: uint16(22872), + 15: uint16(22874), + 16: uint16(23057), + 17: uint16(23064), + 18: uint16(23068), + 19: uint16(23071), + 20: uint16(23067), + 21: uint16(23059), + 22: uint16(23020), + 23: uint16(23072), + 24: uint16(23075), + 25: uint16(23081), + 26: uint16(23077), + 27: uint16(23052), + 28: uint16(23049), + 29: uint16(23403), + 30: uint16(23640), + 31: uint16(23472), + 32: uint16(23475), + 33: uint16(23478), + 34: uint16(23476), + 35: uint16(23470), + 36: uint16(23477), + 37: uint16(23481), + 38: uint16(23480), + 39: uint16(23556), + 40: uint16(23633), + 41: uint16(23637), + 42: uint16(23632), + 43: uint16(23789), + 44: uint16(23805), + 45: uint16(23803), + 46: uint16(23786), + 47: uint16(23784), + 48: uint16(23792), + 49: uint16(23798), + 50: uint16(23809), + 51: uint16(23796), + 52: uint16(24046), + 53: uint16(24109), + 54: uint16(24107), + 55: uint16(24235), + 56: uint16(24237), + 57: uint16(24231), + 58: uint16(24369), + 59: uint16(24466), + 60: uint16(24465), + 61: uint16(24464), + 62: uint16(24665), + 63: uint16(24675), + 64: uint16(24677), + 65: uint16(24656), + 66: uint16(24661), + 67: uint16(24685), + 68: uint16(24681), + 69: uint16(24687), + 70: uint16(24708), + 71: uint16(24735), + 72: uint16(24730), + 73: uint16(24717), + 74: uint16(24724), + 75: uint16(24716), + 76: uint16(24709), + 77: uint16(24726), + 78: uint16(25159), + 79: uint16(25331), + 80: uint16(25352), + 81: uint16(25343), + 82: uint16(25422), + 83: uint16(25406), + 84: uint16(25391), + 85: uint16(25429), + 86: uint16(25410), + 87: uint16(25414), + 88: uint16(25423), + 89: uint16(25417), + 90: uint16(25402), + 91: uint16(25424), + 92: uint16(25405), + 93: uint16(25386), + 94: uint16(25387), + 95: uint16(25384), + 96: uint16(25421), + 97: uint16(25420), + 98: uint16(25928), + 99: uint16(25929), + 100: uint16(26009), + 101: uint16(26049), + 102: uint16(26053), + 103: uint16(26178), + 104: uint16(26185), + 105: uint16(26191), + 106: uint16(26179), + 107: uint16(26194), + 108: uint16(26188), + 109: uint16(26181), + 110: uint16(26177), + 111: uint16(26360), + 112: uint16(26388), + 113: uint16(26389), + 114: uint16(26391), + 115: uint16(26657), + 116: uint16(26680), + 117: uint16(26696), + 118: uint16(26694), + 119: uint16(26707), + 120: uint16(26681), + 121: uint16(26690), + 122: uint16(26708), + 123: uint16(26665), + 124: uint16(26803), + 125: uint16(26647), + 126: uint16(26700), + 127: uint16(26705), + 128: uint16(26685), + 129: uint16(26612), + 130: uint16(26704), + 131: uint16(26688), + 132: uint16(26684), + 133: uint16(26691), + 134: uint16(26666), + 135: uint16(26693), + 136: uint16(26643), + 137: uint16(26648), + 138: uint16(26689), + 139: uint16(27530), + 140: uint16(27529), + 141: uint16(27575), + 142: uint16(27683), + 143: uint16(27687), + 144: uint16(27688), + 145: uint16(27686), + 146: uint16(27684), + 147: uint16(27888), + 148: uint16(28010), + 149: uint16(28053), + 150: uint16(28040), + 151: uint16(28039), + 152: uint16(28006), + 153: uint16(28024), + 154: uint16(28023), + 155: uint16(27993), + 156: uint16(28051), + }, + 14: { + 0: uint16(28012), + 1: uint16(28041), + 2: uint16(28014), + 3: uint16(27994), + 4: uint16(28020), + 5: uint16(28009), + 6: uint16(28044), + 7: uint16(28042), + 8: uint16(28025), + 9: uint16(28037), + 10: uint16(28005), + 11: uint16(28052), + 12: uint16(28874), + 13: uint16(28888), + 14: uint16(28900), + 15: uint16(28889), + 16: uint16(28872), + 17: uint16(28879), + 18: uint16(29241), + 19: uint16(29305), + 20: uint16(29436), + 21: uint16(29433), + 22: uint16(29437), + 23: uint16(29432), + 24: uint16(29431), + 25: uint16(29574), + 26: uint16(29677), + 27: uint16(29705), + 28: uint16(29678), + 29: uint16(29664), + 30: uint16(29674), + 31: uint16(29662), + 32: uint16(30036), + 33: uint16(30045), + 34: uint16(30044), + 35: uint16(30042), + 36: uint16(30041), + 37: uint16(30142), + 38: uint16(30149), + 39: uint16(30151), + 40: uint16(30130), + 41: uint16(30131), + 42: uint16(30141), + 43: uint16(30140), + 44: uint16(30137), + 45: uint16(30146), + 46: uint16(30136), + 47: uint16(30347), + 48: uint16(30384), + 49: uint16(30410), + 50: uint16(30413), + 51: uint16(30414), + 52: uint16(30505), + 53: uint16(30495), + 54: uint16(30496), + 55: uint16(30504), + 56: uint16(30697), + 57: uint16(30768), + 58: uint16(30759), + 59: uint16(30776), + 60: uint16(30749), + 61: uint16(30772), + 62: uint16(30775), + 63: uint16(30757), + 64: uint16(30765), + 65: uint16(30752), + 66: uint16(30751), + 67: uint16(30770), + 68: uint16(31061), + 69: uint16(31056), + 70: uint16(31072), + 71: uint16(31071), + 72: uint16(31062), + 73: uint16(31070), + 74: uint16(31069), + 75: uint16(31063), + 76: uint16(31066), + 77: uint16(31204), + 78: uint16(31203), + 79: uint16(31207), + 80: uint16(31199), + 81: uint16(31206), + 82: uint16(31209), + 83: uint16(31192), + 84: uint16(31364), + 85: uint16(31368), + 86: uint16(31449), + 87: uint16(31494), + 88: uint16(31505), + 89: uint16(31881), + 90: uint16(32033), + 91: uint16(32023), + 92: uint16(32011), + 93: uint16(32010), + 94: uint16(32032), + 95: uint16(32034), + 96: uint16(32020), + 97: uint16(32016), + 98: uint16(32021), + 99: uint16(32026), + 100: uint16(32028), + 101: uint16(32013), + 102: uint16(32025), + 103: uint16(32027), + 104: uint16(32570), + 105: uint16(32607), + 106: uint16(32660), + 107: uint16(32709), + 108: uint16(32705), + 109: uint16(32774), + 110: uint16(32792), + 111: uint16(32789), + 112: uint16(32793), + 113: uint16(32791), + 114: uint16(32829), + 115: uint16(32831), + 116: uint16(33009), + 117: uint16(33026), + 118: uint16(33008), + 119: uint16(33029), + 120: uint16(33005), + 121: uint16(33012), + 122: uint16(33030), + 123: uint16(33016), + 124: uint16(33011), + 125: uint16(33032), + 126: uint16(33021), + 127: uint16(33034), + 128: uint16(33020), + 129: uint16(33007), + 130: uint16(33261), + 131: uint16(33260), + 132: uint16(33280), + 133: uint16(33296), + 134: uint16(33322), + 135: uint16(33323), + 136: uint16(33320), + 137: uint16(33324), + 138: uint16(33467), + 139: uint16(33579), + 140: uint16(33618), + 141: uint16(33620), + 142: uint16(33610), + 143: uint16(33592), + 144: uint16(33616), + 145: uint16(33609), + 146: uint16(33589), + 147: uint16(33588), + 148: uint16(33615), + 149: uint16(33586), + 150: uint16(33593), + 151: uint16(33590), + 152: uint16(33559), + 153: uint16(33600), + 154: uint16(33585), + 155: uint16(33576), + 156: uint16(33603), + }, + 15: { + 0: uint16(34388), + 1: uint16(34442), + 2: uint16(34474), + 3: uint16(34451), + 4: uint16(34468), + 5: uint16(34473), + 6: uint16(34444), + 7: uint16(34467), + 8: uint16(34460), + 9: uint16(34928), + 10: uint16(34935), + 11: uint16(34945), + 12: uint16(34946), + 13: uint16(34941), + 14: uint16(34937), + 15: uint16(35352), + 16: uint16(35344), + 17: uint16(35342), + 18: uint16(35340), + 19: uint16(35349), + 20: uint16(35338), + 21: uint16(35351), + 22: uint16(35347), + 23: uint16(35350), + 24: uint16(35343), + 25: uint16(35345), + 26: uint16(35912), + 27: uint16(35962), + 28: uint16(35961), + 29: uint16(36001), + 30: uint16(36002), + 31: uint16(36215), + 32: uint16(36524), + 33: uint16(36562), + 34: uint16(36564), + 35: uint16(36559), + 36: uint16(36785), + 37: uint16(36865), + 38: uint16(36870), + 39: uint16(36855), + 40: uint16(36864), + 41: uint16(36858), + 42: uint16(36852), + 43: uint16(36867), + 44: uint16(36861), + 45: uint16(36869), + 46: uint16(36856), + 47: uint16(37013), + 48: uint16(37089), + 49: uint16(37085), + 50: uint16(37090), + 51: uint16(37202), + 52: uint16(37197), + 53: uint16(37196), + 54: uint16(37336), + 55: uint16(37341), + 56: uint16(37335), + 57: uint16(37340), + 58: uint16(37337), + 59: uint16(38275), + 60: uint16(38498), + 61: uint16(38499), + 62: uint16(38497), + 63: uint16(38491), + 64: uint16(38493), + 65: uint16(38500), + 66: uint16(38488), + 67: uint16(38494), + 68: uint16(38587), + 69: uint16(39138), + 70: uint16(39340), + 71: uint16(39592), + 72: uint16(39640), + 73: uint16(39717), + 74: uint16(39730), + 75: uint16(39740), + 76: uint16(20094), + 77: uint16(20602), + 78: uint16(20605), + 79: uint16(20572), + 80: uint16(20551), + 81: uint16(20547), + 82: uint16(20556), + 83: uint16(20570), + 84: uint16(20553), + 85: uint16(20581), + 86: uint16(20598), + 87: uint16(20558), + 88: uint16(20565), + 89: uint16(20597), + 90: uint16(20596), + 91: uint16(20599), + 92: uint16(20559), + 93: uint16(20495), + 94: uint16(20591), + 95: uint16(20589), + 96: uint16(20828), + 97: uint16(20885), + 98: uint16(20976), + 99: uint16(21098), + 100: uint16(21103), + 101: uint16(21202), + 102: uint16(21209), + 103: uint16(21208), + 104: uint16(21205), + 105: uint16(21264), + 106: uint16(21263), + 107: uint16(21273), + 108: uint16(21311), + 109: uint16(21312), + 110: uint16(21310), + 111: uint16(21443), + 112: uint16(26364), + 113: uint16(21830), + 114: uint16(21866), + 115: uint16(21862), + 116: uint16(21828), + 117: uint16(21854), + 118: uint16(21857), + 119: uint16(21827), + 120: uint16(21834), + 121: uint16(21809), + 122: uint16(21846), + 123: uint16(21839), + 124: uint16(21845), + 125: uint16(21807), + 126: uint16(21860), + 127: uint16(21816), + 128: uint16(21806), + 129: uint16(21852), + 130: uint16(21804), + 131: uint16(21859), + 132: uint16(21811), + 133: uint16(21825), + 134: uint16(21847), + 135: uint16(22280), + 136: uint16(22283), + 137: uint16(22281), + 138: uint16(22495), + 139: uint16(22533), + 140: uint16(22538), + 141: uint16(22534), + 142: uint16(22496), + 143: uint16(22500), + 144: uint16(22522), + 145: uint16(22530), + 146: uint16(22581), + 147: uint16(22519), + 148: uint16(22521), + 149: uint16(22816), + 150: uint16(22882), + 151: uint16(23094), + 152: uint16(23105), + 153: uint16(23113), + 154: uint16(23142), + 155: uint16(23146), + 156: uint16(23104), + }, + 16: { + 0: uint16(23100), + 1: uint16(23138), + 2: uint16(23130), + 3: uint16(23110), + 4: uint16(23114), + 5: uint16(23408), + 6: uint16(23495), + 7: uint16(23493), + 8: uint16(23492), + 9: uint16(23490), + 10: uint16(23487), + 11: uint16(23494), + 12: uint16(23561), + 13: uint16(23560), + 14: uint16(23559), + 15: uint16(23648), + 16: uint16(23644), + 17: uint16(23645), + 18: uint16(23815), + 19: uint16(23814), + 20: uint16(23822), + 21: uint16(23835), + 22: uint16(23830), + 23: uint16(23842), + 24: uint16(23825), + 25: uint16(23849), + 26: uint16(23828), + 27: uint16(23833), + 28: uint16(23844), + 29: uint16(23847), + 30: uint16(23831), + 31: uint16(24034), + 32: uint16(24120), + 33: uint16(24118), + 34: uint16(24115), + 35: uint16(24119), + 36: uint16(24247), + 37: uint16(24248), + 38: uint16(24246), + 39: uint16(24245), + 40: uint16(24254), + 41: uint16(24373), + 42: uint16(24375), + 43: uint16(24407), + 44: uint16(24428), + 45: uint16(24425), + 46: uint16(24427), + 47: uint16(24471), + 48: uint16(24473), + 49: uint16(24478), + 50: uint16(24472), + 51: uint16(24481), + 52: uint16(24480), + 53: uint16(24476), + 54: uint16(24703), + 55: uint16(24739), + 56: uint16(24713), + 57: uint16(24736), + 58: uint16(24744), + 59: uint16(24779), + 60: uint16(24756), + 61: uint16(24806), + 62: uint16(24765), + 63: uint16(24773), + 64: uint16(24763), + 65: uint16(24757), + 66: uint16(24796), + 67: uint16(24764), + 68: uint16(24792), + 69: uint16(24789), + 70: uint16(24774), + 71: uint16(24799), + 72: uint16(24760), + 73: uint16(24794), + 74: uint16(24775), + 75: uint16(25114), + 76: uint16(25115), + 77: uint16(25160), + 78: uint16(25504), + 79: uint16(25511), + 80: uint16(25458), + 81: uint16(25494), + 82: uint16(25506), + 83: uint16(25509), + 84: uint16(25463), + 85: uint16(25447), + 86: uint16(25496), + 87: uint16(25514), + 88: uint16(25457), + 89: uint16(25513), + 90: uint16(25481), + 91: uint16(25475), + 92: uint16(25499), + 93: uint16(25451), + 94: uint16(25512), + 95: uint16(25476), + 96: uint16(25480), + 97: uint16(25497), + 98: uint16(25505), + 99: uint16(25516), + 100: uint16(25490), + 101: uint16(25487), + 102: uint16(25472), + 103: uint16(25467), + 104: uint16(25449), + 105: uint16(25448), + 106: uint16(25466), + 107: uint16(25949), + 108: uint16(25942), + 109: uint16(25937), + 110: uint16(25945), + 111: uint16(25943), + 112: uint16(21855), + 113: uint16(25935), + 114: uint16(25944), + 115: uint16(25941), + 116: uint16(25940), + 117: uint16(26012), + 118: uint16(26011), + 119: uint16(26028), + 120: uint16(26063), + 121: uint16(26059), + 122: uint16(26060), + 123: uint16(26062), + 124: uint16(26205), + 125: uint16(26202), + 126: uint16(26212), + 127: uint16(26216), + 128: uint16(26214), + 129: uint16(26206), + 130: uint16(26361), + 131: uint16(21207), + 132: uint16(26395), + 133: uint16(26753), + 134: uint16(26799), + 135: uint16(26786), + 136: uint16(26771), + 137: uint16(26805), + 138: uint16(26751), + 139: uint16(26742), + 140: uint16(26801), + 141: uint16(26791), + 142: uint16(26775), + 143: uint16(26800), + 144: uint16(26755), + 145: uint16(26820), + 146: uint16(26797), + 147: uint16(26758), + 148: uint16(26757), + 149: uint16(26772), + 150: uint16(26781), + 151: uint16(26792), + 152: uint16(26783), + 153: uint16(26785), + 154: uint16(26754), + 155: uint16(27442), + 156: uint16(27578), + }, + 17: { + 0: uint16(27627), + 1: uint16(27628), + 2: uint16(27691), + 3: uint16(28046), + 4: uint16(28092), + 5: uint16(28147), + 6: uint16(28121), + 7: uint16(28082), + 8: uint16(28129), + 9: uint16(28108), + 10: uint16(28132), + 11: uint16(28155), + 12: uint16(28154), + 13: uint16(28165), + 14: uint16(28103), + 15: uint16(28107), + 16: uint16(28079), + 17: uint16(28113), + 18: uint16(28078), + 19: uint16(28126), + 20: uint16(28153), + 21: uint16(28088), + 22: uint16(28151), + 23: uint16(28149), + 24: uint16(28101), + 25: uint16(28114), + 26: uint16(28186), + 27: uint16(28085), + 28: uint16(28122), + 29: uint16(28139), + 30: uint16(28120), + 31: uint16(28138), + 32: uint16(28145), + 33: uint16(28142), + 34: uint16(28136), + 35: uint16(28102), + 36: uint16(28100), + 37: uint16(28074), + 38: uint16(28140), + 39: uint16(28095), + 40: uint16(28134), + 41: uint16(28921), + 42: uint16(28937), + 43: uint16(28938), + 44: uint16(28925), + 45: uint16(28911), + 46: uint16(29245), + 47: uint16(29309), + 48: uint16(29313), + 49: uint16(29468), + 50: uint16(29467), + 51: uint16(29462), + 52: uint16(29459), + 53: uint16(29465), + 54: uint16(29575), + 55: uint16(29701), + 56: uint16(29706), + 57: uint16(29699), + 58: uint16(29702), + 59: uint16(29694), + 60: uint16(29709), + 61: uint16(29920), + 62: uint16(29942), + 63: uint16(29943), + 64: uint16(29980), + 65: uint16(29986), + 66: uint16(30053), + 67: uint16(30054), + 68: uint16(30050), + 69: uint16(30064), + 70: uint16(30095), + 71: uint16(30164), + 72: uint16(30165), + 73: uint16(30133), + 74: uint16(30154), + 75: uint16(30157), + 76: uint16(30350), + 77: uint16(30420), + 78: uint16(30418), + 79: uint16(30427), + 80: uint16(30519), + 81: uint16(30526), + 82: uint16(30524), + 83: uint16(30518), + 84: uint16(30520), + 85: uint16(30522), + 86: uint16(30827), + 87: uint16(30787), + 88: uint16(30798), + 89: uint16(31077), + 90: uint16(31080), + 91: uint16(31085), + 92: uint16(31227), + 93: uint16(31378), + 94: uint16(31381), + 95: uint16(31520), + 96: uint16(31528), + 97: uint16(31515), + 98: uint16(31532), + 99: uint16(31526), + 100: uint16(31513), + 101: uint16(31518), + 102: uint16(31534), + 103: uint16(31890), + 104: uint16(31895), + 105: uint16(31893), + 106: uint16(32070), + 107: uint16(32067), + 108: uint16(32113), + 109: uint16(32046), + 110: uint16(32057), + 111: uint16(32060), + 112: uint16(32064), + 113: uint16(32048), + 114: uint16(32051), + 115: uint16(32068), + 116: uint16(32047), + 117: uint16(32066), + 118: uint16(32050), + 119: uint16(32049), + 120: uint16(32573), + 121: uint16(32670), + 122: uint16(32666), + 123: uint16(32716), + 124: uint16(32718), + 125: uint16(32722), + 126: uint16(32796), + 127: uint16(32842), + 128: uint16(32838), + 129: uint16(33071), + 130: uint16(33046), + 131: uint16(33059), + 132: uint16(33067), + 133: uint16(33065), + 134: uint16(33072), + 135: uint16(33060), + 136: uint16(33282), + 137: uint16(33333), + 138: uint16(33335), + 139: uint16(33334), + 140: uint16(33337), + 141: uint16(33678), + 142: uint16(33694), + 143: uint16(33688), + 144: uint16(33656), + 145: uint16(33698), + 146: uint16(33686), + 147: uint16(33725), + 148: uint16(33707), + 149: uint16(33682), + 150: uint16(33674), + 151: uint16(33683), + 152: uint16(33673), + 153: uint16(33696), + 154: uint16(33655), + 155: uint16(33659), + 156: uint16(33660), + }, + 18: { + 0: uint16(33670), + 1: uint16(33703), + 2: uint16(34389), + 3: uint16(24426), + 4: uint16(34503), + 5: uint16(34496), + 6: uint16(34486), + 7: uint16(34500), + 8: uint16(34485), + 9: uint16(34502), + 10: uint16(34507), + 11: uint16(34481), + 12: uint16(34479), + 13: uint16(34505), + 14: uint16(34899), + 15: uint16(34974), + 16: uint16(34952), + 17: uint16(34987), + 18: uint16(34962), + 19: uint16(34966), + 20: uint16(34957), + 21: uint16(34955), + 22: uint16(35219), + 23: uint16(35215), + 24: uint16(35370), + 25: uint16(35357), + 26: uint16(35363), + 27: uint16(35365), + 28: uint16(35377), + 29: uint16(35373), + 30: uint16(35359), + 31: uint16(35355), + 32: uint16(35362), + 33: uint16(35913), + 34: uint16(35930), + 35: uint16(36009), + 36: uint16(36012), + 37: uint16(36011), + 38: uint16(36008), + 39: uint16(36010), + 40: uint16(36007), + 41: uint16(36199), + 42: uint16(36198), + 43: uint16(36286), + 44: uint16(36282), + 45: uint16(36571), + 46: uint16(36575), + 47: uint16(36889), + 48: uint16(36877), + 49: uint16(36890), + 50: uint16(36887), + 51: uint16(36899), + 52: uint16(36895), + 53: uint16(36893), + 54: uint16(36880), + 55: uint16(36885), + 56: uint16(36894), + 57: uint16(36896), + 58: uint16(36879), + 59: uint16(36898), + 60: uint16(36886), + 61: uint16(36891), + 62: uint16(36884), + 63: uint16(37096), + 64: uint16(37101), + 65: uint16(37117), + 66: uint16(37207), + 67: uint16(37326), + 68: uint16(37365), + 69: uint16(37350), + 70: uint16(37347), + 71: uint16(37351), + 72: uint16(37357), + 73: uint16(37353), + 74: uint16(38281), + 75: uint16(38506), + 76: uint16(38517), + 77: uint16(38515), + 78: uint16(38520), + 79: uint16(38512), + 80: uint16(38516), + 81: uint16(38518), + 82: uint16(38519), + 83: uint16(38508), + 84: uint16(38592), + 85: uint16(38634), + 86: uint16(38633), + 87: uint16(31456), + 88: uint16(31455), + 89: uint16(38914), + 90: uint16(38915), + 91: uint16(39770), + 92: uint16(40165), + 93: uint16(40565), + 94: uint16(40575), + 95: uint16(40613), + 96: uint16(40635), + 97: uint16(20642), + 98: uint16(20621), + 99: uint16(20613), + 100: uint16(20633), + 101: uint16(20625), + 102: uint16(20608), + 103: uint16(20630), + 104: uint16(20632), + 105: uint16(20634), + 106: uint16(26368), + 107: uint16(20977), + 108: uint16(21106), + 109: uint16(21108), + 110: uint16(21109), + 111: uint16(21097), + 112: uint16(21214), + 113: uint16(21213), + 114: uint16(21211), + 115: uint16(21338), + 116: uint16(21413), + 117: uint16(21883), + 118: uint16(21888), + 119: uint16(21927), + 120: uint16(21884), + 121: uint16(21898), + 122: uint16(21917), + 123: uint16(21912), + 124: uint16(21890), + 125: uint16(21916), + 126: uint16(21930), + 127: uint16(21908), + 128: uint16(21895), + 129: uint16(21899), + 130: uint16(21891), + 131: uint16(21939), + 132: uint16(21934), + 133: uint16(21919), + 134: uint16(21822), + 135: uint16(21938), + 136: uint16(21914), + 137: uint16(21947), + 138: uint16(21932), + 139: uint16(21937), + 140: uint16(21886), + 141: uint16(21897), + 142: uint16(21931), + 143: uint16(21913), + 144: uint16(22285), + 145: uint16(22575), + 146: uint16(22570), + 147: uint16(22580), + 148: uint16(22564), + 149: uint16(22576), + 150: uint16(22577), + 151: uint16(22561), + 152: uint16(22557), + 153: uint16(22560), + 154: uint16(22777), + 155: uint16(22778), + 156: uint16(22880), + }, + 19: { + 0: uint16(23159), + 1: uint16(23194), + 2: uint16(23167), + 3: uint16(23186), + 4: uint16(23195), + 5: uint16(23207), + 6: uint16(23411), + 7: uint16(23409), + 8: uint16(23506), + 9: uint16(23500), + 10: uint16(23507), + 11: uint16(23504), + 12: uint16(23562), + 13: uint16(23563), + 14: uint16(23601), + 15: uint16(23884), + 16: uint16(23888), + 17: uint16(23860), + 18: uint16(23879), + 19: uint16(24061), + 20: uint16(24133), + 21: uint16(24125), + 22: uint16(24128), + 23: uint16(24131), + 24: uint16(24190), + 25: uint16(24266), + 26: uint16(24257), + 27: uint16(24258), + 28: uint16(24260), + 29: uint16(24380), + 30: uint16(24429), + 31: uint16(24489), + 32: uint16(24490), + 33: uint16(24488), + 34: uint16(24785), + 35: uint16(24801), + 36: uint16(24754), + 37: uint16(24758), + 38: uint16(24800), + 39: uint16(24860), + 40: uint16(24867), + 41: uint16(24826), + 42: uint16(24853), + 43: uint16(24816), + 44: uint16(24827), + 45: uint16(24820), + 46: uint16(24936), + 47: uint16(24817), + 48: uint16(24846), + 49: uint16(24822), + 50: uint16(24841), + 51: uint16(24832), + 52: uint16(24850), + 53: uint16(25119), + 54: uint16(25161), + 55: uint16(25507), + 56: uint16(25484), + 57: uint16(25551), + 58: uint16(25536), + 59: uint16(25577), + 60: uint16(25545), + 61: uint16(25542), + 62: uint16(25549), + 63: uint16(25554), + 64: uint16(25571), + 65: uint16(25552), + 66: uint16(25569), + 67: uint16(25558), + 68: uint16(25581), + 69: uint16(25582), + 70: uint16(25462), + 71: uint16(25588), + 72: uint16(25578), + 73: uint16(25563), + 74: uint16(25682), + 75: uint16(25562), + 76: uint16(25593), + 77: uint16(25950), + 78: uint16(25958), + 79: uint16(25954), + 80: uint16(25955), + 81: uint16(26001), + 82: uint16(26000), + 83: uint16(26031), + 84: uint16(26222), + 85: uint16(26224), + 86: uint16(26228), + 87: uint16(26230), + 88: uint16(26223), + 89: uint16(26257), + 90: uint16(26234), + 91: uint16(26238), + 92: uint16(26231), + 93: uint16(26366), + 94: uint16(26367), + 95: uint16(26399), + 96: uint16(26397), + 97: uint16(26874), + 98: uint16(26837), + 99: uint16(26848), + 100: uint16(26840), + 101: uint16(26839), + 102: uint16(26885), + 103: uint16(26847), + 104: uint16(26869), + 105: uint16(26862), + 106: uint16(26855), + 107: uint16(26873), + 108: uint16(26834), + 109: uint16(26866), + 110: uint16(26851), + 111: uint16(26827), + 112: uint16(26829), + 113: uint16(26893), + 114: uint16(26898), + 115: uint16(26894), + 116: uint16(26825), + 117: uint16(26842), + 118: uint16(26990), + 119: uint16(26875), + 120: uint16(27454), + 121: uint16(27450), + 122: uint16(27453), + 123: uint16(27544), + 124: uint16(27542), + 125: uint16(27580), + 126: uint16(27631), + 127: uint16(27694), + 128: uint16(27695), + 129: uint16(27692), + 130: uint16(28207), + 131: uint16(28216), + 132: uint16(28244), + 133: uint16(28193), + 134: uint16(28210), + 135: uint16(28263), + 136: uint16(28234), + 137: uint16(28192), + 138: uint16(28197), + 139: uint16(28195), + 140: uint16(28187), + 141: uint16(28251), + 142: uint16(28248), + 143: uint16(28196), + 144: uint16(28246), + 145: uint16(28270), + 146: uint16(28205), + 147: uint16(28198), + 148: uint16(28271), + 149: uint16(28212), + 150: uint16(28237), + 151: uint16(28218), + 152: uint16(28204), + 153: uint16(28227), + 154: uint16(28189), + 155: uint16(28222), + 156: uint16(28363), + }, + 20: { + 0: uint16(28297), + 1: uint16(28185), + 2: uint16(28238), + 3: uint16(28259), + 4: uint16(28228), + 5: uint16(28274), + 6: uint16(28265), + 7: uint16(28255), + 8: uint16(28953), + 9: uint16(28954), + 10: uint16(28966), + 11: uint16(28976), + 12: uint16(28961), + 13: uint16(28982), + 14: uint16(29038), + 15: uint16(28956), + 16: uint16(29260), + 17: uint16(29316), + 18: uint16(29312), + 19: uint16(29494), + 20: uint16(29477), + 21: uint16(29492), + 22: uint16(29481), + 23: uint16(29754), + 24: uint16(29738), + 25: uint16(29747), + 26: uint16(29730), + 27: uint16(29733), + 28: uint16(29749), + 29: uint16(29750), + 30: uint16(29748), + 31: uint16(29743), + 32: uint16(29723), + 33: uint16(29734), + 34: uint16(29736), + 35: uint16(29989), + 36: uint16(29990), + 37: uint16(30059), + 38: uint16(30058), + 39: uint16(30178), + 40: uint16(30171), + 41: uint16(30179), + 42: uint16(30169), + 43: uint16(30168), + 44: uint16(30174), + 45: uint16(30176), + 46: uint16(30331), + 47: uint16(30332), + 48: uint16(30358), + 49: uint16(30355), + 50: uint16(30388), + 51: uint16(30428), + 52: uint16(30543), + 53: uint16(30701), + 54: uint16(30813), + 55: uint16(30828), + 56: uint16(30831), + 57: uint16(31245), + 58: uint16(31240), + 59: uint16(31243), + 60: uint16(31237), + 61: uint16(31232), + 62: uint16(31384), + 63: uint16(31383), + 64: uint16(31382), + 65: uint16(31461), + 66: uint16(31459), + 67: uint16(31561), + 68: uint16(31574), + 69: uint16(31558), + 70: uint16(31568), + 71: uint16(31570), + 72: uint16(31572), + 73: uint16(31565), + 74: uint16(31563), + 75: uint16(31567), + 76: uint16(31569), + 77: uint16(31903), + 78: uint16(31909), + 79: uint16(32094), + 80: uint16(32080), + 81: uint16(32104), + 82: uint16(32085), + 83: uint16(32043), + 84: uint16(32110), + 85: uint16(32114), + 86: uint16(32097), + 87: uint16(32102), + 88: uint16(32098), + 89: uint16(32112), + 90: uint16(32115), + 91: uint16(21892), + 92: uint16(32724), + 93: uint16(32725), + 94: uint16(32779), + 95: uint16(32850), + 96: uint16(32901), + 97: uint16(33109), + 98: uint16(33108), + 99: uint16(33099), + 100: uint16(33105), + 101: uint16(33102), + 102: uint16(33081), + 103: uint16(33094), + 104: uint16(33086), + 105: uint16(33100), + 106: uint16(33107), + 107: uint16(33140), + 108: uint16(33298), + 109: uint16(33308), + 110: uint16(33769), + 111: uint16(33795), + 112: uint16(33784), + 113: uint16(33805), + 114: uint16(33760), + 115: uint16(33733), + 116: uint16(33803), + 117: uint16(33729), + 118: uint16(33775), + 119: uint16(33777), + 120: uint16(33780), + 121: uint16(33879), + 122: uint16(33802), + 123: uint16(33776), + 124: uint16(33804), + 125: uint16(33740), + 126: uint16(33789), + 127: uint16(33778), + 128: uint16(33738), + 129: uint16(33848), + 130: uint16(33806), + 131: uint16(33796), + 132: uint16(33756), + 133: uint16(33799), + 134: uint16(33748), + 135: uint16(33759), + 136: uint16(34395), + 137: uint16(34527), + 138: uint16(34521), + 139: uint16(34541), + 140: uint16(34516), + 141: uint16(34523), + 142: uint16(34532), + 143: uint16(34512), + 144: uint16(34526), + 145: uint16(34903), + 146: uint16(35009), + 147: uint16(35010), + 148: uint16(34993), + 149: uint16(35203), + 150: uint16(35222), + 151: uint16(35387), + 152: uint16(35424), + 153: uint16(35413), + 154: uint16(35422), + 155: uint16(35388), + 156: uint16(35393), + }, + 21: { + 0: uint16(35412), + 1: uint16(35419), + 2: uint16(35408), + 3: uint16(35398), + 4: uint16(35380), + 5: uint16(35386), + 6: uint16(35382), + 7: uint16(35414), + 8: uint16(35937), + 9: uint16(35970), + 10: uint16(36015), + 11: uint16(36028), + 12: uint16(36019), + 13: uint16(36029), + 14: uint16(36033), + 15: uint16(36027), + 16: uint16(36032), + 17: uint16(36020), + 18: uint16(36023), + 19: uint16(36022), + 20: uint16(36031), + 21: uint16(36024), + 22: uint16(36234), + 23: uint16(36229), + 24: uint16(36225), + 25: uint16(36302), + 26: uint16(36317), + 27: uint16(36299), + 28: uint16(36314), + 29: uint16(36305), + 30: uint16(36300), + 31: uint16(36315), + 32: uint16(36294), + 33: uint16(36603), + 34: uint16(36600), + 35: uint16(36604), + 36: uint16(36764), + 37: uint16(36910), + 38: uint16(36917), + 39: uint16(36913), + 40: uint16(36920), + 41: uint16(36914), + 42: uint16(36918), + 43: uint16(37122), + 44: uint16(37109), + 45: uint16(37129), + 46: uint16(37118), + 47: uint16(37219), + 48: uint16(37221), + 49: uint16(37327), + 50: uint16(37396), + 51: uint16(37397), + 52: uint16(37411), + 53: uint16(37385), + 54: uint16(37406), + 55: uint16(37389), + 56: uint16(37392), + 57: uint16(37383), + 58: uint16(37393), + 59: uint16(38292), + 60: uint16(38287), + 61: uint16(38283), + 62: uint16(38289), + 63: uint16(38291), + 64: uint16(38290), + 65: uint16(38286), + 66: uint16(38538), + 67: uint16(38542), + 68: uint16(38539), + 69: uint16(38525), + 70: uint16(38533), + 71: uint16(38534), + 72: uint16(38541), + 73: uint16(38514), + 74: uint16(38532), + 75: uint16(38593), + 76: uint16(38597), + 77: uint16(38596), + 78: uint16(38598), + 79: uint16(38599), + 80: uint16(38639), + 81: uint16(38642), + 82: uint16(38860), + 83: uint16(38917), + 84: uint16(38918), + 85: uint16(38920), + 86: uint16(39143), + 87: uint16(39146), + 88: uint16(39151), + 89: uint16(39145), + 90: uint16(39154), + 91: uint16(39149), + 92: uint16(39342), + 93: uint16(39341), + 94: uint16(40643), + 95: uint16(40653), + 96: uint16(40657), + 97: uint16(20098), + 98: uint16(20653), + 99: uint16(20661), + 100: uint16(20658), + 101: uint16(20659), + 102: uint16(20677), + 103: uint16(20670), + 104: uint16(20652), + 105: uint16(20663), + 106: uint16(20667), + 107: uint16(20655), + 108: uint16(20679), + 109: uint16(21119), + 110: uint16(21111), + 111: uint16(21117), + 112: uint16(21215), + 113: uint16(21222), + 114: uint16(21220), + 115: uint16(21218), + 116: uint16(21219), + 117: uint16(21295), + 118: uint16(21983), + 119: uint16(21992), + 120: uint16(21971), + 121: uint16(21990), + 122: uint16(21966), + 123: uint16(21980), + 124: uint16(21959), + 125: uint16(21969), + 126: uint16(21987), + 127: uint16(21988), + 128: uint16(21999), + 129: uint16(21978), + 130: uint16(21985), + 131: uint16(21957), + 132: uint16(21958), + 133: uint16(21989), + 134: uint16(21961), + 135: uint16(22290), + 136: uint16(22291), + 137: uint16(22622), + 138: uint16(22609), + 139: uint16(22616), + 140: uint16(22615), + 141: uint16(22618), + 142: uint16(22612), + 143: uint16(22635), + 144: uint16(22604), + 145: uint16(22637), + 146: uint16(22602), + 147: uint16(22626), + 148: uint16(22610), + 149: uint16(22603), + 150: uint16(22887), + 151: uint16(23233), + 152: uint16(23241), + 153: uint16(23244), + 154: uint16(23230), + 155: uint16(23229), + 156: uint16(23228), + }, + 22: { + 0: uint16(23219), + 1: uint16(23234), + 2: uint16(23218), + 3: uint16(23913), + 4: uint16(23919), + 5: uint16(24140), + 6: uint16(24185), + 7: uint16(24265), + 8: uint16(24264), + 9: uint16(24338), + 10: uint16(24409), + 11: uint16(24492), + 12: uint16(24494), + 13: uint16(24858), + 14: uint16(24847), + 15: uint16(24904), + 16: uint16(24863), + 17: uint16(24819), + 18: uint16(24859), + 19: uint16(24825), + 20: uint16(24833), + 21: uint16(24840), + 22: uint16(24910), + 23: uint16(24908), + 24: uint16(24900), + 25: uint16(24909), + 26: uint16(24894), + 27: uint16(24884), + 28: uint16(24871), + 29: uint16(24845), + 30: uint16(24838), + 31: uint16(24887), + 32: uint16(25121), + 33: uint16(25122), + 34: uint16(25619), + 35: uint16(25662), + 36: uint16(25630), + 37: uint16(25642), + 38: uint16(25645), + 39: uint16(25661), + 40: uint16(25644), + 41: uint16(25615), + 42: uint16(25628), + 43: uint16(25620), + 44: uint16(25613), + 45: uint16(25654), + 46: uint16(25622), + 47: uint16(25623), + 48: uint16(25606), + 49: uint16(25964), + 50: uint16(26015), + 51: uint16(26032), + 52: uint16(26263), + 53: uint16(26249), + 54: uint16(26247), + 55: uint16(26248), + 56: uint16(26262), + 57: uint16(26244), + 58: uint16(26264), + 59: uint16(26253), + 60: uint16(26371), + 61: uint16(27028), + 62: uint16(26989), + 63: uint16(26970), + 64: uint16(26999), + 65: uint16(26976), + 66: uint16(26964), + 67: uint16(26997), + 68: uint16(26928), + 69: uint16(27010), + 70: uint16(26954), + 71: uint16(26984), + 72: uint16(26987), + 73: uint16(26974), + 74: uint16(26963), + 75: uint16(27001), + 76: uint16(27014), + 77: uint16(26973), + 78: uint16(26979), + 79: uint16(26971), + 80: uint16(27463), + 81: uint16(27506), + 82: uint16(27584), + 83: uint16(27583), + 84: uint16(27603), + 85: uint16(27645), + 86: uint16(28322), + 87: uint16(28335), + 88: uint16(28371), + 89: uint16(28342), + 90: uint16(28354), + 91: uint16(28304), + 92: uint16(28317), + 93: uint16(28359), + 94: uint16(28357), + 95: uint16(28325), + 96: uint16(28312), + 97: uint16(28348), + 98: uint16(28346), + 99: uint16(28331), + 100: uint16(28369), + 101: uint16(28310), + 102: uint16(28316), + 103: uint16(28356), + 104: uint16(28372), + 105: uint16(28330), + 106: uint16(28327), + 107: uint16(28340), + 108: uint16(29006), + 109: uint16(29017), + 110: uint16(29033), + 111: uint16(29028), + 112: uint16(29001), + 113: uint16(29031), + 114: uint16(29020), + 115: uint16(29036), + 116: uint16(29030), + 117: uint16(29004), + 118: uint16(29029), + 119: uint16(29022), + 120: uint16(28998), + 121: uint16(29032), + 122: uint16(29014), + 123: uint16(29242), + 124: uint16(29266), + 125: uint16(29495), + 126: uint16(29509), + 127: uint16(29503), + 128: uint16(29502), + 129: uint16(29807), + 130: uint16(29786), + 131: uint16(29781), + 132: uint16(29791), + 133: uint16(29790), + 134: uint16(29761), + 135: uint16(29759), + 136: uint16(29785), + 137: uint16(29787), + 138: uint16(29788), + 139: uint16(30070), + 140: uint16(30072), + 141: uint16(30208), + 142: uint16(30192), + 143: uint16(30209), + 144: uint16(30194), + 145: uint16(30193), + 146: uint16(30202), + 147: uint16(30207), + 148: uint16(30196), + 149: uint16(30195), + 150: uint16(30430), + 151: uint16(30431), + 152: uint16(30555), + 153: uint16(30571), + 154: uint16(30566), + 155: uint16(30558), + 156: uint16(30563), + }, + 23: { + 0: uint16(30585), + 1: uint16(30570), + 2: uint16(30572), + 3: uint16(30556), + 4: uint16(30565), + 5: uint16(30568), + 6: uint16(30562), + 7: uint16(30702), + 8: uint16(30862), + 9: uint16(30896), + 10: uint16(30871), + 11: uint16(30872), + 12: uint16(30860), + 13: uint16(30857), + 14: uint16(30844), + 15: uint16(30865), + 16: uint16(30867), + 17: uint16(30847), + 18: uint16(31098), + 19: uint16(31103), + 20: uint16(31105), + 21: uint16(33836), + 22: uint16(31165), + 23: uint16(31260), + 24: uint16(31258), + 25: uint16(31264), + 26: uint16(31252), + 27: uint16(31263), + 28: uint16(31262), + 29: uint16(31391), + 30: uint16(31392), + 31: uint16(31607), + 32: uint16(31680), + 33: uint16(31584), + 34: uint16(31598), + 35: uint16(31591), + 36: uint16(31921), + 37: uint16(31923), + 38: uint16(31925), + 39: uint16(32147), + 40: uint16(32121), + 41: uint16(32145), + 42: uint16(32129), + 43: uint16(32143), + 44: uint16(32091), + 45: uint16(32622), + 46: uint16(32617), + 47: uint16(32618), + 48: uint16(32626), + 49: uint16(32681), + 50: uint16(32680), + 51: uint16(32676), + 52: uint16(32854), + 53: uint16(32856), + 54: uint16(32902), + 55: uint16(32900), + 56: uint16(33137), + 57: uint16(33136), + 58: uint16(33144), + 59: uint16(33125), + 60: uint16(33134), + 61: uint16(33139), + 62: uint16(33131), + 63: uint16(33145), + 64: uint16(33146), + 65: uint16(33126), + 66: uint16(33285), + 67: uint16(33351), + 68: uint16(33922), + 69: uint16(33911), + 70: uint16(33853), + 71: uint16(33841), + 72: uint16(33909), + 73: uint16(33894), + 74: uint16(33899), + 75: uint16(33865), + 76: uint16(33900), + 77: uint16(33883), + 78: uint16(33852), + 79: uint16(33845), + 80: uint16(33889), + 81: uint16(33891), + 82: uint16(33897), + 83: uint16(33901), + 84: uint16(33862), + 85: uint16(34398), + 86: uint16(34396), + 87: uint16(34399), + 88: uint16(34553), + 89: uint16(34579), + 90: uint16(34568), + 91: uint16(34567), + 92: uint16(34560), + 93: uint16(34558), + 94: uint16(34555), + 95: uint16(34562), + 96: uint16(34563), + 97: uint16(34566), + 98: uint16(34570), + 99: uint16(34905), + 100: uint16(35039), + 101: uint16(35028), + 102: uint16(35033), + 103: uint16(35036), + 104: uint16(35032), + 105: uint16(35037), + 106: uint16(35041), + 107: uint16(35018), + 108: uint16(35029), + 109: uint16(35026), + 110: uint16(35228), + 111: uint16(35299), + 112: uint16(35435), + 113: uint16(35442), + 114: uint16(35443), + 115: uint16(35430), + 116: uint16(35433), + 117: uint16(35440), + 118: uint16(35463), + 119: uint16(35452), + 120: uint16(35427), + 121: uint16(35488), + 122: uint16(35441), + 123: uint16(35461), + 124: uint16(35437), + 125: uint16(35426), + 126: uint16(35438), + 127: uint16(35436), + 128: uint16(35449), + 129: uint16(35451), + 130: uint16(35390), + 131: uint16(35432), + 132: uint16(35938), + 133: uint16(35978), + 134: uint16(35977), + 135: uint16(36042), + 136: uint16(36039), + 137: uint16(36040), + 138: uint16(36036), + 139: uint16(36018), + 140: uint16(36035), + 141: uint16(36034), + 142: uint16(36037), + 143: uint16(36321), + 144: uint16(36319), + 145: uint16(36328), + 146: uint16(36335), + 147: uint16(36339), + 148: uint16(36346), + 149: uint16(36330), + 150: uint16(36324), + 151: uint16(36326), + 152: uint16(36530), + 153: uint16(36611), + 154: uint16(36617), + 155: uint16(36606), + 156: uint16(36618), + }, + 24: { + 0: uint16(36767), + 1: uint16(36786), + 2: uint16(36939), + 3: uint16(36938), + 4: uint16(36947), + 5: uint16(36930), + 6: uint16(36948), + 7: uint16(36924), + 8: uint16(36949), + 9: uint16(36944), + 10: uint16(36935), + 11: uint16(36943), + 12: uint16(36942), + 13: uint16(36941), + 14: uint16(36945), + 15: uint16(36926), + 16: uint16(36929), + 17: uint16(37138), + 18: uint16(37143), + 19: uint16(37228), + 20: uint16(37226), + 21: uint16(37225), + 22: uint16(37321), + 23: uint16(37431), + 24: uint16(37463), + 25: uint16(37432), + 26: uint16(37437), + 27: uint16(37440), + 28: uint16(37438), + 29: uint16(37467), + 30: uint16(37451), + 31: uint16(37476), + 32: uint16(37457), + 33: uint16(37428), + 34: uint16(37449), + 35: uint16(37453), + 36: uint16(37445), + 37: uint16(37433), + 38: uint16(37439), + 39: uint16(37466), + 40: uint16(38296), + 41: uint16(38552), + 42: uint16(38548), + 43: uint16(38549), + 44: uint16(38605), + 45: uint16(38603), + 46: uint16(38601), + 47: uint16(38602), + 48: uint16(38647), + 49: uint16(38651), + 50: uint16(38649), + 51: uint16(38646), + 52: uint16(38742), + 53: uint16(38772), + 54: uint16(38774), + 55: uint16(38928), + 56: uint16(38929), + 57: uint16(38931), + 58: uint16(38922), + 59: uint16(38930), + 60: uint16(38924), + 61: uint16(39164), + 62: uint16(39156), + 63: uint16(39165), + 64: uint16(39166), + 65: uint16(39347), + 66: uint16(39345), + 67: uint16(39348), + 68: uint16(39649), + 69: uint16(40169), + 70: uint16(40578), + 71: uint16(40718), + 72: uint16(40723), + 73: uint16(40736), + 74: uint16(20711), + 75: uint16(20718), + 76: uint16(20709), + 77: uint16(20694), + 78: uint16(20717), + 79: uint16(20698), + 80: uint16(20693), + 81: uint16(20687), + 82: uint16(20689), + 83: uint16(20721), + 84: uint16(20686), + 85: uint16(20713), + 86: uint16(20834), + 87: uint16(20979), + 88: uint16(21123), + 89: uint16(21122), + 90: uint16(21297), + 91: uint16(21421), + 92: uint16(22014), + 93: uint16(22016), + 94: uint16(22043), + 95: uint16(22039), + 96: uint16(22013), + 97: uint16(22036), + 98: uint16(22022), + 99: uint16(22025), + 100: uint16(22029), + 101: uint16(22030), + 102: uint16(22007), + 103: uint16(22038), + 104: uint16(22047), + 105: uint16(22024), + 106: uint16(22032), + 107: uint16(22006), + 108: uint16(22296), + 109: uint16(22294), + 110: uint16(22645), + 111: uint16(22654), + 112: uint16(22659), + 113: uint16(22675), + 114: uint16(22666), + 115: uint16(22649), + 116: uint16(22661), + 117: uint16(22653), + 118: uint16(22781), + 119: uint16(22821), + 120: uint16(22818), + 121: uint16(22820), + 122: uint16(22890), + 123: uint16(22889), + 124: uint16(23265), + 125: uint16(23270), + 126: uint16(23273), + 127: uint16(23255), + 128: uint16(23254), + 129: uint16(23256), + 130: uint16(23267), + 131: uint16(23413), + 132: uint16(23518), + 133: uint16(23527), + 134: uint16(23521), + 135: uint16(23525), + 136: uint16(23526), + 137: uint16(23528), + 138: uint16(23522), + 139: uint16(23524), + 140: uint16(23519), + 141: uint16(23565), + 142: uint16(23650), + 143: uint16(23940), + 144: uint16(23943), + 145: uint16(24155), + 146: uint16(24163), + 147: uint16(24149), + 148: uint16(24151), + 149: uint16(24148), + 150: uint16(24275), + 151: uint16(24278), + 152: uint16(24330), + 153: uint16(24390), + 154: uint16(24432), + 155: uint16(24505), + 156: uint16(24903), + }, + 25: { + 0: uint16(24895), + 1: uint16(24907), + 2: uint16(24951), + 3: uint16(24930), + 4: uint16(24931), + 5: uint16(24927), + 6: uint16(24922), + 7: uint16(24920), + 8: uint16(24949), + 9: uint16(25130), + 10: uint16(25735), + 11: uint16(25688), + 12: uint16(25684), + 13: uint16(25764), + 14: uint16(25720), + 15: uint16(25695), + 16: uint16(25722), + 17: uint16(25681), + 18: uint16(25703), + 19: uint16(25652), + 20: uint16(25709), + 21: uint16(25723), + 22: uint16(25970), + 23: uint16(26017), + 24: uint16(26071), + 25: uint16(26070), + 26: uint16(26274), + 27: uint16(26280), + 28: uint16(26269), + 29: uint16(27036), + 30: uint16(27048), + 31: uint16(27029), + 32: uint16(27073), + 33: uint16(27054), + 34: uint16(27091), + 35: uint16(27083), + 36: uint16(27035), + 37: uint16(27063), + 38: uint16(27067), + 39: uint16(27051), + 40: uint16(27060), + 41: uint16(27088), + 42: uint16(27085), + 43: uint16(27053), + 44: uint16(27084), + 45: uint16(27046), + 46: uint16(27075), + 47: uint16(27043), + 48: uint16(27465), + 49: uint16(27468), + 50: uint16(27699), + 51: uint16(28467), + 52: uint16(28436), + 53: uint16(28414), + 54: uint16(28435), + 55: uint16(28404), + 56: uint16(28457), + 57: uint16(28478), + 58: uint16(28448), + 59: uint16(28460), + 60: uint16(28431), + 61: uint16(28418), + 62: uint16(28450), + 63: uint16(28415), + 64: uint16(28399), + 65: uint16(28422), + 66: uint16(28465), + 67: uint16(28472), + 68: uint16(28466), + 69: uint16(28451), + 70: uint16(28437), + 71: uint16(28459), + 72: uint16(28463), + 73: uint16(28552), + 74: uint16(28458), + 75: uint16(28396), + 76: uint16(28417), + 77: uint16(28402), + 78: uint16(28364), + 79: uint16(28407), + 80: uint16(29076), + 81: uint16(29081), + 82: uint16(29053), + 83: uint16(29066), + 84: uint16(29060), + 85: uint16(29074), + 86: uint16(29246), + 87: uint16(29330), + 88: uint16(29334), + 89: uint16(29508), + 90: uint16(29520), + 91: uint16(29796), + 92: uint16(29795), + 93: uint16(29802), + 94: uint16(29808), + 95: uint16(29805), + 96: uint16(29956), + 97: uint16(30097), + 98: uint16(30247), + 99: uint16(30221), + 100: uint16(30219), + 101: uint16(30217), + 102: uint16(30227), + 103: uint16(30433), + 104: uint16(30435), + 105: uint16(30596), + 106: uint16(30589), + 107: uint16(30591), + 108: uint16(30561), + 109: uint16(30913), + 110: uint16(30879), + 111: uint16(30887), + 112: uint16(30899), + 113: uint16(30889), + 114: uint16(30883), + 115: uint16(31118), + 116: uint16(31119), + 117: uint16(31117), + 118: uint16(31278), + 119: uint16(31281), + 120: uint16(31402), + 121: uint16(31401), + 122: uint16(31469), + 123: uint16(31471), + 124: uint16(31649), + 125: uint16(31637), + 126: uint16(31627), + 127: uint16(31605), + 128: uint16(31639), + 129: uint16(31645), + 130: uint16(31636), + 131: uint16(31631), + 132: uint16(31672), + 133: uint16(31623), + 134: uint16(31620), + 135: uint16(31929), + 136: uint16(31933), + 137: uint16(31934), + 138: uint16(32187), + 139: uint16(32176), + 140: uint16(32156), + 141: uint16(32189), + 142: uint16(32190), + 143: uint16(32160), + 144: uint16(32202), + 145: uint16(32180), + 146: uint16(32178), + 147: uint16(32177), + 148: uint16(32186), + 149: uint16(32162), + 150: uint16(32191), + 151: uint16(32181), + 152: uint16(32184), + 153: uint16(32173), + 154: uint16(32210), + 155: uint16(32199), + 156: uint16(32172), + }, + 26: { + 0: uint16(32624), + 1: uint16(32736), + 2: uint16(32737), + 3: uint16(32735), + 4: uint16(32862), + 5: uint16(32858), + 6: uint16(32903), + 7: uint16(33104), + 8: uint16(33152), + 9: uint16(33167), + 10: uint16(33160), + 11: uint16(33162), + 12: uint16(33151), + 13: uint16(33154), + 14: uint16(33255), + 15: uint16(33274), + 16: uint16(33287), + 17: uint16(33300), + 18: uint16(33310), + 19: uint16(33355), + 20: uint16(33993), + 21: uint16(33983), + 22: uint16(33990), + 23: uint16(33988), + 24: uint16(33945), + 25: uint16(33950), + 26: uint16(33970), + 27: uint16(33948), + 28: uint16(33995), + 29: uint16(33976), + 30: uint16(33984), + 31: uint16(34003), + 32: uint16(33936), + 33: uint16(33980), + 34: uint16(34001), + 35: uint16(33994), + 36: uint16(34623), + 37: uint16(34588), + 38: uint16(34619), + 39: uint16(34594), + 40: uint16(34597), + 41: uint16(34612), + 42: uint16(34584), + 43: uint16(34645), + 44: uint16(34615), + 45: uint16(34601), + 46: uint16(35059), + 47: uint16(35074), + 48: uint16(35060), + 49: uint16(35065), + 50: uint16(35064), + 51: uint16(35069), + 52: uint16(35048), + 53: uint16(35098), + 54: uint16(35055), + 55: uint16(35494), + 56: uint16(35468), + 57: uint16(35486), + 58: uint16(35491), + 59: uint16(35469), + 60: uint16(35489), + 61: uint16(35475), + 62: uint16(35492), + 63: uint16(35498), + 64: uint16(35493), + 65: uint16(35496), + 66: uint16(35480), + 67: uint16(35473), + 68: uint16(35482), + 69: uint16(35495), + 70: uint16(35946), + 71: uint16(35981), + 72: uint16(35980), + 73: uint16(36051), + 74: uint16(36049), + 75: uint16(36050), + 76: uint16(36203), + 77: uint16(36249), + 78: uint16(36245), + 79: uint16(36348), + 80: uint16(36628), + 81: uint16(36626), + 82: uint16(36629), + 83: uint16(36627), + 84: uint16(36771), + 85: uint16(36960), + 86: uint16(36952), + 87: uint16(36956), + 88: uint16(36963), + 89: uint16(36953), + 90: uint16(36958), + 91: uint16(36962), + 92: uint16(36957), + 93: uint16(36955), + 94: uint16(37145), + 95: uint16(37144), + 96: uint16(37150), + 97: uint16(37237), + 98: uint16(37240), + 99: uint16(37239), + 100: uint16(37236), + 101: uint16(37496), + 102: uint16(37504), + 103: uint16(37509), + 104: uint16(37528), + 105: uint16(37526), + 106: uint16(37499), + 107: uint16(37523), + 108: uint16(37532), + 109: uint16(37544), + 110: uint16(37500), + 111: uint16(37521), + 112: uint16(38305), + 113: uint16(38312), + 114: uint16(38313), + 115: uint16(38307), + 116: uint16(38309), + 117: uint16(38308), + 118: uint16(38553), + 119: uint16(38556), + 120: uint16(38555), + 121: uint16(38604), + 122: uint16(38610), + 123: uint16(38656), + 124: uint16(38780), + 125: uint16(38789), + 126: uint16(38902), + 127: uint16(38935), + 128: uint16(38936), + 129: uint16(39087), + 130: uint16(39089), + 131: uint16(39171), + 132: uint16(39173), + 133: uint16(39180), + 134: uint16(39177), + 135: uint16(39361), + 136: uint16(39599), + 137: uint16(39600), + 138: uint16(39654), + 139: uint16(39745), + 140: uint16(39746), + 141: uint16(40180), + 142: uint16(40182), + 143: uint16(40179), + 144: uint16(40636), + 145: uint16(40763), + 146: uint16(40778), + 147: uint16(20740), + 148: uint16(20736), + 149: uint16(20731), + 150: uint16(20725), + 151: uint16(20729), + 152: uint16(20738), + 153: uint16(20744), + 154: uint16(20745), + 155: uint16(20741), + 156: uint16(20956), + }, + 27: { + 0: uint16(21127), + 1: uint16(21128), + 2: uint16(21129), + 3: uint16(21133), + 4: uint16(21130), + 5: uint16(21232), + 6: uint16(21426), + 7: uint16(22062), + 8: uint16(22075), + 9: uint16(22073), + 10: uint16(22066), + 11: uint16(22079), + 12: uint16(22068), + 13: uint16(22057), + 14: uint16(22099), + 15: uint16(22094), + 16: uint16(22103), + 17: uint16(22132), + 18: uint16(22070), + 19: uint16(22063), + 20: uint16(22064), + 21: uint16(22656), + 22: uint16(22687), + 23: uint16(22686), + 24: uint16(22707), + 25: uint16(22684), + 26: uint16(22702), + 27: uint16(22697), + 28: uint16(22694), + 29: uint16(22893), + 30: uint16(23305), + 31: uint16(23291), + 32: uint16(23307), + 33: uint16(23285), + 34: uint16(23308), + 35: uint16(23304), + 36: uint16(23534), + 37: uint16(23532), + 38: uint16(23529), + 39: uint16(23531), + 40: uint16(23652), + 41: uint16(23653), + 42: uint16(23965), + 43: uint16(23956), + 44: uint16(24162), + 45: uint16(24159), + 46: uint16(24161), + 47: uint16(24290), + 48: uint16(24282), + 49: uint16(24287), + 50: uint16(24285), + 51: uint16(24291), + 52: uint16(24288), + 53: uint16(24392), + 54: uint16(24433), + 55: uint16(24503), + 56: uint16(24501), + 57: uint16(24950), + 58: uint16(24935), + 59: uint16(24942), + 60: uint16(24925), + 61: uint16(24917), + 62: uint16(24962), + 63: uint16(24956), + 64: uint16(24944), + 65: uint16(24939), + 66: uint16(24958), + 67: uint16(24999), + 68: uint16(24976), + 69: uint16(25003), + 70: uint16(24974), + 71: uint16(25004), + 72: uint16(24986), + 73: uint16(24996), + 74: uint16(24980), + 75: uint16(25006), + 76: uint16(25134), + 77: uint16(25705), + 78: uint16(25711), + 79: uint16(25721), + 80: uint16(25758), + 81: uint16(25778), + 82: uint16(25736), + 83: uint16(25744), + 84: uint16(25776), + 85: uint16(25765), + 86: uint16(25747), + 87: uint16(25749), + 88: uint16(25769), + 89: uint16(25746), + 90: uint16(25774), + 91: uint16(25773), + 92: uint16(25771), + 93: uint16(25754), + 94: uint16(25772), + 95: uint16(25753), + 96: uint16(25762), + 97: uint16(25779), + 98: uint16(25973), + 99: uint16(25975), + 100: uint16(25976), + 101: uint16(26286), + 102: uint16(26283), + 103: uint16(26292), + 104: uint16(26289), + 105: uint16(27171), + 106: uint16(27167), + 107: uint16(27112), + 108: uint16(27137), + 109: uint16(27166), + 110: uint16(27161), + 111: uint16(27133), + 112: uint16(27169), + 113: uint16(27155), + 114: uint16(27146), + 115: uint16(27123), + 116: uint16(27138), + 117: uint16(27141), + 118: uint16(27117), + 119: uint16(27153), + 120: uint16(27472), + 121: uint16(27470), + 122: uint16(27556), + 123: uint16(27589), + 124: uint16(27590), + 125: uint16(28479), + 126: uint16(28540), + 127: uint16(28548), + 128: uint16(28497), + 129: uint16(28518), + 130: uint16(28500), + 131: uint16(28550), + 132: uint16(28525), + 133: uint16(28507), + 134: uint16(28536), + 135: uint16(28526), + 136: uint16(28558), + 137: uint16(28538), + 138: uint16(28528), + 139: uint16(28516), + 140: uint16(28567), + 141: uint16(28504), + 142: uint16(28373), + 143: uint16(28527), + 144: uint16(28512), + 145: uint16(28511), + 146: uint16(29087), + 147: uint16(29100), + 148: uint16(29105), + 149: uint16(29096), + 150: uint16(29270), + 151: uint16(29339), + 152: uint16(29518), + 153: uint16(29527), + 154: uint16(29801), + 155: uint16(29835), + 156: uint16(29827), + }, + 28: { + 0: uint16(29822), + 1: uint16(29824), + 2: uint16(30079), + 3: uint16(30240), + 4: uint16(30249), + 5: uint16(30239), + 6: uint16(30244), + 7: uint16(30246), + 8: uint16(30241), + 9: uint16(30242), + 10: uint16(30362), + 11: uint16(30394), + 12: uint16(30436), + 13: uint16(30606), + 14: uint16(30599), + 15: uint16(30604), + 16: uint16(30609), + 17: uint16(30603), + 18: uint16(30923), + 19: uint16(30917), + 20: uint16(30906), + 21: uint16(30922), + 22: uint16(30910), + 23: uint16(30933), + 24: uint16(30908), + 25: uint16(30928), + 26: uint16(31295), + 27: uint16(31292), + 28: uint16(31296), + 29: uint16(31293), + 30: uint16(31287), + 31: uint16(31291), + 32: uint16(31407), + 33: uint16(31406), + 34: uint16(31661), + 35: uint16(31665), + 36: uint16(31684), + 37: uint16(31668), + 38: uint16(31686), + 39: uint16(31687), + 40: uint16(31681), + 41: uint16(31648), + 42: uint16(31692), + 43: uint16(31946), + 44: uint16(32224), + 45: uint16(32244), + 46: uint16(32239), + 47: uint16(32251), + 48: uint16(32216), + 49: uint16(32236), + 50: uint16(32221), + 51: uint16(32232), + 52: uint16(32227), + 53: uint16(32218), + 54: uint16(32222), + 55: uint16(32233), + 56: uint16(32158), + 57: uint16(32217), + 58: uint16(32242), + 59: uint16(32249), + 60: uint16(32629), + 61: uint16(32631), + 62: uint16(32687), + 63: uint16(32745), + 64: uint16(32806), + 65: uint16(33179), + 66: uint16(33180), + 67: uint16(33181), + 68: uint16(33184), + 69: uint16(33178), + 70: uint16(33176), + 71: uint16(34071), + 72: uint16(34109), + 73: uint16(34074), + 74: uint16(34030), + 75: uint16(34092), + 76: uint16(34093), + 77: uint16(34067), + 78: uint16(34065), + 79: uint16(34083), + 80: uint16(34081), + 81: uint16(34068), + 82: uint16(34028), + 83: uint16(34085), + 84: uint16(34047), + 85: uint16(34054), + 86: uint16(34690), + 87: uint16(34676), + 88: uint16(34678), + 89: uint16(34656), + 90: uint16(34662), + 91: uint16(34680), + 92: uint16(34664), + 93: uint16(34649), + 94: uint16(34647), + 95: uint16(34636), + 96: uint16(34643), + 97: uint16(34907), + 98: uint16(34909), + 99: uint16(35088), + 100: uint16(35079), + 101: uint16(35090), + 102: uint16(35091), + 103: uint16(35093), + 104: uint16(35082), + 105: uint16(35516), + 106: uint16(35538), + 107: uint16(35527), + 108: uint16(35524), + 109: uint16(35477), + 110: uint16(35531), + 111: uint16(35576), + 112: uint16(35506), + 113: uint16(35529), + 114: uint16(35522), + 115: uint16(35519), + 116: uint16(35504), + 117: uint16(35542), + 118: uint16(35533), + 119: uint16(35510), + 120: uint16(35513), + 121: uint16(35547), + 122: uint16(35916), + 123: uint16(35918), + 124: uint16(35948), + 125: uint16(36064), + 126: uint16(36062), + 127: uint16(36070), + 128: uint16(36068), + 129: uint16(36076), + 130: uint16(36077), + 131: uint16(36066), + 132: uint16(36067), + 133: uint16(36060), + 134: uint16(36074), + 135: uint16(36065), + 136: uint16(36205), + 137: uint16(36255), + 138: uint16(36259), + 139: uint16(36395), + 140: uint16(36368), + 141: uint16(36381), + 142: uint16(36386), + 143: uint16(36367), + 144: uint16(36393), + 145: uint16(36383), + 146: uint16(36385), + 147: uint16(36382), + 148: uint16(36538), + 149: uint16(36637), + 150: uint16(36635), + 151: uint16(36639), + 152: uint16(36649), + 153: uint16(36646), + 154: uint16(36650), + 155: uint16(36636), + 156: uint16(36638), + }, + 29: { + 0: uint16(36645), + 1: uint16(36969), + 2: uint16(36974), + 3: uint16(36968), + 4: uint16(36973), + 5: uint16(36983), + 6: uint16(37168), + 7: uint16(37165), + 8: uint16(37159), + 9: uint16(37169), + 10: uint16(37255), + 11: uint16(37257), + 12: uint16(37259), + 13: uint16(37251), + 14: uint16(37573), + 15: uint16(37563), + 16: uint16(37559), + 17: uint16(37610), + 18: uint16(37548), + 19: uint16(37604), + 20: uint16(37569), + 21: uint16(37555), + 22: uint16(37564), + 23: uint16(37586), + 24: uint16(37575), + 25: uint16(37616), + 26: uint16(37554), + 27: uint16(38317), + 28: uint16(38321), + 29: uint16(38660), + 30: uint16(38662), + 31: uint16(38663), + 32: uint16(38665), + 33: uint16(38752), + 34: uint16(38797), + 35: uint16(38795), + 36: uint16(38799), + 37: uint16(38945), + 38: uint16(38955), + 39: uint16(38940), + 40: uint16(39091), + 41: uint16(39178), + 42: uint16(39187), + 43: uint16(39186), + 44: uint16(39192), + 45: uint16(39389), + 46: uint16(39376), + 47: uint16(39391), + 48: uint16(39387), + 49: uint16(39377), + 50: uint16(39381), + 51: uint16(39378), + 52: uint16(39385), + 53: uint16(39607), + 54: uint16(39662), + 55: uint16(39663), + 56: uint16(39719), + 57: uint16(39749), + 58: uint16(39748), + 59: uint16(39799), + 60: uint16(39791), + 61: uint16(40198), + 62: uint16(40201), + 63: uint16(40195), + 64: uint16(40617), + 65: uint16(40638), + 66: uint16(40654), + 67: uint16(22696), + 68: uint16(40786), + 69: uint16(20754), + 70: uint16(20760), + 71: uint16(20756), + 72: uint16(20752), + 73: uint16(20757), + 74: uint16(20864), + 75: uint16(20906), + 76: uint16(20957), + 77: uint16(21137), + 78: uint16(21139), + 79: uint16(21235), + 80: uint16(22105), + 81: uint16(22123), + 82: uint16(22137), + 83: uint16(22121), + 84: uint16(22116), + 85: uint16(22136), + 86: uint16(22122), + 87: uint16(22120), + 88: uint16(22117), + 89: uint16(22129), + 90: uint16(22127), + 91: uint16(22124), + 92: uint16(22114), + 93: uint16(22134), + 94: uint16(22721), + 95: uint16(22718), + 96: uint16(22727), + 97: uint16(22725), + 98: uint16(22894), + 99: uint16(23325), + 100: uint16(23348), + 101: uint16(23416), + 102: uint16(23536), + 103: uint16(23566), + 104: uint16(24394), + 105: uint16(25010), + 106: uint16(24977), + 107: uint16(25001), + 108: uint16(24970), + 109: uint16(25037), + 110: uint16(25014), + 111: uint16(25022), + 112: uint16(25034), + 113: uint16(25032), + 114: uint16(25136), + 115: uint16(25797), + 116: uint16(25793), + 117: uint16(25803), + 118: uint16(25787), + 119: uint16(25788), + 120: uint16(25818), + 121: uint16(25796), + 122: uint16(25799), + 123: uint16(25794), + 124: uint16(25805), + 125: uint16(25791), + 126: uint16(25810), + 127: uint16(25812), + 128: uint16(25790), + 129: uint16(25972), + 130: uint16(26310), + 131: uint16(26313), + 132: uint16(26297), + 133: uint16(26308), + 134: uint16(26311), + 135: uint16(26296), + 136: uint16(27197), + 137: uint16(27192), + 138: uint16(27194), + 139: uint16(27225), + 140: uint16(27243), + 141: uint16(27224), + 142: uint16(27193), + 143: uint16(27204), + 144: uint16(27234), + 145: uint16(27233), + 146: uint16(27211), + 147: uint16(27207), + 148: uint16(27189), + 149: uint16(27231), + 150: uint16(27208), + 151: uint16(27481), + 152: uint16(27511), + 153: uint16(27653), + 154: uint16(28610), + 155: uint16(28593), + 156: uint16(28577), + }, + 30: { + 0: uint16(28611), + 1: uint16(28580), + 2: uint16(28609), + 3: uint16(28583), + 4: uint16(28595), + 5: uint16(28608), + 6: uint16(28601), + 7: uint16(28598), + 8: uint16(28582), + 9: uint16(28576), + 10: uint16(28596), + 11: uint16(29118), + 12: uint16(29129), + 13: uint16(29136), + 14: uint16(29138), + 15: uint16(29128), + 16: uint16(29141), + 17: uint16(29113), + 18: uint16(29134), + 19: uint16(29145), + 20: uint16(29148), + 21: uint16(29123), + 22: uint16(29124), + 23: uint16(29544), + 24: uint16(29852), + 25: uint16(29859), + 26: uint16(29848), + 27: uint16(29855), + 28: uint16(29854), + 29: uint16(29922), + 30: uint16(29964), + 31: uint16(29965), + 32: uint16(30260), + 33: uint16(30264), + 34: uint16(30266), + 35: uint16(30439), + 36: uint16(30437), + 37: uint16(30624), + 38: uint16(30622), + 39: uint16(30623), + 40: uint16(30629), + 41: uint16(30952), + 42: uint16(30938), + 43: uint16(30956), + 44: uint16(30951), + 45: uint16(31142), + 46: uint16(31309), + 47: uint16(31310), + 48: uint16(31302), + 49: uint16(31308), + 50: uint16(31307), + 51: uint16(31418), + 52: uint16(31705), + 53: uint16(31761), + 54: uint16(31689), + 55: uint16(31716), + 56: uint16(31707), + 57: uint16(31713), + 58: uint16(31721), + 59: uint16(31718), + 60: uint16(31957), + 61: uint16(31958), + 62: uint16(32266), + 63: uint16(32273), + 64: uint16(32264), + 65: uint16(32283), + 66: uint16(32291), + 67: uint16(32286), + 68: uint16(32285), + 69: uint16(32265), + 70: uint16(32272), + 71: uint16(32633), + 72: uint16(32690), + 73: uint16(32752), + 74: uint16(32753), + 75: uint16(32750), + 76: uint16(32808), + 77: uint16(33203), + 78: uint16(33193), + 79: uint16(33192), + 80: uint16(33275), + 81: uint16(33288), + 82: uint16(33368), + 83: uint16(33369), + 84: uint16(34122), + 85: uint16(34137), + 86: uint16(34120), + 87: uint16(34152), + 88: uint16(34153), + 89: uint16(34115), + 90: uint16(34121), + 91: uint16(34157), + 92: uint16(34154), + 93: uint16(34142), + 94: uint16(34691), + 95: uint16(34719), + 96: uint16(34718), + 97: uint16(34722), + 98: uint16(34701), + 99: uint16(34913), + 100: uint16(35114), + 101: uint16(35122), + 102: uint16(35109), + 103: uint16(35115), + 104: uint16(35105), + 105: uint16(35242), + 106: uint16(35238), + 107: uint16(35558), + 108: uint16(35578), + 109: uint16(35563), + 110: uint16(35569), + 111: uint16(35584), + 112: uint16(35548), + 113: uint16(35559), + 114: uint16(35566), + 115: uint16(35582), + 116: uint16(35585), + 117: uint16(35586), + 118: uint16(35575), + 119: uint16(35565), + 120: uint16(35571), + 121: uint16(35574), + 122: uint16(35580), + 123: uint16(35947), + 124: uint16(35949), + 125: uint16(35987), + 126: uint16(36084), + 127: uint16(36420), + 128: uint16(36401), + 129: uint16(36404), + 130: uint16(36418), + 131: uint16(36409), + 132: uint16(36405), + 133: uint16(36667), + 134: uint16(36655), + 135: uint16(36664), + 136: uint16(36659), + 137: uint16(36776), + 138: uint16(36774), + 139: uint16(36981), + 140: uint16(36980), + 141: uint16(36984), + 142: uint16(36978), + 143: uint16(36988), + 144: uint16(36986), + 145: uint16(37172), + 146: uint16(37266), + 147: uint16(37664), + 148: uint16(37686), + 149: uint16(37624), + 150: uint16(37683), + 151: uint16(37679), + 152: uint16(37666), + 153: uint16(37628), + 154: uint16(37675), + 155: uint16(37636), + 156: uint16(37658), + }, + 31: { + 0: uint16(37648), + 1: uint16(37670), + 2: uint16(37665), + 3: uint16(37653), + 4: uint16(37678), + 5: uint16(37657), + 6: uint16(38331), + 7: uint16(38567), + 8: uint16(38568), + 9: uint16(38570), + 10: uint16(38613), + 11: uint16(38670), + 12: uint16(38673), + 13: uint16(38678), + 14: uint16(38669), + 15: uint16(38675), + 16: uint16(38671), + 17: uint16(38747), + 18: uint16(38748), + 19: uint16(38758), + 20: uint16(38808), + 21: uint16(38960), + 22: uint16(38968), + 23: uint16(38971), + 24: uint16(38967), + 25: uint16(38957), + 26: uint16(38969), + 27: uint16(38948), + 28: uint16(39184), + 29: uint16(39208), + 30: uint16(39198), + 31: uint16(39195), + 32: uint16(39201), + 33: uint16(39194), + 34: uint16(39405), + 35: uint16(39394), + 36: uint16(39409), + 37: uint16(39608), + 38: uint16(39612), + 39: uint16(39675), + 40: uint16(39661), + 41: uint16(39720), + 42: uint16(39825), + 43: uint16(40213), + 44: uint16(40227), + 45: uint16(40230), + 46: uint16(40232), + 47: uint16(40210), + 48: uint16(40219), + 49: uint16(40664), + 50: uint16(40660), + 51: uint16(40845), + 52: uint16(40860), + 53: uint16(20778), + 54: uint16(20767), + 55: uint16(20769), + 56: uint16(20786), + 57: uint16(21237), + 58: uint16(22158), + 59: uint16(22144), + 60: uint16(22160), + 61: uint16(22149), + 62: uint16(22151), + 63: uint16(22159), + 64: uint16(22741), + 65: uint16(22739), + 66: uint16(22737), + 67: uint16(22734), + 68: uint16(23344), + 69: uint16(23338), + 70: uint16(23332), + 71: uint16(23418), + 72: uint16(23607), + 73: uint16(23656), + 74: uint16(23996), + 75: uint16(23994), + 76: uint16(23997), + 77: uint16(23992), + 78: uint16(24171), + 79: uint16(24396), + 80: uint16(24509), + 81: uint16(25033), + 82: uint16(25026), + 83: uint16(25031), + 84: uint16(25062), + 85: uint16(25035), + 86: uint16(25138), + 87: uint16(25140), + 88: uint16(25806), + 89: uint16(25802), + 90: uint16(25816), + 91: uint16(25824), + 92: uint16(25840), + 93: uint16(25830), + 94: uint16(25836), + 95: uint16(25841), + 96: uint16(25826), + 97: uint16(25837), + 98: uint16(25986), + 99: uint16(25987), + 100: uint16(26329), + 101: uint16(26326), + 102: uint16(27264), + 103: uint16(27284), + 104: uint16(27268), + 105: uint16(27298), + 106: uint16(27292), + 107: uint16(27355), + 108: uint16(27299), + 109: uint16(27262), + 110: uint16(27287), + 111: uint16(27280), + 112: uint16(27296), + 113: uint16(27484), + 114: uint16(27566), + 115: uint16(27610), + 116: uint16(27656), + 117: uint16(28632), + 118: uint16(28657), + 119: uint16(28639), + 120: uint16(28640), + 121: uint16(28635), + 122: uint16(28644), + 123: uint16(28651), + 124: uint16(28655), + 125: uint16(28544), + 126: uint16(28652), + 127: uint16(28641), + 128: uint16(28649), + 129: uint16(28629), + 130: uint16(28654), + 131: uint16(28656), + 132: uint16(29159), + 133: uint16(29151), + 134: uint16(29166), + 135: uint16(29158), + 136: uint16(29157), + 137: uint16(29165), + 138: uint16(29164), + 139: uint16(29172), + 140: uint16(29152), + 141: uint16(29237), + 142: uint16(29254), + 143: uint16(29552), + 144: uint16(29554), + 145: uint16(29865), + 146: uint16(29872), + 147: uint16(29862), + 148: uint16(29864), + 149: uint16(30278), + 150: uint16(30274), + 151: uint16(30284), + 152: uint16(30442), + 153: uint16(30643), + 154: uint16(30634), + 155: uint16(30640), + 156: uint16(30636), + }, + 32: { + 0: uint16(30631), + 1: uint16(30637), + 2: uint16(30703), + 3: uint16(30967), + 4: uint16(30970), + 5: uint16(30964), + 6: uint16(30959), + 7: uint16(30977), + 8: uint16(31143), + 9: uint16(31146), + 10: uint16(31319), + 11: uint16(31423), + 12: uint16(31751), + 13: uint16(31757), + 14: uint16(31742), + 15: uint16(31735), + 16: uint16(31756), + 17: uint16(31712), + 18: uint16(31968), + 19: uint16(31964), + 20: uint16(31966), + 21: uint16(31970), + 22: uint16(31967), + 23: uint16(31961), + 24: uint16(31965), + 25: uint16(32302), + 26: uint16(32318), + 27: uint16(32326), + 28: uint16(32311), + 29: uint16(32306), + 30: uint16(32323), + 31: uint16(32299), + 32: uint16(32317), + 33: uint16(32305), + 34: uint16(32325), + 35: uint16(32321), + 36: uint16(32308), + 37: uint16(32313), + 38: uint16(32328), + 39: uint16(32309), + 40: uint16(32319), + 41: uint16(32303), + 42: uint16(32580), + 43: uint16(32755), + 44: uint16(32764), + 45: uint16(32881), + 46: uint16(32882), + 47: uint16(32880), + 48: uint16(32879), + 49: uint16(32883), + 50: uint16(33222), + 51: uint16(33219), + 52: uint16(33210), + 53: uint16(33218), + 54: uint16(33216), + 55: uint16(33215), + 56: uint16(33213), + 57: uint16(33225), + 58: uint16(33214), + 59: uint16(33256), + 60: uint16(33289), + 61: uint16(33393), + 62: uint16(34218), + 63: uint16(34180), + 64: uint16(34174), + 65: uint16(34204), + 66: uint16(34193), + 67: uint16(34196), + 68: uint16(34223), + 69: uint16(34203), + 70: uint16(34183), + 71: uint16(34216), + 72: uint16(34186), + 73: uint16(34407), + 74: uint16(34752), + 75: uint16(34769), + 76: uint16(34739), + 77: uint16(34770), + 78: uint16(34758), + 79: uint16(34731), + 80: uint16(34747), + 81: uint16(34746), + 82: uint16(34760), + 83: uint16(34763), + 84: uint16(35131), + 85: uint16(35126), + 86: uint16(35140), + 87: uint16(35128), + 88: uint16(35133), + 89: uint16(35244), + 90: uint16(35598), + 91: uint16(35607), + 92: uint16(35609), + 93: uint16(35611), + 94: uint16(35594), + 95: uint16(35616), + 96: uint16(35613), + 97: uint16(35588), + 98: uint16(35600), + 99: uint16(35905), + 100: uint16(35903), + 101: uint16(35955), + 102: uint16(36090), + 103: uint16(36093), + 104: uint16(36092), + 105: uint16(36088), + 106: uint16(36091), + 107: uint16(36264), + 108: uint16(36425), + 109: uint16(36427), + 110: uint16(36424), + 111: uint16(36426), + 112: uint16(36676), + 113: uint16(36670), + 114: uint16(36674), + 115: uint16(36677), + 116: uint16(36671), + 117: uint16(36991), + 118: uint16(36989), + 119: uint16(36996), + 120: uint16(36993), + 121: uint16(36994), + 122: uint16(36992), + 123: uint16(37177), + 124: uint16(37283), + 125: uint16(37278), + 126: uint16(37276), + 127: uint16(37709), + 128: uint16(37762), + 129: uint16(37672), + 130: uint16(37749), + 131: uint16(37706), + 132: uint16(37733), + 133: uint16(37707), + 134: uint16(37656), + 135: uint16(37758), + 136: uint16(37740), + 137: uint16(37723), + 138: uint16(37744), + 139: uint16(37722), + 140: uint16(37716), + 141: uint16(38346), + 142: uint16(38347), + 143: uint16(38348), + 144: uint16(38344), + 145: uint16(38342), + 146: uint16(38577), + 147: uint16(38584), + 148: uint16(38614), + 149: uint16(38684), + 150: uint16(38686), + 151: uint16(38816), + 152: uint16(38867), + 153: uint16(38982), + 154: uint16(39094), + 155: uint16(39221), + 156: uint16(39425), + }, + 33: { + 0: uint16(39423), + 1: uint16(39854), + 2: uint16(39851), + 3: uint16(39850), + 4: uint16(39853), + 5: uint16(40251), + 6: uint16(40255), + 7: uint16(40587), + 8: uint16(40655), + 9: uint16(40670), + 10: uint16(40668), + 11: uint16(40669), + 12: uint16(40667), + 13: uint16(40766), + 14: uint16(40779), + 15: uint16(21474), + 16: uint16(22165), + 17: uint16(22190), + 18: uint16(22745), + 19: uint16(22744), + 20: uint16(23352), + 21: uint16(24413), + 22: uint16(25059), + 23: uint16(25139), + 24: uint16(25844), + 25: uint16(25842), + 26: uint16(25854), + 27: uint16(25862), + 28: uint16(25850), + 29: uint16(25851), + 30: uint16(25847), + 31: uint16(26039), + 32: uint16(26332), + 33: uint16(26406), + 34: uint16(27315), + 35: uint16(27308), + 36: uint16(27331), + 37: uint16(27323), + 38: uint16(27320), + 39: uint16(27330), + 40: uint16(27310), + 41: uint16(27311), + 42: uint16(27487), + 43: uint16(27512), + 44: uint16(27567), + 45: uint16(28681), + 46: uint16(28683), + 47: uint16(28670), + 48: uint16(28678), + 49: uint16(28666), + 50: uint16(28689), + 51: uint16(28687), + 52: uint16(29179), + 53: uint16(29180), + 54: uint16(29182), + 55: uint16(29176), + 56: uint16(29559), + 57: uint16(29557), + 58: uint16(29863), + 59: uint16(29887), + 60: uint16(29973), + 61: uint16(30294), + 62: uint16(30296), + 63: uint16(30290), + 64: uint16(30653), + 65: uint16(30655), + 66: uint16(30651), + 67: uint16(30652), + 68: uint16(30990), + 69: uint16(31150), + 70: uint16(31329), + 71: uint16(31330), + 72: uint16(31328), + 73: uint16(31428), + 74: uint16(31429), + 75: uint16(31787), + 76: uint16(31783), + 77: uint16(31786), + 78: uint16(31774), + 79: uint16(31779), + 80: uint16(31777), + 81: uint16(31975), + 82: uint16(32340), + 83: uint16(32341), + 84: uint16(32350), + 85: uint16(32346), + 86: uint16(32353), + 87: uint16(32338), + 88: uint16(32345), + 89: uint16(32584), + 90: uint16(32761), + 91: uint16(32763), + 92: uint16(32887), + 93: uint16(32886), + 94: uint16(33229), + 95: uint16(33231), + 96: uint16(33290), + 97: uint16(34255), + 98: uint16(34217), + 99: uint16(34253), + 100: uint16(34256), + 101: uint16(34249), + 102: uint16(34224), + 103: uint16(34234), + 104: uint16(34233), + 105: uint16(34214), + 106: uint16(34799), + 107: uint16(34796), + 108: uint16(34802), + 109: uint16(34784), + 110: uint16(35206), + 111: uint16(35250), + 112: uint16(35316), + 113: uint16(35624), + 114: uint16(35641), + 115: uint16(35628), + 116: uint16(35627), + 117: uint16(35920), + 118: uint16(36101), + 119: uint16(36441), + 120: uint16(36451), + 121: uint16(36454), + 122: uint16(36452), + 123: uint16(36447), + 124: uint16(36437), + 125: uint16(36544), + 126: uint16(36681), + 127: uint16(36685), + 128: uint16(36999), + 129: uint16(36995), + 130: uint16(37000), + 131: uint16(37291), + 132: uint16(37292), + 133: uint16(37328), + 134: uint16(37780), + 135: uint16(37770), + 136: uint16(37782), + 137: uint16(37794), + 138: uint16(37811), + 139: uint16(37806), + 140: uint16(37804), + 141: uint16(37808), + 142: uint16(37784), + 143: uint16(37786), + 144: uint16(37783), + 145: uint16(38356), + 146: uint16(38358), + 147: uint16(38352), + 148: uint16(38357), + 149: uint16(38626), + 150: uint16(38620), + 151: uint16(38617), + 152: uint16(38619), + 153: uint16(38622), + 154: uint16(38692), + 155: uint16(38819), + 156: uint16(38822), + }, + 34: { + 0: uint16(38829), + 1: uint16(38905), + 2: uint16(38989), + 3: uint16(38991), + 4: uint16(38988), + 5: uint16(38990), + 6: uint16(38995), + 7: uint16(39098), + 8: uint16(39230), + 9: uint16(39231), + 10: uint16(39229), + 11: uint16(39214), + 12: uint16(39333), + 13: uint16(39438), + 14: uint16(39617), + 15: uint16(39683), + 16: uint16(39686), + 17: uint16(39759), + 18: uint16(39758), + 19: uint16(39757), + 20: uint16(39882), + 21: uint16(39881), + 22: uint16(39933), + 23: uint16(39880), + 24: uint16(39872), + 25: uint16(40273), + 26: uint16(40285), + 27: uint16(40288), + 28: uint16(40672), + 29: uint16(40725), + 30: uint16(40748), + 31: uint16(20787), + 32: uint16(22181), + 33: uint16(22750), + 34: uint16(22751), + 35: uint16(22754), + 36: uint16(23541), + 37: uint16(40848), + 38: uint16(24300), + 39: uint16(25074), + 40: uint16(25079), + 41: uint16(25078), + 42: uint16(25077), + 43: uint16(25856), + 44: uint16(25871), + 45: uint16(26336), + 46: uint16(26333), + 47: uint16(27365), + 48: uint16(27357), + 49: uint16(27354), + 50: uint16(27347), + 51: uint16(28699), + 52: uint16(28703), + 53: uint16(28712), + 54: uint16(28698), + 55: uint16(28701), + 56: uint16(28693), + 57: uint16(28696), + 58: uint16(29190), + 59: uint16(29197), + 60: uint16(29272), + 61: uint16(29346), + 62: uint16(29560), + 63: uint16(29562), + 64: uint16(29885), + 65: uint16(29898), + 66: uint16(29923), + 67: uint16(30087), + 68: uint16(30086), + 69: uint16(30303), + 70: uint16(30305), + 71: uint16(30663), + 72: uint16(31001), + 73: uint16(31153), + 74: uint16(31339), + 75: uint16(31337), + 76: uint16(31806), + 77: uint16(31807), + 78: uint16(31800), + 79: uint16(31805), + 80: uint16(31799), + 81: uint16(31808), + 82: uint16(32363), + 83: uint16(32365), + 84: uint16(32377), + 85: uint16(32361), + 86: uint16(32362), + 87: uint16(32645), + 88: uint16(32371), + 89: uint16(32694), + 90: uint16(32697), + 91: uint16(32696), + 92: uint16(33240), + 93: uint16(34281), + 94: uint16(34269), + 95: uint16(34282), + 96: uint16(34261), + 97: uint16(34276), + 98: uint16(34277), + 99: uint16(34295), + 100: uint16(34811), + 101: uint16(34821), + 102: uint16(34829), + 103: uint16(34809), + 104: uint16(34814), + 105: uint16(35168), + 106: uint16(35167), + 107: uint16(35158), + 108: uint16(35166), + 109: uint16(35649), + 110: uint16(35676), + 111: uint16(35672), + 112: uint16(35657), + 113: uint16(35674), + 114: uint16(35662), + 115: uint16(35663), + 116: uint16(35654), + 117: uint16(35673), + 118: uint16(36104), + 119: uint16(36106), + 120: uint16(36476), + 121: uint16(36466), + 122: uint16(36487), + 123: uint16(36470), + 124: uint16(36460), + 125: uint16(36474), + 126: uint16(36468), + 127: uint16(36692), + 128: uint16(36686), + 129: uint16(36781), + 130: uint16(37002), + 131: uint16(37003), + 132: uint16(37297), + 133: uint16(37294), + 134: uint16(37857), + 135: uint16(37841), + 136: uint16(37855), + 137: uint16(37827), + 138: uint16(37832), + 139: uint16(37852), + 140: uint16(37853), + 141: uint16(37846), + 142: uint16(37858), + 143: uint16(37837), + 144: uint16(37848), + 145: uint16(37860), + 146: uint16(37847), + 147: uint16(37864), + 148: uint16(38364), + 149: uint16(38580), + 150: uint16(38627), + 151: uint16(38698), + 152: uint16(38695), + 153: uint16(38753), + 154: uint16(38876), + 155: uint16(38907), + 156: uint16(39006), + }, + 35: { + 0: uint16(39000), + 1: uint16(39003), + 2: uint16(39100), + 3: uint16(39237), + 4: uint16(39241), + 5: uint16(39446), + 6: uint16(39449), + 7: uint16(39693), + 8: uint16(39912), + 9: uint16(39911), + 10: uint16(39894), + 11: uint16(39899), + 12: uint16(40329), + 13: uint16(40289), + 14: uint16(40306), + 15: uint16(40298), + 16: uint16(40300), + 17: uint16(40594), + 18: uint16(40599), + 19: uint16(40595), + 20: uint16(40628), + 21: uint16(21240), + 22: uint16(22184), + 23: uint16(22199), + 24: uint16(22198), + 25: uint16(22196), + 26: uint16(22204), + 27: uint16(22756), + 28: uint16(23360), + 29: uint16(23363), + 30: uint16(23421), + 31: uint16(23542), + 32: uint16(24009), + 33: uint16(25080), + 34: uint16(25082), + 35: uint16(25880), + 36: uint16(25876), + 37: uint16(25881), + 38: uint16(26342), + 39: uint16(26407), + 40: uint16(27372), + 41: uint16(28734), + 42: uint16(28720), + 43: uint16(28722), + 44: uint16(29200), + 45: uint16(29563), + 46: uint16(29903), + 47: uint16(30306), + 48: uint16(30309), + 49: uint16(31014), + 50: uint16(31018), + 51: uint16(31020), + 52: uint16(31019), + 53: uint16(31431), + 54: uint16(31478), + 55: uint16(31820), + 56: uint16(31811), + 57: uint16(31821), + 58: uint16(31983), + 59: uint16(31984), + 60: uint16(36782), + 61: uint16(32381), + 62: uint16(32380), + 63: uint16(32386), + 64: uint16(32588), + 65: uint16(32768), + 66: uint16(33242), + 67: uint16(33382), + 68: uint16(34299), + 69: uint16(34297), + 70: uint16(34321), + 71: uint16(34298), + 72: uint16(34310), + 73: uint16(34315), + 74: uint16(34311), + 75: uint16(34314), + 76: uint16(34836), + 77: uint16(34837), + 78: uint16(35172), + 79: uint16(35258), + 80: uint16(35320), + 81: uint16(35696), + 82: uint16(35692), + 83: uint16(35686), + 84: uint16(35695), + 85: uint16(35679), + 86: uint16(35691), + 87: uint16(36111), + 88: uint16(36109), + 89: uint16(36489), + 90: uint16(36481), + 91: uint16(36485), + 92: uint16(36482), + 93: uint16(37300), + 94: uint16(37323), + 95: uint16(37912), + 96: uint16(37891), + 97: uint16(37885), + 98: uint16(38369), + 99: uint16(38704), + 100: uint16(39108), + 101: uint16(39250), + 102: uint16(39249), + 103: uint16(39336), + 104: uint16(39467), + 105: uint16(39472), + 106: uint16(39479), + 107: uint16(39477), + 108: uint16(39955), + 109: uint16(39949), + 110: uint16(40569), + 111: uint16(40629), + 112: uint16(40680), + 113: uint16(40751), + 114: uint16(40799), + 115: uint16(40803), + 116: uint16(40801), + 117: uint16(20791), + 118: uint16(20792), + 119: uint16(22209), + 120: uint16(22208), + 121: uint16(22210), + 122: uint16(22804), + 123: uint16(23660), + 124: uint16(24013), + 125: uint16(25084), + 126: uint16(25086), + 127: uint16(25885), + 128: uint16(25884), + 129: uint16(26005), + 130: uint16(26345), + 131: uint16(27387), + 132: uint16(27396), + 133: uint16(27386), + 134: uint16(27570), + 135: uint16(28748), + 136: uint16(29211), + 137: uint16(29351), + 138: uint16(29910), + 139: uint16(29908), + 140: uint16(30313), + 141: uint16(30675), + 142: uint16(31824), + 143: uint16(32399), + 144: uint16(32396), + 145: uint16(32700), + 146: uint16(34327), + 147: uint16(34349), + 148: uint16(34330), + 149: uint16(34851), + 150: uint16(34850), + 151: uint16(34849), + 152: uint16(34847), + 153: uint16(35178), + 154: uint16(35180), + 155: uint16(35261), + 156: uint16(35700), + }, + 36: { + 0: uint16(35703), + 1: uint16(35709), + 2: uint16(36115), + 3: uint16(36490), + 4: uint16(36493), + 5: uint16(36491), + 6: uint16(36703), + 7: uint16(36783), + 8: uint16(37306), + 9: uint16(37934), + 10: uint16(37939), + 11: uint16(37941), + 12: uint16(37946), + 13: uint16(37944), + 14: uint16(37938), + 15: uint16(37931), + 16: uint16(38370), + 17: uint16(38712), + 18: uint16(38713), + 19: uint16(38706), + 20: uint16(38911), + 21: uint16(39015), + 22: uint16(39013), + 23: uint16(39255), + 24: uint16(39493), + 25: uint16(39491), + 26: uint16(39488), + 27: uint16(39486), + 28: uint16(39631), + 29: uint16(39764), + 30: uint16(39761), + 31: uint16(39981), + 32: uint16(39973), + 33: uint16(40367), + 34: uint16(40372), + 35: uint16(40386), + 36: uint16(40376), + 37: uint16(40605), + 38: uint16(40687), + 39: uint16(40729), + 40: uint16(40796), + 41: uint16(40806), + 42: uint16(40807), + 43: uint16(20796), + 44: uint16(20795), + 45: uint16(22216), + 46: uint16(22218), + 47: uint16(22217), + 48: uint16(23423), + 49: uint16(24020), + 50: uint16(24018), + 51: uint16(24398), + 52: uint16(25087), + 53: uint16(25892), + 54: uint16(27402), + 55: uint16(27489), + 56: uint16(28753), + 57: uint16(28760), + 58: uint16(29568), + 59: uint16(29924), + 60: uint16(30090), + 61: uint16(30318), + 62: uint16(30316), + 63: uint16(31155), + 64: uint16(31840), + 65: uint16(31839), + 66: uint16(32894), + 67: uint16(32893), + 68: uint16(33247), + 69: uint16(35186), + 70: uint16(35183), + 71: uint16(35324), + 72: uint16(35712), + 73: uint16(36118), + 74: uint16(36119), + 75: uint16(36497), + 76: uint16(36499), + 77: uint16(36705), + 78: uint16(37192), + 79: uint16(37956), + 80: uint16(37969), + 81: uint16(37970), + 82: uint16(38717), + 83: uint16(38718), + 84: uint16(38851), + 85: uint16(38849), + 86: uint16(39019), + 87: uint16(39253), + 88: uint16(39509), + 89: uint16(39501), + 90: uint16(39634), + 91: uint16(39706), + 92: uint16(40009), + 93: uint16(39985), + 94: uint16(39998), + 95: uint16(39995), + 96: uint16(40403), + 97: uint16(40407), + 98: uint16(40756), + 99: uint16(40812), + 100: uint16(40810), + 101: uint16(40852), + 102: uint16(22220), + 103: uint16(24022), + 104: uint16(25088), + 105: uint16(25891), + 106: uint16(25899), + 107: uint16(25898), + 108: uint16(26348), + 109: uint16(27408), + 110: uint16(29914), + 111: uint16(31434), + 112: uint16(31844), + 113: uint16(31843), + 114: uint16(31845), + 115: uint16(32403), + 116: uint16(32406), + 117: uint16(32404), + 118: uint16(33250), + 119: uint16(34360), + 120: uint16(34367), + 121: uint16(34865), + 122: uint16(35722), + 123: uint16(37008), + 124: uint16(37007), + 125: uint16(37987), + 126: uint16(37984), + 127: uint16(37988), + 128: uint16(38760), + 129: uint16(39023), + 130: uint16(39260), + 131: uint16(39514), + 132: uint16(39515), + 133: uint16(39511), + 134: uint16(39635), + 135: uint16(39636), + 136: uint16(39633), + 137: uint16(40020), + 138: uint16(40023), + 139: uint16(40022), + 140: uint16(40421), + 141: uint16(40607), + 142: uint16(40692), + 143: uint16(22225), + 144: uint16(22761), + 145: uint16(25900), + 146: uint16(28766), + 147: uint16(30321), + 148: uint16(30322), + 149: uint16(30679), + 150: uint16(32592), + 151: uint16(32648), + 152: uint16(34870), + 153: uint16(34873), + 154: uint16(34914), + 155: uint16(35731), + 156: uint16(35730), + }, + 37: { + 0: uint16(35734), + 1: uint16(33399), + 2: uint16(36123), + 3: uint16(37312), + 4: uint16(37994), + 5: uint16(38722), + 6: uint16(38728), + 7: uint16(38724), + 8: uint16(38854), + 9: uint16(39024), + 10: uint16(39519), + 11: uint16(39714), + 12: uint16(39768), + 13: uint16(40031), + 14: uint16(40441), + 15: uint16(40442), + 16: uint16(40572), + 17: uint16(40573), + 18: uint16(40711), + 19: uint16(40823), + 20: uint16(40818), + 21: uint16(24307), + 22: uint16(27414), + 23: uint16(28771), + 24: uint16(31852), + 25: uint16(31854), + 26: uint16(34875), + 27: uint16(35264), + 28: uint16(36513), + 29: uint16(37313), + 30: uint16(38002), + 31: uint16(38000), + 32: uint16(39025), + 33: uint16(39262), + 34: uint16(39638), + 35: uint16(39715), + 36: uint16(40652), + 37: uint16(28772), + 38: uint16(30682), + 39: uint16(35738), + 40: uint16(38007), + 41: uint16(38857), + 42: uint16(39522), + 43: uint16(39525), + 44: uint16(32412), + 45: uint16(35740), + 46: uint16(36522), + 47: uint16(37317), + 48: uint16(38013), + 49: uint16(38014), + 50: uint16(38012), + 51: uint16(40055), + 52: uint16(40056), + 53: uint16(40695), + 54: uint16(35924), + 55: uint16(38015), + 56: uint16(40474), + 57: uint16(29224), + 58: uint16(39530), + 59: uint16(39729), + 60: uint16(40475), + 61: uint16(40478), + 62: uint16(31858), + 63: uint16(9312), + 64: uint16(9313), + 65: uint16(9314), + 66: uint16(9315), + 67: uint16(9316), + 68: uint16(9317), + 69: uint16(9318), + 70: uint16(9319), + 71: uint16(9320), + 72: uint16(9321), + 73: uint16(9332), + 74: uint16(9333), + 75: uint16(9334), + 76: uint16(9335), + 77: uint16(9336), + 78: uint16(9337), + 79: uint16(9338), + 80: uint16(9339), + 81: uint16(9340), + 82: uint16(9341), + 83: uint16(8560), + 84: uint16(8561), + 85: uint16(8562), + 86: uint16(8563), + 87: uint16(8564), + 88: uint16(8565), + 89: uint16(8566), + 90: uint16(8567), + 91: uint16(8568), + 92: uint16(8569), + 93: uint16(20022), + 94: uint16(20031), + 95: uint16(20101), + 96: uint16(20128), + 97: uint16(20866), + 98: uint16(20886), + 99: uint16(20907), + 100: uint16(21241), + 101: uint16(21304), + 102: uint16(21353), + 103: uint16(21430), + 104: uint16(22794), + 105: uint16(23424), + 106: uint16(24027), + 107: uint16(24186), + 108: uint16(24191), + 109: uint16(24308), + 110: uint16(24400), + 111: uint16(24417), + 112: uint16(25908), + 113: uint16(26080), + 114: uint16(30098), + 115: uint16(30326), + 116: uint16(36789), + 117: uint16(38582), + 118: uint16(168), + 119: uint16(710), + 120: uint16(12541), + 121: uint16(12542), + 122: uint16(12445), + 123: uint16(12446), + 126: uint16(12293), + 127: uint16(12294), + 128: uint16(12295), + 129: uint16(12540), + 130: uint16(65339), + 131: uint16(65341), + 132: uint16(10045), + 133: uint16(12353), + 134: uint16(12354), + 135: uint16(12355), + 136: uint16(12356), + 137: uint16(12357), + 138: uint16(12358), + 139: uint16(12359), + 140: uint16(12360), + 141: uint16(12361), + 142: uint16(12362), + 143: uint16(12363), + 144: uint16(12364), + 145: uint16(12365), + 146: uint16(12366), + 147: uint16(12367), + 148: uint16(12368), + 149: uint16(12369), + 150: uint16(12370), + 151: uint16(12371), + 152: uint16(12372), + 153: uint16(12373), + 154: uint16(12374), + 155: uint16(12375), + 156: uint16(12376), + }, + 38: { + 0: uint16(12377), + 1: uint16(12378), + 2: uint16(12379), + 3: uint16(12380), + 4: uint16(12381), + 5: uint16(12382), + 6: uint16(12383), + 7: uint16(12384), + 8: uint16(12385), + 9: uint16(12386), + 10: uint16(12387), + 11: uint16(12388), + 12: uint16(12389), + 13: uint16(12390), + 14: uint16(12391), + 15: uint16(12392), + 16: uint16(12393), + 17: uint16(12394), + 18: uint16(12395), + 19: uint16(12396), + 20: uint16(12397), + 21: uint16(12398), + 22: uint16(12399), + 23: uint16(12400), + 24: uint16(12401), + 25: uint16(12402), + 26: uint16(12403), + 27: uint16(12404), + 28: uint16(12405), + 29: uint16(12406), + 30: uint16(12407), + 31: uint16(12408), + 32: uint16(12409), + 33: uint16(12410), + 34: uint16(12411), + 35: uint16(12412), + 36: uint16(12413), + 37: uint16(12414), + 38: uint16(12415), + 39: uint16(12416), + 40: uint16(12417), + 41: uint16(12418), + 42: uint16(12419), + 43: uint16(12420), + 44: uint16(12421), + 45: uint16(12422), + 46: uint16(12423), + 47: uint16(12424), + 48: uint16(12425), + 49: uint16(12426), + 50: uint16(12427), + 51: uint16(12428), + 52: uint16(12429), + 53: uint16(12430), + 54: uint16(12431), + 55: uint16(12432), + 56: uint16(12433), + 57: uint16(12434), + 58: uint16(12435), + 59: uint16(12449), + 60: uint16(12450), + 61: uint16(12451), + 62: uint16(12452), + 63: uint16(12453), + 64: uint16(12454), + 65: uint16(12455), + 66: uint16(12456), + 67: uint16(12457), + 68: uint16(12458), + 69: uint16(12459), + 70: uint16(12460), + 71: uint16(12461), + 72: uint16(12462), + 73: uint16(12463), + 74: uint16(12464), + 75: uint16(12465), + 76: uint16(12466), + 77: uint16(12467), + 78: uint16(12468), + 79: uint16(12469), + 80: uint16(12470), + 81: uint16(12471), + 82: uint16(12472), + 83: uint16(12473), + 84: uint16(12474), + 85: uint16(12475), + 86: uint16(12476), + 87: uint16(12477), + 88: uint16(12478), + 89: uint16(12479), + 90: uint16(12480), + 91: uint16(12481), + 92: uint16(12482), + 93: uint16(12483), + 94: uint16(12484), + 95: uint16(12485), + 96: uint16(12486), + 97: uint16(12487), + 98: uint16(12488), + 99: uint16(12489), + 100: uint16(12490), + 101: uint16(12491), + 102: uint16(12492), + 103: uint16(12493), + 104: uint16(12494), + 105: uint16(12495), + 106: uint16(12496), + 107: uint16(12497), + 108: uint16(12498), + 109: uint16(12499), + 110: uint16(12500), + 111: uint16(12501), + 112: uint16(12502), + 113: uint16(12503), + 114: uint16(12504), + 115: uint16(12505), + 116: uint16(12506), + 117: uint16(12507), + 118: uint16(12508), + 119: uint16(12509), + 120: uint16(12510), + 121: uint16(12511), + 122: uint16(12512), + 123: uint16(12513), + 124: uint16(12514), + 125: uint16(12515), + 126: uint16(12516), + 127: uint16(12517), + 128: uint16(12518), + 129: uint16(12519), + 130: uint16(12520), + 131: uint16(12521), + 132: uint16(12522), + 133: uint16(12523), + 134: uint16(12524), + 135: uint16(12525), + 136: uint16(12526), + 137: uint16(12527), + 138: uint16(12528), + 139: uint16(12529), + 140: uint16(12530), + 141: uint16(12531), + 142: uint16(12532), + 143: uint16(12533), + 144: uint16(12534), + 145: uint16(1040), + 146: uint16(1041), + 147: uint16(1042), + 148: uint16(1043), + 149: uint16(1044), + 150: uint16(1045), + 151: uint16(1025), + 152: uint16(1046), + 153: uint16(1047), + 154: uint16(1048), + 155: uint16(1049), + 156: uint16(1050), + }, + 39: { + 0: uint16(1051), + 1: uint16(1052), + 2: uint16(1053), + 3: uint16(1054), + 4: uint16(1055), + 5: uint16(1056), + 6: uint16(1057), + 7: uint16(1058), + 8: uint16(1059), + 9: uint16(1060), + 10: uint16(1061), + 11: uint16(1062), + 12: uint16(1063), + 13: uint16(1064), + 14: uint16(1065), + 15: uint16(1066), + 16: uint16(1067), + 17: uint16(1068), + 18: uint16(1069), + 19: uint16(1070), + 20: uint16(1071), + 21: uint16(1072), + 22: uint16(1073), + 23: uint16(1074), + 24: uint16(1075), + 25: uint16(1076), + 26: uint16(1077), + 27: uint16(1105), + 28: uint16(1078), + 29: uint16(1079), + 30: uint16(1080), + 31: uint16(1081), + 32: uint16(1082), + 33: uint16(1083), + 34: uint16(1084), + 35: uint16(1085), + 36: uint16(1086), + 37: uint16(1087), + 38: uint16(1088), + 39: uint16(1089), + 40: uint16(1090), + 41: uint16(1091), + 42: uint16(1092), + 43: uint16(1093), + 44: uint16(1094), + 45: uint16(1095), + 46: uint16(1096), + 47: uint16(1097), + 48: uint16(1098), + 49: uint16(1099), + 50: uint16(1100), + 51: uint16(1101), + 52: uint16(1102), + 53: uint16(1103), + 54: uint16(8679), + 55: uint16(8632), + 56: uint16(8633), + 57: uint16(12751), + 58: uint16(204), + 59: uint16(20058), + 60: uint16(138), + 61: uint16(20994), + 62: uint16(17553), + 63: uint16(40880), + 64: uint16(20872), + 65: uint16(40881), + 66: uint16(30215), + 107: uint16(65506), + 108: uint16(65508), + 109: uint16(65287), + 110: uint16(65282), + 111: uint16(12849), + 112: uint16(8470), + 113: uint16(8481), + 114: uint16(12443), + 115: uint16(12444), + 116: uint16(11904), + 117: uint16(11908), + 118: uint16(11910), + 119: uint16(11911), + 120: uint16(11912), + 121: uint16(11914), + 122: uint16(11916), + 123: uint16(11917), + 124: uint16(11925), + 125: uint16(11932), + 126: uint16(11933), + 127: uint16(11941), + 128: uint16(11943), + 129: uint16(11946), + 130: uint16(11948), + 131: uint16(11950), + 132: uint16(11958), + 133: uint16(11964), + 134: uint16(11966), + 135: uint16(11974), + 136: uint16(11978), + 137: uint16(11980), + 138: uint16(11981), + 139: uint16(11983), + 140: uint16(11990), + 141: uint16(11991), + 142: uint16(11998), + 143: uint16(12003), + 147: uint16(643), + 148: uint16(592), + 149: uint16(603), + 150: uint16(596), + 151: uint16(629), + 152: uint16(339), + 153: uint16(248), + 154: uint16(331), + 155: uint16(650), + 156: uint16(618), + }, + 40: { + 0: uint16(20034), + 1: uint16(20060), + 2: uint16(20981), + 3: uint16(21274), + 4: uint16(21378), + 5: uint16(19975), + 6: uint16(19980), + 7: uint16(20039), + 8: uint16(20109), + 9: uint16(22231), + 10: uint16(64012), + 11: uint16(23662), + 12: uint16(24435), + 13: uint16(19983), + 14: uint16(20871), + 15: uint16(19982), + 16: uint16(20014), + 17: uint16(20115), + 18: uint16(20162), + 19: uint16(20169), + 20: uint16(20168), + 21: uint16(20888), + 22: uint16(21244), + 23: uint16(21356), + 24: uint16(21433), + 25: uint16(22304), + 26: uint16(22787), + 27: uint16(22828), + 28: uint16(23568), + 29: uint16(24063), + 30: uint16(26081), + 31: uint16(27571), + 32: uint16(27596), + 33: uint16(27668), + 34: uint16(29247), + 35: uint16(20017), + 36: uint16(20028), + 37: uint16(20200), + 38: uint16(20188), + 39: uint16(20201), + 40: uint16(20193), + 41: uint16(20189), + 42: uint16(20186), + 43: uint16(21004), + 44: uint16(21276), + 45: uint16(21324), + 46: uint16(22306), + 47: uint16(22307), + 48: uint16(22807), + 49: uint16(22831), + 50: uint16(23425), + 51: uint16(23428), + 52: uint16(23570), + 53: uint16(23611), + 54: uint16(23668), + 55: uint16(23667), + 56: uint16(24068), + 57: uint16(24192), + 58: uint16(24194), + 59: uint16(24521), + 60: uint16(25097), + 61: uint16(25168), + 62: uint16(27669), + 63: uint16(27702), + 64: uint16(27715), + 65: uint16(27711), + 66: uint16(27707), + 67: uint16(29358), + 68: uint16(29360), + 69: uint16(29578), + 70: uint16(31160), + 71: uint16(32906), + 72: uint16(38430), + 73: uint16(20238), + 74: uint16(20248), + 75: uint16(20268), + 76: uint16(20213), + 77: uint16(20244), + 78: uint16(20209), + 79: uint16(20224), + 80: uint16(20215), + 81: uint16(20232), + 82: uint16(20253), + 83: uint16(20226), + 84: uint16(20229), + 85: uint16(20258), + 86: uint16(20243), + 87: uint16(20228), + 88: uint16(20212), + 89: uint16(20242), + 90: uint16(20913), + 91: uint16(21011), + 92: uint16(21001), + 93: uint16(21008), + 94: uint16(21158), + 95: uint16(21282), + 96: uint16(21279), + 97: uint16(21325), + 98: uint16(21386), + 99: uint16(21511), + 100: uint16(22241), + 101: uint16(22239), + 102: uint16(22318), + 103: uint16(22314), + 104: uint16(22324), + 105: uint16(22844), + 106: uint16(22912), + 107: uint16(22908), + 108: uint16(22917), + 109: uint16(22907), + 110: uint16(22910), + 111: uint16(22903), + 112: uint16(22911), + 113: uint16(23382), + 114: uint16(23573), + 115: uint16(23589), + 116: uint16(23676), + 117: uint16(23674), + 118: uint16(23675), + 119: uint16(23678), + 120: uint16(24031), + 121: uint16(24181), + 122: uint16(24196), + 123: uint16(24322), + 124: uint16(24346), + 125: uint16(24436), + 126: uint16(24533), + 127: uint16(24532), + 128: uint16(24527), + 129: uint16(25180), + 130: uint16(25182), + 131: uint16(25188), + 132: uint16(25185), + 133: uint16(25190), + 134: uint16(25186), + 135: uint16(25177), + 136: uint16(25184), + 137: uint16(25178), + 138: uint16(25189), + 139: uint16(26095), + 140: uint16(26094), + 141: uint16(26430), + 142: uint16(26425), + 143: uint16(26424), + 144: uint16(26427), + 145: uint16(26426), + 146: uint16(26431), + 147: uint16(26428), + 148: uint16(26419), + 149: uint16(27672), + 150: uint16(27718), + 151: uint16(27730), + 152: uint16(27740), + 153: uint16(27727), + 154: uint16(27722), + 155: uint16(27732), + 156: uint16(27723), + }, + 41: { + 0: uint16(27724), + 1: uint16(28785), + 2: uint16(29278), + 3: uint16(29364), + 4: uint16(29365), + 5: uint16(29582), + 6: uint16(29994), + 7: uint16(30335), + 8: uint16(31349), + 9: uint16(32593), + 10: uint16(33400), + 11: uint16(33404), + 12: uint16(33408), + 13: uint16(33405), + 14: uint16(33407), + 15: uint16(34381), + 16: uint16(35198), + 17: uint16(37017), + 18: uint16(37015), + 19: uint16(37016), + 20: uint16(37019), + 21: uint16(37012), + 22: uint16(38434), + 23: uint16(38436), + 24: uint16(38432), + 25: uint16(38435), + 26: uint16(20310), + 27: uint16(20283), + 28: uint16(20322), + 29: uint16(20297), + 30: uint16(20307), + 31: uint16(20324), + 32: uint16(20286), + 33: uint16(20327), + 34: uint16(20306), + 35: uint16(20319), + 36: uint16(20289), + 37: uint16(20312), + 38: uint16(20269), + 39: uint16(20275), + 40: uint16(20287), + 41: uint16(20321), + 42: uint16(20879), + 43: uint16(20921), + 44: uint16(21020), + 45: uint16(21022), + 46: uint16(21025), + 47: uint16(21165), + 48: uint16(21166), + 49: uint16(21257), + 50: uint16(21347), + 51: uint16(21362), + 52: uint16(21390), + 53: uint16(21391), + 54: uint16(21552), + 55: uint16(21559), + 56: uint16(21546), + 57: uint16(21588), + 58: uint16(21573), + 59: uint16(21529), + 60: uint16(21532), + 61: uint16(21541), + 62: uint16(21528), + 63: uint16(21565), + 64: uint16(21583), + 65: uint16(21569), + 66: uint16(21544), + 67: uint16(21540), + 68: uint16(21575), + 69: uint16(22254), + 70: uint16(22247), + 71: uint16(22245), + 72: uint16(22337), + 73: uint16(22341), + 74: uint16(22348), + 75: uint16(22345), + 76: uint16(22347), + 77: uint16(22354), + 78: uint16(22790), + 79: uint16(22848), + 80: uint16(22950), + 81: uint16(22936), + 82: uint16(22944), + 83: uint16(22935), + 84: uint16(22926), + 85: uint16(22946), + 86: uint16(22928), + 87: uint16(22927), + 88: uint16(22951), + 89: uint16(22945), + 90: uint16(23438), + 91: uint16(23442), + 92: uint16(23592), + 93: uint16(23594), + 94: uint16(23693), + 95: uint16(23695), + 96: uint16(23688), + 97: uint16(23691), + 98: uint16(23689), + 99: uint16(23698), + 100: uint16(23690), + 101: uint16(23686), + 102: uint16(23699), + 103: uint16(23701), + 104: uint16(24032), + 105: uint16(24074), + 106: uint16(24078), + 107: uint16(24203), + 108: uint16(24201), + 109: uint16(24204), + 110: uint16(24200), + 111: uint16(24205), + 112: uint16(24325), + 113: uint16(24349), + 114: uint16(24440), + 115: uint16(24438), + 116: uint16(24530), + 117: uint16(24529), + 118: uint16(24528), + 119: uint16(24557), + 120: uint16(24552), + 121: uint16(24558), + 122: uint16(24563), + 123: uint16(24545), + 124: uint16(24548), + 125: uint16(24547), + 126: uint16(24570), + 127: uint16(24559), + 128: uint16(24567), + 129: uint16(24571), + 130: uint16(24576), + 131: uint16(24564), + 132: uint16(25146), + 133: uint16(25219), + 134: uint16(25228), + 135: uint16(25230), + 136: uint16(25231), + 137: uint16(25236), + 138: uint16(25223), + 139: uint16(25201), + 140: uint16(25211), + 141: uint16(25210), + 142: uint16(25200), + 143: uint16(25217), + 144: uint16(25224), + 145: uint16(25207), + 146: uint16(25213), + 147: uint16(25202), + 148: uint16(25204), + 149: uint16(25911), + 150: uint16(26096), + 151: uint16(26100), + 152: uint16(26099), + 153: uint16(26098), + 154: uint16(26101), + 155: uint16(26437), + 156: uint16(26439), + }, + 42: { + 0: uint16(26457), + 1: uint16(26453), + 2: uint16(26444), + 3: uint16(26440), + 4: uint16(26461), + 5: uint16(26445), + 6: uint16(26458), + 7: uint16(26443), + 8: uint16(27600), + 9: uint16(27673), + 10: uint16(27674), + 11: uint16(27768), + 12: uint16(27751), + 13: uint16(27755), + 14: uint16(27780), + 15: uint16(27787), + 16: uint16(27791), + 17: uint16(27761), + 18: uint16(27759), + 19: uint16(27753), + 20: uint16(27802), + 21: uint16(27757), + 22: uint16(27783), + 23: uint16(27797), + 24: uint16(27804), + 25: uint16(27750), + 26: uint16(27763), + 27: uint16(27749), + 28: uint16(27771), + 29: uint16(27790), + 30: uint16(28788), + 31: uint16(28794), + 32: uint16(29283), + 33: uint16(29375), + 34: uint16(29373), + 35: uint16(29379), + 36: uint16(29382), + 37: uint16(29377), + 38: uint16(29370), + 39: uint16(29381), + 40: uint16(29589), + 41: uint16(29591), + 42: uint16(29587), + 43: uint16(29588), + 44: uint16(29586), + 45: uint16(30010), + 46: uint16(30009), + 47: uint16(30100), + 48: uint16(30101), + 49: uint16(30337), + 50: uint16(31037), + 51: uint16(32820), + 52: uint16(32917), + 53: uint16(32921), + 54: uint16(32912), + 55: uint16(32914), + 56: uint16(32924), + 57: uint16(33424), + 58: uint16(33423), + 59: uint16(33413), + 60: uint16(33422), + 61: uint16(33425), + 62: uint16(33427), + 63: uint16(33418), + 64: uint16(33411), + 65: uint16(33412), + 66: uint16(35960), + 67: uint16(36809), + 68: uint16(36799), + 69: uint16(37023), + 70: uint16(37025), + 71: uint16(37029), + 72: uint16(37022), + 73: uint16(37031), + 74: uint16(37024), + 75: uint16(38448), + 76: uint16(38440), + 77: uint16(38447), + 78: uint16(38445), + 79: uint16(20019), + 80: uint16(20376), + 81: uint16(20348), + 82: uint16(20357), + 83: uint16(20349), + 84: uint16(20352), + 85: uint16(20359), + 86: uint16(20342), + 87: uint16(20340), + 88: uint16(20361), + 89: uint16(20356), + 90: uint16(20343), + 91: uint16(20300), + 92: uint16(20375), + 93: uint16(20330), + 94: uint16(20378), + 95: uint16(20345), + 96: uint16(20353), + 97: uint16(20344), + 98: uint16(20368), + 99: uint16(20380), + 100: uint16(20372), + 101: uint16(20382), + 102: uint16(20370), + 103: uint16(20354), + 104: uint16(20373), + 105: uint16(20331), + 106: uint16(20334), + 107: uint16(20894), + 108: uint16(20924), + 109: uint16(20926), + 110: uint16(21045), + 111: uint16(21042), + 112: uint16(21043), + 113: uint16(21062), + 114: uint16(21041), + 115: uint16(21180), + 116: uint16(21258), + 117: uint16(21259), + 118: uint16(21308), + 119: uint16(21394), + 120: uint16(21396), + 121: uint16(21639), + 122: uint16(21631), + 123: uint16(21633), + 124: uint16(21649), + 125: uint16(21634), + 126: uint16(21640), + 127: uint16(21611), + 128: uint16(21626), + 129: uint16(21630), + 130: uint16(21605), + 131: uint16(21612), + 132: uint16(21620), + 133: uint16(21606), + 134: uint16(21645), + 135: uint16(21615), + 136: uint16(21601), + 137: uint16(21600), + 138: uint16(21656), + 139: uint16(21603), + 140: uint16(21607), + 141: uint16(21604), + 142: uint16(22263), + 143: uint16(22265), + 144: uint16(22383), + 145: uint16(22386), + 146: uint16(22381), + 147: uint16(22379), + 148: uint16(22385), + 149: uint16(22384), + 150: uint16(22390), + 151: uint16(22400), + 152: uint16(22389), + 153: uint16(22395), + 154: uint16(22387), + 155: uint16(22388), + 156: uint16(22370), + }, + 43: { + 0: uint16(22376), + 1: uint16(22397), + 2: uint16(22796), + 3: uint16(22853), + 4: uint16(22965), + 5: uint16(22970), + 6: uint16(22991), + 7: uint16(22990), + 8: uint16(22962), + 9: uint16(22988), + 10: uint16(22977), + 11: uint16(22966), + 12: uint16(22972), + 13: uint16(22979), + 14: uint16(22998), + 15: uint16(22961), + 16: uint16(22973), + 17: uint16(22976), + 18: uint16(22984), + 19: uint16(22964), + 20: uint16(22983), + 21: uint16(23394), + 22: uint16(23397), + 23: uint16(23443), + 24: uint16(23445), + 25: uint16(23620), + 26: uint16(23623), + 27: uint16(23726), + 28: uint16(23716), + 29: uint16(23712), + 30: uint16(23733), + 31: uint16(23727), + 32: uint16(23720), + 33: uint16(23724), + 34: uint16(23711), + 35: uint16(23715), + 36: uint16(23725), + 37: uint16(23714), + 38: uint16(23722), + 39: uint16(23719), + 40: uint16(23709), + 41: uint16(23717), + 42: uint16(23734), + 43: uint16(23728), + 44: uint16(23718), + 45: uint16(24087), + 46: uint16(24084), + 47: uint16(24089), + 48: uint16(24360), + 49: uint16(24354), + 50: uint16(24355), + 51: uint16(24356), + 52: uint16(24404), + 53: uint16(24450), + 54: uint16(24446), + 55: uint16(24445), + 56: uint16(24542), + 57: uint16(24549), + 58: uint16(24621), + 59: uint16(24614), + 60: uint16(24601), + 61: uint16(24626), + 62: uint16(24587), + 63: uint16(24628), + 64: uint16(24586), + 65: uint16(24599), + 66: uint16(24627), + 67: uint16(24602), + 68: uint16(24606), + 69: uint16(24620), + 70: uint16(24610), + 71: uint16(24589), + 72: uint16(24592), + 73: uint16(24622), + 74: uint16(24595), + 75: uint16(24593), + 76: uint16(24588), + 77: uint16(24585), + 78: uint16(24604), + 79: uint16(25108), + 80: uint16(25149), + 81: uint16(25261), + 82: uint16(25268), + 83: uint16(25297), + 84: uint16(25278), + 85: uint16(25258), + 86: uint16(25270), + 87: uint16(25290), + 88: uint16(25262), + 89: uint16(25267), + 90: uint16(25263), + 91: uint16(25275), + 92: uint16(25257), + 93: uint16(25264), + 94: uint16(25272), + 95: uint16(25917), + 96: uint16(26024), + 97: uint16(26043), + 98: uint16(26121), + 99: uint16(26108), + 100: uint16(26116), + 101: uint16(26130), + 102: uint16(26120), + 103: uint16(26107), + 104: uint16(26115), + 105: uint16(26123), + 106: uint16(26125), + 107: uint16(26117), + 108: uint16(26109), + 109: uint16(26129), + 110: uint16(26128), + 111: uint16(26358), + 112: uint16(26378), + 113: uint16(26501), + 114: uint16(26476), + 115: uint16(26510), + 116: uint16(26514), + 117: uint16(26486), + 118: uint16(26491), + 119: uint16(26520), + 120: uint16(26502), + 121: uint16(26500), + 122: uint16(26484), + 123: uint16(26509), + 124: uint16(26508), + 125: uint16(26490), + 126: uint16(26527), + 127: uint16(26513), + 128: uint16(26521), + 129: uint16(26499), + 130: uint16(26493), + 131: uint16(26497), + 132: uint16(26488), + 133: uint16(26489), + 134: uint16(26516), + 135: uint16(27429), + 136: uint16(27520), + 137: uint16(27518), + 138: uint16(27614), + 139: uint16(27677), + 140: uint16(27795), + 141: uint16(27884), + 142: uint16(27883), + 143: uint16(27886), + 144: uint16(27865), + 145: uint16(27830), + 146: uint16(27860), + 147: uint16(27821), + 148: uint16(27879), + 149: uint16(27831), + 150: uint16(27856), + 151: uint16(27842), + 152: uint16(27834), + 153: uint16(27843), + 154: uint16(27846), + 155: uint16(27885), + 156: uint16(27890), + }, + 44: { + 0: uint16(27858), + 1: uint16(27869), + 2: uint16(27828), + 3: uint16(27786), + 4: uint16(27805), + 5: uint16(27776), + 6: uint16(27870), + 7: uint16(27840), + 8: uint16(27952), + 9: uint16(27853), + 10: uint16(27847), + 11: uint16(27824), + 12: uint16(27897), + 13: uint16(27855), + 14: uint16(27881), + 15: uint16(27857), + 16: uint16(28820), + 17: uint16(28824), + 18: uint16(28805), + 19: uint16(28819), + 20: uint16(28806), + 21: uint16(28804), + 22: uint16(28817), + 23: uint16(28822), + 24: uint16(28802), + 25: uint16(28826), + 26: uint16(28803), + 27: uint16(29290), + 28: uint16(29398), + 29: uint16(29387), + 30: uint16(29400), + 31: uint16(29385), + 32: uint16(29404), + 33: uint16(29394), + 34: uint16(29396), + 35: uint16(29402), + 36: uint16(29388), + 37: uint16(29393), + 38: uint16(29604), + 39: uint16(29601), + 40: uint16(29613), + 41: uint16(29606), + 42: uint16(29602), + 43: uint16(29600), + 44: uint16(29612), + 45: uint16(29597), + 46: uint16(29917), + 47: uint16(29928), + 48: uint16(30015), + 49: uint16(30016), + 50: uint16(30014), + 51: uint16(30092), + 52: uint16(30104), + 53: uint16(30383), + 54: uint16(30451), + 55: uint16(30449), + 56: uint16(30448), + 57: uint16(30453), + 58: uint16(30712), + 59: uint16(30716), + 60: uint16(30713), + 61: uint16(30715), + 62: uint16(30714), + 63: uint16(30711), + 64: uint16(31042), + 65: uint16(31039), + 66: uint16(31173), + 67: uint16(31352), + 68: uint16(31355), + 69: uint16(31483), + 70: uint16(31861), + 71: uint16(31997), + 72: uint16(32821), + 73: uint16(32911), + 74: uint16(32942), + 75: uint16(32931), + 76: uint16(32952), + 77: uint16(32949), + 78: uint16(32941), + 79: uint16(33312), + 80: uint16(33440), + 81: uint16(33472), + 82: uint16(33451), + 83: uint16(33434), + 84: uint16(33432), + 85: uint16(33435), + 86: uint16(33461), + 87: uint16(33447), + 88: uint16(33454), + 89: uint16(33468), + 90: uint16(33438), + 91: uint16(33466), + 92: uint16(33460), + 93: uint16(33448), + 94: uint16(33441), + 95: uint16(33449), + 96: uint16(33474), + 97: uint16(33444), + 98: uint16(33475), + 99: uint16(33462), + 100: uint16(33442), + 101: uint16(34416), + 102: uint16(34415), + 103: uint16(34413), + 104: uint16(34414), + 105: uint16(35926), + 106: uint16(36818), + 107: uint16(36811), + 108: uint16(36819), + 109: uint16(36813), + 110: uint16(36822), + 111: uint16(36821), + 112: uint16(36823), + 113: uint16(37042), + 114: uint16(37044), + 115: uint16(37039), + 116: uint16(37043), + 117: uint16(37040), + 118: uint16(38457), + 119: uint16(38461), + 120: uint16(38460), + 121: uint16(38458), + 122: uint16(38467), + 123: uint16(20429), + 124: uint16(20421), + 125: uint16(20435), + 126: uint16(20402), + 127: uint16(20425), + 128: uint16(20427), + 129: uint16(20417), + 130: uint16(20436), + 131: uint16(20444), + 132: uint16(20441), + 133: uint16(20411), + 134: uint16(20403), + 135: uint16(20443), + 136: uint16(20423), + 137: uint16(20438), + 138: uint16(20410), + 139: uint16(20416), + 140: uint16(20409), + 141: uint16(20460), + 142: uint16(21060), + 143: uint16(21065), + 144: uint16(21184), + 145: uint16(21186), + 146: uint16(21309), + 147: uint16(21372), + 148: uint16(21399), + 149: uint16(21398), + 150: uint16(21401), + 151: uint16(21400), + 152: uint16(21690), + 153: uint16(21665), + 154: uint16(21677), + 155: uint16(21669), + 156: uint16(21711), + }, + 45: { + 0: uint16(21699), + 1: uint16(33549), + 2: uint16(21687), + 3: uint16(21678), + 4: uint16(21718), + 5: uint16(21686), + 6: uint16(21701), + 7: uint16(21702), + 8: uint16(21664), + 9: uint16(21616), + 10: uint16(21692), + 11: uint16(21666), + 12: uint16(21694), + 13: uint16(21618), + 14: uint16(21726), + 15: uint16(21680), + 16: uint16(22453), + 17: uint16(22430), + 18: uint16(22431), + 19: uint16(22436), + 20: uint16(22412), + 21: uint16(22423), + 22: uint16(22429), + 23: uint16(22427), + 24: uint16(22420), + 25: uint16(22424), + 26: uint16(22415), + 27: uint16(22425), + 28: uint16(22437), + 29: uint16(22426), + 30: uint16(22421), + 31: uint16(22772), + 32: uint16(22797), + 33: uint16(22867), + 34: uint16(23009), + 35: uint16(23006), + 36: uint16(23022), + 37: uint16(23040), + 38: uint16(23025), + 39: uint16(23005), + 40: uint16(23034), + 41: uint16(23037), + 42: uint16(23036), + 43: uint16(23030), + 44: uint16(23012), + 45: uint16(23026), + 46: uint16(23031), + 47: uint16(23003), + 48: uint16(23017), + 49: uint16(23027), + 50: uint16(23029), + 51: uint16(23008), + 52: uint16(23038), + 53: uint16(23028), + 54: uint16(23021), + 55: uint16(23464), + 56: uint16(23628), + 57: uint16(23760), + 58: uint16(23768), + 59: uint16(23756), + 60: uint16(23767), + 61: uint16(23755), + 62: uint16(23771), + 63: uint16(23774), + 64: uint16(23770), + 65: uint16(23753), + 66: uint16(23751), + 67: uint16(23754), + 68: uint16(23766), + 69: uint16(23763), + 70: uint16(23764), + 71: uint16(23759), + 72: uint16(23752), + 73: uint16(23750), + 74: uint16(23758), + 75: uint16(23775), + 76: uint16(23800), + 77: uint16(24057), + 78: uint16(24097), + 79: uint16(24098), + 80: uint16(24099), + 81: uint16(24096), + 82: uint16(24100), + 83: uint16(24240), + 84: uint16(24228), + 85: uint16(24226), + 86: uint16(24219), + 87: uint16(24227), + 88: uint16(24229), + 89: uint16(24327), + 90: uint16(24366), + 91: uint16(24406), + 92: uint16(24454), + 93: uint16(24631), + 94: uint16(24633), + 95: uint16(24660), + 96: uint16(24690), + 97: uint16(24670), + 98: uint16(24645), + 99: uint16(24659), + 100: uint16(24647), + 101: uint16(24649), + 102: uint16(24667), + 103: uint16(24652), + 104: uint16(24640), + 105: uint16(24642), + 106: uint16(24671), + 107: uint16(24612), + 108: uint16(24644), + 109: uint16(24664), + 110: uint16(24678), + 111: uint16(24686), + 112: uint16(25154), + 113: uint16(25155), + 114: uint16(25295), + 115: uint16(25357), + 116: uint16(25355), + 117: uint16(25333), + 118: uint16(25358), + 119: uint16(25347), + 120: uint16(25323), + 121: uint16(25337), + 122: uint16(25359), + 123: uint16(25356), + 124: uint16(25336), + 125: uint16(25334), + 126: uint16(25344), + 127: uint16(25363), + 128: uint16(25364), + 129: uint16(25338), + 130: uint16(25365), + 131: uint16(25339), + 132: uint16(25328), + 133: uint16(25921), + 134: uint16(25923), + 135: uint16(26026), + 136: uint16(26047), + 137: uint16(26166), + 138: uint16(26145), + 139: uint16(26162), + 140: uint16(26165), + 141: uint16(26140), + 142: uint16(26150), + 143: uint16(26146), + 144: uint16(26163), + 145: uint16(26155), + 146: uint16(26170), + 147: uint16(26141), + 148: uint16(26164), + 149: uint16(26169), + 150: uint16(26158), + 151: uint16(26383), + 152: uint16(26384), + 153: uint16(26561), + 154: uint16(26610), + 155: uint16(26568), + 156: uint16(26554), + }, + 46: { + 0: uint16(26588), + 1: uint16(26555), + 2: uint16(26616), + 3: uint16(26584), + 4: uint16(26560), + 5: uint16(26551), + 6: uint16(26565), + 7: uint16(26603), + 8: uint16(26596), + 9: uint16(26591), + 10: uint16(26549), + 11: uint16(26573), + 12: uint16(26547), + 13: uint16(26615), + 14: uint16(26614), + 15: uint16(26606), + 16: uint16(26595), + 17: uint16(26562), + 18: uint16(26553), + 19: uint16(26574), + 20: uint16(26599), + 21: uint16(26608), + 22: uint16(26546), + 23: uint16(26620), + 24: uint16(26566), + 25: uint16(26605), + 26: uint16(26572), + 27: uint16(26542), + 28: uint16(26598), + 29: uint16(26587), + 30: uint16(26618), + 31: uint16(26569), + 32: uint16(26570), + 33: uint16(26563), + 34: uint16(26602), + 35: uint16(26571), + 36: uint16(27432), + 37: uint16(27522), + 38: uint16(27524), + 39: uint16(27574), + 40: uint16(27606), + 41: uint16(27608), + 42: uint16(27616), + 43: uint16(27680), + 44: uint16(27681), + 45: uint16(27944), + 46: uint16(27956), + 47: uint16(27949), + 48: uint16(27935), + 49: uint16(27964), + 50: uint16(27967), + 51: uint16(27922), + 52: uint16(27914), + 53: uint16(27866), + 54: uint16(27955), + 55: uint16(27908), + 56: uint16(27929), + 57: uint16(27962), + 58: uint16(27930), + 59: uint16(27921), + 60: uint16(27904), + 61: uint16(27933), + 62: uint16(27970), + 63: uint16(27905), + 64: uint16(27928), + 65: uint16(27959), + 66: uint16(27907), + 67: uint16(27919), + 68: uint16(27968), + 69: uint16(27911), + 70: uint16(27936), + 71: uint16(27948), + 72: uint16(27912), + 73: uint16(27938), + 74: uint16(27913), + 75: uint16(27920), + 76: uint16(28855), + 77: uint16(28831), + 78: uint16(28862), + 79: uint16(28849), + 80: uint16(28848), + 81: uint16(28833), + 82: uint16(28852), + 83: uint16(28853), + 84: uint16(28841), + 85: uint16(29249), + 86: uint16(29257), + 87: uint16(29258), + 88: uint16(29292), + 89: uint16(29296), + 90: uint16(29299), + 91: uint16(29294), + 92: uint16(29386), + 93: uint16(29412), + 94: uint16(29416), + 95: uint16(29419), + 96: uint16(29407), + 97: uint16(29418), + 98: uint16(29414), + 99: uint16(29411), + 100: uint16(29573), + 101: uint16(29644), + 102: uint16(29634), + 103: uint16(29640), + 104: uint16(29637), + 105: uint16(29625), + 106: uint16(29622), + 107: uint16(29621), + 108: uint16(29620), + 109: uint16(29675), + 110: uint16(29631), + 111: uint16(29639), + 112: uint16(29630), + 113: uint16(29635), + 114: uint16(29638), + 115: uint16(29624), + 116: uint16(29643), + 117: uint16(29932), + 118: uint16(29934), + 119: uint16(29998), + 120: uint16(30023), + 121: uint16(30024), + 122: uint16(30119), + 123: uint16(30122), + 124: uint16(30329), + 125: uint16(30404), + 126: uint16(30472), + 127: uint16(30467), + 128: uint16(30468), + 129: uint16(30469), + 130: uint16(30474), + 131: uint16(30455), + 132: uint16(30459), + 133: uint16(30458), + 134: uint16(30695), + 135: uint16(30696), + 136: uint16(30726), + 137: uint16(30737), + 138: uint16(30738), + 139: uint16(30725), + 140: uint16(30736), + 141: uint16(30735), + 142: uint16(30734), + 143: uint16(30729), + 144: uint16(30723), + 145: uint16(30739), + 146: uint16(31050), + 147: uint16(31052), + 148: uint16(31051), + 149: uint16(31045), + 150: uint16(31044), + 151: uint16(31189), + 152: uint16(31181), + 153: uint16(31183), + 154: uint16(31190), + 155: uint16(31182), + 156: uint16(31360), + }, + 47: { + 0: uint16(31358), + 1: uint16(31441), + 2: uint16(31488), + 3: uint16(31489), + 4: uint16(31866), + 5: uint16(31864), + 6: uint16(31865), + 7: uint16(31871), + 8: uint16(31872), + 9: uint16(31873), + 10: uint16(32003), + 11: uint16(32008), + 12: uint16(32001), + 13: uint16(32600), + 14: uint16(32657), + 15: uint16(32653), + 16: uint16(32702), + 17: uint16(32775), + 18: uint16(32782), + 19: uint16(32783), + 20: uint16(32788), + 21: uint16(32823), + 22: uint16(32984), + 23: uint16(32967), + 24: uint16(32992), + 25: uint16(32977), + 26: uint16(32968), + 27: uint16(32962), + 28: uint16(32976), + 29: uint16(32965), + 30: uint16(32995), + 31: uint16(32985), + 32: uint16(32988), + 33: uint16(32970), + 34: uint16(32981), + 35: uint16(32969), + 36: uint16(32975), + 37: uint16(32983), + 38: uint16(32998), + 39: uint16(32973), + 40: uint16(33279), + 41: uint16(33313), + 42: uint16(33428), + 43: uint16(33497), + 44: uint16(33534), + 45: uint16(33529), + 46: uint16(33543), + 47: uint16(33512), + 48: uint16(33536), + 49: uint16(33493), + 50: uint16(33594), + 51: uint16(33515), + 52: uint16(33494), + 53: uint16(33524), + 54: uint16(33516), + 55: uint16(33505), + 56: uint16(33522), + 57: uint16(33525), + 58: uint16(33548), + 59: uint16(33531), + 60: uint16(33526), + 61: uint16(33520), + 62: uint16(33514), + 63: uint16(33508), + 64: uint16(33504), + 65: uint16(33530), + 66: uint16(33523), + 67: uint16(33517), + 68: uint16(34423), + 69: uint16(34420), + 70: uint16(34428), + 71: uint16(34419), + 72: uint16(34881), + 73: uint16(34894), + 74: uint16(34919), + 75: uint16(34922), + 76: uint16(34921), + 77: uint16(35283), + 78: uint16(35332), + 79: uint16(35335), + 80: uint16(36210), + 81: uint16(36835), + 82: uint16(36833), + 83: uint16(36846), + 84: uint16(36832), + 85: uint16(37105), + 86: uint16(37053), + 87: uint16(37055), + 88: uint16(37077), + 89: uint16(37061), + 90: uint16(37054), + 91: uint16(37063), + 92: uint16(37067), + 93: uint16(37064), + 94: uint16(37332), + 95: uint16(37331), + 96: uint16(38484), + 97: uint16(38479), + 98: uint16(38481), + 99: uint16(38483), + 100: uint16(38474), + 101: uint16(38478), + 102: uint16(20510), + 103: uint16(20485), + 104: uint16(20487), + 105: uint16(20499), + 106: uint16(20514), + 107: uint16(20528), + 108: uint16(20507), + 109: uint16(20469), + 110: uint16(20468), + 111: uint16(20531), + 112: uint16(20535), + 113: uint16(20524), + 114: uint16(20470), + 115: uint16(20471), + 116: uint16(20503), + 117: uint16(20508), + 118: uint16(20512), + 119: uint16(20519), + 120: uint16(20533), + 121: uint16(20527), + 122: uint16(20529), + 123: uint16(20494), + 124: uint16(20826), + 125: uint16(20884), + 126: uint16(20883), + 127: uint16(20938), + 128: uint16(20932), + 129: uint16(20933), + 130: uint16(20936), + 131: uint16(20942), + 132: uint16(21089), + 133: uint16(21082), + 134: uint16(21074), + 135: uint16(21086), + 136: uint16(21087), + 137: uint16(21077), + 138: uint16(21090), + 139: uint16(21197), + 140: uint16(21262), + 141: uint16(21406), + 142: uint16(21798), + 143: uint16(21730), + 144: uint16(21783), + 145: uint16(21778), + 146: uint16(21735), + 147: uint16(21747), + 148: uint16(21732), + 149: uint16(21786), + 150: uint16(21759), + 151: uint16(21764), + 152: uint16(21768), + 153: uint16(21739), + 154: uint16(21777), + 155: uint16(21765), + 156: uint16(21745), + }, + 48: { + 0: uint16(21770), + 1: uint16(21755), + 2: uint16(21751), + 3: uint16(21752), + 4: uint16(21728), + 5: uint16(21774), + 6: uint16(21763), + 7: uint16(21771), + 8: uint16(22273), + 9: uint16(22274), + 10: uint16(22476), + 11: uint16(22578), + 12: uint16(22485), + 13: uint16(22482), + 14: uint16(22458), + 15: uint16(22470), + 16: uint16(22461), + 17: uint16(22460), + 18: uint16(22456), + 19: uint16(22454), + 20: uint16(22463), + 21: uint16(22471), + 22: uint16(22480), + 23: uint16(22457), + 24: uint16(22465), + 25: uint16(22798), + 26: uint16(22858), + 27: uint16(23065), + 28: uint16(23062), + 29: uint16(23085), + 30: uint16(23086), + 31: uint16(23061), + 32: uint16(23055), + 33: uint16(23063), + 34: uint16(23050), + 35: uint16(23070), + 36: uint16(23091), + 37: uint16(23404), + 38: uint16(23463), + 39: uint16(23469), + 40: uint16(23468), + 41: uint16(23555), + 42: uint16(23638), + 43: uint16(23636), + 44: uint16(23788), + 45: uint16(23807), + 46: uint16(23790), + 47: uint16(23793), + 48: uint16(23799), + 49: uint16(23808), + 50: uint16(23801), + 51: uint16(24105), + 52: uint16(24104), + 53: uint16(24232), + 54: uint16(24238), + 55: uint16(24234), + 56: uint16(24236), + 57: uint16(24371), + 58: uint16(24368), + 59: uint16(24423), + 60: uint16(24669), + 61: uint16(24666), + 62: uint16(24679), + 63: uint16(24641), + 64: uint16(24738), + 65: uint16(24712), + 66: uint16(24704), + 67: uint16(24722), + 68: uint16(24705), + 69: uint16(24733), + 70: uint16(24707), + 71: uint16(24725), + 72: uint16(24731), + 73: uint16(24727), + 74: uint16(24711), + 75: uint16(24732), + 76: uint16(24718), + 77: uint16(25113), + 78: uint16(25158), + 79: uint16(25330), + 80: uint16(25360), + 81: uint16(25430), + 82: uint16(25388), + 83: uint16(25412), + 84: uint16(25413), + 85: uint16(25398), + 86: uint16(25411), + 87: uint16(25572), + 88: uint16(25401), + 89: uint16(25419), + 90: uint16(25418), + 91: uint16(25404), + 92: uint16(25385), + 93: uint16(25409), + 94: uint16(25396), + 95: uint16(25432), + 96: uint16(25428), + 97: uint16(25433), + 98: uint16(25389), + 99: uint16(25415), + 100: uint16(25395), + 101: uint16(25434), + 102: uint16(25425), + 103: uint16(25400), + 104: uint16(25431), + 105: uint16(25408), + 106: uint16(25416), + 107: uint16(25930), + 108: uint16(25926), + 109: uint16(26054), + 110: uint16(26051), + 111: uint16(26052), + 112: uint16(26050), + 113: uint16(26186), + 114: uint16(26207), + 115: uint16(26183), + 116: uint16(26193), + 117: uint16(26386), + 118: uint16(26387), + 119: uint16(26655), + 120: uint16(26650), + 121: uint16(26697), + 122: uint16(26674), + 123: uint16(26675), + 124: uint16(26683), + 125: uint16(26699), + 126: uint16(26703), + 127: uint16(26646), + 128: uint16(26673), + 129: uint16(26652), + 130: uint16(26677), + 131: uint16(26667), + 132: uint16(26669), + 133: uint16(26671), + 134: uint16(26702), + 135: uint16(26692), + 136: uint16(26676), + 137: uint16(26653), + 138: uint16(26642), + 139: uint16(26644), + 140: uint16(26662), + 141: uint16(26664), + 142: uint16(26670), + 143: uint16(26701), + 144: uint16(26682), + 145: uint16(26661), + 146: uint16(26656), + 147: uint16(27436), + 148: uint16(27439), + 149: uint16(27437), + 150: uint16(27441), + 151: uint16(27444), + 152: uint16(27501), + 153: uint16(32898), + 154: uint16(27528), + 155: uint16(27622), + 156: uint16(27620), + }, + 49: { + 0: uint16(27624), + 1: uint16(27619), + 2: uint16(27618), + 3: uint16(27623), + 4: uint16(27685), + 5: uint16(28026), + 6: uint16(28003), + 7: uint16(28004), + 8: uint16(28022), + 9: uint16(27917), + 10: uint16(28001), + 11: uint16(28050), + 12: uint16(27992), + 13: uint16(28002), + 14: uint16(28013), + 15: uint16(28015), + 16: uint16(28049), + 17: uint16(28045), + 18: uint16(28143), + 19: uint16(28031), + 20: uint16(28038), + 21: uint16(27998), + 22: uint16(28007), + 23: uint16(28000), + 24: uint16(28055), + 25: uint16(28016), + 26: uint16(28028), + 27: uint16(27999), + 28: uint16(28034), + 29: uint16(28056), + 30: uint16(27951), + 31: uint16(28008), + 32: uint16(28043), + 33: uint16(28030), + 34: uint16(28032), + 35: uint16(28036), + 36: uint16(27926), + 37: uint16(28035), + 38: uint16(28027), + 39: uint16(28029), + 40: uint16(28021), + 41: uint16(28048), + 42: uint16(28892), + 43: uint16(28883), + 44: uint16(28881), + 45: uint16(28893), + 46: uint16(28875), + 47: uint16(32569), + 48: uint16(28898), + 49: uint16(28887), + 50: uint16(28882), + 51: uint16(28894), + 52: uint16(28896), + 53: uint16(28884), + 54: uint16(28877), + 55: uint16(28869), + 56: uint16(28870), + 57: uint16(28871), + 58: uint16(28890), + 59: uint16(28878), + 60: uint16(28897), + 61: uint16(29250), + 62: uint16(29304), + 63: uint16(29303), + 64: uint16(29302), + 65: uint16(29440), + 66: uint16(29434), + 67: uint16(29428), + 68: uint16(29438), + 69: uint16(29430), + 70: uint16(29427), + 71: uint16(29435), + 72: uint16(29441), + 73: uint16(29651), + 74: uint16(29657), + 75: uint16(29669), + 76: uint16(29654), + 77: uint16(29628), + 78: uint16(29671), + 79: uint16(29667), + 80: uint16(29673), + 81: uint16(29660), + 82: uint16(29650), + 83: uint16(29659), + 84: uint16(29652), + 85: uint16(29661), + 86: uint16(29658), + 87: uint16(29655), + 88: uint16(29656), + 89: uint16(29672), + 90: uint16(29918), + 91: uint16(29919), + 92: uint16(29940), + 93: uint16(29941), + 94: uint16(29985), + 95: uint16(30043), + 96: uint16(30047), + 97: uint16(30128), + 98: uint16(30145), + 99: uint16(30139), + 100: uint16(30148), + 101: uint16(30144), + 102: uint16(30143), + 103: uint16(30134), + 104: uint16(30138), + 105: uint16(30346), + 106: uint16(30409), + 107: uint16(30493), + 108: uint16(30491), + 109: uint16(30480), + 110: uint16(30483), + 111: uint16(30482), + 112: uint16(30499), + 113: uint16(30481), + 114: uint16(30485), + 115: uint16(30489), + 116: uint16(30490), + 117: uint16(30498), + 118: uint16(30503), + 119: uint16(30755), + 120: uint16(30764), + 121: uint16(30754), + 122: uint16(30773), + 123: uint16(30767), + 124: uint16(30760), + 125: uint16(30766), + 126: uint16(30763), + 127: uint16(30753), + 128: uint16(30761), + 129: uint16(30771), + 130: uint16(30762), + 131: uint16(30769), + 132: uint16(31060), + 133: uint16(31067), + 134: uint16(31055), + 135: uint16(31068), + 136: uint16(31059), + 137: uint16(31058), + 138: uint16(31057), + 139: uint16(31211), + 140: uint16(31212), + 141: uint16(31200), + 142: uint16(31214), + 143: uint16(31213), + 144: uint16(31210), + 145: uint16(31196), + 146: uint16(31198), + 147: uint16(31197), + 148: uint16(31366), + 149: uint16(31369), + 150: uint16(31365), + 151: uint16(31371), + 152: uint16(31372), + 153: uint16(31370), + 154: uint16(31367), + 155: uint16(31448), + 156: uint16(31504), + }, + 50: { + 0: uint16(31492), + 1: uint16(31507), + 2: uint16(31493), + 3: uint16(31503), + 4: uint16(31496), + 5: uint16(31498), + 6: uint16(31502), + 7: uint16(31497), + 8: uint16(31506), + 9: uint16(31876), + 10: uint16(31889), + 11: uint16(31882), + 12: uint16(31884), + 13: uint16(31880), + 14: uint16(31885), + 15: uint16(31877), + 16: uint16(32030), + 17: uint16(32029), + 18: uint16(32017), + 19: uint16(32014), + 20: uint16(32024), + 21: uint16(32022), + 22: uint16(32019), + 23: uint16(32031), + 24: uint16(32018), + 25: uint16(32015), + 26: uint16(32012), + 27: uint16(32604), + 28: uint16(32609), + 29: uint16(32606), + 30: uint16(32608), + 31: uint16(32605), + 32: uint16(32603), + 33: uint16(32662), + 34: uint16(32658), + 35: uint16(32707), + 36: uint16(32706), + 37: uint16(32704), + 38: uint16(32790), + 39: uint16(32830), + 40: uint16(32825), + 41: uint16(33018), + 42: uint16(33010), + 43: uint16(33017), + 44: uint16(33013), + 45: uint16(33025), + 46: uint16(33019), + 47: uint16(33024), + 48: uint16(33281), + 49: uint16(33327), + 50: uint16(33317), + 51: uint16(33587), + 52: uint16(33581), + 53: uint16(33604), + 54: uint16(33561), + 55: uint16(33617), + 56: uint16(33573), + 57: uint16(33622), + 58: uint16(33599), + 59: uint16(33601), + 60: uint16(33574), + 61: uint16(33564), + 62: uint16(33570), + 63: uint16(33602), + 64: uint16(33614), + 65: uint16(33563), + 66: uint16(33578), + 67: uint16(33544), + 68: uint16(33596), + 69: uint16(33613), + 70: uint16(33558), + 71: uint16(33572), + 72: uint16(33568), + 73: uint16(33591), + 74: uint16(33583), + 75: uint16(33577), + 76: uint16(33607), + 77: uint16(33605), + 78: uint16(33612), + 79: uint16(33619), + 80: uint16(33566), + 81: uint16(33580), + 82: uint16(33611), + 83: uint16(33575), + 84: uint16(33608), + 85: uint16(34387), + 86: uint16(34386), + 87: uint16(34466), + 88: uint16(34472), + 89: uint16(34454), + 90: uint16(34445), + 91: uint16(34449), + 92: uint16(34462), + 93: uint16(34439), + 94: uint16(34455), + 95: uint16(34438), + 96: uint16(34443), + 97: uint16(34458), + 98: uint16(34437), + 99: uint16(34469), + 100: uint16(34457), + 101: uint16(34465), + 102: uint16(34471), + 103: uint16(34453), + 104: uint16(34456), + 105: uint16(34446), + 106: uint16(34461), + 107: uint16(34448), + 108: uint16(34452), + 109: uint16(34883), + 110: uint16(34884), + 111: uint16(34925), + 112: uint16(34933), + 113: uint16(34934), + 114: uint16(34930), + 115: uint16(34944), + 116: uint16(34929), + 117: uint16(34943), + 118: uint16(34927), + 119: uint16(34947), + 120: uint16(34942), + 121: uint16(34932), + 122: uint16(34940), + 123: uint16(35346), + 124: uint16(35911), + 125: uint16(35927), + 126: uint16(35963), + 127: uint16(36004), + 128: uint16(36003), + 129: uint16(36214), + 130: uint16(36216), + 131: uint16(36277), + 132: uint16(36279), + 133: uint16(36278), + 134: uint16(36561), + 135: uint16(36563), + 136: uint16(36862), + 137: uint16(36853), + 138: uint16(36866), + 139: uint16(36863), + 140: uint16(36859), + 141: uint16(36868), + 142: uint16(36860), + 143: uint16(36854), + 144: uint16(37078), + 145: uint16(37088), + 146: uint16(37081), + 147: uint16(37082), + 148: uint16(37091), + 149: uint16(37087), + 150: uint16(37093), + 151: uint16(37080), + 152: uint16(37083), + 153: uint16(37079), + 154: uint16(37084), + 155: uint16(37092), + 156: uint16(37200), + }, + 51: { + 0: uint16(37198), + 1: uint16(37199), + 2: uint16(37333), + 3: uint16(37346), + 4: uint16(37338), + 5: uint16(38492), + 6: uint16(38495), + 7: uint16(38588), + 8: uint16(39139), + 9: uint16(39647), + 10: uint16(39727), + 11: uint16(20095), + 12: uint16(20592), + 13: uint16(20586), + 14: uint16(20577), + 15: uint16(20574), + 16: uint16(20576), + 17: uint16(20563), + 18: uint16(20555), + 19: uint16(20573), + 20: uint16(20594), + 21: uint16(20552), + 22: uint16(20557), + 23: uint16(20545), + 24: uint16(20571), + 25: uint16(20554), + 26: uint16(20578), + 27: uint16(20501), + 28: uint16(20549), + 29: uint16(20575), + 30: uint16(20585), + 31: uint16(20587), + 32: uint16(20579), + 33: uint16(20580), + 34: uint16(20550), + 35: uint16(20544), + 36: uint16(20590), + 37: uint16(20595), + 38: uint16(20567), + 39: uint16(20561), + 40: uint16(20944), + 41: uint16(21099), + 42: uint16(21101), + 43: uint16(21100), + 44: uint16(21102), + 45: uint16(21206), + 46: uint16(21203), + 47: uint16(21293), + 48: uint16(21404), + 49: uint16(21877), + 50: uint16(21878), + 51: uint16(21820), + 52: uint16(21837), + 53: uint16(21840), + 54: uint16(21812), + 55: uint16(21802), + 56: uint16(21841), + 57: uint16(21858), + 58: uint16(21814), + 59: uint16(21813), + 60: uint16(21808), + 61: uint16(21842), + 62: uint16(21829), + 63: uint16(21772), + 64: uint16(21810), + 65: uint16(21861), + 66: uint16(21838), + 67: uint16(21817), + 68: uint16(21832), + 69: uint16(21805), + 70: uint16(21819), + 71: uint16(21824), + 72: uint16(21835), + 73: uint16(22282), + 74: uint16(22279), + 75: uint16(22523), + 76: uint16(22548), + 77: uint16(22498), + 78: uint16(22518), + 79: uint16(22492), + 80: uint16(22516), + 81: uint16(22528), + 82: uint16(22509), + 83: uint16(22525), + 84: uint16(22536), + 85: uint16(22520), + 86: uint16(22539), + 87: uint16(22515), + 88: uint16(22479), + 89: uint16(22535), + 90: uint16(22510), + 91: uint16(22499), + 92: uint16(22514), + 93: uint16(22501), + 94: uint16(22508), + 95: uint16(22497), + 96: uint16(22542), + 97: uint16(22524), + 98: uint16(22544), + 99: uint16(22503), + 100: uint16(22529), + 101: uint16(22540), + 102: uint16(22513), + 103: uint16(22505), + 104: uint16(22512), + 105: uint16(22541), + 106: uint16(22532), + 107: uint16(22876), + 108: uint16(23136), + 109: uint16(23128), + 110: uint16(23125), + 111: uint16(23143), + 112: uint16(23134), + 113: uint16(23096), + 114: uint16(23093), + 115: uint16(23149), + 116: uint16(23120), + 117: uint16(23135), + 118: uint16(23141), + 119: uint16(23148), + 120: uint16(23123), + 121: uint16(23140), + 122: uint16(23127), + 123: uint16(23107), + 124: uint16(23133), + 125: uint16(23122), + 126: uint16(23108), + 127: uint16(23131), + 128: uint16(23112), + 129: uint16(23182), + 130: uint16(23102), + 131: uint16(23117), + 132: uint16(23097), + 133: uint16(23116), + 134: uint16(23152), + 135: uint16(23145), + 136: uint16(23111), + 137: uint16(23121), + 138: uint16(23126), + 139: uint16(23106), + 140: uint16(23132), + 141: uint16(23410), + 142: uint16(23406), + 143: uint16(23489), + 144: uint16(23488), + 145: uint16(23641), + 146: uint16(23838), + 147: uint16(23819), + 148: uint16(23837), + 149: uint16(23834), + 150: uint16(23840), + 151: uint16(23820), + 152: uint16(23848), + 153: uint16(23821), + 154: uint16(23846), + 155: uint16(23845), + 156: uint16(23823), + }, + 52: { + 0: uint16(23856), + 1: uint16(23826), + 2: uint16(23843), + 3: uint16(23839), + 4: uint16(23854), + 5: uint16(24126), + 6: uint16(24116), + 7: uint16(24241), + 8: uint16(24244), + 9: uint16(24249), + 10: uint16(24242), + 11: uint16(24243), + 12: uint16(24374), + 13: uint16(24376), + 14: uint16(24475), + 15: uint16(24470), + 16: uint16(24479), + 17: uint16(24714), + 18: uint16(24720), + 19: uint16(24710), + 20: uint16(24766), + 21: uint16(24752), + 22: uint16(24762), + 23: uint16(24787), + 24: uint16(24788), + 25: uint16(24783), + 26: uint16(24804), + 27: uint16(24793), + 28: uint16(24797), + 29: uint16(24776), + 30: uint16(24753), + 31: uint16(24795), + 32: uint16(24759), + 33: uint16(24778), + 34: uint16(24767), + 35: uint16(24771), + 36: uint16(24781), + 37: uint16(24768), + 38: uint16(25394), + 39: uint16(25445), + 40: uint16(25482), + 41: uint16(25474), + 42: uint16(25469), + 43: uint16(25533), + 44: uint16(25502), + 45: uint16(25517), + 46: uint16(25501), + 47: uint16(25495), + 48: uint16(25515), + 49: uint16(25486), + 50: uint16(25455), + 51: uint16(25479), + 52: uint16(25488), + 53: uint16(25454), + 54: uint16(25519), + 55: uint16(25461), + 56: uint16(25500), + 57: uint16(25453), + 58: uint16(25518), + 59: uint16(25468), + 60: uint16(25508), + 61: uint16(25403), + 62: uint16(25503), + 63: uint16(25464), + 64: uint16(25477), + 65: uint16(25473), + 66: uint16(25489), + 67: uint16(25485), + 68: uint16(25456), + 69: uint16(25939), + 70: uint16(26061), + 71: uint16(26213), + 72: uint16(26209), + 73: uint16(26203), + 74: uint16(26201), + 75: uint16(26204), + 76: uint16(26210), + 77: uint16(26392), + 78: uint16(26745), + 79: uint16(26759), + 80: uint16(26768), + 81: uint16(26780), + 82: uint16(26733), + 83: uint16(26734), + 84: uint16(26798), + 85: uint16(26795), + 86: uint16(26966), + 87: uint16(26735), + 88: uint16(26787), + 89: uint16(26796), + 90: uint16(26793), + 91: uint16(26741), + 92: uint16(26740), + 93: uint16(26802), + 94: uint16(26767), + 95: uint16(26743), + 96: uint16(26770), + 97: uint16(26748), + 98: uint16(26731), + 99: uint16(26738), + 100: uint16(26794), + 101: uint16(26752), + 102: uint16(26737), + 103: uint16(26750), + 104: uint16(26779), + 105: uint16(26774), + 106: uint16(26763), + 107: uint16(26784), + 108: uint16(26761), + 109: uint16(26788), + 110: uint16(26744), + 111: uint16(26747), + 112: uint16(26769), + 113: uint16(26764), + 114: uint16(26762), + 115: uint16(26749), + 116: uint16(27446), + 117: uint16(27443), + 118: uint16(27447), + 119: uint16(27448), + 120: uint16(27537), + 121: uint16(27535), + 122: uint16(27533), + 123: uint16(27534), + 124: uint16(27532), + 125: uint16(27690), + 126: uint16(28096), + 127: uint16(28075), + 128: uint16(28084), + 129: uint16(28083), + 130: uint16(28276), + 131: uint16(28076), + 132: uint16(28137), + 133: uint16(28130), + 134: uint16(28087), + 135: uint16(28150), + 136: uint16(28116), + 137: uint16(28160), + 138: uint16(28104), + 139: uint16(28128), + 140: uint16(28127), + 141: uint16(28118), + 142: uint16(28094), + 143: uint16(28133), + 144: uint16(28124), + 145: uint16(28125), + 146: uint16(28123), + 147: uint16(28148), + 148: uint16(28106), + 149: uint16(28093), + 150: uint16(28141), + 151: uint16(28144), + 152: uint16(28090), + 153: uint16(28117), + 154: uint16(28098), + 155: uint16(28111), + 156: uint16(28105), + }, + 53: { + 0: uint16(28112), + 1: uint16(28146), + 2: uint16(28115), + 3: uint16(28157), + 4: uint16(28119), + 5: uint16(28109), + 6: uint16(28131), + 7: uint16(28091), + 8: uint16(28922), + 9: uint16(28941), + 10: uint16(28919), + 11: uint16(28951), + 12: uint16(28916), + 13: uint16(28940), + 14: uint16(28912), + 15: uint16(28932), + 16: uint16(28915), + 17: uint16(28944), + 18: uint16(28924), + 19: uint16(28927), + 20: uint16(28934), + 21: uint16(28947), + 22: uint16(28928), + 23: uint16(28920), + 24: uint16(28918), + 25: uint16(28939), + 26: uint16(28930), + 27: uint16(28942), + 28: uint16(29310), + 29: uint16(29307), + 30: uint16(29308), + 31: uint16(29311), + 32: uint16(29469), + 33: uint16(29463), + 34: uint16(29447), + 35: uint16(29457), + 36: uint16(29464), + 37: uint16(29450), + 38: uint16(29448), + 39: uint16(29439), + 40: uint16(29455), + 41: uint16(29470), + 42: uint16(29576), + 43: uint16(29686), + 44: uint16(29688), + 45: uint16(29685), + 46: uint16(29700), + 47: uint16(29697), + 48: uint16(29693), + 49: uint16(29703), + 50: uint16(29696), + 51: uint16(29690), + 52: uint16(29692), + 53: uint16(29695), + 54: uint16(29708), + 55: uint16(29707), + 56: uint16(29684), + 57: uint16(29704), + 58: uint16(30052), + 59: uint16(30051), + 60: uint16(30158), + 61: uint16(30162), + 62: uint16(30159), + 63: uint16(30155), + 64: uint16(30156), + 65: uint16(30161), + 66: uint16(30160), + 67: uint16(30351), + 68: uint16(30345), + 69: uint16(30419), + 70: uint16(30521), + 71: uint16(30511), + 72: uint16(30509), + 73: uint16(30513), + 74: uint16(30514), + 75: uint16(30516), + 76: uint16(30515), + 77: uint16(30525), + 78: uint16(30501), + 79: uint16(30523), + 80: uint16(30517), + 81: uint16(30792), + 82: uint16(30802), + 83: uint16(30793), + 84: uint16(30797), + 85: uint16(30794), + 86: uint16(30796), + 87: uint16(30758), + 88: uint16(30789), + 89: uint16(30800), + 90: uint16(31076), + 91: uint16(31079), + 92: uint16(31081), + 93: uint16(31082), + 94: uint16(31075), + 95: uint16(31083), + 96: uint16(31073), + 97: uint16(31163), + 98: uint16(31226), + 99: uint16(31224), + 100: uint16(31222), + 101: uint16(31223), + 102: uint16(31375), + 103: uint16(31380), + 104: uint16(31376), + 105: uint16(31541), + 106: uint16(31559), + 107: uint16(31540), + 108: uint16(31525), + 109: uint16(31536), + 110: uint16(31522), + 111: uint16(31524), + 112: uint16(31539), + 113: uint16(31512), + 114: uint16(31530), + 115: uint16(31517), + 116: uint16(31537), + 117: uint16(31531), + 118: uint16(31533), + 119: uint16(31535), + 120: uint16(31538), + 121: uint16(31544), + 122: uint16(31514), + 123: uint16(31523), + 124: uint16(31892), + 125: uint16(31896), + 126: uint16(31894), + 127: uint16(31907), + 128: uint16(32053), + 129: uint16(32061), + 130: uint16(32056), + 131: uint16(32054), + 132: uint16(32058), + 133: uint16(32069), + 134: uint16(32044), + 135: uint16(32041), + 136: uint16(32065), + 137: uint16(32071), + 138: uint16(32062), + 139: uint16(32063), + 140: uint16(32074), + 141: uint16(32059), + 142: uint16(32040), + 143: uint16(32611), + 144: uint16(32661), + 145: uint16(32668), + 146: uint16(32669), + 147: uint16(32667), + 148: uint16(32714), + 149: uint16(32715), + 150: uint16(32717), + 151: uint16(32720), + 152: uint16(32721), + 153: uint16(32711), + 154: uint16(32719), + 155: uint16(32713), + 156: uint16(32799), + }, + 54: { + 0: uint16(32798), + 1: uint16(32795), + 2: uint16(32839), + 3: uint16(32835), + 4: uint16(32840), + 5: uint16(33048), + 6: uint16(33061), + 7: uint16(33049), + 8: uint16(33051), + 9: uint16(33069), + 10: uint16(33055), + 11: uint16(33068), + 12: uint16(33054), + 13: uint16(33057), + 14: uint16(33045), + 15: uint16(33063), + 16: uint16(33053), + 17: uint16(33058), + 18: uint16(33297), + 19: uint16(33336), + 20: uint16(33331), + 21: uint16(33338), + 22: uint16(33332), + 23: uint16(33330), + 24: uint16(33396), + 25: uint16(33680), + 26: uint16(33699), + 27: uint16(33704), + 28: uint16(33677), + 29: uint16(33658), + 30: uint16(33651), + 31: uint16(33700), + 32: uint16(33652), + 33: uint16(33679), + 34: uint16(33665), + 35: uint16(33685), + 36: uint16(33689), + 37: uint16(33653), + 38: uint16(33684), + 39: uint16(33705), + 40: uint16(33661), + 41: uint16(33667), + 42: uint16(33676), + 43: uint16(33693), + 44: uint16(33691), + 45: uint16(33706), + 46: uint16(33675), + 47: uint16(33662), + 48: uint16(33701), + 49: uint16(33711), + 50: uint16(33672), + 51: uint16(33687), + 52: uint16(33712), + 53: uint16(33663), + 54: uint16(33702), + 55: uint16(33671), + 56: uint16(33710), + 57: uint16(33654), + 58: uint16(33690), + 59: uint16(34393), + 60: uint16(34390), + 61: uint16(34495), + 62: uint16(34487), + 63: uint16(34498), + 64: uint16(34497), + 65: uint16(34501), + 66: uint16(34490), + 67: uint16(34480), + 68: uint16(34504), + 69: uint16(34489), + 70: uint16(34483), + 71: uint16(34488), + 72: uint16(34508), + 73: uint16(34484), + 74: uint16(34491), + 75: uint16(34492), + 76: uint16(34499), + 77: uint16(34493), + 78: uint16(34494), + 79: uint16(34898), + 80: uint16(34953), + 81: uint16(34965), + 82: uint16(34984), + 83: uint16(34978), + 84: uint16(34986), + 85: uint16(34970), + 86: uint16(34961), + 87: uint16(34977), + 88: uint16(34975), + 89: uint16(34968), + 90: uint16(34983), + 91: uint16(34969), + 92: uint16(34971), + 93: uint16(34967), + 94: uint16(34980), + 95: uint16(34988), + 96: uint16(34956), + 97: uint16(34963), + 98: uint16(34958), + 99: uint16(35202), + 100: uint16(35286), + 101: uint16(35289), + 102: uint16(35285), + 103: uint16(35376), + 104: uint16(35367), + 105: uint16(35372), + 106: uint16(35358), + 107: uint16(35897), + 108: uint16(35899), + 109: uint16(35932), + 110: uint16(35933), + 111: uint16(35965), + 112: uint16(36005), + 113: uint16(36221), + 114: uint16(36219), + 115: uint16(36217), + 116: uint16(36284), + 117: uint16(36290), + 118: uint16(36281), + 119: uint16(36287), + 120: uint16(36289), + 121: uint16(36568), + 122: uint16(36574), + 123: uint16(36573), + 124: uint16(36572), + 125: uint16(36567), + 126: uint16(36576), + 127: uint16(36577), + 128: uint16(36900), + 129: uint16(36875), + 130: uint16(36881), + 131: uint16(36892), + 132: uint16(36876), + 133: uint16(36897), + 134: uint16(37103), + 135: uint16(37098), + 136: uint16(37104), + 137: uint16(37108), + 138: uint16(37106), + 139: uint16(37107), + 140: uint16(37076), + 141: uint16(37099), + 142: uint16(37100), + 143: uint16(37097), + 144: uint16(37206), + 145: uint16(37208), + 146: uint16(37210), + 147: uint16(37203), + 148: uint16(37205), + 149: uint16(37356), + 150: uint16(37364), + 151: uint16(37361), + 152: uint16(37363), + 153: uint16(37368), + 154: uint16(37348), + 155: uint16(37369), + 156: uint16(37354), + }, + 55: { + 0: uint16(37355), + 1: uint16(37367), + 2: uint16(37352), + 3: uint16(37358), + 4: uint16(38266), + 5: uint16(38278), + 6: uint16(38280), + 7: uint16(38524), + 8: uint16(38509), + 9: uint16(38507), + 10: uint16(38513), + 11: uint16(38511), + 12: uint16(38591), + 13: uint16(38762), + 14: uint16(38916), + 15: uint16(39141), + 16: uint16(39319), + 17: uint16(20635), + 18: uint16(20629), + 19: uint16(20628), + 20: uint16(20638), + 21: uint16(20619), + 22: uint16(20643), + 23: uint16(20611), + 24: uint16(20620), + 25: uint16(20622), + 26: uint16(20637), + 27: uint16(20584), + 28: uint16(20636), + 29: uint16(20626), + 30: uint16(20610), + 31: uint16(20615), + 32: uint16(20831), + 33: uint16(20948), + 34: uint16(21266), + 35: uint16(21265), + 36: uint16(21412), + 37: uint16(21415), + 38: uint16(21905), + 39: uint16(21928), + 40: uint16(21925), + 41: uint16(21933), + 42: uint16(21879), + 43: uint16(22085), + 44: uint16(21922), + 45: uint16(21907), + 46: uint16(21896), + 47: uint16(21903), + 48: uint16(21941), + 49: uint16(21889), + 50: uint16(21923), + 51: uint16(21906), + 52: uint16(21924), + 53: uint16(21885), + 54: uint16(21900), + 55: uint16(21926), + 56: uint16(21887), + 57: uint16(21909), + 58: uint16(21921), + 59: uint16(21902), + 60: uint16(22284), + 61: uint16(22569), + 62: uint16(22583), + 63: uint16(22553), + 64: uint16(22558), + 65: uint16(22567), + 66: uint16(22563), + 67: uint16(22568), + 68: uint16(22517), + 69: uint16(22600), + 70: uint16(22565), + 71: uint16(22556), + 72: uint16(22555), + 73: uint16(22579), + 74: uint16(22591), + 75: uint16(22582), + 76: uint16(22574), + 77: uint16(22585), + 78: uint16(22584), + 79: uint16(22573), + 80: uint16(22572), + 81: uint16(22587), + 82: uint16(22881), + 83: uint16(23215), + 84: uint16(23188), + 85: uint16(23199), + 86: uint16(23162), + 87: uint16(23202), + 88: uint16(23198), + 89: uint16(23160), + 90: uint16(23206), + 91: uint16(23164), + 92: uint16(23205), + 93: uint16(23212), + 94: uint16(23189), + 95: uint16(23214), + 96: uint16(23095), + 97: uint16(23172), + 98: uint16(23178), + 99: uint16(23191), + 100: uint16(23171), + 101: uint16(23179), + 102: uint16(23209), + 103: uint16(23163), + 104: uint16(23165), + 105: uint16(23180), + 106: uint16(23196), + 107: uint16(23183), + 108: uint16(23187), + 109: uint16(23197), + 110: uint16(23530), + 111: uint16(23501), + 112: uint16(23499), + 113: uint16(23508), + 114: uint16(23505), + 115: uint16(23498), + 116: uint16(23502), + 117: uint16(23564), + 118: uint16(23600), + 119: uint16(23863), + 120: uint16(23875), + 121: uint16(23915), + 122: uint16(23873), + 123: uint16(23883), + 124: uint16(23871), + 125: uint16(23861), + 126: uint16(23889), + 127: uint16(23886), + 128: uint16(23893), + 129: uint16(23859), + 130: uint16(23866), + 131: uint16(23890), + 132: uint16(23869), + 133: uint16(23857), + 134: uint16(23897), + 135: uint16(23874), + 136: uint16(23865), + 137: uint16(23881), + 138: uint16(23864), + 139: uint16(23868), + 140: uint16(23858), + 141: uint16(23862), + 142: uint16(23872), + 143: uint16(23877), + 144: uint16(24132), + 145: uint16(24129), + 146: uint16(24408), + 147: uint16(24486), + 148: uint16(24485), + 149: uint16(24491), + 150: uint16(24777), + 151: uint16(24761), + 152: uint16(24780), + 153: uint16(24802), + 154: uint16(24782), + 155: uint16(24772), + 156: uint16(24852), + }, + 56: { + 0: uint16(24818), + 1: uint16(24842), + 2: uint16(24854), + 3: uint16(24837), + 4: uint16(24821), + 5: uint16(24851), + 6: uint16(24824), + 7: uint16(24828), + 8: uint16(24830), + 9: uint16(24769), + 10: uint16(24835), + 11: uint16(24856), + 12: uint16(24861), + 13: uint16(24848), + 14: uint16(24831), + 15: uint16(24836), + 16: uint16(24843), + 17: uint16(25162), + 18: uint16(25492), + 19: uint16(25521), + 20: uint16(25520), + 21: uint16(25550), + 22: uint16(25573), + 23: uint16(25576), + 24: uint16(25583), + 25: uint16(25539), + 26: uint16(25757), + 27: uint16(25587), + 28: uint16(25546), + 29: uint16(25568), + 30: uint16(25590), + 31: uint16(25557), + 32: uint16(25586), + 33: uint16(25589), + 34: uint16(25697), + 35: uint16(25567), + 36: uint16(25534), + 37: uint16(25565), + 38: uint16(25564), + 39: uint16(25540), + 40: uint16(25560), + 41: uint16(25555), + 42: uint16(25538), + 43: uint16(25543), + 44: uint16(25548), + 45: uint16(25547), + 46: uint16(25544), + 47: uint16(25584), + 48: uint16(25559), + 49: uint16(25561), + 50: uint16(25906), + 51: uint16(25959), + 52: uint16(25962), + 53: uint16(25956), + 54: uint16(25948), + 55: uint16(25960), + 56: uint16(25957), + 57: uint16(25996), + 58: uint16(26013), + 59: uint16(26014), + 60: uint16(26030), + 61: uint16(26064), + 62: uint16(26066), + 63: uint16(26236), + 64: uint16(26220), + 65: uint16(26235), + 66: uint16(26240), + 67: uint16(26225), + 68: uint16(26233), + 69: uint16(26218), + 70: uint16(26226), + 71: uint16(26369), + 72: uint16(26892), + 73: uint16(26835), + 74: uint16(26884), + 75: uint16(26844), + 76: uint16(26922), + 77: uint16(26860), + 78: uint16(26858), + 79: uint16(26865), + 80: uint16(26895), + 81: uint16(26838), + 82: uint16(26871), + 83: uint16(26859), + 84: uint16(26852), + 85: uint16(26870), + 86: uint16(26899), + 87: uint16(26896), + 88: uint16(26867), + 89: uint16(26849), + 90: uint16(26887), + 91: uint16(26828), + 92: uint16(26888), + 93: uint16(26992), + 94: uint16(26804), + 95: uint16(26897), + 96: uint16(26863), + 97: uint16(26822), + 98: uint16(26900), + 99: uint16(26872), + 100: uint16(26832), + 101: uint16(26877), + 102: uint16(26876), + 103: uint16(26856), + 104: uint16(26891), + 105: uint16(26890), + 106: uint16(26903), + 107: uint16(26830), + 108: uint16(26824), + 109: uint16(26845), + 110: uint16(26846), + 111: uint16(26854), + 112: uint16(26868), + 113: uint16(26833), + 114: uint16(26886), + 115: uint16(26836), + 116: uint16(26857), + 117: uint16(26901), + 118: uint16(26917), + 119: uint16(26823), + 120: uint16(27449), + 121: uint16(27451), + 122: uint16(27455), + 123: uint16(27452), + 124: uint16(27540), + 125: uint16(27543), + 126: uint16(27545), + 127: uint16(27541), + 128: uint16(27581), + 129: uint16(27632), + 130: uint16(27634), + 131: uint16(27635), + 132: uint16(27696), + 133: uint16(28156), + 134: uint16(28230), + 135: uint16(28231), + 136: uint16(28191), + 137: uint16(28233), + 138: uint16(28296), + 139: uint16(28220), + 140: uint16(28221), + 141: uint16(28229), + 142: uint16(28258), + 143: uint16(28203), + 144: uint16(28223), + 145: uint16(28225), + 146: uint16(28253), + 147: uint16(28275), + 148: uint16(28188), + 149: uint16(28211), + 150: uint16(28235), + 151: uint16(28224), + 152: uint16(28241), + 153: uint16(28219), + 154: uint16(28163), + 155: uint16(28206), + 156: uint16(28254), + }, + 57: { + 0: uint16(28264), + 1: uint16(28252), + 2: uint16(28257), + 3: uint16(28209), + 4: uint16(28200), + 5: uint16(28256), + 6: uint16(28273), + 7: uint16(28267), + 8: uint16(28217), + 9: uint16(28194), + 10: uint16(28208), + 11: uint16(28243), + 12: uint16(28261), + 13: uint16(28199), + 14: uint16(28280), + 15: uint16(28260), + 16: uint16(28279), + 17: uint16(28245), + 18: uint16(28281), + 19: uint16(28242), + 20: uint16(28262), + 21: uint16(28213), + 22: uint16(28214), + 23: uint16(28250), + 24: uint16(28960), + 25: uint16(28958), + 26: uint16(28975), + 27: uint16(28923), + 28: uint16(28974), + 29: uint16(28977), + 30: uint16(28963), + 31: uint16(28965), + 32: uint16(28962), + 33: uint16(28978), + 34: uint16(28959), + 35: uint16(28968), + 36: uint16(28986), + 37: uint16(28955), + 38: uint16(29259), + 39: uint16(29274), + 40: uint16(29320), + 41: uint16(29321), + 42: uint16(29318), + 43: uint16(29317), + 44: uint16(29323), + 45: uint16(29458), + 46: uint16(29451), + 47: uint16(29488), + 48: uint16(29474), + 49: uint16(29489), + 50: uint16(29491), + 51: uint16(29479), + 52: uint16(29490), + 53: uint16(29485), + 54: uint16(29478), + 55: uint16(29475), + 56: uint16(29493), + 57: uint16(29452), + 58: uint16(29742), + 59: uint16(29740), + 60: uint16(29744), + 61: uint16(29739), + 62: uint16(29718), + 63: uint16(29722), + 64: uint16(29729), + 65: uint16(29741), + 66: uint16(29745), + 67: uint16(29732), + 68: uint16(29731), + 69: uint16(29725), + 70: uint16(29737), + 71: uint16(29728), + 72: uint16(29746), + 73: uint16(29947), + 74: uint16(29999), + 75: uint16(30063), + 76: uint16(30060), + 77: uint16(30183), + 78: uint16(30170), + 79: uint16(30177), + 80: uint16(30182), + 81: uint16(30173), + 82: uint16(30175), + 83: uint16(30180), + 84: uint16(30167), + 85: uint16(30357), + 86: uint16(30354), + 87: uint16(30426), + 88: uint16(30534), + 89: uint16(30535), + 90: uint16(30532), + 91: uint16(30541), + 92: uint16(30533), + 93: uint16(30538), + 94: uint16(30542), + 95: uint16(30539), + 96: uint16(30540), + 97: uint16(30686), + 98: uint16(30700), + 99: uint16(30816), + 100: uint16(30820), + 101: uint16(30821), + 102: uint16(30812), + 103: uint16(30829), + 104: uint16(30833), + 105: uint16(30826), + 106: uint16(30830), + 107: uint16(30832), + 108: uint16(30825), + 109: uint16(30824), + 110: uint16(30814), + 111: uint16(30818), + 112: uint16(31092), + 113: uint16(31091), + 114: uint16(31090), + 115: uint16(31088), + 116: uint16(31234), + 117: uint16(31242), + 118: uint16(31235), + 119: uint16(31244), + 120: uint16(31236), + 121: uint16(31385), + 122: uint16(31462), + 123: uint16(31460), + 124: uint16(31562), + 125: uint16(31547), + 126: uint16(31556), + 127: uint16(31560), + 128: uint16(31564), + 129: uint16(31566), + 130: uint16(31552), + 131: uint16(31576), + 132: uint16(31557), + 133: uint16(31906), + 134: uint16(31902), + 135: uint16(31912), + 136: uint16(31905), + 137: uint16(32088), + 138: uint16(32111), + 139: uint16(32099), + 140: uint16(32083), + 141: uint16(32086), + 142: uint16(32103), + 143: uint16(32106), + 144: uint16(32079), + 145: uint16(32109), + 146: uint16(32092), + 147: uint16(32107), + 148: uint16(32082), + 149: uint16(32084), + 150: uint16(32105), + 151: uint16(32081), + 152: uint16(32095), + 153: uint16(32078), + 154: uint16(32574), + 155: uint16(32575), + 156: uint16(32613), + }, + 58: { + 0: uint16(32614), + 1: uint16(32674), + 2: uint16(32672), + 3: uint16(32673), + 4: uint16(32727), + 5: uint16(32849), + 6: uint16(32847), + 7: uint16(32848), + 8: uint16(33022), + 9: uint16(32980), + 10: uint16(33091), + 11: uint16(33098), + 12: uint16(33106), + 13: uint16(33103), + 14: uint16(33095), + 15: uint16(33085), + 16: uint16(33101), + 17: uint16(33082), + 18: uint16(33254), + 19: uint16(33262), + 20: uint16(33271), + 21: uint16(33272), + 22: uint16(33273), + 23: uint16(33284), + 24: uint16(33340), + 25: uint16(33341), + 26: uint16(33343), + 27: uint16(33397), + 28: uint16(33595), + 29: uint16(33743), + 30: uint16(33785), + 31: uint16(33827), + 32: uint16(33728), + 33: uint16(33768), + 34: uint16(33810), + 35: uint16(33767), + 36: uint16(33764), + 37: uint16(33788), + 38: uint16(33782), + 39: uint16(33808), + 40: uint16(33734), + 41: uint16(33736), + 42: uint16(33771), + 43: uint16(33763), + 44: uint16(33727), + 45: uint16(33793), + 46: uint16(33757), + 47: uint16(33765), + 48: uint16(33752), + 49: uint16(33791), + 50: uint16(33761), + 51: uint16(33739), + 52: uint16(33742), + 53: uint16(33750), + 54: uint16(33781), + 55: uint16(33737), + 56: uint16(33801), + 57: uint16(33807), + 58: uint16(33758), + 59: uint16(33809), + 60: uint16(33798), + 61: uint16(33730), + 62: uint16(33779), + 63: uint16(33749), + 64: uint16(33786), + 65: uint16(33735), + 66: uint16(33745), + 67: uint16(33770), + 68: uint16(33811), + 69: uint16(33731), + 70: uint16(33772), + 71: uint16(33774), + 72: uint16(33732), + 73: uint16(33787), + 74: uint16(33751), + 75: uint16(33762), + 76: uint16(33819), + 77: uint16(33755), + 78: uint16(33790), + 79: uint16(34520), + 80: uint16(34530), + 81: uint16(34534), + 82: uint16(34515), + 83: uint16(34531), + 84: uint16(34522), + 85: uint16(34538), + 86: uint16(34525), + 87: uint16(34539), + 88: uint16(34524), + 89: uint16(34540), + 90: uint16(34537), + 91: uint16(34519), + 92: uint16(34536), + 93: uint16(34513), + 94: uint16(34888), + 95: uint16(34902), + 96: uint16(34901), + 97: uint16(35002), + 98: uint16(35031), + 99: uint16(35001), + 100: uint16(35000), + 101: uint16(35008), + 102: uint16(35006), + 103: uint16(34998), + 104: uint16(35004), + 105: uint16(34999), + 106: uint16(35005), + 107: uint16(34994), + 108: uint16(35073), + 109: uint16(35017), + 110: uint16(35221), + 111: uint16(35224), + 112: uint16(35223), + 113: uint16(35293), + 114: uint16(35290), + 115: uint16(35291), + 116: uint16(35406), + 117: uint16(35405), + 118: uint16(35385), + 119: uint16(35417), + 120: uint16(35392), + 121: uint16(35415), + 122: uint16(35416), + 123: uint16(35396), + 124: uint16(35397), + 125: uint16(35410), + 126: uint16(35400), + 127: uint16(35409), + 128: uint16(35402), + 129: uint16(35404), + 130: uint16(35407), + 131: uint16(35935), + 132: uint16(35969), + 133: uint16(35968), + 134: uint16(36026), + 135: uint16(36030), + 136: uint16(36016), + 137: uint16(36025), + 138: uint16(36021), + 139: uint16(36228), + 140: uint16(36224), + 141: uint16(36233), + 142: uint16(36312), + 143: uint16(36307), + 144: uint16(36301), + 145: uint16(36295), + 146: uint16(36310), + 147: uint16(36316), + 148: uint16(36303), + 149: uint16(36309), + 150: uint16(36313), + 151: uint16(36296), + 152: uint16(36311), + 153: uint16(36293), + 154: uint16(36591), + 155: uint16(36599), + 156: uint16(36602), + }, + 59: { + 0: uint16(36601), + 1: uint16(36582), + 2: uint16(36590), + 3: uint16(36581), + 4: uint16(36597), + 5: uint16(36583), + 6: uint16(36584), + 7: uint16(36598), + 8: uint16(36587), + 9: uint16(36593), + 10: uint16(36588), + 11: uint16(36596), + 12: uint16(36585), + 13: uint16(36909), + 14: uint16(36916), + 15: uint16(36911), + 16: uint16(37126), + 17: uint16(37164), + 18: uint16(37124), + 19: uint16(37119), + 20: uint16(37116), + 21: uint16(37128), + 22: uint16(37113), + 23: uint16(37115), + 24: uint16(37121), + 25: uint16(37120), + 26: uint16(37127), + 27: uint16(37125), + 28: uint16(37123), + 29: uint16(37217), + 30: uint16(37220), + 31: uint16(37215), + 32: uint16(37218), + 33: uint16(37216), + 34: uint16(37377), + 35: uint16(37386), + 36: uint16(37413), + 37: uint16(37379), + 38: uint16(37402), + 39: uint16(37414), + 40: uint16(37391), + 41: uint16(37388), + 42: uint16(37376), + 43: uint16(37394), + 44: uint16(37375), + 45: uint16(37373), + 46: uint16(37382), + 47: uint16(37380), + 48: uint16(37415), + 49: uint16(37378), + 50: uint16(37404), + 51: uint16(37412), + 52: uint16(37401), + 53: uint16(37399), + 54: uint16(37381), + 55: uint16(37398), + 56: uint16(38267), + 57: uint16(38285), + 58: uint16(38284), + 59: uint16(38288), + 60: uint16(38535), + 61: uint16(38526), + 62: uint16(38536), + 63: uint16(38537), + 64: uint16(38531), + 65: uint16(38528), + 66: uint16(38594), + 67: uint16(38600), + 68: uint16(38595), + 69: uint16(38641), + 70: uint16(38640), + 71: uint16(38764), + 72: uint16(38768), + 73: uint16(38766), + 74: uint16(38919), + 75: uint16(39081), + 76: uint16(39147), + 77: uint16(40166), + 78: uint16(40697), + 79: uint16(20099), + 80: uint16(20100), + 81: uint16(20150), + 82: uint16(20669), + 83: uint16(20671), + 84: uint16(20678), + 85: uint16(20654), + 86: uint16(20676), + 87: uint16(20682), + 88: uint16(20660), + 89: uint16(20680), + 90: uint16(20674), + 91: uint16(20656), + 92: uint16(20673), + 93: uint16(20666), + 94: uint16(20657), + 95: uint16(20683), + 96: uint16(20681), + 97: uint16(20662), + 98: uint16(20664), + 99: uint16(20951), + 100: uint16(21114), + 101: uint16(21112), + 102: uint16(21115), + 103: uint16(21116), + 104: uint16(21955), + 105: uint16(21979), + 106: uint16(21964), + 107: uint16(21968), + 108: uint16(21963), + 109: uint16(21962), + 110: uint16(21981), + 111: uint16(21952), + 112: uint16(21972), + 113: uint16(21956), + 114: uint16(21993), + 115: uint16(21951), + 116: uint16(21970), + 117: uint16(21901), + 118: uint16(21967), + 119: uint16(21973), + 120: uint16(21986), + 121: uint16(21974), + 122: uint16(21960), + 123: uint16(22002), + 124: uint16(21965), + 125: uint16(21977), + 126: uint16(21954), + 127: uint16(22292), + 128: uint16(22611), + 129: uint16(22632), + 130: uint16(22628), + 131: uint16(22607), + 132: uint16(22605), + 133: uint16(22601), + 134: uint16(22639), + 135: uint16(22613), + 136: uint16(22606), + 137: uint16(22621), + 138: uint16(22617), + 139: uint16(22629), + 140: uint16(22619), + 141: uint16(22589), + 142: uint16(22627), + 143: uint16(22641), + 144: uint16(22780), + 145: uint16(23239), + 146: uint16(23236), + 147: uint16(23243), + 148: uint16(23226), + 149: uint16(23224), + 150: uint16(23217), + 151: uint16(23221), + 152: uint16(23216), + 153: uint16(23231), + 154: uint16(23240), + 155: uint16(23227), + 156: uint16(23238), + }, + 60: { + 0: uint16(23223), + 1: uint16(23232), + 2: uint16(23242), + 3: uint16(23220), + 4: uint16(23222), + 5: uint16(23245), + 6: uint16(23225), + 7: uint16(23184), + 8: uint16(23510), + 9: uint16(23512), + 10: uint16(23513), + 11: uint16(23583), + 12: uint16(23603), + 13: uint16(23921), + 14: uint16(23907), + 15: uint16(23882), + 16: uint16(23909), + 17: uint16(23922), + 18: uint16(23916), + 19: uint16(23902), + 20: uint16(23912), + 21: uint16(23911), + 22: uint16(23906), + 23: uint16(24048), + 24: uint16(24143), + 25: uint16(24142), + 26: uint16(24138), + 27: uint16(24141), + 28: uint16(24139), + 29: uint16(24261), + 30: uint16(24268), + 31: uint16(24262), + 32: uint16(24267), + 33: uint16(24263), + 34: uint16(24384), + 35: uint16(24495), + 36: uint16(24493), + 37: uint16(24823), + 38: uint16(24905), + 39: uint16(24906), + 40: uint16(24875), + 41: uint16(24901), + 42: uint16(24886), + 43: uint16(24882), + 44: uint16(24878), + 45: uint16(24902), + 46: uint16(24879), + 47: uint16(24911), + 48: uint16(24873), + 49: uint16(24896), + 50: uint16(25120), + 51: uint16(37224), + 52: uint16(25123), + 53: uint16(25125), + 54: uint16(25124), + 55: uint16(25541), + 56: uint16(25585), + 57: uint16(25579), + 58: uint16(25616), + 59: uint16(25618), + 60: uint16(25609), + 61: uint16(25632), + 62: uint16(25636), + 63: uint16(25651), + 64: uint16(25667), + 65: uint16(25631), + 66: uint16(25621), + 67: uint16(25624), + 68: uint16(25657), + 69: uint16(25655), + 70: uint16(25634), + 71: uint16(25635), + 72: uint16(25612), + 73: uint16(25638), + 74: uint16(25648), + 75: uint16(25640), + 76: uint16(25665), + 77: uint16(25653), + 78: uint16(25647), + 79: uint16(25610), + 80: uint16(25626), + 81: uint16(25664), + 82: uint16(25637), + 83: uint16(25639), + 84: uint16(25611), + 85: uint16(25575), + 86: uint16(25627), + 87: uint16(25646), + 88: uint16(25633), + 89: uint16(25614), + 90: uint16(25967), + 91: uint16(26002), + 92: uint16(26067), + 93: uint16(26246), + 94: uint16(26252), + 95: uint16(26261), + 96: uint16(26256), + 97: uint16(26251), + 98: uint16(26250), + 99: uint16(26265), + 100: uint16(26260), + 101: uint16(26232), + 102: uint16(26400), + 103: uint16(26982), + 104: uint16(26975), + 105: uint16(26936), + 106: uint16(26958), + 107: uint16(26978), + 108: uint16(26993), + 109: uint16(26943), + 110: uint16(26949), + 111: uint16(26986), + 112: uint16(26937), + 113: uint16(26946), + 114: uint16(26967), + 115: uint16(26969), + 116: uint16(27002), + 117: uint16(26952), + 118: uint16(26953), + 119: uint16(26933), + 120: uint16(26988), + 121: uint16(26931), + 122: uint16(26941), + 123: uint16(26981), + 124: uint16(26864), + 125: uint16(27000), + 126: uint16(26932), + 127: uint16(26985), + 128: uint16(26944), + 129: uint16(26991), + 130: uint16(26948), + 131: uint16(26998), + 132: uint16(26968), + 133: uint16(26945), + 134: uint16(26996), + 135: uint16(26956), + 136: uint16(26939), + 137: uint16(26955), + 138: uint16(26935), + 139: uint16(26972), + 140: uint16(26959), + 141: uint16(26961), + 142: uint16(26930), + 143: uint16(26962), + 144: uint16(26927), + 145: uint16(27003), + 146: uint16(26940), + 147: uint16(27462), + 148: uint16(27461), + 149: uint16(27459), + 150: uint16(27458), + 151: uint16(27464), + 152: uint16(27457), + 153: uint16(27547), + 154: uint16(64013), + 155: uint16(27643), + 156: uint16(27644), + }, + 61: { + 0: uint16(27641), + 1: uint16(27639), + 2: uint16(27640), + 3: uint16(28315), + 4: uint16(28374), + 5: uint16(28360), + 6: uint16(28303), + 7: uint16(28352), + 8: uint16(28319), + 9: uint16(28307), + 10: uint16(28308), + 11: uint16(28320), + 12: uint16(28337), + 13: uint16(28345), + 14: uint16(28358), + 15: uint16(28370), + 16: uint16(28349), + 17: uint16(28353), + 18: uint16(28318), + 19: uint16(28361), + 20: uint16(28343), + 21: uint16(28336), + 22: uint16(28365), + 23: uint16(28326), + 24: uint16(28367), + 25: uint16(28338), + 26: uint16(28350), + 27: uint16(28355), + 28: uint16(28380), + 29: uint16(28376), + 30: uint16(28313), + 31: uint16(28306), + 32: uint16(28302), + 33: uint16(28301), + 34: uint16(28324), + 35: uint16(28321), + 36: uint16(28351), + 37: uint16(28339), + 38: uint16(28368), + 39: uint16(28362), + 40: uint16(28311), + 41: uint16(28334), + 42: uint16(28323), + 43: uint16(28999), + 44: uint16(29012), + 45: uint16(29010), + 46: uint16(29027), + 47: uint16(29024), + 48: uint16(28993), + 49: uint16(29021), + 50: uint16(29026), + 51: uint16(29042), + 52: uint16(29048), + 53: uint16(29034), + 54: uint16(29025), + 55: uint16(28994), + 56: uint16(29016), + 57: uint16(28995), + 58: uint16(29003), + 59: uint16(29040), + 60: uint16(29023), + 61: uint16(29008), + 62: uint16(29011), + 63: uint16(28996), + 64: uint16(29005), + 65: uint16(29018), + 66: uint16(29263), + 67: uint16(29325), + 68: uint16(29324), + 69: uint16(29329), + 70: uint16(29328), + 71: uint16(29326), + 72: uint16(29500), + 73: uint16(29506), + 74: uint16(29499), + 75: uint16(29498), + 76: uint16(29504), + 77: uint16(29514), + 78: uint16(29513), + 79: uint16(29764), + 80: uint16(29770), + 81: uint16(29771), + 82: uint16(29778), + 83: uint16(29777), + 84: uint16(29783), + 85: uint16(29760), + 86: uint16(29775), + 87: uint16(29776), + 88: uint16(29774), + 89: uint16(29762), + 90: uint16(29766), + 91: uint16(29773), + 92: uint16(29780), + 93: uint16(29921), + 94: uint16(29951), + 95: uint16(29950), + 96: uint16(29949), + 97: uint16(29981), + 98: uint16(30073), + 99: uint16(30071), + 100: uint16(27011), + 101: uint16(30191), + 102: uint16(30223), + 103: uint16(30211), + 104: uint16(30199), + 105: uint16(30206), + 106: uint16(30204), + 107: uint16(30201), + 108: uint16(30200), + 109: uint16(30224), + 110: uint16(30203), + 111: uint16(30198), + 112: uint16(30189), + 113: uint16(30197), + 114: uint16(30205), + 115: uint16(30361), + 116: uint16(30389), + 117: uint16(30429), + 118: uint16(30549), + 119: uint16(30559), + 120: uint16(30560), + 121: uint16(30546), + 122: uint16(30550), + 123: uint16(30554), + 124: uint16(30569), + 125: uint16(30567), + 126: uint16(30548), + 127: uint16(30553), + 128: uint16(30573), + 129: uint16(30688), + 130: uint16(30855), + 131: uint16(30874), + 132: uint16(30868), + 133: uint16(30863), + 134: uint16(30852), + 135: uint16(30869), + 136: uint16(30853), + 137: uint16(30854), + 138: uint16(30881), + 139: uint16(30851), + 140: uint16(30841), + 141: uint16(30873), + 142: uint16(30848), + 143: uint16(30870), + 144: uint16(30843), + 145: uint16(31100), + 146: uint16(31106), + 147: uint16(31101), + 148: uint16(31097), + 149: uint16(31249), + 150: uint16(31256), + 151: uint16(31257), + 152: uint16(31250), + 153: uint16(31255), + 154: uint16(31253), + 155: uint16(31266), + 156: uint16(31251), + }, + 62: { + 0: uint16(31259), + 1: uint16(31248), + 2: uint16(31395), + 3: uint16(31394), + 4: uint16(31390), + 5: uint16(31467), + 6: uint16(31590), + 7: uint16(31588), + 8: uint16(31597), + 9: uint16(31604), + 10: uint16(31593), + 11: uint16(31602), + 12: uint16(31589), + 13: uint16(31603), + 14: uint16(31601), + 15: uint16(31600), + 16: uint16(31585), + 17: uint16(31608), + 18: uint16(31606), + 19: uint16(31587), + 20: uint16(31922), + 21: uint16(31924), + 22: uint16(31919), + 23: uint16(32136), + 24: uint16(32134), + 25: uint16(32128), + 26: uint16(32141), + 27: uint16(32127), + 28: uint16(32133), + 29: uint16(32122), + 30: uint16(32142), + 31: uint16(32123), + 32: uint16(32131), + 33: uint16(32124), + 34: uint16(32140), + 35: uint16(32148), + 36: uint16(32132), + 37: uint16(32125), + 38: uint16(32146), + 39: uint16(32621), + 40: uint16(32619), + 41: uint16(32615), + 42: uint16(32616), + 43: uint16(32620), + 44: uint16(32678), + 45: uint16(32677), + 46: uint16(32679), + 47: uint16(32731), + 48: uint16(32732), + 49: uint16(32801), + 50: uint16(33124), + 51: uint16(33120), + 52: uint16(33143), + 53: uint16(33116), + 54: uint16(33129), + 55: uint16(33115), + 56: uint16(33122), + 57: uint16(33138), + 58: uint16(26401), + 59: uint16(33118), + 60: uint16(33142), + 61: uint16(33127), + 62: uint16(33135), + 63: uint16(33092), + 64: uint16(33121), + 65: uint16(33309), + 66: uint16(33353), + 67: uint16(33348), + 68: uint16(33344), + 69: uint16(33346), + 70: uint16(33349), + 71: uint16(34033), + 72: uint16(33855), + 73: uint16(33878), + 74: uint16(33910), + 75: uint16(33913), + 76: uint16(33935), + 77: uint16(33933), + 78: uint16(33893), + 79: uint16(33873), + 80: uint16(33856), + 81: uint16(33926), + 82: uint16(33895), + 83: uint16(33840), + 84: uint16(33869), + 85: uint16(33917), + 86: uint16(33882), + 87: uint16(33881), + 88: uint16(33908), + 89: uint16(33907), + 90: uint16(33885), + 91: uint16(34055), + 92: uint16(33886), + 93: uint16(33847), + 94: uint16(33850), + 95: uint16(33844), + 96: uint16(33914), + 97: uint16(33859), + 98: uint16(33912), + 99: uint16(33842), + 100: uint16(33861), + 101: uint16(33833), + 102: uint16(33753), + 103: uint16(33867), + 104: uint16(33839), + 105: uint16(33858), + 106: uint16(33837), + 107: uint16(33887), + 108: uint16(33904), + 109: uint16(33849), + 110: uint16(33870), + 111: uint16(33868), + 112: uint16(33874), + 113: uint16(33903), + 114: uint16(33989), + 115: uint16(33934), + 116: uint16(33851), + 117: uint16(33863), + 118: uint16(33846), + 119: uint16(33843), + 120: uint16(33896), + 121: uint16(33918), + 122: uint16(33860), + 123: uint16(33835), + 124: uint16(33888), + 125: uint16(33876), + 126: uint16(33902), + 127: uint16(33872), + 128: uint16(34571), + 129: uint16(34564), + 130: uint16(34551), + 131: uint16(34572), + 132: uint16(34554), + 133: uint16(34518), + 134: uint16(34549), + 135: uint16(34637), + 136: uint16(34552), + 137: uint16(34574), + 138: uint16(34569), + 139: uint16(34561), + 140: uint16(34550), + 141: uint16(34573), + 142: uint16(34565), + 143: uint16(35030), + 144: uint16(35019), + 145: uint16(35021), + 146: uint16(35022), + 147: uint16(35038), + 148: uint16(35035), + 149: uint16(35034), + 150: uint16(35020), + 151: uint16(35024), + 152: uint16(35205), + 153: uint16(35227), + 154: uint16(35295), + 155: uint16(35301), + 156: uint16(35300), + }, + 63: { + 0: uint16(35297), + 1: uint16(35296), + 2: uint16(35298), + 3: uint16(35292), + 4: uint16(35302), + 5: uint16(35446), + 6: uint16(35462), + 7: uint16(35455), + 8: uint16(35425), + 9: uint16(35391), + 10: uint16(35447), + 11: uint16(35458), + 12: uint16(35460), + 13: uint16(35445), + 14: uint16(35459), + 15: uint16(35457), + 16: uint16(35444), + 17: uint16(35450), + 18: uint16(35900), + 19: uint16(35915), + 20: uint16(35914), + 21: uint16(35941), + 22: uint16(35940), + 23: uint16(35942), + 24: uint16(35974), + 25: uint16(35972), + 26: uint16(35973), + 27: uint16(36044), + 28: uint16(36200), + 29: uint16(36201), + 30: uint16(36241), + 31: uint16(36236), + 32: uint16(36238), + 33: uint16(36239), + 34: uint16(36237), + 35: uint16(36243), + 36: uint16(36244), + 37: uint16(36240), + 38: uint16(36242), + 39: uint16(36336), + 40: uint16(36320), + 41: uint16(36332), + 42: uint16(36337), + 43: uint16(36334), + 44: uint16(36304), + 45: uint16(36329), + 46: uint16(36323), + 47: uint16(36322), + 48: uint16(36327), + 49: uint16(36338), + 50: uint16(36331), + 51: uint16(36340), + 52: uint16(36614), + 53: uint16(36607), + 54: uint16(36609), + 55: uint16(36608), + 56: uint16(36613), + 57: uint16(36615), + 58: uint16(36616), + 59: uint16(36610), + 60: uint16(36619), + 61: uint16(36946), + 62: uint16(36927), + 63: uint16(36932), + 64: uint16(36937), + 65: uint16(36925), + 66: uint16(37136), + 67: uint16(37133), + 68: uint16(37135), + 69: uint16(37137), + 70: uint16(37142), + 71: uint16(37140), + 72: uint16(37131), + 73: uint16(37134), + 74: uint16(37230), + 75: uint16(37231), + 76: uint16(37448), + 77: uint16(37458), + 78: uint16(37424), + 79: uint16(37434), + 80: uint16(37478), + 81: uint16(37427), + 82: uint16(37477), + 83: uint16(37470), + 84: uint16(37507), + 85: uint16(37422), + 86: uint16(37450), + 87: uint16(37446), + 88: uint16(37485), + 89: uint16(37484), + 90: uint16(37455), + 91: uint16(37472), + 92: uint16(37479), + 93: uint16(37487), + 94: uint16(37430), + 95: uint16(37473), + 96: uint16(37488), + 97: uint16(37425), + 98: uint16(37460), + 99: uint16(37475), + 100: uint16(37456), + 101: uint16(37490), + 102: uint16(37454), + 103: uint16(37459), + 104: uint16(37452), + 105: uint16(37462), + 106: uint16(37426), + 107: uint16(38303), + 108: uint16(38300), + 109: uint16(38302), + 110: uint16(38299), + 111: uint16(38546), + 112: uint16(38547), + 113: uint16(38545), + 114: uint16(38551), + 115: uint16(38606), + 116: uint16(38650), + 117: uint16(38653), + 118: uint16(38648), + 119: uint16(38645), + 120: uint16(38771), + 121: uint16(38775), + 122: uint16(38776), + 123: uint16(38770), + 124: uint16(38927), + 125: uint16(38925), + 126: uint16(38926), + 127: uint16(39084), + 128: uint16(39158), + 129: uint16(39161), + 130: uint16(39343), + 131: uint16(39346), + 132: uint16(39344), + 133: uint16(39349), + 134: uint16(39597), + 135: uint16(39595), + 136: uint16(39771), + 137: uint16(40170), + 138: uint16(40173), + 139: uint16(40167), + 140: uint16(40576), + 141: uint16(40701), + 142: uint16(20710), + 143: uint16(20692), + 144: uint16(20695), + 145: uint16(20712), + 146: uint16(20723), + 147: uint16(20699), + 148: uint16(20714), + 149: uint16(20701), + 150: uint16(20708), + 151: uint16(20691), + 152: uint16(20716), + 153: uint16(20720), + 154: uint16(20719), + 155: uint16(20707), + 156: uint16(20704), + }, + 64: { + 0: uint16(20952), + 1: uint16(21120), + 2: uint16(21121), + 3: uint16(21225), + 4: uint16(21227), + 5: uint16(21296), + 6: uint16(21420), + 7: uint16(22055), + 8: uint16(22037), + 9: uint16(22028), + 10: uint16(22034), + 11: uint16(22012), + 12: uint16(22031), + 13: uint16(22044), + 14: uint16(22017), + 15: uint16(22035), + 16: uint16(22018), + 17: uint16(22010), + 18: uint16(22045), + 19: uint16(22020), + 20: uint16(22015), + 21: uint16(22009), + 22: uint16(22665), + 23: uint16(22652), + 24: uint16(22672), + 25: uint16(22680), + 26: uint16(22662), + 27: uint16(22657), + 28: uint16(22655), + 29: uint16(22644), + 30: uint16(22667), + 31: uint16(22650), + 32: uint16(22663), + 33: uint16(22673), + 34: uint16(22670), + 35: uint16(22646), + 36: uint16(22658), + 37: uint16(22664), + 38: uint16(22651), + 39: uint16(22676), + 40: uint16(22671), + 41: uint16(22782), + 42: uint16(22891), + 43: uint16(23260), + 44: uint16(23278), + 45: uint16(23269), + 46: uint16(23253), + 47: uint16(23274), + 48: uint16(23258), + 49: uint16(23277), + 50: uint16(23275), + 51: uint16(23283), + 52: uint16(23266), + 53: uint16(23264), + 54: uint16(23259), + 55: uint16(23276), + 56: uint16(23262), + 57: uint16(23261), + 58: uint16(23257), + 59: uint16(23272), + 60: uint16(23263), + 61: uint16(23415), + 62: uint16(23520), + 63: uint16(23523), + 64: uint16(23651), + 65: uint16(23938), + 66: uint16(23936), + 67: uint16(23933), + 68: uint16(23942), + 69: uint16(23930), + 70: uint16(23937), + 71: uint16(23927), + 72: uint16(23946), + 73: uint16(23945), + 74: uint16(23944), + 75: uint16(23934), + 76: uint16(23932), + 77: uint16(23949), + 78: uint16(23929), + 79: uint16(23935), + 80: uint16(24152), + 81: uint16(24153), + 82: uint16(24147), + 83: uint16(24280), + 84: uint16(24273), + 85: uint16(24279), + 86: uint16(24270), + 87: uint16(24284), + 88: uint16(24277), + 89: uint16(24281), + 90: uint16(24274), + 91: uint16(24276), + 92: uint16(24388), + 93: uint16(24387), + 94: uint16(24431), + 95: uint16(24502), + 96: uint16(24876), + 97: uint16(24872), + 98: uint16(24897), + 99: uint16(24926), + 100: uint16(24945), + 101: uint16(24947), + 102: uint16(24914), + 103: uint16(24915), + 104: uint16(24946), + 105: uint16(24940), + 106: uint16(24960), + 107: uint16(24948), + 108: uint16(24916), + 109: uint16(24954), + 110: uint16(24923), + 111: uint16(24933), + 112: uint16(24891), + 113: uint16(24938), + 114: uint16(24929), + 115: uint16(24918), + 116: uint16(25129), + 117: uint16(25127), + 118: uint16(25131), + 119: uint16(25643), + 120: uint16(25677), + 121: uint16(25691), + 122: uint16(25693), + 123: uint16(25716), + 124: uint16(25718), + 125: uint16(25714), + 126: uint16(25715), + 127: uint16(25725), + 128: uint16(25717), + 129: uint16(25702), + 130: uint16(25766), + 131: uint16(25678), + 132: uint16(25730), + 133: uint16(25694), + 134: uint16(25692), + 135: uint16(25675), + 136: uint16(25683), + 137: uint16(25696), + 138: uint16(25680), + 139: uint16(25727), + 140: uint16(25663), + 141: uint16(25708), + 142: uint16(25707), + 143: uint16(25689), + 144: uint16(25701), + 145: uint16(25719), + 146: uint16(25971), + 147: uint16(26016), + 148: uint16(26273), + 149: uint16(26272), + 150: uint16(26271), + 151: uint16(26373), + 152: uint16(26372), + 153: uint16(26402), + 154: uint16(27057), + 155: uint16(27062), + 156: uint16(27081), + }, + 65: { + 0: uint16(27040), + 1: uint16(27086), + 2: uint16(27030), + 3: uint16(27056), + 4: uint16(27052), + 5: uint16(27068), + 6: uint16(27025), + 7: uint16(27033), + 8: uint16(27022), + 9: uint16(27047), + 10: uint16(27021), + 11: uint16(27049), + 12: uint16(27070), + 13: uint16(27055), + 14: uint16(27071), + 15: uint16(27076), + 16: uint16(27069), + 17: uint16(27044), + 18: uint16(27092), + 19: uint16(27065), + 20: uint16(27082), + 21: uint16(27034), + 22: uint16(27087), + 23: uint16(27059), + 24: uint16(27027), + 25: uint16(27050), + 26: uint16(27041), + 27: uint16(27038), + 28: uint16(27097), + 29: uint16(27031), + 30: uint16(27024), + 31: uint16(27074), + 32: uint16(27061), + 33: uint16(27045), + 34: uint16(27078), + 35: uint16(27466), + 36: uint16(27469), + 37: uint16(27467), + 38: uint16(27550), + 39: uint16(27551), + 40: uint16(27552), + 41: uint16(27587), + 42: uint16(27588), + 43: uint16(27646), + 44: uint16(28366), + 45: uint16(28405), + 46: uint16(28401), + 47: uint16(28419), + 48: uint16(28453), + 49: uint16(28408), + 50: uint16(28471), + 51: uint16(28411), + 52: uint16(28462), + 53: uint16(28425), + 54: uint16(28494), + 55: uint16(28441), + 56: uint16(28442), + 57: uint16(28455), + 58: uint16(28440), + 59: uint16(28475), + 60: uint16(28434), + 61: uint16(28397), + 62: uint16(28426), + 63: uint16(28470), + 64: uint16(28531), + 65: uint16(28409), + 66: uint16(28398), + 67: uint16(28461), + 68: uint16(28480), + 69: uint16(28464), + 70: uint16(28476), + 71: uint16(28469), + 72: uint16(28395), + 73: uint16(28423), + 74: uint16(28430), + 75: uint16(28483), + 76: uint16(28421), + 77: uint16(28413), + 78: uint16(28406), + 79: uint16(28473), + 80: uint16(28444), + 81: uint16(28412), + 82: uint16(28474), + 83: uint16(28447), + 84: uint16(28429), + 85: uint16(28446), + 86: uint16(28424), + 87: uint16(28449), + 88: uint16(29063), + 89: uint16(29072), + 90: uint16(29065), + 91: uint16(29056), + 92: uint16(29061), + 93: uint16(29058), + 94: uint16(29071), + 95: uint16(29051), + 96: uint16(29062), + 97: uint16(29057), + 98: uint16(29079), + 99: uint16(29252), + 100: uint16(29267), + 101: uint16(29335), + 102: uint16(29333), + 103: uint16(29331), + 104: uint16(29507), + 105: uint16(29517), + 106: uint16(29521), + 107: uint16(29516), + 108: uint16(29794), + 109: uint16(29811), + 110: uint16(29809), + 111: uint16(29813), + 112: uint16(29810), + 113: uint16(29799), + 114: uint16(29806), + 115: uint16(29952), + 116: uint16(29954), + 117: uint16(29955), + 118: uint16(30077), + 119: uint16(30096), + 120: uint16(30230), + 121: uint16(30216), + 122: uint16(30220), + 123: uint16(30229), + 124: uint16(30225), + 125: uint16(30218), + 126: uint16(30228), + 127: uint16(30392), + 128: uint16(30593), + 129: uint16(30588), + 130: uint16(30597), + 131: uint16(30594), + 132: uint16(30574), + 133: uint16(30592), + 134: uint16(30575), + 135: uint16(30590), + 136: uint16(30595), + 137: uint16(30898), + 138: uint16(30890), + 139: uint16(30900), + 140: uint16(30893), + 141: uint16(30888), + 142: uint16(30846), + 143: uint16(30891), + 144: uint16(30878), + 145: uint16(30885), + 146: uint16(30880), + 147: uint16(30892), + 148: uint16(30882), + 149: uint16(30884), + 150: uint16(31128), + 151: uint16(31114), + 152: uint16(31115), + 153: uint16(31126), + 154: uint16(31125), + 155: uint16(31124), + 156: uint16(31123), + }, + 66: { + 0: uint16(31127), + 1: uint16(31112), + 2: uint16(31122), + 3: uint16(31120), + 4: uint16(31275), + 5: uint16(31306), + 6: uint16(31280), + 7: uint16(31279), + 8: uint16(31272), + 9: uint16(31270), + 10: uint16(31400), + 11: uint16(31403), + 12: uint16(31404), + 13: uint16(31470), + 14: uint16(31624), + 15: uint16(31644), + 16: uint16(31626), + 17: uint16(31633), + 18: uint16(31632), + 19: uint16(31638), + 20: uint16(31629), + 21: uint16(31628), + 22: uint16(31643), + 23: uint16(31630), + 24: uint16(31621), + 25: uint16(31640), + 26: uint16(21124), + 27: uint16(31641), + 28: uint16(31652), + 29: uint16(31618), + 30: uint16(31931), + 31: uint16(31935), + 32: uint16(31932), + 33: uint16(31930), + 34: uint16(32167), + 35: uint16(32183), + 36: uint16(32194), + 37: uint16(32163), + 38: uint16(32170), + 39: uint16(32193), + 40: uint16(32192), + 41: uint16(32197), + 42: uint16(32157), + 43: uint16(32206), + 44: uint16(32196), + 45: uint16(32198), + 46: uint16(32203), + 47: uint16(32204), + 48: uint16(32175), + 49: uint16(32185), + 50: uint16(32150), + 51: uint16(32188), + 52: uint16(32159), + 53: uint16(32166), + 54: uint16(32174), + 55: uint16(32169), + 56: uint16(32161), + 57: uint16(32201), + 58: uint16(32627), + 59: uint16(32738), + 60: uint16(32739), + 61: uint16(32741), + 62: uint16(32734), + 63: uint16(32804), + 64: uint16(32861), + 65: uint16(32860), + 66: uint16(33161), + 67: uint16(33158), + 68: uint16(33155), + 69: uint16(33159), + 70: uint16(33165), + 71: uint16(33164), + 72: uint16(33163), + 73: uint16(33301), + 74: uint16(33943), + 75: uint16(33956), + 76: uint16(33953), + 77: uint16(33951), + 78: uint16(33978), + 79: uint16(33998), + 80: uint16(33986), + 81: uint16(33964), + 82: uint16(33966), + 83: uint16(33963), + 84: uint16(33977), + 85: uint16(33972), + 86: uint16(33985), + 87: uint16(33997), + 88: uint16(33962), + 89: uint16(33946), + 90: uint16(33969), + 91: uint16(34000), + 92: uint16(33949), + 93: uint16(33959), + 94: uint16(33979), + 95: uint16(33954), + 96: uint16(33940), + 97: uint16(33991), + 98: uint16(33996), + 99: uint16(33947), + 100: uint16(33961), + 101: uint16(33967), + 102: uint16(33960), + 103: uint16(34006), + 104: uint16(33944), + 105: uint16(33974), + 106: uint16(33999), + 107: uint16(33952), + 108: uint16(34007), + 109: uint16(34004), + 110: uint16(34002), + 111: uint16(34011), + 112: uint16(33968), + 113: uint16(33937), + 114: uint16(34401), + 115: uint16(34611), + 116: uint16(34595), + 117: uint16(34600), + 118: uint16(34667), + 119: uint16(34624), + 120: uint16(34606), + 121: uint16(34590), + 122: uint16(34593), + 123: uint16(34585), + 124: uint16(34587), + 125: uint16(34627), + 126: uint16(34604), + 127: uint16(34625), + 128: uint16(34622), + 129: uint16(34630), + 130: uint16(34592), + 131: uint16(34610), + 132: uint16(34602), + 133: uint16(34605), + 134: uint16(34620), + 135: uint16(34578), + 136: uint16(34618), + 137: uint16(34609), + 138: uint16(34613), + 139: uint16(34626), + 140: uint16(34598), + 141: uint16(34599), + 142: uint16(34616), + 143: uint16(34596), + 144: uint16(34586), + 145: uint16(34608), + 146: uint16(34577), + 147: uint16(35063), + 148: uint16(35047), + 149: uint16(35057), + 150: uint16(35058), + 151: uint16(35066), + 152: uint16(35070), + 153: uint16(35054), + 154: uint16(35068), + 155: uint16(35062), + 156: uint16(35067), + }, + 67: { + 0: uint16(35056), + 1: uint16(35052), + 2: uint16(35051), + 3: uint16(35229), + 4: uint16(35233), + 5: uint16(35231), + 6: uint16(35230), + 7: uint16(35305), + 8: uint16(35307), + 9: uint16(35304), + 10: uint16(35499), + 11: uint16(35481), + 12: uint16(35467), + 13: uint16(35474), + 14: uint16(35471), + 15: uint16(35478), + 16: uint16(35901), + 17: uint16(35944), + 18: uint16(35945), + 19: uint16(36053), + 20: uint16(36047), + 21: uint16(36055), + 22: uint16(36246), + 23: uint16(36361), + 24: uint16(36354), + 25: uint16(36351), + 26: uint16(36365), + 27: uint16(36349), + 28: uint16(36362), + 29: uint16(36355), + 30: uint16(36359), + 31: uint16(36358), + 32: uint16(36357), + 33: uint16(36350), + 34: uint16(36352), + 35: uint16(36356), + 36: uint16(36624), + 37: uint16(36625), + 38: uint16(36622), + 39: uint16(36621), + 40: uint16(37155), + 41: uint16(37148), + 42: uint16(37152), + 43: uint16(37154), + 44: uint16(37151), + 45: uint16(37149), + 46: uint16(37146), + 47: uint16(37156), + 48: uint16(37153), + 49: uint16(37147), + 50: uint16(37242), + 51: uint16(37234), + 52: uint16(37241), + 53: uint16(37235), + 54: uint16(37541), + 55: uint16(37540), + 56: uint16(37494), + 57: uint16(37531), + 58: uint16(37498), + 59: uint16(37536), + 60: uint16(37524), + 61: uint16(37546), + 62: uint16(37517), + 63: uint16(37542), + 64: uint16(37530), + 65: uint16(37547), + 66: uint16(37497), + 67: uint16(37527), + 68: uint16(37503), + 69: uint16(37539), + 70: uint16(37614), + 71: uint16(37518), + 72: uint16(37506), + 73: uint16(37525), + 74: uint16(37538), + 75: uint16(37501), + 76: uint16(37512), + 77: uint16(37537), + 78: uint16(37514), + 79: uint16(37510), + 80: uint16(37516), + 81: uint16(37529), + 82: uint16(37543), + 83: uint16(37502), + 84: uint16(37511), + 85: uint16(37545), + 86: uint16(37533), + 87: uint16(37515), + 88: uint16(37421), + 89: uint16(38558), + 90: uint16(38561), + 91: uint16(38655), + 92: uint16(38744), + 93: uint16(38781), + 94: uint16(38778), + 95: uint16(38782), + 96: uint16(38787), + 97: uint16(38784), + 98: uint16(38786), + 99: uint16(38779), + 100: uint16(38788), + 101: uint16(38785), + 102: uint16(38783), + 103: uint16(38862), + 104: uint16(38861), + 105: uint16(38934), + 106: uint16(39085), + 107: uint16(39086), + 108: uint16(39170), + 109: uint16(39168), + 110: uint16(39175), + 111: uint16(39325), + 112: uint16(39324), + 113: uint16(39363), + 114: uint16(39353), + 115: uint16(39355), + 116: uint16(39354), + 117: uint16(39362), + 118: uint16(39357), + 119: uint16(39367), + 120: uint16(39601), + 121: uint16(39651), + 122: uint16(39655), + 123: uint16(39742), + 124: uint16(39743), + 125: uint16(39776), + 126: uint16(39777), + 127: uint16(39775), + 128: uint16(40177), + 129: uint16(40178), + 130: uint16(40181), + 131: uint16(40615), + 132: uint16(20735), + 133: uint16(20739), + 134: uint16(20784), + 135: uint16(20728), + 136: uint16(20742), + 137: uint16(20743), + 138: uint16(20726), + 139: uint16(20734), + 140: uint16(20747), + 141: uint16(20748), + 142: uint16(20733), + 143: uint16(20746), + 144: uint16(21131), + 145: uint16(21132), + 146: uint16(21233), + 147: uint16(21231), + 148: uint16(22088), + 149: uint16(22082), + 150: uint16(22092), + 151: uint16(22069), + 152: uint16(22081), + 153: uint16(22090), + 154: uint16(22089), + 155: uint16(22086), + 156: uint16(22104), + }, + 68: { + 0: uint16(22106), + 1: uint16(22080), + 2: uint16(22067), + 3: uint16(22077), + 4: uint16(22060), + 5: uint16(22078), + 6: uint16(22072), + 7: uint16(22058), + 8: uint16(22074), + 9: uint16(22298), + 10: uint16(22699), + 11: uint16(22685), + 12: uint16(22705), + 13: uint16(22688), + 14: uint16(22691), + 15: uint16(22703), + 16: uint16(22700), + 17: uint16(22693), + 18: uint16(22689), + 19: uint16(22783), + 20: uint16(23295), + 21: uint16(23284), + 22: uint16(23293), + 23: uint16(23287), + 24: uint16(23286), + 25: uint16(23299), + 26: uint16(23288), + 27: uint16(23298), + 28: uint16(23289), + 29: uint16(23297), + 30: uint16(23303), + 31: uint16(23301), + 32: uint16(23311), + 33: uint16(23655), + 34: uint16(23961), + 35: uint16(23959), + 36: uint16(23967), + 37: uint16(23954), + 38: uint16(23970), + 39: uint16(23955), + 40: uint16(23957), + 41: uint16(23968), + 42: uint16(23964), + 43: uint16(23969), + 44: uint16(23962), + 45: uint16(23966), + 46: uint16(24169), + 47: uint16(24157), + 48: uint16(24160), + 49: uint16(24156), + 50: uint16(32243), + 51: uint16(24283), + 52: uint16(24286), + 53: uint16(24289), + 54: uint16(24393), + 55: uint16(24498), + 56: uint16(24971), + 57: uint16(24963), + 58: uint16(24953), + 59: uint16(25009), + 60: uint16(25008), + 61: uint16(24994), + 62: uint16(24969), + 63: uint16(24987), + 64: uint16(24979), + 65: uint16(25007), + 66: uint16(25005), + 67: uint16(24991), + 68: uint16(24978), + 69: uint16(25002), + 70: uint16(24993), + 71: uint16(24973), + 72: uint16(24934), + 73: uint16(25011), + 74: uint16(25133), + 75: uint16(25710), + 76: uint16(25712), + 77: uint16(25750), + 78: uint16(25760), + 79: uint16(25733), + 80: uint16(25751), + 81: uint16(25756), + 82: uint16(25743), + 83: uint16(25739), + 84: uint16(25738), + 85: uint16(25740), + 86: uint16(25763), + 87: uint16(25759), + 88: uint16(25704), + 89: uint16(25777), + 90: uint16(25752), + 91: uint16(25974), + 92: uint16(25978), + 93: uint16(25977), + 94: uint16(25979), + 95: uint16(26034), + 96: uint16(26035), + 97: uint16(26293), + 98: uint16(26288), + 99: uint16(26281), + 100: uint16(26290), + 101: uint16(26295), + 102: uint16(26282), + 103: uint16(26287), + 104: uint16(27136), + 105: uint16(27142), + 106: uint16(27159), + 107: uint16(27109), + 108: uint16(27128), + 109: uint16(27157), + 110: uint16(27121), + 111: uint16(27108), + 112: uint16(27168), + 113: uint16(27135), + 114: uint16(27116), + 115: uint16(27106), + 116: uint16(27163), + 117: uint16(27165), + 118: uint16(27134), + 119: uint16(27175), + 120: uint16(27122), + 121: uint16(27118), + 122: uint16(27156), + 123: uint16(27127), + 124: uint16(27111), + 125: uint16(27200), + 126: uint16(27144), + 127: uint16(27110), + 128: uint16(27131), + 129: uint16(27149), + 130: uint16(27132), + 131: uint16(27115), + 132: uint16(27145), + 133: uint16(27140), + 134: uint16(27160), + 135: uint16(27173), + 136: uint16(27151), + 137: uint16(27126), + 138: uint16(27174), + 139: uint16(27143), + 140: uint16(27124), + 141: uint16(27158), + 142: uint16(27473), + 143: uint16(27557), + 144: uint16(27555), + 145: uint16(27554), + 146: uint16(27558), + 147: uint16(27649), + 148: uint16(27648), + 149: uint16(27647), + 150: uint16(27650), + 151: uint16(28481), + 152: uint16(28454), + 153: uint16(28542), + 154: uint16(28551), + 155: uint16(28614), + 156: uint16(28562), + }, + 69: { + 0: uint16(28557), + 1: uint16(28553), + 2: uint16(28556), + 3: uint16(28514), + 4: uint16(28495), + 5: uint16(28549), + 6: uint16(28506), + 7: uint16(28566), + 8: uint16(28534), + 9: uint16(28524), + 10: uint16(28546), + 11: uint16(28501), + 12: uint16(28530), + 13: uint16(28498), + 14: uint16(28496), + 15: uint16(28503), + 16: uint16(28564), + 17: uint16(28563), + 18: uint16(28509), + 19: uint16(28416), + 20: uint16(28513), + 21: uint16(28523), + 22: uint16(28541), + 23: uint16(28519), + 24: uint16(28560), + 25: uint16(28499), + 26: uint16(28555), + 27: uint16(28521), + 28: uint16(28543), + 29: uint16(28565), + 30: uint16(28515), + 31: uint16(28535), + 32: uint16(28522), + 33: uint16(28539), + 34: uint16(29106), + 35: uint16(29103), + 36: uint16(29083), + 37: uint16(29104), + 38: uint16(29088), + 39: uint16(29082), + 40: uint16(29097), + 41: uint16(29109), + 42: uint16(29085), + 43: uint16(29093), + 44: uint16(29086), + 45: uint16(29092), + 46: uint16(29089), + 47: uint16(29098), + 48: uint16(29084), + 49: uint16(29095), + 50: uint16(29107), + 51: uint16(29336), + 52: uint16(29338), + 53: uint16(29528), + 54: uint16(29522), + 55: uint16(29534), + 56: uint16(29535), + 57: uint16(29536), + 58: uint16(29533), + 59: uint16(29531), + 60: uint16(29537), + 61: uint16(29530), + 62: uint16(29529), + 63: uint16(29538), + 64: uint16(29831), + 65: uint16(29833), + 66: uint16(29834), + 67: uint16(29830), + 68: uint16(29825), + 69: uint16(29821), + 70: uint16(29829), + 71: uint16(29832), + 72: uint16(29820), + 73: uint16(29817), + 74: uint16(29960), + 75: uint16(29959), + 76: uint16(30078), + 77: uint16(30245), + 78: uint16(30238), + 79: uint16(30233), + 80: uint16(30237), + 81: uint16(30236), + 82: uint16(30243), + 83: uint16(30234), + 84: uint16(30248), + 85: uint16(30235), + 86: uint16(30364), + 87: uint16(30365), + 88: uint16(30366), + 89: uint16(30363), + 90: uint16(30605), + 91: uint16(30607), + 92: uint16(30601), + 93: uint16(30600), + 94: uint16(30925), + 95: uint16(30907), + 96: uint16(30927), + 97: uint16(30924), + 98: uint16(30929), + 99: uint16(30926), + 100: uint16(30932), + 101: uint16(30920), + 102: uint16(30915), + 103: uint16(30916), + 104: uint16(30921), + 105: uint16(31130), + 106: uint16(31137), + 107: uint16(31136), + 108: uint16(31132), + 109: uint16(31138), + 110: uint16(31131), + 111: uint16(27510), + 112: uint16(31289), + 113: uint16(31410), + 114: uint16(31412), + 115: uint16(31411), + 116: uint16(31671), + 117: uint16(31691), + 118: uint16(31678), + 119: uint16(31660), + 120: uint16(31694), + 121: uint16(31663), + 122: uint16(31673), + 123: uint16(31690), + 124: uint16(31669), + 125: uint16(31941), + 126: uint16(31944), + 127: uint16(31948), + 128: uint16(31947), + 129: uint16(32247), + 130: uint16(32219), + 131: uint16(32234), + 132: uint16(32231), + 133: uint16(32215), + 134: uint16(32225), + 135: uint16(32259), + 136: uint16(32250), + 137: uint16(32230), + 138: uint16(32246), + 139: uint16(32241), + 140: uint16(32240), + 141: uint16(32238), + 142: uint16(32223), + 143: uint16(32630), + 144: uint16(32684), + 145: uint16(32688), + 146: uint16(32685), + 147: uint16(32749), + 148: uint16(32747), + 149: uint16(32746), + 150: uint16(32748), + 151: uint16(32742), + 152: uint16(32744), + 153: uint16(32868), + 154: uint16(32871), + 155: uint16(33187), + 156: uint16(33183), + }, + 70: { + 0: uint16(33182), + 1: uint16(33173), + 2: uint16(33186), + 3: uint16(33177), + 4: uint16(33175), + 5: uint16(33302), + 6: uint16(33359), + 7: uint16(33363), + 8: uint16(33362), + 9: uint16(33360), + 10: uint16(33358), + 11: uint16(33361), + 12: uint16(34084), + 13: uint16(34107), + 14: uint16(34063), + 15: uint16(34048), + 16: uint16(34089), + 17: uint16(34062), + 18: uint16(34057), + 19: uint16(34061), + 20: uint16(34079), + 21: uint16(34058), + 22: uint16(34087), + 23: uint16(34076), + 24: uint16(34043), + 25: uint16(34091), + 26: uint16(34042), + 27: uint16(34056), + 28: uint16(34060), + 29: uint16(34036), + 30: uint16(34090), + 31: uint16(34034), + 32: uint16(34069), + 33: uint16(34039), + 34: uint16(34027), + 35: uint16(34035), + 36: uint16(34044), + 37: uint16(34066), + 38: uint16(34026), + 39: uint16(34025), + 40: uint16(34070), + 41: uint16(34046), + 42: uint16(34088), + 43: uint16(34077), + 44: uint16(34094), + 45: uint16(34050), + 46: uint16(34045), + 47: uint16(34078), + 48: uint16(34038), + 49: uint16(34097), + 50: uint16(34086), + 51: uint16(34023), + 52: uint16(34024), + 53: uint16(34032), + 54: uint16(34031), + 55: uint16(34041), + 56: uint16(34072), + 57: uint16(34080), + 58: uint16(34096), + 59: uint16(34059), + 60: uint16(34073), + 61: uint16(34095), + 62: uint16(34402), + 63: uint16(34646), + 64: uint16(34659), + 65: uint16(34660), + 66: uint16(34679), + 67: uint16(34785), + 68: uint16(34675), + 69: uint16(34648), + 70: uint16(34644), + 71: uint16(34651), + 72: uint16(34642), + 73: uint16(34657), + 74: uint16(34650), + 75: uint16(34641), + 76: uint16(34654), + 77: uint16(34669), + 78: uint16(34666), + 79: uint16(34640), + 80: uint16(34638), + 81: uint16(34655), + 82: uint16(34653), + 83: uint16(34671), + 84: uint16(34668), + 85: uint16(34682), + 86: uint16(34670), + 87: uint16(34652), + 88: uint16(34661), + 89: uint16(34639), + 90: uint16(34683), + 91: uint16(34677), + 92: uint16(34658), + 93: uint16(34663), + 94: uint16(34665), + 95: uint16(34906), + 96: uint16(35077), + 97: uint16(35084), + 98: uint16(35092), + 99: uint16(35083), + 100: uint16(35095), + 101: uint16(35096), + 102: uint16(35097), + 103: uint16(35078), + 104: uint16(35094), + 105: uint16(35089), + 106: uint16(35086), + 107: uint16(35081), + 108: uint16(35234), + 109: uint16(35236), + 110: uint16(35235), + 111: uint16(35309), + 112: uint16(35312), + 113: uint16(35308), + 114: uint16(35535), + 115: uint16(35526), + 116: uint16(35512), + 117: uint16(35539), + 118: uint16(35537), + 119: uint16(35540), + 120: uint16(35541), + 121: uint16(35515), + 122: uint16(35543), + 123: uint16(35518), + 124: uint16(35520), + 125: uint16(35525), + 126: uint16(35544), + 127: uint16(35523), + 128: uint16(35514), + 129: uint16(35517), + 130: uint16(35545), + 131: uint16(35902), + 132: uint16(35917), + 133: uint16(35983), + 134: uint16(36069), + 135: uint16(36063), + 136: uint16(36057), + 137: uint16(36072), + 138: uint16(36058), + 139: uint16(36061), + 140: uint16(36071), + 141: uint16(36256), + 142: uint16(36252), + 143: uint16(36257), + 144: uint16(36251), + 145: uint16(36384), + 146: uint16(36387), + 147: uint16(36389), + 148: uint16(36388), + 149: uint16(36398), + 150: uint16(36373), + 151: uint16(36379), + 152: uint16(36374), + 153: uint16(36369), + 154: uint16(36377), + 155: uint16(36390), + 156: uint16(36391), + }, + 71: { + 0: uint16(36372), + 1: uint16(36370), + 2: uint16(36376), + 3: uint16(36371), + 4: uint16(36380), + 5: uint16(36375), + 6: uint16(36378), + 7: uint16(36652), + 8: uint16(36644), + 9: uint16(36632), + 10: uint16(36634), + 11: uint16(36640), + 12: uint16(36643), + 13: uint16(36630), + 14: uint16(36631), + 15: uint16(36979), + 16: uint16(36976), + 17: uint16(36975), + 18: uint16(36967), + 19: uint16(36971), + 20: uint16(37167), + 21: uint16(37163), + 22: uint16(37161), + 23: uint16(37162), + 24: uint16(37170), + 25: uint16(37158), + 26: uint16(37166), + 27: uint16(37253), + 28: uint16(37254), + 29: uint16(37258), + 30: uint16(37249), + 31: uint16(37250), + 32: uint16(37252), + 33: uint16(37248), + 34: uint16(37584), + 35: uint16(37571), + 36: uint16(37572), + 37: uint16(37568), + 38: uint16(37593), + 39: uint16(37558), + 40: uint16(37583), + 41: uint16(37617), + 42: uint16(37599), + 43: uint16(37592), + 44: uint16(37609), + 45: uint16(37591), + 46: uint16(37597), + 47: uint16(37580), + 48: uint16(37615), + 49: uint16(37570), + 50: uint16(37608), + 51: uint16(37578), + 52: uint16(37576), + 53: uint16(37582), + 54: uint16(37606), + 55: uint16(37581), + 56: uint16(37589), + 57: uint16(37577), + 58: uint16(37600), + 59: uint16(37598), + 60: uint16(37607), + 61: uint16(37585), + 62: uint16(37587), + 63: uint16(37557), + 64: uint16(37601), + 65: uint16(37574), + 66: uint16(37556), + 67: uint16(38268), + 68: uint16(38316), + 69: uint16(38315), + 70: uint16(38318), + 71: uint16(38320), + 72: uint16(38564), + 73: uint16(38562), + 74: uint16(38611), + 75: uint16(38661), + 76: uint16(38664), + 77: uint16(38658), + 78: uint16(38746), + 79: uint16(38794), + 80: uint16(38798), + 81: uint16(38792), + 82: uint16(38864), + 83: uint16(38863), + 84: uint16(38942), + 85: uint16(38941), + 86: uint16(38950), + 87: uint16(38953), + 88: uint16(38952), + 89: uint16(38944), + 90: uint16(38939), + 91: uint16(38951), + 92: uint16(39090), + 93: uint16(39176), + 94: uint16(39162), + 95: uint16(39185), + 96: uint16(39188), + 97: uint16(39190), + 98: uint16(39191), + 99: uint16(39189), + 100: uint16(39388), + 101: uint16(39373), + 102: uint16(39375), + 103: uint16(39379), + 104: uint16(39380), + 105: uint16(39374), + 106: uint16(39369), + 107: uint16(39382), + 108: uint16(39384), + 109: uint16(39371), + 110: uint16(39383), + 111: uint16(39372), + 112: uint16(39603), + 113: uint16(39660), + 114: uint16(39659), + 115: uint16(39667), + 116: uint16(39666), + 117: uint16(39665), + 118: uint16(39750), + 119: uint16(39747), + 120: uint16(39783), + 121: uint16(39796), + 122: uint16(39793), + 123: uint16(39782), + 124: uint16(39798), + 125: uint16(39797), + 126: uint16(39792), + 127: uint16(39784), + 128: uint16(39780), + 129: uint16(39788), + 130: uint16(40188), + 131: uint16(40186), + 132: uint16(40189), + 133: uint16(40191), + 134: uint16(40183), + 135: uint16(40199), + 136: uint16(40192), + 137: uint16(40185), + 138: uint16(40187), + 139: uint16(40200), + 140: uint16(40197), + 141: uint16(40196), + 142: uint16(40579), + 143: uint16(40659), + 144: uint16(40719), + 145: uint16(40720), + 146: uint16(20764), + 147: uint16(20755), + 148: uint16(20759), + 149: uint16(20762), + 150: uint16(20753), + 151: uint16(20958), + 152: uint16(21300), + 153: uint16(21473), + 154: uint16(22128), + 155: uint16(22112), + 156: uint16(22126), + }, + 72: { + 0: uint16(22131), + 1: uint16(22118), + 2: uint16(22115), + 3: uint16(22125), + 4: uint16(22130), + 5: uint16(22110), + 6: uint16(22135), + 7: uint16(22300), + 8: uint16(22299), + 9: uint16(22728), + 10: uint16(22717), + 11: uint16(22729), + 12: uint16(22719), + 13: uint16(22714), + 14: uint16(22722), + 15: uint16(22716), + 16: uint16(22726), + 17: uint16(23319), + 18: uint16(23321), + 19: uint16(23323), + 20: uint16(23329), + 21: uint16(23316), + 22: uint16(23315), + 23: uint16(23312), + 24: uint16(23318), + 25: uint16(23336), + 26: uint16(23322), + 27: uint16(23328), + 28: uint16(23326), + 29: uint16(23535), + 30: uint16(23980), + 31: uint16(23985), + 32: uint16(23977), + 33: uint16(23975), + 34: uint16(23989), + 35: uint16(23984), + 36: uint16(23982), + 37: uint16(23978), + 38: uint16(23976), + 39: uint16(23986), + 40: uint16(23981), + 41: uint16(23983), + 42: uint16(23988), + 43: uint16(24167), + 44: uint16(24168), + 45: uint16(24166), + 46: uint16(24175), + 47: uint16(24297), + 48: uint16(24295), + 49: uint16(24294), + 50: uint16(24296), + 51: uint16(24293), + 52: uint16(24395), + 53: uint16(24508), + 54: uint16(24989), + 55: uint16(25000), + 56: uint16(24982), + 57: uint16(25029), + 58: uint16(25012), + 59: uint16(25030), + 60: uint16(25025), + 61: uint16(25036), + 62: uint16(25018), + 63: uint16(25023), + 64: uint16(25016), + 65: uint16(24972), + 66: uint16(25815), + 67: uint16(25814), + 68: uint16(25808), + 69: uint16(25807), + 70: uint16(25801), + 71: uint16(25789), + 72: uint16(25737), + 73: uint16(25795), + 74: uint16(25819), + 75: uint16(25843), + 76: uint16(25817), + 77: uint16(25907), + 78: uint16(25983), + 79: uint16(25980), + 80: uint16(26018), + 81: uint16(26312), + 82: uint16(26302), + 83: uint16(26304), + 84: uint16(26314), + 85: uint16(26315), + 86: uint16(26319), + 87: uint16(26301), + 88: uint16(26299), + 89: uint16(26298), + 90: uint16(26316), + 91: uint16(26403), + 92: uint16(27188), + 93: uint16(27238), + 94: uint16(27209), + 95: uint16(27239), + 96: uint16(27186), + 97: uint16(27240), + 98: uint16(27198), + 99: uint16(27229), + 100: uint16(27245), + 101: uint16(27254), + 102: uint16(27227), + 103: uint16(27217), + 104: uint16(27176), + 105: uint16(27226), + 106: uint16(27195), + 107: uint16(27199), + 108: uint16(27201), + 109: uint16(27242), + 110: uint16(27236), + 111: uint16(27216), + 112: uint16(27215), + 113: uint16(27220), + 114: uint16(27247), + 115: uint16(27241), + 116: uint16(27232), + 117: uint16(27196), + 118: uint16(27230), + 119: uint16(27222), + 120: uint16(27221), + 121: uint16(27213), + 122: uint16(27214), + 123: uint16(27206), + 124: uint16(27477), + 125: uint16(27476), + 126: uint16(27478), + 127: uint16(27559), + 128: uint16(27562), + 129: uint16(27563), + 130: uint16(27592), + 131: uint16(27591), + 132: uint16(27652), + 133: uint16(27651), + 134: uint16(27654), + 135: uint16(28589), + 136: uint16(28619), + 137: uint16(28579), + 138: uint16(28615), + 139: uint16(28604), + 140: uint16(28622), + 141: uint16(28616), + 142: uint16(28510), + 143: uint16(28612), + 144: uint16(28605), + 145: uint16(28574), + 146: uint16(28618), + 147: uint16(28584), + 148: uint16(28676), + 149: uint16(28581), + 150: uint16(28590), + 151: uint16(28602), + 152: uint16(28588), + 153: uint16(28586), + 154: uint16(28623), + 155: uint16(28607), + 156: uint16(28600), + }, + 73: { + 0: uint16(28578), + 1: uint16(28617), + 2: uint16(28587), + 3: uint16(28621), + 4: uint16(28591), + 5: uint16(28594), + 6: uint16(28592), + 7: uint16(29125), + 8: uint16(29122), + 9: uint16(29119), + 10: uint16(29112), + 11: uint16(29142), + 12: uint16(29120), + 13: uint16(29121), + 14: uint16(29131), + 15: uint16(29140), + 16: uint16(29130), + 17: uint16(29127), + 18: uint16(29135), + 19: uint16(29117), + 20: uint16(29144), + 21: uint16(29116), + 22: uint16(29126), + 23: uint16(29146), + 24: uint16(29147), + 25: uint16(29341), + 26: uint16(29342), + 27: uint16(29545), + 28: uint16(29542), + 29: uint16(29543), + 30: uint16(29548), + 31: uint16(29541), + 32: uint16(29547), + 33: uint16(29546), + 34: uint16(29823), + 35: uint16(29850), + 36: uint16(29856), + 37: uint16(29844), + 38: uint16(29842), + 39: uint16(29845), + 40: uint16(29857), + 41: uint16(29963), + 42: uint16(30080), + 43: uint16(30255), + 44: uint16(30253), + 45: uint16(30257), + 46: uint16(30269), + 47: uint16(30259), + 48: uint16(30268), + 49: uint16(30261), + 50: uint16(30258), + 51: uint16(30256), + 52: uint16(30395), + 53: uint16(30438), + 54: uint16(30618), + 55: uint16(30621), + 56: uint16(30625), + 57: uint16(30620), + 58: uint16(30619), + 59: uint16(30626), + 60: uint16(30627), + 61: uint16(30613), + 62: uint16(30617), + 63: uint16(30615), + 64: uint16(30941), + 65: uint16(30953), + 66: uint16(30949), + 67: uint16(30954), + 68: uint16(30942), + 69: uint16(30947), + 70: uint16(30939), + 71: uint16(30945), + 72: uint16(30946), + 73: uint16(30957), + 74: uint16(30943), + 75: uint16(30944), + 76: uint16(31140), + 77: uint16(31300), + 78: uint16(31304), + 79: uint16(31303), + 80: uint16(31414), + 81: uint16(31416), + 82: uint16(31413), + 83: uint16(31409), + 84: uint16(31415), + 85: uint16(31710), + 86: uint16(31715), + 87: uint16(31719), + 88: uint16(31709), + 89: uint16(31701), + 90: uint16(31717), + 91: uint16(31706), + 92: uint16(31720), + 93: uint16(31737), + 94: uint16(31700), + 95: uint16(31722), + 96: uint16(31714), + 97: uint16(31708), + 98: uint16(31723), + 99: uint16(31704), + 100: uint16(31711), + 101: uint16(31954), + 102: uint16(31956), + 103: uint16(31959), + 104: uint16(31952), + 105: uint16(31953), + 106: uint16(32274), + 107: uint16(32289), + 108: uint16(32279), + 109: uint16(32268), + 110: uint16(32287), + 111: uint16(32288), + 112: uint16(32275), + 113: uint16(32270), + 114: uint16(32284), + 115: uint16(32277), + 116: uint16(32282), + 117: uint16(32290), + 118: uint16(32267), + 119: uint16(32271), + 120: uint16(32278), + 121: uint16(32269), + 122: uint16(32276), + 123: uint16(32293), + 124: uint16(32292), + 125: uint16(32579), + 126: uint16(32635), + 127: uint16(32636), + 128: uint16(32634), + 129: uint16(32689), + 130: uint16(32751), + 131: uint16(32810), + 132: uint16(32809), + 133: uint16(32876), + 134: uint16(33201), + 135: uint16(33190), + 136: uint16(33198), + 137: uint16(33209), + 138: uint16(33205), + 139: uint16(33195), + 140: uint16(33200), + 141: uint16(33196), + 142: uint16(33204), + 143: uint16(33202), + 144: uint16(33207), + 145: uint16(33191), + 146: uint16(33266), + 147: uint16(33365), + 148: uint16(33366), + 149: uint16(33367), + 150: uint16(34134), + 151: uint16(34117), + 152: uint16(34155), + 153: uint16(34125), + 154: uint16(34131), + 155: uint16(34145), + 156: uint16(34136), + }, + 74: { + 0: uint16(34112), + 1: uint16(34118), + 2: uint16(34148), + 3: uint16(34113), + 4: uint16(34146), + 5: uint16(34116), + 6: uint16(34129), + 7: uint16(34119), + 8: uint16(34147), + 9: uint16(34110), + 10: uint16(34139), + 11: uint16(34161), + 12: uint16(34126), + 13: uint16(34158), + 14: uint16(34165), + 15: uint16(34133), + 16: uint16(34151), + 17: uint16(34144), + 18: uint16(34188), + 19: uint16(34150), + 20: uint16(34141), + 21: uint16(34132), + 22: uint16(34149), + 23: uint16(34156), + 24: uint16(34403), + 25: uint16(34405), + 26: uint16(34404), + 27: uint16(34715), + 28: uint16(34703), + 29: uint16(34711), + 30: uint16(34707), + 31: uint16(34706), + 32: uint16(34696), + 33: uint16(34689), + 34: uint16(34710), + 35: uint16(34712), + 36: uint16(34681), + 37: uint16(34695), + 38: uint16(34723), + 39: uint16(34693), + 40: uint16(34704), + 41: uint16(34705), + 42: uint16(34717), + 43: uint16(34692), + 44: uint16(34708), + 45: uint16(34716), + 46: uint16(34714), + 47: uint16(34697), + 48: uint16(35102), + 49: uint16(35110), + 50: uint16(35120), + 51: uint16(35117), + 52: uint16(35118), + 53: uint16(35111), + 54: uint16(35121), + 55: uint16(35106), + 56: uint16(35113), + 57: uint16(35107), + 58: uint16(35119), + 59: uint16(35116), + 60: uint16(35103), + 61: uint16(35313), + 62: uint16(35552), + 63: uint16(35554), + 64: uint16(35570), + 65: uint16(35572), + 66: uint16(35573), + 67: uint16(35549), + 68: uint16(35604), + 69: uint16(35556), + 70: uint16(35551), + 71: uint16(35568), + 72: uint16(35528), + 73: uint16(35550), + 74: uint16(35553), + 75: uint16(35560), + 76: uint16(35583), + 77: uint16(35567), + 78: uint16(35579), + 79: uint16(35985), + 80: uint16(35986), + 81: uint16(35984), + 82: uint16(36085), + 83: uint16(36078), + 84: uint16(36081), + 85: uint16(36080), + 86: uint16(36083), + 87: uint16(36204), + 88: uint16(36206), + 89: uint16(36261), + 90: uint16(36263), + 91: uint16(36403), + 92: uint16(36414), + 93: uint16(36408), + 94: uint16(36416), + 95: uint16(36421), + 96: uint16(36406), + 97: uint16(36412), + 98: uint16(36413), + 99: uint16(36417), + 100: uint16(36400), + 101: uint16(36415), + 102: uint16(36541), + 103: uint16(36662), + 104: uint16(36654), + 105: uint16(36661), + 106: uint16(36658), + 107: uint16(36665), + 108: uint16(36663), + 109: uint16(36660), + 110: uint16(36982), + 111: uint16(36985), + 112: uint16(36987), + 113: uint16(36998), + 114: uint16(37114), + 115: uint16(37171), + 116: uint16(37173), + 117: uint16(37174), + 118: uint16(37267), + 119: uint16(37264), + 120: uint16(37265), + 121: uint16(37261), + 122: uint16(37263), + 123: uint16(37671), + 124: uint16(37662), + 125: uint16(37640), + 126: uint16(37663), + 127: uint16(37638), + 128: uint16(37647), + 129: uint16(37754), + 130: uint16(37688), + 131: uint16(37692), + 132: uint16(37659), + 133: uint16(37667), + 134: uint16(37650), + 135: uint16(37633), + 136: uint16(37702), + 137: uint16(37677), + 138: uint16(37646), + 139: uint16(37645), + 140: uint16(37579), + 141: uint16(37661), + 142: uint16(37626), + 143: uint16(37669), + 144: uint16(37651), + 145: uint16(37625), + 146: uint16(37623), + 147: uint16(37684), + 148: uint16(37634), + 149: uint16(37668), + 150: uint16(37631), + 151: uint16(37673), + 152: uint16(37689), + 153: uint16(37685), + 154: uint16(37674), + 155: uint16(37652), + 156: uint16(37644), + }, + 75: { + 0: uint16(37643), + 1: uint16(37630), + 2: uint16(37641), + 3: uint16(37632), + 4: uint16(37627), + 5: uint16(37654), + 6: uint16(38332), + 7: uint16(38349), + 8: uint16(38334), + 9: uint16(38329), + 10: uint16(38330), + 11: uint16(38326), + 12: uint16(38335), + 13: uint16(38325), + 14: uint16(38333), + 15: uint16(38569), + 16: uint16(38612), + 17: uint16(38667), + 18: uint16(38674), + 19: uint16(38672), + 20: uint16(38809), + 21: uint16(38807), + 22: uint16(38804), + 23: uint16(38896), + 24: uint16(38904), + 25: uint16(38965), + 26: uint16(38959), + 27: uint16(38962), + 28: uint16(39204), + 29: uint16(39199), + 30: uint16(39207), + 31: uint16(39209), + 32: uint16(39326), + 33: uint16(39406), + 34: uint16(39404), + 35: uint16(39397), + 36: uint16(39396), + 37: uint16(39408), + 38: uint16(39395), + 39: uint16(39402), + 40: uint16(39401), + 41: uint16(39399), + 42: uint16(39609), + 43: uint16(39615), + 44: uint16(39604), + 45: uint16(39611), + 46: uint16(39670), + 47: uint16(39674), + 48: uint16(39673), + 49: uint16(39671), + 50: uint16(39731), + 51: uint16(39808), + 52: uint16(39813), + 53: uint16(39815), + 54: uint16(39804), + 55: uint16(39806), + 56: uint16(39803), + 57: uint16(39810), + 58: uint16(39827), + 59: uint16(39826), + 60: uint16(39824), + 61: uint16(39802), + 62: uint16(39829), + 63: uint16(39805), + 64: uint16(39816), + 65: uint16(40229), + 66: uint16(40215), + 67: uint16(40224), + 68: uint16(40222), + 69: uint16(40212), + 70: uint16(40233), + 71: uint16(40221), + 72: uint16(40216), + 73: uint16(40226), + 74: uint16(40208), + 75: uint16(40217), + 76: uint16(40223), + 77: uint16(40584), + 78: uint16(40582), + 79: uint16(40583), + 80: uint16(40622), + 81: uint16(40621), + 82: uint16(40661), + 83: uint16(40662), + 84: uint16(40698), + 85: uint16(40722), + 86: uint16(40765), + 87: uint16(20774), + 88: uint16(20773), + 89: uint16(20770), + 90: uint16(20772), + 91: uint16(20768), + 92: uint16(20777), + 93: uint16(21236), + 94: uint16(22163), + 95: uint16(22156), + 96: uint16(22157), + 97: uint16(22150), + 98: uint16(22148), + 99: uint16(22147), + 100: uint16(22142), + 101: uint16(22146), + 102: uint16(22143), + 103: uint16(22145), + 104: uint16(22742), + 105: uint16(22740), + 106: uint16(22735), + 107: uint16(22738), + 108: uint16(23341), + 109: uint16(23333), + 110: uint16(23346), + 111: uint16(23331), + 112: uint16(23340), + 113: uint16(23335), + 114: uint16(23334), + 115: uint16(23343), + 116: uint16(23342), + 117: uint16(23419), + 118: uint16(23537), + 119: uint16(23538), + 120: uint16(23991), + 121: uint16(24172), + 122: uint16(24170), + 123: uint16(24510), + 124: uint16(24507), + 125: uint16(25027), + 126: uint16(25013), + 127: uint16(25020), + 128: uint16(25063), + 129: uint16(25056), + 130: uint16(25061), + 131: uint16(25060), + 132: uint16(25064), + 133: uint16(25054), + 134: uint16(25839), + 135: uint16(25833), + 136: uint16(25827), + 137: uint16(25835), + 138: uint16(25828), + 139: uint16(25832), + 140: uint16(25985), + 141: uint16(25984), + 142: uint16(26038), + 143: uint16(26074), + 144: uint16(26322), + 145: uint16(27277), + 146: uint16(27286), + 147: uint16(27265), + 148: uint16(27301), + 149: uint16(27273), + 150: uint16(27295), + 151: uint16(27291), + 152: uint16(27297), + 153: uint16(27294), + 154: uint16(27271), + 155: uint16(27283), + 156: uint16(27278), + }, + 76: { + 0: uint16(27285), + 1: uint16(27267), + 2: uint16(27304), + 3: uint16(27300), + 4: uint16(27281), + 5: uint16(27263), + 6: uint16(27302), + 7: uint16(27290), + 8: uint16(27269), + 9: uint16(27276), + 10: uint16(27282), + 11: uint16(27483), + 12: uint16(27565), + 13: uint16(27657), + 14: uint16(28620), + 15: uint16(28585), + 16: uint16(28660), + 17: uint16(28628), + 18: uint16(28643), + 19: uint16(28636), + 20: uint16(28653), + 21: uint16(28647), + 22: uint16(28646), + 23: uint16(28638), + 24: uint16(28658), + 25: uint16(28637), + 26: uint16(28642), + 27: uint16(28648), + 28: uint16(29153), + 29: uint16(29169), + 30: uint16(29160), + 31: uint16(29170), + 32: uint16(29156), + 33: uint16(29168), + 34: uint16(29154), + 35: uint16(29555), + 36: uint16(29550), + 37: uint16(29551), + 38: uint16(29847), + 39: uint16(29874), + 40: uint16(29867), + 41: uint16(29840), + 42: uint16(29866), + 43: uint16(29869), + 44: uint16(29873), + 45: uint16(29861), + 46: uint16(29871), + 47: uint16(29968), + 48: uint16(29969), + 49: uint16(29970), + 50: uint16(29967), + 51: uint16(30084), + 52: uint16(30275), + 53: uint16(30280), + 54: uint16(30281), + 55: uint16(30279), + 56: uint16(30372), + 57: uint16(30441), + 58: uint16(30645), + 59: uint16(30635), + 60: uint16(30642), + 61: uint16(30647), + 62: uint16(30646), + 63: uint16(30644), + 64: uint16(30641), + 65: uint16(30632), + 66: uint16(30704), + 67: uint16(30963), + 68: uint16(30973), + 69: uint16(30978), + 70: uint16(30971), + 71: uint16(30972), + 72: uint16(30962), + 73: uint16(30981), + 74: uint16(30969), + 75: uint16(30974), + 76: uint16(30980), + 77: uint16(31147), + 78: uint16(31144), + 79: uint16(31324), + 80: uint16(31323), + 81: uint16(31318), + 82: uint16(31320), + 83: uint16(31316), + 84: uint16(31322), + 85: uint16(31422), + 86: uint16(31424), + 87: uint16(31425), + 88: uint16(31749), + 89: uint16(31759), + 90: uint16(31730), + 91: uint16(31744), + 92: uint16(31743), + 93: uint16(31739), + 94: uint16(31758), + 95: uint16(31732), + 96: uint16(31755), + 97: uint16(31731), + 98: uint16(31746), + 99: uint16(31753), + 100: uint16(31747), + 101: uint16(31745), + 102: uint16(31736), + 103: uint16(31741), + 104: uint16(31750), + 105: uint16(31728), + 106: uint16(31729), + 107: uint16(31760), + 108: uint16(31754), + 109: uint16(31976), + 110: uint16(32301), + 111: uint16(32316), + 112: uint16(32322), + 113: uint16(32307), + 114: uint16(38984), + 115: uint16(32312), + 116: uint16(32298), + 117: uint16(32329), + 118: uint16(32320), + 119: uint16(32327), + 120: uint16(32297), + 121: uint16(32332), + 122: uint16(32304), + 123: uint16(32315), + 124: uint16(32310), + 125: uint16(32324), + 126: uint16(32314), + 127: uint16(32581), + 128: uint16(32639), + 129: uint16(32638), + 130: uint16(32637), + 131: uint16(32756), + 132: uint16(32754), + 133: uint16(32812), + 134: uint16(33211), + 135: uint16(33220), + 136: uint16(33228), + 137: uint16(33226), + 138: uint16(33221), + 139: uint16(33223), + 140: uint16(33212), + 141: uint16(33257), + 142: uint16(33371), + 143: uint16(33370), + 144: uint16(33372), + 145: uint16(34179), + 146: uint16(34176), + 147: uint16(34191), + 148: uint16(34215), + 149: uint16(34197), + 150: uint16(34208), + 151: uint16(34187), + 152: uint16(34211), + 153: uint16(34171), + 154: uint16(34212), + 155: uint16(34202), + 156: uint16(34206), + }, + 77: { + 0: uint16(34167), + 1: uint16(34172), + 2: uint16(34185), + 3: uint16(34209), + 4: uint16(34170), + 5: uint16(34168), + 6: uint16(34135), + 7: uint16(34190), + 8: uint16(34198), + 9: uint16(34182), + 10: uint16(34189), + 11: uint16(34201), + 12: uint16(34205), + 13: uint16(34177), + 14: uint16(34210), + 15: uint16(34178), + 16: uint16(34184), + 17: uint16(34181), + 18: uint16(34169), + 19: uint16(34166), + 20: uint16(34200), + 21: uint16(34192), + 22: uint16(34207), + 23: uint16(34408), + 24: uint16(34750), + 25: uint16(34730), + 26: uint16(34733), + 27: uint16(34757), + 28: uint16(34736), + 29: uint16(34732), + 30: uint16(34745), + 31: uint16(34741), + 32: uint16(34748), + 33: uint16(34734), + 34: uint16(34761), + 35: uint16(34755), + 36: uint16(34754), + 37: uint16(34764), + 38: uint16(34743), + 39: uint16(34735), + 40: uint16(34756), + 41: uint16(34762), + 42: uint16(34740), + 43: uint16(34742), + 44: uint16(34751), + 45: uint16(34744), + 46: uint16(34749), + 47: uint16(34782), + 48: uint16(34738), + 49: uint16(35125), + 50: uint16(35123), + 51: uint16(35132), + 52: uint16(35134), + 53: uint16(35137), + 54: uint16(35154), + 55: uint16(35127), + 56: uint16(35138), + 57: uint16(35245), + 58: uint16(35247), + 59: uint16(35246), + 60: uint16(35314), + 61: uint16(35315), + 62: uint16(35614), + 63: uint16(35608), + 64: uint16(35606), + 65: uint16(35601), + 66: uint16(35589), + 67: uint16(35595), + 68: uint16(35618), + 69: uint16(35599), + 70: uint16(35602), + 71: uint16(35605), + 72: uint16(35591), + 73: uint16(35597), + 74: uint16(35592), + 75: uint16(35590), + 76: uint16(35612), + 77: uint16(35603), + 78: uint16(35610), + 79: uint16(35919), + 80: uint16(35952), + 81: uint16(35954), + 82: uint16(35953), + 83: uint16(35951), + 84: uint16(35989), + 85: uint16(35988), + 86: uint16(36089), + 87: uint16(36207), + 88: uint16(36430), + 89: uint16(36429), + 90: uint16(36435), + 91: uint16(36432), + 92: uint16(36428), + 93: uint16(36423), + 94: uint16(36675), + 95: uint16(36672), + 96: uint16(36997), + 97: uint16(36990), + 98: uint16(37176), + 99: uint16(37274), + 100: uint16(37282), + 101: uint16(37275), + 102: uint16(37273), + 103: uint16(37279), + 104: uint16(37281), + 105: uint16(37277), + 106: uint16(37280), + 107: uint16(37793), + 108: uint16(37763), + 109: uint16(37807), + 110: uint16(37732), + 111: uint16(37718), + 112: uint16(37703), + 113: uint16(37756), + 114: uint16(37720), + 115: uint16(37724), + 116: uint16(37750), + 117: uint16(37705), + 118: uint16(37712), + 119: uint16(37713), + 120: uint16(37728), + 121: uint16(37741), + 122: uint16(37775), + 123: uint16(37708), + 124: uint16(37738), + 125: uint16(37753), + 126: uint16(37719), + 127: uint16(37717), + 128: uint16(37714), + 129: uint16(37711), + 130: uint16(37745), + 131: uint16(37751), + 132: uint16(37755), + 133: uint16(37729), + 134: uint16(37726), + 135: uint16(37731), + 136: uint16(37735), + 137: uint16(37760), + 138: uint16(37710), + 139: uint16(37721), + 140: uint16(38343), + 141: uint16(38336), + 142: uint16(38345), + 143: uint16(38339), + 144: uint16(38341), + 145: uint16(38327), + 146: uint16(38574), + 147: uint16(38576), + 148: uint16(38572), + 149: uint16(38688), + 150: uint16(38687), + 151: uint16(38680), + 152: uint16(38685), + 153: uint16(38681), + 154: uint16(38810), + 155: uint16(38817), + 156: uint16(38812), + }, + 78: { + 0: uint16(38814), + 1: uint16(38813), + 2: uint16(38869), + 3: uint16(38868), + 4: uint16(38897), + 5: uint16(38977), + 6: uint16(38980), + 7: uint16(38986), + 8: uint16(38985), + 9: uint16(38981), + 10: uint16(38979), + 11: uint16(39205), + 12: uint16(39211), + 13: uint16(39212), + 14: uint16(39210), + 15: uint16(39219), + 16: uint16(39218), + 17: uint16(39215), + 18: uint16(39213), + 19: uint16(39217), + 20: uint16(39216), + 21: uint16(39320), + 22: uint16(39331), + 23: uint16(39329), + 24: uint16(39426), + 25: uint16(39418), + 26: uint16(39412), + 27: uint16(39415), + 28: uint16(39417), + 29: uint16(39416), + 30: uint16(39414), + 31: uint16(39419), + 32: uint16(39421), + 33: uint16(39422), + 34: uint16(39420), + 35: uint16(39427), + 36: uint16(39614), + 37: uint16(39678), + 38: uint16(39677), + 39: uint16(39681), + 40: uint16(39676), + 41: uint16(39752), + 42: uint16(39834), + 43: uint16(39848), + 44: uint16(39838), + 45: uint16(39835), + 46: uint16(39846), + 47: uint16(39841), + 48: uint16(39845), + 49: uint16(39844), + 50: uint16(39814), + 51: uint16(39842), + 52: uint16(39840), + 53: uint16(39855), + 54: uint16(40243), + 55: uint16(40257), + 56: uint16(40295), + 57: uint16(40246), + 58: uint16(40238), + 59: uint16(40239), + 60: uint16(40241), + 61: uint16(40248), + 62: uint16(40240), + 63: uint16(40261), + 64: uint16(40258), + 65: uint16(40259), + 66: uint16(40254), + 67: uint16(40247), + 68: uint16(40256), + 69: uint16(40253), + 70: uint16(32757), + 71: uint16(40237), + 72: uint16(40586), + 73: uint16(40585), + 74: uint16(40589), + 75: uint16(40624), + 76: uint16(40648), + 77: uint16(40666), + 78: uint16(40699), + 79: uint16(40703), + 80: uint16(40740), + 81: uint16(40739), + 82: uint16(40738), + 83: uint16(40788), + 84: uint16(40864), + 85: uint16(20785), + 86: uint16(20781), + 87: uint16(20782), + 88: uint16(22168), + 89: uint16(22172), + 90: uint16(22167), + 91: uint16(22170), + 92: uint16(22173), + 93: uint16(22169), + 94: uint16(22896), + 95: uint16(23356), + 96: uint16(23657), + 97: uint16(23658), + 98: uint16(24000), + 99: uint16(24173), + 100: uint16(24174), + 101: uint16(25048), + 102: uint16(25055), + 103: uint16(25069), + 104: uint16(25070), + 105: uint16(25073), + 106: uint16(25066), + 107: uint16(25072), + 108: uint16(25067), + 109: uint16(25046), + 110: uint16(25065), + 111: uint16(25855), + 112: uint16(25860), + 113: uint16(25853), + 114: uint16(25848), + 115: uint16(25857), + 116: uint16(25859), + 117: uint16(25852), + 118: uint16(26004), + 119: uint16(26075), + 120: uint16(26330), + 121: uint16(26331), + 122: uint16(26328), + 123: uint16(27333), + 124: uint16(27321), + 125: uint16(27325), + 126: uint16(27361), + 127: uint16(27334), + 128: uint16(27322), + 129: uint16(27318), + 130: uint16(27319), + 131: uint16(27335), + 132: uint16(27316), + 133: uint16(27309), + 134: uint16(27486), + 135: uint16(27593), + 136: uint16(27659), + 137: uint16(28679), + 138: uint16(28684), + 139: uint16(28685), + 140: uint16(28673), + 141: uint16(28677), + 142: uint16(28692), + 143: uint16(28686), + 144: uint16(28671), + 145: uint16(28672), + 146: uint16(28667), + 147: uint16(28710), + 148: uint16(28668), + 149: uint16(28663), + 150: uint16(28682), + 151: uint16(29185), + 152: uint16(29183), + 153: uint16(29177), + 154: uint16(29187), + 155: uint16(29181), + 156: uint16(29558), + }, + 79: { + 0: uint16(29880), + 1: uint16(29888), + 2: uint16(29877), + 3: uint16(29889), + 4: uint16(29886), + 5: uint16(29878), + 6: uint16(29883), + 7: uint16(29890), + 8: uint16(29972), + 9: uint16(29971), + 10: uint16(30300), + 11: uint16(30308), + 12: uint16(30297), + 13: uint16(30288), + 14: uint16(30291), + 15: uint16(30295), + 16: uint16(30298), + 17: uint16(30374), + 18: uint16(30397), + 19: uint16(30444), + 20: uint16(30658), + 21: uint16(30650), + 22: uint16(30975), + 23: uint16(30988), + 24: uint16(30995), + 25: uint16(30996), + 26: uint16(30985), + 27: uint16(30992), + 28: uint16(30994), + 29: uint16(30993), + 30: uint16(31149), + 31: uint16(31148), + 32: uint16(31327), + 33: uint16(31772), + 34: uint16(31785), + 35: uint16(31769), + 36: uint16(31776), + 37: uint16(31775), + 38: uint16(31789), + 39: uint16(31773), + 40: uint16(31782), + 41: uint16(31784), + 42: uint16(31778), + 43: uint16(31781), + 44: uint16(31792), + 45: uint16(32348), + 46: uint16(32336), + 47: uint16(32342), + 48: uint16(32355), + 49: uint16(32344), + 50: uint16(32354), + 51: uint16(32351), + 52: uint16(32337), + 53: uint16(32352), + 54: uint16(32343), + 55: uint16(32339), + 56: uint16(32693), + 57: uint16(32691), + 58: uint16(32759), + 59: uint16(32760), + 60: uint16(32885), + 61: uint16(33233), + 62: uint16(33234), + 63: uint16(33232), + 64: uint16(33375), + 65: uint16(33374), + 66: uint16(34228), + 67: uint16(34246), + 68: uint16(34240), + 69: uint16(34243), + 70: uint16(34242), + 71: uint16(34227), + 72: uint16(34229), + 73: uint16(34237), + 74: uint16(34247), + 75: uint16(34244), + 76: uint16(34239), + 77: uint16(34251), + 78: uint16(34254), + 79: uint16(34248), + 80: uint16(34245), + 81: uint16(34225), + 82: uint16(34230), + 83: uint16(34258), + 84: uint16(34340), + 85: uint16(34232), + 86: uint16(34231), + 87: uint16(34238), + 88: uint16(34409), + 89: uint16(34791), + 90: uint16(34790), + 91: uint16(34786), + 92: uint16(34779), + 93: uint16(34795), + 94: uint16(34794), + 95: uint16(34789), + 96: uint16(34783), + 97: uint16(34803), + 98: uint16(34788), + 99: uint16(34772), + 100: uint16(34780), + 101: uint16(34771), + 102: uint16(34797), + 103: uint16(34776), + 104: uint16(34787), + 105: uint16(34724), + 106: uint16(34775), + 107: uint16(34777), + 108: uint16(34817), + 109: uint16(34804), + 110: uint16(34792), + 111: uint16(34781), + 112: uint16(35155), + 113: uint16(35147), + 114: uint16(35151), + 115: uint16(35148), + 116: uint16(35142), + 117: uint16(35152), + 118: uint16(35153), + 119: uint16(35145), + 120: uint16(35626), + 121: uint16(35623), + 122: uint16(35619), + 123: uint16(35635), + 124: uint16(35632), + 125: uint16(35637), + 126: uint16(35655), + 127: uint16(35631), + 128: uint16(35644), + 129: uint16(35646), + 130: uint16(35633), + 131: uint16(35621), + 132: uint16(35639), + 133: uint16(35622), + 134: uint16(35638), + 135: uint16(35630), + 136: uint16(35620), + 137: uint16(35643), + 138: uint16(35645), + 139: uint16(35642), + 140: uint16(35906), + 141: uint16(35957), + 142: uint16(35993), + 143: uint16(35992), + 144: uint16(35991), + 145: uint16(36094), + 146: uint16(36100), + 147: uint16(36098), + 148: uint16(36096), + 149: uint16(36444), + 150: uint16(36450), + 151: uint16(36448), + 152: uint16(36439), + 153: uint16(36438), + 154: uint16(36446), + 155: uint16(36453), + 156: uint16(36455), + }, + 80: { + 0: uint16(36443), + 1: uint16(36442), + 2: uint16(36449), + 3: uint16(36445), + 4: uint16(36457), + 5: uint16(36436), + 6: uint16(36678), + 7: uint16(36679), + 8: uint16(36680), + 9: uint16(36683), + 10: uint16(37160), + 11: uint16(37178), + 12: uint16(37179), + 13: uint16(37182), + 14: uint16(37288), + 15: uint16(37285), + 16: uint16(37287), + 17: uint16(37295), + 18: uint16(37290), + 19: uint16(37813), + 20: uint16(37772), + 21: uint16(37778), + 22: uint16(37815), + 23: uint16(37787), + 24: uint16(37789), + 25: uint16(37769), + 26: uint16(37799), + 27: uint16(37774), + 28: uint16(37802), + 29: uint16(37790), + 30: uint16(37798), + 31: uint16(37781), + 32: uint16(37768), + 33: uint16(37785), + 34: uint16(37791), + 35: uint16(37773), + 36: uint16(37809), + 37: uint16(37777), + 38: uint16(37810), + 39: uint16(37796), + 40: uint16(37800), + 41: uint16(37812), + 42: uint16(37795), + 43: uint16(37797), + 44: uint16(38354), + 45: uint16(38355), + 46: uint16(38353), + 47: uint16(38579), + 48: uint16(38615), + 49: uint16(38618), + 50: uint16(24002), + 51: uint16(38623), + 52: uint16(38616), + 53: uint16(38621), + 54: uint16(38691), + 55: uint16(38690), + 56: uint16(38693), + 57: uint16(38828), + 58: uint16(38830), + 59: uint16(38824), + 60: uint16(38827), + 61: uint16(38820), + 62: uint16(38826), + 63: uint16(38818), + 64: uint16(38821), + 65: uint16(38871), + 66: uint16(38873), + 67: uint16(38870), + 68: uint16(38872), + 69: uint16(38906), + 70: uint16(38992), + 71: uint16(38993), + 72: uint16(38994), + 73: uint16(39096), + 74: uint16(39233), + 75: uint16(39228), + 76: uint16(39226), + 77: uint16(39439), + 78: uint16(39435), + 79: uint16(39433), + 80: uint16(39437), + 81: uint16(39428), + 82: uint16(39441), + 83: uint16(39434), + 84: uint16(39429), + 85: uint16(39431), + 86: uint16(39430), + 87: uint16(39616), + 88: uint16(39644), + 89: uint16(39688), + 90: uint16(39684), + 91: uint16(39685), + 92: uint16(39721), + 93: uint16(39733), + 94: uint16(39754), + 95: uint16(39756), + 96: uint16(39755), + 97: uint16(39879), + 98: uint16(39878), + 99: uint16(39875), + 100: uint16(39871), + 101: uint16(39873), + 102: uint16(39861), + 103: uint16(39864), + 104: uint16(39891), + 105: uint16(39862), + 106: uint16(39876), + 107: uint16(39865), + 108: uint16(39869), + 109: uint16(40284), + 110: uint16(40275), + 111: uint16(40271), + 112: uint16(40266), + 113: uint16(40283), + 114: uint16(40267), + 115: uint16(40281), + 116: uint16(40278), + 117: uint16(40268), + 118: uint16(40279), + 119: uint16(40274), + 120: uint16(40276), + 121: uint16(40287), + 122: uint16(40280), + 123: uint16(40282), + 124: uint16(40590), + 125: uint16(40588), + 126: uint16(40671), + 127: uint16(40705), + 128: uint16(40704), + 129: uint16(40726), + 130: uint16(40741), + 131: uint16(40747), + 132: uint16(40746), + 133: uint16(40745), + 134: uint16(40744), + 135: uint16(40780), + 136: uint16(40789), + 137: uint16(20788), + 138: uint16(20789), + 139: uint16(21142), + 140: uint16(21239), + 141: uint16(21428), + 142: uint16(22187), + 143: uint16(22189), + 144: uint16(22182), + 145: uint16(22183), + 146: uint16(22186), + 147: uint16(22188), + 148: uint16(22746), + 149: uint16(22749), + 150: uint16(22747), + 151: uint16(22802), + 152: uint16(23357), + 153: uint16(23358), + 154: uint16(23359), + 155: uint16(24003), + 156: uint16(24176), + }, + 81: { + 0: uint16(24511), + 1: uint16(25083), + 2: uint16(25863), + 3: uint16(25872), + 4: uint16(25869), + 5: uint16(25865), + 6: uint16(25868), + 7: uint16(25870), + 8: uint16(25988), + 9: uint16(26078), + 10: uint16(26077), + 11: uint16(26334), + 12: uint16(27367), + 13: uint16(27360), + 14: uint16(27340), + 15: uint16(27345), + 16: uint16(27353), + 17: uint16(27339), + 18: uint16(27359), + 19: uint16(27356), + 20: uint16(27344), + 21: uint16(27371), + 22: uint16(27343), + 23: uint16(27341), + 24: uint16(27358), + 25: uint16(27488), + 26: uint16(27568), + 27: uint16(27660), + 28: uint16(28697), + 29: uint16(28711), + 30: uint16(28704), + 31: uint16(28694), + 32: uint16(28715), + 33: uint16(28705), + 34: uint16(28706), + 35: uint16(28707), + 36: uint16(28713), + 37: uint16(28695), + 38: uint16(28708), + 39: uint16(28700), + 40: uint16(28714), + 41: uint16(29196), + 42: uint16(29194), + 43: uint16(29191), + 44: uint16(29186), + 45: uint16(29189), + 46: uint16(29349), + 47: uint16(29350), + 48: uint16(29348), + 49: uint16(29347), + 50: uint16(29345), + 51: uint16(29899), + 52: uint16(29893), + 53: uint16(29879), + 54: uint16(29891), + 55: uint16(29974), + 56: uint16(30304), + 57: uint16(30665), + 58: uint16(30666), + 59: uint16(30660), + 60: uint16(30705), + 61: uint16(31005), + 62: uint16(31003), + 63: uint16(31009), + 64: uint16(31004), + 65: uint16(30999), + 66: uint16(31006), + 67: uint16(31152), + 68: uint16(31335), + 69: uint16(31336), + 70: uint16(31795), + 71: uint16(31804), + 72: uint16(31801), + 73: uint16(31788), + 74: uint16(31803), + 75: uint16(31980), + 76: uint16(31978), + 77: uint16(32374), + 78: uint16(32373), + 79: uint16(32376), + 80: uint16(32368), + 81: uint16(32375), + 82: uint16(32367), + 83: uint16(32378), + 84: uint16(32370), + 85: uint16(32372), + 86: uint16(32360), + 87: uint16(32587), + 88: uint16(32586), + 89: uint16(32643), + 90: uint16(32646), + 91: uint16(32695), + 92: uint16(32765), + 93: uint16(32766), + 94: uint16(32888), + 95: uint16(33239), + 96: uint16(33237), + 97: uint16(33380), + 98: uint16(33377), + 99: uint16(33379), + 100: uint16(34283), + 101: uint16(34289), + 102: uint16(34285), + 103: uint16(34265), + 104: uint16(34273), + 105: uint16(34280), + 106: uint16(34266), + 107: uint16(34263), + 108: uint16(34284), + 109: uint16(34290), + 110: uint16(34296), + 111: uint16(34264), + 112: uint16(34271), + 113: uint16(34275), + 114: uint16(34268), + 115: uint16(34257), + 116: uint16(34288), + 117: uint16(34278), + 118: uint16(34287), + 119: uint16(34270), + 120: uint16(34274), + 121: uint16(34816), + 122: uint16(34810), + 123: uint16(34819), + 124: uint16(34806), + 125: uint16(34807), + 126: uint16(34825), + 127: uint16(34828), + 128: uint16(34827), + 129: uint16(34822), + 130: uint16(34812), + 131: uint16(34824), + 132: uint16(34815), + 133: uint16(34826), + 134: uint16(34818), + 135: uint16(35170), + 136: uint16(35162), + 137: uint16(35163), + 138: uint16(35159), + 139: uint16(35169), + 140: uint16(35164), + 141: uint16(35160), + 142: uint16(35165), + 143: uint16(35161), + 144: uint16(35208), + 145: uint16(35255), + 146: uint16(35254), + 147: uint16(35318), + 148: uint16(35664), + 149: uint16(35656), + 150: uint16(35658), + 151: uint16(35648), + 152: uint16(35667), + 153: uint16(35670), + 154: uint16(35668), + 155: uint16(35659), + 156: uint16(35669), + }, + 82: { + 0: uint16(35665), + 1: uint16(35650), + 2: uint16(35666), + 3: uint16(35671), + 4: uint16(35907), + 5: uint16(35959), + 6: uint16(35958), + 7: uint16(35994), + 8: uint16(36102), + 9: uint16(36103), + 10: uint16(36105), + 11: uint16(36268), + 12: uint16(36266), + 13: uint16(36269), + 14: uint16(36267), + 15: uint16(36461), + 16: uint16(36472), + 17: uint16(36467), + 18: uint16(36458), + 19: uint16(36463), + 20: uint16(36475), + 21: uint16(36546), + 22: uint16(36690), + 23: uint16(36689), + 24: uint16(36687), + 25: uint16(36688), + 26: uint16(36691), + 27: uint16(36788), + 28: uint16(37184), + 29: uint16(37183), + 30: uint16(37296), + 31: uint16(37293), + 32: uint16(37854), + 33: uint16(37831), + 34: uint16(37839), + 35: uint16(37826), + 36: uint16(37850), + 37: uint16(37840), + 38: uint16(37881), + 39: uint16(37868), + 40: uint16(37836), + 41: uint16(37849), + 42: uint16(37801), + 43: uint16(37862), + 44: uint16(37834), + 45: uint16(37844), + 46: uint16(37870), + 47: uint16(37859), + 48: uint16(37845), + 49: uint16(37828), + 50: uint16(37838), + 51: uint16(37824), + 52: uint16(37842), + 53: uint16(37863), + 54: uint16(38269), + 55: uint16(38362), + 56: uint16(38363), + 57: uint16(38625), + 58: uint16(38697), + 59: uint16(38699), + 60: uint16(38700), + 61: uint16(38696), + 62: uint16(38694), + 63: uint16(38835), + 64: uint16(38839), + 65: uint16(38838), + 66: uint16(38877), + 67: uint16(38878), + 68: uint16(38879), + 69: uint16(39004), + 70: uint16(39001), + 71: uint16(39005), + 72: uint16(38999), + 73: uint16(39103), + 74: uint16(39101), + 75: uint16(39099), + 76: uint16(39102), + 77: uint16(39240), + 78: uint16(39239), + 79: uint16(39235), + 80: uint16(39334), + 81: uint16(39335), + 82: uint16(39450), + 83: uint16(39445), + 84: uint16(39461), + 85: uint16(39453), + 86: uint16(39460), + 87: uint16(39451), + 88: uint16(39458), + 89: uint16(39456), + 90: uint16(39463), + 91: uint16(39459), + 92: uint16(39454), + 93: uint16(39452), + 94: uint16(39444), + 95: uint16(39618), + 96: uint16(39691), + 97: uint16(39690), + 98: uint16(39694), + 99: uint16(39692), + 100: uint16(39735), + 101: uint16(39914), + 102: uint16(39915), + 103: uint16(39904), + 104: uint16(39902), + 105: uint16(39908), + 106: uint16(39910), + 107: uint16(39906), + 108: uint16(39920), + 109: uint16(39892), + 110: uint16(39895), + 111: uint16(39916), + 112: uint16(39900), + 113: uint16(39897), + 114: uint16(39909), + 115: uint16(39893), + 116: uint16(39905), + 117: uint16(39898), + 118: uint16(40311), + 119: uint16(40321), + 120: uint16(40330), + 121: uint16(40324), + 122: uint16(40328), + 123: uint16(40305), + 124: uint16(40320), + 125: uint16(40312), + 126: uint16(40326), + 127: uint16(40331), + 128: uint16(40332), + 129: uint16(40317), + 130: uint16(40299), + 131: uint16(40308), + 132: uint16(40309), + 133: uint16(40304), + 134: uint16(40297), + 135: uint16(40325), + 136: uint16(40307), + 137: uint16(40315), + 138: uint16(40322), + 139: uint16(40303), + 140: uint16(40313), + 141: uint16(40319), + 142: uint16(40327), + 143: uint16(40296), + 144: uint16(40596), + 145: uint16(40593), + 146: uint16(40640), + 147: uint16(40700), + 148: uint16(40749), + 149: uint16(40768), + 150: uint16(40769), + 151: uint16(40781), + 152: uint16(40790), + 153: uint16(40791), + 154: uint16(40792), + 155: uint16(21303), + 156: uint16(22194), + }, + 83: { + 0: uint16(22197), + 1: uint16(22195), + 2: uint16(22755), + 3: uint16(23365), + 4: uint16(24006), + 5: uint16(24007), + 6: uint16(24302), + 7: uint16(24303), + 8: uint16(24512), + 9: uint16(24513), + 10: uint16(25081), + 11: uint16(25879), + 12: uint16(25878), + 13: uint16(25877), + 14: uint16(25875), + 15: uint16(26079), + 16: uint16(26344), + 17: uint16(26339), + 18: uint16(26340), + 19: uint16(27379), + 20: uint16(27376), + 21: uint16(27370), + 22: uint16(27368), + 23: uint16(27385), + 24: uint16(27377), + 25: uint16(27374), + 26: uint16(27375), + 27: uint16(28732), + 28: uint16(28725), + 29: uint16(28719), + 30: uint16(28727), + 31: uint16(28724), + 32: uint16(28721), + 33: uint16(28738), + 34: uint16(28728), + 35: uint16(28735), + 36: uint16(28730), + 37: uint16(28729), + 38: uint16(28736), + 39: uint16(28731), + 40: uint16(28723), + 41: uint16(28737), + 42: uint16(29203), + 43: uint16(29204), + 44: uint16(29352), + 45: uint16(29565), + 46: uint16(29564), + 47: uint16(29882), + 48: uint16(30379), + 49: uint16(30378), + 50: uint16(30398), + 51: uint16(30445), + 52: uint16(30668), + 53: uint16(30670), + 54: uint16(30671), + 55: uint16(30669), + 56: uint16(30706), + 57: uint16(31013), + 58: uint16(31011), + 59: uint16(31015), + 60: uint16(31016), + 61: uint16(31012), + 62: uint16(31017), + 63: uint16(31154), + 64: uint16(31342), + 65: uint16(31340), + 66: uint16(31341), + 67: uint16(31479), + 68: uint16(31817), + 69: uint16(31816), + 70: uint16(31818), + 71: uint16(31815), + 72: uint16(31813), + 73: uint16(31982), + 74: uint16(32379), + 75: uint16(32382), + 76: uint16(32385), + 77: uint16(32384), + 78: uint16(32698), + 79: uint16(32767), + 80: uint16(32889), + 81: uint16(33243), + 82: uint16(33241), + 83: uint16(33291), + 84: uint16(33384), + 85: uint16(33385), + 86: uint16(34338), + 87: uint16(34303), + 88: uint16(34305), + 89: uint16(34302), + 90: uint16(34331), + 91: uint16(34304), + 92: uint16(34294), + 93: uint16(34308), + 94: uint16(34313), + 95: uint16(34309), + 96: uint16(34316), + 97: uint16(34301), + 98: uint16(34841), + 99: uint16(34832), + 100: uint16(34833), + 101: uint16(34839), + 102: uint16(34835), + 103: uint16(34838), + 104: uint16(35171), + 105: uint16(35174), + 106: uint16(35257), + 107: uint16(35319), + 108: uint16(35680), + 109: uint16(35690), + 110: uint16(35677), + 111: uint16(35688), + 112: uint16(35683), + 113: uint16(35685), + 114: uint16(35687), + 115: uint16(35693), + 116: uint16(36270), + 117: uint16(36486), + 118: uint16(36488), + 119: uint16(36484), + 120: uint16(36697), + 121: uint16(36694), + 122: uint16(36695), + 123: uint16(36693), + 124: uint16(36696), + 125: uint16(36698), + 126: uint16(37005), + 127: uint16(37187), + 128: uint16(37185), + 129: uint16(37303), + 130: uint16(37301), + 131: uint16(37298), + 132: uint16(37299), + 133: uint16(37899), + 134: uint16(37907), + 135: uint16(37883), + 136: uint16(37920), + 137: uint16(37903), + 138: uint16(37908), + 139: uint16(37886), + 140: uint16(37909), + 141: uint16(37904), + 142: uint16(37928), + 143: uint16(37913), + 144: uint16(37901), + 145: uint16(37877), + 146: uint16(37888), + 147: uint16(37879), + 148: uint16(37895), + 149: uint16(37902), + 150: uint16(37910), + 151: uint16(37906), + 152: uint16(37882), + 153: uint16(37897), + 154: uint16(37880), + 155: uint16(37898), + 156: uint16(37887), + }, + 84: { + 0: uint16(37884), + 1: uint16(37900), + 2: uint16(37878), + 3: uint16(37905), + 4: uint16(37894), + 5: uint16(38366), + 6: uint16(38368), + 7: uint16(38367), + 8: uint16(38702), + 9: uint16(38703), + 10: uint16(38841), + 11: uint16(38843), + 12: uint16(38909), + 13: uint16(38910), + 14: uint16(39008), + 15: uint16(39010), + 16: uint16(39011), + 17: uint16(39007), + 18: uint16(39105), + 19: uint16(39106), + 20: uint16(39248), + 21: uint16(39246), + 22: uint16(39257), + 23: uint16(39244), + 24: uint16(39243), + 25: uint16(39251), + 26: uint16(39474), + 27: uint16(39476), + 28: uint16(39473), + 29: uint16(39468), + 30: uint16(39466), + 31: uint16(39478), + 32: uint16(39465), + 33: uint16(39470), + 34: uint16(39480), + 35: uint16(39469), + 36: uint16(39623), + 37: uint16(39626), + 38: uint16(39622), + 39: uint16(39696), + 40: uint16(39698), + 41: uint16(39697), + 42: uint16(39947), + 43: uint16(39944), + 44: uint16(39927), + 45: uint16(39941), + 46: uint16(39954), + 47: uint16(39928), + 48: uint16(40000), + 49: uint16(39943), + 50: uint16(39950), + 51: uint16(39942), + 52: uint16(39959), + 53: uint16(39956), + 54: uint16(39945), + 55: uint16(40351), + 56: uint16(40345), + 57: uint16(40356), + 58: uint16(40349), + 59: uint16(40338), + 60: uint16(40344), + 61: uint16(40336), + 62: uint16(40347), + 63: uint16(40352), + 64: uint16(40340), + 65: uint16(40348), + 66: uint16(40362), + 67: uint16(40343), + 68: uint16(40353), + 69: uint16(40346), + 70: uint16(40354), + 71: uint16(40360), + 72: uint16(40350), + 73: uint16(40355), + 74: uint16(40383), + 75: uint16(40361), + 76: uint16(40342), + 77: uint16(40358), + 78: uint16(40359), + 79: uint16(40601), + 80: uint16(40603), + 81: uint16(40602), + 82: uint16(40677), + 83: uint16(40676), + 84: uint16(40679), + 85: uint16(40678), + 86: uint16(40752), + 87: uint16(40750), + 88: uint16(40795), + 89: uint16(40800), + 90: uint16(40798), + 91: uint16(40797), + 92: uint16(40793), + 93: uint16(40849), + 94: uint16(20794), + 95: uint16(20793), + 96: uint16(21144), + 97: uint16(21143), + 98: uint16(22211), + 99: uint16(22205), + 100: uint16(22206), + 101: uint16(23368), + 102: uint16(23367), + 103: uint16(24011), + 104: uint16(24015), + 105: uint16(24305), + 106: uint16(25085), + 107: uint16(25883), + 108: uint16(27394), + 109: uint16(27388), + 110: uint16(27395), + 111: uint16(27384), + 112: uint16(27392), + 113: uint16(28739), + 114: uint16(28740), + 115: uint16(28746), + 116: uint16(28744), + 117: uint16(28745), + 118: uint16(28741), + 119: uint16(28742), + 120: uint16(29213), + 121: uint16(29210), + 122: uint16(29209), + 123: uint16(29566), + 124: uint16(29975), + 125: uint16(30314), + 126: uint16(30672), + 127: uint16(31021), + 128: uint16(31025), + 129: uint16(31023), + 130: uint16(31828), + 131: uint16(31827), + 132: uint16(31986), + 133: uint16(32394), + 134: uint16(32391), + 135: uint16(32392), + 136: uint16(32395), + 137: uint16(32390), + 138: uint16(32397), + 139: uint16(32589), + 140: uint16(32699), + 141: uint16(32816), + 142: uint16(33245), + 143: uint16(34328), + 144: uint16(34346), + 145: uint16(34342), + 146: uint16(34335), + 147: uint16(34339), + 148: uint16(34332), + 149: uint16(34329), + 150: uint16(34343), + 151: uint16(34350), + 152: uint16(34337), + 153: uint16(34336), + 154: uint16(34345), + 155: uint16(34334), + 156: uint16(34341), + }, + 85: { + 0: uint16(34857), + 1: uint16(34845), + 2: uint16(34843), + 3: uint16(34848), + 4: uint16(34852), + 5: uint16(34844), + 6: uint16(34859), + 7: uint16(34890), + 8: uint16(35181), + 9: uint16(35177), + 10: uint16(35182), + 11: uint16(35179), + 12: uint16(35322), + 13: uint16(35705), + 14: uint16(35704), + 15: uint16(35653), + 16: uint16(35706), + 17: uint16(35707), + 18: uint16(36112), + 19: uint16(36116), + 20: uint16(36271), + 21: uint16(36494), + 22: uint16(36492), + 23: uint16(36702), + 24: uint16(36699), + 25: uint16(36701), + 26: uint16(37190), + 27: uint16(37188), + 28: uint16(37189), + 29: uint16(37305), + 30: uint16(37951), + 31: uint16(37947), + 32: uint16(37942), + 33: uint16(37929), + 34: uint16(37949), + 35: uint16(37948), + 36: uint16(37936), + 37: uint16(37945), + 38: uint16(37930), + 39: uint16(37943), + 40: uint16(37932), + 41: uint16(37952), + 42: uint16(37937), + 43: uint16(38373), + 44: uint16(38372), + 45: uint16(38371), + 46: uint16(38709), + 47: uint16(38714), + 48: uint16(38847), + 49: uint16(38881), + 50: uint16(39012), + 51: uint16(39113), + 52: uint16(39110), + 53: uint16(39104), + 54: uint16(39256), + 55: uint16(39254), + 56: uint16(39481), + 57: uint16(39485), + 58: uint16(39494), + 59: uint16(39492), + 60: uint16(39490), + 61: uint16(39489), + 62: uint16(39482), + 63: uint16(39487), + 64: uint16(39629), + 65: uint16(39701), + 66: uint16(39703), + 67: uint16(39704), + 68: uint16(39702), + 69: uint16(39738), + 70: uint16(39762), + 71: uint16(39979), + 72: uint16(39965), + 73: uint16(39964), + 74: uint16(39980), + 75: uint16(39971), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39972), + 79: uint16(39969), + 80: uint16(40375), + 81: uint16(40374), + 82: uint16(40380), + 83: uint16(40385), + 84: uint16(40391), + 85: uint16(40394), + 86: uint16(40399), + 87: uint16(40382), + 88: uint16(40389), + 89: uint16(40387), + 90: uint16(40379), + 91: uint16(40373), + 92: uint16(40398), + 93: uint16(40377), + 94: uint16(40378), + 95: uint16(40364), + 96: uint16(40392), + 97: uint16(40369), + 98: uint16(40365), + 99: uint16(40396), + 100: uint16(40371), + 101: uint16(40397), + 102: uint16(40370), + 103: uint16(40570), + 104: uint16(40604), + 105: uint16(40683), + 106: uint16(40686), + 107: uint16(40685), + 108: uint16(40731), + 109: uint16(40728), + 110: uint16(40730), + 111: uint16(40753), + 112: uint16(40782), + 113: uint16(40805), + 114: uint16(40804), + 115: uint16(40850), + 116: uint16(20153), + 117: uint16(22214), + 118: uint16(22213), + 119: uint16(22219), + 120: uint16(22897), + 121: uint16(23371), + 122: uint16(23372), + 123: uint16(24021), + 124: uint16(24017), + 125: uint16(24306), + 126: uint16(25889), + 127: uint16(25888), + 128: uint16(25894), + 129: uint16(25890), + 130: uint16(27403), + 131: uint16(27400), + 132: uint16(27401), + 133: uint16(27661), + 134: uint16(28757), + 135: uint16(28758), + 136: uint16(28759), + 137: uint16(28754), + 138: uint16(29214), + 139: uint16(29215), + 140: uint16(29353), + 141: uint16(29567), + 142: uint16(29912), + 143: uint16(29909), + 144: uint16(29913), + 145: uint16(29911), + 146: uint16(30317), + 147: uint16(30381), + 148: uint16(31029), + 149: uint16(31156), + 150: uint16(31344), + 151: uint16(31345), + 152: uint16(31831), + 153: uint16(31836), + 154: uint16(31833), + 155: uint16(31835), + 156: uint16(31834), + }, + 86: { + 0: uint16(31988), + 1: uint16(31985), + 2: uint16(32401), + 3: uint16(32591), + 4: uint16(32647), + 5: uint16(33246), + 6: uint16(33387), + 7: uint16(34356), + 8: uint16(34357), + 9: uint16(34355), + 10: uint16(34348), + 11: uint16(34354), + 12: uint16(34358), + 13: uint16(34860), + 14: uint16(34856), + 15: uint16(34854), + 16: uint16(34858), + 17: uint16(34853), + 18: uint16(35185), + 19: uint16(35263), + 20: uint16(35262), + 21: uint16(35323), + 22: uint16(35710), + 23: uint16(35716), + 24: uint16(35714), + 25: uint16(35718), + 26: uint16(35717), + 27: uint16(35711), + 28: uint16(36117), + 29: uint16(36501), + 30: uint16(36500), + 31: uint16(36506), + 32: uint16(36498), + 33: uint16(36496), + 34: uint16(36502), + 35: uint16(36503), + 36: uint16(36704), + 37: uint16(36706), + 38: uint16(37191), + 39: uint16(37964), + 40: uint16(37968), + 41: uint16(37962), + 42: uint16(37963), + 43: uint16(37967), + 44: uint16(37959), + 45: uint16(37957), + 46: uint16(37960), + 47: uint16(37961), + 48: uint16(37958), + 49: uint16(38719), + 50: uint16(38883), + 51: uint16(39018), + 52: uint16(39017), + 53: uint16(39115), + 54: uint16(39252), + 55: uint16(39259), + 56: uint16(39502), + 57: uint16(39507), + 58: uint16(39508), + 59: uint16(39500), + 60: uint16(39503), + 61: uint16(39496), + 62: uint16(39498), + 63: uint16(39497), + 64: uint16(39506), + 65: uint16(39504), + 66: uint16(39632), + 67: uint16(39705), + 68: uint16(39723), + 69: uint16(39739), + 70: uint16(39766), + 71: uint16(39765), + 72: uint16(40006), + 73: uint16(40008), + 74: uint16(39999), + 75: uint16(40004), + 76: uint16(39993), + 77: uint16(39987), + 78: uint16(40001), + 79: uint16(39996), + 80: uint16(39991), + 81: uint16(39988), + 82: uint16(39986), + 83: uint16(39997), + 84: uint16(39990), + 85: uint16(40411), + 86: uint16(40402), + 87: uint16(40414), + 88: uint16(40410), + 89: uint16(40395), + 90: uint16(40400), + 91: uint16(40412), + 92: uint16(40401), + 93: uint16(40415), + 94: uint16(40425), + 95: uint16(40409), + 96: uint16(40408), + 97: uint16(40406), + 98: uint16(40437), + 99: uint16(40405), + 100: uint16(40413), + 101: uint16(40630), + 102: uint16(40688), + 103: uint16(40757), + 104: uint16(40755), + 105: uint16(40754), + 106: uint16(40770), + 107: uint16(40811), + 108: uint16(40853), + 109: uint16(40866), + 110: uint16(20797), + 111: uint16(21145), + 112: uint16(22760), + 113: uint16(22759), + 114: uint16(22898), + 115: uint16(23373), + 116: uint16(24024), + 117: uint16(34863), + 118: uint16(24399), + 119: uint16(25089), + 120: uint16(25091), + 121: uint16(25092), + 122: uint16(25897), + 123: uint16(25893), + 124: uint16(26006), + 125: uint16(26347), + 126: uint16(27409), + 127: uint16(27410), + 128: uint16(27407), + 129: uint16(27594), + 130: uint16(28763), + 131: uint16(28762), + 132: uint16(29218), + 133: uint16(29570), + 134: uint16(29569), + 135: uint16(29571), + 136: uint16(30320), + 137: uint16(30676), + 138: uint16(31847), + 139: uint16(31846), + 140: uint16(32405), + 141: uint16(33388), + 142: uint16(34362), + 143: uint16(34368), + 144: uint16(34361), + 145: uint16(34364), + 146: uint16(34353), + 147: uint16(34363), + 148: uint16(34366), + 149: uint16(34864), + 150: uint16(34866), + 151: uint16(34862), + 152: uint16(34867), + 153: uint16(35190), + 154: uint16(35188), + 155: uint16(35187), + 156: uint16(35326), + }, + 87: { + 0: uint16(35724), + 1: uint16(35726), + 2: uint16(35723), + 3: uint16(35720), + 4: uint16(35909), + 5: uint16(36121), + 6: uint16(36504), + 7: uint16(36708), + 8: uint16(36707), + 9: uint16(37308), + 10: uint16(37986), + 11: uint16(37973), + 12: uint16(37981), + 13: uint16(37975), + 14: uint16(37982), + 15: uint16(38852), + 16: uint16(38853), + 17: uint16(38912), + 18: uint16(39510), + 19: uint16(39513), + 20: uint16(39710), + 21: uint16(39711), + 22: uint16(39712), + 23: uint16(40018), + 24: uint16(40024), + 25: uint16(40016), + 26: uint16(40010), + 27: uint16(40013), + 28: uint16(40011), + 29: uint16(40021), + 30: uint16(40025), + 31: uint16(40012), + 32: uint16(40014), + 33: uint16(40443), + 34: uint16(40439), + 35: uint16(40431), + 36: uint16(40419), + 37: uint16(40427), + 38: uint16(40440), + 39: uint16(40420), + 40: uint16(40438), + 41: uint16(40417), + 42: uint16(40430), + 43: uint16(40422), + 44: uint16(40434), + 45: uint16(40432), + 46: uint16(40418), + 47: uint16(40428), + 48: uint16(40436), + 49: uint16(40435), + 50: uint16(40424), + 51: uint16(40429), + 52: uint16(40642), + 53: uint16(40656), + 54: uint16(40690), + 55: uint16(40691), + 56: uint16(40710), + 57: uint16(40732), + 58: uint16(40760), + 59: uint16(40759), + 60: uint16(40758), + 61: uint16(40771), + 62: uint16(40783), + 63: uint16(40817), + 64: uint16(40816), + 65: uint16(40814), + 66: uint16(40815), + 67: uint16(22227), + 68: uint16(22221), + 69: uint16(23374), + 70: uint16(23661), + 71: uint16(25901), + 72: uint16(26349), + 73: uint16(26350), + 74: uint16(27411), + 75: uint16(28767), + 76: uint16(28769), + 77: uint16(28765), + 78: uint16(28768), + 79: uint16(29219), + 80: uint16(29915), + 81: uint16(29925), + 82: uint16(30677), + 83: uint16(31032), + 84: uint16(31159), + 85: uint16(31158), + 86: uint16(31850), + 87: uint16(32407), + 88: uint16(32649), + 89: uint16(33389), + 90: uint16(34371), + 91: uint16(34872), + 92: uint16(34871), + 93: uint16(34869), + 94: uint16(34891), + 95: uint16(35732), + 96: uint16(35733), + 97: uint16(36510), + 98: uint16(36511), + 99: uint16(36512), + 100: uint16(36509), + 101: uint16(37310), + 102: uint16(37309), + 103: uint16(37314), + 104: uint16(37995), + 105: uint16(37992), + 106: uint16(37993), + 107: uint16(38629), + 108: uint16(38726), + 109: uint16(38723), + 110: uint16(38727), + 111: uint16(38855), + 112: uint16(38885), + 113: uint16(39518), + 114: uint16(39637), + 115: uint16(39769), + 116: uint16(40035), + 117: uint16(40039), + 118: uint16(40038), + 119: uint16(40034), + 120: uint16(40030), + 121: uint16(40032), + 122: uint16(40450), + 123: uint16(40446), + 124: uint16(40455), + 125: uint16(40451), + 126: uint16(40454), + 127: uint16(40453), + 128: uint16(40448), + 129: uint16(40449), + 130: uint16(40457), + 131: uint16(40447), + 132: uint16(40445), + 133: uint16(40452), + 134: uint16(40608), + 135: uint16(40734), + 136: uint16(40774), + 137: uint16(40820), + 138: uint16(40821), + 139: uint16(40822), + 140: uint16(22228), + 141: uint16(25902), + 142: uint16(26040), + 143: uint16(27416), + 144: uint16(27417), + 145: uint16(27415), + 146: uint16(27418), + 147: uint16(28770), + 148: uint16(29222), + 149: uint16(29354), + 150: uint16(30680), + 151: uint16(30681), + 152: uint16(31033), + 153: uint16(31849), + 154: uint16(31851), + 155: uint16(31990), + 156: uint16(32410), + }, + 88: { + 0: uint16(32408), + 1: uint16(32411), + 2: uint16(32409), + 3: uint16(33248), + 4: uint16(33249), + 5: uint16(34374), + 6: uint16(34375), + 7: uint16(34376), + 8: uint16(35193), + 9: uint16(35194), + 10: uint16(35196), + 11: uint16(35195), + 12: uint16(35327), + 13: uint16(35736), + 14: uint16(35737), + 15: uint16(36517), + 16: uint16(36516), + 17: uint16(36515), + 18: uint16(37998), + 19: uint16(37997), + 20: uint16(37999), + 21: uint16(38001), + 22: uint16(38003), + 23: uint16(38729), + 24: uint16(39026), + 25: uint16(39263), + 26: uint16(40040), + 27: uint16(40046), + 28: uint16(40045), + 29: uint16(40459), + 30: uint16(40461), + 31: uint16(40464), + 32: uint16(40463), + 33: uint16(40466), + 34: uint16(40465), + 35: uint16(40609), + 36: uint16(40693), + 37: uint16(40713), + 38: uint16(40775), + 39: uint16(40824), + 40: uint16(40827), + 41: uint16(40826), + 42: uint16(40825), + 43: uint16(22302), + 44: uint16(28774), + 45: uint16(31855), + 46: uint16(34876), + 47: uint16(36274), + 48: uint16(36518), + 49: uint16(37315), + 50: uint16(38004), + 51: uint16(38008), + 52: uint16(38006), + 53: uint16(38005), + 54: uint16(39520), + 55: uint16(40052), + 56: uint16(40051), + 57: uint16(40049), + 58: uint16(40053), + 59: uint16(40468), + 60: uint16(40467), + 61: uint16(40694), + 62: uint16(40714), + 63: uint16(40868), + 64: uint16(28776), + 65: uint16(28773), + 66: uint16(31991), + 67: uint16(34410), + 68: uint16(34878), + 69: uint16(34877), + 70: uint16(34879), + 71: uint16(35742), + 72: uint16(35996), + 73: uint16(36521), + 74: uint16(36553), + 75: uint16(38731), + 76: uint16(39027), + 77: uint16(39028), + 78: uint16(39116), + 79: uint16(39265), + 80: uint16(39339), + 81: uint16(39524), + 82: uint16(39526), + 83: uint16(39527), + 84: uint16(39716), + 85: uint16(40469), + 86: uint16(40471), + 87: uint16(40776), + 88: uint16(25095), + 89: uint16(27422), + 90: uint16(29223), + 91: uint16(34380), + 92: uint16(36520), + 93: uint16(38018), + 94: uint16(38016), + 95: uint16(38017), + 96: uint16(39529), + 97: uint16(39528), + 98: uint16(39726), + 99: uint16(40473), + 100: uint16(29225), + 101: uint16(34379), + 102: uint16(35743), + 103: uint16(38019), + 104: uint16(40057), + 105: uint16(40631), + 106: uint16(30325), + 107: uint16(39531), + 108: uint16(40058), + 109: uint16(40477), + 110: uint16(28777), + 111: uint16(28778), + 112: uint16(40612), + 113: uint16(40830), + 114: uint16(40777), + 115: uint16(40856), + 116: uint16(30849), + 117: uint16(37561), + 118: uint16(35023), + 119: uint16(22715), + 120: uint16(24658), + 121: uint16(31911), + 122: uint16(23290), + 123: uint16(9556), + 124: uint16(9574), + 125: uint16(9559), + 126: uint16(9568), + 127: uint16(9580), + 128: uint16(9571), + 129: uint16(9562), + 130: uint16(9577), + 131: uint16(9565), + 132: uint16(9554), + 133: uint16(9572), + 134: uint16(9557), + 135: uint16(9566), + 136: uint16(9578), + 137: uint16(9569), + 138: uint16(9560), + 139: uint16(9575), + 140: uint16(9563), + 141: uint16(9555), + 142: uint16(9573), + 143: uint16(9558), + 144: uint16(9567), + 145: uint16(9579), + 146: uint16(9570), + 147: uint16(9561), + 148: uint16(9576), + 149: uint16(9564), + 150: uint16(9553), + 151: uint16(9552), + 152: uint16(9581), + 153: uint16(9582), + 154: uint16(9584), + 155: uint16(9583), + 156: uint16(9619), + }, +} + +var _hkscs = [5172]uint16{ + 0: uint16(17392), + 1: uint16(19506), + 2: uint16(17923), + 3: uint16(17830), + 4: uint16(17784), + 5: uint16(29287), + 6: uint16(19831), + 7: uint16(17843), + 8: uint16(31921), + 9: uint16(19682), + 10: uint16(31941), + 11: uint16(15253), + 12: uint16(18230), + 13: uint16(18244), + 14: uint16(19527), + 15: uint16(19520), + 16: uint16(17087), + 17: uint16(13847), + 18: uint16(29522), + 19: uint16(28299), + 20: uint16(28882), + 21: uint16(19543), + 22: uint16(41809), + 23: uint16(18255), + 24: uint16(17882), + 25: uint16(19589), + 26: uint16(31852), + 27: uint16(19719), + 28: uint16(19108), + 29: uint16(18081), + 30: uint16(27427), + 31: uint16(29221), + 32: uint16(23124), + 33: uint16(6755), + 34: uint16(15878), + 35: uint16(16225), + 36: uint16(26189), + 37: uint16(22267), + 39: uint16(32149), + 40: uint16(22813), + 41: uint16(35769), + 42: uint16(15860), + 43: uint16(38708), + 44: uint16(31727), + 45: uint16(23515), + 46: uint16(7518), + 47: uint16(23204), + 48: uint16(13861), + 49: uint16(40624), + 50: uint16(23249), + 51: uint16(23479), + 52: uint16(23804), + 53: uint16(26478), + 54: uint16(34195), + 55: uint16(39237), + 56: uint16(29793), + 57: uint16(29853), + 58: uint16(14453), + 59: uint16(7507), + 60: uint16(13982), + 61: uint16(24609), + 62: uint16(16108), + 63: uint16(22750), + 64: uint16(15093), + 65: uint16(31484), + 66: uint16(40855), + 67: uint16(16737), + 68: uint16(35085), + 69: uint16(12778), + 70: uint16(2698), + 71: uint16(12894), + 72: uint16(17162), + 73: uint16(33924), + 74: uint16(40854), + 75: uint16(37935), + 76: uint16(18736), + 77: uint16(34323), + 78: uint16(22678), + 79: uint16(38730), + 80: uint16(37400), + 81: uint16(31184), + 82: uint16(31282), + 83: uint16(26208), + 84: uint16(27177), + 85: uint16(34973), + 86: uint16(29772), + 87: uint16(31685), + 88: uint16(26498), + 89: uint16(31276), + 90: uint16(21071), + 91: uint16(36934), + 92: uint16(13542), + 93: uint16(29636), + 94: uint16(23993), + 95: uint16(29894), + 96: uint16(40903), + 97: uint16(22451), + 98: uint16(18735), + 99: uint16(21580), + 100: uint16(16689), + 101: uint16(13966), + 102: uint16(22552), + 103: uint16(31346), + 104: uint16(31589), + 105: uint16(35727), + 106: uint16(18094), + 107: uint16(28296), + 108: uint16(16769), + 109: uint16(23961), + 110: uint16(31662), + 111: uint16(9404), + 112: uint16(40904), + 113: uint16(9409), + 114: uint16(9417), + 115: uint16(9420), + 116: uint16(40905), + 117: uint16(34052), + 118: uint16(13755), + 119: uint16(16564), + 120: uint16(40906), + 121: uint16(17633), + 122: uint16(44543), + 123: uint16(25281), + 124: uint16(28782), + 125: uint16(40907), + 157: uint16(12736), + 158: uint16(12737), + 159: uint16(12738), + 160: uint16(12739), + 161: uint16(12740), + 162: uint16(268), + 163: uint16(12741), + 164: uint16(209), + 165: uint16(205), + 166: uint16(12742), + 167: uint16(12743), + 168: uint16(203), + 169: uint16(8168), + 170: uint16(12744), + 171: uint16(202), + 172: uint16(12745), + 173: uint16(12746), + 174: uint16(12747), + 175: uint16(12748), + 176: uint16(270), + 177: uint16(12749), + 178: uint16(12750), + 179: uint16(256), + 180: uint16(193), + 181: uint16(461), + 182: uint16(192), + 183: uint16(274), + 184: uint16(201), + 185: uint16(282), + 186: uint16(200), + 187: uint16(332), + 188: uint16(211), + 189: uint16(465), + 190: uint16(210), + 191: uint16(56320), + 192: uint16(7870), + 193: uint16(56324), + 194: uint16(7872), + 195: uint16(202), + 196: uint16(257), + 197: uint16(225), + 198: uint16(462), + 199: uint16(224), + 200: uint16(593), + 201: uint16(275), + 202: uint16(233), + 203: uint16(283), + 204: uint16(232), + 205: uint16(299), + 206: uint16(237), + 207: uint16(464), + 208: uint16(236), + 209: uint16(333), + 210: uint16(243), + 211: uint16(466), + 212: uint16(242), + 213: uint16(363), + 214: uint16(250), + 215: uint16(468), + 216: uint16(249), + 217: uint16(470), + 218: uint16(472), + 219: uint16(474), + 220: uint16(476), + 221: uint16(252), + 222: uint16(56328), + 223: uint16(7871), + 224: uint16(56332), + 225: uint16(7873), + 226: uint16(234), + 227: uint16(609), + 228: uint16(9178), + 229: uint16(9179), + 314: uint16(41897), + 315: uint16(4421), + 317: uint16(25866), + 320: uint16(20029), + 321: uint16(28381), + 322: uint16(40270), + 323: uint16(37343), + 326: uint16(30517), + 327: uint16(25745), + 328: uint16(20250), + 329: uint16(20264), + 330: uint16(20392), + 331: uint16(20822), + 332: uint16(20852), + 333: uint16(20892), + 334: uint16(20964), + 335: uint16(21153), + 336: uint16(21160), + 337: uint16(21307), + 338: uint16(21326), + 339: uint16(21457), + 340: uint16(21464), + 341: uint16(22242), + 342: uint16(22768), + 343: uint16(22788), + 344: uint16(22791), + 345: uint16(22834), + 346: uint16(22836), + 347: uint16(23398), + 348: uint16(23454), + 349: uint16(23455), + 350: uint16(23706), + 351: uint16(24198), + 352: uint16(24635), + 353: uint16(25993), + 354: uint16(26622), + 355: uint16(26628), + 356: uint16(26725), + 357: uint16(27982), + 358: uint16(28860), + 359: uint16(30005), + 360: uint16(32420), + 361: uint16(32428), + 362: uint16(32442), + 363: uint16(32455), + 364: uint16(32463), + 365: uint16(32479), + 366: uint16(32518), + 367: uint16(32567), + 368: uint16(33402), + 369: uint16(33487), + 370: uint16(33647), + 371: uint16(35270), + 372: uint16(35774), + 373: uint16(35810), + 374: uint16(36710), + 375: uint16(36711), + 376: uint16(36718), + 377: uint16(29713), + 378: uint16(31996), + 379: uint16(32205), + 380: uint16(26950), + 381: uint16(31433), + 382: uint16(21031), + 387: uint16(37260), + 388: uint16(30904), + 389: uint16(37214), + 390: uint16(32956), + 392: uint16(36107), + 393: uint16(33014), + 394: uint16(2535), + 397: uint16(32927), + 398: uint16(40647), + 399: uint16(19661), + 400: uint16(40393), + 401: uint16(40460), + 402: uint16(19518), + 403: uint16(40438), + 404: uint16(28686), + 405: uint16(40458), + 406: uint16(41267), + 407: uint16(13761), + 409: uint16(28314), + 410: uint16(33342), + 411: uint16(29977), + 413: uint16(18705), + 414: uint16(39532), + 415: uint16(39567), + 416: uint16(40857), + 417: uint16(31111), + 418: uint16(33900), + 419: uint16(7626), + 420: uint16(1488), + 421: uint16(10982), + 422: uint16(20004), + 423: uint16(20097), + 424: uint16(20096), + 425: uint16(20103), + 426: uint16(20159), + 427: uint16(20203), + 428: uint16(20279), + 429: uint16(13388), + 430: uint16(20413), + 431: uint16(15944), + 432: uint16(20483), + 433: uint16(20616), + 434: uint16(13437), + 435: uint16(13459), + 436: uint16(13477), + 437: uint16(20870), + 438: uint16(22789), + 439: uint16(20955), + 440: uint16(20988), + 441: uint16(20997), + 442: uint16(20105), + 443: uint16(21113), + 444: uint16(21136), + 445: uint16(21287), + 446: uint16(13767), + 447: uint16(21417), + 448: uint16(13649), + 449: uint16(21424), + 450: uint16(13651), + 451: uint16(21442), + 452: uint16(21539), + 453: uint16(13677), + 454: uint16(13682), + 455: uint16(13953), + 456: uint16(21651), + 457: uint16(21667), + 458: uint16(21684), + 459: uint16(21689), + 460: uint16(21712), + 461: uint16(21743), + 462: uint16(21784), + 463: uint16(21795), + 464: uint16(21800), + 465: uint16(13720), + 466: uint16(21823), + 467: uint16(13733), + 468: uint16(13759), + 469: uint16(21975), + 470: uint16(13765), + 471: uint16(32132), + 472: uint16(21797), + 474: uint16(3138), + 475: uint16(3349), + 476: uint16(20779), + 477: uint16(21904), + 478: uint16(11462), + 479: uint16(14828), + 480: uint16(833), + 481: uint16(36422), + 482: uint16(19896), + 483: uint16(38117), + 484: uint16(16467), + 485: uint16(32958), + 486: uint16(30586), + 487: uint16(11320), + 488: uint16(14900), + 489: uint16(18389), + 490: uint16(33117), + 491: uint16(27122), + 492: uint16(19946), + 493: uint16(25821), + 494: uint16(3452), + 495: uint16(4020), + 496: uint16(3285), + 497: uint16(4340), + 498: uint16(25741), + 499: uint16(36478), + 500: uint16(3734), + 501: uint16(3083), + 502: uint16(3940), + 503: uint16(11433), + 504: uint16(33366), + 505: uint16(17619), + 507: uint16(3398), + 508: uint16(39501), + 509: uint16(33001), + 510: uint16(18420), + 511: uint16(20135), + 512: uint16(11458), + 513: uint16(39602), + 514: uint16(14951), + 515: uint16(38388), + 516: uint16(16365), + 517: uint16(13574), + 518: uint16(21191), + 519: uint16(38868), + 520: uint16(30920), + 521: uint16(11588), + 522: uint16(40302), + 523: uint16(38933), + 525: uint16(17369), + 526: uint16(24741), + 527: uint16(25780), + 528: uint16(21731), + 529: uint16(11596), + 530: uint16(11210), + 531: uint16(4215), + 532: uint16(14843), + 533: uint16(4207), + 534: uint16(26330), + 535: uint16(26390), + 536: uint16(31136), + 537: uint16(25834), + 538: uint16(20562), + 539: uint16(3139), + 540: uint16(36456), + 541: uint16(8609), + 542: uint16(35660), + 543: uint16(1841), + 545: uint16(18443), + 546: uint16(425), + 547: uint16(16378), + 548: uint16(22643), + 549: uint16(11661), + 551: uint16(17864), + 552: uint16(1276), + 553: uint16(24727), + 554: uint16(3916), + 555: uint16(3478), + 556: uint16(21881), + 557: uint16(16571), + 558: uint16(17338), + 560: uint16(19124), + 561: uint16(10854), + 562: uint16(4253), + 563: uint16(33194), + 564: uint16(39157), + 565: uint16(3484), + 566: uint16(25465), + 567: uint16(14846), + 568: uint16(10101), + 569: uint16(36288), + 570: uint16(22177), + 571: uint16(25724), + 572: uint16(15939), + 574: uint16(42497), + 575: uint16(3593), + 576: uint16(10959), + 577: uint16(11465), + 579: uint16(4296), + 580: uint16(14786), + 581: uint16(14738), + 582: uint16(14854), + 583: uint16(33435), + 584: uint16(13688), + 585: uint16(24137), + 586: uint16(8391), + 587: uint16(22098), + 588: uint16(3889), + 589: uint16(11442), + 590: uint16(38688), + 591: uint16(13500), + 592: uint16(27709), + 593: uint16(20027), + 596: uint16(30068), + 597: uint16(11915), + 598: uint16(8712), + 599: uint16(42587), + 600: uint16(36045), + 601: uint16(3706), + 602: uint16(3124), + 603: uint16(26652), + 604: uint16(32659), + 605: uint16(4303), + 606: uint16(10243), + 607: uint16(10553), + 608: uint16(13819), + 609: uint16(20963), + 610: uint16(3724), + 611: uint16(3981), + 612: uint16(3754), + 613: uint16(16275), + 614: uint16(3888), + 615: uint16(3399), + 616: uint16(4431), + 617: uint16(3660), + 619: uint16(3755), + 620: uint16(2985), + 621: uint16(3400), + 622: uint16(4288), + 623: uint16(4413), + 624: uint16(16377), + 625: uint16(9878), + 626: uint16(25650), + 627: uint16(4013), + 628: uint16(13300), + 629: uint16(30265), + 630: uint16(11214), + 631: uint16(3454), + 632: uint16(3455), + 633: uint16(11345), + 634: uint16(11349), + 635: uint16(14872), + 636: uint16(3736), + 637: uint16(4295), + 638: uint16(3886), + 639: uint16(42546), + 640: uint16(27472), + 641: uint16(36050), + 642: uint16(36249), + 643: uint16(36042), + 644: uint16(38314), + 645: uint16(21708), + 646: uint16(33476), + 647: uint16(21945), + 649: uint16(40643), + 650: uint16(39974), + 651: uint16(39606), + 652: uint16(30558), + 653: uint16(11758), + 654: uint16(28992), + 655: uint16(33133), + 656: uint16(33004), + 657: uint16(23580), + 658: uint16(25970), + 659: uint16(33076), + 660: uint16(14231), + 661: uint16(21343), + 662: uint16(32957), + 663: uint16(37302), + 664: uint16(3834), + 665: uint16(3599), + 666: uint16(3703), + 667: uint16(3835), + 668: uint16(13789), + 669: uint16(19947), + 670: uint16(13833), + 671: uint16(3286), + 672: uint16(22191), + 673: uint16(10165), + 674: uint16(4297), + 675: uint16(3600), + 676: uint16(3704), + 677: uint16(4216), + 678: uint16(4424), + 679: uint16(33287), + 680: uint16(5205), + 681: uint16(3705), + 682: uint16(20048), + 683: uint16(11684), + 684: uint16(23124), + 685: uint16(4125), + 686: uint16(4126), + 687: uint16(4341), + 688: uint16(4342), + 689: uint16(22428), + 690: uint16(3601), + 691: uint16(30356), + 692: uint16(33485), + 693: uint16(4021), + 694: uint16(3707), + 695: uint16(20862), + 696: uint16(14083), + 697: uint16(4022), + 698: uint16(4480), + 699: uint16(21208), + 700: uint16(41661), + 701: uint16(18906), + 702: uint16(6202), + 703: uint16(16759), + 704: uint16(33404), + 705: uint16(22681), + 706: uint16(21096), + 707: uint16(13850), + 708: uint16(22333), + 709: uint16(31666), + 710: uint16(23400), + 711: uint16(18432), + 712: uint16(19244), + 713: uint16(40743), + 714: uint16(18919), + 715: uint16(39967), + 716: uint16(39821), + 717: uint16(23412), + 718: uint16(12605), + 719: uint16(22011), + 720: uint16(13810), + 721: uint16(22153), + 722: uint16(20008), + 723: uint16(22786), + 724: uint16(7105), + 725: uint16(63608), + 726: uint16(38737), + 727: uint16(134), + 728: uint16(20059), + 729: uint16(20155), + 730: uint16(13630), + 731: uint16(23587), + 732: uint16(24401), + 733: uint16(24516), + 734: uint16(14586), + 735: uint16(25164), + 736: uint16(25909), + 737: uint16(27514), + 738: uint16(27701), + 739: uint16(27706), + 740: uint16(28780), + 741: uint16(29227), + 742: uint16(20012), + 743: uint16(29357), + 744: uint16(18665), + 745: uint16(32594), + 746: uint16(31035), + 747: uint16(31993), + 748: uint16(32595), + 749: uint16(25194), + 750: uint16(13505), + 752: uint16(25419), + 753: uint16(32770), + 754: uint16(32896), + 755: uint16(26130), + 756: uint16(26961), + 757: uint16(21341), + 758: uint16(34916), + 759: uint16(35265), + 760: uint16(30898), + 761: uint16(35744), + 762: uint16(36125), + 763: uint16(38021), + 764: uint16(38264), + 765: uint16(38271), + 766: uint16(38376), + 767: uint16(36367), + 768: uint16(38886), + 769: uint16(39029), + 770: uint16(39118), + 771: uint16(39134), + 772: uint16(39267), + 773: uint16(38928), + 774: uint16(40060), + 775: uint16(40479), + 776: uint16(40644), + 777: uint16(27503), + 778: uint16(63751), + 779: uint16(20023), + 780: uint16(135), + 781: uint16(38429), + 782: uint16(25143), + 783: uint16(38050), + 785: uint16(20539), + 786: uint16(28158), + 787: uint16(40051), + 788: uint16(40870), + 789: uint16(15817), + 790: uint16(34959), + 791: uint16(16718), + 792: uint16(28791), + 793: uint16(23797), + 794: uint16(19232), + 795: uint16(20941), + 796: uint16(13657), + 797: uint16(23856), + 798: uint16(24866), + 799: uint16(35378), + 800: uint16(36775), + 801: uint16(37366), + 802: uint16(29073), + 803: uint16(26393), + 804: uint16(29626), + 805: uint16(12929), + 806: uint16(41223), + 807: uint16(15499), + 808: uint16(6528), + 809: uint16(19216), + 810: uint16(30948), + 811: uint16(29698), + 812: uint16(20910), + 813: uint16(34575), + 814: uint16(16393), + 815: uint16(27235), + 816: uint16(41658), + 817: uint16(16931), + 818: uint16(34319), + 819: uint16(2671), + 820: uint16(31274), + 821: uint16(39239), + 822: uint16(35562), + 823: uint16(38741), + 824: uint16(28749), + 825: uint16(21284), + 826: uint16(8318), + 827: uint16(37876), + 828: uint16(30425), + 829: uint16(35299), + 830: uint16(40871), + 831: uint16(30685), + 832: uint16(20131), + 833: uint16(20464), + 834: uint16(20668), + 835: uint16(20015), + 836: uint16(20247), + 837: uint16(40872), + 838: uint16(21556), + 839: uint16(32139), + 840: uint16(22674), + 841: uint16(22736), + 842: uint16(7606), + 843: uint16(24210), + 844: uint16(24217), + 845: uint16(24514), + 846: uint16(10002), + 847: uint16(25995), + 848: uint16(13305), + 849: uint16(26905), + 850: uint16(27203), + 851: uint16(15459), + 852: uint16(27903), + 854: uint16(29184), + 855: uint16(17669), + 856: uint16(29580), + 857: uint16(16091), + 858: uint16(18963), + 859: uint16(23317), + 860: uint16(29881), + 861: uint16(35715), + 862: uint16(23716), + 863: uint16(22165), + 864: uint16(31379), + 865: uint16(31724), + 866: uint16(31939), + 867: uint16(32364), + 868: uint16(33528), + 869: uint16(34199), + 870: uint16(40873), + 871: uint16(34960), + 872: uint16(40874), + 873: uint16(36537), + 874: uint16(40875), + 875: uint16(36815), + 876: uint16(34143), + 877: uint16(39392), + 878: uint16(37409), + 879: uint16(40876), + 880: uint16(36281), + 881: uint16(5183), + 882: uint16(16497), + 883: uint16(17058), + 884: uint16(23066), + 888: uint16(39016), + 889: uint16(26475), + 890: uint16(17014), + 891: uint16(22333), + 893: uint16(34262), + 894: uint16(18811), + 895: uint16(33471), + 896: uint16(28941), + 897: uint16(19585), + 898: uint16(28020), + 899: uint16(23931), + 900: uint16(27413), + 901: uint16(28606), + 902: uint16(40877), + 903: uint16(40878), + 904: uint16(23446), + 905: uint16(40879), + 906: uint16(26343), + 907: uint16(32347), + 908: uint16(28247), + 909: uint16(31178), + 910: uint16(15752), + 911: uint16(17603), + 912: uint16(12886), + 913: uint16(10134), + 914: uint16(17306), + 915: uint16(17718), + 917: uint16(23765), + 918: uint16(15130), + 919: uint16(35577), + 920: uint16(23672), + 921: uint16(15634), + 922: uint16(13649), + 923: uint16(23928), + 924: uint16(40882), + 925: uint16(29015), + 926: uint16(17752), + 927: uint16(16620), + 928: uint16(7715), + 929: uint16(19575), + 930: uint16(14712), + 931: uint16(13386), + 932: uint16(420), + 933: uint16(27713), + 934: uint16(35532), + 935: uint16(20404), + 936: uint16(569), + 937: uint16(22975), + 938: uint16(33132), + 939: uint16(38998), + 940: uint16(39162), + 941: uint16(24379), + 942: uint16(2975), + 944: uint16(8641), + 945: uint16(35181), + 946: uint16(16642), + 947: uint16(18107), + 948: uint16(36985), + 949: uint16(16135), + 950: uint16(40883), + 951: uint16(41397), + 952: uint16(16632), + 953: uint16(14294), + 954: uint16(18167), + 955: uint16(27718), + 956: uint16(16764), + 957: uint16(34482), + 958: uint16(29695), + 959: uint16(17773), + 960: uint16(14548), + 961: uint16(21658), + 962: uint16(17761), + 963: uint16(17691), + 964: uint16(19849), + 965: uint16(19579), + 966: uint16(19830), + 967: uint16(17898), + 968: uint16(16328), + 969: uint16(19215), + 970: uint16(13921), + 971: uint16(17630), + 972: uint16(17597), + 973: uint16(16877), + 974: uint16(23870), + 975: uint16(23880), + 976: uint16(23894), + 977: uint16(15868), + 978: uint16(14351), + 979: uint16(23972), + 980: uint16(23993), + 981: uint16(14368), + 982: uint16(14392), + 983: uint16(24130), + 984: uint16(24253), + 985: uint16(24357), + 986: uint16(24451), + 987: uint16(14600), + 988: uint16(14612), + 989: uint16(14655), + 990: uint16(14669), + 991: uint16(24791), + 992: uint16(24893), + 993: uint16(23781), + 994: uint16(14729), + 995: uint16(25015), + 996: uint16(25017), + 997: uint16(25039), + 998: uint16(14776), + 999: uint16(25132), + 1000: uint16(25232), + 1001: uint16(25317), + 1002: uint16(25368), + 1003: uint16(14840), + 1004: uint16(22193), + 1005: uint16(14851), + 1006: uint16(25570), + 1007: uint16(25595), + 1008: uint16(25607), + 1009: uint16(25690), + 1010: uint16(14923), + 1011: uint16(25792), + 1012: uint16(23829), + 1013: uint16(22049), + 1014: uint16(40863), + 1015: uint16(14999), + 1016: uint16(25990), + 1017: uint16(15037), + 1018: uint16(26111), + 1019: uint16(26195), + 1020: uint16(15090), + 1021: uint16(26258), + 1022: uint16(15138), + 1023: uint16(26390), + 1024: uint16(15170), + 1025: uint16(26532), + 1026: uint16(26624), + 1027: uint16(15192), + 1028: uint16(26698), + 1029: uint16(26756), + 1030: uint16(15218), + 1031: uint16(15217), + 1032: uint16(15227), + 1033: uint16(26889), + 1034: uint16(26947), + 1035: uint16(29276), + 1036: uint16(26980), + 1037: uint16(27039), + 1038: uint16(27013), + 1039: uint16(15292), + 1040: uint16(27094), + 1041: uint16(15325), + 1042: uint16(27237), + 1043: uint16(27252), + 1044: uint16(27249), + 1045: uint16(27266), + 1046: uint16(15340), + 1047: uint16(27289), + 1048: uint16(15346), + 1049: uint16(27307), + 1050: uint16(27317), + 1051: uint16(27348), + 1052: uint16(27382), + 1053: uint16(27521), + 1054: uint16(27585), + 1055: uint16(27626), + 1056: uint16(27765), + 1057: uint16(27818), + 1058: uint16(15563), + 1059: uint16(27906), + 1060: uint16(27910), + 1061: uint16(27942), + 1062: uint16(28033), + 1063: uint16(15599), + 1064: uint16(28068), + 1065: uint16(28081), + 1066: uint16(28181), + 1067: uint16(28184), + 1068: uint16(28201), + 1069: uint16(28294), + 1070: uint16(35264), + 1071: uint16(28347), + 1072: uint16(28386), + 1073: uint16(28378), + 1074: uint16(40831), + 1075: uint16(28392), + 1076: uint16(28393), + 1077: uint16(28452), + 1078: uint16(28468), + 1079: uint16(15686), + 1080: uint16(16193), + 1081: uint16(28545), + 1082: uint16(28606), + 1083: uint16(15722), + 1084: uint16(15733), + 1085: uint16(29111), + 1086: uint16(23705), + 1087: uint16(15754), + 1088: uint16(28716), + 1089: uint16(15761), + 1090: uint16(28752), + 1091: uint16(28756), + 1092: uint16(28783), + 1093: uint16(28799), + 1094: uint16(28809), + 1095: uint16(805), + 1096: uint16(17345), + 1097: uint16(13809), + 1098: uint16(3800), + 1099: uint16(16087), + 1100: uint16(22462), + 1101: uint16(28371), + 1102: uint16(28990), + 1103: uint16(22496), + 1104: uint16(13902), + 1105: uint16(27042), + 1106: uint16(35817), + 1107: uint16(23412), + 1108: uint16(31305), + 1109: uint16(22753), + 1110: uint16(38105), + 1111: uint16(31333), + 1112: uint16(31357), + 1113: uint16(22956), + 1114: uint16(31419), + 1115: uint16(31408), + 1116: uint16(31426), + 1117: uint16(31427), + 1118: uint16(29137), + 1119: uint16(25741), + 1120: uint16(16842), + 1121: uint16(31450), + 1122: uint16(31453), + 1123: uint16(31466), + 1124: uint16(16879), + 1125: uint16(21682), + 1126: uint16(23553), + 1127: uint16(31499), + 1128: uint16(31573), + 1129: uint16(31529), + 1130: uint16(21262), + 1131: uint16(23806), + 1132: uint16(31650), + 1133: uint16(31599), + 1134: uint16(33692), + 1135: uint16(23476), + 1136: uint16(27775), + 1137: uint16(31696), + 1138: uint16(33825), + 1139: uint16(31634), + 1141: uint16(23840), + 1142: uint16(15789), + 1143: uint16(23653), + 1144: uint16(33938), + 1145: uint16(31738), + 1147: uint16(31797), + 1148: uint16(23745), + 1149: uint16(31812), + 1150: uint16(31875), + 1151: uint16(18562), + 1152: uint16(31910), + 1153: uint16(26237), + 1154: uint16(17784), + 1155: uint16(31945), + 1156: uint16(31943), + 1157: uint16(31974), + 1158: uint16(31860), + 1159: uint16(31987), + 1160: uint16(31989), + 1162: uint16(32359), + 1163: uint16(17693), + 1164: uint16(28228), + 1165: uint16(32093), + 1166: uint16(28374), + 1167: uint16(29837), + 1168: uint16(32137), + 1169: uint16(32171), + 1170: uint16(28981), + 1171: uint16(32179), + 1173: uint16(16471), + 1174: uint16(24617), + 1175: uint16(32228), + 1176: uint16(15635), + 1177: uint16(32245), + 1178: uint16(6137), + 1179: uint16(32229), + 1180: uint16(33645), + 1182: uint16(24865), + 1183: uint16(24922), + 1184: uint16(32366), + 1185: uint16(32402), + 1186: uint16(17195), + 1187: uint16(37996), + 1188: uint16(32295), + 1189: uint16(32576), + 1190: uint16(32577), + 1191: uint16(32583), + 1192: uint16(31030), + 1193: uint16(25296), + 1194: uint16(39393), + 1195: uint16(32663), + 1196: uint16(25425), + 1197: uint16(32675), + 1198: uint16(5729), + 1199: uint16(104), + 1200: uint16(17756), + 1201: uint16(14182), + 1202: uint16(17667), + 1203: uint16(33594), + 1204: uint16(32762), + 1205: uint16(25737), + 1207: uint16(32776), + 1208: uint16(32797), + 1210: uint16(32815), + 1211: uint16(41095), + 1212: uint16(27843), + 1213: uint16(32827), + 1214: uint16(32828), + 1215: uint16(32865), + 1216: uint16(10004), + 1217: uint16(18825), + 1218: uint16(26150), + 1219: uint16(15843), + 1220: uint16(26344), + 1221: uint16(26405), + 1222: uint16(32935), + 1223: uint16(35400), + 1224: uint16(33031), + 1225: uint16(33050), + 1226: uint16(22704), + 1227: uint16(9974), + 1228: uint16(27775), + 1229: uint16(25752), + 1230: uint16(20408), + 1231: uint16(25831), + 1232: uint16(5258), + 1233: uint16(33304), + 1234: uint16(6238), + 1235: uint16(27219), + 1236: uint16(19045), + 1237: uint16(19093), + 1238: uint16(17530), + 1239: uint16(33321), + 1240: uint16(2829), + 1241: uint16(27218), + 1242: uint16(15742), + 1243: uint16(20473), + 1244: uint16(5373), + 1245: uint16(34018), + 1246: uint16(33634), + 1247: uint16(27402), + 1248: uint16(18855), + 1249: uint16(13616), + 1250: uint16(6003), + 1251: uint16(15864), + 1252: uint16(33450), + 1253: uint16(26907), + 1254: uint16(63892), + 1255: uint16(16859), + 1256: uint16(34123), + 1257: uint16(33488), + 1258: uint16(33562), + 1259: uint16(3606), + 1260: uint16(6068), + 1261: uint16(14017), + 1262: uint16(12669), + 1263: uint16(13658), + 1264: uint16(33403), + 1265: uint16(33506), + 1266: uint16(33560), + 1267: uint16(16011), + 1268: uint16(28067), + 1269: uint16(27397), + 1270: uint16(27543), + 1271: uint16(13774), + 1272: uint16(15807), + 1273: uint16(33565), + 1274: uint16(21996), + 1275: uint16(33669), + 1276: uint16(17675), + 1277: uint16(28069), + 1278: uint16(33708), + 1280: uint16(33747), + 1281: uint16(13438), + 1282: uint16(28372), + 1283: uint16(27223), + 1284: uint16(34138), + 1285: uint16(13462), + 1286: uint16(28226), + 1287: uint16(12015), + 1288: uint16(33880), + 1289: uint16(23524), + 1290: uint16(33905), + 1291: uint16(15827), + 1292: uint16(17636), + 1293: uint16(27303), + 1294: uint16(33866), + 1295: uint16(15541), + 1296: uint16(31064), + 1298: uint16(27542), + 1299: uint16(28279), + 1300: uint16(28227), + 1301: uint16(34014), + 1303: uint16(33681), + 1304: uint16(17568), + 1305: uint16(33939), + 1306: uint16(34020), + 1307: uint16(23697), + 1308: uint16(16960), + 1309: uint16(23744), + 1310: uint16(17731), + 1311: uint16(34100), + 1312: uint16(23282), + 1313: uint16(28313), + 1314: uint16(17703), + 1315: uint16(34163), + 1316: uint16(17686), + 1317: uint16(26559), + 1318: uint16(34326), + 1319: uint16(34341), + 1320: uint16(34363), + 1321: uint16(34241), + 1322: uint16(28808), + 1323: uint16(34306), + 1324: uint16(5506), + 1325: uint16(28877), + 1326: uint16(63922), + 1327: uint16(17770), + 1328: uint16(34344), + 1329: uint16(13896), + 1330: uint16(6306), + 1331: uint16(21495), + 1332: uint16(29594), + 1333: uint16(34430), + 1334: uint16(34673), + 1335: uint16(41208), + 1336: uint16(34798), + 1337: uint16(11303), + 1338: uint16(34737), + 1339: uint16(34778), + 1340: uint16(34831), + 1341: uint16(22113), + 1342: uint16(34412), + 1343: uint16(26710), + 1344: uint16(17935), + 1345: uint16(34885), + 1346: uint16(34886), + 1347: uint16(30176), + 1348: uint16(15801), + 1349: uint16(30180), + 1350: uint16(34910), + 1351: uint16(34972), + 1352: uint16(18011), + 1353: uint16(34996), + 1354: uint16(34997), + 1355: uint16(25537), + 1356: uint16(35013), + 1357: uint16(30583), + 1358: uint16(30479), + 1359: uint16(35207), + 1360: uint16(35210), + 1363: uint16(35239), + 1364: uint16(35260), + 1365: uint16(35365), + 1366: uint16(35303), + 1367: uint16(31012), + 1368: uint16(31421), + 1369: uint16(35484), + 1370: uint16(30611), + 1371: uint16(37374), + 1372: uint16(35472), + 1373: uint16(31321), + 1374: uint16(31465), + 1375: uint16(31546), + 1376: uint16(16271), + 1377: uint16(18195), + 1378: uint16(31544), + 1379: uint16(29052), + 1380: uint16(35596), + 1381: uint16(35615), + 1382: uint16(21552), + 1383: uint16(21861), + 1384: uint16(35647), + 1385: uint16(35660), + 1386: uint16(35661), + 1387: uint16(35497), + 1388: uint16(19066), + 1389: uint16(35728), + 1390: uint16(35739), + 1391: uint16(35503), + 1392: uint16(5855), + 1393: uint16(17941), + 1394: uint16(34895), + 1395: uint16(35995), + 1396: uint16(32084), + 1397: uint16(32143), + 1398: uint16(63956), + 1399: uint16(14117), + 1400: uint16(32083), + 1401: uint16(36054), + 1402: uint16(32152), + 1403: uint16(32189), + 1404: uint16(36114), + 1405: uint16(36099), + 1406: uint16(6416), + 1407: uint16(36059), + 1408: uint16(28764), + 1409: uint16(36113), + 1410: uint16(19657), + 1411: uint16(16080), + 1413: uint16(36265), + 1414: uint16(32770), + 1415: uint16(4116), + 1416: uint16(18826), + 1417: uint16(15228), + 1418: uint16(33212), + 1419: uint16(28940), + 1420: uint16(31463), + 1421: uint16(36525), + 1422: uint16(36534), + 1423: uint16(36547), + 1424: uint16(37588), + 1425: uint16(36633), + 1426: uint16(36653), + 1427: uint16(33637), + 1428: uint16(33810), + 1429: uint16(36773), + 1430: uint16(37635), + 1431: uint16(41631), + 1432: uint16(2640), + 1433: uint16(36787), + 1434: uint16(18730), + 1435: uint16(35294), + 1436: uint16(34109), + 1437: uint16(15803), + 1438: uint16(24312), + 1439: uint16(12898), + 1440: uint16(36857), + 1441: uint16(40980), + 1442: uint16(34492), + 1443: uint16(34049), + 1444: uint16(8997), + 1445: uint16(14720), + 1446: uint16(28375), + 1447: uint16(36919), + 1448: uint16(34108), + 1449: uint16(31422), + 1450: uint16(36961), + 1451: uint16(34156), + 1452: uint16(34315), + 1453: uint16(37032), + 1454: uint16(34579), + 1455: uint16(37060), + 1456: uint16(34534), + 1457: uint16(37038), + 1459: uint16(37223), + 1460: uint16(15088), + 1461: uint16(37289), + 1462: uint16(37316), + 1463: uint16(31916), + 1464: uint16(35123), + 1465: uint16(7817), + 1466: uint16(37390), + 1467: uint16(27807), + 1468: uint16(37441), + 1469: uint16(37474), + 1470: uint16(21945), + 1472: uint16(35526), + 1473: uint16(15515), + 1474: uint16(35596), + 1475: uint16(21979), + 1476: uint16(3377), + 1477: uint16(37676), + 1478: uint16(37739), + 1479: uint16(35553), + 1480: uint16(35819), + 1481: uint16(28815), + 1482: uint16(23235), + 1483: uint16(35554), + 1484: uint16(35557), + 1485: uint16(18789), + 1486: uint16(37444), + 1487: uint16(35820), + 1488: uint16(35897), + 1489: uint16(35839), + 1490: uint16(37747), + 1491: uint16(37979), + 1492: uint16(36540), + 1493: uint16(38277), + 1494: uint16(38310), + 1495: uint16(37926), + 1496: uint16(38304), + 1497: uint16(28662), + 1498: uint16(17081), + 1499: uint16(9850), + 1500: uint16(34520), + 1501: uint16(4732), + 1502: uint16(15918), + 1503: uint16(18911), + 1504: uint16(27676), + 1505: uint16(38523), + 1506: uint16(38550), + 1507: uint16(16748), + 1508: uint16(38563), + 1509: uint16(28373), + 1510: uint16(25050), + 1511: uint16(38582), + 1512: uint16(30965), + 1513: uint16(35552), + 1514: uint16(38589), + 1515: uint16(21452), + 1516: uint16(18849), + 1517: uint16(27832), + 1518: uint16(628), + 1519: uint16(25616), + 1520: uint16(37039), + 1521: uint16(37093), + 1522: uint16(19153), + 1523: uint16(6421), + 1524: uint16(13066), + 1525: uint16(38705), + 1526: uint16(34370), + 1527: uint16(38710), + 1528: uint16(18959), + 1529: uint16(17725), + 1530: uint16(17797), + 1531: uint16(19177), + 1532: uint16(28789), + 1533: uint16(23361), + 1534: uint16(38683), + 1536: uint16(37333), + 1537: uint16(38743), + 1538: uint16(23370), + 1539: uint16(37355), + 1540: uint16(38751), + 1541: uint16(37925), + 1542: uint16(20688), + 1543: uint16(12471), + 1544: uint16(12476), + 1545: uint16(38793), + 1546: uint16(38815), + 1547: uint16(38833), + 1548: uint16(38846), + 1549: uint16(38848), + 1550: uint16(38866), + 1551: uint16(38880), + 1552: uint16(21612), + 1553: uint16(38894), + 1554: uint16(29724), + 1555: uint16(37939), + 1557: uint16(38901), + 1558: uint16(37917), + 1559: uint16(31098), + 1560: uint16(19153), + 1561: uint16(38964), + 1562: uint16(38963), + 1563: uint16(38987), + 1564: uint16(39014), + 1565: uint16(15118), + 1566: uint16(29045), + 1567: uint16(15697), + 1568: uint16(1584), + 1569: uint16(16732), + 1570: uint16(22278), + 1571: uint16(39114), + 1572: uint16(39095), + 1573: uint16(39112), + 1574: uint16(39111), + 1575: uint16(19199), + 1576: uint16(27943), + 1577: uint16(5843), + 1578: uint16(21936), + 1579: uint16(39137), + 1580: uint16(39142), + 1581: uint16(39148), + 1582: uint16(37752), + 1583: uint16(39225), + 1584: uint16(18985), + 1585: uint16(19314), + 1586: uint16(38999), + 1587: uint16(39173), + 1588: uint16(39413), + 1589: uint16(39436), + 1590: uint16(39483), + 1591: uint16(39440), + 1592: uint16(39512), + 1593: uint16(22309), + 1594: uint16(14020), + 1595: uint16(37041), + 1596: uint16(39893), + 1597: uint16(39648), + 1598: uint16(39650), + 1599: uint16(39685), + 1600: uint16(39668), + 1601: uint16(19470), + 1602: uint16(39700), + 1603: uint16(39725), + 1604: uint16(34304), + 1605: uint16(20532), + 1606: uint16(39732), + 1607: uint16(27048), + 1608: uint16(14531), + 1609: uint16(12413), + 1610: uint16(39760), + 1611: uint16(39744), + 1612: uint16(40254), + 1613: uint16(23109), + 1614: uint16(6243), + 1615: uint16(39822), + 1616: uint16(16971), + 1617: uint16(39938), + 1618: uint16(39935), + 1619: uint16(39948), + 1620: uint16(40552), + 1621: uint16(40404), + 1622: uint16(40887), + 1623: uint16(41362), + 1624: uint16(41387), + 1625: uint16(41185), + 1626: uint16(41251), + 1627: uint16(41439), + 1628: uint16(40318), + 1629: uint16(40323), + 1630: uint16(41268), + 1631: uint16(40462), + 1632: uint16(26760), + 1633: uint16(40388), + 1634: uint16(8539), + 1635: uint16(41363), + 1636: uint16(41504), + 1637: uint16(6459), + 1638: uint16(41523), + 1639: uint16(40249), + 1640: uint16(41145), + 1641: uint16(41652), + 1642: uint16(40592), + 1643: uint16(40597), + 1644: uint16(40606), + 1645: uint16(40610), + 1646: uint16(19764), + 1647: uint16(40618), + 1648: uint16(40623), + 1649: uint16(17252), + 1650: uint16(40641), + 1651: uint16(15200), + 1652: uint16(14821), + 1653: uint16(15645), + 1654: uint16(20274), + 1655: uint16(14270), + 1656: uint16(35883), + 1657: uint16(40706), + 1658: uint16(40712), + 1659: uint16(19350), + 1660: uint16(37924), + 1661: uint16(28066), + 1662: uint16(40727), + 1664: uint16(40761), + 1665: uint16(22175), + 1666: uint16(22154), + 1667: uint16(40773), + 1668: uint16(39352), + 1669: uint16(37003), + 1670: uint16(38898), + 1671: uint16(33919), + 1672: uint16(40802), + 1673: uint16(40809), + 1674: uint16(31452), + 1675: uint16(40846), + 1676: uint16(29206), + 1677: uint16(19390), + 1678: uint16(18805), + 1679: uint16(18875), + 1680: uint16(29047), + 1681: uint16(18936), + 1682: uint16(17224), + 1683: uint16(19025), + 1684: uint16(29598), + 1685: uint16(35802), + 1686: uint16(6394), + 1687: uint16(31135), + 1688: uint16(35198), + 1689: uint16(36406), + 1690: uint16(37737), + 1691: uint16(37875), + 1692: uint16(35396), + 1693: uint16(37612), + 1694: uint16(37761), + 1695: uint16(37835), + 1696: uint16(35180), + 1697: uint16(17593), + 1698: uint16(29207), + 1699: uint16(16107), + 1700: uint16(30578), + 1701: uint16(31299), + 1702: uint16(28880), + 1703: uint16(17523), + 1704: uint16(17400), + 1705: uint16(29054), + 1706: uint16(6127), + 1707: uint16(28835), + 1708: uint16(6334), + 1709: uint16(13721), + 1710: uint16(16071), + 1711: uint16(6277), + 1712: uint16(21551), + 1713: uint16(6136), + 1714: uint16(14114), + 1715: uint16(5883), + 1716: uint16(6201), + 1717: uint16(14049), + 1718: uint16(6004), + 1719: uint16(6353), + 1720: uint16(24395), + 1721: uint16(14115), + 1722: uint16(5824), + 1723: uint16(22363), + 1724: uint16(18981), + 1725: uint16(5118), + 1726: uint16(4776), + 1727: uint16(5062), + 1728: uint16(5302), + 1729: uint16(34051), + 1730: uint16(13990), + 1732: uint16(33877), + 1733: uint16(18836), + 1734: uint16(29029), + 1735: uint16(15921), + 1736: uint16(21852), + 1737: uint16(16123), + 1738: uint16(28754), + 1739: uint16(17652), + 1740: uint16(14062), + 1741: uint16(39325), + 1742: uint16(28454), + 1743: uint16(26617), + 1744: uint16(14131), + 1745: uint16(15381), + 1746: uint16(15847), + 1747: uint16(22636), + 1748: uint16(6434), + 1749: uint16(26640), + 1750: uint16(16471), + 1751: uint16(14143), + 1752: uint16(16609), + 1753: uint16(16523), + 1754: uint16(16655), + 1755: uint16(27681), + 1756: uint16(21707), + 1757: uint16(22174), + 1758: uint16(26289), + 1759: uint16(22162), + 1760: uint16(4063), + 1761: uint16(2984), + 1762: uint16(3597), + 1763: uint16(37830), + 1764: uint16(35603), + 1765: uint16(37788), + 1766: uint16(20216), + 1767: uint16(20779), + 1768: uint16(14361), + 1769: uint16(17462), + 1770: uint16(20156), + 1771: uint16(1125), + 1772: uint16(895), + 1773: uint16(20299), + 1774: uint16(20362), + 1775: uint16(22097), + 1776: uint16(23144), + 1777: uint16(427), + 1778: uint16(971), + 1779: uint16(14745), + 1780: uint16(778), + 1781: uint16(1044), + 1782: uint16(13365), + 1783: uint16(20265), + 1784: uint16(704), + 1785: uint16(36531), + 1786: uint16(629), + 1787: uint16(35546), + 1788: uint16(524), + 1789: uint16(20120), + 1790: uint16(20685), + 1791: uint16(20749), + 1792: uint16(20386), + 1793: uint16(20227), + 1794: uint16(18958), + 1795: uint16(16010), + 1796: uint16(20290), + 1797: uint16(20526), + 1798: uint16(20588), + 1799: uint16(20609), + 1800: uint16(20428), + 1801: uint16(20453), + 1802: uint16(20568), + 1803: uint16(20732), + 1808: uint16(28278), + 1809: uint16(13717), + 1810: uint16(15929), + 1811: uint16(16063), + 1812: uint16(28018), + 1813: uint16(6276), + 1814: uint16(16009), + 1815: uint16(20904), + 1816: uint16(20931), + 1817: uint16(1504), + 1818: uint16(17629), + 1819: uint16(1187), + 1820: uint16(1170), + 1821: uint16(1169), + 1822: uint16(36218), + 1823: uint16(35484), + 1824: uint16(1806), + 1825: uint16(21081), + 1826: uint16(21156), + 1827: uint16(2163), + 1828: uint16(21217), + 1830: uint16(18042), + 1831: uint16(29068), + 1832: uint16(17292), + 1833: uint16(3104), + 1834: uint16(18860), + 1835: uint16(4324), + 1836: uint16(27089), + 1837: uint16(3613), + 1839: uint16(16094), + 1840: uint16(29849), + 1841: uint16(29716), + 1842: uint16(29782), + 1843: uint16(29592), + 1844: uint16(19342), + 1845: uint16(19132), + 1846: uint16(16525), + 1847: uint16(21456), + 1848: uint16(13700), + 1849: uint16(29199), + 1850: uint16(16585), + 1851: uint16(21940), + 1852: uint16(837), + 1853: uint16(21709), + 1854: uint16(3014), + 1855: uint16(22301), + 1856: uint16(37469), + 1857: uint16(38644), + 1858: uint16(37734), + 1859: uint16(22493), + 1860: uint16(22413), + 1861: uint16(22399), + 1862: uint16(13886), + 1863: uint16(22731), + 1864: uint16(23193), + 1865: uint16(35398), + 1866: uint16(5882), + 1867: uint16(5999), + 1868: uint16(5904), + 1869: uint16(23084), + 1870: uint16(22968), + 1871: uint16(37519), + 1872: uint16(23166), + 1873: uint16(23247), + 1874: uint16(23058), + 1875: uint16(22854), + 1876: uint16(6643), + 1877: uint16(6241), + 1878: uint16(17045), + 1879: uint16(14069), + 1880: uint16(27909), + 1881: uint16(29763), + 1882: uint16(23073), + 1883: uint16(24195), + 1884: uint16(23169), + 1885: uint16(35799), + 1886: uint16(1043), + 1887: uint16(37856), + 1888: uint16(29836), + 1889: uint16(4867), + 1890: uint16(28933), + 1891: uint16(18802), + 1892: uint16(37896), + 1893: uint16(35323), + 1894: uint16(37821), + 1895: uint16(14240), + 1896: uint16(23582), + 1897: uint16(23710), + 1898: uint16(24158), + 1899: uint16(24136), + 1900: uint16(6550), + 1901: uint16(6524), + 1902: uint16(15086), + 1903: uint16(24269), + 1904: uint16(23375), + 1905: uint16(6403), + 1906: uint16(6404), + 1907: uint16(14081), + 1908: uint16(6304), + 1909: uint16(14045), + 1910: uint16(5886), + 1911: uint16(14035), + 1912: uint16(33066), + 1913: uint16(35399), + 1914: uint16(7610), + 1915: uint16(13426), + 1916: uint16(35240), + 1917: uint16(24332), + 1918: uint16(24334), + 1919: uint16(6439), + 1920: uint16(6059), + 1921: uint16(23147), + 1922: uint16(5947), + 1923: uint16(23364), + 1924: uint16(34324), + 1925: uint16(30205), + 1926: uint16(34912), + 1927: uint16(24702), + 1928: uint16(10336), + 1929: uint16(9771), + 1930: uint16(24539), + 1931: uint16(16056), + 1932: uint16(9647), + 1933: uint16(9662), + 1934: uint16(37000), + 1935: uint16(28531), + 1936: uint16(25024), + 1937: uint16(62), + 1938: uint16(70), + 1939: uint16(9755), + 1940: uint16(24985), + 1941: uint16(24984), + 1942: uint16(24693), + 1943: uint16(11419), + 1944: uint16(11527), + 1945: uint16(18132), + 1946: uint16(37197), + 1947: uint16(25713), + 1948: uint16(18021), + 1949: uint16(11114), + 1950: uint16(14889), + 1951: uint16(11042), + 1952: uint16(13392), + 1953: uint16(39146), + 1954: uint16(11896), + 1955: uint16(25399), + 1956: uint16(42075), + 1957: uint16(25782), + 1958: uint16(25393), + 1959: uint16(25553), + 1960: uint16(18915), + 1961: uint16(11623), + 1962: uint16(25252), + 1963: uint16(11425), + 1964: uint16(25659), + 1965: uint16(25963), + 1966: uint16(26994), + 1967: uint16(15348), + 1968: uint16(12430), + 1969: uint16(12973), + 1970: uint16(18825), + 1971: uint16(12971), + 1972: uint16(21773), + 1973: uint16(13024), + 1974: uint16(6361), + 1975: uint16(37951), + 1976: uint16(26318), + 1977: uint16(12937), + 1978: uint16(12723), + 1979: uint16(15072), + 1980: uint16(16784), + 1981: uint16(21892), + 1982: uint16(35618), + 1983: uint16(21903), + 1984: uint16(5884), + 1985: uint16(21851), + 1986: uint16(21541), + 1987: uint16(30958), + 1988: uint16(12547), + 1989: uint16(6186), + 1990: uint16(12852), + 1991: uint16(13412), + 1992: uint16(12815), + 1993: uint16(12674), + 1994: uint16(17097), + 1995: uint16(26254), + 1996: uint16(27940), + 1997: uint16(26219), + 1998: uint16(19347), + 1999: uint16(26160), + 2000: uint16(30832), + 2001: uint16(7659), + 2002: uint16(26211), + 2003: uint16(13010), + 2004: uint16(13025), + 2005: uint16(26142), + 2006: uint16(22642), + 2007: uint16(14545), + 2008: uint16(14394), + 2009: uint16(14268), + 2010: uint16(15257), + 2011: uint16(14242), + 2012: uint16(13310), + 2013: uint16(29904), + 2014: uint16(15254), + 2015: uint16(26511), + 2016: uint16(17962), + 2017: uint16(26806), + 2018: uint16(26654), + 2019: uint16(15300), + 2020: uint16(27326), + 2021: uint16(14435), + 2022: uint16(14293), + 2023: uint16(17543), + 2024: uint16(27187), + 2025: uint16(27218), + 2026: uint16(27337), + 2027: uint16(27397), + 2028: uint16(6418), + 2029: uint16(25873), + 2030: uint16(26776), + 2031: uint16(27212), + 2032: uint16(15319), + 2033: uint16(27258), + 2034: uint16(27479), + 2035: uint16(16320), + 2036: uint16(15514), + 2037: uint16(37792), + 2038: uint16(37618), + 2039: uint16(35818), + 2040: uint16(35531), + 2041: uint16(37513), + 2042: uint16(32798), + 2043: uint16(35292), + 2044: uint16(37991), + 2045: uint16(28069), + 2046: uint16(28427), + 2047: uint16(18924), + 2049: uint16(16255), + 2050: uint16(15759), + 2051: uint16(28164), + 2052: uint16(16444), + 2053: uint16(23101), + 2054: uint16(28170), + 2055: uint16(22599), + 2056: uint16(27940), + 2057: uint16(30786), + 2058: uint16(28987), + 2059: uint16(17178), + 2060: uint16(17014), + 2061: uint16(28913), + 2062: uint16(29264), + 2063: uint16(29319), + 2064: uint16(29332), + 2065: uint16(18319), + 2066: uint16(18213), + 2067: uint16(20857), + 2068: uint16(19108), + 2069: uint16(1515), + 2070: uint16(29818), + 2071: uint16(16120), + 2072: uint16(13919), + 2073: uint16(19018), + 2074: uint16(18711), + 2075: uint16(24545), + 2076: uint16(16134), + 2077: uint16(16049), + 2078: uint16(19167), + 2079: uint16(35875), + 2080: uint16(16181), + 2081: uint16(24743), + 2082: uint16(16115), + 2083: uint16(29900), + 2084: uint16(29756), + 2085: uint16(37767), + 2086: uint16(29751), + 2087: uint16(17567), + 2088: uint16(28138), + 2089: uint16(17745), + 2090: uint16(30083), + 2091: uint16(16227), + 2092: uint16(19673), + 2093: uint16(19718), + 2094: uint16(16216), + 2095: uint16(30037), + 2096: uint16(30323), + 2097: uint16(42438), + 2098: uint16(15129), + 2099: uint16(29800), + 2100: uint16(35532), + 2101: uint16(18859), + 2102: uint16(18830), + 2103: uint16(15099), + 2104: uint16(15821), + 2105: uint16(19022), + 2106: uint16(16127), + 2107: uint16(18885), + 2108: uint16(18675), + 2109: uint16(37370), + 2110: uint16(22322), + 2111: uint16(37698), + 2112: uint16(35555), + 2113: uint16(6244), + 2114: uint16(20703), + 2115: uint16(21025), + 2116: uint16(20967), + 2117: uint16(30584), + 2118: uint16(12850), + 2119: uint16(30478), + 2120: uint16(30479), + 2121: uint16(30587), + 2122: uint16(18071), + 2123: uint16(14209), + 2124: uint16(14942), + 2125: uint16(18672), + 2126: uint16(29752), + 2127: uint16(29851), + 2128: uint16(16063), + 2129: uint16(19130), + 2130: uint16(19143), + 2131: uint16(16584), + 2132: uint16(19094), + 2133: uint16(25006), + 2134: uint16(37639), + 2135: uint16(21889), + 2136: uint16(30750), + 2137: uint16(30861), + 2138: uint16(30856), + 2139: uint16(30930), + 2140: uint16(29648), + 2141: uint16(31065), + 2142: uint16(30529), + 2143: uint16(22243), + 2144: uint16(16654), + 2146: uint16(33942), + 2147: uint16(31141), + 2148: uint16(27181), + 2149: uint16(16122), + 2150: uint16(31290), + 2151: uint16(31220), + 2152: uint16(16750), + 2153: uint16(5862), + 2154: uint16(16690), + 2155: uint16(37429), + 2156: uint16(31217), + 2157: uint16(3404), + 2158: uint16(18828), + 2159: uint16(665), + 2160: uint16(15802), + 2161: uint16(5998), + 2162: uint16(13719), + 2163: uint16(21867), + 2164: uint16(13680), + 2165: uint16(13994), + 2166: uint16(468), + 2167: uint16(3085), + 2168: uint16(31458), + 2169: uint16(23129), + 2170: uint16(9973), + 2171: uint16(23215), + 2172: uint16(23196), + 2173: uint16(23053), + 2174: uint16(603), + 2175: uint16(30960), + 2176: uint16(23082), + 2177: uint16(23494), + 2178: uint16(31486), + 2179: uint16(16889), + 2180: uint16(31837), + 2181: uint16(31853), + 2182: uint16(16913), + 2183: uint16(23475), + 2184: uint16(24252), + 2185: uint16(24230), + 2186: uint16(31949), + 2187: uint16(18937), + 2188: uint16(6064), + 2189: uint16(31886), + 2190: uint16(31868), + 2191: uint16(31918), + 2192: uint16(27314), + 2193: uint16(32220), + 2194: uint16(32263), + 2195: uint16(32211), + 2196: uint16(32590), + 2197: uint16(25185), + 2198: uint16(24924), + 2199: uint16(31560), + 2200: uint16(32151), + 2201: uint16(24194), + 2202: uint16(17002), + 2203: uint16(27509), + 2204: uint16(2326), + 2205: uint16(26582), + 2206: uint16(78), + 2207: uint16(13775), + 2208: uint16(22468), + 2209: uint16(25618), + 2210: uint16(25592), + 2211: uint16(18786), + 2212: uint16(32733), + 2213: uint16(31527), + 2214: uint16(2092), + 2215: uint16(23273), + 2216: uint16(23875), + 2217: uint16(31500), + 2218: uint16(24078), + 2219: uint16(39398), + 2220: uint16(34373), + 2221: uint16(39523), + 2222: uint16(27164), + 2223: uint16(13375), + 2224: uint16(14818), + 2225: uint16(18935), + 2226: uint16(26029), + 2227: uint16(39455), + 2228: uint16(26016), + 2229: uint16(33920), + 2230: uint16(28967), + 2231: uint16(27857), + 2232: uint16(17642), + 2233: uint16(33079), + 2234: uint16(17410), + 2235: uint16(32966), + 2236: uint16(33033), + 2237: uint16(33090), + 2238: uint16(26548), + 2239: uint16(39107), + 2240: uint16(27202), + 2241: uint16(33378), + 2242: uint16(33381), + 2243: uint16(27217), + 2244: uint16(33875), + 2245: uint16(28071), + 2246: uint16(34320), + 2247: uint16(29211), + 2248: uint16(23174), + 2249: uint16(16767), + 2250: uint16(6208), + 2251: uint16(23339), + 2252: uint16(6305), + 2253: uint16(23268), + 2254: uint16(6360), + 2255: uint16(34464), + 2256: uint16(63932), + 2257: uint16(15759), + 2258: uint16(34861), + 2259: uint16(29730), + 2260: uint16(23042), + 2261: uint16(34926), + 2262: uint16(20293), + 2263: uint16(34951), + 2264: uint16(35007), + 2265: uint16(35046), + 2266: uint16(35173), + 2267: uint16(35149), + 2268: uint16(22147), + 2269: uint16(35156), + 2270: uint16(30597), + 2271: uint16(30596), + 2272: uint16(35829), + 2273: uint16(35801), + 2274: uint16(35740), + 2275: uint16(35321), + 2276: uint16(16045), + 2277: uint16(33955), + 2278: uint16(18165), + 2279: uint16(18127), + 2280: uint16(14322), + 2281: uint16(35389), + 2282: uint16(35356), + 2283: uint16(37960), + 2284: uint16(24397), + 2285: uint16(37419), + 2286: uint16(17028), + 2287: uint16(26068), + 2288: uint16(28969), + 2289: uint16(28868), + 2290: uint16(6213), + 2291: uint16(40301), + 2292: uint16(35999), + 2293: uint16(36073), + 2294: uint16(32220), + 2295: uint16(22938), + 2296: uint16(30659), + 2297: uint16(23024), + 2298: uint16(17262), + 2299: uint16(14036), + 2300: uint16(36394), + 2301: uint16(36519), + 2302: uint16(19465), + 2303: uint16(36656), + 2304: uint16(36682), + 2305: uint16(17140), + 2306: uint16(27736), + 2307: uint16(28603), + 2308: uint16(8993), + 2309: uint16(18587), + 2310: uint16(28537), + 2311: uint16(28299), + 2312: uint16(6106), + 2313: uint16(39913), + 2314: uint16(14005), + 2315: uint16(18735), + 2316: uint16(37051), + 2318: uint16(21873), + 2319: uint16(18694), + 2320: uint16(37307), + 2321: uint16(37892), + 2322: uint16(35403), + 2323: uint16(16482), + 2324: uint16(35580), + 2325: uint16(37927), + 2326: uint16(35869), + 2327: uint16(35899), + 2328: uint16(34021), + 2329: uint16(35371), + 2330: uint16(38297), + 2331: uint16(38311), + 2332: uint16(38295), + 2333: uint16(38294), + 2334: uint16(36148), + 2335: uint16(29765), + 2336: uint16(16066), + 2337: uint16(18687), + 2338: uint16(19010), + 2339: uint16(17386), + 2340: uint16(16103), + 2341: uint16(12837), + 2342: uint16(38543), + 2343: uint16(36583), + 2344: uint16(36454), + 2345: uint16(36453), + 2346: uint16(16076), + 2347: uint16(18925), + 2348: uint16(19064), + 2349: uint16(16366), + 2350: uint16(29714), + 2351: uint16(29803), + 2352: uint16(16124), + 2353: uint16(38721), + 2354: uint16(37040), + 2355: uint16(26695), + 2356: uint16(18973), + 2357: uint16(37011), + 2358: uint16(22495), + 2360: uint16(37736), + 2361: uint16(35209), + 2362: uint16(35878), + 2363: uint16(35631), + 2364: uint16(25534), + 2365: uint16(37562), + 2366: uint16(23313), + 2367: uint16(35689), + 2368: uint16(18748), + 2369: uint16(29689), + 2370: uint16(16923), + 2371: uint16(38811), + 2372: uint16(38769), + 2373: uint16(39224), + 2374: uint16(3878), + 2375: uint16(24001), + 2376: uint16(35781), + 2377: uint16(19122), + 2378: uint16(38943), + 2379: uint16(38106), + 2380: uint16(37622), + 2381: uint16(38359), + 2382: uint16(37349), + 2383: uint16(17600), + 2384: uint16(35664), + 2385: uint16(19047), + 2386: uint16(35684), + 2387: uint16(39132), + 2388: uint16(35397), + 2389: uint16(16128), + 2390: uint16(37418), + 2391: uint16(18725), + 2392: uint16(33812), + 2393: uint16(39227), + 2394: uint16(39245), + 2395: uint16(31494), + 2396: uint16(15869), + 2397: uint16(39323), + 2398: uint16(19311), + 2399: uint16(39338), + 2400: uint16(39516), + 2401: uint16(35685), + 2402: uint16(22728), + 2403: uint16(27279), + 2404: uint16(39457), + 2405: uint16(23294), + 2406: uint16(39471), + 2407: uint16(39153), + 2408: uint16(19344), + 2409: uint16(39240), + 2410: uint16(39356), + 2411: uint16(19389), + 2412: uint16(19351), + 2413: uint16(37757), + 2414: uint16(22642), + 2415: uint16(4866), + 2416: uint16(22562), + 2417: uint16(18872), + 2418: uint16(5352), + 2419: uint16(30788), + 2420: uint16(10015), + 2421: uint16(15800), + 2422: uint16(26821), + 2423: uint16(15741), + 2424: uint16(37976), + 2425: uint16(14631), + 2426: uint16(24912), + 2427: uint16(10113), + 2428: uint16(10603), + 2429: uint16(24839), + 2430: uint16(40015), + 2431: uint16(40019), + 2432: uint16(40059), + 2433: uint16(39989), + 2434: uint16(39952), + 2435: uint16(39807), + 2436: uint16(39887), + 2437: uint16(40493), + 2438: uint16(39839), + 2439: uint16(41461), + 2440: uint16(41214), + 2441: uint16(40225), + 2442: uint16(19630), + 2443: uint16(16644), + 2444: uint16(40472), + 2445: uint16(19632), + 2446: uint16(40204), + 2447: uint16(41396), + 2448: uint16(41197), + 2449: uint16(41203), + 2450: uint16(39215), + 2451: uint16(40357), + 2452: uint16(33981), + 2453: uint16(28178), + 2454: uint16(28639), + 2455: uint16(27522), + 2456: uint16(34300), + 2457: uint16(17715), + 2458: uint16(28068), + 2459: uint16(28292), + 2460: uint16(28144), + 2461: uint16(33824), + 2462: uint16(34286), + 2463: uint16(28160), + 2464: uint16(14295), + 2465: uint16(24676), + 2466: uint16(31202), + 2467: uint16(13724), + 2468: uint16(13888), + 2469: uint16(18733), + 2470: uint16(18910), + 2471: uint16(15714), + 2472: uint16(37851), + 2473: uint16(37566), + 2474: uint16(37704), + 2475: uint16(703), + 2476: uint16(30905), + 2477: uint16(37495), + 2478: uint16(37965), + 2479: uint16(20452), + 2480: uint16(13376), + 2481: uint16(36964), + 2482: uint16(21853), + 2483: uint16(30781), + 2484: uint16(30804), + 2485: uint16(30902), + 2486: uint16(30795), + 2487: uint16(5975), + 2488: uint16(12745), + 2489: uint16(18753), + 2490: uint16(13978), + 2491: uint16(20338), + 2492: uint16(28634), + 2493: uint16(28633), + 2495: uint16(28702), + 2496: uint16(21524), + 2497: uint16(16821), + 2498: uint16(22459), + 2499: uint16(22771), + 2500: uint16(22410), + 2501: uint16(40214), + 2502: uint16(22487), + 2503: uint16(28980), + 2504: uint16(13487), + 2505: uint16(16812), + 2506: uint16(29163), + 2507: uint16(27712), + 2508: uint16(20375), + 2510: uint16(6069), + 2511: uint16(35401), + 2512: uint16(24844), + 2513: uint16(23246), + 2514: uint16(23051), + 2515: uint16(17084), + 2516: uint16(17544), + 2517: uint16(14124), + 2518: uint16(19323), + 2519: uint16(35324), + 2520: uint16(37819), + 2521: uint16(37816), + 2522: uint16(6358), + 2523: uint16(3869), + 2524: uint16(33906), + 2525: uint16(27840), + 2526: uint16(5139), + 2527: uint16(17146), + 2528: uint16(11302), + 2529: uint16(17345), + 2530: uint16(22932), + 2531: uint16(15799), + 2532: uint16(26433), + 2533: uint16(32168), + 2534: uint16(24923), + 2535: uint16(24740), + 2536: uint16(18873), + 2537: uint16(18827), + 2538: uint16(35322), + 2539: uint16(37605), + 2540: uint16(29666), + 2541: uint16(16105), + 2542: uint16(29876), + 2543: uint16(35683), + 2544: uint16(6303), + 2545: uint16(16097), + 2546: uint16(19123), + 2547: uint16(27352), + 2548: uint16(29683), + 2549: uint16(29691), + 2550: uint16(16086), + 2551: uint16(19006), + 2552: uint16(19092), + 2553: uint16(6105), + 2554: uint16(19046), + 2555: uint16(935), + 2556: uint16(5156), + 2557: uint16(18917), + 2558: uint16(29768), + 2559: uint16(18710), + 2560: uint16(28837), + 2561: uint16(18806), + 2562: uint16(37508), + 2563: uint16(29670), + 2564: uint16(37727), + 2565: uint16(1278), + 2566: uint16(37681), + 2567: uint16(35534), + 2568: uint16(35350), + 2569: uint16(37766), + 2570: uint16(35815), + 2571: uint16(21973), + 2572: uint16(18741), + 2573: uint16(35458), + 2574: uint16(29035), + 2575: uint16(18755), + 2576: uint16(3327), + 2577: uint16(22180), + 2578: uint16(1562), + 2579: uint16(3051), + 2580: uint16(3256), + 2581: uint16(21762), + 2582: uint16(31172), + 2583: uint16(6138), + 2584: uint16(32254), + 2585: uint16(5826), + 2586: uint16(19024), + 2587: uint16(6226), + 2588: uint16(17710), + 2589: uint16(37889), + 2590: uint16(14090), + 2591: uint16(35520), + 2592: uint16(18861), + 2593: uint16(22960), + 2594: uint16(6335), + 2595: uint16(6275), + 2596: uint16(29828), + 2597: uint16(23201), + 2598: uint16(14050), + 2599: uint16(15707), + 2600: uint16(14000), + 2601: uint16(37471), + 2602: uint16(23161), + 2603: uint16(35457), + 2604: uint16(6242), + 2605: uint16(37748), + 2606: uint16(15565), + 2607: uint16(2740), + 2608: uint16(19094), + 2609: uint16(14730), + 2610: uint16(20724), + 2611: uint16(15721), + 2612: uint16(15692), + 2613: uint16(5020), + 2614: uint16(29045), + 2615: uint16(17147), + 2616: uint16(33304), + 2617: uint16(28175), + 2618: uint16(37092), + 2619: uint16(17643), + 2620: uint16(27991), + 2621: uint16(32335), + 2622: uint16(28775), + 2623: uint16(27823), + 2624: uint16(15574), + 2625: uint16(16365), + 2626: uint16(15917), + 2627: uint16(28162), + 2628: uint16(28428), + 2629: uint16(15727), + 2630: uint16(1013), + 2631: uint16(30033), + 2632: uint16(14012), + 2633: uint16(13512), + 2634: uint16(18048), + 2635: uint16(16090), + 2636: uint16(18545), + 2637: uint16(22980), + 2638: uint16(37486), + 2639: uint16(18750), + 2640: uint16(36673), + 2641: uint16(35868), + 2642: uint16(27584), + 2643: uint16(22546), + 2644: uint16(22472), + 2645: uint16(14038), + 2646: uint16(5202), + 2647: uint16(28926), + 2648: uint16(17250), + 2649: uint16(19057), + 2650: uint16(12259), + 2651: uint16(4784), + 2652: uint16(9149), + 2653: uint16(26809), + 2654: uint16(26983), + 2655: uint16(5016), + 2656: uint16(13541), + 2657: uint16(31732), + 2658: uint16(14047), + 2659: uint16(35459), + 2660: uint16(14294), + 2661: uint16(13306), + 2662: uint16(19615), + 2663: uint16(27162), + 2664: uint16(13997), + 2665: uint16(27831), + 2666: uint16(33854), + 2667: uint16(17631), + 2668: uint16(17614), + 2669: uint16(27942), + 2670: uint16(27985), + 2671: uint16(27778), + 2672: uint16(28638), + 2673: uint16(28439), + 2674: uint16(28937), + 2675: uint16(33597), + 2676: uint16(5946), + 2677: uint16(33773), + 2678: uint16(27776), + 2679: uint16(28755), + 2680: uint16(6107), + 2681: uint16(22921), + 2682: uint16(23170), + 2683: uint16(6067), + 2684: uint16(23137), + 2685: uint16(23153), + 2686: uint16(6405), + 2687: uint16(16892), + 2688: uint16(14125), + 2689: uint16(23023), + 2690: uint16(5948), + 2691: uint16(14023), + 2692: uint16(29070), + 2693: uint16(37776), + 2694: uint16(26266), + 2695: uint16(17061), + 2696: uint16(23150), + 2697: uint16(23083), + 2698: uint16(17043), + 2699: uint16(27179), + 2700: uint16(16121), + 2701: uint16(30518), + 2702: uint16(17499), + 2703: uint16(17098), + 2704: uint16(28957), + 2705: uint16(16985), + 2706: uint16(35297), + 2707: uint16(20400), + 2708: uint16(27944), + 2709: uint16(23746), + 2710: uint16(17614), + 2711: uint16(32333), + 2712: uint16(17341), + 2713: uint16(27148), + 2714: uint16(16982), + 2715: uint16(4868), + 2716: uint16(28838), + 2717: uint16(28979), + 2718: uint16(17385), + 2719: uint16(15781), + 2720: uint16(27871), + 2721: uint16(63525), + 2722: uint16(19023), + 2723: uint16(32357), + 2724: uint16(23019), + 2725: uint16(23855), + 2726: uint16(15859), + 2727: uint16(24412), + 2728: uint16(19037), + 2729: uint16(6111), + 2730: uint16(32164), + 2731: uint16(33830), + 2732: uint16(21637), + 2733: uint16(15098), + 2734: uint16(13056), + 2735: uint16(532), + 2736: uint16(22398), + 2737: uint16(2261), + 2738: uint16(1561), + 2739: uint16(16357), + 2740: uint16(8094), + 2741: uint16(41654), + 2742: uint16(28675), + 2743: uint16(37211), + 2744: uint16(23920), + 2745: uint16(29583), + 2746: uint16(31955), + 2747: uint16(35417), + 2748: uint16(37920), + 2749: uint16(20424), + 2750: uint16(32743), + 2751: uint16(29389), + 2752: uint16(29456), + 2753: uint16(31476), + 2754: uint16(29496), + 2755: uint16(29497), + 2756: uint16(22262), + 2757: uint16(29505), + 2758: uint16(29512), + 2759: uint16(16041), + 2760: uint16(31512), + 2761: uint16(36972), + 2762: uint16(29173), + 2763: uint16(18674), + 2764: uint16(29665), + 2765: uint16(33270), + 2766: uint16(16074), + 2767: uint16(30476), + 2768: uint16(16081), + 2769: uint16(27810), + 2770: uint16(22269), + 2771: uint16(29721), + 2772: uint16(29726), + 2773: uint16(29727), + 2774: uint16(16098), + 2775: uint16(16112), + 2776: uint16(16116), + 2777: uint16(16122), + 2778: uint16(29907), + 2779: uint16(16142), + 2780: uint16(16211), + 2781: uint16(30018), + 2782: uint16(30061), + 2783: uint16(30066), + 2784: uint16(30093), + 2785: uint16(16252), + 2786: uint16(30152), + 2787: uint16(30172), + 2788: uint16(16320), + 2789: uint16(30285), + 2790: uint16(16343), + 2791: uint16(30324), + 2792: uint16(16348), + 2793: uint16(30330), + 2794: uint16(20316), + 2795: uint16(29064), + 2796: uint16(22051), + 2797: uint16(35200), + 2798: uint16(22633), + 2799: uint16(16413), + 2800: uint16(30531), + 2801: uint16(16441), + 2802: uint16(26465), + 2803: uint16(16453), + 2804: uint16(13787), + 2805: uint16(30616), + 2806: uint16(16490), + 2807: uint16(16495), + 2808: uint16(23646), + 2809: uint16(30654), + 2810: uint16(30667), + 2811: uint16(22770), + 2812: uint16(30744), + 2813: uint16(28857), + 2814: uint16(30748), + 2815: uint16(16552), + 2816: uint16(30777), + 2817: uint16(30791), + 2818: uint16(30801), + 2819: uint16(30822), + 2820: uint16(33864), + 2821: uint16(21813), + 2822: uint16(31027), + 2823: uint16(26627), + 2824: uint16(31026), + 2825: uint16(16643), + 2826: uint16(16649), + 2827: uint16(31121), + 2828: uint16(31129), + 2829: uint16(36795), + 2830: uint16(31238), + 2831: uint16(36796), + 2832: uint16(16743), + 2833: uint16(31377), + 2834: uint16(16818), + 2835: uint16(31420), + 2836: uint16(33401), + 2837: uint16(16836), + 2838: uint16(31439), + 2839: uint16(31451), + 2840: uint16(16847), + 2841: uint16(20001), + 2842: uint16(31586), + 2843: uint16(31596), + 2844: uint16(31611), + 2845: uint16(31762), + 2846: uint16(31771), + 2847: uint16(16992), + 2848: uint16(17018), + 2849: uint16(31867), + 2850: uint16(31900), + 2851: uint16(17036), + 2852: uint16(31928), + 2853: uint16(17044), + 2854: uint16(31981), + 2855: uint16(36755), + 2856: uint16(28864), + 2857: uint16(3279), + 2858: uint16(32207), + 2859: uint16(32212), + 2860: uint16(32208), + 2861: uint16(32253), + 2862: uint16(32686), + 2863: uint16(32692), + 2864: uint16(29343), + 2865: uint16(17303), + 2866: uint16(32800), + 2867: uint16(32805), + 2868: uint16(31545), + 2869: uint16(32814), + 2870: uint16(32817), + 2871: uint16(32852), + 2872: uint16(15820), + 2873: uint16(22452), + 2874: uint16(28832), + 2875: uint16(32951), + 2876: uint16(33001), + 2877: uint16(17389), + 2878: uint16(33036), + 2879: uint16(29482), + 2880: uint16(33038), + 2881: uint16(33042), + 2882: uint16(30048), + 2883: uint16(33044), + 2884: uint16(17409), + 2885: uint16(15161), + 2886: uint16(33110), + 2887: uint16(33113), + 2888: uint16(33114), + 2889: uint16(17427), + 2890: uint16(22586), + 2891: uint16(33148), + 2892: uint16(33156), + 2893: uint16(17445), + 2894: uint16(33171), + 2895: uint16(17453), + 2896: uint16(33189), + 2897: uint16(22511), + 2898: uint16(33217), + 2899: uint16(33252), + 2900: uint16(33364), + 2901: uint16(17551), + 2902: uint16(33446), + 2903: uint16(33398), + 2904: uint16(33482), + 2905: uint16(33496), + 2906: uint16(33535), + 2907: uint16(17584), + 2908: uint16(33623), + 2909: uint16(38505), + 2910: uint16(27018), + 2911: uint16(33797), + 2912: uint16(28917), + 2913: uint16(33892), + 2914: uint16(24803), + 2915: uint16(33928), + 2916: uint16(17668), + 2917: uint16(33982), + 2918: uint16(34017), + 2919: uint16(34040), + 2920: uint16(34064), + 2921: uint16(34104), + 2922: uint16(34130), + 2923: uint16(17723), + 2924: uint16(34159), + 2925: uint16(34160), + 2926: uint16(34272), + 2927: uint16(17783), + 2928: uint16(34418), + 2929: uint16(34450), + 2930: uint16(34482), + 2931: uint16(34543), + 2932: uint16(38469), + 2933: uint16(34699), + 2934: uint16(17926), + 2935: uint16(17943), + 2936: uint16(34990), + 2937: uint16(35071), + 2938: uint16(35108), + 2939: uint16(35143), + 2940: uint16(35217), + 2941: uint16(31079), + 2942: uint16(35369), + 2943: uint16(35384), + 2944: uint16(35476), + 2945: uint16(35508), + 2946: uint16(35921), + 2947: uint16(36052), + 2948: uint16(36082), + 2949: uint16(36124), + 2950: uint16(18328), + 2951: uint16(22623), + 2952: uint16(36291), + 2953: uint16(18413), + 2954: uint16(20206), + 2955: uint16(36410), + 2956: uint16(21976), + 2957: uint16(22356), + 2958: uint16(36465), + 2959: uint16(22005), + 2960: uint16(36528), + 2961: uint16(18487), + 2962: uint16(36558), + 2963: uint16(36578), + 2964: uint16(36580), + 2965: uint16(36589), + 2966: uint16(36594), + 2967: uint16(36791), + 2968: uint16(36801), + 2969: uint16(36810), + 2970: uint16(36812), + 2971: uint16(36915), + 2972: uint16(39364), + 2973: uint16(18605), + 2974: uint16(39136), + 2975: uint16(37395), + 2976: uint16(18718), + 2977: uint16(37416), + 2978: uint16(37464), + 2979: uint16(37483), + 2980: uint16(37553), + 2981: uint16(37550), + 2982: uint16(37567), + 2983: uint16(37603), + 2984: uint16(37611), + 2985: uint16(37619), + 2986: uint16(37620), + 2987: uint16(37629), + 2988: uint16(37699), + 2989: uint16(37764), + 2990: uint16(37805), + 2991: uint16(18757), + 2992: uint16(18769), + 2993: uint16(40639), + 2994: uint16(37911), + 2995: uint16(21249), + 2996: uint16(37917), + 2997: uint16(37933), + 2998: uint16(37950), + 2999: uint16(18794), + 3000: uint16(37972), + 3001: uint16(38009), + 3002: uint16(38189), + 3003: uint16(38306), + 3004: uint16(18855), + 3005: uint16(38388), + 3006: uint16(38451), + 3007: uint16(18917), + 3008: uint16(26528), + 3009: uint16(18980), + 3010: uint16(38720), + 3011: uint16(18997), + 3012: uint16(38834), + 3013: uint16(38850), + 3014: uint16(22100), + 3015: uint16(19172), + 3016: uint16(24808), + 3017: uint16(39097), + 3018: uint16(19225), + 3019: uint16(39153), + 3020: uint16(22596), + 3021: uint16(39182), + 3022: uint16(39193), + 3023: uint16(20916), + 3024: uint16(39196), + 3025: uint16(39223), + 3026: uint16(39234), + 3027: uint16(39261), + 3028: uint16(39266), + 3029: uint16(19312), + 3030: uint16(39365), + 3031: uint16(19357), + 3032: uint16(39484), + 3033: uint16(39695), + 3034: uint16(31363), + 3035: uint16(39785), + 3036: uint16(39809), + 3037: uint16(39901), + 3038: uint16(39921), + 3039: uint16(39924), + 3040: uint16(19565), + 3041: uint16(39968), + 3042: uint16(14191), + 3043: uint16(7106), + 3044: uint16(40265), + 3045: uint16(39994), + 3046: uint16(40702), + 3047: uint16(22096), + 3048: uint16(40339), + 3049: uint16(40381), + 3050: uint16(40384), + 3051: uint16(40444), + 3052: uint16(38134), + 3053: uint16(36790), + 3054: uint16(40571), + 3055: uint16(40620), + 3056: uint16(40625), + 3057: uint16(40637), + 3058: uint16(40646), + 3059: uint16(38108), + 3060: uint16(40674), + 3061: uint16(40689), + 3062: uint16(40696), + 3063: uint16(31432), + 3064: uint16(40772), + 3065: uint16(148), + 3066: uint16(695), + 3067: uint16(928), + 3068: uint16(26906), + 3069: uint16(38083), + 3070: uint16(22956), + 3071: uint16(1239), + 3072: uint16(22592), + 3073: uint16(38081), + 3074: uint16(14265), + 3075: uint16(1493), + 3076: uint16(1557), + 3077: uint16(1654), + 3078: uint16(5818), + 3079: uint16(22359), + 3080: uint16(29043), + 3081: uint16(2754), + 3082: uint16(2765), + 3083: uint16(3007), + 3084: uint16(21610), + 3085: uint16(63547), + 3086: uint16(3019), + 3087: uint16(21662), + 3088: uint16(3067), + 3089: uint16(3131), + 3090: uint16(3155), + 3091: uint16(3173), + 3092: uint16(3196), + 3093: uint16(24807), + 3094: uint16(3213), + 3095: uint16(22138), + 3096: uint16(3253), + 3097: uint16(3293), + 3098: uint16(3309), + 3099: uint16(3439), + 3100: uint16(3506), + 3101: uint16(3528), + 3102: uint16(26965), + 3103: uint16(39983), + 3104: uint16(34725), + 3105: uint16(3588), + 3106: uint16(3598), + 3107: uint16(3799), + 3108: uint16(3984), + 3109: uint16(3885), + 3110: uint16(3699), + 3111: uint16(23584), + 3112: uint16(4028), + 3113: uint16(24075), + 3114: uint16(4188), + 3115: uint16(4175), + 3116: uint16(4214), + 3117: uint16(26398), + 3118: uint16(4219), + 3119: uint16(4232), + 3120: uint16(4246), + 3121: uint16(13895), + 3122: uint16(4287), + 3123: uint16(4307), + 3124: uint16(4399), + 3125: uint16(4411), + 3126: uint16(21348), + 3127: uint16(33965), + 3128: uint16(4835), + 3129: uint16(4981), + 3130: uint16(4918), + 3131: uint16(35713), + 3132: uint16(5495), + 3133: uint16(5657), + 3134: uint16(6083), + 3135: uint16(6087), + 3136: uint16(20088), + 3137: uint16(28859), + 3138: uint16(6189), + 3139: uint16(6506), + 3140: uint16(6701), + 3141: uint16(6725), + 3142: uint16(7210), + 3143: uint16(7280), + 3144: uint16(7340), + 3145: uint16(7880), + 3146: uint16(25283), + 3147: uint16(7893), + 3148: uint16(7957), + 3149: uint16(29080), + 3150: uint16(26709), + 3151: uint16(8261), + 3152: uint16(27113), + 3153: uint16(14024), + 3154: uint16(8828), + 3155: uint16(9175), + 3156: uint16(9210), + 3157: uint16(10026), + 3158: uint16(10353), + 3159: uint16(10575), + 3160: uint16(33533), + 3161: uint16(10599), + 3162: uint16(10643), + 3163: uint16(10965), + 3164: uint16(35237), + 3165: uint16(10984), + 3166: uint16(36768), + 3167: uint16(11022), + 3168: uint16(38840), + 3169: uint16(11071), + 3170: uint16(38983), + 3171: uint16(39613), + 3172: uint16(11340), + 3174: uint16(11400), + 3175: uint16(11447), + 3176: uint16(23528), + 3177: uint16(11528), + 3178: uint16(11538), + 3179: uint16(11703), + 3180: uint16(11669), + 3181: uint16(11842), + 3182: uint16(12148), + 3183: uint16(12236), + 3184: uint16(12339), + 3185: uint16(12390), + 3186: uint16(13087), + 3187: uint16(13278), + 3188: uint16(24497), + 3189: uint16(26184), + 3190: uint16(26303), + 3191: uint16(31353), + 3192: uint16(13671), + 3193: uint16(13811), + 3195: uint16(18874), + 3197: uint16(13850), + 3198: uint16(14102), + 3200: uint16(838), + 3201: uint16(22709), + 3202: uint16(26382), + 3203: uint16(26904), + 3204: uint16(15015), + 3205: uint16(30295), + 3206: uint16(24546), + 3207: uint16(15889), + 3208: uint16(16057), + 3209: uint16(30206), + 3210: uint16(8346), + 3211: uint16(18640), + 3212: uint16(19128), + 3213: uint16(16665), + 3214: uint16(35482), + 3215: uint16(17134), + 3216: uint16(17165), + 3217: uint16(16443), + 3218: uint16(17204), + 3219: uint16(17302), + 3220: uint16(19013), + 3221: uint16(1482), + 3222: uint16(20946), + 3223: uint16(1553), + 3224: uint16(22943), + 3225: uint16(7848), + 3226: uint16(15294), + 3227: uint16(15615), + 3228: uint16(17412), + 3229: uint16(17622), + 3230: uint16(22408), + 3231: uint16(18036), + 3232: uint16(14747), + 3233: uint16(18223), + 3234: uint16(34280), + 3235: uint16(39369), + 3236: uint16(14178), + 3237: uint16(8643), + 3238: uint16(35678), + 3239: uint16(35662), + 3241: uint16(18450), + 3242: uint16(18683), + 3243: uint16(18965), + 3244: uint16(29193), + 3245: uint16(19136), + 3246: uint16(3192), + 3247: uint16(22885), + 3248: uint16(20133), + 3249: uint16(20358), + 3250: uint16(1913), + 3251: uint16(36570), + 3252: uint16(20524), + 3253: uint16(21135), + 3254: uint16(22335), + 3255: uint16(29041), + 3256: uint16(21145), + 3257: uint16(21529), + 3258: uint16(16202), + 3259: uint16(19111), + 3260: uint16(21948), + 3261: uint16(21574), + 3262: uint16(21614), + 3263: uint16(27474), + 3265: uint16(13427), + 3266: uint16(21823), + 3267: uint16(30258), + 3268: uint16(21854), + 3269: uint16(18200), + 3270: uint16(21858), + 3271: uint16(21862), + 3272: uint16(22471), + 3273: uint16(18751), + 3274: uint16(22621), + 3275: uint16(20582), + 3276: uint16(13563), + 3277: uint16(13260), + 3279: uint16(22787), + 3280: uint16(18300), + 3281: uint16(35144), + 3282: uint16(23214), + 3283: uint16(23433), + 3284: uint16(23558), + 3285: uint16(7568), + 3286: uint16(22433), + 3287: uint16(29009), + 3289: uint16(24834), + 3290: uint16(31762), + 3291: uint16(36950), + 3292: uint16(25010), + 3293: uint16(20378), + 3294: uint16(35682), + 3295: uint16(25602), + 3296: uint16(25674), + 3297: uint16(23899), + 3298: uint16(27639), + 3300: uint16(25732), + 3301: uint16(6428), + 3302: uint16(35562), + 3303: uint16(18934), + 3304: uint16(25736), + 3305: uint16(16367), + 3306: uint16(25874), + 3307: uint16(19392), + 3308: uint16(26047), + 3309: uint16(26293), + 3310: uint16(10011), + 3311: uint16(37989), + 3312: uint16(22497), + 3313: uint16(24981), + 3314: uint16(23079), + 3315: uint16(63693), + 3317: uint16(22201), + 3318: uint16(17697), + 3319: uint16(26364), + 3320: uint16(20074), + 3321: uint16(18740), + 3322: uint16(38486), + 3323: uint16(28047), + 3324: uint16(27837), + 3325: uint16(13848), + 3326: uint16(35191), + 3327: uint16(26521), + 3328: uint16(26734), + 3329: uint16(25617), + 3330: uint16(26718), + 3332: uint16(26823), + 3333: uint16(31554), + 3334: uint16(37056), + 3335: uint16(2577), + 3336: uint16(26918), + 3338: uint16(26937), + 3339: uint16(31301), + 3341: uint16(27130), + 3342: uint16(39462), + 3343: uint16(27181), + 3344: uint16(13919), + 3345: uint16(25705), + 3346: uint16(33), + 3347: uint16(31107), + 3348: uint16(27188), + 3349: uint16(27483), + 3350: uint16(23852), + 3351: uint16(13593), + 3353: uint16(27549), + 3354: uint16(18128), + 3355: uint16(27812), + 3356: uint16(30011), + 3357: uint16(34917), + 3358: uint16(28078), + 3359: uint16(22710), + 3360: uint16(14108), + 3361: uint16(9613), + 3362: uint16(28747), + 3363: uint16(29133), + 3364: uint16(15444), + 3365: uint16(29312), + 3366: uint16(29317), + 3367: uint16(37505), + 3368: uint16(8570), + 3369: uint16(29323), + 3370: uint16(37680), + 3371: uint16(29414), + 3372: uint16(18896), + 3373: uint16(27705), + 3374: uint16(38047), + 3375: uint16(29776), + 3376: uint16(3832), + 3377: uint16(34855), + 3378: uint16(35061), + 3379: uint16(10534), + 3380: uint16(33907), + 3381: uint16(6065), + 3382: uint16(28344), + 3383: uint16(18986), + 3384: uint16(6176), + 3385: uint16(14756), + 3386: uint16(14009), + 3389: uint16(17727), + 3390: uint16(26294), + 3391: uint16(40109), + 3392: uint16(39076), + 3393: uint16(35139), + 3394: uint16(30668), + 3395: uint16(30808), + 3396: uint16(22230), + 3397: uint16(16607), + 3398: uint16(5642), + 3399: uint16(14753), + 3400: uint16(14127), + 3401: uint16(33000), + 3402: uint16(5061), + 3403: uint16(29101), + 3404: uint16(33638), + 3405: uint16(31197), + 3406: uint16(37288), + 3408: uint16(19639), + 3409: uint16(28847), + 3410: uint16(35243), + 3411: uint16(31229), + 3412: uint16(31242), + 3413: uint16(31499), + 3414: uint16(32102), + 3415: uint16(16762), + 3416: uint16(31555), + 3417: uint16(31102), + 3418: uint16(32777), + 3419: uint16(28597), + 3420: uint16(41695), + 3421: uint16(27139), + 3422: uint16(33560), + 3423: uint16(21410), + 3424: uint16(28167), + 3425: uint16(37823), + 3426: uint16(26678), + 3427: uint16(38749), + 3428: uint16(33135), + 3429: uint16(32803), + 3430: uint16(27061), + 3431: uint16(5101), + 3432: uint16(12847), + 3433: uint16(32840), + 3434: uint16(23941), + 3435: uint16(35888), + 3436: uint16(32899), + 3437: uint16(22293), + 3438: uint16(38947), + 3439: uint16(35145), + 3440: uint16(23979), + 3441: uint16(18824), + 3442: uint16(26046), + 3443: uint16(27093), + 3444: uint16(21458), + 3445: uint16(19109), + 3446: uint16(16257), + 3447: uint16(15377), + 3448: uint16(26422), + 3449: uint16(32912), + 3450: uint16(33012), + 3451: uint16(33070), + 3452: uint16(8097), + 3453: uint16(33103), + 3454: uint16(33161), + 3455: uint16(33199), + 3456: uint16(33306), + 3457: uint16(33542), + 3458: uint16(33583), + 3459: uint16(33674), + 3460: uint16(13770), + 3461: uint16(33896), + 3462: uint16(34474), + 3463: uint16(18682), + 3464: uint16(25574), + 3465: uint16(35158), + 3466: uint16(30728), + 3467: uint16(37461), + 3468: uint16(35256), + 3469: uint16(17394), + 3470: uint16(35303), + 3471: uint16(17375), + 3472: uint16(35304), + 3473: uint16(35654), + 3474: uint16(35796), + 3475: uint16(23032), + 3476: uint16(35849), + 3478: uint16(36805), + 3479: uint16(37100), + 3481: uint16(37136), + 3482: uint16(37180), + 3483: uint16(15863), + 3484: uint16(37214), + 3485: uint16(19146), + 3486: uint16(36816), + 3487: uint16(29327), + 3488: uint16(22155), + 3489: uint16(38119), + 3490: uint16(38377), + 3491: uint16(38320), + 3492: uint16(38328), + 3493: uint16(38706), + 3494: uint16(39121), + 3495: uint16(39241), + 3496: uint16(39274), + 3497: uint16(39363), + 3498: uint16(39464), + 3499: uint16(39694), + 3500: uint16(40282), + 3501: uint16(40347), + 3502: uint16(32415), + 3503: uint16(40696), + 3504: uint16(40739), + 3505: uint16(19620), + 3506: uint16(38215), + 3507: uint16(41619), + 3508: uint16(29090), + 3509: uint16(41727), + 3510: uint16(19857), + 3511: uint16(36882), + 3512: uint16(42443), + 3513: uint16(19868), + 3514: uint16(3228), + 3515: uint16(36798), + 3516: uint16(21953), + 3517: uint16(36794), + 3518: uint16(9392), + 3519: uint16(36793), + 3520: uint16(19091), + 3521: uint16(17673), + 3522: uint16(32383), + 3523: uint16(28502), + 3524: uint16(27313), + 3525: uint16(20202), + 3526: uint16(13540), + 3527: uint16(35628), + 3528: uint16(30877), + 3529: uint16(14138), + 3530: uint16(36480), + 3531: uint16(6133), + 3532: uint16(32804), + 3533: uint16(35692), + 3534: uint16(35737), + 3535: uint16(31294), + 3536: uint16(26287), + 3537: uint16(15851), + 3538: uint16(30293), + 3539: uint16(15543), + 3540: uint16(22069), + 3541: uint16(22870), + 3542: uint16(20122), + 3543: uint16(24193), + 3544: uint16(25176), + 3545: uint16(22207), + 3546: uint16(3693), + 3547: uint16(36366), + 3548: uint16(23405), + 3549: uint16(16008), + 3550: uint16(19614), + 3551: uint16(25566), + 3553: uint16(6134), + 3554: uint16(6267), + 3555: uint16(25904), + 3556: uint16(22061), + 3557: uint16(23626), + 3558: uint16(21530), + 3559: uint16(21265), + 3560: uint16(15814), + 3561: uint16(40344), + 3562: uint16(19581), + 3563: uint16(22050), + 3564: uint16(22046), + 3565: uint16(32585), + 3566: uint16(24280), + 3567: uint16(22901), + 3568: uint16(15680), + 3569: uint16(34672), + 3570: uint16(19996), + 3571: uint16(4074), + 3572: uint16(3401), + 3573: uint16(14010), + 3574: uint16(33047), + 3575: uint16(40286), + 3576: uint16(36120), + 3577: uint16(30267), + 3578: uint16(40005), + 3579: uint16(30286), + 3580: uint16(30649), + 3581: uint16(37701), + 3582: uint16(21554), + 3583: uint16(33096), + 3584: uint16(33527), + 3585: uint16(22053), + 3586: uint16(33074), + 3587: uint16(33816), + 3588: uint16(32957), + 3589: uint16(21994), + 3590: uint16(31074), + 3591: uint16(22083), + 3592: uint16(21526), + 3593: uint16(3741), + 3594: uint16(13774), + 3595: uint16(22021), + 3596: uint16(22001), + 3597: uint16(26353), + 3598: uint16(33506), + 3599: uint16(13869), + 3600: uint16(30004), + 3601: uint16(22000), + 3602: uint16(21946), + 3603: uint16(21655), + 3604: uint16(21874), + 3605: uint16(3137), + 3606: uint16(3222), + 3607: uint16(24272), + 3608: uint16(20808), + 3609: uint16(3702), + 3610: uint16(11362), + 3611: uint16(3746), + 3612: uint16(40619), + 3613: uint16(32090), + 3614: uint16(21982), + 3615: uint16(4213), + 3616: uint16(25245), + 3617: uint16(38765), + 3618: uint16(21652), + 3619: uint16(36045), + 3620: uint16(29174), + 3621: uint16(37238), + 3622: uint16(25596), + 3623: uint16(25529), + 3624: uint16(25598), + 3625: uint16(21865), + 3626: uint16(11075), + 3627: uint16(40050), + 3628: uint16(11955), + 3629: uint16(20890), + 3630: uint16(13535), + 3631: uint16(3495), + 3632: uint16(20903), + 3633: uint16(21581), + 3634: uint16(21790), + 3635: uint16(21779), + 3636: uint16(30310), + 3637: uint16(36397), + 3638: uint16(26762), + 3639: uint16(30129), + 3640: uint16(32950), + 3641: uint16(34820), + 3642: uint16(34694), + 3643: uint16(35015), + 3644: uint16(33206), + 3645: uint16(33820), + 3646: uint16(4289), + 3647: uint16(17644), + 3648: uint16(29444), + 3649: uint16(18182), + 3650: uint16(23440), + 3651: uint16(33547), + 3652: uint16(26771), + 3653: uint16(22139), + 3654: uint16(9972), + 3655: uint16(32047), + 3656: uint16(16803), + 3657: uint16(32115), + 3658: uint16(28368), + 3659: uint16(29366), + 3660: uint16(37232), + 3661: uint16(4569), + 3662: uint16(37384), + 3663: uint16(15612), + 3664: uint16(42665), + 3665: uint16(3756), + 3666: uint16(3833), + 3667: uint16(29286), + 3668: uint16(7330), + 3669: uint16(18254), + 3670: uint16(20418), + 3671: uint16(32761), + 3672: uint16(4075), + 3673: uint16(16634), + 3674: uint16(40029), + 3675: uint16(25887), + 3676: uint16(11680), + 3677: uint16(18675), + 3678: uint16(18400), + 3679: uint16(40316), + 3680: uint16(4076), + 3681: uint16(3594), + 3683: uint16(30115), + 3684: uint16(4077), + 3686: uint16(24648), + 3687: uint16(4487), + 3688: uint16(29091), + 3689: uint16(32398), + 3690: uint16(40272), + 3691: uint16(19994), + 3692: uint16(19972), + 3693: uint16(13687), + 3694: uint16(23309), + 3695: uint16(27826), + 3696: uint16(21351), + 3697: uint16(13996), + 3698: uint16(14812), + 3699: uint16(21373), + 3700: uint16(13989), + 3701: uint16(17944), + 3702: uint16(22682), + 3703: uint16(19310), + 3704: uint16(33325), + 3705: uint16(21579), + 3706: uint16(22442), + 3707: uint16(23189), + 3708: uint16(2425), + 3710: uint16(14930), + 3711: uint16(9317), + 3712: uint16(29556), + 3713: uint16(40620), + 3714: uint16(19721), + 3715: uint16(39917), + 3716: uint16(15614), + 3717: uint16(40752), + 3718: uint16(19547), + 3719: uint16(20393), + 3720: uint16(38302), + 3721: uint16(40926), + 3722: uint16(33884), + 3723: uint16(15798), + 3724: uint16(29362), + 3725: uint16(26547), + 3726: uint16(14112), + 3727: uint16(25390), + 3728: uint16(32037), + 3729: uint16(16119), + 3730: uint16(15916), + 3731: uint16(14890), + 3732: uint16(36872), + 3733: uint16(21196), + 3734: uint16(15988), + 3735: uint16(13946), + 3736: uint16(17897), + 3737: uint16(1166), + 3738: uint16(30272), + 3739: uint16(23280), + 3740: uint16(3766), + 3741: uint16(30842), + 3742: uint16(32558), + 3743: uint16(22695), + 3744: uint16(16575), + 3745: uint16(22140), + 3746: uint16(39819), + 3747: uint16(23924), + 3748: uint16(30292), + 3749: uint16(42036), + 3750: uint16(40581), + 3751: uint16(19681), + 3753: uint16(14331), + 3754: uint16(24857), + 3755: uint16(12506), + 3756: uint16(17394), + 3758: uint16(22109), + 3759: uint16(4777), + 3760: uint16(22439), + 3761: uint16(18787), + 3762: uint16(40454), + 3763: uint16(21044), + 3764: uint16(28846), + 3765: uint16(13741), + 3767: uint16(40316), + 3768: uint16(31830), + 3769: uint16(39737), + 3770: uint16(22494), + 3771: uint16(5996), + 3772: uint16(23635), + 3773: uint16(25811), + 3774: uint16(38096), + 3775: uint16(25397), + 3776: uint16(29028), + 3777: uint16(34477), + 3778: uint16(3368), + 3779: uint16(27938), + 3780: uint16(19170), + 3781: uint16(3441), + 3783: uint16(20990), + 3784: uint16(7951), + 3785: uint16(23950), + 3786: uint16(38659), + 3787: uint16(7633), + 3788: uint16(40577), + 3789: uint16(36940), + 3790: uint16(31519), + 3791: uint16(39682), + 3792: uint16(23761), + 3793: uint16(31651), + 3794: uint16(25192), + 3795: uint16(25397), + 3796: uint16(39679), + 3797: uint16(31695), + 3798: uint16(39722), + 3799: uint16(31870), + 3801: uint16(31810), + 3802: uint16(31878), + 3803: uint16(39957), + 3804: uint16(31740), + 3805: uint16(39689), + 3807: uint16(39963), + 3808: uint16(18750), + 3809: uint16(40794), + 3810: uint16(21875), + 3811: uint16(23491), + 3812: uint16(20477), + 3813: uint16(40600), + 3814: uint16(20466), + 3815: uint16(21088), + 3816: uint16(15878), + 3817: uint16(21201), + 3818: uint16(22375), + 3819: uint16(20566), + 3820: uint16(22967), + 3821: uint16(24082), + 3822: uint16(38856), + 3823: uint16(40363), + 3824: uint16(36700), + 3825: uint16(21609), + 3826: uint16(38836), + 3827: uint16(39232), + 3828: uint16(38842), + 3829: uint16(21292), + 3830: uint16(24880), + 3831: uint16(26924), + 3832: uint16(21466), + 3833: uint16(39946), + 3834: uint16(40194), + 3835: uint16(19515), + 3836: uint16(38465), + 3837: uint16(27008), + 3838: uint16(20646), + 3839: uint16(30022), + 3840: uint16(5997), + 3841: uint16(39386), + 3842: uint16(21107), + 3844: uint16(37209), + 3845: uint16(38529), + 3846: uint16(37212), + 3848: uint16(37201), + 3849: uint16(36503), + 3850: uint16(25471), + 3851: uint16(27939), + 3852: uint16(27338), + 3853: uint16(22033), + 3854: uint16(37262), + 3855: uint16(30074), + 3856: uint16(25221), + 3857: uint16(1020), + 3858: uint16(29519), + 3859: uint16(31856), + 3860: uint16(23585), + 3861: uint16(15613), + 3863: uint16(18713), + 3864: uint16(30422), + 3865: uint16(39837), + 3866: uint16(20010), + 3867: uint16(3284), + 3868: uint16(33726), + 3869: uint16(34882), + 3871: uint16(23626), + 3872: uint16(27072), + 3874: uint16(22394), + 3875: uint16(21023), + 3876: uint16(24053), + 3877: uint16(20174), + 3878: uint16(27697), + 3879: uint16(498), + 3880: uint16(20281), + 3881: uint16(21660), + 3882: uint16(21722), + 3883: uint16(21146), + 3884: uint16(36226), + 3885: uint16(13822), + 3887: uint16(13811), + 3889: uint16(27474), + 3890: uint16(37244), + 3891: uint16(40869), + 3892: uint16(39831), + 3893: uint16(38958), + 3894: uint16(39092), + 3895: uint16(39610), + 3896: uint16(40616), + 3897: uint16(40580), + 3898: uint16(29050), + 3899: uint16(31508), + 3901: uint16(27642), + 3902: uint16(34840), + 3903: uint16(32632), + 3905: uint16(22048), + 3906: uint16(42570), + 3907: uint16(36471), + 3908: uint16(40787), + 3910: uint16(36308), + 3911: uint16(36431), + 3912: uint16(40476), + 3913: uint16(36353), + 3914: uint16(25218), + 3915: uint16(33661), + 3916: uint16(36392), + 3917: uint16(36469), + 3918: uint16(31443), + 3919: uint16(19063), + 3920: uint16(31294), + 3921: uint16(30936), + 3922: uint16(27882), + 3923: uint16(35431), + 3924: uint16(30215), + 3925: uint16(35418), + 3926: uint16(40742), + 3927: uint16(27854), + 3928: uint16(34774), + 3929: uint16(30147), + 3930: uint16(41650), + 3931: uint16(30803), + 3932: uint16(63552), + 3933: uint16(36108), + 3934: uint16(29410), + 3935: uint16(29553), + 3936: uint16(35629), + 3937: uint16(29442), + 3938: uint16(29937), + 3939: uint16(36075), + 3940: uint16(19131), + 3941: uint16(34351), + 3942: uint16(24506), + 3943: uint16(34976), + 3944: uint16(17591), + 3946: uint16(6203), + 3947: uint16(28165), + 3949: uint16(35454), + 3950: uint16(9499), + 3952: uint16(24829), + 3953: uint16(30311), + 3954: uint16(39639), + 3955: uint16(40260), + 3956: uint16(37742), + 3957: uint16(39823), + 3958: uint16(34805), + 3961: uint16(36087), + 3962: uint16(29484), + 3963: uint16(38689), + 3964: uint16(39856), + 3965: uint16(13782), + 3966: uint16(29362), + 3967: uint16(19463), + 3968: uint16(31825), + 3969: uint16(39242), + 3970: uint16(24921), + 3971: uint16(24921), + 3972: uint16(19460), + 3973: uint16(40598), + 3974: uint16(24957), + 3976: uint16(22367), + 3977: uint16(24943), + 3978: uint16(25254), + 3979: uint16(25145), + 3981: uint16(14940), + 3982: uint16(25058), + 3983: uint16(21418), + 3984: uint16(13301), + 3985: uint16(25444), + 3986: uint16(26626), + 3987: uint16(13778), + 3988: uint16(23895), + 3989: uint16(35778), + 3990: uint16(36826), + 3991: uint16(36409), + 3993: uint16(20697), + 3994: uint16(7494), + 3995: uint16(30982), + 3996: uint16(21298), + 3997: uint16(38456), + 3998: uint16(3899), + 3999: uint16(16485), + 4001: uint16(30718), + 4003: uint16(31938), + 4004: uint16(24346), + 4005: uint16(31962), + 4006: uint16(31277), + 4007: uint16(32870), + 4008: uint16(32867), + 4009: uint16(32077), + 4010: uint16(29957), + 4011: uint16(29938), + 4012: uint16(35220), + 4013: uint16(33306), + 4014: uint16(26380), + 4015: uint16(32866), + 4016: uint16(29830), + 4017: uint16(32859), + 4018: uint16(29936), + 4019: uint16(33027), + 4020: uint16(30500), + 4021: uint16(35209), + 4022: uint16(26572), + 4023: uint16(30035), + 4024: uint16(28369), + 4025: uint16(34729), + 4026: uint16(34766), + 4027: uint16(33224), + 4028: uint16(34700), + 4029: uint16(35401), + 4030: uint16(36013), + 4031: uint16(35651), + 4032: uint16(30507), + 4033: uint16(29944), + 4034: uint16(34010), + 4035: uint16(13877), + 4036: uint16(27058), + 4037: uint16(36262), + 4039: uint16(35241), + 4041: uint16(28089), + 4042: uint16(34753), + 4043: uint16(16401), + 4044: uint16(29927), + 4045: uint16(15835), + 4046: uint16(29046), + 4047: uint16(24740), + 4048: uint16(24988), + 4049: uint16(15569), + 4051: uint16(24695), + 4053: uint16(32625), + 4054: uint16(35629), + 4056: uint16(24809), + 4057: uint16(19326), + 4058: uint16(21024), + 4059: uint16(15384), + 4060: uint16(15559), + 4061: uint16(24279), + 4062: uint16(30294), + 4063: uint16(21809), + 4064: uint16(6468), + 4065: uint16(4862), + 4066: uint16(39171), + 4067: uint16(28124), + 4068: uint16(28845), + 4069: uint16(23745), + 4070: uint16(25005), + 4071: uint16(35343), + 4072: uint16(13943), + 4073: uint16(238), + 4074: uint16(26694), + 4075: uint16(20238), + 4076: uint16(17762), + 4077: uint16(23327), + 4078: uint16(25420), + 4079: uint16(40784), + 4080: uint16(40614), + 4081: uint16(25195), + 4082: uint16(1351), + 4083: uint16(37595), + 4084: uint16(1503), + 4085: uint16(16325), + 4086: uint16(34124), + 4087: uint16(17077), + 4088: uint16(29679), + 4089: uint16(20917), + 4090: uint16(13897), + 4091: uint16(18754), + 4092: uint16(35300), + 4093: uint16(37700), + 4094: uint16(6619), + 4095: uint16(33518), + 4096: uint16(15560), + 4097: uint16(30780), + 4098: uint16(26436), + 4099: uint16(25311), + 4100: uint16(18739), + 4101: uint16(35242), + 4102: uint16(672), + 4103: uint16(27571), + 4104: uint16(4869), + 4105: uint16(20395), + 4106: uint16(9453), + 4107: uint16(20488), + 4108: uint16(27945), + 4109: uint16(31364), + 4110: uint16(13824), + 4111: uint16(19121), + 4112: uint16(9491), + 4114: uint16(894), + 4115: uint16(24484), + 4116: uint16(896), + 4117: uint16(839), + 4118: uint16(28379), + 4119: uint16(1055), + 4121: uint16(20737), + 4122: uint16(13434), + 4123: uint16(20750), + 4124: uint16(39020), + 4125: uint16(14147), + 4126: uint16(33814), + 4127: uint16(18852), + 4128: uint16(1159), + 4129: uint16(20832), + 4130: uint16(13236), + 4131: uint16(20842), + 4132: uint16(3071), + 4133: uint16(8444), + 4134: uint16(741), + 4135: uint16(9520), + 4136: uint16(1422), + 4137: uint16(12851), + 4138: uint16(6531), + 4139: uint16(23426), + 4140: uint16(34685), + 4141: uint16(1459), + 4142: uint16(15513), + 4143: uint16(20914), + 4144: uint16(20920), + 4145: uint16(40244), + 4146: uint16(20937), + 4147: uint16(20943), + 4148: uint16(20945), + 4149: uint16(15580), + 4150: uint16(20947), + 4151: uint16(19110), + 4152: uint16(20915), + 4153: uint16(20962), + 4154: uint16(21314), + 4155: uint16(20973), + 4156: uint16(33741), + 4157: uint16(26942), + 4158: uint16(14125), + 4159: uint16(24443), + 4160: uint16(21003), + 4161: uint16(21030), + 4162: uint16(21052), + 4163: uint16(21173), + 4164: uint16(21079), + 4165: uint16(21140), + 4166: uint16(21177), + 4167: uint16(21189), + 4168: uint16(31765), + 4169: uint16(34114), + 4170: uint16(21216), + 4171: uint16(34317), + 4172: uint16(27411), + 4174: uint16(35550), + 4175: uint16(21833), + 4176: uint16(28377), + 4177: uint16(16256), + 4178: uint16(2388), + 4179: uint16(16364), + 4180: uint16(21299), + 4182: uint16(3042), + 4183: uint16(27851), + 4184: uint16(5926), + 4185: uint16(26651), + 4186: uint16(29653), + 4187: uint16(24650), + 4188: uint16(16042), + 4189: uint16(14540), + 4190: uint16(5864), + 4191: uint16(29149), + 4192: uint16(17570), + 4193: uint16(21357), + 4194: uint16(21364), + 4195: uint16(34475), + 4196: uint16(21374), + 4198: uint16(5526), + 4199: uint16(5651), + 4200: uint16(30694), + 4201: uint16(21395), + 4202: uint16(35483), + 4203: uint16(21408), + 4204: uint16(21419), + 4205: uint16(21422), + 4206: uint16(29607), + 4207: uint16(22386), + 4208: uint16(16217), + 4209: uint16(29596), + 4210: uint16(21441), + 4211: uint16(21445), + 4212: uint16(27721), + 4213: uint16(20041), + 4214: uint16(22526), + 4215: uint16(21465), + 4216: uint16(15019), + 4217: uint16(2959), + 4218: uint16(21472), + 4219: uint16(16363), + 4220: uint16(11683), + 4221: uint16(21494), + 4222: uint16(3191), + 4223: uint16(21523), + 4224: uint16(28793), + 4225: uint16(21803), + 4226: uint16(26199), + 4227: uint16(27995), + 4228: uint16(21613), + 4229: uint16(27475), + 4230: uint16(3444), + 4231: uint16(21853), + 4232: uint16(21647), + 4233: uint16(21668), + 4234: uint16(18342), + 4235: uint16(5901), + 4236: uint16(3805), + 4237: uint16(15796), + 4238: uint16(3405), + 4239: uint16(35260), + 4240: uint16(9880), + 4241: uint16(21831), + 4242: uint16(19693), + 4243: uint16(21551), + 4244: uint16(29719), + 4245: uint16(21894), + 4246: uint16(21929), + 4248: uint16(6359), + 4249: uint16(16442), + 4250: uint16(17746), + 4251: uint16(17461), + 4252: uint16(26291), + 4253: uint16(4276), + 4254: uint16(22071), + 4255: uint16(26317), + 4256: uint16(12938), + 4257: uint16(26276), + 4258: uint16(26285), + 4259: uint16(22093), + 4260: uint16(22095), + 4261: uint16(30961), + 4262: uint16(22257), + 4263: uint16(38791), + 4264: uint16(21502), + 4265: uint16(22272), + 4266: uint16(22255), + 4267: uint16(22253), + 4268: uint16(35686), + 4269: uint16(13859), + 4270: uint16(4687), + 4271: uint16(22342), + 4272: uint16(16805), + 4273: uint16(27758), + 4274: uint16(28811), + 4275: uint16(22338), + 4276: uint16(14001), + 4277: uint16(27774), + 4278: uint16(22502), + 4279: uint16(5142), + 4280: uint16(22531), + 4281: uint16(5204), + 4282: uint16(17251), + 4283: uint16(22566), + 4284: uint16(19445), + 4285: uint16(22620), + 4286: uint16(22698), + 4287: uint16(13665), + 4288: uint16(22752), + 4289: uint16(22748), + 4290: uint16(4668), + 4291: uint16(22779), + 4292: uint16(23551), + 4293: uint16(22339), + 4294: uint16(41296), + 4295: uint16(17016), + 4296: uint16(37843), + 4297: uint16(13729), + 4298: uint16(22815), + 4299: uint16(26790), + 4300: uint16(14019), + 4301: uint16(28249), + 4302: uint16(5694), + 4303: uint16(23076), + 4304: uint16(21843), + 4305: uint16(5778), + 4306: uint16(34053), + 4307: uint16(22985), + 4308: uint16(3406), + 4309: uint16(27777), + 4310: uint16(27946), + 4311: uint16(6108), + 4312: uint16(23001), + 4313: uint16(6139), + 4314: uint16(6066), + 4315: uint16(28070), + 4316: uint16(28017), + 4317: uint16(6184), + 4318: uint16(5845), + 4319: uint16(23033), + 4320: uint16(28229), + 4321: uint16(23211), + 4322: uint16(23139), + 4323: uint16(14054), + 4324: uint16(18857), + 4326: uint16(14088), + 4327: uint16(23190), + 4328: uint16(29797), + 4329: uint16(23251), + 4330: uint16(28577), + 4331: uint16(9556), + 4332: uint16(15749), + 4333: uint16(6417), + 4334: uint16(14130), + 4335: uint16(5816), + 4336: uint16(24195), + 4337: uint16(21200), + 4338: uint16(23414), + 4339: uint16(25992), + 4340: uint16(23420), + 4341: uint16(31246), + 4342: uint16(16388), + 4343: uint16(18525), + 4344: uint16(516), + 4345: uint16(23509), + 4346: uint16(24928), + 4347: uint16(6708), + 4348: uint16(22988), + 4349: uint16(1445), + 4350: uint16(23539), + 4351: uint16(23453), + 4352: uint16(19728), + 4353: uint16(23557), + 4354: uint16(6980), + 4355: uint16(23571), + 4356: uint16(29646), + 4357: uint16(23572), + 4358: uint16(7333), + 4359: uint16(27432), + 4360: uint16(23625), + 4361: uint16(18653), + 4362: uint16(23685), + 4363: uint16(23785), + 4364: uint16(23791), + 4365: uint16(23947), + 4366: uint16(7673), + 4367: uint16(7735), + 4368: uint16(23824), + 4369: uint16(23832), + 4370: uint16(23878), + 4371: uint16(7844), + 4372: uint16(23738), + 4373: uint16(24023), + 4374: uint16(33532), + 4375: uint16(14381), + 4376: uint16(18689), + 4377: uint16(8265), + 4378: uint16(8563), + 4379: uint16(33415), + 4380: uint16(14390), + 4381: uint16(15298), + 4382: uint16(24110), + 4383: uint16(27274), + 4385: uint16(24186), + 4386: uint16(17596), + 4387: uint16(3283), + 4388: uint16(21414), + 4389: uint16(20151), + 4391: uint16(21416), + 4392: uint16(6001), + 4393: uint16(24073), + 4394: uint16(24308), + 4395: uint16(33922), + 4396: uint16(24313), + 4397: uint16(24315), + 4398: uint16(14496), + 4399: uint16(24316), + 4400: uint16(26686), + 4401: uint16(37915), + 4402: uint16(24333), + 4403: uint16(449), + 4404: uint16(63636), + 4405: uint16(15070), + 4406: uint16(18606), + 4407: uint16(4922), + 4408: uint16(24378), + 4409: uint16(26760), + 4410: uint16(9168), + 4412: uint16(9329), + 4413: uint16(24419), + 4414: uint16(38845), + 4415: uint16(28270), + 4416: uint16(24434), + 4417: uint16(37696), + 4418: uint16(35382), + 4419: uint16(24487), + 4420: uint16(23990), + 4421: uint16(15711), + 4422: uint16(21072), + 4423: uint16(8042), + 4424: uint16(28920), + 4425: uint16(9832), + 4426: uint16(37334), + 4427: uint16(670), + 4428: uint16(35369), + 4429: uint16(24625), + 4430: uint16(26245), + 4431: uint16(6263), + 4432: uint16(14691), + 4433: uint16(15815), + 4434: uint16(13881), + 4435: uint16(22416), + 4436: uint16(10164), + 4437: uint16(31089), + 4438: uint16(15936), + 4439: uint16(24734), + 4441: uint16(24755), + 4442: uint16(18818), + 4443: uint16(18831), + 4444: uint16(31315), + 4445: uint16(29860), + 4446: uint16(20705), + 4447: uint16(23200), + 4448: uint16(24932), + 4449: uint16(33828), + 4450: uint16(24898), + 4451: uint16(63654), + 4452: uint16(28370), + 4453: uint16(24961), + 4454: uint16(20980), + 4455: uint16(1622), + 4456: uint16(24967), + 4457: uint16(23466), + 4458: uint16(16311), + 4459: uint16(10335), + 4460: uint16(25043), + 4461: uint16(35741), + 4462: uint16(39261), + 4463: uint16(25040), + 4464: uint16(14642), + 4465: uint16(10624), + 4466: uint16(10433), + 4467: uint16(24611), + 4468: uint16(24924), + 4469: uint16(25886), + 4470: uint16(25483), + 4471: uint16(280), + 4472: uint16(25285), + 4473: uint16(6000), + 4474: uint16(25301), + 4475: uint16(11789), + 4476: uint16(25452), + 4477: uint16(18911), + 4478: uint16(14871), + 4479: uint16(25656), + 4480: uint16(25592), + 4481: uint16(5006), + 4482: uint16(6140), + 4484: uint16(28554), + 4485: uint16(11830), + 4486: uint16(38932), + 4487: uint16(16524), + 4488: uint16(22301), + 4489: uint16(25825), + 4490: uint16(25829), + 4491: uint16(38011), + 4492: uint16(14950), + 4493: uint16(25658), + 4494: uint16(14935), + 4495: uint16(25933), + 4496: uint16(28438), + 4497: uint16(18984), + 4498: uint16(18979), + 4499: uint16(25989), + 4500: uint16(25965), + 4501: uint16(25951), + 4502: uint16(12414), + 4503: uint16(26037), + 4504: uint16(18752), + 4505: uint16(19255), + 4506: uint16(26065), + 4507: uint16(16600), + 4508: uint16(6185), + 4509: uint16(26080), + 4510: uint16(26083), + 4511: uint16(24543), + 4512: uint16(13312), + 4513: uint16(26136), + 4514: uint16(12791), + 4515: uint16(12792), + 4516: uint16(26180), + 4517: uint16(12708), + 4518: uint16(12709), + 4519: uint16(26187), + 4520: uint16(3701), + 4521: uint16(26215), + 4522: uint16(20966), + 4523: uint16(26227), + 4525: uint16(7741), + 4526: uint16(12849), + 4527: uint16(34292), + 4528: uint16(12744), + 4529: uint16(21267), + 4530: uint16(30661), + 4531: uint16(10487), + 4532: uint16(39332), + 4533: uint16(26370), + 4534: uint16(17308), + 4535: uint16(18977), + 4536: uint16(15147), + 4537: uint16(27130), + 4538: uint16(14274), + 4540: uint16(26471), + 4541: uint16(26466), + 4542: uint16(16845), + 4543: uint16(37101), + 4544: uint16(26583), + 4545: uint16(17641), + 4546: uint16(26658), + 4547: uint16(28240), + 4548: uint16(37436), + 4549: uint16(26625), + 4550: uint16(13286), + 4551: uint16(28064), + 4552: uint16(26717), + 4553: uint16(13423), + 4554: uint16(27105), + 4555: uint16(27147), + 4556: uint16(35551), + 4557: uint16(26995), + 4558: uint16(26819), + 4559: uint16(13773), + 4560: uint16(26881), + 4561: uint16(26880), + 4562: uint16(15666), + 4563: uint16(14849), + 4564: uint16(13884), + 4565: uint16(15232), + 4566: uint16(26540), + 4567: uint16(26977), + 4568: uint16(35402), + 4569: uint16(17148), + 4570: uint16(26934), + 4571: uint16(27032), + 4572: uint16(15265), + 4573: uint16(969), + 4574: uint16(33635), + 4575: uint16(20624), + 4576: uint16(27129), + 4577: uint16(13913), + 4578: uint16(8490), + 4579: uint16(27205), + 4580: uint16(14083), + 4581: uint16(27293), + 4582: uint16(15347), + 4583: uint16(26545), + 4584: uint16(27336), + 4585: uint16(37276), + 4586: uint16(15373), + 4587: uint16(27421), + 4588: uint16(2339), + 4589: uint16(24798), + 4590: uint16(27445), + 4591: uint16(27508), + 4592: uint16(10189), + 4593: uint16(28341), + 4594: uint16(15067), + 4595: uint16(949), + 4596: uint16(6488), + 4597: uint16(14144), + 4598: uint16(21537), + 4599: uint16(15194), + 4600: uint16(27617), + 4601: uint16(16124), + 4602: uint16(27612), + 4603: uint16(27703), + 4604: uint16(9355), + 4605: uint16(18673), + 4606: uint16(27473), + 4607: uint16(27738), + 4608: uint16(33318), + 4609: uint16(27769), + 4610: uint16(15804), + 4611: uint16(17605), + 4612: uint16(15805), + 4613: uint16(16804), + 4614: uint16(18700), + 4615: uint16(18688), + 4616: uint16(15561), + 4617: uint16(14053), + 4618: uint16(15595), + 4619: uint16(3378), + 4620: uint16(39811), + 4621: uint16(12793), + 4622: uint16(9361), + 4623: uint16(32655), + 4624: uint16(26679), + 4625: uint16(27941), + 4626: uint16(28065), + 4627: uint16(28139), + 4628: uint16(28054), + 4629: uint16(27996), + 4630: uint16(28284), + 4631: uint16(28420), + 4632: uint16(18815), + 4633: uint16(16517), + 4634: uint16(28274), + 4635: uint16(34099), + 4636: uint16(28532), + 4637: uint16(20935), + 4640: uint16(33838), + 4641: uint16(35617), + 4643: uint16(15919), + 4644: uint16(29779), + 4645: uint16(16258), + 4646: uint16(31180), + 4647: uint16(28239), + 4648: uint16(23185), + 4649: uint16(12363), + 4650: uint16(28664), + 4651: uint16(14093), + 4652: uint16(28573), + 4653: uint16(15920), + 4654: uint16(28410), + 4655: uint16(5271), + 4656: uint16(16445), + 4657: uint16(17749), + 4658: uint16(37872), + 4659: uint16(28484), + 4660: uint16(28508), + 4661: uint16(15694), + 4662: uint16(28532), + 4663: uint16(37232), + 4664: uint16(15675), + 4665: uint16(28575), + 4666: uint16(16708), + 4667: uint16(28627), + 4668: uint16(16529), + 4669: uint16(16725), + 4670: uint16(16441), + 4671: uint16(16368), + 4672: uint16(16308), + 4673: uint16(16703), + 4674: uint16(20959), + 4675: uint16(16726), + 4676: uint16(16727), + 4677: uint16(16704), + 4678: uint16(25053), + 4679: uint16(28747), + 4680: uint16(28798), + 4681: uint16(28839), + 4682: uint16(28801), + 4683: uint16(28876), + 4684: uint16(28885), + 4685: uint16(28886), + 4686: uint16(28895), + 4687: uint16(16644), + 4688: uint16(15848), + 4689: uint16(29108), + 4690: uint16(29078), + 4691: uint16(17015), + 4692: uint16(28971), + 4693: uint16(28997), + 4694: uint16(23176), + 4695: uint16(29002), + 4697: uint16(23708), + 4698: uint16(17253), + 4699: uint16(29007), + 4700: uint16(37730), + 4701: uint16(17089), + 4702: uint16(28972), + 4703: uint16(17498), + 4704: uint16(18983), + 4705: uint16(18978), + 4706: uint16(29114), + 4707: uint16(35816), + 4708: uint16(28861), + 4709: uint16(29198), + 4710: uint16(37954), + 4711: uint16(29205), + 4712: uint16(22801), + 4713: uint16(37955), + 4714: uint16(29220), + 4715: uint16(37697), + 4716: uint16(22021), + 4717: uint16(29230), + 4718: uint16(29248), + 4719: uint16(18804), + 4720: uint16(26813), + 4721: uint16(29269), + 4722: uint16(29271), + 4723: uint16(15957), + 4724: uint16(12356), + 4725: uint16(26637), + 4726: uint16(28477), + 4727: uint16(29314), + 4729: uint16(29483), + 4730: uint16(18467), + 4731: uint16(34859), + 4732: uint16(18669), + 4733: uint16(34820), + 4734: uint16(29480), + 4735: uint16(29486), + 4736: uint16(29647), + 4737: uint16(29610), + 4738: uint16(3130), + 4739: uint16(27182), + 4740: uint16(29641), + 4741: uint16(29769), + 4742: uint16(16866), + 4743: uint16(5863), + 4744: uint16(18980), + 4745: uint16(26147), + 4746: uint16(14021), + 4747: uint16(18871), + 4748: uint16(18829), + 4749: uint16(18939), + 4750: uint16(29687), + 4751: uint16(29717), + 4752: uint16(26883), + 4753: uint16(18982), + 4754: uint16(29753), + 4755: uint16(1475), + 4756: uint16(16087), + 4758: uint16(10413), + 4759: uint16(29792), + 4760: uint16(36530), + 4761: uint16(29767), + 4762: uint16(29668), + 4763: uint16(29814), + 4764: uint16(33721), + 4765: uint16(29804), + 4766: uint16(14128), + 4767: uint16(29812), + 4768: uint16(37873), + 4769: uint16(27180), + 4770: uint16(29826), + 4771: uint16(18771), + 4772: uint16(19084), + 4773: uint16(16735), + 4774: uint16(19065), + 4775: uint16(35727), + 4776: uint16(23366), + 4777: uint16(35843), + 4778: uint16(6302), + 4779: uint16(29896), + 4780: uint16(6536), + 4781: uint16(29966), + 4783: uint16(29982), + 4784: uint16(36569), + 4785: uint16(6731), + 4786: uint16(23511), + 4787: uint16(36524), + 4788: uint16(37765), + 4789: uint16(30029), + 4790: uint16(30026), + 4791: uint16(30055), + 4792: uint16(30062), + 4793: uint16(20354), + 4794: uint16(16132), + 4795: uint16(19731), + 4796: uint16(30094), + 4797: uint16(29789), + 4798: uint16(30110), + 4799: uint16(30132), + 4800: uint16(30210), + 4801: uint16(30252), + 4802: uint16(30289), + 4803: uint16(30287), + 4804: uint16(30319), + 4805: uint16(30326), + 4806: uint16(25589), + 4807: uint16(30352), + 4808: uint16(33263), + 4809: uint16(14328), + 4810: uint16(26897), + 4811: uint16(26894), + 4812: uint16(30369), + 4813: uint16(30373), + 4814: uint16(30391), + 4815: uint16(30412), + 4816: uint16(28575), + 4817: uint16(33890), + 4818: uint16(20637), + 4819: uint16(20861), + 4820: uint16(7708), + 4821: uint16(30494), + 4822: uint16(30502), + 4823: uint16(30528), + 4824: uint16(25775), + 4825: uint16(21024), + 4826: uint16(30552), + 4827: uint16(12972), + 4828: uint16(30639), + 4829: uint16(35172), + 4830: uint16(35176), + 4831: uint16(5825), + 4832: uint16(30708), + 4834: uint16(4982), + 4835: uint16(18962), + 4836: uint16(26826), + 4837: uint16(30895), + 4838: uint16(30919), + 4839: uint16(30931), + 4840: uint16(38565), + 4841: uint16(31022), + 4842: uint16(21984), + 4843: uint16(30935), + 4844: uint16(31028), + 4845: uint16(30897), + 4846: uint16(30220), + 4847: uint16(36792), + 4848: uint16(34948), + 4849: uint16(35627), + 4850: uint16(24707), + 4851: uint16(9756), + 4852: uint16(31110), + 4853: uint16(35072), + 4854: uint16(26882), + 4855: uint16(31104), + 4856: uint16(22615), + 4857: uint16(31133), + 4858: uint16(31545), + 4859: uint16(31036), + 4860: uint16(31145), + 4861: uint16(28202), + 4862: uint16(28966), + 4863: uint16(16040), + 4864: uint16(31174), + 4865: uint16(37133), + 4866: uint16(31188), + 4867: uint16(1312), + 4868: uint16(17503), + 4869: uint16(21007), + 4870: uint16(47234), + 4871: uint16(248), + 4872: uint16(16384), + 4873: uint16(43296), + 4874: uint16(1102), + 4877: uint16(2868), + 4878: uint16(1), + 4886: uint16(3072), + 4887: uint16(64), + 4891: uint16(1024), + 4892: uint16(88), + 4893: uint16(60), + 4896: uint16(23680), + 4897: uint16(56493), + 4898: uint16(48115), + 4899: uint16(17353), + 4900: uint16(60910), + 4901: uint16(4004), + 4902: uint16(49446), + 4903: uint16(30363), + 4904: uint16(61426), + 4905: uint16(64478), + 4906: uint16(63482), + 4907: uint16(12815), + 4908: uint16(44868), + 4909: uint16(61438), + 4910: uint16(65277), + 4911: uint16(24593), + 4912: uint16(176), + 4913: uint16(8448), + 4914: uint16(33049), + 4915: uint16(4128), + 4916: uint16(43144), + 4917: uint16(8544), + 4918: uint16(9321), + 4919: uint16(17408), + 4920: uint16(50313), + 4922: uint16(16387), + 4923: uint16(53), + 4924: uint16(33859), + 4925: uint16(20785), + 4926: uint16(26771), + 4927: uint16(514), + 4933: uint16(16384), + 4934: uint16(256), + 4935: uint16(44160), + 4936: uint16(33380), + 4937: uint16(35904), + 4938: uint16(37025), + 4939: uint16(20484), + 4940: uint16(54368), + 4941: uint16(53760), + 4942: uint16(6186), + 4943: uint16(26781), + 4944: uint16(38709), + 4945: uint16(55375), + 4946: uint16(8440), + 4947: uint16(33476), + 4948: uint16(10268), + 4949: uint16(30082), + 4950: uint16(660), + 4951: uint16(16440), + 4952: uint16(41376), + 4953: uint16(4293), + 4954: uint16(19825), + 4955: uint16(3524), + 4956: uint16(47512), + 4957: uint16(23390), + 4958: uint16(17153), + 4959: uint16(39327), + 4960: uint16(30723), + 4961: uint16(57888), + 4962: uint16(2079), + 4963: uint16(393), + 4964: uint16(16585), + 4965: uint16(775), + 4966: uint16(39437), + 4967: uint16(21136), + 4968: uint16(20433), + 4969: uint16(892), + 4970: uint16(8450), + 4971: uint16(49184), + 4972: uint16(4974), + 4973: uint16(46467), + 4974: uint16(62939), + 4975: uint16(30693), + 4976: uint16(20368), + 4977: uint16(39447), + 4978: uint16(5942), + 4979: uint16(12), + 4980: uint16(47726), + 4981: uint16(12041), + 4982: uint16(21600), + 4983: uint16(7680), + 4984: uint16(26744), + 4985: uint16(28706), + 4986: uint16(40534), + 4987: uint16(62245), + 4988: uint16(46990), + 4989: uint16(2839), + 4990: uint16(59119), + 4991: uint16(6007), + 4992: uint16(7003), + 4993: uint16(4289), + 4994: uint16(36248), + 4995: uint16(6162), + 4996: uint16(53174), + 4997: uint16(12545), + 4998: uint16(6770), + 4999: uint16(11355), + 5000: uint16(49334), + 5001: uint16(57888), + 5002: uint16(23747), + 5003: uint16(7042), + 5004: uint16(56032), + 5005: uint16(34254), + 5006: uint16(16598), + 5007: uint16(21673), + 5008: uint16(53259), + 5009: uint16(18447), + 5010: uint16(16452), + 5011: uint16(2320), + 5012: uint16(16596), + 5013: uint16(15278), + 5014: uint16(7780), + 5015: uint16(11076), + 5016: uint16(2071), + 5017: uint16(33414), + 5018: uint16(6198), + 5019: uint16(35232), + 5020: uint16(40167), + 5021: uint16(2139), + 5022: uint16(900), + 5023: uint16(55810), + 5024: uint16(60560), + 5025: uint16(34779), + 5026: uint16(49029), + 5027: uint16(44450), + 5028: uint16(36509), + 5029: uint16(39069), + 5030: uint16(9504), + 5031: uint16(70), + 5032: uint16(40774), + 5033: uint16(58239), + 5034: uint16(51669), + 5035: uint16(62596), + 5036: uint16(19926), + 5037: uint16(58118), + 5038: uint16(6326), + 5039: uint16(2322), + 5041: uint16(1024), + 5043: uint16(32), + 5045: uint16(512), + 5050: uint16(8192), + 5057: uint16(8), + 5058: uint16(36352), + 5059: uint16(28280), + 5060: uint16(16223), + 5061: uint16(56702), + 5062: uint16(63293), + 5063: uint16(39932), + 5064: uint16(44796), + 5065: uint16(65490), + 5066: uint16(27535), + 5067: uint16(59377), + 5068: uint16(47807), + 5069: uint16(28334), + 5070: uint16(61207), + 5071: uint16(42972), + 5072: uint16(46654), + 5073: uint16(30645), + 5074: uint16(37577), + 5075: uint16(42455), + 5076: uint16(19126), + 5077: uint16(39790), + 5078: uint16(33209), + 5079: uint16(26445), + 5080: uint16(21758), + 5081: uint16(39921), + 5082: uint16(65122), + 5083: uint16(21103), + 5084: uint16(14039), + 5085: uint16(49150), + 5086: uint16(17705), + 5087: uint16(63873), + 5088: uint16(26045), + 5089: uint16(17062), + 5090: uint16(57), + 5091: uint16(16896), + 5092: uint16(36704), + 5093: uint16(37888), + 5094: uint16(16448), + 5095: uint16(45010), + 5096: uint16(53719), + 5097: uint16(219), + 5098: uint16(39072), + 5099: uint16(31666), + 5100: uint16(20998), + 5101: uint16(38944), + 5102: uint16(51222), + 5103: uint16(2365), + 5105: uint16(1), + 5107: uint16(2561), + 5108: uint16(2226), + 5109: uint16(128), + 5111: uint16(34820), + 5112: uint16(5152), + 5113: uint16(19472), + 5115: uint16(4), + 5116: uint16(17569), + 5117: uint16(16), + 5118: uint16(321), + 5119: uint16(2048), + 5120: uint16(61504), + 5121: uint16(20447), + 5122: uint16(22582), + 5123: uint16(62961), + 5124: uint16(32949), + 5125: uint16(26613), + 5126: uint16(16512), + 5127: uint16(20480), + 5128: uint16(16718), + 5129: uint16(33992), + 5130: uint16(23040), + 5131: uint16(55392), + 5132: uint16(11009), + 5133: uint16(20481), + 5134: uint16(5793), + 5135: uint16(16580), + 5136: uint16(28402), + 5137: uint16(44049), + 5138: uint16(14624), + 5139: uint16(49348), + 5140: uint16(1800), + 5141: uint16(2316), + 5142: uint16(38552), + 5143: uint16(39876), + 5144: uint16(7184), + 5145: uint16(27800), + 5146: uint16(10886), + 5147: uint16(422), + 5148: uint16(4422), + 5149: uint16(58733), + 5150: uint16(50379), + 5151: uint16(37568), + 5152: uint16(8464), + 5153: uint16(4630), + 5154: uint16(29341), + 5155: uint16(27124), + 5156: uint16(5902), + 5157: uint16(41514), + 5158: uint16(62593), + 5159: uint16(123), + 5160: uint16(41992), + 5161: uint16(36875), + 5162: uint16(11280), + 5163: uint16(14796), + 5164: uint16(330), + 5165: uint16(5872), + 5166: uint16(2571), + 5167: uint16(3136), + 5168: uint16(59933), + 5169: uint16(17420), + 5170: uint16(17678), + 5171: uint16(2), +} + +var _ksc = [93][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(183), + 4: uint16(8229), + 5: uint16(8230), + 6: uint16(168), + 7: uint16(12291), + 8: uint16(173), + 9: uint16(8213), + 10: uint16(8741), + 11: uint16(65340), + 12: uint16(8764), + 13: uint16(8216), + 14: uint16(8217), + 15: uint16(8220), + 16: uint16(8221), + 17: uint16(12308), + 18: uint16(12309), + 19: uint16(12296), + 20: uint16(12297), + 21: uint16(12298), + 22: uint16(12299), + 23: uint16(12300), + 24: uint16(12301), + 25: uint16(12302), + 26: uint16(12303), + 27: uint16(12304), + 28: uint16(12305), + 29: uint16(177), + 30: uint16(215), + 31: uint16(247), + 32: uint16(8800), + 33: uint16(8804), + 34: uint16(8805), + 35: uint16(8734), + 36: uint16(8756), + 37: uint16(176), + 38: uint16(8242), + 39: uint16(8243), + 40: uint16(8451), + 41: uint16(8491), + 42: uint16(65504), + 43: uint16(65505), + 44: uint16(65509), + 45: uint16(9794), + 46: uint16(9792), + 47: uint16(8736), + 48: uint16(8869), + 49: uint16(8978), + 50: uint16(8706), + 51: uint16(8711), + 52: uint16(8801), + 53: uint16(8786), + 54: uint16(167), + 55: uint16(8251), + 56: uint16(9734), + 57: uint16(9733), + 58: uint16(9675), + 59: uint16(9679), + 60: uint16(9678), + 61: uint16(9671), + 62: uint16(9670), + 63: uint16(9633), + 64: uint16(9632), + 65: uint16(9651), + 66: uint16(9650), + 67: uint16(9661), + 68: uint16(9660), + 69: uint16(8594), + 70: uint16(8592), + 71: uint16(8593), + 72: uint16(8595), + 73: uint16(8596), + 74: uint16(12307), + 75: uint16(8810), + 76: uint16(8811), + 77: uint16(8730), + 78: uint16(8765), + 79: uint16(8733), + 80: uint16(8757), + 81: uint16(8747), + 82: uint16(8748), + 83: uint16(8712), + 84: uint16(8715), + 85: uint16(8838), + 86: uint16(8839), + 87: uint16(8834), + 88: uint16(8835), + 89: uint16(8746), + 90: uint16(8745), + 91: uint16(8743), + 92: uint16(8744), + 93: uint16(65506), + }, + 1: { + 0: uint16(8658), + 1: uint16(8660), + 2: uint16(8704), + 3: uint16(8707), + 4: uint16(180), + 5: uint16(65374), + 6: uint16(711), + 7: uint16(728), + 8: uint16(733), + 9: uint16(730), + 10: uint16(729), + 11: uint16(184), + 12: uint16(731), + 13: uint16(161), + 14: uint16(191), + 15: uint16(720), + 16: uint16(8750), + 17: uint16(8721), + 18: uint16(8719), + 19: uint16(164), + 20: uint16(8457), + 21: uint16(8240), + 22: uint16(9665), + 23: uint16(9664), + 24: uint16(9655), + 25: uint16(9654), + 26: uint16(9828), + 27: uint16(9824), + 28: uint16(9825), + 29: uint16(9829), + 30: uint16(9831), + 31: uint16(9827), + 32: uint16(8857), + 33: uint16(9672), + 34: uint16(9635), + 35: uint16(9680), + 36: uint16(9681), + 37: uint16(9618), + 38: uint16(9636), + 39: uint16(9637), + 40: uint16(9640), + 41: uint16(9639), + 42: uint16(9638), + 43: uint16(9641), + 44: uint16(9832), + 45: uint16(9743), + 46: uint16(9742), + 47: uint16(9756), + 48: uint16(9758), + 49: uint16(182), + 50: uint16(8224), + 51: uint16(8225), + 52: uint16(8597), + 53: uint16(8599), + 54: uint16(8601), + 55: uint16(8598), + 56: uint16(8600), + 57: uint16(9837), + 58: uint16(9833), + 59: uint16(9834), + 60: uint16(9836), + 61: uint16(12927), + 62: uint16(12828), + 63: uint16(8470), + 64: uint16(13255), + 65: uint16(8482), + 66: uint16(13250), + 67: uint16(13272), + 68: uint16(8481), + 69: uint16(8364), + 70: uint16(174), + }, + 2: { + 0: uint16(65281), + 1: uint16(65282), + 2: uint16(65283), + 3: uint16(65284), + 4: uint16(65285), + 5: uint16(65286), + 6: uint16(65287), + 7: uint16(65288), + 8: uint16(65289), + 9: uint16(65290), + 10: uint16(65291), + 11: uint16(65292), + 12: uint16(65293), + 13: uint16(65294), + 14: uint16(65295), + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 25: uint16(65306), + 26: uint16(65307), + 27: uint16(65308), + 28: uint16(65309), + 29: uint16(65310), + 30: uint16(65311), + 31: uint16(65312), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 58: uint16(65339), + 59: uint16(65510), + 60: uint16(65341), + 61: uint16(65342), + 62: uint16(65343), + 63: uint16(65344), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + 90: uint16(65371), + 91: uint16(65372), + 92: uint16(65373), + 93: uint16(65507), + }, + 3: { + 0: uint16(12593), + 1: uint16(12594), + 2: uint16(12595), + 3: uint16(12596), + 4: uint16(12597), + 5: uint16(12598), + 6: uint16(12599), + 7: uint16(12600), + 8: uint16(12601), + 9: uint16(12602), + 10: uint16(12603), + 11: uint16(12604), + 12: uint16(12605), + 13: uint16(12606), + 14: uint16(12607), + 15: uint16(12608), + 16: uint16(12609), + 17: uint16(12610), + 18: uint16(12611), + 19: uint16(12612), + 20: uint16(12613), + 21: uint16(12614), + 22: uint16(12615), + 23: uint16(12616), + 24: uint16(12617), + 25: uint16(12618), + 26: uint16(12619), + 27: uint16(12620), + 28: uint16(12621), + 29: uint16(12622), + 30: uint16(12623), + 31: uint16(12624), + 32: uint16(12625), + 33: uint16(12626), + 34: uint16(12627), + 35: uint16(12628), + 36: uint16(12629), + 37: uint16(12630), + 38: uint16(12631), + 39: uint16(12632), + 40: uint16(12633), + 41: uint16(12634), + 42: uint16(12635), + 43: uint16(12636), + 44: uint16(12637), + 45: uint16(12638), + 46: uint16(12639), + 47: uint16(12640), + 48: uint16(12641), + 49: uint16(12642), + 50: uint16(12643), + 51: uint16(12644), + 52: uint16(12645), + 53: uint16(12646), + 54: uint16(12647), + 55: uint16(12648), + 56: uint16(12649), + 57: uint16(12650), + 58: uint16(12651), + 59: uint16(12652), + 60: uint16(12653), + 61: uint16(12654), + 62: uint16(12655), + 63: uint16(12656), + 64: uint16(12657), + 65: uint16(12658), + 66: uint16(12659), + 67: uint16(12660), + 68: uint16(12661), + 69: uint16(12662), + 70: uint16(12663), + 71: uint16(12664), + 72: uint16(12665), + 73: uint16(12666), + 74: uint16(12667), + 75: uint16(12668), + 76: uint16(12669), + 77: uint16(12670), + 78: uint16(12671), + 79: uint16(12672), + 80: uint16(12673), + 81: uint16(12674), + 82: uint16(12675), + 83: uint16(12676), + 84: uint16(12677), + 85: uint16(12678), + 86: uint16(12679), + 87: uint16(12680), + 88: uint16(12681), + 89: uint16(12682), + 90: uint16(12683), + 91: uint16(12684), + 92: uint16(12685), + 93: uint16(12686), + }, + 4: { + 0: uint16(8560), + 1: uint16(8561), + 2: uint16(8562), + 3: uint16(8563), + 4: uint16(8564), + 5: uint16(8565), + 6: uint16(8566), + 7: uint16(8567), + 8: uint16(8568), + 9: uint16(8569), + 15: uint16(8544), + 16: uint16(8545), + 17: uint16(8546), + 18: uint16(8547), + 19: uint16(8548), + 20: uint16(8549), + 21: uint16(8550), + 22: uint16(8551), + 23: uint16(8552), + 24: uint16(8553), + 32: uint16(913), + 33: uint16(914), + 34: uint16(915), + 35: uint16(916), + 36: uint16(917), + 37: uint16(918), + 38: uint16(919), + 39: uint16(920), + 40: uint16(921), + 41: uint16(922), + 42: uint16(923), + 43: uint16(924), + 44: uint16(925), + 45: uint16(926), + 46: uint16(927), + 47: uint16(928), + 48: uint16(929), + 49: uint16(931), + 50: uint16(932), + 51: uint16(933), + 52: uint16(934), + 53: uint16(935), + 54: uint16(936), + 55: uint16(937), + 64: uint16(945), + 65: uint16(946), + 66: uint16(947), + 67: uint16(948), + 68: uint16(949), + 69: uint16(950), + 70: uint16(951), + 71: uint16(952), + 72: uint16(953), + 73: uint16(954), + 74: uint16(955), + 75: uint16(956), + 76: uint16(957), + 77: uint16(958), + 78: uint16(959), + 79: uint16(960), + 80: uint16(961), + 81: uint16(963), + 82: uint16(964), + 83: uint16(965), + 84: uint16(966), + 85: uint16(967), + 86: uint16(968), + 87: uint16(969), + }, + 5: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + 32: uint16(9490), + 33: uint16(9489), + 34: uint16(9498), + 35: uint16(9497), + 36: uint16(9494), + 37: uint16(9493), + 38: uint16(9486), + 39: uint16(9485), + 40: uint16(9502), + 41: uint16(9503), + 42: uint16(9505), + 43: uint16(9506), + 44: uint16(9510), + 45: uint16(9511), + 46: uint16(9513), + 47: uint16(9514), + 48: uint16(9517), + 49: uint16(9518), + 50: uint16(9521), + 51: uint16(9522), + 52: uint16(9525), + 53: uint16(9526), + 54: uint16(9529), + 55: uint16(9530), + 56: uint16(9533), + 57: uint16(9534), + 58: uint16(9536), + 59: uint16(9537), + 60: uint16(9539), + 61: uint16(9540), + 62: uint16(9541), + 63: uint16(9542), + 64: uint16(9543), + 65: uint16(9544), + 66: uint16(9545), + 67: uint16(9546), + }, + 6: { + 0: uint16(13205), + 1: uint16(13206), + 2: uint16(13207), + 3: uint16(8467), + 4: uint16(13208), + 5: uint16(13252), + 6: uint16(13219), + 7: uint16(13220), + 8: uint16(13221), + 9: uint16(13222), + 10: uint16(13209), + 11: uint16(13210), + 12: uint16(13211), + 13: uint16(13212), + 14: uint16(13213), + 15: uint16(13214), + 16: uint16(13215), + 17: uint16(13216), + 18: uint16(13217), + 19: uint16(13218), + 20: uint16(13258), + 21: uint16(13197), + 22: uint16(13198), + 23: uint16(13199), + 24: uint16(13263), + 25: uint16(13192), + 26: uint16(13193), + 27: uint16(13256), + 28: uint16(13223), + 29: uint16(13224), + 30: uint16(13232), + 31: uint16(13233), + 32: uint16(13234), + 33: uint16(13235), + 34: uint16(13236), + 35: uint16(13237), + 36: uint16(13238), + 37: uint16(13239), + 38: uint16(13240), + 39: uint16(13241), + 40: uint16(13184), + 41: uint16(13185), + 42: uint16(13186), + 43: uint16(13187), + 44: uint16(13188), + 45: uint16(13242), + 46: uint16(13243), + 47: uint16(13244), + 48: uint16(13245), + 49: uint16(13246), + 50: uint16(13247), + 51: uint16(13200), + 52: uint16(13201), + 53: uint16(13202), + 54: uint16(13203), + 55: uint16(13204), + 56: uint16(8486), + 57: uint16(13248), + 58: uint16(13249), + 59: uint16(13194), + 60: uint16(13195), + 61: uint16(13196), + 62: uint16(13270), + 63: uint16(13253), + 64: uint16(13229), + 65: uint16(13230), + 66: uint16(13231), + 67: uint16(13275), + 68: uint16(13225), + 69: uint16(13226), + 70: uint16(13227), + 71: uint16(13228), + 72: uint16(13277), + 73: uint16(13264), + 74: uint16(13267), + 75: uint16(13251), + 76: uint16(13257), + 77: uint16(13276), + 78: uint16(13254), + }, + 7: { + 0: uint16(198), + 1: uint16(208), + 2: uint16(170), + 3: uint16(294), + 5: uint16(306), + 7: uint16(319), + 8: uint16(321), + 9: uint16(216), + 10: uint16(338), + 11: uint16(186), + 12: uint16(222), + 13: uint16(358), + 14: uint16(330), + 16: uint16(12896), + 17: uint16(12897), + 18: uint16(12898), + 19: uint16(12899), + 20: uint16(12900), + 21: uint16(12901), + 22: uint16(12902), + 23: uint16(12903), + 24: uint16(12904), + 25: uint16(12905), + 26: uint16(12906), + 27: uint16(12907), + 28: uint16(12908), + 29: uint16(12909), + 30: uint16(12910), + 31: uint16(12911), + 32: uint16(12912), + 33: uint16(12913), + 34: uint16(12914), + 35: uint16(12915), + 36: uint16(12916), + 37: uint16(12917), + 38: uint16(12918), + 39: uint16(12919), + 40: uint16(12920), + 41: uint16(12921), + 42: uint16(12922), + 43: uint16(12923), + 44: uint16(9424), + 45: uint16(9425), + 46: uint16(9426), + 47: uint16(9427), + 48: uint16(9428), + 49: uint16(9429), + 50: uint16(9430), + 51: uint16(9431), + 52: uint16(9432), + 53: uint16(9433), + 54: uint16(9434), + 55: uint16(9435), + 56: uint16(9436), + 57: uint16(9437), + 58: uint16(9438), + 59: uint16(9439), + 60: uint16(9440), + 61: uint16(9441), + 62: uint16(9442), + 63: uint16(9443), + 64: uint16(9444), + 65: uint16(9445), + 66: uint16(9446), + 67: uint16(9447), + 68: uint16(9448), + 69: uint16(9449), + 70: uint16(9312), + 71: uint16(9313), + 72: uint16(9314), + 73: uint16(9315), + 74: uint16(9316), + 75: uint16(9317), + 76: uint16(9318), + 77: uint16(9319), + 78: uint16(9320), + 79: uint16(9321), + 80: uint16(9322), + 81: uint16(9323), + 82: uint16(9324), + 83: uint16(9325), + 84: uint16(9326), + 85: uint16(189), + 86: uint16(8531), + 87: uint16(8532), + 88: uint16(188), + 89: uint16(190), + 90: uint16(8539), + 91: uint16(8540), + 92: uint16(8541), + 93: uint16(8542), + }, + 8: { + 0: uint16(230), + 1: uint16(273), + 2: uint16(240), + 3: uint16(295), + 4: uint16(305), + 5: uint16(307), + 6: uint16(312), + 7: uint16(320), + 8: uint16(322), + 9: uint16(248), + 10: uint16(339), + 11: uint16(223), + 12: uint16(254), + 13: uint16(359), + 14: uint16(331), + 15: uint16(329), + 16: uint16(12800), + 17: uint16(12801), + 18: uint16(12802), + 19: uint16(12803), + 20: uint16(12804), + 21: uint16(12805), + 22: uint16(12806), + 23: uint16(12807), + 24: uint16(12808), + 25: uint16(12809), + 26: uint16(12810), + 27: uint16(12811), + 28: uint16(12812), + 29: uint16(12813), + 30: uint16(12814), + 31: uint16(12815), + 32: uint16(12816), + 33: uint16(12817), + 34: uint16(12818), + 35: uint16(12819), + 36: uint16(12820), + 37: uint16(12821), + 38: uint16(12822), + 39: uint16(12823), + 40: uint16(12824), + 41: uint16(12825), + 42: uint16(12826), + 43: uint16(12827), + 44: uint16(9372), + 45: uint16(9373), + 46: uint16(9374), + 47: uint16(9375), + 48: uint16(9376), + 49: uint16(9377), + 50: uint16(9378), + 51: uint16(9379), + 52: uint16(9380), + 53: uint16(9381), + 54: uint16(9382), + 55: uint16(9383), + 56: uint16(9384), + 57: uint16(9385), + 58: uint16(9386), + 59: uint16(9387), + 60: uint16(9388), + 61: uint16(9389), + 62: uint16(9390), + 63: uint16(9391), + 64: uint16(9392), + 65: uint16(9393), + 66: uint16(9394), + 67: uint16(9395), + 68: uint16(9396), + 69: uint16(9397), + 70: uint16(9332), + 71: uint16(9333), + 72: uint16(9334), + 73: uint16(9335), + 74: uint16(9336), + 75: uint16(9337), + 76: uint16(9338), + 77: uint16(9339), + 78: uint16(9340), + 79: uint16(9341), + 80: uint16(9342), + 81: uint16(9343), + 82: uint16(9344), + 83: uint16(9345), + 84: uint16(9346), + 85: uint16(185), + 86: uint16(178), + 87: uint16(179), + 88: uint16(8308), + 89: uint16(8319), + 90: uint16(8321), + 91: uint16(8322), + 92: uint16(8323), + 93: uint16(8324), + }, + 9: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 10: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 11: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(44032), + 1: uint16(44033), + 2: uint16(44036), + 3: uint16(44039), + 4: uint16(44040), + 5: uint16(44041), + 6: uint16(44042), + 7: uint16(44048), + 8: uint16(44049), + 9: uint16(44050), + 10: uint16(44051), + 11: uint16(44052), + 12: uint16(44053), + 13: uint16(44054), + 14: uint16(44055), + 15: uint16(44057), + 16: uint16(44058), + 17: uint16(44059), + 18: uint16(44060), + 19: uint16(44061), + 20: uint16(44064), + 21: uint16(44068), + 22: uint16(44076), + 23: uint16(44077), + 24: uint16(44079), + 25: uint16(44080), + 26: uint16(44081), + 27: uint16(44088), + 28: uint16(44089), + 29: uint16(44092), + 30: uint16(44096), + 31: uint16(44107), + 32: uint16(44109), + 33: uint16(44116), + 34: uint16(44120), + 35: uint16(44124), + 36: uint16(44144), + 37: uint16(44145), + 38: uint16(44148), + 39: uint16(44151), + 40: uint16(44152), + 41: uint16(44154), + 42: uint16(44160), + 43: uint16(44161), + 44: uint16(44163), + 45: uint16(44164), + 46: uint16(44165), + 47: uint16(44166), + 48: uint16(44169), + 49: uint16(44170), + 50: uint16(44171), + 51: uint16(44172), + 52: uint16(44176), + 53: uint16(44180), + 54: uint16(44188), + 55: uint16(44189), + 56: uint16(44191), + 57: uint16(44192), + 58: uint16(44193), + 59: uint16(44200), + 60: uint16(44201), + 61: uint16(44202), + 62: uint16(44204), + 63: uint16(44207), + 64: uint16(44208), + 65: uint16(44216), + 66: uint16(44217), + 67: uint16(44219), + 68: uint16(44220), + 69: uint16(44221), + 70: uint16(44225), + 71: uint16(44228), + 72: uint16(44232), + 73: uint16(44236), + 74: uint16(44245), + 75: uint16(44247), + 76: uint16(44256), + 77: uint16(44257), + 78: uint16(44260), + 79: uint16(44263), + 80: uint16(44264), + 81: uint16(44266), + 82: uint16(44268), + 83: uint16(44271), + 84: uint16(44272), + 85: uint16(44273), + 86: uint16(44275), + 87: uint16(44277), + 88: uint16(44278), + 89: uint16(44284), + 90: uint16(44285), + 91: uint16(44288), + 92: uint16(44292), + 93: uint16(44294), + }, + 16: { + 0: uint16(44300), + 1: uint16(44301), + 2: uint16(44303), + 3: uint16(44305), + 4: uint16(44312), + 5: uint16(44316), + 6: uint16(44320), + 7: uint16(44329), + 8: uint16(44332), + 9: uint16(44333), + 10: uint16(44340), + 11: uint16(44341), + 12: uint16(44344), + 13: uint16(44348), + 14: uint16(44356), + 15: uint16(44357), + 16: uint16(44359), + 17: uint16(44361), + 18: uint16(44368), + 19: uint16(44372), + 20: uint16(44376), + 21: uint16(44385), + 22: uint16(44387), + 23: uint16(44396), + 24: uint16(44397), + 25: uint16(44400), + 26: uint16(44403), + 27: uint16(44404), + 28: uint16(44405), + 29: uint16(44406), + 30: uint16(44411), + 31: uint16(44412), + 32: uint16(44413), + 33: uint16(44415), + 34: uint16(44417), + 35: uint16(44418), + 36: uint16(44424), + 37: uint16(44425), + 38: uint16(44428), + 39: uint16(44432), + 40: uint16(44444), + 41: uint16(44445), + 42: uint16(44452), + 43: uint16(44471), + 44: uint16(44480), + 45: uint16(44481), + 46: uint16(44484), + 47: uint16(44488), + 48: uint16(44496), + 49: uint16(44497), + 50: uint16(44499), + 51: uint16(44508), + 52: uint16(44512), + 53: uint16(44516), + 54: uint16(44536), + 55: uint16(44537), + 56: uint16(44540), + 57: uint16(44543), + 58: uint16(44544), + 59: uint16(44545), + 60: uint16(44552), + 61: uint16(44553), + 62: uint16(44555), + 63: uint16(44557), + 64: uint16(44564), + 65: uint16(44592), + 66: uint16(44593), + 67: uint16(44596), + 68: uint16(44599), + 69: uint16(44600), + 70: uint16(44602), + 71: uint16(44608), + 72: uint16(44609), + 73: uint16(44611), + 74: uint16(44613), + 75: uint16(44614), + 76: uint16(44618), + 77: uint16(44620), + 78: uint16(44621), + 79: uint16(44622), + 80: uint16(44624), + 81: uint16(44628), + 82: uint16(44630), + 83: uint16(44636), + 84: uint16(44637), + 85: uint16(44639), + 86: uint16(44640), + 87: uint16(44641), + 88: uint16(44645), + 89: uint16(44648), + 90: uint16(44649), + 91: uint16(44652), + 92: uint16(44656), + 93: uint16(44664), + }, + 17: { + 0: uint16(44665), + 1: uint16(44667), + 2: uint16(44668), + 3: uint16(44669), + 4: uint16(44676), + 5: uint16(44677), + 6: uint16(44684), + 7: uint16(44732), + 8: uint16(44733), + 9: uint16(44734), + 10: uint16(44736), + 11: uint16(44740), + 12: uint16(44748), + 13: uint16(44749), + 14: uint16(44751), + 15: uint16(44752), + 16: uint16(44753), + 17: uint16(44760), + 18: uint16(44761), + 19: uint16(44764), + 20: uint16(44776), + 21: uint16(44779), + 22: uint16(44781), + 23: uint16(44788), + 24: uint16(44792), + 25: uint16(44796), + 26: uint16(44807), + 27: uint16(44808), + 28: uint16(44813), + 29: uint16(44816), + 30: uint16(44844), + 31: uint16(44845), + 32: uint16(44848), + 33: uint16(44850), + 34: uint16(44852), + 35: uint16(44860), + 36: uint16(44861), + 37: uint16(44863), + 38: uint16(44865), + 39: uint16(44866), + 40: uint16(44867), + 41: uint16(44872), + 42: uint16(44873), + 43: uint16(44880), + 44: uint16(44892), + 45: uint16(44893), + 46: uint16(44900), + 47: uint16(44901), + 48: uint16(44921), + 49: uint16(44928), + 50: uint16(44932), + 51: uint16(44936), + 52: uint16(44944), + 53: uint16(44945), + 54: uint16(44949), + 55: uint16(44956), + 56: uint16(44984), + 57: uint16(44985), + 58: uint16(44988), + 59: uint16(44992), + 60: uint16(44999), + 61: uint16(45000), + 62: uint16(45001), + 63: uint16(45003), + 64: uint16(45005), + 65: uint16(45006), + 66: uint16(45012), + 67: uint16(45020), + 68: uint16(45032), + 69: uint16(45033), + 70: uint16(45040), + 71: uint16(45041), + 72: uint16(45044), + 73: uint16(45048), + 74: uint16(45056), + 75: uint16(45057), + 76: uint16(45060), + 77: uint16(45068), + 78: uint16(45072), + 79: uint16(45076), + 80: uint16(45084), + 81: uint16(45085), + 82: uint16(45096), + 83: uint16(45124), + 84: uint16(45125), + 85: uint16(45128), + 86: uint16(45130), + 87: uint16(45132), + 88: uint16(45134), + 89: uint16(45139), + 90: uint16(45140), + 91: uint16(45141), + 92: uint16(45143), + 93: uint16(45145), + }, + 18: { + 0: uint16(45149), + 1: uint16(45180), + 2: uint16(45181), + 3: uint16(45184), + 4: uint16(45188), + 5: uint16(45196), + 6: uint16(45197), + 7: uint16(45199), + 8: uint16(45201), + 9: uint16(45208), + 10: uint16(45209), + 11: uint16(45210), + 12: uint16(45212), + 13: uint16(45215), + 14: uint16(45216), + 15: uint16(45217), + 16: uint16(45218), + 17: uint16(45224), + 18: uint16(45225), + 19: uint16(45227), + 20: uint16(45228), + 21: uint16(45229), + 22: uint16(45230), + 23: uint16(45231), + 24: uint16(45233), + 25: uint16(45235), + 26: uint16(45236), + 27: uint16(45237), + 28: uint16(45240), + 29: uint16(45244), + 30: uint16(45252), + 31: uint16(45253), + 32: uint16(45255), + 33: uint16(45256), + 34: uint16(45257), + 35: uint16(45264), + 36: uint16(45265), + 37: uint16(45268), + 38: uint16(45272), + 39: uint16(45280), + 40: uint16(45285), + 41: uint16(45320), + 42: uint16(45321), + 43: uint16(45323), + 44: uint16(45324), + 45: uint16(45328), + 46: uint16(45330), + 47: uint16(45331), + 48: uint16(45336), + 49: uint16(45337), + 50: uint16(45339), + 51: uint16(45340), + 52: uint16(45341), + 53: uint16(45347), + 54: uint16(45348), + 55: uint16(45349), + 56: uint16(45352), + 57: uint16(45356), + 58: uint16(45364), + 59: uint16(45365), + 60: uint16(45367), + 61: uint16(45368), + 62: uint16(45369), + 63: uint16(45376), + 64: uint16(45377), + 65: uint16(45380), + 66: uint16(45384), + 67: uint16(45392), + 68: uint16(45393), + 69: uint16(45396), + 70: uint16(45397), + 71: uint16(45400), + 72: uint16(45404), + 73: uint16(45408), + 74: uint16(45432), + 75: uint16(45433), + 76: uint16(45436), + 77: uint16(45440), + 78: uint16(45442), + 79: uint16(45448), + 80: uint16(45449), + 81: uint16(45451), + 82: uint16(45453), + 83: uint16(45458), + 84: uint16(45459), + 85: uint16(45460), + 86: uint16(45464), + 87: uint16(45468), + 88: uint16(45480), + 89: uint16(45516), + 90: uint16(45520), + 91: uint16(45524), + 92: uint16(45532), + 93: uint16(45533), + }, + 19: { + 0: uint16(45535), + 1: uint16(45544), + 2: uint16(45545), + 3: uint16(45548), + 4: uint16(45552), + 5: uint16(45561), + 6: uint16(45563), + 7: uint16(45565), + 8: uint16(45572), + 9: uint16(45573), + 10: uint16(45576), + 11: uint16(45579), + 12: uint16(45580), + 13: uint16(45588), + 14: uint16(45589), + 15: uint16(45591), + 16: uint16(45593), + 17: uint16(45600), + 18: uint16(45620), + 19: uint16(45628), + 20: uint16(45656), + 21: uint16(45660), + 22: uint16(45664), + 23: uint16(45672), + 24: uint16(45673), + 25: uint16(45684), + 26: uint16(45685), + 27: uint16(45692), + 28: uint16(45700), + 29: uint16(45701), + 30: uint16(45705), + 31: uint16(45712), + 32: uint16(45713), + 33: uint16(45716), + 34: uint16(45720), + 35: uint16(45721), + 36: uint16(45722), + 37: uint16(45728), + 38: uint16(45729), + 39: uint16(45731), + 40: uint16(45733), + 41: uint16(45734), + 42: uint16(45738), + 43: uint16(45740), + 44: uint16(45744), + 45: uint16(45748), + 46: uint16(45768), + 47: uint16(45769), + 48: uint16(45772), + 49: uint16(45776), + 50: uint16(45778), + 51: uint16(45784), + 52: uint16(45785), + 53: uint16(45787), + 54: uint16(45789), + 55: uint16(45794), + 56: uint16(45796), + 57: uint16(45797), + 58: uint16(45798), + 59: uint16(45800), + 60: uint16(45803), + 61: uint16(45804), + 62: uint16(45805), + 63: uint16(45806), + 64: uint16(45807), + 65: uint16(45811), + 66: uint16(45812), + 67: uint16(45813), + 68: uint16(45815), + 69: uint16(45816), + 70: uint16(45817), + 71: uint16(45818), + 72: uint16(45819), + 73: uint16(45823), + 74: uint16(45824), + 75: uint16(45825), + 76: uint16(45828), + 77: uint16(45832), + 78: uint16(45840), + 79: uint16(45841), + 80: uint16(45843), + 81: uint16(45844), + 82: uint16(45845), + 83: uint16(45852), + 84: uint16(45908), + 85: uint16(45909), + 86: uint16(45910), + 87: uint16(45912), + 88: uint16(45915), + 89: uint16(45916), + 90: uint16(45918), + 91: uint16(45919), + 92: uint16(45924), + 93: uint16(45925), + }, + 20: { + 0: uint16(45927), + 1: uint16(45929), + 2: uint16(45931), + 3: uint16(45934), + 4: uint16(45936), + 5: uint16(45937), + 6: uint16(45940), + 7: uint16(45944), + 8: uint16(45952), + 9: uint16(45953), + 10: uint16(45955), + 11: uint16(45956), + 12: uint16(45957), + 13: uint16(45964), + 14: uint16(45968), + 15: uint16(45972), + 16: uint16(45984), + 17: uint16(45985), + 18: uint16(45992), + 19: uint16(45996), + 20: uint16(46020), + 21: uint16(46021), + 22: uint16(46024), + 23: uint16(46027), + 24: uint16(46028), + 25: uint16(46030), + 26: uint16(46032), + 27: uint16(46036), + 28: uint16(46037), + 29: uint16(46039), + 30: uint16(46041), + 31: uint16(46043), + 32: uint16(46045), + 33: uint16(46048), + 34: uint16(46052), + 35: uint16(46056), + 36: uint16(46076), + 37: uint16(46096), + 38: uint16(46104), + 39: uint16(46108), + 40: uint16(46112), + 41: uint16(46120), + 42: uint16(46121), + 43: uint16(46123), + 44: uint16(46132), + 45: uint16(46160), + 46: uint16(46161), + 47: uint16(46164), + 48: uint16(46168), + 49: uint16(46176), + 50: uint16(46177), + 51: uint16(46179), + 52: uint16(46181), + 53: uint16(46188), + 54: uint16(46208), + 55: uint16(46216), + 56: uint16(46237), + 57: uint16(46244), + 58: uint16(46248), + 59: uint16(46252), + 60: uint16(46261), + 61: uint16(46263), + 62: uint16(46265), + 63: uint16(46272), + 64: uint16(46276), + 65: uint16(46280), + 66: uint16(46288), + 67: uint16(46293), + 68: uint16(46300), + 69: uint16(46301), + 70: uint16(46304), + 71: uint16(46307), + 72: uint16(46308), + 73: uint16(46310), + 74: uint16(46316), + 75: uint16(46317), + 76: uint16(46319), + 77: uint16(46321), + 78: uint16(46328), + 79: uint16(46356), + 80: uint16(46357), + 81: uint16(46360), + 82: uint16(46363), + 83: uint16(46364), + 84: uint16(46372), + 85: uint16(46373), + 86: uint16(46375), + 87: uint16(46376), + 88: uint16(46377), + 89: uint16(46378), + 90: uint16(46384), + 91: uint16(46385), + 92: uint16(46388), + 93: uint16(46392), + }, + 21: { + 0: uint16(46400), + 1: uint16(46401), + 2: uint16(46403), + 3: uint16(46404), + 4: uint16(46405), + 5: uint16(46411), + 6: uint16(46412), + 7: uint16(46413), + 8: uint16(46416), + 9: uint16(46420), + 10: uint16(46428), + 11: uint16(46429), + 12: uint16(46431), + 13: uint16(46432), + 14: uint16(46433), + 15: uint16(46496), + 16: uint16(46497), + 17: uint16(46500), + 18: uint16(46504), + 19: uint16(46506), + 20: uint16(46507), + 21: uint16(46512), + 22: uint16(46513), + 23: uint16(46515), + 24: uint16(46516), + 25: uint16(46517), + 26: uint16(46523), + 27: uint16(46524), + 28: uint16(46525), + 29: uint16(46528), + 30: uint16(46532), + 31: uint16(46540), + 32: uint16(46541), + 33: uint16(46543), + 34: uint16(46544), + 35: uint16(46545), + 36: uint16(46552), + 37: uint16(46572), + 38: uint16(46608), + 39: uint16(46609), + 40: uint16(46612), + 41: uint16(46616), + 42: uint16(46629), + 43: uint16(46636), + 44: uint16(46644), + 45: uint16(46664), + 46: uint16(46692), + 47: uint16(46696), + 48: uint16(46748), + 49: uint16(46749), + 50: uint16(46752), + 51: uint16(46756), + 52: uint16(46763), + 53: uint16(46764), + 54: uint16(46769), + 55: uint16(46804), + 56: uint16(46832), + 57: uint16(46836), + 58: uint16(46840), + 59: uint16(46848), + 60: uint16(46849), + 61: uint16(46853), + 62: uint16(46888), + 63: uint16(46889), + 64: uint16(46892), + 65: uint16(46895), + 66: uint16(46896), + 67: uint16(46904), + 68: uint16(46905), + 69: uint16(46907), + 70: uint16(46916), + 71: uint16(46920), + 72: uint16(46924), + 73: uint16(46932), + 74: uint16(46933), + 75: uint16(46944), + 76: uint16(46948), + 77: uint16(46952), + 78: uint16(46960), + 79: uint16(46961), + 80: uint16(46963), + 81: uint16(46965), + 82: uint16(46972), + 83: uint16(46973), + 84: uint16(46976), + 85: uint16(46980), + 86: uint16(46988), + 87: uint16(46989), + 88: uint16(46991), + 89: uint16(46992), + 90: uint16(46993), + 91: uint16(46994), + 92: uint16(46998), + 93: uint16(46999), + }, + 22: { + 0: uint16(47000), + 1: uint16(47001), + 2: uint16(47004), + 3: uint16(47008), + 4: uint16(47016), + 5: uint16(47017), + 6: uint16(47019), + 7: uint16(47020), + 8: uint16(47021), + 9: uint16(47028), + 10: uint16(47029), + 11: uint16(47032), + 12: uint16(47047), + 13: uint16(47049), + 14: uint16(47084), + 15: uint16(47085), + 16: uint16(47088), + 17: uint16(47092), + 18: uint16(47100), + 19: uint16(47101), + 20: uint16(47103), + 21: uint16(47104), + 22: uint16(47105), + 23: uint16(47111), + 24: uint16(47112), + 25: uint16(47113), + 26: uint16(47116), + 27: uint16(47120), + 28: uint16(47128), + 29: uint16(47129), + 30: uint16(47131), + 31: uint16(47133), + 32: uint16(47140), + 33: uint16(47141), + 34: uint16(47144), + 35: uint16(47148), + 36: uint16(47156), + 37: uint16(47157), + 38: uint16(47159), + 39: uint16(47160), + 40: uint16(47161), + 41: uint16(47168), + 42: uint16(47172), + 43: uint16(47185), + 44: uint16(47187), + 45: uint16(47196), + 46: uint16(47197), + 47: uint16(47200), + 48: uint16(47204), + 49: uint16(47212), + 50: uint16(47213), + 51: uint16(47215), + 52: uint16(47217), + 53: uint16(47224), + 54: uint16(47228), + 55: uint16(47245), + 56: uint16(47272), + 57: uint16(47280), + 58: uint16(47284), + 59: uint16(47288), + 60: uint16(47296), + 61: uint16(47297), + 62: uint16(47299), + 63: uint16(47301), + 64: uint16(47308), + 65: uint16(47312), + 66: uint16(47316), + 67: uint16(47325), + 68: uint16(47327), + 69: uint16(47329), + 70: uint16(47336), + 71: uint16(47337), + 72: uint16(47340), + 73: uint16(47344), + 74: uint16(47352), + 75: uint16(47353), + 76: uint16(47355), + 77: uint16(47357), + 78: uint16(47364), + 79: uint16(47384), + 80: uint16(47392), + 81: uint16(47420), + 82: uint16(47421), + 83: uint16(47424), + 84: uint16(47428), + 85: uint16(47436), + 86: uint16(47439), + 87: uint16(47441), + 88: uint16(47448), + 89: uint16(47449), + 90: uint16(47452), + 91: uint16(47456), + 92: uint16(47464), + 93: uint16(47465), + }, + 23: { + 0: uint16(47467), + 1: uint16(47469), + 2: uint16(47476), + 3: uint16(47477), + 4: uint16(47480), + 5: uint16(47484), + 6: uint16(47492), + 7: uint16(47493), + 8: uint16(47495), + 9: uint16(47497), + 10: uint16(47498), + 11: uint16(47501), + 12: uint16(47502), + 13: uint16(47532), + 14: uint16(47533), + 15: uint16(47536), + 16: uint16(47540), + 17: uint16(47548), + 18: uint16(47549), + 19: uint16(47551), + 20: uint16(47553), + 21: uint16(47560), + 22: uint16(47561), + 23: uint16(47564), + 24: uint16(47566), + 25: uint16(47567), + 26: uint16(47568), + 27: uint16(47569), + 28: uint16(47570), + 29: uint16(47576), + 30: uint16(47577), + 31: uint16(47579), + 32: uint16(47581), + 33: uint16(47582), + 34: uint16(47585), + 35: uint16(47587), + 36: uint16(47588), + 37: uint16(47589), + 38: uint16(47592), + 39: uint16(47596), + 40: uint16(47604), + 41: uint16(47605), + 42: uint16(47607), + 43: uint16(47608), + 44: uint16(47609), + 45: uint16(47610), + 46: uint16(47616), + 47: uint16(47617), + 48: uint16(47624), + 49: uint16(47637), + 50: uint16(47672), + 51: uint16(47673), + 52: uint16(47676), + 53: uint16(47680), + 54: uint16(47682), + 55: uint16(47688), + 56: uint16(47689), + 57: uint16(47691), + 58: uint16(47693), + 59: uint16(47694), + 60: uint16(47699), + 61: uint16(47700), + 62: uint16(47701), + 63: uint16(47704), + 64: uint16(47708), + 65: uint16(47716), + 66: uint16(47717), + 67: uint16(47719), + 68: uint16(47720), + 69: uint16(47721), + 70: uint16(47728), + 71: uint16(47729), + 72: uint16(47732), + 73: uint16(47736), + 74: uint16(47747), + 75: uint16(47748), + 76: uint16(47749), + 77: uint16(47751), + 78: uint16(47756), + 79: uint16(47784), + 80: uint16(47785), + 81: uint16(47787), + 82: uint16(47788), + 83: uint16(47792), + 84: uint16(47794), + 85: uint16(47800), + 86: uint16(47801), + 87: uint16(47803), + 88: uint16(47805), + 89: uint16(47812), + 90: uint16(47816), + 91: uint16(47832), + 92: uint16(47833), + 93: uint16(47868), + }, + 24: { + 0: uint16(47872), + 1: uint16(47876), + 2: uint16(47885), + 3: uint16(47887), + 4: uint16(47889), + 5: uint16(47896), + 6: uint16(47900), + 7: uint16(47904), + 8: uint16(47913), + 9: uint16(47915), + 10: uint16(47924), + 11: uint16(47925), + 12: uint16(47926), + 13: uint16(47928), + 14: uint16(47931), + 15: uint16(47932), + 16: uint16(47933), + 17: uint16(47934), + 18: uint16(47940), + 19: uint16(47941), + 20: uint16(47943), + 21: uint16(47945), + 22: uint16(47949), + 23: uint16(47951), + 24: uint16(47952), + 25: uint16(47956), + 26: uint16(47960), + 27: uint16(47969), + 28: uint16(47971), + 29: uint16(47980), + 30: uint16(48008), + 31: uint16(48012), + 32: uint16(48016), + 33: uint16(48036), + 34: uint16(48040), + 35: uint16(48044), + 36: uint16(48052), + 37: uint16(48055), + 38: uint16(48064), + 39: uint16(48068), + 40: uint16(48072), + 41: uint16(48080), + 42: uint16(48083), + 43: uint16(48120), + 44: uint16(48121), + 45: uint16(48124), + 46: uint16(48127), + 47: uint16(48128), + 48: uint16(48130), + 49: uint16(48136), + 50: uint16(48137), + 51: uint16(48139), + 52: uint16(48140), + 53: uint16(48141), + 54: uint16(48143), + 55: uint16(48145), + 56: uint16(48148), + 57: uint16(48149), + 58: uint16(48150), + 59: uint16(48151), + 60: uint16(48152), + 61: uint16(48155), + 62: uint16(48156), + 63: uint16(48157), + 64: uint16(48158), + 65: uint16(48159), + 66: uint16(48164), + 67: uint16(48165), + 68: uint16(48167), + 69: uint16(48169), + 70: uint16(48173), + 71: uint16(48176), + 72: uint16(48177), + 73: uint16(48180), + 74: uint16(48184), + 75: uint16(48192), + 76: uint16(48193), + 77: uint16(48195), + 78: uint16(48196), + 79: uint16(48197), + 80: uint16(48201), + 81: uint16(48204), + 82: uint16(48205), + 83: uint16(48208), + 84: uint16(48221), + 85: uint16(48260), + 86: uint16(48261), + 87: uint16(48264), + 88: uint16(48267), + 89: uint16(48268), + 90: uint16(48270), + 91: uint16(48276), + 92: uint16(48277), + 93: uint16(48279), + }, + 25: { + 0: uint16(48281), + 1: uint16(48282), + 2: uint16(48288), + 3: uint16(48289), + 4: uint16(48292), + 5: uint16(48295), + 6: uint16(48296), + 7: uint16(48304), + 8: uint16(48305), + 9: uint16(48307), + 10: uint16(48308), + 11: uint16(48309), + 12: uint16(48316), + 13: uint16(48317), + 14: uint16(48320), + 15: uint16(48324), + 16: uint16(48333), + 17: uint16(48335), + 18: uint16(48336), + 19: uint16(48337), + 20: uint16(48341), + 21: uint16(48344), + 22: uint16(48348), + 23: uint16(48372), + 24: uint16(48373), + 25: uint16(48374), + 26: uint16(48376), + 27: uint16(48380), + 28: uint16(48388), + 29: uint16(48389), + 30: uint16(48391), + 31: uint16(48393), + 32: uint16(48400), + 33: uint16(48404), + 34: uint16(48420), + 35: uint16(48428), + 36: uint16(48448), + 37: uint16(48456), + 38: uint16(48457), + 39: uint16(48460), + 40: uint16(48464), + 41: uint16(48472), + 42: uint16(48473), + 43: uint16(48484), + 44: uint16(48488), + 45: uint16(48512), + 46: uint16(48513), + 47: uint16(48516), + 48: uint16(48519), + 49: uint16(48520), + 50: uint16(48521), + 51: uint16(48522), + 52: uint16(48528), + 53: uint16(48529), + 54: uint16(48531), + 55: uint16(48533), + 56: uint16(48537), + 57: uint16(48538), + 58: uint16(48540), + 59: uint16(48548), + 60: uint16(48560), + 61: uint16(48568), + 62: uint16(48596), + 63: uint16(48597), + 64: uint16(48600), + 65: uint16(48604), + 66: uint16(48617), + 67: uint16(48624), + 68: uint16(48628), + 69: uint16(48632), + 70: uint16(48640), + 71: uint16(48643), + 72: uint16(48645), + 73: uint16(48652), + 74: uint16(48653), + 75: uint16(48656), + 76: uint16(48660), + 77: uint16(48668), + 78: uint16(48669), + 79: uint16(48671), + 80: uint16(48708), + 81: uint16(48709), + 82: uint16(48712), + 83: uint16(48716), + 84: uint16(48718), + 85: uint16(48724), + 86: uint16(48725), + 87: uint16(48727), + 88: uint16(48729), + 89: uint16(48730), + 90: uint16(48731), + 91: uint16(48736), + 92: uint16(48737), + 93: uint16(48740), + }, + 26: { + 0: uint16(48744), + 1: uint16(48746), + 2: uint16(48752), + 3: uint16(48753), + 4: uint16(48755), + 5: uint16(48756), + 6: uint16(48757), + 7: uint16(48763), + 8: uint16(48764), + 9: uint16(48765), + 10: uint16(48768), + 11: uint16(48772), + 12: uint16(48780), + 13: uint16(48781), + 14: uint16(48783), + 15: uint16(48784), + 16: uint16(48785), + 17: uint16(48792), + 18: uint16(48793), + 19: uint16(48808), + 20: uint16(48848), + 21: uint16(48849), + 22: uint16(48852), + 23: uint16(48855), + 24: uint16(48856), + 25: uint16(48864), + 26: uint16(48867), + 27: uint16(48868), + 28: uint16(48869), + 29: uint16(48876), + 30: uint16(48897), + 31: uint16(48904), + 32: uint16(48905), + 33: uint16(48920), + 34: uint16(48921), + 35: uint16(48923), + 36: uint16(48924), + 37: uint16(48925), + 38: uint16(48960), + 39: uint16(48961), + 40: uint16(48964), + 41: uint16(48968), + 42: uint16(48976), + 43: uint16(48977), + 44: uint16(48981), + 45: uint16(49044), + 46: uint16(49072), + 47: uint16(49093), + 48: uint16(49100), + 49: uint16(49101), + 50: uint16(49104), + 51: uint16(49108), + 52: uint16(49116), + 53: uint16(49119), + 54: uint16(49121), + 55: uint16(49212), + 56: uint16(49233), + 57: uint16(49240), + 58: uint16(49244), + 59: uint16(49248), + 60: uint16(49256), + 61: uint16(49257), + 62: uint16(49296), + 63: uint16(49297), + 64: uint16(49300), + 65: uint16(49304), + 66: uint16(49312), + 67: uint16(49313), + 68: uint16(49315), + 69: uint16(49317), + 70: uint16(49324), + 71: uint16(49325), + 72: uint16(49327), + 73: uint16(49328), + 74: uint16(49331), + 75: uint16(49332), + 76: uint16(49333), + 77: uint16(49334), + 78: uint16(49340), + 79: uint16(49341), + 80: uint16(49343), + 81: uint16(49344), + 82: uint16(49345), + 83: uint16(49349), + 84: uint16(49352), + 85: uint16(49353), + 86: uint16(49356), + 87: uint16(49360), + 88: uint16(49368), + 89: uint16(49369), + 90: uint16(49371), + 91: uint16(49372), + 92: uint16(49373), + 93: uint16(49380), + }, + 27: { + 0: uint16(49381), + 1: uint16(49384), + 2: uint16(49388), + 3: uint16(49396), + 4: uint16(49397), + 5: uint16(49399), + 6: uint16(49401), + 7: uint16(49408), + 8: uint16(49412), + 9: uint16(49416), + 10: uint16(49424), + 11: uint16(49429), + 12: uint16(49436), + 13: uint16(49437), + 14: uint16(49438), + 15: uint16(49439), + 16: uint16(49440), + 17: uint16(49443), + 18: uint16(49444), + 19: uint16(49446), + 20: uint16(49447), + 21: uint16(49452), + 22: uint16(49453), + 23: uint16(49455), + 24: uint16(49456), + 25: uint16(49457), + 26: uint16(49462), + 27: uint16(49464), + 28: uint16(49465), + 29: uint16(49468), + 30: uint16(49472), + 31: uint16(49480), + 32: uint16(49481), + 33: uint16(49483), + 34: uint16(49484), + 35: uint16(49485), + 36: uint16(49492), + 37: uint16(49493), + 38: uint16(49496), + 39: uint16(49500), + 40: uint16(49508), + 41: uint16(49509), + 42: uint16(49511), + 43: uint16(49512), + 44: uint16(49513), + 45: uint16(49520), + 46: uint16(49524), + 47: uint16(49528), + 48: uint16(49541), + 49: uint16(49548), + 50: uint16(49549), + 51: uint16(49550), + 52: uint16(49552), + 53: uint16(49556), + 54: uint16(49558), + 55: uint16(49564), + 56: uint16(49565), + 57: uint16(49567), + 58: uint16(49569), + 59: uint16(49573), + 60: uint16(49576), + 61: uint16(49577), + 62: uint16(49580), + 63: uint16(49584), + 64: uint16(49597), + 65: uint16(49604), + 66: uint16(49608), + 67: uint16(49612), + 68: uint16(49620), + 69: uint16(49623), + 70: uint16(49624), + 71: uint16(49632), + 72: uint16(49636), + 73: uint16(49640), + 74: uint16(49648), + 75: uint16(49649), + 76: uint16(49651), + 77: uint16(49660), + 78: uint16(49661), + 79: uint16(49664), + 80: uint16(49668), + 81: uint16(49676), + 82: uint16(49677), + 83: uint16(49679), + 84: uint16(49681), + 85: uint16(49688), + 86: uint16(49689), + 87: uint16(49692), + 88: uint16(49695), + 89: uint16(49696), + 90: uint16(49704), + 91: uint16(49705), + 92: uint16(49707), + 93: uint16(49709), + }, + 28: { + 0: uint16(49711), + 1: uint16(49713), + 2: uint16(49714), + 3: uint16(49716), + 4: uint16(49736), + 5: uint16(49744), + 6: uint16(49745), + 7: uint16(49748), + 8: uint16(49752), + 9: uint16(49760), + 10: uint16(49765), + 11: uint16(49772), + 12: uint16(49773), + 13: uint16(49776), + 14: uint16(49780), + 15: uint16(49788), + 16: uint16(49789), + 17: uint16(49791), + 18: uint16(49793), + 19: uint16(49800), + 20: uint16(49801), + 21: uint16(49808), + 22: uint16(49816), + 23: uint16(49819), + 24: uint16(49821), + 25: uint16(49828), + 26: uint16(49829), + 27: uint16(49832), + 28: uint16(49836), + 29: uint16(49837), + 30: uint16(49844), + 31: uint16(49845), + 32: uint16(49847), + 33: uint16(49849), + 34: uint16(49884), + 35: uint16(49885), + 36: uint16(49888), + 37: uint16(49891), + 38: uint16(49892), + 39: uint16(49899), + 40: uint16(49900), + 41: uint16(49901), + 42: uint16(49903), + 43: uint16(49905), + 44: uint16(49910), + 45: uint16(49912), + 46: uint16(49913), + 47: uint16(49915), + 48: uint16(49916), + 49: uint16(49920), + 50: uint16(49928), + 51: uint16(49929), + 52: uint16(49932), + 53: uint16(49933), + 54: uint16(49939), + 55: uint16(49940), + 56: uint16(49941), + 57: uint16(49944), + 58: uint16(49948), + 59: uint16(49956), + 60: uint16(49957), + 61: uint16(49960), + 62: uint16(49961), + 63: uint16(49989), + 64: uint16(50024), + 65: uint16(50025), + 66: uint16(50028), + 67: uint16(50032), + 68: uint16(50034), + 69: uint16(50040), + 70: uint16(50041), + 71: uint16(50044), + 72: uint16(50045), + 73: uint16(50052), + 74: uint16(50056), + 75: uint16(50060), + 76: uint16(50112), + 77: uint16(50136), + 78: uint16(50137), + 79: uint16(50140), + 80: uint16(50143), + 81: uint16(50144), + 82: uint16(50146), + 83: uint16(50152), + 84: uint16(50153), + 85: uint16(50157), + 86: uint16(50164), + 87: uint16(50165), + 88: uint16(50168), + 89: uint16(50184), + 90: uint16(50192), + 91: uint16(50212), + 92: uint16(50220), + 93: uint16(50224), + }, + 29: { + 0: uint16(50228), + 1: uint16(50236), + 2: uint16(50237), + 3: uint16(50248), + 4: uint16(50276), + 5: uint16(50277), + 6: uint16(50280), + 7: uint16(50284), + 8: uint16(50292), + 9: uint16(50293), + 10: uint16(50297), + 11: uint16(50304), + 12: uint16(50324), + 13: uint16(50332), + 14: uint16(50360), + 15: uint16(50364), + 16: uint16(50409), + 17: uint16(50416), + 18: uint16(50417), + 19: uint16(50420), + 20: uint16(50424), + 21: uint16(50426), + 22: uint16(50431), + 23: uint16(50432), + 24: uint16(50433), + 25: uint16(50444), + 26: uint16(50448), + 27: uint16(50452), + 28: uint16(50460), + 29: uint16(50472), + 30: uint16(50473), + 31: uint16(50476), + 32: uint16(50480), + 33: uint16(50488), + 34: uint16(50489), + 35: uint16(50491), + 36: uint16(50493), + 37: uint16(50500), + 38: uint16(50501), + 39: uint16(50504), + 40: uint16(50505), + 41: uint16(50506), + 42: uint16(50508), + 43: uint16(50509), + 44: uint16(50510), + 45: uint16(50515), + 46: uint16(50516), + 47: uint16(50517), + 48: uint16(50519), + 49: uint16(50520), + 50: uint16(50521), + 51: uint16(50525), + 52: uint16(50526), + 53: uint16(50528), + 54: uint16(50529), + 55: uint16(50532), + 56: uint16(50536), + 57: uint16(50544), + 58: uint16(50545), + 59: uint16(50547), + 60: uint16(50548), + 61: uint16(50549), + 62: uint16(50556), + 63: uint16(50557), + 64: uint16(50560), + 65: uint16(50564), + 66: uint16(50567), + 67: uint16(50572), + 68: uint16(50573), + 69: uint16(50575), + 70: uint16(50577), + 71: uint16(50581), + 72: uint16(50583), + 73: uint16(50584), + 74: uint16(50588), + 75: uint16(50592), + 76: uint16(50601), + 77: uint16(50612), + 78: uint16(50613), + 79: uint16(50616), + 80: uint16(50617), + 81: uint16(50619), + 82: uint16(50620), + 83: uint16(50621), + 84: uint16(50622), + 85: uint16(50628), + 86: uint16(50629), + 87: uint16(50630), + 88: uint16(50631), + 89: uint16(50632), + 90: uint16(50633), + 91: uint16(50634), + 92: uint16(50636), + 93: uint16(50638), + }, + 30: { + 0: uint16(50640), + 1: uint16(50641), + 2: uint16(50644), + 3: uint16(50648), + 4: uint16(50656), + 5: uint16(50657), + 6: uint16(50659), + 7: uint16(50661), + 8: uint16(50668), + 9: uint16(50669), + 10: uint16(50670), + 11: uint16(50672), + 12: uint16(50676), + 13: uint16(50678), + 14: uint16(50679), + 15: uint16(50684), + 16: uint16(50685), + 17: uint16(50686), + 18: uint16(50687), + 19: uint16(50688), + 20: uint16(50689), + 21: uint16(50693), + 22: uint16(50694), + 23: uint16(50695), + 24: uint16(50696), + 25: uint16(50700), + 26: uint16(50704), + 27: uint16(50712), + 28: uint16(50713), + 29: uint16(50715), + 30: uint16(50716), + 31: uint16(50724), + 32: uint16(50725), + 33: uint16(50728), + 34: uint16(50732), + 35: uint16(50733), + 36: uint16(50734), + 37: uint16(50736), + 38: uint16(50739), + 39: uint16(50740), + 40: uint16(50741), + 41: uint16(50743), + 42: uint16(50745), + 43: uint16(50747), + 44: uint16(50752), + 45: uint16(50753), + 46: uint16(50756), + 47: uint16(50760), + 48: uint16(50768), + 49: uint16(50769), + 50: uint16(50771), + 51: uint16(50772), + 52: uint16(50773), + 53: uint16(50780), + 54: uint16(50781), + 55: uint16(50784), + 56: uint16(50796), + 57: uint16(50799), + 58: uint16(50801), + 59: uint16(50808), + 60: uint16(50809), + 61: uint16(50812), + 62: uint16(50816), + 63: uint16(50824), + 64: uint16(50825), + 65: uint16(50827), + 66: uint16(50829), + 67: uint16(50836), + 68: uint16(50837), + 69: uint16(50840), + 70: uint16(50844), + 71: uint16(50852), + 72: uint16(50853), + 73: uint16(50855), + 74: uint16(50857), + 75: uint16(50864), + 76: uint16(50865), + 77: uint16(50868), + 78: uint16(50872), + 79: uint16(50873), + 80: uint16(50874), + 81: uint16(50880), + 82: uint16(50881), + 83: uint16(50883), + 84: uint16(50885), + 85: uint16(50892), + 86: uint16(50893), + 87: uint16(50896), + 88: uint16(50900), + 89: uint16(50908), + 90: uint16(50909), + 91: uint16(50912), + 92: uint16(50913), + 93: uint16(50920), + }, + 31: { + 0: uint16(50921), + 1: uint16(50924), + 2: uint16(50928), + 3: uint16(50936), + 4: uint16(50937), + 5: uint16(50941), + 6: uint16(50948), + 7: uint16(50949), + 8: uint16(50952), + 9: uint16(50956), + 10: uint16(50964), + 11: uint16(50965), + 12: uint16(50967), + 13: uint16(50969), + 14: uint16(50976), + 15: uint16(50977), + 16: uint16(50980), + 17: uint16(50984), + 18: uint16(50992), + 19: uint16(50993), + 20: uint16(50995), + 21: uint16(50997), + 22: uint16(50999), + 23: uint16(51004), + 24: uint16(51005), + 25: uint16(51008), + 26: uint16(51012), + 27: uint16(51018), + 28: uint16(51020), + 29: uint16(51021), + 30: uint16(51023), + 31: uint16(51025), + 32: uint16(51026), + 33: uint16(51027), + 34: uint16(51028), + 35: uint16(51029), + 36: uint16(51030), + 37: uint16(51031), + 38: uint16(51032), + 39: uint16(51036), + 40: uint16(51040), + 41: uint16(51048), + 42: uint16(51051), + 43: uint16(51060), + 44: uint16(51061), + 45: uint16(51064), + 46: uint16(51068), + 47: uint16(51069), + 48: uint16(51070), + 49: uint16(51075), + 50: uint16(51076), + 51: uint16(51077), + 52: uint16(51079), + 53: uint16(51080), + 54: uint16(51081), + 55: uint16(51082), + 56: uint16(51086), + 57: uint16(51088), + 58: uint16(51089), + 59: uint16(51092), + 60: uint16(51094), + 61: uint16(51095), + 62: uint16(51096), + 63: uint16(51098), + 64: uint16(51104), + 65: uint16(51105), + 66: uint16(51107), + 67: uint16(51108), + 68: uint16(51109), + 69: uint16(51110), + 70: uint16(51116), + 71: uint16(51117), + 72: uint16(51120), + 73: uint16(51124), + 74: uint16(51132), + 75: uint16(51133), + 76: uint16(51135), + 77: uint16(51136), + 78: uint16(51137), + 79: uint16(51144), + 80: uint16(51145), + 81: uint16(51148), + 82: uint16(51150), + 83: uint16(51152), + 84: uint16(51160), + 85: uint16(51165), + 86: uint16(51172), + 87: uint16(51176), + 88: uint16(51180), + 89: uint16(51200), + 90: uint16(51201), + 91: uint16(51204), + 92: uint16(51208), + 93: uint16(51210), + }, + 32: { + 0: uint16(51216), + 1: uint16(51217), + 2: uint16(51219), + 3: uint16(51221), + 4: uint16(51222), + 5: uint16(51228), + 6: uint16(51229), + 7: uint16(51232), + 8: uint16(51236), + 9: uint16(51244), + 10: uint16(51245), + 11: uint16(51247), + 12: uint16(51249), + 13: uint16(51256), + 14: uint16(51260), + 15: uint16(51264), + 16: uint16(51272), + 17: uint16(51273), + 18: uint16(51276), + 19: uint16(51277), + 20: uint16(51284), + 21: uint16(51312), + 22: uint16(51313), + 23: uint16(51316), + 24: uint16(51320), + 25: uint16(51322), + 26: uint16(51328), + 27: uint16(51329), + 28: uint16(51331), + 29: uint16(51333), + 30: uint16(51334), + 31: uint16(51335), + 32: uint16(51339), + 33: uint16(51340), + 34: uint16(51341), + 35: uint16(51348), + 36: uint16(51357), + 37: uint16(51359), + 38: uint16(51361), + 39: uint16(51368), + 40: uint16(51388), + 41: uint16(51389), + 42: uint16(51396), + 43: uint16(51400), + 44: uint16(51404), + 45: uint16(51412), + 46: uint16(51413), + 47: uint16(51415), + 48: uint16(51417), + 49: uint16(51424), + 50: uint16(51425), + 51: uint16(51428), + 52: uint16(51445), + 53: uint16(51452), + 54: uint16(51453), + 55: uint16(51456), + 56: uint16(51460), + 57: uint16(51461), + 58: uint16(51462), + 59: uint16(51468), + 60: uint16(51469), + 61: uint16(51471), + 62: uint16(51473), + 63: uint16(51480), + 64: uint16(51500), + 65: uint16(51508), + 66: uint16(51536), + 67: uint16(51537), + 68: uint16(51540), + 69: uint16(51544), + 70: uint16(51552), + 71: uint16(51553), + 72: uint16(51555), + 73: uint16(51564), + 74: uint16(51568), + 75: uint16(51572), + 76: uint16(51580), + 77: uint16(51592), + 78: uint16(51593), + 79: uint16(51596), + 80: uint16(51600), + 81: uint16(51608), + 82: uint16(51609), + 83: uint16(51611), + 84: uint16(51613), + 85: uint16(51648), + 86: uint16(51649), + 87: uint16(51652), + 88: uint16(51655), + 89: uint16(51656), + 90: uint16(51658), + 91: uint16(51664), + 92: uint16(51665), + 93: uint16(51667), + }, + 33: { + 0: uint16(51669), + 1: uint16(51670), + 2: uint16(51673), + 3: uint16(51674), + 4: uint16(51676), + 5: uint16(51677), + 6: uint16(51680), + 7: uint16(51682), + 8: uint16(51684), + 9: uint16(51687), + 10: uint16(51692), + 11: uint16(51693), + 12: uint16(51695), + 13: uint16(51696), + 14: uint16(51697), + 15: uint16(51704), + 16: uint16(51705), + 17: uint16(51708), + 18: uint16(51712), + 19: uint16(51720), + 20: uint16(51721), + 21: uint16(51723), + 22: uint16(51724), + 23: uint16(51725), + 24: uint16(51732), + 25: uint16(51736), + 26: uint16(51753), + 27: uint16(51788), + 28: uint16(51789), + 29: uint16(51792), + 30: uint16(51796), + 31: uint16(51804), + 32: uint16(51805), + 33: uint16(51807), + 34: uint16(51808), + 35: uint16(51809), + 36: uint16(51816), + 37: uint16(51837), + 38: uint16(51844), + 39: uint16(51864), + 40: uint16(51900), + 41: uint16(51901), + 42: uint16(51904), + 43: uint16(51908), + 44: uint16(51916), + 45: uint16(51917), + 46: uint16(51919), + 47: uint16(51921), + 48: uint16(51923), + 49: uint16(51928), + 50: uint16(51929), + 51: uint16(51936), + 52: uint16(51948), + 53: uint16(51956), + 54: uint16(51976), + 55: uint16(51984), + 56: uint16(51988), + 57: uint16(51992), + 58: uint16(52000), + 59: uint16(52001), + 60: uint16(52033), + 61: uint16(52040), + 62: uint16(52041), + 63: uint16(52044), + 64: uint16(52048), + 65: uint16(52056), + 66: uint16(52057), + 67: uint16(52061), + 68: uint16(52068), + 69: uint16(52088), + 70: uint16(52089), + 71: uint16(52124), + 72: uint16(52152), + 73: uint16(52180), + 74: uint16(52196), + 75: uint16(52199), + 76: uint16(52201), + 77: uint16(52236), + 78: uint16(52237), + 79: uint16(52240), + 80: uint16(52244), + 81: uint16(52252), + 82: uint16(52253), + 83: uint16(52257), + 84: uint16(52258), + 85: uint16(52263), + 86: uint16(52264), + 87: uint16(52265), + 88: uint16(52268), + 89: uint16(52270), + 90: uint16(52272), + 91: uint16(52280), + 92: uint16(52281), + 93: uint16(52283), + }, + 34: { + 0: uint16(52284), + 1: uint16(52285), + 2: uint16(52286), + 3: uint16(52292), + 4: uint16(52293), + 5: uint16(52296), + 6: uint16(52300), + 7: uint16(52308), + 8: uint16(52309), + 9: uint16(52311), + 10: uint16(52312), + 11: uint16(52313), + 12: uint16(52320), + 13: uint16(52324), + 14: uint16(52326), + 15: uint16(52328), + 16: uint16(52336), + 17: uint16(52341), + 18: uint16(52376), + 19: uint16(52377), + 20: uint16(52380), + 21: uint16(52384), + 22: uint16(52392), + 23: uint16(52393), + 24: uint16(52395), + 25: uint16(52396), + 26: uint16(52397), + 27: uint16(52404), + 28: uint16(52405), + 29: uint16(52408), + 30: uint16(52412), + 31: uint16(52420), + 32: uint16(52421), + 33: uint16(52423), + 34: uint16(52425), + 35: uint16(52432), + 36: uint16(52436), + 37: uint16(52452), + 38: uint16(52460), + 39: uint16(52464), + 40: uint16(52481), + 41: uint16(52488), + 42: uint16(52489), + 43: uint16(52492), + 44: uint16(52496), + 45: uint16(52504), + 46: uint16(52505), + 47: uint16(52507), + 48: uint16(52509), + 49: uint16(52516), + 50: uint16(52520), + 51: uint16(52524), + 52: uint16(52537), + 53: uint16(52572), + 54: uint16(52576), + 55: uint16(52580), + 56: uint16(52588), + 57: uint16(52589), + 58: uint16(52591), + 59: uint16(52593), + 60: uint16(52600), + 61: uint16(52616), + 62: uint16(52628), + 63: uint16(52629), + 64: uint16(52632), + 65: uint16(52636), + 66: uint16(52644), + 67: uint16(52645), + 68: uint16(52647), + 69: uint16(52649), + 70: uint16(52656), + 71: uint16(52676), + 72: uint16(52684), + 73: uint16(52688), + 74: uint16(52712), + 75: uint16(52716), + 76: uint16(52720), + 77: uint16(52728), + 78: uint16(52729), + 79: uint16(52731), + 80: uint16(52733), + 81: uint16(52740), + 82: uint16(52744), + 83: uint16(52748), + 84: uint16(52756), + 85: uint16(52761), + 86: uint16(52768), + 87: uint16(52769), + 88: uint16(52772), + 89: uint16(52776), + 90: uint16(52784), + 91: uint16(52785), + 92: uint16(52787), + 93: uint16(52789), + }, + 35: { + 0: uint16(52824), + 1: uint16(52825), + 2: uint16(52828), + 3: uint16(52831), + 4: uint16(52832), + 5: uint16(52833), + 6: uint16(52840), + 7: uint16(52841), + 8: uint16(52843), + 9: uint16(52845), + 10: uint16(52852), + 11: uint16(52853), + 12: uint16(52856), + 13: uint16(52860), + 14: uint16(52868), + 15: uint16(52869), + 16: uint16(52871), + 17: uint16(52873), + 18: uint16(52880), + 19: uint16(52881), + 20: uint16(52884), + 21: uint16(52888), + 22: uint16(52896), + 23: uint16(52897), + 24: uint16(52899), + 25: uint16(52900), + 26: uint16(52901), + 27: uint16(52908), + 28: uint16(52909), + 29: uint16(52929), + 30: uint16(52964), + 31: uint16(52965), + 32: uint16(52968), + 33: uint16(52971), + 34: uint16(52972), + 35: uint16(52980), + 36: uint16(52981), + 37: uint16(52983), + 38: uint16(52984), + 39: uint16(52985), + 40: uint16(52992), + 41: uint16(52993), + 42: uint16(52996), + 43: uint16(53000), + 44: uint16(53008), + 45: uint16(53009), + 46: uint16(53011), + 47: uint16(53013), + 48: uint16(53020), + 49: uint16(53024), + 50: uint16(53028), + 51: uint16(53036), + 52: uint16(53037), + 53: uint16(53039), + 54: uint16(53040), + 55: uint16(53041), + 56: uint16(53048), + 57: uint16(53076), + 58: uint16(53077), + 59: uint16(53080), + 60: uint16(53084), + 61: uint16(53092), + 62: uint16(53093), + 63: uint16(53095), + 64: uint16(53097), + 65: uint16(53104), + 66: uint16(53105), + 67: uint16(53108), + 68: uint16(53112), + 69: uint16(53120), + 70: uint16(53125), + 71: uint16(53132), + 72: uint16(53153), + 73: uint16(53160), + 74: uint16(53168), + 75: uint16(53188), + 76: uint16(53216), + 77: uint16(53217), + 78: uint16(53220), + 79: uint16(53224), + 80: uint16(53232), + 81: uint16(53233), + 82: uint16(53235), + 83: uint16(53237), + 84: uint16(53244), + 85: uint16(53248), + 86: uint16(53252), + 87: uint16(53265), + 88: uint16(53272), + 89: uint16(53293), + 90: uint16(53300), + 91: uint16(53301), + 92: uint16(53304), + 93: uint16(53308), + }, + 36: { + 0: uint16(53316), + 1: uint16(53317), + 2: uint16(53319), + 3: uint16(53321), + 4: uint16(53328), + 5: uint16(53332), + 6: uint16(53336), + 7: uint16(53344), + 8: uint16(53356), + 9: uint16(53357), + 10: uint16(53360), + 11: uint16(53364), + 12: uint16(53372), + 13: uint16(53373), + 14: uint16(53377), + 15: uint16(53412), + 16: uint16(53413), + 17: uint16(53416), + 18: uint16(53420), + 19: uint16(53428), + 20: uint16(53429), + 21: uint16(53431), + 22: uint16(53433), + 23: uint16(53440), + 24: uint16(53441), + 25: uint16(53444), + 26: uint16(53448), + 27: uint16(53449), + 28: uint16(53456), + 29: uint16(53457), + 30: uint16(53459), + 31: uint16(53460), + 32: uint16(53461), + 33: uint16(53468), + 34: uint16(53469), + 35: uint16(53472), + 36: uint16(53476), + 37: uint16(53484), + 38: uint16(53485), + 39: uint16(53487), + 40: uint16(53488), + 41: uint16(53489), + 42: uint16(53496), + 43: uint16(53517), + 44: uint16(53552), + 45: uint16(53553), + 46: uint16(53556), + 47: uint16(53560), + 48: uint16(53562), + 49: uint16(53568), + 50: uint16(53569), + 51: uint16(53571), + 52: uint16(53572), + 53: uint16(53573), + 54: uint16(53580), + 55: uint16(53581), + 56: uint16(53584), + 57: uint16(53588), + 58: uint16(53596), + 59: uint16(53597), + 60: uint16(53599), + 61: uint16(53601), + 62: uint16(53608), + 63: uint16(53612), + 64: uint16(53628), + 65: uint16(53636), + 66: uint16(53640), + 67: uint16(53664), + 68: uint16(53665), + 69: uint16(53668), + 70: uint16(53672), + 71: uint16(53680), + 72: uint16(53681), + 73: uint16(53683), + 74: uint16(53685), + 75: uint16(53690), + 76: uint16(53692), + 77: uint16(53696), + 78: uint16(53720), + 79: uint16(53748), + 80: uint16(53752), + 81: uint16(53767), + 82: uint16(53769), + 83: uint16(53776), + 84: uint16(53804), + 85: uint16(53805), + 86: uint16(53808), + 87: uint16(53812), + 88: uint16(53820), + 89: uint16(53821), + 90: uint16(53823), + 91: uint16(53825), + 92: uint16(53832), + 93: uint16(53852), + }, + 37: { + 0: uint16(53860), + 1: uint16(53888), + 2: uint16(53889), + 3: uint16(53892), + 4: uint16(53896), + 5: uint16(53904), + 6: uint16(53905), + 7: uint16(53909), + 8: uint16(53916), + 9: uint16(53920), + 10: uint16(53924), + 11: uint16(53932), + 12: uint16(53937), + 13: uint16(53944), + 14: uint16(53945), + 15: uint16(53948), + 16: uint16(53951), + 17: uint16(53952), + 18: uint16(53954), + 19: uint16(53960), + 20: uint16(53961), + 21: uint16(53963), + 22: uint16(53972), + 23: uint16(53976), + 24: uint16(53980), + 25: uint16(53988), + 26: uint16(53989), + 27: uint16(54000), + 28: uint16(54001), + 29: uint16(54004), + 30: uint16(54008), + 31: uint16(54016), + 32: uint16(54017), + 33: uint16(54019), + 34: uint16(54021), + 35: uint16(54028), + 36: uint16(54029), + 37: uint16(54030), + 38: uint16(54032), + 39: uint16(54036), + 40: uint16(54038), + 41: uint16(54044), + 42: uint16(54045), + 43: uint16(54047), + 44: uint16(54048), + 45: uint16(54049), + 46: uint16(54053), + 47: uint16(54056), + 48: uint16(54057), + 49: uint16(54060), + 50: uint16(54064), + 51: uint16(54072), + 52: uint16(54073), + 53: uint16(54075), + 54: uint16(54076), + 55: uint16(54077), + 56: uint16(54084), + 57: uint16(54085), + 58: uint16(54140), + 59: uint16(54141), + 60: uint16(54144), + 61: uint16(54148), + 62: uint16(54156), + 63: uint16(54157), + 64: uint16(54159), + 65: uint16(54160), + 66: uint16(54161), + 67: uint16(54168), + 68: uint16(54169), + 69: uint16(54172), + 70: uint16(54176), + 71: uint16(54184), + 72: uint16(54185), + 73: uint16(54187), + 74: uint16(54189), + 75: uint16(54196), + 76: uint16(54200), + 77: uint16(54204), + 78: uint16(54212), + 79: uint16(54213), + 80: uint16(54216), + 81: uint16(54217), + 82: uint16(54224), + 83: uint16(54232), + 84: uint16(54241), + 85: uint16(54243), + 86: uint16(54252), + 87: uint16(54253), + 88: uint16(54256), + 89: uint16(54260), + 90: uint16(54268), + 91: uint16(54269), + 92: uint16(54271), + 93: uint16(54273), + }, + 38: { + 0: uint16(54280), + 1: uint16(54301), + 2: uint16(54336), + 3: uint16(54340), + 4: uint16(54364), + 5: uint16(54368), + 6: uint16(54372), + 7: uint16(54381), + 8: uint16(54383), + 9: uint16(54392), + 10: uint16(54393), + 11: uint16(54396), + 12: uint16(54399), + 13: uint16(54400), + 14: uint16(54402), + 15: uint16(54408), + 16: uint16(54409), + 17: uint16(54411), + 18: uint16(54413), + 19: uint16(54420), + 20: uint16(54441), + 21: uint16(54476), + 22: uint16(54480), + 23: uint16(54484), + 24: uint16(54492), + 25: uint16(54495), + 26: uint16(54504), + 27: uint16(54508), + 28: uint16(54512), + 29: uint16(54520), + 30: uint16(54523), + 31: uint16(54525), + 32: uint16(54532), + 33: uint16(54536), + 34: uint16(54540), + 35: uint16(54548), + 36: uint16(54549), + 37: uint16(54551), + 38: uint16(54588), + 39: uint16(54589), + 40: uint16(54592), + 41: uint16(54596), + 42: uint16(54604), + 43: uint16(54605), + 44: uint16(54607), + 45: uint16(54609), + 46: uint16(54616), + 47: uint16(54617), + 48: uint16(54620), + 49: uint16(54624), + 50: uint16(54629), + 51: uint16(54632), + 52: uint16(54633), + 53: uint16(54635), + 54: uint16(54637), + 55: uint16(54644), + 56: uint16(54645), + 57: uint16(54648), + 58: uint16(54652), + 59: uint16(54660), + 60: uint16(54661), + 61: uint16(54663), + 62: uint16(54664), + 63: uint16(54665), + 64: uint16(54672), + 65: uint16(54693), + 66: uint16(54728), + 67: uint16(54729), + 68: uint16(54732), + 69: uint16(54736), + 70: uint16(54738), + 71: uint16(54744), + 72: uint16(54745), + 73: uint16(54747), + 74: uint16(54749), + 75: uint16(54756), + 76: uint16(54757), + 77: uint16(54760), + 78: uint16(54764), + 79: uint16(54772), + 80: uint16(54773), + 81: uint16(54775), + 82: uint16(54777), + 83: uint16(54784), + 84: uint16(54785), + 85: uint16(54788), + 86: uint16(54792), + 87: uint16(54800), + 88: uint16(54801), + 89: uint16(54803), + 90: uint16(54804), + 91: uint16(54805), + 92: uint16(54812), + 93: uint16(54816), + }, + 39: { + 0: uint16(54820), + 1: uint16(54829), + 2: uint16(54840), + 3: uint16(54841), + 4: uint16(54844), + 5: uint16(54848), + 6: uint16(54853), + 7: uint16(54856), + 8: uint16(54857), + 9: uint16(54859), + 10: uint16(54861), + 11: uint16(54865), + 12: uint16(54868), + 13: uint16(54869), + 14: uint16(54872), + 15: uint16(54876), + 16: uint16(54887), + 17: uint16(54889), + 18: uint16(54896), + 19: uint16(54897), + 20: uint16(54900), + 21: uint16(54915), + 22: uint16(54917), + 23: uint16(54924), + 24: uint16(54925), + 25: uint16(54928), + 26: uint16(54932), + 27: uint16(54941), + 28: uint16(54943), + 29: uint16(54945), + 30: uint16(54952), + 31: uint16(54956), + 32: uint16(54960), + 33: uint16(54969), + 34: uint16(54971), + 35: uint16(54980), + 36: uint16(54981), + 37: uint16(54984), + 38: uint16(54988), + 39: uint16(54993), + 40: uint16(54996), + 41: uint16(54999), + 42: uint16(55001), + 43: uint16(55008), + 44: uint16(55012), + 45: uint16(55016), + 46: uint16(55024), + 47: uint16(55029), + 48: uint16(55036), + 49: uint16(55037), + 50: uint16(55040), + 51: uint16(55044), + 52: uint16(55057), + 53: uint16(55064), + 54: uint16(55065), + 55: uint16(55068), + 56: uint16(55072), + 57: uint16(55080), + 58: uint16(55081), + 59: uint16(55083), + 60: uint16(55085), + 61: uint16(55092), + 62: uint16(55093), + 63: uint16(55096), + 64: uint16(55100), + 65: uint16(55108), + 66: uint16(55111), + 67: uint16(55113), + 68: uint16(55120), + 69: uint16(55121), + 70: uint16(55124), + 71: uint16(55126), + 72: uint16(55127), + 73: uint16(55128), + 74: uint16(55129), + 75: uint16(55136), + 76: uint16(55137), + 77: uint16(55139), + 78: uint16(55141), + 79: uint16(55145), + 80: uint16(55148), + 81: uint16(55152), + 82: uint16(55156), + 83: uint16(55164), + 84: uint16(55165), + 85: uint16(55169), + 86: uint16(55176), + 87: uint16(55177), + 88: uint16(55180), + 89: uint16(55184), + 90: uint16(55192), + 91: uint16(55193), + 92: uint16(55195), + 93: uint16(55197), + }, + 40: {}, + 41: { + 0: uint16(20285), + 1: uint16(20339), + 2: uint16(20551), + 3: uint16(20729), + 4: uint16(21152), + 5: uint16(21487), + 6: uint16(21621), + 7: uint16(21733), + 8: uint16(22025), + 9: uint16(23233), + 10: uint16(23478), + 11: uint16(26247), + 12: uint16(26550), + 13: uint16(26551), + 14: uint16(26607), + 15: uint16(27468), + 16: uint16(29634), + 17: uint16(30146), + 18: uint16(31292), + 19: uint16(33499), + 20: uint16(33540), + 21: uint16(34903), + 22: uint16(34952), + 23: uint16(35382), + 24: uint16(36040), + 25: uint16(36303), + 26: uint16(36603), + 27: uint16(36838), + 28: uint16(39381), + 29: uint16(21051), + 30: uint16(21364), + 31: uint16(21508), + 32: uint16(24682), + 33: uint16(24932), + 34: uint16(27580), + 35: uint16(29647), + 36: uint16(33050), + 37: uint16(35258), + 38: uint16(35282), + 39: uint16(38307), + 40: uint16(20355), + 41: uint16(21002), + 42: uint16(22718), + 43: uint16(22904), + 44: uint16(23014), + 45: uint16(24178), + 46: uint16(24185), + 47: uint16(25031), + 48: uint16(25536), + 49: uint16(26438), + 50: uint16(26604), + 51: uint16(26751), + 52: uint16(28567), + 53: uint16(30286), + 54: uint16(30475), + 55: uint16(30965), + 56: uint16(31240), + 57: uint16(31487), + 58: uint16(31777), + 59: uint16(32925), + 60: uint16(33390), + 61: uint16(33393), + 62: uint16(35563), + 63: uint16(38291), + 64: uint16(20075), + 65: uint16(21917), + 66: uint16(26359), + 67: uint16(28212), + 68: uint16(30883), + 69: uint16(31469), + 70: uint16(33883), + 71: uint16(35088), + 72: uint16(34638), + 73: uint16(38824), + 74: uint16(21208), + 75: uint16(22350), + 76: uint16(22570), + 77: uint16(23884), + 78: uint16(24863), + 79: uint16(25022), + 80: uint16(25121), + 81: uint16(25954), + 82: uint16(26577), + 83: uint16(27204), + 84: uint16(28187), + 85: uint16(29976), + 86: uint16(30131), + 87: uint16(30435), + 88: uint16(30640), + 89: uint16(32058), + 90: uint16(37039), + 91: uint16(37969), + 92: uint16(37970), + 93: uint16(40853), + }, + 42: { + 0: uint16(21283), + 1: uint16(23724), + 2: uint16(30002), + 3: uint16(32987), + 4: uint16(37440), + 5: uint16(38296), + 6: uint16(21083), + 7: uint16(22536), + 8: uint16(23004), + 9: uint16(23713), + 10: uint16(23831), + 11: uint16(24247), + 12: uint16(24378), + 13: uint16(24394), + 14: uint16(24951), + 15: uint16(27743), + 16: uint16(30074), + 17: uint16(30086), + 18: uint16(31968), + 19: uint16(32115), + 20: uint16(32177), + 21: uint16(32652), + 22: uint16(33108), + 23: uint16(33313), + 24: uint16(34193), + 25: uint16(35137), + 26: uint16(35611), + 27: uint16(37628), + 28: uint16(38477), + 29: uint16(40007), + 30: uint16(20171), + 31: uint16(20215), + 32: uint16(20491), + 33: uint16(20977), + 34: uint16(22607), + 35: uint16(24887), + 36: uint16(24894), + 37: uint16(24936), + 38: uint16(25913), + 39: uint16(27114), + 40: uint16(28433), + 41: uint16(30117), + 42: uint16(30342), + 43: uint16(30422), + 44: uint16(31623), + 45: uint16(33445), + 46: uint16(33995), + 47: uint16(63744), + 48: uint16(37799), + 49: uint16(38283), + 50: uint16(21888), + 51: uint16(23458), + 52: uint16(22353), + 53: uint16(63745), + 54: uint16(31923), + 55: uint16(32697), + 56: uint16(37301), + 57: uint16(20520), + 58: uint16(21435), + 59: uint16(23621), + 60: uint16(24040), + 61: uint16(25298), + 62: uint16(25454), + 63: uint16(25818), + 64: uint16(25831), + 65: uint16(28192), + 66: uint16(28844), + 67: uint16(31067), + 68: uint16(36317), + 69: uint16(36382), + 70: uint16(63746), + 71: uint16(36989), + 72: uint16(37445), + 73: uint16(37624), + 74: uint16(20094), + 75: uint16(20214), + 76: uint16(20581), + 77: uint16(24062), + 78: uint16(24314), + 79: uint16(24838), + 80: uint16(26967), + 81: uint16(33137), + 82: uint16(34388), + 83: uint16(36423), + 84: uint16(37749), + 85: uint16(39467), + 86: uint16(20062), + 87: uint16(20625), + 88: uint16(26480), + 89: uint16(26688), + 90: uint16(20745), + 91: uint16(21133), + 92: uint16(21138), + 93: uint16(27298), + }, + 43: { + 0: uint16(30652), + 1: uint16(37392), + 2: uint16(40660), + 3: uint16(21163), + 4: uint16(24623), + 5: uint16(36850), + 6: uint16(20552), + 7: uint16(25001), + 8: uint16(25581), + 9: uint16(25802), + 10: uint16(26684), + 11: uint16(27268), + 12: uint16(28608), + 13: uint16(33160), + 14: uint16(35233), + 15: uint16(38548), + 16: uint16(22533), + 17: uint16(29309), + 18: uint16(29356), + 19: uint16(29956), + 20: uint16(32121), + 21: uint16(32365), + 22: uint16(32937), + 23: uint16(35211), + 24: uint16(35700), + 25: uint16(36963), + 26: uint16(40273), + 27: uint16(25225), + 28: uint16(27770), + 29: uint16(28500), + 30: uint16(32080), + 31: uint16(32570), + 32: uint16(35363), + 33: uint16(20860), + 34: uint16(24906), + 35: uint16(31645), + 36: uint16(35609), + 37: uint16(37463), + 38: uint16(37772), + 39: uint16(20140), + 40: uint16(20435), + 41: uint16(20510), + 42: uint16(20670), + 43: uint16(20742), + 44: uint16(21185), + 45: uint16(21197), + 46: uint16(21375), + 47: uint16(22384), + 48: uint16(22659), + 49: uint16(24218), + 50: uint16(24465), + 51: uint16(24950), + 52: uint16(25004), + 53: uint16(25806), + 54: uint16(25964), + 55: uint16(26223), + 56: uint16(26299), + 57: uint16(26356), + 58: uint16(26775), + 59: uint16(28039), + 60: uint16(28805), + 61: uint16(28913), + 62: uint16(29855), + 63: uint16(29861), + 64: uint16(29898), + 65: uint16(30169), + 66: uint16(30828), + 67: uint16(30956), + 68: uint16(31455), + 69: uint16(31478), + 70: uint16(32069), + 71: uint16(32147), + 72: uint16(32789), + 73: uint16(32831), + 74: uint16(33051), + 75: uint16(33686), + 76: uint16(35686), + 77: uint16(36629), + 78: uint16(36885), + 79: uint16(37857), + 80: uint16(38915), + 81: uint16(38968), + 82: uint16(39514), + 83: uint16(39912), + 84: uint16(20418), + 85: uint16(21843), + 86: uint16(22586), + 87: uint16(22865), + 88: uint16(23395), + 89: uint16(23622), + 90: uint16(24760), + 91: uint16(25106), + 92: uint16(26690), + 93: uint16(26800), + }, + 44: { + 0: uint16(26856), + 1: uint16(28330), + 2: uint16(30028), + 3: uint16(30328), + 4: uint16(30926), + 5: uint16(31293), + 6: uint16(31995), + 7: uint16(32363), + 8: uint16(32380), + 9: uint16(35336), + 10: uint16(35489), + 11: uint16(35903), + 12: uint16(38542), + 13: uint16(40388), + 14: uint16(21476), + 15: uint16(21481), + 16: uint16(21578), + 17: uint16(21617), + 18: uint16(22266), + 19: uint16(22993), + 20: uint16(23396), + 21: uint16(23611), + 22: uint16(24235), + 23: uint16(25335), + 24: uint16(25911), + 25: uint16(25925), + 26: uint16(25970), + 27: uint16(26272), + 28: uint16(26543), + 29: uint16(27073), + 30: uint16(27837), + 31: uint16(30204), + 32: uint16(30352), + 33: uint16(30590), + 34: uint16(31295), + 35: uint16(32660), + 36: uint16(32771), + 37: uint16(32929), + 38: uint16(33167), + 39: uint16(33510), + 40: uint16(33533), + 41: uint16(33776), + 42: uint16(34241), + 43: uint16(34865), + 44: uint16(34996), + 45: uint16(35493), + 46: uint16(63747), + 47: uint16(36764), + 48: uint16(37678), + 49: uint16(38599), + 50: uint16(39015), + 51: uint16(39640), + 52: uint16(40723), + 53: uint16(21741), + 54: uint16(26011), + 55: uint16(26354), + 56: uint16(26767), + 57: uint16(31296), + 58: uint16(35895), + 59: uint16(40288), + 60: uint16(22256), + 61: uint16(22372), + 62: uint16(23825), + 63: uint16(26118), + 64: uint16(26801), + 65: uint16(26829), + 66: uint16(28414), + 67: uint16(29736), + 68: uint16(34974), + 69: uint16(39908), + 70: uint16(27752), + 71: uint16(63748), + 72: uint16(39592), + 73: uint16(20379), + 74: uint16(20844), + 75: uint16(20849), + 76: uint16(21151), + 77: uint16(23380), + 78: uint16(24037), + 79: uint16(24656), + 80: uint16(24685), + 81: uint16(25329), + 82: uint16(25511), + 83: uint16(25915), + 84: uint16(29657), + 85: uint16(31354), + 86: uint16(34467), + 87: uint16(36002), + 88: uint16(38799), + 89: uint16(20018), + 90: uint16(23521), + 91: uint16(25096), + 92: uint16(26524), + 93: uint16(29916), + }, + 45: { + 0: uint16(31185), + 1: uint16(33747), + 2: uint16(35463), + 3: uint16(35506), + 4: uint16(36328), + 5: uint16(36942), + 6: uint16(37707), + 7: uint16(38982), + 8: uint16(24275), + 9: uint16(27112), + 10: uint16(34303), + 11: uint16(37101), + 12: uint16(63749), + 13: uint16(20896), + 14: uint16(23448), + 15: uint16(23532), + 16: uint16(24931), + 17: uint16(26874), + 18: uint16(27454), + 19: uint16(28748), + 20: uint16(29743), + 21: uint16(29912), + 22: uint16(31649), + 23: uint16(32592), + 24: uint16(33733), + 25: uint16(35264), + 26: uint16(36011), + 27: uint16(38364), + 28: uint16(39208), + 29: uint16(21038), + 30: uint16(24669), + 31: uint16(25324), + 32: uint16(36866), + 33: uint16(20362), + 34: uint16(20809), + 35: uint16(21281), + 36: uint16(22745), + 37: uint16(24291), + 38: uint16(26336), + 39: uint16(27960), + 40: uint16(28826), + 41: uint16(29378), + 42: uint16(29654), + 43: uint16(31568), + 44: uint16(33009), + 45: uint16(37979), + 46: uint16(21350), + 47: uint16(25499), + 48: uint16(32619), + 49: uint16(20054), + 50: uint16(20608), + 51: uint16(22602), + 52: uint16(22750), + 53: uint16(24618), + 54: uint16(24871), + 55: uint16(25296), + 56: uint16(27088), + 57: uint16(39745), + 58: uint16(23439), + 59: uint16(32024), + 60: uint16(32945), + 61: uint16(36703), + 62: uint16(20132), + 63: uint16(20689), + 64: uint16(21676), + 65: uint16(21932), + 66: uint16(23308), + 67: uint16(23968), + 68: uint16(24039), + 69: uint16(25898), + 70: uint16(25934), + 71: uint16(26657), + 72: uint16(27211), + 73: uint16(29409), + 74: uint16(30350), + 75: uint16(30703), + 76: uint16(32094), + 77: uint16(32761), + 78: uint16(33184), + 79: uint16(34126), + 80: uint16(34527), + 81: uint16(36611), + 82: uint16(36686), + 83: uint16(37066), + 84: uint16(39171), + 85: uint16(39509), + 86: uint16(39851), + 87: uint16(19992), + 88: uint16(20037), + 89: uint16(20061), + 90: uint16(20167), + 91: uint16(20465), + 92: uint16(20855), + 93: uint16(21246), + }, + 46: { + 0: uint16(21312), + 1: uint16(21475), + 2: uint16(21477), + 3: uint16(21646), + 4: uint16(22036), + 5: uint16(22389), + 6: uint16(22434), + 7: uint16(23495), + 8: uint16(23943), + 9: uint16(24272), + 10: uint16(25084), + 11: uint16(25304), + 12: uint16(25937), + 13: uint16(26552), + 14: uint16(26601), + 15: uint16(27083), + 16: uint16(27472), + 17: uint16(27590), + 18: uint16(27628), + 19: uint16(27714), + 20: uint16(28317), + 21: uint16(28792), + 22: uint16(29399), + 23: uint16(29590), + 24: uint16(29699), + 25: uint16(30655), + 26: uint16(30697), + 27: uint16(31350), + 28: uint16(32127), + 29: uint16(32777), + 30: uint16(33276), + 31: uint16(33285), + 32: uint16(33290), + 33: uint16(33503), + 34: uint16(34914), + 35: uint16(35635), + 36: uint16(36092), + 37: uint16(36544), + 38: uint16(36881), + 39: uint16(37041), + 40: uint16(37476), + 41: uint16(37558), + 42: uint16(39378), + 43: uint16(39493), + 44: uint16(40169), + 45: uint16(40407), + 46: uint16(40860), + 47: uint16(22283), + 48: uint16(23616), + 49: uint16(33738), + 50: uint16(38816), + 51: uint16(38827), + 52: uint16(40628), + 53: uint16(21531), + 54: uint16(31384), + 55: uint16(32676), + 56: uint16(35033), + 57: uint16(36557), + 58: uint16(37089), + 59: uint16(22528), + 60: uint16(23624), + 61: uint16(25496), + 62: uint16(31391), + 63: uint16(23470), + 64: uint16(24339), + 65: uint16(31353), + 66: uint16(31406), + 67: uint16(33422), + 68: uint16(36524), + 69: uint16(20518), + 70: uint16(21048), + 71: uint16(21240), + 72: uint16(21367), + 73: uint16(22280), + 74: uint16(25331), + 75: uint16(25458), + 76: uint16(27402), + 77: uint16(28099), + 78: uint16(30519), + 79: uint16(21413), + 80: uint16(29527), + 81: uint16(34152), + 82: uint16(36470), + 83: uint16(38357), + 84: uint16(26426), + 85: uint16(27331), + 86: uint16(28528), + 87: uint16(35437), + 88: uint16(36556), + 89: uint16(39243), + 90: uint16(63750), + 91: uint16(26231), + 92: uint16(27512), + 93: uint16(36020), + }, + 47: { + 0: uint16(39740), + 1: uint16(63751), + 2: uint16(21483), + 3: uint16(22317), + 4: uint16(22862), + 5: uint16(25542), + 6: uint16(27131), + 7: uint16(29674), + 8: uint16(30789), + 9: uint16(31418), + 10: uint16(31429), + 11: uint16(31998), + 12: uint16(33909), + 13: uint16(35215), + 14: uint16(36211), + 15: uint16(36917), + 16: uint16(38312), + 17: uint16(21243), + 18: uint16(22343), + 19: uint16(30023), + 20: uint16(31584), + 21: uint16(33740), + 22: uint16(37406), + 23: uint16(63752), + 24: uint16(27224), + 25: uint16(20811), + 26: uint16(21067), + 27: uint16(21127), + 28: uint16(25119), + 29: uint16(26840), + 30: uint16(26997), + 31: uint16(38553), + 32: uint16(20677), + 33: uint16(21156), + 34: uint16(21220), + 35: uint16(25027), + 36: uint16(26020), + 37: uint16(26681), + 38: uint16(27135), + 39: uint16(29822), + 40: uint16(31563), + 41: uint16(33465), + 42: uint16(33771), + 43: uint16(35250), + 44: uint16(35641), + 45: uint16(36817), + 46: uint16(39241), + 47: uint16(63753), + 48: uint16(20170), + 49: uint16(22935), + 50: uint16(25810), + 51: uint16(26129), + 52: uint16(27278), + 53: uint16(29748), + 54: uint16(31105), + 55: uint16(31165), + 56: uint16(33449), + 57: uint16(34942), + 58: uint16(34943), + 59: uint16(35167), + 60: uint16(63754), + 61: uint16(37670), + 62: uint16(20235), + 63: uint16(21450), + 64: uint16(24613), + 65: uint16(25201), + 66: uint16(27762), + 67: uint16(32026), + 68: uint16(32102), + 69: uint16(20120), + 70: uint16(20834), + 71: uint16(30684), + 72: uint16(32943), + 73: uint16(20225), + 74: uint16(20238), + 75: uint16(20854), + 76: uint16(20864), + 77: uint16(21980), + 78: uint16(22120), + 79: uint16(22331), + 80: uint16(22522), + 81: uint16(22524), + 82: uint16(22804), + 83: uint16(22855), + 84: uint16(22931), + 85: uint16(23492), + 86: uint16(23696), + 87: uint16(23822), + 88: uint16(24049), + 89: uint16(24190), + 90: uint16(24524), + 91: uint16(25216), + 92: uint16(26071), + 93: uint16(26083), + }, + 48: { + 0: uint16(26398), + 1: uint16(26399), + 2: uint16(26462), + 3: uint16(26827), + 4: uint16(26820), + 5: uint16(27231), + 6: uint16(27450), + 7: uint16(27683), + 8: uint16(27773), + 9: uint16(27778), + 10: uint16(28103), + 11: uint16(29592), + 12: uint16(29734), + 13: uint16(29738), + 14: uint16(29826), + 15: uint16(29859), + 16: uint16(30072), + 17: uint16(30079), + 18: uint16(30849), + 19: uint16(30959), + 20: uint16(31041), + 21: uint16(31047), + 22: uint16(31048), + 23: uint16(31098), + 24: uint16(31637), + 25: uint16(32000), + 26: uint16(32186), + 27: uint16(32648), + 28: uint16(32774), + 29: uint16(32813), + 30: uint16(32908), + 31: uint16(35352), + 32: uint16(35663), + 33: uint16(35912), + 34: uint16(36215), + 35: uint16(37665), + 36: uint16(37668), + 37: uint16(39138), + 38: uint16(39249), + 39: uint16(39438), + 40: uint16(39439), + 41: uint16(39525), + 42: uint16(40594), + 43: uint16(32202), + 44: uint16(20342), + 45: uint16(21513), + 46: uint16(25326), + 47: uint16(26708), + 48: uint16(37329), + 49: uint16(21931), + 50: uint16(20794), + 51: uint16(63755), + 52: uint16(63756), + 53: uint16(23068), + 54: uint16(25062), + 55: uint16(63757), + 56: uint16(25295), + 57: uint16(25343), + 58: uint16(63758), + 59: uint16(63759), + 60: uint16(63760), + 61: uint16(63761), + 62: uint16(63762), + 63: uint16(63763), + 64: uint16(37027), + 65: uint16(63764), + 66: uint16(63765), + 67: uint16(63766), + 68: uint16(63767), + 69: uint16(63768), + 70: uint16(35582), + 71: uint16(63769), + 72: uint16(63770), + 73: uint16(63771), + 74: uint16(63772), + 75: uint16(26262), + 76: uint16(63773), + 77: uint16(29014), + 78: uint16(63774), + 79: uint16(63775), + 80: uint16(38627), + 81: uint16(63776), + 82: uint16(25423), + 83: uint16(25466), + 84: uint16(21335), + 85: uint16(63777), + 86: uint16(26511), + 87: uint16(26976), + 88: uint16(28275), + 89: uint16(63778), + 90: uint16(30007), + 91: uint16(63779), + 92: uint16(63780), + 93: uint16(63781), + }, + 49: { + 0: uint16(32013), + 1: uint16(63782), + 2: uint16(63783), + 3: uint16(34930), + 4: uint16(22218), + 5: uint16(23064), + 6: uint16(63784), + 7: uint16(63785), + 8: uint16(63786), + 9: uint16(63787), + 10: uint16(63788), + 11: uint16(20035), + 12: uint16(63789), + 13: uint16(20839), + 14: uint16(22856), + 15: uint16(26608), + 16: uint16(32784), + 17: uint16(63790), + 18: uint16(22899), + 19: uint16(24180), + 20: uint16(25754), + 21: uint16(31178), + 22: uint16(24565), + 23: uint16(24684), + 24: uint16(25288), + 25: uint16(25467), + 26: uint16(23527), + 27: uint16(23511), + 28: uint16(21162), + 29: uint16(63791), + 30: uint16(22900), + 31: uint16(24361), + 32: uint16(24594), + 33: uint16(63792), + 34: uint16(63793), + 35: uint16(63794), + 36: uint16(29785), + 37: uint16(63795), + 38: uint16(63796), + 39: uint16(63797), + 40: uint16(63798), + 41: uint16(63799), + 42: uint16(63800), + 43: uint16(39377), + 44: uint16(63801), + 45: uint16(63802), + 46: uint16(63803), + 47: uint16(63804), + 48: uint16(63805), + 49: uint16(63806), + 50: uint16(63807), + 51: uint16(63808), + 52: uint16(63809), + 53: uint16(63810), + 54: uint16(63811), + 55: uint16(28611), + 56: uint16(63812), + 57: uint16(63813), + 58: uint16(33215), + 59: uint16(36786), + 60: uint16(24817), + 61: uint16(63814), + 62: uint16(63815), + 63: uint16(33126), + 64: uint16(63816), + 65: uint16(63817), + 66: uint16(23615), + 67: uint16(63818), + 68: uint16(63819), + 69: uint16(63820), + 70: uint16(63821), + 71: uint16(63822), + 72: uint16(63823), + 73: uint16(63824), + 74: uint16(63825), + 75: uint16(23273), + 76: uint16(35365), + 77: uint16(26491), + 78: uint16(32016), + 79: uint16(63826), + 80: uint16(63827), + 81: uint16(63828), + 82: uint16(63829), + 83: uint16(63830), + 84: uint16(63831), + 85: uint16(33021), + 86: uint16(63832), + 87: uint16(63833), + 88: uint16(23612), + 89: uint16(27877), + 90: uint16(21311), + 91: uint16(28346), + 92: uint16(22810), + 93: uint16(33590), + }, + 50: { + 0: uint16(20025), + 1: uint16(20150), + 2: uint16(20294), + 3: uint16(21934), + 4: uint16(22296), + 5: uint16(22727), + 6: uint16(24406), + 7: uint16(26039), + 8: uint16(26086), + 9: uint16(27264), + 10: uint16(27573), + 11: uint16(28237), + 12: uint16(30701), + 13: uint16(31471), + 14: uint16(31774), + 15: uint16(32222), + 16: uint16(34507), + 17: uint16(34962), + 18: uint16(37170), + 19: uint16(37723), + 20: uint16(25787), + 21: uint16(28606), + 22: uint16(29562), + 23: uint16(30136), + 24: uint16(36948), + 25: uint16(21846), + 26: uint16(22349), + 27: uint16(25018), + 28: uint16(25812), + 29: uint16(26311), + 30: uint16(28129), + 31: uint16(28251), + 32: uint16(28525), + 33: uint16(28601), + 34: uint16(30192), + 35: uint16(32835), + 36: uint16(33213), + 37: uint16(34113), + 38: uint16(35203), + 39: uint16(35527), + 40: uint16(35674), + 41: uint16(37663), + 42: uint16(27795), + 43: uint16(30035), + 44: uint16(31572), + 45: uint16(36367), + 46: uint16(36957), + 47: uint16(21776), + 48: uint16(22530), + 49: uint16(22616), + 50: uint16(24162), + 51: uint16(25095), + 52: uint16(25758), + 53: uint16(26848), + 54: uint16(30070), + 55: uint16(31958), + 56: uint16(34739), + 57: uint16(40680), + 58: uint16(20195), + 59: uint16(22408), + 60: uint16(22382), + 61: uint16(22823), + 62: uint16(23565), + 63: uint16(23729), + 64: uint16(24118), + 65: uint16(24453), + 66: uint16(25140), + 67: uint16(25825), + 68: uint16(29619), + 69: uint16(33274), + 70: uint16(34955), + 71: uint16(36024), + 72: uint16(38538), + 73: uint16(40667), + 74: uint16(23429), + 75: uint16(24503), + 76: uint16(24755), + 77: uint16(20498), + 78: uint16(20992), + 79: uint16(21040), + 80: uint16(22294), + 81: uint16(22581), + 82: uint16(22615), + 83: uint16(23566), + 84: uint16(23648), + 85: uint16(23798), + 86: uint16(23947), + 87: uint16(24230), + 88: uint16(24466), + 89: uint16(24764), + 90: uint16(25361), + 91: uint16(25481), + 92: uint16(25623), + 93: uint16(26691), + }, + 51: { + 0: uint16(26873), + 1: uint16(27330), + 2: uint16(28120), + 3: uint16(28193), + 4: uint16(28372), + 5: uint16(28644), + 6: uint16(29182), + 7: uint16(30428), + 8: uint16(30585), + 9: uint16(31153), + 10: uint16(31291), + 11: uint16(33796), + 12: uint16(35241), + 13: uint16(36077), + 14: uint16(36339), + 15: uint16(36424), + 16: uint16(36867), + 17: uint16(36884), + 18: uint16(36947), + 19: uint16(37117), + 20: uint16(37709), + 21: uint16(38518), + 22: uint16(38876), + 23: uint16(27602), + 24: uint16(28678), + 25: uint16(29272), + 26: uint16(29346), + 27: uint16(29544), + 28: uint16(30563), + 29: uint16(31167), + 30: uint16(31716), + 31: uint16(32411), + 32: uint16(35712), + 33: uint16(22697), + 34: uint16(24775), + 35: uint16(25958), + 36: uint16(26109), + 37: uint16(26302), + 38: uint16(27788), + 39: uint16(28958), + 40: uint16(29129), + 41: uint16(35930), + 42: uint16(38931), + 43: uint16(20077), + 44: uint16(31361), + 45: uint16(20189), + 46: uint16(20908), + 47: uint16(20941), + 48: uint16(21205), + 49: uint16(21516), + 50: uint16(24999), + 51: uint16(26481), + 52: uint16(26704), + 53: uint16(26847), + 54: uint16(27934), + 55: uint16(28540), + 56: uint16(30140), + 57: uint16(30643), + 58: uint16(31461), + 59: uint16(33012), + 60: uint16(33891), + 61: uint16(37509), + 62: uint16(20828), + 63: uint16(26007), + 64: uint16(26460), + 65: uint16(26515), + 66: uint16(30168), + 67: uint16(31431), + 68: uint16(33651), + 69: uint16(63834), + 70: uint16(35910), + 71: uint16(36887), + 72: uint16(38957), + 73: uint16(23663), + 74: uint16(33216), + 75: uint16(33434), + 76: uint16(36929), + 77: uint16(36975), + 78: uint16(37389), + 79: uint16(24471), + 80: uint16(23965), + 81: uint16(27225), + 82: uint16(29128), + 83: uint16(30331), + 84: uint16(31561), + 85: uint16(34276), + 86: uint16(35588), + 87: uint16(37159), + 88: uint16(39472), + 89: uint16(21895), + 90: uint16(25078), + 91: uint16(63835), + 92: uint16(30313), + 93: uint16(32645), + }, + 52: { + 0: uint16(34367), + 1: uint16(34746), + 2: uint16(35064), + 3: uint16(37007), + 4: uint16(63836), + 5: uint16(27931), + 6: uint16(28889), + 7: uint16(29662), + 8: uint16(32097), + 9: uint16(33853), + 10: uint16(63837), + 11: uint16(37226), + 12: uint16(39409), + 13: uint16(63838), + 14: uint16(20098), + 15: uint16(21365), + 16: uint16(27396), + 17: uint16(27410), + 18: uint16(28734), + 19: uint16(29211), + 20: uint16(34349), + 21: uint16(40478), + 22: uint16(21068), + 23: uint16(36771), + 24: uint16(23888), + 25: uint16(25829), + 26: uint16(25900), + 27: uint16(27414), + 28: uint16(28651), + 29: uint16(31811), + 30: uint16(32412), + 31: uint16(34253), + 32: uint16(35172), + 33: uint16(35261), + 34: uint16(25289), + 35: uint16(33240), + 36: uint16(34847), + 37: uint16(24266), + 38: uint16(26391), + 39: uint16(28010), + 40: uint16(29436), + 41: uint16(29701), + 42: uint16(29807), + 43: uint16(34690), + 44: uint16(37086), + 45: uint16(20358), + 46: uint16(23821), + 47: uint16(24480), + 48: uint16(33802), + 49: uint16(20919), + 50: uint16(25504), + 51: uint16(30053), + 52: uint16(20142), + 53: uint16(20486), + 54: uint16(20841), + 55: uint16(20937), + 56: uint16(26753), + 57: uint16(27153), + 58: uint16(31918), + 59: uint16(31921), + 60: uint16(31975), + 61: uint16(33391), + 62: uint16(35538), + 63: uint16(36635), + 64: uint16(37327), + 65: uint16(20406), + 66: uint16(20791), + 67: uint16(21237), + 68: uint16(21570), + 69: uint16(24300), + 70: uint16(24942), + 71: uint16(25150), + 72: uint16(26053), + 73: uint16(27354), + 74: uint16(28670), + 75: uint16(31018), + 76: uint16(34268), + 77: uint16(34851), + 78: uint16(38317), + 79: uint16(39522), + 80: uint16(39530), + 81: uint16(40599), + 82: uint16(40654), + 83: uint16(21147), + 84: uint16(26310), + 85: uint16(27511), + 86: uint16(28701), + 87: uint16(31019), + 88: uint16(36706), + 89: uint16(38722), + 90: uint16(24976), + 91: uint16(25088), + 92: uint16(25891), + 93: uint16(28451), + }, + 53: { + 0: uint16(29001), + 1: uint16(29833), + 2: uint16(32244), + 3: uint16(32879), + 4: uint16(34030), + 5: uint16(36646), + 6: uint16(36899), + 7: uint16(37706), + 8: uint16(20925), + 9: uint16(21015), + 10: uint16(21155), + 11: uint16(27916), + 12: uint16(28872), + 13: uint16(35010), + 14: uint16(24265), + 15: uint16(25986), + 16: uint16(27566), + 17: uint16(28610), + 18: uint16(31806), + 19: uint16(29557), + 20: uint16(20196), + 21: uint16(20278), + 22: uint16(22265), + 23: uint16(63839), + 24: uint16(23738), + 25: uint16(23994), + 26: uint16(24604), + 27: uint16(29618), + 28: uint16(31533), + 29: uint16(32666), + 30: uint16(32718), + 31: uint16(32838), + 32: uint16(36894), + 33: uint16(37428), + 34: uint16(38646), + 35: uint16(38728), + 36: uint16(38936), + 37: uint16(40801), + 38: uint16(20363), + 39: uint16(28583), + 40: uint16(31150), + 41: uint16(37300), + 42: uint16(38583), + 43: uint16(21214), + 44: uint16(63840), + 45: uint16(25736), + 46: uint16(25796), + 47: uint16(27347), + 48: uint16(28510), + 49: uint16(28696), + 50: uint16(29200), + 51: uint16(30439), + 52: uint16(32769), + 53: uint16(34310), + 54: uint16(34396), + 55: uint16(36335), + 56: uint16(36613), + 57: uint16(38706), + 58: uint16(39791), + 59: uint16(40442), + 60: uint16(40565), + 61: uint16(30860), + 62: uint16(31103), + 63: uint16(32160), + 64: uint16(33737), + 65: uint16(37636), + 66: uint16(40575), + 67: uint16(40595), + 68: uint16(35542), + 69: uint16(22751), + 70: uint16(24324), + 71: uint16(26407), + 72: uint16(28711), + 73: uint16(29903), + 74: uint16(31840), + 75: uint16(32894), + 76: uint16(20769), + 77: uint16(28712), + 78: uint16(29282), + 79: uint16(30922), + 80: uint16(36034), + 81: uint16(36058), + 82: uint16(36084), + 83: uint16(38647), + 84: uint16(20102), + 85: uint16(20698), + 86: uint16(23534), + 87: uint16(24278), + 88: uint16(26009), + 89: uint16(29134), + 90: uint16(30274), + 91: uint16(30637), + 92: uint16(32842), + 93: uint16(34044), + }, + 54: { + 0: uint16(36988), + 1: uint16(39719), + 2: uint16(40845), + 3: uint16(22744), + 4: uint16(23105), + 5: uint16(23650), + 6: uint16(27155), + 7: uint16(28122), + 8: uint16(28431), + 9: uint16(30267), + 10: uint16(32047), + 11: uint16(32311), + 12: uint16(34078), + 13: uint16(35128), + 14: uint16(37860), + 15: uint16(38475), + 16: uint16(21129), + 17: uint16(26066), + 18: uint16(26611), + 19: uint16(27060), + 20: uint16(27969), + 21: uint16(28316), + 22: uint16(28687), + 23: uint16(29705), + 24: uint16(29792), + 25: uint16(30041), + 26: uint16(30244), + 27: uint16(30827), + 28: uint16(35628), + 29: uint16(39006), + 30: uint16(20845), + 31: uint16(25134), + 32: uint16(38520), + 33: uint16(20374), + 34: uint16(20523), + 35: uint16(23833), + 36: uint16(28138), + 37: uint16(32184), + 38: uint16(36650), + 39: uint16(24459), + 40: uint16(24900), + 41: uint16(26647), + 42: uint16(63841), + 43: uint16(38534), + 44: uint16(21202), + 45: uint16(32907), + 46: uint16(20956), + 47: uint16(20940), + 48: uint16(26974), + 49: uint16(31260), + 50: uint16(32190), + 51: uint16(33777), + 52: uint16(38517), + 53: uint16(20442), + 54: uint16(21033), + 55: uint16(21400), + 56: uint16(21519), + 57: uint16(21774), + 58: uint16(23653), + 59: uint16(24743), + 60: uint16(26446), + 61: uint16(26792), + 62: uint16(28012), + 63: uint16(29313), + 64: uint16(29432), + 65: uint16(29702), + 66: uint16(29827), + 67: uint16(63842), + 68: uint16(30178), + 69: uint16(31852), + 70: uint16(32633), + 71: uint16(32696), + 72: uint16(33673), + 73: uint16(35023), + 74: uint16(35041), + 75: uint16(37324), + 76: uint16(37328), + 77: uint16(38626), + 78: uint16(39881), + 79: uint16(21533), + 80: uint16(28542), + 81: uint16(29136), + 82: uint16(29848), + 83: uint16(34298), + 84: uint16(36522), + 85: uint16(38563), + 86: uint16(40023), + 87: uint16(40607), + 88: uint16(26519), + 89: uint16(28107), + 90: uint16(29747), + 91: uint16(33256), + 92: uint16(38678), + 93: uint16(30764), + }, + 55: { + 0: uint16(31435), + 1: uint16(31520), + 2: uint16(31890), + 3: uint16(25705), + 4: uint16(29802), + 5: uint16(30194), + 6: uint16(30908), + 7: uint16(30952), + 8: uint16(39340), + 9: uint16(39764), + 10: uint16(40635), + 11: uint16(23518), + 12: uint16(24149), + 13: uint16(28448), + 14: uint16(33180), + 15: uint16(33707), + 16: uint16(37000), + 17: uint16(19975), + 18: uint16(21325), + 19: uint16(23081), + 20: uint16(24018), + 21: uint16(24398), + 22: uint16(24930), + 23: uint16(25405), + 24: uint16(26217), + 25: uint16(26364), + 26: uint16(28415), + 27: uint16(28459), + 28: uint16(28771), + 29: uint16(30622), + 30: uint16(33836), + 31: uint16(34067), + 32: uint16(34875), + 33: uint16(36627), + 34: uint16(39237), + 35: uint16(39995), + 36: uint16(21788), + 37: uint16(25273), + 38: uint16(26411), + 39: uint16(27819), + 40: uint16(33545), + 41: uint16(35178), + 42: uint16(38778), + 43: uint16(20129), + 44: uint16(22916), + 45: uint16(24536), + 46: uint16(24537), + 47: uint16(26395), + 48: uint16(32178), + 49: uint16(32596), + 50: uint16(33426), + 51: uint16(33579), + 52: uint16(33725), + 53: uint16(36638), + 54: uint16(37017), + 55: uint16(22475), + 56: uint16(22969), + 57: uint16(23186), + 58: uint16(23504), + 59: uint16(26151), + 60: uint16(26522), + 61: uint16(26757), + 62: uint16(27599), + 63: uint16(29028), + 64: uint16(32629), + 65: uint16(36023), + 66: uint16(36067), + 67: uint16(36993), + 68: uint16(39749), + 69: uint16(33032), + 70: uint16(35978), + 71: uint16(38476), + 72: uint16(39488), + 73: uint16(40613), + 74: uint16(23391), + 75: uint16(27667), + 76: uint16(29467), + 77: uint16(30450), + 78: uint16(30431), + 79: uint16(33804), + 80: uint16(20906), + 81: uint16(35219), + 82: uint16(20813), + 83: uint16(20885), + 84: uint16(21193), + 85: uint16(26825), + 86: uint16(27796), + 87: uint16(30468), + 88: uint16(30496), + 89: uint16(32191), + 90: uint16(32236), + 91: uint16(38754), + 92: uint16(40629), + 93: uint16(28357), + }, + 56: { + 0: uint16(34065), + 1: uint16(20901), + 2: uint16(21517), + 3: uint16(21629), + 4: uint16(26126), + 5: uint16(26269), + 6: uint16(26919), + 7: uint16(28319), + 8: uint16(30399), + 9: uint16(30609), + 10: uint16(33559), + 11: uint16(33986), + 12: uint16(34719), + 13: uint16(37225), + 14: uint16(37528), + 15: uint16(40180), + 16: uint16(34946), + 17: uint16(20398), + 18: uint16(20882), + 19: uint16(21215), + 20: uint16(22982), + 21: uint16(24125), + 22: uint16(24917), + 23: uint16(25720), + 24: uint16(25721), + 25: uint16(26286), + 26: uint16(26576), + 27: uint16(27169), + 28: uint16(27597), + 29: uint16(27611), + 30: uint16(29279), + 31: uint16(29281), + 32: uint16(29761), + 33: uint16(30520), + 34: uint16(30683), + 35: uint16(32791), + 36: uint16(33468), + 37: uint16(33541), + 38: uint16(35584), + 39: uint16(35624), + 40: uint16(35980), + 41: uint16(26408), + 42: uint16(27792), + 43: uint16(29287), + 44: uint16(30446), + 45: uint16(30566), + 46: uint16(31302), + 47: uint16(40361), + 48: uint16(27519), + 49: uint16(27794), + 50: uint16(22818), + 51: uint16(26406), + 52: uint16(33945), + 53: uint16(21359), + 54: uint16(22675), + 55: uint16(22937), + 56: uint16(24287), + 57: uint16(25551), + 58: uint16(26164), + 59: uint16(26483), + 60: uint16(28218), + 61: uint16(29483), + 62: uint16(31447), + 63: uint16(33495), + 64: uint16(37672), + 65: uint16(21209), + 66: uint16(24043), + 67: uint16(25006), + 68: uint16(25035), + 69: uint16(25098), + 70: uint16(25287), + 71: uint16(25771), + 72: uint16(26080), + 73: uint16(26969), + 74: uint16(27494), + 75: uint16(27595), + 76: uint16(28961), + 77: uint16(29687), + 78: uint16(30045), + 79: uint16(32326), + 80: uint16(33310), + 81: uint16(33538), + 82: uint16(34154), + 83: uint16(35491), + 84: uint16(36031), + 85: uint16(38695), + 86: uint16(40289), + 87: uint16(22696), + 88: uint16(40664), + 89: uint16(20497), + 90: uint16(21006), + 91: uint16(21563), + 92: uint16(21839), + 93: uint16(25991), + }, + 57: { + 0: uint16(27766), + 1: uint16(32010), + 2: uint16(32011), + 3: uint16(32862), + 4: uint16(34442), + 5: uint16(38272), + 6: uint16(38639), + 7: uint16(21247), + 8: uint16(27797), + 9: uint16(29289), + 10: uint16(21619), + 11: uint16(23194), + 12: uint16(23614), + 13: uint16(23883), + 14: uint16(24396), + 15: uint16(24494), + 16: uint16(26410), + 17: uint16(26806), + 18: uint16(26979), + 19: uint16(28220), + 20: uint16(28228), + 21: uint16(30473), + 22: uint16(31859), + 23: uint16(32654), + 24: uint16(34183), + 25: uint16(35598), + 26: uint16(36855), + 27: uint16(38753), + 28: uint16(40692), + 29: uint16(23735), + 30: uint16(24758), + 31: uint16(24845), + 32: uint16(25003), + 33: uint16(25935), + 34: uint16(26107), + 35: uint16(26108), + 36: uint16(27665), + 37: uint16(27887), + 38: uint16(29599), + 39: uint16(29641), + 40: uint16(32225), + 41: uint16(38292), + 42: uint16(23494), + 43: uint16(34588), + 44: uint16(35600), + 45: uint16(21085), + 46: uint16(21338), + 47: uint16(25293), + 48: uint16(25615), + 49: uint16(25778), + 50: uint16(26420), + 51: uint16(27192), + 52: uint16(27850), + 53: uint16(29632), + 54: uint16(29854), + 55: uint16(31636), + 56: uint16(31893), + 57: uint16(32283), + 58: uint16(33162), + 59: uint16(33334), + 60: uint16(34180), + 61: uint16(36843), + 62: uint16(38649), + 63: uint16(39361), + 64: uint16(20276), + 65: uint16(21322), + 66: uint16(21453), + 67: uint16(21467), + 68: uint16(25292), + 69: uint16(25644), + 70: uint16(25856), + 71: uint16(26001), + 72: uint16(27075), + 73: uint16(27886), + 74: uint16(28504), + 75: uint16(29677), + 76: uint16(30036), + 77: uint16(30242), + 78: uint16(30436), + 79: uint16(30460), + 80: uint16(30928), + 81: uint16(30971), + 82: uint16(31020), + 83: uint16(32070), + 84: uint16(33324), + 85: uint16(34784), + 86: uint16(36820), + 87: uint16(38930), + 88: uint16(39151), + 89: uint16(21187), + 90: uint16(25300), + 91: uint16(25765), + 92: uint16(28196), + 93: uint16(28497), + }, + 58: { + 0: uint16(30332), + 1: uint16(36299), + 2: uint16(37297), + 3: uint16(37474), + 4: uint16(39662), + 5: uint16(39747), + 6: uint16(20515), + 7: uint16(20621), + 8: uint16(22346), + 9: uint16(22952), + 10: uint16(23592), + 11: uint16(24135), + 12: uint16(24439), + 13: uint16(25151), + 14: uint16(25918), + 15: uint16(26041), + 16: uint16(26049), + 17: uint16(26121), + 18: uint16(26507), + 19: uint16(27036), + 20: uint16(28354), + 21: uint16(30917), + 22: uint16(32033), + 23: uint16(32938), + 24: uint16(33152), + 25: uint16(33323), + 26: uint16(33459), + 27: uint16(33953), + 28: uint16(34444), + 29: uint16(35370), + 30: uint16(35607), + 31: uint16(37030), + 32: uint16(38450), + 33: uint16(40848), + 34: uint16(20493), + 35: uint16(20467), + 36: uint16(63843), + 37: uint16(22521), + 38: uint16(24472), + 39: uint16(25308), + 40: uint16(25490), + 41: uint16(26479), + 42: uint16(28227), + 43: uint16(28953), + 44: uint16(30403), + 45: uint16(32972), + 46: uint16(32986), + 47: uint16(35060), + 48: uint16(35061), + 49: uint16(35097), + 50: uint16(36064), + 51: uint16(36649), + 52: uint16(37197), + 53: uint16(38506), + 54: uint16(20271), + 55: uint16(20336), + 56: uint16(24091), + 57: uint16(26575), + 58: uint16(26658), + 59: uint16(30333), + 60: uint16(30334), + 61: uint16(39748), + 62: uint16(24161), + 63: uint16(27146), + 64: uint16(29033), + 65: uint16(29140), + 66: uint16(30058), + 67: uint16(63844), + 68: uint16(32321), + 69: uint16(34115), + 70: uint16(34281), + 71: uint16(39132), + 72: uint16(20240), + 73: uint16(31567), + 74: uint16(32624), + 75: uint16(38309), + 76: uint16(20961), + 77: uint16(24070), + 78: uint16(26805), + 79: uint16(27710), + 80: uint16(27726), + 81: uint16(27867), + 82: uint16(29359), + 83: uint16(31684), + 84: uint16(33539), + 85: uint16(27861), + 86: uint16(29754), + 87: uint16(20731), + 88: uint16(21128), + 89: uint16(22721), + 90: uint16(25816), + 91: uint16(27287), + 92: uint16(29863), + 93: uint16(30294), + }, + 59: { + 0: uint16(30887), + 1: uint16(34327), + 2: uint16(38370), + 3: uint16(38713), + 4: uint16(63845), + 5: uint16(21342), + 6: uint16(24321), + 7: uint16(35722), + 8: uint16(36776), + 9: uint16(36783), + 10: uint16(37002), + 11: uint16(21029), + 12: uint16(30629), + 13: uint16(40009), + 14: uint16(40712), + 15: uint16(19993), + 16: uint16(20482), + 17: uint16(20853), + 18: uint16(23643), + 19: uint16(24183), + 20: uint16(26142), + 21: uint16(26170), + 22: uint16(26564), + 23: uint16(26821), + 24: uint16(28851), + 25: uint16(29953), + 26: uint16(30149), + 27: uint16(31177), + 28: uint16(31453), + 29: uint16(36647), + 30: uint16(39200), + 31: uint16(39432), + 32: uint16(20445), + 33: uint16(22561), + 34: uint16(22577), + 35: uint16(23542), + 36: uint16(26222), + 37: uint16(27493), + 38: uint16(27921), + 39: uint16(28282), + 40: uint16(28541), + 41: uint16(29668), + 42: uint16(29995), + 43: uint16(33769), + 44: uint16(35036), + 45: uint16(35091), + 46: uint16(35676), + 47: uint16(36628), + 48: uint16(20239), + 49: uint16(20693), + 50: uint16(21264), + 51: uint16(21340), + 52: uint16(23443), + 53: uint16(24489), + 54: uint16(26381), + 55: uint16(31119), + 56: uint16(33145), + 57: uint16(33583), + 58: uint16(34068), + 59: uint16(35079), + 60: uint16(35206), + 61: uint16(36665), + 62: uint16(36667), + 63: uint16(39333), + 64: uint16(39954), + 65: uint16(26412), + 66: uint16(20086), + 67: uint16(20472), + 68: uint16(22857), + 69: uint16(23553), + 70: uint16(23791), + 71: uint16(23792), + 72: uint16(25447), + 73: uint16(26834), + 74: uint16(28925), + 75: uint16(29090), + 76: uint16(29739), + 77: uint16(32299), + 78: uint16(34028), + 79: uint16(34562), + 80: uint16(36898), + 81: uint16(37586), + 82: uint16(40179), + 83: uint16(19981), + 84: uint16(20184), + 85: uint16(20463), + 86: uint16(20613), + 87: uint16(21078), + 88: uint16(21103), + 89: uint16(21542), + 90: uint16(21648), + 91: uint16(22496), + 92: uint16(22827), + 93: uint16(23142), + }, + 60: { + 0: uint16(23386), + 1: uint16(23413), + 2: uint16(23500), + 3: uint16(24220), + 4: uint16(63846), + 5: uint16(25206), + 6: uint16(25975), + 7: uint16(26023), + 8: uint16(28014), + 9: uint16(28325), + 10: uint16(29238), + 11: uint16(31526), + 12: uint16(31807), + 13: uint16(32566), + 14: uint16(33104), + 15: uint16(33105), + 16: uint16(33178), + 17: uint16(33344), + 18: uint16(33433), + 19: uint16(33705), + 20: uint16(35331), + 21: uint16(36000), + 22: uint16(36070), + 23: uint16(36091), + 24: uint16(36212), + 25: uint16(36282), + 26: uint16(37096), + 27: uint16(37340), + 28: uint16(38428), + 29: uint16(38468), + 30: uint16(39385), + 31: uint16(40167), + 32: uint16(21271), + 33: uint16(20998), + 34: uint16(21545), + 35: uint16(22132), + 36: uint16(22707), + 37: uint16(22868), + 38: uint16(22894), + 39: uint16(24575), + 40: uint16(24996), + 41: uint16(25198), + 42: uint16(26128), + 43: uint16(27774), + 44: uint16(28954), + 45: uint16(30406), + 46: uint16(31881), + 47: uint16(31966), + 48: uint16(32027), + 49: uint16(33452), + 50: uint16(36033), + 51: uint16(38640), + 52: uint16(63847), + 53: uint16(20315), + 54: uint16(24343), + 55: uint16(24447), + 56: uint16(25282), + 57: uint16(23849), + 58: uint16(26379), + 59: uint16(26842), + 60: uint16(30844), + 61: uint16(32323), + 62: uint16(40300), + 63: uint16(19989), + 64: uint16(20633), + 65: uint16(21269), + 66: uint16(21290), + 67: uint16(21329), + 68: uint16(22915), + 69: uint16(23138), + 70: uint16(24199), + 71: uint16(24754), + 72: uint16(24970), + 73: uint16(25161), + 74: uint16(25209), + 75: uint16(26000), + 76: uint16(26503), + 77: uint16(27047), + 78: uint16(27604), + 79: uint16(27606), + 80: uint16(27607), + 81: uint16(27608), + 82: uint16(27832), + 83: uint16(63848), + 84: uint16(29749), + 85: uint16(30202), + 86: uint16(30738), + 87: uint16(30865), + 88: uint16(31189), + 89: uint16(31192), + 90: uint16(31875), + 91: uint16(32203), + 92: uint16(32737), + 93: uint16(32933), + }, + 61: { + 0: uint16(33086), + 1: uint16(33218), + 2: uint16(33778), + 3: uint16(34586), + 4: uint16(35048), + 5: uint16(35513), + 6: uint16(35692), + 7: uint16(36027), + 8: uint16(37145), + 9: uint16(38750), + 10: uint16(39131), + 11: uint16(40763), + 12: uint16(22188), + 13: uint16(23338), + 14: uint16(24428), + 15: uint16(25996), + 16: uint16(27315), + 17: uint16(27567), + 18: uint16(27996), + 19: uint16(28657), + 20: uint16(28693), + 21: uint16(29277), + 22: uint16(29613), + 23: uint16(36007), + 24: uint16(36051), + 25: uint16(38971), + 26: uint16(24977), + 27: uint16(27703), + 28: uint16(32856), + 29: uint16(39425), + 30: uint16(20045), + 31: uint16(20107), + 32: uint16(20123), + 33: uint16(20181), + 34: uint16(20282), + 35: uint16(20284), + 36: uint16(20351), + 37: uint16(20447), + 38: uint16(20735), + 39: uint16(21490), + 40: uint16(21496), + 41: uint16(21766), + 42: uint16(21987), + 43: uint16(22235), + 44: uint16(22763), + 45: uint16(22882), + 46: uint16(23057), + 47: uint16(23531), + 48: uint16(23546), + 49: uint16(23556), + 50: uint16(24051), + 51: uint16(24107), + 52: uint16(24473), + 53: uint16(24605), + 54: uint16(25448), + 55: uint16(26012), + 56: uint16(26031), + 57: uint16(26614), + 58: uint16(26619), + 59: uint16(26797), + 60: uint16(27515), + 61: uint16(27801), + 62: uint16(27863), + 63: uint16(28195), + 64: uint16(28681), + 65: uint16(29509), + 66: uint16(30722), + 67: uint16(31038), + 68: uint16(31040), + 69: uint16(31072), + 70: uint16(31169), + 71: uint16(31721), + 72: uint16(32023), + 73: uint16(32114), + 74: uint16(32902), + 75: uint16(33293), + 76: uint16(33678), + 77: uint16(34001), + 78: uint16(34503), + 79: uint16(35039), + 80: uint16(35408), + 81: uint16(35422), + 82: uint16(35613), + 83: uint16(36060), + 84: uint16(36198), + 85: uint16(36781), + 86: uint16(37034), + 87: uint16(39164), + 88: uint16(39391), + 89: uint16(40605), + 90: uint16(21066), + 91: uint16(63849), + 92: uint16(26388), + 93: uint16(63850), + }, + 62: { + 0: uint16(20632), + 1: uint16(21034), + 2: uint16(23665), + 3: uint16(25955), + 4: uint16(27733), + 5: uint16(29642), + 6: uint16(29987), + 7: uint16(30109), + 8: uint16(31639), + 9: uint16(33948), + 10: uint16(37240), + 11: uint16(38704), + 12: uint16(20087), + 13: uint16(25746), + 14: uint16(27578), + 15: uint16(29022), + 16: uint16(34217), + 17: uint16(19977), + 18: uint16(63851), + 19: uint16(26441), + 20: uint16(26862), + 21: uint16(28183), + 22: uint16(33439), + 23: uint16(34072), + 24: uint16(34923), + 25: uint16(25591), + 26: uint16(28545), + 27: uint16(37394), + 28: uint16(39087), + 29: uint16(19978), + 30: uint16(20663), + 31: uint16(20687), + 32: uint16(20767), + 33: uint16(21830), + 34: uint16(21930), + 35: uint16(22039), + 36: uint16(23360), + 37: uint16(23577), + 38: uint16(23776), + 39: uint16(24120), + 40: uint16(24202), + 41: uint16(24224), + 42: uint16(24258), + 43: uint16(24819), + 44: uint16(26705), + 45: uint16(27233), + 46: uint16(28248), + 47: uint16(29245), + 48: uint16(29248), + 49: uint16(29376), + 50: uint16(30456), + 51: uint16(31077), + 52: uint16(31665), + 53: uint16(32724), + 54: uint16(35059), + 55: uint16(35316), + 56: uint16(35443), + 57: uint16(35937), + 58: uint16(36062), + 59: uint16(38684), + 60: uint16(22622), + 61: uint16(29885), + 62: uint16(36093), + 63: uint16(21959), + 64: uint16(63852), + 65: uint16(31329), + 66: uint16(32034), + 67: uint16(33394), + 68: uint16(29298), + 69: uint16(29983), + 70: uint16(29989), + 71: uint16(63853), + 72: uint16(31513), + 73: uint16(22661), + 74: uint16(22779), + 75: uint16(23996), + 76: uint16(24207), + 77: uint16(24246), + 78: uint16(24464), + 79: uint16(24661), + 80: uint16(25234), + 81: uint16(25471), + 82: uint16(25933), + 83: uint16(26257), + 84: uint16(26329), + 85: uint16(26360), + 86: uint16(26646), + 87: uint16(26866), + 88: uint16(29312), + 89: uint16(29790), + 90: uint16(31598), + 91: uint16(32110), + 92: uint16(32214), + 93: uint16(32626), + }, + 63: { + 0: uint16(32997), + 1: uint16(33298), + 2: uint16(34223), + 3: uint16(35199), + 4: uint16(35475), + 5: uint16(36893), + 6: uint16(37604), + 7: uint16(40653), + 8: uint16(40736), + 9: uint16(22805), + 10: uint16(22893), + 11: uint16(24109), + 12: uint16(24796), + 13: uint16(26132), + 14: uint16(26227), + 15: uint16(26512), + 16: uint16(27728), + 17: uint16(28101), + 18: uint16(28511), + 19: uint16(30707), + 20: uint16(30889), + 21: uint16(33990), + 22: uint16(37323), + 23: uint16(37675), + 24: uint16(20185), + 25: uint16(20682), + 26: uint16(20808), + 27: uint16(21892), + 28: uint16(23307), + 29: uint16(23459), + 30: uint16(25159), + 31: uint16(25982), + 32: uint16(26059), + 33: uint16(28210), + 34: uint16(29053), + 35: uint16(29697), + 36: uint16(29764), + 37: uint16(29831), + 38: uint16(29887), + 39: uint16(30316), + 40: uint16(31146), + 41: uint16(32218), + 42: uint16(32341), + 43: uint16(32680), + 44: uint16(33146), + 45: uint16(33203), + 46: uint16(33337), + 47: uint16(34330), + 48: uint16(34796), + 49: uint16(35445), + 50: uint16(36323), + 51: uint16(36984), + 52: uint16(37521), + 53: uint16(37925), + 54: uint16(39245), + 55: uint16(39854), + 56: uint16(21352), + 57: uint16(23633), + 58: uint16(26964), + 59: uint16(27844), + 60: uint16(27945), + 61: uint16(28203), + 62: uint16(33292), + 63: uint16(34203), + 64: uint16(35131), + 65: uint16(35373), + 66: uint16(35498), + 67: uint16(38634), + 68: uint16(40807), + 69: uint16(21089), + 70: uint16(26297), + 71: uint16(27570), + 72: uint16(32406), + 73: uint16(34814), + 74: uint16(36109), + 75: uint16(38275), + 76: uint16(38493), + 77: uint16(25885), + 78: uint16(28041), + 79: uint16(29166), + 80: uint16(63854), + 81: uint16(22478), + 82: uint16(22995), + 83: uint16(23468), + 84: uint16(24615), + 85: uint16(24826), + 86: uint16(25104), + 87: uint16(26143), + 88: uint16(26207), + 89: uint16(29481), + 90: uint16(29689), + 91: uint16(30427), + 92: uint16(30465), + 93: uint16(31596), + }, + 64: { + 0: uint16(32854), + 1: uint16(32882), + 2: uint16(33125), + 3: uint16(35488), + 4: uint16(37266), + 5: uint16(19990), + 6: uint16(21218), + 7: uint16(27506), + 8: uint16(27927), + 9: uint16(31237), + 10: uint16(31545), + 11: uint16(32048), + 12: uint16(63855), + 13: uint16(36016), + 14: uint16(21484), + 15: uint16(22063), + 16: uint16(22609), + 17: uint16(23477), + 18: uint16(23567), + 19: uint16(23569), + 20: uint16(24034), + 21: uint16(25152), + 22: uint16(25475), + 23: uint16(25620), + 24: uint16(26157), + 25: uint16(26803), + 26: uint16(27836), + 27: uint16(28040), + 28: uint16(28335), + 29: uint16(28703), + 30: uint16(28836), + 31: uint16(29138), + 32: uint16(29990), + 33: uint16(30095), + 34: uint16(30094), + 35: uint16(30233), + 36: uint16(31505), + 37: uint16(31712), + 38: uint16(31787), + 39: uint16(32032), + 40: uint16(32057), + 41: uint16(34092), + 42: uint16(34157), + 43: uint16(34311), + 44: uint16(35380), + 45: uint16(36877), + 46: uint16(36961), + 47: uint16(37045), + 48: uint16(37559), + 49: uint16(38902), + 50: uint16(39479), + 51: uint16(20439), + 52: uint16(23660), + 53: uint16(26463), + 54: uint16(28049), + 55: uint16(31903), + 56: uint16(32396), + 57: uint16(35606), + 58: uint16(36118), + 59: uint16(36895), + 60: uint16(23403), + 61: uint16(24061), + 62: uint16(25613), + 63: uint16(33984), + 64: uint16(36956), + 65: uint16(39137), + 66: uint16(29575), + 67: uint16(23435), + 68: uint16(24730), + 69: uint16(26494), + 70: uint16(28126), + 71: uint16(35359), + 72: uint16(35494), + 73: uint16(36865), + 74: uint16(38924), + 75: uint16(21047), + 76: uint16(63856), + 77: uint16(28753), + 78: uint16(30862), + 79: uint16(37782), + 80: uint16(34928), + 81: uint16(37335), + 82: uint16(20462), + 83: uint16(21463), + 84: uint16(22013), + 85: uint16(22234), + 86: uint16(22402), + 87: uint16(22781), + 88: uint16(23234), + 89: uint16(23432), + 90: uint16(23723), + 91: uint16(23744), + 92: uint16(24101), + 93: uint16(24833), + }, + 65: { + 0: uint16(25101), + 1: uint16(25163), + 2: uint16(25480), + 3: uint16(25628), + 4: uint16(25910), + 5: uint16(25976), + 6: uint16(27193), + 7: uint16(27530), + 8: uint16(27700), + 9: uint16(27929), + 10: uint16(28465), + 11: uint16(29159), + 12: uint16(29417), + 13: uint16(29560), + 14: uint16(29703), + 15: uint16(29874), + 16: uint16(30246), + 17: uint16(30561), + 18: uint16(31168), + 19: uint16(31319), + 20: uint16(31466), + 21: uint16(31929), + 22: uint16(32143), + 23: uint16(32172), + 24: uint16(32353), + 25: uint16(32670), + 26: uint16(33065), + 27: uint16(33585), + 28: uint16(33936), + 29: uint16(34010), + 30: uint16(34282), + 31: uint16(34966), + 32: uint16(35504), + 33: uint16(35728), + 34: uint16(36664), + 35: uint16(36930), + 36: uint16(36995), + 37: uint16(37228), + 38: uint16(37526), + 39: uint16(37561), + 40: uint16(38539), + 41: uint16(38567), + 42: uint16(38568), + 43: uint16(38614), + 44: uint16(38656), + 45: uint16(38920), + 46: uint16(39318), + 47: uint16(39635), + 48: uint16(39706), + 49: uint16(21460), + 50: uint16(22654), + 51: uint16(22809), + 52: uint16(23408), + 53: uint16(23487), + 54: uint16(28113), + 55: uint16(28506), + 56: uint16(29087), + 57: uint16(29729), + 58: uint16(29881), + 59: uint16(32901), + 60: uint16(33789), + 61: uint16(24033), + 62: uint16(24455), + 63: uint16(24490), + 64: uint16(24642), + 65: uint16(26092), + 66: uint16(26642), + 67: uint16(26991), + 68: uint16(27219), + 69: uint16(27529), + 70: uint16(27957), + 71: uint16(28147), + 72: uint16(29667), + 73: uint16(30462), + 74: uint16(30636), + 75: uint16(31565), + 76: uint16(32020), + 77: uint16(33059), + 78: uint16(33308), + 79: uint16(33600), + 80: uint16(34036), + 81: uint16(34147), + 82: uint16(35426), + 83: uint16(35524), + 84: uint16(37255), + 85: uint16(37662), + 86: uint16(38918), + 87: uint16(39348), + 88: uint16(25100), + 89: uint16(34899), + 90: uint16(36848), + 91: uint16(37477), + 92: uint16(23815), + 93: uint16(23847), + }, + 66: { + 0: uint16(23913), + 1: uint16(29791), + 2: uint16(33181), + 3: uint16(34664), + 4: uint16(28629), + 5: uint16(25342), + 6: uint16(32722), + 7: uint16(35126), + 8: uint16(35186), + 9: uint16(19998), + 10: uint16(20056), + 11: uint16(20711), + 12: uint16(21213), + 13: uint16(21319), + 14: uint16(25215), + 15: uint16(26119), + 16: uint16(32361), + 17: uint16(34821), + 18: uint16(38494), + 19: uint16(20365), + 20: uint16(21273), + 21: uint16(22070), + 22: uint16(22987), + 23: uint16(23204), + 24: uint16(23608), + 25: uint16(23630), + 26: uint16(23629), + 27: uint16(24066), + 28: uint16(24337), + 29: uint16(24643), + 30: uint16(26045), + 31: uint16(26159), + 32: uint16(26178), + 33: uint16(26558), + 34: uint16(26612), + 35: uint16(29468), + 36: uint16(30690), + 37: uint16(31034), + 38: uint16(32709), + 39: uint16(33940), + 40: uint16(33997), + 41: uint16(35222), + 42: uint16(35430), + 43: uint16(35433), + 44: uint16(35553), + 45: uint16(35925), + 46: uint16(35962), + 47: uint16(22516), + 48: uint16(23508), + 49: uint16(24335), + 50: uint16(24687), + 51: uint16(25325), + 52: uint16(26893), + 53: uint16(27542), + 54: uint16(28252), + 55: uint16(29060), + 56: uint16(31698), + 57: uint16(34645), + 58: uint16(35672), + 59: uint16(36606), + 60: uint16(39135), + 61: uint16(39166), + 62: uint16(20280), + 63: uint16(20353), + 64: uint16(20449), + 65: uint16(21627), + 66: uint16(23072), + 67: uint16(23480), + 68: uint16(24892), + 69: uint16(26032), + 70: uint16(26216), + 71: uint16(29180), + 72: uint16(30003), + 73: uint16(31070), + 74: uint16(32051), + 75: uint16(33102), + 76: uint16(33251), + 77: uint16(33688), + 78: uint16(34218), + 79: uint16(34254), + 80: uint16(34563), + 81: uint16(35338), + 82: uint16(36523), + 83: uint16(36763), + 84: uint16(63857), + 85: uint16(36805), + 86: uint16(22833), + 87: uint16(23460), + 88: uint16(23526), + 89: uint16(24713), + 90: uint16(23529), + 91: uint16(23563), + 92: uint16(24515), + 93: uint16(27777), + }, + 67: { + 0: uint16(63858), + 1: uint16(28145), + 2: uint16(28683), + 3: uint16(29978), + 4: uint16(33455), + 5: uint16(35574), + 6: uint16(20160), + 7: uint16(21313), + 8: uint16(63859), + 9: uint16(38617), + 10: uint16(27663), + 11: uint16(20126), + 12: uint16(20420), + 13: uint16(20818), + 14: uint16(21854), + 15: uint16(23077), + 16: uint16(23784), + 17: uint16(25105), + 18: uint16(29273), + 19: uint16(33469), + 20: uint16(33706), + 21: uint16(34558), + 22: uint16(34905), + 23: uint16(35357), + 24: uint16(38463), + 25: uint16(38597), + 26: uint16(39187), + 27: uint16(40201), + 28: uint16(40285), + 29: uint16(22538), + 30: uint16(23731), + 31: uint16(23997), + 32: uint16(24132), + 33: uint16(24801), + 34: uint16(24853), + 35: uint16(25569), + 36: uint16(27138), + 37: uint16(28197), + 38: uint16(37122), + 39: uint16(37716), + 40: uint16(38990), + 41: uint16(39952), + 42: uint16(40823), + 43: uint16(23433), + 44: uint16(23736), + 45: uint16(25353), + 46: uint16(26191), + 47: uint16(26696), + 48: uint16(30524), + 49: uint16(38593), + 50: uint16(38797), + 51: uint16(38996), + 52: uint16(39839), + 53: uint16(26017), + 54: uint16(35585), + 55: uint16(36555), + 56: uint16(38332), + 57: uint16(21813), + 58: uint16(23721), + 59: uint16(24022), + 60: uint16(24245), + 61: uint16(26263), + 62: uint16(30284), + 63: uint16(33780), + 64: uint16(38343), + 65: uint16(22739), + 66: uint16(25276), + 67: uint16(29390), + 68: uint16(40232), + 69: uint16(20208), + 70: uint16(22830), + 71: uint16(24591), + 72: uint16(26171), + 73: uint16(27523), + 74: uint16(31207), + 75: uint16(40230), + 76: uint16(21395), + 77: uint16(21696), + 78: uint16(22467), + 79: uint16(23830), + 80: uint16(24859), + 81: uint16(26326), + 82: uint16(28079), + 83: uint16(30861), + 84: uint16(33406), + 85: uint16(38552), + 86: uint16(38724), + 87: uint16(21380), + 88: uint16(25212), + 89: uint16(25494), + 90: uint16(28082), + 91: uint16(32266), + 92: uint16(33099), + 93: uint16(38989), + }, + 68: { + 0: uint16(27387), + 1: uint16(32588), + 2: uint16(40367), + 3: uint16(40474), + 4: uint16(20063), + 5: uint16(20539), + 6: uint16(20918), + 7: uint16(22812), + 8: uint16(24825), + 9: uint16(25590), + 10: uint16(26928), + 11: uint16(29242), + 12: uint16(32822), + 13: uint16(63860), + 14: uint16(37326), + 15: uint16(24369), + 16: uint16(63861), + 17: uint16(63862), + 18: uint16(32004), + 19: uint16(33509), + 20: uint16(33903), + 21: uint16(33979), + 22: uint16(34277), + 23: uint16(36493), + 24: uint16(63863), + 25: uint16(20335), + 26: uint16(63864), + 27: uint16(63865), + 28: uint16(22756), + 29: uint16(23363), + 30: uint16(24665), + 31: uint16(25562), + 32: uint16(25880), + 33: uint16(25965), + 34: uint16(26264), + 35: uint16(63866), + 36: uint16(26954), + 37: uint16(27171), + 38: uint16(27915), + 39: uint16(28673), + 40: uint16(29036), + 41: uint16(30162), + 42: uint16(30221), + 43: uint16(31155), + 44: uint16(31344), + 45: uint16(63867), + 46: uint16(32650), + 47: uint16(63868), + 48: uint16(35140), + 49: uint16(63869), + 50: uint16(35731), + 51: uint16(37312), + 52: uint16(38525), + 53: uint16(63870), + 54: uint16(39178), + 55: uint16(22276), + 56: uint16(24481), + 57: uint16(26044), + 58: uint16(28417), + 59: uint16(30208), + 60: uint16(31142), + 61: uint16(35486), + 62: uint16(39341), + 63: uint16(39770), + 64: uint16(40812), + 65: uint16(20740), + 66: uint16(25014), + 67: uint16(25233), + 68: uint16(27277), + 69: uint16(33222), + 70: uint16(20547), + 71: uint16(22576), + 72: uint16(24422), + 73: uint16(28937), + 74: uint16(35328), + 75: uint16(35578), + 76: uint16(23420), + 77: uint16(34326), + 78: uint16(20474), + 79: uint16(20796), + 80: uint16(22196), + 81: uint16(22852), + 82: uint16(25513), + 83: uint16(28153), + 84: uint16(23978), + 85: uint16(26989), + 86: uint16(20870), + 87: uint16(20104), + 88: uint16(20313), + 89: uint16(63871), + 90: uint16(63872), + 91: uint16(63873), + 92: uint16(22914), + 93: uint16(63874), + }, + 69: { + 0: uint16(63875), + 1: uint16(27487), + 2: uint16(27741), + 3: uint16(63876), + 4: uint16(29877), + 5: uint16(30998), + 6: uint16(63877), + 7: uint16(33287), + 8: uint16(33349), + 9: uint16(33593), + 10: uint16(36671), + 11: uint16(36701), + 12: uint16(63878), + 13: uint16(39192), + 14: uint16(63879), + 15: uint16(63880), + 16: uint16(63881), + 17: uint16(20134), + 18: uint16(63882), + 19: uint16(22495), + 20: uint16(24441), + 21: uint16(26131), + 22: uint16(63883), + 23: uint16(63884), + 24: uint16(30123), + 25: uint16(32377), + 26: uint16(35695), + 27: uint16(63885), + 28: uint16(36870), + 29: uint16(39515), + 30: uint16(22181), + 31: uint16(22567), + 32: uint16(23032), + 33: uint16(23071), + 34: uint16(23476), + 35: uint16(63886), + 36: uint16(24310), + 37: uint16(63887), + 38: uint16(63888), + 39: uint16(25424), + 40: uint16(25403), + 41: uint16(63889), + 42: uint16(26941), + 43: uint16(27783), + 44: uint16(27839), + 45: uint16(28046), + 46: uint16(28051), + 47: uint16(28149), + 48: uint16(28436), + 49: uint16(63890), + 50: uint16(28895), + 51: uint16(28982), + 52: uint16(29017), + 53: uint16(63891), + 54: uint16(29123), + 55: uint16(29141), + 56: uint16(63892), + 57: uint16(30799), + 58: uint16(30831), + 59: uint16(63893), + 60: uint16(31605), + 61: uint16(32227), + 62: uint16(63894), + 63: uint16(32303), + 64: uint16(63895), + 65: uint16(34893), + 66: uint16(36575), + 67: uint16(63896), + 68: uint16(63897), + 69: uint16(63898), + 70: uint16(37467), + 71: uint16(63899), + 72: uint16(40182), + 73: uint16(63900), + 74: uint16(63901), + 75: uint16(63902), + 76: uint16(24709), + 77: uint16(28037), + 78: uint16(63903), + 79: uint16(29105), + 80: uint16(63904), + 81: uint16(63905), + 82: uint16(38321), + 83: uint16(21421), + 84: uint16(63906), + 85: uint16(63907), + 86: uint16(63908), + 87: uint16(26579), + 88: uint16(63909), + 89: uint16(28814), + 90: uint16(28976), + 91: uint16(29744), + 92: uint16(33398), + 93: uint16(33490), + }, + 70: { + 0: uint16(63910), + 1: uint16(38331), + 2: uint16(39653), + 3: uint16(40573), + 4: uint16(26308), + 5: uint16(63911), + 6: uint16(29121), + 7: uint16(33865), + 8: uint16(63912), + 9: uint16(63913), + 10: uint16(22603), + 11: uint16(63914), + 12: uint16(63915), + 13: uint16(23992), + 14: uint16(24433), + 15: uint16(63916), + 16: uint16(26144), + 17: uint16(26254), + 18: uint16(27001), + 19: uint16(27054), + 20: uint16(27704), + 21: uint16(27891), + 22: uint16(28214), + 23: uint16(28481), + 24: uint16(28634), + 25: uint16(28699), + 26: uint16(28719), + 27: uint16(29008), + 28: uint16(29151), + 29: uint16(29552), + 30: uint16(63917), + 31: uint16(29787), + 32: uint16(63918), + 33: uint16(29908), + 34: uint16(30408), + 35: uint16(31310), + 36: uint16(32403), + 37: uint16(63919), + 38: uint16(63920), + 39: uint16(33521), + 40: uint16(35424), + 41: uint16(36814), + 42: uint16(63921), + 43: uint16(37704), + 44: uint16(63922), + 45: uint16(38681), + 46: uint16(63923), + 47: uint16(63924), + 48: uint16(20034), + 49: uint16(20522), + 50: uint16(63925), + 51: uint16(21000), + 52: uint16(21473), + 53: uint16(26355), + 54: uint16(27757), + 55: uint16(28618), + 56: uint16(29450), + 57: uint16(30591), + 58: uint16(31330), + 59: uint16(33454), + 60: uint16(34269), + 61: uint16(34306), + 62: uint16(63926), + 63: uint16(35028), + 64: uint16(35427), + 65: uint16(35709), + 66: uint16(35947), + 67: uint16(63927), + 68: uint16(37555), + 69: uint16(63928), + 70: uint16(38675), + 71: uint16(38928), + 72: uint16(20116), + 73: uint16(20237), + 74: uint16(20425), + 75: uint16(20658), + 76: uint16(21320), + 77: uint16(21566), + 78: uint16(21555), + 79: uint16(21978), + 80: uint16(22626), + 81: uint16(22714), + 82: uint16(22887), + 83: uint16(23067), + 84: uint16(23524), + 85: uint16(24735), + 86: uint16(63929), + 87: uint16(25034), + 88: uint16(25942), + 89: uint16(26111), + 90: uint16(26212), + 91: uint16(26791), + 92: uint16(27738), + 93: uint16(28595), + }, + 71: { + 0: uint16(28879), + 1: uint16(29100), + 2: uint16(29522), + 3: uint16(31613), + 4: uint16(34568), + 5: uint16(35492), + 6: uint16(39986), + 7: uint16(40711), + 8: uint16(23627), + 9: uint16(27779), + 10: uint16(29508), + 11: uint16(29577), + 12: uint16(37434), + 13: uint16(28331), + 14: uint16(29797), + 15: uint16(30239), + 16: uint16(31337), + 17: uint16(32277), + 18: uint16(34314), + 19: uint16(20800), + 20: uint16(22725), + 21: uint16(25793), + 22: uint16(29934), + 23: uint16(29973), + 24: uint16(30320), + 25: uint16(32705), + 26: uint16(37013), + 27: uint16(38605), + 28: uint16(39252), + 29: uint16(28198), + 30: uint16(29926), + 31: uint16(31401), + 32: uint16(31402), + 33: uint16(33253), + 34: uint16(34521), + 35: uint16(34680), + 36: uint16(35355), + 37: uint16(23113), + 38: uint16(23436), + 39: uint16(23451), + 40: uint16(26785), + 41: uint16(26880), + 42: uint16(28003), + 43: uint16(29609), + 44: uint16(29715), + 45: uint16(29740), + 46: uint16(30871), + 47: uint16(32233), + 48: uint16(32747), + 49: uint16(33048), + 50: uint16(33109), + 51: uint16(33694), + 52: uint16(35916), + 53: uint16(38446), + 54: uint16(38929), + 55: uint16(26352), + 56: uint16(24448), + 57: uint16(26106), + 58: uint16(26505), + 59: uint16(27754), + 60: uint16(29579), + 61: uint16(20525), + 62: uint16(23043), + 63: uint16(27498), + 64: uint16(30702), + 65: uint16(22806), + 66: uint16(23916), + 67: uint16(24013), + 68: uint16(29477), + 69: uint16(30031), + 70: uint16(63930), + 71: uint16(63931), + 72: uint16(20709), + 73: uint16(20985), + 74: uint16(22575), + 75: uint16(22829), + 76: uint16(22934), + 77: uint16(23002), + 78: uint16(23525), + 79: uint16(63932), + 80: uint16(63933), + 81: uint16(23970), + 82: uint16(25303), + 83: uint16(25622), + 84: uint16(25747), + 85: uint16(25854), + 86: uint16(63934), + 87: uint16(26332), + 88: uint16(63935), + 89: uint16(27208), + 90: uint16(63936), + 91: uint16(29183), + 92: uint16(29796), + 93: uint16(63937), + }, + 72: { + 0: uint16(31368), + 1: uint16(31407), + 2: uint16(32327), + 3: uint16(32350), + 4: uint16(32768), + 5: uint16(33136), + 6: uint16(63938), + 7: uint16(34799), + 8: uint16(35201), + 9: uint16(35616), + 10: uint16(36953), + 11: uint16(63939), + 12: uint16(36992), + 13: uint16(39250), + 14: uint16(24958), + 15: uint16(27442), + 16: uint16(28020), + 17: uint16(32287), + 18: uint16(35109), + 19: uint16(36785), + 20: uint16(20433), + 21: uint16(20653), + 22: uint16(20887), + 23: uint16(21191), + 24: uint16(22471), + 25: uint16(22665), + 26: uint16(23481), + 27: uint16(24248), + 28: uint16(24898), + 29: uint16(27029), + 30: uint16(28044), + 31: uint16(28263), + 32: uint16(28342), + 33: uint16(29076), + 34: uint16(29794), + 35: uint16(29992), + 36: uint16(29996), + 37: uint16(32883), + 38: uint16(33592), + 39: uint16(33993), + 40: uint16(36362), + 41: uint16(37780), + 42: uint16(37854), + 43: uint16(63940), + 44: uint16(20110), + 45: uint16(20305), + 46: uint16(20598), + 47: uint16(20778), + 48: uint16(21448), + 49: uint16(21451), + 50: uint16(21491), + 51: uint16(23431), + 52: uint16(23507), + 53: uint16(23588), + 54: uint16(24858), + 55: uint16(24962), + 56: uint16(26100), + 57: uint16(29275), + 58: uint16(29591), + 59: uint16(29760), + 60: uint16(30402), + 61: uint16(31056), + 62: uint16(31121), + 63: uint16(31161), + 64: uint16(32006), + 65: uint16(32701), + 66: uint16(33419), + 67: uint16(34261), + 68: uint16(34398), + 69: uint16(36802), + 70: uint16(36935), + 71: uint16(37109), + 72: uint16(37354), + 73: uint16(38533), + 74: uint16(38632), + 75: uint16(38633), + 76: uint16(21206), + 77: uint16(24423), + 78: uint16(26093), + 79: uint16(26161), + 80: uint16(26671), + 81: uint16(29020), + 82: uint16(31286), + 83: uint16(37057), + 84: uint16(38922), + 85: uint16(20113), + 86: uint16(63941), + 87: uint16(27218), + 88: uint16(27550), + 89: uint16(28560), + 90: uint16(29065), + 91: uint16(32792), + 92: uint16(33464), + 93: uint16(34131), + }, + 73: { + 0: uint16(36939), + 1: uint16(38549), + 2: uint16(38642), + 3: uint16(38907), + 4: uint16(34074), + 5: uint16(39729), + 6: uint16(20112), + 7: uint16(29066), + 8: uint16(38596), + 9: uint16(20803), + 10: uint16(21407), + 11: uint16(21729), + 12: uint16(22291), + 13: uint16(22290), + 14: uint16(22435), + 15: uint16(23195), + 16: uint16(23236), + 17: uint16(23491), + 18: uint16(24616), + 19: uint16(24895), + 20: uint16(25588), + 21: uint16(27781), + 22: uint16(27961), + 23: uint16(28274), + 24: uint16(28304), + 25: uint16(29232), + 26: uint16(29503), + 27: uint16(29783), + 28: uint16(33489), + 29: uint16(34945), + 30: uint16(36677), + 31: uint16(36960), + 32: uint16(63942), + 33: uint16(38498), + 34: uint16(39000), + 35: uint16(40219), + 36: uint16(26376), + 37: uint16(36234), + 38: uint16(37470), + 39: uint16(20301), + 40: uint16(20553), + 41: uint16(20702), + 42: uint16(21361), + 43: uint16(22285), + 44: uint16(22996), + 45: uint16(23041), + 46: uint16(23561), + 47: uint16(24944), + 48: uint16(26256), + 49: uint16(28205), + 50: uint16(29234), + 51: uint16(29771), + 52: uint16(32239), + 53: uint16(32963), + 54: uint16(33806), + 55: uint16(33894), + 56: uint16(34111), + 57: uint16(34655), + 58: uint16(34907), + 59: uint16(35096), + 60: uint16(35586), + 61: uint16(36949), + 62: uint16(38859), + 63: uint16(39759), + 64: uint16(20083), + 65: uint16(20369), + 66: uint16(20754), + 67: uint16(20842), + 68: uint16(63943), + 69: uint16(21807), + 70: uint16(21929), + 71: uint16(23418), + 72: uint16(23461), + 73: uint16(24188), + 74: uint16(24189), + 75: uint16(24254), + 76: uint16(24736), + 77: uint16(24799), + 78: uint16(24840), + 79: uint16(24841), + 80: uint16(25540), + 81: uint16(25912), + 82: uint16(26377), + 83: uint16(63944), + 84: uint16(26580), + 85: uint16(26586), + 86: uint16(63945), + 87: uint16(26977), + 88: uint16(26978), + 89: uint16(27833), + 90: uint16(27943), + 91: uint16(63946), + 92: uint16(28216), + 93: uint16(63947), + }, + 74: { + 0: uint16(28641), + 1: uint16(29494), + 2: uint16(29495), + 3: uint16(63948), + 4: uint16(29788), + 5: uint16(30001), + 6: uint16(63949), + 7: uint16(30290), + 8: uint16(63950), + 9: uint16(63951), + 10: uint16(32173), + 11: uint16(33278), + 12: uint16(33848), + 13: uint16(35029), + 14: uint16(35480), + 15: uint16(35547), + 16: uint16(35565), + 17: uint16(36400), + 18: uint16(36418), + 19: uint16(36938), + 20: uint16(36926), + 21: uint16(36986), + 22: uint16(37193), + 23: uint16(37321), + 24: uint16(37742), + 25: uint16(63952), + 26: uint16(63953), + 27: uint16(22537), + 28: uint16(63954), + 29: uint16(27603), + 30: uint16(32905), + 31: uint16(32946), + 32: uint16(63955), + 33: uint16(63956), + 34: uint16(20801), + 35: uint16(22891), + 36: uint16(23609), + 37: uint16(63957), + 38: uint16(63958), + 39: uint16(28516), + 40: uint16(29607), + 41: uint16(32996), + 42: uint16(36103), + 43: uint16(63959), + 44: uint16(37399), + 45: uint16(38287), + 46: uint16(63960), + 47: uint16(63961), + 48: uint16(63962), + 49: uint16(63963), + 50: uint16(32895), + 51: uint16(25102), + 52: uint16(28700), + 53: uint16(32104), + 54: uint16(34701), + 55: uint16(63964), + 56: uint16(22432), + 57: uint16(24681), + 58: uint16(24903), + 59: uint16(27575), + 60: uint16(35518), + 61: uint16(37504), + 62: uint16(38577), + 63: uint16(20057), + 64: uint16(21535), + 65: uint16(28139), + 66: uint16(34093), + 67: uint16(38512), + 68: uint16(38899), + 69: uint16(39150), + 70: uint16(25558), + 71: uint16(27875), + 72: uint16(37009), + 73: uint16(20957), + 74: uint16(25033), + 75: uint16(33210), + 76: uint16(40441), + 77: uint16(20381), + 78: uint16(20506), + 79: uint16(20736), + 80: uint16(23452), + 81: uint16(24847), + 82: uint16(25087), + 83: uint16(25836), + 84: uint16(26885), + 85: uint16(27589), + 86: uint16(30097), + 87: uint16(30691), + 88: uint16(32681), + 89: uint16(33380), + 90: uint16(34191), + 91: uint16(34811), + 92: uint16(34915), + 93: uint16(35516), + }, + 75: { + 0: uint16(35696), + 1: uint16(37291), + 2: uint16(20108), + 3: uint16(20197), + 4: uint16(20234), + 5: uint16(63965), + 6: uint16(63966), + 7: uint16(22839), + 8: uint16(23016), + 9: uint16(63967), + 10: uint16(24050), + 11: uint16(24347), + 12: uint16(24411), + 13: uint16(24609), + 14: uint16(63968), + 15: uint16(63969), + 16: uint16(63970), + 17: uint16(63971), + 18: uint16(29246), + 19: uint16(29669), + 20: uint16(63972), + 21: uint16(30064), + 22: uint16(30157), + 23: uint16(63973), + 24: uint16(31227), + 25: uint16(63974), + 26: uint16(32780), + 27: uint16(32819), + 28: uint16(32900), + 29: uint16(33505), + 30: uint16(33617), + 31: uint16(63975), + 32: uint16(63976), + 33: uint16(36029), + 34: uint16(36019), + 35: uint16(36999), + 36: uint16(63977), + 37: uint16(63978), + 38: uint16(39156), + 39: uint16(39180), + 40: uint16(63979), + 41: uint16(63980), + 42: uint16(28727), + 43: uint16(30410), + 44: uint16(32714), + 45: uint16(32716), + 46: uint16(32764), + 47: uint16(35610), + 48: uint16(20154), + 49: uint16(20161), + 50: uint16(20995), + 51: uint16(21360), + 52: uint16(63981), + 53: uint16(21693), + 54: uint16(22240), + 55: uint16(23035), + 56: uint16(23493), + 57: uint16(24341), + 58: uint16(24525), + 59: uint16(28270), + 60: uint16(63982), + 61: uint16(63983), + 62: uint16(32106), + 63: uint16(33589), + 64: uint16(63984), + 65: uint16(34451), + 66: uint16(35469), + 67: uint16(63985), + 68: uint16(38765), + 69: uint16(38775), + 70: uint16(63986), + 71: uint16(63987), + 72: uint16(19968), + 73: uint16(20314), + 74: uint16(20350), + 75: uint16(22777), + 76: uint16(26085), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(37808), + 80: uint16(39353), + 81: uint16(20219), + 82: uint16(22764), + 83: uint16(22922), + 84: uint16(23001), + 85: uint16(24641), + 86: uint16(63988), + 87: uint16(63989), + 88: uint16(31252), + 89: uint16(63990), + 90: uint16(33615), + 91: uint16(36035), + 92: uint16(20837), + 93: uint16(21316), + }, + 76: { + 0: uint16(63991), + 1: uint16(63992), + 2: uint16(63993), + 3: uint16(20173), + 4: uint16(21097), + 5: uint16(23381), + 6: uint16(33471), + 7: uint16(20180), + 8: uint16(21050), + 9: uint16(21672), + 10: uint16(22985), + 11: uint16(23039), + 12: uint16(23376), + 13: uint16(23383), + 14: uint16(23388), + 15: uint16(24675), + 16: uint16(24904), + 17: uint16(28363), + 18: uint16(28825), + 19: uint16(29038), + 20: uint16(29574), + 21: uint16(29943), + 22: uint16(30133), + 23: uint16(30913), + 24: uint16(32043), + 25: uint16(32773), + 26: uint16(33258), + 27: uint16(33576), + 28: uint16(34071), + 29: uint16(34249), + 30: uint16(35566), + 31: uint16(36039), + 32: uint16(38604), + 33: uint16(20316), + 34: uint16(21242), + 35: uint16(22204), + 36: uint16(26027), + 37: uint16(26152), + 38: uint16(28796), + 39: uint16(28856), + 40: uint16(29237), + 41: uint16(32189), + 42: uint16(33421), + 43: uint16(37196), + 44: uint16(38592), + 45: uint16(40306), + 46: uint16(23409), + 47: uint16(26855), + 48: uint16(27544), + 49: uint16(28538), + 50: uint16(30430), + 51: uint16(23697), + 52: uint16(26283), + 53: uint16(28507), + 54: uint16(31668), + 55: uint16(31786), + 56: uint16(34870), + 57: uint16(38620), + 58: uint16(19976), + 59: uint16(20183), + 60: uint16(21280), + 61: uint16(22580), + 62: uint16(22715), + 63: uint16(22767), + 64: uint16(22892), + 65: uint16(23559), + 66: uint16(24115), + 67: uint16(24196), + 68: uint16(24373), + 69: uint16(25484), + 70: uint16(26290), + 71: uint16(26454), + 72: uint16(27167), + 73: uint16(27299), + 74: uint16(27404), + 75: uint16(28479), + 76: uint16(29254), + 77: uint16(63994), + 78: uint16(29520), + 79: uint16(29835), + 80: uint16(31456), + 81: uint16(31911), + 82: uint16(33144), + 83: uint16(33247), + 84: uint16(33255), + 85: uint16(33674), + 86: uint16(33900), + 87: uint16(34083), + 88: uint16(34196), + 89: uint16(34255), + 90: uint16(35037), + 91: uint16(36115), + 92: uint16(37292), + 93: uint16(38263), + }, + 77: { + 0: uint16(38556), + 1: uint16(20877), + 2: uint16(21705), + 3: uint16(22312), + 4: uint16(23472), + 5: uint16(25165), + 6: uint16(26448), + 7: uint16(26685), + 8: uint16(26771), + 9: uint16(28221), + 10: uint16(28371), + 11: uint16(28797), + 12: uint16(32289), + 13: uint16(35009), + 14: uint16(36001), + 15: uint16(36617), + 16: uint16(40779), + 17: uint16(40782), + 18: uint16(29229), + 19: uint16(31631), + 20: uint16(35533), + 21: uint16(37658), + 22: uint16(20295), + 23: uint16(20302), + 24: uint16(20786), + 25: uint16(21632), + 26: uint16(22992), + 27: uint16(24213), + 28: uint16(25269), + 29: uint16(26485), + 30: uint16(26990), + 31: uint16(27159), + 32: uint16(27822), + 33: uint16(28186), + 34: uint16(29401), + 35: uint16(29482), + 36: uint16(30141), + 37: uint16(31672), + 38: uint16(32053), + 39: uint16(33511), + 40: uint16(33785), + 41: uint16(33879), + 42: uint16(34295), + 43: uint16(35419), + 44: uint16(36015), + 45: uint16(36487), + 46: uint16(36889), + 47: uint16(37048), + 48: uint16(38606), + 49: uint16(40799), + 50: uint16(21219), + 51: uint16(21514), + 52: uint16(23265), + 53: uint16(23490), + 54: uint16(25688), + 55: uint16(25973), + 56: uint16(28404), + 57: uint16(29380), + 58: uint16(63995), + 59: uint16(30340), + 60: uint16(31309), + 61: uint16(31515), + 62: uint16(31821), + 63: uint16(32318), + 64: uint16(32735), + 65: uint16(33659), + 66: uint16(35627), + 67: uint16(36042), + 68: uint16(36196), + 69: uint16(36321), + 70: uint16(36447), + 71: uint16(36842), + 72: uint16(36857), + 73: uint16(36969), + 74: uint16(37841), + 75: uint16(20291), + 76: uint16(20346), + 77: uint16(20659), + 78: uint16(20840), + 79: uint16(20856), + 80: uint16(21069), + 81: uint16(21098), + 82: uint16(22625), + 83: uint16(22652), + 84: uint16(22880), + 85: uint16(23560), + 86: uint16(23637), + 87: uint16(24283), + 88: uint16(24731), + 89: uint16(25136), + 90: uint16(26643), + 91: uint16(27583), + 92: uint16(27656), + 93: uint16(28593), + }, + 78: { + 0: uint16(29006), + 1: uint16(29728), + 2: uint16(30000), + 3: uint16(30008), + 4: uint16(30033), + 5: uint16(30322), + 6: uint16(31564), + 7: uint16(31627), + 8: uint16(31661), + 9: uint16(31686), + 10: uint16(32399), + 11: uint16(35438), + 12: uint16(36670), + 13: uint16(36681), + 14: uint16(37439), + 15: uint16(37523), + 16: uint16(37666), + 17: uint16(37931), + 18: uint16(38651), + 19: uint16(39002), + 20: uint16(39019), + 21: uint16(39198), + 22: uint16(20999), + 23: uint16(25130), + 24: uint16(25240), + 25: uint16(27993), + 26: uint16(30308), + 27: uint16(31434), + 28: uint16(31680), + 29: uint16(32118), + 30: uint16(21344), + 31: uint16(23742), + 32: uint16(24215), + 33: uint16(28472), + 34: uint16(28857), + 35: uint16(31896), + 36: uint16(38673), + 37: uint16(39822), + 38: uint16(40670), + 39: uint16(25509), + 40: uint16(25722), + 41: uint16(34678), + 42: uint16(19969), + 43: uint16(20117), + 44: uint16(20141), + 45: uint16(20572), + 46: uint16(20597), + 47: uint16(21576), + 48: uint16(22979), + 49: uint16(23450), + 50: uint16(24128), + 51: uint16(24237), + 52: uint16(24311), + 53: uint16(24449), + 54: uint16(24773), + 55: uint16(25402), + 56: uint16(25919), + 57: uint16(25972), + 58: uint16(26060), + 59: uint16(26230), + 60: uint16(26232), + 61: uint16(26622), + 62: uint16(26984), + 63: uint16(27273), + 64: uint16(27491), + 65: uint16(27712), + 66: uint16(28096), + 67: uint16(28136), + 68: uint16(28191), + 69: uint16(28254), + 70: uint16(28702), + 71: uint16(28833), + 72: uint16(29582), + 73: uint16(29693), + 74: uint16(30010), + 75: uint16(30555), + 76: uint16(30855), + 77: uint16(31118), + 78: uint16(31243), + 79: uint16(31357), + 80: uint16(31934), + 81: uint16(32142), + 82: uint16(33351), + 83: uint16(35330), + 84: uint16(35562), + 85: uint16(35998), + 86: uint16(37165), + 87: uint16(37194), + 88: uint16(37336), + 89: uint16(37478), + 90: uint16(37580), + 91: uint16(37664), + 92: uint16(38662), + 93: uint16(38742), + }, + 79: { + 0: uint16(38748), + 1: uint16(38914), + 2: uint16(40718), + 3: uint16(21046), + 4: uint16(21137), + 5: uint16(21884), + 6: uint16(22564), + 7: uint16(24093), + 8: uint16(24351), + 9: uint16(24716), + 10: uint16(25552), + 11: uint16(26799), + 12: uint16(28639), + 13: uint16(31085), + 14: uint16(31532), + 15: uint16(33229), + 16: uint16(34234), + 17: uint16(35069), + 18: uint16(35576), + 19: uint16(36420), + 20: uint16(37261), + 21: uint16(38500), + 22: uint16(38555), + 23: uint16(38717), + 24: uint16(38988), + 25: uint16(40778), + 26: uint16(20430), + 27: uint16(20806), + 28: uint16(20939), + 29: uint16(21161), + 30: uint16(22066), + 31: uint16(24340), + 32: uint16(24427), + 33: uint16(25514), + 34: uint16(25805), + 35: uint16(26089), + 36: uint16(26177), + 37: uint16(26362), + 38: uint16(26361), + 39: uint16(26397), + 40: uint16(26781), + 41: uint16(26839), + 42: uint16(27133), + 43: uint16(28437), + 44: uint16(28526), + 45: uint16(29031), + 46: uint16(29157), + 47: uint16(29226), + 48: uint16(29866), + 49: uint16(30522), + 50: uint16(31062), + 51: uint16(31066), + 52: uint16(31199), + 53: uint16(31264), + 54: uint16(31381), + 55: uint16(31895), + 56: uint16(31967), + 57: uint16(32068), + 58: uint16(32368), + 59: uint16(32903), + 60: uint16(34299), + 61: uint16(34468), + 62: uint16(35412), + 63: uint16(35519), + 64: uint16(36249), + 65: uint16(36481), + 66: uint16(36896), + 67: uint16(36973), + 68: uint16(37347), + 69: uint16(38459), + 70: uint16(38613), + 71: uint16(40165), + 72: uint16(26063), + 73: uint16(31751), + 74: uint16(36275), + 75: uint16(37827), + 76: uint16(23384), + 77: uint16(23562), + 78: uint16(21330), + 79: uint16(25305), + 80: uint16(29469), + 81: uint16(20519), + 82: uint16(23447), + 83: uint16(24478), + 84: uint16(24752), + 85: uint16(24939), + 86: uint16(26837), + 87: uint16(28121), + 88: uint16(29742), + 89: uint16(31278), + 90: uint16(32066), + 91: uint16(32156), + 92: uint16(32305), + 93: uint16(33131), + }, + 80: { + 0: uint16(36394), + 1: uint16(36405), + 2: uint16(37758), + 3: uint16(37912), + 4: uint16(20304), + 5: uint16(22352), + 6: uint16(24038), + 7: uint16(24231), + 8: uint16(25387), + 9: uint16(32618), + 10: uint16(20027), + 11: uint16(20303), + 12: uint16(20367), + 13: uint16(20570), + 14: uint16(23005), + 15: uint16(32964), + 16: uint16(21610), + 17: uint16(21608), + 18: uint16(22014), + 19: uint16(22863), + 20: uint16(23449), + 21: uint16(24030), + 22: uint16(24282), + 23: uint16(26205), + 24: uint16(26417), + 25: uint16(26609), + 26: uint16(26666), + 27: uint16(27880), + 28: uint16(27954), + 29: uint16(28234), + 30: uint16(28557), + 31: uint16(28855), + 32: uint16(29664), + 33: uint16(30087), + 34: uint16(31820), + 35: uint16(32002), + 36: uint16(32044), + 37: uint16(32162), + 38: uint16(33311), + 39: uint16(34523), + 40: uint16(35387), + 41: uint16(35461), + 42: uint16(36208), + 43: uint16(36490), + 44: uint16(36659), + 45: uint16(36913), + 46: uint16(37198), + 47: uint16(37202), + 48: uint16(37956), + 49: uint16(39376), + 50: uint16(31481), + 51: uint16(31909), + 52: uint16(20426), + 53: uint16(20737), + 54: uint16(20934), + 55: uint16(22472), + 56: uint16(23535), + 57: uint16(23803), + 58: uint16(26201), + 59: uint16(27197), + 60: uint16(27994), + 61: uint16(28310), + 62: uint16(28652), + 63: uint16(28940), + 64: uint16(30063), + 65: uint16(31459), + 66: uint16(34850), + 67: uint16(36897), + 68: uint16(36981), + 69: uint16(38603), + 70: uint16(39423), + 71: uint16(33537), + 72: uint16(20013), + 73: uint16(20210), + 74: uint16(34886), + 75: uint16(37325), + 76: uint16(21373), + 77: uint16(27355), + 78: uint16(26987), + 79: uint16(27713), + 80: uint16(33914), + 81: uint16(22686), + 82: uint16(24974), + 83: uint16(26366), + 84: uint16(25327), + 85: uint16(28893), + 86: uint16(29969), + 87: uint16(30151), + 88: uint16(32338), + 89: uint16(33976), + 90: uint16(35657), + 91: uint16(36104), + 92: uint16(20043), + 93: uint16(21482), + }, + 81: { + 0: uint16(21675), + 1: uint16(22320), + 2: uint16(22336), + 3: uint16(24535), + 4: uint16(25345), + 5: uint16(25351), + 6: uint16(25711), + 7: uint16(25903), + 8: uint16(26088), + 9: uint16(26234), + 10: uint16(26525), + 11: uint16(26547), + 12: uint16(27490), + 13: uint16(27744), + 14: uint16(27802), + 15: uint16(28460), + 16: uint16(30693), + 17: uint16(30757), + 18: uint16(31049), + 19: uint16(31063), + 20: uint16(32025), + 21: uint16(32930), + 22: uint16(33026), + 23: uint16(33267), + 24: uint16(33437), + 25: uint16(33463), + 26: uint16(34584), + 27: uint16(35468), + 28: uint16(63996), + 29: uint16(36100), + 30: uint16(36286), + 31: uint16(36978), + 32: uint16(30452), + 33: uint16(31257), + 34: uint16(31287), + 35: uint16(32340), + 36: uint16(32887), + 37: uint16(21767), + 38: uint16(21972), + 39: uint16(22645), + 40: uint16(25391), + 41: uint16(25634), + 42: uint16(26185), + 43: uint16(26187), + 44: uint16(26733), + 45: uint16(27035), + 46: uint16(27524), + 47: uint16(27941), + 48: uint16(28337), + 49: uint16(29645), + 50: uint16(29800), + 51: uint16(29857), + 52: uint16(30043), + 53: uint16(30137), + 54: uint16(30433), + 55: uint16(30494), + 56: uint16(30603), + 57: uint16(31206), + 58: uint16(32265), + 59: uint16(32285), + 60: uint16(33275), + 61: uint16(34095), + 62: uint16(34967), + 63: uint16(35386), + 64: uint16(36049), + 65: uint16(36587), + 66: uint16(36784), + 67: uint16(36914), + 68: uint16(37805), + 69: uint16(38499), + 70: uint16(38515), + 71: uint16(38663), + 72: uint16(20356), + 73: uint16(21489), + 74: uint16(23018), + 75: uint16(23241), + 76: uint16(24089), + 77: uint16(26702), + 78: uint16(29894), + 79: uint16(30142), + 80: uint16(31209), + 81: uint16(31378), + 82: uint16(33187), + 83: uint16(34541), + 84: uint16(36074), + 85: uint16(36300), + 86: uint16(36845), + 87: uint16(26015), + 88: uint16(26389), + 89: uint16(63997), + 90: uint16(22519), + 91: uint16(28503), + 92: uint16(32221), + 93: uint16(36655), + }, + 82: { + 0: uint16(37878), + 1: uint16(38598), + 2: uint16(24501), + 3: uint16(25074), + 4: uint16(28548), + 5: uint16(19988), + 6: uint16(20376), + 7: uint16(20511), + 8: uint16(21449), + 9: uint16(21983), + 10: uint16(23919), + 11: uint16(24046), + 12: uint16(27425), + 13: uint16(27492), + 14: uint16(30923), + 15: uint16(31642), + 16: uint16(63998), + 17: uint16(36425), + 18: uint16(36554), + 19: uint16(36974), + 20: uint16(25417), + 21: uint16(25662), + 22: uint16(30528), + 23: uint16(31364), + 24: uint16(37679), + 25: uint16(38015), + 26: uint16(40810), + 27: uint16(25776), + 28: uint16(28591), + 29: uint16(29158), + 30: uint16(29864), + 31: uint16(29914), + 32: uint16(31428), + 33: uint16(31762), + 34: uint16(32386), + 35: uint16(31922), + 36: uint16(32408), + 37: uint16(35738), + 38: uint16(36106), + 39: uint16(38013), + 40: uint16(39184), + 41: uint16(39244), + 42: uint16(21049), + 43: uint16(23519), + 44: uint16(25830), + 45: uint16(26413), + 46: uint16(32046), + 47: uint16(20717), + 48: uint16(21443), + 49: uint16(22649), + 50: uint16(24920), + 51: uint16(24921), + 52: uint16(25082), + 53: uint16(26028), + 54: uint16(31449), + 55: uint16(35730), + 56: uint16(35734), + 57: uint16(20489), + 58: uint16(20513), + 59: uint16(21109), + 60: uint16(21809), + 61: uint16(23100), + 62: uint16(24288), + 63: uint16(24432), + 64: uint16(24884), + 65: uint16(25950), + 66: uint16(26124), + 67: uint16(26166), + 68: uint16(26274), + 69: uint16(27085), + 70: uint16(28356), + 71: uint16(28466), + 72: uint16(29462), + 73: uint16(30241), + 74: uint16(31379), + 75: uint16(33081), + 76: uint16(33369), + 77: uint16(33750), + 78: uint16(33980), + 79: uint16(20661), + 80: uint16(22512), + 81: uint16(23488), + 82: uint16(23528), + 83: uint16(24425), + 84: uint16(25505), + 85: uint16(30758), + 86: uint16(32181), + 87: uint16(33756), + 88: uint16(34081), + 89: uint16(37319), + 90: uint16(37365), + 91: uint16(20874), + 92: uint16(26613), + 93: uint16(31574), + }, + 83: { + 0: uint16(36012), + 1: uint16(20932), + 2: uint16(22971), + 3: uint16(24765), + 4: uint16(34389), + 5: uint16(20508), + 6: uint16(63999), + 7: uint16(21076), + 8: uint16(23610), + 9: uint16(24957), + 10: uint16(25114), + 11: uint16(25299), + 12: uint16(25842), + 13: uint16(26021), + 14: uint16(28364), + 15: uint16(30240), + 16: uint16(33034), + 17: uint16(36448), + 18: uint16(38495), + 19: uint16(38587), + 20: uint16(20191), + 21: uint16(21315), + 22: uint16(21912), + 23: uint16(22825), + 24: uint16(24029), + 25: uint16(25797), + 26: uint16(27849), + 27: uint16(28154), + 28: uint16(29588), + 29: uint16(31359), + 30: uint16(33307), + 31: uint16(34214), + 32: uint16(36068), + 33: uint16(36368), + 34: uint16(36983), + 35: uint16(37351), + 36: uint16(38369), + 37: uint16(38433), + 38: uint16(38854), + 39: uint16(20984), + 40: uint16(21746), + 41: uint16(21894), + 42: uint16(24505), + 43: uint16(25764), + 44: uint16(28552), + 45: uint16(32180), + 46: uint16(36639), + 47: uint16(36685), + 48: uint16(37941), + 49: uint16(20681), + 50: uint16(23574), + 51: uint16(27838), + 52: uint16(28155), + 53: uint16(29979), + 54: uint16(30651), + 55: uint16(31805), + 56: uint16(31844), + 57: uint16(35449), + 58: uint16(35522), + 59: uint16(22558), + 60: uint16(22974), + 61: uint16(24086), + 62: uint16(25463), + 63: uint16(29266), + 64: uint16(30090), + 65: uint16(30571), + 66: uint16(35548), + 67: uint16(36028), + 68: uint16(36626), + 69: uint16(24307), + 70: uint16(26228), + 71: uint16(28152), + 72: uint16(32893), + 73: uint16(33729), + 74: uint16(35531), + 75: uint16(38737), + 76: uint16(39894), + 77: uint16(64000), + 78: uint16(21059), + 79: uint16(26367), + 80: uint16(28053), + 81: uint16(28399), + 82: uint16(32224), + 83: uint16(35558), + 84: uint16(36910), + 85: uint16(36958), + 86: uint16(39636), + 87: uint16(21021), + 88: uint16(21119), + 89: uint16(21736), + 90: uint16(24980), + 91: uint16(25220), + 92: uint16(25307), + 93: uint16(26786), + }, + 84: { + 0: uint16(26898), + 1: uint16(26970), + 2: uint16(27189), + 3: uint16(28818), + 4: uint16(28966), + 5: uint16(30813), + 6: uint16(30977), + 7: uint16(30990), + 8: uint16(31186), + 9: uint16(31245), + 10: uint16(32918), + 11: uint16(33400), + 12: uint16(33493), + 13: uint16(33609), + 14: uint16(34121), + 15: uint16(35970), + 16: uint16(36229), + 17: uint16(37218), + 18: uint16(37259), + 19: uint16(37294), + 20: uint16(20419), + 21: uint16(22225), + 22: uint16(29165), + 23: uint16(30679), + 24: uint16(34560), + 25: uint16(35320), + 26: uint16(23544), + 27: uint16(24534), + 28: uint16(26449), + 29: uint16(37032), + 30: uint16(21474), + 31: uint16(22618), + 32: uint16(23541), + 33: uint16(24740), + 34: uint16(24961), + 35: uint16(25696), + 36: uint16(32317), + 37: uint16(32880), + 38: uint16(34085), + 39: uint16(37507), + 40: uint16(25774), + 41: uint16(20652), + 42: uint16(23828), + 43: uint16(26368), + 44: uint16(22684), + 45: uint16(25277), + 46: uint16(25512), + 47: uint16(26894), + 48: uint16(27000), + 49: uint16(27166), + 50: uint16(28267), + 51: uint16(30394), + 52: uint16(31179), + 53: uint16(33467), + 54: uint16(33833), + 55: uint16(35535), + 56: uint16(36264), + 57: uint16(36861), + 58: uint16(37138), + 59: uint16(37195), + 60: uint16(37276), + 61: uint16(37648), + 62: uint16(37656), + 63: uint16(37786), + 64: uint16(38619), + 65: uint16(39478), + 66: uint16(39949), + 67: uint16(19985), + 68: uint16(30044), + 69: uint16(31069), + 70: uint16(31482), + 71: uint16(31569), + 72: uint16(31689), + 73: uint16(32302), + 74: uint16(33988), + 75: uint16(36441), + 76: uint16(36468), + 77: uint16(36600), + 78: uint16(36880), + 79: uint16(26149), + 80: uint16(26943), + 81: uint16(29763), + 82: uint16(20986), + 83: uint16(26414), + 84: uint16(40668), + 85: uint16(20805), + 86: uint16(24544), + 87: uint16(27798), + 88: uint16(34802), + 89: uint16(34909), + 90: uint16(34935), + 91: uint16(24756), + 92: uint16(33205), + 93: uint16(33795), + }, + 85: { + 0: uint16(36101), + 1: uint16(21462), + 2: uint16(21561), + 3: uint16(22068), + 4: uint16(23094), + 5: uint16(23601), + 6: uint16(28810), + 7: uint16(32736), + 8: uint16(32858), + 9: uint16(33030), + 10: uint16(33261), + 11: uint16(36259), + 12: uint16(37257), + 13: uint16(39519), + 14: uint16(40434), + 15: uint16(20596), + 16: uint16(20164), + 17: uint16(21408), + 18: uint16(24827), + 19: uint16(28204), + 20: uint16(23652), + 21: uint16(20360), + 22: uint16(20516), + 23: uint16(21988), + 24: uint16(23769), + 25: uint16(24159), + 26: uint16(24677), + 27: uint16(26772), + 28: uint16(27835), + 29: uint16(28100), + 30: uint16(29118), + 31: uint16(30164), + 32: uint16(30196), + 33: uint16(30305), + 34: uint16(31258), + 35: uint16(31305), + 36: uint16(32199), + 37: uint16(32251), + 38: uint16(32622), + 39: uint16(33268), + 40: uint16(34473), + 41: uint16(36636), + 42: uint16(38601), + 43: uint16(39347), + 44: uint16(40786), + 45: uint16(21063), + 46: uint16(21189), + 47: uint16(39149), + 48: uint16(35242), + 49: uint16(19971), + 50: uint16(26578), + 51: uint16(28422), + 52: uint16(20405), + 53: uint16(23522), + 54: uint16(26517), + 55: uint16(27784), + 56: uint16(28024), + 57: uint16(29723), + 58: uint16(30759), + 59: uint16(37341), + 60: uint16(37756), + 61: uint16(34756), + 62: uint16(31204), + 63: uint16(31281), + 64: uint16(24555), + 65: uint16(20182), + 66: uint16(21668), + 67: uint16(21822), + 68: uint16(22702), + 69: uint16(22949), + 70: uint16(24816), + 71: uint16(25171), + 72: uint16(25302), + 73: uint16(26422), + 74: uint16(26965), + 75: uint16(33333), + 76: uint16(38464), + 77: uint16(39345), + 78: uint16(39389), + 79: uint16(20524), + 80: uint16(21331), + 81: uint16(21828), + 82: uint16(22396), + 83: uint16(64001), + 84: uint16(25176), + 85: uint16(64002), + 86: uint16(25826), + 87: uint16(26219), + 88: uint16(26589), + 89: uint16(28609), + 90: uint16(28655), + 91: uint16(29730), + 92: uint16(29752), + 93: uint16(35351), + }, + 86: { + 0: uint16(37944), + 1: uint16(21585), + 2: uint16(22022), + 3: uint16(22374), + 4: uint16(24392), + 5: uint16(24986), + 6: uint16(27470), + 7: uint16(28760), + 8: uint16(28845), + 9: uint16(32187), + 10: uint16(35477), + 11: uint16(22890), + 12: uint16(33067), + 13: uint16(25506), + 14: uint16(30472), + 15: uint16(32829), + 16: uint16(36010), + 17: uint16(22612), + 18: uint16(25645), + 19: uint16(27067), + 20: uint16(23445), + 21: uint16(24081), + 22: uint16(28271), + 23: uint16(64003), + 24: uint16(34153), + 25: uint16(20812), + 26: uint16(21488), + 27: uint16(22826), + 28: uint16(24608), + 29: uint16(24907), + 30: uint16(27526), + 31: uint16(27760), + 32: uint16(27888), + 33: uint16(31518), + 34: uint16(32974), + 35: uint16(33492), + 36: uint16(36294), + 37: uint16(37040), + 38: uint16(39089), + 39: uint16(64004), + 40: uint16(25799), + 41: uint16(28580), + 42: uint16(25745), + 43: uint16(25860), + 44: uint16(20814), + 45: uint16(21520), + 46: uint16(22303), + 47: uint16(35342), + 48: uint16(24927), + 49: uint16(26742), + 50: uint16(64005), + 51: uint16(30171), + 52: uint16(31570), + 53: uint16(32113), + 54: uint16(36890), + 55: uint16(22534), + 56: uint16(27084), + 57: uint16(33151), + 58: uint16(35114), + 59: uint16(36864), + 60: uint16(38969), + 61: uint16(20600), + 62: uint16(22871), + 63: uint16(22956), + 64: uint16(25237), + 65: uint16(36879), + 66: uint16(39722), + 67: uint16(24925), + 68: uint16(29305), + 69: uint16(38358), + 70: uint16(22369), + 71: uint16(23110), + 72: uint16(24052), + 73: uint16(25226), + 74: uint16(25773), + 75: uint16(25850), + 76: uint16(26487), + 77: uint16(27874), + 78: uint16(27966), + 79: uint16(29228), + 80: uint16(29750), + 81: uint16(30772), + 82: uint16(32631), + 83: uint16(33453), + 84: uint16(36315), + 85: uint16(38935), + 86: uint16(21028), + 87: uint16(22338), + 88: uint16(26495), + 89: uint16(29256), + 90: uint16(29923), + 91: uint16(36009), + 92: uint16(36774), + 93: uint16(37393), + }, + 87: { + 0: uint16(38442), + 1: uint16(20843), + 2: uint16(21485), + 3: uint16(25420), + 4: uint16(20329), + 5: uint16(21764), + 6: uint16(24726), + 7: uint16(25943), + 8: uint16(27803), + 9: uint16(28031), + 10: uint16(29260), + 11: uint16(29437), + 12: uint16(31255), + 13: uint16(35207), + 14: uint16(35997), + 15: uint16(24429), + 16: uint16(28558), + 17: uint16(28921), + 18: uint16(33192), + 19: uint16(24846), + 20: uint16(20415), + 21: uint16(20559), + 22: uint16(25153), + 23: uint16(29255), + 24: uint16(31687), + 25: uint16(32232), + 26: uint16(32745), + 27: uint16(36941), + 28: uint16(38829), + 29: uint16(39449), + 30: uint16(36022), + 31: uint16(22378), + 32: uint16(24179), + 33: uint16(26544), + 34: uint16(33805), + 35: uint16(35413), + 36: uint16(21536), + 37: uint16(23318), + 38: uint16(24163), + 39: uint16(24290), + 40: uint16(24330), + 41: uint16(25987), + 42: uint16(32954), + 43: uint16(34109), + 44: uint16(38281), + 45: uint16(38491), + 46: uint16(20296), + 47: uint16(21253), + 48: uint16(21261), + 49: uint16(21263), + 50: uint16(21638), + 51: uint16(21754), + 52: uint16(22275), + 53: uint16(24067), + 54: uint16(24598), + 55: uint16(25243), + 56: uint16(25265), + 57: uint16(25429), + 58: uint16(64006), + 59: uint16(27873), + 60: uint16(28006), + 61: uint16(30129), + 62: uint16(30770), + 63: uint16(32990), + 64: uint16(33071), + 65: uint16(33502), + 66: uint16(33889), + 67: uint16(33970), + 68: uint16(34957), + 69: uint16(35090), + 70: uint16(36875), + 71: uint16(37610), + 72: uint16(39165), + 73: uint16(39825), + 74: uint16(24133), + 75: uint16(26292), + 76: uint16(26333), + 77: uint16(28689), + 78: uint16(29190), + 79: uint16(64007), + 80: uint16(20469), + 81: uint16(21117), + 82: uint16(24426), + 83: uint16(24915), + 84: uint16(26451), + 85: uint16(27161), + 86: uint16(28418), + 87: uint16(29922), + 88: uint16(31080), + 89: uint16(34920), + 90: uint16(35961), + 91: uint16(39111), + 92: uint16(39108), + 93: uint16(39491), + }, + 88: { + 0: uint16(21697), + 1: uint16(31263), + 2: uint16(26963), + 3: uint16(35575), + 4: uint16(35914), + 5: uint16(39080), + 6: uint16(39342), + 7: uint16(24444), + 8: uint16(25259), + 9: uint16(30130), + 10: uint16(30382), + 11: uint16(34987), + 12: uint16(36991), + 13: uint16(38466), + 14: uint16(21305), + 15: uint16(24380), + 16: uint16(24517), + 17: uint16(27852), + 18: uint16(29644), + 19: uint16(30050), + 20: uint16(30091), + 21: uint16(31558), + 22: uint16(33534), + 23: uint16(39325), + 24: uint16(20047), + 25: uint16(36924), + 26: uint16(19979), + 27: uint16(20309), + 28: uint16(21414), + 29: uint16(22799), + 30: uint16(24264), + 31: uint16(26160), + 32: uint16(27827), + 33: uint16(29781), + 34: uint16(33655), + 35: uint16(34662), + 36: uint16(36032), + 37: uint16(36944), + 38: uint16(38686), + 39: uint16(39957), + 40: uint16(22737), + 41: uint16(23416), + 42: uint16(34384), + 43: uint16(35604), + 44: uint16(40372), + 45: uint16(23506), + 46: uint16(24680), + 47: uint16(24717), + 48: uint16(26097), + 49: uint16(27735), + 50: uint16(28450), + 51: uint16(28579), + 52: uint16(28698), + 53: uint16(32597), + 54: uint16(32752), + 55: uint16(38289), + 56: uint16(38290), + 57: uint16(38480), + 58: uint16(38867), + 59: uint16(21106), + 60: uint16(36676), + 61: uint16(20989), + 62: uint16(21547), + 63: uint16(21688), + 64: uint16(21859), + 65: uint16(21898), + 66: uint16(27323), + 67: uint16(28085), + 68: uint16(32216), + 69: uint16(33382), + 70: uint16(37532), + 71: uint16(38519), + 72: uint16(40569), + 73: uint16(21512), + 74: uint16(21704), + 75: uint16(30418), + 76: uint16(34532), + 77: uint16(38308), + 78: uint16(38356), + 79: uint16(38492), + 80: uint16(20130), + 81: uint16(20233), + 82: uint16(23022), + 83: uint16(23270), + 84: uint16(24055), + 85: uint16(24658), + 86: uint16(25239), + 87: uint16(26477), + 88: uint16(26689), + 89: uint16(27782), + 90: uint16(28207), + 91: uint16(32568), + 92: uint16(32923), + 93: uint16(33322), + }, + 89: { + 0: uint16(64008), + 1: uint16(64009), + 2: uint16(38917), + 3: uint16(20133), + 4: uint16(20565), + 5: uint16(21683), + 6: uint16(22419), + 7: uint16(22874), + 8: uint16(23401), + 9: uint16(23475), + 10: uint16(25032), + 11: uint16(26999), + 12: uint16(28023), + 13: uint16(28707), + 14: uint16(34809), + 15: uint16(35299), + 16: uint16(35442), + 17: uint16(35559), + 18: uint16(36994), + 19: uint16(39405), + 20: uint16(39608), + 21: uint16(21182), + 22: uint16(26680), + 23: uint16(20502), + 24: uint16(24184), + 25: uint16(26447), + 26: uint16(33607), + 27: uint16(34892), + 28: uint16(20139), + 29: uint16(21521), + 30: uint16(22190), + 31: uint16(29670), + 32: uint16(37141), + 33: uint16(38911), + 34: uint16(39177), + 35: uint16(39255), + 36: uint16(39321), + 37: uint16(22099), + 38: uint16(22687), + 39: uint16(34395), + 40: uint16(35377), + 41: uint16(25010), + 42: uint16(27382), + 43: uint16(29563), + 44: uint16(36562), + 45: uint16(27463), + 46: uint16(38570), + 47: uint16(39511), + 48: uint16(22869), + 49: uint16(29184), + 50: uint16(36203), + 51: uint16(38761), + 52: uint16(20436), + 53: uint16(23796), + 54: uint16(24358), + 55: uint16(25080), + 56: uint16(26203), + 57: uint16(27883), + 58: uint16(28843), + 59: uint16(29572), + 60: uint16(29625), + 61: uint16(29694), + 62: uint16(30505), + 63: uint16(30541), + 64: uint16(32067), + 65: uint16(32098), + 66: uint16(32291), + 67: uint16(33335), + 68: uint16(34898), + 69: uint16(64010), + 70: uint16(36066), + 71: uint16(37449), + 72: uint16(39023), + 73: uint16(23377), + 74: uint16(31348), + 75: uint16(34880), + 76: uint16(38913), + 77: uint16(23244), + 78: uint16(20448), + 79: uint16(21332), + 80: uint16(22846), + 81: uint16(23805), + 82: uint16(25406), + 83: uint16(28025), + 84: uint16(29433), + 85: uint16(33029), + 86: uint16(33031), + 87: uint16(33698), + 88: uint16(37583), + 89: uint16(38960), + 90: uint16(20136), + 91: uint16(20804), + 92: uint16(21009), + 93: uint16(22411), + }, + 90: { + 0: uint16(24418), + 1: uint16(27842), + 2: uint16(28366), + 3: uint16(28677), + 4: uint16(28752), + 5: uint16(28847), + 6: uint16(29074), + 7: uint16(29673), + 8: uint16(29801), + 9: uint16(33610), + 10: uint16(34722), + 11: uint16(34913), + 12: uint16(36872), + 13: uint16(37026), + 14: uint16(37795), + 15: uint16(39336), + 16: uint16(20846), + 17: uint16(24407), + 18: uint16(24800), + 19: uint16(24935), + 20: uint16(26291), + 21: uint16(34137), + 22: uint16(36426), + 23: uint16(37295), + 24: uint16(38795), + 25: uint16(20046), + 26: uint16(20114), + 27: uint16(21628), + 28: uint16(22741), + 29: uint16(22778), + 30: uint16(22909), + 31: uint16(23733), + 32: uint16(24359), + 33: uint16(25142), + 34: uint16(25160), + 35: uint16(26122), + 36: uint16(26215), + 37: uint16(27627), + 38: uint16(28009), + 39: uint16(28111), + 40: uint16(28246), + 41: uint16(28408), + 42: uint16(28564), + 43: uint16(28640), + 44: uint16(28649), + 45: uint16(28765), + 46: uint16(29392), + 47: uint16(29733), + 48: uint16(29786), + 49: uint16(29920), + 50: uint16(30355), + 51: uint16(31068), + 52: uint16(31946), + 53: uint16(32286), + 54: uint16(32993), + 55: uint16(33446), + 56: uint16(33899), + 57: uint16(33983), + 58: uint16(34382), + 59: uint16(34399), + 60: uint16(34676), + 61: uint16(35703), + 62: uint16(35946), + 63: uint16(37804), + 64: uint16(38912), + 65: uint16(39013), + 66: uint16(24785), + 67: uint16(25110), + 68: uint16(37239), + 69: uint16(23130), + 70: uint16(26127), + 71: uint16(28151), + 72: uint16(28222), + 73: uint16(29759), + 74: uint16(39746), + 75: uint16(24573), + 76: uint16(24794), + 77: uint16(31503), + 78: uint16(21700), + 79: uint16(24344), + 80: uint16(27742), + 81: uint16(27859), + 82: uint16(27946), + 83: uint16(28888), + 84: uint16(32005), + 85: uint16(34425), + 86: uint16(35340), + 87: uint16(40251), + 88: uint16(21270), + 89: uint16(21644), + 90: uint16(23301), + 91: uint16(27194), + 92: uint16(28779), + 93: uint16(30069), + }, + 91: { + 0: uint16(31117), + 1: uint16(31166), + 2: uint16(33457), + 3: uint16(33775), + 4: uint16(35441), + 5: uint16(35649), + 6: uint16(36008), + 7: uint16(38772), + 8: uint16(64011), + 9: uint16(25844), + 10: uint16(25899), + 11: uint16(30906), + 12: uint16(30907), + 13: uint16(31339), + 14: uint16(20024), + 15: uint16(21914), + 16: uint16(22864), + 17: uint16(23462), + 18: uint16(24187), + 19: uint16(24739), + 20: uint16(25563), + 21: uint16(27489), + 22: uint16(26213), + 23: uint16(26707), + 24: uint16(28185), + 25: uint16(29029), + 26: uint16(29872), + 27: uint16(32008), + 28: uint16(36996), + 29: uint16(39529), + 30: uint16(39973), + 31: uint16(27963), + 32: uint16(28369), + 33: uint16(29502), + 34: uint16(35905), + 35: uint16(38346), + 36: uint16(20976), + 37: uint16(24140), + 38: uint16(24488), + 39: uint16(24653), + 40: uint16(24822), + 41: uint16(24880), + 42: uint16(24908), + 43: uint16(26179), + 44: uint16(26180), + 45: uint16(27045), + 46: uint16(27841), + 47: uint16(28255), + 48: uint16(28361), + 49: uint16(28514), + 50: uint16(29004), + 51: uint16(29852), + 52: uint16(30343), + 53: uint16(31681), + 54: uint16(31783), + 55: uint16(33618), + 56: uint16(34647), + 57: uint16(36945), + 58: uint16(38541), + 59: uint16(40643), + 60: uint16(21295), + 61: uint16(22238), + 62: uint16(24315), + 63: uint16(24458), + 64: uint16(24674), + 65: uint16(24724), + 66: uint16(25079), + 67: uint16(26214), + 68: uint16(26371), + 69: uint16(27292), + 70: uint16(28142), + 71: uint16(28590), + 72: uint16(28784), + 73: uint16(29546), + 74: uint16(32362), + 75: uint16(33214), + 76: uint16(33588), + 77: uint16(34516), + 78: uint16(35496), + 79: uint16(36036), + 80: uint16(21123), + 81: uint16(29554), + 82: uint16(23446), + 83: uint16(27243), + 84: uint16(37892), + 85: uint16(21742), + 86: uint16(22150), + 87: uint16(23389), + 88: uint16(25928), + 89: uint16(25989), + 90: uint16(26313), + 91: uint16(26783), + 92: uint16(28045), + 93: uint16(28102), + }, + 92: { + 0: uint16(29243), + 1: uint16(32948), + 2: uint16(37237), + 3: uint16(39501), + 4: uint16(20399), + 5: uint16(20505), + 6: uint16(21402), + 7: uint16(21518), + 8: uint16(21564), + 9: uint16(21897), + 10: uint16(21957), + 11: uint16(24127), + 12: uint16(24460), + 13: uint16(26429), + 14: uint16(29030), + 15: uint16(29661), + 16: uint16(36869), + 17: uint16(21211), + 18: uint16(21235), + 19: uint16(22628), + 20: uint16(22734), + 21: uint16(28932), + 22: uint16(29071), + 23: uint16(29179), + 24: uint16(34224), + 25: uint16(35347), + 26: uint16(26248), + 27: uint16(34216), + 28: uint16(21927), + 29: uint16(26244), + 30: uint16(29002), + 31: uint16(33841), + 32: uint16(21321), + 33: uint16(21913), + 34: uint16(27585), + 35: uint16(24409), + 36: uint16(24509), + 37: uint16(25582), + 38: uint16(26249), + 39: uint16(28999), + 40: uint16(35569), + 41: uint16(36637), + 42: uint16(40638), + 43: uint16(20241), + 44: uint16(25658), + 45: uint16(28875), + 46: uint16(30054), + 47: uint16(34407), + 48: uint16(24676), + 49: uint16(35662), + 50: uint16(40440), + 51: uint16(20807), + 52: uint16(20982), + 53: uint16(21256), + 54: uint16(27958), + 55: uint16(33016), + 56: uint16(40657), + 57: uint16(26133), + 58: uint16(27427), + 59: uint16(28824), + 60: uint16(30165), + 61: uint16(21507), + 62: uint16(23673), + 63: uint16(32007), + 64: uint16(35350), + 65: uint16(27424), + 66: uint16(27453), + 67: uint16(27462), + 68: uint16(21560), + 69: uint16(24688), + 70: uint16(27965), + 71: uint16(32725), + 72: uint16(33288), + 73: uint16(20694), + 74: uint16(20958), + 75: uint16(21916), + 76: uint16(22123), + 77: uint16(22221), + 78: uint16(23020), + 79: uint16(23305), + 80: uint16(24076), + 81: uint16(24985), + 82: uint16(24984), + 83: uint16(25137), + 84: uint16(26206), + 85: uint16(26342), + 86: uint16(29081), + 87: uint16(29113), + 88: uint16(29114), + 89: uint16(29351), + 90: uint16(31143), + 91: uint16(31232), + 92: uint16(32690), + 93: uint16(35440), + }, +} + +var _rev_jis = [6879]uint16{ + 0: uint16(31), + 1: uint16(80), + 2: uint16(81), + 3: uint16(87), + 4: uint16(14), + 5: uint16(299), + 6: uint16(74), + 7: uint16(61), + 8: uint16(12), + 9: uint16(344), + 10: uint16(62), + 11: uint16(63), + 12: uint16(1280), + 13: uint16(1281), + 14: uint16(1282), + 15: uint16(1283), + 16: uint16(1284), + 17: uint16(1285), + 18: uint16(1286), + 19: uint16(1287), + 20: uint16(1288), + 21: uint16(1289), + 22: uint16(1290), + 23: uint16(1291), + 24: uint16(1292), + 25: uint16(1293), + 26: uint16(1294), + 27: uint16(1295), + 28: uint16(1296), + 29: uint16(1297), + 30: uint16(1298), + 31: uint16(1299), + 32: uint16(1300), + 33: uint16(1301), + 34: uint16(1302), + 35: uint16(1303), + 36: uint16(1312), + 37: uint16(1313), + 38: uint16(1314), + 39: uint16(1315), + 40: uint16(1316), + 41: uint16(1317), + 42: uint16(1318), + 43: uint16(1319), + 44: uint16(1320), + 45: uint16(1321), + 46: uint16(1322), + 47: uint16(1323), + 48: uint16(1324), + 49: uint16(1325), + 50: uint16(1326), + 51: uint16(1327), + 52: uint16(1328), + 53: uint16(1329), + 54: uint16(1330), + 55: uint16(1331), + 56: uint16(1332), + 57: uint16(1333), + 58: uint16(1334), + 59: uint16(1335), + 60: uint16(1542), + 61: uint16(1536), + 62: uint16(1537), + 63: uint16(1538), + 64: uint16(1539), + 65: uint16(1540), + 66: uint16(1541), + 67: uint16(1543), + 68: uint16(1544), + 69: uint16(1545), + 70: uint16(1546), + 71: uint16(1547), + 72: uint16(1548), + 73: uint16(1549), + 74: uint16(1550), + 75: uint16(1551), + 76: uint16(1552), + 77: uint16(1553), + 78: uint16(1554), + 79: uint16(1555), + 80: uint16(1556), + 81: uint16(1557), + 82: uint16(1558), + 83: uint16(1559), + 84: uint16(1560), + 85: uint16(1561), + 86: uint16(1562), + 87: uint16(1563), + 88: uint16(1564), + 89: uint16(1565), + 90: uint16(1566), + 91: uint16(1567), + 92: uint16(1568), + 93: uint16(1584), + 94: uint16(1585), + 95: uint16(1586), + 96: uint16(1587), + 97: uint16(1588), + 98: uint16(1589), + 99: uint16(1591), + 100: uint16(1592), + 101: uint16(1593), + 102: uint16(1594), + 103: uint16(1595), + 104: uint16(1596), + 105: uint16(1597), + 106: uint16(1598), + 107: uint16(1599), + 108: uint16(1600), + 109: uint16(1601), + 110: uint16(1602), + 111: uint16(1603), + 112: uint16(1604), + 113: uint16(1605), + 114: uint16(1606), + 115: uint16(1607), + 116: uint16(1608), + 117: uint16(1609), + 118: uint16(1610), + 119: uint16(1611), + 120: uint16(1612), + 121: uint16(1613), + 122: uint16(1614), + 123: uint16(1615), + 124: uint16(1616), + 125: uint16(1590), + 126: uint16(29), + 127: uint16(28), + 128: uint16(33), + 129: uint16(37), + 130: uint16(38), + 131: uint16(39), + 132: uint16(40), + 133: uint16(342), + 134: uint16(343), + 135: uint16(36), + 136: uint16(35), + 137: uint16(338), + 138: uint16(75), + 139: uint16(76), + 140: uint16(263), + 141: uint16(77), + 142: uint16(337), + 143: uint16(266), + 144: uint16(267), + 145: uint16(265), + 146: uint16(268), + 147: uint16(300), + 148: uint16(301), + 149: uint16(302), + 150: uint16(318), + 151: uint16(303), + 152: uint16(319), + 153: uint16(281), + 154: uint16(282), + 155: uint16(60), + 156: uint16(324), + 157: uint16(326), + 158: uint16(70), + 159: uint16(315), + 160: uint16(297), + 161: uint16(298), + 162: uint16(288), + 163: uint16(287), + 164: uint16(328), + 165: uint16(329), + 166: uint16(71), + 167: uint16(327), + 168: uint16(325), + 169: uint16(321), + 170: uint16(65), + 171: uint16(320), + 172: uint16(68), + 173: uint16(69), + 174: uint16(322), + 175: uint16(323), + 176: uint16(285), + 177: uint16(286), + 178: uint16(283), + 179: uint16(284), + 180: uint16(316), + 181: uint16(317), + 182: uint16(1792), + 183: uint16(1803), + 184: uint16(1793), + 185: uint16(1804), + 186: uint16(1794), + 187: uint16(1805), + 188: uint16(1795), + 189: uint16(1806), + 190: uint16(1797), + 191: uint16(1808), + 192: uint16(1796), + 193: uint16(1807), + 194: uint16(1798), + 195: uint16(1819), + 196: uint16(1814), + 197: uint16(1809), + 198: uint16(1800), + 199: uint16(1821), + 200: uint16(1816), + 201: uint16(1811), + 202: uint16(1799), + 203: uint16(1815), + 204: uint16(1820), + 205: uint16(1810), + 206: uint16(1801), + 207: uint16(1817), + 208: uint16(1822), + 209: uint16(1812), + 210: uint16(1802), + 211: uint16(1818), + 212: uint16(1823), + 213: uint16(1813), + 214: uint16(258), + 215: uint16(257), + 216: uint16(260), + 217: uint16(259), + 218: uint16(262), + 219: uint16(261), + 220: uint16(256), + 221: uint16(93), + 222: uint16(90), + 223: uint16(92), + 224: uint16(91), + 225: uint16(349), + 226: uint16(89), + 227: uint16(88), + 228: uint16(73), + 229: uint16(72), + 230: uint16(341), + 231: uint16(340), + 232: uint16(339), + 234: uint16(1), + 235: uint16(2), + 236: uint16(22), + 237: uint16(24), + 238: uint16(25), + 239: uint16(26), + 240: uint16(49), + 241: uint16(50), + 242: uint16(51), + 243: uint16(52), + 244: uint16(53), + 245: uint16(54), + 246: uint16(55), + 247: uint16(56), + 248: uint16(57), + 249: uint16(58), + 250: uint16(264), + 251: uint16(269), + 252: uint16(43), + 253: uint16(44), + 254: uint16(32), + 255: uint16(768), + 256: uint16(769), + 257: uint16(770), + 258: uint16(771), + 259: uint16(772), + 260: uint16(773), + 261: uint16(774), + 262: uint16(775), + 263: uint16(776), + 264: uint16(777), + 265: uint16(778), + 266: uint16(779), + 267: uint16(780), + 268: uint16(781), + 269: uint16(782), + 270: uint16(783), + 271: uint16(784), + 272: uint16(785), + 273: uint16(786), + 274: uint16(787), + 275: uint16(788), + 276: uint16(789), + 277: uint16(790), + 278: uint16(791), + 279: uint16(792), + 280: uint16(793), + 281: uint16(794), + 282: uint16(795), + 283: uint16(796), + 284: uint16(797), + 285: uint16(798), + 286: uint16(799), + 287: uint16(800), + 288: uint16(801), + 289: uint16(802), + 290: uint16(803), + 291: uint16(804), + 292: uint16(805), + 293: uint16(806), + 294: uint16(807), + 295: uint16(808), + 296: uint16(809), + 297: uint16(810), + 298: uint16(811), + 299: uint16(812), + 300: uint16(813), + 301: uint16(814), + 302: uint16(815), + 303: uint16(816), + 304: uint16(817), + 305: uint16(818), + 306: uint16(819), + 307: uint16(820), + 308: uint16(821), + 309: uint16(822), + 310: uint16(823), + 311: uint16(824), + 312: uint16(825), + 313: uint16(826), + 314: uint16(827), + 315: uint16(828), + 316: uint16(829), + 317: uint16(830), + 318: uint16(831), + 319: uint16(832), + 320: uint16(833), + 321: uint16(834), + 322: uint16(835), + 323: uint16(836), + 324: uint16(837), + 325: uint16(838), + 326: uint16(839), + 327: uint16(840), + 328: uint16(841), + 329: uint16(842), + 330: uint16(843), + 331: uint16(844), + 332: uint16(845), + 333: uint16(846), + 334: uint16(847), + 335: uint16(848), + 336: uint16(849), + 337: uint16(850), + 338: uint16(10), + 339: uint16(11), + 340: uint16(20), + 341: uint16(21), + 342: uint16(1024), + 343: uint16(1025), + 344: uint16(1026), + 345: uint16(1027), + 346: uint16(1028), + 347: uint16(1029), + 348: uint16(1030), + 349: uint16(1031), + 350: uint16(1032), + 351: uint16(1033), + 352: uint16(1034), + 353: uint16(1035), + 354: uint16(1036), + 355: uint16(1037), + 356: uint16(1038), + 357: uint16(1039), + 358: uint16(1040), + 359: uint16(1041), + 360: uint16(1042), + 361: uint16(1043), + 362: uint16(1044), + 363: uint16(1045), + 364: uint16(1046), + 365: uint16(1047), + 366: uint16(1048), + 367: uint16(1049), + 368: uint16(1050), + 369: uint16(1051), + 370: uint16(1052), + 371: uint16(1053), + 372: uint16(1054), + 373: uint16(1055), + 374: uint16(1056), + 375: uint16(1057), + 376: uint16(1058), + 377: uint16(1059), + 378: uint16(1060), + 379: uint16(1061), + 380: uint16(1062), + 381: uint16(1063), + 382: uint16(1064), + 383: uint16(1065), + 384: uint16(1066), + 385: uint16(1067), + 386: uint16(1068), + 387: uint16(1069), + 388: uint16(1070), + 389: uint16(1071), + 390: uint16(1072), + 391: uint16(1073), + 392: uint16(1074), + 393: uint16(1075), + 394: uint16(1076), + 395: uint16(1077), + 396: uint16(1078), + 397: uint16(1079), + 398: uint16(1080), + 399: uint16(1081), + 400: uint16(1082), + 401: uint16(1083), + 402: uint16(1084), + 403: uint16(1085), + 404: uint16(1086), + 405: uint16(1087), + 406: uint16(1088), + 407: uint16(1089), + 408: uint16(1090), + 409: uint16(1091), + 410: uint16(1092), + 411: uint16(1093), + 412: uint16(1094), + 413: uint16(1095), + 414: uint16(1096), + 415: uint16(1097), + 416: uint16(1098), + 417: uint16(1099), + 418: uint16(1100), + 419: uint16(1101), + 420: uint16(1102), + 421: uint16(1103), + 422: uint16(1104), + 423: uint16(1105), + 424: uint16(1106), + 425: uint16(1107), + 426: uint16(1108), + 427: uint16(1109), + 428: uint16(5), + 429: uint16(27), + 430: uint16(18), + 431: uint16(19), + 432: uint16(3915), + 433: uint16(8793), + 434: uint16(6934), + 435: uint16(10843), + 436: uint16(7493), + 437: uint16(6671), + 438: uint16(7492), + 439: uint16(4379), + 440: uint16(10291), + 441: uint16(11294), + 442: uint16(12033), + 443: uint16(4110), + 444: uint16(4685), + 445: uint16(12034), + 446: uint16(7939), + 447: uint16(12577), + 448: uint16(5173), + 449: uint16(10521), + 450: uint16(7494), + 451: uint16(11549), + 452: uint16(10529), + 453: uint16(12035), + 454: uint16(8773), + 455: uint16(12036), + 456: uint16(5465), + 457: uint16(12037), + 458: uint16(4924), + 459: uint16(8719), + 460: uint16(6982), + 461: uint16(12038), + 462: uint16(12039), + 463: uint16(12040), + 464: uint16(9748), + 465: uint16(5174), + 466: uint16(9750), + 467: uint16(9538), + 468: uint16(5922), + 469: uint16(10770), + 470: uint16(18472), + 471: uint16(12041), + 472: uint16(7495), + 473: uint16(12042), + 474: uint16(4372), + 475: uint16(5444), + 476: uint16(5967), + 477: uint16(11080), + 478: uint16(13573), + 479: uint16(11343), + 480: uint16(9564), + 481: uint16(4868), + 482: uint16(5140), + 483: uint16(12043), + 484: uint16(12044), + 485: uint16(11546), + 486: uint16(11292), + 487: uint16(8263), + 488: uint16(12046), + 489: uint16(6741), + 490: uint16(9554), + 491: uint16(12049), + 492: uint16(4125), + 493: uint16(5950), + 494: uint16(5949), + 495: uint16(3909), + 496: uint16(11818), + 497: uint16(11817), + 498: uint16(6418), + 499: uint16(3840), + 500: uint16(12050), + 501: uint16(12051), + 502: uint16(12052), + 503: uint16(10771), + 504: uint16(12053), + 505: uint16(5969), + 506: uint16(3910), + 507: uint16(10833), + 508: uint16(5211), + 509: uint16(5212), + 510: uint16(5213), + 511: uint16(9025), + 512: uint16(11547), + 513: uint16(12054), + 514: uint16(12055), + 515: uint16(12056), + 516: uint16(7724), + 517: uint16(7193), + 518: uint16(7725), + 519: uint16(12061), + 520: uint16(12059), + 521: uint16(12060), + 522: uint16(5175), + 523: uint16(6402), + 524: uint16(4431), + 525: uint16(12058), + 526: uint16(12057), + 527: uint16(10504), + 528: uint16(6693), + 529: uint16(6692), + 530: uint16(8477), + 531: uint16(12062), + 532: uint16(10292), + 533: uint16(8006), + 534: uint16(23), + 535: uint16(12063), + 536: uint16(12065), + 537: uint16(8516), + 538: uint16(11584), + 539: uint16(3881), + 540: uint16(12064), + 541: uint16(4381), + 542: uint16(5411), + 543: uint16(8774), + 544: uint16(5710), + 545: uint16(12066), + 546: uint16(9731), + 547: uint16(4938), + 548: uint16(12067), + 549: uint16(3882), + 550: uint16(5951), + 551: uint16(4939), + 552: uint16(10329), + 553: uint16(10001), + 554: uint16(5176), + 555: uint16(4432), + 556: uint16(12102), + 557: uint16(9248), + 558: uint16(9803), + 559: uint16(12069), + 560: uint16(10011), + 561: uint16(11585), + 562: uint16(7692), + 563: uint16(6694), + 564: uint16(6742), + 565: uint16(4383), + 566: uint16(9008), + 567: uint16(8705), + 568: uint16(12073), + 569: uint16(3883), + 570: uint16(9026), + 571: uint16(7194), + 572: uint16(6419), + 573: uint16(11267), + 574: uint16(8493), + 575: uint16(4382), + 576: uint16(12072), + 577: uint16(11293), + 578: uint16(12068), + 579: uint16(12070), + 580: uint16(6477), + 581: uint16(12071), + 582: uint16(13315), + 583: uint16(12079), + 584: uint16(12082), + 585: uint16(12080), + 586: uint16(4385), + 587: uint16(10522), + 588: uint16(12074), + 589: uint16(12078), + 590: uint16(5970), + 591: uint16(6695), + 592: uint16(4869), + 593: uint16(12083), + 594: uint16(12075), + 595: uint16(11586), + 596: uint16(6743), + 597: uint16(12076), + 598: uint16(12081), + 599: uint16(12084), + 600: uint16(12077), + 601: uint16(5376), + 602: uint16(3884), + 603: uint16(5377), + 604: uint16(4384), + 605: uint16(13316), + 606: uint16(10840), + 607: uint16(10317), + 608: uint16(5971), + 609: uint16(7694), + 610: uint16(11542), + 611: uint16(10551), + 612: uint16(5655), + 613: uint16(8452), + 614: uint16(4419), + 615: uint16(7218), + 616: uint16(12088), + 617: uint16(12093), + 618: uint16(12091), + 619: uint16(12086), + 620: uint16(8462), + 621: uint16(12089), + 622: uint16(12092), + 623: uint16(12090), + 624: uint16(10556), + 625: uint16(12087), + 626: uint16(7693), + 627: uint16(10834), + 628: uint16(12094), + 629: uint16(12095), + 630: uint16(7171), + 631: uint16(12108), + 632: uint16(9775), + 633: uint16(10261), + 634: uint16(12103), + 635: uint16(10575), + 636: uint16(4373), + 637: uint16(12107), + 638: uint16(12101), + 639: uint16(12110), + 640: uint16(8241), + 641: uint16(5923), + 642: uint16(9787), + 643: uint16(16166), + 644: uint16(12109), + 645: uint16(9276), + 646: uint16(12098), + 647: uint16(5973), + 648: uint16(5972), + 649: uint16(12096), + 650: uint16(6969), + 651: uint16(12104), + 652: uint16(10574), + 653: uint16(8748), + 654: uint16(12100), + 655: uint16(5712), + 656: uint16(12097), + 657: uint16(12105), + 658: uint16(12099), + 659: uint16(11568), + 660: uint16(12106), + 661: uint16(11808), + 662: uint16(5445), + 663: uint16(5711), + 664: uint16(12111), + 665: uint16(12112), + 666: uint16(12116), + 667: uint16(3885), + 668: uint16(10543), + 669: uint16(12115), + 670: uint16(12114), + 671: uint16(12118), + 672: uint16(12117), + 673: uint16(9027), + 674: uint16(5713), + 675: uint16(12119), + 676: uint16(6948), + 677: uint16(8453), + 678: uint16(9028), + 679: uint16(5461), + 680: uint16(12120), + 681: uint16(5141), + 682: uint16(12121), + 683: uint16(12123), + 684: uint16(10772), + 685: uint16(5701), + 686: uint16(6672), + 687: uint16(10070), + 688: uint16(12122), + 689: uint16(6436), + 690: uint16(11298), + 691: uint16(12125), + 692: uint16(12290), + 693: uint16(12124), + 694: uint16(6435), + 695: uint16(7260), + 696: uint16(5656), + 697: uint16(12291), + 698: uint16(5422), + 699: uint16(12288), + 700: uint16(12289), + 701: uint16(9486), + 702: uint16(8283), + 703: uint16(5378), + 704: uint16(10796), + 705: uint16(12292), + 706: uint16(11548), + 707: uint16(12293), + 708: uint16(12296), + 709: uint16(12294), + 710: uint16(8237), + 711: uint16(12295), + 712: uint16(12297), + 713: uint16(12299), + 714: uint16(12298), + 715: uint16(10535), + 716: uint16(5142), + 717: uint16(12301), + 718: uint16(12302), + 719: uint16(4366), + 720: uint16(12300), + 721: uint16(6995), + 722: uint16(12305), + 723: uint16(12304), + 724: uint16(12303), + 725: uint16(12085), + 726: uint16(12306), + 727: uint16(7261), + 728: uint16(12307), + 729: uint16(11268), + 730: uint16(11064), + 731: uint16(12309), + 732: uint16(12308), + 733: uint16(12311), + 734: uint16(12310), + 735: uint16(12312), + 736: uint16(12313), + 737: uint16(3923), + 738: uint16(5908), + 739: uint16(5658), + 740: uint16(7195), + 741: uint16(8794), + 742: uint16(5379), + 743: uint16(8007), + 744: uint16(5974), + 745: uint16(6221), + 746: uint16(12315), + 747: uint16(11047), + 748: uint16(9253), + 749: uint16(6744), + 750: uint16(12314), + 751: uint16(12316), + 752: uint16(9277), + 753: uint16(4692), + 754: uint16(12317), + 755: uint16(9565), + 756: uint16(8211), + 757: uint16(12319), + 758: uint16(12320), + 759: uint16(9995), + 760: uint16(5975), + 761: uint16(11802), + 762: uint16(12321), + 763: uint16(5381), + 764: uint16(10523), + 765: uint16(8469), + 766: uint16(5456), + 767: uint16(9236), + 768: uint16(5714), + 769: uint16(12322), + 770: uint16(12323), + 771: uint16(9537), + 772: uint16(4158), + 773: uint16(12326), + 774: uint16(6492), + 775: uint16(12325), + 776: uint16(6437), + 777: uint16(12327), + 778: uint16(17741), + 779: uint16(12328), + 780: uint16(10784), + 781: uint16(12329), + 782: uint16(12330), + 783: uint16(12331), + 784: uint16(7496), + 785: uint16(6955), + 786: uint16(4870), + 787: uint16(12334), + 788: uint16(12332), + 789: uint16(11036), + 790: uint16(12333), + 791: uint16(10297), + 792: uint16(12335), + 793: uint16(12336), + 794: uint16(12337), + 795: uint16(9278), + 796: uint16(12341), + 797: uint16(12339), + 798: uint16(12340), + 799: uint16(12338), + 800: uint16(6466), + 801: uint16(12342), + 802: uint16(11081), + 803: uint16(11587), + 804: uint16(12343), + 805: uint16(7943), + 806: uint16(12344), + 807: uint16(7225), + 808: uint16(12345), + 809: uint16(8795), + 810: uint16(11550), + 811: uint16(9279), + 812: uint16(12580), + 813: uint16(12346), + 814: uint16(21252), + 815: uint16(5412), + 816: uint16(12347), + 817: uint16(10813), + 818: uint16(7239), + 819: uint16(8539), + 820: uint16(12349), + 821: uint16(9539), + 822: uint16(12350), + 823: uint16(12351), + 824: uint16(4621), + 825: uint16(12352), + 826: uint16(5382), + 827: uint16(9515), + 828: uint16(4185), + 829: uint16(7215), + 830: uint16(9984), + 831: uint16(12353), + 832: uint16(9280), + 833: uint16(7726), + 834: uint16(12354), + 835: uint16(10507), + 836: uint16(7993), + 837: uint16(4865), + 838: uint16(4872), + 839: uint16(12355), + 840: uint16(12357), + 841: uint16(5657), + 842: uint16(12356), + 843: uint16(11602), + 844: uint16(7240), + 845: uint16(10012), + 846: uint16(10539), + 847: uint16(12358), + 848: uint16(11351), + 849: uint16(12359), + 850: uint16(12360), + 851: uint16(9309), + 852: uint16(12361), + 853: uint16(7944), + 854: uint16(6493), + 855: uint16(5715), + 856: uint16(12362), + 857: uint16(6696), + 858: uint16(6222), + 859: uint16(9029), + 860: uint16(12364), + 861: uint16(8454), + 862: uint16(6478), + 863: uint16(12365), + 864: uint16(12366), + 865: uint16(8207), + 866: uint16(12363), + 867: uint16(12368), + 868: uint16(10773), + 869: uint16(6211), + 870: uint16(12367), + 871: uint16(5716), + 872: uint16(6461), + 873: uint16(9804), + 874: uint16(12371), + 875: uint16(12369), + 876: uint16(10330), + 877: uint16(7497), + 878: uint16(12378), + 879: uint16(4675), + 880: uint16(12372), + 881: uint16(12370), + 882: uint16(8238), + 883: uint16(12374), + 884: uint16(12373), + 885: uint16(4643), + 886: uint16(5695), + 887: uint16(12379), + 888: uint16(11532), + 889: uint16(12375), + 890: uint16(12380), + 891: uint16(12377), + 892: uint16(12376), + 893: uint16(11566), + 894: uint16(5976), + 895: uint16(4386), + 896: uint16(11603), + 897: uint16(7252), + 898: uint16(9271), + 899: uint16(6212), + 900: uint16(12545), + 901: uint16(12546), + 902: uint16(11588), + 903: uint16(11786), + 904: uint16(12548), + 905: uint16(5977), + 906: uint16(12547), + 907: uint16(4622), + 908: uint16(12549), + 909: uint16(10805), + 910: uint16(8987), + 911: uint16(11269), + 912: uint16(10552), + 913: uint16(12550), + 914: uint16(20276), + 915: uint16(9487), + 916: uint16(12551), + 917: uint16(4873), + 918: uint16(11026), + 919: uint16(7424), + 920: uint16(12552), + 921: uint16(10566), + 922: uint16(12556), + 923: uint16(7945), + 924: uint16(12553), + 925: uint16(5423), + 926: uint16(12554), + 927: uint16(4874), + 928: uint16(5645), + 929: uint16(12557), + 930: uint16(12558), + 931: uint16(12559), + 932: uint16(12560), + 933: uint16(6970), + 934: uint16(5978), + 935: uint16(11069), + 936: uint16(11079), + 937: uint16(9558), + 938: uint16(10576), + 939: uint16(12561), + 940: uint16(12562), + 941: uint16(12564), + 942: uint16(12566), + 943: uint16(12565), + 944: uint16(12567), + 945: uint16(4380), + 946: uint16(10795), + 947: uint16(6491), + 948: uint16(12568), + 949: uint16(8248), + 950: uint16(7425), + 951: uint16(5384), + 952: uint16(12569), + 953: uint16(10042), + 954: uint16(12570), + 955: uint16(12571), + 956: uint16(12572), + 957: uint16(12573), + 958: uint16(10243), + 959: uint16(5447), + 960: uint16(3908), + 961: uint16(9502), + 962: uint16(12574), + 963: uint16(7196), + 964: uint16(8008), + 965: uint16(12576), + 966: uint16(12575), + 967: uint16(7426), + 968: uint16(5952), + 969: uint16(12578), + 970: uint16(10013), + 971: uint16(12579), + 972: uint16(10043), + 973: uint16(8467), + 974: uint16(8525), + 975: uint16(5383), + 976: uint16(9549), + 977: uint16(8720), + 978: uint16(9805), + 979: uint16(10797), + 980: uint16(12581), + 981: uint16(8009), + 982: uint16(5652), + 983: uint16(12582), + 984: uint16(12583), + 985: uint16(4107), + 986: uint16(3924), + 987: uint16(4940), + 988: uint16(8455), + 989: uint16(5168), + 990: uint16(11344), + 991: uint16(12586), + 992: uint16(4374), + 993: uint16(12585), + 994: uint16(5385), + 995: uint16(12587), + 996: uint16(11088), + 997: uint16(12588), + 998: uint16(11569), + 999: uint16(5979), + 1000: uint16(5909), + 1001: uint16(12589), + 1002: uint16(12591), + 1003: uint16(12590), + 1004: uint16(7742), + 1005: uint16(4120), + 1006: uint16(4157), + 1007: uint16(12592), + 1008: uint16(12593), + 1009: uint16(5910), + 1010: uint16(12594), + 1011: uint16(5197), + 1012: uint16(6673), + 1013: uint16(12595), + 1014: uint16(10835), + 1015: uint16(6420), + 1016: uint16(5177), + 1017: uint16(11270), + 1018: uint16(8239), + 1019: uint16(10014), + 1020: uint16(7004), + 1021: uint16(7206), + 1022: uint16(6983), + 1023: uint16(6996), + 1024: uint16(7253), + 1025: uint16(10015), + 1026: uint16(12598), + 1027: uint16(4130), + 1028: uint16(8240), + 1029: uint16(5980), + 1030: uint16(5924), + 1031: uint16(5446), + 1032: uint16(12602), + 1033: uint16(8704), + 1034: uint16(8541), + 1035: uint16(5386), + 1036: uint16(7427), + 1037: uint16(12603), + 1038: uint16(12601), + 1039: uint16(4387), + 1040: uint16(8517), + 1041: uint16(6935), + 1042: uint16(6698), + 1043: uint16(4101), + 1044: uint16(4687), + 1045: uint16(6213), + 1046: uint16(6697), + 1047: uint16(12604), + 1048: uint16(12605), + 1049: uint16(5160), + 1050: uint16(4645), + 1051: uint16(6214), + 1052: uint16(5159), + 1053: uint16(9022), + 1054: uint16(4100), + 1055: uint16(9488), + 1056: uint16(11037), + 1057: uint16(6144), + 1058: uint16(11352), + 1059: uint16(9254), + 1060: uint16(5981), + 1061: uint16(5646), + 1062: uint16(12614), + 1063: uint16(5442), + 1064: uint16(10793), + 1065: uint16(10044), + 1066: uint16(12613), + 1067: uint16(4925), + 1068: uint16(12608), + 1069: uint16(12609), + 1070: uint16(12611), + 1071: uint16(12612), + 1072: uint16(5178), + 1073: uint16(7744), + 1074: uint16(10508), + 1075: uint16(12610), + 1076: uint16(12606), + 1077: uint16(5954), + 1078: uint16(12607), + 1079: uint16(11779), + 1080: uint16(10577), + 1081: uint16(9031), + 1082: uint16(5953), + 1083: uint16(6223), + 1084: uint16(12615), + 1085: uint16(9532), + 1086: uint16(12619), + 1087: uint16(7005), + 1088: uint16(6997), + 1089: uint16(12622), + 1090: uint16(12620), + 1091: uint16(11010), + 1092: uint16(12617), + 1093: uint16(12626), + 1094: uint16(12621), + 1095: uint16(12624), + 1096: uint16(5925), + 1097: uint16(11038), + 1098: uint16(12625), + 1099: uint16(12627), + 1100: uint16(12629), + 1101: uint16(6479), + 1102: uint16(11809), + 1103: uint16(12618), + 1104: uint16(12616), + 1105: uint16(12628), + 1106: uint16(12623), + 1107: uint16(12631), + 1108: uint16(12802), + 1109: uint16(12633), + 1110: uint16(12637), + 1111: uint16(12800), + 1112: uint16(12634), + 1113: uint16(12829), + 1114: uint16(6472), + 1115: uint16(4624), + 1116: uint16(12632), + 1117: uint16(12804), + 1118: uint16(3925), + 1119: uint16(12803), + 1120: uint16(3844), + 1121: uint16(10281), + 1122: uint16(12801), + 1123: uint16(12635), + 1124: uint16(12630), + 1125: uint16(12636), + 1126: uint16(6439), + 1127: uint16(12805), + 1128: uint16(3926), + 1129: uint16(12814), + 1130: uint16(12806), + 1131: uint16(12807), + 1132: uint16(7428), + 1133: uint16(10824), + 1134: uint16(12812), + 1135: uint16(12811), + 1136: uint16(9230), + 1137: uint16(12813), + 1138: uint16(12810), + 1139: uint16(4115), + 1140: uint16(6421), + 1141: uint16(7695), + 1142: uint16(12808), + 1143: uint16(9281), + 1144: uint16(12809), + 1145: uint16(3841), + 1146: uint16(12819), + 1147: uint16(11266), + 1148: uint16(7430), + 1149: uint16(12825), + 1150: uint16(12824), + 1151: uint16(12815), + 1152: uint16(8482), + 1153: uint16(12816), + 1154: uint16(8526), + 1155: uint16(12821), + 1156: uint16(7429), + 1157: uint16(12818), + 1158: uint16(11075), + 1159: uint16(5659), + 1160: uint16(12822), + 1161: uint16(12823), + 1162: uint16(12820), + 1163: uint16(12826), + 1164: uint16(12817), + 1165: uint16(12832), + 1166: uint16(12837), + 1167: uint16(12833), + 1168: uint16(12828), + 1169: uint16(12838), + 1170: uint16(8208), + 1171: uint16(12840), + 1172: uint16(6145), + 1173: uint16(12830), + 1174: uint16(8796), + 1175: uint16(12834), + 1176: uint16(12827), + 1177: uint16(4876), + 1178: uint16(4941), + 1179: uint16(4676), + 1180: uint16(12835), + 1181: uint16(12831), + 1182: uint16(5717), + 1183: uint16(12841), + 1184: uint16(12839), + 1185: uint16(8242), + 1186: uint16(5161), + 1187: uint16(5387), + 1188: uint16(12836), + 1189: uint16(5459), + 1190: uint16(4131), + 1191: uint16(12845), + 1192: uint16(12843), + 1193: uint16(13062), + 1194: uint16(12848), + 1195: uint16(12842), + 1196: uint16(12846), + 1197: uint16(12844), + 1198: uint16(6699), + 1199: uint16(12847), + 1200: uint16(12850), + 1201: uint16(12855), + 1202: uint16(12853), + 1203: uint16(12852), + 1204: uint16(8721), + 1205: uint16(4388), + 1206: uint16(12849), + 1207: uint16(12851), + 1208: uint16(7431), + 1209: uint16(4114), + 1210: uint16(12854), + 1211: uint16(4413), + 1212: uint16(12865), + 1213: uint16(7515), + 1214: uint16(12861), + 1215: uint16(12859), + 1216: uint16(12860), + 1217: uint16(12862), + 1218: uint16(4124), + 1219: uint16(8216), + 1220: uint16(12856), + 1221: uint16(12857), + 1222: uint16(4697), + 1223: uint16(12864), + 1224: uint16(4942), + 1225: uint16(12867), + 1226: uint16(12863), + 1227: uint16(12866), + 1228: uint16(10509), + 1229: uint16(9524), + 1230: uint16(10007), + 1231: uint16(12869), + 1232: uint16(12868), + 1233: uint16(4644), + 1234: uint16(12870), + 1235: uint16(12873), + 1236: uint16(12872), + 1237: uint16(12871), + 1238: uint16(9752), + 1239: uint16(12874), + 1240: uint16(12875), + 1241: uint16(12877), + 1242: uint16(12876), + 1243: uint16(12879), + 1244: uint16(12882), + 1245: uint16(12880), + 1246: uint16(12878), + 1247: uint16(12881), + 1248: uint16(12883), + 1249: uint16(12884), + 1250: uint16(12885), + 1251: uint16(12886), + 1252: uint16(12887), + 1253: uint16(12324), + 1254: uint16(7003), + 1255: uint16(6700), + 1256: uint16(4434), + 1257: uint16(3927), + 1258: uint16(8739), + 1259: uint16(12888), + 1260: uint16(6403), + 1261: uint16(3886), + 1262: uint16(7741), + 1263: uint16(12889), + 1264: uint16(5926), + 1265: uint16(6224), + 1266: uint16(12891), + 1267: uint16(12890), + 1268: uint16(10559), + 1269: uint16(12892), + 1270: uint16(13056), + 1271: uint16(12893), + 1272: uint16(13057), + 1273: uint16(13058), + 1274: uint16(5718), + 1275: uint16(4159), + 1276: uint16(13059), + 1277: uint16(13061), + 1278: uint16(13060), + 1279: uint16(13063), + 1280: uint16(9273), + 1281: uint16(13064), + 1282: uint16(3860), + 1283: uint16(6462), + 1284: uint16(5660), + 1285: uint16(8750), + 1286: uint16(13065), + 1287: uint16(13066), + 1288: uint16(13068), + 1289: uint16(13069), + 1290: uint16(6467), + 1291: uint16(5424), + 1292: uint16(10774), + 1293: uint16(13067), + 1294: uint16(13070), + 1295: uint16(6432), + 1296: uint16(6146), + 1297: uint16(13074), + 1298: uint16(6404), + 1299: uint16(8722), + 1300: uint16(13071), + 1301: uint16(9017), + 1302: uint16(13075), + 1303: uint16(7745), + 1304: uint16(13073), + 1305: uint16(13076), + 1306: uint16(5662), + 1307: uint16(13077), + 1308: uint16(13078), + 1309: uint16(6147), + 1310: uint16(4639), + 1311: uint16(13080), + 1312: uint16(13081), + 1313: uint16(13082), + 1314: uint16(13079), + 1315: uint16(13072), + 1316: uint16(13083), + 1317: uint16(13084), + 1318: uint16(10819), + 1319: uint16(7498), + 1320: uint16(13086), + 1321: uint16(13087), + 1322: uint16(13085), + 1323: uint16(13089), + 1324: uint16(9751), + 1325: uint16(3911), + 1326: uint16(10293), + 1327: uint16(13090), + 1328: uint16(7516), + 1329: uint16(6936), + 1330: uint16(9788), + 1331: uint16(4943), + 1332: uint16(6474), + 1333: uint16(10808), + 1334: uint16(9489), + 1335: uint16(5719), + 1336: uint16(8494), + 1337: uint16(13088), + 1338: uint16(13091), + 1339: uint16(8483), + 1340: uint16(13092), + 1341: uint16(13093), + 1342: uint16(13095), + 1343: uint16(9032), + 1344: uint16(4877), + 1345: uint16(21248), + 1346: uint16(4160), + 1347: uint16(10578), + 1348: uint16(7499), + 1349: uint16(9255), + 1350: uint16(6469), + 1351: uint16(13101), + 1352: uint16(10524), + 1353: uint16(11580), + 1354: uint16(4435), + 1355: uint16(13097), + 1356: uint16(8217), + 1357: uint16(13100), + 1358: uint16(9282), + 1359: uint16(9256), + 1360: uint16(9283), + 1361: uint16(10008), + 1362: uint16(9004), + 1363: uint16(6440), + 1364: uint16(13096), + 1365: uint16(4181), + 1366: uint16(9237), + 1367: uint16(13098), + 1368: uint16(13094), + 1369: uint16(7727), + 1370: uint16(13102), + 1371: uint16(7213), + 1372: uint16(5388), + 1373: uint16(13103), + 1374: uint16(10567), + 1375: uint16(8284), + 1376: uint16(8997), + 1377: uint16(13105), + 1378: uint16(10798), + 1379: uint16(13106), + 1380: uint16(13111), + 1381: uint16(10510), + 1382: uint16(13110), + 1383: uint16(13104), + 1384: uint16(13107), + 1385: uint16(13109), + 1386: uint16(6405), + 1387: uint16(10536), + 1388: uint16(13112), + 1389: uint16(8740), + 1390: uint16(4436), + 1391: uint16(7500), + 1392: uint16(13114), + 1393: uint16(13113), + 1394: uint16(6215), + 1395: uint16(13115), + 1396: uint16(13117), + 1397: uint16(13116), + 1398: uint16(13119), + 1399: uint16(13108), + 1400: uint16(13121), + 1401: uint16(13120), + 1402: uint16(13118), + 1403: uint16(6701), + 1404: uint16(7728), + 1405: uint16(8243), + 1406: uint16(13122), + 1407: uint16(7963), + 1408: uint16(3916), + 1409: uint16(9795), + 1410: uint16(9018), + 1411: uint16(13124), + 1412: uint16(13123), + 1413: uint16(13125), + 1414: uint16(13126), + 1415: uint16(13127), + 1416: uint16(13128), + 1417: uint16(10544), + 1418: uint16(13129), + 1419: uint16(4389), + 1420: uint16(13130), + 1421: uint16(11291), + 1422: uint16(4623), + 1423: uint16(12584), + 1424: uint16(7207), + 1425: uint16(8478), + 1426: uint16(13131), + 1427: uint16(11082), + 1428: uint16(11027), + 1429: uint16(13133), + 1430: uint16(8518), + 1431: uint16(9238), + 1432: uint16(8479), + 1433: uint16(10294), + 1434: uint16(13134), + 1435: uint16(13135), + 1436: uint16(4186), + 1437: uint16(6937), + 1438: uint16(13136), + 1439: uint16(3887), + 1440: uint16(13137), + 1441: uint16(13138), + 1442: uint16(4161), + 1443: uint16(4944), + 1444: uint16(9535), + 1445: uint16(10579), + 1446: uint16(13142), + 1447: uint16(8244), + 1448: uint16(13141), + 1449: uint16(5663), + 1450: uint16(10810), + 1451: uint16(13140), + 1452: uint16(9284), + 1453: uint16(13144), + 1454: uint16(13143), + 1455: uint16(13146), + 1456: uint16(13145), + 1457: uint16(4187), + 1458: uint16(13147), + 1459: uint16(7432), + 1460: uint16(13149), + 1461: uint16(8708), + 1462: uint16(13148), + 1463: uint16(10514), + 1464: uint16(7254), + 1465: uint16(9274), + 1466: uint16(13312), + 1467: uint16(6148), + 1468: uint16(13313), + 1469: uint16(9728), + 1470: uint16(10045), + 1471: uint16(11056), + 1472: uint16(9732), + 1473: uint16(13322), + 1474: uint16(5143), + 1475: uint16(11300), + 1476: uint16(11022), + 1477: uint16(13579), + 1478: uint16(13314), + 1479: uint16(13317), + 1480: uint16(8484), + 1481: uint16(10775), + 1482: uint16(9257), + 1483: uint16(13318), + 1484: uint16(10820), + 1485: uint16(6441), + 1486: uint16(7433), + 1487: uint16(13319), + 1488: uint16(6703), + 1489: uint16(6702), + 1490: uint16(3864), + 1491: uint16(5927), + 1492: uint16(7946), + 1493: uint16(3888), + 1494: uint16(13323), + 1495: uint16(13324), + 1496: uint16(13321), + 1497: uint16(4119), + 1498: uint16(4878), + 1499: uint16(13320), + 1500: uint16(11044), + 1501: uint16(10256), + 1502: uint16(3847), + 1503: uint16(3928), + 1504: uint16(6704), + 1505: uint16(3889), + 1506: uint16(3842), + 1507: uint16(13329), + 1508: uint16(13327), + 1509: uint16(11035), + 1510: uint16(13330), + 1511: uint16(13328), + 1512: uint16(13326), + 1513: uint16(7696), + 1514: uint16(13325), + 1515: uint16(10553), + 1516: uint16(5955), + 1517: uint16(13334), + 1518: uint16(13335), + 1519: uint16(7434), + 1520: uint16(13331), + 1521: uint16(11787), + 1522: uint16(9771), + 1523: uint16(13333), + 1524: uint16(6406), + 1525: uint16(13336), + 1526: uint16(10295), + 1527: uint16(13337), + 1528: uint16(13332), + 1529: uint16(11034), + 1530: uint16(9789), + 1531: uint16(13338), + 1532: uint16(10257), + 1533: uint16(13339), + 1534: uint16(13343), + 1535: uint16(13340), + 1536: uint16(4390), + 1537: uint16(13342), + 1538: uint16(6938), + 1539: uint16(13341), + 1540: uint16(5720), + 1541: uint16(13355), + 1542: uint16(13348), + 1543: uint16(13345), + 1544: uint16(8771), + 1545: uint16(13344), + 1546: uint16(13346), + 1547: uint16(13347), + 1548: uint16(13349), + 1549: uint16(13350), + 1550: uint16(4945), + 1551: uint16(13352), + 1552: uint16(13351), + 1553: uint16(13353), + 1554: uint16(7501), + 1555: uint16(13356), + 1556: uint16(9019), + 1557: uint16(4132), + 1558: uint16(13354), + 1559: uint16(13357), + 1560: uint16(13358), + 1561: uint16(13361), + 1562: uint16(13359), + 1563: uint16(13360), + 1564: uint16(6705), + 1565: uint16(13362), + 1566: uint16(6149), + 1567: uint16(13363), + 1568: uint16(6745), + 1569: uint16(8471), + 1570: uint16(13364), + 1571: uint16(13365), + 1572: uint16(6713), + 1573: uint16(6150), + 1574: uint16(11057), + 1575: uint16(5127), + 1576: uint16(5928), + 1577: uint16(13366), + 1578: uint16(4663), + 1579: uint16(13367), + 1580: uint16(8472), + 1581: uint16(13368), + 1582: uint16(13570), + 1583: uint16(13369), + 1584: uint16(13370), + 1585: uint16(13371), + 1586: uint16(13373), + 1587: uint16(13374), + 1588: uint16(13375), + 1589: uint16(8527), + 1590: uint16(4102), + 1591: uint16(6984), + 1592: uint16(3873), + 1593: uint16(8246), + 1594: uint16(4879), + 1595: uint16(6932), + 1596: uint16(6151), + 1597: uint16(9285), + 1598: uint16(7168), + 1599: uint16(4880), + 1600: uint16(8775), + 1601: uint16(9033), + 1602: uint16(3863), + 1603: uint16(5144), + 1604: uint16(10580), + 1605: uint16(6945), + 1606: uint16(5169), + 1607: uint16(8010), + 1608: uint16(6939), + 1609: uint16(11271), + 1610: uint16(13376), + 1611: uint16(5179), + 1612: uint16(6442), + 1613: uint16(4625), + 1614: uint16(4162), + 1615: uint16(7435), + 1616: uint16(4391), + 1617: uint16(13377), + 1618: uint16(11301), + 1619: uint16(7208), + 1620: uint16(6979), + 1621: uint16(13378), + 1622: uint16(4946), + 1623: uint16(9521), + 1624: uint16(11016), + 1625: uint16(13379), + 1626: uint16(13380), + 1627: uint16(10296), + 1628: uint16(13382), + 1629: uint16(4871), + 1630: uint16(5462), + 1631: uint16(13381), + 1632: uint16(4881), + 1633: uint16(7697), + 1634: uint16(13386), + 1635: uint16(6656), + 1636: uint16(4392), + 1637: uint16(13385), + 1638: uint16(13383), + 1639: uint16(13387), + 1640: uint16(13384), + 1641: uint16(9738), + 1642: uint16(15148), + 1643: uint16(7698), + 1644: uint16(13388), + 1645: uint16(11551), + 1646: uint16(13389), + 1647: uint16(13391), + 1648: uint16(8797), + 1649: uint16(13390), + 1650: uint16(7938), + 1651: uint16(6746), + 1652: uint16(8495), + 1653: uint16(6998), + 1654: uint16(10324), + 1655: uint16(8011), + 1656: uint16(6956), + 1657: uint16(13392), + 1658: uint16(7436), + 1659: uint16(13393), + 1660: uint16(13394), + 1661: uint16(3890), + 1662: uint16(8473), + 1663: uint16(7729), + 1664: uint16(13395), + 1665: uint16(9490), + 1666: uint16(7437), + 1667: uint16(7438), + 1668: uint16(13396), + 1669: uint16(8012), + 1670: uint16(7439), + 1671: uint16(13397), + 1672: uint16(13398), + 1673: uint16(11071), + 1674: uint16(13399), + 1675: uint16(5413), + 1676: uint16(7169), + 1677: uint16(13400), + 1678: uint16(13401), + 1679: uint16(6971), + 1680: uint16(7691), + 1681: uint16(9555), + 1682: uint16(7731), + 1683: uint16(10071), + 1684: uint16(9729), + 1685: uint16(5416), + 1686: uint16(13402), + 1687: uint16(5198), + 1688: uint16(13403), + 1689: uint16(5469), + 1690: uint16(9518), + 1691: uint16(4367), + 1692: uint16(6706), + 1693: uint16(13404), + 1694: uint16(13569), + 1695: uint16(13568), + 1696: uint16(5468), + 1697: uint16(13405), + 1698: uint16(9239), + 1699: uint16(8463), + 1700: uint16(9258), + 1701: uint16(6951), + 1702: uint16(8247), + 1703: uint16(11353), + 1704: uint16(13571), + 1705: uint16(13572), + 1706: uint16(9525), + 1707: uint16(6674), + 1708: uint16(13574), + 1709: uint16(13575), + 1710: uint16(13576), + 1711: uint16(4947), + 1712: uint16(13577), + 1713: uint16(13578), + 1714: uint16(4363), + 1715: uint16(8218), + 1716: uint16(4931), + 1717: uint16(13580), + 1718: uint16(11015), + 1719: uint16(8497), + 1720: uint16(4664), + 1721: uint16(13582), + 1722: uint16(13584), + 1723: uint16(4926), + 1724: uint16(13581), + 1725: uint16(13583), + 1726: uint16(13586), + 1727: uint16(13585), + 1728: uint16(13587), + 1729: uint16(13588), + 1730: uint16(9500), + 1731: uint16(5389), + 1732: uint16(4420), + 1733: uint16(13589), + 1734: uint16(13594), + 1735: uint16(13592), + 1736: uint16(10582), + 1737: uint16(10581), + 1738: uint16(9286), + 1739: uint16(13591), + 1740: uint16(7219), + 1741: uint16(13590), + 1742: uint16(7761), + 1743: uint16(13595), + 1744: uint16(6473), + 1745: uint16(13601), + 1746: uint16(13602), + 1747: uint16(13596), + 1748: uint16(4626), + 1749: uint16(13597), + 1750: uint16(13606), + 1751: uint16(13605), + 1752: uint16(13604), + 1753: uint16(13600), + 1754: uint16(13599), + 1755: uint16(13603), + 1756: uint16(10583), + 1757: uint16(13610), + 1758: uint16(13607), + 1759: uint16(13609), + 1760: uint16(11345), + 1761: uint16(13608), + 1762: uint16(13598), + 1763: uint16(7762), + 1764: uint16(13611), + 1765: uint16(6422), + 1766: uint16(13612), + 1767: uint16(13613), + 1768: uint16(13616), + 1769: uint16(13615), + 1770: uint16(13614), + 1771: uint16(9287), + 1772: uint16(13593), + 1773: uint16(13622), + 1774: uint16(13618), + 1775: uint16(13617), + 1776: uint16(13619), + 1777: uint16(13620), + 1778: uint16(13623), + 1779: uint16(11589), + 1780: uint16(13624), + 1781: uint16(13621), + 1782: uint16(13625), + 1783: uint16(4927), + 1784: uint16(13626), + 1785: uint16(13628), + 1786: uint16(13627), + 1787: uint16(13629), + 1788: uint16(13630), + 1789: uint16(8013), + 1790: uint16(7170), + 1791: uint16(7235), + 1792: uint16(8258), + 1793: uint16(6152), + 1794: uint16(6423), + 1795: uint16(6153), + 1796: uint16(5199), + 1797: uint16(13631), + 1798: uint16(6424), + 1799: uint16(5929), + 1800: uint16(13632), + 1801: uint16(11013), + 1802: uint16(9762), + 1803: uint16(13633), + 1804: uint16(6154), + 1805: uint16(4875), + 1806: uint16(8710), + 1807: uint16(5425), + 1808: uint16(6707), + 1809: uint16(10298), + 1810: uint16(10016), + 1811: uint16(13634), + 1812: uint16(4948), + 1813: uint16(13637), + 1814: uint16(8960), + 1815: uint16(13636), + 1816: uint16(13635), + 1817: uint16(13638), + 1818: uint16(9034), + 1819: uint16(7746), + 1820: uint16(6708), + 1821: uint16(7977), + 1822: uint16(8498), + 1823: uint16(5121), + 1824: uint16(8961), + 1825: uint16(13639), + 1826: uint16(13640), + 1827: uint16(7502), + 1828: uint16(10776), + 1829: uint16(13643), + 1830: uint16(13642), + 1831: uint16(13641), + 1832: uint16(10332), + 1833: uint16(13650), + 1834: uint16(10809), + 1835: uint16(13644), + 1836: uint16(13646), + 1837: uint16(10826), + 1838: uint16(13645), + 1839: uint16(13647), + 1840: uint16(9991), + 1841: uint16(13648), + 1842: uint16(10525), + 1843: uint16(13649), + 1844: uint16(4882), + 1845: uint16(10526), + 1846: uint16(9742), + 1847: uint16(13651), + 1848: uint16(13652), + 1849: uint16(6155), + 1850: uint16(4883), + 1851: uint16(13653), + 1852: uint16(5911), + 1853: uint16(11299), + 1854: uint16(11272), + 1855: uint16(4949), + 1856: uint16(13655), + 1857: uint16(8962), + 1858: uint16(6156), + 1859: uint16(7440), + 1860: uint16(10046), + 1861: uint16(7441), + 1862: uint16(7255), + 1863: uint16(9035), + 1864: uint16(10584), + 1865: uint16(9240), + 1866: uint16(6157), + 1867: uint16(10299), + 1868: uint16(13656), + 1869: uint16(9272), + 1870: uint16(6433), + 1871: uint16(5930), + 1872: uint16(9036), + 1873: uint16(3874), + 1874: uint16(7245), + 1875: uint16(6158), + 1876: uint16(11302), + 1877: uint16(13657), + 1878: uint16(13658), + 1879: uint16(9776), + 1880: uint16(13659), + 1881: uint16(11606), + 1882: uint16(11788), + 1883: uint16(13661), + 1884: uint16(13660), + 1885: uint16(4646), + 1886: uint16(13824), + 1887: uint16(13827), + 1888: uint16(13828), + 1889: uint16(13826), + 1890: uint16(10271), + 1891: uint16(7442), + 1892: uint16(13830), + 1893: uint16(13829), + 1894: uint16(13825), + 1895: uint16(13831), + 1896: uint16(13832), + 1897: uint16(13833), + 1898: uint16(13836), + 1899: uint16(13834), + 1900: uint16(13835), + 1901: uint16(13837), + 1902: uint16(4163), + 1903: uint16(9037), + 1904: uint16(13838), + 1905: uint16(5721), + 1906: uint16(4437), + 1907: uint16(9749), + 1908: uint16(13839), + 1909: uint16(9562), + 1910: uint16(10554), + 1911: uint16(13840), + 1912: uint16(11789), + 1913: uint16(13841), + 1914: uint16(10527), + 1915: uint16(13844), + 1916: uint16(12032), + 1917: uint16(12048), + 1918: uint16(6927), + 1919: uint16(9556), + 1920: uint16(13845), + 1921: uint16(5180), + 1922: uint16(8963), + 1923: uint16(3929), + 1924: uint16(13846), + 1925: uint16(10501), + 1926: uint16(6159), + 1927: uint16(8751), + 1928: uint16(9038), + 1929: uint16(11086), + 1930: uint16(5912), + 1931: uint16(5931), + 1932: uint16(13847), + 1933: uint16(13848), + 1934: uint16(13854), + 1935: uint16(6980), + 1936: uint16(8964), + 1937: uint16(5390), + 1938: uint16(13849), + 1939: uint16(10250), + 1940: uint16(8741), + 1941: uint16(13850), + 1942: uint16(13851), + 1943: uint16(5391), + 1944: uint16(13852), + 1945: uint16(13853), + 1946: uint16(13855), + 1947: uint16(9301), + 1948: uint16(13856), + 1949: uint16(13857), + 1950: uint16(13858), + 1951: uint16(13843), + 1952: uint16(13842), + 1953: uint16(13859), + 1954: uint16(5664), + 1955: uint16(10246), + 1956: uint16(6443), + 1957: uint16(10262), + 1958: uint16(8965), + 1959: uint16(10282), + 1960: uint16(13860), + 1961: uint16(7443), + 1962: uint16(4133), + 1963: uint16(13861), + 1964: uint16(13862), + 1965: uint16(11089), + 1966: uint16(10047), + 1967: uint16(13865), + 1968: uint16(4188), + 1969: uint16(7947), + 1970: uint16(13864), + 1971: uint16(13863), + 1972: uint16(5665), + 1973: uint16(8499), + 1974: uint16(13869), + 1975: uint16(13867), + 1976: uint16(13866), + 1977: uint16(11526), + 1978: uint16(5956), + 1979: uint16(7256), + 1980: uint16(13868), + 1981: uint16(9259), + 1982: uint16(7197), + 1983: uint16(9503), + 1984: uint16(13872), + 1985: uint16(13871), + 1986: uint16(13870), + 1987: uint16(13873), + 1988: uint16(5957), + 1989: uint16(13874), + 1990: uint16(10331), + 1991: uint16(7226), + 1992: uint16(13875), + 1993: uint16(10072), + 1994: uint16(9504), + 1995: uint16(8966), + 1996: uint16(9231), + 1997: uint16(13876), + 1998: uint16(5130), + 1999: uint16(7699), + 2000: uint16(10251), + 2001: uint16(4950), + 2002: uint16(9733), + 2003: uint16(13877), + 2004: uint16(6709), + 2005: uint16(10777), + 2006: uint16(10778), + 2007: uint16(4189), + 2008: uint16(13882), + 2009: uint16(8776), + 2010: uint16(13879), + 2011: uint16(4438), + 2012: uint16(14092), + 2013: uint16(13881), + 2014: uint16(9743), + 2015: uint16(13880), + 2016: uint16(13878), + 2017: uint16(6233), + 2018: uint16(13884), + 2019: uint16(13890), + 2020: uint16(13896), + 2021: uint16(13888), + 2022: uint16(9275), + 2023: uint16(13893), + 2024: uint16(10300), + 2025: uint16(13887), + 2026: uint16(13892), + 2027: uint16(11590), + 2028: uint16(6710), + 2029: uint16(8500), + 2030: uint16(13885), + 2031: uint16(5181), + 2032: uint16(13895), + 2033: uint16(7948), + 2034: uint16(4164), + 2035: uint16(13889), + 2036: uint16(4439), + 2037: uint16(13894), + 2038: uint16(5392), + 2039: uint16(13891), + 2040: uint16(13897), + 2041: uint16(13899), + 2042: uint16(13909), + 2043: uint16(13907), + 2044: uint16(13904), + 2045: uint16(13903), + 2046: uint16(11607), + 2047: uint16(13905), + 2048: uint16(5393), + 2049: uint16(6160), + 2050: uint16(7257), + 2051: uint16(13912), + 2052: uint16(13898), + 2053: uint16(13902), + 2054: uint16(13886), + 2055: uint16(4441), + 2056: uint16(13906), + 2057: uint16(13908), + 2058: uint16(8752), + 2059: uint16(6407), + 2060: uint16(4375), + 2061: uint16(13900), + 2062: uint16(13911), + 2063: uint16(13910), + 2064: uint16(5394), + 2065: uint16(8456), + 2066: uint16(4677), + 2067: uint16(5666), + 2068: uint16(13901), + 2069: uint16(13913), + 2070: uint16(13916), + 2071: uint16(14080), + 2072: uint16(6940), + 2073: uint16(14086), + 2074: uint16(9039), + 2075: uint16(13914), + 2076: uint16(14084), + 2077: uint16(4440), + 2078: uint16(14082), + 2079: uint16(14083), + 2080: uint16(13917), + 2081: uint16(14081), + 2082: uint16(5958), + 2083: uint16(11273), + 2084: uint16(4884), + 2085: uint16(4152), + 2086: uint16(14085), + 2087: uint16(9753), + 2088: uint16(3852), + 2089: uint16(10048), + 2090: uint16(13883), + 2091: uint16(14091), + 2092: uint16(14095), + 2093: uint16(11076), + 2094: uint16(14088), + 2095: uint16(9288), + 2096: uint16(14093), + 2097: uint16(7503), + 2098: uint16(14094), + 2099: uint16(9526), + 2100: uint16(11814), + 2101: uint16(14090), + 2102: uint16(14096), + 2103: uint16(6234), + 2104: uint16(7978), + 2105: uint16(3891), + 2106: uint16(14089), + 2107: uint16(14087), + 2108: uint16(8249), + 2109: uint16(13915), + 2110: uint16(6675), + 2111: uint16(8485), + 2112: uint16(14108), + 2113: uint16(8250), + 2114: uint16(14103), + 2115: uint16(14100), + 2116: uint16(14101), + 2117: uint16(6981), + 2118: uint16(14104), + 2119: uint16(14107), + 2120: uint16(14102), + 2121: uint16(7172), + 2122: uint16(14105), + 2123: uint16(14099), + 2124: uint16(11099), + 2125: uint16(11098), + 2126: uint16(14109), + 2127: uint16(14110), + 2128: uint16(3892), + 2129: uint16(14098), + 2130: uint16(5457), + 2131: uint16(3845), + 2132: uint16(4885), + 2133: uint16(14106), + 2134: uint16(14114), + 2135: uint16(14113), + 2136: uint16(14118), + 2137: uint16(14119), + 2138: uint16(14117), + 2139: uint16(14120), + 2140: uint16(14112), + 2141: uint16(14116), + 2142: uint16(14121), + 2143: uint16(14122), + 2144: uint16(14111), + 2145: uint16(6747), + 2146: uint16(14115), + 2147: uint16(8501), + 2148: uint16(6161), + 2149: uint16(14097), + 2150: uint16(7700), + 2151: uint16(14135), + 2152: uint16(10568), + 2153: uint16(14125), + 2154: uint16(14126), + 2155: uint16(14127), + 2156: uint16(14134), + 2157: uint16(14133), + 2158: uint16(10844), + 2159: uint16(4886), + 2160: uint16(14131), + 2161: uint16(5668), + 2162: uint16(4627), + 2163: uint16(14128), + 2164: uint16(11543), + 2165: uint16(14130), + 2166: uint16(3893), + 2167: uint16(14132), + 2168: uint16(14123), + 2169: uint16(14129), + 2170: uint16(14136), + 2171: uint16(5667), + 2172: uint16(14124), + 2173: uint16(11324), + 2174: uint16(11274), + 2175: uint16(14139), + 2176: uint16(14143), + 2177: uint16(8285), + 2178: uint16(11608), + 2179: uint16(14144), + 2180: uint16(14141), + 2181: uint16(14138), + 2182: uint16(14137), + 2183: uint16(14142), + 2184: uint16(10511), + 2185: uint16(9491), + 2186: uint16(5669), + 2187: uint16(14145), + 2188: uint16(14140), + 2189: uint16(14146), + 2190: uint16(5722), + 2191: uint16(4368), + 2192: uint16(14154), + 2193: uint16(4887), + 2194: uint16(14152), + 2195: uint16(14153), + 2196: uint16(6408), + 2197: uint16(14151), + 2198: uint16(14149), + 2199: uint16(14148), + 2200: uint16(14155), + 2201: uint16(14147), + 2202: uint16(14157), + 2203: uint16(4442), + 2204: uint16(14159), + 2205: uint16(14158), + 2206: uint16(8967), + 2207: uint16(14162), + 2208: uint16(14160), + 2209: uint16(14150), + 2210: uint16(5723), + 2211: uint16(14161), + 2212: uint16(14165), + 2213: uint16(14164), + 2214: uint16(14166), + 2215: uint16(14163), + 2216: uint16(14167), + 2217: uint16(14168), + 2218: uint16(14169), + 2219: uint16(10569), + 2220: uint16(14171), + 2221: uint16(14170), + 2222: uint16(7198), + 2223: uint16(7949), + 2224: uint16(4421), + 2225: uint16(4443), + 2226: uint16(14172), + 2227: uint16(3870), + 2228: uint16(7979), + 2229: uint16(14173), + 2230: uint16(19234), + 2231: uint16(14336), + 2232: uint16(5696), + 2233: uint16(14337), + 2234: uint16(8014), + 2235: uint16(14338), + 2236: uint16(14339), + 2237: uint16(5145), + 2238: uint16(14340), + 2239: uint16(14341), + 2240: uint16(14342), + 2241: uint16(8502), + 2242: uint16(5932), + 2243: uint16(11072), + 2244: uint16(10779), + 2245: uint16(7241), + 2246: uint16(14343), + 2247: uint16(8015), + 2248: uint16(19740), + 2249: uint16(10049), + 2250: uint16(6985), + 2251: uint16(6444), + 2252: uint16(14344), + 2253: uint16(8486), + 2254: uint16(10502), + 2255: uint16(8528), + 2256: uint16(14347), + 2257: uint16(14345), + 2258: uint16(14348), + 2259: uint16(14346), + 2260: uint16(14349), + 2261: uint16(10512), + 2262: uint16(3862), + 2263: uint16(10301), + 2264: uint16(10050), + 2265: uint16(14350), + 2266: uint16(14353), + 2267: uint16(7444), + 2268: uint16(5146), + 2269: uint16(14351), + 2270: uint16(14358), + 2271: uint16(7445), + 2272: uint16(14352), + 2273: uint16(9763), + 2274: uint16(11325), + 2275: uint16(14354), + 2276: uint16(14355), + 2277: uint16(14359), + 2278: uint16(9289), + 2279: uint16(14356), + 2280: uint16(6162), + 2281: uint16(7997), + 2282: uint16(14373), + 2283: uint16(10003), + 2284: uint16(8529), + 2285: uint16(10051), + 2286: uint16(14604), + 2287: uint16(10585), + 2288: uint16(9040), + 2289: uint16(10836), + 2290: uint16(14362), + 2291: uint16(4352), + 2292: uint16(8777), + 2293: uint16(14371), + 2294: uint16(8723), + 2295: uint16(14365), + 2296: uint16(14372), + 2297: uint16(14367), + 2298: uint16(14374), + 2299: uint16(14370), + 2300: uint16(14369), + 2301: uint16(9806), + 2302: uint16(14363), + 2303: uint16(4444), + 2304: uint16(14361), + 2305: uint16(5200), + 2306: uint16(8530), + 2307: uint16(14357), + 2308: uint16(14360), + 2309: uint16(6163), + 2310: uint16(7994), + 2311: uint16(7446), + 2312: uint16(14368), + 2313: uint16(9777), + 2314: uint16(5201), + 2315: uint16(4647), + 2316: uint16(4678), + 2317: uint16(7680), + 2318: uint16(14376), + 2319: uint16(14381), + 2320: uint16(14377), + 2321: uint16(5724), + 2322: uint16(14382), + 2323: uint16(6657), + 2324: uint16(6216), + 2325: uint16(7173), + 2326: uint16(14364), + 2327: uint16(6748), + 2328: uint16(14379), + 2329: uint16(6711), + 2330: uint16(14380), + 2331: uint16(3875), + 2332: uint16(14375), + 2333: uint16(8968), + 2334: uint16(5202), + 2335: uint16(5395), + 2336: uint16(14378), + 2337: uint16(3846), + 2338: uint16(6434), + 2339: uint16(7701), + 2340: uint16(9041), + 2341: uint16(10035), + 2342: uint16(14384), + 2343: uint16(8253), + 2344: uint16(8457), + 2345: uint16(6666), + 2346: uint16(14385), + 2347: uint16(14387), + 2348: uint16(14383), + 2349: uint16(10560), + 2350: uint16(8988), + 2351: uint16(8251), + 2352: uint16(10586), + 2353: uint16(6957), + 2354: uint16(14399), + 2355: uint16(14398), + 2356: uint16(7767), + 2357: uint16(5725), + 2358: uint16(14392), + 2359: uint16(7448), + 2360: uint16(9543), + 2361: uint16(9744), + 2362: uint16(14390), + 2363: uint16(8252), + 2364: uint16(6999), + 2365: uint16(14395), + 2366: uint16(7447), + 2367: uint16(14389), + 2368: uint16(14394), + 2369: uint16(9778), + 2370: uint16(14388), + 2371: uint16(5632), + 2372: uint16(4668), + 2373: uint16(14396), + 2374: uint16(11530), + 2375: uint16(6445), + 2376: uint16(8724), + 2377: uint16(14393), + 2378: uint16(7995), + 2379: uint16(6164), + 2380: uint16(7747), + 2381: uint16(4165), + 2382: uint16(8219), + 2383: uint16(14391), + 2384: uint16(5156), + 2385: uint16(5670), + 2386: uint16(9006), + 2387: uint16(14397), + 2388: uint16(8254), + 2389: uint16(14400), + 2390: uint16(14402), + 2391: uint16(8470), + 2392: uint16(14408), + 2393: uint16(14403), + 2394: uint16(14405), + 2395: uint16(10272), + 2396: uint16(9042), + 2397: uint16(14406), + 2398: uint16(11275), + 2399: uint16(11303), + 2400: uint16(4888), + 2401: uint16(3853), + 2402: uint16(14404), + 2403: uint16(14401), + 2404: uint16(4951), + 2405: uint16(4166), + 2406: uint16(14407), + 2407: uint16(11304), + 2408: uint16(14411), + 2409: uint16(8474), + 2410: uint16(14418), + 2411: uint16(14412), + 2412: uint16(14409), + 2413: uint16(14416), + 2414: uint16(14386), + 2415: uint16(14413), + 2416: uint16(14417), + 2417: uint16(10017), + 2418: uint16(9290), + 2419: uint16(14410), + 2420: uint16(14414), + 2421: uint16(5671), + 2422: uint16(6480), + 2423: uint16(7996), + 2424: uint16(14422), + 2425: uint16(9221), + 2426: uint16(14419), + 2427: uint16(10815), + 2428: uint16(14420), + 2429: uint16(14421), + 2430: uint16(11053), + 2431: uint16(7937), + 2432: uint16(5697), + 2433: uint16(14428), + 2434: uint16(6676), + 2435: uint16(14425), + 2436: uint16(14424), + 2437: uint16(9745), + 2438: uint16(9492), + 2439: uint16(9232), + 2440: uint16(14426), + 2441: uint16(14427), + 2442: uint16(10318), + 2443: uint16(9764), + 2444: uint16(6658), + 2445: uint16(8016), + 2446: uint16(10799), + 2447: uint16(4648), + 2448: uint16(14596), + 2449: uint16(14429), + 2450: uint16(11305), + 2451: uint16(14598), + 2452: uint16(14594), + 2453: uint16(14595), + 2454: uint16(8255), + 2455: uint16(14593), + 2456: uint16(14366), + 2457: uint16(14597), + 2458: uint16(14592), + 2459: uint16(14602), + 2460: uint16(14603), + 2461: uint16(9222), + 2462: uint16(14605), + 2463: uint16(6659), + 2464: uint16(14600), + 2465: uint16(5147), + 2466: uint16(14606), + 2467: uint16(14599), + 2468: uint16(14610), + 2469: uint16(14609), + 2470: uint16(14608), + 2471: uint16(14611), + 2472: uint16(14613), + 2473: uint16(7504), + 2474: uint16(14612), + 2475: uint16(14616), + 2476: uint16(14614), + 2477: uint16(14615), + 2478: uint16(14415), + 2479: uint16(14618), + 2480: uint16(14617), + 2481: uint16(14423), + 2482: uint16(14619), + 2483: uint16(14607), + 2484: uint16(6712), + 2485: uint16(14620), + 2486: uint16(14621), + 2487: uint16(14623), + 2488: uint16(14622), + 2489: uint16(14624), + 2490: uint16(4445), + 2491: uint16(6165), + 2492: uint16(10587), + 2493: uint16(7950), + 2494: uint16(5933), + 2495: uint16(14626), + 2496: uint16(14629), + 2497: uint16(10289), + 2498: uint16(5182), + 2499: uint16(14628), + 2500: uint16(14627), + 2501: uint16(9779), + 2502: uint16(14630), + 2503: uint16(5396), + 2504: uint16(14632), + 2505: uint16(14631), + 2506: uint16(4889), + 2507: uint16(6677), + 2508: uint16(9527), + 2509: uint16(5672), + 2510: uint16(7763), + 2511: uint16(14633), + 2512: uint16(7951), + 2513: uint16(9223), + 2514: uint16(10302), + 2515: uint16(14634), + 2516: uint16(14635), + 2517: uint16(14636), + 2518: uint16(10519), + 2519: uint16(13372), + 2520: uint16(7973), + 2521: uint16(10283), + 2522: uint16(6455), + 2523: uint16(10052), + 2524: uint16(10018), + 2525: uint16(9260), + 2526: uint16(11552), + 2527: uint16(14638), + 2528: uint16(6959), + 2529: uint16(14639), + 2530: uint16(3861), + 2531: uint16(5427), + 2532: uint16(7980), + 2533: uint16(10303), + 2534: uint16(14640), + 2535: uint16(6689), + 2536: uint16(8742), + 2537: uint16(6714), + 2538: uint16(7702), + 2539: uint16(14641), + 2540: uint16(10588), + 2541: uint16(4182), + 2542: uint16(6715), + 2543: uint16(14644), + 2544: uint16(14642), + 2545: uint16(14645), + 2546: uint16(11544), + 2547: uint16(14643), + 2548: uint16(8026), + 2549: uint16(14646), + 2550: uint16(8465), + 2551: uint16(14647), + 2552: uint16(4953), + 2553: uint16(14649), + 2554: uint16(14648), + 2555: uint16(14650), + 2556: uint16(14651), + 2557: uint16(4954), + 2558: uint16(9563), + 2559: uint16(8725), + 2560: uint16(5195), + 2561: uint16(6716), + 2562: uint16(8256), + 2563: uint16(7227), + 2564: uint16(3855), + 2565: uint16(14652), + 2566: uint16(4353), + 2567: uint16(14656), + 2568: uint16(6166), + 2569: uint16(14655), + 2570: uint16(6410), + 2571: uint16(7449), + 2572: uint16(14654), + 2573: uint16(7450), + 2574: uint16(11039), + 2575: uint16(6409), + 2576: uint16(3894), + 2577: uint16(7981), + 2578: uint16(14661), + 2579: uint16(7952), + 2580: uint16(4134), + 2581: uint16(7220), + 2582: uint16(10821), + 2583: uint16(6481), + 2584: uint16(7451), + 2585: uint16(7942), + 2586: uint16(14660), + 2587: uint16(14658), + 2588: uint16(14659), + 2589: uint16(8778), + 2590: uint16(14853), + 2591: uint16(14665), + 2592: uint16(6749), + 2593: uint16(6167), + 2594: uint16(14663), + 2595: uint16(14664), + 2596: uint16(7703), + 2597: uint16(14662), + 2598: uint16(6670), + 2599: uint16(14667), + 2600: uint16(14666), + 2601: uint16(14671), + 2602: uint16(14672), + 2603: uint16(14668), + 2604: uint16(4609), + 2605: uint16(14669), + 2606: uint16(14670), + 2607: uint16(10036), + 2608: uint16(10304), + 2609: uint16(5673), + 2610: uint16(14673), + 2611: uint16(7953), + 2612: uint16(7452), + 2613: uint16(8753), + 2614: uint16(5414), + 2615: uint16(14674), + 2616: uint16(14678), + 2617: uint16(4394), + 2618: uint16(14675), + 2619: uint16(14677), + 2620: uint16(14676), + 2621: uint16(7242), + 2622: uint16(8743), + 2623: uint16(3876), + 2624: uint16(14679), + 2625: uint16(14680), + 2626: uint16(8969), + 2627: uint16(11600), + 2628: uint16(6690), + 2629: uint16(10570), + 2630: uint16(10780), + 2631: uint16(14849), + 2632: uint16(14682), + 2633: uint16(14685), + 2634: uint16(14684), + 2635: uint16(14681), + 2636: uint16(14848), + 2637: uint16(9533), + 2638: uint16(14683), + 2639: uint16(14850), + 2640: uint16(7243), + 2641: uint16(14851), + 2642: uint16(11306), + 2643: uint16(9815), + 2644: uint16(14852), + 2645: uint16(14854), + 2646: uint16(14855), + 2647: uint16(14856), + 2648: uint16(5417), + 2649: uint16(4135), + 2650: uint16(6168), + 2651: uint16(14857), + 2652: uint16(14858), + 2653: uint16(7248), + 2654: uint16(8257), + 2655: uint16(12599), + 2656: uint16(8221), + 2657: uint16(8220), + 2658: uint16(8503), + 2659: uint16(6438), + 2660: uint16(12113), + 2661: uint16(5709), + 2662: uint16(11276), + 2663: uint16(10589), + 2664: uint16(10333), + 2665: uint16(14859), + 2666: uint16(6482), + 2667: uint16(8990), + 2668: uint16(14860), + 2669: uint16(11790), + 2670: uint16(10781), + 2671: uint16(8970), + 2672: uint16(14861), + 2673: uint16(4955), + 2674: uint16(14862), + 2675: uint16(14863), + 2676: uint16(11065), + 2677: uint16(11011), + 2678: uint16(10837), + 2679: uint16(10811), + 2680: uint16(6660), + 2681: uint16(14865), + 2682: uint16(6986), + 2683: uint16(10800), + 2684: uint16(14867), + 2685: uint16(14870), + 2686: uint16(14869), + 2687: uint16(4952), + 2688: uint16(5183), + 2689: uint16(14866), + 2690: uint16(14868), + 2691: uint16(14871), + 2692: uint16(7768), + 2693: uint16(11354), + 2694: uint16(3880), + 2695: uint16(6463), + 2696: uint16(8475), + 2697: uint16(6972), + 2698: uint16(7506), + 2699: uint16(14874), + 2700: uint16(9261), + 2701: uint16(14872), + 2702: uint16(8458), + 2703: uint16(14873), + 2704: uint16(7505), + 2705: uint16(11068), + 2706: uint16(14875), + 2707: uint16(14876), + 2708: uint16(11335), + 2709: uint16(14881), + 2710: uint16(6169), + 2711: uint16(9780), + 2712: uint16(14878), + 2713: uint16(9291), + 2714: uint16(14653), + 2715: uint16(14657), + 2716: uint16(5166), + 2717: uint16(9766), + 2718: uint16(14880), + 2719: uint16(7453), + 2720: uint16(10019), + 2721: uint16(14886), + 2722: uint16(10073), + 2723: uint16(14877), + 2724: uint16(14883), + 2725: uint16(14882), + 2726: uint16(7982), + 2727: uint16(10828), + 2728: uint16(11570), + 2729: uint16(10822), + 2730: uint16(4395), + 2731: uint16(6717), + 2732: uint16(11815), + 2733: uint16(14885), + 2734: uint16(7764), + 2735: uint16(14884), + 2736: uint16(14879), + 2737: uint16(5934), + 2738: uint16(14891), + 2739: uint16(14889), + 2740: uint16(4396), + 2741: uint16(14887), + 2742: uint16(14893), + 2743: uint16(14899), + 2744: uint16(8487), + 2745: uint16(10528), + 2746: uint16(14901), + 2747: uint16(10241), + 2748: uint16(14900), + 2749: uint16(9807), + 2750: uint16(10782), + 2751: uint16(4890), + 2752: uint16(8022), + 2753: uint16(7199), + 2754: uint16(9010), + 2755: uint16(11277), + 2756: uint16(14896), + 2757: uint16(14895), + 2758: uint16(14897), + 2759: uint16(14894), + 2760: uint16(14902), + 2761: uint16(14892), + 2762: uint16(14890), + 2763: uint16(14898), + 2764: uint16(14888), + 2765: uint16(8779), + 2766: uint16(11095), + 2767: uint16(6949), + 2768: uint16(6483), + 2769: uint16(6425), + 2770: uint16(10830), + 2771: uint16(4640), + 2772: uint16(9005), + 2773: uint16(9513), + 2774: uint16(4136), + 2775: uint16(8017), + 2776: uint16(7955), + 2777: uint16(5641), + 2778: uint16(14904), + 2779: uint16(6170), + 2780: uint16(4699), + 2781: uint16(14906), + 2782: uint16(4691), + 2783: uint16(14912), + 2784: uint16(14909), + 2785: uint16(8018), + 2786: uint16(4650), + 2787: uint16(6411), + 2788: uint16(4649), + 2789: uint16(6446), + 2790: uint16(14907), + 2791: uint16(5700), + 2792: uint16(5674), + 2793: uint16(9292), + 2794: uint16(14905), + 2795: uint16(3877), + 2796: uint16(14908), + 2797: uint16(14910), + 2798: uint16(5420), + 2799: uint16(5643), + 2800: uint16(4891), + 2801: uint16(5162), + 2802: uint16(14913), + 2803: uint16(6488), + 2804: uint16(10832), + 2805: uint16(6678), + 2806: uint16(14914), + 2807: uint16(10255), + 2808: uint16(14926), + 2809: uint16(4370), + 2810: uint16(14915), + 2811: uint16(14932), + 2812: uint16(14916), + 2813: uint16(11553), + 2814: uint16(14923), + 2815: uint16(9790), + 2816: uint16(14931), + 2817: uint16(14918), + 2818: uint16(3859), + 2819: uint16(14920), + 2820: uint16(6171), + 2821: uint16(14922), + 2822: uint16(14921), + 2823: uint16(14917), + 2824: uint16(14928), + 2825: uint16(7454), + 2826: uint16(13132), + 2827: uint16(5959), + 2828: uint16(11355), + 2829: uint16(14919), + 2830: uint16(9043), + 2831: uint16(4610), + 2832: uint16(6412), + 2833: uint16(14911), + 2834: uint16(14927), + 2835: uint16(4672), + 2836: uint16(14925), + 2837: uint16(14929), + 2838: uint16(9293), + 2839: uint16(4957), + 2840: uint16(15121), + 2841: uint16(11048), + 2842: uint16(14934), + 2843: uint16(4956), + 2844: uint16(14941), + 2845: uint16(10783), + 2846: uint16(15104), + 2847: uint16(15106), + 2848: uint16(15110), + 2849: uint16(14936), + 2850: uint16(8713), + 2851: uint16(9294), + 2852: uint16(15114), + 2853: uint16(14939), + 2854: uint16(15111), + 2855: uint16(15105), + 2856: uint16(7704), + 2857: uint16(15115), + 2858: uint16(7954), + 2859: uint16(15113), + 2860: uint16(4892), + 2861: uint16(11823), + 2862: uint16(14933), + 2863: uint16(15109), + 2864: uint16(3895), + 2865: uint16(14935), + 2866: uint16(11033), + 2867: uint16(14940), + 2868: uint16(7681), + 2869: uint16(8998), + 2870: uint16(14930), + 2871: uint16(15108), + 2872: uint16(7769), + 2873: uint16(15118), + 2874: uint16(4688), + 2875: uint16(5888), + 2876: uint16(15120), + 2877: uint16(14937), + 2878: uint16(15119), + 2879: uint16(15112), + 2880: uint16(14938), + 2881: uint16(15116), + 2882: uint16(15117), + 2883: uint16(15134), + 2884: uint16(9517), + 2885: uint16(15107), + 2886: uint16(15130), + 2887: uint16(15132), + 2888: uint16(9015), + 2889: uint16(11307), + 2890: uint16(10325), + 2891: uint16(15127), + 2892: uint16(8489), + 2893: uint16(15133), + 2894: uint16(8222), + 2895: uint16(15124), + 2896: uint16(15137), + 2897: uint16(15136), + 2898: uint16(9550), + 2899: uint16(15135), + 2900: uint16(9545), + 2901: uint16(15139), + 2902: uint16(15126), + 2903: uint16(5415), + 2904: uint16(15129), + 2905: uint16(7228), + 2906: uint16(9791), + 2907: uint16(15131), + 2908: uint16(5418), + 2909: uint16(15123), + 2910: uint16(15125), + 2911: uint16(15122), + 2912: uint16(11791), + 2913: uint16(4665), + 2914: uint16(15128), + 2915: uint16(15138), + 2916: uint16(4628), + 2917: uint16(6470), + 2918: uint16(4156), + 2919: uint16(15155), + 2920: uint16(11792), + 2921: uint16(15158), + 2922: uint16(7705), + 2923: uint16(15157), + 2924: uint16(15156), + 2925: uint16(15153), + 2926: uint16(15141), + 2927: uint16(15170), + 2928: uint16(15140), + 2929: uint16(15159), + 2930: uint16(15151), + 2931: uint16(15146), + 2932: uint16(15143), + 2933: uint16(15144), + 2934: uint16(15152), + 2935: uint16(21249), + 2936: uint16(15149), + 2937: uint16(6172), + 2938: uint16(8999), + 2939: uint16(8259), + 2940: uint16(15147), + 2941: uint16(15142), + 2942: uint16(15145), + 2943: uint16(11308), + 2944: uint16(10825), + 2945: uint16(15150), + 2946: uint16(15160), + 2947: uint16(15168), + 2948: uint16(15161), + 2949: uint16(15174), + 2950: uint16(15172), + 2951: uint16(15167), + 2952: uint16(15166), + 2953: uint16(9007), + 2954: uint16(8260), + 2955: uint16(15164), + 2956: uint16(15162), + 2957: uint16(15169), + 2958: uint16(15175), + 2959: uint16(10068), + 2960: uint16(15181), + 2961: uint16(15176), + 2962: uint16(15179), + 2963: uint16(15173), + 2964: uint16(8787), + 2965: uint16(10263), + 2966: uint16(15163), + 2967: uint16(15171), + 2968: uint16(7455), + 2969: uint16(11054), + 2970: uint16(15191), + 2971: uint16(15178), + 2972: uint16(5889), + 2973: uint16(4354), + 2974: uint16(4670), + 2975: uint16(15154), + 2976: uint16(7456), + 2977: uint16(15183), + 2978: uint16(15190), + 2979: uint16(7000), + 2980: uint16(4689), + 2981: uint16(8717), + 2982: uint16(15180), + 2983: uint16(15185), + 2984: uint16(15189), + 2985: uint16(5397), + 2986: uint16(5163), + 2987: uint16(15187), + 2988: uint16(5120), + 2989: uint16(9514), + 2990: uint16(15186), + 2991: uint16(15188), + 2992: uint16(15182), + 2993: uint16(15184), + 2994: uint16(4671), + 2995: uint16(8744), + 2996: uint16(15195), + 2997: uint16(15193), + 2998: uint16(5960), + 2999: uint16(15192), + 3000: uint16(15360), + 3001: uint16(14903), + 3002: uint16(15194), + 3003: uint16(15196), + 3004: uint16(15197), + 3005: uint16(15371), + 3006: uint16(15367), + 3007: uint16(14924), + 3008: uint16(15366), + 3009: uint16(15365), + 3010: uint16(15362), + 3011: uint16(15177), + 3012: uint16(15364), + 3013: uint16(15363), + 3014: uint16(15369), + 3015: uint16(11781), + 3016: uint16(15372), + 3017: uint16(5466), + 3018: uint16(15368), + 3019: uint16(15370), + 3020: uint16(9990), + 3021: uint16(15373), + 3022: uint16(15377), + 3023: uint16(15374), + 3024: uint16(11346), + 3025: uint16(15375), + 3026: uint16(15165), + 3027: uint16(15378), + 3028: uint16(15379), + 3029: uint16(4116), + 3030: uint16(15381), + 3031: uint16(5702), + 3032: uint16(6912), + 3033: uint16(5428), + 3034: uint16(4355), + 3035: uint16(11326), + 3036: uint16(15383), + 3037: uint16(15382), + 3038: uint16(15385), + 3039: uint16(5148), + 3040: uint16(5429), + 3041: uint16(4893), + 3042: uint16(15388), + 3043: uint16(15387), + 3044: uint16(15389), + 3045: uint16(4397), + 3046: uint16(8726), + 3047: uint16(15390), + 3048: uint16(4894), + 3049: uint16(15392), + 3050: uint16(15391), + 3051: uint16(15393), + 3052: uint16(15394), + 3053: uint16(15395), + 3054: uint16(6718), + 3055: uint16(7956), + 3056: uint16(6400), + 3057: uint16(10319), + 3058: uint16(10561), + 3059: uint16(11811), + 3060: uint16(6740), + 3061: uint16(6447), + 3062: uint16(11601), + 3063: uint16(15396), + 3064: uint16(15397), + 3065: uint16(6719), + 3066: uint16(15398), + 3067: uint16(15399), + 3068: uint16(15401), + 3069: uint16(15400), + 3070: uint16(10807), + 3071: uint16(7229), + 3072: uint16(6987), + 3073: uint16(6691), + 3074: uint16(15402), + 3075: uint16(15404), + 3076: uint16(7682), + 3077: uint16(15403), + 3078: uint16(15405), + 3079: uint16(15406), + 3080: uint16(15407), + 3081: uint16(15408), + 3082: uint16(15409), + 3083: uint16(15411), + 3084: uint16(15410), + 3085: uint16(15412), + 3086: uint16(4356), + 3087: uint16(8745), + 3088: uint16(15413), + 3089: uint16(6661), + 3090: uint16(4651), + 3091: uint16(15414), + 3092: uint16(9249), + 3093: uint16(13099), + 3094: uint16(5122), + 3095: uint16(15415), + 3096: uint16(15416), + 3097: uint16(10571), + 3098: uint16(10823), + 3099: uint16(9510), + 3100: uint16(15417), + 3101: uint16(10053), + 3102: uint16(10074), + 3103: uint16(11058), + 3104: uint16(15418), + 3105: uint16(15420), + 3106: uint16(15419), + 3107: uint16(15422), + 3108: uint16(15421), + 3109: uint16(15424), + 3110: uint16(6720), + 3111: uint16(11024), + 3112: uint16(15425), + 3113: uint16(15426), + 3114: uint16(5123), + 3115: uint16(15427), + 3116: uint16(15429), + 3117: uint16(15428), + 3118: uint16(7748), + 3119: uint16(10264), + 3120: uint16(4137), + 3121: uint16(10020), + 3122: uint16(9044), + 3123: uint16(7200), + 3124: uint16(5184), + 3125: uint16(10021), + 3126: uint16(6925), + 3127: uint16(15431), + 3128: uint16(4895), + 3129: uint16(4183), + 3130: uint16(9553), + 3131: uint16(15430), + 3132: uint16(6173), + 3133: uint16(8754), + 3134: uint16(15432), + 3135: uint16(15440), + 3136: uint16(15433), + 3137: uint16(8480), + 3138: uint16(5185), + 3139: uint16(15441), + 3140: uint16(5703), + 3141: uint16(5124), + 3142: uint16(15439), + 3143: uint16(15437), + 3144: uint16(15434), + 3145: uint16(11327), + 3146: uint16(8991), + 3147: uint16(9528), + 3148: uint16(15435), + 3149: uint16(15443), + 3150: uint16(15442), + 3151: uint16(5634), + 3152: uint16(4364), + 3153: uint16(6426), + 3154: uint16(15436), + 3155: uint16(15438), + 3156: uint16(10806), + 3157: uint16(8531), + 3158: uint16(10838), + 3159: uint16(15451), + 3160: uint16(15452), + 3161: uint16(4398), + 3162: uint16(10503), + 3163: uint16(11100), + 3164: uint16(15616), + 3165: uint16(6914), + 3166: uint16(7457), + 3167: uint16(15447), + 3168: uint16(15453), + 3169: uint16(4167), + 3170: uint16(5398), + 3171: uint16(15444), + 3172: uint16(15449), + 3173: uint16(8019), + 3174: uint16(9808), + 3175: uint16(10054), + 3176: uint16(15446), + 3177: uint16(10752), + 3178: uint16(15448), + 3179: uint16(15619), + 3180: uint16(15617), + 3181: uint16(15450), + 3182: uint16(10753), + 3183: uint16(9767), + 3184: uint16(5186), + 3185: uint16(9220), + 3186: uint16(8780), + 3187: uint16(15620), + 3188: uint16(15618), + 3189: uint16(8504), + 3190: uint16(15445), + 3191: uint16(4138), + 3192: uint16(11309), + 3193: uint16(15631), + 3194: uint16(15630), + 3195: uint16(8021), + 3196: uint16(15627), + 3197: uint16(11339), + 3198: uint16(9493), + 3199: uint16(15621), + 3200: uint16(8996), + 3201: uint16(4139), + 3202: uint16(6174), + 3203: uint16(15624), + 3204: uint16(7174), + 3205: uint16(15629), + 3206: uint16(15628), + 3207: uint16(15623), + 3208: uint16(15626), + 3209: uint16(4679), + 3210: uint16(15625), + 3211: uint16(9768), + 3212: uint16(11533), + 3213: uint16(7507), + 3214: uint16(8020), + 3215: uint16(15637), + 3216: uint16(15635), + 3217: uint16(10284), + 3218: uint16(15632), + 3219: uint16(15634), + 3220: uint16(4121), + 3221: uint16(6175), + 3222: uint16(11793), + 3223: uint16(4636), + 3224: uint16(10305), + 3225: uint16(11328), + 3226: uint16(4611), + 3227: uint16(7706), + 3228: uint16(15636), + 3229: uint16(15641), + 3230: uint16(7458), + 3231: uint16(11279), + 3232: uint16(15638), + 3233: uint16(15633), + 3234: uint16(15639), + 3235: uint16(11581), + 3236: uint16(9298), + 3237: uint16(9505), + 3238: uint16(4629), + 3239: uint16(4148), + 3240: uint16(15645), + 3241: uint16(15648), + 3242: uint16(11554), + 3243: uint16(11331), + 3244: uint16(15655), + 3245: uint16(15649), + 3246: uint16(15646), + 3247: uint16(11571), + 3248: uint16(15652), + 3249: uint16(7209), + 3250: uint16(15654), + 3251: uint16(15659), + 3252: uint16(9296), + 3253: uint16(15657), + 3254: uint16(15651), + 3255: uint16(8727), + 3256: uint16(15658), + 3257: uint16(15647), + 3258: uint16(15653), + 3259: uint16(15660), + 3260: uint16(3931), + 3261: uint16(15650), + 3262: uint16(15661), + 3263: uint16(7707), + 3264: uint16(7230), + 3265: uint16(10500), + 3266: uint16(6413), + 3267: uint16(15642), + 3268: uint16(15656), + 3269: uint16(9241), + 3270: uint16(7957), + 3271: uint16(4680), + 3272: uint16(6448), + 3273: uint16(7459), + 3274: uint16(15644), + 3275: uint16(7201), + 3276: uint16(5675), + 3277: uint16(15643), + 3278: uint16(15665), + 3279: uint16(7244), + 3280: uint16(5913), + 3281: uint16(15680), + 3282: uint16(15674), + 3283: uint16(5203), + 3284: uint16(9262), + 3285: uint16(15669), + 3286: uint16(15678), + 3287: uint16(3854), + 3288: uint16(4113), + 3289: uint16(4376), + 3290: uint16(15671), + 3291: uint16(8459), + 3292: uint16(15662), + 3293: uint16(15664), + 3294: uint16(6176), + 3295: uint16(15681), + 3296: uint16(15676), + 3297: uint16(15668), + 3298: uint16(15675), + 3299: uint16(11018), + 3300: uint16(15673), + 3301: uint16(15677), + 3302: uint16(5935), + 3303: uint16(7460), + 3304: uint16(8728), + 3305: uint16(15667), + 3306: uint16(11278), + 3307: uint16(15670), + 3308: uint16(15663), + 3309: uint16(9297), + 3310: uint16(15666), + 3311: uint16(15672), + 3312: uint16(11824), + 3313: uint16(6941), + 3314: uint16(10845), + 3315: uint16(15682), + 3316: uint16(9997), + 3317: uint16(15694), + 3318: uint16(5914), + 3319: uint16(7231), + 3320: uint16(15684), + 3321: uint16(11534), + 3322: uint16(6177), + 3323: uint16(15697), + 3324: uint16(3917), + 3325: uint16(15695), + 3326: uint16(15683), + 3327: uint16(15689), + 3328: uint16(15691), + 3329: uint16(11310), + 3330: uint16(15686), + 3331: uint16(9229), + 3332: uint16(15688), + 3333: uint16(15696), + 3334: uint16(15690), + 3335: uint16(11046), + 3336: uint16(15685), + 3337: uint16(6913), + 3338: uint16(15709), + 3339: uint16(4681), + 3340: uint16(15687), + 3341: uint16(15692), + 3342: uint16(15693), + 3343: uint16(8523), + 3344: uint16(8505), + 3345: uint16(15701), + 3346: uint16(15707), + 3347: uint16(15705), + 3348: uint16(9224), + 3349: uint16(15874), + 3350: uint16(15702), + 3351: uint16(15703), + 3352: uint16(15679), + 3353: uint16(5208), + 3354: uint16(10265), + 3355: uint16(6942), + 3356: uint16(6230), + 3357: uint16(11794), + 3358: uint16(15699), + 3359: uint16(15873), + 3360: uint16(4168), + 3361: uint16(8261), + 3362: uint16(9816), + 3363: uint16(4896), + 3364: uint16(11609), + 3365: uint16(11008), + 3366: uint16(9009), + 3367: uint16(15706), + 3368: uint16(15708), + 3369: uint16(8209), + 3370: uint16(15872), + 3371: uint16(15704), + 3372: uint16(15698), + 3373: uint16(4898), + 3374: uint16(5704), + 3375: uint16(15886), + 3376: uint16(15881), + 3377: uint16(8023), + 3378: uint16(4674), + 3379: uint16(7232), + 3380: uint16(15890), + 3381: uint16(15883), + 3382: uint16(8971), + 3383: uint16(15880), + 3384: uint16(9016), + 3385: uint16(15915), + 3386: uint16(15877), + 3387: uint16(15876), + 3388: uint16(15885), + 3389: uint16(15879), + 3390: uint16(15878), + 3391: uint16(15884), + 3392: uint16(7936), + 3393: uint16(15875), + 3394: uint16(15887), + 3395: uint16(15888), + 3396: uint16(4897), + 3397: uint16(15893), + 3398: uint16(15892), + 3399: uint16(15894), + 3400: uint16(15897), + 3401: uint16(9250), + 3402: uint16(15891), + 3403: uint16(15895), + 3404: uint16(5698), + 3405: uint16(8536), + 3406: uint16(15889), + 3407: uint16(9754), + 3408: uint16(15896), + 3409: uint16(15901), + 3410: uint16(15899), + 3411: uint16(15902), + 3412: uint16(15905), + 3413: uint16(15898), + 3414: uint16(6217), + 3415: uint16(9735), + 3416: uint16(15640), + 3417: uint16(11347), + 3418: uint16(15900), + 3419: uint16(15904), + 3420: uint16(8532), + 3421: uint16(15903), + 3422: uint16(15882), + 3423: uint16(20040), + 3424: uint16(15908), + 3425: uint16(15912), + 3426: uint16(15910), + 3427: uint16(15906), + 3428: uint16(15907), + 3429: uint16(15911), + 3430: uint16(15909), + 3431: uint16(10285), + 3432: uint16(15917), + 3433: uint16(15914), + 3434: uint16(15913), + 3435: uint16(15916), + 3436: uint16(9523), + 3437: uint16(15918), + 3438: uint16(8788), + 3439: uint16(8524), + 3440: uint16(7940), + 3441: uint16(15919), + 3442: uint16(15921), + 3443: uint16(15920), + 3444: uint16(15700), + 3445: uint16(15922), + 3446: uint16(9542), + 3447: uint16(15923), + 3448: uint16(4399), + 3449: uint16(9299), + 3450: uint16(4612), + 3451: uint16(5187), + 3452: uint16(6973), + 3453: uint16(6449), + 3454: uint16(11782), + 3455: uint16(7749), + 3456: uint16(4169), + 3457: uint16(15925), + 3458: uint16(15924), + 3459: uint16(15928), + 3460: uint16(8729), + 3461: uint16(15931), + 3462: uint16(15926), + 3463: uint16(15930), + 3464: uint16(15929), + 3465: uint16(9247), + 3466: uint16(3896), + 3467: uint16(11604), + 3468: uint16(15933), + 3469: uint16(4103), + 3470: uint16(15935), + 3471: uint16(15934), + 3472: uint16(15932), + 3473: uint16(15927), + 3474: uint16(10754), + 3475: uint16(15937), + 3476: uint16(15936), + 3477: uint16(4170), + 3478: uint16(15939), + 3479: uint16(10513), + 3480: uint16(15938), + 3481: uint16(11028), + 3482: uint16(7462), + 3483: uint16(8210), + 3484: uint16(7461), + 3485: uint16(11610), + 3486: uint16(15945), + 3487: uint16(8024), + 3488: uint16(15941), + 3489: uint16(15946), + 3490: uint16(4171), + 3491: uint16(15944), + 3492: uint16(9792), + 3493: uint16(15940), + 3494: uint16(15943), + 3495: uint16(7463), + 3496: uint16(10032), + 3497: uint16(15947), + 3498: uint16(6960), + 3499: uint16(8025), + 3500: uint16(15950), + 3501: uint16(15942), + 3502: uint16(5638), + 3503: uint16(15948), + 3504: uint16(11311), + 3505: uint16(15951), + 3506: uint16(21253), + 3507: uint16(7214), + 3508: uint16(15952), + 3509: uint16(15953), + 3510: uint16(9741), + 3511: uint16(15955), + 3512: uint16(15956), + 3513: uint16(9746), + 3514: uint16(9300), + 3515: uint16(15958), + 3516: uint16(15960), + 3517: uint16(11572), + 3518: uint16(15957), + 3519: uint16(15959), + 3520: uint16(4172), + 3521: uint16(15954), + 3522: uint16(12858), + 3523: uint16(15961), + 3524: uint16(8262), + 3525: uint16(6679), + 3526: uint16(15963), + 3527: uint16(15962), + 3528: uint16(7683), + 3529: uint16(12600), + 3530: uint16(15964), + 3531: uint16(16128), + 3532: uint16(15949), + 3533: uint16(15965), + 3534: uint16(16129), + 3535: uint16(9817), + 3536: uint16(16130), + 3537: uint16(16131), + 3538: uint16(16132), + 3539: uint16(16133), + 3540: uint16(9021), + 3541: uint16(16135), + 3542: uint16(16134), + 3543: uint16(16136), + 3544: uint16(16137), + 3545: uint16(6974), + 3546: uint16(10306), + 3547: uint16(11083), + 3548: uint16(16138), + 3549: uint16(16139), + 3550: uint16(8245), + 3551: uint16(6915), + 3552: uint16(16140), + 3553: uint16(16141), + 3554: uint16(16142), + 3555: uint16(10545), + 3556: uint16(10022), + 3557: uint16(16143), + 3558: uint16(9782), + 3559: uint16(8972), + 3560: uint16(16144), + 3561: uint16(4422), + 3562: uint16(5196), + 3563: uint16(11045), + 3564: uint16(11029), + 3565: uint16(4371), + 3566: uint16(11795), + 3567: uint16(10801), + 3568: uint16(10505), + 3569: uint16(7958), + 3570: uint16(16145), + 3571: uint16(9506), + 3572: uint16(5890), + 3573: uint16(16146), + 3574: uint16(6451), + 3575: uint16(16148), + 3576: uint16(16147), + 3577: uint16(16149), + 3578: uint16(16150), + 3579: uint16(16151), + 3580: uint16(5149), + 3581: uint16(16152), + 3582: uint16(16153), + 3583: uint16(5891), + 3584: uint16(10023), + 3585: uint16(16155), + 3586: uint16(7508), + 3587: uint16(16154), + 3588: uint16(5399), + 3589: uint16(16156), + 3590: uint16(16158), + 3591: uint16(16157), + 3592: uint16(16159), + 3593: uint16(5936), + 3594: uint16(16160), + 3595: uint16(5448), + 3596: uint16(8223), + 3597: uint16(6236), + 3598: uint16(16162), + 3599: uint16(16163), + 3600: uint16(16161), + 3601: uint16(6988), + 3602: uint16(9511), + 3603: uint16(5400), + 3604: uint16(16165), + 3605: uint16(8715), + 3606: uint16(16164), + 3607: uint16(11796), + 3608: uint16(9793), + 3609: uint16(16168), + 3610: uint16(16170), + 3611: uint16(16167), + 3612: uint16(11059), + 3613: uint16(16169), + 3614: uint16(16171), + 3615: uint16(11555), + 3616: uint16(16175), + 3617: uint16(16174), + 3618: uint16(8789), + 3619: uint16(9740), + 3620: uint16(5892), + 3621: uint16(16173), + 3622: uint16(16172), + 3623: uint16(11280), + 3624: uint16(11281), + 3625: uint16(16176), + 3626: uint16(4173), + 3627: uint16(6229), + 3628: uint16(6721), + 3629: uint16(16177), + 3630: uint16(16178), + 3631: uint16(16180), + 3632: uint16(7202), + 3633: uint16(16182), + 3634: uint16(16181), + 3635: uint16(16183), + 3636: uint16(4652), + 3637: uint16(16185), + 3638: uint16(16184), + 3639: uint16(16187), + 3640: uint16(16186), + 3641: uint16(5915), + 3642: uint16(11527), + 3643: uint16(5419), + 3644: uint16(4357), + 3645: uint16(5449), + 3646: uint16(4928), + 3647: uint16(11591), + 3648: uint16(16189), + 3649: uint16(16191), + 3650: uint16(16192), + 3651: uint16(4400), + 3652: uint16(16188), + 3653: uint16(6680), + 3654: uint16(8992), + 3655: uint16(16190), + 3656: uint16(16195), + 3657: uint16(6989), + 3658: uint16(16193), + 3659: uint16(5661), + 3660: uint16(10024), + 3661: uint16(16194), + 3662: uint16(16221), + 3663: uint16(16200), + 3664: uint16(5916), + 3665: uint16(5188), + 3666: uint16(16197), + 3667: uint16(11356), + 3668: uint16(11535), + 3669: uint16(8533), + 3670: uint16(16199), + 3671: uint16(16201), + 3672: uint16(11573), + 3673: uint16(5430), + 3674: uint16(10075), + 3675: uint16(9769), + 3676: uint16(16202), + 3677: uint16(16204), + 3678: uint16(16207), + 3679: uint16(16203), + 3680: uint16(16206), + 3681: uint16(5961), + 3682: uint16(4140), + 3683: uint16(16208), + 3684: uint16(7759), + 3685: uint16(16205), + 3686: uint16(11579), + 3687: uint16(16211), + 3688: uint16(21251), + 3689: uint16(16209), + 3690: uint16(16212), + 3691: uint16(16198), + 3692: uint16(16210), + 3693: uint16(6427), + 3694: uint16(16213), + 3695: uint16(16214), + 3696: uint16(11357), + 3697: uint16(16215), + 3698: uint16(16216), + 3699: uint16(16196), + 3700: uint16(16217), + 3701: uint16(4899), + 3702: uint16(6916), + 3703: uint16(16218), + 3704: uint16(16219), + 3705: uint16(16220), + 3706: uint16(4122), + 3707: uint16(16384), + 3708: uint16(10266), + 3709: uint16(16385), + 3710: uint16(4867), + 3711: uint16(16386), + 3712: uint16(16387), + 3713: uint16(16388), + 3714: uint16(16390), + 3715: uint16(16391), + 3716: uint16(16389), + 3717: uint16(10290), + 3718: uint16(16393), + 3719: uint16(16392), + 3720: uint16(16395), + 3721: uint16(16394), + 3722: uint16(16396), + 3723: uint16(16397), + 3724: uint16(16399), + 3725: uint16(16398), + 3726: uint16(6232), + 3727: uint16(16401), + 3728: uint16(16400), + 3729: uint16(4900), + 3730: uint16(7730), + 3731: uint16(9243), + 3732: uint16(16402), + 3733: uint16(7959), + 3734: uint16(6681), + 3735: uint16(4184), + 3736: uint16(16403), + 3737: uint16(11312), + 3738: uint16(10562), + 3739: uint16(16404), + 3740: uint16(9251), + 3741: uint16(11282), + 3742: uint16(6178), + 3743: uint16(7708), + 3744: uint16(8746), + 3745: uint16(12563), + 3746: uint16(8973), + 3747: uint16(4423), + 3748: uint16(16405), + 3749: uint16(16406), + 3750: uint16(16411), + 3751: uint16(16409), + 3752: uint16(16408), + 3753: uint16(14625), + 3754: uint16(4613), + 3755: uint16(16407), + 3756: uint16(3897), + 3757: uint16(9993), + 3758: uint16(10025), + 3759: uint16(11536), + 3760: uint16(16412), + 3761: uint16(16410), + 3762: uint16(8763), + 3763: uint16(7941), + 3764: uint16(9994), + 3765: uint16(10252), + 3766: uint16(16414), + 3767: uint16(11531), + 3768: uint16(5676), + 3769: uint16(16415), + 3770: uint16(16413), + 3771: uint16(10037), + 3772: uint16(16416), + 3773: uint16(16417), + 3774: uint16(3898), + 3775: uint16(7509), + 3776: uint16(16422), + 3777: uint16(16419), + 3778: uint16(9548), + 3779: uint16(16418), + 3780: uint16(5125), + 3781: uint16(16425), + 3782: uint16(16420), + 3783: uint16(16421), + 3784: uint16(16424), + 3785: uint16(16423), + 3786: uint16(10244), + 3787: uint16(8225), + 3788: uint16(8224), + 3789: uint16(5150), + 3790: uint16(16426), + 3791: uint16(16427), + 3792: uint16(16428), + 3793: uint16(16430), + 3794: uint16(16429), + 3795: uint16(4149), + 3796: uint16(16438), + 3797: uint16(10055), + 3798: uint16(16432), + 3799: uint16(16434), + 3800: uint16(16436), + 3801: uint16(7709), + 3802: uint16(16437), + 3803: uint16(16435), + 3804: uint16(6943), + 3805: uint16(16431), + 3806: uint16(16433), + 3807: uint16(10273), + 3808: uint16(7464), + 3809: uint16(16440), + 3810: uint16(16439), + 3811: uint16(16441), + 3812: uint16(6917), + 3813: uint16(6414), + 3814: uint16(9302), + 3815: uint16(16442), + 3816: uint16(9002), + 3817: uint16(16444), + 3818: uint16(11520), + 3819: uint16(16443), + 3820: uint16(8264), + 3821: uint16(16449), + 3822: uint16(16451), + 3823: uint16(16452), + 3824: uint16(8755), + 3825: uint16(16450), + 3826: uint16(16447), + 3827: uint16(16445), + 3828: uint16(16446), + 3829: uint16(16448), + 3830: uint16(16455), + 3831: uint16(16453), + 3832: uint16(16454), + 3833: uint16(16456), + 3834: uint16(16458), + 3835: uint16(16459), + 3836: uint16(16460), + 3837: uint16(16461), + 3838: uint16(16457), + 3839: uint16(16463), + 3840: uint16(16462), + 3841: uint16(16464), + 3842: uint16(11556), + 3843: uint16(16467), + 3844: uint16(16465), + 3845: uint16(16466), + 3846: uint16(4929), + 3847: uint16(11101), + 3848: uint16(10537), + 3849: uint16(16469), + 3850: uint16(16468), + 3851: uint16(16470), + 3852: uint16(16471), + 3853: uint16(16475), + 3854: uint16(16472), + 3855: uint16(16473), + 3856: uint16(16474), + 3857: uint16(16476), + 3858: uint16(16477), + 3859: uint16(16640), + 3860: uint16(16641), + 3861: uint16(16642), + 3862: uint16(9998), + 3863: uint16(9263), + 3864: uint16(16643), + 3865: uint16(9809), + 3866: uint16(10259), + 3867: uint16(16644), + 3868: uint16(16645), + 3869: uint16(9225), + 3870: uint16(4614), + 3871: uint16(6179), + 3872: uint16(16646), + 3873: uint16(16647), + 3874: uint16(16648), + 3875: uint16(6664), + 3876: uint16(16650), + 3877: uint16(16649), + 3878: uint16(16651), + 3879: uint16(16652), + 3880: uint16(10056), + 3881: uint16(16653), + 3882: uint16(16654), + 3883: uint16(21064), + 3884: uint16(16655), + 3885: uint16(16656), + 3886: uint16(16657), + 3887: uint16(6669), + 3888: uint16(16658), + 3889: uint16(9781), + 3890: uint16(10814), + 3891: uint16(4141), + 3892: uint16(4150), + 3893: uint16(16659), + 3894: uint16(16661), + 3895: uint16(16660), + 3896: uint16(9295), + 3897: uint16(7960), + 3898: uint16(15384), + 3899: uint16(16662), + 3900: uint16(11040), + 3901: uint16(16663), + 3902: uint16(4901), + 3903: uint16(10038), + 3904: uint16(16664), + 3905: uint16(16665), + 3906: uint16(16666), + 3907: uint16(11067), + 3908: uint16(11060), + 3909: uint16(8989), + 3910: uint16(8265), + 3911: uint16(16668), + 3912: uint16(7233), + 3913: uint16(7465), + 3914: uint16(16671), + 3915: uint16(16670), + 3916: uint16(16669), + 3917: uint16(10076), + 3918: uint16(4902), + 3919: uint16(5896), + 3920: uint16(16677), + 3921: uint16(16674), + 3922: uint16(7710), + 3923: uint16(11025), + 3924: uint16(16673), + 3925: uint16(16675), + 3926: uint16(16676), + 3927: uint16(16672), + 3928: uint16(16678), + 3929: uint16(16679), + 3930: uint16(8974), + 3931: uint16(4930), + 3932: uint16(8772), + 3933: uint16(16680), + 3934: uint16(16681), + 3935: uint16(16684), + 3936: uint16(7750), + 3937: uint16(9507), + 3938: uint16(16685), + 3939: uint16(10802), + 3940: uint16(16682), + 3941: uint16(16683), + 3942: uint16(16688), + 3943: uint16(16687), + 3944: uint16(16686), + 3945: uint16(16690), + 3946: uint16(16689), + 3947: uint16(16691), + 3948: uint16(16693), + 3949: uint16(16692), + 3950: uint16(10540), + 3951: uint16(7221), + 3952: uint16(11557), + 3953: uint16(16694), + 3954: uint16(9494), + 3955: uint16(16695), + 3956: uint16(16696), + 3957: uint16(16700), + 3958: uint16(16698), + 3959: uint16(16699), + 3960: uint16(16697), + 3961: uint16(16701), + 3962: uint16(16702), + 3963: uint16(16703), + 3964: uint16(16704), + 3965: uint16(11030), + 3966: uint16(16705), + 3967: uint16(11087), + 3968: uint16(16706), + 3969: uint16(8749), + 3970: uint16(9801), + 3971: uint16(5450), + 3972: uint16(8730), + 3973: uint16(16707), + 3974: uint16(5401), + 3975: uint16(7983), + 3976: uint16(16708), + 3977: uint16(6428), + 3978: uint16(16709), + 3979: uint16(16710), + 3980: uint16(5893), + 3981: uint16(6452), + 3982: uint16(16712), + 3983: uint16(9269), + 3984: uint16(6453), + 3985: uint16(5165), + 3986: uint16(10755), + 3987: uint16(9770), + 3988: uint16(9270), + 3989: uint16(6203), + 3990: uint16(16714), + 3991: uint16(7466), + 3992: uint16(11537), + 3993: uint16(6180), + 3994: uint16(5894), + 3995: uint16(9986), + 3996: uint16(16716), + 3997: uint16(16718), + 3998: uint16(5962), + 3999: uint16(16717), + 4000: uint16(9045), + 4001: uint16(16720), + 4002: uint16(4630), + 4003: uint16(16715), + 4004: uint16(10057), + 4005: uint16(4111), + 4006: uint16(6475), + 4007: uint16(11825), + 4008: uint16(16719), + 4009: uint16(16721), + 4010: uint16(10538), + 4011: uint16(7992), + 4012: uint16(16723), + 4013: uint16(16724), + 4014: uint16(16722), + 4015: uint16(4653), + 4016: uint16(16730), + 4017: uint16(16729), + 4018: uint16(6918), + 4019: uint16(16731), + 4020: uint16(16726), + 4021: uint16(16732), + 4022: uint16(16727), + 4023: uint16(10039), + 4024: uint16(16725), + 4025: uint16(16728), + 4026: uint16(16897), + 4027: uint16(16896), + 4028: uint16(10816), + 4029: uint16(16733), + 4030: uint16(3914), + 4031: uint16(16899), + 4032: uint16(16898), + 4033: uint16(7467), + 4034: uint16(16900), + 4035: uint16(8226), + 4036: uint16(16902), + 4037: uint16(16901), + 4038: uint16(16903), + 4039: uint16(16711), + 4040: uint16(16713), + 4041: uint16(16905), + 4042: uint16(16904), + 4043: uint16(6919), + 4044: uint16(11592), + 4045: uint16(6961), + 4046: uint16(16906), + 4047: uint16(5654), + 4048: uint16(5151), + 4049: uint16(5126), + 4050: uint16(6722), + 4051: uint16(11283), + 4052: uint16(16912), + 4053: uint16(16911), + 4054: uint16(8227), + 4055: uint16(16908), + 4056: uint16(16910), + 4057: uint16(7210), + 4058: uint16(7711), + 4059: uint16(16909), + 4060: uint16(16907), + 4061: uint16(9737), + 4062: uint16(7468), + 4063: uint16(10267), + 4064: uint16(6454), + 4065: uint16(9303), + 4066: uint16(16913), + 4067: uint16(16914), + 4068: uint16(16936), + 4069: uint16(5431), + 4070: uint16(11804), + 4071: uint16(8212), + 4072: uint16(16915), + 4073: uint16(4401), + 4074: uint16(9046), + 4075: uint16(10496), + 4076: uint16(16916), + 4077: uint16(5209), + 4078: uint16(16917), + 4079: uint16(16919), + 4080: uint16(16920), + 4081: uint16(9736), + 4082: uint16(16921), + 4083: uint16(16922), + 4084: uint16(16923), + 4085: uint16(5432), + 4086: uint16(4402), + 4087: uint16(9508), + 4088: uint16(7175), + 4089: uint16(6723), + 4090: uint16(16924), + 4091: uint16(7176), + 4092: uint16(4393), + 4093: uint16(10274), + 4094: uint16(16925), + 4095: uint16(10058), + 4096: uint16(8228), + 4097: uint16(16928), + 4098: uint16(16929), + 4099: uint16(9800), + 4100: uint16(7712), + 4101: uint16(16926), + 4102: uint16(8768), + 4103: uint16(16927), + 4104: uint16(7469), + 4105: uint16(3899), + 4106: uint16(5128), + 4107: uint16(16930), + 4108: uint16(9047), + 4109: uint16(16931), + 4110: uint16(7974), + 4111: uint16(11020), + 4112: uint16(10242), + 4113: uint16(16932), + 4114: uint16(16933), + 4115: uint16(8756), + 4116: uint16(11558), + 4117: uint16(16935), + 4118: uint16(16934), + 4119: uint16(6990), + 4120: uint16(16937), + 4121: uint16(3919), + 4122: uint16(16940), + 4123: uint16(16938), + 4124: uint16(4403), + 4125: uint16(5677), + 4126: uint16(16939), + 4127: uint16(6181), + 4128: uint16(6225), + 4129: uint16(10565), + 4130: uint16(16941), + 4131: uint16(10803), + 4132: uint16(16943), + 4133: uint16(7984), + 4134: uint16(4142), + 4135: uint16(4377), + 4136: uint16(3851), + 4137: uint16(16942), + 4138: uint16(16944), + 4139: uint16(16945), + 4140: uint16(7510), + 4141: uint16(16946), + 4142: uint16(4654), + 4143: uint16(16948), + 4144: uint16(5705), + 4145: uint16(5189), + 4146: uint16(16949), + 4147: uint16(5460), + 4148: uint16(16950), + 4149: uint16(8027), + 4150: uint16(9516), + 4151: uint16(7999), + 4152: uint16(6484), + 4153: uint16(16951), + 4154: uint16(8769), + 4155: uint16(8266), + 4156: uint16(16953), + 4157: uint16(16955), + 4158: uint16(16952), + 4159: uint16(16954), + 4160: uint16(5633), + 4161: uint16(16956), + 4162: uint16(5637), + 4163: uint16(5190), + 4164: uint16(11313), + 4165: uint16(16958), + 4166: uint16(16959), + 4167: uint16(4109), + 4168: uint16(16962), + 4169: uint16(4693), + 4170: uint16(16961), + 4171: uint16(16960), + 4172: uint16(16964), + 4173: uint16(16957), + 4174: uint16(16965), + 4175: uint16(11528), + 4176: uint16(16966), + 4177: uint16(16967), + 4178: uint16(13139), + 4179: uint16(16969), + 4180: uint16(16968), + 4181: uint16(16970), + 4182: uint16(16971), + 4183: uint16(11540), + 4184: uint16(16972), + 4185: uint16(20302), + 4186: uint16(7470), + 4187: uint16(16973), + 4188: uint16(16974), + 4189: uint16(7222), + 4190: uint16(9495), + 4191: uint16(16975), + 4192: uint16(8711), + 4193: uint16(16976), + 4194: uint16(8731), + 4195: uint16(16977), + 4196: uint16(5380), + 4197: uint16(12318), + 4198: uint16(8764), + 4199: uint16(6930), + 4200: uint16(4903), + 4201: uint16(16978), + 4202: uint16(17153), + 4203: uint16(16981), + 4204: uint16(5191), + 4205: uint16(16980), + 4206: uint16(17155), + 4207: uint16(16979), + 4208: uint16(7471), + 4209: uint16(16983), + 4210: uint16(16984), + 4211: uint16(9226), + 4212: uint16(16985), + 4213: uint16(4669), + 4214: uint16(7737), + 4215: uint16(10307), + 4216: uint16(16987), + 4217: uint16(8519), + 4218: uint16(16982), + 4219: uint16(16986), + 4220: uint16(16988), + 4221: uint16(6490), + 4222: uint16(17157), + 4223: uint16(10253), + 4224: uint16(9989), + 4225: uint16(9304), + 4226: uint16(5433), + 4227: uint16(17156), + 4228: uint16(17154), + 4229: uint16(10004), + 4230: uint16(16989), + 4231: uint16(8765), + 4232: uint16(9306), + 4233: uint16(9305), + 4234: uint16(6485), + 4235: uint16(17175), + 4236: uint16(17159), + 4237: uint16(17161), + 4238: uint16(17164), + 4239: uint16(17165), + 4240: uint16(17162), + 4241: uint16(17163), + 4242: uint16(17160), + 4243: uint16(17158), + 4244: uint16(17152), + 4245: uint16(10542), + 4246: uint16(4404), + 4247: uint16(17172), + 4248: uint16(17169), + 4249: uint16(17174), + 4250: uint16(17173), + 4251: uint16(9810), + 4252: uint16(11014), + 4253: uint16(6682), + 4254: uint16(17167), + 4255: uint16(17176), + 4256: uint16(17171), + 4257: uint16(17170), + 4258: uint16(17166), + 4259: uint16(17168), + 4260: uint16(4904), + 4261: uint16(8732), + 4262: uint16(8028), + 4263: uint16(9985), + 4264: uint16(17181), + 4265: uint16(9987), + 4266: uint16(8000), + 4267: uint16(17178), + 4268: uint16(10030), + 4269: uint16(17182), + 4270: uint16(10546), + 4271: uint16(8762), + 4272: uint16(17177), + 4273: uint16(17179), + 4274: uint16(17180), + 4275: uint16(17183), + 4276: uint16(6947), + 4277: uint16(9509), + 4278: uint16(17188), + 4279: uint16(17187), + 4280: uint16(17184), + 4281: uint16(11797), + 4282: uint16(17193), + 4283: uint16(17197), + 4284: uint16(17194), + 4285: uint16(17190), + 4286: uint16(17191), + 4287: uint16(17196), + 4288: uint16(17185), + 4289: uint16(12596), + 4290: uint16(17192), + 4291: uint16(17186), + 4292: uint16(17195), + 4293: uint16(17201), + 4294: uint16(4905), + 4295: uint16(17198), + 4296: uint16(17199), + 4297: uint16(17200), + 4298: uint16(17203), + 4299: uint16(17202), + 4300: uint16(10069), + 4301: uint16(17204), + 4302: uint16(11611), + 4303: uint16(10572), + 4304: uint16(17209), + 4305: uint16(17206), + 4306: uint16(17205), + 4307: uint16(7985), + 4308: uint16(17208), + 4309: uint16(17210), + 4310: uint16(17207), + 4311: uint16(17214), + 4312: uint16(17211), + 4313: uint16(17212), + 4314: uint16(17189), + 4315: uint16(17213), + 4316: uint16(17215), + 4317: uint16(17216), + 4318: uint16(10533), + 4319: uint16(17217), + 4320: uint16(11073), + 4321: uint16(5421), + 4322: uint16(5640), + 4323: uint16(17218), + 4324: uint16(10515), + 4325: uint16(7751), + 4326: uint16(11023), + 4327: uint16(17219), + 4328: uint16(11538), + 4329: uint16(9811), + 4330: uint16(8229), + 4331: uint16(9747), + 4332: uint16(7212), + 4333: uint16(3871), + 4334: uint16(17224), + 4335: uint16(17222), + 4336: uint16(17220), + 4337: uint16(4864), + 4338: uint16(7472), + 4339: uint16(17225), + 4340: uint16(17223), + 4341: uint16(17221), + 4342: uint16(17229), + 4343: uint16(17228), + 4344: uint16(17227), + 4345: uint16(17226), + 4346: uint16(17230), + 4347: uint16(17231), + 4348: uint16(7961), + 4349: uint16(17232), + 4350: uint16(17234), + 4351: uint16(17233), + 4352: uint16(5937), + 4353: uint16(8215), + 4354: uint16(17236), + 4355: uint16(9307), + 4356: uint16(17235), + 4357: uint16(17237), + 4358: uint16(10516), + 4359: uint16(8267), + 4360: uint16(6182), + 4361: uint16(17238), + 4362: uint16(11559), + 4363: uint16(17240), + 4364: uint16(17241), + 4365: uint16(17242), + 4366: uint16(17243), + 4367: uint16(6724), + 4368: uint16(17244), + 4369: uint16(5678), + 4370: uint16(5193), + 4371: uint16(5129), + 4372: uint16(17408), + 4373: uint16(11090), + 4374: uint16(6183), + 4375: uint16(17245), + 4376: uint16(17411), + 4377: uint16(11077), + 4378: uint16(9755), + 4379: uint16(10258), + 4380: uint16(7234), + 4381: uint16(17410), + 4382: uint16(6962), + 4383: uint16(6184), + 4384: uint16(6725), + 4385: uint16(5192), + 4386: uint16(10517), + 4387: uint16(17409), + 4388: uint16(8230), + 4389: uint16(10785), + 4390: uint16(6486), + 4391: uint16(6726), + 4392: uint16(9020), + 4393: uint16(17414), + 4394: uint16(11582), + 4395: uint16(6456), + 4396: uint16(17415), + 4397: uint16(7713), + 4398: uint16(17417), + 4399: uint16(7473), + 4400: uint16(6415), + 4401: uint16(17416), + 4402: uint16(7177), + 4403: uint16(5917), + 4404: uint16(8231), + 4405: uint16(17412), + 4406: uint16(17418), + 4407: uint16(17413), + 4408: uint16(5679), + 4409: uint16(17421), + 4410: uint16(17425), + 4411: uint16(5706), + 4412: uint16(17420), + 4413: uint16(17429), + 4414: uint16(6185), + 4415: uint16(11340), + 4416: uint16(3867), + 4417: uint16(17426), + 4418: uint16(5194), + 4419: uint16(17423), + 4420: uint16(17424), + 4421: uint16(9308), + 4422: uint16(17422), + 4423: uint16(17419), + 4424: uint16(4615), + 4425: uint16(8003), + 4426: uint16(5895), + 4427: uint16(17431), + 4428: uint16(17428), + 4429: uint16(17430), + 4430: uint16(17427), + 4431: uint16(5680), + 4432: uint16(8466), + 4433: uint16(17432), + 4434: uint16(8269), + 4435: uint16(17445), + 4436: uint16(17441), + 4437: uint16(17435), + 4438: uint16(17439), + 4439: uint16(7001), + 4440: uint16(3900), + 4441: uint16(17434), + 4442: uint16(17442), + 4443: uint16(17446), + 4444: uint16(6186), + 4445: uint16(11061), + 4446: uint16(9013), + 4447: uint16(17436), + 4448: uint16(17444), + 4449: uint16(17433), + 4450: uint16(8733), + 4451: uint16(17438), + 4452: uint16(3868), + 4453: uint16(11049), + 4454: uint16(17437), + 4455: uint16(5434), + 4456: uint16(10059), + 4457: uint16(8268), + 4458: uint16(11567), + 4459: uint16(7246), + 4460: uint16(17485), + 4461: uint16(17447), + 4462: uint16(8029), + 4463: uint16(17443), + 4464: uint16(17448), + 4465: uint16(17450), + 4466: uint16(9048), + 4467: uint16(17453), + 4468: uint16(17449), + 4469: uint16(10547), + 4470: uint16(4906), + 4471: uint16(11050), + 4472: uint16(3901), + 4473: uint16(17452), + 4474: uint16(11612), + 4475: uint16(17451), + 4476: uint16(4174), + 4477: uint16(9547), + 4478: uint16(17454), + 4479: uint16(17461), + 4480: uint16(17455), + 4481: uint16(17462), + 4482: uint16(17458), + 4483: uint16(9818), + 4484: uint16(6953), + 4485: uint16(17460), + 4486: uint16(17457), + 4487: uint16(17463), + 4488: uint16(17456), + 4489: uint16(7203), + 4490: uint16(10756), + 4491: uint16(7211), + 4492: uint16(17459), + 4493: uint16(17471), + 4494: uint16(17467), + 4495: uint16(17470), + 4496: uint16(17468), + 4497: uint16(17472), + 4498: uint16(17466), + 4499: uint16(17440), + 4500: uint16(7986), + 4501: uint16(10026), + 4502: uint16(17469), + 4503: uint16(17464), + 4504: uint16(8192), + 4505: uint16(5681), + 4506: uint16(7178), + 4507: uint16(7684), + 4508: uint16(8213), + 4509: uint16(17475), + 4510: uint16(17477), + 4511: uint16(17478), + 4512: uint16(17474), + 4513: uint16(17476), + 4514: uint16(17465), + 4515: uint16(17473), + 4516: uint16(17481), + 4517: uint16(17480), + 4518: uint16(10841), + 4519: uint16(5642), + 4520: uint16(17479), + 4521: uint16(17483), + 4522: uint16(17482), + 4523: uint16(17486), + 4524: uint16(17488), + 4525: uint16(6683), + 4526: uint16(17484), + 4527: uint16(17489), + 4528: uint16(17490), + 4529: uint16(17491), + 4530: uint16(17497), + 4531: uint16(9242), + 4532: uint16(17493), + 4533: uint16(17492), + 4534: uint16(17494), + 4535: uint16(17495), + 4536: uint16(17496), + 4537: uint16(17498), + 4538: uint16(17499), + 4539: uint16(4907), + 4540: uint16(17500), + 4541: uint16(17501), + 4542: uint16(17664), + 4543: uint16(17665), + 4544: uint16(17666), + 4545: uint16(17667), + 4546: uint16(17668), + 4547: uint16(17669), + 4548: uint16(17671), + 4549: uint16(17670), + 4550: uint16(17672), + 4551: uint16(17673), + 4552: uint16(17674), + 4553: uint16(17677), + 4554: uint16(17675), + 4555: uint16(17676), + 4556: uint16(6464), + 4557: uint16(5682), + 4558: uint16(8757), + 4559: uint16(10002), + 4560: uint16(7247), + 4561: uint16(9772), + 4562: uint16(10060), + 4563: uint16(17678), + 4564: uint16(14156), + 4565: uint16(17679), + 4566: uint16(17681), + 4567: uint16(11332), + 4568: uint16(17680), + 4569: uint16(17683), + 4570: uint16(17682), + 4571: uint16(11314), + 4572: uint16(17684), + 4573: uint16(10077), + 4574: uint16(17685), + 4575: uint16(17688), + 4576: uint16(17687), + 4577: uint16(17686), + 4578: uint16(17689), + 4579: uint16(5649), + 4580: uint16(8193), + 4581: uint16(5152), + 4582: uint16(17693), + 4583: uint16(17690), + 4584: uint16(17691), + 4585: uint16(17694), + 4586: uint16(17695), + 4587: uint16(17692), + 4588: uint16(4104), + 4589: uint16(4358), + 4590: uint16(17697), + 4591: uint16(17698), + 4592: uint16(17699), + 4593: uint16(11329), + 4594: uint16(7179), + 4595: uint16(17701), + 4596: uint16(17700), + 4597: uint16(7752), + 4598: uint16(17702), + 4599: uint16(17703), + 4600: uint16(17704), + 4601: uint16(4932), + 4602: uint16(4908), + 4603: uint16(17705), + 4604: uint16(17706), + 4605: uint16(10812), + 4606: uint16(11330), + 4607: uint16(11315), + 4608: uint16(11798), + 4609: uint16(6188), + 4610: uint16(17709), + 4611: uint16(6963), + 4612: uint16(17708), + 4613: uint16(17710), + 4614: uint16(6920), + 4615: uint16(8496), + 4616: uint16(17711), + 4617: uint16(6187), + 4618: uint16(11062), + 4619: uint16(17712), + 4620: uint16(17713), + 4621: uint16(17714), + 4622: uint16(17715), + 4623: uint16(17716), + 4624: uint16(6921), + 4625: uint16(11084), + 4626: uint16(17718), + 4627: uint16(8734), + 4628: uint16(17717), + 4629: uint16(17720), + 4630: uint16(17719), + 4631: uint16(17721), + 4632: uint16(7962), + 4633: uint16(17722), + 4634: uint16(17723), + 4635: uint16(10520), + 4636: uint16(17724), + 4637: uint16(8270), + 4638: uint16(17725), + 4639: uint16(17726), + 4640: uint16(11613), + 4641: uint16(17729), + 4642: uint16(17728), + 4643: uint16(17727), + 4644: uint16(8975), + 4645: uint16(17730), + 4646: uint16(7685), + 4647: uint16(17731), + 4648: uint16(17732), + 4649: uint16(11799), + 4650: uint16(17733), + 4651: uint16(17734), + 4652: uint16(17736), + 4653: uint16(17735), + 4654: uint16(9988), + 4655: uint16(9560), + 4656: uint16(11805), + 4657: uint16(9992), + 4658: uint16(17738), + 4659: uint16(7474), + 4660: uint16(10249), + 4661: uint16(17739), + 4662: uint16(17737), + 4663: uint16(4909), + 4664: uint16(5939), + 4665: uint16(6727), + 4666: uint16(10061), + 4667: uint16(5897), + 4668: uint16(10786), + 4669: uint16(17742), + 4670: uint16(17740), + 4671: uint16(6189), + 4672: uint16(6190), + 4673: uint16(3912), + 4674: uint16(6471), + 4675: uint16(9784), + 4676: uint16(3902), + 4677: uint16(17747), + 4678: uint16(8735), + 4679: uint16(9783), + 4680: uint16(8506), + 4681: uint16(17749), + 4682: uint16(17745), + 4683: uint16(17748), + 4684: uint16(17743), + 4685: uint16(17746), + 4686: uint16(10757), + 4687: uint16(5940), + 4688: uint16(3932), + 4689: uint16(17744), + 4690: uint16(17751), + 4691: uint16(17752), + 4692: uint16(9496), + 4693: uint16(5402), + 4694: uint16(17925), + 4695: uint16(9756), + 4696: uint16(6728), + 4697: uint16(5403), + 4698: uint16(7975), + 4699: uint16(11813), + 4700: uint16(11021), + 4701: uint16(17750), + 4702: uint16(7987), + 4703: uint16(5170), + 4704: uint16(17753), + 4705: uint16(17755), + 4706: uint16(17754), + 4707: uint16(17756), + 4708: uint16(8709), + 4709: uint16(9757), + 4710: uint16(8976), + 4711: uint16(17922), + 4712: uint16(17921), + 4713: uint16(17757), + 4714: uint16(7732), + 4715: uint16(10308), + 4716: uint16(17924), + 4717: uint16(17923), + 4718: uint16(6191), + 4719: uint16(11826), + 4720: uint16(17940), + 4721: uint16(17928), + 4722: uint16(17929), + 4723: uint16(6991), + 4724: uint16(17927), + 4725: uint16(6231), + 4726: uint16(17926), + 4727: uint16(17930), + 4728: uint16(8977), + 4729: uint16(10497), + 4730: uint16(8194), + 4731: uint16(8507), + 4732: uint16(17934), + 4733: uint16(17935), + 4734: uint16(17931), + 4735: uint16(17932), + 4736: uint16(17933), + 4737: uint16(6192), + 4738: uint16(17941), + 4739: uint16(17937), + 4740: uint16(10309), + 4741: uint16(10827), + 4742: uint16(10247), + 4743: uint16(17936), + 4744: uint16(17939), + 4745: uint16(17938), + 4746: uint16(10787), + 4747: uint16(17942), + 4748: uint16(17943), + 4749: uint16(8214), + 4750: uint16(17944), + 4751: uint16(17946), + 4752: uint16(17950), + 4753: uint16(17947), + 4754: uint16(17945), + 4755: uint16(9758), + 4756: uint16(17948), + 4757: uint16(17949), + 4758: uint16(4369), + 4759: uint16(17956), + 4760: uint16(17951), + 4761: uint16(17952), + 4762: uint16(17953), + 4763: uint16(8448), + 4764: uint16(17955), + 4765: uint16(17954), + 4766: uint16(17957), + 4767: uint16(17958), + 4768: uint16(17959), + 4769: uint16(7714), + 4770: uint16(4424), + 4771: uint16(17960), + 4772: uint16(11574), + 4773: uint16(6922), + 4774: uint16(7180), + 4775: uint16(6729), + 4776: uint16(8758), + 4777: uint16(17961), + 4778: uint16(17962), + 4779: uint16(4112), + 4780: uint16(17963), + 4781: uint16(17964), + 4782: uint16(17965), + 4783: uint16(17966), + 4784: uint16(17967), + 4785: uint16(5404), + 4786: uint16(14601), + 4787: uint16(17968), + 4788: uint16(8004), + 4789: uint16(17969), + 4790: uint16(6954), + 4791: uint16(17970), + 4792: uint16(12047), + 4793: uint16(17971), + 4794: uint16(10557), + 4795: uint16(4923), + 4796: uint16(8195), + 4797: uint16(7223), + 4798: uint16(10320), + 4799: uint16(7181), + 4800: uint16(17972), + 4801: uint16(6193), + 4802: uint16(17973), + 4803: uint16(10027), + 4804: uint16(17987), + 4805: uint16(17975), + 4806: uint16(8488), + 4807: uint16(9812), + 4808: uint16(5918), + 4809: uint16(17974), + 4810: uint16(8196), + 4811: uint16(17976), + 4812: uint16(9049), + 4813: uint16(17978), + 4814: uint16(17977), + 4815: uint16(17980), + 4816: uint16(17979), + 4817: uint16(17981), + 4818: uint16(17983), + 4819: uint16(17982), + 4820: uint16(4910), + 4821: uint16(17984), + 4822: uint16(17985), + 4823: uint16(17986), + 4824: uint16(6416), + 4825: uint16(11560), + 4826: uint16(17988), + 4827: uint16(7686), + 4828: uint16(4175), + 4829: uint16(17989), + 4830: uint16(17990), + 4831: uint16(17991), + 4832: uint16(3921), + 4833: uint16(17992), + 4834: uint16(17993), + 4835: uint16(10310), + 4836: uint16(6950), + 4837: uint16(17995), + 4838: uint16(4616), + 4839: uint16(3857), + 4840: uint16(17994), + 4841: uint16(17997), + 4842: uint16(9773), + 4843: uint16(7715), + 4844: uint16(4405), + 4845: uint16(10758), + 4846: uint16(5692), + 4847: uint16(5435), + 4848: uint16(17996), + 4849: uint16(4425), + 4850: uint16(4866), + 4851: uint16(4176), + 4852: uint16(18001), + 4853: uint16(11593), + 4854: uint16(8508), + 4855: uint16(10275), + 4856: uint16(18013), + 4857: uint16(4406), + 4858: uint16(18011), + 4859: uint16(18009), + 4860: uint16(18000), + 4861: uint16(17998), + 4862: uint16(17999), + 4863: uint16(6978), + 4864: uint16(5451), + 4865: uint16(8790), + 4866: uint16(9520), + 4867: uint16(4144), + 4868: uint16(18003), + 4869: uint16(18002), + 4870: uint16(18008), + 4871: uint16(18004), + 4872: uint16(18007), + 4873: uint16(11055), + 4874: uint16(18006), + 4875: uint16(4407), + 4876: uint16(4700), + 4877: uint16(18010), + 4878: uint16(18012), + 4879: uint16(5683), + 4880: uint16(18178), + 4881: uint16(18187), + 4882: uint16(18188), + 4883: uint16(3850), + 4884: uint16(18195), + 4885: uint16(3920), + 4886: uint16(18186), + 4887: uint16(18185), + 4888: uint16(18180), + 4889: uint16(18179), + 4890: uint16(18177), + 4891: uint16(18176), + 4892: uint16(8770), + 4893: uint16(8538), + 4894: uint16(18182), + 4895: uint16(18181), + 4896: uint16(18184), + 4897: uint16(8271), + 4898: uint16(5684), + 4899: uint16(4128), + 4900: uint16(18183), + 4901: uint16(6194), + 4902: uint16(8272), + 4903: uint16(18201), + 4904: uint16(18202), + 4905: uint16(4408), + 4906: uint16(4365), + 4907: uint16(18199), + 4908: uint16(18189), + 4909: uint16(18197), + 4910: uint16(18204), + 4911: uint16(18198), + 4912: uint16(18196), + 4913: uint16(18005), + 4914: uint16(18194), + 4915: uint16(18190), + 4916: uint16(4911), + 4917: uint16(18192), + 4918: uint16(18203), + 4919: uint16(18193), + 4920: uint16(18205), + 4921: uint16(18191), + 4922: uint16(9819), + 4923: uint16(11336), + 4924: uint16(18200), + 4925: uint16(18222), + 4926: uint16(18214), + 4927: uint16(7770), + 4928: uint16(5157), + 4929: uint16(5436), + 4930: uint16(18209), + 4931: uint16(4410), + 4932: uint16(7475), + 4933: uint16(18212), + 4934: uint16(6457), + 4935: uint16(9264), + 4936: uint16(18217), + 4937: uint16(10573), + 4938: uint16(18208), + 4939: uint16(4409), + 4940: uint16(5941), + 4941: uint16(10248), + 4942: uint16(18218), + 4943: uint16(18206), + 4944: uint16(18215), + 4945: uint16(18225), + 4946: uint16(18210), + 4947: uint16(18211), + 4948: uint16(9497), + 4949: uint16(18216), + 4950: uint16(18213), + 4951: uint16(10759), + 4952: uint16(18219), + 4953: uint16(3903), + 4954: uint16(18207), + 4955: uint16(18221), + 4956: uint16(18220), + 4957: uint16(9802), + 4958: uint16(18227), + 4959: uint16(18238), + 4960: uint16(4701), + 4961: uint16(18241), + 4962: uint16(18223), + 4963: uint16(18228), + 4964: uint16(11341), + 4965: uint16(18237), + 4966: uint16(11316), + 4967: uint16(11529), + 4968: uint16(8791), + 4969: uint16(4682), + 4970: uint16(10321), + 4971: uint16(18243), + 4972: uint16(9472), + 4973: uint16(3856), + 4974: uint16(18236), + 4975: uint16(18232), + 4976: uint16(8273), + 4977: uint16(18226), + 4978: uint16(18234), + 4979: uint16(18239), + 4980: uint16(9739), + 4981: uint16(3849), + 4982: uint16(18231), + 4983: uint16(18240), + 4984: uint16(10327), + 4985: uint16(18235), + 4986: uint16(18230), + 4987: uint16(7476), + 4988: uint16(7182), + 4989: uint16(6923), + 4990: uint16(11063), + 4991: uint16(10278), + 4992: uint16(18246), + 4993: uint16(18255), + 4994: uint16(18233), + 4995: uint16(4694), + 4996: uint16(7511), + 4997: uint16(18244), + 4998: uint16(18249), + 4999: uint16(8274), + 5000: uint16(18245), + 5001: uint16(18252), + 5002: uint16(8766), + 5003: uint16(18253), + 5004: uint16(11317), + 5005: uint16(18242), + 5006: uint16(4631), + 5007: uint16(18248), + 5008: uint16(18251), + 5009: uint16(11019), + 5010: uint16(18254), + 5011: uint16(18247), + 5012: uint16(18250), + 5013: uint16(10760), + 5014: uint16(11776), + 5015: uint16(18258), + 5016: uint16(18265), + 5017: uint16(18257), + 5018: uint16(6946), + 5019: uint16(18224), + 5020: uint16(10541), + 5021: uint16(11009), + 5022: uint16(18264), + 5023: uint16(18263), + 5024: uint16(18259), + 5025: uint16(18260), + 5026: uint16(4117), + 5027: uint16(18262), + 5028: uint16(18256), + 5029: uint16(9012), + 5030: uint16(18261), + 5031: uint16(3933), + 5032: uint16(8449), + 5033: uint16(10530), + 5034: uint16(18266), + 5035: uint16(18432), + 5036: uint16(10040), + 5037: uint16(18269), + 5038: uint16(7477), + 5039: uint16(6952), + 5040: uint16(18434), + 5041: uint16(5405), + 5042: uint16(18435), + 5043: uint16(10328), + 5044: uint16(18268), + 5045: uint16(18229), + 5046: uint16(18267), + 5047: uint16(11822), + 5048: uint16(9473), + 5049: uint16(10322), + 5050: uint16(18442), + 5051: uint16(18448), + 5052: uint16(18449), + 5053: uint16(18436), + 5054: uint16(9813), + 5055: uint16(18446), + 5056: uint16(18438), + 5057: uint16(18440), + 5058: uint16(18450), + 5059: uint16(18439), + 5060: uint16(18443), + 5061: uint16(4177), + 5062: uint16(9540), + 5063: uint16(18444), + 5064: uint16(18447), + 5065: uint16(18437), + 5066: uint16(8197), + 5067: uint16(18441), + 5068: uint16(6662), + 5069: uint16(7716), + 5070: uint16(5647), + 5071: uint16(11091), + 5072: uint16(11096), + 5073: uint16(7249), + 5074: uint16(18454), + 5075: uint16(18452), + 5076: uint16(11821), + 5077: uint16(18451), + 5078: uint16(11348), + 5079: uint16(18453), + 5080: uint16(18455), + 5081: uint16(18456), + 5082: uint16(18459), + 5083: uint16(18457), + 5084: uint16(9474), + 5085: uint16(18458), + 5086: uint16(10028), + 5087: uint16(18445), + 5088: uint16(7250), + 5089: uint16(18460), + 5090: uint16(18465), + 5091: uint16(8275), + 5092: uint16(18464), + 5093: uint16(18433), + 5094: uint16(18466), + 5095: uint16(8232), + 5096: uint16(18461), + 5097: uint16(18463), + 5098: uint16(18462), + 5099: uint16(15376), + 5100: uint16(15361), + 5101: uint16(18468), + 5102: uint16(18467), + 5103: uint16(11349), + 5104: uint16(16667), + 5105: uint16(18469), + 5106: uint16(18470), + 5107: uint16(18471), + 5108: uint16(5942), + 5109: uint16(5171), + 5110: uint16(18473), + 5111: uint16(12348), + 5112: uint16(5204), + 5113: uint16(11545), + 5114: uint16(5458), + 5115: uint16(18474), + 5116: uint16(18475), + 5117: uint16(8781), + 5118: uint16(18476), + 5119: uint16(9561), + 5120: uint16(3865), + 5121: uint16(4418), + 5122: uint16(18481), + 5123: uint16(18482), + 5124: uint16(18477), + 5125: uint16(6684), + 5126: uint16(18478), + 5127: uint16(9761), + 5128: uint16(18479), + 5129: uint16(18480), + 5130: uint16(18490), + 5131: uint16(18484), + 5132: uint16(18487), + 5133: uint16(18483), + 5134: uint16(18485), + 5135: uint16(18486), + 5136: uint16(6967), + 5137: uint16(18488), + 5138: uint16(8736), + 5139: uint16(5685), + 5140: uint16(4641), + 5141: uint16(18491), + 5142: uint16(4638), + 5143: uint16(18496), + 5144: uint16(18492), + 5145: uint16(18495), + 5146: uint16(10009), + 5147: uint16(18493), + 5148: uint16(18494), + 5149: uint16(10279), + 5150: uint16(10041), + 5151: uint16(18497), + 5152: uint16(8540), + 5153: uint16(18507), + 5154: uint16(18503), + 5155: uint16(4426), + 5156: uint16(18501), + 5157: uint16(10761), + 5158: uint16(18502), + 5159: uint16(18499), + 5160: uint16(18500), + 5161: uint16(18505), + 5162: uint16(18508), + 5163: uint16(18506), + 5164: uint16(18504), + 5165: uint16(18498), + 5166: uint16(8759), + 5167: uint16(18515), + 5168: uint16(11017), + 5169: uint16(18513), + 5170: uint16(18514), + 5171: uint16(18509), + 5172: uint16(18511), + 5173: uint16(18512), + 5174: uint16(18510), + 5175: uint16(8005), + 5176: uint16(11800), + 5177: uint16(18519), + 5178: uint16(18520), + 5179: uint16(18688), + 5180: uint16(7689), + 5181: uint16(18522), + 5182: uint16(18525), + 5183: uint16(18517), + 5184: uint16(18516), + 5185: uint16(18689), + 5186: uint16(4411), + 5187: uint16(18523), + 5188: uint16(18690), + 5189: uint16(18524), + 5190: uint16(18521), + 5191: uint16(8978), + 5192: uint16(18518), + 5193: uint16(9799), + 5194: uint16(18694), + 5195: uint16(11290), + 5196: uint16(18693), + 5197: uint16(18692), + 5198: uint16(18701), + 5199: uint16(18695), + 5200: uint16(18703), + 5201: uint16(11333), + 5202: uint16(18706), + 5203: uint16(18697), + 5204: uint16(18698), + 5205: uint16(18702), + 5206: uint16(18705), + 5207: uint16(18704), + 5208: uint16(18696), + 5209: uint16(18699), + 5210: uint16(18716), + 5211: uint16(18709), + 5212: uint16(18707), + 5213: uint16(18708), + 5214: uint16(18713), + 5215: uint16(18714), + 5216: uint16(4617), + 5217: uint16(5153), + 5218: uint16(18712), + 5219: uint16(18691), + 5220: uint16(18711), + 5221: uint16(18715), + 5222: uint16(18710), + 5223: uint16(18717), + 5224: uint16(18719), + 5225: uint16(18718), + 5226: uint16(18721), + 5227: uint16(18720), + 5228: uint16(18489), + 5229: uint16(18725), + 5230: uint16(18722), + 5231: uint16(18723), + 5232: uint16(18724), + 5233: uint16(18726), + 5234: uint16(5707), + 5235: uint16(18728), + 5236: uint16(18727), + 5237: uint16(7183), + 5238: uint16(6195), + 5239: uint16(15622), + 5240: uint16(18729), + 5241: uint16(7216), + 5242: uint16(4632), + 5243: uint16(18730), + 5244: uint16(4145), + 5245: uint16(7478), + 5246: uint16(18731), + 5247: uint16(6196), + 5248: uint16(18732), + 5249: uint16(3904), + 5250: uint16(10268), + 5251: uint16(18733), + 5252: uint16(7753), + 5253: uint16(18740), + 5254: uint16(18737), + 5255: uint16(8782), + 5256: uint16(18738), + 5257: uint16(18735), + 5258: uint16(5437), + 5259: uint16(18734), + 5260: uint16(18741), + 5261: uint16(5653), + 5262: uint16(8509), + 5263: uint16(18747), + 5264: uint16(18743), + 5265: uint16(8468), + 5266: uint16(18742), + 5267: uint16(18745), + 5268: uint16(18736), + 5269: uint16(18746), + 5270: uint16(18748), + 5271: uint16(10062), + 5272: uint16(18744), + 5273: uint16(18749), + 5274: uint16(18751), + 5275: uint16(5938), + 5276: uint16(18739), + 5277: uint16(3872), + 5278: uint16(18750), + 5279: uint16(6458), + 5280: uint16(11605), + 5281: uint16(18752), + 5282: uint16(18753), + 5283: uint16(8276), + 5284: uint16(11521), + 5285: uint16(18754), + 5286: uint16(11284), + 5287: uint16(18755), + 5288: uint16(18756), + 5289: uint16(10563), + 5290: uint16(18757), + 5291: uint16(6431), + 5292: uint16(11522), + 5293: uint16(18762), + 5294: uint16(18763), + 5295: uint16(7479), + 5296: uint16(18761), + 5297: uint16(11334), + 5298: uint16(18758), + 5299: uint16(18760), + 5300: uint16(7964), + 5301: uint16(7773), + 5302: uint16(18759), + 5303: uint16(18764), + 5304: uint16(10498), + 5305: uint16(18766), + 5306: uint16(18765), + 5307: uint16(4683), + 5308: uint16(10762), + 5309: uint16(18767), + 5310: uint16(18779), + 5311: uint16(18769), + 5312: uint16(18770), + 5313: uint16(18771), + 5314: uint16(18772), + 5315: uint16(18776), + 5316: uint16(18777), + 5317: uint16(18775), + 5318: uint16(18773), + 5319: uint16(18768), + 5320: uint16(18774), + 5321: uint16(18778), + 5322: uint16(20246), + 5323: uint16(4359), + 5324: uint16(18781), + 5325: uint16(5438), + 5326: uint16(18780), + 5327: uint16(18945), + 5328: uint16(18944), + 5329: uint16(18947), + 5330: uint16(18946), + 5331: uint16(18948), + 5332: uint16(7184), + 5333: uint16(18949), + 5334: uint16(18950), + 5335: uint16(18951), + 5336: uint16(7965), + 5337: uint16(11318), + 5338: uint16(18952), + 5339: uint16(10499), + 5340: uint16(9765), + 5341: uint16(18953), + 5342: uint16(18954), + 5343: uint16(5898), + 5344: uint16(5131), + 5345: uint16(18955), + 5346: uint16(6730), + 5347: uint16(9760), + 5348: uint16(18956), + 5349: uint16(4655), + 5350: uint16(18957), + 5351: uint16(18959), + 5352: uint16(11350), + 5353: uint16(18958), + 5354: uint16(7717), + 5355: uint16(18960), + 5356: uint16(18961), + 5357: uint16(18962), + 5358: uint16(4912), + 5359: uint16(18963), + 5360: uint16(18964), + 5361: uint16(18965), + 5362: uint16(18966), + 5363: uint16(4656), + 5364: uint16(18967), + 5365: uint16(18968), + 5366: uint16(18969), + 5367: uint16(4433), + 5368: uint16(7687), + 5369: uint16(18970), + 5370: uint16(18971), + 5371: uint16(18972), + 5372: uint16(5919), + 5373: uint16(9050), + 5374: uint16(18973), + 5375: uint16(5686), + 5376: uint16(7733), + 5377: uint16(18976), + 5378: uint16(9475), + 5379: uint16(18975), + 5380: uint16(5648), + 5381: uint16(18974), + 5382: uint16(8534), + 5383: uint16(5132), + 5384: uint16(18977), + 5385: uint16(18978), + 5386: uint16(7480), + 5387: uint16(5708), + 5388: uint16(18979), + 5389: uint16(10763), + 5390: uint16(7998), + 5391: uint16(5205), + 5392: uint16(11092), + 5393: uint16(8233), + 5394: uint16(18980), + 5395: uint16(7718), + 5396: uint16(8783), + 5397: uint16(7481), + 5398: uint16(18981), + 5399: uint16(18984), + 5400: uint16(18985), + 5401: uint16(6429), + 5402: uint16(8481), + 5403: uint16(18983), + 5404: uint16(7482), + 5405: uint16(10269), + 5406: uint16(18982), + 5407: uint16(6731), + 5408: uint16(4146), + 5409: uint16(18989), + 5410: uint16(5687), + 5411: uint16(6733), + 5412: uint16(6732), + 5413: uint16(11820), + 5414: uint16(18988), + 5415: uint16(18987), + 5416: uint16(8198), + 5417: uint16(5164), + 5418: uint16(11810), + 5419: uint16(4633), + 5420: uint16(7483), + 5421: uint16(18986), + 5422: uint16(18991), + 5423: uint16(18992), + 5424: uint16(18990), + 5425: uint16(5943), + 5426: uint16(11295), + 5427: uint16(6734), + 5428: uint16(9734), + 5429: uint16(18995), + 5430: uint16(7967), + 5431: uint16(8737), + 5432: uint16(11285), + 5433: uint16(18998), + 5434: uint16(5963), + 5435: uint16(7966), + 5436: uint16(18994), + 5437: uint16(18999), + 5438: uint16(5964), + 5439: uint16(18996), + 5440: uint16(18997), + 5441: uint16(18993), + 5442: uint16(8001), + 5443: uint16(9512), + 5444: uint16(8718), + 5445: uint16(4412), + 5446: uint16(10063), + 5447: uint16(5154), + 5448: uint16(8979), + 5449: uint16(19002), + 5450: uint16(19000), + 5451: uint16(8747), + 5452: uint16(7968), + 5453: uint16(4913), + 5454: uint16(19001), + 5455: uint16(7738), + 5456: uint16(11561), + 5457: uint16(11807), + 5458: uint16(19003), + 5459: uint16(19014), + 5460: uint16(8980), + 5461: uint16(19013), + 5462: uint16(19010), + 5463: uint16(19018), + 5464: uint16(19011), + 5465: uint16(19007), + 5466: uint16(9051), + 5467: uint16(19006), + 5468: uint16(19004), + 5469: uint16(11264), + 5470: uint16(6735), + 5471: uint16(19008), + 5472: uint16(19005), + 5473: uint16(19012), + 5474: uint16(7251), + 5475: uint16(5920), + 5476: uint16(8537), + 5477: uint16(10788), + 5478: uint16(4153), + 5479: uint16(3905), + 5480: uint16(9476), + 5481: uint16(19016), + 5482: uint16(19015), + 5483: uint16(9541), + 5484: uint16(19020), + 5485: uint16(19009), + 5486: uint16(19019), + 5487: uint16(19021), + 5488: uint16(5899), + 5489: uint16(19017), + 5490: uint16(6197), + 5491: uint16(6964), + 5492: uint16(19022), + 5493: uint16(11319), + 5494: uint16(19025), + 5495: uint16(19028), + 5496: uint16(19026), + 5497: uint16(10260), + 5498: uint16(19023), + 5499: uint16(5439), + 5500: uint16(19027), + 5501: uint16(19029), + 5502: uint16(19033), + 5503: uint16(19030), + 5504: uint16(19032), + 5505: uint16(19031), + 5506: uint16(19034), + 5507: uint16(6928), + 5508: uint16(19036), + 5509: uint16(19035), + 5510: uint16(10311), + 5511: uint16(19200), + 5512: uint16(5688), + 5513: uint16(19037), + 5514: uint16(19201), + 5515: uint16(19202), + 5516: uint16(5155), + 5517: uint16(17696), + 5518: uint16(7512), + 5519: uint16(19203), + 5520: uint16(5965), + 5521: uint16(19204), + 5522: uint16(19205), + 5523: uint16(6685), + 5524: uint16(14637), + 5525: uint16(19206), + 5526: uint16(19207), + 5527: uint16(7185), + 5528: uint16(19208), + 5529: uint16(19209), + 5530: uint16(19210), + 5531: uint16(19211), + 5532: uint16(19212), + 5533: uint16(8714), + 5534: uint16(19213), + 5535: uint16(19215), + 5536: uint16(19214), + 5537: uint16(9477), + 5538: uint16(19216), + 5539: uint16(10764), + 5540: uint16(19217), + 5541: uint16(19218), + 5542: uint16(19219), + 5543: uint16(19220), + 5544: uint16(9529), + 5545: uint16(7484), + 5546: uint16(19221), + 5547: uint16(6218), + 5548: uint16(12045), + 5549: uint16(19222), + 5550: uint16(19223), + 5551: uint16(10270), + 5552: uint16(19224), + 5553: uint16(19232), + 5554: uint16(19225), + 5555: uint16(19227), + 5556: uint16(19226), + 5557: uint16(19228), + 5558: uint16(10789), + 5559: uint16(19229), + 5560: uint16(19230), + 5561: uint16(19231), + 5562: uint16(19233), + 5563: uint16(4620), + 5564: uint16(9030), + 5565: uint16(10312), + 5566: uint16(6465), + 5567: uint16(6198), + 5568: uint16(10286), + 5569: uint16(4414), + 5570: uint16(10029), + 5571: uint16(19236), + 5572: uint16(4914), + 5573: uint16(7988), + 5574: uint16(19235), + 5575: uint16(19240), + 5576: uint16(8792), + 5577: uint16(11074), + 5578: uint16(19238), + 5579: uint16(19239), + 5580: uint16(5133), + 5581: uint16(19241), + 5582: uint16(9794), + 5583: uint16(8510), + 5584: uint16(10064), + 5585: uint16(9244), + 5586: uint16(19237), + 5587: uint16(10790), + 5588: uint16(4427), + 5589: uint16(19243), + 5590: uint16(11783), + 5591: uint16(8993), + 5592: uint16(11812), + 5593: uint16(6736), + 5594: uint16(19242), + 5595: uint16(8464), + 5596: uint16(19259), + 5597: uint16(8199), + 5598: uint16(9559), + 5599: uint16(10287), + 5600: uint16(19246), + 5601: uint16(6686), + 5602: uint16(6737), + 5603: uint16(7485), + 5604: uint16(9796), + 5605: uint16(5900), + 5606: uint16(19245), + 5607: uint16(19244), + 5608: uint16(10313), + 5609: uint16(6944), + 5610: uint16(9265), + 5611: uint16(19248), + 5612: uint16(19249), + 5613: uint16(6199), + 5614: uint16(19247), + 5615: uint16(19250), + 5616: uint16(19251), + 5617: uint16(19253), + 5618: uint16(8450), + 5619: uint16(19252), + 5620: uint16(4933), + 5621: uint16(19255), + 5622: uint16(19254), + 5623: uint16(19256), + 5624: uint16(19258), + 5625: uint16(19260), + 5626: uint16(19261), + 5627: uint16(7989), + 5628: uint16(6958), + 5629: uint16(19262), + 5630: uint16(4657), + 5631: uint16(19263), + 5632: uint16(8277), + 5633: uint16(19264), + 5634: uint16(19265), + 5635: uint16(10314), + 5636: uint16(5134), + 5637: uint16(19266), + 5638: uint16(8981), + 5639: uint16(4154), + 5640: uint16(19267), + 5641: uint16(6992), + 5642: uint16(7765), + 5643: uint16(8460), + 5644: uint16(19270), + 5645: uint16(19269), + 5646: uint16(19268), + 5647: uint16(19276), + 5648: uint16(19274), + 5649: uint16(19271), + 5650: uint16(19273), + 5651: uint16(19272), + 5652: uint16(19275), + 5653: uint16(5206), + 5654: uint16(19279), + 5655: uint16(7990), + 5656: uint16(19280), + 5657: uint16(5944), + 5658: uint16(19277), + 5659: uint16(19278), + 5660: uint16(11784), + 5661: uint16(8982), + 5662: uint16(8200), + 5663: uint16(19281), + 5664: uint16(19284), + 5665: uint16(19282), + 5666: uint16(19283), + 5667: uint16(11320), + 5668: uint16(9478), + 5669: uint16(19287), + 5670: uint16(19285), + 5671: uint16(19286), + 5672: uint16(19288), + 5673: uint16(19464), + 5674: uint16(19291), + 5675: uint16(19292), + 5676: uint16(19290), + 5677: uint16(19289), + 5678: uint16(9052), + 5679: uint16(19456), + 5680: uint16(19460), + 5681: uint16(19457), + 5682: uint16(19293), + 5683: uint16(19458), + 5684: uint16(19459), + 5685: uint16(19466), + 5686: uint16(19461), + 5687: uint16(7991), + 5688: uint16(19463), + 5689: uint16(19465), + 5690: uint16(19462), + 5691: uint16(19468), + 5692: uint16(7186), + 5693: uint16(19467), + 5694: uint16(19469), + 5695: uint16(19470), + 5696: uint16(19473), + 5697: uint16(19472), + 5698: uint16(19471), + 5699: uint16(19475), + 5700: uint16(19474), + 5701: uint16(11093), + 5702: uint16(19477), + 5703: uint16(19476), + 5704: uint16(19478), + 5705: uint16(19479), + 5706: uint16(19481), + 5707: uint16(19480), + 5708: uint16(7719), + 5709: uint16(19482), + 5710: uint16(5452), + 5711: uint16(19483), + 5712: uint16(19485), + 5713: uint16(19486), + 5714: uint16(19487), + 5715: uint16(19484), + 5716: uint16(19488), + 5717: uint16(6965), + 5718: uint16(19489), + 5719: uint16(5135), + 5720: uint16(5650), + 5721: uint16(5901), + 5722: uint16(19490), + 5723: uint16(9551), + 5724: uint16(9245), + 5725: uint16(19491), + 5726: uint16(19494), + 5727: uint16(6931), + 5728: uint16(19493), + 5729: uint16(19492), + 5730: uint16(5689), + 5731: uint16(19495), + 5732: uint16(4658), + 5733: uint16(19497), + 5734: uint16(6459), + 5735: uint16(19496), + 5736: uint16(19505), + 5737: uint16(19499), + 5738: uint16(19501), + 5739: uint16(10564), + 5740: uint16(19498), + 5741: uint16(19500), + 5742: uint16(19504), + 5743: uint16(19502), + 5744: uint16(5136), + 5745: uint16(19503), + 5746: uint16(19506), + 5747: uint16(9785), + 5748: uint16(11575), + 5749: uint16(7187), + 5750: uint16(19507), + 5751: uint16(11265), + 5752: uint16(19509), + 5753: uint16(19508), + 5754: uint16(19512), + 5755: uint16(11296), + 5756: uint16(19511), + 5757: uint16(4684), + 5758: uint16(19510), + 5759: uint16(19515), + 5760: uint16(19514), + 5761: uint16(19513), + 5762: uint16(9233), + 5763: uint16(19516), + 5764: uint16(19517), + 5765: uint16(19518), + 5766: uint16(6219), + 5767: uint16(5636), + 5768: uint16(19519), + 5769: uint16(19520), + 5770: uint16(19521), + 5771: uint16(7720), + 5772: uint16(19522), + 5773: uint16(6924), + 5774: uint16(19523), + 5775: uint16(19524), + 5776: uint16(12544), + 5777: uint16(12381), + 5778: uint16(19525), + 5779: uint16(17487), + 5780: uint16(19526), + 5781: uint16(8707), + 5782: uint16(7690), + 5783: uint16(9759), + 5784: uint16(19527), + 5785: uint16(10548), + 5786: uint16(9011), + 5787: uint16(6237), + 5788: uint16(8712), + 5789: uint16(4105), + 5790: uint16(10839), + 5791: uint16(7734), + 5792: uint16(5693), + 5793: uint16(5440), + 5794: uint16(10549), + 5795: uint16(19528), + 5796: uint16(19530), + 5797: uint16(19529), + 5798: uint16(4415), + 5799: uint16(9557), + 5800: uint16(19531), + 5801: uint16(9814), + 5802: uint16(9234), + 5803: uint16(19532), + 5804: uint16(7217), + 5805: uint16(19534), + 5806: uint16(11041), + 5807: uint16(19549), + 5808: uint16(19536), + 5809: uint16(19537), + 5810: uint16(9000), + 5811: uint16(8511), + 5812: uint16(8278), + 5813: uint16(9479), + 5814: uint16(19535), + 5815: uint16(5172), + 5816: uint16(19544), + 5817: uint16(19541), + 5818: uint16(19716), + 5819: uint16(9480), + 5820: uint16(8767), + 5821: uint16(19538), + 5822: uint16(9053), + 5823: uint16(9266), + 5824: uint16(19539), + 5825: uint16(19543), + 5826: uint16(7743), + 5827: uint16(9798), + 5828: uint16(9003), + 5829: uint16(7969), + 5830: uint16(19542), + 5831: uint16(8461), + 5832: uint16(8451), + 5833: uint16(19540), + 5834: uint16(3848), + 5835: uint16(11777), + 5836: uint16(19545), + 5837: uint16(8512), + 5838: uint16(7188), + 5839: uint16(7721), + 5840: uint16(19547), + 5841: uint16(19546), + 5842: uint16(3918), + 5843: uint16(19548), + 5844: uint16(10254), + 5845: uint16(19718), + 5846: uint16(9530), + 5847: uint16(7754), + 5848: uint16(8760), + 5849: uint16(5463), + 5850: uint16(19717), + 5851: uint16(11286), + 5852: uint16(4126), + 5853: uint16(10550), + 5854: uint16(4416), + 5855: uint16(19712), + 5856: uint16(19713), + 5857: uint16(19714), + 5858: uint16(19715), + 5859: uint16(9498), + 5860: uint16(8706), + 5861: uint16(3906), + 5862: uint16(19719), + 5863: uint16(19720), + 5864: uint16(21250), + 5865: uint16(8476), + 5866: uint16(19721), + 5867: uint16(4178), + 5868: uint16(8235), + 5869: uint16(5902), + 5870: uint16(11321), + 5871: uint16(19722), + 5872: uint16(9227), + 5873: uint16(8279), + 5874: uint16(6966), + 5875: uint16(19723), + 5876: uint16(19726), + 5877: uint16(7236), + 5878: uint16(19724), + 5879: uint16(8202), + 5880: uint16(8201), + 5881: uint16(3907), + 5882: uint16(11562), + 5883: uint16(19728), + 5884: uint16(10065), + 5885: uint16(19730), + 5886: uint16(19729), + 5887: uint16(19727), + 5888: uint16(16963), + 5889: uint16(4915), + 5890: uint16(19533), + 5891: uint16(19732), + 5892: uint16(19731), + 5893: uint16(19733), + 5894: uint16(11287), + 5895: uint16(9536), + 5896: uint16(10765), + 5897: uint16(19734), + 5898: uint16(6968), + 5899: uint16(19735), + 5900: uint16(19736), + 5901: uint16(19737), + 5902: uint16(9216), + 5903: uint16(3913), + 5904: uint16(6200), + 5905: uint16(11801), + 5906: uint16(19741), + 5907: uint16(5651), + 5908: uint16(19738), + 5909: uint16(19739), + 5910: uint16(10323), + 5911: uint16(4659), + 5912: uint16(11288), + 5913: uint16(5406), + 5914: uint16(9267), + 5915: uint16(19742), + 5916: uint16(19743), + 5917: uint16(19744), + 5918: uint16(9217), + 5919: uint16(19746), + 5920: uint16(19745), + 5921: uint16(9522), + 5922: uint16(19747), + 5923: uint16(7189), + 5924: uint16(6975), + 5925: uint16(9786), + 5926: uint16(8784), + 5927: uint16(6993), + 5928: uint16(7755), + 5929: uint16(19748), + 5930: uint16(19749), + 5931: uint16(7740), + 5932: uint16(19750), + 5933: uint16(19751), + 5934: uint16(19752), + 5935: uint16(11342), + 5936: uint16(7190), + 5937: uint16(19754), + 5938: uint16(19753), + 5939: uint16(6201), + 5940: uint16(6226), + 5941: uint16(6687), + 5942: uint16(19757), + 5943: uint16(7237), + 5944: uint16(19756), + 5945: uint16(19755), + 5946: uint16(8520), + 5947: uint16(5966), + 5948: uint16(7970), + 5949: uint16(9999), + 5950: uint16(7192), + 5951: uint16(19758), + 5952: uint16(7486), + 5953: uint16(19761), + 5954: uint16(19759), + 5955: uint16(19760), + 5956: uint16(19763), + 5957: uint16(19762), + 5958: uint16(7513), + 5959: uint16(19764), + 5960: uint16(19765), + 5961: uint16(19766), + 5962: uint16(10031), + 5963: uint16(6450), + 5964: uint16(6976), + 5965: uint16(19767), + 5966: uint16(19768), + 5967: uint16(11523), + 5968: uint16(7204), + 5969: uint16(11085), + 5970: uint16(11563), + 5971: uint16(19769), + 5972: uint16(5441), + 5973: uint16(19770), + 5974: uint16(9218), + 5975: uint16(19773), + 5976: uint16(4695), + 5977: uint16(7722), + 5978: uint16(19771), + 5979: uint16(19772), + 5980: uint16(9023), + 5981: uint16(10804), + 5982: uint16(5467), + 5983: uint16(19775), + 5984: uint16(19776), + 5985: uint16(19774), + 5986: uint16(19778), + 5987: uint16(9534), + 5988: uint16(4642), + 5989: uint16(19782), + 5990: uint16(19779), + 5991: uint16(19781), + 5992: uint16(19777), + 5993: uint16(20014), + 5994: uint16(19780), + 5995: uint16(11594), + 5996: uint16(5945), + 5997: uint16(19790), + 5998: uint16(9235), + 5999: uint16(19785), + 6000: uint16(19788), + 6001: uint16(19786), + 6002: uint16(19791), + 6003: uint16(19792), + 6004: uint16(19784), + 6005: uint16(19797), + 6006: uint16(4179), + 6007: uint16(19783), + 6008: uint16(9996), + 6009: uint16(19787), + 6010: uint16(7487), + 6011: uint16(6202), + 6012: uint16(10791), + 6013: uint16(5443), + 6014: uint16(7205), + 6015: uint16(9499), + 6016: uint16(8204), + 6017: uint16(19795), + 6018: uint16(19789), + 6019: uint16(19794), + 6020: uint16(11042), + 6021: uint16(8983), + 6022: uint16(19796), + 6023: uint16(19793), + 6024: uint16(8203), + 6025: uint16(19800), + 6026: uint16(19799), + 6027: uint16(19798), + 6028: uint16(10766), + 6029: uint16(7258), + 6030: uint16(19801), + 6031: uint16(10558), + 6032: uint16(4147), + 6033: uint16(10277), + 6034: uint16(8785), + 6035: uint16(5207), + 6036: uint16(19803), + 6037: uint16(6204), + 6038: uint16(6667), + 6039: uint16(19802), + 6040: uint16(7756), + 6041: uint16(7757), + 6042: uint16(19968), + 6043: uint16(19970), + 6044: uint16(7514), + 6045: uint16(19969), + 6046: uint16(19971), + 6047: uint16(5426), + 6048: uint16(10276), + 6049: uint16(6977), + 6050: uint16(11778), + 6051: uint16(19805), + 6052: uint16(6487), + 6053: uint16(11806), + 6054: uint16(19973), + 6055: uint16(19972), + 6056: uint16(19974), + 6057: uint16(19804), + 6058: uint16(9544), + 6059: uint16(9268), + 6060: uint16(9014), + 6061: uint16(19979), + 6062: uint16(8738), + 6063: uint16(19975), + 6064: uint16(19976), + 6065: uint16(5644), + 6066: uint16(19978), + 6067: uint16(5903), + 6068: uint16(19977), + 6069: uint16(7488), + 6070: uint16(4696), + 6071: uint16(19983), + 6072: uint16(6430), + 6073: uint16(8280), + 6074: uint16(9001), + 6075: uint16(4634), + 6076: uint16(19981), + 6077: uint16(19982), + 6078: uint16(8994), + 6079: uint16(19980), + 6080: uint16(19984), + 6081: uint16(19990), + 6082: uint16(19993), + 6083: uint16(19992), + 6084: uint16(9228), + 6085: uint16(19985), + 6086: uint16(19986), + 6087: uint16(19989), + 6088: uint16(19991), + 6089: uint16(5407), + 6090: uint16(19994), + 6091: uint16(19988), + 6092: uint16(19987), + 6093: uint16(19998), + 6094: uint16(19999), + 6095: uint16(20000), + 6096: uint16(19997), + 6097: uint16(19996), + 6098: uint16(7489), + 6099: uint16(9481), + 6100: uint16(19995), + 6101: uint16(20004), + 6102: uint16(20002), + 6103: uint16(20003), + 6104: uint16(20001), + 6105: uint16(8535), + 6106: uint16(20005), + 6107: uint16(20006), + 6108: uint16(20008), + 6109: uint16(4916), + 6110: uint16(20007), + 6111: uint16(11097), + 6112: uint16(20019), + 6113: uint16(20009), + 6114: uint16(20012), + 6115: uint16(20010), + 6116: uint16(20011), + 6117: uint16(20013), + 6118: uint16(20015), + 6119: uint16(20016), + 6120: uint16(20017), + 6121: uint16(20020), + 6122: uint16(20018), + 6123: uint16(20021), + 6124: uint16(20023), + 6125: uint16(20022), + 6126: uint16(8984), + 6127: uint16(11078), + 6128: uint16(20024), + 6129: uint16(8205), + 6130: uint16(20025), + 6131: uint16(10531), + 6132: uint16(20026), + 6133: uint16(4618), + 6134: uint16(4123), + 6135: uint16(4918), + 6136: uint16(4917), + 6137: uint16(20027), + 6138: uint16(20028), + 6139: uint16(20029), + 6140: uint16(20030), + 6141: uint16(20031), + 6142: uint16(4919), + 6143: uint16(4660), + 6144: uint16(6205), + 6145: uint16(10005), + 6146: uint16(20033), + 6147: uint16(20032), + 6148: uint16(20034), + 6149: uint16(4155), + 6150: uint16(20037), + 6151: uint16(20036), + 6152: uint16(20035), + 6153: uint16(20038), + 6154: uint16(20041), + 6155: uint16(3878), + 6156: uint16(20039), + 6157: uint16(20043), + 6158: uint16(20042), + 6159: uint16(20045), + 6160: uint16(20044), + 6161: uint16(20046), + 6162: uint16(9485), + 6163: uint16(20047), + 6164: uint16(20048), + 6165: uint16(20050), + 6166: uint16(20049), + 6167: uint16(10315), + 6168: uint16(20051), + 6169: uint16(20052), + 6170: uint16(6468), + 6171: uint16(20053), + 6172: uint16(20054), + 6173: uint16(10792), + 6174: uint16(8234), + 6175: uint16(3843), + 6176: uint16(8490), + 6177: uint16(20055), + 6178: uint16(10316), + 6179: uint16(20058), + 6180: uint16(20056), + 6181: uint16(6206), + 6182: uint16(20057), + 6183: uint16(5921), + 6184: uint16(10532), + 6185: uint16(20060), + 6186: uint16(20224), + 6187: uint16(20061), + 6188: uint16(20225), + 6189: uint16(4096), + 6190: uint16(7735), + 6191: uint16(7259), + 6192: uint16(4920), + 6193: uint16(20226), + 6194: uint16(9797), + 6195: uint16(20228), + 6196: uint16(4097), + 6197: uint16(20227), + 6198: uint16(8995), + 6199: uint16(11564), + 6200: uint16(9482), + 6201: uint16(20059), + 6202: uint16(11525), + 6203: uint16(5904), + 6204: uint16(11322), + 6205: uint16(5464), + 6206: uint16(11539), + 6207: uint16(5639), + 6208: uint16(8513), + 6209: uint16(17920), + 6210: uint16(20229), + 6211: uint16(4619), + 6212: uint16(7758), + 6213: uint16(4661), + 6214: uint16(20231), + 6215: uint16(20232), + 6216: uint16(20230), + 6217: uint16(5699), + 6218: uint16(6460), + 6219: uint16(7490), + 6220: uint16(4098), + 6221: uint16(11576), + 6222: uint16(20234), + 6223: uint16(19725), + 6224: uint16(20233), + 6225: uint16(20237), + 6226: uint16(20235), + 6227: uint16(20236), + 6228: uint16(20238), + 6229: uint16(20239), + 6230: uint16(11595), + 6231: uint16(20240), + 6232: uint16(20241), + 6233: uint16(7976), + 6234: uint16(10010), + 6235: uint16(7772), + 6236: uint16(4934), + 6237: uint16(11289), + 6238: uint16(4428), + 6239: uint16(7191), + 6240: uint16(5946), + 6241: uint16(20244), + 6242: uint16(20243), + 6243: uint16(6738), + 6244: uint16(20245), + 6245: uint16(20242), + 6246: uint16(6663), + 6247: uint16(20249), + 6248: uint16(18700), + 6249: uint16(12597), + 6250: uint16(7766), + 6251: uint16(20247), + 6252: uint16(11524), + 6253: uint16(9552), + 6254: uint16(4106), + 6255: uint16(8002), + 6256: uint16(6933), + 6257: uint16(10518), + 6258: uint16(4127), + 6259: uint16(11596), + 6260: uint16(11338), + 6261: uint16(20250), + 6262: uint16(9252), + 6263: uint16(7002), + 6264: uint16(20251), + 6265: uint16(20252), + 6266: uint16(7723), + 6267: uint16(20253), + 6268: uint16(11597), + 6269: uint16(20248), + 6270: uint16(20255), + 6271: uint16(20257), + 6272: uint16(20256), + 6273: uint16(20254), + 6274: uint16(20258), + 6275: uint16(20259), + 6276: uint16(8281), + 6277: uint16(4417), + 6278: uint16(20260), + 6279: uint16(11031), + 6280: uint16(20261), + 6281: uint16(20262), + 6282: uint16(11785), + 6283: uint16(14864), + 6284: uint16(20263), + 6285: uint16(20264), + 6286: uint16(20265), + 6287: uint16(20269), + 6288: uint16(20266), + 6289: uint16(20267), + 6290: uint16(20268), + 6291: uint16(20270), + 6292: uint16(7971), + 6293: uint16(11094), + 6294: uint16(7972), + 6295: uint16(20271), + 6296: uint16(10066), + 6297: uint16(20272), + 6298: uint16(21042), + 6299: uint16(11051), + 6300: uint16(20273), + 6301: uint16(20274), + 6302: uint16(20275), + 6303: uint16(4662), + 6304: uint16(20277), + 6305: uint16(7736), + 6306: uint16(20278), + 6307: uint16(5635), + 6308: uint16(20279), + 6309: uint16(20283), + 6310: uint16(20281), + 6311: uint16(20282), + 6312: uint16(4690), + 6313: uint16(20280), + 6314: uint16(20284), + 6315: uint16(20285), + 6316: uint16(3879), + 6317: uint16(20286), + 6318: uint16(20287), + 6319: uint16(7491), + 6320: uint16(20288), + 6321: uint16(5158), + 6322: uint16(20291), + 6323: uint16(20290), + 6324: uint16(20289), + 6325: uint16(19024), + 6326: uint16(10555), + 6327: uint16(20292), + 6328: uint16(20293), + 6329: uint16(20294), + 6330: uint16(20295), + 6331: uint16(20296), + 6332: uint16(20297), + 6333: uint16(4921), + 6334: uint16(20298), + 6335: uint16(20299), + 6336: uint16(9730), + 6337: uint16(20301), + 6338: uint16(4378), + 6339: uint16(20304), + 6340: uint16(20303), + 6341: uint16(4099), + 6342: uint16(5408), + 6343: uint16(10534), + 6344: uint16(8985), + 6345: uint16(6401), + 6346: uint16(6207), + 6347: uint16(7238), + 6348: uint16(7739), + 6349: uint16(20306), + 6350: uint16(20305), + 6351: uint16(11297), + 6352: uint16(4935), + 6353: uint16(10033), + 6354: uint16(9531), + 6355: uint16(7771), + 6356: uint16(11565), + 6357: uint16(5690), + 6358: uint16(20309), + 6359: uint16(20308), + 6360: uint16(10794), + 6361: uint16(9483), + 6362: uint16(4143), + 6363: uint16(20310), + 6364: uint16(20307), + 6365: uint16(10288), + 6366: uint16(11337), + 6367: uint16(20311), + 6368: uint16(20312), + 6369: uint16(20314), + 6370: uint16(8521), + 6371: uint16(4666), + 6372: uint16(4667), + 6373: uint16(20313), + 6374: uint16(4936), + 6375: uint16(5905), + 6376: uint16(4937), + 6377: uint16(9246), + 6378: uint16(11583), + 6379: uint16(5947), + 6380: uint16(20315), + 6381: uint16(20316), + 6382: uint16(20317), + 6383: uint16(20480), + 6384: uint16(20482), + 6385: uint16(20481), + 6386: uint16(10326), + 6387: uint16(20483), + 6388: uint16(20484), + 6389: uint16(20485), + 6390: uint16(20486), + 6391: uint16(20488), + 6392: uint16(20487), + 6393: uint16(20489), + 6394: uint16(10067), + 6395: uint16(17707), + 6396: uint16(7688), + 6397: uint16(5137), + 6398: uint16(20490), + 6399: uint16(20491), + 6400: uint16(12555), + 6401: uint16(15386), + 6402: uint16(10034), + 6403: uint16(3930), + 6404: uint16(3866), + 6405: uint16(6739), + 6406: uint16(10767), + 6407: uint16(7517), + 6408: uint16(20492), + 6409: uint16(11070), + 6410: uint16(20493), + 6411: uint16(11323), + 6412: uint16(4129), + 6413: uint16(6688), + 6414: uint16(20494), + 6415: uint16(4429), + 6416: uint16(20495), + 6417: uint16(20496), + 6418: uint16(20498), + 6419: uint16(20499), + 6420: uint16(20501), + 6421: uint16(20497), + 6422: uint16(20500), + 6423: uint16(4922), + 6424: uint16(20502), + 6425: uint16(20503), + 6426: uint16(20504), + 6427: uint16(20505), + 6428: uint16(20506), + 6429: uint16(20508), + 6430: uint16(20507), + 6431: uint16(20510), + 6432: uint16(20513), + 6433: uint16(20509), + 6434: uint16(20511), + 6435: uint16(20512), + 6436: uint16(20514), + 6437: uint16(5409), + 6438: uint16(6994), + 6439: uint16(20515), + 6440: uint16(20516), + 6441: uint16(6208), + 6442: uint16(20517), + 6443: uint16(4637), + 6444: uint16(9774), + 6445: uint16(20518), + 6446: uint16(20519), + 6447: uint16(8761), + 6448: uint16(9546), + 6449: uint16(20520), + 6450: uint16(9820), + 6451: uint16(8491), + 6452: uint16(4151), + 6453: uint16(5453), + 6454: uint16(5454), + 6455: uint16(8786), + 6456: uint16(20525), + 6457: uint16(5455), + 6458: uint16(4430), + 6459: uint16(20524), + 6460: uint16(20522), + 6461: uint16(20523), + 6462: uint16(20521), + 6463: uint16(20535), + 6464: uint16(20526), + 6465: uint16(20527), + 6466: uint16(20528), + 6467: uint16(20529), + 6468: uint16(20531), + 6469: uint16(20530), + 6470: uint16(7224), + 6471: uint16(20532), + 6472: uint16(20534), + 6473: uint16(5138), + 6474: uint16(20533), + 6475: uint16(8282), + 6476: uint16(5906), + 6477: uint16(20536), + 6478: uint16(8492), + 6479: uint16(20537), + 6480: uint16(9484), + 6481: uint16(20538), + 6482: uint16(20543), + 6483: uint16(20541), + 6484: uint16(20540), + 6485: uint16(20542), + 6486: uint16(20539), + 6487: uint16(20545), + 6488: uint16(20544), + 6489: uint16(20547), + 6490: uint16(5410), + 6491: uint16(20546), + 6492: uint16(20548), + 6493: uint16(20549), + 6494: uint16(20551), + 6495: uint16(20550), + 6496: uint16(20552), + 6497: uint16(20554), + 6498: uint16(20553), + 6499: uint16(6235), + 6500: uint16(20555), + 6501: uint16(20556), + 6502: uint16(4635), + 6503: uint16(20557), + 6504: uint16(20558), + 6505: uint16(7760), + 6506: uint16(20559), + 6507: uint16(20560), + 6508: uint16(20561), + 6509: uint16(20562), + 6510: uint16(6209), + 6511: uint16(20563), + 6512: uint16(20564), + 6513: uint16(20565), + 6514: uint16(20566), + 6515: uint16(20567), + 6516: uint16(10000), + 6517: uint16(20569), + 6518: uint16(10245), + 6519: uint16(20570), + 6520: uint16(20568), + 6521: uint16(20572), + 6522: uint16(20571), + 6523: uint16(20573), + 6524: uint16(20736), + 6525: uint16(20737), + 6526: uint16(20738), + 6527: uint16(20739), + 6528: uint16(20740), + 6529: uint16(20741), + 6530: uint16(20742), + 6531: uint16(20743), + 6532: uint16(20744), + 6533: uint16(20745), + 6534: uint16(20746), + 6535: uint16(20747), + 6536: uint16(20748), + 6537: uint16(20749), + 6538: uint16(15380), + 6539: uint16(20750), + 6540: uint16(17239), + 6541: uint16(5139), + 6542: uint16(4608), + 6543: uint16(6417), + 6544: uint16(20752), + 6545: uint16(20751), + 6546: uint16(11012), + 6547: uint16(20754), + 6548: uint16(20755), + 6549: uint16(20753), + 6550: uint16(20756), + 6551: uint16(10817), + 6552: uint16(20757), + 6553: uint16(5210), + 6554: uint16(11780), + 6555: uint16(20758), + 6556: uint16(20760), + 6557: uint16(3869), + 6558: uint16(20761), + 6559: uint16(10506), + 6560: uint16(20759), + 6561: uint16(20762), + 6562: uint16(20763), + 6563: uint16(20764), + 6564: uint16(20765), + 6565: uint16(20766), + 6566: uint16(10829), + 6567: uint16(6668), + 6568: uint16(6489), + 6569: uint16(8206), + 6570: uint16(20767), + 6571: uint16(20770), + 6572: uint16(20768), + 6573: uint16(20771), + 6574: uint16(5968), + 6575: uint16(20769), + 6576: uint16(20772), + 6577: uint16(20773), + 6578: uint16(20774), + 6579: uint16(20778), + 6580: uint16(6665), + 6581: uint16(8515), + 6582: uint16(20779), + 6583: uint16(20776), + 6584: uint16(20775), + 6585: uint16(20777), + 6586: uint16(5694), + 6587: uint16(20783), + 6588: uint16(20782), + 6589: uint16(20781), + 6590: uint16(3858), + 6591: uint16(20793), + 6592: uint16(20789), + 6593: uint16(20790), + 6594: uint16(20786), + 6595: uint16(20792), + 6596: uint16(20788), + 6597: uint16(4673), + 6598: uint16(11819), + 6599: uint16(20791), + 6600: uint16(20787), + 6601: uint16(20785), + 6602: uint16(20784), + 6603: uint16(20795), + 6604: uint16(20798), + 6605: uint16(20797), + 6606: uint16(20796), + 6607: uint16(10280), + 6608: uint16(20794), + 6609: uint16(3922), + 6610: uint16(20799), + 6611: uint16(20801), + 6612: uint16(4686), + 6613: uint16(20780), + 6614: uint16(4118), + 6615: uint16(20803), + 6616: uint16(20802), + 6617: uint16(20800), + 6618: uint16(8716), + 6619: uint16(10831), + 6620: uint16(11577), + 6621: uint16(20804), + 6622: uint16(20805), + 6623: uint16(20806), + 6624: uint16(20807), + 6625: uint16(20808), + 6626: uint16(8986), + 6627: uint16(20809), + 6628: uint16(10006), + 6629: uint16(20814), + 6630: uint16(20810), + 6631: uint16(20811), + 6632: uint16(10768), + 6633: uint16(11043), + 6634: uint16(9519), + 6635: uint16(20815), + 6636: uint16(20816), + 6637: uint16(9501), + 6638: uint16(20813), + 6639: uint16(20812), + 6640: uint16(4361), + 6641: uint16(20824), + 6642: uint16(20823), + 6643: uint16(4180), + 6644: uint16(20821), + 6645: uint16(20820), + 6646: uint16(20818), + 6647: uint16(4698), + 6648: uint16(20817), + 6649: uint16(6929), + 6650: uint16(4360), + 6651: uint16(6210), + 6652: uint16(20827), + 6653: uint16(20826), + 6654: uint16(20825), + 6655: uint16(20822), + 6656: uint16(20828), + 6657: uint16(20829), + 6658: uint16(20996), + 6659: uint16(20995), + 6660: uint16(20997), + 6661: uint16(4108), + 6662: uint16(20992), + 6663: uint16(20993), + 6664: uint16(6227), + 6665: uint16(11032), + 6666: uint16(20994), + 6667: uint16(10769), + 6668: uint16(21002), + 6669: uint16(20998), + 6670: uint16(21003), + 6671: uint16(21000), + 6672: uint16(20999), + 6673: uint16(5691), + 6674: uint16(21004), + 6675: uint16(21005), + 6676: uint16(21006), + 6677: uint16(21001), + 6678: uint16(20819), + 6679: uint16(21007), + 6680: uint16(9024), + 6681: uint16(21011), + 6682: uint16(21012), + 6683: uint16(21010), + 6684: uint16(21009), + 6685: uint16(21015), + 6686: uint16(21008), + 6687: uint16(21013), + 6688: uint16(21014), + 6689: uint16(21017), + 6690: uint16(21016), + 6691: uint16(21019), + 6692: uint16(21020), + 6693: uint16(21021), + 6694: uint16(11816), + 6695: uint16(21018), + 6696: uint16(8522), + 6697: uint16(6476), + 6698: uint16(21022), + 6699: uint16(21023), + 6700: uint16(21024), + 6701: uint16(21025), + 6702: uint16(21026), + 6703: uint16(5907), + 6704: uint16(21027), + 6705: uint16(21028), + 6706: uint16(6926), + 6707: uint16(21029), + 6708: uint16(21030), + 6709: uint16(21031), + 6710: uint16(21032), + 6711: uint16(21035), + 6712: uint16(21033), + 6713: uint16(11803), + 6714: uint16(21034), + 6715: uint16(11598), + 6716: uint16(21036), + 6717: uint16(11578), + 6718: uint16(21037), + 6719: uint16(9821), + 6720: uint16(21038), + 6721: uint16(21040), + 6722: uint16(21041), + 6723: uint16(21039), + 6724: uint16(6220), + 6725: uint16(11052), + 6726: uint16(10818), + 6727: uint16(13654), + 6728: uint16(15423), + 6729: uint16(10842), + 6730: uint16(4362), + 6731: uint16(21043), + 6732: uint16(5167), + 6733: uint16(21044), + 6734: uint16(21045), + 6735: uint16(21046), + 6736: uint16(6228), + 6737: uint16(21047), + 6738: uint16(16179), + 6739: uint16(11066), + 6740: uint16(8514), + 6741: uint16(21048), + 6742: uint16(21050), + 6743: uint16(21049), + 6744: uint16(21051), + 6745: uint16(21052), + 6746: uint16(21053), + 6747: uint16(21054), + 6748: uint16(21055), + 6749: uint16(21056), + 6750: uint16(21057), + 6751: uint16(21058), + 6752: uint16(21059), + 6753: uint16(21060), + 6754: uint16(21061), + 6755: uint16(21062), + 6756: uint16(21063), + 6757: uint16(9219), + 6758: uint16(5948), + 6759: uint16(21065), + 6760: uint16(8236), + 6761: uint16(21066), + 6762: uint16(21067), + 6763: uint16(10240), + 6764: uint16(21068), + 6765: uint16(21069), + 6766: uint16(16918), + 6767: uint16(19257), + 6768: uint16(20300), + 6769: uint16(21070), + 6770: uint16(21071), + 6771: uint16(21073), + 6772: uint16(21074), + 6773: uint16(21075), + 6774: uint16(11599), + 6775: uint16(21072), + 6776: uint16(21076), + 6777: uint16(21077), + 6778: uint16(21079), + 6779: uint16(21078), + 6780: uint16(21081), + 6781: uint16(21082), + 6782: uint16(21080), + 6783: uint16(11541), + 6784: uint16(21083), + 6785: uint16(21084), + 6786: uint16(16947), + 6787: uint16(21085), + 6788: uint16(9), + 6789: uint16(83), + 6790: uint16(79), + 6791: uint16(82), + 6792: uint16(84), + 6793: uint16(41), + 6794: uint16(42), + 6795: uint16(85), + 6796: uint16(59), + 6797: uint16(3), + 6798: uint16(4), + 6799: uint16(30), + 6800: uint16(527), + 6801: uint16(528), + 6802: uint16(529), + 6803: uint16(530), + 6804: uint16(531), + 6805: uint16(532), + 6806: uint16(533), + 6807: uint16(534), + 6808: uint16(535), + 6809: uint16(536), + 6810: uint16(6), + 6811: uint16(7), + 6812: uint16(66), + 6813: uint16(64), + 6814: uint16(67), + 6815: uint16(8), + 6816: uint16(86), + 6817: uint16(544), + 6818: uint16(545), + 6819: uint16(546), + 6820: uint16(547), + 6821: uint16(548), + 6822: uint16(549), + 6823: uint16(550), + 6824: uint16(551), + 6825: uint16(552), + 6826: uint16(553), + 6827: uint16(554), + 6828: uint16(555), + 6829: uint16(556), + 6830: uint16(557), + 6831: uint16(558), + 6832: uint16(559), + 6833: uint16(560), + 6834: uint16(561), + 6835: uint16(562), + 6836: uint16(563), + 6837: uint16(564), + 6838: uint16(565), + 6839: uint16(566), + 6840: uint16(567), + 6841: uint16(568), + 6842: uint16(569), + 6843: uint16(45), + 6844: uint16(46), + 6845: uint16(15), + 6846: uint16(17), + 6847: uint16(13), + 6848: uint16(576), + 6849: uint16(577), + 6850: uint16(578), + 6851: uint16(579), + 6852: uint16(580), + 6853: uint16(581), + 6854: uint16(582), + 6855: uint16(583), + 6856: uint16(584), + 6857: uint16(585), + 6858: uint16(586), + 6859: uint16(587), + 6860: uint16(588), + 6861: uint16(589), + 6862: uint16(590), + 6863: uint16(591), + 6864: uint16(592), + 6865: uint16(593), + 6866: uint16(594), + 6867: uint16(595), + 6868: uint16(596), + 6869: uint16(597), + 6870: uint16(598), + 6871: uint16(599), + 6872: uint16(600), + 6873: uint16(601), + 6874: uint16(47), + 6875: uint16(34), + 6876: uint16(48), + 6877: uint16(16), + 6878: uint16(78), +} + +func _fuzzycmp(tls *TLS, a uintptr, b uintptr) (r int32) { + for { + if !(*(*uint8)(unsafe.Pointer(a)) != 0 && *(*uint8)(unsafe.Pointer(b)) != 0) { + break + } + for *(*uint8)(unsafe.Pointer(a)) != 0 && uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32)-uint32('a') > uint32(26) && uint32(int32(*(*uint8)(unsafe.Pointer(a)))-int32('0')) > uint32(10) { + a++ + } + if uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32) != uint32(*(*uint8)(unsafe.Pointer(b))) { + return int32(1) + } + goto _1 + _1: + ; + a++ + b++ + } + return BoolInt32(int32(*(*uint8)(unsafe.Pointer(a))) != int32(*(*uint8)(unsafe.Pointer(b)))) +} + +func _find_charmap(tls *TLS, name uintptr) (r Tsize_t) { + var s uintptr + _ = s + if !(*(*int8)(unsafe.Pointer(name)) != 0) { + name = uintptr(unsafe.Pointer(&_charmaps)) + } /* "utf8" */ + s = uintptr(unsafe.Pointer(&_charmaps)) + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if !(_fuzzycmp(tls, name, s) != 0) { + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s += uintptr(Xstrlen(tls, s) + uint32(1)) + } + return uint32(int32(s+uintptr(1)) - t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_charmaps)))) + } + s += uintptr(Xstrlen(tls, s) + uint32(1)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + if int32(*(*uint8)(unsafe.Pointer(s + 1))) > int32(0200) { + s += uintptr(2) + } else { + s += uintptr(uint32(2) + (uint32(64)-uint32(*(*uint8)(unsafe.Pointer(s + 1))))*uint32(5)) + } + } + goto _1 + _1: + } + return uint32(-Int32FromInt32(1)) +} + +type Tstateful_cd = struct { + Fbase_cd Ticonv_t + Fstate uint32 +} + +func _combine_to_from(tls *TLS, t Tsize_t, f Tsize_t) (r Ticonv_t) { + return uintptr(f<> int32(16) +} + +func _extract_to(tls *TLS, cd Ticonv_t) (r Tsize_t) { + return uint32(cd) >> int32(1) & uint32(0x7fff) +} + +func Xiconv_open(tls *TLS, to uintptr, from uintptr) (r Ticonv_t) { + if __ccgo_strace { + trc("tls=%v to=%v from=%v, (%v:)", tls, to, from, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cd Ticonv_t + var f, t, v1, v2 Tsize_t + var scd uintptr + var v3 bool + _, _, _, _, _, _, _ = cd, f, scd, t, v1, v2, v3 + v1 = _find_charmap(tls, to) + t = v1 + if v3 = v1 == uint32(-Int32FromInt32(1)); !v3 { + v2 = _find_charmap(tls, from) + f = v2 + } + if v3 || v2 == uint32(-Int32FromInt32(1)) || int32(_charmaps[t]) >= int32(0330) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + cd = _combine_to_from(tls, t, f) + switch int32(_charmaps[f]) { + case int32(UTF_16): + fallthrough + case int32(UTF_32): + fallthrough + case int32(UCS2): + fallthrough + case int32(ISO2022_JP): + scd = Xmalloc(tls, uint32(8)) + if !(scd != 0) { + return uintptr(-Int32FromInt32(1)) + } + (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd = cd + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + cd = scd + } + return cd +} + +func _get_16(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(1) + return uint32(int32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))<> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(int32(1)-e))) = uint8(c) +} + +func _get_32(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(3) + return (uint32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))+0)<> int32(24)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(1)))) = uint8(c >> int32(16)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(2)))) = uint8(c >> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(3)))) = uint8(c) +} + +/* Adapt as needed */ + +func _legacy_map(tls *TLS, map1 uintptr, c uint32) (r uint32) { + var x, v1 uint32 + _, _ = x, v1 + if c < uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) { + return c + } + x = c - uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) + x = uint32(int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)))))>>(uint32(2)*x%uint32(8)) | int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)+uint32(1)))))<<(uint32(8)-uint32(2)*x%uint32(8))&int32(1023)) + if x < uint32(256) { + v1 = x + } else { + v1 = uint32(_legacy_chars[x-uint32(256)]) + } + return v1 +} + +func _uni_to_jis(tls *TLS, c uint32) (r uint32) { + var b, d, i, j, nel uint32 + _, _, _, _, _ = b, d, i, j, nel + nel = Uint32FromInt64(13758) / Uint32FromInt64(2) + b = uint32(0) + for { + i = nel / uint32(2) + j = uint32(_rev_jis[b+i]) + d = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(j/uint32(256))*188 + uintptr(j%uint32(256))*2))) + if d == c { + return j + uint32(0x2121) + } else { + if nel == uint32(1) { + return uint32(0) + } else { + if c < d { + nel /= uint32(2) + } else { + b += i + nel -= nel / uint32(2) + } + } + } + goto _1 + _1: + } + return r +} + +func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v cd=%v in=%v inb=%v out=%v outb=%v, (%v:)", tls, cd, in, inb, out, outb, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var c, d, from, to, v62 uint32 + var err, i, i1, j, j1, v25, v26, v27, v28, v59 int32 + var k, l, tmplen, tmpx, x Tsize_t + var loc Tlocale_t + var map1, ploc, scd, tomap, v100, v101, v102, v103, v104, v54, v55, v57, v58, v60, v61, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 uintptr + var totype, type1 uint8 + var _ /* ptmp at bp+40 */ uintptr + var _ /* st at bp+16 */ Tmbstate_t + var _ /* tmp at bp+32 */ struct { + Fwc [0][2]Twchar_t + Fc [8]int8 + } + var _ /* tmp at bp+44 */ [4]int8 + var _ /* wc at bp+24 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, err, from, i, i1, j, j1, k, l, loc, map1, ploc, scd, tmplen, tmpx, to, tomap, totype, type1, x, v100, v101, v102, v103, v104, v25, v26, v27, v28, v54, v55, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 + x = uint32(0) + scd = uintptr(0) + if !(uint32(cd)&Uint32FromInt32(1) != 0) { + scd = cd + cd = (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd + } + to = _extract_to(tls, cd) + from = _extract_from(tls, cd) + map1 = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(from) + uintptr(1) + tomap = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(to) + uintptr(1) + *(*Tmbstate_t)(unsafe.Pointer(bp + 16)) = Tmbstate_t{} + type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) + totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) + ploc = uintptr(___get_tp(tls)) + 96 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + return uint32(0) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + for { + if !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + break + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + l = uint32(1) + switch int32(type1) { + case int32(UTF_8): + goto _2 + case int32(US_ASCII): + goto _3 + case int32(WCHAR_T): + goto _4 + case int32(UTF_32LE): + goto _5 + case int32(UTF_32BE): + goto _6 + case int32(UTF_16LE): + goto _7 + case int32(UTF_16BE): + goto _8 + case int32(UCS2LE): + goto _9 + case int32(UCS2BE): + goto _10 + case int32(UTF_16): + goto _11 + case int32(UCS2): + goto _12 + case int32(UTF_32): + goto _13 + case int32(SHIFT_JIS): + goto _14 + case int32(EUC_JP): + goto _15 + case int32(ISO2022_JP): + goto _16 + case int32(GB2312): + goto _17 + case int32(GBK): + goto _18 + case int32(GB18030): + goto _19 + case int32(BIG5): + goto _20 + case int32(EUC_KR): + goto _21 + default: + goto _22 + } + goto _23 + _2: + ; + if c < uint32(128) { + goto _23 + } + l = Xmbrtowc(tls, bp+24, *(*uintptr)(unsafe.Pointer(in)), *(*Tsize_t)(unsafe.Pointer(inb)), bp+16) + if l == uint32(-Int32FromInt32(1)) { + goto ilseq + } + if l == uint32(-Int32FromInt32(2)) { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(bp + 24))) + goto _23 + _3: + ; + if c >= uint32(128) { + goto ilseq + } + goto _23 + _4: + ; + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < l { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + if !(0 != 0) { + goto _24 + } + _6: + ; + _5: + ; + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + c = _get_32(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + _24: + ; + if c-uint32(0xd800) < uint32(0x800) || c >= uint32(0x110000) { + goto ilseq + } + goto _23 + _10: + ; + _9: + ; + _8: + ; + _7: + ; + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + c = _get_16(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + if c-Uint32FromInt32(0xdc00) < uint32(0x400) { + goto ilseq + } + if c-Uint32FromInt32(0xd800) < uint32(0x400) { + if uint32(int32(type1)-int32(UCS2BE)) < uint32(2) { + goto ilseq + } + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + d = _get_16(tls, *(*uintptr)(unsafe.Pointer(in))+UintptrFromInt32(2), int32(type1)) + if d-Uint32FromInt32(0xdc00) >= uint32(0x400) { + goto ilseq + } + c = (c-uint32(0xd7c0))< uint32(127) { + d-- + } + d -= uint32(64) + } else { + if d-uint32(159) <= uint32(Int32FromInt32(252)-Int32FromInt32(159)) { + c++ + d -= uint32(159) + } + } + if c >= uint32(84) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _15: + ; + if c < uint32(128) { + goto _23 + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if c == uint32(0x8e) { + c = d + if c-uint32(0xa1) > uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + goto ilseq + } + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0xa1)) + goto _23 + } + c -= uint32(0xa1) + d -= uint32(0xa1) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _16: + ; + if c >= uint32(128) { + goto ilseq + } + if c == uint32('\033') { + l = uint32(3) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(3) { + goto starved + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if c != uint32('(') && c != uint32('$') { + goto ilseq + } + switch uint32(Int32FromInt32(128)*BoolInt32(c == Uint32FromUint8('$'))) + d { + case uint32('B'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + goto _1 + case uint32('J'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(1) + goto _1 + case uint32('I'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(4) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('@')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(2) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('B')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(3) + goto _1 + } + goto ilseq + } + switch (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate { + case uint32(1): + if c == uint32('\\') { + c = uint32(0xa5) + } + if c == uint32('~') { + c = uint32(0x203e) + } + case uint32(2): + fallthrough + case uint32(3): + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + c -= uint32(0x21) + d -= uint32(0x21) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + case uint32(4): + if c-uint32(0x60) < uint32(0x1f) { + goto ilseq + } + if c-uint32(0x21) < uint32(0x5e) { + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0x21)) + } + break + } + goto _23 + _17: + ; + if c < uint32(128) { + goto _23 + } + if c < uint32(0xa1) { + goto ilseq + } + _18: + ; + if c == uint32(128) { + c = uint32(0x20ac) + goto _23 + } + _19: + ; + if c < uint32(128) { + goto _23 + } + c -= uint32(0x81) + if c >= uint32(126) { + goto ilseq + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d < uint32(0xa1) && int32(type1) == int32(GB2312) { + goto ilseq + } + if d-uint32(0x40) >= uint32(191) || d == uint32(127) { + if d-uint32('0') > uint32(9) || int32(type1) != int32(GB18030) { + goto ilseq + } + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + c = (uint32(10)*c + d - uint32('0')) * uint32(1260) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if d-uint32(0x81) > uint32(126) { + goto ilseq + } + c += uint32(10) * (d - uint32(0x81)) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(3)))) + if d-uint32('0') > uint32(9) { + goto ilseq + } + c += d - uint32('0') + c += uint32(128) + d = uint32(0) + for { + if !(d <= c) { + break + } + k = uint32(0) + i = 0 + for { + if !(i < int32(126)) { + break + } + j = 0 + for { + if !(j < int32(190)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(i)*380 + uintptr(j)*2)))-d <= c-d { + k++ + } + goto _31 + _31: + ; + j++ + } + goto _30 + _30: + ; + i++ + } + d = c + uint32(1) + c += k + goto _29 + _29: + } + goto _23 + } + d -= uint32(0x40) + if d > uint32(63) { + d-- + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(c)*380 + uintptr(d)*2))) + goto _23 + _20: + ; + if c < uint32(128) { + goto _23 + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d-uint32(0x40) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x40)) || d-uint32(0x7f) < uint32(Int32FromInt32(0xa1)-Int32FromInt32(0x7f)) { + goto ilseq + } + d -= uint32(0x40) + if d > uint32(0x3e) { + d -= uint32(0x22) + } + if c-uint32(0xa1) >= uint32(Int32FromInt32(0xfa)-Int32FromInt32(0xa1)) { + if c-uint32(0x87) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x87)) { + goto ilseq + } + if c < uint32(0xa1) { + c -= uint32(0x87) + } else { + c -= uint32(Int32FromInt32(0x87) + (Int32FromInt32(0xfa) - Int32FromInt32(0xa1))) + } + c = uint32(int32(_hkscs[uint32(4867)+(c*uint32(157)+d)/uint32(16)])>>((c*uint32(157)+d)%uint32(16))%int32(2)< *(*Tsize_t)(unsafe.Pointer(outb)) { + goto toobig + } + if tmpx != 0 { + x++ + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+32, tmplen) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(tmplen) + *(*Tsize_t)(unsafe.Pointer(outb)) -= tmplen + goto _1 + } + if !(c != 0) { + goto ilseq + } + goto _23 + } + c -= uint32(0xa1) + c = uint32(int32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_big5)) + uintptr(c)*314 + uintptr(d)*2))) | BoolInt32(c == uint32(0x27) && (d == uint32(0x3a) || d == uint32(0x3c) || d == uint32(0x42)))<= uint32(93) || d >= uint32(94) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0x81)) + d += uint32(0xa1) + if c >= uint32(93) || c >= uint32(Int32FromInt32(0xc6)-Int32FromInt32(0x81)) && d > uint32(0x52) { + goto ilseq + } + if d-uint32('A') < uint32(26) { + d = d - uint32('A') + } else { + if d-uint32('a') < uint32(26) { + d = d - uint32('a') + uint32(26) + } else { + if d-uint32(0x81) < uint32(Int32FromInt32(0xff)-Int32FromInt32(0x81)) { + d = d - uint32(0x81) + uint32(52) + } else { + goto ilseq + } + } + } + if c < uint32(0x20) { + c = uint32(178)*c + d + } else { + c = uint32(Int32FromInt32(178)*Int32FromInt32(0x20)) + uint32(84)*(c-uint32(0x20)) + d + } + c += uint32(0xac00) + d = uint32(0xac00) + for { + if !(d <= c) { + break + } + k = uint32(0) + i1 = 0 + for { + if !(i1 < int32(93)) { + break + } + j1 = 0 + for { + if !(j1 < int32(94)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(i1)*188 + uintptr(j1)*2)))-d <= c-d { + k++ + } + goto _34 + _34: + ; + j1++ + } + goto _33 + _33: + ; + i1++ + } + d = c + uint32(1) + c += k + goto _32 + _32: + } + goto _23 + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _22: + ; + if !(c != 0) { + goto _23 + } + c = _legacy_map(tls, map1, c) + if !(c != 0) { + goto ilseq + } + _23: + ; + switch int32(totype) { + case int32(WCHAR_T): + goto _35 + case int32(UTF_8): + goto _36 + case int32(US_ASCII): + goto _37 + default: + goto _38 + case int32(SHIFT_JIS): + goto _39 + case int32(EUC_JP): + goto _40 + case int32(ISO2022_JP): + goto _41 + case int32(UCS2): + goto _42 + case int32(UTF_16LE): + goto _43 + case int32(UTF_16BE): + goto _44 + case int32(UTF_16): + goto _45 + case int32(UCS2LE): + goto _46 + case int32(UCS2BE): + goto _47 + case int32(UTF_32): + goto _48 + case int32(UTF_32LE): + goto _49 + case int32(UTF_32BE): + goto _50 + } + goto _51 + _35: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(out)))) = int32(c) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _36: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + k = uint32(Xwctomb(tls, bp+44, int32(c))) + if *(*Tsize_t)(unsafe.Pointer(outb)) < k { + goto toobig + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+44, k) + } else { + k = uint32(Xwctomb(tls, *(*uintptr)(unsafe.Pointer(out)), int32(c))) + } + *(*uintptr)(unsafe.Pointer(out)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(outb)) -= k + goto _51 + _37: + ; + if !(c > uint32(0x7f)) { + goto _52 + } + goto subst + subst: + ; + x++ + c = Uint32FromUint8('*') + _52: + ; + _38: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(1) { + goto toobig + } + if !(c < uint32(256) && c == _legacy_map(tls, tomap, c)) { + goto _53 + } + goto revout + revout: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(1) { + goto toobig + } + v55 = out + v54 = *(*uintptr)(unsafe.Pointer(v55)) + *(*uintptr)(unsafe.Pointer(v55))++ + *(*int8)(unsafe.Pointer(v54)) = int8(c) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(1) + goto _51 + _53: + ; + d = c + c = uint32(int32(4) * int32(totype)) + for { + if !(c < uint32(256)) { + break + } + if d == _legacy_map(tls, tomap, c) { + goto revout + } + goto _56 + _56: + ; + c++ + } + goto subst + _39: + ; + if c < uint32(128) { + goto revout + } + if c == uint32(0xa5) { + x++ + c = uint32('\\') + goto revout + } + if c == uint32(0x203e) { + x++ + c = uint32('~') + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0xff61)) + goto revout + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + d = c % uint32(256) + c = c / uint32(256) + v58 = out + v57 = *(*uintptr)(unsafe.Pointer(v58)) + *(*uintptr)(unsafe.Pointer(v58))++ + if c < uint32(95) { + v59 = int32(112) + } else { + v59 = int32(176) + } + *(*int8)(unsafe.Pointer(v57)) = int8((c+uint32(1))/uint32(2) + uint32(v59)) + v61 = out + v60 = *(*uintptr)(unsafe.Pointer(v61)) + *(*uintptr)(unsafe.Pointer(v61))++ + if c%uint32(2) != 0 { + v62 = d + uint32(31) + d/uint32(96) + } else { + v62 = d + uint32(126) + } + *(*int8)(unsafe.Pointer(v60)) = int8(v62) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + _40: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0x0e00) + Int32FromInt32(0x21) - Int32FromInt32(0xff61)) + } else { + c = _uni_to_jis(tls, c) + } + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + v64 = out + v63 = *(*uintptr)(unsafe.Pointer(v64)) + *(*uintptr)(unsafe.Pointer(v64))++ + *(*int8)(unsafe.Pointer(v63)) = int8(c/uint32(256) + uint32(0x80)) + v66 = out + v65 = *(*uintptr)(unsafe.Pointer(v66)) + *(*uintptr)(unsafe.Pointer(v66))++ + *(*int8)(unsafe.Pointer(v65)) = int8(c%uint32(256) + uint32(0x80)) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + _41: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) || c == uint32(0xa5) || c == uint32(0x203e) { + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(7) { + goto toobig + } + v68 = out + v67 = *(*uintptr)(unsafe.Pointer(v68)) + *(*uintptr)(unsafe.Pointer(v68))++ + *(*int8)(unsafe.Pointer(v67)) = int8('\033') + v70 = out + v69 = *(*uintptr)(unsafe.Pointer(v70)) + *(*uintptr)(unsafe.Pointer(v70))++ + *(*int8)(unsafe.Pointer(v69)) = int8('(') + if c == uint32(0xa5) { + v72 = out + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + *(*int8)(unsafe.Pointer(v71)) = int8('J') + v74 = out + v73 = *(*uintptr)(unsafe.Pointer(v74)) + *(*uintptr)(unsafe.Pointer(v74))++ + *(*int8)(unsafe.Pointer(v73)) = int8('\\') + } else { + if c == uint32(0x203e) { + v76 = out + v75 = *(*uintptr)(unsafe.Pointer(v76)) + *(*uintptr)(unsafe.Pointer(v76))++ + *(*int8)(unsafe.Pointer(v75)) = int8('J') + v78 = out + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + *(*int8)(unsafe.Pointer(v77)) = int8('~') + } else { + v80 = out + v79 = *(*uintptr)(unsafe.Pointer(v80)) + *(*uintptr)(unsafe.Pointer(v80))++ + *(*int8)(unsafe.Pointer(v79)) = int8('I') + v82 = out + v81 = *(*uintptr)(unsafe.Pointer(v82)) + *(*uintptr)(unsafe.Pointer(v82))++ + *(*int8)(unsafe.Pointer(v81)) = int8(c - uint32(0xff61) + uint32(0x21)) + } + } + v84 = out + v83 = *(*uintptr)(unsafe.Pointer(v84)) + *(*uintptr)(unsafe.Pointer(v84))++ + *(*int8)(unsafe.Pointer(v83)) = int8('\033') + v86 = out + v85 = *(*uintptr)(unsafe.Pointer(v86)) + *(*uintptr)(unsafe.Pointer(v86))++ + *(*int8)(unsafe.Pointer(v85)) = int8('(') + v88 = out + v87 = *(*uintptr)(unsafe.Pointer(v88)) + *(*uintptr)(unsafe.Pointer(v88))++ + *(*int8)(unsafe.Pointer(v87)) = int8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(7) + goto _51 + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(8) { + goto toobig + } + v90 = out + v89 = *(*uintptr)(unsafe.Pointer(v90)) + *(*uintptr)(unsafe.Pointer(v90))++ + *(*int8)(unsafe.Pointer(v89)) = int8('\033') + v92 = out + v91 = *(*uintptr)(unsafe.Pointer(v92)) + *(*uintptr)(unsafe.Pointer(v92))++ + *(*int8)(unsafe.Pointer(v91)) = int8('$') + v94 = out + v93 = *(*uintptr)(unsafe.Pointer(v94)) + *(*uintptr)(unsafe.Pointer(v94))++ + *(*int8)(unsafe.Pointer(v93)) = int8('B') + v96 = out + v95 = *(*uintptr)(unsafe.Pointer(v96)) + *(*uintptr)(unsafe.Pointer(v96))++ + *(*int8)(unsafe.Pointer(v95)) = int8(c / uint32(256)) + v98 = out + v97 = *(*uintptr)(unsafe.Pointer(v98)) + *(*uintptr)(unsafe.Pointer(v98))++ + *(*int8)(unsafe.Pointer(v97)) = int8(c % uint32(256)) + v100 = out + v99 = *(*uintptr)(unsafe.Pointer(v100)) + *(*uintptr)(unsafe.Pointer(v100))++ + *(*int8)(unsafe.Pointer(v99)) = int8('\033') + v102 = out + v101 = *(*uintptr)(unsafe.Pointer(v102)) + *(*uintptr)(unsafe.Pointer(v102))++ + *(*int8)(unsafe.Pointer(v101)) = int8('(') + v104 = out + v103 = *(*uintptr)(unsafe.Pointer(v104)) + *(*uintptr)(unsafe.Pointer(v104))++ + *(*int8)(unsafe.Pointer(v103)) = int8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(8) + goto _51 + _42: + ; + totype = uint8(UCS2BE) + _47: + ; + _46: + ; + _45: + ; + _44: + ; + _43: + ; + if c < uint32(0x10000) || uint32(int32(totype)-int32(UCS2BE)) < uint32(2) { + if c >= uint32(0x10000) { + c = uint32(0xFFFD) + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(2) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + c -= uint32(0x10000) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c>>int32(10)|uint32(0xd800), int32(totype)) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out))+UintptrFromInt32(2), c&uint32(0x3ff)|uint32(0xdc00), int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _48: + ; + totype = uint8(UTF_32BE) + _50: + ; + _49: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + _put_32(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _51: + ; + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(in)) += uintptr(l) + *(*Tsize_t)(unsafe.Pointer(inb)) -= l + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x + goto ilseq +ilseq: + ; + err = int32(EILSEQ) + x = uint32(-Int32FromInt32(1)) + goto end + goto toobig +toobig: + ; + err = int32(E2BIG) + x = uint32(-Int32FromInt32(1)) + goto end + goto starved +starved: + ; + err = int32(EINVAL) + x = uint32(-Int32FromInt32(1)) + goto end +end: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x +} + +func Xiconv_close(tls *TLS, cd Ticonv_t) (r int32) { + if __ccgo_strace { + trc("tls=%v cd=%v, (%v:)", tls, cd, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(uint32(cd)&Uint32FromInt32(1) != 0) { + Xfree(tls, cd) + } + return 0 +} + +var _c_time = [316]int8{'S', 'u', 'n', 0, 'M', 'o', 'n', 0, 'T', 'u', 'e', 0, 'W', 'e', 'd', 0, 'T', 'h', 'u', 0, 'F', 'r', 'i', 0, 'S', 'a', 't', 0, 'S', 'u', 'n', 'd', 'a', 'y', 0, 'M', 'o', 'n', 'd', 'a', 'y', 0, 'T', 'u', 'e', 's', 'd', 'a', 'y', 0, 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 0, 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 0, 'F', 'r', 'i', 'd', 'a', 'y', 0, 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 0, 'J', 'a', 'n', 0, 'F', 'e', 'b', 0, 'M', 'a', 'r', 0, 'A', 'p', 'r', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 0, 'J', 'u', 'l', 0, 'A', 'u', 'g', 0, 'S', 'e', 'p', 0, 'O', 'c', 't', 0, 'N', 'o', 'v', 0, 'D', 'e', 'c', 0, 'J', 'a', 'n', 'u', 'a', 'r', 'y', 0, 'F', 'e', 'b', 'r', 'u', 'a', 'r', 'y', 0, 'M', 'a', 'r', 'c', 'h', 0, 'A', 'p', 'r', 'i', 'l', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 'e', 0, 'J', 'u', 'l', 'y', 0, 'A', 'u', 'g', 'u', 's', 't', 0, 'S', 'e', 'p', 't', 'e', 'm', 'b', 'e', 'r', 0, 'O', 'c', 't', 'o', 'b', 'e', 'r', 0, 'N', 'o', 'v', 'e', 'm', 'b', 'e', 'r', 0, 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 0, 'A', 'M', 0, 'P', 'M', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S', 0, '%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p', 0, 0, 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S'} + +var _c_messages = [19]int8{'^', '[', 'y', 'Y', ']', 0, '^', '[', 'n', 'N', ']', 0, 'y', 'e', 's', 0, 'n', 'o'} +var _c_numeric = [3]int8{'.'} + +func X__nl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cat, idx int32 + var str, v1, v2 uintptr + _, _, _, _, _ = cat, idx, str, v1, v2 + cat = item >> int32(16) + idx = item & int32(65535) + if item == int32(CODESET) { + if *(*uintptr)(unsafe.Pointer(loc)) != 0 { + v1 = __ccgo_ts + 322 + } else { + v1 = __ccgo_ts + 441 + } + return v1 + } + /* _NL_LOCALE_NAME extension */ + if idx == int32(65535) && cat < int32(LC_ALL) { + if *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4)) != 0 { + v2 = *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4)) + 8 + } else { + v2 = __ccgo_ts + 447 + } + return v2 + } + switch cat { + case int32(LC_NUMERIC): + if idx > int32(1) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_numeric)) + case int32(LC_TIME): + if idx > int32(0x31) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_time)) + case int32(LC_MONETARY): + if idx > 0 { + return __ccgo_ts + } + str = __ccgo_ts + case int32(LC_MESSAGES): + if idx > int32(3) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_messages)) + default: + return __ccgo_ts + } + for { + if !(idx != 0) { + break + } + for { + if !(*(*int8)(unsafe.Pointer(str)) != 0) { + break + } + goto _4 + _4: + ; + str++ + } + goto _3 + _3: + ; + idx-- + str++ + } + if cat != int32(LC_NUMERIC) && *(*int8)(unsafe.Pointer(str)) != 0 { + str = X__lctrans(tls, str, *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4))) + } + return str +} + +func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo(tls, item) +} + +func Xnl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, loc) +} + +func X__lctrans_impl(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var trans, v1 uintptr + _, _ = trans, v1 + trans = uintptr(0) + if lm != 0 { + trans = X__mo_lookup(tls, (*t__locale_map)(unsafe.Pointer(lm)).Fmap1, (*t__locale_map)(unsafe.Pointer(lm)).Fmap_size, msg) + } + if trans != 0 { + v1 = trans + } else { + v1 = msg + } + return v1 +} + +var _envvars = [6][12]int8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +func X__get_locale(tls *TLS, cat int32, val uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v val=%v, (%v:)", tls, cat, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var builtin int32 + var l, n Tsize_t + var map1, new1, p, path, z, v1, v11, v2, v4, v6 uintptr + var v12, v3, v5, v7 bool + var _ /* buf at bp+0 */ [256]int8 + var _ /* map_size at bp+256 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = builtin, l, map1, n, new1, p, path, z, v1, v11, v12, v2, v3, v4, v5, v6, v7 + new1 = uintptr(0) + path = uintptr(0) + if !(*(*int8)(unsafe.Pointer(val)) != 0) { + v1 = Xgetenv(tls, __ccgo_ts+449) + val = v1 + if v3 = v1 != 0 && *(*int8)(unsafe.Pointer(val)) != 0; !v3 { + v2 = Xgetenv(tls, uintptr(unsafe.Pointer(&_envvars))+uintptr(cat)*12) + val = v2 + } + if v5 = v3 || v2 != 0 && *(*int8)(unsafe.Pointer(val)) != 0; !v5 { + v4 = Xgetenv(tls, __ccgo_ts+336) + val = v4 + } + if v7 = v5 || v4 != 0 && *(*int8)(unsafe.Pointer(val)) != 0; !v7 { + v6 = __ccgo_ts + 456 + val = v6 + } + _ = v7 || v6 != 0 + } + /* Limit name length and forbid leading dot or any slashes. */ + n = uint32(0) + for { + if !(n < uint32(LOCALE_NAME_MAX) && *(*int8)(unsafe.Pointer(val + uintptr(n))) != 0 && int32(*(*int8)(unsafe.Pointer(val + uintptr(n)))) != int32('/')) { + break + } + goto _8 + _8: + ; + n++ + } + if int32(*(*int8)(unsafe.Pointer(val))) == int32('.') || *(*int8)(unsafe.Pointer(val + uintptr(n))) != 0 { + val = __ccgo_ts + 456 + } + builtin = BoolInt32(int32(*(*int8)(unsafe.Pointer(val))) == int32('C') && !(*(*int8)(unsafe.Pointer(val + 1)) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+456) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+464) != 0)) + if builtin != 0 { + if cat == LC_CTYPE && int32(*(*int8)(unsafe.Pointer(val + 1))) == int32('.') { + return uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return uintptr(0) + } + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, val, p+8) != 0) { + return p + } + goto _9 + _9: + ; + p = (*t__locale_map)(unsafe.Pointer(p)).Fnext + } + if !(X__libc.Fsecure != 0) { + path = Xgetenv(tls, __ccgo_ts+470) + } + /* FIXME: add a default path? */ + if path != 0 { + for { + if !(*(*int8)(unsafe.Pointer(path)) != 0) { + break + } + z = X__strchrnul(tls, path, int32(':')) + l = uint32(int32(z) - int32(path)) + if l >= uint32(256)-n-uint32(2) { + goto _10 + } + Xmemcpy(tls, bp, path, l) + (*(*[256]int8)(unsafe.Pointer(bp)))[l] = int8('/') + Xmemcpy(tls, bp+uintptr(l)+uintptr(1), val, n) + (*(*[256]int8)(unsafe.Pointer(bp)))[l+uint32(1)+n] = 0 + map1 = X__map_file(tls, bp, bp+256) + if map1 != 0 { + new1 = Xmalloc(tls, uint32(36)) + if !(new1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp + 256))) + break + } + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = map1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp + 256)) + Xmemcpy(tls, new1+8, val, n) + *(*int8)(unsafe.Pointer(new1 + 8 + uintptr(n))) = 0 + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + break + } + goto _10 + _10: + ; + path = z + BoolUintptr(!!(*(*int8)(unsafe.Pointer(z)) != 0)) + } + } + /* If no locale definition was found, make a locale map + * object anyway to store the name, which is kept for the + * sake of being able to do message translations at the + * application level. */ + if v12 = !(new1 != 0); v12 { + v11 = Xmalloc(tls, uint32(36)) + new1 = v11 + } + if v12 && v11 != 0 { + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = X__c_dot_utf8.Fmap1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = X__c_dot_utf8.Fmap_size + Xmemcpy(tls, new1+8, val, n) + *(*int8)(unsafe.Pointer(new1 + 8 + uintptr(n))) = 0 + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + } + /* For LC_CTYPE, never return a null pointer unless the + * requested name was "C" or "POSIX". */ + if !(new1 != 0) && cat == LC_CTYPE { + new1 = uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return new1 +} + +var _loc_head uintptr + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _posix_lconv = Tlconv{ + Fdecimal_point: __ccgo_ts + 483, + Fthousands_sep: __ccgo_ts, + Fgrouping: __ccgo_ts, + Fint_curr_symbol: __ccgo_ts, + Fcurrency_symbol: __ccgo_ts, + Fmon_decimal_point: __ccgo_ts, + Fmon_thousands_sep: __ccgo_ts, + Fmon_grouping: __ccgo_ts, + Fpositive_sign: __ccgo_ts, + Fnegative_sign: __ccgo_ts, + Fint_frac_digits: Int8FromInt32(CHAR_MAX), + Ffrac_digits: Int8FromInt32(CHAR_MAX), + Fp_cs_precedes: Int8FromInt32(CHAR_MAX), + Fp_sep_by_space: Int8FromInt32(CHAR_MAX), + Fn_cs_precedes: Int8FromInt32(CHAR_MAX), + Fn_sep_by_space: Int8FromInt32(CHAR_MAX), + Fp_sign_posn: Int8FromInt32(CHAR_MAX), + Fn_sign_posn: Int8FromInt32(CHAR_MAX), + Fint_p_cs_precedes: Int8FromInt32(CHAR_MAX), + Fint_p_sep_by_space: Int8FromInt32(CHAR_MAX), + Fint_n_cs_precedes: Int8FromInt32(CHAR_MAX), + Fint_n_sep_by_space: Int8FromInt32(CHAR_MAX), + Fint_p_sign_posn: Int8FromInt32(CHAR_MAX), + Fint_n_sign_posn: Int8FromInt32(CHAR_MAX), +} + +func Xlocaleconv(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_posix_lconv)) +} + +var _default_locale_init_done int32 +var _default_locale t__locale_struct +var _default_ctype_locale t__locale_struct + +func X__loc_is_allocated(tls *TLS, loc Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v loc=%v, (%v:)", tls, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(loc != 0 && loc != uintptr(unsafe.Pointer(&X__c_locale)) && loc != uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) && loc != uintptr(unsafe.Pointer(&_default_locale)) && loc != uintptr(unsafe.Pointer(&_default_ctype_locale))) +} + +func _do_newlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var i, i1 int32 + var v2, v3 uintptr + var v5 Tlocale_t + var _ /* tmp at bp+0 */ t__locale_struct + _, _, _, _, _ = i, i1, v2, v3, v5 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + if !(mask&(Int32FromInt32(1)< %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + loc = _do_newlocale(tls, mask, name, loc) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return loc +} + +func Xnewlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v mask=%v name=%v loc=%v, (%v:)", tls, mask, name, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__newlocale(tls, mask, name, loc) +} + +/* +grammar: + +Start = Expr ';' +Expr = Or | Or '?' Expr ':' Expr +Or = And | Or '||' And +And = Eq | And '&&' Eq +Eq = Rel | Eq '==' Rel | Eq '!=' Rel +Rel = Add | Rel '<=' Add | Rel '>=' Add | Rel '<' Add | Rel '>' Add +Add = Mul | Add '+' Mul | Add '-' Mul +Mul = Prim | Mul '*' Prim | Mul '/' Prim | Mul '%' Prim +Prim = '(' Expr ')' | '!' Prim | decimal | 'n' + +internals: + +recursive descent expression evaluator with stack depth limit. +for binary operators an operator-precedence parser is used. +eval* functions store the result of the parsed subexpression +and return a pointer to the next non-space character. +*/ + +type Tst = struct { + Fr uint32 + Fn uint32 + Fop int32 +} + +func _skipspace(tls *TLS, s uintptr) (r uintptr) { + var v1, v2 int32 + _, _ = v1, v2 + for { + v1 = int32(*(*int8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + return s +} + +func _evalprim(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* e at bp+0 */ uintptr + _ = v1 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _skipspace(tls, s) + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = Xstrtoul(tls, s, bp, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp)) == s || (*Tst)(unsafe.Pointer(st)).Fr == uint32(-Int32FromInt32(1)) { + return __ccgo_ts + } + return _skipspace(tls, *(*uintptr)(unsafe.Pointer(bp))) + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('n') { + (*Tst)(unsafe.Pointer(st)).Fr = (*Tst)(unsafe.Pointer(st)).Fn + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('(') { + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*int8)(unsafe.Pointer(s))) != int32(')') { + return __ccgo_ts + } + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('!') { + s = _evalprim(tls, st, s+uintptr(1), d) + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(!((*Tst)(unsafe.Pointer(st)).Fr != 0)) + return s + } + return __ccgo_ts +} + +func _binop(tls *TLS, st uintptr, op int32, left uint32) (r int32) { + var a, b uint32 + _, _ = a, b + a = left + b = (*Tst)(unsafe.Pointer(st)).Fr + switch op { + case 0: + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != 0 || b != 0) + return 0 + case int32(1): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != 0 && b != 0) + return 0 + case int32(2): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a == b) + return 0 + case int32(3): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != b) + return 0 + case int32(4): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a >= b) + return 0 + case int32(5): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a <= b) + return 0 + case int32(6): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a > b) + return 0 + case int32(7): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a < b) + return 0 + case int32(8): + (*Tst)(unsafe.Pointer(st)).Fr = a + b + return 0 + case int32(9): + (*Tst)(unsafe.Pointer(st)).Fr = a - b + return 0 + case int32(10): + (*Tst)(unsafe.Pointer(st)).Fr = a * b + return 0 + case int32(11): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a % b + return 0 + } + return int32(1) + case int32(12): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a / b + return 0 + } + return int32(1) + } + return int32(1) +} + +func _parseop(tls *TLS, st uintptr, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(i < int32(11)) { + break + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32(_opch[i]) { + /* note: >,< are accepted with or without = */ + if i < int32(6) && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32(_opch2[i]) { + (*Tst)(unsafe.Pointer(st)).Fop = i + return s + uintptr(2) + } + if i >= int32(4) { + (*Tst)(unsafe.Pointer(st)).Fop = i + int32(2) + return s + uintptr(1) + } + break + } + goto _1 + _1: + ; + i++ + } + (*Tst)(unsafe.Pointer(st)).Fop = int32(13) + return s +} + +var _opch = [11]int8{'|', '&', '=', '!', '>', '<', '+', '-', '*', '%', '/'} + +var _opch2 = [6]int8{'|', '&', '=', '=', '=', '='} + +func _evalbinop(tls *TLS, st uintptr, s uintptr, minprec int32, d int32) (r uintptr) { + var left uint32 + var op int32 + _, _ = left, op + d-- + s = _evalprim(tls, st, s, d) + s = _parseop(tls, st, s) + for { + /* + st->r (left hand side value) and st->op are now set, + get the right hand side or back out if op has low prec, + if op was missing then prec[op]==0 + */ + op = (*Tst)(unsafe.Pointer(st)).Fop + if int32(_prec[op]) <= minprec { + return s + } + left = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalbinop(tls, st, s, int32(_prec[op]), d) + if _binop(tls, st, op, left) != 0 { + return __ccgo_ts + } + goto _1 + _1: + } + return r +} + +var _prec = [14]int8{ + 0: int8(1), + 1: int8(2), + 2: int8(3), + 3: int8(3), + 4: int8(4), + 5: int8(4), + 6: int8(4), + 7: int8(4), + 8: int8(5), + 9: int8(5), + 10: int8(6), + 11: int8(6), + 12: int8(6), +} + +func _evalexpr(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + var a, b, v2 uint32 + var v1 int32 + _, _, _, _ = a, b, v1, v2 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _evalbinop(tls, st, s, 0, d) + if int32(*(*int8)(unsafe.Pointer(s))) != int32('?') { + return s + } + a = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*int8)(unsafe.Pointer(s))) != int32(':') { + return __ccgo_ts + } + b = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if a != 0 { + v2 = b + } else { + v2 = (*Tst)(unsafe.Pointer(st)).Fr + } + (*Tst)(unsafe.Pointer(st)).Fr = v2 + return s +} + +func X__pleval(tls *TLS, s uintptr, n uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* st at bp+0 */ Tst + _ = v1 + (*(*Tst)(unsafe.Pointer(bp))).Fn = n + s = _evalexpr(tls, bp, s, int32(100)) + if int32(*(*int8)(unsafe.Pointer(s))) == int32(';') { + v1 = (*(*Tst)(unsafe.Pointer(bp))).Fr + } else { + v1 = uint32(-Int32FromInt32(1)) + } + return v1 +} + +var _buf1 [144]int8 + +func Xsetlocale(tls *TLS, cat int32, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v name=%v, (%v:)", tls, cat, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var i, same int32 + var l Tsize_t + var lm, lm1, p, part1, ret, s, z, v3, v4, v5, v6 uintptr + var _ /* part at bp+24 */ [24]int8 + var _ /* tmp_locale at bp+0 */ t__locale_struct + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, lm, lm1, p, part1, ret, s, same, z, v3, v4, v5, v6 + if uint32(cat) > uint32(LC_ALL) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + /* For LC_ALL, setlocale is required to return a string which + * encodes the current setting for all categories. The format of + * this string is unspecified, and only the following code, which + * performs both the serialization and deserialization, depends + * on the format, so it can easily be changed if needed. */ + if cat == int32(LC_ALL) { + if name != 0 { + *(*[24]int8)(unsafe.Pointer(bp + 24)) = [24]int8{'C', '.', 'U', 'T', 'F', '-', '8'} + p = name + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + z = X__strchrnul(tls, p, int32(';')) + if int32(z)-int32(p) <= int32(LOCALE_NAME_MAX) { + Xmemcpy(tls, bp+24, p, uint32(int32(z)-int32(p))) + (*(*[24]int8)(unsafe.Pointer(bp + 24)))[int32(z)-int32(p)] = 0 + if *(*int8)(unsafe.Pointer(z)) != 0 { + p = z + uintptr(1) + } + } + lm = X__get_locale(tls, i, bp+24) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) = lm + goto _1 + _1: + ; + i++ + } + X__libc.Fglobal_locale = *(*t__locale_struct)(unsafe.Pointer(bp)) + } + s = uintptr(unsafe.Pointer(&_buf1)) + same = 0 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + lm1 = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(i)*4)) + if lm1 == *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32)) { + same++ + } + if lm1 != 0 { + v3 = lm1 + 8 + } else { + v3 = __ccgo_ts + 447 + } + part1 = v3 + l = Xstrlen(tls, part1) + Xmemcpy(tls, s, part1, l) + *(*int8)(unsafe.Pointer(s + uintptr(l))) = int8(';') + s += uintptr(l + uint32(1)) + goto _2 + _2: + ; + i++ + } + s-- + v4 = s + *(*int8)(unsafe.Pointer(v4)) = 0 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + if same == int32(LC_ALL) { + v5 = part1 + } else { + v5 = uintptr(unsafe.Pointer(&_buf1)) + } + return v5 + } + if name != 0 { + lm = X__get_locale(tls, cat, name) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(cat)*4)) = lm + } else { + lm = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(cat)*4)) + } + if lm != 0 { + v6 = lm + 8 + } else { + v6 = __ccgo_ts + 447 + } + ret = v6 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return ret +} + +func X__strcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcmp(tls, l, r) +} + +func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, loc) +} + +func _vstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, ap Tva_list) (r Tssize_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var fill, fw, intl, left, lp, negpar, nogrp, nosym, rp, w int32 + var l Tsize_t + var s0, v12, v5, v6, v8 uintptr + var x float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = fill, fw, intl, l, left, lp, negpar, nogrp, nosym, rp, s0, w, x, v12, v5, v6, v8 + s0 = s +_3: + ; + if !(n != 0 && *(*int8)(unsafe.Pointer(fmt)) != 0) { + goto _1 + } + if !(int32(*(*int8)(unsafe.Pointer(fmt))) != int32('%')) { + goto _4 + } + goto literal +literal: + ; + v5 = s + s++ + v6 = fmt + fmt++ + *(*int8)(unsafe.Pointer(v5)) = *(*int8)(unsafe.Pointer(v6)) + n-- + goto _2 +_4: + ; + fmt++ + if int32(*(*int8)(unsafe.Pointer(fmt))) == int32('%') { + goto literal + } + fill = int32(' ') + nogrp = 0 + negpar = 0 + nosym = 0 + left = 0 + for { + switch int32(*(*int8)(unsafe.Pointer(fmt))) { + case int32('='): + fmt++ + v8 = fmt + fill = int32(*(*int8)(unsafe.Pointer(v8))) + goto _7 + case int32('^'): + nogrp = int32(1) + goto _7 + case int32('('): + negpar = int32(1) + fallthrough + case int32('+'): + goto _7 + case int32('!'): + nosym = int32(1) + goto _7 + case int32('-'): + left = int32(1) + goto _7 + } + break + goto _7 + _7: + ; + fmt++ + } + fw = 0 + for { + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + fw = int32(10)*fw + (int32(*(*int8)(unsafe.Pointer(fmt))) - int32('0')) + goto _9 + _9: + ; + fmt++ + } + lp = 0 + rp = int32(2) + if int32(*(*int8)(unsafe.Pointer(fmt))) == int32('#') { + lp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + lp = int32(10)*lp + (int32(*(*int8)(unsafe.Pointer(fmt))) - int32('0')) + goto _10 + _10: + ; + fmt++ + } + } + if int32(*(*int8)(unsafe.Pointer(fmt))) == int32('.') { + rp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + rp = int32(10)*rp + (int32(*(*int8)(unsafe.Pointer(fmt))) - int32('0')) + goto _11 + _11: + ; + fmt++ + } + } + v12 = fmt + fmt++ + intl = BoolInt32(int32(*(*int8)(unsafe.Pointer(v12))) == int32('i')) + w = lp + int32(1) + rp + if !(left != 0) && fw > w { + w = fw + } + x = VaFloat64(&ap) + l = uint32(Xsnprintf(tls, s, n, __ccgo_ts+485, VaList(bp+8, w, rp, x))) + if l >= n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(E2BIG) + return -int32(1) + } + s += uintptr(l) + n -= l + goto _2 +_2: + ; + goto _3 + goto _1 +_1: + ; + return int32(s) - int32(s0) +} + +func Xstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v loc=%v fmt=%v va=%v, (%v:)", tls, s, n, loc, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, loc, fmt, ap) + _ = ap + return ret +} + +func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale, fmt, ap) + _ = ap + return ret +} + +func Xstrtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof(tls, s, p) +} + +func Xstrtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, p) +} + +func Xstrtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold(tls, s, p) +} + +func X__strtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod_l(tls, s, p, l) +} + +func X__strtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof_l(tls, s, p, l) +} + +func X__strtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold_l(tls, s, p, l) +} + +// C documentation +// +// /* collate only by code points */ +func X__strxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, src) + if n > l { + Xstrcpy(tls, dest, src) + } + return l +} + +func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xstrxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, loc) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _current_domain uintptr + +func X__gettextdomain(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if _current_domain != 0 { + v1 = _current_domain + } else { + v1 = __ccgo_ts + 350 + } + return v1 +} + +func Xtextdomain(tls *TLS, domainname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v, (%v:)", tls, domainname, origin(2)) + defer func() { trc("-> %v", r) }() + } + var domlen Tsize_t + _ = domlen + if !(domainname != 0) { + return X__gettextdomain(tls) + } + domlen = Xstrlen(tls, domainname) + if domlen > uint32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(_current_domain != 0) { + _current_domain = Xmalloc(tls, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if !(_current_domain != 0) { + return uintptr(0) + } + } + Xmemcpy(tls, _current_domain, domainname, domlen+uint32(1)) + return _current_domain +} + +func Xgettext(tls *TLS, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid=%v, (%v:)", tls, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdgettext(tls, uintptr(0), msgid) +} + +func Xngettext(tls *TLS, msgid1 uintptr, msgid2 uintptr, n uint32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdngettext(tls, uintptr(0), msgid1, msgid2, n) +} + +func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var global, old, v1, v2 Tlocale_t + var self Tpthread_t + _, _, _, _, _ = global, old, self, v1, v2 + self = uintptr(___get_tp(tls)) + old = (*t__pthread)(unsafe.Pointer(self)).Flocale + global = uintptr(unsafe.Pointer(&X__libc)) + 32 + if new1 != 0 { + if new1 == uintptr(-Int32FromInt32(1)) { + v1 = global + } else { + v1 = new1 + } + (*t__pthread)(unsafe.Pointer(self)).Flocale = v1 + } + if old == global { + v2 = uintptr(-Int32FromInt32(1)) + } else { + v2 = old + } + return v2 +} + +func Xuselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__uselocale(tls, new1) +} + +// C documentation +// +// /* FIXME: stub */ +func X__wcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscmp(tls, l, r) +} + +func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* FIXME: stub */ +func Xwcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, locale) +} + +// C documentation +// +// /* collate only by code points */ +func X__wcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xwcslen(tls, src) + if l < n { + Xwmemcpy(tls, dest, src, l+uint32(1)) + } else { + if n != 0 { + Xwmemcpy(tls, dest, src, n-uint32(1)) + *(*Twchar_t)(unsafe.Pointer(dest + uintptr(n-uint32(1))*4)) = 0 + } + } + return l +} + +func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xwcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, loc) +} + +func Xreallocarray(tls *TLS, ptr uintptr, m Tsize_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ptr=%v m=%v n=%v, (%v:)", tls, ptr, m, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n != 0 && m > uint32(-Int32FromInt32(1))/n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + return Xrealloc(tls, ptr, m*n) +} + +const LDBL_EPSILON2 = 0 +const LDBL_MAX2 = 0 +const LDBL_MIN2 = 0 + +var _C1 = float64(0.0416666666666666) /* 0x3FA55555, 0x5555554C */ +var _C2 = -Float64FromFloat64(0.001388888888887411) /* 0xBF56C16C, 0x16C15177 */ +var _C3 = float64(2.480158728947673e-05) /* 0x3EFA01A0, 0x19CB1590 */ +var _C4 = -Float64FromFloat64(2.7557314351390663e-07) /* 0xBE927E4F, 0x809C52AD */ +var _C5 = float64(2.087572321298175e-09) /* 0x3E21EE9E, 0xBDB4B1C4 */ +var _C6 = -Float64FromFloat64(1.1359647557788195e-11) /* 0xBDA8FAE9, 0xBE8838D4 */ + +func X__cos(tls *TLS, x float64, y float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hz, r, w, z Tdouble_t + _, _, _, _ = hz, r, w, z + z = x * x + w = z * z + r = z*(_C1+z*(float64(_C2)+z*_C3)) + w*w*(float64(_C4)+z*(_C5+z*float64(_C6))) + hz = Float64FromFloat64(0.5) * z + w = Float64FromFloat64(1) - hz + return float64(w + (Float64FromFloat64(1) - w - hz + (z*r - x*y))) +} + +// C documentation +// +// /* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ + +var _C0 = -Float64FromFloat64(0.499999997251031) /* -0.499999997251031003120 */ +var _C11 = float64(0.04166662332373906) /* 0.0416666233237390631894 */ +var _C21 = -Float64FromFloat64(0.001388676377460993) /* -0.00138867637746099294692 */ +var _C31 = float64(2.439044879627741e-05) /* 0.0000243904487962774090654 */ + +func X__cosdf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w, z Tdouble_t + _, _, _ = r, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = float64(_C21) + z*_C31 + return float32(Float64FromFloat64(1) + z*float64(_C0) + w*_C11 + w*z*r) +} + +// C documentation +// +// /* k is such that k*ln2 has minimal relative error and x - kln2 > log(DBL_MIN) */ +var _k2 = int32(2043) +var _kln22 = float64(1416.0996898839683) + +// C documentation +// +// /* exp(x)/2 for x >= log(DBL_MAX), slightly better than 0.5*exp(x/2)*exp(x/2) */ +func X__expo2(tls *TLS, x float64, sign float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float64 + var v1 Tuint64_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint64(uint32(Int32FromInt32(0x3ff)+_k2/Int32FromInt32(2))< log(FLT_MIN) */ +var _k3 = int32(235) +var _kln23 = Float32FromFloat32(162.88958740234375) + +// C documentation +// +// /* expf(x)/2 for x >= log(FLT_MAX), slightly better than 0.5f*expf(x/2)*expf(x/2) */ +func X__expo2f(tls *TLS, x float32, sign float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float32 + var v1 Tuint32_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint32(Int32FromInt32(0x7f)+_k3/Int32FromInt32(2)) << int32(23) + scale = *(*float32)(unsafe.Pointer(&v1)) + /* exp(x - k ln2) * 2**(k-1) */ + /* in directed rounding correct sign before rounding or overflow is important */ + return Xexpf(tls, x-_kln23) * (sign * scale) * scale +} + +func X__fpclassify(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + if *(*Tuint64_t)(unsafe.Pointer(bp))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(e != 0) { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return X__fpclassify(tls, x) +} + +const pio2_hi = 0 +const pio2_lo = 0 + +func X__math_divzero(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float64 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float64FromFloat64(1) + } else { + v1 = float64(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / float64(0) +} + +func X__math_divzerof(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float32 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float32FromFloat32(1) + } else { + v1 = Float32FromFloat32(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / Float32FromFloat32(0) +} + +func X__math_invalid(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_invalidf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_oflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(3.105036184601418e+231)) +} + +func X__math_oflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(1.5845632502852868e+29)) +} + +func X__math_uflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(1.2882297539194267e-231)) +} + +func X__math_uflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(2.524354896707238e-29)) +} + +func X__math_xflow(tls *TLS, sign Tuint32_t, y2 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float64 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +func X__math_xflowf(tls *TLS, sign Tuint32_t, y2 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float32 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +const DBL_EPSILON1 = 2.220446049250313e-16 +const EPS = 0 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 33 bit of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// * pio2_2: second 33 bit of pi/2 +// * pio2_2t: pi/2 - (pio2_1+pio2_2) +// * pio2_3: third 33 bit of pi/2 +// * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +// */ + +var _toint = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio4 = float64(0.7853981633974483) +var _invpio2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_1 = float64(1.5707963267341256) /* 0x3FF921FB, 0x54400000 */ +var _pio2_1t = float64(6.077100506506192e-11) /* 0x3DD0B461, 0x1A626331 */ +var _pio2_2 = float64(6.077100506303966e-11) /* 0x3DD0B461, 0x1A600000 */ +var _pio2_2t = float64(2.0222662487959506e-21) /* 0x3BA3198A, 0x2E037073 */ +var _pio2_3 = float64(2.0222662487111665e-21) /* 0x3BA3198A, 0x2E000000 */ +var _pio2_3t = float64(8.4784276603689e-32) /* 0x397B839A, 0x252049C1 */ + +// C documentation +// +// /* caller must handle the case when reduction is not needed: |x| ~<= pi/4 */ +func X__rem_pio2(tls *TLS, x float64, y uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey, i, n, sign int32 + var fn, r, t, w, z Tdouble_t + var ix Tuint32_t + var v2 float64 + var _ /* tx at bp+8 */ [3]float64 + var _ /* ty at bp+32 */ [2]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, fn, i, ix, n, r, sign, t, w, z, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix <= uint32(0x400f6a7a) { /* |x| ~<= 5pi/4 */ + if ix&uint32(0xfffff) == uint32(0x921fb) { /* |x| ~= pi/2 or 2pi/2 */ + goto medium + } /* cancellation -- use medium case */ + if ix <= uint32(0x4002d97c) { /* |x| ~<= 3pi/4 */ + if !(sign != 0) { + z = x - _pio2_1 /* one round good to 85 bits */ + *(*float64)(unsafe.Pointer(y)) = z - _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - _pio2_1t + return int32(1) + } else { + z = x + _pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + _pio2_1t + return -int32(1) + } + } else { + if !(sign != 0) { + z = float64(x - Float64FromInt32(2)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z - float64(Float64FromInt32(2)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - float64(Float64FromInt32(2)*_pio2_1t) + return int32(2) + } else { + z = float64(x + Float64FromInt32(2)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z + float64(Float64FromInt32(2)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + float64(Float64FromInt32(2)*_pio2_1t) + return -int32(2) + } + } + } + if ix <= uint32(0x401c463b) { /* |x| ~<= 9pi/4 */ + if ix <= uint32(0x4015fdbc) { /* |x| ~<= 7pi/4 */ + if ix == uint32(0x4012d97c) { /* |x| ~= 3pi/2 */ + goto medium + } + if !(sign != 0) { + z = float64(x - Float64FromInt32(3)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z - float64(Float64FromInt32(3)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - float64(Float64FromInt32(3)*_pio2_1t) + return int32(3) + } else { + z = float64(x + Float64FromInt32(3)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z + float64(Float64FromInt32(3)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + float64(Float64FromInt32(3)*_pio2_1t) + return -int32(3) + } + } else { + if ix == uint32(0x401921fb) { /* |x| ~= 4pi/2 */ + goto medium + } + if !(sign != 0) { + z = float64(x - Float64FromInt32(4)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z - float64(Float64FromInt32(4)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - float64(Float64FromInt32(4)*_pio2_1t) + return int32(4) + } else { + z = float64(x + Float64FromInt32(4)*_pio2_1) + *(*float64)(unsafe.Pointer(y)) = z + float64(Float64FromInt32(4)*_pio2_1t) + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + float64(Float64FromInt32(4)*_pio2_1t) + return -int32(4) + } + } + } + if !(ix < uint32(0x413921fb)) { + goto _1 + } /* |x| ~< 2^20*(pi/2), medium size */ + goto medium +medium: + ; + /* rint(x/(pi/2)) */ + fn = x*_invpio2 + float64(_toint) - float64(_toint) + n = int32(fn) + r = x - fn*_pio2_1 + w = fn * _pio2_1t /* 1st round, good to 85 bits */ + /* Matters with directed rounding. */ + if r-w < -_pio4 { + n-- + fn-- + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } else { + if r-w > _pio4 { + n++ + fn++ + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } + } + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + ex = int32(ix >> int32(20)) + if ex-ey > int32(16) { /* 2nd round, good to 118 bits */ + t = r + w = fn * _pio2_2 + r = t - w + w = fn*_pio2_2t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if ex-ey > int32(49) { /* 3rd round, good to 151 bits, covers all cases */ + t = r + w = fn * _pio2_3 + r = t - w + w = fn*_pio2_3t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + } + } + *(*float64)(unsafe.Pointer(y + 1*8)) = r - *(*float64)(unsafe.Pointer(y)) - w + return n +_1: + ; + /* + * all other (large) arguments + */ + if ix >= uint32(0x7ff00000) { /* x is inf or NaN */ + v2 = x - x + *(*float64)(unsafe.Pointer(y + 1*8)) = v2 + *(*float64)(unsafe.Pointer(y)) = v2 + return 0 + } + /* set z = scalbn(|x|,-ilogb(x)+23) */ + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(Int32FromInt32(0x3ff)+Int32FromInt32(23)) << Int32FromInt32(52) + z = *(*float64)(unsafe.Pointer(bp)) + i = 0 + for { + if !(i < int32(2)) { + break + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = float64(int32(z)) + z = (z - (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i]) * Float64FromFloat64(1.6777216e+07) + goto _3 + _3: + ; + i++ + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = z + /* skip zero terms, first term is non-zero */ + for (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] == float64(0) { + i-- + } + n = X__rem_pio2_large(tls, bp+8, bp+32, int32(ix>>Int32FromInt32(20))-(Int32FromInt32(0x3ff)+Int32FromInt32(23)), i+int32(1), int32(1)) + if sign != 0 { + *(*float64)(unsafe.Pointer(y)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return -n + } + *(*float64)(unsafe.Pointer(y)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return n +} + +const DBL_EPSILON2 = 0 + +var _init_jk = [4]int32{ + 0: int32(3), + 1: int32(4), + 2: int32(4), + 3: int32(6), +} /* initial value for jk */ + +// C documentation +// +// /* +// * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi +// * +// * integer array, contains the (24*i)-th to (24*i+23)-th +// * bit of 2/pi after binary point. The corresponding +// * floating value is +// * +// * ipio2[i] * 2^(-24(i+1)). +// * +// * NB: This table must have at least (e0-3)/24 + jk terms. +// * For quad precision (e0 <= 16360, jk = 6), this is 686. +// */ +var _ipio2 = [66]Tint32_t{ + 0: int32(0xA2F983), + 1: int32(0x6E4E44), + 2: int32(0x1529FC), + 3: int32(0x2757D1), + 4: int32(0xF534DD), + 5: int32(0xC0DB62), + 6: int32(0x95993C), + 7: int32(0x439041), + 8: int32(0xFE5163), + 9: int32(0xABDEBB), + 10: int32(0xC561B7), + 11: int32(0x246E3A), + 12: int32(0x424DD2), + 13: int32(0xE00649), + 14: int32(0x2EEA09), + 15: int32(0xD1921C), + 16: int32(0xFE1DEB), + 17: int32(0x1CB129), + 18: int32(0xA73EE8), + 19: int32(0x8235F5), + 20: int32(0x2EBB44), + 21: int32(0x84E99C), + 22: int32(0x7026B4), + 23: int32(0x5F7E41), + 24: int32(0x3991D6), + 25: int32(0x398353), + 26: int32(0x39F49C), + 27: int32(0x845F8B), + 28: int32(0xBDF928), + 29: int32(0x3B1FF8), + 30: int32(0x97FFDE), + 31: int32(0x05980F), + 32: int32(0xEF2F11), + 33: int32(0x8B5A0A), + 34: int32(0x6D1F6D), + 35: int32(0x367ECF), + 36: int32(0x27CB09), + 37: int32(0xB74F46), + 38: int32(0x3F669E), + 39: int32(0x5FEA2D), + 40: int32(0x7527BA), + 41: int32(0xC7EBE5), + 42: int32(0xF17B3D), + 43: int32(0x0739F7), + 44: int32(0x8A5292), + 45: int32(0xEA6BFB), + 46: int32(0x5FB11F), + 47: int32(0x8D5D08), + 48: int32(0x560330), + 49: int32(0x46FC7B), + 50: int32(0x6BABF0), + 51: int32(0xCFBC20), + 52: int32(0x9AF436), + 53: int32(0x1DA9E3), + 54: int32(0x91615E), + 55: int32(0xE61B08), + 56: int32(0x659985), + 57: int32(0x5F14A0), + 58: int32(0x68408D), + 59: int32(0xFFD880), + 60: int32(0x4D7327), + 61: int32(0x310606), + 62: int32(0x1556CA), + 63: int32(0x73A8C9), + 64: int32(0x60E27B), + 65: int32(0xC08C6B), +} + +var _PIo2 = [8]float64{ + 0: float64(1.570796251296997), + 1: float64(7.549789415861596e-08), + 2: float64(5.390302529957765e-15), + 3: float64(3.282003415807913e-22), + 4: float64(1.270655753080676e-29), + 5: float64(1.2293330898111133e-36), + 6: float64(2.7337005381646456e-44), + 7: float64(2.1674168387780482e-51), +} + +func X__rem_pio2_large(tls *TLS, x uintptr, y uintptr, e0 int32, nx int32, prec int32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v e0=%v nx=%v prec=%v, (%v:)", tls, x, y, e0, nx, prec, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var carry, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q0 Tint32_t + var f, q [20]float64 + var fw, z, v2, v20, v22, v24 float64 + var _ /* fq at bp+80 */ [20]float64 + var _ /* iq at bp+0 */ [20]Tint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = carry, f, fw, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q, q0, z, v2, v20, v22, v24 + /* initialize jk*/ + jk = _init_jk[prec] + jp = jk + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx - int32(1) + jv = (e0 - int32(3)) / int32(24) + if jv < 0 { + jv = 0 + } + q0 = e0 - int32(24)*(jv+int32(1)) + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv - jx + m = jx + jk + i = 0 + for { + if !(i <= m) { + break + } + if j < 0 { + v2 = float64(0) + } else { + v2 = float64(_ipio2[j]) + } + f[i] = v2 + goto _1 + _1: + ; + i++ + j++ + } + /* compute q[0],q[1],...q[jk] */ + i = 0 + for { + if !(i <= jk) { + break + } + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _4 + _4: + ; + j++ + } + q[i] = fw + goto _3 + _3: + ; + i++ + } + jz = jk + goto recompute +recompute: + ; + /* distill q[] into iq[] reversingly */ + i = 0 + j = jz + z = q[jz] + for { + if !(j > 0) { + break + } + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + z = q[j-int32(1)] + fw + goto _5 + _5: + ; + i++ + j-- + } + /* compute n */ + z = Xscalbn(tls, z, q0) /* actual value of z */ + z -= float64(8) * Xfloor(tls, z*float64(0.125)) /* trim off integer >= 8 */ + n = int32(z) + z -= float64(n) + ih = 0 + if q0 > 0 { /* need iq[jz-1] to determine n */ + i = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(24) - q0) + n += i + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) -= i << (int32(24) - q0) + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(23) - q0) + } else { + if q0 == 0 { + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> int32(23) + } else { + if z >= float64(0.5) { + ih = int32(2) + } + } + } + if ih > 0 { /* q > 0.5 */ + n += int32(1) + carry = 0 + i = 0 + for { + if !(i < jz) { + break + } /* compute 1-q */ + j = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + if carry == 0 { + if j != 0 { + carry = int32(1) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0x1000000) - j + } + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0xffffff) - j + } + goto _6 + _6: + ; + i++ + } + if q0 > 0 { /* rare case: chance is 1 in 12 */ + switch q0 { + case int32(1): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x7fffff) + case int32(2): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x3fffff) + break + } + } + if ih == int32(2) { + z = float64(1) - z + if carry != 0 { + z -= Xscalbn(tls, float64(1), q0) + } + } + } + /* check if recomputation is needed */ + if z == float64(0) { + j = 0 + i = jz - int32(1) + for { + if !(i >= jk) { + break + } + j |= (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + goto _7 + _7: + ; + i-- + } + if j == 0 { /* need recomputation */ + k = int32(1) + for { + if !((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jk-k] == 0) { + break + } + goto _8 + _8: + ; + k++ + } /* k = no. of terms needed */ + i = jz + int32(1) + for { + if !(i <= jz+k) { + break + } /* add q[jz+1] to q[jz+k] */ + f[jx+i] = float64(_ipio2[jv+i]) + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _10 + _10: + ; + j++ + } + q[i] = fw + goto _9 + _9: + ; + i++ + } + jz += k + goto recompute + } + } + /* chop off zero terms */ + if z == float64(0) { + jz -= int32(1) + q0 -= int32(24) + for (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] == 0 { + jz-- + q0 -= int32(24) + } + } else { /* break z into 24-bit if necessary */ + z = Xscalbn(tls, z, -q0) + if z >= float64(1.6777216e+07) { + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + jz += int32(1) + q0 += int32(24) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(fw) + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z) + } + } + /* convert integer "bit" chunk to floating-point value */ + fw = Xscalbn(tls, float64(1), q0) + i = jz + for { + if !(i >= 0) { + break + } + q[i] = fw * float64((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i]) + fw *= float64(5.960464477539063e-08) + goto _11 + _11: + ; + i-- + } + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + i = jz + for { + if !(i >= 0) { + break + } + fw = float64(0) + k = Int32FromInt32(0) + for { + if !(k <= jp && k <= jz-i) { + break + } + fw += _PIo2[k] * q[i+k] + goto _13 + _13: + ; + k++ + } + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[jz-i] = fw + goto _12 + _12: + ; + i-- + } + /* compress fq[] into y[] */ + switch prec { + case 0: + goto _14 + case int32(2): + goto _15 + case int32(1): + goto _16 + case int32(3): + goto _17 + } + goto _18 +_14: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _19 + _19: + ; + i-- + } + if ih == 0 { + v20 = fw + } else { + v20 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v20 + goto _18 +_16: + ; +_15: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _21 + _21: + ; + i-- + } + // TODO: drop excess precision here once double_t is used + fw = fw + if ih == 0 { + v22 = fw + } else { + v22 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v22 + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] - fw + i = int32(1) + for { + if !(i <= jz) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _23 + _23: + ; + i++ + } + if ih == 0 { + v24 = fw + } else { + v24 = -fw + } + *(*float64)(unsafe.Pointer(y + 1*8)) = v24 + goto _18 +_17: + ; /* painful */ + i = jz +_27: + ; + if !(i > 0) { + goto _25 + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _26 +_26: + ; + i-- + goto _27 + goto _25 +_25: + ; + i = jz + for { + if !(i > int32(1)) { + break + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _28 + _28: + ; + i-- + } + fw = float64(0) + i = jz + for { + if !(i >= int32(2)) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _29 + _29: + ; + i-- + } + if ih == 0 { + *(*float64)(unsafe.Pointer(y)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = fw + } else { + *(*float64)(unsafe.Pointer(y)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = -fw + } +_18: + ; + return n & int32(7) +} + +const DBL_EPSILON3 = 2.220446049250313e-16 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 25 bits of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// */ + +var _toint1 = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio41 = float64(0.7853981852531433) +var _invpio21 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_11 = float64(1.5707963109016418) /* 0x3FF921FB, 0x50000000 */ +var _pio2_1t1 = float64(1.5893254773528196e-08) /* 0x3E5110b4, 0x611A6263 */ + +func X__rem_pio2f(tls *TLS, x float32, y uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e0, n, sign int32 + var fn Tdouble_t + var ix Tuint32_t + var _ /* tx at bp+8 */ [1]float64 + var _ /* ty at bp+16 */ [1]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e0, fn, ix, n, sign + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + /* 25+53 bit pi is good enough for medium size */ + if ix < uint32(0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */ + /* Use a specialized rint() to get fn. */ + fn = float64(x)*_invpio21 + float64(_toint1) - float64(_toint1) + n = int32(fn) + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + /* Matters with directed rounding. */ + if *(*float64)(unsafe.Pointer(y)) < -_pio41 { + n-- + fn-- + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } else { + if *(*float64)(unsafe.Pointer(y)) > _pio41 { + n++ + fn++ + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } + } + return n + } + if ix >= uint32(0x7f800000) { /* x is inf or NaN */ + *(*float64)(unsafe.Pointer(y)) = float64(x - x) + return 0 + } + /* scale x into [2^23, 2^24-1] */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + e0 = int32(ix>>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(23))) /* e0 = ilogb(|x|)-23, positive */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix - uint32(e0< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) +} + +// C documentation +// +// // FIXME: macro in math.h +func X__signbitf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) +} + +func X__signbitl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__signbit(tls, x) +} + +var _S1 = -Float64FromFloat64(0.16666666666666632) /* 0xBFC55555, 0x55555549 */ +var _S2 = float64(0.00833333333332249) /* 0x3F811111, 0x1110F8A6 */ +var _S3 = -Float64FromFloat64(0.0001984126982985795) /* 0xBF2A01A0, 0x19C161D5 */ +var _S4 = float64(2.7557313707070068e-06) /* 0x3EC71DE3, 0x57B1FE7D */ +var _S5 = -Float64FromFloat64(2.5050760253406863e-08) /* 0xBE5AE5E6, 0x8A2B9CEB */ +var _S6 = float64(1.58969099521155e-10) /* 0x3DE5D93A, 0x5ACFD57C */ + +func X__sin(tls *TLS, x float64, y float64, iy int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v iy=%v, (%v:)", tls, x, y, iy, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v, w, z Tdouble_t + _, _, _, _ = r, v, w, z + z = x * x + w = z * z + r = _S2 + z*(float64(_S3)+z*_S4) + z*w*(float64(_S5)+z*_S6) + v = z * x + if iy == 0 { + return x + v*(float64(_S1)+z*r) + } else { + return x - (z*(float64(0.5)*y-v*r) - y - v*float64(_S1)) + } + return r1 +} + +// C documentation +// +// /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ + +var _S11 = -Float64FromFloat64(0.16666666641626524) /* -0.166666666416265235595 */ +var _S21 = float64(0.008333329385889463) /* 0.0083333293858894631756 */ +var _S31 = -Float64FromFloat64(0.00019839334836096632) /* -0.000198393348360966317347 */ +var _S41 = float64(2.718311493989822e-06) /* 0.0000027183114939898219064 */ + +func X__sindf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, w, z Tdouble_t + _, _, _, _ = r, s, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = float64(_S31) + z*_S41 + s = z * x + return float32(x + s*(float64(_S11)+z*_S21) + s*w*r) +} + +var _T = [13]float64{ + 0: float64(0.3333333333333341), + 1: float64(0.13333333333320124), + 2: float64(0.05396825397622605), + 3: float64(0.021869488294859542), + 4: float64(0.0088632398235993), + 5: float64(0.0035920791075913124), + 6: float64(0.0014562094543252903), + 7: float64(0.0005880412408202641), + 8: float64(0.0002464631348184699), + 9: float64(7.817944429395571e-05), + 10: float64(7.140724913826082e-05), + 11: -Float64FromFloat64(1.8558637485527546e-05), + 12: float64(2.590730518636337e-05), +} +var _pio42 = float64(0.7853981633974483) /* 3FE921FB, 54442D18 */ +var _pio4lo = float64(3.061616997868383e-17) /* 3C81A626, 33145C07 */ + +func X__tan(tls *TLS, x float64, y float64, odd int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v odd=%v, (%v:)", tls, x, y, odd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a, r, s, v, w, z, v1, v3 Tdouble_t + var a0, w0 float64 + var big, sign int32 + var hx Tuint32_t + var v2, v4 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, a0, big, hx, r, s, sign, v, w, w0, z, v1, v2, v3, v4 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + big = BoolInt32(hx&uint32(0x7fffffff) >= uint32(0x3FE59428)) /* |x| >= 0.6744 */ + if big != 0 { + sign = int32(hx >> int32(31)) + if sign != 0 { + x = -x + y = -y + } + x = _pio42 - x + (_pio4lo - y) + y = float64(0) + } + z = x * x + w = z * z + /* + * Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = _T[int32(1)] + w*(_T[int32(3)]+w*(_T[int32(5)]+w*(_T[int32(7)]+w*(_T[int32(9)]+w*_T[int32(11)])))) + v = z * (_T[int32(2)] + w*(_T[int32(4)]+w*(_T[int32(6)]+w*(_T[int32(8)]+w*(_T[int32(10)]+w*_T[int32(12)]))))) + s = z * x + r = y + z*(s*(r+v)+y) + s*_T[0] + w = x + r + if big != 0 { + s = float64(int32(1) - int32(2)*odd) + v = s - Float64FromFloat64(2)*(x+(r-w*w/(w+s))) + if sign != 0 { + v1 = -v + } else { + v1 = v + } + return v1 + } + if !(odd != 0) { + return w + } + /* -1.0/(x+r) has up to 2ulp error, so compute it accurately */ + w0 = w + v2 = *(*Tuint64_t)(unsafe.Pointer(&w0))>>Int32FromInt32(32)<>Int32FromInt32(32)< %v", r1) }() + } + var r, s, t, u, w, z, v1 Tdouble_t + _, _, _, _, _, _, _ = r, s, t, u, w, z, v1 + z = x * x + /* + * Split up the polynomial into small independent terms to give + * opportunities for parallel evaluation. The chosen splitting is + * micro-optimized for Athlons (XP, X64). It costs 2 multiplications + * relative to Horner's method on sequential machines. + * + * We add the small terms from lowest degree up for efficiency on + * non-sequential machines (the lowest degree terms tend to be ready + * earlier). Apart from this, we don't care about order of + * operations, and don't need to to care since we have precision to + * spare. However, the chosen splitting is good for accuracy too, + * and would give results as accurate as Horner's method if the + * small terms were added from highest degree down. + */ + r = _T1[int32(4)] + z*_T1[int32(5)] + t = _T1[int32(2)] + z*_T1[int32(3)] + w = z * z + s = z * x + u = _T1[0] + z*_T1[int32(1)] + r = x + s*u + s*w*(t+w*r) + if odd != 0 { + v1 = float64(-Float64FromFloat64(1)) / r + } else { + v1 = r + } + return float32(v1) +} + +var _pio2_hi = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +var _pS0 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS1 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS2 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS3 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS4 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS5 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS1 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS2 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS3 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS4 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = float64(z * (_pS0 + z*(_pS1+z*(_pS2+z*(_pS3+z*(_pS4+z*_pS5)))))) + q = float64(float64(1) + z*(_qS1+z*(_qS2+z*(_qS3+z*_qS4)))) + return p / q +} + +func Xacos(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, df, s, w, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, df, hx, ix, lx, s, w, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* acos(1)=0, acos(-1)=pi */ + if hx>>int32(31) != 0 { + return Float64FromInt32(2)*_pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + if ix <= uint32(0x3c600000) { /* |x| < 2**-57 */ + return _pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return _pio2_hi - (x - (_pio2_lo - x*_R(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (float64(1) + x) * float64(0.5) + s = Xsqrt(tls, z) + w = _R(tls, z)*s - _pio2_lo + return Float64FromInt32(2) * (_pio2_hi - (s + w)) + } + /* x > 0.5 */ + z = (float64(1) - x) * float64(0.5) + s = Xsqrt(tls, z) + df = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&df))>>Int32FromInt32(32)< %v", r) }() + } + var c, df, s, w, z float32 + var hx, ix, v1 Tuint32_t + _, _, _, _, _, _, _, _ = c, df, hx, ix, s, w, z, v1 + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3f800000) { + if ix == uint32(0x3f800000) { + if hx>>int32(31) != 0 { + return Float32FromInt32(2)*_pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return Float32FromInt32(0) + } + return Float32FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3f000000) { + if ix <= uint32(0x32800000) { /* |x| < 2**-26 */ + return _pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return _pio2_hi1 - (x - (_pio2_lo1 - x*_R1(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (Float32FromInt32(1) + x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + w = _R1(tls, z)*s - _pio2_lo1 + return Float32FromInt32(2) * (_pio2_hi1 - (s + w)) + } + /* x > 0.5 */ + z = (Float32FromInt32(1) - x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + hx = *(*Tuint32_t)(unsafe.Pointer(&s)) + v1 = hx & uint32(0xfffff000) + df = *(*float32)(unsafe.Pointer(&v1)) + c = (z - df*df) / (s + df) + w = _R1(tls, z)*s + c + return Float32FromInt32(2) * (df + w) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacosh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e uint32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = e + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + /* x < 1 domain error is handled in the called functions */ + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| < 2, up to 2ulp error in [1,1.125] */ + return Xlog1p(tls, x-Float64FromInt32(1)+Xsqrt(tls, (x-Float64FromInt32(1))*(x-Float64FromInt32(1))+Float64FromInt32(2)*(x-Float64FromInt32(1)))) + } + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| < 0x1p26 */ + return Xlog(tls, Float64FromInt32(2)*x-Float64FromInt32(1)/(x+Xsqrt(tls, x*x-Float64FromInt32(1)))) + } + /* |x| >= 0x1p26 or nan */ + return Xlog(tls, x) + float64(0.6931471805599453) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacoshf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = a + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + a = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if a < uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 0x1p12 or x <= -2 or nan */ + return Xlogf(tls, x) + Float32FromFloat32(0.6931471805599453) +} + +func Xacoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacosh(tls, x) +} + +func Xacosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacos(tls, x) +} + +var _pio2_hi2 = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo2 = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +/* coefficients for R(x^2) */ +var _pS02 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS12 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS22 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS31 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS41 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS51 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS12 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS21 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS31 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS41 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R2(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = float64(z * (_pS02 + z*(_pS12+z*(_pS22+z*(_pS31+z*(_pS41+z*_pS51)))))) + q = float64(float64(1) + z*(_qS12+z*(_qS21+z*(_qS31+z*_qS41)))) + return p / q +} + +func Xasin(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, f, r, s, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, f, hx, ix, lx, r, s, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* asin(1) = +-pi/2 with inexact */ + return x*_pio2_hi2 + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + /* if 0x1p-1022 <= |x| < 0x1p-26, avoid raising underflow */ + if ix < uint32(0x3e500000) && ix >= uint32(0x00100000) { + return x + } + return x + x*_R2(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float64FromInt32(1) - Xfabs(tls, x)) * float64(0.5) + s = Xsqrt(tls, z) + r = _R2(tls, z) + if ix >= uint32(0x3fef3333) { /* if |x| > 0.975 */ + x = _pio2_hi2 - (Float64FromInt32(2)*(s+s*r) - _pio2_lo2) + } else { + /* f+c = sqrt(z) */ + f = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&f))>>Int32FromInt32(32)<>int32(31) != 0 { + return -x + } + return x +} + +var _pio2 = float64(1.5707963267948966) + +/* coefficients for R(x^2) */ +var _pS03 = float32(0.16666586697) +var _pS13 = float32(-Float64FromFloat64(0.042743422091)) +var _pS23 = float32(-Float64FromFloat64(0.008656363003)) +var _qS13 = float32(-Float64FromFloat64(0.7066296339)) + +func _R3(tls *TLS, z float32) (r float32) { + var p, q Tfloat_t + _, _ = p, q + p = float64(z * (_pS03 + z*(_pS13+z*_pS23))) + q = float64(Float32FromFloat32(1) + z*_qS13) + return float32(p / q) +} + +func Xasinf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var hx, ix Tuint32_t + var s float64 + var z float32 + _, _, _, _ = hx, ix, s, z + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x3f800000) { /* |x| >= 1 */ + if ix == uint32(0x3f800000) { /* |x| == 1 */ + return float32(float64(x)*_pio2 + Float64FromFloat32(7.52316384526264e-37)) + } /* asin(+-1) = +-pi/2 with inexact */ + return Float32FromInt32(0) / (x - x) /* asin(|x|>1) is NaN */ + } + if ix < uint32(0x3f000000) { /* |x| < 0.5 */ + /* if 0x1p-126 <= |x| < 0x1p-12, avoid raising underflow */ + if ix < uint32(0x39800000) && ix >= uint32(0x00800000) { + return x + } + return x + x*_R3(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float32FromInt32(1) - Xfabsf(tls, x)) * Float32FromFloat32(0.5) + s = Xsqrt(tls, float64(z)) + x = float32(_pio2 - Float64FromInt32(2)*(s+s*float64(_R3(tls, z)))) + if hx>>int32(31) != 0 { + return -x + } + return x +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| >= 0x1p26 or inf or nan */ + x3 = Xlog(tls, x3) + float64(0.6931471805599453) + } else { + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| >= 2 */ + x3 = Xlog(tls, Float64FromInt32(2)*x3+Float64FromInt32(1)/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+x3)) + } else { + if e >= uint32(Int32FromInt32(0x3ff)-Int32FromInt32(26)) { + /* |x| >= 0x1p-26, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1p(tls, x3+x3*x3/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+Float64FromInt32(1))) + } else { + /* |x| < 0x1p-26, raise inexact if x != 0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tuint32_t + var s uint32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = i, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = i + x3 = *(*float32)(unsafe.Pointer(bp)) + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(12)<= 0x1p12 or inf or nan */ + x3 = Xlogf(tls, x3) + Float32FromFloat32(0.6931471805599453) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 2 */ + x3 = Xlogf(tls, Float32FromInt32(2)*x3+Float32FromInt32(1)/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+x3)) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)<= 0x1p-12, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1pf(tls, x3+x3*x3/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+Float32FromInt32(1))) + } else { + /* |x| < 0x1p-12, raise inexact if x!=0 */ + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +func Xasinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasinh(tls, x) +} + +func Xasinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasin(tls, x) +} + +var _atanhi = [4]float64{ + 0: float64(0.4636476090008061), + 1: float64(0.7853981633974483), + 2: float64(0.982793723247329), + 3: float64(1.5707963267948966), +} + +var _atanlo = [4]float64{ + 0: float64(2.2698777452961687e-17), + 1: float64(3.061616997868383e-17), + 2: float64(1.3903311031230998e-17), + 3: float64(6.123233995736766e-17), +} + +var _aT = [11]float64{ + 0: float64(0.3333333333333293), + 1: -Float64FromFloat64(0.19999999999876483), + 2: float64(0.14285714272503466), + 3: -Float64FromFloat64(0.11111110405462356), + 4: float64(0.09090887133436507), + 5: -Float64FromFloat64(0.0769187620504483), + 6: float64(0.06661073137387531), + 7: -Float64FromFloat64(0.058335701337905735), + 8: float64(0.049768779946159324), + 9: -Float64FromFloat64(0.036531572744216916), + 10: float64(0.016285820115365782), +} + +func Xatan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tdouble_t + var y float32 + var y1, y2 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x44100000) { /* if |x| >= 2^66 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, __u2 Tuint64_t + var ix, iy, lx, ly, m Tuint32_t + var z, v6, v7 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, __u2, ix, iy, lx, ly, m, z, v1, v3, v5, v6, v7 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<> int32(32)) + lx = uint32(__u1) + __u2 = *(*Tuint64_t)(unsafe.Pointer(&y)) + iy = uint32(__u2 >> int32(32)) + ly = uint32(__u2) + if ix-uint32(0x3ff00000)|lx == uint32(0) { /* x = 1.0 */ + return Xatan(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix = ix & uint32(0x7fffffff) + iy = iy & uint32(0x7fffffff) + /* when y = 0 */ + if iy|ly == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix|lx == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi / Float64FromInt32(2) + } else { + v6 = _pi / Float64FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7ff00000) { + if iy == uint32(0x7ff00000) { + switch m { + case uint32(0): + return _pi / Float64FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi / Float64FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float64FromInt32(3) * _pi / Float64FromInt32(4) /* atan(+INF,-INF) */ + case uint32(3): + return float64(-Int32FromInt32(3)) * _pi / Float64FromInt32(4) /* atan(-INF,-INF) */ + } + } else { + switch m { + case uint32(0): + return float64(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float64FromFloat64(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi /* atan(+...,-INF) */ + case uint32(3): + return -_pi /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p64 */ + if ix+uint32(Int32FromInt32(64)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix, iy, m Tuint32_t + var z, v6, v7 float32 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _ = ix, iy, m, z, v1, v3, v5, v6, v7 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + y + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y)) + if ix == uint32(0x3f800000) { /* x=1.0 */ + return Xatanf(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix &= uint32(0x7fffffff) + iy &= uint32(0x7fffffff) + /* when y = 0 */ + if iy == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi1 /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi1 /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi1 / Float32FromInt32(2) + } else { + v6 = _pi1 / Float32FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7f800000) { + if iy == uint32(0x7f800000) { + switch m { + case uint32(0): + return _pi1 / Float32FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi1 / Float32FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float32FromInt32(3) * _pi1 / Float32FromInt32(4) /*atan(+INF,-INF)*/ + case uint32(3): + return float32(-Int32FromInt32(3)) * _pi1 / Float32FromInt32(4) /*atan(-INF,-INF)*/ + } + } else { + switch m { + case uint32(0): + return Float32FromFloat32(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float32FromFloat32(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi1 /* atan(+...,-INF) */ + case uint32(3): + return -_pi1 /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p26 */ + if ix+uint32(Int32FromInt32(26)< %v", r) }() + } + return Xatan2(tls, y, x) +} + +var _atanhi1 = [4]float32{ + 0: float32(0.46364760399), + 1: float32(0.78539812565), + 2: float32(0.98279368877), + 3: float32(1.5707962513), +} + +var _atanlo1 = [4]float32{ + 0: float32(5.012158244e-09), + 1: float32(3.7748947079e-08), + 2: float32(3.447321717e-08), + 3: float32(7.5497894159e-08), +} + +var _aT1 = [5]float32{ + 0: float32(0.33333328366), + 1: float32(-Float64FromFloat64(0.19999158382)), + 2: float32(0.14253635705), + 3: float32(-Float64FromFloat64(0.10648017377)), + 4: float32(0.061687607318), +} + +func Xatanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tfloat_t + var y float32 + var y1, y2 float64 + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x4c800000) { /* if |x| >= 2**26 */ + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + } + z = float64(_atanhi1[int32(3)] + Float32FromFloat32(7.52316384526264e-37)) + if sign != 0 { + v3 = -z + } else { + v3 = z + } + return float32(v3) + } + if ix < uint32(0x3ee00000) { /* |x| < 0.4375 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + if ix < uint32(0x00800000) { + /* raise underflow for subnormal x */ + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } + id = -int32(1) + } else { + x3 = Xfabsf(tls, x3) + if ix < uint32(0x3f980000) { /* |x| < 1.1875 */ + if ix < uint32(0x3f300000) { /* 7/16 <= |x| < 11/16 */ + id = 0 + x3 = (Float32FromFloat32(2)*x3 - Float32FromFloat32(1)) / (Float32FromFloat32(2) + x3) + } else { /* 11/16 <= |x| < 19/16 */ + id = int32(1) + x3 = (x3 - Float32FromFloat32(1)) / (x3 + Float32FromFloat32(1)) + } + } else { + if ix < uint32(0x401c0000) { /* |x| < 2.4375 */ + id = int32(2) + x3 = (x3 - Float32FromFloat32(1.5)) / (Float32FromFloat32(1) + Float32FromFloat32(1.5)*x3) + } else { /* 2.4375 <= |x| < 2**26 */ + id = int32(3) + x3 = -Float32FromFloat32(1) / x3 + } + } + } + /* end of argument reduction */ + z = float64(x3 * x3) + w = z * z + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z * (float64(_aT1[0]) + w*(float64(_aT1[int32(2)])+w*float64(_aT1[int32(4)]))) + s2 = w * (float64(_aT1[int32(1)]) + w*float64(_aT1[int32(3)])) + if id < 0 { + return float32(float64(x3) - float64(x3)*(s1+s2)) + } + z = float64(_atanhi1[id]) - (float64(x3)*(s1+s2) - float64(_atanlo1[id]) - float64(x3)) + if sign != 0 { + v4 = -z + } else { + v4 = z + } + return float32(v4) +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = e, s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + y3 = *(*float64)(unsafe.Pointer(bp)) + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(1)) { + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(32)) { + /* handle underflow */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = float32(y3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(y3)) + } else { + y2 = float64(float32(y3)) + } + } + } + } else { + /* |x| < 0.5, up to 1.7ulp error */ + y3 = float64(0.5) * Xlog1p(tls, float64(Float64FromInt32(2)*y3+Float64FromInt32(2)*y3*y3/(Float64FromInt32(1)-y3))) + } + } else { + /* avoid overflow */ + y3 = float64(0.5) * Xlog1p(tls, float64(Float64FromInt32(2)*(y3/(Float64FromInt32(1)-y3)))) + } + if s != 0 { + v1 = -y3 + } else { + v1 = y3 + } + return v1 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + y3 = float64(*(*float32)(unsafe.Pointer(bp))) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(1)< %v", r) }() + } + return Xatanh(tls, x) +} + +func Xatanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan(tls, x) +} + +var _B1 = uint32(715094163) /* B1 = (1023-1023/3-0.03306235651)*2**20 */ +var _B2 = uint32(696219795) /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */ + +// C documentation +// +// /* |1/cbrt(x) - p(x)| < 2**-23.5 (~[-7.93e-8, 7.929e-8]). */ + +var _P0 = float64(1.87595182427177) /* 0x3ffe03e6, 0x0f61e692 */ +var _P1 = -Float64FromFloat64(1.8849797954337717) /* 0xbffe28e0, 0x92f02420 */ +var _P2 = float64(1.6214297201053545) /* 0x3ff9f160, 0x4a49d6c2 */ +var _P3 = -Float64FromFloat64(0.758397934778766) /* 0xbfe844cb, 0xbee751d9 */ +var _P4 = float64(0.14599619288661245) /* 0x3fc2b000, 0xd4e4edd7 */ + +func Xcbrt(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var hx Tuint32_t + var r, s, t, w Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = hx, r, s, t, w + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx >= uint32(0x7ff00000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* + * Rough cbrt to 5 bits: + * cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3) + * where e is integral and >= 0, m is real and in [0, 1), and "/" and + * "%" are integer division and modulus with rounding towards minus + * infinity. The RHS is always >= the LHS and has a maximum relative + * error of about 1 in 16. Adding a bias of -0.03306235651 to the + * (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE + * floating point representation, for finite positive normal values, + * ordinary integer divison of the value in bits magically gives + * almost exactly the RHS of the above provided we first subtract the + * exponent bias (1023 for doubles) and later add it back. We do the + * subtraction virtually to keep e >= 0 so that ordinary integer + * division rounds towards minus infinity; this is also efficient. + */ + if hx < uint32(0x00100000) { /* zero or subnormal? */ + *(*float64)(unsafe.Pointer(bp)) = x * float64(1.8014398509481984e+16) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx == uint32(0) { + return x + } /* cbrt(0) is itself */ + hx = hx/uint32(3) + _B2 + } else { + hx = hx/uint32(3) + _B1 + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= Uint64FromUint64(1) << Int32FromInt32(63) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) + t = *(*float64)(unsafe.Pointer(bp)) + /* + * New cbrt to 23 bits: + * cbrt(x) = t*cbrt(x/t**3) ~= t*P(t**3/x) + * where P(r) is a polynomial of degree 4 that approximates 1/cbrt(r) + * to within 2**-23.5 when |r - 1| < 1/10. The rough approximation + * has produced t such than |t/cbrt(x) - 1| ~< 1/32, and cubing this + * gives us bounds for r = t**3/x. + * + * Try to optimize for parallel evaluation as in __tanf.c. + */ + r = t * t * (t / x) + t = t * (_P0 + r*(float64(_P1)+r*_P2) + r*r*r*(float64(_P3)+r*_P4)) + /* + * Round t away from zero to 23 bits (sloppily except for ensuring that + * the result is larger in magnitude than cbrt(x) but not much more than + * 2 23-bit ulps larger). With rounding towards zero, the error bound + * would be ~5/6 instead of ~4/6. With a maximum error of 2 23-bit ulps + * in the rounded t, the infinite-precision error in the Newton + * approximation barely affects third digit in the final error + * 0.667; the error in the rounded t can be up to about 3 23-bit ulps + * before the final error is larger than 0.667 ulps. + */ + *(*float64)(unsafe.Pointer(bp)) = t + *(*Tuint64_t)(unsafe.Pointer(bp)) = (*(*Tuint64_t)(unsafe.Pointer(bp)) + uint64(0x80000000)) & uint64(0xffffffffc0000000) + t = *(*float64)(unsafe.Pointer(bp)) + /* one step Newton iteration to 53 bits with error < 0.667 ulps */ + s = t * t /* t*t is exact */ + r = x / s /* error <= 0.5 ulps; |r| < |t| */ + w = t + t /* t+t is exact */ + r = (r - t) / (w + r) /* r-t is exact; w+r ~= 3*t */ + t = t + t*r /* error <= 0.5 + 0.5/3 + epsilon */ + return t +} + +var _B11 = uint32(709958130) /* B1 = (127-127.0/3-0.03306235651)*2**23 */ +var _B21 = uint32(642849266) /* B2 = (127-127.0/3-24/3-0.03306235651)*2**23 */ + +func Xcbrtf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var T, r Tdouble_t + var hx Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = T, hx, r + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if hx >= uint32(0x7f800000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* rough cbrt to 5 bits */ + if hx < uint32(0x00800000) { /* zero or subnormal? */ + if hx == uint32(0) { + return x + } /* cbrt(+-0) is itself */ + *(*float32)(unsafe.Pointer(bp)) = x * Float32FromFloat32(1.6777216e+07) + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + hx = hx/uint32(3) + _B21 + } else { + hx = hx/uint32(3) + _B11 + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= hx + /* + * First step Newton iteration (solving t*t-x/t == 0) to 16 bits. In + * double precision so that its terms can be arranged for efficiency + * without causing overflow or underflow. + */ + T = float64(*(*float32)(unsafe.Pointer(bp))) + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* + * Second step Newton iteration to 47 bits. In double precision for + * efficiency and accuracy. + */ + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* rounding to 24 bits is perfect in round-to-nearest mode */ + return float32(T) +} + +func Xcbrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcbrt(tls, x) +} + +const DBL_EPSILON5 = 2.220446049250313e-16 + +var _toint2 = float64(Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16)) + +func Xceil(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2, v1 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint2 + _toint2 - x3 + } else { + y3 = x3 + _toint2 - _toint2 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint32(8) == uint32(4) { + y = float32(y3) + } else { + if uint32(8) == uint32(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(1) + } + return v1 + } + if y3 < Float64FromInt32(0) { + return float64(x3 + y3 + Float64FromInt32(1)) + } + return x3 + y3 +} + +const DBL_EPSILON6 = 0 + +func Xceilf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*float32)(unsafe.Pointer(bp)) = float32(-Float64FromFloat64(0)) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xceil(tls, x) +} + +func Xcopysign(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) / Uint64FromInt32(2) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= *(*Tuint64_t)(unsafe.Pointer(bp + 8)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xcopysignf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xcopysignl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcopysign(tls, x, y) +} + +func Xcos(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _ = ix, n, y, y1, y2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) */ + /* raise inexact if x!=0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + return float64(1) + } + return X__cos(tls, x3, Float64FromInt32(0)) + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(1): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(2): + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + default: + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + } + return r +} + +const M_PI_23 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _c1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _c2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _c3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _c4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xcosf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y float32 + var y1, y2, v1, v2 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x != 0 */ + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + return Float32FromFloat32(1) + } + return X__cosdf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix > uint32(0x4016cbe3) { /* |x| ~> 3*pi/4 */ + if sign != 0 { + v1 = float64(x3) + _c2pio2 + } else { + v1 = float64(x3) - _c2pio2 + } + return -X__cosdf(tls, v1) + } else { + if sign != 0 { + return X__sindf(tls, float64(x3)+_c1pio2) + } else { + return X__sindf(tls, _c1pio2-float64(x3)) + } + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix > uint32(0x40afeddf) { /* |x| ~> 7*pi/4 */ + if sign != 0 { + v2 = float64(x3) + _c4pio2 + } else { + v2 = float64(x3) - _c4pio2 + } + return X__cosdf(tls, v2) + } else { + if sign != 0 { + return X__sindf(tls, float64(-x3)-_c3pio2) + } else { + return X__sindf(tls, float64(x3)-_c3pio2) + } + } + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case uint32(1): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + case uint32(2): + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + default: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_24 = 0 + +// C documentation +// +// /* cosh(x) = (exp(x) + 1/exp(x))/2 +// * = 1 + 0.5*(exp(x)-1)*(exp(x)-1)/exp(x) +// * = 1 + x*x/2 + o(x^4) +// */ +func Xcosh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y1, y2 float64 + var w Tuint32_t + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(2) */ + if w < uint32(0x3fe62e42) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26) then the 1/t is not needed */ + return float64(0.5) * (t + Float64FromInt32(1)/t) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, x3, float64(1)) + return t +} + +func Xcoshf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(2) */ + if w < uint32(0x3f317217) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< log(FLT_MAX) or nan */ + t = X__expo2f(tls, x3, Float32FromFloat32(1)) + return t +} + +func Xcoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcosh(tls, x) +} + +func Xcosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcos(tls, x) +} + +var _erx = float64(0.8450629115104675) /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx8 = float64(1.0270333367641007) /* 0x3FF06EBA, 0x8214DB69 */ +var _pp0 = float64(0.12837916709551256) /* 0x3FC06EBA, 0x8214DB68 */ +var _pp1 = -Float64FromFloat64(0.3250421072470015) /* 0xBFD4CD7D, 0x691CB913 */ +var _pp2 = -Float64FromFloat64(0.02848174957559851) /* 0xBF9D2A51, 0xDBD7194F */ +var _pp3 = -Float64FromFloat64(0.005770270296489442) /* 0xBF77A291, 0x236668E4 */ +var _pp4 = -Float64FromFloat64(2.3763016656650163e-05) /* 0xBEF8EAD6, 0x120016AC */ +var _qq1 = float64(0.39791722395915535) /* 0x3FD97779, 0xCDDADC09 */ +var _qq2 = float64(0.0650222499887673) /* 0x3FB0A54C, 0x5536CEBA */ +var _qq3 = float64(0.005081306281875766) /* 0x3F74D022, 0xC4D36B0F */ +var _qq4 = float64(0.00013249473800432164) /* 0x3F215DC9, 0x221C1A10 */ +var _qq5 = -Float64FromFloat64(3.960228278775368e-06) /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa0 = -Float64FromFloat64(0.0023621185607526594) /* 0xBF6359B8, 0xBEF77538 */ +var _pa1 = float64(0.41485611868374833) /* 0x3FDA8D00, 0xAD92B34D */ +var _pa2 = -Float64FromFloat64(0.3722078760357013) /* 0xBFD7D240, 0xFBB8C3F1 */ +var _pa3 = float64(0.31834661990116175) /* 0x3FD45FCA, 0x805120E4 */ +var _pa4 = -Float64FromFloat64(0.11089469428239668) /* 0xBFBC6398, 0x3D3E28EC */ +var _pa5 = float64(0.035478304325618236) /* 0x3FA22A36, 0x599795EB */ +var _pa6 = -Float64FromFloat64(0.002166375594868791) /* 0xBF61BF38, 0x0A96073F */ +var _qa1 = float64(0.10642088040084423) /* 0x3FBB3E66, 0x18EEE323 */ +var _qa2 = float64(0.540397917702171) /* 0x3FE14AF0, 0x92EB6F33 */ +var _qa3 = float64(0.07182865441419627) /* 0x3FB2635C, 0xD99FE9A7 */ +var _qa4 = float64(0.12617121980876164) /* 0x3FC02660, 0xE763351F */ +var _qa5 = float64(0.01363708391202905) /* 0x3F8BEDC2, 0x6B51DD1C */ +var _qa6 = float64(0.011984499846799107) /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra0 = -Float64FromFloat64(0.009864944034847148) /* 0xBF843412, 0x600D6435 */ +var _ra1 = -Float64FromFloat64(0.6938585727071818) /* 0xBFE63416, 0xE4BA7360 */ +var _ra2 = -Float64FromFloat64(10.558626225323291) /* 0xC0251E04, 0x41B0E726 */ +var _ra3 = -Float64FromFloat64(62.375332450326006) /* 0xC04F300A, 0xE4CBA38D */ +var _ra4 = -Float64FromFloat64(162.39666946257347) /* 0xC0644CB1, 0x84282266 */ +var _ra5 = -Float64FromFloat64(184.60509290671104) /* 0xC067135C, 0xEBCCABB2 */ +var _ra6 = -Float64FromFloat64(81.2874355063066) /* 0xC0545265, 0x57E4D2F2 */ +var _ra7 = -Float64FromFloat64(9.814329344169145) /* 0xC023A0EF, 0xC69AC25C */ +var _sa1 = float64(19.651271667439257) /* 0x4033A6B9, 0xBD707687 */ +var _sa2 = float64(137.65775414351904) /* 0x4061350C, 0x526AE721 */ +var _sa3 = float64(434.56587747522923) /* 0x407B290D, 0xD58A1A71 */ +var _sa4 = float64(645.3872717332679) /* 0x40842B19, 0x21EC2868 */ +var _sa5 = float64(429.00814002756783) /* 0x407AD021, 0x57700314 */ +var _sa6 = float64(108.63500554177944) /* 0x405B28A3, 0xEE48AE2C */ +var _sa7 = float64(6.570249770319282) /* 0x401A47EF, 0x8E484A93 */ +var _sa8 = -Float64FromFloat64(0.0604244152148581) /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb0 = -Float64FromFloat64(0.0098649429247001) /* 0xBF843412, 0x39E86F4A */ +var _rb1 = -Float64FromFloat64(0.799283237680523) /* 0xBFE993BA, 0x70C285DE */ +var _rb2 = -Float64FromFloat64(17.757954917754752) /* 0xC031C209, 0x555F995A */ +var _rb3 = -Float64FromFloat64(160.63638485582192) /* 0xC064145D, 0x43C5ED98 */ +var _rb4 = -Float64FromFloat64(637.5664433683896) /* 0xC083EC88, 0x1375F228 */ +var _rb5 = -Float64FromFloat64(1025.0951316110772) /* 0xC0900461, 0x6A2E5992 */ +var _rb6 = -Float64FromFloat64(483.5191916086514) /* 0xC07E384E, 0x9BDC383F */ +var _sb1 = float64(30.33806074348246) /* 0x403E568B, 0x261D5190 */ +var _sb2 = float64(325.7925129965739) /* 0x40745CAE, 0x221B9F0A */ +var _sb3 = float64(1536.729586084437) /* 0x409802EB, 0x189D5118 */ +var _sb4 = float64(3199.8582195085955) /* 0x40A8FFB7, 0x688C246A */ +var _sb5 = float64(2553.0504064331644) /* 0x40A3F219, 0xCEDF3BE6 */ +var _sb6 = float64(474.52854120695537) /* 0x407DA874, 0xE79FE763 */ +var _sb7 = -Float64FromFloat64(22.44095244658582) /* 0xC03670E2, 0x42712D62 */ + +func _erfc1(tls *TLS, x float64) (r float64) { + var P, Q, s Tdouble_t + _, _, _ = P, Q, s + s = float64(Xfabs(tls, x) - Float64FromInt32(1)) + P = float64(_pa0) + s*(_pa1+s*(float64(_pa2)+s*(_pa3+s*(float64(_pa4)+s*(_pa5+s*float64(_pa6)))))) + Q = Float64FromInt32(1) + s*(_qa1+s*(_qa2+s*(_qa3+s*(_qa4+s*(_qa5+s*_qa6))))) + return float64(Float64FromInt32(1)-_erx) - P/Q +} + +func _erfc2(tls *TLS, ix Tuint32_t, x float64) (r float64) { + var R, S, s Tdouble_t + var z float64 + var v1 Tuint64_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3ff40000) { /* |x| < 1.25 */ + return _erfc1(tls, x) + } + x = Xfabs(tls, x) + s = float64(Float64FromInt32(1) / (x * x)) + if ix < uint32(0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */ + R = float64(_ra0) + s*(float64(_ra1)+s*(float64(_ra2)+s*(float64(_ra3)+s*(float64(_ra4)+s*(float64(_ra5)+s*(float64(_ra6)+s*float64(_ra7))))))) + S = Float64FromFloat64(1) + s*(_sa1+s*(_sa2+s*(_sa3+s*(_sa4+s*(_sa5+s*(_sa6+s*(_sa7+s*float64(_sa8)))))))) + } else { /* |x| > 1/.35 */ + R = float64(_rb0) + s*(float64(_rb1)+s*(float64(_rb2)+s*(float64(_rb3)+s*(float64(_rb4)+s*(float64(_rb5)+s*float64(_rb6)))))) + S = Float64FromFloat64(1) + s*(_sb1+s*(_sb2+s*(_sb3+s*(_sb4+s*(_sb5+s*(_sb6+s*float64(_sb7))))))) + } + z = x + v1 = *(*Tuint64_t)(unsafe.Pointer(&z))>>Int32FromInt32(32)< %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float64 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float64(int32(1)-int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3e300000) { /* |x| < 2**-28 */ + /* avoid underflow */ + return float64(0.125) * (Float64FromInt32(8)*x + _efx8*x) + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40180000) { /* 0.84375 <= |x| < 6 */ + y = Float64FromInt32(1) - _erfc2(tls, ix, x) + } else { + y = Float64FromInt32(1) - Float64FromFloat64(2.2250738585072014e-308) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfc(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float64 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float64(int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3c700000) { /* |x| < 2**-56 */ + return float64(1) - x + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + if sign != 0 || ix < uint32(0x3fd00000) { /* x < 1/4 */ + return float64(1) - (x + x*y) + } + return float64(0.5) - (x - float64(0.5) + x*y) + } + if ix < uint32(0x403c0000) { /* 0.84375 <= |x| < 28 */ + if sign != 0 { + v1 = Float64FromInt32(2) - _erfc2(tls, ix, x) + } else { + v1 = _erfc2(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float64FromInt32(2) - Float64FromFloat64(2.2250738585072014e-308) + } else { + v2 = Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(2.2250738585072014e-308) + } + return v2 +} + +var _erx1 = float32(0.84506291151) /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx81 = float32(1.027033329) /* 0x3f8375d4 */ +var _pp01 = float32(0.12837916613) /* 0x3e0375d4 */ +var _pp11 = float32(-Float64FromFloat64(0.32504209876)) /* 0xbea66beb */ +var _pp21 = float32(-Float64FromFloat64(0.028481749818)) /* 0xbce9528f */ +var _pp31 = float32(-Float64FromFloat64(0.005770270247)) /* 0xbbbd1489 */ +var _pp41 = float32(-Float64FromFloat64(2.3763017452e-05)) /* 0xb7c756b1 */ +var _qq11 = float32(0.39791721106) /* 0x3ecbbbce */ +var _qq21 = float32(0.0650222525) /* 0x3d852a63 */ +var _qq31 = float32(0.0050813062117) /* 0x3ba68116 */ +var _qq41 = float32(0.00013249473704) /* 0x390aee49 */ +var _qq51 = float32(-Float64FromFloat64(3.9602282413e-06)) /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa01 = float32(-Float64FromFloat64(0.0023621185683)) /* 0xbb1acdc6 */ +var _pa11 = float32(0.41485610604) /* 0x3ed46805 */ +var _pa21 = float32(-Float64FromFloat64(0.37220788002)) /* 0xbebe9208 */ +var _pa31 = float32(0.31834661961) /* 0x3ea2fe54 */ +var _pa41 = float32(-Float64FromFloat64(0.11089469492)) /* 0xbde31cc2 */ +var _pa51 = float32(0.035478305072) /* 0x3d1151b3 */ +var _pa61 = float32(-Float64FromFloat64(0.0021663755178)) /* 0xbb0df9c0 */ +var _qa11 = float32(0.10642088205) /* 0x3dd9f331 */ +var _qa21 = float32(0.54039794207) /* 0x3f0a5785 */ +var _qa31 = float32(0.071828655899) /* 0x3d931ae7 */ +var _qa41 = float32(0.12617121637) /* 0x3e013307 */ +var _qa51 = float32(0.013637083583) /* 0x3c5f6e13 */ +var _qa61 = float32(0.011984500103) /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra01 = float32(-Float64FromFloat64(0.0098649440333)) /* 0xbc21a093 */ +var _ra11 = float32(-Float64FromFloat64(0.6938585639)) /* 0xbf31a0b7 */ +var _ra21 = float32(-Float64FromFloat64(10.558626175)) /* 0xc128f022 */ +var _ra31 = float32(-Float64FromFloat64(62.375331879)) /* 0xc2798057 */ +var _ra41 = float32(-Float64FromFloat64(162.39666748)) /* 0xc322658c */ +var _ra51 = float32(-Float64FromFloat64(184.60508728)) /* 0xc3389ae7 */ +var _ra61 = float32(-Float64FromFloat64(81.287437439)) /* 0xc2a2932b */ +var _ra71 = float32(-Float64FromFloat64(9.8143291473)) /* 0xc11d077e */ +var _sa11 = float32(19.65127182) /* 0x419d35ce */ +var _sa21 = float32(137.65776062) /* 0x4309a863 */ +var _sa31 = float32(434.56588745) /* 0x43d9486f */ +var _sa41 = float32(645.38726807) /* 0x442158c9 */ +var _sa51 = float32(429.00814819) /* 0x43d6810b */ +var _sa61 = float32(108.63500214) /* 0x42d9451f */ +var _sa71 = float32(6.5702495575) /* 0x40d23f7c */ +var _sa81 = float32(-Float64FromFloat64(0.060424413532)) /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb01 = float32(-Float64FromFloat64(0.009864943102)) /* 0xbc21a092 */ +var _rb11 = float32(-Float64FromFloat64(0.79928326607)) /* 0xbf4c9dd4 */ +var _rb21 = float32(-Float64FromFloat64(17.757955551)) /* 0xc18e104b */ +var _rb31 = float32(-Float64FromFloat64(160.63638306)) /* 0xc320a2ea */ +var _rb41 = float32(-Float64FromFloat64(637.56646729)) /* 0xc41f6441 */ +var _rb51 = float32(-Float64FromFloat64(1025.0950928)) /* 0xc480230b */ +var _rb61 = float32(-Float64FromFloat64(483.51919556)) /* 0xc3f1c275 */ +var _sb11 = float32(30.338060379) /* 0x41f2b459 */ +var _sb21 = float32(325.79251099) /* 0x43a2e571 */ +var _sb31 = float32(1536.7296143) /* 0x44c01759 */ +var _sb41 = float32(3199.8581543) /* 0x4547fdbb */ +var _sb51 = float32(2553.050293) /* 0x451f90ce */ +var _sb61 = float32(474.52853394) /* 0x43ed43a7 */ +var _sb71 = float32(-Float64FromFloat64(22.440952301)) /* 0xc1b38712 */ + +func _erfc11(tls *TLS, x float32) (r float32) { + var P, Q, s Tfloat_t + _, _, _ = P, Q, s + s = float64(Xfabsf(tls, x) - Float32FromInt32(1)) + P = float64(_pa01) + s*(float64(_pa11)+s*(float64(_pa21)+s*(float64(_pa31)+s*(float64(_pa41)+s*(float64(_pa51)+s*float64(_pa61)))))) + Q = Float64FromInt32(1) + s*(float64(_qa11)+s*(float64(_qa21)+s*(float64(_qa31)+s*(float64(_qa41)+s*(float64(_qa51)+s*float64(_qa61)))))) + return float32(float64(Float32FromInt32(1)-_erx1) - P/Q) +} + +func _erfc21(tls *TLS, ix Tuint32_t, x float32) (r float32) { + var R, S, s Tfloat_t + var z float32 + var v1 Tuint32_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3fa00000) { /* |x| < 1.25 */ + return _erfc11(tls, x) + } + x = Xfabsf(tls, x) + s = float64(Float32FromInt32(1) / (x * x)) + if ix < uint32(0x4036db6d) { /* |x| < 1/0.35 */ + R = float64(_ra01) + s*(float64(_ra11)+s*(float64(_ra21)+s*(float64(_ra31)+s*(float64(_ra41)+s*(float64(_ra51)+s*(float64(_ra61)+s*float64(_ra71))))))) + S = Float64FromFloat32(1) + s*(float64(_sa11)+s*(float64(_sa21)+s*(float64(_sa31)+s*(float64(_sa41)+s*(float64(_sa51)+s*(float64(_sa61)+s*(float64(_sa71)+s*float64(_sa81)))))))) + } else { /* |x| >= 1/0.35 */ + R = float64(_rb01) + s*(float64(_rb11)+s*(float64(_rb21)+s*(float64(_rb31)+s*(float64(_rb41)+s*(float64(_rb51)+s*float64(_rb61)))))) + S = Float64FromFloat32(1) + s*(float64(_sb11)+s*(float64(_sb21)+s*(float64(_sb31)+s*(float64(_sb41)+s*(float64(_sb51)+s*(float64(_sb61)+s*float64(_sb71))))))) + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + v1 = ix & uint32(0xffffe000) + z = *(*float32)(unsafe.Pointer(&v1)) + return Xexpf(tls, -z*z-Float32FromFloat32(0.5625)) * Xexpf(tls, float32(float64((z-x)*(z+x))+R/S)) / x +} + +func Xerff(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float32 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float32(int32(1)-int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x31800000) { /* |x| < 2**-28 */ + /*avoid underflow */ + return Float32FromFloat32(0.125) * (Float32FromInt32(8)*x + _efx81*x) + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromInt32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40c00000) { /* |x| < 6 */ + y = Float32FromInt32(1) - _erfc21(tls, ix, x) + } else { + y = Float32FromInt32(1) - Float32FromFloat32(7.52316384526264e-37) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfcf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float32 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float32(int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x23800000) { /* |x| < 2**-56 */ + return Float32FromFloat32(1) - x + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromFloat32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + if sign != 0 || ix < uint32(0x3e800000) { /* x < 1/4 */ + return Float32FromFloat32(1) - (x + x*y) + } + return Float32FromFloat32(0.5) - (x - Float32FromFloat32(0.5) + x*y) + } + if ix < uint32(0x41e00000) { /* |x| < 28 */ + if sign != 0 { + v1 = Float32FromInt32(2) - _erfc21(tls, ix, x) + } else { + v1 = _erfc21(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float32FromInt32(2) - Float32FromFloat32(7.52316384526264e-37) + } else { + v2 = Float32FromFloat32(7.52316384526264e-37) * Float32FromFloat32(7.52316384526264e-37) + } + return v2 +} + +func Xerfl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerf(tls, x) +} + +func Xerfcl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerfc(tls, x) +} + +const EXP2_POLY_ORDER = 5 +const EXP_POLY_ORDER = 5 +const EXP_TABLE_BITS = 7 +const EXP_USE_TOINT_NARROW = 0 +const N = 128 + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by <= 460. */ + sbits -= Uint64FromUint64(1009) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = Float64FromFloat64(5.486124068793689e+303) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if y3 < Float64FromFloat64(1) { + lo = scale - y3 + scale*tmp + hi = Float64FromFloat64(1) + y3 + lo = Float64FromFloat64(1) - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - float64(1) + /* Avoid -0.0 with downward rounding. */ + if Bool(int32(WANT_ROUNDING) != 0) && y3 == Float64FromFloat64(0) { + y3 = Float64FromFloat64(0) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v5 = y1 + goto _6 + _6: + y2 = v5 * float64(2.2250738585072014e-308) + } + y3 = Float64FromFloat64(2.2250738585072014e-308) * y3 + y = y3 + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top12(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +func Xexp(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v5 Tuint64_t + var kd, r, r2, scale, tail, tmp, z Tdouble_t + var y, v1, v2, v4, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v4, v5, v6 + abstop = _top12(tls, x1) & uint32(0x7ff) + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= _top12(tls, float64(512))-_top12(tls, float64(5.551115123125783e-17)) { + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top12(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top12(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if *(*Tuint64_t)(unsafe.Pointer(&x1))>>int32(63) != 0 { + return X__math_uflow(tls, uint32(0)) + } else { + return X__math_oflow(tls, uint32(0)) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v2 = y + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v6 = y + goto _7 +_7: + return v6 +} + +const HUGE = 0 + +func Xexp10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float64 + var _ /* n at bp+0 */ float64 + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = Xmodf(tls, x, bp) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = *(*float64)(unsafe.Pointer(bp)) + /* fabs(n) < 16 without raising invalid on nan */ + if *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(52)&uint64(0x7ff) < uint64(Int32FromInt32(0x3ff)+Int32FromInt32(4)) { + if !(y != 0) { + return _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + y = Xexp2(tls, float64(3.321928094887362)*y) + return y * _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + return Xpow(tls, float64(10), x) +} + +var _p10 = [31]float64{ + 0: float64(1e-15), + 1: float64(1e-14), + 2: float64(1e-13), + 3: float64(1e-12), + 4: float64(1e-11), + 5: float64(1e-10), + 6: float64(1e-09), + 7: float64(1e-08), + 8: float64(1e-07), + 9: float64(1e-06), + 10: float64(1e-05), + 11: float64(0.0001), + 12: float64(0.001), + 13: float64(0.01), + 14: float64(0.1), + 15: Float64FromInt32(1), + 16: float64(10), + 17: float64(100), + 18: float64(1000), + 19: float64(10000), + 20: float64(100000), + 21: float64(1e+06), + 22: float64(1e+07), + 23: float64(1e+08), + 24: float64(1e+09), + 25: float64(1e+10), + 26: float64(1e+11), + 27: float64(1e+12), + 28: float64(1e+13), + 29: float64(1e+14), + 30: float64(1e+15), +} + +func Xpow10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xexp10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float32 + var _ /* n at bp+0 */ float32 + var _ /* u at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = Xmodff(tls, x, bp) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = *(*float32)(unsafe.Pointer(bp)) + /* fabsf(n) < 8 without raising invalid on nan */ + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))>>int32(23)&uint32(0xff) < uint32(Int32FromInt32(0x7f)+Int32FromInt32(3)) { + if !(y != 0) { + return _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + y = Xexp2f(tls, Float32FromFloat32(3.321928094887362)*y) + return y * _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + return float32(Xexp2(tls, float64(3.321928094887362)*float64(x))) +} + +var _p101 = [15]float32{ + 0: Float32FromFloat32(1e-07), + 1: Float32FromFloat32(1e-06), + 2: Float32FromFloat32(1e-05), + 3: Float32FromFloat32(0.0001), + 4: Float32FromFloat32(0.001), + 5: Float32FromFloat32(0.01), + 6: Float32FromFloat32(0.1), + 7: Float32FromInt32(1), + 8: float32(10), + 9: float32(100), + 10: float32(1000), + 11: float32(10000), + 12: float32(100000), + 13: float32(1e+06), + 14: float32(1e+07), +} + +func Xpow10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10f(tls, x) +} + +func Xexp10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xpow10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10l(tls, x) +} + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase1(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by 1. */ + sbits -= Uint64FromUint64(1) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = Float64FromInt32(2) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if y3 < Float64FromFloat64(1) { + lo = scale - y3 + scale*tmp + hi = Float64FromFloat64(1) + y3 + lo = Float64FromFloat64(1) - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - float64(1) + /* Avoid -0.0 with downward rounding. */ + if Bool(int32(WANT_ROUNDING) != 0) && y3 == Float64FromFloat64(0) { + y3 = Float64FromFloat64(0) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v5 = y1 + goto _6 + _6: + y2 = v5 * float64(2.2250738585072014e-308) + } + y3 = Float64FromFloat64(2.2250738585072014e-308) * y3 + y = y3 + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top121(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +func Xexp2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v7 Tuint64_t + var kd, r, r2, scale, tail, tmp Tdouble_t + var y, v1, v2, v3, v4, v6, v8 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, v1, v2, v3, v4, v6, v7, v8 + abstop = _top121(tls, x1) & uint32(0x7ff) + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= _top121(tls, float64(512))-_top121(tls, float64(5.551115123125783e-17)) { + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top121(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top121(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if !(*(*Tuint64_t)(unsafe.Pointer(&x1))>>Int32FromInt32(63) != 0) { + return X__math_oflow(tls, uint32(0)) + } else { + v2 = -Float64FromFloat64(1075) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) >= *(*Tuint64_t)(unsafe.Pointer(&v2)) { + return X__math_uflow(tls, uint32(0)) + } + } + } + v3 = float64(928) + if uint64(2)**(*Tuint64_t)(unsafe.Pointer(&x1)) > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Large x is special cased below. */ + abstop = uint32(0) + } + } + /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */ + /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */ + y = x1 + X__exp_data.Fexp2_shift + v4 = y + goto _5 +_5: + kd = v4 + v6 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v6)) /* k. */ + kd -= X__exp_data.Fexp2_shift /* k/N for int k. */ + r = x1 - kd + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-65 and scale > 2^-928, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v8 = y + goto _9 +_9: + return v8 +} + +const EXP2F_POLY_ORDER = 3 +const EXP2F_TABLE_BITS = 5 +const N1 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.) +Wrong count: 168353 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top122(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexp2f(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top122(tls, x2) & uint32(0x7ff) + if abstop >= _top122(tls, Float32FromFloat32(128)) { + /* |x| >= 128 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top122(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(0) { + return X__math_oflowf(tls, uint32(0)) + } + if x2 <= -Float32FromFloat32(150) { + return X__math_uflowf(tls, uint32(0)) + } + } + /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ + y1 = xd + X__exp2f_data.Fshift_scaled + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift_scaled /* k/N for int k. */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp2(tls, x) +} + +const N2 = 128 + +type Texp_data = struct { + Finvln2N float64 + Fshift float64 + Fnegln2hiN float64 + Fnegln2loN float64 + Fpoly [4]float64 + Fexp2_shift float64 + Fexp2_poly [5]float64 + Ftab [256]Tuint64_t +} + +const N3 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.) +Wrong count: 170635 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top123(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexpf(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top123(tls, x2) & uint32(0x7ff) + if abstop >= _top123(tls, Float32FromFloat32(88)) { + /* |x| >= 88 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top123(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(88.72283172607422) { /* x > log(0x1p128) ~= 88.72 */ + return X__math_oflowf(tls, uint32(0)) + } + if x2 < -Float32FromFloat32(103.97207641601562) { /* x < log(0x1p-150) ~= -103.97 */ + return X__math_uflowf(tls, uint32(0)) + } + } + /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */ + z = X__exp2f_data.Finvln2_scaled * xd + /* Round and convert z to int, the result is in [-150*N, 128*N] and + ideally ties-to-even rule is used, otherwise the magnitude of r + can be bigger which gives larger approximation error. */ + y1 = z + X__exp2f_data.Fshift + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift + r = z - kd + /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp(tls, x) +} + +var _o_threshold = float64(709.782712893384) /* 0x40862E42, 0xFEFA39EF */ +var _ln2_hi = float64(0.6931471803691238) /* 0x3fe62e42, 0xfee00000 */ +var _ln2_lo = float64(1.9082149292705877e-10) /* 0x3dea39ef, 0x35793c76 */ +var _invln2 = float64(1.4426950408889634) /* 0x3ff71547, 0x652b82fe */ +/* Scaled Q's: Qn_here = 2**n * Qn_above, for R(2*z) where z = hxs = x*x/2: */ +var _Q1 = -Float64FromFloat64(0.03333333333333313) /* BFA11111 111110F4 */ +var _Q2 = float64(0.0015873015872548146) /* 3F5A01A0 19FE5585 */ +var _Q3 = -Float64FromFloat64(7.93650757867488e-05) /* BF14CE19 9EAADBB7 */ +var _Q4 = float64(4.008217827329362e-06) /* 3ED0CFCA 86E65239 */ +var _Q5 = -Float64FromFloat64(2.0109921818362437e-07) /* BE8AFDB7 6E09C32D */ + +func Xexpm1(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tdouble_t + var hx Tuint32_t + var k, sign int32 + var y float32 + var y1, y2, v3 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1, v3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4043687A) { /* if |x|>=56*ln2 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< _o_threshold { + x3 *= float64(8.98846567431158e+307) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi + lo = _ln2_lo + k = int32(1) + } else { + hi = x3 + _ln2_hi + lo = -_ln2_lo + k = -int32(1) + } + } else { + if sign != 0 { + v3 = -Float64FromFloat64(0.5) + } else { + v3 = float64(0.5) + } + k = int32(_invln2*x3 + v3) + t = float64(k) + hi = x3 - t*_ln2_hi /* t*ln2_hi is exact here */ + lo = t * _ln2_lo + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x3c900000) { /* |x| < 2**-54, return x */ + if hx < uint32(0x00100000) { + if uint32(4) == uint32(4) { + y = float32(x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(0.5) * x3 + hxs = x3 * hfx + r1 = Float64FromFloat64(1) + hxs*(float64(_Q1)+hxs*(_Q2+hxs*(float64(_Q3)+hxs*(_Q4+hxs*float64(_Q5))))) + t = Float64FromFloat64(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat64(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float64(Float64FromFloat64(0.5)*(x3-e) - Float64FromFloat64(0.5)) + } + if k == int32(1) { + if x3 < -Float64FromFloat64(0.25) { + return float64(-Float64FromFloat64(2)) * (e - float64(x3+Float64FromFloat64(0.5))) + } + return float64(Float64FromFloat64(1) + Float64FromFloat64(2)*(x3-e)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)+k) << int32(52) /* 2^k */ + twopk = *(*float64)(unsafe.Pointer(bp + 8)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + Float64FromFloat64(1) + if k == int32(1024) { + y3 = y3 * Float64FromFloat64(2) * Float64FromFloat64(8.98846567431158e+307) + } else { + y3 = y3 * twopk + } + return float64(y3 - Float64FromFloat64(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)-k) << int32(52) /* 2^-k */ + if k < int32(20) { + y3 = (x3 - e + float64(Float64FromInt32(1)-*(*float64)(unsafe.Pointer(bp + 8)))) * twopk + } else { + y3 = (x3 - (e + *(*float64)(unsafe.Pointer(bp + 8))) + Float64FromInt32(1)) * twopk + } + return y3 +} + +var _ln2_hi1 = float32(0.69313812256) /* 0x3f317180 */ +var _ln2_lo1 = float32(9.0580006145e-06) /* 0x3717f7d1 */ +var _invln21 = float32(1.4426950216) /* 0x3fb8aa3b */ +/* + * Domain [-0.34568, 0.34568], range ~[-6.694e-10, 6.696e-10]: + * |6 / x * (1 + 2 * (1 / (exp(x) - 1) - 1 / x)) - q(x)| < 2**-30.04 + * Scaled coefficients: Qn_here = 2**n * Qn_for_q (see s_expm1.c): + */ +var _Q11 = float32(-Float64FromFloat64(0.033333212137)) /* -0x888868.0p-28 */ +var _Q21 = float32(0.0015807170421) /* 0xcf3010.0p-33 */ + +func Xexpm1f(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tfloat_t + var hx Tuint32_t + var k, sign int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4195b844) { /* if |x|>=27*ln2 */ + if hx > uint32(0x7f800000) { /* NaN */ + return x3 + } + if sign != 0 { + return float32(-Int32FromInt32(1)) + } + if hx > uint32(0x42b17217) { /* x > log(FLT_MAX) */ + x3 *= Float32FromFloat32(1.7014118346046923e+38) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3eb17218) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3F851592) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = float64(x3 - _ln2_hi1) + lo = float64(_ln2_lo1) + k = int32(1) + } else { + hi = float64(x3 + _ln2_hi1) + lo = float64(-_ln2_lo1) + k = -int32(1) + } + } else { + if sign != 0 { + v1 = -Float32FromFloat32(0.5) + } else { + v1 = Float32FromFloat32(0.5) + } + k = int32(_invln21*x3 + v1) + t = float64(k) + hi = float64(x3) - t*float64(_ln2_hi1) /* t*ln2_hi is exact here */ + lo = t * float64(_ln2_lo1) + } + x3 = float32(hi - lo) + c = hi - float64(x3) - lo + } else { + if hx < uint32(0x33000000) { /* when |x|<2**-25, return x */ + if hx < uint32(0x00800000) { + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(Float32FromFloat32(0.5) * x3) + hxs = float64(x3) * hfx + r1 = Float64FromFloat32(1) + hxs*(float64(_Q11)+hxs*float64(_Q21)) + t = Float64FromFloat32(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat32(6) - float64(x3)*t)) + if k == 0 { /* c is 0 */ + return float32(float64(x3) - (float64(x3)*e - hxs)) + } + e = float64(x3)*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float32(Float64FromFloat32(0.5)*(float64(x3)-e) - Float64FromFloat32(0.5)) + } + if k == int32(1) { + if x3 < -Float32FromFloat32(0.25) { + return float32(float64(-Float32FromFloat32(2)) * (e - float64(x3+Float32FromFloat32(0.5)))) + } + return float32(Float64FromFloat32(1) + Float64FromFloat32(2)*(float64(x3)-e)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) + k) << int32(23)) /* 2^k */ + twopk = float64(*(*float32)(unsafe.Pointer(bp))) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = float64(x3) - e + Float64FromFloat32(1) + if k == int32(128) { + y3 = y3 * Float64FromFloat32(2) * Float64FromFloat32(1.7014118346046923e+38) + } else { + y3 = y3 * twopk + } + return float32(y3 - Float64FromFloat32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) - k) << int32(23)) /* 2^-k */ + if k < int32(23) { + y3 = (float64(x3) - e + float64(Float32FromInt32(1)-*(*float32)(unsafe.Pointer(bp)))) * twopk + } else { + y3 = (float64(x3) - (e + float64(*(*float32)(unsafe.Pointer(bp)))) + Float64FromInt32(1)) * twopk + } + return float32(y3) +} + +func Xexpm1l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexpm1(tls, x) +} + +func Xfabs(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) / Uint64FromInt32(2) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfabsf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfabsl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfabs(tls, x) +} + +func Xfdim(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _ = v1, v3, v5 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< y { + v5 = x - y + } else { + v5 = Float64FromInt32(0) + } + return v5 +} + +func Xfdimf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _ = v1, v3, v5 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + if x > y { + v5 = x - y + } else { + v5 = Float32FromInt32(0) + } + return v5 +} + +func Xfdiml(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfdim(tls, x, y) +} + +func Xfinite(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&uint32(0x7fffffff) < uint32(0x7f800000)) +} + +const DBL_EPSILON7 = 2.220446049250313e-16 + +var _toint3 = float64(Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16)) + +func Xfloor(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1 int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint3 + _toint3 - x3 + } else { + y3 = x3 + _toint3 - _toint3 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint32(8) == uint32(4) { + y = float32(y3) + } else { + if uint32(8) == uint32(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return float64(v1) + } + if y3 > Float64FromInt32(0) { + return float64(x3 + y3 - Float64FromInt32(1)) + } + return x3 + y3 +} + +const DBL_EPSILON8 = 0 + +func Xfloorf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(0) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xfloor(tls, x) +} + +const DBL_MIN1 = 2.2250738585072014e-308 +const FLT_MIN1 = 1.1754943508222875e-38 +const ZEROINFNAN = 971 + +type Tnum = struct { + Fm Tuint64_t + Fe int32 + Fsign int32 +} + +func _normalize(tls *TLS, x float64) (r Tnum) { + var e, sign, v2 int32 + var ix Tuint64_t + var v1 float64 + _, _, _, _, _ = e, ix, sign, v1, v2 + ix = *(*Tuint64_t)(unsafe.Pointer(&x)) + e = int32(ix >> int32(52)) + sign = e & int32(0x800) + e &= int32(0x7ff) + if !(e != 0) { + v1 = x * float64(9.223372036854776e+18) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + e = int32(ix >> int32(52) & uint64(0x7ff)) + if e != 0 { + v2 = e - int32(63) + } else { + v2 = int32(0x800) + } + e = v2 + } + ix &= Uint64FromUint64(1)<> int32(32) + ylo = uint64(uint32(y)) + yhi = y >> int32(32) + t1 = xlo * ylo + t2 = xlo*yhi + xhi*ylo + t3 = xhi * yhi + *(*Tuint64_t)(unsafe.Pointer(lo)) = t1 + t2<>Int32FromInt32(32) + BoolUint64(t1 > *(*Tuint64_t)(unsafe.Pointer(lo))) +} + +func Xfma(tls *TLS, x1 float64, y float64, z float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y=%v z=%v, (%v:)", tls, x1, y, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, r float64 + var d, e, nonzero, samesign, sign, v2, v5 int32 + var fltmin float32 + var i Tint64_t + var nx, ny, nz Tnum + var t, zhi, zlo, v1, v4 Tuint64_t + var tiny Tdouble_t + var _ /* rhi at bp+0 */ Tuint64_t + var _ /* rlo at bp+8 */ Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, e, fltmin, i, nonzero, nx, ny, nz, r, samesign, sign, t, tiny, zhi, zlo, v1, v2, v4, v5 + nx = _normalize(tls, x1) + ny = _normalize(tls, y) + nz = _normalize(tls, z) + if nx.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) || ny.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + return x1*y + z + } + if nz.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + if nz.Fe > Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { /* z==0 */ + return x1*y + z + } + return z + } + _mul(tls, bp, bp+8, nx.Fm, ny.Fm) + /* either top 20 or 21 bits of rhi and last 2 bits of rlo are 0 */ + /* align exponents */ + e = nx.Fe + ny.Fe + d = nz.Fe - e + /* shift bits z<<=kz, r>>=kr, so kz+kr == d, set e = e+kr (== ez-kz) */ + if d > 0 { + if d < int32(64) { + zlo = nz.Fm << d + zhi = nz.Fm >> (int32(64) - d) + } else { + zlo = uint64(0) + zhi = nz.Fm + e = nz.Fe - int32(64) + d -= int32(64) + if d == 0 { + } else { + if d < int32(64) { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = *(*Tuint64_t)(unsafe.Pointer(bp))<<(int32(64)-d) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<<(Int32FromInt32(64)-d) != 0)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) >> d + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(1) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(0) + } + } + } + } else { + zhi = uint64(0) + d = -d + if d == 0 { + zlo = nz.Fm + } else { + if d < int32(64) { + zlo = nz.Fm>>d | BoolUint64(!!(nz.Fm<<(Int32FromInt32(64)-d) != 0)) + } else { + zlo = uint64(1) + } + } + } + /* add */ + sign = nx.Fsign ^ ny.Fsign + samesign = BoolInt32(!(sign^nz.Fsign != 0)) + nonzero = int32(1) + if samesign != 0 { + /* r += z */ + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) += zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) += zhi + BoolUint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) < zlo) + } else { + /* r -= z */ + t = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) -= zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) - zhi - BoolUint64(t < *(*Tuint64_t)(unsafe.Pointer(bp + 8))) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = -*(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = -*(*Tuint64_t)(unsafe.Pointer(bp)) - BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) != 0)) + sign = BoolInt32(!(sign != 0)) + } + nonzero = BoolInt32(!!(*(*Tuint64_t)(unsafe.Pointer(bp)) != 0)) + } + /* set rhi to top 63bit of the result (last bit is sticky) */ + if nonzero != 0 { + e += int32(64) + v1 = *(*Tuint64_t)(unsafe.Pointer(bp)) + if v1>>Int32FromInt32(32) != 0 { + v2 = _a_clz_32(tls, uint32(v1>>int32(32))) + goto _3 + } + v2 = _a_clz_32(tls, uint32(v1)) + int32(32) + goto _3 + _3: + d = v2 - int32(1) + /* note: d > 0 */ + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp))<>(int32(64)-d) | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<>Int32FromInt32(32) != 0 { + v5 = _a_clz_32(tls, uint32(v4>>int32(32))) + goto _6 + } + v5 = _a_clz_32(tls, uint32(v4)) + int32(32) + goto _6 + _6: + d = v5 - int32(1) + if d < 0 { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&uint64(1) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) << d + } + } else { + /* exact +-0 */ + return x1*y + z + } + } + e -= d + /* convert to double */ + i = int64(*(*Tuint64_t)(unsafe.Pointer(bp))) /* i is in [1<<62,(1<<63)-1] */ + if sign != 0 { + i = -i + } + r = float64(i) /* |r| is in [0x1p62,0x1p63] */ + if e < -Int32FromInt32(1022)-Int32FromInt32(62) { + /* result is subnormal before rounding */ + if e == -Int32FromInt32(1022)-Int32FromInt32(63) { + c = float64(9.223372036854776e+18) + if sign != 0 { + c = -c + } + if r == c { + /* min normal after rounding, underflow depends + on arch behaviour which can be imitated by + a double to float conversion */ + fltmin = float32(Float64FromFloat64(1.0842021401737618e-19) * Float64FromFloat32(1.1754943508222875e-38) * r) + return Float64FromFloat64(2.2250738585072014e-308) / Float64FromFloat32(1.1754943508222875e-38) * float64(fltmin) + } + /* one bit is lost when scaled, add another top bit to + only round once at conversion if it is inexact */ + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp))&uint64(1) | Uint64FromUint64(1)<>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp))<<(Int32FromInt32(64)-d) != 0))) << d) + if sign != 0 { + i = -i + } + r = float64(i) + } + } + return Xscalbn(tls, r, e) +} + +const DBL_MIN2 = 0 +const FLT_MIN2 = 0 + +func Xfmal(tls *TLS, x float64, y float64, z float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v z=%v, (%v:)", tls, x, y, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfma(tls, x, y, z) +} + +func Xfmax(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeroes, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmax(tls, x, y) +} + +func Xfmin(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeros, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmin(tls, x, y) +} + +func Xfmod(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx int32 + var i, uxi Tuint64_t + var v1 uint64 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* in the followings uxi should be ux.i, but then gcc wrongly adds */ + /* float load/store to inner loops ruining performance and code size */ + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi &= -Uint64FromUint64(1) >> Int32FromInt32(12) + uxi |= Uint64FromUint64(1) << Int32FromInt32(52) + } + if !(ey != 0) { + i = *(*Tuint64_t)(unsafe.Pointer(bp + 16)) << int32(12) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) &= -Uint64FromUint64(1) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) |= Uint64FromUint64(1) << Int32FromInt32(52) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + uxi <<= uint64(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint64(1) + ex-- + } + /* scale result */ + if ex > 0 { + uxi -= Uint64FromUint64(1) << Int32FromInt32(52) + uxi |= uint64(ex) << int32(52) + } else { + uxi >>= uint64(-ex + int32(1)) + } + uxi |= uint64(sx) << int32(63) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xfmodf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey int32 + var i, sx, uxi Tuint32_t + var v1 uint32 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if uxi<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + uxi <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + /* scale result up */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + uxi |= sx + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xfmodl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmod(tls, x, y) +} + +func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + _ = ee + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexp(tls, x*float64(1.8446744073709552e+19), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0x7ff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(0x800fffffffffffff) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(0x3fe0000000000000) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfrexpf(tls *TLS, x float32, e uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexpf(tls, float32(float64(x)*float64(1.8446744073709552e+19)), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0xff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x7e) + p1 = bp + *(*Tuint32_t)(unsafe.Pointer(p1)) = Tuint32_t(*(*Tuint32_t)(unsafe.Pointer(p1)) & Uint32FromUint32(0x807fffff)) + p2 = bp + *(*Tuint32_t)(unsafe.Pointer(p2)) = Tuint32_t(*(*Tuint32_t)(unsafe.Pointer(p2)) | Uint32FromUint32(0x3f000000)) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfrexpl(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfrexp(tls, x, e) +} + +const SPLIT = 1 + +func _sq(tls *TLS, hi uintptr, lo uintptr, x float64) { + var xc, xh, xl Tdouble_t + _, _, _ = xc, xh, xl + xc = x * float64(Float64FromFloat64(1.34217728e+08)+Float64FromInt32(1)) + xh = x - xc + xc + xl = x - xh + *(*Tdouble_t)(unsafe.Pointer(hi)) = x * x + *(*Tdouble_t)(unsafe.Pointer(lo)) = xh*xh - *(*Tdouble_t)(unsafe.Pointer(hi)) + Float64FromInt32(2)*xh*xl + xl*xl +} + +func Xhypot(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey int32 + var ut struct { + Fi [0]Tuint64_t + Ff float64 + } + var z Tdouble_t + var _ /* hx at bp+16 */ Tdouble_t + var _ /* hy at bp+32 */ Tdouble_t + var _ /* lx at bp+24 */ Tdouble_t + var _ /* ly at bp+40 */ Tdouble_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = ex, ey, ut, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + /* arrange |x| >= |y| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) >> Int32FromInt32(1) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) &= -Uint64FromUint64(1) >> Int32FromInt32(1) + if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { + ut = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = ut + } + /* special cases */ + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52)) + x = *(*float64)(unsafe.Pointer(bp)) + y = *(*float64)(unsafe.Pointer(bp + 8)) + /* note: hypot(inf,nan) == inf */ + if ey == int32(0x7ff) { + return y + } + if ex == int32(0x7ff) || *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == uint64(0) { + return x + } + /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ + /* 64 difference is enough for ld80 double_t */ + if ex-ey > int32(64) { + return x + y + } + /* precise sqrt argument in nearest rounding mode without overflow */ + /* xh*xh must not overflow and xl*xl must not underflow in sq */ + z = Float64FromInt32(1) + if ex > Int32FromInt32(0x3ff)+Int32FromInt32(510) { + z = Float64FromFloat64(5.260135901548374e+210) + x *= float64(1.90109156629516e-211) + y *= float64(1.90109156629516e-211) + } else { + if ey < Int32FromInt32(0x3ff)-Int32FromInt32(450) { + z = Float64FromFloat64(1.90109156629516e-211) + x *= float64(5.260135901548374e+210) + y *= float64(5.260135901548374e+210) + } + } + _sq(tls, bp+16, bp+24, x) + _sq(tls, bp+32, bp+40, y) + return z * Xsqrt(tls, *(*Tdouble_t)(unsafe.Pointer(bp + 40))+*(*Tdouble_t)(unsafe.Pointer(bp + 24))+*(*Tdouble_t)(unsafe.Pointer(bp + 32))+*(*Tdouble_t)(unsafe.Pointer(bp + 16))) +} + +func Xhypotf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ut struct { + Fi [0]Tuint32_t + Ff float32 + } + var z Tfloat_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = ut, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < *(*Tuint32_t)(unsafe.Pointer(bp + 4)) { + ut = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = ut + } + x = *(*float32)(unsafe.Pointer(bp)) + y = *(*float32)(unsafe.Pointer(bp + 4)) + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(25)<= uint32((Int32FromInt32(0x7f)+Int32FromInt32(60))< %v", r) }() + } + return Xhypot(tls, x, y) +} + +func Xilogb(tls *TLS, x3 float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint64_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + i <<= uint64(12) + if i == uint64(0) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x3ff) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint64(1) + } + return e + } + if e == int32(0x7ff) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(23) & uint32(0xff)) + if !(e != 0) { + i <<= uint32(9) + if i == uint32(0) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x7f) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint32(1) + } + return e + } + if e == int32(0xff) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + return Xilogb(tls, x) +} + +var _invsqrtpi = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +// C documentation +// +// /* common method when |x|>=2 */ +func _common(tls *TLS, ix Tuint32_t, x float64, y0 int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x-pi/4)-q0(x)*sin(x-pi/4)) + * y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x-pi/4)+q0(x)*cos(x-pi/4)) + * + * sin(x-pi/4) = (sin(x) - cos(x))/sqrt(2) + * cos(x-pi/4) = (sin(x) + cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + c = Xcos(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + /* avoid overflow in 2*x, big ulp error when x>=0x1p1023 */ + if ix < uint32(0x7fe00000) { + ss = s - c + z = -Xcos(tls, Float64FromInt32(2)*x) + if s*c < Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y0 != 0 { + ss = -ss + } + cc = _pzero(tls, x)*cc - _qzero(tls, x)*ss + } + } + return _invsqrtpi * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R02 = float64(0.015624999999999995) /* 0x3F8FFFFF, 0xFFFFFFFD */ +var _R03 = -Float64FromFloat64(0.00018997929423885472) /* 0xBF28E6A5, 0xB61AC6E9 */ +var _R04 = float64(1.8295404953270067e-06) /* 0x3EBEB1D1, 0x0C503919 */ +var _R05 = -Float64FromFloat64(4.618326885321032e-09) /* 0xBE33D5E7, 0x73D63FCE */ +var _S01 = float64(0.015619102946489001) /* 0x3F8FFCE8, 0x82C8C2A4 */ +var _S02 = float64(0.00011692678466333745) /* 0x3F1EA6D2, 0xDD57DBF4 */ +var _S03 = float64(5.135465502073181e-07) /* 0x3EA13B54, 0xCE84D5A9 */ +var _S04 = float64(1.1661400333379e-09) /* 0x3E1408BC, 0xF4745D8F */ + +func Xj0(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + _, _, _, _ = ix, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* j0(+-inf)=0, j0(nan)=nan */ + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + x = Xfabs(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros: 2.4, 5.52, 8.6537,.. */ + return _common(tls, ix, x, 0) + } + /* 1 - x*x/4 + x*x*R(x^2)/S(x^2) */ + if ix >= uint32(0x3f200000) { /* |x| >= 2**-13 */ + /* up to 4ulp error close to 2 */ + z = x * x + r = z * (_R02 + z*(_R03+z*(_R04+z*_R05))) + s = Float64FromInt32(1) + z*(_S01+z*(_S02+z*(_S03+z*_S04))) + return (Float64FromInt32(1)+x/Float64FromInt32(2))*(Float64FromInt32(1)-x/Float64FromInt32(2)) + z*(r/s) + } + /* 1 - x*x/4 */ + /* prevent underflow */ + /* inexact should be raised when x!=0, this is not done correctly */ + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + x = float64(0.25) * x * x + } + return Float64FromInt32(1) - x +} + +var _u00 = -Float64FromFloat64(0.07380429510868723) /* 0xBFB2E4D6, 0x99CBD01F */ +var _u01 = float64(0.17666645250918112) /* 0x3FC69D01, 0x9DE9E3FC */ +var _u02 = -Float64FromFloat64(0.01381856719455969) /* 0xBF8C4CE8, 0xB16CFA97 */ +var _u03 = float64(0.00034745343209368365) /* 0x3F36C54D, 0x20B29B6B */ +var _u04 = -Float64FromFloat64(3.8140705372436416e-06) /* 0xBECFFEA7, 0x73D25CAD */ +var _u05 = float64(1.9559013703502292e-08) /* 0x3E550057, 0x3B4EABD4 */ +var _u06 = -Float64FromFloat64(3.982051941321034e-11) /* 0xBDC5E43D, 0x693FB3C8 */ +var _v01 = float64(0.01273048348341237) /* 0x3F8A1270, 0x91C9C71A */ +var _v02 = float64(7.600686273503533e-05) /* 0x3F13ECBB, 0xF578C6C1 */ +var _v03 = float64(2.591508518404578e-07) /* 0x3E91642D, 0x7FF202FD */ +var _v04 = float64(4.4111031133267547e-10) /* 0x3DFE5018, 0x3BD6D9EF */ + +func Xy0(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y0(nan)=nan, y0(<0)=nan, y0(0)=-inf, y0(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + /* large ulp errors near zeros: 3.958, 7.086,.. */ + return _common(tls, ix, x, int32(1)) + } + /* U(x^2)/V(x^2) + (2/pi)*j0(x)*log(x) */ + if ix >= uint32(0x3e400000) { /* x >= 2**-27 */ + /* large ulp error near the first zero, x ~= 0.89 */ + z = x * x + u = _u00 + z*(_u01+z*(_u02+z*(_u03+z*(_u04+z*(_u05+z*_u06))))) + v = float64(1) + z*(_v01+z*(_v02+z*(_v03+z*_v04))) + return u/v + _tpi*(Xj0(tls, x)*Xlog(tls, x)) + } + return _u00 + _tpi*Xlog(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR8 = [6]float64{ + 1: -Float64FromFloat64(0.07031249999999004), + 2: -Float64FromFloat64(8.081670412753498), + 3: -Float64FromFloat64(257.06310567970485), + 4: -Float64FromFloat64(2485.216410094288), + 5: -Float64FromFloat64(5253.043804907295), +} +var _pS8 = [5]float64{ + 0: float64(116.53436461966818), + 1: float64(3833.7447536412183), + 2: float64(40597.857264847255), + 3: float64(116752.97256437592), + 4: float64(47627.728414673096), +} + +var _pR5 = [6]float64{ + 0: -Float64FromFloat64(1.141254646918945e-11), + 1: -Float64FromFloat64(0.07031249408735993), + 2: -Float64FromFloat64(4.159610644705878), + 3: -Float64FromFloat64(67.67476522651673), + 4: -Float64FromFloat64(331.23129964917297), + 5: -Float64FromFloat64(346.4333883656049), +} +var _pS52 = [5]float64{ + 0: float64(60.753938269230034), + 1: float64(1051.2523059570458), + 2: float64(5978.970943338558), + 3: float64(9625.445143577745), + 4: float64(2406.058159229391), +} + +var _pR3 = [6]float64{ + 0: -Float64FromFloat64(2.547046017719519e-09), + 1: -Float64FromFloat64(0.07031196163814817), + 2: -Float64FromFloat64(2.409032215495296), + 3: -Float64FromFloat64(21.96597747348831), + 4: -Float64FromFloat64(58.07917047017376), + 5: -Float64FromFloat64(31.44794705948885), +} +var _pS32 = [5]float64{ + 0: float64(35.85603380552097), + 1: float64(361.51398305030386), + 2: float64(1193.6078379211153), + 3: float64(1127.9967985690741), + 4: float64(173.58093081333575), +} + +var _pR2 = [6]float64{ + 0: -Float64FromFloat64(8.875343330325264e-08), + 1: -Float64FromFloat64(0.07030309954836247), + 2: -Float64FromFloat64(1.4507384678095299), + 3: -Float64FromFloat64(7.635696138235278), + 4: -Float64FromFloat64(11.193166886035675), + 5: -Float64FromFloat64(3.2336457935133534), +} +var _pS24 = [5]float64{ + 0: float64(22.22029975320888), + 1: float64(136.2067942182152), + 2: float64(270.4702786580835), + 3: float64(153.87539420832033), + 4: float64(14.65761769482562), +} + +func _pzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pR8)) + q = uintptr(unsafe.Pointer(&_pS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pR5)) + q = uintptr(unsafe.Pointer(&_pS52)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pR3)) + q = uintptr(unsafe.Pointer(&_pS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR2)) + q = uintptr(unsafe.Pointer(&_pS24)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = Float64FromFloat64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(Float64FromFloat64(1) + r/s) +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR8 = [6]float64{ + 1: float64(0.0732421874999935), + 2: float64(11.76820646822527), + 3: float64(557.6733802564019), + 4: float64(8859.197207564686), + 5: float64(37014.62677768878), +} +var _qS8 = [6]float64{ + 0: float64(163.77602689568982), + 1: float64(8098.344946564498), + 2: float64(142538.29141912048), + 3: float64(803309.2571195144), + 4: float64(840501.5798190605), + 5: -Float64FromFloat64(343899.2935378666), +} + +var _qR5 = [6]float64{ + 0: float64(1.8408596359451553e-11), + 1: float64(0.07324217666126848), + 2: float64(5.8356350896205695), + 3: float64(135.11157728644983), + 4: float64(1027.243765961641), + 5: float64(1989.9778586460538), +} +var _qS5 = [6]float64{ + 0: float64(82.77661022365378), + 1: float64(2077.81416421393), + 2: float64(18847.28877857181), + 3: float64(56751.11228949473), + 4: float64(35976.75384251145), + 5: -Float64FromFloat64(5354.342756019448), +} + +var _qR3 = [6]float64{ + 0: float64(4.377410140897386e-09), + 1: float64(0.07324111800429114), + 2: float64(3.344231375161707), + 3: float64(42.621844074541265), + 4: float64(170.8080913405656), + 5: float64(166.73394869665117), +} +var _qS32 = [6]float64{ + 0: float64(48.75887297245872), + 1: float64(709.689221056606), + 2: float64(3704.1482262011136), + 3: float64(6460.425167525689), + 4: float64(2516.3336892036896), + 5: -Float64FromFloat64(149.2474518361564), +} + +var _qR2 = [6]float64{ + 0: float64(1.5044444488698327e-07), + 1: float64(0.07322342659630793), + 2: float64(1.99819174093816), + 3: float64(14.495602934788574), + 4: float64(31.666231750478154), + 5: float64(16.252707571092927), +} +var _qS22 = [6]float64{ + 0: float64(30.36558483552192), + 1: float64(269.34811860804984), + 2: float64(844.7837575953201), + 3: float64(882.9358451124886), + 4: float64(212.66638851179883), + 5: -Float64FromFloat64(5.3109549388266695), +} + +func _qzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qR8)) + q = uintptr(unsafe.Pointer(&_qS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qR5)) + q = uintptr(unsafe.Pointer(&_qS5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qR3)) + q = uintptr(unsafe.Pointer(&_qS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR2)) + q = uintptr(unsafe.Pointer(&_qS22)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = Float64FromFloat64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (float64(-Float64FromFloat64(0.125)) + r/s) / x +} + +var _invsqrtpi1 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi1 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common1(tls *TLS, ix Tuint32_t, x float32, y0 int32) (r float32) { + var c, cc, s, ss, z float32 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + s = Xsinf(tls, x) + c = Xcosf(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + if ix < uint32(0x7f000000) { + ss = s - c + z = -Xcosf(tls, Float32FromInt32(2)*x) + if s*c < Float32FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y0 != 0 { + ss = -ss + } + cc = _pzerof(tls, x)*cc - _qzerof(tls, x)*ss + } + } + return _invsqrtpi1 * cc / Xsqrtf(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R021 = float32(0.015625) /* 0x3c800000 */ +var _R031 = float32(-Float64FromFloat64(0.00018997929874)) /* 0xb947352e */ +var _R041 = float32(1.8295404516e-06) /* 0x35f58e88 */ +var _R051 = float32(-Float64FromFloat64(4.6183270541e-09)) /* 0xb19eaf3c */ +var _S011 = float32(0.015619102865) /* 0x3c7fe744 */ +var _S021 = float32(0.00011692678527) /* 0x38f53697 */ +var _S031 = float32(5.1354652442e-07) /* 0x3509daa6 */ +var _S041 = float32(1.1661400734e-09) /* 0x30a045e8 */ + +func Xj0f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + _, _, _, _ = ix, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + x = Xfabsf(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, 0) + } + if ix >= uint32(0x3a000000) { /* |x| >= 2**-11 */ + /* up to 4ulp error near 2 */ + z = x * x + r = z * (_R021 + z*(_R031+z*(_R041+z*_R051))) + s = Float32FromInt32(1) + z*(_S011+z*(_S021+z*(_S031+z*_S041))) + return (Float32FromInt32(1)+x/Float32FromInt32(2))*(Float32FromInt32(1)-x/Float32FromInt32(2)) + z*(r/s) + } + if ix >= uint32(0x21800000) { /* |x| >= 2**-60 */ + x = Float32FromFloat32(0.25) * x * x + } + return Float32FromInt32(1) - x +} + +var _u001 = float32(-Float64FromFloat64(0.073804296553)) /* 0xbd9726b5 */ +var _u011 = float32(0.17666645348) /* 0x3e34e80d */ +var _u021 = float32(-Float64FromFloat64(0.013818567619)) /* 0xbc626746 */ +var _u031 = float32(0.00034745343146) /* 0x39b62a69 */ +var _u041 = float32(-Float64FromFloat64(3.8140706238e-06)) /* 0xb67ff53c */ +var _u051 = float32(1.9559013964e-08) /* 0x32a802ba */ +var _u061 = float32(-Float64FromFloat64(3.982051841e-11)) /* 0xae2f21eb */ +var _v011 = float32(0.012730483897) /* 0x3c509385 */ +var _v021 = float32(7.6006865129e-05) /* 0x389f65e0 */ +var _v031 = float32(2.5915085189e-07) /* 0x348b216c */ +var _v041 = float32(4.4111031494e-10) /* 0x2ff280c2 */ + +func Xy0f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, int32(1)) + } + if ix >= uint32(0x39000000) { /* x >= 2**-13 */ + /* large ulp error at x ~= 0.89 */ + z = x * x + u = _u001 + z*(_u011+z*(_u021+z*(_u031+z*(_u041+z*(_u051+z*_u061))))) + v = Float32FromInt32(1) + z*(_v011+z*(_v021+z*(_v031+z*_v041))) + return u/v + _tpi1*(Xj0f(tls, x)*Xlogf(tls, x)) + } + return _u001 + _tpi1*Xlogf(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.0703125)), + 2: float32(-Float64FromFloat64(8.0816707611)), + 3: float32(-Float64FromFloat64(257.06311035)), + 4: float32(-Float64FromFloat64(2485.2163086)), + 5: float32(-Float64FromFloat64(5253.0439453)), +} +var _pS81 = [5]float32{ + 0: float32(116.53436279), + 1: float32(3833.744873), + 2: float32(40597.855469), + 3: float32(116752.96875), + 4: float32(47627.726562), +} +var _pR51 = [6]float32{ + 0: float32(-Float64FromFloat64(1.1412546255e-11)), + 1: float32(-Float64FromFloat64(0.070312492549)), + 2: float32(-Float64FromFloat64(4.1596107483)), + 3: float32(-Float64FromFloat64(67.674766541)), + 4: float32(-Float64FromFloat64(331.23129272)), + 5: float32(-Float64FromFloat64(346.43338013)), +} +var _pS53 = [5]float32{ + 0: float32(60.753936768), + 1: float32(1051.2523193), + 2: float32(5978.9707031), + 3: float32(9625.4453125), + 4: float32(2406.0581055), +} + +var _pR31 = [6]float32{ + 0: float32(-Float64FromFloat64(2.5470459075e-09)), + 1: float32(-Float64FromFloat64(0.070311963558)), + 2: float32(-Float64FromFloat64(2.4090321064)), + 3: float32(-Float64FromFloat64(21.965976715)), + 4: float32(-Float64FromFloat64(58.079170227)), + 5: float32(-Float64FromFloat64(31.447946548)), +} +var _pS33 = [5]float32{ + 0: float32(35.856033325), + 1: float32(361.51397705), + 2: float32(1193.6077881), + 3: float32(1127.9968262), + 4: float32(173.58093262), +} + +var _pR21 = [6]float32{ + 0: float32(-Float64FromFloat64(8.8753431271e-08)), + 1: float32(-Float64FromFloat64(0.070303097367)), + 2: float32(-Float64FromFloat64(1.45073843)), + 3: float32(-Float64FromFloat64(7.6356959343)), + 4: float32(-Float64FromFloat64(11.193166733)), + 5: float32(-Float64FromFloat64(3.2336456776)), +} +var _pS25 = [5]float32{ + 0: float32(22.220300674), + 1: float32(136.20678711), + 2: float32(270.47027588), + 3: float32(153.87539673), + 4: float32(14.657617569), +} + +func _pzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pR81)) + q = uintptr(unsafe.Pointer(&_pS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pR51)) + q = uintptr(unsafe.Pointer(&_pS53)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pR31)) + q = uintptr(unsafe.Pointer(&_pS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR21)) + q = uintptr(unsafe.Pointer(&_pS25)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 4*4))))))) + return float32(Float64FromFloat32(1) + r/s) +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR81 = [6]float32{ + 1: float32(0.0732421875), + 2: float32(11.768206596), + 3: float32(557.67340088), + 4: float32(8859.1972656), + 5: float32(37014.625), +} +var _qS81 = [6]float32{ + 0: float32(163.77603149), + 1: float32(8098.3447266), + 2: float32(142538.29688), + 3: float32(803309.25), + 4: float32(840501.5625), + 5: float32(-Float64FromFloat64(343899.28125)), +} + +var _qR51 = [6]float32{ + 0: float32(1.8408595828e-11), + 1: float32(0.073242180049), + 2: float32(5.8356351852), + 3: float32(135.11157227), + 4: float32(1027.2437744), + 5: float32(1989.9779053), +} +var _qS51 = [6]float32{ + 0: float32(82.776611328), + 1: float32(2077.814209), + 2: float32(18847.289062), + 3: float32(56751.113281), + 4: float32(35976.753906), + 5: float32(-Float64FromFloat64(5354.3427734)), +} + +var _qR31 = [6]float32{ + 0: float32(4.37740999e-09), + 1: float32(0.073241114616), + 2: float32(3.3442313671), + 3: float32(42.621845245), + 4: float32(170.80809021), + 5: float32(166.73394775), +} +var _qS33 = [6]float32{ + 0: float32(48.758872986), + 1: float32(709.68920898), + 2: float32(3704.1481934), + 3: float32(6460.425293), + 4: float32(2516.3337402), + 5: float32(-Float64FromFloat64(149.24745178)), +} + +var _qR21 = [6]float32{ + 0: float32(1.5044444979e-07), + 1: float32(0.073223426938), + 2: float32(1.9981917143), + 3: float32(14.495602608), + 4: float32(31.666231155), + 5: float32(16.252708435), +} +var _qS23 = [6]float32{ + 0: float32(30.365585327), + 1: float32(269.34811401), + 2: float32(844.78375244), + 3: float32(882.93585205), + 4: float32(212.66638184), + 5: float32(-Float64FromFloat64(5.3109550476)), +} + +func _qzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qR81)) + q = uintptr(unsafe.Pointer(&_qS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qR51)) + q = uintptr(unsafe.Pointer(&_qS51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qR31)) + q = uintptr(unsafe.Pointer(&_qS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR21)) + q = uintptr(unsafe.Pointer(&_qS23)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 5*4)))))))) + return float32((float64(-Float32FromFloat32(0.125)) + r/s) / float64(x)) +} + +var _invsqrtpi2 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +func _common2(tls *TLS, ix Tuint32_t, x float64, y1 int32, sign int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x-3pi/4)-q1(x)*sin(x-3pi/4)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x-3pi/4)+q1(x)*cos(x-3pi/4)) + * + * sin(x-3pi/4) = -(sin(x) + cos(x))/sqrt(2) + * cos(x-3pi/4) = (sin(x) - cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + if y1 != 0 { + s = -s + } + c = Xcos(tls, x) + cc = s - c + if ix < uint32(0x7fe00000) { + /* avoid overflow in 2*x */ + ss = -s - c + z = Xcos(tls, Float64FromInt32(2)*x) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y1 != 0 { + ss = -ss + } + cc = _pone(tls, x)*cc - _qone(tls, x)*ss + } + } + if sign != 0 { + cc = -cc + } + return _invsqrtpi2 * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r00 = -Float64FromFloat64(0.0625) /* 0xBFB00000, 0x00000000 */ +var _r01 = float64(0.001407056669551897) /* 0x3F570D9F, 0x98472C61 */ +var _r02 = -Float64FromFloat64(1.599556310840356e-05) /* 0xBEF0C5C6, 0xBA169668 */ +var _r03 = float64(4.9672799960958445e-08) /* 0x3E6AAAFA, 0x46CA0BD9 */ +var _s01 = float64(0.019153759953836346) /* 0x3F939D0B, 0x12637E53 */ +var _s02 = float64(0.00018594678558863092) /* 0x3F285F56, 0xB9CDF664 */ +var _s03 = float64(1.1771846404262368e-06) /* 0x3EB3BFF8, 0x333F8498 */ +var _s04 = float64(5.0463625707621704e-09) /* 0x3E35AC88, 0xC97DFF2C */ +var _s05 = float64(1.2354227442613791e-11) /* 0x3DAB2ACF, 0xCFB97ED8 */ + +func Xj1(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common2(tls, ix, Xfabs(tls, x), 0, sign) + } + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + z = x * x + r = z * (_r00 + z*(_r01+z*(_r02+z*_r03))) + s = Float64FromInt32(1) + z*(_s01+z*(_s02+z*(_s03+z*(_s04+z*_s05)))) + z = r / s + } else { + /* avoid underflow, raise inexact if x!=0 */ + z = x + } + return (float64(0.5) + z) * x +} + +var _U0 = [5]float64{ + 0: -Float64FromFloat64(0.19605709064623894), + 1: float64(0.05044387166398113), + 2: -Float64FromFloat64(0.0019125689587576355), + 3: float64(2.352526005616105e-05), + 4: -Float64FromFloat64(9.190991580398789e-08), +} +var _V0 = [5]float64{ + 0: float64(0.01991673182366499), + 1: float64(0.00020255258102513517), + 2: float64(1.3560880109751623e-06), + 3: float64(6.227414523646215e-09), + 4: float64(1.6655924620799208e-11), +} + +func Xy1(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + return _common2(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x3c900000) { /* x < 2**-54 */ + return -_tpi2 / x + } + z = x * x + u = _U0[0] + z*(_U0[int32(1)]+z*(_U0[int32(2)]+z*(_U0[int32(3)]+z*_U0[int32(4)]))) + v = Float64FromInt32(1) + z*(_V0[0]+z*(_V0[int32(1)]+z*(_V0[int32(2)]+z*(_V0[int32(3)]+z*_V0[int32(4)])))) + return x*(u/v) + _tpi2*(Xj1(tls, x)*Xlog(tls, x)-Float64FromInt32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr8 = [6]float64{ + 1: float64(0.11718749999998865), + 2: float64(13.239480659307358), + 3: float64(412.05185430737856), + 4: float64(3874.7453891396053), + 5: float64(7914.479540318917), +} +var _ps8 = [5]float64{ + 0: float64(114.20737037567841), + 1: float64(3650.9308342085346), + 2: float64(36956.206026903346), + 3: float64(97602.79359349508), + 4: float64(30804.27206278888), +} + +var _pr5 = [6]float64{ + 0: float64(1.3199051955624352e-11), + 1: float64(0.1171874931906141), + 2: float64(6.802751278684329), + 3: float64(108.30818299018911), + 4: float64(517.6361395331998), + 5: float64(528.7152013633375), +} +var _ps5 = [5]float64{ + 0: float64(59.28059872211313), + 1: float64(991.4014187336144), + 2: float64(5353.26695291488), + 3: float64(7844.690317495512), + 4: float64(1504.0468881036106), +} + +var _pr3 = [6]float64{ + 0: float64(3.025039161373736e-09), + 1: float64(0.11718686556725359), + 2: float64(3.9329775003331564), + 3: float64(35.11940355916369), + 4: float64(91.05501107507813), + 5: float64(48.55906851973649), +} +var _ps3 = [5]float64{ + 0: float64(34.79130950012515), + 1: float64(336.76245874782575), + 2: float64(1046.8713997577513), + 3: float64(890.8113463982564), + 4: float64(103.78793243963928), +} + +var _pr2 = [6]float64{ + 0: float64(1.0771083010687374e-07), + 1: float64(0.11717621946268335), + 2: float64(2.368514966676088), + 3: float64(12.242610914826123), + 4: float64(17.693971127168773), + 5: float64(5.073523125888185), +} +var _ps2 = [5]float64{ + 0: float64(21.43648593638214), + 1: float64(125.29022716840275), + 2: float64(232.2764690571628), + 3: float64(117.6793732871471), + 4: float64(8.364638933716183), +} + +func _pone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pr8)) + q = uintptr(unsafe.Pointer(&_ps8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pr5)) + q = uintptr(unsafe.Pointer(&_ps5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pr3)) + q = uintptr(unsafe.Pointer(&_ps3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr2)) + q = uintptr(unsafe.Pointer(&_ps2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = Float64FromFloat64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(Float64FromFloat64(1) + r/s) +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr8 = [6]float64{ + 1: -Float64FromFloat64(0.10253906249999271), + 2: -Float64FromFloat64(16.271753454459), + 3: -Float64FromFloat64(759.6017225139501), + 4: -Float64FromFloat64(11849.806670242959), + 5: -Float64FromFloat64(48438.512428575035), +} +var _qs8 = [6]float64{ + 0: float64(161.3953697007229), + 1: float64(7825.385999233485), + 2: float64(133875.33628724958), + 3: float64(719657.7236832409), + 4: float64(666601.2326177764), + 5: -Float64FromFloat64(294490.26430383464), +} + +var _qr5 = [6]float64{ + 0: -Float64FromFloat64(2.089799311417641e-11), + 1: -Float64FromFloat64(0.10253905024137543), + 2: -Float64FromFloat64(8.05644828123936), + 3: -Float64FromFloat64(183.66960747488838), + 4: -Float64FromFloat64(1373.1937606550816), + 5: -Float64FromFloat64(2612.4444045321566), +} +var _qs5 = [6]float64{ + 0: float64(81.27655013843358), + 1: float64(1991.7987346048596), + 2: float64(17468.48519249089), + 3: float64(49851.42709103523), + 4: float64(27948.075163891812), + 5: -Float64FromFloat64(4719.183547951285), +} + +var _qr3 = [6]float64{ + 0: -Float64FromFloat64(5.078312264617666e-09), + 1: -Float64FromFloat64(0.10253782982083709), + 2: -Float64FromFloat64(4.610115811394734), + 3: -Float64FromFloat64(57.847221656278364), + 4: -Float64FromFloat64(228.2445407376317), + 5: -Float64FromFloat64(219.21012847890933), +} +var _qs3 = [6]float64{ + 0: float64(47.66515503237295), + 1: float64(673.8651126766997), + 2: float64(3380.1528667952634), + 3: float64(5547.729097207228), + 4: float64(1903.119193388108), + 5: -Float64FromFloat64(135.20119144430734), +} + +var _qr2 = [6]float64{ + 0: -Float64FromFloat64(1.7838172751095887e-07), + 1: -Float64FromFloat64(0.10251704260798555), + 2: -Float64FromFloat64(2.7522056827818746), + 3: -Float64FromFloat64(19.663616264370372), + 4: -Float64FromFloat64(42.32531333728305), + 5: -Float64FromFloat64(21.371921170370406), +} +var _qs2 = [6]float64{ + 0: float64(29.533362906052385), + 1: float64(252.98154998219053), + 2: float64(757.5028348686454), + 3: float64(739.3932053204672), + 4: float64(155.94900333666612), + 5: -Float64FromFloat64(4.959498988226282), +} + +func _qone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qr8)) + q = uintptr(unsafe.Pointer(&_qs8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qr5)) + q = uintptr(unsafe.Pointer(&_qs5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qr3)) + q = uintptr(unsafe.Pointer(&_qs3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr2)) + q = uintptr(unsafe.Pointer(&_qs2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = Float64FromFloat64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return float64((Float64FromFloat64(0.375) + r/s) / x) +} + +var _invsqrtpi3 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi3 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common3(tls *TLS, ix Tuint32_t, x float32, y1 int32, sign int32) (r float32) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + s = float64(Xsinf(tls, x)) + if y1 != 0 { + s = -s + } + c = float64(Xcosf(tls, x)) + cc = s - c + if ix < uint32(0x7f000000) { + ss = -s - c + z = float64(Xcosf(tls, Float32FromInt32(2)*x)) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y1 != 0 { + ss = -ss + } + cc = float64(_ponef(tls, x))*cc - float64(_qonef(tls, x))*ss + } + } + if sign != 0 { + cc = -cc + } + return float32(float64(_invsqrtpi3) * cc / float64(Xsqrtf(tls, x))) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r001 = float32(-Float64FromFloat64(0.0625)) /* 0xbd800000 */ +var _r011 = float32(0.0014070566976) /* 0x3ab86cfd */ +var _r021 = float32(-Float64FromFloat64(1.5995563444e-05)) /* 0xb7862e36 */ +var _r031 = float32(4.9672799207e-08) /* 0x335557d2 */ +var _s011 = float32(0.019153760746) /* 0x3c9ce859 */ +var _s021 = float32(0.00018594678841) /* 0x3942fab6 */ +var _s031 = float32(1.1771846857e-06) /* 0x359dffc2 */ +var _s041 = float32(5.046362439e-09) /* 0x31ad6446 */ +var _s051 = float32(1.2354227016e-11) /* 0x2d59567e */ + +func Xj1f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common3(tls, ix, Xfabsf(tls, x), 0, sign) + } + if ix >= uint32(0x39000000) { /* |x| >= 2**-13 */ + z = x * x + r = z * (_r001 + z*(_r011+z*(_r021+z*_r031))) + s = Float32FromInt32(1) + z*(_s011+z*(_s021+z*(_s031+z*(_s041+z*_s051)))) + z = Float32FromFloat32(0.5) + r/s + } else { + z = Float32FromFloat32(0.5) + } + return z * x +} + +var _U01 = [5]float32{ + 0: float32(-Float64FromFloat64(0.19605709612)), + 1: float32(0.050443872809), + 2: float32(-Float64FromFloat64(0.0019125689287)), + 3: float32(2.3525259166e-05), + 4: float32(-Float64FromFloat64(9.1909917899e-08)), +} +var _V01 = [5]float32{ + 0: float32(0.019916731864), + 1: float32(0.0002025525755), + 2: float32(1.3560879779e-06), + 3: float32(6.227414584e-09), + 4: float32(1.6655924903e-11), +} + +func Xy1f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + return _common3(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x33000000) { /* x < 2**-25 */ + return -_tpi3 / x + } + z = x * x + u = _U01[0] + z*(_U01[int32(1)]+z*(_U01[int32(2)]+z*(_U01[int32(3)]+z*_U01[int32(4)]))) + v = Float32FromFloat32(1) + z*(_V01[0]+z*(_V01[int32(1)]+z*(_V01[int32(2)]+z*(_V01[int32(3)]+z*_V01[int32(4)])))) + return x*(u/v) + _tpi3*(Xj1f(tls, x)*Xlogf(tls, x)-Float32FromFloat32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr81 = [6]float32{ + 1: float32(0.1171875), + 2: float32(13.239480972), + 3: float32(412.05184937), + 4: float32(3874.7453613), + 5: float32(7914.4794922), +} +var _ps81 = [5]float32{ + 0: float32(114.20736694), + 1: float32(3650.9309082), + 2: float32(36956.207031), + 3: float32(97602.796875), + 4: float32(30804.271484), +} + +var _pr51 = [6]float32{ + 0: float32(1.3199052094e-11), + 1: float32(0.11718749255), + 2: float32(6.8027510643), + 3: float32(108.30818176), + 4: float32(517.63616943), + 5: float32(528.71520996), +} +var _ps51 = [5]float32{ + 0: float32(59.280597687), + 1: float32(991.40142822), + 2: float32(5353.2670898), + 3: float32(7844.6904297), + 4: float32(1504.046875), +} + +var _pr31 = [6]float32{ + 0: float32(3.0250391081e-09), + 1: float32(0.1171868667), + 2: float32(3.932977438), + 3: float32(35.119403839), + 4: float32(91.055007935), + 5: float32(48.559066772), +} +var _ps31 = [5]float32{ + 0: float32(34.791309357), + 1: float32(336.76245117), + 2: float32(1046.87146), + 3: float32(890.81134033), + 4: float32(103.78793335), +} + +var _pr21 = [6]float32{ + 0: float32(1.0771083225e-07), + 1: float32(0.11717621982), + 2: float32(2.3685150146), + 3: float32(12.242610931), + 4: float32(17.693971634), + 5: float32(5.0735230446), +} +var _ps21 = [5]float32{ + 0: float32(21.436485291), + 1: float32(125.2902298), + 2: float32(232.276474), + 3: float32(117.67937469), + 4: float32(8.3646392822), +} + +func _ponef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pr81)) + q = uintptr(unsafe.Pointer(&_ps81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pr51)) + q = uintptr(unsafe.Pointer(&_ps51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pr31)) + q = uintptr(unsafe.Pointer(&_ps31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr21)) + q = uintptr(unsafe.Pointer(&_ps21)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 4*4))))))) + return float32(Float64FromFloat32(1) + r/s) +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.1025390625)), + 2: float32(-Float64FromFloat64(16.271753311)), + 3: float32(-Float64FromFloat64(759.60174561)), + 4: float32(-Float64FromFloat64(11849.806641)), + 5: float32(-Float64FromFloat64(48438.511719)), +} +var _qs81 = [6]float32{ + 0: float32(161.39537048), + 1: float32(7825.3862305), + 2: float32(133875.34375), + 3: float32(719657.75), + 4: float32(666601.25), + 5: float32(-Float64FromFloat64(294490.25)), +} + +var _qr51 = [6]float32{ + 0: float32(-Float64FromFloat64(2.0897993405e-11)), + 1: float32(-Float64FromFloat64(0.1025390476)), + 2: float32(-Float64FromFloat64(8.0564479828)), + 3: float32(-Float64FromFloat64(183.66960144)), + 4: float32(-Float64FromFloat64(1373.1937256)), + 5: float32(-Float64FromFloat64(2612.4443359)), +} +var _qs51 = [6]float32{ + 0: float32(81.276550293), + 1: float32(1991.7987061), + 2: float32(17468.484375), + 3: float32(49851.425781), + 4: float32(27948.074219), + 5: float32(-Float64FromFloat64(4719.1835938)), +} + +var _qr31 = [6]float32{ + 0: float32(-Float64FromFloat64(5.0783124372e-09)), + 1: float32(-Float64FromFloat64(0.10253783315)), + 2: float32(-Float64FromFloat64(4.6101160049)), + 3: float32(-Float64FromFloat64(57.847221375)), + 4: float32(-Float64FromFloat64(228.24453735)), + 5: float32(-Float64FromFloat64(219.21012878)), +} +var _qs31 = [6]float32{ + 0: float32(47.665153503), + 1: float32(673.8651123), + 2: float32(3380.152832), + 3: float32(5547.7290039), + 4: float32(1903.1191406), + 5: float32(-Float64FromFloat64(135.20118713)), +} + +var _qr21 = [6]float32{ + 0: float32(-Float64FromFloat64(1.7838172539e-07)), + 1: float32(-Float64FromFloat64(0.10251704603)), + 2: float32(-Float64FromFloat64(2.7522056103)), + 3: float32(-Float64FromFloat64(19.66361618)), + 4: float32(-Float64FromFloat64(42.325313568)), + 5: float32(-Float64FromFloat64(21.371921539)), +} +var _qs21 = [6]float32{ + 0: float32(29.533363342), + 1: float32(252.98155212), + 2: float32(757.50280762), + 3: float32(739.39318848), + 4: float32(155.94900513), + 5: float32(-Float64FromFloat64(4.9594988823)), +} + +func _qonef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qr81)) + q = uintptr(unsafe.Pointer(&_qs81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qr51)) + q = uintptr(unsafe.Pointer(&_qs51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qr31)) + q = uintptr(unsafe.Pointer(&_qs31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr21)) + q = uintptr(unsafe.Pointer(&_qs21)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 5*4)))))))) + return float32((Float64FromFloat32(0.375) + r/s) / float64(x)) +} + +var _invsqrtpi4 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ + +func Xjn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float64 + var i, k, nm1, sign int32 + var ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, h, i, ix, k, lx, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + /* nm1 = |n|-1 is used instead of |n| to handle n==INT_MIN */ + if n == 0 { + return Xj0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabs(tls, x) + if ix|lx == uint32(0) || ix == uint32(0x7ff00000) { /* if x is 0 or inf */ + b = float64(0) + } else { + if float64(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xcos(tls, x) + Xsin(tls, x) + case int32(1): + temp = -Xcos(tls, x) - Xsin(tls, x) + case int32(2): + temp = Xcos(tls, x) - Xsin(tls, x) + default: + fallthrough + case int32(3): + temp = Xcos(tls, x) + Xsin(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xj0(tls, x) + b = Xj1(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(float64(2)*float64(i)/x) - a /* avoid underflow */ + a = temp + goto _1 + _1: + } + } + } else { + if ix < uint32(0x3e100000) { /* x < 2**-29 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(32) { /* underflow */ + b = float64(0) + } else { + temp = x * float64(0.5) + b = temp + a = float64(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float64(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } + } else { + nf = float64(nm1) + float64(1) + w = Float64FromInt32(2) * nf / x + h = Float64FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - float64(1) + k = int32(1) + for q1 < float64(1e+09) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = float64(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float64FromInt32(1) / (Float64FromInt32(2)*(float64(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = float64(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlog(tls, Xfabs(tls, w)) + if tmp < float64(709.782712893384) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > float64(3.273390607896142e+150) { + a /= b + t /= b + b = float64(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0(tls, x) + w = Xj1(tls, x) + if Xfabs(tls, z) >= Xfabs(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xyn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, temp, v1, v3 float64 + var i, nm1, sign int32 + var ib, ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, i, ib, ix, lx, nm1, sign, temp, v1, v3 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + if sign != 0 && ix|lx != uint32(0) { /* x < 0 */ + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix == uint32(0x7ff00000) { + return float64(0) + } + if n == 0 { + return Xy0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1(tls, x) + } else { + v1 = Xy1(tls, x) + } + return v1 + } + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xsin(tls, x) - Xcos(tls, x) + case int32(1): + temp = -Xsin(tls, x) + Xcos(tls, x) + case int32(2): + temp = Xsin(tls, x) + Xcos(tls, x) + default: + fallthrough + case int32(3): + temp = Xsin(tls, x) - Xcos(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xy0(tls, x) + b = Xy1(tls, x) + /* quit if b is -inf */ + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xfff00000)) { + break + } + i++ + temp = b + b = float64(2)*float64(i)/x*b - a + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + a = temp + goto _2 + _2: + } + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xjnf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float32 + var i, k, nm1, sign int32 + var ix Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, h, i, ix, k, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + /* J(-n,x) = J(n,-x), use |n|-1 to avoid overflow in -n */ + if n == 0 { + return Xj0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1f(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabsf(tls, x) + if ix == uint32(0) || ix == uint32(0x7f800000) { /* if x is 0 or inf */ + b = Float32FromFloat32(0) + } else { + if float32(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = Xj0f(tls, x) + b = Xj1f(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(Float32FromFloat32(2)*float32(i)/x) - a + a = temp + goto _1 + _1: + } + } else { + if ix < uint32(0x35800000) { /* x < 2**-20 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(8) { /* underflow */ + nm1 = int32(8) + } + temp = Float32FromFloat32(0.5) * x + b = temp + a = Float32FromFloat32(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float32(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } else { + nf = float32(nm1) + Float32FromFloat32(1) + w = Float32FromInt32(2) * nf / x + h = Float32FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - Float32FromFloat32(1) + k = int32(1) + for q1 < Float32FromFloat32(10000) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = Float32FromFloat32(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float32FromFloat32(1) / (Float32FromInt32(2)*(float32(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = Float32FromFloat32(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlogf(tls, Xfabsf(tls, w)) + if tmp < Float32FromFloat32(88.721679688) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > Float32FromFloat32(1.152921504606847e+18) { + a /= b + t /= b + b = Float32FromFloat32(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0f(tls, x) + w = Xj1f(tls, x) + if Xfabsf(tls, z) >= Xfabsf(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xynf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, temp, v1, v3 float32 + var i, nm1, sign int32 + var ib, ix Tuint32_t + _, _, _, _, _, _, _, _, _, _ = a, b, i, ib, ix, nm1, sign, temp, v1, v3 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + if sign != 0 && ix != uint32(0) { /* x < 0 */ + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix == uint32(0x7f800000) { + return Float32FromFloat32(0) + } + if n == 0 { + return Xy0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1f(tls, x) + } else { + v1 = Xy1f(tls, x) + } + return v1 + } + a = Xy0f(tls, x) + b = Xy1f(tls, x) + /* quit if b is -inf */ + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xff800000)) { + break + } + i++ + temp = b + b = Float32FromFloat32(2)*float32(i)/x*b - a + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + a = temp + goto _2 + _2: + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xldexp(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xldexpf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, n) +} + +func Xldexpl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnl(tls, x, n) +} + +func Xlgamma(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi2 = float64(3.141592653589793) /* 0x400921FB, 0x54442D18 */ +var _a0 = float64(0.07721566490153287) /* 0x3FB3C467, 0xE37DB0C8 */ +var _a1 = float64(0.3224670334241136) /* 0x3FD4A34C, 0xC4A60FAD */ +var _a2 = float64(0.06735230105312927) /* 0x3FB13E00, 0x1A5562A7 */ +var _a3 = float64(0.020580808432516733) /* 0x3F951322, 0xAC92547B */ +var _a4 = float64(0.007385550860814029) /* 0x3F7E404F, 0xB68FEFE8 */ +var _a5 = float64(0.0028905138367341563) /* 0x3F67ADD8, 0xCCB7926B */ +var _a6 = float64(0.0011927076318336207) /* 0x3F538A94, 0x116F3F5D */ +var _a7 = float64(0.0005100697921535113) /* 0x3F40B6C6, 0x89B99C00 */ +var _a8 = float64(0.00022086279071390839) /* 0x3F2CF2EC, 0xED10E54D */ +var _a9 = float64(0.00010801156724758394) /* 0x3F1C5088, 0x987DFB07 */ +var _a10 = float64(2.5214456545125733e-05) /* 0x3EFA7074, 0x428CFA52 */ +var _a11 = float64(4.4864094961891516e-05) /* 0x3F07858E, 0x90A45837 */ +var _tc = float64(1.4616321449683622) /* 0x3FF762D8, 0x6356BE3F */ +var _tf = -Float64FromFloat64(0.12148629053584961) /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +var _tt = -Float64FromFloat64(3.638676997039505e-18) /* 0xBC50C7CA, 0xA48A971F */ +var _t0 = float64(0.48383612272381005) /* 0x3FDEF72B, 0xC8EE38A2 */ +var _t1 = -Float64FromFloat64(0.1475877229945939) /* 0xBFC2E427, 0x8DC6C509 */ +var _t2 = float64(0.06462494023913339) /* 0x3FB08B42, 0x94D5419B */ +var _t3 = -Float64FromFloat64(0.032788541075985965) /* 0xBFA0C9A8, 0xDF35B713 */ +var _t4 = float64(0.01797067508118204) /* 0x3F9266E7, 0x970AF9EC */ +var _t5 = -Float64FromFloat64(0.010314224129834144) /* 0xBF851F9F, 0xBA91EC6A */ +var _t6 = float64(0.006100538702462913) /* 0x3F78FCE0, 0xE370E344 */ +var _t7 = -Float64FromFloat64(0.0036845201678113826) /* 0xBF6E2EFF, 0xB3E914D7 */ +var _t8 = float64(0.0022596478090061247) /* 0x3F6282D3, 0x2E15C915 */ +var _t9 = -Float64FromFloat64(0.0014034646998923284) /* 0xBF56FE8E, 0xBF2D1AF1 */ +var _t10 = float64(0.000881081882437654) /* 0x3F4CDF0C, 0xEF61A8E9 */ +var _t11 = -Float64FromFloat64(0.0005385953053567405) /* 0xBF41A610, 0x9C73E0EC */ +var _t12 = float64(0.00031563207090362595) /* 0x3F34AF6D, 0x6C0EBBF7 */ +var _t13 = -Float64FromFloat64(0.00031275416837512086) /* 0xBF347F24, 0xECC38C38 */ +var _t14 = float64(0.0003355291926355191) /* 0x3F35FD3E, 0xE8C2D3F4 */ +var _u0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _u1 = float64(0.6328270640250934) /* 0x3FE4401E, 0x8B005DFF */ +var _u2 = float64(1.4549225013723477) /* 0x3FF7475C, 0xD119BD6F */ +var _u3 = float64(0.9777175279633727) /* 0x3FEF4976, 0x44EA8450 */ +var _u4 = float64(0.22896372806469245) /* 0x3FCD4EAE, 0xF6010924 */ +var _u5 = float64(0.013381091853678766) /* 0x3F8B678B, 0xBF2BAB09 */ +var _v1 = float64(2.4559779371304113) /* 0x4003A5D7, 0xC2BD619C */ +var _v2 = float64(2.128489763798934) /* 0x40010725, 0xA42B18F5 */ +var _v3 = float64(0.7692851504566728) /* 0x3FE89DFB, 0xE45050AF */ +var _v4 = float64(0.10422264559336913) /* 0x3FBAAE55, 0xD6537C88 */ +var _v5 = float64(0.003217092422824239) /* 0x3F6A5ABB, 0x57D0CF61 */ +var _s0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _s1 = float64(0.21498241596060885) /* 0x3FCB848B, 0x36E20878 */ +var _s2 = float64(0.325778796408931) /* 0x3FD4D98F, 0x4F139F59 */ +var _s3 = float64(0.14635047265246445) /* 0x3FC2BB9C, 0xBEE5F2F7 */ +var _s4 = float64(0.02664227030336386) /* 0x3F9B481C, 0x7E939961 */ +var _s5 = float64(0.0018402845140733772) /* 0x3F5E26B6, 0x7368F239 */ +var _s6 = float64(3.194753265841009e-05) /* 0x3F00BFEC, 0xDD17E945 */ +var _r1 = float64(1.3920053346762105) /* 0x3FF645A7, 0x62C4AB74 */ +var _r2 = float64(0.7219355475671381) /* 0x3FE71A18, 0x93D3DCDC */ +var _r3 = float64(0.17193386563280308) /* 0x3FC601ED, 0xCCFBDF27 */ +var _r4 = float64(0.01864591917156529) /* 0x3F9317EA, 0x742ED475 */ +var _r5 = float64(0.0007779424963818936) /* 0x3F497DDA, 0xCA41A95B */ +var _r6 = float64(7.326684307446256e-06) /* 0x3EDEBAF7, 0xA5B38140 */ +var _w0 = float64(0.4189385332046727) /* 0x3FDACFE3, 0x90C97D69 */ +var _w1 = float64(0.08333333333333297) /* 0x3FB55555, 0x5555553B */ +var _w2 = -Float64FromFloat64(0.0027777777772877554) /* 0xBF66C16C, 0x16B02E5C */ +var _w3 = float64(0.0007936505586430196) /* 0x3F4A019F, 0x98CF38B6 */ +var _w4 = -Float64FromFloat64(0.00059518755745034) /* 0xBF4380CB, 0x8C0FE741 */ +var _w5 = float64(0.0008363399189962821) /* 0x3F4B67BA, 0x4CDAD5D1 */ +var _w6 = -Float64FromFloat64(0.0016309293409657527) /* 0xBF5AB89D, 0x0B9E43E4 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* spurious inexact if odd int */ + x = float64(2) * (x*float64(0.5) - Xfloor(tls, x*float64(0.5))) /* x mod 2.0 */ + n = int32(x * Float64FromFloat64(4)) + n = (n + int32(1)) / int32(2) + x -= float64(float32(n) * Float32FromFloat32(0.5)) + x *= _pi2 + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sin(tls, x, float64(0), 0) + case int32(1): + return X__cos(tls, x, float64(0)) + case int32(2): + return X__sin(tls, -x, float64(0), 0) + case int32(3): + return -X__cos(tls, x, float64(0)) + } + return r +} + +func X__lgamma_r(tls *TLS, x float64, signgamp uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix >= uint32(0x7ff00000) { + return x * x + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(70))< Float64FromFloat64(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlog(tls, _pi2/(t*x)) + } + /* purge off 1 and 2 */ + if (ix == uint32(0x3ff00000) || ix == uint32(0x40000000)) && uint32(*(*Tuint64_t)(unsafe.Pointer(bp))) == uint32(0) { + r = Float64FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlog(tls, x) + if ix >= uint32(0x3FE76944) { + y = float64(1) - x + i = 0 + } else { + if ix >= uint32(0x3FCDA661) { + y = float64(x - (_tc - Float64FromFloat64(1))) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float64FromFloat64(0) + if ix >= uint32(0x3FFBB4C3) { /* [1.7316,2] */ + y = float64(2) - x + i = 0 + } else { + if ix >= uint32(0x3FF3B4C4) { /* [1.23,1.73] */ + y = x - _tc + i = int32(1) + } else { + y = x - float64(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a0 + z*(_a2+z*(_a4+z*(_a6+z*(_a8+z*_a10)))) + p2 = z * (_a1 + z*(_a3+z*(_a5+z*(_a7+z*(_a9+z*_a11))))) + p = y*p1 + p2 + r += p - Float64FromFloat64(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t0 + w*(float64(_t3)+w*(_t6+w*(float64(_t9)+w*_t12))) /* parallel comp */ + p2 = float64(_t1) + w*(_t4+w*(float64(_t7)+w*(_t10+w*float64(_t13)))) + p3 = _t2 + w*(float64(_t5)+w*(_t8+w*(float64(_t11)+w*_t14))) + p = z*p1 - (float64(_tt) - w*(p2+y*p3)) + r += float64(_tf) + p + case int32(2): + p1 = y * (float64(_u0) + y*(_u1+y*(_u2+y*(_u3+y*(_u4+y*_u5))))) + p2 = Float64FromFloat64(1) + y*(_v1+y*(_v2+y*(_v3+y*(_v4+y*_v5)))) + r += float64(-Float64FromFloat64(0.5))*y + p1/p2 + } + } else { + if ix < uint32(0x40200000) { /* x < 8.0 */ + i = int32(x) + y = x - float64(i) + p = y * (float64(_s0) + y*(_s1+y*(_s2+y*(_s3+y*(_s4+y*(_s5+y*_s6)))))) + q = Float64FromFloat64(1) + y*(_r1+y*(_r2+y*(_r3+y*(_r4+y*(_r5+y*_r6))))) + r = Float64FromFloat64(0.5)*y + p/q + z = Float64FromFloat64(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float64FromFloat64(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float64FromFloat64(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float64FromFloat64(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float64FromFloat64(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float64FromFloat64(2) /* FALLTHRU */ + r += Xlog(tls, z) + break + } + } else { + if ix < uint32(0x43900000) { /* 8.0 <= x < 2**58 */ + t = Xlog(tls, x) + z = float64(1) / x + y = z * z + w = _w0 + z*(_w1+y*(float64(_w2)+y*(_w3+y*(float64(_w4)+y*(_w5+y*float64(_w6)))))) + r = float64(x-Float64FromFloat64(0.5))*(t-Float64FromFloat64(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlog(tls, x) - float64(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgamma_r(tls *TLS, x float64, signgamp uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, signgamp) +} + +func Xlgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi3 = float32(3.141592741) /* 0x40490fdb */ +var _a01 = float32(0.077215664089) /* 0x3d9e233f */ +var _a12 = float32(0.32246702909) /* 0x3ea51a66 */ +var _a21 = float32(0.067352302372) /* 0x3d89f001 */ +var _a31 = float32(0.020580807701) /* 0x3ca89915 */ +var _a41 = float32(0.0073855509982) /* 0x3bf2027e */ +var _a51 = float32(0.0028905137442) /* 0x3b3d6ec6 */ +var _a61 = float32(0.0011927076848) /* 0x3a9c54a1 */ +var _a71 = float32(0.00051006977446) /* 0x3a05b634 */ +var _a81 = float32(0.00022086278477) /* 0x39679767 */ +var _a91 = float32(0.00010801156895) /* 0x38e28445 */ +var _a101 = float32(2.52144564e-05) /* 0x37d383a2 */ +var _a111 = float32(4.4864096708e-05) /* 0x383c2c75 */ +var _tc1 = float32(1.4616321325) /* 0x3fbb16c3 */ +var _tf1 = float32(-Float64FromFloat64(0.12148628384)) /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +var _tt1 = float32(6.6971006518e-09) /* 0x31e61c52 */ +var _t01 = float32(0.48383611441) /* 0x3ef7b95e */ +var _t15 = float32(-Float64FromFloat64(0.14758771658)) /* 0xbe17213c */ +var _t21 = float32(0.064624942839) /* 0x3d845a15 */ +var _t31 = float32(-Float64FromFloat64(0.032788541168)) /* 0xbd064d47 */ +var _t41 = float32(0.017970675603) /* 0x3c93373d */ +var _t51 = float32(-Float64FromFloat64(0.010314224288)) /* 0xbc28fcfe */ +var _t61 = float32(0.0061005386524) /* 0x3bc7e707 */ +var _t71 = float32(-Float64FromFloat64(0.0036845202558)) /* 0xbb7177fe */ +var _t81 = float32(0.0022596477065) /* 0x3b141699 */ +var _t91 = float32(-Float64FromFloat64(0.0014034647029)) /* 0xbab7f476 */ +var _t101 = float32(0.00088108185446) /* 0x3a66f867 */ +var _t111 = float32(-Float64FromFloat64(0.00053859531181)) /* 0xba0d3085 */ +var _t121 = float32(0.00031563205994) /* 0x39a57b6b */ +var _t131 = float32(-Float64FromFloat64(0.00031275415677)) /* 0xb9a3f927 */ +var _t141 = float32(0.00033552918467) /* 0x39afe9f7 */ +var _u07 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _u11 = float32(0.63282704353) /* 0x3f2200f4 */ +var _u21 = float32(1.4549225569) /* 0x3fba3ae7 */ +var _u31 = float32(0.97771751881) /* 0x3f7a4bb2 */ +var _u41 = float32(0.22896373272) /* 0x3e6a7578 */ +var _u51 = float32(0.013381091878) /* 0x3c5b3c5e */ +var _v11 = float32(2.4559779167) /* 0x401d2ebe */ +var _v21 = float32(2.1284897327) /* 0x4008392d */ +var _v31 = float32(0.76928514242) /* 0x3f44efdf */ +var _v41 = float32(0.10422264785) /* 0x3dd572af */ +var _v51 = float32(0.0032170924824) /* 0x3b52d5db */ +var _s06 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _s11 = float32(0.21498242021) /* 0x3e5c245a */ +var _s21 = float32(0.32577878237) /* 0x3ea6cc7a */ +var _s31 = float32(0.14635047317) /* 0x3e15dce6 */ +var _s41 = float32(0.026642270386) /* 0x3cda40e4 */ +var _s51 = float32(0.0018402845599) /* 0x3af135b4 */ +var _s61 = float32(3.1947532989e-05) /* 0x3805ff67 */ +var _r11 = float32(1.3920053244) /* 0x3fb22d3b */ +var _r21 = float32(0.72193557024) /* 0x3f38d0c5 */ +var _r31 = float32(0.17193385959) /* 0x3e300f6e */ +var _r41 = float32(0.018645919859) /* 0x3c98bf54 */ +var _r51 = float32(0.00077794247773) /* 0x3a4beed6 */ +var _r61 = float32(7.3266842264e-06) /* 0x36f5d7bd */ +var _w01 = float32(0.41893854737) /* 0x3ed67f1d */ +var _w11 = float32(0.083333335817) /* 0x3daaaaab */ +var _w21 = float32(-Float64FromFloat64(0.002777777845)) /* 0xbb360b61 */ +var _w31 = float32(0.00079365057172) /* 0x3a500cfd */ +var _w41 = float32(-Float64FromFloat64(0.00059518753551)) /* 0xba1c065c */ +var _w51 = float32(0.00083633989561) /* 0x3a5b3dd2 */ +var _w61 = float32(-Float64FromFloat64(0.0016309292987)) /* 0xbad5c4e8 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi1(tls *TLS, x float32) (r float32) { + var n int32 + var y Tdouble_t + _, _ = n, y + /* spurious inexact if odd int */ + x = Float32FromInt32(2) * (x*Float32FromFloat32(0.5) - Xfloorf(tls, x*Float32FromFloat32(0.5))) /* x mod 2.0 */ + n = int32(x * Float32FromInt32(4)) + n = (n + int32(1)) / int32(2) + y = float64(x - float32(n)*Float32FromFloat32(0.5)) + y *= Float64FromFloat64(3.141592653589793) + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sindf(tls, y) + case int32(1): + return X__cosdf(tls, y) + case int32(2): + return X__sindf(tls, -y) + case int32(3): + return -X__cosdf(tls, y) + } + return r +} + +func X__lgammaf_r(tls *TLS, x float32, signgamp uintptr) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return x * x + } + if ix < uint32(0x35000000) { /* |x| < 2**-21, return -log(|x|) */ + if sign != 0 { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + x = -x + } + return -Xlogf(tls, x) + } + if sign != 0 { + x = -x + t = _sin_pi1(tls, x) + if t == Float32FromFloat32(0) { /* -integer */ + return Float32FromFloat32(1) / (x - x) + } + if t > Float32FromFloat32(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlogf(tls, _pi3/(t*x)) + } + /* purge off 1 and 2 */ + if ix == uint32(0x3f800000) || ix == uint32(0x40000000) { + r = Float32FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3f666666) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlogf(tls, x) + if ix >= uint32(0x3f3b4a20) { + y = Float32FromFloat32(1) - x + i = 0 + } else { + if ix >= uint32(0x3e6d3308) { + y = x - (_tc1 - Float32FromFloat32(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float32FromFloat32(0) + if ix >= uint32(0x3fdda618) { /* [1.7316,2] */ + y = Float32FromFloat32(2) - x + i = 0 + } else { + if ix >= uint32(0x3F9da620) { /* [1.23,1.73] */ + y = x - _tc1 + i = int32(1) + } else { + y = x - Float32FromFloat32(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a01 + z*(_a21+z*(_a41+z*(_a61+z*(_a81+z*_a101)))) + p2 = z * (_a12 + z*(_a31+z*(_a51+z*(_a71+z*(_a91+z*_a111))))) + p = y*p1 + p2 + r += p - Float32FromFloat32(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t01 + w*(_t31+w*(_t61+w*(_t91+w*_t121))) /* parallel comp */ + p2 = _t15 + w*(_t41+w*(_t71+w*(_t101+w*_t131))) + p3 = _t21 + w*(_t51+w*(_t81+w*(_t111+w*_t141))) + p = z*p1 - (_tt1 - w*(p2+y*p3)) + r += _tf1 + p + case int32(2): + p1 = y * (_u07 + y*(_u11+y*(_u21+y*(_u31+y*(_u41+y*_u51))))) + p2 = Float32FromFloat32(1) + y*(_v11+y*(_v21+y*(_v31+y*(_v41+y*_v51)))) + r += -Float32FromFloat32(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x41000000) { /* x < 8.0 */ + i = int32(x) + y = x - float32(i) + p = y * (_s06 + y*(_s11+y*(_s21+y*(_s31+y*(_s41+y*(_s51+y*_s61)))))) + q = Float32FromFloat32(1) + y*(_r11+y*(_r21+y*(_r31+y*(_r41+y*(_r51+y*_r61))))) + r = Float32FromFloat32(0.5)*y + p/q + z = Float32FromFloat32(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float32FromFloat32(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float32FromFloat32(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float32FromFloat32(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float32FromFloat32(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float32FromFloat32(2) /* FALLTHRU */ + r += Xlogf(tls, z) + break + } + } else { + if ix < uint32(0x5c800000) { /* 8.0 <= x < 2**58 */ + t = Xlogf(tls, x) + z = Float32FromFloat32(1) / x + y = z * z + w = _w01 + z*(_w11+y*(_w21+y*(_w31+y*(_w41+y*(_w51+y*_w61))))) + r = (x-Float32FromFloat32(0.5))*(t-Float32FromFloat32(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlogf(tls, x) - Float32FromFloat32(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgammaf_r(tls *TLS, x float32, signgamp uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, signgamp) +} + +func X__lgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, sg) +} + +func Xlgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +func Xlgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, sg) +} + +/* uses LLONG_MAX > 2^53, see comments in lrint.c */ + +func Xllrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LLONG_MAX > 2^24, see comments in lrint.c */ + +func Xllrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xllrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xllrint(tls, x) +} + +func Xllround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xllroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xllroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +const LOG_POLY1_ORDER = 12 +const LOG_POLY_ORDER = 6 +const LOG_TABLE_BITS = 7 +const N4 = 128 +const OFF = 4604367669032910848 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top16(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, r, r2, r3, rhi, rlo, w, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, r, r2, r3, rhi, rlo, tmp, top, w, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top16(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.064697265625) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + r2 = r * r + r3 = r * r2 + y1 = r3 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 1*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 2*8)) + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 3*8)) + r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 5*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 6*8))+r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 7*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 8*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 9*8))+r3**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 10*8))))) + /* Worst-case error is around 0.507 ULP. */ + w = r * Float64FromFloat64(1.34217728e+08) + rhi = r + w - w + rlo = r - rhi + w = rhi * rhi * *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) /* B[0] == -0.5. */ + hi = r + w + lo = r - hi + w + lo += *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) * rlo * (rhi + r) + y1 += lo + y1 += hi + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-5: + 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma) + Worst case error if |y| > 0x1p-4: + 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */ + y1 = lo + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16)) + r*r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 1*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 2*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 3*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 4*8)))) + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +var _ivln10hi = float64(0.4342944818781689) /* 0x3fdbcb7b, 0x15200000 */ +var _ivln10lo = float64(2.5082946711645275e-11) /* 0x3dbb9438, 0xca9aadd5 */ +var _log10_2hi = float64(0.30102999566361177) /* 0x3FD34413, 0x509F6000 */ +var _log10_2lo = float64(3.694239077158931e-13) /* 0x3D59FEF3, 0x11F12B36 */ +var _Lg1 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg2 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg3 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg4 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg5 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg6 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg7 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, val_hi, val_lo, w, y, z Tdouble_t + var hx Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, hx, k, lo, s, t1, t2, val_hi, val_lo, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = 0 + if hx < uint32(0x00100000) || hx>>int32(31) != 0 { + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(31) != 0 { + return (x - x) / float64(0) + } /* log(-#) = NaN */ + /* subnormal number, scale x up */ + k -= int32(54) + x *= float64(1.8014398509481984e+16) + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + } else { + if hx >= uint32(0x7ff00000) { + return x + } else { + if hx == uint32(0x3ff00000) && *(*Tuint64_t)(unsafe.Pointer(bp))<>Int32FromInt32(20)) - int32(0x3ff) + hx = hx&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hx)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, w, z Tfloat_t + var ix Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, ix, k, lo, s, t1, t2, w, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = 0 + if ix < uint32(0x00800000) || ix>>int32(31) != 0 { /* x < 2**-126 */ + if ix<>int32(31) != 0 { + return (x - x) / Float32FromFloat32(0) + } /* log(-#) = NaN */ + /* subnormal number, scale up x */ + k -= int32(25) + x *= Float32FromFloat32(3.3554432e+07) + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + } else { + if ix >= uint32(0x7f800000) { + return x + } else { + if ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + } + } + /* reduce x into [sqrt(2)/2, sqrt(2)] */ + ix += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k += int32(ix>>Int32FromInt32(23)) - int32(0x7f) + ix = ix&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix + x = *(*float32)(unsafe.Pointer(bp)) + f = float64(x - Float32FromFloat32(1)) + s = f / (Float64FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (float64(_Lg21) + w*float64(_Lg41)) + t2 = z * (float64(_Lg11) + w*float64(_Lg31)) + R = t2 + t1 + hfsq = Float64FromFloat32(0.5) * f * f + hi = f - hfsq + *(*float32)(unsafe.Pointer(bp)) = float32(hi) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0xfffff000) + hi = float64(*(*float32)(unsafe.Pointer(bp))) + lo = f - hi - hfsq + s*(hfsq+R) + dk = float64(k) + return float32(dk*float64(_log10_2lo1) + (lo+hi)*float64(_ivln10lo1) + lo*float64(_ivln10hi1) + hi*float64(_ivln10hi1) + dk*float64(_log10_2hi1)) +} + +func Xlog10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog10(tls, x) +} + +var _ln2_hi2 = float64(0.6931471803691238) /* 3fe62e42 fee00000 */ +var _ln2_lo2 = float64(1.9082149292705877e-10) /* 3dea39ef 35793c76 */ +var _Lg12 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg22 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg32 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg42 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg51 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg61 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg71 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog1p(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tdouble_t + var hu, hx Tuint32_t + var k int32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, hu, hx, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = int32(1) + if hx < uint32(0x3fda827a) || hx>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if hx >= uint32(0xbff00000) { /* x <= -1.0 */ + if x3 == float64(-Int32FromInt32(1)) { + return x3 / float64(0) + } /* log1p(-1) = -inf */ + return (x3 - x3) / float64(0) /* log1p(x<-1) = NaN */ + } + if hx<= uint32(0x7ff00000) { + return x3 + } + } + if k != 0 { + *(*float64)(unsafe.Pointer(bp)) = Float64FromInt32(1) + x3 + hu = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + hu += uint32(Int32FromInt32(0x3ff00000) - Int32FromInt32(0x3fe6a09e)) + k = int32(hu>>Int32FromInt32(20)) - int32(0x3ff) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(54) { + if k >= int32(2) { + v1 = Float64FromInt32(1) - (*(*float64)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float64)(unsafe.Pointer(bp)) - Float64FromInt32(1)) + } + c = v1 + c /= *(*float64)(unsafe.Pointer(bp)) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + hu = hu&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hu)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tfloat_t + var iu, ix Tuint32_t + var k int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, iu, ix, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = int32(1) + if ix < uint32(0x3ed413d0) || ix>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if ix >= uint32(0xbf800000) { /* x <= -1.0 */ + if x3 == float32(-Int32FromInt32(1)) { + return x3 / Float32FromFloat32(0) + } /* log1p(-1)=+inf */ + return (x3 - x3) / Float32FromFloat32(0) /* log1p(x<-1)=NaN */ + } + if ix<= uint32(0x7f800000) { + return x3 + } + } + if k != 0 { + *(*float32)(unsafe.Pointer(bp)) = Float32FromInt32(1) + x3 + iu = *(*Tuint32_t)(unsafe.Pointer(bp)) + iu += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k = int32(iu>>Int32FromInt32(23)) - int32(0x7f) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(25) { + if k >= int32(2) { + v1 = Float32FromInt32(1) - (*(*float32)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + c = float64(v1) + c /= float64(*(*float32)(unsafe.Pointer(bp))) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + iu = iu&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = iu + f = float64(*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + s = f / (Float64FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (float64(_Lg23) + w*float64(_Lg43)) + t2 = z * (float64(_Lg13) + w*float64(_Lg33)) + R = t2 + t1 + hfsq = Float64FromFloat32(0.5) * f * f + dk = float64(k) + return float32(s*(hfsq+R) + (dk*float64(_ln2_lo3) + c) - hfsq + f + dk*float64(_ln2_hi3)) +} + +func Xlog1pl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog1p(tls, x) +} + +const LOG2_POLY1_ORDER = 11 +const LOG2_POLY_ORDER = 7 +const LOG2_TABLE_BITS = 6 +const N5 = 64 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top161(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, p, r, r2, r4, rhi, rhi1, rlo, rlo1, t1, t2, t3, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp, v12, v6 Tuint64_t + var top Tuint32_t + var y, v1, v10, v11, v13, v14, v2, v3, v4, v7, v8 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, p, r, r2, r4, rhi, rhi1, rlo, rlo1, t1, t2, t3, tmp, top, y, y1, z, v1, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top161(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.044274330139160156) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + v7 = r + v6 = *(*Tuint64_t)(unsafe.Pointer(&v7)) & (-Uint64FromUint64(1) << Int32FromInt32(32)) + rhi = *(*float64)(unsafe.Pointer(&v6)) + rlo = r - rhi + hi = rhi * X__log2_data.Finvln2hi + lo = rlo*X__log2_data.Finvln2hi + r*X__log2_data.Finvln2lo + r2 = r * r /* rounding error: 0x1p-62. */ + r4 = r2 * r2 + /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */ + p = r2 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 1*8))) + y1 = hi + p + lo += hi - y1 + p + lo += r4 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 2*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 3*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 5*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 6*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 7*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 8*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 9*8))))) + y1 += lo + y = y1 + v8 = y + goto _9 + _9: + return v8 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v10 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v11 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v11)) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-4: 0.547 ULP (0.550 ULP without fma). + ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */ + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 1*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 2*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 3*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 5*8))) + y1 = lo + r2*p + hi + y = y1 + v14 = y + goto _15 +_15: + return v14 +} + +type Tlog2_data = struct { + Finvln2hi float64 + Finvln2lo float64 + Fpoly [6]float64 + Fpoly1 [10]float64 + Ftab [64]struct { + Finvc float64 + Flogc float64 + } + Ftab2 [64]struct { + Fchi float64 + Fclo float64 + } +} + +const LOG2F_POLY_ORDER = 4 +const LOG2F_TABLE_BITS = 4 +const N6 = 16 +const OFF1 = 1060306944 + +/* +LOG2F_TABLE_BITS = 4 +LOG2F_POLY_ORDER = 4 + +ULP error: 0.752 (nearest rounding.) +Relative error: 1.9 * 2^-26 (before rounding.) +*/ + +func Xlog2f(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, k int32 + var invc, logc, p, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp, top Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, p, r, r2, tmp, top, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log2(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOG2F_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256))*r2 + y1 + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 3*8))*r + y0 + y1 = y1*r2 + p + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlog2f_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fpoly [4]float64 +} + +func Xlog2l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog2(tls, x) +} + +const N7 = 128 + +type Tlog_data = struct { + Fln2hi float64 + Fln2lo float64 + Fpoly [5]float64 + Fpoly1 [11]float64 + Ftab [128]struct { + Finvc float64 + Flogc float64 + } + Ftab2 [128]struct { + Fchi float64 + Fclo float64 + } +} + +/* +special cases: + logb(+-0) = -inf, and raise divbyzero + logb(+-inf) = +inf + logb(nan) = nan +*/ + +func Xlogb(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + return x * x + } + if x == Float32FromInt32(0) { + return float32(-Int32FromInt32(1)) / (x * x) + } + return float32(Xilogbf(tls, x)) +} + +func Xlogbl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r1) }() + } + var i, k int32 + var invc, logc, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, r, r2, tmp, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOGF_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + iz = ix - tmp&uint32(0xff800000) + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k)*X__logf_data.Fln2 + /* Pipelined polynomial evaluation to approximate log1p(r). */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264))*r2 + y1 + y1 = y1*r2 + (y0 + r) + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlogf_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fln2 float64 + Fpoly [3]float64 +} + +func Xlogl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog(tls, x) +} + +const DBL_EPSILON9 = 2.220446049250313e-16 + +/* +If the result cannot be represented (overflow, nan), then +lrint raises the invalid exception. + +Otherwise if the input was not an integer then the inexact +exception is raised. + +C99 is a bit vague about whether inexact exception is +allowed to be raised when invalid is raised. +(F.9 explicitly allows spurious inexact exceptions, F.9.6.5 +does not make it clear if that rule applies to lrint, but +IEEE 754r 7.8 seems to forbid spurious inexact exception in +the ineger conversion functions) + +So we try to make sure that no spurious inexact exception is +raised in case of an overflow. + +If the bit size of long > precision of double, then there +cannot be inexact rounding in case the result overflows, +otherwise LONG_MAX and LONG_MIN can be represented exactly +as a double. +*/ + +// C documentation +// +// /* avoid stack frame in lrint */ +func _lrint_slow(tls *TLS, x float64) (r int32) { + var e int32 + _ = e + e = Xfetestexcept(tls, int32(FE_INEXACT)) + x = Xrint(tls, x) + if !(e != 0) && (x > Float64FromInt32(0x7fffffff) || x < float64(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))) { + Xfeclearexcept(tls, int32(FE_INEXACT)) + } + /* conversion */ + return int32(x) +} + +func Xlrint(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var abstop Tuint32_t + var sign, v1 Tuint64_t + var toint, y Tdouble_t + var v2 float64 + _, _, _, _, _, _ = abstop, sign, toint, y, v1, v2 + abstop = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32) & uint64(0x7fffffff)) + sign = *(*Tuint64_t)(unsafe.Pointer(&x)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + if abstop < uint32(0x41dfffff) { + v2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + v1 = *(*Tuint64_t)(unsafe.Pointer(&v2)) | sign + /* |x| < 0x7ffffc00, no overflow */ + toint = *(*float64)(unsafe.Pointer(&v1)) + y = x + toint - toint + return int32(y) + } + return _lrint_slow(tls, x) +} + +/* uses LONG_MAX > 2^24, see comments in lrint.c */ + +func Xlrintf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xrintf(tls, x)) +} + +const DBL_EPSILON10 = 0 + +func Xlrintl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlrint(tls, x) +} + +func Xlround(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xround(tls, x)) +} + +func Xlroundf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xroundf(tls, x)) +} + +func Xlroundl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xroundl(tls, x)) +} + +func Xmodf(tls *TLS, x float64, iptr uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint64_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + /* no fractional part */ + if e >= int32(52) { + *(*float64)(unsafe.Pointer(iptr)) = x + if e == int32(0x400) && *(*Tuint64_t)(unsafe.Pointer(bp))<> Int32FromInt32(12) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { + *(*float64)(unsafe.Pointer(iptr)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= Uint64FromUint64(1) << Int32FromInt32(63) + return *(*float64)(unsafe.Pointer(bp)) + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return x - *(*float64)(unsafe.Pointer(bp)) +} + +func Xmodff(tls *TLS, x float32, iptr uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + /* no fractional part */ + if e >= int32(23) { + *(*float32)(unsafe.Pointer(iptr)) = x + if e == int32(0x80) && *(*Tuint32_t)(unsafe.Pointer(bp))<> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&mask == uint32(0) { + *(*float32)(unsafe.Pointer(iptr)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^mask + *(*float32)(unsafe.Pointer(iptr)) = *(*float32)(unsafe.Pointer(bp)) + return x - *(*float32)(unsafe.Pointer(bp)) +} + +func Xmodfl(tls *TLS, x float64, iptr uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r float64 + var _ /* d at bp+0 */ float64 + _ = r + r = Xmodf(tls, x, bp) + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return r +} + +func Xnan(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnanf(tls *TLS, s uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__builtin_nanf(tls, __ccgo_ts) +} + +func Xnanl(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnextafter(tls *TLS, x3 float64, y3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ax, ay Tuint64_t + var e int32 + var y float32 + var y1, y2 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y3 + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> int32(52) & uint64(0x7ff)) + /* raise overflow if ux.f is infinite and x is finite */ + if e == int32(0x7ff) { + if uint32(8) == uint32(4) { + y = float32(x3 + x3) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + x3 + } else { + y2 = x3 + x3 + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == 0 { + if uint32(8) == uint32(4) { + y = float32(x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8))) + } else { + if uint32(8) == uint32(8) { + y1 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } else { + y2 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } + } + } + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xnextafterf(tls *TLS, x3 float32, y3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ax, ay, e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y3 + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + y3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == *(*Tuint32_t)(unsafe.Pointer(bp + 8)) { + return y3 + } + ax = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7fffffff) + ay = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) & uint32(0x7fffffff) + if ax == uint32(0) { + if ay == uint32(0) { + return y3 + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = *(*Tuint32_t)(unsafe.Pointer(bp + 8))&uint32(0x80000000) | uint32(1) + } else { + if ax > ay || (*(*Tuint32_t)(unsafe.Pointer(bp + 4))^*(*Tuint32_t)(unsafe.Pointer(bp + 8)))&uint32(0x80000000) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))++ + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint32(4) == uint32(4) { + y = x3 + x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4)) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xnextafterl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttoward(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttowardf(tls *TLS, x3 float32, y3 float64) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v10, v8 uint32 + var v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* __u at bp+8 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+16 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _ = e, y, y1, y2, v1, v10, v3, v5, v6, v8 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 16)) = x3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float64)(unsafe.Pointer(bp + 8)) = y3 + v3 = *(*uint64)(unsafe.Pointer(bp + 8)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16)) |= uint32(0x80000000) + } + } else { + if float64(x3) < y3 { + *(*float32)(unsafe.Pointer(bp)) = x3 + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 + _9: + if int32(v8>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } + } else { + *(*float32)(unsafe.Pointer(bp)) = x3 + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 16)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint32(4) == uint32(4) { + y = x3 + x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16)) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 16)) +} + +func Xnexttowardl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafterl(tls, x, y) +} + +const OFF2 = 4604531861337669632 +const POW_LOG_POLY_ORDER = 8 +const POW_LOG_TABLE_BITS = 7 +const SIGN_BIAS = 262144 + +/* +Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53) +relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma) +ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma) +*/ + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top124(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +// C documentation +// +// /* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about +// additional 15 bits precision. IX is the bit representation of x, but +// normalized in the subnormal range using the sign bit for the exponent. */ +func _log_inline(tls *TLS, ix Tuint64_t, tail uintptr) (r1 Tdouble_t) { + var ar, ar2, ar3, arhi, arhi2, hi, invc, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, rhi, rlo, t1, t2, y, z, zhi, zlo Tdouble_t + var i, k int32 + var iz, tmp, v1 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ar, ar2, ar3, arhi, arhi2, hi, i, invc, iz, k, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, rhi, rlo, t1, t2, tmp, y, z, zhi, zlo, v1 + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF2) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ + sbits -= Uint64FromUint64(1009) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = Float64FromFloat64(5.486124068793689e+303) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + /* Note: sbits is signed scale. */ + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if Xfabs(tls, y3) < float64(1) { + one = Float64FromFloat64(1) + if y3 < Float64FromFloat64(0) { + one = float64(-Float64FromFloat64(1)) + } + lo = scale - y3 + scale*tmp + hi = one + y3 + lo = one - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - one + /* Fix the sign of 0. */ + if y3 == Float64FromFloat64(0) { + v5 = sbits & uint64(0x8000000000000000) + y3 = *(*float64)(unsafe.Pointer(&v5)) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v6 = y1 + goto _7 + _7: + y2 = v6 * float64(2.2250738585072014e-308) + } + y3 = Float64FromFloat64(2.2250738585072014e-308) * y3 + y = y3 + v8 = y + goto _9 +_9: + return v8 +} + +// C documentation +// +// /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|. +// The sign_bias argument is SIGN_BIAS or 0 and sets the sign to -1 or 1. */ +func _exp_inline(tls *TLS, x1 Tdouble_t, xtail Tdouble_t, sign_bias Tuint32_t) (r1 float64) { + var abstop Tuint32_t + var idx, ki, sbits, top, v6 Tuint64_t + var kd, one, r, r2, scale, tail, tmp, z, v1 Tdouble_t + var y, v2, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, one, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v3, v5, v6, v7 + abstop = _top124(tls, x1) & uint32(0x7ff) + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= _top124(tls, float64(512))-_top124(tls, float64(5.551115123125783e-17)) { + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + one = Float64FromFloat64(1) + x1 + if sign_bias != 0 { + v1 = -one + } else { + v1 = one + } + return v1 + } + if abstop >= _top124(tls, float64(1024)) { + /* Note: inf and nan are already handled. */ + v2 = x1 + if *(*Tuint64_t)(unsafe.Pointer(&v2))>>int32(63) != 0 { + return X__math_uflow(tls, sign_bias) + } else { + return X__math_oflow(tls, sign_bias) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v3 = y + goto _4 +_4: + kd = v3 + v5 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v5)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* The code assumes 2^-200 < |xtail| < 2^-8/N. */ + r += xtail + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is +// the bit representation of a non-zero finite floating-point value. */ +func _checkint(tls *TLS, iy Tuint64_t) (r int32) { + var e int32 + _ = e + e = int32(iy >> int32(52) & uint64(0x7ff)) + if e < int32(0x3ff) { + return 0 + } + if e > Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return int32(2) + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)-uint64(1)) != 0 { + return 0 + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +// C documentation +// +// /* Returns 1 if input is the bit representation of 0, infinity or nan. */ +func _zeroinfnan(tls *TLS, i Tuint64_t) (r int32) { + var v1 float64 + _ = v1 + v1 = float64(X__builtin_inff(tls)) + return BoolInt32(uint64(2)*i-uint64(1) >= uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v1))-uint64(1)) +} + +func Xpow(tls *TLS, x1 float64, y1 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ehi, elo, hi, lhi, llo, x2, yhi, ylo, v7 Tdouble_t + var ix, iy, v16, v17 Tuint64_t + var sign_bias, topx, topy Tuint32_t + var y, v1, v10, v11, v12, v13, v14, v15, v18, v2, v3, v5, v6, v8 float64 + var yint int32 + var v4 bool + var _ /* lo at bp+0 */ Tdouble_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ehi, elo, hi, ix, iy, lhi, llo, sign_bias, topx, topy, x2, y, yhi, yint, ylo, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v2, v3, v4, v5, v6, v7, v8 + sign_bias = uint32(0) + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint64_t)(unsafe.Pointer(&y1)) + topx = _top124(tls, x1) + topy = _top124(tls, y1) + if topx-uint32(0x001) >= uint32(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) || topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0 + and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */ + /* Special cases: (x < 0x1p-126 or inf or nan) or + (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */ + if _zeroinfnan(tls, iy) != 0 { + if uint64(2)*iy == uint64(0) { + return float64(1) + } + v1 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(1) + } + v2 = float64(X__builtin_inff(tls)) + if v4 = uint64(2)*ix > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v2)); !v4 { + v3 = float64(X__builtin_inff(tls)) + } + if v4 || uint64(2)*iy > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + return x1 + y1 + } + v5 = float64(1) + if uint64(2)*ix == uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v5)) { + return float64(1) + } + v6 = float64(1) + if BoolInt32(uint64(2)*ix < uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v6))) == BoolInt32(!(iy>>Int32FromInt32(63) != 0)) { + return float64(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan(tls, ix) != 0 { + x2 = x1 * x1 + if ix>>int32(63) != 0 && _checkint(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy>>int32(63) != 0 { + y = float64(Float64FromInt32(1) / x2) + v8 = y + goto _9 + _9: + v7 = v8 + } else { + v7 = x2 + } + return v7 + } + /* Here x and y are non-zero finite. */ + if ix>>int32(63) != 0 { + /* Finite x < 0. */ + yint = _checkint(tls, iy) + if yint == 0 { + return X__math_invalid(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(0x800) << Int32FromInt32(EXP_TABLE_BITS)) + } + ix &= uint64(0x7fffffffffffffff) + topx &= uint32(0x7ff) + } + if topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: sign_bias == 0 here because y is not odd. */ + v10 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { + return float64(1) + } + if topy&uint32(0x7ff) < uint32(0x3be) { + /* |y| < 2^-65, x^y ~= 1 + y*log(x). */ + if int32(WANT_ROUNDING) != 0 { + v12 = float64(1) + if ix > *(*Tuint64_t)(unsafe.Pointer(&v12)) { + v11 = float64(1) + y1 + } else { + v11 = float64(1) - y1 + } + return v11 + } else { + return float64(1) + } + } + v14 = float64(1) + if BoolInt32(ix > *(*Tuint64_t)(unsafe.Pointer(&v14))) == BoolInt32(topy < uint32(0x800)) { + v13 = X__math_oflow(tls, uint32(0)) + } else { + v13 = X__math_uflow(tls, uint32(0)) + } + return v13 + } + if topx == uint32(0) { + /* Normalize subnormal x so exponent becomes negative. */ + v15 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v15)) + ix &= uint64(0x7fffffffffffffff) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + } + hi = _log_inline(tls, ix, bp) + v16 = iy & (-Uint64FromUint64(1) << Int32FromInt32(27)) + yhi = *(*float64)(unsafe.Pointer(&v16)) + ylo = y1 - yhi + v18 = hi + v17 = *(*Tuint64_t)(unsafe.Pointer(&v18)) & (-Uint64FromUint64(1) << Int32FromInt32(27)) + lhi = *(*float64)(unsafe.Pointer(&v17)) + llo = hi - lhi + *(*Tdouble_t)(unsafe.Pointer(bp)) + ehi = yhi * lhi + elo = ylo*lhi + y1*llo /* |elo| < |ehi| * 2^-25. */ + return _exp_inline(tls, ehi, elo, sign_bias) +} + +const N9 = 128 + +type Tpow_log_data = struct { + Fln2hi float64 + Fln2lo float64 + Fpoly [7]float64 + Ftab [128]struct { + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + } +} + +const OFF3 = 1060306944 +const POWF_LOG2_POLY_ORDER = 5 +const POWF_LOG2_TABLE_BITS = 4 +const POWF_SCALE_BITS = 0 +const SIGN_BIAS1 = 65536 + +/* +POWF_LOG2_POLY_ORDER = 5 +EXP2F_TABLE_BITS = 5 + +ULP error: 0.82 (~ 0.5 + relerr*2^24) +relerr: 1.27 * 2^-26 (Relative error ~= 128*Ln2*relerr_log2 + relerr_exp2) +relerr_log2: 1.83 * 2^-33 (Relative error of logx.) +relerr_exp2: 1.69 * 2^-34 (Relative error of exp2(ylogx).) +*/ + +// C documentation +// +// /* Subnormal input is normalized so ix has negative biased exponent. +// Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set. */ +func _log2_inline(tls *TLS, ix Tuint32_t) (r1 Tdouble_t) { + var i, k int32 + var invc, logc, p, q, r, r2, r4, y, y0, z Tdouble_t + var iz, tmp, top Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, iz, k, logc, p, q, r, r2, r4, tmp, top, y, y0, z + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF3) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(POWF_LOG2_TABLE_BITS)) % uint32(Int32FromInt32(1)<> (Int32FromInt32(23) - Int32FromInt32(POWF_SCALE_BITS)) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 1*8)) + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 2*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 3*8)) + r4 = r2 * r2 + q = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 4*8))*r + y0 + q = p*r2 + q + y = y*r4 + q + return y +} + +// C documentation +// +// /* The output of log2 and thus the input of exp2 is either scaled by N +// (in case of fast toint intrinsics) or not. The unscaled xd must be +// in [-1021,1023], sign_bias sets the sign of the result. */ +func _exp2_inline(tls *TLS, xd Tdouble_t, sign_bias Tuint32_t) (r1 float32) { + var kd, r, r2, s, y2, z Tdouble_t + var ki, ski, t Tuint64_t + var y, v4 float32 + var y1, v1, v3 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = kd, ki, r, r2, s, ski, t, y, y1, y2, z, v1, v3, v4 + /* x = k/N + r with r in [-1/(2N), 1/(2N)] */ + y1 = xd + X__exp2f_data.Fshift_scaled + v1 = y1 + goto _2 +_2: + kd = v1 + v3 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v3)) + kd -= X__exp2f_data.Fshift_scaled /* k/N */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)<> int32(23) & uint32(0xff)) + if e < int32(0x7f) { + return 0 + } + if e > Int32FromInt32(0x7f)+Int32FromInt32(23) { + return int32(2) + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)-Int32FromInt32(1)) != 0 { + return 0 + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +func _zeroinfnan1(tls *TLS, ix Tuint32_t) (r int32) { + return BoolInt32(uint32(2)*ix-uint32(1) >= Uint32FromUint32(2)*Uint32FromInt32(0x7f800000)-Uint32FromInt32(1)) +} + +func Xpowf(tls *TLS, x1 float32, y1 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix, iy, sign_bias Tuint32_t + var logx, ylogx Tdouble_t + var x2, v1 Tfloat_t + var y, v2, v4 float32 + var yint int32 + var v5, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, iy, logx, sign_bias, x2, y, yint, ylogx, v1, v2, v4, v5, v6 + sign_bias = uint32(0) + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) || _zeroinfnan1(tls, iy) != 0 { + /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */ + if _zeroinfnan1(tls, iy) != 0 { + if uint32(2)*iy == uint32(0) { + return Float32FromFloat32(1) + } + if ix == uint32(0x3f800000) { + return Float32FromFloat32(1) + } + if uint32(2)*ix > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) || uint32(2)*iy > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) { + return x1 + y1 + } + if uint32(2)*ix == uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000)) { + return Float32FromFloat32(1) + } + if BoolInt32(uint32(2)*ix < uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000))) == BoolInt32(!(iy&Uint32FromUint32(0x80000000) != 0)) { + return Float32FromFloat32(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan1(tls, ix) != 0 { + x2 = float64(x1 * x1) + if ix&uint32(0x80000000) != 0 && _checkint1(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy&uint32(0x80000000) != 0 { + y = float32(Float64FromInt32(1) / x2) + v2 = y + goto _3 + _3: + v1 = float64(v2) + } else { + v1 = x2 + } + return float32(v1) + } + /* x and y are non-zero finite. */ + if ix&uint32(0x80000000) != 0 { + /* Finite x < 0. */ + yint = _checkint1(tls, iy) + if yint == 0 { + return X__math_invalidf(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(1) << (Int32FromInt32(EXP2F_TABLE_BITS) + Int32FromInt32(11))) + } + ix &= uint32(0x7fffffff) + } + if ix < uint32(0x00800000) { + /* Normalize subnormal x so exponent becomes negative. */ + v4 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v4)) + ix &= uint32(0x7fffffff) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + } + logx = _log2_inline(tls, ix) + ylogx = float64(y1) * logx /* cannot overflow, y is single prec. */ + v5 = ylogx + v6 = float64(126) * float64(Int32FromInt32(1)<>int32(47)&uint64(0xffff) >= *(*Tuint64_t)(unsafe.Pointer(&v6))>>int32(47) { + /* |y*log(x)| >= 126. */ + if ylogx > float64(127.99999995700433)*float64(Int32FromInt32(1)< %v", r) }() + } + return Xpow(tls, x, y) +} + +func Xremainder(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquo(tls, x, y, bp) +} + +func Xdrem(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremainderf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquof(tls, x, y, bp) +} + +func Xdremf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainderf(tls, x, y) +} + +func Xremainderl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremquo(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx, sy, v8 int32 + var i, uxi Tuint64_t + var q Tuint32_t + var v1 uint64 + var v3 bool + var v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + sy = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(63)) + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi &= -Uint64FromUint64(1) >> Int32FromInt32(12) + uxi |= Uint64FromUint64(1) << Int32FromInt32(52) + } + if !(ey != 0) { + i = *(*Tuint64_t)(unsafe.Pointer(bp + 16)) << int32(12) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) &= -Uint64FromUint64(1) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) |= Uint64FromUint64(1) << Int32FromInt32(52) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + uxi <<= uint64(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + if uxi == uint64(0) { + ex = -int32(60) + } else { + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint64(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint64FromUint64(1) << Int32FromInt32(52) + uxi |= uint64(ex) << int32(52) + } else { + uxi >>= uint64(-ex + int32(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + x = *(*float64)(unsafe.Pointer(bp + 8)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float64FromInt32(2)*x > y || Float64FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquof(tls *TLS, x float32, y float32, quo uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey, sx, sy, v8 int32 + var i, q, uxi Tuint32_t + var v1 uint32 + var v3 bool + var v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(31)) + sy = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(31)) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + uxi <<= uint32(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + if uxi == uint32(0) { + ex = -int32(30) + } else { + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + x = *(*float32)(unsafe.Pointer(bp + 4)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float32FromInt32(2)*x > y || Float32FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquol(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremquo(tls, x, y, quo) +} + +const DBL_EPSILON11 = 2.220446049250313e-16 + +var _toint4 = float64(Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16)) + +func Xrint(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tdouble_t + var v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x + } + if s != 0 { + y = x - _toint4 + _toint4 + } else { + y = x + _toint4 - _toint4 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(0) + } + return v1 + } + return y +} + +const DBL_EPSILON12 = 0 +const FLT_EPSILON1 = 1.1920928955078125e-07 + +var _toint5 = float64(Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07)) + +func Xrintf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tfloat_t + var v1 float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + s = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x + } + if s != 0 { + y = float64(x) - _toint5 + _toint5 + } else { + y = float64(x) + _toint5 - _toint5 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float32FromFloat32(0) + } else { + v1 = Float32FromFloat32(0) + } + return v1 + } + return float32(y) +} + +const FLT_EPSILON2 = 0 + +func Xrintl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrint(tls, x) +} + +const DBL_EPSILON13 = 2.220446049250313e-16 + +var _toint6 = float64(Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16)) + +func Xround(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x3 + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x3ff)-Int32FromInt32(1) { + /* raise inexact if x!=0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + _toint6) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + _toint6 + } else { + y2 = x3 + _toint6 + } + } + return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint6 - _toint6 - x3 + if y3 > Float64FromFloat64(0.5) { + y3 = y3 + x3 - Float64FromInt32(1) + } else { + if y3 <= float64(-Float64FromFloat64(0.5)) { + y3 = y3 + x3 + Float64FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = -y3 + } + return y3 +} + +const DBL_EPSILON14 = 0 +const FLT_EPSILON3 = 1.1920928955078125e-07 + +var _toint7 = float64(Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07)) + +func Xroundf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x7f)-Int32FromInt32(1) { + if uint32(8) == uint32(4) { + y = float32(float64(x3) + _toint7) + } else { + if uint32(8) == uint32(8) { + y1 = float64(x3) + _toint7 + } else { + y2 = float64(x3) + _toint7 + } + } + return Float32FromInt32(0) * *(*float32)(unsafe.Pointer(bp)) + } + y3 = float64(x3) + _toint7 - _toint7 - float64(x3) + if y3 > Float64FromFloat32(0.5) { + y3 = y3 + float64(x3) - Float64FromInt32(1) + } else { + if y3 <= float64(-Float32FromFloat32(0.5)) { + y3 = y3 + float64(x3) + Float64FromInt32(1) + } else { + y3 = y3 + float64(x3) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + y3 = -y3 + } + return float32(y3) +} + +const FLT_EPSILON4 = 0 + +func Xroundl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xround(tls, x) +} + +func Xscalb(tls *TLS, x float64, fn float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< float64(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrint(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > float64(65000) { + return Xscalbn(tls, x, int32(65000)) + } + if -fn > float64(65000) { + return Xscalbn(tls, x, -int32(65000)) + } + return Xscalbn(tls, x, int32(fn)) +} + +func Xscalbf(tls *TLS, x float32, fn float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = fn + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x * fn + } + *(*float32)(unsafe.Pointer(bp)) = fn + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 +_7: + if !(BoolInt32(v6&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if fn > Float32FromFloat32(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrintf(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, int32(65000)) + } + if -fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, -int32(65000)) + } + return Xscalbnf(tls, x, int32(fn)) +} + +func Xscalbln(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int32(INT_MAX) { + n = int32(INT_MAX) + } else { + if n < int32(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int32(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbn(tls, x, n) +} + +func Xscalblnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int32(INT_MAX) { + n = int32(INT_MAX) + } else { + if n < int32(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int32(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbnf(tls, x, n) +} + +func Xscalblnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbln(tls, x, n) +} + +func Xscalbn(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = x + if n > int32(1023) { + y *= Float64FromFloat64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + y *= Float64FromFloat64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + n = int32(1023) + } + } + } else { + if n < -int32(1022) { + /* make sure final n < -53 to avoid double + rounding in the subnormal range */ + y *= float64(Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15)) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + y *= float64(Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15)) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + n = -int32(1022) + } + } + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(Int32FromInt32(0x3ff)+n) << int32(52) + x = y * *(*float64)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = float64(x) + if n > int32(127) { + y *= Float64FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + y *= Float64FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + n = int32(127) + } + } + } else { + if n < -int32(126) { + y *= float64(Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07)) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + y *= float64(Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07)) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + n = -int32(126) + } + } + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(Int32FromInt32(0x7f)+n) << int32(23) + x = float32(y * float64(*(*float32)(unsafe.Pointer(bp)))) + return x +} + +func Xscalbnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xsignificand(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, -Xilogb(tls, x)) +} + +func Xsignificandf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, -Xilogbf(tls, x)) +} + +func Xsin(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + /* High word of x. */ + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e500000) { /* |x| < 2**-26 */ + /* raise inexact if x != 0 and underflow if subnormal*/ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__sin(tls, x3, float64(0), 0) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(1): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(2): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + default: + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + } + return r +} + +func Xsincos(tls *TLS, x3 float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s, y1, y2, v1, v2, v3, v4 float64 + var ix Tuint32_t + var n uint32 + var y float32 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, y, y1, y2, v1, v2, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + /* if |x| < 2**-27 * sqrt(2) */ + if ix < uint32(0x3e46a09e) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + *(*float64)(unsafe.Pointer(sin)) = x3 + *(*float64)(unsafe.Pointer(cos)) = float64(1) + return + } + *(*float64)(unsafe.Pointer(sin)) = X__sin(tls, x3, float64(0), 0) + *(*float64)(unsafe.Pointer(cos)) = X__cos(tls, x3, float64(0)) + return + } + /* sincos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + v4 = x3 - x3 + *(*float64)(unsafe.Pointer(cos)) = v4 + *(*float64)(unsafe.Pointer(sin)) = v4 + return + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + s = X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + c = X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float64)(unsafe.Pointer(sin)) = s + *(*float64)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float64)(unsafe.Pointer(sin)) = c + *(*float64)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float64)(unsafe.Pointer(sin)) = -s + *(*float64)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float64)(unsafe.Pointer(sin)) = -c + *(*float64)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_25 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsincosf(tls *TLS, x3 float32, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s Tfloat_t + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3, v8 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + /* |x| ~<= pi/4 */ + if ix <= uint32(0x3f490fda) { + /* |x| < 2**-12 */ + if ix < uint32(0x39800000) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + *(*float32)(unsafe.Pointer(sin)) = x3 + *(*float32)(unsafe.Pointer(cos)) = Float32FromFloat32(1) + return + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, float64(x3)) + return + } + /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x407b53d1) { + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)+_s1pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)+_s1pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, _s1pio2-float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, _s1pio2-float64(x3)) + } + return + } + /* -sin(x+c) is not correct if x+c could be 0: -0 vs +0 */ + if sign != 0 { + v4 = float64(x3) + _s2pio2 + } else { + v4 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(sin)) = -X__sindf(tls, v4) + if sign != 0 { + v5 = float64(x3) + _s2pio2 + } else { + v5 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(cos)) = -X__cosdf(tls, v5) + return + } + /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40e231d5) { + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, float64(x3)+_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = -X__sindf(tls, float64(x3)+_s3pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)-_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)-_s3pio2) + } + return + } + if sign != 0 { + v6 = float64(x3) + _s4pio2 + } else { + v6 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, v6) + if sign != 0 { + v7 = float64(x3) + _s4pio2 + } else { + v7 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, v7) + return + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + v8 = x3 - x3 + *(*float32)(unsafe.Pointer(cos)) = v8 + *(*float32)(unsafe.Pointer(sin)) = v8 + return + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + s = float64(X__sindf(tls, *(*float64)(unsafe.Pointer(bp)))) + c = float64(X__cosdf(tls, *(*float64)(unsafe.Pointer(bp)))) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float32)(unsafe.Pointer(sin)) = float32(s) + *(*float32)(unsafe.Pointer(cos)) = float32(c) + case uint32(1): + *(*float32)(unsafe.Pointer(sin)) = float32(c) + *(*float32)(unsafe.Pointer(cos)) = float32(-s) + case uint32(2): + *(*float32)(unsafe.Pointer(sin)) = float32(-s) + *(*float32)(unsafe.Pointer(cos)) = float32(-c) + case uint32(3): + fallthrough + default: + *(*float32)(unsafe.Pointer(sin)) = float32(-c) + *(*float32)(unsafe.Pointer(cos)) = float32(s) + break + } +} + +const M_PI_26 = 0 + +func Xsincosl(tls *TLS, x float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v sin=%v cos=%v, (%v:)", tls, x, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cosd at bp+8 */ float64 + var _ /* sind at bp+0 */ float64 + Xsincos(tls, x, bp, bp+8) + *(*float64)(unsafe.Pointer(sin)) = *(*float64)(unsafe.Pointer(bp)) + *(*float64)(unsafe.Pointer(cos)) = *(*float64)(unsafe.Pointer(bp + 8)) +} + +const M_PI_27 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio21 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio21 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio21 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio21 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsinf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign int32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__sindf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + return -X__cosdf(tls, float64(x3)+_s1pio21) + } else { + return X__cosdf(tls, float64(x3)-_s1pio21) + } + } + if sign != 0 { + v4 = -(float64(x3) + _s2pio21) + } else { + v4 = -(float64(x3) - _s2pio21) + } + return X__sindf(tls, v4) + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + return X__cosdf(tls, float64(x3)+_s3pio21) + } else { + return -X__cosdf(tls, float64(x3)-_s3pio21) + } + } + if sign != 0 { + v5 = float64(x3) + _s4pio21 + } else { + v5 = float64(x3) - _s4pio21 + } + return X__sindf(tls, v5) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = X__rem_pio2f(tls, x3, bp) + switch n & Int32FromInt32(3) { + case 0: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(1): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(2): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + default: + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_28 = 0 + +// C documentation +// +// /* sinh(x) = (exp(x) - 1/exp(x))/2 +// * = (exp(x)-1 + (exp(x)-1)/exp(x))/2 +// * = x + x^3/6 + o(x^5) +// */ +func Xsinh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float64 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + h = float64(0.5) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + h = -h + } + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + absx = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(DBL_MAX) */ + if w < uint32(0x40862e42) { + t = Xexpm1(tls, absx) + if w < uint32(0x3ff00000) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26)+eps could be just h*exp(x) */ + return h * (t + t/(t+Float64FromInt32(1))) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, absx, Float64FromInt32(2)*h) + return t +} + +func Xsinhf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float32 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + h = float32(0.5) + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + h = -h + } + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + absx = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(FLT_MAX) */ + if w < uint32(0x42b17217) { + t = Xexpm1f(tls, absx) + if w < uint32(0x3f800000) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< logf(FLT_MAX) or nan */ + t = X__expo2f(tls, absx, Float32FromInt32(2)*h) + return t +} + +func Xsinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsinh(tls, x) +} + +func Xsinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsin(tls, x) +} + +const FENV_SUPPORT = 1 + +// C documentation +// +// /* returns a*b*2^-32 - e, with error 0 <= e < 1. */ +func _mul32(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +// C documentation +// +// /* returns a*b*2^-64 - e, with error 0 <= e < 3. */ +func _mul64(tls *TLS, a Tuint64_t, b Tuint64_t) (r Tuint64_t) { + var ahi, alo, bhi, blo Tuint64_t + _, _, _, _ = ahi, alo, bhi, blo + ahi = a >> int32(32) + alo = a & uint64(0xffffffff) + bhi = b >> int32(32) + blo = b & uint64(0xffffffff) + return ahi*bhi + ahi*blo>>int32(32) + alo*bhi>>int32(32) +} + +func Xsqrt(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, i, ix, m, r, s, tiny, top, u Tuint64_t + var even int32 + var t, y, y1, v1, v3 float64 + var v2 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, i, ix, m, r, s, t, tiny, top, u, y, y1, v1, v2, v3 + /* special case handling. */ + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = ix >> int32(52) + if top-uint64(0x001) >= uint64(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return x1 + } + if ix == uint64(0x7ff0000000000000) { + return x1 + } + if ix > uint64(0x7ff0000000000000) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + top = ix >> int32(52) + top -= uint64(52) + } + /* argument reduction: + x = 4^e m; with integer e, and m in [1, 4) + m: fixed point representation [2.62] + 2^e is the exponent part of the result. */ + even = int32(top & uint64(1)) + m = ix<>= uint64(1) + } + top = (top + uint64(0x3ff)) >> int32(1) + i = ix >> Int32FromInt32(46) % uint64(128) + r = uint64(uint32(X__rsqrt_tab[i]) << int32(16)) + /* |r sqrt(m) - 1| < 0x1.fdp-9 */ + s = uint64(_mul32(tls, uint32(m>>int32(32)), uint32(r))) + /* |s/sqrt(m) - 1| < 0x1.fdp-9 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.7bp-16 */ + s = uint64(_mul32(tls, uint32(s), uint32(u)) << int32(1)) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.3704p-29 (measured worst-case) */ + r = r << int32(32) + s = _mul64(tls, m, r) + d = _mul64(tls, s, r) + u = _three<> int32(9) + d0 = m<> int32(63) + s &= uint64(0x000fffffffffffff) + s |= top << int32(52) + y1 = *(*float64)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint64(0) { + v2 = 0 + } else { + v2 = int64(0x0010000000000000) + } + /* handle rounding modes and inexact exception: + only (s+1)^2 == 2^42 m case is exact otherwise + add a tiny value to cause the fenv effects. */ + tiny = uint64(v2) + tiny |= (d1 ^ d2) & uint64(0x8000000000000000) + t = *(*float64)(unsafe.Pointer(&tiny)) + y = y1 + t + v3 = y + goto _4 + _4: + y1 = v3 + } + return y1 +} + +/* approximate r ~ 1/sqrt(m) and s ~ sqrt(m) when m in [1,4) + + initial estimate: + 7bit table lookup (1bit exponent and 6bit significand). + + iterative approximation: + using 2 goldschmidt iterations with 32bit int arithmetics + and a final iteration with 64bit int arithmetics. + + details: + + the relative error (e = r0 sqrt(m)-1) of a linear estimate + (r0 = a m + b) is |e| < 0.085955 ~ 0x1.6p-4 at best, + a table lookup is faster and needs one less iteration + 6 bit lookup table (128b) gives |e| < 0x1.f9p-8 + 7 bit lookup table (256b) gives |e| < 0x1.fdp-9 + for single and double prec 6bit is enough but for quad + prec 7bit is needed (or modified iterations). to avoid + one more iteration >=13bit table would be needed (16k). + + a newton-raphson iteration for r is + w = r*r + u = 3 - m*w + r = r*u/2 + can use a goldschmidt iteration for s at the end or + s = m*r + + first goldschmidt iteration is + s = m*r + u = 3 - s*r + r = r*u/2 + s = s*u/2 + next goldschmidt iteration is + u = 3 - s*r + r = r*u/2 + s = s*u/2 + and at the end r is not computed only s. + + they use the same amount of operations and converge at the + same quadratic rate, i.e. if + r1 sqrt(m) - 1 = e, then + r2 sqrt(m) - 1 = -3/2 e^2 - 1/2 e^3 + the advantage of goldschmidt is that the mul for s and r + are independent (computed in parallel), however it is not + "self synchronizing": it only uses the input m in the + first iteration so rounding errors accumulate. at the end + or when switching to larger precision arithmetics rounding + errors dominate so the first iteration should be used. + + the fixed point representations are + m: 2.30 r: 0.32, s: 2.30, d: 2.30, u: 2.30, three: 2.30 + and after switching to 64 bit + m: 2.62 r: 0.64, s: 2.62, d: 2.62, u: 2.62, three: 2.62 */ + +var _three = uint64(0xc0000000) + +func _mul321(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +/* see sqrt.c for more detailed comments. */ + +func Xsqrtf(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, tiny, u Tuint32_t + var t, y, y1, v1, v4 float32 + var v2 uint32 + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, t, tiny, u, y, y1, v1, v2, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return x1 + } + if ix == uint32(0x7f800000) { + return x1 + } + if ix > uint32(0x7f800000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 4^e m; with int e and m in [1, 4). */ + even = ix & uint32(0x00800000) + m1 = ix<> int32(1) + ey += uint32(Int32FromInt32(0x3f800000) >> Int32FromInt32(1)) + ey &= uint32(0x7f800000) + i = ix >> Int32FromInt32(17) % uint32(128) + r = uint32(X__rsqrt_tab[i]) << int32(16) + /* |r*sqrt(m) - 1| < 0x1p-8 */ + s = _mul321(tls, m, r) + /* |s/sqrt(m) - 1| < 0x1p-8 */ + d = _mul321(tls, s, r) + u = _three1 - d + r = _mul321(tls, r, u) << int32(1) + /* |r*sqrt(m) - 1| < 0x1.7bp-16 */ + s = _mul321(tls, s, u) << int32(1) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = _mul321(tls, s, r) + u = _three1 - d + s = _mul321(tls, s, u) + /* -0x1.03p-28 < s/sqrt(m) - 1 < 0x1.fp-31 */ + s = (s - uint32(1)) >> int32(6) + d0 = m<> int32(31) + s &= uint32(0x007fffff) + s |= ey + y1 = *(*float32)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint32(0) { + v3 = 0 + } else { + v3 = int32(0x01000000) + } + /* handle rounding and inexact exception. */ + tiny = uint32(v3) + tiny |= (d1 ^ d2) & uint32(0x80000000) + t = *(*float32)(unsafe.Pointer(&tiny)) + y = y1 + t + v4 = y + goto _5 + _5: + y1 = v4 + } + return y1 +} + +/* compute r ~ 1/sqrt(m), s ~ sqrt(m) with 2 goldschmidt iterations. */ +var _three1 = uint32(0xc0000000) + +func Xsqrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsqrt(tls, x) +} + +func Xtan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e400000) { /* |x| < 2**-27 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__tan(tls, x3, float64(0), 0) + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + return X__tan(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(n&uint32(1))) +} + +const M_PI_29 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _t1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _t2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _t3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _t4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xtanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__tandf(tls, float64(x3), 0) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + v4 = float64(x3) + _t1pio2 + } else { + v4 = float64(x3) - _t1pio2 + } + return X__tandf(tls, v4, int32(1)) + } else { + if sign != 0 { + v5 = float64(x3) + _t2pio2 + } else { + v5 = float64(x3) - _t2pio2 + } + return X__tandf(tls, v5, 0) + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + v6 = float64(x3) + _t3pio2 + } else { + v6 = float64(x3) - _t3pio2 + } + return X__tandf(tls, v6, int32(1)) + } else { + if sign != 0 { + v7 = float64(x3) + _t4pio2 + } else { + v7 = float64(x3) - _t4pio2 + } + return X__tandf(tls, v7, 0) + } + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + return X__tandf(tls, *(*float64)(unsafe.Pointer(bp)), int32(n&uint32(1))) +} + +const M_PI_210 = 0 + +// C documentation +// +// /* tanh(x) = (exp(x) - exp(-x))/(exp(x) + exp(-x)) +// * = (exp(2*x) - 1)/(exp(2*x) - 1 + 2) +// * = (1 - exp(-2*x))/(exp(-2*x) - 1 + 2) +// */ +func Xtanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, v1 Tdouble_t + var w Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + if w > uint32(0x3fe193ea) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x40340000) { + /* |x| > 20 or nan */ + /* note: this branch avoids raising overflow */ + t = float64(Float64FromInt32(1) - Float64FromInt32(0)/x3) + } else { + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = Float64FromInt32(1) - Float64FromInt32(2)/(t+Float64FromInt32(2)) + } + } else { + if w > uint32(0x3fd058ae) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = t / (t + Float64FromInt32(2)) + } else { + if w >= uint32(0x00100000) { + /* |x| >= 0x1p-1022, up to 2ulp error in [0.1,0.2554] */ + t = Xexpm1(tls, float64(-Int32FromInt32(2))*x3) + t = -t / (t + Float64FromInt32(2)) + } else { + /* |x| is subnormal */ + /* note: the branch above would not raise underflow in [0x1p-1023,0x1p-1022) */ + if uint32(4) == uint32(4) { + y = float32(x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, y, v1 float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + if w > uint32(0x3f0c9f54) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x41200000) { + /* |x| > 10 */ + t = Float32FromInt32(1) + Float32FromInt32(0)/x3 + } else { + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = Float32FromInt32(1) - Float32FromInt32(2)/(t+Float32FromInt32(2)) + } + } else { + if w > uint32(0x3e82c578) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = t / (t + Float32FromInt32(2)) + } else { + if w >= uint32(0x00800000) { + /* |x| >= 0x1p-126 */ + t = Xexpm1f(tls, float32(-Int32FromInt32(2))*x3) + t = -t / (t + Float32FromInt32(2)) + } else { + /* |x| is subnormal */ + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtanh(tls, x) +} + +func Xtanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtan(tls, x) +} + +const N10 = 12 + +var _pi4 = float64(3.141592653589793) + +// C documentation +// +// /* sin(pi x) with x > 0x1p-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sinpi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* argument reduction: x = |x| mod 2 */ + /* spurious inexact when x is odd int */ + x = x * float64(0.5) + x = Float64FromInt32(2) * (x - Xfloor(tls, x)) + /* reduce x into [-.25,.25] */ + n = int32(Float64FromInt32(4) * x) + n = (n + int32(1)) / int32(2) + x -= float64(n) * float64(0.5) + x *= _pi4 + switch n { + default: /* case 4 */ + fallthrough + case 0: + return X__sin(tls, x, Float64FromInt32(0), 0) + case int32(1): + return X__cos(tls, x, Float64FromInt32(0)) + case int32(2): + return X__sin(tls, -x, Float64FromInt32(0), 0) + case int32(3): + return -X__cos(tls, x, Float64FromInt32(0)) + } + return r +} + +// C documentation +// +// //static const double g = 6.024680040776729583740234375; +var _gmhalf = float64(5.52468004077673) +var _Snum = [13]float64{ + 0: float64(2.353137688041076e+10), + 1: float64(4.29198036426491e+10), + 2: float64(3.571195923735567e+10), + 3: float64(1.792103442603721e+10), + 4: float64(6.039542586352028e+09), + 5: float64(1.4397204073117216e+09), + 6: float64(2.4887455786205417e+08), + 7: float64(3.1426415585400194e+07), + 8: float64(2.8763706289353725e+06), + 9: float64(186056.26539522348), + 10: float64(8071.672002365816), + 11: float64(210.82427775157936), + 12: float64(2.5066282746310002), +} +var _Sden = [13]float64{ + 1: Float64FromInt32(39916800), + 2: Float64FromInt32(120543840), + 3: Float64FromInt32(150917976), + 4: Float64FromInt32(105258076), + 5: Float64FromInt32(45995730), + 6: Float64FromInt32(13339535), + 7: Float64FromInt32(2637558), + 8: Float64FromInt32(357423), + 9: Float64FromInt32(32670), + 10: Float64FromInt32(1925), + 11: Float64FromInt32(66), + 12: Float64FromInt32(1), +} + +// C documentation +// +// /* n! for small integer n */ +var _fact = [23]float64{ + 0: Float64FromInt32(1), + 1: Float64FromInt32(1), + 2: Float64FromInt32(2), + 3: Float64FromInt32(6), + 4: Float64FromInt32(24), + 5: Float64FromInt32(120), + 6: Float64FromInt32(720), + 7: float64(5040), + 8: float64(40320), + 9: float64(362880), + 10: float64(3.6288e+06), + 11: float64(3.99168e+07), + 12: float64(4.790016e+08), + 13: float64(6.2270208e+09), + 14: float64(8.71782912e+10), + 15: float64(1.307674368e+12), + 16: float64(2.0922789888e+13), + 17: float64(3.55687428096e+14), + 18: float64(6.402373705728e+15), + 19: float64(1.21645100408832e+17), + 20: float64(2.43290200817664e+18), + 21: float64(5.109094217170944e+19), + 22: float64(1.1240007277776077e+21), +} + +// C documentation +// +// /* S(x) rational function for positive x */ +func _S(tls *TLS, x float64) (r float64) { + var den, num Tdouble_t + var i int32 + _, _, _ = den, i, num + num = Float64FromInt32(0) + den = Float64FromInt32(0) + /* to avoid overflow handle large x differently */ + if x < Float64FromInt32(8) { + i = int32(N10) + for { + if !(i >= 0) { + break + } + num = num*x + _Snum[i] + den = den*x + _Sden[i] + goto _1 + _1: + ; + i-- + } + } else { + i = 0 + for { + if !(i <= int32(N10)) { + break + } + num = num/x + _Snum[i] + den = den/x + _Sden[i] + goto _2 + _2: + ; + i++ + } + } + return num / den +} + +func Xtgamma(tls *TLS, x3 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, y1, y2, y3, v1 float64 + var dy, r, z Tdouble_t + var ix Tuint32_t + var sign int32 + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = absx, dy, ix, r, sign, y, y1, y2, y3, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* special cases */ + if ix >= uint32(0x7ff00000) { + /* tgamma(nan)=nan, tgamma(inf)=inf, tgamma(-inf)=nan with invalid */ + return x3 + float64(X__builtin_inff(tls)) + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(54))<= 172: tgamma(x)=inf with overflow */ + /* x =< -184: tgamma(x)=+-0 with underflow */ + if ix >= uint32(0x40670000) { /* |x| >= 184 */ + if sign != 0 { + if uint32(4) == uint32(4) { + y = float32(Float64FromFloat64(1.1754943508222875e-38) / x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } else { + y2 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } + } + if Xfloor(tls, x3)*float64(0.5) == Xfloor(tls, x3*float64(0.5)) { + return Float64FromInt32(0) + } + return -Float64FromFloat64(0) + } + x3 *= float64(8.98846567431158e+307) + return x3 + } + if sign != 0 { + v1 = -x3 + } else { + v1 = x3 + } + absx = v1 + /* handle the error of x + g - 0.5 */ + y3 = absx + _gmhalf + if absx > _gmhalf { + dy = y3 - absx + dy -= _gmhalf + } else { + dy = y3 - _gmhalf + dy -= absx + } + z = absx - float64(0.5) + r = _S(tls, absx) * Xexp(tls, -y3) + if x3 < Float64FromInt32(0) { + /* reflection formula for negative x */ + /* sinpi(absx) is not 0, integers are already handled */ + r = -_pi4 / (_sinpi(tls, absx) * absx * r) + dy = -dy + z = -z + } + r += dy * float64(_gmhalf+Float64FromFloat64(0.5)) * r / y3 + z = Xpow(tls, y3, float64(Float64FromFloat64(0.5)*z)) + y3 = r * z * z + return y3 +} + +func Xtgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(Xtgamma(tls, float64(x))) +} + +func Xtgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtgamma(tls, x) +} + +func Xtrunc(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + int32(12) + if e >= Int32FromInt32(52)+Int32FromInt32(12) { + return x3 + } + if e < int32(12) { + e = int32(1) + } + m = -Uint64FromUint64(1) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { + return x3 + } + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xtruncf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + int32(9) + if e >= Int32FromInt32(23)+Int32FromInt32(9) { + return x3 + } + if e < int32(9) { + e = int32(1) + } + m = -Uint32FromUint32(1) >> e + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xtruncl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtrunc(tls, x) +} + +var _digits = [65]int8{'.', '/', '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', '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'} + +func Xa64l(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var e int32 + var x Tuint32_t + _, _, _ = d, e, x + x = uint32(0) + e = 0 + for { + if !(e < int32(36) && *(*int8)(unsafe.Pointer(s)) != 0) { + break + } + d = Xstrchr(tls, uintptr(unsafe.Pointer(&_digits)), int32(*(*int8)(unsafe.Pointer(s)))) + if !(d != 0) { + break + } + x |= uint32(int32(d)-t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_digits)))) << e + goto _1 + _1: + ; + e += int32(6) + s++ + } + return int32(x) +} + +func Xl64a(tls *TLS, x0 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x0=%v, (%v:)", tls, x0, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var x Tuint32_t + _, _ = p, x + x = uint32(x0) + p = uintptr(unsafe.Pointer(&_s)) + for { + if !(x != 0) { + break + } + *(*int8)(unsafe.Pointer(p)) = _digits[x&uint32(63)] + goto _1 + _1: + ; + p++ + x >>= uint32(6) + } + *(*int8)(unsafe.Pointer(p)) = 0 + return uintptr(unsafe.Pointer(&_s)) +} + +var _s [7]int8 + +func Xbasename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*int8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 483 + } + i = Xstrlen(tls, s) - uint32(1) + for { + if !(i != 0 && int32(*(*int8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + *(*int8)(unsafe.Pointer(s + uintptr(i))) = 0 + goto _1 + _1: + ; + i-- + } + for { + if !(i != 0 && int32(*(*int8)(unsafe.Pointer(s + uintptr(i-uint32(1))))) != int32('/')) { + break + } + goto _2 + _2: + ; + i-- + } + return s + uintptr(i) +} + +func X__xpg_basename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xbasename(tls, s) +} + +func Xdirname(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*int8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 483 + } + i = Xstrlen(tls, s) - uint32(1) + for { + if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 491 + } + goto _1 + _1: + ; + i-- + } + for { + if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(i)))) != int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 483 + } + goto _2 + _2: + ; + i-- + } + for { + if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 491 + } + goto _3 + _3: + ; + i-- + } + *(*int8)(unsafe.Pointer(s + uintptr(i+uint32(1)))) = 0 + return s +} + +func Xffs(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint32 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint32(i) + v3 = _a_ctz_32(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsl(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint32 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint32(i) + v3 = _a_ctz_32(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsll(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_64(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +const MM_APPL = 8 +const MM_CONSOLE = 512 +const MM_ERROR = 2 +const MM_FIRM = 4 +const MM_HALT = 1 +const MM_HARD = 1 +const MM_INFO = 4 +const MM_NOCON = 4 +const MM_NOMSG = 1 +const MM_NOSEV = 0 +const MM_NOTOK = -1 +const MM_NRECOV = 128 +const MM_NULLMC = 0 +const MM_NULLSEV = 0 +const MM_OK = 0 +const MM_OPSYS = 32 +const MM_PRINT = 256 +const MM_RECOVER = 64 +const MM_SOFT = 2 +const MM_UTIL = 16 +const MM_WARNING = 3 + +// C documentation +// +// /* +// * If lstr is the first part of bstr, check that the next char in bstr +// * is either \0 or : +// */ +func __strcolcmp(tls *TLS, lstr uintptr, bstr uintptr) (r int32) { + var i Tsize_t + _ = i + i = uint32(0) + for *(*int8)(unsafe.Pointer(lstr + uintptr(i))) != 0 && *(*int8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(bstr + uintptr(i)))) == int32(*(*int8)(unsafe.Pointer(lstr + uintptr(i)))) { + i++ + } + if *(*int8)(unsafe.Pointer(lstr + uintptr(i))) != 0 || *(*int8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(bstr + uintptr(i)))) != int32(':') { + return int32(1) + } + return 0 +} + +func Xfmtmsg(tls *TLS, classification int32, label uintptr, severity int32, text uintptr, action uintptr, tag uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v classification=%v label=%v severity=%v text=%v action=%v tag=%v, (%v:)", tls, classification, label, severity, text, action, tag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var cmsg, errstring, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 uintptr + var consolefd, i, ret, verb int32 + var msgs [6]uintptr + var _ /* cs at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cmsg, consolefd, errstring, i, msgs, ret, verb, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + ret = 0 + verb = 0 + errstring = uintptr(MM_NULLSEV) + cmsg = Xgetenv(tls, __ccgo_ts+493) + msgs = [6]uintptr{ + 0: __ccgo_ts + 501, + 1: __ccgo_ts + 507, + 2: __ccgo_ts + 516, + 3: __ccgo_ts + 521, + 4: __ccgo_ts + 528, + 5: UintptrFromInt32(0), + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + if severity == int32(MM_HALT) { + errstring = __ccgo_ts + 532 + } else { + if severity == int32(MM_ERROR) { + errstring = __ccgo_ts + 539 + } else { + if severity == int32(MM_WARNING) { + errstring = __ccgo_ts + 547 + } else { + if severity == int32(MM_INFO) { + errstring = __ccgo_ts + 557 + } + } + } + } + if classification&int32(MM_CONSOLE) != 0 { + consolefd = Xopen(tls, __ccgo_ts+564, int32(O_WRONLY), 0) + if consolefd < 0 { + ret = int32(MM_NOCON) + } else { + if label != 0 { + v1 = label + } else { + v1 = __ccgo_ts + } + if label != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + if severity != 0 { + v3 = errstring + } else { + v3 = __ccgo_ts + } + if text != 0 { + v4 = text + } else { + v4 = __ccgo_ts + } + if action != 0 { + v5 = __ccgo_ts + 577 + } else { + v5 = __ccgo_ts + } + if action != 0 { + v6 = action + } else { + v6 = __ccgo_ts + } + if action != 0 { + v7 = __ccgo_ts + 587 + } else { + v7 = __ccgo_ts + } + if tag != 0 { + v8 = tag + } else { + v8 = __ccgo_ts + } + if Xdprintf(tls, consolefd, __ccgo_ts+589, VaList(bp+16, v1, v2, v3, v4, v5, v6, v7, v8)) < int32(1) { + ret = int32(MM_NOCON) + } + Xclose(tls, consolefd) + } + } + if classification&int32(MM_PRINT) != 0 { + for cmsg != 0 && *(*int8)(unsafe.Pointer(cmsg)) != 0 { + i = 0 + for { + if !(msgs[i] != 0) { + break + } + if !(__strcolcmp(tls, msgs[i], cmsg) != 0) { + break + } + goto _9 + _9: + ; + i++ + } + if msgs[i] == UintptrFromInt32(0) { + //ignore MSGVERB-unrecognized component + verb = int32(0xFF) + break + } else { + verb |= int32(1) << i + cmsg = Xstrchr(tls, cmsg, int32(':')) + if cmsg != 0 { + cmsg++ + } + } + } + if !(verb != 0) { + verb = int32(0xFF) + } + if verb&int32(1) != 0 && label != 0 { + v10 = label + } else { + v10 = __ccgo_ts + } + if verb&int32(1) != 0 && label != 0 { + v11 = __ccgo_ts + 289 + } else { + v11 = __ccgo_ts + } + if verb&int32(2) != 0 && severity != 0 { + v12 = errstring + } else { + v12 = __ccgo_ts + } + if verb&int32(4) != 0 && text != 0 { + v13 = text + } else { + v13 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v14 = __ccgo_ts + 577 + } else { + v14 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v15 = action + } else { + v15 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v16 = __ccgo_ts + 587 + } else { + v16 = __ccgo_ts + } + if verb&int32(16) != 0 && tag != 0 { + v17 = tag + } else { + v17 = __ccgo_ts + } + if Xdprintf(tls, int32(2), __ccgo_ts+589, VaList(bp+16, v10, v11, v12, v13, v14, v15, v16, v17)) < int32(1) { + ret |= int32(MM_NOMSG) + } + } + if ret&(Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG)) == Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG) { + ret = -int32(1) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xget_current_dir_name(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var res uintptr + var _ /* a at bp+0 */ Tstat + var _ /* b at bp+144 */ Tstat + _ = res + res = Xgetenv(tls, __ccgo_ts+607) + if res != 0 && *(*int8)(unsafe.Pointer(res)) != 0 && !(Xstat(tls, res, bp) != 0) && !(Xstat(tls, __ccgo_ts+483, bp+144) != 0) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev && (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return Xstrdup(tls, res) + } + return Xgetcwd(tls, uintptr(0), uint32(0)) +} + +func X__getauxval(tls *TLS, item uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + var auxv uintptr + _ = auxv + auxv = X__libc.Fauxv + if item == uint32(AT_SECURE) { + return uint32(X__libc.Fsecure) + } + for { + if !(*(*Tsize_t)(unsafe.Pointer(auxv)) != 0) { + break + } + if *(*Tsize_t)(unsafe.Pointer(auxv)) == item { + return *(*Tsize_t)(unsafe.Pointer(auxv + 1*4)) + } + goto _1 + _1: + ; + auxv += uintptr(2) * 4 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uint32(0) +} + +func Xgetauxval(tls *TLS, item uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__getauxval(tls, item) +} + +type Tutsname = struct { + Fsysname [65]int8 + Fnodename [65]int8 + Frelease [65]int8 + Fversion [65]int8 + Fmachine [65]int8 + Fdomainname [65]int8 +} + +func Xgetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* temp at bp+0 */ Tutsname + Xuname(tls, bp) + if !(len1 != 0) || Xstrlen(tls, bp+325) >= len1 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + Xstrcpy(tls, name, bp+325) + return 0 +} + +func Xgetentropy(tls *TLS, buffer uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v buffer=%v len1=%v, (%v:)", tls, buffer, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pos uintptr + var ret int32 + var _ /* cs at bp+0 */ int32 + _, _ = pos, ret + ret = 0 + pos = buffer + if len1 > uint32(256) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + for len1 != 0 { + ret = Xgetrandom(tls, pos, len1, uint32(0)) + if ret < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) { + continue + } else { + break + } + } + pos += uintptr(ret) + len1 -= uint32(ret) + ret = 0 + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xgethostid(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const optpos = 0 + +type Tucontext_t3 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +type t__ucontext1 = Tucontext_t3 + +func X__getopt_msg(tls *TLS, a uintptr, b uintptr, c uintptr, l Tsize_t) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v l=%v, (%v:)", tls, a, b, c, l, origin(2)) + } + var __need_unlock, v1 int32 + var f uintptr + _, _, _ = __need_unlock, f, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + b = X__lctrans_cur(tls, b) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + _ = Xfputs(tls, a, f) >= 0 && Xfwrite(tls, b, Xstrlen(tls, b), uint32(1), f) != 0 && Xfwrite(tls, c, uint32(1), l, f) == l && Xputc(tls, int32('\n'), f) != 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xgetopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, k, l, v1, v2, v3 int32 + var optchar uintptr + var _ /* c at bp+0 */ Twchar_t + var _ /* d at bp+4 */ Twchar_t + _, _, _, _, _, _, _ = i, k, l, optchar, v1, v2, v3 + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) != 0) { + return -int32(1) + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))))) != int32('-') { + if int32(*(*int8)(unsafe.Pointer(optstring))) == int32('-') { + v1 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v1)*4)) + return int32(1) + } + return -int32(1) + } + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1)) != 0) { + return -int32(1) + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') && !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 2)) != 0) { + Xoptind++ + return -Int32FromInt32(1) + } + if !(X__optpos != 0) { + X__optpos++ + } + v2 = Xmbtowc(tls, bp, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(X__optpos), uint32(MB_LEN_MAX)) + k = v2 + if v2 < 0 { + k = int32(1) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xfffd) /* replacement char */ + } + optchar = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(X__optpos) + X__optpos += k + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(X__optpos))) != 0) { + Xoptind++ + X__optpos = 0 + } + if int32(*(*int8)(unsafe.Pointer(optstring))) == int32('-') || int32(*(*int8)(unsafe.Pointer(optstring))) == int32('+') { + optstring++ + } + i = 0 + *(*Twchar_t)(unsafe.Pointer(bp + 4)) = 0 + for cond := true; cond; cond = l != 0 && *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) { + l = Xmbtowc(tls, bp+4, optstring+uintptr(i), uint32(MB_LEN_MAX)) + if l > 0 { + i += l + } else { + i++ + } + } + if *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) || *(*Twchar_t)(unsafe.Pointer(bp)) == int32(':') { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*int8)(unsafe.Pointer(optstring))) != int32(':') && Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+611, optchar, uint32(k)) + } + return int32('?') + } + if int32(*(*int8)(unsafe.Pointer(optstring + uintptr(i)))) == int32(':') { + Xoptarg = uintptr(0) + if int32(*(*int8)(unsafe.Pointer(optstring + uintptr(i+int32(1))))) != int32(':') || X__optpos != 0 { + v3 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v3)*4)) + if X__optpos != 0 { + Xoptarg += uintptr(X__optpos) + } + X__optpos = 0 + } + if Xoptind > argc { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*int8)(unsafe.Pointer(optstring))) == int32(':') { + return int32(':') + } + if Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+635, optchar, uint32(k)) + } + return int32('?') + } + } + return *(*Twchar_t)(unsafe.Pointer(bp)) +} + +func X__posix_getopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetopt(tls, argc, argv, optstring) +} + +const no_argument = 0 +const optional_argument = 2 +const required_argument = 1 + +type Toption = struct { + Fname uintptr + Fhas_arg int32 + Fflag uintptr + Fval int32 +} + +func _permute(tls *TLS, argv uintptr, dest int32, src int32) { + var av, tmp uintptr + var i int32 + _, _, _ = av, i, tmp + av = argv + tmp = *(*uintptr)(unsafe.Pointer(av + uintptr(src)*4)) + i = src + for { + if !(i > dest) { + break + } + *(*uintptr)(unsafe.Pointer(av + uintptr(i)*4)) = *(*uintptr)(unsafe.Pointer(av + uintptr(i-int32(1))*4)) + goto _1 + _1: + ; + i-- + } + *(*uintptr)(unsafe.Pointer(av + uintptr(dest)*4)) = tmp +} + +func ___getopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var cnt, i, i1, resumed, ret, skipped int32 + _, _, _, _, _, _ = cnt, i, i1, resumed, ret, skipped + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) != 0) { + return -int32(1) + } + skipped = Xoptind + if int32(*(*int8)(unsafe.Pointer(optstring))) != int32('+') && int32(*(*int8)(unsafe.Pointer(optstring))) != int32('-') { + i = Xoptind + for { + if i >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) != 0) { + return -int32(1) + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))))) == int32('-') && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) + 1)) != 0 { + break + } + goto _1 + _1: + ; + i++ + } + Xoptind = i + } + resumed = Xoptind + ret = ___getopt_long_core(tls, argc, argv, optstring, longopts, idx, longonly) + if resumed > skipped { + cnt = Xoptind - resumed + i1 = 0 + for { + if !(i1 < cnt) { + break + } + _permute(tls, argv, skipped, Xoptind-int32(1)) + goto _2 + _2: + ; + i1++ + } + Xoptind = skipped + cnt + } + return ret +} + +func ___getopt_long_core(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var arg, name, opt, start, v5, v6 uintptr + var cnt, colon, i, j, l, match, v2 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = arg, cnt, colon, i, j, l, match, name, opt, start, v2, v5, v6 + Xoptarg = uintptr(0) + if longopts != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))))) == int32('-') && (longonly != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1)) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) != int32('-') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 2)) != 0) { + colon = BoolInt32(int32(*(*int8)(unsafe.Pointer(optstring + BoolUintptr(int32(*(*int8)(unsafe.Pointer(optstring))) == int32('+') || int32(*(*int8)(unsafe.Pointer(optstring))) == int32('-'))))) == int32(':')) + start = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(1) + v2 = Int32FromInt32(0) + i = v2 + cnt = v2 + for { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname != 0) { + break + } + name = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname + opt = start + if int32(*(*int8)(unsafe.Pointer(opt))) == int32('-') { + opt++ + } + for *(*int8)(unsafe.Pointer(opt)) != 0 && int32(*(*int8)(unsafe.Pointer(opt))) != int32('=') && int32(*(*int8)(unsafe.Pointer(opt))) == int32(*(*int8)(unsafe.Pointer(name))) { + name++ + opt++ + } + if *(*int8)(unsafe.Pointer(opt)) != 0 && int32(*(*int8)(unsafe.Pointer(opt))) != int32('=') { + goto _1 + } + arg = opt + match = i + if !(*(*int8)(unsafe.Pointer(name)) != 0) { + cnt = int32(1) + break + } + cnt++ + goto _1 + _1: + ; + i++ + } + if cnt == int32(1) && longonly != 0 && int32(arg)-int32(start) == Xmblen(tls, start, uint32(MB_LEN_MAX)) { + l = int32(arg) - int32(start) + i = 0 + for { + if !(*(*int8)(unsafe.Pointer(optstring + uintptr(i))) != 0) { + break + } + j = 0 + for { + if !(j < l && int32(*(*int8)(unsafe.Pointer(start + uintptr(j)))) == int32(*(*int8)(unsafe.Pointer(optstring + uintptr(i+j))))) { + break + } + goto _4 + _4: + ; + j++ + } + if j == l { + cnt++ + break + } + goto _3 + _3: + ; + i++ + } + } + if cnt == int32(1) { + i = match + opt = arg + Xoptind++ + if int32(*(*int8)(unsafe.Pointer(opt))) == int32('=') { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fhas_arg != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + if colon != 0 || !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+667, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname)) + return int32('?') + } + Xoptarg = opt + uintptr(1) + } else { + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fhas_arg == int32(required_argument) { + v5 = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + Xoptarg = v5 + if !(v5 != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + if colon != 0 { + return int32(':') + } + if !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+635, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname)) + return int32('?') + } + Xoptind++ + } + } + if idx != 0 { + *(*int32)(unsafe.Pointer(idx)) = i + } + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fflag != 0 { + *(*int32)(unsafe.Pointer((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fflag)) = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + return 0 + } + return (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') { + Xoptopt = 0 + if !(colon != 0) && Xopterr != 0 { + if cnt != 0 { + v6 = __ccgo_ts + 704 + } else { + v6 = __ccgo_ts + 611 + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), v6, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(2), Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(2))) + } + Xoptind++ + return int32('?') + } + } + return Xgetopt(tls, argc, argv, optstring) +} + +func Xgetopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, 0) +} + +func Xgetopt_long_only(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, int32(1)) +} + +func Xgetpriority(tls *TLS, which int32, who Tid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v, (%v:)", tls, which, who, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getpriority), which, int32(who)))) + if ret < 0 { + return ret + } + return int32(20) - ret +} + +func Xgetresgid(tls *TLS, rgid uintptr, egid uintptr, sgid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v rgid=%v egid=%v sgid=%v, (%v:)", tls, rgid, egid, sgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getresgid32), int32(rgid), int32(egid), int32(sgid)))) +} + +func Xgetresuid(tls *TLS, ruid uintptr, euid uintptr, suid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ruid=%v euid=%v suid=%v, (%v:)", tls, ruid, euid, suid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getresuid32), int32(ruid), int32(euid), int32(suid)))) +} + +func Xgetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret int32 + var v1, v2 uint64 + var _ /* k_rlim at bp+0 */ [2]uint32 + _, _, _ = ret, v1, v2 + ret = X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_prlimit64), int32(Int32FromInt32(0)), resource, int32(Int32FromInt32(0)), int32(rlim)))) + if !(ret != 0) { + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + } + if !(ret != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) { + return ret + } + if X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_ugetrlimit), resource, int32(bp)))) < 0 { + return -int32(1) + } + if (*(*[2]uint32)(unsafe.Pointer(bp)))[0] == -Uint32FromUint32(1) { + v1 = ^Uint64FromUint64(0) + } else { + v1 = uint64((*(*[2]uint32)(unsafe.Pointer(bp)))[0]) + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = v1 + if (*(*[2]uint32)(unsafe.Pointer(bp)))[int32(1)] == -Uint32FromUint32(1) { + v2 = ^Uint64FromUint64(0) + } else { + v2 = uint64((*(*[2]uint32)(unsafe.Pointer(bp)))[int32(1)]) + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = v2 + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + return 0 +} + +func Xgetrusage(tls *TLS, who int32, ru uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v ru=%v, (%v:)", tls, who, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dest uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int32 + _, _ = dest, r + dest = ru + 32 - uintptr(Uint32FromInt32(4)*Uint32FromInt64(4)) + r = int32(X__syscall2(tls, int32(SYS_getrusage), who, int32(dest))) + if !(r != 0) && Bool(uint32(8) > uint32(4)) { + Xmemcpy(tls, bp, dest, Uint32FromInt32(4)*Uint32FromInt64(4)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]), + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]), + } + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xgetsubopt(tls *TLS, opt uintptr, keys uintptr, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v opt=%v keys=%v val=%v, (%v:)", tls, opt, keys, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var l Tsize_t + var s, v1, v2 uintptr + _, _, _, _, _ = i, l, s, v1, v2 + s = *(*uintptr)(unsafe.Pointer(opt)) + *(*uintptr)(unsafe.Pointer(val)) = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(opt)) = Xstrchr(tls, s, int32(',')) + if *(*uintptr)(unsafe.Pointer(opt)) != 0 { + v2 = opt + v1 = *(*uintptr)(unsafe.Pointer(v2)) + *(*uintptr)(unsafe.Pointer(v2))++ + *(*int8)(unsafe.Pointer(v1)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(opt)) = s + uintptr(Xstrlen(tls, s)) + } + i = 0 + for { + if !(*(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4)) != 0) { + break + } + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4))) + if Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4)), s, l) != 0 { + goto _3 + } + if int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) == int32('=') { + *(*uintptr)(unsafe.Pointer(val)) = s + uintptr(l) + uintptr(1) + } else { + if *(*int8)(unsafe.Pointer(s + uintptr(l))) != 0 { + goto _3 + } + } + return i + goto _3 + _3: + ; + i++ + } + return -int32(1) +} + +const R = 2 +const W = 1 +const WR = 3 + +type Tioctl_compat_map = struct { + Fnew_req int32 + Fold_req int32 + Fold_size uint8 + Fdir uint8 + Fforce_align uint8 + Fnoffs uint8 + Foffsets [8]uint8 +} + +/* yields a type for a struct with original size n, with a misaligned + * timeval/timespec expanded from 32- to 64-bit. for use with ioctl + * number producing macros; only size of result is meaningful. */ + +type Tv4l2_event = struct { + Fa Tuint32_t + Fb [8]Tuint64_t + Fc [2]Tuint32_t + Fts [2]Tuint32_t + Fd [9]Tuint32_t +} + +var _compat_map = [20]Tioctl_compat_map{ + 0: { + Fnew_req: int32(Uint32FromUint32(2)< %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var ap Tva_list + var arg uintptr + var i, r int32 + var _ /* u at bp+0 */ struct { + Fbuf [0][256]int8 + Falign int64 + F__ccgo_pad2 [248]byte + } + _, _, _, _ = ap, arg, i, r + ap = va + arg = VaUintptr(&ap) + _ = ap + r = int32(X__syscall3(tls, int32(SYS_ioctl), fd, req, int32(arg))) + if Bool(Uint32FromUint32(2)< %v", r) }() + } + return int32(X__libc.Fsecure) +} + +func Xlockf(tls *TLS, fd int32, op int32, size Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v size=%v, (%v:)", tls, fd, op, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var _ /* l at bp+0 */ Tflock + *(*Tflock)(unsafe.Pointer(bp)) = Tflock{ + Fl_type: int16(F_WRLCK), + Fl_whence: int16(1), + Fl_len: size, + } + switch op { + case int32(F_TEST): + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = F_RDLCK + if Xfcntl(tls, fd, int32(F_GETLK), VaList(bp+32, bp)) < 0 { + return -int32(1) + } + if int32((*(*Tflock)(unsafe.Pointer(bp))).Fl_type) == int32(F_UNLCK) || (*(*Tflock)(unsafe.Pointer(bp))).Fl_pid == Xgetpid(tls) { + return 0 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + return -int32(1) + case F_ULOCK: + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = int16(F_UNLCK) + fallthrough + case int32(F_TLOCK): + return Xfcntl(tls, fd, int32(F_SETLK), VaList(bp+32, bp)) + case int32(F_LOCK): + return Xfcntl(tls, fd, int32(F_SETLKW), VaList(bp+32, bp)) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) +} + +const ACCOUNTING = 9 +const UTMP_FILE = "_PATH_UTMP" +const UTMP_FILENAME = "_PATH_UTMP" +const UT_HOSTSIZE = 256 +const UT_LINESIZE = 32 +const UT_NAMESIZE = 32 +const WTMP_FILE = "_PATH_WTMP" +const WTMP_FILENAME = "_PATH_WTMP" +const _PATH_UTMP = "/dev/null/utmp" +const _PATH_WTMP = "/dev/null/wtmp" +const ut_name = 0 +const utmp = 0 + +type Tlastlog = struct { + Fll_time Ttime_t + Fll_line [32]int8 + Fll_host [256]int8 +} + +func Xlogin_tty(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xsetsid(tls) + if Xioctl(tls, fd, int32(TIOCSCTTY), VaList(bp+8, UintptrFromInt32(0))) != 0 { + return -int32(1) + } + Xdup2(tls, fd, 0) + Xdup2(tls, fd, int32(1)) + Xdup2(tls, fd, int32(2)) + if fd > int32(2) { + Xclose(tls, fd) + } + return 0 +} + +const MNTOPT_DEFAULTS = "defaults" +const MNTOPT_NOAUTO = "noauto" +const MNTOPT_NOSUID = "nosuid" +const MNTOPT_RO = "ro" +const MNTOPT_RW = "rw" +const MNTOPT_SUID = "suid" +const MNTTYPE_IGNORE = "ignore" +const MNTTYPE_NFS = "nfs" +const MNTTYPE_SWAP = "swap" +const MOUNTED = "/etc/mtab" +const SENTINEL = 0 + +type Tmntent = struct { + Fmnt_fsname uintptr + Fmnt_dir uintptr + Fmnt_type uintptr + Fmnt_opts uintptr + Fmnt_freq int32 + Fmnt_passno int32 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _internal_buf uintptr +var _internal_bufsize Tsize_t + +func Xsetmntent(tls *TLS, name uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v mode=%v, (%v:)", tls, name, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfopen(tls, name, mode) +} + +func Xendmntent(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + if f != 0 { + Xfclose(tls, f) + } + return int32(1) +} + +func _unescape_ent(tls *TLS, beg uintptr) (r uintptr) { + var cval uint8 + var dest, src, val, v1, v2, v3, v4, v6, v7, v8, v9 uintptr + var i int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = cval, dest, i, src, val, v1, v2, v3, v4, v6, v7, v8, v9 + dest = beg + src = beg + for *(*int8)(unsafe.Pointer(src)) != 0 { + cval = uint8(0) + if int32(*(*int8)(unsafe.Pointer(src))) != int32('\\') { + v1 = dest + dest++ + v2 = src + src++ + *(*int8)(unsafe.Pointer(v1)) = *(*int8)(unsafe.Pointer(v2)) + continue + } + if int32(*(*int8)(unsafe.Pointer(src + 1))) == int32('\\') { + src++ + v3 = dest + dest++ + v4 = src + src++ + *(*int8)(unsafe.Pointer(v3)) = *(*int8)(unsafe.Pointer(v4)) + continue + } + val = src + uintptr(1) + i = 0 + for { + if !(i < int32(3)) { + break + } + if int32(*(*int8)(unsafe.Pointer(val))) >= int32('0') && int32(*(*int8)(unsafe.Pointer(val))) <= int32('7') { + cval = uint8(int32(cval) << Int32FromInt32(3)) + v6 = val + val++ + cval = uint8(int32(cval) + (int32(*(*int8)(unsafe.Pointer(v6))) - Int32FromUint8('0'))) + } else { + break + } + goto _5 + _5: + ; + i++ + } + if cval != 0 { + v7 = dest + dest++ + *(*int8)(unsafe.Pointer(v7)) = int8(cval) + src = val + } else { + v8 = dest + dest++ + v9 = src + src++ + *(*int8)(unsafe.Pointer(v8)) = *(*int8)(unsafe.Pointer(v9)) + } + } + *(*int8)(unsafe.Pointer(dest)) = 0 + return beg +} + +func Xgetmntent_r(tls *TLS, f uintptr, mnt uintptr, linebuf uintptr, buflen int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v linebuf=%v buflen=%v, (%v:)", tls, f, mnt, linebuf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var i, len1 Tsize_t + var use_internal int32 + var _ /* n at bp+0 */ [8]int32 + _, _, _ = i, len1, use_internal + use_internal = BoolInt32(linebuf == uintptr(unsafe.Pointer(&_internal_buf))) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno = 0 + for cond := true; cond; cond = int32(*(*int8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])))) == int32('#') || uint32((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]) == len1 { + if use_internal != 0 { + Xgetline(tls, uintptr(unsafe.Pointer(&_internal_buf)), uintptr(unsafe.Pointer(&_internal_bufsize)), f) + linebuf = _internal_buf + } else { + Xfgets(tls, linebuf, buflen, f) + } + if Xfeof(tls, f) != 0 || Xferror(tls, f) != 0 { + return uintptr(0) + } + if !(Xstrchr(tls, linebuf, int32('\n')) != 0) { + Xfscanf(tls, f, __ccgo_ts+728, 0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return uintptr(0) + } + len1 = Xstrlen(tls, linebuf) + if len1 > uint32(INT_MAX) { + continue + } + i = uint32(0) + for { + if !(i < Uint32FromInt64(32)/Uint32FromInt64(4)) { + break + } + (*(*[8]int32)(unsafe.Pointer(bp)))[i] = int32(len1) + goto _1 + _1: + ; + i++ + } + Xsscanf(tls, linebuf, __ccgo_ts+740, VaList(bp+40, bp, bp+uintptr(1)*4, bp+uintptr(2)*4, bp+uintptr(3)*4, bp+uintptr(4)*4, bp+uintptr(5)*4, bp+uintptr(6)*4, bp+uintptr(7)*4, mnt+16, mnt+20)) + } + *(*int8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]))) = 0 + *(*int8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(3)]))) = 0 + *(*int8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(5)]))) = 0 + *(*int8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(7)]))) = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(2)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(4)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(6)])) + return mnt +} + +func Xgetmntent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetmntent_r(tls, f, uintptr(unsafe.Pointer(&_mnt)), uintptr(unsafe.Pointer(&_internal_buf)), 0) +} + +var _mnt Tmntent + +func Xaddmntent(tls *TLS, f uintptr, mnt uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v, (%v:)", tls, f, mnt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xfseek(tls, f, 0, int32(2)) != 0 { + return int32(1) + } + return BoolInt32(Xfprintf(tls, f, __ccgo_ts+795, VaList(bp+8, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno)) < 0) +} + +func Xhasmntopt(tls *TLS, mnt uintptr, opt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mnt=%v opt=%v, (%v:)", tls, mnt, opt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrstr(tls, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, opt) +} + +type Thistory = struct { + Fchain uintptr + Fdev Tdev_t + Fino Tino_t + Flevel int32 + Fbase int32 +} + +func _do_nftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32, h uintptr) (r1 int32) { + bp := tls.Alloc(192) + defer tls.Free(192) + var d, de, v10 uintptr + var dfd, err, r, type1, v11, v12, v3, v4, v7 int32 + var j, k, l Tsize_t + var v1 uint32 + var v13, v8 bool + var v2 Tino_t + var _ /* lev at bp+176 */ TFTW + var _ /* new at bp+144 */ Thistory + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, de, dfd, err, j, k, l, r, type1, v1, v10, v11, v12, v13, v2, v3, v4, v7, v8 + l = Xstrlen(tls, path) + if l != 0 && int32(*(*int8)(unsafe.Pointer(path + uintptr(l-uint32(1))))) == int32('/') { + v1 = l - uint32(1) + } else { + v1 = l + } + j = v1 + v2 = Uint64FromInt32(0) + (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino = v2 + (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev = v2 + if flags&int32(FTW_PHYS) != 0 { + v3 = Xlstat(tls, path, bp) + } else { + v3 = BoolInt32(Xstat(tls, path, bp) < 0) + } + if v3 != 0 { + if !(flags&Int32FromInt32(FTW_PHYS) != 0) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) && !(Xlstat(tls, path, bp) != 0) { + type1 = int32(FTW_SLN) + } else { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EACCES) { + return -int32(1) + } else { + type1 = int32(FTW_NS) + } + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + if flags&int32(FTW_DEPTH) != 0 { + type1 = int32(FTW_DP) + } else { + type1 = int32(FTW_D) + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + if flags&int32(FTW_PHYS) != 0 { + type1 = int32(FTW_SL) + } else { + type1 = int32(FTW_SLN) + } + } else { + type1 = int32(FTW_F) + } + } + } + if flags&int32(FTW_MOUNT) != 0 && h != 0 && type1 != int32(FTW_NS) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*Thistory)(unsafe.Pointer(h)).Fdev { + return 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fchain = h + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fdev = (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + if h != 0 { + v4 = (*Thistory)(unsafe.Pointer(h)).Flevel + int32(1) + } else { + v4 = 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel = v4 + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fbase = int32(j + uint32(1)) + (*(*TFTW)(unsafe.Pointer(bp + 176))).Flevel = (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel + if h != 0 { + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = (*Thistory)(unsafe.Pointer(h)).Fbase + } else { + k = j + for { + if !(k != 0 && int32(*(*int8)(unsafe.Pointer(path + uintptr(k)))) == int32('/')) { + break + } + goto _5 + _5: + ; + k-- + } + for { + if !(k != 0 && int32(*(*int8)(unsafe.Pointer(path + uintptr(k-uint32(1))))) != int32('/')) { + break + } + goto _6 + _6: + ; + k-- + } + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = int32(k) + } + if type1 == int32(FTW_D) || type1 == int32(FTW_DP) { + dfd = Xopen(tls, path, O_RDONLY, 0) + err = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if dfd < 0 && err == int32(EACCES) { + type1 = int32(FTW_DNR) + } + if !(fd_limit != 0) { + Xclose(tls, dfd) + } + } + if v8 = !(flags&Int32FromInt32(FTW_DEPTH) != 0); v8 { + v7 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v7 + } + if v8 && v7 != 0 { + return r + } + for { + if !(h != 0) { + break + } + if (*Thistory)(unsafe.Pointer(h)).Fdev == (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev && (*Thistory)(unsafe.Pointer(h)).Fino == (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino { + return 0 + } + goto _9 + _9: + ; + h = (*Thistory)(unsafe.Pointer(h)).Fchain + } + if (type1 == int32(FTW_D) || type1 == int32(FTW_DP)) && fd_limit != 0 { + if dfd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return -int32(1) + } + d = Xfdopendir(tls, dfd) + if d != 0 { + for { + v10 = Xreaddir(tls, d) + de = v10 + if !(v10 != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*int8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*int8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*int8)(unsafe.Pointer(de + 19 + 2)) != 0)) { + continue + } + if Xstrlen(tls, de+19) >= uint32(PATH_MAX)-l { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + Xclosedir(tls, d) + return -int32(1) + } + *(*int8)(unsafe.Pointer(path + uintptr(j))) = int8('/') + Xstrcpy(tls, path+uintptr(j)+uintptr(1), de+19) + v11 = _do_nftw(tls, path, fn, fd_limit-int32(1), flags, bp+144) + r = v11 + if v11 != 0 { + Xclosedir(tls, d) + return r + } + } + Xclosedir(tls, d) + } else { + Xclose(tls, dfd) + return -int32(1) + } + } + *(*int8)(unsafe.Pointer(path + uintptr(l))) = 0 + if v13 = flags&int32(FTW_DEPTH) != 0; v13 { + v12 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v12 + } + if v13 && v12 != 0 { + return r + } + return 0 +} + +func Xnftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v flags=%v, (%v:)", tls, path, fn, fd_limit, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var l Tsize_t + var r int32 + var _ /* cs at bp+0 */ int32 + var _ /* pathbuf at bp+4 */ [4097]int8 + _, _ = l, r + if fd_limit <= 0 { + return 0 + } + l = Xstrlen(tls, path) + if l > uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + Xmemcpy(tls, bp+4, path, l+uint32(1)) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + r = _do_nftw(tls, bp+4, fn, fd_limit, flags, UintptrFromInt32(0)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return r +} + +/* Nonstandard, but vastly superior to the standard functions */ + +func Xopenpty(tls *TLS, pm uintptr, ps uintptr, name uintptr, tio uintptr, ws uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pm=%v ps=%v name=%v tio=%v ws=%v, (%v:)", tls, pm, ps, name, tio, ws, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var m, s, v1 int32 + var _ /* buf at bp+8 */ [20]int8 + var _ /* cs at bp+4 */ int32 + var _ /* n at bp+0 */ int32 + _, _, _ = m, s, v1 + *(*int32)(unsafe.Pointer(bp)) = 0 + m = Xopen(tls, __ccgo_ts+814, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + if m < 0 { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + if Xioctl(tls, m, int32(TIOCSPTLCK), VaList(bp+40, bp)) != 0 || Xioctl(tls, m, Int32FromUint32(TIOCGPTN), VaList(bp+40, bp)) != 0 { + goto fail + } + if !(name != 0) { + name = bp + 8 + } + Xsnprintf(tls, name, uint32(20), __ccgo_ts+824, VaList(bp+40, *(*int32)(unsafe.Pointer(bp)))) + v1 = Xopen(tls, name, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + s = v1 + if v1 < 0 { + goto fail + } + if tio != 0 { + Xtcsetattr(tls, s, TCSANOW, tio) + } + if ws != 0 { + Xioctl(tls, s, int32(TIOCSWINSZ), VaList(bp+40, ws)) + } + *(*int32)(unsafe.Pointer(pm)) = m + *(*int32)(unsafe.Pointer(ps)) = s + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return 0 + goto fail +fail: + ; + Xclose(tls, m) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return -int32(1) +} + +func Xptsname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var err int32 + _ = err + err = X__ptsname_r(tls, fd, uintptr(unsafe.Pointer(&_buf2)), uint32(22)) + if err != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_buf2)) +} + +var _buf2 [22]int8 + +func Xposix_openpt(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xopen(tls, __ccgo_ts+814, flags, 0) + if r < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSPC) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAGAIN) + } + return r +} + +func Xgrantpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xunlockpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* unlock at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = 0 + return Xioctl(tls, fd, int32(TIOCSPTLCK), VaList(bp+16, bp)) +} + +func X__ptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var err, v1 int32 + var _ /* pty at bp+0 */ int32 + _, _ = err, v1 + if !(buf != 0) { + len1 = uint32(0) + } + v1 = int32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Uint32FromUint32(TIOCGPTN)), int32(bp))) + err = v1 + if v1 != 0 { + return -err + } + if uint32(Xsnprintf(tls, buf, len1, __ccgo_ts+824, VaList(bp+16, *(*int32)(unsafe.Pointer(bp))))) >= len1 { + return int32(ERANGE) + } + return 0 +} + +func Xptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ptsname_r(tls, fd, buf, len1) +} + +func _slash_len(tls *TLS, s uintptr) (r Tsize_t) { + var s0 uintptr + _ = s0 + s0 = s + for int32(*(*int8)(unsafe.Pointer(s))) == int32('/') { + s++ + } + return uint32(int32(s) - int32(s0)) +} + +func Xrealpath(tls *TLS, filename uintptr, resolved uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v resolved=%v, (%v:)", tls, filename, resolved, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(8208) + defer tls.Free(8208) + var check_dir, up int32 + var cnt, l, l0, nup, p, q, v10, v11, v4, v5, v6, v7, v9 Tsize_t + var k Tssize_t + var z uintptr + var _ /* output at bp+4097 */ [4096]int8 + var _ /* stack at bp+0 */ [4097]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = check_dir, cnt, k, l, l0, nup, p, q, up, z, v10, v11, v4, v5, v6, v7, v9 + cnt = uint32(0) + nup = uint32(0) + check_dir = 0 + if !(filename != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + l = Xstrnlen(tls, filename, uint32(4097)) + if !(l != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if l >= uint32(PATH_MAX) { + goto toolong + } + p = uint32(4097) - l - uint32(1) + q = uint32(0) + Xmemcpy(tls, bp+uintptr(p), filename, l+uint32(1)) + /* Main loop. Each iteration pops the next part from stack of + * remaining path components and consumes any slashes that follow. + * If not a link, it's moved to output; if a link, contents are + * pushed to the stack. */ + goto restart +restart: + ; +_3: + ; + /* If stack starts with /, the whole component is / or // + * and the output state must be reset. */ + if int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p]) == int32('/') { + check_dir = 0 + nup = uint32(0) + q = uint32(0) + v4 = q + q++ + (*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[v4] = int8('/') + p++ + /* Initial // is special. */ + if int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p]) == int32('/') && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p+uint32(1)]) != int32('/') { + v5 = q + q++ + (*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[v5] = int8('/') + } + goto _2 + } + z = X__strchrnul(tls, bp+uintptr(p), int32('/')) + v6 = uint32(int32(z) - int32(bp+uintptr(p))) + l = v6 + l0 = v6 + if !(l != 0) && !(check_dir != 0) { + goto _1 + } + /* Skip any . component but preserve check_dir status. */ + if l == uint32(1) && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p]) == int32('.') { + p += l + goto _2 + } + /* Copy next component onto output at least temporarily, to + * call readlink, but wait to advance output position until + * determining it's not a link. */ + if q != 0 && int32((*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[q-uint32(1)]) != int32('/') { + if !(p != 0) { + goto toolong + } + p-- + v7 = p + (*(*[4097]int8)(unsafe.Pointer(bp)))[v7] = int8('/') + l++ + } + if q+l >= uint32(PATH_MAX) { + goto toolong + } + Xmemcpy(tls, bp+4097+uintptr(q), bp+uintptr(p), l) + (*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[q+l] = 0 + p += l + up = 0 + if l0 == uint32(2) && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p-uint32(2)]) == int32('.') && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p-uint32(1)]) == int32('.') { + up = int32(1) + /* Any non-.. path components we could cancel start + * after nup repetitions of the 3-byte string "../"; + * if there are none, accumulate .. components to + * later apply to cwd, if needed. */ + if q <= uint32(3)*nup { + nup++ + q += l + goto _2 + } + /* When previous components are already known to be + * directories, processing .. can skip readlink. */ + if !(check_dir != 0) { + goto skip_readlink + } + } + k = Xreadlink(tls, bp+4097, bp, p) + if uint32(k) == p { + goto toolong + } + if !(k != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if !(k < 0) { + goto _8 + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return uintptr(0) + } + goto skip_readlink +skip_readlink: + ; + check_dir = 0 + if up != 0 { + for q != 0 && int32((*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[q-uint32(1)]) != int32('/') { + q-- + } + if q > uint32(1) && (q > uint32(2) || int32((*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/')) { + q-- + } + goto _2 + } + if l0 != 0 { + q += l + } + check_dir = int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p]) + goto _2 +_8: + ; + cnt++ + v9 = cnt + if v9 == uint32(SYMLOOP_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ELOOP) + return uintptr(0) + } + /* If link contents end in /, strip any slashes already on + * stack to avoid /->// or //->/// or spurious toolong. */ + if int32((*(*[4097]int8)(unsafe.Pointer(bp)))[k-int32(1)]) == int32('/') { + for int32((*(*[4097]int8)(unsafe.Pointer(bp)))[p]) == int32('/') { + p++ + } + } + p -= uint32(k) + Xmemmove(tls, bp+uintptr(p), bp, uint32(k)) + /* Skip the stack advancement in case we have a new + * absolute base path. */ + goto restart + goto _2 +_2: + ; + p += _slash_len(tls, bp+uintptr(p)) + goto _3 + goto _1 +_1: + ; + (*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[q] = 0 + if int32((*(*[4096]int8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/') { + if !(Xgetcwd(tls, bp, uint32(4097)) != 0) { + return uintptr(0) + } + l = Xstrlen(tls, bp) + /* Cancel any initial .. components. */ + p = uint32(0) + for { + v10 = nup + nup-- + if !(v10 != 0) { + break + } + for l > uint32(1) && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[l-uint32(1)]) != int32('/') { + l-- + } + if l > uint32(1) { + l-- + } + p += uint32(2) + if p < q { + p++ + } + } + if q-p != 0 && int32((*(*[4097]int8)(unsafe.Pointer(bp)))[l-uint32(1)]) != int32('/') { + v11 = l + l++ + (*(*[4097]int8)(unsafe.Pointer(bp)))[v11] = int8('/') + } + if l+(q-p)+uint32(1) >= uint32(PATH_MAX) { + goto toolong + } + Xmemmove(tls, bp+4097+uintptr(l), bp+4097+uintptr(p), q-p+uint32(1)) + Xmemcpy(tls, bp+4097, bp, l) + q = l + q - p + } + if resolved != 0 { + return Xmemcpy(tls, resolved, bp+4097, q+uint32(1)) + } else { + return Xstrdup(tls, bp+4097) + } + goto toolong +toolong: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) +} + +func Xsetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setdomainname), int32(name), int32(len1)))) +} + +func Xsetpriority(tls *TLS, which int32, who Tid_t, prio int32) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v prio=%v, (%v:)", tls, which, who, prio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_setpriority), which, int32(who), prio))) +} + +type Tctx = struct { + Flim [2]uint32 + Fres int32 + Ferr int32 +} + +func _do_setrlimit(tls *TLS, p uintptr) { + var c uintptr + _ = c + c = p + if (*Tctx)(unsafe.Pointer(c)).Ferr > 0 { + return + } + (*Tctx)(unsafe.Pointer(c)).Ferr = int32(-X__syscall2(tls, int32(SYS_setrlimit), (*Tctx)(unsafe.Pointer(c)).Fres, int32(c))) +} + +func Xsetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var v1, v2 uint64 + var _ /* c at bp+16 */ Tctx + var _ /* tmp at bp+0 */ Trlimit + _, _, _ = ret, v1, v2 + if ^Uint64FromUint64(0) != ^Uint64FromUint64(0) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(rlim)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + rlim = bp + } + ret = int32(X__syscall4(tls, int32(SYS_prlimit64), int32(Int32FromInt32(0)), resource, int32(rlim), int32(Int32FromInt32(0)))) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur < uint64(-Uint32FromUint32(1)) { + v1 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur + } else { + v1 = uint64(-Uint32FromUint32(1)) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max < uint64(-Uint32FromUint32(1)) { + v2 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max + } else { + v2 = uint64(-Uint32FromUint32(1)) + } + *(*Tctx)(unsafe.Pointer(bp + 16)) = Tctx{ + Flim: [2]uint32{ + 0: uint32(v1), + 1: uint32(v2), + }, + Fres: resource, + Ferr: -int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setrlimit), bp+16) + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr != 0 { + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr > 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr + } + return -int32(1) + } + return 0 +} + +func Xsyscall(tls *TLS, n int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v va=%v, (%v:)", tls, n, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, c, d, e, f Tsyscall_arg_t + var ap Tva_list + _, _, _, _, _, _, _ = a, ap, b, c, d, e, f + ap = va + a = VaInt32(&ap) + b = VaInt32(&ap) + c = VaInt32(&ap) + d = VaInt32(&ap) + e = VaInt32(&ap) + f = VaInt32(&ap) + _ = ap + return X__syscall_ret(tls, uint32(X__syscall6(tls, n, a, b, c, d, e, f))) +} + +const AF_ALG = 38 +const AF_APPLETALK = 5 +const AF_ASH = 18 +const AF_ATMPVC = 8 +const AF_ATMSVC = 20 +const AF_AX25 = 3 +const AF_BLUETOOTH = 31 +const AF_BRIDGE = 7 +const AF_CAIF = 37 +const AF_CAN = 29 +const AF_DECnet = 12 +const AF_ECONET = 19 +const AF_FILE = 1 +const AF_IB = 27 +const AF_IEEE802154 = 36 +const AF_INET = 2 +const AF_INET6 = 10 +const AF_IPX = 4 +const AF_IRDA = 23 +const AF_ISDN = 34 +const AF_IUCV = 32 +const AF_KCM = 41 +const AF_KEY = 15 +const AF_LLC = 26 +const AF_LOCAL = 1 +const AF_MAX = 45 +const AF_MPLS = 28 +const AF_NETBEUI = 13 +const AF_NETLINK = 16 +const AF_NETROM = 6 +const AF_NFC = 39 +const AF_PACKET = 17 +const AF_PHONET = 35 +const AF_PPPOX = 24 +const AF_QIPCRTR = 42 +const AF_RDS = 21 +const AF_ROSE = 11 +const AF_ROUTE = 16 +const AF_RXRPC = 33 +const AF_SECURITY = 14 +const AF_SMC = 43 +const AF_SNA = 22 +const AF_TIPC = 30 +const AF_UNIX = 1 +const AF_UNSPEC = 0 +const AF_VSOCK = 40 +const AF_WANPIPE = 25 +const AF_X25 = 9 +const AF_XDP = 44 +const LOG_ALERT = 1 +const LOG_AUTH = 32 +const LOG_AUTHPRIV = 80 +const LOG_CONS = 2 +const LOG_CRIT = 2 +const LOG_CRON = 72 +const LOG_DAEMON = 24 +const LOG_DEBUG = 7 +const LOG_EMERG = 0 +const LOG_ERR = 3 +const LOG_FACMASK = 1016 +const LOG_FTP = 88 +const LOG_INFO = 6 +const LOG_KERN = 0 +const LOG_LOCAL0 = 128 +const LOG_LOCAL1 = 136 +const LOG_LOCAL2 = 144 +const LOG_LOCAL3 = 152 +const LOG_LOCAL4 = 160 +const LOG_LOCAL5 = 168 +const LOG_LOCAL6 = 176 +const LOG_LOCAL7 = 184 +const LOG_LPR = 48 +const LOG_MAIL = 16 +const LOG_NDELAY = 8 +const LOG_NEWS = 56 +const LOG_NFACILITIES = 24 +const LOG_NOTICE = 5 +const LOG_NOWAIT = 16 +const LOG_ODELAY = 4 +const LOG_PERROR = 32 +const LOG_PID = 1 +const LOG_PRIMASK = 7 +const LOG_SYSLOG = 40 +const LOG_USER = 8 +const LOG_UUCP = 64 +const LOG_WARNING = 4 +const MSG_BATCH = 262144 +const MSG_CMSG_CLOEXEC = 1073741824 +const MSG_CONFIRM = 2048 +const MSG_CTRUNC = 8 +const MSG_DONTROUTE = 4 +const MSG_DONTWAIT = 64 +const MSG_EOR = 128 +const MSG_ERRQUEUE = 8192 +const MSG_FASTOPEN = 536870912 +const MSG_FIN = 512 +const MSG_MORE = 32768 +const MSG_NOSIGNAL = 16384 +const MSG_OOB = 1 +const MSG_PEEK = 2 +const MSG_PROXY = 16 +const MSG_RST = 4096 +const MSG_SYN = 1024 +const MSG_TRUNC = 32 +const MSG_WAITALL = 256 +const MSG_WAITFORONE = 65536 +const MSG_ZEROCOPY = 67108864 +const PF_ALG = 38 +const PF_APPLETALK = 5 +const PF_ASH = 18 +const PF_ATMPVC = 8 +const PF_ATMSVC = 20 +const PF_AX25 = 3 +const PF_BLUETOOTH = 31 +const PF_BRIDGE = 7 +const PF_CAIF = 37 +const PF_CAN = 29 +const PF_DECnet = 12 +const PF_ECONET = 19 +const PF_FILE = 1 +const PF_IB = 27 +const PF_IEEE802154 = 36 +const PF_INET = 2 +const PF_INET6 = 10 +const PF_IPX = 4 +const PF_IRDA = 23 +const PF_ISDN = 34 +const PF_IUCV = 32 +const PF_KCM = 41 +const PF_KEY = 15 +const PF_LLC = 26 +const PF_LOCAL = 1 +const PF_MAX = 45 +const PF_MPLS = 28 +const PF_NETBEUI = 13 +const PF_NETLINK = 16 +const PF_NETROM = 6 +const PF_NFC = 39 +const PF_PACKET = 17 +const PF_PHONET = 35 +const PF_PPPOX = 24 +const PF_QIPCRTR = 42 +const PF_RDS = 21 +const PF_ROSE = 11 +const PF_ROUTE = 16 +const PF_RXRPC = 33 +const PF_SECURITY = 14 +const PF_SMC = 43 +const PF_SNA = 22 +const PF_TIPC = 30 +const PF_UNIX = 1 +const PF_UNSPEC = 0 +const PF_VSOCK = 40 +const PF_WANPIPE = 25 +const PF_X25 = 9 +const PF_XDP = 44 +const SCM_CREDENTIALS = 2 +const SCM_RIGHTS = 1 +const SCM_TIMESTAMP = 63 +const SCM_TIMESTAMPING = 65 +const SCM_TIMESTAMPING_OPT_STATS = 54 +const SCM_TIMESTAMPING_PKTINFO = 58 +const SCM_TIMESTAMPNS = 64 +const SCM_TXTIME = 61 +const SCM_WIFI_STATUS = 41 +const SHUT_RD = 0 +const SHUT_RDWR = 2 +const SHUT_WR = 1 +const SOCK_CLOEXEC = 524288 +const SOCK_DCCP = 6 +const SOCK_DGRAM = 2 +const SOCK_NONBLOCK = 2048 +const SOCK_PACKET = 10 +const SOCK_RAW = 3 +const SOCK_RDM = 4 +const SOCK_SEQPACKET = 5 +const SOCK_STREAM = 1 +const SOL_AAL = 265 +const SOL_ALG = 279 +const SOL_ATM = 264 +const SOL_BLUETOOTH = 274 +const SOL_CAIF = 278 +const SOL_DCCP = 269 +const SOL_DECNET = 261 +const SOL_ICMPV6 = 58 +const SOL_IP = 0 +const SOL_IPV6 = 41 +const SOL_IRDA = 266 +const SOL_IUCV = 277 +const SOL_KCM = 281 +const SOL_LLC = 268 +const SOL_NETBEUI = 267 +const SOL_NETLINK = 270 +const SOL_NFC = 280 +const SOL_PACKET = 263 +const SOL_PNPIPE = 275 +const SOL_PPPOL2TP = 273 +const SOL_RAW = 255 +const SOL_RDS = 276 +const SOL_RXRPC = 272 +const SOL_SOCKET = 1 +const SOL_TIPC = 271 +const SOL_TLS = 282 +const SOL_X25 = 262 +const SOL_XDP = 283 +const SOMAXCONN = 128 +const SO_ACCEPTCONN = 30 +const SO_ATTACH_BPF = 50 +const SO_ATTACH_FILTER = 26 +const SO_ATTACH_REUSEPORT_CBPF = 51 +const SO_ATTACH_REUSEPORT_EBPF = 52 +const SO_BINDTODEVICE = 25 +const SO_BINDTOIFINDEX = 62 +const SO_BPF_EXTENSIONS = 48 +const SO_BROADCAST = 6 +const SO_BSDCOMPAT = 14 +const SO_BUSY_POLL = 46 +const SO_BUSY_POLL_BUDGET = 70 +const SO_CNX_ADVICE = 53 +const SO_COOKIE = 57 +const SO_DEBUG = 1 +const SO_DETACH_BPF = 27 +const SO_DETACH_FILTER = 27 +const SO_DETACH_REUSEPORT_BPF = 68 +const SO_DOMAIN = 39 +const SO_DONTROUTE = 5 +const SO_ERROR = 4 +const SO_GET_FILTER = 26 +const SO_INCOMING_CPU = 49 +const SO_INCOMING_NAPI_ID = 56 +const SO_KEEPALIVE = 9 +const SO_LINGER = 13 +const SO_LOCK_FILTER = 44 +const SO_MARK = 36 +const SO_MAX_PACING_RATE = 47 +const SO_MEMINFO = 55 +const SO_NOFCS = 43 +const SO_NO_CHECK = 11 +const SO_OOBINLINE = 10 +const SO_PASSCRED = 16 +const SO_PASSSEC = 34 +const SO_PEEK_OFF = 42 +const SO_PEERCRED = 17 +const SO_PEERGROUPS = 59 +const SO_PEERNAME = 28 +const SO_PEERSEC = 31 +const SO_PREFER_BUSY_POLL = 69 +const SO_PRIORITY = 12 +const SO_PROTOCOL = 38 +const SO_RCVBUF = 8 +const SO_RCVBUFFORCE = 33 +const SO_RCVLOWAT = 18 +const SO_RCVTIMEO = 66 +const SO_REUSEADDR = 2 +const SO_REUSEPORT = 15 +const SO_RXQ_OVFL = 40 +const SO_SECURITY_AUTHENTICATION = 22 +const SO_SECURITY_ENCRYPTION_NETWORK = 24 +const SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +const SO_SELECT_ERR_QUEUE = 45 +const SO_SNDBUF = 7 +const SO_SNDBUFFORCE = 32 +const SO_SNDLOWAT = 19 +const SO_SNDTIMEO = 67 +const SO_TIMESTAMP = 63 +const SO_TIMESTAMPING = 65 +const SO_TIMESTAMPNS = 64 +const SO_TXTIME = 61 +const SO_TYPE = 3 +const SO_WIFI_STATUS = 41 +const SO_ZEROCOPY = 60 + +type Tsocklen_t = uint32 + +type Tsa_family_t = uint16 + +type Tmsghdr = struct { + Fmsg_name uintptr + Fmsg_namelen Tsocklen_t + Fmsg_iov uintptr + Fmsg_iovlen int32 + Fmsg_control uintptr + Fmsg_controllen Tsocklen_t + Fmsg_flags int32 +} + +type Tcmsghdr = struct { + Fcmsg_len Tsocklen_t + Fcmsg_level int32 + Fcmsg_type int32 +} + +type Tlinger = struct { + Fl_onoff int32 + Fl_linger int32 +} + +type Tsockaddr = struct { + Fsa_family Tsa_family_t + Fsa_data [14]int8 +} + +type Tsockaddr_storage = struct { + Fss_family Tsa_family_t + F__ss_padding [122]int8 + F__ss_align uint32 +} + +type t__ucontext2 = Tucontext_t2 + +var _lock2 [1]int32 +var _log_ident [32]int8 +var _log_opt int32 +var _log_facility = Int32FromInt32(1) << Int32FromInt32(3) +var _log_mask = int32(0xff) +var _log_fd = -int32(1) + +func Xsetlogmask(tls *TLS, maskpri int32) (r int32) { + if __ccgo_strace { + trc("tls=%v maskpri=%v, (%v:)", tls, maskpri, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + ret = _log_mask + if maskpri != 0 { + _log_mask = maskpri + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + return ret +} + +var _log_addr = struct { + Fsun_family int16 + Fsun_path [9]int8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [9]int8{'/', 'd', 'e', 'v', '/', 'l', 'o', 'g'}, +} + +func Xcloselog(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + Xclose(tls, _log_fd) + _log_fd = -int32(1) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func ___openlog(tls *TLS) { + _log_fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if _log_fd >= 0 { + Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) + } +} + +func Xopenlog(tls *TLS, ident uintptr, opt int32, facility int32) { + if __ccgo_strace { + trc("tls=%v ident=%v opt=%v facility=%v, (%v:)", tls, ident, opt, facility, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var n Tsize_t + var _ /* cs at bp+0 */ int32 + _ = n + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + if ident != 0 { + n = Xstrnlen(tls, ident, Uint32FromInt64(32)-Uint32FromInt32(1)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&_log_ident)), ident, n) + _log_ident[n] = 0 + } else { + _log_ident[0] = 0 + } + _log_opt = opt + _log_facility = facility + if opt&int32(LOG_NDELAY) != 0 && _log_fd < 0 { + ___openlog(tls) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func _is_lost_conn(tls *TLS, e int32) (r int32) { + return BoolInt32(e == int32(ECONNREFUSED) || e == int32(ECONNRESET) || e == int32(ENOTCONN) || e == int32(EPIPE)) +} + +func __vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(1168) + defer tls.Free(1168) + var errno_save, fd, l, l2, pid, v1, v2 int32 + var _ /* buf at bp+68 */ [1024]int8 + var _ /* hlen at bp+1092 */ int32 + var _ /* now at bp+16 */ Ttime_t + var _ /* timebuf at bp+0 */ [16]int8 + var _ /* tm at bp+24 */ Ttm + _, _, _, _, _, _, _ = errno_save, fd, l, l2, pid, v1, v2 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if _log_fd < 0 { + ___openlog(tls) + } + if !(priority&Int32FromInt32(LOG_FACMASK) != 0) { + priority |= _log_facility + } + *(*Ttime_t)(unsafe.Pointer(bp + 16)) = Xtime(tls, UintptrFromInt32(0)) + Xgmtime_r(tls, bp+16, bp+24) + Xstrftime_l(tls, bp, uint32(16), __ccgo_ts+836, bp+24, uintptr(unsafe.Pointer(&X__c_locale))) + if _log_opt&int32(LOG_PID) != 0 { + v1 = Xgetpid(tls) + } else { + v1 = 0 + } + pid = v1 + l = Xsnprintf(tls, bp+68, uint32(1024), __ccgo_ts+845, VaList(bp+1104, priority, bp, bp+1092, uintptr(unsafe.Pointer(&_log_ident)), __ccgo_ts+867+BoolUintptr(!(pid != 0)), pid, __ccgo_ts+869+BoolUintptr(!(pid != 0)))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + l2 = Xvsnprintf(tls, bp+68+uintptr(l), uint32(1024)-uint32(l), message, ap) + if l2 >= 0 { + if uint32(l2) >= uint32(1024)-uint32(l) { + l = int32(Uint32FromInt64(1024) - Uint32FromInt32(1)) + } else { + l += l2 + } + if int32((*(*[1024]int8)(unsafe.Pointer(bp + 68)))[l-int32(1)]) != int32('\n') { + v2 = l + l++ + (*(*[1024]int8)(unsafe.Pointer(bp + 68)))[v2] = int8('\n') + } + if Xsend(tls, _log_fd, bp+68, uint32(l), 0) < 0 && (!(_is_lost_conn(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0) || Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) < 0 || Xsend(tls, _log_fd, bp+68, uint32(l), 0) < 0) && _log_opt&int32(LOG_CONS) != 0 { + fd = Xopen(tls, __ccgo_ts+564, Int32FromInt32(O_WRONLY)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + if fd >= 0 { + Xdprintf(tls, fd, __ccgo_ts+871, VaList(bp+1104, l-*(*int32)(unsafe.Pointer(bp + 1092)), bp+68+uintptr(*(*int32)(unsafe.Pointer(bp + 1092))))) + Xclose(tls, fd) + } + } + if _log_opt&int32(LOG_PERROR) != 0 { + Xdprintf(tls, int32(2), __ccgo_ts+871, VaList(bp+1104, l-*(*int32)(unsafe.Pointer(bp + 1092)), bp+68+uintptr(*(*int32)(unsafe.Pointer(bp + 1092))))) + } + } +} + +func ___vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + if !(_log_mask&(Int32FromInt32(1)<<(priority&Int32FromInt32(7))) != 0) || priority & ^Int32FromInt32(0x3ff) != 0 { + return + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + __vsyslog(tls, priority, message, ap) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func Xsyslog(tls *TLS, priority int32, message uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v priority=%v message=%v va=%v, (%v:)", tls, priority, message, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + ___vsyslog(tls, priority, message, ap) + _ = ap +} + +type Tutsname1 = struct { + Fsysname [65]int8 + Fnodename [65]int8 + Frelease [65]int8 + Fversion [65]int8 + Fmachine [65]int8 + F__domainname [65]int8 +} + +func Xuname(tls *TLS, uts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uts=%v, (%v:)", tls, uts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_uname), int32(uts)))) +} + +func X__madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_madvise), int32(addr), int32(len1), advice))) +} + +func Xmadvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__madvise(tls, addr, len1, advice) +} + +func Xmincore(tls *TLS, addr uintptr, len1 Tsize_t, vec uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v vec=%v, (%v:)", tls, addr, len1, vec, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mincore), int32(addr), int32(len1), int32(vec)))) +} + +func Xmlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_mlock), int32(addr), int32(len1)))) +} + +func Xmlockall(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_mlockall), flags))) +} + +const OFF_MASK = 4095 +const UNIT = 4096 + +func _dummy5(tls *TLS) { +} + +func X__mmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint64(off)&(-Uint64FromUint64(0x2000)<<(Uint32FromInt32(8)*Uint32FromInt64(4)-Uint32FromInt32(1))|(Uint64FromUint64(4096)-Uint64FromInt32(1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + if len1 >= uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MAP_FIXED) != 0 { + _dummy5(tls) + } + ret = X__syscall6(tls, int32(SYS_mmap2), int32(start), int32(len1), prot, flags, fd, int32(uint64(off)/Uint64FromUint64(4096))) + /* Fixup incorrect EPERM from kernel. */ + if ret == -int32(EPERM) && !(start != 0) && flags&int32(MAP_ANON) != 0 && !(flags&Int32FromInt32(MAP_FIXED) != 0) { + ret = -int32(ENOMEM) + } + return uintptr(X__syscall_ret(tls, uint32(ret))) +} + +func Xmmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mmap(tls, start, len1, prot, flags, fd, off) +} + +func X__mprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, start Tsize_t + _, _ = end, start + start = uint32(addr) & uint32(-Int32FromInt32(PAGESIZE)) + end = uint32(addr+uintptr(len1)+UintptrFromInt32(PAGESIZE)-UintptrFromInt32(1)) & uint32(-Int32FromInt32(PAGESIZE)) + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mprotect), int32(start), int32(end-start), prot))) +} + +func Xmprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mprotect(tls, addr, len1, prot) +} + +func _dummy6(tls *TLS) { +} + +func X__mremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var new_addr uintptr + _, _ = ap, new_addr + new_addr = uintptr(0) + if new_len >= uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MREMAP_FIXED) != 0 { + _dummy6(tls) + ap = va + new_addr = VaUintptr(&ap) + _ = ap + } + return uintptr(X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_mremap), int32(old_addr), int32(old_len), int32(new_len), flags, int32(new_addr))))) +} + +func Xmremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mremap(tls, old_addr, old_len, new_len, flags, va) +} + +func Xmsync(tls *TLS, start uintptr, len1 Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v flags=%v, (%v:)", tls, start, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_msync), int32(start), int32(len1), flags, 0, 0, 0))) +} + +func Xmunlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_munlock), int32(addr), int32(len1)))) +} + +func Xmunlockall(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_munlockall)))) +} + +func _dummy7(tls *TLS) { +} + +func X__munmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + _dummy7(tls) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_munmap), int32(start), int32(len1)))) +} + +func Xmunmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__munmap(tls, start, len1) +} + +func Xposix_madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + if advice == int32(MADV_DONTNEED) { + return 0 + } + return int32(-X__syscall3(tls, int32(SYS_madvise), int32(addr), int32(len1), advice)) +} + +func X__shm_mapname(tls *TLS, name uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v, (%v:)", tls, name, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1 uintptr + _, _ = p, v1 + for int32(*(*int8)(unsafe.Pointer(name))) == int32('/') { + name++ + } + v1 = X__strchrnul(tls, name, int32('/')) + p = v1 + if *(*int8)(unsafe.Pointer(v1)) != 0 || p == name || int32(p)-int32(name) <= int32(2) && int32(*(*int8)(unsafe.Pointer(name))) == int32('.') && int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('.') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if int32(p)-int32(name) > int32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, buf, __ccgo_ts+876, uint32(9)) + Xmemcpy(tls, buf+uintptr(9), name, uint32(int32(p)-int32(name)+int32(1))) + return buf +} + +func Xshm_open(tls *TLS, name uintptr, flag int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flag=%v mode=%v, (%v:)", tls, name, flag, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var fd int32 + var v1 uintptr + var _ /* buf at bp+4 */ [265]int8 + var _ /* cs at bp+0 */ int32 + _, _ = fd, v1 + v1 = X__shm_mapname(tls, name, bp+4) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + fd = Xopen(tls, name, flag|int32(O_NOFOLLOW)|int32(O_CLOEXEC)|int32(O_NONBLOCK), VaList(bp+280, mode)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return fd +} + +func Xshm_unlink(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var v1 uintptr + var _ /* buf at bp+0 */ [265]int8 + _ = v1 + v1 = X__shm_mapname(tls, name, bp) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + return Xunlink(tls, name) +} + +const SA = 194 +const SB = 244 +const bittab = 0 + +type Tucontext_t4 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +func Xbtowc(tls *TLS, c int32) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, v3 int32 + var v1, v2 uint32 + _, _, _, _ = b, v1, v2, v3 + b = int32(uint8(c)) + if uint32(b) < uint32(128) { + v1 = uint32(b) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) && c != -int32(1) { + v2 = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + } else { + v2 = uint32(0xffffffff) + } + v1 = v2 + } + return v1 +} + +type Tchar16_t = uint16 + +type Tchar32_t = uint32 + +func Xc16rtomb(tls *TLS, s uintptr, c16 Tchar16_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c16=%v ps=%v, (%v:)", tls, s, c16, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wc Twchar_t + var x uintptr + _, _ = wc, x + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state)) + } + x = ps + if !(s != 0) { + if *(*uint32)(unsafe.Pointer(x)) != 0 { + goto ilseq + } + return uint32(1) + } + if !(*(*uint32)(unsafe.Pointer(x)) != 0) && uint32(c16)-uint32(0xd800) < uint32(0x400) { + *(*uint32)(unsafe.Pointer(x)) = uint32((int32(c16) - int32(0xd7c0)) << int32(10)) + return uint32(0) + } + if *(*uint32)(unsafe.Pointer(x)) != 0 { + if uint32(c16)-uint32(0xdc00) >= uint32(0x400) { + goto ilseq + } else { + wc = int32(*(*uint32)(unsafe.Pointer(x)) + uint32(c16) - uint32(0xdc00)) + } + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + } else { + wc = int32(c16) + } + return Xwcrtomb(tls, s, wc, uintptr(0)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +var _internal_state uint32 + +func Xc32rtomb(tls *TLS, s uintptr, c32 Tchar32_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c32=%v ps=%v, (%v:)", tls, s, c32, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcrtomb(tls, s, int32(c32), ps) +} + +func Xmblen(tls *TLS, s uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmbtowc(tls, uintptr(0), s, n) +} + +func Xmbrlen(tls *TLS, s uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v st=%v, (%v:)", tls, s, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if st != 0 { + v1 = st + } else { + v1 = uintptr(unsafe.Pointer(&_internal)) + } + return Xmbrtowc(tls, uintptr(0), s, n, v1) +} + +var _internal uint32 + +func Xmbrtoc16(tls *TLS, pc16 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc16=%v s=%v n=%v ps=%v, (%v:)", tls, pc16, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pending uintptr + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _ = pending, ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state1)) + } + pending = ps + if !(s != 0) { + return Xmbrtoc16(tls, uintptr(0), __ccgo_ts, uint32(1), ps) + } + /* mbrtowc states for partial UTF-8 characters have the high bit set; + * we use nonzero states without high bit for pending surrogates. */ + if int32(*(*uint32)(unsafe.Pointer(pending))) > 0 { + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*uint32)(unsafe.Pointer(pending))) + } + *(*uint32)(unsafe.Pointer(pending)) = uint32(0) + return uint32(-Int32FromInt32(3)) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint32(4) { + if *(*Twchar_t)(unsafe.Pointer(bp)) >= int32(0x10000) { + *(*uint32)(unsafe.Pointer(pending)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))&int32(0x3ff) + int32(0xdc00)) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xd7c0) + *(*Twchar_t)(unsafe.Pointer(bp))>>Int32FromInt32(10) + } + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + return ret +} + +var _internal_state1 uint32 + +func Xmbrtoc32(tls *TLS, pc32 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc32=%v s=%v n=%v ps=%v, (%v:)", tls, pc32, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _ = ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state2)) + } + if !(s != 0) { + return Xmbrtoc32(tls, uintptr(0), __ccgo_ts, uint32(1), ps) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint32(4) && pc32 != 0 { + *(*Tchar32_t)(unsafe.Pointer(pc32)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + return ret +} + +var _internal_state2 uint32 + +func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N Tsize_t + var c uint32 + var s, v3, v4 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = N, c, s, v1, v2, v3, v4 + s = src + N = n + if !(st != 0) { + st = uintptr(unsafe.Pointer(&_internal_state3)) + } + c = *(*uint32)(unsafe.Pointer(st)) + if !(s != 0) { + if c != 0 { + goto ilseq + } + return uint32(0) + } else { + if !(wc != 0) { + wc = bp + } + } + if !(n != 0) { + return uint32(-Int32FromInt32(2)) + } + if !(c != 0) { + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolUint32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s))))) + return Uint32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + n-- + } + if n != 0 { + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + goto loop + loop: + ; + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + goto loop + } + } + *(*uint32)(unsafe.Pointer(st)) = c + return uint32(-Int32FromInt32(2)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +var _internal_state3 uint32 + +func Xmbsinit(tls *TLS, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(st != 0) || !(*(*uint32)(unsafe.Pointer(st)) != 0)) +} + +func Xmbsnrtowcs(tls *TLS, wcs uintptr, src uintptr, n Tsize_t, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v src=%v n=%v wn=%v st=%v, (%v:)", tls, wcs, src, n, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + var cnt, l, n2, v1 Tsize_t + var tmp_s, ws uintptr + var v2 bool + var v3 uint32 + var _ /* s at bp+1024 */ uintptr + var _ /* wbuf at bp+0 */ [256]Twchar_t + _, _, _, _, _, _, _, _ = cnt, l, n2, tmp_s, ws, v1, v2, v3 + cnt = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 1024)) = *(*uintptr)(unsafe.Pointer(src)) + if !(wcs != 0) { + ws = bp + wn = Uint32FromInt64(1024) / Uint32FromInt64(4) + } else { + ws = wcs + } + /* making sure output buffer size is at most n/4 will ensure + * that mbsrtowcs never reads more than n input bytes. thus + * we can use mbsrtowcs as long as it's practical.. */ + for { + if v2 = *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 && wn != 0; v2 { + v1 = n / Uint32FromInt32(4) + n2 = v1 + } + if !(v2 && (v1 >= wn || n2 > uint32(32))) { + break + } + if n2 >= wn { + n2 = wn + } + tmp_s = *(*uintptr)(unsafe.Pointer(bp + 1024)) + l = Xmbsrtowcs(tls, ws, bp+1024, n2, st) + if !(l+Uint32FromInt32(1) != 0) { + cnt = l + wn = uint32(0) + break + } + if ws != bp { + ws += uintptr(l) * 4 + wn -= l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + v3 = n - uint32(int32(*(*uintptr)(unsafe.Pointer(bp + 1024)))-int32(tmp_s)) + } else { + v3 = uint32(0) + } + n = v3 + cnt += l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + for wn != 0 && n != 0 { + l = Xmbrtowc(tls, ws, *(*uintptr)(unsafe.Pointer(bp + 1024)), n, st) + if l+uint32(2) <= uint32(2) { + if !(l+Uint32FromInt32(1) != 0) { + cnt = l + break + } + if !(l != 0) { + *(*uintptr)(unsafe.Pointer(bp + 1024)) = uintptr(0) + break + } + /* have to roll back partial character */ + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + break + } + *(*uintptr)(unsafe.Pointer(bp + 1024)) += uintptr(l) + n -= l + /* safe - this loop runs fewer than sizeof(wbuf)/8 times */ + ws += 4 + wn-- + cnt++ + } + } + if wcs != 0 { + *(*uintptr)(unsafe.Pointer(src)) = *(*uintptr)(unsafe.Pointer(bp + 1024)) + } + return cnt +} + +func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v ws=%v src=%v wn=%v st=%v, (%v:)", tls, ws, src, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 uint32 + var s, v12, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v5, v6 uintptr + var wn0 Tsize_t + var v2 bool + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, s, wn0, v1, v12, v16, v17, v18, v19, v2, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v3, v30, v5, v6 + s = *(*uintptr)(unsafe.Pointer(src)) + wn0 = wn + c = uint32(0) + if v2 = st != 0; v2 { + v1 = *(*uint32)(unsafe.Pointer(st)) + c = v1 + } + if v2 && v1 != 0 { + if ws != 0 { + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + goto resume + } else { + goto resume0 + } + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + if !(ws != 0) { + return Xstrlen(tls, s) + } + for { + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + v5 = s + s++ + c = uint32(*(*uint8)(unsafe.Pointer(v5))) + v6 = ws + ws += 4 + *(*Twchar_t)(unsafe.Pointer(v6)) = int32(Int32FromInt32(0xdfff) & int32(int8(c))) + wn-- + goto _4 + _4: + } + *(*Twchar_t)(unsafe.Pointer(ws)) = 0 + *(*uintptr)(unsafe.Pointer(src)) = uintptr(0) + return wn0 - wn + } + if !!(ws != 0) { + goto _7 + } +_11: + ; + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint32(s)%uint32(4) == uint32(0) { + for !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + s += uintptr(4) + wn -= uint32(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + s++ + wn-- + goto _10 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _9 + } + v12 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v12)))-uint32(0xc2)] + goto resume0 +resume0: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(2) + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(3) + goto _9 + } + s++ + } + } + wn-- + c = uint32(0) + goto _10 +_10: + ; + goto _11 + goto _9 +_9: + ; + goto _8 +_7: + ; +_15: + ; + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint32(s)%uint32(4) == uint32(0) { + for wn >= uint32(5) && !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + v16 = ws + ws += 4 + v17 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v16)) = int32(*(*uint8)(unsafe.Pointer(v17))) + v18 = ws + ws += 4 + v19 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v18)) = int32(*(*uint8)(unsafe.Pointer(v19))) + v20 = ws + ws += 4 + v21 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v20)) = int32(*(*uint8)(unsafe.Pointer(v21))) + v22 = ws + ws += 4 + v23 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v22)) = int32(*(*uint8)(unsafe.Pointer(v23))) + wn -= uint32(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + v24 = ws + ws += 4 + v25 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v24)) = int32(*(*uint8)(unsafe.Pointer(v25))) + wn-- + goto _14 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _13 + } + v26 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v26)))-uint32(0xc2)] + goto resume +resume: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _13 + } + v27 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(2) + goto _13 + } + v28 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(3) + goto _13 + } + v29 = s + s++ + c = c< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _s + return Xmbsrtowcs(tls, ws, bp, wn, uintptr(0)) +} + +func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v, (%v:)", tls, wc, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c uint32 + var s, v3, v4, v5, v6 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _ = c, s, v1, v2, v3, v4, v5, v6 + s = src + if !(s != 0) { + return 0 + } + if !(n != 0) { + goto ilseq + } + if !(wc != 0) { + wc = bp + } + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolInt32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s))))) + return Int32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + /* Avoid excessive checks against n: If shifting the state n-1 + * times does not clear the high bit, then the value of n is + * insufficient to read a character */ + if n < uint32(4) && c<<(uint32(6)*n-uint32(6))&(Uint32FromUint32(1)<>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v5 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v6 = s + s++ + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(c< %v", r) }() + } + var v1 int32 + var v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if !(s != 0) { + return uint32(1) + } + if uint32(wc) < uint32(0x80) { + *(*int8)(unsafe.Pointer(s)) = int8(wc) + return uint32(1) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) { + if !(uint32(wc)-Uint32FromInt32(0xdf80) < Uint32FromInt32(0x80)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) + } + *(*int8)(unsafe.Pointer(s)) = int8(wc) + return uint32(1) + } else { + if uint32(wc) < uint32(0x800) { + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = int8(int32(0xc0) | wc>>Int32FromInt32(6)) + *(*int8)(unsafe.Pointer(s)) = int8(int32(0x80) | wc&int32(0x3f)) + return uint32(2) + } else { + if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) { + v3 = s + s++ + *(*int8)(unsafe.Pointer(v3)) = int8(int32(0xe0) | wc>>Int32FromInt32(12)) + v4 = s + s++ + *(*int8)(unsafe.Pointer(v4)) = int8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*int8)(unsafe.Pointer(s)) = int8(int32(0x80) | wc&int32(0x3f)) + return uint32(3) + } else { + if uint32(wc)-uint32(0x10000) < uint32(0x100000) { + v5 = s + s++ + *(*int8)(unsafe.Pointer(v5)) = int8(int32(0xf0) | wc>>Int32FromInt32(18)) + v6 = s + s++ + *(*int8)(unsafe.Pointer(v6)) = int8(int32(0x80) | wc>>Int32FromInt32(12)&int32(0x3f)) + v7 = s + s++ + *(*int8)(unsafe.Pointer(v7)) = int8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*int8)(unsafe.Pointer(s)) = int8(int32(0x80) | wc&int32(0x3f)) + return uint32(4) + } + } + } + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +func Xwcsnrtombs(tls *TLS, dst uintptr, wcs uintptr, wn Tsize_t, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dst=%v wcs=%v wn=%v n=%v st=%v, (%v:)", tls, dst, wcs, wn, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt, l Tsize_t + var ws, v1 uintptr + var _ /* tmp at bp+0 */ [4]int8 + _, _, _, _ = cnt, l, ws, v1 + ws = *(*uintptr)(unsafe.Pointer(wcs)) + cnt = uint32(0) + if !(dst != 0) { + n = uint32(0) + } + for ws != 0 && wn != 0 { + if n < uint32(MB_LEN_MAX) { + v1 = bp + } else { + v1 = dst + } + l = Xwcrtomb(tls, v1, *(*Twchar_t)(unsafe.Pointer(ws)), uintptr(0)) + if l == uint32(-Int32FromInt32(1)) { + cnt = uint32(-Int32FromInt32(1)) + break + } + if dst != 0 { + if n < uint32(MB_LEN_MAX) { + if l > n { + break + } + Xmemcpy(tls, dst, bp, l) + } + dst += uintptr(l) + n -= l + } + if !(*(*Twchar_t)(unsafe.Pointer(ws)) != 0) { + ws = uintptr(0) + break + } + ws += 4 + wn-- + cnt += l + } + if dst != 0 { + *(*uintptr)(unsafe.Pointer(wcs)) = ws + } + return cnt +} + +func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N, l Tsize_t + var ws2, v2, v3 uintptr + var _ /* buf at bp+0 */ [4]int8 + _, _, _, _, _ = N, l, ws2, v2, v3 + N = n + if !(s != 0) { + n = uint32(0) + ws2 = *(*uintptr)(unsafe.Pointer(ws)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(ws2)) != 0) { + break + } + if uint32(*(*Twchar_t)(unsafe.Pointer(ws2))) >= uint32(0x80) { + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(ws2)), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + n += l + } else { + n++ + } + goto _1 + _1: + ; + ws2 += 4 + } + return n + } + for n >= uint32(4) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*int8)(unsafe.Pointer(s)) = 0 + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + s += uintptr(l) + n -= l + } else { + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = int8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + for n != 0 { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*int8)(unsafe.Pointer(s)) = 0 + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + if l > n { + return N - n + } + Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + s += uintptr(l) + n -= l + } else { + v3 = s + s++ + *(*int8)(unsafe.Pointer(v3)) = int8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + return N +} + +func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = ws + return Xwcsrtombs(tls, s, bp, n, uintptr(0)) +} + +func Xwctob(tls *TLS, c Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if c < uint32(128) { + return int32(c) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) && c-uint32(0xdf80) < uint32(0x80) { + return int32(uint8(c)) + } + return -int32(1) +} + +func Xwctomb(tls *TLS, s uintptr, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v wc=%v, (%v:)", tls, s, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(s != 0) { + return 0 + } + return int32(Xwcrtomb(tls, s, wc, uintptr(0))) +} + +func Xaccept(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_accept4) + v2 = int32(__SC_accept) + v3 = int32(1) + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +type Tucred = struct { + Fpid Tpid_t + Fuid Tuid_t + Fgid Tgid_t +} + +type Tmmsghdr = struct { + Fmsg_hdr Tmsghdr + Fmsg_len uint32 +} + +func Xaccept4(tls *TLS, fd int32, addr uintptr, len1 uintptr, flg int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v flg=%v, (%v:)", tls, fd, addr, len1, flg, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, ret, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _ = r, ret, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + if !(flg != 0) { + return Xaccept(tls, fd, addr, len1) + } + v1 = int32(SYS_accept4) + v2 = int32(__SC_accept4) + v3 = int32(1) + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = flg + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + ret = X__syscall_ret(tls, uint32(v10)) + if ret >= 0 || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return ret + } + if flg & ^(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + ret = Xaccept(tls, fd, addr, len1) + if ret < 0 { + return ret + } + if flg&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flg&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + return ret +} + +func Xbind(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_bind) + v2 = int32(__SC_bind) + v3 = 0 + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xconnect(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_connect) + v2 = int32(__SC_connect) + v3 = int32(1) + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +const ADD = 0 +const C_ANY = 0 +const C_CHAOS = 0 +const C_HS = 0 +const C_IN = 0 +const C_NONE = 0 +const DELETE = 0 +const FORMERR = 0 +const GETLONG = 0 +const GETSHORT = 0 +const HFIXEDSZ = 12 +const IN6ADDRSZ = 16 +const INADDRSZ = 4 +const INDIR_MASK = 192 +const INET6_ADDRSTRLEN = 46 +const INET_ADDRSTRLEN = 16 +const INT16SZ = 2 +const INT32SZ = 4 +const INT8SZ = 1 +const IN_CLASSA_HOST = 16777215 +const IN_CLASSA_MAX = 128 +const IN_CLASSA_NET = 4278190080 +const IN_CLASSA_NSHIFT = 24 +const IN_CLASSB_HOST = 65535 +const IN_CLASSB_MAX = 65536 +const IN_CLASSB_NET = 4294901760 +const IN_CLASSB_NSHIFT = 16 +const IN_CLASSC_HOST = 255 +const IN_CLASSC_NET = 4294967040 +const IN_CLASSC_NSHIFT = 8 +const IN_LOOPBACKNET = 127 +const IPPORT_RESERVED = 1024 +const IPPROTO_AH = 51 +const IPPROTO_BEETPH = 94 +const IPPROTO_COMP = 108 +const IPPROTO_DCCP = 33 +const IPPROTO_DSTOPTS = 60 +const IPPROTO_EGP = 8 +const IPPROTO_ENCAP = 98 +const IPPROTO_ESP = 50 +const IPPROTO_ETHERNET = 143 +const IPPROTO_FRAGMENT = 44 +const IPPROTO_GRE = 47 +const IPPROTO_HOPOPTS = 0 +const IPPROTO_ICMP = 1 +const IPPROTO_ICMPV6 = 58 +const IPPROTO_IDP = 22 +const IPPROTO_IGMP = 2 +const IPPROTO_IP = 0 +const IPPROTO_IPIP = 4 +const IPPROTO_IPV6 = 41 +const IPPROTO_MAX = 263 +const IPPROTO_MH = 135 +const IPPROTO_MPLS = 137 +const IPPROTO_MPTCP = 262 +const IPPROTO_MTP = 92 +const IPPROTO_NONE = 59 +const IPPROTO_PIM = 103 +const IPPROTO_PUP = 12 +const IPPROTO_RAW = 255 +const IPPROTO_ROUTING = 43 +const IPPROTO_RSVP = 46 +const IPPROTO_SCTP = 132 +const IPPROTO_TCP = 6 +const IPPROTO_TP = 29 +const IPPROTO_UDP = 17 +const IPPROTO_UDPLITE = 136 +const IPV6_2292DSTOPTS = 4 +const IPV6_2292HOPLIMIT = 8 +const IPV6_2292HOPOPTS = 3 +const IPV6_2292PKTINFO = 2 +const IPV6_2292PKTOPTIONS = 6 +const IPV6_2292RTHDR = 5 +const IPV6_ADDRFORM = 1 +const IPV6_ADDR_PREFERENCES = 72 +const IPV6_ADD_MEMBERSHIP = 20 +const IPV6_AUTHHDR = 10 +const IPV6_AUTOFLOWLABEL = 70 +const IPV6_CHECKSUM = 7 +const IPV6_DONTFRAG = 62 +const IPV6_DROP_MEMBERSHIP = 21 +const IPV6_DSTOPTS = 59 +const IPV6_FREEBIND = 78 +const IPV6_HDRINCL = 36 +const IPV6_HOPLIMIT = 52 +const IPV6_HOPOPTS = 54 +const IPV6_IPSEC_POLICY = 34 +const IPV6_JOIN_ANYCAST = 27 +const IPV6_JOIN_GROUP = 20 +const IPV6_LEAVE_ANYCAST = 28 +const IPV6_LEAVE_GROUP = 21 +const IPV6_MINHOPCOUNT = 73 +const IPV6_MTU = 24 +const IPV6_MTU_DISCOVER = 23 +const IPV6_MULTICAST_ALL = 29 +const IPV6_MULTICAST_HOPS = 18 +const IPV6_MULTICAST_IF = 17 +const IPV6_MULTICAST_LOOP = 19 +const IPV6_NEXTHOP = 9 +const IPV6_ORIGDSTADDR = 74 +const IPV6_PATHMTU = 61 +const IPV6_PKTINFO = 50 +const IPV6_PMTUDISC_DO = 2 +const IPV6_PMTUDISC_DONT = 0 +const IPV6_PMTUDISC_INTERFACE = 4 +const IPV6_PMTUDISC_OMIT = 5 +const IPV6_PMTUDISC_PROBE = 3 +const IPV6_PMTUDISC_WANT = 1 +const IPV6_PREFER_SRC_CGA = 8 +const IPV6_PREFER_SRC_COA = 4 +const IPV6_PREFER_SRC_HOME = 1024 +const IPV6_PREFER_SRC_NONCGA = 2048 +const IPV6_PREFER_SRC_PUBLIC = 2 +const IPV6_PREFER_SRC_PUBTMP_DEFAULT = 256 +const IPV6_PREFER_SRC_TMP = 1 +const IPV6_RECVDSTOPTS = 58 +const IPV6_RECVERR = 25 +const IPV6_RECVFRAGSIZE = 77 +const IPV6_RECVHOPLIMIT = 51 +const IPV6_RECVHOPOPTS = 53 +const IPV6_RECVORIGDSTADDR = 74 +const IPV6_RECVPATHMTU = 60 +const IPV6_RECVPKTINFO = 49 +const IPV6_RECVRTHDR = 56 +const IPV6_RECVTCLASS = 66 +const IPV6_ROUTER_ALERT = 22 +const IPV6_ROUTER_ALERT_ISOLATE = 30 +const IPV6_RTHDR = 57 +const IPV6_RTHDRDSTOPTS = 55 +const IPV6_RTHDR_LOOSE = 0 +const IPV6_RTHDR_STRICT = 1 +const IPV6_RTHDR_TYPE_0 = 0 +const IPV6_RXDSTOPTS = 59 +const IPV6_RXHOPOPTS = 54 +const IPV6_TCLASS = 67 +const IPV6_TRANSPARENT = 75 +const IPV6_UNICAST_HOPS = 16 +const IPV6_UNICAST_IF = 76 +const IPV6_V6ONLY = 26 +const IPV6_XFRM_POLICY = 35 +const IP_ADD_MEMBERSHIP = 35 +const IP_ADD_SOURCE_MEMBERSHIP = 39 +const IP_BIND_ADDRESS_NO_PORT = 24 +const IP_BLOCK_SOURCE = 38 +const IP_CHECKSUM = 23 +const IP_DEFAULT_MULTICAST_LOOP = 1 +const IP_DEFAULT_MULTICAST_TTL = 1 +const IP_DROP_MEMBERSHIP = 36 +const IP_DROP_SOURCE_MEMBERSHIP = 40 +const IP_FREEBIND = 15 +const IP_HDRINCL = 3 +const IP_IPSEC_POLICY = 16 +const IP_MAX_MEMBERSHIPS = 20 +const IP_MINTTL = 21 +const IP_MSFILTER = 41 +const IP_MTU = 14 +const IP_MTU_DISCOVER = 10 +const IP_MULTICAST_ALL = 49 +const IP_MULTICAST_IF = 32 +const IP_MULTICAST_LOOP = 34 +const IP_MULTICAST_TTL = 33 +const IP_NODEFRAG = 22 +const IP_OPTIONS = 4 +const IP_ORIGDSTADDR = 20 +const IP_PASSSEC = 18 +const IP_PKTINFO = 8 +const IP_PKTOPTIONS = 9 +const IP_PMTUDISC = 10 +const IP_PMTUDISC_DO = 2 +const IP_PMTUDISC_DONT = 0 +const IP_PMTUDISC_INTERFACE = 4 +const IP_PMTUDISC_OMIT = 5 +const IP_PMTUDISC_PROBE = 3 +const IP_PMTUDISC_WANT = 1 +const IP_RECVERR = 11 +const IP_RECVERR_RFC4884 = 26 +const IP_RECVFRAGSIZE = 25 +const IP_RECVOPTS = 6 +const IP_RECVORIGDSTADDR = 20 +const IP_RECVRETOPTS = 7 +const IP_RECVTOS = 13 +const IP_RECVTTL = 12 +const IP_RETOPTS = 7 +const IP_ROUTER_ALERT = 5 +const IP_TOS = 1 +const IP_TRANSPARENT = 19 +const IP_TTL = 2 +const IP_UNBLOCK_SOURCE = 37 +const IP_UNICAST_IF = 50 +const IP_XFRM_POLICY = 17 +const IQUERY = 0 +const LOCALDOMAINPARTS = 2 +const MAXCDNAME = 255 +const MAXDFLSRCH = 3 +const MAXDNAME = 1025 +const MAXDNSRCH = 6 +const MAXLABEL = 63 +const MAXNS = 3 +const MAXRESOLVSORT = 10 +const NAMESERVER_PORT = 53 +const NOERROR = 0 +const NOTAUTH = 0 +const NOTIMP = 0 +const NOTZONE = 0 +const NS_ALG_DH = 2 +const NS_ALG_DSA = 3 +const NS_ALG_DSS = 3 +const NS_ALG_EXPIRE_ONLY = 253 +const NS_ALG_MD5RSA = 1 +const NS_ALG_PRIVATE_OID = 254 +const NS_CMPRSFLGS = 192 +const NS_DEFAULTPORT = 53 +const NS_DSA_MAX_BYTES = 405 +const NS_DSA_MIN_SIZE = 213 +const NS_DSA_SIG_SIZE = 41 +const NS_HFIXEDSZ = 12 +const NS_IN6ADDRSZ = 16 +const NS_INADDRSZ = 4 +const NS_INT16SZ = 2 +const NS_INT32SZ = 4 +const NS_INT8SZ = 1 +const NS_KEY_EXTENDED_FLAGS = 4096 +const NS_KEY_NAME_ENTITY = 512 +const NS_KEY_NAME_RESERVED = 768 +const NS_KEY_NAME_TYPE = 768 +const NS_KEY_NAME_USER = 0 +const NS_KEY_NAME_ZONE = 256 +const NS_KEY_NO_AUTH = 32768 +const NS_KEY_NO_CONF = 16384 +const NS_KEY_PROT_ANY = 255 +const NS_KEY_PROT_DNSSEC = 3 +const NS_KEY_PROT_EMAIL = 2 +const NS_KEY_PROT_IPSEC = 4 +const NS_KEY_PROT_TLS = 1 +const NS_KEY_RESERVED10 = 32 +const NS_KEY_RESERVED11 = 16 +const NS_KEY_RESERVED2 = 8192 +const NS_KEY_RESERVED4 = 2048 +const NS_KEY_RESERVED5 = 1024 +const NS_KEY_RESERVED8 = 128 +const NS_KEY_RESERVED9 = 64 +const NS_KEY_RESERVED_BITMASK = 11504 +const NS_KEY_RESERVED_BITMASK2 = 65535 +const NS_KEY_SIGNATORYMASK = 15 +const NS_KEY_TYPEMASK = 49152 +const NS_KEY_TYPE_AUTH_CONF = 0 +const NS_KEY_TYPE_AUTH_ONLY = 16384 +const NS_KEY_TYPE_CONF_ONLY = 32768 +const NS_KEY_TYPE_NO_KEY = 49152 +const NS_MAXCDNAME = 255 +const NS_MAXDNAME = 1025 +const NS_MAXLABEL = 63 +const NS_MAXMSG = 65535 +const NS_MD5RSA_MAX_BASE64 = 10928 +const NS_MD5RSA_MAX_BITS = 4096 +const NS_MD5RSA_MAX_BYTES = 8195 +const NS_MD5RSA_MAX_SIZE = 512 +const NS_MD5RSA_MIN_BITS = 512 +const NS_MD5RSA_MIN_SIZE = 64 +const NS_NOTIFY_OP = 0 +const NS_NXT_BITS = 8 +const NS_NXT_MAX = 127 +const NS_OPT_DNSSEC_OK = 32768 +const NS_OPT_NSID = 3 +const NS_PACKETSZ = 512 +const NS_QFIXEDSZ = 4 +const NS_RRFIXEDSZ = 10 +const NS_SIG_ALG = 2 +const NS_SIG_EXPIR = 8 +const NS_SIG_FOOT = 16 +const NS_SIG_LABELS = 3 +const NS_SIG_OTTL = 4 +const NS_SIG_SIGNED = 12 +const NS_SIG_SIGNER = 18 +const NS_SIG_TYPE = 0 +const NS_TSIG_ALG_HMAC_MD5 = "HMAC-MD5.SIG-ALG.REG.INT" +const NS_TSIG_ERROR_FORMERR = -12 +const NS_TSIG_ERROR_NO_SPACE = -11 +const NS_TSIG_ERROR_NO_TSIG = -10 +const NS_TSIG_FUDGE = 300 +const NS_TSIG_TCP_COUNT = 100 +const NS_UPDATE_OP = 0 +const NXDOMAIN = 0 +const NXRRSET = 0 +const PACKETSZ = 512 +const PRIX16 = "X" +const PRIX32 = "X" +const PRIX8 = "X" +const PRIXFAST16 = "X" +const PRIXFAST32 = "X" +const PRIXFAST8 = "X" +const PRIXLEAST16 = "X" +const PRIXLEAST32 = "X" +const PRIXLEAST8 = "X" +const PRId16 = "d" +const PRId32 = "d" +const PRId8 = "d" +const PRIdFAST16 = "d" +const PRIdFAST32 = "d" +const PRIdFAST8 = "d" +const PRIdLEAST16 = "d" +const PRIdLEAST32 = "d" +const PRIdLEAST8 = "d" +const PRIi16 = "i" +const PRIi32 = "i" +const PRIi8 = "i" +const PRIiFAST16 = "i" +const PRIiFAST32 = "i" +const PRIiFAST8 = "i" +const PRIiLEAST16 = "i" +const PRIiLEAST32 = "i" +const PRIiLEAST8 = "i" +const PRIo16 = "o" +const PRIo32 = "o" +const PRIo8 = "o" +const PRIoFAST16 = "o" +const PRIoFAST32 = "o" +const PRIoFAST8 = "o" +const PRIoLEAST16 = "o" +const PRIoLEAST32 = "o" +const PRIoLEAST8 = "o" +const PRIu16 = "u" +const PRIu32 = "u" +const PRIu8 = "u" +const PRIuFAST16 = "u" +const PRIuFAST32 = "u" +const PRIuFAST8 = "u" +const PRIuLEAST16 = "u" +const PRIuLEAST32 = "u" +const PRIuLEAST8 = "u" +const PRIx16 = "x" +const PRIx32 = "x" +const PRIx8 = "x" +const PRIxFAST16 = "x" +const PRIxFAST32 = "x" +const PRIxFAST8 = "x" +const PRIxLEAST16 = "x" +const PRIxLEAST32 = "x" +const PRIxLEAST8 = "x" +const PUTLONG = 0 +const PUTSHORT = 0 +const QFIXEDSZ = 4 +const QUERY = 0 +const REFUSED = 0 +const RES_AAONLY = 4 +const RES_BLAST = 131072 +const RES_DEBUG = 2 +const RES_DEFAULT = 524992 +const RES_DEFNAMES = 128 +const RES_DFLRETRY = 2 +const RES_DNSRCH = 512 +const RES_EXHAUSTIVE = 1 +const RES_F_CONN = 2 +const RES_F_EDNS0ERR = 4 +const RES_F_VC = 1 +const RES_IGNTC = 32 +const RES_INIT = 1 +const RES_INSECURE1 = 1024 +const RES_INSECURE2 = 2048 +const RES_KEEPTSIG = 65536 +const RES_MAXNDOTS = 15 +const RES_MAXRETRANS = 30 +const RES_MAXRETRY = 5 +const RES_MAXTIME = 65535 +const RES_NOALIASES = 4096 +const RES_NOCHECKNAME = 32768 +const RES_NOIP6DOTINT = 524288 +const RES_PRF_ADD = 128 +const RES_PRF_ANS = 32 +const RES_PRF_AUTH = 64 +const RES_PRF_CLASS = 4 +const RES_PRF_CMD = 8 +const RES_PRF_HEAD1 = 256 +const RES_PRF_HEAD2 = 512 +const RES_PRF_HEADX = 2048 +const RES_PRF_INIT = 16384 +const RES_PRF_QUERY = 4096 +const RES_PRF_QUES = 16 +const RES_PRF_REPLY = 8192 +const RES_PRF_STATS = 1 +const RES_PRF_TTLID = 1024 +const RES_PRF_UPDATE = 2 +const RES_PRIMARY = 16 +const RES_RECURSE = 64 +const RES_ROTATE = 16384 +const RES_SNGLKUP = 2097152 +const RES_SNGLKUPREOP = 4194304 +const RES_STAYOPEN = 256 +const RES_TIMEOUT = 5 +const RES_USEBSTRING = 262144 +const RES_USEVC = 8 +const RES_USE_DNSSEC = 8388608 +const RES_USE_EDNS0 = 1048576 +const RES_USE_INET6 = 8192 +const RRFIXEDSZ = 10 +const SCNd16 = "hd" +const SCNd32 = "d" +const SCNd8 = "hhd" +const SCNdFAST16 = "d" +const SCNdFAST32 = "d" +const SCNdFAST8 = "hhd" +const SCNdLEAST16 = "hd" +const SCNdLEAST32 = "d" +const SCNdLEAST8 = "hhd" +const SCNi16 = "hi" +const SCNi32 = "i" +const SCNi8 = "hhi" +const SCNiFAST16 = "i" +const SCNiFAST32 = "i" +const SCNiFAST8 = "hhi" +const SCNiLEAST16 = "hi" +const SCNiLEAST32 = "i" +const SCNiLEAST8 = "hhi" +const SCNo16 = "ho" +const SCNo32 = "o" +const SCNo8 = "hho" +const SCNoFAST16 = "o" +const SCNoFAST32 = "o" +const SCNoFAST8 = "hho" +const SCNoLEAST16 = "ho" +const SCNoLEAST32 = "o" +const SCNoLEAST8 = "hho" +const SCNu16 = "hu" +const SCNu32 = "u" +const SCNu8 = "hhu" +const SCNuFAST16 = "u" +const SCNuFAST32 = "u" +const SCNuFAST8 = "hhu" +const SCNuLEAST16 = "hu" +const SCNuLEAST32 = "u" +const SCNuLEAST8 = "hhu" +const SCNx16 = "hx" +const SCNx32 = "x" +const SCNx8 = "hhx" +const SCNxFAST16 = "x" +const SCNxFAST32 = "x" +const SCNxFAST8 = "hhx" +const SCNxLEAST16 = "hx" +const SCNxLEAST32 = "x" +const SCNxLEAST8 = "hhx" +const SERVFAIL = 0 +const STATUS = 0 +const S_ADDT = 0 +const S_PREREQ = 0 +const S_UPDATE = 0 +const S_ZONE = 0 +const T_A = 0 +const T_A6 = 0 +const T_AAAA = 0 +const T_AFSDB = 0 +const T_ANY = 0 +const T_ATMA = 0 +const T_AVC = 0 +const T_AXFR = 0 +const T_CAA = 0 +const T_CDNSKEY = 0 +const T_CDS = 0 +const T_CNAME = 0 +const T_CSYNC = 0 +const T_DHCID = 0 +const T_DLV = 0 +const T_DNAME = 0 +const T_DNSKEY = 0 +const T_DS = 0 +const T_EID = 0 +const T_EUI48 = 0 +const T_EUI64 = 0 +const T_GID = 0 +const T_GPOS = 0 +const T_HINFO = 0 +const T_HIP = 0 +const T_IPSECKEY = 0 +const T_ISDN = 0 +const T_IXFR = 0 +const T_KEY = 0 +const T_L32 = 0 +const T_L64 = 0 +const T_LOC = 0 +const T_LP = 0 +const T_MAILA = 0 +const T_MAILB = 0 +const T_MB = 0 +const T_MD = 0 +const T_MF = 0 +const T_MG = 0 +const T_MINFO = 0 +const T_MR = 0 +const T_MX = 0 +const T_NAPTR = 0 +const T_NID = 0 +const T_NIMLOC = 0 +const T_NINFO = 0 +const T_NS = 0 +const T_NSAP = 0 +const T_NSAP_PTR = 0 +const T_NSEC = 0 +const T_NSEC3 = 0 +const T_NSEC3PARAM = 0 +const T_NULL = 0 +const T_NXT = 0 +const T_OPENPGPKEY = 0 +const T_PTR = 0 +const T_PX = 0 +const T_RKEY = 0 +const T_RP = 0 +const T_RRSIG = 0 +const T_RT = 0 +const T_SIG = 0 +const T_SMIMEA = 0 +const T_SOA = 0 +const T_SPF = 0 +const T_SRV = 0 +const T_SSHFP = 0 +const T_TA = 0 +const T_TALINK = 0 +const T_TKEY = 0 +const T_TLSA = 0 +const T_TSIG = 0 +const T_TXT = 0 +const T_UID = 0 +const T_UINFO = 0 +const T_UNSPEC = 0 +const T_URI = 0 +const T_WKS = 0 +const T_X25 = 0 +const YXDOMAIN = 0 +const YXRRSET = 0 +const _PATH_RESCONF = "/etc/resolv.conf" +const __BIND = 19950621 +const __NAMESER = 19991006 +const __PRI64 = "ll" +const __PRIPTR = "" +const __RES = 19960801 +const __UAPI_DEF_IN6_ADDR = 0 +const __UAPI_DEF_IN6_ADDR_ALT = 0 +const __UAPI_DEF_IN6_PKTINFO = 0 +const __UAPI_DEF_IN_ADDR = 0 +const __UAPI_DEF_IN_CLASS = 0 +const __UAPI_DEF_IN_IPPROTO = 0 +const __UAPI_DEF_IN_PKTINFO = 0 +const __UAPI_DEF_IP6_MTUINFO = 0 +const __UAPI_DEF_IPPROTO_V6 = 0 +const __UAPI_DEF_IPV6_MREQ = 0 +const __UAPI_DEF_IPV6_OPTIONS = 0 +const __UAPI_DEF_IP_MREQ = 0 +const __UAPI_DEF_SOCKADDR_IN = 0 +const __UAPI_DEF_SOCKADDR_IN6 = 0 +const _res = 0 + +type Tns_sect = int32 + +type ___ns_sect = int32 + +const _ns_s_qd = 0 +const _ns_s_zn = 0 +const _ns_s_an = 1 +const _ns_s_pr = 1 +const _ns_s_ns = 2 +const _ns_s_ud = 2 +const _ns_s_ar = 3 +const _ns_s_max = 4 + +type Tns_msg = struct { + F_msg uintptr + F_eom uintptr + F_id Tuint16_t + F_flags Tuint16_t + F_counts [4]Tuint16_t + F_sections [4]uintptr + F_sect Tns_sect + F_rrnum int32 + F_msg_ptr uintptr +} + +type t__ns_msg = Tns_msg + +type T_ns_flagdata = struct { + Fmask int32 + Fshift int32 +} + +type Tns_rr = struct { + Fname [1025]int8 + Ftype1 Tuint16_t + Frr_class Tuint16_t + Fttl Tuint32_t + Frdlength Tuint16_t + Frdata uintptr +} + +type t__ns_rr = Tns_rr + +type Tns_flag = int32 + +type ___ns_flag = int32 + +const _ns_f_qr = 0 +const _ns_f_opcode = 1 +const _ns_f_aa = 2 +const _ns_f_tc = 3 +const _ns_f_rd = 4 +const _ns_f_ra = 5 +const _ns_f_z = 6 +const _ns_f_ad = 7 +const _ns_f_cd = 8 +const _ns_f_rcode = 9 +const _ns_f_max = 10 + +type Tns_opcode = int32 + +type ___ns_opcode = int32 + +const _ns_o_query = 0 +const _ns_o_iquery = 1 +const _ns_o_status = 2 +const _ns_o_notify = 4 +const _ns_o_update = 5 +const _ns_o_max = 6 + +type Tns_rcode = int32 + +type ___ns_rcode = int32 + +const _ns_r_noerror = 0 +const _ns_r_formerr = 1 +const _ns_r_servfail = 2 +const _ns_r_nxdomain = 3 +const _ns_r_notimpl = 4 +const _ns_r_refused = 5 +const _ns_r_yxdomain = 6 +const _ns_r_yxrrset = 7 +const _ns_r_nxrrset = 8 +const _ns_r_notauth = 9 +const _ns_r_notzone = 10 +const _ns_r_max = 11 +const _ns_r_badvers = 16 +const _ns_r_badsig = 16 +const _ns_r_badkey = 17 +const _ns_r_badtime = 18 + +type Tns_update_operation = int32 + +type ___ns_update_operation = int32 + +const _ns_uop_delete = 0 +const _ns_uop_add = 1 +const _ns_uop_max = 2 + +type Tns_tsig_key1 = struct { + Fname [1025]int8 + Falg [1025]int8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tsig_key = struct { + Fname [1025]int8 + Falg [1025]int8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tcp_tsig_state1 = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_tcp_tsig_state = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_type = int32 + +type ___ns_type = int32 + +const _ns_t_invalid = 0 +const _ns_t_a = 1 +const _ns_t_ns = 2 +const _ns_t_md = 3 +const _ns_t_mf = 4 +const _ns_t_cname = 5 +const _ns_t_soa = 6 +const _ns_t_mb = 7 +const _ns_t_mg = 8 +const _ns_t_mr = 9 +const _ns_t_null = 10 +const _ns_t_wks = 11 +const _ns_t_ptr = 12 +const _ns_t_hinfo = 13 +const _ns_t_minfo = 14 +const _ns_t_mx = 15 +const _ns_t_txt = 16 +const _ns_t_rp = 17 +const _ns_t_afsdb = 18 +const _ns_t_x25 = 19 +const _ns_t_isdn = 20 +const _ns_t_rt = 21 +const _ns_t_nsap = 22 +const _ns_t_nsap_ptr = 23 +const _ns_t_sig = 24 +const _ns_t_key = 25 +const _ns_t_px = 26 +const _ns_t_gpos = 27 +const _ns_t_aaaa = 28 +const _ns_t_loc = 29 +const _ns_t_nxt = 30 +const _ns_t_eid = 31 +const _ns_t_nimloc = 32 +const _ns_t_srv = 33 +const _ns_t_atma = 34 +const _ns_t_naptr = 35 +const _ns_t_kx = 36 +const _ns_t_cert = 37 +const _ns_t_a6 = 38 +const _ns_t_dname = 39 +const _ns_t_sink = 40 +const _ns_t_opt = 41 +const _ns_t_apl = 42 +const _ns_t_ds = 43 +const _ns_t_sshfp = 44 +const _ns_t_ipseckey = 45 +const _ns_t_rrsig = 46 +const _ns_t_nsec = 47 +const _ns_t_dnskey = 48 +const _ns_t_dhcid = 49 +const _ns_t_nsec3 = 50 +const _ns_t_nsec3param = 51 +const _ns_t_tlsa = 52 +const _ns_t_smimea = 53 +const _ns_t_hip = 55 +const _ns_t_ninfo = 56 +const _ns_t_rkey = 57 +const _ns_t_talink = 58 +const _ns_t_cds = 59 +const _ns_t_cdnskey = 60 +const _ns_t_openpgpkey = 61 +const _ns_t_csync = 62 +const _ns_t_spf = 99 +const _ns_t_uinfo = 100 +const _ns_t_uid = 101 +const _ns_t_gid = 102 +const _ns_t_unspec = 103 +const _ns_t_nid = 104 +const _ns_t_l32 = 105 +const _ns_t_l64 = 106 +const _ns_t_lp = 107 +const _ns_t_eui48 = 108 +const _ns_t_eui64 = 109 +const _ns_t_tkey = 249 +const _ns_t_tsig = 250 +const _ns_t_ixfr = 251 +const _ns_t_axfr = 252 +const _ns_t_mailb = 253 +const _ns_t_maila = 254 +const _ns_t_any = 255 +const _ns_t_zxfr = 256 +const _ns_t_uri = 256 +const _ns_t_caa = 257 +const _ns_t_avc = 258 +const _ns_t_ta = 32768 +const _ns_t_dlv = 32769 +const _ns_t_max = 65536 + +type Tns_class = int32 + +type ___ns_class = int32 + +const _ns_c_invalid = 0 +const _ns_c_in = 1 +const _ns_c_2 = 2 +const _ns_c_chaos = 3 +const _ns_c_hs = 4 +const _ns_c_none = 254 +const _ns_c_any = 255 +const _ns_c_max = 65536 + +type Tns_key_types = int32 + +type ___ns_key_types = int32 + +const _ns_kt_rsa = 1 +const _ns_kt_dh = 2 +const _ns_kt_dsa = 3 +const _ns_kt_private = 254 + +type Tns_cert_types = int32 + +type ___ns_cert_types = int32 + +const _cert_t_pkix = 1 +const _cert_t_spki = 2 +const _cert_t_pgp = 3 +const _cert_t_url = 253 +const _cert_t_oid = 254 + +type THEADER = struct { + F__ccgo0 uint32 + F__ccgo4 uint32 + F__ccgo8 uint32 +} + +type Timaxdiv_t = struct { + Fquot Tintmax_t + Frem Tintmax_t +} + +type Tin_port_t = uint16 + +type Tin_addr_t = uint32 + +type Tin_addr = struct { + Fs_addr Tin_addr_t +} + +type Tsockaddr_in = struct { + Fsin_family Tsa_family_t + Fsin_port Tin_port_t + Fsin_addr Tin_addr + Fsin_zero [8]Tuint8_t +} + +type Tin6_addr = struct { + F__in6_union struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + } +} + +type Tsockaddr_in6 = struct { + Fsin6_family Tsa_family_t + Fsin6_port Tin_port_t + Fsin6_flowinfo Tuint32_t + Fsin6_addr Tin6_addr + Fsin6_scope_id Tuint32_t +} + +type Tipv6_mreq = struct { + Fipv6mr_multiaddr Tin6_addr + Fipv6mr_interface uint32 +} + +type Tip_opts = struct { + Fip_dst Tin_addr + Fip_opts [40]int8 +} + +type Tres_state = uintptr + +type t__res_state = struct { + Fretrans int32 + Fretry int32 + Foptions uint32 + Fnscount int32 + Fnsaddr_list [3]Tsockaddr_in + Fid uint16 + Fdnsrch [7]uintptr + Fdefdname [256]int8 + Fpfcode uint32 + F__ccgo356 uint32 + Fsort_list [10]struct { + Faddr Tin_addr + Fmask Tuint32_t + } + Fqhook uintptr + Frhook uintptr + Fres_h_errno int32 + F_vcsock int32 + F_flags uint32 + F_u struct { + F_ext [0]struct { + Fnscount Tuint16_t + Fnsmap [3]Tuint16_t + Fnssocks [3]int32 + Fnscount6 Tuint16_t + Fnsinit Tuint16_t + Fnsaddrs [3]uintptr + F_initstamp [2]uint32 + } + Fpad [52]int8 + } +} + +type Tres_sym = struct { + Fnumber int32 + Fname uintptr + Fhumanname uintptr +} + +/* RFC 1035 message compression */ + +// C documentation +// +// /* label start offsets of a compressed domain name s */ +func _getoffs(tls *TLS, offs uintptr, base uintptr, s uintptr) (r int32) { + var i, v2 int32 + _, _ = i, v2 + i = 0 + for { + for int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != 0 { + if int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != int32(0xc0) { + return 0 + } + s = base + uintptr(int32(*(*uint8)(unsafe.Pointer(s)))&Int32FromInt32(0x3f)<= int32(0x4000) { + return 0 + } + v2 = i + i++ + *(*int16)(unsafe.Pointer(offs + uintptr(v2)*2)) = int16(int32(s) - int32(base)) + s += uintptr(int32(*(*uint8)(unsafe.Pointer(s))) + int32(1)) + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* label lengths of an ascii domain name s */ +func _getlens(tls *TLS, lens uintptr, s uintptr, l int32) (r int32) { + var i, j, k, v3, v4 int32 + _, _, _, _, _ = i, j, k, v3, v4 + i = 0 + j = 0 + k = 0 + for { + for { + if !(j < l && int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-k)-uint32(1) > uint32(62) { + return 0 + } + v3 = i + i++ + *(*uint8)(unsafe.Pointer(lens + uintptr(v3))) = uint8(j - k) + if j == l { + return i + } + j++ + v4 = j + k = v4 + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* longest suffix match of an ascii domain with a compressed domain name dn */ +func _match(tls *TLS, offset uintptr, base uintptr, dn uintptr, end uintptr, lens uintptr, nlen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var l, m, noff, o, v2, v3 int32 + var _ /* offs at bp+0 */ [128]int16 + _, _, _, _, _, _ = l, m, noff, o, v2, v3 + m = 0 + noff = _getoffs(tls, bp, base, dn) + if !(noff != 0) { + return 0 + } + for { + nlen-- + v2 = nlen + l = int32(*(*uint8)(unsafe.Pointer(lens + uintptr(v2)))) + noff-- + v3 = noff + o = int32((*(*[128]int16)(unsafe.Pointer(bp)))[v3]) + end -= uintptr(l) + if l != int32(*(*uint8)(unsafe.Pointer(base + uintptr(o)))) || Xmemcmp(tls, base+uintptr(o)+uintptr(1), end, uint32(l)) != 0 { + return m + } + *(*int32)(unsafe.Pointer(offset)) = o + m += l + if nlen != 0 { + m++ + } + if !(nlen != 0) || !(noff != 0) { + return m + } + end-- + goto _1 + _1: + } + return r +} + +func Xdn_comp(tls *TLS, src uintptr, dst uintptr, space int32, dnptrs uintptr, lastdnptr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v src=%v dst=%v space=%v dnptrs=%v lastdnptr=%v, (%v:)", tls, src, dst, space, dnptrs, lastdnptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var bestlen, bestoff, i, j, m, n, v3, v4, v5, v6, v7 int32 + var end, p, v8 uintptr + var l Tsize_t + var _ /* lens at bp+4 */ [127]uint8 + var _ /* offset at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bestlen, bestoff, end, i, j, l, m, n, p, v3, v4, v5, v6, v7, v8 + m = 0 + bestlen = 0 + l = Xstrnlen(tls, src, uint32(255)) + if l != 0 && int32(*(*int8)(unsafe.Pointer(src + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if l > uint32(253) || space <= 0 { + return -int32(1) + } + if !(l != 0) { + *(*uint8)(unsafe.Pointer(dst)) = uint8(0) + return int32(1) + } + end = src + uintptr(l) + n = _getlens(tls, bp+4, src, int32(l)) + if !(n != 0) { + return -int32(1) + } + p = dnptrs + if p != 0 && *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 4 + for { + if !(*(*uintptr)(unsafe.Pointer(p)) != 0) { + break + } + m = _match(tls, bp, *(*uintptr)(unsafe.Pointer(dnptrs)), *(*uintptr)(unsafe.Pointer(p)), end, bp+4, n) + if m > bestlen { + bestlen = m + bestoff = *(*int32)(unsafe.Pointer(bp)) + if uint32(m) == l { + break + } + } + goto _1 + _1: + ; + p += 4 + } + } + /* encode unmatched part */ + if uint32(space) < l-uint32(bestlen)+uint32(2)+BoolUint32(uint32(bestlen-Int32FromInt32(1)) < l-Uint32FromInt32(1)) { + return -int32(1) + } + Xmemcpy(tls, dst+uintptr(1), src, l-uint32(bestlen)) + v3 = Int32FromInt32(0) + j = v3 + i = v3 + for { + if !(uint32(i) < l-uint32(bestlen)) { + break + } + *(*uint8)(unsafe.Pointer(dst + uintptr(i))) = (*(*[127]uint8)(unsafe.Pointer(bp + 4)))[j] + goto _2 + _2: + ; + v4 = j + j++ + i += int32((*(*[127]uint8)(unsafe.Pointer(bp + 4)))[v4]) + int32(1) + } + /* add tail */ + if bestlen != 0 { + v5 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v5))) = uint8(int32(0xc0) | bestoff>>int32(8)) + v6 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v6))) = uint8(bestoff) + } else { + v7 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v7))) = uint8(0) + } + /* save dst pointer */ + if i > int32(2) && lastdnptr != 0 && dnptrs != 0 && *(*uintptr)(unsafe.Pointer(dnptrs)) != 0 { + for *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 4 + } + if p+uintptr(1)*4 < lastdnptr { + v8 = p + p += 4 + *(*uintptr)(unsafe.Pointer(v8)) = dst + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + } + return i +} + +func X__dn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dbegin, dend, p, v3, v4, v6, v7 uintptr + var i, j, len1, v1, v5 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = dbegin, dend, i, j, len1, p, v1, v3, v4, v5, v6, v7 + p = src + dbegin = dest + len1 = -int32(1) + if p == end || space <= 0 { + return -int32(1) + } + if space > int32(254) { + v1 = int32(254) + } else { + v1 = space + } + dend = dest + uintptr(v1) + /* detect reference loop using an iteration counter */ + i = 0 + for { + if !(i < int32(end)-int32(base)) { + break + } + /* loop invariants: p= int32(end)-int32(base) { + return -int32(1) + } + p = base + uintptr(j) + } else { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + if dest != dbegin { + v3 = dest + dest++ + *(*int8)(unsafe.Pointer(v3)) = int8('.') + } + v4 = p + p++ + j = int32(*(*uint8)(unsafe.Pointer(v4))) + if j >= int32(end)-int32(p) || j >= int32(dend)-int32(dest) { + return -int32(1) + } + for { + v5 = j + j-- + if !(v5 != 0) { + break + } + v6 = dest + dest++ + v7 = p + p++ + *(*int8)(unsafe.Pointer(v6)) = int8(*(*uint8)(unsafe.Pointer(v7))) + } + } else { + *(*int8)(unsafe.Pointer(dest)) = 0 + if len1 < 0 { + len1 = int32(p+uintptr(1)) - int32(src) + } + return len1 + } + } + goto _2 + _2: + ; + i += int32(2) + } + return -int32(1) +} + +func Xdn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dn_expand(tls, base, end, src, dest, space) +} + +func Xdn_skipname(tls *TLS, s uintptr, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v end=%v, (%v:)", tls, s, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = s + for p < end { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + return int32(p) - int32(s) + int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) >= int32(192) { + if p+uintptr(1) < end { + return int32(p) - int32(s) + int32(2) + } else { + break + } + } else { + if int32(end)-int32(p) < int32(*(*uint8)(unsafe.Pointer(p)))+int32(1) { + break + } else { + p += uintptr(int32(*(*uint8)(unsafe.Pointer(p))) + int32(1)) + } + } + } + } + return -int32(1) +} + +const AI_ADDRCONFIG = 32 +const AI_ALL = 16 +const AI_CANONNAME = 2 +const AI_NUMERICHOST = 4 +const AI_NUMERICSERV = 1024 +const AI_PASSIVE = 1 +const AI_V4MAPPED = 8 +const EAI_AGAIN = -3 +const EAI_BADFLAGS = -1 +const EAI_FAIL = -4 +const EAI_FAMILY = -6 +const EAI_MEMORY = -10 +const EAI_NODATA = -5 +const EAI_NONAME = -2 +const EAI_OVERFLOW = -12 +const EAI_SERVICE = -8 +const EAI_SOCKTYPE = -7 +const EAI_SYSTEM = -11 +const MAXADDRS = 48 +const MAXSERVS = 2 +const NI_DGRAM = 16 +const NI_NAMEREQD = 8 +const NI_NOFQDN = 4 +const NI_NUMERICHOST = 1 +const NI_NUMERICSCOPE = 256 +const NI_NUMERICSERV = 2 + +type Taddrinfo = struct { + Fai_flags int32 + Fai_family int32 + Fai_socktype int32 + Fai_protocol int32 + Fai_addrlen Tsocklen_t + Fai_addr uintptr + Fai_canonname uintptr + Fai_next uintptr +} + +type Tnetent = struct { + Fn_name uintptr + Fn_aliases uintptr + Fn_addrtype int32 + Fn_net Tuint32_t +} + +type Thostent = struct { + Fh_name uintptr + Fh_aliases uintptr + Fh_addrtype int32 + Fh_length int32 + Fh_addr_list uintptr +} + +type Tservent = struct { + Fs_name uintptr + Fs_aliases uintptr + Fs_port int32 + Fs_proto uintptr +} + +type Tprotoent = struct { + Fp_name uintptr + Fp_aliases uintptr + Fp_proto int32 +} + +type Taibuf = struct { + Fai Taddrinfo + Fsa Tsa + Flock [1]int32 + Fslot int16 + Fref int16 +} + +type Taddress = struct { + Ffamily int32 + Fscopeid uint32 + Faddr [16]Tuint8_t + Fsortkey int32 +} + +type Tservice = struct { + Fport Tuint16_t + Fproto uint8 + Fsocktype uint8 +} + +type Tresolvconf = struct { + Fns [3]Taddress + Fnns uint32 + Fattempts uint32 + Fndots uint32 + Ftimeout uint32 +} + +func X__dns_parse(tls *TLS, r uintptr, rlen int32, callback uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v rlen=%v callback=%v ctx=%v, (%v:)", tls, r, rlen, callback, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ancount, len1, qdcount, v1, v2 int32 + var p uintptr + _, _, _, _, _, _ = ancount, len1, p, qdcount, v1, v2 + if rlen < int32(12) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(r + 3)))&int32(15) != 0 { + return 0 + } + p = r + uintptr(12) + qdcount = int32(*(*uint8)(unsafe.Pointer(r + 4)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 5))) + ancount = int32(*(*uint8)(unsafe.Pointer(r + 6)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 7))) + for { + v1 = qdcount + qdcount-- + if !(v1 != 0) { + break + } + for int32(p)-int32(r) < rlen && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(6) { + return -int32(1) + } + p += uintptr(int32(5) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + } + for { + v2 = ancount + ancount-- + if !(v2 != 0) { + break + } + for int32(p)-int32(r) < rlen && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(12) { + return -int32(1) + } + p += uintptr(int32(1) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + len1 = int32(*(*uint8)(unsafe.Pointer(p + 8)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(p + 9))) + if len1+int32(10) > int32(r+uintptr(rlen))-int32(p) { + return -int32(1) + } + if (*(*func(*TLS, uintptr, int32, uintptr, int32, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{callback})))(tls, ctx, int32(*(*uint8)(unsafe.Pointer(p + 1))), p+uintptr(10), len1, r, rlen) < 0 { + return -int32(1) + } + p += uintptr(int32(10) + len1) + } + return 0 +} + +type Tsa = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte +} + +func Xsethostent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } +} + +func Xgethostent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xendhostent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendnetent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendhostent(tls) +} + +func Xsetnetent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } + Xsethostent(tls, x) +} + +const ARPD_FLUSH = 3 +const ARPD_LOOKUP = 2 +const ARPD_UPDATE = 1 +const ARPHRD_6LOWPAN = 825 +const ARPHRD_ADAPT = 264 +const ARPHRD_APPLETLK = 8 +const ARPHRD_ARCNET = 7 +const ARPHRD_ASH = 781 +const ARPHRD_ATM = 19 +const ARPHRD_AX25 = 3 +const ARPHRD_BIF = 775 +const ARPHRD_CAIF = 822 +const ARPHRD_CAN = 280 +const ARPHRD_CHAOS = 5 +const ARPHRD_CISCO = 513 +const ARPHRD_CSLIP = 257 +const ARPHRD_CSLIP6 = 259 +const ARPHRD_DDCMP = 517 +const ARPHRD_DLCI = 15 +const ARPHRD_ECONET = 782 +const ARPHRD_EETHER = 2 +const ARPHRD_ETHER = 1 +const ARPHRD_EUI64 = 27 +const ARPHRD_FCAL = 785 +const ARPHRD_FCFABRIC = 787 +const ARPHRD_FCPL = 786 +const ARPHRD_FCPP = 784 +const ARPHRD_FDDI = 774 +const ARPHRD_FRAD = 770 +const ARPHRD_HDLC = 513 +const ARPHRD_HIPPI = 780 +const ARPHRD_HWX25 = 272 +const ARPHRD_IEEE1394 = 24 +const ARPHRD_IEEE802 = 6 +const ARPHRD_IEEE80211 = 801 +const ARPHRD_IEEE80211_PRISM = 802 +const ARPHRD_IEEE80211_RADIOTAP = 803 +const ARPHRD_IEEE802154 = 804 +const ARPHRD_IEEE802154_MONITOR = 805 +const ARPHRD_IEEE802_TR = 800 +const ARPHRD_INFINIBAND = 32 +const ARPHRD_IP6GRE = 823 +const ARPHRD_IPDDP = 777 +const ARPHRD_IPGRE = 778 +const ARPHRD_IRDA = 783 +const ARPHRD_LAPB = 516 +const ARPHRD_LOCALTLK = 773 +const ARPHRD_LOOPBACK = 772 +const ARPHRD_METRICOM = 23 +const ARPHRD_NETLINK = 824 +const ARPHRD_NETROM = 0 +const ARPHRD_NONE = 65534 +const ARPHRD_PHONET = 820 +const ARPHRD_PHONET_PIPE = 821 +const ARPHRD_PIMREG = 779 +const ARPHRD_PPP = 512 +const ARPHRD_PRONET = 4 +const ARPHRD_RAWHDLC = 518 +const ARPHRD_RAWIP = 519 +const ARPHRD_ROSE = 270 +const ARPHRD_RSRVD = 260 +const ARPHRD_SIT = 776 +const ARPHRD_SKIP = 771 +const ARPHRD_SLIP = 256 +const ARPHRD_SLIP6 = 258 +const ARPHRD_TUNNEL = 768 +const ARPHRD_TUNNEL6 = 769 +const ARPHRD_VOID = 65535 +const ARPHRD_VSOCKMON = 826 +const ARPHRD_X25 = 271 +const ARPOP_InREPLY = 9 +const ARPOP_InREQUEST = 8 +const ARPOP_NAK = 10 +const ARPOP_REPLY = 2 +const ARPOP_REQUEST = 1 +const ARPOP_RREPLY = 4 +const ARPOP_RREQUEST = 3 +const ATF_COM = 2 +const ATF_DONTPUB = 64 +const ATF_MAGIC = 128 +const ATF_NETMASK = 32 +const ATF_PERM = 4 +const ATF_PUBL = 8 +const ATF_USETRAILERS = 16 +const ETHERMIN = 46 +const ETHERMTU = 1500 +const ETHERTYPE_AARP = 33011 +const ETHERTYPE_ARP = 2054 +const ETHERTYPE_AT = 32923 +const ETHERTYPE_IP = 2048 +const ETHERTYPE_IPV6 = 34525 +const ETHERTYPE_IPX = 33079 +const ETHERTYPE_LOOPBACK = 36864 +const ETHERTYPE_NTRAILER = 16 +const ETHERTYPE_PUP = 512 +const ETHERTYPE_REVARP = 32821 +const ETHERTYPE_SPRITE = 1280 +const ETHERTYPE_TRAIL = 4096 +const ETHERTYPE_VLAN = 33024 +const ETHER_ADDR_LEN = 6 +const ETHER_CRC_LEN = 4 +const ETHER_HDR_LEN = 14 +const ETHER_MAX_LEN = 1518 +const ETHER_MIN_LEN = 64 +const ETHER_TYPE_LEN = 2 +const ETH_ALEN = 6 +const ETH_DATA_LEN = 1500 +const ETH_FCS_LEN = 4 +const ETH_FRAME_LEN = 1514 +const ETH_HLEN = 14 +const ETH_MAX_MTU = 65535 +const ETH_MIN_MTU = 68 +const ETH_P_1588 = 35063 +const ETH_P_8021AD = 34984 +const ETH_P_8021AH = 35047 +const ETH_P_8021Q = 33024 +const ETH_P_80221 = 35095 +const ETH_P_802_2 = 4 +const ETH_P_802_3 = 1 +const ETH_P_802_3_MIN = 1536 +const ETH_P_802_EX1 = 34997 +const ETH_P_AARP = 33011 +const ETH_P_AF_IUCV = 64507 +const ETH_P_ALL = 3 +const ETH_P_AOE = 34978 +const ETH_P_ARCNET = 26 +const ETH_P_ARP = 2054 +const ETH_P_ATALK = 32923 +const ETH_P_ATMFATE = 34948 +const ETH_P_ATMMPOA = 34892 +const ETH_P_AX25 = 2 +const ETH_P_BATMAN = 17157 +const ETH_P_BPQ = 2303 +const ETH_P_CAIF = 247 +const ETH_P_CAN = 12 +const ETH_P_CANFD = 13 +const ETH_P_CFM = 35074 +const ETH_P_CONTROL = 22 +const ETH_P_CUST = 24582 +const ETH_P_DDCMP = 6 +const ETH_P_DEC = 24576 +const ETH_P_DIAG = 24581 +const ETH_P_DNA_DL = 24577 +const ETH_P_DNA_RC = 24578 +const ETH_P_DNA_RT = 24579 +const ETH_P_DSA = 27 +const ETH_P_DSA_8021Q = 56027 +const ETH_P_ECONET = 24 +const ETH_P_EDSA = 56026 +const ETH_P_ERSPAN = 35006 +const ETH_P_ERSPAN2 = 8939 +const ETH_P_FCOE = 35078 +const ETH_P_FIP = 35092 +const ETH_P_HDLC = 25 +const ETH_P_HSR = 35119 +const ETH_P_IBOE = 35093 +const ETH_P_IEEE802154 = 246 +const ETH_P_IEEEPUP = 2560 +const ETH_P_IEEEPUPAT = 2561 +const ETH_P_IFE = 60734 +const ETH_P_IP = 2048 +const ETH_P_IPV6 = 34525 +const ETH_P_IPX = 33079 +const ETH_P_IRDA = 23 +const ETH_P_LAT = 24580 +const ETH_P_LINK_CTL = 34924 +const ETH_P_LLDP = 35020 +const ETH_P_LOCALTALK = 9 +const ETH_P_LOOP = 96 +const ETH_P_LOOPBACK = 36864 +const ETH_P_MACSEC = 35045 +const ETH_P_MAP = 249 +const ETH_P_MOBITEX = 21 +const ETH_P_MPLS_MC = 34888 +const ETH_P_MPLS_UC = 34887 +const ETH_P_MRP = 35043 +const ETH_P_MVRP = 35061 +const ETH_P_NCSI = 35064 +const ETH_P_NSH = 35151 +const ETH_P_PAE = 34958 +const ETH_P_PAUSE = 34824 +const ETH_P_PHONET = 245 +const ETH_P_PPPTALK = 16 +const ETH_P_PPP_DISC = 34915 +const ETH_P_PPP_MP = 8 +const ETH_P_PPP_SES = 34916 +const ETH_P_PREAUTH = 35015 +const ETH_P_PRP = 35067 +const ETH_P_PUP = 512 +const ETH_P_PUPAT = 513 +const ETH_P_QINQ1 = 37120 +const ETH_P_QINQ2 = 37376 +const ETH_P_QINQ3 = 37632 +const ETH_P_RARP = 32821 +const ETH_P_SCA = 24583 +const ETH_P_SLOW = 34825 +const ETH_P_SNAP = 5 +const ETH_P_TDLS = 35085 +const ETH_P_TEB = 25944 +const ETH_P_TIPC = 35018 +const ETH_P_TRAILER = 28 +const ETH_P_TR_802_2 = 17 +const ETH_P_TSN = 8944 +const ETH_P_WAN_PPP = 7 +const ETH_P_WCCP = 34878 +const ETH_P_X25 = 2053 +const ETH_P_XDSA = 248 +const ETH_TLEN = 2 +const ETH_ZLEN = 60 +const MAX_ADDR_LEN = 7 +const __UAPI_DEF_ETHHDR = 0 + +type Tethhdr = struct { + Fh_dest [6]Tuint8_t + Fh_source [6]Tuint8_t + Fh_proto Tuint16_t +} + +type Tether_addr = struct { + Fether_addr_octet [6]Tuint8_t +} + +type Tether_header = struct { + Fether_dhost [6]Tuint8_t + Fether_shost [6]Tuint8_t + Fether_type Tuint16_t +} + +type Tarphdr = struct { + Far_hrd Tuint16_t + Far_pro Tuint16_t + Far_hln Tuint8_t + Far_pln Tuint8_t + Far_op Tuint16_t +} + +type Tarpreq = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr + Farp_dev [16]int8 +} + +type Tarpreq_old = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr +} + +type Tarpd_request = struct { + Freq uint16 + Fip Tuint32_t + Fdev uint32 + Fstamp uint32 + Fupdated uint32 + Fha [7]uint8 +} + +type Tether_arp = struct { + Fea_hdr Tarphdr + Farp_sha [6]Tuint8_t + Farp_spa [4]Tuint8_t + Farp_tha [6]Tuint8_t + Farp_tpa [4]Tuint8_t +} + +func Xether_aton_r(tls *TLS, x uintptr, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v p_a=%v, (%v:)", tls, x, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var n uint32 + var _ /* a at bp+0 */ Tether_addr + var _ /* y at bp+8 */ uintptr + _, _ = ii, n + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii != 0 { + if int32(*(*int8)(unsafe.Pointer(x))) != int32(':') { + return uintptr(0) + } else { + x++ + } + } + n = Xstrtoul(tls, x, bp+8, int32(16)) + x = *(*uintptr)(unsafe.Pointer(bp + 8)) + if n > uint32(0xFF) { + return uintptr(0) + } /* bad byte */ + *(*Tuint8_t)(unsafe.Pointer(bp + uintptr(ii))) = uint8(n) + goto _1 + _1: + ; + ii++ + } + if int32(*(*int8)(unsafe.Pointer(x))) != 0 { + return uintptr(0) + } /* bad format */ + *(*Tether_addr)(unsafe.Pointer(p_a)) = *(*Tether_addr)(unsafe.Pointer(bp)) + return p_a +} + +func Xether_aton(tls *TLS, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_aton_r(tls, x, uintptr(unsafe.Pointer(&_a))) +} + +var _a Tether_addr + +func Xether_ntoa_r(tls *TLS, p_a uintptr, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v x=%v, (%v:)", tls, p_a, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var y, v2 uintptr + _, _, _ = ii, y, v2 + y = x + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii == 0 { + v2 = __ccgo_ts + 886 + } else { + v2 = __ccgo_ts + 891 + } + x += uintptr(Xsprintf(tls, x, v2, VaList(bp+8, int32(*(*Tuint8_t)(unsafe.Pointer(p_a + uintptr(ii))))))) + goto _1 + _1: + ; + ii++ + } + return y +} + +func Xether_ntoa(tls *TLS, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v, (%v:)", tls, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_ntoa_r(tls, p_a, uintptr(unsafe.Pointer(&_x))) +} + +var _x [18]int8 + +func Xether_line(tls *TLS, l uintptr, e uintptr, hostname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v l=%v e=%v hostname=%v, (%v:)", tls, l, e, hostname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_ntohost(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_hostton(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xfreeaddrinfo(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + var b, p2 uintptr + var cnt Tsize_t + _, _, _ = b, cnt, p2 + cnt = uint32(1) + for { + if !((*Taddrinfo)(unsafe.Pointer(p)).Fai_next != 0) { + break + } + goto _1 + _1: + ; + cnt++ + p = (*Taddrinfo)(unsafe.Pointer(p)).Fai_next + } + b = p - uintptr(uint32(UintptrFromInt32(0))) + b -= uintptr((*Taibuf)(unsafe.Pointer(b)).Fslot) * 68 + ___lock(tls, b+60) + p2 = b + 66 + *(*int16)(unsafe.Pointer(p2)) = int16(uint32(*(*int16)(unsafe.Pointer(p2))) - cnt) + if !(*(*int16)(unsafe.Pointer(p2)) != 0) { + Xfree(tls, b) + } else { + ___unlock(tls, b+60) + } +} + +var _msgs = [252]int8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'f', 'l', 'a', 'g', 's', 0, 'N', 'a', 'm', 'e', ' ', 'd', 'o', 'e', 's', ' ', 'n', 'o', 't', ' ', 'r', 'e', 's', 'o', 'l', 'v', 'e', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'a', 'm', 'e', ' ', 'h', 'a', 's', ' ', 'n', 'o', ' ', 'u', 's', 'a', 'b', 'l', 'e', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'o', 'r', ' ', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'l', 'e', 'n', 'g', 't', 'h', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'S', 'y', 's', 't', 'e', 'm', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xgai_strerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs)) + ecode++ + for { + if !(ecode != 0 && *(*int8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode++ + s++ + } + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1616) + defer tls.Free(1616) + var canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, proto, r, s, saved_errno, socktype, v3 int32 + var out, outcanon uintptr + var ta [2]uintptr + var tf [2]int32 + var tl [2]Tsocklen_t + var v5 uint32 + var _ /* addrs at bp+8 */ [48]Taddress + var _ /* canon at bp+1352 */ [256]int8 + var _ /* cs at bp+1608 */ int32 + var _ /* ports at bp+0 */ [2]Tservice + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, out, outcanon, proto, r, s, saved_errno, socktype, ta, tf, tl, v3, v5 + family = PF_UNSPEC + flags = 0 + proto = 0 + socktype = 0 + no_family = 0 + if !(host != 0) && !(serv != 0) { + return -int32(2) + } + if hint != 0 { + family = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_family + flags = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_flags + proto = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_protocol + socktype = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_socktype + mask = Int32FromInt32(AI_PASSIVE) | Int32FromInt32(AI_CANONNAME) | Int32FromInt32(AI_NUMERICHOST) | Int32FromInt32(AI_V4MAPPED) | Int32FromInt32(AI_ALL) | Int32FromInt32(AI_ADDRCONFIG) | Int32FromInt32(AI_NUMERICSERV) + if flags&mask != flags { + return -int32(1) + } + switch family { + case int32(PF_INET): + fallthrough + case int32(PF_INET6): + fallthrough + case PF_UNSPEC: + default: + return -int32(6) + } + } + if flags&int32(AI_ADDRCONFIG) != 0 { + tf = [2]int32{ + 0: int32(PF_INET), + 1: int32(PF_INET6), + } + ta = [2]uintptr{ + 0: uintptr(unsafe.Pointer(&_lo4)), + 1: uintptr(unsafe.Pointer(&_lo6)), + } + tl = [2]Tsocklen_t{ + 0: uint32(16), + 1: uint32(28), + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family == tf[int32(1)-i] { + goto _1 + } + s = Xsocket(tls, tf[i], Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_DGRAM), int32(IPPROTO_UDP)) + if s >= 0 { + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+1608) + r = Xconnect(tls, s, ta[i], tl[i]) + saved_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 1608)), uintptr(0)) + Xclose(tls, s) + if !(r != 0) { + goto _1 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = saved_errno + } + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EADDRNOTAVAIL): + fallthrough + case int32(EAFNOSUPPORT): + fallthrough + case int32(EHOSTUNREACH): + fallthrough + case int32(ENETDOWN): + fallthrough + case int32(ENETUNREACH): + default: + return -int32(11) + } + if family == tf[i] { + no_family = int32(1) + } + family = tf[int32(1)-i] + goto _1 + _1: + ; + i++ + } + } + nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) + if nservs < 0 { + return nservs + } + naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) + if naddrs < 0 { + return naddrs + } + if no_family != 0 { + return -int32(5) + } + nais = nservs * naddrs + canon_len = int32(Xstrlen(tls, bp+1352)) + out = Xcalloc(tls, uint32(1), uint32(nais)*uint32(68)+uint32(canon_len)+uint32(1)) + if !(out != 0) { + return -int32(10) + } + if canon_len != 0 { + outcanon = out + uintptr(nais)*68 + Xmemcpy(tls, outcanon, bp+1352, uint32(canon_len+int32(1))) + } else { + outcanon = uintptr(0) + } + v3 = Int32FromInt32(0) + i = v3 + k = v3 + for { + if !(i < naddrs) { + break + } + j = 0 + for { + if !(j < nservs) { + break + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*68))).Fslot = int16(k) + if (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily == int32(PF_INET) { + v5 = uint32(16) + } else { + v5 = uint32(28) + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*68))).Fai = Taddrinfo{ + Fai_family: (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily, + Fai_socktype: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fsocktype), + Fai_protocol: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fproto), + Fai_addrlen: v5, + Fai_addr: out + uintptr(k)*68 + 32, + Fai_canonname: outcanon, + } + if k != 0 { + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k-int32(1))*68))).Fai.Fai_next = out + uintptr(k)*68 + } + switch (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily { + case int32(PF_INET): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*68 + 32)) = uint16(PF_INET) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + Xmemcpy(tls, out+uintptr(k)*68+32+4, bp+8+uintptr(i)*28+8, uint32(4)) + case int32(PF_INET6): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*68 + 32)) = uint16(PF_INET6) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + *(*Tuint32_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 24)) = (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Fscopeid + Xmemcpy(tls, out+uintptr(k)*68+32+8, bp+8+uintptr(i)*28+8, uint32(16)) + break + } + goto _4 + _4: + ; + j++ + k++ + } + goto _2 + _2: + ; + i++ + } + (*(*Taibuf)(unsafe.Pointer(out))).Fref = int16(nais) + *(*uintptr)(unsafe.Pointer(res)) = out + return 0 +} + +/* Define the "an address is configured" condition for address + * families via ability to create a socket for the family plus + * routability of the loopback address for the family. */ +var _lo4 = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + Fsin_addr: Tin_addr{ + Fs_addr: uint32(0x0100007f), + }, +} + +var _lo6 = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_addr: Tin6_addr{ + F__in6_union: *(*struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + })(unsafe.Pointer(&[16]Tuint8_t{ + 15: uint8(1), + })), + }, +} + +const EAI_ADDRFAMILY = -9 +const EAI_ALLDONE = -103 +const EAI_CANCELED = -101 +const EAI_IDN_ENCODE = -105 +const EAI_INPROGRESS = -100 +const EAI_INTR = -104 +const EAI_NOTCANCELED = -102 +const HOST_NOT_FOUND = 1 +const MCAST_BLOCK_SOURCE = 43 +const MCAST_EXCLUDE = 0 +const MCAST_INCLUDE = 1 +const MCAST_JOIN_GROUP = 42 +const MCAST_JOIN_SOURCE_GROUP = 46 +const MCAST_LEAVE_GROUP = 45 +const MCAST_LEAVE_SOURCE_GROUP = 47 +const MCAST_MSFILTER = 48 +const MCAST_UNBLOCK_SOURCE = 44 +const NI_MAXHOST = 255 +const NI_MAXSERV = 32 +const NO_ADDRESS = 4 +const NO_DATA = 4 +const NO_RECOVERY = 3 +const TRY_AGAIN = 2 +const h_errno = 0 + +type Tip_mreq = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr +} + +type Tip_mreqn = struct { + Fimr_multiaddr Tin_addr + Fimr_address Tin_addr + Fimr_ifindex int32 +} + +type Tip_mreq_source = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr + Fimr_sourceaddr Tin_addr +} + +type Tip_msfilter = struct { + Fimsf_multiaddr Tin_addr + Fimsf_interface Tin_addr + Fimsf_fmode Tuint32_t + Fimsf_numsrc Tuint32_t + Fimsf_slist [1]Tin_addr +} + +type Tgroup_req = struct { + Fgr_interface Tuint32_t + Fgr_group Tsockaddr_storage +} + +type Tgroup_source_req = struct { + Fgsr_interface Tuint32_t + Fgsr_group Tsockaddr_storage + Fgsr_source Tsockaddr_storage +} + +type Tgroup_filter = struct { + Fgf_interface Tuint32_t + Fgf_group Tsockaddr_storage + Fgf_fmode Tuint32_t + Fgf_numsrc Tuint32_t + Fgf_slist [1]Tsockaddr_storage +} + +type Tin_pktinfo = struct { + Fipi_ifindex int32 + Fipi_spec_dst Tin_addr + Fipi_addr Tin_addr +} + +type Tin6_pktinfo = struct { + Fipi6_addr Tin6_addr + Fipi6_ifindex uint32 +} + +type Tip6_mtuinfo = struct { + Fip6m_addr Tsockaddr_in6 + Fip6m_mtu Tuint32_t +} + +func Xgethostbyaddr(tls *TLS, a uintptr, l Tsocklen_t, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint32(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h) + size += size + uint32(1) + _h = Xmalloc(tls, size) + if !(_h != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyaddr_r(tls, a, l, af, _h, _h+UintptrFromInt32(1)*20, size-uint32(20), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h uintptr + +func Xgethostbyaddr_r(tls *TLS, a uintptr, l Tsocklen_t, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var sl Tsocklen_t + var v1 uint32 + var _ /* sa at bp+0 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _ = i, sl, v1 + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp)) = uint16(af) + if af == int32(PF_INET6) { + v1 = uint32(28) + } else { + v1 = uint32(16) + } + sl = v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Load address argument into sockaddr structure */ + if af == int32(PF_INET6) && l == uint32(16) { + Xmemcpy(tls, bp+8, a, uint32(16)) + } else { + if af == int32(PF_INET) && l == uint32(4) { + Xmemcpy(tls, bp+4, a, uint32(4)) + } else { + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EINVAL) + } + } + /* Align buffer and check for space for pointers and ip address */ + i = int32(uint32(buf) & (Uint32FromInt64(4) - Uint32FromInt32(1))) + if !(i != 0) { + i = int32(4) + } + if buflen <= Uint32FromInt32(5)*Uint32FromInt64(4)-uint32(i)+l { + return int32(ERANGE) + } + buf += uintptr(uint32(4) - uint32(i)) + buflen -= Uint32FromInt32(5)*Uint32FromInt64(4) - uint32(i) + l + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(Uint32FromInt32(2) * Uint32FromInt64(4)) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint32FromInt32(2) * Uint32FromInt64(4)) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)), a, l) + buf += uintptr(l) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + 1*4)) = uintptr(0) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = uintptr(0) + switch Xgetnameinfo(tls, bp, sl, buf, buflen, uintptr(0), uint32(0), 0) { + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + case -int32(12): + return int32(ERANGE) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + case 0: + break + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + (*Thostent)(unsafe.Pointer(h)).Fh_length = int32(l) + (*Thostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2(tls, name, int32(PF_INET)) +} + +func Xgethostbyname2(tls *TLS, name uintptr, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint32(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h1) + size += size + uint32(1) + _h1 = Xmalloc(tls, size) + if !(_h1 != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyname2_r(tls, name, af, _h1, _h1+UintptrFromInt32(1)*20, size-uint32(20), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h1 uintptr + +func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1600) + defer tls.Free(1600) + var align, need Tsize_t + var cnt, i, v1 int32 + var v3 uintptr + var _ /* addrs at bp+0 */ [48]Taddress + var _ /* canon at bp+1344 */ [256]int8 + _, _, _, _, _, _ = align, cnt, i, need, v1, v3 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + cnt = X__lookup_name(tls, bp, bp+1344, name, af, int32(AI_CANONNAME)) + if cnt < 0 { + switch cnt { + case -int32(2): + *(*int32)(unsafe.Pointer(err)) = int32(HOST_NOT_FOUND) + return 0 + case -int32(5): + *(*int32)(unsafe.Pointer(err)) = int32(NO_DATA) + return 0 + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + if af == int32(PF_INET6) { + v1 = int32(16) + } else { + v1 = int32(4) + } + (*Thostent)(unsafe.Pointer(h)).Fh_length = v1 + /* Align buffer */ + align = -uint32(buf) & (Uint32FromInt64(4) - Uint32FromInt32(1)) + need = Uint32FromInt32(4) * Uint32FromInt64(4) + need += uint32(cnt+Int32FromInt32(1)) * (uint32(4) + uint32((*Thostent)(unsafe.Pointer(h)).Fh_length)) + need += Xstrlen(tls, name) + uint32(1) + need += Xstrlen(tls, bp+1344) + uint32(1) + need += align + if need > buflen { + return int32(ERANGE) + } + buf += uintptr(align) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint32FromInt32(3) * Uint32FromInt64(4)) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(uint32(cnt+Int32FromInt32(1)) * uint32(4)) + i = 0 + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = buf + buf += uintptr((*Thostent)(unsafe.Pointer(h)).Fh_length) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)), bp+uintptr(i)*28+8, uint32((*Thostent)(unsafe.Pointer(h)).Fh_length)) + goto _2 + _2: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = uintptr(0) + v3 = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = v3 + (*Thostent)(unsafe.Pointer(h)).Fh_name = v3 + Xstrcpy(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, bp+1344) + buf += uintptr(Xstrlen(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name) + uint32(1)) + if Xstrcmp(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = buf + Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)), name) + buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4))) + uint32(1)) + } else { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = uintptr(0) + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 2*4)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2_r(tls, name, int32(PF_INET), h, buf, buflen, res, err) +} + +const IFADDRS_HASH_SIZE = 64 +const IFA_ADDRESS = 1 +const IFA_BROADCAST = 4 +const IFA_LABEL = 3 +const IFA_LOCAL = 2 +const IFF_ALLMULTI = 512 +const IFF_AUTOMEDIA = 16384 +const IFF_BROADCAST = 2 +const IFF_DEBUG = 4 +const IFF_DORMANT = 131072 +const IFF_DYNAMIC = 32768 +const IFF_ECHO = 262144 +const IFF_LOOPBACK = 8 +const IFF_LOWER_UP = 65536 +const IFF_MASTER = 1024 +const IFF_MULTICAST = 4096 +const IFF_NOARP = 128 +const IFF_NOTRAILERS = 32 +const IFF_POINTOPOINT = 16 +const IFF_PORTSEL = 8192 +const IFF_PROMISC = 256 +const IFF_RUNNING = 64 +const IFF_SLAVE = 2048 +const IFF_UP = 1 +const IFF_VOLATILE = 461914 +const IFHWADDRLEN = 6 +const IFLA_ADDRESS = 1 +const IFLA_BROADCAST = 2 +const IFLA_IFNAME = 3 +const IFLA_STATS = 7 +const IFNAMSIZ = 16 +const IF_NAMESIZE = 16 +const NETLINK_ROUTE = 0 +const NLMSG_DONE = 3 +const NLMSG_ERROR = 2 +const NLMSG_NOOP = 1 +const NLMSG_OVERRUN = 4 +const NLM_F_ACK = 4 +const NLM_F_ATOMIC = 1024 +const NLM_F_DUMP = 768 +const NLM_F_MATCH = 512 +const NLM_F_MULTI = 2 +const NLM_F_REQUEST = 1 +const NLM_F_ROOT = 256 +const RTM_GETADDR = 22 +const RTM_GETLINK = 18 +const RTM_NEWADDR = 20 +const RTM_NEWLINK = 16 +const __UAPI_DEF_IF_IFCONF = 0 +const __UAPI_DEF_IF_IFMAP = 0 +const __UAPI_DEF_IF_IFNAMSIZ = 0 +const __UAPI_DEF_IF_IFREQ = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO = 0 + +type Tifaddrs = struct { + Fifa_next uintptr + Fifa_name uintptr + Fifa_flags uint32 + Fifa_addr uintptr + Fifa_netmask uintptr + Fifa_ifu struct { + Fifu_dstaddr [0]uintptr + Fifu_broadaddr uintptr + } + Fifa_data uintptr +} + +type Tif_nameindex = struct { + Fif_index uint32 + Fif_name uintptr +} + +type Tifaddr = struct { + Fifa_addr Tsockaddr + Fifa_ifu struct { + Fifu_dstaddr [0]Tsockaddr + Fifu_broadaddr Tsockaddr + } + Fifa_ifp uintptr + Fifa_next uintptr +} + +type Tifmap = struct { + Fmem_start uint32 + Fmem_end uint32 + Fbase_addr uint16 + Firq uint8 + Fdma uint8 + Fport uint8 +} + +type Tifreq = struct { + Fifr_ifrn struct { + Fifrn_name [16]int8 + } + Fifr_ifru struct { + Fifru_dstaddr [0]Tsockaddr + Fifru_broadaddr [0]Tsockaddr + Fifru_netmask [0]Tsockaddr + Fifru_hwaddr [0]Tsockaddr + Fifru_flags [0]int16 + Fifru_ivalue [0]int32 + Fifru_mtu [0]int32 + Fifru_map [0]Tifmap + Fifru_slave [0][16]int8 + Fifru_newname [0][16]int8 + Fifru_data [0]uintptr + Fifru_addr Tsockaddr + } +} + +type Tifconf = struct { + Fifc_len int32 + Fifc_ifcu struct { + Fifcu_req [0]uintptr + Fifcu_buf uintptr + } +} + +type Tnlmsghdr = struct { + Fnlmsg_len Tuint32_t + Fnlmsg_type Tuint16_t + Fnlmsg_flags Tuint16_t + Fnlmsg_seq Tuint32_t + Fnlmsg_pid Tuint32_t +} + +type Trtattr = struct { + Frta_len uint16 + Frta_type uint16 +} + +type Trtgenmsg = struct { + Frtgen_family uint8 +} + +type Tifinfomsg = struct { + Fifi_family uint8 + F__ifi_pad uint8 + Fifi_type uint16 + Fifi_index int32 + Fifi_flags uint32 + Fifi_change uint32 +} + +type Tifaddrmsg = struct { + Fifa_family Tuint8_t + Fifa_prefixlen Tuint8_t + Fifa_flags Tuint8_t + Fifa_scope Tuint8_t + Fifa_index Tuint32_t +} + +/* getifaddrs() reports hardware addresses with PF_PACKET that implies + * struct sockaddr_ll. But e.g. Infiniband socket address length is + * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct + * to extend ssl_addr - callers should be able to still use it. */ +type Tsockaddr_ll_hack = struct { + Fsll_family uint16 + Fsll_protocol uint16 + Fsll_ifindex int32 + Fsll_hatype uint16 + Fsll_pkttype uint8 + Fsll_halen uint8 + Fsll_addr [24]uint8 +} + +type Tsockany = struct { + Fll [0]Tsockaddr_ll_hack + Fv4 [0]Tsockaddr_in + Fv6 [0]Tsockaddr_in6 + Fsa Tsockaddr + F__ccgo_pad4 [20]byte +} + +type Tifaddrs_storage = struct { + Fifa Tifaddrs + Fhash_next uintptr + Faddr Tsockany + Fnetmask Tsockany + Fifu Tsockany + Findex uint32 + Fname [17]int8 +} + +type Tifaddrs_ctx = struct { + Ffirst uintptr + Flast uintptr + Fhash [64]uintptr +} + +func Xfreeifaddrs(tls *TLS, ifp uintptr) { + if __ccgo_strace { + trc("tls=%v ifp=%v, (%v:)", tls, ifp, origin(2)) + } + var n uintptr + _ = n + for ifp != 0 { + n = (*Tifaddrs)(unsafe.Pointer(ifp)).Fifa_next + Xfree(tls, ifp) + ifp = n + } +} + +func _copy_addr(tls *TLS, r uintptr, af int32, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32) { + var dst uintptr + var len1 int32 + _, _ = dst, len1 + switch af { + case int32(PF_INET): + dst = sa + 4 + len1 = int32(4) + case int32(PF_INET6): + dst = sa + 8 + len1 = int32(16) + if int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xf) == int32(0x2) { + (*(*Tsockaddr_in6)(unsafe.Pointer(sa))).Fsin6_scope_id = uint32(ifindex) + } + default: + return + } + if addrlen < uint32(len1) { + return + } + (*Tsockany)(unsafe.Pointer(sa)).Fsa.Fsa_family = uint16(af) + Xmemcpy(tls, dst, addr, uint32(len1)) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _gen_netmask(tls *TLS, r uintptr, af int32, sa uintptr, prefixlen int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v1 int32 + var _ /* addr at bp+0 */ [16]Tuint8_t + _, _ = i, v1 + *(*[16]Tuint8_t)(unsafe.Pointer(bp)) = [16]Tuint8_t{} + if uint32(prefixlen) > Uint32FromInt32(8)*Uint32FromInt64(16) { + prefixlen = int32(Uint32FromInt32(8) * Uint32FromInt64(16)) + } + i = prefixlen / int32(8) + Xmemset(tls, bp, int32(0xff), uint32(i)) + if uint32(i) < uint32(16) { + v1 = i + i++ + (*(*[16]Tuint8_t)(unsafe.Pointer(bp)))[v1] = uint8(int32(0xff) << (int32(8) - prefixlen%int32(8))) + } + _copy_addr(tls, r, af, sa, bp, uint32(16), 0) +} + +func _copy_lladdr(tls *TLS, r uintptr, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32, hatype uint16) { + if addrlen > uint32(24) { + return + } + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_family = uint16(PF_PACKET) + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_ifindex = ifindex + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_hatype = hatype + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_halen = uint8(addrlen) + Xmemcpy(tls, sa+12, addr, addrlen) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _netlink_msg_to_ifaddr(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var bucket uint32 + var ctx, ifa, ifi, ifs, ifs0, rta uintptr + var stats_len int32 + _, _, _, _, _, _, _, _ = bucket, ctx, ifa, ifi, ifs, ifs0, rta, stats_len + ctx = pctx + ifi = h + UintptrFromInt64(16) + ifa = h + UintptrFromInt64(16) + stats_len = 0 + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != int32(IFLA_STATS) { + goto _1 + } + stats_len = int32(uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - Uint32FromInt64(4)) + break + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + } else { + ifs0 = *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index%uint32(IFADDRS_HASH_SIZE))*4)) + for { + if !(ifs0 != 0) { + break + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Findex == (*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index { + break + } + goto _2 + _2: + ; + ifs0 = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fhash_next + } + if !(ifs0 != 0) { + return 0 + } + } + ifs = Xcalloc(tls, uint32(1), uint32(164)+uint32(stats_len)) + if ifs == uintptr(0) { + return -int32(1) + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex = uint32((*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFLA_IFNAME): + if uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint32(4) < uint32(17) { + Xmemcpy(tls, ifs+144, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 144 + } + case int32(IFLA_ADDRESS): + _copy_lladdr(tls, ifs+12, ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_BROADCAST): + _copy_lladdr(tls, ifs+20, ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_STATS): + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data = ifs + UintptrFromInt32(1)*164 + Xmemcpy(tls, (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + break + } + goto _3 + _3: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + bucket = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex % uint32(IFADDRS_HASH_SIZE) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fhash_next = *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr(bucket)*4)) + *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr(bucket)*4)) = ifs + } + } else { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_name + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(8)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFA_ADDRESS): + /* If ifa_addr is already set we, received an IFA_LOCAL before + * so treat this as destination address */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _copy_addr(tls, ifs+20, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } else { + _copy_addr(tls, ifs+12, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } + case int32(IFA_BROADCAST): + _copy_addr(tls, ifs+20, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LOCAL): + /* If ifa_addr is set and we get IFA_LOCAL, assume we have + * a point-to-point network. Move address to correct field. */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifu = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Faddr + *(*uintptr)(unsafe.Pointer(ifs + 20)) = ifs + 104 + Xmemset(tls, ifs+32, 0, uint32(36)) + } + _copy_addr(tls, ifs+12, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LABEL): + if uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint32(4) < uint32(17) { + Xmemcpy(tls, ifs+144, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 144 + } + break + } + goto _4 + _4: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _gen_netmask(tls, ifs+16, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+68, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_prefixlen)) + } + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + if !((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst != 0) { + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst = ifs + } + if (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast != 0 { + (*Tifaddrs)(unsafe.Pointer((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast)).Fifa_next = ifs + } + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast = ifs + } else { + Xfree(tls, ifs) + } + return 0 +} + +func Xgetifaddrs(tls *TLS, ifap uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ifap=%v, (%v:)", tls, ifap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var ctx uintptr + var r int32 + var _ /* _ctx at bp+0 */ Tifaddrs_ctx + _, _ = ctx, r + ctx = bp + Xmemset(tls, ctx, 0, uint32(264)) + r = X__rtnetlink_enumerate(tls, PF_UNSPEC, PF_UNSPEC, __ccgo_fp(_netlink_msg_to_ifaddr), ctx) + if r == 0 { + *(*uintptr)(unsafe.Pointer(ifap)) = (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst + } else { + Xfreeifaddrs(tls, (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst) + } + return r +} + +const RR_PTR = 12 + +func _itoa(tls *TLS, p uintptr, x uint32) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + p += uintptr(Uint32FromInt32(3) * Uint32FromInt64(4)) + p-- + v1 = p + *(*int8)(unsafe.Pointer(v1)) = 0 + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*int8)(unsafe.Pointer(v2)) = int8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func _mkptr4(tls *TLS, s uintptr, ip uintptr) { + bp := tls.Alloc(48) + defer tls.Free(48) + Xsprintf(tls, s, __ccgo_ts+897, VaList(bp+8, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) +} + +func _mkptr6(tls *TLS, s uintptr, ip uintptr) { + var i int32 + var v2, v3, v4, v5 uintptr + _, _, _, _, _ = i, v2, v3, v4, v5 + i = int32(15) + for { + if !(i >= 0) { + break + } + v2 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&int32(15)] + v3 = s + s++ + *(*int8)(unsafe.Pointer(v3)) = int8('.') + v4 = s + s++ + *(*int8)(unsafe.Pointer(v4)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>int32(4)] + v5 = s + s++ + *(*int8)(unsafe.Pointer(v5)) = int8('.') + goto _1 + _1: + ; + i-- + } + Xstrcpy(tls, s, __ccgo_ts+922) +} + +var _xdigits = [17]int8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + +func _reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { + bp := tls.Alloc(1728) + defer tls.Free(1728) + var f, p, z, v1, v2, v8 uintptr + var v10, v11, v15, v16, v4, v5 int32 + var v13, v18, v7 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1588 */ TFILE + var _ /* atmp at bp+1544 */ [16]uint8 + var _ /* iplit at bp+1560 */ Taddress + var _ /* line at bp+0 */ [512]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, p, z, v1, v10, v11, v13, v15, v16, v18, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+931, bp+1588, bp+512, uint32(1032)) + if !(f != 0) { + return + } + if family == int32(PF_INET) { + Xmemcpy(tls, bp+1544+uintptr(12), a, uint32(4)) + Xmemcpy(tls, bp+1544, __ccgo_ts+942, uint32(12)) + a = bp + 1544 + } + for Xfgets(tls, bp, int32(512), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*int8)(unsafe.Pointer(v2)) = int8('\n') + *(*int8)(unsafe.Pointer(p)) = Int8FromInt32(0) + } + p = bp + for { + if v7 = *(*int8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*int8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*int8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*int8)(unsafe.Pointer(v8)) = 0 + if X__lookup_ipliteral(tls, bp+1560, bp, PF_UNSPEC) <= 0 { + continue + } + if (*(*Taddress)(unsafe.Pointer(bp + 1560))).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+1560+8+uintptr(12), bp+1560+8, uint32(4)) + Xmemcpy(tls, bp+1560+8, __ccgo_ts+942, uint32(12)) + (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid = uint32(0) + } + if Xmemcmp(tls, a, bp+1560+8, uint32(16)) != 0 || (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid != scopeid { + continue + } + for { + if v13 = *(*int8)(unsafe.Pointer(p)) != 0; v13 { + v10 = int32(*(*int8)(unsafe.Pointer(p))) + v11 = BoolInt32(v10 == int32(' ') || uint32(v10)-uint32('\t') < uint32(5)) + goto _12 + _12: + } + if !(v13 && v11 != 0) { + break + } + goto _9 + _9: + ; + p++ + } + z = p + for { + if v18 = *(*int8)(unsafe.Pointer(z)) != 0; v18 { + v15 = int32(*(*int8)(unsafe.Pointer(z))) + v16 = BoolInt32(v15 == int32(' ') || uint32(v15)-uint32('\t') < uint32(5)) + goto _17 + _17: + } + if !(v18 && !(v16 != 0)) { + break + } + goto _14 + _14: + ; + z++ + } + *(*int8)(unsafe.Pointer(z)) = 0 + if int32(z)-int32(p) < int32(256) { + Xmemcpy(tls, buf, p, uint32(int32(z)-int32(p)+int32(1))) + break + } + } + X__fclose_ca(tls, f) +} + +func _reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { + bp := tls.Alloc(1312) + defer tls.Free(1312) + var f, p, v1, v2, v8 uintptr + var svport uint32 + var v4, v5 int32 + var v7 bool + var _ /* _buf at bp+132 */ [1032]uint8 + var _ /* _f at bp+1164 */ TFILE + var _ /* line at bp+0 */ [128]int8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _ = f, p, svport, v1, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+955, bp+1164, bp+132, uint32(1032)) + if !(f != 0) { + return + } + for Xfgets(tls, bp, int32(128), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*int8)(unsafe.Pointer(v2)) = int8('\n') + *(*int8)(unsafe.Pointer(p)) = Int8FromInt32(0) + } + p = bp + for { + if v7 = *(*int8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*int8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*int8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*int8)(unsafe.Pointer(v8)) = 0 + svport = Xstrtoul(tls, p, bp+128, int32(10)) + if svport != uint32(port) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if dgram != 0 && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+969, uint32(4)) != 0 { + continue + } + if !(dgram != 0) && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+974, uint32(4)) != 0 { + continue + } + if int32(p)-t__predefined_ptrdiff_t(bp) > int32(32) { + continue + } + Xmemcpy(tls, buf, bp, uint32(int32(p)-t__predefined_ptrdiff_t(bp))) + break + } + X__fclose_ca(tls, f) +} + +func _dns_parse_callback(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + if rr != int32(RR_PTR) { + return 0 + } + if X__dn_expand(tls, packet, packet+uintptr(plen), data, c, int32(256)) <= 0 { + *(*int8)(unsafe.Pointer(c)) = 0 + } + return 0 +} + +func Xgetnameinfo(tls *TLS, sa uintptr, sl Tsocklen_t, node uintptr, nodelen Tsocklen_t, serv uintptr, servlen Tsocklen_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sa=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa, sl, node, nodelen, serv, servlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(976) + defer tls.Free(976) + var a, p, p1, v1 uintptr + var af, port, qlen, rlen int32 + var scopeid uint32 + var _ /* buf at bp+78 */ [256]int8 + var _ /* num at bp+334 */ [13]int8 + var _ /* ptr at bp+0 */ [78]int8 + var _ /* query at bp+347 */ [96]uint8 + var _ /* reply at bp+443 */ [512]uint8 + var _ /* tmp at bp+955 */ [17]int8 + _, _, _, _, _, _, _, _, _ = a, af, p, p1, port, qlen, rlen, scopeid, v1 + af = int32((*Tsockaddr)(unsafe.Pointer(sa)).Fsa_family) + switch af { + case int32(PF_INET): + a = sa + 4 + if sl < uint32(16) { + return -int32(6) + } + _mkptr4(tls, bp, a) + scopeid = uint32(0) + case int32(PF_INET6): + a = sa + 8 + if sl < uint32(28) { + return -int32(6) + } + if Xmemcmp(tls, a, __ccgo_ts+942, uint32(12)) != 0 { + _mkptr6(tls, bp, a) + } else { + _mkptr4(tls, bp, a+uintptr(12)) + } + scopeid = (*Tsockaddr_in6)(unsafe.Pointer(sa)).Fsin6_scope_id + default: + return -int32(6) + } + if node != 0 && nodelen != 0 { + (*(*[256]int8)(unsafe.Pointer(bp + 78)))[0] = 0 + if !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + _reverse_hosts(tls, bp+78, a, scopeid, af) + } + if !(*(*int8)(unsafe.Pointer(bp + 78)) != 0) && !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + qlen = X__res_mkquery(tls, 0, bp, int32(1), int32(RR_PTR), uintptr(0), 0, uintptr(0), bp+347, int32(96)) + (*(*[96]uint8)(unsafe.Pointer(bp + 347)))[int32(3)] = uint8(0) /* don't need AD flag */ + rlen = X__res_send(tls, bp+347, qlen, bp+443, int32(512)) + (*(*[256]int8)(unsafe.Pointer(bp + 78)))[0] = 0 + if rlen > 0 { + if uint32(rlen) > uint32(512) { + rlen = int32(512) + } + X__dns_parse(tls, bp+443, rlen, __ccgo_fp(_dns_parse_callback), bp+78) + } + } + if !(*(*int8)(unsafe.Pointer(bp + 78)) != 0) { + if flags&int32(NI_NAMEREQD) != 0 { + return -int32(2) + } + Xinet_ntop(tls, af, a, bp+78, uint32(256)) + if scopeid != 0 { + p = uintptr(0) + if !(flags&Int32FromInt32(NI_NUMERICSCOPE) != 0) && (int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xf) == int32(0x2)) { + p = Xif_indextoname(tls, scopeid, bp+955+uintptr(1)) + } + if !(p != 0) { + p = _itoa(tls, bp+334, scopeid) + } + p-- + v1 = p + *(*int8)(unsafe.Pointer(v1)) = int8('%') + Xstrcat(tls, bp+78, p) + } + } + if Xstrlen(tls, bp+78) >= nodelen { + return -int32(12) + } + Xstrcpy(tls, node, bp+78) + } + if serv != 0 && servlen != 0 { + p1 = bp + 78 + port = int32(Xntohs(tls, (*Tsockaddr_in)(unsafe.Pointer(sa)).Fsin_port)) + (*(*[256]int8)(unsafe.Pointer(bp + 78)))[0] = 0 + if !(flags&Int32FromInt32(NI_NUMERICSERV) != 0) { + _reverse_services(tls, bp+78, port, flags&int32(NI_DGRAM)) + } + if !(*(*int8)(unsafe.Pointer(p1)) != 0) { + p1 = _itoa(tls, bp+334, uint32(port)) + } + if Xstrlen(tls, p1) >= servlen { + return -int32(12) + } + Xstrcpy(tls, serv, p1) + } + return 0 +} + +func Xgetpeername(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getpeername) + v2 = int32(__SC_getpeername) + v3 = 0 + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xgetservbyname(tls *TLS, name uintptr, prots uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v, (%v:)", tls, name, prots, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if Xgetservbyname_r(tls, name, prots, uintptr(unsafe.Pointer(&_se)), uintptr(unsafe.Pointer(&_buf3)), uint32(8), bp) != 0 { + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_se)) +} + +var _se Tservent + +var _buf3 [2]uintptr + +const ALIGN = 0 + +func Xgetservbyname_r(tls *TLS, name uintptr, prots uintptr, se uintptr, buf uintptr, buflen Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v se=%v buf=%v buflen=%v res=%v, (%v:)", tls, name, prots, se, buf, buflen, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var align, cnt, proto int32 + var v1 uintptr + var _ /* end at bp+8 */ uintptr + var _ /* servs at bp+0 */ [2]Tservice + _, _, _, _ = align, cnt, proto, v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Don't treat numeric port number strings as service records. */ + *(*uintptr)(unsafe.Pointer(bp + 8)) = __ccgo_ts + Xstrtoul(tls, name, bp+8, int32(10)) + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + return int32(ENOENT) + } + /* Align buffer */ + align = int32(-uint32(buf) & (Uint32FromInt64(8) - Uint32FromInt64(4) - Uint32FromInt32(1))) + if buflen < Uint32FromInt32(2)*Uint32FromInt64(4)+uint32(align) { + return int32(ERANGE) + } + buf += uintptr(align) + if !(prots != 0) { + proto = 0 + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+979) != 0) { + proto = int32(IPPROTO_TCP) + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+983) != 0) { + proto = int32(IPPROTO_UDP) + } else { + return int32(EINVAL) + } + } + } + cnt = X__lookup_serv(tls, bp, name, proto, 0, 0) + if cnt < 0 { + switch cnt { + case -int32(10): + fallthrough + case -int32(11): + return int32(ENOMEM) + default: + return int32(ENOENT) + } + } + (*Tservent)(unsafe.Pointer(se)).Fs_name = name + (*Tservent)(unsafe.Pointer(se)).Fs_aliases = buf + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases)) = (*Tservent)(unsafe.Pointer(se)).Fs_name + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases + 1*4)) = uintptr(0) + (*Tservent)(unsafe.Pointer(se)).Fs_port = int32(Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fport)) + if int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fproto) == int32(IPPROTO_TCP) { + v1 = __ccgo_ts + 979 + } else { + v1 = __ccgo_ts + 983 + } + (*Tservent)(unsafe.Pointer(se)).Fs_proto = v1 + *(*uintptr)(unsafe.Pointer(res)) = se + return 0 +} + +func Xgetsockname(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockname) + v2 = int32(__SC_getsockname) + v3 = 0 + v4 = fd + v5 = int32(addr) + v6 = int32(len1) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xgetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r, r1, v1, v10, v12, v13, v14, v2, v21, v23, v24, v25, v3, v32 int32 + var tv uintptr + var v15, v16, v17, v18, v19, v20, v26, v27, v28, v29, v30, v31, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* tv32 at bp+152 */ [2]int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, tv, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v23, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockopt) + v2 = int32(__SC_getsockopt) + v3 = 0 + v4 = fd + v5 = level + v6 = optname + v7 = int32(optval) + v8 = int32(optlen) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 100)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp+100), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 124)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+124)) + } + v10 = r + goto _11 +_11: + r1 = v10 + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if *(*Tsocklen_t)(unsafe.Pointer(optlen)) < uint32(16) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + *(*[1]Tsocklen_t)(unsafe.Pointer(bp + 48)) = [1]Tsocklen_t{ + 0: uint32(8), + } + v12 = int32(SYS_getsockopt) + v13 = int32(__SC_getsockopt) + v14 = 0 + v15 = fd + v16 = level + v17 = optname + v18 = int32(bp + 152) + v19 = int32(bp + 48) + v20 = int32(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, v12, v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, v12, v15, v16, v17, v18, v19, v20) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 100)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v13, int32(bp+100), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 124)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int32(SYS_socketcall), v13, int32(bp+124)) + } + v21 = r + goto _22 + _22: + r1 = v21 + if r1 < 0 { + break + } + tv = optval + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp + 152)))[0]) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64((*(*[2]int32)(unsafe.Pointer(bp + 152)))[int32(1)]) + *(*Tsocklen_t)(unsafe.Pointer(optlen)) = uint32(16) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if false { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v23 = int32(SYS_getsockopt) + v24 = int32(__SC_getsockopt) + v25 = 0 + v26 = fd + v27 = level + v28 = optname + v29 = int32(optval) + v30 = int32(optlen) + v31 = int32(Int32FromInt32(0)) + if v25 != 0 { + r = ___syscall_cp(tls, v23, v26, v27, v28, v29, v30, v31) + } else { + r = X__syscall6(tls, v23, v26, v27, v28, v29, v30, v31) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v32 = r + goto _33 + } + if v25 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 100)) = [6]int32{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v24, int32(bp+100), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 124)) = [6]int32{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = X__syscall2(tls, int32(SYS_socketcall), v24, int32(bp+124)) + } + v32 = r + goto _33 + _33: + r1 = v32 + break + } + } + } + return X__syscall_ret(tls, uint32(r1)) +} + +func X__h_errno_location(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstack != 0) { + return uintptr(unsafe.Pointer(&Xh_errno)) + } + return uintptr(___get_tp(tls)) + 88 +} + +func Xherror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1, v2 uintptr + _, _ = v1, v2 + if msg != 0 { + v1 = msg + } else { + v1 = __ccgo_ts + } + if msg != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+987, VaList(bp+8, v1, v2, Xhstrerror(tls, *(*int32)(unsafe.Pointer(X__h_errno_location(tls)))))) +} + +type Tcpu_set_t1 = struct { + F__bits [32]uint32 +} + +type Tucontext_t5 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +var _msgs1 = [84]int8{'H', 'o', 's', 't', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xhstrerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs1)) + ecode-- + for { + if !(ecode != 0 && *(*int8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode-- + s++ + } + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xhtonl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]int8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]int8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*int8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]int8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]int8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*int8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +func Xif_freenameindex(tls *TLS, idx uintptr) { + if __ccgo_strace { + trc("tls=%v idx=%v, (%v:)", tls, idx, origin(2)) + } + Xfree(tls, idx) +} + +func Xif_indextoname(tls *TLS, index uint32, name uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v index=%v name=%v, (%v:)", tls, index, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var fd, r, v1 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _ = fd, r, v1 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(bp + 16)) = int32(index) + r = Xioctl(tls, fd, int32(SIOCGIFNAME), VaList(bp+40, bp)) + X__syscall1(tls, int32(SYS_close), fd) + if r < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENODEV) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENXIO) + } + return uintptr(0) + } + return Xstrncpy(tls, name, bp, uint32(IF_NAMESIZE)) +} + +type Tifnamemap = struct { + Fhash_next uint32 + Findex uint32 + Fnamelen uint8 + Fname [16]int8 +} + +type Tifnameindexctx = struct { + Fnum uint32 + Fallocated uint32 + Fstr_bytes uint32 + Flist uintptr + Fhash [64]uint32 +} + +func _netlink_msg_to_nameindex(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var a Tsize_t + var bucket, index, namelen, type1 int32 + var ctx, ifa, ifi, map1, rta uintptr + var i, v2 uint32 + _, _, _, _, _, _, _, _, _, _, _, _ = a, bucket, ctx, i, ifa, ifi, index, map1, namelen, rta, type1, v2 + ctx = pctx + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + ifi = h + UintptrFromInt64(16) + index = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index + type1 = int32(IFLA_IFNAME) + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } else { + ifa = h + UintptrFromInt64(16) + index = int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index) + type1 = int32(IFA_LABEL) + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(8)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != type1 { + goto _1 + } + namelen = int32(uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - uint32(4) - uint32(1)) + if namelen > int32(IF_NAMESIZE) { + return 0 + } + /* suppress duplicates */ + bucket = index % int32(IFADDRS_HASH_SIZE) + i = *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) + for i != 0 { + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr(i-uint32(1))*28 + if (*Tifnamemap)(unsafe.Pointer(map1)).Findex == uint32(index) && int32((*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen) == namelen && Xmemcmp(tls, map1+9, rta+UintptrFromInt64(4), uint32(namelen)) == 0 { + return 0 + } + i = (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next + } + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum >= (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated { + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated != 0 { + v2 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated*uint32(2) + uint32(1) + } else { + v2 = uint32(8) + } + a = v2 + if a > Uint32FromUint32(0xffffffff)/Uint32FromInt64(28) { + return -int32(1) + } + map1 = Xrealloc(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist, a*uint32(28)) + if !(map1 != 0) { + return -int32(1) + } + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist = map1 + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated = a + } + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*28 + (*Tifnamemap)(unsafe.Pointer(map1)).Findex = uint32(index) + (*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen = uint8(namelen) + Xmemcpy(tls, map1+9, rta+UintptrFromInt64(4), uint32(namelen)) + *(*uint32)(unsafe.Pointer(ctx + 8)) += uint32(namelen + int32(1)) + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum++ + (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next = *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) + *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum + return 0 + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + return 0 +} + +func Xif_nameindex(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var ctx, d, ifs, p, s, v2 uintptr + var i int32 + var _ /* _ctx at bp+0 */ Tifnameindexctx + var _ /* cs at bp+272 */ int32 + _, _, _, _, _, _, _ = ctx, d, i, ifs, p, s, v2 + ctx = bp + ifs = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+272) + Xmemset(tls, ctx, 0, uint32(272)) + if X__rtnetlink_enumerate(tls, PF_UNSPEC, int32(PF_INET), __ccgo_fp(_netlink_msg_to_nameindex), ctx) < 0 { + goto err + } + ifs = Xmalloc(tls, ((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum+Uint32FromInt32(1))*8+(*Tifnameindexctx)(unsafe.Pointer(ctx)).Fstr_bytes) + if !(ifs != 0) { + goto err + } + p = ifs + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*8 + UintptrFromInt32(1)*8 + i = int32((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum) + d = ifs + s = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + for { + if !(i != 0) { + break + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = (*Tifnamemap)(unsafe.Pointer(s)).Findex + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = p + Xmemcpy(tls, p, s+9, uint32((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen)) + p += uintptr((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen) + v2 = p + p++ + *(*int8)(unsafe.Pointer(v2)) = 0 + goto _1 + _1: + ; + i-- + s += 28 + d += 8 + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = uint32(0) + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = uintptr(0) + goto err +err: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 272)), uintptr(0)) + Xfree(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOBUFS) + return ifs +} + +func Xif_nametoindex(tls *TLS, name uintptr) (r1 uint32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var fd, r, v1, v2 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _, _ = fd, r, v1, v2 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uint32(0) + } + Xstrncpy(tls, bp, name, uint32(16)) + r = Xioctl(tls, fd, int32(SIOCGIFINDEX), VaList(bp+40, bp)) + X__syscall1(tls, int32(SYS_close), fd) + if r < 0 { + v2 = 0 + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 16)) + } + return uint32(v2) +} + +func Xinet_addr(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* a at bp+0 */ Tin_addr + if !(X__inet_aton(tls, p, bp) != 0) { + return uint32(-Int32FromInt32(1)) + } + return (*(*Tin_addr)(unsafe.Pointer(bp))).Fs_addr +} + +func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, s uintptr + var i int32 + var _ /* a at bp+0 */ [4]uint32 + var _ /* z at bp+16 */ uintptr + _, _, _ = d, i, s + s = s0 + d = dest + *(*[4]uint32)(unsafe.Pointer(bp)) = [4]uint32{} + i = 0 + for { + if !(i < int32(4)) { + break + } + (*(*[4]uint32)(unsafe.Pointer(bp)))[i] = Xstrtoul(tls, s, bp+16, 0) + if *(*uintptr)(unsafe.Pointer(bp + 16)) == s || *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != int32('.') || !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return 0 + } + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0) { + break + } + s = *(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(1) + goto _1 + _1: + ; + i++ + } + if i == int32(4) { + return 0 + } + switch i { + case 0: + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(1)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[0] & uint32(0xffffff) + *(*uint32)(unsafe.Pointer(bp)) >>= uint32(24) + fallthrough + case int32(1): + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(2)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(1)] & uint32(0xffff) + *(*uint32)(unsafe.Pointer(bp + 1*4)) >>= uint32(16) + fallthrough + case int32(2): + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(3)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(2)] & uint32(0xff) + *(*uint32)(unsafe.Pointer(bp + 2*4)) >>= uint32(8) + } + i = 0 + for { + if !(i < int32(4)) { + break + } + if (*(*[4]uint32)(unsafe.Pointer(bp)))[i] > uint32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8((*(*[4]uint32)(unsafe.Pointer(bp)))[i]) + goto _2 + _2: + ; + i++ + } + return int32(1) +} + +func Xinet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__inet_aton(tls, s0, dest) +} + +func Xinet_network(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xntohl(tls, Xinet_addr(tls, p)) +} + +func Xinet_makeaddr(tls *TLS, n Tin_addr_t, h Tin_addr_t) (r Tin_addr) { + if __ccgo_strace { + trc("tls=%v n=%v h=%v, (%v:)", tls, n, h, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n < uint32(256) { + h |= n << int32(24) + } else { + if n < uint32(65536) { + h |= n << int32(16) + } else { + h |= n << int32(8) + } + } + return Tin_addr{ + Fs_addr: h, + } +} + +func Xinet_lnaof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h & uint32(0xffffff) + } + if h>>int32(24) < uint32(192) { + return h & uint32(0xffff) + } + return h & uint32(0xff) +} + +func Xinet_netof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h >> int32(24) + } + if h>>int32(24) < uint32(192) { + return h >> int32(16) + } + return h >> int32(8) +} + +func Xinet_ntoa(tls *TLS, _in Tin_addr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v _in=%v, (%v:)", tls, _in, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + *(*Tin_addr)(unsafe.Pointer(bp)) = _in + var a uintptr + _ = a + a = bp + Xsnprintf(tls, uintptr(unsafe.Pointer(&_buf4)), uint32(16), __ccgo_ts+995, VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3))))) + return uintptr(unsafe.Pointer(&_buf4)) +} + +var _buf4 [16]int8 + +func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l Tsocklen_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var a uintptr + var best, i, j, max, v2 int32 + var v3 int8 + var _ /* buf at bp+0 */ [100]int8 + _, _, _, _, _, _, _ = a, best, i, j, max, v2, v3 + a = a0 + switch af { + case int32(PF_INET): + if uint32(Xsnprintf(tls, s, l, __ccgo_ts+995, VaList(bp+112, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { + return s + } + case int32(PF_INET6): + if Xmemcmp(tls, a, __ccgo_ts+942, uint32(12)) != 0 { + Xsnprintf(tls, bp, uint32(100), __ccgo_ts+1007, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } else { + Xsnprintf(tls, bp, uint32(100), __ccgo_ts+1031, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } + /* Replace longest /(^0|:)[:0]{2,}/ with "::" */ + v2 = Int32FromInt32(0) + best = v2 + i = v2 + max = Int32FromInt32(2) + for { + if !((*(*[100]int8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + if i != 0 && int32((*(*[100]int8)(unsafe.Pointer(bp)))[i]) != int32(':') { + goto _1 + } + j = int32(Xstrspn(tls, bp+uintptr(i), __ccgo_ts+1061)) + if j > max { + best = i + max = j + } + goto _1 + _1: + ; + i++ + } + if max > int32(3) { + v3 = Int8FromUint8(':') + (*(*[100]int8)(unsafe.Pointer(bp)))[best+int32(1)] = v3 + (*(*[100]int8)(unsafe.Pointer(bp)))[best] = v3 + Xmemmove(tls, bp+uintptr(best)+uintptr(2), bp+uintptr(best)+uintptr(max), uint32(i-best-max+int32(1))) + } + if Xstrlen(tls, bp) < l { + Xstrcpy(tls, s, bp) + return s + } + default: + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return uintptr(0) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOSPC) + return uintptr(0) +} + +func _hexval(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, v14, v15, v4, v7 uintptr + var brk, d, i, j, need_v4, v, v10, v3, v9 int32 + var v11, v5 bool + var _ /* ip at bp+0 */ [8]Tuint16_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, brk, d, i, j, need_v4, v, v10, v11, v14, v15, v3, v4, v5, v7, v9 + a = a0 + brk = -int32(1) + need_v4 = 0 + if af == int32(PF_INET) { + i = 0 + for { + if !(i < int32(4)) { + break + } + v3 = Int32FromInt32(0) + j = v3 + v = v3 + for { + if !(j < int32(3) && BoolInt32(uint32(*(*int8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + v = int32(10)*v + int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) - int32('0') + goto _2 + _2: + ; + j++ + } + if j == 0 || j > int32(1) && int32(*(*int8)(unsafe.Pointer(s))) == int32('0') || v > int32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) + if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == int32(3) { + return int32(1) + } + if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') { + return 0 + } + s += uintptr(j + int32(1)) + goto _1 + _1: + ; + i++ + } + return 0 + } else { + if af != int32(PF_INET6) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return -int32(1) + } + } + if v5 = int32(*(*int8)(unsafe.Pointer(s))) == int32(':'); v5 { + s++ + v4 = s + } + if v5 && int32(*(*int8)(unsafe.Pointer(v4))) != int32(':') { + return 0 + } + i = 0 + for { + if int32(*(*int8)(unsafe.Pointer(s))) == int32(':') && brk < 0 { + brk = i + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + s++ + v7 = s + if !(*(*int8)(unsafe.Pointer(v7)) != 0) { + break + } + if i == int32(7) { + return 0 + } + goto _6 + } + v9 = Int32FromInt32(0) + j = v9 + v = v9 + for { + if v11 = j < int32(4); v11 { + v10 = _hexval(tls, uint32(*(*int8)(unsafe.Pointer(s + uintptr(j))))) + d = v10 + } + if !(v11 && v10 >= 0) { + break + } + v = int32(16)*v + d + goto _8 + _8: + ; + j++ + } + if j == 0 { + return 0 + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(v) + if !(*(*int8)(unsafe.Pointer(s + uintptr(j))) != 0) && (brk >= 0 || i == int32(7)) { + break + } + if i == int32(7) { + return 0 + } + if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != int32(':') { + if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') || i < int32(6) && brk < 0 { + return 0 + } + need_v4 = int32(1) + i++ + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + break + } + s += uintptr(j + int32(1)) + goto _6 + _6: + ; + i++ + } + if brk >= 0 { + Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint32(int32(2)*(i+int32(1)-brk))) + j = 0 + for { + if !(j < int32(7)-i) { + break + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[brk+j] = uint16(0) + goto _12 + _12: + ; + j++ + } + } + j = 0 + for { + if !(j < int32(8)) { + break + } + v14 = a + a++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) >> int32(8)) + v15 = a + a++ + *(*uint8)(unsafe.Pointer(v15)) = uint8((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) + goto _13 + _13: + ; + j++ + } + if need_v4 != 0 && Xinet_pton(tls, int32(PF_INET), s, a-uintptr(4)) <= 0 { + return 0 + } + return int32(1) +} + +func Xlisten(tls *TLS, fd int32, backlog int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v backlog=%v, (%v:)", tls, fd, backlog, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_listen) + v2 = int32(__SC_listen) + v3 = 0 + v4 = fd + v5 = backlog + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var p, v1 uintptr + var scopeid uint64 + var _ /* a4 at bp+0 */ Tin_addr + var _ /* a6 at bp+4 */ Tin6_addr + var _ /* tmp at bp+20 */ [64]int8 + var _ /* z at bp+84 */ uintptr + _, _, _ = p, scopeid, v1 + if X__inet_aton(tls, name, bp) > 0 { + if family == int32(PF_INET6) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp, uint32(4)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET) + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(0) + return int32(1) + } + p = Xstrchr(tls, name, int32('%')) + scopeid = uint64(0) + if p != 0 && int32(p)-int32(name) < int32(64) { + Xmemcpy(tls, bp+20, name, uint32(int32(p)-int32(name))) + (*(*[64]int8)(unsafe.Pointer(bp + 20)))[int32(p)-int32(name)] = 0 + name = bp + 20 + } + if Xinet_pton(tls, int32(PF_INET6), name, bp+4) <= 0 { + return 0 + } + if family == int32(PF_INET) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp+4, uint32(16)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET6) + if p != 0 { + p++ + v1 = p + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(v1)))-uint32('0') < uint32(10)) != 0 { + scopeid = Xstrtoull(tls, p, bp+84, int32(10)) + } else { + *(*uintptr)(unsafe.Pointer(bp + 84)) = p - uintptr(1) + } + if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)))) != 0 { + if !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xc0) == int32(0x80)) && !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xf) == int32(0x2)) { + return -int32(2) + } + scopeid = uint64(Xif_nametoindex(tls, p)) + if !(scopeid != 0) { + return -int32(2) + } + } + if scopeid > uint64(0xffffffff) { + return -int32(2) + } + } + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(scopeid) + return int32(1) +} + +const ABUF_SIZE = 4800 +const DAS_MATCHINGLABEL = 268435456 +const DAS_MATCHINGSCOPE = 536870912 +const DAS_ORDER_SHIFT = 0 +const DAS_PREC_SHIFT = 20 +const DAS_PREFIX_SHIFT = 8 +const DAS_SCOPE_SHIFT = 16 +const DAS_USABLE = 1073741824 +const RR_A = 1 +const RR_AAAA = 28 +const RR_CNAME = 5 + +func _is_valid_hostname(tls *TLS, host uintptr) (r int32) { + var s uintptr + _ = s + if Xstrnlen(tls, host, uint32(255))-uint32(1) >= uint32(254) || Xmbstowcs(tls, uintptr(0), host, uint32(0)) == uint32(-Int32FromInt32(1)) { + return 0 + } + s = host + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) >= int32(0x80) || int32(*(*uint8)(unsafe.Pointer(s))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0) { + break + } + goto _1 + _1: + ; + s++ + } + return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) +} + +func _name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) (r int32) { + var cnt, v1, v2, v3, v4 int32 + _, _, _, _, _ = cnt, v1, v2, v3, v4 + cnt = 0 + if name != 0 { + return 0 + } + if flags&int32(AI_PASSIVE) != 0 { + if family != int32(PF_INET6) { + v1 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v1)*28)) = Taddress{ + Ffamily: int32(PF_INET), + } + } + if family != int32(PF_INET) { + v2 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v2)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + } + } + } else { + if family != int32(PF_INET6) { + v3 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v3)*28)) = Taddress{ + Ffamily: int32(PF_INET), + Faddr: [16]Tuint8_t{ + 0: uint8(127), + 3: uint8(1), + }, + } + } + if family != int32(PF_INET) { + v4 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + Faddr: [16]Tuint8_t{ + 15: uint8(1), + }, + } + } + } + return cnt +} + +func _name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + return X__lookup_ipliteral(tls, buf, name, family) +} + +func _name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(1680) + defer tls.Free(1680) + var badfam, cnt, have_canon, v14, v15, v20, v21, v25, v26, v29, v5, v6, v8, v9 int32 + var f, p, z, v1, v18, v2, v4 uintptr + var l Tsize_t + var v11, v12, v17, v23, v28 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1544 */ TFILE + var _ /* line at bp+0 */ [512]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = badfam, cnt, f, have_canon, l, p, z, v1, v11, v12, v14, v15, v17, v18, v2, v20, v21, v23, v25, v26, v28, v29, v4, v5, v6, v8, v9 + l = Xstrlen(tls, name) + cnt = 0 + badfam = 0 + have_canon = 0 + f = X__fopen_rb_ca(tls, __ccgo_ts+931, bp+1544, bp+512, uint32(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return 0 + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(512), f) != 0 && cnt < int32(MAXADDRS) { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*int8)(unsafe.Pointer(v2)) = int8('\n') + *(*int8)(unsafe.Pointer(p)) = Int8FromInt32(0) + } + p = bp + uintptr(1) + for { + v4 = Xstrstr(tls, p, name) + p = v4 + if v12 = v4 != 0; v12 { + v5 = int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + ; + if v11 = !(v6 != 0); !v11 { + v8 = int32(*(*int8)(unsafe.Pointer(p + uintptr(l)))) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + } + if !(v12 && (v11 || !(v9 != 0))) { + break + } + goto _3 + _3: + ; + p++ + } + if !(p != 0) { + continue + } + /* Isolate IP address to parse */ + p = bp + for { + if v17 = *(*int8)(unsafe.Pointer(p)) != 0; v17 { + v14 = int32(*(*int8)(unsafe.Pointer(p))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + } + if !(v17 && !(v15 != 0)) { + break + } + goto _13 + _13: + ; + p++ + } + v18 = p + p++ + *(*int8)(unsafe.Pointer(v18)) = 0 + switch _name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { + case int32(1): + cnt++ + case 0: + continue + default: + badfam = -int32(5) + break + } + if have_canon != 0 { + continue + } + /* Extract first name as canonical name */ + for { + if v23 = *(*int8)(unsafe.Pointer(p)) != 0; v23 { + v20 = int32(*(*int8)(unsafe.Pointer(p))) + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + } + if !(v23 && v21 != 0) { + break + } + goto _19 + _19: + ; + p++ + } + z = p + for { + if v28 = *(*int8)(unsafe.Pointer(z)) != 0; v28 { + v25 = int32(*(*int8)(unsafe.Pointer(z))) + v26 = BoolInt32(v25 == int32(' ') || uint32(v25)-uint32('\t') < uint32(5)) + goto _27 + _27: + } + if !(v28 && !(v26 != 0)) { + break + } + goto _24 + _24: + ; + z++ + } + *(*int8)(unsafe.Pointer(z)) = 0 + if _is_valid_hostname(tls, p) != 0 { + have_canon = int32(1) + Xmemcpy(tls, canon, p, uint32(int32(z)-int32(p)+int32(1))) + } + } + X__fclose_ca(tls, f) + if cnt != 0 { + v29 = cnt + } else { + v29 = badfam + } + return v29 +} + +type Tdpc_ctx = struct { + Faddrs uintptr + Fcanon uintptr + Fcnt int32 + Frrtype int32 +} + +func _dns_parse_callback1(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ctx, v2 uintptr + var family, v1 int32 + var _ /* tmp at bp+0 */ [256]int8 + _, _, _, _ = ctx, family, v1, v2 + ctx = c + if rr == int32(RR_CNAME) { + if X__dn_expand(tls, packet, packet+uintptr(plen), data, bp, int32(256)) > 0 && _is_valid_hostname(tls, bp) != 0 { + Xstrcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcanon, bp) + } + return 0 + } + if (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt >= int32(MAXADDRS) { + return 0 + } + if rr != (*Tdpc_ctx)(unsafe.Pointer(ctx)).Frrtype { + return 0 + } + switch rr { + case int32(RR_A): + if len1 != int32(4) { + return -int32(1) + } + family = int32(PF_INET) + case int32(RR_AAAA): + if len1 != int32(16) { + return -int32(1) + } + family = int32(PF_INET6) + break + } + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Ffamily = family + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Fscopeid = uint32(0) + v2 = ctx + 8 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + Xmemcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs+uintptr(v1)*28+8, data, uint32(len1)) + return 0 +} + +func _name_from_dns(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, conf uintptr) (r int32) { + bp := tls.Alloc(10208) + defer tls.Free(10208) + var i, nq int32 + var qtypes [2]int32 + var _ /* abuf at bp+560 */ [2][4800]uint8 + var _ /* alens at bp+10184 */ [2]int32 + var _ /* ap at bp+10168 */ [2]uintptr + var _ /* ctx at bp+10192 */ Tdpc_ctx + var _ /* qbuf at bp+0 */ [2][280]uint8 + var _ /* qlens at bp+10176 */ [2]int32 + var _ /* qp at bp+10160 */ [2]uintptr + _, _, _ = i, nq, qtypes + *(*[2]uintptr)(unsafe.Pointer(bp + 10160)) = [2]uintptr{ + 0: bp, + 1: bp + 1*280, + } + *(*[2]uintptr)(unsafe.Pointer(bp + 10168)) = [2]uintptr{ + 0: bp + 560, + 1: bp + 560 + 1*4800, + } + nq = 0 + *(*Tdpc_ctx)(unsafe.Pointer(bp + 10192)) = Tdpc_ctx{ + Faddrs: buf, + Fcanon: canon, + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family != _afrr[i].Faf { + (*(*[2]int32)(unsafe.Pointer(bp + 10176)))[nq] = X__res_mkquery(tls, 0, name, int32(1), _afrr[i].Frr, uintptr(0), 0, uintptr(0), bp+uintptr(nq)*280, int32(280)) + if (*(*[2]int32)(unsafe.Pointer(bp + 10176)))[nq] == -int32(1) { + return 0 + } + qtypes[nq] = _afrr[i].Frr + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280 + 3)) = uint8(0) /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if nq != 0 && int32(*(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))) == int32(*(*uint8)(unsafe.Pointer(bp))) { + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))++ + } + nq++ + } + goto _1 + _1: + ; + i++ + } + if X__res_msend_rc(tls, nq, bp+10160, bp+10176, bp+10168, bp+10184, int32(4800), conf) < 0 { + return -int32(11) + } + i = 0 + for { + if !(i < nq) { + break + } + if (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i] < int32(4) || int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(2) { + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(3) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) != 0 { + return -int32(4) + } + goto _2 + _2: + ; + i++ + } + i = nq - int32(1) + for { + if !(i >= 0) { + break + } + (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Frrtype = qtypes[i] + if uint32((*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i]) > uint32(4800) { + (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i] = int32(4800) + } + X__dns_parse(tls, bp+560+uintptr(i)*4800, (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i], __ccgo_fp(_dns_parse_callback1), bp+10192) + goto _3 + _3: + ; + i-- + } + if (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Fcnt != 0 { + return (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Fcnt + } + return -int32(5) +} + +var _afrr = [2]struct { + Faf int32 + Frr int32 +}{ + 0: { + Faf: int32(PF_INET6), + Frr: int32(RR_A), + }, + 1: { + Faf: int32(PF_INET), + Frr: int32(RR_AAAA), + }, +} + +func _name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(368) + defer tls.Free(368) + var cnt, v10, v5, v6, v9 int32 + var dots, l, v2 Tsize_t + var p, z uintptr + var v12 bool + var _ /* conf at bp+256 */ Tresolvconf + var _ /* search at bp+0 */ [256]int8 + _, _, _, _, _, _, _, _, _, _, _ = cnt, dots, l, p, z, v10, v12, v2, v5, v6, v9 + if X__get_resolv_conf(tls, bp+256, bp, uint32(256)) < 0 { + return -int32(1) + } + /* Count dots, suppress search when >=ndots or name ends in + * a dot, which is an explicit request for global scope. */ + v2 = Uint32FromInt32(0) + l = v2 + dots = v2 + for { + if !(*(*int8)(unsafe.Pointer(name + uintptr(l))) != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(name + uintptr(l)))) == int32('.') { + dots++ + } + goto _1 + _1: + ; + l++ + } + if dots >= (*(*Tresolvconf)(unsafe.Pointer(bp + 256))).Fndots || int32(*(*int8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + *(*int8)(unsafe.Pointer(bp)) = 0 + } + /* Strip final dot for canon, fail if multiple trailing dots. */ + if int32(*(*int8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if !(l != 0) || int32(*(*int8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + return -int32(2) + } + /* This can never happen; the caller already checked length. */ + if l >= uint32(256) { + return -int32(2) + } + /* Name with search domain appended is setup in canon[]. This both + * provides the desired default canonical name (if the requested + * name is not a CNAME record) and serves as a buffer for passing + * the full requested name to name_from_dns. */ + Xmemcpy(tls, canon, name, l) + *(*int8)(unsafe.Pointer(canon + uintptr(l))) = int8('.') + p = bp + for { + if !(*(*int8)(unsafe.Pointer(p)) != 0) { + break + } + for { + v5 = int32(*(*int8)(unsafe.Pointer(p))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + goto _4 + _4: + ; + p++ + } + z = p + for { + if v12 = *(*int8)(unsafe.Pointer(z)) != 0; v12 { + v9 = int32(*(*int8)(unsafe.Pointer(z))) + v10 = BoolInt32(v9 == int32(' ') || uint32(v9)-uint32('\t') < uint32(5)) + goto _11 + _11: + } + if !(v12 && !(v10 != 0)) { + break + } + goto _8 + _8: + ; + z++ + } + if z == p { + break + } + if uint32(int32(z)-int32(p)) < uint32(256)-l-uint32(1) { + Xmemcpy(tls, canon+uintptr(l)+uintptr(1), p, uint32(int32(z)-int32(p))) + *(*int8)(unsafe.Pointer(canon + uintptr(uint32(int32(z)-int32(p)+int32(1))+l))) = 0 + cnt = _name_from_dns(tls, buf, canon, canon, family, bp+256) + if cnt != 0 { + return cnt + } + } + goto _3 + _3: + ; + p = z + } + *(*int8)(unsafe.Pointer(canon + uintptr(l))) = 0 + return _name_from_dns(tls, buf, canon, name, family, bp+256) +} + +type Tpolicy = struct { + Faddr [16]uint8 + Flen1 uint8 + Fmask uint8 + Fprec uint8 + Flabel uint8 +} + +var _defpolicy = [6]Tpolicy{ + 0: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + Flen1: uint8(15), + Fmask: uint8(0xff), + Fprec: uint8(50), + }, + 1: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}, + Flen1: uint8(11), + Fmask: uint8(0xff), + Fprec: uint8(35), + Flabel: uint8(4), + }, + 2: { + Faddr: [16]uint8{' ', 2}, + Flen1: uint8(1), + Fmask: uint8(0xff), + Fprec: uint8(30), + Flabel: uint8(2), + }, + 3: { + Faddr: [16]uint8{' ', 1}, + Flen1: uint8(3), + Fmask: uint8(0xff), + Fprec: uint8(5), + Flabel: uint8(5), + }, + 4: { + Faddr: [16]uint8{252}, + Fmask: uint8(0xfe), + Fprec: uint8(3), + Flabel: uint8(13), + }, + 5: { + Faddr: [16]uint8{}, + Fprec: uint8(40), + Flabel: uint8(1), + }, +} + +func _policyof(tls *TLS, a uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&_defpolicy))+uintptr(i)*20, uint32(_defpolicy[i].Flen1)) != 0 { + goto _1 + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a + uintptr(_defpolicy[i].Flen1))))&int32(_defpolicy[i].Fmask) != int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + uintptr(_defpolicy[i].Flen1)))) { + goto _1 + } + return uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + goto _1 + _1: + ; + i++ + } + return r +} + +func _labelof(tls *TLS, a uintptr) (r int32) { + return int32((*Tpolicy)(unsafe.Pointer(_policyof(tls, a))).Flabel) +} + +func _scopeof(tls *TLS, a uintptr) (r int32) { + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) { + return int32(*(*Tuint8_t)(unsafe.Pointer(a + 1))) & int32(15) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) { + return int32(2) + } + if *(*Tuint32_t)(unsafe.Pointer(a)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 1*4)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 2*4)) == uint32(0) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 15))) == int32(1) { + return int32(2) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0xc0) { + return int32(5) + } + return int32(14) +} + +func _prefixmatch(tls *TLS, s uintptr, d uintptr) (r int32) { + var i uint32 + _ = i + i = uint32(0) + for { + if !(i < uint32(128) && !((int32(*(*Tuint8_t)(unsafe.Pointer(s + uintptr(i/uint32(8)))))^int32(*(*Tuint8_t)(unsafe.Pointer(d + uintptr(i/uint32(8))))))&(Int32FromInt32(128)>>(i%Uint32FromInt32(8))) != 0)) { + break + } + goto _1 + _1: + ; + i++ + } + return int32(i) +} + +func _addrcmp(tls *TLS, _a uintptr, _b uintptr) (r int32) { + var a, b uintptr + _, _ = a, b + a = _a + b = _b + return (*Taddress)(unsafe.Pointer(b)).Fsortkey - (*Taddress)(unsafe.Pointer(a)).Fsortkey +} + +func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var cnt, dlabel, dprec, dscope, family1, fd, i, j, key, prefixlen, v1, v4, v5 int32 + var da, dpolicy, sa uintptr + var dalen Tsocklen_t + var l Tsize_t + var _ /* cs at bp+0 */ int32 + var _ /* da4 at bp+76 */ Tsockaddr_in + var _ /* da6 at bp+32 */ Tsockaddr_in6 + var _ /* sa4 at bp+60 */ Tsockaddr_in + var _ /* sa6 at bp+4 */ Tsockaddr_in6 + var _ /* salen at bp+92 */ Tsocklen_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, da, dalen, dlabel, dpolicy, dprec, dscope, family1, fd, i, j, key, l, prefixlen, sa, v1, v4, v5 + cnt = 0 + *(*int8)(unsafe.Pointer(canon)) = 0 + if name != 0 { + /* reject empty name and check len so it fits into temp bufs */ + l = Xstrnlen(tls, name, uint32(255)) + if l-uint32(1) >= uint32(254) { + return -int32(2) + } + Xmemcpy(tls, canon, name, l+uint32(1)) + } + /* Procedurally, a request for v6 addresses with the v4-mapped + * flag set is like a request for unspecified family, followed + * by filtering of the results. */ + if flags&int32(AI_V4MAPPED) != 0 { + if family == int32(PF_INET6) { + family = PF_UNSPEC + } else { + flags -= int32(AI_V4MAPPED) + } + } + /* Try each backend until there's at least one result. */ + cnt = _name_from_null(tls, buf, name, family, flags) + if !(cnt != 0) { + cnt = _name_from_numeric(tls, buf, name, family) + } + if !(cnt != 0) && !(flags&Int32FromInt32(AI_NUMERICHOST) != 0) { + cnt = _name_from_hosts(tls, buf, canon, name, family) + if !(cnt != 0) { + cnt = _name_from_dns_search(tls, buf, canon, name, family) + } + } + if cnt <= 0 { + if cnt != 0 { + v1 = cnt + } else { + v1 = -int32(2) + } + return v1 + } + /* Filter/transform results for v4-mapped lookup, if requested. */ + if flags&int32(AI_V4MAPPED) != 0 { + if !(flags&Int32FromInt32(AI_ALL) != 0) { + /* If any v6 results exist, remove v4 results. */ + i = 0 + for { + if !(i < cnt && (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET6)) { + break + } + goto _2 + _2: + ; + i++ + } + if i < cnt { + j = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily == int32(PF_INET6) { + v4 = j + j++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = *(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28)) + } + goto _3 + _3: + ; + i++ + } + v5 = j + i = v5 + cnt = v5 + } + } + /* Translate any remaining v4 results to v6 */ + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + goto _6 + } + Xmemcpy(tls, buf+uintptr(i)*28+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + Xmemcpy(tls, buf+uintptr(i)*28+8, __ccgo_ts+942, uint32(12)) + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily = int32(PF_INET6) + goto _6 + _6: + ; + i++ + } + } + /* No further processing is needed if there are fewer than 2 + * results or if there are only IPv4 results. */ + if cnt < int32(2) || family == int32(PF_INET) { + return cnt + } + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + break + } + goto _7 + _7: + ; + i++ + } + if i == cnt { + return cnt + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + /* The following implements a subset of RFC 3484/6724 destination + * address selection by generating a single 31-bit sort key for + * each address. Rules 3, 4, and 7 are omitted for having + * excessive runtime and code size cost and dubious benefit. + * So far the label/precedence table cannot be customized. */ + i = 0 + for { + if !(i < cnt) { + break + } + family1 = (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily + key = 0 + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 4)) = Tsockaddr_in6{} + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 32)) = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_scope_id: (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fscopeid, + } + *(*Tsockaddr_in)(unsafe.Pointer(bp + 60)) = Tsockaddr_in{} + *(*Tsockaddr_in)(unsafe.Pointer(bp + 76)) = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + } + if family1 == int32(PF_INET6) { + Xmemcpy(tls, bp+32+8, buf+uintptr(i)*28+8, uint32(16)) + da = bp + 32 + dalen = uint32(28) + sa = bp + 4 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(28) + } else { + Xmemcpy(tls, bp+4+8, __ccgo_ts+942, uint32(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + Xmemcpy(tls, bp+32+8, __ccgo_ts+942, uint32(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + Xmemcpy(tls, bp+76+4, buf+uintptr(i)*28+8, uint32(4)) + da = bp + 76 + dalen = uint32(16) + sa = bp + 60 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(16) + } + dpolicy = _policyof(tls, bp+32+8) + dscope = _scopeof(tls, bp+32+8) + dlabel = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Flabel) + dprec = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Fprec) + prefixlen = 0 + fd = Xsocket(tls, family1, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), int32(IPPROTO_UDP)) + if fd >= 0 { + if !(Xconnect(tls, fd, da, dalen) != 0) { + key |= int32(DAS_USABLE) + if !(Xgetsockname(tls, fd, sa, bp+92) != 0) { + if family1 == int32(PF_INET) { + Xmemcpy(tls, bp+4+8+uintptr(12), bp+60+4, uint32(4)) + } + if dscope == _scopeof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGSCOPE) + } + if dlabel == _labelof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGLABEL) + } + prefixlen = _prefixmatch(tls, bp+4+8, bp+32+8) + } + } + Xclose(tls, fd) + } + key |= dprec << int32(DAS_PREC_SHIFT) + key |= (int32(15) - dscope) << int32(DAS_SCOPE_SHIFT) + key |= prefixlen << int32(DAS_PREFIX_SHIFT) + key |= (int32(MAXADDRS) - i) << DAS_ORDER_SHIFT + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fsortkey = key + goto _8 + _8: + ; + i++ + } + Xqsort(tls, buf, uint32(cnt), uint32(28), __ccgo_fp(_addrcmp)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return cnt +} + +func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1312) + defer tls.Free(1312) + var cnt, v1, v11, v12, v16, v17, v2, v20, v21, v22, v7, v8 int32 + var f, p, v3, v4, v6 uintptr + var l Tsize_t + var port uint32 + var v10, v14, v19 bool + var _ /* _buf at bp+132 */ [1032]uint8 + var _ /* _f at bp+1164 */ TFILE + var _ /* line at bp+0 */ [128]int8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, f, l, p, port, v1, v10, v11, v12, v14, v16, v17, v19, v2, v20, v21, v22, v3, v4, v6, v7, v8 + cnt = 0 + *(*uintptr)(unsafe.Pointer(bp + 128)) = __ccgo_ts + port = uint32(0) + switch socktype { + case int32(SOCK_STREAM): + switch proto { + case 0: + proto = int32(IPPROTO_TCP) + fallthrough + case int32(IPPROTO_TCP): + default: + return -int32(8) + } + case int32(SOCK_DGRAM): + switch proto { + case 0: + proto = int32(IPPROTO_UDP) + fallthrough + case int32(IPPROTO_UDP): + default: + return -int32(8) + } + fallthrough + case 0: + default: + if name != 0 { + return -int32(8) + } + (*(*Tservice)(unsafe.Pointer(buf))).Fport = uint16(0) + (*(*Tservice)(unsafe.Pointer(buf))).Fproto = uint8(proto) + (*(*Tservice)(unsafe.Pointer(buf))).Fsocktype = uint8(socktype) + return int32(1) + } + if name != 0 { + if !(*(*int8)(unsafe.Pointer(name)) != 0) { + return -int32(8) + } + port = Xstrtoul(tls, name, bp+128, int32(10)) + } + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 128)))) != 0) { + if port > uint32(65535) { + return -int32(8) + } + if proto != int32(IPPROTO_UDP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v1 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v1)*4))).Fproto = uint8(IPPROTO_TCP) + } + if proto != int32(IPPROTO_TCP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v2 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v2)*4))).Fproto = uint8(IPPROTO_UDP) + } + return cnt + } + if flags&int32(AI_NUMERICSERV) != 0 { + return -int32(2) + } + l = Xstrlen(tls, name) + f = X__fopen_rb_ca(tls, __ccgo_ts+955, bp+1164, bp+132, uint32(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return -int32(8) + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(128), f) != 0 && cnt < int32(MAXSERVS) { + v3 = Xstrchr(tls, bp, int32('#')) + p = v3 + if v3 != 0 { + v4 = p + p++ + *(*int8)(unsafe.Pointer(v4)) = int8('\n') + *(*int8)(unsafe.Pointer(p)) = Int8FromInt32(0) + } + /* Find service name */ + p = bp + for { + v6 = Xstrstr(tls, p, name) + p = v6 + if !(v6 != 0) { + break + } + if v10 = p > bp; v10 { + v7 = int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v8 = BoolInt32(v7 == int32(' ') || uint32(v7)-uint32('\t') < uint32(5)) + goto _9 + _9: + } + if v10 && !(v8 != 0) { + goto _5 + } + if v14 = *(*int8)(unsafe.Pointer(p + uintptr(l))) != 0; v14 { + v11 = int32(*(*int8)(unsafe.Pointer(p + uintptr(l)))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + } + if v14 && !(v12 != 0) { + goto _5 + } + break + goto _5 + _5: + ; + p++ + } + if !(p != 0) { + continue + } + /* Skip past canonical name at beginning of line */ + p = bp + for { + if v19 = *(*int8)(unsafe.Pointer(p)) != 0; v19 { + v16 = int32(*(*int8)(unsafe.Pointer(p))) + v17 = BoolInt32(v16 == int32(' ') || uint32(v16)-uint32('\t') < uint32(5)) + goto _18 + _18: + } + if !(v19 && !(v17 != 0)) { + break + } + goto _15 + _15: + ; + p++ + } + port = Xstrtoul(tls, p, bp+128, int32(10)) + if port > uint32(65535) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+969, uint32(4)) != 0) { + if proto == int32(IPPROTO_TCP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v20 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v20)*4))).Fproto = uint8(IPPROTO_UDP) + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+974, uint32(4)) != 0) { + if proto == int32(IPPROTO_UDP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v21 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v21)*4))).Fproto = uint8(IPPROTO_TCP) + } + } + X__fclose_ca(tls, f) + if cnt > 0 { + v22 = cnt + } else { + v22 = -int32(8) + } + return v22 +} + +func ___netlink_enumerate(tls *TLS, fd int32, seq uint32, type1 int32, af int32, cb uintptr, ctx uintptr) (r1 int32) { + bp := tls.Alloc(8192) + defer tls.Free(8192) + var h uintptr + var r, ret int32 + var _ /* u at bp+0 */ struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + } + _, _, _ = h, r, ret + Xmemset(tls, bp, 0, uint32(20)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_len = uint32(20) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_type = uint16(type1) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_flags = uint16(Int32FromInt32(NLM_F_ROOT) | Int32FromInt32(NLM_F_MATCH) | Int32FromInt32(NLM_F_REQUEST)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_seq = seq + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fg.Frtgen_family = uint8(af) + r = Xsend(tls, fd, bp, uint32(20), 0) + if r < 0 { + return r + } + for int32(1) != 0 { + r = Xrecv(tls, fd, bp, uint32(8192), int32(MSG_DONTWAIT)) + if r <= 0 { + return -int32(1) + } + h = bp + for { + if !(uint32(int32(bp+uintptr(r))-int32(h)) >= uint32(16)) { + break + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_DONE) { + return 0 + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_ERROR) { + return -int32(1) + } + ret = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cb})))(tls, ctx, h) + if ret != 0 { + return ret + } + goto _1 + _1: + ; + h = h + uintptr(((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + } + return r1 +} + +func X__rtnetlink_enumerate(tls *TLS, link_af int32, addr_af int32, cb uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v link_af=%v addr_af=%v cb=%v ctx=%v, (%v:)", tls, link_af, addr_af, cb, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var fd, r int32 + _, _ = fd, r + fd = Xsocket(tls, int32(PF_NETLINK), Int32FromInt32(SOCK_RAW)|Int32FromInt32(SOCK_CLOEXEC), NETLINK_ROUTE) + if fd < 0 { + return -int32(1) + } + r = ___netlink_enumerate(tls, fd, uint32(1), int32(RTM_GETLINK), link_af, cb, ctx) + if !(r != 0) { + r = ___netlink_enumerate(tls, fd, uint32(2), int32(RTM_GETADDR), addr_af, cb, ctx) + } + X__syscall1(tls, int32(SYS_close), fd) + return r +} + +func Xgetnetbyaddr(tls *TLS, net Tuint32_t, type1 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v net=%v type1=%v, (%v:)", tls, net, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xns_get16(tls *TLS, cp uintptr) (r uint32) { + if __ccgo_strace { + trc("tls=%v cp=%v, (%v:)", tls, cp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(int32(*(*uint8)(unsafe.Pointer(cp)))< %v", r) }() + } + return uint32(*(*uint8)(unsafe.Pointer(cp)))<> int32(8)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(s) +} + +func Xns_put32(tls *TLS, l uint32, cp uintptr) { + if __ccgo_strace { + trc("tls=%v l=%v cp=%v, (%v:)", tls, l, cp, origin(2)) + } + var v1, v2, v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + v1 = cp + cp++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(l >> int32(24)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(l >> int32(16)) + v3 = cp + cp++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(l >> int32(8)) + v4 = cp + cp++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(l) +} + +func Xns_initparse(tls *TLS, msg uintptr, msglen int32, handle uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v msglen=%v handle=%v, (%v:)", tls, msg, msglen, handle, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, r int32 + _, _ = i, r + (*Tns_msg)(unsafe.Pointer(handle)).F_msg = msg + (*Tns_msg)(unsafe.Pointer(handle)).F_eom = msg + uintptr(msglen) + if msglen < (Int32FromInt32(2)+int32(_ns_s_max))*Int32FromInt32(NS_INT16SZ) { + goto bad + } + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_id = uint16(Xns_get16(tls, msg-uintptr(2))) + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_flags = uint16(Xns_get16(tls, msg-uintptr(2))) + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + msg += uintptr(2) + *(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)) = uint16(Xns_get16(tls, msg-uintptr(2))) + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + if *(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)) != 0 { + *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(i)*4)) = msg + r = Xns_skiprr(tls, msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, i, int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)))) + if r < 0 { + return -int32(1) + } + msg += uintptr(r) + } else { + *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(i)*4)) = UintptrFromInt32(0) + } + goto _2 + _2: + ; + i++ + } + if msg != (*Tns_msg)(unsafe.Pointer(handle)).F_eom { + goto bad + } + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = int32(_ns_s_max) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_skiprr(tls *TLS, ptr uintptr, eom uintptr, section Tns_sect, count int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ptr=%v eom=%v section=%v count=%v, (%v:)", tls, ptr, eom, section, count, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var p uintptr + var r, v1 int32 + _, _, _ = p, r, v1 + p = ptr + for { + v1 = count + count-- + if !(v1 != 0) { + break + } + r = Xdn_skipname(tls, p, eom) + if r < 0 { + goto bad + } + if r+Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ) > int32(eom)-int32(p) { + goto bad + } + p += uintptr(r + Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) + if section != int32(_ns_s_qd) { + if Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ) > int32(eom)-int32(p) { + goto bad + } + p += uintptr(NS_INT32SZ) + p += uintptr(2) + r = int32(Xns_get16(tls, p-uintptr(2))) + if r > int32(eom)-int32(p) { + goto bad + } + p += uintptr(r) + } + } + return int32(p) - int32(ptr) + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_parserr(tls *TLS, handle uintptr, section Tns_sect, rrnum int32, rr uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v handle=%v section=%v rrnum=%v rr=%v, (%v:)", tls, handle, section, rrnum, rr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + var p1, p2, p3, p4 uintptr + _, _, _, _, _ = r, p1, p2, p3, p4 + if section < 0 || section >= int32(_ns_s_max) { + goto bad + } + if section != (*Tns_msg)(unsafe.Pointer(handle)).F_sect { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(section)*4)) + } + if rrnum == -int32(1) { + rrnum = (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum + } + if rrnum < 0 || rrnum >= int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(section)*2))) { + goto bad + } + if rrnum < (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(section)*4)) + } + if rrnum > (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + r = Xns_skiprr(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, section, rrnum-(*Tns_msg)(unsafe.Pointer(handle)).F_rrnum) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr(r) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = rrnum + } + r = Xns_name_uncompress(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, rr, uint32(NS_MAXDNAME)) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr(r) + if Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p1 = handle + 44 + *(*uintptr)(unsafe.Pointer(p1)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Ftype1 = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p1))-uintptr(2))) + p2 = handle + 44 + *(*uintptr)(unsafe.Pointer(p2)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frr_class = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p2))-uintptr(2))) + if section != int32(_ns_s_qd) { + if Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p3 = handle + 44 + *(*uintptr)(unsafe.Pointer(p3)) += uintptr(4) + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = Xns_get32(tls, *(*uintptr)(unsafe.Pointer(p3))-uintptr(4)) + p4 = handle + 44 + *(*uintptr)(unsafe.Pointer(p4)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p4))-uintptr(2))) + if int32((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) + } else { + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = UintptrFromInt32(0) + } + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum++ + if (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum > int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(section)*2))) { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + int32(1) + if (*Tns_msg)(unsafe.Pointer(handle)).F_sect == int32(_ns_s_max) { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + } else { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + } + } + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENODEV) + return -int32(1) + goto size +size: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_name_uncompress(tls *TLS, msg uintptr, eom uintptr, src uintptr, dst uintptr, dstsiz Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v eom=%v src=%v dst=%v dstsiz=%v, (%v:)", tls, msg, eom, src, dst, dstsiz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xdn_expand(tls, msg, eom, src, dst, int32(dstsiz)) + if r < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + } + return r +} + +func Xntohl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]int8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]int8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*int8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]int8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]int8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*int8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +/* do we really need all these?? */ + +var _idx int32 +var _protos = [239]uint8{0, 'i', 'p', 0, 1, 'i', 'c', 'm', 'p', 0, 2, 'i', 'g', 'm', 'p', 0, 3, 'g', 'g', 'p', 0, 4, 'i', 'p', 'e', 'n', 'c', 'a', 'p', 0, 5, 's', 't', 0, 6, 't', 'c', 'p', 0, 8, 'e', 'g', 'p', 0, 12, 'p', 'u', 'p', 0, 17, 'u', 'd', 'p', 0, 20, 'h', 'm', 'p', 0, 22, 'x', 'n', 's', '-', 'i', 'd', 'p', 0, 27, 'r', 'd', 'p', 0, 29, 'i', 's', 'o', '-', 't', 'p', '4', 0, '$', 'x', 't', 'p', 0, '%', 'd', 'd', 'p', 0, '&', 'i', 'd', 'p', 'r', '-', 'c', 'm', 't', 'p', 0, ')', 'i', 'p', 'v', '6', 0, '+', 'i', 'p', 'v', '6', '-', 'r', 'o', 'u', 't', 'e', 0, ',', 'i', 'p', 'v', '6', '-', 'f', 'r', 'a', 'g', 0, '-', 'i', 'd', 'r', 'p', 0, '.', 'r', 's', 'v', 'p', 0, '/', 'g', 'r', 'e', 0, '2', 'e', 's', 'p', 0, '3', 'a', 'h', 0, '9', 's', 'k', 'i', 'p', 0, ':', 'i', 'p', 'v', '6', '-', 'i', 'c', 'm', 'p', 0, ';', 'i', 'p', 'v', '6', '-', 'n', 'o', 'n', 'x', 't', 0, '<', 'i', 'p', 'v', '6', '-', 'o', 'p', 't', 's', 0, 'I', 'r', 's', 'p', 'f', 0, 'Q', 'v', 'm', 't', 'p', 0, 'Y', 'o', 's', 'p', 'f', 0, '^', 'i', 'p', 'i', 'p', 0, 'b', 'e', 'n', 'c', 'a', 'p', 0, 'g', 'p', 'i', 'm', 0, 255, 'r', 'a', 'w'} + +func Xendprotoent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _idx = 0 +} + +func Xsetprotoent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } + _idx = 0 +} + +func Xgetprotoent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint32(_idx) >= uint32(239) { + return UintptrFromInt32(0) + } + _p.Fp_proto = int32(_protos[_idx]) + _p.Fp_name = uintptr(unsafe.Pointer(&_protos)) + uintptr(_idx+int32(1)) + _p.Fp_aliases = uintptr(unsafe.Pointer(&_aliases)) + _idx = int32(uint32(_idx) + (Xstrlen(tls, _p.Fp_name) + Uint32FromInt32(2))) + return uintptr(unsafe.Pointer(&_p)) +} + +var _p Tprotoent + +var _aliases uintptr + +func Xgetprotobyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && Xstrcmp(tls, name, (*Tprotoent)(unsafe.Pointer(p)).Fp_name) != 0 { + p = Xgetprotoent(tls) + } + return p +} + +func Xgetprotobynumber(tls *TLS, num int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v num=%v, (%v:)", tls, num, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && (*Tprotoent)(unsafe.Pointer(p)).Fp_proto != num { + p = Xgetprotoent(tls) + } + return p +} + +func Xrecv(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrecvfrom(tls, fd, buf, len1, flags, uintptr(0), uintptr(0)) +} + +func Xrecvfrom(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen uintptr) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_recvfrom) + v2 = int32(__SC_recvfrom) + v3 = int32(1) + v4 = fd + v5 = int32(buf) + v6 = int32(len1) + v7 = flags + v8 = int32(addr) + v9 = int32(alen) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xrecvmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, timeout uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v timeout=%v, (%v:)", tls, fd, msgvec, vlen, flags, timeout, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var csize, v3, v6 uintptr + var i, i1, ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v4 t__predefined_size_t + var v7 uint64 + _, _, _, _, _, _, _, _, _, _, _, _ = csize, i, i1, ns, r, s, v1, v2, v3, v4, v6, v7 + defer func() { Xrealloc(tls, csize, 0) }() + if timeout != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(timeout)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if timeout != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(timeout)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if timeout != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_recvmmsg_time64), fd, int32(msgvec), int32(vlen), int32(flags), int32(v3), 0)) + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if vlen > uint32(IOV_MAX) { + vlen = uint32(IOV_MAX) + } + v4 = vlen * 4 + csize = Xrealloc(tls, csize, v4) + i = 0 + for { + if !(uint32(i) < vlen) { + break + } + *(*Tsocklen_t)(unsafe.Add(unsafe.Pointer(csize), i*4)) = (*(*Tmmsghdr)(unsafe.Pointer(msgvec + uintptr(i)*32))).Fmsg_hdr.Fmsg_controllen + goto _5 + _5: + ; + i++ + } + if timeout != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v7 = uint64(s) + } else { + v7 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v7), + 1: ns, + } + v6 = bp + 16 + } else { + v6 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_recvmmsg), fd, int32(msgvec), int32(vlen), int32(flags), int32(v6), 0)) + i1 = 0 + for { + if !(i1 < r) { + break + } + X__convert_scm_timestamps(tls, msgvec+uintptr(i1)*32, *(*Tsocklen_t)(unsafe.Add(unsafe.Pointer(csize), i1*4))) + goto _8 + _8: + ; + i1++ + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__convert_scm_timestamps(tls *TLS, msg uintptr, csize Tsocklen_t) { + if __ccgo_strace { + trc("tls=%v msg=%v csize=%v, (%v:)", tls, msg, csize, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cmsg, last, v2, v6, v7 uintptr + var type1 int32 + var _ /* tmp at bp+0 */ int32 + var _ /* tvts at bp+4 */ [2]int64 + _, _, _, _, _, _ = cmsg, last, type1, v2, v6, v7 + if false { + return + } + if !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control != 0) || !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen != 0) { + return + } + last = uintptr(0) + type1 = 0 + if (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen >= uint32(12) { + v2 = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control + } else { + v2 = UintptrFromInt32(0) + } + cmsg = v2 + for { + if !(cmsg != 0) { + break + } + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level == int32(SOL_SOCKET) { + switch (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type { + case int32(SO_TIMESTAMP_OLD): + goto _3 + case int32(SO_TIMESTAMPNS_OLD): + goto _4 + } + goto _5 + _3: + ; + if type1 != 0 { + goto _5 + } + type1 = int32(SO_TIMESTAMP) + goto common + _4: + ; + type1 = int32(SO_TIMESTAMPNS) + goto common + common: + ; + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*12, uint32(4)) + (*(*[2]int64)(unsafe.Pointer(bp + 4)))[0] = int64(*(*int32)(unsafe.Pointer(bp))) + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*12+uintptr(4), uint32(4)) + (*(*[2]int64)(unsafe.Pointer(bp + 4)))[int32(1)] = int64(*(*int32)(unsafe.Pointer(bp))) + goto _5 + _5: + } + last = cmsg + goto _1 + _1: + ; + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len < uint32(12) || uint32((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))+uint32(12) >= uint32(int32((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int32(cmsg)) { + v6 = uintptr(0) + } else { + v6 = cmsg + uintptr(uint32((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))) + } + cmsg = v6 + } + if !(last != 0) || !(type1 != 0) { + return + } + if (Uint32FromInt64(16)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) > csize-(*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen { + *(*int32)(unsafe.Pointer(msg + 24)) |= int32(MSG_CTRUNC) + return + } + *(*Tsocklen_t)(unsafe.Pointer(msg + 20)) += (Uint32FromInt64(16)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + if (*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len < uint32(12) || uint32((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))+uint32(12) >= uint32(int32((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int32(last)) { + v7 = uintptr(0) + } else { + v7 = last + uintptr(uint32((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))) + } + cmsg = v7 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level = int32(SOL_SOCKET) + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type = type1 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len = (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + Uint32FromInt64(16) + Xmemcpy(tls, cmsg+UintptrFromInt32(1)*12, bp+4, uint32(16)) +} + +func Xrecvmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r2 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var orig_controllen Tsocklen_t + var r, v1, v10, v2, v3 int32 + var r1 Tssize_t + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _ = orig_controllen, r, r1, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + orig_controllen = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen + v1 = int32(SYS_recvmsg) + v2 = int32(__SC_recvmsg) + v3 = int32(1) + v4 = fd + v5 = int32(msg) + v6 = flags + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + r1 = X__syscall_ret(tls, uint32(v10)) + if r1 >= 0 { + X__convert_scm_timestamps(tls, msg, orig_controllen) + } + return r1 +} + +func Xres_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__res_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var i, id, j, n int32 + var l Tsize_t + var _ /* q at bp+0 */ [280]uint8 + var _ /* ts at bp+280 */ Ttimespec + _, _, _, _, _ = i, id, j, l, n + l = Xstrnlen(tls, dname, uint32(255)) + if l != 0 && int32(*(*int8)(unsafe.Pointer(dname + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if l != 0 && int32(*(*int8)(unsafe.Pointer(dname + uintptr(l-uint32(1))))) == int32('.') { + return -int32(1) + } + n = int32(uint32(17) + l + BoolUint32(!!(l != 0))) + if l > uint32(253) || buflen < n || uint32(op) > uint32(15) || uint32(class) > uint32(255) || uint32(type1) > uint32(255) { + return -int32(1) + } + /* Construct query template - ID will be filled later */ + Xmemset(tls, bp, 0, uint32(n)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(2)] = uint8(op*int32(8) + int32(1)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(3)] = uint8(32) /* AD */ + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(5)] = uint8(1) + Xmemcpy(tls, bp+uintptr(13), dname, l) + i = int32(13) + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + j = i + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[j] != 0 && int32((*(*[280]uint8)(unsafe.Pointer(bp)))[j]) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-i)-uint32(1) > uint32(62) { + return -int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i-int32(1)] = uint8(j - i) + goto _1 + _1: + ; + i = j + int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(1)] = uint8(type1) + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(3)] = uint8(class) + /* Make a reasonably unpredictable id */ + Xclock_gettime(tls, CLOCK_REALTIME, bp+280) + id = int32((uint32((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec) + uint32((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec)/uint32(65536)) & uint32(0xffff)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[0] = uint8(id / int32(256)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(1)] = uint8(id) + Xmemcpy(tls, buf, bp, uint32(n)) + return n +} + +func Xres_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_mkquery(tls, op, dname, class, type1, data, datalen, newrr, buf, buflen) +} + +const POLLERR = 8 +const POLLHUP = 16 +const POLLIN = 1 +const POLLMSG = 1024 +const POLLNVAL = 32 +const POLLOUT = 4 +const POLLPRI = 2 +const POLLRDBAND = 128 +const POLLRDHUP = 8192 +const POLLRDNORM = 64 +const POLLWRBAND = 512 +const POLLWRNORM = 256 +const TCP_CC_INFO = 26 +const TCP_CLOSE = 7 +const TCP_CLOSE_WAIT = 8 +const TCP_CLOSING = 11 +const TCP_CM_INQ = 36 +const TCP_CONGESTION = 13 +const TCP_CORK = 3 +const TCP_DEFER_ACCEPT = 9 +const TCP_ESTABLISHED = 1 +const TCP_FASTOPEN = 23 +const TCP_FASTOPEN_CONNECT = 30 +const TCP_FASTOPEN_KEY = 33 +const TCP_FASTOPEN_NO_COOKIE = 34 +const TCP_FIN_WAIT1 = 4 +const TCP_FIN_WAIT2 = 5 +const TCP_INFO = 11 +const TCP_INQ = 36 +const TCP_KEEPCNT = 6 +const TCP_KEEPIDLE = 4 +const TCP_KEEPINTVL = 5 +const TCP_LAST_ACK = 9 +const TCP_LINGER2 = 8 +const TCP_LISTEN = 10 +const TCP_MAXSEG = 2 +const TCP_MD5SIG = 14 +const TCP_MD5SIG_EXT = 32 +const TCP_NODELAY = 1 +const TCP_NOTSENT_LOWAT = 25 +const TCP_QUEUE_SEQ = 21 +const TCP_QUICKACK = 12 +const TCP_REPAIR = 19 +const TCP_REPAIR_OPTIONS = 22 +const TCP_REPAIR_QUEUE = 20 +const TCP_REPAIR_WINDOW = 29 +const TCP_SAVED_SYN = 28 +const TCP_SAVE_SYN = 27 +const TCP_SYNCNT = 7 +const TCP_SYN_RECV = 3 +const TCP_SYN_SENT = 2 +const TCP_THIN_DUPACK = 17 +const TCP_THIN_LINEAR_TIMEOUTS = 16 +const TCP_TIMESTAMP = 24 +const TCP_TIME_WAIT = 6 +const TCP_TX_DELAY = 37 +const TCP_ULP = 31 +const TCP_USER_TIMEOUT = 18 +const TCP_WINDOW_CLAMP = 10 +const TCP_ZEROCOPY_RECEIVE = 35 + +const _TCP_NLA_PAD = 0 +const _TCP_NLA_BUSY = 1 +const _TCP_NLA_RWND_LIMITED = 2 +const _TCP_NLA_SNDBUF_LIMITED = 3 +const _TCP_NLA_DATA_SEGS_OUT = 4 +const _TCP_NLA_TOTAL_RETRANS = 5 +const _TCP_NLA_PACING_RATE = 6 +const _TCP_NLA_DELIVERY_RATE = 7 +const _TCP_NLA_SND_CWND = 8 +const _TCP_NLA_REORDERING = 9 +const _TCP_NLA_MIN_RTT = 10 +const _TCP_NLA_RECUR_RETRANS = 11 +const _TCP_NLA_DELIVERY_RATE_APP_LMT = 12 +const _TCP_NLA_SNDQ_SIZE = 13 +const _TCP_NLA_CA_STATE = 14 +const _TCP_NLA_SND_SSTHRESH = 15 +const _TCP_NLA_DELIVERED = 16 +const _TCP_NLA_DELIVERED_CE = 17 +const _TCP_NLA_BYTES_SENT = 18 +const _TCP_NLA_BYTES_RETRANS = 19 +const _TCP_NLA_DSACK_DUPS = 20 +const _TCP_NLA_REORD_SEEN = 21 +const _TCP_NLA_SRTT = 22 +const _TCP_NLA_TIMEOUT_REHASH = 23 +const _TCP_NLA_BYTES_NOTSENT = 24 +const _TCP_NLA_EDT = 25 +const _TCP_NLA_TTL = 26 + +type Tnfds_t = uint32 + +type Tpollfd = struct { + Ffd int32 + Fevents int16 + Frevents int16 +} + +func _cleanup(tls *TLS, p uintptr) { + var i int32 + var pfd uintptr + _, _ = i, pfd + pfd = p + i = 0 + for { + if !((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= -int32(1)) { + break + } + if (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= 0 { + X__syscall1(tls, int32(SYS_close), (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd) + } + goto _1 + _1: + ; + i++ + } +} + +func _mtime(tls *TLS) (r uint32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if Xclock_gettime(tls, int32(CLOCK_MONOTONIC), bp) < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSYS) { + Xclock_gettime(tls, CLOCK_REALTIME, bp) + } + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec)*uint32(1000) + uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000000)) +} + +func _start_tcp(tls *TLS, pfd uintptr, family int32, sa uintptr, sl Tsocklen_t, q uintptr, ql int32) (r1 int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r int32 + var _ /* mh at bp+24 */ Tmsghdr + _, _ = fd, r + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 16)) = [2]Tuint8_t{ + 0: uint8(ql >> int32(8)), + 1: uint8(ql), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 16, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: q, + Fiov_len: uint32(ql), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 24)) = Tmsghdr{ + Fmsg_name: sa, + Fmsg_namelen: sl, + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + fd = Xsocket(tls, family, Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = fd + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLOUT) + *(*int32)(unsafe.Pointer(bp + 20)) = int32(1) + if !(Xsetsockopt(tls, fd, int32(IPPROTO_TCP), int32(TCP_FASTOPEN_CONNECT), bp+20, uint32(4)) != 0) { + r = Xsendmsg(tls, fd, bp+24, Int32FromInt32(MSG_FASTOPEN)|Int32FromInt32(MSG_NOSIGNAL)) + if r == ql+int32(2) { + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLIN) + } + if r >= 0 { + return r + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + } + r = Xconnect(tls, fd, sa, sl) + if !(r != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + Xclose(tls, fd) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = -int32(1) + return -int32(1) +} + +func _step_mh(tls *TLS, mh uintptr, n Tsize_t) { + /* Adjust iovec in msghdr to skip first n bytes. */ + for (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0 && n >= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len { + n -= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov += 8 + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen-- + } + if !((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0) { + return + } + (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base = (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base + uintptr(n) + *(*Tsize_t)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov + 4)) -= n +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + +func X__res_msend_rc(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32, conf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v conf=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, conf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var alen, attempts, family, fd, i, j, next, nns, r, rcode, retry_interval, rlen, servfail_retry, timeout, v17, v6 int32 + var alen_buf, apos, iplit, pfd, qpos uintptr + var sl Tsocklen_t + var t0, t1, t2, v10 uint32 + var v1, v2, v3, v4 t__predefined_size_t + var v18 bool + var _ /* __cb at bp+164 */ t__ptcb + var _ /* cs at bp+160 */ int32 + var _ /* mh at bp+176 */ Tmsghdr + var _ /* mh at bp+204 */ Tmsghdr + var _ /* mh at bp+232 */ Tmsghdr + var _ /* ns at bp+76 */ [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + var _ /* sa at bp+48 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alen, alen_buf, apos, attempts, family, fd, i, iplit, j, next, nns, pfd, qpos, r, rcode, retry_interval, rlen, servfail_retry, sl, t0, t1, t2, timeout, v1, v10, v17, v18, v2, v3, v4, v6 + defer func() { + Xrealloc(tls, alen_buf, 0) + Xrealloc(tls, apos, 0) + Xrealloc(tls, pfd, 0) + Xrealloc(tls, qpos, 0) + }() + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 48)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp + 48)) = uint16(0) + *(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)) = [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + sl = uint32(16) + nns = 0 + family = int32(PF_INET) + v1 = uint32(nqueries+int32(2)) * 8 + pfd = Xrealloc(tls, pfd, v1) + v2 = uint32(nqueries) * 4 + qpos = Xrealloc(tls, qpos, v2) + v3 = uint32(nqueries) * 4 + apos = Xrealloc(tls, apos, v3) + v4 = uint32(nqueries) * 2 + alen_buf = Xrealloc(tls, alen_buf, v4) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+160) + timeout = int32(uint32(1000) * (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout) + attempts = int32((*Tresolvconf)(unsafe.Pointer(conf)).Fattempts) + nns = 0 + for { + if !(uint32(nns) < (*Tresolvconf)(unsafe.Pointer(conf)).Fnns) { + break + } + iplit = conf + uintptr(nns)*28 + if (*Taddress)(unsafe.Pointer(iplit)).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+76+uintptr(nns)*28+4, iplit+8, uint32(4)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[nns].Fsin.Fsin_port = Xhtons(tls, uint16(53)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[nns].Fsin.Fsin_family = uint16(PF_INET) + } else { + sl = uint32(28) + Xmemcpy(tls, bp+76+uintptr(nns)*28+8, iplit+8, uint32(16)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_port = Xhtons(tls, uint16(53)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_scope_id = (*Taddress)(unsafe.Pointer(iplit)).Fscopeid + v6 = Int32FromInt32(PF_INET6) + family = v6 + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_family = uint16(v6) + } + goto _5 + _5: + ; + nns++ + } + /* Get local address and open/bind a socket */ + fd = Xsocket(tls, family, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + /* Handle case where system lacks IPv6 support */ + if fd < 0 && family == int32(PF_INET6) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + i = 0 + for { + if !(i < nns && (*(*Taddress)(unsafe.Pointer(conf + uintptr(nns)*28))).Ffamily == int32(PF_INET6)) { + break + } + goto _7 + _7: + ; + i++ + } + if i == nns { + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + return -int32(1) + } + fd = Xsocket(tls, int32(PF_INET), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + family = int32(PF_INET) + sl = uint32(16) + } + /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ + if fd >= 0 && family == int32(PF_INET6) { + *(*int32)(unsafe.Pointer(bp)) = 0 + Xsetsockopt(tls, fd, int32(IPPROTO_IPV6), int32(IPV6_V6ONLY), bp, uint32(4)) + i = 0 + for { + if !(i < nns) { + break + } + if int32((*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[i].Fsin.Fsin_family) != int32(PF_INET) { + goto _8 + } + Xmemcpy(tls, bp+76+uintptr(i)*28+8+uintptr(12), bp+76+uintptr(i)*28+4, uint32(4)) + Xmemcpy(tls, bp+76+uintptr(i)*28+8, __ccgo_ts+942, uint32(12)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_family = uint16(PF_INET6) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_flowinfo = uint32(0) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_scope_id = uint32(0) + goto _8 + _8: + ; + i++ + } + } + (*(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 48))).Fsin.Fsin_family = uint16(family) + if fd < 0 || Xbind(tls, fd, bp+48, sl) < 0 { + if fd >= 0 { + Xclose(tls, fd) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + return -int32(1) + } + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + i = 0 + for { + if !(i < nqueries) { + break + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + goto _9 + _9: + ; + i++ + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Ffd = fd + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = int16(POLLIN) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), (nqueries+int32(1))*8))).Ffd = -int32(2) + __pthread_cleanup_push(tls, bp+164, __ccgo_fp(_cleanup), pfd) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + Xmemset(tls, alens, 0, uint32(4)*uint32(nqueries)) + retry_interval = timeout / attempts + next = 0 + v10 = _mtime(tls) + t2 = v10 + t0 = v10 + t1 = t2 - uint32(retry_interval) + for { + if !(t2-t0 < uint32(timeout)) { + break + } + /* This is the loop exit condition: that all queries + * have an accepted answer. */ + i = 0 + for { + if !(i < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) > 0) { + break + } + goto _12 + _12: + ; + i++ + } + if i == nqueries { + break + } + if t2-t1 >= uint32(retry_interval) { + /* Query all configured namservers in parallel */ + i = 0 + for { + if !(i < nqueries) { + break + } + if !(*(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0) { + j = 0 + for { + if !(j < nns) { + break + } + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+76+uintptr(j)*28, sl) + goto _14 + _14: + ; + j++ + } + } + goto _13 + _13: + ; + i++ + } + t1 = t2 + servfail_retry = int32(2) * nqueries + } + /* Wait for a response, or until time to retry */ + if Xpoll(tls, pfd, uint32(nqueries+int32(1)), int32(t1+uint32(retry_interval)-t2)) <= 0 { + goto _11 + } + for next < nqueries { + *(*[1]Tiovec)(unsafe.Pointer(bp + 8)) = [1]Tiovec{ + 0: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)), + Fiov_len: uint32(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 176)) = Tmsghdr{ + Fmsg_name: bp + 48, + Fmsg_namelen: sl, + Fmsg_iov: bp + 8, + Fmsg_iovlen: int32(1), + } + rlen = Xrecvmsg(tls, fd, bp+176, 0) + if rlen < 0 { + break + } + /* Ignore non-identifiable packets */ + if rlen < int32(4) { + continue + } + /* Ignore replies from addresses we didn't send to */ + j = 0 + for { + if !(j < nns && Xmemcmp(tls, bp+76+uintptr(j)*28, bp+48, sl) != 0) { + break + } + goto _15 + _15: + ; + j++ + } + if j == nns { + continue + } + /* Find which query this answer goes with, if any */ + i = next + for { + if !(i < nqueries && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4))))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4))))) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)) + 1))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)) + 1))))) { + break + } + goto _16 + _16: + ; + i++ + } + if i == nqueries { + continue + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0 { + continue + } + /* Only accept positive or negative responses; + * retry immediately on server failure, and ignore + * all other codes such as refusal. */ + switch int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)) + 3))) & Int32FromInt32(15) { + case 0: + fallthrough + case int32(3): + case int32(2): + if v18 = servfail_retry != 0; v18 { + v17 = servfail_retry + servfail_retry-- + } + if v18 && v17 != 0 { + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+76+uintptr(j)*28, sl) + } + fallthrough + default: + continue + } + /* Store answer in the right slot, or update next + * available temp slot if it's already in place. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = rlen + if i == next { + for { + if !(next < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(next)*4)) != 0) { + break + } + goto _19 + _19: + ; + next++ + } + } else { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)), *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)), uint32(rlen)) + } + /* Ignore further UDP if all slots full or TCP-mode */ + if next == nqueries { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = 0 + } + /* If answer is truncated (TC bit), fallback to TCP */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)) + 2)))&int32(2) != 0 || (*(*Tmsghdr)(unsafe.Pointer(bp + 176))).Fmsg_flags&int32(MSG_TRUNC) != 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = -int32(1) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), uintptr(0)) + r = _start_tcp(tls, pfd+uintptr(i)*8, family, bp+76+uintptr(j)*28, sl, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + if r >= 0 { + *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) = r + *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) = 0 + } + continue + } + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLOUT) != 0 { + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 28)) = [2]Tuint8_t{ + 0: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4)) >> int32(8)), + 1: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + } + *(*[2]Tiovec)(unsafe.Pointer(bp + 12)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 28, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), + Fiov_len: uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 204)) = Tmsghdr{ + Fmsg_iov: bp + 12, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+204, uint32(*(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)))) + r = Xsendmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+204, int32(MSG_NOSIGNAL)) + if r < 0 { + goto out + } + *(*int32)(unsafe.Pointer(qpos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) == *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))+int32(2) { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Fevents = int16(POLLIN) + } + } + goto _20 + _20: + ; + i++ + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLIN) != 0 { + *(*[2]Tiovec)(unsafe.Pointer(bp + 32)) = [2]Tiovec{ + 0: { + Fiov_base: alen_buf + uintptr(i)*2, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)), + Fiov_len: uint32(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 232)) = Tmsghdr{ + Fmsg_iov: bp + 32, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+232, uint32(*(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)))) + r = Xrecvmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+232, 0) + if r <= 0 { + goto out + } + *(*int32)(unsafe.Pointer(apos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < int32(2) { + goto _21 + } + alen = int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2 + 1))) + if alen < int32(13) { + goto out + } + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < alen+int32(2) && *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < asize+int32(2) { + goto _21 + } + rcode = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)) + 3))) & int32(15) + if rcode != 0 && rcode != int32(3) { + goto out + } + /* Storing the length here commits the accepted answer. + * Immediately close TCP socket so as not to consume + * resources we no longer need. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = alen + X__syscall1(tls, int32(SYS_close), (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + } + goto _21 + _21: + ; + i++ + } + goto _11 + _11: + ; + t2 = _mtime(tls) + } + goto out +out: + ; + __pthread_cleanup_pop(tls, bp+164, int32(1)) + /* Disregard any incomplete TCP results */ + i = 0 + for { + if !(i < nqueries) { + break + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = 0 + } + goto _22 + _22: + ; + i++ + } + return 0 +} + +func X__res_msend(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var _ /* conf at bp+0 */ Tresolvconf + if X__get_resolv_conf(tls, bp, uintptr(0), uint32(0)) < 0 { + return -int32(1) + } + return X__res_msend_rc(tls, nqueries, queries, qlens, answers, alens, asize, bp) +} + +func X__res_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + *(*uintptr)(unsafe.Pointer(bp)) = _msg + *(*int32)(unsafe.Pointer(bp + 4)) = _msglen + *(*uintptr)(unsafe.Pointer(bp + 8)) = _answer + *(*int32)(unsafe.Pointer(bp + 12)) = _anslen + var r, v1, v2 int32 + var _ /* buf at bp+16 */ [512]uint8 + _, _, _ = r, v1, v2 + if *(*int32)(unsafe.Pointer(bp + 12)) < int32(512) { + r = X__res_send(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), bp+16, int32(512)) + if r >= 0 { + if r < *(*int32)(unsafe.Pointer(bp + 12)) { + v1 = r + } else { + v1 = *(*int32)(unsafe.Pointer(bp + 12)) + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), bp+16, uint32(v1)) + } + return r + } + r = X__res_msend(tls, int32(1), bp, bp+4, bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 12))) + if r < 0 || !(*(*int32)(unsafe.Pointer(bp + 12)) != 0) { + v2 = -int32(1) + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 12)) + } + return v2 +} + +func Xres_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_send(tls, _msg, _msglen, _answer, _anslen) +} + +/* This is completely unused, and exists purely to satisfy broken apps. */ + +func X__res_state(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_res1)) +} + +var _res1 t__res_state + +func X__get_resolv_conf(tls *TLS, conf uintptr, search uintptr, search_sz Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v conf=%v search=%v search_sz=%v, (%v:)", tls, conf, search, search_sz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(656) + defer tls.Free(656) + var c, nns, v1, v13, v14, v17, v18, v2, v21, v22, v26, v27, v8, v9 int32 + var f, p uintptr + var l Tsize_t + var x, x1, x2, v5, v6, v7 uint32 + var v11, v20, v24, v4 bool + var _ /* _buf at bp+256 */ [256]uint8 + var _ /* _f at bp+512 */ TFILE + var _ /* line at bp+0 */ [256]int8 + var _ /* z at bp+648 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, f, l, nns, p, x, x1, x2, v1, v11, v13, v14, v17, v18, v2, v20, v21, v22, v24, v26, v27, v4, v5, v6, v7, v8, v9 + nns = 0 + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(1) + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(5) + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(2) + if search != 0 { + *(*int8)(unsafe.Pointer(search)) = 0 + } + f = X__fopen_rb_ca(tls, __ccgo_ts+1064, bp+512, bp+256, uint32(256)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + goto no_resolv_conf + default: + return -int32(1) + } + } + for Xfgets(tls, bp, int32(256), f) != 0 { + if !(Xstrchr(tls, bp, int32('\n')) != 0) && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + for cond := true; cond; cond = c != int32('\n') && c != -int32(1) { + c = Xgetc(tls, f) + } + continue + } + if v4 = !(Xstrncmp(tls, bp, __ccgo_ts+1081, uint32(7)) != 0); v4 { + v1 = int32((*(*[256]int8)(unsafe.Pointer(bp)))[int32(7)]) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + } + if v4 && v2 != 0 { + p = Xstrstr(tls, bp, __ccgo_ts+1089) + if p != 0 && BoolInt32(uint32(*(*int8)(unsafe.Pointer(p + 6)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(6) + x = Xstrtoul(tls, p, bp+648, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 648)) != p { + if x > uint32(15) { + v5 = uint32(15) + } else { + v5 = x + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = v5 + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1096) + if p != 0 && BoolInt32(uint32(*(*int8)(unsafe.Pointer(p + 9)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(9) + x1 = Xstrtoul(tls, p, bp+648, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 648)) != p { + if x1 > uint32(10) { + v6 = uint32(10) + } else { + v6 = x1 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = v6 + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1106) + if p != 0 && (BoolInt32(uint32(*(*int8)(unsafe.Pointer(p + 8)))-uint32('0') < uint32(10)) != 0 || int32(*(*int8)(unsafe.Pointer(p + 8))) == int32('.')) { + p += uintptr(8) + x2 = Xstrtoul(tls, p, bp+648, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 648)) != p { + if x2 > uint32(60) { + v7 = uint32(60) + } else { + v7 = x2 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = v7 + } + } + continue + } + if v11 = !(Xstrncmp(tls, bp, __ccgo_ts+1115, uint32(10)) != 0); v11 { + v8 = int32((*(*[256]int8)(unsafe.Pointer(bp)))[int32(10)]) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + if v11 && v9 != 0 { + if nns >= int32(MAXNS) { + continue + } + p = bp + uintptr(11) + for { + v13 = int32(*(*int8)(unsafe.Pointer(p))) + v14 = BoolInt32(v13 == int32(' ') || uint32(v13)-uint32('\t') < uint32(5)) + goto _15 + _15: + if !(v14 != 0) { + break + } + goto _12 + _12: + ; + p++ + } + *(*uintptr)(unsafe.Pointer(bp + 648)) = p + for { + if v20 = *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 648)))) != 0; v20 { + v17 = int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 648))))) + v18 = BoolInt32(v17 == int32(' ') || uint32(v17)-uint32('\t') < uint32(5)) + goto _19 + _19: + } + if !(v20 && !(v18 != 0)) { + break + } + goto _16 + _16: + ; + *(*uintptr)(unsafe.Pointer(bp + 648))++ + } + *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 648)))) = 0 + if X__lookup_ipliteral(tls, conf+uintptr(nns)*28, p, PF_UNSPEC) > 0 { + nns++ + } + continue + } + if !(search != 0) { + continue + } + if v24 = Xstrncmp(tls, bp, __ccgo_ts+1126, uint32(6)) != 0 && Xstrncmp(tls, bp, __ccgo_ts+1133, uint32(6)) != 0; !v24 { + v21 = int32((*(*[256]int8)(unsafe.Pointer(bp)))[int32(6)]) + v22 = BoolInt32(v21 == int32(' ') || uint32(v21)-uint32('\t') < uint32(5)) + goto _23 + _23: + } + if v24 || !(v22 != 0) { + continue + } + p = bp + uintptr(7) + for { + v26 = int32(*(*int8)(unsafe.Pointer(p))) + v27 = BoolInt32(v26 == int32(' ') || uint32(v26)-uint32('\t') < uint32(5)) + goto _28 + _28: + if !(v27 != 0) { + break + } + goto _25 + _25: + ; + p++ + } + l = Xstrlen(tls, p) + /* This can never happen anyway with chosen buffer sizes. */ + if l >= search_sz { + continue + } + Xmemcpy(tls, search, p, l+uint32(1)) + } + X__fclose_ca(tls, f) + goto no_resolv_conf +no_resolv_conf: + ; + if !(nns != 0) { + X__lookup_ipliteral(tls, conf, __ccgo_ts+1140, PF_UNSPEC) + nns = int32(1) + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fnns = uint32(nns) + return 0 +} + +func Xsend(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsendto(tls, fd, buf, len1, flags, uintptr(0), uint32(0)) +} + +func Xsendmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v, (%v:)", tls, fd, msgvec, vlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_sendmmsg), fd, int32(msgvec), int32(vlen), int32(flags), 0, 0))) +} + +func Xsendmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_sendmsg) + v2 = int32(__SC_sendmsg) + v3 = int32(1) + v4 = fd + v5 = int32(msg) + v6 = flags + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xsendto(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen Tsocklen_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_sendto) + v2 = int32(__SC_sendto) + v3 = int32(1) + v4 = fd + v5 = int32(buf) + v6 = int32(len1) + v7 = flags + v8 = int32(addr) + v9 = int32(alen) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xendservent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetservent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } +} + +func Xgetservent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xsetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen Tsocklen_t) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r, r1, v1, v10, v13, v14, v15, v2, v22, v24, v25, v26, v3, v33 int32 + var s Ttime_t + var tv uintptr + var us Tsuseconds_t + var v12 uint64 + var v16, v17, v18, v19, v20, v21, v27, v28, v29, v30, v31, v32, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, s, tv, us, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_setsockopt) + v2 = int32(__SC_setsockopt) + v3 = 0 + v4 = fd + v5 = level + v6 = optname + v7 = int32(optval) + v8 = int32(optlen) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 104)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp+104), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 128)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+128)) + } + v10 = r + goto _11 +_11: + r1 = v10 + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if optlen < uint32(16) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + tv = optval + s = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + us = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + if !((uint64(us)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v12 = uint64(us) + } else { + v12 = uint64(0x7fffffff) + (0+uint64(us))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 48)) = [2]int32{ + 0: int32(s), + 1: int32(v12), + } + v13 = int32(SYS_setsockopt) + v14 = int32(__SC_setsockopt) + v15 = 0 + v16 = fd + v17 = level + v18 = optname + v19 = int32(bp + 48) + v20 = int32(Uint32FromInt32(2) * Uint32FromInt64(4)) + v21 = int32(Int32FromInt32(0)) + if v15 != 0 { + r = ___syscall_cp(tls, v13, v16, v17, v18, v19, v20, v21) + } else { + r = X__syscall6(tls, v13, v16, v17, v18, v19, v20, v21) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v22 = r + goto _23 + } + if v15 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 104)) = [6]int32{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v14, int32(bp+104), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 128)) = [6]int32{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = X__syscall2(tls, int32(SYS_socketcall), v14, int32(bp+128)) + } + v22 = r + goto _23 + _23: + r1 = v22 + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if false { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v24 = int32(SYS_setsockopt) + v25 = int32(__SC_setsockopt) + v26 = 0 + v27 = fd + v28 = level + v29 = optname + v30 = int32(optval) + v31 = int32(optlen) + v32 = int32(Int32FromInt32(0)) + if v26 != 0 { + r = ___syscall_cp(tls, v24, v27, v28, v29, v30, v31, v32) + } else { + r = X__syscall6(tls, v24, v27, v28, v29, v30, v31, v32) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v33 = r + goto _34 + } + if v26 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 104)) = [6]int32{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v25, int32(bp+104), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 128)) = [6]int32{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = X__syscall2(tls, int32(SYS_socketcall), v25, int32(bp+128)) + } + v33 = r + goto _34 + _34: + r1 = v33 + break + } + } + } + return X__syscall_ret(tls, uint32(r1)) +} + +func Xshutdown(tls *TLS, fd int32, how int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v how=%v, (%v:)", tls, fd, how, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var r, v1, v10, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_shutdown) + v2 = int32(__SC_shutdown) + v3 = 0 + v4 = fd + v5 = how + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 24)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+24)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint32(v10)) +} + +func Xsockatmark(tls *TLS, s int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* ret at bp+0 */ int32 + if Xioctl(tls, s, int32(SIOCATMARK), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xsocket(tls *TLS, domain int32, type1 int32, protocol int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v, (%v:)", tls, domain, type1, protocol, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, s, v1, v10, v12, v13, v14, v2, v21, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, s, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socket) + v2 = int32(__SC_socket) + v3 = 0 + v4 = domain + v5 = type1 + v6 = protocol + v7 = int32(Int32FromInt32(0)) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 48)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp+48), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 72)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+72)) + } + v10 = r + goto _11 +_11: + s = v10 + if (s == -int32(EINVAL) || s == -int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socket) + v13 = int32(__SC_socket) + v14 = 0 + v15 = domain + v16 = int32(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = protocol + v18 = int32(Int32FromInt32(0)) + v19 = int32(Int32FromInt32(0)) + v20 = int32(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, v12, v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, v12, v15, v16, v17, v18, v19, v20) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 48)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v13, int32(bp+48), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 72)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int32(SYS_socketcall), v13, int32(bp+72)) + } + v21 = r + goto _22 + _22: + s = v21 + if s < 0 { + return X__syscall_ret(tls, uint32(s)) + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), s, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), s, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return X__syscall_ret(tls, uint32(s)) +} + +func Xsocketpair(tls *TLS, domain int32, type1 int32, protocol int32, fd uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v fd=%v, (%v:)", tls, domain, type1, protocol, fd, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, r1, v1, v10, v12, v13, v14, v2, v21, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socketpair) + v2 = int32(__SC_socketpair) + v3 = 0 + v4 = domain + v5 = type1 + v6 = protocol + v7 = int32(fd) + v8 = int32(Int32FromInt32(0)) + v9 = int32(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, v1, v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, v1, v4, v5, v6, v7, v8, v9) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 48)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v2, int32(bp+48), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 72)) = [6]int32{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int32(SYS_socketcall), v2, int32(bp+72)) + } + v10 = r + goto _11 +_11: + r1 = X__syscall_ret(tls, uint32(v10)) + if r1 < 0 && (*(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINVAL) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socketpair) + v13 = int32(__SC_socketpair) + v14 = 0 + v15 = domain + v16 = int32(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = protocol + v18 = int32(fd) + v19 = int32(Int32FromInt32(0)) + v20 = int32(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, v12, v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, v12, v15, v16, v17, v18, v19, v20) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int32)(unsafe.Pointer(bp + 48)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int32(SYS_socketcall), v13, int32(bp+48), 0, 0, 0, 0) + } else { + *(*[6]int32)(unsafe.Pointer(bp + 72)) = [6]int32{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int32(SYS_socketcall), v13, int32(bp+72)) + } + v21 = r + goto _22 + _22: + r1 = X__syscall_ret(tls, uint32(v21)) + if r1 < 0 { + return r1 + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return r1 +} + +const SHADOW = "/etc/shadow" + +type Tgroup = struct { + Fgr_name uintptr + Fgr_passwd uintptr + Fgr_gid Tgid_t + Fgr_mem uintptr +} + +type Tspwd = struct { + Fsp_namp uintptr + Fsp_pwdp uintptr + Fsp_lstchg int32 + Fsp_min int32 + Fsp_max int32 + Fsp_warn int32 + Fsp_inact int32 + Fsp_expire int32 + Fsp_flag uint32 +} + +func Xfgetgrent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgrent_a(tls, f, uintptr(unsafe.Pointer(&_gr)), uintptr(unsafe.Pointer(&_line1)), bp+4, uintptr(unsafe.Pointer(&_mem)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _line1 uintptr + +var _mem uintptr + +var _gr Tgroup + +func Xfgetpwent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+4 */ uintptr + var _ /* size at bp+0 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp)) = uint32(0) + X__getpwent_a(tls, f, uintptr(unsafe.Pointer(&_pw)), uintptr(unsafe.Pointer(&_line2)), bp, bp+4) + return *(*uintptr)(unsafe.Pointer(bp + 4)) +} + +var _line2 uintptr + +var _pw Tpasswd + +const GETGRBYGID = 3 +const GETGRBYNAME = 2 +const GETINITGR = 15 +const GETPWBYNAME = 0 +const GETPWBYUID = 1 +const GRFOUND = 1 +const GRGID = 4 +const GRMEMCNT = 5 +const GRNAMELEN = 2 +const GRPASSWDLEN = 3 +const GRVERSION = 0 +const GR_LEN = 6 +const INITGRFOUND = 1 +const INITGRNGRPS = 2 +const INITGRVERSION = 0 +const INITGR_LEN = 3 +const NSCDVERSION = 2 +const PWDIRLEN = 7 +const PWFOUND = 1 +const PWGECOSLEN = 6 +const PWGID = 5 +const PWNAMELEN = 2 +const PWPASSWDLEN = 3 +const PWSHELLLEN = 8 +const PWUID = 4 +const PWVERSION = 0 +const PW_LEN = 9 +const REQKEYLEN = 2 +const REQTYPE = 1 +const REQVERSION = 0 +const REQ_LEN = 3 + +func _itoa1(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*int8)(unsafe.Pointer(v1)) = 0 + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*int8)(unsafe.Pointer(v2)) = int8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getgr_a(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gid=%v gr=%v buf=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, name, gid, gr, buf, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var f, key, ptr, tmp, tmp1 uintptr + var grlist_len, len1 Tsize_t + var i, req, v10 Tint32_t + var rv, v1, v2, v4, v8 int32 + var v5, v6 Tuint32_t + var _ /* cs at bp+0 */ int32 + var _ /* gidbuf at bp+28 */ [11]int8 + var _ /* groupbuf at bp+4 */ [6]Tint32_t + var _ /* name_len at bp+44 */ Tuint32_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, grlist_len, i, key, len1, ptr, req, rv, tmp, tmp1, v1, v10, v2, v4, v5, v6, v8 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + f = Xfopen(tls, __ccgo_ts+1150, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getgrent_a(tls, f, gr, buf, size, mem, nmem, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_name) != 0) || !(name != 0) && (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_gid == gid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = int32(GETGRBYNAME) + } else { + v2 = int32(GETGRBYGID) + } + req = v2 + *(*[6]Tint32_t)(unsafe.Pointer(bp + 4)) = [6]Tint32_t{} + len1 = uint32(0) + grlist_len = uint32(0) + *(*[11]int8)(unsafe.Pointer(bp + 28)) = [11]int8{} + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + if name != 0 { + key = name + } else { + if gid < uint32(0) || gid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa1(tls, bp+28, gid) + } + f = X__nscd_query(tls, req, key, bp+4, uint32(24), bp+40) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] != 0) || !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) > uint32(0xffffffff)-uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] + (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + i = 0 + for { + if !(i < (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]) { + break + } + if Xfread(tls, bp+44, uint32(4), uint32(1), f) < uint32(1) { + if Xferror(tls, f) != 0 { + v4 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v4 = int32(EIO) + } + rv = v4 + goto cleanup_f + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + v5 = *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + v6 = v5>>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< uint32(0xffffffff)-grlist_len || *(*Tuint32_t)(unsafe.Pointer(bp + 44)) > uint32(0xffffffff)-len1 { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 += *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + grlist_len += *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + goto _3 + _3: + ; + i++ + } + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint32(1), f) != 0) { + if Xferror(tls, f) != 0 { + v8 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v8 = int32(EIO) + } + rv = v8 + goto cleanup_f + } + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > *(*Tsize_t)(unsafe.Pointer(nmem)) { + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > Uint32FromUint32(0xffffffff)/Uint32FromInt64(4) { + rv = int32(ENOMEM) + goto cleanup_f + } + tmp1 = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(mem)), uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+Int32FromInt32(1))*uint32(4)) + if !(tmp1 != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(mem)) = tmp1 + *(*Tsize_t)(unsafe.Pointer(nmem)) = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] + int32(1)) + } + if (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = *(*uintptr)(unsafe.Pointer(buf)) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + ptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) + i = Int32FromInt32(0) + for { + if !(ptr != *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem))))+uintptr(grlist_len)) { + break + } + if !(*(*int8)(unsafe.Pointer(ptr)) != 0) { + i++ + v10 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v10)*4)) = ptr + uintptr(1) + } + goto _9 + _9: + ; + ptr++ + } + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(i)*4)) = uintptr(0) + if i != (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] { + rv = int32(EIO) + goto cleanup_f + } + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = (*Tgroup)(unsafe.Pointer(gr)).Fgr_name + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRGID)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + if *(*int8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*int8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name) != 0 || !(name != 0) && gid != (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = gr + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getgr_r(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var rv int32 + var _ /* cs at bp+16 */ int32 + var _ /* len at bp+4 */ Tsize_t + var _ /* line at bp+0 */ uintptr + var _ /* mem at bp+8 */ uintptr + var _ /* nmem at bp+12 */ Tsize_t + _, _ = i, rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 12)) = uint32(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+16) + rv = X__getgr_a(tls, name, gid, gr, bp, bp+4, bp+8, bp+12, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 4))+(*(*Tsize_t)(unsafe.Pointer(bp + 12))+uint32(1))*uint32(4)+uint32(32) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + buf += uintptr((uint32(16) - uint32(buf)) % uint32(16)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = buf + buf += uintptr((*(*Tsize_t)(unsafe.Pointer(bp + 12)) + uint32(1)) * uint32(4)) + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 4))) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = uintptr(int32((*Tgroup)(unsafe.Pointer(gr)).Fgr_name)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = uintptr(int32((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + i = uint32(0) + for { + if !(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*4)) != 0) { + break + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) = uintptr(int32(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*4)))-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + goto _1 + _1: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) = uintptr(0) + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 16)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrnam_r(tls *TLS, name uintptr, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, name, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, name, uint32(0), gr, buf, size, res) +} + +func Xgetgrgid_r(tls *TLS, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, gid, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, uintptr(0), gid, gr, buf, size, res) +} + +var _f1 uintptr +var _line3 uintptr +var _mem1 uintptr +var _gr1 Tgroup + +func Xsetgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f1 != 0 { + Xfclose(tls, _f1) + } + _f1 = uintptr(0) +} + +func Xgetgrent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + if !(_f1 != 0) { + _f1 = Xfopen(tls, __ccgo_ts+1150, __ccgo_ts+315) + } + if !(_f1 != 0) { + return uintptr(0) + } + X__getgrent_a(tls, _f1, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrgid(tls *TLS, gid Tgid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgr_a(tls, uintptr(0), gid, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgr_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetgrent(tls) +} + +func _atou(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getgrent_a(tls *TLS, f uintptr, gr uintptr, line uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v gr=%v line=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, f, gr, line, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v13, v14 Tsize_t + var l, v2 Tssize_t + var mems, v12, v4, v5, v6, v7, v8, v9 uintptr + var rv, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, mems, rv, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int32(1)))) = 0 + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v6)) = 0 + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v8)) = 0 + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = _atou(tls, bp) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v9)) = 0 + mems = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + *(*Tsize_t)(unsafe.Pointer(nmem)) = BoolUint32(!!(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0)) + for { + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + *(*Tsize_t)(unsafe.Pointer(nmem))++ + } + goto _10 + _10: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(mem))) + *(*uintptr)(unsafe.Pointer(mem)) = Xcalloc(tls, uint32(4), *(*Tsize_t)(unsafe.Pointer(nmem))+uint32(1)) + if !(*(*uintptr)(unsafe.Pointer(mem)) != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + if *(*int8)(unsafe.Pointer(mems)) != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = mems + *(*uintptr)(unsafe.Pointer(bp)) = mems + i = Uint32FromInt32(0) + for { + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v12)) = 0 + i++ + v13 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v13)*4)) = *(*uintptr)(unsafe.Pointer(bp)) + } + goto _11 + _11: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + i++ + v14 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v14)*4)) = uintptr(0) + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + goto end +end: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = gr + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrouplist(tls *TLS, user uintptr, gid Tgid_t, groups uintptr, ngroups uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v user=%v gid=%v groups=%v ngroups=%v, (%v:)", tls, user, gid, groups, ngroups, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, nscdbuf, v1, v10, v13 uintptr + var i, n, v12, v9 Tssize_t + var nbytes Tsize_t + var nlim, ret, rv, v14, v6 int32 + var v3, v4 Tuint32_t + var _ /* buf at bp+36 */ uintptr + var _ /* gr at bp+0 */ Tgroup + var _ /* mem at bp+40 */ uintptr + var _ /* nmem at bp+44 */ Tsize_t + var _ /* res at bp+16 */ uintptr + var _ /* resp at bp+24 */ [3]Tint32_t + var _ /* size at bp+48 */ Tsize_t + var _ /* swap at bp+20 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, n, nbytes, nlim, nscdbuf, ret, rv, v1, v10, v12, v13, v14, v3, v4, v6, v9 + ret = -int32(1) + n = int32(1) + *(*int32)(unsafe.Pointer(bp + 20)) = 0 + nscdbuf = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 36)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 44)) = uint32(0) + nlim = *(*int32)(unsafe.Pointer(ngroups)) + if nlim >= int32(1) { + v1 = groups + groups += 4 + *(*Tgid_t)(unsafe.Pointer(v1)) = gid + } + f = X__nscd_query(tls, int32(GETINITGR), user, bp+24, uint32(12), bp+20) + if !(f != 0) { + goto cleanup + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRFOUND)] != 0 { + nscdbuf = Xcalloc(tls, uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]), uint32(4)) + if !(nscdbuf != 0) { + goto cleanup + } + nbytes = uint32(4) * uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]) + if nbytes != 0 && !(Xfread(tls, nscdbuf, nbytes, uint32(1), f) != 0) { + if !(Xferror(tls, f) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + } + goto cleanup + } + if *(*int32)(unsafe.Pointer(bp + 20)) != 0 { + i = 0 + for { + if !(i < (*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]) { + break + } + v3 = *(*Tuint32_t)(unsafe.Pointer(nscdbuf + uintptr(i)*4)) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3< nlim { + v14 = -int32(1) + } else { + v14 = n + } + ret = v14 + *(*int32)(unsafe.Pointer(ngroups)) = n + goto cleanup +cleanup: + ; + if f != 0 { + Xfclose(tls, f) + } + Xfree(tls, nscdbuf) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 36))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) + return ret +} + +func _itoa2(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*int8)(unsafe.Pointer(v1)) = 0 + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*int8)(unsafe.Pointer(v2)) = int8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getpw_a(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, key, tmp uintptr + var len1 Tsize_t + var req Tint32_t + var rv, v1, v2, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* passwdbuf at bp+8 */ [9]Tint32_t + var _ /* uidbuf at bp+44 */ [11]int8 + _, _, _, _, _, _, _, _, _ = f, key, len1, req, rv, tmp, v1, v2, v3 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + f = Xfopen(tls, __ccgo_ts+1161, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getpwent_a(tls, f, pw, buf, size, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_name) != 0) || !(name != 0) && (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_uid == uid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = GETPWBYNAME + } else { + v2 = int32(GETPWBYUID) + } + req = v2 + *(*[9]Tint32_t)(unsafe.Pointer(bp + 8)) = [9]Tint32_t{} + len1 = uint32(0) + *(*[11]int8)(unsafe.Pointer(bp + 44)) = [11]int8{} + if name != 0 { + key = name + } else { + /* uid outside of this range can't be queried with the + * nscd interface, but might happen if uid_t ever + * happens to be a larger type (this is not true as of + * now) + */ + if uid < uint32(0) || uid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa2(tls, bp+44, uid) + } + *(*[1]int32)(unsafe.Pointer(bp)) = [1]int32{} + f = X__nscd_query(tls, req, key, bp+8, uint32(36), bp) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + /* A zero length response from nscd is invalid. We ignore + * invalid responses and just report an error, rather than + * trying to do something with them. + */ + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) >= Uint32FromUint32(0xffffffff)/Uint32FromInt32(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint32(1), f) != 0) { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = int32(EIO) + } + rv = v3 + goto cleanup_f + } + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWUID)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGID)]) + /* Don't assume that nscd made sure to null terminate strings. + * It's supposed to, but malicious nscd should be ignored + * rather than causing a crash. + */ + if *(*int8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*int8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr(-Int32FromInt32(1)))) != 0 || *(*int8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr(-Int32FromInt32(1)))) != 0 || *(*int8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name) != 0 || !(name != 0) && uid != (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = pw + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getpw_r(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rv int32 + var _ /* cs at bp+8 */ int32 + var _ /* len at bp+4 */ Tsize_t + var _ /* line at bp+0 */ uintptr + _ = rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + rv = X__getpw_a(tls, name, uid, pw, bp, bp+4, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 4)) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 4))) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_name)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetpwnam_r(tls *TLS, name uintptr, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, name, uint32(0), pw, buf, size, res) +} + +func Xgetpwuid_r(tls *TLS, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, uintptr(0), uid, pw, buf, size, res) +} + +var _f2 uintptr +var _line4 uintptr +var _pw1 Tpasswd +var _size Tsize_t + +func Xsetpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f2 != 0 { + Xfclose(tls, _f2) + } + _f2 = uintptr(0) +} + +func Xgetpwent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if !(_f2 != 0) { + _f2 = Xfopen(tls, __ccgo_ts+1161, __ccgo_ts+315) + } + if !(_f2 != 0) { + return uintptr(0) + } + X__getpwent_a(tls, _f2, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwuid(tls *TLS, uid Tuid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, uintptr(0), uid, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetpwent(tls) +} + +func _atou1(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getpwent_a(tls *TLS, f uintptr, pw uintptr, line uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pw=%v line=%v size=%v res=%v, (%v:)", tls, f, pw, line, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v2 Tssize_t + var rv, v3 int32 + var v10, v11, v12, v13, v14, v4, v5, v6, v7, v8, v9 uintptr + var _ /* cs at bp+4 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = l, rv, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + pw = uintptr(0) + break + } + *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int32(1)))) = 0 + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v6)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v8)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = _atou1(tls, bp) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v9)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = _atou1(tls, bp) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v10 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v10)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = *(*uintptr)(unsafe.Pointer(bp)) + v11 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v11 + if !(v11 != 0) { + goto _1 + } + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v12)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = *(*uintptr)(unsafe.Pointer(bp)) + v13 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v13 + if !(v13 != 0) { + goto _1 + } + v14 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*int8)(unsafe.Pointer(v14)) = 0 + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = pw + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xsetspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetspent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xlckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xulckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +var _addr = struct { + Fsun_family int16 + Fsun_path [21]int8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [21]int8{'/', 'v', 'a', 'r', '/', 'r', 'u', 'n', '/', 'n', 's', 'c', 'd', '/', 's', 'o', 'c', 'k', 'e', 't'}, +} + +func X__nscd_query(tls *TLS, req Tint32_t, key uintptr, buf uintptr, len1 Tsize_t, swap uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v req=%v key=%v buf=%v len1=%v swap=%v, (%v:)", tls, req, key, buf, len1, swap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var errno_save, fd int32 + var f, v1 uintptr + var i Tsize_t + var v3, v4, v7, v8 Tuint32_t + var _ /* msg at bp+28 */ Tmsghdr + var _ /* req_buf at bp+16 */ [3]Tint32_t + _, _, _, _, _, _, _, _, _ = errno_save, f, fd, i, v1, v3, v4, v7, v8 + f = uintptr(0) + *(*[3]Tint32_t)(unsafe.Pointer(bp + 16)) = [3]Tint32_t{ + 0: int32(NSCDVERSION), + 1: req, + 2: int32(Xstrnlen(tls, key, uint32(LOGIN_NAME_MAX)) + uint32(1)), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 16, + Fiov_len: uint32(12), + }, + 1: { + Fiov_base: key, + Fiov_len: Xstrlen(tls, key) + uint32(1), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 28)) = Tmsghdr{ + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + *(*int32)(unsafe.Pointer(swap)) = 0 + goto retry +retry: + ; + Xmemset(tls, buf, 0, len1) + *(*Tint32_t)(unsafe.Pointer(buf)) = int32(NSCDVERSION) + fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if fd < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + f = Xfopen(tls, __ccgo_ts+1173, __ccgo_ts+1183) + if f != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + } + return f + } + return uintptr(0) + } + v1 = Xfdopen(tls, fd, __ccgo_ts+1186) + f = v1 + if !(v1 != 0) { + Xclose(tls, fd) + return uintptr(0) + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 16)))[int32(2)] > int32(LOGIN_NAME_MAX) { + return f + } + if Xconnect(tls, fd, uintptr(unsafe.Pointer(&_addr)), uint32(24)) < 0 { + /* If there isn't a running nscd we simulate a "not found" + * result and the caller is responsible for calling + * fclose on the (unconnected) socket. The value of + * errno must be left unchanged in this case. */ + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ECONNREFUSED) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + return f + } + goto error + } + if Xsendmsg(tls, fd, bp+28, int32(MSG_NOSIGNAL)) < 0 { + goto error + } + if !(Xfread(tls, buf, len1, uint32(1), f) != 0) { + /* If the VERSION entry mismatches nscd will disconnect. The + * most likely cause is that the endianness mismatched. So, we + * byteswap and try once more. (if we already swapped, just + * fail out) + */ + if Xferror(tls, f) != 0 { + goto error + } + if !(*(*int32)(unsafe.Pointer(swap)) != 0) { + Xfclose(tls, f) + i = uint32(0) + for { + if !(i < Uint32FromInt64(12)/Uint32FromInt64(4)) { + break + } + v3 = uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 16)))[i]) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7< %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var r, v1, v3, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = i, r, v1, v3, v4, v5 + Xflockfile(tls, f) + v1 = Xfprintf(tls, f, __ccgo_ts+1188, VaList(bp+8, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd, (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid)) + r = v1 + if v1 < 0 { + goto done + } + if (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem != 0 { + i = uint32(0) + for { + if !(*(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) != 0) { + break + } + if i != 0 { + v4 = __ccgo_ts + 1198 + } else { + v4 = __ccgo_ts + } + v3 = Xfprintf(tls, f, __ccgo_ts+1200, VaList(bp+8, v4, *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)))) + r = v3 + if v3 < 0 { + goto done + } + goto _2 + _2: + ; + i++ + } + } + r = Xfputc(tls, int32('\n'), f) + goto done +done: + ; + Xfunlockfile(tls, f) + if r < 0 { + v5 = -int32(1) + } else { + v5 = 0 + } + return v5 +} + +func Xputpwent(tls *TLS, pw uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pw=%v f=%v, (%v:)", tls, pw, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var v1 int32 + _ = v1 + if Xfprintf(tls, f, __ccgo_ts+1205, VaList(bp+8, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xputspent(tls *TLS, sp uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sp=%v f=%v, (%v:)", tls, sp, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1, v10, v11, v12, v13, v14, v15, v16, v4, v5, v6, v7, v8, v9 int32 + var v17 uint32 + var v2, v3 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8, v9 + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp != 0 { + v2 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp + } else { + v2 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp != 0 { + v3 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp + } else { + v3 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == -int32(1) { + v4 = 0 + } else { + v4 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == -int32(1) { + v5 = 0 + } else { + v5 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == -int32(1) { + v6 = 0 + } else { + v6 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == -int32(1) { + v7 = 0 + } else { + v7 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_min + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == -int32(1) { + v8 = 0 + } else { + v8 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == -int32(1) { + v9 = 0 + } else { + v9 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_max + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == -int32(1) { + v10 = 0 + } else { + v10 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == -int32(1) { + v11 = 0 + } else { + v11 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == -int32(1) { + v12 = 0 + } else { + v12 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == -int32(1) { + v13 = 0 + } else { + v13 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == -int32(1) { + v14 = 0 + } else { + v14 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == -int32(1) { + v15 = 0 + } else { + v15 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint32(-Int32FromInt32(1)) { + v16 = 0 + } else { + v16 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint32(-Int32FromInt32(1)) { + v17 = uint32(0) + } else { + v17 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag + } + if Xfprintf(tls, f, __ccgo_ts+1227, VaList(bp+8, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func X__rand48_step(tls *TLS, xi uintptr, lc uintptr) (r Tuint64_t) { + if __ccgo_strace { + trc("tls=%v xi=%v lc=%v, (%v:)", tls, xi, lc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, x Tuint64_t + _, _ = a, x + x = uint64(uint32(*(*uint16)(unsafe.Pointer(xi)))|(uint32(*(*uint16)(unsafe.Pointer(xi + 1*2)))+0)<> int32(16)) + *(*uint16)(unsafe.Pointer(xi + 2*2)) = uint16(x >> int32(32)) + return x & uint64(0xffffffffffff) +} + +func Xerand48(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* x at bp+0 */ struct { + Ff [0]float64 + Fu Tuint64_t + } + *(*struct { + Ff [0]float64 + Fu Tuint64_t + })(unsafe.Pointer(bp)) = struct { + Ff [0]float64 + Fu Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp)) = uint64(0x3ff0000000000000) | X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2)< %v", r) }() + } + return Xerand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xlcong48(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), p, uint32(14)) +} + +func Xnrand48(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> int32(17)) +} + +func Xlrand48(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xjrand48(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> Int32FromInt32(16)) +} + +func Xmrand48(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xjrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +var _seed Tuint64_t + +func Xsrand(tls *TLS, s uint32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + } + _seed = uint64(s - uint32(1)) +} + +func Xrand(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + _seed = uint64(6364136223846793005)*_seed + uint64(1) + return int32(_seed >> int32(33)) +} + +func _temper(tls *TLS, x uint32) (r uint32) { + x ^= x >> int32(11) + x ^= x << int32(7) & uint32(0x9D2C5680) + x ^= x << int32(15) & uint32(0xEFC60000) + x ^= x >> int32(18) + return x +} + +func Xrand_r(tls *TLS, seed uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + v1 = *(*uint32)(unsafe.Pointer(seed))*Uint32FromInt32(1103515245) + Uint32FromInt32(12345) + *(*uint32)(unsafe.Pointer(seed)) = v1 + return int32(_temper(tls, v1) / uint32(2)) +} + +/* +this code uses the same lagged fibonacci generator as the +original bsd random implementation except for the seeding +which was broken in the original +*/ + +var _init = [32]Tuint32_t{ + 1: uint32(0x5851f42d), + 2: uint32(0xc0b18ccf), + 3: uint32(0xcbb5f646), + 4: uint32(0xc7033129), + 5: uint32(0x30705b04), + 6: uint32(0x20fd5db4), + 7: uint32(0x9a8b7f78), + 8: uint32(0x502959d8), + 9: uint32(0xab894868), + 10: uint32(0x6c0356a7), + 11: uint32(0x88cdb7ff), + 12: uint32(0xb477d43f), + 13: uint32(0x70a3a52b), + 14: uint32(0xa8e4baf1), + 15: uint32(0xfd8341fc), + 16: uint32(0x8ae16fd9), + 17: uint32(0x742d2f7a), + 18: uint32(0x0d1f0796), + 19: uint32(0x76035e09), + 20: uint32(0x40f7702c), + 21: uint32(0x6fa72ca5), + 22: uint32(0xaaa84157), + 23: uint32(0x58a0df74), + 24: uint32(0xc74a0364), + 25: uint32(0xae533cc4), + 26: uint32(0x04185faf), + 27: uint32(0x6de3b115), + 28: uint32(0x0cab8628), + 29: uint32(0xf043bfa4), + 30: uint32(0x398150e9), + 31: uint32(0x37521657), +} + +var _n = int32(31) +var _i = int32(3) +var _j = int32(0) +var _x1 = uintptr(unsafe.Pointer(&_init)) + uintptr(1)*4 +var _lock3 [1]int32 + +func _lcg31(tls *TLS, x Tuint32_t) (r Tuint32_t) { + return (uint32(1103515245)*x + uint32(12345)) & uint32(0x7fffffff) +} + +func _lcg64(tls *TLS, x Tuint64_t) (r Tuint64_t) { + return uint64(6364136223846793005)*x + uint64(1) +} + +func _savestate(tls *TLS) (r uintptr) { + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) = uint32(_n<> int32(16)) + _i = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) >> Int32FromInt32(8) & uint32(0xff)) + _j = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) & uint32(0xff)) +} + +func ___srandom(tls *TLS, seed uint32) { + var k, v1 int32 + var s Tuint64_t + _, _, _ = k, s, v1 + s = uint64(seed) + if _n == 0 { + *(*Tuint32_t)(unsafe.Pointer(_x1)) = uint32(s) + return + } + if _n == int32(31) || _n == int32(7) { + v1 = int32(3) + } else { + v1 = int32(1) + } + _i = v1 + _j = 0 + k = 0 + for { + if !(k < _n) { + break + } + s = _lcg64(tls, s) + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(k)*4)) = uint32(s >> int32(32)) + goto _2 + _2: + ; + k++ + } + /* make sure x contains at least one odd number */ + *(*Tuint32_t)(unsafe.Pointer(_x1)) |= uint32(1) +} + +func Xsrandom(tls *TLS, seed uint32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + ___srandom(tls, seed) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) +} + +func Xinitstate(tls *TLS, seed uint32, state uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v seed=%v state=%v size=%v, (%v:)", tls, seed, state, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + if size < uint32(8) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + if size < uint32(32) { + _n = 0 + } else { + if size < uint32(64) { + _n = int32(7) + } else { + if size < uint32(128) { + _n = int32(15) + } else { + if size < uint32(256) { + _n = int32(31) + } else { + _n = int32(63) + } + } + } + } + _x1 = state + uintptr(1)*4 + ___srandom(tls, seed) + _savestate(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xsetstate(tls *TLS, state uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v state=%v, (%v:)", tls, state, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + _loadstate(tls, state) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xrandom(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, v2, v3 int32 + var v1 Tuint32_t + _, _, _, _ = k, v1, v2, v3 + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + if _n == 0 { + v1 = _lcg31(tls, *(*Tuint32_t)(unsafe.Pointer(_x1))) + *(*Tuint32_t)(unsafe.Pointer(_x1)) = v1 + k = int32(v1) + goto end + } + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) += *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_j)*4)) + k = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) >> int32(1)) + _i++ + v2 = _i + if v2 == _n { + _i = 0 + } + _j++ + v3 = _j + if v3 == _n { + _j = 0 + } + goto end +end: + ; + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return k +} + +func Xseed48(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&_p1)), uintptr(unsafe.Pointer(&X__seed48)), uint32(6)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), s, uint32(6)) + return uintptr(unsafe.Pointer(&_p1)) +} + +var _p1 [3]uint16 + +func Xsrand48(tls *TLS, seed int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[3]uint16)(unsafe.Pointer(bp)) = [3]uint16{ + 0: uint16(0x330e), + 1: uint16(seed), + 2: uint16(seed >> int32(16)), + } + Xseed48(tls, bp) +} + +func Xexecl(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = UintptrFromInt32(0) + _ = ap + return Xexecv(tls, path, argv) + return r +} + +func Xexecle(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv, envp uintptr + var v2 t__predefined_size_t + _, _, _, _, _, _ = ap, argc, argv, envp, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i <= argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + envp = VaUintptr(&ap) + _ = ap + return Xexecve(tls, path, argv, envp) + return r +} + +func Xexeclp(tls *TLS, file uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv0=%v va=%v, (%v:)", tls, file, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = UintptrFromInt32(0) + _ = ap + return Xexecvp(tls, file, argv) + return r +} + +func Xexecv(tls *TLS, path uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v, (%v:)", tls, path, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexecve(tls, path, argv, Xenviron) +} + +func Xexecve(tls *TLS, path uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v envp=%v, (%v:)", tls, path, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* do we need to use environ if envp is null? */ + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_execve), int32(path), int32(argv), int32(envp)))) +} + +func X__execvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, p, path, z, v3, v4 uintptr + var k, l Tsize_t + var seen_eacces int32 + var v2 t__predefined_size_t + _, _, _, _, _, _, _, _, _, _ = b, k, l, p, path, seen_eacces, z, v2, v3, v4 + defer func() { Xrealloc(tls, b, 0) }() + path = Xgetenv(tls, __ccgo_ts+1276) + seen_eacces = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + if !(*(*int8)(unsafe.Pointer(file)) != 0) { + return -int32(1) + } + if Xstrchr(tls, file, int32('/')) != 0 { + return Xexecve(tls, file, argv, envp) + } + if !(path != 0) { + path = __ccgo_ts + 1281 + } + k = Xstrnlen(tls, file, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if k > uint32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + l = Xstrnlen(tls, path, uint32(Int32FromInt32(PATH_MAX)-Int32FromInt32(1))) + uint32(1) + p = path + for { + v2 = l + k + uint32(1) + b = Xrealloc(tls, b, v2) + z = X__strchrnul(tls, p, int32(':')) + if uint32(int32(z)-int32(p)) >= l { + v3 = z + z++ + if !(*(*int8)(unsafe.Pointer(v3)) != 0) { + break + } + goto _1 + } + Xmemcpy(tls, b, p, uint32(int32(z)-int32(p))) + *(*int8)(unsafe.Add(unsafe.Pointer(b), int32(z)-int32(p))) = int8('/') + Xmemcpy(tls, b+uintptr(int32(z)-int32(p))+BoolUintptr(z > p), file, k+uint32(1)) + Xexecve(tls, b, argv, envp) + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EACCES): + seen_eacces = int32(1) + fallthrough + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + default: + return -int32(1) + } + v4 = z + z++ + if !(*(*int8)(unsafe.Pointer(v4)) != 0) { + break + } + goto _1 + _1: + ; + p = z + } + if seen_eacces != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + } + return -int32(1) +} + +func Xexecvp(tls *TLS, file uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v, (%v:)", tls, file, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, Xenviron) +} + +func Xexecvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, envp) +} + +func Xfexecve(tls *TLS, fd int32, argv uintptr, envp uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v argv=%v envp=%v, (%v:)", tls, fd, argv, envp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* buf at bp+0 */ [27]int8 + _ = r + r = int32(X__syscall5(tls, int32(SYS_execveat), fd, int32(__ccgo_ts), int32(argv), int32(envp), int32(Int32FromInt32(AT_EMPTY_PATH)))) + if r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + X__procfdname(tls, bp, uint32(fd)) + Xexecve(tls, bp, argv, envp) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + } + return -int32(1) +} + +var _dummy_lockptr = uintptr(0) + +var _atfork_locks = [10]uintptr{ + 0: uintptr(unsafe.Pointer(&X__at_quick_exit_lockptr)), + 1: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 2: uintptr(unsafe.Pointer(&X__gettext_lockptr)), + 3: uintptr(unsafe.Pointer(&X__locale_lockptr)), + 4: uintptr(unsafe.Pointer(&X__random_lockptr)), + 5: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 6: uintptr(unsafe.Pointer(&X__stdio_ofl_lockptr)), + 7: uintptr(unsafe.Pointer(&X__syslog_lockptr)), + 8: uintptr(unsafe.Pointer(&X__timezone_lockptr)), + 9: uintptr(unsafe.Pointer(&_dummy_lockptr)), +} + +func _dummy8(tls *TLS, x int32) { +} + +func _dummy_0(tls *TLS) { +} + +const FDOP_CHDIR = 4 +const FDOP_CLOSE = 1 +const FDOP_DUP2 = 2 +const FDOP_FCHDIR = 5 +const FDOP_OPEN = 3 +const POSIX_SPAWN_RESETIDS = 1 +const POSIX_SPAWN_SETPGROUP = 2 +const POSIX_SPAWN_SETSCHEDPARAM = 16 +const POSIX_SPAWN_SETSCHEDULER = 32 +const POSIX_SPAWN_SETSID = 128 +const POSIX_SPAWN_SETSIGDEF = 4 +const POSIX_SPAWN_SETSIGMASK = 8 +const POSIX_SPAWN_USEVFORK = 64 + +type Tposix_spawnattr_t = struct { + F__flags int32 + F__pgrp Tpid_t + F__def Tsigset_t + F__mask Tsigset_t + F__prio int32 + F__pol int32 + F__fn uintptr + F__pad [60]int8 +} + +type Tposix_spawn_file_actions_t = struct { + F__pad0 [2]int32 + F__actions uintptr + F__pad [16]int32 +} + +type Tfdop = struct { + Fnext uintptr + Fprev uintptr + Fcmd int32 + Ffd int32 + Fsrcfd int32 + Foflag int32 + Fmode Tmode_t +} + +func Xposix_spawn_file_actions_addchdir_np(tls *TLS, fa uintptr, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v path=%v, (%v:)", tls, fa, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + op = Xmalloc(tls, uint32(28)+Xstrlen(tls, path)+uint32(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = -int32(1) + Xstrcpy(tls, op+28, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addclose(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CLOSE) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_adddup2(tls *TLS, fa uintptr, srcfd int32, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v srcfd=%v fd=%v, (%v:)", tls, fa, srcfd, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if srcfd < 0 || fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_DUP2) + (*Tfdop)(unsafe.Pointer(op)).Fsrcfd = srcfd + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addfchdir_np(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_FCHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addopen(tls *TLS, fa uintptr, fd int32, path uintptr, flags int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v path=%v flags=%v mode=%v, (%v:)", tls, fa, fd, path, flags, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)+Xstrlen(tls, path)+uint32(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_OPEN) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + (*Tfdop)(unsafe.Pointer(op)).Foflag = flags + (*Tfdop)(unsafe.Pointer(op)).Fmode = mode + Xstrcpy(tls, op+28, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_destroy(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + var next, op uintptr + _, _ = next, op + op = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + for op != 0 { + next = (*Tfdop)(unsafe.Pointer(op)).Fnext + Xfree(tls, op) + op = next + } + return 0 +} + +func Xposix_spawn_file_actions_init(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = uintptr(0) + return 0 +} + +func Xposix_spawnattr_destroy(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xposix_spawnattr_getflags(tls *TLS, attr uintptr, flags uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*int16)(unsafe.Pointer(flags)) = int16((*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags) + return 0 +} + +func Xposix_spawnattr_getpgroup(tls *TLS, attr uintptr, pgrp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tpid_t)(unsafe.Pointer(pgrp)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp + return 0 +} + +func Xposix_spawnattr_getsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(def)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def + return 0 +} + +func Xposix_spawnattr_getsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(mask)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask + return 0 +} + +func Xposix_spawnattr_init(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tposix_spawnattr_t)(unsafe.Pointer(attr)) = Tposix_spawnattr_t{} + return 0 +} + +func Xposix_spawnattr_getschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_getschedpolicy(tls *TLS, attr uintptr, policy uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedpolicy(tls *TLS, attr uintptr, policy int32) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setflags(tls *TLS, attr uintptr, flags int16) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var all_flags uint32 + _ = all_flags + all_flags = uint32(Int32FromInt32(POSIX_SPAWN_RESETIDS) | Int32FromInt32(POSIX_SPAWN_SETPGROUP) | Int32FromInt32(POSIX_SPAWN_SETSIGDEF) | Int32FromInt32(POSIX_SPAWN_SETSIGMASK) | Int32FromInt32(POSIX_SPAWN_SETSCHEDPARAM) | Int32FromInt32(POSIX_SPAWN_SETSCHEDULER) | Int32FromInt32(POSIX_SPAWN_USEVFORK) | Int32FromInt32(POSIX_SPAWN_SETSID)) + if uint32(flags) & ^all_flags != 0 { + return int32(EINVAL) + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags = int32(flags) + return 0 +} + +func Xposix_spawnattr_setpgroup(tls *TLS, attr uintptr, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp = pgrp + return 0 +} + +func Xposix_spawnattr_setsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def = *(*Tsigset_t)(unsafe.Pointer(def)) + return 0 +} + +func Xposix_spawnattr_setsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask = *(*Tsigset_t)(unsafe.Pointer(mask)) + return 0 +} + +func Xvfork(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* vfork syscall cannot be made from C code */ + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_fork)))) +} + +func Xwait(tls *TLS, status uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwaitpid(tls, -Int32FromInt32(1), status, 0) +} + +func Xwaitid(tls *TLS, type1 Tidtype_t, id Tid_t, info uintptr, options int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v id=%v info=%v options=%v, (%v:)", tls, type1, id, info, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_waitid), type1, int32(id), int32(info), options, int32(Int32FromInt32(0)), 0))) +} + +func Xwaitpid(tls *TLS, pid Tpid_t, status uintptr, options int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v, (%v:)", tls, pid, status, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_wait4), pid, int32(status), options, int32(Int32FromInt32(0)), 0, 0))) +} + +const BRACKET = -3 +const END = 0 +const FNM_CASEFOLD = 16 +const FNM_FILE_NAME = 1 +const FNM_LEADING_DIR = 8 +const FNM_NOESCAPE = 2 +const FNM_NOMATCH = 1 +const FNM_NOSYS = -1 +const FNM_PATHNAME = 1 +const FNM_PERIOD = 4 +const QUESTION = -4 +const STAR = -5 +const UNMATCHABLE = -2 + +func _str_next(tls *TLS, str uintptr, n Tsize_t, step uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k int32 + var _ /* wc at bp+0 */ Twchar_t + _ = k + if !(n != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return 0 + } + if uint32(*(*int8)(unsafe.Pointer(str))) >= uint32(128) { + k = Xmbtowc(tls, bp, str, n) + if k < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return -int32(1) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(k) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return int32(*(*int8)(unsafe.Pointer(str))) +} + +func _pat_next(tls *TLS, pat uintptr, m Tsize_t, step uintptr, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var esc, k1, z int32 + var k Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _ = esc, k, k1, z + esc = 0 + if !(m != 0) || !(*(*int8)(unsafe.Pointer(pat)) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return END + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + if int32(*(*int8)(unsafe.Pointer(pat))) == int32('\\') && *(*int8)(unsafe.Pointer(pat + 1)) != 0 && !(flags&Int32FromInt32(FNM_NOESCAPE) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(2) + pat++ + esc = int32(1) + goto escaped + } + if int32(*(*int8)(unsafe.Pointer(pat))) == int32('[') { + k = uint32(1) + if k < m { + if int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) == int32('^') || int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) == int32('!') { + k++ + } + } + if k < m { + if int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) == int32(']') { + k++ + } + } + for { + if !(k < m && *(*int8)(unsafe.Pointer(pat + uintptr(k))) != 0 && int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + break + } + if k+uint32(1) < m && *(*int8)(unsafe.Pointer(pat + uintptr(k+uint32(1)))) != 0 && int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) == int32('[') && (int32(*(*int8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32(':') || int32(*(*int8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32('.') || int32(*(*int8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32('=')) { + z = int32(*(*int8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) + k += uint32(2) + if k < m && *(*int8)(unsafe.Pointer(pat + uintptr(k))) != 0 { + k++ + } + for k < m && *(*int8)(unsafe.Pointer(pat + uintptr(k))) != 0 && (int32(*(*int8)(unsafe.Pointer(pat + uintptr(k-uint32(1))))) != z || int32(*(*int8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + k++ + } + if k == m || !(*(*int8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + break + } + } + goto _1 + _1: + ; + k++ + } + if k == m || !(*(*int8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return int32('[') + } + *(*Tsize_t)(unsafe.Pointer(step)) = k + uint32(1) + return -int32(3) + } + if int32(*(*int8)(unsafe.Pointer(pat))) == int32('*') { + return -int32(5) + } + if int32(*(*int8)(unsafe.Pointer(pat))) == int32('?') { + return -int32(4) + } + goto escaped +escaped: + ; + if uint32(*(*int8)(unsafe.Pointer(pat))) >= uint32(128) { + k1 = Xmbtowc(tls, bp, pat, m) + if k1 < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return -int32(2) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(k1 + esc) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + return int32(*(*int8)(unsafe.Pointer(pat))) +} + +func _casefold(tls *TLS, k int32) (r int32) { + var c int32 + var v1 uint32 + _, _ = c, v1 + c = int32(Xtowupper(tls, uint32(k))) + if c == k { + v1 = Xtowlower(tls, uint32(k)) + } else { + v1 = uint32(c) + } + return int32(v1) +} + +func _match_bracket(tls *TLS, p uintptr, k int32, kfold int32) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var inv, l, l1, z int32 + var p0 uintptr + var _ /* buf at bp+8 */ [16]int8 + var _ /* wc at bp+0 */ Twchar_t + var _ /* wc2 at bp+4 */ Twchar_t + _, _, _, _, _ = inv, l, l1, p0, z + inv = 0 + p++ + if int32(*(*int8)(unsafe.Pointer(p))) == int32('^') || int32(*(*int8)(unsafe.Pointer(p))) == int32('!') { + inv = int32(1) + p++ + } + if int32(*(*int8)(unsafe.Pointer(p))) == int32(']') { + if k == int32(']') { + return BoolInt32(!(inv != 0)) + } + p++ + } else { + if int32(*(*int8)(unsafe.Pointer(p))) == int32('-') { + if k == int32('-') { + return BoolInt32(!(inv != 0)) + } + p++ + } + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + for { + if !(int32(*(*int8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if int32(*(*int8)(unsafe.Pointer(p))) == int32('-') && int32(*(*int8)(unsafe.Pointer(p + 1))) != int32(']') { + l = Xmbtowc(tls, bp+4, p+uintptr(1), uint32(4)) + if l < 0 { + return 0 + } + if *(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4)) { + if uint32(k)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) || uint32(kfold)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) { + return BoolInt32(!(inv != 0)) + } + } + p += uintptr(l - int32(1)) + goto _1 + } + if int32(*(*int8)(unsafe.Pointer(p))) == int32('[') && (int32(*(*int8)(unsafe.Pointer(p + 1))) == int32(':') || int32(*(*int8)(unsafe.Pointer(p + 1))) == int32('.') || int32(*(*int8)(unsafe.Pointer(p + 1))) == int32('=')) { + p0 = p + uintptr(2) + z = int32(*(*int8)(unsafe.Pointer(p + 1))) + p += uintptr(3) + for int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) != z || int32(*(*int8)(unsafe.Pointer(p))) != int32(']') { + p++ + } + if z == int32(':') && int32(p-uintptr(1))-int32(p0) < int32(16) { + Xmemcpy(tls, bp+8, p0, uint32(int32(p-uintptr(1))-int32(p0))) + (*(*[16]int8)(unsafe.Pointer(bp + 8)))[int32(p-uintptr(1))-int32(p0)] = 0 + if Xiswctype(tls, uint32(k), Xwctype(tls, bp+8)) != 0 || Xiswctype(tls, uint32(kfold), Xwctype(tls, bp+8)) != 0 { + return BoolInt32(!(inv != 0)) + } + } + goto _1 + } + if uint32(*(*int8)(unsafe.Pointer(p))) < uint32(128) { + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(uint8(*(*int8)(unsafe.Pointer(p)))) + } else { + l1 = Xmbtowc(tls, bp, p, uint32(4)) + if l1 < 0 { + return 0 + } + p += uintptr(l1 - int32(1)) + } + if *(*Twchar_t)(unsafe.Pointer(bp)) == k || *(*Twchar_t)(unsafe.Pointer(bp)) == kfold { + return BoolInt32(!(inv != 0)) + } + goto _1 + _1: + ; + p++ + } + return inv +} + +func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, k, kfold, v12, v13, v15, v2, v3, v4, v8 int32 + var endpat, endstr, p, ptail, s, stail, v10, v6 uintptr + var tailcnt Tsize_t + var v9 bool + var _ /* pinc at bp+0 */ Tsize_t + var _ /* sinc at bp+4 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, endpat, endstr, k, kfold, p, ptail, s, stail, tailcnt, v10, v12, v13, v15, v2, v3, v4, v6, v8, v9 + tailcnt = uint32(0) + if flags&int32(FNM_PERIOD) != 0 { + if int32(*(*int8)(unsafe.Pointer(str))) == int32('.') && int32(*(*int8)(unsafe.Pointer(pat))) != int32('.') { + return int32(FNM_NOMATCH) + } + } + for { + v2 = _pat_next(tls, pat, m, bp, flags) + c = v2 + switch v2 { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + pat++ + m-- + default: + k = _str_next(tls, str, n, bp+4) + if k <= 0 { + if c == END { + v3 = 0 + } else { + v3 = int32(FNM_NOMATCH) + } + return v3 + } + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + n -= *(*Tsize_t)(unsafe.Pointer(bp + 4)) + if flags&int32(FNM_CASEFOLD) != 0 { + v4 = _casefold(tls, k) + } else { + v4 = k + } + kfold = v4 + if c == -int32(3) { + if !(_match_bracket(tls, pat, k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + pat += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + m -= *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + } + break + goto _1 + _1: + } + /* Compute real pat length if it was initially unknown/-1 */ + m = Xstrnlen(tls, pat, m) + endpat = pat + uintptr(m) + /* Find the last * in pat and count chars needed after it */ + v6 = pat + ptail = v6 + p = v6 + for { + if !(p < endpat) { + break + } + switch _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + tailcnt = uint32(0) + ptail = p + uintptr(1) + default: + tailcnt++ + break + } + goto _5 + _5: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + /* Past this point we need not check for UNMATCHABLE in pat, + * because all of pat has already been parsed once. */ + /* Compute real str length if it was initially unknown/-1 */ + n = Xstrnlen(tls, str, n) + endstr = str + uintptr(n) + if n < tailcnt { + return int32(FNM_NOMATCH) + } + /* Find the final tailcnt chars of str, accounting for UTF-8. + * On illegal sequences we may get it wrong, but in that case + * we necessarily have a matching failure anyway. */ + s = endstr + for { + if !(s > str && tailcnt != 0) { + break + } + if v9 = uint32(*(*int8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v8 = int32(4) + } else { + v8 = int32(1) + } + } + if v9 || v8 == int32(1) { + s-- + } else { + for { + s-- + v10 = s + if !(uint32(uint8(*(*int8)(unsafe.Pointer(v10))))-uint32(0x80) < uint32(0x40) && s > str) { + break + } + } + } + goto _7 + _7: + ; + tailcnt-- + } + if tailcnt != 0 { + return int32(FNM_NOMATCH) + } + stail = s + /* Check that the pat and str tails match */ + p = ptail + for { + c = _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + v12 = _str_next(tls, s, uint32(int32(endstr)-int32(s)), bp+4) + k = v12 + if v12 <= 0 { + if c != END { + return int32(FNM_NOMATCH) + } + break + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + if flags&int32(FNM_CASEFOLD) != 0 { + v13 = _casefold(tls, k) + } else { + v13 = k + } + kfold = v13 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + goto _11 + _11: + } + /* We're all done with the tails now, so throw them out */ + endstr = stail + endpat = ptail + /* Match pattern components until there are none left */ + for pat < endpat { + p = pat + s = str + for { + c = _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + /* Encountering * completes/commits a component */ + if c == -int32(5) { + pat = p + str = s + break + } + k = _str_next(tls, s, uint32(int32(endstr)-int32(s)), bp+4) + if !(k != 0) { + return int32(FNM_NOMATCH) + } + if flags&int32(FNM_CASEFOLD) != 0 { + v15 = _casefold(tls, k) + } else { + v15 = k + } + kfold = v15 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + break + } + } else { + if c != -int32(4) && k != c && kfold != c { + break + } + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + goto _14 + _14: + } + if c == -int32(5) { + continue + } + /* If we failed, advance str, by 1 char if it's a valid + * char, or past all invalid bytes otherwise. */ + k = _str_next(tls, str, uint32(int32(endstr)-int32(str)), bp+4) + if k > 0 { + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + } else { + str++ + for { + if !(_str_next(tls, str, uint32(int32(endstr)-int32(str)), bp+4) < 0) { + break + } + goto _16 + _16: + ; + str++ + } + } + } + return 0 +} + +func Xfnmatch(tls *TLS, pat uintptr, str uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v str=%v flags=%v, (%v:)", tls, pat, str, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, v4 int32 + var p, s uintptr + var _ /* inc at bp+0 */ Tsize_t + _, _, _, _ = c, p, s, v4 + if flags&int32(FNM_PATHNAME) != 0 { + for { + s = str + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*int8)(unsafe.Pointer(s))) != int32('/')) { + break + } + goto _2 + _2: + ; + s++ + } + p = pat + for { + v4 = _pat_next(tls, p, uint32(-Int32FromInt32(1)), bp, flags) + c = v4 + if !(v4 != END && c != int32('/')) { + break + } + goto _3 + _3: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + if c != int32(*(*int8)(unsafe.Pointer(s))) && (!(*(*int8)(unsafe.Pointer(s)) != 0) || !(flags&Int32FromInt32(FNM_LEADING_DIR) != 0)) { + return int32(FNM_NOMATCH) + } + if _fnmatch_internal(tls, pat, uint32(int32(p)-int32(pat)), str, uint32(int32(s)-int32(str)), flags) != 0 { + return int32(FNM_NOMATCH) + } + if !(c != 0) { + return 0 + } + str = s + uintptr(1) + pat = p + uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + goto _1 + _1: + } + } else { + if flags&int32(FNM_LEADING_DIR) != 0 { + s = str + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(s))) != int32('/') { + goto _5 + } + if !(_fnmatch_internal(tls, pat, uint32(-Int32FromInt32(1)), str, uint32(int32(s)-int32(str)), flags) != 0) { + return 0 + } + goto _5 + _5: + ; + s++ + } + } + } + return _fnmatch_internal(tls, pat, uint32(-Int32FromInt32(1)), str, uint32(-Int32FromInt32(1)), flags) +} + +const GLOB_ABORTED = 2 +const GLOB_APPEND = 32 +const GLOB_DOOFFS = 8 +const GLOB_ERR = 1 +const GLOB_MARK = 2 +const GLOB_NOCHECK = 16 +const GLOB_NOESCAPE = 64 +const GLOB_NOMATCH = 3 +const GLOB_NOSORT = 4 +const GLOB_NOSPACE = 1 +const GLOB_NOSYS = 4 +const GLOB_PERIOD = 128 +const GLOB_TILDE = 4096 +const GLOB_TILDE_CHECK = 16384 + +type Tglob_t = struct { + Fgl_pathc Tsize_t + Fgl_pathv uintptr + Fgl_offs Tsize_t + F__dummy1 int32 + F__dummy2 [5]uintptr +} + +type Tmatch = struct { + Fnext uintptr +} + +func _append(tls *TLS, tail uintptr, name uintptr, len1 Tsize_t, mark int32) (r int32) { + var new1 uintptr + _ = new1 + new1 = Xmalloc(tls, uint32(4)+len1+uint32(2)) + if !(new1 != 0) { + return -int32(1) + } + (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(tail)))).Fnext = new1 + (*Tmatch)(unsafe.Pointer(new1)).Fnext = UintptrFromInt32(0) + Xmemcpy(tls, new1+4, name, len1+uint32(1)) + if mark != 0 && len1 != 0 && int32(*(*int8)(unsafe.Pointer(name + uintptr(len1-uint32(1))))) != int32('/') { + *(*int8)(unsafe.Pointer(new1 + 4 + uintptr(len1))) = int8('/') + *(*int8)(unsafe.Pointer(new1 + 4 + uintptr(len1+uint32(1)))) = 0 + } + *(*uintptr)(unsafe.Pointer(tail)) = new1 + return 0 +} + +func _do_glob(tls *TLS, buf uintptr, pos Tsize_t, type1 int32, pat uintptr, flags int32, errfunc uintptr, tail uintptr) (r1 int32) { + bp := tls.Alloc(144) + defer tls.Free(144) + var de, dir, p, p2, v11, v2, v7, v8 uintptr + var fnm_flags, in_bracket, old_errno, overflow, r, readerr, v10, v9 int32 + var i, j, v4, v5 Tptrdiff_t + var l, v1 Tsize_t + var saved_sep int8 + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = de, dir, fnm_flags, i, in_bracket, j, l, old_errno, overflow, p, p2, r, readerr, saved_sep, v1, v10, v11, v2, v4, v5, v7, v8, v9 + /* If GLOB_MARK is unused, we don't care about type. */ + if !(type1 != 0) && !(flags&Int32FromInt32(GLOB_MARK) != 0) { + type1 = int32(DT_REG) + } + /* Special-case the remaining pattern being all slashes, in + * which case we can use caller-passed type if it's a dir. */ + if *(*int8)(unsafe.Pointer(pat)) != 0 && type1 != int32(DT_DIR) { + type1 = 0 + } + for pos+uint32(1) < uint32(PATH_MAX) && int32(*(*int8)(unsafe.Pointer(pat))) == int32('/') { + v1 = pos + pos++ + v2 = pat + pat++ + *(*int8)(unsafe.Pointer(buf + uintptr(v1))) = *(*int8)(unsafe.Pointer(v2)) + } + /* Consume maximal [escaped-]literal prefix of pattern, copying + * and un-escaping it to the running buffer as we go. */ + i = 0 + j = 0 + in_bracket = 0 + overflow = 0 + for { + if !(int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) != int32('*') && int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) != int32('?') && (!(in_bracket != 0) || int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) != int32(']'))) { + break + } + if !(*(*int8)(unsafe.Pointer(pat + uintptr(i))) != 0) { + if overflow != 0 { + return 0 + } + pat += uintptr(i) + pos += uint32(j) + v4 = Int32FromInt32(0) + j = v4 + i = v4 + break + } else { + if int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) == int32('[') { + in_bracket = int32(1) + } else { + if int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) == int32('\\') && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + /* Backslashes inside a bracket are (at least by + * our interpretation) non-special, so if next + * char is ']' we have a complete expression. */ + if in_bracket != 0 && int32(*(*int8)(unsafe.Pointer(pat + uintptr(i+int32(1))))) == int32(']') { + break + } + /* Unpaired final backslash never matches. */ + if !(*(*int8)(unsafe.Pointer(pat + uintptr(i+int32(1)))) != 0) { + return 0 + } + i++ + } + } + } + if int32(*(*int8)(unsafe.Pointer(pat + uintptr(i)))) == int32('/') { + if overflow != 0 { + return 0 + } + in_bracket = 0 + pat += uintptr(i + int32(1)) + i = -int32(1) + pos += uint32(j + int32(1)) + j = -int32(1) + } + /* Only store a character if it fits in the buffer, but if + * a potential bracket expression is open, the overflow + * must be remembered and handled later only if the bracket + * is unterminated (and thereby a literal), so as not to + * disallow long bracket expressions with short matches. */ + if pos+uint32(j+Int32FromInt32(1)) < uint32(PATH_MAX) { + v5 = j + j++ + *(*int8)(unsafe.Pointer(buf + uintptr(pos+uint32(v5)))) = *(*int8)(unsafe.Pointer(pat + uintptr(i))) + } else { + if in_bracket != 0 { + overflow = int32(1) + } else { + return 0 + } + } + /* If we consume any new components, the caller-passed type + * or dummy type from above is no longer valid. */ + type1 = 0 + goto _3 + _3: + ; + i++ + } + *(*int8)(unsafe.Pointer(buf + uintptr(pos))) = 0 + if !(*(*int8)(unsafe.Pointer(pat)) != 0) { + if flags&int32(GLOB_MARK) != 0 && (!(type1 != 0) || type1 == int32(DT_LNK)) && !(Xstat(tls, buf, bp) != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + type1 = int32(DT_DIR) + } else { + type1 = int32(DT_REG) + } + } + if !(type1 != 0) && Xlstat(tls, buf, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + return 0 + } + if _append(tls, tail, buf, pos, BoolInt32(flags&int32(GLOB_MARK) != 0 && type1 == int32(DT_DIR))) != 0 { + return int32(GLOB_NOSPACE) + } + return 0 + } + p2 = Xstrchr(tls, pat, int32('/')) + saved_sep = int8('/') + /* Check if the '/' was escaped and, if so, remove the escape char + * so that it will not be unpaired when passed to fnmatch. */ + if p2 != 0 && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + p = p2 + for { + if !(p > pat && int32(*(*int8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('\\')) { + break + } + goto _6 + _6: + ; + p-- + } + if (int32(p2)-int32(p))%int32(2) != 0 { + p2-- + saved_sep = int8('\\') + } + } + if pos != 0 { + v7 = buf + } else { + v7 = __ccgo_ts + 483 + } + dir = Xopendir(tls, v7) + if !(dir != 0) { + if (*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0 { + return int32(GLOB_ABORTED) + } + return 0 + } + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v8 = Xreaddir(tls, dir) + de = v8 + if !(v8 != 0) { + break + } + /* Quickly skip non-directories when there's pattern left. */ + if p2 != 0 && (*Tdirent)(unsafe.Pointer(de)).Fd_type != 0 && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_DIR) && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_LNK) { + continue + } + l = Xstrlen(tls, de+19) + if l >= uint32(PATH_MAX)-pos { + continue + } + if p2 != 0 { + *(*int8)(unsafe.Pointer(p2)) = 0 + } + if flags&int32(GLOB_NOESCAPE) != 0 { + v9 = int32(FNM_NOESCAPE) + } else { + v9 = 0 + } + if !(flags&Int32FromInt32(GLOB_PERIOD) != 0) { + v10 = int32(FNM_PERIOD) + } else { + v10 = 0 + } + fnm_flags = v9 | v10 + if Xfnmatch(tls, pat, de+19, fnm_flags) != 0 { + continue + } + /* With GLOB_PERIOD, don't allow matching . or .. unless + * fnmatch would match them with FNM_PERIOD rules in effect. */ + if p2 != 0 && flags&int32(GLOB_PERIOD) != 0 && int32(*(*int8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*int8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*int8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*int8)(unsafe.Pointer(de + 19 + 2)) != 0)) && Xfnmatch(tls, pat, de+19, fnm_flags|int32(FNM_PERIOD)) != 0 { + continue + } + Xmemcpy(tls, buf+uintptr(pos), de+19, l+uint32(1)) + if p2 != 0 { + *(*int8)(unsafe.Pointer(p2)) = saved_sep + } + if p2 != 0 { + v11 = p2 + } else { + v11 = __ccgo_ts + } + r = _do_glob(tls, buf, pos+l, int32((*Tdirent)(unsafe.Pointer(de)).Fd_type), v11, flags, errfunc, tail) + if r != 0 { + Xclosedir(tls, dir) + return r + } + } + readerr = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if p2 != 0 { + *(*int8)(unsafe.Pointer(p2)) = saved_sep + } + Xclosedir(tls, dir) + if readerr != 0 && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return 0 +} + +func _ignore_err(tls *TLS, path uintptr, err int32) (r int32) { + return 0 +} + +func _freelist(tls *TLS, head uintptr) { + var match, next uintptr + _, _ = match, next + match = (*Tmatch)(unsafe.Pointer(head)).Fnext + for { + if !(match != 0) { + break + } + next = (*Tmatch)(unsafe.Pointer(match)).Fnext + Xfree(tls, match) + goto _1 + _1: + ; + match = next + } +} + +func _sort(tls *TLS, a uintptr, b uintptr) (r int32) { + return Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(a)), *(*uintptr)(unsafe.Pointer(b))) +} + +func _expand_tilde(tls *TLS, pat uintptr, buf uintptr, pos uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var delim, v1, v12 int8 + var home, name_end, p, v11, v2, v3 uintptr + var i, v10, v13 Tsize_t + var v4 int32 + var _ /* pw at bp+0 */ Tpasswd + var _ /* res at bp+28 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = delim, home, i, name_end, p, v1, v10, v11, v12, v13, v2, v3, v4 + p = *(*uintptr)(unsafe.Pointer(pat)) + uintptr(1) + i = uint32(0) + name_end = X__strchrnul(tls, p, int32('/')) + v1 = *(*int8)(unsafe.Pointer(name_end)) + delim = v1 + if v1 != 0 { + v2 = name_end + name_end++ + *(*int8)(unsafe.Pointer(v2)) = 0 + } + *(*uintptr)(unsafe.Pointer(pat)) = name_end + if *(*int8)(unsafe.Pointer(p)) != 0 { + v3 = UintptrFromInt32(0) + } else { + v3 = Xgetenv(tls, __ccgo_ts+1310) + } + home = v3 + if !(home != 0) { + if *(*int8)(unsafe.Pointer(p)) != 0 { + v4 = Xgetpwnam_r(tls, p, bp, buf, uint32(PATH_MAX), bp+28) + } else { + v4 = Xgetpwuid_r(tls, Xgetuid(tls), bp, buf, uint32(PATH_MAX), bp+28) + } + switch v4 { + case int32(ENOMEM): + goto _5 + default: + goto _6 + case 0: + goto _7 + } + goto _8 + _5: + ; + return int32(GLOB_NOSPACE) + _7: + ; + if !!(*(*uintptr)(unsafe.Pointer(bp + 28)) != 0) { + goto _9 + } + _6: + ; + return int32(GLOB_NOMATCH) + _9: + ; + _8: + ; + home = (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_dir + } + for i < uint32(Int32FromInt32(PATH_MAX)-Int32FromInt32(2)) && *(*int8)(unsafe.Pointer(home)) != 0 { + v10 = i + i++ + v11 = home + home++ + *(*int8)(unsafe.Pointer(buf + uintptr(v10))) = *(*int8)(unsafe.Pointer(v11)) + } + if *(*int8)(unsafe.Pointer(home)) != 0 { + return int32(GLOB_NOMATCH) + } + v12 = delim + *(*int8)(unsafe.Pointer(buf + uintptr(i))) = v12 + if v12 != 0 { + i++ + v13 = i + *(*int8)(unsafe.Pointer(buf + uintptr(v13))) = 0 + } + *(*Tsize_t)(unsafe.Pointer(pos)) = i + return 0 +} + +func Xglob(tls *TLS, pat uintptr, flags int32, errfunc uintptr, g uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v flags=%v errfunc=%v g=%v, (%v:)", tls, pat, flags, errfunc, g, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var cnt, i, offs Tsize_t + var error1 int32 + var p, pathv uintptr + var v1 uint32 + var _ /* buf at bp+8 */ [4096]int8 + var _ /* head at bp+0 */ Tmatch + var _ /* pos at bp+4104 */ Tsize_t + var _ /* s at bp+4108 */ uintptr + var _ /* tail at bp+4 */ uintptr + _, _, _, _, _, _, _ = cnt, error1, i, offs, p, pathv, v1 + *(*Tmatch)(unsafe.Pointer(bp)) = struct { + Fnext uintptr + }{} + *(*uintptr)(unsafe.Pointer(bp + 4)) = bp + if flags&int32(GLOB_DOOFFS) != 0 { + v1 = (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs + } else { + v1 = uint32(0) + } + offs = v1 + error1 = 0 + if !(errfunc != 0) { + errfunc = __ccgo_fp(_ignore_err) + } + if !(flags&Int32FromInt32(GLOB_APPEND) != 0) { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs = offs + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint32(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) + } + if *(*int8)(unsafe.Pointer(pat)) != 0 { + p = Xstrdup(tls, pat) + if !(p != 0) { + return int32(GLOB_NOSPACE) + } + (*(*[4096]int8)(unsafe.Pointer(bp + 8)))[0] = 0 + *(*Tsize_t)(unsafe.Pointer(bp + 4104)) = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4108)) = p + if flags&(Int32FromInt32(GLOB_TILDE)|Int32FromInt32(GLOB_TILDE_CHECK)) != 0 && int32(*(*int8)(unsafe.Pointer(p))) == int32('~') { + error1 = _expand_tilde(tls, bp+4108, bp+8, bp+4104) + } + if !(error1 != 0) { + error1 = _do_glob(tls, bp+8, *(*Tsize_t)(unsafe.Pointer(bp + 4104)), 0, *(*uintptr)(unsafe.Pointer(bp + 4108)), flags, errfunc, bp+4) + } + Xfree(tls, p) + } + if error1 == int32(GLOB_NOSPACE) { + _freelist(tls, bp) + return error1 + } + cnt = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(*(*uintptr)(unsafe.Pointer(bp + 4)) != 0) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))).Fnext + cnt++ + } + if !(cnt != 0) { + if flags&int32(GLOB_NOCHECK) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 4)) = bp + if _append(tls, bp+4, pat, Xstrlen(tls, pat), 0) != 0 { + return int32(GLOB_NOSPACE) + } + cnt++ + } else { + if !(error1 != 0) { + return int32(GLOB_NOMATCH) + } + } + } + if flags&int32(GLOB_APPEND) != 0 { + pathv = Xrealloc(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv, (offs+(*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc+cnt+uint32(1))*uint32(4)) + if !(pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = pathv + offs += (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc + } else { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = Xmalloc(tls, (offs+cnt+uint32(1))*uint32(4)) + if !((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + i = uint32(0) + for { + if !(i < offs) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(i)*4)) = UintptrFromInt32(0) + goto _3 + _3: + ; + i++ + } + } + i = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*4)) = *(*uintptr)(unsafe.Pointer(bp + 4)) + 4 + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))).Fnext + i++ + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*4)) = UintptrFromInt32(0) + *(*Tsize_t)(unsafe.Pointer(g)) += cnt + if !(flags&Int32FromInt32(GLOB_NOSORT) != 0) { + Xqsort(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv+uintptr(offs)*4, cnt, uint32(4), __ccgo_fp(_sort)) + } + return error1 +} + +func Xglobfree(tls *TLS, g uintptr) { + if __ccgo_strace { + trc("tls=%v g=%v, (%v:)", tls, g, origin(2)) + } + var i Tsize_t + _ = i + i = uint32(0) + for { + if !(i < (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr((*Tglob_t)(unsafe.Pointer(g)).Fgl_offs+i)*4))-uintptr(uint32(UintptrFromInt32(0)+4))) + goto _1 + _1: + ; + i++ + } + Xfree(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint32(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) +} + +const ASSERTION = -2 +const ASSERT_AT_BOL = 1 +const ASSERT_AT_BOW = 16 +const ASSERT_AT_EOL = 2 +const ASSERT_AT_EOW = 32 +const ASSERT_AT_WB = 64 +const ASSERT_AT_WB_NEG = 128 +const ASSERT_BACKREF = 256 +const ASSERT_CHAR_CLASS = 4 +const ASSERT_CHAR_CLASS_NEG = 8 +const ASSERT_LAST = 256 +const BACKREF = -4 +const COPY_MAXIMIZE_FIRST_TAG = 2 +const COPY_REMOVE_TAGS = 1 +const EMPTY1 = -1 +const MAX_NEG_CLASSES = 64 +const REG_BADBR = 10 +const REG_BADPAT = 2 +const REG_BADRPT = 13 +const REG_EBRACE = 9 +const REG_EBRACK = 7 +const REG_ECOLLATE = 3 +const REG_ECTYPE = 4 +const REG_EESCAPE = 5 +const REG_ENOSYS = -1 +const REG_EPAREN = 8 +const REG_ERANGE = 11 +const REG_ESPACE = 12 +const REG_ESUBREG = 6 +const REG_EXTENDED = 1 +const REG_ICASE = 2 +const REG_NEWLINE = 4 +const REG_NOMATCH = 1 +const REG_NOSUB = 8 +const REG_NOTBOL = 1 +const REG_NOTEOL = 2 +const REG_OK = 0 +const TAG = -3 +const TRE_CHAR_MAX = 1114111 +const TRE_MEM_BLOCK_SIZE = 1024 +const TRE_REGEX_T_FIELD = 0 +const tre_ctype = 0 +const tre_isalnum = 0 +const tre_isalpha = 0 +const tre_isblank = 0 +const tre_iscntrl = 0 +const tre_isctype = 0 +const tre_isdigit = 0 +const tre_isgraph = 0 +const tre_islower = 0 +const tre_isprint = 0 +const tre_ispunct = 0 +const tre_isspace = 0 +const tre_isupper = 0 +const tre_isxdigit = 0 +const tre_mem_alloc_impl = 0 +const tre_mem_destroy = 0 +const tre_mem_new_impl = 0 +const tre_strlen = 0 +const tre_tolower = 0 +const tre_toupper = 0 +const xcalloc = 0 +const xfree = 0 +const xmalloc = 0 +const xrealloc = 0 + +type Tregoff_t = int32 + +type Tregex_t = struct { + Fre_nsub Tsize_t + F__opaque uintptr + F__padding [4]uintptr + F__nsub2 Tsize_t + F__padding2 int8 +} + +type Tre_pattern_buffer = Tregex_t + +type Tregmatch_t = struct { + Frm_so Tregoff_t + Frm_eo Tregoff_t +} + +type Treg_errcode_t = int32 + +type Ttre_char_t = int32 + +type Ttre_cint_t = uint32 + +type Ttre_ctype_t = uint32 + +type Ttre_tnfa_transition_t = struct { + Fcode_min Ttre_cint_t + Fcode_max Ttre_cint_t + Fstate uintptr + Fstate_id int32 + Ftags uintptr + Fassertions int32 + Fu struct { + Fbackref [0]int32 + Fclass Ttre_ctype_t + } + Fneg_classes uintptr +} + +type Ttnfa_transition = Ttre_tnfa_transition_t + +type Ttre_tag_direction_t = int32 + +const _TRE_TAG_MINIMIZE = 0 +const _TRE_TAG_MAXIMIZE = 1 + +type Ttre_submatch_data = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_submatch_data_t = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_tnfa_t = struct { + Ftransitions uintptr + Fnum_transitions uint32 + Finitial uintptr + Ffinal uintptr + Fsubmatch_data uintptr + Ffirstpos_chars uintptr + Ffirst_char int32 + Fnum_submatches uint32 + Ftag_directions uintptr + Fminimal_tags uintptr + Fnum_tags int32 + Fnum_minimals int32 + Fend_tag int32 + Fnum_states int32 + Fcflags int32 + Fhave_backrefs int32 + Fhave_approx int32 +} + +type Ttnfa = Ttre_tnfa_t + +type Ttre_list_t = struct { + Fdata uintptr + Fnext uintptr +} + +type Ttre_list = Ttre_list_t + +type Ttre_mem_t = uintptr + +type Ttre_mem_struct = struct { + Fblocks uintptr + Fcurrent uintptr + Fptr uintptr + Fn Tsize_t + Ffailed int32 + Fprovided uintptr +} + +/*********************************************************************** + from tre-compile.h +***********************************************************************/ + +type Ttre_pos_and_tags_t = struct { + Fposition int32 + Fcode_min int32 + Fcode_max int32 + Ftags uintptr + Fassertions int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr + Fbackref int32 +} + +/*********************************************************************** + from tre-ast.c and tre-ast.h +***********************************************************************/ + +// C documentation +// +// /* The different AST node types. */ +type Ttre_ast_type_t = int32 + +const _LITERAL = 0 +const _CATENATION = 1 +const _ITERATION = 2 +const _UNION = 3 + +/* Special subtypes of TRE_LITERAL. */ + +// C documentation +// +// /* A generic AST node. All AST nodes consist of this node on the top +// level with `obj' pointing to the actual content. */ +type Ttre_ast_node_t = struct { + Ftype1 Ttre_ast_type_t + Fobj uintptr + Fnullable int32 + Fsubmatch_id int32 + Fnum_submatches int32 + Fnum_tags int32 + Ffirstpos uintptr + Flastpos uintptr +} + +// C documentation +// +// /* A "literal" node. These are created for assertions, back references, +// tags, matching parameter settings, and all expressions that match one +// character. */ +type Ttre_literal_t = struct { + Fcode_min int32 + Fcode_max int32 + Fposition int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr +} + +// C documentation +// +// /* A "catenation" node. These are created when two regexps are concatenated. +// If there are more than one subexpressions in sequence, the `left' part +// holds all but the last, and `right' part holds the last subexpression +// (catenation is left associative). */ +type Ttre_catenation_t = struct { + Fleft uintptr + Fright uintptr +} + +// C documentation +// +// /* An "iteration" node. These are created for the "*", "+", "?", and "{m,n}" +// operators. */ +type Ttre_iteration_t = struct { + Farg uintptr + Fmin int32 + Fmax int32 + F__ccgo12 uint8 +} + +// C documentation +// +// /* An "union" node. These are created for the "|" operator. */ +type Ttre_union_t = struct { + Fleft uintptr + Fright uintptr +} + +func _tre_ast_new_node(tls *TLS, mem Ttre_mem_t, type1 int32, obj uintptr) (r uintptr) { + var node uintptr + _ = node + node = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)) + if !(node != 0) || !(obj != 0) { + return uintptr(0) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = obj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = type1 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = -int32(1) + return node +} + +func _tre_ast_new_literal(tls *TLS, mem Ttre_mem_t, code_min int32, code_max int32, position int32) (r uintptr) { + var lit, node uintptr + _, _ = lit, node + lit = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(20)) + node = _tre_ast_new_node(tls, mem, int32(_LITERAL), lit) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = code_min + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = code_max + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = position + return node +} + +func _tre_ast_new_iter(tls *TLS, mem Ttre_mem_t, arg uintptr, min int32, max int32, minimal int32) (r uintptr) { + var iter, node uintptr + _, _ = iter, node + iter = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(16)) + node = _tre_ast_new_node(tls, mem, int32(_ITERATION), iter) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg = arg + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin = min + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax = max + SetBitFieldPtr8Uint32(iter+12, uint32(minimal), 0, 0x1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(arg)).Fnum_submatches + return node +} + +func _tre_ast_new_union(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var node, un uintptr + _, _ = node, un + if !(left != 0) { + return right + } + un = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(8)) + node = _tre_ast_new_node(tls, mem, int32(_UNION), un) + if !(node != 0) || !(right != 0) { + return uintptr(0) + } + (*Ttre_union_t)(unsafe.Pointer(un)).Fleft = left + (*Ttre_union_t)(unsafe.Pointer(un)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +func _tre_ast_new_catenation(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var cat, node uintptr + _, _ = cat, node + if !(left != 0) { + return right + } + cat = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(8)) + node = _tre_ast_new_node(tls, mem, int32(_CATENATION), cat) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft = left + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_t = struct { + Fsize int32 + Fmax_size int32 + Fincrement int32 + Fptr int32 + Fstack uintptr +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_rec = Ttre_stack_t + +/* Just to save some typing. */ + +type Ttre_stack_item = struct { + Fint_value [0]int32 + Fvoidptr_value uintptr +} + +func _tre_stack_new(tls *TLS, size int32, max_size int32, increment int32) (r uintptr) { + var s uintptr + _ = s + s = Xmalloc(tls, uint32(20)) + if s != UintptrFromInt32(0) { + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = Xmalloc(tls, uint32(4)*uint32(size)) + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack == UintptrFromInt32(0) { + Xfree(tls, s) + return UintptrFromInt32(0) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size = max_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement = increment + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr = 0 + } + return s +} + +func _tre_stack_destroy(tls *TLS, s uintptr) { + Xfree(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack) + Xfree(tls, s) +} + +func _tre_stack_num_objects(tls *TLS, s uintptr) (r int32) { + return (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr +} + +func _tre_stack_push(tls *TLS, s uintptr, value Ttre_stack_item) (r Treg_errcode_t) { + var new_buffer uintptr + var new_size int32 + _, _ = new_buffer, new_size + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr < (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize { + *(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr((*Ttre_stack_t)(unsafe.Pointer(s)).Fptr)*4)) = value + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr++ + } else { + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize >= (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + return int32(REG_ESPACE) + } else { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement + if new_size > (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size + } + new_buffer = Xrealloc(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack, uint32(4)*uint32(new_size)) + if new_buffer == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = new_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = new_buffer + _tre_stack_push(tls, s, value) + } + } + return REG_OK +} + +func _tre_stack_push_int(tls *TLS, s uintptr, value int32) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*int32)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_push_voidptr(tls *TLS, s uintptr, value uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*uintptr)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_pop_int(tls *TLS, s uintptr) (r int32) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*int32)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*4)) +} + +func _tre_stack_pop_voidptr(tls *TLS, s uintptr) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*uintptr)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*4)) +} + +/*********************************************************************** + from tre-parse.c and tre-parse.h +***********************************************************************/ + +// C documentation +// +// /* Parse context. */ +type Ttre_parse_ctx_t = struct { + Fmem Ttre_mem_t + Fstack uintptr + Fn uintptr + Fs uintptr + Fstart uintptr + Fsubmatch_id int32 + Fposition int32 + Fmax_backref int32 + Fcflags int32 +} + +// C documentation +// +// /* Some macros for expanding \w, \s, etc. */ +var _tre_macros = [13]struct { + Fc int8 + Fexpansion uintptr +}{ + 0: { + Fc: int8('t'), + Fexpansion: __ccgo_ts + 1315, + }, + 1: { + Fc: int8('n'), + Fexpansion: __ccgo_ts + 301, + }, + 2: { + Fc: int8('r'), + Fexpansion: __ccgo_ts + 1317, + }, + 3: { + Fc: int8('f'), + Fexpansion: __ccgo_ts + 1319, + }, + 4: { + Fc: int8('a'), + Fexpansion: __ccgo_ts + 1321, + }, + 5: { + Fc: int8('e'), + Fexpansion: __ccgo_ts + 1323, + }, + 6: { + Fc: int8('w'), + Fexpansion: __ccgo_ts + 1325, + }, + 7: { + Fc: int8('W'), + Fexpansion: __ccgo_ts + 1338, + }, + 8: { + Fc: int8('s'), + Fexpansion: __ccgo_ts + 1352, + }, + 9: { + Fc: int8('S'), + Fexpansion: __ccgo_ts + 1364, + }, + 10: { + Fc: int8('d'), + Fexpansion: __ccgo_ts + 1377, + }, + 11: { + Fc: int8('D'), + Fexpansion: __ccgo_ts + 1389, + }, + 12: {}, +} + +// C documentation +// +// /* Expands a macro delimited by `regex' and `regex_end' to `buf', which +// must have at least `len' items. Sets buf[0] to zero if the there +// is no match in `tre_macros'. */ +func _tre_expand_macro(tls *TLS, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(_tre_macros[i].Fc != 0 && int32(_tre_macros[i].Fc) != int32(*(*int8)(unsafe.Pointer(s)))) { + break + } + goto _1 + _1: + ; + i++ + } + return _tre_macros[i].Fexpansion +} + +func _tre_compare_lit(tls *TLS, a uintptr, b uintptr) (r int32) { + var la, lb uintptr + _, _ = la, lb + la = a + lb = b + /* assumes the range of valid code_min is < INT_MAX */ + return (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(la)))).Fcode_min - (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(lb)))).Fcode_min +} + +type Tliterals = struct { + Fmem Ttre_mem_t + Fa uintptr + Flen1 int32 + Fcap1 int32 +} + +func _tre_new_lit(tls *TLS, p uintptr) (r uintptr) { + var a, v2 uintptr + var v1 int32 + _, _, _ = a, v1, v2 + if (*Tliterals)(unsafe.Pointer(p)).Flen1 >= (*Tliterals)(unsafe.Pointer(p)).Fcap1 { + if (*Tliterals)(unsafe.Pointer(p)).Fcap1 >= Int32FromInt32(1)< max { + return int32(REG_ERANGE) + } + s += uintptr(len1) + } + } + if class != 0 && (*Tneg)(unsafe.Pointer(neg)).Fnegate != 0 { + if (*Tneg)(unsafe.Pointer(neg)).Flen1 >= int32(MAX_NEG_CLASSES) { + return int32(REG_ESPACE) + } + v6 = neg + 4 + v5 = *(*int32)(unsafe.Pointer(v6)) + *(*int32)(unsafe.Pointer(v6))++ + *(*Ttre_ctype_t)(unsafe.Pointer(neg + 8 + uintptr(v5)*4)) = class + } else { + lit = _tre_new_lit(tls, ls) + if !(lit != 0) { + return int32(REG_ESPACE) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = min + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = max + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass = class + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* Add opposite-case codepoints if REG_ICASE is present. + It seems that POSIX requires that bracket negation + should happen before case-folding, but most practical + implementations do it the other way around. Changing + the order would need efficient representation of + case-fold ranges and bracket range sets even with + simple patterns so this is ok for now. */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && !(class != 0) { + if _add_icase_literals(tls, ls, min, max) != 0 { + return int32(REG_ESPACE) + } + } + } + goto _1 + _1: + } + return r +} + +func _parse_bracket(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(288) + defer tls.Free(288) + var err Treg_errcode_t + var i, max, min, negmax, negmin, v1, v3 int32 + var lit, n, nc, node uintptr + var _ /* ls at bp+0 */ Tliterals + var _ /* neg at bp+16 */ Tneg + _, _, _, _, _, _, _, _, _, _, _, _ = err, i, lit, max, min, n, nc, negmax, negmin, node, v1, v3 + node = uintptr(0) + nc = uintptr(0) + (*(*Tliterals)(unsafe.Pointer(bp))).Fmem = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem + (*(*Tliterals)(unsafe.Pointer(bp))).Flen1 = 0 + (*(*Tliterals)(unsafe.Pointer(bp))).Fcap1 = int32(32) + (*(*Tliterals)(unsafe.Pointer(bp))).Fa = Xmalloc(tls, uint32((*(*Tliterals)(unsafe.Pointer(bp))).Fcap1)*uint32(4)) + if !((*(*Tliterals)(unsafe.Pointer(bp))).Fa != 0) { + return int32(REG_ESPACE) + } + (*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1 = 0 + (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate = BoolInt32(int32(*(*int8)(unsafe.Pointer(s))) == int32('^')) + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + s++ + } + err = _parse_bracket_terms(tls, ctx, s, bp, bp+16) + if err != REG_OK { + goto parse_bracket_done + } + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + /* + * With REG_NEWLINE, POSIX requires that newlines are not matched by + * any form of a non-matching list. + */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int32('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int32('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + } + /* Sort the array if we need to negate it. */ + Xqsort(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa, uint32((*(*Tliterals)(unsafe.Pointer(bp))).Flen1), uint32(4), __ccgo_fp(_tre_compare_lit)) + /* extra lit for the last negated range */ + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int32(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int32(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* negated classes */ + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1 != 0 { + nc = X__tre_mem_alloc_impl(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, UintptrFromInt32(0), 0, uint32((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1+Int32FromInt32(1))*uint32(4)) + if !(nc != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + Xmemcpy(tls, nc, bp+16+8, uint32((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1)*uint32(4)) + *(*Ttre_ctype_t)(unsafe.Pointer(nc + uintptr((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1)*4)) = uint32(0) + } + } + /* Build a union of the items in the array, negated if necessary. */ + v1 = Int32FromInt32(0) + negmin = v1 + negmax = v1 + i = 0 + for { + if !(i < (*(*Tliterals)(unsafe.Pointer(bp))).Flen1) { + break + } + lit = *(*uintptr)(unsafe.Pointer((*(*Tliterals)(unsafe.Pointer(bp))).Fa + uintptr(i)*4)) + min = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min + max = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + if min <= negmin { + /* Overlap. */ + if max+int32(1) >= negmin { + v3 = max + int32(1) + } else { + v3 = negmin + } + negmin = v3 + goto _2 + } + negmax = min - int32(1) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = negmin + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = negmax + negmin = max + int32(1) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes = nc + n = _tre_ast_new_node(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(_LITERAL), lit) + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, node, n) + if !(node != 0) { + err = int32(REG_ESPACE) + break + } + goto _2 + _2: + ; + i++ + } + goto parse_bracket_done +parse_bracket_done: + ; + Xfree(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return err +} + +func _parse_dup_count(tls *TLS, s uintptr, n uintptr) (r uintptr) { + *(*int32)(unsafe.Pointer(n)) = -int32(1) + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return s + } + *(*int32)(unsafe.Pointer(n)) = 0 + for { + *(*int32)(unsafe.Pointer(n)) = int32(10)**(*int32)(unsafe.Pointer(n)) + (int32(*(*int8)(unsafe.Pointer(s))) - int32('0')) + s++ + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) || *(*int32)(unsafe.Pointer(n)) > int32(RE_DUP_MAX) { + break + } + goto _1 + _1: + } + return s +} + +func _parse_dup(tls *TLS, s uintptr, ere int32, pmin uintptr, pmax uintptr) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v4 uintptr + var v2, v3, v5 bool + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _ = v1, v2, v3, v4, v5 + s = _parse_dup_count(tls, s, bp) + if int32(*(*int8)(unsafe.Pointer(s))) == int32(',') { + s = _parse_dup_count(tls, s+uintptr(1), bp+4) + } else { + *(*int32)(unsafe.Pointer(bp + 4)) = *(*int32)(unsafe.Pointer(bp)) + } + if v3 = *(*int32)(unsafe.Pointer(bp + 4)) < *(*int32)(unsafe.Pointer(bp)) && *(*int32)(unsafe.Pointer(bp + 4)) >= 0 || *(*int32)(unsafe.Pointer(bp + 4)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) < 0; !v3 { + if v2 = !(ere != 0); v2 { + v1 = s + s++ + } + } + if v5 = v3 || v2 && int32(*(*int8)(unsafe.Pointer(v1))) != int32('\\'); !v5 { + v4 = s + s++ + } + if v5 || int32(*(*int8)(unsafe.Pointer(v4))) != int32('}') { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(pmin)) = *(*int32)(unsafe.Pointer(bp)) + *(*int32)(unsafe.Pointer(pmax)) = *(*int32)(unsafe.Pointer(bp + 4)) + return s +} + +func _hexval1(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func _marksub(tls *TLS, ctx uintptr, node uintptr, subid int32) (r Treg_errcode_t) { + var n uintptr + _ = n + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + n = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !(n != 0) { + return int32(REG_ESPACE) + } + n = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, n, node) + if !(n != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(n)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches + node = n + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = subid + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return REG_OK +} + +/* +BRE grammar: +Regex = Branch | '^' | '$' | '^$' | '^' Branch | Branch '$' | '^' Branch '$' +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '\(' Branch '\)' | back_ref +Dup = '*' | '\{' Count '\}' | '\{' Count ',\}' | '\{' Count ',' Count '\}' + +(leading ^ and trailing $ in a sub expr may be an anchor or literal as well) + +ERE grammar: +Regex = Branch | Regex '|' Branch +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '(' Regex ')' | '^' | '$' +Dup = '*' | '+' | '?' | '{' Count '}' | '{' Count ',}' | '{' Count ',' Count '}' + +(a*+?, ^*, $+, \X, {, (|a) are unspecified) +*/ + +func _parse_atom(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, ere, i, len1, v, val, v16, v18, v20, v21, v23, v25 int32 + var err Treg_errcode_t + var node, p, tmp1, tmp11, tmp2, tmp21, v14, v17, v19, v22, v24, v26 uintptr + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ere, err, i, len1, node, p, tmp1, tmp11, tmp2, tmp21, v, val, v14, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26 + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + switch int32(*(*int8)(unsafe.Pointer(s))) { + case int32('['): + goto _1 + case int32('\\'): + goto _2 + case int32('.'): + goto _3 + case int32('^'): + goto _4 + case int32('$'): + goto _5 + case int32('?'): + goto _6 + case int32('+'): + goto _7 + case int32('{'): + goto _8 + case int32('*'): + goto _9 + case int32('|'): + goto _10 + case 0: + goto _11 + default: + goto _12 + } + goto _13 +_1: + ; + return _parse_bracket(tls, ctx, s+uintptr(1)) +_2: + ; + p = _tre_expand_macro(tls, s+uintptr(1)) + if p != 0 { + /* assume \X expansion is a single atom */ + err = _parse_atom(tls, ctx, p) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + uintptr(2) + return err + } + /* extensions: \b, \B, \<, \>, \xHH \x{HHHH} */ + s++ + v14 = s + switch int32(*(*int8)(unsafe.Pointer(v14))) { + case 0: + return int32(REG_EESCAPE) + case int32('b'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB), -int32(1)) + case int32('B'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB_NEG), -int32(1)) + case int32('<'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOW), -int32(1)) + case int32('>'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOW), -int32(1)) + case int32('x'): + s++ + v = 0 + len1 = int32(2) + if int32(*(*int8)(unsafe.Pointer(s))) == int32('{') { + len1 = int32(8) + s++ + } + i = 0 + for { + if !(i < len1 && v < int32(0x110000)) { + break + } + c = _hexval1(tls, uint32(*(*int8)(unsafe.Pointer(s + uintptr(i))))) + if c < 0 { + break + } + v = int32(16)*v + c + goto _15 + _15: + ; + i++ + } + s += uintptr(i) + if len1 == int32(8) { + if int32(*(*int8)(unsafe.Pointer(s))) != int32('}') { + return int32(REG_EBRACE) + } + s++ + } + v17 = ctx + 24 + v16 = *(*int32)(unsafe.Pointer(v17)) + *(*int32)(unsafe.Pointer(v17))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, v, v, v16) + s-- + case int32('{'): + fallthrough + case int32('+'): + fallthrough + case int32('?'): + /* extension: treat \+, \? as repetitions in BRE */ + /* reject repetitions after empty expression in BRE */ + if !(ere != 0) { + return int32(REG_BADRPT) + } + fallthrough + case int32('|'): + /* extension: treat \| as alternation in BRE */ + if !(ere != 0) { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + s-- + goto end + } + /* fallthrough */ + fallthrough + default: + if !(ere != 0) && uint32(*(*int8)(unsafe.Pointer(s)))-uint32('1') < uint32(9) { + /* back reference */ + val = int32(*(*int8)(unsafe.Pointer(s))) - int32('0') + v19 = ctx + 24 + v18 = *(*int32)(unsafe.Pointer(v19)) + *(*int32)(unsafe.Pointer(v19))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(4), val, v18) + if val >= (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref { + v20 = val + } else { + v20 = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref = v20 + } else { + /* extension: accept unknown escaped char + as a literal */ + goto parse_literal + } + } + s++ + goto _13 +_3: + ; + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + v22 = ctx + 24 + v21 = *(*int32)(unsafe.Pointer(v22)) + *(*int32)(unsafe.Pointer(v22))++ + tmp1 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, Int32FromUint8('\n')-Int32FromInt32(1), v21) + v24 = ctx + 24 + v23 = *(*int32)(unsafe.Pointer(v24)) + *(*int32)(unsafe.Pointer(v24))++ + tmp2 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, Int32FromUint8('\n')+Int32FromInt32(1), int32(TRE_CHAR_MAX), v23) + if tmp1 != 0 && tmp2 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp1, tmp2) + } else { + node = uintptr(0) + } + } else { + v26 = ctx + 24 + v25 = *(*int32)(unsafe.Pointer(v26)) + *(*int32)(unsafe.Pointer(v26))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, int32(TRE_CHAR_MAX), v25) + } + s++ + goto _13 +_4: + ; + /* '^' has a special meaning everywhere in EREs, and at beginning of BRE. */ + if !(ere != 0) && s != (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOL), -int32(1)) + s++ + goto _13 +_5: + ; + /* '$' is special everywhere in EREs, and at the end of a BRE subexpression. */ + if !(ere != 0) && *(*int8)(unsafe.Pointer(s + 1)) != 0 && (int32(*(*int8)(unsafe.Pointer(s + 1))) != int32('\\') || int32(*(*int8)(unsafe.Pointer(s + 2))) != int32(')') && int32(*(*int8)(unsafe.Pointer(s + 2))) != int32('|')) { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOL), -int32(1)) + s++ + goto _13 +_9: + ; +_8: + ; +_7: + ; +_6: + ; + /* reject repetitions after empty expression in ERE */ + if ere != 0 { + return int32(REG_BADRPT) + } +_10: + ; + if !(ere != 0) { + goto parse_literal + } +_11: + ; + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + goto _13 +_12: + ; + goto parse_literal +parse_literal: + ; + len1 = Xmbtowc(tls, bp, s, uint32(-Int32FromInt32(1))) + if len1 < 0 { + return int32(REG_BADPAT) + } + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && (Xiswupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0 || Xiswlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0) { + /* multiple opposite case characters are not supported */ + tmp11 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + tmp21 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + if tmp11 != 0 && tmp21 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp11, tmp21) + } else { + node = uintptr(0) + } + } else { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, *(*Twchar_t)(unsafe.Pointer(bp)), *(*Twchar_t)(unsafe.Pointer(bp)), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + s += uintptr(len1) + goto _13 +_13: + ; + goto end +end: + ; + if !(node != 0) { + return int32(REG_ESPACE) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + return REG_OK +} + +func _tre_parse(tls *TLS, ctx uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, depth, ere, subid, v2, v7 int32 + var err, v1, v4, v5, v6 Treg_errcode_t + var nbranch, nunion, s, stack, v8 uintptr + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, depth, ere, err, nbranch, nunion, s, stack, subid, v1, v2, v4, v5, v6, v7, v8 + nbranch = uintptr(0) + nunion = uintptr(0) + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart + subid = 0 + depth = 0 + stack = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstack + v2 = subid + subid++ + v1 = _tre_stack_push_int(tls, stack, v2) + err = v1 + if v1 != REG_OK { + return err + } + for { + if !(ere != 0) && int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32('(') || ere != 0 && int32(*(*int8)(unsafe.Pointer(s))) == int32('(') { + v4 = _tre_stack_push_voidptr(tls, stack, nunion) + err = v4 + if v4 != REG_OK { + return err + } + v5 = _tre_stack_push_voidptr(tls, stack, nbranch) + err = v5 + if v5 != REG_OK { + return err + } + v7 = subid + subid++ + v6 = _tre_stack_push_int(tls, stack, v7) + err = v6 + if v6 != REG_OK { + return err + } + s++ + if !(ere != 0) { + s++ + } + depth++ + v8 = UintptrFromInt32(0) + nunion = v8 + nbranch = v8 + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + goto _3 + } + if !(ere != 0) && int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32(')') || ere != 0 && int32(*(*int8)(unsafe.Pointer(s))) == int32(')') && depth != 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + } else { + err = _parse_atom(tls, ctx, s) + if err != REG_OK { + return err + } + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs + } + goto parse_iter + parse_iter: + ; + for { + if int32(*(*int8)(unsafe.Pointer(s))) != int32('\\') && int32(*(*int8)(unsafe.Pointer(s))) != int32('*') { + if !(ere != 0) { + break + } + if int32(*(*int8)(unsafe.Pointer(s))) != int32('+') && int32(*(*int8)(unsafe.Pointer(s))) != int32('?') && int32(*(*int8)(unsafe.Pointer(s))) != int32('{') { + break + } + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && ere != 0 { + break + } + /* extension: treat \+, \? as repetitions in BRE */ + if int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) != int32('+') && int32(*(*int8)(unsafe.Pointer(s + 1))) != int32('?') && int32(*(*int8)(unsafe.Pointer(s + 1))) != int32('{') { + break + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') { + s++ + } + /* handle ^* at the start of a BRE. */ + if !(ere != 0) && s == (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart+uintptr(1) && int32(*(*int8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) == int32('^') { + break + } + /* extension: multiple consecutive *+?{,} is unspecified, + but (a+)+ has to be supported so accepting a++ makes + sense, note however that the RE_DUP_MAX limit can be + circumvented: (a{255}){255} uses a lot of memory.. */ + if int32(*(*int8)(unsafe.Pointer(s))) == int32('{') { + s = _parse_dup(tls, s+uintptr(1), ere, bp, bp+4) + if !(s != 0) { + return int32(REG_BADBR) + } + } else { + *(*int32)(unsafe.Pointer(bp)) = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = -int32(1) + if int32(*(*int8)(unsafe.Pointer(s))) == int32('+') { + *(*int32)(unsafe.Pointer(bp)) = int32(1) + } + if int32(*(*int8)(unsafe.Pointer(s))) == int32('?') { + *(*int32)(unsafe.Pointer(bp + 4)) = int32(1) + } + s++ + } + if *(*int32)(unsafe.Pointer(bp + 4)) == 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + } else { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_iter(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), 0) + } + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + goto _9 + _9: + } + nbranch = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nbranch, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn) + if ere != 0 && int32(*(*int8)(unsafe.Pointer(s))) == int32('|') || ere != 0 && int32(*(*int8)(unsafe.Pointer(s))) == int32(')') && depth != 0 || !(ere != 0) && int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32(')') || !(ere != 0) && int32(*(*int8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32('|') || !(*(*int8)(unsafe.Pointer(s)) != 0) { + /* extension: empty branch is unspecified (), (|a), (a|) + here they are not rejected but match on empty string */ + c = int32(*(*int8)(unsafe.Pointer(s))) + nunion = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nunion, nbranch) + nbranch = uintptr(0) + if c == int32('\\') && int32(*(*int8)(unsafe.Pointer(s + 1))) == int32('|') { + s += uintptr(2) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('|') { + s++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('\\') { + if !(depth != 0) { + return int32(REG_EPAREN) + } + s += uintptr(2) + } else { + if c == int32(')') { + s++ + } + } + depth-- + err = _marksub(tls, ctx, nunion, _tre_stack_pop_int(tls, stack)) + if err != REG_OK { + return err + } + if !(c != 0) && depth < 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fsubmatch_id = subid + return REG_OK + } + if !(c != 0) || depth < 0 { + return int32(REG_EPAREN) + } + nbranch = _tre_stack_pop_voidptr(tls, stack) + nunion = _tre_stack_pop_voidptr(tls, stack) + goto parse_iter + } + } + } + goto _3 + _3: + } + return r +} + +/*********************************************************************** + from tre-compile.c +***********************************************************************/ + +/* + TODO: + - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive + function calls. +*/ + +/* + Algorithms to setup tags so that submatch addressing can be done. +*/ + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the left child a new tag with number `tag_id' to `node' is added, +// and the right child is the old root. */ +func _tre_add_tag_left(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(8)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the right child a new tag with number `tag_id' to `node' is added, +// and the left child is the old root. */ +func _tre_add_tag_right(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(8)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +type Ttre_addtags_symbol_t = int32 + +const _ADDTAGS_RECURSE = 0 +const _ADDTAGS_AFTER_ITERATION = 1 +const _ADDTAGS_AFTER_UNION_LEFT = 2 +const _ADDTAGS_AFTER_UNION_RIGHT = 3 +const _ADDTAGS_AFTER_CAT_LEFT = 4 +const _ADDTAGS_AFTER_CAT_RIGHT = 5 +const _ADDTAGS_SET_SUBMATCH_END = 6 + +type Ttre_tag_states_t = struct { + Ftag int32 + Fnext_tag int32 +} + +// C documentation +// +// /* Go through `regset' and set submatch data for submatches that are +// using this tag. */ +func _tre_purge_regset(tls *TLS, regset uintptr, tnfa uintptr, tag int32) { + var i, id, start int32 + _, _, _ = i, id, start + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) >= 0) { + break + } + id = *(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) / int32(2) + start = BoolInt32(!(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4))%Int32FromInt32(2) != 0)) + if start != 0 { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*12))).Fso_tag = tag + } else { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*12))).Feo_tag = tag + } + goto _1 + _1: + ; + i++ + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) +} + +// C documentation +// +// /* Adds tags to appropriate locations in the parse tree in `tree', so that +// subexpressions marked for submatch addressing can be traced. */ +func _tre_add_tags(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr, tnfa uintptr) (r Treg_errcode_t) { + var added_tags, bottom, enter_tag, first_pass, i1, i2, i3, i4, i5, i6, i7, id, id1, left_tag, minimal, minimal_tag, new_tag, next_tag, num_minimals, num_tags, reserved_tag, right_tag, tag, tag_left, tag_right, v22 int32 + var cat, iter, left, left1, left2, lit, node, orig_regset, p, parents, regset, right, right1, right2, saved_states, uni uintptr + var direction Ttre_tag_direction_t + var i uint32 + var status Treg_errcode_t + var symbol Ttre_addtags_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = added_tags, bottom, cat, direction, enter_tag, first_pass, i, i1, i2, i3, i4, i5, i6, i7, id, id1, iter, left, left1, left2, left_tag, lit, minimal, minimal_tag, new_tag, next_tag, node, num_minimals, num_tags, orig_regset, p, parents, regset, reserved_tag, right, right1, right2, right_tag, saved_states, status, symbol, tag, tag_left, tag_right, uni, v22 + status = REG_OK + node = tree /* Tree node we are currently looking at. */ + bottom = _tre_stack_num_objects(tls, stack) + /* True for first pass (counting number of needed tags) */ + first_pass = BoolInt32(mem == UintptrFromInt32(0) || tnfa == UintptrFromInt32(0)) + num_tags = 0 /* Total number of tags. */ + num_minimals = 0 /* Number of special minimal tags. */ + tag = 0 /* The tag that is to be added next. */ + next_tag = int32(1) /* Stack of submatches the current submatch is + contained in. */ + minimal_tag = -int32(1) + direction = int32(_TRE_TAG_MINIMIZE) + if !(first_pass != 0) { + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = 0 + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags)) = -int32(1) + } + regset = Xmalloc(tls, uint32(4)*(((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))*uint32(2))) + if regset == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + orig_regset = regset + parents = Xmalloc(tls, uint32(4)*((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))) + if parents == UintptrFromInt32(0) { + Xfree(tls, regset) + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(parents)) = -int32(1) + saved_states = Xmalloc(tls, uint32(8)*((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))) + if saved_states == UintptrFromInt32(0) { + Xfree(tls, regset) + Xfree(tls, parents) + return int32(REG_ESPACE) + } else { + i = uint32(0) + for { + if !(i <= (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + (*(*Ttre_tag_states_t)(unsafe.Pointer(saved_states + uintptr(i)*8))).Ftag = -int32(1) + goto _1 + _1: + ; + i++ + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + for _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_ADDTAGS_SET_SUBMATCH_END): + goto _2 + case int32(_ADDTAGS_RECURSE): + goto _3 + case int32(_ADDTAGS_AFTER_ITERATION): + goto _4 + case int32(_ADDTAGS_AFTER_CAT_LEFT): + goto _5 + case int32(_ADDTAGS_AFTER_CAT_RIGHT): + goto _6 + case int32(_ADDTAGS_AFTER_UNION_LEFT): + goto _7 + case int32(_ADDTAGS_AFTER_UNION_RIGHT): + goto _8 + default: + goto _9 + } + goto _10 + _2: + ; + id = _tre_stack_pop_int(tls, stack) + /* Add end of this submatch to regset. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) >= 0) { + break + } + goto _11 + _11: + ; + i1++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) = id*int32(2) + int32(1) + *(*int32)(unsafe.Pointer(regset + uintptr(i1+int32(1))*4)) = -int32(1) + /* Pop this submatch from the parents stack. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i1)*4)) >= 0) { + break + } + goto _12 + _12: + ; + i1++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i1-int32(1))*4)) = -int32(1) + goto _10 + _3: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + id1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + /* Add start of this submatch to regset. */ + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) >= 0) { + break + } + goto _13 + _13: + ; + i2++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) = id1 * int32(2) + *(*int32)(unsafe.Pointer(regset + uintptr(i2+int32(1))*4)) = -int32(1) + if !(first_pass != 0) { + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + goto _14 + _14: + ; + i2++ + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*12))).Fparents = UintptrFromInt32(0) + if i2 > 0 { + p = Xmalloc(tls, uint32(4)*uint32(i2+Int32FromInt32(1))) + if p == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + goto _10 + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*12))).Fparents = p + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = *(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) + goto _15 + _15: + ; + i2++ + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = -int32(1) + } + } + /* Add end of this submatch to regset after processing this + node. */ + status = _tre_stack_push_int(tls, stack, (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id) + if status != REG_OK { + goto _10 + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_SET_SUBMATCH_END)) + if status != REG_OK { + goto _10 + } + } + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + /* Regset is not empty, so add a tag before the + literal or backref. */ + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i3 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) >= 0) { + break + } + goto _16 + _16: + ; + i3++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = int32(1) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + } else { + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft + right = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright + reserved_tag = -int32(1) + /* After processing right child. */ + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, next_tag+(*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags) + if status != REG_OK { + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags > 0 && (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_tags > 0 { + /* Reserve the next tag to the right child. */ + reserved_tag = next_tag + next_tag++ + } + status = _tre_stack_push_int(tls, stack, reserved_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if first_pass != 0 { + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0)) + if status != REG_OK { + break + } + } else { + status = _tre_stack_push_int(tls, stack, tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0))) + if status != REG_OK { + break + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_ITERATION)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + if int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0 { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = int32(_TRE_TAG_MAXIMIZE) + } else { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + } + if minimal_tag >= 0 { + i4 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) >= 0) { + break + } + goto _17 + _17: + ; + i4++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + direction = int32(_TRE_TAG_MINIMIZE) + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft + right1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fright + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + left_tag = next_tag + right_tag = next_tag + int32(1) + } else { + left_tag = tag + right_tag = next_tag + } + /* After processing right child. */ + status = _tre_stack_push_int(tls, stack, right_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, left_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, regset) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i5 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) >= 0) { + break + } + goto _18 + _18: + ; + i5++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + /* The next two tags are reserved for markers. */ + next_tag++ + tag = next_tag + next_tag++ + } + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + /* Push this submatch on the parents stack. */ + i6 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) >= 0) { + break + } + goto _19 + _19: + ; + i6++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + *(*int32)(unsafe.Pointer(parents + uintptr(i6+int32(1))*4)) = -int32(1) + } + goto _10 /* end case: ADDTAGS_RECURSE */ + _4: + ; + minimal = 0 + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg)).Fnum_tags + _tre_stack_pop_int(tls, stack) + minimal_tag = -int32(1) + } else { + minimal = _tre_stack_pop_int(tls, stack) + enter_tag = _tre_stack_pop_int(tls, stack) + if minimal != 0 { + minimal_tag = enter_tag + } + } + if !(first_pass != 0) { + if minimal != 0 { + direction = int32(_TRE_TAG_MINIMIZE) + } else { + direction = int32(_TRE_TAG_MAXIMIZE) + } + } + goto _10 + _5: + ; + new_tag = _tre_stack_pop_int(tls, stack) + next_tag = _tre_stack_pop_int(tls, stack) + if new_tag >= 0 { + tag = new_tag + } + goto _10 + _6: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + } + goto _10 + _7: + ; + /* Lift the bottom of the `regset' array so that when processing + the right operand the items currently in the array are + invisible. The original bottom was saved at ADDTAGS_UNION and + will be restored at ADDTAGS_AFTER_UNION_RIGHT below. */ + _21: + ; + if !(*(*int32)(unsafe.Pointer(regset)) >= 0) { + goto _20 + } + regset += 4 + goto _21 + _20: + ; + goto _10 + _8: + ; + left2 = _tre_stack_pop_voidptr(tls, stack) + right2 = _tre_stack_pop_voidptr(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + added_tags = _tre_stack_pop_int(tls, stack) + if first_pass != 0 { + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + v22 = int32(2) + } else { + v22 = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + added_tags + v22 + } + regset = _tre_stack_pop_voidptr(tls, stack) + tag_left = _tre_stack_pop_int(tls, stack) + tag_right = _tre_stack_pop_int(tls, stack) + /* Add tags after both children, the left child gets a smaller + tag than the right child. This guarantees that we prefer + the left child over the right child. */ + /* XXX - This is not always necessary (if the children have + tags which must be seen for every match of that child). */ + /* XXX - Check if this is the only place where tre_add_tag_right + is used. If so, use tre_add_tag_left (putting the tag before + the child as opposed after the child) and throw away + tre_add_tag_right. */ + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + if !(first_pass != 0) { + status = _tre_add_tag_right(tls, mem, left2, tag_left) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_left)*4)) = int32(_TRE_TAG_MAXIMIZE) + if status == REG_OK { + status = _tre_add_tag_right(tls, mem, right2, tag_right) + } + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_right)*4)) = int32(_TRE_TAG_MAXIMIZE) + } + num_tags += int32(2) + } + direction = int32(_TRE_TAG_MAXIMIZE) + goto _10 + _9: + ; + goto _10 + _10: + /* end switch(symbol) */ + } /* end while(tre_stack_num_objects(stack) > bottom) */ + if !(first_pass != 0) { + _tre_purge_regset(tls, regset, tnfa, tag) + } + if !(first_pass != 0) && minimal_tag >= 0 { + i7 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) >= 0) { + break + } + goto _23 + _23: + ; + i7++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals = num_minimals + Xfree(tls, orig_regset) + Xfree(tls, parents) + Xfree(tls, saved_states) + return status +} + +/* + AST to TNFA compilation routines. +*/ + +type Ttre_copyast_symbol_t = int32 + +const _COPY_RECURSE = 0 +const _COPY_SET_RESULT_PTR = 1 + +/* Flags for tre_copy_ast(). */ + +func _tre_copy_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, flags int32, pos_add uintptr, tag_directions uintptr, copy1 uintptr, max_pos uintptr) (r Treg_errcode_t) { + var bottom, first_tag, max, min, num_copied, pos, v1 int32 + var cat, iter, lit, node, p, result, tmp, tmp1, uni uintptr + var status Treg_errcode_t + var symbol Ttre_copyast_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bottom, cat, first_tag, iter, lit, max, min, node, num_copied, p, pos, result, status, symbol, tmp, tmp1, uni, v1 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + num_copied = 0 + first_tag = int32(1) + result = copy1 + status = _tre_stack_push_voidptr(tls, stack, ast) + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_COPY_SET_RESULT_PTR): + result = _tre_stack_pop_voidptr(tls, stack) + case int32(_COPY_RECURSE): + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + pos = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + min = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min + max = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + /* XXX - e.g. [ab] has only one position but two + nodes, so we are creating holes in the state space + here. Not fatal, just wastes memory. */ + pos += *(*int32)(unsafe.Pointer(pos_add)) + num_copied++ + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(3) && flags&int32(COPY_REMOVE_TAGS) != 0 { + /* Change this tag to empty. */ + min = -int32(1) + v1 = -Int32FromInt32(1) + pos = v1 + max = v1 + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(3) && flags&int32(COPY_MAXIMIZE_FIRST_TAG) != 0 && first_tag != 0 { + /* Maximize the first tag. */ + *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(max)*4)) = int32(_TRE_TAG_MAXIMIZE) + first_tag = 0 + } + } + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_literal(tls, mem, min, max, pos) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + } else { + p = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_literal_t)(unsafe.Pointer(p)).Fclass = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass + (*Ttre_literal_t)(unsafe.Pointer(p)).Fneg_classes = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes + } + if pos > *(*int32)(unsafe.Pointer(max_pos)) { + *(*int32)(unsafe.Pointer(max_pos)) = pos + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_union(tls, mem, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = tmp + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp+4) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_catenation(tls, mem, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp1 = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fleft = UintptrFromInt32(0) + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fright = UintptrFromInt32(0) + result = tmp1 + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp1+4) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_iter(tls, mem, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0))) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + iter = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = iter + default: + break + } + break + } + } + *(*int32)(unsafe.Pointer(pos_add)) += num_copied + return status +} + +type Ttre_expand_ast_symbol_t = int32 + +const _EXPAND_RECURSE = 0 +const _EXPAND_AFTER_ITER = 1 + +// C documentation +// +// /* Expands each iteration node that has a finite nonzero minimum or maximum +// iteration count to a catenated sequence of copies of the node. */ +func _tre_expand_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, position uintptr, tag_directions uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var _status, _status1, status Treg_errcode_t + var bottom, flags, iter_depth, j, pos_add_last, pos_add_save, pos_add_total, v2 int32 + var cat, iter, iter1, lit, node, seq1, tmp, uni uintptr + var symbol Ttre_expand_ast_symbol_t + var _ /* copy at bp+12 */ uintptr + var _ /* copy at bp+16 */ uintptr + var _ /* max_pos at bp+4 */ int32 + var _ /* pos_add at bp+0 */ int32 + var _ /* seq2 at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, bottom, cat, flags, iter, iter1, iter_depth, j, lit, node, pos_add_last, pos_add_save, pos_add_total, seq1, status, symbol, tmp, uni, v2 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + *(*int32)(unsafe.Pointer(bp)) = 0 + pos_add_total = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + iter_depth = 0 + _status = _tre_stack_push_voidptr(tls, stack, ast) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_EXPAND_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + *(*int32)(unsafe.Pointer(lit + 8)) += *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition > *(*int32)(unsafe.Pointer(bp + 4)) { + *(*int32)(unsafe.Pointer(bp + 4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + } + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_int(tls, stack, *(*int32)(unsafe.Pointer(bp))) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_AFTER_ITER)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + /* If we are going to expand this node at EXPAND_AFTER_ITER + then don't increase the `pos' fields of the nodes now, it + will get done when expanding. */ + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax > int32(1) { + *(*int32)(unsafe.Pointer(bp)) = 0 + } + iter_depth++ + default: + break + } + case int32(_EXPAND_AFTER_ITER): + iter1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*int32)(unsafe.Pointer(bp)) = _tre_stack_pop_int(tls, stack) + pos_add_last = *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax > int32(1) { + seq1 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = UintptrFromInt32(0) + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + /* Create a catenated sequence of copies of the node. */ + j = 0 + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin) { + break + } + if j+int32(1) < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin { + v2 = int32(COPY_REMOVE_TAGS) + } else { + v2 = int32(COPY_MAXIMIZE_FIRST_TAG) + } + /* Remove tags from all but the last copy. */ + flags = v2 + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, flags, bp, tag_directions, bp+12, bp+4) + if status != REG_OK { + return status + } + if seq1 != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 12))) + } else { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 12)) + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _1 + _1: + ; + j++ + } + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax == -int32(1) { + /* No upper limit. */ + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+8, bp+4) + if status != REG_OK { + return status + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_iter(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, -int32(1), 0) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } else { + j = (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax) { + break + } + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+16, bp+4) + if status != REG_OK { + return status + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_catenation(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 8))) + } else { + *(*uintptr)(unsafe.Pointer(bp + 8)) = *(*uintptr)(unsafe.Pointer(bp + 16)) + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + tmp = _tre_ast_new_literal(tls, mem, -int32(1), -int32(1), -int32(1)) + if tmp == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_union(tls, mem, tmp, *(*uintptr)(unsafe.Pointer(bp + 8))) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _3 + _3: + ; + j++ + } + } + *(*int32)(unsafe.Pointer(bp)) = pos_add_save + if seq1 == UintptrFromInt32(0) { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 8))) + } + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Ftype1 + } + iter_depth-- + pos_add_total += *(*int32)(unsafe.Pointer(bp)) - pos_add_last + if iter_depth == 0 { + *(*int32)(unsafe.Pointer(bp)) = pos_add_total + } + default: + break + } + } + *(*int32)(unsafe.Pointer(position)) += pos_add_total + /* `max_pos' should never be larger than `*position' if the above + code works, but just an extra safeguard let's make sure + `*position' is set large enough so enough memory will be + allocated for the transition table. */ + if *(*int32)(unsafe.Pointer(bp + 4)) > *(*int32)(unsafe.Pointer(position)) { + *(*int32)(unsafe.Pointer(position)) = *(*int32)(unsafe.Pointer(bp + 4)) + } + return status +} + +func _tre_set_empty(tls *TLS, mem Ttre_mem_t) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_one(tls *TLS, mem Ttre_mem_t, position int32, code_min int32, code_max int32, class Ttre_ctype_t, neg_classes uintptr, backref int32) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), Uint32FromInt64(32)*Uint32FromInt32(2)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = position + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = code_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = code_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fclass = class + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fneg_classes = neg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fbackref = backref + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_union(tls *TLS, mem Ttre_mem_t, set1 uintptr, set2 uintptr, tags uintptr, assertions int32) (r uintptr) { + var i, j, num_tags, s1, s2 int32 + var new_set, new_tags uintptr + _, _, _, _, _, _, _ = i, j, new_set, new_tags, num_tags, s1, s2 + num_tags = 0 + for { + if !(tags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer(tags + uintptr(num_tags)*4)) >= 0) { + break + } + goto _1 + _1: + ; + num_tags++ + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition >= 0) { + break + } + goto _2 + _2: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition >= 0) { + break + } + goto _3 + _3: + ; + s2++ + } + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)*uint32(s1+s2+Int32FromInt32(1))) + if !(new_set != 0) { + return UintptrFromInt32(0) + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fcode_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fassertions | assertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags == UintptrFromInt32(0) && tags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _5 + _5: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, Uint32FromInt64(4)*uint32(i+num_tags+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags + uintptr(j)*4)) + goto _6 + _6: + ; + j++ + } + i = 0 + for { + if !(i < num_tags) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) + goto _7 + _7: + ; + i++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Ftags = new_tags + } + goto _4 + _4: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fcode_max + /* XXX - why not | assertions here as well? */ + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fassertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _9 + _9: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32(i+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags + uintptr(j)*4)) + goto _10 + _10: + ; + j++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Ftags = new_tags + } + goto _8 + _8: + ; + s2++ + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fposition = -int32(1) + return new_set +} + +// C documentation +// +// /* Finds the empty path through `node' which is the one that should be +// taken according to POSIX.2 rules, and adds the tags on that path to +// `tags'. `tags' may be NULL. If `num_tags_seen' is not NULL, it is +// set to the number of tags seen on the path. */ +func _tre_match_empty(tls *TLS, stack uintptr, node uintptr, tags uintptr, assertions uintptr, num_tags_seen uintptr) (r Treg_errcode_t) { + var bottom, i int32 + var cat, iter, lit, uni, p2 uintptr + var status Treg_errcode_t + _, _, _, _, _, _, _, _ = bottom, cat, i, iter, lit, status, uni, p2 + bottom = _tre_stack_num_objects(tls, stack) + status = REG_OK + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen)) = 0 + } + status = _tre_stack_push_voidptr(tls, stack, node) + /* Walk through the tree recursively. */ + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + switch (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min { + case -int32(3): + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max >= 0 { + if tags != UintptrFromInt32(0) { + /* Add the tag to `tags'. */ + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) >= 0) { + break + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) == (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max { + break + } + goto _1 + _1: + ; + i++ + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + *(*int32)(unsafe.Pointer(tags + uintptr(i+int32(1))*4)) = -int32(1) + } + } + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen))++ + } + } + case -int32(2): + if assertions != UintptrFromInt32(0) { + p2 = assertions + *(*int32)(unsafe.Pointer(p2)) = *(*int32)(unsafe.Pointer(p2)) | (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + } + case -int32(1): + default: + break + } + case int32(_UNION): + /* Subexpressions starting earlier take priority over ones + starting later, so we prefer the left subexpression over the + right subexpression. */ + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + } else { + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + } else { + } + } + case int32(_CATENATION): + /* The path must go through both children. */ + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + case int32(_ITERATION): + /* A match with an empty string is preferred over no match at + all, so we go through the argument if possible. */ + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + } + default: + break + } + } + return status +} + +type Ttre_nfl_stack_symbol_t = int32 + +const _NFL_RECURSE = 0 +const _NFL_POST_UNION = 1 +const _NFL_POST_CATENATION = 2 +const _NFL_POST_ITERATION = 3 + +// C documentation +// +// /* Computes and fills in the fields `nullable', `firstpos', and `lastpos' for +// the nodes of the AST `tree'. */ +func _tre_compute_nfl(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, status Treg_errcode_t + var bottom int32 + var cat, iter, lit, node, tags, uni uintptr + var symbol Ttre_nfl_stack_symbol_t + var _ /* assertions at bp+4 */ int32 + var _ /* num_tags at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, bottom, cat, iter, lit, node, status, symbol, tags, uni + bottom = _tre_stack_num_objects(tls, stack) + _status = _tre_stack_push_voidptr(tls, stack, tree) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for _tre_stack_num_objects(tls, stack) > bottom { + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_NFL_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + /* Back references: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint32(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint32(0), UintptrFromInt32(0), (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < 0 { + /* Tags, empty strings, params, and zero width assertions: + nullable = true, firstpos = {}, and lastpos = {}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + /* Literal at position i: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max, uint32(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes, -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } + } + case int32(_UNION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status2 = _tre_stack_push_voidptr(tls, stack, node) + if _status2 != REG_OK { + return _status2 + } + _status3 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_UNION)) + if _status3 != REG_OK { + return _status3 + } + _status4 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status4 != REG_OK { + return _status4 + } + _status5 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status5 != REG_OK { + return _status5 + } + _status6 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status6 != REG_OK { + return _status6 + } + _status7 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status7 != REG_OK { + return _status7 + } + case int32(_CATENATION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status8 = _tre_stack_push_voidptr(tls, stack, node) + if _status8 != REG_OK { + return _status8 + } + _status9 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_CATENATION)) + if _status9 != REG_OK { + return _status9 + } + _status10 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status10 != REG_OK { + return _status10 + } + _status11 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status11 != REG_OK { + return _status11 + } + _status12 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status12 != REG_OK { + return _status12 + } + _status13 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status13 != REG_OK { + return _status13 + } + case int32(_ITERATION): + /* Compute the attributes for the subtree, and after that for + this node. */ + _status14 = _tre_stack_push_voidptr(tls, stack, node) + if _status14 != REG_OK { + return _status14 + } + _status15 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_ITERATION)) + if _status15 != REG_OK { + return _status15 + } + _status16 = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg) + if _status16 != REG_OK { + return _status16 + } + _status17 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status17 != REG_OK { + return _status17 + } + break + } + case int32(_NFL_POST_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Ffirstpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Flastpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + case int32(_NFL_POST_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin == 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos + case int32(_NFL_POST_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 && (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0) + /* Compute firstpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 { + /* The left side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint32(4)*uint32(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos + } + /* Compute lastpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0 { + /* The right side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint32(4)*uint32(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos + } + default: + break + } + } + return REG_OK +} + +// C documentation +// +// /* Adds a transition from each position in `p1' to each position in `p2'. */ +func _tre_make_trans(tls *TLS, p1 uintptr, p2 uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var dup, i, j, k, l, prev_p2_pos, v1, v2, v6 int32 + var orig_p2, trans uintptr + _, _, _, _, _, _, _, _, _, _, _ = dup, i, j, k, l, orig_p2, prev_p2_pos, trans, v1, v2, v6 + orig_p2 = p2 + if transitions != UintptrFromInt32(0) { + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + prev_p2_pos = -int32(1) + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + /* Optimization: if this position was already handled, skip it. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition == prev_p2_pos { + p2 += 32 + continue + } + prev_p2_pos = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + /* Set `trans' to point to the next unused transition from + position `p1->position'. */ + trans = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4)))*32 + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != UintptrFromInt32(0) { + trans += 32 + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate == UintptrFromInt32(0) { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans + UintptrFromInt32(1)*32)).Fstate = UintptrFromInt32(0) + } + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_min = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_min) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_max = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_max) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition)*4)))*32 + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass != 0 { + v1 = int32(ASSERT_CHAR_CLASS) + } else { + v1 = 0 + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + v2 = int32(ASSERT_CHAR_CLASS_NEG) + } else { + v2 = 0 + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fassertions | (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fassertions | v1 | v2 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref >= 0 { + *(*int32)(unsafe.Pointer(trans + 24)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref + *(*int32)(unsafe.Pointer(trans + 20)) |= int32(ASSERT_BACKREF) + } else { + *(*Ttre_ctype_t)(unsafe.Pointer(trans + 24)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) != Uint32FromInt32(0)) { + break + } + goto _3 + _3: + ; + i++ + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = Xmalloc(tls, uint32(4)*uint32(i+Int32FromInt32(1))) + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) != Uint32FromInt32(0)) { + break + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*4)) = *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) + goto _4 + _4: + ; + i++ + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*4)) = Uint32FromInt32(0) + } else { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = UintptrFromInt32(0) + } + /* Find out how many tags this transition has. */ + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + i++ + } + } + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + j++ + } + } + /* If we are overwriting a transition, free the old tag array. */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = UintptrFromInt32(0) + /* If there were any tags, allocate an array and fill it. */ + if i+j > 0 { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = Xmalloc(tls, uint32(4)*uint32(i+j+Int32FromInt32(1))) + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0) { + return int32(REG_ESPACE) + } + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) + i++ + } + } + l = i + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + /* Don't add duplicates. */ + dup = 0 + k = 0 + for { + if !(k < i) { + break + } + if *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(k)*4)) == *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) { + dup = int32(1) + break + } + goto _5 + _5: + ; + k++ + } + if !(dup != 0) { + v6 = l + l++ + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(v6)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) + } + j++ + } + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(l)*4)) = -int32(1) + } + p2 += 32 + } + p1 += 32 + } + } else { + /* Compute a maximum limit for the number of transitions leaving + from each state. */ + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + *(*int32)(unsafe.Pointer(counts + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4))++ + p2 += 32 + } + p1 += 32 + } + } + return REG_OK +} + +// C documentation +// +// /* Converts the syntax tree to a TNFA. All the transitions in the TNFA are +// labelled with one character range (there are no transitions on empty +// strings). The TNFA takes O(n^2) space in the worst case, `n' is size of +// the regexp. */ +func _tre_ast_to_tnfa(tls *TLS, node uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var cat, iter, uni uintptr + var errcode Treg_errcode_t + _, _, _, _ = cat, errcode, iter, uni + errcode = REG_OK + /* XXX - recurse using a stack!. */ + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright, transitions, counts, offs) + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + /* Add a transition from each position in cat->left->lastpos + to each position in cat->right->firstpos. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, transitions, counts, offs) + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax == -int32(1) { + /* Add a transition from each last position in the iterated + expression to each first position. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, transitions, counts, offs) + break + } + return errcode +} + +func Xregcomp(tls *TLS, preg uintptr, regex uintptr, cflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v regex=%v cflags=%v, (%v:)", tls, preg, regex, cflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var add, i, j, v1 int32 + var counts, initial, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v2 uintptr + var errcode Treg_errcode_t + var mem Ttre_mem_t + var _ /* parse_ctx at bp+0 */ Ttre_parse_ctx_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = add, counts, errcode, i, initial, j, mem, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v1, v2 + counts = UintptrFromInt32(0) + offs = UintptrFromInt32(0) + add = 0 + tnfa = UintptrFromInt32(0) + tag_directions = UintptrFromInt32(0) + /* Allocate a stack used throughout the compilation process for various + purposes. */ + stack = _tre_stack_new(tls, int32(512), int32(1024000), int32(128)) + if !(stack != 0) { + return int32(REG_ESPACE) + } + /* Allocate a fast memory allocator. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + if !(mem != 0) { + _tre_stack_destroy(tls, stack) + return int32(REG_ESPACE) + } + /* Parse the regexp. */ + Xmemset(tls, bp, 0, uint32(36)) + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmem = mem + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstack = stack + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstart = regex + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fcflags = cflags + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref = -int32(1) + errcode = _tre_parse(tls, bp) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id - int32(1)) + tree = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fn + /* Referring to nonexistent subexpressions is illegal. */ + if (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref > int32((*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub) { + errcode = int32(REG_ESUBREG) + if int32(1) != 0 { + goto error_exit + } + } + /* Allocate the TNFA struct. */ + tnfa = Xcalloc(tls, uint32(1), uint32(68)) + if tnfa == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs = BoolInt32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref >= 0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_approx = 0 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id) + /* Set up tags for submatch addressing. If REG_NOSUB is set and the + regexp does not have back references, this can be skipped. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 || !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Figure out how many tags we will need. */ + errcode = _tre_add_tags(tls, UintptrFromInt32(0), stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 { + tag_directions = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + if tag_directions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions = tag_directions + Xmemset(tls, tag_directions, -int32(1), uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags = Xcalloc(tls, uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)*uint32(2)+uint32(1), uint32(4)) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + submatch_data = Xcalloc(tls, uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id), uint32(12)) + if submatch_data == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data = submatch_data + errcode = _tre_add_tags(tls, mem, stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + } + /* Expand iteration nodes. */ + errcode = _tre_expand_ast(tls, mem, stack, tree, bp+24, tag_directions) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + /* Add a dummy node for the final state. + XXX - For certain patterns this dummy node can be optimized away, + for example "a*" or "ab*". Figure out a simple way to detect + this possibility. */ + tmp_ast_l = tree + v2 = bp + 24 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + tmp_ast_r = _tre_ast_new_literal(tls, mem, 0, 0, v1) + if tmp_ast_r == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + tree = _tre_ast_new_catenation(tls, mem, tmp_ast_l, tmp_ast_r) + if tree == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + errcode = _tre_compute_nfl(tls, mem, stack, tree) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + counts = Xmalloc(tls, uint32(4)*uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if counts == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + offs = Xmalloc(tls, uint32(4)*uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if offs == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _3 + _3: + ; + i++ + } + _tre_ast_to_tnfa(tls, tree, UintptrFromInt32(0), counts, UintptrFromInt32(0)) + add = 0 + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(offs + uintptr(i)*4)) = add + add += *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) + int32(1) + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _4 + _4: + ; + i++ + } + transitions = Xcalloc(tls, uint32(add)+uint32(1), uint32(32)) + if transitions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions = transitions + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + errcode = _tre_ast_to_tnfa(tls, tree, transitions, counts, offs) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars = UintptrFromInt32(0) + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + i = 0 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0 { + i++ + p += 32 + } + initial = Xcalloc(tls, uint32(i)+uint32(1), uint32(32)) + if initial == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial = initial + i = 0 + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + for { + if !((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0) { + break + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition)*4)))*32 + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags = UintptrFromInt32(0) + /* Copy the arrays p->tags, and p->params, they are allocated + from a tre_mem object. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags != 0 { + j = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags + uintptr(j)*4)) >= 0) { + break + } + goto _6 + _6: + ; + j++ + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags = Xmalloc(tls, uint32(4)*uint32(j+Int32FromInt32(1))) + if !((*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags != 0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + Xmemcpy(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags, (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags, uint32(4)*uint32(j+Int32FromInt32(1))) + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fassertions + i++ + goto _5 + _5: + ; + p += 32 + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate = UintptrFromInt32(0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*(*Ttre_pos_and_tags_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(tree)).Flastpos))).Fposition)*4)))*32 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags = cflags + X__tre_mem_destroy(tls, mem) + _tre_stack_destroy(tls, stack) + Xfree(tls, counts) + Xfree(tls, offs) + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + return REG_OK + goto error_exit +error_exit: + ; + /* Free everything that was allocated and return the error code. */ + X__tre_mem_destroy(tls, mem) + if stack != UintptrFromInt32(0) { + _tre_stack_destroy(tls, stack) + } + if counts != UintptrFromInt32(0) { + Xfree(tls, counts) + } + if offs != UintptrFromInt32(0) { + Xfree(tls, offs) + } + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + Xregfree(tls, preg) + return errcode +} + +func Xregfree(tls *TLS, preg uintptr) { + if __ccgo_strace { + trc("tls=%v preg=%v, (%v:)", tls, preg, origin(2)) + } + var i uint32 + var tnfa, trans uintptr + _, _, _ = i, tnfa, trans + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + if !(tnfa != 0) { + return + } + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions) { + break + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fstate != 0 { + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Ftags != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Ftags) + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fneg_classes != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fneg_classes) + } + } + goto _1 + _1: + ; + i++ + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial != 0 { + trans = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0 { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + goto _2 + _2: + ; + trans += 32 + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data != 0 { + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*12))).Fparents != 0 { + Xfree(tls, (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*12))).Fparents) + } + goto _3 + _3: + ; + i++ + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags) + } + Xfree(tls, tnfa) +} + +/* Error message strings for error codes listed in `regex.h'. This list + needs to be in sync with the codes listed there, naturally. */ + +/* Converted to single string by Rich Felker to remove the need for + * data relocations at runtime, 27 Feb 2006. */ + +var _messages = [286]int8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'o', ' ', 'm', 'a', 't', 'c', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'r', 'e', 'g', 'e', 'x', 'p', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'o', 'l', 'l', 'a', 't', 'i', 'n', 'g', ' ', 'e', 'l', 'e', 'm', 'e', 'n', 't', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'c', 'l', 'a', 's', 's', ' ', 'n', 'a', 'm', 'e', 0, 'T', 'r', 'a', 'i', 'l', 'i', 'n', 'g', ' ', 'b', 'a', 'c', 'k', 's', 'l', 'a', 's', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'b', 'a', 'c', 'k', ' ', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ']', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ')', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', '}', '\'', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', ' ', 'o', 'f', ' ', '{', '}', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'r', 'a', 'n', 'g', 'e', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'R', 'e', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'd', ' ', 'b', 'y', ' ', 'v', 'a', 'l', 'i', 'd', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xregerror(tls *TLS, e int32, preg uintptr, buf uintptr, size Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v e=%v preg=%v buf=%v size=%v, (%v:)", tls, e, preg, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_messages)) + for { + if !(e != 0 && *(*int8)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + e-- + s += uintptr(Xstrlen(tls, s) + uint32(1)) + } + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + s++ + } + s = X__lctrans_cur(tls, s) + return uint32(int32(1) + Xsnprintf(tls, buf, size, __ccgo_ts+15, VaList(bp+8, s))) +} + +const tre_bt_mem_alloc = 0 +const tre_bt_mem_destroy = 0 +const tre_bt_mem_new = 0 + +/*********************************************************************** + from tre-match-utils.h +***********************************************************************/ + +// C documentation +// +// /* Returns 1 if `t1' wins `t2', 0 otherwise. */ +func _tre_tag_order(tls *TLS, num_tags int32, tag_directions uintptr, t1 uintptr, t2 uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(i < num_tags) { + break + } + if *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(i)*4)) == int32(_TRE_TAG_MINIMIZE) { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return 0 + } + } else { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return 0 + } + } + goto _1 + _1: + ; + i++ + } + /* assert(0);*/ + return 0 +} + +func _tre_neg_char_classes_match(tls *TLS, classes uintptr, wc Ttre_cint_t, icase int32) (r int32) { + for *(*Ttre_ctype_t)(unsafe.Pointer(classes)) != Uint32FromInt32(0) { + if !(icase != 0) && Xiswctype(tls, wc, *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || icase != 0 && (Xiswctype(tls, Xtowupper(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || Xiswctype(tls, Xtowlower(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0) { + return int32(1) + } else { + classes += 4 + } + } + return 0 /* No match. */ +} + +/*********************************************************************** + from tre-match-parallel.c +***********************************************************************/ + +/* + This algorithm searches for matches basically by reading characters + in the searched string one by one, starting at the beginning. All + matching paths in the TNFA are traversed in parallel. When two or + more paths reach the same state, exactly one is chosen according to + tag ordering rules; if returning submatches is not required it does + not matter which path is chosen. + + The worst case time required for finding the leftmost and longest + match, or determining that there is no match, is always linearly + dependent on the length of the text being searched. + + This algorithm cannot handle TNFAs with back referencing nodes. + See `tre-match-backtrack.c'. +*/ + +type Ttre_tnfa_reach_t = struct { + Fstate uintptr + Ftags uintptr +} + +type Ttre_reach_pos_t = struct { + Fpos Tregoff_t + Ftags uintptr +} + +func _tre_tnfa_run_parallel(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var buf, reach, reach_i, reach_next, reach_next_i, reach_pos, str_byte, tag_i, tmp_buf, tmp_iptr, tmp_tags, trans_i uintptr + var end, i, new_match, num_tags, reg_newline, reg_notbol, reg_noteol, skip, start, v18 int32 + var match_eo, pos, pos_add_next, v10, v7 Tregoff_t + var pbytes, rbytes, tbytes, total_bytes, xbytes Tsize_t + var prev_c Ttre_char_t + var ret Treg_errcode_t + var v1, v2, v3, v4 uint32 + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = buf, end, i, match_eo, new_match, num_tags, pbytes, pos, pos_add_next, prev_c, rbytes, reach, reach_i, reach_next, reach_next_i, reach_pos, reg_newline, reg_notbol, reg_noteol, ret, skip, start, str_byte, tag_i, tbytes, tmp_buf, tmp_iptr, tmp_tags, total_bytes, trans_i, xbytes, v1, v10, v18, v2, v3, v4, v7 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = -int32(1) + pos_add_next = int32(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + match_eo = -int32(1) /* end offset of match (-1 if no match found yet) */ + new_match = 0 + tmp_tags = UintptrFromInt32(0) + if !(match_tags != 0) { + num_tags = 0 + } else { + num_tags = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags + } + /* Allocate memory for temporary data required for matching. This needs to + be done for every matching operation to be thread safe. This allocates + everything in a single large block with calloc(). */ + /* Ensure that tbytes and xbytes*num_states cannot overflow, and that + * they don't contribute more than 1/8 of SIZE_MAX to total_bytes. */ + if uint32(num_tags) > uint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) { + return int32(REG_ESPACE) + } + /* Likewise check rbytes. */ + if uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+int32(1)) > Uint32FromUint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(8)) { + return int32(REG_ESPACE) + } + /* Likewise check pbytes. */ + if uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) > Uint32FromUint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(8)) { + return int32(REG_ESPACE) + } + /* Compute the length of the block we need. */ + tbytes = uint32(4) * uint32(num_tags) + rbytes = uint32(8) * uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+Int32FromInt32(1)) + pbytes = uint32(8) * uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) + xbytes = uint32(4) * uint32(num_tags) + total_bytes = (Uint32FromInt64(4)-Uint32FromInt32(1))*Uint32FromInt32(4) + (rbytes+xbytes*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states))*uint32(2) + tbytes + pbytes + /* Allocate the memory. */ + buf = Xcalloc(tls, total_bytes, uint32(1)) + if buf == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + /* Get the various pointers within tmp_buf (properly aligned). */ + tmp_tags = buf + tmp_buf = buf + uintptr(tbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v1 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v1 = uint32(0) + } + tmp_buf += uintptr(v1) + reach_next = tmp_buf + tmp_buf += uintptr(rbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v2 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v2 = uint32(0) + } + tmp_buf += uintptr(v2) + reach = tmp_buf + tmp_buf += uintptr(rbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v3 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v3 = uint32(0) + } + tmp_buf += uintptr(v3) + reach_pos = tmp_buf + tmp_buf += uintptr(pbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v4 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v4 = uint32(0) + } + tmp_buf += uintptr(v4) + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach + uintptr(i)*8))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next + uintptr(i)*8))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + goto _5 + _5: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr(i)*8))).Fpos = -int32(1) + goto _6 + _6: + ; + i++ + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v7 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v7 + if v7 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos = 0 + reach_next_i = reach_next + for int32(1) != 0 { + /* If no match found yet, add the initial states to `reach_next'. */ + if match_eo < 0 { + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != UintptrFromInt32(0) { + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos < pos { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + trans_i += 32 + continue + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) = -int32(1) + goto _8 + _8: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != 0 { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*4)) = pos + } + tag_i += 4 + } + } + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) + goto _9 + _9: + ; + i++ + } + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags = reach_next_i + 4 + reach_next_i += 8 + } + trans_i += 32 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } else { + if num_tags == 0 || reach_next_i == reach_next { + /* We have found a match. */ + break + } + } + /* Check for end of string. */ + if !(*(*Ttre_char_t)(unsafe.Pointer(bp)) != 0) { + break + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v10 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v10 + if v10 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + /* For each state in `reach', weed out states that don't fulfill the + minimal matching conditions. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals != 0 && new_match != 0 { + new_match = 0 + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + skip = 0 + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) >= 0) { + break + } + end = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) + start = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i+int32(1))*4)) + if end >= num_tags { + skip = int32(1) + break + } else { + if *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(start)*4)) == *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(start)*4)) && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(end)*4)) < *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(end)*4)) { + skip = int32(1) + break + } + } + goto _12 + _12: + ; + i += int32(2) + } + if !(skip != 0) { + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags = tmp_iptr + reach_next_i += 8 + } + goto _11 + _11: + ; + reach_i += 8 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + } + /* For each state in `reach' see if there is a transition leaving with + the current input symbol to a state not yet in `reach_next', and + add the destination states to `reach_next'. */ + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + trans_i = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + /* Does this transition match the input symbol? */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _14 + } + /* Compute the tags after this transition. */ + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(i)*4)) + goto _15 + _15: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*4)) = pos + } + tag_i += 4 + } + } + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos < pos { + /* Found an unvisited node. */ + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = tmp_tags + tmp_tags = tmp_iptr + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags = reach_next_i + 4 + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal && (match_eo == -int32(1) || num_tags > 0 && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags)) <= *(*Tregoff_t)(unsafe.Pointer(match_tags))) { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) + goto _16 + _16: + ; + i++ + } + } + reach_next_i += 8 + } else { + /* Another path has also reached this state. We choose + the winner by examining the tag values for both + paths. */ + if _tre_tag_order(tls, num_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tmp_tags, *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags))) != 0 { + /* The new path wins. */ + tmp_iptr = *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags)) + *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags)) = tmp_tags + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*4)) + goto _17 + _17: + ; + i++ + } + } + tmp_tags = tmp_iptr + } + } + } + goto _14 + _14: + ; + trans_i += 32 + } + goto _13 + _13: + ; + reach_i += 8 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + if match_eo >= 0 { + v18 = REG_OK + } else { + v18 = int32(REG_NOMATCH) + } + ret = v18 + goto error_exit +error_exit: + ; + Xfree(tls, buf) + return ret +} + +/*********************************************************************** + from tre-match-backtrack.c +***********************************************************************/ + +/* + This matcher is for regexps that use back referencing. Regexp matching + with back referencing is an NP-complete problem on the number of back + references. The easiest way to match them is to use a backtracking + routine which basically goes through all possible paths in the TNFA + and chooses the one which results in the best (leftmost and longest) + match. This can be spectacularly expensive and may run out of stack + space, but there really is no better known generic algorithm. Quoting + Henry Spencer from comp.compilers: + + + POSIX.2 REs require longest match, which is really exciting to + implement since the obsolete ("basic") variant also includes + \. I haven't found a better way of tackling this than doing + a preliminary match using a DFA (or simulation) on a modified RE + that just replicates subREs for \, and then doing a + backtracking match to determine whether the subRE matches were + right. This can be rather slow, but I console myself with the + thought that people who use \ deserve very slow execution. + (Pun unintentional but very appropriate.) + +*/ + +type Ttre_backtrack_item_t = struct { + Fpos Tregoff_t + Fstr_byte uintptr + Fstate uintptr + Fstate_id int32 + Fnext_c int32 + Ftags uintptr +} + +type Ttre_backtrack_t = uintptr + +type Ttre_backtrack_struct = struct { + Fitem Ttre_backtrack_item_t + Fprev uintptr + Fnext uintptr +} + +func _tre_tnfa_run_backtrack(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bt, empty_br_match, i, i1, i2, i3, i4, next_c_start, reg_newline, reg_notbol, reg_noteol, result, ret, v20 int32 + var bt_len, eo, match_eo, pos, pos_add_next, pos_start, so, v11, v12, v3 Tregoff_t + var mem Ttre_mem_t + var next_state, next_tags, pmatch, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v18, v6 uintptr + var prev_c Ttre_char_t + var s, s1, stack Ttre_backtrack_t + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bt, bt_len, empty_br_match, eo, i, i1, i2, i3, i4, match_eo, mem, next_c_start, next_state, next_tags, pmatch, pos, pos_add_next, pos_start, prev_c, reg_newline, reg_notbol, reg_noteol, result, ret, s, s1, so, stack, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v11, v12, v18, v20, v3, v6 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = 0 + pos_add_next = int32(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + pos_start = -int32(1) + /* End offset of best match so far, or -1 if no match found yet. */ + match_eo = -int32(1) + tags = UintptrFromInt32(0) + states_seen = UintptrFromInt32(0) + /* Memory allocator to for allocating the backtracking stack. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + pmatch = UintptrFromInt32(0) + if !(mem != 0) { + return int32(REG_ESPACE) + } + stack = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(stack != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags != 0 { + tags = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !(tags != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches != 0 { + pmatch = Xmalloc(tls, uint32(8)*(*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) + if !(pmatch != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states != 0 { + states_seen = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) + if !(states_seen != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + goto retry +retry: + ; + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i)*4)) = -int32(1) + if match_tags != 0 { + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = -int32(1) + } + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + *(*int32)(unsafe.Pointer(states_seen + uintptr(i)*4)) = 0 + goto _2 + _2: + ; + i++ + } + state = UintptrFromInt32(0) + pos = pos_start + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v3 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v3 + if v3 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos_start = pos + next_c_start = *(*Ttre_char_t)(unsafe.Pointer(bp)) + str_byte_start = str_byte + /* Handle initial states. */ + next_tags = UintptrFromInt32(0) + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + goto _4 + } + if state == UintptrFromInt32(0) { + /* Start from this state. */ + state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Backtrack to this state. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(s != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s + stack = s + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i1 = 0 + for { + if !(i1 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i1)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i1)*4)) + goto _5 + _5: + ; + i1++ + } + tmp = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tmp != 0 { + for *(*int32)(unsafe.Pointer(tmp)) >= 0 { + v6 = tmp + tmp += 4 + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(v6)))*4)) = pos + } + } + } + goto _4 + _4: + ; + trans_i += 32 + } + if next_tags != 0 { + for { + if !(*(*int32)(unsafe.Pointer(next_tags)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(next_tags)))*4)) = pos + goto _7 + _7: + ; + next_tags += 4 + } + } + if state == UintptrFromInt32(0) { + goto backtrack + } +_9: + ; + if !(int32(1) != 0) { + goto _8 + } + if state == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + if match_eo < pos || match_eo == pos && match_tags != 0 && _tre_tag_order(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tags, match_tags) != 0 { + /* This match wins the previous match. */ + match_eo = pos + if match_tags != 0 { + i2 = 0 + for { + if !(i2 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i2)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i2)*4)) + goto _10 + _10: + ; + i2++ + } + } + } + /* Our TNFAs never have transitions leaving from the final state, + so we jump right to backtracking. */ + goto backtrack + } + /* Go to the next character in the input string. */ + empty_br_match = 0 + trans_i = state + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0 && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_BACKREF) != 0 { + bt = *(*int32)(unsafe.Pointer(trans_i + 24)) + /* Get the substring we need to match against. Remember to + turn off REG_NOSUB temporarily. */ + _tre_fill_pmatch(tls, uint32(bt+int32(1)), pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & ^Int32FromInt32(REG_NOSUB), tnfa, tags, pos) + so = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*8))).Frm_so + eo = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*8))).Frm_eo + bt_len = eo - so + result = Xstrncmp(tls, string1+uintptr(so), str_byte-uintptr(1), uint32(bt_len)) + if result == 0 { + /* Back reference matched. Check for infinite loop. */ + if bt_len == 0 { + empty_br_match = int32(1) + } + if empty_br_match != 0 && *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) != 0 { + goto backtrack + } + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) = empty_br_match + /* Advance in input string and resync `prev_c', `next_c' + and pos. */ + str_byte += uintptr(bt_len - int32(1)) + pos += bt_len - int32(1) + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v11 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v11 + if v11 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } else { + goto backtrack + } + } else { + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto backtrack + } + /* Read the next character. */ + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v12 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v12 + if v12 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } + next_state = UintptrFromInt32(0) + trans_i = state + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _13 + } + if next_state == UintptrFromInt32(0) { + /* First matching transition. */ + next_state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Second matching transition. We may need to backtrack here + to take this transition instead of the first one, so we + push this transition in the backtracking stack so we can + jump back here if needed. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s1 = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(s1 != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s1 + stack = s1 + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i3 = 0 + for { + if !(i3 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i3)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i3)*4)) + goto _14 + _14: + ; + i3++ + } + tmp1 = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + for { + if !(tmp1 != 0 && *(*int32)(unsafe.Pointer(tmp1)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(tmp1)))*4)) = pos + goto _15 + _15: + ; + tmp1 += 4 + } + } + } + goto _13 + _13: + ; + trans_i += 32 + } + if !(next_state != UintptrFromInt32(0)) { + goto _16 + } + /* Matching transitions were found. Take the first one. */ + state = next_state + /* Update the tag values. */ + if next_tags != 0 { + for *(*int32)(unsafe.Pointer(next_tags)) >= 0 { + v18 = next_tags + next_tags += 4 + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(v18)))*4)) = pos + } + } + goto _17 +_16: + ; + goto backtrack +backtrack: + ; + /* A matching transition was not found. Try to backtrack. */ + if (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev != 0 { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate)).Fassertions&int32(ASSERT_BACKREF) != 0 { + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id)*4)) = 0 + } + pos = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos + str_byte = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte + state = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate + *(*Ttre_char_t)(unsafe.Pointer(bp)) = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c + i4 = 0 + for { + if !(i4 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i4)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i4)*4)) + goto _19 + _19: + ; + i4++ + } + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev + } else { + if match_eo < 0 { + /* Try starting from a later position in the input string. */ + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto _8 + } + *(*Ttre_char_t)(unsafe.Pointer(bp)) = next_c_start + str_byte = str_byte_start + goto retry + } else { + goto _8 + } + } +_17: + ; + goto _9 +_8: + ; + if match_eo >= 0 { + v20 = REG_OK + } else { + v20 = int32(REG_NOMATCH) + } + ret = v20 + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + goto error_exit +error_exit: + ; + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return ret +} + +/*********************************************************************** + from regexec.c +***********************************************************************/ + +// C documentation +// +// /* Fills the POSIX.2 regmatch_t array according to the TNFA tag and match +// endpoint values. */ +func _tre_fill_pmatch(tls *TLS, nmatch Tsize_t, pmatch uintptr, cflags int32, tnfa uintptr, tags uintptr, match_eo Tregoff_t) { + var i, j uint32 + var parents, submatch_data uintptr + var v1, v3 Tregoff_t + _, _, _, _, _, _ = i, j, parents, submatch_data, v1, v3 + i = uint32(0) + if match_eo >= 0 && !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Construct submatch offsets from the tags. */ + submatch_data = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && i < nmatch { + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fso_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fso_tag)*4)) + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Feo_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Feo_tag)*4)) + } + /* If either of the endpoints were not used, this submatch + was not part of the match. */ + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so == -int32(1) || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo == -int32(1) { + v1 = -Int32FromInt32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = v1 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = v1 + } + i++ + } + /* Reset all submatches that are not within all of their parent + submatches. */ + i = uint32(0) + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && i < nmatch { + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo == -int32(1) { + } + parents = (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fparents + if parents != UintptrFromInt32(0) { + j = uint32(0) + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)) >= 0) { + break + } + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so < (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*8))).Frm_so || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo > (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*8))).Frm_eo { + v3 = -Int32FromInt32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = v3 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = v3 + } + goto _2 + _2: + ; + j++ + } + } + i++ + } + } + for i < nmatch { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = -int32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = -int32(1) + i++ + } +} + +/* + Wrapper functions for POSIX compatible regexp matching. +*/ + +func Xregexec(tls *TLS, preg uintptr, string1 uintptr, nmatch Tsize_t, pmatch uintptr, eflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v string1=%v nmatch=%v pmatch=%v eflags=%v, (%v:)", tls, preg, string1, nmatch, pmatch, eflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var status Treg_errcode_t + var tags, tnfa uintptr + var _ /* eo at bp+0 */ Tregoff_t + _, _, _ = status, tags, tnfa + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + tags = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_NOSUB) != 0 { + nmatch = uint32(0) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 && nmatch > uint32(0) { + tags = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if tags == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } + /* Dispatch to the appropriate matcher. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 { + /* The regex has back references, use the backtracking matcher. */ + status = _tre_tnfa_run_backtrack(tls, tnfa, string1, tags, eflags, bp) + } else { + /* Exact matching, no back references, use the parallel matcher. */ + status = _tre_tnfa_run_parallel(tls, tnfa, string1, tags, eflags, bp) + } + if status == REG_OK { + /* A match was found, so fill the submatch registers. */ + _tre_fill_pmatch(tls, nmatch, pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags, tnfa, tags, *(*Tregoff_t)(unsafe.Pointer(bp))) + } + if tags != 0 { + Xfree(tls, tags) + } + return status +} + +/* + This memory allocator is for allocating small memory blocks efficiently + in terms of memory overhead and execution speed. The allocated blocks + cannot be freed individually, only all at once. There can be multiple + allocators, though. +*/ + +// C documentation +// +// /* Returns a new memory allocator or NULL if out of memory. */ +func X__tre_mem_new_impl(tls *TLS, provided int32, provided_block uintptr) (r Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v provided=%v provided_block=%v, (%v:)", tls, provided, provided_block, origin(2)) + defer func() { trc("-> %v", r) }() + } + var mem Ttre_mem_t + _ = mem + if provided != 0 { + mem = provided_block + Xmemset(tls, mem, 0, uint32(24)) + } else { + mem = Xcalloc(tls, uint32(1), uint32(24)) + } + if mem == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + return mem +} + +// C documentation +// +// /* Frees the memory allocator and all memory allocated with it. */ +func X__tre_mem_destroy(tls *TLS, mem Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v mem=%v, (%v:)", tls, mem, origin(2)) + } + var l, tmp uintptr + _, _ = l, tmp + l = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks + for l != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_list_t)(unsafe.Pointer(l)).Fdata) + tmp = (*Ttre_list_t)(unsafe.Pointer(l)).Fnext + Xfree(tls, l) + l = tmp + } + Xfree(tls, mem) +} + +// C documentation +// +// /* Allocates a block of `size' bytes from `mem'. Returns a pointer to the +// allocated block or NULL if an underlying malloc() failed. */ +func X__tre_mem_alloc_impl(tls *TLS, mem Ttre_mem_t, provided int32, provided_block uintptr, zero int32, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mem=%v provided=%v provided_block=%v zero=%v size=%v, (%v:)", tls, mem, provided, provided_block, zero, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var block_size int32 + var l, ptr uintptr + var v1 uint32 + _, _, _, _ = block_size, l, ptr, v1 + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed != 0 { + return UintptrFromInt32(0) + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn < size { + if provided != 0 { + if provided_block == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = provided_block + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint32(TRE_MEM_BLOCK_SIZE) + } else { + if size*uint32(8) > uint32(TRE_MEM_BLOCK_SIZE) { + block_size = int32(size * uint32(8)) + } else { + block_size = int32(TRE_MEM_BLOCK_SIZE) + } + l = Xmalloc(tls, uint32(8)) + if l == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fdata = Xmalloc(tls, uint32(block_size)) + if (*Ttre_list_t)(unsafe.Pointer(l)).Fdata == UintptrFromInt32(0) { + Xfree(tls, l) + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fnext = UintptrFromInt32(0) + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent != UintptrFromInt32(0) { + (*Ttre_list_t)(unsafe.Pointer((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent)).Fnext = l + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks = l + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent = l + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = (*Ttre_list_t)(unsafe.Pointer(l)).Fdata + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint32(block_size) + } + } + /* Make sure the next pointer will be aligned. */ + if (uint32(int32((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint32(4) != 0 { + v1 = uint32(4) - (uint32(int32((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint32(4) + } else { + v1 = uint32(0) + } + size = size + v1 + /* Allocate from current block. */ + ptr = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr + *(*uintptr)(unsafe.Pointer(mem + 8)) += uintptr(size) + *(*Tsize_t)(unsafe.Pointer(mem + 12)) -= size + /* Set to zero if needed. */ + if zero != 0 { + Xmemset(tls, ptr, 0, size) + } + return ptr +} + +const MAXSIZE = 1 +const MINSIZE = 8 + +type TACTION = int32 + +const _FIND = 0 +const _ENTER = 1 + +type TVISIT = int32 + +const _preorder = 0 +const _postorder = 1 +const _endorder = 2 +const _leaf = 3 + +type TENTRY = struct { + Fkey uintptr + Fdata uintptr +} + +type Tentry = TENTRY + +type Thsearch_data = struct { + F__tab uintptr + F__unused1 uint32 + F__unused2 uint32 +} + +type Tqelem = struct { + Fq_forw uintptr + Fq_back uintptr + Fq_data [1]int8 +} + +/* +open addressing hash table with 2^n table size +quadratic probing is used in case of hash collision +tab indices and hash are size_t +after resize fails with ENOMEM the state of tab is still usable + +with the posix api items cannot be iterated and length cannot be queried +*/ + +type t__tab = struct { + Fentries uintptr + Fmask Tsize_t + Fused Tsize_t +} + +var _htab Thsearch_data + +func _keyhash(tls *TLS, k uintptr) (r Tsize_t) { + var h Tsize_t + var p, v1 uintptr + _, _, _ = h, p, v1 + p = k + h = uint32(0) + for *(*uint8)(unsafe.Pointer(p)) != 0 { + v1 = p + p++ + h = uint32(31)*h + uint32(*(*uint8)(unsafe.Pointer(v1))) + } + return h +} + +func _resize(tls *TLS, nel Tsize_t, htab uintptr) (r int32) { + var e, newe, oldtab uintptr + var i, j, newsize, oldsize, v4 Tsize_t + _, _, _, _, _, _, _, _ = e, i, j, newe, newsize, oldsize, oldtab, v4 + oldsize = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask + uint32(1) + oldtab = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + if nel > uint32(-Int32FromInt32(1))/Uint32FromInt32(2)+Uint32FromInt32(1) { + nel = uint32(-Int32FromInt32(1))/Uint32FromInt32(2) + Uint32FromInt32(1) + } + newsize = uint32(MINSIZE) + for { + if !(newsize < nel) { + break + } + goto _1 + _1: + ; + newsize *= uint32(2) + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = Xcalloc(tls, newsize, uint32(8)) + if !((*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = oldtab + return 0 + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask = newsize - uint32(1) + if !(oldtab != 0) { + return int32(1) + } + e = oldtab + for { + if !(e < oldtab+uintptr(oldsize)*8) { + break + } + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + i = _keyhash(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey) + j = Uint32FromInt32(1) + for { + newe = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*8 + if !((*TENTRY)(unsafe.Pointer(newe)).Fkey != 0) { + break + } + goto _3 + _3: + ; + v4 = j + j++ + i += v4 + } + *(*TENTRY)(unsafe.Pointer(newe)) = *(*TENTRY)(unsafe.Pointer(e)) + } + goto _2 + _2: + ; + e += 8 + } + Xfree(tls, oldtab) + return int32(1) +} + +func Xhcreate(tls *TLS, nel Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v nel=%v, (%v:)", tls, nel, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___hcreate_r(tls, nel, uintptr(unsafe.Pointer(&_htab))) +} + +func Xhdestroy(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___hdestroy_r(tls, uintptr(unsafe.Pointer(&_htab))) +} + +func _lookup(tls *TLS, key uintptr, hash Tsize_t, htab uintptr) (r uintptr) { + var e uintptr + var i, j, v2 Tsize_t + _, _, _, _ = e, i, j, v2 + i = hash + j = Uint32FromInt32(1) + for { + e = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*8 + if !((*TENTRY)(unsafe.Pointer(e)).Fkey != 0) || Xstrcmp(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey, key) == 0 { + break + } + goto _1 + _1: + ; + v2 = j + j++ + i += v2 + } + return e +} + +func Xhsearch(tls *TLS, item TENTRY, action TACTION) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v action=%v, (%v:)", tls, item, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* e at bp+0 */ uintptr + ___hsearch_r(tls, item, action, bp, uintptr(unsafe.Pointer(&_htab))) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func ___hcreate_r(tls *TLS, nel Tsize_t, htab uintptr) (r1 int32) { + var r int32 + _ = r + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = Xcalloc(tls, uint32(1), uint32(12)) + if !((*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0) { + return 0 + } + r = _resize(tls, nel, htab) + if r == 0 { + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) + } + return r +} + +func ___hdestroy_r(tls *TLS, htab uintptr) { + if (*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0 { + Xfree(tls, (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries) + } + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) +} + +func ___hsearch_r(tls *TLS, item TENTRY, action TACTION, retval uintptr, htab uintptr) (r int32) { + var e, v2 uintptr + var hash, v1 Tsize_t + _, _, _, _ = e, hash, v1, v2 + hash = _keyhash(tls, item.Fkey) + e = _lookup(tls, item.Fkey, hash, htab) + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) + } + if action == int32(_FIND) { + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + *(*TENTRY)(unsafe.Pointer(e)) = item + v2 = (*Thsearch_data)(unsafe.Pointer(htab)).F__tab + 8 + *(*Tsize_t)(unsafe.Pointer(v2))++ + v1 = *(*Tsize_t)(unsafe.Pointer(v2)) + if v1 > (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask-(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask/uint32(4) { + if !(_resize(tls, uint32(2)*(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused, htab) != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused-- + (*TENTRY)(unsafe.Pointer(e)).Fkey = uintptr(0) + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + e = _lookup(tls, item.Fkey, hash, htab) + } + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) +} + +type Tnode = struct { + Fnext uintptr + Fprev uintptr +} + +func Xinsque(tls *TLS, element uintptr, pred uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v pred=%v, (%v:)", tls, element, pred, origin(2)) + } + var e, p, v1 uintptr + _, _, _ = e, p, v1 + e = element + p = pred + if !(p != 0) { + v1 = UintptrFromInt32(0) + (*Tnode)(unsafe.Pointer(e)).Fprev = v1 + (*Tnode)(unsafe.Pointer(e)).Fnext = v1 + return + } + (*Tnode)(unsafe.Pointer(e)).Fnext = (*Tnode)(unsafe.Pointer(p)).Fnext + (*Tnode)(unsafe.Pointer(e)).Fprev = p + (*Tnode)(unsafe.Pointer(p)).Fnext = e + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = e + } +} + +func Xremque(tls *TLS, element uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v, (%v:)", tls, element, origin(2)) + } + var e uintptr + _ = e + e = element + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = (*Tnode)(unsafe.Pointer(e)).Fprev + } + if (*Tnode)(unsafe.Pointer(e)).Fprev != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fprev)).Fnext = (*Tnode)(unsafe.Pointer(e)).Fnext + } +} + +func Xlsearch(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint32(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + *(*Tsize_t)(unsafe.Pointer(nelp)) = n + uint32(1) + return Xmemcpy(tls, p+uintptr(n)*uintptr(v1), key, width) +} + +func Xlfind(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint32(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + return uintptr(0) +} + +const MAXH = 0 + +type Tnode1 = struct { + Fkey uintptr + Fa [2]uintptr + Fh int32 +} + +func Xtdelete(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a [49]uintptr + var c, i, v1, v2, v4, v5, v6, v7, v8 int32 + var child, deleted, n, parent uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, c, child, deleted, i, n, parent, v1, v2, v4, v5, v6, v7, v8 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + /* *a[0] is an arbitrary non-null pointer that is returned when + the root node is deleted. */ + v1 = i + i++ + a[v1] = rootp + v2 = i + i++ + a[v2] = rootp + for { + if !(n != 0) { + return uintptr(0) + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + v4 = i + i++ + a[v4] = n + 4 + BoolUintptr(c > 0)*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _3 + _3: + } + parent = *(*uintptr)(unsafe.Pointer(a[i-int32(2)])) + if *(*uintptr)(unsafe.Pointer(n + 4)) != 0 { + /* free the preceding node instead of the deleted one. */ + deleted = n + v5 = i + i++ + a[v5] = n + 4 + n = *(*uintptr)(unsafe.Pointer(n + 4)) + for *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) != 0 { + v6 = i + i++ + a[v6] = n + 4 + 1*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) + } + (*Tnode1)(unsafe.Pointer(deleted)).Fkey = (*Tnode1)(unsafe.Pointer(n)).Fkey + child = *(*uintptr)(unsafe.Pointer(n + 4)) + } else { + child = *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) + } + /* freed node has at most one child, move it up and rebalance. */ + Xfree(tls, n) + i-- + v7 = i + *(*uintptr)(unsafe.Pointer(a[v7])) = child + for { + i-- + v8 = i + if !(v8 != 0 && X__tsearch_balance(tls, a[i]) != 0) { + break + } + } + return parent +} + +func Xtdestroy(tls *TLS, root uintptr, freekey uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v freekey=%v, (%v:)", tls, root, freekey, origin(2)) + } + var r uintptr + _ = r + r = root + if r == uintptr(0) { + return + } + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 4)), freekey) + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)), freekey) + if freekey != 0 { + (*(*func(*TLS, uintptr))(unsafe.Pointer(&struct{ uintptr }{freekey})))(tls, (*Tnode1)(unsafe.Pointer(r)).Fkey) + } + Xfree(tls, r) +} + +func Xtfind(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c int32 + var n uintptr + _, _ = c, n + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _1 + _1: + } + return n +} + +func _height(tls *TLS, n uintptr) (r int32) { + var v1 int32 + _ = v1 + if n != 0 { + v1 = (*Tnode1)(unsafe.Pointer(n)).Fh + } else { + v1 = 0 + } + return v1 +} + +func _rot(tls *TLS, p uintptr, x uintptr, dir int32) (r int32) { + var hx, hz int32 + var y, z uintptr + _, _, _, _ = hx, hz, y, z + y = *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) + z = *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) + hx = (*Tnode1)(unsafe.Pointer(x)).Fh + hz = _height(tls, z) + if hz > _height(tls, *(*uintptr)(unsafe.Pointer(y + 4 + uintptr(dir)*4))) { + /* + * x + * / \ dir z + * A y / * / \ --> x y + * z D /| | * / \ A B C D + * B C + */ + *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) = *(*uintptr)(unsafe.Pointer(z + 4 + BoolUintptr(!(dir != 0))*4)) + *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) = *(*uintptr)(unsafe.Pointer(z + 4 + uintptr(dir)*4)) + *(*uintptr)(unsafe.Pointer(z + 4 + BoolUintptr(!(dir != 0))*4)) = x + *(*uintptr)(unsafe.Pointer(z + 4 + uintptr(dir)*4)) = y + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + (*Tnode1)(unsafe.Pointer(z)).Fh = hz + int32(1) + } else { + /* + * x y + * / \ / * A y --> x D + * / \ / * z D A z + */ + *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) = z + *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) = x + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + int32(1) + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + int32(2) + z = y + } + *(*uintptr)(unsafe.Pointer(p)) = z + return (*Tnode1)(unsafe.Pointer(z)).Fh - hx +} + +// C documentation +// +// /* balance *p, return 0 if height is unchanged. */ +func X__tsearch_balance(tls *TLS, p uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h0, h1, old, v1 int32 + var n uintptr + _, _, _, _, _ = h0, h1, n, old, v1 + n = *(*uintptr)(unsafe.Pointer(p)) + h0 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 4))) + h1 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 4 + 1*4))) + if uint32(h0-h1)+uint32(1) < uint32(3) { + old = (*Tnode1)(unsafe.Pointer(n)).Fh + if h0 < h1 { + v1 = h1 + int32(1) + } else { + v1 = h0 + int32(1) + } + (*Tnode1)(unsafe.Pointer(n)).Fh = v1 + return (*Tnode1)(unsafe.Pointer(n)).Fh - old + } + return _rot(tls, p, n, BoolInt32(h0 < h1)) +} + +func Xtsearch(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a [48]uintptr + var c, i, v1, v3, v5, v6 int32 + var n, r, v4 uintptr + var v7 bool + _, _, _, _, _, _, _, _, _, _, _ = a, c, i, n, r, v1, v3, v4, v5, v6, v7 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + v1 = i + i++ + a[v1] = rootp + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + return n + } + v3 = i + i++ + a[v3] = n + 4 + BoolUintptr(c > 0)*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _2 + _2: + } + r = Xmalloc(tls, uint32(16)) + if !(r != 0) { + return uintptr(0) + } + (*Tnode1)(unsafe.Pointer(r)).Fkey = key + v4 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)) = v4 + *(*uintptr)(unsafe.Pointer(r + 4)) = v4 + (*Tnode1)(unsafe.Pointer(r)).Fh = int32(1) + /* insert new node, rebalance ancestors. */ + i-- + v5 = i + *(*uintptr)(unsafe.Pointer(a[v5])) = r + for { + if v7 = i != 0; v7 { + i-- + v6 = i + } + if !(v7 && X__tsearch_balance(tls, a[v6]) != 0) { + break + } + } + return r +} + +func _walk(tls *TLS, r uintptr, action uintptr, d int32) { + if !(r != 0) { + return + } + if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) + } else { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 4)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) + } +} + +func Xtwalk(tls *TLS, root uintptr, action uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v action=%v, (%v:)", tls, root, action, origin(2)) + } + _walk(tls, root, action, 0) +} + +func Xpoll(tls *TLS, fds uintptr, n Tnfds_t, timeout int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v timeout=%v, (%v:)", tls, fds, n, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_poll), int32(fds), int32(n), timeout, 0, 0, 0))) +} + +type t__ucontext3 = Tucontext_t5 + +func Xppoll(tls *TLS, fds uintptr, n Tnfds_t, to uintptr, mask uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v to=%v mask=%v, (%v:)", tls, fds, n, to, mask, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v5 uintptr + var v4 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if to != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if to != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if to != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_ppoll_time64), int32(fds), int32(n), int32(v3), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if to != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + v5 = bp + 16 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ppoll), int32(fds), int32(n), int32(v5), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0))) +} + +type t__ucontext4 = Tucontext_t4 + +func Xpselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts uintptr, mask uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts, mask, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v5 uintptr + var v4 uint64 + var _ /* data at bp+24 */ [2]Tsyscall_arg_t + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 24)) = [2]Tsyscall_arg_t{ + 0: int32(uint32(mask)), + 1: int32(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_pselect6_time64), n, int32(rfds), int32(wfds), int32(efds), int32(v3), int32(bp+24))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if ts != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + v5 = bp + 16 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pselect6), n, int32(rfds), int32(wfds), int32(efds), int32(v5), int32(bp+24)))) +} + +type Tucontext_t6 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +func Xselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv=%v, (%v:)", tls, n, rfds, wfds, efds, tv, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var max_time, s Ttime_t + var ns, r int32 + var us Tsuseconds_t + var v1, v2 int64 + var v3, v5 uintptr + var v4 uint64 + _, _, _, _, _, _, _, _, _, _ = max_time, ns, r, s, us, v1, v2, v3, v4, v5 + if tv != 0 { + v1 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if tv != 0 { + v2 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + } else { + v2 = 0 + } + us = v2 + max_time = int64(Uint64FromUint64(1)<<(Uint32FromInt32(8)*Uint32FromInt64(8)-Uint32FromInt32(1)) - Uint64FromInt32(1)) + if s < 0 || us < 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if us/int64(1000000) > max_time-s { + s = max_time + us = int64(999999) + ns = int32(999999999) + } else { + s += us / int64(1000000) + us %= int64(1000000) + ns = int32(us * int64(1000)) + } + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if tv != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 1: int32(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + r = int32(___syscall_cp(tls, int32(SYS_pselect6_time64), n, int32(rfds), int32(wfds), int32(efds), int32(v3), int32(bp+16))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if tv != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 24)) = [2]int32{ + 0: int32(s), + 1: int32(us), + } + v5 = bp + 24 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS__newselect), n, int32(rfds), int32(wfds), int32(efds), int32(v5), 0))) +} + +var _all_mask = [2]uint32{ + 0: -Uint32FromUint32(1), + 1: -Uint32FromUint32(1), +} + +var _app_mask = [2]uint32{ + 0: uint32(0x7fffffff), + 1: uint32(0xfffffffc), +} + +func X__block_all_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_BLOCK)), int32(uintptr(unsafe.Pointer(&_all_mask))), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__block_app_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_BLOCK)), int32(uintptr(unsafe.Pointer(&_app_mask))), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__restore_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_SETMASK)), int32(set), int32(Int32FromInt32(0)), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func Xgetitimer(tls *TLS, which int32, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old=%v, (%v:)", tls, which, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* old32 at bp+0 */ [4]int32 + _ = r + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_getitimer), which, int32(bp))) + if !(r != 0) { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]) + } + return X__syscall_ret(tls, uint32(r)) + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getitimer), which, int32(old)))) +} + +func Xkill(tls *TLS, pid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v, (%v:)", tls, pid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_kill), pid, sig))) +} + +func Xkillpg(tls *TLS, pgid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pgid=%v sig=%v, (%v:)", tls, pgid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + if pgid < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xkill(tls, -pgid, sig) +} + +func Xpsiginfo(tls *TLS, si uintptr, msg uintptr) { + if __ccgo_strace { + trc("tls=%v si=%v msg=%v, (%v:)", tls, si, msg, origin(2)) + } + Xpsignal(tls, (*Tsiginfo_t)(unsafe.Pointer(si)).Fsi_signo, msg) +} + +func Xpsignal(tls *TLS, sig int32, msg uintptr) { + if __ccgo_strace { + trc("tls=%v sig=%v msg=%v, (%v:)", tls, sig, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var __need_unlock, old_errno, old_mode, v1 int32 + var f, old_locale, s, v2, v3 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, f, old_errno, old_locale, old_mode, s, v1, v2, v3 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + s = Xstrsignal(tls, sig) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since psignal is not + * permitted to change them. Save errno and restore it if there is no + * error since fprintf might change it even on success but psignal is + * not permitted to do so. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if msg != 0 { + v2 = msg + } else { + v2 = __ccgo_ts + } + if msg != 0 { + v3 = __ccgo_ts + 289 + } else { + v3 = __ccgo_ts + } + if Xfprintf(tls, f, __ccgo_ts+987, VaList(bp+8, v2, v3, s)) >= 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + } + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xraise(tls *TLS, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v, (%v:)", tls, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* set at bp+0 */ Tsigset_t + _ = ret + X__block_app_sigs(tls, bp) + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_tkill), (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid, sig))) + X__restore_sigs(tls, bp) + return ret +} + +/* These functions will not work, but suffice for targets where the + * kernel sigaction structure does not actually use sa_restorer. */ +func X__restore(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func X__restore_rt(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetitimer(tls *TLS, which int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new1=%v old=%v, (%v:)", tls, which, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var is, vs Ttime_t + var ius, r, vus int32 + var _ /* old32 at bp+16 */ [4]int32 + _, _, _, _, _ = is, ius, r, vs, vus + if uint32(8) > uint32(4) { + is = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ius = int32((*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_usec) + vus = int32((*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_usec) + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp)) = [4]int32{ + 0: int32(is), + 1: ius, + 2: int32(vs), + 3: vus, + } + r = int32(X__syscall3(tls, int32(SYS_setitimer), which, int32(bp), int32(bp+16))) + if !(r != 0) && old != 0 { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[0]) + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(1)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(2)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(3)]) + } + return X__syscall_ret(tls, uint32(r)) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_setitimer), which, int32(new1), int32(old)))) +} + +type Tk_sigaction = struct { + Fhandler uintptr + Fflags uint32 + Frestorer uintptr + Fmask [2]uint32 +} + +var _unmask_done int32 +var _handler_set [2]uint32 + +func X__get_handler_set(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + Xmemcpy(tls, set, uintptr(unsafe.Pointer(&_handler_set)), uint32(8)) +} + +func X__libc_sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r, v2 int32 + var v1, v3, v4, v5, v6 uintptr + var _ /* ksa at bp+16 */ Tk_sigaction + var _ /* ksa_old at bp+36 */ Tk_sigaction + var _ /* u at bp+8 */ struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + } + _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6 + if sa != 0 { + if uint32(*(*uintptr)(unsafe.Pointer(sa))) > uint32(1) { + v1 = uintptr(unsafe.Pointer(&_handler_set)) + uintptr(uint32(sig-Int32FromInt32(1))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + v2 = int32(uint32(1) << (uint32(sig-Int32FromInt32(1)) % (Uint32FromInt32(8) * Uint32FromInt64(4)))) + if Uint32FromInt64(4) == Uint32FromInt64(4) { + _a_or(tls, v1, v2) + } else { + v3 = v1 + *(*struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + })(unsafe.Pointer(bp + 8)) = struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp + 8)) = uint64(v2) + if *(*Tuint32_t)(unsafe.Pointer(bp + 8)) != 0 { + _a_or(tls, v3, int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)))) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)) != 0 { + _a_or(tls, v3+uintptr(1)*4, int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)))) + } + } + /* If pthread_create has not yet been called, + * implementation-internal signals might not + * yet have been unblocked. They must be + * unblocked before any signal handler is + * installed, so that an application cannot + * receive an illegal sigset_t (with them + * blocked) as part of the ucontext_t passed + * to the signal handler. */ + if !(X__libc.Fthreaded != 0) && !(_unmask_done != 0) { + *(*[2]uint32)(unsafe.Pointer(bp)) = [2]uint32{ + 1: Uint32FromUint32(3) << (Int32FromInt32(32) * BoolInt32(Uint32FromInt64(4) > Uint32FromInt32(4))), + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_UNBLOCK)), int32(bp), int32(Int32FromInt32(0)), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + _unmask_done = int32(1) + } + if !((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags&Int32FromInt32(SA_RESTART) != 0) { + _a_store(tls, uintptr(unsafe.Pointer(&X__eintr_valid_flag)), int32(1)) + } + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fhandler = *(*uintptr)(unsafe.Pointer(sa)) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags = uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags |= uint32(SA_RESTORER) + if (*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags&int32(SA_SIGINFO) != 0 { + v4 = __ccgo_fp(X__restore_rt) + } else { + v4 = __ccgo_fp(X__restore) + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Frestorer = v4 + Xmemcpy(tls, bp+16+12, sa+4, uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + if sa != 0 { + v5 = bp + 16 + } else { + v5 = uintptr(0) + } + if old != 0 { + v6 = bp + 36 + } else { + v6 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_rt_sigaction), sig, int32(v5), int32(v6), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if old != 0 && !(r != 0) { + *(*uintptr)(unsafe.Pointer(old)) = (*(*Tk_sigaction)(unsafe.Pointer(bp + 36))).Fhandler + (*Tsigaction)(unsafe.Pointer(old)).Fsa_flags = int32((*(*Tk_sigaction)(unsafe.Pointer(bp + 36))).Fflags) + Xmemcpy(tls, old+4, bp+36+12, uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* set at bp+0 */ [2]uint32 + _ = r + if uint32(sig)-uint32(32) < uint32(3) || uint32(sig)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Doing anything with the disposition of SIGABRT requires a lock, + * so that it cannot be changed while abort is terminating the + * process and so any change made by abort can't be observed. */ + if sig == int32(SIGABRT) { + X__block_all_sigs(tls, bp) + ___lock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + } + r = X__libc_sigaction(tls, sig, sa, old) + if sig == int32(SIGABRT) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + X__restore_sigs(tls, bp) + } + return r +} + +func Xsigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__sigaction(tls, sig, sa, old) +} + +func Xsigaddset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4)) |= uint32(1) << (s & (Uint32FromInt32(8)*Uint32FromInt64(4) - Uint32FromInt32(1))) + return 0 +} + +func Xsigaltstack(tls *TLS, ss uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ss=%v old=%v, (%v:)", tls, ss, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + if ss != 0 { + if !((*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&Int32FromInt32(SS_DISABLE) != 0) && (*Tstack_t)(unsafe.Pointer(ss)).Fss_size < uint32(MINSIGSTKSZ) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + if (*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&int32(SS_ONSTACK) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_sigaltstack), int32(ss), int32(old)))) +} + +const SST_SIZE = 8 + +type Tucontext_t7 = struct { + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + F__fpregs_mem [28]uint32 +} + +func Xsigandset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint32 + _, _, _, _ = d, i, l, r + i = uint32(0) + d = dest + l = left + r = right + for { + if !(i < uint32(uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4))) { + break + } + *(*uint32)(unsafe.Pointer(d + uintptr(i)*4)) = *(*uint32)(unsafe.Pointer(l + uintptr(i)*4)) & *(*uint32)(unsafe.Pointer(r + uintptr(i)*4)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigdelset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4)) &= ^(Uint32FromUint32(1) << (s & (Uint32FromInt32(8)*Uint32FromInt64(4) - Uint32FromInt32(1)))) + return 0 +} + +func Xsigemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint32)(unsafe.Pointer(set)) = uint32(0) + if Bool(uint32(4) == uint32(4)) || Bool(int32(_NSIG) > int32(65)) { + *(*uint32)(unsafe.Pointer(set + 1*4)) = uint32(0) + } + if Bool(uint32(4) == uint32(4)) && Bool(int32(_NSIG) > int32(65)) { + *(*uint32)(unsafe.Pointer(set + 2*4)) = uint32(0) + *(*uint32)(unsafe.Pointer(set + 3*4)) = uint32(0) + } + return 0 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xsigfillset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint32)(unsafe.Pointer(set)) = uint32(0x7fffffff) + *(*uint32)(unsafe.Pointer(set + 1*4)) = uint32(0xfffffffc) + if int32(_NSIG) > int32(65) { + *(*uint32)(unsafe.Pointer(set + 2*4)) = uint32(0xffffffff) + *(*uint32)(unsafe.Pointer(set + 3*4)) = uint32(0xffffffff) + } + return 0 +} + +func Xsigisemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4)) { + break + } + if *(*uint32)(unsafe.Pointer(set + uintptr(i)*4)) != 0 { + return 0 + } + goto _1 + _1: + ; + i++ + } + return int32(1) +} + +func Xsigismember(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + return 0 + } + return BoolInt32(!!(*(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4))&(Uint32FromUint32(1)<<(s&(Uint32FromInt32(8)*Uint32FromInt64(4)-Uint32FromInt32(1)))) != 0)) +} + +func Xsigorset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint32 + _, _, _, _ = d, i, l, r + i = uint32(0) + d = dest + l = left + r = right + for { + if !(i < uint32(uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4))) { + break + } + *(*uint32)(unsafe.Pointer(d + uintptr(i)*4)) = *(*uint32)(unsafe.Pointer(l + uintptr(i)*4)) | *(*uint32)(unsafe.Pointer(r + uintptr(i)*4)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigpending(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_rt_sigpending), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))))) +} + +func Xsigprocmask(tls *TLS, how int32, set uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v how=%v set=%v old=%v, (%v:)", tls, how, set, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = _pthread_sigmask(tls, how, set, old) + if !(r != 0) { + return r + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = r + return -int32(1) +} + +func Xsigqueue(tls *TLS, pid Tpid_t, sig int32, value Tsigval) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v value=%v, (%v:)", tls, pid, sig, value, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var r int32 + var _ /* set at bp+128 */ Tsigset_t + var _ /* si at bp+0 */ Tsiginfo_t + _ = r + Xmemset(tls, bp, 0, uint32(128)) + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo = sig + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_code = -int32(1) + *(*Tsigval)(unsafe.Pointer(bp + 12 + 8)) = value + *(*Tuid_t)(unsafe.Pointer(bp + 12 + 4)) = Xgetuid(tls) + X__block_app_sigs(tls, bp+128) + *(*Tpid_t)(unsafe.Pointer(bp + 12)) = Xgetpid(tls) + r = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_rt_sigqueueinfo), pid, sig, int32(bp)))) + X__restore_sigs(tls, bp+128) + return r +} + +func X__libc_current_sigrtmax(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Int32FromInt32(_NSIG) - Int32FromInt32(1) +} + +func X__libc_current_sigrtmin(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(35) +} + +type t__jmp_buf = [6]uint32 + +type Tjmp_buf = [1]t__jmp_buf_tag + +type t__jmp_buf_tag = struct { + F__jb t__jmp_buf + F__fl uint32 + F__ss [32]uint32 +} + +type Tsigjmp_buf = [1]t__jmp_buf_tag + +func X__sigsetjmp_tail(tls *TLS, jb uintptr, ret int32) (r int32) { + if __ccgo_strace { + trc("tls=%v jb=%v ret=%v, (%v:)", tls, jb, ret, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1, v2 uintptr + _, _, _ = p, v1, v2 + p = jb + 28 + if ret != 0 { + v1 = p + } else { + v1 = uintptr(0) + } + if ret != 0 { + v2 = uintptr(0) + } else { + v2 = p + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_SETMASK)), int32(v1), int32(v2), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + return ret +} + +func Xsigsuspend(tls *TLS, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_rt_sigsuspend), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0, 0, 0))) +} + +func _do_sigtimedwait(tls *TLS, mask uintptr, si uintptr, ts uintptr) (r1 int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v4 uintptr + var v5 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_rt_sigtimedwait_time64), int32(mask), int32(si), int32(v3), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) + } + if Bool(false) || r != -int32(ENOSYS) { + return r + } + if ts != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v5 = uint64(s) + } else { + v5 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v5), + 1: ns, + } + v4 = bp + 16 + } else { + v4 = uintptr(0) + } + return int32(___syscall_cp(tls, int32(SYS_rt_sigtimedwait), int32(mask), int32(si), int32(v4), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) + return r1 +} + +func Xsigtimedwait(tls *TLS, mask uintptr, si uintptr, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v timeout=%v, (%v:)", tls, mask, si, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + for cond := true; cond; cond = ret == -int32(EINTR) { + ret = _do_sigtimedwait(tls, mask, si, timeout) + } + return X__syscall_ret(tls, uint32(ret)) +} + +func Xsigwait(tls *TLS, mask uintptr, sig uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v sig=%v, (%v:)", tls, mask, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* si at bp+0 */ Tsiginfo_t + if Xsigtimedwait(tls, mask, bp, uintptr(0)) < 0 { + return -int32(1) + } + *(*int32)(unsafe.Pointer(sig)) = (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo + return 0 +} + +func Xsigwaitinfo(tls *TLS, mask uintptr, si uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v, (%v:)", tls, mask, si, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsigtimedwait(tls, mask, si, uintptr(0)) +} + +func X__xmknod(tls *TLS, ver int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func X__xmknodat(tls *TLS, ver int32, fd int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func Xchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_chmod), int32(path), int32(mode)))) +} + +func Xfchmod(tls *TLS, fd int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]int8 + _ = ret + ret = int32(X__syscall2(tls, int32(SYS_fchmod), fd, int32(mode))) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_chmod), int32(bp), int32(mode)))) +} + +func Xfchmodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v flag=%v, (%v:)", tls, fd, path, mode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(176) + defer tls.Free(176) + var fd2, ret, v1 int32 + var _ /* proc at bp+144 */ [27]int8 + var _ /* st at bp+0 */ Tstat + _, _, _ = fd2, ret, v1 + if !(flag != 0) { + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fchmodat), fd, int32(path), int32(mode)))) + } + ret = int32(X__syscall4(tls, int32(SYS_fchmodat2), fd, int32(path), int32(mode), flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if flag != int32(AT_SYMLINK_NOFOLLOW) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if Xfstatat(tls, fd, path, bp, flag) != 0 { + return -int32(1) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + v1 = int32(X__syscall3(tls, int32(SYS_openat), fd, int32(path), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_PATH)|Int32FromInt32(O_NOFOLLOW)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC)))) + fd2 = v1 + if v1 < 0 { + if fd2 == -int32(ELOOP) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + return X__syscall_ret(tls, uint32(fd2)) + } + X__procfdname(tls, bp+144, uint32(fd2)) + ret = Xstat(tls, bp+144, bp) + if !(ret != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + ret = X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } else { + ret = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fchmodat), int32(-Int32FromInt32(100)), int32(bp+144), int32(mode)))) + } + } + X__syscall1(tls, int32(SYS_close), fd2) + return ret +} + +func X__fstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + if fd < 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EBADF))) + } + return X__fstatat(tls, fd, __ccgo_ts, st, int32(AT_EMPTY_PATH)) +} + +func Xfstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat(tls, fd, st) +} + +type Tstatx1 = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + Fpad1 Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_btime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_ctime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_mtime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + Fspare [14]Tuint64_t +} + +func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ret int32 + var _ /* stx at bp+0 */ Tstatx1 + _ = ret + flag |= int32(AT_NO_AUTOMOUNT) + ret = int32(X__syscall5(tls, int32(SYS_statx), fd, int32(path), flag, int32(Int32FromInt32(0x7ff)), int32(bp))) + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 && !(*(*int8)(unsafe.Pointer(path)) != 0) { + ret = int32(X__syscall2(tls, int32(SYS_fstat64), fd, int32(bp))) + if ret == -int32(EBADF) && X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) >= 0 { + ret = int32(X__syscall4(tls, int32(SYS_fstatat64), fd, int32(path), int32(bp), flag)) + if ret == -int32(EINVAL) { + X__procfdname(tls, bp+96, uint32(fd)) + ret = int32(X__syscall2(tls, int32(SYS_stat64), int32(bp+96), int32(bp))) + } + } + } else { + if (fd == -int32(100) || int32(*(*int8)(unsafe.Pointer(path))) == int32('/')) && flag == int32(AT_SYMLINK_NOFOLLOW) { + ret = int32(X__syscall2(tls, int32(SYS_lstat64), int32(path), int32(bp))) + } else { + if (fd == -int32(100) || int32(*(*int8)(unsafe.Pointer(path))) == int32('/')) && !(flag != 0) { + ret = int32(X__syscall2(tls, int32(SYS_stat64), int32(path), int32(bp))) + } else { + ret = int32(X__syscall4(tls, int32(SYS_fstatat64), fd, int32(path), int32(bp), flag)) + } + } + } + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_dev, + Fst_mode: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mode, + Fst_nlink: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_nlink, + Fst_uid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_uid, + Fst_gid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_gid, + Fst_rdev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_rdev, + Fst_size: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_size, + Fst_blksize: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blksize, + Fst_blocks: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blocks, + F__st_atim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + F__st_mtim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + F__st_ctim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + Fst_ino: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ino, + Fst_atim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + Fst_mtim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + Fst_ctim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + } + return 0 +} + +func X__fstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint32(4) < uint32(8) { + ret = _fstatat_statx(tls, fd, path, st, flag) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + } + ret = _fstatat_kstat(tls, fd, path, st, flag) + return X__syscall_ret(tls, uint32(ret)) +} + +func Xfstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat(tls, fd, path, st, flag) +} + +func Xfutimens(tls *TLS, fd int32, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times=%v, (%v:)", tls, fd, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xutimensat(tls, fd, uintptr(0), times, 0) +} + +func X__futimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var v2 uintptr + var _ /* ts at bp+0 */ [2]Ttimespec + _, _ = i, v2 + if times != 0 { + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec) >= uint64(1000000) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec * int64(1000)) + goto _1 + _1: + ; + i++ + } + } + if times != 0 { + v2 = bp + } else { + v2 = uintptr(0) + } + return Xutimensat(tls, dirfd, pathname, v2, 0) +} + +func Xfutimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, dirfd, pathname, times) +} + +func Xlchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfchmodat(tls, -int32(100), path, mode, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xlstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xmkdir(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_mkdir), int32(path), int32(mode)))) +} + +func Xmkdirat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mkdirat), fd, int32(path), int32(mode)))) +} + +func Xmkfifo(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmkfifoat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmknod(tls *TLS, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v dev=%v, (%v:)", tls, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mknod), int32(path), int32(mode), int32(dev)))) +} + +func Xmknodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_mknodat), fd, int32(path), int32(mode), int32(dev)))) +} + +func Xstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, 0) +} + +func ___statfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_statfs64), int32(path), int32(Uint32FromInt64(84)), int32(buf)))) +} + +func Xfstatfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fstatfs64), fd, int32(Uint32FromInt64(84)), int32(buf)))) +} + +func _fixup(tls *TLS, out uintptr, in uintptr) { + var v1 uint32 + _ = v1 + *(*Tstatvfs)(unsafe.Pointer(out)) = Tstatvfs{} + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bsize = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + if (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize != 0 { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize + } else { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + } + (*Tstatvfs)(unsafe.Pointer(out)).Ff_frsize = v1 + (*Tstatvfs)(unsafe.Pointer(out)).Ff_blocks = (*Tstatfs)(unsafe.Pointer(in)).Ff_blocks + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bfree = (*Tstatfs)(unsafe.Pointer(in)).Ff_bfree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bavail = (*Tstatfs)(unsafe.Pointer(in)).Ff_bavail + (*Tstatvfs)(unsafe.Pointer(out)).Ff_files = (*Tstatfs)(unsafe.Pointer(in)).Ff_files + (*Tstatvfs)(unsafe.Pointer(out)).Ff_ffree = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_favail = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_fsid = uint32(*(*int32)(unsafe.Pointer(in + 48))) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_flag = (*Tstatfs)(unsafe.Pointer(in)).Ff_flags + (*Tstatvfs)(unsafe.Pointer(out)).Ff_namemax = (*Tstatfs)(unsafe.Pointer(in)).Ff_namelen + (*Tstatvfs)(unsafe.Pointer(out)).Ff_type = (*Tstatfs)(unsafe.Pointer(in)).Ff_type +} + +func Xstatvfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if ___statfs(tls, path, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xfstatvfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if Xfstatfs(tls, fd, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xumask(tls *TLS, mode Tmode_t) (r Tmode_t) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_umask), int32(mode))))) +} + +func Xutimensat(tls *TLS, fd int32, path uintptr, times uintptr, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times=%v flags=%v, (%v:)", tls, fd, path, times, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, ns0, ns1, r int32 + var s0, s1 Ttime_t + var tv, v1, v2 uintptr + var _ /* tmp at bp+48 */ [4]int32 + _, _, _, _, _, _, _, _, _ = i, ns0, ns1, r, s0, s1, tv, v1, v2 + if times != 0 && (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec == int32(UTIME_NOW) && (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec == int32(UTIME_NOW) { + times = uintptr(0) + } + r = -int32(ENOSYS) + s0 = 0 + s1 = 0 + ns0 = 0 + ns1 = 0 + if times != 0 { + ns0 = (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec + ns1 = (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec + if !(ns0 == int32(UTIME_NOW) || ns0 == int32(UTIME_OMIT)) { + s0 = (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_sec + } + if !(ns1 == int32(UTIME_NOW) || ns1 == int32(UTIME_OMIT)) { + s1 = (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_sec + } + } + if Bool(false) || !!((uint64(s0)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(s1)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if times != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: s0, + 1: int64(ns0), + 2: s1, + 3: int64(ns1), + } + v1 = bp + } else { + v1 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_utimensat_time64), fd, int32(path), int32(v1), flags)) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(s0)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(s1)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if times != 0 { + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(s0), + 1: ns0, + 2: int32(s1), + 3: ns1, + } + v2 = bp + 32 + } else { + v2 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_utimensat), fd, int32(path), int32(v2), flags)) + if r != -int32(ENOSYS) || flags != 0 { + return X__syscall_ret(tls, uint32(r)) + } + tv = uintptr(0) + if times != 0 { + tv = bp + 48 + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec) >= uint64(1000000000) { + if (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int32(UTIME_NOW) || (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int32(UTIME_OMIT) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(ENOSYS))) + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)*i+0] = int32((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec) + (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)*i+int32(1)] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec / int32(1000) + goto _3 + _3: + ; + i++ + } + } + r = int32(X__syscall3(tls, int32(SYS_futimesat), fd, int32(path), int32(tv))) + if r != -int32(ENOSYS) || fd != -int32(100) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_utimes), int32(path), int32(tv))) + return X__syscall_ret(tls, uint32(r)) +} + +func X__fclose_ca(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) +} + +func X__fdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var f, v1 uintptr + var flags, v2 int32 + var _ /* wsz at bp+0 */ Twinsize + _, _, _, _ = f, flags, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*int8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+buffer or fail */ + v1 = Xmalloc(tls, Uint32FromInt64(136)+Uint32FromInt32(UNGET)+Uint32FromInt32(BUFSIZ)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint32(136)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(v2) + } + /* Apply close-on-exec flag */ + if Xstrchr(tls, mode, int32('e')) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + /* Set append mode on fd if opened for append */ + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('a') { + flags = int32(X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFL)))) + if !(flags&Int32FromInt32(O_APPEND) != 0) { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFL)), int32(flags|Int32FromInt32(O_APPEND))) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_APP) + } + (*TFILE)(unsafe.Pointer(f)).Ffd = fd + (*TFILE)(unsafe.Pointer(f)).Fbuf = f + uintptr(136) + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(BUFSIZ) + /* Activate line buffered mode for terminals */ + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0) && !(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp)) != 0) { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + /* Initialize op ptrs. No problem if some are unneeded. */ + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fdopen(tls, fd, mode) +} + +func X__fmodeflags(tls *TLS, mode uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var flags int32 + _ = flags + if Xstrchr(tls, mode, int32('+')) != 0 { + flags = int32(O_RDWR) + } else { + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('r') { + flags = O_RDONLY + } else { + flags = int32(O_WRONLY) + } + } + if Xstrchr(tls, mode, int32('x')) != 0 { + flags |= int32(O_EXCL) + } + if Xstrchr(tls, mode, int32('e')) != 0 { + flags |= int32(O_CLOEXEC) + } + if int32(*(*int8)(unsafe.Pointer(mode))) != int32('r') { + flags |= int32(O_CREAT) + } + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('w') { + flags |= int32(O_TRUNC) + } + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('a') { + flags |= int32(O_APPEND) + } + return flags +} + +func X__fopen_rb_ca(tls *TLS, filename uintptr, f uintptr, buf uintptr, len1 Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v f=%v buf=%v len1=%v, (%v:)", tls, filename, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemset(tls, f, 0, uint32(136)) + (*TFILE)(unsafe.Pointer(f)).Ffd = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_open), int32(filename), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_LARGEFILE))))) + if (*TFILE)(unsafe.Pointer(f)).Ffd < 0 { + return uintptr(0) + } + X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(Int32FromInt32(F_NOWR) | Int32FromInt32(F_PERM)) + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = len1 - uint32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + AtomicStorePInt32(f+76, -int32(1)) + return f +} + +func X__overflow(tls *TLS, f uintptr, _c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v _c=%v, (%v:)", tls, f, _c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint8 + var v2, v3 uintptr + var _ /* c at bp+0 */ uint8 + _, _, _ = v1, v2, v3 + *(*uint8)(unsafe.Pointer(bp)) = uint8(_c) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return -int32(1) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend && int32(*(*uint8)(unsafe.Pointer(bp))) != (*TFILE)(unsafe.Pointer(f)).Flbf { + v1 = *(*uint8)(unsafe.Pointer(bp)) + v3 = f + 20 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(v2)) = v1 + return int32(v1) + } + if (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, bp, uint32(1)) != uint32(1) { + return -int32(1) + } + return int32(*(*uint8)(unsafe.Pointer(bp))) +} + +func _dummy9(tls *TLS, fd int32) (r int32) { + return fd +} + +func X__stdio_close(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_close), _dummy9(tls, (*TFILE)(unsafe.Pointer(f)).Ffd)))) +} + +var _dummy_file = uintptr(0) + +func _close_file(tls *TLS, f uintptr) { + if !(f != 0) { + return + } + if AtomicLoadPInt32(f+76) >= 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Frend)), int32(1)) + } +} + +func X__stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + _close_file(tls, f) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdin_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) +} + +func X__stdio_exit_needed(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit(tls) +} + +func X__stdio_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt Tssize_t + var v1, v2 int32 + var v3, v4 uintptr + var _ /* iov at bp+0 */ [2]Tiovec + _, _, _, _, _ = cnt, v1, v2, v3, v4 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: buf, + Fiov_len: len1 - BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)), + }, + 1: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fbuf, + Fiov_len: (*TFILE)(unsafe.Pointer(f)).Fbuf_size, + }, + } + if (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len != 0 { + v1 = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_readv), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(bp), int32(Int32FromInt32(2))))) + } else { + v1 = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_read), (*TFILE)(unsafe.Pointer(f)).Ffd, int32((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_base), int32((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_len)))) + } + cnt = v1 + if cnt <= 0 { + if cnt != 0 { + v2 = int32(F_ERR) + } else { + v2 = int32(F_EOF) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v2) + return uint32(0) + } + if uint32(cnt) <= (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len { + return uint32(cnt) + } + cnt = Tssize_t(uint32(cnt) - (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len) + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(cnt) + if (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(len1-uint32(1)))) = *(*uint8)(unsafe.Pointer(v3)) + } + return len1 +} + +func X__stdio_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, (*TFILE)(unsafe.Pointer(f)).Ffd, off, whence) +} + +func X__stdio_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt Tssize_t + var iov, v2, v3, v4 uintptr + var iovcnt int32 + var rem Tsize_t + var v5 uint32 + var _ /* iovs at bp+0 */ [2]Tiovec + _, _, _, _, _, _, _, _ = cnt, iov, iovcnt, rem, v2, v3, v4, v5 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fwbase, + Fiov_len: uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)), + }, + 1: { + Fiov_base: buf, + Fiov_len: len1, + }, + } + iov = bp + rem = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + (*(*Tiovec)(unsafe.Pointer(iov + 1*8))).Fiov_len + iovcnt = int32(2) + for { + cnt = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_writev), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(iov), iovcnt))) + if uint32(cnt) == rem { + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + return len1 + } + if cnt < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if iovcnt == int32(2) { + v5 = uint32(0) + } else { + v5 = len1 - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + } + return v5 + } + rem -= uint32(cnt) + if uint32(cnt) > (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len { + cnt = Tssize_t(uint32(cnt) - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len) + iov += 8 + iovcnt-- + } + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base + uintptr(cnt) + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len -= uint32(cnt) + goto _1 + _1: + } + return r +} + +func X__stdout_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* wsz at bp+0 */ Twinsize + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_SVB) != 0) && X__syscall3(tls, int32(SYS_ioctl), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp)) != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + } + return X__stdio_write(tls, f, buf, len1) +} + +func X__toread(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + var v4 int32 + _, _, _, _ = v1, v2, v3, v4 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_EOF) != 0 { + v4 = -int32(1) + } else { + v4 = 0 + } + return v4 +} + +func X__toread_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +func X__towrite(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 uintptr + _, _ = v1, v2 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + /* Clear read buffer (easier than summoning nasal demons) */ + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + /* Activate write through the buffer. */ + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + return 0 +} + +func X__towrite_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +/* This function assumes it will never be called if there is already + * data buffered for reading. */ + +func X__uflow(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* c at bp+0 */ uint8 + if !(X__toread(tls, f) != 0) && (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, bp, uint32(1)) == uint32(1) { + return int32(*(*uint8)(unsafe.Pointer(bp))) + } + return -int32(1) +} + +func Xasprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvasprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xclearerr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^(Int32FromInt32(F_EOF) | Int32FromInt32(F_ERR))) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xclearerr_unlocked(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xclearerr(tls, f) +} + +func Xdprintf(tls *TLS, fd int32, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v va=%v, (%v:)", tls, fd, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvdprintf(tls, fd, fmt, ap) + _ = ap + return ret +} + +const FSETLOCKING_BYCALLER = 2 +const FSETLOCKING_INTERNAL = 1 +const FSETLOCKING_QUERY = 0 + +func X_flushlbf(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xfflush(tls, uintptr(0)) +} + +func X__fsetlocking(tls *TLS, f uintptr, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v type1=%v, (%v:)", tls, f, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__fwriting(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 || (*TFILE)(unsafe.Pointer(f)).Fwend != 0) +} + +func X__freading(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 || (*TFILE)(unsafe.Pointer(f)).Frend != 0) +} + +func X__freadable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NORD) != 0)) +} + +func X__fwritable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0)) +} + +func X__flbf(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Flbf >= 0) +} + +func X__fbufsize(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TFILE)(unsafe.Pointer(f)).Fbuf_size +} + +func X__fpending(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Fwend != 0 { + v1 = int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase) + } else { + v1 = 0 + } + return uint32(v1) +} + +func X__fpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + if !(f != 0) { // libbsd fpurge test fails w/o this. + return int32(1) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + return 0 +} + +func Xfpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fpurge(tls, f) +} + +func X__freadahead(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + v1 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } else { + v1 = 0 + } + return uint32(v1) +} + +func X__freadptr(tls *TLS, f uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v sizep=%v, (%v:)", tls, f, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + if (*TFILE)(unsafe.Pointer(f)).Frpos == (*TFILE)(unsafe.Pointer(f)).Frend { + return uintptr(0) + } + *(*Tsize_t)(unsafe.Pointer(sizep)) = uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + return (*TFILE)(unsafe.Pointer(f)).Frpos +} + +func X__freadptrinc(tls *TLS, f uintptr, inc Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v inc=%v, (%v:)", tls, f, inc, origin(2)) + } + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(inc) +} + +func X__fseterr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) +} + +func _dummy10(tls *TLS, f uintptr) { +} + +func Xfclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1 int32 + var head uintptr + _, _, _, _ = __need_unlock, head, r, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + r = Xfflush(tls, f) + r |= (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + /* Past this point, f is closed and any further explict access + * to it is undefined. However, it still exists as an entry in + * the open file list and possibly in the thread's locked files + * list, if it was closed while explicitly locked. Functions + * which process these lists must tolerate dead FILE objects + * (which necessarily have inactive buffer pointers) without + * producing any side effects. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) != 0 { + return r + } + X__unlist_locked_file(tls, f) + head = X__ofl_lock(tls) + if (*TFILE)(unsafe.Pointer(f)).Fprev != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev)).Fnext = (*TFILE)(unsafe.Pointer(f)).Fnext + } + if (*TFILE)(unsafe.Pointer(f)).Fnext != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext)).Fprev = (*TFILE)(unsafe.Pointer(f)).Fprev + } + if *(*uintptr)(unsafe.Pointer(head)) == f { + *(*uintptr)(unsafe.Pointer(head)) = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + Xfree(tls, (*TFILE)(unsafe.Pointer(f)).Fgetln_buf) + Xfree(tls, f) + return r +} + +func Xfeof(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_feof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xfeof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xferror(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_ferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +func Xferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +// C documentation +// +// /* stdout.c will override this if linked */ +var _dummy11 = uintptr(0) + +func Xfflush(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, __need_unlock1, r, v2, v3 int32 + var v4, v5, v6 uintptr + _, _, _, _, _, _, _, _ = __need_unlock, __need_unlock1, r, v2, v3, v4, v5, v6 + if !(f != 0) { + r = 0 + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + } + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) + } + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + if AtomicLoadPInt32(f+76) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + r |= Xfflush(tls, f) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + return r + } + if AtomicLoadPInt32(f+76) >= 0 { + v3 = ___lockfile(tls, f) + } else { + v3 = 0 + } + __need_unlock1 = v3 + /* If writing, flush output */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + } + /* If reading, sync position, per POSIX */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Frend)), int32(1)) + } + /* Clear read and write modes */ + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + v6 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v6 + (*TFILE)(unsafe.Pointer(f)).Frpos = v6 + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return 0 +} + +func Xfflush_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfflush(tls, f) +} + +func _locking_getc(tls *TLS, f uintptr) (r int32) { + var c, v1, v5, v6 int32 + var v2, v3, v4 uintptr + _, _, _, _, _, _, _ = c, v1, v2, v3, v4, v5, v6 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v4 = f + 76 + v5 = int32(1) + v6 = int32(1) + if v6 != 0 { + v6 = int32(FUTEX_PRIVATE) + } + if v5 < Int32FromInt32(0) { + v5 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)|v6), v5) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)), v5) != 0 + } + return c +} + +func Xfgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc(tls, v1) + goto _3 +_3: + return v2 +} + +func Xfgetln(tls *TLS, f uintptr, plen uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v plen=%v, (%v:)", tls, f, plen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, v1, v2 int32 + var l, v8 Tssize_t + var ret, z, v3, v4, v5, v7 uintptr + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, ret, z, v1, v2, v3, v4, v5, v6, v7, v8 + ret = uintptr(0) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + Xungetc(tls, v2, f) + if v6 = (*TFILE)(unsafe.Pointer(f)).Frend != 0; v6 { + v5 = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + z = v5 + } + if v6 && v5 != 0 { + ret = (*TFILE)(unsafe.Pointer(f)).Frpos + z++ + v7 = z + *(*Tsize_t)(unsafe.Pointer(plen)) = uint32(int32(v7) - int32(ret)) + (*TFILE)(unsafe.Pointer(f)).Frpos = z + } else { + *(*[1]Tsize_t)(unsafe.Pointer(bp)) = [1]Tsize_t{} + v8 = Xgetline(tls, f+96, bp, f) + l = v8 + if v8 > 0 { + *(*Tsize_t)(unsafe.Pointer(plen)) = uint32(l) + ret = (*TFILE)(unsafe.Pointer(f)).Fgetln_buf + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func Xfgetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + var off Toff_t + _ = off + off = X__ftello(tls, f) + if off < 0 { + return -int32(1) + } + *(*int64)(unsafe.Pointer(pos)) = off + return 0 +} + +func Xfgets(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v4, v5 int32 + var k Tsize_t + var p, z, v6, v7, v9 uintptr + var v3 uint32 + var v8 int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, k, p, z, v1, v2, v3, v4, v5, v6, v7, v8, v9 + p = s + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if n <= int32(1) { + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if n < int32(1) { + return uintptr(0) + } + *(*int8)(unsafe.Pointer(s)) = 0 + return s + } + n-- + for n != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v2 = int32(z) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + int32(1) + } else { + v2 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint32(v2) + if k < uint32(n) { + v3 = k + } else { + v3 = uint32(n) + } + k = v3 + Xmemcpy(tls, p, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + p += uintptr(k) + n = int32(uint32(n) - k) + if z != 0 || !(n != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 < 0 { + if p == s || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + s = uintptr(0) + } + break + } + n-- + v8 = int8(c) + v9 = p + p++ + *(*int8)(unsafe.Pointer(v9)) = v8 + if int32(v8) == int32('\n') { + break + } + } + if s != 0 { + *(*int8)(unsafe.Pointer(p)) = 0 + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return s +} + +func Xfgets_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgets(tls, s, n, f) +} + +func ___fgetwc_unlocked_internal(tls *TLS, f uintptr) (r Twint_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var c, first, v1, v2 int32 + var l Tsize_t + var v3, v4 uintptr + var _ /* b at bp+16 */ uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = c, first, l, v1, v2, v3, v4 + /* Convert character from buffer if possible */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + l = uint32(Xmbtowc(tls, bp, (*TFILE)(unsafe.Pointer(f)).Frpos, uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)))) + if l+uint32(1) >= uint32(1) { + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(l + BoolUint32(!(l != 0))) /* l==0 means 1 byte, null */ + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + /* Convert character byte-by-byte */ + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + first = int32(1) + for cond := true; cond; cond = l == uint32(-Int32FromInt32(2)) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + v1 = v2 + c = v1 + *(*uint8)(unsafe.Pointer(bp + 16)) = uint8(v1) + if c < 0 { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + } + return uint32(0xffffffff) + } + l = Xmbrtowc(tls, bp, bp+16, uint32(1), bp+8) + if l == uint32(-Int32FromInt32(1)) { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + Xungetc(tls, int32(*(*uint8)(unsafe.Pointer(bp + 16))), f) + } + return uint32(0xffffffff) + } + first = 0 + } + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) +} + +func X__fgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var loc Tlocale_t + var ploc uintptr + var wc Twchar_t + _, _, _ = loc, ploc, wc + ploc = uintptr(___get_tp(tls)) + 96 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + wc = int32(___fgetwc_unlocked_internal(tls, f)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(wc) +} + +func Xfgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var c Twint_t + _, _, _ = __need_unlock, c, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fgetwc_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xfgetws(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v2 int32 + var c Twint_t + var p, v4, v5 uintptr + _, _, _, _, _, _, _ = __need_unlock, c, p, v1, v2, v4, v5 + p = s + v1 = n + n-- + if !(v1 != 0) { + return s + } + if AtomicLoadPInt32(f+76) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + for { + if !(n != 0) { + break + } + c = X__fgetwc_unlocked(tls, f) + if c == uint32(0xffffffff) { + break + } + v4 = p + p += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = int32(c) + if c == uint32('\n') { + break + } + goto _3 + _3: + ; + n-- + } + *(*Twchar_t)(unsafe.Pointer(p)) = 0 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + p = s + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if p == s { + v5 = UintptrFromInt32(0) + } else { + v5 = s + } + return v5 +} + +func Xfgetws_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetws(tls, s, n, f) +} + +func Xfileno(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fd, v1 int32 + _, _, _ = __need_unlock, fd, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + fd = (*TFILE)(unsafe.Pointer(f)).Ffd + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if fd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return -int32(1) + } + return fd +} + +func Xfileno_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfileno(tls, f) +} + +func Xflockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if !(Xftrylockfile(tls, f) != 0) { + return + } + ___lockfile(tls, f) + X__register_locked_file(tls, f, uintptr(___get_tp(tls))) +} + +type Tcookie = struct { + Fpos Tsize_t + Flen1 Tsize_t + Fsize Tsize_t + Fbuf uintptr + Fmode int32 +} + +type Tmem_FILE = struct { + Ff TFILE + Fc Tcookie + Fbuf [1032]uint8 +} + +func _mseek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(int32((*Tcookie)(unsafe.Pointer(c)).Fsize)-base) { + goto fail + } + v2 = uint32(int64(base) + off) + (*Tcookie)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _mread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var rem Tsize_t + _, _ = c, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + rem = (*Tcookie)(unsafe.Pointer(c)).Flen1 - (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + rem = uint32(0) + } + if len1 > rem { + len1 = rem + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_EOF) + } + Xmemcpy(tls, buf, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + rem -= len1 + if rem > (*TFILE)(unsafe.Pointer(f)).Fbuf_size { + rem = (*TFILE)(unsafe.Pointer(f)).Fbuf_size + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(rem) + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), rem) + *(*Tsize_t)(unsafe.Pointer(c)) += rem + return len1 +} + +func _mwrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var len2, rem Tsize_t + _, _, _ = c, len2, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _mwrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint32(0) + } + } + if (*Tcookie)(unsafe.Pointer(c)).Fmode == int32('a') { + (*Tcookie)(unsafe.Pointer(c)).Fpos = (*Tcookie)(unsafe.Pointer(c)).Flen1 + } + rem = (*Tcookie)(unsafe.Pointer(c)).Fsize - (*Tcookie)(unsafe.Pointer(c)).Fpos + if len1 > rem { + len1 = rem + } + Xmemcpy(tls, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + (*Tcookie)(unsafe.Pointer(c)).Flen1 = (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Flen1 < (*Tcookie)(unsafe.Pointer(c)).Fsize { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Flen1))) = uint8(0) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 && (*Tcookie)(unsafe.Pointer(c)).Fsize != 0 { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Fsize-uint32(1)))) = uint8(0) + } + } + } + return len1 +} + +func _mclose(tls *TLS, m uintptr) (r int32) { + return 0 +} + +func Xfmemopen(tls *TLS, buf uintptr, size Tsize_t, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v mode=%v, (%v:)", tls, buf, size, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var plus, v2 int32 + var v1 uint32 + var v3 Tsize_t + _, _, _, _, _ = f, plus, v1, v2, v3 + plus = BoolInt32(!!(Xstrchr(tls, mode, int32('+')) != 0)) + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*int8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(buf != 0) && size > uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + if buf != 0 { + v1 = uint32(0) + } else { + v1 = size + } + f = Xmalloc(tls, uint32(1188)+v1) + if !(f != 0) { + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(UintptrFromInt32(0)+156)) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 136 + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 156 + uintptr(UNGET) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint32FromInt64(1032) - Uint32FromInt32(UNGET) + if !(buf != 0) { + buf = f + 1188 + Xmemset(tls, buf, 0, size) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf = buf + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fsize = size + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fmode = int32(*(*int8)(unsafe.Pointer(mode))) + if !(plus != 0) { + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('r') { + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = size + } else { + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('a') { + v3 = Xstrnlen(tls, buf, size) + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + } else { + if plus != 0 { + *(*uint8)(unsafe.Pointer((*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf)) = uint8(0) + } + } + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_mread) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_mwrite) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_mseek) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_mclose) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + return X__ofl_add(tls, f) +} + +func Xfopen(tls *TLS, filename uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var fd, flags int32 + _, _, _ = f, fd, flags + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*int8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Compute the flags to pass to open() */ + flags = X__fmodeflags(tls, mode) + fd = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open), int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(Int32FromInt32(0666))))) + if fd < 0 { + return uintptr(0) + } + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + f = X__fdopen(tls, fd, mode) + if f != 0 { + return f + } + X__syscall1(tls, int32(SYS_close), fd) + return uintptr(0) +} + +type Tfcookie = struct { + Fcookie uintptr + Fiofuncs Tcookie_io_functions_t +} + +type Tcookie_FILE = struct { + Ff TFILE + Ffc Tfcookie + Fbuf [1032]uint8 +} + +func _cookieread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v2, v3, v5 uintptr + var len2, readlen, remain, v1 Tsize_t + var ret Tssize_t + var v4 int32 + _, _, _, _, _, _, _, _, _, _ = fc, len2, readlen, remain, ret, v1, v2, v3, v4, v5 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + ret = -int32(1) + remain = len1 + readlen = uint32(0) + len2 = len1 - BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread != 0) { + goto bail + } + if len2 != 0 { + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len2) + if ret <= 0 { + goto bail + } + readlen += uint32(ret) + remain -= uint32(ret) + } + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) || remain > BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) { + return readlen + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, (*TFILE)(unsafe.Pointer(f)).Frpos, (*TFILE)(unsafe.Pointer(f)).Fbuf_size) + if ret <= 0 { + goto bail + } + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(ret) + v1 = readlen + readlen++ + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + return readlen + goto bail +bail: + ; + if ret == 0 { + v4 = int32(F_EOF) + } else { + v4 = int32(F_ERR) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v4) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = v5 + (*TFILE)(unsafe.Pointer(f)).Frpos = v5 + return readlen +} + +func _cookiewrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v1, v2 uintptr + var len2 Tsize_t + var ret Tssize_t + _, _, _, _, _ = fc, len2, ret, v1, v2 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite != 0) { + return len1 + } + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _cookiewrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint32(0) + } + } + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len1) + if ret < 0 { + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint32(0) + } + return uint32(ret) +} + +func _cookieseek(tls *TLS, f uintptr, _off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Toff_t)(unsafe.Pointer(bp)) = _off + var fc uintptr + var res int32 + _, _ = fc, res + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if uint32(whence) > uint32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return int64(-int32(1)) + } + res = (*(*func(*TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, bp, whence) + if res < 0 { + return int64(res) + } + return *(*Toff_t)(unsafe.Pointer(bp)) +} + +func _cookieclose(tls *TLS, f uintptr) (r int32) { + var fc uintptr + _ = fc + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1 != 0 { + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie) + } + return 0 +} + +func Xfopencookie(tls *TLS, cookie uintptr, mode uintptr, iofuncs Tcookie_io_functions_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cookie=%v mode=%v iofuncs=%v, (%v:)", tls, cookie, mode, iofuncs, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f, v1 uintptr + var v2 int32 + _, _, _ = f, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*int8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+fcookie+buffer or fail */ + v1 = Xmalloc(tls, uint32(1188)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint32(136)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*int8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + /* Set up our fcookie */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fcookie = cookie + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fiofuncs = iofuncs + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 136 + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 156 + uintptr(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint32FromInt64(1032) - Uint32FromInt32(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + /* Initialize op ptrs. No problem if some are unneeded. */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_cookieread) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_cookiewrite) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_cookieseek) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_cookieclose) + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func _locking_putc(tls *TLS, c int32, f uintptr) (r int32) { + var v1, v6, v7 int32 + var v2 uint8 + var v3, v4, v5 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v5 = f + 76 + v6 = int32(1) + v7 = int32(1) + if v7 != 0 { + v7 = int32(FUTEX_PRIVATE) + } + if v6 < Int32FromInt32(0) { + v6 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)|v7), v6) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)), v6) != 0 + } + return c +} + +func Xfputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xfputs(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, s) + return BoolInt32(Xfwrite(tls, s, uint32(1), l, f) == l) - int32(1) +} + +func Xfputs_unlocked(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputs(tls, s, f) +} + +func X__fputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v1 int32 + var loc Tlocale_t + var ploc, v3, v4 uintptr + var v2 uint8 + var _ /* mbc at bp+0 */ [4]int8 + _, _, _, _, _, _, _ = l, loc, ploc, v1, v2, v3, v4 + ploc = uintptr(___get_tp(tls)) + 96 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if BoolInt32(uint32(c) < uint32(128)) != 0 { + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwpos+uintptr(MB_LEN_MAX) < (*TFILE)(unsafe.Pointer(f)).Fwend { + l = Xwctomb(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, c) + if l < 0 { + c = Int32FromUint32(0xffffffff) + } else { + *(*uintptr)(unsafe.Pointer(f + 20)) += uintptr(l) + } + } else { + l = Xwctomb(tls, bp, c) + if l < 0 || X__fwritex(tls, bp, uint32(l), f) < uint32(l) { + c = Int32FromUint32(0xffffffff) + } + } + } + if uint32(c) == uint32(0xffffffff) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(c) +} + +func Xfputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = int32(X__fputwc_unlocked(tls, c, f)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return uint32(c) +} + +func Xfputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xfputws(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + *(*uintptr)(unsafe.Pointer(bp)) = _ws + var __need_unlock, v1 int32 + var l, v2 Tsize_t + var loc Tlocale_t + var ploc uintptr + var v3 bool + var _ /* buf at bp+4 */ [1024]uint8 + _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3 + l = uint32(0) + ploc = uintptr(___get_tp(tls)) + 96 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + for { + if v3 = *(*uintptr)(unsafe.Pointer(bp)) != 0; v3 { + v2 = Xwcsrtombs(tls, bp+4, bp, uint32(1024), uintptr(0)) + l = v2 + } + if !(v3 && v2+uint32(1) > uint32(1)) { + break + } + if X__fwritex(tls, bp+4, l, f) < l { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return -int32(1) + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return int32(l) /* 0 or -1 */ +} + +func Xfputws_unlocked(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputws(tls, _ws, f) +} + +func Xfread(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var dest uintptr + var k, l, len1 Tsize_t + var v2, v4 uint32 + _, _, _, _, _, _, _, _ = __need_unlock, dest, k, l, len1, v1, v2, v4 + dest = destv + len1 = size * nmemb + l = len1 + if !(size != 0) { + nmemb = uint32(0) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + /* First exhaust the buffer. */ + if uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) < l { + v2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + } else { + v2 = l + } + k = v2 + Xmemcpy(tls, dest, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + dest += uintptr(k) + l -= k + } + /* Read the remainder directly */ + for { + if !(l != 0) { + break + } + if X__toread(tls, f) != 0 { + v4 = uint32(0) + } else { + v4 = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, dest, l) + } + k = v4 + if !(k != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return (len1 - l) / size + } + goto _3 + _3: + ; + l -= k + dest += uintptr(k) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return nmemb +} + +func Xfread_unlocked(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfread(tls, destv, size, nmemb, f) +} + +/* The basic idea of this implementation is to open a new FILE, + * hack the necessary parts of the new FILE into the old one, then + * close the new FILE. */ + +/* Locking IS necessary because another thread may provably hold the + * lock, via flockfile or otherwise, when freopen is called, and in that + * case, freopen cannot act until the lock is released. */ + +func Xfreopen(tls *TLS, filename uintptr, mode uintptr, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v f=%v, (%v:)", tls, filename, mode, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fl, v1 int32 + var f2 uintptr + _, _, _, _ = __need_unlock, f2, fl, v1 + fl = X__fmodeflags(tls, mode) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfflush(tls, f) + if !(filename != 0) { + if fl&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + fl &= ^(Int32FromInt32(O_CREAT) | Int32FromInt32(O_EXCL) | Int32FromInt32(O_CLOEXEC)) + if X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFL)), fl))) < 0 { + goto fail + } + } else { + f2 = Xfopen(tls, filename, mode) + if !(f2 != 0) { + goto fail + } + if (*TFILE)(unsafe.Pointer(f2)).Ffd == (*TFILE)(unsafe.Pointer(f)).Ffd { + (*TFILE)(unsafe.Pointer(f2)).Ffd = -int32(1) + } else { + if X__dup3(tls, (*TFILE)(unsafe.Pointer(f2)).Ffd, (*TFILE)(unsafe.Pointer(f)).Ffd, fl&int32(O_CLOEXEC)) < 0 { + goto fail2 + } + } + (*TFILE)(unsafe.Pointer(f)).Fflags = (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) | (*TFILE)(unsafe.Pointer(f2)).Fflags + (*TFILE)(unsafe.Pointer(f)).Fread = (*TFILE)(unsafe.Pointer(f2)).Fread + (*TFILE)(unsafe.Pointer(f)).Fwrite = (*TFILE)(unsafe.Pointer(f2)).Fwrite + (*TFILE)(unsafe.Pointer(f)).Fseek = (*TFILE)(unsafe.Pointer(f2)).Fseek + (*TFILE)(unsafe.Pointer(f)).Fclose1 = (*TFILE)(unsafe.Pointer(f2)).Fclose1 + Xfclose(tls, f2) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = 0 + (*TFILE)(unsafe.Pointer(f)).Flocale = uintptr(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return f + goto fail2 +fail2: + ; + Xfclose(tls, f2) + goto fail +fail: + ; + Xfclose(tls, f) + return UintptrFromInt32(0) +} + +func Xfscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfscanf(tls, f, fmt, va) +} + +func X__fseeko_unlocked(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + /* Fail immediately for invalid whence argument. */ + if whence != int32(1) && whence != 0 && whence != int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Adjust relative offset for unread data in buffer, if any. */ + if whence == int32(1) && (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + off -= int64(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + } + /* Flush write buffer, and report error on failure. */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + return -int32(1) + } + } + /* Leave writing mode */ + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + /* Perform the underlying seek. */ + if (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, off, whence) < 0 { + return -int32(1) + } + /* If seek succeeded, file is seekable and we discard read buffer. */ + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + return 0 +} + +func X__fseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, result, v1 int32 + _, _, _ = __need_unlock, result, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + result = X__fseeko_unlocked(tls, f, off, whence) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return result +} + +func Xfseek(tls *TLS, f uintptr, off int32, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, int64(off), whence) +} + +func Xfseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfsetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, *(*int64)(unsafe.Pointer(pos)), 0) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__ftello_unlocked(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + var v1 int32 + _, _ = pos, v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_APP) != 0 && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + v1 = int32(2) + } else { + v1 = int32(1) + } + pos = (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, 0, v1) + if pos < 0 { + return pos + } + /* Adjust for data in buffer. */ + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + pos += int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos) - int32((*TFILE)(unsafe.Pointer(f)).Frend)) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwbase != 0 { + pos += int64(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + } + return pos +} + +func X__ftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var pos Toff_t + _, _, _ = __need_unlock, pos, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + pos = X__ftello_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return pos +} + +func Xftell(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + _ = pos + pos = X__ftello(tls, f) + if pos > int64(0x7fffffff) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + return int32(pos) +} + +func Xftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ftello(tls, f) +} + +func X__do_orphaned_stdio_locks(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks + for { + if !(f != 0) { + break + } + _a_store(tls, f+76, int32(0x40000000)) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } +} + +func X__unlist_locked_file(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = (*TFILE)(unsafe.Pointer(f)).Fprev_locked + } + if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } else { + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } + } +} + +func X__register_locked_file(tls *TLS, f uintptr, self Tpthread_t) { + if __ccgo_strace { + trc("tls=%v f=%v self=%v, (%v:)", tls, f, self, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount = int32(1) + (*TFILE)(unsafe.Pointer(f)).Fprev_locked = uintptr(0) + (*TFILE)(unsafe.Pointer(f)).Fnext_locked = (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = f + } + (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks = f +} + +func Xftrylockfile(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var owner, tid, v1 int32 + var self Tpthread_t + _, _, _, _ = owner, self, tid, v1 + self = uintptr(___get_tp(tls)) + tid = (*t__pthread)(unsafe.Pointer(self)).Ftid + owner = AtomicLoadPInt32(f + 76) + if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int32(0x7fffffff) { + return -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount++ + return 0 + } + if owner < 0 { + v1 = Int32FromInt32(0) + owner = v1 + AtomicStorePInt32(f+76, v1) + } + if owner != 0 || _a_cas(tls, f+76, 0, tid) != 0 { + return -int32(1) + } + X__register_locked_file(tls, f, self) + return 0 +} + +func Xfunlockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int32(1) { + X__unlist_locked_file(tls, f) + (*TFILE)(unsafe.Pointer(f)).Flockcount = 0 + ___unlockfile(tls, f) + } else { + (*TFILE)(unsafe.Pointer(f)).Flockcount-- + } +} + +func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mode=%v, (%v:)", tls, f, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v3, v4 int32 + var v2 Tlocale_t + _, _, _, _, _ = __need_unlock, v1, v2, v3, v4 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if mode != 0 { + if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + v2 = uintptr(unsafe.Pointer(&X__c_locale)) + } else { + v2 = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + } + (*TFILE)(unsafe.Pointer(f)).Flocale = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fmode != 0) { + if mode > 0 { + v4 = int32(1) + } else { + v4 = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = v4 + } + } + mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return mode +} + +func Xfwprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__fwritex(tls *TLS, s uintptr, l Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v, (%v:)", tls, s, l, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + _, _ = i, n + i = uint32(0) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return uint32(0) + } + if l > uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwend)-int32((*TFILE)(unsafe.Pointer(f)).Fwpos)) { + return (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, l) + } + if (*TFILE)(unsafe.Pointer(f)).Flbf >= 0 { + /* Match /^(.*\n|)/ */ + i = l + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint32(1))))) != int32('\n')) { + break + } + goto _1 + _1: + ; + i-- + } + if i != 0 { + n = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, i) + if n < i { + return n + } + s += uintptr(i) + l -= i + } + } + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, s, l) + *(*uintptr)(unsafe.Pointer(f + 20)) += uintptr(l) + return l + i +} + +func Xfwrite(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var k, l Tsize_t + var v2 uint32 + _, _, _, _, _ = __need_unlock, k, l, v1, v2 + l = size * nmemb + if !(size != 0) { + nmemb = uint32(0) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + k = X__fwritex(tls, src, l, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if k == l { + v2 = nmemb + } else { + v2 = k / size + } + return v2 +} + +func Xfwrite_unlocked(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwrite(tls, src, size, nmemb, f) +} + +func Xfwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwscanf(tls, f, fmt, va) +} + +func _locking_getc1(tls *TLS, f uintptr) (r int32) { + var c, v1, v5, v6 int32 + var v2, v3, v4 uintptr + _, _, _, _, _, _, _ = c, v1, v2, v3, v4, v5, v6 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v4 = f + 76 + v5 = int32(1) + v6 = int32(1) + if v6 != 0 { + v6 = int32(FUTEX_PRIVATE) + } + if v5 < Int32FromInt32(0) { + v5 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)|v6), v5) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)), v5) != 0 + } + return c +} + +func Xgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc1(tls, v1) + goto _3 +_3: + return v2 +} + +func X_IO_getc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc(tls, f1) +} + +func Xgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + return v1 +} + +func X_IO_getc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func Xfgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func _locking_getc2(tls *TLS, f uintptr) (r int32) { + var c, v1, v5, v6 int32 + var v2, v3, v4 uintptr + _, _, _, _, _, _, _ = c, v1, v2, v3, v4, v5, v6 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v4 = f + 76 + v5 = int32(1) + v6 = int32(1) + if v6 != 0 { + v6 = int32(FUTEX_PRIVATE) + } + if v5 < Int32FromInt32(0) { + v5 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)|v6), v5) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v4), int32(Int32FromInt32(FUTEX_WAKE)), v5) != 0 + } + return c +} + +func Xgetchar(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc2(tls, v1) + goto _3 +_3: + return v2 +} + +func Xgetchar_unlocked(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v3 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return v1 +} + +func Xgetdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v3, v4, v5 int32 + var i, k, m, v11 Tsize_t + var tmp, z, v6, v7, v8, v9 uintptr + var v10 int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, k, m, tmp, z, v1, v10, v11, v3, v4, v5, v6, v7, v8, v9 + i = uint32(0) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !(n != 0) || !(s != 0) { + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(*(*uintptr)(unsafe.Pointer(s)) != 0) { + *(*Tsize_t)(unsafe.Pointer(n)) = uint32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, delim, uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v3 = int32(z) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + int32(1) + } else { + v3 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint32(v3) + } else { + z = uintptr(0) + k = uint32(0) + } + if i+k >= *(*Tsize_t)(unsafe.Pointer(n)) { + m = i + k + uint32(2) + if !(z != 0) && m < Uint32FromUint32(0xffffffff)/Uint32FromInt32(4) { + m += m / uint32(2) + } + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + m = i + k + uint32(2) + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + /* Copy as much as fits and ensure no + * pushback remains in the FILE buf. */ + k = *(*Tsize_t)(unsafe.Pointer(n)) - i + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + } + *(*uintptr)(unsafe.Pointer(s)) = tmp + *(*Tsize_t)(unsafe.Pointer(n)) = m + } + if k != 0 { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + i += k + } + if z != 0 { + break + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 == -int32(1) { + if !(i != 0) || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + break + } + /* If the byte read by getc won't fit without growing the + * output buffer, push it back for next iteration. */ + if i+uint32(1) >= *(*Tsize_t)(unsafe.Pointer(n)) { + v9 = f + 4 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + *(*uint8)(unsafe.Pointer(v8)) = uint8(c) + } else { + v10 = int8(c) + v11 = i + i++ + *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(v11))) = v10 + if int32(v10) == delim { + break + } + } + goto _2 + _2: + } + *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(i))) = 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(i) +} + +func X__getdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, delim, f) +} + +func Xgetline(tls *TLS, s uintptr, n uintptr, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, int32('\n'), f) +} + +func Xgets(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v3 int32 + var i, v6 Tsize_t + var v4, v5 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, v1, v2, v3, v4, v5, v6 + i = uint32(0) + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdin_FILE))+76) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + for { + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v5 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 4 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + v2 = v3 + c = v2 + if !(v2 != -int32(1) && c != int32('\n')) { + break + } + v6 = i + i++ + *(*int8)(unsafe.Pointer(s + uintptr(v6))) = int8(c) + } + *(*int8)(unsafe.Pointer(s + uintptr(i))) = 0 + if c != int32('\n') && (!((*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Fflags&Uint32FromInt32(F_EOF) != 0) || !(i != 0)) { + s = uintptr(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return s +} + +func Xgetw(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* x at bp+0 */ int32 + _ = v1 + if Xfread(tls, bp, uint32(4), uint32(1), f) != 0 { + v1 = *(*int32)(unsafe.Pointer(bp)) + } else { + v1 = -int32(1) + } + return v1 +} + +func Xgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, f) +} + +func Xgetwchar(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) +} + +func Xgetwchar_unlocked(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetwchar(tls) +} + +var _ofl_head uintptr +var _ofl_lock [1]int32 + +func X__ofl_lock(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) + return uintptr(unsafe.Pointer(&_ofl_head)) +} + +func X__ofl_unlock(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) +} + +func X__ofl_add(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var head uintptr + _ = head + head = X__ofl_lock(tls) + (*TFILE)(unsafe.Pointer(f)).Fnext = *(*uintptr)(unsafe.Pointer(head)) + if *(*uintptr)(unsafe.Pointer(head)) != 0 { + (*TFILE)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(head)))).Fprev = f + } + *(*uintptr)(unsafe.Pointer(head)) = f + X__ofl_unlock(tls) + return f +} + +type Tcookie1 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t +} + +type Tms_FILE = struct { + Ff TFILE + Fc Tcookie1 + Fbuf [1024]uint8 +} + +func _ms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie1)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie1)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(int32(0x7fffffff)-base) { + goto fail + } + v2 = uint32(int64(base) + off) + (*Tcookie1)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _ms_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _ms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint32(0) + } + } + if len1+(*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Fspace { + len2 = uint32(2)*(*Tcookie1)(unsafe.Pointer(c)).Fspace + uint32(1) | ((*Tcookie1)(unsafe.Pointer(c)).Fpos + len1 + uint32(1)) + newbuf = Xrealloc(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf, len2) + if !(newbuf != 0) { + return uint32(0) + } + v1 = newbuf + (*Tcookie1)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fspace), 0, len2-(*Tcookie1)(unsafe.Pointer(c)).Fspace) + (*Tcookie1)(unsafe.Pointer(c)).Fspace = len2 + } + Xmemcpy(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c + 8)) += len1 + if (*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Flen1 { + (*Tcookie1)(unsafe.Pointer(c)).Flen1 = (*Tcookie1)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie1)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _ms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_memstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint32(1184)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint32(1)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(136)) + Xmemset(tls, f+136, 0, uint32(24)) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 136 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint32FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*int8)(unsafe.Pointer(buf)) = 0 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 160 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint32(1024) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_ms_write) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_ms_seek) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_ms_close) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fmode = -int32(1) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + return X__ofl_add(tls, f) +} + +type Tcookie2 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t + Fmbs Tmbstate_t +} + +type Twms_FILE = struct { + Ff TFILE + Fc Tcookie2 + Fbuf [1]uint8 +} + +func _wms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie2)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie2)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(Int32FromInt32(0x7fffffff)/Int32FromInt32(4)-base) { + goto fail + } + Xmemset(tls, c+24, 0, uint32(8)) + v2 = uint32(int64(base) + off) + (*Tcookie2)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _wms_write(tls *TLS, f uintptr, _buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _buf + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _wms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint32(0) + } + } + if len1+(*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Fspace { + len2 = uint32(2)*(*Tcookie2)(unsafe.Pointer(c)).Fspace + uint32(1) | ((*Tcookie2)(unsafe.Pointer(c)).Fpos + len1 + uint32(1)) + if len2 > uint32(Int32FromInt32(0x7fffffff)/Int32FromInt32(4)) { + return uint32(0) + } + newbuf = Xrealloc(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf, len2*uint32(4)) + if !(newbuf != 0) { + return uint32(0) + } + v1 = newbuf + (*Tcookie2)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fspace)*4, 0, uint32(4)*(len2-(*Tcookie2)(unsafe.Pointer(c)).Fspace)) + (*Tcookie2)(unsafe.Pointer(c)).Fspace = len2 + } + len2 = Xmbsnrtowcs(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fpos)*4, bp, len1, (*Tcookie2)(unsafe.Pointer(c)).Fspace-(*Tcookie2)(unsafe.Pointer(c)).Fpos, c+24) + if len2 == uint32(-Int32FromInt32(1)) { + return uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(c + 8)) += len2 + if (*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Flen1 { + (*Tcookie2)(unsafe.Pointer(c)).Flen1 = (*Tcookie2)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie2)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _wms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_wmemstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint32(172)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint32(4)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(136)) + Xmemset(tls, f+136, 0, uint32(32)) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 136 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint32FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*Twchar_t)(unsafe.Pointer(buf)) = 0 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 168 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint32(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_wms_write) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_wms_seek) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_wms_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + Xfwide(tls, f, int32(1)) + return X__ofl_add(tls, f) +} + +func Xpclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pid Tpid_t + var r, v1 int32 + var _ /* status at bp+0 */ int32 + _, _, _ = pid, r, v1 + pid = (*TFILE)(unsafe.Pointer(f)).Fpipe_pid + Xfclose(tls, f) + for { + v1 = int32(X__syscall4(tls, int32(SYS_wait4), pid, int32(bp), int32(Int32FromInt32(0)), int32(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EINTR)) { + break + } + } + if r < 0 { + return X__syscall_ret(tls, uint32(r)) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xperror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + var __need_unlock, old_mode, v1 int32 + var errstr, f, old_locale uintptr + _, _, _, _, _, _ = __need_unlock, errstr, f, old_locale, old_mode, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + errstr = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if msg != 0 && *(*int8)(unsafe.Pointer(msg)) != 0 { + Xfwrite(tls, msg, Xstrlen(tls, msg), uint32(1), f) + Xfputc(tls, int32(':'), f) + Xfputc(tls, int32(' '), f) + } + Xfwrite(tls, errstr, Xstrlen(tls, errstr), uint32(1), f) + Xfputc(tls, int32('\n'), f) + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) + _ = ap + return ret +} + +func _locking_putc1(tls *TLS, c int32, f uintptr) (r int32) { + var v1, v6, v7 int32 + var v2 uint8 + var v3, v4, v5 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v5 = f + 76 + v6 = int32(1) + v7 = int32(1) + if v7 != 0 { + v7 = int32(FUTEX_PRIVATE) + } + if v6 < Int32FromInt32(0) { + v6 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)|v7), v6) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)), v6) != 0 + } + return c +} + +func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc1(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func X_IO_putc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc(tls, c1, f1) +} + +func Xputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + return v1 +} + +func X_IO_putc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func Xfputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func _locking_putc2(tls *TLS, c int32, f uintptr) (r int32) { + var v1, v6, v7 int32 + var v2 uint8 + var v3, v4, v5 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if _a_cas(tls, f+76, 0, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + if _a_swap(tls, f+76, 0)&int32(MAYBE_WAITERS) != 0 { + v5 = f + 76 + v6 = int32(1) + v7 = int32(1) + if v7 != 0 { + v7 = int32(FUTEX_PRIVATE) + } + if v6 < Int32FromInt32(0) { + v6 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)|v7), v6) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v5), int32(Int32FromInt32(FUTEX_WAKE)), v6) != 0 + } + return c +} + +func Xputchar(tls *TLS, c1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v, (%v:)", tls, c1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc2(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xputchar_unlocked(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v2 = uint8(c) + v4 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(c))) + } + return v1 +} + +func Xputs(tls *TLS, s uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1, v2 int32 + var v3 uint8 + var v4, v5 uintptr + var v6 bool + _, _, _, _, _, _, _, _ = __need_unlock, r, v1, v2, v3, v4, v5, v6 + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdout_FILE))+76) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + if v6 = Xfputs(tls, s, uintptr(unsafe.Pointer(&X__stdout_FILE))) < 0; !v6 { + if int32(uint8(Int32FromUint8('\n'))) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v3 = uint8(Int32FromUint8('\n')) + v5 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 20 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = v3 + v2 = int32(v3) + } else { + v2 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(Int32FromUint8('\n')))) + } + } + r = -BoolInt32(v6 || v2 < 0) + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } + return r +} + +func Xputw(tls *TLS, _x int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _x=%v f=%v, (%v:)", tls, _x, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*int32)(unsafe.Pointer(bp)) = _x + return int32(Xfwrite(tls, bp, uint32(4), uint32(1), f)) - int32(1) +} + +func Xputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, f) +} + +func Xputwchar(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, uintptr(unsafe.Pointer(&X__stdout_FILE))) +} + +func Xputwchar_unlocked(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputwchar(tls, c) +} + +func Xremove(tls *TLS, path uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_unlink), int32(path))) + if r == -int32(EISDIR) { + r = int32(X__syscall1(tls, int32(SYS_rmdir), int32(path))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xrename(tls *TLS, old uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_rename), int32(old), int32(new1)))) +} + +func Xrewind(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + X__fseeko_unlocked(tls, f, 0, 0) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_scanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscanf(tls, fmt, va) +} + +func Xsetbuf(tls *TLS, f uintptr, buf uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v, (%v:)", tls, f, buf, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, uint32(BUFSIZ)) +} + +func Xsetbuffer(tls *TLS, f uintptr, buf uintptr, size Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v size=%v, (%v:)", tls, f, buf, size, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, size) +} + +func Xsetlinebuf(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xsetvbuf(tls, f, uintptr(0), int32(_IOLBF), uint32(0)) +} + +/* The behavior of this function is undefined except when it is the first + * operation on the stream, so the presence or absence of locking is not + * observable in a program whose behavior is defined. Thus no locking is + * performed here. No allocation of buffers is performed, but a buffer + * provided by the caller is used as long as it is suitably sized. */ + +func Xsetvbuf(tls *TLS, f uintptr, buf uintptr, type1 int32, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v type1=%v size=%v, (%v:)", tls, f, buf, type1, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if type1 == int32(_IONBF) { + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(0) + } else { + if type1 == int32(_IOLBF) || type1 == _IOFBF { + if buf != 0 && size >= uint32(UNGET) { + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + UintptrFromInt32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = size - uint32(UNGET) + } + if type1 == int32(_IOLBF) && (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + } else { + return -int32(1) + } + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_SVB) + return 0 +} + +func Xsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsnprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xsprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_sscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsscanf(tls, s, fmt, va) +} + +var _buf5 [8]uint8 + +func init() { + p := unsafe.Pointer(&X__stderr_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 36)) = __ccgo_fp(X__stdio_write) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +var _buf6 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdin_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 32)) = __ccgo_fp(X__stdio_read) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +var _buf7 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdout_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 36)) = __ccgo_fp(X__stdout_write) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +func Xswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xswscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_swscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xswscanf(tls, s, fmt, va) +} + +const MAXTRIES = 100 + +func Xtempnam(tls *TLS, dir uintptr, pfx uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v pfx=%v, (%v:)", tls, dir, pfx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var dl, l, pl Tsize_t + var r, try int32 + var _ /* s at bp+1 */ [4096]int8 + _, _, _, _, _ = dl, l, pl, r, try + if !(dir != 0) { + dir = __ccgo_ts + 1406 + } + if !(pfx != 0) { + pfx = __ccgo_ts + 1411 + } + dl = Xstrlen(tls, dir) + pl = Xstrlen(tls, pfx) + l = dl + uint32(1) + pl + uint32(1) + uint32(6) + if l >= uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, bp+1, dir, dl) + (*(*[4096]int8)(unsafe.Pointer(bp + 1)))[dl] = int8('/') + Xmemcpy(tls, bp+1+uintptr(dl)+uintptr(1), pfx, pl) + (*(*[4096]int8)(unsafe.Pointer(bp + 1)))[dl+uint32(1)+pl] = int8('_') + (*(*[4096]int8)(unsafe.Pointer(bp + 1)))[l] = 0 + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(l)-uintptr(6)) + *(*[1]int8)(unsafe.Pointer(bp)) = [1]int8{} + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(bp+1), int32(bp), int32(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + return Xstrdup(tls, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpfile(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var f uintptr + var fd, try int32 + var _ /* s at bp+0 */ [20]int8 + _, _, _ = f, fd, try + *(*[20]int8)(unsafe.Pointer(bp)) = [20]int8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'f', 'i', 'l', 'e', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+uintptr(13)) + fd = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open), int32(bp), int32(Int32FromInt32(O_RDWR)|Int32FromInt32(O_CREAT)|Int32FromInt32(O_EXCL)|Int32FromInt32(O_LARGEFILE)), int32(Int32FromInt32(0600))))) + if fd >= 0 { + X__syscall1(tls, int32(SYS_unlink), int32(bp)) + f = X__fdopen(tls, fd, __ccgo_ts+1416) + if !(f != 0) { + X__syscall1(tls, int32(SYS_close), fd) + } + return f + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpnam(tls *TLS, buf uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, try int32 + var v2 uintptr + var _ /* s at bp+1 */ [19]int8 + _, _, _ = r, try, v2 + *(*[19]int8)(unsafe.Pointer(bp + 1)) = [19]int8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'n', 'a', 'm', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(12)) + *(*[1]int8)(unsafe.Pointer(bp)) = [1]int8{} + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(bp+1), int32(bp), int32(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + if buf != 0 { + v2 = buf + } else { + v2 = uintptr(unsafe.Pointer(&_internal1)) + } + return Xstrcpy(tls, v2, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +var _internal1 [20]int8 + +func Xungetc(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var v2, v3 uintptr + _, _, _, _ = __need_unlock, v1, v2, v3 + if c == -int32(1) { + return c + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + v3 = f + 4 + *(*uintptr)(unsafe.Pointer(v3))-- + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uint8)(unsafe.Pointer(v2)) = uint8(c) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(uint8(c)) +} + +func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, l, v1, v2 int32 + var loc Tlocale_t + var ploc, v4, v5, p6 uintptr + var v3 bool + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 + ploc = uintptr(___get_tp(tls)) + 96 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if v3 = !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || c == uint32(0xffffffff); !v3 { + v2 = int32(Xwcrtomb(tls, bp, int32(c), uintptr(0))) + l = v2 + } + if v3 || v2 < 0 || (*TFILE)(unsafe.Pointer(f)).Frpos < (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET)+uintptr(l) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(0xffffffff) + } + if BoolInt32(c < uint32(128)) != 0 { + v5 = f + 4 + *(*uintptr)(unsafe.Pointer(v5))-- + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uint8)(unsafe.Pointer(v4)) = uint8(c) + } else { + p6 = f + 4 + *(*uintptr)(unsafe.Pointer(p6)) -= uintptr(l) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(p6)), bp, uint32(l)) + } + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xvasprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap2 Tva_list + var l int32 + var v1 uintptr + var v2 bool + _, _, _, _ = ap2, l, v1, v2 + ap2 = ap + l = Xvsnprintf(tls, uintptr(0), uint32(0), fmt, ap2) + _ = ap2 + if v2 = l < 0; !v2 { + v1 = Xmalloc(tls, uint32(l)+uint32(1)) + *(*uintptr)(unsafe.Pointer(s)) = v1 + } + if v2 || !(v1 != 0) { + return -int32(1) + } + return Xvsnprintf(tls, *(*uintptr)(unsafe.Pointer(s)), uint32(l)+uint32(1), fmt, ap) +} + +func Xvdprintf(tls *TLS, fd int32, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v ap=%v, (%v:)", tls, fd, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fwrite: __ccgo_fp(X__stdio_write), + Fbuf: fmt, + Ffd: fd, + Flock: -int32(1), + Flbf: -int32(1), + } + return Xvfprintf(tls, bp, fmt, ap) +} + +const ALT_FORM = 8 +const FLAGMASK = 75913 +const GROUPED = 128 +const LDBL_EPSILON3 = 2.22044604925031308085e-16 +const LEFT_ADJ = 8192 +const MARK_POS = 2048 +const PAD_POS = 1 +const ZERO_PAD = 65536 + +const _BARE = 0 +const _LPRE = 1 +const _LLPRE = 2 +const _HPRE = 3 +const _HHPRE = 4 +const _BIGLPRE = 5 +const _ZTPRE = 6 +const _JPRE = 7 +const _STOP = 8 +const _PTR = 9 +const _INT = 10 +const _UINT = 11 +const _ULLONG = 12 +const _LONG = 13 +const _ULONG = 14 +const _SHORT = 15 +const _USHORT = 16 +const _CHAR = 17 +const _UCHAR = 18 +const _LLONG = 19 +const _SIZET = 20 +const _IMAX = 21 +const _UMAX = 22 +const _PDIFF = 23 +const _UIPTR = 24 +const _DBL = 25 +const _LDBL = 26 +const _NOARG = 27 +const _MAXSTATE = 28 + +var _states = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +type Targ = struct { + Ff [0]float64 + Fp [0]uintptr + Fi Tuintmax_t +} + +func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint32(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0) { + X__fwritex(tls, s, l, f) + } +} + +func _pad3(tls *TLS, f uintptr, c int8, w int32, l int32, fl int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uint32 + var _ /* pad at bp+0 */ [256]int8 + _ = v1 + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0 || l >= w { + return + } + l = w - l + if uint32(l) > uint32(256) { + v1 = uint32(256) + } else { + v1 = uint32(l) + } + Xmemset(tls, bp, int32(c), v1) + for { + if !(uint32(l) >= uint32(256)) { + break + } + _out(tls, f, bp, uint32(256)) + goto _2 + _2: + ; + l = int32(uint32(l) - Uint32FromInt64(256)) + } + _out(tls, f, bp, uint32(l)) +} + +var _xdigits1 = [16]int8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} + +func _fmt_x(tls *TLS, x Tuintmax_t, s uintptr, lower int32) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*int8)(unsafe.Pointer(v2)) = int8(int32(_xdigits1[x&uint64(15)]) | lower) + goto _1 + _1: + ; + x >>= uint64(4) + } + return s +} + +func _fmt_o(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*int8)(unsafe.Pointer(v2)) = int8(uint64('0') + x&uint64(7)) + goto _1 + _1: + ; + x >>= uint64(3) + } + return s +} + +func _fmt_u(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var y uint32 + var v2, v4 uintptr + _, _, _ = y, v2, v4 + for { + if !(x > uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1))) { + break + } + s-- + v2 = s + *(*int8)(unsafe.Pointer(v2)) = int8(uint64('0') + x%uint64(10)) + goto _1 + _1: + ; + x /= uint64(10) + } + y = uint32(x) + for { + if !(y != 0) { + break + } + s-- + v4 = s + *(*int8)(unsafe.Pointer(v4)) = int8(uint32('0') + y%uint32(10)) + goto _3 + _3: + ; + y /= uint32(10) + } + return s +} + +// C documentation +// +// /* Do not override this check. The floating point printing code below +// * depends on the float.h constants being right. If they are wrong, it +// * may overflow the stack. */ +type Tcompiler_defines_long_double_incorrectly = [1]int8 + +func _fmt_fp(tls *TLS, f uintptr, y float64, w int32, p int32, fl int32, t int32) (r1 int32) { + bp := tls.Alloc(560) + defer tls.Free(560) + var a, b, d, ebuf, estr, prefix, r, s, s1, s2, s3, s4, z, v10, v11, v13, v14, v15, v17, v18, v19, v20, v21, v24, v27, v28, v31, v32, v43, v44, v46, v48, v49, v5, v51, v54, v55, v56, v6 uintptr + var carry, carry1, rm, x2 Tuint32_t + var e, i, j, l, need, pl, re, sh, sh1, x, v12, v16, v22, v25, v36, v37, v38, v39, v40, v41, v42, v45, v52, v57, v58, v7, v8, v9 int32 + var round, round1, small float64 + var x1 Tuint64_t + var v1, v3 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* big at bp+8 */ [126]Tuint32_t + var _ /* buf at bp+516 */ [22]int8 + var _ /* e2 at bp+512 */ int32 + var _ /* ebuf0 at bp+538 */ [12]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, carry, carry1, d, e, ebuf, estr, i, j, l, need, pl, prefix, r, re, rm, round, round1, s, s1, s2, s3, s4, sh, sh1, small, x, x1, x2, z, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v24, v25, v27, v28, v3, v31, v32, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v48, v49, v5, v51, v52, v54, v55, v56, v57, v58, v6, v7, v8, v9 + *(*int32)(unsafe.Pointer(bp + 512)) = 0 + prefix = __ccgo_ts + 1419 + ebuf = bp + 538 + uintptr(Uint32FromInt32(3)*Uint32FromInt64(4)) + pl = int32(1) + *(*float64)(unsafe.Pointer(bp)) = y + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if int32(v1>>Int32FromInt32(63)) != 0 { + y = -y + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(3) + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(6) + } else { + prefix++ + pl = Int32FromInt32(0) + } + } + } + *(*float64)(unsafe.Pointer(bp)) = y + v3 = *(*uint64)(unsafe.Pointer(bp)) + goto _4 +_4: + if !(BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< int32(3)+pl { + v7 = w + } else { + v7 = int32(3) + pl + } + return v7 + } + y = Xfrexpl(tls, y, bp+512) * Float64FromInt32(2) + if y != 0 { + *(*int32)(unsafe.Pointer(bp + 512))-- + } + if t|int32(32) == int32('a') { + round = Float64FromFloat64(8) + if t&int32(32) != 0 { + prefix += uintptr(9) + } + pl += int32(2) + if p < 0 || p >= Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)-Int32FromInt32(1) { + re = 0 + } else { + re = Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4) - Int32FromInt32(1) - p + } + if re != 0 { + round *= float64(Int32FromInt32(1) << (Int32FromInt32(LDBL_MANT_DIG) % Int32FromInt32(4))) + for { + v8 = re + re-- + if !(v8 != 0) { + break + } + round *= Float64FromInt32(16) + } + if int32(*(*int8)(unsafe.Pointer(prefix))) == int32('-') { + y = -y + y -= round + y += round + y = -y + } else { + y += round + y -= round + } + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v9 = -*(*int32)(unsafe.Pointer(bp + 512)) + } else { + v9 = *(*int32)(unsafe.Pointer(bp + 512)) + } + estr = _fmt_u(tls, uint64(v9), ebuf) + if estr == ebuf { + estr-- + v10 = estr + *(*int8)(unsafe.Pointer(v10)) = int8('0') + } + estr-- + v11 = estr + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v12 = int32('-') + } else { + v12 = int32('+') + } + *(*int8)(unsafe.Pointer(v11)) = int8(v12) + estr-- + v13 = estr + *(*int8)(unsafe.Pointer(v13)) = int8(t + (Int32FromUint8('p') - Int32FromUint8('a'))) + s = bp + 516 + for cond := true; cond; cond = y != 0 { + x = int32(y) + v14 = s + s++ + *(*int8)(unsafe.Pointer(v14)) = int8(int32(_xdigits1[x]) | t&int32(32)) + y = Float64FromInt32(16) * (y - float64(x)) + if int32(s)-t__predefined_ptrdiff_t(bp+516) == int32(1) && (y != 0 || p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + v15 = s + s++ + *(*int8)(unsafe.Pointer(v15)) = int8('.') + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(2)-(int32(ebuf)-int32(estr))-pl { + return -int32(1) + } + if p != 0 && int32(s)-t__predefined_ptrdiff_t(bp+516)-int32(2) < p { + l = p + int32(2) + (int32(ebuf) - int32(estr)) + } else { + l = int32(s) - t__predefined_ptrdiff_t(bp+516) + (int32(ebuf) - int32(estr)) + } + _pad3(tls, f, int8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, int8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _out(tls, f, bp+516, uint32(int32(s)-t__predefined_ptrdiff_t(bp+516))) + _pad3(tls, f, int8('0'), l-(int32(ebuf)-int32(estr))-(int32(s)-t__predefined_ptrdiff_t(bp+516)), 0, 0) + _out(tls, f, estr, uint32(int32(ebuf)-int32(estr))) + _pad3(tls, f, int8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v16 = w + } else { + v16 = pl + l + } + return v16 + } + if p < 0 { + p = int32(6) + } + if y != 0 { + y *= Float64FromFloat64(2.68435456e+08) + *(*int32)(unsafe.Pointer(bp + 512)) -= int32(28) + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v18 = bp + 8 + z = v18 + v17 = v18 + r = v17 + a = v17 + } else { + v20 = bp + 8 + uintptr(Uint32FromInt64(504)/Uint32FromInt64(4))*4 - UintptrFromInt32(LDBL_MANT_DIG)*4 - UintptrFromInt32(1)*4 + z = v20 + v19 = v20 + r = v19 + a = v19 + } + for cond := true; cond; cond = y != 0 { + *(*Tuint32_t)(unsafe.Pointer(z)) = uint32(y) + v21 = z + z += 4 + y = Float64FromInt32(1000000000) * (y - float64(*(*Tuint32_t)(unsafe.Pointer(v21)))) + } + for *(*int32)(unsafe.Pointer(bp + 512)) > 0 { + carry = uint32(0) + if int32(29) < *(*int32)(unsafe.Pointer(bp + 512)) { + v22 = int32(29) + } else { + v22 = *(*int32)(unsafe.Pointer(bp + 512)) + } + sh = v22 + d = z - uintptr(1)*4 + for { + if !(d >= a) { + break + } + x1 = uint64(*(*Tuint32_t)(unsafe.Pointer(d)))< a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0) { + z -= 4 + } + *(*int32)(unsafe.Pointer(bp + 512)) -= sh + } + for *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + carry1 = uint32(0) + if int32(9) < -*(*int32)(unsafe.Pointer(bp + 512)) { + v25 = int32(9) + } else { + v25 = -*(*int32)(unsafe.Pointer(bp + 512)) + } + sh1 = v25 + need = int32(uint32(1) + (uint32(p)+Uint32FromInt32(LDBL_MANT_DIG)/Uint32FromUint32(3)+uint32(8))/uint32(9)) + d = a + for { + if !(d < z) { + break + } + rm = *(*Tuint32_t)(unsafe.Pointer(d)) & uint32(int32(1)<>sh1 + carry1 + carry1 = uint32(Int32FromInt32(1000000000)>>sh1) * rm + goto _26 + _26: + ; + d += 4 + } + if !(*(*Tuint32_t)(unsafe.Pointer(a)) != 0) { + a += 4 + } + if carry1 != 0 { + v27 = z + z += 4 + *(*Tuint32_t)(unsafe.Pointer(v27)) = carry1 + } + /* Avoid (slow!) computation past requested precision */ + if t|int32(32) == int32('f') { + v28 = r + } else { + v28 = a + } + b = v28 + if (int32(z)-int32(b))/4 > need { + z = b + uintptr(need)*4 + } + *(*int32)(unsafe.Pointer(bp + 512)) += sh1 + } + if a < z { + i = int32(10) + e = Int32FromInt32(9) * ((int32(r) - int32(a)) / 4) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _29 + _29: + ; + i *= int32(10) + e++ + } + } else { + e = 0 + } + /* Perform rounding: j is precision after the radix (possibly neg) */ + j = p - BoolInt32(t|int32(32) != int32('f'))*e - BoolInt32(t|int32(32) == int32('g') && p != 0) + if j < int32(9)*((int32(z)-int32(r))/4-int32(1)) { + /* We avoid C's broken division of negative numbers */ + d = r + uintptr(1)*4 + uintptr((j+Int32FromInt32(9)*Int32FromInt32(LDBL_MAX_EXP))/Int32FromInt32(9)-Int32FromInt32(LDBL_MAX_EXP))*4 + j += Int32FromInt32(9) * Int32FromInt32(LDBL_MAX_EXP) + j %= int32(9) + i = int32(10) + j++ + for { + if !(j < int32(9)) { + break + } + goto _30 + _30: + ; + i *= int32(10) + j++ + } + x2 = *(*Tuint32_t)(unsafe.Pointer(d)) % uint32(i) + /* Are there any significant digits past j? */ + if x2 != 0 || d+uintptr(1)*4 != z { + round1 = Float64FromInt32(2) / Float64FromFloat64(2.22044604925031308085e-16) + if *(*Tuint32_t)(unsafe.Pointer(d))/uint32(i)&uint32(1) != 0 || i == int32(1000000000) && d > a && *(*Tuint32_t)(unsafe.Pointer(d + uintptr(-Int32FromInt32(1))*4))&uint32(1) != 0 { + round1 += Float64FromInt32(2) + } + if x2 < uint32(i/int32(2)) { + small = Float64FromFloat64(0.5) + } else { + if x2 == uint32(i/int32(2)) && d+uintptr(1)*4 == z { + small = Float64FromFloat64(1) + } else { + small = Float64FromFloat64(1.5) + } + } + if pl != 0 && int32(*(*int8)(unsafe.Pointer(prefix))) == int32('-') { + round1 *= float64(-Int32FromInt32(1)) + small *= float64(-Int32FromInt32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(d)) -= x2 + /* Decide whether to round by probing round+small */ + if round1+small != round1 { + *(*Tuint32_t)(unsafe.Pointer(d)) = *(*Tuint32_t)(unsafe.Pointer(d)) + uint32(i) + for *(*Tuint32_t)(unsafe.Pointer(d)) > uint32(999999999) { + v31 = d + d -= 4 + *(*Tuint32_t)(unsafe.Pointer(v31)) = uint32(0) + if d < a { + a -= 4 + v32 = a + *(*Tuint32_t)(unsafe.Pointer(v32)) = uint32(0) + } + *(*Tuint32_t)(unsafe.Pointer(d))++ + } + i = int32(10) + e = Int32FromInt32(9) * ((int32(r) - int32(a)) / 4) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _33 + _33: + ; + i *= int32(10) + e++ + } + } + } + if z > d+uintptr(1)*4 { + z = d + uintptr(1)*4 + } + } + for { + if !(z > a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0)) { + break + } + goto _34 + _34: + ; + z -= 4 + } + if t|int32(32) == int32('g') { + if !(p != 0) { + p++ + } + if p > e && e >= -int32(4) { + t-- + p -= e + int32(1) + } else { + t -= int32(2) + p-- + } + if !(uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + /* Count trailing zeros in last place */ + if z > a && *(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0 { + i = int32(10) + j = Int32FromInt32(0) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4))%uint32(i) == uint32(0)) { + break + } + goto _35 + _35: + ; + i *= int32(10) + j++ + } + } else { + j = int32(9) + } + if t|int32(32) == int32('f') { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))-j { + v37 = 0 + } else { + v37 = int32(9)*((int32(z)-int32(r))/4-int32(1)) - j + } + if p < v37 { + v36 = p + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))-j { + v38 = 0 + } else { + v38 = int32(9)*((int32(z)-int32(r))/4-int32(1)) - j + } + v36 = v38 + } + p = v36 + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))+e-j { + v40 = 0 + } else { + v40 = int32(9)*((int32(z)-int32(r))/4-int32(1)) + e - j + } + if p < v40 { + v39 = p + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))+e-j { + v41 = 0 + } else { + v41 = int32(9)*((int32(z)-int32(r))/4-int32(1)) + e - j + } + v39 = v41 + } + p = v39 + } + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(1)-BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + return -int32(1) + } + l = int32(1) + p + BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) + if t|int32(32) == int32('f') { + if e > int32(INT_MAX)-l { + return -int32(1) + } + if e > 0 { + l += e + } + } else { + if e < 0 { + v42 = -e + } else { + v42 = e + } + estr = _fmt_u(tls, uint64(v42), ebuf) + for int32(ebuf)-int32(estr) < int32(2) { + estr-- + v43 = estr + *(*int8)(unsafe.Pointer(v43)) = int8('0') + } + estr-- + v44 = estr + if e < 0 { + v45 = int32('-') + } else { + v45 = int32('+') + } + *(*int8)(unsafe.Pointer(v44)) = int8(v45) + estr-- + v46 = estr + *(*int8)(unsafe.Pointer(v46)) = int8(t) + if int32(ebuf)-int32(estr) > int32(INT_MAX)-l { + return -int32(1) + } + l += int32(ebuf) - int32(estr) + } + if l > int32(INT_MAX)-pl { + return -int32(1) + } + _pad3(tls, f, int8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, int8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + if t|int32(32) == int32('f') { + if a > r { + a = r + } + d = a + for { + if !(d <= r) { + break + } + s2 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if d != a { + for s2 > bp+516 { + s2-- + v48 = s2 + *(*int8)(unsafe.Pointer(v48)) = int8('0') + } + } else { + if s2 == bp+516+uintptr(9) { + s2-- + v49 = s2 + *(*int8)(unsafe.Pointer(v49)) = int8('0') + } + } + _out(tls, f, s2, uint32(int32(bp+516+uintptr(9))-int32(s2))) + goto _47 + _47: + ; + d += 4 + } + if p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+483, uint32(1)) + } + for { + if !(d < z && p > 0) { + break + } + s3 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + for s3 > bp+516 { + s3-- + v51 = s3 + *(*int8)(unsafe.Pointer(v51)) = int8('0') + } + if int32(9) < p { + v52 = int32(9) + } else { + v52 = p + } + _out(tls, f, s3, uint32(v52)) + goto _50 + _50: + ; + d += 4 + p -= int32(9) + } + _pad3(tls, f, int8('0'), p+int32(9), int32(9), 0) + } else { + if z <= a { + z = a + uintptr(1)*4 + } + d = a + for { + if !(d < z && p >= 0) { + break + } + s4 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if s4 == bp+516+uintptr(9) { + s4-- + v54 = s4 + *(*int8)(unsafe.Pointer(v54)) = int8('0') + } + if d != a { + for s4 > bp+516 { + s4-- + v55 = s4 + *(*int8)(unsafe.Pointer(v55)) = int8('0') + } + } else { + v56 = s4 + s4++ + _out(tls, f, v56, uint32(1)) + if p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+483, uint32(1)) + } + } + if int32(bp+516+UintptrFromInt32(9))-int32(s4) < p { + v57 = int32(bp+516+UintptrFromInt32(9)) - int32(s4) + } else { + v57 = p + } + _out(tls, f, s4, uint32(v57)) + p -= int32(bp+516+uintptr(9)) - int32(s4) + goto _53 + _53: + ; + d += 4 + } + _pad3(tls, f, int8('0'), p+int32(18), int32(18), 0) + _out(tls, f, estr, uint32(int32(ebuf)-int32(estr))) + } + _pad3(tls, f, int8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v58 = w + } else { + v58 = pl + l + } + return v58 +} + +func _getint(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return i +} + +func _printf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, prefix, ws, z, v35, v39, v44, v48, v8 uintptr + var argpos, cnt, l, p, pl, t, w, xp, v34, v36, v40, v42, v43, v47, v5, v50, v6, v7 int32 + var fl, l10n, ps, st, v31 uint32 + var i Tsize_t + var v45, v49 bool + var _ /* arg at bp+8 */ Targ + var _ /* buf at bp+16 */ [24]int8 + var _ /* mb at bp+48 */ [4]int8 + var _ /* s at bp+0 */ uintptr + var _ /* wc at bp+40 */ [2]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, cnt, fl, i, l, l10n, p, pl, prefix, ps, st, t, w, ws, xp, z, v31, v34, v35, v36, v39, v40, v42, v43, v44, v45, v47, v48, v49, v5, v50, v6, v7, v8 + *(*uintptr)(unsafe.Pointer(bp)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + z = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('%') && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('%')) { + break + } + goto _3 + _3: + ; + z++ + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } + if int32(z)-int32(a) > int32(INT_MAX)-cnt { + goto overflow + } + l = int32(z) - int32(a) + if f != 0 { + _out(tls, f, a, uint32(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + argpos = int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) - int32('0') + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read field width */ + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('*') { + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*4)) = int32(_INT) + w = Int32FromInt32(0) + } else { + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp))++ + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint(tls, bp) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('*') { + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-uint32('0') < uint32(10)) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 3))) == int32('$') { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*4)) = int32(_INT) + p = Int32FromInt32(0) + } else { + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(4) + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp))++ + p = _getint(tls, bp) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states)) + uintptr(st)*58 + uintptr(int32(*(*int8)(unsafe.Pointer(v8)))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + } else { + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } + } else { + if f != 0 { + _pop_arg(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + z = bp + 16 + uintptr(24) + prefix = __ccgo_ts + 1450 + pl = 0 + t = int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + uintptr(-Int32FromInt32(1))))) + /* Transform ls,lc -> S,C */ + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + /* - and 0 flags are mutually exclusive */ + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + switch t { + case int32('n'): + goto _9 + case int32('p'): + goto _10 + case int32('X'): + goto _11 + case int32('x'): + goto _12 + case int32('o'): + goto _13 + case int32('i'): + goto _14 + case int32('d'): + goto _15 + case int32('u'): + goto _16 + case int32('c'): + goto _17 + case int32('s'): + goto _18 + case int32('m'): + goto _19 + case int32('C'): + goto _20 + case int32('S'): + goto _21 + case int32('A'): + goto _22 + case int32('G'): + goto _23 + case int32('F'): + goto _24 + case int32('E'): + goto _25 + case int32('a'): + goto _26 + case int32('g'): + goto _27 + case int32('f'): + goto _28 + case int32('e'): + goto _29 + } + goto _30 + _9: + ; + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LPRE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint32(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint64(cnt) + break + } + goto _1 + _10: + ; + if uint32(p) > Uint32FromInt32(2)*Uint32FromInt64(4) { + v31 = uint32(p) + } else { + v31 = Uint32FromInt32(2) * Uint32FromInt64(4) + } + p = int32(v31) + t = int32('x') + fl |= Uint32FromUint32(1) << (Int32FromUint8('#') - Int32FromUint8(' ')) + _12: + ; + _11: + ; + a = _fmt_x(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z, t&int32(32)) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0 && fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(t >> Int32FromInt32(4)) + pl = Int32FromInt32(2) + } + if !(0 != 0) { + goto _32 + } + _13: + ; + a = _fmt_o(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 && p < int32(z)-int32(a)+int32(1) { + p = int32(z) - int32(a) + int32(1) + } + _32: + ; + if !(0 != 0) { + goto _33 + } + _15: + ; + _14: + ; + pl = int32(1) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) > uint64(Int64FromInt64(INT64_MAX)) { + *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) = -*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix++ + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(2) + } else { + pl = 0 + } + } + } + _16: + ; + a = _fmt_u(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + _33: + ; + if xp != 0 && p < 0 { + goto overflow + } + if xp != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) && !(p != 0) { + a = z + goto _30 + } + if p > int32(z)-int32(a)+BoolInt32(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) { + v34 = p + } else { + v34 = int32(z) - int32(a) + BoolInt32(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) + } + p = v34 + goto _30 + goto narrow_c + narrow_c: + ; + _17: + ; + v36 = Int32FromInt32(1) + p = v36 + v35 = z - uintptr(v36) + a = v35 + *(*int8)(unsafe.Pointer(v35)) = int8(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _19: + ; + if !(int32(1) != 0) { + goto _37 + } + a = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + goto _38 + _37: + ; + _18: + ; + if *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) != 0 { + v39 = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + } else { + v39 = __ccgo_ts + 1460 + } + a = v39 + _38: + ; + if p < 0 { + v40 = int32(INT_MAX) + } else { + v40 = p + } + z = a + uintptr(Xstrnlen(tls, a, uint32(v40))) + if p < 0 && *(*int8)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32(z) - int32(a) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _20: + ; + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) { + goto narrow_c + } + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[0] = int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[int32(1)] = 0 + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = bp + 40 + p = -int32(1) + _21: + ; + ws = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + v42 = Int32FromInt32(0) + l = v42 + i = uint32(v42) + for { + if v45 = i < uint32(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v45 { + v44 = ws + ws += 4 + v43 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v44))) + l = v43 + } + if !(v45 && v43 >= 0 && uint32(l) <= uint32(p)-i) { + break + } + goto _41 + _41: + ; + i += uint32(l) + } + if l < 0 { + return -int32(1) + } + if i > uint32(INT_MAX) { + goto overflow + } + p = int32(i) + _pad3(tls, f, int8(' '), w, p, int32(fl)) + ws = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + i = uint32(0) + for { + if v49 = i < 0+uint32(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v49 { + v48 = ws + ws += 4 + v47 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v48))) + l = v47 + } + if !(v49 && i+uint32(v47) <= uint32(p)) { + break + } + _out(tls, f, bp+48, uint32(l)) + goto _46 + _46: + ; + i += uint32(l) + } + _pad3(tls, f, int8(' '), w, p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > p { + v50 = w + } else { + v50 = p + } + l = v50 + goto _1 + _29: + ; + _28: + ; + _27: + ; + _26: + ; + _25: + ; + _24: + ; + _23: + ; + _22: + ; + if xp != 0 && p < 0 { + goto overflow + } + l = _fmt_fp(tls, f, *(*float64)(unsafe.Pointer(bp + 8)), w, p, int32(fl), t) + if l < 0 { + goto overflow + } + goto _1 + _30: + ; + if p < int32(z)-int32(a) { + p = int32(z) - int32(a) + } + if p > int32(INT_MAX)-pl { + goto overflow + } + if w < pl+p { + w = pl + p + } + if w > int32(INT_MAX)-cnt { + goto overflow + } + _pad3(tls, f, int8(' '), w, pl+p, int32(fl)) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, int8('0'), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _pad3(tls, f, int8('0'), p, int32(z)-int32(a), 0) + _out(tls, f, a, uint32(int32(z)-int32(a))) + _pad3(tls, f, int8(' '), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = uint32(1) + for { + if !(i <= uint32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _51 + _51: + ; + i++ + } + for { + if !(i <= uint32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _52 + _52: + ; + i++ + } + if i <= uint32(NL_ARGMAX) { + goto inval + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var __need_unlock, olderr, ret, v1 int32 + var saved_buf, v2, v3, v4, v5 uintptr + var _ /* ap2 at bp+0 */ Tva_list + var _ /* internal_buf at bp+124 */ [80]uint8 + var _ /* nl_arg at bp+44 */ [10]Targ + var _ /* nl_type at bp+4 */ [10]int32 + _, _, _, _, _, _, _, _, _ = __need_unlock, olderr, ret, saved_buf, v1, v2, v3, v4, v5 + *(*[10]int32)(unsafe.Pointer(bp + 4)) = [10]int32{} + saved_buf = uintptr(0) + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _printf_core(tls, uintptr(0), fmt, bp, bp+44, bp+4) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) { + saved_buf = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fbuf = bp + 124 + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(80) + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v3 + v2 = v3 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + ret = -int32(1) + } else { + ret = _printf_core(tls, f, fmt, bp, bp+44, bp+4) + } + if saved_buf != 0 { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + ret = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fbuf = saved_buf + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(0) + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + } + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +const SIZE_L = 2 +const SIZE_def = 0 +const SIZE_h = -1 +const SIZE_hh = -2 +const SIZE_l = 1 +const SIZE_ll = 3 + +func _store_int(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*int8)(unsafe.Pointer(dest)) = int8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var __need_unlock, alloc, base, c, invert, matches, size, t, width, v1, v12, v13, v16, v17, v20, v21, v23, v29, v3, v32, v33, v36, v4, v6, v64, v65, v69, v7, v70, v75, v76, v80, v81, v9 int32 + var dest, p, s, tmp, tmp1, wcs, v10, v11, v18, v19, v24, v25, v28, v30, v31, v37, v38, v59, v62, v66, v67, v71, v72, v74, v77, v78, v82, v83 uintptr + var i, k, v68, v73, v79 Tsize_t + var pos Toff_t + var x uint64 + var y float64 + var v63 uint32 + var _ /* scanset at bp+16 */ [257]uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+276 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, base, c, dest, i, invert, k, matches, p, pos, s, size, t, tmp, tmp1, wcs, width, x, y, v1, v10, v11, v12, v13, v16, v17, v18, v19, v20, v21, v23, v24, v25, v28, v29, v3, v30, v31, v32, v33, v36, v37, v38, v4, v59, v6, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v9 + alloc = 0 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + goto input_fail + } + p = fmt + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + v3 = int32(*(*uint8)(unsafe.Pointer(p))) + v4 = BoolInt32(v3 == int32(' ') || uint32(v3)-uint32('\t') < uint32(5)) + goto _5 + _5: + if v4 != 0 { + for { + v6 = int32(*(*uint8)(unsafe.Pointer(p + 1))) + v7 = BoolInt32(v6 == int32(' ') || uint32(v6)-uint32('\t') < uint32(5)) + goto _8 + _8: + if !(v7 != 0) { + break + } + p++ + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 4 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + v12 = v9 + v13 = BoolInt32(v12 == int32(' ') || uint32(v12)-uint32('\t') < uint32(5)) + goto _14 + _14: + if !(v13 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + if int32(*(*uint8)(unsafe.Pointer(p))) != int32('%') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('%') { + X__shlim(tls, f, int64(Int32FromInt32(0))) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('%') { + p++ + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v19 = f + 4 + v18 = *(*uintptr)(unsafe.Pointer(v19)) + *(*uintptr)(unsafe.Pointer(v19))++ + v17 = int32(*(*uint8)(unsafe.Pointer(v18))) + } else { + v17 = X__shgetc(tls, f) + } + v16 = v17 + c = v16 + v20 = v16 + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + if !(v21 != 0) { + break + } + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v25 = f + 4 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = int32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = X__shgetc(tls, f) + } + c = v23 + } + if c != int32(*(*uint8)(unsafe.Pointer(p))) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('*') { + dest = uintptr(0) + p++ + } else { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('$') { + dest = _arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-int32('0'))) + p += uintptr(2) + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + int32(*(*uint8)(unsafe.Pointer(p))) - int32('0') + goto _27 + _27: + ; + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p++ + } else { + alloc = 0 + } + size = SIZE_def + v28 = p + p++ + switch int32(*(*uint8)(unsafe.Pointer(v28))) { + case int32('h'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('h') { + p++ + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('l') { + p++ + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p-- + default: + goto fmt_fail + } + t = int32(*(*uint8)(unsafe.Pointer(p))) + /* C or S */ + if t&int32(0x2f) == int32(3) { + t |= int32(32) + size = int32(SIZE_l) + } + switch t { + case int32('c'): + if width < int32(1) { + width = int32(1) + } + fallthrough + case int32('['): + case int32('n'): + _store_int(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + default: + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v31 = f + 4 + v30 = *(*uintptr)(unsafe.Pointer(v31)) + *(*uintptr)(unsafe.Pointer(v31))++ + v29 = int32(*(*uint8)(unsafe.Pointer(v30))) + } else { + v29 = X__shgetc(tls, f) + } + v32 = v29 + v33 = BoolInt32(v32 == int32(' ') || uint32(v32)-uint32('\t') < uint32(5)) + goto _34 + _34: + if !(v33 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + } + X__shlim(tls, f, int64(width)) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v38 = f + 4 + v37 = *(*uintptr)(unsafe.Pointer(v38)) + *(*uintptr)(unsafe.Pointer(v38))++ + v36 = int32(*(*uint8)(unsafe.Pointer(v37))) + } else { + v36 = X__shgetc(tls, f) + } + if v36 < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + switch t { + case int32('['): + goto _40 + case int32('c'): + goto _41 + case int32('s'): + goto _42 + case int32('x'): + goto _43 + case int32('X'): + goto _44 + case int32('p'): + goto _45 + case int32('o'): + goto _46 + case int32('u'): + goto _47 + case int32('d'): + goto _48 + case int32('i'): + goto _49 + case int32('G'): + goto _50 + case int32('g'): + goto _51 + case int32('F'): + goto _52 + case int32('f'): + goto _53 + case int32('E'): + goto _54 + case int32('e'): + goto _55 + case int32('A'): + goto _56 + case int32('a'): + goto _57 + } + goto _58 + _42: + ; + _41: + ; + _40: + ; + if t == int32('c') || t == int32('s') { + Xmemset(tls, bp+16, -int32(1), uint32(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if t == int32('s') { + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\t')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\n')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\v')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\f')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\r')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(' ')] = uint8(0) + } + } else { + p++ + v59 = p + if int32(*(*uint8)(unsafe.Pointer(v59))) == int32('^') { + p++ + invert = Int32FromInt32(1) + } else { + invert = 0 + } + Xmemset(tls, bp+16, invert, uint32(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('-')] = uint8(Int32FromInt32(1) - invert) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(']')] = uint8(Int32FromInt32(1) - invert) + } + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + v62 = p + p++ + c = int32(*(*uint8)(unsafe.Pointer(v62 + uintptr(-Int32FromInt32(1))))) + for { + if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { + break + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+c] = uint8(int32(1) - invert) + goto _61 + _61: + ; + c++ + } + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+int32(*(*uint8)(unsafe.Pointer(p)))] = uint8(int32(1) - invert) + goto _60 + _60: + ; + p++ + } + } + wcs = uintptr(0) + s = uintptr(0) + i = uint32(0) + if t == int32('c') { + v63 = uint32(width) + uint32(1) + } else { + v63 = uint32(31) + } + k = v63 + if size == int32(SIZE_l) { + if alloc != 0 { + wcs = Xmalloc(tls, k*uint32(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + wcs = dest + } + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v67 = f + 4 + v66 = *(*uintptr)(unsafe.Pointer(v67)) + *(*uintptr)(unsafe.Pointer(v67))++ + v65 = int32(*(*uint8)(unsafe.Pointer(v66))) + } else { + v65 = X__shgetc(tls, f) + } + v64 = v65 + c = v64 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v64+int32(1)] != 0) { + break + } + *(*int8)(unsafe.Pointer(bp)) = int8(c) + switch Xmbrtowc(tls, bp+276, bp, uint32(1), bp+8) { + case uint32(-Int32FromInt32(1)): + goto input_fail + case uint32(-Int32FromInt32(2)): + continue + } + if wcs != 0 { + v68 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v68)*4)) = *(*Twchar_t)(unsafe.Pointer(bp + 276)) + } + if alloc != 0 && i == k { + k += k + uint32(1) + tmp = Xrealloc(tls, wcs, k*uint32(4)) + if !(tmp != 0) { + goto alloc_fail + } + wcs = tmp + } + } + if !(Xmbsinit(tls, bp+8) != 0) { + goto input_fail + } + } else { + if alloc != 0 { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v72 = f + 4 + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + v70 = int32(*(*uint8)(unsafe.Pointer(v71))) + } else { + v70 = X__shgetc(tls, f) + } + v69 = v70 + c = v69 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v69+int32(1)] != 0) { + break + } + v73 = i + i++ + *(*int8)(unsafe.Pointer(s + uintptr(v73))) = int8(c) + if i == k { + k += k + uint32(1) + tmp1 = Xrealloc(tls, s, k) + if !(tmp1 != 0) { + goto alloc_fail + } + s = tmp1 + } + } + } else { + v74 = dest + s = v74 + if v74 != 0 { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v78 = f + 4 + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + v76 = int32(*(*uint8)(unsafe.Pointer(v77))) + } else { + v76 = X__shgetc(tls, f) + } + v75 = v76 + c = v75 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v75+int32(1)] != 0) { + break + } + v79 = i + i++ + *(*int8)(unsafe.Pointer(s + uintptr(v79))) = int8(c) + } + } else { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v83 = f + 4 + v82 = *(*uintptr)(unsafe.Pointer(v83)) + *(*uintptr)(unsafe.Pointer(v83))++ + v81 = int32(*(*uint8)(unsafe.Pointer(v82))) + } else { + v81 = X__shgetc(tls, f) + } + v80 = v81 + c = v80 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v80+int32(1)] != 0) { + break + } + } + } + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('c') && (*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != int64(width) { + goto match_fail + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*int8)(unsafe.Pointer(s + uintptr(i))) = 0 + } + } + goto _58 + _45: + ; + _44: + ; + _43: + ; + base = int32(16) + goto int_common + _46: + ; + base = int32(8) + goto int_common + _48: + ; + _47: + ; + base = int32(10) + goto int_common + _49: + ; + base = 0 + goto int_common + int_common: + ; + x = X__intscan(tls, f, uint32(base), 0, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('p') && dest != 0 { + *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uint32(x)) + } else { + _store_int(tls, dest, size, x) + } + goto _58 + _57: + ; + _56: + ; + _55: + ; + _54: + ; + _53: + ; + _52: + ; + _51: + ; + _50: + ; + y = X__floatscan(tls, f, size, 0) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if dest != 0 { + switch size { + case SIZE_def: + *(*float32)(unsafe.Pointer(dest)) = float32(y) + case int32(SIZE_l): + *(*float64)(unsafe.Pointer(dest)) = y + case int32(SIZE_L): + *(*float64)(unsafe.Pointer(dest)) = y + break + } + } + goto _58 + _58: + ; + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p++ + } + if !(0 != 0) { + goto _85 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_85: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +func X__isoc99_vfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, f, fmt, ap) +} + +var _states1 = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint32(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out1(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + var v1 Tsize_t + var v2 uintptr + _, _ = v1, v2 + for { + v1 = l + l-- + if !(v1 != 0 && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) { + break + } + v2 = s + s += 4 + Xfputwc(tls, *(*Twchar_t)(unsafe.Pointer(v2)), f) + } +} + +func _pad4(tls *TLS, f uintptr, n int32, fl int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 || !(n != 0) || (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return + } + Xfprintf(tls, f, __ccgo_ts+1467, VaList(bp+8, n, __ccgo_ts)) +} + +func _getint1(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s)) += 4 + } + return i +} + +var _sizeprefix = [24]int8{ + 0: int8('L'), + 3: int8('j'), + 4: int8('L'), + 5: int8('L'), + 6: int8('L'), + 8: int8('j'), + 14: int8('j'), + 15: int8('j'), + 20: int8('j'), + 23: int8('j'), +} + +func _wprintf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(112) + defer tls.Free(112) + var a, bs, z, v8 uintptr + var argpos, cnt, i, l, p, t, w, xp, v10, v12, v13, v14, v16, v5, v6, v7 int32 + var fl, l10n, ps, st uint32 + var v15 bool + var v9 uint64 + var _ /* arg at bp+8 */ Targ + var _ /* charfmt at bp+16 */ [16]int8 + var _ /* s at bp+4 */ uintptr + var _ /* wc at bp+32 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, bs, cnt, fl, i, l, l10n, p, ps, st, t, w, xp, z, v10, v12, v13, v14, v15, v16, v5, v6, v7, v8, v9 + *(*uintptr)(unsafe.Pointer(bp + 4)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp + 4)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + z = *(*uintptr)(unsafe.Pointer(bp + 4)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == int32('%') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) == int32('%')) { + break + } + goto _3 + _3: + ; + z += 4 + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(2) * 4 + } + if (int32(z)-int32(a))/4 > int32(INT_MAX)-cnt { + goto overflow + } + l = (int32(z) - int32(a)) / 4 + if f != 0 { + _out1(tls, f, a, uint32(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4)) == int32('$') { + l10n = uint32(1) + argpos = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) - int32('0') + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(3) * 4 + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + /* Read field width */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4)) == int32('$') { + l10n = uint32(1) + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-int32('0'))*4)) = int32(_INT) + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(3) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint1(tls, bp+4) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == int32('.') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 3*4)) == int32('$') { + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4))-int32('0'))*4)) = int32(_INT) + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(4) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(2) * 4 + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + p = _getint1(tls, bp+4) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp + 4)) + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states1)) + uintptr(st)*58 + uintptr(*(*Twchar_t)(unsafe.Pointer(v8))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } else { + if f != 0 { + _pop_arg1(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + t = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(-Int32FromInt32(1))*4)) + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + switch t { + case int32('n'): + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LPRE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint32(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint64(cnt) + break + } + goto _1 + case int32('c'): + fallthrough + case int32('C'): + if w < int32(1) { + w = int32(1) + } + _pad4(tls, f, w-int32(1), int32(fl)) + if t == int32('C') { + v9 = *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + v9 = uint64(Xbtowc(tls, int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))))) + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(v9) + _out1(tls, f, bp, uint32(1)) + _pad4(tls, f, w-int32(1), int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('S'): + a = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + if p < 0 { + v10 = int32(INT_MAX) + } else { + v10 = p + } + z = a + uintptr(Xwcsnlen(tls, a, uint32(v10)))*4 + if p < 0 && *(*Twchar_t)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = (int32(z) - int32(a)) / 4 + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + _out1(tls, f, a, uint32(p)) + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('m'): + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + fallthrough + case int32('s'): + if !(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) != 0) { + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = __ccgo_ts + 1460 + } + bs = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + v12 = Int32FromInt32(0) + l = v12 + i = v12 + for { + if p < 0 { + v13 = int32(INT_MAX) + } else { + v13 = p + } + if v15 = l < v13; v15 { + v14 = Xmbtowc(tls, bp+32, bs, uint32(MB_LEN_MAX)) + i = v14 + } + if !(v15 && v14 > 0) { + break + } + goto _11 + _11: + ; + bs += uintptr(i) + l++ + } + if i < 0 { + return -int32(1) + } + if p < 0 && *(*int8)(unsafe.Pointer(bs)) != 0 { + goto overflow + } + p = l + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + bs = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + for { + v16 = l + l-- + if !(v16 != 0) { + break + } + i = Xmbtowc(tls, bp+32, bs, uint32(MB_LEN_MAX)) + bs += uintptr(i) + _out1(tls, f, bp+32, uint32(1)) + } + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + } + if xp != 0 && p < 0 { + goto overflow + } + Xsnprintf(tls, bp+16, uint32(16), __ccgo_ts+1471, VaList(bp+48, __ccgo_ts+1491+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1493+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1495+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0)), __ccgo_ts+587+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1497+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0)), int32(_sizeprefix[t|int32(32)-int32('a')]), t)) + switch t | Int32FromInt32(32) { + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + l = Xfprintf(tls, f, bp+16, VaList(bp+48, w, p, *(*float64)(unsafe.Pointer(bp + 8)))) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('p'): + l = Xfprintf(tls, f, bp+16, VaList(bp+48, w, p, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)))) + break + } + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = int32(1) + for { + if !(i <= int32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg1(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _17 + _17: + ; + i++ + } + for { + if !(i <= int32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _18 + _18: + ; + i++ + } + if i <= int32(NL_ARGMAX) { + return -int32(1) + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfwprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var __need_unlock, olderr, ret, v1 int32 + var _ /* ap2 at bp+0 */ Tva_list + var _ /* nl_arg at bp+44 */ [10]Targ + var _ /* nl_type at bp+4 */ [10]int32 + _, _, _, _ = __need_unlock, olderr, ret, v1 + *(*[10]int32)(unsafe.Pointer(bp + 4)) = [10]int32{} + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _wprintf_core(tls, uintptr(0), fmt, bp, bp+44, bp+4) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + ret = _wprintf_core(tls, f, fmt, bp, bp+44, bp+4) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +func _store_int1(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*int8)(unsafe.Pointer(dest)) = int8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n1(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func _in_set(tls *TLS, set uintptr, c int32) (r int32) { + var j int32 + var p, v3 uintptr + _, _, _ = j, p, v3 + p = set + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') { + if c == int32('-') { + return int32(1) + } + p += 4 + } else { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + if c == int32(']') { + return int32(1) + } + p += 4 + } + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0 && *(*Twchar_t)(unsafe.Pointer(p)) != int32(']')) { + break + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != int32(']') { + v3 = p + p += 4 + j = *(*Twchar_t)(unsafe.Pointer(v3 + uintptr(-Int32FromInt32(1))*4)) + for { + if !(j < *(*Twchar_t)(unsafe.Pointer(p))) { + break + } + if c == j { + return int32(1) + } + goto _2 + _2: + ; + j++ + } + } + if c == *(*Twchar_t)(unsafe.Pointer(p)) { + return int32(1) + } + goto _1 + _1: + ; + p += 4 + } + return 0 +} + +func Xvfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var __need_unlock, alloc, c, gotmatch, invert, l, matches, size, t, width, v1, v10, v22, v3, v36 int32 + var dest, p, s, set, tmp1, tmp2, wcs, v12, v13, v15, v16, v18, v19, v21, v24, v25, v27, v28, v30, v31, v32, v33, v34, v38, v39, v41, v43, v44, v45, v5, v6, v8, v9 uintptr + var i, k, v40 Tsize_t + var pos Toff_t + var v11, v14, v23, v26, v35, v37, v4 uint32 + var _ /* cnt at bp+0 */ Toff_t + var _ /* tmp at bp+8 */ [22]int8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, c, dest, gotmatch, i, invert, k, l, matches, p, pos, s, set, size, t, tmp1, tmp2, wcs, width, v1, v10, v11, v12, v13, v14, v15, v16, v18, v19, v21, v22, v23, v24, v25, v26, v27, v28, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v4, v40, v41, v43, v44, v45, v5, v6, v8, v9 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + p = fmt + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + if Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p)))) != 0 { + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p + 1*4)))) != 0 { + p += 4 + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = uint32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = Xgetwc(tls, f) + } + v3 = int32(v4) + c = v3 + if !(Xiswspace(tls, uint32(v3)) != 0) { + break + } + pos++ + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v9 = f + 4 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + _ = *(*uint8)(unsafe.Pointer(v8)) + } else { + Xungetwc(tls, uint32(c), f) + } + goto _2 + } + if *(*Twchar_t)(unsafe.Pointer(p)) != int32('%') || *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('%') { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('%') { + p += 4 + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v13 = f + 4 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = uint32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = Xgetwc(tls, f) + } + v10 = int32(v11) + c = v10 + if !(Xiswspace(tls, uint32(v10)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = uint32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = Xgetwc(tls, f) + } + c = int32(v14) + } + if c != *(*Twchar_t)(unsafe.Pointer(p)) { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v19 = f + 4 + *(*uintptr)(unsafe.Pointer(v19))-- + v18 = *(*uintptr)(unsafe.Pointer(v19)) + _ = *(*uint8)(unsafe.Pointer(v18)) + } else { + Xungetwc(tls, uint32(c), f) + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos++ + goto _2 + } + p += 4 + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('*') { + dest = uintptr(0) + p += 4 + } else { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('$') { + dest = _arg_n1(tls, ap, uint32(*(*Twchar_t)(unsafe.Pointer(p))-int32('0'))) + p += uintptr(2) * 4 + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + *(*Twchar_t)(unsafe.Pointer(p)) - int32('0') + goto _20 + _20: + ; + p += 4 + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p += 4 + } else { + alloc = 0 + } + size = SIZE_def + v21 = p + p += 4 + switch *(*Twchar_t)(unsafe.Pointer(v21)) { + case int32('h'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('h') { + p += 4 + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('l') { + p += 4 + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p -= 4 + default: + goto fmt_fail + } + t = *(*Twchar_t)(unsafe.Pointer(p)) + /* Transform S,C -> ls,lc */ + if t&int32(0x2f) == int32(3) { + size = int32(SIZE_l) + t |= int32(32) + } + if t != int32('n') { + if t != int32('[') && t|int32(32) != int32('c') { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v25 = f + 4 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = uint32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = Xgetwc(tls, f) + } + v22 = int32(v23) + c = v22 + if !(Xiswspace(tls, uint32(v22)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v28 = f + 4 + v27 = *(*uintptr)(unsafe.Pointer(v28)) + *(*uintptr)(unsafe.Pointer(v28))++ + v26 = uint32(*(*uint8)(unsafe.Pointer(v27))) + } else { + v26 = Xgetwc(tls, f) + } + c = int32(v26) + } + if c < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v31 = f + 4 + *(*uintptr)(unsafe.Pointer(v31))-- + v30 = *(*uintptr)(unsafe.Pointer(v31)) + _ = *(*uint8)(unsafe.Pointer(v30)) + } else { + Xungetwc(tls, uint32(c), f) + } + } + switch t { + case int32('n'): + _store_int1(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + if t == int32('c') { + if width < int32(1) { + width = int32(1) + } + invert = int32(1) + set = __ccgo_ts + 1499 + } else { + if t == int32('s') { + invert = int32(1) + set = uintptr(unsafe.Pointer(&_spaces1)) + } else { + p += 4 + v32 = p + if *(*Twchar_t)(unsafe.Pointer(v32)) == int32('^') { + p += 4 + invert = Int32FromInt32(1) + } else { + invert = 0 + } + set = p + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + p += 4 + } + for *(*Twchar_t)(unsafe.Pointer(p)) != int32(']') { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + p += 4 + } + } + } + if size == SIZE_def { + v33 = dest + } else { + v33 = uintptr(0) + } + s = v33 + if size == int32(SIZE_l) { + v34 = dest + } else { + v34 = uintptr(0) + } + wcs = v34 + gotmatch = 0 + if width < int32(1) { + width = -int32(1) + } + i = uint32(0) + if alloc != 0 { + if t == int32('c') { + v35 = uint32(width) + uint32(1) + } else { + v35 = uint32(31) + } + k = v35 + if size == int32(SIZE_l) { + wcs = Xmalloc(tls, k*uint32(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + } + } + for width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v39 = f + 4 + v38 = *(*uintptr)(unsafe.Pointer(v39)) + *(*uintptr)(unsafe.Pointer(v39))++ + v37 = uint32(*(*uint8)(unsafe.Pointer(v38))) + } else { + v37 = Xgetwc(tls, f) + } + v36 = int32(v37) + c = v36 + if v36 < 0 { + break + } + if _in_set(tls, set, c) == invert { + break + } + if wcs != 0 { + v40 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v40)*4)) = c + if alloc != 0 && i == k { + k += k + uint32(1) + tmp1 = Xrealloc(tls, wcs, k*uint32(4)) + if !(tmp1 != 0) { + goto alloc_fail + } + wcs = tmp1 + } + } else { + if size != int32(SIZE_l) { + if s != 0 { + v41 = s + uintptr(i) + } else { + v41 = bp + 8 + } + l = Xwctomb(tls, v41, c) + if l < 0 { + goto input_fail + } + i += uint32(l) + if alloc != 0 && i > k-uint32(4) { + k += k + uint32(1) + tmp2 = Xrealloc(tls, s, k) + if !(tmp2 != 0) { + goto alloc_fail + } + s = tmp2 + } + } + } + pos++ + width -= BoolInt32(width > 0) + gotmatch = int32(1) + } + if width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v44 = f + 4 + *(*uintptr)(unsafe.Pointer(v44))-- + v43 = *(*uintptr)(unsafe.Pointer(v44)) + _ = *(*uint8)(unsafe.Pointer(v43)) + } else { + Xungetwc(tls, uint32(c), f) + } + if t == int32('c') || !(gotmatch != 0) { + goto match_fail + } + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*int8)(unsafe.Pointer(s + uintptr(i))) = 0 + } + } + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('p'): + if width < int32(1) { + width = 0 + } + Xsnprintf(tls, bp+8, uint32(22), __ccgo_ts+1503, VaList(bp+40, int32(1)+BoolInt32(!(dest != 0)), __ccgo_ts+1521, width, uintptr(unsafe.Pointer(&_size_pfx))+uintptr(size+int32(2))*3, t)) + *(*Toff_t)(unsafe.Pointer(bp)) = 0 + if dest != 0 { + v45 = dest + } else { + v45 = bp + } + if Xfscanf(tls, f, bp+8, VaList(bp+40, v45, bp)) == -int32(1) { + goto input_fail + } else { + if !(*(*Toff_t)(unsafe.Pointer(bp)) != 0) { + goto match_fail + } + } + pos += *(*Toff_t)(unsafe.Pointer(bp)) + default: + goto fmt_fail + } + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p += 4 + } + if !(0 != 0) { + goto _46 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_46: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +var _size_pfx = [6][3]int8{ + 0: {'h', 'h'}, + 1: {'h'}, + 2: {}, + 3: {'l'}, + 4: {'L'}, + 5: {'l', 'l'}, +} + +var _spaces1 = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__isoc99_vfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, f, fmt, ap) +} + +func Xvprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvscanf(tls, fmt, ap) +} + +type Tcookie3 = struct { + Fs uintptr + Fn Tsize_t +} + +func _sn_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3 uintptr + var k Tsize_t + var v1, v2 uint32 + _, _, _, _, _ = c, k, v1, v2, v3 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tcookie3)(unsafe.Pointer(c)).Fn < uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos)-int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) { + v1 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v1 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + k = v1 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, (*TFILE)(unsafe.Pointer(f)).Fwbase, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 4)) -= k + } + if (*Tcookie3)(unsafe.Pointer(c)).Fn < l { + v2 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v2 = l + } + k = v2 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, s, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 4)) -= k + } + *(*int8)(unsafe.Pointer((*Tcookie3)(unsafe.Pointer(c)).Fs)) = 0 + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + /* pretend to succeed, even if we discarded extra data */ + return l +} + +func Xvsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var v1 uintptr + var v2 uint32 + var _ /* buf at bp+0 */ [1]uint8 + var _ /* c at bp+8 */ Tcookie3 + var _ /* dummy at bp+1 */ [1]int8 + var _ /* f at bp+16 */ TFILE + _, _ = v1, v2 + if n != 0 { + v1 = s + } else { + v1 = bp + 1 + } + if n != 0 { + v2 = n - uint32(1) + } else { + v2 = uint32(0) + } + *(*Tcookie3)(unsafe.Pointer(bp + 8)) = Tcookie3{ + Fs: v1, + Fn: v2, + } + *(*TFILE)(unsafe.Pointer(bp + 16)) = TFILE{ + Fwrite: __ccgo_fp(_sn_write), + Fbuf: bp, + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 8, + } + *(*int8)(unsafe.Pointer((*(*Tcookie3)(unsafe.Pointer(bp + 8))).Fs)) = 0 + return Xvfprintf(tls, bp+16, fmt, ap) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xvsprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsnprintf(tls, s, uint32(INT_MAX), fmt, ap) +} + +func _string_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var end, src uintptr + var k Tsize_t + _, _, _ = end, k, src + src = (*TFILE)(unsafe.Pointer(f)).Fcookie + k = len1 + uint32(256) + end = Xmemchr(tls, src, 0, k) + if end != 0 { + k = uint32(int32(end) - int32(src)) + } + if k < len1 { + len1 = k + } + Xmemcpy(tls, buf, src, len1) + (*TFILE)(unsafe.Pointer(f)).Frpos = src + uintptr(len1) + (*TFILE)(unsafe.Pointer(f)).Frend = src + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = src + uintptr(k) + return len1 +} + +func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fread: __ccgo_fp(_string_read), + Fbuf: s, + Flock: -int32(1), + Fcookie: s, + } + return Xvfscanf(tls, bp, fmt, ap) +} + +func X__isoc99_vsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsscanf(tls, s, fmt, ap) +} + +type Tcookie4 = struct { + Fws uintptr + Fl Tsize_t +} + +func _sw_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3, v4, v5 uintptr + var i, v1 int32 + var l0 Tsize_t + var v2 bool + _, _, _, _, _, _, _, _ = c, i, l0, v1, v2, v3, v4, v5 + l0 = l + i = 0 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if s != (*TFILE)(unsafe.Pointer(f)).Fwbase && _sw_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos)-int32((*TFILE)(unsafe.Pointer(f)).Fwbase))) == uint32(-Int32FromInt32(1)) { + return uint32(-Int32FromInt32(1)) + } + for { + if v2 = (*Tcookie4)(unsafe.Pointer(c)).Fl != 0 && l != 0; v2 { + v1 = Xmbtowc(tls, (*Tcookie4)(unsafe.Pointer(c)).Fws, s, l) + i = v1 + } + if !(v2 && v1 >= 0) { + break + } + if !(i != 0) { + i = int32(1) + } + s += uintptr(i) + l -= uint32(i) + (*Tcookie4)(unsafe.Pointer(c)).Fl-- + (*Tcookie4)(unsafe.Pointer(c)).Fws += 4 + } + *(*Twchar_t)(unsafe.Pointer((*Tcookie4)(unsafe.Pointer(c)).Fws)) = 0 + if i < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint32(i) + } + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v5 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v5 + return l0 +} + +func Xvswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var r, v1 int32 + var _ /* buf at bp+0 */ [256]uint8 + var _ /* c at bp+256 */ Tcookie4 + var _ /* f at bp+264 */ TFILE + _, _ = r, v1 + *(*Tcookie4)(unsafe.Pointer(bp + 256)) = Tcookie4{ + Fws: s, + Fl: n - uint32(1), + } + *(*TFILE)(unsafe.Pointer(bp + 264)) = TFILE{ + Fwrite: __ccgo_fp(_sw_write), + Fbuf: bp, + Fbuf_size: uint32(256), + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 256, + } + if !(n != 0) { + return -int32(1) + } + r = Xvfwprintf(tls, bp+264, fmt, ap) + _sw_write(tls, bp+264, uintptr(0), uint32(0)) + if uint32(r) >= n { + v1 = -int32(1) + } else { + v1 = r + } + return v1 +} + +func _wstring_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k Tsize_t + var v1, v2, v3 uintptr + var _ /* src at bp+0 */ uintptr + _, _, _, _ = k, v1, v2, v3 + *(*uintptr)(unsafe.Pointer(bp)) = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*uintptr)(unsafe.Pointer(bp)) != 0) { + return uint32(0) + } + k = Xwcsrtombs(tls, (*TFILE)(unsafe.Pointer(f)).Fbuf, bp, (*TFILE)(unsafe.Pointer(f)).Fbuf_size, uintptr(0)) + if k == uint32(-Int32FromInt32(1)) { + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + return uint32(0) + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = *(*uintptr)(unsafe.Pointer(bp)) + if !(len1 != 0) || !(k != 0) { + return uint32(0) + } + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v2)) + return uint32(1) +} + +func Xvswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* buf at bp+0 */ [256]uint8 + var _ /* f at bp+256 */ TFILE + *(*TFILE)(unsafe.Pointer(bp + 256)) = TFILE{ + Fread: __ccgo_fp(_wstring_read), + Fbuf: bp, + Fbuf_size: uint32(256), + Flock: -int32(1), + Fcookie: s, + } + return Xvfwscanf(tls, bp+256, fmt, ap) +} + +func X__isoc99_vswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvswscanf(tls, s, fmt, ap) +} + +func Xvwprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvwscanf(tls, fmt, ap) +} + +func Xwprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwprintf(tls, fmt, ap) + _ = ap + return ret +} + +func Xwscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_wscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwscanf(tls, fmt, va) +} + +func Xabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xatof(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, uintptr(0)) +} + +func Xatoi(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*int8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*int8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on INT_MIN */ + for BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - (int32(*(*int8)(unsafe.Pointer(v4))) - int32('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatol(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*int8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*int8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LONG_MIN */ + for BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - int32(int32(*(*int8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatoll(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*int8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*int8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LLONG_MIN */ + for BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*int8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xbsearch(tls *TLS, key uintptr, base uintptr, nel Tsize_t, width Tsize_t, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var sign int32 + var try uintptr + _, _ = sign, try + for nel > uint32(0) { + try = base + uintptr(width*(nel/uint32(2))) + sign = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, try) + if sign < 0 { + nel /= uint32(2) + } else { + if sign > 0 { + base = try + uintptr(width) + nel -= nel/uint32(2) + uint32(1) + } else { + return try + } + } + } + return UintptrFromInt32(0) +} + +func Xdiv(tls *TLS, num int32, den int32) (r Tdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xecvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, j, v1, v3 int32 + var _ /* tmp at bp+0 */ [32]int8 + _, _, _, _ = i, j, v1, v3 + if uint32(n)-uint32(1) > uint32(15) { + n = int32(15) + } + Xsprintf(tls, bp, __ccgo_ts+1524, VaList(bp+40, n-int32(1), x)) + v1 = BoolInt32(int32((*(*[32]int8)(unsafe.Pointer(bp)))[0]) == Int32FromUint8('-')) + *(*int32)(unsafe.Pointer(sign)) = v1 + i = v1 + j = 0 + for { + if !(int32((*(*[32]int8)(unsafe.Pointer(bp)))[i]) != int32('e')) { + break + } + _buf8[j] = (*(*[32]int8)(unsafe.Pointer(bp)))[i] + goto _2 + _2: + ; + v3 = i + i++ + j += BoolInt32(int32((*(*[32]int8)(unsafe.Pointer(bp)))[v3]) != int32('.')) + } + _buf8[j] = 0 + *(*int32)(unsafe.Pointer(dp)) = Xatoi(tls, bp+uintptr(i)+uintptr(1)) + int32(1) + return uintptr(unsafe.Pointer(&_buf8)) +} + +var _buf8 [16]int8 + +func Xfcvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1536) + defer tls.Free(1536) + var i, lz int32 + var _ /* tmp at bp+0 */ [1500]int8 + _, _ = i, lz + if uint32(n) > uint32(1400) { + n = int32(1400) + } + Xsprintf(tls, bp, __ccgo_ts+1529, VaList(bp+1512, n, x)) + i = BoolInt32(int32((*(*[1500]int8)(unsafe.Pointer(bp)))[0]) == int32('-')) + if int32((*(*[1500]int8)(unsafe.Pointer(bp)))[i]) == int32('0') { + lz = int32(Xstrspn(tls, bp+uintptr(i)+uintptr(2), __ccgo_ts+1497)) + } else { + lz = -int32(Xstrcspn(tls, bp+uintptr(i), __ccgo_ts+483)) + } + if n <= lz { + *(*int32)(unsafe.Pointer(sign)) = i + *(*int32)(unsafe.Pointer(dp)) = int32(1) + if uint32(n) > uint32(14) { + n = int32(14) + } + return __ccgo_ts + 1534 + UintptrFromInt32(14) - uintptr(n) + } + return Xecvt(tls, x, n-lz, dp, sign) +} + +func Xgcvt(tls *TLS, x float64, n int32, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v b=%v, (%v:)", tls, x, n, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + Xsprintf(tls, b, __ccgo_ts+1550, VaList(bp+8, n, x)) + return b +} + +func Ximaxabs(tls *TLS, a Tintmax_t) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Ximaxdiv(tls *TLS, num Tintmax_t, den Tintmax_t) (r Timaxdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Timaxdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xlabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xldiv(tls *TLS, num int32, den int32) (r Tldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xllabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xlldiv(tls *TLS, num int64, den int64) (r Tlldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tlldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +type Tcmpfun = uintptr + +func _pntz(tls *TLS, p uintptr) (r1 int32) { + var r, v2, v4, v6 int32 + var v1, v5 uint32 + var v8 bool + _, _, _, _, _, _, _ = r, v1, v2, v4, v5, v6, v8 + v1 = uint32(*(*Tsize_t)(unsafe.Pointer(p)) - Uint32FromInt32(1)) + v2 = _a_ctz_32(tls, v1) + goto _3 +_3: + r = v2 + if v8 = r != 0; !v8 { + v5 = *(*Tsize_t)(unsafe.Pointer(p + 1*4)) + v6 = _a_ctz_32(tls, v5) + goto _7 + _7: + v4 = int32(Uint32FromInt32(8)*Uint32FromInt64(4) + uint32(v6)) + r = v4 + } + if v8 || uint32(v4) != Uint32FromInt32(8)*Uint32FromInt64(4) { + return r + } + return 0 +} + +func _cycle(tls *TLS, width Tsize_t, ar uintptr, n int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i int32 + var l Tsize_t + var v1 uint32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _ = i, l, v1 + if n < int32(2) { + return + } + *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*4)) = bp + for width != 0 { + if uint32(256) < width { + v1 = uint32(256) + } else { + v1 = width + } + l = v1 + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*4)), *(*uintptr)(unsafe.Pointer(ar)), l) + i = 0 + for { + if !(i < n) { + break + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*4)), *(*uintptr)(unsafe.Pointer(ar + uintptr(i+int32(1))*4)), l) + *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*4)) += uintptr(l) + goto _2 + _2: + ; + i++ + } + width -= l + } +} + +// C documentation +// +// /* shl() and shr() need n > 0 */ +func _shl(tls *TLS, p uintptr, n int32) { + if uint32(n) >= Uint32FromInt32(8)*Uint32FromInt64(4) { + n = int32(uint32(n) - Uint32FromInt32(8)*Uint32FromInt64(4)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) = *(*Tsize_t)(unsafe.Pointer(p)) + *(*Tsize_t)(unsafe.Pointer(p)) = uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) <<= uint32(n) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) |= *(*Tsize_t)(unsafe.Pointer(p)) >> (Uint32FromInt64(4)*Uint32FromInt32(8) - uint32(n)) + *(*Tsize_t)(unsafe.Pointer(p)) <<= uint32(n) +} + +func _shr(tls *TLS, p uintptr, n int32) { + if uint32(n) >= Uint32FromInt32(8)*Uint32FromInt64(4) { + n = int32(uint32(n) - Uint32FromInt32(8)*Uint32FromInt64(4)) + *(*Tsize_t)(unsafe.Pointer(p)) = *(*Tsize_t)(unsafe.Pointer(p + 1*4)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) = uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(p)) >>= uint32(n) + *(*Tsize_t)(unsafe.Pointer(p)) |= *(*Tsize_t)(unsafe.Pointer(p + 1*4)) << (Uint32FromInt64(4)*Uint32FromInt32(8) - uint32(n)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) >>= uint32(n) +} + +func _sift(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pshift int32, lp uintptr) { + bp := tls.Alloc(240) + defer tls.Free(240) + var i, v1, v2 int32 + var lf, rt uintptr + var _ /* ar at bp+0 */ [57]uintptr + _, _, _, _, _ = i, lf, rt, v1, v2 + i = int32(1) + (*(*[57]uintptr)(unsafe.Pointer(bp)))[0] = head + for pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[57]uintptr)(unsafe.Pointer(bp)))[0], lf, arg) >= 0 && (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[57]uintptr)(unsafe.Pointer(bp)))[0], rt, arg) >= 0 { + break + } + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, rt, arg) >= 0 { + v1 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp)))[v1] = lf + head = lf + pshift -= int32(1) + } else { + v2 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp)))[v2] = rt + head = rt + pshift -= int32(2) + } + } + _cycle(tls, width, bp, i) +} + +func _trinkle(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pp uintptr, pshift int32, trusty int32, lp uintptr) { + bp := tls.Alloc(240) + defer tls.Free(240) + var i, trail, v1 int32 + var lf, rt, stepson uintptr + var _ /* ar at bp+8 */ [57]uintptr + var _ /* p at bp+0 */ [2]Tsize_t + _, _, _, _, _, _ = i, lf, rt, stepson, trail, v1 + i = int32(1) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] = *(*Tsize_t)(unsafe.Pointer(pp)) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = *(*Tsize_t)(unsafe.Pointer(pp + 1*4)) + (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[0] = head + for (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] != uint32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] != uint32(0) { + stepson = head - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift)*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, stepson, (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[0], arg) <= 0 { + break + } + if !(trusty != 0) && pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, rt, stepson, arg) >= 0 || (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, stepson, arg) >= 0 { + break + } + } + v1 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[v1] = stepson + head = stepson + trail = _pntz(tls, bp) + _shr(tls, bp, trail) + pshift += trail + trusty = 0 + } + if !(trusty != 0) { + _cycle(tls, width, bp+8, i) + _sift(tls, head, width, cmp, arg, pshift, lp) + } +} + +func X__qsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + bp := tls.Alloc(208) + defer tls.Free(208) + var head, high uintptr + var i, size, v2, v3 Tsize_t + var pshift, trail int32 + var _ /* lp at bp+0 */ [48]Tsize_t + var _ /* p at bp+192 */ [2]Tsize_t + _, _, _, _, _, _, _, _ = head, high, i, pshift, size, trail, v2, v3 + size = width * nel + *(*[2]Tsize_t)(unsafe.Pointer(bp + 192)) = [2]Tsize_t{ + 0: uint32(1), + } + pshift = int32(1) + if !(size != 0) { + return + } + head = base + high = head + uintptr(size) - uintptr(width) + /* Precompute Leonardo numbers, scaled by element width */ + v2 = width + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = v2 + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[0] = v2 + i = Uint32FromInt32(2) + for { + v3 = (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i-uint32(2)] + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i-uint32(1)] + width + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i] = v3 + if !(v3 < size) { + break + } + goto _1 + _1: + ; + i++ + } + for head < high { + if (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[0]&uint32(3) == uint32(3) { + _sift(tls, head, width, cmp, arg, pshift, bp) + _shr(tls, bp+192, int32(2)) + pshift += int32(2) + } else { + if (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[pshift-int32(1)] >= uint32(int32(high)-int32(head)) { + _trinkle(tls, head, width, cmp, arg, bp+192, pshift, 0, bp) + } else { + _sift(tls, head, width, cmp, arg, pshift, bp) + } + if pshift == int32(1) { + _shl(tls, bp+192, int32(1)) + pshift = 0 + } else { + _shl(tls, bp+192, pshift-int32(1)) + pshift = int32(1) + } + } + *(*Tsize_t)(unsafe.Pointer(bp + 192)) |= uint32(1) + head += uintptr(width) + } + _trinkle(tls, head, width, cmp, arg, bp+192, pshift, 0, bp) + for pshift != int32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[0] != uint32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[int32(1)] != uint32(0) { + if pshift <= int32(1) { + trail = _pntz(tls, bp+192) + _shr(tls, bp+192, trail) + pshift += trail + } else { + _shl(tls, bp+192, int32(2)) + pshift -= int32(2) + *(*Tsize_t)(unsafe.Pointer(bp + 192)) ^= uint32(7) + _shr(tls, bp+192, int32(1)) + _trinkle(tls, head-uintptr((*(*[48]Tsize_t)(unsafe.Pointer(bp)))[pshift])-uintptr(width), width, cmp, arg, bp+192, pshift+int32(1), int32(1), bp) + _shl(tls, bp+192, int32(1)) + *(*Tsize_t)(unsafe.Pointer(bp + 192)) |= uint32(1) + _trinkle(tls, head-uintptr(width), width, cmp, arg, bp+192, pshift, int32(1), bp) + } + head -= uintptr(width) + } +} + +func Xqsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + X__qsort_r(tls, base, nel, width, cmp, arg) +} + +func _wrapper_cmp(tls *TLS, v1 uintptr, v2 uintptr, cmp uintptr) (r int32) { + return (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, v1, v2) +} + +func Xqsort(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, base, nel, width, cmp, origin(2)) + } + X__qsort_r(tls, base, nel, width, __ccgo_fp(_wrapper_cmp), cmp) +} + +func _strtox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(144) + defer tls.Free(144) + var cnt Toff_t + var y float64 + var v1, v2 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _, _ = cnt, y, v1, v2 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp, prec, int32(1)) + cnt = (*TFILE)(unsafe.Pointer(bp)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp)).Fbuf)) + if p != 0 { + if cnt != 0 { + v2 = s + uintptr(cnt) + } else { + v2 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v2 + } + return y +} + +func Xstrtof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_strtox(tls, s, p, 0)) +} + +func Xstrtod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(1)) +} + +func Xstrtold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(2)) +} + +func _strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(144) + defer tls.Free(144) + var cnt Tsize_t + var y uint64 + var v1 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _ = cnt, y, v1 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp)).Fbuf))) + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) + } + return y +} + +func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_strtox1(tls, s, p, base, uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1)))) +} + +func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_strtox1(tls, s, p, base, uint64(Uint32FromUint32(0)+uint32(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))))) +} + +func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoimax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoimax(tls, s, p, base) +} + +func X__strtol_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtol(tls, s, p, base) +} + +func X__strtoll_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func X__strtoul_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoul(tls, s, p, base) +} + +func X__strtoull_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoumax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoumax(tls, s, p, base) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1555 + } + i = uint32(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint32(1) + } + return uint32(0) +} + +func _wcstox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(208) + defer tls.Free(208) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y float64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint32FromInt64(64) - Uint32FromInt32(4) + AtomicStorePInt32(bp+64+76, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp+64, prec, int32(1)) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp+64)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_wcstox(tls, s, p, 0)) +} + +func Xwcstod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(1)) +} + +func Xwcstold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(2)) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read1(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1555 + } + i = uint32(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint32(1) + } + return uint32(0) +} + +func _wcstox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(208) + defer tls.Free(208) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y uint64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint32FromInt64(64) - Uint32FromInt32(4) + AtomicStorePInt32(bp+64+76, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read1) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp+64, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp+64)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_wcstox1(tls, s, p, base, uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1)))) +} + +func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_wcstox1(tls, s, p, base, uint64(Uint32FromUint32(0)+uint32(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))))) +} + +func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoll(tls, s, p, base) +} + +func Xwcstoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoull(tls, s, p, base) +} + +func Xbcmp(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcmp(tls, s1, s2, n) +} + +func Xbcopy(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + } + Xmemmove(tls, s2, s1, n) +} + +func Xbzero(tls *TLS, s uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + } + Xmemset(tls, s, 0, n) +} + +func Xexplicit_bzero(tls *TLS, d uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v n=%v, (%v:)", tls, d, n, origin(2)) + } + d = Xmemset(tls, d, 0, n) +} + +func Xindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrchr(tls, s, c) +} + +const ALIGN1 = -1 +const HIGHS = 0 +const ONES = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemccpy(tls *TLS, dest uintptr, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v c=%v n=%v, (%v:)", tls, dest, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, wd, ws uintptr + var k Tsize_t + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _, _, _, _ = d, k, s, wd, ws, v2, v3, v6, v7 + d = dest + s = src + c = int32(uint8(c)) + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v3 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && int32(v2) != c) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 { + goto tail + } + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(ws))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint32)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && int32(v6) != c) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + if n != 0 { + return d + uintptr(1) + } + return uintptr(0) +} + +const SS = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemchr(tls *TLS, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v src=%v c=%v n=%v, (%v:)", tls, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var s, w, v4 uintptr + _, _, _, _ = k, s, w, v4 + s = src + c = int32(uint8(c)) + for { + if !(uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _1 + _1: + ; + s++ + n-- + } + if n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c { + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + w = s + for { + if !(n >= Uint32FromInt64(4) && !((*(*uint32)(unsafe.Pointer(w))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(w))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 4 + n -= Uint32FromInt64(4) + } + s = w + } + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + n-- + } + if n != 0 { + v4 = s + } else { + v4 = uintptr(0) + } + return v4 +} + +func Xmemcmp(tls *TLS, vl uintptr, vr uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v vl=%v vr=%v n=%v, (%v:)", tls, vl, vr, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v2 int32 + _, _, _ = l, r, v2 + l = vl + r = vr + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _1 + _1: + ; + n-- + l++ + r++ + } + if n != 0 { + v2 = int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) + } else { + v2 = 0 + } + return v2 +} + +const LS = 0 +const RS = 0 + +func Xmemcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 uintptr + var w, x Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, s, w, x, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 + d = dest + s = src + for { + if !(uint32(s)%uint32(4) != 0 && n != 0) { + break + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + goto _1 + _1: + ; + n-- + } + if uint32(d)%uint32(4) == uint32(0) { + for { + if !(n >= uint32(16)) { + break + } + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) + goto _4 + _4: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint32(16) + } + if n&uint32(8) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + d += uintptr(8) + s += uintptr(8) + } + if n&uint32(4) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + d += uintptr(4) + s += uintptr(4) + } + if n&uint32(2) != 0 { + v5 = d + d++ + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + v7 = d + d++ + v8 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = *(*uint8)(unsafe.Pointer(v8)) + } + if n&uint32(1) != 0 { + *(*uint8)(unsafe.Pointer(d)) = *(*uint8)(unsafe.Pointer(s)) + } + return dest + } + if n >= uint32(32) { + switch uint32(d) % Uint32FromInt32(4) { + case uint32(1): + w = *(*uint32)(unsafe.Pointer(s)) + v9 = d + d++ + v10 = s + s++ + *(*uint8)(unsafe.Pointer(v9)) = *(*uint8)(unsafe.Pointer(v10)) + v11 = d + d++ + v12 = s + s++ + *(*uint8)(unsafe.Pointer(v11)) = *(*uint8)(unsafe.Pointer(v12)) + v13 = d + d++ + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v13)) = *(*uint8)(unsafe.Pointer(v14)) + n -= uint32(3) + for { + if !(n >= uint32(17)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(1))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<= uint32(18)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(2))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<= uint32(19)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(3))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(8) | x<>Int32FromInt32(8) | w<>Int32FromInt32(8) | x<>Int32FromInt32(8) | w< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Search loop */ + for { + /* If remainder of haystack is shorter than needle, done */ + if uint32(int32(z)-int32(h)) < l { + return uintptr(0) + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint32(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint32(0) + goto _9 + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(k < l && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if k < l { + h += uintptr(k - ms) + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint32(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint32(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xmemmem(tls *TLS, h0 uintptr, k Tsize_t, n0 uintptr, l Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h0=%v k=%v n0=%v l=%v, (%v:)", tls, h0, k, n0, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, n uintptr + _, _ = h, n + h = h0 + n = n0 + /* Return immediately on empty needle */ + if !(l != 0) { + return h + } + /* Return immediately when needle is longer than haystack */ + if k < l { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xmemchr(tls, h0, int32(*(*uint8)(unsafe.Pointer(n))), k) + if !(h != 0) || l == uint32(1) { + return h + } + k -= uint32(int32(h) - int32(h0)) + if k < l { + return uintptr(0) + } + if l == uint32(2) { + return _twobyte_memmem(tls, h, k, n) + } + if l == uint32(3) { + return _threebyte_memmem(tls, h, k, n) + } + if l == uint32(4) { + return _fourbyte_memmem(tls, h, k, n) + } + return _twoway_memmem(tls, h, h+uintptr(k), n, l) +} + +const WS = 0 + +type TWT = uint32 + +func Xmemmove(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v2, v3, v6, v7 uintptr + var v1, v8 Tsize_t + _, _, _, _, _, _, _, _ = d, s, v1, v2, v3, v6, v7, v8 + d = dest + s = src + if d == s { + return d + } + if uint32(s)-uint32(d)-n <= uint32(-Int32FromInt32(2))*n { + return Xmemcpy(tls, d, s, n) + } + if d < s { + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for uint32(d)%Uint32FromInt64(4) != 0 { + v1 = n + n-- + if !(v1 != 0) { + return dest + } + v2 = d + d++ + v3 = s + s++ + *(*int8)(unsafe.Pointer(v2)) = *(*int8)(unsafe.Pointer(v3)) + } + for { + if !(n >= Uint32FromInt64(4)) { + break + } + *(*TWT)(unsafe.Pointer(d)) = *(*TWT)(unsafe.Pointer(s)) + goto _4 + _4: + ; + n -= Uint32FromInt64(4) + d += uintptr(Uint32FromInt64(4)) + s += uintptr(Uint32FromInt64(4)) + } + } + for { + if !(n != 0) { + break + } + v6 = d + d++ + v7 = s + s++ + *(*int8)(unsafe.Pointer(v6)) = *(*int8)(unsafe.Pointer(v7)) + goto _5 + _5: + ; + n-- + } + } else { + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for uint32(d+uintptr(n))%Uint32FromInt64(4) != 0 { + v8 = n + n-- + if !(v8 != 0) { + return dest + } + *(*int8)(unsafe.Pointer(d + uintptr(n))) = *(*int8)(unsafe.Pointer(s + uintptr(n))) + } + for n >= Uint32FromInt64(4) { + n -= Uint32FromInt64(4) + *(*TWT)(unsafe.Pointer(d + uintptr(n))) = *(*TWT)(unsafe.Pointer(s + uintptr(n))) + } + } + for n != 0 { + n-- + *(*int8)(unsafe.Pointer(d + uintptr(n))) = *(*int8)(unsafe.Pointer(s + uintptr(n))) + } + } + return dest +} + +func Xmempcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcpy(tls, dest, src, n) + uintptr(n) +} + +func X__memrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v1 Tsize_t + _, _ = s, v1 + s = m + c = int32(uint8(c)) + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(n)))) == c { + return s + uintptr(n) + } + } + return uintptr(0) +} + +func Xmemrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, m, c, n) +} + +func Xmemset(tls *TLS, dest uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v c=%v n=%v, (%v:)", tls, dest, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c32 uint32 + var c64 uint64 + var k Tsize_t + var s uintptr + _, _, _, _ = c32, c64, k, s + s = dest + /* Fill head and tail with minimal branching. Each + * conditional ensures that all the subsequently used + * offsets are well-defined and in the dest region. */ + if !(n != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(s)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(1)))) = uint8(c) + if n <= uint32(2) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 1)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + 2)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(2)))) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(3)))) = uint8(c) + if n <= uint32(6) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 3)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(4)))) = uint8(c) + if n <= uint32(8) { + return dest + } + /* Advance pointer to align it at a 4-byte boundary, + * and truncate n to a multiple of 4. The previous code + * already took care of any head/tail that get cut off + * by the alignment. */ + k = -uint32(s) & uint32(3) + s += uintptr(k) + n -= k + n &= uint32(-Int32FromInt32(4)) + c32 = uint32(-Int32FromInt32(1)) / Uint32FromInt32(255) * uint32(uint8(c)) + /* In preparation to copy 32 bytes at a time, aligned on + * an 8-byte bounary, fill head/tail up to 28 bytes each. + * As in the initial byte-based head/tail fill, each + * conditional below ensures that the subsequent offsets + * are valid (e.g. !(n<=24) implies n>=28). */ + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(4))) = c32 + if n <= uint32(8) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(8))) = c32 + if n <= uint32(24) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(16))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(28))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(16))) = c32 + /* Align to a multiple of 8 so we can fill 64 bits at a time, + * and avoid writing the same bytes twice as much as is + * practical without introducing additional branching. */ + k = uint32(24) + uint32(s)&uint32(4) + s += uintptr(k) + n -= k + /* If this loop is reached, 28 tail bytes have already been + * filled, so any remainder when n drops below 32 can be + * safely ignored. */ + c64 = uint64(c32) | uint64(c32)<= uint32(32)) { + break + } + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(0))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(8))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(16))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(24))) = c64 + goto _1 + _1: + ; + n -= uint32(32) + s += uintptr(32) + } + return dest +} + +func Xrindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrrchr(tls, s, c) +} + +const ALIGN2 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws, v4, v5 uintptr + var v2, v7 int8 + _, _, _, _, _, _ = wd, ws, v2, v4, v5, v7 + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + v2 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v2 + if !(v2 != 0) { + return d + } + goto _1 + _1: + ; + s++ + d++ + } + wd = d + ws = s + for { + if !!((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _3 + _3: + ; + v4 = wd + wd += 4 + v5 = ws + ws += 4 + *(*uint32)(unsafe.Pointer(v4)) = *(*uint32)(unsafe.Pointer(v5)) + } + d = wd + s = ws + } + for { + v7 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v7 + if !(v7 != 0) { + break + } + goto _6 + _6: + ; + s++ + d++ + } + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpcpy(tls, d, s) +} + +const ALIGN3 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws uintptr + var v2, v6 int8 + var v3, v7 bool + _, _, _, _, _, _ = wd, ws, v2, v3, v6, v7 + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v3 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if !(n != 0) || !(*(*int8)(unsafe.Pointer(s)) != 0) { + goto tail + } + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint32)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && v6 != 0) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + Xmemset(tls, d, 0, n) + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpncpy(tls, d, s, n) +} + +func Xstrcasecmp(tls *TLS, _l uintptr, _r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v, (%v:)", tls, _l, _r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + _, _ = l, r + l = _l + r = _r + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcasecmp(tls, l, r) +} + +func Xstrcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcasecmp_l(tls, l, r, loc) +} + +func Xstrcasestr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, n) + for { + if !(*(*int8)(unsafe.Pointer(h)) != 0) { + break + } + if !(Xstrncasecmp(tls, h, n, l) != 0) { + return h + } + goto _1 + _1: + ; + h++ + } + return uintptr(0) +} + +func Xstrcat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xstrcpy(tls, dest+uintptr(Xstrlen(tls, dest)), src) + return dest +} + +func Xstrchr(tls *TLS, s uintptr, c int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 uintptr + _, _ = r, v1 + r = X__strchrnul(tls, s, c) + if int32(*(*uint8)(unsafe.Pointer(r))) == int32(uint8(c)) { + v1 = r + } else { + v1 = uintptr(0) + } + return v1 +} + +const ALIGN4 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__strchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var w uintptr + _, _ = k, w + c = int32(uint8(c)) + if !(c != 0) { + return s + uintptr(Xstrlen(tls, s)) + } + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + if !(*(*int8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { + return s + } + goto _1 + _1: + ; + s++ + } + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + w = s + for { + if !(!((*(*uint32)(unsafe.Pointer(w))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(w)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint32)(unsafe.Pointer(w))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(w))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 4 + } + s = w + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + } + return s +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strchrnul(tls, s, c) +} + +func Xstrcmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + for { + if !(int32(*(*int8)(unsafe.Pointer(l))) == int32(*(*int8)(unsafe.Pointer(r))) && *(*int8)(unsafe.Pointer(l)) != 0) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrcpy(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpcpy(tls, dest, src) + return dest +} + +func Xstrcspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p2 uintptr + var v3 bool + var _ /* byteset at bp+0 */ [8]Tsize_t + _, _, _ = a, v3, p2 + a = s + if !(*(*int8)(unsafe.Pointer(c)) != 0) || !(*(*int8)(unsafe.Pointer(c + 1)) != 0) { + return uint32(int32(X__strchrnul(tls, s, int32(*(*int8)(unsafe.Pointer(c))))) - int32(a)) + } + Xmemset(tls, bp, 0, uint32(32)) + for { + if v3 = *(*int8)(unsafe.Pointer(c)) != 0; v3 { + p2 = bp + uintptr(uint32(*(*uint8)(unsafe.Pointer(c)))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + *(*Tsize_t)(unsafe.Pointer(p2)) |= Uint32FromInt32(1) << (uint32(*(*uint8)(unsafe.Pointer(c))) % (Uint32FromInt32(8) * Uint32FromInt64(4))) + } + if !(v3 && *(*Tsize_t)(unsafe.Pointer(p2)) != 0) { + break + } + goto _1 + _1: + ; + c++ + } + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0 && !((*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(s)))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(s)))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0)) { + break + } + goto _4 + _4: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func Xstrdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrlen(tls, s) + d = Xmalloc(tls, l+uint32(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xmemcpy(tls, d, s, l+uint32(1)) +} + +func Xstrerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var msg uintptr + _, _ = l, msg + msg = Xstrerror(tls, err) + l = Xstrlen(tls, msg) + if l >= buflen { + if buflen != 0 { + Xmemcpy(tls, buf, msg, buflen-uint32(1)) + *(*int8)(unsafe.Pointer(buf + uintptr(buflen-uint32(1)))) = 0 + } + return int32(ERANGE) + } + Xmemcpy(tls, buf, msg, l+uint32(1)) + return 0 +} + +func X__xpg_strerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrerror_r(tls, err, buf, buflen) +} + +func Xstrlcat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrnlen(tls, d, n) + if l == n { + return l + Xstrlen(tls, s) + } + return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) +} + +const ALIGN5 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, wd, ws uintptr + var v1 Tsize_t + var v3, v7 int8 + var v4, v8 bool + _, _, _, _, _, _, _, _ = d0, wd, ws, v1, v3, v4, v7, v8 + d0 = d + v1 = n + n-- + if !(v1 != 0) { + goto finish + } + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v4 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v4 { + v3 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v3 + } + if !(v4 && v3 != 0) { + break + } + goto _2 + _2: + ; + n-- + s++ + d++ + } + if n != 0 && *(*int8)(unsafe.Pointer(s)) != 0 { + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*Tsize_t)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _5 + _5: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + } + for { + if v8 = n != 0; v8 { + v7 = *(*int8)(unsafe.Pointer(s)) + *(*int8)(unsafe.Pointer(d)) = v7 + } + if !(v8 && v7 != 0) { + break + } + goto _6 + _6: + ; + n-- + s++ + d++ + } + *(*int8)(unsafe.Pointer(d)) = 0 + goto finish +finish: + ; + return uint32(int32(d)-int32(d0)) + Xstrlen(tls, s) + return r +} + +const ALIGN6 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, w uintptr + _, _ = a, w + a = s + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + return uint32(int32(s) - int32(a)) + } + goto _1 + _1: + ; + s++ + } + w = s + for { + if !!((*(*uint32)(unsafe.Pointer(w))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(w)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _2 + _2: + ; + w += 4 + } + s = w + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrncasecmp(tls, l, r, n) +} + +func Xstrncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strncasecmp_l(tls, l, r, n, loc) +} + +func Xstrncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xstrlen(tls, d)) + for n != 0 && *(*int8)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d++ + v2 = s + s++ + *(*int8)(unsafe.Pointer(v1)) = *(*int8)(unsafe.Pointer(v2)) + } + v3 = d + d++ + *(*int8)(unsafe.Pointer(v3)) = 0 + return a +} + +func Xstrncmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpncpy(tls, d, s, n) + return d +} + +func Xstrndup(tls *TLS, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrnlen(tls, s, n) + d = Xmalloc(tls, l+uint32(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + Xmemcpy(tls, d, s, l) + *(*int8)(unsafe.Pointer(d + uintptr(l))) = 0 + return d +} + +func Xstrnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var v1 uint32 + _, _ = p, v1 + p = Xmemchr(tls, s, 0, n) + if p != 0 { + v1 = uint32(int32(p) - int32(s)) + } else { + v1 = n + } + return v1 +} + +func Xstrpbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xstrcspn(tls, s, b)) + if *(*int8)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xstrrchr(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, s, c, Xstrlen(tls, s)+uint32(1)) +} + +func Xstrsep(tls *TLS, str uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v str=%v sep=%v, (%v:)", tls, str, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, s, v1 uintptr + _, _, _ = end, s, v1 + s = *(*uintptr)(unsafe.Pointer(str)) + if !(s != 0) { + return UintptrFromInt32(0) + } + end = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*int8)(unsafe.Pointer(end)) != 0 { + v1 = end + end++ + *(*int8)(unsafe.Pointer(v1)) = 0 + } else { + end = uintptr(0) + } + *(*uintptr)(unsafe.Pointer(str)) = end + return s +} + +var _strings = [671]int8{'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', 0, 'H', 'a', 'n', 'g', 'u', 'p', 0, 'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 0, 'Q', 'u', 'i', 't', 0, 'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'i', 'n', 's', 't', 'r', 'u', 'c', 't', 'i', 'o', 'n', 0, 'T', 'r', 'a', 'c', 'e', '/', 'b', 'r', 'e', 'a', 'k', 'p', 'o', 'i', 'n', 't', ' ', 't', 'r', 'a', 'p', 0, 'A', 'b', 'o', 'r', 't', 'e', 'd', 0, 'B', 'u', 's', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'r', 'i', 't', 'h', 'm', 'e', 't', 'i', 'c', ' ', 'e', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n', 0, 'K', 'i', 'l', 'l', 'e', 'd', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '1', 0, 'S', 'e', 'g', 'm', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', ' ', 'f', 'a', 'u', 'l', 't', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '2', 0, 'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e', 0, 'A', 'l', 'a', 'r', 'm', ' ', 'c', 'l', 'o', 'c', 'k', 0, 'T', 'e', 'r', 'm', 'i', 'n', 'a', 't', 'e', 'd', 0, 'S', 't', 'a', 'c', 'k', ' ', 'f', 'a', 'u', 'l', 't', 0, 'C', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 't', 'u', 's', 0, 'C', 'o', 'n', 't', 'i', 'n', 'u', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 's', 'i', 'g', 'n', 'a', 'l', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'i', 'n', 'p', 'u', 't', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'o', 'u', 't', 'p', 'u', 't', ')', 0, 'U', 'r', 'g', 'e', 'n', 't', ' ', 'I', '/', 'O', ' ', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', 0, 'C', 'P', 'U', ' ', 't', 'i', 'm', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'F', 'i', 'l', 'e', ' ', 's', 'i', 'z', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'P', 'r', 'o', 'f', 'i', 'l', 'i', 'n', 'g', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'W', 'i', 'n', 'd', 'o', 'w', ' ', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 0, 'I', '/', 'O', ' ', 'p', 'o', 's', 's', 'i', 'b', 'l', 'e', 0, 'P', 'o', 'w', 'e', 'r', ' ', 'f', 'a', 'i', 'l', 'u', 'r', 'e', 0, 'B', 'a', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l', 0, 'R', 'T', '3', '2', 0, 'R', 'T', '3', '3', 0, 'R', 'T', '3', '4', 0, 'R', 'T', '3', '5', 0, 'R', 'T', '3', '6', 0, 'R', 'T', '3', '7', 0, 'R', 'T', '3', '8', 0, 'R', 'T', '3', '9', 0, 'R', 'T', '4', '0', 0, 'R', 'T', '4', '1', 0, 'R', 'T', '4', '2', 0, 'R', 'T', '4', '3', 0, 'R', 'T', '4', '4', 0, 'R', 'T', '4', '5', 0, 'R', 'T', '4', '6', 0, 'R', 'T', '4', '7', 0, 'R', 'T', '4', '8', 0, 'R', 'T', '4', '9', 0, 'R', 'T', '5', '0', 0, 'R', 'T', '5', '1', 0, 'R', 'T', '5', '2', 0, 'R', 'T', '5', '3', 0, 'R', 'T', '5', '4', 0, 'R', 'T', '5', '5', 0, 'R', 'T', '5', '6', 0, 'R', 'T', '5', '7', 0, 'R', 'T', '5', '8', 0, 'R', 'T', '5', '9', 0, 'R', 'T', '6', '0', 0, 'R', 'T', '6', '1', 0, 'R', 'T', '6', '2', 0, 'R', 'T', '6', '3', 0, 'R', 'T', '6', '4'} + +func Xstrsignal(tls *TLS, signum int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v signum=%v, (%v:)", tls, signum, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v2 int32 + _, _ = s, v2 + s = uintptr(unsafe.Pointer(&_strings)) + signum = signum + if uint32(signum)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + signum = 0 + } + for { + v2 = signum + signum-- + if !(v2 != 0) { + break + } + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + goto _1 + _1: + ; + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xstrspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p3 uintptr + var v4 bool + var _ /* byteset at bp+0 */ [8]Tsize_t + _, _, _ = a, v4, p3 + a = s + *(*[8]Tsize_t)(unsafe.Pointer(bp)) = [8]Tsize_t{} + if !(*(*int8)(unsafe.Pointer(c)) != 0) { + return uint32(0) + } + if !(*(*int8)(unsafe.Pointer(c + 1)) != 0) { + for { + if !(int32(*(*int8)(unsafe.Pointer(s))) == int32(*(*int8)(unsafe.Pointer(c)))) { + break + } + goto _1 + _1: + ; + s++ + } + return uint32(int32(s) - int32(a)) + } + for { + if v4 = *(*int8)(unsafe.Pointer(c)) != 0; v4 { + p3 = bp + uintptr(uint32(*(*uint8)(unsafe.Pointer(c)))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + *(*Tsize_t)(unsafe.Pointer(p3)) |= Uint32FromInt32(1) << (uint32(*(*uint8)(unsafe.Pointer(c))) % (Uint32FromInt32(8) * Uint32FromInt64(4))) + } + if !(v4 && *(*Tsize_t)(unsafe.Pointer(p3)) != 0) { + break + } + goto _2 + _2: + ; + c++ + } + for { + if !(*(*int8)(unsafe.Pointer(s)) != 0 && (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(s)))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(s)))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0) { + break + } + goto _5 + _5: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func _twobyte_strstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint32(int32(z)-int32(h)) < l { + /* Fast estimate for MAX(l,63) */ + grow = l | uint32(63) + z2 = Xmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint32(int32(z)-int32(h)) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) + } + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint32(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint32(0) + goto _9 + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 { + h += uintptr(k - ms) + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint32(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint32(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xstrstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle */ + if !(*(*int8)(unsafe.Pointer(n)) != 0) { + return h + } + /* Use faster algorithms for short needles */ + h = Xstrchr(tls, h, int32(*(*int8)(unsafe.Pointer(n)))) + if !(h != 0) || !(*(*int8)(unsafe.Pointer(n + 1)) != 0) { + return h + } + if !(*(*int8)(unsafe.Pointer(h + 1)) != 0) { + return uintptr(0) + } + if !(*(*int8)(unsafe.Pointer(n + 2)) != 0) { + return _twobyte_strstr(tls, h, n) + } + if !(*(*int8)(unsafe.Pointer(h + 2)) != 0) { + return uintptr(0) + } + if !(*(*int8)(unsafe.Pointer(n + 3)) != 0) { + return _threebyte_strstr(tls, h, n) + } + if !(*(*int8)(unsafe.Pointer(h + 3)) != 0) { + return uintptr(0) + } + if !(*(*int8)(unsafe.Pointer(n + 4)) != 0) { + return _fourbyte_strstr(tls, h, n) + } + return _twoway_strstr(tls, h, n) +} + +func Xstrtok(tls *TLS, s uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4 uintptr + var v2 bool + _, _, _, _ = v1, v2, v3, v4 + if v2 = !(s != 0); v2 { + v1 = _p2 + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + _p2 = v3 + return v3 + } + _p2 = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*int8)(unsafe.Pointer(_p2)) != 0 { + v4 = _p2 + _p2++ + *(*int8)(unsafe.Pointer(v4)) = 0 + } else { + _p2 = uintptr(0) + } + return s +} + +var _p2 uintptr + +func Xstrtok_r(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*int8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*int8)(unsafe.Pointer(v4)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xstrverscmp(tls *TLS, l0 uintptr, r0 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l0=%v r0=%v, (%v:)", tls, l0, r0, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, z int32 + var dp, i, j, v2 Tsize_t + var l, r uintptr + _, _, _, _, _, _, _, _ = c, dp, i, j, l, r, z, v2 + l = l0 + r = r0 + z = int32(1) + /* Find maximal matching prefix and track its maximal digit + * suffix and whether those digits are all zeros. */ + v2 = Uint32FromInt32(0) + i = v2 + dp = v2 + for { + if !(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))) { + break + } + c = int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) + if !(c != 0) { + return 0 + } + if !(BoolInt32(uint32(c)-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + dp = i + uint32(1) + z = Int32FromInt32(1) + } else { + if c != int32('0') { + z = 0 + } + } + goto _1 + _1: + ; + i++ + } + if uint32(int32(*(*uint8)(unsafe.Pointer(l + uintptr(dp))))-int32('1')) < uint32(9) && uint32(int32(*(*uint8)(unsafe.Pointer(r + uintptr(dp))))-int32('1')) < uint32(9) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ + j = i + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return int32(1) + } + goto _3 + _3: + ; + j++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-uint32('0') < uint32(10)) != 0 { + return -int32(1) + } + } else { + if z != 0 && dp < i && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-uint32('0') < uint32(10)) != 0 || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-uint32('0') < uint32(10)) != 0) { + /* Otherwise, if common prefix of digit sequence is + * all zeros, digits order less than non-digits. */ + return int32(uint8(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-Int32FromUint8('0'))) - int32(uint8(int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-Int32FromUint8('0'))) + } + } + return int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(r + uintptr(i)))) +} + +func Xswab(tls *TLS, _src uintptr, _dest uintptr, n Tssize_t) { + if __ccgo_strace { + trc("tls=%v _src=%v _dest=%v n=%v, (%v:)", tls, _src, _dest, n, origin(2)) + } + var dest, src uintptr + _, _ = dest, src + src = _src + dest = _dest + for { + if !(n > int32(1)) { + break + } + *(*int8)(unsafe.Pointer(dest)) = *(*int8)(unsafe.Pointer(src + 1)) + *(*int8)(unsafe.Pointer(dest + 1)) = *(*int8)(unsafe.Pointer(src)) + dest += uintptr(2) + src += uintptr(2) + goto _1 + _1: + ; + n -= int32(2) + } +} + +func Xwcpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcscpy(tls, d, s) + uintptr(Xwcslen(tls, s))*4 +} + +func Xwcpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsncpy(tls, d, s, n) + uintptr(Xwcsnlen(tls, s, n))*4 +} + +func Xwcscasecmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, uint32(-Int32FromInt32(1))) +} + +func Xwcscasecmp_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscasecmp(tls, l, r) +} + +func Xwcscat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xwcscpy(tls, dest+uintptr(Xwcslen(tls, dest))*4, src) + return dest +} + +func Xwcschr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + if !(c != 0) { + return s + uintptr(Xwcslen(tls, s))*4 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + s += 4 + } + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcscmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2 int32 + _ = v2 + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + l += 4 + r += 4 + } + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v2 = -int32(1) + } else { + v2 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + return v2 +} + +func Xwcscpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Twchar_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v2 = s + s += 4 + v1 = *(*Twchar_t)(unsafe.Pointer(v2)) + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = v1 + if !(v1 != 0) { + break + } + } + return a +} + +func Xwcscspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 uint32 + _, _, _, _ = a, v1, v2, v3 + if !(*(*Twchar_t)(unsafe.Pointer(c)) != 0) { + return Xwcslen(tls, s) + } + if !(*(*Twchar_t)(unsafe.Pointer(c + 1*4)) != 0) { + v3 = s + a = v3 + v2 = Xwcschr(tls, v3, *(*Twchar_t)(unsafe.Pointer(c))) + s = v2 + if v2 != 0 { + v1 = uint32((int32(s) - int32(a)) / 4) + } else { + v1 = Xwcslen(tls, a) + } + return v1 + } + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && !(Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0)) { + break + } + goto _4 + _4: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func Xwcsdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xwcslen(tls, s) + d = Xmalloc(tls, (l+uint32(1))*uint32(4)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xwmemcpy(tls, d, s, l+uint32(1)) +} + +func Xwcslen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func Xwcsncasecmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v1 Tsize_t + _ = v1 + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0 && n != 0 && (*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) || Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) == Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l += 4 + r += 4 + n-- + } + return int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) - Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r))))) +} + +func Xwcsncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v locale=%v, (%v:)", tls, l, r, n, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, n) +} + +func Xwcsncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xwcslen(tls, d)) * 4 + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = 0 + return a +} + +func Xwcsncmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwcsncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2 uintptr + _, _, _ = a, v1, v2 + a = d + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + Xwmemset(tls, d, 0, n) + return a +} + +func Xwcsnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var z uintptr + _ = z + z = Xwmemchr(tls, s, 0, n) + if z != 0 { + n = uint32((int32(z) - int32(s)) / 4) + } + return n +} + +func Xwcspbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xwcscspn(tls, s, b)) * 4 + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = UintptrFromInt32(0) + } + return v1 +} + +func Xwcsrchr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v2 uintptr + _, _ = p, v2 + p = s + uintptr(Xwcslen(tls, s))*4 + for { + if !(p >= s && *(*Twchar_t)(unsafe.Pointer(p)) != c) { + break + } + goto _1 + _1: + ; + p -= 4 + } + if p >= s { + v2 = p + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcsspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func _twoway_wcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var grow, ip, jp, k, l, mem, mem0, ms, p, p0, v2, v3, v4, v5, v6, v7 Tsize_t + var z, z2 uintptr + var v11, v8 uint32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = grow, ip, jp, k, l, mem, mem0, ms, p, p0, z, z2, v11, v2, v3, v4, v5, v6, v7, v8 + /* Computing length of needle */ + l = uint32(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(h + uintptr(l)*4)) != 0) { + break + } + goto _1 + _1: + ; + l++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 { + return uintptr(0) + } /* hit the end of h */ + /* Compute maximal suffix */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v2 = Uint32FromInt32(1) + p = v2 + k = v2 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) > *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) < *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xwmemcmp(tls, n, n+uintptr(p)*4, ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint32((int32(z)-int32(h))/4) < l { + /* Fast estimate for MIN(l,63) */ + grow = l | uint32(63) + z2 = Xwmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint32((int32(z)-int32(h))/4) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) * 4 + } + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k)*4))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 { + h += uintptr(k-ms) * 4 + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k-uint32(1))*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k-uint32(1))*4))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) * 4 + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xwcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle or haystack */ + if !(*(*Twchar_t)(unsafe.Pointer(n)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h)) != 0) { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xwcschr(tls, h, *(*Twchar_t)(unsafe.Pointer(n))) + if !(h != 0) || !(*(*Twchar_t)(unsafe.Pointer(n + 1*4)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h + 1*4)) != 0) { + return uintptr(0) + } + return _twoway_wcsstr(tls, h, n) +} + +func Xwcstok(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xwcsspn(tls, s, sep)) * 4 + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xwcscspn(tls, s, sep))*4 + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5)) += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xwcswcs(tls *TLS, haystack uintptr, needle uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v haystack=%v needle=%v, (%v:)", tls, haystack, needle, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsstr(tls, haystack, needle) +} + +func Xwmemchr(tls *TLS, s uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v n=%v, (%v:)", tls, s, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + n-- + s += 4 + } + if n != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwmemcmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r))) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwmemcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Tsize_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + v3 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = *(*Twchar_t)(unsafe.Pointer(v3)) + } + return a +} + +func Xwmemmove(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, v3, v4 uintptr + var v1, v2 Tsize_t + _, _, _, _, _ = d0, v1, v2, v3, v4 + d0 = d + if d == s { + return d + } + if uint32(d)-uint32(s) < n*uint32(4) { + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + *(*Twchar_t)(unsafe.Pointer(d + uintptr(n)*4)) = *(*Twchar_t)(unsafe.Pointer(s + uintptr(n)*4)) + } + } else { + for { + v2 = n + n-- + if !(v2 != 0) { + break + } + v3 = d + d += 4 + v4 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = *(*Twchar_t)(unsafe.Pointer(v4)) + } + } + return d0 +} + +func Xwmemset(tls *TLS, d uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v c=%v n=%v, (%v:)", tls, d, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 uintptr + var v1 Tsize_t + _, _, _ = ret, v1, v2 + ret = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = c + } + return ret +} + +func Xmkdtemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var retries, v1 int32 + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if !(Xmkdir(tls, template, uint32(0700)) != 0) { + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) + return uintptr(0) +} + +func Xmkostemp(tls *TLS, template uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v flags=%v, (%v:)", tls, template, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, flags) +} + +func X__mkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var fd, retries, v1, v3 int32 + var l Tsize_t + _, _, _, _, _ = fd, l, retries, v1, v3 + l = Xstrlen(tls, template) + if l < uint32(6) || uint32(len1) > l-uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + flags -= flags & (Int32FromInt32(03) | Int32FromInt32(O_PATH)) + retries = int32(100) + for { + ___randname(tls, template+uintptr(l)-uintptr(len1)-uintptr(6)) + v3 = Xopen(tls, template, flags|int32(O_RDWR)|int32(O_CREAT)|int32(O_EXCL), VaList(bp+8, int32(0600))) + fd = v3 + if v3 >= 0 { + return fd + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1563, uint32(6)) + return -int32(1) +} + +func Xmkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, flags) +} + +func Xmkstemp(tls *TLS, template uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, 0) +} + +func Xmkstemps(tls *TLS, template uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v, (%v:)", tls, template, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, 0) +} + +func Xmktemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var l Tsize_t + var retries, v1 int32 + var _ /* st at bp+0 */ Tstat + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + *(*int8)(unsafe.Pointer(template)) = 0 + return template + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if Xstat(tls, template, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) { + *(*int8)(unsafe.Pointer(template)) = 0 + } + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0) { + break + } + } + *(*int8)(unsafe.Pointer(template)) = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EEXIST) + return template +} + +func Xcfgetospeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*Ttermios)(unsafe.Pointer(tio)).Fc_cflag & uint32(CBAUD) +} + +func Xcfgetispeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfgetospeed(tls, tio) +} + +func Xcfmakeraw(tls *TLS, t uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + } + *(*Ttcflag_t)(unsafe.Pointer(t)) &= uint32(^(Int32FromInt32(IGNBRK) | Int32FromInt32(BRKINT) | Int32FromInt32(PARMRK) | Int32FromInt32(ISTRIP) | Int32FromInt32(INLCR) | Int32FromInt32(IGNCR) | Int32FromInt32(ICRNL) | Int32FromInt32(IXON))) + *(*Ttcflag_t)(unsafe.Pointer(t + 4)) &= uint32(^Int32FromInt32(OPOST)) + *(*Ttcflag_t)(unsafe.Pointer(t + 12)) &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ECHONL) | Int32FromInt32(ICANON) | Int32FromInt32(ISIG) | Int32FromInt32(IEXTEN))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) &= uint32(^(Int32FromInt32(CSIZE) | Int32FromInt32(PARENB))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) |= uint32(CS8) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 6)) = uint8(1) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 5)) = uint8(0) +} + +func Xcfsetospeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + if speed&uint32(^Int32FromInt32(CBAUD)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) &= uint32(^Int32FromInt32(CBAUD)) + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) |= speed + return 0 +} + +func Xcfsetispeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if speed != 0 { + v1 = Xcfsetospeed(tls, tio, speed) + } else { + v1 = 0 + } + return v1 +} + +func Xcfsetspeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfsetospeed(tls, tio, speed) +} + +func Xtcdrain(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TCSBRK)), int32(Int32FromInt32(1)), 0, 0, 0))) +} + +func Xtcflow(tls *TLS, fd int32, action int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v action=%v, (%v:)", tls, fd, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCXONC), VaList(bp+8, action)) +} + +func Xtcflush(tls *TLS, fd int32, queue int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v queue=%v, (%v:)", tls, fd, queue, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCFLSH), VaList(bp+8, queue)) +} + +func Xtcgetattr(tls *TLS, fd int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tio=%v, (%v:)", tls, fd, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if Xioctl(tls, fd, int32(TCGETS), VaList(bp+8, tio)) != 0 { + return -int32(1) + } + return 0 +} + +func Xtcgetsid(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* sid at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGSID), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcgetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(wsz)))) +} + +func Xtcsendbreak(tls *TLS, fd int32, dur int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v dur=%v, (%v:)", tls, fd, dur, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + /* nonzero duration is implementation-defined, so ignore it */ + return Xioctl(tls, fd, int32(TCSBRK), VaList(bp+8, 0)) +} + +func Xtcsetattr(tls *TLS, fd int32, act int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v act=%v tio=%v, (%v:)", tls, fd, act, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if act < 0 || act > int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xioctl(tls, fd, int32(TCSETS)+act, VaList(bp+8, tio)) +} + +func Xtcsetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCSWINSZ)), int32(wsz)))) +} + +func X__map_file(tls *TLS, pathname uintptr, size uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v pathname=%v size=%v, (%v:)", tls, pathname, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd int32 + var map1, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _, _ = fd, map1, v1 + map1 = uintptr(-Int32FromInt32(1)) + fd = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_open), int32(pathname), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)|Int32FromInt32(O_LARGEFILE))))) + if fd < 0 { + return uintptr(0) + } + if !(X__fstat(tls, fd, bp) != 0) { + map1 = X__mmap(tls, uintptr(0), uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_size), int32(PROT_READ), int32(MAP_SHARED), fd, 0) + *(*Tsize_t)(unsafe.Pointer(size)) = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + } + X__syscall1(tls, int32(SYS_close), fd) + if map1 == uintptr(-Int32FromInt32(1)) { + v1 = uintptr(0) + } else { + v1 = map1 + } + return v1 +} + +func X__month_to_secs(tls *TLS, month int32, is_leap int32) (r int32) { + if __ccgo_strace { + trc("tls=%v month=%v is_leap=%v, (%v:)", tls, month, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t int32 + _ = t + t = _secs_through_month[month] + if is_leap != 0 && month >= int32(2) { + t += int32(86400) + } + return t +} + +var _secs_through_month = [12]int32{ + 1: Int32FromInt32(31) * Int32FromInt32(86400), + 2: Int32FromInt32(59) * Int32FromInt32(86400), + 3: Int32FromInt32(90) * Int32FromInt32(86400), + 4: Int32FromInt32(120) * Int32FromInt32(86400), + 5: Int32FromInt32(151) * Int32FromInt32(86400), + 6: Int32FromInt32(181) * Int32FromInt32(86400), + 7: Int32FromInt32(212) * Int32FromInt32(86400), + 8: Int32FromInt32(243) * Int32FromInt32(86400), + 9: Int32FromInt32(273) * Int32FromInt32(86400), + 10: Int32FromInt32(304) * Int32FromInt32(86400), + 11: Int32FromInt32(334) * Int32FromInt32(86400), +} + +const DAYS_PER_100Y = 36524 +const DAYS_PER_400Y = 146097 +const DAYS_PER_4Y = 1461 +const LEAPOCH = 951868800 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +/* 2000-03-01 (mod 400 year, immediately after feb29 */ + +func X__secs_to_tm(tls *TLS, t int64, tm uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c_cycles, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, wday, yday int32 + var days, secs, years int64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = c_cycles, days, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, secs, wday, yday, years + /* Reject time_t values whose year would overflow int */ + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || t > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + return -int32(1) + } + secs = t - (Int64FromInt64(946684800) + int64(Int32FromInt32(86400)*(Int32FromInt32(31)+Int32FromInt32(29)))) + days = secs / int64(86400) + remsecs = int32(secs % int64(86400)) + if remsecs < 0 { + remsecs += int32(86400) + days-- + } + wday = int32((int64(3) + days) % int64(7)) + if wday < 0 { + wday += int32(7) + } + qc_cycles = int32(days / int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + remdays = int32(days % int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + if remdays < 0 { + remdays += Int32FromInt32(365)*Int32FromInt32(400) + Int32FromInt32(97) + qc_cycles-- + } + c_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + if c_cycles == int32(4) { + c_cycles-- + } + remdays -= c_cycles * (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + q_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + if q_cycles == int32(25) { + q_cycles-- + } + remdays -= q_cycles * (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + remyears = remdays / int32(365) + if remyears == int32(4) { + remyears-- + } + remdays -= remyears * int32(365) + leap = BoolInt32(!(remyears != 0) && (q_cycles != 0 || !(c_cycles != 0))) + yday = remdays + int32(31) + int32(28) + leap + if yday >= int32(365)+leap { + yday -= int32(365) + leap + } + years = int64(remyears+int32(4)*q_cycles+int32(100)*c_cycles) + int64(400)*int64(qc_cycles) + months = 0 + for { + if !(int32(_days_in_month[months]) <= remdays) { + break + } + remdays -= int32(_days_in_month[months]) + goto _1 + _1: + ; + months++ + } + if months >= int32(10) { + months -= int32(12) + years++ + } + if years+int64(100) > int64(INT_MAX) || years+int64(100) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + return -int32(1) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = int32(years + int64(100)) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon = months + int32(2) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mday = remdays + int32(1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday = wday + (*Ttm)(unsafe.Pointer(tm)).Ftm_yday = yday + (*Ttm)(unsafe.Pointer(tm)).Ftm_hour = remsecs / int32(3600) + (*Ttm)(unsafe.Pointer(tm)).Ftm_min = remsecs / int32(60) % int32(60) + (*Ttm)(unsafe.Pointer(tm)).Ftm_sec = remsecs % int32(60) + return 0 +} + +var _days_in_month = [12]int8{ + 0: int8(31), + 1: int8(30), + 2: int8(31), + 3: int8(30), + 4: int8(31), + 5: int8(31), + 6: int8(30), + 7: int8(31), + 8: int8(30), + 9: int8(31), + 10: int8(31), + 11: int8(29), +} + +func X__tm_to_secs(tls *TLS, tm uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, month int32 + var t, year int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _ = adj, month, t, year + year = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + month = (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + if month >= int32(12) || month < 0 { + adj = month / int32(12) + month %= int32(12) + if month < 0 { + adj-- + month += int32(12) + } + year += int64(adj) + } + t = X__year_to_secs(tls, year, bp) + t += int64(X__month_to_secs(tls, month, *(*int32)(unsafe.Pointer(bp)))) + t += int64(86400) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday-Int32FromInt32(1)) + t += int64(3600) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + t += int64(60) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + t += int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + return t +} + +var _std_name [7]int8 +var _dst_name [7]int8 + +var _dst_off int32 +var _r0 [5]int32 +var _r12 [5]int32 + +var _zi uintptr +var _trans uintptr +var _index uintptr +var _types uintptr +var _abbrevs uintptr +var _abbrevs_end uintptr +var _map_size Tsize_t + +var _old_tz_buf [32]int8 +var _old_tz = uintptr(unsafe.Pointer(&_old_tz_buf)) +var _old_tz_size = uint32(32) + +var _lock4 [1]int32 + +func _getint2(tls *TLS, p uintptr) (r int32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) + uint32(10)*x + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(p))++ + } + return int32(x) +} + +func _getoff(tls *TLS, p uintptr) (r int32) { + var neg, off, v1 int32 + _, _, _ = neg, off, v1 + neg = 0 + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('-') { + *(*uintptr)(unsafe.Pointer(p))++ + neg = int32(1) + } else { + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('+') { + *(*uintptr)(unsafe.Pointer(p))++ + } + } + off = int32(3600) * _getint2(tls, p) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += int32(60) * _getint2(tls, p) + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += _getint2(tls, p) + } + } + if neg != 0 { + v1 = -off + } else { + v1 = off + } + return v1 +} + +func _getrule(tls *TLS, p uintptr, rule uintptr) { + var r, v1 int32 + _, _ = r, v1 + v1 = int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) + *(*int32)(unsafe.Pointer(rule)) = v1 + r = v1 + if r != int32('M') { + if r == int32('J') { + *(*uintptr)(unsafe.Pointer(p))++ + } else { + *(*int32)(unsafe.Pointer(rule)) = 0 + } + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + } else { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 2*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 3*4)) = _getint2(tls, p) + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('/') { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 4*4)) = _getoff(tls, p) + } else { + *(*int32)(unsafe.Pointer(rule + 4*4)) = int32(7200) + } +} + +func _getname(tls *TLS, d uintptr, p uintptr) { + var i, v3 int32 + _, _ = i, v3 + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('<') { + *(*uintptr)(unsafe.Pointer(p))++ + i = 0 + for { + if !(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i)))) != int32('>')) { + break + } + if i < int32(TZNAME_MAX) { + *(*int8)(unsafe.Pointer(d + uintptr(i))) = *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _1 + _1: + ; + i++ + } + if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 { + *(*uintptr)(unsafe.Pointer(p))++ + } + } else { + i = 0 + for { + if !(uint32(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))))|int32(32)-int32('a')) < uint32(26)) { + break + } + if i < int32(TZNAME_MAX) { + *(*int8)(unsafe.Pointer(d + uintptr(i))) = *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _2 + _2: + ; + i++ + } + } + *(*uintptr)(unsafe.Pointer(p)) += uintptr(i) + if i < int32(TZNAME_MAX) { + v3 = i + } else { + v3 = int32(TZNAME_MAX) + } + *(*int8)(unsafe.Pointer(d + uintptr(v3))) = 0 +} + +func _zi_read32(tls *TLS, z uintptr) (r Tuint32_t) { + return uint32(*(*uint8)(unsafe.Pointer(z)))< uint32(Int32FromInt32(PATH_MAX)+Int32FromInt32(1)) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + i = Uint32FromInt32(3) + } + if i >= _old_tz_size { + _old_tz_size *= uint32(2) + if i >= _old_tz_size { + _old_tz_size = i + uint32(1) + } + if _old_tz_size > uint32(Int32FromInt32(PATH_MAX)+Int32FromInt32(2)) { + _old_tz_size = uint32(Int32FromInt32(PATH_MAX) + Int32FromInt32(2)) + } + _old_tz = Xmalloc(tls, _old_tz_size) + } + if _old_tz != 0 { + Xmemcpy(tls, _old_tz, *(*uintptr)(unsafe.Pointer(bp + 288)), i+uint32(1)) + } + posix_form = 0 + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) != int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 292)) = *(*uintptr)(unsafe.Pointer(bp + 288)) + _getname(tls, bp+301, bp+292) + if *(*uintptr)(unsafe.Pointer(bp + 292)) != *(*uintptr)(unsafe.Pointer(bp + 288)) && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292))))) == int32('+') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292))))) == int32('-') || BoolInt32(uint32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292)))))-uint32('0') < uint32(10)) != 0 || !(Xstrcmp(tls, bp+301, __ccgo_ts+1588) != 0) || !(Xstrcmp(tls, bp+301, __ccgo_ts+1592) != 0)) { + posix_form = int32(1) + } + } + /* Non-suid can use an absolute tzfile pathname or a relative + * pathame beginning with "."; in secure mode, only the + * standard path will be searched. */ + if !(posix_form != 0) { + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 288))++ + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('/') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('.') { + if !(X__libc.Fsecure != 0) || !(Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), __ccgo_ts+1573) != 0) { + map1 = X__map_file(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), uintptr(unsafe.Pointer(&_map_size))) + } + } else { + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) + if l <= uint32(NAME_MAX) && !(Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), int32('.')) != 0) { + Xmemcpy(tls, pathname, *(*uintptr)(unsafe.Pointer(bp + 288)), l+uint32(1)) + *(*int8)(unsafe.Pointer(pathname + uintptr(l))) = 0 + try = uintptr(unsafe.Pointer(&_search)) + for { + if !(!(map1 != 0) && *(*int8)(unsafe.Pointer(try)) != 0) { + break + } + l = Xstrlen(tls, try) + Xmemcpy(tls, pathname-uintptr(l), try, l) + map1 = X__map_file(tls, pathname-uintptr(l), uintptr(unsafe.Pointer(&_map_size))) + goto _3 + _3: + ; + try += uintptr(l + uint32(1)) + } + } + } + if !(map1 != 0) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + } + if map1 != 0 && (_map_size < uint32(44) || Xmemcmp(tls, map1, __ccgo_ts+1596, uint32(4)) != 0) { + X__munmap(tls, map1, _map_size) + map1 = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + _zi = map1 + if map1 != 0 { + scale = int32(2) + if int32(*(*uint8)(unsafe.Pointer(map1 + 4))) != int32('1') { + *(*[6]uint8)(unsafe.Pointer(bp)) = [6]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(8), + 3: uint8(5), + 4: uint8(6), + 5: uint8(1), + } + skip = _zi_dotprod(tls, _zi+uintptr(20), bp, uint32(6)) + _trans = _zi + uintptr(skip) + uintptr(44) + uintptr(44) + scale++ + } else { + _trans = _zi + uintptr(44) + } + _index = _trans + uintptr(_zi_read32(tls, _trans-uintptr(12))<> scale) + if !(n != 0) { + if alt != 0 { + *(*Tsize_t)(unsafe.Pointer(alt)) = uint32(0) + } + return uint32(0) + } + /* Binary search for 'most-recent rule before t'. */ + for n > uint32(1) { + m = a + n/uint32(2) + x = uint64(_zi_read32(tls, _trans+uintptr(m<> scale) + if a == n-uint32(1) { + return uint32(-Int32FromInt32(1)) + } + if a == uint32(0) { + x = uint64(_zi_read32(tls, _trans)) + if scale == int32(3) { + x = x<>(m-int32(1))&int32(1) + } + return r +} + +/* Convert a POSIX DST rule plus year to seconds since epoch. */ + +func _rule_to_secs(tls *TLS, rule uintptr, year int32) (r int64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var d, days, m, n, wday, x int32 + var t int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _, _, _, _ = d, days, m, n, t, wday, x + t = X__year_to_secs(tls, int64(year), bp) + if *(*int32)(unsafe.Pointer(rule)) != int32('M') { + x = *(*int32)(unsafe.Pointer(rule + 1*4)) + if *(*int32)(unsafe.Pointer(rule)) == int32('J') && (x < int32(60) || !(*(*int32)(unsafe.Pointer(bp)) != 0)) { + x-- + } + t += int64(int32(86400) * x) + } else { + m = *(*int32)(unsafe.Pointer(rule + 1*4)) + n = *(*int32)(unsafe.Pointer(rule + 2*4)) + d = *(*int32)(unsafe.Pointer(rule + 3*4)) + t += int64(X__month_to_secs(tls, m-int32(1), *(*int32)(unsafe.Pointer(bp)))) + wday = int32((t+int64(Int32FromInt32(4)*Int32FromInt32(86400)))%int64(Int32FromInt32(7)*Int32FromInt32(86400))) / int32(86400) + days = d - wday + if days < 0 { + days += int32(7) + } + if n == int32(5) && days+int32(28) >= _days_in_month1(tls, m, *(*int32)(unsafe.Pointer(bp))) { + n = int32(4) + } + t += int64(int32(86400) * (days + int32(7)*(n-int32(1)))) + } + t += int64(*(*int32)(unsafe.Pointer(rule + 4*4))) + return t +} + +/* Determine the time zone in effect for a given time in seconds since the + * epoch. It can be given in local or universal time. The results will + * indicate whether DST is in effect at the queried time, and will give both + * the GMT offset for the active zone/DST rule and the opposite DST. This + * enables a caller to efficiently adjust for the case where an explicit + * DST specification mismatches what would be in effect at the time. */ + +func X__secs_to_zone(tls *TLS, t int64, local int32, isdst uintptr, offset uintptr, oppoff uintptr, zonename uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v local=%v isdst=%v offset=%v oppoff=%v zonename=%v, (%v:)", tls, t, local, isdst, offset, oppoff, zonename, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tsize_t + var t0, t1, y int64 + var _ /* alt at bp+0 */ Tsize_t + _, _, _, _ = i, t0, t1, y + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if _zi != 0 { + i = _scan_trans(tls, t, local, bp) + if i != uint32(-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(isdst)) = int32(*(*uint8)(unsafe.Pointer(_types + uintptr(uint32(6)*i+uint32(4))))) + *(*int32)(unsafe.Pointer(offset)) = int32(_zi_read32(tls, _types+uintptr(uint32(6)*i))) + *(*uintptr)(unsafe.Pointer(zonename)) = _abbrevs + uintptr(*(*uint8)(unsafe.Pointer(_types + uintptr(uint32(6)*i+uint32(5))))) + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = int32(_zi_read32(tls, _types+uintptr(uint32(6)**(*Tsize_t)(unsafe.Pointer(bp))))) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + } + } + if !(Xdaylight != 0) { + goto std + } + /* FIXME: may be broken if DST changes right at year boundary? + * Also, this could be more efficient.*/ + y = t/int64(31556952) + int64(70) + for X__year_to_secs(tls, y, uintptr(0)) > t { + y-- + } + for X__year_to_secs(tls, y+int64(1), uintptr(0)) < t { + y++ + } + t0 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r0)), int32(y)) + t1 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r12)), int32(y)) + if !(local != 0) { + t0 += int64(Xtimezone) + t1 += int64(_dst_off) + } + if t0 < t1 { + if t >= t0 && t < t1 { + goto dst + } + goto std + } else { + if t >= t1 && t < t0 { + goto std + } + goto dst + } + goto std +std: + ; + *(*int32)(unsafe.Pointer(isdst)) = 0 + *(*int32)(unsafe.Pointer(offset)) = -Xtimezone + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = -_dst_off + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[0] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + goto dst +dst: + ; + *(*int32)(unsafe.Pointer(isdst)) = int32(1) + *(*int32)(unsafe.Pointer(offset)) = -_dst_off + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = -Xtimezone + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[int32(1)] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func ___tzset(tls *TLS) { + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func X__tm_to_tzname(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = (*Ttm)(unsafe.Pointer(tm)).F__tm_zone + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if p != uintptr(unsafe.Pointer(&X__utc)) && p != Xtzname[0] && p != Xtzname[int32(1)] && (!(_zi != 0) || uint32(p)-uint32(_abbrevs) >= uint32(int32(_abbrevs_end)-int32(_abbrevs))) { + p = __ccgo_ts + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return p +} + +func X__year_to_secs(tls *TLS, year int64, is_leap uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v year=%v is_leap=%v, (%v:)", tls, year, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var centuries, cycles, leaps, leaps1, rem, y int32 + var _ /* dummy at bp+0 */ int32 + _, _, _, _, _, _ = centuries, cycles, leaps, leaps1, rem, y + if uint64(year)-uint64(2) <= uint64(136) { + y = int32(year) + leaps = (y - int32(68)) >> int32(2) + if !((y-Int32FromInt32(68))&Int32FromInt32(3) != 0) { + leaps-- + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + } + } else { + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + } + } + return int64(int32(31536000)*(y-int32(70)) + int32(86400)*leaps) + } + if !(is_leap != 0) { + is_leap = bp + } + cycles = int32((year - int64(100)) / int64(400)) + rem = int32((year - int64(100)) % int64(400)) + if rem < 0 { + cycles-- + rem += int32(400) + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + centuries = 0 + leaps1 = 0 + } else { + if rem >= int32(200) { + if rem >= int32(300) { + centuries = int32(3) + rem -= int32(300) + } else { + centuries = int32(2) + rem -= int32(200) + } + } else { + if rem >= int32(100) { + centuries = int32(1) + rem -= int32(100) + } else { + centuries = 0 + } + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + leaps1 = 0 + } else { + leaps1 = int32(uint32(rem) / uint32(4)) + rem = int32(uint32(rem) % Uint32FromUint32(4)) + *(*int32)(unsafe.Pointer(is_leap)) = BoolInt32(!(rem != 0)) + } + } + leaps1 += int32(97)*cycles + int32(24)*centuries - *(*int32)(unsafe.Pointer(is_leap)) + return (year-int64(100))*int64(31536000) + int64(leaps1)*int64(86400) + int64(946684800) + int64(86400) +} + +func Xasctime(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, uintptr(unsafe.Pointer(&_buf9))) +} + +var _buf9 [26]int8 + +func X__asctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xsnprintf(tls, buf, uint32(26), __ccgo_ts+1601, VaList(bp+8, X__nl_langinfo_l(tls, int32(ABDAY_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_wday, uintptr(unsafe.Pointer(&X__c_locale))), X__nl_langinfo_l(tls, int32(ABMON_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_mon, uintptr(unsafe.Pointer(&X__c_locale))), (*Ttm)(unsafe.Pointer(tm)).Ftm_mday, (*Ttm)(unsafe.Pointer(tm)).Ftm_hour, (*Ttm)(unsafe.Pointer(tm)).Ftm_min, (*Ttm)(unsafe.Pointer(tm)).Ftm_sec, int32(1900)+(*Ttm)(unsafe.Pointer(tm)).Ftm_year)) >= int32(26) { + /* ISO C requires us to use the above format string, + * even if it will not fit in the buffer. Thus asctime_r + * is _supposed_ to crash if the fields in tm are too large. + * We follow this behavior and crash "gracefully" to warn + * application developers that they may not be so lucky + * on other implementations (e.g. stack smashing..). + */ + _a_crash(tls) + } + return buf +} + +func Xasctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, buf) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xclock(tls *TLS) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if X__clock_gettime(tls, int32(CLOCK_PROCESS_CPUTIME_ID), bp) != 0 { + return -int32(1) + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(0x7fffffff)/Int32FromInt32(1000000)) || int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000)) > int64(0x7fffffff)-int64(1000000)*(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec { + return -int32(1) + } + return int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec*int64(1000000) + int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000))) +} + +func Xclock_getcpuclockid(tls *TLS, pid Tpid_t, clk uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v clk=%v, (%v:)", tls, pid, clk, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id Tclockid_t + var ret int32 + var _ /* ts at bp+0 */ Ttimespec + _, _ = id, ret + id = int32(uint32(-pid-Int32FromInt32(1))*uint32(8) + uint32(2)) + ret = int32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(7)), id, int32(bp))) + if ret == -int32(EINVAL) { + ret = -int32(ESRCH) + } + if ret != 0 { + return -ret + } + *(*Tclockid_t)(unsafe.Pointer(clk)) = id + return 0 +} + +func Xclock_getres(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts32 at bp+0 */ [2]int32 + _ = r + /* On a 32-bit arch, use the old syscall if it exists. */ + if Int32FromInt32(__NR_timer_create)+Int32FromInt32(7) != int32(SYS_clock_getres_time64) { + r = int32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(7)), clk, int32(bp))) + if !(r != 0) && ts != 0 { + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp)))[0]) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp)))[int32(1)] + } + return X__syscall_ret(tls, uint32(r)) + } + /* If reaching this point, it's a 64-bit arch or time64-only + * 32-bit arch and we can get result directly into timespec. */ + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(7)), clk, int32(ts)))) +} + +func X__clock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts32 at bp+0 */ [2]int32 + _ = r + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_clock_gettime64), clk, int32(ts))) + } + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(6) == int32(SYS_clock_gettime64)) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(6)), clk, int32(bp))) + if r == -int32(ENOSYS) && clk == CLOCK_REALTIME { + r = int32(X__syscall2(tls, int32(SYS_gettimeofday_time32), int32(bp), int32(Int32FromInt32(0)))) + *(*int32)(unsafe.Pointer(bp + 1*4)) *= int32(1000) + } + if !(r != 0) { + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp)))[0]) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp)))[int32(1)] + return r + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xclock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_gettime(tls, clk, ts) +} + +func X__clock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var extra int64 + var ns, r int32 + var s Ttime_t + var v1, v2 uint64 + var _ /* ts32 at bp+16 */ [2]int32 + _, _, _, _, _, _ = extra, ns, r, s, v1, v2 + if clk == int32(CLOCK_THREAD_CPUTIME_ID) { + return int32(EINVAL) + } + s = (*Ttimespec)(unsafe.Pointer(req)).Ftv_sec + ns = (*Ttimespec)(unsafe.Pointer(req)).Ftv_nsec + r = -int32(ENOSYS) + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(8) == int32(SYS_clock_nanosleep_time64)) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + r = int32(___syscall_cp(tls, int32(SYS_clock_nanosleep_time64), clk, flags, int32(bp), int32(rem), 0, 0)) + } + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(8) == int32(SYS_clock_nanosleep_time64)) || r != -int32(ENOSYS) { + return -r + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v1 = uint64(s) + } else { + v1 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + extra = s - int64(int32(v1)) + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v2 = uint64(s) + } else { + v2 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v2), + 1: ns, + } + if clk == CLOCK_REALTIME && !(flags != 0) { + r = int32(___syscall_cp(tls, int32(SYS_nanosleep), int32(bp+16), int32(bp+16), 0, 0, 0, 0)) + } else { + r = int32(___syscall_cp(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(8)), clk, flags, int32(bp+16), int32(bp+16), 0, 0)) + } + if r == -int32(EINTR) && rem != 0 && !(flags&Int32FromInt32(TIMER_ABSTIME) != 0) { + (*Ttimespec)(unsafe.Pointer(rem)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp + 16)))[0]) + extra + (*Ttimespec)(unsafe.Pointer(rem)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp + 16)))[int32(1)] + } + return -r +} + +func Xclock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_nanosleep(tls, clk, flags, req, rem) +} + +func Xclock_settime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r int32 + var s Ttime_t + _, _, _ = ns, r, s + s = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + ns = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + r = -int32(ENOSYS) + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(5) == int32(SYS_clock_settime64)) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + r = int32(X__syscall2(tls, int32(SYS_clock_settime64), clk, int32(bp))) + } + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(5) == int32(SYS_clock_settime64)) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(5)), clk, int32(bp+16)))) +} + +func Xctime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var tm uintptr + _ = tm + tm = Xlocaltime(tls, t) + if !(tm != 0) { + return uintptr(0) + } + return Xasctime(tls, tm) +} + +func Xctime_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var tm_p, v1 uintptr + var _ /* tm at bp+0 */ Ttm + _, _ = tm_p, v1 + tm_p = Xlocaltime_r(tls, t, bp) + if tm_p != 0 { + v1 = Xasctime_r(tls, tm_p, buf) + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xdifftime(tls *TLS, t1 Ttime_t, t0 Ttime_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t0=%v, (%v:)", tls, t1, t0, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(t1 - t0) +} + +type Ttimeb = struct { + Ftime Ttime_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func Xftime(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int16 + var _ /* ts at bp+0 */ Ttimespec + _ = v1 + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeb)(unsafe.Pointer(tp)).Ftime = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeb)(unsafe.Pointer(tp)).Fmillitm = uint16((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int32(1000000)) + v1 = Int16FromInt32(0) + (*Ttimeb)(unsafe.Pointer(tp)).Fdstflag = v1 + (*Ttimeb)(unsafe.Pointer(tp)).Ftimezone = v1 + return 0 +} + +func Xgetdate(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var datemsk, f, p, ret uintptr + var _ /* cs at bp+100 */ int32 + var _ /* fmt at bp+0 */ [100]int8 + _, _, _, _ = datemsk, f, p, ret + ret = uintptr(0) + datemsk = Xgetenv(tls, __ccgo_ts+1633) + f = uintptr(0) + _pthread_setcancelstate(tls, PTHREAD_CANCEL_DEFERRED, bp+100) + if !(datemsk != 0) { + Xgetdate_err = int32(1) + goto out + } + f = Xfopen(tls, datemsk, __ccgo_ts+315) + if !(f != 0) { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOMEM) { + Xgetdate_err = int32(6) + } else { + Xgetdate_err = int32(2) + } + goto out + } + for Xfgets(tls, bp, int32(100), f) != 0 { + p = Xstrptime(tls, s, bp, uintptr(unsafe.Pointer(&_tmbuf))) + if p != 0 && !(*(*int8)(unsafe.Pointer(p)) != 0) { + ret = uintptr(unsafe.Pointer(&_tmbuf)) + goto out + } + } + if Xferror(tls, f) != 0 { + Xgetdate_err = int32(5) + } else { + Xgetdate_err = int32(7) + } + goto out +out: + ; + if f != 0 { + Xfclose(tls, f) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 100)), uintptr(0)) + return ret +} + +var _tmbuf Ttm + +func Xgettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if !(tv != 0) { + return 0 + } + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int32(1000)) + return 0 +} + +func Xgmtime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, uintptr(unsafe.Pointer(&_tm))) +} + +var _tm Ttm + +func X__gmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t)), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_zone = uintptr(unsafe.Pointer(&X__utc)) + return tm +} + +func Xgmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, tm) +} + +func Xlocaltime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, uintptr(unsafe.Pointer(&_tm1))) +} + +var _tm1 Ttm + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__localtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Reject time_t values whose year would overflow int because + * __secs_to_zone cannot safely handle them. */ + if *(*Ttime_t)(unsafe.Pointer(t)) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || *(*Ttime_t)(unsafe.Pointer(t)) > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + X__secs_to_zone(tls, *(*Ttime_t)(unsafe.Pointer(t)), 0, tm+32, tm+36, uintptr(0), tm+40) + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t))+int64((*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + return tm +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xlocaltime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, tm) +} + +func Xmktime(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t int64 + var _ /* new at bp+0 */ Ttm + var _ /* opp at bp+44 */ int32 + _ = t + t = X__tm_to_secs(tls, tm) + X__secs_to_zone(tls, t, int32(1), bp+32, bp+36, bp+44, bp+40) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst >= 0 && (*(*Ttm)(unsafe.Pointer(bp))).Ftm_isdst != (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst { + t -= int64(*(*int32)(unsafe.Pointer(bp + 44)) - (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff) + } + t -= int64((*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff) + if t != t { + goto error + } + X__secs_to_zone(tls, t, 0, bp+32, bp+36, bp+44, bp+40) + if X__secs_to_tm(tls, t+int64((*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff), bp) < 0 { + goto error + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return t + goto error +error: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) +} + +func Xnanosleep(tls *TLS, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v rem=%v, (%v:)", tls, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(-X__clock_nanosleep(tls, CLOCK_REALTIME, 0, req, rem))) +} + +func _is_leap(tls *TLS, y int32) (r int32) { + /* Avoid overflow */ + if y > Int32FromInt32(INT_MAX)-Int32FromInt32(1900) { + y -= int32(2000) + } + y += int32(1900) + return BoolInt32(!(y%Int32FromInt32(4) != 0) && (y%int32(100) != 0 || !(y%Int32FromInt32(400) != 0))) +} + +func _week_num(tls *TLS, tm uintptr) (r int32) { + var dec31, jan1, val int32 + _, _, _ = dec31, jan1, val + val = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + /* If 1 Jan is just 1-3 days past Monday, + * the previous week is also in this year. */ + if (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(371)-uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)-uint32(2))%uint32(7) <= uint32(2) { + val++ + } + if !(val != 0) { + val = int32(52) + /* If 31 December of prev year a Thursday, + * or Friday of a leap year, then the + * prev year has 53 weeks. */ + dec31 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) - uint32(1)) % uint32(7)) + if dec31 == int32(4) || dec31 == int32(5) && _is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year%int32(400)-int32(1)) != 0 { + val++ + } + } else { + if val == int32(53) { + /* If 1 January is not a Thursday, and not + * a Wednesday of a leap year, then this + * year has only 52 weeks. */ + jan1 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(371) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)) % uint32(7)) + if jan1 != int32(4) && (jan1 != int32(3) || !(_is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year) != 0)) { + val = int32(1) + } + } + } + return val +} + +func X__strftime_fmt_1(tls *TLS, s uintptr, l uintptr, f int32, tm uintptr, loc Tlocale_t, pad int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v tm=%v loc=%v pad=%v, (%v:)", tls, s, l, f, tm, loc, pad, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, fmt, v4, v5 uintptr + var def_pad, width, v1, v2, v6, v7 int32 + var item Tnl_item + var val int64 + _, _, _, _, _, _, _, _, _, _, _, _ = d, def_pad, fmt, item, val, width, v1, v2, v4, v5, v6, v7 + fmt = __ccgo_ts + 1495 + width = int32(2) + def_pad = int32('0') + switch f { + case int32('a'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(ABDAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('A'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(DAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('h'): + fallthrough + case int32('b'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(ABMON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('B'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(MON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('c'): + item = int32(D_T_FMT) + goto nl_strftime + case int32('C'): + val = (int64(1900) + int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year)) / int64(100) + goto number + case int32('e'): + def_pad = int32('_') + fallthrough + case int32('d'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday) + goto number + case int32('D'): + fmt = __ccgo_ts + 1641 + goto recu_strftime + case int32('F'): + fmt = __ccgo_ts + 1650 + goto recu_strftime + case int32('g'): + fallthrough + case int32('G'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday < int32(3) && _week_num(tls, tm) != int32(1) { + val-- + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday > int32(360) && _week_num(tls, tm) == int32(1) { + val++ + } + } + if f == int32('g') { + val %= int64(100) + } else { + width = int32(4) + } + goto number + case int32('H'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + goto number + case int32('l'): + def_pad = int32('_') + fallthrough + case int32('I'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + if !(val != 0) { + val = int64(12) + } else { + if val > int64(12) { + val -= int64(12) + } + } + goto number + case int32('j'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_yday + int32(1)) + width = int32(3) + goto number + case int32('k'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + def_pad = int32('_') + goto number + case int32('m'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mon + int32(1)) + goto number + case int32('M'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + goto number + case int32('n'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 301 + case int32('p'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v1 = int32(PM_STR) + } else { + v1 = int32(AM_STR) + } + item = v1 + goto nl_strcat + case int32('P'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v2 = int32(PM_STR) + } else { + v2 = int32(AM_STR) + } + item = v2 + fmt = X__nl_langinfo_l(tls, item, loc) + d = s + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + for { + if !(*(*int8)(unsafe.Pointer(fmt)) != 0) { + break + } + v4 = d + d++ + v5 = fmt + fmt++ + *(*int8)(unsafe.Pointer(v4)) = int8(Xtolower(tls, int32(*(*int8)(unsafe.Pointer(v5))))) + goto _3 + _3: + ; + *(*Tsize_t)(unsafe.Pointer(l))++ + } + return s + case int32('r'): + item = int32(T_FMT_AMPM) + goto nl_strftime + case int32('R'): + fmt = __ccgo_ts + 1659 + goto recu_strftime + case int32('s'): + val = X__tm_to_secs(tls, tm) - int64((*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff) + width = int32(1) + goto number + case int32('S'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + goto number + case int32('t'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 1315 + case int32('T'): + fmt = __ccgo_ts + 1665 + goto recu_strftime + case int32('u'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_wday != 0 { + v6 = (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + } else { + v6 = int32(7) + } + val = int64(v6) + width = int32(1) + goto number + case int32('U'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)) / uint32(7)) + goto number + case int32('W'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + goto number + case int32('V'): + val = int64(_week_num(tls, tm)) + goto number + case int32('w'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + width = int32(1) + goto number + case int32('x'): + item = int32(D_FMT) + goto nl_strftime + case int32('X'): + item = int32(T_FMT) + goto nl_strftime + case int32('y'): + val = (int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900)) % int64(100) + if val < 0 { + val = -val + } + goto number + case int32('Y'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if val >= int64(10000) { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1674, VaList(bp+8, val))) + return s + } + width = int32(4) + goto number + case int32('z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + return __ccgo_ts + } + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1680, VaList(bp+8, (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff/int32(3600)*int32(100)+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff%int32(3600)/int32(60)))) + return s + case int32('Z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + return __ccgo_ts + } + fmt = X__tm_to_tzname(tls, tm) + goto string + case int32('%'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 348 + default: + return uintptr(0) + } + goto number +number: + ; + if pad != 0 { + v7 = pad + } else { + v7 = def_pad + } + switch v7 { + case int32('-'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1687, VaList(bp+8, val))) + case int32('_'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1692, VaList(bp+8, width, val))) + case int32('0'): + fallthrough + default: + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1698, VaList(bp+8, width, val))) + break + } + return s + goto nl_strcat +nl_strcat: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto string +string: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = Xstrlen(tls, fmt) + return fmt + goto nl_strftime +nl_strftime: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto recu_strftime +recu_strftime: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = X__strftime_l(tls, s, uint32(100), fmt, tm, loc) + if !(*(*Tsize_t)(unsafe.Pointer(l)) != 0) { + return uintptr(0) + } + return s +} + +func X__strftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var d, l, v10, v12, v2, v7 Tsize_t + var pad, plus, v4, v8 int32 + var t, v3 uintptr + var width uint32 + var v9 bool + var _ /* buf at bp+4 */ [100]int8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+104 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, l, pad, plus, t, width, v10, v12, v2, v3, v4, v7, v8, v9 + l = uint32(0) + for { + if !(l < n) { + break + } + if !(*(*int8)(unsafe.Pointer(f)) != 0) { + *(*int8)(unsafe.Pointer(s + uintptr(l))) = 0 + return l + } + if int32(*(*int8)(unsafe.Pointer(f))) != int32('%') { + v2 = l + l++ + *(*int8)(unsafe.Pointer(s + uintptr(v2))) = *(*int8)(unsafe.Pointer(f)) + goto _1 + } + f++ + pad = 0 + if int32(*(*int8)(unsafe.Pointer(f))) == int32('-') || int32(*(*int8)(unsafe.Pointer(f))) == int32('_') || int32(*(*int8)(unsafe.Pointer(f))) == int32('0') { + v3 = f + f++ + pad = int32(*(*int8)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(int32(*(*int8)(unsafe.Pointer(f))) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f++ + } + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + width = Xstrtoul(tls, f, bp+104, int32(10)) + } else { + width = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 104)) = f + } + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('C') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('F') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('G') || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 104)) != f { + width = uint32(1) + } + } else { + width = uint32(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 104)) + if int32(*(*int8)(unsafe.Pointer(f))) == int32('E') || int32(*(*int8)(unsafe.Pointer(f))) == int32('O') { + f++ + } + t = X__strftime_fmt_1(tls, bp+4, bp, int32(*(*int8)(unsafe.Pointer(f))), tm, loc, pad) + if !(t != 0) { + break + } + if width != 0 { + /* Trim off any sign and leading zeros, then + * count remaining digits to determine behavior + * for the + flag. */ + if int32(*(*int8)(unsafe.Pointer(t))) == int32('+') || int32(*(*int8)(unsafe.Pointer(t))) == int32('-') { + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + for { + if !(int32(*(*int8)(unsafe.Pointer(t))) == int32('0') && uint32(int32(*(*int8)(unsafe.Pointer(t + 1)))-int32('0')) < uint32(10)) { + break + } + goto _5 + _5: + ; + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + if width < *(*Tsize_t)(unsafe.Pointer(bp)) { + width = *(*Tsize_t)(unsafe.Pointer(bp)) + } + d = uint32(0) + for { + if !(uint32(int32(*(*int8)(unsafe.Pointer(t + uintptr(d))))-int32('0')) < uint32(10)) { + break + } + goto _6 + _6: + ; + d++ + } + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*int8)(unsafe.Pointer(s + uintptr(v7))) = int8('-') + width-- + } else { + if v9 = plus != 0; v9 { + if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('C') { + v8 = int32(3) + } else { + v8 = int32(5) + } + } + if v9 && d+(width-*(*Tsize_t)(unsafe.Pointer(bp))) >= uint32(v8) { + v10 = l + l++ + *(*int8)(unsafe.Pointer(s + uintptr(v10))) = int8('+') + width-- + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v12 = l + l++ + *(*int8)(unsafe.Pointer(s + uintptr(v12))) = int8('0') + goto _11 + _11: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) > n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xmemcpy(tls, s+uintptr(l), t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f++ + } + if n != 0 { + if l == n { + l = n - uint32(1) + } + *(*int8)(unsafe.Pointer(s + uintptr(l))) = 0 + } + return uint32(0) +} + +func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, loc) +} + +func Xstrptime(tls *TLS, s uintptr, f uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v tm=%v, (%v:)", tls, s, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, i, min, neg, range1, w, want_century, v1, v2, v45, v46, v5, v53, v6 int32 + var dest, ex, v49, v51, v54, v9 uintptr + var len1 Tsize_t + var v48, v8 bool + var _ /* century at bp+4 */ int32 + var _ /* dummy at bp+0 */ int32 + var _ /* new_f at bp+12 */ uintptr + var _ /* relyear at bp+8 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = adj, dest, ex, i, len1, min, neg, range1, w, want_century, v1, v2, v45, v46, v48, v49, v5, v51, v53, v54, v6, v8, v9 + want_century = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + *(*int32)(unsafe.Pointer(bp + 8)) = 0 + for *(*int8)(unsafe.Pointer(f)) != 0 { + if int32(*(*int8)(unsafe.Pointer(f))) != int32('%') { + v1 = int32(*(*int8)(unsafe.Pointer(f))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if v2 != 0 { + for { + if v8 = *(*int8)(unsafe.Pointer(s)) != 0; v8 { + v5 = int32(*(*int8)(unsafe.Pointer(s))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + } + if !(v8 && v6 != 0) { + break + } + goto _4 + _4: + ; + s++ + } + } else { + if int32(*(*int8)(unsafe.Pointer(s))) != int32(*(*int8)(unsafe.Pointer(f))) { + return uintptr(0) + } else { + s++ + } + } + f++ + continue + } + f++ + if int32(*(*int8)(unsafe.Pointer(f))) == int32('+') { + f++ + } + if BoolInt32(uint32(*(*int8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + w = int32(Xstrtoul(tls, f, bp+12, int32(10))) + f = *(*uintptr)(unsafe.Pointer(bp + 12)) + } else { + w = -int32(1) + } + adj = 0 + v9 = f + f++ + switch int32(*(*int8)(unsafe.Pointer(v9))) { + case int32('A'): + goto _10 + case int32('a'): + goto _11 + case int32('h'): + goto _12 + case int32('B'): + goto _13 + case int32('b'): + goto _14 + case int32('c'): + goto _15 + case int32('C'): + goto _16 + case int32('e'): + goto _17 + case int32('d'): + goto _18 + case int32('D'): + goto _19 + case int32('H'): + goto _20 + case int32('I'): + goto _21 + case int32('j'): + goto _22 + case int32('m'): + goto _23 + case int32('M'): + goto _24 + case int32('t'): + goto _25 + case int32('n'): + goto _26 + case int32('p'): + goto _27 + case int32('r'): + goto _28 + case int32('R'): + goto _29 + case int32('S'): + goto _30 + case int32('T'): + goto _31 + case int32('W'): + goto _32 + case int32('U'): + goto _33 + case int32('w'): + goto _34 + case int32('x'): + goto _35 + case int32('X'): + goto _36 + case int32('y'): + goto _37 + case int32('Y'): + goto _38 + case int32('%'): + goto _39 + default: + goto _40 + } + goto _41 + _11: + ; + _10: + ; + dest = tm + 24 + min = int32(ABDAY_1) + range1 = int32(7) + goto symbolic_range + _14: + ; + _13: + ; + _12: + ; + dest = tm + 16 + min = int32(ABMON_1) + range1 = int32(12) + goto symbolic_range + _15: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _16: + ; + dest = bp + 4 + if w < 0 { + w = int32(2) + } + want_century |= int32(2) + goto numeric_digits + _18: + ; + _17: + ; + dest = tm + 12 + min = int32(1) + range1 = int32(31) + goto numeric_range + _19: + ; + s = Xstrptime(tls, s, __ccgo_ts+1641, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _20: + ; + dest = tm + 8 + min = 0 + range1 = int32(24) + goto numeric_range + _21: + ; + dest = tm + 8 + min = int32(1) + range1 = int32(12) + goto numeric_range + _22: + ; + dest = tm + 28 + min = int32(1) + range1 = int32(366) + adj = int32(1) + goto numeric_range + _23: + ; + dest = tm + 16 + min = int32(1) + range1 = int32(12) + adj = int32(1) + goto numeric_range + _24: + ; + dest = tm + 4 + min = 0 + range1 = int32(60) + goto numeric_range + _26: + ; + _25: + ; + _44: + ; + if v48 = *(*int8)(unsafe.Pointer(s)) != 0; v48 { + v45 = int32(*(*int8)(unsafe.Pointer(s))) + v46 = BoolInt32(v45 == int32(' ') || uint32(v45)-uint32('\t') < uint32(5)) + goto _47 + _47: + } + if !(v48 && v46 != 0) { + goto _42 + } + goto _43 + _43: + ; + s++ + goto _44 + goto _42 + _42: + ; + goto _41 + _27: + ; + ex = Xnl_langinfo(tls, int32(AM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + s += uintptr(len1) + goto _41 + } + ex = Xnl_langinfo(tls, int32(PM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + *(*int32)(unsafe.Pointer(tm + 8)) += int32(12) + s += uintptr(len1) + goto _41 + } + return uintptr(0) + _28: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT_AMPM)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _29: + ; + s = Xstrptime(tls, s, __ccgo_ts+1659, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _30: + ; + dest = tm + min = 0 + range1 = int32(61) + goto numeric_range + _31: + ; + s = Xstrptime(tls, s, __ccgo_ts+1665, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _33: + ; + _32: + ; + /* Throw away result, for now. (FIXME?) */ + dest = bp + min = 0 + range1 = int32(54) + goto numeric_range + _34: + ; + dest = tm + 24 + min = 0 + range1 = int32(7) + goto numeric_range + _35: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _36: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _37: + ; + dest = bp + 8 + w = int32(2) + want_century |= int32(1) + goto numeric_digits + _38: + ; + dest = tm + 20 + if w < 0 { + w = int32(4) + } + adj = int32(1900) + want_century = 0 + goto numeric_digits + _39: + ; + v49 = s + s++ + if int32(*(*int8)(unsafe.Pointer(v49))) != int32('%') { + return uintptr(0) + } + goto _41 + _40: + ; + return uintptr(0) + goto numeric_range + numeric_range: + ; + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) = 0 + i = int32(1) + for { + if !(i <= min+range1 && BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v51 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*int8)(unsafe.Pointer(v51))) - int32('0') + goto _50 + _50: + ; + i *= int32(10) + } + if uint32(*(*int32)(unsafe.Pointer(dest))-min) >= uint32(range1) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + switch int32(dest) - int32(tm) { + case int32(uint32(UintptrFromInt32(0) + 28)): + } + goto update + goto numeric_digits + numeric_digits: + ; + neg = 0 + if int32(*(*int8)(unsafe.Pointer(s))) == int32('+') { + s++ + } else { + if int32(*(*int8)(unsafe.Pointer(s))) == int32('-') { + neg = int32(1) + s++ + } + } + if !(BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + v53 = Int32FromInt32(0) + i = v53 + *(*int32)(unsafe.Pointer(dest)) = v53 + for { + if !(i < w && BoolInt32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v54 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*int8)(unsafe.Pointer(v54))) - int32('0') + goto _52 + _52: + ; + i++ + } + if neg != 0 { + *(*int32)(unsafe.Pointer(dest)) = -*(*int32)(unsafe.Pointer(dest)) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + goto update + goto symbolic_range + symbolic_range: + ; + i = int32(2)*range1 - int32(1) + for { + if !(i >= 0) { + break + } + ex = Xnl_langinfo(tls, min+i) + len1 = Xstrlen(tls, ex) + if Xstrncasecmp(tls, s, ex, len1) != 0 { + goto _55 + } + s += uintptr(len1) + *(*int32)(unsafe.Pointer(dest)) = i % range1 + break + goto _55 + _55: + ; + i-- + } + if i < 0 { + return uintptr(0) + } + goto update + goto update + update: + ; + //FIXME + _41: + } + if want_century != 0 { + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = *(*int32)(unsafe.Pointer(bp + 8)) + if want_century&int32(2) != 0 { + *(*int32)(unsafe.Pointer(tm + 20)) += *(*int32)(unsafe.Pointer(bp + 4))*int32(100) - int32(1900) + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year <= int32(68) { + *(*int32)(unsafe.Pointer(tm + 20)) += int32(100) + } + } + } + return s +} + +func Xtime(tls *TLS, t uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + X__clock_gettime(tls, CLOCK_REALTIME, bp) + if t != 0 { + *(*Ttime_t)(unsafe.Pointer(t)) = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec +} + +func Xtimegm(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t int64 + var _ /* new at bp+0 */ Ttm1 + _ = t + t = X__tm_to_secs(tls, tm) + if X__secs_to_tm(tls, t, bp) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + *(*Ttm1)(unsafe.Pointer(tm)) = *(*Ttm1)(unsafe.Pointer(bp)) + (*Ttm1)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_gmtoff = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_zone = uintptr(unsafe.Pointer(&X__utc)) + return t +} + +func Xtimer_delete(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + _a_store(tls, td+92, AtomicLoadPInt32(td+92)|(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))) + X__syscall2(tls, int32(SYS_tkill), (*t__pthread)(unsafe.Pointer(td)).Ftid, int32(Int32FromInt32(SIGTIMER))) + return 0 + } + return int32(X__syscall1(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(4)), int32(t))) +} + +func Xtimer_getoverrun(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+92) & Int32FromInt32(INT_MAX))) + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(3)), int32(t)))) +} + +func Xtimer_gettime(tls *TLS, t Ttimer_t, val uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val=%v, (%v:)", tls, t, val, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var td Tpthread_t + var _ /* val32 at bp+0 */ [4]int32 + _, _ = r, td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+92) & Int32FromInt32(INT_MAX))) + } + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_timer_gettime64), int32(t), int32(val))) + } + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(2) == int32(SYS_timer_gettime64)) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(2)), int32(t), int32(bp))) + if !(r != 0) { + (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(2)), int32(t), int32(val)))) +} + +func Xtimer_settime(tls *TLS, t Ttimer_t, flags int32, val uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val=%v old=%v, (%v:)", tls, t, flags, val, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var ins, r, vns int32 + var is, vs Ttime_t + var td Tpthread_t + var _ /* old32 at bp+48 */ [4]int32 + _, _, _, _, _, _ = ins, is, r, td, vns, vs + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+92) & Int32FromInt32(INT_MAX))) + } + is = (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_sec + vs = (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_sec + ins = (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_nsec + vns = (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_nsec + r = -int32(ENOSYS) + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(1) == int32(SYS_timer_settime64)) || !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || Bool(uint32(8) > uint32(4)) && old != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: int64(ins), + 2: vs, + 3: int64(vns), + } + r = int32(X__syscall4(tls, int32(SYS_timer_settime64), int32(t), flags, int32(bp), int32(old))) + } + if Bool(Int32FromInt32(__NR_timer_create)+Int32FromInt32(1) == int32(SYS_timer_settime64)) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(is), + 1: ins, + 2: int32(vs), + 3: vns, + } + r = int32(X__syscall4(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(1)), int32(t), flags, int32(bp+32), int32(bp+48))) + if !(r != 0) && old != 0 { + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[0]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(Int32FromInt32(__NR_timer_create)+Int32FromInt32(1)), int32(t), flags, int32(val), int32(old)))) +} + +type Ttms = struct { + Ftms_utime Tclock_t + Ftms_stime Tclock_t + Ftms_cutime Tclock_t + Ftms_cstime Tclock_t +} + +func Xtimes(tls *TLS, tms uintptr) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v tms=%v, (%v:)", tls, tms, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall1(tls, int32(SYS_times), int32(tms)) +} + +// C documentation +// +// /* There is no other implemented value than TIME_UTC; all other values +// * are considered erroneous. */ +func Xtimespec_get(tls *TLS, ts uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ts=%v base=%v, (%v:)", tls, ts, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v1 int32 + _, _ = ret, v1 + if base != int32(TIME_UTC) { + return 0 + } + ret = X__clock_gettime(tls, CLOCK_REALTIME, ts) + if ret < 0 { + v1 = 0 + } else { + v1 = base + } + return v1 +} + +type Tutimbuf = struct { + Factime Ttime_t + Fmodtime Ttime_t +} + +func Xutime(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if times != 0 { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Factime, + }, + 1: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Fmodtime, + }, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), path, v1, 0) +} + +func X__wcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var l, v2, v6, v7, v9 Tsize_t + var pad, plus, v4 int32 + var t, t_mb, v3 uintptr + var width uint32 + var _ /* buf at bp+4 */ [100]int8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+504 */ uintptr + var _ /* wbuf at bp+104 */ [100]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _ = l, pad, plus, t, t_mb, width, v2, v3, v4, v6, v7, v9 + l = uint32(0) + for { + if !(l < n) { + break + } + if !(*(*Twchar_t)(unsafe.Pointer(f)) != 0) { + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + return l + } + if *(*Twchar_t)(unsafe.Pointer(f)) != int32('%') { + v2 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v2)*4)) = *(*Twchar_t)(unsafe.Pointer(f)) + goto _1 + } + f += 4 + pad = 0 + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('_') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('0') { + v3 = f + f += 4 + pad = *(*Twchar_t)(unsafe.Pointer(v3)) + } + v4 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(f)) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f += 4 + } + width = Xwcstoul(tls, f, bp+504, int32(10)) + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == int32('C') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == int32('F') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == int32('G') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 504)) != f { + width = uint32(1) + } + } else { + width = uint32(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 504)) + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('E') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('O') { + f += 4 + } + t_mb = X__strftime_fmt_1(tls, bp+4, bp, *(*Twchar_t)(unsafe.Pointer(f)), tm, loc, pad) + if !(t_mb != 0) { + break + } + *(*Tsize_t)(unsafe.Pointer(bp)) = Xmbstowcs(tls, bp+104, t_mb, Uint32FromInt64(400)/Uint32FromInt64(4)) + if *(*Tsize_t)(unsafe.Pointer(bp)) == uint32(-Int32FromInt32(1)) { + return uint32(0) + } + t = bp + 104 + if width != 0 { + for { + if !(*(*Twchar_t)(unsafe.Pointer(t)) == int32('+') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('0') && *(*Twchar_t)(unsafe.Pointer(t + 1*4)) != 0) { + break + } + goto _5 + _5: + ; + t += 4 + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + width-- + if plus != 0 && (*Ttm)(unsafe.Pointer(tm)).Ftm_year >= Int32FromInt32(10000)-Int32FromInt32(1900) { + v6 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v6)*4)) = int32('+') + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v7)*4)) = int32('-') + } else { + width++ + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v9 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v9)*4)) = int32('0') + goto _8 + _8: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) >= n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xwmemcpy(tls, s+uintptr(l)*4, t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f += 4 + } + if n != 0 { + if l == n { + l = n - uint32(1) + } + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + } + return uint32(0) +} + +func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, s, n, f, tm, loc) +} + +func X_exit(tls *TLS, status int32) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + } + X_Exit(tls, status) +} + +func Xaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_access), int32(filename), amode))) +} + +func Xacct(tls *TLS, filename uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v, (%v:)", tls, filename, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_acct), int32(filename)))) +} + +func Xalarm(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_value: Ttimeval{ + Ftv_sec: int64(seconds), + }, + } + *(*Titimerval)(unsafe.Pointer(bp + 32)) = Titimerval{} + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec + BoolInt64(!!((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec != 0))) +} + +func Xchdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chdir), int32(path)))) +} + +func Xchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_chown32), int32(path), int32(uid), int32(gid)))) +} + +func _dummy12(tls *TLS, fd int32) (r int32) { + return fd +} + +func Xclose(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + fd = _dummy12(tls, fd) + r = int32(___syscall_cp(tls, int32(SYS_close), fd, 0, 0, 0, 0, 0)) + if r == -int32(EINTR) { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xctermid(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if s != 0 { + v1 = Xstrcpy(tls, s, __ccgo_ts+292) + } else { + v1 = __ccgo_ts + 292 + } + return v1 +} + +func Xdup(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_dup), fd))) +} + +func Xdup2(tls *TLS, old int32, new1 int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + for { + v1 = int32(X__syscall2(tls, int32(SYS_dup2), old, new1)) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__dup3(tls *TLS, old int32, new1 int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v2 int32 + _, _, _ = r, v1, v2 + if old == new1 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if flags != 0 { + for { + v1 = int32(X__syscall3(tls, int32(SYS_dup3), old, new1, flags)) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + if r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if flags & ^Int32FromInt32(O_CLOEXEC) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + } + for { + v2 = int32(X__syscall2(tls, int32(SYS_dup2), old, new1)) + r = v2 + if !(v2 == -int32(EBUSY)) { + break + } + } + if r >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), new1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xdup3(tls *TLS, old int32, new1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dup3(tls, old, new1, flags) +} + +type Tctx1 = struct { + Ffd int32 + Ffilename uintptr + Famode int32 + Fp int32 +} + +func _checker(tls *TLS, p uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c uintptr + var _ /* ret at bp+0 */ int32 + _ = c + c = p + if X__syscall2(tls, int32(SYS_setregid32), X__syscall0(tls, int32(SYS_getegid32)), int32(-Int32FromInt32(1))) != 0 || X__syscall2(tls, int32(SYS_setreuid32), X__syscall0(tls, int32(SYS_geteuid32)), int32(-Int32FromInt32(1))) != 0 { + X__syscall1(tls, int32(SYS_exit), int32(Int32FromInt32(1))) + } + *(*int32)(unsafe.Pointer(bp)) = int32(X__syscall4(tls, int32(SYS_faccessat), (*Tctx1)(unsafe.Pointer(c)).Ffd, int32((*Tctx1)(unsafe.Pointer(c)).Ffilename), (*Tctx1)(unsafe.Pointer(c)).Famode, int32(Int32FromInt32(0)))) + X__syscall3(tls, int32(SYS_write), (*Tctx1)(unsafe.Pointer(c)).Fp, int32(bp), int32(Uint32FromInt64(4))) + return 0 +} + +func Xfaccessat(tls *TLS, fd int32, filename uintptr, amode int32, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v amode=%v flag=%v, (%v:)", tls, fd, filename, amode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if flag != 0 { + ret = int32(X__syscall4(tls, int32(SYS_faccessat2), fd, int32(filename), amode, flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + } + if flag & ^Int32FromInt32(AT_EACCESS) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_faccessat), fd, int32(filename), amode))) +} + +func Xfchdir(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]int8 + _ = ret + ret = int32(X__syscall1(tls, int32(SYS_fchdir), fd)) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chdir), int32(bp)))) +} + +func Xfchown(tls *TLS, fd int32, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v uid=%v gid=%v, (%v:)", tls, fd, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]int8 + _ = ret + ret = int32(X__syscall3(tls, int32(SYS_fchown32), fd, int32(uid), int32(gid))) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_chown32), int32(bp), int32(uid), int32(gid)))) +} + +func Xfchownat(tls *TLS, fd int32, path uintptr, uid Tuid_t, gid Tgid_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v uid=%v gid=%v flag=%v, (%v:)", tls, fd, path, uid, gid, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fchownat), fd, int32(path), int32(uid), int32(gid), flag))) +} + +func Xfdatasync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fdatasync), fd, 0, 0, 0, 0, 0))) +} + +func Xfsync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fsync), fd, 0, 0, 0, 0, 0))) +} + +func Xftruncate(tls *TLS, fd int32, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v length=%v, (%v:)", tls, fd, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_ftruncate64), fd, int32(length)))) +} + +func Xgetcwd(tls *TLS, buf uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v, (%v:)", tls, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 int32 + var tmp, v3 uintptr + var v1 t__predefined_size_t + _, _, _, _, _ = ret, tmp, v1, v2, v3 + defer func() { Xrealloc(tls, tmp, 0) }() + if buf != 0 { + v2 = int32(1) + } else { + v2 = int32(PATH_MAX) + } + v1 = uint32(v2) + tmp = Xrealloc(tls, tmp, v1) + if !(buf != 0) { + buf = tmp + size = v1 + } else { + if !(size != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + } + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getcwd), int32(buf), int32(size)))) + if ret < 0 { + return uintptr(0) + } + if ret == 0 || int32(*(*int8)(unsafe.Pointer(buf))) != int32('/') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if buf == tmp { + v3 = Xstrdup(tls, buf) + } else { + v3 = buf + } + return v3 +} + +func Xgetegid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getegid32))) +} + +func Xgeteuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_geteuid32))) +} + +func Xgetgid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getgid32))) +} + +func Xgetgroups(tls *TLS, count int32, list uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v count=%v list=%v, (%v:)", tls, count, list, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getgroups32), count, int32(list)))) +} + +func Xgethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var i Tsize_t + var v2 int8 + var v3 bool + var _ /* uts at bp+0 */ Tutsname1 + _, _, _ = i, v2, v3 + if Xuname(tls, bp) != 0 { + return -int32(1) + } + if len1 > uint32(65) { + len1 = uint32(65) + } + i = uint32(0) + for { + if v3 = i < len1; v3 { + v2 = *(*int8)(unsafe.Pointer(bp + 65 + uintptr(i))) + *(*int8)(unsafe.Pointer(name + uintptr(i))) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i != 0 && i == len1 { + *(*int8)(unsafe.Pointer(name + uintptr(i-uint32(1)))) = 0 + } + return 0 +} + +func Xgetlogin(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetenv(tls, __ccgo_ts+1705) +} + +func Xgetlogin_r(tls *TLS, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v size=%v, (%v:)", tls, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var logname uintptr + _ = logname + logname = Xgetlogin(tls) + if !(logname != 0) { + return int32(ENXIO) + } /* or...? */ + if Xstrlen(tls, logname) >= size { + return int32(ERANGE) + } + Xstrcpy(tls, name, logname) + return 0 +} + +func Xgetpgid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_getpgid), pid))) +} + +func Xgetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall1(tls, int32(SYS_getpgid), int32(Int32FromInt32(0)))) +} + +func Xgetpid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int32(SYS_getpid))) +} + +func Xgetppid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int32(SYS_getppid))) +} + +func Xgetsid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_getsid), pid))) +} + +func Xgetuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getuid32))) +} + +func Xisatty(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r uint32 + var _ /* wsz at bp+0 */ Twinsize + _ = r + r = uint32(X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp))))) + if r == uint32(0) { + return int32(1) + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EBADF) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTTY) + } + return 0 +} + +func Xlchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_lchown32), int32(path), int32(uid), int32(gid)))) +} + +func Xlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_link), int32(existing), int32(new1)))) +} + +func Xlinkat(tls *TLS, fd1 int32, existing uintptr, fd2 int32, new1 uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd1=%v existing=%v fd2=%v new1=%v flag=%v, (%v:)", tls, fd1, existing, fd2, new1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_linkat), fd1, int32(existing), fd2, int32(new1), flag))) +} + +func X__lseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int64 + var _ /* result at bp+0 */ Toff_t + _ = v1 + if X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS__llseek), fd, int32(offset>>Int32FromInt32(32)), int32(offset), int32(bp), whence))) != 0 { + v1 = int64(-int32(1)) + } else { + v1 = *(*Toff_t)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xlseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, fd, offset, whence) +} + +func Xnice(tls *TLS, inc int32) (r int32) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var prio int32 + _ = prio + prio = inc + // Only query old priority if it can affect the result. + // This also avoids issues with integer overflow. + if inc > -Int32FromInt32(2)*Int32FromInt32(NZERO) && inc < Int32FromInt32(2)*Int32FromInt32(NZERO) { + prio += Xgetpriority(tls, PRIO_PROCESS, uint32(0)) + } + if prio > Int32FromInt32(NZERO)-Int32FromInt32(1) { + prio = Int32FromInt32(NZERO) - Int32FromInt32(1) + } + if prio < -int32(NZERO) { + prio = -int32(NZERO) + } + if Xsetpriority(tls, PRIO_PROCESS, uint32(0), prio) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EPERM) + } + return -int32(1) + } else { + return prio + } + return r +} + +func Xpause(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pause), 0, 0, 0, 0, 0, 0))) +} + +func Xpipe(tls *TLS, fd uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_pipe), int32(fd)))) +} + +func Xpipe2(tls *TLS, fd uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flag=%v, (%v:)", tls, fd, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if !(flag != 0) { + return Xpipe(tls, fd) + } + ret = int32(X__syscall2(tls, int32(SYS_pipe2), int32(fd), flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if flag & ^(Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + ret = Xpipe(tls, fd) + if ret != 0 { + return ret + } + if flag&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flag&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + return 0 +} + +func Xposix_close(tls *TLS, fd int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v, (%v:)", tls, fd, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclose(tls, fd) +} + +func Xpread(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pread64), fd, int32(buf), int32(size), int32(ofs), 0, 0))) +} + +func Xpreadv(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) +} + +func Xpwrite(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwrite64), fd, int32(buf), int32(size), int32(ofs), 0, 0))) +} + +func Xpwritev(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) +} + +func Xread(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_read), fd, int32(buf), int32(count), 0, 0, 0))) +} + +func Xreadlink(tls *TLS, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v bufsize=%v, (%v:)", tls, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]int8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint32(1) + } + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(path), int32(buf), int32(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xreadlinkat(tls *TLS, fd int32, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v buf=%v bufsize=%v, (%v:)", tls, fd, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]int8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint32(1) + } + r = int32(X__syscall4(tls, int32(SYS_readlinkat), fd, int32(path), int32(buf), int32(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xreadv(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_readv), fd, int32(iov), count, 0, 0, 0))) +} + +func Xrenameat(tls *TLS, oldfd int32, old uintptr, newfd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v oldfd=%v old=%v newfd=%v new1=%v, (%v:)", tls, oldfd, old, newfd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_renameat), oldfd, int32(old), newfd, int32(new1)))) +} + +func Xrmdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_rmdir), int32(path)))) +} + +func Xsetgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setgid32), int32(gid), 0, 0) +} + +func Xsetpgid(tls *TLS, pid Tpid_t, pgid Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v pgid=%v, (%v:)", tls, pid, pgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setpgid), pid, pgid))) +} + +func Xsetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsetpgid(tls, 0, 0) +} + +func Xsetsid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_setsid)))) +} + +func Xsetuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setuid32), int32(uid), 0, 0) +} + +type Tctx2 = struct { + Fid int32 + Feid int32 + Fsid int32 + Fnr int32 + Fret int32 +} + +func _do_setxid(tls *TLS, p uintptr) { + var c uintptr + var ret int32 + _, _ = c, ret + c = p + if (*Tctx2)(unsafe.Pointer(c)).Fret < 0 { + return + } + ret = int32(X__syscall3(tls, (*Tctx2)(unsafe.Pointer(c)).Fnr, (*Tctx2)(unsafe.Pointer(c)).Fid, (*Tctx2)(unsafe.Pointer(c)).Feid, (*Tctx2)(unsafe.Pointer(c)).Fsid)) + if ret != 0 && !((*Tctx2)(unsafe.Pointer(c)).Fret != 0) { + /* If one thread fails to set ids after another has already + * succeeded, forcibly killing the process is the only safe + * thing to do. State is inconsistent and dangerous. Use + * SIGKILL because it is uncatchable. */ + X__block_all_sigs(tls, uintptr(0)) + X__syscall2(tls, int32(SYS_kill), X__syscall0(tls, int32(SYS_getpid)), int32(Int32FromInt32(SIGKILL))) + } + (*Tctx2)(unsafe.Pointer(c)).Fret = ret +} + +func X__setxid(tls *TLS, nr int32, id int32, eid int32, sid int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nr=%v id=%v eid=%v sid=%v, (%v:)", tls, nr, id, eid, sid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 int32 + var _ /* c at bp+0 */ Tctx2 + _ = v1 + /* ret is initially nonzero so that failure of the first thread does not + * trigger the safety kill above. */ + *(*Tctx2)(unsafe.Pointer(bp)) = Tctx2{ + Fid: id, + Feid: eid, + Fsid: sid, + Fnr: nr, + Fret: int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setxid), bp) + if (*(*Tctx2)(unsafe.Pointer(bp))).Fret > 0 { + v1 = -int32(EAGAIN) + } else { + v1 = (*(*Tctx2)(unsafe.Pointer(bp))).Fret + } + return X__syscall_ret(tls, uint32(v1)) +} + +func Xsleep(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(seconds), + } + if Xnanosleep(tls, bp, bp) != 0 { + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + } + return uint32(0) +} + +func Xsymlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_symlink), int32(existing), int32(new1)))) +} + +func Xsymlinkat(tls *TLS, existing uintptr, fd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v fd=%v new1=%v, (%v:)", tls, existing, fd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_symlinkat), int32(existing), fd, int32(new1)))) +} + +func Xsync(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__syscall0(tls, int32(SYS_sync)) +} + +func Xtcgetpgrp(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGPGRP), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcsetpgrp(tls *TLS, fd int32, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pgrp=%v, (%v:)", tls, fd, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp_int at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = pgrp + return Xioctl(tls, fd, int32(TIOCSPGRP), VaList(bp+16, bp)) +} + +func Xtruncate(tls *TLS, path uintptr, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v length=%v, (%v:)", tls, path, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_truncate64), int32(path), int32(length)))) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xttyname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var result, v1 int32 + _, _ = result, v1 + v1 = Xttyname_r(tls, fd, uintptr(unsafe.Pointer(&_buf10)), uint32(32)) + result = v1 + if v1 != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = result + return UintptrFromInt32(0) + } + return uintptr(unsafe.Pointer(&_buf10)) +} + +var _buf10 [32]int8 + +func Xttyname_r(tls *TLS, fd int32, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v size=%v, (%v:)", tls, fd, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var l Tssize_t + var _ /* procname at bp+288 */ [29]int8 + var _ /* st1 at bp+0 */ Tstat + var _ /* st2 at bp+144 */ Tstat + _ = l + if !(Xisatty(tls, fd) != 0) { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + X__procfdname(tls, bp+288, uint32(fd)) + l = Xreadlink(tls, bp+288, name, size) + if l < 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + if uint32(l) == size { + return int32(ERANGE) + } + } + *(*int8)(unsafe.Pointer(name + uintptr(l))) = 0 + if Xstat(tls, name, bp) != 0 || Xfstat(tls, fd, bp+144) != 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev || (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return int32(ENODEV) + } + return 0 +} + +func Xualarm(tls *TLS, value uint32, interval uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v value=%v interval=%v, (%v:)", tls, value, interval, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* it_old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_usec: int64(interval), + }, + Fit_value: Ttimeval{ + Ftv_usec: int64(value), + }, + } + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec*int64(1000000) + (*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) +} + +func Xunlink(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_unlink), int32(path)))) +} + +func Xunlinkat(tls *TLS, fd int32, path uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v flag=%v, (%v:)", tls, fd, path, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_unlinkat), fd, int32(path), flag))) +} + +func Xusleep(tls *TLS, useconds uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v useconds=%v, (%v:)", tls, useconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(useconds / uint32(1000000)), + Ftv_nsec: int32(useconds % uint32(1000000) * uint32(1000)), + } + return Xnanosleep(tls, bp, bp) +} + +func Xwrite(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_write), fd, int32(buf), int32(count), 0, 0, 0))) +} + +func Xwritev(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_writev), fd, int32(iov), count, 0, 0, 0))) +} + +type Ttime32_t = int32 + +type Ttimeval32 = struct { + Ftv_sec int32 + Ftv_usec int32 +} + +type Titimerval32 = struct { + Fit_interval Ttimeval32 + Fit_value Ttimeval32 +} + +type Ttimespec32 = struct { + Ftv_sec int32 + Ftv_nsec int32 +} + +type Titimerspec32 = struct { + Fit_interval Ttimespec32 + Fit_value Ttimespec32 +} + +func X__fxstat(tls *TLS, ver int32, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v buf=%v, (%v:)", tls, ver, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat_time32(tls, fd, buf) +} + +func X__fxstatat(tls *TLS, ver int32, fd int32, path uintptr, buf uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v buf=%v flag=%v, (%v:)", tls, ver, fd, path, buf, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat_time32(tls, fd, path, buf, flag) +} + +func X__lxstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lstat_time32(tls, path, buf) +} + +func X__xstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stat_time32(tls, path, buf) +} + +type Tregister_t = int32 + +type Tu_int64_t = uint64 + +type Tu_int8_t = uint8 + +type Tu_int16_t = uint16 + +type Tu_int32_t = uint32 + +type Tcaddr_t = uintptr + +type Tu_char = uint8 + +type Tu_short = uint16 + +type Tushort = uint16 + +type Tu_int = uint32 + +type Tuint = uint32 + +type Tu_long = uint32 + +type Tulong = uint32 + +type Tquad_t = int64 + +type Tu_quad_t = uint64 + +func X__adjtime32(tls *TLS, in32 uintptr, out32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v in32=%v out32=%v, (%v:)", tls, in32, out32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* out at bp+16 */ Ttimeval + _ = r + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(in32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(in32)).Ftv_usec), + } + r = Xadjtime(tls, bp, bp+16) + if r != 0 { + return r + } + /* We can't range-check the result because success was already + * committed by the above call. */ + if out32 != 0 { + (*Ttimeval32)(unsafe.Pointer(out32)).Ftv_sec = int32((*(*Ttimeval)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimeval32)(unsafe.Pointer(out32)).Ftv_usec = int32((*(*Ttimeval)(unsafe.Pointer(bp + 16))).Ftv_usec) + } + return r +} + +func X__adjtimex_time32(tls *TLS, tx32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx32=%v, (%v:)", tls, tx32, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_adjtime32(tls, CLOCK_REALTIME, tx32) +} + +type Ttimex32 = struct { + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + Ftime Ttimeval32 + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 +} + +func X__clock_adjtime32(tls *TLS, clock_id Tclockid_t, tx32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v tx32=%v, (%v:)", tls, clock_id, tx32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* utx at bp+0 */ Ttimex + _ = r + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{ + Fmodes: (*Ttimex32)(unsafe.Pointer(tx32)).Fmodes, + Foffset: (*Ttimex32)(unsafe.Pointer(tx32)).Foffset, + Ffreq: (*Ttimex32)(unsafe.Pointer(tx32)).Ffreq, + Fmaxerror: (*Ttimex32)(unsafe.Pointer(tx32)).Fmaxerror, + Festerror: (*Ttimex32)(unsafe.Pointer(tx32)).Festerror, + Fstatus: (*Ttimex32)(unsafe.Pointer(tx32)).Fstatus, + Fconstant: (*Ttimex32)(unsafe.Pointer(tx32)).Fconstant, + Fprecision: (*Ttimex32)(unsafe.Pointer(tx32)).Fprecision, + Ftolerance: (*Ttimex32)(unsafe.Pointer(tx32)).Ftolerance, + Ftime: Ttimeval{ + Ftv_sec: int64((*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_sec), + Ftv_usec: int64((*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_usec), + }, + Ftick: (*Ttimex32)(unsafe.Pointer(tx32)).Ftick, + Fppsfreq: (*Ttimex32)(unsafe.Pointer(tx32)).Fppsfreq, + Fjitter: (*Ttimex32)(unsafe.Pointer(tx32)).Fjitter, + Fshift: (*Ttimex32)(unsafe.Pointer(tx32)).Fshift, + Fstabil: (*Ttimex32)(unsafe.Pointer(tx32)).Fstabil, + Fjitcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fjitcnt, + Fcalcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fcalcnt, + Ferrcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Ferrcnt, + Fstbcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fstbcnt, + Ftai: (*Ttimex32)(unsafe.Pointer(tx32)).Ftai, + } + r = Xclock_adjtime(tls, clock_id, bp) + if r < 0 { + return r + } + (*Ttimex32)(unsafe.Pointer(tx32)).Fmodes = (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes + (*Ttimex32)(unsafe.Pointer(tx32)).Foffset = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset + (*Ttimex32)(unsafe.Pointer(tx32)).Ffreq = (*(*Ttimex)(unsafe.Pointer(bp))).Ffreq + (*Ttimex32)(unsafe.Pointer(tx32)).Fmaxerror = (*(*Ttimex)(unsafe.Pointer(bp))).Fmaxerror + (*Ttimex32)(unsafe.Pointer(tx32)).Festerror = (*(*Ttimex)(unsafe.Pointer(bp))).Festerror + (*Ttimex32)(unsafe.Pointer(tx32)).Fstatus = (*(*Ttimex)(unsafe.Pointer(bp))).Fstatus + (*Ttimex32)(unsafe.Pointer(tx32)).Fconstant = (*(*Ttimex)(unsafe.Pointer(bp))).Fconstant + (*Ttimex32)(unsafe.Pointer(tx32)).Fprecision = (*(*Ttimex)(unsafe.Pointer(bp))).Fprecision + (*Ttimex32)(unsafe.Pointer(tx32)).Ftolerance = (*(*Ttimex)(unsafe.Pointer(bp))).Ftolerance + (*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_sec = int32((*(*Ttimex)(unsafe.Pointer(bp))).Ftime.Ftv_sec) + (*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_usec = int32((*(*Ttimex)(unsafe.Pointer(bp))).Ftime.Ftv_usec) + (*Ttimex32)(unsafe.Pointer(tx32)).Ftick = (*(*Ttimex)(unsafe.Pointer(bp))).Ftick + (*Ttimex32)(unsafe.Pointer(tx32)).Fppsfreq = (*(*Ttimex)(unsafe.Pointer(bp))).Fppsfreq + (*Ttimex32)(unsafe.Pointer(tx32)).Fjitter = (*(*Ttimex)(unsafe.Pointer(bp))).Fjitter + (*Ttimex32)(unsafe.Pointer(tx32)).Fshift = (*(*Ttimex)(unsafe.Pointer(bp))).Fshift + (*Ttimex32)(unsafe.Pointer(tx32)).Fstabil = (*(*Ttimex)(unsafe.Pointer(bp))).Fstabil + (*Ttimex32)(unsafe.Pointer(tx32)).Fjitcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fjitcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Fcalcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fcalcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Ferrcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Ferrcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Fstbcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fstbcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Ftai = (*(*Ttimex)(unsafe.Pointer(bp))).Ftai + return r +} + +func X__clock_getres_time32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xclock_getres(tls, clk, bp) + if !(r != 0) && ts32 != 0 { + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + } + return r +} + +func X__clock_gettime32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xclock_gettime(tls, clk, bp) + if r != 0 { + return r + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + return 0 +} + +func X__clock_nanosleep_time32(tls *TLS, clk Tclockid_t, flags int32, req32 uintptr, rem32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req32=%v rem32=%v, (%v:)", tls, clk, flags, req32, rem32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* rem at bp+16 */ Ttimespec + _ = ret + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(req32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(req32)).Ftv_nsec, + } + ret = Xclock_nanosleep(tls, clk, flags, bp, bp+16) + if ret == int32(EINTR) && rem32 != 0 && !(flags&Int32FromInt32(TIMER_ABSTIME) != 0) { + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_nsec + } + return ret +} + +func X__clock_settime32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + return Xclock_settime(tls, clk, bp) +} + +func X__ctime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xctime(tls, bp) +} + +func X__ctime32_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xctime_r(tls, bp, buf) +} + +func X__difftime32(tls *TLS, t1 Ttime32_t, t2 Ttime32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t2=%v, (%v:)", tls, t1, t2, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdifftime(tls, int64(t1), int64(t2)) +} + +func X__fstat_time32(tls *TLS, fd int32, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st32=%v, (%v:)", tls, fd, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xfstat(tls, fd, bp) + if !(r != 0) { + Xmemcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+96)) + } + return r +} + +func X__fstatat_time32(tls *TLS, fd int32, path uintptr, st32 uintptr, flag int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st32=%v flag=%v, (%v:)", tls, fd, path, st32, flag, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xfstatat(tls, fd, path, bp, flag) + if !(r != 0) { + Xmemcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+96)) + } + return r +} + +type Ttimeb32 = struct { + Ftime Tint32_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func X__ftime32(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tb at bp+0 */ Ttimeb + if Xftime(tls, bp) < 0 { + return -int32(1) + } + if (*(*Ttimeb)(unsafe.Pointer(bp))).Ftime < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimeb)(unsafe.Pointer(bp))).Ftime > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimeb32)(unsafe.Pointer(tp)).Ftime = int32((*(*Ttimeb)(unsafe.Pointer(bp))).Ftime) + (*Ttimeb32)(unsafe.Pointer(tp)).Fmillitm = (*(*Ttimeb)(unsafe.Pointer(bp))).Fmillitm + (*Ttimeb32)(unsafe.Pointer(tp)).Ftimezone = (*(*Ttimeb)(unsafe.Pointer(bp))).Ftimezone + (*Ttimeb32)(unsafe.Pointer(tp)).Fdstflag = (*(*Ttimeb)(unsafe.Pointer(bp))).Fdstflag + return 0 +} + +func X__futimens_time32(tls *TLS, fd int32, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times32=%v, (%v:)", tls, fd, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_nsec, + }, + 1: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_nsec, + }, + } + v1 = bp + } + return Xfutimens(tls, fd, v1) +} + +func X__futimes_time32(tls *TLS, fd int32, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times32=%v, (%v:)", tls, fd, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xfutimes(tls, fd, v1) +} + +func X__futimesat_time32(tls *TLS, dirfd int32, pathname uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times32=%v, (%v:)", tls, dirfd, pathname, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xfutimesat(tls, dirfd, pathname, v1) +} + +func X__getitimer_time32(tls *TLS, which int32, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old32=%v, (%v:)", tls, which, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerval + _ = r + r = Xgetitimer(tls, which, bp) + if r != 0 { + return r + } + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_interval.Ftv_usec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_value.Ftv_usec) + return 0 +} + +type Tcompat_rusage = struct { + Fru_utime Ttimeval32 + Fru_stime Ttimeval32 + Fru_maxrss int32 + Fru_ixrss int32 + Fru_idrss int32 + Fru_isrss int32 + Fru_minflt int32 + Fru_majflt int32 + Fru_nswap int32 + Fru_inblock int32 + Fru_oublock int32 + Fru_msgsnd int32 + Fru_msgrcv int32 + Fru_nsignals int32 + Fru_nvcsw int32 + Fru_nivcsw int32 +} + +func X__getrusage_time32(tls *TLS, who int32, usage uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v usage=%v, (%v:)", tls, who, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* ru at bp+0 */ Trusage + _ = r + r = Xgetrusage(tls, who, bp) + if !(r != 0) { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + Xmemcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func X__gettimeofday_time32(tls *TLS, tv32 uintptr, tz uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v tv32=%v tz=%v, (%v:)", tls, tv32, tz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tv at bp+0 */ Ttimeval + _ = r + if !(tv32 != 0) { + return 0 + } + r = Xgettimeofday(tls, bp, uintptr(0)) + if r != 0 { + return r + } + if (*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec = int32((*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec = int32((*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_usec) + return 0 +} + +func X__gmtime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xgmtime(tls, bp) +} + +func X__gmtime32_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xgmtime_r(tls, bp, tm) +} + +func X__localtime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xlocaltime(tls, bp) +} + +func X__localtime32_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xlocaltime_r(tls, bp, tm) +} + +func X__lstat_time32(tls *TLS, path uintptr, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v st32=%v, (%v:)", tls, path, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xlstat(tls, path, bp) + if !(r != 0) { + Xmemcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+96)) + } + return r +} + +func X__lutimes_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xlutimes(tls, path, v1) +} + +func X__mktime32(tls *TLS, tm uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t Ttime_t + var _ /* tmp at bp+0 */ Ttm + _ = t + *(*Ttm)(unsafe.Pointer(bp)) = *(*Ttm)(unsafe.Pointer(tm)) + t = Xmktime(tls, bp) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return int32(t) +} + +func X__nanosleep_time32(tls *TLS, req32 uintptr, rem32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req32=%v rem32=%v, (%v:)", tls, req32, rem32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* rem at bp+16 */ Ttimespec + _ = ret + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(req32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(req32)).Ftv_nsec, + } + ret = Xnanosleep(tls, bp, bp+16) + if ret < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) && rem32 != 0 { + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_nsec + } + return ret +} + +func X__ppoll_time32(tls *TLS, fds uintptr, n Tnfds_t, ts32 uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v ts32=%v mask=%v, (%v:)", tls, fds, n, ts32, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xppoll(tls, fds, n, v1, mask) +} + +func X__pselect_time32(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts32 uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts32=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts32, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xpselect(tls, n, rfds, wfds, efds, v1, mask) +} + +func X__recvmmsg_time32(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v ts32=%v, (%v:)", tls, fd, msgvec, vlen, flags, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if ts32 != 0 { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xrecvmmsg(tls, fd, msgvec, vlen, flags, v1) +} + +func X__select_time32(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv32=%v, (%v:)", tls, n, rfds, wfds, efds, tv32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(tv32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec), + } + v1 = bp + } + return Xselect(tls, n, rfds, wfds, efds, v1) +} + +func X__semtimedop_time32(tls *TLS, id int32, buf uintptr, n Tsize_t, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts32=%v, (%v:)", tls, id, buf, n, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xsemtimedop(tls, id, buf, n, v1) +} + +func X__setitimer_time32(tls *TLS, which int32, new32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new32=%v old32=%v, (%v:)", tls, which, new32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var _ /* old at bp+32 */ Titimerval + _ = r + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_sec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_interval.Ftv_sec), + Ftv_usec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_interval.Ftv_usec), + }, + Fit_value: Ttimeval{ + Ftv_sec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_value.Ftv_sec), + Ftv_usec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_value.Ftv_usec), + }, + } + r = Xsetitimer(tls, which, bp, bp+32) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_usec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) + } + return 0 +} + +func X__settimeofday_time32(tls *TLS, tv32 uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv32=%v tz=%v, (%v:)", tls, tv32, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(tv32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec), + } + v1 = bp + } + return Xsettimeofday(tls, v1, uintptr(0)) +} + +func X__sigtimedwait_time32(tls *TLS, set uintptr, si uintptr, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v si=%v ts32=%v, (%v:)", tls, set, si, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xsigtimedwait(tls, set, si, v1) +} + +func X__stat_time32(tls *TLS, path uintptr, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v st32=%v, (%v:)", tls, path, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xstat(tls, path, bp) + if !(r != 0) { + Xmemcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+96)) + } + return r +} + +func X__stime32(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xstime(tls, bp) +} + +func X__time32(tls *TLS, p uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t Ttime_t + _ = t + t = Xtime(tls, uintptr(0)) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + if p != 0 { + *(*Ttime32_t)(unsafe.Pointer(p)) = int32(t) + } + return int32(t) +} + +func X__time32gm(tls *TLS, tm uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t Ttime_t + _ = t + t = Xtimegm(tls, tm) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + return int32(t) +} + +func X__timer_gettime32(tls *TLS, t Ttimer_t, val32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val32=%v, (%v:)", tls, t, val32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerspec + _ = r + r = Xtimer_gettime(tls, t, bp) + if r != 0 { + return r + } + /* No range checking for consistency with settime */ + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_nsec + return 0 +} + +func X__timer_settime32(tls *TLS, t Ttimer_t, flags int32, val32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val32=%v old32=%v, (%v:)", tls, t, flags, val32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var v1 uintptr + var _ /* old at bp+32 */ Titimerspec + _, _ = r, v1 + *(*Titimerspec)(unsafe.Pointer(bp)) = Titimerspec{ + Fit_interval: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec, + }, + Fit_value: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec, + }, + } + if old32 != 0 { + v1 = bp + 32 + } else { + v1 = uintptr(0) + } + r = Xtimer_settime(tls, t, flags, bp, v1) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_nsec + } + return 0 +} + +func X__timerfd_gettime32(tls *TLS, t int32, val32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val32=%v, (%v:)", tls, t, val32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerspec + _ = r + r = Xtimerfd_gettime(tls, t, bp) + if r != 0 { + return r + } + /* No range checking for consistency with settime */ + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_nsec + return 0 +} + +func X__timerfd_settime32(tls *TLS, t int32, flags int32, val32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val32=%v old32=%v, (%v:)", tls, t, flags, val32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var v1 uintptr + var _ /* old at bp+32 */ Titimerspec + _, _ = r, v1 + *(*Titimerspec)(unsafe.Pointer(bp)) = Titimerspec{ + Fit_interval: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec, + }, + Fit_value: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec, + }, + } + if old32 != 0 { + v1 = bp + 32 + } else { + v1 = uintptr(0) + } + r = Xtimerfd_settime(tls, t, flags, bp, v1) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_nsec + } + return 0 +} + +func X__timespec_get_time32(tls *TLS, ts32 uintptr, base int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ts32=%v base=%v, (%v:)", tls, ts32, base, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xtimespec_get(tls, bp, base) + if !(r != 0) { + return r + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return 0 + } + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + return r +} + +type Tutimbuf32 = struct { + Factime Ttime32_t + Fmodtime Ttime32_t +} + +func X__utime_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*Tutimbuf)(unsafe.Pointer(bp)) = Tutimbuf{ + Factime: int64((*Tutimbuf32)(unsafe.Pointer(times32)).Factime), + Fmodtime: int64((*Tutimbuf32)(unsafe.Pointer(times32)).Fmodtime), + } + v1 = bp + } + return Xutime(tls, path, v1) +} + +func X__utimensat_time32(tls *TLS, fd int32, path uintptr, times32 uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times32=%v flags=%v, (%v:)", tls, fd, path, times32, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_nsec, + }, + 1: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_nsec, + }, + } + v1 = bp + } + return Xutimensat(tls, fd, path, v1, flags) +} + +func X__utimes_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xutimes(tls, path, v1) +} + +type t__ucontext5 = Tucontext_t7 + +func X__wait3_time32(tls *TLS, status uintptr, options int32, usage uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var v1 uintptr + var _ /* ru at bp+0 */ Trusage + _, _ = r, v1 + if usage != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + r = Xwait3(tls, status, options, v1) + if !(r != 0) && usage != 0 { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + Xmemcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func X__wait4_time32(tls *TLS, pid Tpid_t, status uintptr, options int32, usage uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v usage=%v, (%v:)", tls, pid, status, options, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var v1 uintptr + var _ /* ru at bp+0 */ Trusage + _, _ = r, v1 + if usage != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + r = Xwait4(tls, pid, status, options, v1) + if !(r != 0) && usage != 0 { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + Xmemcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func __ccgo_fp(f interface{}) uintptr { + type iface [2]uintptr + return (*iface)(unsafe.Pointer(&f))[1] +} + +var X__abort_lock [1]int32 + +var X__at_quick_exit_lockptr = uintptr(unsafe.Pointer(&_lock)) + +var X__c_dot_utf8 = t__locale_map{ + Fmap1: uintptr(unsafe.Pointer(&_empty_mo)), + Fmap_size: uint32(20), + Fname: [24]int8{'C', '.', 'U', 'T', 'F', '-', '8'}, +} + +var X__c_dot_utf8_locale = t__locale_struct{ + Fcat: [6]uintptr{ + 0: uintptr(unsafe.Pointer(&X__c_dot_utf8)), + }, +} + +var X__c_locale = t__locale_struct{} + +var Xdaylight int32 + +var X__eintr_valid_flag int32 + +var Xenviron uintptr + +var X__exp2f_data = Texp2f_data{ + Ftab: [32]Tuint64_t{ + 0: uint64(0x3ff0000000000000), + 1: uint64(0x3fefd9b0d3158574), + 2: uint64(0x3fefb5586cf9890f), + 3: uint64(0x3fef9301d0125b51), + 4: uint64(0x3fef72b83c7d517b), + 5: uint64(0x3fef54873168b9aa), + 6: uint64(0x3fef387a6e756238), + 7: uint64(0x3fef1e9df51fdee1), + 8: uint64(0x3fef06fe0a31b715), + 9: uint64(0x3feef1a7373aa9cb), + 10: uint64(0x3feedea64c123422), + 11: uint64(0x3feece086061892d), + 12: uint64(0x3feebfdad5362a27), + 13: uint64(0x3feeb42b569d4f82), + 14: uint64(0x3feeab07dd485429), + 15: uint64(0x3feea47eb03a5585), + 16: uint64(0x3feea09e667f3bcd), + 17: uint64(0x3fee9f75e8ec5f74), + 18: uint64(0x3feea11473eb0187), + 19: uint64(0x3feea589994cce13), + 20: uint64(0x3feeace5422aa0db), + 21: uint64(0x3feeb737b0cdc5e5), + 22: uint64(0x3feec49182a3f090), + 23: uint64(0x3feed503b23e255d), + 24: uint64(0x3feee89f995ad3ad), + 25: uint64(0x3feeff76f2fb5e47), + 26: uint64(0x3fef199bdd85529c), + 27: uint64(0x3fef3720dcef9069), + 28: uint64(0x3fef5818dcfba487), + 29: uint64(0x3fef7c97337b9b5f), + 30: uint64(0x3fefa4afa2a490da), + 31: uint64(0x3fefd0765b6e4540), + }, + Fshift_scaled: Float64FromFloat64(6.755399441055744e+15) / float64(Int32FromInt32(1)<>Int32FromInt32(6) | Uint32FromInt32(0x0), + 31: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x1), + 32: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x2), + 33: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x3), + 34: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x4), + 35: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x5), + 36: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x6), + 37: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x7), + 38: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x8), + 39: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x9), + 40: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xa), + 41: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xb), + 42: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xc), + 43: (Uint32FromUint32(0x40)-Uint32FromInt32(0xa0))<>Int32FromInt32(6) | Uint32FromInt32(0xd), + 44: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xe), + 45: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xf), + 46: (Uint32FromUint32(0)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x0), + 47: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x1), + 48: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x2), + 49: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x3), + 50: (Uint32FromUint32(0x40)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x4), +} + +var X__gettext_lockptr = uintptr(unsafe.Pointer(&_lock1)) + +var X__hwcap Tsize_t + +var X__libc t__libc + +var X__libc_version = [6]int8{'1', '.', '2', '.', '5'} + +var X__locale_lock [1]int32 + +var X__locale_lockptr = uintptr(unsafe.Pointer(&X__locale_lock)) + +var X__log2_data = Tlog2_data{ + Finvln2hi: float64(1.4426950407214463), + Finvln2lo: float64(1.6751713164886512e-10), + Fpoly: [6]float64{ + 0: -Float64FromFloat64(0.7213475204444882), + 1: float64(0.4808983469629985), + 2: -Float64FromFloat64(0.36067375954075914), + 3: float64(0.2885390073180969), + 4: -Float64FromFloat64(0.2404693555628422), + 5: float64(0.2061202382173603), + }, + Fpoly1: [10]float64{ + 0: -Float64FromFloat64(0.7213475204444817), + 1: float64(0.48089834696298744), + 2: -Float64FromFloat64(0.360673760222145), + 3: float64(0.2885390081805197), + 4: -Float64FromFloat64(0.24044917405728863), + 5: float64(0.2060992861022954), + 6: -Float64FromFloat64(0.18033596705327856), + 7: float64(0.1603032746063156), + 8: -Float64FromFloat64(0.14483316576701266), + 9: float64(0.13046826811283835), + }, + Ftab: [64]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4463276106642393), + Flogc: -Float64FromFloat64(0.5323943771486483), + }, + 1: { + Finvc: float64(1.4301675812282968), + Flogc: -Float64FromFloat64(0.516184206053822), + }, + 2: { + Finvc: float64(1.4143648676229383), + Flogc: -Float64FromFloat64(0.5001543441974263), + }, + 3: { + Finvc: float64(1.3989068970611538), + Flogc: -Float64FromFloat64(0.4842999484799293), + }, + 4: { + Finvc: float64(1.3837838957784339), + Flogc: -Float64FromFloat64(0.46861865624623533), + }, + 5: { + Finvc: float64(1.368983882697786), + Flogc: -Float64FromFloat64(0.4531054615783887), + }, + 6: { + Finvc: float64(1.3544972916324536), + Flogc: -Float64FromFloat64(0.43775750882059583), + }, + 7: { + Finvc: float64(1.3403139676437443), + Flogc: -Float64FromFloat64(0.4225709906127122), + }, + 8: { + Finvc: float64(1.3264249304188642), + Flogc: -Float64FromFloat64(0.40754302793970965), + }, + 9: { + Finvc: float64(1.3128203652112156), + Flogc: -Float64FromFloat64(0.3926695240384106), + }, + 10: { + Finvc: float64(1.299492412370217), + Flogc: -Float64FromFloat64(0.3779482100565019), + }, + 11: { + Finvc: float64(1.28643198385998), + Flogc: -Float64FromFloat64(0.36337518101890964), + }, + 12: { + Finvc: float64(1.2736319291846832), + Flogc: -Float64FromFloat64(0.3489484089425332), + }, + 13: { + Finvc: float64(1.2610838968062879), + Flogc: -Float64FromFloat64(0.33466425780738973), + }, + 14: { + Finvc: float64(1.248780314313572), + Flogc: -Float64FromFloat64(0.3205197000629596), + }, + 15: { + Finvc: float64(1.2367150450059063), + Flogc: -Float64FromFloat64(0.3065131231801388), + }, + 16: { + Finvc: float64(1.2248804968401878), + Flogc: -Float64FromFloat64(0.2926410022678283), + }, + 17: { + Finvc: float64(1.2132702353497795), + Flogc: -Float64FromFloat64(0.2789009220805383), + }, + 18: { + Finvc: float64(1.2018780785715362), + Flogc: -Float64FromFloat64(0.2652905529862437), + }, + 19: { + Finvc: float64(1.190697765061355), + Flogc: -Float64FromFloat64(0.2518072602367738), + }, + 20: { + Finvc: float64(1.1797235410550593), + Flogc: -Float64FromFloat64(0.23844881494437686), + }, + 21: { + Finvc: float64(1.1689498986205256), + Flogc: -Float64FromFloat64(0.22521309705462045), + }, + 22: { + Finvc: float64(1.158371137408455), + Flogc: -Float64FromFloat64(0.21209756102439314), + }, + 23: { + Finvc: float64(1.1479820146386086), + Flogc: -Float64FromFloat64(0.1991000395789797), + }, + 24: { + Finvc: float64(1.1377775576851088), + Flogc: -Float64FromFloat64(0.18621852970682085), + }, + 25: { + Finvc: float64(1.127753150630225), + Flogc: -Float64FromFloat64(0.17345131655361), + }, + 26: { + Finvc: float64(1.1179037012282074), + Flogc: -Float64FromFloat64(0.16079591649577196), + }, + 27: { + Finvc: float64(1.1082251967632821), + Flogc: -Float64FromFloat64(0.14825107384353942), + }, + 28: { + Finvc: float64(1.098712461056607), + Flogc: -Float64FromFloat64(0.13581387465410444), + }, + 29: { + Finvc: float64(1.0893619091634283), + Flogc: -Float64FromFloat64(0.12348332762257996), + }, + 30: { + Finvc: float64(1.0801689912316736), + Flogc: -Float64FromFloat64(0.11125703807351783), + }, + 31: { + Finvc: float64(1.071129489697672), + Flogc: -Float64FromFloat64(0.09913289918449664), + }, + 32: { + Finvc: float64(1.0622406576750423), + Flogc: -Float64FromFloat64(0.08711065531497297), + }, + 33: { + Finvc: float64(1.0534977607927976), + Flogc: -Float64FromFloat64(0.07518724771330199), + }, + 34: { + Finvc: float64(1.044897877982342), + Flogc: -Float64FromFloat64(0.06336194888240243), + }, + 35: { + Finvc: float64(1.0364370289499079), + Flogc: -Float64FromFloat64(0.0516324649456692), + }, + 36: { + Finvc: float64(1.0281122132034575), + Flogc: -Float64FromFloat64(0.039997735929773626), + }, + 37: { + Finvc: float64(1.0199202450036955), + Flogc: -Float64FromFloat64(0.028456341769015125), + }, + 38: { + Finvc: float64(1.0118577522306755), + Flogc: -Float64FromFloat64(0.017006489068080555), + }, + 39: { + Finvc: float64(1.003921649236766), + Flogc: -Float64FromFloat64(0.005646678981520381), + }, + 40: { + Finvc: float64(0.9922480467550775), + Flogc: float64(0.011227277611396858), + }, + 41: { + Finvc: float64(0.9770993366178549), + Flogc: float64(0.033422853921138085), + }, + 42: { + Finvc: float64(0.9624059787315814), + Flogc: float64(0.05528248992573026), + }, + 43: { + Finvc: float64(0.9481480598286369), + Flogc: float64(0.07681573143713649), + }, + 44: { + Finvc: float64(0.9343065931261065), + Flogc: float64(0.09803204623631245), + }, + 45: { + Finvc: float64(0.9208633936884979), + Flogc: float64(0.11894094059630334), + }, + 46: { + Finvc: float64(0.9078013641840602), + Flogc: float64(0.13955143862290242), + }, + 47: { + Finvc: float64(0.8951048181512927), + Flogc: float64(0.15987146080919956), + }, + 48: { + Finvc: float64(0.882758574260473), + Flogc: float64(0.17990916589428707), + }, + 49: { + Finvc: float64(0.8707481902241709), + Flogc: float64(0.19967252559081317), + }, + 50: { + Finvc: float64(0.8590602881746972), + Flogc: float64(0.2191687127685782), + }, + 51: { + Finvc: float64(0.8476822044336688), + Flogc: float64(0.23840459427242422), + }, + 52: { + Finvc: float64(0.8366013284053287), + Flogc: float64(0.25738780610663525), + }, + 53: { + Finvc: float64(0.8258064913621258), + Flogc: float64(0.27612433583180973), + }, + 54: { + Finvc: float64(0.8152865101579193), + Flogc: float64(0.2946209507022104), + }, + 55: { + Finvc: float64(0.8050314363208223), + Flogc: float64(0.31288297359969874), + }, + 56: { + Finvc: float64(0.7950310492640542), + Flogc: float64(0.33091689015759584), + }, + 57: { + Finvc: float64(0.7852760432487271), + Flogc: float64(0.3487282100279572), + }, + 58: { + Finvc: float64(0.7757575660314712), + Flogc: float64(0.36632223233368677), + }, + 59: { + Finvc: float64(0.7664670566588946), + Flogc: float64(0.383704309808536), + }, + 60: { + Finvc: float64(0.7573965608078645), + Flogc: float64(0.4008792246509074), + }, + 61: { + Finvc: float64(0.7485380168514022), + Flogc: float64(0.41785250494945103), + }, + 62: { + Finvc: float64(0.7398844213755009), + Flogc: float64(0.4346281724315304), + }, + 63: { + Finvc: float64(0.7314286113178112), + Flogc: float64(0.45121103315341315), + }, + }, + Ftab2: [64]struct { + Fchi float64 + Fclo float64 + }{ + 0: { + Fchi: float64(0.6914062848739648), + Fclo: float64(4.339971893418182e-17), + }, + 1: { + Fchi: float64(0.6992187580850853), + Fclo: float64(7.805593338712074e-18), + }, + 2: { + Fchi: float64(0.7070311366547563), + Fclo: float64(3.20843320369626e-17), + }, + 3: { + Fchi: float64(0.7148438556567389), + Fclo: float64(4.336491946473985e-17), + }, + 4: { + Fchi: float64(0.7226561915128084), + Fclo: float64(4.681890319761607e-17), + }, + 5: { + Fchi: float64(0.730468789763508), + Fclo: -Float64FromFloat64(1.647126642147294e-17), + }, + 6: { + Fchi: float64(0.7382812842650944), + Fclo: float64(2.0846837208642192e-17), + }, + 7: { + Fchi: float64(0.7460938437864584), + Fclo: -Float64FromFloat64(7.82131795361932e-18), + }, + 8: { + Fchi: float64(0.7539062159244969), + Fclo: -Float64FromFloat64(3.470987810015201e-17), + }, + 9: { + Fchi: float64(0.761718835645205), + Fclo: float64(1.2996798345429576e-17), + }, + 10: { + Fchi: float64(0.7695312342578777), + Fclo: -Float64FromFloat64(5.2071007285622585e-17), + }, + 11: { + Fchi: float64(0.7773438569208053), + Fclo: -Float64FromFloat64(4.513636731226183e-17), + }, + 12: { + Fchi: float64(0.7851561955110148), + Fclo: -Float64FromFloat64(2.0797044446832382e-17), + }, + 13: { + Fchi: float64(0.7929686538163826), + Fclo: -Float64FromFloat64(1.9947626198727574e-17), + }, + 14: { + Fchi: float64(0.8007813612514213), + Fclo: float64(1.472064871061342e-17), + }, + 15: { + Fchi: float64(0.8085937047812207), + Fclo: float64(5.290804109377209e-17), + }, + 16: { + Fchi: float64(0.816406173973453), + Fclo: -Float64FromFloat64(1.129659587857177e-17), + }, + 17: { + Fchi: float64(0.8242186867064328), + Fclo: float64(3.901543738154691e-17), + }, + 18: { + Fchi: float64(0.8320311501051142), + Fclo: -Float64FromFloat64(3.212482853127187e-17), + }, + 19: { + Fchi: float64(0.8398436860662717), + Fclo: float64(5.220081794706035e-18), + }, + 20: { + Fchi: float64(0.8476562221566525), + Fclo: -Float64FromFloat64(5.37416378988278e-17), + }, + 21: { + Fchi: float64(0.8554686571084844), + Fclo: float64(4.291992377471359e-18), + }, + 22: { + Fchi: float64(0.8632811779454657), + Fclo: float64(1.7319616935225806e-17), + }, + 23: { + Fchi: float64(0.8710937865301015), + Fclo: float64(1.8251073579011692e-17), + }, + 24: { + Fchi: float64(0.8789064200163806), + Fclo: float64(1.2113671810693101e-17), + }, + 25: { + Fchi: float64(0.8867188705623812), + Fclo: -Float64FromFloat64(2.431195196496269e-17), + }, + 26: { + Fchi: float64(0.894531433164887), + Fclo: -Float64FromFloat64(2.258952781769403e-17), + }, + 27: { + Fchi: float64(0.9023436779100781), + Fclo: float64(4.3322028821617186e-17), + }, + 28: { + Fchi: float64(0.9101562378188762), + Fclo: -Float64FromFloat64(5.2414676705491076e-18), + }, + 29: { + Fchi: float64(0.9179685755379005), + Fclo: -Float64FromFloat64(2.3432856904274634e-17), + }, + 30: { + Fchi: float64(0.9257810658494647), + Fclo: float64(3.9914341909758727e-17), + }, + 31: { + Fchi: float64(0.9335939394986237), + Fclo: -Float64FromFloat64(1.8218382846902827e-17), + }, + 32: { + Fchi: float64(0.9414062555172099), + Fclo: float64(4.423669374431538e-17), + }, + 33: { + Fchi: float64(0.9492189136192009), + Fclo: -Float64FromFloat64(2.6059674623550364e-17), + }, + 34: { + Fchi: float64(0.9570313243730211), + Fclo: -Float64FromFloat64(4.947019261946595e-17), + }, + 35: { + Fchi: float64(0.9648439529540691), + Fclo: -Float64FromFloat64(5.4644837229582306e-17), + }, + 36: { + Fchi: float64(0.9726564738338594), + Fclo: -Float64FromFloat64(5.4656321533328614e-17), + }, + 37: { + Fchi: float64(0.9804688208697894), + Fclo: -Float64FromFloat64(1.782581090537996e-18), + }, + 38: { + Fchi: float64(0.98828120632121), + Fclo: -Float64FromFloat64(5.2277711573086786e-18), + }, + 39: { + Fchi: float64(0.9960936700192217), + Fclo: float64(4.1586638841164565e-17), + }, + 40: { + Fchi: float64(1.007812515499802), + Fclo: float64(9.540912389137736e-17), + }, + 41: { + Fchi: float64(1.0234373952820537), + Fclo: float64(3.985821704561347e-17), + }, + 42: { + Fchi: float64(1.0390625391978199), + Fclo: -Float64FromFloat64(5.179495640960355e-18), + }, + 43: { + Fchi: float64(1.0546875982436061), + Fclo: -Float64FromFloat64(6.074512782488841e-17), + }, + 44: { + Fchi: float64(1.07031247275489), + Fclo: -Float64FromFloat64(4.853656019321416e-17), + }, + 45: { + Fchi: float64(1.0859374005459401), + Fclo: -Float64FromFloat64(1.0233609026899023e-16), + }, + 46: { + Fchi: float64(1.101562565835984), + Fclo: float64(9.714504510281668e-17), + }, + 47: { + Fchi: float64(1.1171875960464082), + Fclo: -Float64FromFloat64(5.728631491659617e-17), + }, + 48: { + Fchi: float64(1.1328125595809087), + Fclo: -Float64FromFloat64(4.3353271744463366e-17), + }, + 49: { + Fchi: float64(1.1484376438870962), + Fclo: float64(5.029455257812864e-17), + }, + 50: { + Fchi: float64(1.1640626551656426), + Fclo: -Float64FromFloat64(1.3886091944776072e-17), + }, + 51: { + Fchi: float64(1.179687381390876), + Fclo: float64(9.535864385063222e-17), + }, + 52: { + Fchi: float64(1.19531246968748), + Fclo: float64(2.5970710873556995e-17), + }, + 53: { + Fchi: float64(1.2109374417129501), + Fclo: -Float64FromFloat64(1.0412863482435496e-16), + }, + 54: { + Fchi: float64(1.2265626715770166), + Fclo: float64(1.903080930681457e-17), + }, + 55: { + Fchi: float64(1.2421875157698543), + Fclo: float64(9.884933154288451e-17), + }, + 56: { + Fchi: float64(1.2578125104996614), + Fclo: float64(2.605028401046449e-17), + }, + 57: { + Fchi: float64(1.273437549250769), + Fclo: float64(3.128070230699857e-17), + }, + 58: { + Fchi: float64(1.2890625161616944), + Fclo: -Float64FromFloat64(4.506460293510891e-17), + }, + 59: { + Fchi: float64(1.3046875156762752), + Fclo: -Float64FromFloat64(2.0874781900380847e-17), + }, + 60: { + Fchi: float64(1.3203123063212308), + Fclo: float64(8.50535702424751e-17), + }, + 61: { + Fchi: float64(1.3359374907988373), + Fclo: -Float64FromFloat64(3.99657459893118e-17), + }, + 62: { + Fchi: float64(1.351562448282023), + Fclo: float64(4.1576596545784e-17), + }, + 63: { + Fchi: float64(1.3671874254389709), + Fclo: -Float64FromFloat64(6.072295450780066e-17), + }, + }, +} + +var X__log2f_data = Tlog2f_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.42257122959194704), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.3633754347673556), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.30651309567405577), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.25180720160537634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.19910014943794563), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.14825100623281615), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.09913323807318392), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.051632812977629436), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.07508531937943004), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.15987125980713107), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.2384046664317681), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.31288288605863257), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.38370422656453185), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.451211048935815), + }, + }, + Fpoly: [4]float64{ + 0: -Float64FromFloat64(0.36051725506874704), + 1: float64(0.4811247078767291), + 2: -Float64FromFloat64(0.7213476299867769), + 3: float64(1.4426950186867042), + }, +} + +var X__log_data = Tlog_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [5]float64{ + 0: -Float64FromFloat64(0.5000000000000001), + 1: float64(0.33333333331825593), + 2: -Float64FromFloat64(0.2499999999622955), + 3: float64(0.20000304511814496), + 4: -Float64FromFloat64(0.16667054827627667), + }, + Fpoly1: [11]float64{ + 0: -Float64FromFloat64(0.5), + 1: float64(0.3333333333333352), + 2: -Float64FromFloat64(0.24999999999998432), + 3: float64(0.19999999999320328), + 4: -Float64FromFloat64(0.16666666669929706), + 5: float64(0.14285715076560868), + 6: -Float64FromFloat64(0.12499997863982555), + 7: float64(0.11110712032936046), + 8: -Float64FromFloat64(0.10000486757818193), + 9: float64(0.09181994006195467), + 10: -Float64FromFloat64(0.08328363062289341), + }, + Ftab: [128]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4504249240398293), + Flogc: -Float64FromFloat64(0.3718565645633589), + }, + 1: { + Finvc: float64(1.442253508327276), + Flogc: -Float64FromFloat64(0.36620682668944937), + }, + 2: { + Finvc: float64(1.4341736174350004), + Flogc: -Float64FromFloat64(0.3605888069791945), + }, + 3: { + Finvc: float64(1.426183816329995), + Flogc: -Float64FromFloat64(0.3550022171419869), + }, + 4: { + Finvc: float64(1.4182825527052965), + Flogc: -Float64FromFloat64(0.34944666968829097), + }, + 5: { + Finvc: float64(1.4104682921759335), + Flogc: -Float64FromFloat64(0.3439217713603284), + }, + 6: { + Finvc: float64(1.4027396147468003), + Flogc: -Float64FromFloat64(0.3384271921261188), + }, + 7: { + Finvc: float64(1.3950954438932313), + Flogc: -Float64FromFloat64(0.332962831494342), + }, + 8: { + Finvc: float64(1.3875338232485754), + Flogc: -Float64FromFloat64(0.32752794345742586), + }, + 9: { + Finvc: float64(1.3800539211058593), + Flogc: -Float64FromFloat64(0.32212257167088865), + }, + 10: { + Finvc: float64(1.3726542695419708), + Flogc: -Float64FromFloat64(0.3167462884799761), + }, + 11: { + Finvc: float64(1.3653332798446802), + Flogc: -Float64FromFloat64(0.3113985598928366), + }, + 12: { + Finvc: float64(1.358090204587874), + Flogc: -Float64FromFloat64(0.3060794515165526), + }, + 13: { + Finvc: float64(1.3509234892132138), + Flogc: -Float64FromFloat64(0.300788424667644), + }, + 14: { + Finvc: float64(1.3438320840699889), + Flogc: -Float64FromFloat64(0.2955252968476998), + }, + 15: { + Finvc: float64(1.3368146974742003), + Flogc: -Float64FromFloat64(0.29028969275850613), + }, + 16: { + Finvc: float64(1.329870114677736), + Flogc: -Float64FromFloat64(0.2850812793277555), + }, + 17: { + Finvc: float64(1.322997339161106), + Flogc: -Float64FromFloat64(0.27989987391470095), + }, + 18: { + Finvc: float64(1.316195352741367), + Flogc: -Float64FromFloat64(0.27474526621870154), + }, + 19: { + Finvc: float64(1.3094628125672239), + Flogc: -Float64FromFloat64(0.2696169863701243), + }, + 20: { + Finvc: float64(1.3027990455471041), + Flogc: -Float64FromFloat64(0.26451506180308115), + }, + 21: { + Finvc: float64(1.2962024229438942), + Flogc: -Float64FromFloat64(0.2594387762767383), + }, + 22: { + Finvc: float64(1.2896726275815547), + Flogc: -Float64FromFloat64(0.2543884090981692), + }, + 23: { + Finvc: float64(1.2832080305745537), + Flogc: -Float64FromFloat64(0.24936321635129843), + }, + 24: { + Finvc: float64(1.276807885983376), + Flogc: -Float64FromFloat64(0.24436312405975968), + }, + 25: { + Finvc: float64(1.2704714060687552), + Flogc: -Float64FromFloat64(0.23938801747897287), + }, + 26: { + Finvc: float64(1.2641976054949482), + Flogc: -Float64FromFloat64(0.23443761696705678), + }, + 27: { + Finvc: float64(1.257985357514882), + Flogc: -Float64FromFloat64(0.22951151871518505), + }, + 28: { + Finvc: float64(1.2518337750655457), + Flogc: -Float64FromFloat64(0.2246094963439873), + }, + 29: { + Finvc: float64(1.2457421919097305), + Flogc: -Float64FromFloat64(0.21973149037705753), + }, + 30: { + Finvc: float64(1.2397094966625508), + Flogc: -Float64FromFloat64(0.2148770752847895), + }, + 31: { + Finvc: float64(1.2337348463589233), + Flogc: -Float64FromFloat64(0.210046029103637), + }, + 32: { + Finvc: float64(1.2278176973028803), + Flogc: -Float64FromFloat64(0.20523836373934046), + }, + 33: { + Finvc: float64(1.2219570190618474), + Flogc: -Float64FromFloat64(0.20045368751368642), + }, + 34: { + Finvc: float64(1.2161519732977757), + Flogc: -Float64FromFloat64(0.1956917537758045), + }, + 35: { + Finvc: float64(1.2104018095009725), + Flogc: -Float64FromFloat64(0.19095237845203883), + }, + 36: { + Finvc: float64(1.204705805718973), + Flogc: -Float64FromFloat64(0.18623539250290833), + }, + 37: { + Finvc: float64(1.1990631185441964), + Flogc: -Float64FromFloat64(0.18154051731551135), + }, + 38: { + Finvc: float64(1.1934733004462308), + Flogc: -Float64FromFloat64(0.1768677957431919), + }, + 39: { + Finvc: float64(1.1879350812847385), + Flogc: -Float64FromFloat64(0.17221657406412305), + }, + 40: { + Finvc: float64(1.1824481322833125), + Flogc: -Float64FromFloat64(0.16758697765942543), + }, + 41: { + Finvc: float64(1.1770114976921955), + Flogc: -Float64FromFloat64(0.16297859687290384), + }, + 42: { + Finvc: float64(1.1716248121809465), + Flogc: -Float64FromFloat64(0.15839151377804228), + }, + 43: { + Finvc: float64(1.1662869231674715), + Flogc: -Float64FromFloat64(0.15382513241456763), + }, + 44: { + Finvc: float64(1.1609977486762766), + Flogc: -Float64FromFloat64(0.14927976358922024), + }, + 45: { + Finvc: float64(1.1557563220795803), + Flogc: -Float64FromFloat64(0.14475495398119165), + }, + 46: { + Finvc: float64(1.1505619105480347), + Flogc: -Float64FromFloat64(0.14025044090817573), + }, + 47: { + Finvc: float64(1.1454138888505974), + Flogc: -Float64FromFloat64(0.1357660466685502), + }, + 48: { + Finvc: float64(1.140311877374656), + Flogc: -Float64FromFloat64(0.1313018016355727), + }, + 49: { + Finvc: float64(1.1352550225747513), + Flogc: -Float64FromFloat64(0.12685731518763532), + }, + 50: { + Finvc: float64(1.1302429094831266), + Flogc: -Float64FromFloat64(0.1224325737671279), + }, + 51: { + Finvc: float64(1.1252747693068048), + Flogc: -Float64FromFloat64(0.11802724521862729), + }, + 52: { + Finvc: float64(1.1203501571039876), + Flogc: -Float64FromFloat64(0.11364127671663482), + }, + 53: { + Finvc: float64(1.1154683327680124), + Flogc: -Float64FromFloat64(0.10927434611278386), + }, + 54: { + Finvc: float64(1.1106291463292157), + Flogc: -Float64FromFloat64(0.10492665324943573), + }, + 55: { + Finvc: float64(1.1058315813301596), + Flogc: -Float64FromFloat64(0.10059761422644442), + }, + 56: { + Finvc: float64(1.1010752177696026), + Flogc: -Float64FromFloat64(0.09628717309055901), + }, + 57: { + Finvc: float64(1.0963597137952512), + Flogc: -Float64FromFloat64(0.09199534069557558), + }, + 58: { + Finvc: float64(1.0916844827550398), + Flogc: -Float64FromFloat64(0.08772190036688698), + }, + 59: { + Finvc: float64(1.0870487291277784), + Flogc: -Float64FromFloat64(0.08346643613867855), + }, + 60: { + Finvc: float64(1.082452357388312), + Flogc: -Float64FromFloat64(0.07922916827544668), + }, + 61: { + Finvc: float64(1.0778948225025884), + Flogc: -Float64FromFloat64(0.0750099004750382), + }, + 62: { + Finvc: float64(1.0733751731601076), + Flogc: -Float64FromFloat64(0.07080805133352897), + }, + 63: { + Finvc: float64(1.068893585073351), + Flogc: -Float64FromFloat64(0.06662408085151128), + }, + 64: { + Finvc: float64(1.0644491706655506), + Flogc: -Float64FromFloat64(0.06245745471915143), + }, + 65: { + Finvc: float64(1.0600414846328305), + Flogc: -Float64FromFloat64(0.0583080438042316), + }, + 66: { + Finvc: float64(1.0556701316181605), + Flogc: -Float64FromFloat64(0.05417576112313327), + }, + 67: { + Finvc: float64(1.051334750556926), + Flogc: -Float64FromFloat64(0.050060547896805474), + }, + 68: { + Finvc: float64(1.0470347288442157), + Flogc: -Float64FromFloat64(0.045962101199052086), + }, + 69: { + Finvc: float64(1.0427699229652954), + Flogc: -Float64FromFloat64(0.04188056008865715), + }, + 70: { + Finvc: float64(1.0385395013738175), + Flogc: -Float64FromFloat64(0.03781540056183985), + }, + 71: { + Finvc: float64(1.034343418940345), + Flogc: -Float64FromFloat64(0.03376684757915882), + }, + 72: { + Finvc: float64(1.0301811073173315), + Flogc: -Float64FromFloat64(0.029734619131772888), + }, + 73: { + Finvc: float64(1.026052043621297), + Flogc: -Float64FromFloat64(0.025718470239212365), + }, + 74: { + Finvc: float64(1.0219561082336197), + Flogc: -Float64FromFloat64(0.021718543925430822), + }, + 75: { + Finvc: float64(1.0178926505784922), + Flogc: -Float64FromFloat64(0.01773446126981071), + }, + 76: { + Finvc: float64(1.0138614436244586), + Flogc: -Float64FromFloat64(0.013766252464051831), + }, + 77: { + Finvc: float64(1.0098620186501341), + Flogc: -Float64FromFloat64(0.009813706322574944), + }, + 78: { + Finvc: float64(1.0058938559734134), + Flogc: -Float64FromFloat64(0.005876555150052809), + }, + 79: { + Finvc: float64(1.00195696235014), + Flogc: -Float64FromFloat64(0.0019550499938532084), + }, + 80: { + Finvc: float64(0.9961089923088509), + Flogc: float64(0.0038985973556009412), + }, + 81: { + Finvc: float64(0.9884170338185201), + Flogc: float64(0.011650571286395461), + }, + 82: { + Finvc: float64(0.9808429191005297), + Flogc: float64(0.019342955478919066), + }, + 83: { + Finvc: float64(0.9733840169987446), + Flogc: float64(0.0269766014846482), + }, + 84: { + Finvc: float64(0.9660377568876556), + Flogc: float64(0.034552359728422744), + }, + 85: { + Finvc: float64(0.9588014945307369), + Flogc: float64(0.04207121767183253), + }, + 86: { + Finvc: float64(0.9516728569073111), + Flogc: float64(0.049533940950141186), + }, + 87: { + Finvc: float64(0.9446494635965822), + Flogc: float64(0.056941358295944156), + }, + 88: { + Finvc: float64(0.9377288993026223), + Flogc: float64(0.06429439168346107), + }, + 89: { + Finvc: float64(0.9309091073790681), + Flogc: float64(0.0715936354946507), + }, + 90: { + Finvc: float64(0.924187681612722), + Flogc: float64(0.07884010933776153), + }, + 91: { + Finvc: float64(0.9175626765599192), + Flogc: float64(0.08603438905970506), + }, + 92: { + Finvc: float64(0.9110320403624034), + Flogc: float64(0.09317721180013905), + }, + 93: { + Finvc: float64(0.9045935839762024), + Flogc: float64(0.10026951462748457), + }, + 94: { + Finvc: float64(0.8982456375922825), + Flogc: float64(0.10731170956330516), + }, + 95: { + Finvc: float64(0.8919860966782501), + Flogc: float64(0.11430473320717738), + }, + 96: { + Finvc: float64(0.8858131121185129), + Flogc: float64(0.12124928503033061), + }, + 97: { + Finvc: float64(0.879725075760676), + Flogc: float64(0.12814583422959913), + }, + 98: { + Finvc: float64(0.8737201372634685), + Flogc: float64(0.1349951636851756), + }, + 99: { + Finvc: float64(0.8677966405782273), + Flogc: float64(0.1417978768189414), + }, + 100: { + Finvc: float64(0.8619528050060739), + Flogc: float64(0.14855476039031146), + }, + 101: { + Finvc: float64(0.8561872354420692), + Flogc: float64(0.1552661937658968), + }, + 102: { + Finvc: float64(0.8504983927816893), + Flogc: float64(0.16193275688146969), + }, + 103: { + Finvc: float64(0.8448844572790304), + Flogc: float64(0.16855539792220497), + }, + 104: { + Finvc: float64(0.8393442741575965), + Flogc: float64(0.1751343179947753), + }, + 105: { + Finvc: float64(0.8338762249349438), + Flogc: float64(0.1816702989864325), + }, + 106: { + Finvc: float64(0.8284789320557778), + Flogc: float64(0.18816387146023317), + }, + 107: { + Finvc: float64(0.8231510800065832), + Flogc: float64(0.1946155228479256), + }, + 108: { + Finvc: float64(0.8178913903778707), + Flogc: float64(0.20102572579389744), + }, + 109: { + Finvc: float64(0.8126984007245374), + Flogc: float64(0.2073952090795501), + }, + 110: { + Finvc: float64(0.8075710029460227), + Flogc: float64(0.21372429840596396), + }, + 111: { + Finvc: float64(0.8025078881160415), + Flogc: float64(0.2200135945981856), + }, + 112: { + Finvc: float64(0.7975077379364331), + Flogc: float64(0.22626374162859975), + }, + 113: { + Finvc: float64(0.792569604966373), + Flogc: float64(0.23247494747693054), + }, + 114: { + Finvc: float64(0.7876923641254114), + Flogc: float64(0.23864766620658884), + }, + 115: { + Finvc: float64(0.7828746724940998), + Flogc: float64(0.24478265647405806), + }, + 116: { + Finvc: float64(0.7781155388790811), + Flogc: float64(0.25088025827324145), + }, + 117: { + Finvc: float64(0.7734139557869777), + Flogc: float64(0.2569408552510595), + }, + 118: { + Finvc: float64(0.7687687179914933), + Flogc: float64(0.26296511155101143), + }, + 119: { + Finvc: float64(0.7641790698041854), + Flogc: float64(0.2689531327189343), + }, + 120: { + Finvc: float64(0.7596438763692399), + Flogc: float64(0.27490553924610595), + }, + 121: { + Finvc: float64(0.7551621951078668), + Flogc: float64(0.2808227248478943), + }, + 122: { + Finvc: float64(0.7507331780216866), + Flogc: float64(0.286704979267256), + }, + 123: { + Finvc: float64(0.7463557196361751), + Flogc: float64(0.29255295645509705), + }, + 124: { + Finvc: float64(0.7420289364869653), + Flogc: float64(0.2983670386142876), + }, + 125: { + Finvc: float64(0.7377521537065876), + Flogc: float64(0.30414734587282055), + }, + 126: { + Finvc: float64(0.7335242966002608), + Flogc: float64(0.30989455774829366), + }, + 127: { + Finvc: float64(0.729344777457841), + Flogc: float64(0.31560871301871884), + }, + }, + Ftab2: [128]struct { + Fchi float64 + Fclo float64 + }{ + 0: { + Fchi: float64(0.6894531274426304), + Fclo: float64(2.60290652810535e-17), + }, + 1: { + Fchi: float64(0.6933593811533166), + Fclo: float64(5.1607448519931415e-17), + }, + 2: { + Fchi: float64(0.6972656502972674), + Fclo: float64(5.290672414887869e-17), + }, + 3: { + Fchi: float64(0.7011718886092148), + Fclo: float64(7.801030634806013e-18), + }, + 4: { + Fchi: float64(0.7050781228976939), + Fclo: -Float64FromFloat64(2.471355337688684e-17), + }, + 5: { + Fchi: float64(0.7089843887644558), + Fclo: -Float64FromFloat64(4.6413389636862956e-17), + }, + 6: { + Fchi: float64(0.7128906815542553), + Fclo: float64(3.3387408065940366e-17), + }, + 7: { + Fchi: float64(0.7167968359278303), + Fclo: -Float64FromFloat64(2.6454587338050098e-17), + }, + 8: { + Fchi: float64(0.7207031520563163), + Fclo: float64(2.4284096334522285e-17), + }, + 9: { + Fchi: float64(0.7246093683054673), + Fclo: float64(4.85782435031982e-17), + }, + 10: { + Fchi: float64(0.7285155644718035), + Fclo: -Float64FromFloat64(1.3014776598894487e-17), + }, + 11: { + Fchi: float64(0.7324219036935506), + Fclo: -Float64FromFloat64(1.0402317671225898e-17), + }, + 12: { + Fchi: float64(0.73632811474659), + Fclo: float64(3.078291427467431e-17), + }, + 13: { + Fchi: float64(0.7402343715130797), + Fclo: -Float64FromFloat64(1.4304998976623033e-17), + }, + 14: { + Fchi: float64(0.7441405900738403), + Fclo: -Float64FromFloat64(2.8625955785571303e-17), + }, + 15: { + Fchi: float64(0.7480468324364), + Fclo: float64(5.1609093535635645e-17), + }, + 16: { + Fchi: float64(0.7519531335902885), + Fclo: float64(4.423423949536319e-17), + }, + 17: { + Fchi: float64(0.7558594189116706), + Fclo: -Float64FromFloat64(4.683016762099508e-17), + }, + 18: { + Fchi: float64(0.7597656365502305), + Fclo: float64(4.466742007514772e-17), + }, + 19: { + Fchi: float64(0.7636719350887737), + Fclo: -Float64FromFloat64(4.8134498775190266e-17), + }, + 20: { + Fchi: float64(0.767578087670501), + Fclo: -Float64FromFloat64(4.3371015350542286e-17), + }, + 21: { + Fchi: float64(0.7714844396979536), + Fclo: -Float64FromFloat64(2.515644472251707e-17), + }, + 22: { + Fchi: float64(0.7753905747966752), + Fclo: -Float64FromFloat64(4.163636184961329e-17), + }, + 23: { + Fchi: float64(0.7792968686084766), + Fclo: float64(3.3837161384165165e-17), + }, + 24: { + Fchi: float64(0.783203182701066), + Fclo: float64(4.379206565056758e-17), + }, + 25: { + Fchi: float64(0.7871094109030913), + Fclo: float64(2.7322930976146396e-17), + }, + 26: { + Fchi: float64(0.7910155783031153), + Fclo: -Float64FromFloat64(5.463661225364046e-17), + }, + 27: { + Fchi: float64(0.7949218121071572), + Fclo: -Float64FromFloat64(1.4320502634189868e-17), + }, + 28: { + Fchi: float64(0.7988281031542229), + Fclo: -Float64FromFloat64(4.0766731402809024e-17), + }, + 29: { + Fchi: float64(0.8027343109146796), + Fclo: -Float64FromFloat64(4.0338264352540086e-17), + }, + 30: { + Fchi: float64(0.8066405901480322), + Fclo: float64(1.7241428071650815e-18), + }, + 31: { + Fchi: float64(0.8105469363625933), + Fclo: -Float64FromFloat64(4.5534218930924523e-17), + }, + 32: { + Fchi: float64(0.8144531571720115), + Fclo: float64(1.821216920589142e-17), + }, + 33: { + Fchi: float64(0.8183593894061396), + Fclo: float64(4.9864288025894273e-17), + }, + 34: { + Fchi: float64(0.8222656559018297), + Fclo: float64(4.335990416726689e-17), + }, + 35: { + Fchi: float64(0.8261719308006343), + Fclo: -Float64FromFloat64(5.422001471661127e-17), + }, + 36: { + Fchi: float64(0.830078177803083), + Fclo: -Float64FromFloat64(5.333603728929035e-17), + }, + 37: { + Fchi: float64(0.8339844538076674), + Fclo: -Float64FromFloat64(1.1270648442682386e-17), + }, + 38: { + Fchi: float64(0.8378905498984414), + Fclo: -Float64FromFloat64(3.165126734800398e-17), + }, + 39: { + Fchi: float64(0.8417968420618669), + Fclo: float64(1.1286283062565865e-17), + }, + 40: { + Fchi: float64(0.8457030568173808), + Fclo: float64(5.643595964448442e-18), + }, + 41: { + Fchi: float64(0.8496093725173733), + Fclo: -Float64FromFloat64(2.1687834632368187e-17), + }, + 42: { + Fchi: float64(0.8535155534462677), + Fclo: -Float64FromFloat64(2.2548234217914977e-17), + }, + 43: { + Fchi: float64(0.8574219432077146), + Fclo: float64(4.683260556353139e-17), + }, + 44: { + Fchi: float64(0.8613281129443706), + Fclo: float64(2.5148296884122795e-17), + }, + 45: { + Fchi: float64(0.8652342893532053), + Fclo: -Float64FromFloat64(8.672187570949467e-18), + }, + 46: { + Fchi: float64(0.8691405397938828), + Fclo: -Float64FromFloat64(1.2576268285559751e-17), + }, + 47: { + Fchi: float64(0.8730468608194392), + Fclo: -Float64FromFloat64(2.9930851265148e-17), + }, + 48: { + Fchi: float64(0.8769530685783117), + Fclo: float64(4.814801507681644e-17), + }, + 49: { + Fchi: float64(0.8808593488818101), + Fclo: -Float64FromFloat64(9.10549533611022e-18), + }, + 50: { + Fchi: float64(0.8847655593409667), + Fclo: -Float64FromFloat64(3.512414651620766e-17), + }, + 51: { + Fchi: float64(0.888671840226208), + Fclo: float64(3.555261815374023e-17), + }, + 52: { + Fchi: float64(0.8925780870017613), + Fclo: float64(1.692380503540994e-17), + }, + 53: { + Fchi: float64(0.8964844367374554), + Fclo: -Float64FromFloat64(1.0837881791715702e-17), + }, + 54: { + Fchi: float64(0.9003905608862683), + Fclo: float64(5.2900545724138363e-17), + }, + 55: { + Fchi: float64(0.9042968358682077), + Fclo: float64(5.3330721088784517e-17), + }, + 56: { + Fchi: float64(0.9082031671057441), + Fclo: float64(1.8640040753232978e-17), + }, + 57: { + Fchi: float64(0.9121093993305497), + Fclo: float64(4.467972832054075e-17), + }, + 58: { + Fchi: float64(0.9160155849026457), + Fclo: -Float64FromFloat64(5.216213419585033e-18), + }, + 59: { + Fchi: float64(0.9199219622862499), + Fclo: -Float64FromFloat64(2.7324731032846873e-17), + }, + 60: { + Fchi: float64(0.9238281880717143), + Fclo: -Float64FromFloat64(1.7769263393434193e-17), + }, + 61: { + Fchi: float64(0.9277343012727929), + Fclo: float64(4.943363080817441e-17), + }, + 62: { + Fchi: float64(0.9316407021562788), + Fclo: float64(4.164434042024055e-17), + }, + 63: { + Fchi: float64(0.935546825207466), + Fclo: float64(1.3011820859795741e-17), + }, + 64: { + Fchi: float64(0.9394530312562943), + Fclo: -Float64FromFloat64(2.7332907838481398e-17), + }, + 65: { + Fchi: float64(0.9433593066844669), + Fclo: float64(2.342133170803292e-17), + }, + 66: { + Fchi: float64(0.9472655994038329), + Fclo: float64(1.6478717480487438e-17), + }, + 67: { + Fchi: float64(0.9511718313032721), + Fclo: -Float64FromFloat64(5.19608290131499e-18), + }, + 68: { + Fchi: float64(0.9550781578218178), + Fclo: -Float64FromFloat64(3.5565573220579e-17), + }, + 69: { + Fchi: float64(0.9589843147339043), + Fclo: float64(2.0816772146458738e-17), + }, + 70: { + Fchi: float64(0.9628906735633685), + Fclo: -Float64FromFloat64(3.471962826146841e-18), + }, + 71: { + Fchi: float64(0.9667968893972092), + Fclo: -Float64FromFloat64(3.68646834472642e-17), + }, + 72: { + Fchi: float64(0.9707031054025779), + Fclo: -Float64FromFloat64(3.4674108076868834e-18), + }, + 73: { + Fchi: float64(0.9746094325494931), + Fclo: float64(4.598152624774392e-17), + }, + 74: { + Fchi: float64(0.9785156054582722), + Fclo: float64(4.553145752392568e-17), + }, + 75: { + Fchi: float64(0.9824218687812282), + Fclo: -Float64FromFloat64(7.811259169418978e-18), + }, + 76: { + Fchi: float64(0.9863280690752917), + Fclo: float64(2.0375615178047467e-17), + }, + 77: { + Fchi: float64(0.9902342909546034), + Fclo: -Float64FromFloat64(1.344597043422914e-17), + }, + 78: { + Fchi: float64(0.9941406780264008), + Fclo: float64(1.51853723695054e-17), + }, + 79: { + Fchi: float64(0.9980468598715558), + Fclo: -Float64FromFloat64(1.301926039598001e-17), + }, + 80: { + Fchi: float64(1.0039062067717412), + Fclo: -Float64FromFloat64(4.596120641744973e-17), + }, + 81: { + Fchi: float64(1.0117187035281372), + Fclo: -Float64FromFloat64(8.152405002665349e-17), + }, + 82: { + Fchi: float64(1.0195312424919558), + Fclo: float64(8.239927014757811e-17), + }, + 83: { + Fchi: float64(1.0273437641634193), + Fclo: float64(3.122851005327045e-17), + }, + 84: { + Fchi: float64(1.0351562274561221), + Fclo: -Float64FromFloat64(1.3010212611128995e-17), + }, + 85: { + Fchi: float64(1.0429687539123276), + Fclo: -Float64FromFloat64(5.984116688633458e-17), + }, + 86: { + Fchi: float64(1.0507812561238108), + Fclo: float64(2.860923854822335e-17), + }, + 87: { + Fchi: float64(1.0585937308350133), + Fclo: -Float64FromFloat64(1.9962944508904598e-17), + }, + 88: { + Fchi: float64(1.0664062936992642), + Fclo: float64(5.291469130309099e-17), + }, + 89: { + Fchi: float64(1.0742187309945372), + Fclo: float64(1.0321575006732523e-16), + }, + 90: { + Fchi: float64(1.082031301537134), + Fclo: float64(9.021194373419119e-17), + }, + 91: { + Fchi: float64(1.0898438063644336), + Fclo: float64(5.202798992357953e-17), + }, + 92: { + Fchi: float64(1.0976562356711468), + Fclo: float64(5.898318482500785e-17), + }, + 93: { + Fchi: float64(1.1054688179463226), + Fclo: float64(8.846377690653252e-17), + }, + 94: { + Fchi: float64(1.113281220803328), + Fclo: -Float64FromFloat64(9.529455965212574e-18), + }, + 95: { + Fchi: float64(1.1210937073167315), + Fclo: float64(6.765080709377787e-17), + }, + 96: { + Fchi: float64(1.1289062967338532), + Fclo: float64(1.0929327370933015e-16), + }, + 97: { + Fchi: float64(1.1367187631150848), + Fclo: float64(6.938570551230516e-17), + }, + 98: { + Fchi: float64(1.1445312490244826), + Fclo: float64(1.908841015045148e-17), + }, + 99: { + Fchi: float64(1.1523437096203593), + Fclo: float64(2.7744504138979832e-17), + }, + 100: { + Fchi: float64(1.1601563266482477), + Fclo: -Float64FromFloat64(1.5621964097491672e-17), + }, + 101: { + Fchi: float64(1.1679688257483505), + Fclo: -Float64FromFloat64(6.4191661495975e-17), + }, + 102: { + Fchi: float64(1.1757811754697645), + Fclo: -Float64FromFloat64(4.336465165059268e-17), + }, + 103: { + Fchi: float64(1.183593793665613), + Fclo: -Float64FromFloat64(3.8159292551356396e-17), + }, + 104: { + Fchi: float64(1.1914062331617676), + Fclo: -Float64FromFloat64(2.94933042768015e-17), + }, + 105: { + Fchi: float64(1.1992187450577771), + Fclo: -Float64FromFloat64(6.244142916351348e-17), + }, + 106: { + Fchi: float64(1.2070312971249755), + Fclo: float64(7.458644622627413e-17), + }, + 107: { + Fchi: float64(1.2148438169965134), + Fclo: float64(2.7760519266147807e-17), + }, + 108: { + Fchi: float64(1.222656225220801), + Fclo: -Float64FromFloat64(7.025106921079665e-17), + }, + 109: { + Fchi: float64(1.2304687681290862), + Fclo: float64(3.7292622364618835e-17), + }, + 110: { + Fchi: float64(1.2382812116234925), + Fclo: float64(2.2558949940652082e-17), + }, + 111: { + Fchi: float64(1.2460936706149877), + Fclo: float64(8.499368944400665e-17), + }, + 112: { + Fchi: float64(1.2539063289686938), + Fclo: float64(1.039515474644361e-17), + }, + 113: { + Fchi: float64(1.2617188367227732), + Fclo: float64(3.297262223275499e-17), + }, + 114: { + Fchi: float64(1.2695311590462317), + Fclo: float64(4.509883253594155e-17), + }, + 115: { + Fchi: float64(1.277343660657941), + Fclo: -Float64FromFloat64(7.546987371769545e-17), + }, + 116: { + Fchi: float64(1.2851561882963496), + Fclo: float64(9.454295598818184e-17), + }, + 117: { + Fchi: float64(1.2929686521915196), + Fclo: -Float64FromFloat64(7.28545609119749e-17), + }, + 118: { + Fchi: float64(1.3007813359167737), + Fclo: -Float64FromFloat64(8.934357651462802e-17), + }, + 119: { + Fchi: float64(1.3085938093753886), + Fclo: float64(8.15257059458102e-17), + }, + 120: { + Fchi: float64(1.3164063202609564), + Fclo: float64(6.946341460765881e-18), + }, + 121: { + Fchi: float64(1.3242188320313901), + Fclo: -Float64FromFloat64(7.892731380721676e-17), + }, + 122: { + Fchi: float64(1.3320311786874468), + Fclo: -Float64FromFloat64(4.3384657500713545e-17), + }, + 123: { + Fchi: float64(1.3398436880573092), + Fclo: float64(9.627577954598792e-17), + }, + 124: { + Fchi: float64(1.3476563390295309), + Fclo: float64(4.2492400590204517e-17), + }, + 125: { + Fchi: float64(1.3554687641043626), + Fclo: -Float64FromFloat64(1.0843419551446047e-16), + }, + 126: { + Fchi: float64(1.3632813590971713), + Fclo: -Float64FromFloat64(8.50172782472025e-17), + }, + 127: { + Fchi: float64(1.3710936595522603), + Fclo: -Float64FromFloat64(7.110627206162922e-17), + }, + }, +} + +var X__logf_data = Tlogf_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.33569133332882284), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.2929040563774074), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.2518726580937369), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.21245868807117255), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.17453945183745634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.1380057072319758), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.10275976698545139), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.06871392447020525), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.0357891387398228), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.05204517742929496), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.11081431298787942), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.1652495223695143), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.21687389031699977), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.2659635028121397), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.3127556664073557), + }, + }, + Fln2: float64(0.6931471805599453), + Fpoly: [3]float64{ + 0: -Float64FromFloat64(0.25089342214237154), + 1: float64(0.333456765744066), + 2: -Float64FromFloat64(0.4999997485802103), + }, +} + +var X__optpos int32 + +var Xoptreset int32 + +var X__pow_log_data = Tpow_log_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [7]float64{ + 0: -Float64FromFloat64(0.5), + 1: Float64FromFloat64(0.3333333333333339) * float64(-Int32FromInt32(2)), + 2: -Float64FromFloat64(0.25000000000000033) * float64(-Int32FromInt32(2)), + 3: Float64FromFloat64(0.1999999998830994) * Float64FromInt32(4), + 4: -Float64FromFloat64(0.16666666658719348) * Float64FromInt32(4), + 5: Float64FromFloat64(0.14286370355743763) * float64(-Int32FromInt32(8)), + 6: -Float64FromFloat64(0.12500519079594427) * float64(-Int32FromInt32(8)), + }, + Ftab: [128]struct { + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + }{ + 0: { + Finvc: float64(1.4140625), + Flogc: -Float64FromFloat64(0.3464667673462145), + Flogctail: float64(5.929407345889625e-15), + }, + 1: { + Finvc: float64(1.40625), + Flogc: -Float64FromFloat64(0.34092658697056777), + Flogctail: -Float64FromFloat64(2.544157440035963e-14), + }, + 2: { + Finvc: float64(1.3984375), + Flogc: -Float64FromFloat64(0.3353555419211034), + Flogctail: -Float64FromFloat64(3.443525940775045e-14), + }, + 3: { + Finvc: float64(1.390625), + Flogc: -Float64FromFloat64(0.3297532863724655), + Flogctail: -Float64FromFloat64(2.500123826022799e-15), + }, + 4: { + Finvc: float64(1.3828125), + Flogc: -Float64FromFloat64(0.32411946865420305), + Flogctail: -Float64FromFloat64(8.929337133850617e-15), + }, + 5: { + Finvc: float64(1.375), + Flogc: -Float64FromFloat64(0.31845373111855224), + Flogctail: float64(1.7625431312172662e-14), + }, + 6: { + Finvc: float64(1.3671875), + Flogc: -Float64FromFloat64(0.31275571000389846), + Flogctail: float64(1.5688303180062087e-15), + }, + 7: { + Finvc: float64(1.359375), + Flogc: -Float64FromFloat64(0.3070250352949415), + Flogctail: float64(2.9655274673691784e-14), + }, + 8: { + Finvc: float64(1.3515625), + Flogc: -Float64FromFloat64(0.3012613305781997), + Flogctail: float64(3.7923164802093147e-14), + }, + 9: { + Finvc: float64(1.34375), + Flogc: -Float64FromFloat64(0.2954642128938758), + Flogctail: float64(3.993416384387844e-14), + }, + 10: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 11: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 12: { + Finvc: float64(1.328125), + Flogc: -Float64FromFloat64(0.28376817313062475), + Flogctail: -Float64FromFloat64(1.9852665484979036e-14), + }, + 13: { + Finvc: float64(1.3203125), + Flogc: -Float64FromFloat64(0.27786845100342816), + Flogctail: -Float64FromFloat64(2.814323765595281e-14), + }, + 14: { + Finvc: float64(1.3125), + Flogc: -Float64FromFloat64(0.2719337154836694), + Flogctail: float64(2.7643769993528702e-14), + }, + 15: { + Finvc: float64(1.3046875), + Flogc: -Float64FromFloat64(0.2659635484970977), + Flogctail: -Float64FromFloat64(4.025092402293806e-14), + }, + 16: { + Finvc: float64(1.296875), + Flogc: -Float64FromFloat64(0.25995752443691345), + Flogctail: -Float64FromFloat64(1.2621729398885316e-14), + }, + 17: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 18: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 19: { + Finvc: float64(1.28125), + Flogc: -Float64FromFloat64(0.2478361639045943), + Flogctail: float64(1.3029797173308663e-14), + }, + 20: { + Finvc: float64(1.2734375), + Flogc: -Float64FromFloat64(0.2417199368871934), + Flogctail: float64(4.8230289429940886e-14), + }, + 21: { + Finvc: float64(1.265625), + Flogc: -Float64FromFloat64(0.23556607131274632), + Flogctail: -Float64FromFloat64(2.0592242769647135e-14), + }, + 22: { + Finvc: float64(1.2578125), + Flogc: -Float64FromFloat64(0.22937410106487732), + Flogctail: float64(3.149265065191484e-14), + }, + 23: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 24: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 25: { + Finvc: float64(1.2421875), + Flogc: -Float64FromFloat64(0.21687393830063684), + Flogctail: float64(2.2477465222466186e-14), + }, + 26: { + Finvc: float64(1.234375), + Flogc: -Float64FromFloat64(0.21056476910735), + Flogctail: float64(3.6507188831790577e-16), + }, + 27: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 28: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 29: { + Finvc: float64(1.21875), + Flogc: -Float64FromFloat64(0.19782574332987224), + Flogctail: -Float64FromFloat64(4.7641388950792196e-14), + }, + 30: { + Finvc: float64(1.2109375), + Flogc: -Float64FromFloat64(0.19139485299967873), + Flogctail: float64(4.9278276214647115e-14), + }, + 31: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 32: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 33: { + Finvc: float64(1.1953125), + Flogc: -Float64FromFloat64(0.1784076574728033), + Flogctail: -Float64FromFloat64(1.5003333854266542e-14), + }, + 34: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 35: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 36: { + Finvc: float64(1.1796875), + Flogc: -Float64FromFloat64(0.1652495728952772), + Flogctail: -Float64FromFloat64(2.99659267292569e-14), + }, + 37: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 38: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 39: { + Finvc: float64(1.1640625), + Flogc: -Float64FromFloat64(0.15191604202584585), + Flogctail: float64(3.879296723063646e-15), + }, + 40: { + Finvc: float64(1.15625), + Flogc: -Float64FromFloat64(0.1451820098444614), + Flogctail: -Float64FromFloat64(3.6506824353335045e-14), + }, + 41: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 42: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 43: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 44: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 45: { + Finvc: float64(1.1328125), + Flogc: -Float64FromFloat64(0.12470347850091912), + Flogctail: -Float64FromFloat64(3.811763084710266e-14), + }, + 46: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 47: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 48: { + Finvc: float64(1.1171875), + Flogc: -Float64FromFloat64(0.11081436634026431), + Flogctail: -Float64FromFloat64(2.5799991283069902e-14), + }, + 49: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 50: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 51: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 52: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 53: { + Finvc: float64(1.09375), + Flogc: -Float64FromFloat64(0.089612158689647), + Flogctail: -Float64FromFloat64(4.012913552726574e-14), + }, + 54: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 55: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 56: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 57: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 58: { + Finvc: float64(1.0703125), + Flogc: -Float64FromFloat64(0.06795066190852594), + Flogctail: float64(1.8195060030168815e-14), + }, + 59: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 60: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 61: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 62: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 63: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 64: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 65: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 66: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 67: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 68: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 69: { + Finvc: float64(1.0234375), + Flogc: -Float64FromFloat64(0.023167059281490765), + Flogctail: -Float64FromFloat64(4.361324067851568e-14), + }, + 70: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 71: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 72: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 73: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 74: { + Finvc: float64(1), + }, + 75: { + Finvc: float64(1), + }, + 76: { + Finvc: float64(0.9921875), + Flogc: float64(0.007843177461040796), + Flogctail: -Float64FromFloat64(1.4902732911301337e-14), + }, + 77: { + Finvc: float64(0.984375), + Flogc: float64(0.01574835696817445), + Flogctail: -Float64FromFloat64(3.527980389655325e-14), + }, + 78: { + Finvc: float64(0.9765625), + Flogc: float64(0.023716526617363343), + Flogctail: -Float64FromFloat64(4.730054772033249e-14), + }, + 79: { + Finvc: float64(0.96875), + Flogc: float64(0.03174869831457272), + Flogctail: float64(7.580310369375161e-15), + }, + 80: { + Finvc: float64(0.9609375), + Flogc: float64(0.039845908547249564), + Flogctail: -Float64FromFloat64(4.9893776716773285e-14), + }, + 81: { + Finvc: float64(0.953125), + Flogc: float64(0.048009219186383234), + Flogctail: -Float64FromFloat64(2.262629393030674e-14), + }, + 82: { + Finvc: float64(0.9453125), + Flogc: float64(0.056239718322899535), + Flogctail: -Float64FromFloat64(2.345674491018699e-14), + }, + 83: { + Finvc: float64(0.94140625), + Flogc: float64(0.06038051098892083), + Flogctail: -Float64FromFloat64(1.3352588834854848e-14), + }, + 84: { + Finvc: float64(0.93359375), + Flogc: float64(0.06871389254808946), + Flogctail: -Float64FromFloat64(3.765296820388875e-14), + }, + 85: { + Finvc: float64(0.92578125), + Flogc: float64(0.07711730334438016), + Flogctail: float64(5.1128335719851986e-14), + }, + 86: { + Finvc: float64(0.91796875), + Flogc: float64(0.08559193033545398), + Flogctail: -Float64FromFloat64(5.046674438470119e-14), + }, + 87: { + Finvc: float64(0.9140625), + Flogc: float64(0.08985632912185793), + Flogctail: float64(3.1218748807418837e-15), + }, + 88: { + Finvc: float64(0.90625), + Flogc: float64(0.09844007281321865), + Flogctail: float64(3.3871241029241416e-14), + }, + 89: { + Finvc: float64(0.8984375), + Flogc: float64(0.10709813555638448), + Flogctail: -Float64FromFloat64(1.7376727386423858e-14), + }, + 90: { + Finvc: float64(0.89453125), + Flogc: float64(0.11145544092528326), + Flogctail: float64(3.957125899799804e-14), + }, + 91: { + Finvc: float64(0.88671875), + Flogc: float64(0.12022742699821265), + Flogctail: -Float64FromFloat64(5.2849453521890294e-14), + }, + 92: { + Finvc: float64(0.8828125), + Flogc: float64(0.12464244520731427), + Flogctail: -Float64FromFloat64(3.767012502308738e-14), + }, + 93: { + Finvc: float64(0.875), + Flogc: float64(0.13353139262449076), + Flogctail: float64(3.1859736349078334e-14), + }, + 94: { + Finvc: float64(0.87109375), + Flogc: float64(0.13800567301939282), + Flogctail: float64(5.0900642926060466e-14), + }, + 95: { + Finvc: float64(0.86328125), + Flogc: float64(0.14701474296180095), + Flogctail: float64(8.710783796122478e-15), + }, + 96: { + Finvc: float64(0.859375), + Flogc: float64(0.15154989812720032), + Flogctail: float64(6.157896229122976e-16), + }, + 97: { + Finvc: float64(0.8515625), + Flogc: float64(0.16068238169043525), + Flogctail: float64(3.821577743916796e-14), + }, + 98: { + Finvc: float64(0.84765625), + Flogc: float64(0.16528009093906348), + Flogctail: float64(3.9440046718453496e-14), + }, + 99: { + Finvc: float64(0.83984375), + Flogc: float64(0.17453941635187675), + Flogctail: float64(2.2924522154618074e-14), + }, + 100: { + Finvc: float64(0.8359375), + Flogc: float64(0.17920142945774842), + Flogctail: -Float64FromFloat64(3.742530094732263e-14), + }, + 101: { + Finvc: float64(0.83203125), + Flogc: float64(0.18388527877016259), + Flogctail: -Float64FromFloat64(2.5223102140407338e-14), + }, + 102: { + Finvc: float64(0.82421875), + Flogc: float64(0.1933193110035063), + Flogctail: -Float64FromFloat64(1.0320443688698849e-14), + }, + 103: { + Finvc: float64(0.8203125), + Flogc: float64(0.19806991376208316), + Flogctail: float64(1.0634128304268335e-14), + }, + 104: { + Finvc: float64(0.8125), + Flogc: float64(0.20763936477828793), + Flogctail: -Float64FromFloat64(4.3425422595242564e-14), + }, + 105: { + Finvc: float64(0.80859375), + Flogc: float64(0.21245865121420593), + Flogctail: -Float64FromFloat64(1.2527395755711364e-14), + }, + 106: { + Finvc: float64(0.8046875), + Flogc: float64(0.21730127569003344), + Flogctail: -Float64FromFloat64(5.204008743405884e-14), + }, + 107: { + Finvc: float64(0.80078125), + Flogc: float64(0.22216746534115828), + Flogctail: -Float64FromFloat64(3.979844515951702e-15), + }, + 108: { + Finvc: float64(0.79296875), + Flogc: float64(0.2319714654378231), + Flogctail: -Float64FromFloat64(4.7955860343296286e-14), + }, + 109: { + Finvc: float64(0.7890625), + Flogc: float64(0.2369097470783572), + Flogctail: float64(5.015686013791602e-16), + }, + 110: { + Finvc: float64(0.78515625), + Flogc: float64(0.24187253642048745), + Flogctail: -Float64FromFloat64(7.252318953240293e-16), + }, + 111: { + Finvc: float64(0.78125), + Flogc: float64(0.2468600779315011), + Flogctail: float64(2.4688324156011588e-14), + }, + 112: { + Finvc: float64(0.7734375), + Flogc: float64(0.2569104137850218), + Flogctail: float64(5.465121253624792e-15), + }, + 113: { + Finvc: float64(0.76953125), + Flogc: float64(0.26197371574153294), + Flogctail: float64(4.102651071698446e-14), + }, + 114: { + Finvc: float64(0.765625), + Flogc: float64(0.2670627852490952), + Flogctail: -Float64FromFloat64(4.996736502345936e-14), + }, + 115: { + Finvc: float64(0.76171875), + Flogc: float64(0.27217788591576664), + Flogctail: float64(4.903580708156347e-14), + }, + 116: { + Finvc: float64(0.7578125), + Flogc: float64(0.27731928541618345), + Flogctail: float64(5.089628039500759e-14), + }, + 117: { + Finvc: float64(0.75390625), + Flogc: float64(0.28248725557466514), + Flogctail: float64(1.1782016386565151e-14), + }, + 118: { + Finvc: float64(0.74609375), + Flogc: float64(0.29290401643288533), + Flogctail: float64(4.727452940514406e-14), + }, + 119: { + Finvc: float64(0.7421875), + Flogc: float64(0.29815337231912054), + Flogctail: -Float64FromFloat64(4.4204083338755686e-14), + }, + 120: { + Finvc: float64(0.73828125), + Flogc: float64(0.3034304294199046), + Flogctail: float64(1.548345993498083e-14), + }, + 121: { + Finvc: float64(0.734375), + Flogc: float64(0.30873548164959175), + Flogctail: float64(2.1522127491642888e-14), + }, + 122: { + Finvc: float64(0.73046875), + Flogc: float64(0.3140688276249648), + Flogctail: float64(1.1054030169005386e-14), + }, + 123: { + Finvc: float64(0.7265625), + Flogc: float64(0.31943077076641657), + Flogctail: -Float64FromFloat64(5.534326352070679e-14), + }, + 124: { + Finvc: float64(0.72265625), + Flogc: float64(0.3248216194012912), + Flogctail: -Float64FromFloat64(5.351646604259541e-14), + }, + 125: { + Finvc: float64(0.71875), + Flogc: float64(0.33024168687052224), + Flogctail: float64(5.4612144489920215e-14), + }, + 126: { + Finvc: float64(0.71484375), + Flogc: float64(0.3356912916381134), + Flogctail: float64(2.8136969901227338e-14), + }, + 127: { + Finvc: float64(0.7109375), + Flogc: float64(0.3411707574027787), + Flogctail: -Float64FromFloat64(1.156568624616423e-14), + }, + }, +} + +var X__powf_log2_data = Tpowf_log2_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673) * float64(Int32FromInt32(1)< %v", r) }() } - return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { @@ -31227,7 +31227,7 @@ func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) defer func() { trc("-> %v", r) }() } - return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + 5*8))) + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale + 5*8))) } func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { @@ -31807,7 +31807,7 @@ func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n var _ /* z at bp+8 */ uintptr _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old_cats, old_errno, p1, plural, q, r, rem, rule, trans, v10, v11, v12, v14, v15, v17, v18, v21, v3, v5, v6, v8, v9 defer func() { Xrealloc(tls, name, 0) }() - loc = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + loc = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) /* match gnu gettext behaviour */ if !(msgid1 != 0) { @@ -98459,7 +98459,7 @@ func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb ui *(*Tmbstate_t)(unsafe.Pointer(bp + 24)) = Tmbstate_t{} type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) - ploc = uintptr(___get_tp(tls)) + 168 + ploc = ___get_tp(tls) + 168 loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { return uint64(0) @@ -99493,7 +99493,7 @@ func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) defer func() { trc("-> %v", r) }() } - return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { @@ -100211,7 +100211,7 @@ func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) defer func() { trc("-> %v", r1) }() } - return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { @@ -100377,7 +100377,7 @@ func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize var ret Tssize_t _, _ = ap, ret ap = va - ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale, fmt, ap) + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale, fmt, ap) _ = ap return ret } @@ -100452,7 +100452,7 @@ func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) defer func() { trc("-> %v", r) }() } - return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } // C documentation @@ -100541,7 +100541,7 @@ func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { var global, old, v1, v2 Tlocale_t var self Tpthread_t _, _, _, _, _ = global, old, self, v1, v2 - self = uintptr(___get_tp(tls)) + self = ___get_tp(tls) old = (*t__pthread)(unsafe.Pointer(self)).Flocale global = uintptr(unsafe.Pointer(&X__libc)) + 56 if new1 != 0 { @@ -100584,7 +100584,7 @@ func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) defer func() { trc("-> %v", r1) }() } - return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } // C documentation @@ -100625,7 +100625,7 @@ func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) defer func() { trc("-> %v", r) }() } - return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } // C documentation @@ -102387,7 +102387,7 @@ func Xasinh(tls *TLS, x3 float64) (r float64) { if uint64(8) == uint64(8) { y1 = x3 + Float64FromFloat32(1.329227995784916e+36) } else { - y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) } } } @@ -103168,7 +103168,7 @@ func Xcbrt(tls *TLS, x float64) (r1 float64) { hx = hx/uint32(3) + _B1 } p1 = bp - *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (Uint64FromUint64(1) << Int32FromInt32(63))) + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (Uint64FromUint64(1) << Int32FromInt32(63)) *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) t = *(*float64)(unsafe.Pointer(bp)) /* @@ -103194,7 +103194,7 @@ func Xcbrt(tls *TLS, x float64) (r1 float64) { * before the final error is larger than 0.667 ulps. */ *(*float64)(unsafe.Pointer(bp)) = t - *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(*(*Tuint64_t)(unsafe.Pointer(bp))+Uint64FromUint32(0x80000000)) & uint64(0xffffffffc0000000) + *(*Tuint64_t)(unsafe.Pointer(bp)) = (*(*Tuint64_t)(unsafe.Pointer(bp)) + Uint64FromUint32(0x80000000)) & uint64(0xffffffffc0000000) t = *(*float64)(unsafe.Pointer(bp)) /* one step Newton iteration to 53 bits with error < 0.667 ulps */ s = t * t /* t*t is exact */ @@ -103446,9 +103446,9 @@ func Xcopysign(tls *TLS, x float64, y float64) (r float64) { }{} *(*float64)(unsafe.Pointer(bp + 8)) = y p1 = bp - *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2))) + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) p2 = bp - *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&(Uint64FromUint64(1)< 0, the exponent of scale might have overflowed by <= 460. */ - sbits = Tuint64_t(sbits - Uint64FromUint64(1009)< 0, the exponent of scale might have overflowed by 1. */ - sbits = Tuint64_t(sbits - Uint64FromUint64(1)<> Int32FromInt32(12))) - uxi = Tuint64_t(uxi | Uint64FromUint64(1)<> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<> Int32FromInt32(12))) + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) p7 = bp + 16 - *(*Tuint64_t)(unsafe.Pointer(p7)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< 0 { - uxi = Tuint64_t(uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) @@ -106197,9 +106197,9 @@ func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { } *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) p1 = bp - *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & Uint64FromUint64(0x800fffffffffffff)) + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & Uint64FromUint64(0x800fffffffffffff) p2 = bp - *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) | Uint64FromUint64(0x3fe0000000000000)) + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) | Uint64FromUint64(0x3fe0000000000000) return *(*float64)(unsafe.Pointer(bp)) } @@ -106312,9 +106312,9 @@ func Xhypot(tls *TLS, x float64, y float64) (r float64) { *(*float64)(unsafe.Pointer(bp + 8)) = y /* arrange |x| >= |y| */ p1 = bp - *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) >> Int32FromInt32(1))) + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) p2 = bp + 8 - *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) & (-Uint64FromUint64(1) >> Int32FromInt32(1))) + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { ut = *(*struct { Fi [0]Tuint64_t @@ -109189,7 +109189,7 @@ func Xlog(tls *TLS, x1 float64) (r1 float64) { /* x is subnormal, normalize it. */ v9 = x1 * float64(4.503599627370496e+15) ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) - ix = Tuint64_t(ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ - iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)<> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ - iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)<> Int32FromInt32(12) >> e) + mask = -Uint64FromUint64(1) >> Int32FromInt32(12) >> e if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { *(*float64)(unsafe.Pointer(iptr)) = x p3 = bp - *(*Tuint64_t)(unsafe.Pointer(p3)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p3)) & (Uint64FromUint64(1) << Int32FromInt32(63))) + *(*Tuint64_t)(unsafe.Pointer(p3)) = *(*Tuint64_t)(unsafe.Pointer(p3)) & (Uint64FromUint64(1) << Int32FromInt32(63)) return *(*float64)(unsafe.Pointer(bp)) } *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask @@ -110329,13 +110329,13 @@ _2: if *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == *(*Tuint64_t)(unsafe.Pointer(bp + 16)) { return y3 } - ax = uint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) & (-Uint64FromUint64(1) / Uint64FromInt32(2))) - ay = uint64(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) & (-Uint64FromUint64(1) / Uint64FromInt32(2))) + ax = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) + ay = *(*Tuint64_t)(unsafe.Pointer(bp + 16)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) if ax == uint64(0) { if ay == uint64(0) { return y3 } - *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(*(*Tuint64_t)(unsafe.Pointer(bp + 16))&(Uint64FromUint64(1)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ - iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ - sbits = Tuint64_t(sbits - Uint64FromUint64(1009)<> Int32FromInt32(12))) - uxi = Tuint64_t(uxi | Uint64FromUint64(1)<> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<> Int32FromInt32(12))) + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) p7 = bp + 16 - *(*Tuint64_t)(unsafe.Pointer(p7)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< 0 { - uxi = Tuint64_t(uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) @@ -111785,7 +111785,7 @@ func Xround(tls *TLS, x3 float64) (r float64) { if uint64(8) == uint64(8) { y1 = x3 + _toint6 } else { - y2 = float64(x3 + _toint6) + y2 = x3 + _toint6 } } return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) @@ -113542,7 +113542,7 @@ func Xtrunc(tls *TLS, x3 float64) (r float64) { if e < int32(12) { e = int32(1) } - m = uint64(-Uint64FromUint64(1) >> e) + m = -Uint64FromUint64(1) >> e if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { return x3 } @@ -113552,7 +113552,7 @@ func Xtrunc(tls *TLS, x3 float64) (r float64) { if uint64(8) == uint64(8) { y1 = x3 + Float64FromFloat32(1.329227995784916e+36) } else { - y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) } } *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m @@ -116744,7 +116744,7 @@ func Xbtowc(tls *TLS, c int32) (r Twint_t) { if uint32(b) < uint32(128) { v1 = uint32(b) } else { - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v3 = int32(4) } else { v3 = int32(1) @@ -116945,7 +116945,7 @@ func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize *(*Twchar_t)(unsafe.Pointer(wc)) = v1 return BoolUint64(!!(v1 != 0)) } - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v2 = int32(4) } else { v2 = int32(1) @@ -117116,7 +117116,7 @@ func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Ts goto resume0 } } - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v3 = int32(4) } else { v3 = int32(1) @@ -117344,7 +117344,7 @@ func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { *(*Twchar_t)(unsafe.Pointer(wc)) = v1 return BoolInt32(!!(v1 != 0)) } - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v2 = int32(4) } else { v2 = int32(1) @@ -117414,7 +117414,7 @@ func Xwcrtomb(tls *TLS, s uintptr, wc Twchar_t, st uintptr) (r Tsize_t) { *(*int8)(unsafe.Pointer(s)) = int8(wc) return uint64(1) } else { - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v1 = int32(4) } else { v1 = int32(1) @@ -117621,7 +117621,7 @@ func Xwctob(tls *TLS, c Twint_t) (r int32) { if c < uint32(128) { return int32(c) } - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v1 = int32(4) } else { v1 = int32(1) @@ -121247,10 +121247,10 @@ func X__h_errno_location(tls *TLS) (r uintptr) { trc("tls=%v, (%v:)", tls, origin(2)) defer func() { trc("-> %v", r) }() } - if !((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstack != 0) { + if !((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstack != 0) { return uintptr(unsafe.Pointer(&Xh_errno)) } - return uintptr(___get_tp(tls)) + 160 + return ___get_tp(tls) + 160 } func Xherror(tls *TLS, msg uintptr) { @@ -128059,7 +128059,7 @@ func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, break } if v9 = uint32(*(*int8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v8 = int32(4) } else { v8 = int32(1) @@ -134213,13 +134213,13 @@ func _walk(tls *TLS, r uintptr, action uintptr, d int32) { return } if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { - (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, _leaf, d) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) } else { - (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, _preorder, d) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8)), action, d+int32(1)) - (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, _postorder, d) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), action, d+int32(1)) - (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, _endorder, d) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) } } @@ -134509,7 +134509,7 @@ func Xraise(tls *TLS, sig int32) (r int32) { var _ /* set at bp+0 */ Tsigset_t _ = ret X__block_app_sigs(tls, bp) - ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid), int64(sig))))) + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid), int64(sig))))) X__restore_sigs(tls, bp) return ret } @@ -135227,13 +135227,13 @@ func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r return ret } *(*Tstat)(unsafe.Pointer(st)) = Tstat{ - Fst_dev: uint64(uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 { v1 = ___lockfile(tls, f) @@ -137907,7 +137907,7 @@ func X__do_orphaned_stdio_locks(tls *TLS) { } var f uintptr _ = f - f = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks + f = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks for { if !(f != 0) { break @@ -137935,7 +137935,7 @@ func X__unlist_locked_file(tls *TLS, f uintptr) { if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked } else { - (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked } } } @@ -137962,7 +137962,7 @@ func Xftrylockfile(tls *TLS, f uintptr) (r int32) { var self Tpthread_t var v5 bool _, _, _, _, _, _, _ = owner, self, tid, v1, v2, v3, v5 - self = uintptr(___get_tp(tls)) + self = ___get_tp(tls) tid = (*t__pthread)(unsafe.Pointer(self)).Ftid owner = AtomicLoadPInt32(f + 140) if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { @@ -138024,7 +138024,7 @@ func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { __need_unlock = v1 if mode != 0 { if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { - if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { v3 = int32(4) } else { v3 = int32(1) @@ -138226,7 +138226,7 @@ func Xgetc(tls *TLS, f1 uintptr) (r int32) { _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 v1 = f1 l = AtomicLoadPInt32(v1 + 140) - if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { v6 = v1 + 8 v5 = *(*uintptr)(unsafe.Pointer(v6)) @@ -138346,7 +138346,7 @@ func Xgetchar(tls *TLS) (r int32) { _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) l = AtomicLoadPInt32(v1 + 140) - if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { v6 = v1 + 8 v5 = *(*uintptr)(unsafe.Pointer(v6)) @@ -139058,7 +139058,7 @@ func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { v1 = c1 v2 = f1 l = AtomicLoadPInt32(v2 + 140) - if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { v6 = uint8(v1) v8 = v2 + 40 @@ -139188,7 +139188,7 @@ func Xputchar(tls *TLS, c1 int32) (r int32) { v1 = c1 v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) l = AtomicLoadPInt32(v2 + 140) - if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { v6 = uint8(v1) v8 = v2 + 40 @@ -139715,7 +139715,7 @@ func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { var v3 bool var _ /* mbc at bp+0 */ [4]uint8 _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 - ploc = uintptr(___get_tp(tls)) + 168 + ploc = ___get_tp(tls) + 168 loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) if AtomicLoadPInt32(f+140) >= 0 { v1 = ___lockfile(tls, f) @@ -139967,7 +139967,7 @@ func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { case int32(_ULONG): (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_ULLONG): - (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint64(&*(*Tva_list)(unsafe.Pointer(ap)))) + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_SHORT): (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) case int32(_USHORT): @@ -139989,7 +139989,7 @@ func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { case int32(_UIPTR): (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) case int32(_DBL): - *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_LDBL): *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) } @@ -142144,7 +142144,7 @@ func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { case int32(_ULONG): (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_ULLONG): - (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint64(&*(*Tva_list)(unsafe.Pointer(ap)))) + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_SHORT): (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) case int32(_USHORT): @@ -142166,7 +142166,7 @@ func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { case int32(_UIPTR): (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) case int32(_DBL): - *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) case int32(_LDBL): *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) } @@ -144328,7 +144328,7 @@ func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) defer func() { trc("-> %v", r) }() } - return _strtox1(tls, s, p, base, uint64(Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))) + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) } func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { @@ -144336,7 +144336,7 @@ func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) defer func() { trc("-> %v", r) }() } - return int64(_strtox1(tls, s, p, base, uint64(Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1))))) + return int64(_strtox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) } func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { @@ -144608,7 +144608,7 @@ func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) defer func() { trc("-> %v", r) }() } - return _wcstox1(tls, s, p, base, uint64(Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))) + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) } func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { @@ -144616,7 +144616,7 @@ func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) defer func() { trc("-> %v", r) }() } - return int64(_wcstox1(tls, s, p, base, uint64(Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1))))) + return int64(_wcstox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) } func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { @@ -149869,7 +149869,7 @@ func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) defer func() { trc("-> %v", r) }() } - return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { @@ -150613,7 +150613,7 @@ func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) defer func() { trc("-> %v", r) }() } - return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) } func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { diff --git a/vendor/modernc.org/libc/ccgo_linux_arm.go b/vendor/modernc.org/libc/ccgo_linux_arm.go new file mode 100644 index 0000000..c703c39 --- /dev/null +++ b/vendor/modernc.org/libc/ccgo_linux_arm.go @@ -0,0 +1,156683 @@ +// Code generated for linux/arm by 'gcc --package-name=libc --prefix-enumerator=_ --prefix-external=x_ --prefix-field=F --prefix-static-internal=_ --prefix-static-none=_ --prefix-tagged-enum=_ --prefix-tagged-struct=T --prefix-tagged-union=T --prefix-typename=T --prefix-undefined=_ -emit-func-aliases -eval-all-macros -extended-errors -ignore-asm-errors -isystem -std=c99 -nostdinc -ffreestanding -D_XOPEN_SOURCE=700 -I./arch/arm -I./arch/generic -Iobj/src/internal -I./src/include -I./src/internal -Iobj/include -I./include -DNDEBUG -nostdlib -shared -o lib/libc.so.go obj/src/complex/__cexp.lo.go obj/src/complex/__cexpf.lo.go obj/src/complex/cabs.lo.go obj/src/complex/cabsf.lo.go obj/src/complex/cabsl.lo.go obj/src/complex/cacos.lo.go obj/src/complex/cacosf.lo.go obj/src/complex/cacosh.lo.go obj/src/complex/cacoshf.lo.go obj/src/complex/cacoshl.lo.go obj/src/complex/cacosl.lo.go obj/src/complex/carg.lo.go obj/src/complex/cargf.lo.go obj/src/complex/cargl.lo.go obj/src/complex/casin.lo.go obj/src/complex/casinf.lo.go obj/src/complex/casinh.lo.go obj/src/complex/casinhf.lo.go obj/src/complex/casinhl.lo.go obj/src/complex/casinl.lo.go obj/src/complex/catan.lo.go obj/src/complex/catanf.lo.go obj/src/complex/catanh.lo.go obj/src/complex/catanhf.lo.go obj/src/complex/catanhl.lo.go obj/src/complex/catanl.lo.go obj/src/complex/ccos.lo.go obj/src/complex/ccosf.lo.go obj/src/complex/ccosh.lo.go obj/src/complex/ccoshf.lo.go obj/src/complex/ccoshl.lo.go obj/src/complex/ccosl.lo.go obj/src/complex/cexp.lo.go obj/src/complex/cexpf.lo.go obj/src/complex/cexpl.lo.go obj/src/complex/cimag.lo.go obj/src/complex/cimagf.lo.go obj/src/complex/cimagl.lo.go obj/src/complex/clog.lo.go obj/src/complex/clogf.lo.go obj/src/complex/clogl.lo.go obj/src/complex/conj.lo.go obj/src/complex/conjf.lo.go obj/src/complex/conjl.lo.go obj/src/complex/cpow.lo.go obj/src/complex/cpowf.lo.go obj/src/complex/cpowl.lo.go obj/src/complex/cproj.lo.go obj/src/complex/cprojf.lo.go obj/src/complex/cprojl.lo.go obj/src/complex/creal.lo.go obj/src/complex/crealf.lo.go obj/src/complex/creall.lo.go obj/src/complex/csin.lo.go obj/src/complex/csinf.lo.go obj/src/complex/csinh.lo.go obj/src/complex/csinhf.lo.go obj/src/complex/csinhl.lo.go obj/src/complex/csinl.lo.go obj/src/complex/csqrt.lo.go obj/src/complex/csqrtf.lo.go obj/src/complex/csqrtl.lo.go obj/src/complex/ctan.lo.go obj/src/complex/ctanf.lo.go obj/src/complex/ctanh.lo.go obj/src/complex/ctanhf.lo.go obj/src/complex/ctanhl.lo.go obj/src/complex/ctanl.lo.go obj/src/conf/confstr.lo.go obj/src/conf/fpathconf.lo.go obj/src/conf/legacy.lo.go obj/src/conf/pathconf.lo.go obj/src/conf/sysconf.lo.go obj/src/crypt/crypt.lo.go obj/src/crypt/crypt_blowfish.lo.go obj/src/crypt/crypt_des.lo.go obj/src/crypt/crypt_md5.lo.go obj/src/crypt/crypt_r.lo.go obj/src/crypt/crypt_sha256.lo.go obj/src/crypt/crypt_sha512.lo.go obj/src/crypt/encrypt.lo.go obj/src/ctype/__ctype_b_loc.lo.go obj/src/ctype/__ctype_get_mb_cur_max.lo.go obj/src/ctype/__ctype_tolower_loc.lo.go obj/src/ctype/__ctype_toupper_loc.lo.go obj/src/ctype/isalnum.lo.go obj/src/ctype/isalpha.lo.go obj/src/ctype/isascii.lo.go obj/src/ctype/isblank.lo.go obj/src/ctype/iscntrl.lo.go obj/src/ctype/isdigit.lo.go obj/src/ctype/isgraph.lo.go obj/src/ctype/islower.lo.go obj/src/ctype/isprint.lo.go obj/src/ctype/ispunct.lo.go obj/src/ctype/isspace.lo.go obj/src/ctype/isupper.lo.go obj/src/ctype/iswalnum.lo.go obj/src/ctype/iswalpha.lo.go obj/src/ctype/iswblank.lo.go obj/src/ctype/iswcntrl.lo.go obj/src/ctype/iswctype.lo.go obj/src/ctype/iswdigit.lo.go obj/src/ctype/iswgraph.lo.go obj/src/ctype/iswlower.lo.go obj/src/ctype/iswprint.lo.go obj/src/ctype/iswpunct.lo.go obj/src/ctype/iswspace.lo.go obj/src/ctype/iswupper.lo.go obj/src/ctype/iswxdigit.lo.go obj/src/ctype/isxdigit.lo.go obj/src/ctype/toascii.lo.go obj/src/ctype/tolower.lo.go obj/src/ctype/toupper.lo.go obj/src/ctype/towctrans.lo.go obj/src/ctype/wcswidth.lo.go obj/src/ctype/wctrans.lo.go obj/src/ctype/wcwidth.lo.go obj/src/dirent/alphasort.lo.go obj/src/dirent/closedir.lo.go obj/src/dirent/dirfd.lo.go obj/src/dirent/fdopendir.lo.go obj/src/dirent/opendir.lo.go obj/src/dirent/readdir.lo.go obj/src/dirent/readdir_r.lo.go obj/src/dirent/rewinddir.lo.go obj/src/dirent/scandir.lo.go obj/src/dirent/seekdir.lo.go obj/src/dirent/telldir.lo.go obj/src/dirent/versionsort.lo.go obj/src/env/__environ.lo.go obj/src/env/__reset_tls.lo.go obj/src/env/__stack_chk_fail.lo.go obj/src/env/clearenv.lo.go obj/src/env/getenv.lo.go obj/src/env/putenv.lo.go obj/src/env/secure_getenv.lo.go obj/src/env/setenv.lo.go obj/src/env/unsetenv.lo.go obj/src/errno/strerror.lo.go obj/src/exit/_Exit.lo.go obj/src/exit/abort_lock.lo.go obj/src/exit/assert.lo.go obj/src/exit/at_quick_exit.lo.go obj/src/exit/quick_exit.lo.go obj/src/fcntl/creat.lo.go obj/src/fcntl/fcntl.lo.go obj/src/fcntl/open.lo.go obj/src/fcntl/openat.lo.go obj/src/fcntl/posix_fadvise.lo.go obj/src/fcntl/posix_fallocate.lo.go obj/src/fenv/arm/fenv.lo.go obj/src/internal/defsysinfo.lo.go obj/src/internal/emulate_wait4.lo.go obj/src/internal/floatscan.lo.go obj/src/internal/intscan.lo.go obj/src/internal/libc.lo.go obj/src/internal/procfdname.lo.go obj/src/internal/shgetc.lo.go obj/src/internal/syscall_ret.lo.go obj/src/internal/vdso.lo.go obj/src/internal/version.lo.go obj/src/ipc/ftok.lo.go obj/src/ipc/msgctl.lo.go obj/src/ipc/msgget.lo.go obj/src/ipc/msgrcv.lo.go obj/src/ipc/msgsnd.lo.go obj/src/ipc/semctl.lo.go obj/src/ipc/semget.lo.go obj/src/ipc/semop.lo.go obj/src/ipc/semtimedop.lo.go obj/src/ipc/shmat.lo.go obj/src/ipc/shmctl.lo.go obj/src/ipc/shmdt.lo.go obj/src/ipc/shmget.lo.go obj/src/legacy/cuserid.lo.go obj/src/legacy/err.lo.go obj/src/legacy/euidaccess.lo.go obj/src/legacy/ftw.lo.go obj/src/legacy/futimes.lo.go obj/src/legacy/getdtablesize.lo.go obj/src/legacy/getloadavg.lo.go obj/src/legacy/getpagesize.lo.go obj/src/legacy/getpass.lo.go obj/src/legacy/getusershell.lo.go obj/src/legacy/isastream.lo.go obj/src/legacy/lutimes.lo.go obj/src/legacy/ulimit.lo.go obj/src/legacy/utmpx.lo.go obj/src/linux/adjtime.lo.go obj/src/linux/adjtimex.lo.go obj/src/linux/arch_prctl.lo.go obj/src/linux/brk.lo.go obj/src/linux/cache.lo.go obj/src/linux/cap.lo.go obj/src/linux/chroot.lo.go obj/src/linux/clock_adjtime.lo.go obj/src/linux/copy_file_range.lo.go obj/src/linux/epoll.lo.go obj/src/linux/eventfd.lo.go obj/src/linux/fallocate.lo.go obj/src/linux/fanotify.lo.go obj/src/linux/flock.lo.go obj/src/linux/getdents.lo.go obj/src/linux/getrandom.lo.go obj/src/linux/inotify.lo.go obj/src/linux/ioperm.lo.go obj/src/linux/iopl.lo.go obj/src/linux/klogctl.lo.go obj/src/linux/memfd_create.lo.go obj/src/linux/mlock2.lo.go obj/src/linux/module.lo.go obj/src/linux/mount.lo.go obj/src/linux/name_to_handle_at.lo.go obj/src/linux/open_by_handle_at.lo.go obj/src/linux/personality.lo.go obj/src/linux/pivot_root.lo.go obj/src/linux/prctl.lo.go obj/src/linux/preadv2.lo.go obj/src/linux/prlimit.lo.go obj/src/linux/process_vm.lo.go obj/src/linux/ptrace.lo.go obj/src/linux/pwritev2.lo.go obj/src/linux/quotactl.lo.go obj/src/linux/readahead.lo.go obj/src/linux/reboot.lo.go obj/src/linux/remap_file_pages.lo.go obj/src/linux/sbrk.lo.go obj/src/linux/sendfile.lo.go obj/src/linux/setfsgid.lo.go obj/src/linux/setfsuid.lo.go obj/src/linux/sethostname.lo.go obj/src/linux/setns.lo.go obj/src/linux/settimeofday.lo.go obj/src/linux/signalfd.lo.go obj/src/linux/splice.lo.go obj/src/linux/statx.lo.go obj/src/linux/stime.lo.go obj/src/linux/swap.lo.go obj/src/linux/sync_file_range.lo.go obj/src/linux/syncfs.lo.go obj/src/linux/sysinfo.lo.go obj/src/linux/tee.lo.go obj/src/linux/timerfd.lo.go obj/src/linux/unshare.lo.go obj/src/linux/utimes.lo.go obj/src/linux/vhangup.lo.go obj/src/linux/vmsplice.lo.go obj/src/linux/wait3.lo.go obj/src/linux/wait4.lo.go obj/src/linux/xattr.lo.go obj/src/locale/__lctrans.lo.go obj/src/locale/__mo_lookup.lo.go obj/src/locale/bind_textdomain_codeset.lo.go obj/src/locale/c_locale.lo.go obj/src/locale/catclose.lo.go obj/src/locale/catgets.lo.go obj/src/locale/catopen.lo.go obj/src/locale/dcngettext.lo.go obj/src/locale/duplocale.lo.go obj/src/locale/freelocale.lo.go obj/src/locale/iconv.lo.go obj/src/locale/iconv_close.lo.go obj/src/locale/langinfo.lo.go obj/src/locale/locale_map.lo.go obj/src/locale/localeconv.lo.go obj/src/locale/newlocale.lo.go obj/src/locale/pleval.lo.go obj/src/locale/setlocale.lo.go obj/src/locale/strcoll.lo.go obj/src/locale/strfmon.lo.go obj/src/locale/strtod_l.lo.go obj/src/locale/strxfrm.lo.go obj/src/locale/textdomain.lo.go obj/src/locale/uselocale.lo.go obj/src/locale/wcscoll.lo.go obj/src/locale/wcsxfrm.lo.go obj/src/malloc/reallocarray.lo.go obj/src/math/__cos.lo.go obj/src/math/__cosdf.lo.go obj/src/math/__cosl.lo.go obj/src/math/__expo2.lo.go obj/src/math/__expo2f.lo.go obj/src/math/__fpclassify.lo.go obj/src/math/__fpclassifyf.lo.go obj/src/math/__fpclassifyl.lo.go obj/src/math/__invtrigl.lo.go obj/src/math/__math_divzero.lo.go obj/src/math/__math_divzerof.lo.go obj/src/math/__math_invalid.lo.go obj/src/math/__math_invalidf.lo.go obj/src/math/__math_invalidl.lo.go obj/src/math/__math_oflow.lo.go obj/src/math/__math_oflowf.lo.go obj/src/math/__math_uflow.lo.go obj/src/math/__math_uflowf.lo.go obj/src/math/__math_xflow.lo.go obj/src/math/__math_xflowf.lo.go obj/src/math/__polevll.lo.go obj/src/math/__rem_pio2.lo.go obj/src/math/__rem_pio2_large.lo.go obj/src/math/__rem_pio2f.lo.go obj/src/math/__rem_pio2l.lo.go obj/src/math/__signbit.lo.go obj/src/math/__signbitf.lo.go obj/src/math/__signbitl.lo.go obj/src/math/__sin.lo.go obj/src/math/__sindf.lo.go obj/src/math/__sinl.lo.go obj/src/math/__tan.lo.go obj/src/math/__tandf.lo.go obj/src/math/__tanl.lo.go obj/src/math/acos.lo.go obj/src/math/acosf.lo.go obj/src/math/acosh.lo.go obj/src/math/acoshf.lo.go obj/src/math/acoshl.lo.go obj/src/math/acosl.lo.go obj/src/math/asin.lo.go obj/src/math/asinf.lo.go obj/src/math/asinh.lo.go obj/src/math/asinhf.lo.go obj/src/math/asinhl.lo.go obj/src/math/asinl.lo.go obj/src/math/atan.lo.go obj/src/math/atan2.lo.go obj/src/math/atan2f.lo.go obj/src/math/atan2l.lo.go obj/src/math/atanf.lo.go obj/src/math/atanh.lo.go obj/src/math/atanhf.lo.go obj/src/math/atanhl.lo.go obj/src/math/atanl.lo.go obj/src/math/cbrt.lo.go obj/src/math/cbrtf.lo.go obj/src/math/cbrtl.lo.go obj/src/math/ceil.lo.go obj/src/math/ceilf.lo.go obj/src/math/ceill.lo.go obj/src/math/copysign.lo.go obj/src/math/copysignf.lo.go obj/src/math/copysignl.lo.go obj/src/math/cos.lo.go obj/src/math/cosf.lo.go obj/src/math/cosh.lo.go obj/src/math/coshf.lo.go obj/src/math/coshl.lo.go obj/src/math/cosl.lo.go obj/src/math/erf.lo.go obj/src/math/erff.lo.go obj/src/math/erfl.lo.go obj/src/math/exp.lo.go obj/src/math/exp10.lo.go obj/src/math/exp10f.lo.go obj/src/math/exp10l.lo.go obj/src/math/exp2.lo.go obj/src/math/exp2f.lo.go obj/src/math/exp2f_data.lo.go obj/src/math/exp2l.lo.go obj/src/math/exp_data.lo.go obj/src/math/expf.lo.go obj/src/math/expl.lo.go obj/src/math/expm1.lo.go obj/src/math/expm1f.lo.go obj/src/math/expm1l.lo.go obj/src/math/fabs.lo.go obj/src/math/fabsf.lo.go obj/src/math/fabsl.lo.go obj/src/math/fdim.lo.go obj/src/math/fdimf.lo.go obj/src/math/fdiml.lo.go obj/src/math/finite.lo.go obj/src/math/finitef.lo.go obj/src/math/floor.lo.go obj/src/math/floorf.lo.go obj/src/math/floorl.lo.go obj/src/math/fma.lo.go obj/src/math/fmal.lo.go obj/src/math/fmax.lo.go obj/src/math/fmaxf.lo.go obj/src/math/fmaxl.lo.go obj/src/math/fmin.lo.go obj/src/math/fminf.lo.go obj/src/math/fminl.lo.go obj/src/math/fmod.lo.go obj/src/math/fmodf.lo.go obj/src/math/fmodl.lo.go obj/src/math/frexp.lo.go obj/src/math/frexpf.lo.go obj/src/math/frexpl.lo.go obj/src/math/hypot.lo.go obj/src/math/hypotf.lo.go obj/src/math/hypotl.lo.go obj/src/math/ilogb.lo.go obj/src/math/ilogbf.lo.go obj/src/math/ilogbl.lo.go obj/src/math/j0.lo.go obj/src/math/j0f.lo.go obj/src/math/j1.lo.go obj/src/math/j1f.lo.go obj/src/math/jn.lo.go obj/src/math/jnf.lo.go obj/src/math/ldexp.lo.go obj/src/math/ldexpf.lo.go obj/src/math/ldexpl.lo.go obj/src/math/lgamma.lo.go obj/src/math/lgamma_r.lo.go obj/src/math/lgammaf.lo.go obj/src/math/lgammaf_r.lo.go obj/src/math/lgammal.lo.go obj/src/math/llrint.lo.go obj/src/math/llrintf.lo.go obj/src/math/llrintl.lo.go obj/src/math/llround.lo.go obj/src/math/llroundf.lo.go obj/src/math/llroundl.lo.go obj/src/math/log.lo.go obj/src/math/log10.lo.go obj/src/math/log10f.lo.go obj/src/math/log10l.lo.go obj/src/math/log1p.lo.go obj/src/math/log1pf.lo.go obj/src/math/log1pl.lo.go obj/src/math/log2.lo.go obj/src/math/log2_data.lo.go obj/src/math/log2f.lo.go obj/src/math/log2f_data.lo.go obj/src/math/log2l.lo.go obj/src/math/log_data.lo.go obj/src/math/logb.lo.go obj/src/math/logbf.lo.go obj/src/math/logbl.lo.go obj/src/math/logf.lo.go obj/src/math/logf_data.lo.go obj/src/math/logl.lo.go obj/src/math/lrint.lo.go obj/src/math/lrintf.lo.go obj/src/math/lrintl.lo.go obj/src/math/lround.lo.go obj/src/math/lroundf.lo.go obj/src/math/lroundl.lo.go obj/src/math/modf.lo.go obj/src/math/modff.lo.go obj/src/math/modfl.lo.go obj/src/math/nan.lo.go obj/src/math/nanf.lo.go obj/src/math/nanl.lo.go obj/src/math/nextafter.lo.go obj/src/math/nextafterf.lo.go obj/src/math/nextafterl.lo.go obj/src/math/nexttoward.lo.go obj/src/math/nexttowardf.lo.go obj/src/math/nexttowardl.lo.go obj/src/math/pow.lo.go obj/src/math/pow_data.lo.go obj/src/math/powf.lo.go obj/src/math/powf_data.lo.go obj/src/math/powl.lo.go obj/src/math/remainder.lo.go obj/src/math/remainderf.lo.go obj/src/math/remainderl.lo.go obj/src/math/remquo.lo.go obj/src/math/remquof.lo.go obj/src/math/remquol.lo.go obj/src/math/rint.lo.go obj/src/math/rintf.lo.go obj/src/math/rintl.lo.go obj/src/math/round.lo.go obj/src/math/roundf.lo.go obj/src/math/roundl.lo.go obj/src/math/scalb.lo.go obj/src/math/scalbf.lo.go obj/src/math/scalbln.lo.go obj/src/math/scalblnf.lo.go obj/src/math/scalblnl.lo.go obj/src/math/scalbn.lo.go obj/src/math/scalbnf.lo.go obj/src/math/scalbnl.lo.go obj/src/math/signgam.lo.go obj/src/math/significand.lo.go obj/src/math/significandf.lo.go obj/src/math/sin.lo.go obj/src/math/sincos.lo.go obj/src/math/sincosf.lo.go obj/src/math/sincosl.lo.go obj/src/math/sinf.lo.go obj/src/math/sinh.lo.go obj/src/math/sinhf.lo.go obj/src/math/sinhl.lo.go obj/src/math/sinl.lo.go obj/src/math/sqrt.lo.go obj/src/math/sqrt_data.lo.go obj/src/math/sqrtf.lo.go obj/src/math/sqrtl.lo.go obj/src/math/tan.lo.go obj/src/math/tanf.lo.go obj/src/math/tanh.lo.go obj/src/math/tanhf.lo.go obj/src/math/tanhl.lo.go obj/src/math/tanl.lo.go obj/src/math/tgamma.lo.go obj/src/math/tgammaf.lo.go obj/src/math/tgammal.lo.go obj/src/math/trunc.lo.go obj/src/math/truncf.lo.go obj/src/math/truncl.lo.go obj/src/misc/a64l.lo.go obj/src/misc/basename.lo.go obj/src/misc/dirname.lo.go obj/src/misc/ffs.lo.go obj/src/misc/ffsl.lo.go obj/src/misc/ffsll.lo.go obj/src/misc/fmtmsg.lo.go obj/src/misc/get_current_dir_name.lo.go obj/src/misc/getauxval.lo.go obj/src/misc/getdomainname.lo.go obj/src/misc/getentropy.lo.go obj/src/misc/gethostid.lo.go obj/src/misc/getopt.lo.go obj/src/misc/getopt_long.lo.go obj/src/misc/getpriority.lo.go obj/src/misc/getresgid.lo.go obj/src/misc/getresuid.lo.go obj/src/misc/getrlimit.lo.go obj/src/misc/getrusage.lo.go obj/src/misc/getsubopt.lo.go obj/src/misc/ioctl.lo.go obj/src/misc/issetugid.lo.go obj/src/misc/lockf.lo.go obj/src/misc/login_tty.lo.go obj/src/misc/mntent.lo.go obj/src/misc/nftw.lo.go obj/src/misc/openpty.lo.go obj/src/misc/ptsname.lo.go obj/src/misc/pty.lo.go obj/src/misc/realpath.lo.go obj/src/misc/setdomainname.lo.go obj/src/misc/setpriority.lo.go obj/src/misc/setrlimit.lo.go obj/src/misc/syscall.lo.go obj/src/misc/syslog.lo.go obj/src/misc/uname.lo.go obj/src/mman/madvise.lo.go obj/src/mman/mincore.lo.go obj/src/mman/mlock.lo.go obj/src/mman/mlockall.lo.go obj/src/mman/mmap.lo.go obj/src/mman/mprotect.lo.go obj/src/mman/mremap.lo.go obj/src/mman/msync.lo.go obj/src/mman/munlock.lo.go obj/src/mman/munlockall.lo.go obj/src/mman/munmap.lo.go obj/src/mman/posix_madvise.lo.go obj/src/mman/shm_open.lo.go obj/src/multibyte/btowc.lo.go obj/src/multibyte/c16rtomb.lo.go obj/src/multibyte/c32rtomb.lo.go obj/src/multibyte/internal.lo.go obj/src/multibyte/mblen.lo.go obj/src/multibyte/mbrlen.lo.go obj/src/multibyte/mbrtoc16.lo.go obj/src/multibyte/mbrtoc32.lo.go obj/src/multibyte/mbrtowc.lo.go obj/src/multibyte/mbsinit.lo.go obj/src/multibyte/mbsnrtowcs.lo.go obj/src/multibyte/mbsrtowcs.lo.go obj/src/multibyte/mbstowcs.lo.go obj/src/multibyte/mbtowc.lo.go obj/src/multibyte/wcrtomb.lo.go obj/src/multibyte/wcsnrtombs.lo.go obj/src/multibyte/wcsrtombs.lo.go obj/src/multibyte/wcstombs.lo.go obj/src/multibyte/wctob.lo.go obj/src/multibyte/wctomb.lo.go obj/src/network/accept.lo.go obj/src/network/accept4.lo.go obj/src/network/bind.lo.go obj/src/network/connect.lo.go obj/src/network/dn_comp.lo.go obj/src/network/dn_expand.lo.go obj/src/network/dn_skipname.lo.go obj/src/network/dns_parse.lo.go obj/src/network/ent.lo.go obj/src/network/ether.lo.go obj/src/network/freeaddrinfo.lo.go obj/src/network/gai_strerror.lo.go obj/src/network/getaddrinfo.lo.go obj/src/network/gethostbyaddr.lo.go obj/src/network/gethostbyaddr_r.lo.go obj/src/network/gethostbyname.lo.go obj/src/network/gethostbyname2.lo.go obj/src/network/gethostbyname2_r.lo.go obj/src/network/gethostbyname_r.lo.go obj/src/network/getifaddrs.lo.go obj/src/network/getnameinfo.lo.go obj/src/network/getpeername.lo.go obj/src/network/getservbyname.lo.go obj/src/network/getservbyname_r.lo.go obj/src/network/getsockname.lo.go obj/src/network/getsockopt.lo.go obj/src/network/h_errno.lo.go obj/src/network/herror.lo.go obj/src/network/hstrerror.lo.go obj/src/network/htonl.lo.go obj/src/network/htons.lo.go obj/src/network/if_freenameindex.lo.go obj/src/network/if_indextoname.lo.go obj/src/network/if_nameindex.lo.go obj/src/network/if_nametoindex.lo.go obj/src/network/in6addr_any.lo.go obj/src/network/in6addr_loopback.lo.go obj/src/network/inet_addr.lo.go obj/src/network/inet_aton.lo.go obj/src/network/inet_legacy.lo.go obj/src/network/inet_ntoa.lo.go obj/src/network/inet_ntop.lo.go obj/src/network/inet_pton.lo.go obj/src/network/listen.lo.go obj/src/network/lookup_ipliteral.lo.go obj/src/network/lookup_name.lo.go obj/src/network/lookup_serv.lo.go obj/src/network/netlink.lo.go obj/src/network/netname.lo.go obj/src/network/ns_parse.lo.go obj/src/network/ntohl.lo.go obj/src/network/ntohs.lo.go obj/src/network/proto.lo.go obj/src/network/recv.lo.go obj/src/network/recvfrom.lo.go obj/src/network/recvmmsg.lo.go obj/src/network/recvmsg.lo.go obj/src/network/res_init.lo.go obj/src/network/res_mkquery.lo.go obj/src/network/res_msend.lo.go obj/src/network/res_send.lo.go obj/src/network/res_state.lo.go obj/src/network/resolvconf.lo.go obj/src/network/send.lo.go obj/src/network/sendmmsg.lo.go obj/src/network/sendmsg.lo.go obj/src/network/sendto.lo.go obj/src/network/serv.lo.go obj/src/network/setsockopt.lo.go obj/src/network/shutdown.lo.go obj/src/network/sockatmark.lo.go obj/src/network/socket.lo.go obj/src/network/socketpair.lo.go obj/src/passwd/fgetgrent.lo.go obj/src/passwd/fgetpwent.lo.go obj/src/passwd/getgr_a.lo.go obj/src/passwd/getgr_r.lo.go obj/src/passwd/getgrent.lo.go obj/src/passwd/getgrent_a.lo.go obj/src/passwd/getgrouplist.lo.go obj/src/passwd/getpw_a.lo.go obj/src/passwd/getpw_r.lo.go obj/src/passwd/getpwent.lo.go obj/src/passwd/getpwent_a.lo.go obj/src/passwd/getspent.lo.go obj/src/passwd/lckpwdf.lo.go obj/src/passwd/nscd_query.lo.go obj/src/passwd/putgrent.lo.go obj/src/passwd/putpwent.lo.go obj/src/passwd/putspent.lo.go obj/src/prng/__rand48_step.lo.go obj/src/prng/__seed48.lo.go obj/src/prng/drand48.lo.go obj/src/prng/lcong48.lo.go obj/src/prng/lrand48.lo.go obj/src/prng/mrand48.lo.go obj/src/prng/rand.lo.go obj/src/prng/rand_r.lo.go obj/src/prng/random.lo.go obj/src/prng/seed48.lo.go obj/src/prng/srand48.lo.go obj/src/process/execl.lo.go obj/src/process/execle.lo.go obj/src/process/execlp.lo.go obj/src/process/execv.lo.go obj/src/process/execve.lo.go obj/src/process/execvp.lo.go obj/src/process/fexecve.lo.go obj/src/process/fork.lo.go obj/src/process/posix_spawn_file_actions_addchdir.lo.go obj/src/process/posix_spawn_file_actions_addclose.lo.go obj/src/process/posix_spawn_file_actions_adddup2.lo.go obj/src/process/posix_spawn_file_actions_addfchdir.lo.go obj/src/process/posix_spawn_file_actions_addopen.lo.go obj/src/process/posix_spawn_file_actions_destroy.lo.go obj/src/process/posix_spawn_file_actions_init.lo.go obj/src/process/posix_spawnattr_destroy.lo.go obj/src/process/posix_spawnattr_getflags.lo.go obj/src/process/posix_spawnattr_getpgroup.lo.go obj/src/process/posix_spawnattr_getsigdefault.lo.go obj/src/process/posix_spawnattr_getsigmask.lo.go obj/src/process/posix_spawnattr_init.lo.go obj/src/process/posix_spawnattr_sched.lo.go obj/src/process/posix_spawnattr_setflags.lo.go obj/src/process/posix_spawnattr_setpgroup.lo.go obj/src/process/posix_spawnattr_setsigdefault.lo.go obj/src/process/posix_spawnattr_setsigmask.lo.go obj/src/process/vfork.lo.go obj/src/process/wait.lo.go obj/src/process/waitid.lo.go obj/src/process/waitpid.lo.go obj/src/regex/fnmatch.lo.go obj/src/regex/glob.lo.go obj/src/regex/regcomp.lo.go obj/src/regex/regerror.lo.go obj/src/regex/regexec.lo.go obj/src/regex/tre-mem.lo.go obj/src/search/hsearch.lo.go obj/src/search/insque.lo.go obj/src/search/lsearch.lo.go obj/src/search/tdelete.lo.go obj/src/search/tdestroy.lo.go obj/src/search/tfind.lo.go obj/src/search/tsearch.lo.go obj/src/search/twalk.lo.go obj/src/select/poll.lo.go obj/src/select/ppoll.lo.go obj/src/select/pselect.lo.go obj/src/select/select.lo.go obj/src/signal/block.lo.go obj/src/signal/getitimer.lo.go obj/src/signal/kill.lo.go obj/src/signal/killpg.lo.go obj/src/signal/psiginfo.lo.go obj/src/signal/psignal.lo.go obj/src/signal/raise.lo.go obj/src/signal/restore.lo.go obj/src/signal/setitimer.lo.go obj/src/signal/sigaction.lo.go obj/src/signal/sigaddset.lo.go obj/src/signal/sigaltstack.lo.go obj/src/signal/sigandset.lo.go obj/src/signal/sigdelset.lo.go obj/src/signal/sigemptyset.lo.go obj/src/signal/sigfillset.lo.go obj/src/signal/sigisemptyset.lo.go obj/src/signal/sigismember.lo.go obj/src/signal/sigorset.lo.go obj/src/signal/sigpending.lo.go obj/src/signal/sigprocmask.lo.go obj/src/signal/sigqueue.lo.go obj/src/signal/sigrtmax.lo.go obj/src/signal/sigrtmin.lo.go obj/src/signal/sigsetjmp.lo.go obj/src/signal/sigsetjmp_tail.lo.go obj/src/signal/sigsuspend.lo.go obj/src/signal/sigtimedwait.lo.go obj/src/signal/sigwait.lo.go obj/src/signal/sigwaitinfo.lo.go obj/src/stat/__xstat.lo.go obj/src/stat/chmod.lo.go obj/src/stat/fchmod.lo.go obj/src/stat/fchmodat.lo.go obj/src/stat/fstat.lo.go obj/src/stat/fstatat.lo.go obj/src/stat/futimens.lo.go obj/src/stat/futimesat.lo.go obj/src/stat/lchmod.lo.go obj/src/stat/lstat.lo.go obj/src/stat/mkdir.lo.go obj/src/stat/mkdirat.lo.go obj/src/stat/mkfifo.lo.go obj/src/stat/mkfifoat.lo.go obj/src/stat/mknod.lo.go obj/src/stat/mknodat.lo.go obj/src/stat/stat.lo.go obj/src/stat/statvfs.lo.go obj/src/stat/umask.lo.go obj/src/stat/utimensat.lo.go obj/src/stdio/__fclose_ca.lo.go obj/src/stdio/__fdopen.lo.go obj/src/stdio/__fmodeflags.lo.go obj/src/stdio/__fopen_rb_ca.lo.go obj/src/stdio/__overflow.lo.go obj/src/stdio/__stdio_close.lo.go obj/src/stdio/__stdio_exit.lo.go obj/src/stdio/__stdio_read.lo.go obj/src/stdio/__stdio_seek.lo.go obj/src/stdio/__stdio_write.lo.go obj/src/stdio/__stdout_write.lo.go obj/src/stdio/__toread.lo.go obj/src/stdio/__towrite.lo.go obj/src/stdio/__uflow.lo.go obj/src/stdio/asprintf.lo.go obj/src/stdio/clearerr.lo.go obj/src/stdio/dprintf.lo.go obj/src/stdio/ext.lo.go obj/src/stdio/ext2.lo.go obj/src/stdio/fclose.lo.go obj/src/stdio/feof.lo.go obj/src/stdio/ferror.lo.go obj/src/stdio/fflush.lo.go obj/src/stdio/fgetc.lo.go obj/src/stdio/fgetln.lo.go obj/src/stdio/fgetpos.lo.go obj/src/stdio/fgets.lo.go obj/src/stdio/fgetwc.lo.go obj/src/stdio/fgetws.lo.go obj/src/stdio/fileno.lo.go obj/src/stdio/flockfile.lo.go obj/src/stdio/fmemopen.lo.go obj/src/stdio/fopen.lo.go obj/src/stdio/fopencookie.lo.go obj/src/stdio/fprintf.lo.go obj/src/stdio/fputc.lo.go obj/src/stdio/fputs.lo.go obj/src/stdio/fputwc.lo.go obj/src/stdio/fputws.lo.go obj/src/stdio/fread.lo.go obj/src/stdio/freopen.lo.go obj/src/stdio/fscanf.lo.go obj/src/stdio/fseek.lo.go obj/src/stdio/fsetpos.lo.go obj/src/stdio/ftell.lo.go obj/src/stdio/ftrylockfile.lo.go obj/src/stdio/funlockfile.lo.go obj/src/stdio/fwide.lo.go obj/src/stdio/fwprintf.lo.go obj/src/stdio/fwrite.lo.go obj/src/stdio/fwscanf.lo.go obj/src/stdio/getc.lo.go obj/src/stdio/getc_unlocked.lo.go obj/src/stdio/getchar.lo.go obj/src/stdio/getchar_unlocked.lo.go obj/src/stdio/getdelim.lo.go obj/src/stdio/getline.lo.go obj/src/stdio/gets.lo.go obj/src/stdio/getw.lo.go obj/src/stdio/getwc.lo.go obj/src/stdio/getwchar.lo.go obj/src/stdio/ofl.lo.go obj/src/stdio/ofl_add.lo.go obj/src/stdio/open_memstream.lo.go obj/src/stdio/open_wmemstream.lo.go obj/src/stdio/pclose.lo.go obj/src/stdio/perror.lo.go obj/src/stdio/printf.lo.go obj/src/stdio/putc.lo.go obj/src/stdio/putc_unlocked.lo.go obj/src/stdio/putchar.lo.go obj/src/stdio/putchar_unlocked.lo.go obj/src/stdio/puts.lo.go obj/src/stdio/putw.lo.go obj/src/stdio/putwc.lo.go obj/src/stdio/putwchar.lo.go obj/src/stdio/remove.lo.go obj/src/stdio/rename.lo.go obj/src/stdio/rewind.lo.go obj/src/stdio/scanf.lo.go obj/src/stdio/setbuf.lo.go obj/src/stdio/setbuffer.lo.go obj/src/stdio/setlinebuf.lo.go obj/src/stdio/setvbuf.lo.go obj/src/stdio/snprintf.lo.go obj/src/stdio/sprintf.lo.go obj/src/stdio/sscanf.lo.go obj/src/stdio/stderr.lo.go obj/src/stdio/stdin.lo.go obj/src/stdio/stdout.lo.go obj/src/stdio/swprintf.lo.go obj/src/stdio/swscanf.lo.go obj/src/stdio/tempnam.lo.go obj/src/stdio/tmpfile.lo.go obj/src/stdio/tmpnam.lo.go obj/src/stdio/ungetc.lo.go obj/src/stdio/ungetwc.lo.go obj/src/stdio/vasprintf.lo.go obj/src/stdio/vdprintf.lo.go obj/src/stdio/vfprintf.lo.go obj/src/stdio/vfscanf.lo.go obj/src/stdio/vfwprintf.lo.go obj/src/stdio/vfwscanf.lo.go obj/src/stdio/vprintf.lo.go obj/src/stdio/vscanf.lo.go obj/src/stdio/vsnprintf.lo.go obj/src/stdio/vsprintf.lo.go obj/src/stdio/vsscanf.lo.go obj/src/stdio/vswprintf.lo.go obj/src/stdio/vswscanf.lo.go obj/src/stdio/vwprintf.lo.go obj/src/stdio/vwscanf.lo.go obj/src/stdio/wprintf.lo.go obj/src/stdio/wscanf.lo.go obj/src/stdlib/abs.lo.go obj/src/stdlib/atof.lo.go obj/src/stdlib/atoi.lo.go obj/src/stdlib/atol.lo.go obj/src/stdlib/atoll.lo.go obj/src/stdlib/bsearch.lo.go obj/src/stdlib/div.lo.go obj/src/stdlib/ecvt.lo.go obj/src/stdlib/fcvt.lo.go obj/src/stdlib/gcvt.lo.go obj/src/stdlib/imaxabs.lo.go obj/src/stdlib/imaxdiv.lo.go obj/src/stdlib/labs.lo.go obj/src/stdlib/ldiv.lo.go obj/src/stdlib/llabs.lo.go obj/src/stdlib/lldiv.lo.go obj/src/stdlib/qsort.lo.go obj/src/stdlib/qsort_nr.lo.go obj/src/stdlib/strtod.lo.go obj/src/stdlib/strtol.lo.go obj/src/stdlib/wcstod.lo.go obj/src/stdlib/wcstol.lo.go obj/src/string/bcmp.lo.go obj/src/string/bcopy.lo.go obj/src/string/bzero.lo.go obj/src/string/explicit_bzero.lo.go obj/src/string/index.lo.go obj/src/string/memccpy.lo.go obj/src/string/memchr.lo.go obj/src/string/memcmp.lo.go obj/src/string/memmem.lo.go obj/src/string/memmove.lo.go obj/src/string/mempcpy.lo.go obj/src/string/memrchr.lo.go obj/src/string/memset.lo.go obj/src/string/rindex.lo.go obj/src/string/stpcpy.lo.go obj/src/string/stpncpy.lo.go obj/src/string/strcasecmp.lo.go obj/src/string/strcasestr.lo.go obj/src/string/strcat.lo.go obj/src/string/strchr.lo.go obj/src/string/strchrnul.lo.go obj/src/string/strcmp.lo.go obj/src/string/strcpy.lo.go obj/src/string/strcspn.lo.go obj/src/string/strdup.lo.go obj/src/string/strerror_r.lo.go obj/src/string/strlcat.lo.go obj/src/string/strlcpy.lo.go obj/src/string/strlen.lo.go obj/src/string/strncasecmp.lo.go obj/src/string/strncat.lo.go obj/src/string/strncmp.lo.go obj/src/string/strncpy.lo.go obj/src/string/strndup.lo.go obj/src/string/strnlen.lo.go obj/src/string/strpbrk.lo.go obj/src/string/strrchr.lo.go obj/src/string/strsep.lo.go obj/src/string/strsignal.lo.go obj/src/string/strspn.lo.go obj/src/string/strstr.lo.go obj/src/string/strtok.lo.go obj/src/string/strtok_r.lo.go obj/src/string/strverscmp.lo.go obj/src/string/swab.lo.go obj/src/string/wcpcpy.lo.go obj/src/string/wcpncpy.lo.go obj/src/string/wcscasecmp.lo.go obj/src/string/wcscasecmp_l.lo.go obj/src/string/wcscat.lo.go obj/src/string/wcschr.lo.go obj/src/string/wcscmp.lo.go obj/src/string/wcscpy.lo.go obj/src/string/wcscspn.lo.go obj/src/string/wcsdup.lo.go obj/src/string/wcslen.lo.go obj/src/string/wcsncasecmp.lo.go obj/src/string/wcsncasecmp_l.lo.go obj/src/string/wcsncat.lo.go obj/src/string/wcsncmp.lo.go obj/src/string/wcsncpy.lo.go obj/src/string/wcsnlen.lo.go obj/src/string/wcspbrk.lo.go obj/src/string/wcsrchr.lo.go obj/src/string/wcsspn.lo.go obj/src/string/wcsstr.lo.go obj/src/string/wcstok.lo.go obj/src/string/wcswcs.lo.go obj/src/string/wmemchr.lo.go obj/src/string/wmemcmp.lo.go obj/src/string/wmemcpy.lo.go obj/src/string/wmemmove.lo.go obj/src/string/wmemset.lo.go obj/src/temp/mkdtemp.lo.go obj/src/temp/mkostemp.lo.go obj/src/temp/mkostemps.lo.go obj/src/temp/mkstemp.lo.go obj/src/temp/mkstemps.lo.go obj/src/temp/mktemp.lo.go obj/src/termios/cfgetospeed.lo.go obj/src/termios/cfmakeraw.lo.go obj/src/termios/cfsetospeed.lo.go obj/src/termios/tcdrain.lo.go obj/src/termios/tcflow.lo.go obj/src/termios/tcflush.lo.go obj/src/termios/tcgetattr.lo.go obj/src/termios/tcgetsid.lo.go obj/src/termios/tcgetwinsize.lo.go obj/src/termios/tcsendbreak.lo.go obj/src/termios/tcsetattr.lo.go obj/src/termios/tcsetwinsize.lo.go obj/src/time/__map_file.lo.go obj/src/time/__month_to_secs.lo.go obj/src/time/__secs_to_tm.lo.go obj/src/time/__tm_to_secs.lo.go obj/src/time/__tz.lo.go obj/src/time/__year_to_secs.lo.go obj/src/time/asctime.lo.go obj/src/time/asctime_r.lo.go obj/src/time/clock.lo.go obj/src/time/clock_getcpuclockid.lo.go obj/src/time/clock_getres.lo.go obj/src/time/clock_gettime.lo.go obj/src/time/clock_nanosleep.lo.go obj/src/time/clock_settime.lo.go obj/src/time/ctime.lo.go obj/src/time/ctime_r.lo.go obj/src/time/difftime.lo.go obj/src/time/ftime.lo.go obj/src/time/getdate.lo.go obj/src/time/gettimeofday.lo.go obj/src/time/gmtime.lo.go obj/src/time/gmtime_r.lo.go obj/src/time/localtime.lo.go obj/src/time/localtime_r.lo.go obj/src/time/mktime.lo.go obj/src/time/nanosleep.lo.go obj/src/time/strftime.lo.go obj/src/time/strptime.lo.go obj/src/time/time.lo.go obj/src/time/timegm.lo.go obj/src/time/timer_delete.lo.go obj/src/time/timer_getoverrun.lo.go obj/src/time/timer_gettime.lo.go obj/src/time/timer_settime.lo.go obj/src/time/times.lo.go obj/src/time/timespec_get.lo.go obj/src/time/utime.lo.go obj/src/time/wcsftime.lo.go obj/src/unistd/_exit.lo.go obj/src/unistd/access.lo.go obj/src/unistd/acct.lo.go obj/src/unistd/alarm.lo.go obj/src/unistd/chdir.lo.go obj/src/unistd/chown.lo.go obj/src/unistd/close.lo.go obj/src/unistd/ctermid.lo.go obj/src/unistd/dup.lo.go obj/src/unistd/dup2.lo.go obj/src/unistd/dup3.lo.go obj/src/unistd/faccessat.lo.go obj/src/unistd/fchdir.lo.go obj/src/unistd/fchown.lo.go obj/src/unistd/fchownat.lo.go obj/src/unistd/fdatasync.lo.go obj/src/unistd/fsync.lo.go obj/src/unistd/ftruncate.lo.go obj/src/unistd/getcwd.lo.go obj/src/unistd/getegid.lo.go obj/src/unistd/geteuid.lo.go obj/src/unistd/getgid.lo.go obj/src/unistd/getgroups.lo.go obj/src/unistd/gethostname.lo.go obj/src/unistd/getlogin.lo.go obj/src/unistd/getlogin_r.lo.go obj/src/unistd/getpgid.lo.go obj/src/unistd/getpgrp.lo.go obj/src/unistd/getpid.lo.go obj/src/unistd/getppid.lo.go obj/src/unistd/getsid.lo.go obj/src/unistd/getuid.lo.go obj/src/unistd/isatty.lo.go obj/src/unistd/lchown.lo.go obj/src/unistd/link.lo.go obj/src/unistd/linkat.lo.go obj/src/unistd/lseek.lo.go obj/src/unistd/nice.lo.go obj/src/unistd/pause.lo.go obj/src/unistd/pipe.lo.go obj/src/unistd/pipe2.lo.go obj/src/unistd/posix_close.lo.go obj/src/unistd/pread.lo.go obj/src/unistd/preadv.lo.go obj/src/unistd/pwrite.lo.go obj/src/unistd/pwritev.lo.go obj/src/unistd/read.lo.go obj/src/unistd/readlink.lo.go obj/src/unistd/readlinkat.lo.go obj/src/unistd/readv.lo.go obj/src/unistd/renameat.lo.go obj/src/unistd/rmdir.lo.go obj/src/unistd/setgid.lo.go obj/src/unistd/setpgid.lo.go obj/src/unistd/setpgrp.lo.go obj/src/unistd/setsid.lo.go obj/src/unistd/setuid.lo.go obj/src/unistd/setxid.lo.go obj/src/unistd/sleep.lo.go obj/src/unistd/symlink.lo.go obj/src/unistd/symlinkat.lo.go obj/src/unistd/sync.lo.go obj/src/unistd/tcgetpgrp.lo.go obj/src/unistd/tcsetpgrp.lo.go obj/src/unistd/truncate.lo.go obj/src/unistd/ttyname.lo.go obj/src/unistd/ttyname_r.lo.go obj/src/unistd/ualarm.lo.go obj/src/unistd/unlink.lo.go obj/src/unistd/unlinkat.lo.go obj/src/unistd/usleep.lo.go obj/src/unistd/write.lo.go obj/src/unistd/writev.lo.go obj/compat/time32/__xstat.lo.go obj/compat/time32/adjtime32.lo.go obj/compat/time32/adjtimex_time32.lo.go obj/compat/time32/clock_adjtime32.lo.go obj/compat/time32/clock_getres_time32.lo.go obj/compat/time32/clock_gettime32.lo.go obj/compat/time32/clock_nanosleep_time32.lo.go obj/compat/time32/clock_settime32.lo.go obj/compat/time32/ctime32.lo.go obj/compat/time32/ctime32_r.lo.go obj/compat/time32/difftime32.lo.go obj/compat/time32/fstat_time32.lo.go obj/compat/time32/fstatat_time32.lo.go obj/compat/time32/ftime32.lo.go obj/compat/time32/futimens_time32.lo.go obj/compat/time32/futimes_time32.lo.go obj/compat/time32/futimesat_time32.lo.go obj/compat/time32/getitimer_time32.lo.go obj/compat/time32/getrusage_time32.lo.go obj/compat/time32/gettimeofday_time32.lo.go obj/compat/time32/gmtime32.lo.go obj/compat/time32/gmtime32_r.lo.go obj/compat/time32/localtime32.lo.go obj/compat/time32/localtime32_r.lo.go obj/compat/time32/lstat_time32.lo.go obj/compat/time32/lutimes_time32.lo.go obj/compat/time32/mktime32.lo.go obj/compat/time32/nanosleep_time32.lo.go obj/compat/time32/ppoll_time32.lo.go obj/compat/time32/pselect_time32.lo.go obj/compat/time32/recvmmsg_time32.lo.go obj/compat/time32/select_time32.lo.go obj/compat/time32/semtimedop_time32.lo.go obj/compat/time32/setitimer_time32.lo.go obj/compat/time32/settimeofday_time32.lo.go obj/compat/time32/sigtimedwait_time32.lo.go obj/compat/time32/stat_time32.lo.go obj/compat/time32/stime32.lo.go obj/compat/time32/time32.lo.go obj/compat/time32/time32gm.lo.go obj/compat/time32/timer_gettime32.lo.go obj/compat/time32/timer_settime32.lo.go obj/compat/time32/timerfd_gettime32.lo.go obj/compat/time32/timerfd_settime32.lo.go obj/compat/time32/timespec_get_time32.lo.go obj/compat/time32/utime_time32.lo.go obj/compat/time32/utimensat_time32.lo.go obj/compat/time32/utimes_time32.lo.go obj/compat/time32/wait3_time32.lo.go obj/compat/time32/wait4_time32.lo.go -lgcc -lgcc_eh', DO NOT EDIT. + +//go:build linux && arm + +package libc + +import ( + "reflect" + "unsafe" +) + +var ( + _ reflect.Type + _ unsafe.Pointer +) + +const BIG_ENDIAN = 4321 +const BYTE_ORDER = 1234 +const DBL_DECIMAL_DIG = 17 +const DBL_DIG = 15 +const DBL_EPSILON = 0 +const DBL_HAS_SUBNORM = 1 +const DBL_MANT_DIG = 53 +const DBL_MAX = 0 +const DBL_MAX_10_EXP = 308 +const DBL_MAX_EXP = 1024 +const DBL_MIN = 0 +const DBL_MIN_10_EXP = -307 +const DBL_MIN_EXP = -1021 +const DBL_TRUE_MIN = 0 +const DECIMAL_DIG = 17 +const FLT_DECIMAL_DIG = 9 +const FLT_DIG = 6 +const FLT_EPSILON = 0 +const FLT_EVAL_METHOD = 0 +const FLT_HAS_SUBNORM = 1 +const FLT_MANT_DIG = 24 +const FLT_MAX = 0 +const FLT_MAX_10_EXP = 38 +const FLT_MAX_EXP = 128 +const FLT_MIN = 0 +const FLT_MIN_10_EXP = -37 +const FLT_MIN_EXP = -125 +const FLT_RADIX = 2 +const FLT_ROUNDS = 0 +const FLT_TRUE_MIN = 0 +const FP_ILOGB0 = -2147483648 +const FP_ILOGBNAN = -2147483648 +const FP_INFINITE = 1 +const FP_NAN = 0 +const FP_NORMAL = 4 +const FP_SUBNORMAL = 3 +const FP_ZERO = 2 +const HUGE_VALF = 0 +const I = 0 +const INFINITY = 0 +const INT16_MAX = 32767 +const INT16_MIN = -32768 +const INT32_MAX = 2147483647 +const INT32_MIN = -2147483648 +const INT64_MAX = 9223372036854775807 +const INT64_MIN = -9223372036854775808 +const INT8_MAX = 127 +const INT8_MIN = -128 +const INTMAX_MAX = 9223372036854775807 +const INTMAX_MIN = -9223372036854775808 +const INTPTR_MAX = 2147483647 +const INTPTR_MIN = -2147483648 +const INT_FAST16_MAX = 2147483647 +const INT_FAST16_MIN = -2147483648 +const INT_FAST32_MAX = 2147483647 +const INT_FAST32_MIN = -2147483648 +const INT_FAST64_MAX = 9223372036854775807 +const INT_FAST64_MIN = -9223372036854775808 +const INT_FAST8_MAX = 127 +const INT_FAST8_MIN = -128 +const INT_LEAST16_MAX = 32767 +const INT_LEAST16_MIN = -32768 +const INT_LEAST32_MAX = 2147483647 +const INT_LEAST32_MIN = -2147483648 +const INT_LEAST64_MAX = 9223372036854775807 +const INT_LEAST64_MIN = -9223372036854775808 +const INT_LEAST8_MAX = 127 +const INT_LEAST8_MIN = -128 +const LDBL_DECIMAL_DIG = 17 +const LDBL_DIG = 15 +const LDBL_EPSILON = 0 +const LDBL_HAS_SUBNORM = 1 +const LDBL_MANT_DIG = 53 +const LDBL_MAX = 0 +const LDBL_MAX_10_EXP = 308 +const LDBL_MAX_EXP = 1024 +const LDBL_MIN = 0 +const LDBL_MIN_10_EXP = -307 +const LDBL_MIN_EXP = -1021 +const LDBL_TRUE_MIN = 0 +const LITTLE_ENDIAN = 1234 +const MATH_ERREXCEPT = 2 +const MATH_ERRNO = 1 +const M_1_PI = 0 +const M_2_PI = 0 +const M_2_SQRTPI = 0 +const M_E = 0 +const M_LN10 = 0 +const M_LN2 = 0 +const M_LOG10E = 0 +const M_LOG2E = 0 +const M_PI = 0 +const M_PI_2 = 0 +const M_PI_4 = 0 +const M_SQRT1_2 = 0 +const M_SQRT2 = 0 +const NAN = 0 +const NDEBUG = 1 +const PDP_ENDIAN = 3412 +const PTRDIFF_MAX = 2147483647 +const PTRDIFF_MIN = -2147483648 +const SIG_ATOMIC_MAX = 2147483647 +const SIG_ATOMIC_MIN = -2147483648 +const SIZE_MAX = 4294967295 +const TOINT_INTRINSICS = 0 +const UINT16_MAX = 65535 +const UINT32_MAX = 4294967295 +const UINT64_MAX = 18446744073709551615 +const UINT8_MAX = 255 +const UINTMAX_MAX = 18446744073709551615 +const UINTPTR_MAX = 4294967295 +const UINT_FAST16_MAX = 4294967295 +const UINT_FAST32_MAX = 4294967295 +const UINT_FAST64_MAX = 18446744073709551615 +const UINT_FAST8_MAX = 255 +const UINT_LEAST16_MAX = 65535 +const UINT_LEAST32_MAX = 4294967295 +const UINT_LEAST64_MAX = 18446744073709551615 +const UINT_LEAST8_MAX = 255 +const WANT_ROUNDING = 1 +const WANT_SNAN = 0 +const WCHAR_MAX = 2147483647 +const WCHAR_MIN = -2147483648 +const WINT_MAX = 4294967295 +const WINT_MIN = 0 +const _Complex_I = 0 +const _FILE_OFFSET_BITS = 64 +const _REDIR_TIME64 = 1 +const _XOPEN_SOURCE = 700 +const __ACCUM_EPSILON__ = 0 +const __ACCUM_FBIT__ = 15 +const __ACCUM_IBIT__ = 16 +const __ACCUM_MAX__ = 0 +const __ACCUM_MIN__ = 0 +const __APCS_32__ = 1 +const __ARMEL__ = 1 +const __ARM_32BIT_STATE = 1 +const __ARM_ARCH = 6 +const __ARM_ARCH_6__ = 1 +const __ARM_ARCH_ISA_ARM = 1 +const __ARM_ARCH_ISA_THUMB = 1 +const __ARM_EABI__ = 1 +const __ARM_FEATURE_CLZ = 1 +const __ARM_FEATURE_COPROC = 15 +const __ARM_FEATURE_DSP = 1 +const __ARM_FEATURE_LDREX = 4 +const __ARM_FEATURE_QBIT = 1 +const __ARM_FEATURE_SAT = 1 +const __ARM_FEATURE_SIMD32 = 1 +const __ARM_FEATURE_UNALIGNED = 1 +const __ARM_FP = 12 +const __ARM_PCS_VFP = 1 +const __ARM_SIZEOF_MINIMAL_ENUM = 4 +const __ARM_SIZEOF_WCHAR_T = 4 +const __ATOMIC_ACQUIRE = 2 +const __ATOMIC_ACQ_REL = 4 +const __ATOMIC_CONSUME = 1 +const __ATOMIC_RELAXED = 0 +const __ATOMIC_RELEASE = 3 +const __ATOMIC_SEQ_CST = 5 +const __BIGGEST_ALIGNMENT__ = 8 +const __BIG_ENDIAN = 4321 +const __BYTE_ORDER = 1234 +const __BYTE_ORDER__ = 1234 +const __CCGO__ = 1 +const __CHAR_BIT__ = 8 +const __CHAR_UNSIGNED__ = 1 +const __DA_FBIT__ = 31 +const __DA_IBIT__ = 32 +const __DBL_DECIMAL_DIG__ = 17 +const __DBL_DIG__ = 15 +const __DBL_HAS_DENORM__ = 1 +const __DBL_HAS_INFINITY__ = 1 +const __DBL_HAS_QUIET_NAN__ = 1 +const __DBL_IS_IEC_60559__ = 2 +const __DBL_MANT_DIG__ = 53 +const __DBL_MAX_10_EXP__ = 308 +const __DBL_MAX_EXP__ = 1024 +const __DBL_MIN_10_EXP__ = -307 +const __DBL_MIN_EXP__ = -1021 +const __DECIMAL_DIG__ = 17 +const __DEC_EVAL_METHOD__ = 2 +const __DQ_FBIT__ = 63 +const __DQ_IBIT__ = 0 +const __ELF__ = 1 +const __FINITE_MATH_ONLY__ = 0 +const __FLOAT_WORD_ORDER__ = 1234 +const __FLT32X_DECIMAL_DIG__ = 17 +const __FLT32X_DENORM_MIN__ = 0 +const __FLT32X_DIG__ = 15 +const __FLT32X_EPSILON__ = 0 +const __FLT32X_HAS_DENORM__ = 1 +const __FLT32X_HAS_INFINITY__ = 1 +const __FLT32X_HAS_QUIET_NAN__ = 1 +const __FLT32X_IS_IEC_60559__ = 2 +const __FLT32X_MANT_DIG__ = 53 +const __FLT32X_MAX_10_EXP__ = 308 +const __FLT32X_MAX_EXP__ = 1024 +const __FLT32X_MAX__ = 0 +const __FLT32X_MIN_10_EXP__ = -307 +const __FLT32X_MIN_EXP__ = -1021 +const __FLT32X_MIN__ = 0 +const __FLT32X_NORM_MAX__ = 0 +const __FLT32_DECIMAL_DIG__ = 9 +const __FLT32_DENORM_MIN__ = 0 +const __FLT32_DIG__ = 6 +const __FLT32_EPSILON__ = 0 +const __FLT32_HAS_DENORM__ = 1 +const __FLT32_HAS_INFINITY__ = 1 +const __FLT32_HAS_QUIET_NAN__ = 1 +const __FLT32_IS_IEC_60559__ = 2 +const __FLT32_MANT_DIG__ = 24 +const __FLT32_MAX_10_EXP__ = 38 +const __FLT32_MAX_EXP__ = 128 +const __FLT32_MAX__ = 0 +const __FLT32_MIN_10_EXP__ = -37 +const __FLT32_MIN_EXP__ = -125 +const __FLT32_MIN__ = 0 +const __FLT32_NORM_MAX__ = 0 +const __FLT64_DECIMAL_DIG__ = 17 +const __FLT64_DENORM_MIN__ = 0 +const __FLT64_DIG__ = 15 +const __FLT64_EPSILON__ = 0 +const __FLT64_HAS_DENORM__ = 1 +const __FLT64_HAS_INFINITY__ = 1 +const __FLT64_HAS_QUIET_NAN__ = 1 +const __FLT64_IS_IEC_60559__ = 2 +const __FLT64_MANT_DIG__ = 53 +const __FLT64_MAX_10_EXP__ = 308 +const __FLT64_MAX_EXP__ = 1024 +const __FLT64_MAX__ = 0 +const __FLT64_MIN_10_EXP__ = -307 +const __FLT64_MIN_EXP__ = -1021 +const __FLT64_MIN__ = 0 +const __FLT64_NORM_MAX__ = 0 +const __FLT_DECIMAL_DIG__ = 9 +const __FLT_DENORM_MIN__ = 0 +const __FLT_DIG__ = 6 +const __FLT_EPSILON__ = 0 +const __FLT_EVAL_METHOD_TS_18661_3__ = 0 +const __FLT_EVAL_METHOD__ = 0 +const __FLT_HAS_DENORM__ = 1 +const __FLT_HAS_INFINITY__ = 1 +const __FLT_HAS_QUIET_NAN__ = 1 +const __FLT_IS_IEC_60559__ = 2 +const __FLT_MANT_DIG__ = 24 +const __FLT_MAX_10_EXP__ = 38 +const __FLT_MAX_EXP__ = 128 +const __FLT_MAX__ = 0 +const __FLT_MIN_10_EXP__ = -37 +const __FLT_MIN_EXP__ = -125 +const __FLT_MIN__ = 0 +const __FLT_NORM_MAX__ = 0 +const __FLT_RADIX__ = 2 +const __FRACT_EPSILON__ = 0 +const __FRACT_FBIT__ = 15 +const __FRACT_IBIT__ = 0 +const __FRACT_MAX__ = 0 +const __FRACT_MIN__ = 0 +const __FUNCTION__ = 0 +const __GCC_ASM_FLAG_OUTPUTS__ = 1 +const __GCC_ATOMIC_BOOL_LOCK_FREE = 1 +const __GCC_ATOMIC_CHAR16_T_LOCK_FREE = 1 +const __GCC_ATOMIC_CHAR32_T_LOCK_FREE = 2 +const __GCC_ATOMIC_CHAR_LOCK_FREE = 1 +const __GCC_ATOMIC_INT_LOCK_FREE = 2 +const __GCC_ATOMIC_LLONG_LOCK_FREE = 1 +const __GCC_ATOMIC_LONG_LOCK_FREE = 2 +const __GCC_ATOMIC_POINTER_LOCK_FREE = 2 +const __GCC_ATOMIC_SHORT_LOCK_FREE = 1 +const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = 1 +const __GCC_ATOMIC_WCHAR_T_LOCK_FREE = 2 +const __GCC_CONSTRUCTIVE_SIZE = 64 +const __GCC_DESTRUCTIVE_SIZE = 64 +const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 = 1 +const __GCC_IEC_559 = 2 +const __GCC_IEC_559_COMPLEX = 2 +const __GNUC_EXECUTION_CHARSET_NAME = "UTF-8" +const __GNUC_MINOR__ = 2 +const __GNUC_PATCHLEVEL__ = 0 +const __GNUC_STDC_INLINE__ = 1 +const __GNUC_WIDE_EXECUTION_CHARSET_NAME = "UTF-32LE" +const __GNUC__ = 12 +const __GXX_ABI_VERSION = 1017 +const __GXX_TYPEINFO_EQUALITY_INLINE = 0 +const __HAVE_SPECULATION_SAFE_VALUE = 1 +const __HA_FBIT__ = 7 +const __HA_IBIT__ = 8 +const __HQ_FBIT__ = 15 +const __HQ_IBIT__ = 0 +const __INT16_MAX__ = 32767 +const __INT32_MAX__ = 2147483647 +const __INT32_TYPE__ = 0 +const __INT64_MAX__ = 9223372036854775807 +const __INT8_MAX__ = 127 +const __INTMAX_MAX__ = 9223372036854775807 +const __INTMAX_WIDTH__ = 64 +const __INTPTR_MAX__ = 2147483647 +const __INTPTR_TYPE__ = 0 +const __INTPTR_WIDTH__ = 32 +const __INT_FAST16_MAX__ = 2147483647 +const __INT_FAST16_TYPE__ = 0 +const __INT_FAST16_WIDTH__ = 32 +const __INT_FAST32_MAX__ = 2147483647 +const __INT_FAST32_TYPE__ = 0 +const __INT_FAST32_WIDTH__ = 32 +const __INT_FAST64_MAX__ = 9223372036854775807 +const __INT_FAST64_WIDTH__ = 64 +const __INT_FAST8_MAX__ = 127 +const __INT_FAST8_WIDTH__ = 8 +const __INT_LEAST16_MAX__ = 32767 +const __INT_LEAST16_WIDTH__ = 16 +const __INT_LEAST32_MAX__ = 2147483647 +const __INT_LEAST32_TYPE__ = 0 +const __INT_LEAST32_WIDTH__ = 32 +const __INT_LEAST64_MAX__ = 9223372036854775807 +const __INT_LEAST64_WIDTH__ = 64 +const __INT_LEAST8_MAX__ = 127 +const __INT_LEAST8_WIDTH__ = 8 +const __INT_MAX__ = 2147483647 +const __INT_WIDTH__ = 32 +const __LACCUM_EPSILON__ = 0 +const __LACCUM_FBIT__ = 31 +const __LACCUM_IBIT__ = 32 +const __LACCUM_MAX__ = 0 +const __LACCUM_MIN__ = 0 +const __LDBL_DECIMAL_DIG__ = 17 +const __LDBL_DENORM_MIN__ = 0 +const __LDBL_DIG__ = 15 +const __LDBL_EPSILON__ = 0 +const __LDBL_HAS_DENORM__ = 1 +const __LDBL_HAS_INFINITY__ = 1 +const __LDBL_HAS_QUIET_NAN__ = 1 +const __LDBL_IS_IEC_60559__ = 2 +const __LDBL_MANT_DIG__ = 53 +const __LDBL_MAX_10_EXP__ = 308 +const __LDBL_MAX_EXP__ = 1024 +const __LDBL_MAX__ = 0 +const __LDBL_MIN_10_EXP__ = -307 +const __LDBL_MIN_EXP__ = -1021 +const __LDBL_MIN__ = 0 +const __LDBL_NORM_MAX__ = 0 +const __LFRACT_EPSILON__ = 0 +const __LFRACT_FBIT__ = 31 +const __LFRACT_IBIT__ = 0 +const __LFRACT_MAX__ = 0 +const __LFRACT_MIN__ = 0 +const __LITTLE_ENDIAN = 1234 +const __LLACCUM_EPSILON__ = 0 +const __LLACCUM_FBIT__ = 31 +const __LLACCUM_IBIT__ = 32 +const __LLACCUM_MAX__ = 0 +const __LLACCUM_MIN__ = 0 +const __LLFRACT_EPSILON__ = 0 +const __LLFRACT_FBIT__ = 63 +const __LLFRACT_IBIT__ = 0 +const __LLFRACT_MAX__ = 0 +const __LLFRACT_MIN__ = 0 +const __LONG_LONG_MAX__ = 9223372036854775807 +const __LONG_LONG_WIDTH__ = 64 +const __LONG_MAX = 2147483647 +const __LONG_MAX__ = 2147483647 +const __LONG_WIDTH__ = 32 +const __NO_INLINE__ = 1 +const __ORDER_BIG_ENDIAN__ = 4321 +const __ORDER_LITTLE_ENDIAN__ = 1234 +const __ORDER_PDP_ENDIAN__ = 3412 +const __PDP_ENDIAN = 3412 +const __PRAGMA_REDEFINE_EXTNAME = 1 +const __PRETTY_FUNCTION__ = 0 +const __PTRDIFF_MAX__ = 2147483647 +const __PTRDIFF_TYPE__ = 0 +const __PTRDIFF_WIDTH__ = 32 +const __QQ_FBIT__ = 7 +const __QQ_IBIT__ = 0 +const __SACCUM_EPSILON__ = 0 +const __SACCUM_FBIT__ = 7 +const __SACCUM_IBIT__ = 8 +const __SACCUM_MAX__ = 0 +const __SACCUM_MIN__ = 0 +const __SA_FBIT__ = 15 +const __SA_IBIT__ = 16 +const __SCHAR_MAX__ = 127 +const __SCHAR_WIDTH__ = 8 +const __SFRACT_EPSILON__ = 0 +const __SFRACT_FBIT__ = 7 +const __SFRACT_IBIT__ = 0 +const __SFRACT_MAX__ = 0 +const __SFRACT_MIN__ = 0 +const __SHRT_MAX__ = 32767 +const __SHRT_WIDTH__ = 16 +const __SIG_ATOMIC_MAX__ = 2147483647 +const __SIG_ATOMIC_MIN__ = -2147483648 +const __SIG_ATOMIC_TYPE__ = 0 +const __SIG_ATOMIC_WIDTH__ = 32 +const __SIZEOF_DOUBLE__ = 8 +const __SIZEOF_FLOAT__ = 4 +const __SIZEOF_INT__ = 4 +const __SIZEOF_LONG_DOUBLE__ = 8 +const __SIZEOF_LONG_LONG__ = 8 +const __SIZEOF_LONG__ = 4 +const __SIZEOF_POINTER__ = 4 +const __SIZEOF_PTRDIFF_T__ = 4 +const __SIZEOF_SHORT__ = 2 +const __SIZEOF_SIZE_T__ = 4 +const __SIZEOF_WCHAR_T__ = 4 +const __SIZEOF_WINT_T__ = 4 +const __SIZE_MAX__ = 4294967295 +const __SIZE_WIDTH__ = 32 +const __SQ_FBIT__ = 31 +const __SQ_IBIT__ = 0 +const __STDC_HOSTED__ = 0 +const __STDC_VERSION__ = 199901 +const __STDC__ = 1 +const __STRICT_ANSI__ = 1 +const __TA_FBIT__ = 63 +const __TA_IBIT__ = 64 +const __THUMB_INTERWORK__ = 1 +const __TQ_FBIT__ = 127 +const __TQ_IBIT__ = 0 +const __UACCUM_EPSILON__ = 0 +const __UACCUM_FBIT__ = 16 +const __UACCUM_IBIT__ = 16 +const __UACCUM_MAX__ = 0 +const __UACCUM_MIN__ = 0 +const __UDA_FBIT__ = 32 +const __UDA_IBIT__ = 32 +const __UDQ_FBIT__ = 64 +const __UDQ_IBIT__ = 0 +const __UFRACT_EPSILON__ = 0 +const __UFRACT_FBIT__ = 16 +const __UFRACT_IBIT__ = 0 +const __UFRACT_MAX__ = 0 +const __UFRACT_MIN__ = 0 +const __UHA_FBIT__ = 8 +const __UHA_IBIT__ = 8 +const __UHQ_FBIT__ = 16 +const __UHQ_IBIT__ = 0 +const __UINT16_MAX__ = 65535 +const __UINT32_MAX__ = 4294967295 +const __UINT64_MAX__ = 18446744073709551615 +const __UINT8_MAX__ = 255 +const __UINTMAX_MAX__ = 18446744073709551615 +const __UINTPTR_MAX__ = 4294967295 +const __UINT_FAST16_MAX__ = 4294967295 +const __UINT_FAST32_MAX__ = 4294967295 +const __UINT_FAST64_MAX__ = 18446744073709551615 +const __UINT_FAST8_MAX__ = 255 +const __UINT_LEAST16_MAX__ = 65535 +const __UINT_LEAST32_MAX__ = 4294967295 +const __UINT_LEAST64_MAX__ = 18446744073709551615 +const __UINT_LEAST8_MAX__ = 255 +const __ULACCUM_EPSILON__ = 0 +const __ULACCUM_FBIT__ = 32 +const __ULACCUM_IBIT__ = 32 +const __ULACCUM_MAX__ = 0 +const __ULACCUM_MIN__ = 0 +const __ULFRACT_EPSILON__ = 0 +const __ULFRACT_FBIT__ = 32 +const __ULFRACT_IBIT__ = 0 +const __ULFRACT_MAX__ = 0 +const __ULFRACT_MIN__ = 0 +const __ULLACCUM_EPSILON__ = 0 +const __ULLACCUM_FBIT__ = 32 +const __ULLACCUM_IBIT__ = 32 +const __ULLACCUM_MAX__ = 0 +const __ULLACCUM_MIN__ = 0 +const __ULLFRACT_EPSILON__ = 0 +const __ULLFRACT_FBIT__ = 64 +const __ULLFRACT_IBIT__ = 0 +const __ULLFRACT_MAX__ = 0 +const __ULLFRACT_MIN__ = 0 +const __UQQ_FBIT__ = 8 +const __UQQ_IBIT__ = 0 +const __USACCUM_EPSILON__ = 0 +const __USACCUM_FBIT__ = 8 +const __USACCUM_IBIT__ = 8 +const __USACCUM_MAX__ = 0 +const __USACCUM_MIN__ = 0 +const __USA_FBIT__ = 16 +const __USA_IBIT__ = 16 +const __USE_TIME_BITS64 = 1 +const __USFRACT_EPSILON__ = 0 +const __USFRACT_FBIT__ = 8 +const __USFRACT_IBIT__ = 0 +const __USFRACT_MAX__ = 0 +const __USFRACT_MIN__ = 0 +const __USQ_FBIT__ = 32 +const __USQ_IBIT__ = 0 +const __UTA_FBIT__ = 64 +const __UTA_IBIT__ = 64 +const __UTQ_FBIT__ = 128 +const __UTQ_IBIT__ = 0 +const __VERSION__ = "12.2.0" +const __VFP_FP__ = 1 +const __WCHAR_MAX__ = 4294967295 +const __WCHAR_MIN__ = 0 +const __WCHAR_WIDTH__ = 32 +const __WINT_MAX__ = 4294967295 +const __WINT_MIN__ = 0 +const __WINT_WIDTH__ = 32 +const __arm__ = 1 +const __gnu_linux__ = 1 +const __inline = 0 +const __linux = 1 +const __linux__ = 1 +const __restrict = 0 +const __restrict_arr = 0 +const __unix = 1 +const __unix__ = 1 +const complex1 = 0 +const math_errhandling = 2 + +type t__builtin_va_list = uintptr + +type t__predefined_size_t = uint32 + +type t__predefined_wchar_t = uint32 + +type t__predefined_ptrdiff_t = int32 + +type Tuintptr_t = uint32 + +type Tintptr_t = int32 + +type Tint8_t = int8 + +type Tint16_t = int16 + +type Tint32_t = int32 + +type Tint64_t = int64 + +type Tintmax_t = int64 + +type Tuint8_t = uint8 + +type Tuint16_t = uint16 + +type Tuint32_t = uint32 + +type Tuint64_t = uint64 + +type Tuintmax_t = uint64 + +type Tint_fast8_t = int8 + +type Tint_fast64_t = int64 + +type Tint_least8_t = int8 + +type Tint_least16_t = int16 + +type Tint_least32_t = int32 + +type Tint_least64_t = int64 + +type Tuint_fast8_t = uint8 + +type Tuint_fast64_t = uint64 + +type Tuint_least8_t = uint8 + +type Tuint_least16_t = uint16 + +type Tuint_least32_t = uint32 + +type Tuint_least64_t = uint64 + +type Tint_fast16_t = int32 + +type Tint_fast32_t = int32 + +type Tuint_fast16_t = uint32 + +type Tuint_fast32_t = uint32 + +type Tfloat_t = float32 + +type Tdouble_t = float64 + +var _k = uint32(1799) /* constant for reduction */ +var _kln2 = float64(1246.9717778273416) /* k * ln2 */ + +// C documentation +// +// /* +// * Compute exp(x), scaled to avoid spurious overflow. An exponent is +// * returned separately in 'expt'. +// * +// * Input: ln(DBL_MAX) <= x < ln(2 * DBL_MAX / DBL_MIN_DENORM) ~= 1454.91 +// * Output: 2**1023 <= y < 2**1024 +// */ +func ___frexp_exp(tls *TLS, x float64, expt uintptr) (r float64) { + var exp_x float64 + var hx Tuint32_t + var v1 Tuint64_t + _, _, _ = exp_x, hx, v1 + /* + * We use exp(x) = exp(x - kln2) * 2**k, carefully chosen to + * minimize |exp(kln2) - 2**k|. We also scale the exponent of + * exp_x to MAX_EXP so that the result can be multiplied by + * a tiny number without losing accuracy due to denormalization. + */ + exp_x = Xexp(tls, x-_kln2) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&exp_x)) >> int32(32)) + *(*int32)(unsafe.Pointer(expt)) = int32(hx>>Int32FromInt32(20) - uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1023)) + _k) + v1 = uint64(hx&Uint32FromInt32(0xfffff)|uint32((Int32FromInt32(0x3ff)+Int32FromInt32(1023))<= ln(DBL_MAX)) +// * where care is needed to avoid overflow. +// * +// * The present implementation is narrowly tailored for our hyperbolic and +// * exponential functions. We assume expt is small (0 or -1), and the caller +// * has filtered out very large x, for which overflow would be inevitable. +// */ +func X__ldexp_cexp(tls *TLS, z complex128, expt int32) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v expt=%v, (%v:)", tls, z, expt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float64 + var half_expt int32 + var v1, v2 Tuint64_t + var v3 [2]float64 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_exp(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + /* + * Arrange so that scale1 * scale2 == 2**expt. We use this to + * compensate for scalbn being horrendously slow. + */ + half_expt = expt / int32(2) + v1 = uint64((Int32FromInt32(0x3ff)+half_expt)<>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(127)) + _k1) + v1 = hx&uint32(0x7fffff) | uint32((Int32FromInt32(0x7f)+Int32FromInt32(127))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float32 + var half_expt int32 + var v1, v2 Tuint32_t + var v3 [2]float32 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_expf(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + half_expt = expt / int32(2) + v1 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale1 = *(*float32)(unsafe.Pointer(&v1)) + half_expt = expt - half_expt + v2 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale2 = *(*float32)(unsafe.Pointer(&v2)) + v3 = [2]float32{ + 0: Xcosf(tls, y) * exp_x * scale1 * scale2, + 1: Xsinf(tls, y) * exp_x * scale1 * scale2, + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +func Xcabs(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypot(tls, Float64FromComplex128(z), +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypotf(tls, Float32FromComplex64(z), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcabs(tls, Complex128FromComplex128(z)) +} + +const M_PI_21 = 1.5707963267948966 + +// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 + +/* acos(z) = pi/2 - asin(z) */ + +func Xcacos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + z = Xcasin(tls, z) + v1 = [2]float64{ + 0: float64(1.5707963267948966) - Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +var _float_pi_2 = float32(1.5707963267948966) + +func Xcacosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + z = Xcasinf(tls, z) + v1 = [2]float32{ + 0: _float_pi_2 - Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +const M_PI_22 = 0 + +/* acosh(z) = i acos(z) */ + +func Xcacosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint64 + var v3, v4 [2]float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float64)(unsafe.Pointer(bp)) = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(63)) + z = Xcacos(tls, z) + if zineg != 0 { + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint32 + var v3, v4 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(31)) + z = Xcacosf(tls, z) + if zineg != 0 { + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacosh(tls, Complex128FromComplex128(z))) +} + +func Xcacosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacos(tls, Complex128FromComplex128(z))) +} + +func Xcarg(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2(tls, +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], Float64FromComplex128(z)) +} + +func Xcargf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2f(tls, +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], Float32FromComplex64(z)) +} + +func Xcargl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcarg(tls, Complex128FromComplex128(z)) +} + +// FIXME + +/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ + +func Xcasin(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex128 + var x, y float64 + var v1, v2, v3 [2]float64 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float64{ + 0: float64(1) - (x-y)*(x+y), + 1: -Float64FromFloat64(2) * x * y, + } + w = *(*complex128)(unsafe.Pointer(&v1)) + v2 = [2]float64{ + 0: -y, + 1: x, + } + r = Xclog(tls, *(*complex128)(unsafe.Pointer(&v2))+Xcsqrt(tls, w)) + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float64FromComplex128(r), + } + return *(*complex128)(unsafe.Pointer(&v3)) +} + +// FIXME + +func Xcasinf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex64 + var x, y float32 + var v1, v2, v3 [2]float32 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float32{ + 0: float32(Float64FromFloat64(1) - float64((x-y)*(x+y))), + 1: float32(-Float64FromFloat64(2) * float64(x) * float64(y)), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + v2 = [2]float32{ + 0: -y, + 1: x, + } + r = Xclogf(tls, *(*complex64)(unsafe.Pointer(&v2))+Xcsqrtf(tls, w)) + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float32FromComplex64(r), + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +/* asinh(z) = -i asin(i z) */ + +func Xcasinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcasin(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcasinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcasinf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcasinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasinh(tls, Complex128FromComplex128(z))) +} + +func Xcasinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasin(tls, Complex128FromComplex128(z))) +} + +const MAXNUM = 0 +const M_PI1 = 3.141592653589793 + +var _DP1 = float64(3.141592651605606) +var _DP2 = float64(1.9841871479187034e-09) +var _DP3 = float64(1.1442377452219664e-17) + +func __redupi(tls *TLS, x float64) (r float64) { + var i int32 + var t float64 + _, _ = i, t + t = x / float64(3.141592653589793) + if t >= float64(0) { + t += float64(0.5) + } else { + t -= float64(0.5) + } + i = int32(t) /* the multiple */ + t = float64(i) + t = x - t*_DP1 - t*_DP2 - t*_DP3 + return t +} + +func Xcatan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float64 + var w complex128 + var v1 [2]float64 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = float64(1) - x2 - y*y + t = float64(0.5) * Xatan2(tls, float64(2)*x, a) + w = Complex128FromFloat64(__redupi(tls, t)) + t = y - float64(1) + a = x2 + t*t + t = y + float64(1) + a = (x2 + t*t) / a + v1 = [2]float64{ + 0: Float64FromComplex128(w), + 1: float64(0.25) * Xlog(tls, a), + } + w = *(*complex128)(unsafe.Pointer(&v1)) + return w +} + +const MAXNUMF = 0 + +var _DP11 = float64(3.140625) +var _DP21 = float64(0.0009675025939941406) +var _DP31 = float64(1.5099579909783765e-07) + +var _float_pi = float32(3.141592653589793) + +func __redupif(tls *TLS, xx float32) (r float32) { + var i int32 + var t, x float32 + _, _, _ = i, t, x + x = xx + t = x / _float_pi + if t >= Float32FromFloat32(0) { + t += Float32FromFloat32(0.5) + } else { + t -= Float32FromFloat32(0.5) + } + i = int32(t) /* the multiple */ + t = float32(i) + t = float32(float64(x) - float64(t)*_DP11 - float64(t)*_DP21 - float64(t)*_DP31) + return t +} + +func Xcatanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float32 + var w complex64 + var v1 [2]float32 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = Float32FromFloat32(1) - x2 - y*y + t = Float32FromFloat32(0.5) * Xatan2f(tls, Float32FromFloat32(2)*x, a) + w = Complex64FromFloat32(__redupif(tls, t)) + t = y - Float32FromFloat32(1) + a = x2 + t*t + t = y + Float32FromFloat32(1) + a = (x2 + t*t) / a + v1 = [2]float32{ + 0: Float32FromComplex64(w), + 1: Float32FromFloat32(0.25) * Xlogf(tls, a), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + return w +} + +const M_PI2 = 0 + +/* atanh = -i atan(i z) */ + +func Xcatanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcatan(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcatanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcatanf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcatanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatanh(tls, Complex128FromComplex128(z))) +} + +func Xcatanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatan(tls, Complex128FromComplex128(z))) +} + +/* cos(z) = cosh(i z) */ + +func Xccos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return Xccosh(tls, *(*complex128)(unsafe.Pointer(&v1))) +} + +func Xccosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return Xccoshf(tls, *(*complex64)(unsafe.Pointer(&v1))) +} + +var _huge = float64(8.98846567431158e+307) + +func Xccosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xcosh(tls, x), + 1: x * y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xcosh(tls, x) * Xcos(tls, y), + 1: Xsinh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: h * Xcos(tls, y), + 1: Xcopysign(tls, h, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] * Xcopysign(tls, Float64FromInt32(1), x), + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge * x + v6 = [2]float64{ + 0: h * h * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: y - y, + 1: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. + * + * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. + * The sign of 0 in the result is unspecified. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), x) * y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), (x+x)*y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * cosh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * cosh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * cosh(+-Inf + I NaN) = +Inf + I d(NaN). + * + * cosh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * x * Xcos(tls, y), + 1: x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * cosh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * cosh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge1 = float32(1.7014118346046923e+38) + +func Xccoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xcoshf(tls, x), + 1: x * y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xcoshf(tls, x) * Xcosf(tls, y), + 1: Xsinhf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: Xcopysignf(tls, h, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] * Xcopysignf(tls, Float32FromInt32(1), x), + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge1 * x + v6 = [2]float32{ + 0: h * h * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: y - y, + 1: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), x) * y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), (x+x)*y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * x * Xcosf(tls, y), + 1: x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xccoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccosh(tls, Complex128FromComplex128(z))) +} + +func Xccosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccos(tls, Complex128FromComplex128(z))) +} + +var _exp_ovfl = uint32(0x40862e42) /* high bits of MAX_EXP * ln2 ~= 710 */ +var _cexp_ovfl = uint32(0x4096b8e4) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexp(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var exp_x, x, y float64 + var hx, hy, lx, ly Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, exp_x, hx, hy, lx, ly, x, y, v1, v2, v3, v4, v5, v6 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = uint32(__u >> int32(32)) + ly = uint32(__u) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy|ly == uint32(0) { + v1 = [2]float64{ + 0: Xexp(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff)|lx == uint32(0) { + v2 = [2]float64{ + 0: Xcos(tls, y), + 1: Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7ff00000) { + if lx != uint32(0) || hx&uint32(0x7fffffff) != uint32(0x7ff00000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float64{ + 0: y - y, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float64{} + return *(*complex128)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float64{ + 0: x, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl && hx <= _cexp_ovfl { + /* + * x is between 709.7 and 1454.3, so we must scale to avoid + * overflow in exp(x). + */ + return X__ldexp_cexp(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexp(tls, x) + v6 = [2]float64{ + 0: exp_x * Xcos(tls, y), + 1: exp_x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + return r +} + +var _exp_ovfl1 = uint32(0x42b17218) /* MAX_EXP * ln2 ~= 88.722839355 */ +var _cexp_ovfl1 = uint32(0x43400074) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexpf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var exp_x, x, y float32 + var hx, hy Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float32 + _, _, _, _, _, _, _, _, _, _, _ = exp_x, hx, hy, x, y, v1, v2, v3, v4, v5, v6 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hy = *(*Tuint32_t)(unsafe.Pointer(&y)) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy == uint32(0) { + v1 = [2]float32{ + 0: Xexpf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff) == uint32(0) { + v2 = [2]float32{ + 0: Xcosf(tls, y), + 1: Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7f800000) { + if hx&uint32(0x7fffffff) != uint32(0x7f800000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float32{ + 0: y - y, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float32{} + return *(*complex64)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float32{ + 0: x, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl1 && hx <= _cexp_ovfl1 { + /* + * x is between 88.7 and 192, so we must scale to avoid + * overflow in expf(x). + */ + return X__ldexp_cexpf(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexpf(tls, x) + v6 = [2]float32{ + 0: exp_x * Xcosf(tls, y), + 1: exp_x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcexpl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcexp(tls, Complex128FromComplex128(z))) +} + +func Xcimag(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +// FIXME + +/* log(z) = log(|z|) + i arg(z) */ + +func Xclog(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float64 + var v1 [2]float64 + _, _, _ = phi, r, v1 + r = Xcabs(tls, z) + phi = Xcarg(tls, z) + v1 = [2]float64{ + 0: Xlog(tls, r), + 1: phi, + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +func Xclogf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float32 + var v1 [2]float32 + _, _, _ = phi, r, v1 + r = Xcabsf(tls, z) + phi = Xcargf(tls, z) + v1 = [2]float32{ + 0: Xlogf(tls, r), + 1: phi, + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xclogl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xclog(tls, Complex128FromComplex128(z))) +} + +func Xconj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +func Xconjf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xconjl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ + +func Xcpow(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexp(tls, c*Xclog(tls, z)) +} + +func Xcpowf(tls *TLS, z complex64, c complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexpf(tls, c*Xclogf(tls, z)) +} + +func Xcpowl(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcpow(tls, Complex128FromComplex128(z), Complex128FromComplex128(c))) +} + +func Xcproj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 bool + var v6 [2]float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = Float64FromComplex128(z) + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 bool + var v6 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = Float32FromComplex64(z) + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) == uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v6 = [2]float32{ + 0: X__builtin_inff(tls), + 1: Xcopysignf(tls, float32(0), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return z +} + +func Xcprojl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcproj(tls, Complex128FromComplex128(z))) +} + +func Xcreal(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +func Xcrealf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float32FromComplex64(z) +} + +func Xcreall(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +/* sin(z) = -i sinh(i z) */ + +func Xcsin(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcsinh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcsinf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcsinhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +var _huge2 = float64(8.98846567431158e+307) + +func Xcsinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xsinh(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xsinh(tls, x) * Xcos(tls, y), + 1: Xcosh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: Xcopysign(tls, h, x) * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z) * Xcopysign(tls, Float64FromInt32(1), x), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge2 * x + v6 = [2]float64{ + 0: h * Xcos(tls, y), + 1: h * h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * sinh(+-Inf +- I 0) = +-Inf + I +-0. + * + * sinh(NaN +- I 0) = d(NaN) + I +-0. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x, + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x, + 1: Xcopysign(tls, Float64FromInt32(0), y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * sinh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * sinh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). + * The sign of Inf in the result is unspecified. Choice = normally + * the same as d(NaN). + * + * sinh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * Xcos(tls, y), + 1: float64(X__builtin_inff(tls)) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * sinh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * sinh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge3 = float32(1.7014118346046923e+38) + +func Xcsinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xsinhf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xsinhf(tls, x) * Xcosf(tls, y), + 1: Xcoshf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: Xcopysignf(tls, h, x) * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z) * Xcopysignf(tls, Float32FromInt32(1), x), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge3 * x + v6 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: h * h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x, + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * Xcosf(tls, y), + 1: X__builtin_inff(tls) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xcsinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsinh(tls, Complex128FromComplex128(z))) +} + +func Xcsinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsin(tls, Complex128FromComplex128(z))) +} + +const THRESH = 7.446288774449766e+307 + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ + +func Xcsqrt(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b, t float64 + var result complex128 + var scale int32 + var v1, v12, v13, v14, v15, v4, v7 [2]float64 + var v10, v2, v5, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, result, scale, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float64FromComplex128(z) + b = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex128FromInt32(0) { + v1 = [2]float64{ + 1: b, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + *(*float64)(unsafe.Pointer(bp)) = b + v2 = *(*uint64)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + v12 = [2]float64{ + 0: Xfabs(tls, b-b), + 1: Xcopysign(tls, a, b), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float64{ + 0: a, + 1: Xcopysign(tls, b-b, b), + } + return *(*complex128)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* Scale to avoid overflow. */ + if Xfabs(tls, a) >= float64(7.446288774449766e+307) || Xfabs(tls, b) >= float64(7.446288774449766e+307) { + a *= float64(0.25) + b *= float64(0.25) + scale = int32(1) + } else { + scale = 0 + } + /* Algorithm 312, CACM vol 10, Oct 1967. */ + if a >= Float64FromInt32(0) { + t = Xsqrt(tls, (a+Xhypot(tls, a, b))*float64(0.5)) + v14 = [2]float64{ + 0: t, + 1: b / (Float64FromInt32(2) * t), + } + result = *(*complex128)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (-a+Xhypot(tls, a, b))*float64(0.5)) + v15 = [2]float64{ + 0: Xfabs(tls, b) / (Float64FromInt32(2) * t), + 1: Xcopysign(tls, t, b), + } + result = *(*complex128)(unsafe.Pointer(&v15)) + } + /* Rescale. */ + if scale != 0 { + result *= Complex128FromInt32(2) + } + return result +} + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +func Xcsqrtf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b float32 + var t float64 + var v1, v12, v13, v14, v15, v4, v7 [2]float32 + var v10, v2, v5, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float32FromComplex64(z) + b = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex64FromInt32(0) { + v1 = [2]float32{ + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + *(*float32)(unsafe.Pointer(bp)) = b + v2 = *(*uint32)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v4 = [2]float32{ + 0: X__builtin_inff(tls), + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = a + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + if BoolInt32(v5&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + t = float64((b - b) / (b - b)) /* raise invalid if b is not a NaN */ + v7 = [2]float32{ + 0: a, + 1: float32(t), + } + return *(*complex64)(unsafe.Pointer(&v7)) /* return NaN + NaN i */ + } + *(*float32)(unsafe.Pointer(bp)) = a + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if BoolInt32(v8&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + /* + * csqrtf(inf + NaN i) = inf + NaN i + * csqrtf(inf + y i) = inf + 0 i + * csqrtf(-inf + NaN i) = NaN +- inf i + * csqrtf(-inf + y i) = 0 + inf i + */ + *(*float32)(unsafe.Pointer(bp)) = a + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v12 = [2]float32{ + 0: Xfabsf(tls, b-b), + 1: Xcopysignf(tls, a, b), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float32{ + 0: a, + 1: Xcopysignf(tls, b-b, b), + } + return *(*complex64)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* + * We compute t in double precision to avoid overflow and to + * provide correct rounding in nearly all cases. + * This is Algorithm 312, CACM vol 10, Oct 1967. + */ + if a >= Float32FromInt32(0) { + t = Xsqrt(tls, (float64(a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v14 = [2]float32{ + 0: float32(t), + 1: float32(float64(b) / (Float64FromFloat64(2) * t)), + } + return *(*complex64)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (float64(-a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v15 = [2]float32{ + 0: float32(float64(Xfabsf(tls, b)) / (Float64FromFloat64(2) * t)), + 1: Xcopysignf(tls, float32(t), b), + } + return *(*complex64)(unsafe.Pointer(&v15)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcsqrtl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsqrt(tls, Complex128FromComplex128(z))) +} + +/* tan(z) = -i tanh(i z) */ + +func Xctan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xctanh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xctanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xctanhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xctanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, v3 Tuint64_t + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float64 + var hx, ix, lx Tuint32_t + var v1, v10, v12, v13, v4 [2]float64 + var v6, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, beta, denom, exp_mx, hx, ix, lx, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + ix = hx & uint32(0x7fffffff) + /* + * ctanh(NaN + i 0) = NaN + i 0 + * + * ctanh(NaN + i y) = NaN + i NaN for y != 0 + * + * The imaginary part has the sign of x*sin(2*y), but there's no + * special effort to get this right. + * + * ctanh(+-Inf +- i Inf) = +-1 +- 0 + * + * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite + * + * The imaginary part of the sign is unspecified. This special + * case is only needed to avoid a spurious invalid exception when + * y is infinite. + */ + if ix >= uint32(0x7ff00000) { + if ix&uint32(0xfffff)|lx != 0 { /* x is NaN */ + if y == Float64FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float64{ + 0: x, + 1: v2, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + v3 = uint64(hx-Uint32FromInt32(0x40000000))<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)<= uint32(0x40360000) { /* x >= 22 */ + exp_mx = Xexp(tls, -Xfabs(tls, x)) + v12 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(1), x), + 1: Float64FromInt32(4) * Xsin(tls, y) * Xcos(tls, y) * exp_mx * exp_mx, + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* Kahan's algorithm */ + t = Xtan(tls, y) + beta = float64(1) + t*t /* = 1 / cos^2(y) */ + s = Xsinh(tls, x) + rho = Xsqrt(tls, Float64FromInt32(1)+s*s) /* = cosh(x) */ + denom = Float64FromInt32(1) + beta*s*s + v13 = [2]float64{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +func Xctanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float32 + var hx, ix, v3 Tuint32_t + var v1, v10, v12, v13, v4 [2]float32 + var v6, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = beta, denom, exp_mx, hx, ix, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + if ix&uint32(0x7fffff) != 0 { + if y == Float32FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float32{ + 0: x, + 1: v2, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + v3 = hx - uint32(0x40000000) + x = *(*float32)(unsafe.Pointer(&v3)) + *(*float32)(unsafe.Pointer(bp)) = y + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 + _7: + if BoolInt32(v6&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v5 = y + } else { + v5 = Xsinf(tls, y) * Xcosf(tls, y) + } + v4 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), v5), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = y + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if !(BoolInt32(v8&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if ix != 0 { + v11 = y - y + } else { + v11 = x + } + v10 = [2]float32{ + 0: v11, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= uint32(0x41300000) { /* x >= 11 */ + exp_mx = Xexpf(tls, -Xfabsf(tls, x)) + v12 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(1), x), + 1: Float32FromInt32(4) * Xsinf(tls, y) * Xcosf(tls, y) * exp_mx * exp_mx, + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + t = Xtanf(tls, y) + beta = float32(float64(1) + float64(t*t)) + s = Xsinhf(tls, x) + rho = Xsqrtf(tls, Float32FromInt32(1)+s*s) + denom = Float32FromInt32(1) + beta*s*s + v13 = [2]float32{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xctanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctanh(tls, Complex128FromComplex128(z))) +} + +func Xctanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctan(tls, Complex128FromComplex128(z))) +} + +const BUFSIZ = 1024 +const E2BIG = 7 +const EACCES = 13 +const EADDRINUSE = 98 +const EADDRNOTAVAIL = 99 +const EADV = 68 +const EAFNOSUPPORT = 97 +const EAGAIN = 11 +const EALREADY = 114 +const EBADE = 52 +const EBADF = 9 +const EBADFD = 77 +const EBADMSG = 74 +const EBADR = 53 +const EBADRQC = 56 +const EBADSLT = 57 +const EBFONT = 59 +const EBUSY = 16 +const ECANCELED = 125 +const ECHILD = 10 +const ECHRNG = 44 +const ECOMM = 70 +const ECONNABORTED = 103 +const ECONNREFUSED = 111 +const ECONNRESET = 104 +const EDEADLK = 35 +const EDEADLOCK = 35 +const EDESTADDRREQ = 89 +const EDOM = 33 +const EDOTDOT = 73 +const EDQUOT = 122 +const EEXIST = 17 +const EFAULT = 14 +const EFBIG = 27 +const EHOSTDOWN = 112 +const EHOSTUNREACH = 113 +const EHWPOISON = 133 +const EIDRM = 43 +const EILSEQ = 84 +const EINPROGRESS = 115 +const EINTR = 4 +const EINVAL = 22 +const EIO = 5 +const EISCONN = 106 +const EISDIR = 21 +const EISNAM = 120 +const EKEYEXPIRED = 127 +const EKEYREJECTED = 129 +const EKEYREVOKED = 128 +const EL2HLT = 51 +const EL2NSYNC = 45 +const EL3HLT = 46 +const EL3RST = 47 +const ELIBACC = 79 +const ELIBBAD = 80 +const ELIBEXEC = 83 +const ELIBMAX = 82 +const ELIBSCN = 81 +const ELNRNG = 48 +const ELOOP = 40 +const EMEDIUMTYPE = 124 +const EMFILE = 24 +const EMLINK = 31 +const EMSGSIZE = 90 +const EMULTIHOP = 72 +const ENAMETOOLONG = 36 +const ENAVAIL = 119 +const ENETDOWN = 100 +const ENETRESET = 102 +const ENETUNREACH = 101 +const ENFILE = 23 +const ENOANO = 55 +const ENOBUFS = 105 +const ENOCSI = 50 +const ENODATA = 61 +const ENODEV = 19 +const ENOENT = 2 +const ENOEXEC = 8 +const ENOKEY = 126 +const ENOLCK = 37 +const ENOLINK = 67 +const ENOMEDIUM = 123 +const ENOMEM = 12 +const ENOMSG = 42 +const ENONET = 64 +const ENOPKG = 65 +const ENOPROTOOPT = 92 +const ENOSPC = 28 +const ENOSR = 63 +const ENOSTR = 60 +const ENOSYS = 38 +const ENOTBLK = 15 +const ENOTCONN = 107 +const ENOTDIR = 20 +const ENOTEMPTY = 39 +const ENOTNAM = 118 +const ENOTRECOVERABLE = 131 +const ENOTSOCK = 88 +const ENOTSUP = 95 +const ENOTTY = 25 +const ENOTUNIQ = 76 +const ENXIO = 6 +const EOPNOTSUPP = 95 +const EOVERFLOW = 75 +const EOWNERDEAD = 130 +const EPERM = 1 +const EPFNOSUPPORT = 96 +const EPIPE = 32 +const EPROTO = 71 +const EPROTONOSUPPORT = 93 +const EPROTOTYPE = 91 +const ERANGE = 34 +const EREMCHG = 78 +const EREMOTE = 66 +const EREMOTEIO = 121 +const ERESTART = 85 +const ERFKILL = 132 +const EROFS = 30 +const ESHUTDOWN = 108 +const ESOCKTNOSUPPORT = 94 +const ESPIPE = 29 +const ESRCH = 3 +const ESRMNT = 69 +const ESTALE = 116 +const ESTRPIPE = 86 +const ETIME = 62 +const ETIMEDOUT = 110 +const ETOOMANYREFS = 109 +const ETXTBSY = 26 +const EUCLEAN = 117 +const EUNATCH = 49 +const EUSERS = 87 +const EWOULDBLOCK = 11 +const EXDEV = 18 +const EXFULL = 54 +const FILENAME_MAX = 4096 +const FOPEN_MAX = 1000 +const F_LOCK = 1 +const F_OK = 0 +const F_TEST = 3 +const F_TLOCK = 2 +const F_ULOCK = 0 +const L_ctermid = 20 +const L_tmpnam = 20 +const POSIX_CLOSE_RESTART = 0 +const P_tmpdir = "/tmp" +const R_OK = 4 +const SEEK_DATA = 3 +const SEEK_HOLE = 4 +const STDERR_FILENO = 2 +const STDIN_FILENO = 0 +const STDOUT_FILENO = 1 +const TMP_MAX = 10000 +const W_OK = 2 +const X_OK = 1 +const _CS_GNU_LIBC_VERSION = 2 +const _CS_GNU_LIBPTHREAD_VERSION = 3 +const _CS_PATH = 0 +const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = 4 +const _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 +const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 +const _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 +const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 +const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 +const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 +const _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 +const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 +const _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 +const _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 +const _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 +const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 +const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 +const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 +const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 +const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 +const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 1 +const _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 +const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 +const _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 +const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 +const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 +const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 +const _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 +const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 +const _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 +const _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 +const _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 +const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 +const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 +const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 +const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 +const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 +const _CS_POSIX_V7_THREADS_CFLAGS = 1150 +const _CS_POSIX_V7_THREADS_LDFLAGS = 1151 +const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 5 +const _CS_V6_ENV = 1148 +const _CS_V7_ENV = 1149 +const _IOFBF = 0 +const _IOLBF = 1 +const _IONBF = 2 +const _PC_2_SYMLINKS = 20 +const _PC_ALLOC_SIZE_MIN = 18 +const _PC_ASYNC_IO = 10 +const _PC_CHOWN_RESTRICTED = 6 +const _PC_FILESIZEBITS = 13 +const _PC_LINK_MAX = 0 +const _PC_MAX_CANON = 1 +const _PC_MAX_INPUT = 2 +const _PC_NAME_MAX = 3 +const _PC_NO_TRUNC = 7 +const _PC_PATH_MAX = 4 +const _PC_PIPE_BUF = 5 +const _PC_PRIO_IO = 11 +const _PC_REC_INCR_XFER_SIZE = 14 +const _PC_REC_MAX_XFER_SIZE = 15 +const _PC_REC_MIN_XFER_SIZE = 16 +const _PC_REC_XFER_ALIGN = 17 +const _PC_SOCK_MAXBUF = 12 +const _PC_SYMLINK_MAX = 19 +const _PC_SYNC_IO = 9 +const _PC_VDISABLE = 8 +const _POSIX2_C_BIND = 200809 +const _POSIX2_VERSION = 200809 +const _POSIX_ADVISORY_INFO = 200809 +const _POSIX_ASYNCHRONOUS_IO = 200809 +const _POSIX_BARRIERS = 200809 +const _POSIX_CHOWN_RESTRICTED = 1 +const _POSIX_CLOCK_SELECTION = 200809 +const _POSIX_CPUTIME = 200809 +const _POSIX_FSYNC = 200809 +const _POSIX_IPV6 = 200809 +const _POSIX_JOB_CONTROL = 1 +const _POSIX_MAPPED_FILES = 200809 +const _POSIX_MEMLOCK = 200809 +const _POSIX_MEMLOCK_RANGE = 200809 +const _POSIX_MEMORY_PROTECTION = 200809 +const _POSIX_MESSAGE_PASSING = 200809 +const _POSIX_MONOTONIC_CLOCK = 200809 +const _POSIX_NO_TRUNC = 1 +const _POSIX_RAW_SOCKETS = 200809 +const _POSIX_READER_WRITER_LOCKS = 200809 +const _POSIX_REALTIME_SIGNALS = 200809 +const _POSIX_REGEXP = 1 +const _POSIX_SAVED_IDS = 1 +const _POSIX_SEMAPHORES = 200809 +const _POSIX_SHARED_MEMORY_OBJECTS = 200809 +const _POSIX_SHELL = 1 +const _POSIX_SPAWN = 200809 +const _POSIX_SPIN_LOCKS = 200809 +const _POSIX_THREADS = 200809 +const _POSIX_THREAD_ATTR_STACKADDR = 200809 +const _POSIX_THREAD_ATTR_STACKSIZE = 200809 +const _POSIX_THREAD_CPUTIME = 200809 +const _POSIX_THREAD_PRIORITY_SCHEDULING = 200809 +const _POSIX_THREAD_PROCESS_SHARED = 200809 +const _POSIX_THREAD_SAFE_FUNCTIONS = 200809 +const _POSIX_TIMEOUTS = 200809 +const _POSIX_TIMERS = 200809 +const _POSIX_V6_ILP32_OFFBIG = 1 +const _POSIX_V7_ILP32_OFFBIG = 1 +const _POSIX_VDISABLE = 0 +const _POSIX_VERSION = 200809 +const _SC_2_CHAR_TERM = 95 +const _SC_2_C_BIND = 47 +const _SC_2_C_DEV = 48 +const _SC_2_FORT_DEV = 49 +const _SC_2_FORT_RUN = 50 +const _SC_2_LOCALEDEF = 52 +const _SC_2_PBS = 168 +const _SC_2_PBS_ACCOUNTING = 169 +const _SC_2_PBS_CHECKPOINT = 175 +const _SC_2_PBS_LOCATE = 170 +const _SC_2_PBS_MESSAGE = 171 +const _SC_2_PBS_TRACK = 172 +const _SC_2_SW_DEV = 51 +const _SC_2_UPE = 97 +const _SC_2_VERSION = 46 +const _SC_ADVISORY_INFO = 132 +const _SC_AIO_LISTIO_MAX = 23 +const _SC_AIO_MAX = 24 +const _SC_AIO_PRIO_DELTA_MAX = 25 +const _SC_ARG_MAX = 0 +const _SC_ASYNCHRONOUS_IO = 12 +const _SC_ATEXIT_MAX = 87 +const _SC_AVPHYS_PAGES = 86 +const _SC_BARRIERS = 133 +const _SC_BC_BASE_MAX = 36 +const _SC_BC_DIM_MAX = 37 +const _SC_BC_SCALE_MAX = 38 +const _SC_BC_STRING_MAX = 39 +const _SC_CHILD_MAX = 1 +const _SC_CLK_TCK = 2 +const _SC_CLOCK_SELECTION = 137 +const _SC_COLL_WEIGHTS_MAX = 40 +const _SC_CPUTIME = 138 +const _SC_DELAYTIMER_MAX = 26 +const _SC_EXPR_NEST_MAX = 42 +const _SC_FSYNC = 15 +const _SC_GETGR_R_SIZE_MAX = 69 +const _SC_GETPW_R_SIZE_MAX = 70 +const _SC_HOST_NAME_MAX = 180 +const _SC_IOV_MAX = 60 +const _SC_IPV6 = 235 +const _SC_JOB_CONTROL = 7 +const _SC_LINE_MAX = 43 +const _SC_LOGIN_NAME_MAX = 71 +const _SC_MAPPED_FILES = 16 +const _SC_MEMLOCK = 17 +const _SC_MEMLOCK_RANGE = 18 +const _SC_MEMORY_PROTECTION = 19 +const _SC_MESSAGE_PASSING = 20 +const _SC_MINSIGSTKSZ = 249 +const _SC_MONOTONIC_CLOCK = 149 +const _SC_MQ_OPEN_MAX = 27 +const _SC_MQ_PRIO_MAX = 28 +const _SC_NGROUPS_MAX = 3 +const _SC_NPROCESSORS_CONF = 83 +const _SC_NPROCESSORS_ONLN = 84 +const _SC_NZERO = 109 +const _SC_OPEN_MAX = 4 +const _SC_PAGESIZE = 30 +const _SC_PAGE_SIZE = 30 +const _SC_PASS_MAX = 88 +const _SC_PHYS_PAGES = 85 +const _SC_PRIORITIZED_IO = 13 +const _SC_PRIORITY_SCHEDULING = 10 +const _SC_RAW_SOCKETS = 236 +const _SC_READER_WRITER_LOCKS = 153 +const _SC_REALTIME_SIGNALS = 9 +const _SC_REGEXP = 155 +const _SC_RE_DUP_MAX = 44 +const _SC_RTSIG_MAX = 31 +const _SC_SAVED_IDS = 8 +const _SC_SEMAPHORES = 21 +const _SC_SEM_NSEMS_MAX = 32 +const _SC_SEM_VALUE_MAX = 33 +const _SC_SHARED_MEMORY_OBJECTS = 22 +const _SC_SHELL = 157 +const _SC_SIGQUEUE_MAX = 34 +const _SC_SIGSTKSZ = 250 +const _SC_SPAWN = 159 +const _SC_SPIN_LOCKS = 154 +const _SC_SPORADIC_SERVER = 160 +const _SC_SS_REPL_MAX = 241 +const _SC_STREAMS = 174 +const _SC_STREAM_MAX = 5 +const _SC_SYMLOOP_MAX = 173 +const _SC_SYNCHRONIZED_IO = 14 +const _SC_THREADS = 67 +const _SC_THREAD_ATTR_STACKADDR = 77 +const _SC_THREAD_ATTR_STACKSIZE = 78 +const _SC_THREAD_CPUTIME = 139 +const _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 +const _SC_THREAD_KEYS_MAX = 74 +const _SC_THREAD_PRIORITY_SCHEDULING = 79 +const _SC_THREAD_PRIO_INHERIT = 80 +const _SC_THREAD_PRIO_PROTECT = 81 +const _SC_THREAD_PROCESS_SHARED = 82 +const _SC_THREAD_ROBUST_PRIO_INHERIT = 247 +const _SC_THREAD_ROBUST_PRIO_PROTECT = 248 +const _SC_THREAD_SAFE_FUNCTIONS = 68 +const _SC_THREAD_SPORADIC_SERVER = 161 +const _SC_THREAD_STACK_MIN = 75 +const _SC_THREAD_THREADS_MAX = 76 +const _SC_TIMEOUTS = 164 +const _SC_TIMERS = 11 +const _SC_TIMER_MAX = 35 +const _SC_TRACE = 181 +const _SC_TRACE_EVENT_FILTER = 182 +const _SC_TRACE_EVENT_NAME_MAX = 242 +const _SC_TRACE_INHERIT = 183 +const _SC_TRACE_LOG = 184 +const _SC_TRACE_NAME_MAX = 243 +const _SC_TRACE_SYS_MAX = 244 +const _SC_TRACE_USER_EVENT_MAX = 245 +const _SC_TTY_NAME_MAX = 72 +const _SC_TYPED_MEMORY_OBJECTS = 165 +const _SC_TZNAME_MAX = 6 +const _SC_UIO_MAXIOV = 60 +const _SC_V6_ILP32_OFF32 = 176 +const _SC_V6_ILP32_OFFBIG = 177 +const _SC_V6_LP64_OFF64 = 178 +const _SC_V6_LPBIG_OFFBIG = 179 +const _SC_V7_ILP32_OFF32 = 237 +const _SC_V7_ILP32_OFFBIG = 238 +const _SC_V7_LP64_OFF64 = 239 +const _SC_V7_LPBIG_OFFBIG = 240 +const _SC_VERSION = 29 +const _SC_XBS5_ILP32_OFF32 = 125 +const _SC_XBS5_ILP32_OFFBIG = 126 +const _SC_XBS5_LP64_OFF64 = 127 +const _SC_XBS5_LPBIG_OFFBIG = 128 +const _SC_XOPEN_CRYPT = 92 +const _SC_XOPEN_ENH_I18N = 93 +const _SC_XOPEN_LEGACY = 129 +const _SC_XOPEN_REALTIME = 130 +const _SC_XOPEN_REALTIME_THREADS = 131 +const _SC_XOPEN_SHM = 94 +const _SC_XOPEN_STREAMS = 246 +const _SC_XOPEN_UNIX = 91 +const _SC_XOPEN_VERSION = 89 +const _SC_XOPEN_XCU_VERSION = 90 +const _SC_XOPEN_XPG2 = 98 +const _SC_XOPEN_XPG3 = 99 +const _SC_XOPEN_XPG4 = 100 +const _XOPEN_ENH_I18N = 1 +const _XOPEN_UNIX = 1 +const _XOPEN_VERSION = 700 + +type Tsize_t = uint32 + +type Tssize_t = int32 + +type Toff_t = int64 + +type Tpid_t = int32 + +type Tuid_t = uint32 + +type Tgid_t = uint32 + +type Tuseconds_t = uint32 + +type Tva_list = uintptr + +type t__isoc_va_list = uintptr + +type Tfpos_t = struct { + F__ccgo_align [0]uint32 + F__lldata [0]int64 + F__align [0]float64 + F__opaque [16]uint8 +} + +type T_G_fpos64_t = Tfpos_t + +func Xconfstr(tls *TLS, name int32, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v len1=%v, (%v:)", tls, name, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = __ccgo_ts + if !(name != 0) { + s = __ccgo_ts + 1 + } else { + if uint32(name) & ^Uint32FromUint32(4) != uint32(1) && uint32(name-int32(_CS_POSIX_V6_ILP32_OFF32_CFLAGS)) > uint32(35) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint32(0) + } + } + // snprintf is overkill but avoid wasting code size to implement + // this completely useless function and its truncation semantics + return uint32(Xsnprintf(tls, buf, len1, __ccgo_ts+15, VaList(bp+8, s)) + int32(1)) +} + +const ARG_MAX = 131072 +const BC_BASE_MAX = 99 +const BC_DIM_MAX = 2048 +const BC_SCALE_MAX = 99 +const BC_STRING_MAX = 1000 +const CHARCLASS_NAME_MAX = 14 +const CHAR_BIT = 8 +const CHAR_MAX = 255 +const CHAR_MIN = 0 +const COLL_WEIGHTS_MAX = 2 +const DELAYTIMER_MAX = 2147483647 +const EXPR_NEST_MAX = 32 +const FILESIZEBITS = 64 +const HOST_NAME_MAX = 255 +const INT_MAX = 2147483647 +const INT_MIN = -2147483648 +const IOV_MAX = 1024 +const LINE_MAX = 4096 +const LLONG_MAX = 9223372036854775807 +const LLONG_MIN = -9223372036854775808 +const LOGIN_NAME_MAX = 256 +const LONG_BIT = 32 +const LONG_MAX = 2147483647 +const LONG_MIN = -2147483648 +const MB_LEN_MAX = 4 +const MQ_PRIO_MAX = 32768 +const NAME_MAX = 255 +const NGROUPS_MAX = 32 +const NL_ARGMAX = 9 +const NL_LANGMAX = 32 +const NL_MSGMAX = 32767 +const NL_SETMAX = 255 +const NL_TEXTMAX = 2048 +const NZERO = 20 +const PATH_MAX = 4096 +const PIPE_BUF = 4096 +const PTHREAD_DESTRUCTOR_ITERATIONS = 4 +const PTHREAD_KEYS_MAX = 128 +const PTHREAD_STACK_MIN = 2048 +const RE_DUP_MAX = 255 +const SCHAR_MAX = 127 +const SCHAR_MIN = -128 +const SEEK_CUR = 1 +const SEEK_END = 2 +const SEEK_SET = 0 +const SEM_NSEMS_MAX = 256 +const SEM_VALUE_MAX = 2147483647 +const SHRT_MAX = 32767 +const SHRT_MIN = -32768 +const SSIZE_MAX = 2147483647 +const SYMLOOP_MAX = 40 +const TTY_NAME_MAX = 32 +const TZNAME_MAX = 6 +const UCHAR_MAX = 255 +const UINT_MAX = 4294967295 +const ULLONG_MAX = 18446744073709551615 +const ULONG_MAX = 4294967295 +const USHRT_MAX = 65535 +const WORD_BIT = 32 +const _POSIX2_BC_BASE_MAX = 99 +const _POSIX2_BC_DIM_MAX = 2048 +const _POSIX2_BC_SCALE_MAX = 99 +const _POSIX2_BC_STRING_MAX = 1000 +const _POSIX2_CHARCLASS_NAME_MAX = 14 +const _POSIX2_COLL_WEIGHTS_MAX = 2 +const _POSIX2_EXPR_NEST_MAX = 32 +const _POSIX2_LINE_MAX = 2048 +const _POSIX2_RE_DUP_MAX = 255 +const _POSIX_AIO_LISTIO_MAX = 2 +const _POSIX_AIO_MAX = 1 +const _POSIX_ARG_MAX = 4096 +const _POSIX_CHILD_MAX = 25 +const _POSIX_CLOCKRES_MIN = 20000000 +const _POSIX_DELAYTIMER_MAX = 32 +const _POSIX_HOST_NAME_MAX = 255 +const _POSIX_LINK_MAX = 8 +const _POSIX_LOGIN_NAME_MAX = 9 +const _POSIX_MAX_CANON = 255 +const _POSIX_MAX_INPUT = 255 +const _POSIX_MQ_OPEN_MAX = 8 +const _POSIX_MQ_PRIO_MAX = 32 +const _POSIX_NAME_MAX = 14 +const _POSIX_NGROUPS_MAX = 8 +const _POSIX_OPEN_MAX = 20 +const _POSIX_PATH_MAX = 256 +const _POSIX_PIPE_BUF = 512 +const _POSIX_RE_DUP_MAX = 255 +const _POSIX_RTSIG_MAX = 8 +const _POSIX_SEM_NSEMS_MAX = 256 +const _POSIX_SEM_VALUE_MAX = 32767 +const _POSIX_SIGQUEUE_MAX = 32 +const _POSIX_SSIZE_MAX = 32767 +const _POSIX_SS_REPL_MAX = 4 +const _POSIX_STREAM_MAX = 8 +const _POSIX_SYMLINK_MAX = 255 +const _POSIX_SYMLOOP_MAX = 8 +const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 +const _POSIX_THREAD_KEYS_MAX = 128 +const _POSIX_THREAD_THREADS_MAX = 64 +const _POSIX_TIMER_MAX = 32 +const _POSIX_TRACE_EVENT_NAME_MAX = 30 +const _POSIX_TRACE_NAME_MAX = 8 +const _POSIX_TRACE_SYS_MAX = 8 +const _POSIX_TRACE_USER_EVENT_MAX = 32 +const _POSIX_TTY_NAME_MAX = 9 +const _POSIX_TZNAME_MAX = 6 +const _XOPEN_IOV_MAX = 16 +const _XOPEN_NAME_MAX = 255 +const _XOPEN_PATH_MAX = 1024 + +func Xfpathconf(tls *TLS, fd int32, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint32(name) >= Uint32FromInt64(42)/Uint32FromInt64(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return int32(_values[name]) +} + +var _values = [21]int16{ + 0: int16(_POSIX_LINK_MAX), + 1: int16(_POSIX_MAX_CANON), + 2: int16(_POSIX_MAX_INPUT), + 3: int16(NAME_MAX), + 4: int16(PATH_MAX), + 5: int16(PIPE_BUF), + 6: int16(1), + 7: int16(1), + 9: int16(1), + 10: int16(-int32(1)), + 11: int16(-int32(1)), + 12: int16(-int32(1)), + 13: int16(FILESIZEBITS), + 14: int16(4096), + 15: int16(4096), + 16: int16(4096), + 17: int16(4096), + 18: int16(4096), + 19: int16(-int32(1)), + 20: int16(1), +} + +const SI_LOAD_SHIFT = 16 + +type Tsysinfo = struct { + Fuptime uint32 + Floads [3]uint32 + Ftotalram uint32 + Ffreeram uint32 + Fsharedram uint32 + Fbufferram uint32 + Ftotalswap uint32 + Ffreeswap uint32 + Fprocs uint16 + Fpad uint16 + Ftotalhigh uint32 + Ffreehigh uint32 + Fmem_unit uint32 + F__reserved [256]uint8 +} + +func Xget_nprocs_conf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_NPROCESSORS_CONF)) +} + +func Xget_nprocs(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_NPROCESSORS_ONLN)) +} + +func Xget_phys_pages(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_PHYS_PAGES)) +} + +func Xget_avphys_pages(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_AVPHYS_PAGES)) +} + +func Xpathconf(tls *TLS, path uintptr, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfpathconf(tls, -int32(1), name) +} + +const AT_BASE = 7 +const AT_BASE_PLATFORM = 24 +const AT_CLKTCK = 17 +const AT_DCACHEBSIZE = 19 +const AT_EGID = 14 +const AT_ENTRY = 9 +const AT_EUID = 12 +const AT_EXECFD = 2 +const AT_EXECFN = 31 +const AT_FLAGS = 8 +const AT_FPUCW = 18 +const AT_GID = 13 +const AT_HWCAP = 16 +const AT_HWCAP2 = 26 +const AT_ICACHEBSIZE = 20 +const AT_IGNORE = 1 +const AT_IGNOREPPC = 22 +const AT_L1D_CACHEGEOMETRY = 43 +const AT_L1D_CACHESHAPE = 35 +const AT_L1D_CACHESIZE = 42 +const AT_L1I_CACHEGEOMETRY = 41 +const AT_L1I_CACHESHAPE = 34 +const AT_L1I_CACHESIZE = 40 +const AT_L2_CACHEGEOMETRY = 45 +const AT_L2_CACHESHAPE = 36 +const AT_L2_CACHESIZE = 44 +const AT_L3_CACHEGEOMETRY = 47 +const AT_L3_CACHESHAPE = 37 +const AT_L3_CACHESIZE = 46 +const AT_MINSIGSTKSZ = 51 +const AT_NOTELF = 10 +const AT_NULL = 0 +const AT_PAGESZ = 6 +const AT_PHDR = 3 +const AT_PHENT = 4 +const AT_PHNUM = 5 +const AT_PLATFORM = 15 +const AT_RANDOM = 25 +const AT_SECURE = 23 +const AT_SYSINFO = 32 +const AT_SYSINFO_EHDR = 33 +const AT_UCACHEBSIZE = 21 +const AT_UID = 11 +const BUS_ADRALN = 1 +const BUS_ADRERR = 2 +const BUS_MCEERR_AO = 5 +const BUS_MCEERR_AR = 4 +const BUS_OBJERR = 3 +const CLD_CONTINUED = 6 +const CLD_DUMPED = 3 +const CLD_EXITED = 1 +const CLD_KILLED = 2 +const CLD_STOPPED = 5 +const CLD_TRAPPED = 4 +const DF_1_CONFALT = 8192 +const DF_1_DIRECT = 256 +const DF_1_DISPRELDNE = 32768 +const DF_1_DISPRELPND = 65536 +const DF_1_EDITED = 2097152 +const DF_1_ENDFILTEE = 16384 +const DF_1_GLOBAL = 2 +const DF_1_GLOBAUDIT = 16777216 +const DF_1_GROUP = 4 +const DF_1_IGNMULDEF = 262144 +const DF_1_INITFIRST = 32 +const DF_1_INTERPOSE = 1024 +const DF_1_LOADFLTR = 16 +const DF_1_NODEFLIB = 2048 +const DF_1_NODELETE = 8 +const DF_1_NODIRECT = 131072 +const DF_1_NODUMP = 4096 +const DF_1_NOHDR = 1048576 +const DF_1_NOKSYMS = 524288 +const DF_1_NOOPEN = 64 +const DF_1_NORELOC = 4194304 +const DF_1_NOW = 1 +const DF_1_ORIGIN = 128 +const DF_1_PIE = 134217728 +const DF_1_SINGLETON = 33554432 +const DF_1_STUB = 67108864 +const DF_1_SYMINTPOSE = 8388608 +const DF_1_TRANS = 512 +const DF_BIND_NOW = 8 +const DF_ORIGIN = 1 +const DF_P1_GROUPPERM = 2 +const DF_P1_LAZYLOAD = 1 +const DF_STATIC_TLS = 16 +const DF_SYMBOLIC = 2 +const DF_TEXTREL = 4 +const DTF_1_CONFEXP = 2 +const DTF_1_PARINIT = 1 +const DT_ADDRNUM = 11 +const DT_ADDRRNGHI = 1879047935 +const DT_ADDRRNGLO = 1879047680 +const DT_ALPHA_NUM = 1 +const DT_ALPHA_PLTRO = 1879048192 +const DT_AUDIT = 1879047932 +const DT_AUXILIARY = 2147483645 +const DT_BIND_NOW = 24 +const DT_CHECKSUM = 1879047672 +const DT_CONFIG = 1879047930 +const DT_DEBUG = 21 +const DT_DEPAUDIT = 1879047931 +const DT_ENCODING = 32 +const DT_EXTRANUM = 3 +const DT_FEATURE_1 = 1879047676 +const DT_FILTER = 2147483647 +const DT_FINI = 13 +const DT_FINI_ARRAY = 26 +const DT_FINI_ARRAYSZ = 28 +const DT_FLAGS = 30 +const DT_FLAGS_1 = 1879048187 +const DT_GNU_CONFLICT = 1879047928 +const DT_GNU_CONFLICTSZ = 1879047670 +const DT_GNU_HASH = 1879047925 +const DT_GNU_LIBLIST = 1879047929 +const DT_GNU_LIBLISTSZ = 1879047671 +const DT_GNU_PRELINKED = 1879047669 +const DT_HASH = 4 +const DT_HIOS = 1879044096 +const DT_HIPROC = 2147483647 +const DT_IA_64_NUM = 1 +const DT_IA_64_PLT_RESERVE = 1879048192 +const DT_INIT = 12 +const DT_INIT_ARRAY = 25 +const DT_INIT_ARRAYSZ = 27 +const DT_JMPREL = 23 +const DT_LOOS = 1610612749 +const DT_LOPROC = 1879048192 +const DT_MIPS_AUX_DYNAMIC = 1879048241 +const DT_MIPS_BASE_ADDRESS = 1879048198 +const DT_MIPS_COMPACT_SIZE = 1879048239 +const DT_MIPS_CONFLICT = 1879048200 +const DT_MIPS_CONFLICTNO = 1879048203 +const DT_MIPS_CXX_FLAGS = 1879048226 +const DT_MIPS_DELTA_CLASS = 1879048215 +const DT_MIPS_DELTA_CLASSSYM = 1879048224 +const DT_MIPS_DELTA_CLASSSYM_NO = 1879048225 +const DT_MIPS_DELTA_CLASS_NO = 1879048216 +const DT_MIPS_DELTA_INSTANCE = 1879048217 +const DT_MIPS_DELTA_INSTANCE_NO = 1879048218 +const DT_MIPS_DELTA_RELOC = 1879048219 +const DT_MIPS_DELTA_RELOC_NO = 1879048220 +const DT_MIPS_DELTA_SYM = 1879048221 +const DT_MIPS_DELTA_SYM_NO = 1879048222 +const DT_MIPS_DYNSTR_ALIGN = 1879048235 +const DT_MIPS_FLAGS = 1879048197 +const DT_MIPS_GOTSYM = 1879048211 +const DT_MIPS_GP_VALUE = 1879048240 +const DT_MIPS_HIDDEN_GOTIDX = 1879048231 +const DT_MIPS_HIPAGENO = 1879048212 +const DT_MIPS_ICHECKSUM = 1879048195 +const DT_MIPS_INTERFACE = 1879048234 +const DT_MIPS_INTERFACE_SIZE = 1879048236 +const DT_MIPS_IVERSION = 1879048196 +const DT_MIPS_LIBLIST = 1879048201 +const DT_MIPS_LIBLISTNO = 1879048208 +const DT_MIPS_LOCALPAGE_GOTIDX = 1879048229 +const DT_MIPS_LOCAL_GOTIDX = 1879048230 +const DT_MIPS_LOCAL_GOTNO = 1879048202 +const DT_MIPS_MSYM = 1879048199 +const DT_MIPS_NUM = 54 +const DT_MIPS_OPTIONS = 1879048233 +const DT_MIPS_PERF_SUFFIX = 1879048238 +const DT_MIPS_PIXIE_INIT = 1879048227 +const DT_MIPS_PLTGOT = 1879048242 +const DT_MIPS_PROTECTED_GOTIDX = 1879048232 +const DT_MIPS_RLD_MAP = 1879048214 +const DT_MIPS_RLD_MAP_REL = 1879048245 +const DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 1879048237 +const DT_MIPS_RLD_VERSION = 1879048193 +const DT_MIPS_RWPLT = 1879048244 +const DT_MIPS_SYMBOL_LIB = 1879048228 +const DT_MIPS_SYMTABNO = 1879048209 +const DT_MIPS_TIME_STAMP = 1879048194 +const DT_MIPS_UNREFEXTNO = 1879048210 +const DT_MOVEENT = 1879047674 +const DT_MOVESZ = 1879047675 +const DT_MOVETAB = 1879047934 +const DT_NEEDED = 1 +const DT_NIOS2_GP = 1879048194 +const DT_NULL = 0 +const DT_NUM = 38 +const DT_PLTGOT = 3 +const DT_PLTPAD = 1879047933 +const DT_PLTPADSZ = 1879047673 +const DT_PLTREL = 20 +const DT_PLTRELSZ = 2 +const DT_POSFLAG_1 = 1879047677 +const DT_PPC64_GLINK = 1879048192 +const DT_PPC64_NUM = 4 +const DT_PPC64_OPD = 1879048193 +const DT_PPC64_OPDSZ = 1879048194 +const DT_PPC64_OPT = 1879048195 +const DT_PPC_GOT = 1879048192 +const DT_PPC_NUM = 2 +const DT_PPC_OPT = 1879048193 +const DT_PREINIT_ARRAY = 32 +const DT_PREINIT_ARRAYSZ = 33 +const DT_PROCNUM = 54 +const DT_REL = 17 +const DT_RELA = 7 +const DT_RELACOUNT = 1879048185 +const DT_RELAENT = 9 +const DT_RELASZ = 8 +const DT_RELCOUNT = 1879048186 +const DT_RELENT = 19 +const DT_RELR = 36 +const DT_RELRENT = 37 +const DT_RELRSZ = 35 +const DT_RELSZ = 18 +const DT_RPATH = 15 +const DT_RUNPATH = 29 +const DT_SONAME = 14 +const DT_SPARC_NUM = 2 +const DT_SPARC_REGISTER = 1879048193 +const DT_STRSZ = 10 +const DT_STRTAB = 5 +const DT_SYMBOLIC = 16 +const DT_SYMENT = 11 +const DT_SYMINENT = 1879047679 +const DT_SYMINFO = 1879047935 +const DT_SYMINSZ = 1879047678 +const DT_SYMTAB = 6 +const DT_SYMTAB_SHNDX = 34 +const DT_TEXTREL = 22 +const DT_TLSDESC_GOT = 1879047927 +const DT_TLSDESC_PLT = 1879047926 +const DT_VALNUM = 12 +const DT_VALRNGHI = 1879047679 +const DT_VALRNGLO = 1879047424 +const DT_VERDEF = 1879048188 +const DT_VERDEFNUM = 1879048189 +const DT_VERNEED = 1879048190 +const DT_VERNEEDNUM = 1879048191 +const DT_VERSIONTAGNUM = 16 +const DT_VERSYM = 1879048176 +const EFA_PARISC_1_0 = 523 +const EFA_PARISC_1_1 = 528 +const EFA_PARISC_2_0 = 532 +const EF_ALPHA_32BIT = 1 +const EF_ALPHA_CANRELAX = 2 +const EF_ARM_ABI_FLOAT_HARD = 1024 +const EF_ARM_ABI_FLOAT_SOFT = 512 +const EF_ARM_ALIGN8 = 64 +const EF_ARM_APCS_26 = 8 +const EF_ARM_APCS_FLOAT = 16 +const EF_ARM_BE8 = 8388608 +const EF_ARM_DYNSYMSUSESEGIDX = 8 +const EF_ARM_EABIMASK = 4278190080 +const EF_ARM_EABI_UNKNOWN = 0 +const EF_ARM_EABI_VER1 = 16777216 +const EF_ARM_EABI_VER2 = 33554432 +const EF_ARM_EABI_VER3 = 50331648 +const EF_ARM_EABI_VER4 = 67108864 +const EF_ARM_EABI_VER5 = 83886080 +const EF_ARM_HASENTRY = 2 +const EF_ARM_INTERWORK = 4 +const EF_ARM_LE8 = 4194304 +const EF_ARM_MAPSYMSFIRST = 16 +const EF_ARM_MAVERICK_FLOAT = 2048 +const EF_ARM_NEW_ABI = 128 +const EF_ARM_OLD_ABI = 256 +const EF_ARM_PIC = 32 +const EF_ARM_RELEXEC = 1 +const EF_ARM_SOFT_FLOAT = 512 +const EF_ARM_SYMSARESORTED = 4 +const EF_ARM_VFP_FLOAT = 1024 +const EF_CPU32 = 8454144 +const EF_IA_64_ABI64 = 16 +const EF_IA_64_ARCH = 4278190080 +const EF_IA_64_MASKOS = 15 +const EF_LARCH_ABI_DOUBLE_FLOAT = 3 +const EF_LARCH_ABI_MODIFIER_MASK = 7 +const EF_LARCH_ABI_SINGLE_FLOAT = 2 +const EF_LARCH_ABI_SOFT_FLOAT = 1 +const EF_LARCH_OBJABI_V1 = 64 +const EF_MIPS_64BIT_WHIRL = 16 +const EF_MIPS_ABI2 = 32 +const EF_MIPS_ABI_ON32 = 64 +const EF_MIPS_ARCH = 4026531840 +const EF_MIPS_ARCH_1 = 0 +const EF_MIPS_ARCH_2 = 268435456 +const EF_MIPS_ARCH_3 = 536870912 +const EF_MIPS_ARCH_32 = 1342177280 +const EF_MIPS_ARCH_32R2 = 1879048192 +const EF_MIPS_ARCH_4 = 805306368 +const EF_MIPS_ARCH_5 = 1073741824 +const EF_MIPS_ARCH_64 = 1610612736 +const EF_MIPS_ARCH_64R2 = 2147483648 +const EF_MIPS_CPIC = 4 +const EF_MIPS_FP64 = 512 +const EF_MIPS_NAN2008 = 1024 +const EF_MIPS_NOREORDER = 1 +const EF_MIPS_PIC = 2 +const EF_MIPS_XGOT = 8 +const EF_PARISC_ARCH = 65535 +const EF_PARISC_EXT = 131072 +const EF_PARISC_LAZYSWAP = 4194304 +const EF_PARISC_LSB = 262144 +const EF_PARISC_NO_KABP = 1048576 +const EF_PARISC_TRAPNIL = 65536 +const EF_PARISC_WIDE = 524288 +const EF_PPC64_ABI = 3 +const EF_PPC_EMB = 2147483648 +const EF_PPC_RELOCATABLE = 65536 +const EF_PPC_RELOCATABLE_LIB = 32768 +const EF_SH1 = 1 +const EF_SH2 = 2 +const EF_SH2A = 13 +const EF_SH2A_NOFPU = 19 +const EF_SH2A_SH3E = 24 +const EF_SH2A_SH3_NOFPU = 22 +const EF_SH2A_SH4 = 23 +const EF_SH2A_SH4_NOFPU = 21 +const EF_SH2E = 11 +const EF_SH3 = 3 +const EF_SH3E = 8 +const EF_SH3_DSP = 5 +const EF_SH3_NOMMU = 20 +const EF_SH4 = 9 +const EF_SH4A = 12 +const EF_SH4AL_DSP = 6 +const EF_SH4A_NOFPU = 17 +const EF_SH4_NOFPU = 16 +const EF_SH4_NOMMU_NOFPU = 18 +const EF_SH_DSP = 4 +const EF_SH_MACH_MASK = 31 +const EF_SH_UNKNOWN = 0 +const EF_SPARCV9_MM = 3 +const EF_SPARCV9_PSO = 1 +const EF_SPARCV9_RMO = 2 +const EF_SPARCV9_TSO = 0 +const EF_SPARC_32PLUS = 256 +const EF_SPARC_EXT_MASK = 16776960 +const EF_SPARC_HAL_R1 = 1024 +const EF_SPARC_LEDATA = 8388608 +const EF_SPARC_SUN_US1 = 512 +const EF_SPARC_SUN_US3 = 2048 +const EI_ABIVERSION = 8 +const EI_CLASS = 4 +const EI_DATA = 5 +const EI_MAG0 = 0 +const EI_MAG1 = 1 +const EI_MAG2 = 2 +const EI_MAG3 = 3 +const EI_NIDENT = 16 +const EI_OSABI = 7 +const EI_PAD = 9 +const EI_VERSION = 6 +const ELFCLASS32 = 1 +const ELFCLASS64 = 2 +const ELFCLASSNONE = 0 +const ELFCLASSNUM = 3 +const ELFCOMPRESS_HIOS = 1879048191 +const ELFCOMPRESS_HIPROC = 2147483647 +const ELFCOMPRESS_LOOS = 1610612736 +const ELFCOMPRESS_LOPROC = 1879048192 +const ELFCOMPRESS_ZLIB = 1 +const ELFCOMPRESS_ZSTD = 2 +const ELFDATA2LSB = 1 +const ELFDATA2MSB = 2 +const ELFDATANONE = 0 +const ELFDATANUM = 3 +const ELFMAG = "\\177ELF" +const ELFMAG0 = 127 +const ELFMAG1 = 69 +const ELFMAG2 = 76 +const ELFMAG3 = 70 +const ELFOSABI_AIX = 7 +const ELFOSABI_ARM = 97 +const ELFOSABI_FREEBSD = 9 +const ELFOSABI_GNU = 3 +const ELFOSABI_HPUX = 1 +const ELFOSABI_IRIX = 8 +const ELFOSABI_LINUX = 3 +const ELFOSABI_MODESTO = 11 +const ELFOSABI_NETBSD = 2 +const ELFOSABI_NONE = 0 +const ELFOSABI_OPENBSD = 12 +const ELFOSABI_SOLARIS = 6 +const ELFOSABI_STANDALONE = 255 +const ELFOSABI_SYSV = 0 +const ELFOSABI_TRU64 = 10 +const ELF_NOTE_ABI = 1 +const ELF_NOTE_GNU = "GNU" +const ELF_NOTE_OS_FREEBSD = 3 +const ELF_NOTE_OS_GNU = 1 +const ELF_NOTE_OS_LINUX = 0 +const ELF_NOTE_OS_SOLARIS2 = 2 +const ELF_NOTE_PAGESIZE_HINT = 1 +const ELF_NOTE_SOLARIS = "SUNW Solaris" +const EM_386 = 3 +const EM_56800EX = 200 +const EM_68HC05 = 72 +const EM_68HC08 = 71 +const EM_68HC11 = 70 +const EM_68HC12 = 53 +const EM_68HC16 = 69 +const EM_68K = 4 +const EM_78KOR = 199 +const EM_8051 = 165 +const EM_860 = 7 +const EM_88K = 5 +const EM_960 = 19 +const EM_AARCH64 = 183 +const EM_ALPHA = 36902 +const EM_ALTERA_NIOS2 = 113 +const EM_AMDGPU = 224 +const EM_ARC = 45 +const EM_ARCA = 109 +const EM_ARC_A5 = 93 +const EM_ARC_COMPACT = 93 +const EM_ARC_COMPACT2 = 195 +const EM_ARM = 40 +const EM_AVR = 83 +const EM_AVR32 = 185 +const EM_BA1 = 201 +const EM_BA2 = 202 +const EM_BLACKFIN = 106 +const EM_BPF = 247 +const EM_C166 = 116 +const EM_CDP = 215 +const EM_CE = 119 +const EM_CLOUDSHIELD = 192 +const EM_COGE = 216 +const EM_COLDFIRE = 52 +const EM_COOL = 217 +const EM_COREA_1ST = 193 +const EM_COREA_2ND = 194 +const EM_CR = 103 +const EM_CR16 = 177 +const EM_CRAYNV2 = 172 +const EM_CRIS = 76 +const EM_CRX = 114 +const EM_CSKY = 252 +const EM_CSR_KALIMBA = 219 +const EM_CUDA = 190 +const EM_CYPRESS_M8C = 161 +const EM_D10V = 85 +const EM_D30V = 86 +const EM_DSP24 = 136 +const EM_DSPIC30F = 118 +const EM_DXP = 112 +const EM_ECOG16 = 176 +const EM_ECOG1X = 168 +const EM_ECOG2 = 134 +const EM_EMX16 = 212 +const EM_EMX8 = 213 +const EM_ETPU = 178 +const EM_EXCESS = 111 +const EM_F2MC16 = 104 +const EM_FAKE_ALPHA = 41 +const EM_FIREPATH = 78 +const EM_FR20 = 37 +const EM_FR30 = 84 +const EM_FT32 = 222 +const EM_FX66 = 66 +const EM_H8S = 48 +const EM_H8_300 = 46 +const EM_H8_300H = 47 +const EM_H8_500 = 49 +const EM_HUANY = 81 +const EM_IA_64 = 50 +const EM_IP2K = 101 +const EM_JAVELIN = 77 +const EM_K10M = 181 +const EM_KM32 = 210 +const EM_KMX32 = 211 +const EM_KVARC = 214 +const EM_L10M = 180 +const EM_LATTICEMICO32 = 138 +const EM_LOONGARCH = 258 +const EM_M16C = 117 +const EM_M32 = 1 +const EM_M32C = 120 +const EM_M32R = 88 +const EM_MANIK = 171 +const EM_MAX = 102 +const EM_MAXQ30 = 169 +const EM_MCHP_PIC = 204 +const EM_MCST_ELBRUS = 175 +const EM_ME16 = 59 +const EM_METAG = 174 +const EM_MICROBLAZE = 189 +const EM_MIPS = 8 +const EM_MIPS_RS3_LE = 10 +const EM_MIPS_X = 51 +const EM_MMA = 54 +const EM_MMDSP_PLUS = 160 +const EM_MMIX = 80 +const EM_MN10200 = 90 +const EM_MN10300 = 89 +const EM_MOXIE = 223 +const EM_MSP430 = 105 +const EM_NCPU = 56 +const EM_NDR1 = 57 +const EM_NDS32 = 167 +const EM_NONE = 0 +const EM_NORC = 218 +const EM_NS32K = 97 +const EM_NUM = 259 +const EM_OPEN8 = 196 +const EM_OPENRISC = 92 +const EM_OR1K = 92 +const EM_PARISC = 15 +const EM_PCP = 55 +const EM_PDSP = 63 +const EM_PJ = 91 +const EM_PPC = 20 +const EM_PPC64 = 21 +const EM_PRISM = 82 +const EM_QDSP6 = 164 +const EM_R32C = 162 +const EM_RCE = 39 +const EM_RH32 = 38 +const EM_RISCV = 243 +const EM_RL78 = 197 +const EM_RS08 = 132 +const EM_RX = 173 +const EM_S370 = 9 +const EM_S390 = 22 +const EM_SCORE7 = 135 +const EM_SEP = 108 +const EM_SE_C17 = 139 +const EM_SE_C33 = 107 +const EM_SH = 42 +const EM_SHARC = 133 +const EM_SLE9X = 179 +const EM_SNP1K = 99 +const EM_SPARC = 2 +const EM_SPARC32PLUS = 18 +const EM_SPARCV9 = 43 +const EM_ST100 = 60 +const EM_ST19 = 74 +const EM_ST200 = 100 +const EM_ST7 = 68 +const EM_ST9PLUS = 67 +const EM_STARCORE = 58 +const EM_STM8 = 186 +const EM_STXP7X = 166 +const EM_SVX = 73 +const EM_TILE64 = 187 +const EM_TILEGX = 191 +const EM_TILEPRO = 188 +const EM_TINYJ = 61 +const EM_TI_ARP32 = 143 +const EM_TI_C2000 = 141 +const EM_TI_C5500 = 142 +const EM_TI_C6000 = 140 +const EM_TI_PRU = 144 +const EM_TMM_GPP = 96 +const EM_TPC = 98 +const EM_TRICORE = 44 +const EM_TRIMEDIA = 163 +const EM_TSK3000 = 131 +const EM_UNICORE = 110 +const EM_V800 = 36 +const EM_V850 = 87 +const EM_VAX = 75 +const EM_VIDEOCORE = 95 +const EM_VIDEOCORE3 = 137 +const EM_VIDEOCORE5 = 198 +const EM_VISIUM = 221 +const EM_VPP500 = 17 +const EM_X86_64 = 62 +const EM_XCORE = 203 +const EM_XGATE = 115 +const EM_XIMO16 = 170 +const EM_XTENSA = 94 +const EM_Z80 = 220 +const EM_ZSP = 79 +const ET_CORE = 4 +const ET_DYN = 3 +const ET_EXEC = 2 +const ET_HIOS = 65279 +const ET_HIPROC = 65535 +const ET_LOOS = 65024 +const ET_LOPROC = 65280 +const ET_NONE = 0 +const ET_NUM = 5 +const ET_REL = 1 +const EV_CURRENT = 1 +const EV_NONE = 0 +const EV_NUM = 2 +const EXIT_FAILURE = 1 +const EXIT_SUCCESS = 0 +const E_MIPS_ARCH_1 = 0 +const E_MIPS_ARCH_2 = 268435456 +const E_MIPS_ARCH_3 = 536870912 +const E_MIPS_ARCH_32 = 1342177280 +const E_MIPS_ARCH_4 = 805306368 +const E_MIPS_ARCH_5 = 1073741824 +const E_MIPS_ARCH_64 = 1610612736 +const FD_SETSIZE = 1024 +const FPE_FLTDIV = 3 +const FPE_FLTINV = 7 +const FPE_FLTOVF = 4 +const FPE_FLTRES = 6 +const FPE_FLTSUB = 8 +const FPE_FLTUND = 5 +const FPE_INTDIV = 1 +const FPE_INTOVF = 2 +const GRP_COMDAT = 1 +const HWCAP2_AES = 1 +const HWCAP2_CRC32 = 16 +const HWCAP2_PMULL = 2 +const HWCAP2_SHA1 = 4 +const HWCAP2_SHA2 = 8 +const HWCAP_26BIT = 8 +const HWCAP_ARM_26BIT = 8 +const HWCAP_ARM_CRUNCH = 1024 +const HWCAP_ARM_EDSP = 128 +const HWCAP_ARM_EVTSTRM = 2097152 +const HWCAP_ARM_FAST_MULT = 16 +const HWCAP_ARM_FPA = 32 +const HWCAP_ARM_HALF = 2 +const HWCAP_ARM_IDIV = 393216 +const HWCAP_ARM_IDIVA = 131072 +const HWCAP_ARM_IDIVT = 262144 +const HWCAP_ARM_IWMMXT = 512 +const HWCAP_ARM_JAVA = 256 +const HWCAP_ARM_LPAE = 1048576 +const HWCAP_ARM_NEON = 4096 +const HWCAP_ARM_SWP = 1 +const HWCAP_ARM_THUMB = 4 +const HWCAP_ARM_THUMBEE = 2048 +const HWCAP_ARM_TLS = 32768 +const HWCAP_ARM_VFP = 64 +const HWCAP_ARM_VFPD32 = 524288 +const HWCAP_ARM_VFPv3 = 8192 +const HWCAP_ARM_VFPv3D16 = 16384 +const HWCAP_ARM_VFPv4 = 65536 +const HWCAP_CRUNCH = 1024 +const HWCAP_EDSP = 128 +const HWCAP_EVTSTRM = 2097152 +const HWCAP_FAST_MULT = 16 +const HWCAP_FPA = 32 +const HWCAP_HALF = 2 +const HWCAP_IDIV = 393216 +const HWCAP_IDIVA = 131072 +const HWCAP_IDIVT = 262144 +const HWCAP_IWMMXT = 512 +const HWCAP_JAVA = 256 +const HWCAP_LPAE = 1048576 +const HWCAP_NEON = 4096 +const HWCAP_SWP = 1 +const HWCAP_THUMB = 4 +const HWCAP_THUMBEE = 2048 +const HWCAP_TLS = 32768 +const HWCAP_VFP = 64 +const HWCAP_VFPD32 = 524288 +const HWCAP_VFPv3 = 8192 +const HWCAP_VFPv3D16 = 16384 +const HWCAP_VFPv4 = 65536 +const ILL_BADSTK = 8 +const ILL_COPROC = 7 +const ILL_ILLADR = 3 +const ILL_ILLOPC = 1 +const ILL_ILLOPN = 2 +const ILL_ILLTRP = 4 +const ILL_PRVOPC = 5 +const ILL_PRVREG = 6 +const ITIMER_PROF = 2 +const ITIMER_REAL = 0 +const ITIMER_VIRTUAL = 1 +const JT_ARG_MAX = -254 +const JT_AVPHYS_PAGES = -247 +const JT_DELAYTIMER_MAX = -245 +const JT_MINSIGSTKSZ = -244 +const JT_MQ_PRIO_MAX = -253 +const JT_NPROCESSORS_CONF = -250 +const JT_NPROCESSORS_ONLN = -249 +const JT_PAGE_SIZE = -252 +const JT_PHYS_PAGES = -248 +const JT_SEM_VALUE_MAX = -251 +const JT_SIGSTKSZ = -243 +const JT_ZERO = -246 +const LITUSE_ALPHA_ADDR = 0 +const LITUSE_ALPHA_BASE = 1 +const LITUSE_ALPHA_BYTOFF = 2 +const LITUSE_ALPHA_JSR = 3 +const LITUSE_ALPHA_TLS_GD = 4 +const LITUSE_ALPHA_TLS_LDM = 5 +const LL_DELAY_LOAD = 16 +const LL_DELTA = 32 +const LL_EXACT_MATCH = 1 +const LL_EXPORTS = 8 +const LL_IGNORE_INT_VER = 2 +const LL_NONE = 0 +const LL_REQUIRE_MINOR = 4 +const MB_CUR_MAX = 0 +const MINSIGSTKSZ = 2048 +const MIPS_AFL_ASE_DSP = 1 +const MIPS_AFL_ASE_DSPR2 = 2 +const MIPS_AFL_ASE_EVA = 4 +const MIPS_AFL_ASE_MASK = 8191 +const MIPS_AFL_ASE_MCU = 8 +const MIPS_AFL_ASE_MDMX = 16 +const MIPS_AFL_ASE_MICROMIPS = 2048 +const MIPS_AFL_ASE_MIPS16 = 1024 +const MIPS_AFL_ASE_MIPS3D = 32 +const MIPS_AFL_ASE_MSA = 512 +const MIPS_AFL_ASE_MT = 64 +const MIPS_AFL_ASE_SMARTMIPS = 128 +const MIPS_AFL_ASE_VIRT = 256 +const MIPS_AFL_ASE_XPA = 4096 +const MIPS_AFL_EXT_10000 = 11 +const MIPS_AFL_EXT_3900 = 10 +const MIPS_AFL_EXT_4010 = 8 +const MIPS_AFL_EXT_4100 = 9 +const MIPS_AFL_EXT_4111 = 13 +const MIPS_AFL_EXT_4120 = 14 +const MIPS_AFL_EXT_4650 = 7 +const MIPS_AFL_EXT_5400 = 15 +const MIPS_AFL_EXT_5500 = 16 +const MIPS_AFL_EXT_5900 = 6 +const MIPS_AFL_EXT_LOONGSON_2E = 17 +const MIPS_AFL_EXT_LOONGSON_2F = 18 +const MIPS_AFL_EXT_LOONGSON_3A = 4 +const MIPS_AFL_EXT_OCTEON = 5 +const MIPS_AFL_EXT_OCTEON2 = 2 +const MIPS_AFL_EXT_OCTEONP = 3 +const MIPS_AFL_EXT_SB1 = 12 +const MIPS_AFL_EXT_XLR = 1 +const MIPS_AFL_FLAGS1_ODDSPREG = 1 +const MIPS_AFL_REG_128 = 3 +const MIPS_AFL_REG_32 = 1 +const MIPS_AFL_REG_64 = 2 +const MIPS_AFL_REG_NONE = 0 +const NT_386_IOPERM = 513 +const NT_386_TLS = 512 +const NT_ARC_V2 = 1536 +const NT_ARM_HW_BREAK = 1026 +const NT_ARM_HW_WATCH = 1027 +const NT_ARM_PACA_KEYS = 1031 +const NT_ARM_PACG_KEYS = 1032 +const NT_ARM_PAC_ENABLED_KEYS = 1034 +const NT_ARM_PAC_MASK = 1030 +const NT_ARM_SVE = 1029 +const NT_ARM_SYSTEM_CALL = 1028 +const NT_ARM_TAGGED_ADDR_CTRL = 1033 +const NT_ARM_TLS = 1025 +const NT_ARM_VFP = 1024 +const NT_ASRS = 8 +const NT_AUXV = 6 +const NT_FILE = 1179208773 +const NT_FPREGSET = 2 +const NT_GNU_ABI_TAG = 1 +const NT_GNU_BUILD_ID = 3 +const NT_GNU_GOLD_VERSION = 4 +const NT_GNU_PROPERTY_TYPE_0 = 5 +const NT_GWINDOWS = 7 +const NT_LOONGARCH_CPUCFG = 2560 +const NT_LOONGARCH_CSR = 2561 +const NT_LOONGARCH_LASX = 2563 +const NT_LOONGARCH_LBT = 2564 +const NT_LOONGARCH_LSX = 2562 +const NT_LWPSINFO = 17 +const NT_LWPSTATUS = 16 +const NT_METAG_CBUF = 1280 +const NT_METAG_RPIPE = 1281 +const NT_METAG_TLS = 1282 +const NT_MIPS_DSP = 2048 +const NT_MIPS_FP_MODE = 2049 +const NT_MIPS_MSA = 2050 +const NT_PLATFORM = 5 +const NT_PPC_DSCR = 261 +const NT_PPC_EBB = 262 +const NT_PPC_PMU = 263 +const NT_PPC_PPR = 260 +const NT_PPC_SPE = 257 +const NT_PPC_TAR = 259 +const NT_PPC_TM_CDSCR = 271 +const NT_PPC_TM_CFPR = 265 +const NT_PPC_TM_CGPR = 264 +const NT_PPC_TM_CPPR = 270 +const NT_PPC_TM_CTAR = 269 +const NT_PPC_TM_CVMX = 266 +const NT_PPC_TM_CVSX = 267 +const NT_PPC_TM_SPR = 268 +const NT_PPC_VMX = 256 +const NT_PPC_VSX = 258 +const NT_PRCRED = 14 +const NT_PRFPREG = 2 +const NT_PRFPXREG = 20 +const NT_PRPSINFO = 3 +const NT_PRSTATUS = 1 +const NT_PRXFPREG = 1189489535 +const NT_PRXREG = 4 +const NT_PSINFO = 13 +const NT_PSTATUS = 10 +const NT_RISCV_CSR = 2304 +const NT_RISCV_VECTOR = 2305 +const NT_S390_CTRS = 772 +const NT_S390_GS_BC = 780 +const NT_S390_GS_CB = 779 +const NT_S390_HIGH_GPRS = 768 +const NT_S390_LAST_BREAK = 774 +const NT_S390_PREFIX = 773 +const NT_S390_RI_CB = 781 +const NT_S390_SYSTEM_CALL = 775 +const NT_S390_TDB = 776 +const NT_S390_TIMER = 769 +const NT_S390_TODCMP = 770 +const NT_S390_TODPREG = 771 +const NT_S390_VXRS_HIGH = 778 +const NT_S390_VXRS_LOW = 777 +const NT_SIGINFO = 1397311305 +const NT_TASKSTRUCT = 4 +const NT_UTSNAME = 15 +const NT_VERSION = 1 +const NT_VMCOREDD = 1792 +const NT_X86_XSTATE = 514 +const ODK_EXCEPTIONS = 2 +const ODK_FILL = 5 +const ODK_HWAND = 7 +const ODK_HWOR = 8 +const ODK_HWPATCH = 4 +const ODK_NULL = 0 +const ODK_PAD = 3 +const ODK_REGINFO = 1 +const ODK_TAGS = 6 +const OEX_DISMISS = 524288 +const OEX_FPDBUG = 262144 +const OEX_FPU_DIV0 = 8 +const OEX_FPU_INEX = 1 +const OEX_FPU_INVAL = 16 +const OEX_FPU_MAX = 7936 +const OEX_FPU_MIN = 31 +const OEX_FPU_OFLO = 4 +const OEX_FPU_UFLO = 2 +const OEX_PAGE0 = 65536 +const OEX_PRECISEFP = 262144 +const OEX_SMM = 131072 +const OHWA0_R4KEOP_CHECKED = 1 +const OHWA1_R4KEOP_CLEAN = 2 +const OHW_R4KEOP = 1 +const OHW_R5KCVTL = 8 +const OHW_R5KEOP = 4 +const OHW_R8KPFETCH = 2 +const OPAD_POSTFIX = 2 +const OPAD_PREFIX = 1 +const OPAD_SYMBOL = 4 +const PF_ARM_ABS = 1073741824 +const PF_ARM_PI = 536870912 +const PF_ARM_SB = 268435456 +const PF_HP_CODE = 16777216 +const PF_HP_FAR_SHARED = 2097152 +const PF_HP_LAZYSWAP = 67108864 +const PF_HP_MODIFY = 33554432 +const PF_HP_NEAR_SHARED = 4194304 +const PF_HP_PAGE_SIZE = 1048576 +const PF_HP_SBP = 134217728 +const PF_IA_64_NORECOV = 2147483648 +const PF_MASKOS = 267386880 +const PF_MASKPROC = 4026531840 +const PF_MIPS_LOCAL = 268435456 +const PF_PARISC_SBP = 134217728 +const PF_R = 4 +const PF_W = 2 +const PF_X = 1 +const PN_XNUM = 65535 +const POLL_ERR = 4 +const POLL_HUP = 6 +const POLL_IN = 1 +const POLL_MSG = 3 +const POLL_OUT = 2 +const POLL_PRI = 5 +const PPC64_OPT_LOCALENTRY = 4 +const PPC64_OPT_MULTI_TOC = 2 +const PPC64_OPT_TLS = 1 +const PPC_OPT_TLS = 1 +const PRIO_MAX = 20 +const PRIO_MIN = -20 +const PRIO_PGRP = 1 +const PRIO_PROCESS = 0 +const PRIO_USER = 2 +const PT_ARM_EXIDX = 1879048193 +const PT_DYNAMIC = 2 +const PT_GNU_EH_FRAME = 1685382480 +const PT_GNU_PROPERTY = 1685382483 +const PT_GNU_RELRO = 1685382482 +const PT_GNU_STACK = 1685382481 +const PT_HIOS = 1879048191 +const PT_HIPROC = 2147483647 +const PT_HISUNW = 1879048191 +const PT_HP_CORE_COMM = 1610612740 +const PT_HP_CORE_KERNEL = 1610612739 +const PT_HP_CORE_LOADABLE = 1610612742 +const PT_HP_CORE_MMF = 1610612745 +const PT_HP_CORE_NONE = 1610612737 +const PT_HP_CORE_PROC = 1610612741 +const PT_HP_CORE_SHM = 1610612744 +const PT_HP_CORE_STACK = 1610612743 +const PT_HP_CORE_VERSION = 1610612738 +const PT_HP_FASTBIND = 1610612753 +const PT_HP_HSL_ANNOT = 1610612755 +const PT_HP_OPT_ANNOT = 1610612754 +const PT_HP_PARALLEL = 1610612752 +const PT_HP_STACK = 1610612756 +const PT_HP_TLS = 1610612736 +const PT_IA_64_ARCHEXT = 1879048192 +const PT_IA_64_HP_HSL_ANOT = 1610612755 +const PT_IA_64_HP_OPT_ANOT = 1610612754 +const PT_IA_64_HP_STACK = 1610612756 +const PT_IA_64_UNWIND = 1879048193 +const PT_INTERP = 3 +const PT_LOAD = 1 +const PT_LOOS = 1610612736 +const PT_LOPROC = 1879048192 +const PT_LOSUNW = 1879048186 +const PT_MIPS_ABIFLAGS = 1879048195 +const PT_MIPS_OPTIONS = 1879048194 +const PT_MIPS_REGINFO = 1879048192 +const PT_MIPS_RTPROC = 1879048193 +const PT_NOTE = 4 +const PT_NULL = 0 +const PT_NUM = 8 +const PT_PARISC_ARCHEXT = 1879048192 +const PT_PARISC_UNWIND = 1879048193 +const PT_PHDR = 6 +const PT_SHLIB = 5 +const PT_SUNWBSS = 1879048186 +const PT_SUNWSTACK = 1879048187 +const PT_TLS = 7 +const RAND_MAX = 2147483647 +const RHF_CORD = 4096 +const RHF_DEFAULT_DELAY_LOAD = 512 +const RHF_DELTA_C_PLUS_PLUS = 64 +const RHF_GUARANTEE_INIT = 32 +const RHF_GUARANTEE_START_INIT = 128 +const RHF_NONE = 0 +const RHF_NOTPOT = 2 +const RHF_NO_LIBRARY_REPLACEMENT = 4 +const RHF_NO_MOVE = 8 +const RHF_NO_UNRES_UNDEF = 8192 +const RHF_PIXIE = 256 +const RHF_QUICKSTART = 1 +const RHF_REQUICKSTART = 1024 +const RHF_REQUICKSTARTED = 2048 +const RHF_RLD_ORDER_SAFE = 16384 +const RHF_SGI_ONLY = 16 +const RLIMIT_AS = 9 +const RLIMIT_CORE = 4 +const RLIMIT_CPU = 0 +const RLIMIT_DATA = 2 +const RLIMIT_FSIZE = 1 +const RLIMIT_LOCKS = 10 +const RLIMIT_MEMLOCK = 8 +const RLIMIT_MSGQUEUE = 12 +const RLIMIT_NICE = 13 +const RLIMIT_NLIMITS = 16 +const RLIMIT_NOFILE = 7 +const RLIMIT_NPROC = 6 +const RLIMIT_RSS = 5 +const RLIMIT_RTPRIO = 14 +const RLIMIT_RTTIME = 15 +const RLIMIT_SIGPENDING = 11 +const RLIMIT_STACK = 3 +const RLIM_INFINITY = 18446744073709551615 +const RLIM_NLIMITS = 16 +const RLIM_SAVED_CUR = 18446744073709551615 +const RLIM_SAVED_MAX = 18446744073709551615 +const RUSAGE_CHILDREN = -1 +const RUSAGE_SELF = 0 +const RUSAGE_THREAD = 1 +const R_386_16 = 20 +const R_386_32 = 1 +const R_386_32PLT = 11 +const R_386_8 = 22 +const R_386_COPY = 5 +const R_386_GLOB_DAT = 6 +const R_386_GOT32 = 3 +const R_386_GOT32X = 43 +const R_386_GOTOFF = 9 +const R_386_GOTPC = 10 +const R_386_IRELATIVE = 42 +const R_386_JMP_SLOT = 7 +const R_386_NONE = 0 +const R_386_NUM = 44 +const R_386_PC16 = 21 +const R_386_PC32 = 2 +const R_386_PC8 = 23 +const R_386_PLT32 = 4 +const R_386_RELATIVE = 8 +const R_386_SIZE32 = 38 +const R_386_TLS_DESC = 41 +const R_386_TLS_DESC_CALL = 40 +const R_386_TLS_DTPMOD32 = 35 +const R_386_TLS_DTPOFF32 = 36 +const R_386_TLS_GD = 18 +const R_386_TLS_GD_32 = 24 +const R_386_TLS_GD_CALL = 26 +const R_386_TLS_GD_POP = 27 +const R_386_TLS_GD_PUSH = 25 +const R_386_TLS_GOTDESC = 39 +const R_386_TLS_GOTIE = 16 +const R_386_TLS_IE = 15 +const R_386_TLS_IE_32 = 33 +const R_386_TLS_LDM = 19 +const R_386_TLS_LDM_32 = 28 +const R_386_TLS_LDM_CALL = 30 +const R_386_TLS_LDM_POP = 31 +const R_386_TLS_LDM_PUSH = 29 +const R_386_TLS_LDO_32 = 32 +const R_386_TLS_LE = 17 +const R_386_TLS_LE_32 = 34 +const R_386_TLS_TPOFF = 14 +const R_386_TLS_TPOFF32 = 37 +const R_390_12 = 2 +const R_390_16 = 3 +const R_390_20 = 57 +const R_390_32 = 4 +const R_390_64 = 22 +const R_390_8 = 1 +const R_390_COPY = 9 +const R_390_GLOB_DAT = 10 +const R_390_GOT12 = 6 +const R_390_GOT16 = 15 +const R_390_GOT20 = 58 +const R_390_GOT32 = 7 +const R_390_GOT64 = 24 +const R_390_GOTENT = 26 +const R_390_GOTOFF16 = 27 +const R_390_GOTOFF32 = 13 +const R_390_GOTOFF64 = 28 +const R_390_GOTPC = 14 +const R_390_GOTPCDBL = 21 +const R_390_GOTPLT12 = 29 +const R_390_GOTPLT16 = 30 +const R_390_GOTPLT20 = 59 +const R_390_GOTPLT32 = 31 +const R_390_GOTPLT64 = 32 +const R_390_GOTPLTENT = 33 +const R_390_JMP_SLOT = 11 +const R_390_NONE = 0 +const R_390_NUM = 61 +const R_390_PC16 = 16 +const R_390_PC16DBL = 17 +const R_390_PC32 = 5 +const R_390_PC32DBL = 19 +const R_390_PC64 = 23 +const R_390_PLT16DBL = 18 +const R_390_PLT32 = 8 +const R_390_PLT32DBL = 20 +const R_390_PLT64 = 25 +const R_390_PLTOFF16 = 34 +const R_390_PLTOFF32 = 35 +const R_390_PLTOFF64 = 36 +const R_390_RELATIVE = 12 +const R_390_TLS_DTPMOD = 54 +const R_390_TLS_DTPOFF = 55 +const R_390_TLS_GD32 = 40 +const R_390_TLS_GD64 = 41 +const R_390_TLS_GDCALL = 38 +const R_390_TLS_GOTIE12 = 42 +const R_390_TLS_GOTIE20 = 60 +const R_390_TLS_GOTIE32 = 43 +const R_390_TLS_GOTIE64 = 44 +const R_390_TLS_IE32 = 47 +const R_390_TLS_IE64 = 48 +const R_390_TLS_IEENT = 49 +const R_390_TLS_LDCALL = 39 +const R_390_TLS_LDM32 = 45 +const R_390_TLS_LDM64 = 46 +const R_390_TLS_LDO32 = 52 +const R_390_TLS_LDO64 = 53 +const R_390_TLS_LE32 = 50 +const R_390_TLS_LE64 = 51 +const R_390_TLS_LOAD = 37 +const R_390_TLS_TPOFF = 56 +const R_68K_16 = 2 +const R_68K_32 = 1 +const R_68K_8 = 3 +const R_68K_COPY = 19 +const R_68K_GLOB_DAT = 20 +const R_68K_GOT16 = 8 +const R_68K_GOT16O = 11 +const R_68K_GOT32 = 7 +const R_68K_GOT32O = 10 +const R_68K_GOT8 = 9 +const R_68K_GOT8O = 12 +const R_68K_JMP_SLOT = 21 +const R_68K_NONE = 0 +const R_68K_NUM = 43 +const R_68K_PC16 = 5 +const R_68K_PC32 = 4 +const R_68K_PC8 = 6 +const R_68K_PLT16 = 14 +const R_68K_PLT16O = 17 +const R_68K_PLT32 = 13 +const R_68K_PLT32O = 16 +const R_68K_PLT8 = 15 +const R_68K_PLT8O = 18 +const R_68K_RELATIVE = 22 +const R_68K_TLS_DTPMOD32 = 40 +const R_68K_TLS_DTPREL32 = 41 +const R_68K_TLS_GD16 = 26 +const R_68K_TLS_GD32 = 25 +const R_68K_TLS_GD8 = 27 +const R_68K_TLS_IE16 = 35 +const R_68K_TLS_IE32 = 34 +const R_68K_TLS_IE8 = 36 +const R_68K_TLS_LDM16 = 29 +const R_68K_TLS_LDM32 = 28 +const R_68K_TLS_LDM8 = 30 +const R_68K_TLS_LDO16 = 32 +const R_68K_TLS_LDO32 = 31 +const R_68K_TLS_LDO8 = 33 +const R_68K_TLS_LE16 = 38 +const R_68K_TLS_LE32 = 37 +const R_68K_TLS_LE8 = 39 +const R_68K_TLS_TPREL32 = 42 +const R_AARCH64_ABS16 = 259 +const R_AARCH64_ABS32 = 258 +const R_AARCH64_ABS64 = 257 +const R_AARCH64_ADD_ABS_LO12_NC = 277 +const R_AARCH64_ADR_GOT_PAGE = 311 +const R_AARCH64_ADR_PREL_LO21 = 274 +const R_AARCH64_ADR_PREL_PG_HI21 = 275 +const R_AARCH64_ADR_PREL_PG_HI21_NC = 276 +const R_AARCH64_CALL26 = 283 +const R_AARCH64_CONDBR19 = 280 +const R_AARCH64_COPY = 1024 +const R_AARCH64_GLOB_DAT = 1025 +const R_AARCH64_GOTREL32 = 308 +const R_AARCH64_GOTREL64 = 307 +const R_AARCH64_GOT_LD_PREL19 = 309 +const R_AARCH64_JUMP26 = 282 +const R_AARCH64_JUMP_SLOT = 1026 +const R_AARCH64_LD64_GOTOFF_LO15 = 310 +const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +const R_AARCH64_LD64_GOT_LO12_NC = 312 +const R_AARCH64_LDST128_ABS_LO12_NC = 299 +const R_AARCH64_LDST16_ABS_LO12_NC = 284 +const R_AARCH64_LDST32_ABS_LO12_NC = 285 +const R_AARCH64_LDST64_ABS_LO12_NC = 286 +const R_AARCH64_LDST8_ABS_LO12_NC = 278 +const R_AARCH64_LD_PREL_LO19 = 273 +const R_AARCH64_MOVW_GOTOFF_G0 = 300 +const R_AARCH64_MOVW_GOTOFF_G0_NC = 301 +const R_AARCH64_MOVW_GOTOFF_G1 = 302 +const R_AARCH64_MOVW_GOTOFF_G1_NC = 303 +const R_AARCH64_MOVW_GOTOFF_G2 = 304 +const R_AARCH64_MOVW_GOTOFF_G2_NC = 305 +const R_AARCH64_MOVW_GOTOFF_G3 = 306 +const R_AARCH64_MOVW_PREL_G0 = 287 +const R_AARCH64_MOVW_PREL_G0_NC = 288 +const R_AARCH64_MOVW_PREL_G1 = 289 +const R_AARCH64_MOVW_PREL_G1_NC = 290 +const R_AARCH64_MOVW_PREL_G2 = 291 +const R_AARCH64_MOVW_PREL_G2_NC = 292 +const R_AARCH64_MOVW_PREL_G3 = 293 +const R_AARCH64_MOVW_SABS_G0 = 270 +const R_AARCH64_MOVW_SABS_G1 = 271 +const R_AARCH64_MOVW_SABS_G2 = 272 +const R_AARCH64_MOVW_UABS_G0 = 263 +const R_AARCH64_MOVW_UABS_G0_NC = 264 +const R_AARCH64_MOVW_UABS_G1 = 265 +const R_AARCH64_MOVW_UABS_G1_NC = 266 +const R_AARCH64_MOVW_UABS_G2 = 267 +const R_AARCH64_MOVW_UABS_G2_NC = 268 +const R_AARCH64_MOVW_UABS_G3 = 269 +const R_AARCH64_NONE = 0 +const R_AARCH64_P32_ABS32 = 1 +const R_AARCH64_P32_COPY = 180 +const R_AARCH64_P32_GLOB_DAT = 181 +const R_AARCH64_P32_IRELATIVE = 188 +const R_AARCH64_P32_JUMP_SLOT = 182 +const R_AARCH64_P32_RELATIVE = 183 +const R_AARCH64_P32_TLSDESC = 187 +const R_AARCH64_P32_TLS_DTPMOD = 184 +const R_AARCH64_P32_TLS_DTPREL = 185 +const R_AARCH64_P32_TLS_TPREL = 186 +const R_AARCH64_PREL16 = 262 +const R_AARCH64_PREL32 = 261 +const R_AARCH64_PREL64 = 260 +const R_AARCH64_RELATIVE = 1027 +const R_AARCH64_TLSDESC = 1031 +const R_AARCH64_TLSDESC_ADD = 568 +const R_AARCH64_TLSDESC_ADD_LO12 = 564 +const R_AARCH64_TLSDESC_ADR_PAGE21 = 562 +const R_AARCH64_TLSDESC_ADR_PREL21 = 561 +const R_AARCH64_TLSDESC_CALL = 569 +const R_AARCH64_TLSDESC_LD64_LO12 = 563 +const R_AARCH64_TLSDESC_LDR = 567 +const R_AARCH64_TLSDESC_LD_PREL19 = 560 +const R_AARCH64_TLSDESC_OFF_G0_NC = 566 +const R_AARCH64_TLSDESC_OFF_G1 = 565 +const R_AARCH64_TLSGD_ADD_LO12_NC = 514 +const R_AARCH64_TLSGD_ADR_PAGE21 = 513 +const R_AARCH64_TLSGD_ADR_PREL21 = 512 +const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +const R_AARCH64_TLSGD_MOVW_G1 = 515 +const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541 +const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542 +const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539 +const R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530 +const R_AARCH64_TLSLD_ADD_LO12_NC = 519 +const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +const R_AARCH64_TLSLD_ADR_PREL21 = 517 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532 +const R_AARCH64_TLSLD_LD_PREL19 = 522 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525 +const R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523 +const R_AARCH64_TLSLD_MOVW_G0_NC = 521 +const R_AARCH64_TLSLD_MOVW_G1 = 520 +const R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549 +const R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550 +const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553 +const R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547 +const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548 +const R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545 +const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546 +const R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544 +const R_AARCH64_TLS_DTPMOD = 1028 +const R_AARCH64_TLS_DTPMOD64 = 1028 +const R_AARCH64_TLS_DTPREL = 1029 +const R_AARCH64_TLS_DTPREL64 = 1029 +const R_AARCH64_TLS_TPREL = 1030 +const R_AARCH64_TLS_TPREL64 = 1030 +const R_AARCH64_TSTBR14 = 279 +const R_ALPHA_BRADDR = 7 +const R_ALPHA_COPY = 24 +const R_ALPHA_DTPMOD64 = 31 +const R_ALPHA_DTPREL16 = 36 +const R_ALPHA_DTPREL64 = 33 +const R_ALPHA_DTPRELHI = 34 +const R_ALPHA_DTPRELLO = 35 +const R_ALPHA_GLOB_DAT = 25 +const R_ALPHA_GOTDTPREL = 32 +const R_ALPHA_GOTTPREL = 37 +const R_ALPHA_GPDISP = 6 +const R_ALPHA_GPREL16 = 19 +const R_ALPHA_GPREL32 = 3 +const R_ALPHA_GPRELHIGH = 17 +const R_ALPHA_GPRELLOW = 18 +const R_ALPHA_HINT = 8 +const R_ALPHA_JMP_SLOT = 26 +const R_ALPHA_LITERAL = 4 +const R_ALPHA_LITUSE = 5 +const R_ALPHA_NONE = 0 +const R_ALPHA_NUM = 46 +const R_ALPHA_REFLONG = 1 +const R_ALPHA_REFQUAD = 2 +const R_ALPHA_RELATIVE = 27 +const R_ALPHA_SREL16 = 9 +const R_ALPHA_SREL32 = 10 +const R_ALPHA_SREL64 = 11 +const R_ALPHA_TLSGD = 29 +const R_ALPHA_TLS_GD_HI = 28 +const R_ALPHA_TLS_LDM = 30 +const R_ALPHA_TPREL16 = 41 +const R_ALPHA_TPREL64 = 38 +const R_ALPHA_TPRELHI = 39 +const R_ALPHA_TPRELLO = 40 +const R_ARM_ABS12 = 6 +const R_ARM_ABS16 = 5 +const R_ARM_ABS32 = 2 +const R_ARM_ABS32_NOI = 55 +const R_ARM_ABS8 = 8 +const R_ARM_ALU_PCREL_15_8 = 33 +const R_ARM_ALU_PCREL_23_15 = 34 +const R_ARM_ALU_PCREL_7_0 = 32 +const R_ARM_ALU_PC_G0 = 58 +const R_ARM_ALU_PC_G0_NC = 57 +const R_ARM_ALU_PC_G1 = 60 +const R_ARM_ALU_PC_G1_NC = 59 +const R_ARM_ALU_PC_G2 = 61 +const R_ARM_ALU_SBREL_19_12 = 36 +const R_ARM_ALU_SBREL_27_20 = 37 +const R_ARM_ALU_SB_G0 = 71 +const R_ARM_ALU_SB_G0_NC = 70 +const R_ARM_ALU_SB_G1 = 73 +const R_ARM_ALU_SB_G1_NC = 72 +const R_ARM_ALU_SB_G2 = 74 +const R_ARM_AMP_VCALL9 = 12 +const R_ARM_BASE_ABS = 31 +const R_ARM_CALL = 28 +const R_ARM_COPY = 20 +const R_ARM_GLOB_DAT = 21 +const R_ARM_GNU_VTENTRY = 100 +const R_ARM_GNU_VTINHERIT = 101 +const R_ARM_GOT32 = 26 +const R_ARM_GOTOFF = 24 +const R_ARM_GOTOFF12 = 98 +const R_ARM_GOTPC = 25 +const R_ARM_GOTRELAX = 99 +const R_ARM_GOT_ABS = 95 +const R_ARM_GOT_BREL12 = 97 +const R_ARM_GOT_PREL = 96 +const R_ARM_IRELATIVE = 160 +const R_ARM_JUMP24 = 29 +const R_ARM_JUMP_SLOT = 22 +const R_ARM_LDC_PC_G0 = 67 +const R_ARM_LDC_PC_G1 = 68 +const R_ARM_LDC_PC_G2 = 69 +const R_ARM_LDC_SB_G0 = 81 +const R_ARM_LDC_SB_G1 = 82 +const R_ARM_LDC_SB_G2 = 83 +const R_ARM_LDRS_PC_G0 = 64 +const R_ARM_LDRS_PC_G1 = 65 +const R_ARM_LDRS_PC_G2 = 66 +const R_ARM_LDRS_SB_G0 = 78 +const R_ARM_LDRS_SB_G1 = 79 +const R_ARM_LDRS_SB_G2 = 80 +const R_ARM_LDR_PC_G1 = 62 +const R_ARM_LDR_PC_G2 = 63 +const R_ARM_LDR_SBREL_11_0 = 35 +const R_ARM_LDR_SB_G0 = 75 +const R_ARM_LDR_SB_G1 = 76 +const R_ARM_LDR_SB_G2 = 77 +const R_ARM_ME_TOO = 128 +const R_ARM_MOVT_ABS = 44 +const R_ARM_MOVT_BREL = 85 +const R_ARM_MOVT_PREL = 46 +const R_ARM_MOVW_ABS_NC = 43 +const R_ARM_MOVW_BREL = 86 +const R_ARM_MOVW_BREL_NC = 84 +const R_ARM_MOVW_PREL_NC = 45 +const R_ARM_NONE = 0 +const R_ARM_NUM = 256 +const R_ARM_PC13 = 4 +const R_ARM_PC24 = 1 +const R_ARM_PLT32 = 27 +const R_ARM_PLT32_ABS = 94 +const R_ARM_PREL31 = 42 +const R_ARM_RABS22 = 253 +const R_ARM_RBASE = 255 +const R_ARM_REL32 = 3 +const R_ARM_REL32_NOI = 56 +const R_ARM_RELATIVE = 23 +const R_ARM_RPC24 = 254 +const R_ARM_RREL32 = 252 +const R_ARM_RSBREL32 = 250 +const R_ARM_RXPC25 = 249 +const R_ARM_SBREL31 = 39 +const R_ARM_SBREL32 = 9 +const R_ARM_TARGET1 = 38 +const R_ARM_TARGET2 = 41 +const R_ARM_THM_ABS5 = 7 +const R_ARM_THM_ALU_PREL_11_0 = 53 +const R_ARM_THM_GOT_BREL12 = 131 +const R_ARM_THM_JUMP19 = 51 +const R_ARM_THM_JUMP24 = 30 +const R_ARM_THM_JUMP6 = 52 +const R_ARM_THM_MOVT_ABS = 48 +const R_ARM_THM_MOVT_BREL = 88 +const R_ARM_THM_MOVT_PREL = 50 +const R_ARM_THM_MOVW_ABS_NC = 47 +const R_ARM_THM_MOVW_BREL = 89 +const R_ARM_THM_MOVW_BREL_NC = 87 +const R_ARM_THM_MOVW_PREL_NC = 49 +const R_ARM_THM_PC11 = 102 +const R_ARM_THM_PC12 = 54 +const R_ARM_THM_PC22 = 10 +const R_ARM_THM_PC8 = 11 +const R_ARM_THM_PC9 = 103 +const R_ARM_THM_RPC22 = 251 +const R_ARM_THM_SWI8 = 14 +const R_ARM_THM_TLS_CALL = 93 +const R_ARM_THM_TLS_DESCSEQ = 129 +const R_ARM_THM_TLS_DESCSEQ16 = 129 +const R_ARM_THM_TLS_DESCSEQ32 = 130 +const R_ARM_THM_XPC22 = 16 +const R_ARM_TLS_CALL = 91 +const R_ARM_TLS_DESC = 13 +const R_ARM_TLS_DESCSEQ = 92 +const R_ARM_TLS_DTPMOD32 = 17 +const R_ARM_TLS_DTPOFF32 = 18 +const R_ARM_TLS_GD32 = 104 +const R_ARM_TLS_GOTDESC = 90 +const R_ARM_TLS_IE12GP = 111 +const R_ARM_TLS_IE32 = 107 +const R_ARM_TLS_LDM32 = 105 +const R_ARM_TLS_LDO12 = 109 +const R_ARM_TLS_LDO32 = 106 +const R_ARM_TLS_LE12 = 110 +const R_ARM_TLS_LE32 = 108 +const R_ARM_TLS_TPOFF32 = 19 +const R_ARM_V4BX = 40 +const R_ARM_XPC25 = 15 +const R_BPF_MAP_FD = 1 +const R_BPF_NONE = 0 +const R_CKCORE_ADDR32 = 1 +const R_CKCORE_ADDRGOT = 17 +const R_CKCORE_ADDRGOT_HI16 = 36 +const R_CKCORE_ADDRGOT_LO16 = 37 +const R_CKCORE_ADDRPLT = 18 +const R_CKCORE_ADDRPLT_HI16 = 38 +const R_CKCORE_ADDRPLT_LO16 = 39 +const R_CKCORE_ADDR_HI16 = 24 +const R_CKCORE_ADDR_LO16 = 25 +const R_CKCORE_COPY = 10 +const R_CKCORE_DOFFSET_IMM18 = 44 +const R_CKCORE_DOFFSET_IMM18BY2 = 45 +const R_CKCORE_DOFFSET_IMM18BY4 = 46 +const R_CKCORE_DOFFSET_LO16 = 42 +const R_CKCORE_GLOB_DAT = 11 +const R_CKCORE_GOT12 = 30 +const R_CKCORE_GOT32 = 15 +const R_CKCORE_GOTOFF = 13 +const R_CKCORE_GOTOFF_HI16 = 28 +const R_CKCORE_GOTOFF_LO16 = 29 +const R_CKCORE_GOTPC = 14 +const R_CKCORE_GOTPC_HI16 = 26 +const R_CKCORE_GOTPC_LO16 = 27 +const R_CKCORE_GOT_HI16 = 31 +const R_CKCORE_GOT_IMM18BY4 = 48 +const R_CKCORE_GOT_LO16 = 32 +const R_CKCORE_JUMP_SLOT = 12 +const R_CKCORE_NONE = 0 +const R_CKCORE_PCREL32 = 5 +const R_CKCORE_PCRELIMM11BY2 = 3 +const R_CKCORE_PCRELIMM8BY4 = 2 +const R_CKCORE_PCRELJSR_IMM11BY2 = 6 +const R_CKCORE_PCREL_IMM10BY2 = 22 +const R_CKCORE_PCREL_IMM10BY4 = 23 +const R_CKCORE_PCREL_IMM16BY2 = 20 +const R_CKCORE_PCREL_IMM16BY4 = 21 +const R_CKCORE_PCREL_IMM18BY2 = 43 +const R_CKCORE_PCREL_IMM26BY2 = 19 +const R_CKCORE_PCREL_IMM7BY4 = 50 +const R_CKCORE_PCREL_JSR_IMM26BY2 = 40 +const R_CKCORE_PLT12 = 33 +const R_CKCORE_PLT32 = 16 +const R_CKCORE_PLT_HI16 = 34 +const R_CKCORE_PLT_IMM18BY4 = 49 +const R_CKCORE_PLT_LO16 = 35 +const R_CKCORE_RELATIVE = 9 +const R_CKCORE_TLS_DTPMOD32 = 56 +const R_CKCORE_TLS_DTPOFF32 = 57 +const R_CKCORE_TLS_GD32 = 53 +const R_CKCORE_TLS_IE32 = 52 +const R_CKCORE_TLS_LDM32 = 54 +const R_CKCORE_TLS_LDO32 = 55 +const R_CKCORE_TLS_LE32 = 51 +const R_CKCORE_TLS_TPOFF32 = 58 +const R_CKCORE_TOFFSET_LO16 = 41 +const R_CRIS_16 = 2 +const R_CRIS_16_GOT = 13 +const R_CRIS_16_GOTPLT = 15 +const R_CRIS_16_PCREL = 5 +const R_CRIS_32 = 3 +const R_CRIS_32_GOT = 14 +const R_CRIS_32_GOTPLT = 16 +const R_CRIS_32_GOTREL = 17 +const R_CRIS_32_PCREL = 6 +const R_CRIS_32_PLT_GOTREL = 18 +const R_CRIS_32_PLT_PCREL = 19 +const R_CRIS_8 = 1 +const R_CRIS_8_PCREL = 4 +const R_CRIS_COPY = 9 +const R_CRIS_GLOB_DAT = 10 +const R_CRIS_GNU_VTENTRY = 8 +const R_CRIS_GNU_VTINHERIT = 7 +const R_CRIS_JUMP_SLOT = 11 +const R_CRIS_NONE = 0 +const R_CRIS_NUM = 20 +const R_CRIS_RELATIVE = 12 +const R_IA64_COPY = 132 +const R_IA64_DIR32LSB = 37 +const R_IA64_DIR32MSB = 36 +const R_IA64_DIR64LSB = 39 +const R_IA64_DIR64MSB = 38 +const R_IA64_DTPMOD64LSB = 167 +const R_IA64_DTPMOD64MSB = 166 +const R_IA64_DTPREL14 = 177 +const R_IA64_DTPREL22 = 178 +const R_IA64_DTPREL32LSB = 181 +const R_IA64_DTPREL32MSB = 180 +const R_IA64_DTPREL64I = 179 +const R_IA64_DTPREL64LSB = 183 +const R_IA64_DTPREL64MSB = 182 +const R_IA64_FPTR32LSB = 69 +const R_IA64_FPTR32MSB = 68 +const R_IA64_FPTR64I = 67 +const R_IA64_FPTR64LSB = 71 +const R_IA64_FPTR64MSB = 70 +const R_IA64_GPREL22 = 42 +const R_IA64_GPREL32LSB = 45 +const R_IA64_GPREL32MSB = 44 +const R_IA64_GPREL64I = 43 +const R_IA64_GPREL64LSB = 47 +const R_IA64_GPREL64MSB = 46 +const R_IA64_IMM14 = 33 +const R_IA64_IMM22 = 34 +const R_IA64_IMM64 = 35 +const R_IA64_IPLTLSB = 129 +const R_IA64_IPLTMSB = 128 +const R_IA64_LDXMOV = 135 +const R_IA64_LTOFF22 = 50 +const R_IA64_LTOFF22X = 134 +const R_IA64_LTOFF64I = 51 +const R_IA64_LTOFF_DTPMOD22 = 170 +const R_IA64_LTOFF_DTPREL22 = 186 +const R_IA64_LTOFF_FPTR22 = 82 +const R_IA64_LTOFF_FPTR32LSB = 85 +const R_IA64_LTOFF_FPTR32MSB = 84 +const R_IA64_LTOFF_FPTR64I = 83 +const R_IA64_LTOFF_FPTR64LSB = 87 +const R_IA64_LTOFF_FPTR64MSB = 86 +const R_IA64_LTOFF_TPREL22 = 154 +const R_IA64_LTV32LSB = 117 +const R_IA64_LTV32MSB = 116 +const R_IA64_LTV64LSB = 119 +const R_IA64_LTV64MSB = 118 +const R_IA64_NONE = 0 +const R_IA64_PCREL21B = 73 +const R_IA64_PCREL21BI = 121 +const R_IA64_PCREL21F = 75 +const R_IA64_PCREL21M = 74 +const R_IA64_PCREL22 = 122 +const R_IA64_PCREL32LSB = 77 +const R_IA64_PCREL32MSB = 76 +const R_IA64_PCREL60B = 72 +const R_IA64_PCREL64I = 123 +const R_IA64_PCREL64LSB = 79 +const R_IA64_PCREL64MSB = 78 +const R_IA64_PLTOFF22 = 58 +const R_IA64_PLTOFF64I = 59 +const R_IA64_PLTOFF64LSB = 63 +const R_IA64_PLTOFF64MSB = 62 +const R_IA64_REL32LSB = 109 +const R_IA64_REL32MSB = 108 +const R_IA64_REL64LSB = 111 +const R_IA64_REL64MSB = 110 +const R_IA64_SECREL32LSB = 101 +const R_IA64_SECREL32MSB = 100 +const R_IA64_SECREL64LSB = 103 +const R_IA64_SECREL64MSB = 102 +const R_IA64_SEGREL32LSB = 93 +const R_IA64_SEGREL32MSB = 92 +const R_IA64_SEGREL64LSB = 95 +const R_IA64_SEGREL64MSB = 94 +const R_IA64_SUB = 133 +const R_IA64_TPREL14 = 145 +const R_IA64_TPREL22 = 146 +const R_IA64_TPREL64I = 147 +const R_IA64_TPREL64LSB = 151 +const R_IA64_TPREL64MSB = 150 +const R_LARCH_32 = 1 +const R_LARCH_32_PCREL = 99 +const R_LARCH_64 = 2 +const R_LARCH_ABS64_HI12 = 70 +const R_LARCH_ABS64_LO20 = 69 +const R_LARCH_ABS_HI20 = 67 +const R_LARCH_ABS_LO12 = 68 +const R_LARCH_ADD16 = 48 +const R_LARCH_ADD24 = 49 +const R_LARCH_ADD32 = 50 +const R_LARCH_ADD64 = 51 +const R_LARCH_ADD8 = 47 +const R_LARCH_B16 = 64 +const R_LARCH_B21 = 65 +const R_LARCH_B26 = 66 +const R_LARCH_COPY = 4 +const R_LARCH_GNU_VTENTRY = 58 +const R_LARCH_GNU_VTINHERIT = 57 +const R_LARCH_GOT64_HI12 = 82 +const R_LARCH_GOT64_LO20 = 81 +const R_LARCH_GOT64_PC_HI12 = 78 +const R_LARCH_GOT64_PC_LO20 = 77 +const R_LARCH_GOT_HI20 = 79 +const R_LARCH_GOT_LO12 = 80 +const R_LARCH_GOT_PC_HI20 = 75 +const R_LARCH_GOT_PC_LO12 = 76 +const R_LARCH_IRELATIVE = 12 +const R_LARCH_JUMP_SLOT = 5 +const R_LARCH_MARK_LA = 20 +const R_LARCH_MARK_PCREL = 21 +const R_LARCH_NONE = 0 +const R_LARCH_PCALA64_HI12 = 74 +const R_LARCH_PCALA64_LO20 = 73 +const R_LARCH_PCALA_HI20 = 71 +const R_LARCH_PCALA_LO12 = 72 +const R_LARCH_RELATIVE = 3 +const R_LARCH_RELAX = 100 +const R_LARCH_SOP_ADD = 35 +const R_LARCH_SOP_AND = 36 +const R_LARCH_SOP_ASSERT = 30 +const R_LARCH_SOP_IF_ELSE = 37 +const R_LARCH_SOP_NOT = 31 +const R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45 +const R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44 +const R_LARCH_SOP_POP_32_S_10_12 = 40 +const R_LARCH_SOP_POP_32_S_10_16 = 41 +const R_LARCH_SOP_POP_32_S_10_16_S2 = 42 +const R_LARCH_SOP_POP_32_S_10_5 = 38 +const R_LARCH_SOP_POP_32_S_5_20 = 43 +const R_LARCH_SOP_POP_32_U = 46 +const R_LARCH_SOP_POP_32_U_10_12 = 39 +const R_LARCH_SOP_PUSH_ABSOLUTE = 23 +const R_LARCH_SOP_PUSH_DUP = 24 +const R_LARCH_SOP_PUSH_GPREL = 25 +const R_LARCH_SOP_PUSH_PCREL = 22 +const R_LARCH_SOP_PUSH_PLT_PCREL = 29 +const R_LARCH_SOP_PUSH_TLS_GD = 28 +const R_LARCH_SOP_PUSH_TLS_GOT = 27 +const R_LARCH_SOP_PUSH_TLS_TPREL = 26 +const R_LARCH_SOP_SL = 33 +const R_LARCH_SOP_SR = 34 +const R_LARCH_SOP_SUB = 32 +const R_LARCH_SUB16 = 53 +const R_LARCH_SUB24 = 54 +const R_LARCH_SUB32 = 55 +const R_LARCH_SUB64 = 56 +const R_LARCH_SUB8 = 52 +const R_LARCH_TLS_DTPMOD32 = 6 +const R_LARCH_TLS_DTPMOD64 = 7 +const R_LARCH_TLS_DTPREL32 = 8 +const R_LARCH_TLS_DTPREL64 = 9 +const R_LARCH_TLS_GD_HI20 = 98 +const R_LARCH_TLS_GD_PC_HI20 = 97 +const R_LARCH_TLS_IE64_HI12 = 94 +const R_LARCH_TLS_IE64_LO20 = 93 +const R_LARCH_TLS_IE64_PC_HI12 = 90 +const R_LARCH_TLS_IE64_PC_LO20 = 89 +const R_LARCH_TLS_IE_HI20 = 91 +const R_LARCH_TLS_IE_LO12 = 92 +const R_LARCH_TLS_IE_PC_HI20 = 87 +const R_LARCH_TLS_IE_PC_LO12 = 88 +const R_LARCH_TLS_LD_HI20 = 96 +const R_LARCH_TLS_LD_PC_HI20 = 95 +const R_LARCH_TLS_LE64_HI12 = 86 +const R_LARCH_TLS_LE64_LO20 = 85 +const R_LARCH_TLS_LE_HI20 = 83 +const R_LARCH_TLS_LE_LO12 = 84 +const R_LARCH_TLS_TPREL32 = 10 +const R_LARCH_TLS_TPREL64 = 11 +const R_M32R_10_PCREL = 4 +const R_M32R_10_PCREL_RELA = 36 +const R_M32R_16 = 1 +const R_M32R_16_RELA = 33 +const R_M32R_18_PCREL = 5 +const R_M32R_18_PCREL_RELA = 37 +const R_M32R_24 = 3 +const R_M32R_24_RELA = 35 +const R_M32R_26_PCREL = 6 +const R_M32R_26_PCREL_RELA = 38 +const R_M32R_26_PLTREL = 49 +const R_M32R_32 = 2 +const R_M32R_32_RELA = 34 +const R_M32R_COPY = 50 +const R_M32R_GLOB_DAT = 51 +const R_M32R_GNU_VTENTRY = 12 +const R_M32R_GNU_VTINHERIT = 11 +const R_M32R_GOT16_HI_SLO = 57 +const R_M32R_GOT16_HI_ULO = 56 +const R_M32R_GOT16_LO = 58 +const R_M32R_GOT24 = 48 +const R_M32R_GOTOFF = 54 +const R_M32R_GOTOFF_HI_SLO = 63 +const R_M32R_GOTOFF_HI_ULO = 62 +const R_M32R_GOTOFF_LO = 64 +const R_M32R_GOTPC24 = 55 +const R_M32R_GOTPC_HI_SLO = 60 +const R_M32R_GOTPC_HI_ULO = 59 +const R_M32R_GOTPC_LO = 61 +const R_M32R_HI16_SLO = 8 +const R_M32R_HI16_SLO_RELA = 40 +const R_M32R_HI16_ULO = 7 +const R_M32R_HI16_ULO_RELA = 39 +const R_M32R_JMP_SLOT = 52 +const R_M32R_LO16 = 9 +const R_M32R_LO16_RELA = 41 +const R_M32R_NONE = 0 +const R_M32R_NUM = 256 +const R_M32R_REL32 = 45 +const R_M32R_RELATIVE = 53 +const R_M32R_RELA_GNU_VTENTRY = 44 +const R_M32R_RELA_GNU_VTINHERIT = 43 +const R_M32R_SDA16 = 10 +const R_M32R_SDA16_RELA = 42 +const R_MICROBLAZE_32 = 1 +const R_MICROBLAZE_32_LO = 6 +const R_MICROBLAZE_32_PCREL = 2 +const R_MICROBLAZE_32_PCREL_LO = 4 +const R_MICROBLAZE_32_SYM_OP_SYM = 10 +const R_MICROBLAZE_64 = 5 +const R_MICROBLAZE_64_NONE = 9 +const R_MICROBLAZE_64_PCREL = 3 +const R_MICROBLAZE_COPY = 21 +const R_MICROBLAZE_GLOB_DAT = 18 +const R_MICROBLAZE_GNU_VTENTRY = 12 +const R_MICROBLAZE_GNU_VTINHERIT = 11 +const R_MICROBLAZE_GOTOFF_32 = 20 +const R_MICROBLAZE_GOTOFF_64 = 19 +const R_MICROBLAZE_GOTPC_64 = 13 +const R_MICROBLAZE_GOT_64 = 14 +const R_MICROBLAZE_JUMP_SLOT = 17 +const R_MICROBLAZE_NONE = 0 +const R_MICROBLAZE_PLT_64 = 15 +const R_MICROBLAZE_REL = 16 +const R_MICROBLAZE_SRO32 = 7 +const R_MICROBLAZE_SRW32 = 8 +const R_MICROBLAZE_TLS = 22 +const R_MICROBLAZE_TLSDTPMOD32 = 25 +const R_MICROBLAZE_TLSDTPREL32 = 26 +const R_MICROBLAZE_TLSDTPREL64 = 27 +const R_MICROBLAZE_TLSGD = 23 +const R_MICROBLAZE_TLSGOTTPREL32 = 28 +const R_MICROBLAZE_TLSLD = 24 +const R_MICROBLAZE_TLSTPREL32 = 29 +const R_MIPS_16 = 1 +const R_MIPS_26 = 4 +const R_MIPS_32 = 2 +const R_MIPS_64 = 18 +const R_MIPS_ADD_IMMEDIATE = 34 +const R_MIPS_CALL16 = 11 +const R_MIPS_CALL_HI16 = 30 +const R_MIPS_CALL_LO16 = 31 +const R_MIPS_COPY = 126 +const R_MIPS_DELETE = 27 +const R_MIPS_GLOB_DAT = 51 +const R_MIPS_GOT16 = 9 +const R_MIPS_GOT_DISP = 19 +const R_MIPS_GOT_HI16 = 22 +const R_MIPS_GOT_LO16 = 23 +const R_MIPS_GOT_OFST = 21 +const R_MIPS_GOT_PAGE = 20 +const R_MIPS_GPREL16 = 7 +const R_MIPS_GPREL32 = 12 +const R_MIPS_HI16 = 5 +const R_MIPS_HIGHER = 28 +const R_MIPS_HIGHEST = 29 +const R_MIPS_INSERT_A = 25 +const R_MIPS_INSERT_B = 26 +const R_MIPS_JALR = 37 +const R_MIPS_JUMP_SLOT = 127 +const R_MIPS_LITERAL = 8 +const R_MIPS_LO16 = 6 +const R_MIPS_NONE = 0 +const R_MIPS_NUM = 128 +const R_MIPS_PC16 = 10 +const R_MIPS_PJUMP = 35 +const R_MIPS_REL16 = 33 +const R_MIPS_REL32 = 3 +const R_MIPS_RELGOT = 36 +const R_MIPS_SCN_DISP = 32 +const R_MIPS_SHIFT5 = 16 +const R_MIPS_SHIFT6 = 17 +const R_MIPS_SUB = 24 +const R_MIPS_TLS_DTPMOD32 = 38 +const R_MIPS_TLS_DTPMOD64 = 40 +const R_MIPS_TLS_DTPREL32 = 39 +const R_MIPS_TLS_DTPREL64 = 41 +const R_MIPS_TLS_DTPREL_HI16 = 44 +const R_MIPS_TLS_DTPREL_LO16 = 45 +const R_MIPS_TLS_GD = 42 +const R_MIPS_TLS_GOTTPREL = 46 +const R_MIPS_TLS_LDM = 43 +const R_MIPS_TLS_TPREL32 = 47 +const R_MIPS_TLS_TPREL64 = 48 +const R_MIPS_TLS_TPREL_HI16 = 49 +const R_MIPS_TLS_TPREL_LO16 = 50 +const R_MN10300_16 = 2 +const R_MN10300_24 = 9 +const R_MN10300_32 = 1 +const R_MN10300_8 = 3 +const R_MN10300_COPY = 20 +const R_MN10300_GLOB_DAT = 21 +const R_MN10300_GNU_VTENTRY = 8 +const R_MN10300_GNU_VTINHERIT = 7 +const R_MN10300_GOT16 = 19 +const R_MN10300_GOT24 = 18 +const R_MN10300_GOT32 = 17 +const R_MN10300_GOTOFF16 = 14 +const R_MN10300_GOTOFF24 = 13 +const R_MN10300_GOTOFF32 = 12 +const R_MN10300_GOTPC16 = 11 +const R_MN10300_GOTPC32 = 10 +const R_MN10300_JMP_SLOT = 22 +const R_MN10300_NONE = 0 +const R_MN10300_NUM = 24 +const R_MN10300_PCREL16 = 5 +const R_MN10300_PCREL32 = 4 +const R_MN10300_PCREL8 = 6 +const R_MN10300_PLT16 = 16 +const R_MN10300_PLT32 = 15 +const R_MN10300_RELATIVE = 23 +const R_NIOS2_ALIGN = 21 +const R_NIOS2_BFD_RELOC_16 = 13 +const R_NIOS2_BFD_RELOC_32 = 12 +const R_NIOS2_BFD_RELOC_8 = 14 +const R_NIOS2_CACHE_OPX = 6 +const R_NIOS2_CALL16 = 23 +const R_NIOS2_CALL26 = 4 +const R_NIOS2_CALL26_NOAT = 41 +const R_NIOS2_CALLR = 20 +const R_NIOS2_CALL_HA = 45 +const R_NIOS2_CALL_LO = 44 +const R_NIOS2_CJMP = 19 +const R_NIOS2_COPY = 36 +const R_NIOS2_GLOB_DAT = 37 +const R_NIOS2_GNU_VTENTRY = 17 +const R_NIOS2_GNU_VTINHERIT = 16 +const R_NIOS2_GOT16 = 22 +const R_NIOS2_GOTOFF = 40 +const R_NIOS2_GOTOFF_HA = 25 +const R_NIOS2_GOTOFF_LO = 24 +const R_NIOS2_GOT_HA = 43 +const R_NIOS2_GOT_LO = 42 +const R_NIOS2_GPREL = 15 +const R_NIOS2_HI16 = 9 +const R_NIOS2_HIADJ16 = 11 +const R_NIOS2_IMM5 = 5 +const R_NIOS2_IMM6 = 7 +const R_NIOS2_IMM8 = 8 +const R_NIOS2_JUMP_SLOT = 38 +const R_NIOS2_LO16 = 10 +const R_NIOS2_NONE = 0 +const R_NIOS2_PCREL16 = 3 +const R_NIOS2_PCREL_HA = 27 +const R_NIOS2_PCREL_LO = 26 +const R_NIOS2_RELATIVE = 39 +const R_NIOS2_S16 = 1 +const R_NIOS2_TLS_DTPMOD = 33 +const R_NIOS2_TLS_DTPREL = 34 +const R_NIOS2_TLS_GD16 = 28 +const R_NIOS2_TLS_IE16 = 31 +const R_NIOS2_TLS_LDM16 = 29 +const R_NIOS2_TLS_LDO16 = 30 +const R_NIOS2_TLS_LE16 = 32 +const R_NIOS2_TLS_TPREL = 35 +const R_NIOS2_U16 = 2 +const R_NIOS2_UJMP = 18 +const R_OR1K_16 = 2 +const R_OR1K_16_PCREL = 10 +const R_OR1K_32 = 1 +const R_OR1K_32_PCREL = 9 +const R_OR1K_8 = 3 +const R_OR1K_8_PCREL = 11 +const R_OR1K_COPY = 18 +const R_OR1K_GLOB_DAT = 19 +const R_OR1K_GNU_VTENTRY = 7 +const R_OR1K_GNU_VTINHERIT = 8 +const R_OR1K_GOT16 = 14 +const R_OR1K_GOTOFF_HI16 = 16 +const R_OR1K_GOTOFF_LO16 = 17 +const R_OR1K_GOTPC_HI16 = 12 +const R_OR1K_GOTPC_LO16 = 13 +const R_OR1K_HI_16_IN_INSN = 5 +const R_OR1K_INSN_REL_26 = 6 +const R_OR1K_JMP_SLOT = 20 +const R_OR1K_LO_16_IN_INSN = 4 +const R_OR1K_NONE = 0 +const R_OR1K_PLT26 = 15 +const R_OR1K_RELATIVE = 21 +const R_OR1K_TLS_DTPMOD = 34 +const R_OR1K_TLS_DTPOFF = 33 +const R_OR1K_TLS_GD_HI16 = 22 +const R_OR1K_TLS_GD_LO16 = 23 +const R_OR1K_TLS_IE_HI16 = 28 +const R_OR1K_TLS_IE_LO16 = 29 +const R_OR1K_TLS_LDM_HI16 = 24 +const R_OR1K_TLS_LDM_LO16 = 25 +const R_OR1K_TLS_LDO_HI16 = 26 +const R_OR1K_TLS_LDO_LO16 = 27 +const R_OR1K_TLS_LE_HI16 = 30 +const R_OR1K_TLS_LE_LO16 = 31 +const R_OR1K_TLS_TPOFF = 32 +const R_PARISC_COPY = 128 +const R_PARISC_DIR14DR = 84 +const R_PARISC_DIR14R = 6 +const R_PARISC_DIR14WR = 83 +const R_PARISC_DIR16DF = 87 +const R_PARISC_DIR16F = 85 +const R_PARISC_DIR16WF = 86 +const R_PARISC_DIR17F = 4 +const R_PARISC_DIR17R = 3 +const R_PARISC_DIR21L = 2 +const R_PARISC_DIR32 = 1 +const R_PARISC_DIR64 = 80 +const R_PARISC_DPREL14R = 22 +const R_PARISC_DPREL21L = 18 +const R_PARISC_EPLT = 130 +const R_PARISC_FPTR64 = 64 +const R_PARISC_GNU_VTENTRY = 232 +const R_PARISC_GNU_VTINHERIT = 233 +const R_PARISC_GPREL14DR = 92 +const R_PARISC_GPREL14R = 30 +const R_PARISC_GPREL14WR = 91 +const R_PARISC_GPREL16DF = 95 +const R_PARISC_GPREL16F = 93 +const R_PARISC_GPREL16WF = 94 +const R_PARISC_GPREL21L = 26 +const R_PARISC_GPREL64 = 88 +const R_PARISC_HIRESERVE = 255 +const R_PARISC_IPLT = 129 +const R_PARISC_LORESERVE = 128 +const R_PARISC_LTOFF14DR = 100 +const R_PARISC_LTOFF14R = 38 +const R_PARISC_LTOFF14WR = 99 +const R_PARISC_LTOFF16DF = 103 +const R_PARISC_LTOFF16F = 101 +const R_PARISC_LTOFF16WF = 102 +const R_PARISC_LTOFF21L = 34 +const R_PARISC_LTOFF64 = 96 +const R_PARISC_LTOFF_FPTR14DR = 124 +const R_PARISC_LTOFF_FPTR14R = 62 +const R_PARISC_LTOFF_FPTR14WR = 123 +const R_PARISC_LTOFF_FPTR16DF = 127 +const R_PARISC_LTOFF_FPTR16F = 125 +const R_PARISC_LTOFF_FPTR16WF = 126 +const R_PARISC_LTOFF_FPTR21L = 58 +const R_PARISC_LTOFF_FPTR32 = 57 +const R_PARISC_LTOFF_FPTR64 = 120 +const R_PARISC_LTOFF_TP14DR = 228 +const R_PARISC_LTOFF_TP14F = 167 +const R_PARISC_LTOFF_TP14R = 166 +const R_PARISC_LTOFF_TP14WR = 227 +const R_PARISC_LTOFF_TP16DF = 231 +const R_PARISC_LTOFF_TP16F = 229 +const R_PARISC_LTOFF_TP16WF = 230 +const R_PARISC_LTOFF_TP21L = 162 +const R_PARISC_LTOFF_TP64 = 224 +const R_PARISC_NONE = 0 +const R_PARISC_PCREL14DR = 76 +const R_PARISC_PCREL14R = 14 +const R_PARISC_PCREL14WR = 75 +const R_PARISC_PCREL16DF = 79 +const R_PARISC_PCREL16F = 77 +const R_PARISC_PCREL16WF = 78 +const R_PARISC_PCREL17F = 12 +const R_PARISC_PCREL17R = 11 +const R_PARISC_PCREL21L = 10 +const R_PARISC_PCREL22F = 74 +const R_PARISC_PCREL32 = 9 +const R_PARISC_PCREL64 = 72 +const R_PARISC_PLABEL14R = 70 +const R_PARISC_PLABEL21L = 66 +const R_PARISC_PLABEL32 = 65 +const R_PARISC_PLTOFF14DR = 116 +const R_PARISC_PLTOFF14R = 54 +const R_PARISC_PLTOFF14WR = 115 +const R_PARISC_PLTOFF16DF = 119 +const R_PARISC_PLTOFF16F = 117 +const R_PARISC_PLTOFF16WF = 118 +const R_PARISC_PLTOFF21L = 50 +const R_PARISC_SECREL32 = 41 +const R_PARISC_SECREL64 = 104 +const R_PARISC_SEGBASE = 48 +const R_PARISC_SEGREL32 = 49 +const R_PARISC_SEGREL64 = 112 +const R_PARISC_TLS_DTPMOD32 = 242 +const R_PARISC_TLS_DTPMOD64 = 243 +const R_PARISC_TLS_DTPOFF32 = 244 +const R_PARISC_TLS_DTPOFF64 = 245 +const R_PARISC_TLS_GD14R = 235 +const R_PARISC_TLS_GD21L = 234 +const R_PARISC_TLS_GDCALL = 236 +const R_PARISC_TLS_IE14R = 166 +const R_PARISC_TLS_IE21L = 162 +const R_PARISC_TLS_LDM14R = 238 +const R_PARISC_TLS_LDM21L = 237 +const R_PARISC_TLS_LDMCALL = 239 +const R_PARISC_TLS_LDO14R = 241 +const R_PARISC_TLS_LDO21L = 240 +const R_PARISC_TLS_LE14R = 158 +const R_PARISC_TLS_LE21L = 154 +const R_PARISC_TLS_TPREL32 = 153 +const R_PARISC_TLS_TPREL64 = 216 +const R_PARISC_TPREL14DR = 220 +const R_PARISC_TPREL14R = 158 +const R_PARISC_TPREL14WR = 219 +const R_PARISC_TPREL16DF = 223 +const R_PARISC_TPREL16F = 221 +const R_PARISC_TPREL16WF = 222 +const R_PARISC_TPREL21L = 154 +const R_PARISC_TPREL32 = 153 +const R_PARISC_TPREL64 = 216 +const R_PPC64_ADDR14 = 7 +const R_PPC64_ADDR14_BRNTAKEN = 9 +const R_PPC64_ADDR14_BRTAKEN = 8 +const R_PPC64_ADDR16 = 3 +const R_PPC64_ADDR16_DS = 56 +const R_PPC64_ADDR16_HA = 6 +const R_PPC64_ADDR16_HI = 5 +const R_PPC64_ADDR16_HIGH = 110 +const R_PPC64_ADDR16_HIGHA = 111 +const R_PPC64_ADDR16_HIGHER = 39 +const R_PPC64_ADDR16_HIGHERA = 40 +const R_PPC64_ADDR16_HIGHEST = 41 +const R_PPC64_ADDR16_HIGHESTA = 42 +const R_PPC64_ADDR16_LO = 4 +const R_PPC64_ADDR16_LO_DS = 57 +const R_PPC64_ADDR24 = 2 +const R_PPC64_ADDR30 = 37 +const R_PPC64_ADDR32 = 1 +const R_PPC64_ADDR64 = 38 +const R_PPC64_COPY = 19 +const R_PPC64_DTPMOD64 = 68 +const R_PPC64_DTPREL16 = 74 +const R_PPC64_DTPREL16_DS = 101 +const R_PPC64_DTPREL16_HA = 77 +const R_PPC64_DTPREL16_HI = 76 +const R_PPC64_DTPREL16_HIGH = 114 +const R_PPC64_DTPREL16_HIGHA = 115 +const R_PPC64_DTPREL16_HIGHER = 103 +const R_PPC64_DTPREL16_HIGHERA = 104 +const R_PPC64_DTPREL16_HIGHEST = 105 +const R_PPC64_DTPREL16_HIGHESTA = 106 +const R_PPC64_DTPREL16_LO = 75 +const R_PPC64_DTPREL16_LO_DS = 102 +const R_PPC64_DTPREL64 = 78 +const R_PPC64_GLOB_DAT = 20 +const R_PPC64_GOT16 = 14 +const R_PPC64_GOT16_DS = 58 +const R_PPC64_GOT16_HA = 17 +const R_PPC64_GOT16_HI = 16 +const R_PPC64_GOT16_LO = 15 +const R_PPC64_GOT16_LO_DS = 59 +const R_PPC64_GOT_DTPREL16_DS = 91 +const R_PPC64_GOT_DTPREL16_HA = 94 +const R_PPC64_GOT_DTPREL16_HI = 93 +const R_PPC64_GOT_DTPREL16_LO_DS = 92 +const R_PPC64_GOT_TLSGD16 = 79 +const R_PPC64_GOT_TLSGD16_HA = 82 +const R_PPC64_GOT_TLSGD16_HI = 81 +const R_PPC64_GOT_TLSGD16_LO = 80 +const R_PPC64_GOT_TLSLD16 = 83 +const R_PPC64_GOT_TLSLD16_HA = 86 +const R_PPC64_GOT_TLSLD16_HI = 85 +const R_PPC64_GOT_TLSLD16_LO = 84 +const R_PPC64_GOT_TPREL16_DS = 87 +const R_PPC64_GOT_TPREL16_HA = 90 +const R_PPC64_GOT_TPREL16_HI = 89 +const R_PPC64_GOT_TPREL16_LO_DS = 88 +const R_PPC64_IRELATIVE = 248 +const R_PPC64_JMP_IREL = 247 +const R_PPC64_JMP_SLOT = 21 +const R_PPC64_NONE = 0 +const R_PPC64_PLT16_HA = 31 +const R_PPC64_PLT16_HI = 30 +const R_PPC64_PLT16_LO = 29 +const R_PPC64_PLT16_LO_DS = 60 +const R_PPC64_PLT32 = 27 +const R_PPC64_PLT64 = 45 +const R_PPC64_PLTGOT16 = 52 +const R_PPC64_PLTGOT16_DS = 65 +const R_PPC64_PLTGOT16_HA = 55 +const R_PPC64_PLTGOT16_HI = 54 +const R_PPC64_PLTGOT16_LO = 53 +const R_PPC64_PLTGOT16_LO_DS = 66 +const R_PPC64_PLTREL32 = 28 +const R_PPC64_PLTREL64 = 46 +const R_PPC64_REL14 = 11 +const R_PPC64_REL14_BRNTAKEN = 13 +const R_PPC64_REL14_BRTAKEN = 12 +const R_PPC64_REL16 = 249 +const R_PPC64_REL16_HA = 252 +const R_PPC64_REL16_HI = 251 +const R_PPC64_REL16_LO = 250 +const R_PPC64_REL24 = 10 +const R_PPC64_REL32 = 26 +const R_PPC64_REL64 = 44 +const R_PPC64_RELATIVE = 22 +const R_PPC64_SECTOFF = 33 +const R_PPC64_SECTOFF_DS = 61 +const R_PPC64_SECTOFF_HA = 36 +const R_PPC64_SECTOFF_HI = 35 +const R_PPC64_SECTOFF_LO = 34 +const R_PPC64_SECTOFF_LO_DS = 62 +const R_PPC64_TLS = 67 +const R_PPC64_TLSGD = 107 +const R_PPC64_TLSLD = 108 +const R_PPC64_TOC = 51 +const R_PPC64_TOC16 = 47 +const R_PPC64_TOC16_DS = 63 +const R_PPC64_TOC16_HA = 50 +const R_PPC64_TOC16_HI = 49 +const R_PPC64_TOC16_LO = 48 +const R_PPC64_TOC16_LO_DS = 64 +const R_PPC64_TOCSAVE = 109 +const R_PPC64_TPREL16 = 69 +const R_PPC64_TPREL16_DS = 95 +const R_PPC64_TPREL16_HA = 72 +const R_PPC64_TPREL16_HI = 71 +const R_PPC64_TPREL16_HIGH = 112 +const R_PPC64_TPREL16_HIGHA = 113 +const R_PPC64_TPREL16_HIGHER = 97 +const R_PPC64_TPREL16_HIGHERA = 98 +const R_PPC64_TPREL16_HIGHEST = 99 +const R_PPC64_TPREL16_HIGHESTA = 100 +const R_PPC64_TPREL16_LO = 70 +const R_PPC64_TPREL16_LO_DS = 96 +const R_PPC64_TPREL64 = 73 +const R_PPC64_UADDR16 = 25 +const R_PPC64_UADDR32 = 24 +const R_PPC64_UADDR64 = 43 +const R_PPC_ADDR14 = 7 +const R_PPC_ADDR14_BRNTAKEN = 9 +const R_PPC_ADDR14_BRTAKEN = 8 +const R_PPC_ADDR16 = 3 +const R_PPC_ADDR16_HA = 6 +const R_PPC_ADDR16_HI = 5 +const R_PPC_ADDR16_LO = 4 +const R_PPC_ADDR24 = 2 +const R_PPC_ADDR32 = 1 +const R_PPC_COPY = 19 +const R_PPC_DIAB_RELSDA_HA = 185 +const R_PPC_DIAB_RELSDA_HI = 184 +const R_PPC_DIAB_RELSDA_LO = 183 +const R_PPC_DIAB_SDA21_HA = 182 +const R_PPC_DIAB_SDA21_HI = 181 +const R_PPC_DIAB_SDA21_LO = 180 +const R_PPC_DTPMOD32 = 68 +const R_PPC_DTPREL16 = 74 +const R_PPC_DTPREL16_HA = 77 +const R_PPC_DTPREL16_HI = 76 +const R_PPC_DTPREL16_LO = 75 +const R_PPC_DTPREL32 = 78 +const R_PPC_EMB_BIT_FLD = 115 +const R_PPC_EMB_MRKREF = 110 +const R_PPC_EMB_NADDR16 = 102 +const R_PPC_EMB_NADDR16_HA = 105 +const R_PPC_EMB_NADDR16_HI = 104 +const R_PPC_EMB_NADDR16_LO = 103 +const R_PPC_EMB_NADDR32 = 101 +const R_PPC_EMB_RELSDA = 116 +const R_PPC_EMB_RELSEC16 = 111 +const R_PPC_EMB_RELST_HA = 114 +const R_PPC_EMB_RELST_HI = 113 +const R_PPC_EMB_RELST_LO = 112 +const R_PPC_EMB_SDA21 = 109 +const R_PPC_EMB_SDA2I16 = 107 +const R_PPC_EMB_SDA2REL = 108 +const R_PPC_EMB_SDAI16 = 106 +const R_PPC_GLOB_DAT = 20 +const R_PPC_GOT16 = 14 +const R_PPC_GOT16_HA = 17 +const R_PPC_GOT16_HI = 16 +const R_PPC_GOT16_LO = 15 +const R_PPC_GOT_DTPREL16 = 91 +const R_PPC_GOT_DTPREL16_HA = 94 +const R_PPC_GOT_DTPREL16_HI = 93 +const R_PPC_GOT_DTPREL16_LO = 92 +const R_PPC_GOT_TLSGD16 = 79 +const R_PPC_GOT_TLSGD16_HA = 82 +const R_PPC_GOT_TLSGD16_HI = 81 +const R_PPC_GOT_TLSGD16_LO = 80 +const R_PPC_GOT_TLSLD16 = 83 +const R_PPC_GOT_TLSLD16_HA = 86 +const R_PPC_GOT_TLSLD16_HI = 85 +const R_PPC_GOT_TLSLD16_LO = 84 +const R_PPC_GOT_TPREL16 = 87 +const R_PPC_GOT_TPREL16_HA = 90 +const R_PPC_GOT_TPREL16_HI = 89 +const R_PPC_GOT_TPREL16_LO = 88 +const R_PPC_IRELATIVE = 248 +const R_PPC_JMP_SLOT = 21 +const R_PPC_LOCAL24PC = 23 +const R_PPC_NONE = 0 +const R_PPC_PLT16_HA = 31 +const R_PPC_PLT16_HI = 30 +const R_PPC_PLT16_LO = 29 +const R_PPC_PLT32 = 27 +const R_PPC_PLTREL24 = 18 +const R_PPC_PLTREL32 = 28 +const R_PPC_REL14 = 11 +const R_PPC_REL14_BRNTAKEN = 13 +const R_PPC_REL14_BRTAKEN = 12 +const R_PPC_REL16 = 249 +const R_PPC_REL16_HA = 252 +const R_PPC_REL16_HI = 251 +const R_PPC_REL16_LO = 250 +const R_PPC_REL24 = 10 +const R_PPC_REL32 = 26 +const R_PPC_RELATIVE = 22 +const R_PPC_SDAREL16 = 32 +const R_PPC_SECTOFF = 33 +const R_PPC_SECTOFF_HA = 36 +const R_PPC_SECTOFF_HI = 35 +const R_PPC_SECTOFF_LO = 34 +const R_PPC_TLS = 67 +const R_PPC_TLSGD = 95 +const R_PPC_TLSLD = 96 +const R_PPC_TOC16 = 255 +const R_PPC_TPREL16 = 69 +const R_PPC_TPREL16_HA = 72 +const R_PPC_TPREL16_HI = 71 +const R_PPC_TPREL16_LO = 70 +const R_PPC_TPREL32 = 73 +const R_PPC_UADDR16 = 25 +const R_PPC_UADDR32 = 24 +const R_RISCV_32 = 1 +const R_RISCV_32_PCREL = 57 +const R_RISCV_64 = 2 +const R_RISCV_ADD16 = 34 +const R_RISCV_ADD32 = 35 +const R_RISCV_ADD64 = 36 +const R_RISCV_ADD8 = 33 +const R_RISCV_ALIGN = 43 +const R_RISCV_BRANCH = 16 +const R_RISCV_CALL = 18 +const R_RISCV_CALL_PLT = 19 +const R_RISCV_COPY = 4 +const R_RISCV_GOT32_PCREL = 41 +const R_RISCV_GOT_HI20 = 20 +const R_RISCV_HI20 = 26 +const R_RISCV_IRELATIVE = 58 +const R_RISCV_JAL = 17 +const R_RISCV_JUMP_SLOT = 5 +const R_RISCV_LO12_I = 27 +const R_RISCV_LO12_S = 28 +const R_RISCV_NONE = 0 +const R_RISCV_PCREL_HI20 = 23 +const R_RISCV_PCREL_LO12_I = 24 +const R_RISCV_PCREL_LO12_S = 25 +const R_RISCV_PLT32 = 59 +const R_RISCV_RELATIVE = 3 +const R_RISCV_RELAX = 51 +const R_RISCV_RVC_BRANCH = 44 +const R_RISCV_RVC_JUMP = 45 +const R_RISCV_RVC_LUI = 46 +const R_RISCV_SET16 = 55 +const R_RISCV_SET32 = 56 +const R_RISCV_SET6 = 53 +const R_RISCV_SET8 = 54 +const R_RISCV_SET_ULEB128 = 60 +const R_RISCV_SUB16 = 38 +const R_RISCV_SUB32 = 39 +const R_RISCV_SUB6 = 52 +const R_RISCV_SUB64 = 40 +const R_RISCV_SUB8 = 37 +const R_RISCV_SUB_ULEB128 = 61 +const R_RISCV_TLSDESC = 12 +const R_RISCV_TLSDESC_ADD_LO12 = 64 +const R_RISCV_TLSDESC_CALL = 65 +const R_RISCV_TLSDESC_HI20 = 62 +const R_RISCV_TLSDESC_LOAD_LO12 = 63 +const R_RISCV_TLS_DTPMOD32 = 6 +const R_RISCV_TLS_DTPMOD64 = 7 +const R_RISCV_TLS_DTPREL32 = 8 +const R_RISCV_TLS_DTPREL64 = 9 +const R_RISCV_TLS_GD_HI20 = 22 +const R_RISCV_TLS_GOT_HI20 = 21 +const R_RISCV_TLS_TPREL32 = 10 +const R_RISCV_TLS_TPREL64 = 11 +const R_RISCV_TPREL_ADD = 32 +const R_RISCV_TPREL_HI20 = 29 +const R_RISCV_TPREL_LO12_I = 30 +const R_RISCV_TPREL_LO12_S = 31 +const R_SH_ALIGN = 29 +const R_SH_CODE = 30 +const R_SH_COPY = 162 +const R_SH_COUNT = 28 +const R_SH_DATA = 31 +const R_SH_DIR32 = 1 +const R_SH_DIR8BP = 7 +const R_SH_DIR8L = 9 +const R_SH_DIR8W = 8 +const R_SH_DIR8WPL = 5 +const R_SH_DIR8WPN = 3 +const R_SH_DIR8WPZ = 6 +const R_SH_FUNCDESC = 207 +const R_SH_FUNCDESC_VALUE = 208 +const R_SH_GLOB_DAT = 163 +const R_SH_GNU_VTENTRY = 35 +const R_SH_GNU_VTINHERIT = 34 +const R_SH_GOT20 = 201 +const R_SH_GOT32 = 160 +const R_SH_GOTFUNCDESC = 203 +const R_SH_GOTFUNCDEST20 = 204 +const R_SH_GOTOFF = 166 +const R_SH_GOTOFF20 = 202 +const R_SH_GOTOFFFUNCDESC = 205 +const R_SH_GOTOFFFUNCDEST20 = 206 +const R_SH_GOTPC = 167 +const R_SH_IND12W = 4 +const R_SH_JMP_SLOT = 164 +const R_SH_LABEL = 32 +const R_SH_NONE = 0 +const R_SH_NUM = 256 +const R_SH_PLT32 = 161 +const R_SH_REL32 = 2 +const R_SH_RELATIVE = 165 +const R_SH_SWITCH16 = 25 +const R_SH_SWITCH32 = 26 +const R_SH_SWITCH8 = 33 +const R_SH_TLS_DTPMOD32 = 149 +const R_SH_TLS_DTPOFF32 = 150 +const R_SH_TLS_GD_32 = 144 +const R_SH_TLS_IE_32 = 147 +const R_SH_TLS_LDO_32 = 146 +const R_SH_TLS_LD_32 = 145 +const R_SH_TLS_LE_32 = 148 +const R_SH_TLS_TPOFF32 = 151 +const R_SH_USES = 27 +const R_SPARC_10 = 30 +const R_SPARC_11 = 31 +const R_SPARC_13 = 11 +const R_SPARC_16 = 2 +const R_SPARC_22 = 10 +const R_SPARC_32 = 3 +const R_SPARC_5 = 44 +const R_SPARC_6 = 45 +const R_SPARC_64 = 32 +const R_SPARC_7 = 43 +const R_SPARC_8 = 1 +const R_SPARC_COPY = 19 +const R_SPARC_DISP16 = 5 +const R_SPARC_DISP32 = 6 +const R_SPARC_DISP64 = 46 +const R_SPARC_DISP8 = 4 +const R_SPARC_GLOB_DAT = 20 +const R_SPARC_GLOB_JMP = 42 +const R_SPARC_GNU_VTENTRY = 251 +const R_SPARC_GNU_VTINHERIT = 250 +const R_SPARC_GOT10 = 13 +const R_SPARC_GOT13 = 14 +const R_SPARC_GOT22 = 15 +const R_SPARC_GOTDATA_HIX22 = 80 +const R_SPARC_GOTDATA_LOX10 = 81 +const R_SPARC_GOTDATA_OP = 84 +const R_SPARC_GOTDATA_OP_HIX22 = 82 +const R_SPARC_GOTDATA_OP_LOX10 = 83 +const R_SPARC_H34 = 85 +const R_SPARC_H44 = 50 +const R_SPARC_HH22 = 34 +const R_SPARC_HI22 = 9 +const R_SPARC_HIPLT22 = 25 +const R_SPARC_HIX22 = 48 +const R_SPARC_HM10 = 35 +const R_SPARC_JMP_SLOT = 21 +const R_SPARC_L44 = 52 +const R_SPARC_LM22 = 36 +const R_SPARC_LO10 = 12 +const R_SPARC_LOPLT10 = 26 +const R_SPARC_LOX10 = 49 +const R_SPARC_M44 = 51 +const R_SPARC_NONE = 0 +const R_SPARC_NUM = 253 +const R_SPARC_OLO10 = 33 +const R_SPARC_PC10 = 16 +const R_SPARC_PC22 = 17 +const R_SPARC_PCPLT10 = 29 +const R_SPARC_PCPLT22 = 28 +const R_SPARC_PCPLT32 = 27 +const R_SPARC_PC_HH22 = 37 +const R_SPARC_PC_HM10 = 38 +const R_SPARC_PC_LM22 = 39 +const R_SPARC_PLT32 = 24 +const R_SPARC_PLT64 = 47 +const R_SPARC_REGISTER = 53 +const R_SPARC_RELATIVE = 22 +const R_SPARC_REV32 = 252 +const R_SPARC_SIZE32 = 86 +const R_SPARC_SIZE64 = 87 +const R_SPARC_TLS_DTPMOD32 = 74 +const R_SPARC_TLS_DTPMOD64 = 75 +const R_SPARC_TLS_DTPOFF32 = 76 +const R_SPARC_TLS_DTPOFF64 = 77 +const R_SPARC_TLS_GD_ADD = 58 +const R_SPARC_TLS_GD_CALL = 59 +const R_SPARC_TLS_GD_HI22 = 56 +const R_SPARC_TLS_GD_LO10 = 57 +const R_SPARC_TLS_IE_ADD = 71 +const R_SPARC_TLS_IE_HI22 = 67 +const R_SPARC_TLS_IE_LD = 69 +const R_SPARC_TLS_IE_LDX = 70 +const R_SPARC_TLS_IE_LO10 = 68 +const R_SPARC_TLS_LDM_ADD = 62 +const R_SPARC_TLS_LDM_CALL = 63 +const R_SPARC_TLS_LDM_HI22 = 60 +const R_SPARC_TLS_LDM_LO10 = 61 +const R_SPARC_TLS_LDO_ADD = 66 +const R_SPARC_TLS_LDO_HIX22 = 64 +const R_SPARC_TLS_LDO_LOX10 = 65 +const R_SPARC_TLS_LE_HIX22 = 72 +const R_SPARC_TLS_LE_LOX10 = 73 +const R_SPARC_TLS_TPOFF32 = 78 +const R_SPARC_TLS_TPOFF64 = 79 +const R_SPARC_UA16 = 55 +const R_SPARC_UA32 = 23 +const R_SPARC_UA64 = 54 +const R_SPARC_WDISP16 = 40 +const R_SPARC_WDISP19 = 41 +const R_SPARC_WDISP22 = 8 +const R_SPARC_WDISP30 = 7 +const R_SPARC_WPLT30 = 18 +const R_X86_64_16 = 12 +const R_X86_64_32 = 10 +const R_X86_64_32S = 11 +const R_X86_64_64 = 1 +const R_X86_64_8 = 14 +const R_X86_64_COPY = 5 +const R_X86_64_DTPMOD64 = 16 +const R_X86_64_DTPOFF32 = 21 +const R_X86_64_DTPOFF64 = 17 +const R_X86_64_GLOB_DAT = 6 +const R_X86_64_GOT32 = 3 +const R_X86_64_GOT64 = 27 +const R_X86_64_GOTOFF64 = 25 +const R_X86_64_GOTPC32 = 26 +const R_X86_64_GOTPC32_TLSDESC = 34 +const R_X86_64_GOTPC64 = 29 +const R_X86_64_GOTPCREL = 9 +const R_X86_64_GOTPCREL64 = 28 +const R_X86_64_GOTPCRELX = 41 +const R_X86_64_GOTPLT64 = 30 +const R_X86_64_GOTTPOFF = 22 +const R_X86_64_IRELATIVE = 37 +const R_X86_64_JUMP_SLOT = 7 +const R_X86_64_NONE = 0 +const R_X86_64_NUM = 43 +const R_X86_64_PC16 = 13 +const R_X86_64_PC32 = 2 +const R_X86_64_PC64 = 24 +const R_X86_64_PC8 = 15 +const R_X86_64_PLT32 = 4 +const R_X86_64_PLTOFF64 = 31 +const R_X86_64_RELATIVE = 8 +const R_X86_64_RELATIVE64 = 38 +const R_X86_64_REX_GOTPCRELX = 42 +const R_X86_64_SIZE32 = 32 +const R_X86_64_SIZE64 = 33 +const R_X86_64_TLSDESC = 36 +const R_X86_64_TLSDESC_CALL = 35 +const R_X86_64_TLSGD = 19 +const R_X86_64_TLSLD = 20 +const R_X86_64_TPOFF32 = 23 +const R_X86_64_TPOFF64 = 18 +const SA_EXPOSE_TAGBITS = 2048 +const SA_NOCLDSTOP = 1 +const SA_NOCLDWAIT = 2 +const SA_NODEFER = 1073741824 +const SA_ONSTACK = 134217728 +const SA_RESETHAND = 2147483648 +const SA_RESTART = 268435456 +const SA_RESTORER = 67108864 +const SA_SIGINFO = 4 +const SA_UNSUPPORTED = 1024 +const SCM_TIMESTAMPING_OLD = 37 +const SCM_TIMESTAMPNS_OLD = 35 +const SCM_TIMESTAMP_OLD = 29 +const SEGV_ACCERR = 2 +const SEGV_BNDERR = 3 +const SEGV_MAPERR = 1 +const SEGV_MTEAERR = 8 +const SEGV_MTESERR = 9 +const SEGV_PKUERR = 4 +const SELFMAG = 4 +const SHF_ALLOC = 2 +const SHF_ALPHA_GPREL = 268435456 +const SHF_ARM_COMDEF = 2147483648 +const SHF_ARM_ENTRYSECT = 268435456 +const SHF_COMPRESSED = 2048 +const SHF_EXCLUDE = 2147483648 +const SHF_EXECINSTR = 4 +const SHF_GROUP = 512 +const SHF_IA_64_NORECOV = 536870912 +const SHF_IA_64_SHORT = 268435456 +const SHF_INFO_LINK = 64 +const SHF_LINK_ORDER = 128 +const SHF_MASKOS = 267386880 +const SHF_MASKPROC = 4026531840 +const SHF_MERGE = 16 +const SHF_MIPS_ADDR = 1073741824 +const SHF_MIPS_GPREL = 268435456 +const SHF_MIPS_LOCAL = 67108864 +const SHF_MIPS_MERGE = 536870912 +const SHF_MIPS_NAMES = 33554432 +const SHF_MIPS_NODUPE = 16777216 +const SHF_MIPS_NOSTRIP = 134217728 +const SHF_MIPS_STRINGS = 2147483648 +const SHF_ORDERED = 1073741824 +const SHF_OS_NONCONFORMING = 256 +const SHF_PARISC_HUGE = 1073741824 +const SHF_PARISC_SBP = 2147483648 +const SHF_PARISC_SHORT = 536870912 +const SHF_STRINGS = 32 +const SHF_TLS = 1024 +const SHF_WRITE = 1 +const SHN_ABS = 65521 +const SHN_AFTER = 65281 +const SHN_BEFORE = 65280 +const SHN_COMMON = 65522 +const SHN_HIOS = 65343 +const SHN_HIPROC = 65311 +const SHN_HIRESERVE = 65535 +const SHN_LOOS = 65312 +const SHN_LOPROC = 65280 +const SHN_LORESERVE = 65280 +const SHN_MIPS_ACOMMON = 65280 +const SHN_MIPS_DATA = 65282 +const SHN_MIPS_SCOMMON = 65283 +const SHN_MIPS_SUNDEFINED = 65284 +const SHN_MIPS_TEXT = 65281 +const SHN_PARISC_ANSI_COMMON = 65280 +const SHN_PARISC_HUGE_COMMON = 65281 +const SHN_UNDEF = 0 +const SHN_XINDEX = 65535 +const SHT_ALPHA_DEBUG = 1879048193 +const SHT_ALPHA_REGINFO = 1879048194 +const SHT_ARM_ATTRIBUTES = 1879048195 +const SHT_ARM_EXIDX = 1879048193 +const SHT_ARM_PREEMPTMAP = 1879048194 +const SHT_CHECKSUM = 1879048184 +const SHT_DYNAMIC = 6 +const SHT_DYNSYM = 11 +const SHT_FINI_ARRAY = 15 +const SHT_GNU_ATTRIBUTES = 1879048181 +const SHT_GNU_HASH = 1879048182 +const SHT_GNU_LIBLIST = 1879048183 +const SHT_GNU_verdef = 1879048189 +const SHT_GNU_verneed = 1879048190 +const SHT_GNU_versym = 1879048191 +const SHT_GROUP = 17 +const SHT_HASH = 5 +const SHT_HIOS = 1879048191 +const SHT_HIPROC = 2147483647 +const SHT_HISUNW = 1879048191 +const SHT_HIUSER = 2415919103 +const SHT_IA_64_EXT = 1879048192 +const SHT_IA_64_UNWIND = 1879048193 +const SHT_INIT_ARRAY = 14 +const SHT_LOOS = 1610612736 +const SHT_LOPROC = 1879048192 +const SHT_LOSUNW = 1879048186 +const SHT_LOUSER = 2147483648 +const SHT_MIPS_AUXSYM = 1879048214 +const SHT_MIPS_CONFLICT = 1879048194 +const SHT_MIPS_CONTENT = 1879048204 +const SHT_MIPS_DEBUG = 1879048197 +const SHT_MIPS_DELTACLASS = 1879048221 +const SHT_MIPS_DELTADECL = 1879048223 +const SHT_MIPS_DELTAINST = 1879048220 +const SHT_MIPS_DELTASYM = 1879048219 +const SHT_MIPS_DENSE = 1879048211 +const SHT_MIPS_DWARF = 1879048222 +const SHT_MIPS_EH_REGION = 1879048231 +const SHT_MIPS_EVENTS = 1879048225 +const SHT_MIPS_EXTSYM = 1879048210 +const SHT_MIPS_FDESC = 1879048209 +const SHT_MIPS_GPTAB = 1879048195 +const SHT_MIPS_IFACE = 1879048203 +const SHT_MIPS_LIBLIST = 1879048192 +const SHT_MIPS_LINE = 1879048217 +const SHT_MIPS_LOCSTR = 1879048216 +const SHT_MIPS_LOCSYM = 1879048213 +const SHT_MIPS_MSYM = 1879048193 +const SHT_MIPS_OPTIONS = 1879048205 +const SHT_MIPS_OPTSYM = 1879048215 +const SHT_MIPS_PACKAGE = 1879048199 +const SHT_MIPS_PACKSYM = 1879048200 +const SHT_MIPS_PDESC = 1879048212 +const SHT_MIPS_PDR_EXCEPTION = 1879048233 +const SHT_MIPS_PIXIE = 1879048227 +const SHT_MIPS_REGINFO = 1879048198 +const SHT_MIPS_RELD = 1879048201 +const SHT_MIPS_RFDESC = 1879048218 +const SHT_MIPS_SHDR = 1879048208 +const SHT_MIPS_SYMBOL_LIB = 1879048224 +const SHT_MIPS_TRANSLATE = 1879048226 +const SHT_MIPS_UCODE = 1879048196 +const SHT_MIPS_WHIRL = 1879048230 +const SHT_MIPS_XLATE = 1879048228 +const SHT_MIPS_XLATE_DEBUG = 1879048229 +const SHT_MIPS_XLATE_OLD = 1879048232 +const SHT_NOBITS = 8 +const SHT_NOTE = 7 +const SHT_NULL = 0 +const SHT_NUM = 20 +const SHT_PARISC_DOC = 1879048194 +const SHT_PARISC_EXT = 1879048192 +const SHT_PARISC_UNWIND = 1879048193 +const SHT_PREINIT_ARRAY = 16 +const SHT_PROGBITS = 1 +const SHT_REL = 9 +const SHT_RELA = 4 +const SHT_RELR = 19 +const SHT_SHLIB = 10 +const SHT_STRTAB = 3 +const SHT_SUNW_COMDAT = 1879048187 +const SHT_SUNW_move = 1879048186 +const SHT_SUNW_syminfo = 1879048188 +const SHT_SYMTAB = 2 +const SHT_SYMTAB_SHNDX = 18 +const SIGABRT = 6 +const SIGALRM = 14 +const SIGBUS = 7 +const SIGCHLD = 17 +const SIGCONT = 18 +const SIGEV_NONE = 1 +const SIGEV_SIGNAL = 0 +const SIGEV_THREAD = 2 +const SIGEV_THREAD_ID = 4 +const SIGFPE = 8 +const SIGHUP = 1 +const SIGILL = 4 +const SIGINT = 2 +const SIGIO = 29 +const SIGIOT = 6 +const SIGKILL = 9 +const SIGPIPE = 13 +const SIGPOLL = 29 +const SIGPROF = 27 +const SIGPWR = 30 +const SIGQUIT = 3 +const SIGRTMAX = 0 +const SIGRTMIN = 0 +const SIGSEGV = 11 +const SIGSTKFLT = 16 +const SIGSTKSZ = 8192 +const SIGSTOP = 19 +const SIGSYS = 31 +const SIGTERM = 15 +const SIGTRAP = 5 +const SIGTSTP = 20 +const SIGTTIN = 21 +const SIGTTOU = 22 +const SIGUNUSED = 31 +const SIGURG = 23 +const SIGUSR1 = 10 +const SIGUSR2 = 12 +const SIGVTALRM = 26 +const SIGWINCH = 28 +const SIGXCPU = 24 +const SIGXFSZ = 25 +const SIG_BLOCK = 0 +const SIG_SETMASK = 2 +const SIG_UNBLOCK = 1 +const SIOCGSTAMPNS_OLD = 35079 +const SIOCGSTAMP_OLD = 35078 +const SI_ASYNCIO = -4 +const SI_ASYNCNL = -60 +const SI_KERNEL = 128 +const SI_MESGQ = -3 +const SI_QUEUE = -1 +const SI_SIGIO = -5 +const SI_TIMER = -2 +const SI_TKILL = -6 +const SI_USER = 0 +const SO_RCVTIMEO_OLD = 20 +const SO_SNDTIMEO_OLD = 21 +const SO_TIMESTAMPING_OLD = 37 +const SO_TIMESTAMPNS_OLD = 35 +const SO_TIMESTAMP_OLD = 29 +const SS_AUTODISARM = 2147483648 +const SS_DISABLE = 2 +const SS_FLAG_BITS = 2147483648 +const SS_ONSTACK = 1 +const STB_GLOBAL = 1 +const STB_GNU_UNIQUE = 10 +const STB_HIOS = 12 +const STB_HIPROC = 15 +const STB_LOCAL = 0 +const STB_LOOS = 10 +const STB_LOPROC = 13 +const STB_MIPS_SPLIT_COMMON = 13 +const STB_NUM = 3 +const STB_WEAK = 2 +const STN_UNDEF = 0 +const STO_ALPHA_NOPV = 128 +const STO_ALPHA_STD_GPLOAD = 136 +const STO_MIPS_DEFAULT = 0 +const STO_MIPS_HIDDEN = 2 +const STO_MIPS_INTERNAL = 1 +const STO_MIPS_PLT = 8 +const STO_MIPS_PROTECTED = 3 +const STO_MIPS_SC_ALIGN_UNUSED = 255 +const STO_PPC64_LOCAL_BIT = 5 +const STO_PPC64_LOCAL_MASK = 224 +const STT_ARM_16BIT = 15 +const STT_ARM_TFUNC = 13 +const STT_COMMON = 5 +const STT_FILE = 4 +const STT_FUNC = 2 +const STT_GNU_IFUNC = 10 +const STT_HIOS = 12 +const STT_HIPROC = 15 +const STT_HP_OPAQUE = 11 +const STT_HP_STUB = 12 +const STT_LOOS = 10 +const STT_LOPROC = 13 +const STT_NOTYPE = 0 +const STT_NUM = 7 +const STT_OBJECT = 1 +const STT_PARISC_MILLICODE = 13 +const STT_SECTION = 3 +const STT_SPARC_REGISTER = 13 +const STT_TLS = 6 +const STV_DEFAULT = 0 +const STV_HIDDEN = 2 +const STV_INTERNAL = 1 +const STV_PROTECTED = 3 +const SYMINFO_BT_LOWRESERVE = 65280 +const SYMINFO_BT_PARENT = 65534 +const SYMINFO_BT_SELF = 65535 +const SYMINFO_CURRENT = 1 +const SYMINFO_FLG_COPY = 4 +const SYMINFO_FLG_DIRECT = 1 +const SYMINFO_FLG_LAZYLOAD = 8 +const SYMINFO_FLG_PASSTHRU = 2 +const SYMINFO_NONE = 0 +const SYMINFO_NUM = 2 +const SYSCALL_MMAP2_UNIT = 4096 +const SYSCALL_RLIM_INFINITY = 18446744073709551615 +const SYS__llseek = 140 +const SYS__newselect = 142 +const SYS__sysctl = 149 +const SYS_accept = 285 +const SYS_accept4 = 366 +const SYS_access = 33 +const SYS_acct = 51 +const SYS_add_key = 309 +const SYS_adjtimex = 124 +const SYS_arm_fadvise64_64 = 270 +const SYS_arm_sync_file_range = 341 +const SYS_bdflush = 134 +const SYS_bind = 282 +const SYS_bpf = 386 +const SYS_brk = 45 +const SYS_cachestat = 451 +const SYS_capget = 184 +const SYS_capset = 185 +const SYS_chdir = 12 +const SYS_chmod = 15 +const SYS_chown32 = 212 +const SYS_chroot = 61 +const SYS_clock_adjtime = 372 +const SYS_clock_adjtime64 = 405 +const SYS_clock_getres = 264 +const SYS_clock_getres_time32 = 264 +const SYS_clock_getres_time64 = 406 +const SYS_clock_gettime = 263 +const SYS_clock_gettime32 = 263 +const SYS_clock_gettime64 = 403 +const SYS_clock_nanosleep = 265 +const SYS_clock_nanosleep_time32 = 265 +const SYS_clock_nanosleep_time64 = 407 +const SYS_clock_settime = 262 +const SYS_clock_settime32 = 262 +const SYS_clock_settime64 = 404 +const SYS_clone = 120 +const SYS_clone3 = 435 +const SYS_close = 6 +const SYS_close_range = 436 +const SYS_connect = 283 +const SYS_copy_file_range = 391 +const SYS_creat = 8 +const SYS_delete_module = 129 +const SYS_dup = 41 +const SYS_dup2 = 63 +const SYS_dup3 = 358 +const SYS_epoll_create = 250 +const SYS_epoll_create1 = 357 +const SYS_epoll_ctl = 251 +const SYS_epoll_pwait = 346 +const SYS_epoll_pwait2 = 441 +const SYS_epoll_wait = 252 +const SYS_eventfd = 351 +const SYS_eventfd2 = 356 +const SYS_execve = 11 +const SYS_execveat = 387 +const SYS_exit = 1 +const SYS_exit_group = 248 +const SYS_faccessat = 334 +const SYS_faccessat2 = 439 +const SYS_fadvise64_64 = 270 +const SYS_fallocate = 352 +const SYS_fanotify_init = 367 +const SYS_fanotify_mark = 368 +const SYS_fchdir = 133 +const SYS_fchmod = 94 +const SYS_fchmodat = 333 +const SYS_fchmodat2 = 452 +const SYS_fchown32 = 207 +const SYS_fchownat = 325 +const SYS_fcntl64 = 221 +const SYS_fdatasync = 148 +const SYS_fgetxattr = 231 +const SYS_finit_module = 379 +const SYS_flistxattr = 234 +const SYS_flock = 143 +const SYS_fork = 2 +const SYS_fremovexattr = 237 +const SYS_fsconfig = 431 +const SYS_fsetxattr = 228 +const SYS_fsmount = 432 +const SYS_fsopen = 430 +const SYS_fspick = 433 +const SYS_fstat64 = 197 +const SYS_fstatat64 = 327 +const SYS_fstatfs64 = 267 +const SYS_fsync = 118 +const SYS_ftruncate64 = 194 +const SYS_futex = 240 +const SYS_futex_time64 = 422 +const SYS_futex_waitv = 449 +const SYS_futimesat = 326 +const SYS_get_mempolicy = 320 +const SYS_get_robust_list = 339 +const SYS_getcpu = 345 +const SYS_getcwd = 183 +const SYS_getdents64 = 217 +const SYS_getegid32 = 202 +const SYS_geteuid32 = 201 +const SYS_getgid32 = 200 +const SYS_getgroups32 = 205 +const SYS_getitimer = 105 +const SYS_getpeername = 287 +const SYS_getpgid = 132 +const SYS_getpgrp = 65 +const SYS_getpid = 20 +const SYS_getppid = 64 +const SYS_getpriority = 96 +const SYS_getrandom = 384 +const SYS_getresgid32 = 211 +const SYS_getresuid32 = 209 +const SYS_getrusage = 77 +const SYS_getsid = 147 +const SYS_getsockname = 286 +const SYS_getsockopt = 295 +const SYS_gettid = 224 +const SYS_gettimeofday = 78 +const SYS_gettimeofday_time32 = 78 +const SYS_getuid32 = 199 +const SYS_getxattr = 229 +const SYS_init_module = 128 +const SYS_inotify_add_watch = 317 +const SYS_inotify_init = 316 +const SYS_inotify_init1 = 360 +const SYS_inotify_rm_watch = 318 +const SYS_io_cancel = 247 +const SYS_io_destroy = 244 +const SYS_io_getevents = 245 +const SYS_io_pgetevents = 399 +const SYS_io_pgetevents_time64 = 416 +const SYS_io_setup = 243 +const SYS_io_submit = 246 +const SYS_io_uring_enter = 426 +const SYS_io_uring_register = 427 +const SYS_io_uring_setup = 425 +const SYS_ioctl = 54 +const SYS_ioprio_get = 315 +const SYS_ioprio_set = 314 +const SYS_kcmp = 378 +const SYS_kexec_file_load = 401 +const SYS_kexec_load = 347 +const SYS_keyctl = 311 +const SYS_kill = 37 +const SYS_landlock_add_rule = 445 +const SYS_landlock_create_ruleset = 444 +const SYS_landlock_restrict_self = 446 +const SYS_lchown32 = 198 +const SYS_lgetxattr = 230 +const SYS_link = 9 +const SYS_linkat = 330 +const SYS_listen = 284 +const SYS_listxattr = 232 +const SYS_llistxattr = 233 +const SYS_lookup_dcookie = 249 +const SYS_lremovexattr = 236 +const SYS_lseek = 19 +const SYS_lsetxattr = 227 +const SYS_lstat64 = 196 +const SYS_madvise = 220 +const SYS_mbind = 319 +const SYS_membarrier = 389 +const SYS_memfd_create = 385 +const SYS_migrate_pages = 400 +const SYS_mincore = 219 +const SYS_mkdir = 39 +const SYS_mkdirat = 323 +const SYS_mknod = 14 +const SYS_mknodat = 324 +const SYS_mlock = 150 +const SYS_mlock2 = 390 +const SYS_mlockall = 152 +const SYS_mmap2 = 192 +const SYS_mount = 21 +const SYS_mount_setattr = 442 +const SYS_move_mount = 429 +const SYS_move_pages = 344 +const SYS_mprotect = 125 +const SYS_mq_getsetattr = 279 +const SYS_mq_notify = 278 +const SYS_mq_open = 274 +const SYS_mq_timedreceive = 277 +const SYS_mq_timedreceive_time64 = 419 +const SYS_mq_timedsend = 276 +const SYS_mq_timedsend_time64 = 418 +const SYS_mq_unlink = 275 +const SYS_mremap = 163 +const SYS_msgctl = 304 +const SYS_msgget = 303 +const SYS_msgrcv = 302 +const SYS_msgsnd = 301 +const SYS_msync = 144 +const SYS_munlock = 151 +const SYS_munlockall = 153 +const SYS_munmap = 91 +const SYS_name_to_handle_at = 370 +const SYS_nanosleep = 162 +const SYS_nfsservctl = 169 +const SYS_nice = 34 +const SYS_open = 5 +const SYS_open_by_handle_at = 371 +const SYS_open_tree = 428 +const SYS_openat = 322 +const SYS_openat2 = 437 +const SYS_pause = 29 +const SYS_pciconfig_iobase = 271 +const SYS_pciconfig_read = 272 +const SYS_pciconfig_write = 273 +const SYS_perf_event_open = 364 +const SYS_personality = 136 +const SYS_pidfd_getfd = 438 +const SYS_pidfd_open = 434 +const SYS_pidfd_send_signal = 424 +const SYS_pipe = 42 +const SYS_pipe2 = 359 +const SYS_pivot_root = 218 +const SYS_pkey_alloc = 395 +const SYS_pkey_free = 396 +const SYS_pkey_mprotect = 394 +const SYS_poll = 168 +const SYS_ppoll = 336 +const SYS_ppoll_time64 = 414 +const SYS_prctl = 172 +const SYS_pread64 = 180 +const SYS_preadv = 361 +const SYS_preadv2 = 392 +const SYS_prlimit64 = 369 +const SYS_process_madvise = 440 +const SYS_process_mrelease = 448 +const SYS_process_vm_readv = 376 +const SYS_process_vm_writev = 377 +const SYS_pselect6 = 335 +const SYS_pselect6_time64 = 413 +const SYS_ptrace = 26 +const SYS_pwrite64 = 181 +const SYS_pwritev = 362 +const SYS_pwritev2 = 393 +const SYS_quotactl = 131 +const SYS_read = 3 +const SYS_readahead = 225 +const SYS_readlink = 85 +const SYS_readlinkat = 332 +const SYS_readv = 145 +const SYS_reboot = 88 +const SYS_recv = 291 +const SYS_recvfrom = 292 +const SYS_recvmmsg = 365 +const SYS_recvmmsg_time64 = 417 +const SYS_recvmsg = 297 +const SYS_remap_file_pages = 253 +const SYS_removexattr = 235 +const SYS_rename = 38 +const SYS_renameat = 329 +const SYS_renameat2 = 382 +const SYS_request_key = 310 +const SYS_restart_syscall = 0 +const SYS_rmdir = 40 +const SYS_rseq = 398 +const SYS_rt_sigaction = 174 +const SYS_rt_sigpending = 176 +const SYS_rt_sigprocmask = 175 +const SYS_rt_sigqueueinfo = 178 +const SYS_rt_sigreturn = 173 +const SYS_rt_sigsuspend = 179 +const SYS_rt_sigtimedwait = 177 +const SYS_rt_sigtimedwait_time64 = 421 +const SYS_rt_tgsigqueueinfo = 363 +const SYS_sched_get_priority_max = 159 +const SYS_sched_get_priority_min = 160 +const SYS_sched_getaffinity = 242 +const SYS_sched_getattr = 381 +const SYS_sched_getparam = 155 +const SYS_sched_getscheduler = 157 +const SYS_sched_rr_get_interval = 161 +const SYS_sched_rr_get_interval_time64 = 423 +const SYS_sched_setaffinity = 241 +const SYS_sched_setattr = 380 +const SYS_sched_setparam = 154 +const SYS_sched_setscheduler = 156 +const SYS_sched_yield = 158 +const SYS_seccomp = 383 +const SYS_semctl = 300 +const SYS_semget = 299 +const SYS_semop = 298 +const SYS_semtimedop = 312 +const SYS_semtimedop_time64 = 420 +const SYS_send = 289 +const SYS_sendfile64 = 239 +const SYS_sendmmsg = 374 +const SYS_sendmsg = 296 +const SYS_sendto = 290 +const SYS_set_mempolicy = 321 +const SYS_set_mempolicy_home_node = 450 +const SYS_set_robust_list = 338 +const SYS_set_tid_address = 256 +const SYS_setdomainname = 121 +const SYS_setfsgid32 = 216 +const SYS_setfsuid32 = 215 +const SYS_setgid32 = 214 +const SYS_setgroups32 = 206 +const SYS_sethostname = 74 +const SYS_setitimer = 104 +const SYS_setns = 375 +const SYS_setpgid = 57 +const SYS_setpriority = 97 +const SYS_setregid32 = 204 +const SYS_setresgid32 = 210 +const SYS_setresuid32 = 208 +const SYS_setreuid32 = 203 +const SYS_setrlimit = 75 +const SYS_setsid = 66 +const SYS_setsockopt = 294 +const SYS_settimeofday = 79 +const SYS_settimeofday_time32 = 79 +const SYS_setuid32 = 213 +const SYS_setxattr = 226 +const SYS_shmat = 305 +const SYS_shmctl = 308 +const SYS_shmdt = 306 +const SYS_shmget = 307 +const SYS_shutdown = 293 +const SYS_sigaction = 67 +const SYS_sigaltstack = 186 +const SYS_signalfd = 349 +const SYS_signalfd4 = 355 +const SYS_sigpending = 73 +const SYS_sigprocmask = 126 +const SYS_sigreturn = 119 +const SYS_sigsuspend = 72 +const SYS_socket = 281 +const SYS_socketpair = 288 +const SYS_splice = 340 +const SYS_stat64 = 195 +const SYS_statfs64 = 266 +const SYS_statx = 397 +const SYS_swapoff = 115 +const SYS_swapon = 87 +const SYS_symlink = 83 +const SYS_symlinkat = 331 +const SYS_sync = 36 +const SYS_sync_file_range2 = 341 +const SYS_syncfs = 373 +const SYS_sysfs = 135 +const SYS_sysinfo = 116 +const SYS_syslog = 103 +const SYS_tee = 342 +const SYS_tgkill = 268 +const SYS_timer_create = 257 +const SYS_timer_delete = 261 +const SYS_timer_getoverrun = 260 +const SYS_timer_gettime = 259 +const SYS_timer_gettime32 = 259 +const SYS_timer_gettime64 = 408 +const SYS_timer_settime = 258 +const SYS_timer_settime32 = 258 +const SYS_timer_settime64 = 409 +const SYS_timerfd_create = 350 +const SYS_timerfd_gettime = 354 +const SYS_timerfd_gettime32 = 354 +const SYS_timerfd_gettime64 = 410 +const SYS_timerfd_settime = 353 +const SYS_timerfd_settime32 = 353 +const SYS_timerfd_settime64 = 411 +const SYS_times = 43 +const SYS_tkill = 238 +const SYS_truncate64 = 193 +const SYS_ugetrlimit = 191 +const SYS_umask = 60 +const SYS_umount2 = 52 +const SYS_uname = 122 +const SYS_unlink = 10 +const SYS_unlinkat = 328 +const SYS_unshare = 337 +const SYS_uselib = 86 +const SYS_userfaultfd = 388 +const SYS_ustat = 62 +const SYS_utimensat = 348 +const SYS_utimensat_time64 = 412 +const SYS_utimes = 269 +const SYS_vfork = 190 +const SYS_vhangup = 111 +const SYS_vmsplice = 343 +const SYS_vserver = 313 +const SYS_wait4 = 114 +const SYS_waitid = 280 +const SYS_write = 4 +const SYS_writev = 146 +const TRAP_BRANCH = 3 +const TRAP_BRKPT = 1 +const TRAP_HWBKPT = 4 +const TRAP_TRACE = 2 +const TRAP_UNK = 5 +const VER = -255 +const VER_DEF_CURRENT = 1 +const VER_DEF_NONE = 0 +const VER_DEF_NUM = 2 +const VER_FLG_BASE = 1 +const VER_FLG_WEAK = 2 +const VER_NDX_ELIMINATE = 65281 +const VER_NDX_GLOBAL = 1 +const VER_NDX_LOCAL = 0 +const VER_NDX_LORESERVE = 65280 +const VER_NEED_CURRENT = 1 +const VER_NEED_NONE = 0 +const VER_NEED_NUM = 2 +const WNOHANG = 1 +const WUNTRACED = 2 +const _NSIG = 65 +const __ARM_NR_breakpoint = 983041 +const __ARM_NR_cacheflush = 983042 +const __ARM_NR_get_tls = 983046 +const __ARM_NR_set_tls = 983045 +const __ARM_NR_usr26 = 983043 +const __ARM_NR_usr32 = 983044 +const __NR__llseek = 140 +const __NR__newselect = 142 +const __NR__sysctl = 149 +const __NR_accept = 285 +const __NR_accept4 = 366 +const __NR_access = 33 +const __NR_acct = 51 +const __NR_add_key = 309 +const __NR_adjtimex = 124 +const __NR_arm_fadvise64_64 = 270 +const __NR_arm_sync_file_range = 341 +const __NR_bdflush = 134 +const __NR_bind = 282 +const __NR_bpf = 386 +const __NR_brk = 45 +const __NR_cachestat = 451 +const __NR_capget = 184 +const __NR_capset = 185 +const __NR_chdir = 12 +const __NR_chmod = 15 +const __NR_chown = 182 +const __NR_chown32 = 212 +const __NR_chroot = 61 +const __NR_clock_adjtime = 372 +const __NR_clock_adjtime64 = 405 +const __NR_clock_getres_time32 = 264 +const __NR_clock_getres_time64 = 406 +const __NR_clock_gettime32 = 263 +const __NR_clock_gettime64 = 403 +const __NR_clock_nanosleep_time32 = 265 +const __NR_clock_nanosleep_time64 = 407 +const __NR_clock_settime32 = 262 +const __NR_clock_settime64 = 404 +const __NR_clone = 120 +const __NR_clone3 = 435 +const __NR_close = 6 +const __NR_close_range = 436 +const __NR_connect = 283 +const __NR_copy_file_range = 391 +const __NR_creat = 8 +const __NR_delete_module = 129 +const __NR_dup = 41 +const __NR_dup2 = 63 +const __NR_dup3 = 358 +const __NR_epoll_create = 250 +const __NR_epoll_create1 = 357 +const __NR_epoll_ctl = 251 +const __NR_epoll_pwait = 346 +const __NR_epoll_pwait2 = 441 +const __NR_epoll_wait = 252 +const __NR_eventfd = 351 +const __NR_eventfd2 = 356 +const __NR_execve = 11 +const __NR_execveat = 387 +const __NR_exit = 1 +const __NR_exit_group = 248 +const __NR_faccessat = 334 +const __NR_faccessat2 = 439 +const __NR_fadvise64_64 = 270 +const __NR_fallocate = 352 +const __NR_fanotify_init = 367 +const __NR_fanotify_mark = 368 +const __NR_fchdir = 133 +const __NR_fchmod = 94 +const __NR_fchmodat = 333 +const __NR_fchmodat2 = 452 +const __NR_fchown = 95 +const __NR_fchown32 = 207 +const __NR_fchownat = 325 +const __NR_fcntl = 55 +const __NR_fcntl64 = 221 +const __NR_fdatasync = 148 +const __NR_fgetxattr = 231 +const __NR_finit_module = 379 +const __NR_flistxattr = 234 +const __NR_flock = 143 +const __NR_fork = 2 +const __NR_fremovexattr = 237 +const __NR_fsconfig = 431 +const __NR_fsetxattr = 228 +const __NR_fsmount = 432 +const __NR_fsopen = 430 +const __NR_fspick = 433 +const __NR_fstat = 108 +const __NR_fstat64 = 197 +const __NR_fstatat64 = 327 +const __NR_fstatfs = 100 +const __NR_fstatfs64 = 267 +const __NR_fsync = 118 +const __NR_ftruncate = 93 +const __NR_ftruncate64 = 194 +const __NR_futex = 240 +const __NR_futex_time64 = 422 +const __NR_futex_waitv = 449 +const __NR_futimesat = 326 +const __NR_get_mempolicy = 320 +const __NR_get_robust_list = 339 +const __NR_getcpu = 345 +const __NR_getcwd = 183 +const __NR_getdents = 141 +const __NR_getdents64 = 217 +const __NR_getegid = 50 +const __NR_getegid32 = 202 +const __NR_geteuid = 49 +const __NR_geteuid32 = 201 +const __NR_getgid = 47 +const __NR_getgid32 = 200 +const __NR_getgroups = 80 +const __NR_getgroups32 = 205 +const __NR_getitimer = 105 +const __NR_getpeername = 287 +const __NR_getpgid = 132 +const __NR_getpgrp = 65 +const __NR_getpid = 20 +const __NR_getppid = 64 +const __NR_getpriority = 96 +const __NR_getrandom = 384 +const __NR_getresgid = 171 +const __NR_getresgid32 = 211 +const __NR_getresuid = 165 +const __NR_getresuid32 = 209 +const __NR_getrusage = 77 +const __NR_getsid = 147 +const __NR_getsockname = 286 +const __NR_getsockopt = 295 +const __NR_gettid = 224 +const __NR_gettimeofday_time32 = 78 +const __NR_getuid = 24 +const __NR_getuid32 = 199 +const __NR_getxattr = 229 +const __NR_init_module = 128 +const __NR_inotify_add_watch = 317 +const __NR_inotify_init = 316 +const __NR_inotify_init1 = 360 +const __NR_inotify_rm_watch = 318 +const __NR_io_cancel = 247 +const __NR_io_destroy = 244 +const __NR_io_getevents = 245 +const __NR_io_pgetevents = 399 +const __NR_io_pgetevents_time64 = 416 +const __NR_io_setup = 243 +const __NR_io_submit = 246 +const __NR_io_uring_enter = 426 +const __NR_io_uring_register = 427 +const __NR_io_uring_setup = 425 +const __NR_ioctl = 54 +const __NR_ioprio_get = 315 +const __NR_ioprio_set = 314 +const __NR_kcmp = 378 +const __NR_kexec_file_load = 401 +const __NR_kexec_load = 347 +const __NR_keyctl = 311 +const __NR_kill = 37 +const __NR_landlock_add_rule = 445 +const __NR_landlock_create_ruleset = 444 +const __NR_landlock_restrict_self = 446 +const __NR_lchown = 16 +const __NR_lchown32 = 198 +const __NR_lgetxattr = 230 +const __NR_link = 9 +const __NR_linkat = 330 +const __NR_listen = 284 +const __NR_listxattr = 232 +const __NR_llistxattr = 233 +const __NR_lookup_dcookie = 249 +const __NR_lremovexattr = 236 +const __NR_lseek = 19 +const __NR_lsetxattr = 227 +const __NR_lstat = 107 +const __NR_lstat64 = 196 +const __NR_madvise = 220 +const __NR_mbind = 319 +const __NR_membarrier = 389 +const __NR_memfd_create = 385 +const __NR_migrate_pages = 400 +const __NR_mincore = 219 +const __NR_mkdir = 39 +const __NR_mkdirat = 323 +const __NR_mknod = 14 +const __NR_mknodat = 324 +const __NR_mlock = 150 +const __NR_mlock2 = 390 +const __NR_mlockall = 152 +const __NR_mmap2 = 192 +const __NR_mount = 21 +const __NR_mount_setattr = 442 +const __NR_move_mount = 429 +const __NR_move_pages = 344 +const __NR_mprotect = 125 +const __NR_mq_getsetattr = 279 +const __NR_mq_notify = 278 +const __NR_mq_open = 274 +const __NR_mq_timedreceive = 277 +const __NR_mq_timedreceive_time64 = 419 +const __NR_mq_timedsend = 276 +const __NR_mq_timedsend_time64 = 418 +const __NR_mq_unlink = 275 +const __NR_mremap = 163 +const __NR_msgctl = 304 +const __NR_msgget = 303 +const __NR_msgrcv = 302 +const __NR_msgsnd = 301 +const __NR_msync = 144 +const __NR_munlock = 151 +const __NR_munlockall = 153 +const __NR_munmap = 91 +const __NR_name_to_handle_at = 370 +const __NR_nanosleep = 162 +const __NR_nfsservctl = 169 +const __NR_nice = 34 +const __NR_open = 5 +const __NR_open_by_handle_at = 371 +const __NR_open_tree = 428 +const __NR_openat = 322 +const __NR_openat2 = 437 +const __NR_pause = 29 +const __NR_pciconfig_iobase = 271 +const __NR_pciconfig_read = 272 +const __NR_pciconfig_write = 273 +const __NR_perf_event_open = 364 +const __NR_personality = 136 +const __NR_pidfd_getfd = 438 +const __NR_pidfd_open = 434 +const __NR_pidfd_send_signal = 424 +const __NR_pipe = 42 +const __NR_pipe2 = 359 +const __NR_pivot_root = 218 +const __NR_pkey_alloc = 395 +const __NR_pkey_free = 396 +const __NR_pkey_mprotect = 394 +const __NR_poll = 168 +const __NR_ppoll = 336 +const __NR_ppoll_time64 = 414 +const __NR_prctl = 172 +const __NR_pread64 = 180 +const __NR_preadv = 361 +const __NR_preadv2 = 392 +const __NR_prlimit64 = 369 +const __NR_process_madvise = 440 +const __NR_process_mrelease = 448 +const __NR_process_vm_readv = 376 +const __NR_process_vm_writev = 377 +const __NR_pselect6 = 335 +const __NR_pselect6_time64 = 413 +const __NR_ptrace = 26 +const __NR_pwrite64 = 181 +const __NR_pwritev = 362 +const __NR_pwritev2 = 393 +const __NR_quotactl = 131 +const __NR_read = 3 +const __NR_readahead = 225 +const __NR_readlink = 85 +const __NR_readlinkat = 332 +const __NR_readv = 145 +const __NR_reboot = 88 +const __NR_recv = 291 +const __NR_recvfrom = 292 +const __NR_recvmmsg = 365 +const __NR_recvmmsg_time64 = 417 +const __NR_recvmsg = 297 +const __NR_remap_file_pages = 253 +const __NR_removexattr = 235 +const __NR_rename = 38 +const __NR_renameat = 329 +const __NR_renameat2 = 382 +const __NR_request_key = 310 +const __NR_restart_syscall = 0 +const __NR_rmdir = 40 +const __NR_rseq = 398 +const __NR_rt_sigaction = 174 +const __NR_rt_sigpending = 176 +const __NR_rt_sigprocmask = 175 +const __NR_rt_sigqueueinfo = 178 +const __NR_rt_sigreturn = 173 +const __NR_rt_sigsuspend = 179 +const __NR_rt_sigtimedwait = 177 +const __NR_rt_sigtimedwait_time64 = 421 +const __NR_rt_tgsigqueueinfo = 363 +const __NR_sched_get_priority_max = 159 +const __NR_sched_get_priority_min = 160 +const __NR_sched_getaffinity = 242 +const __NR_sched_getattr = 381 +const __NR_sched_getparam = 155 +const __NR_sched_getscheduler = 157 +const __NR_sched_rr_get_interval = 161 +const __NR_sched_rr_get_interval_time64 = 423 +const __NR_sched_setaffinity = 241 +const __NR_sched_setattr = 380 +const __NR_sched_setparam = 154 +const __NR_sched_setscheduler = 156 +const __NR_sched_yield = 158 +const __NR_seccomp = 383 +const __NR_semctl = 300 +const __NR_semget = 299 +const __NR_semop = 298 +const __NR_semtimedop = 312 +const __NR_semtimedop_time64 = 420 +const __NR_send = 289 +const __NR_sendfile = 187 +const __NR_sendfile64 = 239 +const __NR_sendmmsg = 374 +const __NR_sendmsg = 296 +const __NR_sendto = 290 +const __NR_set_mempolicy = 321 +const __NR_set_mempolicy_home_node = 450 +const __NR_set_robust_list = 338 +const __NR_set_tid_address = 256 +const __NR_setdomainname = 121 +const __NR_setfsgid = 139 +const __NR_setfsgid32 = 216 +const __NR_setfsuid = 138 +const __NR_setfsuid32 = 215 +const __NR_setgid = 46 +const __NR_setgid32 = 214 +const __NR_setgroups = 81 +const __NR_setgroups32 = 206 +const __NR_sethostname = 74 +const __NR_setitimer = 104 +const __NR_setns = 375 +const __NR_setpgid = 57 +const __NR_setpriority = 97 +const __NR_setregid = 71 +const __NR_setregid32 = 204 +const __NR_setresgid = 170 +const __NR_setresgid32 = 210 +const __NR_setresuid = 164 +const __NR_setresuid32 = 208 +const __NR_setreuid = 70 +const __NR_setreuid32 = 203 +const __NR_setrlimit = 75 +const __NR_setsid = 66 +const __NR_setsockopt = 294 +const __NR_settimeofday_time32 = 79 +const __NR_setuid = 23 +const __NR_setuid32 = 213 +const __NR_setxattr = 226 +const __NR_shmat = 305 +const __NR_shmctl = 308 +const __NR_shmdt = 306 +const __NR_shmget = 307 +const __NR_shutdown = 293 +const __NR_sigaction = 67 +const __NR_sigaltstack = 186 +const __NR_signalfd = 349 +const __NR_signalfd4 = 355 +const __NR_sigpending = 73 +const __NR_sigprocmask = 126 +const __NR_sigreturn = 119 +const __NR_sigsuspend = 72 +const __NR_socket = 281 +const __NR_socketpair = 288 +const __NR_splice = 340 +const __NR_stat = 106 +const __NR_stat64 = 195 +const __NR_statfs = 99 +const __NR_statfs64 = 266 +const __NR_statx = 397 +const __NR_swapoff = 115 +const __NR_swapon = 87 +const __NR_symlink = 83 +const __NR_symlinkat = 331 +const __NR_sync = 36 +const __NR_sync_file_range2 = 341 +const __NR_syncfs = 373 +const __NR_sysfs = 135 +const __NR_sysinfo = 116 +const __NR_syslog = 103 +const __NR_tee = 342 +const __NR_tgkill = 268 +const __NR_timer_create = 257 +const __NR_timer_delete = 261 +const __NR_timer_getoverrun = 260 +const __NR_timer_gettime32 = 259 +const __NR_timer_gettime64 = 408 +const __NR_timer_settime32 = 258 +const __NR_timer_settime64 = 409 +const __NR_timerfd_create = 350 +const __NR_timerfd_gettime32 = 354 +const __NR_timerfd_gettime64 = 410 +const __NR_timerfd_settime32 = 353 +const __NR_timerfd_settime64 = 411 +const __NR_times = 43 +const __NR_tkill = 238 +const __NR_truncate = 92 +const __NR_truncate64 = 193 +const __NR_ugetrlimit = 191 +const __NR_umask = 60 +const __NR_umount2 = 52 +const __NR_uname = 122 +const __NR_unlink = 10 +const __NR_unlinkat = 328 +const __NR_unshare = 337 +const __NR_uselib = 86 +const __NR_userfaultfd = 388 +const __NR_ustat = 62 +const __NR_utimensat = 348 +const __NR_utimensat_time64 = 412 +const __NR_utimes = 269 +const __NR_vfork = 190 +const __NR_vhangup = 111 +const __NR_vmsplice = 343 +const __NR_vserver = 313 +const __NR_wait4 = 114 +const __NR_waitid = 280 +const __NR_write = 4 +const __NR_writev = 146 +const __SC_accept = 5 +const __SC_accept4 = 18 +const __SC_bind = 2 +const __SC_connect = 3 +const __SC_getpeername = 7 +const __SC_getsockname = 6 +const __SC_getsockopt = 15 +const __SC_listen = 4 +const __SC_recv = 10 +const __SC_recvfrom = 12 +const __SC_recvmmsg = 19 +const __SC_recvmsg = 17 +const __SC_send = 9 +const __SC_sendmmsg = 20 +const __SC_sendmsg = 16 +const __SC_sendto = 11 +const __SC_setsockopt = 14 +const __SC_shutdown = 13 +const __SC_socket = 1 +const __SC_socketpair = 8 +const libc = 0 + +type Ttime_t = int64 + +type Tsuseconds_t = int64 + +type Ttimeval = struct { + F__ccgo_align [0]uint32 + Ftv_sec Ttime_t + Ftv_usec Tsuseconds_t +} + +type Ttimespec = struct { + F__ccgo_align [0]uint32 + Ftv_sec Ttime_t + Ftv_nsec int32 + F__ccgo12 uint32 +} + +type Tsigset_t = struct { + F__bits [32]uint32 +} + +type t__sigset_t = Tsigset_t + +type Tfd_mask = uint32 + +type Tfd_set = struct { + Ffds_bits [32]uint32 +} + +type Titimerval = struct { + F__ccgo_align [0]uint32 + Fit_interval Ttimeval + Fit_value Ttimeval +} + +type Tid_t = uint32 + +type Trlim_t = uint64 + +type Trlimit = struct { + F__ccgo_align [0]uint32 + Frlim_cur Trlim_t + Frlim_max Trlim_t +} + +type Trusage = struct { + F__ccgo_align [0]uint32 + Fru_utime Ttimeval + Fru_stime Ttimeval + Fru_maxrss int32 + Fru_ixrss int32 + Fru_idrss int32 + Fru_isrss int32 + Fru_minflt int32 + Fru_majflt int32 + Fru_nswap int32 + Fru_inblock int32 + Fru_oublock int32 + Fru_msgsnd int32 + Fru_msgrcv int32 + Fru_nsignals int32 + Fru_nvcsw int32 + Fru_nivcsw int32 + F__reserved [16]int32 +} + +type Tclock_t = int32 + +type Tpthread_t = uintptr + +type Tpthread_attr_t = struct { + F__u struct { + F__vi [0][9]int32 + F__s [0][9]uint32 + F__i [9]int32 + } +} + +type Tstack_t = struct { + Fss_sp uintptr + Fss_flags int32 + Fss_size Tsize_t +} + +type Tsigaltstack = Tstack_t + +type Tmcontext_t = struct { + F__regs [21]uint32 +} + +type Tucontext_t = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +type t__ucontext = Tucontext_t + +type Tsigval = struct { + Fsival_ptr [0]uintptr + Fsival_int int32 +} + +type Tsiginfo_t = struct { + Fsi_signo int32 + Fsi_errno int32 + Fsi_code int32 + F__si_fields struct { + F__si_common [0]struct { + F__first struct { + F__timer [0]struct { + Fsi_timerid int32 + Fsi_overrun int32 + } + F__piduid struct { + Fsi_pid Tpid_t + Fsi_uid Tuid_t + } + } + F__second struct { + F__sigchld [0]struct { + Fsi_status int32 + Fsi_utime Tclock_t + Fsi_stime Tclock_t + } + Fsi_value Tsigval + F__ccgo_pad2 [8]byte + } + } + F__sigfault [0]struct { + Fsi_addr uintptr + Fsi_addr_lsb int16 + F__first struct { + Fsi_pkey [0]uint32 + F__addr_bnd struct { + Fsi_lower uintptr + Fsi_upper uintptr + } + } + } + F__sigpoll [0]struct { + Fsi_band int32 + Fsi_fd int32 + } + F__sigsys [0]struct { + Fsi_call_addr uintptr + Fsi_syscall int32 + Fsi_arch uint32 + } + F__pad [116]uint8 + } +} + +type Tsigaction = struct { + F__sa_handler struct { + Fsa_sigaction [0]uintptr + Fsa_handler uintptr + } + Fsa_mask Tsigset_t + Fsa_flags int32 + Fsa_restorer uintptr +} + +type Tsigevent = struct { + Fsigev_value Tsigval + Fsigev_signo int32 + Fsigev_notify int32 + F__sev_fields struct { + Fsigev_notify_thread_id [0]Tpid_t + F__sev_thread [0]struct { + Fsigev_notify_function uintptr + Fsigev_notify_attributes uintptr + } + F__pad [52]uint8 + } +} + +type Tsig_atomic_t = int32 + +type TElf32_Half = uint16 + +type TElf64_Half = uint16 + +type TElf32_Word = uint32 + +type TElf32_Sword = int32 + +type TElf64_Word = uint32 + +type TElf64_Sword = int32 + +type TElf32_Xword = uint64 + +type TElf32_Sxword = int64 + +type TElf64_Xword = uint64 + +type TElf64_Sxword = int64 + +type TElf32_Addr = uint32 + +type TElf64_Addr = uint64 + +type TElf32_Off = uint32 + +type TElf64_Off = uint64 + +type TElf32_Section = uint16 + +type TElf64_Section = uint16 + +type TElf32_Versym = uint16 + +type TElf64_Versym = uint16 + +type TElf32_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf32_Half + Fe_machine TElf32_Half + Fe_version TElf32_Word + Fe_entry TElf32_Addr + Fe_phoff TElf32_Off + Fe_shoff TElf32_Off + Fe_flags TElf32_Word + Fe_ehsize TElf32_Half + Fe_phentsize TElf32_Half + Fe_phnum TElf32_Half + Fe_shentsize TElf32_Half + Fe_shnum TElf32_Half + Fe_shstrndx TElf32_Half +} + +type TElf64_Ehdr = struct { + F__ccgo_align [0]uint32 + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TElf32_Shdr = struct { + Fsh_name TElf32_Word + Fsh_type TElf32_Word + Fsh_flags TElf32_Word + Fsh_addr TElf32_Addr + Fsh_offset TElf32_Off + Fsh_size TElf32_Word + Fsh_link TElf32_Word + Fsh_info TElf32_Word + Fsh_addralign TElf32_Word + Fsh_entsize TElf32_Word +} + +type TElf64_Shdr = struct { + F__ccgo_align [0]uint32 + Fsh_name TElf64_Word + Fsh_type TElf64_Word + Fsh_flags TElf64_Xword + Fsh_addr TElf64_Addr + Fsh_offset TElf64_Off + Fsh_size TElf64_Xword + Fsh_link TElf64_Word + Fsh_info TElf64_Word + Fsh_addralign TElf64_Xword + Fsh_entsize TElf64_Xword +} + +type TElf32_Chdr = struct { + Fch_type TElf32_Word + Fch_size TElf32_Word + Fch_addralign TElf32_Word +} + +type TElf64_Chdr = struct { + F__ccgo_align [0]uint32 + Fch_type TElf64_Word + Fch_reserved TElf64_Word + Fch_size TElf64_Xword + Fch_addralign TElf64_Xword +} + +type TElf32_Sym = struct { + Fst_name TElf32_Word + Fst_value TElf32_Addr + Fst_size TElf32_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf32_Section +} + +type TElf64_Sym = struct { + F__ccgo_align [0]uint32 + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TElf32_Syminfo = struct { + Fsi_boundto TElf32_Half + Fsi_flags TElf32_Half +} + +type TElf64_Syminfo = struct { + Fsi_boundto TElf64_Half + Fsi_flags TElf64_Half +} + +type TElf32_Rel = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word +} + +type TElf64_Rel = struct { + F__ccgo_align [0]uint32 + Fr_offset TElf64_Addr + Fr_info TElf64_Xword +} + +type TElf32_Rela = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word + Fr_addend TElf32_Sword +} + +type TElf64_Rela = struct { + F__ccgo_align [0]uint32 + Fr_offset TElf64_Addr + Fr_info TElf64_Xword + Fr_addend TElf64_Sxword +} + +type TElf32_Relr = uint32 + +type TElf64_Relr = uint64 + +type TElf32_Phdr = struct { + Fp_type TElf32_Word + Fp_offset TElf32_Off + Fp_vaddr TElf32_Addr + Fp_paddr TElf32_Addr + Fp_filesz TElf32_Word + Fp_memsz TElf32_Word + Fp_flags TElf32_Word + Fp_align TElf32_Word +} + +type TElf64_Phdr = struct { + F__ccgo_align [0]uint32 + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TElf32_Dyn = struct { + Fd_tag TElf32_Sword + Fd_un struct { + Fd_ptr [0]TElf32_Addr + Fd_val TElf32_Word + } +} + +type TElf64_Dyn = struct { + F__ccgo_align [0]uint32 + Fd_tag TElf64_Sxword + Fd_un struct { + F__ccgo_align [0]uint32 + Fd_ptr [0]TElf64_Addr + Fd_val TElf64_Xword + } +} + +type TElf32_Verdef = struct { + Fvd_version TElf32_Half + Fvd_flags TElf32_Half + Fvd_ndx TElf32_Half + Fvd_cnt TElf32_Half + Fvd_hash TElf32_Word + Fvd_aux TElf32_Word + Fvd_next TElf32_Word +} + +type TElf64_Verdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TElf32_Verdaux = struct { + Fvda_name TElf32_Word + Fvda_next TElf32_Word +} + +type TElf64_Verdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +type TElf32_Verneed = struct { + Fvn_version TElf32_Half + Fvn_cnt TElf32_Half + Fvn_file TElf32_Word + Fvn_aux TElf32_Word + Fvn_next TElf32_Word +} + +type TElf64_Verneed = struct { + Fvn_version TElf64_Half + Fvn_cnt TElf64_Half + Fvn_file TElf64_Word + Fvn_aux TElf64_Word + Fvn_next TElf64_Word +} + +type TElf32_Vernaux = struct { + Fvna_hash TElf32_Word + Fvna_flags TElf32_Half + Fvna_other TElf32_Half + Fvna_name TElf32_Word + Fvna_next TElf32_Word +} + +type TElf64_Vernaux = struct { + Fvna_hash TElf64_Word + Fvna_flags TElf64_Half + Fvna_other TElf64_Half + Fvna_name TElf64_Word + Fvna_next TElf64_Word +} + +type TElf32_auxv_t = struct { + Fa_type Tuint32_t + Fa_un struct { + Fa_val Tuint32_t + } +} + +type TElf64_auxv_t = struct { + F__ccgo_align [0]uint32 + Fa_type Tuint64_t + Fa_un struct { + F__ccgo_align [0]uint32 + Fa_val Tuint64_t + } +} + +type TElf32_Nhdr = struct { + Fn_namesz TElf32_Word + Fn_descsz TElf32_Word + Fn_type TElf32_Word +} + +type TElf64_Nhdr = struct { + Fn_namesz TElf64_Word + Fn_descsz TElf64_Word + Fn_type TElf64_Word +} + +type TElf32_Move = struct { + F__ccgo_align [0]uint32 + Fm_value TElf32_Xword + Fm_info TElf32_Word + Fm_poffset TElf32_Word + Fm_repeat TElf32_Half + Fm_stride TElf32_Half + F__ccgo_pad5 [4]byte +} + +type TElf64_Move = struct { + F__ccgo_align [0]uint32 + Fm_value TElf64_Xword + Fm_info TElf64_Xword + Fm_poffset TElf64_Xword + Fm_repeat TElf64_Half + Fm_stride TElf64_Half + F__ccgo_pad5 [4]byte +} + +type TElf32_gptab = struct { + Fgt_entry [0]struct { + Fgt_g_value TElf32_Word + Fgt_bytes TElf32_Word + } + Fgt_header struct { + Fgt_current_g_value TElf32_Word + Fgt_unused TElf32_Word + } +} + +type TElf32_RegInfo = struct { + Fri_gprmask TElf32_Word + Fri_cprmask [4]TElf32_Word + Fri_gp_value TElf32_Sword +} + +type TElf_Options = struct { + Fkind uint8 + Fsize uint8 + Fsection TElf32_Section + Finfo TElf32_Word +} + +type TElf_Options_Hw = struct { + Fhwp_flags1 TElf32_Word + Fhwp_flags2 TElf32_Word +} + +type TElf32_Lib = struct { + Fl_name TElf32_Word + Fl_time_stamp TElf32_Word + Fl_checksum TElf32_Word + Fl_version TElf32_Word + Fl_flags TElf32_Word +} + +type TElf64_Lib = struct { + Fl_name TElf64_Word + Fl_time_stamp TElf64_Word + Fl_checksum TElf64_Word + Fl_version TElf64_Word + Fl_flags TElf64_Word +} + +type TElf32_Conflict = uint32 + +type TElf_MIPS_ABIFlags_v0 = struct { + Fversion TElf32_Half + Fisa_level uint8 + Fisa_rev uint8 + Fgpr_size uint8 + Fcpr1_size uint8 + Fcpr2_size uint8 + Ffp_abi uint8 + Fisa_ext TElf32_Word + Fases TElf32_Word + Fflags1 TElf32_Word + Fflags2 TElf32_Word +} + +const _Val_GNU_MIPS_ABI_FP_ANY = 0 +const _Val_GNU_MIPS_ABI_FP_DOUBLE = 1 +const _Val_GNU_MIPS_ABI_FP_SINGLE = 2 +const _Val_GNU_MIPS_ABI_FP_SOFT = 3 +const _Val_GNU_MIPS_ABI_FP_OLD_64 = 4 +const _Val_GNU_MIPS_ABI_FP_XX = 5 +const _Val_GNU_MIPS_ABI_FP_64 = 6 +const _Val_GNU_MIPS_ABI_FP_64A = 7 +const _Val_GNU_MIPS_ABI_FP_MAX = 7 + +type Tsyscall_arg_t = int32 + +type Twchar_t = uint32 + +type Tdiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tldiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tlldiv_t = struct { + F__ccgo_align [0]uint32 + Fquot int64 + Frem int64 +} + +type t__locale_struct = struct { + Fcat [6]uintptr +} + +type Ttls_module = struct { + Fnext uintptr + Fimage uintptr + Flen1 Tsize_t + Fsize Tsize_t + Falign Tsize_t + Foffset Tsize_t +} + +type t__libc = struct { + Fcan_do_threads uint8 + Fthreaded uint8 + Fsecure uint8 + Fneed_locks int8 + Fthreads_minus_1 int32 + Fauxv uintptr + Ftls_head uintptr + Ftls_size Tsize_t + Ftls_align Tsize_t + Ftls_cnt Tsize_t + Fpage_size Tsize_t + Fglobal_locale t__locale_struct +} + +func Xsysconf(tls *TLS, name int32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(464) + defer tls.Free(464) + var cnt, i, val, v3 int32 + var mem, v1, v6 uint64 + var p5 uintptr + var _ /* lim at bp+0 */ Trlimit + var _ /* set at bp+16 */ [128]uint8 + var _ /* si at bp+144 */ Tsysinfo + _, _, _, _, _, _, _, _ = cnt, i, mem, val, v1, v3, v6, p5 + if uint32(name) >= Uint32FromInt64(502)/Uint32FromInt64(2) || !(_values1[name] != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } else { + if int32(_values1[name]) >= -int32(1) { + return int32(_values1[name]) + } else { + if int32(_values1[name]) < -int32(256) { + Xgetrlimit(tls, int32(_values1[name])&int32(16383), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur == ^Uint64FromUint64(0) { + return -int32(1) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur > uint64(0x7fffffff) { + v1 = uint64(0x7fffffff) + } else { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } + return int32(v1) + } + } + } + switch int32(uint8(_values1[name])) { + case (-Int32FromInt32(256) | Int32FromInt32(1)) & Int32FromInt32(255): + return int32(200809) + case (-Int32FromInt32(256) | Int32FromInt32(2)) & Int32FromInt32(255): + return int32(ARG_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(3)) & Int32FromInt32(255): + return int32(MQ_PRIO_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(4)) & Int32FromInt32(255): + return int32(X__libc.Fpage_size) + case (-Int32FromInt32(256) | Int32FromInt32(5)) & Int32FromInt32(255): + return int32(SEM_VALUE_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(11)) & Int32FromInt32(255): + return int32(DELAYTIMER_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(6)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(7)) & Int32FromInt32(255): + *(*[128]uint8)(unsafe.Pointer(bp + 16)) = [128]uint8{ + 0: uint8(1), + } + X__syscall3(tls, int32(SYS_sched_getaffinity), int32(Int32FromInt32(0)), int32(Uint32FromInt64(128)), int32(bp+16)) + v3 = Int32FromInt32(0) + cnt = v3 + i = v3 + for { + if !(uint32(i) < uint32(128)) { + break + } + for { + if !((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i] != 0) { + break + } + goto _4 + _4: + ; + p5 = bp + 16 + uintptr(i) + *(*uint8)(unsafe.Pointer(p5)) = uint8(int32(*(*uint8)(unsafe.Pointer(p5))) & (int32((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i]) - Int32FromInt32(1))) + cnt++ + } + goto _2 + _2: + ; + i++ + } + return cnt + case (-Int32FromInt32(256) | Int32FromInt32(8)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(9)) & Int32FromInt32(255): + X__lsysinfo(tls, bp+144) + if !((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit != 0) { + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit = uint32(1) + } + if name == int32(_SC_PHYS_PAGES) { + mem = uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ftotalram) + } else { + mem = uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ffreeram + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fbufferram) + } + mem *= uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit) + mem /= uint64(X__libc.Fpage_size) + if mem > uint64(0x7fffffff) { + v6 = uint64(0x7fffffff) + } else { + v6 = mem + } + return int32(v6) + case (-Int32FromInt32(256) | Int32FromInt32(12)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(13)) & Int32FromInt32(255): + val = int32(X__getauxval(tls, uint32(AT_MINSIGSTKSZ))) + if val < int32(MINSIGSTKSZ) { + val = int32(MINSIGSTKSZ) + } + if int32(_values1[name]) == -Int32FromInt32(256)|Int32FromInt32(13) { + val += int32(Int32FromInt32(SIGSTKSZ) - Int32FromInt32(MINSIGSTKSZ)) + } + return val + case (-Int32FromInt32(256) | Int32FromInt32(10)) & Int32FromInt32(255): + return 0 + } + return int32(_values1[name]) +} + +var _values1 = [251]int16{ + 0: int16(-Int32FromInt32(256) | Int32FromInt32(2)), + 1: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NPROC)), + 2: int16(100), + 3: int16(32), + 4: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NOFILE)), + 5: int16(-int32(1)), + 6: int16(TZNAME_MAX), + 7: int16(1), + 8: int16(1), + 9: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 10: int16(-int32(1)), + 11: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 12: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 13: int16(-int32(1)), + 14: int16(-int32(1)), + 15: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 16: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 17: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 18: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 19: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 20: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 21: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 22: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 23: int16(-int32(1)), + 24: int16(-int32(1)), + 25: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 26: int16(-Int32FromInt32(256) | Int32FromInt32(11)), + 27: int16(-int32(1)), + 28: int16(-Int32FromInt32(256) | Int32FromInt32(3)), + 29: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 30: int16(-Int32FromInt32(256) | Int32FromInt32(4)), + 31: int16(Int32FromInt32(_NSIG) - Int32FromInt32(1) - Int32FromInt32(31) - Int32FromInt32(3)), + 32: int16(SEM_NSEMS_MAX), + 33: int16(-Int32FromInt32(256) | Int32FromInt32(5)), + 34: int16(-int32(1)), + 35: int16(-int32(1)), + 36: int16(_POSIX2_BC_BASE_MAX), + 37: int16(_POSIX2_BC_DIM_MAX), + 38: int16(_POSIX2_BC_SCALE_MAX), + 39: int16(_POSIX2_BC_STRING_MAX), + 40: int16(COLL_WEIGHTS_MAX), + 42: int16(-int32(1)), + 43: int16(-int32(1)), + 44: int16(RE_DUP_MAX), + 46: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 47: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 48: int16(-int32(1)), + 49: int16(-int32(1)), + 50: int16(-int32(1)), + 51: int16(-int32(1)), + 52: int16(-int32(1)), + 60: int16(IOV_MAX), + 67: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 68: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 69: int16(-int32(1)), + 70: int16(-int32(1)), + 71: int16(256), + 72: int16(TTY_NAME_MAX), + 73: int16(PTHREAD_DESTRUCTOR_ITERATIONS), + 74: int16(PTHREAD_KEYS_MAX), + 75: int16(PTHREAD_STACK_MIN), + 76: int16(-int32(1)), + 77: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 78: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 79: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 80: int16(-int32(1)), + 81: int16(-int32(1)), + 82: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 83: int16(-Int32FromInt32(256) | Int32FromInt32(6)), + 84: int16(-Int32FromInt32(256) | Int32FromInt32(7)), + 85: int16(-Int32FromInt32(256) | Int32FromInt32(8)), + 86: int16(-Int32FromInt32(256) | Int32FromInt32(9)), + 87: int16(-int32(1)), + 88: int16(-int32(1)), + 89: int16(_XOPEN_VERSION), + 90: int16(_XOPEN_VERSION), + 91: int16(1), + 92: int16(-int32(1)), + 93: int16(1), + 94: int16(1), + 95: int16(-int32(1)), + 97: int16(-int32(1)), + 98: int16(-int32(1)), + 99: int16(-int32(1)), + 100: int16(-int32(1)), + 109: int16(NZERO), + 125: int16(-int32(1)), + 126: int16(1), + 127: int16(-int32(1)), + 128: int16(-int32(1)), + 129: int16(-int32(1)), + 130: int16(-int32(1)), + 131: int16(-int32(1)), + 132: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 133: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 137: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 138: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 139: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 149: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 153: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 154: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 155: int16(1), + 157: int16(1), + 159: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 160: int16(-int32(1)), + 161: int16(-int32(1)), + 164: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 165: int16(-int32(1)), + 168: int16(-int32(1)), + 169: int16(-int32(1)), + 170: int16(-int32(1)), + 171: int16(-int32(1)), + 172: int16(-int32(1)), + 173: int16(SYMLOOP_MAX), + 174: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 175: int16(-int32(1)), + 176: int16(-int32(1)), + 177: int16(1), + 178: int16(-int32(1)), + 179: int16(-int32(1)), + 180: int16(HOST_NAME_MAX), + 181: int16(-int32(1)), + 182: int16(-int32(1)), + 183: int16(-int32(1)), + 184: int16(-int32(1)), + 235: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 236: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 237: int16(-int32(1)), + 238: int16(1), + 239: int16(-int32(1)), + 240: int16(-int32(1)), + 241: int16(-int32(1)), + 242: int16(-int32(1)), + 243: int16(-int32(1)), + 244: int16(-int32(1)), + 245: int16(-int32(1)), + 246: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 247: int16(-int32(1)), + 248: int16(-int32(1)), + 249: int16(-Int32FromInt32(256) | Int32FromInt32(12)), + 250: int16(-Int32FromInt32(256) | Int32FromInt32(13)), +} + +type Tcrypt_data = struct { + Finitialized int32 + F__buf [256]uint8 +} + +func Xcrypt(tls *TLS, key uintptr, salt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v, (%v:)", tls, key, salt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, uintptr(unsafe.Pointer(&_buf))) +} + +/* This buffer is sufficiently large for all + * currently-supported hash types. It needs to be updated if + * longer hashes are added. The cast to struct crypt_data * is + * purely to meet the public API requirements of the crypt_r + * function; the implementation of crypt_r uses the object + * purely as a char buffer. */ +var _buf [128]uint8 + +const BF_N = 16 + +type Tlocale_t = uintptr + +type TBF_word = uint32 + +type TBF_word_signed = int32 + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ + +type TBF_key = [18]TBF_word + +type TBF_ctx = struct { + FPS [0][1042]TBF_word + Fs struct { + FP TBF_key + FS [4][256]TBF_word + } +} + +// C documentation +// +// /* +// * Magic IV for 64 Blowfish encryptions that we do at the end. +// * The string is "OrpheanBeholderScryDoubt" on big-endian. +// */ +var _BF_magic_w = [6]TBF_word{ + 0: uint32(0x4F727068), + 1: uint32(0x65616E42), + 2: uint32(0x65686F6C), + 3: uint32(0x64657253), + 4: uint32(0x63727944), + 5: uint32(0x6F756274), +} + +// C documentation +// +// /* +// * P-box and S-box tables initialized with digits of Pi. +// */ +var _BF_init_state = *(*TBF_ctx)(unsafe.Pointer(&struct { + FP TBF_key + FS [4][256]TBF_word +}{ + FP: TBF_key{ + 0: uint32(0x243f6a88), + 1: uint32(0x85a308d3), + 2: uint32(0x13198a2e), + 3: uint32(0x03707344), + 4: uint32(0xa4093822), + 5: uint32(0x299f31d0), + 6: uint32(0x082efa98), + 7: uint32(0xec4e6c89), + 8: uint32(0x452821e6), + 9: uint32(0x38d01377), + 10: uint32(0xbe5466cf), + 11: uint32(0x34e90c6c), + 12: uint32(0xc0ac29b7), + 13: uint32(0xc97c50dd), + 14: uint32(0x3f84d5b5), + 15: uint32(0xb5470917), + 16: uint32(0x9216d5d9), + 17: uint32(0x8979fb1b), + }, + FS: [4][256]TBF_word{ + 0: { + 0: uint32(0xd1310ba6), + 1: uint32(0x98dfb5ac), + 2: uint32(0x2ffd72db), + 3: uint32(0xd01adfb7), + 4: uint32(0xb8e1afed), + 5: uint32(0x6a267e96), + 6: uint32(0xba7c9045), + 7: uint32(0xf12c7f99), + 8: uint32(0x24a19947), + 9: uint32(0xb3916cf7), + 10: uint32(0x0801f2e2), + 11: uint32(0x858efc16), + 12: uint32(0x636920d8), + 13: uint32(0x71574e69), + 14: uint32(0xa458fea3), + 15: uint32(0xf4933d7e), + 16: uint32(0x0d95748f), + 17: uint32(0x728eb658), + 18: uint32(0x718bcd58), + 19: uint32(0x82154aee), + 20: uint32(0x7b54a41d), + 21: uint32(0xc25a59b5), + 22: uint32(0x9c30d539), + 23: uint32(0x2af26013), + 24: uint32(0xc5d1b023), + 25: uint32(0x286085f0), + 26: uint32(0xca417918), + 27: uint32(0xb8db38ef), + 28: uint32(0x8e79dcb0), + 29: uint32(0x603a180e), + 30: uint32(0x6c9e0e8b), + 31: uint32(0xb01e8a3e), + 32: uint32(0xd71577c1), + 33: uint32(0xbd314b27), + 34: uint32(0x78af2fda), + 35: uint32(0x55605c60), + 36: uint32(0xe65525f3), + 37: uint32(0xaa55ab94), + 38: uint32(0x57489862), + 39: uint32(0x63e81440), + 40: uint32(0x55ca396a), + 41: uint32(0x2aab10b6), + 42: uint32(0xb4cc5c34), + 43: uint32(0x1141e8ce), + 44: uint32(0xa15486af), + 45: uint32(0x7c72e993), + 46: uint32(0xb3ee1411), + 47: uint32(0x636fbc2a), + 48: uint32(0x2ba9c55d), + 49: uint32(0x741831f6), + 50: uint32(0xce5c3e16), + 51: uint32(0x9b87931e), + 52: uint32(0xafd6ba33), + 53: uint32(0x6c24cf5c), + 54: uint32(0x7a325381), + 55: uint32(0x28958677), + 56: uint32(0x3b8f4898), + 57: uint32(0x6b4bb9af), + 58: uint32(0xc4bfe81b), + 59: uint32(0x66282193), + 60: uint32(0x61d809cc), + 61: uint32(0xfb21a991), + 62: uint32(0x487cac60), + 63: uint32(0x5dec8032), + 64: uint32(0xef845d5d), + 65: uint32(0xe98575b1), + 66: uint32(0xdc262302), + 67: uint32(0xeb651b88), + 68: uint32(0x23893e81), + 69: uint32(0xd396acc5), + 70: uint32(0x0f6d6ff3), + 71: uint32(0x83f44239), + 72: uint32(0x2e0b4482), + 73: uint32(0xa4842004), + 74: uint32(0x69c8f04a), + 75: uint32(0x9e1f9b5e), + 76: uint32(0x21c66842), + 77: uint32(0xf6e96c9a), + 78: uint32(0x670c9c61), + 79: uint32(0xabd388f0), + 80: uint32(0x6a51a0d2), + 81: uint32(0xd8542f68), + 82: uint32(0x960fa728), + 83: uint32(0xab5133a3), + 84: uint32(0x6eef0b6c), + 85: uint32(0x137a3be4), + 86: uint32(0xba3bf050), + 87: uint32(0x7efb2a98), + 88: uint32(0xa1f1651d), + 89: uint32(0x39af0176), + 90: uint32(0x66ca593e), + 91: uint32(0x82430e88), + 92: uint32(0x8cee8619), + 93: uint32(0x456f9fb4), + 94: uint32(0x7d84a5c3), + 95: uint32(0x3b8b5ebe), + 96: uint32(0xe06f75d8), + 97: uint32(0x85c12073), + 98: uint32(0x401a449f), + 99: uint32(0x56c16aa6), + 100: uint32(0x4ed3aa62), + 101: uint32(0x363f7706), + 102: uint32(0x1bfedf72), + 103: uint32(0x429b023d), + 104: uint32(0x37d0d724), + 105: uint32(0xd00a1248), + 106: uint32(0xdb0fead3), + 107: uint32(0x49f1c09b), + 108: uint32(0x075372c9), + 109: uint32(0x80991b7b), + 110: uint32(0x25d479d8), + 111: uint32(0xf6e8def7), + 112: uint32(0xe3fe501a), + 113: uint32(0xb6794c3b), + 114: uint32(0x976ce0bd), + 115: uint32(0x04c006ba), + 116: uint32(0xc1a94fb6), + 117: uint32(0x409f60c4), + 118: uint32(0x5e5c9ec2), + 119: uint32(0x196a2463), + 120: uint32(0x68fb6faf), + 121: uint32(0x3e6c53b5), + 122: uint32(0x1339b2eb), + 123: uint32(0x3b52ec6f), + 124: uint32(0x6dfc511f), + 125: uint32(0x9b30952c), + 126: uint32(0xcc814544), + 127: uint32(0xaf5ebd09), + 128: uint32(0xbee3d004), + 129: uint32(0xde334afd), + 130: uint32(0x660f2807), + 131: uint32(0x192e4bb3), + 132: uint32(0xc0cba857), + 133: uint32(0x45c8740f), + 134: uint32(0xd20b5f39), + 135: uint32(0xb9d3fbdb), + 136: uint32(0x5579c0bd), + 137: uint32(0x1a60320a), + 138: uint32(0xd6a100c6), + 139: uint32(0x402c7279), + 140: uint32(0x679f25fe), + 141: uint32(0xfb1fa3cc), + 142: uint32(0x8ea5e9f8), + 143: uint32(0xdb3222f8), + 144: uint32(0x3c7516df), + 145: uint32(0xfd616b15), + 146: uint32(0x2f501ec8), + 147: uint32(0xad0552ab), + 148: uint32(0x323db5fa), + 149: uint32(0xfd238760), + 150: uint32(0x53317b48), + 151: uint32(0x3e00df82), + 152: uint32(0x9e5c57bb), + 153: uint32(0xca6f8ca0), + 154: uint32(0x1a87562e), + 155: uint32(0xdf1769db), + 156: uint32(0xd542a8f6), + 157: uint32(0x287effc3), + 158: uint32(0xac6732c6), + 159: uint32(0x8c4f5573), + 160: uint32(0x695b27b0), + 161: uint32(0xbbca58c8), + 162: uint32(0xe1ffa35d), + 163: uint32(0xb8f011a0), + 164: uint32(0x10fa3d98), + 165: uint32(0xfd2183b8), + 166: uint32(0x4afcb56c), + 167: uint32(0x2dd1d35b), + 168: uint32(0x9a53e479), + 169: uint32(0xb6f84565), + 170: uint32(0xd28e49bc), + 171: uint32(0x4bfb9790), + 172: uint32(0xe1ddf2da), + 173: uint32(0xa4cb7e33), + 174: uint32(0x62fb1341), + 175: uint32(0xcee4c6e8), + 176: uint32(0xef20cada), + 177: uint32(0x36774c01), + 178: uint32(0xd07e9efe), + 179: uint32(0x2bf11fb4), + 180: uint32(0x95dbda4d), + 181: uint32(0xae909198), + 182: uint32(0xeaad8e71), + 183: uint32(0x6b93d5a0), + 184: uint32(0xd08ed1d0), + 185: uint32(0xafc725e0), + 186: uint32(0x8e3c5b2f), + 187: uint32(0x8e7594b7), + 188: uint32(0x8ff6e2fb), + 189: uint32(0xf2122b64), + 190: uint32(0x8888b812), + 191: uint32(0x900df01c), + 192: uint32(0x4fad5ea0), + 193: uint32(0x688fc31c), + 194: uint32(0xd1cff191), + 195: uint32(0xb3a8c1ad), + 196: uint32(0x2f2f2218), + 197: uint32(0xbe0e1777), + 198: uint32(0xea752dfe), + 199: uint32(0x8b021fa1), + 200: uint32(0xe5a0cc0f), + 201: uint32(0xb56f74e8), + 202: uint32(0x18acf3d6), + 203: uint32(0xce89e299), + 204: uint32(0xb4a84fe0), + 205: uint32(0xfd13e0b7), + 206: uint32(0x7cc43b81), + 207: uint32(0xd2ada8d9), + 208: uint32(0x165fa266), + 209: uint32(0x80957705), + 210: uint32(0x93cc7314), + 211: uint32(0x211a1477), + 212: uint32(0xe6ad2065), + 213: uint32(0x77b5fa86), + 214: uint32(0xc75442f5), + 215: uint32(0xfb9d35cf), + 216: uint32(0xebcdaf0c), + 217: uint32(0x7b3e89a0), + 218: uint32(0xd6411bd3), + 219: uint32(0xae1e7e49), + 220: uint32(0x00250e2d), + 221: uint32(0x2071b35e), + 222: uint32(0x226800bb), + 223: uint32(0x57b8e0af), + 224: uint32(0x2464369b), + 225: uint32(0xf009b91e), + 226: uint32(0x5563911d), + 227: uint32(0x59dfa6aa), + 228: uint32(0x78c14389), + 229: uint32(0xd95a537f), + 230: uint32(0x207d5ba2), + 231: uint32(0x02e5b9c5), + 232: uint32(0x83260376), + 233: uint32(0x6295cfa9), + 234: uint32(0x11c81968), + 235: uint32(0x4e734a41), + 236: uint32(0xb3472dca), + 237: uint32(0x7b14a94a), + 238: uint32(0x1b510052), + 239: uint32(0x9a532915), + 240: uint32(0xd60f573f), + 241: uint32(0xbc9bc6e4), + 242: uint32(0x2b60a476), + 243: uint32(0x81e67400), + 244: uint32(0x08ba6fb5), + 245: uint32(0x571be91f), + 246: uint32(0xf296ec6b), + 247: uint32(0x2a0dd915), + 248: uint32(0xb6636521), + 249: uint32(0xe7b9f9b6), + 250: uint32(0xff34052e), + 251: uint32(0xc5855664), + 252: uint32(0x53b02d5d), + 253: uint32(0xa99f8fa1), + 254: uint32(0x08ba4799), + 255: uint32(0x6e85076a), + }, + 1: { + 0: uint32(0x4b7a70e9), + 1: uint32(0xb5b32944), + 2: uint32(0xdb75092e), + 3: uint32(0xc4192623), + 4: uint32(0xad6ea6b0), + 5: uint32(0x49a7df7d), + 6: uint32(0x9cee60b8), + 7: uint32(0x8fedb266), + 8: uint32(0xecaa8c71), + 9: uint32(0x699a17ff), + 10: uint32(0x5664526c), + 11: uint32(0xc2b19ee1), + 12: uint32(0x193602a5), + 13: uint32(0x75094c29), + 14: uint32(0xa0591340), + 15: uint32(0xe4183a3e), + 16: uint32(0x3f54989a), + 17: uint32(0x5b429d65), + 18: uint32(0x6b8fe4d6), + 19: uint32(0x99f73fd6), + 20: uint32(0xa1d29c07), + 21: uint32(0xefe830f5), + 22: uint32(0x4d2d38e6), + 23: uint32(0xf0255dc1), + 24: uint32(0x4cdd2086), + 25: uint32(0x8470eb26), + 26: uint32(0x6382e9c6), + 27: uint32(0x021ecc5e), + 28: uint32(0x09686b3f), + 29: uint32(0x3ebaefc9), + 30: uint32(0x3c971814), + 31: uint32(0x6b6a70a1), + 32: uint32(0x687f3584), + 33: uint32(0x52a0e286), + 34: uint32(0xb79c5305), + 35: uint32(0xaa500737), + 36: uint32(0x3e07841c), + 37: uint32(0x7fdeae5c), + 38: uint32(0x8e7d44ec), + 39: uint32(0x5716f2b8), + 40: uint32(0xb03ada37), + 41: uint32(0xf0500c0d), + 42: uint32(0xf01c1f04), + 43: uint32(0x0200b3ff), + 44: uint32(0xae0cf51a), + 45: uint32(0x3cb574b2), + 46: uint32(0x25837a58), + 47: uint32(0xdc0921bd), + 48: uint32(0xd19113f9), + 49: uint32(0x7ca92ff6), + 50: uint32(0x94324773), + 51: uint32(0x22f54701), + 52: uint32(0x3ae5e581), + 53: uint32(0x37c2dadc), + 54: uint32(0xc8b57634), + 55: uint32(0x9af3dda7), + 56: uint32(0xa9446146), + 57: uint32(0x0fd0030e), + 58: uint32(0xecc8c73e), + 59: uint32(0xa4751e41), + 60: uint32(0xe238cd99), + 61: uint32(0x3bea0e2f), + 62: uint32(0x3280bba1), + 63: uint32(0x183eb331), + 64: uint32(0x4e548b38), + 65: uint32(0x4f6db908), + 66: uint32(0x6f420d03), + 67: uint32(0xf60a04bf), + 68: uint32(0x2cb81290), + 69: uint32(0x24977c79), + 70: uint32(0x5679b072), + 71: uint32(0xbcaf89af), + 72: uint32(0xde9a771f), + 73: uint32(0xd9930810), + 74: uint32(0xb38bae12), + 75: uint32(0xdccf3f2e), + 76: uint32(0x5512721f), + 77: uint32(0x2e6b7124), + 78: uint32(0x501adde6), + 79: uint32(0x9f84cd87), + 80: uint32(0x7a584718), + 81: uint32(0x7408da17), + 82: uint32(0xbc9f9abc), + 83: uint32(0xe94b7d8c), + 84: uint32(0xec7aec3a), + 85: uint32(0xdb851dfa), + 86: uint32(0x63094366), + 87: uint32(0xc464c3d2), + 88: uint32(0xef1c1847), + 89: uint32(0x3215d908), + 90: uint32(0xdd433b37), + 91: uint32(0x24c2ba16), + 92: uint32(0x12a14d43), + 93: uint32(0x2a65c451), + 94: uint32(0x50940002), + 95: uint32(0x133ae4dd), + 96: uint32(0x71dff89e), + 97: uint32(0x10314e55), + 98: uint32(0x81ac77d6), + 99: uint32(0x5f11199b), + 100: uint32(0x043556f1), + 101: uint32(0xd7a3c76b), + 102: uint32(0x3c11183b), + 103: uint32(0x5924a509), + 104: uint32(0xf28fe6ed), + 105: uint32(0x97f1fbfa), + 106: uint32(0x9ebabf2c), + 107: uint32(0x1e153c6e), + 108: uint32(0x86e34570), + 109: uint32(0xeae96fb1), + 110: uint32(0x860e5e0a), + 111: uint32(0x5a3e2ab3), + 112: uint32(0x771fe71c), + 113: uint32(0x4e3d06fa), + 114: uint32(0x2965dcb9), + 115: uint32(0x99e71d0f), + 116: uint32(0x803e89d6), + 117: uint32(0x5266c825), + 118: uint32(0x2e4cc978), + 119: uint32(0x9c10b36a), + 120: uint32(0xc6150eba), + 121: uint32(0x94e2ea78), + 122: uint32(0xa5fc3c53), + 123: uint32(0x1e0a2df4), + 124: uint32(0xf2f74ea7), + 125: uint32(0x361d2b3d), + 126: uint32(0x1939260f), + 127: uint32(0x19c27960), + 128: uint32(0x5223a708), + 129: uint32(0xf71312b6), + 130: uint32(0xebadfe6e), + 131: uint32(0xeac31f66), + 132: uint32(0xe3bc4595), + 133: uint32(0xa67bc883), + 134: uint32(0xb17f37d1), + 135: uint32(0x018cff28), + 136: uint32(0xc332ddef), + 137: uint32(0xbe6c5aa5), + 138: uint32(0x65582185), + 139: uint32(0x68ab9802), + 140: uint32(0xeecea50f), + 141: uint32(0xdb2f953b), + 142: uint32(0x2aef7dad), + 143: uint32(0x5b6e2f84), + 144: uint32(0x1521b628), + 145: uint32(0x29076170), + 146: uint32(0xecdd4775), + 147: uint32(0x619f1510), + 148: uint32(0x13cca830), + 149: uint32(0xeb61bd96), + 150: uint32(0x0334fe1e), + 151: uint32(0xaa0363cf), + 152: uint32(0xb5735c90), + 153: uint32(0x4c70a239), + 154: uint32(0xd59e9e0b), + 155: uint32(0xcbaade14), + 156: uint32(0xeecc86bc), + 157: uint32(0x60622ca7), + 158: uint32(0x9cab5cab), + 159: uint32(0xb2f3846e), + 160: uint32(0x648b1eaf), + 161: uint32(0x19bdf0ca), + 162: uint32(0xa02369b9), + 163: uint32(0x655abb50), + 164: uint32(0x40685a32), + 165: uint32(0x3c2ab4b3), + 166: uint32(0x319ee9d5), + 167: uint32(0xc021b8f7), + 168: uint32(0x9b540b19), + 169: uint32(0x875fa099), + 170: uint32(0x95f7997e), + 171: uint32(0x623d7da8), + 172: uint32(0xf837889a), + 173: uint32(0x97e32d77), + 174: uint32(0x11ed935f), + 175: uint32(0x16681281), + 176: uint32(0x0e358829), + 177: uint32(0xc7e61fd6), + 178: uint32(0x96dedfa1), + 179: uint32(0x7858ba99), + 180: uint32(0x57f584a5), + 181: uint32(0x1b227263), + 182: uint32(0x9b83c3ff), + 183: uint32(0x1ac24696), + 184: uint32(0xcdb30aeb), + 185: uint32(0x532e3054), + 186: uint32(0x8fd948e4), + 187: uint32(0x6dbc3128), + 188: uint32(0x58ebf2ef), + 189: uint32(0x34c6ffea), + 190: uint32(0xfe28ed61), + 191: uint32(0xee7c3c73), + 192: uint32(0x5d4a14d9), + 193: uint32(0xe864b7e3), + 194: uint32(0x42105d14), + 195: uint32(0x203e13e0), + 196: uint32(0x45eee2b6), + 197: uint32(0xa3aaabea), + 198: uint32(0xdb6c4f15), + 199: uint32(0xfacb4fd0), + 200: uint32(0xc742f442), + 201: uint32(0xef6abbb5), + 202: uint32(0x654f3b1d), + 203: uint32(0x41cd2105), + 204: uint32(0xd81e799e), + 205: uint32(0x86854dc7), + 206: uint32(0xe44b476a), + 207: uint32(0x3d816250), + 208: uint32(0xcf62a1f2), + 209: uint32(0x5b8d2646), + 210: uint32(0xfc8883a0), + 211: uint32(0xc1c7b6a3), + 212: uint32(0x7f1524c3), + 213: uint32(0x69cb7492), + 214: uint32(0x47848a0b), + 215: uint32(0x5692b285), + 216: uint32(0x095bbf00), + 217: uint32(0xad19489d), + 218: uint32(0x1462b174), + 219: uint32(0x23820e00), + 220: uint32(0x58428d2a), + 221: uint32(0x0c55f5ea), + 222: uint32(0x1dadf43e), + 223: uint32(0x233f7061), + 224: uint32(0x3372f092), + 225: uint32(0x8d937e41), + 226: uint32(0xd65fecf1), + 227: uint32(0x6c223bdb), + 228: uint32(0x7cde3759), + 229: uint32(0xcbee7460), + 230: uint32(0x4085f2a7), + 231: uint32(0xce77326e), + 232: uint32(0xa6078084), + 233: uint32(0x19f8509e), + 234: uint32(0xe8efd855), + 235: uint32(0x61d99735), + 236: uint32(0xa969a7aa), + 237: uint32(0xc50c06c2), + 238: uint32(0x5a04abfc), + 239: uint32(0x800bcadc), + 240: uint32(0x9e447a2e), + 241: uint32(0xc3453484), + 242: uint32(0xfdd56705), + 243: uint32(0x0e1e9ec9), + 244: uint32(0xdb73dbd3), + 245: uint32(0x105588cd), + 246: uint32(0x675fda79), + 247: uint32(0xe3674340), + 248: uint32(0xc5c43465), + 249: uint32(0x713e38d8), + 250: uint32(0x3d28f89e), + 251: uint32(0xf16dff20), + 252: uint32(0x153e21e7), + 253: uint32(0x8fb03d4a), + 254: uint32(0xe6e39f2b), + 255: uint32(0xdb83adf7), + }, + 2: { + 0: uint32(0xe93d5a68), + 1: uint32(0x948140f7), + 2: uint32(0xf64c261c), + 3: uint32(0x94692934), + 4: uint32(0x411520f7), + 5: uint32(0x7602d4f7), + 6: uint32(0xbcf46b2e), + 7: uint32(0xd4a20068), + 8: uint32(0xd4082471), + 9: uint32(0x3320f46a), + 10: uint32(0x43b7d4b7), + 11: uint32(0x500061af), + 12: uint32(0x1e39f62e), + 13: uint32(0x97244546), + 14: uint32(0x14214f74), + 15: uint32(0xbf8b8840), + 16: uint32(0x4d95fc1d), + 17: uint32(0x96b591af), + 18: uint32(0x70f4ddd3), + 19: uint32(0x66a02f45), + 20: uint32(0xbfbc09ec), + 21: uint32(0x03bd9785), + 22: uint32(0x7fac6dd0), + 23: uint32(0x31cb8504), + 24: uint32(0x96eb27b3), + 25: uint32(0x55fd3941), + 26: uint32(0xda2547e6), + 27: uint32(0xabca0a9a), + 28: uint32(0x28507825), + 29: uint32(0x530429f4), + 30: uint32(0x0a2c86da), + 31: uint32(0xe9b66dfb), + 32: uint32(0x68dc1462), + 33: uint32(0xd7486900), + 34: uint32(0x680ec0a4), + 35: uint32(0x27a18dee), + 36: uint32(0x4f3ffea2), + 37: uint32(0xe887ad8c), + 38: uint32(0xb58ce006), + 39: uint32(0x7af4d6b6), + 40: uint32(0xaace1e7c), + 41: uint32(0xd3375fec), + 42: uint32(0xce78a399), + 43: uint32(0x406b2a42), + 44: uint32(0x20fe9e35), + 45: uint32(0xd9f385b9), + 46: uint32(0xee39d7ab), + 47: uint32(0x3b124e8b), + 48: uint32(0x1dc9faf7), + 49: uint32(0x4b6d1856), + 50: uint32(0x26a36631), + 51: uint32(0xeae397b2), + 52: uint32(0x3a6efa74), + 53: uint32(0xdd5b4332), + 54: uint32(0x6841e7f7), + 55: uint32(0xca7820fb), + 56: uint32(0xfb0af54e), + 57: uint32(0xd8feb397), + 58: uint32(0x454056ac), + 59: uint32(0xba489527), + 60: uint32(0x55533a3a), + 61: uint32(0x20838d87), + 62: uint32(0xfe6ba9b7), + 63: uint32(0xd096954b), + 64: uint32(0x55a867bc), + 65: uint32(0xa1159a58), + 66: uint32(0xcca92963), + 67: uint32(0x99e1db33), + 68: uint32(0xa62a4a56), + 69: uint32(0x3f3125f9), + 70: uint32(0x5ef47e1c), + 71: uint32(0x9029317c), + 72: uint32(0xfdf8e802), + 73: uint32(0x04272f70), + 74: uint32(0x80bb155c), + 75: uint32(0x05282ce3), + 76: uint32(0x95c11548), + 77: uint32(0xe4c66d22), + 78: uint32(0x48c1133f), + 79: uint32(0xc70f86dc), + 80: uint32(0x07f9c9ee), + 81: uint32(0x41041f0f), + 82: uint32(0x404779a4), + 83: uint32(0x5d886e17), + 84: uint32(0x325f51eb), + 85: uint32(0xd59bc0d1), + 86: uint32(0xf2bcc18f), + 87: uint32(0x41113564), + 88: uint32(0x257b7834), + 89: uint32(0x602a9c60), + 90: uint32(0xdff8e8a3), + 91: uint32(0x1f636c1b), + 92: uint32(0x0e12b4c2), + 93: uint32(0x02e1329e), + 94: uint32(0xaf664fd1), + 95: uint32(0xcad18115), + 96: uint32(0x6b2395e0), + 97: uint32(0x333e92e1), + 98: uint32(0x3b240b62), + 99: uint32(0xeebeb922), + 100: uint32(0x85b2a20e), + 101: uint32(0xe6ba0d99), + 102: uint32(0xde720c8c), + 103: uint32(0x2da2f728), + 104: uint32(0xd0127845), + 105: uint32(0x95b794fd), + 106: uint32(0x647d0862), + 107: uint32(0xe7ccf5f0), + 108: uint32(0x5449a36f), + 109: uint32(0x877d48fa), + 110: uint32(0xc39dfd27), + 111: uint32(0xf33e8d1e), + 112: uint32(0x0a476341), + 113: uint32(0x992eff74), + 114: uint32(0x3a6f6eab), + 115: uint32(0xf4f8fd37), + 116: uint32(0xa812dc60), + 117: uint32(0xa1ebddf8), + 118: uint32(0x991be14c), + 119: uint32(0xdb6e6b0d), + 120: uint32(0xc67b5510), + 121: uint32(0x6d672c37), + 122: uint32(0x2765d43b), + 123: uint32(0xdcd0e804), + 124: uint32(0xf1290dc7), + 125: uint32(0xcc00ffa3), + 126: uint32(0xb5390f92), + 127: uint32(0x690fed0b), + 128: uint32(0x667b9ffb), + 129: uint32(0xcedb7d9c), + 130: uint32(0xa091cf0b), + 131: uint32(0xd9155ea3), + 132: uint32(0xbb132f88), + 133: uint32(0x515bad24), + 134: uint32(0x7b9479bf), + 135: uint32(0x763bd6eb), + 136: uint32(0x37392eb3), + 137: uint32(0xcc115979), + 138: uint32(0x8026e297), + 139: uint32(0xf42e312d), + 140: uint32(0x6842ada7), + 141: uint32(0xc66a2b3b), + 142: uint32(0x12754ccc), + 143: uint32(0x782ef11c), + 144: uint32(0x6a124237), + 145: uint32(0xb79251e7), + 146: uint32(0x06a1bbe6), + 147: uint32(0x4bfb6350), + 148: uint32(0x1a6b1018), + 149: uint32(0x11caedfa), + 150: uint32(0x3d25bdd8), + 151: uint32(0xe2e1c3c9), + 152: uint32(0x44421659), + 153: uint32(0x0a121386), + 154: uint32(0xd90cec6e), + 155: uint32(0xd5abea2a), + 156: uint32(0x64af674e), + 157: uint32(0xda86a85f), + 158: uint32(0xbebfe988), + 159: uint32(0x64e4c3fe), + 160: uint32(0x9dbc8057), + 161: uint32(0xf0f7c086), + 162: uint32(0x60787bf8), + 163: uint32(0x6003604d), + 164: uint32(0xd1fd8346), + 165: uint32(0xf6381fb0), + 166: uint32(0x7745ae04), + 167: uint32(0xd736fccc), + 168: uint32(0x83426b33), + 169: uint32(0xf01eab71), + 170: uint32(0xb0804187), + 171: uint32(0x3c005e5f), + 172: uint32(0x77a057be), + 173: uint32(0xbde8ae24), + 174: uint32(0x55464299), + 175: uint32(0xbf582e61), + 176: uint32(0x4e58f48f), + 177: uint32(0xf2ddfda2), + 178: uint32(0xf474ef38), + 179: uint32(0x8789bdc2), + 180: uint32(0x5366f9c3), + 181: uint32(0xc8b38e74), + 182: uint32(0xb475f255), + 183: uint32(0x46fcd9b9), + 184: uint32(0x7aeb2661), + 185: uint32(0x8b1ddf84), + 186: uint32(0x846a0e79), + 187: uint32(0x915f95e2), + 188: uint32(0x466e598e), + 189: uint32(0x20b45770), + 190: uint32(0x8cd55591), + 191: uint32(0xc902de4c), + 192: uint32(0xb90bace1), + 193: uint32(0xbb8205d0), + 194: uint32(0x11a86248), + 195: uint32(0x7574a99e), + 196: uint32(0xb77f19b6), + 197: uint32(0xe0a9dc09), + 198: uint32(0x662d09a1), + 199: uint32(0xc4324633), + 200: uint32(0xe85a1f02), + 201: uint32(0x09f0be8c), + 202: uint32(0x4a99a025), + 203: uint32(0x1d6efe10), + 204: uint32(0x1ab93d1d), + 205: uint32(0x0ba5a4df), + 206: uint32(0xa186f20f), + 207: uint32(0x2868f169), + 208: uint32(0xdcb7da83), + 209: uint32(0x573906fe), + 210: uint32(0xa1e2ce9b), + 211: uint32(0x4fcd7f52), + 212: uint32(0x50115e01), + 213: uint32(0xa70683fa), + 214: uint32(0xa002b5c4), + 215: uint32(0x0de6d027), + 216: uint32(0x9af88c27), + 217: uint32(0x773f8641), + 218: uint32(0xc3604c06), + 219: uint32(0x61a806b5), + 220: uint32(0xf0177a28), + 221: uint32(0xc0f586e0), + 222: uint32(0x006058aa), + 223: uint32(0x30dc7d62), + 224: uint32(0x11e69ed7), + 225: uint32(0x2338ea63), + 226: uint32(0x53c2dd94), + 227: uint32(0xc2c21634), + 228: uint32(0xbbcbee56), + 229: uint32(0x90bcb6de), + 230: uint32(0xebfc7da1), + 231: uint32(0xce591d76), + 232: uint32(0x6f05e409), + 233: uint32(0x4b7c0188), + 234: uint32(0x39720a3d), + 235: uint32(0x7c927c24), + 236: uint32(0x86e3725f), + 237: uint32(0x724d9db9), + 238: uint32(0x1ac15bb4), + 239: uint32(0xd39eb8fc), + 240: uint32(0xed545578), + 241: uint32(0x08fca5b5), + 242: uint32(0xd83d7cd3), + 243: uint32(0x4dad0fc4), + 244: uint32(0x1e50ef5e), + 245: uint32(0xb161e6f8), + 246: uint32(0xa28514d9), + 247: uint32(0x6c51133c), + 248: uint32(0x6fd5c7e7), + 249: uint32(0x56e14ec4), + 250: uint32(0x362abfce), + 251: uint32(0xddc6c837), + 252: uint32(0xd79a3234), + 253: uint32(0x92638212), + 254: uint32(0x670efa8e), + 255: uint32(0x406000e0), + }, + 3: { + 0: uint32(0x3a39ce37), + 1: uint32(0xd3faf5cf), + 2: uint32(0xabc27737), + 3: uint32(0x5ac52d1b), + 4: uint32(0x5cb0679e), + 5: uint32(0x4fa33742), + 6: uint32(0xd3822740), + 7: uint32(0x99bc9bbe), + 8: uint32(0xd5118e9d), + 9: uint32(0xbf0f7315), + 10: uint32(0xd62d1c7e), + 11: uint32(0xc700c47b), + 12: uint32(0xb78c1b6b), + 13: uint32(0x21a19045), + 14: uint32(0xb26eb1be), + 15: uint32(0x6a366eb4), + 16: uint32(0x5748ab2f), + 17: uint32(0xbc946e79), + 18: uint32(0xc6a376d2), + 19: uint32(0x6549c2c8), + 20: uint32(0x530ff8ee), + 21: uint32(0x468dde7d), + 22: uint32(0xd5730a1d), + 23: uint32(0x4cd04dc6), + 24: uint32(0x2939bbdb), + 25: uint32(0xa9ba4650), + 26: uint32(0xac9526e8), + 27: uint32(0xbe5ee304), + 28: uint32(0xa1fad5f0), + 29: uint32(0x6a2d519a), + 30: uint32(0x63ef8ce2), + 31: uint32(0x9a86ee22), + 32: uint32(0xc089c2b8), + 33: uint32(0x43242ef6), + 34: uint32(0xa51e03aa), + 35: uint32(0x9cf2d0a4), + 36: uint32(0x83c061ba), + 37: uint32(0x9be96a4d), + 38: uint32(0x8fe51550), + 39: uint32(0xba645bd6), + 40: uint32(0x2826a2f9), + 41: uint32(0xa73a3ae1), + 42: uint32(0x4ba99586), + 43: uint32(0xef5562e9), + 44: uint32(0xc72fefd3), + 45: uint32(0xf752f7da), + 46: uint32(0x3f046f69), + 47: uint32(0x77fa0a59), + 48: uint32(0x80e4a915), + 49: uint32(0x87b08601), + 50: uint32(0x9b09e6ad), + 51: uint32(0x3b3ee593), + 52: uint32(0xe990fd5a), + 53: uint32(0x9e34d797), + 54: uint32(0x2cf0b7d9), + 55: uint32(0x022b8b51), + 56: uint32(0x96d5ac3a), + 57: uint32(0x017da67d), + 58: uint32(0xd1cf3ed6), + 59: uint32(0x7c7d2d28), + 60: uint32(0x1f9f25cf), + 61: uint32(0xadf2b89b), + 62: uint32(0x5ad6b472), + 63: uint32(0x5a88f54c), + 64: uint32(0xe029ac71), + 65: uint32(0xe019a5e6), + 66: uint32(0x47b0acfd), + 67: uint32(0xed93fa9b), + 68: uint32(0xe8d3c48d), + 69: uint32(0x283b57cc), + 70: uint32(0xf8d56629), + 71: uint32(0x79132e28), + 72: uint32(0x785f0191), + 73: uint32(0xed756055), + 74: uint32(0xf7960e44), + 75: uint32(0xe3d35e8c), + 76: uint32(0x15056dd4), + 77: uint32(0x88f46dba), + 78: uint32(0x03a16125), + 79: uint32(0x0564f0bd), + 80: uint32(0xc3eb9e15), + 81: uint32(0x3c9057a2), + 82: uint32(0x97271aec), + 83: uint32(0xa93a072a), + 84: uint32(0x1b3f6d9b), + 85: uint32(0x1e6321f5), + 86: uint32(0xf59c66fb), + 87: uint32(0x26dcf319), + 88: uint32(0x7533d928), + 89: uint32(0xb155fdf5), + 90: uint32(0x03563482), + 91: uint32(0x8aba3cbb), + 92: uint32(0x28517711), + 93: uint32(0xc20ad9f8), + 94: uint32(0xabcc5167), + 95: uint32(0xccad925f), + 96: uint32(0x4de81751), + 97: uint32(0x3830dc8e), + 98: uint32(0x379d5862), + 99: uint32(0x9320f991), + 100: uint32(0xea7a90c2), + 101: uint32(0xfb3e7bce), + 102: uint32(0x5121ce64), + 103: uint32(0x774fbe32), + 104: uint32(0xa8b6e37e), + 105: uint32(0xc3293d46), + 106: uint32(0x48de5369), + 107: uint32(0x6413e680), + 108: uint32(0xa2ae0810), + 109: uint32(0xdd6db224), + 110: uint32(0x69852dfd), + 111: uint32(0x09072166), + 112: uint32(0xb39a460a), + 113: uint32(0x6445c0dd), + 114: uint32(0x586cdecf), + 115: uint32(0x1c20c8ae), + 116: uint32(0x5bbef7dd), + 117: uint32(0x1b588d40), + 118: uint32(0xccd2017f), + 119: uint32(0x6bb4e3bb), + 120: uint32(0xdda26a7e), + 121: uint32(0x3a59ff45), + 122: uint32(0x3e350a44), + 123: uint32(0xbcb4cdd5), + 124: uint32(0x72eacea8), + 125: uint32(0xfa6484bb), + 126: uint32(0x8d6612ae), + 127: uint32(0xbf3c6f47), + 128: uint32(0xd29be463), + 129: uint32(0x542f5d9e), + 130: uint32(0xaec2771b), + 131: uint32(0xf64e6370), + 132: uint32(0x740e0d8d), + 133: uint32(0xe75b1357), + 134: uint32(0xf8721671), + 135: uint32(0xaf537d5d), + 136: uint32(0x4040cb08), + 137: uint32(0x4eb4e2cc), + 138: uint32(0x34d2466a), + 139: uint32(0x0115af84), + 140: uint32(0xe1b00428), + 141: uint32(0x95983a1d), + 142: uint32(0x06b89fb4), + 143: uint32(0xce6ea048), + 144: uint32(0x6f3f3b82), + 145: uint32(0x3520ab82), + 146: uint32(0x011a1d4b), + 147: uint32(0x277227f8), + 148: uint32(0x611560b1), + 149: uint32(0xe7933fdc), + 150: uint32(0xbb3a792b), + 151: uint32(0x344525bd), + 152: uint32(0xa08839e1), + 153: uint32(0x51ce794b), + 154: uint32(0x2f32c9b7), + 155: uint32(0xa01fbac9), + 156: uint32(0xe01cc87e), + 157: uint32(0xbcc7d1f6), + 158: uint32(0xcf0111c3), + 159: uint32(0xa1e8aac7), + 160: uint32(0x1a908749), + 161: uint32(0xd44fbd9a), + 162: uint32(0xd0dadecb), + 163: uint32(0xd50ada38), + 164: uint32(0x0339c32a), + 165: uint32(0xc6913667), + 166: uint32(0x8df9317c), + 167: uint32(0xe0b12b4f), + 168: uint32(0xf79e59b7), + 169: uint32(0x43f5bb3a), + 170: uint32(0xf2d519ff), + 171: uint32(0x27d9459c), + 172: uint32(0xbf97222c), + 173: uint32(0x15e6fc2a), + 174: uint32(0x0f91fc71), + 175: uint32(0x9b941525), + 176: uint32(0xfae59361), + 177: uint32(0xceb69ceb), + 178: uint32(0xc2a86459), + 179: uint32(0x12baa8d1), + 180: uint32(0xb6c1075e), + 181: uint32(0xe3056a0c), + 182: uint32(0x10d25065), + 183: uint32(0xcb03a442), + 184: uint32(0xe0ec6e0e), + 185: uint32(0x1698db3b), + 186: uint32(0x4c98a0be), + 187: uint32(0x3278e964), + 188: uint32(0x9f1f9532), + 189: uint32(0xe0d392df), + 190: uint32(0xd3a0342b), + 191: uint32(0x8971f21e), + 192: uint32(0x1b0a7441), + 193: uint32(0x4ba3348c), + 194: uint32(0xc5be7120), + 195: uint32(0xc37632d8), + 196: uint32(0xdf359f8d), + 197: uint32(0x9b992f2e), + 198: uint32(0xe60b6f47), + 199: uint32(0x0fe3f11d), + 200: uint32(0xe54cda54), + 201: uint32(0x1edad891), + 202: uint32(0xce6279cf), + 203: uint32(0xcd3e7e6f), + 204: uint32(0x1618b166), + 205: uint32(0xfd2c1d05), + 206: uint32(0x848fd2c5), + 207: uint32(0xf6fb2299), + 208: uint32(0xf523f357), + 209: uint32(0xa6327623), + 210: uint32(0x93a83531), + 211: uint32(0x56cccd02), + 212: uint32(0xacf08162), + 213: uint32(0x5a75ebb5), + 214: uint32(0x6e163697), + 215: uint32(0x88d273cc), + 216: uint32(0xde966292), + 217: uint32(0x81b949d0), + 218: uint32(0x4c50901b), + 219: uint32(0x71c65614), + 220: uint32(0xe6c6c7bd), + 221: uint32(0x327a140a), + 222: uint32(0x45e1d006), + 223: uint32(0xc3f27b9a), + 224: uint32(0xc9aa53fd), + 225: uint32(0x62a80f00), + 226: uint32(0xbb25bfe2), + 227: uint32(0x35bdd2f6), + 228: uint32(0x71126905), + 229: uint32(0xb2040222), + 230: uint32(0xb6cbcf7c), + 231: uint32(0xcd769c2b), + 232: uint32(0x53113ec0), + 233: uint32(0x1640e3d3), + 234: uint32(0x38abbd60), + 235: uint32(0x2547adf0), + 236: uint32(0xba38209c), + 237: uint32(0xf746ce76), + 238: uint32(0x77afa1c5), + 239: uint32(0x20756060), + 240: uint32(0x85cbfe4e), + 241: uint32(0x8ae88dd8), + 242: uint32(0x7aaaf9b0), + 243: uint32(0x4cf9aa7e), + 244: uint32(0x1948c25c), + 245: uint32(0x02fb8a8c), + 246: uint32(0x01c36ae4), + 247: uint32(0xd6ebe1f9), + 248: uint32(0x90d4f869), + 249: uint32(0xa65cdea0), + 250: uint32(0x3f09252d), + 251: uint32(0xc208e69f), + 252: uint32(0xb74e6132), + 253: uint32(0xce77e25b), + 254: uint32(0x578fdfe3), + 255: uint32(0x3ac372e6), + }, + }, +})) + +var _BF_itoa64 = [65]uint8{'.', '/', '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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +var _BF_atoi64 = [96]uint8{ + 0: uint8(64), + 1: uint8(64), + 2: uint8(64), + 3: uint8(64), + 4: uint8(64), + 5: uint8(64), + 6: uint8(64), + 7: uint8(64), + 8: uint8(64), + 9: uint8(64), + 10: uint8(64), + 11: uint8(64), + 12: uint8(64), + 13: uint8(64), + 15: uint8(1), + 16: uint8(54), + 17: uint8(55), + 18: uint8(56), + 19: uint8(57), + 20: uint8(58), + 21: uint8(59), + 22: uint8(60), + 23: uint8(61), + 24: uint8(62), + 25: uint8(63), + 26: uint8(64), + 27: uint8(64), + 28: uint8(64), + 29: uint8(64), + 30: uint8(64), + 31: uint8(64), + 32: uint8(64), + 33: uint8(2), + 34: uint8(3), + 35: uint8(4), + 36: uint8(5), + 37: uint8(6), + 38: uint8(7), + 39: uint8(8), + 40: uint8(9), + 41: uint8(10), + 42: uint8(11), + 43: uint8(12), + 44: uint8(13), + 45: uint8(14), + 46: uint8(15), + 47: uint8(16), + 48: uint8(17), + 49: uint8(18), + 50: uint8(19), + 51: uint8(20), + 52: uint8(21), + 53: uint8(22), + 54: uint8(23), + 55: uint8(24), + 56: uint8(25), + 57: uint8(26), + 58: uint8(27), + 59: uint8(64), + 60: uint8(64), + 61: uint8(64), + 62: uint8(64), + 63: uint8(64), + 64: uint8(64), + 65: uint8(28), + 66: uint8(29), + 67: uint8(30), + 68: uint8(31), + 69: uint8(32), + 70: uint8(33), + 71: uint8(34), + 72: uint8(35), + 73: uint8(36), + 74: uint8(37), + 75: uint8(38), + 76: uint8(39), + 77: uint8(40), + 78: uint8(41), + 79: uint8(42), + 80: uint8(43), + 81: uint8(44), + 82: uint8(45), + 83: uint8(46), + 84: uint8(47), + 85: uint8(48), + 86: uint8(49), + 87: uint8(50), + 88: uint8(51), + 89: uint8(52), + 90: uint8(53), + 91: uint8(64), + 92: uint8(64), + 93: uint8(64), + 94: uint8(64), + 95: uint8(64), +} + +func _BF_decode(tls *TLS, dst uintptr, src uintptr, size int32) (r int32) { + var c1, c2, c3, c4, tmp uint32 + var dptr, end, sptr, v1, v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, c2, c3, c4, dptr, end, sptr, tmp, v1, v2, v3, v4, v5, v6, v7 + dptr = dst + end = dptr + uintptr(size) + sptr = src + for cond := true; cond; cond = dptr < end { + v1 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v1))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c1 = tmp + v2 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v2))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c2 = tmp + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(c1<>int32(4)) + if dptr >= end { + break + } + v4 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v4))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c3 = tmp + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(c2&uint32(0x0F)<>int32(2)) + if dptr >= end { + break + } + v6 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v6))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c4 = tmp + v7 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(c3&uint32(0x03)<>int32(2)] + c1 = c1 & uint32(0x03) << int32(4) + if sptr >= end { + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = _BF_itoa64[c1] + break + } + v4 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v4))) + c1 |= c2 >> int32(4) + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = _BF_itoa64[c1] + c1 = c2 & uint32(0x0f) << int32(2) + if sptr >= end { + v6 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v6)) = _BF_itoa64[c1] + break + } + v7 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v7))) + c1 |= c2 >> int32(6) + v8 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v8)) = _BF_itoa64[c1] + v9 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v9)) = _BF_itoa64[c2&uint32(0x3f)] + } +} + +func _BF_swap(tls *TLS, x uintptr, count int32) { + var tmp TBF_word + var v1, v2 int32 + var v4 uintptr + _, _, _, _ = tmp, v1, v2, v4 + v1 = int32(1) + if *(*uint8)(unsafe.Pointer(&v1)) != 0 { + for { + tmp = *(*TBF_word)(unsafe.Pointer(x)) + tmp = tmp<>Int32FromInt32(16) + v4 = x + x += 4 + *(*TBF_word)(unsafe.Pointer(v4)) = tmp&uint32(0x00FF00FF)<>Int32FromInt32(8)&uint32(0x00FF00FF) + goto _3 + _3: + ; + count-- + v2 = count + if !(v2 != 0) { + break + } + } + } +} + +func _BF_encrypt(tls *TLS, ctx uintptr, L TBF_word, R TBF_word, start uintptr, end uintptr) (r TBF_word) { + var i int32 + var ptr, v2, v3 uintptr + var tmp1, tmp2, tmp3, tmp4 TBF_word + _, _, _, _, _, _, _, _ = i, ptr, tmp1, tmp2, tmp3, tmp4, v2, v3 + ptr = start + for cond := true; cond; cond = ptr < end { + L ^= *(*TBF_word)(unsafe.Pointer(ctx)) + i = 0 + for { + if !(i < int32(16)) { + break + } + tmp1 = L & uint32(0xFF) + tmp2 = L >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = L >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = L >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + R ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1))*4)) + tmp3 += tmp1 + R ^= tmp3 + tmp1 = R & uint32(0xFF) + tmp2 = R >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = R >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = R >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + L ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1)+int32(1))*4)) + tmp3 += tmp1 + L ^= tmp3 + goto _1 + _1: + ; + i += int32(2) + } + tmp4 = R + R = L + L = tmp4 ^ *(*TBF_word)(unsafe.Pointer(ctx + uintptr(Int32FromInt32(BF_N)+Int32FromInt32(1))*4)) + v2 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v2)) = L + v3 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v3)) = R + } + return L +} + +func _BF_set_key(tls *TLS, key uintptr, expanded uintptr, initial uintptr, flags uint8) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bug, i, j uint32 + var diff, safety, sign, v1, v3 TBF_word + var ptr uintptr + var _ /* tmp at bp+0 */ [2]TBF_word + _, _, _, _, _, _, _, _, _ = bug, diff, i, j, ptr, safety, sign, v1, v3 + ptr = key + /* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = uint32(int32(flags) & int32(1)) + safety = uint32(flags) & uint32(2) << int32(15) + v1 = Uint32FromInt32(0) + diff = v1 + sign = v1 + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(BF_N)+Int32FromInt32(2))) { + break + } + v3 = Uint32FromInt32(0) + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] = v3 + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] = v3 + j = uint32(0) + for { + if !(j < uint32(4)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp)) |= uint32(*(*uint8)(unsafe.Pointer(ptr))) /* correct */ + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) |= uint32(int8(*(*uint8)(unsafe.Pointer(ptr)))) /* bug */ + /* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if j != 0 { + sign |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] & uint32(0x80) + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + ptr = key + } else { + ptr++ + } + goto _4 + _4: + ; + j++ + } + diff |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] /* Non-zero on any differences */ + *(*TBF_word)(unsafe.Pointer(expanded + uintptr(i)*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + *(*TBF_word)(unsafe.Pointer(initial + uintptr(i)*4)) = *(*TBF_word)(unsafe.Pointer(uintptr(unsafe.Pointer(&_BF_init_state)) + uintptr(i)*4)) ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + goto _2 + _2: + ; + i++ + } + /* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> int32(16) /* still zero iff exact match */ + diff &= uint32(0xffff) /* ditto */ + diff += uint32(0xffff) /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= uint32(9) /* move the non-benign sign extension flag to bit 16 */ + sign &= ^diff & safety /* action needed? */ + /* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + *(*TBF_word)(unsafe.Pointer(initial)) ^= sign +} + +var _flags_by_subtype = [26]uint8{ + 0: uint8(2), + 1: uint8(4), + 23: uint8(1), + 24: uint8(4), +} + +func _BF_crypt(tls *TLS, key uintptr, setting uintptr, output uintptr, min TBF_word) (r uintptr) { + bp := tls.Alloc(4272) + defer tls.Free(4272) + var L, L1, R, count, tmp1, tmp2, tmp3, tmp4, v1, v6 TBF_word + var done, i int32 + var ptr uintptr + var _ /* LR at bp+4264 */ [2]TBF_word + var _ /* data at bp+0 */ struct { + Fctx TBF_ctx + Fexpanded_key TBF_key + Fbinary struct { + Foutput [0][6]TBF_word + Fsalt [4]TBF_word + F__ccgo_pad2 [8]byte + } + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = L, L1, R, count, done, i, ptr, tmp1, tmp2, tmp3, tmp4, v1, v6 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('$') || int32(*(*uint8)(unsafe.Pointer(setting + 1))) != int32('2') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')) > uint32(25) || !(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')] != 0) || int32(*(*uint8)(unsafe.Pointer(setting + 3))) != int32('$') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0')) > uint32(1) || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 5)))-int32('0')) > uint32(9) || int32(*(*uint8)(unsafe.Pointer(setting + 6))) != int32('$') { + return UintptrFromInt32(0) + } + count = Uint32FromInt32(1) << ((int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0'))*int32(10) + (int32(*(*uint8)(unsafe.Pointer(setting + 5))) - int32('0'))) + if count < min || _BF_decode(tls, bp+4240, setting+7, int32(16)) != 0 { + return UintptrFromInt32(0) + } + _BF_swap(tls, bp+4240, int32(4)) + _BF_set_key(tls, key, bp+4168, bp, _flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + _memcpy(tls, bp+72, uintptr(unsafe.Pointer(&_BF_init_state))+72, uint32(4096)) + L = uint32(0) + R = uint32(0) + ptr = bp + for cond := true; cond; cond = int32(1) != 0 { + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + if ptr >= bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4 { + break + } + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + } + for { + i = 0 + for { + if !(i < Int32FromInt32(BF_N)+Int32FromInt32(2)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i)*4)) + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i+int32(1))*4)) + goto _3 + _3: + ; + i += int32(2) + } + done = 0 + for cond := true; cond; cond = int32(1) != 0 { + _BF_encrypt(tls, bp, uint32(0), uint32(0), bp, bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4) + if done != 0 { + break + } + done = int32(1) + tmp1 = *(*TBF_word)(unsafe.Pointer(bp + 4240)) + tmp2 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)) + tmp4 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)) + i = 0 + for { + if !(i < int32(BF_N)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= tmp2 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(2))*4)) ^= tmp3 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(3))*4)) ^= tmp4 + goto _4 + _4: + ; + i += int32(4) + } + *(*TBF_word)(unsafe.Pointer(bp + 16*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + 17*4)) ^= tmp2 + } + goto _2 + _2: + ; + count-- + v1 = count + if !(v1 != 0) { + break + } + } + i = 0 + for { + if !(i < int32(6)) { + break + } + L1 = _BF_magic_w[i] + (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] = _BF_magic_w[i+int32(1)] + count = uint32(64) + for { + L1 = _BF_encrypt(tls, bp, L1, (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)], bp+4264, bp+4264) + goto _7 + _7: + ; + count-- + v6 = count + if !(v6 != 0) { + break + } + } + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i)*4)) = L1 + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i+int32(1))*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] + goto _5 + _5: + ; + i += int32(2) + } + _memcpy(tls, output, setting, uint32(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1))) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))) = _BF_itoa64[int32(_BF_atoi64[int32(*(*uint8)(unsafe.Pointer(setting + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))))-int32(0x20)])&int32(0x30)] + /* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + _BF_swap(tls, bp+4240, int32(6)) + _BF_encode(tls, output+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), bp+4240, int32(23)) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)+Int32FromInt32(31)))) = uint8('\000') + return output +} + +// C documentation +// +// /* +// * Please preserve the runtime self-test. It serves two purposes at once: +// * +// * 1. We really can't afford the risk of producing incompatible hashes e.g. +// * when there's something like gcc bug 26587 again, whereas an application or +// * library integrating this code might not also integrate our external tests or +// * it might not run them after every build. Even if it does, the miscompile +// * might only occur on the production build, but not on a testing build (such +// * as because of different optimization settings). It is painful to recover +// * from incorrectly-computed hashes - merely fixing whatever broke is not +// * enough. Thus, a proactive measure like this self-test is needed. +// * +// * 2. We don't want to leave sensitive data from our actual password hash +// * computation on the stack or in registers. Previous revisions of the code +// * would do explicit cleanups, but simply running the self-test after hash +// * computation is more reliable. +// * +// * The performance cost of this quick self-test is around 0.6% at the "$2a$08" +// * setting. +// */ +func X__crypt_blowfish(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(384) + defer tls.Free(384) + var flags uint32 + var k, p, retval, test_hash, test_key, test_setting uintptr + var ok int32 + var _ /* ae at bp+96 */ TBF_key + var _ /* ai at bp+168 */ TBF_key + var _ /* buf at bp+0 */ struct { + Fs [30]uint8 + Fo [63]uint8 + } + var _ /* ye at bp+240 */ TBF_key + var _ /* yi at bp+312 */ TBF_key + _, _, _, _, _, _, _, _ = flags, k, ok, p, retval, test_hash, test_key, test_setting + test_key = __ccgo_ts + 18 + test_setting = __ccgo_ts + 28 + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + /* Hash the supplied password */ + retval = _BF_crypt(tls, key, setting, output, uint32(16)) + /* + * Do a quick self-test. It is important that we make both calls to BF_crypt() + * from the same scope such that they likely use the same stack locations, + * which makes the second call overwrite the first call's sensitive data on the + * stack and makes it more likely that any alignment related issues would be + * detected by the self-test. + */ + _memcpy(tls, bp, test_setting, uint32(30)) + if retval != 0 { + flags = uint32(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + uintptr(flags&uint32(1))*34 + *(*uint8)(unsafe.Pointer(bp + 2)) = *(*uint8)(unsafe.Pointer(setting + 2)) + } + Xmemset(tls, bp+30, int32(0x55), uint32(63)) + *(*uint8)(unsafe.Pointer(bp + 30 + uintptr(Uint32FromInt64(63)-Uint32FromInt32(1)))) = uint8(0) + p = _BF_crypt(tls, test_key, bp, bp+30, uint32(1)) + ok = BoolInt32(p == bp+30 && !(Xmemcmp(tls, p, bp, uint32(Int32FromInt32(7)+Int32FromInt32(22))) != 0) && !(Xmemcmp(tls, p+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), test_hash, uint32(Int32FromInt32(31)+Int32FromInt32(1)+Int32FromInt32(1)+Int32FromInt32(1))) != 0)) + k = __ccgo_ts + 58 + _BF_set_key(tls, k, bp+96, bp+168, uint8(2)) /* $2a$ */ + _BF_set_key(tls, k, bp+240, bp+312, uint8(4)) /* $2y$ */ + *(*TBF_word)(unsafe.Pointer(bp + 168)) ^= uint32(0x10000) /* undo the safety (for comparison) */ + ok = BoolInt32(ok != 0 && (*(*TBF_key)(unsafe.Pointer(bp + 168)))[0] == uint32(0xdb9c59bc) && (*(*TBF_key)(unsafe.Pointer(bp + 240)))[int32(17)] == uint32(0x33343500) && !(Xmemcmp(tls, bp+96, bp+240, uint32(72)) != 0) && !(Xmemcmp(tls, bp+168, bp+312, uint32(72)) != 0)) + if ok != 0 && retval != 0 { + return retval + } + return __ccgo_ts + 70 +} + +var _test_hashes = [2][34]uint8{ + 0: {'i', '1', 'D', '7', '0', '9', 'v', 'f', 'a', 'm', 'u', 'l', 'i', 'm', 'l', 'G', 'c', 'q', '0', 'q', 'q', '3', 'U', 'v', 'u', 'U', 'a', 's', 'v', 'E', 'a', 0, 'U'}, + 1: {'V', 'U', 'r', 'P', 'm', 'X', 'D', '6', 'q', '/', 'n', 'V', 'S', 'S', 'p', '7', 'p', 'N', 'D', 'h', 'C', 'R', '9', '0', '7', '1', 'I', 'f', 'I', 'R', 'e', 0, 'U'}, +} + +const _PASSWORD_EFMT1 = 95 + +type Texpanded_key = struct { + Fl [16]Tuint32_t + Fr [16]Tuint32_t +} + +var _key_shifts = [16]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(2), + 3: uint8(2), + 4: uint8(2), + 5: uint8(2), + 6: uint8(2), + 7: uint8(2), + 8: uint8(1), + 9: uint8(2), + 10: uint8(2), + 11: uint8(2), + 12: uint8(2), + 13: uint8(2), + 14: uint8(2), + 15: uint8(1), +} + +var _psbox = [8][64]Tuint32_t{ + 0: { + 0: uint32(0x00808200), + 2: uint32(0x00008000), + 3: uint32(0x00808202), + 4: uint32(0x00808002), + 5: uint32(0x00008202), + 6: uint32(0x00000002), + 7: uint32(0x00008000), + 8: uint32(0x00000200), + 9: uint32(0x00808200), + 10: uint32(0x00808202), + 11: uint32(0x00000200), + 12: uint32(0x00800202), + 13: uint32(0x00808002), + 14: uint32(0x00800000), + 15: uint32(0x00000002), + 16: uint32(0x00000202), + 17: uint32(0x00800200), + 18: uint32(0x00800200), + 19: uint32(0x00008200), + 20: uint32(0x00008200), + 21: uint32(0x00808000), + 22: uint32(0x00808000), + 23: uint32(0x00800202), + 24: uint32(0x00008002), + 25: uint32(0x00800002), + 26: uint32(0x00800002), + 27: uint32(0x00008002), + 29: uint32(0x00000202), + 30: uint32(0x00008202), + 31: uint32(0x00800000), + 32: uint32(0x00008000), + 33: uint32(0x00808202), + 34: uint32(0x00000002), + 35: uint32(0x00808000), + 36: uint32(0x00808200), + 37: uint32(0x00800000), + 38: uint32(0x00800000), + 39: uint32(0x00000200), + 40: uint32(0x00808002), + 41: uint32(0x00008000), + 42: uint32(0x00008200), + 43: uint32(0x00800002), + 44: uint32(0x00000200), + 45: uint32(0x00000002), + 46: uint32(0x00800202), + 47: uint32(0x00008202), + 48: uint32(0x00808202), + 49: uint32(0x00008002), + 50: uint32(0x00808000), + 51: uint32(0x00800202), + 52: uint32(0x00800002), + 53: uint32(0x00000202), + 54: uint32(0x00008202), + 55: uint32(0x00808200), + 56: uint32(0x00000202), + 57: uint32(0x00800200), + 58: uint32(0x00800200), + 60: uint32(0x00008002), + 61: uint32(0x00008200), + 63: uint32(0x00808002), + }, + 1: { + 0: uint32(0x40084010), + 1: uint32(0x40004000), + 2: uint32(0x00004000), + 3: uint32(0x00084010), + 4: uint32(0x00080000), + 5: uint32(0x00000010), + 6: uint32(0x40080010), + 7: uint32(0x40004010), + 8: uint32(0x40000010), + 9: uint32(0x40084010), + 10: uint32(0x40084000), + 11: uint32(0x40000000), + 12: uint32(0x40004000), + 13: uint32(0x00080000), + 14: uint32(0x00000010), + 15: uint32(0x40080010), + 16: uint32(0x00084000), + 17: uint32(0x00080010), + 18: uint32(0x40004010), + 20: uint32(0x40000000), + 21: uint32(0x00004000), + 22: uint32(0x00084010), + 23: uint32(0x40080000), + 24: uint32(0x00080010), + 25: uint32(0x40000010), + 27: uint32(0x00084000), + 28: uint32(0x00004010), + 29: uint32(0x40084000), + 30: uint32(0x40080000), + 31: uint32(0x00004010), + 33: uint32(0x00084010), + 34: uint32(0x40080010), + 35: uint32(0x00080000), + 36: uint32(0x40004010), + 37: uint32(0x40080000), + 38: uint32(0x40084000), + 39: uint32(0x00004000), + 40: uint32(0x40080000), + 41: uint32(0x40004000), + 42: uint32(0x00000010), + 43: uint32(0x40084010), + 44: uint32(0x00084010), + 45: uint32(0x00000010), + 46: uint32(0x00004000), + 47: uint32(0x40000000), + 48: uint32(0x00004010), + 49: uint32(0x40084000), + 50: uint32(0x00080000), + 51: uint32(0x40000010), + 52: uint32(0x00080010), + 53: uint32(0x40004010), + 54: uint32(0x40000010), + 55: uint32(0x00080010), + 56: uint32(0x00084000), + 58: uint32(0x40004000), + 59: uint32(0x00004010), + 60: uint32(0x40000000), + 61: uint32(0x40080010), + 62: uint32(0x40084010), + 63: uint32(0x00084000), + }, + 2: { + 0: uint32(0x00000104), + 1: uint32(0x04010100), + 3: uint32(0x04010004), + 4: uint32(0x04000100), + 6: uint32(0x00010104), + 7: uint32(0x04000100), + 8: uint32(0x00010004), + 9: uint32(0x04000004), + 10: uint32(0x04000004), + 11: uint32(0x00010000), + 12: uint32(0x04010104), + 13: uint32(0x00010004), + 14: uint32(0x04010000), + 15: uint32(0x00000104), + 16: uint32(0x04000000), + 17: uint32(0x00000004), + 18: uint32(0x04010100), + 19: uint32(0x00000100), + 20: uint32(0x00010100), + 21: uint32(0x04010000), + 22: uint32(0x04010004), + 23: uint32(0x00010104), + 24: uint32(0x04000104), + 25: uint32(0x00010100), + 26: uint32(0x00010000), + 27: uint32(0x04000104), + 28: uint32(0x00000004), + 29: uint32(0x04010104), + 30: uint32(0x00000100), + 31: uint32(0x04000000), + 32: uint32(0x04010100), + 33: uint32(0x04000000), + 34: uint32(0x00010004), + 35: uint32(0x00000104), + 36: uint32(0x00010000), + 37: uint32(0x04010100), + 38: uint32(0x04000100), + 40: uint32(0x00000100), + 41: uint32(0x00010004), + 42: uint32(0x04010104), + 43: uint32(0x04000100), + 44: uint32(0x04000004), + 45: uint32(0x00000100), + 47: uint32(0x04010004), + 48: uint32(0x04000104), + 49: uint32(0x00010000), + 50: uint32(0x04000000), + 51: uint32(0x04010104), + 52: uint32(0x00000004), + 53: uint32(0x00010104), + 54: uint32(0x00010100), + 55: uint32(0x04000004), + 56: uint32(0x04010000), + 57: uint32(0x04000104), + 58: uint32(0x00000104), + 59: uint32(0x04010000), + 60: uint32(0x00010104), + 61: uint32(0x00000004), + 62: uint32(0x04010004), + 63: uint32(0x00010100), + }, + 3: { + 0: uint32(0x80401000), + 1: uint32(0x80001040), + 2: uint32(0x80001040), + 3: uint32(0x00000040), + 4: uint32(0x00401040), + 5: uint32(0x80400040), + 6: uint32(0x80400000), + 7: uint32(0x80001000), + 9: uint32(0x00401000), + 10: uint32(0x00401000), + 11: uint32(0x80401040), + 12: uint32(0x80000040), + 14: uint32(0x00400040), + 15: uint32(0x80400000), + 16: uint32(0x80000000), + 17: uint32(0x00001000), + 18: uint32(0x00400000), + 19: uint32(0x80401000), + 20: uint32(0x00000040), + 21: uint32(0x00400000), + 22: uint32(0x80001000), + 23: uint32(0x00001040), + 24: uint32(0x80400040), + 25: uint32(0x80000000), + 26: uint32(0x00001040), + 27: uint32(0x00400040), + 28: uint32(0x00001000), + 29: uint32(0x00401040), + 30: uint32(0x80401040), + 31: uint32(0x80000040), + 32: uint32(0x00400040), + 33: uint32(0x80400000), + 34: uint32(0x00401000), + 35: uint32(0x80401040), + 36: uint32(0x80000040), + 39: uint32(0x00401000), + 40: uint32(0x00001040), + 41: uint32(0x00400040), + 42: uint32(0x80400040), + 43: uint32(0x80000000), + 44: uint32(0x80401000), + 45: uint32(0x80001040), + 46: uint32(0x80001040), + 47: uint32(0x00000040), + 48: uint32(0x80401040), + 49: uint32(0x80000040), + 50: uint32(0x80000000), + 51: uint32(0x00001000), + 52: uint32(0x80400000), + 53: uint32(0x80001000), + 54: uint32(0x00401040), + 55: uint32(0x80400040), + 56: uint32(0x80001000), + 57: uint32(0x00001040), + 58: uint32(0x00400000), + 59: uint32(0x80401000), + 60: uint32(0x00000040), + 61: uint32(0x00400000), + 62: uint32(0x00001000), + 63: uint32(0x00401040), + }, + 4: { + 0: uint32(0x00000080), + 1: uint32(0x01040080), + 2: uint32(0x01040000), + 3: uint32(0x21000080), + 4: uint32(0x00040000), + 5: uint32(0x00000080), + 6: uint32(0x20000000), + 7: uint32(0x01040000), + 8: uint32(0x20040080), + 9: uint32(0x00040000), + 10: uint32(0x01000080), + 11: uint32(0x20040080), + 12: uint32(0x21000080), + 13: uint32(0x21040000), + 14: uint32(0x00040080), + 15: uint32(0x20000000), + 16: uint32(0x01000000), + 17: uint32(0x20040000), + 18: uint32(0x20040000), + 20: uint32(0x20000080), + 21: uint32(0x21040080), + 22: uint32(0x21040080), + 23: uint32(0x01000080), + 24: uint32(0x21040000), + 25: uint32(0x20000080), + 27: uint32(0x21000000), + 28: uint32(0x01040080), + 29: uint32(0x01000000), + 30: uint32(0x21000000), + 31: uint32(0x00040080), + 32: uint32(0x00040000), + 33: uint32(0x21000080), + 34: uint32(0x00000080), + 35: uint32(0x01000000), + 36: uint32(0x20000000), + 37: uint32(0x01040000), + 38: uint32(0x21000080), + 39: uint32(0x20040080), + 40: uint32(0x01000080), + 41: uint32(0x20000000), + 42: uint32(0x21040000), + 43: uint32(0x01040080), + 44: uint32(0x20040080), + 45: uint32(0x00000080), + 46: uint32(0x01000000), + 47: uint32(0x21040000), + 48: uint32(0x21040080), + 49: uint32(0x00040080), + 50: uint32(0x21000000), + 51: uint32(0x21040080), + 52: uint32(0x01040000), + 54: uint32(0x20040000), + 55: uint32(0x21000000), + 56: uint32(0x00040080), + 57: uint32(0x01000080), + 58: uint32(0x20000080), + 59: uint32(0x00040000), + 61: uint32(0x20040000), + 62: uint32(0x01040080), + 63: uint32(0x20000080), + }, + 5: { + 0: uint32(0x10000008), + 1: uint32(0x10200000), + 2: uint32(0x00002000), + 3: uint32(0x10202008), + 4: uint32(0x10200000), + 5: uint32(0x00000008), + 6: uint32(0x10202008), + 7: uint32(0x00200000), + 8: uint32(0x10002000), + 9: uint32(0x00202008), + 10: uint32(0x00200000), + 11: uint32(0x10000008), + 12: uint32(0x00200008), + 13: uint32(0x10002000), + 14: uint32(0x10000000), + 15: uint32(0x00002008), + 17: uint32(0x00200008), + 18: uint32(0x10002008), + 19: uint32(0x00002000), + 20: uint32(0x00202000), + 21: uint32(0x10002008), + 22: uint32(0x00000008), + 23: uint32(0x10200008), + 24: uint32(0x10200008), + 26: uint32(0x00202008), + 27: uint32(0x10202000), + 28: uint32(0x00002008), + 29: uint32(0x00202000), + 30: uint32(0x10202000), + 31: uint32(0x10000000), + 32: uint32(0x10002000), + 33: uint32(0x00000008), + 34: uint32(0x10200008), + 35: uint32(0x00202000), + 36: uint32(0x10202008), + 37: uint32(0x00200000), + 38: uint32(0x00002008), + 39: uint32(0x10000008), + 40: uint32(0x00200000), + 41: uint32(0x10002000), + 42: uint32(0x10000000), + 43: uint32(0x00002008), + 44: uint32(0x10000008), + 45: uint32(0x10202008), + 46: uint32(0x00202000), + 47: uint32(0x10200000), + 48: uint32(0x00202008), + 49: uint32(0x10202000), + 51: uint32(0x10200008), + 52: uint32(0x00000008), + 53: uint32(0x00002000), + 54: uint32(0x10200000), + 55: uint32(0x00202008), + 56: uint32(0x00002000), + 57: uint32(0x00200008), + 58: uint32(0x10002008), + 60: uint32(0x10202000), + 61: uint32(0x10000000), + 62: uint32(0x00200008), + 63: uint32(0x10002008), + }, + 6: { + 0: uint32(0x00100000), + 1: uint32(0x02100001), + 2: uint32(0x02000401), + 4: uint32(0x00000400), + 5: uint32(0x02000401), + 6: uint32(0x00100401), + 7: uint32(0x02100400), + 8: uint32(0x02100401), + 9: uint32(0x00100000), + 11: uint32(0x02000001), + 12: uint32(0x00000001), + 13: uint32(0x02000000), + 14: uint32(0x02100001), + 15: uint32(0x00000401), + 16: uint32(0x02000400), + 17: uint32(0x00100401), + 18: uint32(0x00100001), + 19: uint32(0x02000400), + 20: uint32(0x02000001), + 21: uint32(0x02100000), + 22: uint32(0x02100400), + 23: uint32(0x00100001), + 24: uint32(0x02100000), + 25: uint32(0x00000400), + 26: uint32(0x00000401), + 27: uint32(0x02100401), + 28: uint32(0x00100400), + 29: uint32(0x00000001), + 30: uint32(0x02000000), + 31: uint32(0x00100400), + 32: uint32(0x02000000), + 33: uint32(0x00100400), + 34: uint32(0x00100000), + 35: uint32(0x02000401), + 36: uint32(0x02000401), + 37: uint32(0x02100001), + 38: uint32(0x02100001), + 39: uint32(0x00000001), + 40: uint32(0x00100001), + 41: uint32(0x02000000), + 42: uint32(0x02000400), + 43: uint32(0x00100000), + 44: uint32(0x02100400), + 45: uint32(0x00000401), + 46: uint32(0x00100401), + 47: uint32(0x02100400), + 48: uint32(0x00000401), + 49: uint32(0x02000001), + 50: uint32(0x02100401), + 51: uint32(0x02100000), + 52: uint32(0x00100400), + 54: uint32(0x00000001), + 55: uint32(0x02100401), + 57: uint32(0x00100401), + 58: uint32(0x02100000), + 59: uint32(0x00000400), + 60: uint32(0x02000001), + 61: uint32(0x02000400), + 62: uint32(0x00000400), + 63: uint32(0x00100001), + }, + 7: { + 0: uint32(0x08000820), + 1: uint32(0x00000800), + 2: uint32(0x00020000), + 3: uint32(0x08020820), + 4: uint32(0x08000000), + 5: uint32(0x08000820), + 6: uint32(0x00000020), + 7: uint32(0x08000000), + 8: uint32(0x00020020), + 9: uint32(0x08020000), + 10: uint32(0x08020820), + 11: uint32(0x00020800), + 12: uint32(0x08020800), + 13: uint32(0x00020820), + 14: uint32(0x00000800), + 15: uint32(0x00000020), + 16: uint32(0x08020000), + 17: uint32(0x08000020), + 18: uint32(0x08000800), + 19: uint32(0x00000820), + 20: uint32(0x00020800), + 21: uint32(0x00020020), + 22: uint32(0x08020020), + 23: uint32(0x08020800), + 24: uint32(0x00000820), + 27: uint32(0x08020020), + 28: uint32(0x08000020), + 29: uint32(0x08000800), + 30: uint32(0x00020820), + 31: uint32(0x00020000), + 32: uint32(0x00020820), + 33: uint32(0x00020000), + 34: uint32(0x08020800), + 35: uint32(0x00000800), + 36: uint32(0x00000020), + 37: uint32(0x08020020), + 38: uint32(0x00000800), + 39: uint32(0x00020820), + 40: uint32(0x08000800), + 41: uint32(0x00000020), + 42: uint32(0x08000020), + 43: uint32(0x08020000), + 44: uint32(0x08020020), + 45: uint32(0x08000000), + 46: uint32(0x00020000), + 47: uint32(0x08000820), + 49: uint32(0x08020820), + 50: uint32(0x00020020), + 51: uint32(0x08000020), + 52: uint32(0x08020000), + 53: uint32(0x08000800), + 54: uint32(0x08000820), + 56: uint32(0x08020820), + 57: uint32(0x00020800), + 58: uint32(0x00020800), + 59: uint32(0x00000820), + 60: uint32(0x00000820), + 61: uint32(0x00020020), + 62: uint32(0x08000000), + 63: uint32(0x08020800), + }, +} +var _ip_maskl = [16][16]Tuint32_t{ + 0: { + 1: uint32(0x00010000), + 3: uint32(0x00010000), + 4: uint32(0x01000000), + 5: uint32(0x01010000), + 6: uint32(0x01000000), + 7: uint32(0x01010000), + 9: uint32(0x00010000), + 11: uint32(0x00010000), + 12: uint32(0x01000000), + 13: uint32(0x01010000), + 14: uint32(0x01000000), + 15: uint32(0x01010000), + }, + 1: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 4: uint32(0x00000100), + 5: uint32(0x00000101), + 6: uint32(0x00000100), + 7: uint32(0x00000101), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 12: uint32(0x00000100), + 13: uint32(0x00000101), + 14: uint32(0x00000100), + 15: uint32(0x00000101), + }, + 2: { + 1: uint32(0x00020000), + 3: uint32(0x00020000), + 4: uint32(0x02000000), + 5: uint32(0x02020000), + 6: uint32(0x02000000), + 7: uint32(0x02020000), + 9: uint32(0x00020000), + 11: uint32(0x00020000), + 12: uint32(0x02000000), + 13: uint32(0x02020000), + 14: uint32(0x02000000), + 15: uint32(0x02020000), + }, + 3: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 4: uint32(0x00000200), + 5: uint32(0x00000202), + 6: uint32(0x00000200), + 7: uint32(0x00000202), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 12: uint32(0x00000200), + 13: uint32(0x00000202), + 14: uint32(0x00000200), + 15: uint32(0x00000202), + }, + 4: { + 1: uint32(0x00040000), + 3: uint32(0x00040000), + 4: uint32(0x04000000), + 5: uint32(0x04040000), + 6: uint32(0x04000000), + 7: uint32(0x04040000), + 9: uint32(0x00040000), + 11: uint32(0x00040000), + 12: uint32(0x04000000), + 13: uint32(0x04040000), + 14: uint32(0x04000000), + 15: uint32(0x04040000), + }, + 5: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 4: uint32(0x00000400), + 5: uint32(0x00000404), + 6: uint32(0x00000400), + 7: uint32(0x00000404), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 12: uint32(0x00000400), + 13: uint32(0x00000404), + 14: uint32(0x00000400), + 15: uint32(0x00000404), + }, + 6: { + 1: uint32(0x00080000), + 3: uint32(0x00080000), + 4: uint32(0x08000000), + 5: uint32(0x08080000), + 6: uint32(0x08000000), + 7: uint32(0x08080000), + 9: uint32(0x00080000), + 11: uint32(0x00080000), + 12: uint32(0x08000000), + 13: uint32(0x08080000), + 14: uint32(0x08000000), + 15: uint32(0x08080000), + }, + 7: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 4: uint32(0x00000800), + 5: uint32(0x00000808), + 6: uint32(0x00000800), + 7: uint32(0x00000808), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 12: uint32(0x00000800), + 13: uint32(0x00000808), + 14: uint32(0x00000800), + 15: uint32(0x00000808), + }, + 8: { + 1: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x10000000), + 5: uint32(0x10100000), + 6: uint32(0x10000000), + 7: uint32(0x10100000), + 9: uint32(0x00100000), + 11: uint32(0x00100000), + 12: uint32(0x10000000), + 13: uint32(0x10100000), + 14: uint32(0x10000000), + 15: uint32(0x10100000), + }, + 9: { + 1: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001010), + 6: uint32(0x00001000), + 7: uint32(0x00001010), + 9: uint32(0x00000010), + 11: uint32(0x00000010), + 12: uint32(0x00001000), + 13: uint32(0x00001010), + 14: uint32(0x00001000), + 15: uint32(0x00001010), + }, + 10: { + 1: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x20000000), + 5: uint32(0x20200000), + 6: uint32(0x20000000), + 7: uint32(0x20200000), + 9: uint32(0x00200000), + 11: uint32(0x00200000), + 12: uint32(0x20000000), + 13: uint32(0x20200000), + 14: uint32(0x20000000), + 15: uint32(0x20200000), + }, + 11: { + 1: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002020), + 6: uint32(0x00002000), + 7: uint32(0x00002020), + 9: uint32(0x00000020), + 11: uint32(0x00000020), + 12: uint32(0x00002000), + 13: uint32(0x00002020), + 14: uint32(0x00002000), + 15: uint32(0x00002020), + }, + 12: { + 1: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x40000000), + 5: uint32(0x40400000), + 6: uint32(0x40000000), + 7: uint32(0x40400000), + 9: uint32(0x00400000), + 11: uint32(0x00400000), + 12: uint32(0x40000000), + 13: uint32(0x40400000), + 14: uint32(0x40000000), + 15: uint32(0x40400000), + }, + 13: { + 1: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004040), + 6: uint32(0x00004000), + 7: uint32(0x00004040), + 9: uint32(0x00000040), + 11: uint32(0x00000040), + 12: uint32(0x00004000), + 13: uint32(0x00004040), + 14: uint32(0x00004000), + 15: uint32(0x00004040), + }, + 14: { + 1: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x80000000), + 5: uint32(0x80800000), + 6: uint32(0x80000000), + 7: uint32(0x80800000), + 9: uint32(0x00800000), + 11: uint32(0x00800000), + 12: uint32(0x80000000), + 13: uint32(0x80800000), + 14: uint32(0x80000000), + 15: uint32(0x80800000), + }, + 15: { + 1: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008080), + 6: uint32(0x00008000), + 7: uint32(0x00008080), + 9: uint32(0x00000080), + 11: uint32(0x00000080), + 12: uint32(0x00008000), + 13: uint32(0x00008080), + 14: uint32(0x00008000), + 15: uint32(0x00008080), + }, +} +var _ip_maskr = [16][16]Tuint32_t{ + 0: { + 2: uint32(0x00010000), + 3: uint32(0x00010000), + 6: uint32(0x00010000), + 7: uint32(0x00010000), + 8: uint32(0x01000000), + 9: uint32(0x01000000), + 10: uint32(0x01010000), + 11: uint32(0x01010000), + 12: uint32(0x01000000), + 13: uint32(0x01000000), + 14: uint32(0x01010000), + 15: uint32(0x01010000), + }, + 1: { + 2: uint32(0x00000001), + 3: uint32(0x00000001), + 6: uint32(0x00000001), + 7: uint32(0x00000001), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x00000101), + 11: uint32(0x00000101), + 12: uint32(0x00000100), + 13: uint32(0x00000100), + 14: uint32(0x00000101), + 15: uint32(0x00000101), + }, + 2: { + 2: uint32(0x00020000), + 3: uint32(0x00020000), + 6: uint32(0x00020000), + 7: uint32(0x00020000), + 8: uint32(0x02000000), + 9: uint32(0x02000000), + 10: uint32(0x02020000), + 11: uint32(0x02020000), + 12: uint32(0x02000000), + 13: uint32(0x02000000), + 14: uint32(0x02020000), + 15: uint32(0x02020000), + }, + 3: { + 2: uint32(0x00000002), + 3: uint32(0x00000002), + 6: uint32(0x00000002), + 7: uint32(0x00000002), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x00000202), + 11: uint32(0x00000202), + 12: uint32(0x00000200), + 13: uint32(0x00000200), + 14: uint32(0x00000202), + 15: uint32(0x00000202), + }, + 4: { + 2: uint32(0x00040000), + 3: uint32(0x00040000), + 6: uint32(0x00040000), + 7: uint32(0x00040000), + 8: uint32(0x04000000), + 9: uint32(0x04000000), + 10: uint32(0x04040000), + 11: uint32(0x04040000), + 12: uint32(0x04000000), + 13: uint32(0x04000000), + 14: uint32(0x04040000), + 15: uint32(0x04040000), + }, + 5: { + 2: uint32(0x00000004), + 3: uint32(0x00000004), + 6: uint32(0x00000004), + 7: uint32(0x00000004), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x00000404), + 11: uint32(0x00000404), + 12: uint32(0x00000400), + 13: uint32(0x00000400), + 14: uint32(0x00000404), + 15: uint32(0x00000404), + }, + 6: { + 2: uint32(0x00080000), + 3: uint32(0x00080000), + 6: uint32(0x00080000), + 7: uint32(0x00080000), + 8: uint32(0x08000000), + 9: uint32(0x08000000), + 10: uint32(0x08080000), + 11: uint32(0x08080000), + 12: uint32(0x08000000), + 13: uint32(0x08000000), + 14: uint32(0x08080000), + 15: uint32(0x08080000), + }, + 7: { + 2: uint32(0x00000008), + 3: uint32(0x00000008), + 6: uint32(0x00000008), + 7: uint32(0x00000008), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x00000808), + 11: uint32(0x00000808), + 12: uint32(0x00000800), + 13: uint32(0x00000800), + 14: uint32(0x00000808), + 15: uint32(0x00000808), + }, + 8: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 6: uint32(0x00100000), + 7: uint32(0x00100000), + 8: uint32(0x10000000), + 9: uint32(0x10000000), + 10: uint32(0x10100000), + 11: uint32(0x10100000), + 12: uint32(0x10000000), + 13: uint32(0x10000000), + 14: uint32(0x10100000), + 15: uint32(0x10100000), + }, + 9: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 6: uint32(0x00000010), + 7: uint32(0x00000010), + 8: uint32(0x00001000), + 9: uint32(0x00001000), + 10: uint32(0x00001010), + 11: uint32(0x00001010), + 12: uint32(0x00001000), + 13: uint32(0x00001000), + 14: uint32(0x00001010), + 15: uint32(0x00001010), + }, + 10: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 6: uint32(0x00200000), + 7: uint32(0x00200000), + 8: uint32(0x20000000), + 9: uint32(0x20000000), + 10: uint32(0x20200000), + 11: uint32(0x20200000), + 12: uint32(0x20000000), + 13: uint32(0x20000000), + 14: uint32(0x20200000), + 15: uint32(0x20200000), + }, + 11: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 6: uint32(0x00000020), + 7: uint32(0x00000020), + 8: uint32(0x00002000), + 9: uint32(0x00002000), + 10: uint32(0x00002020), + 11: uint32(0x00002020), + 12: uint32(0x00002000), + 13: uint32(0x00002000), + 14: uint32(0x00002020), + 15: uint32(0x00002020), + }, + 12: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 6: uint32(0x00400000), + 7: uint32(0x00400000), + 8: uint32(0x40000000), + 9: uint32(0x40000000), + 10: uint32(0x40400000), + 11: uint32(0x40400000), + 12: uint32(0x40000000), + 13: uint32(0x40000000), + 14: uint32(0x40400000), + 15: uint32(0x40400000), + }, + 13: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 6: uint32(0x00000040), + 7: uint32(0x00000040), + 8: uint32(0x00004000), + 9: uint32(0x00004000), + 10: uint32(0x00004040), + 11: uint32(0x00004040), + 12: uint32(0x00004000), + 13: uint32(0x00004000), + 14: uint32(0x00004040), + 15: uint32(0x00004040), + }, + 14: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 6: uint32(0x00800000), + 7: uint32(0x00800000), + 8: uint32(0x80000000), + 9: uint32(0x80000000), + 10: uint32(0x80800000), + 11: uint32(0x80800000), + 12: uint32(0x80000000), + 13: uint32(0x80000000), + 14: uint32(0x80800000), + 15: uint32(0x80800000), + }, + 15: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 6: uint32(0x00000080), + 7: uint32(0x00000080), + 8: uint32(0x00008000), + 9: uint32(0x00008000), + 10: uint32(0x00008080), + 11: uint32(0x00008080), + 12: uint32(0x00008000), + 13: uint32(0x00008000), + 14: uint32(0x00008080), + 15: uint32(0x00008080), + }, +} +var _fp_maskl = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _fp_maskr = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _key_perm_maskl = [8][16]Tuint32_t{ + 0: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00001010), + 7: uint32(0x00001010), + 8: uint32(0x00100000), + 9: uint32(0x00100000), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00101000), + 13: uint32(0x00101000), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 1: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002020), + 7: uint32(0x00002020), + 8: uint32(0x00200000), + 9: uint32(0x00200000), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00202000), + 13: uint32(0x00202000), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 2: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00004040), + 7: uint32(0x00004040), + 8: uint32(0x00400000), + 9: uint32(0x00400000), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00404000), + 13: uint32(0x00404000), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 3: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00008080), + 7: uint32(0x00008080), + 8: uint32(0x00800000), + 9: uint32(0x00800000), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00808000), + 13: uint32(0x00808000), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 4: { + 1: uint32(0x00000001), + 2: uint32(0x00000100), + 3: uint32(0x00000101), + 4: uint32(0x00010000), + 5: uint32(0x00010001), + 6: uint32(0x00010100), + 7: uint32(0x00010101), + 8: uint32(0x01000000), + 9: uint32(0x01000001), + 10: uint32(0x01000100), + 11: uint32(0x01000101), + 12: uint32(0x01010000), + 13: uint32(0x01010001), + 14: uint32(0x01010100), + 15: uint32(0x01010101), + }, + 5: { + 1: uint32(0x00000002), + 2: uint32(0x00000200), + 3: uint32(0x00000202), + 4: uint32(0x00020000), + 5: uint32(0x00020002), + 6: uint32(0x00020200), + 7: uint32(0x00020202), + 8: uint32(0x02000000), + 9: uint32(0x02000002), + 10: uint32(0x02000200), + 11: uint32(0x02000202), + 12: uint32(0x02020000), + 13: uint32(0x02020002), + 14: uint32(0x02020200), + 15: uint32(0x02020202), + }, + 6: { + 1: uint32(0x00000004), + 2: uint32(0x00000400), + 3: uint32(0x00000404), + 4: uint32(0x00040000), + 5: uint32(0x00040004), + 6: uint32(0x00040400), + 7: uint32(0x00040404), + 8: uint32(0x04000000), + 9: uint32(0x04000004), + 10: uint32(0x04000400), + 11: uint32(0x04000404), + 12: uint32(0x04040000), + 13: uint32(0x04040004), + 14: uint32(0x04040400), + 15: uint32(0x04040404), + }, + 7: { + 1: uint32(0x00000008), + 2: uint32(0x00000800), + 3: uint32(0x00000808), + 4: uint32(0x00080000), + 5: uint32(0x00080008), + 6: uint32(0x00080800), + 7: uint32(0x00080808), + 8: uint32(0x08000000), + 9: uint32(0x08000008), + 10: uint32(0x08000800), + 11: uint32(0x08000808), + 12: uint32(0x08080000), + 13: uint32(0x08080008), + 14: uint32(0x08080800), + 15: uint32(0x08080808), + }, +} +var _key_perm_maskr = [12][16]Tuint32_t{ + 0: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 5: uint32(0x00000001), + 7: uint32(0x00000001), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 13: uint32(0x00000001), + 15: uint32(0x00000001), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00101000), + 7: uint32(0x00101000), + 8: uint32(0x00000010), + 9: uint32(0x00000010), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00001010), + 13: uint32(0x00001010), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 2: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 5: uint32(0x00000002), + 7: uint32(0x00000002), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 13: uint32(0x00000002), + 15: uint32(0x00000002), + }, + 3: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00202000), + 7: uint32(0x00202000), + 8: uint32(0x00000020), + 9: uint32(0x00000020), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00002020), + 13: uint32(0x00002020), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 4: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 5: uint32(0x00000004), + 7: uint32(0x00000004), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 13: uint32(0x00000004), + 15: uint32(0x00000004), + }, + 5: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00404000), + 7: uint32(0x00404000), + 8: uint32(0x00000040), + 9: uint32(0x00000040), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00004040), + 13: uint32(0x00004040), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 6: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 5: uint32(0x00000008), + 7: uint32(0x00000008), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 13: uint32(0x00000008), + 15: uint32(0x00000008), + }, + 7: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00808000), + 7: uint32(0x00808000), + 8: uint32(0x00000080), + 9: uint32(0x00000080), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00008080), + 13: uint32(0x00008080), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 8: { + 2: uint32(0x01000000), + 3: uint32(0x01000000), + 4: uint32(0x00010000), + 5: uint32(0x00010000), + 6: uint32(0x01010000), + 7: uint32(0x01010000), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x01000100), + 11: uint32(0x01000100), + 12: uint32(0x00010100), + 13: uint32(0x00010100), + 14: uint32(0x01010100), + 15: uint32(0x01010100), + }, + 9: { + 2: uint32(0x02000000), + 3: uint32(0x02000000), + 4: uint32(0x00020000), + 5: uint32(0x00020000), + 6: uint32(0x02020000), + 7: uint32(0x02020000), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x02000200), + 11: uint32(0x02000200), + 12: uint32(0x00020200), + 13: uint32(0x00020200), + 14: uint32(0x02020200), + 15: uint32(0x02020200), + }, + 10: { + 2: uint32(0x04000000), + 3: uint32(0x04000000), + 4: uint32(0x00040000), + 5: uint32(0x00040000), + 6: uint32(0x04040000), + 7: uint32(0x04040000), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x04000400), + 11: uint32(0x04000400), + 12: uint32(0x00040400), + 13: uint32(0x00040400), + 14: uint32(0x04040400), + 15: uint32(0x04040400), + }, + 11: { + 2: uint32(0x08000000), + 3: uint32(0x08000000), + 4: uint32(0x00080000), + 5: uint32(0x00080000), + 6: uint32(0x08080000), + 7: uint32(0x08080000), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x08000800), + 11: uint32(0x08000800), + 12: uint32(0x00080800), + 13: uint32(0x00080800), + 14: uint32(0x08080800), + 15: uint32(0x08080800), + }, +} +var _comp_maskl0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00020000), + 2: uint32(0x00000001), + 3: uint32(0x00020001), + 4: uint32(0x00080000), + 5: uint32(0x000a0000), + 6: uint32(0x00080001), + 7: uint32(0x000a0001), + }, + 1: { + 1: uint32(0x00001000), + 3: uint32(0x00001000), + 4: uint32(0x00000040), + 5: uint32(0x00001040), + 6: uint32(0x00000040), + 7: uint32(0x00001040), + }, + 2: { + 1: uint32(0x00400000), + 2: uint32(0x00000020), + 3: uint32(0x00400020), + 4: uint32(0x00008000), + 5: uint32(0x00408000), + 6: uint32(0x00008020), + 7: uint32(0x00408020), + }, + 3: { + 1: uint32(0x00100000), + 2: uint32(0x00000800), + 3: uint32(0x00100800), + 5: uint32(0x00100000), + 6: uint32(0x00000800), + 7: uint32(0x00100800), + }, +} +var _comp_maskr0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00200000), + 2: uint32(0x00020000), + 3: uint32(0x00220000), + 4: uint32(0x00000002), + 5: uint32(0x00200002), + 6: uint32(0x00020002), + 7: uint32(0x00220002), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00000004), + 5: uint32(0x00000004), + 6: uint32(0x00100004), + 7: uint32(0x00100004), + }, + 2: { + 1: uint32(0x00004000), + 2: uint32(0x00000800), + 3: uint32(0x00004800), + 5: uint32(0x00004000), + 6: uint32(0x00000800), + 7: uint32(0x00004800), + }, + 3: { + 1: uint32(0x00400000), + 2: uint32(0x00008000), + 3: uint32(0x00408000), + 4: uint32(0x00000008), + 5: uint32(0x00400008), + 6: uint32(0x00008008), + 7: uint32(0x00408008), + }, +} +var _comp_maskl1 = [4][16]Tuint32_t{ + 0: { + 1: uint32(0x00000010), + 2: uint32(0x00004000), + 3: uint32(0x00004010), + 4: uint32(0x00040000), + 5: uint32(0x00040010), + 6: uint32(0x00044000), + 7: uint32(0x00044010), + 8: uint32(0x00000100), + 9: uint32(0x00000110), + 10: uint32(0x00004100), + 11: uint32(0x00004110), + 12: uint32(0x00040100), + 13: uint32(0x00040110), + 14: uint32(0x00044100), + 15: uint32(0x00044110), + }, + 1: { + 1: uint32(0x00800000), + 2: uint32(0x00000002), + 3: uint32(0x00800002), + 4: uint32(0x00000200), + 5: uint32(0x00800200), + 6: uint32(0x00000202), + 7: uint32(0x00800202), + 8: uint32(0x00200000), + 9: uint32(0x00a00000), + 10: uint32(0x00200002), + 11: uint32(0x00a00002), + 12: uint32(0x00200200), + 13: uint32(0x00a00200), + 14: uint32(0x00200202), + 15: uint32(0x00a00202), + }, + 2: { + 1: uint32(0x00002000), + 2: uint32(0x00000004), + 3: uint32(0x00002004), + 4: uint32(0x00000400), + 5: uint32(0x00002400), + 6: uint32(0x00000404), + 7: uint32(0x00002404), + 9: uint32(0x00002000), + 10: uint32(0x00000004), + 11: uint32(0x00002004), + 12: uint32(0x00000400), + 13: uint32(0x00002400), + 14: uint32(0x00000404), + 15: uint32(0x00002404), + }, + 3: { + 1: uint32(0x00010000), + 2: uint32(0x00000008), + 3: uint32(0x00010008), + 4: uint32(0x00000080), + 5: uint32(0x00010080), + 6: uint32(0x00000088), + 7: uint32(0x00010088), + 9: uint32(0x00010000), + 10: uint32(0x00000008), + 11: uint32(0x00010008), + 12: uint32(0x00000080), + 13: uint32(0x00010080), + 14: uint32(0x00000088), + 15: uint32(0x00010088), + }, +} +var _comp_maskr1 = [4][16]Tuint32_t{ + 0: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002080), + 7: uint32(0x00002080), + 8: uint32(0x00000001), + 9: uint32(0x00000001), + 10: uint32(0x00000081), + 11: uint32(0x00000081), + 12: uint32(0x00002001), + 13: uint32(0x00002001), + 14: uint32(0x00002081), + 15: uint32(0x00002081), + }, + 1: { + 1: uint32(0x00000010), + 2: uint32(0x00800000), + 3: uint32(0x00800010), + 4: uint32(0x00010000), + 5: uint32(0x00010010), + 6: uint32(0x00810000), + 7: uint32(0x00810010), + 8: uint32(0x00000200), + 9: uint32(0x00000210), + 10: uint32(0x00800200), + 11: uint32(0x00800210), + 12: uint32(0x00010200), + 13: uint32(0x00010210), + 14: uint32(0x00810200), + 15: uint32(0x00810210), + }, + 2: { + 1: uint32(0x00000400), + 2: uint32(0x00001000), + 3: uint32(0x00001400), + 4: uint32(0x00080000), + 5: uint32(0x00080400), + 6: uint32(0x00081000), + 7: uint32(0x00081400), + 8: uint32(0x00000020), + 9: uint32(0x00000420), + 10: uint32(0x00001020), + 11: uint32(0x00001420), + 12: uint32(0x00080020), + 13: uint32(0x00080420), + 14: uint32(0x00081020), + 15: uint32(0x00081420), + }, + 3: { + 1: uint32(0x00000100), + 2: uint32(0x00040000), + 3: uint32(0x00040100), + 5: uint32(0x00000100), + 6: uint32(0x00040000), + 7: uint32(0x00040100), + 8: uint32(0x00000040), + 9: uint32(0x00000140), + 10: uint32(0x00040040), + 11: uint32(0x00040140), + 12: uint32(0x00000040), + 13: uint32(0x00000140), + 14: uint32(0x00040040), + 15: uint32(0x00040140), + }, +} + +var _ascii64 = [65]uint8{'.', '/', '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', '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'} + +/* 0000000000111111111122222222223333333333444444444455555555556666 */ +/* 0123456789012345678901234567890123456789012345678901234567890123 */ + +// C documentation +// +// /* +// * We match the behavior of UFC-crypt on systems where "char" is signed by +// * default (the majority), regardless of char's signedness on our system. +// */ +func _ascii_to_bin(tls *TLS, ch int32) (r Tuint32_t) { + var retval, sch, v1 int32 + _, _, _ = retval, sch, v1 + if ch < int32(0x80) { + v1 = ch + } else { + v1 = -(int32(0x100) - ch) + } + sch = v1 + retval = sch - int32('.') + if sch >= int32('A') { + retval = sch - (Int32FromUint8('A') - Int32FromInt32(12)) + if sch >= int32('a') { + retval = sch - (Int32FromUint8('a') - Int32FromInt32(38)) + } + } + retval &= int32(0x3f) + return uint32(retval) +} + +// C documentation +// +// /* +// * When we choose to "support" invalid salts, nevertheless disallow those +// * containing characters that would violate the passwd file format. +// */ +func _ascii_is_unsafe(tls *TLS, ch uint8) (r int32) { + return BoolInt32(!(ch != 0) || int32(ch) == int32('\n') || int32(ch) == int32(':')) +} + +func _setup_salt(tls *TLS, salt Tuint32_t) (r Tuint32_t) { + var i uint32 + var obit, saltbit, saltbits Tuint32_t + _, _, _, _ = i, obit, saltbit, saltbits + saltbits = uint32(0) + saltbit = uint32(1) + obit = uint32(0x800000) + i = uint32(0) + for { + if !(i < uint32(24)) { + break + } + if salt&saltbit != 0 { + saltbits |= obit + } + saltbit <<= uint32(1) + obit >>= uint32(1) + goto _1 + _1: + ; + i++ + } + return saltbits +} + +func X__des_setkey(tls *TLS, key uintptr, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v ekey=%v, (%v:)", tls, key, ekey, origin(2)) + } + var i, ibit, j, round, shifts uint32 + var k0, k1, kl, kr, rawkey0, rawkey1, t0, t1, v1, v4 Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ibit, j, k0, k1, kl, kr, rawkey0, rawkey1, round, shifts, t0, t1, v1, v4 + rawkey0 = uint32(*(*uint8)(unsafe.Pointer(key + 3))) | uint32(*(*uint8)(unsafe.Pointer(key + 2)))<>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskl)) + uintptr(i+uint32(4))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j)*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) + ibit -= uint32(4) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j+uint32(1))*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(i+uint32(8))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + /* + * Rotate subkeys and do compression permutation. + */ + shifts = uint32(0) + round = uint32(0) + for { + if !(round < uint32(16)) { + break + } + shifts += uint32(_key_shifts[round]) + t0 = k0<>(Uint32FromInt32(28)-shifts) + t1 = k1<>(Uint32FromInt32(28)-shifts) + v4 = Uint32FromInt32(0) + kr = v4 + kl = v4 + ibit = uint32(25) + i = uint32(0) + for { + if !(i < uint32(4)) { + break + } + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl0)) + uintptr(i)*32 + uintptr(t0>>ibit&uint32(7))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr0)) + uintptr(i)*32 + uintptr(t1>>ibit&uint32(7))*4)) + ibit -= uint32(4) + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl1)) + uintptr(i)*64 + uintptr(t0>>ibit&uint32(0xf))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr1)) + uintptr(i)*64 + uintptr(t1>>ibit&uint32(0xf))*4)) + ibit -= uint32(3) + goto _5 + _5: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(ekey + uintptr(round)*4)) = kl + *(*Tuint32_t)(unsafe.Pointer(ekey + 64 + uintptr(round)*4)) = kr + goto _3 + _3: + ; + round++ + } +} + +// C documentation +// +// /* +// * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format. +// */ +func X__do_des(tls *TLS, l_in Tuint32_t, r_in Tuint32_t, l_out uintptr, r_out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v l_in=%v r_in=%v l_out=%v r_out=%v count=%v saltbits=%v ekey=%v, (%v:)", tls, l_in, r_in, l_out, r_out, count, saltbits, ekey, origin(2)) + } + var f, l, lo, r, r48l, r48r, ro, v1, v3, v7 Tuint32_t + var i, i1, ibit, ibit1, round, v4 uint32 + var kl, kr, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, i1, ibit, ibit1, kl, kr, l, lo, r, r48l, r48r, ro, round, v1, v3, v4, v5, v6, v7 + /* + * Do initial permutation (IP). + */ + v1 = Uint32FromInt32(0) + r = v1 + l = v1 + if l_in|r_in != 0 { + i = uint32(0) + ibit = Uint32FromInt32(28) + for { + if !(i < uint32(8)) { + break + } + l |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + r |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + } + for { + v3 = count + count-- + if !(v3 != 0) { + break + } + /* + * Do each round. + */ + round = uint32(16) + kl = ekey + kr = ekey + 64 + for { + v4 = round + round-- + if !(v4 != 0) { + break + } + /* + * Expand R to 48 bits (simulate the E-box). + */ + r48l = r&uint32(0x00000001)<>int32(9) | r&uint32(0x1f800000)>>int32(11) | r&uint32(0x01f80000)>>int32(13) | r&uint32(0x001f8000)>>int32(15) + r48r = r&uint32(0x0001f800)<>int32(31) + /* + * Do salting for crypt() and friends, and + * XOR with the permuted key. + */ + f = (r48l ^ r48r) & saltbits + v5 = kl + kl += 4 + r48l ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v5)) + v6 = kr + kr += 4 + r48r ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v6)) + /* + * Do S-box lookups (which shrink it back to 32 bits) + * and do the P-box permutation at the same time. + */ + f = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + uintptr(r48l>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 1*256 + uintptr(r48l>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 2*256 + uintptr(r48l>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 3*256 + uintptr(r48l&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 4*256 + uintptr(r48r>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 5*256 + uintptr(r48r>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 6*256 + uintptr(r48r>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 7*256 + uintptr(r48r&uint32(0x3f))*4)) + /* + * Now that we've permuted things, complete f(). + */ + f ^= l + l = r + r = f + } + r = l + l = f + } + /* + * Do final permutation (inverse of IP). + */ + v7 = Uint32FromInt32(0) + ro = v7 + lo = v7 + i1 = uint32(0) + ibit1 = Uint32FromInt32(28) + for { + if !(i1 < uint32(4)) { + break + } + ro |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + ibit1 -= uint32(4) + lo |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + goto _8 + _8: + ; + i1++ + ibit1 -= uint32(4) + } + *(*Tuint32_t)(unsafe.Pointer(l_out)) = lo + *(*Tuint32_t)(unsafe.Pointer(r_out)) = ro +} + +func _des_cipher(tls *TLS, in uintptr, out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rawl, rawr Tuint32_t + var _ /* l_out at bp+0 */ Tuint32_t + var _ /* r_out at bp+4 */ Tuint32_t + _, _ = rawl, rawr + rawl = uint32(*(*uint8)(unsafe.Pointer(in + 3))) | uint32(*(*uint8)(unsafe.Pointer(in + 2)))<> int32(24)) + *(*uint8)(unsafe.Pointer(out + 1)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 2)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 3)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp))) + *(*uint8)(unsafe.Pointer(out + 4)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(24)) + *(*uint8)(unsafe.Pointer(out + 5)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 6)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 7)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4))) +} + +func __crypt_extended_r_uut(tls *TLS, _key uintptr, _setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(144) + defer tls.Free(144) + var count, l, salt, value, value1 Tuint32_t + var i uint32 + var key, p, q, setting, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 uintptr + var _ /* ekey at bp+0 */ Texpanded_key + var _ /* keybuf at bp+128 */ [8]uint8 + var _ /* r0 at bp+136 */ Tuint32_t + var _ /* r1 at bp+140 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = count, i, key, l, p, q, salt, setting, value, value1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 + key = _key + setting = _setting + /* + * Copy the key, shifting each character left by one bit and padding + * with zeroes. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint32FromInt64(8)-Uint32FromInt32(1)) { + v1 = q + q++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(int32(*(*uint8)(unsafe.Pointer(key))) << int32(1)) + if *(*uint8)(unsafe.Pointer(key)) != 0 { + key++ + } + } + X__des_setkey(tls, bp+128, bp) + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('_') { + /* + * "new"-style: + * setting - underscore, 4 chars of count, 4 chars of salt + * key - unlimited characters + */ + i = uint32(1) + count = Uint32FromInt32(0) + for { + if !(i < uint32(5)) { + break + } + value = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + count |= value << ((i - uint32(1)) * uint32(6)) + goto _2 + _2: + ; + i++ + } + if !(count != 0) { + return UintptrFromInt32(0) + } + i = uint32(5) + salt = Uint32FromInt32(0) + for { + if !(i < uint32(9)) { + break + } + value1 = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value1]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + salt |= value1 << ((i - uint32(5)) * uint32(6)) + goto _3 + _3: + ; + i++ + } + for *(*uint8)(unsafe.Pointer(key)) != 0 { + /* + * Encrypt the key with itself. + */ + _des_cipher(tls, bp+128, bp+128, uint32(1), uint32(0), bp) + /* + * And XOR with the next 8 characters of the key. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint32FromInt64(8)-Uint32FromInt32(1)) && *(*uint8)(unsafe.Pointer(key)) != 0 { + v5 = q + q++ + p4 = v5 + v6 = key + key++ + *(*uint8)(unsafe.Pointer(p4)) = uint8(int32(*(*uint8)(unsafe.Pointer(p4))) ^ int32(*(*uint8)(unsafe.Pointer(v6)))<> int32(8) + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v7)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v10 = p + p++ + *(*uint8)(unsafe.Pointer(v10)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 136))<>Int32FromInt32(16)&uint32(0xffff) + v11 = p + p++ + *(*uint8)(unsafe.Pointer(v11)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v12 = p + p++ + *(*uint8)(unsafe.Pointer(v12)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v13 = p + p++ + *(*uint8)(unsafe.Pointer(v13)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v14 = p + p++ + *(*uint8)(unsafe.Pointer(v14)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 140)) << int32(2) + v15 = p + p++ + *(*uint8)(unsafe.Pointer(v15)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v16 = p + p++ + *(*uint8)(unsafe.Pointer(v16)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v17 = p + p++ + *(*uint8)(unsafe.Pointer(v17)) = _ascii64[l&uint32(0x3f)] + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return output +} + +func X__crypt_des(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var p, retval, test_hash, test_key, test_setting, v1 uintptr + var _ /* test_buf at bp+0 */ [21]uint8 + _, _, _, _, _, _ = p, retval, test_hash, test_key, test_setting, v1 + test_key = __ccgo_ts + 72 + test_setting = __ccgo_ts + 93 + test_hash = __ccgo_ts + 103 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('_') { + test_setting = __ccgo_ts + 124 + test_hash = __ccgo_ts + 127 + } + /* + * Hash the supplied password. + */ + retval = __crypt_extended_r_uut(tls, key, setting, output) + /* + * Perform a quick self-test. It is important that we make both calls + * to _crypt_extended_r_uut() from the same scope such that they likely + * use the same stack locations, which makes the second call overwrite + * the first call's sensitive data on the stack and makes it more + * likely that any alignment related issues would be detected. + */ + p = __crypt_extended_r_uut(tls, test_key, test_setting, bp) + if p != 0 && !(Xstrcmp(tls, p, test_hash) != 0) && retval != 0 { + return retval + } + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('*') { + v1 = __ccgo_ts + 141 + } else { + v1 = __ccgo_ts + 70 + } + return v1 +} + +const KEY_MAX = 30000 +const SALT_MAX = 8 + +/* public domain md5 implementation based on rfc1321 and libtomcrypt */ + +type Tmd5 = struct { + F__ccgo_align [0]uint32 + Flen1 Tuint64_t + Fh [4]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _rol(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n<>(Int32FromInt32(32)-k) +} + +var _tab = [64]Tuint32_t{ + 0: uint32(0xd76aa478), + 1: uint32(0xe8c7b756), + 2: uint32(0x242070db), + 3: uint32(0xc1bdceee), + 4: uint32(0xf57c0faf), + 5: uint32(0x4787c62a), + 6: uint32(0xa8304613), + 7: uint32(0xfd469501), + 8: uint32(0x698098d8), + 9: uint32(0x8b44f7af), + 10: uint32(0xffff5bb1), + 11: uint32(0x895cd7be), + 12: uint32(0x6b901122), + 13: uint32(0xfd987193), + 14: uint32(0xa679438e), + 15: uint32(0x49b40821), + 16: uint32(0xf61e2562), + 17: uint32(0xc040b340), + 18: uint32(0x265e5a51), + 19: uint32(0xe9b6c7aa), + 20: uint32(0xd62f105d), + 21: uint32(0x02441453), + 22: uint32(0xd8a1e681), + 23: uint32(0xe7d3fbc8), + 24: uint32(0x21e1cde6), + 25: uint32(0xc33707d6), + 26: uint32(0xf4d50d87), + 27: uint32(0x455a14ed), + 28: uint32(0xa9e3e905), + 29: uint32(0xfcefa3f8), + 30: uint32(0x676f02d9), + 31: uint32(0x8d2a4c8a), + 32: uint32(0xfffa3942), + 33: uint32(0x8771f681), + 34: uint32(0x6d9d6122), + 35: uint32(0xfde5380c), + 36: uint32(0xa4beea44), + 37: uint32(0x4bdecfa9), + 38: uint32(0xf6bb4b60), + 39: uint32(0xbebfbc70), + 40: uint32(0x289b7ec6), + 41: uint32(0xeaa127fa), + 42: uint32(0xd4ef3085), + 43: uint32(0x04881d05), + 44: uint32(0xd9d4d039), + 45: uint32(0xe6db99e5), + 46: uint32(0x1fa27cf8), + 47: uint32(0xc4ac5665), + 48: uint32(0xf4292244), + 49: uint32(0x432aff97), + 50: uint32(0xab9423a7), + 51: uint32(0xfc93a039), + 52: uint32(0x655b59c3), + 53: uint32(0x8f0ccc92), + 54: uint32(0xffeff47d), + 55: uint32(0x85845dd1), + 56: uint32(0x6fa87e4f), + 57: uint32(0xfe2ce6e0), + 58: uint32(0xa3014314), + 59: uint32(0x4e0811a1), + 60: uint32(0xf7537e82), + 61: uint32(0xbd3af235), + 62: uint32(0x2ad7d2bb), + 63: uint32(0xeb86d391), +} + +func _processblock(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, b, c, d, i Tuint32_t + var _ /* W at bp+0 */ [16]Tuint32_t + _, _, _, _, _ = a, b, c, d, i + i = uint32(0) + for { + if !(i < uint32(16)) { + break + } + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i)))) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(1))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(2))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(3))))) << int32(24) + goto _1 + _1: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + i = uint32(0) + for i < uint32(16) { + a += d ^ b&(c^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + a = _rol(tls, a, int32(7)) + b + i++ + d += c ^ a&(b^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + d = _rol(tls, d, int32(12)) + a + i++ + c += b ^ d&(a^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + c = _rol(tls, c, int32(17)) + d + i++ + b += a ^ c&(d^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + b = _rol(tls, b, int32(22)) + c + i++ + } + for i < uint32(32) { + a += c ^ d&(c^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(5)) + b + i++ + d += b ^ c&(b^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(9)) + a + i++ + c += a ^ b&(a^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(14)) + d + i++ + b += d ^ a&(d^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(20)) + c + i++ + } + for i < uint32(48) { + a += b ^ c ^ d + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(4)) + b + i++ + d += a ^ b ^ c + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(11)) + a + i++ + c += d ^ a ^ b + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(16)) + d + i++ + b += c ^ d ^ a + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(23)) + c + i++ + } + for i < uint32(64) { + a += c ^ (b | ^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(6)) + b + i++ + d += b ^ (a | ^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(10)) + a + i++ + c += a ^ (d | ^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(15)) + d + i++ + b += d ^ (c | ^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(21)) + c + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d +} + +func _pad(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 24 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+24+uintptr(r), 0, uint32(64)-r) + r = uint32(0) + _processblock(tls, s, s+24) + } + Xmemset(tls, s+24+uintptr(r), 0, uint32(56)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 56)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 57)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 58)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 59)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 60)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 61)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 62)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 63)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(56)) + _processblock(tls, s, s+24) +} + +func _md5_init(tls *TLS, s uintptr) { + (*Tmd5)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x67452301) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xefcdab89) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x98badcfe) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0x10325476) +} + +func _md5_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad(tls, s) + i = 0 + for { + if !(i < int32(4)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + goto _1 + _1: + ; + i++ + } +} + +func _md5_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(64)-r { + _memcpy(tls, s+24+uintptr(r), p, len1) + return + } + _memcpy(tls, s+24+uintptr(r), p, uint32(64)-r) + len1 -= uint32(64) - r + p += uintptr(uint32(64) - r) + _processblock(tls, s, s+24) + } + for { + if !(len1 >= uint32(64)) { + break + } + _processblock(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(64) + p += uintptr(64) + } + _memcpy(tls, s+24, p, len1) +} + +/*- + * Copyright (c) 2003 Poul-Henning Kamp + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* key limit is not part of the original design, added for DoS protection */ + +var _b64 = [65]uint8{'.', '/', '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', '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'} + +func _to64(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b64[u%uint32(64)] + u /= uint32(64) + } + return s +} + +func _md5crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(112) + defer tls.Free(112) + var i, klen, slen uint32 + var p, salt, v5 uintptr + var _ /* ctx at bp+0 */ Tmd5 + var _ /* md at bp+88 */ [16]uint8 + _, _, _, _, _, _ = i, klen, p, salt, slen, v5 + /* reject large keys */ + klen = Xstrnlen(tls, key, uint32(Int32FromInt32(KEY_MAX)+Int32FromInt32(1))) + if klen > uint32(KEY_MAX) { + return uintptr(0) + } + /* setting: $1$salt$ (closing $ is optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+143, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + i = uint32(0) + for { + if !(i < uint32(SALT_MAX) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + goto _1 + _1: + ; + i++ + } + slen = i + /* md5(key salt key) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, klen) + _md5_update(tls, bp, salt, slen) + _md5_update(tls, bp, key, klen) + _md5_sum(tls, bp, bp+88) + /* md5(key $1$ salt repeated-md weird-key[0]-0) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, klen) + _md5_update(tls, bp, setting, uint32(3)+slen) + i = klen + for { + if !(i > uint32(16)) { + break + } + _md5_update(tls, bp, bp+88, uint32(16)) + goto _2 + _2: + ; + i -= uint32(16) + } + _md5_update(tls, bp, bp+88, i) + (*(*[16]uint8)(unsafe.Pointer(bp + 88)))[0] = uint8(0) + i = klen + for { + if !(i != 0) { + break + } + if i&uint32(1) != 0 { + _md5_update(tls, bp, bp+88, uint32(1)) + } else { + _md5_update(tls, bp, key, uint32(1)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _md5_sum(tls, bp, bp+88) + /* md = f(md, key, salt) iteration */ + i = uint32(0) + for { + if !(i < uint32(1000)) { + break + } + _md5_init(tls, bp) + if i%uint32(2) != 0 { + _md5_update(tls, bp, key, klen) + } else { + _md5_update(tls, bp, bp+88, uint32(16)) + } + if i%uint32(3) != 0 { + _md5_update(tls, bp, salt, slen) + } + if i%uint32(7) != 0 { + _md5_update(tls, bp, key, klen) + } + if i%uint32(2) != 0 { + _md5_update(tls, bp, bp+88, uint32(16)) + } else { + _md5_update(tls, bp, key, klen) + } + _md5_sum(tls, bp, bp+88) + goto _4 + _4: + ; + i++ + } + /* output is $1$salt$hash */ + _memcpy(tls, output, setting, uint32(3)+slen) + p = output + uintptr(3) + uintptr(slen) + v5 = p + p++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('$') + i = uint32(0) + for { + if !(i < uint32(5)) { + break + } + p = _to64(tls, p, uint32(int32((*(*[16]uint8)(unsafe.Pointer(bp + 88)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var p, q uintptr + var _ /* testbuf at bp+0 */ [64]uint8 + _, _ = p, q + p = _md5crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _md5crypt(tls, uintptr(unsafe.Pointer(&_testkey)), uintptr(unsafe.Pointer(&_testsetting)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash)), uint32(35)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting = [13]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$'} + +var _testhash = [35]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$', '9', 'Q', 'c', 'g', '8', 'D', 'y', 'v', 'i', 'e', 'k', 'V', '3', 't', 'D', 'G', 'M', 'Z', 'y', 'n', 'J', '1'} + +func X__crypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + var output uintptr + _ = output + /* Per the crypt_r API, the caller has provided a pointer to + * struct crypt_data; however, this implementation does not + * use the structure to store any internal state, and treats + * it purely as a char buffer for storing the result. */ + output = data + if int32(*(*uint8)(unsafe.Pointer(salt))) == int32('$') && *(*uint8)(unsafe.Pointer(salt + 1)) != 0 && *(*uint8)(unsafe.Pointer(salt + 2)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('1') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_md5(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('2') && int32(*(*uint8)(unsafe.Pointer(salt + 3))) == int32('$') { + return X__crypt_blowfish(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('5') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha256(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('6') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha512(tls, key, salt, output) + } + } + return X__crypt_des(tls, key, salt, output) +} + +func Xcrypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, data) +} + +const KEY_MAX1 = 256 +const ROUNDS_DEFAULT = 5000 +const ROUNDS_MAX = 9999999 +const ROUNDS_MIN = 1000 +const SALT_MAX1 = 16 + +/* public domain sha256 implementation based on fips180-3 */ + +type Tsha256 = struct { + F__ccgo_align [0]uint32 + Flen1 Tuint64_t + Fh [8]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _ror(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n>>k | n<<(Int32FromInt32(32)-k) +} + +var _K = [64]Tuint32_t{ + 0: uint32(0x428a2f98), + 1: uint32(0x71374491), + 2: uint32(0xb5c0fbcf), + 3: uint32(0xe9b5dba5), + 4: uint32(0x3956c25b), + 5: uint32(0x59f111f1), + 6: uint32(0x923f82a4), + 7: uint32(0xab1c5ed5), + 8: uint32(0xd807aa98), + 9: uint32(0x12835b01), + 10: uint32(0x243185be), + 11: uint32(0x550c7dc3), + 12: uint32(0x72be5d74), + 13: uint32(0x80deb1fe), + 14: uint32(0x9bdc06a7), + 15: uint32(0xc19bf174), + 16: uint32(0xe49b69c1), + 17: uint32(0xefbe4786), + 18: uint32(0x0fc19dc6), + 19: uint32(0x240ca1cc), + 20: uint32(0x2de92c6f), + 21: uint32(0x4a7484aa), + 22: uint32(0x5cb0a9dc), + 23: uint32(0x76f988da), + 24: uint32(0x983e5152), + 25: uint32(0xa831c66d), + 26: uint32(0xb00327c8), + 27: uint32(0xbf597fc7), + 28: uint32(0xc6e00bf3), + 29: uint32(0xd5a79147), + 30: uint32(0x06ca6351), + 31: uint32(0x14292967), + 32: uint32(0x27b70a85), + 33: uint32(0x2e1b2138), + 34: uint32(0x4d2c6dfc), + 35: uint32(0x53380d13), + 36: uint32(0x650a7354), + 37: uint32(0x766a0abb), + 38: uint32(0x81c2c92e), + 39: uint32(0x92722c85), + 40: uint32(0xa2bfe8a1), + 41: uint32(0xa81a664b), + 42: uint32(0xc24b8b70), + 43: uint32(0xc76c51a3), + 44: uint32(0xd192e819), + 45: uint32(0xd6990624), + 46: uint32(0xf40e3585), + 47: uint32(0x106aa070), + 48: uint32(0x19a4c116), + 49: uint32(0x1e376c08), + 50: uint32(0x2748774c), + 51: uint32(0x34b0bcb5), + 52: uint32(0x391c0cb3), + 53: uint32(0x4ed8aa4a), + 54: uint32(0x5b9cca4f), + 55: uint32(0x682e6ff3), + 56: uint32(0x748f82ee), + 57: uint32(0x78a5636f), + 58: uint32(0x84c87814), + 59: uint32(0x8cc70208), + 60: uint32(0x90befffa), + 61: uint32(0xa4506ceb), + 62: uint32(0xbef9a3f7), + 63: uint32(0xc67178f2), +} + +func _processblock1(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var a, b, c, d, e, f, g, h, t1, t2 Tuint32_t + var i int32 + var _ /* W at bp+0 */ [64]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i)))) << int32(24) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(1))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(2))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(3))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(64)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(17)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(10) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(7)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(18)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(3)) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + e = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) + f = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) + g = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) + h = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) + i = 0 + for { + if !(i < int32(64)) { + break + } + t1 = h + (_ror(tls, e, int32(6)) ^ _ror(tls, e, int32(11)) ^ _ror(tls, e, int32(25))) + (g ^ e&(f^g)) + _K[i] + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] + t2 = _ror(tls, a, int32(2)) ^ _ror(tls, a, int32(13)) ^ _ror(tls, a, int32(22)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) += e + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) += f + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) += g + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) += h +} + +func _pad1(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 40 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+40+uintptr(r), 0, uint32(64)-r) + r = uint32(0) + _processblock1(tls, s, s+40) + } + Xmemset(tls, s+40+uintptr(r), 0, uint32(56)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 56)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 57)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 58)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 59)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 60)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 61)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 62)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 63)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1) + _processblock1(tls, s, s+40) +} + +func _sha256_init(tls *TLS, s uintptr) { + (*Tsha256)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x6a09e667) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xbb67ae85) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x3c6ef372) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0xa54ff53a) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) = uint32(0x510e527f) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) = uint32(0x9b05688c) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) = uint32(0x1f83d9ab) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) = uint32(0x5be0cd19) +} + +func _sha256_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad1(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + goto _1 + _1: + ; + i++ + } +} + +func _sha256_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(64)-r { + _memcpy(tls, s+40+uintptr(r), p, len1) + return + } + _memcpy(tls, s+40+uintptr(r), p, uint32(64)-r) + len1 -= uint32(64) - r + p += uintptr(uint32(64) - r) + _processblock1(tls, s, s+40) + } + for { + if !(len1 >= uint32(64)) { + break + } + _processblock1(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(64) + p += uintptr(64) + } + _memcpy(tls, s+40, p, len1) +} + +var _b641 = [65]uint8{'.', '/', '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', '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'} + +func _to641(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b641[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(32)) { + break + } + _sha256_update(tls, s, md, uint32(32)) + goto _1 + _1: + ; + i -= uint32(32) + } + _sha256_update(tls, s, md, i) +} + +func _sha256crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i, klen, r, slen, u uint32 + var p, salt uintptr + var _ /* ctx at bp+0 */ Tsha256 + var _ /* end at bp+220 */ uintptr + var _ /* kmd at bp+136 */ [32]uint8 + var _ /* md at bp+104 */ [32]uint8 + var _ /* rounds at bp+200 */ [20]uint8 + var _ /* smd at bp+168 */ [32]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 200)) = [20]uint8{} + /* reject large keys */ + klen = Xstrnlen(tls, key, uint32(Int32FromInt32(KEY_MAX1)+Int32FromInt32(1))) + if klen > uint32(KEY_MAX1) { + return uintptr(0) + } + /* setting: $5$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+147, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint32FromInt64(8)-Uint32FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint32FromInt64(8) - Uint32FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+220, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 220))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 220)) + uintptr(1) + if u < uint32(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint32(ROUNDS_MAX) { + return uintptr(0) + } else { + r = u + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+200, __ccgo_ts+159, VaList(bp+232, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _1 + _1: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, klen) + _sha256_update(tls, bp, salt, slen) + _sha256_update(tls, bp, key, klen) + _sha256_sum(tls, bp, bp+104) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, klen) + _sha256_update(tls, bp, salt, slen) + _hashmd(tls, bp, klen, bp+104) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha256_update(tls, bp, bp+104, uint32(32)) + } else { + _sha256_update(tls, bp, key, klen) + } + goto _2 + _2: + ; + i >>= uint32(1) + } + _sha256_sum(tls, bp, bp+104) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha256_update(tls, bp, key, klen) + goto _3 + _3: + ; + i++ + } + _sha256_sum(tls, bp, bp+136) + /* DS = sha(repeat-salt) */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[0]))) { + break + } + _sha256_update(tls, bp, salt, slen) + goto _4 + _4: + ; + i++ + } + _sha256_sum(tls, bp, bp+168) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha256_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd(tls, bp, klen, bp+136) + } else { + _sha256_update(tls, bp, bp+104, uint32(32)) + } + if i%uint32(3) != 0 { + _sha256_update(tls, bp, bp+168, slen) + } + if i%uint32(7) != 0 { + _hashmd(tls, bp, klen, bp+136) + } + if i%uint32(2) != 0 { + _sha256_update(tls, bp, bp+104, uint32(32)) + } else { + _hashmd(tls, bp, klen, bp+136) + } + _sha256_sum(tls, bp, bp+104) + goto _5 + _5: + ; + i++ + } + /* output is $5$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+170, VaList(bp+232, bp+200, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(10)) { + break + } + p = _to641(tls, p, uint32(int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm1)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha256crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha256crypt(tls, uintptr(unsafe.Pointer(&_testkey1)), uintptr(unsafe.Pointer(&_testsetting1)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash1)), uint32(73)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey1 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting1 = [30]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash1 = [73]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '3', 'V', 'f', 'D', 'j', 'P', 't', '0', '5', 'V', 'H', 'F', 'n', '4', '7', 'C', '/', 'o', 'j', 'F', 'Z', '6', 'K', 'R', 'P', 'Y', 'r', 'O', 'j', 'j', '1', 'l', 'L', 'b', 'H', '.', 'd', 'k', 'F', '3', 'b', 'Z', '6'} + +/* public domain sha512 implementation based on fips180-3 */ +/* >=2^64 bits messages are not supported (about 2000 peta bytes) */ + +type Tsha512 = struct { + F__ccgo_align [0]uint32 + Flen1 Tuint64_t + Fh [8]Tuint64_t + Fbuf [128]Tuint8_t +} + +func _ror1(tls *TLS, n Tuint64_t, k int32) (r Tuint64_t) { + return n>>k | n<<(Int32FromInt32(64)-k) +} + +var _K1 = [80]Tuint64_t{ + 0: uint64(0x428a2f98d728ae22), + 1: uint64(0x7137449123ef65cd), + 2: uint64(0xb5c0fbcfec4d3b2f), + 3: uint64(0xe9b5dba58189dbbc), + 4: uint64(0x3956c25bf348b538), + 5: uint64(0x59f111f1b605d019), + 6: uint64(0x923f82a4af194f9b), + 7: uint64(0xab1c5ed5da6d8118), + 8: uint64(0xd807aa98a3030242), + 9: uint64(0x12835b0145706fbe), + 10: uint64(0x243185be4ee4b28c), + 11: uint64(0x550c7dc3d5ffb4e2), + 12: uint64(0x72be5d74f27b896f), + 13: uint64(0x80deb1fe3b1696b1), + 14: uint64(0x9bdc06a725c71235), + 15: uint64(0xc19bf174cf692694), + 16: uint64(0xe49b69c19ef14ad2), + 17: uint64(0xefbe4786384f25e3), + 18: uint64(0x0fc19dc68b8cd5b5), + 19: uint64(0x240ca1cc77ac9c65), + 20: uint64(0x2de92c6f592b0275), + 21: uint64(0x4a7484aa6ea6e483), + 22: uint64(0x5cb0a9dcbd41fbd4), + 23: uint64(0x76f988da831153b5), + 24: uint64(0x983e5152ee66dfab), + 25: uint64(0xa831c66d2db43210), + 26: uint64(0xb00327c898fb213f), + 27: uint64(0xbf597fc7beef0ee4), + 28: uint64(0xc6e00bf33da88fc2), + 29: uint64(0xd5a79147930aa725), + 30: uint64(0x06ca6351e003826f), + 31: uint64(0x142929670a0e6e70), + 32: uint64(0x27b70a8546d22ffc), + 33: uint64(0x2e1b21385c26c926), + 34: uint64(0x4d2c6dfc5ac42aed), + 35: uint64(0x53380d139d95b3df), + 36: uint64(0x650a73548baf63de), + 37: uint64(0x766a0abb3c77b2a8), + 38: uint64(0x81c2c92e47edaee6), + 39: uint64(0x92722c851482353b), + 40: uint64(0xa2bfe8a14cf10364), + 41: uint64(0xa81a664bbc423001), + 42: uint64(0xc24b8b70d0f89791), + 43: uint64(0xc76c51a30654be30), + 44: uint64(0xd192e819d6ef5218), + 45: uint64(0xd69906245565a910), + 46: uint64(0xf40e35855771202a), + 47: uint64(0x106aa07032bbd1b8), + 48: uint64(0x19a4c116b8d2d0c8), + 49: uint64(0x1e376c085141ab53), + 50: uint64(0x2748774cdf8eeb99), + 51: uint64(0x34b0bcb5e19b48a8), + 52: uint64(0x391c0cb3c5c95a63), + 53: uint64(0x4ed8aa4ae3418acb), + 54: uint64(0x5b9cca4f7763e373), + 55: uint64(0x682e6ff3d6b2b8a3), + 56: uint64(0x748f82ee5defb2fc), + 57: uint64(0x78a5636f43172f60), + 58: uint64(0x84c87814a1f0ab72), + 59: uint64(0x8cc702081a6439ec), + 60: uint64(0x90befffa23631e28), + 61: uint64(0xa4506cebde82bde9), + 62: uint64(0xbef9a3f7b2c67915), + 63: uint64(0xc67178f2e372532b), + 64: uint64(0xca273eceea26619c), + 65: uint64(0xd186b8c721c0c207), + 66: uint64(0xeada7dd6cde0eb1e), + 67: uint64(0xf57d4f7fee6ed178), + 68: uint64(0x06f067aa72176fba), + 69: uint64(0x0a637dc5a2c898a6), + 70: uint64(0x113f9804bef90dae), + 71: uint64(0x1b710b35131c471b), + 72: uint64(0x28db77f523047d84), + 73: uint64(0x32caab7b40c72493), + 74: uint64(0x3c9ebe0a15c9bebc), + 75: uint64(0x431d67c49c100d4c), + 76: uint64(0x4cc5d4becb3e42b6), + 77: uint64(0x597f299cfc657e2a), + 78: uint64(0x5fcb6fab3ad6faec), + 79: uint64(0x6c44198c4a475817), +} + +func _processblock2(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(640) + defer tls.Free(640) + var a, b, c, d, e, f, g, h, t1, t2 Tuint64_t + var i int32 + var _ /* W at bp+0 */ [80]Tuint64_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i)))) << int32(56) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(1))))) << int32(48) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(2))))) << int32(40) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(3))))) << int32(32) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(4))))) << int32(24) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(5))))) << int32(16) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(6))))) << int32(8) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(7))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(80)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(61)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(6) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(1)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(8)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(7)) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint64_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) + c = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) + d = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) + e = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) + f = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) + g = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) + h = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) + i = 0 + for { + if !(i < int32(80)) { + break + } + t1 = h + (_ror1(tls, e, int32(14)) ^ _ror1(tls, e, int32(18)) ^ _ror1(tls, e, int32(41))) + (g ^ e&(f^g)) + _K1[i] + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] + t2 = _ror1(tls, a, int32(28)) ^ _ror1(tls, a, int32(34)) ^ _ror1(tls, a, int32(39)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint64_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) += b + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) += c + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) += d + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) += e + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) += f + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) += g + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) += h +} + +func _pad2(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 72 + uintptr(v1))) = uint8(0x80) + if r > uint32(112) { + Xmemset(tls, s+72+uintptr(r), 0, uint32(128)-r) + r = uint32(0) + _processblock2(tls, s, s+72) + } + Xmemset(tls, s+72+uintptr(r), 0, uint32(120)-r) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 120)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 121)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 122)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 123)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 124)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 125)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 126)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 127)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1) + _processblock2(tls, s, s+72) +} + +func _sha512_init(tls *TLS, s uintptr) { + (*Tsha512)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint64_t)(unsafe.Pointer(s + 8)) = uint64(0x6a09e667f3bcc908) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) = uint64(0xbb67ae8584caa73b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) = uint64(0x3c6ef372fe94f82b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) = uint64(0xa54ff53a5f1d36f1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) = uint64(0x510e527fade682d1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) = uint64(0x9b05688c2b3e6c1f) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) = uint64(0x1f83d9abfb41bd6b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) = uint64(0x5be0cd19137e2179) +} + +func _sha512_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad2(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(1)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(2)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(3)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(4)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(5)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(6)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(7)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8))) + goto _1 + _1: + ; + i++ + } +} + +func _sha512_update(tls *TLS, s uintptr, m uintptr, len1 uint32) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + *(*Tuint64_t)(unsafe.Pointer(s)) += uint64(len1) + if r != 0 { + if len1 < uint32(128)-r { + _memcpy(tls, s+72+uintptr(r), p, len1) + return + } + _memcpy(tls, s+72+uintptr(r), p, uint32(128)-r) + len1 -= uint32(128) - r + p += uintptr(uint32(128) - r) + _processblock2(tls, s, s+72) + } + for { + if !(len1 >= uint32(128)) { + break + } + _processblock2(tls, s, p) + goto _1 + _1: + ; + len1 -= uint32(128) + p += uintptr(128) + } + _memcpy(tls, s+72, p, len1) +} + +var _b642 = [65]uint8{'.', '/', '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', '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'} + +func _to642(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b642[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd1(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(64)) { + break + } + _sha512_update(tls, s, md, uint32(64)) + goto _1 + _1: + ; + i -= uint32(64) + } + _sha512_update(tls, s, md, i) +} + +func _sha512crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(448) + defer tls.Free(448) + var i, klen, r, slen, u uint32 + var p, salt uintptr + var _ /* ctx at bp+0 */ Tsha512 + var _ /* end at bp+412 */ uintptr + var _ /* kmd at bp+264 */ [64]uint8 + var _ /* md at bp+200 */ [64]uint8 + var _ /* rounds at bp+392 */ [20]uint8 + var _ /* smd at bp+328 */ [64]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 392)) = [20]uint8{} + /* reject large keys */ + i = uint32(0) + for { + if !(i <= uint32(KEY_MAX1) && *(*uint8)(unsafe.Pointer(key + uintptr(i))) != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i > uint32(KEY_MAX1) { + return uintptr(0) + } + klen = i + /* setting: $6$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+181, uint32(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint32FromInt64(8)-Uint32FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint32FromInt64(8) - Uint32FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+412, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 412))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 412)) + uintptr(1) + if u < uint32(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint32(ROUNDS_MAX) { + return uintptr(0) + } else { + r = u + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+392, __ccgo_ts+159, VaList(bp+424, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _2 + _2: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, klen) + _sha512_update(tls, bp, salt, slen) + _sha512_update(tls, bp, key, klen) + _sha512_sum(tls, bp, bp+200) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, klen) + _sha512_update(tls, bp, salt, slen) + _hashmd1(tls, bp, klen, bp+200) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha512_update(tls, bp, bp+200, uint32(64)) + } else { + _sha512_update(tls, bp, key, klen) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _sha512_sum(tls, bp, bp+200) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha512_update(tls, bp, key, klen) + goto _4 + _4: + ; + i++ + } + _sha512_sum(tls, bp, bp+264) + /* DS = sha(repeat-salt) */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[0]))) { + break + } + _sha512_update(tls, bp, salt, slen) + goto _5 + _5: + ; + i++ + } + _sha512_sum(tls, bp, bp+328) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha512_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } else { + _sha512_update(tls, bp, bp+200, uint32(64)) + } + if i%uint32(3) != 0 { + _sha512_update(tls, bp, bp+328, slen) + } + if i%uint32(7) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } + if i%uint32(2) != 0 { + _sha512_update(tls, bp, bp+200, uint32(64)) + } else { + _hashmd1(tls, bp, klen, bp+264) + } + _sha512_sum(tls, bp, bp+200) + goto _6 + _6: + ; + i++ + } + /* output is $6$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+185, VaList(bp+424, bp+392, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(21)) { + break + } + p = _to642(tls, p, uint32(int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm2)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha512crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha512crypt(tls, uintptr(unsafe.Pointer(&_testkey2)), uintptr(unsafe.Pointer(&_testsetting2)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash2)), uint32(116)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey2 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting2 = [30]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash2 = [116]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', 'B', 'C', 'p', 't', '8', 'z', 'L', 'r', 'c', '/', 'R', 'c', 'y', 'u', 'X', 'm', 'C', 'D', 'O', 'E', '1', 'A', 'L', 'q', 'M', 'X', 'B', '2', 'M', 'H', '6', 'n', '1', 'g', '8', '9', '1', 'H', 'h', 'F', 'j', '8', '.', 'w', '7', 'L', 'x', 'G', 'v', '.', 'F', 'T', 'k', 'q', 'q', '6', 'V', 'x', 'c', '/', 'k', 'm', '3', 'Y', '0', 'j', 'E', '0', 'j', '2', '4', 'j', 'Y', '5', 'P', 'I', 'v', '/', 'o', 'O', 'u', '6', 'r', 'e', 'g', '1'} + +var ___encrypt_key Texpanded_key + +func Xsetkey(tls *TLS, key uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v, (%v:)", tls, key, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, j int32 + var p3 uintptr + var _ /* bkey at bp+0 */ [8]uint8 + _, _, _ = i, j, p3 + i = 0 + for { + if !(i < int32(8)) { + break + } + (*(*[8]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + j = int32(7) + for { + if !(j >= 0) { + break + } + p3 = bp + uintptr(i) + *(*uint8)(unsafe.Pointer(p3)) = uint8(uint32(*(*uint8)(unsafe.Pointer(p3))) | uint32(int32(*(*uint8)(unsafe.Pointer(key)))&Int32FromInt32(1))<= 0) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + 128 + uintptr(i)*4)) |= uint32(int32(*(*uint8)(unsafe.Pointer(p)))&Int32FromInt32(1)) << j + goto _2 + _2: + ; + j-- + p++ + } + goto _1 + _1: + ; + i++ + } + key = uintptr(unsafe.Pointer(&___encrypt_key)) + if edflag != 0 { + key = bp + i = 0 + for { + if !(i < int32(16)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + uintptr(int32(15)-i)*4)) + *(*Tuint32_t)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + 64 + uintptr(int32(15)-i)*4)) + goto _3 + _3: + ; + i++ + } + } + X__do_des(tls, (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[0], (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[int32(1)], bp+128, bp+128+uintptr(1)*4, uint32(1), uint32(0), key) + p = block + i = 0 + for { + if !(i < int32(2)) { + break + } + j = int32(31) + for { + if !(j >= 0) { + break + } + v6 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = uint8((*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[i] >> j & uint32(1)) + goto _5 + _5: + ; + j-- + } + goto _4 + _4: + ; + i++ + } +} + +var _table = [384]uint16{ + 128: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 129: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 130: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 131: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 132: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 133: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 134: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 135: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 136: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 137: uint16((Int32FromInt32(0x320)/Int32FromInt32(256) | Int32FromInt32(0x320)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 138: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 139: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 140: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 141: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 142: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 143: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 144: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 145: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 146: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 147: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 148: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 149: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 150: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 151: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 152: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 153: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 154: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 155: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 156: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 157: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 158: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 159: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 160: uint16((Int32FromInt32(0x160)/Int32FromInt32(256) | Int32FromInt32(0x160)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 161: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 162: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 163: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 164: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 165: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 166: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 167: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 168: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 169: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 170: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 171: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 172: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 173: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 174: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 175: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 176: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 177: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 178: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 179: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 180: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 181: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 182: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 183: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 184: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 185: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 186: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 187: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 188: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 189: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 190: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 191: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 192: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 193: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 194: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 195: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 196: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 197: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 198: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 199: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 200: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 201: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 202: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 203: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 204: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 205: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 206: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 207: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 208: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 209: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 210: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 211: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 212: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 213: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 214: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 215: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 216: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 217: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 218: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 219: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 220: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 221: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 222: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 223: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 224: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 225: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 226: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 227: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 228: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 229: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 230: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 231: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 232: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 233: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 234: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 235: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 236: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 237: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 238: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 239: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 240: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 241: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 242: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 243: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 244: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 245: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 246: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 247: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 248: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 249: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 250: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 251: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 252: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 253: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 254: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 255: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), +} + +var _ptable = uintptr(unsafe.Pointer(&_table)) + uintptr(128)*2 + +func X__ctype_b_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable)) +} + +const BLX = "blx" +const CLOCKS_PER_SEC = 1000000 +const CLOCK_BOOTTIME = 7 +const CLOCK_BOOTTIME_ALARM = 9 +const CLOCK_MONOTONIC = 1 +const CLOCK_MONOTONIC_COARSE = 6 +const CLOCK_MONOTONIC_RAW = 4 +const CLOCK_PROCESS_CPUTIME_ID = 2 +const CLOCK_REALTIME = 0 +const CLOCK_REALTIME_ALARM = 8 +const CLOCK_REALTIME_COARSE = 5 +const CLOCK_SGI_CYCLE = 10 +const CLOCK_TAI = 11 +const CLOCK_THREAD_CPUTIME_ID = 3 +const C_LOCALE = 0 +const DEFAULT_GUARD_MAX = 1048576 +const DEFAULT_GUARD_SIZE = 8192 +const DEFAULT_STACK_MAX = 8388608 +const DEFAULT_STACK_SIZE = 131072 +const DTP_OFFSET = 0 +const FUTEX_CLOCK_REALTIME = 256 +const FUTEX_CMP_REQUEUE = 4 +const FUTEX_FD = 2 +const FUTEX_LOCK_PI = 6 +const FUTEX_PRIVATE = 128 +const FUTEX_REQUEUE = 3 +const FUTEX_TRYLOCK_PI = 8 +const FUTEX_UNLOCK_PI = 7 +const FUTEX_WAIT = 0 +const FUTEX_WAIT_BITSET = 9 +const FUTEX_WAKE = 1 +const FUTEX_WAKE_OP = 5 +const GAP_ABOVE_TP = 8 +const LC_ALL = 6 +const LC_ALL_MASK = 2147483647 +const LC_COLLATE = 3 +const LC_COLLATE_MASK = 8 +const LC_CTYPE = 0 +const LC_CTYPE_MASK = 1 +const LC_GLOBAL_LOCALE = -1 +const LC_MESSAGES = 5 +const LC_MESSAGES_MASK = 32 +const LC_MONETARY = 4 +const LC_MONETARY_MASK = 16 +const LC_NUMERIC = 1 +const LC_NUMERIC_MASK = 2 +const LC_TIME = 2 +const LC_TIME_MASK = 4 +const LOCALE_NAME_MAX = 23 +const MAP_ANON = 32 +const MAP_ANONYMOUS = 32 +const MAP_DENYWRITE = 2048 +const MAP_EXECUTABLE = 4096 +const MAP_FAILED = -1 +const MAP_FILE = 0 +const MAP_FIXED = 16 +const MAP_FIXED_NOREPLACE = 1048576 +const MAP_GROWSDOWN = 256 +const MAP_HUGETLB = 262144 +const MAP_HUGE_16GB = 2281701376 +const MAP_HUGE_16KB = 939524096 +const MAP_HUGE_16MB = 1610612736 +const MAP_HUGE_1GB = 2013265920 +const MAP_HUGE_1MB = 1342177280 +const MAP_HUGE_256MB = 1879048192 +const MAP_HUGE_2GB = 2080374784 +const MAP_HUGE_2MB = 1409286144 +const MAP_HUGE_32MB = 1677721600 +const MAP_HUGE_512KB = 1275068416 +const MAP_HUGE_512MB = 1946157056 +const MAP_HUGE_64KB = 1073741824 +const MAP_HUGE_8MB = 1543503872 +const MAP_HUGE_MASK = 63 +const MAP_HUGE_SHIFT = 26 +const MAP_LOCKED = 8192 +const MAP_NONBLOCK = 65536 +const MAP_NORESERVE = 16384 +const MAP_POPULATE = 32768 +const MAP_PRIVATE = 2 +const MAP_SHARED = 1 +const MAP_SHARED_VALIDATE = 3 +const MAP_STACK = 131072 +const MAP_SYNC = 524288 +const MAP_TYPE = 15 +const MCL_CURRENT = 1 +const MCL_FUTURE = 2 +const MCL_ONFAULT = 4 +const MC_PC = 0 +const MS_ASYNC = 1 +const MS_INVALIDATE = 2 +const MS_SYNC = 4 +const POSIX_MADV_DONTNEED = 4 +const POSIX_MADV_NORMAL = 0 +const POSIX_MADV_RANDOM = 1 +const POSIX_MADV_SEQUENTIAL = 2 +const POSIX_MADV_WILLNEED = 3 +const PROT_EXEC = 4 +const PROT_GROWSDOWN = 16777216 +const PROT_GROWSUP = 33554432 +const PROT_NONE = 0 +const PROT_READ = 1 +const PROT_WRITE = 2 +const PTHREAD_BARRIER_SERIAL_THREAD = -1 +const PTHREAD_CANCELED = -1 +const PTHREAD_CANCEL_ASYNCHRONOUS = 1 +const PTHREAD_CANCEL_DEFERRED = 0 +const PTHREAD_CANCEL_DISABLE = 1 +const PTHREAD_CANCEL_ENABLE = 0 +const PTHREAD_CANCEL_MASKED = 2 +const PTHREAD_CREATE_DETACHED = 1 +const PTHREAD_CREATE_JOINABLE = 0 +const PTHREAD_EXPLICIT_SCHED = 1 +const PTHREAD_INHERIT_SCHED = 0 +const PTHREAD_MUTEX_DEFAULT = 0 +const PTHREAD_MUTEX_ERRORCHECK = 2 +const PTHREAD_MUTEX_NORMAL = 0 +const PTHREAD_MUTEX_RECURSIVE = 1 +const PTHREAD_MUTEX_ROBUST = 1 +const PTHREAD_MUTEX_STALLED = 0 +const PTHREAD_ONCE_INIT = 0 +const PTHREAD_PRIO_INHERIT = 1 +const PTHREAD_PRIO_NONE = 0 +const PTHREAD_PRIO_PROTECT = 2 +const PTHREAD_PROCESS_PRIVATE = 0 +const PTHREAD_PROCESS_SHARED = 1 +const PTHREAD_SCOPE_PROCESS = 1 +const PTHREAD_SCOPE_SYSTEM = 0 +const SCHED_BATCH = 3 +const SCHED_DEADLINE = 6 +const SCHED_FIFO = 1 +const SCHED_IDLE = 5 +const SCHED_OTHER = 0 +const SCHED_RESET_ON_FORK = 1073741824 +const SCHED_RR = 2 +const SIGCANCEL = 33 +const SIGSYNCCALL = 34 +const SIGTIMER = 32 +const TIMER_ABSTIME = 1 +const TIME_UTC = 1 +const TP_OFFSET = 0 +const UTF8_LOCALE = 0 +const __CCGO_SIZEOF_GO_MUTEX = 8 +const __SU = 0 +const a_post_llsc = 0 +const a_pre_llsc = 0 +const a_spin = 0 +const pthread = 0 +const tls_mod_off_t = 0 + +type Tlconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits uint8 + Ffrac_digits uint8 + Fp_cs_precedes uint8 + Fp_sep_by_space uint8 + Fn_cs_precedes uint8 + Fn_sep_by_space uint8 + Fp_sign_posn uint8 + Fn_sign_posn uint8 + Fint_p_cs_precedes uint8 + Fint_p_sep_by_space uint8 + Fint_n_cs_precedes uint8 + Fint_n_sep_by_space uint8 + Fint_p_sign_posn uint8 + Fint_n_sign_posn uint8 +} + +type t__locale_map = struct { + Fmap1 uintptr + Fmap_size Tsize_t + Fname [24]uint8 + Fnext uintptr +} + +type Tclockid_t = int32 + +type t__pthread = struct { + F__ccgo_align [0]uint32 + Fself uintptr + Fprev uintptr + Fnext uintptr + Fsysinfo Tuintptr_t + Ftid int32 + Ferrno_val int32 + Fdetach_state int32 + Fcancel int32 + Fcanceldisable uint8 + Fcancelasync uint8 + F__ccgo34 uint8 + Fmap_base uintptr + Fmap_size Tsize_t + Fstack uintptr + Fstack_size Tsize_t + Fguard_size Tsize_t + Fresult uintptr + Fcancelbuf uintptr + Ftsd uintptr + Frobust_list struct { + Fhead uintptr + Foff int32 + Fpending uintptr + } + Fh_errno_val int32 + Ftimer_id int32 + Flocale Tlocale_t + Fkilllock [1]int32 + Fdlerror_buf uintptr + Fstdio_locks uintptr + F__ccgo_join_mutex [1]int64 + Fcanary Tuintptr_t + Fdtv uintptr +} + +type Tpthread_once_t = int32 + +type Tpthread_key_t = uint32 + +type Tpthread_spinlock_t = int32 + +type Tpthread_mutexattr_t = struct { + F__attr uint32 +} + +type Tpthread_condattr_t = struct { + F__attr uint32 +} + +type Tpthread_barrierattr_t = struct { + F__attr uint32 +} + +type Tpthread_rwlockattr_t = struct { + F__attr [2]uint32 +} + +type Tpthread_mutex_t = struct { + F__u struct { + F__vi [0][6]int32 + F__p [0][6]uintptr + F__i [6]int32 + } + F__ccgo_room int32 +} + +type Tpthread_cond_t = struct { + F__u struct { + F__vi [0][12]int32 + F__p [0][12]uintptr + F__i [12]int32 + } +} + +type Tpthread_rwlock_t = struct { + F__u struct { + F__vi [0][8]int32 + F__p [0][8]uintptr + F__i [8]int32 + } +} + +type Tpthread_barrier_t = struct { + F__u struct { + F__vi [0][5]int32 + F__p [0][5]uintptr + F__i [5]int32 + } +} + +type Tsched_param = struct { + Fsched_priority int32 + F__reserved1 int32 + F__reserved2 [4]int32 + F__reserved3 int32 +} + +type Ttimer_t = uintptr + +type Ttm = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + F__tm_gmtoff int32 + F__tm_zone uintptr +} + +type Titimerspec = struct { + F__ccgo_align [0]uint32 + Fit_interval Ttimespec + Fit_value Ttimespec +} + +type t__ptcb = struct { + F__f uintptr + F__x uintptr + F__next uintptr +} + +type Tmode_t = uint32 + +type Ta_cas_p_undefined_but_pointer_not_32bit = [1]uint8 + +const _DT_EXITED = 0 +const _DT_EXITING = 1 +const _DT_JOINABLE = 2 +const _DT_DETACHED = 3 + +func X__ctype_get_mb_cur_max(tls *TLS) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + return uint32(v1) +} + +var _table1 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('a'), + 194: int32('b'), + 195: int32('c'), + 196: int32('d'), + 197: int32('e'), + 198: int32('f'), + 199: int32('g'), + 200: int32('h'), + 201: int32('i'), + 202: int32('j'), + 203: int32('k'), + 204: int32('l'), + 205: int32('m'), + 206: int32('n'), + 207: int32('o'), + 208: int32('p'), + 209: int32('q'), + 210: int32('r'), + 211: int32('s'), + 212: int32('t'), + 213: int32('u'), + 214: int32('v'), + 215: int32('w'), + 216: int32('x'), + 217: int32('y'), + 218: int32('z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('a'), + 226: int32('b'), + 227: int32('c'), + 228: int32('d'), + 229: int32('e'), + 230: int32('f'), + 231: int32('g'), + 232: int32('h'), + 233: int32('i'), + 234: int32('j'), + 235: int32('k'), + 236: int32('l'), + 237: int32('m'), + 238: int32('n'), + 239: int32('o'), + 240: int32('p'), + 241: int32('q'), + 242: int32('r'), + 243: int32('s'), + 244: int32('t'), + 245: int32('u'), + 246: int32('v'), + 247: int32('w'), + 248: int32('x'), + 249: int32('y'), + 250: int32('z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 + +func X__ctype_tolower_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable1)) +} + +var _table2 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('A'), + 194: int32('B'), + 195: int32('C'), + 196: int32('D'), + 197: int32('E'), + 198: int32('F'), + 199: int32('G'), + 200: int32('H'), + 201: int32('I'), + 202: int32('J'), + 203: int32('K'), + 204: int32('L'), + 205: int32('M'), + 206: int32('N'), + 207: int32('O'), + 208: int32('P'), + 209: int32('Q'), + 210: int32('R'), + 211: int32('S'), + 212: int32('T'), + 213: int32('U'), + 214: int32('V'), + 215: int32('W'), + 216: int32('X'), + 217: int32('Y'), + 218: int32('Z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('A'), + 226: int32('B'), + 227: int32('C'), + 228: int32('D'), + 229: int32('E'), + 230: int32('F'), + 231: int32('G'), + 232: int32('H'), + 233: int32('I'), + 234: int32('J'), + 235: int32('K'), + 236: int32('L'), + 237: int32('M'), + 238: int32('N'), + 239: int32('O'), + 240: int32('P'), + 241: int32('Q'), + 242: int32('R'), + 243: int32('S'), + 244: int32('T'), + 245: int32('U'), + 246: int32('V'), + 247: int32('W'), + 248: int32('X'), + 249: int32('Y'), + 250: int32('Z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable2 = uintptr(unsafe.Pointer(&_table2)) + uintptr(128)*4 + +func X__ctype_toupper_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable2)) +} + +func Xisalnum(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) != 0 || BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0) +} + +func X__isalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalnum(tls, c) +} + +func Xisalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalnum_l(tls, c, l) +} + +func Xisalpha(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) +} + +func X__isalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalpha(tls, c) +} + +func Xisalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalpha_l(tls, c, l) +} + +func Xisascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(c & ^Int32FromInt32(0x7f) != 0)) +} + +func Xisblank(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || c == int32('\t')) +} + +func X__isblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, c) +} + +func Xisblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isblank_l(tls, c, l) +} + +func Xiscntrl(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c) < uint32(0x20) || c == int32(0x7f)) +} + +func X__iscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiscntrl(tls, c) +} + +func Xiscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iscntrl_l(tls, c, l) +} + +func Xisdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('0') < uint32(10)) +} + +func X__isdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisdigit(tls, c) +} + +func Xisdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isdigit_l(tls, c, l) +} + +func Xisgraph(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) +} + +func X__isgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisgraph(tls, c) +} + +func Xisgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isgraph_l(tls, c, l) +} + +func Xislower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('a') < uint32(26)) +} + +func X__islower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xislower(tls, c) +} + +func Xislower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__islower_l(tls, c, l) +} + +func Xisprint(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x20) < uint32(0x5f)) +} + +func X__isprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisprint(tls, c) +} + +func Xisprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isprint_l(tls, c, l) +} + +func Xispunct(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) != 0 && !(Xisalnum(tls, c) != 0)) +} + +func X__ispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xispunct(tls, c) +} + +func Xispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ispunct_l(tls, c, l) +} + +func Xisspace(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || uint32(c)-uint32('\t') < uint32(5)) +} + +func X__isspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisspace(tls, c) +} + +func Xisspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isspace_l(tls, c, l) +} + +func Xisupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('A') < uint32(26)) +} + +func X__isupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisupper(tls, c) +} + +func Xisupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isupper_l(tls, c, l) +} + +type Twint_t = uint32 + +type Twctype_t = uint32 + +type Twctrans_t = uintptr + +func Xiswalnum(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(wc-uint32('0') < uint32(10)) != 0 || Xiswalpha(tls, wc) != 0) +} + +func X__iswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalnum(tls, c) +} + +func Xiswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalnum_l(tls, c, l) +} + +var _table3 = [3904]uint8{ + 0: uint8(18), + 1: uint8(17), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(17), + 18: uint8(34), + 19: uint8(35), + 20: uint8(36), + 21: uint8(17), + 22: uint8(37), + 23: uint8(38), + 24: uint8(39), + 25: uint8(40), + 26: uint8(41), + 27: uint8(42), + 28: uint8(43), + 29: uint8(44), + 30: uint8(17), + 31: uint8(45), + 32: uint8(46), + 33: uint8(47), + 34: uint8(16), + 35: uint8(16), + 36: uint8(48), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(16), + 48: uint8(52), + 49: uint8(53), + 50: uint8(16), + 51: uint8(16), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(54), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(55), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(56), + 165: uint8(17), + 166: uint8(57), + 167: uint8(58), + 168: uint8(59), + 169: uint8(60), + 170: uint8(61), + 171: uint8(62), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(63), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(64), + 251: uint8(65), + 252: uint8(17), + 253: uint8(66), + 254: uint8(67), + 255: uint8(68), + 256: uint8(69), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(73), + 261: uint8(74), + 262: uint8(17), + 263: uint8(75), + 264: uint8(76), + 265: uint8(77), + 266: uint8(78), + 267: uint8(79), + 268: uint8(80), + 269: uint8(81), + 270: uint8(16), + 271: uint8(82), + 272: uint8(83), + 273: uint8(84), + 274: uint8(85), + 275: uint8(86), + 276: uint8(87), + 277: uint8(88), + 278: uint8(89), + 279: uint8(90), + 280: uint8(91), + 281: uint8(92), + 282: uint8(93), + 283: uint8(16), + 284: uint8(94), + 285: uint8(95), + 286: uint8(96), + 287: uint8(16), + 288: uint8(17), + 289: uint8(17), + 290: uint8(17), + 291: uint8(97), + 292: uint8(98), + 293: uint8(99), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(17), + 305: uint8(17), + 306: uint8(17), + 307: uint8(17), + 308: uint8(100), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(17), + 325: uint8(17), + 326: uint8(101), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(17), + 361: uint8(17), + 362: uint8(102), + 363: uint8(103), + 364: uint8(16), + 365: uint8(16), + 366: uint8(104), + 367: uint8(105), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(106), + 392: uint8(17), + 393: uint8(17), + 394: uint8(107), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(108), + 434: uint8(109), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(110), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(111), + 469: uint8(112), + 470: uint8(113), + 471: uint8(114), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(115), + 481: uint8(116), + 482: uint8(117), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(118), + 489: uint8(119), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(120), + 495: uint8(16), + 496: uint8(16), + 497: uint8(121), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 584: uint8(254), + 585: uint8(255), + 586: uint8(255), + 587: uint8(7), + 588: uint8(254), + 589: uint8(255), + 590: uint8(255), + 591: uint8(7), + 597: uint8(4), + 598: uint8(32), + 599: uint8(4), + 600: uint8(255), + 601: uint8(255), + 602: uint8(127), + 603: uint8(255), + 604: uint8(255), + 605: uint8(255), + 606: uint8(127), + 607: uint8(255), + 608: uint8(255), + 609: uint8(255), + 610: uint8(255), + 611: uint8(255), + 612: uint8(255), + 613: uint8(255), + 614: uint8(255), + 615: uint8(255), + 616: uint8(255), + 617: uint8(255), + 618: uint8(255), + 619: uint8(255), + 620: uint8(255), + 621: uint8(255), + 622: uint8(255), + 623: uint8(255), + 624: uint8(255), + 625: uint8(255), + 626: uint8(255), + 627: uint8(255), + 628: uint8(255), + 629: uint8(255), + 630: uint8(255), + 631: uint8(255), + 632: uint8(195), + 633: uint8(255), + 634: uint8(3), + 636: uint8(31), + 637: uint8(80), + 648: uint8(32), + 654: uint8(223), + 655: uint8(188), + 656: uint8(64), + 657: uint8(215), + 658: uint8(255), + 659: uint8(255), + 660: uint8(251), + 661: uint8(255), + 662: uint8(255), + 663: uint8(255), + 664: uint8(255), + 665: uint8(255), + 666: uint8(255), + 667: uint8(255), + 668: uint8(255), + 669: uint8(255), + 670: uint8(191), + 671: uint8(255), + 672: uint8(255), + 673: uint8(255), + 674: uint8(255), + 675: uint8(255), + 676: uint8(255), + 677: uint8(255), + 678: uint8(255), + 679: uint8(255), + 680: uint8(255), + 681: uint8(255), + 682: uint8(255), + 683: uint8(255), + 684: uint8(255), + 685: uint8(255), + 686: uint8(255), + 687: uint8(255), + 688: uint8(3), + 689: uint8(252), + 690: uint8(255), + 691: uint8(255), + 692: uint8(255), + 693: uint8(255), + 694: uint8(255), + 695: uint8(255), + 696: uint8(255), + 697: uint8(255), + 698: uint8(255), + 699: uint8(255), + 700: uint8(255), + 701: uint8(255), + 702: uint8(255), + 703: uint8(255), + 704: uint8(255), + 705: uint8(255), + 706: uint8(255), + 707: uint8(255), + 708: uint8(255), + 709: uint8(255), + 710: uint8(254), + 711: uint8(255), + 712: uint8(255), + 713: uint8(255), + 714: uint8(127), + 715: uint8(2), + 716: uint8(255), + 717: uint8(255), + 718: uint8(255), + 719: uint8(255), + 720: uint8(255), + 721: uint8(1), + 726: uint8(255), + 727: uint8(191), + 728: uint8(182), + 730: uint8(255), + 731: uint8(255), + 732: uint8(255), + 733: uint8(135), + 734: uint8(7), + 738: uint8(255), + 739: uint8(7), + 740: uint8(255), + 741: uint8(255), + 742: uint8(255), + 743: uint8(255), + 744: uint8(255), + 745: uint8(255), + 746: uint8(255), + 747: uint8(254), + 748: uint8(255), + 749: uint8(195), + 750: uint8(255), + 751: uint8(255), + 752: uint8(255), + 753: uint8(255), + 754: uint8(255), + 755: uint8(255), + 756: uint8(255), + 757: uint8(255), + 758: uint8(255), + 759: uint8(255), + 760: uint8(255), + 761: uint8(255), + 762: uint8(239), + 763: uint8(31), + 764: uint8(254), + 765: uint8(225), + 766: uint8(255), + 767: uint8(159), + 770: uint8(255), + 771: uint8(255), + 772: uint8(255), + 773: uint8(255), + 774: uint8(255), + 775: uint8(255), + 777: uint8(224), + 778: uint8(255), + 779: uint8(255), + 780: uint8(255), + 781: uint8(255), + 782: uint8(255), + 783: uint8(255), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(255), + 788: uint8(255), + 789: uint8(255), + 790: uint8(3), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(7), + 798: uint8(48), + 799: uint8(4), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(252), + 804: uint8(255), + 805: uint8(31), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(1), + 812: uint8(255), + 813: uint8(7), + 820: uint8(255), + 821: uint8(255), + 822: uint8(223), + 823: uint8(63), + 826: uint8(240), + 827: uint8(255), + 828: uint8(248), + 829: uint8(3), + 830: uint8(255), + 831: uint8(255), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(239), + 840: uint8(255), + 841: uint8(223), + 842: uint8(225), + 843: uint8(255), + 844: uint8(207), + 845: uint8(255), + 846: uint8(254), + 847: uint8(255), + 848: uint8(239), + 849: uint8(159), + 850: uint8(249), + 851: uint8(255), + 852: uint8(255), + 853: uint8(253), + 854: uint8(197), + 855: uint8(227), + 856: uint8(159), + 857: uint8(89), + 858: uint8(128), + 859: uint8(176), + 860: uint8(207), + 861: uint8(255), + 862: uint8(3), + 863: uint8(16), + 864: uint8(238), + 865: uint8(135), + 866: uint8(249), + 867: uint8(255), + 868: uint8(255), + 869: uint8(253), + 870: uint8(109), + 871: uint8(195), + 872: uint8(135), + 873: uint8(25), + 874: uint8(2), + 875: uint8(94), + 876: uint8(192), + 877: uint8(255), + 878: uint8(63), + 880: uint8(238), + 881: uint8(191), + 882: uint8(251), + 883: uint8(255), + 884: uint8(255), + 885: uint8(253), + 886: uint8(237), + 887: uint8(227), + 888: uint8(191), + 889: uint8(27), + 890: uint8(1), + 892: uint8(207), + 893: uint8(255), + 895: uint8(30), + 896: uint8(238), + 897: uint8(159), + 898: uint8(249), + 899: uint8(255), + 900: uint8(255), + 901: uint8(253), + 902: uint8(237), + 903: uint8(227), + 904: uint8(159), + 905: uint8(25), + 906: uint8(192), + 907: uint8(176), + 908: uint8(207), + 909: uint8(255), + 910: uint8(2), + 912: uint8(236), + 913: uint8(199), + 914: uint8(61), + 915: uint8(214), + 916: uint8(24), + 917: uint8(199), + 918: uint8(255), + 919: uint8(195), + 920: uint8(199), + 921: uint8(29), + 922: uint8(129), + 924: uint8(192), + 925: uint8(255), + 928: uint8(239), + 929: uint8(223), + 930: uint8(253), + 931: uint8(255), + 932: uint8(255), + 933: uint8(253), + 934: uint8(255), + 935: uint8(227), + 936: uint8(223), + 937: uint8(29), + 938: uint8(96), + 939: uint8(7), + 940: uint8(207), + 941: uint8(255), + 944: uint8(239), + 945: uint8(223), + 946: uint8(253), + 947: uint8(255), + 948: uint8(255), + 949: uint8(253), + 950: uint8(239), + 951: uint8(227), + 952: uint8(223), + 953: uint8(29), + 954: uint8(96), + 955: uint8(64), + 956: uint8(207), + 957: uint8(255), + 958: uint8(6), + 960: uint8(239), + 961: uint8(223), + 962: uint8(253), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(231), + 968: uint8(223), + 969: uint8(93), + 970: uint8(240), + 971: uint8(128), + 972: uint8(207), + 973: uint8(255), + 975: uint8(252), + 976: uint8(236), + 977: uint8(255), + 978: uint8(127), + 979: uint8(252), + 980: uint8(255), + 981: uint8(255), + 982: uint8(251), + 983: uint8(47), + 984: uint8(127), + 985: uint8(128), + 986: uint8(95), + 987: uint8(255), + 988: uint8(192), + 989: uint8(255), + 990: uint8(12), + 992: uint8(254), + 993: uint8(255), + 994: uint8(255), + 995: uint8(255), + 996: uint8(255), + 997: uint8(127), + 998: uint8(255), + 999: uint8(7), + 1000: uint8(63), + 1001: uint8(32), + 1002: uint8(255), + 1003: uint8(3), + 1008: uint8(214), + 1009: uint8(247), + 1010: uint8(255), + 1011: uint8(255), + 1012: uint8(175), + 1013: uint8(255), + 1014: uint8(255), + 1015: uint8(59), + 1016: uint8(95), + 1017: uint8(32), + 1018: uint8(255), + 1019: uint8(243), + 1024: uint8(1), + 1028: uint8(255), + 1029: uint8(3), + 1032: uint8(255), + 1033: uint8(254), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(31), + 1038: uint8(254), + 1039: uint8(255), + 1040: uint8(3), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(254), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(31), + 1056: uint8(255), + 1057: uint8(255), + 1058: uint8(255), + 1059: uint8(255), + 1060: uint8(255), + 1061: uint8(255), + 1062: uint8(127), + 1063: uint8(249), + 1064: uint8(255), + 1065: uint8(3), + 1066: uint8(255), + 1067: uint8(255), + 1068: uint8(255), + 1069: uint8(255), + 1070: uint8(255), + 1071: uint8(255), + 1072: uint8(255), + 1073: uint8(255), + 1074: uint8(255), + 1075: uint8(63), + 1076: uint8(255), + 1077: uint8(255), + 1078: uint8(255), + 1079: uint8(255), + 1080: uint8(191), + 1081: uint8(32), + 1082: uint8(255), + 1083: uint8(255), + 1084: uint8(255), + 1085: uint8(255), + 1086: uint8(255), + 1087: uint8(247), + 1088: uint8(255), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(61), + 1098: uint8(127), + 1099: uint8(61), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(255), + 1104: uint8(255), + 1105: uint8(61), + 1106: uint8(255), + 1107: uint8(255), + 1108: uint8(255), + 1109: uint8(255), + 1110: uint8(61), + 1111: uint8(127), + 1112: uint8(61), + 1113: uint8(255), + 1114: uint8(127), + 1115: uint8(255), + 1116: uint8(255), + 1117: uint8(255), + 1118: uint8(255), + 1119: uint8(255), + 1120: uint8(255), + 1121: uint8(255), + 1122: uint8(61), + 1123: uint8(255), + 1124: uint8(255), + 1125: uint8(255), + 1126: uint8(255), + 1127: uint8(255), + 1128: uint8(255), + 1129: uint8(255), + 1130: uint8(255), + 1131: uint8(7), + 1136: uint8(255), + 1137: uint8(255), + 1140: uint8(255), + 1141: uint8(255), + 1142: uint8(255), + 1143: uint8(255), + 1144: uint8(255), + 1145: uint8(255), + 1146: uint8(255), + 1147: uint8(255), + 1148: uint8(255), + 1149: uint8(255), + 1150: uint8(63), + 1151: uint8(63), + 1152: uint8(254), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1183: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(159), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(254), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(7), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(199), + 1214: uint8(255), + 1215: uint8(1), + 1216: uint8(255), + 1217: uint8(223), + 1218: uint8(15), + 1220: uint8(255), + 1221: uint8(255), + 1222: uint8(15), + 1224: uint8(255), + 1225: uint8(255), + 1226: uint8(15), + 1228: uint8(255), + 1229: uint8(223), + 1230: uint8(13), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(207), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(1), + 1242: uint8(128), + 1243: uint8(16), + 1244: uint8(255), + 1245: uint8(3), + 1250: uint8(255), + 1251: uint8(3), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(1), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(7), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(63), + 1280: uint8(255), + 1281: uint8(255), + 1282: uint8(255), + 1283: uint8(127), + 1284: uint8(255), + 1285: uint8(15), + 1286: uint8(255), + 1287: uint8(1), + 1288: uint8(192), + 1289: uint8(255), + 1290: uint8(255), + 1291: uint8(255), + 1292: uint8(255), + 1293: uint8(63), + 1294: uint8(31), + 1296: uint8(255), + 1297: uint8(255), + 1298: uint8(255), + 1299: uint8(255), + 1300: uint8(255), + 1301: uint8(15), + 1302: uint8(255), + 1303: uint8(255), + 1304: uint8(255), + 1305: uint8(3), + 1306: uint8(255), + 1307: uint8(3), + 1312: uint8(255), + 1313: uint8(255), + 1314: uint8(255), + 1315: uint8(15), + 1316: uint8(255), + 1317: uint8(255), + 1318: uint8(255), + 1319: uint8(255), + 1320: uint8(255), + 1321: uint8(255), + 1322: uint8(255), + 1323: uint8(127), + 1324: uint8(254), + 1325: uint8(255), + 1326: uint8(31), + 1328: uint8(255), + 1329: uint8(3), + 1330: uint8(255), + 1331: uint8(3), + 1332: uint8(128), + 1344: uint8(255), + 1345: uint8(255), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(239), + 1351: uint8(255), + 1352: uint8(239), + 1353: uint8(15), + 1354: uint8(255), + 1355: uint8(3), + 1360: uint8(255), + 1361: uint8(255), + 1362: uint8(255), + 1363: uint8(255), + 1364: uint8(255), + 1365: uint8(243), + 1366: uint8(255), + 1367: uint8(255), + 1368: uint8(255), + 1369: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(191), + 1373: uint8(255), + 1374: uint8(3), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(255), + 1381: uint8(255), + 1382: uint8(127), + 1384: uint8(255), + 1385: uint8(227), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(63), + 1392: uint8(255), + 1393: uint8(1), + 1394: uint8(255), + 1395: uint8(255), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(231), + 1405: uint8(222), + 1406: uint8(111), + 1407: uint8(4), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(255), + 1416: uint8(255), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1436: uint8(128), + 1437: uint8(255), + 1438: uint8(31), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(63), + 1443: uint8(63), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(63), + 1449: uint8(63), + 1450: uint8(255), + 1451: uint8(170), + 1452: uint8(255), + 1453: uint8(255), + 1454: uint8(255), + 1455: uint8(63), + 1456: uint8(255), + 1457: uint8(255), + 1458: uint8(255), + 1459: uint8(255), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(223), + 1463: uint8(95), + 1464: uint8(220), + 1465: uint8(31), + 1466: uint8(207), + 1467: uint8(15), + 1468: uint8(255), + 1469: uint8(31), + 1470: uint8(220), + 1471: uint8(31), + 1486: uint8(2), + 1487: uint8(128), + 1490: uint8(255), + 1491: uint8(31), + 1504: uint8(132), + 1505: uint8(252), + 1506: uint8(47), + 1507: uint8(62), + 1508: uint8(80), + 1509: uint8(189), + 1510: uint8(255), + 1511: uint8(243), + 1512: uint8(224), + 1513: uint8(67), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(1), + 1558: uint8(192), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(3), + 1568: uint8(255), + 1569: uint8(255), + 1570: uint8(255), + 1571: uint8(255), + 1572: uint8(255), + 1573: uint8(127), + 1574: uint8(255), + 1575: uint8(255), + 1576: uint8(255), + 1577: uint8(255), + 1578: uint8(255), + 1579: uint8(127), + 1580: uint8(255), + 1581: uint8(255), + 1582: uint8(255), + 1583: uint8(255), + 1584: uint8(255), + 1585: uint8(255), + 1586: uint8(255), + 1587: uint8(255), + 1588: uint8(255), + 1589: uint8(255), + 1590: uint8(255), + 1591: uint8(255), + 1592: uint8(255), + 1593: uint8(255), + 1594: uint8(255), + 1595: uint8(255), + 1596: uint8(31), + 1597: uint8(120), + 1598: uint8(12), + 1600: uint8(255), + 1601: uint8(255), + 1602: uint8(255), + 1603: uint8(255), + 1604: uint8(191), + 1605: uint8(32), + 1606: uint8(255), + 1607: uint8(255), + 1608: uint8(255), + 1609: uint8(255), + 1610: uint8(255), + 1611: uint8(255), + 1612: uint8(255), + 1613: uint8(128), + 1616: uint8(255), + 1617: uint8(255), + 1618: uint8(127), + 1620: uint8(127), + 1621: uint8(127), + 1622: uint8(127), + 1623: uint8(127), + 1624: uint8(127), + 1625: uint8(127), + 1626: uint8(127), + 1627: uint8(127), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1637: uint8(128), + 1664: uint8(224), + 1668: uint8(254), + 1669: uint8(3), + 1670: uint8(62), + 1671: uint8(31), + 1672: uint8(254), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(127), + 1683: uint8(224), + 1684: uint8(254), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(255), + 1691: uint8(255), + 1692: uint8(255), + 1693: uint8(255), + 1694: uint8(255), + 1695: uint8(247), + 1696: uint8(224), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(255), + 1701: uint8(255), + 1702: uint8(254), + 1703: uint8(255), + 1704: uint8(255), + 1705: uint8(255), + 1706: uint8(255), + 1707: uint8(255), + 1708: uint8(255), + 1709: uint8(255), + 1710: uint8(255), + 1711: uint8(255), + 1712: uint8(255), + 1713: uint8(127), + 1716: uint8(255), + 1717: uint8(255), + 1718: uint8(255), + 1719: uint8(7), + 1726: uint8(255), + 1727: uint8(255), + 1728: uint8(255), + 1729: uint8(255), + 1730: uint8(255), + 1731: uint8(255), + 1732: uint8(255), + 1733: uint8(255), + 1734: uint8(255), + 1735: uint8(255), + 1736: uint8(255), + 1737: uint8(255), + 1738: uint8(255), + 1739: uint8(255), + 1740: uint8(255), + 1741: uint8(255), + 1742: uint8(255), + 1743: uint8(255), + 1744: uint8(255), + 1745: uint8(255), + 1746: uint8(255), + 1747: uint8(255), + 1748: uint8(255), + 1749: uint8(255), + 1750: uint8(63), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(255), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1792: uint8(255), + 1793: uint8(255), + 1794: uint8(255), + 1795: uint8(255), + 1796: uint8(255), + 1797: uint8(255), + 1798: uint8(255), + 1799: uint8(255), + 1800: uint8(255), + 1801: uint8(255), + 1802: uint8(255), + 1803: uint8(255), + 1804: uint8(255), + 1805: uint8(255), + 1806: uint8(255), + 1807: uint8(255), + 1808: uint8(255), + 1809: uint8(31), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(63), + 1824: uint8(255), + 1825: uint8(31), + 1826: uint8(255), + 1827: uint8(255), + 1828: uint8(255), + 1829: uint8(15), + 1832: uint8(255), + 1833: uint8(255), + 1834: uint8(255), + 1835: uint8(255), + 1836: uint8(255), + 1837: uint8(127), + 1838: uint8(240), + 1839: uint8(143), + 1840: uint8(255), + 1841: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(255), + 1849: uint8(255), + 1850: uint8(255), + 1851: uint8(255), + 1852: uint8(255), + 1853: uint8(255), + 1858: uint8(128), + 1859: uint8(255), + 1860: uint8(252), + 1861: uint8(255), + 1862: uint8(255), + 1863: uint8(255), + 1864: uint8(255), + 1865: uint8(255), + 1866: uint8(255), + 1867: uint8(255), + 1868: uint8(255), + 1869: uint8(255), + 1870: uint8(255), + 1871: uint8(255), + 1872: uint8(255), + 1873: uint8(249), + 1874: uint8(255), + 1875: uint8(255), + 1876: uint8(255), + 1877: uint8(255), + 1878: uint8(255), + 1879: uint8(255), + 1880: uint8(124), + 1886: uint8(128), + 1887: uint8(255), + 1888: uint8(191), + 1889: uint8(255), + 1890: uint8(255), + 1891: uint8(255), + 1892: uint8(255), + 1896: uint8(255), + 1897: uint8(255), + 1898: uint8(255), + 1899: uint8(255), + 1900: uint8(255), + 1901: uint8(255), + 1902: uint8(15), + 1904: uint8(255), + 1905: uint8(255), + 1906: uint8(255), + 1907: uint8(255), + 1908: uint8(255), + 1909: uint8(255), + 1910: uint8(255), + 1911: uint8(255), + 1912: uint8(47), + 1914: uint8(255), + 1915: uint8(3), + 1918: uint8(252), + 1919: uint8(232), + 1920: uint8(255), + 1921: uint8(255), + 1922: uint8(255), + 1923: uint8(255), + 1924: uint8(255), + 1925: uint8(7), + 1926: uint8(255), + 1927: uint8(255), + 1928: uint8(255), + 1929: uint8(255), + 1930: uint8(7), + 1932: uint8(255), + 1933: uint8(255), + 1934: uint8(255), + 1935: uint8(31), + 1936: uint8(255), + 1937: uint8(255), + 1938: uint8(255), + 1939: uint8(255), + 1940: uint8(255), + 1941: uint8(255), + 1942: uint8(247), + 1943: uint8(255), + 1945: uint8(128), + 1946: uint8(255), + 1947: uint8(3), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(255), + 1951: uint8(127), + 1952: uint8(255), + 1953: uint8(255), + 1954: uint8(255), + 1955: uint8(255), + 1956: uint8(255), + 1957: uint8(255), + 1958: uint8(127), + 1960: uint8(255), + 1961: uint8(63), + 1962: uint8(255), + 1963: uint8(3), + 1964: uint8(255), + 1965: uint8(255), + 1966: uint8(127), + 1967: uint8(252), + 1968: uint8(255), + 1969: uint8(255), + 1970: uint8(255), + 1971: uint8(255), + 1972: uint8(255), + 1973: uint8(255), + 1974: uint8(255), + 1975: uint8(127), + 1976: uint8(5), + 1979: uint8(56), + 1980: uint8(255), + 1981: uint8(255), + 1982: uint8(60), + 1984: uint8(126), + 1985: uint8(126), + 1986: uint8(126), + 1988: uint8(127), + 1989: uint8(127), + 1990: uint8(255), + 1991: uint8(255), + 1992: uint8(255), + 1993: uint8(255), + 1994: uint8(255), + 1995: uint8(247), + 1996: uint8(255), + 1998: uint8(255), + 1999: uint8(255), + 2000: uint8(255), + 2001: uint8(255), + 2002: uint8(255), + 2003: uint8(255), + 2004: uint8(255), + 2005: uint8(255), + 2006: uint8(255), + 2007: uint8(255), + 2008: uint8(255), + 2009: uint8(255), + 2010: uint8(255), + 2011: uint8(255), + 2012: uint8(255), + 2013: uint8(7), + 2014: uint8(255), + 2015: uint8(3), + 2016: uint8(255), + 2017: uint8(255), + 2018: uint8(255), + 2019: uint8(255), + 2020: uint8(255), + 2021: uint8(255), + 2022: uint8(255), + 2023: uint8(255), + 2024: uint8(255), + 2025: uint8(255), + 2026: uint8(255), + 2027: uint8(255), + 2028: uint8(255), + 2029: uint8(255), + 2030: uint8(255), + 2031: uint8(255), + 2032: uint8(255), + 2033: uint8(255), + 2034: uint8(255), + 2035: uint8(255), + 2036: uint8(15), + 2038: uint8(255), + 2039: uint8(255), + 2040: uint8(127), + 2041: uint8(248), + 2042: uint8(255), + 2043: uint8(255), + 2044: uint8(255), + 2045: uint8(255), + 2046: uint8(255), + 2047: uint8(15), + 2048: uint8(255), + 2049: uint8(255), + 2050: uint8(255), + 2051: uint8(255), + 2052: uint8(255), + 2053: uint8(255), + 2054: uint8(255), + 2055: uint8(255), + 2056: uint8(255), + 2057: uint8(255), + 2058: uint8(255), + 2059: uint8(255), + 2060: uint8(255), + 2061: uint8(63), + 2062: uint8(255), + 2063: uint8(255), + 2064: uint8(255), + 2065: uint8(255), + 2066: uint8(255), + 2067: uint8(255), + 2068: uint8(255), + 2069: uint8(255), + 2070: uint8(255), + 2071: uint8(255), + 2072: uint8(255), + 2073: uint8(255), + 2074: uint8(255), + 2075: uint8(3), + 2080: uint8(127), + 2082: uint8(248), + 2083: uint8(224), + 2084: uint8(255), + 2085: uint8(253), + 2086: uint8(127), + 2087: uint8(95), + 2088: uint8(219), + 2089: uint8(255), + 2090: uint8(255), + 2091: uint8(255), + 2092: uint8(255), + 2093: uint8(255), + 2094: uint8(255), + 2095: uint8(255), + 2096: uint8(255), + 2097: uint8(255), + 2098: uint8(255), + 2099: uint8(255), + 2100: uint8(255), + 2101: uint8(255), + 2102: uint8(3), + 2106: uint8(248), + 2107: uint8(255), + 2108: uint8(255), + 2109: uint8(255), + 2110: uint8(255), + 2111: uint8(255), + 2112: uint8(255), + 2113: uint8(255), + 2114: uint8(255), + 2115: uint8(255), + 2116: uint8(255), + 2117: uint8(255), + 2118: uint8(255), + 2119: uint8(63), + 2122: uint8(255), + 2123: uint8(255), + 2124: uint8(255), + 2125: uint8(255), + 2126: uint8(255), + 2127: uint8(255), + 2128: uint8(255), + 2129: uint8(255), + 2130: uint8(252), + 2131: uint8(255), + 2132: uint8(255), + 2133: uint8(255), + 2134: uint8(255), + 2135: uint8(255), + 2136: uint8(255), + 2142: uint8(255), + 2143: uint8(15), + 2158: uint8(223), + 2159: uint8(255), + 2160: uint8(255), + 2161: uint8(255), + 2162: uint8(255), + 2163: uint8(255), + 2164: uint8(255), + 2165: uint8(255), + 2166: uint8(255), + 2167: uint8(255), + 2168: uint8(255), + 2169: uint8(255), + 2170: uint8(255), + 2171: uint8(255), + 2172: uint8(255), + 2173: uint8(255), + 2174: uint8(255), + 2175: uint8(31), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(254), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(7), + 2184: uint8(254), + 2185: uint8(255), + 2186: uint8(255), + 2187: uint8(7), + 2188: uint8(192), + 2189: uint8(255), + 2190: uint8(255), + 2191: uint8(255), + 2192: uint8(255), + 2193: uint8(255), + 2194: uint8(255), + 2195: uint8(255), + 2196: uint8(255), + 2197: uint8(255), + 2198: uint8(255), + 2199: uint8(127), + 2200: uint8(252), + 2201: uint8(252), + 2202: uint8(252), + 2203: uint8(28), + 2208: uint8(255), + 2209: uint8(239), + 2210: uint8(255), + 2211: uint8(255), + 2212: uint8(127), + 2213: uint8(255), + 2214: uint8(255), + 2215: uint8(183), + 2216: uint8(255), + 2217: uint8(63), + 2218: uint8(255), + 2219: uint8(63), + 2224: uint8(255), + 2225: uint8(255), + 2226: uint8(255), + 2227: uint8(255), + 2228: uint8(255), + 2229: uint8(255), + 2230: uint8(255), + 2231: uint8(255), + 2232: uint8(255), + 2233: uint8(255), + 2234: uint8(255), + 2235: uint8(255), + 2236: uint8(255), + 2237: uint8(255), + 2238: uint8(255), + 2239: uint8(7), + 2248: uint8(255), + 2249: uint8(255), + 2250: uint8(255), + 2251: uint8(255), + 2252: uint8(255), + 2253: uint8(255), + 2254: uint8(31), + 2288: uint8(255), + 2289: uint8(255), + 2290: uint8(255), + 2291: uint8(31), + 2292: uint8(255), + 2293: uint8(255), + 2294: uint8(255), + 2295: uint8(255), + 2296: uint8(255), + 2297: uint8(255), + 2298: uint8(1), + 2304: uint8(255), + 2305: uint8(255), + 2306: uint8(255), + 2307: uint8(255), + 2309: uint8(224), + 2310: uint8(255), + 2311: uint8(255), + 2312: uint8(255), + 2313: uint8(7), + 2314: uint8(255), + 2315: uint8(255), + 2316: uint8(255), + 2317: uint8(255), + 2318: uint8(255), + 2319: uint8(7), + 2320: uint8(255), + 2321: uint8(255), + 2322: uint8(255), + 2323: uint8(63), + 2324: uint8(255), + 2325: uint8(255), + 2326: uint8(255), + 2327: uint8(255), + 2328: uint8(15), + 2329: uint8(255), + 2330: uint8(62), + 2336: uint8(255), + 2337: uint8(255), + 2338: uint8(255), + 2339: uint8(255), + 2340: uint8(255), + 2341: uint8(255), + 2342: uint8(255), + 2343: uint8(255), + 2344: uint8(255), + 2345: uint8(255), + 2346: uint8(255), + 2347: uint8(255), + 2348: uint8(255), + 2349: uint8(255), + 2350: uint8(255), + 2351: uint8(255), + 2352: uint8(255), + 2353: uint8(255), + 2354: uint8(255), + 2355: uint8(63), + 2356: uint8(255), + 2357: uint8(3), + 2358: uint8(255), + 2359: uint8(255), + 2360: uint8(255), + 2361: uint8(255), + 2362: uint8(15), + 2363: uint8(255), + 2364: uint8(255), + 2365: uint8(255), + 2366: uint8(255), + 2367: uint8(15), + 2368: uint8(255), + 2369: uint8(255), + 2370: uint8(255), + 2371: uint8(255), + 2372: uint8(255), + 2374: uint8(255), + 2375: uint8(255), + 2376: uint8(255), + 2377: uint8(255), + 2378: uint8(255), + 2379: uint8(255), + 2380: uint8(15), + 2400: uint8(255), + 2401: uint8(255), + 2402: uint8(255), + 2403: uint8(255), + 2404: uint8(255), + 2405: uint8(255), + 2406: uint8(127), + 2408: uint8(255), + 2409: uint8(255), + 2410: uint8(63), + 2412: uint8(255), + 2432: uint8(63), + 2433: uint8(253), + 2434: uint8(255), + 2435: uint8(255), + 2436: uint8(255), + 2437: uint8(255), + 2438: uint8(191), + 2439: uint8(145), + 2440: uint8(255), + 2441: uint8(255), + 2442: uint8(63), + 2444: uint8(255), + 2445: uint8(255), + 2446: uint8(127), + 2448: uint8(255), + 2449: uint8(255), + 2450: uint8(255), + 2451: uint8(127), + 2460: uint8(255), + 2461: uint8(255), + 2462: uint8(55), + 2464: uint8(255), + 2465: uint8(255), + 2466: uint8(63), + 2468: uint8(255), + 2469: uint8(255), + 2470: uint8(255), + 2471: uint8(3), + 2480: uint8(255), + 2481: uint8(255), + 2482: uint8(255), + 2483: uint8(255), + 2484: uint8(255), + 2485: uint8(255), + 2486: uint8(255), + 2487: uint8(192), + 2496: uint8(111), + 2497: uint8(240), + 2498: uint8(239), + 2499: uint8(254), + 2500: uint8(255), + 2501: uint8(255), + 2502: uint8(63), + 2508: uint8(255), + 2509: uint8(255), + 2510: uint8(255), + 2511: uint8(31), + 2512: uint8(255), + 2513: uint8(255), + 2514: uint8(255), + 2515: uint8(31), + 2520: uint8(255), + 2521: uint8(254), + 2522: uint8(255), + 2523: uint8(255), + 2524: uint8(31), + 2528: uint8(255), + 2529: uint8(255), + 2530: uint8(255), + 2531: uint8(255), + 2532: uint8(255), + 2533: uint8(255), + 2534: uint8(63), + 2536: uint8(255), + 2537: uint8(255), + 2538: uint8(63), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(7), + 2544: uint8(255), + 2545: uint8(255), + 2546: uint8(3), + 2560: uint8(255), + 2561: uint8(255), + 2562: uint8(255), + 2563: uint8(255), + 2564: uint8(255), + 2565: uint8(255), + 2566: uint8(255), + 2567: uint8(255), + 2568: uint8(255), + 2569: uint8(1), + 2576: uint8(255), + 2577: uint8(255), + 2578: uint8(255), + 2579: uint8(255), + 2580: uint8(255), + 2581: uint8(255), + 2582: uint8(7), + 2584: uint8(255), + 2585: uint8(255), + 2586: uint8(255), + 2587: uint8(255), + 2588: uint8(255), + 2589: uint8(255), + 2590: uint8(7), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2598: uint8(255), + 2599: uint8(3), + 2624: uint8(255), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(31), + 2628: uint8(128), + 2630: uint8(255), + 2631: uint8(255), + 2632: uint8(63), + 2652: uint8(255), + 2653: uint8(255), + 2654: uint8(127), + 2656: uint8(255), + 2657: uint8(255), + 2658: uint8(255), + 2659: uint8(255), + 2660: uint8(255), + 2661: uint8(255), + 2662: uint8(255), + 2663: uint8(255), + 2664: uint8(63), + 2668: uint8(192), + 2669: uint8(255), + 2672: uint8(252), + 2673: uint8(255), + 2674: uint8(255), + 2675: uint8(255), + 2676: uint8(255), + 2677: uint8(255), + 2678: uint8(255), + 2679: uint8(1), + 2682: uint8(255), + 2683: uint8(255), + 2684: uint8(255), + 2685: uint8(1), + 2686: uint8(255), + 2687: uint8(3), + 2688: uint8(255), + 2689: uint8(255), + 2690: uint8(255), + 2691: uint8(255), + 2692: uint8(255), + 2693: uint8(255), + 2694: uint8(199), + 2695: uint8(255), + 2696: uint8(112), + 2698: uint8(255), + 2699: uint8(255), + 2700: uint8(255), + 2701: uint8(255), + 2702: uint8(71), + 2704: uint8(255), + 2705: uint8(255), + 2706: uint8(255), + 2707: uint8(255), + 2708: uint8(255), + 2709: uint8(255), + 2710: uint8(255), + 2711: uint8(255), + 2712: uint8(30), + 2714: uint8(255), + 2715: uint8(23), + 2720: uint8(255), + 2721: uint8(255), + 2722: uint8(251), + 2723: uint8(255), + 2724: uint8(255), + 2725: uint8(255), + 2726: uint8(159), + 2727: uint8(64), + 2736: uint8(127), + 2737: uint8(189), + 2738: uint8(255), + 2739: uint8(191), + 2740: uint8(255), + 2741: uint8(1), + 2742: uint8(255), + 2743: uint8(255), + 2744: uint8(255), + 2745: uint8(255), + 2746: uint8(255), + 2747: uint8(255), + 2748: uint8(255), + 2749: uint8(1), + 2750: uint8(255), + 2751: uint8(3), + 2752: uint8(239), + 2753: uint8(159), + 2754: uint8(249), + 2755: uint8(255), + 2756: uint8(255), + 2757: uint8(253), + 2758: uint8(237), + 2759: uint8(227), + 2760: uint8(159), + 2761: uint8(25), + 2762: uint8(129), + 2763: uint8(224), + 2764: uint8(15), + 2784: uint8(255), + 2785: uint8(255), + 2786: uint8(255), + 2787: uint8(255), + 2788: uint8(255), + 2789: uint8(255), + 2790: uint8(255), + 2791: uint8(255), + 2792: uint8(187), + 2793: uint8(7), + 2794: uint8(255), + 2795: uint8(131), + 2800: uint8(255), + 2801: uint8(255), + 2802: uint8(255), + 2803: uint8(255), + 2804: uint8(255), + 2805: uint8(255), + 2806: uint8(255), + 2807: uint8(255), + 2808: uint8(179), + 2810: uint8(255), + 2811: uint8(3), + 2832: uint8(255), + 2833: uint8(255), + 2834: uint8(255), + 2835: uint8(255), + 2836: uint8(255), + 2837: uint8(255), + 2838: uint8(63), + 2839: uint8(127), + 2843: uint8(63), + 2848: uint8(255), + 2849: uint8(255), + 2850: uint8(255), + 2851: uint8(255), + 2852: uint8(255), + 2853: uint8(255), + 2854: uint8(255), + 2855: uint8(127), + 2856: uint8(17), + 2858: uint8(255), + 2859: uint8(3), + 2864: uint8(255), + 2865: uint8(255), + 2866: uint8(255), + 2867: uint8(255), + 2868: uint8(255), + 2869: uint8(255), + 2870: uint8(63), + 2871: uint8(1), + 2872: uint8(255), + 2873: uint8(3), + 2880: uint8(255), + 2881: uint8(255), + 2882: uint8(255), + 2883: uint8(231), + 2884: uint8(255), + 2885: uint8(7), + 2886: uint8(255), + 2887: uint8(3), + 2912: uint8(255), + 2913: uint8(255), + 2914: uint8(255), + 2915: uint8(255), + 2916: uint8(255), + 2917: uint8(255), + 2918: uint8(255), + 2919: uint8(1), + 2932: uint8(255), + 2933: uint8(255), + 2934: uint8(255), + 2935: uint8(255), + 2936: uint8(255), + 2937: uint8(255), + 2938: uint8(255), + 2939: uint8(255), + 2940: uint8(255), + 2941: uint8(3), + 2943: uint8(128), + 2964: uint8(255), + 2965: uint8(252), + 2966: uint8(255), + 2967: uint8(255), + 2968: uint8(255), + 2969: uint8(255), + 2970: uint8(255), + 2971: uint8(252), + 2972: uint8(26), + 2976: uint8(255), + 2977: uint8(255), + 2978: uint8(255), + 2979: uint8(255), + 2980: uint8(255), + 2981: uint8(255), + 2982: uint8(231), + 2983: uint8(127), + 2986: uint8(255), + 2987: uint8(255), + 2988: uint8(255), + 2989: uint8(255), + 2990: uint8(255), + 2991: uint8(255), + 2992: uint8(255), + 2993: uint8(255), + 2994: uint8(255), + 2995: uint8(32), + 3000: uint8(255), + 3001: uint8(255), + 3002: uint8(255), + 3003: uint8(255), + 3004: uint8(255), + 3005: uint8(255), + 3006: uint8(255), + 3007: uint8(1), + 3008: uint8(255), + 3009: uint8(253), + 3010: uint8(255), + 3011: uint8(255), + 3012: uint8(255), + 3013: uint8(255), + 3014: uint8(127), + 3015: uint8(127), + 3016: uint8(1), + 3018: uint8(255), + 3019: uint8(3), + 3022: uint8(252), + 3023: uint8(255), + 3024: uint8(255), + 3025: uint8(255), + 3026: uint8(252), + 3027: uint8(255), + 3028: uint8(255), + 3029: uint8(254), + 3030: uint8(127), + 3040: uint8(127), + 3041: uint8(251), + 3042: uint8(255), + 3043: uint8(255), + 3044: uint8(255), + 3045: uint8(255), + 3046: uint8(127), + 3047: uint8(180), + 3048: uint8(203), + 3050: uint8(255), + 3051: uint8(3), + 3052: uint8(191), + 3053: uint8(253), + 3054: uint8(255), + 3055: uint8(255), + 3056: uint8(255), + 3057: uint8(127), + 3058: uint8(123), + 3059: uint8(1), + 3060: uint8(255), + 3061: uint8(3), + 3100: uint8(255), + 3101: uint8(255), + 3102: uint8(127), + 3104: uint8(255), + 3105: uint8(255), + 3106: uint8(255), + 3107: uint8(255), + 3108: uint8(255), + 3109: uint8(255), + 3110: uint8(255), + 3111: uint8(255), + 3112: uint8(255), + 3113: uint8(255), + 3114: uint8(255), + 3115: uint8(255), + 3116: uint8(255), + 3117: uint8(255), + 3118: uint8(255), + 3119: uint8(255), + 3120: uint8(255), + 3121: uint8(255), + 3122: uint8(255), + 3123: uint8(3), + 3136: uint8(255), + 3137: uint8(255), + 3138: uint8(255), + 3139: uint8(255), + 3140: uint8(255), + 3141: uint8(255), + 3142: uint8(255), + 3143: uint8(255), + 3144: uint8(255), + 3145: uint8(255), + 3146: uint8(255), + 3147: uint8(255), + 3148: uint8(255), + 3149: uint8(127), + 3152: uint8(255), + 3153: uint8(255), + 3154: uint8(255), + 3155: uint8(255), + 3156: uint8(255), + 3157: uint8(255), + 3158: uint8(255), + 3159: uint8(255), + 3160: uint8(255), + 3161: uint8(255), + 3162: uint8(255), + 3163: uint8(255), + 3164: uint8(255), + 3165: uint8(255), + 3166: uint8(255), + 3167: uint8(255), + 3168: uint8(255), + 3169: uint8(255), + 3170: uint8(255), + 3171: uint8(255), + 3172: uint8(255), + 3173: uint8(255), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(15), + 3200: uint8(255), + 3201: uint8(255), + 3202: uint8(255), + 3203: uint8(255), + 3204: uint8(255), + 3205: uint8(127), + 3232: uint8(255), + 3233: uint8(255), + 3234: uint8(255), + 3235: uint8(255), + 3236: uint8(255), + 3237: uint8(255), + 3238: uint8(255), + 3239: uint8(255), + 3240: uint8(127), + 3264: uint8(255), + 3265: uint8(255), + 3266: uint8(255), + 3267: uint8(255), + 3268: uint8(255), + 3269: uint8(255), + 3270: uint8(255), + 3271: uint8(1), + 3272: uint8(255), + 3273: uint8(255), + 3274: uint8(255), + 3275: uint8(127), + 3276: uint8(255), + 3277: uint8(3), + 3290: uint8(255), + 3291: uint8(255), + 3292: uint8(255), + 3293: uint8(63), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3304: uint8(15), + 3306: uint8(255), + 3307: uint8(3), + 3308: uint8(248), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(224), + 3312: uint8(255), + 3313: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(255), + 3369: uint8(135), + 3370: uint8(255), + 3371: uint8(255), + 3372: uint8(255), + 3373: uint8(255), + 3374: uint8(255), + 3375: uint8(255), + 3376: uint8(255), + 3377: uint8(128), + 3378: uint8(255), + 3379: uint8(255), + 3388: uint8(11), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(255), + 3403: uint8(255), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(255), + 3408: uint8(255), + 3409: uint8(255), + 3410: uint8(255), + 3411: uint8(255), + 3412: uint8(255), + 3413: uint8(255), + 3414: uint8(255), + 3415: uint8(255), + 3416: uint8(255), + 3417: uint8(255), + 3418: uint8(255), + 3419: uint8(255), + 3420: uint8(255), + 3421: uint8(255), + 3422: uint8(255), + 3424: uint8(255), + 3425: uint8(255), + 3426: uint8(255), + 3427: uint8(255), + 3428: uint8(255), + 3429: uint8(255), + 3430: uint8(255), + 3431: uint8(255), + 3432: uint8(255), + 3433: uint8(255), + 3434: uint8(255), + 3435: uint8(255), + 3436: uint8(255), + 3437: uint8(255), + 3438: uint8(255), + 3439: uint8(255), + 3440: uint8(255), + 3441: uint8(255), + 3442: uint8(255), + 3443: uint8(255), + 3444: uint8(255), + 3445: uint8(255), + 3446: uint8(255), + 3447: uint8(255), + 3448: uint8(255), + 3449: uint8(255), + 3450: uint8(255), + 3451: uint8(255), + 3452: uint8(255), + 3453: uint8(255), + 3454: uint8(7), + 3456: uint8(255), + 3457: uint8(255), + 3458: uint8(255), + 3459: uint8(127), + 3466: uint8(7), + 3468: uint8(240), + 3470: uint8(255), + 3471: uint8(255), + 3472: uint8(255), + 3473: uint8(255), + 3474: uint8(255), + 3475: uint8(255), + 3476: uint8(255), + 3477: uint8(255), + 3478: uint8(255), + 3479: uint8(255), + 3480: uint8(255), + 3481: uint8(255), + 3482: uint8(255), + 3483: uint8(255), + 3484: uint8(255), + 3485: uint8(255), + 3486: uint8(255), + 3487: uint8(255), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(255), + 3506: uint8(255), + 3507: uint8(255), + 3508: uint8(255), + 3509: uint8(255), + 3510: uint8(255), + 3511: uint8(255), + 3512: uint8(255), + 3513: uint8(255), + 3514: uint8(255), + 3515: uint8(255), + 3516: uint8(255), + 3517: uint8(255), + 3518: uint8(255), + 3519: uint8(15), + 3520: uint8(255), + 3521: uint8(255), + 3522: uint8(255), + 3523: uint8(255), + 3524: uint8(255), + 3525: uint8(255), + 3526: uint8(255), + 3527: uint8(255), + 3528: uint8(255), + 3529: uint8(255), + 3530: uint8(255), + 3531: uint8(255), + 3532: uint8(255), + 3533: uint8(7), + 3534: uint8(255), + 3535: uint8(31), + 3536: uint8(255), + 3537: uint8(1), + 3538: uint8(255), + 3539: uint8(67), + 3552: uint8(255), + 3553: uint8(255), + 3554: uint8(255), + 3555: uint8(255), + 3556: uint8(255), + 3557: uint8(255), + 3558: uint8(255), + 3559: uint8(255), + 3560: uint8(255), + 3561: uint8(255), + 3562: uint8(223), + 3563: uint8(255), + 3564: uint8(255), + 3565: uint8(255), + 3566: uint8(255), + 3567: uint8(255), + 3568: uint8(255), + 3569: uint8(255), + 3570: uint8(255), + 3571: uint8(223), + 3572: uint8(100), + 3573: uint8(222), + 3574: uint8(255), + 3575: uint8(235), + 3576: uint8(239), + 3577: uint8(255), + 3578: uint8(255), + 3579: uint8(255), + 3580: uint8(255), + 3581: uint8(255), + 3582: uint8(255), + 3583: uint8(255), + 3584: uint8(191), + 3585: uint8(231), + 3586: uint8(223), + 3587: uint8(223), + 3588: uint8(255), + 3589: uint8(255), + 3590: uint8(255), + 3591: uint8(123), + 3592: uint8(95), + 3593: uint8(252), + 3594: uint8(253), + 3595: uint8(255), + 3596: uint8(255), + 3597: uint8(255), + 3598: uint8(255), + 3599: uint8(255), + 3600: uint8(255), + 3601: uint8(255), + 3602: uint8(255), + 3603: uint8(255), + 3604: uint8(255), + 3605: uint8(255), + 3606: uint8(255), + 3607: uint8(255), + 3608: uint8(255), + 3609: uint8(255), + 3610: uint8(255), + 3611: uint8(255), + 3612: uint8(255), + 3613: uint8(255), + 3614: uint8(255), + 3615: uint8(255), + 3616: uint8(255), + 3617: uint8(255), + 3618: uint8(255), + 3619: uint8(255), + 3620: uint8(255), + 3621: uint8(255), + 3622: uint8(255), + 3623: uint8(255), + 3624: uint8(255), + 3625: uint8(255), + 3626: uint8(255), + 3627: uint8(255), + 3628: uint8(255), + 3629: uint8(255), + 3630: uint8(255), + 3631: uint8(255), + 3632: uint8(255), + 3633: uint8(255), + 3634: uint8(255), + 3635: uint8(255), + 3636: uint8(63), + 3637: uint8(255), + 3638: uint8(255), + 3639: uint8(255), + 3640: uint8(253), + 3641: uint8(255), + 3642: uint8(255), + 3643: uint8(247), + 3644: uint8(255), + 3645: uint8(255), + 3646: uint8(255), + 3647: uint8(247), + 3648: uint8(255), + 3649: uint8(255), + 3650: uint8(223), + 3651: uint8(255), + 3652: uint8(255), + 3653: uint8(255), + 3654: uint8(223), + 3655: uint8(255), + 3656: uint8(255), + 3657: uint8(127), + 3658: uint8(255), + 3659: uint8(255), + 3660: uint8(255), + 3661: uint8(127), + 3662: uint8(255), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(253), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(253), + 3670: uint8(255), + 3671: uint8(255), + 3672: uint8(247), + 3673: uint8(207), + 3674: uint8(255), + 3675: uint8(255), + 3676: uint8(255), + 3677: uint8(255), + 3678: uint8(255), + 3679: uint8(255), + 3680: uint8(127), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(249), + 3684: uint8(219), + 3685: uint8(7), + 3712: uint8(255), + 3713: uint8(255), + 3714: uint8(255), + 3715: uint8(255), + 3716: uint8(255), + 3717: uint8(31), + 3718: uint8(128), + 3719: uint8(63), + 3720: uint8(255), + 3721: uint8(67), + 3768: uint8(255), + 3769: uint8(255), + 3770: uint8(255), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(15), + 3774: uint8(255), + 3775: uint8(3), + 3776: uint8(255), + 3777: uint8(255), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3782: uint8(255), + 3783: uint8(255), + 3784: uint8(255), + 3785: uint8(255), + 3786: uint8(255), + 3787: uint8(255), + 3788: uint8(255), + 3789: uint8(255), + 3790: uint8(255), + 3791: uint8(255), + 3792: uint8(255), + 3793: uint8(255), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(255), + 3798: uint8(255), + 3799: uint8(255), + 3800: uint8(31), + 3808: uint8(255), + 3809: uint8(255), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(255), + 3816: uint8(143), + 3817: uint8(8), + 3818: uint8(255), + 3819: uint8(3), + 3840: uint8(239), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(150), + 3845: uint8(254), + 3846: uint8(247), + 3847: uint8(10), + 3848: uint8(132), + 3849: uint8(234), + 3850: uint8(150), + 3851: uint8(170), + 3852: uint8(150), + 3853: uint8(247), + 3854: uint8(247), + 3855: uint8(94), + 3856: uint8(255), + 3857: uint8(251), + 3858: uint8(255), + 3859: uint8(15), + 3860: uint8(238), + 3861: uint8(251), + 3862: uint8(255), + 3863: uint8(15), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(3), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(3), + 3886: uint8(255), + 3887: uint8(255), + 3888: uint8(255), + 3889: uint8(3), +} + +func Xiswalpha(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table3[uint32(int32(_table3[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + if wc < uint32(0x2fffe) { + return int32(1) + } + return 0 +} + +func X__iswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalpha(tls, c) +} + +func Xiswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalpha_l(tls, c, l) +} + +func Xiswblank(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, int32(wc)) +} + +func X__iswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswblank(tls, c) +} + +func Xiswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswblank_l(tls, c, l) +} + +func Xiswcntrl(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc < uint32(32) || wc-Uint32FromInt32(0x7f) < uint32(33) || wc-Uint32FromInt32(0x2028) < uint32(2) || wc-Uint32FromInt32(0xfff9) < uint32(3)) +} + +func X__iswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswcntrl(tls, c) +} + +func Xiswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswcntrl_l(tls, c, l) +} + +const WCTYPE_ALNUM = 1 +const WCTYPE_ALPHA = 2 +const WCTYPE_BLANK = 3 +const WCTYPE_CNTRL = 4 +const WCTYPE_DIGIT = 5 +const WCTYPE_GRAPH = 6 +const WCTYPE_LOWER = 7 +const WCTYPE_PRINT = 8 +const WCTYPE_PUNCT = 9 +const WCTYPE_SPACE = 10 +const WCTYPE_UPPER = 11 +const WCTYPE_XDIGIT = 12 + +func Xiswctype(tls *TLS, wc Twint_t, type1 Twctype_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v type1=%v, (%v:)", tls, wc, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + switch type1 { + case uint32(WCTYPE_ALNUM): + return Xiswalnum(tls, wc) + case uint32(WCTYPE_ALPHA): + return Xiswalpha(tls, wc) + case uint32(WCTYPE_BLANK): + return Xiswblank(tls, wc) + case uint32(WCTYPE_CNTRL): + return Xiswcntrl(tls, wc) + case uint32(WCTYPE_DIGIT): + return BoolInt32(wc-uint32('0') < uint32(10)) + case uint32(WCTYPE_GRAPH): + return Xiswgraph(tls, wc) + case uint32(WCTYPE_LOWER): + return Xiswlower(tls, wc) + case uint32(WCTYPE_PRINT): + return Xiswprint(tls, wc) + case uint32(WCTYPE_PUNCT): + return Xiswpunct(tls, wc) + case uint32(WCTYPE_SPACE): + return Xiswspace(tls, wc) + case uint32(WCTYPE_UPPER): + return Xiswupper(tls, wc) + case uint32(WCTYPE_XDIGIT): + return Xiswxdigit(tls, wc) + } + return 0 +} + +func Xwctype(tls *TLS, s uintptr) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var p uintptr + _, _ = i, p + i = int32(1) + p = uintptr(unsafe.Pointer(&_names)) + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(p))) && !(Xstrcmp(tls, s, p) != 0) { + return uint32(i) + } + goto _1 + _1: + ; + i++ + p += uintptr(6) + } + return uint32(0) +} + +/* order must match! */ +var _names = [73]uint8{'a', 'l', 'n', 'u', 'm', 0, 'a', 'l', 'p', 'h', 'a', 0, 'b', 'l', 'a', 'n', 'k', 0, 'c', 'n', 't', 'r', 'l', 0, 'd', 'i', 'g', 'i', 't', 0, 'g', 'r', 'a', 'p', 'h', 0, 'l', 'o', 'w', 'e', 'r', 0, 'p', 'r', 'i', 'n', 't', 0, 'p', 'u', 'n', 'c', 't', 0, 's', 'p', 'a', 'c', 'e', 0, 'u', 'p', 'p', 'e', 'r', 0, 'x', 'd', 'i', 'g', 'i', 't'} + +func X__iswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswctype(tls, c, t) +} + +func X__wctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctype(tls, s) +} + +func Xiswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswctype_l(tls, c, t, l) +} + +func Xwctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctype_l(tls, s, l) +} + +func Xiswdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-uint32('0') < uint32(10)) +} + +func X__iswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswdigit(tls, c) +} + +func Xiswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswdigit_l(tls, c, l) +} + +func Xiswgraph(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* ISO C defines this function as: */ + return BoolInt32(!(Xiswspace(tls, wc) != 0) && Xiswprint(tls, wc) != 0) +} + +func X__iswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswgraph(tls, c) +} + +func Xiswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswgraph_l(tls, c, l) +} + +func Xiswlower(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowupper(tls, wc) != wc) +} + +func X__iswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswlower(tls, c) +} + +func Xiswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswlower_l(tls, c, l) +} + +/* Consider all legal codepoints as printable except for: + * - C0 and C1 control characters + * - U+2028 and U+2029 (line/para break) + * - U+FFF9 through U+FFFB (interlinear annotation controls) + * The following code is optimized heavily to make hot paths for the + * expected printable characters. */ + +func Xiswprint(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0xff) { + return BoolInt32((wc+uint32(1))&uint32(0x7f) >= uint32(0x21)) + } + if wc < uint32(0x2028) || wc-uint32(0x202a) < uint32(Int32FromInt32(0xd800)-Int32FromInt32(0x202a)) || wc-uint32(0xe000) < uint32(Int32FromInt32(0xfff9)-Int32FromInt32(0xe000)) { + return int32(1) + } + if wc-uint32(0xfffc) > uint32(Int32FromInt32(0x10ffff)-Int32FromInt32(0xfffc)) || wc&uint32(0xfffe) == uint32(0xfffe) { + return 0 + } + return int32(1) +} + +func X__iswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswprint(tls, c) +} + +func Xiswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswprint_l(tls, c, l) +} + +var _table4 = [4000]uint8{ + 0: uint8(18), + 1: uint8(16), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(16), + 18: uint8(16), + 19: uint8(34), + 20: uint8(35), + 21: uint8(16), + 22: uint8(36), + 23: uint8(37), + 24: uint8(38), + 25: uint8(39), + 26: uint8(40), + 27: uint8(41), + 28: uint8(42), + 29: uint8(43), + 30: uint8(16), + 31: uint8(44), + 32: uint8(45), + 33: uint8(46), + 34: uint8(17), + 35: uint8(17), + 36: uint8(47), + 37: uint8(17), + 38: uint8(17), + 39: uint8(17), + 40: uint8(17), + 41: uint8(17), + 42: uint8(17), + 43: uint8(48), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(52), + 48: uint8(53), + 49: uint8(54), + 50: uint8(55), + 51: uint8(17), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(56), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(57), + 165: uint8(16), + 166: uint8(58), + 167: uint8(59), + 168: uint8(60), + 169: uint8(61), + 170: uint8(62), + 171: uint8(63), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(16), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(64), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(65), + 249: uint8(16), + 250: uint8(16), + 251: uint8(66), + 252: uint8(16), + 253: uint8(67), + 254: uint8(68), + 255: uint8(69), + 256: uint8(16), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(16), + 261: uint8(73), + 262: uint8(16), + 263: uint8(16), + 264: uint8(74), + 265: uint8(75), + 266: uint8(76), + 267: uint8(77), + 268: uint8(78), + 269: uint8(16), + 270: uint8(79), + 271: uint8(80), + 272: uint8(81), + 273: uint8(82), + 274: uint8(83), + 275: uint8(84), + 276: uint8(85), + 277: uint8(86), + 278: uint8(87), + 279: uint8(88), + 280: uint8(89), + 281: uint8(90), + 282: uint8(91), + 283: uint8(16), + 284: uint8(92), + 285: uint8(93), + 286: uint8(94), + 287: uint8(95), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(96), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(97), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(98), + 363: uint8(99), + 364: uint8(16), + 365: uint8(16), + 366: uint8(100), + 367: uint8(101), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(102), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(103), + 465: uint8(104), + 466: uint8(105), + 467: uint8(106), + 468: uint8(16), + 469: uint8(16), + 470: uint8(107), + 471: uint8(108), + 472: uint8(17), + 473: uint8(17), + 474: uint8(109), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(110), + 482: uint8(111), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(112), + 489: uint8(113), + 490: uint8(16), + 491: uint8(16), + 492: uint8(114), + 493: uint8(115), + 494: uint8(116), + 495: uint8(16), + 496: uint8(117), + 497: uint8(118), + 498: uint8(119), + 499: uint8(17), + 500: uint8(17), + 501: uint8(17), + 502: uint8(120), + 503: uint8(121), + 504: uint8(122), + 505: uint8(123), + 506: uint8(124), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 580: uint8(254), + 581: uint8(255), + 583: uint8(252), + 584: uint8(1), + 587: uint8(248), + 588: uint8(1), + 591: uint8(120), + 596: uint8(255), + 597: uint8(251), + 598: uint8(223), + 599: uint8(251), + 602: uint8(128), + 606: uint8(128), + 632: uint8(60), + 634: uint8(252), + 635: uint8(255), + 636: uint8(224), + 637: uint8(175), + 638: uint8(255), + 639: uint8(255), + 640: uint8(255), + 641: uint8(255), + 642: uint8(255), + 643: uint8(255), + 644: uint8(255), + 645: uint8(255), + 646: uint8(255), + 647: uint8(255), + 648: uint8(223), + 649: uint8(255), + 650: uint8(255), + 651: uint8(255), + 652: uint8(255), + 653: uint8(255), + 654: uint8(32), + 655: uint8(64), + 656: uint8(176), + 670: uint8(64), + 688: uint8(252), + 689: uint8(3), + 715: uint8(252), + 721: uint8(230), + 722: uint8(254), + 723: uint8(255), + 724: uint8(255), + 725: uint8(255), + 727: uint8(64), + 728: uint8(73), + 734: uint8(24), + 736: uint8(255), + 737: uint8(255), + 739: uint8(216), + 747: uint8(1), + 749: uint8(60), + 762: uint8(16), + 763: uint8(224), + 764: uint8(1), + 765: uint8(30), + 767: uint8(96), + 768: uint8(255), + 769: uint8(191), + 776: uint8(255), + 777: uint8(7), + 797: uint8(248), + 798: uint8(207), + 799: uint8(227), + 803: uint8(3), + 805: uint8(32), + 806: uint8(255), + 807: uint8(127), + 811: uint8(78), + 826: uint8(8), + 828: uint8(7), + 829: uint8(252), + 839: uint8(16), + 841: uint8(32), + 842: uint8(30), + 844: uint8(48), + 846: uint8(1), + 855: uint8(16), + 857: uint8(32), + 862: uint8(252), + 863: uint8(111), + 871: uint8(16), + 873: uint8(32), + 878: uint8(64), + 887: uint8(16), + 889: uint8(32), + 894: uint8(3), + 895: uint8(224), + 903: uint8(16), + 905: uint8(32), + 910: uint8(253), + 921: uint8(32), + 926: uint8(255), + 927: uint8(7), + 928: uint8(16), + 937: uint8(32), + 942: uint8(128), + 943: uint8(255), + 944: uint8(16), + 951: uint8(16), + 953: uint8(32), + 967: uint8(24), + 969: uint8(160), + 971: uint8(127), + 974: uint8(255), + 975: uint8(3), + 985: uint8(4), + 990: uint8(16), + 997: uint8(128), + 999: uint8(128), + 1000: uint8(192), + 1001: uint8(223), + 1003: uint8(12), + 1015: uint8(4), + 1017: uint8(31), + 1024: uint8(254), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1029: uint8(252), + 1030: uint8(255), + 1031: uint8(255), + 1040: uint8(252), + 1047: uint8(192), + 1048: uint8(255), + 1049: uint8(223), + 1050: uint8(255), + 1051: uint8(7), + 1062: uint8(128), + 1063: uint8(6), + 1065: uint8(252), + 1075: uint8(192), + 1087: uint8(8), + 1099: uint8(224), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(31), + 1106: uint8(255), + 1107: uint8(3), + 1120: uint8(1), + 1165: uint8(96), + 1168: uint8(1), + 1171: uint8(24), + 1181: uint8(56), + 1186: uint8(16), + 1190: uint8(112), + 1206: uint8(48), + 1209: uint8(254), + 1210: uint8(127), + 1211: uint8(47), + 1214: uint8(255), + 1215: uint8(3), + 1216: uint8(255), + 1217: uint8(127), + 1255: uint8(14), + 1256: uint8(49), + 1275: uint8(196), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(255), + 1283: uint8(192), + 1292: uint8(1), + 1294: uint8(224), + 1295: uint8(159), + 1300: uint8(127), + 1301: uint8(63), + 1302: uint8(255), + 1303: uint8(127), + 1318: uint8(16), + 1320: uint8(16), + 1323: uint8(252), + 1324: uint8(255), + 1325: uint8(255), + 1326: uint8(255), + 1327: uint8(31), + 1333: uint8(12), + 1340: uint8(64), + 1342: uint8(12), + 1343: uint8(240), + 1350: uint8(128), + 1351: uint8(248), + 1359: uint8(192), + 1368: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(255), + 1373: uint8(33), + 1374: uint8(144), + 1375: uint8(3), + 1400: uint8(255), + 1401: uint8(255), + 1402: uint8(255), + 1403: uint8(255), + 1404: uint8(127), + 1406: uint8(224), + 1407: uint8(251), + 1431: uint8(160), + 1432: uint8(3), + 1433: uint8(224), + 1435: uint8(224), + 1437: uint8(224), + 1439: uint8(96), + 1440: uint8(128), + 1441: uint8(248), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(252), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(255), + 1449: uint8(255), + 1450: uint8(255), + 1451: uint8(127), + 1452: uint8(223), + 1453: uint8(255), + 1454: uint8(241), + 1455: uint8(127), + 1456: uint8(255), + 1457: uint8(127), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(255), + 1463: uint8(255), + 1466: uint8(255), + 1467: uint8(255), + 1468: uint8(255), + 1469: uint8(255), + 1470: uint8(1), + 1472: uint8(123), + 1473: uint8(3), + 1474: uint8(208), + 1475: uint8(193), + 1476: uint8(175), + 1477: uint8(66), + 1479: uint8(12), + 1480: uint8(31), + 1481: uint8(188), + 1482: uint8(255), + 1483: uint8(255), + 1489: uint8(14), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(255), + 1497: uint8(255), + 1498: uint8(255), + 1499: uint8(255), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(255), + 1503: uint8(255), + 1504: uint8(255), + 1505: uint8(255), + 1506: uint8(255), + 1507: uint8(255), + 1508: uint8(127), + 1512: uint8(255), + 1513: uint8(7), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(255), + 1522: uint8(255), + 1523: uint8(255), + 1524: uint8(255), + 1525: uint8(255), + 1526: uint8(63), + 1533: uint8(252), + 1534: uint8(255), + 1535: uint8(255), + 1536: uint8(255), + 1537: uint8(255), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(207), + 1551: uint8(255), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(63), + 1555: uint8(255), + 1556: uint8(255), + 1557: uint8(255), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1596: uint8(224), + 1597: uint8(135), + 1598: uint8(3), + 1599: uint8(254), + 1614: uint8(1), + 1615: uint8(128), + 1632: uint8(255), + 1633: uint8(255), + 1634: uint8(255), + 1635: uint8(255), + 1636: uint8(255), + 1637: uint8(127), + 1638: uint8(255), + 1639: uint8(255), + 1640: uint8(255), + 1641: uint8(255), + 1648: uint8(255), + 1649: uint8(255), + 1650: uint8(255), + 1651: uint8(251), + 1652: uint8(255), + 1653: uint8(255), + 1654: uint8(255), + 1655: uint8(255), + 1656: uint8(255), + 1657: uint8(255), + 1658: uint8(255), + 1659: uint8(255), + 1660: uint8(255), + 1661: uint8(255), + 1662: uint8(15), + 1664: uint8(255), + 1665: uint8(255), + 1666: uint8(255), + 1667: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1670: uint8(255), + 1671: uint8(255), + 1672: uint8(255), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(255), + 1683: uint8(255), + 1684: uint8(255), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(63), + 1694: uint8(255), + 1695: uint8(15), + 1696: uint8(30), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(1), + 1701: uint8(252), + 1702: uint8(193), + 1703: uint8(224), + 1715: uint8(30), + 1716: uint8(1), + 1727: uint8(8), + 1746: uint8(255), + 1747: uint8(255), + 1752: uint8(255), + 1753: uint8(255), + 1754: uint8(255), + 1755: uint8(255), + 1756: uint8(15), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(127), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1790: uint8(255), + 1791: uint8(255), + 1816: uint8(255), + 1817: uint8(255), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(127), + 1855: uint8(192), + 1857: uint8(224), + 1869: uint8(128), + 1870: uint8(15), + 1871: uint8(112), + 1886: uint8(255), + 1888: uint8(255), + 1889: uint8(255), + 1890: uint8(127), + 1892: uint8(3), + 1905: uint8(6), + 1920: uint8(64), + 1925: uint8(15), + 1926: uint8(255), + 1927: uint8(3), + 1934: uint8(240), + 1944: uint8(16), + 1945: uint8(192), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(3), + 1951: uint8(23), + 1957: uint8(248), + 1962: uint8(8), + 1963: uint8(128), + 1974: uint8(8), + 1976: uint8(255), + 1977: uint8(63), + 1979: uint8(192), + 1995: uint8(240), + 1998: uint8(128), + 1999: uint8(3), + 2007: uint8(128), + 2008: uint8(2), + 2011: uint8(192), + 2014: uint8(67), + 2027: uint8(8), + 2045: uint8(56), + 2048: uint8(1), + 2111: uint8(128), + 2117: uint8(2), + 2134: uint8(252), + 2135: uint8(255), + 2136: uint8(3), + 2151: uint8(192), + 2175: uint8(48), + 2176: uint8(255), + 2177: uint8(255), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(255), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(255), + 2184: uint8(255), + 2185: uint8(255), + 2186: uint8(247), + 2187: uint8(255), + 2188: uint8(127), + 2189: uint8(15), + 2207: uint8(128), + 2208: uint8(254), + 2209: uint8(255), + 2211: uint8(252), + 2212: uint8(1), + 2215: uint8(248), + 2216: uint8(1), + 2219: uint8(248), + 2220: uint8(63), + 2236: uint8(127), + 2237: uint8(127), + 2239: uint8(48), + 2240: uint8(135), + 2241: uint8(255), + 2242: uint8(255), + 2243: uint8(255), + 2244: uint8(255), + 2245: uint8(255), + 2246: uint8(143), + 2247: uint8(255), + 2254: uint8(224), + 2255: uint8(255), + 2256: uint8(255), + 2257: uint8(127), + 2258: uint8(255), + 2259: uint8(15), + 2260: uint8(1), + 2266: uint8(255), + 2267: uint8(255), + 2268: uint8(255), + 2269: uint8(255), + 2270: uint8(255), + 2271: uint8(63), + 2300: uint8(255), + 2301: uint8(255), + 2302: uint8(255), + 2303: uint8(15), + 2308: uint8(15), + 2323: uint8(128), + 2330: uint8(1), + 2349: uint8(128), + 2378: uint8(128), + 2379: uint8(255), + 2382: uint8(128), + 2383: uint8(255), + 2388: uint8(128), + 2389: uint8(255), + 2399: uint8(248), + 2402: uint8(192), + 2403: uint8(143), + 2407: uint8(128), + 2423: uint8(48), + 2424: uint8(255), + 2425: uint8(255), + 2426: uint8(252), + 2427: uint8(255), + 2428: uint8(255), + 2429: uint8(255), + 2430: uint8(255), + 2431: uint8(255), + 2439: uint8(135), + 2440: uint8(255), + 2441: uint8(1), + 2442: uint8(255), + 2443: uint8(1), + 2447: uint8(224), + 2451: uint8(224), + 2457: uint8(1), + 2460: uint8(96), + 2461: uint8(248), + 2462: uint8(127), + 2471: uint8(254), + 2475: uint8(255), + 2479: uint8(255), + 2483: uint8(30), + 2485: uint8(254), + 2527: uint8(252), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(255), + 2543: uint8(127), + 2563: uint8(224), + 2564: uint8(127), + 2568: uint8(192), + 2569: uint8(255), + 2570: uint8(255), + 2571: uint8(3), + 2600: uint8(192), + 2601: uint8(63), + 2602: uint8(252), + 2603: uint8(255), + 2604: uint8(63), + 2607: uint8(128), + 2608: uint8(3), + 2615: uint8(254), + 2616: uint8(3), + 2617: uint8(32), + 2630: uint8(24), + 2632: uint8(15), + 2638: uint8(56), + 2648: uint8(225), + 2649: uint8(63), + 2651: uint8(232), + 2652: uint8(254), + 2653: uint8(255), + 2654: uint8(31), + 2662: uint8(96), + 2663: uint8(63), + 2677: uint8(2), + 2685: uint8(6), + 2695: uint8(24), + 2697: uint8(32), + 2700: uint8(192), + 2701: uint8(31), + 2702: uint8(31), + 2728: uint8(68), + 2729: uint8(248), + 2731: uint8(104), + 2744: uint8(76), + 2775: uint8(128), + 2776: uint8(255), + 2777: uint8(255), + 2778: uint8(255), + 2791: uint8(128), + 2792: uint8(14), + 2796: uint8(255), + 2797: uint8(31), + 2806: uint8(192), + 2821: uint8(8), + 2823: uint8(252), + 2855: uint8(14), + 2877: uint8(252), + 2878: uint8(7), + 2908: uint8(5), + 2918: uint8(24), + 2919: uint8(128), + 2920: uint8(255), + 2931: uint8(223), + 2932: uint8(7), + 2951: uint8(128), + 2952: uint8(62), + 2955: uint8(252), + 2956: uint8(255), + 2957: uint8(31), + 2958: uint8(3), + 2984: uint8(52), + 2994: uint8(128), + 3038: uint8(128), + 3039: uint8(1), + 3064: uint8(255), + 3065: uint8(255), + 3066: uint8(255), + 3067: uint8(255), + 3068: uint8(255), + 3069: uint8(255), + 3070: uint8(3), + 3071: uint8(128), + 3086: uint8(31), + 3110: uint8(255), + 3111: uint8(1), + 3149: uint8(192), + 3166: uint8(63), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(48), + 3179: uint8(248), + 3180: uint8(3), + 3216: uint8(255), + 3217: uint8(255), + 3218: uint8(255), + 3219: uint8(7), + 3260: uint8(4), + 3283: uint8(176), + 3284: uint8(15), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3302: uint8(255), + 3303: uint8(255), + 3304: uint8(255), + 3305: uint8(255), + 3306: uint8(255), + 3307: uint8(255), + 3308: uint8(255), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(255), + 3312: uint8(255), + 3313: uint8(255), + 3314: uint8(255), + 3315: uint8(255), + 3316: uint8(255), + 3317: uint8(255), + 3318: uint8(255), + 3319: uint8(255), + 3320: uint8(255), + 3321: uint8(255), + 3322: uint8(255), + 3323: uint8(255), + 3324: uint8(255), + 3325: uint8(255), + 3326: uint8(63), + 3328: uint8(255), + 3329: uint8(255), + 3330: uint8(255), + 3331: uint8(255), + 3332: uint8(127), + 3333: uint8(254), + 3334: uint8(255), + 3335: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3344: uint8(255), + 3345: uint8(255), + 3346: uint8(255), + 3347: uint8(255), + 3348: uint8(255), + 3349: uint8(255), + 3350: uint8(255), + 3351: uint8(255), + 3352: uint8(255), + 3353: uint8(255), + 3354: uint8(255), + 3355: uint8(255), + 3356: uint8(255), + 3357: uint8(1), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(63), + 3388: uint8(255), + 3389: uint8(255), + 3390: uint8(15), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(127), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(1), + 3448: uint8(2), + 3451: uint8(8), + 3455: uint8(8), + 3458: uint8(32), + 3462: uint8(32), + 3465: uint8(128), + 3469: uint8(128), + 3473: uint8(2), + 3477: uint8(2), + 3480: uint8(8), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(15), + 3507: uint8(248), + 3508: uint8(254), + 3509: uint8(255), + 3526: uint8(127), + 3529: uint8(128), + 3581: uint8(240), + 3583: uint8(128), + 3608: uint8(128), + 3609: uint8(255), + 3610: uint8(127), + 3624: uint8(112), + 3625: uint8(7), + 3627: uint8(192), + 3662: uint8(254), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(255), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(255), + 3670: uint8(31), + 3680: uint8(254), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(255), + 3684: uint8(255), + 3685: uint8(255), + 3686: uint8(255), + 3687: uint8(63), + 3742: uint8(3), + 3744: uint8(255), + 3745: uint8(255), + 3746: uint8(255), + 3747: uint8(255), + 3748: uint8(255), + 3749: uint8(15), + 3750: uint8(255), + 3751: uint8(255), + 3752: uint8(255), + 3753: uint8(255), + 3754: uint8(255), + 3755: uint8(255), + 3756: uint8(255), + 3757: uint8(255), + 3758: uint8(255), + 3759: uint8(255), + 3760: uint8(255), + 3761: uint8(255), + 3762: uint8(15), + 3764: uint8(255), + 3765: uint8(127), + 3766: uint8(254), + 3767: uint8(255), + 3768: uint8(254), + 3769: uint8(255), + 3770: uint8(254), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(255), + 3774: uint8(63), + 3776: uint8(255), + 3777: uint8(31), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3785: uint8(252), + 3789: uint8(28), + 3793: uint8(252), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(31), + 3804: uint8(192), + 3805: uint8(255), + 3806: uint8(255), + 3807: uint8(255), + 3808: uint8(7), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(15), + 3816: uint8(255), + 3817: uint8(1), + 3818: uint8(3), + 3820: uint8(63), + 3840: uint8(255), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(255), + 3845: uint8(255), + 3846: uint8(255), + 3847: uint8(255), + 3848: uint8(255), + 3849: uint8(255), + 3850: uint8(255), + 3851: uint8(255), + 3852: uint8(255), + 3853: uint8(255), + 3854: uint8(255), + 3855: uint8(255), + 3856: uint8(255), + 3857: uint8(255), + 3858: uint8(255), + 3859: uint8(255), + 3860: uint8(255), + 3861: uint8(255), + 3862: uint8(255), + 3863: uint8(255), + 3864: uint8(255), + 3865: uint8(255), + 3866: uint8(63), + 3868: uint8(255), + 3869: uint8(31), + 3870: uint8(255), + 3871: uint8(7), + 3872: uint8(255), + 3873: uint8(255), + 3874: uint8(255), + 3875: uint8(255), + 3876: uint8(255), + 3877: uint8(255), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(255), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(255), + 3886: uint8(15), + 3888: uint8(255), + 3889: uint8(255), + 3890: uint8(255), + 3891: uint8(255), + 3892: uint8(255), + 3893: uint8(255), + 3894: uint8(255), + 3895: uint8(255), + 3896: uint8(255), + 3897: uint8(255), + 3898: uint8(255), + 3899: uint8(1), + 3900: uint8(255), + 3901: uint8(15), + 3904: uint8(255), + 3905: uint8(15), + 3906: uint8(255), + 3907: uint8(255), + 3908: uint8(255), + 3909: uint8(255), + 3910: uint8(255), + 3911: uint8(255), + 3912: uint8(255), + 3914: uint8(255), + 3915: uint8(3), + 3916: uint8(255), + 3917: uint8(255), + 3918: uint8(255), + 3919: uint8(255), + 3920: uint8(255), + 3922: uint8(255), + 3923: uint8(255), + 3924: uint8(255), + 3925: uint8(63), + 3936: uint8(255), + 3937: uint8(239), + 3938: uint8(255), + 3939: uint8(255), + 3940: uint8(255), + 3941: uint8(255), + 3942: uint8(255), + 3943: uint8(255), + 3944: uint8(255), + 3945: uint8(255), + 3946: uint8(255), + 3947: uint8(255), + 3948: uint8(255), + 3949: uint8(255), + 3950: uint8(123), + 3951: uint8(252), + 3952: uint8(255), + 3953: uint8(255), + 3954: uint8(255), + 3955: uint8(255), + 3956: uint8(231), + 3957: uint8(199), + 3958: uint8(255), + 3959: uint8(255), + 3960: uint8(255), + 3961: uint8(231), + 3962: uint8(255), + 3963: uint8(255), + 3964: uint8(255), + 3965: uint8(255), + 3966: uint8(255), + 3967: uint8(255), + 3968: uint8(255), + 3969: uint8(255), + 3970: uint8(255), + 3971: uint8(255), + 3972: uint8(255), + 3973: uint8(255), + 3974: uint8(255), + 3975: uint8(255), + 3976: uint8(255), + 3977: uint8(255), + 3978: uint8(15), + 3980: uint8(255), + 3981: uint8(63), + 3982: uint8(15), + 3983: uint8(7), + 3984: uint8(7), + 3986: uint8(63), +} + +func Xiswpunct(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table4[uint32(int32(_table4[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + return 0 +} + +func X__iswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswpunct(tls, c) +} + +func Xiswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswpunct_l(tls, c, l) +} + +type Tmbstate_t = struct { + F__opaque1 uint32 + F__opaque2 uint32 +} + +type t__mbstate_t = Tmbstate_t + +/* Our definition of whitespace is the Unicode White_Space property, + * minus non-breaking spaces (U+00A0, U+2007, and U+202F) and script- + * specific characters with non-blank glyphs (U+1680 and U+180E). */ + +func Xiswspace(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc != 0 && Xwcschr(tls, uintptr(unsafe.Pointer(&_spaces)), wc) != 0) +} + +var _spaces = [22]Twchar_t{ + 0: uint32(' '), + 1: uint32('\t'), + 2: uint32('\n'), + 3: uint32('\r'), + 4: uint32(11), + 5: uint32(12), + 6: uint32(0x0085), + 7: uint32(0x2000), + 8: uint32(0x2001), + 9: uint32(0x2002), + 10: uint32(0x2003), + 11: uint32(0x2004), + 12: uint32(0x2005), + 13: uint32(0x2006), + 14: uint32(0x2008), + 15: uint32(0x2009), + 16: uint32(0x200a), + 17: uint32(0x2028), + 18: uint32(0x2029), + 19: uint32(0x205f), + 20: uint32(0x3000), +} + +func X__iswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswspace(tls, c) +} + +func Xiswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswspace_l(tls, c, l) +} + +func Xiswupper(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowlower(tls, wc) != wc) +} + +func X__iswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswupper(tls, c) +} + +func Xiswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswupper_l(tls, c, l) +} + +func Xiswxdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-Uint32FromUint8('0') < uint32(10) || wc|Uint32FromInt32(32)-Uint32FromUint8('a') < uint32(6)) +} + +func X__iswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswxdigit(tls, c) +} + +func Xiswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswxdigit_l(tls, c, l) +} + +func Xisxdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) +} + +func X__isxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisxdigit(tls, c) +} + +func Xisxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isxdigit_l(tls, c, l) +} + +// C documentation +// +// /* nonsense function that should NEVER be used! */ +func Xtoascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return c & int32(0x7f) +} + +func Xtolower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('A') < uint32(26)) != 0 { + return c | int32(32) + } + return c +} + +func X__tolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtolower(tls, c) +} + +func Xtolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__tolower_l(tls, c, l) +} + +func Xtoupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('a') < uint32(26)) != 0 { + return c & int32(0x5f) + } + return c +} + +func X__toupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtoupper(tls, c) +} + +func Xtoupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__toupper_l(tls, c, l) +} + +var _tab1 = [2666]uint8{ + 0: uint8(7), + 1: uint8(8), + 2: uint8(9), + 3: uint8(10), + 4: uint8(11), + 5: uint8(12), + 6: uint8(6), + 7: uint8(6), + 8: uint8(6), + 9: uint8(6), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), + 13: uint8(6), + 14: uint8(6), + 15: uint8(6), + 16: uint8(13), + 17: uint8(6), + 18: uint8(6), + 19: uint8(14), + 20: uint8(6), + 21: uint8(6), + 22: uint8(6), + 23: uint8(6), + 24: uint8(6), + 25: uint8(6), + 26: uint8(6), + 27: uint8(6), + 28: uint8(15), + 29: uint8(16), + 30: uint8(17), + 31: uint8(18), + 32: uint8(6), + 33: uint8(19), + 34: uint8(6), + 35: uint8(6), + 36: uint8(6), + 37: uint8(6), + 38: uint8(6), + 39: uint8(6), + 40: uint8(6), + 41: uint8(6), + 42: uint8(6), + 43: uint8(6), + 44: uint8(20), + 45: uint8(21), + 46: uint8(6), + 47: uint8(6), + 48: uint8(6), + 49: uint8(6), + 50: uint8(6), + 51: uint8(6), + 52: uint8(6), + 53: uint8(6), + 54: uint8(6), + 55: uint8(6), + 56: uint8(6), + 57: uint8(6), + 58: uint8(6), + 59: uint8(6), + 60: uint8(6), + 61: uint8(6), + 62: uint8(6), + 63: uint8(6), + 64: uint8(6), + 65: uint8(6), + 66: uint8(6), + 67: uint8(6), + 68: uint8(6), + 69: uint8(6), + 70: uint8(6), + 71: uint8(6), + 72: uint8(6), + 73: uint8(6), + 74: uint8(6), + 75: uint8(6), + 76: uint8(6), + 77: uint8(6), + 78: uint8(6), + 79: uint8(6), + 80: uint8(6), + 81: uint8(6), + 82: uint8(6), + 83: uint8(6), + 84: uint8(6), + 85: uint8(6), + 86: uint8(6), + 87: uint8(6), + 88: uint8(6), + 89: uint8(6), + 90: uint8(6), + 91: uint8(6), + 92: uint8(6), + 93: uint8(6), + 94: uint8(6), + 95: uint8(6), + 96: uint8(6), + 97: uint8(6), + 98: uint8(6), + 99: uint8(6), + 100: uint8(6), + 101: uint8(6), + 102: uint8(6), + 103: uint8(6), + 104: uint8(6), + 105: uint8(6), + 106: uint8(6), + 107: uint8(6), + 108: uint8(6), + 109: uint8(6), + 110: uint8(6), + 111: uint8(6), + 112: uint8(6), + 113: uint8(6), + 114: uint8(6), + 115: uint8(6), + 116: uint8(6), + 117: uint8(6), + 118: uint8(6), + 119: uint8(6), + 120: uint8(6), + 121: uint8(6), + 122: uint8(6), + 123: uint8(6), + 124: uint8(6), + 125: uint8(6), + 126: uint8(6), + 127: uint8(6), + 128: uint8(6), + 129: uint8(6), + 130: uint8(6), + 131: uint8(6), + 132: uint8(6), + 133: uint8(6), + 134: uint8(6), + 135: uint8(6), + 136: uint8(6), + 137: uint8(6), + 138: uint8(6), + 139: uint8(6), + 140: uint8(6), + 141: uint8(6), + 142: uint8(6), + 143: uint8(6), + 144: uint8(6), + 145: uint8(6), + 146: uint8(6), + 147: uint8(6), + 148: uint8(6), + 149: uint8(6), + 150: uint8(6), + 151: uint8(6), + 152: uint8(6), + 153: uint8(6), + 154: uint8(6), + 155: uint8(6), + 156: uint8(6), + 157: uint8(6), + 158: uint8(6), + 159: uint8(6), + 160: uint8(6), + 161: uint8(6), + 162: uint8(6), + 163: uint8(6), + 164: uint8(6), + 165: uint8(6), + 166: uint8(22), + 167: uint8(23), + 168: uint8(6), + 169: uint8(6), + 170: uint8(6), + 171: uint8(24), + 172: uint8(6), + 173: uint8(6), + 174: uint8(6), + 175: uint8(6), + 176: uint8(6), + 177: uint8(6), + 178: uint8(6), + 179: uint8(6), + 180: uint8(6), + 181: uint8(6), + 182: uint8(6), + 183: uint8(6), + 184: uint8(6), + 185: uint8(6), + 186: uint8(6), + 187: uint8(6), + 188: uint8(6), + 189: uint8(6), + 190: uint8(6), + 191: uint8(6), + 192: uint8(6), + 193: uint8(6), + 194: uint8(6), + 195: uint8(6), + 196: uint8(6), + 197: uint8(6), + 198: uint8(6), + 199: uint8(6), + 200: uint8(6), + 201: uint8(6), + 202: uint8(6), + 203: uint8(6), + 204: uint8(6), + 205: uint8(6), + 206: uint8(6), + 207: uint8(6), + 208: uint8(6), + 209: uint8(6), + 210: uint8(6), + 211: uint8(6), + 212: uint8(6), + 213: uint8(6), + 214: uint8(6), + 215: uint8(6), + 216: uint8(6), + 217: uint8(6), + 218: uint8(6), + 219: uint8(6), + 220: uint8(6), + 221: uint8(6), + 222: uint8(6), + 223: uint8(6), + 224: uint8(6), + 225: uint8(6), + 226: uint8(6), + 227: uint8(6), + 228: uint8(6), + 229: uint8(6), + 230: uint8(6), + 231: uint8(6), + 232: uint8(6), + 233: uint8(6), + 234: uint8(6), + 235: uint8(6), + 236: uint8(6), + 237: uint8(6), + 238: uint8(6), + 239: uint8(6), + 240: uint8(6), + 241: uint8(6), + 242: uint8(6), + 243: uint8(6), + 244: uint8(6), + 245: uint8(6), + 246: uint8(6), + 247: uint8(6), + 248: uint8(6), + 249: uint8(6), + 250: uint8(6), + 251: uint8(6), + 252: uint8(6), + 253: uint8(6), + 254: uint8(6), + 255: uint8(25), + 256: uint8(6), + 257: uint8(6), + 258: uint8(6), + 259: uint8(6), + 260: uint8(26), + 261: uint8(6), + 262: uint8(6), + 263: uint8(6), + 264: uint8(6), + 265: uint8(6), + 266: uint8(6), + 267: uint8(6), + 268: uint8(27), + 269: uint8(6), + 270: uint8(6), + 271: uint8(6), + 272: uint8(6), + 273: uint8(6), + 274: uint8(6), + 275: uint8(6), + 276: uint8(6), + 277: uint8(6), + 278: uint8(6), + 279: uint8(6), + 280: uint8(28), + 281: uint8(6), + 282: uint8(6), + 283: uint8(6), + 284: uint8(6), + 285: uint8(6), + 286: uint8(6), + 287: uint8(6), + 288: uint8(6), + 289: uint8(6), + 290: uint8(6), + 291: uint8(6), + 292: uint8(6), + 293: uint8(6), + 294: uint8(6), + 295: uint8(6), + 296: uint8(6), + 297: uint8(6), + 298: uint8(6), + 299: uint8(6), + 300: uint8(6), + 301: uint8(6), + 302: uint8(6), + 303: uint8(6), + 304: uint8(6), + 305: uint8(6), + 306: uint8(6), + 307: uint8(6), + 308: uint8(6), + 309: uint8(6), + 310: uint8(6), + 311: uint8(6), + 312: uint8(6), + 313: uint8(6), + 314: uint8(6), + 315: uint8(6), + 316: uint8(6), + 317: uint8(6), + 318: uint8(6), + 319: uint8(6), + 320: uint8(6), + 321: uint8(6), + 322: uint8(6), + 323: uint8(6), + 324: uint8(6), + 325: uint8(6), + 326: uint8(6), + 327: uint8(6), + 328: uint8(6), + 329: uint8(6), + 330: uint8(6), + 331: uint8(6), + 332: uint8(6), + 333: uint8(6), + 334: uint8(6), + 335: uint8(6), + 336: uint8(6), + 337: uint8(6), + 338: uint8(6), + 339: uint8(6), + 340: uint8(6), + 341: uint8(6), + 342: uint8(6), + 343: uint8(6), + 344: uint8(6), + 345: uint8(6), + 346: uint8(6), + 347: uint8(6), + 348: uint8(6), + 349: uint8(6), + 350: uint8(6), + 351: uint8(6), + 352: uint8(6), + 353: uint8(6), + 354: uint8(6), + 355: uint8(6), + 356: uint8(6), + 357: uint8(6), + 358: uint8(6), + 359: uint8(6), + 360: uint8(6), + 361: uint8(6), + 362: uint8(6), + 363: uint8(6), + 364: uint8(6), + 365: uint8(6), + 366: uint8(29), + 367: uint8(6), + 368: uint8(6), + 369: uint8(6), + 370: uint8(6), + 371: uint8(6), + 372: uint8(6), + 373: uint8(6), + 374: uint8(6), + 375: uint8(6), + 376: uint8(6), + 377: uint8(6), + 378: uint8(6), + 379: uint8(6), + 380: uint8(6), + 381: uint8(6), + 382: uint8(6), + 383: uint8(6), + 384: uint8(6), + 385: uint8(6), + 386: uint8(6), + 387: uint8(6), + 388: uint8(6), + 389: uint8(6), + 390: uint8(6), + 391: uint8(6), + 392: uint8(6), + 393: uint8(6), + 394: uint8(6), + 395: uint8(6), + 396: uint8(6), + 397: uint8(6), + 398: uint8(6), + 399: uint8(6), + 400: uint8(6), + 401: uint8(6), + 402: uint8(6), + 403: uint8(6), + 404: uint8(6), + 405: uint8(6), + 406: uint8(6), + 407: uint8(6), + 408: uint8(6), + 409: uint8(6), + 410: uint8(6), + 411: uint8(6), + 412: uint8(6), + 413: uint8(6), + 414: uint8(6), + 415: uint8(6), + 416: uint8(6), + 417: uint8(6), + 418: uint8(6), + 419: uint8(6), + 420: uint8(6), + 421: uint8(6), + 422: uint8(6), + 423: uint8(6), + 424: uint8(6), + 425: uint8(6), + 426: uint8(6), + 427: uint8(6), + 428: uint8(6), + 429: uint8(6), + 430: uint8(6), + 431: uint8(6), + 432: uint8(6), + 433: uint8(6), + 434: uint8(6), + 435: uint8(6), + 436: uint8(6), + 437: uint8(6), + 438: uint8(6), + 439: uint8(6), + 440: uint8(6), + 441: uint8(6), + 442: uint8(6), + 443: uint8(6), + 444: uint8(6), + 445: uint8(6), + 446: uint8(6), + 447: uint8(6), + 448: uint8(6), + 449: uint8(6), + 450: uint8(6), + 451: uint8(6), + 452: uint8(6), + 453: uint8(6), + 454: uint8(6), + 455: uint8(6), + 456: uint8(6), + 457: uint8(6), + 458: uint8(6), + 459: uint8(6), + 460: uint8(6), + 461: uint8(6), + 462: uint8(6), + 463: uint8(6), + 464: uint8(6), + 465: uint8(6), + 466: uint8(6), + 467: uint8(6), + 468: uint8(6), + 469: uint8(6), + 470: uint8(6), + 471: uint8(6), + 472: uint8(6), + 473: uint8(6), + 474: uint8(6), + 475: uint8(6), + 476: uint8(6), + 477: uint8(6), + 478: uint8(6), + 479: uint8(6), + 480: uint8(6), + 481: uint8(6), + 482: uint8(6), + 483: uint8(6), + 484: uint8(6), + 485: uint8(6), + 486: uint8(6), + 487: uint8(6), + 488: uint8(6), + 489: uint8(30), + 490: uint8(6), + 491: uint8(6), + 492: uint8(6), + 493: uint8(6), + 494: uint8(6), + 495: uint8(6), + 496: uint8(6), + 497: uint8(6), + 498: uint8(6), + 499: uint8(6), + 500: uint8(6), + 501: uint8(6), + 502: uint8(6), + 503: uint8(6), + 504: uint8(6), + 505: uint8(6), + 506: uint8(6), + 507: uint8(6), + 508: uint8(6), + 509: uint8(6), + 510: uint8(6), + 511: uint8(6), + 623: uint8(36), + 624: uint8(43), + 625: uint8(43), + 626: uint8(43), + 627: uint8(43), + 628: uint8(43), + 629: uint8(43), + 630: uint8(43), + 631: uint8(43), + 632: uint8(1), + 634: uint8(84), + 635: uint8(86), + 636: uint8(86), + 637: uint8(86), + 638: uint8(86), + 639: uint8(86), + 640: uint8(86), + 641: uint8(86), + 642: uint8(86), + 662: uint8(24), + 666: uint8(43), + 667: uint8(43), + 668: uint8(43), + 669: uint8(43), + 670: uint8(43), + 671: uint8(43), + 672: uint8(43), + 673: uint8(7), + 674: uint8(43), + 675: uint8(43), + 676: uint8(91), + 677: uint8(86), + 678: uint8(86), + 679: uint8(86), + 680: uint8(86), + 681: uint8(86), + 682: uint8(86), + 683: uint8(86), + 684: uint8(74), + 685: uint8(86), + 686: uint8(86), + 687: uint8(5), + 688: uint8(49), + 689: uint8(80), + 690: uint8(49), + 691: uint8(80), + 692: uint8(49), + 693: uint8(80), + 694: uint8(49), + 695: uint8(80), + 696: uint8(49), + 697: uint8(80), + 698: uint8(49), + 699: uint8(80), + 700: uint8(49), + 701: uint8(80), + 702: uint8(49), + 703: uint8(80), + 704: uint8(36), + 705: uint8(80), + 706: uint8(121), + 707: uint8(49), + 708: uint8(80), + 709: uint8(49), + 710: uint8(80), + 711: uint8(49), + 712: uint8(56), + 713: uint8(80), + 714: uint8(49), + 715: uint8(80), + 716: uint8(49), + 717: uint8(80), + 718: uint8(49), + 719: uint8(80), + 720: uint8(49), + 721: uint8(80), + 722: uint8(49), + 723: uint8(80), + 724: uint8(49), + 725: uint8(80), + 726: uint8(49), + 727: uint8(80), + 728: uint8(78), + 729: uint8(49), + 730: uint8(2), + 731: uint8(78), + 732: uint8(13), + 733: uint8(13), + 734: uint8(78), + 735: uint8(3), + 736: uint8(78), + 738: uint8(36), + 739: uint8(110), + 741: uint8(78), + 742: uint8(49), + 743: uint8(38), + 744: uint8(110), + 745: uint8(81), + 746: uint8(78), + 747: uint8(36), + 748: uint8(80), + 749: uint8(78), + 750: uint8(57), + 751: uint8(20), + 752: uint8(129), + 753: uint8(27), + 754: uint8(29), + 755: uint8(29), + 756: uint8(83), + 757: uint8(49), + 758: uint8(80), + 759: uint8(49), + 760: uint8(80), + 761: uint8(13), + 762: uint8(49), + 763: uint8(80), + 764: uint8(49), + 765: uint8(80), + 766: uint8(49), + 767: uint8(80), + 768: uint8(27), + 769: uint8(83), + 770: uint8(36), + 771: uint8(80), + 772: uint8(49), + 773: uint8(2), + 774: uint8(92), + 775: uint8(123), + 776: uint8(92), + 777: uint8(123), + 778: uint8(92), + 779: uint8(123), + 780: uint8(92), + 781: uint8(123), + 782: uint8(92), + 783: uint8(123), + 784: uint8(20), + 785: uint8(121), + 786: uint8(92), + 787: uint8(123), + 788: uint8(92), + 789: uint8(123), + 790: uint8(92), + 791: uint8(45), + 792: uint8(43), + 793: uint8(73), + 794: uint8(3), + 795: uint8(72), + 796: uint8(3), + 797: uint8(120), + 798: uint8(92), + 799: uint8(123), + 800: uint8(20), + 802: uint8(150), + 803: uint8(10), + 804: uint8(1), + 805: uint8(43), + 806: uint8(40), + 807: uint8(6), + 808: uint8(6), + 810: uint8(42), + 811: uint8(6), + 812: uint8(42), + 813: uint8(42), + 814: uint8(43), + 815: uint8(7), + 816: uint8(187), + 817: uint8(181), + 818: uint8(43), + 819: uint8(30), + 821: uint8(43), + 822: uint8(7), + 823: uint8(43), + 824: uint8(43), + 825: uint8(43), + 826: uint8(1), + 827: uint8(43), + 828: uint8(43), + 829: uint8(43), + 830: uint8(43), + 831: uint8(43), + 832: uint8(43), + 833: uint8(43), + 834: uint8(43), + 835: uint8(43), + 836: uint8(43), + 837: uint8(43), + 838: uint8(43), + 839: uint8(43), + 840: uint8(43), + 841: uint8(43), + 842: uint8(43), + 843: uint8(43), + 844: uint8(43), + 845: uint8(43), + 846: uint8(43), + 847: uint8(43), + 848: uint8(43), + 849: uint8(43), + 850: uint8(43), + 851: uint8(43), + 852: uint8(43), + 853: uint8(43), + 854: uint8(43), + 855: uint8(43), + 856: uint8(43), + 857: uint8(43), + 858: uint8(43), + 859: uint8(1), + 860: uint8(43), + 861: uint8(43), + 862: uint8(43), + 863: uint8(43), + 864: uint8(43), + 865: uint8(43), + 866: uint8(43), + 867: uint8(43), + 868: uint8(43), + 869: uint8(43), + 870: uint8(43), + 871: uint8(43), + 872: uint8(43), + 873: uint8(43), + 874: uint8(43), + 875: uint8(43), + 876: uint8(43), + 877: uint8(43), + 878: uint8(43), + 879: uint8(43), + 880: uint8(43), + 881: uint8(43), + 882: uint8(43), + 883: uint8(42), + 884: uint8(43), + 885: uint8(43), + 886: uint8(43), + 887: uint8(43), + 888: uint8(43), + 889: uint8(43), + 890: uint8(43), + 891: uint8(43), + 892: uint8(43), + 893: uint8(43), + 894: uint8(43), + 895: uint8(43), + 896: uint8(43), + 897: uint8(205), + 898: uint8(70), + 899: uint8(205), + 900: uint8(43), + 902: uint8(37), + 903: uint8(43), + 904: uint8(7), + 905: uint8(1), + 906: uint8(6), + 907: uint8(1), + 908: uint8(85), + 909: uint8(86), + 910: uint8(86), + 911: uint8(86), + 912: uint8(86), + 913: uint8(86), + 914: uint8(85), + 915: uint8(86), + 916: uint8(86), + 917: uint8(2), + 918: uint8(36), + 919: uint8(129), + 920: uint8(129), + 921: uint8(129), + 922: uint8(129), + 923: uint8(129), + 924: uint8(21), + 925: uint8(129), + 926: uint8(129), + 927: uint8(129), + 930: uint8(43), + 932: uint8(178), + 933: uint8(209), + 934: uint8(178), + 935: uint8(209), + 936: uint8(178), + 937: uint8(209), + 938: uint8(178), + 939: uint8(209), + 942: uint8(205), + 943: uint8(204), + 944: uint8(1), + 946: uint8(215), + 947: uint8(215), + 948: uint8(215), + 949: uint8(215), + 950: uint8(215), + 951: uint8(131), + 952: uint8(129), + 953: uint8(129), + 954: uint8(129), + 955: uint8(129), + 956: uint8(129), + 957: uint8(129), + 958: uint8(129), + 959: uint8(129), + 960: uint8(129), + 961: uint8(129), + 962: uint8(172), + 963: uint8(172), + 964: uint8(172), + 965: uint8(172), + 966: uint8(172), + 967: uint8(172), + 968: uint8(172), + 969: uint8(172), + 970: uint8(172), + 971: uint8(172), + 972: uint8(28), + 978: uint8(49), + 979: uint8(80), + 980: uint8(49), + 981: uint8(80), + 982: uint8(49), + 983: uint8(80), + 984: uint8(49), + 985: uint8(80), + 986: uint8(49), + 987: uint8(80), + 988: uint8(49), + 989: uint8(2), + 992: uint8(49), + 993: uint8(80), + 994: uint8(49), + 995: uint8(80), + 996: uint8(49), + 997: uint8(80), + 998: uint8(49), + 999: uint8(80), + 1000: uint8(49), + 1001: uint8(80), + 1002: uint8(49), + 1003: uint8(80), + 1004: uint8(49), + 1005: uint8(80), + 1006: uint8(49), + 1007: uint8(80), + 1008: uint8(49), + 1009: uint8(80), + 1010: uint8(78), + 1011: uint8(49), + 1012: uint8(80), + 1013: uint8(49), + 1014: uint8(80), + 1015: uint8(78), + 1016: uint8(49), + 1017: uint8(80), + 1018: uint8(49), + 1019: uint8(80), + 1020: uint8(49), + 1021: uint8(80), + 1022: uint8(49), + 1023: uint8(80), + 1024: uint8(49), + 1025: uint8(80), + 1026: uint8(49), + 1027: uint8(80), + 1028: uint8(49), + 1029: uint8(80), + 1030: uint8(49), + 1031: uint8(2), + 1032: uint8(135), + 1033: uint8(166), + 1034: uint8(135), + 1035: uint8(166), + 1036: uint8(135), + 1037: uint8(166), + 1038: uint8(135), + 1039: uint8(166), + 1040: uint8(135), + 1041: uint8(166), + 1042: uint8(135), + 1043: uint8(166), + 1044: uint8(135), + 1045: uint8(166), + 1046: uint8(135), + 1047: uint8(166), + 1048: uint8(42), + 1049: uint8(43), + 1050: uint8(43), + 1051: uint8(43), + 1052: uint8(43), + 1053: uint8(43), + 1054: uint8(43), + 1055: uint8(43), + 1056: uint8(43), + 1057: uint8(43), + 1058: uint8(43), + 1059: uint8(43), + 1060: uint8(43), + 1064: uint8(84), + 1065: uint8(86), + 1066: uint8(86), + 1067: uint8(86), + 1068: uint8(86), + 1069: uint8(86), + 1070: uint8(86), + 1071: uint8(86), + 1072: uint8(86), + 1073: uint8(86), + 1074: uint8(86), + 1075: uint8(86), + 1076: uint8(86), + 1171: uint8(84), + 1172: uint8(86), + 1173: uint8(86), + 1174: uint8(86), + 1175: uint8(86), + 1176: uint8(86), + 1177: uint8(86), + 1178: uint8(86), + 1179: uint8(86), + 1180: uint8(86), + 1181: uint8(86), + 1182: uint8(86), + 1183: uint8(86), + 1184: uint8(12), + 1186: uint8(12), + 1187: uint8(42), + 1188: uint8(43), + 1189: uint8(43), + 1190: uint8(43), + 1191: uint8(43), + 1192: uint8(43), + 1193: uint8(43), + 1194: uint8(43), + 1195: uint8(43), + 1196: uint8(43), + 1197: uint8(43), + 1198: uint8(43), + 1199: uint8(43), + 1200: uint8(43), + 1201: uint8(7), + 1202: uint8(42), + 1203: uint8(1), + 1257: uint8(42), + 1258: uint8(43), + 1259: uint8(43), + 1260: uint8(43), + 1261: uint8(43), + 1262: uint8(43), + 1263: uint8(43), + 1264: uint8(43), + 1265: uint8(43), + 1266: uint8(43), + 1267: uint8(43), + 1268: uint8(43), + 1269: uint8(43), + 1270: uint8(43), + 1271: uint8(43), + 1272: uint8(43), + 1273: uint8(43), + 1274: uint8(43), + 1275: uint8(43), + 1276: uint8(43), + 1277: uint8(43), + 1278: uint8(43), + 1279: uint8(43), + 1280: uint8(43), + 1281: uint8(43), + 1282: uint8(43), + 1283: uint8(43), + 1284: uint8(86), + 1285: uint8(86), + 1286: uint8(108), + 1287: uint8(129), + 1288: uint8(21), + 1290: uint8(43), + 1291: uint8(43), + 1292: uint8(43), + 1293: uint8(43), + 1294: uint8(43), + 1295: uint8(43), + 1296: uint8(43), + 1297: uint8(43), + 1298: uint8(43), + 1299: uint8(43), + 1300: uint8(43), + 1301: uint8(43), + 1302: uint8(43), + 1303: uint8(43), + 1304: uint8(43), + 1305: uint8(43), + 1306: uint8(43), + 1307: uint8(43), + 1308: uint8(43), + 1309: uint8(43), + 1310: uint8(43), + 1311: uint8(43), + 1312: uint8(43), + 1313: uint8(43), + 1314: uint8(43), + 1315: uint8(43), + 1316: uint8(43), + 1317: uint8(43), + 1318: uint8(43), + 1319: uint8(43), + 1320: uint8(43), + 1321: uint8(43), + 1322: uint8(43), + 1323: uint8(43), + 1324: uint8(43), + 1325: uint8(43), + 1326: uint8(43), + 1327: uint8(43), + 1328: uint8(43), + 1329: uint8(43), + 1330: uint8(43), + 1331: uint8(43), + 1332: uint8(7), + 1333: uint8(108), + 1334: uint8(3), + 1335: uint8(65), + 1336: uint8(43), + 1337: uint8(43), + 1338: uint8(86), + 1339: uint8(86), + 1340: uint8(86), + 1341: uint8(86), + 1342: uint8(86), + 1343: uint8(86), + 1344: uint8(86), + 1345: uint8(86), + 1346: uint8(86), + 1347: uint8(86), + 1348: uint8(86), + 1349: uint8(86), + 1350: uint8(86), + 1351: uint8(86), + 1352: uint8(44), + 1353: uint8(86), + 1354: uint8(43), + 1355: uint8(43), + 1356: uint8(43), + 1357: uint8(43), + 1358: uint8(43), + 1359: uint8(43), + 1360: uint8(43), + 1361: uint8(43), + 1362: uint8(43), + 1363: uint8(43), + 1364: uint8(43), + 1365: uint8(43), + 1366: uint8(43), + 1367: uint8(43), + 1368: uint8(43), + 1369: uint8(43), + 1370: uint8(43), + 1371: uint8(43), + 1372: uint8(43), + 1373: uint8(43), + 1374: uint8(43), + 1375: uint8(1), + 1416: uint8(12), + 1417: uint8(108), + 1423: uint8(6), + 1462: uint8(6), + 1463: uint8(37), + 1464: uint8(6), + 1465: uint8(37), + 1466: uint8(6), + 1467: uint8(37), + 1468: uint8(6), + 1469: uint8(37), + 1470: uint8(6), + 1471: uint8(37), + 1472: uint8(6), + 1473: uint8(37), + 1474: uint8(6), + 1475: uint8(37), + 1476: uint8(6), + 1477: uint8(37), + 1478: uint8(6), + 1479: uint8(37), + 1480: uint8(6), + 1481: uint8(37), + 1482: uint8(6), + 1483: uint8(37), + 1484: uint8(6), + 1485: uint8(37), + 1486: uint8(6), + 1487: uint8(37), + 1488: uint8(6), + 1489: uint8(37), + 1490: uint8(6), + 1491: uint8(37), + 1492: uint8(6), + 1493: uint8(37), + 1494: uint8(6), + 1495: uint8(37), + 1496: uint8(6), + 1497: uint8(37), + 1498: uint8(6), + 1499: uint8(37), + 1500: uint8(6), + 1501: uint8(37), + 1502: uint8(6), + 1503: uint8(37), + 1504: uint8(6), + 1505: uint8(37), + 1506: uint8(6), + 1507: uint8(37), + 1508: uint8(6), + 1509: uint8(37), + 1510: uint8(6), + 1511: uint8(37), + 1512: uint8(86), + 1513: uint8(122), + 1514: uint8(158), + 1515: uint8(38), + 1516: uint8(6), + 1517: uint8(37), + 1518: uint8(6), + 1519: uint8(37), + 1520: uint8(6), + 1521: uint8(37), + 1522: uint8(6), + 1523: uint8(37), + 1524: uint8(6), + 1525: uint8(37), + 1526: uint8(6), + 1527: uint8(37), + 1528: uint8(6), + 1529: uint8(37), + 1530: uint8(6), + 1531: uint8(37), + 1532: uint8(6), + 1533: uint8(37), + 1534: uint8(6), + 1535: uint8(37), + 1536: uint8(6), + 1537: uint8(37), + 1538: uint8(6), + 1539: uint8(37), + 1540: uint8(6), + 1541: uint8(37), + 1542: uint8(6), + 1543: uint8(37), + 1544: uint8(6), + 1545: uint8(37), + 1546: uint8(6), + 1547: uint8(1), + 1548: uint8(43), + 1549: uint8(43), + 1550: uint8(79), + 1551: uint8(86), + 1552: uint8(86), + 1553: uint8(44), + 1554: uint8(43), + 1555: uint8(127), + 1556: uint8(86), + 1557: uint8(86), + 1558: uint8(57), + 1559: uint8(43), + 1560: uint8(43), + 1561: uint8(85), + 1562: uint8(86), + 1563: uint8(86), + 1564: uint8(43), + 1565: uint8(43), + 1566: uint8(79), + 1567: uint8(86), + 1568: uint8(86), + 1569: uint8(44), + 1570: uint8(43), + 1571: uint8(127), + 1572: uint8(86), + 1573: uint8(86), + 1574: uint8(129), + 1575: uint8(55), + 1576: uint8(117), + 1577: uint8(91), + 1578: uint8(123), + 1579: uint8(92), + 1580: uint8(43), + 1581: uint8(43), + 1582: uint8(79), + 1583: uint8(86), + 1584: uint8(86), + 1585: uint8(2), + 1586: uint8(172), + 1587: uint8(4), + 1590: uint8(57), + 1591: uint8(43), + 1592: uint8(43), + 1593: uint8(85), + 1594: uint8(86), + 1595: uint8(86), + 1596: uint8(43), + 1597: uint8(43), + 1598: uint8(79), + 1599: uint8(86), + 1600: uint8(86), + 1601: uint8(44), + 1602: uint8(43), + 1603: uint8(43), + 1604: uint8(86), + 1605: uint8(86), + 1606: uint8(50), + 1607: uint8(19), + 1608: uint8(129), + 1609: uint8(87), + 1611: uint8(111), + 1612: uint8(129), + 1613: uint8(126), + 1614: uint8(201), + 1615: uint8(215), + 1616: uint8(126), + 1617: uint8(45), + 1618: uint8(129), + 1619: uint8(129), + 1620: uint8(14), + 1621: uint8(126), + 1622: uint8(57), + 1623: uint8(127), + 1624: uint8(111), + 1625: uint8(87), + 1627: uint8(129), + 1628: uint8(129), + 1629: uint8(126), + 1630: uint8(21), + 1632: uint8(126), + 1633: uint8(3), + 1634: uint8(43), + 1635: uint8(43), + 1636: uint8(43), + 1637: uint8(43), + 1638: uint8(43), + 1639: uint8(43), + 1640: uint8(43), + 1641: uint8(43), + 1642: uint8(43), + 1643: uint8(43), + 1644: uint8(43), + 1645: uint8(43), + 1646: uint8(7), + 1647: uint8(43), + 1648: uint8(36), + 1649: uint8(43), + 1650: uint8(151), + 1651: uint8(43), + 1652: uint8(43), + 1653: uint8(43), + 1654: uint8(43), + 1655: uint8(43), + 1656: uint8(43), + 1657: uint8(43), + 1658: uint8(43), + 1659: uint8(43), + 1660: uint8(42), + 1661: uint8(43), + 1662: uint8(43), + 1663: uint8(43), + 1664: uint8(43), + 1665: uint8(43), + 1666: uint8(86), + 1667: uint8(86), + 1668: uint8(86), + 1669: uint8(86), + 1670: uint8(86), + 1671: uint8(128), + 1672: uint8(129), + 1673: uint8(129), + 1674: uint8(129), + 1675: uint8(129), + 1676: uint8(57), + 1677: uint8(187), + 1678: uint8(42), + 1679: uint8(43), + 1680: uint8(43), + 1681: uint8(43), + 1682: uint8(43), + 1683: uint8(43), + 1684: uint8(43), + 1685: uint8(43), + 1686: uint8(43), + 1687: uint8(43), + 1688: uint8(43), + 1689: uint8(43), + 1690: uint8(43), + 1691: uint8(43), + 1692: uint8(43), + 1693: uint8(43), + 1694: uint8(43), + 1695: uint8(43), + 1696: uint8(43), + 1697: uint8(43), + 1698: uint8(43), + 1699: uint8(43), + 1700: uint8(43), + 1701: uint8(43), + 1702: uint8(43), + 1703: uint8(43), + 1704: uint8(43), + 1705: uint8(43), + 1706: uint8(43), + 1707: uint8(43), + 1708: uint8(43), + 1709: uint8(43), + 1710: uint8(43), + 1711: uint8(43), + 1712: uint8(43), + 1713: uint8(43), + 1714: uint8(43), + 1715: uint8(43), + 1716: uint8(43), + 1717: uint8(43), + 1718: uint8(43), + 1719: uint8(1), + 1720: uint8(129), + 1721: uint8(129), + 1722: uint8(129), + 1723: uint8(129), + 1724: uint8(129), + 1725: uint8(129), + 1726: uint8(129), + 1727: uint8(129), + 1728: uint8(129), + 1729: uint8(129), + 1730: uint8(129), + 1731: uint8(129), + 1732: uint8(129), + 1733: uint8(129), + 1734: uint8(129), + 1735: uint8(201), + 1736: uint8(172), + 1737: uint8(172), + 1738: uint8(172), + 1739: uint8(172), + 1740: uint8(172), + 1741: uint8(172), + 1742: uint8(172), + 1743: uint8(172), + 1744: uint8(172), + 1745: uint8(172), + 1746: uint8(172), + 1747: uint8(172), + 1748: uint8(172), + 1749: uint8(172), + 1750: uint8(172), + 1751: uint8(208), + 1752: uint8(13), + 1754: uint8(78), + 1755: uint8(49), + 1756: uint8(2), + 1757: uint8(180), + 1758: uint8(193), + 1759: uint8(193), + 1760: uint8(215), + 1761: uint8(215), + 1762: uint8(36), + 1763: uint8(80), + 1764: uint8(49), + 1765: uint8(80), + 1766: uint8(49), + 1767: uint8(80), + 1768: uint8(49), + 1769: uint8(80), + 1770: uint8(49), + 1771: uint8(80), + 1772: uint8(49), + 1773: uint8(80), + 1774: uint8(49), + 1775: uint8(80), + 1776: uint8(49), + 1777: uint8(80), + 1778: uint8(49), + 1779: uint8(80), + 1780: uint8(49), + 1781: uint8(80), + 1782: uint8(49), + 1783: uint8(80), + 1784: uint8(49), + 1785: uint8(80), + 1786: uint8(49), + 1787: uint8(80), + 1788: uint8(49), + 1789: uint8(80), + 1790: uint8(49), + 1791: uint8(80), + 1792: uint8(49), + 1793: uint8(80), + 1794: uint8(49), + 1795: uint8(80), + 1796: uint8(215), + 1797: uint8(215), + 1798: uint8(83), + 1799: uint8(193), + 1800: uint8(71), + 1801: uint8(212), + 1802: uint8(215), + 1803: uint8(215), + 1804: uint8(215), + 1805: uint8(5), + 1806: uint8(43), + 1807: uint8(43), + 1808: uint8(43), + 1809: uint8(43), + 1810: uint8(43), + 1811: uint8(43), + 1812: uint8(43), + 1813: uint8(43), + 1814: uint8(43), + 1815: uint8(43), + 1816: uint8(43), + 1817: uint8(43), + 1818: uint8(7), + 1819: uint8(1), + 1821: uint8(1), + 1913: uint8(78), + 1914: uint8(49), + 1915: uint8(80), + 1916: uint8(49), + 1917: uint8(80), + 1918: uint8(49), + 1919: uint8(80), + 1920: uint8(49), + 1921: uint8(80), + 1922: uint8(49), + 1923: uint8(80), + 1924: uint8(49), + 1925: uint8(80), + 1926: uint8(49), + 1927: uint8(80), + 1928: uint8(13), + 1934: uint8(36), + 1935: uint8(80), + 1936: uint8(49), + 1937: uint8(80), + 1938: uint8(49), + 1939: uint8(80), + 1940: uint8(49), + 1941: uint8(80), + 1942: uint8(49), + 1943: uint8(80), + 1978: uint8(43), + 1979: uint8(43), + 1980: uint8(43), + 1981: uint8(43), + 1982: uint8(43), + 1983: uint8(43), + 1984: uint8(43), + 1985: uint8(43), + 1986: uint8(43), + 1987: uint8(43), + 1988: uint8(43), + 1989: uint8(121), + 1990: uint8(92), + 1991: uint8(123), + 1992: uint8(92), + 1993: uint8(123), + 1994: uint8(79), + 1995: uint8(123), + 1996: uint8(92), + 1997: uint8(123), + 1998: uint8(92), + 1999: uint8(123), + 2000: uint8(92), + 2001: uint8(123), + 2002: uint8(92), + 2003: uint8(123), + 2004: uint8(92), + 2005: uint8(123), + 2006: uint8(92), + 2007: uint8(123), + 2008: uint8(92), + 2009: uint8(123), + 2010: uint8(92), + 2011: uint8(123), + 2012: uint8(92), + 2013: uint8(123), + 2014: uint8(92), + 2015: uint8(45), + 2016: uint8(43), + 2017: uint8(43), + 2018: uint8(121), + 2019: uint8(20), + 2020: uint8(92), + 2021: uint8(123), + 2022: uint8(92), + 2023: uint8(45), + 2024: uint8(121), + 2025: uint8(42), + 2026: uint8(92), + 2027: uint8(39), + 2028: uint8(92), + 2029: uint8(123), + 2030: uint8(92), + 2031: uint8(123), + 2032: uint8(92), + 2033: uint8(123), + 2034: uint8(164), + 2036: uint8(10), + 2037: uint8(180), + 2038: uint8(92), + 2039: uint8(123), + 2040: uint8(92), + 2041: uint8(123), + 2042: uint8(79), + 2043: uint8(3), + 2044: uint8(42), + 2045: uint8(43), + 2046: uint8(43), + 2047: uint8(43), + 2048: uint8(43), + 2049: uint8(43), + 2050: uint8(43), + 2051: uint8(43), + 2052: uint8(43), + 2053: uint8(43), + 2054: uint8(43), + 2055: uint8(43), + 2056: uint8(43), + 2057: uint8(43), + 2058: uint8(43), + 2059: uint8(43), + 2060: uint8(43), + 2061: uint8(43), + 2062: uint8(43), + 2063: uint8(1), + 2091: uint8(72), + 2101: uint8(42), + 2102: uint8(43), + 2103: uint8(43), + 2104: uint8(43), + 2105: uint8(43), + 2106: uint8(43), + 2107: uint8(43), + 2108: uint8(43), + 2109: uint8(43), + 2110: uint8(43), + 2111: uint8(43), + 2112: uint8(43), + 2113: uint8(43), + 2114: uint8(43), + 2115: uint8(43), + 2116: uint8(43), + 2117: uint8(43), + 2118: uint8(43), + 2119: uint8(43), + 2120: uint8(43), + 2121: uint8(43), + 2122: uint8(43), + 2123: uint8(43), + 2124: uint8(43), + 2125: uint8(43), + 2126: uint8(43), + 2127: uint8(43), + 2161: uint8(43), + 2162: uint8(43), + 2163: uint8(43), + 2164: uint8(43), + 2165: uint8(43), + 2166: uint8(43), + 2167: uint8(43), + 2168: uint8(43), + 2169: uint8(7), + 2171: uint8(72), + 2172: uint8(86), + 2173: uint8(86), + 2174: uint8(86), + 2175: uint8(86), + 2176: uint8(86), + 2177: uint8(86), + 2178: uint8(86), + 2179: uint8(86), + 2180: uint8(2), + 2236: uint8(43), + 2237: uint8(43), + 2238: uint8(43), + 2239: uint8(43), + 2240: uint8(43), + 2241: uint8(43), + 2242: uint8(43), + 2243: uint8(43), + 2244: uint8(43), + 2245: uint8(43), + 2246: uint8(43), + 2247: uint8(43), + 2248: uint8(43), + 2249: uint8(85), + 2250: uint8(86), + 2251: uint8(86), + 2252: uint8(86), + 2253: uint8(86), + 2254: uint8(86), + 2255: uint8(86), + 2256: uint8(86), + 2257: uint8(86), + 2258: uint8(86), + 2259: uint8(86), + 2260: uint8(86), + 2261: uint8(86), + 2262: uint8(14), + 2294: uint8(36), + 2295: uint8(43), + 2296: uint8(43), + 2297: uint8(43), + 2298: uint8(43), + 2299: uint8(43), + 2300: uint8(43), + 2301: uint8(43), + 2302: uint8(43), + 2303: uint8(43), + 2304: uint8(43), + 2305: uint8(43), + 2306: uint8(7), + 2308: uint8(86), + 2309: uint8(86), + 2310: uint8(86), + 2311: uint8(86), + 2312: uint8(86), + 2313: uint8(86), + 2314: uint8(86), + 2315: uint8(86), + 2316: uint8(86), + 2317: uint8(86), + 2318: uint8(86), + 2319: uint8(86), + 2364: uint8(36), + 2365: uint8(43), + 2366: uint8(43), + 2367: uint8(43), + 2368: uint8(43), + 2369: uint8(43), + 2370: uint8(43), + 2371: uint8(43), + 2372: uint8(43), + 2373: uint8(43), + 2374: uint8(43), + 2375: uint8(43), + 2376: uint8(43), + 2377: uint8(43), + 2378: uint8(43), + 2379: uint8(43), + 2380: uint8(43), + 2381: uint8(7), + 2386: uint8(86), + 2387: uint8(86), + 2388: uint8(86), + 2389: uint8(86), + 2390: uint8(86), + 2391: uint8(86), + 2392: uint8(86), + 2393: uint8(86), + 2394: uint8(86), + 2395: uint8(86), + 2396: uint8(86), + 2397: uint8(86), + 2398: uint8(86), + 2399: uint8(86), + 2400: uint8(86), + 2401: uint8(86), + 2402: uint8(86), + 2461: uint8(42), + 2462: uint8(43), + 2463: uint8(43), + 2464: uint8(43), + 2465: uint8(43), + 2466: uint8(43), + 2467: uint8(43), + 2468: uint8(43), + 2469: uint8(43), + 2470: uint8(43), + 2471: uint8(43), + 2472: uint8(86), + 2473: uint8(86), + 2474: uint8(86), + 2475: uint8(86), + 2476: uint8(86), + 2477: uint8(86), + 2478: uint8(86), + 2479: uint8(86), + 2480: uint8(86), + 2481: uint8(86), + 2482: uint8(14), + 2515: uint8(42), + 2516: uint8(43), + 2517: uint8(43), + 2518: uint8(43), + 2519: uint8(43), + 2520: uint8(43), + 2521: uint8(43), + 2522: uint8(43), + 2523: uint8(43), + 2524: uint8(43), + 2525: uint8(43), + 2526: uint8(86), + 2527: uint8(86), + 2528: uint8(86), + 2529: uint8(86), + 2530: uint8(86), + 2531: uint8(86), + 2532: uint8(86), + 2533: uint8(86), + 2534: uint8(86), + 2535: uint8(86), + 2536: uint8(14), + 2580: uint8(43), + 2581: uint8(43), + 2582: uint8(43), + 2583: uint8(43), + 2584: uint8(43), + 2585: uint8(43), + 2586: uint8(43), + 2587: uint8(43), + 2588: uint8(43), + 2589: uint8(43), + 2590: uint8(43), + 2591: uint8(85), + 2592: uint8(86), + 2593: uint8(86), + 2594: uint8(86), + 2595: uint8(86), + 2596: uint8(86), + 2597: uint8(86), + 2598: uint8(86), + 2599: uint8(86), + 2600: uint8(86), + 2601: uint8(86), + 2602: uint8(14), +} +var _rules = [240]int32{ + 1: int32(0x2001), + 2: -int32(0x2000), + 3: int32(0x1dbf00), + 4: int32(0x2e700), + 5: int32(0x7900), + 6: int32(0x2402), + 7: int32(0x101), + 8: -int32(0x100), + 10: int32(0x201), + 11: -int32(0x200), + 12: -int32(0xc6ff), + 13: -int32(0xe800), + 14: -int32(0x78ff), + 15: -int32(0x12c00), + 16: int32(0xc300), + 17: int32(0xd201), + 18: int32(0xce01), + 19: int32(0xcd01), + 20: int32(0x4f01), + 21: int32(0xca01), + 22: int32(0xcb01), + 23: int32(0xcf01), + 24: int32(0x6100), + 25: int32(0xd301), + 26: int32(0xd101), + 27: int32(0xa300), + 28: int32(0xd501), + 29: int32(0x8200), + 30: int32(0xd601), + 31: int32(0xda01), + 32: int32(0xd901), + 33: int32(0xdb01), + 34: int32(0x3800), + 35: int32(0x3), + 36: -int32(0x4f00), + 37: -int32(0x60ff), + 38: -int32(0x37ff), + 39: int32(0x242802), + 41: int32(0x101), + 42: -int32(0x100), + 43: -int32(0xcd00), + 44: -int32(0xda00), + 45: -int32(0x81ff), + 46: int32(0x2a2b01), + 47: -int32(0xa2ff), + 48: int32(0x2a2801), + 49: int32(0x2a3f00), + 50: -int32(0xc2ff), + 51: int32(0x4501), + 52: int32(0x4701), + 53: int32(0x2a1f00), + 54: int32(0x2a1c00), + 55: int32(0x2a1e00), + 56: -int32(0xd200), + 57: -int32(0xce00), + 58: -int32(0xca00), + 59: -int32(0xcb00), + 60: int32(0xa54f00), + 61: int32(0xa54b00), + 62: -int32(0xcf00), + 63: int32(0xa52800), + 64: int32(0xa54400), + 65: -int32(0xd100), + 66: -int32(0xd300), + 67: int32(0x29f700), + 68: int32(0xa54100), + 69: int32(0x29fd00), + 70: -int32(0xd500), + 71: -int32(0xd600), + 72: int32(0x29e700), + 73: int32(0xa54300), + 74: int32(0xa52a00), + 75: -int32(0x4500), + 76: -int32(0xd900), + 77: -int32(0x4700), + 78: -int32(0xdb00), + 79: int32(0xa51500), + 80: int32(0xa51200), + 81: int32(0x4c2402), + 83: int32(0x2001), + 84: -int32(0x2000), + 85: int32(0x101), + 86: -int32(0x100), + 87: int32(0x5400), + 88: int32(0x7401), + 89: int32(0x2601), + 90: int32(0x2501), + 91: int32(0x4001), + 92: int32(0x3f01), + 93: -int32(0x2600), + 94: -int32(0x2500), + 95: -int32(0x1f00), + 96: -int32(0x4000), + 97: -int32(0x3f00), + 98: int32(0x801), + 99: -int32(0x3e00), + 100: -int32(0x3900), + 101: -int32(0x2f00), + 102: -int32(0x3600), + 103: -int32(0x800), + 104: -int32(0x5600), + 105: -int32(0x5000), + 106: int32(0x700), + 107: -int32(0x7400), + 108: -int32(0x3bff), + 109: -int32(0x6000), + 110: -int32(0x6ff), + 111: int32(0x701a02), + 112: int32(0x101), + 113: -int32(0x100), + 114: int32(0x2001), + 115: -int32(0x2000), + 116: int32(0x5001), + 117: int32(0xf01), + 118: -int32(0xf00), + 120: int32(0x3001), + 121: -int32(0x3000), + 122: int32(0x101), + 123: -int32(0x100), + 125: int32(0xbc000), + 126: int32(0x1c6001), + 128: int32(0x97d001), + 129: int32(0x801), + 130: -int32(0x800), + 131: int32(0x8a0502), + 133: -int32(0xbbfff), + 134: -int32(0x186200), + 135: int32(0x89c200), + 136: -int32(0x182500), + 137: -int32(0x186e00), + 138: -int32(0x186d00), + 139: -int32(0x186400), + 140: -int32(0x186300), + 141: -int32(0x185c00), + 143: int32(0x8a3800), + 144: int32(0x8a0400), + 145: int32(0xee600), + 146: int32(0x101), + 147: -int32(0x100), + 149: -int32(0x3b00), + 150: -int32(0x1dbeff), + 151: int32(0x8f1d02), + 152: int32(0x800), + 153: -int32(0x7ff), + 155: int32(0x5600), + 156: -int32(0x55ff), + 157: int32(0x4a00), + 158: int32(0x6400), + 159: int32(0x8000), + 160: int32(0x7000), + 161: int32(0x7e00), + 162: int32(0x900), + 163: -int32(0x49ff), + 164: -int32(0x8ff), + 165: -int32(0x1c2500), + 166: -int32(0x63ff), + 167: -int32(0x6fff), + 168: -int32(0x7fff), + 169: -int32(0x7dff), + 170: int32(0xac0502), + 172: int32(0x1001), + 173: -int32(0x1000), + 174: int32(0x1c01), + 175: int32(0x101), + 176: -int32(0x1d5cff), + 177: -int32(0x20beff), + 178: -int32(0x2045ff), + 179: -int32(0x1c00), + 180: int32(0xb10b02), + 181: int32(0x101), + 182: -int32(0x100), + 183: int32(0x3001), + 184: -int32(0x3000), + 186: -int32(0x29f6ff), + 187: -int32(0xee5ff), + 188: -int32(0x29e6ff), + 189: -int32(0x2a2b00), + 190: -int32(0x2a2800), + 191: -int32(0x2a1bff), + 192: -int32(0x29fcff), + 193: -int32(0x2a1eff), + 194: -int32(0x2a1dff), + 195: -int32(0x2a3eff), + 197: -int32(0x1c6000), + 199: int32(0x101), + 200: -int32(0x100), + 201: int32(0xbc0c02), + 203: int32(0x101), + 204: -int32(0x100), + 205: -int32(0xa543ff), + 206: int32(0x3a001), + 207: -int32(0x8a03ff), + 208: -int32(0xa527ff), + 209: int32(0x3000), + 210: -int32(0xa54eff), + 211: -int32(0xa54aff), + 212: -int32(0xa540ff), + 213: -int32(0xa511ff), + 214: -int32(0xa529ff), + 215: -int32(0xa514ff), + 216: -int32(0x2fff), + 217: -int32(0xa542ff), + 218: -int32(0x8a37ff), + 220: -int32(0x97d000), + 221: -int32(0x3a000), + 223: int32(0x2001), + 224: -int32(0x2000), + 226: int32(0x2801), + 227: -int32(0x2800), + 229: int32(0x4001), + 230: -int32(0x4000), + 232: int32(0x2001), + 233: -int32(0x2000), + 235: int32(0x2001), + 236: -int32(0x2000), + 238: int32(0x2201), + 239: -int32(0x2200), +} +var _rulebases = [512]uint8{ + 1: uint8(6), + 2: uint8(39), + 3: uint8(81), + 4: uint8(111), + 5: uint8(119), + 16: uint8(124), + 19: uint8(127), + 28: uint8(131), + 29: uint8(142), + 30: uint8(146), + 31: uint8(151), + 33: uint8(170), + 44: uint8(180), + 45: uint8(196), + 166: uint8(198), + 167: uint8(201), + 171: uint8(219), + 255: uint8(222), + 260: uint8(225), + 268: uint8(228), + 280: uint8(231), + 366: uint8(234), + 489: uint8(237), +} +var _exceptions = [200][2]uint8{ + 0: { + 0: uint8(48), + 1: uint8(12), + }, + 1: { + 0: uint8(49), + 1: uint8(13), + }, + 2: { + 0: uint8(120), + 1: uint8(14), + }, + 3: { + 0: uint8(127), + 1: uint8(15), + }, + 4: { + 0: uint8(128), + 1: uint8(16), + }, + 5: { + 0: uint8(129), + 1: uint8(17), + }, + 6: { + 0: uint8(134), + 1: uint8(18), + }, + 7: { + 0: uint8(137), + 1: uint8(19), + }, + 8: { + 0: uint8(138), + 1: uint8(19), + }, + 9: { + 0: uint8(142), + 1: uint8(20), + }, + 10: { + 0: uint8(143), + 1: uint8(21), + }, + 11: { + 0: uint8(144), + 1: uint8(22), + }, + 12: { + 0: uint8(147), + 1: uint8(19), + }, + 13: { + 0: uint8(148), + 1: uint8(23), + }, + 14: { + 0: uint8(149), + 1: uint8(24), + }, + 15: { + 0: uint8(150), + 1: uint8(25), + }, + 16: { + 0: uint8(151), + 1: uint8(26), + }, + 17: { + 0: uint8(154), + 1: uint8(27), + }, + 18: { + 0: uint8(156), + 1: uint8(25), + }, + 19: { + 0: uint8(157), + 1: uint8(28), + }, + 20: { + 0: uint8(158), + 1: uint8(29), + }, + 21: { + 0: uint8(159), + 1: uint8(30), + }, + 22: { + 0: uint8(166), + 1: uint8(31), + }, + 23: { + 0: uint8(169), + 1: uint8(31), + }, + 24: { + 0: uint8(174), + 1: uint8(31), + }, + 25: { + 0: uint8(177), + 1: uint8(32), + }, + 26: { + 0: uint8(178), + 1: uint8(32), + }, + 27: { + 0: uint8(183), + 1: uint8(33), + }, + 28: { + 0: uint8(191), + 1: uint8(34), + }, + 29: { + 0: uint8(197), + 1: uint8(35), + }, + 30: { + 0: uint8(200), + 1: uint8(35), + }, + 31: { + 0: uint8(203), + 1: uint8(35), + }, + 32: { + 0: uint8(221), + 1: uint8(36), + }, + 33: { + 0: uint8(242), + 1: uint8(35), + }, + 34: { + 0: uint8(246), + 1: uint8(37), + }, + 35: { + 0: uint8(247), + 1: uint8(38), + }, + 36: { + 0: uint8(32), + 1: uint8(45), + }, + 37: { + 0: uint8(58), + 1: uint8(46), + }, + 38: { + 0: uint8(61), + 1: uint8(47), + }, + 39: { + 0: uint8(62), + 1: uint8(48), + }, + 40: { + 0: uint8(63), + 1: uint8(49), + }, + 41: { + 0: uint8(64), + 1: uint8(49), + }, + 42: { + 0: uint8(67), + 1: uint8(50), + }, + 43: { + 0: uint8(68), + 1: uint8(51), + }, + 44: { + 0: uint8(69), + 1: uint8(52), + }, + 45: { + 0: uint8(80), + 1: uint8(53), + }, + 46: { + 0: uint8(81), + 1: uint8(54), + }, + 47: { + 0: uint8(82), + 1: uint8(55), + }, + 48: { + 0: uint8(83), + 1: uint8(56), + }, + 49: { + 0: uint8(84), + 1: uint8(57), + }, + 50: { + 0: uint8(89), + 1: uint8(58), + }, + 51: { + 0: uint8(91), + 1: uint8(59), + }, + 52: { + 0: uint8(92), + 1: uint8(60), + }, + 53: { + 0: uint8(97), + 1: uint8(61), + }, + 54: { + 0: uint8(99), + 1: uint8(62), + }, + 55: { + 0: uint8(101), + 1: uint8(63), + }, + 56: { + 0: uint8(102), + 1: uint8(64), + }, + 57: { + 0: uint8(104), + 1: uint8(65), + }, + 58: { + 0: uint8(105), + 1: uint8(66), + }, + 59: { + 0: uint8(106), + 1: uint8(64), + }, + 60: { + 0: uint8(107), + 1: uint8(67), + }, + 61: { + 0: uint8(108), + 1: uint8(68), + }, + 62: { + 0: uint8(111), + 1: uint8(66), + }, + 63: { + 0: uint8(113), + 1: uint8(69), + }, + 64: { + 0: uint8(114), + 1: uint8(70), + }, + 65: { + 0: uint8(117), + 1: uint8(71), + }, + 66: { + 0: uint8(125), + 1: uint8(72), + }, + 67: { + 0: uint8(130), + 1: uint8(73), + }, + 68: { + 0: uint8(135), + 1: uint8(74), + }, + 69: { + 0: uint8(137), + 1: uint8(75), + }, + 70: { + 0: uint8(138), + 1: uint8(76), + }, + 71: { + 0: uint8(139), + 1: uint8(76), + }, + 72: { + 0: uint8(140), + 1: uint8(77), + }, + 73: { + 0: uint8(146), + 1: uint8(78), + }, + 74: { + 0: uint8(157), + 1: uint8(79), + }, + 75: { + 0: uint8(158), + 1: uint8(80), + }, + 76: { + 0: uint8(69), + 1: uint8(87), + }, + 77: { + 0: uint8(123), + 1: uint8(29), + }, + 78: { + 0: uint8(124), + 1: uint8(29), + }, + 79: { + 0: uint8(125), + 1: uint8(29), + }, + 80: { + 0: uint8(127), + 1: uint8(88), + }, + 81: { + 0: uint8(134), + 1: uint8(89), + }, + 82: { + 0: uint8(136), + 1: uint8(90), + }, + 83: { + 0: uint8(137), + 1: uint8(90), + }, + 84: { + 0: uint8(138), + 1: uint8(90), + }, + 85: { + 0: uint8(140), + 1: uint8(91), + }, + 86: { + 0: uint8(142), + 1: uint8(92), + }, + 87: { + 0: uint8(143), + 1: uint8(92), + }, + 88: { + 0: uint8(172), + 1: uint8(93), + }, + 89: { + 0: uint8(173), + 1: uint8(94), + }, + 90: { + 0: uint8(174), + 1: uint8(94), + }, + 91: { + 0: uint8(175), + 1: uint8(94), + }, + 92: { + 0: uint8(194), + 1: uint8(95), + }, + 93: { + 0: uint8(204), + 1: uint8(96), + }, + 94: { + 0: uint8(205), + 1: uint8(97), + }, + 95: { + 0: uint8(206), + 1: uint8(97), + }, + 96: { + 0: uint8(207), + 1: uint8(98), + }, + 97: { + 0: uint8(208), + 1: uint8(99), + }, + 98: { + 0: uint8(209), + 1: uint8(100), + }, + 99: { + 0: uint8(213), + 1: uint8(101), + }, + 100: { + 0: uint8(214), + 1: uint8(102), + }, + 101: { + 0: uint8(215), + 1: uint8(103), + }, + 102: { + 0: uint8(240), + 1: uint8(104), + }, + 103: { + 0: uint8(241), + 1: uint8(105), + }, + 104: { + 0: uint8(242), + 1: uint8(106), + }, + 105: { + 0: uint8(243), + 1: uint8(107), + }, + 106: { + 0: uint8(244), + 1: uint8(108), + }, + 107: { + 0: uint8(245), + 1: uint8(109), + }, + 108: { + 0: uint8(249), + 1: uint8(110), + }, + 109: { + 0: uint8(253), + 1: uint8(45), + }, + 110: { + 0: uint8(254), + 1: uint8(45), + }, + 111: { + 0: uint8(255), + 1: uint8(45), + }, + 112: { + 0: uint8(80), + 1: uint8(105), + }, + 113: { + 0: uint8(81), + 1: uint8(105), + }, + 114: { + 0: uint8(82), + 1: uint8(105), + }, + 115: { + 0: uint8(83), + 1: uint8(105), + }, + 116: { + 0: uint8(84), + 1: uint8(105), + }, + 117: { + 0: uint8(85), + 1: uint8(105), + }, + 118: { + 0: uint8(86), + 1: uint8(105), + }, + 119: { + 0: uint8(87), + 1: uint8(105), + }, + 120: { + 0: uint8(88), + 1: uint8(105), + }, + 121: { + 0: uint8(89), + 1: uint8(105), + }, + 122: { + 0: uint8(90), + 1: uint8(105), + }, + 123: { + 0: uint8(91), + 1: uint8(105), + }, + 124: { + 0: uint8(92), + 1: uint8(105), + }, + 125: { + 0: uint8(93), + 1: uint8(105), + }, + 126: { + 0: uint8(94), + 1: uint8(105), + }, + 127: { + 0: uint8(95), + 1: uint8(105), + }, + 128: { + 0: uint8(130), + }, + 129: { + 0: uint8(131), + }, + 130: { + 0: uint8(132), + }, + 131: { + 0: uint8(133), + }, + 132: { + 0: uint8(134), + }, + 133: { + 0: uint8(135), + }, + 134: { + 0: uint8(136), + }, + 135: { + 0: uint8(137), + }, + 136: { + 0: uint8(192), + 1: uint8(117), + }, + 137: { + 0: uint8(207), + 1: uint8(118), + }, + 138: { + 0: uint8(128), + 1: uint8(137), + }, + 139: { + 0: uint8(129), + 1: uint8(138), + }, + 140: { + 0: uint8(130), + 1: uint8(139), + }, + 141: { + 0: uint8(133), + 1: uint8(140), + }, + 142: { + 0: uint8(134), + 1: uint8(141), + }, + 143: { + 0: uint8(112), + 1: uint8(157), + }, + 144: { + 0: uint8(113), + 1: uint8(157), + }, + 145: { + 0: uint8(118), + 1: uint8(158), + }, + 146: { + 0: uint8(119), + 1: uint8(158), + }, + 147: { + 0: uint8(120), + 1: uint8(159), + }, + 148: { + 0: uint8(121), + 1: uint8(159), + }, + 149: { + 0: uint8(122), + 1: uint8(160), + }, + 150: { + 0: uint8(123), + 1: uint8(160), + }, + 151: { + 0: uint8(124), + 1: uint8(161), + }, + 152: { + 0: uint8(125), + 1: uint8(161), + }, + 153: { + 0: uint8(179), + 1: uint8(162), + }, + 154: { + 0: uint8(186), + 1: uint8(163), + }, + 155: { + 0: uint8(187), + 1: uint8(163), + }, + 156: { + 0: uint8(188), + 1: uint8(164), + }, + 157: { + 0: uint8(190), + 1: uint8(165), + }, + 158: { + 0: uint8(195), + 1: uint8(162), + }, + 159: { + 0: uint8(204), + 1: uint8(164), + }, + 160: { + 0: uint8(218), + 1: uint8(166), + }, + 161: { + 0: uint8(219), + 1: uint8(166), + }, + 162: { + 0: uint8(229), + 1: uint8(106), + }, + 163: { + 0: uint8(234), + 1: uint8(167), + }, + 164: { + 0: uint8(235), + 1: uint8(167), + }, + 165: { + 0: uint8(236), + 1: uint8(110), + }, + 166: { + 0: uint8(243), + 1: uint8(162), + }, + 167: { + 0: uint8(248), + 1: uint8(168), + }, + 168: { + 0: uint8(249), + 1: uint8(168), + }, + 169: { + 0: uint8(250), + 1: uint8(169), + }, + 170: { + 0: uint8(251), + 1: uint8(169), + }, + 171: { + 0: uint8(252), + 1: uint8(164), + }, + 172: { + 0: uint8(38), + 1: uint8(176), + }, + 173: { + 0: uint8(42), + 1: uint8(177), + }, + 174: { + 0: uint8(43), + 1: uint8(178), + }, + 175: { + 0: uint8(78), + 1: uint8(179), + }, + 176: { + 0: uint8(132), + 1: uint8(8), + }, + 177: { + 0: uint8(98), + 1: uint8(186), + }, + 178: { + 0: uint8(99), + 1: uint8(187), + }, + 179: { + 0: uint8(100), + 1: uint8(188), + }, + 180: { + 0: uint8(101), + 1: uint8(189), + }, + 181: { + 0: uint8(102), + 1: uint8(190), + }, + 182: { + 0: uint8(109), + 1: uint8(191), + }, + 183: { + 0: uint8(110), + 1: uint8(192), + }, + 184: { + 0: uint8(111), + 1: uint8(193), + }, + 185: { + 0: uint8(112), + 1: uint8(194), + }, + 186: { + 0: uint8(126), + 1: uint8(195), + }, + 187: { + 0: uint8(127), + 1: uint8(195), + }, + 188: { + 0: uint8(125), + 1: uint8(207), + }, + 189: { + 0: uint8(141), + 1: uint8(208), + }, + 190: { + 0: uint8(148), + 1: uint8(209), + }, + 191: { + 0: uint8(171), + 1: uint8(210), + }, + 192: { + 0: uint8(172), + 1: uint8(211), + }, + 193: { + 0: uint8(173), + 1: uint8(212), + }, + 194: { + 0: uint8(176), + 1: uint8(213), + }, + 195: { + 0: uint8(177), + 1: uint8(214), + }, + 196: { + 0: uint8(178), + 1: uint8(215), + }, + 197: { + 0: uint8(196), + 1: uint8(216), + }, + 198: { + 0: uint8(197), + 1: uint8(217), + }, + 199: { + 0: uint8(198), + 1: uint8(218), + }, +} + +func _casemap(tls *TLS, c uint32, dir int32) (r1 int32) { + var b, rt, try, v, x, xb, xn, y uint32 + var c0, r, rd, v1 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = b, c0, r, rd, rt, try, v, x, xb, xn, y, v1 + c0 = int32(c) + if c >= uint32(0x20000) { + return int32(c) + } + b = c >> int32(8) + c &= uint32(255) + x = c / uint32(3) + y = c % uint32(3) + /* lookup entry in two-level base-6 table */ + v = uint32(_tab1[uint32(int32(_tab1[b])*int32(86))+x]) + v = v * uint32(_mt[y]) >> int32(11) % uint32(6) + /* use the bit vector out of the tables as an index into + * a block-specific set of rules and decode the rule into + * a type and a case-mapping delta. */ + r = _rules[uint32(_rulebases[b])+v] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + /* rules 0/1 are simple lower/upper case with a delta. + * apply according to desired mapping direction. */ + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* binary search. endpoints of the binary search for + * this block are stored in the rule delta field. */ + xn = uint32(rd & int32(0xff)) + xb = uint32(rd) >> int32(8) + for xn != 0 { + try = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2))) + if try == c { + r = _rules[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2 + 1))] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* Hard-coded for the four exceptional titlecase */ + if dir != 0 { + v1 = -int32(1) + } else { + v1 = int32(1) + } + return c0 + v1 + } else { + if try > c { + xn /= uint32(2) + } else { + xb += xn / uint32(2) + xn -= xn / uint32(2) + } + } + } + return c0 +} + +var _mt = [3]int32{ + 0: int32(2048), + 1: int32(342), + 2: int32(57), +} + +func Xtowlower(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, 0)) +} + +func Xtowupper(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, int32(1))) +} + +func X__towupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowupper(tls, c) +} + +func X__towlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowlower(tls, c) +} + +func Xtowlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towlower_l(tls, c, l) +} + +func Xtowupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towupper_l(tls, c, l) +} + +func Xwcswidth(tls *TLS, wcs uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v, (%v:)", tls, wcs, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, l, v3, v5 int32 + var v2 Tsize_t + var v4 bool + _, _, _, _, _, _ = k, l, v2, v3, v4, v5 + l = 0 + k = 0 + for { + v2 = n + n-- + if v4 = v2 != 0 && *(*Twchar_t)(unsafe.Pointer(wcs)) != 0; v4 { + v3 = Xwcwidth(tls, *(*Twchar_t)(unsafe.Pointer(wcs))) + k = v3 + } + if !(v4 && v3 >= 0) { + break + } + goto _1 + _1: + ; + l += k + wcs += 4 + } + if k < 0 { + v5 = k + } else { + v5 = l + } + return v5 +} + +func Xwctrans(tls *TLS, class uintptr) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v class=%v, (%v:)", tls, class, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(Xstrcmp(tls, class, __ccgo_ts+196) != 0) { + return UintptrFromInt32(1) + } + if !(Xstrcmp(tls, class, __ccgo_ts+204) != 0) { + return UintptrFromInt32(2) + } + return uintptr(0) +} + +func Xtowctrans(tls *TLS, wc Twint_t, trans Twctrans_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v trans=%v, (%v:)", tls, wc, trans, origin(2)) + defer func() { trc("-> %v", r) }() + } + if trans == UintptrFromInt32(1) { + return Xtowupper(tls, wc) + } + if trans == UintptrFromInt32(2) { + return Xtowlower(tls, wc) + } + return wc +} + +func X__wctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctrans(tls, s) +} + +func X__towctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowctrans(tls, c, t) +} + +func Xtowctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towctrans_l(tls, c, t, l) +} + +func Xwctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctrans_l(tls, s, l) +} + +var _table5 = [2784]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(18), + 4: uint8(19), + 5: uint8(20), + 6: uint8(21), + 7: uint8(22), + 8: uint8(23), + 9: uint8(24), + 10: uint8(25), + 11: uint8(26), + 12: uint8(27), + 13: uint8(28), + 14: uint8(29), + 15: uint8(30), + 16: uint8(31), + 17: uint8(32), + 18: uint8(16), + 19: uint8(33), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(34), + 24: uint8(35), + 25: uint8(36), + 26: uint8(37), + 27: uint8(38), + 28: uint8(39), + 29: uint8(40), + 30: uint8(16), + 31: uint8(16), + 32: uint8(41), + 33: uint8(16), + 34: uint8(16), + 35: uint8(16), + 36: uint8(16), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(42), + 45: uint8(43), + 46: uint8(16), + 47: uint8(16), + 48: uint8(44), + 49: uint8(16), + 50: uint8(16), + 51: uint8(16), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(16), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(16), + 165: uint8(16), + 166: uint8(45), + 167: uint8(16), + 168: uint8(46), + 169: uint8(47), + 170: uint8(48), + 171: uint8(49), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(50), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(16), + 250: uint8(16), + 251: uint8(51), + 252: uint8(16), + 253: uint8(16), + 254: uint8(52), + 255: uint8(53), + 256: uint8(16), + 257: uint8(54), + 258: uint8(55), + 259: uint8(56), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(57), + 267: uint8(16), + 268: uint8(16), + 269: uint8(58), + 270: uint8(16), + 271: uint8(59), + 272: uint8(60), + 273: uint8(61), + 274: uint8(62), + 275: uint8(63), + 276: uint8(64), + 277: uint8(65), + 278: uint8(66), + 279: uint8(67), + 280: uint8(68), + 281: uint8(69), + 282: uint8(70), + 283: uint8(16), + 284: uint8(71), + 285: uint8(72), + 286: uint8(73), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(74), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(75), + 363: uint8(76), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(77), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(78), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(79), + 466: uint8(80), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(81), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(82), + 481: uint8(83), + 482: uint8(84), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(85), + 489: uint8(86), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(16), + 497: uint8(16), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 588: uint8(255), + 589: uint8(255), + 624: uint8(248), + 625: uint8(3), + 658: uint8(254), + 659: uint8(255), + 660: uint8(255), + 661: uint8(255), + 662: uint8(255), + 663: uint8(191), + 664: uint8(182), + 672: uint8(63), + 674: uint8(255), + 675: uint8(23), + 681: uint8(248), + 682: uint8(255), + 683: uint8(255), + 686: uint8(1), + 698: uint8(192), + 699: uint8(191), + 700: uint8(159), + 701: uint8(61), + 705: uint8(128), + 706: uint8(2), + 710: uint8(255), + 711: uint8(255), + 712: uint8(255), + 713: uint8(7), + 724: uint8(192), + 725: uint8(255), + 726: uint8(1), + 733: uint8(248), + 734: uint8(15), + 735: uint8(32), + 738: uint8(192), + 739: uint8(251), + 740: uint8(239), + 741: uint8(62), + 747: uint8(14), + 762: uint8(248), + 763: uint8(255), + 764: uint8(255), + 765: uint8(255), + 766: uint8(255), + 767: uint8(255), + 768: uint8(7), + 775: uint8(20), + 776: uint8(254), + 777: uint8(33), + 778: uint8(254), + 780: uint8(12), + 784: uint8(2), + 791: uint8(16), + 792: uint8(30), + 793: uint8(32), + 796: uint8(12), + 799: uint8(64), + 800: uint8(6), + 807: uint8(16), + 808: uint8(134), + 809: uint8(57), + 810: uint8(2), + 814: uint8(35), + 816: uint8(6), + 823: uint8(16), + 824: uint8(190), + 825: uint8(33), + 828: uint8(12), + 831: uint8(252), + 832: uint8(2), + 839: uint8(144), + 840: uint8(30), + 841: uint8(32), + 842: uint8(64), + 844: uint8(12), + 848: uint8(4), + 856: uint8(1), + 857: uint8(32), + 864: uint8(17), + 871: uint8(192), + 872: uint8(193), + 873: uint8(61), + 874: uint8(96), + 876: uint8(12), + 880: uint8(2), + 887: uint8(144), + 888: uint8(64), + 889: uint8(48), + 892: uint8(12), + 896: uint8(3), + 903: uint8(24), + 904: uint8(30), + 905: uint8(32), + 908: uint8(12), + 921: uint8(4), + 922: uint8(92), + 934: uint8(242), + 935: uint8(7), + 936: uint8(128), + 937: uint8(127), + 950: uint8(242), + 951: uint8(31), + 953: uint8(63), + 963: uint8(3), + 966: uint8(160), + 967: uint8(2), + 974: uint8(254), + 975: uint8(127), + 976: uint8(223), + 977: uint8(224), + 978: uint8(255), + 979: uint8(254), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(31), + 984: uint8(64), + 997: uint8(224), + 998: uint8(253), + 999: uint8(102), + 1003: uint8(195), + 1004: uint8(1), + 1006: uint8(30), + 1008: uint8(100), + 1009: uint8(32), + 1011: uint8(32), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(255), + 1048: uint8(255), + 1049: uint8(255), + 1050: uint8(255), + 1051: uint8(255), + 1052: uint8(255), + 1053: uint8(255), + 1054: uint8(255), + 1055: uint8(255), + 1067: uint8(224), + 1090: uint8(28), + 1094: uint8(28), + 1098: uint8(12), + 1102: uint8(12), + 1110: uint8(176), + 1111: uint8(63), + 1112: uint8(64), + 1113: uint8(254), + 1114: uint8(15), + 1115: uint8(32), + 1121: uint8(120), + 1136: uint8(96), + 1141: uint8(2), + 1156: uint8(135), + 1157: uint8(1), + 1158: uint8(4), + 1159: uint8(14), + 1186: uint8(128), + 1187: uint8(9), + 1194: uint8(64), + 1195: uint8(127), + 1196: uint8(229), + 1197: uint8(31), + 1198: uint8(248), + 1199: uint8(159), + 1206: uint8(255), + 1207: uint8(127), + 1216: uint8(15), + 1222: uint8(208), + 1223: uint8(23), + 1224: uint8(4), + 1229: uint8(248), + 1230: uint8(15), + 1232: uint8(3), + 1236: uint8(60), + 1237: uint8(59), + 1244: uint8(64), + 1245: uint8(163), + 1246: uint8(3), + 1253: uint8(240), + 1254: uint8(207), + 1274: uint8(247), + 1275: uint8(255), + 1276: uint8(253), + 1277: uint8(33), + 1278: uint8(16), + 1279: uint8(3), + 1304: uint8(255), + 1305: uint8(255), + 1306: uint8(255), + 1307: uint8(255), + 1308: uint8(255), + 1309: uint8(255), + 1310: uint8(255), + 1311: uint8(251), + 1313: uint8(248), + 1317: uint8(124), + 1324: uint8(223), + 1325: uint8(255), + 1338: uint8(255), + 1339: uint8(255), + 1340: uint8(255), + 1341: uint8(255), + 1342: uint8(1), + 1373: uint8(128), + 1374: uint8(3), + 1391: uint8(128), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(255), + 1407: uint8(255), + 1413: uint8(60), + 1427: uint8(6), + 1453: uint8(128), + 1454: uint8(247), + 1455: uint8(63), + 1459: uint8(192), + 1470: uint8(3), + 1472: uint8(68), + 1473: uint8(8), + 1476: uint8(96), + 1496: uint8(48), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(3), + 1503: uint8(128), + 1508: uint8(192), + 1509: uint8(63), + 1512: uint8(128), + 1513: uint8(255), + 1514: uint8(3), + 1520: uint8(7), + 1526: uint8(200), + 1527: uint8(51), + 1532: uint8(32), + 1541: uint8(126), + 1542: uint8(102), + 1544: uint8(8), + 1545: uint8(16), + 1551: uint8(16), + 1558: uint8(157), + 1559: uint8(193), + 1560: uint8(2), + 1565: uint8(48), + 1566: uint8(64), + 1596: uint8(32), + 1597: uint8(33), + 1622: uint8(255), + 1623: uint8(255), + 1624: uint8(255), + 1625: uint8(255), + 1626: uint8(255), + 1627: uint8(255), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1635: uint8(64), + 1664: uint8(255), + 1665: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1695: uint8(128), + 1727: uint8(14), + 1759: uint8(32), + 1788: uint8(1), + 1806: uint8(192), + 1807: uint8(7), + 1824: uint8(110), + 1825: uint8(240), + 1831: uint8(135), + 1852: uint8(96), + 1860: uint8(240), + 1896: uint8(192), + 1897: uint8(255), + 1898: uint8(1), + 1920: uint8(2), + 1927: uint8(255), + 1928: uint8(127), + 1935: uint8(128), + 1936: uint8(3), + 1942: uint8(120), + 1943: uint8(38), + 1945: uint8(32), + 1952: uint8(7), + 1956: uint8(128), + 1957: uint8(239), + 1958: uint8(31), + 1966: uint8(8), + 1968: uint8(3), + 1974: uint8(192), + 1975: uint8(127), + 1977: uint8(30), + 1989: uint8(128), + 1990: uint8(211), + 1991: uint8(64), + 2011: uint8(128), + 2012: uint8(248), + 2013: uint8(7), + 2016: uint8(3), + 2023: uint8(24), + 2024: uint8(1), + 2028: uint8(192), + 2029: uint8(31), + 2030: uint8(31), + 2055: uint8(255), + 2056: uint8(92), + 2059: uint8(64), + 2070: uint8(248), + 2071: uint8(133), + 2072: uint8(13), + 2102: uint8(60), + 2103: uint8(176), + 2104: uint8(1), + 2107: uint8(48), + 2118: uint8(248), + 2119: uint8(167), + 2120: uint8(1), + 2133: uint8(40), + 2134: uint8(191), + 2147: uint8(224), + 2148: uint8(188), + 2149: uint8(15), + 2181: uint8(128), + 2182: uint8(255), + 2183: uint8(6), + 2234: uint8(240), + 2235: uint8(12), + 2236: uint8(1), + 2240: uint8(254), + 2241: uint8(7), + 2246: uint8(248), + 2247: uint8(121), + 2248: uint8(128), + 2250: uint8(126), + 2251: uint8(14), + 2257: uint8(252), + 2258: uint8(127), + 2259: uint8(3), + 2278: uint8(127), + 2279: uint8(191), + 2290: uint8(252), + 2291: uint8(255), + 2292: uint8(255), + 2293: uint8(252), + 2294: uint8(109), + 2310: uint8(126), + 2311: uint8(180), + 2312: uint8(191), + 2322: uint8(163), + 2366: uint8(24), + 2374: uint8(255), + 2375: uint8(1), + 2430: uint8(31), + 2438: uint8(127), + 2473: uint8(128), + 2481: uint8(128), + 2482: uint8(7), + 2515: uint8(96), + 2516: uint8(15), + 2540: uint8(128), + 2541: uint8(3), + 2542: uint8(248), + 2543: uint8(255), + 2544: uint8(231), + 2545: uint8(15), + 2549: uint8(60), + 2568: uint8(28), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2597: uint8(255), + 2598: uint8(127), + 2599: uint8(248), + 2600: uint8(255), + 2601: uint8(255), + 2602: uint8(255), + 2603: uint8(255), + 2604: uint8(255), + 2605: uint8(31), + 2606: uint8(32), + 2608: uint8(16), + 2611: uint8(248), + 2612: uint8(254), + 2613: uint8(255), + 2624: uint8(127), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(249), + 2628: uint8(219), + 2629: uint8(7), + 2662: uint8(127), + 2717: uint8(240), + 2746: uint8(127), + 2760: uint8(240), + 2761: uint8(7), +} + +var _wtable = [1600]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(16), + 4: uint8(16), + 5: uint8(16), + 6: uint8(16), + 7: uint8(16), + 8: uint8(16), + 9: uint8(16), + 10: uint8(16), + 11: uint8(16), + 12: uint8(16), + 13: uint8(16), + 14: uint8(16), + 15: uint8(16), + 16: uint8(16), + 17: uint8(18), + 18: uint8(16), + 19: uint8(16), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(16), + 24: uint8(16), + 25: uint8(16), + 26: uint8(16), + 27: uint8(16), + 28: uint8(16), + 29: uint8(16), + 30: uint8(16), + 31: uint8(16), + 32: uint8(16), + 33: uint8(16), + 34: uint8(16), + 35: uint8(19), + 36: uint8(16), + 37: uint8(20), + 38: uint8(21), + 39: uint8(22), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(23), + 44: uint8(16), + 45: uint8(16), + 46: uint8(24), + 47: uint8(25), + 48: uint8(26), + 49: uint8(27), + 50: uint8(28), + 51: uint8(17), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(29), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(17), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(30), + 165: uint8(16), + 166: uint8(16), + 167: uint8(16), + 168: uint8(16), + 169: uint8(31), + 170: uint8(16), + 171: uint8(16), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(32), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(17), + 251: uint8(16), + 252: uint8(16), + 253: uint8(16), + 254: uint8(33), + 255: uint8(34), + 256: uint8(16), + 257: uint8(16), + 258: uint8(16), + 259: uint8(16), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(16), + 267: uint8(16), + 268: uint8(16), + 269: uint8(16), + 270: uint8(16), + 271: uint8(16), + 272: uint8(16), + 273: uint8(16), + 274: uint8(16), + 275: uint8(16), + 276: uint8(16), + 277: uint8(16), + 278: uint8(16), + 279: uint8(16), + 280: uint8(16), + 281: uint8(16), + 282: uint8(16), + 283: uint8(16), + 284: uint8(16), + 285: uint8(16), + 286: uint8(16), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(16), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(16), + 363: uint8(16), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(35), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(36), + 392: uint8(17), + 393: uint8(17), + 394: uint8(37), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(38), + 434: uint8(39), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(16), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(16), + 482: uint8(16), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(16), + 489: uint8(16), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(40), + 497: uint8(41), + 498: uint8(42), + 499: uint8(43), + 500: uint8(44), + 501: uint8(45), + 502: uint8(46), + 503: uint8(47), + 504: uint8(16), + 505: uint8(48), + 506: uint8(49), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 611: uint8(12), + 613: uint8(6), + 637: uint8(30), + 638: uint8(9), + 671: uint8(96), + 674: uint8(48), + 681: uint8(255), + 682: uint8(15), + 687: uint8(128), + 690: uint8(8), + 692: uint8(2), + 693: uint8(12), + 695: uint8(96), + 696: uint8(48), + 697: uint8(64), + 698: uint8(16), + 701: uint8(4), + 702: uint8(44), + 703: uint8(36), + 704: uint8(32), + 705: uint8(12), + 709: uint8(1), + 713: uint8(80), + 714: uint8(184), + 722: uint8(224), + 726: uint8(1), + 727: uint8(128), + 739: uint8(24), + 746: uint8(33), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(251), + 788: uint8(255), + 789: uint8(255), + 790: uint8(255), + 791: uint8(255), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(255), + 798: uint8(15), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(255), + 804: uint8(255), + 805: uint8(255), + 806: uint8(255), + 807: uint8(255), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(255), + 812: uint8(255), + 813: uint8(255), + 814: uint8(255), + 815: uint8(255), + 816: uint8(255), + 817: uint8(255), + 818: uint8(255), + 819: uint8(255), + 820: uint8(255), + 821: uint8(255), + 822: uint8(255), + 823: uint8(255), + 824: uint8(255), + 825: uint8(255), + 826: uint8(63), + 830: uint8(255), + 831: uint8(15), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(127), + 840: uint8(254), + 841: uint8(255), + 842: uint8(255), + 843: uint8(255), + 844: uint8(255), + 845: uint8(255), + 846: uint8(255), + 847: uint8(255), + 848: uint8(255), + 849: uint8(255), + 850: uint8(127), + 851: uint8(254), + 852: uint8(255), + 853: uint8(255), + 854: uint8(255), + 855: uint8(255), + 856: uint8(255), + 857: uint8(255), + 858: uint8(255), + 859: uint8(255), + 860: uint8(255), + 861: uint8(255), + 862: uint8(255), + 863: uint8(255), + 864: uint8(224), + 865: uint8(255), + 866: uint8(255), + 867: uint8(255), + 868: uint8(255), + 869: uint8(255), + 870: uint8(254), + 871: uint8(255), + 872: uint8(255), + 873: uint8(255), + 874: uint8(255), + 875: uint8(255), + 876: uint8(255), + 877: uint8(255), + 878: uint8(255), + 879: uint8(255), + 880: uint8(255), + 881: uint8(127), + 882: uint8(255), + 883: uint8(255), + 884: uint8(255), + 885: uint8(255), + 886: uint8(255), + 887: uint8(7), + 888: uint8(255), + 889: uint8(255), + 890: uint8(255), + 891: uint8(255), + 892: uint8(15), + 894: uint8(255), + 895: uint8(255), + 896: uint8(255), + 897: uint8(255), + 898: uint8(255), + 899: uint8(127), + 900: uint8(255), + 901: uint8(255), + 902: uint8(255), + 903: uint8(255), + 904: uint8(255), + 906: uint8(255), + 907: uint8(255), + 908: uint8(255), + 909: uint8(255), + 910: uint8(255), + 911: uint8(255), + 912: uint8(255), + 913: uint8(255), + 914: uint8(255), + 915: uint8(255), + 916: uint8(255), + 917: uint8(255), + 918: uint8(255), + 919: uint8(255), + 920: uint8(255), + 921: uint8(255), + 922: uint8(255), + 923: uint8(255), + 924: uint8(255), + 925: uint8(255), + 926: uint8(255), + 927: uint8(255), + 928: uint8(255), + 929: uint8(255), + 930: uint8(255), + 931: uint8(255), + 932: uint8(255), + 933: uint8(255), + 934: uint8(255), + 935: uint8(255), + 936: uint8(255), + 937: uint8(255), + 938: uint8(255), + 939: uint8(255), + 940: uint8(255), + 941: uint8(255), + 942: uint8(255), + 943: uint8(255), + 944: uint8(255), + 945: uint8(255), + 946: uint8(255), + 947: uint8(255), + 948: uint8(255), + 949: uint8(255), + 950: uint8(255), + 951: uint8(255), + 960: uint8(255), + 961: uint8(255), + 962: uint8(255), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(255), + 968: uint8(255), + 969: uint8(255), + 970: uint8(255), + 971: uint8(255), + 972: uint8(255), + 973: uint8(255), + 974: uint8(255), + 975: uint8(255), + 976: uint8(255), + 977: uint8(31), + 978: uint8(255), + 979: uint8(255), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(255), + 984: uint8(127), + 1004: uint8(255), + 1005: uint8(255), + 1006: uint8(255), + 1007: uint8(31), + 1024: uint8(255), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1028: uint8(255), + 1029: uint8(255), + 1030: uint8(255), + 1031: uint8(255), + 1032: uint8(255), + 1033: uint8(255), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(15), + 1058: uint8(255), + 1059: uint8(3), + 1062: uint8(255), + 1063: uint8(255), + 1064: uint8(255), + 1065: uint8(255), + 1066: uint8(247), + 1067: uint8(255), + 1068: uint8(127), + 1069: uint8(15), + 1088: uint8(254), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(255), + 1098: uint8(255), + 1099: uint8(255), + 1100: uint8(1), + 1116: uint8(127), + 1148: uint8(15), + 1152: uint8(255), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(255), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(255), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(255), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(255), + 1214: uint8(7), + 1216: uint8(255), + 1217: uint8(255), + 1218: uint8(255), + 1219: uint8(127), + 1226: uint8(7), + 1228: uint8(240), + 1230: uint8(255), + 1231: uint8(255), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(255), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(255), + 1242: uint8(255), + 1243: uint8(255), + 1244: uint8(255), + 1245: uint8(255), + 1246: uint8(255), + 1247: uint8(255), + 1248: uint8(255), + 1249: uint8(255), + 1250: uint8(255), + 1251: uint8(255), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(255), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(255), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(15), + 1280: uint8(16), + 1305: uint8(128), + 1329: uint8(64), + 1330: uint8(254), + 1331: uint8(7), + 1344: uint8(7), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(255), + 1351: uint8(15), + 1352: uint8(255), + 1353: uint8(1), + 1354: uint8(3), + 1356: uint8(63), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(1), + 1381: uint8(224), + 1382: uint8(191), + 1383: uint8(255), + 1384: uint8(255), + 1385: uint8(255), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(223), + 1392: uint8(255), + 1393: uint8(255), + 1394: uint8(15), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(255), + 1400: uint8(255), + 1401: uint8(135), + 1402: uint8(15), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(17), + 1407: uint8(255), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(127), + 1416: uint8(253), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1432: uint8(255), + 1433: uint8(255), + 1434: uint8(255), + 1435: uint8(255), + 1436: uint8(255), + 1437: uint8(255), + 1438: uint8(255), + 1439: uint8(159), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(63), + 1449: uint8(120), + 1450: uint8(255), + 1451: uint8(255), + 1452: uint8(255), + 1455: uint8(4), + 1458: uint8(96), + 1460: uint8(16), + 1471: uint8(248), + 1472: uint8(255), + 1473: uint8(255), + 1474: uint8(255), + 1475: uint8(255), + 1476: uint8(255), + 1477: uint8(255), + 1478: uint8(255), + 1479: uint8(255), + 1480: uint8(255), + 1481: uint8(255), + 1488: uint8(255), + 1489: uint8(255), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(63), + 1497: uint8(16), + 1498: uint8(39), + 1501: uint8(24), + 1502: uint8(240), + 1503: uint8(7), + 1532: uint8(255), + 1533: uint8(15), + 1537: uint8(224), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(123), + 1551: uint8(252), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(255), + 1555: uint8(255), + 1556: uint8(231), + 1557: uint8(199), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(231), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1582: uint8(15), + 1583: uint8(7), + 1584: uint8(7), + 1586: uint8(63), +} + +func Xwcwidth(tls *TLS, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 int32 + _, _ = v1, v2 + if wc < uint32(0xff) { + if (wc+uint32(1))&uint32(0x7f) >= uint32(0x21) { + v1 = int32(1) + } else { + if wc != 0 { + v2 = -int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 + } + if wc&uint32(0xfffeffff) < uint32(0xfffe) { + if int32(_table5[uint32(int32(_table5[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)])>>(wc&uint32(7))&int32(1) != 0 { + return 0 + } + if int32(_wtable[uint32(int32(_wtable[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)])>>(wc&uint32(7))&int32(1) != 0 { + return int32(2) + } + return int32(1) + } + if wc&uint32(0xfffe) == uint32(0xfffe) { + return -int32(1) + } + if wc-uint32(0x20000) < uint32(0x20000) { + return int32(2) + } + if wc == uint32(0xe0001) || wc-uint32(0xe0020) < uint32(0x5f) || wc-uint32(0xe0100) < uint32(0xef) { + return 0 + } + return int32(1) +} + +const d_fileno = 0 + +type Tino_t = uint64 + +type Tdirent = struct { + F__ccgo_align [0]uint32 + Fd_ino Tino_t + Fd_off Toff_t + Fd_reclen uint16 + Fd_type uint8 + Fd_name [256]uint8 + F__ccgo_pad5 [5]byte +} + +func Xalphasort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrcoll(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +type TDIR = struct { + F__ccgo_align [0]uint32 + Ftell Toff_t + Ffd int32 + Fbuf_pos int32 + Fbuf_end int32 + Flock [1]int32 + Fbuf [2048]uint8 +} + +type t__dirstream = TDIR + +func Xclosedir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = Xclose(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd) + Xfree(tls, dir) + return ret +} + +func Xdirfd(tls *TLS, d uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(d)).Ffd +} + +const AT_EACCESS = 512 +const AT_FDCWD = -100 +const AT_REMOVEDIR = 512 +const AT_SYMLINK_FOLLOW = 1024 +const AT_SYMLINK_NOFOLLOW = 256 +const FD_CLOEXEC = 1 +const F_DUPFD = 0 +const F_DUPFD_CLOEXEC = 1030 +const F_GETFD = 1 +const F_GETFL = 3 +const F_GETLK = 12 +const F_GETOWN = 9 +const F_GETOWNER_UIDS = 17 +const F_GETOWN_EX = 16 +const F_GETSIG = 11 +const F_OFD_GETLK = 36 +const F_OFD_SETLK = 37 +const F_OFD_SETLKW = 38 +const F_RDLCK = 0 +const F_SETFD = 2 +const F_SETFL = 4 +const F_SETLK = 13 +const F_SETLKW = 14 +const F_SETOWN = 8 +const F_SETOWN_EX = 15 +const F_SETSIG = 10 +const F_UNLCK = 2 +const F_WRLCK = 1 +const O_ACCMODE = 2097155 +const O_APPEND = 1024 +const O_ASYNC = 8192 +const O_CLOEXEC = 524288 +const O_CREAT = 64 +const O_DIRECT = 65536 +const O_DIRECTORY = 16384 +const O_DSYNC = 4096 +const O_EXCL = 128 +const O_EXEC = 2097152 +const O_LARGEFILE = 131072 +const O_NDELAY = 2048 +const O_NOATIME = 262144 +const O_NOCTTY = 256 +const O_NOFOLLOW = 32768 +const O_NONBLOCK = 2048 +const O_PATH = 2097152 +const O_RDONLY = 0 +const O_RDWR = 2 +const O_RSYNC = 1052672 +const O_SEARCH = 2097152 +const O_SYNC = 1052672 +const O_TMPFILE = 4210688 +const O_TRUNC = 512 +const O_TTY_INIT = 0 +const O_WRONLY = 1 +const POSIX_FADV_DONTNEED = 4 +const POSIX_FADV_NOREUSE = 5 +const POSIX_FADV_NORMAL = 0 +const POSIX_FADV_RANDOM = 1 +const POSIX_FADV_SEQUENTIAL = 2 +const POSIX_FADV_WILLNEED = 3 +const S_IFBLK = 24576 +const S_IFCHR = 8192 +const S_IFDIR = 16384 +const S_IFIFO = 4096 +const S_IFLNK = 40960 +const S_IFMT = 61440 +const S_IFREG = 32768 +const S_IFSOCK = 49152 +const S_IRGRP = 32 +const S_IROTH = 4 +const S_IRUSR = 256 +const S_IRWXG = 56 +const S_IRWXO = 7 +const S_IRWXU = 448 +const S_ISGID = 1024 +const S_ISUID = 2048 +const S_ISVTX = 512 +const S_IWGRP = 16 +const S_IWOTH = 2 +const S_IWUSR = 128 +const S_IXGRP = 8 +const S_IXOTH = 1 +const S_IXUSR = 64 +const UTIME_NOW = 1073741823 +const UTIME_OMIT = 1073741822 + +type Tflock = struct { + F__ccgo_align [0]uint32 + Fl_type int16 + Fl_whence int16 + F__ccgo_align2 [4]byte + Fl_start Toff_t + Fl_len Toff_t + Fl_pid Tpid_t + F__ccgo_pad5 [4]byte +} + +type Tnlink_t = uint32 + +type Tdev_t = uint64 + +type Tblksize_t = int32 + +type Tblkcnt_t = int64 + +type Tstat = struct { + F__ccgo_align [0]uint32 + Fst_dev Tdev_t + F__st_dev_padding int32 + F__st_ino_truncated int32 + Fst_mode Tmode_t + Fst_nlink Tnlink_t + Fst_uid Tuid_t + Fst_gid Tgid_t + Fst_rdev Tdev_t + F__st_rdev_padding int32 + F__ccgo_align9 [4]byte + Fst_size Toff_t + Fst_blksize Tblksize_t + F__ccgo_align11 [4]byte + Fst_blocks Tblkcnt_t + F__st_atim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + F__st_mtim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + F__st_ctim32 struct { + Ftv_sec int32 + Ftv_nsec int32 + } + Fst_ino Tino_t + Fst_atim Ttimespec + Fst_mtim Ttimespec + Fst_ctim Ttimespec +} + +func Xfdopendir(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(176) + defer tls.Free(176) + var dir, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _ = dir, v1 + if Xfstat(tls, fd, bp) < 0 { + return uintptr(0) + } + if Xfcntl(tls, fd, int32(F_GETFL), 0)&int32(O_PATH) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return uintptr(0) + } + if !((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&Uint32FromInt32(S_IFMT) == Uint32FromInt32(S_IFDIR)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTDIR) + return uintptr(0) + } + v1 = Xcalloc(tls, uint32(1), uint32(2072)) + dir = v1 + if !(v1 != 0) { + return uintptr(0) + } + Xfcntl(tls, fd, int32(F_SETFD), VaList(bp+160, int32(FD_CLOEXEC))) + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +const AT_EMPTY_PATH = 4096 +const AT_NO_AUTOMOUNT = 2048 +const AT_RECURSIVE = 32768 +const AT_STATX_DONT_SYNC = 16384 +const AT_STATX_FORCE_SYNC = 8192 +const AT_STATX_SYNC_AS_STAT = 0 +const AT_STATX_SYNC_TYPE = 24576 +const DN_ACCESS = 1 +const DN_ATTRIB = 32 +const DN_CREATE = 4 +const DN_DELETE = 8 +const DN_MODIFY = 2 +const DN_MULTISHOT = 2147483648 +const DN_RENAME = 16 +const DT_BLK = 6 +const DT_CHR = 2 +const DT_DIR = 4 +const DT_FIFO = 1 +const DT_LNK = 10 +const DT_REG = 8 +const DT_SOCK = 12 +const DT_UNKNOWN = 0 +const DT_WHT = 14 +const FALLOC_FL_KEEP_SIZE = 1 +const FALLOC_FL_PUNCH_HOLE = 2 +const FAPPEND = 1024 +const FASYNC = 8192 +const FFSYNC = 1052672 +const FNDELAY = 2048 +const FNONBLOCK = 2048 +const F_ADD_SEALS = 1033 +const F_CANCELLK = 1029 +const F_GETLEASE = 1025 +const F_GETPIPE_SZ = 1032 +const F_GET_FILE_RW_HINT = 1037 +const F_GET_RW_HINT = 1035 +const F_GET_SEALS = 1034 +const F_NOTIFY = 1026 +const F_OWNER_GID = 2 +const F_OWNER_PGRP = 2 +const F_OWNER_PID = 1 +const F_OWNER_TID = 0 +const F_SEAL_FUTURE_WRITE = 16 +const F_SEAL_GROW = 4 +const F_SEAL_SEAL = 1 +const F_SEAL_SHRINK = 2 +const F_SEAL_WRITE = 8 +const F_SETLEASE = 1024 +const F_SETPIPE_SZ = 1031 +const F_SET_FILE_RW_HINT = 1038 +const F_SET_RW_HINT = 1036 +const MAX_HANDLE_SZ = 128 +const RWF_WRITE_LIFE_NOT_SET = 0 +const RWH_WRITE_LIFE_EXTREME = 5 +const RWH_WRITE_LIFE_LONG = 4 +const RWH_WRITE_LIFE_MEDIUM = 3 +const RWH_WRITE_LIFE_NONE = 1 +const RWH_WRITE_LIFE_SHORT = 2 +const SPLICE_F_GIFT = 8 +const SPLICE_F_MORE = 4 +const SPLICE_F_MOVE = 1 +const SPLICE_F_NONBLOCK = 2 +const SYNC_FILE_RANGE_WAIT_AFTER = 4 +const SYNC_FILE_RANGE_WAIT_BEFORE = 1 +const SYNC_FILE_RANGE_WRITE = 2 +const alloca = 0 +const loff_t = 0 + +type Tiovec = struct { + Fiov_base uintptr + Fiov_len Tsize_t +} + +type Tfile_handle = struct { + Fhandle_bytes uint32 + Fhandle_type int32 +} + +type Tf_owner_ex = struct { + Ftype1 int32 + Fpid Tpid_t +} + +func Xopendir(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dir, v2 uintptr + var fd, v1 int32 + _, _, _, _ = dir, fd, v1, v2 + v1 = Xopen(tls, name, Int32FromInt32(O_RDONLY)|Int32FromInt32(O_DIRECTORY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + v2 = Xcalloc(tls, uint32(1), uint32(2072)) + dir = v2 + if !(v2 != 0) { + X__syscall1(tls, int32(SYS_close), fd) + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +type Tptrdiff_t = int32 + +type Tdirstream_buf_alignment_check = [1]uint8 + +func Xreaddir(tls *TLS, dir uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var len1 int32 + _, _ = de, len1 + if (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos >= (*TDIR)(unsafe.Pointer(dir)).Fbuf_end { + len1 = int32(X__syscall3(tls, int32(SYS_getdents64), (*TDIR)(unsafe.Pointer(dir)).Ffd, int32(dir+24), int32(Uint32FromInt64(2048)))) + if len1 <= 0 { + if len1 < 0 && len1 != -int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = -len1 + } + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = len1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = 0 + } + de = dir + 24 + uintptr((*TDIR)(unsafe.Pointer(dir)).Fbuf_pos) + *(*int32)(unsafe.Pointer(dir + 12)) += int32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen) + (*TDIR)(unsafe.Pointer(dir)).Ftell = (*Tdirent)(unsafe.Pointer(de)).Fd_off + return de +} + +func Xreaddir_r(tls *TLS, dir uintptr, buf uintptr, result uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v buf=%v result=%v, (%v:)", tls, dir, buf, result, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var errno_save, ret, v1 int32 + _, _, _, _ = de, errno_save, ret, v1 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ___lock(tls, dir+20) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + de = Xreaddir(tls, dir) + v1 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ret = v1 + if v1 != 0 { + ___unlock(tls, dir+20) + return ret + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + if de != 0 { + _memcpy(tls, buf, de, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } else { + buf = UintptrFromInt32(0) + } + ___unlock(tls, dir+20) + *(*uintptr)(unsafe.Pointer(result)) = buf + return 0 +} + +func Xrewinddir(tls *TLS, dir uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, 0, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + (*TDIR)(unsafe.Pointer(dir)).Ftell = 0 + ___unlock(tls, dir+20) +} + +func Xscandir(tls *TLS, path uintptr, res uintptr, sel uintptr, cmp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v res=%v sel=%v cmp=%v, (%v:)", tls, path, res, sel, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cnt, len1, v2, v3 Tsize_t + var d, de, names, tmp, v1 uintptr + var old_errno int32 + _, _, _, _, _, _, _, _, _, _ = cnt, d, de, len1, names, old_errno, tmp, v1, v2, v3 + d = Xopendir(tls, path) + names = uintptr(0) + cnt = uint32(0) + len1 = uint32(0) + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if !(d != 0) { + return -int32(1) + } + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v1 = Xreaddir(tls, d) + de = v1 + if !(v1 != 0) { + break + } + if sel != 0 && !((*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{sel})))(tls, de) != 0) { + continue + } + if cnt >= len1 { + len1 = uint32(2)*len1 + uint32(1) + if len1 > Uint32FromUint32(0xffffffff)/Uint32FromInt64(4) { + break + } + tmp = Xrealloc(tls, names, len1*uint32(4)) + if !(tmp != 0) { + break + } + names = tmp + } + *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4)) = Xmalloc(tls, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + if !(*(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4)) != 0) { + break + } + v2 = cnt + cnt++ + _memcpy(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(v2)*4)), de, uint32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } + Xclosedir(tls, d) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != 0 { + if names != 0 { + for { + v3 = cnt + cnt-- + if !(v3 > uint32(0)) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*4))) + } + } + Xfree(tls, names) + return -int32(1) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if cmp != 0 { + Xqsort(tls, names, cnt, uint32(4), cmp) + } + *(*uintptr)(unsafe.Pointer(res)) = names + return int32(cnt) +} + +func Xseekdir(tls *TLS, dir uintptr, off int32) { + if __ccgo_strace { + trc("tls=%v dir=%v off=%v, (%v:)", tls, dir, off, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + (*TDIR)(unsafe.Pointer(dir)).Ftell = Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, int64(off), SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + ___unlock(tls, dir+20) +} + +func Xtelldir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32((*TDIR)(unsafe.Pointer(dir)).Ftell) +} + +func Xversionsort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrverscmp(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +func X__reset_tls(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var i, n Tsize_t + var mem, p uintptr + var self Tpthread_t + _, _, _, _, _ = i, mem, n, p, self + self = uintptr(___get_tp(tls)) + n = *(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv)) + if n != 0 { + p = X__libc.Ftls_head + i = Uint32FromInt32(1) + for { + if !(i <= n) { + break + } + mem = uintptr(*(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv + uintptr(i)*4)) - Uint32FromInt32(DTP_OFFSET)) + _memcpy(tls, mem, (*Ttls_module)(unsafe.Pointer(p)).Fimage, (*Ttls_module)(unsafe.Pointer(p)).Flen1) + Xmemset(tls, mem+uintptr((*Ttls_module)(unsafe.Pointer(p)).Flen1), 0, (*Ttls_module)(unsafe.Pointer(p)).Fsize-(*Ttls_module)(unsafe.Pointer(p)).Flen1) + goto _1 + _1: + ; + i++ + p = (*Ttls_module)(unsafe.Pointer(p)).Fnext + } + } +} + +func X__init_ssp(tls *TLS, entropy uintptr) { + if __ccgo_strace { + trc("tls=%v entropy=%v, (%v:)", tls, entropy, origin(2)) + } + if entropy != 0 { + _memcpy(tls, uintptr(unsafe.Pointer(&X__stack_chk_guard)), entropy, uint32(4)) + } else { + X__stack_chk_guard = Tuintptr_t(uintptr(unsafe.Pointer(&X__stack_chk_guard))) * uint32(1103515245) + } + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fcanary = X__stack_chk_guard +} + +func X__stack_chk_fail(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _a_crash(tls) +} + +func X__stack_chk_fail_local(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stack_chk_fail(tls) +} + +const L_INCR = 1 +const L_SET = 0 +const L_XTND = 2 + +func _dummy(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xclearenv(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, v1 uintptr + _, _ = e, v1 + e = Xenviron + Xenviron = uintptr(0) + if e != 0 { + for *(*uintptr)(unsafe.Pointer(e)) != 0 { + v1 = e + e += 4 + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(v1)), uintptr(0)) + } + } + return 0 +} + +func Xgetenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e uintptr + var l Tsize_t + _, _ = e, l + l = uint32(int32(X__strchrnul(tls, name, int32('='))) - int32(name)) + if l != 0 && !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) && Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + return *(*uintptr)(unsafe.Pointer(e)) + uintptr(l) + uintptr(1) + } + goto _1 + _1: + ; + e += 4 + } + } + return uintptr(0) +} + +func _dummy1(tls *TLS, old uintptr, new1 uintptr) { +} + +func X__putenv(tls *TLS, s uintptr, l Tsize_t, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var e, newenv, tmp, v2 uintptr + var i Tsize_t + _, _, _, _, _ = e, i, newenv, tmp, v2 + i = uint32(0) + if Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint32(1)) != 0) { + tmp = *(*uintptr)(unsafe.Pointer(e)) + *(*uintptr)(unsafe.Pointer(e)) = s + X__env_rm_add(tls, tmp, r) + return 0 + } + goto _1 + _1: + ; + e += 4 + i++ + } + } + if Xenviron == _oldenv { + newenv = Xrealloc(tls, _oldenv, uint32(4)*(i+uint32(2))) + if !(newenv != 0) { + goto oom + } + } else { + newenv = Xmalloc(tls, uint32(4)*(i+uint32(2))) + if !(newenv != 0) { + goto oom + } + if i != 0 { + _memcpy(tls, newenv, Xenviron, uint32(4)*i) + } + Xfree(tls, _oldenv) + } + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*4)) = s + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint32(1))*4)) = uintptr(0) + v2 = newenv + _oldenv = v2 + Xenviron = v2 + if r != 0 { + X__env_rm_add(tls, uintptr(0), r) + } + return 0 + goto oom +oom: + ; + Xfree(tls, r) + return -int32(1) +} + +var _oldenv uintptr + +func Xputenv(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = uint32(int32(X__strchrnul(tls, s, int32('='))) - int32(s)) + if !(l != 0) || !(*(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0) { + return Xunsetenv(tls, s) + } + return X__putenv(tls, s, l, uintptr(0)) +} + +const L_cuserid = 20 +const NL_NMAX = 16 + +type Tcookie_io_functions_t = struct { + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fclose1 uintptr +} + +type T_IO_cookie_io_functions_t = Tcookie_io_functions_t + +func Xsecure_getenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if X__libc.Fsecure != 0 { + v1 = UintptrFromInt32(0) + } else { + v1 = Xgetenv(tls, name) + } + return v1 +} + +func X__env_rm_add(tls *TLS, old uintptr, new1 uintptr) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + } + var i, v3 Tsize_t + var t, v2 uintptr + _, _, _, _ = i, t, v2, v3 + i = uint32(0) + for { + if !(i < _env_alloced_n) { + break + } + if *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) == old { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) = new1 + Xfree(tls, old) + return + } else { + if !(*(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) != 0) && new1 != 0 { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*4)) = new1 + new1 = uintptr(0) + } + } + goto _1 + _1: + ; + i++ + } + if !(new1 != 0) { + return + } + t = Xrealloc(tls, _env_alloced, uint32(4)*(_env_alloced_n+uint32(1))) + if !(t != 0) { + return + } + v2 = t + _env_alloced = v2 + v3 = _env_alloced_n + _env_alloced_n++ + *(*uintptr)(unsafe.Pointer(v2 + uintptr(v3)*4)) = new1 +} + +var _env_alloced uintptr + +var _env_alloced_n Tsize_t + +func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) (r int32) { + if __ccgo_strace { + trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l1, l2, v1 Tsize_t + var s uintptr + var v2 bool + _, _, _, _, _ = l1, l2, s, v1, v2 + if v2 = !(var1 != 0); !v2 { + v1 = uint32(int32(X__strchrnul(tls, var1, int32('='))) - int32(var1)) + l1 = v1 + } + if v2 || !(v1 != 0) || *(*uint8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { + return 0 + } + l2 = Xstrlen(tls, value) + s = Xmalloc(tls, l1+l2+uint32(2)) + if !(s != 0) { + return -int32(1) + } + _memcpy(tls, s, var1, l1) + *(*uint8)(unsafe.Pointer(s + uintptr(l1))) = uint8('=') + _memcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint32(1)) + return X__putenv(tls, s, l1, s) +} + +func _dummy2(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xunsetenv(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, eo, v2 uintptr + var l Tsize_t + _, _, _, _ = e, eo, l, v2 + l = uint32(int32(X__strchrnul(tls, name, int32('='))) - int32(name)) + if !(l != 0) || *(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if Xenviron != 0 { + e = Xenviron + eo = e + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) + } else { + if eo != e { + v2 = eo + eo += 4 + *(*uintptr)(unsafe.Pointer(v2)) = *(*uintptr)(unsafe.Pointer(e)) + } else { + eo += 4 + } + } + goto _1 + _1: + ; + e += 4 + } + if eo != e { + *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) + } + } + return 0 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +type Terrmsgstr_t = struct { + Fstr0 [21]uint8 + FstrEILSEQ [22]uint8 + FstrEDOM [13]uint8 + FstrERANGE [25]uint8 + FstrENOTTY [10]uint8 + FstrEACCES [18]uint8 + FstrEPERM [24]uint8 + FstrENOENT [26]uint8 + FstrESRCH [16]uint8 + FstrEEXIST [12]uint8 + FstrEOVERFLOW [30]uint8 + FstrENOSPC [24]uint8 + FstrENOMEM [14]uint8 + FstrEBUSY [14]uint8 + FstrEINTR [24]uint8 + FstrEAGAIN [33]uint8 + FstrESPIPE [13]uint8 + FstrEXDEV [18]uint8 + FstrEROFS [22]uint8 + FstrENOTEMPTY [20]uint8 + FstrECONNRESET [25]uint8 + FstrETIMEDOUT [20]uint8 + FstrECONNREFUSED [19]uint8 + FstrEHOSTDOWN [13]uint8 + FstrEHOSTUNREACH [20]uint8 + FstrEADDRINUSE [15]uint8 + FstrEPIPE [12]uint8 + FstrEIO [10]uint8 + FstrENXIO [26]uint8 + FstrENOTBLK [22]uint8 + FstrENODEV [15]uint8 + FstrENOTDIR [16]uint8 + FstrEISDIR [15]uint8 + FstrETXTBSY [15]uint8 + FstrENOEXEC [18]uint8 + FstrEINVAL [17]uint8 + FstrE2BIG [23]uint8 + FstrELOOP [19]uint8 + FstrENAMETOOLONG [18]uint8 + FstrENFILE [30]uint8 + FstrEMFILE [30]uint8 + FstrEBADF [20]uint8 + FstrECHILD [17]uint8 + FstrEFAULT [12]uint8 + FstrEFBIG [15]uint8 + FstrEMLINK [15]uint8 + FstrENOLCK [19]uint8 + FstrEDEADLK [30]uint8 + FstrENOTRECOVERABLE [22]uint8 + FstrEOWNERDEAD [20]uint8 + FstrECANCELED [19]uint8 + FstrENOSYS [25]uint8 + FstrENOMSG [27]uint8 + FstrEIDRM [19]uint8 + FstrENOSTR [20]uint8 + FstrENODATA [18]uint8 + FstrETIME [15]uint8 + FstrENOSR [25]uint8 + FstrENOLINK [22]uint8 + FstrEPROTO [15]uint8 + FstrEBADMSG [12]uint8 + FstrEBADFD [29]uint8 + FstrENOTSOCK [13]uint8 + FstrEDESTADDRREQ [29]uint8 + FstrEMSGSIZE [18]uint8 + FstrEPROTOTYPE [31]uint8 + FstrENOPROTOOPT [23]uint8 + FstrEPROTONOSUPPORT [23]uint8 + FstrESOCKTNOSUPPORT [26]uint8 + FstrENOTSUP [14]uint8 + FstrEPFNOSUPPORT [30]uint8 + FstrEAFNOSUPPORT [41]uint8 + FstrEADDRNOTAVAIL [22]uint8 + FstrENETDOWN [16]uint8 + FstrENETUNREACH [20]uint8 + FstrENETRESET [28]uint8 + FstrECONNABORTED [19]uint8 + FstrENOBUFS [26]uint8 + FstrEISCONN [20]uint8 + FstrENOTCONN [21]uint8 + FstrESHUTDOWN [34]uint8 + FstrEALREADY [30]uint8 + FstrEINPROGRESS [22]uint8 + FstrESTALE [18]uint8 + FstrEREMOTEIO [17]uint8 + FstrEDQUOT [15]uint8 + FstrENOMEDIUM [16]uint8 + FstrEMEDIUMTYPE [18]uint8 + FstrEMULTIHOP [19]uint8 + FstrENOKEY [27]uint8 + FstrEKEYEXPIRED [16]uint8 + FstrEKEYREVOKED [21]uint8 + FstrEKEYREJECTED [28]uint8 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +var _errmsgstr = Terrmsgstr_t{ + Fstr0: [21]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', ' ', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n'}, + FstrEILSEQ: [22]uint8{'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'b', 'y', 't', 'e', ' ', 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e'}, + FstrEDOM: [13]uint8{'D', 'o', 'm', 'a', 'i', 'n', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrERANGE: [25]uint8{'R', 'e', 's', 'u', 'l', 't', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a', 'b', 'l', 'e'}, + FstrENOTTY: [10]uint8{'N', 'o', 't', ' ', 'a', ' ', 't', 't', 'y'}, + FstrEACCES: [18]uint8{'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', ' ', 'd', 'e', 'n', 'i', 'e', 'd'}, + FstrEPERM: [24]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'e', 'r', 'm', 'i', 't', 't', 'e', 'd'}, + FstrENOENT: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'f', 'i', 'l', 'e', ' ', 'o', 'r', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrESRCH: [16]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEEXIST: [12]uint8{'F', 'i', 'l', 'e', ' ', 'e', 'x', 'i', 's', 't', 's'}, + FstrEOVERFLOW: [30]uint8{'V', 'a', 'l', 'u', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'a', 't', 'a', ' ', 't', 'y', 'p', 'e'}, + FstrENOSPC: [24]uint8{'N', 'o', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'l', 'e', 'f', 't', ' ', 'o', 'n', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOMEM: [14]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y'}, + FstrEBUSY: [14]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrEINTR: [24]uint8{'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 'e', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l'}, + FstrEAGAIN: [33]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 't', 'e', 'm', 'p', 'o', 'r', 'a', 'r', 'i', 'l', 'y', ' ', 'u', 'n', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrESPIPE: [13]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 's', 'e', 'e', 'k'}, + FstrEXDEV: [18]uint8{'C', 'r', 'o', 's', 's', '-', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'l', 'i', 'n', 'k'}, + FstrEROFS: [22]uint8{'R', 'e', 'a', 'd', '-', 'o', 'n', 'l', 'y', ' ', 'f', 'i', 'l', 'e', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrENOTEMPTY: [20]uint8{'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'n', 'o', 't', ' ', 'e', 'm', 'p', 't', 'y'}, + FstrECONNRESET: [25]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'p', 'e', 'e', 'r'}, + FstrETIMEDOUT: [20]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 't', 'i', 'm', 'e', 'd', ' ', 'o', 'u', 't'}, + FstrECONNREFUSED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 'f', 'u', 's', 'e', 'd'}, + FstrEHOSTDOWN: [13]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrEHOSTUNREACH: [20]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrEADDRINUSE: [15]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'i', 'n', ' ', 'u', 's', 'e'}, + FstrEPIPE: [12]uint8{'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e'}, + FstrEIO: [10]uint8{'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrENXIO: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'o', 'r', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrENOTBLK: [22]uint8{'B', 'l', 'o', 'c', 'k', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrENODEV: [15]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOTDIR: [16]uint8{'N', 'o', 't', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrEISDIR: [15]uint8{'I', 's', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrETXTBSY: [15]uint8{'T', 'e', 'x', 't', ' ', 'f', 'i', 'l', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrENOEXEC: [18]uint8{'E', 'x', 'e', 'c', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEINVAL: [17]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'a', 'r', 'g', 'u', 'm', 'e', 'n', 't'}, + FstrE2BIG: [23]uint8{'A', 'r', 'g', 'u', 'm', 'e', 'n', 't', ' ', 'l', 'i', 's', 't', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrELOOP: [19]uint8{'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', ' ', 'l', 'i', 'n', 'k', ' ', 'l', 'o', 'o', 'p'}, + FstrENAMETOOLONG: [18]uint8{'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrENFILE: [30]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'o', 'p', 'e', 'n', ' ', 'f', 'i', 'l', 'e', 's', ' ', 'i', 'n', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrEMFILE: [30]uint8{'N', 'o', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEBADF: [20]uint8{'B', 'a', 'd', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r'}, + FstrECHILD: [17]uint8{'N', 'o', ' ', 'c', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEFAULT: [12]uint8{'B', 'a', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrEFBIG: [15]uint8{'F', 'i', 'l', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEMLINK: [15]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'l', 'i', 'n', 'k', 's'}, + FstrENOLCK: [19]uint8{'N', 'o', ' ', 'l', 'o', 'c', 'k', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEDEADLK: [30]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'd', 'e', 'a', 'd', 'l', 'o', 'c', 'k', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'o', 'c', 'c', 'u', 'r'}, + FstrENOTRECOVERABLE: [22]uint8{'S', 't', 'a', 't', 'e', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e'}, + FstrEOWNERDEAD: [20]uint8{'P', 'r', 'e', 'v', 'i', 'o', 'u', 's', ' ', 'o', 'w', 'n', 'e', 'r', ' ', 'd', 'i', 'e', 'd'}, + FstrECANCELED: [19]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'c', 'a', 'n', 'c', 'e', 'l', 'e', 'd'}, + FstrENOSYS: [25]uint8{'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'i', 'm', 'p', 'l', 'e', 'm', 'e', 'n', 't', 'e', 'd'}, + FstrENOMSG: [27]uint8{'N', 'o', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 'o', 'f', ' ', 'd', 'e', 's', 'i', 'r', 'e', 'd', ' ', 't', 'y', 'p', 'e'}, + FstrEIDRM: [19]uint8{'I', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd'}, + FstrENOSTR: [20]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 'n', 'o', 't', ' ', 'a', ' ', 's', 't', 'r', 'e', 'a', 'm'}, + FstrENODATA: [18]uint8{'N', 'o', ' ', 'd', 'a', 't', 'a', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrETIME: [15]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 't', 'i', 'm', 'e', 'o', 'u', 't'}, + FstrENOSR: [25]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 's', 't', 'r', 'e', 'a', 'm', 's', ' ', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's'}, + FstrENOLINK: [22]uint8{'L', 'i', 'n', 'k', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 's', 'e', 'v', 'e', 'r', 'e', 'd'}, + FstrEPROTO: [15]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEBADMSG: [12]uint8{'B', 'a', 'd', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'}, + FstrEBADFD: [29]uint8{'F', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', ' ', 'i', 'n', ' ', 'b', 'a', 'd', ' ', 's', 't', 'a', 't', 'e'}, + FstrENOTSOCK: [13]uint8{'N', 'o', 't', ' ', 'a', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrEDESTADDRREQ: [29]uint8{'D', 'e', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrEMSGSIZE: [18]uint8{'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEPROTOTYPE: [31]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'w', 'r', 'o', 'n', 'g', ' ', 't', 'y', 'p', 'e', ' ', 'f', 'o', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrENOPROTOOPT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEPROTONOSUPPORT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrESOCKTNOSUPPORT: [26]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrENOTSUP: [14]uint8{'N', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEPFNOSUPPORT: [30]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEAFNOSUPPORT: [41]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'b', 'y', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'}, + FstrEADDRNOTAVAIL: [22]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrENETDOWN: [16]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrENETUNREACH: [20]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrENETRESET: [28]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'n', 'e', 't', 'w', 'o', 'r', 'k'}, + FstrECONNABORTED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'a', 'b', 'o', 'r', 't', 'e', 'd'}, + FstrENOBUFS: [26]uint8{'N', 'o', ' ', 'b', 'u', 'f', 'f', 'e', 'r', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEISCONN: [20]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'i', 's', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrENOTCONN: [21]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'n', 'o', 't', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrESHUTDOWN: [34]uint8{'C', 'a', 'n', 'n', 'o', 't', ' ', 's', 'e', 'n', 'd', ' ', 'a', 'f', 't', 'e', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 's', 'h', 'u', 't', 'd', 'o', 'w', 'n'}, + FstrEALREADY: [30]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrEINPROGRESS: [22]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrESTALE: [18]uint8{'S', 't', 'a', 'l', 'e', ' ', 'f', 'i', 'l', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e'}, + FstrEREMOTEIO: [17]uint8{'R', 'e', 'm', 'o', 't', 'e', ' ', 'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEDQUOT: [15]uint8{'Q', 'u', 'o', 't', 'a', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd'}, + FstrENOMEDIUM: [16]uint8{'N', 'o', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 'f', 'o', 'u', 'n', 'd'}, + FstrEMEDIUMTYPE: [18]uint8{'W', 'r', 'o', 'n', 'g', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 't', 'y', 'p', 'e'}, + FstrEMULTIHOP: [19]uint8{'M', 'u', 'l', 't', 'i', 'h', 'o', 'p', ' ', 'a', 't', 't', 'e', 'm', 'p', 't', 'e', 'd'}, + FstrENOKEY: [27]uint8{'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd', ' ', 'k', 'e', 'y', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEKEYEXPIRED: [16]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd'}, + FstrEKEYREVOKED: [21]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 'r', 'e', 'v', 'o', 'k', 'e', 'd'}, + FstrEKEYREJECTED: [28]uint8{'K', 'e', 'y', ' ', 'w', 'a', 's', ' ', 'r', 'e', 'j', 'e', 'c', 't', 'e', 'd', ' ', 'b', 'y', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e'}, +} + +var _errmsgidx = [132]uint16{ + 1: uint16(uint32(UintptrFromInt32(0) + 109)), + 2: uint16(uint32(UintptrFromInt32(0) + 133)), + 3: uint16(uint32(UintptrFromInt32(0) + 159)), + 4: uint16(uint32(UintptrFromInt32(0) + 269)), + 5: uint16(uint32(UintptrFromInt32(0) + 523)), + 6: uint16(uint32(UintptrFromInt32(0) + 533)), + 7: uint16(uint32(UintptrFromInt32(0) + 677)), + 8: uint16(uint32(UintptrFromInt32(0) + 642)), + 9: uint16(uint32(UintptrFromInt32(0) + 797)), + 10: uint16(uint32(UintptrFromInt32(0) + 817)), + 11: uint16(uint32(UintptrFromInt32(0) + 293)), + 12: uint16(uint32(UintptrFromInt32(0) + 241)), + 13: uint16(uint32(UintptrFromInt32(0) + 91)), + 14: uint16(uint32(UintptrFromInt32(0) + 834)), + 15: uint16(uint32(UintptrFromInt32(0) + 559)), + 16: uint16(uint32(UintptrFromInt32(0) + 255)), + 17: uint16(uint32(UintptrFromInt32(0) + 175)), + 18: uint16(uint32(UintptrFromInt32(0) + 339)), + 19: uint16(uint32(UintptrFromInt32(0) + 581)), + 20: uint16(uint32(UintptrFromInt32(0) + 596)), + 21: uint16(uint32(UintptrFromInt32(0) + 612)), + 22: uint16(uint32(UintptrFromInt32(0) + 660)), + 23: uint16(uint32(UintptrFromInt32(0) + 737)), + 24: uint16(uint32(UintptrFromInt32(0) + 767)), + 25: uint16(uint32(UintptrFromInt32(0) + 81)), + 26: uint16(uint32(UintptrFromInt32(0) + 627)), + 27: uint16(uint32(UintptrFromInt32(0) + 846)), + 28: uint16(uint32(UintptrFromInt32(0) + 217)), + 29: uint16(uint32(UintptrFromInt32(0) + 326)), + 30: uint16(uint32(UintptrFromInt32(0) + 357)), + 31: uint16(uint32(UintptrFromInt32(0) + 861)), + 32: uint16(uint32(UintptrFromInt32(0) + 511)), + 33: uint16(uint32(UintptrFromInt32(0) + 43)), + 34: uint16(uint32(UintptrFromInt32(0) + 56)), + 35: uint16(uint32(UintptrFromInt32(0) + 895)), + 36: uint16(uint32(UintptrFromInt32(0) + 719)), + 37: uint16(uint32(UintptrFromInt32(0) + 876)), + 38: uint16(uint32(UintptrFromInt32(0) + 986)), + 39: uint16(uint32(UintptrFromInt32(0) + 379)), + 40: uint16(uint32(UintptrFromInt32(0) + 700)), + 42: uint16(uint32(UintptrFromInt32(0) + 1011)), + 43: uint16(uint32(UintptrFromInt32(0) + 1038)), + 60: uint16(uint32(UintptrFromInt32(0) + 1057)), + 61: uint16(uint32(UintptrFromInt32(0) + 1077)), + 62: uint16(uint32(UintptrFromInt32(0) + 1095)), + 63: uint16(uint32(UintptrFromInt32(0) + 1110)), + 67: uint16(uint32(UintptrFromInt32(0) + 1135)), + 71: uint16(uint32(UintptrFromInt32(0) + 1157)), + 72: uint16(uint32(UintptrFromInt32(0) + 1803)), + 74: uint16(uint32(UintptrFromInt32(0) + 1172)), + 75: uint16(uint32(UintptrFromInt32(0) + 187)), + 77: uint16(uint32(UintptrFromInt32(0) + 1184)), + 84: uint16(uint32(UintptrFromInt32(0) + 21)), + 88: uint16(uint32(UintptrFromInt32(0) + 1213)), + 89: uint16(uint32(UintptrFromInt32(0) + 1226)), + 90: uint16(uint32(UintptrFromInt32(0) + 1255)), + 91: uint16(uint32(UintptrFromInt32(0) + 1273)), + 92: uint16(uint32(UintptrFromInt32(0) + 1304)), + 93: uint16(uint32(UintptrFromInt32(0) + 1327)), + 94: uint16(uint32(UintptrFromInt32(0) + 1350)), + 95: uint16(uint32(UintptrFromInt32(0) + 1376)), + 96: uint16(uint32(UintptrFromInt32(0) + 1390)), + 97: uint16(uint32(UintptrFromInt32(0) + 1420)), + 98: uint16(uint32(UintptrFromInt32(0) + 496)), + 99: uint16(uint32(UintptrFromInt32(0) + 1461)), + 100: uint16(uint32(UintptrFromInt32(0) + 1483)), + 101: uint16(uint32(UintptrFromInt32(0) + 1499)), + 102: uint16(uint32(UintptrFromInt32(0) + 1519)), + 103: uint16(uint32(UintptrFromInt32(0) + 1547)), + 104: uint16(uint32(UintptrFromInt32(0) + 399)), + 105: uint16(uint32(UintptrFromInt32(0) + 1566)), + 106: uint16(uint32(UintptrFromInt32(0) + 1592)), + 107: uint16(uint32(UintptrFromInt32(0) + 1612)), + 108: uint16(uint32(UintptrFromInt32(0) + 1633)), + 110: uint16(uint32(UintptrFromInt32(0) + 424)), + 111: uint16(uint32(UintptrFromInt32(0) + 444)), + 112: uint16(uint32(UintptrFromInt32(0) + 463)), + 113: uint16(uint32(UintptrFromInt32(0) + 476)), + 114: uint16(uint32(UintptrFromInt32(0) + 1667)), + 115: uint16(uint32(UintptrFromInt32(0) + 1697)), + 116: uint16(uint32(UintptrFromInt32(0) + 1719)), + 121: uint16(uint32(UintptrFromInt32(0) + 1737)), + 122: uint16(uint32(UintptrFromInt32(0) + 1754)), + 123: uint16(uint32(UintptrFromInt32(0) + 1769)), + 124: uint16(uint32(UintptrFromInt32(0) + 1785)), + 125: uint16(uint32(UintptrFromInt32(0) + 967)), + 126: uint16(uint32(UintptrFromInt32(0) + 1822)), + 127: uint16(uint32(UintptrFromInt32(0) + 1849)), + 128: uint16(uint32(UintptrFromInt32(0) + 1865)), + 129: uint16(uint32(UintptrFromInt32(0) + 1886)), + 130: uint16(uint32(UintptrFromInt32(0) + 947)), + 131: uint16(uint32(UintptrFromInt32(0) + 925)), +} + +func X__strerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + if uint32(e) >= Uint32FromInt64(264)/Uint32FromInt64(2) { + e = 0 + } + s = uintptr(unsafe.Pointer(&_errmsgstr)) + uintptr(_errmsgidx[e]) + return X__lctrans(tls, s, *(*uintptr)(unsafe.Pointer(loc + 5*4))) +} + +func Xstrerror(tls *TLS, e int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v, (%v:)", tls, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, loc) +} + +func X_Exit(tls *TLS, ec int32) { + if __ccgo_strace { + trc("tls=%v ec=%v, (%v:)", tls, ec, origin(2)) + } + X__syscall1(tls, int32(SYS_exit_group), ec) + for { + X__syscall1(tls, int32(SYS_exit), ec) + goto _1 + _1: + } +} + +func X__assert_fail(tls *TLS, expr uintptr, file uintptr, line int32, func1 uintptr) { + if __ccgo_strace { + trc("tls=%v expr=%v file=%v line=%v func1=%v, (%v:)", tls, expr, file, line, func1, origin(2)) + } + bp := tls.Alloc(48) + defer tls.Free(48) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+212, VaList(bp+8, expr, file, func1, line)) + Xabort(tls) +} + +const COUNT = 32 + +var _funcs [32]uintptr +var _count int32 +var _lock [1]int32 + +func X__funcs_on_quick_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var func1 uintptr + var v1 int32 + _, _ = func1, v1 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + for _count > 0 { + _count-- + v1 = _count + func1 = _funcs[v1] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + (*(*func(*TLS))(unsafe.Pointer(&struct{ uintptr }{func1})))(tls) + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + } +} + +func Xat_quick_exit(tls *TLS, func1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v func1=%v, (%v:)", tls, func1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + r = 0 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + if _count == int32(32) { + r = -int32(1) + } else { + v1 = _count + _count++ + _funcs[v1] = func1 + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + return r +} + +func _dummy3(tls *TLS) { +} + +func Xquick_exit(tls *TLS, code int32) { + if __ccgo_strace { + trc("tls=%v code=%v, (%v:)", tls, code, origin(2)) + } + X__funcs_on_quick_exit(tls) + X_Exit(tls, code) +} + +func Xcreat(tls *TLS, filename uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xopen(tls, filename, Int32FromInt32(O_CREAT)|Int32FromInt32(O_WRONLY)|Int32FromInt32(O_TRUNC), VaList(bp+8, mode)) +} + +func Xfcntl(tls *TLS, fd int32, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cmd=%v va=%v, (%v:)", tls, fd, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var arg uint32 + var ret, ret1, v1 int32 + var _ /* ex at bp+0 */ Tf_owner_ex + _, _, _, _, _ = ap, arg, ret, ret1, v1 + ap = va + arg = VaUint32(&ap) + _ = ap + if cmd == int32(F_SETFL) { + arg |= uint32(O_LARGEFILE) + } + if cmd == int32(F_SETLKW) { + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg)), 0, 0, 0))) + } + if cmd == int32(F_GETOWN) { + ret = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETOWN_EX)), int32(bp))) + if ret == -int32(EINVAL) { + return int32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg)))) + } + if ret != 0 { + return X__syscall_ret(tls, uint32(ret)) + } + if (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Ftype1 == int32(F_OWNER_PGRP) { + v1 = -(*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } else { + v1 = (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } + return v1 + } + if cmd == int32(F_DUPFD_CLOEXEC) { + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD_CLOEXEC)), int32(arg))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(ret1)) + } + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD_CLOEXEC)), int32(Int32FromInt32(0)))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall1(tls, int32(SYS_close), ret1) + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + ret1 = int32(X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_DUPFD)), int32(arg))) + if ret1 >= 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(ret1)) + } + switch cmd { + case int32(F_SETLK): + fallthrough + case int32(F_GETLK): + fallthrough + case int32(F_GETOWN_EX): + fallthrough + case int32(F_SETOWN_EX): + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(uintptr(arg))))) + default: + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), fd, cmd, int32(arg)))) + } + return r +} + +func Xopen(tls *TLS, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v flags=%v va=%v, (%v:)", tls, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var fd int32 + var mode Tmode_t + _, _, _ = ap, fd, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + fd = int32(___syscall_cp(tls, int32(SYS_open), int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(mode), 0, 0, 0)) + if fd >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(fd)) +} + +func Xopenat(tls *TLS, fd int32, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v flags=%v va=%v, (%v:)", tls, fd, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var mode Tmode_t + _, _ = ap, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_openat), fd, int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(mode), 0, 0))) +} + +func Xposix_fadvise(tls *TLS, fd int32, base Toff_t, len1 Toff_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v advice=%v, (%v:)", tls, fd, base, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int32(SYS_fadvise64_64), fd, int32(base), int32(len1), advice)) +} + +func Xposix_fallocate(tls *TLS, fd int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v, (%v:)", tls, fd, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int32(SYS_fallocate), fd, int32(Int32FromInt32(0)), int32(base), int32(len1))) +} + +const WCONTINUED = 8 +const WEXITED = 4 +const WNOWAIT = 16777216 +const WSTOPPED = 2 +const __WALL = 1073741824 +const __WCLONE = 2147483648 +const __WNOTHREAD = 536870912 + +type Tidtype_t = int32 + +const _P_ALL = 0 +const _P_PID = 1 +const _P_PGID = 2 +const _P_PIDFD = 3 +const F_APP = 128 +const F_EOF = 16 +const F_ERR = 32 +const F_NORD = 4 +const F_NOWR = 8 +const F_PERM = 1 +const F_SVB = 64 +const KMAX = 128 +const LDBL_EPSILON1 = 2.22044604925031308085e-16 +const LDBL_MAX1 = 1.79769313486231570815e+308 +const LDBL_MIN1 = 2.22507385850720138309e-308 +const LD_B1B_DIG = 2 +const LD_B1B_MAX = 254740991 +const MASK = 127 +const MAYBE_WAITERS = 1073741824 +const UNGET = 8 + +type TFILE = struct { + F__ccgo_align [0]uint32 + Fflags uint32 + Frpos uintptr + Frend uintptr + Fclose1 uintptr + Fwend uintptr + Fwpos uintptr + Fmustbezero_1 uintptr + Fwbase uintptr + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fbuf uintptr + Fbuf_size Tsize_t + Fprev uintptr + Fnext uintptr + Ffd int32 + Fpipe_pid int32 + Flockcount int32 + Fmode int32 + Flock int32 + Flbf int32 + Fcookie uintptr + Foff Toff_t + Fgetln_buf uintptr + Fmustbezero_2 uintptr + Fshend uintptr + F__ccgo_align26 [4]byte + Fshlim Toff_t + Fshcnt Toff_t + Fprev_locked uintptr + Fnext_locked uintptr + Flocale uintptr + F__ccgo_pad31 [4]byte +} + +type T_IO_FILE = TFILE + +func _scanexp(tls *TLS, f uintptr, pok int32) (r int64) { + var c, neg, x, v1, v10, v14, v18, v4 int32 + var y, v22 int64 + var v11, v12, v15, v16, v19, v2, v20, v3, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, neg, x, y, v1, v10, v11, v12, v14, v15, v16, v18, v19, v2, v20, v22, v3, v4, v5, v6 + neg = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + if c == int32('+') || c == int32('-') { + neg = BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__shgetc(tls, f) + } + c = v4 + if uint32(c-int32('0')) >= uint32(10) && pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if uint32(c-int32('0')) >= uint32(10) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return -Int64FromInt64(0x7fffffffffffffff) - Int64FromInt32(1) + } + x = 0 + for { + if !(uint32(c-int32('0')) < uint32(10) && x < Int32FromInt32(INT_MAX)/Int32FromInt32(10)) { + break + } + x = int32(10)*x + c - int32('0') + goto _9 + _9: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v12 = f + 4 + v11 = *(*uintptr)(unsafe.Pointer(v12)) + *(*uintptr)(unsafe.Pointer(v12))++ + v10 = int32(*(*uint8)(unsafe.Pointer(v11))) + } else { + v10 = X__shgetc(tls, f) + } + c = v10 + } + y = int64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y < Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(100)) { + break + } + y = int64(10)*y + int64(c) - int64('0') + goto _13 + _13: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + for { + if !(uint32(c-int32('0')) < uint32(10)) { + break + } + goto _17 + _17: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v20 = f + 4 + v19 = *(*uintptr)(unsafe.Pointer(v20)) + *(*uintptr)(unsafe.Pointer(v20))++ + v18 = int32(*(*uint8)(unsafe.Pointer(v19))) + } else { + v18 = X__shgetc(tls, f) + } + c = v18 + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if neg != 0 { + v22 = -y + } else { + v22 = y + } + return v22 +} + +func _decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) (r float64) { + bp := tls.Alloc(512) + defer tls.Free(512) + var a, bitlim, denormal, e2, emax, gotdig, gotrad, i, j, k, lnz, p10, rp, rpm9, sh, z, v13, v14, v2, v21, v23, v29, v30, v6, v9 int32 + var bias, frac, y float64 + var carry, carry1, carry2, t, tmp, tmp2 Tuint32_t + var dc, e10, lrp int64 + var tmp1 Tuint64_t + var v10, v11, v15, v16, v3, v4, v7, v8 uintptr + var _ /* x at bp+0 */ [128]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, bias, bitlim, carry, carry1, carry2, dc, denormal, e10, e2, emax, frac, gotdig, gotrad, i, j, k, lnz, lrp, p10, rp, rpm9, sh, t, tmp, tmp1, tmp2, y, z, v10, v11, v13, v14, v15, v16, v2, v21, v23, v29, v3, v30, v4, v6, v7, v8, v9 + lrp = 0 + dc = 0 + e10 = 0 + lnz = 0 + gotdig = 0 + gotrad = 0 + emax = -emin - bits + int32(3) + denormal = 0 + frac = Float64FromInt32(0) + bias = Float64FromInt32(0) + j = 0 + k = 0 + /* Don't let leading zeros consume buffer space */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _1 + _1: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + c = v2 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v8 = f + 4 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + v6 = int32(*(*uint8)(unsafe.Pointer(v7))) + } else { + v6 = X__shgetc(tls, f) + } + c = v6 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + lrp-- + goto _5 + _5: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 4 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + c = v9 + } + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + gotrad = int32(1) + lrp = dc + } else { + if k < Int32FromInt32(KMAX)-Int32FromInt32(3) { + dc++ + if c != int32('0') { + lnz = int32(dc) + } + if j != 0 { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]*uint32(10) + uint32(c) - uint32('0') + } else { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(c - int32('0')) + } + j++ + v13 = j + if v13 == int32(9) { + k++ + j = 0 + } + gotdig = int32(1) + } else { + dc++ + if c != int32('0') { + lnz = (Int32FromInt32(KMAX) - Int32FromInt32(4)) * Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(Int32FromInt32(KMAX)-Int32FromInt32(4))*4)) |= uint32(1) + } + } + } + goto _12 + _12: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + if !(gotrad != 0) { + lrp = dc + } + if gotdig != 0 && c|int32(32) == int32('e') { + e10 = _scanexp(tls, f, pok) + if e10 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e10 = 0 + } + lrp += e10 + } else { + if c >= 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if !(gotdig != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + /* Handle zero specially to avoid nasty special cases later */ + if !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] != 0) { + return float64(sign) * float64(0) + } + /* Optimize small integers (w/no exponent) and over/under-flow */ + if lrp == dc && dc < int64(10) && (bits > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bits == uint32(0)) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if lrp > int64(-emin/int32(2)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if lrp < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + /* Align incomplete final B1B digit */ + if j != 0 { + for { + if !(j < int32(9)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32(10) + goto _19 + _19: + ; + j++ + } + k++ + j = 0 + } + a = 0 + z = k + e2 = 0 + rp = int32(lrp) + /* Optimize small to mid-size integers (even in exp. notation) */ + if lnz < int32(9) && lnz <= rp && rp < int32(18) { + if rp == int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if rp < int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) / float64(_p10s[int32(8)-rp]) + } + bitlim = bits - int32(3)*(rp-Int32FromInt32(9)) + if bitlim > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bitlim == uint32(0) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) * float64(_p10s[rp-int32(10)]) + } + } + /* Drop trailing zeros */ + for { + if !!((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z-int32(1)] != 0) { + break + } + goto _20 + _20: + ; + z-- + } + /* Align radix point to B1B digit boundary */ + if rp%int32(9) != 0 { + if rp >= 0 { + v21 = rp % int32(9) + } else { + v21 = rp%int32(9) + int32(9) + } + rpm9 = v21 + p10 = _p10s[int32(8)-rpm9] + carry = uint32(0) + k = a + for { + if !(k != z) { + break + } + tmp = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] % uint32(p10) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]/uint32(p10) + carry + carry = uint32(int32(1000000000)/p10) * tmp + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + rp -= int32(9) + } + goto _22 + _22: + ; + k++ + } + if carry != 0 { + v23 = z + z++ + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v23] = carry + } + rp += int32(9) - rpm9 + } + /* Upscale until desired number of bits are left of radix point */ + for rp < Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) || rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) && (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] < _th[0] { + carry1 = uint32(0) + e2 -= int32(29) + k = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + for { + tmp1 = uint64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k])< uint64(1000000000) { + carry1 = uint32(tmp1 / uint64(1000000000)) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1 % uint64(1000000000)) + } else { + carry1 = uint32(0) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1) + } + if k == (z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) && k != a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + z = k + } + if k == a { + break + } + goto _24 + _24: + ; + k = (k - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry1 != 0 { + rp += int32(9) + a = (a - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if a == z { + z = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] = carry1 + } + } + /* Downscale until exactly number of bits are left of radix point */ + for { + carry2 = uint32(0) + sh = int32(1) + i = 0 + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + k = (a + i) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if k == z || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] < _th[i] { + i = int32(LD_B1B_DIG) + break + } + if (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] > _th[i] { + break + } + goto _26 + _26: + ; + i++ + } + if i == int32(LD_B1B_DIG) && rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + break + } + /* FIXME: find a way to compute optimal sh */ + if rp > Int32FromInt32(9)+Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + sh = int32(9) + } + e2 += sh + k = a + for { + if !(k != z) { + break + } + tmp2 = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] & uint32(int32(1)<>sh + carry2 + carry2 = uint32(Int32FromInt32(1000000000)>>sh) * tmp2 + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + i-- + rp -= int32(9) + } + goto _27 + _27: + ; + k = (k + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry2 != 0 { + if (z+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != a { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] = carry2 + z = (z + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= uint32(1) + } + } + goto _25 + _25: + } + /* Assemble desired bits into floating point variable */ + v29 = Int32FromInt32(0) + i = v29 + y = float64(v29) + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + v30 = (z + Int32FromInt32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + z = v30 + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v30-int32(1)] = uint32(0) + } + y = Float64FromFloat64(1e+09)*y + float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))]) + goto _28 + _28: + ; + i++ + } + y *= float64(sign) + /* Limit precision for denormal results */ + if bits > int32(LDBL_MANT_DIG)+e2-emin { + bits = int32(LDBL_MANT_DIG) + e2 - emin + if bits < 0 { + bits = 0 + } + denormal = int32(1) + } + /* Calculate bias term to force rounding, move out lower bits */ + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), y) + frac = Xfmodl(tls, y, Xscalbn(tls, Float64FromInt32(1), int32(LDBL_MANT_DIG)-bits)) + y -= frac + y += bias + } + /* Process tail of decimal input so it can affect rounding */ + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z { + t = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] + if t < uint32(500000000) && (t != 0 || (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z) { + frac += float64(0.25) * float64(sign) + } else { + if t > uint32(500000000) { + frac += float64(0.75) * float64(sign) + } else { + if t == uint32(500000000) { + if (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + frac += float64(0.5) * float64(sign) + } else { + frac += float64(0.75) * float64(sign) + } + } + } + } + if int32(LDBL_MANT_DIG)-bits >= int32(2) && !(Xfmodl(tls, frac, Float64FromInt32(1)) != 0) { + frac++ + } + } + y += frac + y -= bias + if (e2+int32(LDBL_MANT_DIG))&int32(INT_MAX) > emax-int32(5) { + if Xfabsl(tls, y) >= Float64FromInt32(2)/Float64FromFloat64(2.22044604925031308085e-16) { + if denormal != 0 && bits == int32(LDBL_MANT_DIG)+e2-emin { + denormal = 0 + } + y *= Float64FromFloat64(0.5) + e2++ + } + if e2+int32(LDBL_MANT_DIG) > emax || denormal != 0 && frac != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + } + return Xscalbnl(tls, y, e2) +} + +var _th = [2]Tuint32_t{ + 0: uint32(9007199), + 1: uint32(254740991), +} + +var _p10s = [8]int32{ + 0: int32(10), + 1: int32(100), + 2: int32(1000), + 3: int32(10000), + 4: int32(100000), + 5: int32(1000000), + 6: int32(10000000), + 7: int32(100000000), +} + +func _hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) (r float64) { + var bias, scale, y float64 + var c, d, gotdig, gotrad, gottail, v1, v12, v16, v5, v8 int32 + var dc, e2, rp int64 + var x Tuint32_t + var v10, v13, v14, v17, v18, v2, v3, v6, v7, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bias, c, d, dc, e2, gotdig, gotrad, gottail, rp, scale, x, y, v1, v10, v12, v13, v14, v16, v17, v18, v2, v3, v5, v6, v7, v8, v9 + x = uint32(0) + y = Float64FromInt32(0) + scale = Float64FromInt32(1) + bias = Float64FromInt32(0) + gottail = 0 + gotrad = 0 + gotdig = 0 + rp = 0 + dc = 0 + e2 = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + /* Skip leading zeros */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _4 + _4: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__shgetc(tls, f) + } + c = v5 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + /* Count zeros after the radix point before significand */ + rp = 0 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _11 + _11: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 4 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + rp-- + } + } + for { + if !(uint32(c-int32('0')) < uint32(10) || uint32(c|int32(32)-int32('a')) < uint32(6) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + rp = dc + gotrad = int32(1) + } else { + gotdig = int32(1) + if c > int32('9') { + d = c | int32(32) + int32(10) - int32('a') + } else { + d = c - int32('0') + } + if dc < int64(8) { + x = x*uint32(16) + uint32(d) + } else { + if dc < int64(Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)+Int32FromInt32(1)) { + scale /= Float64FromInt32(16) + y += float64(d) * scale + } else { + if d != 0 && !(gottail != 0) { + y += Float64FromFloat64(0.5) * scale + gottail = int32(1) + } + } + } + dc++ + } + goto _15 + _15: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v18 = f + 4 + v17 = *(*uintptr)(unsafe.Pointer(v18)) + *(*uintptr)(unsafe.Pointer(v18))++ + v16 = int32(*(*uint8)(unsafe.Pointer(v17))) + } else { + v16 = X__shgetc(tls, f) + } + c = v16 + } + if !(gotdig != 0) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if gotrad != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return float64(sign) * float64(0) + } + if !(gotrad != 0) { + rp = dc + } + for dc < int64(8) { + x *= uint32(16) + dc++ + } + if c|int32(32) == int32('p') { + e2 = _scanexp(tls, f, pok) + if e2 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e2 = 0 + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + e2 += int64(4)*rp - int64(32) + if !(x != 0) { + return float64(sign) * float64(0) + } + if e2 > int64(-emin) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if e2 < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + for x < uint32(0x80000000) { + if y >= Float64FromFloat64(0.5) { + x += x + uint32(1) + y += y - Float64FromInt32(1) + } else { + x += x + y += y + } + e2-- + } + if int64(bits) > int64(32)+e2-int64(emin) { + bits = int32(int64(32) + e2 - int64(emin)) + if bits < 0 { + bits = 0 + } + } + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(32)+Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), float64(sign)) + } + if bits < int32(32) && y != 0 && !(x&Uint32FromInt32(1) != 0) { + x++ + y = Float64FromInt32(0) + } + y = bias + float64(sign)*float64(x) + float64(sign)*y + y -= bias + if !(y != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + return Xscalbnl(tls, y, int32(e2)) +} + +func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) (r float64) { + if __ccgo_strace { + trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bits, c, emin, sign, v1, v12, v19, v2, v22, v27, v34, v5, v6, v8 int32 + var i, v31 Tsize_t + var v10, v13, v14, v20, v21, v23, v24, v28, v29, v3, v35, v36, v4, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bits, c, emin, i, sign, v1, v10, v12, v13, v14, v19, v2, v20, v21, v22, v23, v24, v27, v28, v29, v3, v31, v34, v35, v36, v4, v5, v6, v8, v9 + sign = int32(1) + switch prec { + case 0: + bits = int32(FLT_MANT_DIG) + emin = -int32(125) - bits + case int32(1): + bits = int32(DBL_MANT_DIG) + emin = -int32(1021) - bits + case int32(2): + bits = int32(LDBL_MANT_DIG) + emin = -int32(1021) - bits + default: + return Float64FromInt32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + sign -= int32(2) * BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + i = uint32(0) + for { + if !(i < uint32(8) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 247 + uintptr(i))))) { + break + } + if i < uint32(7) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 4 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + } + goto _11 + _11: + ; + i++ + } + if i == uint32(3) || i == uint32(8) || i > uint32(3) && pok != 0 { + if i != uint32(8) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + for { + if !(i > uint32(3)) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + goto _16 + _16: + ; + i-- + } + } + } + return float64(float32(sign) * X__builtin_inff(tls)) + } + if !(i != 0) { + i = uint32(0) + for { + if !(i < uint32(3) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 256 + uintptr(i))))) { + break + } + if i < uint32(2) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v21 = f + 4 + v20 = *(*uintptr)(unsafe.Pointer(v21)) + *(*uintptr)(unsafe.Pointer(v21))++ + v19 = int32(*(*uint8)(unsafe.Pointer(v20))) + } else { + v19 = X__shgetc(tls, f) + } + c = v19 + } + goto _18 + _18: + ; + i++ + } + } + if i == uint32(3) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v24 = f + 4 + v23 = *(*uintptr)(unsafe.Pointer(v24)) + *(*uintptr)(unsafe.Pointer(v24))++ + v22 = int32(*(*uint8)(unsafe.Pointer(v23))) + } else { + v22 = X__shgetc(tls, f) + } + if v22 != int32('(') { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + i = uint32(1) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v29 = f + 4 + v28 = *(*uintptr)(unsafe.Pointer(v29)) + *(*uintptr)(unsafe.Pointer(v29))++ + v27 = int32(*(*uint8)(unsafe.Pointer(v28))) + } else { + v27 = X__shgetc(tls, f) + } + c = v27 + if uint32(c-int32('0')) < uint32(10) || uint32(c-int32('A')) < uint32(26) || uint32(c-int32('a')) < uint32(26) || c == int32('_') { + goto _26 + } + if c == int32(')') { + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !(pok != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + for { + v31 = i + i-- + if !(v31 != 0) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + goto _26 + _26: + ; + i++ + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if i != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + if c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v36 = f + 4 + v35 = *(*uintptr)(unsafe.Pointer(v36)) + *(*uintptr)(unsafe.Pointer(v36))++ + v34 = int32(*(*uint8)(unsafe.Pointer(v35))) + } else { + v34 = X__shgetc(tls, f) + } + c = v34 + if c|int32(32) == int32('x') { + return _hexfloat(tls, f, bits, emin, sign, pok) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + c = int32('0') + } + return _decfloat(tls, f, c, bits, emin, sign, pok) +} + +// C documentation +// +// /* Lookup table for digit values. -1==255>=36 -> invalid */ +var _table6 = [257]uint8{ + 0: uint8(-Int32FromInt32(1)), + 1: uint8(-Int32FromInt32(1)), + 2: uint8(-Int32FromInt32(1)), + 3: uint8(-Int32FromInt32(1)), + 4: uint8(-Int32FromInt32(1)), + 5: uint8(-Int32FromInt32(1)), + 6: uint8(-Int32FromInt32(1)), + 7: uint8(-Int32FromInt32(1)), + 8: uint8(-Int32FromInt32(1)), + 9: uint8(-Int32FromInt32(1)), + 10: uint8(-Int32FromInt32(1)), + 11: uint8(-Int32FromInt32(1)), + 12: uint8(-Int32FromInt32(1)), + 13: uint8(-Int32FromInt32(1)), + 14: uint8(-Int32FromInt32(1)), + 15: uint8(-Int32FromInt32(1)), + 16: uint8(-Int32FromInt32(1)), + 17: uint8(-Int32FromInt32(1)), + 18: uint8(-Int32FromInt32(1)), + 19: uint8(-Int32FromInt32(1)), + 20: uint8(-Int32FromInt32(1)), + 21: uint8(-Int32FromInt32(1)), + 22: uint8(-Int32FromInt32(1)), + 23: uint8(-Int32FromInt32(1)), + 24: uint8(-Int32FromInt32(1)), + 25: uint8(-Int32FromInt32(1)), + 26: uint8(-Int32FromInt32(1)), + 27: uint8(-Int32FromInt32(1)), + 28: uint8(-Int32FromInt32(1)), + 29: uint8(-Int32FromInt32(1)), + 30: uint8(-Int32FromInt32(1)), + 31: uint8(-Int32FromInt32(1)), + 32: uint8(-Int32FromInt32(1)), + 33: uint8(-Int32FromInt32(1)), + 34: uint8(-Int32FromInt32(1)), + 35: uint8(-Int32FromInt32(1)), + 36: uint8(-Int32FromInt32(1)), + 37: uint8(-Int32FromInt32(1)), + 38: uint8(-Int32FromInt32(1)), + 39: uint8(-Int32FromInt32(1)), + 40: uint8(-Int32FromInt32(1)), + 41: uint8(-Int32FromInt32(1)), + 42: uint8(-Int32FromInt32(1)), + 43: uint8(-Int32FromInt32(1)), + 44: uint8(-Int32FromInt32(1)), + 45: uint8(-Int32FromInt32(1)), + 46: uint8(-Int32FromInt32(1)), + 47: uint8(-Int32FromInt32(1)), + 48: uint8(-Int32FromInt32(1)), + 50: uint8(1), + 51: uint8(2), + 52: uint8(3), + 53: uint8(4), + 54: uint8(5), + 55: uint8(6), + 56: uint8(7), + 57: uint8(8), + 58: uint8(9), + 59: uint8(-Int32FromInt32(1)), + 60: uint8(-Int32FromInt32(1)), + 61: uint8(-Int32FromInt32(1)), + 62: uint8(-Int32FromInt32(1)), + 63: uint8(-Int32FromInt32(1)), + 64: uint8(-Int32FromInt32(1)), + 65: uint8(-Int32FromInt32(1)), + 66: uint8(10), + 67: uint8(11), + 68: uint8(12), + 69: uint8(13), + 70: uint8(14), + 71: uint8(15), + 72: uint8(16), + 73: uint8(17), + 74: uint8(18), + 75: uint8(19), + 76: uint8(20), + 77: uint8(21), + 78: uint8(22), + 79: uint8(23), + 80: uint8(24), + 81: uint8(25), + 82: uint8(26), + 83: uint8(27), + 84: uint8(28), + 85: uint8(29), + 86: uint8(30), + 87: uint8(31), + 88: uint8(32), + 89: uint8(33), + 90: uint8(34), + 91: uint8(35), + 92: uint8(-Int32FromInt32(1)), + 93: uint8(-Int32FromInt32(1)), + 94: uint8(-Int32FromInt32(1)), + 95: uint8(-Int32FromInt32(1)), + 96: uint8(-Int32FromInt32(1)), + 97: uint8(-Int32FromInt32(1)), + 98: uint8(10), + 99: uint8(11), + 100: uint8(12), + 101: uint8(13), + 102: uint8(14), + 103: uint8(15), + 104: uint8(16), + 105: uint8(17), + 106: uint8(18), + 107: uint8(19), + 108: uint8(20), + 109: uint8(21), + 110: uint8(22), + 111: uint8(23), + 112: uint8(24), + 113: uint8(25), + 114: uint8(26), + 115: uint8(27), + 116: uint8(28), + 117: uint8(29), + 118: uint8(30), + 119: uint8(31), + 120: uint8(32), + 121: uint8(33), + 122: uint8(34), + 123: uint8(35), + 124: uint8(-Int32FromInt32(1)), + 125: uint8(-Int32FromInt32(1)), + 126: uint8(-Int32FromInt32(1)), + 127: uint8(-Int32FromInt32(1)), + 128: uint8(-Int32FromInt32(1)), + 129: uint8(-Int32FromInt32(1)), + 130: uint8(-Int32FromInt32(1)), + 131: uint8(-Int32FromInt32(1)), + 132: uint8(-Int32FromInt32(1)), + 133: uint8(-Int32FromInt32(1)), + 134: uint8(-Int32FromInt32(1)), + 135: uint8(-Int32FromInt32(1)), + 136: uint8(-Int32FromInt32(1)), + 137: uint8(-Int32FromInt32(1)), + 138: uint8(-Int32FromInt32(1)), + 139: uint8(-Int32FromInt32(1)), + 140: uint8(-Int32FromInt32(1)), + 141: uint8(-Int32FromInt32(1)), + 142: uint8(-Int32FromInt32(1)), + 143: uint8(-Int32FromInt32(1)), + 144: uint8(-Int32FromInt32(1)), + 145: uint8(-Int32FromInt32(1)), + 146: uint8(-Int32FromInt32(1)), + 147: uint8(-Int32FromInt32(1)), + 148: uint8(-Int32FromInt32(1)), + 149: uint8(-Int32FromInt32(1)), + 150: uint8(-Int32FromInt32(1)), + 151: uint8(-Int32FromInt32(1)), + 152: uint8(-Int32FromInt32(1)), + 153: uint8(-Int32FromInt32(1)), + 154: uint8(-Int32FromInt32(1)), + 155: uint8(-Int32FromInt32(1)), + 156: uint8(-Int32FromInt32(1)), + 157: uint8(-Int32FromInt32(1)), + 158: uint8(-Int32FromInt32(1)), + 159: uint8(-Int32FromInt32(1)), + 160: uint8(-Int32FromInt32(1)), + 161: uint8(-Int32FromInt32(1)), + 162: uint8(-Int32FromInt32(1)), + 163: uint8(-Int32FromInt32(1)), + 164: uint8(-Int32FromInt32(1)), + 165: uint8(-Int32FromInt32(1)), + 166: uint8(-Int32FromInt32(1)), + 167: uint8(-Int32FromInt32(1)), + 168: uint8(-Int32FromInt32(1)), + 169: uint8(-Int32FromInt32(1)), + 170: uint8(-Int32FromInt32(1)), + 171: uint8(-Int32FromInt32(1)), + 172: uint8(-Int32FromInt32(1)), + 173: uint8(-Int32FromInt32(1)), + 174: uint8(-Int32FromInt32(1)), + 175: uint8(-Int32FromInt32(1)), + 176: uint8(-Int32FromInt32(1)), + 177: uint8(-Int32FromInt32(1)), + 178: uint8(-Int32FromInt32(1)), + 179: uint8(-Int32FromInt32(1)), + 180: uint8(-Int32FromInt32(1)), + 181: uint8(-Int32FromInt32(1)), + 182: uint8(-Int32FromInt32(1)), + 183: uint8(-Int32FromInt32(1)), + 184: uint8(-Int32FromInt32(1)), + 185: uint8(-Int32FromInt32(1)), + 186: uint8(-Int32FromInt32(1)), + 187: uint8(-Int32FromInt32(1)), + 188: uint8(-Int32FromInt32(1)), + 189: uint8(-Int32FromInt32(1)), + 190: uint8(-Int32FromInt32(1)), + 191: uint8(-Int32FromInt32(1)), + 192: uint8(-Int32FromInt32(1)), + 193: uint8(-Int32FromInt32(1)), + 194: uint8(-Int32FromInt32(1)), + 195: uint8(-Int32FromInt32(1)), + 196: uint8(-Int32FromInt32(1)), + 197: uint8(-Int32FromInt32(1)), + 198: uint8(-Int32FromInt32(1)), + 199: uint8(-Int32FromInt32(1)), + 200: uint8(-Int32FromInt32(1)), + 201: uint8(-Int32FromInt32(1)), + 202: uint8(-Int32FromInt32(1)), + 203: uint8(-Int32FromInt32(1)), + 204: uint8(-Int32FromInt32(1)), + 205: uint8(-Int32FromInt32(1)), + 206: uint8(-Int32FromInt32(1)), + 207: uint8(-Int32FromInt32(1)), + 208: uint8(-Int32FromInt32(1)), + 209: uint8(-Int32FromInt32(1)), + 210: uint8(-Int32FromInt32(1)), + 211: uint8(-Int32FromInt32(1)), + 212: uint8(-Int32FromInt32(1)), + 213: uint8(-Int32FromInt32(1)), + 214: uint8(-Int32FromInt32(1)), + 215: uint8(-Int32FromInt32(1)), + 216: uint8(-Int32FromInt32(1)), + 217: uint8(-Int32FromInt32(1)), + 218: uint8(-Int32FromInt32(1)), + 219: uint8(-Int32FromInt32(1)), + 220: uint8(-Int32FromInt32(1)), + 221: uint8(-Int32FromInt32(1)), + 222: uint8(-Int32FromInt32(1)), + 223: uint8(-Int32FromInt32(1)), + 224: uint8(-Int32FromInt32(1)), + 225: uint8(-Int32FromInt32(1)), + 226: uint8(-Int32FromInt32(1)), + 227: uint8(-Int32FromInt32(1)), + 228: uint8(-Int32FromInt32(1)), + 229: uint8(-Int32FromInt32(1)), + 230: uint8(-Int32FromInt32(1)), + 231: uint8(-Int32FromInt32(1)), + 232: uint8(-Int32FromInt32(1)), + 233: uint8(-Int32FromInt32(1)), + 234: uint8(-Int32FromInt32(1)), + 235: uint8(-Int32FromInt32(1)), + 236: uint8(-Int32FromInt32(1)), + 237: uint8(-Int32FromInt32(1)), + 238: uint8(-Int32FromInt32(1)), + 239: uint8(-Int32FromInt32(1)), + 240: uint8(-Int32FromInt32(1)), + 241: uint8(-Int32FromInt32(1)), + 242: uint8(-Int32FromInt32(1)), + 243: uint8(-Int32FromInt32(1)), + 244: uint8(-Int32FromInt32(1)), + 245: uint8(-Int32FromInt32(1)), + 246: uint8(-Int32FromInt32(1)), + 247: uint8(-Int32FromInt32(1)), + 248: uint8(-Int32FromInt32(1)), + 249: uint8(-Int32FromInt32(1)), + 250: uint8(-Int32FromInt32(1)), + 251: uint8(-Int32FromInt32(1)), + 252: uint8(-Int32FromInt32(1)), + 253: uint8(-Int32FromInt32(1)), + 254: uint8(-Int32FromInt32(1)), + 255: uint8(-Int32FromInt32(1)), + 256: uint8(-Int32FromInt32(1)), +} + +func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bs, c, neg, v1, v11, v14, v2, v21, v25, v29, v33, v37, v41, v45, v5, v6, v8 int32 + var val, v10, v12, v13, v15, v16, v22, v23, v26, v27, v3, v30, v31, v34, v35, v38, v39, v4, v42, v43, v46, v47, v9 uintptr + var x uint32 + var y uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bs, c, neg, val, x, y, v1, v10, v11, v12, v13, v14, v15, v16, v2, v21, v22, v23, v25, v26, v27, v29, v3, v30, v31, v33, v34, v35, v37, v38, v39, v4, v41, v42, v43, v45, v46, v47, v5, v6, v8, v9 + val = uintptr(unsafe.Pointer(&_table6)) + uintptr(1) + neg = 0 + if base > uint32(36) || base == uint32(1) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + neg = -BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 4 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + if (base == uint32(0) || base == uint32(16)) && c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v13 = f + 4 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = int32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = X__shgetc(tls, f) + } + c = v11 + if c|int32(32) == int32('x') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + if int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= int32(16) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return uint64(0) + } + base = uint32(16) + } else { + if base == uint32(0) { + base = uint32(8) + } + } + } else { + if base == uint32(0) { + base = uint32(10) + } + if uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + if base == uint32(10) { + x = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(10)-Uint32FromInt32(1)) { + break + } + x = x*uint32(10) + uint32(c-Int32FromUint8('0')) + goto _20 + _20: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v23 = f + 4 + v22 = *(*uintptr)(unsafe.Pointer(v23)) + *(*uintptr)(unsafe.Pointer(v23))++ + v21 = int32(*(*uint8)(unsafe.Pointer(v22))) + } else { + v21 = X__shgetc(tls, f) + } + c = v21 + } + y = uint64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y <= (Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))/Uint64FromInt32(10) && uint64(10)*y <= Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)-uint64(c-Int32FromUint8('0'))) { + break + } + y = y*uint64(10) + uint64(c-Int32FromUint8('0')) + goto _24 + _24: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v27 = f + 4 + v26 = *(*uintptr)(unsafe.Pointer(v27)) + *(*uintptr)(unsafe.Pointer(v27))++ + v25 = int32(*(*uint8)(unsafe.Pointer(v26))) + } else { + v25 = X__shgetc(tls, f) + } + c = v25 + } + if uint32(c-int32('0')) >= uint32(10) { + goto done + } + } else { + if !(base&(base-Uint32FromInt32(1)) != 0) { + bs = int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 260 + uintptr(uint32(0x17)*base>>int32(5)&uint32(7))))) + x = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(32)) { + break + } + x = x<>bs) { + break + } + y = y<= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if y >= lim { + if !(lim&Uint64FromInt32(1) != 0) && !(neg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim - uint64(1) + } else { + if y > lim { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim + } + } + } + return y ^ uint64(neg) - uint64(neg) +} + +func X__procfdname(tls *TLS, buf uintptr, fd uint32) { + if __ccgo_strace { + trc("tls=%v buf=%v fd=%v, (%v:)", tls, buf, fd, origin(2)) + } + var i, j, v5 uint32 + var v2 uint8 + _, _, _, _ = i, j, v2, v5 + i = uint32(0) + for { + v2 = *(*uint8)(unsafe.Pointer(__ccgo_ts + 269 + uintptr(i))) + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v2 + if !(v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if !(fd != 0) { + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8('0') + *(*uint8)(unsafe.Pointer(buf + uintptr(i+uint32(1)))) = uint8(0) + return + } + j = fd + for { + if !(j != 0) { + break + } + goto _3 + _3: + ; + j /= uint32(10) + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8(0) + for { + if !(fd != 0) { + break + } + i-- + v5 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v5))) = uint8(uint32('0') + fd%uint32(10)) + goto _4 + _4: + ; + fd /= uint32(10) + } +} + +/* The shcnt field stores the number of bytes read so far, offset by + * the value of buf-rpos at the last function call (__shlim or __shgetc), + * so that between calls the inline shcnt macro can add rpos-buf to get + * the actual count. */ + +func X__shlim(tls *TLS, f uintptr, lim Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Fshlim = lim + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + /* If lim is nonzero, rend must be a valid pointer. */ + if lim != 0 && int64(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) > lim { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } +} + +func X__shgetc(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 int32 + var cnt Toff_t + var v2 bool + _, _, _, _ = c, cnt, v1, v2 + cnt = (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if v2 = (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*TFILE)(unsafe.Pointer(f)).Fshlim; !v2 { + v1 = X__uflow(tls, f) + c = v1 + } + if v2 || v1 < 0 { + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + cnt + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + (*TFILE)(unsafe.Pointer(f)).Fshlim = int64(-int32(1)) + return -int32(1) + } + cnt++ + if (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && int64(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) > (*TFILE)(unsafe.Pointer(f)).Fshlim-cnt { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr((*TFILE)(unsafe.Pointer(f)).Fshlim-cnt) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64(int32((*TFILE)(unsafe.Pointer(f)).Fbuf)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + cnt + if (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf { + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(-Int32FromInt32(1)))) = uint8(c) + } + return c +} + +func X__syscall_ret(tls *TLS, r uint32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + if r > -Uint32FromUint32(4096) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(-r) + return -int32(1) + } + return int32(r) +} + +type TElf_Symndx = uint32 + +type Tdl_phdr_info = struct { + F__ccgo_align [0]uint32 + Fdlpi_addr TElf32_Addr + Fdlpi_name uintptr + Fdlpi_phdr uintptr + Fdlpi_phnum TElf32_Half + F__ccgo_align4 [2]byte + Fdlpi_adds uint64 + Fdlpi_subs uint64 + Fdlpi_tls_modid Tsize_t + Fdlpi_tls_data uintptr +} + +type Tlink_map = struct { + Fl_addr TElf32_Addr + Fl_name uintptr + Fl_ld uintptr + Fl_next uintptr + Fl_prev uintptr +} + +type Tr_debug = struct { + Fr_version int32 + Fr_map uintptr + Fr_brk TElf32_Addr + Fr_state int32 + Fr_ldbase TElf32_Addr +} + +const _RT_CONSISTENT = 0 +const _RT_ADD = 1 +const _RT_DELETE = 2 +const VERSION = "1.2.5" + +const IPC_CREAT = 512 +const IPC_EXCL = 1024 +const IPC_INFO = 3 +const IPC_NOWAIT = 2048 +const IPC_RMID = 0 +const IPC_SET = 1 +const IPC_STAT = 258 +const __ipc_perm_key = 0 +const __ipc_perm_seq = 0 + +type Tkey_t = int32 + +type Tipc_perm = struct { + F__key Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + F__seq int32 + F__pad1 int32 + F__pad2 int32 +} + +func Xftok(tls *TLS, path uintptr, id int32) (r Tkey_t) { + if __ccgo_strace { + trc("tls=%v path=%v id=%v, (%v:)", tls, path, id, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var _ /* st at bp+0 */ Tstat + if Xstat(tls, path, bp) < 0 { + return -int32(1) + } + return int32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ino&Uint64FromInt32(0xffff) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0xff)< %v", r1) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var orig uintptr + var r int32 + var _ /* out at bp+0 */ Tmsqid_ds + _, _ = orig, r + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tmsqid_ds)(unsafe.Pointer(bp)) = Tmsqid_ds{} + orig = buf + buf = bp + } + r = int32(X__syscall3(tls, int32(SYS_msgctl), q, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(buf))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + buf = orig + *(*Tmsqid_ds)(unsafe.Pointer(buf)) = *(*Tmsqid_ds)(unsafe.Pointer(bp)) + (*Tmsqid_ds)(unsafe.Pointer(buf)).Fmsg_stime = int64((*Tmsqid_ds)(unsafe.Pointer(buf)).F__msg_stime_lo) | (0+int64((*Tmsqid_ds)(unsafe.Pointer(buf)).F__msg_stime_hi))< %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_msgget), k, flag))) +} + +func Xmsgrcv(tls *TLS, q int32, m uintptr, len1 Tsize_t, type1 int32, flag int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v type1=%v flag=%v, (%v:)", tls, q, m, len1, type1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_msgrcv), q, int32(m), int32(len1), type1, flag, 0))) +} + +func Xmsgsnd(tls *TLS, q int32, m uintptr, len1 Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v flag=%v, (%v:)", tls, q, m, len1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_msgsnd), q, int32(m), int32(len1), flag, 0, 0))) +} + +const GETALL = 13 +const GETNCNT = 14 +const GETPID = 11 +const GETVAL = 12 +const GETZCNT = 15 +const SEM_INFO = 19 +const SEM_STAT = 274 +const SEM_STAT_ANY = 276 +const SEM_UNDO = 4096 +const SETALL = 17 +const SETVAL = 16 +const _SEM_SEMUN_UNDEFINED = 1 + +type Tsemid_ds = struct { + F__ccgo_align [0]uint32 + Fsem_perm Tipc_perm + F__sem_otime_lo uint32 + F__sem_otime_hi uint32 + F__sem_ctime_lo uint32 + F__sem_ctime_hi uint32 + Fsem_nsems uint16 + F__sem_nsems_pad [2]uint8 + F__unused3 int32 + F__unused4 int32 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t +} + +type Tseminfo = struct { + Fsemmap int32 + Fsemmni int32 + Fsemmns int32 + Fsemmnu int32 + Fsemmsl int32 + Fsemopm int32 + Fsemume int32 + Fsemusz int32 + Fsemvmx int32 + Fsemaem int32 +} + +type Tsembuf = struct { + Fsem_num uint16 + Fsem_op int16 + Fsem_flg int16 +} + +type Tsemun = struct { + Fbuf [0]uintptr + Farray [0]uintptr + Fval int32 +} + +func Xsemctl(tls *TLS, id int32, num int32, cmd int32, va uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v num=%v cmd=%v va=%v, (%v:)", tls, id, num, cmd, va, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var ap Tva_list + var orig uintptr + var r int32 + var _ /* arg at bp+0 */ Tsemun + var _ /* out at bp+8 */ Tsemid_ds + _, _, _ = ap, orig, r + *(*Tsemun)(unsafe.Pointer(bp)) = Tsemun{} + *(*int32)(unsafe.Pointer(bp)) = 0 + switch cmd & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)) { + case int32(SETVAL): + fallthrough + case int32(GETALL): + fallthrough + case int32(SETALL): + fallthrough + case int32(IPC_SET): + fallthrough + case int32(IPC_INFO): + fallthrough + case int32(SEM_INFO): + fallthrough + case Int32FromInt32(IPC_STAT) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(18) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(20) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + ap = va + *(*Tsemun)(unsafe.Pointer(bp)) = *(*Tsemun)(unsafe.Pointer(VaOther(&ap, 4))) + _ = ap + } + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tsemid_ds)(unsafe.Pointer(bp + 8)) = Tsemid_ds{} + orig = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp)) = bp + 8 + } + r = int32(X__syscall4(tls, int32(SYS_semctl), id, num, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(*(*uintptr)(unsafe.Pointer(bp))))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*uintptr)(unsafe.Pointer(bp)) = orig + *(*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) = *(*Tsemid_ds)(unsafe.Pointer(bp + 8)) + (*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fsem_otime = int64((*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).F__sem_otime_lo) | (0+int64((*Tsemid_ds)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).F__sem_otime_hi))< %v", r) }() + } + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if n > int32(USHRT_MAX) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_semget), key, n, fl))) +} + +func Xsemop(tls *TLS, id int32, buf uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v, (%v:)", tls, id, buf, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_semop), id, int32(buf), int32(n)))) +} + +const NO_TIME32 = 0 +const __key = 0 +const __seq = 0 + +type Tipc_perm1 = struct { + Fkey Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + Fseq int32 + F__pad1 int32 + F__pad2 int32 +} + +type Tsemid_ds1 = struct { + F__ccgo_align [0]uint32 + Fsem_perm Tipc_perm1 + F__sem_otime_lo uint32 + F__sem_otime_hi uint32 + F__sem_ctime_lo uint32 + F__sem_ctime_hi uint32 + Fsem_nsems uint16 + F__sem_nsems_pad [2]uint8 + F__unused3 int32 + F__unused4 int32 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t +} + +func Xsemtimedop(tls *TLS, id int32, buf uintptr, n Tsize_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts=%v, (%v:)", tls, id, buf, n, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v4 uintptr + var v5 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(NO_TIME32 != 0) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_semtimedop_time64), id, int32(buf), int32(n), int32(v3))) + } + if Bool(NO_TIME32 != 0) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if ts != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v5 = uint64(s) + } else { + v5 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v5), + 1: ns, + } + v4 = bp + 16 + } else { + v4 = uintptr(0) + } + ts = v4 + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_semtimedop), id, int32(buf), int32(n), int32(ts)))) +} + +const SHMLBA = 4096 +const SHM_DEST = 512 +const SHM_EXEC = 32768 +const SHM_HUGETLB = 2048 +const SHM_HUGE_16GB = 2281701376 +const SHM_HUGE_16MB = 1610612736 +const SHM_HUGE_1GB = 2013265920 +const SHM_HUGE_1MB = 1342177280 +const SHM_HUGE_256MB = 1879048192 +const SHM_HUGE_2GB = 2080374784 +const SHM_HUGE_2MB = 1409286144 +const SHM_HUGE_32MB = 1677721600 +const SHM_HUGE_512KB = 1275068416 +const SHM_HUGE_512MB = 1946157056 +const SHM_HUGE_64KB = 1073741824 +const SHM_HUGE_8MB = 1543503872 +const SHM_HUGE_MASK = 63 +const SHM_HUGE_SHIFT = 26 +const SHM_INFO = 14 +const SHM_LOCK = 11 +const SHM_LOCKED = 1024 +const SHM_NORESERVE = 4096 +const SHM_R = 256 +const SHM_RDONLY = 4096 +const SHM_REMAP = 16384 +const SHM_RND = 8192 +const SHM_STAT = 269 +const SHM_STAT_ANY = 271 +const SHM_UNLOCK = 12 +const SHM_W = 128 + +type Tshmid_ds = struct { + F__ccgo_align [0]uint32 + Fshm_perm Tipc_perm + Fshm_segsz Tsize_t + F__shm_atime_lo uint32 + F__shm_atime_hi uint32 + F__shm_dtime_lo uint32 + F__shm_dtime_hi uint32 + F__shm_ctime_lo uint32 + F__shm_ctime_hi uint32 + Fshm_cpid Tpid_t + Fshm_lpid Tpid_t + Fshm_nattch uint32 + F__pad1 uint32 + F__pad2 uint32 + F__pad3 uint32 + Fshm_atime Ttime_t + Fshm_dtime Ttime_t + Fshm_ctime Ttime_t +} + +type Tshminfo = struct { + Fshmmax uint32 + Fshmmin uint32 + Fshmmni uint32 + Fshmseg uint32 + Fshmall uint32 + F__unused [4]uint32 +} + +type Tshm_info = struct { + F__used_ids int32 + Fshm_tot uint32 + Fshm_rss uint32 + Fshm_swp uint32 + F__swap_attempts uint32 + F__swap_successes uint32 +} + +type Tshmatt_t = uint32 + +func Xshmat(tls *TLS, id int32, addr uintptr, flag int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v id=%v addr=%v flag=%v, (%v:)", tls, id, addr, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_shmat), id, int32(addr), flag)))) +} + +func Xshmctl(tls *TLS, id int32, cmd int32, buf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v cmd=%v buf=%v, (%v:)", tls, id, cmd, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var orig uintptr + var r int32 + var _ /* out at bp+0 */ Tshmid_ds + _, _ = orig, r + if cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + *(*Tshmid_ds)(unsafe.Pointer(bp)) = Tshmid_ds{} + orig = buf + buf = bp + } + r = int32(X__syscall3(tls, int32(SYS_shmctl), id, int32(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int32(buf))) + if r >= 0 && cmd&(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) != 0 { + buf = orig + *(*Tshmid_ds)(unsafe.Pointer(buf)) = *(*Tshmid_ds)(unsafe.Pointer(bp)) + (*Tshmid_ds)(unsafe.Pointer(buf)).Fshm_atime = int64((*Tshmid_ds)(unsafe.Pointer(buf)).F__shm_atime_lo) | (0+int64((*Tshmid_ds)(unsafe.Pointer(buf)).F__shm_atime_hi))< %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_shmdt), int32(addr)))) +} + +func Xshmget(tls *TLS, key Tkey_t, size Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v size=%v flag=%v, (%v:)", tls, key, size, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size > uint32(Int32FromInt32(INT32_MAX)) { + size = Uint32FromUint32(0xffffffff) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_shmget), key, int32(size), flag))) +} + +type Tpasswd = struct { + Fpw_name uintptr + Fpw_passwd uintptr + Fpw_uid Tuid_t + Fpw_gid Tgid_t + Fpw_gecos uintptr + Fpw_dir uintptr + Fpw_shell uintptr +} + +func Xcuserid(tls *TLS, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1056) + defer tls.Free(1056) + var len1 Tsize_t + var _ /* ppw at bp+28 */ uintptr + var _ /* pw at bp+0 */ Tpasswd + var _ /* pwb at bp+32 */ [256]int32 + _ = len1 + if buf != 0 { + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + } + Xgetpwuid_r(tls, Xgeteuid(tls), bp, bp+32, uint32(1024), bp+28) + if !(*(*uintptr)(unsafe.Pointer(bp + 28)) != 0) { + return buf + } + len1 = Xstrnlen(tls, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, uint32(L_cuserid)) + if len1 == uint32(L_cuserid) { + return buf + } + if !(buf != 0) { + buf = uintptr(unsafe.Pointer(&_usridbuf)) + } + _memcpy(tls, buf, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, len1+uint32(1)) + return buf +} + +var _usridbuf [20]uint8 + +func Xvwarn(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + Xfputs(tls, __ccgo_ts+289, uintptr(unsafe.Pointer(&X__stderr_FILE))) + } + Xperror(tls, uintptr(0)) +} + +func Xvwarnx(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + } + Xputc(tls, int32('\n'), uintptr(unsafe.Pointer(&X__stderr_FILE))) +} + +func Xverr(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarn(tls, fmt, ap) + _exit(tls, status) +} + +func Xverrx(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarnx(tls, fmt, ap) + _exit(tls, status) +} + +func Xwarn(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarn(tls, fmt, ap) + _ = ap +} + +func Xwarnx(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarnx(tls, fmt, ap) + _ = ap +} + +func Xerr(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverr(tls, status, fmt, ap) + _ = ap +} + +func Xerrx(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverrx(tls, status, fmt, ap) + _ = ap +} + +func Xeuidaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfaccessat(tls, -int32(100), filename, amode, int32(AT_EACCESS)) +} + +func Xeaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xeuidaccess(tls, filename, amode) +} + +const FTW_CHDIR = 4 +const FTW_D = 2 +const FTW_DEPTH = 8 +const FTW_DNR = 3 +const FTW_DP = 6 +const FTW_F = 1 +const FTW_MOUNT = 2 +const FTW_NS = 4 +const FTW_PHYS = 1 +const FTW_SL = 5 +const FTW_SLN = 7 + +type TFTW = struct { + Fbase int32 + Flevel int32 +} + +func Xftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v, (%v:)", tls, path, fn, fd_limit, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The following cast assumes that calling a function with one + * argument more than it needs behaves as expected. This is + * actually undefined, but works on all real-world machines. */ + return Xnftw(tls, path, fn, fd_limit, int32(FTW_PHYS)) +} + +const STATX_ALL = 4095 +const STATX_ATIME = 32 +const STATX_BASIC_STATS = 2047 +const STATX_BLOCKS = 1024 +const STATX_BTIME = 2048 +const STATX_CTIME = 128 +const STATX_GID = 16 +const STATX_INO = 256 +const STATX_MODE = 2 +const STATX_MTIME = 64 +const STATX_NLINK = 4 +const STATX_SIZE = 512 +const STATX_TYPE = 1 +const STATX_UID = 8 +const S_IEXEC = 64 +const S_IREAD = 256 +const S_IWRITE = 128 + +type Tstatx_timestamp = struct { + F__ccgo_align [0]uint32 + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + F__pad Tuint32_t +} + +type Tstatx = struct { + F__ccgo_align [0]uint32 + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + F__pad0 [1]Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime Tstatx_timestamp + Fstx_btime Tstatx_timestamp + Fstx_ctime Tstatx_timestamp + Fstx_mtime Tstatx_timestamp + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + F__pad1 [14]Tuint64_t +} + +type Ttimezone = struct { + Ftz_minuteswest int32 + Ftz_dsttime int32 +} + +func Xfutimes(tls *TLS, fd int32, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tv=%v, (%v:)", tls, fd, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* times at bp+0 */ [2]Ttimespec + if !(tv != 0) { + return Xfutimens(tls, fd, uintptr(0)) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000)) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000)) + return Xfutimens(tls, fd, bp) +} + +const prlimit64 = 0 + +func Xgetdtablesize(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* rl at bp+0 */ Trlimit + _ = v1 + Xgetrlimit(tls, int32(RLIMIT_NOFILE), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur < uint64(INT_MAX) { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } else { + v1 = uint64(INT_MAX) + } + return int32(v1) +} + +func Xgetloadavg(tls *TLS, a uintptr, n int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v n=%v, (%v:)", tls, a, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var i, v1 int32 + var _ /* si at bp+0 */ Tsysinfo + _, _ = i, v1 + if n <= 0 { + if n != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 + } + Xsysinfo(tls, bp) + if n > int32(3) { + n = int32(3) + } + i = 0 + for { + if !(i < n) { + break + } + *(*float64)(unsafe.Pointer(a + uintptr(i)*8)) = Float64FromFloat64(1) / float64(Int32FromInt32(1)< %v", r) }() + } + return int32(X__libc.Fpage_size) +} + +const B0 = 0 +const B1000000 = 4104 +const B110 = 3 +const B115200 = 4098 +const B1152000 = 4105 +const B1200 = 9 +const B134 = 4 +const B150 = 5 +const B1500000 = 4106 +const B1800 = 10 +const B19200 = 14 +const B200 = 6 +const B2000000 = 4107 +const B230400 = 4099 +const B2400 = 11 +const B2500000 = 4108 +const B300 = 7 +const B3000000 = 4109 +const B3500000 = 4110 +const B38400 = 15 +const B4000000 = 4111 +const B460800 = 4100 +const B4800 = 12 +const B50 = 1 +const B500000 = 4101 +const B57600 = 4097 +const B576000 = 4102 +const B600 = 8 +const B75 = 2 +const B921600 = 4103 +const B9600 = 13 +const BRKINT = 2 +const BS0 = 0 +const BS1 = 8192 +const BSDLY = 8192 +const CBAUD = 4111 +const CBAUDEX = 4096 +const CIBAUD = 269418496 +const CLOCAL = 2048 +const CMSPAR = 1073741824 +const CR0 = 0 +const CR1 = 512 +const CR2 = 1024 +const CR3 = 1536 +const CRDLY = 1536 +const CREAD = 128 +const CRTSCTS = 2147483648 +const CS5 = 0 +const CS6 = 16 +const CS7 = 32 +const CS8 = 48 +const CSIZE = 48 +const CSTOPB = 64 +const ECHO = 8 +const ECHOCTL = 512 +const ECHOE = 16 +const ECHOK = 32 +const ECHOKE = 2048 +const ECHONL = 64 +const ECHOPRT = 1024 +const EXTA = 14 +const EXTB = 15 +const EXTPROC = 65536 +const FF0 = 0 +const FF1 = 32768 +const FFDLY = 32768 +const FLUSHO = 4096 +const HUPCL = 1024 +const ICANON = 2 +const ICRNL = 256 +const IEXTEN = 32768 +const IGNBRK = 1 +const IGNCR = 128 +const IGNPAR = 4 +const IMAXBEL = 8192 +const INLCR = 64 +const INPCK = 16 +const ISIG = 1 +const ISTRIP = 32 +const IUCLC = 512 +const IUTF8 = 16384 +const IXANY = 2048 +const IXOFF = 4096 +const IXON = 1024 +const NCCS = 32 +const NL0 = 0 +const NL1 = 256 +const NLDLY = 256 +const NOFLSH = 128 +const OCRNL = 8 +const OFDEL = 128 +const OFILL = 64 +const OLCUC = 2 +const ONLCR = 4 +const ONLRET = 32 +const ONOCR = 16 +const OPOST = 1 +const PARENB = 256 +const PARMRK = 8 +const PARODD = 512 +const PENDIN = 16384 +const TAB0 = 0 +const TAB1 = 2048 +const TAB2 = 4096 +const TAB3 = 6144 +const TABDLY = 6144 +const TCIFLUSH = 0 +const TCIOFF = 2 +const TCIOFLUSH = 2 +const TCION = 3 +const TCOFLUSH = 1 +const TCOOFF = 0 +const TCOON = 1 +const TCSADRAIN = 1 +const TCSAFLUSH = 2 +const TCSANOW = 0 +const TOSTOP = 256 +const VDISCARD = 13 +const VEOF = 4 +const VEOL = 11 +const VEOL2 = 16 +const VERASE = 2 +const VINTR = 0 +const VKILL = 3 +const VLNEXT = 15 +const VMIN = 6 +const VQUIT = 1 +const VREPRINT = 12 +const VSTART = 8 +const VSTOP = 9 +const VSUSP = 10 +const VSWTC = 7 +const VT0 = 0 +const VT1 = 16384 +const VTDLY = 16384 +const VTIME = 5 +const VWERASE = 14 +const XCASE = 4 +const XTABS = 6144 + +type Twinsize = struct { + Fws_row uint16 + Fws_col uint16 + Fws_xpixel uint16 + Fws_ypixel uint16 +} + +type Tcc_t = uint8 + +type Tspeed_t = uint32 + +type Ttcflag_t = uint32 + +type Ttermios = struct { + Fc_iflag Ttcflag_t + Fc_oflag Ttcflag_t + Fc_cflag Ttcflag_t + Fc_lflag Ttcflag_t + Fc_line Tcc_t + Fc_cc [32]Tcc_t + F__c_ispeed Tspeed_t + F__c_ospeed Tspeed_t +} + +func Xgetpass(tls *TLS, prompt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v prompt=%v, (%v:)", tls, prompt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd, v1 int32 + var l Tssize_t + var v2 uintptr + var _ /* s at bp+0 */ Ttermios + var _ /* t at bp+60 */ Ttermios + _, _, _, _ = fd, l, v1, v2 + v1 = Xopen(tls, __ccgo_ts+292, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + Xtcgetattr(tls, fd, bp+60) + *(*Ttermios)(unsafe.Pointer(bp)) = *(*Ttermios)(unsafe.Pointer(bp + 60)) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ISIG))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag |= uint32(ICANON) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag &= uint32(^(Int32FromInt32(INLCR) | Int32FromInt32(IGNCR))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag |= uint32(ICRNL) + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp+60) + Xtcdrain(tls, fd) + Xdprintf(tls, fd, __ccgo_ts+15, VaList(bp+128, prompt)) + l = Xread(tls, fd, uintptr(unsafe.Pointer(&_password)), uint32(128)) + if l >= 0 { + if l > 0 && int32(_password[l-int32(1)]) == int32('\n') || uint32(l) == uint32(128) { + l-- + } + _password[l] = uint8(0) + } + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp) + Xdprintf(tls, fd, __ccgo_ts+301, 0) + Xclose(tls, fd) + if l < 0 { + v2 = uintptr(0) + } else { + v2 = uintptr(unsafe.Pointer(&_password)) + } + return v2 +} + +var _password [128]uint8 + +var _defshells = [18]uint8{'/', 'b', 'i', 'n', '/', 's', 'h', 10, '/', 'b', 'i', 'n', '/', 'c', 's', 'h', 10} + +var _line uintptr +var _linesize Tsize_t +var _f uintptr + +func Xendusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f != 0 { + Xfclose(tls, _f) + } + _f = uintptr(0) +} + +func Xsetusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if !(_f != 0) { + _f = Xfopen(tls, __ccgo_ts+303, __ccgo_ts+315) + } + if !(_f != 0) { + _f = Xfmemopen(tls, uintptr(unsafe.Pointer(&_defshells)), Uint32FromInt64(18)-Uint32FromInt32(1), __ccgo_ts+319) + } +} + +func Xgetusershell(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tssize_t + _ = l + if !(_f != 0) { + Xsetusershell(tls) + } + if !(_f != 0) { + return uintptr(0) + } + l = Xgetline(tls, uintptr(unsafe.Pointer(&_line)), uintptr(unsafe.Pointer(&_linesize)), _f) + if l <= 0 { + return uintptr(0) + } + if int32(*(*uint8)(unsafe.Pointer(_line + uintptr(l-int32(1))))) == int32('\n') { + *(*uint8)(unsafe.Pointer(_line + uintptr(l-int32(1)))) = uint8(0) + } + return _line +} + +const ANYMARK = 1 +const FLUSHBAND = 4 +const FLUSHR = 1 +const FLUSHRW = 3 +const FLUSHW = 2 +const FMNAMESZ = 8 +const I_ATMARK = 21279 +const I_CANPUT = 21282 +const I_CKBAND = 21277 +const I_FDINSERT = 21264 +const I_FIND = 21259 +const I_FLUSH = 21253 +const I_FLUSHBAND = 21276 +const I_GETBAND = 21278 +const I_GETCLTIME = 21281 +const I_GETSIG = 21258 +const I_GRDOPT = 21255 +const I_GWROPT = 21268 +const I_LINK = 21260 +const I_LIST = 21269 +const I_LOOK = 21252 +const I_NREAD = 21249 +const I_PEEK = 21263 +const I_PLINK = 21270 +const I_POP = 21251 +const I_PUNLINK = 21271 +const I_PUSH = 21250 +const I_RECVFD = 21262 +const I_SENDFD = 21265 +const I_SETCLTIME = 21280 +const I_SETSIG = 21257 +const I_SRDOPT = 21254 +const I_STR = 21256 +const I_SWROPT = 21267 +const I_UNLINK = 21261 +const LASTMARK = 2 +const MORECTL = 1 +const MOREDATA = 2 +const MSG_ANY = 2 +const MSG_BAND = 4 +const MSG_HIPRI = 1 +const MUXID_ALL = -1 +const RMSGD = 1 +const RMSGN = 2 +const RNORM = 0 +const RPROTDAT = 4 +const RPROTDIS = 8 +const RPROTMASK = 28 +const RPROTNORM = 16 +const RS_HIPRI = 1 +const SNDPIPE = 2 +const SNDZERO = 1 +const S_BANDURG = 512 +const S_ERROR = 16 +const S_HANGUP = 32 +const S_HIPRI = 2 +const S_INPUT = 1 +const S_MSG = 8 +const S_OUTPUT = 4 +const S_RDBAND = 128 +const S_RDNORM = 64 +const S_WRBAND = 256 +const S_WRNORM = 4 +const __SID = 21248 + +type Tbandinfo = struct { + Fbi_pri uint8 + Fbi_flag int32 +} + +type Tstrbuf = struct { + Fmaxlen int32 + Flen1 int32 + Fbuf uintptr +} + +type Tstrpeek = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 +} + +type Tstrfdinsert = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 + Ffildes int32 + Foffset int32 +} + +type Tstrioctl = struct { + Fic_cmd int32 + Fic_timout int32 + Fic_len int32 + Fic_dp uintptr +} + +type Tstrrecvfd = struct { + Ffd int32 + Fuid int32 + Fgid int32 + F__fill [8]uint8 +} + +type Tstr_mlist = struct { + Fl_name [9]uint8 +} + +type Tstr_list = struct { + Fsl_nmods int32 + Fsl_modlist uintptr +} + +func Xisastream(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if Xfcntl(tls, fd, int32(F_GETFD), 0) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xlutimes(tls *TLS, filename uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v tv=%v, (%v:)", tls, filename, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + var _ /* times at bp+0 */ [2]Ttimespec + _ = v1 + if tv != 0 { + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000)) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000)) + } + if tv != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), filename, v1, int32(AT_SYMLINK_NOFOLLOW)) +} + +const UL_GETFSIZE = 1 +const UL_SETFSIZE = 2 + +func Xulimit(tls *TLS, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v va=%v, (%v:)", tls, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var val int32 + var _ /* rl at bp+0 */ Trlimit + _, _ = ap, val + Xgetrlimit(tls, int32(RLIMIT_FSIZE), bp) + if cmd == int32(UL_SETFSIZE) { + ap = va + val = VaInt32(&ap) + _ = ap + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = uint64(512) * uint64(val) + if Xsetrlimit(tls, int32(RLIMIT_FSIZE), bp) != 0 { + return -int32(1) + } + } + return int32((*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur / uint64(512)) +} + +const BOOT_TIME = 2 +const DEAD_PROCESS = 8 +const EMPTY = 0 +const INIT_PROCESS = 5 +const LOGIN_PROCESS = 6 +const NEW_TIME = 3 +const OLD_TIME = 4 +const RUN_LVL = 1 +const USER_PROCESS = 7 +const e_exit = 0 +const e_termination = 0 + +type Tutmpx = struct { + F__ccgo_align [0]uint32 + Fut_type int16 + F__ut_pad1 int16 + Fut_pid Tpid_t + Fut_line [32]uint8 + Fut_id [4]uint8 + Fut_user [32]uint8 + Fut_host [256]uint8 + Fut_exit struct { + F__e_termination int16 + F__e_exit int16 + } + Fut_session int32 + F__ut_pad2 int32 + Fut_tv Ttimeval + Fut_addr_v6 [4]uint32 + F__unused [20]uint8 + F__ccgo_pad13 [4]byte +} + +func Xendutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetutxent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xpututxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xupdwtmpx(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } +} + +func ___utmpxname(tls *TLS, f uintptr) (r int32) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return -int32(1) +} + +func Xendutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendutxent(tls) +} + +func Xgetutent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxent(tls) +} + +func Xgetutid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxid(tls, ut) +} + +func Xgetutline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxline(tls, ut) +} + +func Xpututline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xpututxline(tls, ut) +} + +func Xsetutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetutxent(tls) +} + +func Xupdwtmp(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } + Xupdwtmpx(tls, f, u) +} + +const ADJ_ESTERROR = 8 +const ADJ_FREQUENCY = 2 +const ADJ_MAXERROR = 4 +const ADJ_MICRO = 4096 +const ADJ_NANO = 8192 +const ADJ_OFFSET = 1 +const ADJ_OFFSET_SINGLESHOT = 32769 +const ADJ_OFFSET_SS_READ = 40961 +const ADJ_SETOFFSET = 256 +const ADJ_STATUS = 16 +const ADJ_TAI = 128 +const ADJ_TICK = 16384 +const ADJ_TIMECONST = 32 +const MAXTC = 6 +const MOD_CLKA = 32769 +const MOD_CLKB = 16384 +const MOD_ESTERROR = 8 +const MOD_FREQUENCY = 2 +const MOD_MAXERROR = 4 +const MOD_MICRO = 4096 +const MOD_NANO = 8192 +const MOD_OFFSET = 1 +const MOD_STATUS = 16 +const MOD_TAI = 128 +const MOD_TIMECONST = 32 +const STA_CLK = 32768 +const STA_CLOCKERR = 4096 +const STA_DEL = 32 +const STA_FLL = 8 +const STA_FREQHOLD = 128 +const STA_INS = 16 +const STA_MODE = 16384 +const STA_NANO = 8192 +const STA_PLL = 1 +const STA_PPSERROR = 2048 +const STA_PPSFREQ = 2 +const STA_PPSJITTER = 512 +const STA_PPSSIGNAL = 256 +const STA_PPSTIME = 4 +const STA_PPSWANDER = 1024 +const STA_RONLY = 65280 +const STA_UNSYNC = 64 +const TIME_BAD = 5 +const TIME_DEL = 2 +const TIME_ERROR = 5 +const TIME_INS = 1 +const TIME_OK = 0 +const TIME_OOP = 3 +const TIME_WAIT = 4 + +type Tntptimeval = struct { + F__ccgo_align [0]uint32 + Ftime Ttimeval + Fmaxerror int32 + Festerror int32 +} + +type Ttimex = struct { + F__ccgo_align [0]uint32 + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + F__ccgo_align9 [4]byte + Ftime Ttimeval + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 + F__ccgo_pad21 [4]byte +} + +func Xadjtime(tls *TLS, in uintptr, out uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v in=%v out=%v, (%v:)", tls, in, out, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1 Tsuseconds_t + var _ /* tx at bp+0 */ Ttimex + _ = v1 + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{} + if in != 0 { + if (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec > int64(1000) || (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec > int64(1000000000) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + (*(*Ttimex)(unsafe.Pointer(bp))).Foffset = int32((*Ttimeval)(unsafe.Pointer(in)).Ftv_sec*int64(1000000) + (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec) + (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes = uint32(ADJ_OFFSET_SINGLESHOT) + } + if Xadjtimex(tls, bp) < 0 { + return -int32(1) + } + if out != 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec = int64((*(*Ttimex)(unsafe.Pointer(bp))).Foffset / int32(1000000)) + v1 = int64((*(*Ttimex)(unsafe.Pointer(bp))).Foffset % Int32FromInt32(1000000)) + (*Ttimeval)(unsafe.Pointer(out)).Ftv_usec = v1 + if v1 < 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec-- + *(*Tsuseconds_t)(unsafe.Pointer(out + 8)) += int64(1000000) + } + } + return 0 +} + +func Xadjtimex(tls *TLS, tx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx=%v, (%v:)", tls, tx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclock_adjtime(tls, CLOCK_REALTIME, tx) +} + +func Xbrk(tls *TLS, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v end=%v, (%v:)", tls, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(ENOMEM))) +} + +func Xcapset(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_capset), int32(a), int32(b)))) +} + +func Xcapget(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_capget), int32(a), int32(b)))) +} + +func Xchroot(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chroot), int32(path)))) +} + +type Tktimex64 = struct { + F__ccgo_align [0]uint32 + Fmodes uint32 + F__ccgo4 uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + F__ccgo44 uint32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + F__ccgo116 uint32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +type Tktimex = struct { + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + Ftime_sec int32 + Ftime_usec int32 + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 +} + +func Xclock_adjtime(tls *TLS, clock_id Tclockid_t, utx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v utx=%v, (%v:)", tls, clock_id, utx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(336) + defer tls.Free(336) + var r int32 + var _ /* ktx at bp+0 */ Tktimex64 + var _ /* ktx at bp+208 */ Tktimex + _ = r + r = -int32(ENOSYS) + *(*Tktimex64)(unsafe.Pointer(bp)) = Tktimex64{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: int64((*Ttimex)(unsafe.Pointer(utx)).Foffset), + Ffreq: int64((*Ttimex)(unsafe.Pointer(utx)).Ffreq), + Fmaxerror: int64((*Ttimex)(unsafe.Pointer(utx)).Fmaxerror), + Festerror: int64((*Ttimex)(unsafe.Pointer(utx)).Festerror), + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: int64((*Ttimex)(unsafe.Pointer(utx)).Fconstant), + Fprecision: int64((*Ttimex)(unsafe.Pointer(utx)).Fprecision), + Ftolerance: int64((*Ttimex)(unsafe.Pointer(utx)).Ftolerance), + Ftime_sec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec, + Ftime_usec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec, + Ftick: int64((*Ttimex)(unsafe.Pointer(utx)).Ftick), + Fppsfreq: int64((*Ttimex)(unsafe.Pointer(utx)).Fppsfreq), + Fjitter: int64((*Ttimex)(unsafe.Pointer(utx)).Fjitter), + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: int64((*Ttimex)(unsafe.Pointer(utx)).Fstabil), + Fjitcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fjitcnt), + Fcalcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fcalcnt), + Ferrcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Ferrcnt), + Fstbcnt: int64((*Ttimex)(unsafe.Pointer(utx)).Fstbcnt), + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + r = int32(X__syscall2(tls, int32(SYS_clock_adjtime64), clock_id, int32(bp))) + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex64)(unsafe.Pointer(bp))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Foffset) + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ffreq) + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fmaxerror) + (*Ttimex)(unsafe.Pointer(utx)).Festerror = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Festerror) + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex64)(unsafe.Pointer(bp))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fconstant) + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fprecision) + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ftolerance) + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftime_sec + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftime_usec + (*Ttimex)(unsafe.Pointer(utx)).Ftick = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ftick) + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fppsfreq) + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fjitter) + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex64)(unsafe.Pointer(bp))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fstabil) + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fjitcnt) + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fcalcnt) + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Ferrcnt) + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = int32((*(*Tktimex64)(unsafe.Pointer(bp))).Fstbcnt) + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex64)(unsafe.Pointer(bp))).Ftai + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if (*Ttimex)(unsafe.Pointer(utx)).Fmodes&uint32(ADJ_SETOFFSET) != 0 && !!((uint64((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if uint32(8) > uint32(4) { + *(*Tktimex)(unsafe.Pointer(bp + 208)) = Tktimex{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: (*Ttimex)(unsafe.Pointer(utx)).Foffset, + Ffreq: (*Ttimex)(unsafe.Pointer(utx)).Ffreq, + Fmaxerror: (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror, + Festerror: (*Ttimex)(unsafe.Pointer(utx)).Festerror, + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: (*Ttimex)(unsafe.Pointer(utx)).Fconstant, + Fprecision: (*Ttimex)(unsafe.Pointer(utx)).Fprecision, + Ftolerance: (*Ttimex)(unsafe.Pointer(utx)).Ftolerance, + Ftime_sec: int32((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec), + Ftime_usec: int32((*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec), + Ftick: (*Ttimex)(unsafe.Pointer(utx)).Ftick, + Fppsfreq: (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq, + Fjitter: (*Ttimex)(unsafe.Pointer(utx)).Fjitter, + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: (*Ttimex)(unsafe.Pointer(utx)).Fstabil, + Fjitcnt: (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt, + Fcalcnt: (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt, + Ferrcnt: (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt, + Fstbcnt: (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt, + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + if clock_id == CLOCK_REALTIME { + r = int32(X__syscall1(tls, int32(SYS_adjtimex), int32(bp+208))) + } else { + r = int32(X__syscall2(tls, int32(SYS_clock_adjtime), clock_id, int32(bp+208))) + } + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Foffset + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ffreq + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fmaxerror + (*Ttimex)(unsafe.Pointer(utx)).Festerror = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Festerror + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fconstant + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fprecision + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftolerance + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = int64((*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftime_sec) + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = int64((*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftime_usec) + (*Ttimex)(unsafe.Pointer(utx)).Ftick = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftick + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fppsfreq + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fjitter + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstabil + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fjitcnt + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fcalcnt + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ferrcnt + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Fstbcnt + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex)(unsafe.Pointer(bp + 208))).Ftai + } + return X__syscall_ret(tls, uint32(r)) + } + if clock_id == CLOCK_REALTIME { + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_adjtimex), int32(utx)))) + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_clock_adjtime), clock_id, int32(utx)))) +} + +func Xcopy_file_range(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_copy_file_range), fd_in, int32(off_in), fd_out, int32(off_out), int32(len1), int32(flags)))) +} + +const EPOLLERR = 8 +const EPOLLET = 2147483648 +const EPOLLEXCLUSIVE = 268435456 +const EPOLLHUP = 16 +const EPOLLIN = 1 +const EPOLLMSG = 1024 +const EPOLLNVAL = 32 +const EPOLLONESHOT = 1073741824 +const EPOLLOUT = 4 +const EPOLLPRI = 2 +const EPOLLRDBAND = 128 +const EPOLLRDHUP = 8192 +const EPOLLRDNORM = 64 +const EPOLLWAKEUP = 536870912 +const EPOLLWRBAND = 512 +const EPOLLWRNORM = 256 +const EPOLL_CLOEXEC = 524288 +const EPOLL_CTL_ADD = 1 +const EPOLL_CTL_DEL = 2 +const EPOLL_CTL_MOD = 3 +const EPOLL_NONBLOCK = 2048 + +type Tfsblkcnt_t = uint64 + +type Tfsfilcnt_t = uint64 + +type _EPOLL_EVENTS = int32 + +const ___EPOLL_DUMMY = 0 + +type Tepoll_data_t = struct { + F__ccgo_align [0]uint32 + Ffd [0]int32 + Fu32 [0]Tuint32_t + Fu64 [0]Tuint64_t + Fptr uintptr + F__ccgo_pad4 [4]byte +} + +type Tepoll_data = Tepoll_data_t + +type Tepoll_event = struct { + F__ccgo_align [0]uint32 + Fevents Tuint32_t + F__ccgo_align1 [4]byte + Fdata Tepoll_data_t +} + +func Xepoll_create(tls *TLS, size int32) (r int32) { + if __ccgo_strace { + trc("tls=%v size=%v, (%v:)", tls, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size <= 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return Xepoll_create1(tls, 0) +} + +func Xepoll_create1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_epoll_create1), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int32(SYS_epoll_create), int32(Int32FromInt32(1)))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xepoll_ctl(tls *TLS, fd int32, op int32, fd2 int32, ev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v fd2=%v ev=%v, (%v:)", tls, fd, op, fd2, ev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_epoll_ctl), fd, op, fd2, int32(ev)))) +} + +func Xepoll_pwait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32, sigs uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v sigs=%v, (%v:)", tls, fd, ev, cnt, to, sigs, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(___syscall_cp(tls, int32(SYS_epoll_pwait), fd, int32(ev), cnt, to, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if r == -int32(ENOSYS) && !(sigs != 0) { + r = int32(___syscall_cp(tls, int32(SYS_epoll_wait), fd, int32(ev), cnt, to, 0, 0)) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xepoll_wait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v, (%v:)", tls, fd, ev, cnt, to, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xepoll_pwait(tls, fd, ev, cnt, to, uintptr(0)) +} + +const EFD_CLOEXEC = 524288 +const EFD_NONBLOCK = 2048 +const EFD_SEMAPHORE = 1 + +type Teventfd_t = uint64 + +func Xeventfd(tls *TLS, count uint32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v count=%v flags=%v, (%v:)", tls, count, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int32(SYS_eventfd2), int32(count), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int32(SYS_eventfd), int32(count))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xeventfd_read(tls *TLS, fd int32, value uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v value=%v, (%v:)", tls, fd, value, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if uint32(8) == uint32(Xread(tls, fd, value, uint32(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xeventfd_write(tls *TLS, fd int32, _value Teventfd_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v _value=%v, (%v:)", tls, fd, _value, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Teventfd_t)(unsafe.Pointer(bp)) = _value + var v1 int32 + _ = v1 + if uint32(8) == uint32(Xwrite(tls, fd, bp, uint32(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xfallocate(tls *TLS, fd int32, mode int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v base=%v len1=%v, (%v:)", tls, fd, mode, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_fallocate), fd, mode, int32(base), int32(len1)))) +} + +const FANOTIFY_METADATA_VERSION = 3 +const FAN_ACCESS = 1 +const FAN_ACCESS_PERM = 131072 +const FAN_ALLOW = 1 +const FAN_ALL_CLASS_BITS = 12 +const FAN_ALL_EVENTS = 59 +const FAN_ALL_INIT_FLAGS = 63 +const FAN_ALL_MARK_FLAGS = 255 +const FAN_ALL_OUTGOING_EVENTS = 213051 +const FAN_ALL_PERM_EVENTS = 196608 +const FAN_ATTRIB = 4 +const FAN_AUDIT = 16 +const FAN_CLASS_CONTENT = 4 +const FAN_CLASS_NOTIF = 0 +const FAN_CLASS_PRE_CONTENT = 8 +const FAN_CLOEXEC = 1 +const FAN_CLOSE = 24 +const FAN_CLOSE_NOWRITE = 16 +const FAN_CLOSE_WRITE = 8 +const FAN_CREATE = 256 +const FAN_DELETE = 512 +const FAN_DELETE_SELF = 1024 +const FAN_DENY = 2 +const FAN_DIR_MODIFY = 524288 +const FAN_ENABLE_AUDIT = 64 +const FAN_EVENT_INFO_TYPE_DFID = 3 +const FAN_EVENT_INFO_TYPE_DFID_NAME = 2 +const FAN_EVENT_INFO_TYPE_FID = 1 +const FAN_EVENT_METADATA_LEN = 0 +const FAN_EVENT_ON_CHILD = 134217728 +const FAN_MARK_ADD = 1 +const FAN_MARK_DONT_FOLLOW = 4 +const FAN_MARK_FILESYSTEM = 256 +const FAN_MARK_FLUSH = 128 +const FAN_MARK_IGNORED_MASK = 32 +const FAN_MARK_IGNORED_SURV_MODIFY = 64 +const FAN_MARK_INODE = 0 +const FAN_MARK_MOUNT = 16 +const FAN_MARK_ONLYDIR = 8 +const FAN_MARK_REMOVE = 2 +const FAN_MARK_TYPE_MASK = 272 +const FAN_MODIFY = 2 +const FAN_MOVE = 192 +const FAN_MOVED_FROM = 64 +const FAN_MOVED_TO = 128 +const FAN_MOVE_SELF = 2048 +const FAN_NOFD = -1 +const FAN_NONBLOCK = 2 +const FAN_ONDIR = 1073741824 +const FAN_OPEN = 32 +const FAN_OPEN_EXEC = 4096 +const FAN_OPEN_EXEC_PERM = 262144 +const FAN_OPEN_PERM = 65536 +const FAN_Q_OVERFLOW = 16384 +const FAN_REPORT_DFID_NAME = 3072 +const FAN_REPORT_DIR_FID = 1024 +const FAN_REPORT_FID = 512 +const FAN_REPORT_NAME = 2048 +const FAN_REPORT_TID = 256 +const FAN_UNLIMITED_MARKS = 32 +const FAN_UNLIMITED_QUEUE = 16 +const ST_APPEND = 256 +const ST_IMMUTABLE = 512 +const ST_MANDLOCK = 64 +const ST_NOATIME = 1024 +const ST_NODEV = 4 +const ST_NODIRATIME = 2048 +const ST_NOEXEC = 8 +const ST_NOSUID = 2 +const ST_RDONLY = 1 +const ST_RELATIME = 4096 +const ST_SYNCHRONOUS = 16 +const ST_WRITE = 128 + +type Tstatvfs = struct { + F__ccgo_align [0]uint32 + Ff_bsize uint32 + Ff_frsize uint32 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_favail Tfsfilcnt_t + Ff_fsid uint32 + F__ccgo60 uint32 + Ff_flag uint32 + Ff_namemax uint32 + Ff_type uint32 + F__reserved [5]int32 +} + +type Tfsid_t = struct { + F__val [2]int32 +} + +type t__fsid_t = Tfsid_t + +type Tstatfs = struct { + F__ccgo_align [0]uint32 + Ff_type uint32 + Ff_bsize uint32 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_fsid Tfsid_t + Ff_namelen uint32 + Ff_frsize uint32 + Ff_flags uint32 + Ff_spare [4]uint32 + F__ccgo_pad12 [4]byte +} + +type Tfanotify_event_metadata = struct { + F__ccgo_align [0]uint32 + Fevent_len uint32 + Fvers uint8 + Freserved uint8 + Fmetadata_len uint16 + Fmask uint64 + Ffd int32 + Fpid int32 +} + +type Tfanotify_event_info_header = struct { + Finfo_type uint8 + Fpad uint8 + Flen1 uint16 +} + +type Tfanotify_event_info_fid = struct { + Fhdr Tfanotify_event_info_header + Ffsid Tfsid_t +} + +type Tfanotify_response = struct { + Ffd int32 + Fresponse uint32 +} + +func Xfanotify_init(tls *TLS, flags uint32, event_f_flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v event_f_flags=%v, (%v:)", tls, flags, event_f_flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_fanotify_init), int32(flags), int32(event_f_flags)))) +} + +func Xfanotify_mark(tls *TLS, fanotify_fd int32, flags uint32, mask uint64, dfd int32, pathname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fanotify_fd=%v flags=%v mask=%v dfd=%v pathname=%v, (%v:)", tls, fanotify_fd, flags, mask, dfd, pathname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fanotify_mark), fanotify_fd, int32(flags), int32(mask), dfd, int32(pathname)))) +} + +const LOCK_EX = 2 +const LOCK_NB = 4 +const LOCK_SH = 1 +const LOCK_UN = 8 + +func Xflock(tls *TLS, fd int32, op int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v, (%v:)", tls, fd, op, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_flock), fd, op))) +} + +func Xgetdents(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + if len1 > uint32(INT_MAX) { + len1 = uint32(INT_MAX) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getdents64), fd, int32(buf), int32(len1)))) +} + +const GRND_INSECURE = 4 +const GRND_NONBLOCK = 1 +const GRND_RANDOM = 2 + +func Xgetrandom(tls *TLS, buf uintptr, buflen Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v buf=%v buflen=%v flags=%v, (%v:)", tls, buf, buflen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_getrandom), int32(buf), int32(buflen), int32(flags), 0, 0, 0))) +} + +const IN_ACCESS = 1 +const IN_ALL_EVENTS = 4095 +const IN_ATTRIB = 4 +const IN_CLOEXEC = 524288 +const IN_CLOSE = 24 +const IN_CLOSE_NOWRITE = 16 +const IN_CLOSE_WRITE = 8 +const IN_CREATE = 256 +const IN_DELETE = 512 +const IN_DELETE_SELF = 1024 +const IN_DONT_FOLLOW = 33554432 +const IN_EXCL_UNLINK = 67108864 +const IN_IGNORED = 32768 +const IN_ISDIR = 1073741824 +const IN_MASK_ADD = 536870912 +const IN_MASK_CREATE = 268435456 +const IN_MODIFY = 2 +const IN_MOVE = 192 +const IN_MOVED_FROM = 64 +const IN_MOVED_TO = 128 +const IN_MOVE_SELF = 2048 +const IN_NONBLOCK = 2048 +const IN_ONESHOT = 2147483648 +const IN_ONLYDIR = 16777216 +const IN_OPEN = 32 +const IN_Q_OVERFLOW = 16384 +const IN_UNMOUNT = 8192 + +type Tinotify_event = struct { + Fwd int32 + Fmask Tuint32_t + Fcookie Tuint32_t + Flen1 Tuint32_t +} + +func Xinotify_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xinotify_init1(tls, 0) +} + +func Xinotify_init1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_inotify_init1), flags)) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall0(tls, int32(SYS_inotify_init))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xinotify_add_watch(tls *TLS, fd int32, pathname uintptr, mask Tuint32_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pathname=%v mask=%v, (%v:)", tls, fd, pathname, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_inotify_add_watch), fd, int32(pathname), int32(mask)))) +} + +func Xinotify_rm_watch(tls *TLS, fd int32, wd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wd=%v, (%v:)", tls, fd, wd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_inotify_rm_watch), fd, wd))) +} + +func Xklogctl(tls *TLS, type1 int32, buf uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v buf=%v len1=%v, (%v:)", tls, type1, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_syslog), type1, int32(buf), len1))) +} + +const MADV_COLD = 20 +const MADV_DODUMP = 17 +const MADV_DOFORK = 11 +const MADV_DONTDUMP = 16 +const MADV_DONTFORK = 10 +const MADV_DONTNEED = 4 +const MADV_FREE = 8 +const MADV_HUGEPAGE = 14 +const MADV_HWPOISON = 100 +const MADV_KEEPONFORK = 19 +const MADV_MERGEABLE = 12 +const MADV_NOHUGEPAGE = 15 +const MADV_NORMAL = 0 +const MADV_PAGEOUT = 21 +const MADV_RANDOM = 1 +const MADV_REMOVE = 9 +const MADV_SEQUENTIAL = 2 +const MADV_SOFT_OFFLINE = 101 +const MADV_UNMERGEABLE = 13 +const MADV_WILLNEED = 3 +const MADV_WIPEONFORK = 18 +const MFD_ALLOW_SEALING = 2 +const MFD_CLOEXEC = 1 +const MFD_HUGETLB = 4 +const MLOCK_ONFAULT = 1 +const MREMAP_DONTUNMAP = 4 +const MREMAP_FIXED = 2 +const MREMAP_MAYMOVE = 1 +const _GNU_SOURCE = 1 + +func Xmemfd_create(tls *TLS, name uintptr, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flags=%v, (%v:)", tls, name, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_memfd_create), int32(name), int32(flags)))) +} + +func Xmlock2(tls *TLS, addr uintptr, len1 Tsize_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v flags=%v, (%v:)", tls, addr, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if flags == uint32(0) { + return Xmlock(tls, addr, len1) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mlock2), int32(addr), int32(len1), int32(flags)))) +} + +func Xinit_module(tls *TLS, a uintptr, b uint32, c uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v, (%v:)", tls, a, b, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_init_module), int32(a), int32(b), int32(c)))) +} + +func Xdelete_module(tls *TLS, a uintptr, b uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_delete_module), int32(a), int32(b)))) +} + +const BLKBSZGET = 2147488368 +const BLKBSZSET = 1073746545 +const BLKFLSBUF = 4705 +const BLKFRAGET = 4709 +const BLKFRASET = 4708 +const BLKGETSIZE = 4704 +const BLKGETSIZE64 = 2147488370 +const BLKRAGET = 4707 +const BLKRASET = 4706 +const BLKROGET = 4702 +const BLKROSET = 4701 +const BLKRRPART = 4703 +const BLKSECTGET = 4711 +const BLKSECTSET = 4710 +const BLKSSZGET = 4712 +const FIOASYNC = 21586 +const FIOCLEX = 21585 +const FIOGETOWN = 35075 +const FIONBIO = 21537 +const FIONCLEX = 21584 +const FIONREAD = 21531 +const FIOSETOWN = 35073 +const MNT_DETACH = 2 +const MNT_EXPIRE = 4 +const MNT_FORCE = 1 +const MS_ACTIVE = 1073741824 +const MS_BIND = 4096 +const MS_BORN = 536870912 +const MS_DIRSYNC = 128 +const MS_I_VERSION = 8388608 +const MS_KERNMOUNT = 4194304 +const MS_LAZYTIME = 33554432 +const MS_MANDLOCK = 64 +const MS_MGC_MSK = 4294901760 +const MS_MGC_VAL = 3236757504 +const MS_MOVE = 8192 +const MS_NOATIME = 1024 +const MS_NODEV = 4 +const MS_NODIRATIME = 2048 +const MS_NOEXEC = 8 +const MS_NOREMOTELOCK = 134217728 +const MS_NOSEC = 268435456 +const MS_NOSUID = 2 +const MS_NOSYMFOLLOW = 256 +const MS_NOUSER = 2147483648 +const MS_POSIXACL = 65536 +const MS_PRIVATE = 262144 +const MS_RDONLY = 1 +const MS_REC = 16384 +const MS_RELATIME = 2097152 +const MS_REMOUNT = 32 +const MS_RMT_MASK = 41943121 +const MS_SHARED = 1048576 +const MS_SILENT = 32768 +const MS_SLAVE = 524288 +const MS_STRICTATIME = 16777216 +const MS_SYNCHRONOUS = 16 +const MS_UNBINDABLE = 131072 +const N_6PACK = 7 +const N_AX25 = 5 +const N_CAIF = 20 +const N_GIGASET_M101 = 16 +const N_GSM0710 = 21 +const N_HCI = 15 +const N_HDLC = 13 +const N_IRDA = 11 +const N_MASC = 8 +const N_MOUSE = 2 +const N_NCI = 25 +const N_NULL = 27 +const N_PPP = 3 +const N_PPS = 18 +const N_PROFIBUS_FDL = 10 +const N_R3964 = 9 +const N_SLCAN = 17 +const N_SLIP = 1 +const N_SMSBLOCK = 12 +const N_SPEAKUP = 26 +const N_STRIP = 4 +const N_SYNC_PPP = 14 +const N_TI_WL = 22 +const N_TRACEROUTER = 24 +const N_TRACESINK = 23 +const N_TTY = 0 +const N_V253 = 19 +const N_X25 = 6 +const SIOCADDDLCI = 35200 +const SIOCADDMULTI = 35121 +const SIOCADDRT = 35083 +const SIOCATMARK = 35077 +const SIOCDARP = 35155 +const SIOCDELDLCI = 35201 +const SIOCDELMULTI = 35122 +const SIOCDELRT = 35084 +const SIOCDEVPRIVATE = 35312 +const SIOCDIFADDR = 35126 +const SIOCDRARP = 35168 +const SIOCGARP = 35156 +const SIOCGIFADDR = 35093 +const SIOCGIFBR = 35136 +const SIOCGIFBRDADDR = 35097 +const SIOCGIFCONF = 35090 +const SIOCGIFCOUNT = 35128 +const SIOCGIFDSTADDR = 35095 +const SIOCGIFENCAP = 35109 +const SIOCGIFFLAGS = 35091 +const SIOCGIFHWADDR = 35111 +const SIOCGIFINDEX = 35123 +const SIOCGIFMAP = 35184 +const SIOCGIFMEM = 35103 +const SIOCGIFMETRIC = 35101 +const SIOCGIFMTU = 35105 +const SIOCGIFNAME = 35088 +const SIOCGIFNETMASK = 35099 +const SIOCGIFPFLAGS = 35125 +const SIOCGIFSLAVE = 35113 +const SIOCGIFTXQLEN = 35138 +const SIOCGPGRP = 35076 +const SIOCGRARP = 35169 +const SIOCGSTAMP = 2147518726 +const SIOCGSTAMPNS = 2147518727 +const SIOCPROTOPRIVATE = 35296 +const SIOCRTMSG = 35085 +const SIOCSARP = 35157 +const SIOCSIFADDR = 35094 +const SIOCSIFBR = 35137 +const SIOCSIFBRDADDR = 35098 +const SIOCSIFDSTADDR = 35096 +const SIOCSIFENCAP = 35110 +const SIOCSIFFLAGS = 35092 +const SIOCSIFHWADDR = 35108 +const SIOCSIFHWBROADCAST = 35127 +const SIOCSIFLINK = 35089 +const SIOCSIFMAP = 35185 +const SIOCSIFMEM = 35104 +const SIOCSIFMETRIC = 35102 +const SIOCSIFMTU = 35106 +const SIOCSIFNAME = 35107 +const SIOCSIFNETMASK = 35100 +const SIOCSIFPFLAGS = 35124 +const SIOCSIFSLAVE = 35120 +const SIOCSIFTXQLEN = 35139 +const SIOCSPGRP = 35074 +const SIOCSRARP = 35170 +const SIOGIFINDEX = 35123 +const TCFLSH = 21515 +const TCGETA = 21509 +const TCGETS = 21505 +const TCGETX = 21554 +const TCSBRK = 21513 +const TCSBRKP = 21541 +const TCSETA = 21510 +const TCSETAF = 21512 +const TCSETAW = 21511 +const TCSETS = 21506 +const TCSETSF = 21508 +const TCSETSW = 21507 +const TCSETX = 21555 +const TCSETXF = 21556 +const TCSETXW = 21557 +const TCXONC = 21514 +const TIOCCBRK = 21544 +const TIOCCONS = 21533 +const TIOCEXCL = 21516 +const TIOCGDEV = 2147767346 +const TIOCGETD = 21540 +const TIOCGEXCL = 2147767360 +const TIOCGICOUNT = 21597 +const TIOCGISO7816 = 2150126658 +const TIOCGLCKTRMIOS = 21590 +const TIOCGPGRP = 21519 +const TIOCGPKT = 2147767352 +const TIOCGPTLCK = 2147767353 +const TIOCGPTN = 2147767344 +const TIOCGPTPEER = 21569 +const TIOCGRS485 = 21550 +const TIOCGSERIAL = 21534 +const TIOCGSID = 21545 +const TIOCGSOFTCAR = 21529 +const TIOCGWINSZ = 21523 +const TIOCINQ = 21531 +const TIOCLINUX = 21532 +const TIOCMBIC = 21527 +const TIOCMBIS = 21526 +const TIOCMGET = 21525 +const TIOCMIWAIT = 21596 +const TIOCMSET = 21528 +const TIOCM_CAR = 64 +const TIOCM_CD = 64 +const TIOCM_CTS = 32 +const TIOCM_DSR = 256 +const TIOCM_DTR = 2 +const TIOCM_LE = 1 +const TIOCM_LOOP = 32768 +const TIOCM_OUT1 = 8192 +const TIOCM_OUT2 = 16384 +const TIOCM_RI = 128 +const TIOCM_RNG = 128 +const TIOCM_RTS = 4 +const TIOCM_SR = 16 +const TIOCM_ST = 8 +const TIOCNOTTY = 21538 +const TIOCNXCL = 21517 +const TIOCOUTQ = 21521 +const TIOCPKT = 21536 +const TIOCPKT_DATA = 0 +const TIOCPKT_DOSTOP = 32 +const TIOCPKT_FLUSHREAD = 1 +const TIOCPKT_FLUSHWRITE = 2 +const TIOCPKT_IOCTL = 64 +const TIOCPKT_NOSTOP = 16 +const TIOCPKT_START = 8 +const TIOCPKT_STOP = 4 +const TIOCSBRK = 21543 +const TIOCSCTTY = 21518 +const TIOCSERCONFIG = 21587 +const TIOCSERGETLSR = 21593 +const TIOCSERGETMULTI = 21594 +const TIOCSERGSTRUCT = 21592 +const TIOCSERGWILD = 21588 +const TIOCSERSETMULTI = 21595 +const TIOCSERSWILD = 21589 +const TIOCSER_TEMT = 1 +const TIOCSETD = 21539 +const TIOCSIG = 1074025526 +const TIOCSISO7816 = 3223868483 +const TIOCSLCKTRMIOS = 21591 +const TIOCSPGRP = 21520 +const TIOCSPTLCK = 1074025521 +const TIOCSRS485 = 21551 +const TIOCSSERIAL = 21535 +const TIOCSSOFTCAR = 21530 +const TIOCSTI = 21522 +const TIOCSWINSZ = 21524 +const TIOCVHANGUP = 21559 +const UMOUNT_NOFOLLOW = 8 +const _IOC_NONE = 0 +const _IOC_READ = 2 +const _IOC_WRITE = 1 + +func Xmount(tls *TLS, special uintptr, dir uintptr, fstype uintptr, flags uint32, data uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v dir=%v fstype=%v flags=%v data=%v, (%v:)", tls, special, dir, fstype, flags, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_mount), int32(special), int32(dir), int32(fstype), int32(flags), int32(data)))) +} + +func Xumount(tls *TLS, special uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v, (%v:)", tls, special, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_umount2), int32(special), int32(Int32FromInt32(0))))) +} + +func Xumount2(tls *TLS, special uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v flags=%v, (%v:)", tls, special, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_umount2), int32(special), flags))) +} + +func Xname_to_handle_at(tls *TLS, dirfd int32, pathname uintptr, handle uintptr, mount_id uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v handle=%v mount_id=%v flags=%v, (%v:)", tls, dirfd, pathname, handle, mount_id, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_name_to_handle_at), dirfd, int32(pathname), int32(handle), int32(mount_id), flags))) +} + +func Xopen_by_handle_at(tls *TLS, mount_fd int32, handle uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mount_fd=%v handle=%v flags=%v, (%v:)", tls, mount_fd, handle, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open_by_handle_at), mount_fd, int32(handle), flags))) +} + +const ADDR_COMPAT_LAYOUT = 2097152 +const ADDR_LIMIT_32BIT = 8388608 +const ADDR_LIMIT_3GB = 134217728 +const ADDR_NO_RANDOMIZE = 262144 +const FDPIC_FUNCPTRS = 524288 +const MMAP_PAGE_ZERO = 1048576 +const PER_BSD = 6 +const PER_HPUX = 16 +const PER_IRIX32 = 67108873 +const PER_IRIX64 = 67108875 +const PER_IRIXN32 = 67108874 +const PER_ISCR4 = 67108869 +const PER_LINUX = 0 +const PER_LINUX32 = 8 +const PER_LINUX32_3GB = 134217736 +const PER_LINUX_32BIT = 8388608 +const PER_LINUX_FDPIC = 524288 +const PER_MASK = 255 +const PER_OSF4 = 15 +const PER_OSR5 = 100663299 +const PER_RISCOS = 12 +const PER_SCOSVR3 = 117440515 +const PER_SOLARIS = 67108877 +const PER_SUNOS = 67108870 +const PER_SVR3 = 83886082 +const PER_SVR4 = 68157441 +const PER_UW7 = 68157454 +const PER_WYSEV386 = 83886084 +const PER_XENIX = 83886087 +const READ_IMPLIES_EXEC = 4194304 +const SHORT_INODE = 16777216 +const STICKY_TIMEOUTS = 67108864 +const UNAME26 = 131072 +const WHOLE_SECONDS = 33554432 + +func Xpersonality(tls *TLS, persona uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v persona=%v, (%v:)", tls, persona, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_personality), int32(persona)))) +} + +func Xpivot_root(tls *TLS, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v new1=%v old=%v, (%v:)", tls, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_pivot_root), int32(new1), int32(old)))) +} + +const PR_CAPBSET_DROP = 24 +const PR_CAPBSET_READ = 23 +const PR_CAP_AMBIENT = 47 +const PR_CAP_AMBIENT_CLEAR_ALL = 4 +const PR_CAP_AMBIENT_IS_SET = 1 +const PR_CAP_AMBIENT_LOWER = 3 +const PR_CAP_AMBIENT_RAISE = 2 +const PR_ENDIAN_BIG = 0 +const PR_ENDIAN_LITTLE = 1 +const PR_ENDIAN_PPC_LITTLE = 2 +const PR_FPEMU_NOPRINT = 1 +const PR_FPEMU_SIGFPE = 2 +const PR_FP_EXC_ASYNC = 2 +const PR_FP_EXC_DISABLED = 0 +const PR_FP_EXC_DIV = 65536 +const PR_FP_EXC_INV = 1048576 +const PR_FP_EXC_NONRECOV = 1 +const PR_FP_EXC_OVF = 131072 +const PR_FP_EXC_PRECISE = 3 +const PR_FP_EXC_RES = 524288 +const PR_FP_EXC_SW_ENABLE = 128 +const PR_FP_EXC_UND = 262144 +const PR_FP_MODE_FR = 1 +const PR_FP_MODE_FRE = 2 +const PR_GET_CHILD_SUBREAPER = 37 +const PR_GET_DUMPABLE = 3 +const PR_GET_ENDIAN = 19 +const PR_GET_FPEMU = 9 +const PR_GET_FPEXC = 11 +const PR_GET_FP_MODE = 46 +const PR_GET_IO_FLUSHER = 58 +const PR_GET_KEEPCAPS = 7 +const PR_GET_NAME = 16 +const PR_GET_NO_NEW_PRIVS = 39 +const PR_GET_PDEATHSIG = 2 +const PR_GET_SECCOMP = 21 +const PR_GET_SECUREBITS = 27 +const PR_GET_SPECULATION_CTRL = 52 +const PR_GET_TAGGED_ADDR_CTRL = 56 +const PR_GET_THP_DISABLE = 42 +const PR_GET_TID_ADDRESS = 40 +const PR_GET_TIMERSLACK = 30 +const PR_GET_TIMING = 13 +const PR_GET_TSC = 25 +const PR_GET_UNALIGN = 5 +const PR_MCE_KILL = 33 +const PR_MCE_KILL_CLEAR = 0 +const PR_MCE_KILL_DEFAULT = 2 +const PR_MCE_KILL_EARLY = 1 +const PR_MCE_KILL_GET = 34 +const PR_MCE_KILL_LATE = 0 +const PR_MCE_KILL_SET = 1 +const PR_MPX_DISABLE_MANAGEMENT = 44 +const PR_MPX_ENABLE_MANAGEMENT = 43 +const PR_MTE_TAG_MASK = 524280 +const PR_MTE_TAG_SHIFT = 3 +const PR_MTE_TCF_ASYNC = 4 +const PR_MTE_TCF_MASK = 6 +const PR_MTE_TCF_NONE = 0 +const PR_MTE_TCF_SHIFT = 1 +const PR_MTE_TCF_SYNC = 2 +const PR_PAC_APDAKEY = 4 +const PR_PAC_APDBKEY = 8 +const PR_PAC_APGAKEY = 16 +const PR_PAC_APIAKEY = 1 +const PR_PAC_APIBKEY = 2 +const PR_PAC_GET_ENABLED_KEYS = 61 +const PR_PAC_RESET_KEYS = 54 +const PR_PAC_SET_ENABLED_KEYS = 60 +const PR_SET_CHILD_SUBREAPER = 36 +const PR_SET_DUMPABLE = 4 +const PR_SET_ENDIAN = 20 +const PR_SET_FPEMU = 10 +const PR_SET_FPEXC = 12 +const PR_SET_FP_MODE = 45 +const PR_SET_IO_FLUSHER = 57 +const PR_SET_KEEPCAPS = 8 +const PR_SET_MM = 35 +const PR_SET_MM_ARG_END = 9 +const PR_SET_MM_ARG_START = 8 +const PR_SET_MM_AUXV = 12 +const PR_SET_MM_BRK = 7 +const PR_SET_MM_END_CODE = 2 +const PR_SET_MM_END_DATA = 4 +const PR_SET_MM_ENV_END = 11 +const PR_SET_MM_ENV_START = 10 +const PR_SET_MM_EXE_FILE = 13 +const PR_SET_MM_MAP = 14 +const PR_SET_MM_MAP_SIZE = 15 +const PR_SET_MM_START_BRK = 6 +const PR_SET_MM_START_CODE = 1 +const PR_SET_MM_START_DATA = 3 +const PR_SET_MM_START_STACK = 5 +const PR_SET_NAME = 15 +const PR_SET_NO_NEW_PRIVS = 38 +const PR_SET_PDEATHSIG = 1 +const PR_SET_PTRACER = 1499557217 +const PR_SET_PTRACER_ANY = 18446744073709551615 +const PR_SET_SECCOMP = 22 +const PR_SET_SECUREBITS = 28 +const PR_SET_SPECULATION_CTRL = 53 +const PR_SET_SYSCALL_USER_DISPATCH = 59 +const PR_SET_TAGGED_ADDR_CTRL = 55 +const PR_SET_THP_DISABLE = 41 +const PR_SET_TIMERSLACK = 29 +const PR_SET_TIMING = 14 +const PR_SET_TSC = 26 +const PR_SET_UNALIGN = 6 +const PR_SPEC_DISABLE = 4 +const PR_SPEC_DISABLE_NOEXEC = 16 +const PR_SPEC_ENABLE = 2 +const PR_SPEC_FORCE_DISABLE = 8 +const PR_SPEC_INDIRECT_BRANCH = 1 +const PR_SPEC_NOT_AFFECTED = 0 +const PR_SPEC_PRCTL = 1 +const PR_SPEC_STORE_BYPASS = 0 +const PR_SVE_GET_VL = 51 +const PR_SVE_SET_VL = 50 +const PR_SVE_SET_VL_ONEXEC = 262144 +const PR_SVE_VL_INHERIT = 131072 +const PR_SVE_VL_LEN_MASK = 65535 +const PR_SYS_DISPATCH_OFF = 0 +const PR_SYS_DISPATCH_ON = 1 +const PR_TAGGED_ADDR_ENABLE = 1 +const PR_TASK_PERF_EVENTS_DISABLE = 31 +const PR_TASK_PERF_EVENTS_ENABLE = 32 +const PR_TIMING_STATISTICAL = 0 +const PR_TIMING_TIMESTAMP = 1 +const PR_TSC_ENABLE = 1 +const PR_TSC_SIGSEGV = 2 +const PR_UNALIGN_NOPRINT = 1 +const PR_UNALIGN_SIGBUS = 2 +const SYSCALL_DISPATCH_FILTER_ALLOW = 0 +const SYSCALL_DISPATCH_FILTER_BLOCK = 1 + +type Tprctl_mm_map = struct { + F__ccgo_align [0]uint32 + Fstart_code Tuint64_t + Fend_code Tuint64_t + Fstart_data Tuint64_t + Fend_data Tuint64_t + Fstart_brk Tuint64_t + Fbrk Tuint64_t + Fstart_stack Tuint64_t + Farg_start Tuint64_t + Farg_end Tuint64_t + Fenv_start Tuint64_t + Fenv_end Tuint64_t + Fauxv uintptr + Fauxv_size Tuint32_t + Fexe_fd Tuint32_t + F__ccgo_pad14 [4]byte +} + +func Xprctl(tls *TLS, op int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v va=%v, (%v:)", tls, op, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var i int32 + var x [4]uint32 + _, _, _ = ap, i, x + ap = va + i = 0 + for { + if !(i < int32(4)) { + break + } + x[i] = VaUint32(&ap) + goto _1 + _1: + ; + i++ + } + _ = ap + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_prctl), op, int32(x[0]), int32(x[int32(1)]), int32(x[int32(2)]), int32(x[int32(3)])))) +} + +const RWF_APPEND = 16 +const RWF_DSYNC = 2 +const RWF_HIPRI = 1 +const RWF_NOWAIT = 8 +const RWF_SYNC = 4 +const UIO_MAXIOV = 1024 + +func Xpreadv2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xreadv(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv2), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), flags))) +} + +func Xprlimit(tls *TLS, pid Tpid_t, resource int32, new_limit uintptr, old_limit uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v resource=%v new_limit=%v old_limit=%v, (%v:)", tls, pid, resource, new_limit, old_limit, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tmp at bp+0 */ Trlimit + _ = r + if new_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(new_limit)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + new_limit = bp + } + r = X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_prlimit64), pid, resource, int32(new_limit), int32(old_limit)))) + if !(r != 0) && old_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max = ^Uint64FromUint64(0) + } + } + return r +} + +func Xprocess_vm_writev(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint32, rvec uintptr, riovcnt uint32, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_process_vm_writev), pid, int32(lvec), int32(liovcnt), int32(rvec), int32(riovcnt), int32(flags)))) +} + +func Xprocess_vm_readv(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint32, rvec uintptr, riovcnt uint32, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_process_vm_readv), pid, int32(lvec), int32(liovcnt), int32(rvec), int32(riovcnt), int32(flags)))) +} + +const PTRACE_ATTACH = 16 +const PTRACE_CONT = 7 +const PTRACE_DETACH = 17 +const PTRACE_EVENT_CLONE = 3 +const PTRACE_EVENT_EXEC = 4 +const PTRACE_EVENT_EXIT = 6 +const PTRACE_EVENT_FORK = 1 +const PTRACE_EVENT_SECCOMP = 7 +const PTRACE_EVENT_STOP = 128 +const PTRACE_EVENT_VFORK = 2 +const PTRACE_EVENT_VFORK_DONE = 5 +const PTRACE_GETCRUNCHREGS = 25 +const PTRACE_GETEVENTMSG = 16897 +const PTRACE_GETFDPIC = 31 +const PTRACE_GETFDPIC_EXEC = 0 +const PTRACE_GETFDPIC_INTERP = 1 +const PTRACE_GETFPREGS = 14 +const PTRACE_GETFPXREGS = 18 +const PTRACE_GETHBPREGS = 29 +const PTRACE_GETREGS = 12 +const PTRACE_GETREGSET = 16900 +const PTRACE_GETSIGINFO = 16898 +const PTRACE_GETSIGMASK = 16906 +const PTRACE_GETVFPREGS = 27 +const PTRACE_GETWMMXREGS = 18 +const PTRACE_GET_RSEQ_CONFIGURATION = 16911 +const PTRACE_GET_SYSCALL_INFO = 16910 +const PTRACE_GET_THREAD_AREA = 22 +const PTRACE_INTERRUPT = 16903 +const PTRACE_KILL = 8 +const PTRACE_LISTEN = 16904 +const PTRACE_O_EXITKILL = 1048576 +const PTRACE_O_MASK = 3145983 +const PTRACE_O_SUSPEND_SECCOMP = 2097152 +const PTRACE_O_TRACECLONE = 8 +const PTRACE_O_TRACEEXEC = 16 +const PTRACE_O_TRACEEXIT = 64 +const PTRACE_O_TRACEFORK = 2 +const PTRACE_O_TRACESECCOMP = 128 +const PTRACE_O_TRACESYSGOOD = 1 +const PTRACE_O_TRACEVFORK = 4 +const PTRACE_O_TRACEVFORKDONE = 32 +const PTRACE_PEEKDATA = 2 +const PTRACE_PEEKSIGINFO = 16905 +const PTRACE_PEEKSIGINFO_SHARED = 1 +const PTRACE_PEEKTEXT = 1 +const PTRACE_PEEKUSER = 3 +const PTRACE_POKEDATA = 5 +const PTRACE_POKETEXT = 4 +const PTRACE_POKEUSER = 6 +const PTRACE_SECCOMP_GET_FILTER = 16908 +const PTRACE_SECCOMP_GET_METADATA = 16909 +const PTRACE_SEIZE = 16902 +const PTRACE_SETCRUNCHREGS = 26 +const PTRACE_SETFPREGS = 15 +const PTRACE_SETFPXREGS = 19 +const PTRACE_SETHBPREGS = 30 +const PTRACE_SETOPTIONS = 16896 +const PTRACE_SETREGS = 13 +const PTRACE_SETREGSET = 16901 +const PTRACE_SETSIGINFO = 16899 +const PTRACE_SETSIGMASK = 16907 +const PTRACE_SETVFPREGS = 28 +const PTRACE_SETWMMXREGS = 19 +const PTRACE_SET_SYSCALL = 23 +const PTRACE_SINGLESTEP = 9 +const PTRACE_SYSCALL = 24 +const PTRACE_SYSCALL_INFO_ENTRY = 1 +const PTRACE_SYSCALL_INFO_EXIT = 2 +const PTRACE_SYSCALL_INFO_NONE = 0 +const PTRACE_SYSCALL_INFO_SECCOMP = 3 +const PTRACE_TRACEME = 0 +const PT_ATTACH = 16 +const PT_CONTINUE = 7 +const PT_DETACH = 17 +const PT_GETCRUNCHREGS = 25 +const PT_GETEVENTMSG = 16897 +const PT_GETFDPIC = 31 +const PT_GETFPREGS = 14 +const PT_GETFPXREGS = 18 +const PT_GETHBPREGS = 29 +const PT_GETREGS = 12 +const PT_GETSIGINFO = 16898 +const PT_GETVFPREGS = 27 +const PT_GETWMMXREGS = 18 +const PT_GET_THREAD_AREA = 22 +const PT_KILL = 8 +const PT_READ_D = 2 +const PT_READ_I = 1 +const PT_READ_U = 3 +const PT_SETCRUNCHREGS = 26 +const PT_SETFPREGS = 15 +const PT_SETFPXREGS = 19 +const PT_SETHBPREGS = 30 +const PT_SETOPTIONS = 16896 +const PT_SETREGS = 13 +const PT_SETSIGINFO = 16899 +const PT_SETVFPREGS = 28 +const PT_SETWMMXREGS = 19 +const PT_SET_SYSCALL = 23 +const PT_STEP = 9 +const PT_SYSCALL = 24 +const PT_TRACE_ME = 0 +const PT_WRITE_D = 5 +const PT_WRITE_I = 4 +const PT_WRITE_U = 6 + +type t__ptrace_peeksiginfo_args = struct { + F__ccgo_align [0]uint32 + Foff Tuint64_t + Fflags Tuint32_t + Fnr Tint32_t +} + +type t__ptrace_seccomp_metadata = struct { + F__ccgo_align [0]uint32 + Ffilter_off Tuint64_t + Fflags Tuint64_t +} + +type t__ptrace_syscall_info = struct { + F__ccgo_align [0]uint32 + Fop Tuint8_t + F__pad [3]Tuint8_t + Farch Tuint32_t + Finstruction_pointer Tuint64_t + Fstack_pointer Tuint64_t + F__ccgo5_24 struct { + F__ccgo_align [0]uint32 + Fexit [0]struct { + F__ccgo_align [0]uint32 + Frval Tint64_t + Fis_error Tuint8_t + F__ccgo_pad2 [7]byte + } + Fseccomp [0]struct { + F__ccgo_align [0]uint32 + Fnr Tuint64_t + Fargs [6]Tuint64_t + Fret_data Tuint32_t + F__ccgo_pad3 [4]byte + } + Fentry struct { + F__ccgo_align [0]uint32 + Fnr Tuint64_t + Fargs [6]Tuint64_t + } + F__ccgo_pad3 [8]byte + } +} + +type t__ptrace_rseq_configuration = struct { + F__ccgo_align [0]uint32 + Frseq_abi_pointer Tuint64_t + Frseq_abi_size Tuint32_t + Fsignature Tuint32_t + Fflags Tuint32_t + Fpad Tuint32_t +} + +func Xptrace(tls *TLS, req int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v va=%v, (%v:)", tls, req, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var addr, addr2, data uintptr + var ap Tva_list + var pid Tpid_t + var ret int32 + var _ /* result at bp+0 */ int32 + _, _, _, _, _, _ = addr, addr2, ap, data, pid, ret + addr2 = uintptr(0) + ap = va + pid = VaInt32(&ap) + addr = VaUintptr(&ap) + data = VaUintptr(&ap) + /* PTRACE_{READ,WRITE}{DATA,TEXT} (16...19) are specific to SPARC. */ + _ = ap + if uint32(req)-uint32(1) < uint32(3) { + data = bp + } + ret = X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_ptrace), req, pid, int32(addr), int32(data), int32(addr2)))) + if ret < 0 || uint32(req)-uint32(1) >= uint32(3) { + return ret + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xpwritev2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xwritev(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev2), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), flags))) +} + +const GRPQUOTA = 1 +const IIF_ALL = 7 +const IIF_BGRACE = 1 +const IIF_FLAGS = 4 +const IIF_IGRACE = 2 +const MAXQUOTAS = 2 +const MAX_DQ_TIME = 604800 +const MAX_IQ_TIME = 604800 +const NR_DQHASH = 43 +const NR_DQUOTS = 256 +const QFMT_OCFS2 = 3 +const QFMT_VFS_OLD = 1 +const QFMT_VFS_V0 = 2 +const QFMT_VFS_V1 = 4 +const QIF_ALL = 63 +const QIF_BLIMITS = 1 +const QIF_BTIME = 16 +const QIF_ILIMITS = 4 +const QIF_INODES = 8 +const QIF_ITIME = 32 +const QIF_LIMITS = 5 +const QIF_SPACE = 2 +const QIF_TIMES = 48 +const QIF_USAGE = 10 +const QUOTAFILENAME = "quota" +const QUOTAGROUP = "staff" +const Q_GETFMT = 8388612 +const Q_GETINFO = 8388613 +const Q_GETQUOTA = 8388615 +const Q_QUOTAOFF = 8388611 +const Q_QUOTAON = 8388610 +const Q_SETINFO = 8388614 +const Q_SETQUOTA = 8388616 +const Q_SYNC = 8388609 +const SUBCMDMASK = 255 +const SUBCMDSHIFT = 8 +const USRQUOTA = 0 +const _LINUX_QUOTA_VERSION = 2 + +type Tdqblk = struct { + F__ccgo_align [0]uint32 + Fdqb_bhardlimit Tuint64_t + Fdqb_bsoftlimit Tuint64_t + Fdqb_curspace Tuint64_t + Fdqb_ihardlimit Tuint64_t + Fdqb_isoftlimit Tuint64_t + Fdqb_curinodes Tuint64_t + Fdqb_btime Tuint64_t + Fdqb_itime Tuint64_t + Fdqb_valid Tuint32_t + F__ccgo_pad9 [4]byte +} + +type Tdqinfo = struct { + F__ccgo_align [0]uint32 + Fdqi_bgrace Tuint64_t + Fdqi_igrace Tuint64_t + Fdqi_flags Tuint32_t + Fdqi_valid Tuint32_t +} + +func Xquotactl(tls *TLS, cmd int32, special uintptr, id int32, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v special=%v id=%v addr=%v, (%v:)", tls, cmd, special, id, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_quotactl), cmd, int32(special), id, int32(addr)))) +} + +func Xreadahead(tls *TLS, fd int32, pos Toff_t, len1 Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v, (%v:)", tls, fd, pos, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_readahead), fd, int32(pos), int32(len1)))) +} + +const RB_AUTOBOOT = 19088743 +const RB_DISABLE_CAD = 0 +const RB_ENABLE_CAD = 2309737967 +const RB_HALT_SYSTEM = 3454992675 +const RB_KEXEC = 1163412803 +const RB_POWER_OFF = 1126301404 +const RB_SW_SUSPEND = 3489725666 + +func Xreboot(tls *TLS, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v, (%v:)", tls, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_reboot), int32(Uint32FromUint32(0xfee1dead)), int32(Int32FromInt32(672274793)), type1))) +} + +func Xremap_file_pages(tls *TLS, addr uintptr, size Tsize_t, prot int32, pgoff Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v size=%v prot=%v pgoff=%v flags=%v, (%v:)", tls, addr, size, prot, pgoff, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_remap_file_pages), int32(addr), int32(size), prot, int32(pgoff), flags))) +} + +func Xsbrk(tls *TLS, inc Tintptr_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if inc != 0 { + return uintptr(X__syscall_ret(tls, uint32(-Int32FromInt32(ENOMEM)))) + } + return uintptr(X__syscall1(tls, int32(SYS_brk), int32(Int32FromInt32(0)))) +} + +func Xsendfile(tls *TLS, out_fd int32, in_fd int32, ofs uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v out_fd=%v in_fd=%v ofs=%v count=%v, (%v:)", tls, out_fd, in_fd, ofs, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_sendfile64), out_fd, in_fd, int32(ofs), int32(count)))) +} + +func Xsetfsgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_setfsgid32), int32(gid)))) +} + +func Xsetfsuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_setfsuid32), int32(uid)))) +} + +func Xsethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_sethostname), int32(name), int32(len1)))) +} + +const CLONE_CHILD_CLEARTID = 2097152 +const CLONE_CHILD_SETTID = 16777216 +const CLONE_DETACHED = 4194304 +const CLONE_FILES = 1024 +const CLONE_FS = 512 +const CLONE_IO = 2147483648 +const CLONE_NEWCGROUP = 33554432 +const CLONE_NEWIPC = 134217728 +const CLONE_NEWNET = 1073741824 +const CLONE_NEWNS = 131072 +const CLONE_NEWPID = 536870912 +const CLONE_NEWTIME = 128 +const CLONE_NEWUSER = 268435456 +const CLONE_NEWUTS = 67108864 +const CLONE_PARENT = 32768 +const CLONE_PARENT_SETTID = 1048576 +const CLONE_PIDFD = 4096 +const CLONE_PTRACE = 8192 +const CLONE_SETTLS = 524288 +const CLONE_SIGHAND = 2048 +const CLONE_SYSVSEM = 262144 +const CLONE_THREAD = 65536 +const CLONE_UNTRACED = 8388608 +const CLONE_VFORK = 16384 +const CLONE_VM = 256 +const CPU_SETSIZE = 1024 +const CSIGNAL = 255 + +type Tcpu_set_t = struct { + F__bits [32]uint32 +} + +func Xsetns(tls *TLS, fd int32, nstype int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v nstype=%v, (%v:)", tls, fd, nstype, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setns), fd, nstype))) +} + +const __tm_gmtoff = 0 +const __tm_zone = 0 + +type Ttm1 = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + Ftm_gmtoff int32 + Ftm_zone uintptr +} + +func Xsettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if !(tv != 0) { + return 0 + } + if uint64((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec) >= uint64(1000000) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec, + Ftv_nsec: int32((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec * int64(1000)), + } + return Xclock_settime(tls, CLOCK_REALTIME, bp) +} + +const SFD_CLOEXEC = 524288 +const SFD_NONBLOCK = 2048 + +type Tsignalfd_siginfo = struct { + F__ccgo_align [0]uint32 + Fssi_signo Tuint32_t + Fssi_errno Tint32_t + Fssi_code Tint32_t + Fssi_pid Tuint32_t + Fssi_uid Tuint32_t + Fssi_fd Tint32_t + Fssi_tid Tuint32_t + Fssi_band Tuint32_t + Fssi_overrun Tuint32_t + Fssi_trapno Tuint32_t + Fssi_status Tint32_t + Fssi_int Tint32_t + Fssi_ptr Tuint64_t + Fssi_utime Tuint64_t + Fssi_stime Tuint64_t + Fssi_addr Tuint64_t + Fssi_addr_lsb Tuint16_t + F__pad2 Tuint16_t + Fssi_syscall Tint32_t + Fssi_call_addr Tuint64_t + Fssi_arch Tuint32_t + F__pad [28]Tuint8_t +} + +func Xsignalfd(tls *TLS, fd int32, sigs uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v sigs=%v flags=%v, (%v:)", tls, fd, sigs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall4(tls, int32(SYS_signalfd4), fd, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), flags)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + ret = int32(X__syscall3(tls, int32(SYS_signalfd), fd, int32(sigs), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if ret >= 0 { + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flags&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return X__syscall_ret(tls, uint32(ret)) +} + +func Xsplice(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall6(tls, int32(SYS_splice), fd_in, int32(off_in), fd_out, int32(off_out), int32(len1), int32(flags)))) +} + +func Xstatx(tls *TLS, dirfd int32, path uintptr, flags int32, mask uint32, stx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v path=%v flags=%v mask=%v stx=%v, (%v:)", tls, dirfd, path, flags, mask, stx, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var ret int32 + var _ /* st at bp+0 */ Tstat + _ = ret + ret = int32(X__syscall5(tls, int32(SYS_statx), dirfd, int32(path), flags, int32(mask), int32(stx))) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + ret = Xfstatat(tls, dirfd, path, bp, flags) + if ret != 0 { + return ret + } + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_major = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(31)>>Int32FromInt32(1)&Uint64FromUint32(0xfffff000) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(8)&Uint64FromInt32(0x00000fff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_minor = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(12)&Uint64FromUint32(0xffffff00) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0x000000ff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mode = uint16((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_nlink = (*(*Tstat)(unsafe.Pointer(bp))).Fst_nlink + (*Tstatx)(unsafe.Pointer(stx)).Fstx_uid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_uid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_gid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_gid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_size = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blksize = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_blksize) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blocks = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_blocks) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_btime = Tstatx_timestamp{} + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mask = uint32(0x7ff) + return 0 +} + +func Xstime(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimeval + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: *(*Ttime_t)(unsafe.Pointer(t)), + } + return Xsettimeofday(tls, bp, UintptrFromInt32(0)) +} + +const SWAP_FLAG_DISCARD = 65536 +const SWAP_FLAG_PREFER = 32768 +const SWAP_FLAG_PRIO_MASK = 32767 +const SWAP_FLAG_PRIO_SHIFT = 0 + +func Xswapon(tls *TLS, path uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v flags=%v, (%v:)", tls, path, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_swapon), int32(path), flags))) +} + +func Xswapoff(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_swapoff), int32(path)))) +} + +func Xsync_file_range(tls *TLS, fd int32, pos Toff_t, len1 Toff_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v flags=%v, (%v:)", tls, fd, pos, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_sync_file_range2), fd, int32(flags), int32(pos), int32(len1)))) +} + +func Xsyncfs(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_syncfs), fd))) +} + +func X__lsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_sysinfo), int32(info)))) +} + +func Xsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lsysinfo(tls, info) +} + +func Xtee(tls *TLS, src int32, dest int32, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v src=%v dest=%v len1=%v flags=%v, (%v:)", tls, src, dest, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_tee), src, dest, int32(len1), int32(flags)))) +} + +const TFD_CLOEXEC = 524288 +const TFD_NONBLOCK = 2048 +const TFD_TIMER_ABSTIME = 1 +const TFD_TIMER_CANCEL_ON_SET = 2 + +func Xtimerfd_create(tls *TLS, clockid int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v clockid=%v flags=%v, (%v:)", tls, clockid, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_timerfd_create), clockid, flags))) +} + +func Xtimerfd_settime(tls *TLS, fd int32, flags int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v new1=%v old=%v, (%v:)", tls, fd, flags, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var ins, r, vns int32 + var is, vs Ttime_t + var _ /* old32 at bp+48 */ [4]int32 + _, _, _, _, _ = ins, is, r, vns, vs + is = (*Titimerspec)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerspec)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ins = (*Titimerspec)(unsafe.Pointer(new1)).Fit_interval.Ftv_nsec + vns = (*Titimerspec)(unsafe.Pointer(new1)).Fit_value.Ftv_nsec + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || Bool(uint32(8) > uint32(4)) && old != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: int64(ins), + 2: vs, + 3: int64(vns), + } + r = int32(X__syscall4(tls, int32(SYS_timerfd_settime64), fd, flags, int32(bp), int32(old))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(is), + 1: ins, + 2: int32(vs), + 3: vns, + } + r = int32(X__syscall4(tls, int32(SYS_timerfd_settime32), fd, flags, int32(bp+32), int32(bp+48))) + if !(r != 0) && old != 0 { + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[0]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_timerfd_settime32), fd, flags, int32(new1), int32(old)))) +} + +func Xtimerfd_gettime(tls *TLS, fd int32, cur uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cur=%v, (%v:)", tls, fd, cur, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* cur32 at bp+0 */ [4]int32 + _ = r + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_timerfd_gettime64), fd, int32(cur))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_timerfd_gettime32), fd, int32(bp))) + if !(r != 0) { + (*Titimerspec)(unsafe.Pointer(cur)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerspec)(unsafe.Pointer(cur)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(cur)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(cur)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_timerfd_gettime32), fd, int32(cur)))) +} + +func Xunshare(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_unshare), flags))) +} + +func Xutimes(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, -int32(100), path, times) +} + +func Xvhangup(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_vhangup)))) +} + +func Xvmsplice(tls *TLS, fd int32, iov uintptr, cnt Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v cnt=%v flags=%v, (%v:)", tls, fd, iov, cnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_vmsplice), fd, int32(iov), int32(cnt), int32(flags)))) +} + +const NSIG = 65 +const SA_NOMASK = 1073741824 +const SA_ONESHOT = 2147483648 +const SYS_SECCOMP = 1 +const SYS_USER_DISPATCH = 2 +const __ucontext = 0 + +type Tgreg_t = int32 + +type Tgregset_t = [18]int32 + +type Tmcontext_t1 = struct { + Ftrap_no uint32 + Ferror_code uint32 + Foldmask uint32 + Farm_r0 uint32 + Farm_r1 uint32 + Farm_r2 uint32 + Farm_r3 uint32 + Farm_r4 uint32 + Farm_r5 uint32 + Farm_r6 uint32 + Farm_r7 uint32 + Farm_r8 uint32 + Farm_r9 uint32 + Farm_r10 uint32 + Farm_fp uint32 + Farm_ip uint32 + Farm_sp uint32 + Farm_lr uint32 + Farm_pc uint32 + Farm_cpsr uint32 + Ffault_address uint32 +} + +type Tsigcontext = Tmcontext_t1 + +type Tucontext_t1 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +type Tucontext = Tucontext_t1 + +type Tsig_t = uintptr + +type Tsighandler_t = uintptr + +func Xwait3(tls *TLS, status uintptr, options int32, usage uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwait4(tls, -int32(1), status, options, usage) +} + +func Xwait4(tls *TLS, pid Tpid_t, status uintptr, options int32, ru uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v ru=%v, (%v:)", tls, pid, status, options, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dest, v1 uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int32 + _, _, _ = dest, r, v1 + if ru != 0 { + v1 = ru + 32 - uintptr(Uint32FromInt32(4)*Uint32FromInt64(4)) + } else { + v1 = uintptr(0) + } + dest = v1 + r = int32(X__syscall4(tls, int32(SYS_wait4), pid, int32(status), options, int32(dest))) + if r > 0 && ru != 0 && Bool(uint32(8) > uint32(4)) { + _memcpy(tls, bp, dest, Uint32FromInt32(4)*Uint32FromInt64(4)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]), + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]), + } + } + return X__syscall_ret(tls, uint32(r)) +} + +const XATTR_CREATE = 1 +const XATTR_REPLACE = 2 +const __UAPI_DEF_XATTR = 0 + +func Xgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_getxattr), int32(path), int32(name), int32(value), int32(size)))) +} + +func Xlgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_lgetxattr), int32(path), int32(name), int32(value), int32(size)))) +} + +func Xfgetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v, (%v:)", tls, filedes, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_fgetxattr), filedes, int32(name), int32(value), int32(size)))) +} + +func Xlistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_listxattr), int32(path), int32(list), int32(size)))) +} + +func Xllistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_llistxattr), int32(path), int32(list), int32(size)))) +} + +func Xflistxattr(tls *TLS, filedes int32, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v list=%v size=%v, (%v:)", tls, filedes, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_flistxattr), filedes, int32(list), int32(size)))) +} + +func Xsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_setxattr), int32(path), int32(name), int32(value), int32(size), flags))) +} + +func Xlsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_lsetxattr), int32(path), int32(name), int32(value), int32(size), flags))) +} + +func Xfsetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, filedes, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fsetxattr), filedes, int32(name), int32(value), int32(size), flags))) +} + +func Xremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_removexattr), int32(path), int32(name)))) +} + +func Xlremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_lremovexattr), int32(path), int32(name)))) +} + +func Xfremovexattr(tls *TLS, fd int32, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_fremovexattr), fd, int32(name)))) +} + +type Tucontext_t2 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +func _dummy4(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + return msg +} + +func X__lctrans(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, lm) +} + +func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + 5*4))) +} + +func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { + var v1 uint32 + _ = v1 + if c != 0 { + v1 = x>>int32(24) | x>>int32(8)&uint32(0xff00) | x< %v", r) }() + } + var b, n, o, ol, os, t, tl, ts Tuint32_t + var mo uintptr + var sign, sw int32 + _, _, _, _, _, _, _, _, _, _, _ = b, mo, n, o, ol, os, sign, sw, t, tl, ts + mo = p + sw = int32(*(*Tuint32_t)(unsafe.Pointer(mo)) - uint32(0x950412de)) + b = uint32(0) + n = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 2*4)), sw) + o = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 3*4)), sw) + t = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 4*4)), sw) + if n >= size/uint32(4) || o >= size-uint32(4)*n || t >= size-uint32(4)*n || (o|t)%uint32(4) != 0 { + return uintptr(0) + } + o /= uint32(4) + t /= uint32(4) + for { + ol = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2)))*4)), sw) + os = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if os >= size || ol >= size-os || *(*uint8)(unsafe.Pointer(p + uintptr(os+ol))) != 0 { + return uintptr(0) + } + sign = Xstrcmp(tls, s, p+uintptr(os)) + if !(sign != 0) { + tl = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2)))*4)), sw) + ts = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if ts >= size || tl >= size-ts || *(*uint8)(unsafe.Pointer(p + uintptr(ts+tl))) != 0 { + return uintptr(0) + } + return p + uintptr(ts) + } else { + if n == uint32(1) { + return uintptr(0) + } else { + if sign < 0 { + n /= uint32(2) + } else { + b += n / uint32(2) + n -= n / uint32(2) + } + } + } + goto _1 + _1: + } + return uintptr(0) +} + +const __USE_GNU_GETTEXT = 1 + +func Xbind_textdomain_codeset(tls *TLS, domainname uintptr, codeset uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v codeset=%v, (%v:)", tls, domainname, codeset, origin(2)) + defer func() { trc("-> %v", r) }() + } + if codeset != 0 && Xstrcasecmp(tls, codeset, __ccgo_ts+322) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + } + return UintptrFromInt32(0) +} + +var _empty_mo = [5]Tuint32_t{ + 0: uint32(0x950412de), + 2: uint32(-Int32FromInt32(1)), + 3: uint32(-Int32FromInt32(1)), + 4: uint32(-Int32FromInt32(1)), +} + +const NL_CAT_LOCALE = 1 +const NL_SETD = 1 + +type Tnl_item = int32 + +type Tnl_catd = uintptr + +func Xcatclose(tls *TLS, catd Tnl_catd) (r int32) { + if __ccgo_strace { + trc("tls=%v catd=%v, (%v:)", tls, catd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var map1 uintptr + var v1, v2 Tuint32_t + _, _, _ = map1, v1, v2 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4< y { + v8 = int32(1) + } else { + v8 = 0 + } + v7 = v8 + } + return v7 +} + +func Xcatgets(tls *TLS, catd Tnl_catd, set_id int32, msg_id int32, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v catd=%v set_id=%v msg_id=%v s=%v, (%v:)", tls, catd, set_id, msg_id, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var map1, msg, msgs, set, sets, strings uintptr + var nmsgs, nsets, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 Tuint32_t + var _ /* msg_id_be at bp+4 */ Tuint32_t + var _ /* set_id_be at bp+0 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = map1, msg, msgs, nmsgs, nsets, set, sets, strings, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(4))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7<>int32(24) | v10>>int32(8)&uint32(0xff00) | v10<>int32(24) | v13>>int32(8)&uint32(0xff00) | v13<>int32(24) | v16>>int32(8)&uint32(0xff00) | v16<>int32(24) | v19>>int32(8)&uint32(0xff00) | v19<>int32(24) | v22>>int32(8)&uint32(0xff00) | v22<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< %v", r) }() + } + bp := tls.Alloc(4096) + defer tls.Free(4096) + var catd Tnl_catd + var i, l Tsize_t + var lang, p, path, v, z, v1, v3, v6, v7 uintptr + var v2 bool + var _ /* buf at bp+0 */ [4096]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = catd, i, l, lang, p, path, v, z, v1, v2, v3, v6, v7 + if Xstrchr(tls, name, int32('/')) != 0 { + return _do_catopen(tls, name) + } + if v2 = X__libc.Fsecure != 0; !v2 { + v1 = Xgetenv(tls, __ccgo_ts+328) + path = v1 + } + if v2 || !(v1 != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + if oflag != 0 { + v3 = Xnl_langinfo(tls, Int32FromInt32(LC_MESSAGES)<= uint32(4096)-i { + break + } + _memcpy(tls, bp+uintptr(i), v, l) + i += l + goto _5 + _5: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(z)) != 0) && (p < z || !(i != 0)) { + break + } + if p < z { + goto _4 + } + if *(*uint8)(unsafe.Pointer(z)) != 0 { + z++ + } + (*(*[4096]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + /* Leading : or :: in NLSPATH is same as %N */ + if i != 0 { + v7 = bp + } else { + v7 = name + } + catd = _do_catopen(tls, v7) + if catd != uintptr(-Int32FromInt32(1)) { + return catd + } + goto _4 + _4: + ; + p = z + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) +} + +const calloc = 0 +const free = 0 +const malloc = 0 +const realloc = 0 + +type Tbinding = struct { + Fnext uintptr + Fdirlen int32 + Factive int32 + Fdomainname uintptr + Fdirname uintptr +} + +var _bindings uintptr + +func _gettextdir(tls *TLS, domainname uintptr, dirlen uintptr) (r uintptr) { + var p uintptr + _ = p + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(p+8) != 0 { + *(*Tsize_t)(unsafe.Pointer(dirlen)) = uint32((*Tbinding)(unsafe.Pointer(p)).Fdirlen) + return (*Tbinding)(unsafe.Pointer(p)).Fdirname + } + goto _1 + _1: + ; + p = (*Tbinding)(unsafe.Pointer(p)).Fnext + } + return uintptr(0) +} + +var _lock1 [1]int32 + +func Xbindtextdomain(tls *TLS, domainname uintptr, dirname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v dirname=%v, (%v:)", tls, domainname, dirname, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dirlen, domlen Tsize_t + var old, v4 int32 + var p3, q, v3 uintptr + _, _, _, _, _, _, _ = dirlen, domlen, old, p3, q, v3, v4 + if !(domainname != 0) { + return uintptr(0) + } + if !(dirname != 0) { + *(*Tsize_t)(unsafe.Pointer(bp)) = uint32(0) + return _gettextdir(tls, domainname, bp) + } + domlen = Xstrnlen(tls, domainname, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + dirlen = Xstrnlen(tls, dirname, uint32(PATH_MAX)) + if domlen > uint32(NAME_MAX) || dirlen >= uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock1))) + p3 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p3 != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p3)).Fdomainname, domainname) != 0) && !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p3)).Fdirname, dirname) != 0) { + break + } + goto _1 + _1: + ; + p3 = (*Tbinding)(unsafe.Pointer(p3)).Fnext + } + if !(p3 != 0) { + p3 = Xcalloc(tls, uint32(20)+domlen+dirlen+uint32(2), uint32(1)) + if !(p3 != 0) { + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return uintptr(0) + } + (*Tbinding)(unsafe.Pointer(p3)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + (*Tbinding)(unsafe.Pointer(p3)).Fdirlen = int32(dirlen) + (*Tbinding)(unsafe.Pointer(p3)).Fdomainname = p3 + 20 + (*Tbinding)(unsafe.Pointer(p3)).Fdirname = p3 + 20 + uintptr(domlen) + uintptr(1) + _memcpy(tls, (*Tbinding)(unsafe.Pointer(p3)).Fdomainname, domainname, domlen+uint32(1)) + _memcpy(tls, (*Tbinding)(unsafe.Pointer(p3)).Fdirname, dirname, dirlen+uint32(1)) + v3 = uintptr(unsafe.Pointer(&_bindings)) + _a_barrier(tls) + for cond := true; cond; cond = old == int32(AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings)))) && !(_a_sc(tls, v3, int32(p3)) != 0) { + old = _a_ll(tls, v3) + } + _a_barrier(tls) + v4 = old + goto _5 + _5: + _ = uintptr(v4) + goto _2 + _2: + } + _a_barrier(tls) + AtomicStorePInt32(p3+8, int32(1)) + _a_barrier(tls) + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && q != p3 { + _a_barrier(tls) + AtomicStorePInt32(q+8, 0) + _a_barrier(tls) + } + goto _6 + _6: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return (*Tbinding)(unsafe.Pointer(p3)).Fdirname +} + +var _catnames = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +var _catlens = [6]uint8{ + 0: uint8(8), + 1: uint8(10), + 2: uint8(7), + 3: uint8(10), + 4: uint8(11), + 5: uint8(11), +} + +type Tmsgcat = struct { + Fnext uintptr + Fmap1 uintptr + Fmap_size Tsize_t + Fplural_rule uintptr + Fnplurals int32 + Fbinding uintptr + Flm uintptr + Fcat int32 +} + +func _dummy_gettextdomain(tls *TLS) (r uintptr) { + return __ccgo_ts + 350 +} + +func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint32, category int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v category=%v, (%v:)", tls, domainname, msgid1, msgid2, n, category, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var alt_modlen, catlen, dirlen, domlen, l, loclen, modlen, rem, v5 Tsize_t + var catname, csp, dirname, lm, loc, locname, locp, map1, modname, name, old_cats, p2, q, r, rule, trans, v10, v17, v19, v3, v8, v9 uintptr + var np, plural, v23 uint32 + var old, old_errno, v11, v12, v14, v15, v20 int32 + var v6 t__predefined_size_t + var _ /* map_size at bp+0 */ Tsize_t + var _ /* z at bp+4 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old, old_cats, old_errno, p2, plural, q, r, rem, rule, trans, v10, v11, v12, v14, v15, v17, v19, v20, v23, v3, v5, v6, v8, v9 + defer func() { Xrealloc(tls, name, 0) }() + loc = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + /* match gnu gettext behaviour */ + if !(msgid1 != 0) { + goto notrans + } + if uint32(category) >= uint32(LC_ALL) { + goto notrans + } + if !(domainname != 0) { + domainname = X__gettextdomain(tls) + } + domlen = Xstrnlen(tls, domainname, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if domlen > uint32(NAME_MAX) { + goto notrans + } + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(q+8) != 0 { + break + } + goto _1 + _1: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + if !(q != 0) { + goto notrans + } + lm = *(*uintptr)(unsafe.Pointer(loc + uintptr(category)*4)) + if !!(lm != 0) { + goto _2 + } + goto notrans +notrans: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if n == uint32(1) { + v3 = msgid1 + } else { + v3 = msgid2 + } + return v3 +_2: + ; + p2 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + for { + if !(p2 != 0) { + break + } + if (*Tmsgcat)(unsafe.Pointer(p2)).Fbinding == q && (*Tmsgcat)(unsafe.Pointer(p2)).Flm == lm && (*Tmsgcat)(unsafe.Pointer(p2)).Fcat == category { + break + } + goto _4 + _4: + ; + p2 = (*Tmsgcat)(unsafe.Pointer(p2)).Fnext + } + if !(p2 != 0) { + dirname = (*Tbinding)(unsafe.Pointer(q)).Fdirname + locname = lm + 8 + catname = uintptr(unsafe.Pointer(&_catnames)) + uintptr(category)*12 + dirlen = uint32((*Tbinding)(unsafe.Pointer(q)).Fdirlen) + loclen = Xstrlen(tls, locname) + catlen = uint32(_catlens[category]) + /* Logically split @mod suffix from locale name. */ + modname = Xmemchr(tls, locname, int32('@'), loclen) + if !(modname != 0) { + modname = locname + uintptr(loclen) + } + v5 = loclen - uint32(int32(modname)-int32(locname)) + modlen = v5 + alt_modlen = v5 + loclen = uint32(int32(modname) - int32(locname)) + /* Drop .charset identifier; it is not used. */ + csp = Xmemchr(tls, locname, int32('.'), loclen) + if csp != 0 { + loclen = uint32(int32(csp) - int32(locname)) + } + v6 = dirlen + uint32(1) + loclen + modlen + uint32(1) + catlen + uint32(1) + domlen + uint32(3) + uint32(1) + name = Xrealloc(tls, name, v6) + for { + Xsnprintf(tls, name, v6, __ccgo_ts+359, VaList(bp+16, dirname, int32(loclen), locname, int32(alt_modlen), modname, catname, domainname)) + v8 = X__map_file(tls, name, bp) + map1 = v8 + if v8 != 0 { + break + } + /* Try dropping @mod, _YY, then both. */ + if alt_modlen != 0 { + alt_modlen = uint32(0) + } else { + v9 = Xmemchr(tls, locname, int32('_'), loclen) + locp = v9 + if v9 != 0 { + loclen = uint32(int32(locp) - int32(locname)) + alt_modlen = modlen + } else { + break + } + } + goto _7 + _7: + } + if !(map1 != 0) { + goto notrans + } + p2 = Xcalloc(tls, uint32(32), uint32(1)) + if !(p2 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + goto notrans + } + (*Tmsgcat)(unsafe.Pointer(p2)).Fcat = category + (*Tmsgcat)(unsafe.Pointer(p2)).Fbinding = q + (*Tmsgcat)(unsafe.Pointer(p2)).Flm = lm + (*Tmsgcat)(unsafe.Pointer(p2)).Fmap1 = map1 + (*Tmsgcat)(unsafe.Pointer(p2)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp)) + rule = __ccgo_ts + 381 + np = uint32(2) + r = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p2)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p2)).Fmap_size, __ccgo_ts) + for r != 0 && Xstrncmp(tls, r, __ccgo_ts+387, uint32(13)) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 4)) = Xstrchr(tls, r, int32('\n')) + if *(*uintptr)(unsafe.Pointer(bp + 4)) != 0 { + v10 = *(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(1) + } else { + v10 = uintptr(0) + } + r = v10 + } + if r != 0 { + r += uintptr(13) + for { + v11 = int32(*(*uint8)(unsafe.Pointer(r))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + if !(v12 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+401, uint32(9)) != 0) { + np = Xstrtoul(tls, r+uintptr(9), bp+4, int32(10)) + r = *(*uintptr)(unsafe.Pointer(bp + 4)) + } + for *(*uint8)(unsafe.Pointer(r)) != 0 && int32(*(*uint8)(unsafe.Pointer(r))) != int32(';') { + r++ + } + if *(*uint8)(unsafe.Pointer(r)) != 0 { + r++ + for { + v14 = int32(*(*uint8)(unsafe.Pointer(r))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + if !(v15 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+411, uint32(7)) != 0) { + rule = r + uintptr(7) + } + } + } + (*Tmsgcat)(unsafe.Pointer(p2)).Fnplurals = int32(np) + (*Tmsgcat)(unsafe.Pointer(p2)).Fplural_rule = rule + for { + old_cats = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + (*Tmsgcat)(unsafe.Pointer(p2)).Fnext = old_cats + goto _22 + _22: + ; + v19 = uintptr(unsafe.Pointer(&_cats)) + _a_barrier(tls) + for cond := true; cond; cond = old == int32(old_cats) && !(_a_sc(tls, v19, int32(p2)) != 0) { + old = _a_ll(tls, v19) + } + _a_barrier(tls) + v20 = old + goto _21 + _21: + v17 = uintptr(v20) + goto _18 + _18: + ; + if !(v17 != old_cats) { + break + } + } + } + trans = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p2)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p2)).Fmap_size, msgid1) + if !(trans != 0) { + goto notrans + } + /* Non-plural-processing gettext forms pass a null pointer as + * msgid2 to request that dcngettext suppress plural processing. */ + if msgid2 != 0 && (*Tmsgcat)(unsafe.Pointer(p2)).Fnplurals != 0 { + plural = X__pleval(tls, (*Tmsgcat)(unsafe.Pointer(p2)).Fplural_rule, n) + if plural > uint32((*Tmsgcat)(unsafe.Pointer(p2)).Fnplurals) { + goto notrans + } + for { + v23 = plural + plural-- + if !(v23 != 0) { + break + } + rem = (*Tmsgcat)(unsafe.Pointer(p2)).Fmap_size - uint32(int32(trans)-int32((*Tmsgcat)(unsafe.Pointer(p2)).Fmap1)) + l = Xstrnlen(tls, trans, rem) + if l+uint32(1) >= rem { + goto notrans + } + trans += uintptr(l + uint32(1)) + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return trans +} + +var _cats uintptr + +func Xdcgettext(tls *TLS, domainname uintptr, msgid uintptr, category int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v category=%v, (%v:)", tls, domainname, msgid, category, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint32(1), category) +} + +func Xdngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, domainname, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid1, msgid2, n, int32(LC_MESSAGES)) +} + +func Xdgettext(tls *TLS, domainname uintptr, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v, (%v:)", tls, domainname, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint32(1), int32(LC_MESSAGES)) +} + +func X__duplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var new1 Tlocale_t + _ = new1 + new1 = Xmalloc(tls, uint32(24)) + if !(new1 != 0) { + return uintptr(0) + } + if old == uintptr(-Int32FromInt32(1)) { + old = uintptr(unsafe.Pointer(&X__libc)) + 32 + } + *(*t__locale_struct)(unsafe.Pointer(new1)) = *(*t__locale_struct)(unsafe.Pointer(old)) + return new1 +} + +func Xduplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__duplocale(tls, old) +} + +func Xfreelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + if X__loc_is_allocated(tls, l) != 0 { + Xfree(tls, l) + } +} + +func X__freelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + Xfreelocale(tls, l) +} + +const BIG5 = 224 +const EUC_JP = 208 +const EUC_KR = 232 +const GB18030 = 216 +const GB2312 = 218 +const GBK = 217 +const ISO2022_JP = 210 +const SHIFT_JIS = 209 +const UCS2 = 204 +const UCS2BE = 196 +const UCS2LE = 197 +const US_ASCII = 199 +const UTF_16 = 202 +const UTF_16BE = 194 +const UTF_16LE = 193 +const UTF_32 = 203 +const UTF_32BE = 192 +const UTF_32LE = 195 +const UTF_8 = 200 +const WCHAR_T = 198 +const mbrtowc_utf8 = 0 +const wctomb_utf8 = 0 + +type Ticonv_t = uintptr + +/* Definitions of charmaps. Each charmap consists of: + * 1. Empty-string-terminated list of null-terminated aliases. + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ + +var _charmaps = [4907]uint8{'u', 't', 'f', '8', 0, 'c', 'h', 'a', 'r', 0, 0, 200, 'w', 'c', 'h', 'a', 'r', 't', 0, 0, 198, 'u', 'c', 's', '2', 'b', 'e', 0, 0, 196, 'u', 'c', 's', '2', 'l', 'e', 0, 0, 197, 'u', 't', 'f', '1', '6', 'b', 'e', 0, 0, 194, 'u', 't', 'f', '1', '6', 'l', 'e', 0, 0, 193, 'u', 'c', 's', '4', 'b', 'e', 0, 'u', 't', 'f', '3', '2', 'b', 'e', 0, 0, 192, 'u', 'c', 's', '4', 'l', 'e', 0, 'u', 't', 'f', '3', '2', 'l', 'e', 0, 0, 195, 'a', 's', 'c', 'i', 'i', 0, 'u', 's', 'a', 's', 'c', 'i', 'i', 0, 'i', 's', 'o', '6', '4', '6', 0, 'i', 's', 'o', '6', '4', '6', 'u', 's', 0, 0, 199, 'u', 't', 'f', '1', '6', 0, 0, 202, 'u', 'c', 's', '4', 0, 'u', 't', 'f', '3', '2', 0, 0, 203, 'u', 'c', 's', '2', 0, 0, 204, 'e', 'u', 'c', 'j', 'p', 0, 0, 208, 's', 'h', 'i', 'f', 't', 'j', 'i', 's', 0, 's', 'j', 'i', 's', 0, 'c', 'p', '9', '3', '2', 0, 0, 209, 'i', 's', 'o', '2', '0', '2', '2', 'j', 'p', 0, 0, 210, 'g', 'b', '1', '8', '0', '3', '0', 0, 0, 216, 'g', 'b', 'k', 0, 'c', 'p', '9', '3', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '9', '3', '6', 0, 0, 217, 'g', 'b', '2', '3', '1', '2', 0, 0, 218, 'b', 'i', 'g', '5', 0, 'b', 'i', 'g', 'f', 'i', 'v', 'e', 0, 'c', 'p', '9', '5', '0', 0, 'b', 'i', 'g', '5', 'h', 'k', 's', 'c', 's', 0, 0, 224, 'e', 'u', 'c', 'k', 'r', 0, 'k', 's', 'c', '5', '6', '0', '1', 0, 'k', 's', 'x', '1', '0', '0', '1', 0, 'c', 'p', '9', '4', '9', 0, 0, 232, 'i', 's', 'o', '8', '8', '5', '9', '1', 0, 'l', 'a', 't', 'i', 'n', '1', 0, 0, '@', 'i', 's', 'o', '8', '8', '5', '9', '2', 0, 0, '(', 160, 16, 244, 'W', 'N', 164, 220, 244, 212, ')', 168, 'T', '5', 'U', 'V', 'n', 181, '"', 23, '\\', 176, 20, 20, 152, 'N', 180, 224, 4, 149, '_', 184, 'X', 'E', 149, 'V', 'o', 13, '6', 'W', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '3', 0, 0, '(', 160, 144, 244, 215, '(', 164, 0, ' ', 210, ')', 168, 176, '4', 21, 'G', '.', 181, 2, 0, '\\', 176, 148, '$', 203, ',', 180, 212, '2', 210, '-', 184, 180, 'D', 'U', 'G', '/', 245, 2, '@', '\\', 192, 4, '#', 12, 0, 196, '(', 132, 208, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 0, 'D', '#', 205, '4', 212, 'x', 'd', 205, '5', 26, 'e', 163, 205, '6', 220, 132, 21, 213, '7', 224, 132, '#', 14, 0, 228, ',', 148, 208, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 0, 196, '#', 207, '<', 244, '|', 'd', 207, '=', 27, 229, 163, 207, '>', 252, 136, '%', 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '4', 0, 0, '(', 160, 16, '$', 211, 'R', 164, 152, 'T', 211, ')', 168, 'T', '%', 17, 'H', '[', 181, '"', 215, '+', 176, 20, 20, 24, 'S', 180, 156, 'd', 147, '_', 184, 'X', '5', 'Q', 'H', '\\', 5, '5', 151, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 12, 'J', 16, 245, '4', 20, 'L', 212, 'T', 'c', 205, '5', 216, 156, 165, 205, '6', 220, 't', 245, 213, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 'N', 'J', 17, 249, 'D', 'T', 'L', 244, 212, 'c', 207, '=', 248, 160, 165, 207, '>', 252, 'x', 5, 22, '`', 'i', 's', 'o', '8', '8', '5', '9', '5', 0, 0, '(', 160, 'D', '\'', 221, 't', 212, 'U', 'g', 221, 'u', 216, 'e', 167, 221, 'v', 220, 181, 210, 157, 'w', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, '&', 127, 8, 'b', 136, '"', 142, 'H', 'b', 137, '&', 158, 136, 'b', 138, '*', 158, 178, '"', 139, 'i', 's', 'o', '8', '8', '5', '9', '6', 0, 0, '(', 160, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'b', 182, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 152, 0, 0, 0, 0, 153, 0, 148, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, 158, '|', 246, 233, '\'', 0, 0, 0, 0, 0, 0, 127, 2, 26, 168, 160, 131, 18, 'Z', 168, 161, 135, '"', 154, 168, 162, 139, '2', 218, 168, 163, 143, 'B', 26, ')', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '7', 0, 0, '(', 160, 'L', 'L', 241, '(', '$', 151, 'l', 202, ')', 168, 164, 146, 216, '*', 172, 180, 2, '@', 196, 176, 196, '"', 203, ',', 138, '-', 198, 216, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'i', 's', 'o', '8', '8', '5', '9', '8', 0, 0, '(', 160, 0, ' ', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 196, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'i', 's', 'o', '8', '8', '5', '9', '9', 0, 0, '4', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '0', 0, 0, '(', 160, 16, '$', 17, 'H', '(', 153, 4, 211, ')', '5', 'A', 'T', 213, 'V', 'r', 181, 242, 'U', 'P', 176, 20, '4', 'Q', 'H', ')', 157, 20, 211, '-', '6', 'E', 'd', 21, 'W', 's', 'E', 12, 150, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 204, '3', 208, 244, '4', 212, '4', 212, 'T', 'c', 'M', 'W', 216, 156, 165, 205, '6', 220, 't', 227, 205, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 206, ';', 240, 248, 'D', 212, '<', 244, 212, 'c', 143, 'W', 248, 160, 165, 207, '>', 252, 244, 227, 143, 'L', 'i', 's', 'o', '8', '8', '5', '9', '1', '1', 0, 't', 'i', 's', '6', '2', '0', 0, 0, '(', 160, 'x', 250, ')', 168, 161, 138, ':', '*', 169, 165, 154, 'z', '*', 170, 169, 170, 186, '*', 171, 173, 186, 250, '*', 172, 177, 202, ':', '+', 173, 181, 218, 'z', '+', 174, 185, 234, 186, '+', 175, 189, 250, 250, '+', 176, 193, 10, ';', ',', 177, 197, 26, '{', ',', 178, 201, '*', 187, ',', 179, 205, ':', 251, ',', 180, 209, 'J', ';', '-', 181, 213, 'Z', '{', '-', 0, 0, 0, 0, 0, 182, 217, 'j', 187, '-', 183, 221, 'z', 251, '-', 184, 225, 138, ';', '.', 185, 229, 154, '{', '.', 186, 233, 170, 187, '.', 187, 237, 186, 251, '.', 188, 241, 202, ';', '/', 189, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '1', '3', 0, 0, '(', 160, '\\', ',', 202, '(', 164, '`', 'l', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 22, 215, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, 197, 'i', 's', 'o', '8', '8', '5', '9', '1', '4', 0, 0, '(', 160, 212, 'k', 239, '(', 10, '-', 't', 239, ')', 3, 167, 'R', '0', 190, 9, 183, 226, 'J', '[', 249, 234, 235, 209, 'G', 251, 242, 'k', 'K', 191, 4, 251, 'k', 240, 191, 10, 31, 140, '0', 192, 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 'i', 'E', '#', 205, '4', 212, 'T', 'c', 'M', 192, 216, 'd', 163, 205, '6', 220, 't', 179, 214, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 'j', 197, '#', 207, '<', 244, 212, 'c', 143, 192, 248, 228, 163, 207, '>', 252, 244, 195, 214, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '5', 0, 'l', 'a', 't', 'i', 'n', '9', 0, 0, ')', '$', 151, 'R', 213, ')', 'V', 165, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 'r', 213, 'b', 203, '-', 's', 229, 162, 203, '.', 'G', '!', 213, 214, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '6', 0, 0, '(', 160, 16, 'T', 'P', 'N', '$', 'c', '\\', 213, ')', 'V', 165, 146, 215, '*', 'n', 181, 242, 22, '\\', 176, 196, 194, 144, 'N', 'r', ']', 'l', 203, '-', 's', '5', 164, 215, '.', 'G', '!', 213, 'V', '\\', 192, 4, '#', 140, '@', 196, 24, 'd', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 16, 237, '$', 205, '4', 212, 20, 'e', 205, 'S', 'e', 'e', 163, 205, '6', 220, 'X', 180, 215, '7', 224, 132, '#', 206, '@', 228, 28, 'd', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 17, 241, '$', 207, '<', 244, 24, 'e', 15, 'T', 'f', 229, 163, 207, '>', 252, '\\', 196, 215, '?', 'c', 'p', '1', '2', '5', '0', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '0', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', '\\', 149, 199, 'O', 'e', '%', 151, '[', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 'l', 213, 199, 'P', 'i', '5', 215, '[', 160, 248, 245, 'W', 'N', 164, 16, 'd', 202, ')', 168, 164, '2', 213, '*', 172, 180, 226, 10, '\\', 176, 196, 18, 152, 'N', 180, 212, 'b', 203, '-', 184, 20, 'D', 213, '.', '7', 13, 134, 'S', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'c', 'p', '1', '2', '5', '1', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '1', 0, 0, ' ', 210, 'M', 'W', 'q', 136, 24, 's', 156, 177, 198, '$', 'w', 156, 157, 199, 218, 'q', 183, 157, 'w', ' ', 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, '|', 226, 199, '(', 170, 152, '"', 139, 160, 't', 183, '"', 'v', 164, 180, 'h', 202, ')', 209, 165, 'B', 221, '*', 172, 180, 226, 202, 'u', 176, 196, 'b', 29, 137, '.', 214, 'b', 203, '-', 31, 154, ',', 226, '.', '&', 'V', '7', 'b', 137, 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 'c', 'p', '1', '2', '5', '2', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '2', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, ' ', 23, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, '0', 'W', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'c', 'p', '1', '2', '5', '3', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '3', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 0, 0, 0, 0, 160, ',', 198, 216, '(', 164, 148, 'b', 202, ')', 168, 164, 2, 192, '*', 172, 180, 226, 'J', 196, 176, 196, '"', 203, ',', 138, 213, 'b', 203, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'c', 'p', '1', '2', '5', '4', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '4', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'c', 'p', '1', '2', '5', '5', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '5', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 0, 0, 0, 0, 0, 160, 132, '"', 202, '(', '"', 151, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 203, '/', '/', 194, 24, 163, 140, '3', 210, 'X', 163, 141, '7', 226, 8, '@', 142, ':', 238, 200, 'c', 143, '>', 254, 8, 'd', 144, ']', 'z', 249, '%', 152, 'a', 2, 0, 0, 0, 0, 0, 0, 0, 0, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'c', 'p', '1', '2', '5', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '6', 0, 0, ' ', '$', 'O', 'Z', '1', ']', 24, 's', 156, 177, 198, '}', 'u', ',', 169, 199, 'G', 'Q', 'z', 'i', 165, 153, 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 152, 158, 'l', 233, 199, 'H', '-', 204, 176, 166, 160, 136, ')', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 178, 233, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, '2', 230, '.', 188, 244, 226, 11, 153, 156, 150, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, '5', '{', 242, 217, 167, 159, 127, 2, 26, 168, 160, 224, 12, '*', 14, 161, 133, 26, 'z', 232, '9', 232, 164, 163, 206, ':', 136, '&', 234, 206, ';', 138, '.', 202, 'h', 163, 244, '8', 250, 232, '=', 144, 230, 19, 233, '>', 252, '4', 236, 'p', 167, 'c', 'p', '1', '2', '5', '7', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '7', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 160, 226, 23, '.', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 188, 18, 24, 0, 160, 0, ' ', 202, '(', 164, 0, '`', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, '`', 'c', 'p', '1', '2', '5', '8', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '8', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 140, '@', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 132, '5', 227, 204, '3', 16, 'E', 's', 216, '4', 212, 212, 'e', 205, '5', 216, 'd', 163, 205, '6', 220, 220, 'e', 216, '7', 224, 132, '#', 206, '@', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 133, 181, 227, 206, ';', 17, 197, 131, 216, '<', 244, 216, 'e', 207, '=', 248, 228, 163, 207, '>', 252, 224, '5', 242, '?', 'k', 'o', 'i', '8', 'r', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, 'A', 11, '=', '4', 209, 'E', 27, '}', '4', 210, 'I', '+', 189, '4', 211, 'M', ';', 253, 't', 't', 'P', 'G', '-', 245, 212, 'T', 'W', 'm', 245, 213, 'X', 'g', 173, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'k', 'o', 'i', '8', 'u', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, '"', 10, 'M', 'b', 137, 'E', 27, '}', '4', 210, 'I', 187, 184, '4', 211, 'M', ';', 253, 't', 't', 212, 'E', 'm', 221, 'u', 'T', 'W', 'm', 245, 213, 'X', 183, 168, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'c', 'p', '4', '3', '7', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 141, '(', 163, 148, 18, '2', ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 192, 204, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 179, '}', 'c', 153, 'p', 165, 21, 'W', 139, 'q', 168, 'm', 182, 154, 'm', '*', '#', 'w', 219, 202, '-', 199, 242, 178, 203, '1', 203, '|', 15, 203, 176, 160, '|', 'K', 202, ' ', 203, '2', '6', '(', 'c', 'p', '8', '5', '0', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 13, '>', 163, '`', 's', 13, ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 184, 194, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', 7, '#', 12, '0', 169, 'D', 253, 's', 209, 'K', 139, 'R', 138, 205, '7', 243, 188, 's', 206, '3', 247, '<', 206, '0', 'H', 11, '}', '5', 213, 'N', 251, 172, '5', ')', 240, '@', 163, 204, '2', 200, 180, 212, 140, '3', 207, 224, '\\', 's', 215, '\\', 155, 194, 204, 214, 211, '|', 'C', 141, '4', 245, 'T', 'S', 139, '?', 222, 'h', 179, 'M', '6', 253, 't', 243, 10, '-', 173, 196, '"', 177, '/', 182, 156, 'r', 15, '.', 176, 160, 'r', 'K', '.', 179, 200, '2', '6', '(', 'c', 'p', '8', '6', '6', 0, 0, ' ', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 209, '}', 'H', 157, 136, 215, 149, 216, 221, 138, 176, 160, '|', 'K', 202, '&', 147, '2', '6', '(', 'i', 'b', 'm', '1', '0', '4', '7', 0, 'c', 'p', '1', '0', '4', '7', 0, 0, 1, 156, '$', '`', 200, 31, 151, '4', 226, 200, 2, 12, '4', 224, 192, 3, 16, 'D', ' ', 193, 4, 157, 20, 130, 192, '!', 24, 'd', ' ', 201, '#', 28, 't', 224, 193, 7, 128, 4, '"', 200, ' ', 132, '(', 'p', 193, 6, 136, '$', 162, 200, '"', 140, 20, '`', 192, 1, 144, 'D', 'b', 193, '$', 148, 'T', 'b', 9, 1, 152, 'd', 162, 201, '&', 20, 'T', 224, 137, 6, ' ', 128, '"', 14, '9', 224, 132, '3', 'N', '9', 231, 196, '#', 138, 11, '<', 160, 176, 2, 31, '&', 164, 163, 206, ':', 232, 180, 227, 206, ';', 236, '|', 19, 2, 9, '*', 164, 176, 131, 23, '-', 188, ' ', 12, '1', 192, 4, '3', 'L', '1', 199, 'D', 'c', 10, 11, '%', '|', 225, 195, 15, 248, '$', 163, 204, '2', 200, '4', 227, 204, '3', 204, 128, 161, 195, 8, '@', 156, 208, 131, 8, 216, 132, '!', 198, 24, 'd', 148, 'a', 198, 25, 'h', 164, 177, 202, '.', 240, 244, 227, 'O', ',', 176, 168, 177, 6, 27, 'm', 184, 241, 6, 28, 'q', 200, 161, 138, '.', 230, 224, 'b', 12, ')', 181, 248, '1', 7, 29, 'u', 216, 'q', 7, 30, 'y', 232, 17, 202, '/', 208, 'l', 225, 141, '+', 172, 140, 'R', 202, '-', 169, 156, 'b', 11, '/', 189, 248, 210, 13, '*', 175, 't', 'A', 203, '5', '{', 4, '!', 196, 16, 'D', 20, 'a', 196, 17, 'H', '$', 209, 10, '=', 246, 200, '3', 'O', '=', '}', '(', 177, 4, 19, 'M', '8', 241, 4, 20, 'Q', 'H', 145, 203, '>', 252, 228, 163, 207, '?', '\\', 220, '3', 5, 21, 'U', 'X', 'q', 5, 22, 'Y', 'h', '!', 11, '5', 214, 'H', '3', 'M', '5', '0', 196, ' ', 195, 12, '4', 212, '`', 195, 13, '8', 228, '0', 203, '6', 220, 'd', 163, 205, '\''} + +// C documentation +// +// /* Table of characters that appear in legacy 8-bit codepages, +// * limited to 1024 slots (10 bit indices). The first 256 entries +// * are elided since those characters are obviously all included. */ +var _legacy_chars = [612]uint16{ + 0: uint16(256), + 1: uint16(257), + 2: uint16(258), + 3: uint16(259), + 4: uint16(260), + 5: uint16(261), + 6: uint16(262), + 7: uint16(263), + 8: uint16(264), + 9: uint16(265), + 10: uint16(266), + 11: uint16(267), + 12: uint16(268), + 13: uint16(269), + 14: uint16(270), + 15: uint16(271), + 16: uint16(272), + 17: uint16(273), + 18: uint16(274), + 19: uint16(275), + 20: uint16(278), + 21: uint16(279), + 22: uint16(280), + 23: uint16(281), + 24: uint16(282), + 25: uint16(283), + 26: uint16(284), + 27: uint16(285), + 28: uint16(286), + 29: uint16(287), + 30: uint16(288), + 31: uint16(289), + 32: uint16(290), + 33: uint16(291), + 34: uint16(292), + 35: uint16(293), + 36: uint16(294), + 37: uint16(295), + 38: uint16(296), + 39: uint16(297), + 40: uint16(298), + 41: uint16(299), + 42: uint16(302), + 43: uint16(303), + 44: uint16(304), + 45: uint16(305), + 46: uint16(308), + 47: uint16(309), + 48: uint16(310), + 49: uint16(311), + 50: uint16(312), + 51: uint16(313), + 52: uint16(314), + 53: uint16(315), + 54: uint16(316), + 55: uint16(317), + 56: uint16(318), + 57: uint16(321), + 58: uint16(322), + 59: uint16(323), + 60: uint16(324), + 61: uint16(325), + 62: uint16(326), + 63: uint16(327), + 64: uint16(328), + 65: uint16(330), + 66: uint16(331), + 67: uint16(332), + 68: uint16(333), + 69: uint16(336), + 70: uint16(337), + 71: uint16(338), + 72: uint16(339), + 73: uint16(340), + 74: uint16(341), + 75: uint16(342), + 76: uint16(343), + 77: uint16(344), + 78: uint16(345), + 79: uint16(346), + 80: uint16(347), + 81: uint16(348), + 82: uint16(349), + 83: uint16(350), + 84: uint16(351), + 85: uint16(352), + 86: uint16(353), + 87: uint16(354), + 88: uint16(355), + 89: uint16(356), + 90: uint16(357), + 91: uint16(358), + 92: uint16(359), + 93: uint16(360), + 94: uint16(361), + 95: uint16(362), + 96: uint16(363), + 97: uint16(364), + 98: uint16(365), + 99: uint16(366), + 100: uint16(367), + 101: uint16(368), + 102: uint16(369), + 103: uint16(370), + 104: uint16(371), + 105: uint16(372), + 106: uint16(373), + 107: uint16(374), + 108: uint16(375), + 109: uint16(376), + 110: uint16(377), + 111: uint16(378), + 112: uint16(379), + 113: uint16(380), + 114: uint16(381), + 115: uint16(382), + 116: uint16(402), + 117: uint16(416), + 118: uint16(417), + 119: uint16(431), + 120: uint16(432), + 121: uint16(536), + 122: uint16(537), + 123: uint16(538), + 124: uint16(539), + 125: uint16(710), + 126: uint16(711), + 127: uint16(728), + 128: uint16(729), + 129: uint16(731), + 130: uint16(732), + 131: uint16(733), + 132: uint16(768), + 133: uint16(769), + 134: uint16(771), + 135: uint16(777), + 136: uint16(803), + 137: uint16(890), + 138: uint16(900), + 139: uint16(901), + 140: uint16(902), + 141: uint16(904), + 142: uint16(905), + 143: uint16(906), + 144: uint16(908), + 145: uint16(910), + 146: uint16(911), + 147: uint16(912), + 148: uint16(913), + 149: uint16(914), + 150: uint16(915), + 151: uint16(916), + 152: uint16(917), + 153: uint16(918), + 154: uint16(919), + 155: uint16(920), + 156: uint16(921), + 157: uint16(922), + 158: uint16(923), + 159: uint16(924), + 160: uint16(925), + 161: uint16(926), + 162: uint16(927), + 163: uint16(928), + 164: uint16(929), + 165: uint16(931), + 166: uint16(932), + 167: uint16(933), + 168: uint16(934), + 169: uint16(935), + 170: uint16(936), + 171: uint16(937), + 172: uint16(938), + 173: uint16(939), + 174: uint16(940), + 175: uint16(941), + 176: uint16(942), + 177: uint16(943), + 178: uint16(944), + 179: uint16(945), + 180: uint16(946), + 181: uint16(947), + 182: uint16(948), + 183: uint16(949), + 184: uint16(950), + 185: uint16(951), + 186: uint16(952), + 187: uint16(953), + 188: uint16(954), + 189: uint16(955), + 190: uint16(956), + 191: uint16(957), + 192: uint16(958), + 193: uint16(959), + 194: uint16(960), + 195: uint16(961), + 196: uint16(962), + 197: uint16(963), + 198: uint16(964), + 199: uint16(965), + 200: uint16(966), + 201: uint16(967), + 202: uint16(968), + 203: uint16(969), + 204: uint16(970), + 205: uint16(971), + 206: uint16(972), + 207: uint16(973), + 208: uint16(974), + 209: uint16(1025), + 210: uint16(1026), + 211: uint16(1027), + 212: uint16(1028), + 213: uint16(1029), + 214: uint16(1030), + 215: uint16(1031), + 216: uint16(1032), + 217: uint16(1033), + 218: uint16(1034), + 219: uint16(1035), + 220: uint16(1036), + 221: uint16(1038), + 222: uint16(1039), + 223: uint16(1040), + 224: uint16(1041), + 225: uint16(1042), + 226: uint16(1043), + 227: uint16(1044), + 228: uint16(1045), + 229: uint16(1046), + 230: uint16(1047), + 231: uint16(1048), + 232: uint16(1049), + 233: uint16(1050), + 234: uint16(1051), + 235: uint16(1052), + 236: uint16(1053), + 237: uint16(1054), + 238: uint16(1055), + 239: uint16(1056), + 240: uint16(1057), + 241: uint16(1058), + 242: uint16(1059), + 243: uint16(1060), + 244: uint16(1061), + 245: uint16(1062), + 246: uint16(1063), + 247: uint16(1064), + 248: uint16(1065), + 249: uint16(1066), + 250: uint16(1067), + 251: uint16(1068), + 252: uint16(1069), + 253: uint16(1070), + 254: uint16(1071), + 255: uint16(1072), + 256: uint16(1073), + 257: uint16(1074), + 258: uint16(1075), + 259: uint16(1076), + 260: uint16(1077), + 261: uint16(1078), + 262: uint16(1079), + 263: uint16(1080), + 264: uint16(1081), + 265: uint16(1082), + 266: uint16(1083), + 267: uint16(1084), + 268: uint16(1085), + 269: uint16(1086), + 270: uint16(1087), + 271: uint16(1088), + 272: uint16(1089), + 273: uint16(1090), + 274: uint16(1091), + 275: uint16(1092), + 276: uint16(1093), + 277: uint16(1094), + 278: uint16(1095), + 279: uint16(1096), + 280: uint16(1097), + 281: uint16(1098), + 282: uint16(1099), + 283: uint16(1100), + 284: uint16(1101), + 285: uint16(1102), + 286: uint16(1103), + 287: uint16(1105), + 288: uint16(1106), + 289: uint16(1107), + 290: uint16(1108), + 291: uint16(1109), + 292: uint16(1110), + 293: uint16(1111), + 294: uint16(1112), + 295: uint16(1113), + 296: uint16(1114), + 297: uint16(1115), + 298: uint16(1116), + 299: uint16(1118), + 300: uint16(1119), + 301: uint16(1168), + 302: uint16(1169), + 303: uint16(1456), + 304: uint16(1457), + 305: uint16(1458), + 306: uint16(1459), + 307: uint16(1460), + 308: uint16(1461), + 309: uint16(1462), + 310: uint16(1463), + 311: uint16(1464), + 312: uint16(1465), + 313: uint16(1467), + 314: uint16(1468), + 315: uint16(1469), + 316: uint16(1470), + 317: uint16(1471), + 318: uint16(1472), + 319: uint16(1473), + 320: uint16(1474), + 321: uint16(1475), + 322: uint16(1488), + 323: uint16(1489), + 324: uint16(1490), + 325: uint16(1491), + 326: uint16(1492), + 327: uint16(1493), + 328: uint16(1494), + 329: uint16(1495), + 330: uint16(1496), + 331: uint16(1497), + 332: uint16(1498), + 333: uint16(1499), + 334: uint16(1500), + 335: uint16(1501), + 336: uint16(1502), + 337: uint16(1503), + 338: uint16(1504), + 339: uint16(1505), + 340: uint16(1506), + 341: uint16(1507), + 342: uint16(1508), + 343: uint16(1509), + 344: uint16(1510), + 345: uint16(1511), + 346: uint16(1512), + 347: uint16(1513), + 348: uint16(1514), + 349: uint16(1520), + 350: uint16(1521), + 351: uint16(1522), + 352: uint16(1523), + 353: uint16(1524), + 354: uint16(1548), + 355: uint16(1563), + 356: uint16(1567), + 357: uint16(1569), + 358: uint16(1570), + 359: uint16(1571), + 360: uint16(1572), + 361: uint16(1573), + 362: uint16(1574), + 363: uint16(1575), + 364: uint16(1576), + 365: uint16(1577), + 366: uint16(1578), + 367: uint16(1579), + 368: uint16(1580), + 369: uint16(1581), + 370: uint16(1582), + 371: uint16(1583), + 372: uint16(1584), + 373: uint16(1585), + 374: uint16(1586), + 375: uint16(1587), + 376: uint16(1588), + 377: uint16(1589), + 378: uint16(1590), + 379: uint16(1591), + 380: uint16(1592), + 381: uint16(1593), + 382: uint16(1594), + 383: uint16(1600), + 384: uint16(1601), + 385: uint16(1602), + 386: uint16(1603), + 387: uint16(1604), + 388: uint16(1605), + 389: uint16(1606), + 390: uint16(1607), + 391: uint16(1608), + 392: uint16(1609), + 393: uint16(1610), + 394: uint16(1611), + 395: uint16(1612), + 396: uint16(1613), + 397: uint16(1614), + 398: uint16(1615), + 399: uint16(1616), + 400: uint16(1617), + 401: uint16(1618), + 402: uint16(1657), + 403: uint16(1662), + 404: uint16(1670), + 405: uint16(1672), + 406: uint16(1681), + 407: uint16(1688), + 408: uint16(1705), + 409: uint16(1711), + 410: uint16(1722), + 411: uint16(1726), + 412: uint16(1729), + 413: uint16(1746), + 414: uint16(3585), + 415: uint16(3586), + 416: uint16(3587), + 417: uint16(3588), + 418: uint16(3589), + 419: uint16(3590), + 420: uint16(3591), + 421: uint16(3592), + 422: uint16(3593), + 423: uint16(3594), + 424: uint16(3595), + 425: uint16(3596), + 426: uint16(3597), + 427: uint16(3598), + 428: uint16(3599), + 429: uint16(3600), + 430: uint16(3601), + 431: uint16(3602), + 432: uint16(3603), + 433: uint16(3604), + 434: uint16(3605), + 435: uint16(3606), + 436: uint16(3607), + 437: uint16(3608), + 438: uint16(3609), + 439: uint16(3610), + 440: uint16(3611), + 441: uint16(3612), + 442: uint16(3613), + 443: uint16(3614), + 444: uint16(3615), + 445: uint16(3616), + 446: uint16(3617), + 447: uint16(3618), + 448: uint16(3619), + 449: uint16(3620), + 450: uint16(3621), + 451: uint16(3622), + 452: uint16(3623), + 453: uint16(3624), + 454: uint16(3625), + 455: uint16(3626), + 456: uint16(3627), + 457: uint16(3628), + 458: uint16(3629), + 459: uint16(3630), + 460: uint16(3631), + 461: uint16(3632), + 462: uint16(3633), + 463: uint16(3634), + 464: uint16(3635), + 465: uint16(3636), + 466: uint16(3637), + 467: uint16(3638), + 468: uint16(3639), + 469: uint16(3640), + 470: uint16(3641), + 471: uint16(3642), + 472: uint16(3647), + 473: uint16(3648), + 474: uint16(3649), + 475: uint16(3650), + 476: uint16(3651), + 477: uint16(3652), + 478: uint16(3653), + 479: uint16(3654), + 480: uint16(3655), + 481: uint16(3656), + 482: uint16(3657), + 483: uint16(3658), + 484: uint16(3659), + 485: uint16(3660), + 486: uint16(3661), + 487: uint16(3662), + 488: uint16(3663), + 489: uint16(3664), + 490: uint16(3665), + 491: uint16(3666), + 492: uint16(3667), + 493: uint16(3668), + 494: uint16(3669), + 495: uint16(3670), + 496: uint16(3671), + 497: uint16(3672), + 498: uint16(3673), + 499: uint16(3674), + 500: uint16(3675), + 501: uint16(7682), + 502: uint16(7683), + 503: uint16(7690), + 504: uint16(7691), + 505: uint16(7710), + 506: uint16(7711), + 507: uint16(7744), + 508: uint16(7745), + 509: uint16(7766), + 510: uint16(7767), + 511: uint16(7776), + 512: uint16(7777), + 513: uint16(7786), + 514: uint16(7787), + 515: uint16(7808), + 516: uint16(7809), + 517: uint16(7810), + 518: uint16(7811), + 519: uint16(7812), + 520: uint16(7813), + 521: uint16(7922), + 522: uint16(7923), + 523: uint16(8204), + 524: uint16(8205), + 525: uint16(8206), + 526: uint16(8207), + 527: uint16(8211), + 528: uint16(8212), + 529: uint16(8213), + 530: uint16(8215), + 531: uint16(8216), + 532: uint16(8217), + 533: uint16(8218), + 534: uint16(8220), + 535: uint16(8221), + 536: uint16(8222), + 537: uint16(8224), + 538: uint16(8225), + 539: uint16(8226), + 540: uint16(8230), + 541: uint16(8240), + 542: uint16(8249), + 543: uint16(8250), + 544: uint16(8319), + 545: uint16(8359), + 546: uint16(8362), + 547: uint16(8363), + 548: uint16(8364), + 549: uint16(8367), + 550: uint16(8470), + 551: uint16(8482), + 552: uint16(8729), + 553: uint16(8730), + 554: uint16(8734), + 555: uint16(8745), + 556: uint16(8776), + 557: uint16(8801), + 558: uint16(8804), + 559: uint16(8805), + 560: uint16(8976), + 561: uint16(8992), + 562: uint16(8993), + 563: uint16(9472), + 564: uint16(9474), + 565: uint16(9484), + 566: uint16(9488), + 567: uint16(9492), + 568: uint16(9496), + 569: uint16(9500), + 570: uint16(9508), + 571: uint16(9516), + 572: uint16(9524), + 573: uint16(9532), + 574: uint16(9552), + 575: uint16(9553), + 576: uint16(9554), + 577: uint16(9555), + 578: uint16(9556), + 579: uint16(9557), + 580: uint16(9558), + 581: uint16(9559), + 582: uint16(9560), + 583: uint16(9561), + 584: uint16(9562), + 585: uint16(9563), + 586: uint16(9564), + 587: uint16(9565), + 588: uint16(9566), + 589: uint16(9567), + 590: uint16(9568), + 591: uint16(9569), + 592: uint16(9570), + 593: uint16(9571), + 594: uint16(9572), + 595: uint16(9573), + 596: uint16(9574), + 597: uint16(9575), + 598: uint16(9576), + 599: uint16(9577), + 600: uint16(9578), + 601: uint16(9579), + 602: uint16(9580), + 603: uint16(9600), + 604: uint16(9604), + 605: uint16(9608), + 606: uint16(9612), + 607: uint16(9616), + 608: uint16(9617), + 609: uint16(9618), + 610: uint16(9619), + 611: uint16(9632), +} + +var _jis0208 = [84][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(65292), + 4: uint16(65294), + 5: uint16(12539), + 6: uint16(65306), + 7: uint16(65307), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(12443), + 11: uint16(12444), + 12: uint16(180), + 13: uint16(65344), + 14: uint16(168), + 15: uint16(65342), + 16: uint16(65507), + 17: uint16(65343), + 18: uint16(12541), + 19: uint16(12542), + 20: uint16(12445), + 21: uint16(12446), + 22: uint16(12291), + 23: uint16(20189), + 24: uint16(12293), + 25: uint16(12294), + 26: uint16(12295), + 27: uint16(12540), + 28: uint16(8213), + 29: uint16(8208), + 30: uint16(65295), + 31: uint16(92), + 32: uint16(12316), + 33: uint16(8214), + 34: uint16(65372), + 35: uint16(8230), + 36: uint16(8229), + 37: uint16(8216), + 38: uint16(8217), + 39: uint16(8220), + 40: uint16(8221), + 41: uint16(65288), + 42: uint16(65289), + 43: uint16(12308), + 44: uint16(12309), + 45: uint16(65339), + 46: uint16(65341), + 47: uint16(65371), + 48: uint16(65373), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(12298), + 52: uint16(12299), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(12302), + 56: uint16(12303), + 57: uint16(12304), + 58: uint16(12305), + 59: uint16(65291), + 60: uint16(8722), + 61: uint16(177), + 62: uint16(215), + 63: uint16(247), + 64: uint16(65309), + 65: uint16(8800), + 66: uint16(65308), + 67: uint16(65310), + 68: uint16(8806), + 69: uint16(8807), + 70: uint16(8734), + 71: uint16(8756), + 72: uint16(9794), + 73: uint16(9792), + 74: uint16(176), + 75: uint16(8242), + 76: uint16(8243), + 77: uint16(8451), + 78: uint16(65509), + 79: uint16(65284), + 80: uint16(162), + 81: uint16(163), + 82: uint16(65285), + 83: uint16(65283), + 84: uint16(65286), + 85: uint16(65290), + 86: uint16(65312), + 87: uint16(167), + 88: uint16(9734), + 89: uint16(9733), + 90: uint16(9675), + 91: uint16(9679), + 92: uint16(9678), + 93: uint16(9671), + }, + 1: { + 0: uint16(9670), + 1: uint16(9633), + 2: uint16(9632), + 3: uint16(9651), + 4: uint16(9650), + 5: uint16(9661), + 6: uint16(9660), + 7: uint16(8251), + 8: uint16(12306), + 9: uint16(8594), + 10: uint16(8592), + 11: uint16(8593), + 12: uint16(8595), + 13: uint16(12307), + 25: uint16(8712), + 26: uint16(8715), + 27: uint16(8838), + 28: uint16(8839), + 29: uint16(8834), + 30: uint16(8835), + 31: uint16(8746), + 32: uint16(8745), + 41: uint16(8743), + 42: uint16(8744), + 43: uint16(172), + 44: uint16(8658), + 45: uint16(8660), + 46: uint16(8704), + 47: uint16(8707), + 59: uint16(8736), + 60: uint16(8869), + 61: uint16(8978), + 62: uint16(8706), + 63: uint16(8711), + 64: uint16(8801), + 65: uint16(8786), + 66: uint16(8810), + 67: uint16(8811), + 68: uint16(8730), + 69: uint16(8765), + 70: uint16(8733), + 71: uint16(8757), + 72: uint16(8747), + 73: uint16(8748), + 81: uint16(8491), + 82: uint16(8240), + 83: uint16(9839), + 84: uint16(9837), + 85: uint16(9834), + 86: uint16(8224), + 87: uint16(8225), + 88: uint16(182), + 93: uint16(9711), + }, + 2: { + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + }, + 3: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 4: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 5: { + 0: uint16(913), + 1: uint16(914), + 2: uint16(915), + 3: uint16(916), + 4: uint16(917), + 5: uint16(918), + 6: uint16(919), + 7: uint16(920), + 8: uint16(921), + 9: uint16(922), + 10: uint16(923), + 11: uint16(924), + 12: uint16(925), + 13: uint16(926), + 14: uint16(927), + 15: uint16(928), + 16: uint16(929), + 17: uint16(931), + 18: uint16(932), + 19: uint16(933), + 20: uint16(934), + 21: uint16(935), + 22: uint16(936), + 23: uint16(937), + 32: uint16(945), + 33: uint16(946), + 34: uint16(947), + 35: uint16(948), + 36: uint16(949), + 37: uint16(950), + 38: uint16(951), + 39: uint16(952), + 40: uint16(953), + 41: uint16(954), + 42: uint16(955), + 43: uint16(956), + 44: uint16(957), + 45: uint16(958), + 46: uint16(959), + 47: uint16(960), + 48: uint16(961), + 49: uint16(963), + 50: uint16(964), + 51: uint16(965), + 52: uint16(966), + 53: uint16(967), + 54: uint16(968), + 55: uint16(969), + }, + 6: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 7: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + }, + 8: {}, + 9: {}, + 10: {}, + 11: {}, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(20124), + 1: uint16(21782), + 2: uint16(23043), + 3: uint16(38463), + 4: uint16(21696), + 5: uint16(24859), + 6: uint16(25384), + 7: uint16(23030), + 8: uint16(36898), + 9: uint16(33909), + 10: uint16(33564), + 11: uint16(31312), + 12: uint16(24746), + 13: uint16(25569), + 14: uint16(28197), + 15: uint16(26093), + 16: uint16(33894), + 17: uint16(33446), + 18: uint16(39925), + 19: uint16(26771), + 20: uint16(22311), + 21: uint16(26017), + 22: uint16(25201), + 23: uint16(23451), + 24: uint16(22992), + 25: uint16(34427), + 26: uint16(39156), + 27: uint16(32098), + 28: uint16(32190), + 29: uint16(39822), + 30: uint16(25110), + 31: uint16(31903), + 32: uint16(34999), + 33: uint16(23433), + 34: uint16(24245), + 35: uint16(25353), + 36: uint16(26263), + 37: uint16(26696), + 38: uint16(38343), + 39: uint16(38797), + 40: uint16(26447), + 41: uint16(20197), + 42: uint16(20234), + 43: uint16(20301), + 44: uint16(20381), + 45: uint16(20553), + 46: uint16(22258), + 47: uint16(22839), + 48: uint16(22996), + 49: uint16(23041), + 50: uint16(23561), + 51: uint16(24799), + 52: uint16(24847), + 53: uint16(24944), + 54: uint16(26131), + 55: uint16(26885), + 56: uint16(28858), + 57: uint16(30031), + 58: uint16(30064), + 59: uint16(31227), + 60: uint16(32173), + 61: uint16(32239), + 62: uint16(32963), + 63: uint16(33806), + 64: uint16(34915), + 65: uint16(35586), + 66: uint16(36949), + 67: uint16(36986), + 68: uint16(21307), + 69: uint16(20117), + 70: uint16(20133), + 71: uint16(22495), + 72: uint16(32946), + 73: uint16(37057), + 74: uint16(30959), + 75: uint16(19968), + 76: uint16(22769), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(31282), + 80: uint16(33576), + 81: uint16(33419), + 82: uint16(39983), + 83: uint16(20801), + 84: uint16(21360), + 85: uint16(21693), + 86: uint16(21729), + 87: uint16(22240), + 88: uint16(23035), + 89: uint16(24341), + 90: uint16(39154), + 91: uint16(28139), + 92: uint16(32996), + 93: uint16(34093), + }, + 16: { + 0: uint16(38498), + 1: uint16(38512), + 2: uint16(38560), + 3: uint16(38907), + 4: uint16(21515), + 5: uint16(21491), + 6: uint16(23431), + 7: uint16(28879), + 8: uint16(32701), + 9: uint16(36802), + 10: uint16(38632), + 11: uint16(21359), + 12: uint16(40284), + 13: uint16(31418), + 14: uint16(19985), + 15: uint16(30867), + 16: uint16(33276), + 17: uint16(28198), + 18: uint16(22040), + 19: uint16(21764), + 20: uint16(27421), + 21: uint16(34074), + 22: uint16(39995), + 23: uint16(23013), + 24: uint16(21417), + 25: uint16(28006), + 26: uint16(29916), + 27: uint16(38287), + 28: uint16(22082), + 29: uint16(20113), + 30: uint16(36939), + 31: uint16(38642), + 32: uint16(33615), + 33: uint16(39180), + 34: uint16(21473), + 35: uint16(21942), + 36: uint16(23344), + 37: uint16(24433), + 38: uint16(26144), + 39: uint16(26355), + 40: uint16(26628), + 41: uint16(27704), + 42: uint16(27891), + 43: uint16(27945), + 44: uint16(29787), + 45: uint16(30408), + 46: uint16(31310), + 47: uint16(38964), + 48: uint16(33521), + 49: uint16(34907), + 50: uint16(35424), + 51: uint16(37613), + 52: uint16(28082), + 53: uint16(30123), + 54: uint16(30410), + 55: uint16(39365), + 56: uint16(24742), + 57: uint16(35585), + 58: uint16(36234), + 59: uint16(38322), + 60: uint16(27022), + 61: uint16(21421), + 62: uint16(20870), + 63: uint16(22290), + 64: uint16(22576), + 65: uint16(22852), + 66: uint16(23476), + 67: uint16(24310), + 68: uint16(24616), + 69: uint16(25513), + 70: uint16(25588), + 71: uint16(27839), + 72: uint16(28436), + 73: uint16(28814), + 74: uint16(28948), + 75: uint16(29017), + 76: uint16(29141), + 77: uint16(29503), + 78: uint16(32257), + 79: uint16(33398), + 80: uint16(33489), + 81: uint16(34199), + 82: uint16(36960), + 83: uint16(37467), + 84: uint16(40219), + 85: uint16(22633), + 86: uint16(26044), + 87: uint16(27738), + 88: uint16(29989), + 89: uint16(20985), + 90: uint16(22830), + 91: uint16(22885), + 92: uint16(24448), + 93: uint16(24540), + }, + 17: { + 0: uint16(25276), + 1: uint16(26106), + 2: uint16(27178), + 3: uint16(27431), + 4: uint16(27572), + 5: uint16(29579), + 6: uint16(32705), + 7: uint16(35158), + 8: uint16(40236), + 9: uint16(40206), + 10: uint16(40644), + 11: uint16(23713), + 12: uint16(27798), + 13: uint16(33659), + 14: uint16(20740), + 15: uint16(23627), + 16: uint16(25014), + 17: uint16(33222), + 18: uint16(26742), + 19: uint16(29281), + 20: uint16(20057), + 21: uint16(20474), + 22: uint16(21368), + 23: uint16(24681), + 24: uint16(28201), + 25: uint16(31311), + 26: uint16(38899), + 27: uint16(19979), + 28: uint16(21270), + 29: uint16(20206), + 30: uint16(20309), + 31: uint16(20285), + 32: uint16(20385), + 33: uint16(20339), + 34: uint16(21152), + 35: uint16(21487), + 36: uint16(22025), + 37: uint16(22799), + 38: uint16(23233), + 39: uint16(23478), + 40: uint16(23521), + 41: uint16(31185), + 42: uint16(26247), + 43: uint16(26524), + 44: uint16(26550), + 45: uint16(27468), + 46: uint16(27827), + 47: uint16(28779), + 48: uint16(29634), + 49: uint16(31117), + 50: uint16(31166), + 51: uint16(31292), + 52: uint16(31623), + 53: uint16(33457), + 54: uint16(33499), + 55: uint16(33540), + 56: uint16(33655), + 57: uint16(33775), + 58: uint16(33747), + 59: uint16(34662), + 60: uint16(35506), + 61: uint16(22057), + 62: uint16(36008), + 63: uint16(36838), + 64: uint16(36942), + 65: uint16(38686), + 66: uint16(34442), + 67: uint16(20420), + 68: uint16(23784), + 69: uint16(25105), + 70: uint16(29273), + 71: uint16(30011), + 72: uint16(33253), + 73: uint16(33469), + 74: uint16(34558), + 75: uint16(36032), + 76: uint16(38597), + 77: uint16(39187), + 78: uint16(39381), + 79: uint16(20171), + 80: uint16(20250), + 81: uint16(35299), + 82: uint16(22238), + 83: uint16(22602), + 84: uint16(22730), + 85: uint16(24315), + 86: uint16(24555), + 87: uint16(24618), + 88: uint16(24724), + 89: uint16(24674), + 90: uint16(25040), + 91: uint16(25106), + 92: uint16(25296), + 93: uint16(25913), + }, + 18: { + 0: uint16(39745), + 1: uint16(26214), + 2: uint16(26800), + 3: uint16(28023), + 4: uint16(28784), + 5: uint16(30028), + 6: uint16(30342), + 7: uint16(32117), + 8: uint16(33445), + 9: uint16(34809), + 10: uint16(38283), + 11: uint16(38542), + 12: uint16(35997), + 13: uint16(20977), + 14: uint16(21182), + 15: uint16(22806), + 16: uint16(21683), + 17: uint16(23475), + 18: uint16(23830), + 19: uint16(24936), + 20: uint16(27010), + 21: uint16(28079), + 22: uint16(30861), + 23: uint16(33995), + 24: uint16(34903), + 25: uint16(35442), + 26: uint16(37799), + 27: uint16(39608), + 28: uint16(28012), + 29: uint16(39336), + 30: uint16(34521), + 31: uint16(22435), + 32: uint16(26623), + 33: uint16(34510), + 34: uint16(37390), + 35: uint16(21123), + 36: uint16(22151), + 37: uint16(21508), + 38: uint16(24275), + 39: uint16(25313), + 40: uint16(25785), + 41: uint16(26684), + 42: uint16(26680), + 43: uint16(27579), + 44: uint16(29554), + 45: uint16(30906), + 46: uint16(31339), + 47: uint16(35226), + 48: uint16(35282), + 49: uint16(36203), + 50: uint16(36611), + 51: uint16(37101), + 52: uint16(38307), + 53: uint16(38548), + 54: uint16(38761), + 55: uint16(23398), + 56: uint16(23731), + 57: uint16(27005), + 58: uint16(38989), + 59: uint16(38990), + 60: uint16(25499), + 61: uint16(31520), + 62: uint16(27179), + 63: uint16(27263), + 64: uint16(26806), + 65: uint16(39949), + 66: uint16(28511), + 67: uint16(21106), + 68: uint16(21917), + 69: uint16(24688), + 70: uint16(25324), + 71: uint16(27963), + 72: uint16(28167), + 73: uint16(28369), + 74: uint16(33883), + 75: uint16(35088), + 76: uint16(36676), + 77: uint16(19988), + 78: uint16(39993), + 79: uint16(21494), + 80: uint16(26907), + 81: uint16(27194), + 82: uint16(38788), + 83: uint16(26666), + 84: uint16(20828), + 85: uint16(31427), + 86: uint16(33970), + 87: uint16(37340), + 88: uint16(37772), + 89: uint16(22107), + 90: uint16(40232), + 91: uint16(26658), + 92: uint16(33541), + 93: uint16(33841), + }, + 19: { + 0: uint16(31909), + 1: uint16(21000), + 2: uint16(33477), + 3: uint16(29926), + 4: uint16(20094), + 5: uint16(20355), + 6: uint16(20896), + 7: uint16(23506), + 8: uint16(21002), + 9: uint16(21208), + 10: uint16(21223), + 11: uint16(24059), + 12: uint16(21914), + 13: uint16(22570), + 14: uint16(23014), + 15: uint16(23436), + 16: uint16(23448), + 17: uint16(23515), + 18: uint16(24178), + 19: uint16(24185), + 20: uint16(24739), + 21: uint16(24863), + 22: uint16(24931), + 23: uint16(25022), + 24: uint16(25563), + 25: uint16(25954), + 26: uint16(26577), + 27: uint16(26707), + 28: uint16(26874), + 29: uint16(27454), + 30: uint16(27475), + 31: uint16(27735), + 32: uint16(28450), + 33: uint16(28567), + 34: uint16(28485), + 35: uint16(29872), + 36: uint16(29976), + 37: uint16(30435), + 38: uint16(30475), + 39: uint16(31487), + 40: uint16(31649), + 41: uint16(31777), + 42: uint16(32233), + 43: uint16(32566), + 44: uint16(32752), + 45: uint16(32925), + 46: uint16(33382), + 47: uint16(33694), + 48: uint16(35251), + 49: uint16(35532), + 50: uint16(36011), + 51: uint16(36996), + 52: uint16(37969), + 53: uint16(38291), + 54: uint16(38289), + 55: uint16(38306), + 56: uint16(38501), + 57: uint16(38867), + 58: uint16(39208), + 59: uint16(33304), + 60: uint16(20024), + 61: uint16(21547), + 62: uint16(23736), + 63: uint16(24012), + 64: uint16(29609), + 65: uint16(30284), + 66: uint16(30524), + 67: uint16(23721), + 68: uint16(32747), + 69: uint16(36107), + 70: uint16(38593), + 71: uint16(38929), + 72: uint16(38996), + 73: uint16(39000), + 74: uint16(20225), + 75: uint16(20238), + 76: uint16(21361), + 77: uint16(21916), + 78: uint16(22120), + 79: uint16(22522), + 80: uint16(22855), + 81: uint16(23305), + 82: uint16(23492), + 83: uint16(23696), + 84: uint16(24076), + 85: uint16(24190), + 86: uint16(24524), + 87: uint16(25582), + 88: uint16(26426), + 89: uint16(26071), + 90: uint16(26082), + 91: uint16(26399), + 92: uint16(26827), + 93: uint16(26820), + }, + 20: { + 0: uint16(27231), + 1: uint16(24112), + 2: uint16(27589), + 3: uint16(27671), + 4: uint16(27773), + 5: uint16(30079), + 6: uint16(31048), + 7: uint16(23395), + 8: uint16(31232), + 9: uint16(32000), + 10: uint16(24509), + 11: uint16(35215), + 12: uint16(35352), + 13: uint16(36020), + 14: uint16(36215), + 15: uint16(36556), + 16: uint16(36637), + 17: uint16(39138), + 18: uint16(39438), + 19: uint16(39740), + 20: uint16(20096), + 21: uint16(20605), + 22: uint16(20736), + 23: uint16(22931), + 24: uint16(23452), + 25: uint16(25135), + 26: uint16(25216), + 27: uint16(25836), + 28: uint16(27450), + 29: uint16(29344), + 30: uint16(30097), + 31: uint16(31047), + 32: uint16(32681), + 33: uint16(34811), + 34: uint16(35516), + 35: uint16(35696), + 36: uint16(25516), + 37: uint16(33738), + 38: uint16(38816), + 39: uint16(21513), + 40: uint16(21507), + 41: uint16(21931), + 42: uint16(26708), + 43: uint16(27224), + 44: uint16(35440), + 45: uint16(30759), + 46: uint16(26485), + 47: uint16(40653), + 48: uint16(21364), + 49: uint16(23458), + 50: uint16(33050), + 51: uint16(34384), + 52: uint16(36870), + 53: uint16(19992), + 54: uint16(20037), + 55: uint16(20167), + 56: uint16(20241), + 57: uint16(21450), + 58: uint16(21560), + 59: uint16(23470), + 60: uint16(24339), + 61: uint16(24613), + 62: uint16(25937), + 63: uint16(26429), + 64: uint16(27714), + 65: uint16(27762), + 66: uint16(27875), + 67: uint16(28792), + 68: uint16(29699), + 69: uint16(31350), + 70: uint16(31406), + 71: uint16(31496), + 72: uint16(32026), + 73: uint16(31998), + 74: uint16(32102), + 75: uint16(26087), + 76: uint16(29275), + 77: uint16(21435), + 78: uint16(23621), + 79: uint16(24040), + 80: uint16(25298), + 81: uint16(25312), + 82: uint16(25369), + 83: uint16(28192), + 84: uint16(34394), + 85: uint16(35377), + 86: uint16(36317), + 87: uint16(37624), + 88: uint16(28417), + 89: uint16(31142), + 90: uint16(39770), + 91: uint16(20136), + 92: uint16(20139), + 93: uint16(20140), + }, + 21: { + 0: uint16(20379), + 1: uint16(20384), + 2: uint16(20689), + 3: uint16(20807), + 4: uint16(31478), + 5: uint16(20849), + 6: uint16(20982), + 7: uint16(21332), + 8: uint16(21281), + 9: uint16(21375), + 10: uint16(21483), + 11: uint16(21932), + 12: uint16(22659), + 13: uint16(23777), + 14: uint16(24375), + 15: uint16(24394), + 16: uint16(24623), + 17: uint16(24656), + 18: uint16(24685), + 19: uint16(25375), + 20: uint16(25945), + 21: uint16(27211), + 22: uint16(27841), + 23: uint16(29378), + 24: uint16(29421), + 25: uint16(30703), + 26: uint16(33016), + 27: uint16(33029), + 28: uint16(33288), + 29: uint16(34126), + 30: uint16(37111), + 31: uint16(37857), + 32: uint16(38911), + 33: uint16(39255), + 34: uint16(39514), + 35: uint16(20208), + 36: uint16(20957), + 37: uint16(23597), + 38: uint16(26241), + 39: uint16(26989), + 40: uint16(23616), + 41: uint16(26354), + 42: uint16(26997), + 43: uint16(29577), + 44: uint16(26704), + 45: uint16(31873), + 46: uint16(20677), + 47: uint16(21220), + 48: uint16(22343), + 49: uint16(24062), + 50: uint16(37670), + 51: uint16(26020), + 52: uint16(27427), + 53: uint16(27453), + 54: uint16(29748), + 55: uint16(31105), + 56: uint16(31165), + 57: uint16(31563), + 58: uint16(32202), + 59: uint16(33465), + 60: uint16(33740), + 61: uint16(34943), + 62: uint16(35167), + 63: uint16(35641), + 64: uint16(36817), + 65: uint16(37329), + 66: uint16(21535), + 67: uint16(37504), + 68: uint16(20061), + 69: uint16(20534), + 70: uint16(21477), + 71: uint16(21306), + 72: uint16(29399), + 73: uint16(29590), + 74: uint16(30697), + 75: uint16(33510), + 76: uint16(36527), + 77: uint16(39366), + 78: uint16(39368), + 79: uint16(39378), + 80: uint16(20855), + 81: uint16(24858), + 82: uint16(34398), + 83: uint16(21936), + 84: uint16(31354), + 85: uint16(20598), + 86: uint16(23507), + 87: uint16(36935), + 88: uint16(38533), + 89: uint16(20018), + 90: uint16(27355), + 91: uint16(37351), + 92: uint16(23633), + 93: uint16(23624), + }, + 22: { + 0: uint16(25496), + 1: uint16(31391), + 2: uint16(27795), + 3: uint16(38772), + 4: uint16(36705), + 5: uint16(31402), + 6: uint16(29066), + 7: uint16(38536), + 8: uint16(31874), + 9: uint16(26647), + 10: uint16(32368), + 11: uint16(26705), + 12: uint16(37740), + 13: uint16(21234), + 14: uint16(21531), + 15: uint16(34219), + 16: uint16(35347), + 17: uint16(32676), + 18: uint16(36557), + 19: uint16(37089), + 20: uint16(21350), + 21: uint16(34952), + 22: uint16(31041), + 23: uint16(20418), + 24: uint16(20670), + 25: uint16(21009), + 26: uint16(20804), + 27: uint16(21843), + 28: uint16(22317), + 29: uint16(29674), + 30: uint16(22411), + 31: uint16(22865), + 32: uint16(24418), + 33: uint16(24452), + 34: uint16(24693), + 35: uint16(24950), + 36: uint16(24935), + 37: uint16(25001), + 38: uint16(25522), + 39: uint16(25658), + 40: uint16(25964), + 41: uint16(26223), + 42: uint16(26690), + 43: uint16(28179), + 44: uint16(30054), + 45: uint16(31293), + 46: uint16(31995), + 47: uint16(32076), + 48: uint16(32153), + 49: uint16(32331), + 50: uint16(32619), + 51: uint16(33550), + 52: uint16(33610), + 53: uint16(34509), + 54: uint16(35336), + 55: uint16(35427), + 56: uint16(35686), + 57: uint16(36605), + 58: uint16(38938), + 59: uint16(40335), + 60: uint16(33464), + 61: uint16(36814), + 62: uint16(39912), + 63: uint16(21127), + 64: uint16(25119), + 65: uint16(25731), + 66: uint16(28608), + 67: uint16(38553), + 68: uint16(26689), + 69: uint16(20625), + 70: uint16(27424), + 71: uint16(27770), + 72: uint16(28500), + 73: uint16(31348), + 74: uint16(32080), + 75: uint16(34880), + 76: uint16(35363), + 77: uint16(26376), + 78: uint16(20214), + 79: uint16(20537), + 80: uint16(20518), + 81: uint16(20581), + 82: uint16(20860), + 83: uint16(21048), + 84: uint16(21091), + 85: uint16(21927), + 86: uint16(22287), + 87: uint16(22533), + 88: uint16(23244), + 89: uint16(24314), + 90: uint16(25010), + 91: uint16(25080), + 92: uint16(25331), + 93: uint16(25458), + }, + 23: { + 0: uint16(26908), + 1: uint16(27177), + 2: uint16(29309), + 3: uint16(29356), + 4: uint16(29486), + 5: uint16(30740), + 6: uint16(30831), + 7: uint16(32121), + 8: uint16(30476), + 9: uint16(32937), + 10: uint16(35211), + 11: uint16(35609), + 12: uint16(36066), + 13: uint16(36562), + 14: uint16(36963), + 15: uint16(37749), + 16: uint16(38522), + 17: uint16(38997), + 18: uint16(39443), + 19: uint16(40568), + 20: uint16(20803), + 21: uint16(21407), + 22: uint16(21427), + 23: uint16(24187), + 24: uint16(24358), + 25: uint16(28187), + 26: uint16(28304), + 27: uint16(29572), + 28: uint16(29694), + 29: uint16(32067), + 30: uint16(33335), + 31: uint16(35328), + 32: uint16(35578), + 33: uint16(38480), + 34: uint16(20046), + 35: uint16(20491), + 36: uint16(21476), + 37: uint16(21628), + 38: uint16(22266), + 39: uint16(22993), + 40: uint16(23396), + 41: uint16(24049), + 42: uint16(24235), + 43: uint16(24359), + 44: uint16(25144), + 45: uint16(25925), + 46: uint16(26543), + 47: uint16(28246), + 48: uint16(29392), + 49: uint16(31946), + 50: uint16(34996), + 51: uint16(32929), + 52: uint16(32993), + 53: uint16(33776), + 54: uint16(34382), + 55: uint16(35463), + 56: uint16(36328), + 57: uint16(37431), + 58: uint16(38599), + 59: uint16(39015), + 60: uint16(40723), + 61: uint16(20116), + 62: uint16(20114), + 63: uint16(20237), + 64: uint16(21320), + 65: uint16(21577), + 66: uint16(21566), + 67: uint16(23087), + 68: uint16(24460), + 69: uint16(24481), + 70: uint16(24735), + 71: uint16(26791), + 72: uint16(27278), + 73: uint16(29786), + 74: uint16(30849), + 75: uint16(35486), + 76: uint16(35492), + 77: uint16(35703), + 78: uint16(37264), + 79: uint16(20062), + 80: uint16(39881), + 81: uint16(20132), + 82: uint16(20348), + 83: uint16(20399), + 84: uint16(20505), + 85: uint16(20502), + 86: uint16(20809), + 87: uint16(20844), + 88: uint16(21151), + 89: uint16(21177), + 90: uint16(21246), + 91: uint16(21402), + 92: uint16(21475), + 93: uint16(21521), + }, + 24: { + 0: uint16(21518), + 1: uint16(21897), + 2: uint16(22353), + 3: uint16(22434), + 4: uint16(22909), + 5: uint16(23380), + 6: uint16(23389), + 7: uint16(23439), + 8: uint16(24037), + 9: uint16(24039), + 10: uint16(24055), + 11: uint16(24184), + 12: uint16(24195), + 13: uint16(24218), + 14: uint16(24247), + 15: uint16(24344), + 16: uint16(24658), + 17: uint16(24908), + 18: uint16(25239), + 19: uint16(25304), + 20: uint16(25511), + 21: uint16(25915), + 22: uint16(26114), + 23: uint16(26179), + 24: uint16(26356), + 25: uint16(26477), + 26: uint16(26657), + 27: uint16(26775), + 28: uint16(27083), + 29: uint16(27743), + 30: uint16(27946), + 31: uint16(28009), + 32: uint16(28207), + 33: uint16(28317), + 34: uint16(30002), + 35: uint16(30343), + 36: uint16(30828), + 37: uint16(31295), + 38: uint16(31968), + 39: uint16(32005), + 40: uint16(32024), + 41: uint16(32094), + 42: uint16(32177), + 43: uint16(32789), + 44: uint16(32771), + 45: uint16(32943), + 46: uint16(32945), + 47: uint16(33108), + 48: uint16(33167), + 49: uint16(33322), + 50: uint16(33618), + 51: uint16(34892), + 52: uint16(34913), + 53: uint16(35611), + 54: uint16(36002), + 55: uint16(36092), + 56: uint16(37066), + 57: uint16(37237), + 58: uint16(37489), + 59: uint16(30783), + 60: uint16(37628), + 61: uint16(38308), + 62: uint16(38477), + 63: uint16(38917), + 64: uint16(39321), + 65: uint16(39640), + 66: uint16(40251), + 67: uint16(21083), + 68: uint16(21163), + 69: uint16(21495), + 70: uint16(21512), + 71: uint16(22741), + 72: uint16(25335), + 73: uint16(28640), + 74: uint16(35946), + 75: uint16(36703), + 76: uint16(40633), + 77: uint16(20811), + 78: uint16(21051), + 79: uint16(21578), + 80: uint16(22269), + 81: uint16(31296), + 82: uint16(37239), + 83: uint16(40288), + 84: uint16(40658), + 85: uint16(29508), + 86: uint16(28425), + 87: uint16(33136), + 88: uint16(29969), + 89: uint16(24573), + 90: uint16(24794), + 91: uint16(39592), + 92: uint16(29403), + 93: uint16(36796), + }, + 25: { + 0: uint16(27492), + 1: uint16(38915), + 2: uint16(20170), + 3: uint16(22256), + 4: uint16(22372), + 5: uint16(22718), + 6: uint16(23130), + 7: uint16(24680), + 8: uint16(25031), + 9: uint16(26127), + 10: uint16(26118), + 11: uint16(26681), + 12: uint16(26801), + 13: uint16(28151), + 14: uint16(30165), + 15: uint16(32058), + 16: uint16(33390), + 17: uint16(39746), + 18: uint16(20123), + 19: uint16(20304), + 20: uint16(21449), + 21: uint16(21766), + 22: uint16(23919), + 23: uint16(24038), + 24: uint16(24046), + 25: uint16(26619), + 26: uint16(27801), + 27: uint16(29811), + 28: uint16(30722), + 29: uint16(35408), + 30: uint16(37782), + 31: uint16(35039), + 32: uint16(22352), + 33: uint16(24231), + 34: uint16(25387), + 35: uint16(20661), + 36: uint16(20652), + 37: uint16(20877), + 38: uint16(26368), + 39: uint16(21705), + 40: uint16(22622), + 41: uint16(22971), + 42: uint16(23472), + 43: uint16(24425), + 44: uint16(25165), + 45: uint16(25505), + 46: uint16(26685), + 47: uint16(27507), + 48: uint16(28168), + 49: uint16(28797), + 50: uint16(37319), + 51: uint16(29312), + 52: uint16(30741), + 53: uint16(30758), + 54: uint16(31085), + 55: uint16(25998), + 56: uint16(32048), + 57: uint16(33756), + 58: uint16(35009), + 59: uint16(36617), + 60: uint16(38555), + 61: uint16(21092), + 62: uint16(22312), + 63: uint16(26448), + 64: uint16(32618), + 65: uint16(36001), + 66: uint16(20916), + 67: uint16(22338), + 68: uint16(38442), + 69: uint16(22586), + 70: uint16(27018), + 71: uint16(32948), + 72: uint16(21682), + 73: uint16(23822), + 74: uint16(22524), + 75: uint16(30869), + 76: uint16(40442), + 77: uint16(20316), + 78: uint16(21066), + 79: uint16(21643), + 80: uint16(25662), + 81: uint16(26152), + 82: uint16(26388), + 83: uint16(26613), + 84: uint16(31364), + 85: uint16(31574), + 86: uint16(32034), + 87: uint16(37679), + 88: uint16(26716), + 89: uint16(39853), + 90: uint16(31545), + 91: uint16(21273), + 92: uint16(20874), + 93: uint16(21047), + }, + 26: { + 0: uint16(23519), + 1: uint16(25334), + 2: uint16(25774), + 3: uint16(25830), + 4: uint16(26413), + 5: uint16(27578), + 6: uint16(34217), + 7: uint16(38609), + 8: uint16(30352), + 9: uint16(39894), + 10: uint16(25420), + 11: uint16(37638), + 12: uint16(39851), + 13: uint16(30399), + 14: uint16(26194), + 15: uint16(19977), + 16: uint16(20632), + 17: uint16(21442), + 18: uint16(23665), + 19: uint16(24808), + 20: uint16(25746), + 21: uint16(25955), + 22: uint16(26719), + 23: uint16(29158), + 24: uint16(29642), + 25: uint16(29987), + 26: uint16(31639), + 27: uint16(32386), + 28: uint16(34453), + 29: uint16(35715), + 30: uint16(36059), + 31: uint16(37240), + 32: uint16(39184), + 33: uint16(26028), + 34: uint16(26283), + 35: uint16(27531), + 36: uint16(20181), + 37: uint16(20180), + 38: uint16(20282), + 39: uint16(20351), + 40: uint16(21050), + 41: uint16(21496), + 42: uint16(21490), + 43: uint16(21987), + 44: uint16(22235), + 45: uint16(22763), + 46: uint16(22987), + 47: uint16(22985), + 48: uint16(23039), + 49: uint16(23376), + 50: uint16(23629), + 51: uint16(24066), + 52: uint16(24107), + 53: uint16(24535), + 54: uint16(24605), + 55: uint16(25351), + 56: uint16(25903), + 57: uint16(23388), + 58: uint16(26031), + 59: uint16(26045), + 60: uint16(26088), + 61: uint16(26525), + 62: uint16(27490), + 63: uint16(27515), + 64: uint16(27663), + 65: uint16(29509), + 66: uint16(31049), + 67: uint16(31169), + 68: uint16(31992), + 69: uint16(32025), + 70: uint16(32043), + 71: uint16(32930), + 72: uint16(33026), + 73: uint16(33267), + 74: uint16(35222), + 75: uint16(35422), + 76: uint16(35433), + 77: uint16(35430), + 78: uint16(35468), + 79: uint16(35566), + 80: uint16(36039), + 81: uint16(36060), + 82: uint16(38604), + 83: uint16(39164), + 84: uint16(27503), + 85: uint16(20107), + 86: uint16(20284), + 87: uint16(20365), + 88: uint16(20816), + 89: uint16(23383), + 90: uint16(23546), + 91: uint16(24904), + 92: uint16(25345), + 93: uint16(26178), + }, + 27: { + 0: uint16(27425), + 1: uint16(28363), + 2: uint16(27835), + 3: uint16(29246), + 4: uint16(29885), + 5: uint16(30164), + 6: uint16(30913), + 7: uint16(31034), + 8: uint16(32780), + 9: uint16(32819), + 10: uint16(33258), + 11: uint16(33940), + 12: uint16(36766), + 13: uint16(27728), + 14: uint16(40575), + 15: uint16(24335), + 16: uint16(35672), + 17: uint16(40235), + 18: uint16(31482), + 19: uint16(36600), + 20: uint16(23437), + 21: uint16(38635), + 22: uint16(19971), + 23: uint16(21489), + 24: uint16(22519), + 25: uint16(22833), + 26: uint16(23241), + 27: uint16(23460), + 28: uint16(24713), + 29: uint16(28287), + 30: uint16(28422), + 31: uint16(30142), + 32: uint16(36074), + 33: uint16(23455), + 34: uint16(34048), + 35: uint16(31712), + 36: uint16(20594), + 37: uint16(26612), + 38: uint16(33437), + 39: uint16(23649), + 40: uint16(34122), + 41: uint16(32286), + 42: uint16(33294), + 43: uint16(20889), + 44: uint16(23556), + 45: uint16(25448), + 46: uint16(36198), + 47: uint16(26012), + 48: uint16(29038), + 49: uint16(31038), + 50: uint16(32023), + 51: uint16(32773), + 52: uint16(35613), + 53: uint16(36554), + 54: uint16(36974), + 55: uint16(34503), + 56: uint16(37034), + 57: uint16(20511), + 58: uint16(21242), + 59: uint16(23610), + 60: uint16(26451), + 61: uint16(28796), + 62: uint16(29237), + 63: uint16(37196), + 64: uint16(37320), + 65: uint16(37675), + 66: uint16(33509), + 67: uint16(23490), + 68: uint16(24369), + 69: uint16(24825), + 70: uint16(20027), + 71: uint16(21462), + 72: uint16(23432), + 73: uint16(25163), + 74: uint16(26417), + 75: uint16(27530), + 76: uint16(29417), + 77: uint16(29664), + 78: uint16(31278), + 79: uint16(33131), + 80: uint16(36259), + 81: uint16(37202), + 82: uint16(39318), + 83: uint16(20754), + 84: uint16(21463), + 85: uint16(21610), + 86: uint16(23551), + 87: uint16(25480), + 88: uint16(27193), + 89: uint16(32172), + 90: uint16(38656), + 91: uint16(22234), + 92: uint16(21454), + 93: uint16(21608), + }, + 28: { + 0: uint16(23447), + 1: uint16(23601), + 2: uint16(24030), + 3: uint16(20462), + 4: uint16(24833), + 5: uint16(25342), + 6: uint16(27954), + 7: uint16(31168), + 8: uint16(31179), + 9: uint16(32066), + 10: uint16(32333), + 11: uint16(32722), + 12: uint16(33261), + 13: uint16(33311), + 14: uint16(33936), + 15: uint16(34886), + 16: uint16(35186), + 17: uint16(35728), + 18: uint16(36468), + 19: uint16(36655), + 20: uint16(36913), + 21: uint16(37195), + 22: uint16(37228), + 23: uint16(38598), + 24: uint16(37276), + 25: uint16(20160), + 26: uint16(20303), + 27: uint16(20805), + 28: uint16(21313), + 29: uint16(24467), + 30: uint16(25102), + 31: uint16(26580), + 32: uint16(27713), + 33: uint16(28171), + 34: uint16(29539), + 35: uint16(32294), + 36: uint16(37325), + 37: uint16(37507), + 38: uint16(21460), + 39: uint16(22809), + 40: uint16(23487), + 41: uint16(28113), + 42: uint16(31069), + 43: uint16(32302), + 44: uint16(31899), + 45: uint16(22654), + 46: uint16(29087), + 47: uint16(20986), + 48: uint16(34899), + 49: uint16(36848), + 50: uint16(20426), + 51: uint16(23803), + 52: uint16(26149), + 53: uint16(30636), + 54: uint16(31459), + 55: uint16(33308), + 56: uint16(39423), + 57: uint16(20934), + 58: uint16(24490), + 59: uint16(26092), + 60: uint16(26991), + 61: uint16(27529), + 62: uint16(28147), + 63: uint16(28310), + 64: uint16(28516), + 65: uint16(30462), + 66: uint16(32020), + 67: uint16(24033), + 68: uint16(36981), + 69: uint16(37255), + 70: uint16(38918), + 71: uint16(20966), + 72: uint16(21021), + 73: uint16(25152), + 74: uint16(26257), + 75: uint16(26329), + 76: uint16(28186), + 77: uint16(24246), + 78: uint16(32210), + 79: uint16(32626), + 80: uint16(26360), + 81: uint16(34223), + 82: uint16(34295), + 83: uint16(35576), + 84: uint16(21161), + 85: uint16(21465), + 86: uint16(22899), + 87: uint16(24207), + 88: uint16(24464), + 89: uint16(24661), + 90: uint16(37604), + 91: uint16(38500), + 92: uint16(20663), + 93: uint16(20767), + }, + 29: { + 0: uint16(21213), + 1: uint16(21280), + 2: uint16(21319), + 3: uint16(21484), + 4: uint16(21736), + 5: uint16(21830), + 6: uint16(21809), + 7: uint16(22039), + 8: uint16(22888), + 9: uint16(22974), + 10: uint16(23100), + 11: uint16(23477), + 12: uint16(23558), + 13: uint16(23567), + 14: uint16(23569), + 15: uint16(23578), + 16: uint16(24196), + 17: uint16(24202), + 18: uint16(24288), + 19: uint16(24432), + 20: uint16(25215), + 21: uint16(25220), + 22: uint16(25307), + 23: uint16(25484), + 24: uint16(25463), + 25: uint16(26119), + 26: uint16(26124), + 27: uint16(26157), + 28: uint16(26230), + 29: uint16(26494), + 30: uint16(26786), + 31: uint16(27167), + 32: uint16(27189), + 33: uint16(27836), + 34: uint16(28040), + 35: uint16(28169), + 36: uint16(28248), + 37: uint16(28988), + 38: uint16(28966), + 39: uint16(29031), + 40: uint16(30151), + 41: uint16(30465), + 42: uint16(30813), + 43: uint16(30977), + 44: uint16(31077), + 45: uint16(31216), + 46: uint16(31456), + 47: uint16(31505), + 48: uint16(31911), + 49: uint16(32057), + 50: uint16(32918), + 51: uint16(33750), + 52: uint16(33931), + 53: uint16(34121), + 54: uint16(34909), + 55: uint16(35059), + 56: uint16(35359), + 57: uint16(35388), + 58: uint16(35412), + 59: uint16(35443), + 60: uint16(35937), + 61: uint16(36062), + 62: uint16(37284), + 63: uint16(37478), + 64: uint16(37758), + 65: uint16(37912), + 66: uint16(38556), + 67: uint16(38808), + 68: uint16(19978), + 69: uint16(19976), + 70: uint16(19998), + 71: uint16(20055), + 72: uint16(20887), + 73: uint16(21104), + 74: uint16(22478), + 75: uint16(22580), + 76: uint16(22732), + 77: uint16(23330), + 78: uint16(24120), + 79: uint16(24773), + 80: uint16(25854), + 81: uint16(26465), + 82: uint16(26454), + 83: uint16(27972), + 84: uint16(29366), + 85: uint16(30067), + 86: uint16(31331), + 87: uint16(33976), + 88: uint16(35698), + 89: uint16(37304), + 90: uint16(37664), + 91: uint16(22065), + 92: uint16(22516), + 93: uint16(39166), + }, + 30: { + 0: uint16(25325), + 1: uint16(26893), + 2: uint16(27542), + 3: uint16(29165), + 4: uint16(32340), + 5: uint16(32887), + 6: uint16(33394), + 7: uint16(35302), + 8: uint16(39135), + 9: uint16(34645), + 10: uint16(36785), + 11: uint16(23611), + 12: uint16(20280), + 13: uint16(20449), + 14: uint16(20405), + 15: uint16(21767), + 16: uint16(23072), + 17: uint16(23517), + 18: uint16(23529), + 19: uint16(24515), + 20: uint16(24910), + 21: uint16(25391), + 22: uint16(26032), + 23: uint16(26187), + 24: uint16(26862), + 25: uint16(27035), + 26: uint16(28024), + 27: uint16(28145), + 28: uint16(30003), + 29: uint16(30137), + 30: uint16(30495), + 31: uint16(31070), + 32: uint16(31206), + 33: uint16(32051), + 34: uint16(33251), + 35: uint16(33455), + 36: uint16(34218), + 37: uint16(35242), + 38: uint16(35386), + 39: uint16(36523), + 40: uint16(36763), + 41: uint16(36914), + 42: uint16(37341), + 43: uint16(38663), + 44: uint16(20154), + 45: uint16(20161), + 46: uint16(20995), + 47: uint16(22645), + 48: uint16(22764), + 49: uint16(23563), + 50: uint16(29978), + 51: uint16(23613), + 52: uint16(33102), + 53: uint16(35338), + 54: uint16(36805), + 55: uint16(38499), + 56: uint16(38765), + 57: uint16(31525), + 58: uint16(35535), + 59: uint16(38920), + 60: uint16(37218), + 61: uint16(22259), + 62: uint16(21416), + 63: uint16(36887), + 64: uint16(21561), + 65: uint16(22402), + 66: uint16(24101), + 67: uint16(25512), + 68: uint16(27700), + 69: uint16(28810), + 70: uint16(30561), + 71: uint16(31883), + 72: uint16(32736), + 73: uint16(34928), + 74: uint16(36930), + 75: uint16(37204), + 76: uint16(37648), + 77: uint16(37656), + 78: uint16(38543), + 79: uint16(29790), + 80: uint16(39620), + 81: uint16(23815), + 82: uint16(23913), + 83: uint16(25968), + 84: uint16(26530), + 85: uint16(36264), + 86: uint16(38619), + 87: uint16(25454), + 88: uint16(26441), + 89: uint16(26905), + 90: uint16(33733), + 91: uint16(38935), + 92: uint16(38592), + 93: uint16(35070), + }, + 31: { + 0: uint16(28548), + 1: uint16(25722), + 2: uint16(23544), + 3: uint16(19990), + 4: uint16(28716), + 5: uint16(30045), + 6: uint16(26159), + 7: uint16(20932), + 8: uint16(21046), + 9: uint16(21218), + 10: uint16(22995), + 11: uint16(24449), + 12: uint16(24615), + 13: uint16(25104), + 14: uint16(25919), + 15: uint16(25972), + 16: uint16(26143), + 17: uint16(26228), + 18: uint16(26866), + 19: uint16(26646), + 20: uint16(27491), + 21: uint16(28165), + 22: uint16(29298), + 23: uint16(29983), + 24: uint16(30427), + 25: uint16(31934), + 26: uint16(32854), + 27: uint16(22768), + 28: uint16(35069), + 29: uint16(35199), + 30: uint16(35488), + 31: uint16(35475), + 32: uint16(35531), + 33: uint16(36893), + 34: uint16(37266), + 35: uint16(38738), + 36: uint16(38745), + 37: uint16(25993), + 38: uint16(31246), + 39: uint16(33030), + 40: uint16(38587), + 41: uint16(24109), + 42: uint16(24796), + 43: uint16(25114), + 44: uint16(26021), + 45: uint16(26132), + 46: uint16(26512), + 47: uint16(30707), + 48: uint16(31309), + 49: uint16(31821), + 50: uint16(32318), + 51: uint16(33034), + 52: uint16(36012), + 53: uint16(36196), + 54: uint16(36321), + 55: uint16(36447), + 56: uint16(30889), + 57: uint16(20999), + 58: uint16(25305), + 59: uint16(25509), + 60: uint16(25666), + 61: uint16(25240), + 62: uint16(35373), + 63: uint16(31363), + 64: uint16(31680), + 65: uint16(35500), + 66: uint16(38634), + 67: uint16(32118), + 68: uint16(33292), + 69: uint16(34633), + 70: uint16(20185), + 71: uint16(20808), + 72: uint16(21315), + 73: uint16(21344), + 74: uint16(23459), + 75: uint16(23554), + 76: uint16(23574), + 77: uint16(24029), + 78: uint16(25126), + 79: uint16(25159), + 80: uint16(25776), + 81: uint16(26643), + 82: uint16(26676), + 83: uint16(27849), + 84: uint16(27973), + 85: uint16(27927), + 86: uint16(26579), + 87: uint16(28508), + 88: uint16(29006), + 89: uint16(29053), + 90: uint16(26059), + 91: uint16(31359), + 92: uint16(31661), + 93: uint16(32218), + }, + 32: { + 0: uint16(32330), + 1: uint16(32680), + 2: uint16(33146), + 3: uint16(33307), + 4: uint16(33337), + 5: uint16(34214), + 6: uint16(35438), + 7: uint16(36046), + 8: uint16(36341), + 9: uint16(36984), + 10: uint16(36983), + 11: uint16(37549), + 12: uint16(37521), + 13: uint16(38275), + 14: uint16(39854), + 15: uint16(21069), + 16: uint16(21892), + 17: uint16(28472), + 18: uint16(28982), + 19: uint16(20840), + 20: uint16(31109), + 21: uint16(32341), + 22: uint16(33203), + 23: uint16(31950), + 24: uint16(22092), + 25: uint16(22609), + 26: uint16(23720), + 27: uint16(25514), + 28: uint16(26366), + 29: uint16(26365), + 30: uint16(26970), + 31: uint16(29401), + 32: uint16(30095), + 33: uint16(30094), + 34: uint16(30990), + 35: uint16(31062), + 36: uint16(31199), + 37: uint16(31895), + 38: uint16(32032), + 39: uint16(32068), + 40: uint16(34311), + 41: uint16(35380), + 42: uint16(38459), + 43: uint16(36961), + 44: uint16(40736), + 45: uint16(20711), + 46: uint16(21109), + 47: uint16(21452), + 48: uint16(21474), + 49: uint16(20489), + 50: uint16(21930), + 51: uint16(22766), + 52: uint16(22863), + 53: uint16(29245), + 54: uint16(23435), + 55: uint16(23652), + 56: uint16(21277), + 57: uint16(24803), + 58: uint16(24819), + 59: uint16(25436), + 60: uint16(25475), + 61: uint16(25407), + 62: uint16(25531), + 63: uint16(25805), + 64: uint16(26089), + 65: uint16(26361), + 66: uint16(24035), + 67: uint16(27085), + 68: uint16(27133), + 69: uint16(28437), + 70: uint16(29157), + 71: uint16(20105), + 72: uint16(30185), + 73: uint16(30456), + 74: uint16(31379), + 75: uint16(31967), + 76: uint16(32207), + 77: uint16(32156), + 78: uint16(32865), + 79: uint16(33609), + 80: uint16(33624), + 81: uint16(33900), + 82: uint16(33980), + 83: uint16(34299), + 84: uint16(35013), + 85: uint16(36208), + 86: uint16(36865), + 87: uint16(36973), + 88: uint16(37783), + 89: uint16(38684), + 90: uint16(39442), + 91: uint16(20687), + 92: uint16(22679), + 93: uint16(24974), + }, + 33: { + 0: uint16(33235), + 1: uint16(34101), + 2: uint16(36104), + 3: uint16(36896), + 4: uint16(20419), + 5: uint16(20596), + 6: uint16(21063), + 7: uint16(21363), + 8: uint16(24687), + 9: uint16(25417), + 10: uint16(26463), + 11: uint16(28204), + 12: uint16(36275), + 13: uint16(36895), + 14: uint16(20439), + 15: uint16(23646), + 16: uint16(36042), + 17: uint16(26063), + 18: uint16(32154), + 19: uint16(21330), + 20: uint16(34966), + 21: uint16(20854), + 22: uint16(25539), + 23: uint16(23384), + 24: uint16(23403), + 25: uint16(23562), + 26: uint16(25613), + 27: uint16(26449), + 28: uint16(36956), + 29: uint16(20182), + 30: uint16(22810), + 31: uint16(22826), + 32: uint16(27760), + 33: uint16(35409), + 34: uint16(21822), + 35: uint16(22549), + 36: uint16(22949), + 37: uint16(24816), + 38: uint16(25171), + 39: uint16(26561), + 40: uint16(33333), + 41: uint16(26965), + 42: uint16(38464), + 43: uint16(39364), + 44: uint16(39464), + 45: uint16(20307), + 46: uint16(22534), + 47: uint16(23550), + 48: uint16(32784), + 49: uint16(23729), + 50: uint16(24111), + 51: uint16(24453), + 52: uint16(24608), + 53: uint16(24907), + 54: uint16(25140), + 55: uint16(26367), + 56: uint16(27888), + 57: uint16(28382), + 58: uint16(32974), + 59: uint16(33151), + 60: uint16(33492), + 61: uint16(34955), + 62: uint16(36024), + 63: uint16(36864), + 64: uint16(36910), + 65: uint16(38538), + 66: uint16(40667), + 67: uint16(39899), + 68: uint16(20195), + 69: uint16(21488), + 70: uint16(22823), + 71: uint16(31532), + 72: uint16(37261), + 73: uint16(38988), + 74: uint16(40441), + 75: uint16(28381), + 76: uint16(28711), + 77: uint16(21331), + 78: uint16(21828), + 79: uint16(23429), + 80: uint16(25176), + 81: uint16(25246), + 82: uint16(25299), + 83: uint16(27810), + 84: uint16(28655), + 85: uint16(29730), + 86: uint16(35351), + 87: uint16(37944), + 88: uint16(28609), + 89: uint16(35582), + 90: uint16(33592), + 91: uint16(20967), + 92: uint16(34552), + 93: uint16(21482), + }, + 34: { + 0: uint16(21481), + 1: uint16(20294), + 2: uint16(36948), + 3: uint16(36784), + 4: uint16(22890), + 5: uint16(33073), + 6: uint16(24061), + 7: uint16(31466), + 8: uint16(36799), + 9: uint16(26842), + 10: uint16(35895), + 11: uint16(29432), + 12: uint16(40008), + 13: uint16(27197), + 14: uint16(35504), + 15: uint16(20025), + 16: uint16(21336), + 17: uint16(22022), + 18: uint16(22374), + 19: uint16(25285), + 20: uint16(25506), + 21: uint16(26086), + 22: uint16(27470), + 23: uint16(28129), + 24: uint16(28251), + 25: uint16(28845), + 26: uint16(30701), + 27: uint16(31471), + 28: uint16(31658), + 29: uint16(32187), + 30: uint16(32829), + 31: uint16(32966), + 32: uint16(34507), + 33: uint16(35477), + 34: uint16(37723), + 35: uint16(22243), + 36: uint16(22727), + 37: uint16(24382), + 38: uint16(26029), + 39: uint16(26262), + 40: uint16(27264), + 41: uint16(27573), + 42: uint16(30007), + 43: uint16(35527), + 44: uint16(20516), + 45: uint16(30693), + 46: uint16(22320), + 47: uint16(24347), + 48: uint16(24677), + 49: uint16(26234), + 50: uint16(27744), + 51: uint16(30196), + 52: uint16(31258), + 53: uint16(32622), + 54: uint16(33268), + 55: uint16(34584), + 56: uint16(36933), + 57: uint16(39347), + 58: uint16(31689), + 59: uint16(30044), + 60: uint16(31481), + 61: uint16(31569), + 62: uint16(33988), + 63: uint16(36880), + 64: uint16(31209), + 65: uint16(31378), + 66: uint16(33590), + 67: uint16(23265), + 68: uint16(30528), + 69: uint16(20013), + 70: uint16(20210), + 71: uint16(23449), + 72: uint16(24544), + 73: uint16(25277), + 74: uint16(26172), + 75: uint16(26609), + 76: uint16(27880), + 77: uint16(34411), + 78: uint16(34935), + 79: uint16(35387), + 80: uint16(37198), + 81: uint16(37619), + 82: uint16(39376), + 83: uint16(27159), + 84: uint16(28710), + 85: uint16(29482), + 86: uint16(33511), + 87: uint16(33879), + 88: uint16(36015), + 89: uint16(19969), + 90: uint16(20806), + 91: uint16(20939), + 92: uint16(21899), + 93: uint16(23541), + }, + 35: { + 0: uint16(24086), + 1: uint16(24115), + 2: uint16(24193), + 3: uint16(24340), + 4: uint16(24373), + 5: uint16(24427), + 6: uint16(24500), + 7: uint16(25074), + 8: uint16(25361), + 9: uint16(26274), + 10: uint16(26397), + 11: uint16(28526), + 12: uint16(29266), + 13: uint16(30010), + 14: uint16(30522), + 15: uint16(32884), + 16: uint16(33081), + 17: uint16(33144), + 18: uint16(34678), + 19: uint16(35519), + 20: uint16(35548), + 21: uint16(36229), + 22: uint16(36339), + 23: uint16(37530), + 24: uint16(38263), + 25: uint16(38914), + 26: uint16(40165), + 27: uint16(21189), + 28: uint16(25431), + 29: uint16(30452), + 30: uint16(26389), + 31: uint16(27784), + 32: uint16(29645), + 33: uint16(36035), + 34: uint16(37806), + 35: uint16(38515), + 36: uint16(27941), + 37: uint16(22684), + 38: uint16(26894), + 39: uint16(27084), + 40: uint16(36861), + 41: uint16(37786), + 42: uint16(30171), + 43: uint16(36890), + 44: uint16(22618), + 45: uint16(26626), + 46: uint16(25524), + 47: uint16(27131), + 48: uint16(20291), + 49: uint16(28460), + 50: uint16(26584), + 51: uint16(36795), + 52: uint16(34086), + 53: uint16(32180), + 54: uint16(37716), + 55: uint16(26943), + 56: uint16(28528), + 57: uint16(22378), + 58: uint16(22775), + 59: uint16(23340), + 60: uint16(32044), + 61: uint16(29226), + 62: uint16(21514), + 63: uint16(37347), + 64: uint16(40372), + 65: uint16(20141), + 66: uint16(20302), + 67: uint16(20572), + 68: uint16(20597), + 69: uint16(21059), + 70: uint16(35998), + 71: uint16(21576), + 72: uint16(22564), + 73: uint16(23450), + 74: uint16(24093), + 75: uint16(24213), + 76: uint16(24237), + 77: uint16(24311), + 78: uint16(24351), + 79: uint16(24716), + 80: uint16(25269), + 81: uint16(25402), + 82: uint16(25552), + 83: uint16(26799), + 84: uint16(27712), + 85: uint16(30855), + 86: uint16(31118), + 87: uint16(31243), + 88: uint16(32224), + 89: uint16(33351), + 90: uint16(35330), + 91: uint16(35558), + 92: uint16(36420), + 93: uint16(36883), + }, + 36: { + 0: uint16(37048), + 1: uint16(37165), + 2: uint16(37336), + 3: uint16(40718), + 4: uint16(27877), + 5: uint16(25688), + 6: uint16(25826), + 7: uint16(25973), + 8: uint16(28404), + 9: uint16(30340), + 10: uint16(31515), + 11: uint16(36969), + 12: uint16(37841), + 13: uint16(28346), + 14: uint16(21746), + 15: uint16(24505), + 16: uint16(25764), + 17: uint16(36685), + 18: uint16(36845), + 19: uint16(37444), + 20: uint16(20856), + 21: uint16(22635), + 22: uint16(22825), + 23: uint16(23637), + 24: uint16(24215), + 25: uint16(28155), + 26: uint16(32399), + 27: uint16(29980), + 28: uint16(36028), + 29: uint16(36578), + 30: uint16(39003), + 31: uint16(28857), + 32: uint16(20253), + 33: uint16(27583), + 34: uint16(28593), + 35: uint16(30000), + 36: uint16(38651), + 37: uint16(20814), + 38: uint16(21520), + 39: uint16(22581), + 40: uint16(22615), + 41: uint16(22956), + 42: uint16(23648), + 43: uint16(24466), + 44: uint16(26007), + 45: uint16(26460), + 46: uint16(28193), + 47: uint16(30331), + 48: uint16(33759), + 49: uint16(36077), + 50: uint16(36884), + 51: uint16(37117), + 52: uint16(37709), + 53: uint16(30757), + 54: uint16(30778), + 55: uint16(21162), + 56: uint16(24230), + 57: uint16(22303), + 58: uint16(22900), + 59: uint16(24594), + 60: uint16(20498), + 61: uint16(20826), + 62: uint16(20908), + 63: uint16(20941), + 64: uint16(20992), + 65: uint16(21776), + 66: uint16(22612), + 67: uint16(22616), + 68: uint16(22871), + 69: uint16(23445), + 70: uint16(23798), + 71: uint16(23947), + 72: uint16(24764), + 73: uint16(25237), + 74: uint16(25645), + 75: uint16(26481), + 76: uint16(26691), + 77: uint16(26812), + 78: uint16(26847), + 79: uint16(30423), + 80: uint16(28120), + 81: uint16(28271), + 82: uint16(28059), + 83: uint16(28783), + 84: uint16(29128), + 85: uint16(24403), + 86: uint16(30168), + 87: uint16(31095), + 88: uint16(31561), + 89: uint16(31572), + 90: uint16(31570), + 91: uint16(31958), + 92: uint16(32113), + 93: uint16(21040), + }, + 37: { + 0: uint16(33891), + 1: uint16(34153), + 2: uint16(34276), + 3: uint16(35342), + 4: uint16(35588), + 5: uint16(35910), + 6: uint16(36367), + 7: uint16(36867), + 8: uint16(36879), + 9: uint16(37913), + 10: uint16(38518), + 11: uint16(38957), + 12: uint16(39472), + 13: uint16(38360), + 14: uint16(20685), + 15: uint16(21205), + 16: uint16(21516), + 17: uint16(22530), + 18: uint16(23566), + 19: uint16(24999), + 20: uint16(25758), + 21: uint16(27934), + 22: uint16(30643), + 23: uint16(31461), + 24: uint16(33012), + 25: uint16(33796), + 26: uint16(36947), + 27: uint16(37509), + 28: uint16(23776), + 29: uint16(40199), + 30: uint16(21311), + 31: uint16(24471), + 32: uint16(24499), + 33: uint16(28060), + 34: uint16(29305), + 35: uint16(30563), + 36: uint16(31167), + 37: uint16(31716), + 38: uint16(27602), + 39: uint16(29420), + 40: uint16(35501), + 41: uint16(26627), + 42: uint16(27233), + 43: uint16(20984), + 44: uint16(31361), + 45: uint16(26932), + 46: uint16(23626), + 47: uint16(40182), + 48: uint16(33515), + 49: uint16(23493), + 50: uint16(37193), + 51: uint16(28702), + 52: uint16(22136), + 53: uint16(23663), + 54: uint16(24775), + 55: uint16(25958), + 56: uint16(27788), + 57: uint16(35930), + 58: uint16(36929), + 59: uint16(38931), + 60: uint16(21585), + 61: uint16(26311), + 62: uint16(37389), + 63: uint16(22856), + 64: uint16(37027), + 65: uint16(20869), + 66: uint16(20045), + 67: uint16(20970), + 68: uint16(34201), + 69: uint16(35598), + 70: uint16(28760), + 71: uint16(25466), + 72: uint16(37707), + 73: uint16(26978), + 74: uint16(39348), + 75: uint16(32260), + 76: uint16(30071), + 77: uint16(21335), + 78: uint16(26976), + 79: uint16(36575), + 80: uint16(38627), + 81: uint16(27741), + 82: uint16(20108), + 83: uint16(23612), + 84: uint16(24336), + 85: uint16(36841), + 86: uint16(21250), + 87: uint16(36049), + 88: uint16(32905), + 89: uint16(34425), + 90: uint16(24319), + 91: uint16(26085), + 92: uint16(20083), + 93: uint16(20837), + }, + 38: { + 0: uint16(22914), + 1: uint16(23615), + 2: uint16(38894), + 3: uint16(20219), + 4: uint16(22922), + 5: uint16(24525), + 6: uint16(35469), + 7: uint16(28641), + 8: uint16(31152), + 9: uint16(31074), + 10: uint16(23527), + 11: uint16(33905), + 12: uint16(29483), + 13: uint16(29105), + 14: uint16(24180), + 15: uint16(24565), + 16: uint16(25467), + 17: uint16(25754), + 18: uint16(29123), + 19: uint16(31896), + 20: uint16(20035), + 21: uint16(24316), + 22: uint16(20043), + 23: uint16(22492), + 24: uint16(22178), + 25: uint16(24745), + 26: uint16(28611), + 27: uint16(32013), + 28: uint16(33021), + 29: uint16(33075), + 30: uint16(33215), + 31: uint16(36786), + 32: uint16(35223), + 33: uint16(34468), + 34: uint16(24052), + 35: uint16(25226), + 36: uint16(25773), + 37: uint16(35207), + 38: uint16(26487), + 39: uint16(27874), + 40: uint16(27966), + 41: uint16(29750), + 42: uint16(30772), + 43: uint16(23110), + 44: uint16(32629), + 45: uint16(33453), + 46: uint16(39340), + 47: uint16(20467), + 48: uint16(24259), + 49: uint16(25309), + 50: uint16(25490), + 51: uint16(25943), + 52: uint16(26479), + 53: uint16(30403), + 54: uint16(29260), + 55: uint16(32972), + 56: uint16(32954), + 57: uint16(36649), + 58: uint16(37197), + 59: uint16(20493), + 60: uint16(22521), + 61: uint16(23186), + 62: uint16(26757), + 63: uint16(26995), + 64: uint16(29028), + 65: uint16(29437), + 66: uint16(36023), + 67: uint16(22770), + 68: uint16(36064), + 69: uint16(38506), + 70: uint16(36889), + 71: uint16(34687), + 72: uint16(31204), + 73: uint16(30695), + 74: uint16(33833), + 75: uint16(20271), + 76: uint16(21093), + 77: uint16(21338), + 78: uint16(25293), + 79: uint16(26575), + 80: uint16(27850), + 81: uint16(30333), + 82: uint16(31636), + 83: uint16(31893), + 84: uint16(33334), + 85: uint16(34180), + 86: uint16(36843), + 87: uint16(26333), + 88: uint16(28448), + 89: uint16(29190), + 90: uint16(32283), + 91: uint16(33707), + 92: uint16(39361), + 93: uint16(40614), + }, + 39: { + 0: uint16(20989), + 1: uint16(31665), + 2: uint16(30834), + 3: uint16(31672), + 4: uint16(32903), + 5: uint16(31560), + 6: uint16(27368), + 7: uint16(24161), + 8: uint16(32908), + 9: uint16(30033), + 10: uint16(30048), + 11: uint16(20843), + 12: uint16(37474), + 13: uint16(28300), + 14: uint16(30330), + 15: uint16(37271), + 16: uint16(39658), + 17: uint16(20240), + 18: uint16(32624), + 19: uint16(25244), + 20: uint16(31567), + 21: uint16(38309), + 22: uint16(40169), + 23: uint16(22138), + 24: uint16(22617), + 25: uint16(34532), + 26: uint16(38588), + 27: uint16(20276), + 28: uint16(21028), + 29: uint16(21322), + 30: uint16(21453), + 31: uint16(21467), + 32: uint16(24070), + 33: uint16(25644), + 34: uint16(26001), + 35: uint16(26495), + 36: uint16(27710), + 37: uint16(27726), + 38: uint16(29256), + 39: uint16(29359), + 40: uint16(29677), + 41: uint16(30036), + 42: uint16(32321), + 43: uint16(33324), + 44: uint16(34281), + 45: uint16(36009), + 46: uint16(31684), + 47: uint16(37318), + 48: uint16(29033), + 49: uint16(38930), + 50: uint16(39151), + 51: uint16(25405), + 52: uint16(26217), + 53: uint16(30058), + 54: uint16(30436), + 55: uint16(30928), + 56: uint16(34115), + 57: uint16(34542), + 58: uint16(21290), + 59: uint16(21329), + 60: uint16(21542), + 61: uint16(22915), + 62: uint16(24199), + 63: uint16(24444), + 64: uint16(24754), + 65: uint16(25161), + 66: uint16(25209), + 67: uint16(25259), + 68: uint16(26000), + 69: uint16(27604), + 70: uint16(27852), + 71: uint16(30130), + 72: uint16(30382), + 73: uint16(30865), + 74: uint16(31192), + 75: uint16(32203), + 76: uint16(32631), + 77: uint16(32933), + 78: uint16(34987), + 79: uint16(35513), + 80: uint16(36027), + 81: uint16(36991), + 82: uint16(38750), + 83: uint16(39131), + 84: uint16(27147), + 85: uint16(31800), + 86: uint16(20633), + 87: uint16(23614), + 88: uint16(24494), + 89: uint16(26503), + 90: uint16(27608), + 91: uint16(29749), + 92: uint16(30473), + 93: uint16(32654), + }, + 40: { + 0: uint16(40763), + 1: uint16(26570), + 2: uint16(31255), + 3: uint16(21305), + 4: uint16(30091), + 5: uint16(39661), + 6: uint16(24422), + 7: uint16(33181), + 8: uint16(33777), + 9: uint16(32920), + 10: uint16(24380), + 11: uint16(24517), + 12: uint16(30050), + 13: uint16(31558), + 14: uint16(36924), + 15: uint16(26727), + 16: uint16(23019), + 17: uint16(23195), + 18: uint16(32016), + 19: uint16(30334), + 20: uint16(35628), + 21: uint16(20469), + 22: uint16(24426), + 23: uint16(27161), + 24: uint16(27703), + 25: uint16(28418), + 26: uint16(29922), + 27: uint16(31080), + 28: uint16(34920), + 29: uint16(35413), + 30: uint16(35961), + 31: uint16(24287), + 32: uint16(25551), + 33: uint16(30149), + 34: uint16(31186), + 35: uint16(33495), + 36: uint16(37672), + 37: uint16(37618), + 38: uint16(33948), + 39: uint16(34541), + 40: uint16(39981), + 41: uint16(21697), + 42: uint16(24428), + 43: uint16(25996), + 44: uint16(27996), + 45: uint16(28693), + 46: uint16(36007), + 47: uint16(36051), + 48: uint16(38971), + 49: uint16(25935), + 50: uint16(29942), + 51: uint16(19981), + 52: uint16(20184), + 53: uint16(22496), + 54: uint16(22827), + 55: uint16(23142), + 56: uint16(23500), + 57: uint16(20904), + 58: uint16(24067), + 59: uint16(24220), + 60: uint16(24598), + 61: uint16(25206), + 62: uint16(25975), + 63: uint16(26023), + 64: uint16(26222), + 65: uint16(28014), + 66: uint16(29238), + 67: uint16(31526), + 68: uint16(33104), + 69: uint16(33178), + 70: uint16(33433), + 71: uint16(35676), + 72: uint16(36000), + 73: uint16(36070), + 74: uint16(36212), + 75: uint16(38428), + 76: uint16(38468), + 77: uint16(20398), + 78: uint16(25771), + 79: uint16(27494), + 80: uint16(33310), + 81: uint16(33889), + 82: uint16(34154), + 83: uint16(37096), + 84: uint16(23553), + 85: uint16(26963), + 86: uint16(39080), + 87: uint16(33914), + 88: uint16(34135), + 89: uint16(20239), + 90: uint16(21103), + 91: uint16(24489), + 92: uint16(24133), + 93: uint16(26381), + }, + 41: { + 0: uint16(31119), + 1: uint16(33145), + 2: uint16(35079), + 3: uint16(35206), + 4: uint16(28149), + 5: uint16(24343), + 6: uint16(25173), + 7: uint16(27832), + 8: uint16(20175), + 9: uint16(29289), + 10: uint16(39826), + 11: uint16(20998), + 12: uint16(21563), + 13: uint16(22132), + 14: uint16(22707), + 15: uint16(24996), + 16: uint16(25198), + 17: uint16(28954), + 18: uint16(22894), + 19: uint16(31881), + 20: uint16(31966), + 21: uint16(32027), + 22: uint16(38640), + 23: uint16(25991), + 24: uint16(32862), + 25: uint16(19993), + 26: uint16(20341), + 27: uint16(20853), + 28: uint16(22592), + 29: uint16(24163), + 30: uint16(24179), + 31: uint16(24330), + 32: uint16(26564), + 33: uint16(20006), + 34: uint16(34109), + 35: uint16(38281), + 36: uint16(38491), + 37: uint16(31859), + 38: uint16(38913), + 39: uint16(20731), + 40: uint16(22721), + 41: uint16(30294), + 42: uint16(30887), + 43: uint16(21029), + 44: uint16(30629), + 45: uint16(34065), + 46: uint16(31622), + 47: uint16(20559), + 48: uint16(22793), + 49: uint16(29255), + 50: uint16(31687), + 51: uint16(32232), + 52: uint16(36794), + 53: uint16(36820), + 54: uint16(36941), + 55: uint16(20415), + 56: uint16(21193), + 57: uint16(23081), + 58: uint16(24321), + 59: uint16(38829), + 60: uint16(20445), + 61: uint16(33303), + 62: uint16(37610), + 63: uint16(22275), + 64: uint16(25429), + 65: uint16(27497), + 66: uint16(29995), + 67: uint16(35036), + 68: uint16(36628), + 69: uint16(31298), + 70: uint16(21215), + 71: uint16(22675), + 72: uint16(24917), + 73: uint16(25098), + 74: uint16(26286), + 75: uint16(27597), + 76: uint16(31807), + 77: uint16(33769), + 78: uint16(20515), + 79: uint16(20472), + 80: uint16(21253), + 81: uint16(21574), + 82: uint16(22577), + 83: uint16(22857), + 84: uint16(23453), + 85: uint16(23792), + 86: uint16(23791), + 87: uint16(23849), + 88: uint16(24214), + 89: uint16(25265), + 90: uint16(25447), + 91: uint16(25918), + 92: uint16(26041), + 93: uint16(26379), + }, + 42: { + 0: uint16(27861), + 1: uint16(27873), + 2: uint16(28921), + 3: uint16(30770), + 4: uint16(32299), + 5: uint16(32990), + 6: uint16(33459), + 7: uint16(33804), + 8: uint16(34028), + 9: uint16(34562), + 10: uint16(35090), + 11: uint16(35370), + 12: uint16(35914), + 13: uint16(37030), + 14: uint16(37586), + 15: uint16(39165), + 16: uint16(40179), + 17: uint16(40300), + 18: uint16(20047), + 19: uint16(20129), + 20: uint16(20621), + 21: uint16(21078), + 22: uint16(22346), + 23: uint16(22952), + 24: uint16(24125), + 25: uint16(24536), + 26: uint16(24537), + 27: uint16(25151), + 28: uint16(26292), + 29: uint16(26395), + 30: uint16(26576), + 31: uint16(26834), + 32: uint16(20882), + 33: uint16(32033), + 34: uint16(32938), + 35: uint16(33192), + 36: uint16(35584), + 37: uint16(35980), + 38: uint16(36031), + 39: uint16(37502), + 40: uint16(38450), + 41: uint16(21536), + 42: uint16(38956), + 43: uint16(21271), + 44: uint16(20693), + 45: uint16(21340), + 46: uint16(22696), + 47: uint16(25778), + 48: uint16(26420), + 49: uint16(29287), + 50: uint16(30566), + 51: uint16(31302), + 52: uint16(37350), + 53: uint16(21187), + 54: uint16(27809), + 55: uint16(27526), + 56: uint16(22528), + 57: uint16(24140), + 58: uint16(22868), + 59: uint16(26412), + 60: uint16(32763), + 61: uint16(20961), + 62: uint16(30406), + 63: uint16(25705), + 64: uint16(30952), + 65: uint16(39764), + 66: uint16(40635), + 67: uint16(22475), + 68: uint16(22969), + 69: uint16(26151), + 70: uint16(26522), + 71: uint16(27598), + 72: uint16(21737), + 73: uint16(27097), + 74: uint16(24149), + 75: uint16(33180), + 76: uint16(26517), + 77: uint16(39850), + 78: uint16(26622), + 79: uint16(40018), + 80: uint16(26717), + 81: uint16(20134), + 82: uint16(20451), + 83: uint16(21448), + 84: uint16(25273), + 85: uint16(26411), + 86: uint16(27819), + 87: uint16(36804), + 88: uint16(20397), + 89: uint16(32365), + 90: uint16(40639), + 91: uint16(19975), + 92: uint16(24930), + 93: uint16(28288), + }, + 43: { + 0: uint16(28459), + 1: uint16(34067), + 2: uint16(21619), + 3: uint16(26410), + 4: uint16(39749), + 5: uint16(24051), + 6: uint16(31637), + 7: uint16(23724), + 8: uint16(23494), + 9: uint16(34588), + 10: uint16(28234), + 11: uint16(34001), + 12: uint16(31252), + 13: uint16(33032), + 14: uint16(22937), + 15: uint16(31885), + 16: uint16(27665), + 17: uint16(30496), + 18: uint16(21209), + 19: uint16(22818), + 20: uint16(28961), + 21: uint16(29279), + 22: uint16(30683), + 23: uint16(38695), + 24: uint16(40289), + 25: uint16(26891), + 26: uint16(23167), + 27: uint16(23064), + 28: uint16(20901), + 29: uint16(21517), + 30: uint16(21629), + 31: uint16(26126), + 32: uint16(30431), + 33: uint16(36855), + 34: uint16(37528), + 35: uint16(40180), + 36: uint16(23018), + 37: uint16(29277), + 38: uint16(28357), + 39: uint16(20813), + 40: uint16(26825), + 41: uint16(32191), + 42: uint16(32236), + 43: uint16(38754), + 44: uint16(40634), + 45: uint16(25720), + 46: uint16(27169), + 47: uint16(33538), + 48: uint16(22916), + 49: uint16(23391), + 50: uint16(27611), + 51: uint16(29467), + 52: uint16(30450), + 53: uint16(32178), + 54: uint16(32791), + 55: uint16(33945), + 56: uint16(20786), + 57: uint16(26408), + 58: uint16(40665), + 59: uint16(30446), + 60: uint16(26466), + 61: uint16(21247), + 62: uint16(39173), + 63: uint16(23588), + 64: uint16(25147), + 65: uint16(31870), + 66: uint16(36016), + 67: uint16(21839), + 68: uint16(24758), + 69: uint16(32011), + 70: uint16(38272), + 71: uint16(21249), + 72: uint16(20063), + 73: uint16(20918), + 74: uint16(22812), + 75: uint16(29242), + 76: uint16(32822), + 77: uint16(37326), + 78: uint16(24357), + 79: uint16(30690), + 80: uint16(21380), + 81: uint16(24441), + 82: uint16(32004), + 83: uint16(34220), + 84: uint16(35379), + 85: uint16(36493), + 86: uint16(38742), + 87: uint16(26611), + 88: uint16(34222), + 89: uint16(37971), + 90: uint16(24841), + 91: uint16(24840), + 92: uint16(27833), + 93: uint16(30290), + }, + 44: { + 0: uint16(35565), + 1: uint16(36664), + 2: uint16(21807), + 3: uint16(20305), + 4: uint16(20778), + 5: uint16(21191), + 6: uint16(21451), + 7: uint16(23461), + 8: uint16(24189), + 9: uint16(24736), + 10: uint16(24962), + 11: uint16(25558), + 12: uint16(26377), + 13: uint16(26586), + 14: uint16(28263), + 15: uint16(28044), + 16: uint16(29494), + 17: uint16(29495), + 18: uint16(30001), + 19: uint16(31056), + 20: uint16(35029), + 21: uint16(35480), + 22: uint16(36938), + 23: uint16(37009), + 24: uint16(37109), + 25: uint16(38596), + 26: uint16(34701), + 27: uint16(22805), + 28: uint16(20104), + 29: uint16(20313), + 30: uint16(19982), + 31: uint16(35465), + 32: uint16(36671), + 33: uint16(38928), + 34: uint16(20653), + 35: uint16(24188), + 36: uint16(22934), + 37: uint16(23481), + 38: uint16(24248), + 39: uint16(25562), + 40: uint16(25594), + 41: uint16(25793), + 42: uint16(26332), + 43: uint16(26954), + 44: uint16(27096), + 45: uint16(27915), + 46: uint16(28342), + 47: uint16(29076), + 48: uint16(29992), + 49: uint16(31407), + 50: uint16(32650), + 51: uint16(32768), + 52: uint16(33865), + 53: uint16(33993), + 54: uint16(35201), + 55: uint16(35617), + 56: uint16(36362), + 57: uint16(36965), + 58: uint16(38525), + 59: uint16(39178), + 60: uint16(24958), + 61: uint16(25233), + 62: uint16(27442), + 63: uint16(27779), + 64: uint16(28020), + 65: uint16(32716), + 66: uint16(32764), + 67: uint16(28096), + 68: uint16(32645), + 69: uint16(34746), + 70: uint16(35064), + 71: uint16(26469), + 72: uint16(33713), + 73: uint16(38972), + 74: uint16(38647), + 75: uint16(27931), + 76: uint16(32097), + 77: uint16(33853), + 78: uint16(37226), + 79: uint16(20081), + 80: uint16(21365), + 81: uint16(23888), + 82: uint16(27396), + 83: uint16(28651), + 84: uint16(34253), + 85: uint16(34349), + 86: uint16(35239), + 87: uint16(21033), + 88: uint16(21519), + 89: uint16(23653), + 90: uint16(26446), + 91: uint16(26792), + 92: uint16(29702), + 93: uint16(29827), + }, + 45: { + 0: uint16(30178), + 1: uint16(35023), + 2: uint16(35041), + 3: uint16(37324), + 4: uint16(38626), + 5: uint16(38520), + 6: uint16(24459), + 7: uint16(29575), + 8: uint16(31435), + 9: uint16(33870), + 10: uint16(25504), + 11: uint16(30053), + 12: uint16(21129), + 13: uint16(27969), + 14: uint16(28316), + 15: uint16(29705), + 16: uint16(30041), + 17: uint16(30827), + 18: uint16(31890), + 19: uint16(38534), + 20: uint16(31452), + 21: uint16(40845), + 22: uint16(20406), + 23: uint16(24942), + 24: uint16(26053), + 25: uint16(34396), + 26: uint16(20102), + 27: uint16(20142), + 28: uint16(20698), + 29: uint16(20001), + 30: uint16(20940), + 31: uint16(23534), + 32: uint16(26009), + 33: uint16(26753), + 34: uint16(28092), + 35: uint16(29471), + 36: uint16(30274), + 37: uint16(30637), + 38: uint16(31260), + 39: uint16(31975), + 40: uint16(33391), + 41: uint16(35538), + 42: uint16(36988), + 43: uint16(37327), + 44: uint16(38517), + 45: uint16(38936), + 46: uint16(21147), + 47: uint16(32209), + 48: uint16(20523), + 49: uint16(21400), + 50: uint16(26519), + 51: uint16(28107), + 52: uint16(29136), + 53: uint16(29747), + 54: uint16(33256), + 55: uint16(36650), + 56: uint16(38563), + 57: uint16(40023), + 58: uint16(40607), + 59: uint16(29792), + 60: uint16(22593), + 61: uint16(28057), + 62: uint16(32047), + 63: uint16(39006), + 64: uint16(20196), + 65: uint16(20278), + 66: uint16(20363), + 67: uint16(20919), + 68: uint16(21169), + 69: uint16(23994), + 70: uint16(24604), + 71: uint16(29618), + 72: uint16(31036), + 73: uint16(33491), + 74: uint16(37428), + 75: uint16(38583), + 76: uint16(38646), + 77: uint16(38666), + 78: uint16(40599), + 79: uint16(40802), + 80: uint16(26278), + 81: uint16(27508), + 82: uint16(21015), + 83: uint16(21155), + 84: uint16(28872), + 85: uint16(35010), + 86: uint16(24265), + 87: uint16(24651), + 88: uint16(24976), + 89: uint16(28451), + 90: uint16(29001), + 91: uint16(31806), + 92: uint16(32244), + 93: uint16(32879), + }, + 46: { + 0: uint16(34030), + 1: uint16(36899), + 2: uint16(37676), + 3: uint16(21570), + 4: uint16(39791), + 5: uint16(27347), + 6: uint16(28809), + 7: uint16(36034), + 8: uint16(36335), + 9: uint16(38706), + 10: uint16(21172), + 11: uint16(23105), + 12: uint16(24266), + 13: uint16(24324), + 14: uint16(26391), + 15: uint16(27004), + 16: uint16(27028), + 17: uint16(28010), + 18: uint16(28431), + 19: uint16(29282), + 20: uint16(29436), + 21: uint16(31725), + 22: uint16(32769), + 23: uint16(32894), + 24: uint16(34635), + 25: uint16(37070), + 26: uint16(20845), + 27: uint16(40595), + 28: uint16(31108), + 29: uint16(32907), + 30: uint16(37682), + 31: uint16(35542), + 32: uint16(20525), + 33: uint16(21644), + 34: uint16(35441), + 35: uint16(27498), + 36: uint16(36036), + 37: uint16(33031), + 38: uint16(24785), + 39: uint16(26528), + 40: uint16(40434), + 41: uint16(20121), + 42: uint16(20120), + 43: uint16(39952), + 44: uint16(35435), + 45: uint16(34241), + 46: uint16(34152), + 47: uint16(26880), + 48: uint16(28286), + 49: uint16(30871), + 50: uint16(33109), + }, + 47: { + 0: uint16(24332), + 1: uint16(19984), + 2: uint16(19989), + 3: uint16(20010), + 4: uint16(20017), + 5: uint16(20022), + 6: uint16(20028), + 7: uint16(20031), + 8: uint16(20034), + 9: uint16(20054), + 10: uint16(20056), + 11: uint16(20098), + 12: uint16(20101), + 13: uint16(35947), + 14: uint16(20106), + 15: uint16(33298), + 16: uint16(24333), + 17: uint16(20110), + 18: uint16(20126), + 19: uint16(20127), + 20: uint16(20128), + 21: uint16(20130), + 22: uint16(20144), + 23: uint16(20147), + 24: uint16(20150), + 25: uint16(20174), + 26: uint16(20173), + 27: uint16(20164), + 28: uint16(20166), + 29: uint16(20162), + 30: uint16(20183), + 31: uint16(20190), + 32: uint16(20205), + 33: uint16(20191), + 34: uint16(20215), + 35: uint16(20233), + 36: uint16(20314), + 37: uint16(20272), + 38: uint16(20315), + 39: uint16(20317), + 40: uint16(20311), + 41: uint16(20295), + 42: uint16(20342), + 43: uint16(20360), + 44: uint16(20367), + 45: uint16(20376), + 46: uint16(20347), + 47: uint16(20329), + 48: uint16(20336), + 49: uint16(20369), + 50: uint16(20335), + 51: uint16(20358), + 52: uint16(20374), + 53: uint16(20760), + 54: uint16(20436), + 55: uint16(20447), + 56: uint16(20430), + 57: uint16(20440), + 58: uint16(20443), + 59: uint16(20433), + 60: uint16(20442), + 61: uint16(20432), + 62: uint16(20452), + 63: uint16(20453), + 64: uint16(20506), + 65: uint16(20520), + 66: uint16(20500), + 67: uint16(20522), + 68: uint16(20517), + 69: uint16(20485), + 70: uint16(20252), + 71: uint16(20470), + 72: uint16(20513), + 73: uint16(20521), + 74: uint16(20524), + 75: uint16(20478), + 76: uint16(20463), + 77: uint16(20497), + 78: uint16(20486), + 79: uint16(20547), + 80: uint16(20551), + 81: uint16(26371), + 82: uint16(20565), + 83: uint16(20560), + 84: uint16(20552), + 85: uint16(20570), + 86: uint16(20566), + 87: uint16(20588), + 88: uint16(20600), + 89: uint16(20608), + 90: uint16(20634), + 91: uint16(20613), + 92: uint16(20660), + 93: uint16(20658), + }, + 48: { + 0: uint16(20681), + 1: uint16(20682), + 2: uint16(20659), + 3: uint16(20674), + 4: uint16(20694), + 5: uint16(20702), + 6: uint16(20709), + 7: uint16(20717), + 8: uint16(20707), + 9: uint16(20718), + 10: uint16(20729), + 11: uint16(20725), + 12: uint16(20745), + 13: uint16(20737), + 14: uint16(20738), + 15: uint16(20758), + 16: uint16(20757), + 17: uint16(20756), + 18: uint16(20762), + 19: uint16(20769), + 20: uint16(20794), + 21: uint16(20791), + 22: uint16(20796), + 23: uint16(20795), + 24: uint16(20799), + 25: uint16(20800), + 26: uint16(20818), + 27: uint16(20812), + 28: uint16(20820), + 29: uint16(20834), + 30: uint16(31480), + 31: uint16(20841), + 32: uint16(20842), + 33: uint16(20846), + 34: uint16(20864), + 35: uint16(20866), + 36: uint16(22232), + 37: uint16(20876), + 38: uint16(20873), + 39: uint16(20879), + 40: uint16(20881), + 41: uint16(20883), + 42: uint16(20885), + 43: uint16(20886), + 44: uint16(20900), + 45: uint16(20902), + 46: uint16(20898), + 47: uint16(20905), + 48: uint16(20906), + 49: uint16(20907), + 50: uint16(20915), + 51: uint16(20913), + 52: uint16(20914), + 53: uint16(20912), + 54: uint16(20917), + 55: uint16(20925), + 56: uint16(20933), + 57: uint16(20937), + 58: uint16(20955), + 59: uint16(20960), + 60: uint16(34389), + 61: uint16(20969), + 62: uint16(20973), + 63: uint16(20976), + 64: uint16(20981), + 65: uint16(20990), + 66: uint16(20996), + 67: uint16(21003), + 68: uint16(21012), + 69: uint16(21006), + 70: uint16(21031), + 71: uint16(21034), + 72: uint16(21038), + 73: uint16(21043), + 74: uint16(21049), + 75: uint16(21071), + 76: uint16(21060), + 77: uint16(21067), + 78: uint16(21068), + 79: uint16(21086), + 80: uint16(21076), + 81: uint16(21098), + 82: uint16(21108), + 83: uint16(21097), + 84: uint16(21107), + 85: uint16(21119), + 86: uint16(21117), + 87: uint16(21133), + 88: uint16(21140), + 89: uint16(21138), + 90: uint16(21105), + 91: uint16(21128), + 92: uint16(21137), + 93: uint16(36776), + }, + 49: { + 0: uint16(36775), + 1: uint16(21164), + 2: uint16(21165), + 3: uint16(21180), + 4: uint16(21173), + 5: uint16(21185), + 6: uint16(21197), + 7: uint16(21207), + 8: uint16(21214), + 9: uint16(21219), + 10: uint16(21222), + 11: uint16(39149), + 12: uint16(21216), + 13: uint16(21235), + 14: uint16(21237), + 15: uint16(21240), + 16: uint16(21241), + 17: uint16(21254), + 18: uint16(21256), + 19: uint16(30008), + 20: uint16(21261), + 21: uint16(21264), + 22: uint16(21263), + 23: uint16(21269), + 24: uint16(21274), + 25: uint16(21283), + 26: uint16(21295), + 27: uint16(21297), + 28: uint16(21299), + 29: uint16(21304), + 30: uint16(21312), + 31: uint16(21318), + 32: uint16(21317), + 33: uint16(19991), + 34: uint16(21321), + 35: uint16(21325), + 36: uint16(20950), + 37: uint16(21342), + 38: uint16(21353), + 39: uint16(21358), + 40: uint16(22808), + 41: uint16(21371), + 42: uint16(21367), + 43: uint16(21378), + 44: uint16(21398), + 45: uint16(21408), + 46: uint16(21414), + 47: uint16(21413), + 48: uint16(21422), + 49: uint16(21424), + 50: uint16(21430), + 51: uint16(21443), + 52: uint16(31762), + 53: uint16(38617), + 54: uint16(21471), + 55: uint16(26364), + 56: uint16(29166), + 57: uint16(21486), + 58: uint16(21480), + 59: uint16(21485), + 60: uint16(21498), + 61: uint16(21505), + 62: uint16(21565), + 63: uint16(21568), + 64: uint16(21548), + 65: uint16(21549), + 66: uint16(21564), + 67: uint16(21550), + 68: uint16(21558), + 69: uint16(21545), + 70: uint16(21533), + 71: uint16(21582), + 72: uint16(21647), + 73: uint16(21621), + 74: uint16(21646), + 75: uint16(21599), + 76: uint16(21617), + 77: uint16(21623), + 78: uint16(21616), + 79: uint16(21650), + 80: uint16(21627), + 81: uint16(21632), + 82: uint16(21622), + 83: uint16(21636), + 84: uint16(21648), + 85: uint16(21638), + 86: uint16(21703), + 87: uint16(21666), + 88: uint16(21688), + 89: uint16(21669), + 90: uint16(21676), + 91: uint16(21700), + 92: uint16(21704), + 93: uint16(21672), + }, + 50: { + 0: uint16(21675), + 1: uint16(21698), + 2: uint16(21668), + 3: uint16(21694), + 4: uint16(21692), + 5: uint16(21720), + 6: uint16(21733), + 7: uint16(21734), + 8: uint16(21775), + 9: uint16(21780), + 10: uint16(21757), + 11: uint16(21742), + 12: uint16(21741), + 13: uint16(21754), + 14: uint16(21730), + 15: uint16(21817), + 16: uint16(21824), + 17: uint16(21859), + 18: uint16(21836), + 19: uint16(21806), + 20: uint16(21852), + 21: uint16(21829), + 22: uint16(21846), + 23: uint16(21847), + 24: uint16(21816), + 25: uint16(21811), + 26: uint16(21853), + 27: uint16(21913), + 28: uint16(21888), + 29: uint16(21679), + 30: uint16(21898), + 31: uint16(21919), + 32: uint16(21883), + 33: uint16(21886), + 34: uint16(21912), + 35: uint16(21918), + 36: uint16(21934), + 37: uint16(21884), + 38: uint16(21891), + 39: uint16(21929), + 40: uint16(21895), + 41: uint16(21928), + 42: uint16(21978), + 43: uint16(21957), + 44: uint16(21983), + 45: uint16(21956), + 46: uint16(21980), + 47: uint16(21988), + 48: uint16(21972), + 49: uint16(22036), + 50: uint16(22007), + 51: uint16(22038), + 52: uint16(22014), + 53: uint16(22013), + 54: uint16(22043), + 55: uint16(22009), + 56: uint16(22094), + 57: uint16(22096), + 58: uint16(29151), + 59: uint16(22068), + 60: uint16(22070), + 61: uint16(22066), + 62: uint16(22072), + 63: uint16(22123), + 64: uint16(22116), + 65: uint16(22063), + 66: uint16(22124), + 67: uint16(22122), + 68: uint16(22150), + 69: uint16(22144), + 70: uint16(22154), + 71: uint16(22176), + 72: uint16(22164), + 73: uint16(22159), + 74: uint16(22181), + 75: uint16(22190), + 76: uint16(22198), + 77: uint16(22196), + 78: uint16(22210), + 79: uint16(22204), + 80: uint16(22209), + 81: uint16(22211), + 82: uint16(22208), + 83: uint16(22216), + 84: uint16(22222), + 85: uint16(22225), + 86: uint16(22227), + 87: uint16(22231), + 88: uint16(22254), + 89: uint16(22265), + 90: uint16(22272), + 91: uint16(22271), + 92: uint16(22276), + 93: uint16(22281), + }, + 51: { + 0: uint16(22280), + 1: uint16(22283), + 2: uint16(22285), + 3: uint16(22291), + 4: uint16(22296), + 5: uint16(22294), + 6: uint16(21959), + 7: uint16(22300), + 8: uint16(22310), + 9: uint16(22327), + 10: uint16(22328), + 11: uint16(22350), + 12: uint16(22331), + 13: uint16(22336), + 14: uint16(22351), + 15: uint16(22377), + 16: uint16(22464), + 17: uint16(22408), + 18: uint16(22369), + 19: uint16(22399), + 20: uint16(22409), + 21: uint16(22419), + 22: uint16(22432), + 23: uint16(22451), + 24: uint16(22436), + 25: uint16(22442), + 26: uint16(22448), + 27: uint16(22467), + 28: uint16(22470), + 29: uint16(22484), + 30: uint16(22482), + 31: uint16(22483), + 32: uint16(22538), + 33: uint16(22486), + 34: uint16(22499), + 35: uint16(22539), + 36: uint16(22553), + 37: uint16(22557), + 38: uint16(22642), + 39: uint16(22561), + 40: uint16(22626), + 41: uint16(22603), + 42: uint16(22640), + 43: uint16(27584), + 44: uint16(22610), + 45: uint16(22589), + 46: uint16(22649), + 47: uint16(22661), + 48: uint16(22713), + 49: uint16(22687), + 50: uint16(22699), + 51: uint16(22714), + 52: uint16(22750), + 53: uint16(22715), + 54: uint16(22712), + 55: uint16(22702), + 56: uint16(22725), + 57: uint16(22739), + 58: uint16(22737), + 59: uint16(22743), + 60: uint16(22745), + 61: uint16(22744), + 62: uint16(22757), + 63: uint16(22748), + 64: uint16(22756), + 65: uint16(22751), + 66: uint16(22767), + 67: uint16(22778), + 68: uint16(22777), + 69: uint16(22779), + 70: uint16(22780), + 71: uint16(22781), + 72: uint16(22786), + 73: uint16(22794), + 74: uint16(22800), + 75: uint16(22811), + 76: uint16(26790), + 77: uint16(22821), + 78: uint16(22828), + 79: uint16(22829), + 80: uint16(22834), + 81: uint16(22840), + 82: uint16(22846), + 83: uint16(31442), + 84: uint16(22869), + 85: uint16(22864), + 86: uint16(22862), + 87: uint16(22874), + 88: uint16(22872), + 89: uint16(22882), + 90: uint16(22880), + 91: uint16(22887), + 92: uint16(22892), + 93: uint16(22889), + }, + 52: { + 0: uint16(22904), + 1: uint16(22913), + 2: uint16(22941), + 3: uint16(20318), + 4: uint16(20395), + 5: uint16(22947), + 6: uint16(22962), + 7: uint16(22982), + 8: uint16(23016), + 9: uint16(23004), + 10: uint16(22925), + 11: uint16(23001), + 12: uint16(23002), + 13: uint16(23077), + 14: uint16(23071), + 15: uint16(23057), + 16: uint16(23068), + 17: uint16(23049), + 18: uint16(23066), + 19: uint16(23104), + 20: uint16(23148), + 21: uint16(23113), + 22: uint16(23093), + 23: uint16(23094), + 24: uint16(23138), + 25: uint16(23146), + 26: uint16(23194), + 27: uint16(23228), + 28: uint16(23230), + 29: uint16(23243), + 30: uint16(23234), + 31: uint16(23229), + 32: uint16(23267), + 33: uint16(23255), + 34: uint16(23270), + 35: uint16(23273), + 36: uint16(23254), + 37: uint16(23290), + 38: uint16(23291), + 39: uint16(23308), + 40: uint16(23307), + 41: uint16(23318), + 42: uint16(23346), + 43: uint16(23248), + 44: uint16(23338), + 45: uint16(23350), + 46: uint16(23358), + 47: uint16(23363), + 48: uint16(23365), + 49: uint16(23360), + 50: uint16(23377), + 51: uint16(23381), + 52: uint16(23386), + 53: uint16(23387), + 54: uint16(23397), + 55: uint16(23401), + 56: uint16(23408), + 57: uint16(23411), + 58: uint16(23413), + 59: uint16(23416), + 60: uint16(25992), + 61: uint16(23418), + 62: uint16(23424), + 63: uint16(23427), + 64: uint16(23462), + 65: uint16(23480), + 66: uint16(23491), + 67: uint16(23495), + 68: uint16(23497), + 69: uint16(23508), + 70: uint16(23504), + 71: uint16(23524), + 72: uint16(23526), + 73: uint16(23522), + 74: uint16(23518), + 75: uint16(23525), + 76: uint16(23531), + 77: uint16(23536), + 78: uint16(23542), + 79: uint16(23539), + 80: uint16(23557), + 81: uint16(23559), + 82: uint16(23560), + 83: uint16(23565), + 84: uint16(23571), + 85: uint16(23584), + 86: uint16(23586), + 87: uint16(23592), + 88: uint16(23608), + 89: uint16(23609), + 90: uint16(23617), + 91: uint16(23622), + 92: uint16(23630), + 93: uint16(23635), + }, + 53: { + 0: uint16(23632), + 1: uint16(23631), + 2: uint16(23409), + 3: uint16(23660), + 4: uint16(23662), + 5: uint16(20066), + 6: uint16(23670), + 7: uint16(23673), + 8: uint16(23692), + 9: uint16(23697), + 10: uint16(23700), + 11: uint16(22939), + 12: uint16(23723), + 13: uint16(23739), + 14: uint16(23734), + 15: uint16(23740), + 16: uint16(23735), + 17: uint16(23749), + 18: uint16(23742), + 19: uint16(23751), + 20: uint16(23769), + 21: uint16(23785), + 22: uint16(23805), + 23: uint16(23802), + 24: uint16(23789), + 25: uint16(23948), + 26: uint16(23786), + 27: uint16(23819), + 28: uint16(23829), + 29: uint16(23831), + 30: uint16(23900), + 31: uint16(23839), + 32: uint16(23835), + 33: uint16(23825), + 34: uint16(23828), + 35: uint16(23842), + 36: uint16(23834), + 37: uint16(23833), + 38: uint16(23832), + 39: uint16(23884), + 40: uint16(23890), + 41: uint16(23886), + 42: uint16(23883), + 43: uint16(23916), + 44: uint16(23923), + 45: uint16(23926), + 46: uint16(23943), + 47: uint16(23940), + 48: uint16(23938), + 49: uint16(23970), + 50: uint16(23965), + 51: uint16(23980), + 52: uint16(23982), + 53: uint16(23997), + 54: uint16(23952), + 55: uint16(23991), + 56: uint16(23996), + 57: uint16(24009), + 58: uint16(24013), + 59: uint16(24019), + 60: uint16(24018), + 61: uint16(24022), + 62: uint16(24027), + 63: uint16(24043), + 64: uint16(24050), + 65: uint16(24053), + 66: uint16(24075), + 67: uint16(24090), + 68: uint16(24089), + 69: uint16(24081), + 70: uint16(24091), + 71: uint16(24118), + 72: uint16(24119), + 73: uint16(24132), + 74: uint16(24131), + 75: uint16(24128), + 76: uint16(24142), + 77: uint16(24151), + 78: uint16(24148), + 79: uint16(24159), + 80: uint16(24162), + 81: uint16(24164), + 82: uint16(24135), + 83: uint16(24181), + 84: uint16(24182), + 85: uint16(24186), + 86: uint16(40636), + 87: uint16(24191), + 88: uint16(24224), + 89: uint16(24257), + 90: uint16(24258), + 91: uint16(24264), + 92: uint16(24272), + 93: uint16(24271), + }, + 54: { + 0: uint16(24278), + 1: uint16(24291), + 2: uint16(24285), + 3: uint16(24282), + 4: uint16(24283), + 5: uint16(24290), + 6: uint16(24289), + 7: uint16(24296), + 8: uint16(24297), + 9: uint16(24300), + 10: uint16(24305), + 11: uint16(24307), + 12: uint16(24304), + 13: uint16(24308), + 14: uint16(24312), + 15: uint16(24318), + 16: uint16(24323), + 17: uint16(24329), + 18: uint16(24413), + 19: uint16(24412), + 20: uint16(24331), + 21: uint16(24337), + 22: uint16(24342), + 23: uint16(24361), + 24: uint16(24365), + 25: uint16(24376), + 26: uint16(24385), + 27: uint16(24392), + 28: uint16(24396), + 29: uint16(24398), + 30: uint16(24367), + 31: uint16(24401), + 32: uint16(24406), + 33: uint16(24407), + 34: uint16(24409), + 35: uint16(24417), + 36: uint16(24429), + 37: uint16(24435), + 38: uint16(24439), + 39: uint16(24451), + 40: uint16(24450), + 41: uint16(24447), + 42: uint16(24458), + 43: uint16(24456), + 44: uint16(24465), + 45: uint16(24455), + 46: uint16(24478), + 47: uint16(24473), + 48: uint16(24472), + 49: uint16(24480), + 50: uint16(24488), + 51: uint16(24493), + 52: uint16(24508), + 53: uint16(24534), + 54: uint16(24571), + 55: uint16(24548), + 56: uint16(24568), + 57: uint16(24561), + 58: uint16(24541), + 59: uint16(24755), + 60: uint16(24575), + 61: uint16(24609), + 62: uint16(24672), + 63: uint16(24601), + 64: uint16(24592), + 65: uint16(24617), + 66: uint16(24590), + 67: uint16(24625), + 68: uint16(24603), + 69: uint16(24597), + 70: uint16(24619), + 71: uint16(24614), + 72: uint16(24591), + 73: uint16(24634), + 74: uint16(24666), + 75: uint16(24641), + 76: uint16(24682), + 77: uint16(24695), + 78: uint16(24671), + 79: uint16(24650), + 80: uint16(24646), + 81: uint16(24653), + 82: uint16(24675), + 83: uint16(24643), + 84: uint16(24676), + 85: uint16(24642), + 86: uint16(24684), + 87: uint16(24683), + 88: uint16(24665), + 89: uint16(24705), + 90: uint16(24717), + 91: uint16(24807), + 92: uint16(24707), + 93: uint16(24730), + }, + 55: { + 0: uint16(24708), + 1: uint16(24731), + 2: uint16(24726), + 3: uint16(24727), + 4: uint16(24722), + 5: uint16(24743), + 6: uint16(24715), + 7: uint16(24801), + 8: uint16(24760), + 9: uint16(24800), + 10: uint16(24787), + 11: uint16(24756), + 12: uint16(24560), + 13: uint16(24765), + 14: uint16(24774), + 15: uint16(24757), + 16: uint16(24792), + 17: uint16(24909), + 18: uint16(24853), + 19: uint16(24838), + 20: uint16(24822), + 21: uint16(24823), + 22: uint16(24832), + 23: uint16(24820), + 24: uint16(24826), + 25: uint16(24835), + 26: uint16(24865), + 27: uint16(24827), + 28: uint16(24817), + 29: uint16(24845), + 30: uint16(24846), + 31: uint16(24903), + 32: uint16(24894), + 33: uint16(24872), + 34: uint16(24871), + 35: uint16(24906), + 36: uint16(24895), + 37: uint16(24892), + 38: uint16(24876), + 39: uint16(24884), + 40: uint16(24893), + 41: uint16(24898), + 42: uint16(24900), + 43: uint16(24947), + 44: uint16(24951), + 45: uint16(24920), + 46: uint16(24921), + 47: uint16(24922), + 48: uint16(24939), + 49: uint16(24948), + 50: uint16(24943), + 51: uint16(24933), + 52: uint16(24945), + 53: uint16(24927), + 54: uint16(24925), + 55: uint16(24915), + 56: uint16(24949), + 57: uint16(24985), + 58: uint16(24982), + 59: uint16(24967), + 60: uint16(25004), + 61: uint16(24980), + 62: uint16(24986), + 63: uint16(24970), + 64: uint16(24977), + 65: uint16(25003), + 66: uint16(25006), + 67: uint16(25036), + 68: uint16(25034), + 69: uint16(25033), + 70: uint16(25079), + 71: uint16(25032), + 72: uint16(25027), + 73: uint16(25030), + 74: uint16(25018), + 75: uint16(25035), + 76: uint16(32633), + 77: uint16(25037), + 78: uint16(25062), + 79: uint16(25059), + 80: uint16(25078), + 81: uint16(25082), + 82: uint16(25076), + 83: uint16(25087), + 84: uint16(25085), + 85: uint16(25084), + 86: uint16(25086), + 87: uint16(25088), + 88: uint16(25096), + 89: uint16(25097), + 90: uint16(25101), + 91: uint16(25100), + 92: uint16(25108), + 93: uint16(25115), + }, + 56: { + 0: uint16(25118), + 1: uint16(25121), + 2: uint16(25130), + 3: uint16(25134), + 4: uint16(25136), + 5: uint16(25138), + 6: uint16(25139), + 7: uint16(25153), + 8: uint16(25166), + 9: uint16(25182), + 10: uint16(25187), + 11: uint16(25179), + 12: uint16(25184), + 13: uint16(25192), + 14: uint16(25212), + 15: uint16(25218), + 16: uint16(25225), + 17: uint16(25214), + 18: uint16(25234), + 19: uint16(25235), + 20: uint16(25238), + 21: uint16(25300), + 22: uint16(25219), + 23: uint16(25236), + 24: uint16(25303), + 25: uint16(25297), + 26: uint16(25275), + 27: uint16(25295), + 28: uint16(25343), + 29: uint16(25286), + 30: uint16(25812), + 31: uint16(25288), + 32: uint16(25308), + 33: uint16(25292), + 34: uint16(25290), + 35: uint16(25282), + 36: uint16(25287), + 37: uint16(25243), + 38: uint16(25289), + 39: uint16(25356), + 40: uint16(25326), + 41: uint16(25329), + 42: uint16(25383), + 43: uint16(25346), + 44: uint16(25352), + 45: uint16(25327), + 46: uint16(25333), + 47: uint16(25424), + 48: uint16(25406), + 49: uint16(25421), + 50: uint16(25628), + 51: uint16(25423), + 52: uint16(25494), + 53: uint16(25486), + 54: uint16(25472), + 55: uint16(25515), + 56: uint16(25462), + 57: uint16(25507), + 58: uint16(25487), + 59: uint16(25481), + 60: uint16(25503), + 61: uint16(25525), + 62: uint16(25451), + 63: uint16(25449), + 64: uint16(25534), + 65: uint16(25577), + 66: uint16(25536), + 67: uint16(25542), + 68: uint16(25571), + 69: uint16(25545), + 70: uint16(25554), + 71: uint16(25590), + 72: uint16(25540), + 73: uint16(25622), + 74: uint16(25652), + 75: uint16(25606), + 76: uint16(25619), + 77: uint16(25638), + 78: uint16(25654), + 79: uint16(25885), + 80: uint16(25623), + 81: uint16(25640), + 82: uint16(25615), + 83: uint16(25703), + 84: uint16(25711), + 85: uint16(25718), + 86: uint16(25678), + 87: uint16(25898), + 88: uint16(25749), + 89: uint16(25747), + 90: uint16(25765), + 91: uint16(25769), + 92: uint16(25736), + 93: uint16(25788), + }, + 57: { + 0: uint16(25818), + 1: uint16(25810), + 2: uint16(25797), + 3: uint16(25799), + 4: uint16(25787), + 5: uint16(25816), + 6: uint16(25794), + 7: uint16(25841), + 8: uint16(25831), + 9: uint16(33289), + 10: uint16(25824), + 11: uint16(25825), + 12: uint16(25260), + 13: uint16(25827), + 14: uint16(25839), + 15: uint16(25900), + 16: uint16(25846), + 17: uint16(25844), + 18: uint16(25842), + 19: uint16(25850), + 20: uint16(25856), + 21: uint16(25853), + 22: uint16(25880), + 23: uint16(25884), + 24: uint16(25861), + 25: uint16(25892), + 26: uint16(25891), + 27: uint16(25899), + 28: uint16(25908), + 29: uint16(25909), + 30: uint16(25911), + 31: uint16(25910), + 32: uint16(25912), + 33: uint16(30027), + 34: uint16(25928), + 35: uint16(25942), + 36: uint16(25941), + 37: uint16(25933), + 38: uint16(25944), + 39: uint16(25950), + 40: uint16(25949), + 41: uint16(25970), + 42: uint16(25976), + 43: uint16(25986), + 44: uint16(25987), + 45: uint16(35722), + 46: uint16(26011), + 47: uint16(26015), + 48: uint16(26027), + 49: uint16(26039), + 50: uint16(26051), + 51: uint16(26054), + 52: uint16(26049), + 53: uint16(26052), + 54: uint16(26060), + 55: uint16(26066), + 56: uint16(26075), + 57: uint16(26073), + 58: uint16(26080), + 59: uint16(26081), + 60: uint16(26097), + 61: uint16(26482), + 62: uint16(26122), + 63: uint16(26115), + 64: uint16(26107), + 65: uint16(26483), + 66: uint16(26165), + 67: uint16(26166), + 68: uint16(26164), + 69: uint16(26140), + 70: uint16(26191), + 71: uint16(26180), + 72: uint16(26185), + 73: uint16(26177), + 74: uint16(26206), + 75: uint16(26205), + 76: uint16(26212), + 77: uint16(26215), + 78: uint16(26216), + 79: uint16(26207), + 80: uint16(26210), + 81: uint16(26224), + 82: uint16(26243), + 83: uint16(26248), + 84: uint16(26254), + 85: uint16(26249), + 86: uint16(26244), + 87: uint16(26264), + 88: uint16(26269), + 89: uint16(26305), + 90: uint16(26297), + 91: uint16(26313), + 92: uint16(26302), + 93: uint16(26300), + }, + 58: { + 0: uint16(26308), + 1: uint16(26296), + 2: uint16(26326), + 3: uint16(26330), + 4: uint16(26336), + 5: uint16(26175), + 6: uint16(26342), + 7: uint16(26345), + 8: uint16(26352), + 9: uint16(26357), + 10: uint16(26359), + 11: uint16(26383), + 12: uint16(26390), + 13: uint16(26398), + 14: uint16(26406), + 15: uint16(26407), + 16: uint16(38712), + 17: uint16(26414), + 18: uint16(26431), + 19: uint16(26422), + 20: uint16(26433), + 21: uint16(26424), + 22: uint16(26423), + 23: uint16(26438), + 24: uint16(26462), + 25: uint16(26464), + 26: uint16(26457), + 27: uint16(26467), + 28: uint16(26468), + 29: uint16(26505), + 30: uint16(26480), + 31: uint16(26537), + 32: uint16(26492), + 33: uint16(26474), + 34: uint16(26508), + 35: uint16(26507), + 36: uint16(26534), + 37: uint16(26529), + 38: uint16(26501), + 39: uint16(26551), + 40: uint16(26607), + 41: uint16(26548), + 42: uint16(26604), + 43: uint16(26547), + 44: uint16(26601), + 45: uint16(26552), + 46: uint16(26596), + 47: uint16(26590), + 48: uint16(26589), + 49: uint16(26594), + 50: uint16(26606), + 51: uint16(26553), + 52: uint16(26574), + 53: uint16(26566), + 54: uint16(26599), + 55: uint16(27292), + 56: uint16(26654), + 57: uint16(26694), + 58: uint16(26665), + 59: uint16(26688), + 60: uint16(26701), + 61: uint16(26674), + 62: uint16(26702), + 63: uint16(26803), + 64: uint16(26667), + 65: uint16(26713), + 66: uint16(26723), + 67: uint16(26743), + 68: uint16(26751), + 69: uint16(26783), + 70: uint16(26767), + 71: uint16(26797), + 72: uint16(26772), + 73: uint16(26781), + 74: uint16(26779), + 75: uint16(26755), + 76: uint16(27310), + 77: uint16(26809), + 78: uint16(26740), + 79: uint16(26805), + 80: uint16(26784), + 81: uint16(26810), + 82: uint16(26895), + 83: uint16(26765), + 84: uint16(26750), + 85: uint16(26881), + 86: uint16(26826), + 87: uint16(26888), + 88: uint16(26840), + 89: uint16(26914), + 90: uint16(26918), + 91: uint16(26849), + 92: uint16(26892), + 93: uint16(26829), + }, + 59: { + 0: uint16(26836), + 1: uint16(26855), + 2: uint16(26837), + 3: uint16(26934), + 4: uint16(26898), + 5: uint16(26884), + 6: uint16(26839), + 7: uint16(26851), + 8: uint16(26917), + 9: uint16(26873), + 10: uint16(26848), + 11: uint16(26863), + 12: uint16(26920), + 13: uint16(26922), + 14: uint16(26906), + 15: uint16(26915), + 16: uint16(26913), + 17: uint16(26822), + 18: uint16(27001), + 19: uint16(26999), + 20: uint16(26972), + 21: uint16(27000), + 22: uint16(26987), + 23: uint16(26964), + 24: uint16(27006), + 25: uint16(26990), + 26: uint16(26937), + 27: uint16(26996), + 28: uint16(26941), + 29: uint16(26969), + 30: uint16(26928), + 31: uint16(26977), + 32: uint16(26974), + 33: uint16(26973), + 34: uint16(27009), + 35: uint16(26986), + 36: uint16(27058), + 37: uint16(27054), + 38: uint16(27088), + 39: uint16(27071), + 40: uint16(27073), + 41: uint16(27091), + 42: uint16(27070), + 43: uint16(27086), + 44: uint16(23528), + 45: uint16(27082), + 46: uint16(27101), + 47: uint16(27067), + 48: uint16(27075), + 49: uint16(27047), + 50: uint16(27182), + 51: uint16(27025), + 52: uint16(27040), + 53: uint16(27036), + 54: uint16(27029), + 55: uint16(27060), + 56: uint16(27102), + 57: uint16(27112), + 58: uint16(27138), + 59: uint16(27163), + 60: uint16(27135), + 61: uint16(27402), + 62: uint16(27129), + 63: uint16(27122), + 64: uint16(27111), + 65: uint16(27141), + 66: uint16(27057), + 67: uint16(27166), + 68: uint16(27117), + 69: uint16(27156), + 70: uint16(27115), + 71: uint16(27146), + 72: uint16(27154), + 73: uint16(27329), + 74: uint16(27171), + 75: uint16(27155), + 76: uint16(27204), + 77: uint16(27148), + 78: uint16(27250), + 79: uint16(27190), + 80: uint16(27256), + 81: uint16(27207), + 82: uint16(27234), + 83: uint16(27225), + 84: uint16(27238), + 85: uint16(27208), + 86: uint16(27192), + 87: uint16(27170), + 88: uint16(27280), + 89: uint16(27277), + 90: uint16(27296), + 91: uint16(27268), + 92: uint16(27298), + 93: uint16(27299), + }, + 60: { + 0: uint16(27287), + 1: uint16(34327), + 2: uint16(27323), + 3: uint16(27331), + 4: uint16(27330), + 5: uint16(27320), + 6: uint16(27315), + 7: uint16(27308), + 8: uint16(27358), + 9: uint16(27345), + 10: uint16(27359), + 11: uint16(27306), + 12: uint16(27354), + 13: uint16(27370), + 14: uint16(27387), + 15: uint16(27397), + 16: uint16(34326), + 17: uint16(27386), + 18: uint16(27410), + 19: uint16(27414), + 20: uint16(39729), + 21: uint16(27423), + 22: uint16(27448), + 23: uint16(27447), + 24: uint16(30428), + 25: uint16(27449), + 26: uint16(39150), + 27: uint16(27463), + 28: uint16(27459), + 29: uint16(27465), + 30: uint16(27472), + 31: uint16(27481), + 32: uint16(27476), + 33: uint16(27483), + 34: uint16(27487), + 35: uint16(27489), + 36: uint16(27512), + 37: uint16(27513), + 38: uint16(27519), + 39: uint16(27520), + 40: uint16(27524), + 41: uint16(27523), + 42: uint16(27533), + 43: uint16(27544), + 44: uint16(27541), + 45: uint16(27550), + 46: uint16(27556), + 47: uint16(27562), + 48: uint16(27563), + 49: uint16(27567), + 50: uint16(27570), + 51: uint16(27569), + 52: uint16(27571), + 53: uint16(27575), + 54: uint16(27580), + 55: uint16(27590), + 56: uint16(27595), + 57: uint16(27603), + 58: uint16(27615), + 59: uint16(27628), + 60: uint16(27627), + 61: uint16(27635), + 62: uint16(27631), + 63: uint16(40638), + 64: uint16(27656), + 65: uint16(27667), + 66: uint16(27668), + 67: uint16(27675), + 68: uint16(27684), + 69: uint16(27683), + 70: uint16(27742), + 71: uint16(27733), + 72: uint16(27746), + 73: uint16(27754), + 74: uint16(27778), + 75: uint16(27789), + 76: uint16(27802), + 77: uint16(27777), + 78: uint16(27803), + 79: uint16(27774), + 80: uint16(27752), + 81: uint16(27763), + 82: uint16(27794), + 83: uint16(27792), + 84: uint16(27844), + 85: uint16(27889), + 86: uint16(27859), + 87: uint16(27837), + 88: uint16(27863), + 89: uint16(27845), + 90: uint16(27869), + 91: uint16(27822), + 92: uint16(27825), + 93: uint16(27838), + }, + 61: { + 0: uint16(27834), + 1: uint16(27867), + 2: uint16(27887), + 3: uint16(27865), + 4: uint16(27882), + 5: uint16(27935), + 6: uint16(34893), + 7: uint16(27958), + 8: uint16(27947), + 9: uint16(27965), + 10: uint16(27960), + 11: uint16(27929), + 12: uint16(27957), + 13: uint16(27955), + 14: uint16(27922), + 15: uint16(27916), + 16: uint16(28003), + 17: uint16(28051), + 18: uint16(28004), + 19: uint16(27994), + 20: uint16(28025), + 21: uint16(27993), + 22: uint16(28046), + 23: uint16(28053), + 24: uint16(28644), + 25: uint16(28037), + 26: uint16(28153), + 27: uint16(28181), + 28: uint16(28170), + 29: uint16(28085), + 30: uint16(28103), + 31: uint16(28134), + 32: uint16(28088), + 33: uint16(28102), + 34: uint16(28140), + 35: uint16(28126), + 36: uint16(28108), + 37: uint16(28136), + 38: uint16(28114), + 39: uint16(28101), + 40: uint16(28154), + 41: uint16(28121), + 42: uint16(28132), + 43: uint16(28117), + 44: uint16(28138), + 45: uint16(28142), + 46: uint16(28205), + 47: uint16(28270), + 48: uint16(28206), + 49: uint16(28185), + 50: uint16(28274), + 51: uint16(28255), + 52: uint16(28222), + 53: uint16(28195), + 54: uint16(28267), + 55: uint16(28203), + 56: uint16(28278), + 57: uint16(28237), + 58: uint16(28191), + 59: uint16(28227), + 60: uint16(28218), + 61: uint16(28238), + 62: uint16(28196), + 63: uint16(28415), + 64: uint16(28189), + 65: uint16(28216), + 66: uint16(28290), + 67: uint16(28330), + 68: uint16(28312), + 69: uint16(28361), + 70: uint16(28343), + 71: uint16(28371), + 72: uint16(28349), + 73: uint16(28335), + 74: uint16(28356), + 75: uint16(28338), + 76: uint16(28372), + 77: uint16(28373), + 78: uint16(28303), + 79: uint16(28325), + 80: uint16(28354), + 81: uint16(28319), + 82: uint16(28481), + 83: uint16(28433), + 84: uint16(28748), + 85: uint16(28396), + 86: uint16(28408), + 87: uint16(28414), + 88: uint16(28479), + 89: uint16(28402), + 90: uint16(28465), + 91: uint16(28399), + 92: uint16(28466), + 93: uint16(28364), + }, + 62: { + 0: uint16(28478), + 1: uint16(28435), + 2: uint16(28407), + 3: uint16(28550), + 4: uint16(28538), + 5: uint16(28536), + 6: uint16(28545), + 7: uint16(28544), + 8: uint16(28527), + 9: uint16(28507), + 10: uint16(28659), + 11: uint16(28525), + 12: uint16(28546), + 13: uint16(28540), + 14: uint16(28504), + 15: uint16(28558), + 16: uint16(28561), + 17: uint16(28610), + 18: uint16(28518), + 19: uint16(28595), + 20: uint16(28579), + 21: uint16(28577), + 22: uint16(28580), + 23: uint16(28601), + 24: uint16(28614), + 25: uint16(28586), + 26: uint16(28639), + 27: uint16(28629), + 28: uint16(28652), + 29: uint16(28628), + 30: uint16(28632), + 31: uint16(28657), + 32: uint16(28654), + 33: uint16(28635), + 34: uint16(28681), + 35: uint16(28683), + 36: uint16(28666), + 37: uint16(28689), + 38: uint16(28673), + 39: uint16(28687), + 40: uint16(28670), + 41: uint16(28699), + 42: uint16(28698), + 43: uint16(28532), + 44: uint16(28701), + 45: uint16(28696), + 46: uint16(28703), + 47: uint16(28720), + 48: uint16(28734), + 49: uint16(28722), + 50: uint16(28753), + 51: uint16(28771), + 52: uint16(28825), + 53: uint16(28818), + 54: uint16(28847), + 55: uint16(28913), + 56: uint16(28844), + 57: uint16(28856), + 58: uint16(28851), + 59: uint16(28846), + 60: uint16(28895), + 61: uint16(28875), + 62: uint16(28893), + 63: uint16(28889), + 64: uint16(28937), + 65: uint16(28925), + 66: uint16(28956), + 67: uint16(28953), + 68: uint16(29029), + 69: uint16(29013), + 70: uint16(29064), + 71: uint16(29030), + 72: uint16(29026), + 73: uint16(29004), + 74: uint16(29014), + 75: uint16(29036), + 76: uint16(29071), + 77: uint16(29179), + 78: uint16(29060), + 79: uint16(29077), + 80: uint16(29096), + 81: uint16(29100), + 82: uint16(29143), + 83: uint16(29113), + 84: uint16(29118), + 85: uint16(29138), + 86: uint16(29129), + 87: uint16(29140), + 88: uint16(29134), + 89: uint16(29152), + 90: uint16(29164), + 91: uint16(29159), + 92: uint16(29173), + 93: uint16(29180), + }, + 63: { + 0: uint16(29177), + 1: uint16(29183), + 2: uint16(29197), + 3: uint16(29200), + 4: uint16(29211), + 5: uint16(29224), + 6: uint16(29229), + 7: uint16(29228), + 8: uint16(29232), + 9: uint16(29234), + 10: uint16(29243), + 11: uint16(29244), + 12: uint16(29247), + 13: uint16(29248), + 14: uint16(29254), + 15: uint16(29259), + 16: uint16(29272), + 17: uint16(29300), + 18: uint16(29310), + 19: uint16(29314), + 20: uint16(29313), + 21: uint16(29319), + 22: uint16(29330), + 23: uint16(29334), + 24: uint16(29346), + 25: uint16(29351), + 26: uint16(29369), + 27: uint16(29362), + 28: uint16(29379), + 29: uint16(29382), + 30: uint16(29380), + 31: uint16(29390), + 32: uint16(29394), + 33: uint16(29410), + 34: uint16(29408), + 35: uint16(29409), + 36: uint16(29433), + 37: uint16(29431), + 38: uint16(20495), + 39: uint16(29463), + 40: uint16(29450), + 41: uint16(29468), + 42: uint16(29462), + 43: uint16(29469), + 44: uint16(29492), + 45: uint16(29487), + 46: uint16(29481), + 47: uint16(29477), + 48: uint16(29502), + 49: uint16(29518), + 50: uint16(29519), + 51: uint16(40664), + 52: uint16(29527), + 53: uint16(29546), + 54: uint16(29544), + 55: uint16(29552), + 56: uint16(29560), + 57: uint16(29557), + 58: uint16(29563), + 59: uint16(29562), + 60: uint16(29640), + 61: uint16(29619), + 62: uint16(29646), + 63: uint16(29627), + 64: uint16(29632), + 65: uint16(29669), + 66: uint16(29678), + 67: uint16(29662), + 68: uint16(29858), + 69: uint16(29701), + 70: uint16(29807), + 71: uint16(29733), + 72: uint16(29688), + 73: uint16(29746), + 74: uint16(29754), + 75: uint16(29781), + 76: uint16(29759), + 77: uint16(29791), + 78: uint16(29785), + 79: uint16(29761), + 80: uint16(29788), + 81: uint16(29801), + 82: uint16(29808), + 83: uint16(29795), + 84: uint16(29802), + 85: uint16(29814), + 86: uint16(29822), + 87: uint16(29835), + 88: uint16(29854), + 89: uint16(29863), + 90: uint16(29898), + 91: uint16(29903), + 92: uint16(29908), + 93: uint16(29681), + }, + 64: { + 0: uint16(29920), + 1: uint16(29923), + 2: uint16(29927), + 3: uint16(29929), + 4: uint16(29934), + 5: uint16(29938), + 6: uint16(29936), + 7: uint16(29937), + 8: uint16(29944), + 9: uint16(29943), + 10: uint16(29956), + 11: uint16(29955), + 12: uint16(29957), + 13: uint16(29964), + 14: uint16(29966), + 15: uint16(29965), + 16: uint16(29973), + 17: uint16(29971), + 18: uint16(29982), + 19: uint16(29990), + 20: uint16(29996), + 21: uint16(30012), + 22: uint16(30020), + 23: uint16(30029), + 24: uint16(30026), + 25: uint16(30025), + 26: uint16(30043), + 27: uint16(30022), + 28: uint16(30042), + 29: uint16(30057), + 30: uint16(30052), + 31: uint16(30055), + 32: uint16(30059), + 33: uint16(30061), + 34: uint16(30072), + 35: uint16(30070), + 36: uint16(30086), + 37: uint16(30087), + 38: uint16(30068), + 39: uint16(30090), + 40: uint16(30089), + 41: uint16(30082), + 42: uint16(30100), + 43: uint16(30106), + 44: uint16(30109), + 45: uint16(30117), + 46: uint16(30115), + 47: uint16(30146), + 48: uint16(30131), + 49: uint16(30147), + 50: uint16(30133), + 51: uint16(30141), + 52: uint16(30136), + 53: uint16(30140), + 54: uint16(30129), + 55: uint16(30157), + 56: uint16(30154), + 57: uint16(30162), + 58: uint16(30169), + 59: uint16(30179), + 60: uint16(30174), + 61: uint16(30206), + 62: uint16(30207), + 63: uint16(30204), + 64: uint16(30209), + 65: uint16(30192), + 66: uint16(30202), + 67: uint16(30194), + 68: uint16(30195), + 69: uint16(30219), + 70: uint16(30221), + 71: uint16(30217), + 72: uint16(30239), + 73: uint16(30247), + 74: uint16(30240), + 75: uint16(30241), + 76: uint16(30242), + 77: uint16(30244), + 78: uint16(30260), + 79: uint16(30256), + 80: uint16(30267), + 81: uint16(30279), + 82: uint16(30280), + 83: uint16(30278), + 84: uint16(30300), + 85: uint16(30296), + 86: uint16(30305), + 87: uint16(30306), + 88: uint16(30312), + 89: uint16(30313), + 90: uint16(30314), + 91: uint16(30311), + 92: uint16(30316), + 93: uint16(30320), + }, + 65: { + 0: uint16(30322), + 1: uint16(30326), + 2: uint16(30328), + 3: uint16(30332), + 4: uint16(30336), + 5: uint16(30339), + 6: uint16(30344), + 7: uint16(30347), + 8: uint16(30350), + 9: uint16(30358), + 10: uint16(30355), + 11: uint16(30361), + 12: uint16(30362), + 13: uint16(30384), + 14: uint16(30388), + 15: uint16(30392), + 16: uint16(30393), + 17: uint16(30394), + 18: uint16(30402), + 19: uint16(30413), + 20: uint16(30422), + 21: uint16(30418), + 22: uint16(30430), + 23: uint16(30433), + 24: uint16(30437), + 25: uint16(30439), + 26: uint16(30442), + 27: uint16(34351), + 28: uint16(30459), + 29: uint16(30472), + 30: uint16(30471), + 31: uint16(30468), + 32: uint16(30505), + 33: uint16(30500), + 34: uint16(30494), + 35: uint16(30501), + 36: uint16(30502), + 37: uint16(30491), + 38: uint16(30519), + 39: uint16(30520), + 40: uint16(30535), + 41: uint16(30554), + 42: uint16(30568), + 43: uint16(30571), + 44: uint16(30555), + 45: uint16(30565), + 46: uint16(30591), + 47: uint16(30590), + 48: uint16(30585), + 49: uint16(30606), + 50: uint16(30603), + 51: uint16(30609), + 52: uint16(30624), + 53: uint16(30622), + 54: uint16(30640), + 55: uint16(30646), + 56: uint16(30649), + 57: uint16(30655), + 58: uint16(30652), + 59: uint16(30653), + 60: uint16(30651), + 61: uint16(30663), + 62: uint16(30669), + 63: uint16(30679), + 64: uint16(30682), + 65: uint16(30684), + 66: uint16(30691), + 67: uint16(30702), + 68: uint16(30716), + 69: uint16(30732), + 70: uint16(30738), + 71: uint16(31014), + 72: uint16(30752), + 73: uint16(31018), + 74: uint16(30789), + 75: uint16(30862), + 76: uint16(30836), + 77: uint16(30854), + 78: uint16(30844), + 79: uint16(30874), + 80: uint16(30860), + 81: uint16(30883), + 82: uint16(30901), + 83: uint16(30890), + 84: uint16(30895), + 85: uint16(30929), + 86: uint16(30918), + 87: uint16(30923), + 88: uint16(30932), + 89: uint16(30910), + 90: uint16(30908), + 91: uint16(30917), + 92: uint16(30922), + 93: uint16(30956), + }, + 66: { + 0: uint16(30951), + 1: uint16(30938), + 2: uint16(30973), + 3: uint16(30964), + 4: uint16(30983), + 5: uint16(30994), + 6: uint16(30993), + 7: uint16(31001), + 8: uint16(31020), + 9: uint16(31019), + 10: uint16(31040), + 11: uint16(31072), + 12: uint16(31063), + 13: uint16(31071), + 14: uint16(31066), + 15: uint16(31061), + 16: uint16(31059), + 17: uint16(31098), + 18: uint16(31103), + 19: uint16(31114), + 20: uint16(31133), + 21: uint16(31143), + 22: uint16(40779), + 23: uint16(31146), + 24: uint16(31150), + 25: uint16(31155), + 26: uint16(31161), + 27: uint16(31162), + 28: uint16(31177), + 29: uint16(31189), + 30: uint16(31207), + 31: uint16(31212), + 32: uint16(31201), + 33: uint16(31203), + 34: uint16(31240), + 35: uint16(31245), + 36: uint16(31256), + 37: uint16(31257), + 38: uint16(31264), + 39: uint16(31263), + 40: uint16(31104), + 41: uint16(31281), + 42: uint16(31291), + 43: uint16(31294), + 44: uint16(31287), + 45: uint16(31299), + 46: uint16(31319), + 47: uint16(31305), + 48: uint16(31329), + 49: uint16(31330), + 50: uint16(31337), + 51: uint16(40861), + 52: uint16(31344), + 53: uint16(31353), + 54: uint16(31357), + 55: uint16(31368), + 56: uint16(31383), + 57: uint16(31381), + 58: uint16(31384), + 59: uint16(31382), + 60: uint16(31401), + 61: uint16(31432), + 62: uint16(31408), + 63: uint16(31414), + 64: uint16(31429), + 65: uint16(31428), + 66: uint16(31423), + 67: uint16(36995), + 68: uint16(31431), + 69: uint16(31434), + 70: uint16(31437), + 71: uint16(31439), + 72: uint16(31445), + 73: uint16(31443), + 74: uint16(31449), + 75: uint16(31450), + 76: uint16(31453), + 77: uint16(31457), + 78: uint16(31458), + 79: uint16(31462), + 80: uint16(31469), + 81: uint16(31472), + 82: uint16(31490), + 83: uint16(31503), + 84: uint16(31498), + 85: uint16(31494), + 86: uint16(31539), + 87: uint16(31512), + 88: uint16(31513), + 89: uint16(31518), + 90: uint16(31541), + 91: uint16(31528), + 92: uint16(31542), + 93: uint16(31568), + }, + 67: { + 0: uint16(31610), + 1: uint16(31492), + 2: uint16(31565), + 3: uint16(31499), + 4: uint16(31564), + 5: uint16(31557), + 6: uint16(31605), + 7: uint16(31589), + 8: uint16(31604), + 9: uint16(31591), + 10: uint16(31600), + 11: uint16(31601), + 12: uint16(31596), + 13: uint16(31598), + 14: uint16(31645), + 15: uint16(31640), + 16: uint16(31647), + 17: uint16(31629), + 18: uint16(31644), + 19: uint16(31642), + 20: uint16(31627), + 21: uint16(31634), + 22: uint16(31631), + 23: uint16(31581), + 24: uint16(31641), + 25: uint16(31691), + 26: uint16(31681), + 27: uint16(31692), + 28: uint16(31695), + 29: uint16(31668), + 30: uint16(31686), + 31: uint16(31709), + 32: uint16(31721), + 33: uint16(31761), + 34: uint16(31764), + 35: uint16(31718), + 36: uint16(31717), + 37: uint16(31840), + 38: uint16(31744), + 39: uint16(31751), + 40: uint16(31763), + 41: uint16(31731), + 42: uint16(31735), + 43: uint16(31767), + 44: uint16(31757), + 45: uint16(31734), + 46: uint16(31779), + 47: uint16(31783), + 48: uint16(31786), + 49: uint16(31775), + 50: uint16(31799), + 51: uint16(31787), + 52: uint16(31805), + 53: uint16(31820), + 54: uint16(31811), + 55: uint16(31828), + 56: uint16(31823), + 57: uint16(31808), + 58: uint16(31824), + 59: uint16(31832), + 60: uint16(31839), + 61: uint16(31844), + 62: uint16(31830), + 63: uint16(31845), + 64: uint16(31852), + 65: uint16(31861), + 66: uint16(31875), + 67: uint16(31888), + 68: uint16(31908), + 69: uint16(31917), + 70: uint16(31906), + 71: uint16(31915), + 72: uint16(31905), + 73: uint16(31912), + 74: uint16(31923), + 75: uint16(31922), + 76: uint16(31921), + 77: uint16(31918), + 78: uint16(31929), + 79: uint16(31933), + 80: uint16(31936), + 81: uint16(31941), + 82: uint16(31938), + 83: uint16(31960), + 84: uint16(31954), + 85: uint16(31964), + 86: uint16(31970), + 87: uint16(39739), + 88: uint16(31983), + 89: uint16(31986), + 90: uint16(31988), + 91: uint16(31990), + 92: uint16(31994), + 93: uint16(32006), + }, + 68: { + 0: uint16(32002), + 1: uint16(32028), + 2: uint16(32021), + 3: uint16(32010), + 4: uint16(32069), + 5: uint16(32075), + 6: uint16(32046), + 7: uint16(32050), + 8: uint16(32063), + 9: uint16(32053), + 10: uint16(32070), + 11: uint16(32115), + 12: uint16(32086), + 13: uint16(32078), + 14: uint16(32114), + 15: uint16(32104), + 16: uint16(32110), + 17: uint16(32079), + 18: uint16(32099), + 19: uint16(32147), + 20: uint16(32137), + 21: uint16(32091), + 22: uint16(32143), + 23: uint16(32125), + 24: uint16(32155), + 25: uint16(32186), + 26: uint16(32174), + 27: uint16(32163), + 28: uint16(32181), + 29: uint16(32199), + 30: uint16(32189), + 31: uint16(32171), + 32: uint16(32317), + 33: uint16(32162), + 34: uint16(32175), + 35: uint16(32220), + 36: uint16(32184), + 37: uint16(32159), + 38: uint16(32176), + 39: uint16(32216), + 40: uint16(32221), + 41: uint16(32228), + 42: uint16(32222), + 43: uint16(32251), + 44: uint16(32242), + 45: uint16(32225), + 46: uint16(32261), + 47: uint16(32266), + 48: uint16(32291), + 49: uint16(32289), + 50: uint16(32274), + 51: uint16(32305), + 52: uint16(32287), + 53: uint16(32265), + 54: uint16(32267), + 55: uint16(32290), + 56: uint16(32326), + 57: uint16(32358), + 58: uint16(32315), + 59: uint16(32309), + 60: uint16(32313), + 61: uint16(32323), + 62: uint16(32311), + 63: uint16(32306), + 64: uint16(32314), + 65: uint16(32359), + 66: uint16(32349), + 67: uint16(32342), + 68: uint16(32350), + 69: uint16(32345), + 70: uint16(32346), + 71: uint16(32377), + 72: uint16(32362), + 73: uint16(32361), + 74: uint16(32380), + 75: uint16(32379), + 76: uint16(32387), + 77: uint16(32213), + 78: uint16(32381), + 79: uint16(36782), + 80: uint16(32383), + 81: uint16(32392), + 82: uint16(32393), + 83: uint16(32396), + 84: uint16(32402), + 85: uint16(32400), + 86: uint16(32403), + 87: uint16(32404), + 88: uint16(32406), + 89: uint16(32398), + 90: uint16(32411), + 91: uint16(32412), + 92: uint16(32568), + 93: uint16(32570), + }, + 69: { + 0: uint16(32581), + 1: uint16(32588), + 2: uint16(32589), + 3: uint16(32590), + 4: uint16(32592), + 5: uint16(32593), + 6: uint16(32597), + 7: uint16(32596), + 8: uint16(32600), + 9: uint16(32607), + 10: uint16(32608), + 11: uint16(32616), + 12: uint16(32617), + 13: uint16(32615), + 14: uint16(32632), + 15: uint16(32642), + 16: uint16(32646), + 17: uint16(32643), + 18: uint16(32648), + 19: uint16(32647), + 20: uint16(32652), + 21: uint16(32660), + 22: uint16(32670), + 23: uint16(32669), + 24: uint16(32666), + 25: uint16(32675), + 26: uint16(32687), + 27: uint16(32690), + 28: uint16(32697), + 29: uint16(32686), + 30: uint16(32694), + 31: uint16(32696), + 32: uint16(35697), + 33: uint16(32709), + 34: uint16(32710), + 35: uint16(32714), + 36: uint16(32725), + 37: uint16(32724), + 38: uint16(32737), + 39: uint16(32742), + 40: uint16(32745), + 41: uint16(32755), + 42: uint16(32761), + 43: uint16(39132), + 44: uint16(32774), + 45: uint16(32772), + 46: uint16(32779), + 47: uint16(32786), + 48: uint16(32792), + 49: uint16(32793), + 50: uint16(32796), + 51: uint16(32801), + 52: uint16(32808), + 53: uint16(32831), + 54: uint16(32827), + 55: uint16(32842), + 56: uint16(32838), + 57: uint16(32850), + 58: uint16(32856), + 59: uint16(32858), + 60: uint16(32863), + 61: uint16(32866), + 62: uint16(32872), + 63: uint16(32883), + 64: uint16(32882), + 65: uint16(32880), + 66: uint16(32886), + 67: uint16(32889), + 68: uint16(32893), + 69: uint16(32895), + 70: uint16(32900), + 71: uint16(32902), + 72: uint16(32901), + 73: uint16(32923), + 74: uint16(32915), + 75: uint16(32922), + 76: uint16(32941), + 77: uint16(20880), + 78: uint16(32940), + 79: uint16(32987), + 80: uint16(32997), + 81: uint16(32985), + 82: uint16(32989), + 83: uint16(32964), + 84: uint16(32986), + 85: uint16(32982), + 86: uint16(33033), + 87: uint16(33007), + 88: uint16(33009), + 89: uint16(33051), + 90: uint16(33065), + 91: uint16(33059), + 92: uint16(33071), + 93: uint16(33099), + }, + 70: { + 0: uint16(38539), + 1: uint16(33094), + 2: uint16(33086), + 3: uint16(33107), + 4: uint16(33105), + 5: uint16(33020), + 6: uint16(33137), + 7: uint16(33134), + 8: uint16(33125), + 9: uint16(33126), + 10: uint16(33140), + 11: uint16(33155), + 12: uint16(33160), + 13: uint16(33162), + 14: uint16(33152), + 15: uint16(33154), + 16: uint16(33184), + 17: uint16(33173), + 18: uint16(33188), + 19: uint16(33187), + 20: uint16(33119), + 21: uint16(33171), + 22: uint16(33193), + 23: uint16(33200), + 24: uint16(33205), + 25: uint16(33214), + 26: uint16(33208), + 27: uint16(33213), + 28: uint16(33216), + 29: uint16(33218), + 30: uint16(33210), + 31: uint16(33225), + 32: uint16(33229), + 33: uint16(33233), + 34: uint16(33241), + 35: uint16(33240), + 36: uint16(33224), + 37: uint16(33242), + 38: uint16(33247), + 39: uint16(33248), + 40: uint16(33255), + 41: uint16(33274), + 42: uint16(33275), + 43: uint16(33278), + 44: uint16(33281), + 45: uint16(33282), + 46: uint16(33285), + 47: uint16(33287), + 48: uint16(33290), + 49: uint16(33293), + 50: uint16(33296), + 51: uint16(33302), + 52: uint16(33321), + 53: uint16(33323), + 54: uint16(33336), + 55: uint16(33331), + 56: uint16(33344), + 57: uint16(33369), + 58: uint16(33368), + 59: uint16(33373), + 60: uint16(33370), + 61: uint16(33375), + 62: uint16(33380), + 63: uint16(33378), + 64: uint16(33384), + 65: uint16(33386), + 66: uint16(33387), + 67: uint16(33326), + 68: uint16(33393), + 69: uint16(33399), + 70: uint16(33400), + 71: uint16(33406), + 72: uint16(33421), + 73: uint16(33426), + 74: uint16(33451), + 75: uint16(33439), + 76: uint16(33467), + 77: uint16(33452), + 78: uint16(33505), + 79: uint16(33507), + 80: uint16(33503), + 81: uint16(33490), + 82: uint16(33524), + 83: uint16(33523), + 84: uint16(33530), + 85: uint16(33683), + 86: uint16(33539), + 87: uint16(33531), + 88: uint16(33529), + 89: uint16(33502), + 90: uint16(33542), + 91: uint16(33500), + 92: uint16(33545), + 93: uint16(33497), + }, + 71: { + 0: uint16(33589), + 1: uint16(33588), + 2: uint16(33558), + 3: uint16(33586), + 4: uint16(33585), + 5: uint16(33600), + 6: uint16(33593), + 7: uint16(33616), + 8: uint16(33605), + 9: uint16(33583), + 10: uint16(33579), + 11: uint16(33559), + 12: uint16(33560), + 13: uint16(33669), + 14: uint16(33690), + 15: uint16(33706), + 16: uint16(33695), + 17: uint16(33698), + 18: uint16(33686), + 19: uint16(33571), + 20: uint16(33678), + 21: uint16(33671), + 22: uint16(33674), + 23: uint16(33660), + 24: uint16(33717), + 25: uint16(33651), + 26: uint16(33653), + 27: uint16(33696), + 28: uint16(33673), + 29: uint16(33704), + 30: uint16(33780), + 31: uint16(33811), + 32: uint16(33771), + 33: uint16(33742), + 34: uint16(33789), + 35: uint16(33795), + 36: uint16(33752), + 37: uint16(33803), + 38: uint16(33729), + 39: uint16(33783), + 40: uint16(33799), + 41: uint16(33760), + 42: uint16(33778), + 43: uint16(33805), + 44: uint16(33826), + 45: uint16(33824), + 46: uint16(33725), + 47: uint16(33848), + 48: uint16(34054), + 49: uint16(33787), + 50: uint16(33901), + 51: uint16(33834), + 52: uint16(33852), + 53: uint16(34138), + 54: uint16(33924), + 55: uint16(33911), + 56: uint16(33899), + 57: uint16(33965), + 58: uint16(33902), + 59: uint16(33922), + 60: uint16(33897), + 61: uint16(33862), + 62: uint16(33836), + 63: uint16(33903), + 64: uint16(33913), + 65: uint16(33845), + 66: uint16(33994), + 67: uint16(33890), + 68: uint16(33977), + 69: uint16(33983), + 70: uint16(33951), + 71: uint16(34009), + 72: uint16(33997), + 73: uint16(33979), + 74: uint16(34010), + 75: uint16(34000), + 76: uint16(33985), + 77: uint16(33990), + 78: uint16(34006), + 79: uint16(33953), + 80: uint16(34081), + 81: uint16(34047), + 82: uint16(34036), + 83: uint16(34071), + 84: uint16(34072), + 85: uint16(34092), + 86: uint16(34079), + 87: uint16(34069), + 88: uint16(34068), + 89: uint16(34044), + 90: uint16(34112), + 91: uint16(34147), + 92: uint16(34136), + 93: uint16(34120), + }, + 72: { + 0: uint16(34113), + 1: uint16(34306), + 2: uint16(34123), + 3: uint16(34133), + 4: uint16(34176), + 5: uint16(34212), + 6: uint16(34184), + 7: uint16(34193), + 8: uint16(34186), + 9: uint16(34216), + 10: uint16(34157), + 11: uint16(34196), + 12: uint16(34203), + 13: uint16(34282), + 14: uint16(34183), + 15: uint16(34204), + 16: uint16(34167), + 17: uint16(34174), + 18: uint16(34192), + 19: uint16(34249), + 20: uint16(34234), + 21: uint16(34255), + 22: uint16(34233), + 23: uint16(34256), + 24: uint16(34261), + 25: uint16(34269), + 26: uint16(34277), + 27: uint16(34268), + 28: uint16(34297), + 29: uint16(34314), + 30: uint16(34323), + 31: uint16(34315), + 32: uint16(34302), + 33: uint16(34298), + 34: uint16(34310), + 35: uint16(34338), + 36: uint16(34330), + 37: uint16(34352), + 38: uint16(34367), + 39: uint16(34381), + 40: uint16(20053), + 41: uint16(34388), + 42: uint16(34399), + 43: uint16(34407), + 44: uint16(34417), + 45: uint16(34451), + 46: uint16(34467), + 47: uint16(34473), + 48: uint16(34474), + 49: uint16(34443), + 50: uint16(34444), + 51: uint16(34486), + 52: uint16(34479), + 53: uint16(34500), + 54: uint16(34502), + 55: uint16(34480), + 56: uint16(34505), + 57: uint16(34851), + 58: uint16(34475), + 59: uint16(34516), + 60: uint16(34526), + 61: uint16(34537), + 62: uint16(34540), + 63: uint16(34527), + 64: uint16(34523), + 65: uint16(34543), + 66: uint16(34578), + 67: uint16(34566), + 68: uint16(34568), + 69: uint16(34560), + 70: uint16(34563), + 71: uint16(34555), + 72: uint16(34577), + 73: uint16(34569), + 74: uint16(34573), + 75: uint16(34553), + 76: uint16(34570), + 77: uint16(34612), + 78: uint16(34623), + 79: uint16(34615), + 80: uint16(34619), + 81: uint16(34597), + 82: uint16(34601), + 83: uint16(34586), + 84: uint16(34656), + 85: uint16(34655), + 86: uint16(34680), + 87: uint16(34636), + 88: uint16(34638), + 89: uint16(34676), + 90: uint16(34647), + 91: uint16(34664), + 92: uint16(34670), + 93: uint16(34649), + }, + 73: { + 0: uint16(34643), + 1: uint16(34659), + 2: uint16(34666), + 3: uint16(34821), + 4: uint16(34722), + 5: uint16(34719), + 6: uint16(34690), + 7: uint16(34735), + 8: uint16(34763), + 9: uint16(34749), + 10: uint16(34752), + 11: uint16(34768), + 12: uint16(38614), + 13: uint16(34731), + 14: uint16(34756), + 15: uint16(34739), + 16: uint16(34759), + 17: uint16(34758), + 18: uint16(34747), + 19: uint16(34799), + 20: uint16(34802), + 21: uint16(34784), + 22: uint16(34831), + 23: uint16(34829), + 24: uint16(34814), + 25: uint16(34806), + 26: uint16(34807), + 27: uint16(34830), + 28: uint16(34770), + 29: uint16(34833), + 30: uint16(34838), + 31: uint16(34837), + 32: uint16(34850), + 33: uint16(34849), + 34: uint16(34865), + 35: uint16(34870), + 36: uint16(34873), + 37: uint16(34855), + 38: uint16(34875), + 39: uint16(34884), + 40: uint16(34882), + 41: uint16(34898), + 42: uint16(34905), + 43: uint16(34910), + 44: uint16(34914), + 45: uint16(34923), + 46: uint16(34945), + 47: uint16(34942), + 48: uint16(34974), + 49: uint16(34933), + 50: uint16(34941), + 51: uint16(34997), + 52: uint16(34930), + 53: uint16(34946), + 54: uint16(34967), + 55: uint16(34962), + 56: uint16(34990), + 57: uint16(34969), + 58: uint16(34978), + 59: uint16(34957), + 60: uint16(34980), + 61: uint16(34992), + 62: uint16(35007), + 63: uint16(34993), + 64: uint16(35011), + 65: uint16(35012), + 66: uint16(35028), + 67: uint16(35032), + 68: uint16(35033), + 69: uint16(35037), + 70: uint16(35065), + 71: uint16(35074), + 72: uint16(35068), + 73: uint16(35060), + 74: uint16(35048), + 75: uint16(35058), + 76: uint16(35076), + 77: uint16(35084), + 78: uint16(35082), + 79: uint16(35091), + 80: uint16(35139), + 81: uint16(35102), + 82: uint16(35109), + 83: uint16(35114), + 84: uint16(35115), + 85: uint16(35137), + 86: uint16(35140), + 87: uint16(35131), + 88: uint16(35126), + 89: uint16(35128), + 90: uint16(35148), + 91: uint16(35101), + 92: uint16(35168), + 93: uint16(35166), + }, + 74: { + 0: uint16(35174), + 1: uint16(35172), + 2: uint16(35181), + 3: uint16(35178), + 4: uint16(35183), + 5: uint16(35188), + 6: uint16(35191), + 7: uint16(35198), + 8: uint16(35203), + 9: uint16(35208), + 10: uint16(35210), + 11: uint16(35219), + 12: uint16(35224), + 13: uint16(35233), + 14: uint16(35241), + 15: uint16(35238), + 16: uint16(35244), + 17: uint16(35247), + 18: uint16(35250), + 19: uint16(35258), + 20: uint16(35261), + 21: uint16(35263), + 22: uint16(35264), + 23: uint16(35290), + 24: uint16(35292), + 25: uint16(35293), + 26: uint16(35303), + 27: uint16(35316), + 28: uint16(35320), + 29: uint16(35331), + 30: uint16(35350), + 31: uint16(35344), + 32: uint16(35340), + 33: uint16(35355), + 34: uint16(35357), + 35: uint16(35365), + 36: uint16(35382), + 37: uint16(35393), + 38: uint16(35419), + 39: uint16(35410), + 40: uint16(35398), + 41: uint16(35400), + 42: uint16(35452), + 43: uint16(35437), + 44: uint16(35436), + 45: uint16(35426), + 46: uint16(35461), + 47: uint16(35458), + 48: uint16(35460), + 49: uint16(35496), + 50: uint16(35489), + 51: uint16(35473), + 52: uint16(35493), + 53: uint16(35494), + 54: uint16(35482), + 55: uint16(35491), + 56: uint16(35524), + 57: uint16(35533), + 58: uint16(35522), + 59: uint16(35546), + 60: uint16(35563), + 61: uint16(35571), + 62: uint16(35559), + 63: uint16(35556), + 64: uint16(35569), + 65: uint16(35604), + 66: uint16(35552), + 67: uint16(35554), + 68: uint16(35575), + 69: uint16(35550), + 70: uint16(35547), + 71: uint16(35596), + 72: uint16(35591), + 73: uint16(35610), + 74: uint16(35553), + 75: uint16(35606), + 76: uint16(35600), + 77: uint16(35607), + 78: uint16(35616), + 79: uint16(35635), + 80: uint16(38827), + 81: uint16(35622), + 82: uint16(35627), + 83: uint16(35646), + 84: uint16(35624), + 85: uint16(35649), + 86: uint16(35660), + 87: uint16(35663), + 88: uint16(35662), + 89: uint16(35657), + 90: uint16(35670), + 91: uint16(35675), + 92: uint16(35674), + 93: uint16(35691), + }, + 75: { + 0: uint16(35679), + 1: uint16(35692), + 2: uint16(35695), + 3: uint16(35700), + 4: uint16(35709), + 5: uint16(35712), + 6: uint16(35724), + 7: uint16(35726), + 8: uint16(35730), + 9: uint16(35731), + 10: uint16(35734), + 11: uint16(35737), + 12: uint16(35738), + 13: uint16(35898), + 14: uint16(35905), + 15: uint16(35903), + 16: uint16(35912), + 17: uint16(35916), + 18: uint16(35918), + 19: uint16(35920), + 20: uint16(35925), + 21: uint16(35938), + 22: uint16(35948), + 23: uint16(35960), + 24: uint16(35962), + 25: uint16(35970), + 26: uint16(35977), + 27: uint16(35973), + 28: uint16(35978), + 29: uint16(35981), + 30: uint16(35982), + 31: uint16(35988), + 32: uint16(35964), + 33: uint16(35992), + 34: uint16(25117), + 35: uint16(36013), + 36: uint16(36010), + 37: uint16(36029), + 38: uint16(36018), + 39: uint16(36019), + 40: uint16(36014), + 41: uint16(36022), + 42: uint16(36040), + 43: uint16(36033), + 44: uint16(36068), + 45: uint16(36067), + 46: uint16(36058), + 47: uint16(36093), + 48: uint16(36090), + 49: uint16(36091), + 50: uint16(36100), + 51: uint16(36101), + 52: uint16(36106), + 53: uint16(36103), + 54: uint16(36111), + 55: uint16(36109), + 56: uint16(36112), + 57: uint16(40782), + 58: uint16(36115), + 59: uint16(36045), + 60: uint16(36116), + 61: uint16(36118), + 62: uint16(36199), + 63: uint16(36205), + 64: uint16(36209), + 65: uint16(36211), + 66: uint16(36225), + 67: uint16(36249), + 68: uint16(36290), + 69: uint16(36286), + 70: uint16(36282), + 71: uint16(36303), + 72: uint16(36314), + 73: uint16(36310), + 74: uint16(36300), + 75: uint16(36315), + 76: uint16(36299), + 77: uint16(36330), + 78: uint16(36331), + 79: uint16(36319), + 80: uint16(36323), + 81: uint16(36348), + 82: uint16(36360), + 83: uint16(36361), + 84: uint16(36351), + 85: uint16(36381), + 86: uint16(36382), + 87: uint16(36368), + 88: uint16(36383), + 89: uint16(36418), + 90: uint16(36405), + 91: uint16(36400), + 92: uint16(36404), + 93: uint16(36426), + }, + 76: { + 0: uint16(36423), + 1: uint16(36425), + 2: uint16(36428), + 3: uint16(36432), + 4: uint16(36424), + 5: uint16(36441), + 6: uint16(36452), + 7: uint16(36448), + 8: uint16(36394), + 9: uint16(36451), + 10: uint16(36437), + 11: uint16(36470), + 12: uint16(36466), + 13: uint16(36476), + 14: uint16(36481), + 15: uint16(36487), + 16: uint16(36485), + 17: uint16(36484), + 18: uint16(36491), + 19: uint16(36490), + 20: uint16(36499), + 21: uint16(36497), + 22: uint16(36500), + 23: uint16(36505), + 24: uint16(36522), + 25: uint16(36513), + 26: uint16(36524), + 27: uint16(36528), + 28: uint16(36550), + 29: uint16(36529), + 30: uint16(36542), + 31: uint16(36549), + 32: uint16(36552), + 33: uint16(36555), + 34: uint16(36571), + 35: uint16(36579), + 36: uint16(36604), + 37: uint16(36603), + 38: uint16(36587), + 39: uint16(36606), + 40: uint16(36618), + 41: uint16(36613), + 42: uint16(36629), + 43: uint16(36626), + 44: uint16(36633), + 45: uint16(36627), + 46: uint16(36636), + 47: uint16(36639), + 48: uint16(36635), + 49: uint16(36620), + 50: uint16(36646), + 51: uint16(36659), + 52: uint16(36667), + 53: uint16(36665), + 54: uint16(36677), + 55: uint16(36674), + 56: uint16(36670), + 57: uint16(36684), + 58: uint16(36681), + 59: uint16(36678), + 60: uint16(36686), + 61: uint16(36695), + 62: uint16(36700), + 63: uint16(36706), + 64: uint16(36707), + 65: uint16(36708), + 66: uint16(36764), + 67: uint16(36767), + 68: uint16(36771), + 69: uint16(36781), + 70: uint16(36783), + 71: uint16(36791), + 72: uint16(36826), + 73: uint16(36837), + 74: uint16(36834), + 75: uint16(36842), + 76: uint16(36847), + 77: uint16(36999), + 78: uint16(36852), + 79: uint16(36869), + 80: uint16(36857), + 81: uint16(36858), + 82: uint16(36881), + 83: uint16(36885), + 84: uint16(36897), + 85: uint16(36877), + 86: uint16(36894), + 87: uint16(36886), + 88: uint16(36875), + 89: uint16(36903), + 90: uint16(36918), + 91: uint16(36917), + 92: uint16(36921), + 93: uint16(36856), + }, + 77: { + 0: uint16(36943), + 1: uint16(36944), + 2: uint16(36945), + 3: uint16(36946), + 4: uint16(36878), + 5: uint16(36937), + 6: uint16(36926), + 7: uint16(36950), + 8: uint16(36952), + 9: uint16(36958), + 10: uint16(36968), + 11: uint16(36975), + 12: uint16(36982), + 13: uint16(38568), + 14: uint16(36978), + 15: uint16(36994), + 16: uint16(36989), + 17: uint16(36993), + 18: uint16(36992), + 19: uint16(37002), + 20: uint16(37001), + 21: uint16(37007), + 22: uint16(37032), + 23: uint16(37039), + 24: uint16(37041), + 25: uint16(37045), + 26: uint16(37090), + 27: uint16(37092), + 28: uint16(25160), + 29: uint16(37083), + 30: uint16(37122), + 31: uint16(37138), + 32: uint16(37145), + 33: uint16(37170), + 34: uint16(37168), + 35: uint16(37194), + 36: uint16(37206), + 37: uint16(37208), + 38: uint16(37219), + 39: uint16(37221), + 40: uint16(37225), + 41: uint16(37235), + 42: uint16(37234), + 43: uint16(37259), + 44: uint16(37257), + 45: uint16(37250), + 46: uint16(37282), + 47: uint16(37291), + 48: uint16(37295), + 49: uint16(37290), + 50: uint16(37301), + 51: uint16(37300), + 52: uint16(37306), + 53: uint16(37312), + 54: uint16(37313), + 55: uint16(37321), + 56: uint16(37323), + 57: uint16(37328), + 58: uint16(37334), + 59: uint16(37343), + 60: uint16(37345), + 61: uint16(37339), + 62: uint16(37372), + 63: uint16(37365), + 64: uint16(37366), + 65: uint16(37406), + 66: uint16(37375), + 67: uint16(37396), + 68: uint16(37420), + 69: uint16(37397), + 70: uint16(37393), + 71: uint16(37470), + 72: uint16(37463), + 73: uint16(37445), + 74: uint16(37449), + 75: uint16(37476), + 76: uint16(37448), + 77: uint16(37525), + 78: uint16(37439), + 79: uint16(37451), + 80: uint16(37456), + 81: uint16(37532), + 82: uint16(37526), + 83: uint16(37523), + 84: uint16(37531), + 85: uint16(37466), + 86: uint16(37583), + 87: uint16(37561), + 88: uint16(37559), + 89: uint16(37609), + 90: uint16(37647), + 91: uint16(37626), + 92: uint16(37700), + 93: uint16(37678), + }, + 78: { + 0: uint16(37657), + 1: uint16(37666), + 2: uint16(37658), + 3: uint16(37667), + 4: uint16(37690), + 5: uint16(37685), + 6: uint16(37691), + 7: uint16(37724), + 8: uint16(37728), + 9: uint16(37756), + 10: uint16(37742), + 11: uint16(37718), + 12: uint16(37808), + 13: uint16(37804), + 14: uint16(37805), + 15: uint16(37780), + 16: uint16(37817), + 17: uint16(37846), + 18: uint16(37847), + 19: uint16(37864), + 20: uint16(37861), + 21: uint16(37848), + 22: uint16(37827), + 23: uint16(37853), + 24: uint16(37840), + 25: uint16(37832), + 26: uint16(37860), + 27: uint16(37914), + 28: uint16(37908), + 29: uint16(37907), + 30: uint16(37891), + 31: uint16(37895), + 32: uint16(37904), + 33: uint16(37942), + 34: uint16(37931), + 35: uint16(37941), + 36: uint16(37921), + 37: uint16(37946), + 38: uint16(37953), + 39: uint16(37970), + 40: uint16(37956), + 41: uint16(37979), + 42: uint16(37984), + 43: uint16(37986), + 44: uint16(37982), + 45: uint16(37994), + 46: uint16(37417), + 47: uint16(38000), + 48: uint16(38005), + 49: uint16(38007), + 50: uint16(38013), + 51: uint16(37978), + 52: uint16(38012), + 53: uint16(38014), + 54: uint16(38017), + 55: uint16(38015), + 56: uint16(38274), + 57: uint16(38279), + 58: uint16(38282), + 59: uint16(38292), + 60: uint16(38294), + 61: uint16(38296), + 62: uint16(38297), + 63: uint16(38304), + 64: uint16(38312), + 65: uint16(38311), + 66: uint16(38317), + 67: uint16(38332), + 68: uint16(38331), + 69: uint16(38329), + 70: uint16(38334), + 71: uint16(38346), + 72: uint16(28662), + 73: uint16(38339), + 74: uint16(38349), + 75: uint16(38348), + 76: uint16(38357), + 77: uint16(38356), + 78: uint16(38358), + 79: uint16(38364), + 80: uint16(38369), + 81: uint16(38373), + 82: uint16(38370), + 83: uint16(38433), + 84: uint16(38440), + 85: uint16(38446), + 86: uint16(38447), + 87: uint16(38466), + 88: uint16(38476), + 89: uint16(38479), + 90: uint16(38475), + 91: uint16(38519), + 92: uint16(38492), + 93: uint16(38494), + }, + 79: { + 0: uint16(38493), + 1: uint16(38495), + 2: uint16(38502), + 3: uint16(38514), + 4: uint16(38508), + 5: uint16(38541), + 6: uint16(38552), + 7: uint16(38549), + 8: uint16(38551), + 9: uint16(38570), + 10: uint16(38567), + 11: uint16(38577), + 12: uint16(38578), + 13: uint16(38576), + 14: uint16(38580), + 15: uint16(38582), + 16: uint16(38584), + 17: uint16(38585), + 18: uint16(38606), + 19: uint16(38603), + 20: uint16(38601), + 21: uint16(38605), + 22: uint16(35149), + 23: uint16(38620), + 24: uint16(38669), + 25: uint16(38613), + 26: uint16(38649), + 27: uint16(38660), + 28: uint16(38662), + 29: uint16(38664), + 30: uint16(38675), + 31: uint16(38670), + 32: uint16(38673), + 33: uint16(38671), + 34: uint16(38678), + 35: uint16(38681), + 36: uint16(38692), + 37: uint16(38698), + 38: uint16(38704), + 39: uint16(38713), + 40: uint16(38717), + 41: uint16(38718), + 42: uint16(38724), + 43: uint16(38726), + 44: uint16(38728), + 45: uint16(38722), + 46: uint16(38729), + 47: uint16(38748), + 48: uint16(38752), + 49: uint16(38756), + 50: uint16(38758), + 51: uint16(38760), + 52: uint16(21202), + 53: uint16(38763), + 54: uint16(38769), + 55: uint16(38777), + 56: uint16(38789), + 57: uint16(38780), + 58: uint16(38785), + 59: uint16(38778), + 60: uint16(38790), + 61: uint16(38795), + 62: uint16(38799), + 63: uint16(38800), + 64: uint16(38812), + 65: uint16(38824), + 66: uint16(38822), + 67: uint16(38819), + 68: uint16(38835), + 69: uint16(38836), + 70: uint16(38851), + 71: uint16(38854), + 72: uint16(38856), + 73: uint16(38859), + 74: uint16(38876), + 75: uint16(38893), + 76: uint16(40783), + 77: uint16(38898), + 78: uint16(31455), + 79: uint16(38902), + 80: uint16(38901), + 81: uint16(38927), + 82: uint16(38924), + 83: uint16(38968), + 84: uint16(38948), + 85: uint16(38945), + 86: uint16(38967), + 87: uint16(38973), + 88: uint16(38982), + 89: uint16(38991), + 90: uint16(38987), + 91: uint16(39019), + 92: uint16(39023), + 93: uint16(39024), + }, + 80: { + 0: uint16(39025), + 1: uint16(39028), + 2: uint16(39027), + 3: uint16(39082), + 4: uint16(39087), + 5: uint16(39089), + 6: uint16(39094), + 7: uint16(39108), + 8: uint16(39107), + 9: uint16(39110), + 10: uint16(39145), + 11: uint16(39147), + 12: uint16(39171), + 13: uint16(39177), + 14: uint16(39186), + 15: uint16(39188), + 16: uint16(39192), + 17: uint16(39201), + 18: uint16(39197), + 19: uint16(39198), + 20: uint16(39204), + 21: uint16(39200), + 22: uint16(39212), + 23: uint16(39214), + 24: uint16(39229), + 25: uint16(39230), + 26: uint16(39234), + 27: uint16(39241), + 28: uint16(39237), + 29: uint16(39248), + 30: uint16(39243), + 31: uint16(39249), + 32: uint16(39250), + 33: uint16(39244), + 34: uint16(39253), + 35: uint16(39319), + 36: uint16(39320), + 37: uint16(39333), + 38: uint16(39341), + 39: uint16(39342), + 40: uint16(39356), + 41: uint16(39391), + 42: uint16(39387), + 43: uint16(39389), + 44: uint16(39384), + 45: uint16(39377), + 46: uint16(39405), + 47: uint16(39406), + 48: uint16(39409), + 49: uint16(39410), + 50: uint16(39419), + 51: uint16(39416), + 52: uint16(39425), + 53: uint16(39439), + 54: uint16(39429), + 55: uint16(39394), + 56: uint16(39449), + 57: uint16(39467), + 58: uint16(39479), + 59: uint16(39493), + 60: uint16(39490), + 61: uint16(39488), + 62: uint16(39491), + 63: uint16(39486), + 64: uint16(39509), + 65: uint16(39501), + 66: uint16(39515), + 67: uint16(39511), + 68: uint16(39519), + 69: uint16(39522), + 70: uint16(39525), + 71: uint16(39524), + 72: uint16(39529), + 73: uint16(39531), + 74: uint16(39530), + 75: uint16(39597), + 76: uint16(39600), + 77: uint16(39612), + 78: uint16(39616), + 79: uint16(39631), + 80: uint16(39633), + 81: uint16(39635), + 82: uint16(39636), + 83: uint16(39646), + 84: uint16(39647), + 85: uint16(39650), + 86: uint16(39651), + 87: uint16(39654), + 88: uint16(39663), + 89: uint16(39659), + 90: uint16(39662), + 91: uint16(39668), + 92: uint16(39665), + 93: uint16(39671), + }, + 81: { + 0: uint16(39675), + 1: uint16(39686), + 2: uint16(39704), + 3: uint16(39706), + 4: uint16(39711), + 5: uint16(39714), + 6: uint16(39715), + 7: uint16(39717), + 8: uint16(39719), + 9: uint16(39720), + 10: uint16(39721), + 11: uint16(39722), + 12: uint16(39726), + 13: uint16(39727), + 14: uint16(39730), + 15: uint16(39748), + 16: uint16(39747), + 17: uint16(39759), + 18: uint16(39757), + 19: uint16(39758), + 20: uint16(39761), + 21: uint16(39768), + 22: uint16(39796), + 23: uint16(39827), + 24: uint16(39811), + 25: uint16(39825), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39839), + 29: uint16(39840), + 30: uint16(39848), + 31: uint16(39860), + 32: uint16(39872), + 33: uint16(39882), + 34: uint16(39865), + 35: uint16(39878), + 36: uint16(39887), + 37: uint16(39889), + 38: uint16(39890), + 39: uint16(39907), + 40: uint16(39906), + 41: uint16(39908), + 42: uint16(39892), + 43: uint16(39905), + 44: uint16(39994), + 45: uint16(39922), + 46: uint16(39921), + 47: uint16(39920), + 48: uint16(39957), + 49: uint16(39956), + 50: uint16(39945), + 51: uint16(39955), + 52: uint16(39948), + 53: uint16(39942), + 54: uint16(39944), + 55: uint16(39954), + 56: uint16(39946), + 57: uint16(39940), + 58: uint16(39982), + 59: uint16(39963), + 60: uint16(39973), + 61: uint16(39972), + 62: uint16(39969), + 63: uint16(39984), + 64: uint16(40007), + 65: uint16(39986), + 66: uint16(40006), + 67: uint16(39998), + 68: uint16(40026), + 69: uint16(40032), + 70: uint16(40039), + 71: uint16(40054), + 72: uint16(40056), + 73: uint16(40167), + 74: uint16(40172), + 75: uint16(40176), + 76: uint16(40201), + 77: uint16(40200), + 78: uint16(40171), + 79: uint16(40195), + 80: uint16(40198), + 81: uint16(40234), + 82: uint16(40230), + 83: uint16(40367), + 84: uint16(40227), + 85: uint16(40223), + 86: uint16(40260), + 87: uint16(40213), + 88: uint16(40210), + 89: uint16(40257), + 90: uint16(40255), + 91: uint16(40254), + 92: uint16(40262), + 93: uint16(40264), + }, + 82: { + 0: uint16(40285), + 1: uint16(40286), + 2: uint16(40292), + 3: uint16(40273), + 4: uint16(40272), + 5: uint16(40281), + 6: uint16(40306), + 7: uint16(40329), + 8: uint16(40327), + 9: uint16(40363), + 10: uint16(40303), + 11: uint16(40314), + 12: uint16(40346), + 13: uint16(40356), + 14: uint16(40361), + 15: uint16(40370), + 16: uint16(40388), + 17: uint16(40385), + 18: uint16(40379), + 19: uint16(40376), + 20: uint16(40378), + 21: uint16(40390), + 22: uint16(40399), + 23: uint16(40386), + 24: uint16(40409), + 25: uint16(40403), + 26: uint16(40440), + 27: uint16(40422), + 28: uint16(40429), + 29: uint16(40431), + 30: uint16(40445), + 31: uint16(40474), + 32: uint16(40475), + 33: uint16(40478), + 34: uint16(40565), + 35: uint16(40569), + 36: uint16(40573), + 37: uint16(40577), + 38: uint16(40584), + 39: uint16(40587), + 40: uint16(40588), + 41: uint16(40594), + 42: uint16(40597), + 43: uint16(40593), + 44: uint16(40605), + 45: uint16(40613), + 46: uint16(40617), + 47: uint16(40632), + 48: uint16(40618), + 49: uint16(40621), + 50: uint16(38753), + 51: uint16(40652), + 52: uint16(40654), + 53: uint16(40655), + 54: uint16(40656), + 55: uint16(40660), + 56: uint16(40668), + 57: uint16(40670), + 58: uint16(40669), + 59: uint16(40672), + 60: uint16(40677), + 61: uint16(40680), + 62: uint16(40687), + 63: uint16(40692), + 64: uint16(40694), + 65: uint16(40695), + 66: uint16(40697), + 67: uint16(40699), + 68: uint16(40700), + 69: uint16(40701), + 70: uint16(40711), + 71: uint16(40712), + 72: uint16(30391), + 73: uint16(40725), + 74: uint16(40737), + 75: uint16(40748), + 76: uint16(40766), + 77: uint16(40778), + 78: uint16(40786), + 79: uint16(40788), + 80: uint16(40803), + 81: uint16(40799), + 82: uint16(40800), + 83: uint16(40801), + 84: uint16(40806), + 85: uint16(40807), + 86: uint16(40812), + 87: uint16(40810), + 88: uint16(40823), + 89: uint16(40818), + 90: uint16(40822), + 91: uint16(40853), + 92: uint16(40860), + 93: uint16(40864), + }, + 83: { + 0: uint16(22575), + 1: uint16(27079), + 2: uint16(36953), + 3: uint16(29796), + 4: uint16(20956), + 5: uint16(29081), + }, +} + +var _gb18030 = [126][190]uint16{ + 0: { + 0: uint16(19970), + 1: uint16(19972), + 2: uint16(19973), + 3: uint16(19974), + 4: uint16(19983), + 5: uint16(19986), + 6: uint16(19991), + 7: uint16(19999), + 8: uint16(20000), + 9: uint16(20001), + 10: uint16(20003), + 11: uint16(20006), + 12: uint16(20009), + 13: uint16(20014), + 14: uint16(20015), + 15: uint16(20017), + 16: uint16(20019), + 17: uint16(20021), + 18: uint16(20023), + 19: uint16(20028), + 20: uint16(20032), + 21: uint16(20033), + 22: uint16(20034), + 23: uint16(20036), + 24: uint16(20038), + 25: uint16(20042), + 26: uint16(20049), + 27: uint16(20053), + 28: uint16(20055), + 29: uint16(20058), + 30: uint16(20059), + 31: uint16(20066), + 32: uint16(20067), + 33: uint16(20068), + 34: uint16(20069), + 35: uint16(20071), + 36: uint16(20072), + 37: uint16(20074), + 38: uint16(20075), + 39: uint16(20076), + 40: uint16(20077), + 41: uint16(20078), + 42: uint16(20079), + 43: uint16(20082), + 44: uint16(20084), + 45: uint16(20085), + 46: uint16(20086), + 47: uint16(20087), + 48: uint16(20088), + 49: uint16(20089), + 50: uint16(20090), + 51: uint16(20091), + 52: uint16(20092), + 53: uint16(20093), + 54: uint16(20095), + 55: uint16(20096), + 56: uint16(20097), + 57: uint16(20098), + 58: uint16(20099), + 59: uint16(20100), + 60: uint16(20101), + 61: uint16(20103), + 62: uint16(20106), + 63: uint16(20112), + 64: uint16(20118), + 65: uint16(20119), + 66: uint16(20121), + 67: uint16(20124), + 68: uint16(20125), + 69: uint16(20126), + 70: uint16(20131), + 71: uint16(20138), + 72: uint16(20143), + 73: uint16(20144), + 74: uint16(20145), + 75: uint16(20148), + 76: uint16(20150), + 77: uint16(20151), + 78: uint16(20152), + 79: uint16(20153), + 80: uint16(20156), + 81: uint16(20157), + 82: uint16(20158), + 83: uint16(20168), + 84: uint16(20172), + 85: uint16(20175), + 86: uint16(20176), + 87: uint16(20178), + 88: uint16(20186), + 89: uint16(20187), + 90: uint16(20188), + 91: uint16(20192), + 92: uint16(20194), + 93: uint16(20198), + 94: uint16(20199), + 95: uint16(20201), + 96: uint16(20205), + 97: uint16(20206), + 98: uint16(20207), + 99: uint16(20209), + 100: uint16(20212), + 101: uint16(20216), + 102: uint16(20217), + 103: uint16(20218), + 104: uint16(20220), + 105: uint16(20222), + 106: uint16(20224), + 107: uint16(20226), + 108: uint16(20227), + 109: uint16(20228), + 110: uint16(20229), + 111: uint16(20230), + 112: uint16(20231), + 113: uint16(20232), + 114: uint16(20235), + 115: uint16(20236), + 116: uint16(20242), + 117: uint16(20243), + 118: uint16(20244), + 119: uint16(20245), + 120: uint16(20246), + 121: uint16(20252), + 122: uint16(20253), + 123: uint16(20257), + 124: uint16(20259), + 125: uint16(20264), + 126: uint16(20265), + 127: uint16(20268), + 128: uint16(20269), + 129: uint16(20270), + 130: uint16(20273), + 131: uint16(20275), + 132: uint16(20277), + 133: uint16(20279), + 134: uint16(20281), + 135: uint16(20283), + 136: uint16(20286), + 137: uint16(20287), + 138: uint16(20288), + 139: uint16(20289), + 140: uint16(20290), + 141: uint16(20292), + 142: uint16(20293), + 143: uint16(20295), + 144: uint16(20296), + 145: uint16(20297), + 146: uint16(20298), + 147: uint16(20299), + 148: uint16(20300), + 149: uint16(20306), + 150: uint16(20308), + 151: uint16(20310), + 152: uint16(20321), + 153: uint16(20322), + 154: uint16(20326), + 155: uint16(20328), + 156: uint16(20330), + 157: uint16(20331), + 158: uint16(20333), + 159: uint16(20334), + 160: uint16(20337), + 161: uint16(20338), + 162: uint16(20341), + 163: uint16(20343), + 164: uint16(20344), + 165: uint16(20345), + 166: uint16(20346), + 167: uint16(20349), + 168: uint16(20352), + 169: uint16(20353), + 170: uint16(20354), + 171: uint16(20357), + 172: uint16(20358), + 173: uint16(20359), + 174: uint16(20362), + 175: uint16(20364), + 176: uint16(20366), + 177: uint16(20368), + 178: uint16(20370), + 179: uint16(20371), + 180: uint16(20373), + 181: uint16(20374), + 182: uint16(20376), + 183: uint16(20377), + 184: uint16(20378), + 185: uint16(20380), + 186: uint16(20382), + 187: uint16(20383), + 188: uint16(20385), + 189: uint16(20386), + }, + 1: { + 0: uint16(20388), + 1: uint16(20395), + 2: uint16(20397), + 3: uint16(20400), + 4: uint16(20401), + 5: uint16(20402), + 6: uint16(20403), + 7: uint16(20404), + 8: uint16(20406), + 9: uint16(20407), + 10: uint16(20408), + 11: uint16(20409), + 12: uint16(20410), + 13: uint16(20411), + 14: uint16(20412), + 15: uint16(20413), + 16: uint16(20414), + 17: uint16(20416), + 18: uint16(20417), + 19: uint16(20418), + 20: uint16(20422), + 21: uint16(20423), + 22: uint16(20424), + 23: uint16(20425), + 24: uint16(20427), + 25: uint16(20428), + 26: uint16(20429), + 27: uint16(20434), + 28: uint16(20435), + 29: uint16(20436), + 30: uint16(20437), + 31: uint16(20438), + 32: uint16(20441), + 33: uint16(20443), + 34: uint16(20448), + 35: uint16(20450), + 36: uint16(20452), + 37: uint16(20453), + 38: uint16(20455), + 39: uint16(20459), + 40: uint16(20460), + 41: uint16(20464), + 42: uint16(20466), + 43: uint16(20468), + 44: uint16(20469), + 45: uint16(20470), + 46: uint16(20471), + 47: uint16(20473), + 48: uint16(20475), + 49: uint16(20476), + 50: uint16(20477), + 51: uint16(20479), + 52: uint16(20480), + 53: uint16(20481), + 54: uint16(20482), + 55: uint16(20483), + 56: uint16(20484), + 57: uint16(20485), + 58: uint16(20486), + 59: uint16(20487), + 60: uint16(20488), + 61: uint16(20489), + 62: uint16(20490), + 63: uint16(20491), + 64: uint16(20494), + 65: uint16(20496), + 66: uint16(20497), + 67: uint16(20499), + 68: uint16(20501), + 69: uint16(20502), + 70: uint16(20503), + 71: uint16(20507), + 72: uint16(20509), + 73: uint16(20510), + 74: uint16(20512), + 75: uint16(20514), + 76: uint16(20515), + 77: uint16(20516), + 78: uint16(20519), + 79: uint16(20523), + 80: uint16(20527), + 81: uint16(20528), + 82: uint16(20529), + 83: uint16(20530), + 84: uint16(20531), + 85: uint16(20532), + 86: uint16(20533), + 87: uint16(20534), + 88: uint16(20535), + 89: uint16(20536), + 90: uint16(20537), + 91: uint16(20539), + 92: uint16(20541), + 93: uint16(20543), + 94: uint16(20544), + 95: uint16(20545), + 96: uint16(20546), + 97: uint16(20548), + 98: uint16(20549), + 99: uint16(20550), + 100: uint16(20553), + 101: uint16(20554), + 102: uint16(20555), + 103: uint16(20557), + 104: uint16(20560), + 105: uint16(20561), + 106: uint16(20562), + 107: uint16(20563), + 108: uint16(20564), + 109: uint16(20566), + 110: uint16(20567), + 111: uint16(20568), + 112: uint16(20569), + 113: uint16(20571), + 114: uint16(20573), + 115: uint16(20574), + 116: uint16(20575), + 117: uint16(20576), + 118: uint16(20577), + 119: uint16(20578), + 120: uint16(20579), + 121: uint16(20580), + 122: uint16(20582), + 123: uint16(20583), + 124: uint16(20584), + 125: uint16(20585), + 126: uint16(20586), + 127: uint16(20587), + 128: uint16(20589), + 129: uint16(20590), + 130: uint16(20591), + 131: uint16(20592), + 132: uint16(20593), + 133: uint16(20594), + 134: uint16(20595), + 135: uint16(20596), + 136: uint16(20597), + 137: uint16(20600), + 138: uint16(20601), + 139: uint16(20602), + 140: uint16(20604), + 141: uint16(20605), + 142: uint16(20609), + 143: uint16(20610), + 144: uint16(20611), + 145: uint16(20612), + 146: uint16(20614), + 147: uint16(20615), + 148: uint16(20617), + 149: uint16(20618), + 150: uint16(20619), + 151: uint16(20620), + 152: uint16(20622), + 153: uint16(20623), + 154: uint16(20624), + 155: uint16(20625), + 156: uint16(20626), + 157: uint16(20627), + 158: uint16(20628), + 159: uint16(20629), + 160: uint16(20630), + 161: uint16(20631), + 162: uint16(20632), + 163: uint16(20633), + 164: uint16(20634), + 165: uint16(20635), + 166: uint16(20636), + 167: uint16(20637), + 168: uint16(20638), + 169: uint16(20639), + 170: uint16(20640), + 171: uint16(20641), + 172: uint16(20642), + 173: uint16(20644), + 174: uint16(20646), + 175: uint16(20650), + 176: uint16(20651), + 177: uint16(20653), + 178: uint16(20654), + 179: uint16(20655), + 180: uint16(20656), + 181: uint16(20657), + 182: uint16(20659), + 183: uint16(20660), + 184: uint16(20661), + 185: uint16(20662), + 186: uint16(20663), + 187: uint16(20664), + 188: uint16(20665), + 189: uint16(20668), + }, + 2: { + 0: uint16(20669), + 1: uint16(20670), + 2: uint16(20671), + 3: uint16(20672), + 4: uint16(20673), + 5: uint16(20674), + 6: uint16(20675), + 7: uint16(20676), + 8: uint16(20677), + 9: uint16(20678), + 10: uint16(20679), + 11: uint16(20680), + 12: uint16(20681), + 13: uint16(20682), + 14: uint16(20683), + 15: uint16(20684), + 16: uint16(20685), + 17: uint16(20686), + 18: uint16(20688), + 19: uint16(20689), + 20: uint16(20690), + 21: uint16(20691), + 22: uint16(20692), + 23: uint16(20693), + 24: uint16(20695), + 25: uint16(20696), + 26: uint16(20697), + 27: uint16(20699), + 28: uint16(20700), + 29: uint16(20701), + 30: uint16(20702), + 31: uint16(20703), + 32: uint16(20704), + 33: uint16(20705), + 34: uint16(20706), + 35: uint16(20707), + 36: uint16(20708), + 37: uint16(20709), + 38: uint16(20712), + 39: uint16(20713), + 40: uint16(20714), + 41: uint16(20715), + 42: uint16(20719), + 43: uint16(20720), + 44: uint16(20721), + 45: uint16(20722), + 46: uint16(20724), + 47: uint16(20726), + 48: uint16(20727), + 49: uint16(20728), + 50: uint16(20729), + 51: uint16(20730), + 52: uint16(20732), + 53: uint16(20733), + 54: uint16(20734), + 55: uint16(20735), + 56: uint16(20736), + 57: uint16(20737), + 58: uint16(20738), + 59: uint16(20739), + 60: uint16(20740), + 61: uint16(20741), + 62: uint16(20744), + 63: uint16(20745), + 64: uint16(20746), + 65: uint16(20748), + 66: uint16(20749), + 67: uint16(20750), + 68: uint16(20751), + 69: uint16(20752), + 70: uint16(20753), + 71: uint16(20755), + 72: uint16(20756), + 73: uint16(20757), + 74: uint16(20758), + 75: uint16(20759), + 76: uint16(20760), + 77: uint16(20761), + 78: uint16(20762), + 79: uint16(20763), + 80: uint16(20764), + 81: uint16(20765), + 82: uint16(20766), + 83: uint16(20767), + 84: uint16(20768), + 85: uint16(20770), + 86: uint16(20771), + 87: uint16(20772), + 88: uint16(20773), + 89: uint16(20774), + 90: uint16(20775), + 91: uint16(20776), + 92: uint16(20777), + 93: uint16(20778), + 94: uint16(20779), + 95: uint16(20780), + 96: uint16(20781), + 97: uint16(20782), + 98: uint16(20783), + 99: uint16(20784), + 100: uint16(20785), + 101: uint16(20786), + 102: uint16(20787), + 103: uint16(20788), + 104: uint16(20789), + 105: uint16(20790), + 106: uint16(20791), + 107: uint16(20792), + 108: uint16(20793), + 109: uint16(20794), + 110: uint16(20795), + 111: uint16(20796), + 112: uint16(20797), + 113: uint16(20798), + 114: uint16(20802), + 115: uint16(20807), + 116: uint16(20810), + 117: uint16(20812), + 118: uint16(20814), + 119: uint16(20815), + 120: uint16(20816), + 121: uint16(20818), + 122: uint16(20819), + 123: uint16(20823), + 124: uint16(20824), + 125: uint16(20825), + 126: uint16(20827), + 127: uint16(20829), + 128: uint16(20830), + 129: uint16(20831), + 130: uint16(20832), + 131: uint16(20833), + 132: uint16(20835), + 133: uint16(20836), + 134: uint16(20838), + 135: uint16(20839), + 136: uint16(20841), + 137: uint16(20842), + 138: uint16(20847), + 139: uint16(20850), + 140: uint16(20858), + 141: uint16(20862), + 142: uint16(20863), + 143: uint16(20867), + 144: uint16(20868), + 145: uint16(20870), + 146: uint16(20871), + 147: uint16(20874), + 148: uint16(20875), + 149: uint16(20878), + 150: uint16(20879), + 151: uint16(20880), + 152: uint16(20881), + 153: uint16(20883), + 154: uint16(20884), + 155: uint16(20888), + 156: uint16(20890), + 157: uint16(20893), + 158: uint16(20894), + 159: uint16(20895), + 160: uint16(20897), + 161: uint16(20899), + 162: uint16(20902), + 163: uint16(20903), + 164: uint16(20904), + 165: uint16(20905), + 166: uint16(20906), + 167: uint16(20909), + 168: uint16(20910), + 169: uint16(20916), + 170: uint16(20920), + 171: uint16(20921), + 172: uint16(20922), + 173: uint16(20926), + 174: uint16(20927), + 175: uint16(20929), + 176: uint16(20930), + 177: uint16(20931), + 178: uint16(20933), + 179: uint16(20936), + 180: uint16(20938), + 181: uint16(20941), + 182: uint16(20942), + 183: uint16(20944), + 184: uint16(20946), + 185: uint16(20947), + 186: uint16(20948), + 187: uint16(20949), + 188: uint16(20950), + 189: uint16(20951), + }, + 3: { + 0: uint16(20952), + 1: uint16(20953), + 2: uint16(20954), + 3: uint16(20956), + 4: uint16(20958), + 5: uint16(20959), + 6: uint16(20962), + 7: uint16(20963), + 8: uint16(20965), + 9: uint16(20966), + 10: uint16(20967), + 11: uint16(20968), + 12: uint16(20969), + 13: uint16(20970), + 14: uint16(20972), + 15: uint16(20974), + 16: uint16(20977), + 17: uint16(20978), + 18: uint16(20980), + 19: uint16(20983), + 20: uint16(20990), + 21: uint16(20996), + 22: uint16(20997), + 23: uint16(21001), + 24: uint16(21003), + 25: uint16(21004), + 26: uint16(21007), + 27: uint16(21008), + 28: uint16(21011), + 29: uint16(21012), + 30: uint16(21013), + 31: uint16(21020), + 32: uint16(21022), + 33: uint16(21023), + 34: uint16(21025), + 35: uint16(21026), + 36: uint16(21027), + 37: uint16(21029), + 38: uint16(21030), + 39: uint16(21031), + 40: uint16(21034), + 41: uint16(21036), + 42: uint16(21039), + 43: uint16(21041), + 44: uint16(21042), + 45: uint16(21044), + 46: uint16(21045), + 47: uint16(21052), + 48: uint16(21054), + 49: uint16(21060), + 50: uint16(21061), + 51: uint16(21062), + 52: uint16(21063), + 53: uint16(21064), + 54: uint16(21065), + 55: uint16(21067), + 56: uint16(21070), + 57: uint16(21071), + 58: uint16(21074), + 59: uint16(21075), + 60: uint16(21077), + 61: uint16(21079), + 62: uint16(21080), + 63: uint16(21081), + 64: uint16(21082), + 65: uint16(21083), + 66: uint16(21085), + 67: uint16(21087), + 68: uint16(21088), + 69: uint16(21090), + 70: uint16(21091), + 71: uint16(21092), + 72: uint16(21094), + 73: uint16(21096), + 74: uint16(21099), + 75: uint16(21100), + 76: uint16(21101), + 77: uint16(21102), + 78: uint16(21104), + 79: uint16(21105), + 80: uint16(21107), + 81: uint16(21108), + 82: uint16(21109), + 83: uint16(21110), + 84: uint16(21111), + 85: uint16(21112), + 86: uint16(21113), + 87: uint16(21114), + 88: uint16(21115), + 89: uint16(21116), + 90: uint16(21118), + 91: uint16(21120), + 92: uint16(21123), + 93: uint16(21124), + 94: uint16(21125), + 95: uint16(21126), + 96: uint16(21127), + 97: uint16(21129), + 98: uint16(21130), + 99: uint16(21131), + 100: uint16(21132), + 101: uint16(21133), + 102: uint16(21134), + 103: uint16(21135), + 104: uint16(21137), + 105: uint16(21138), + 106: uint16(21140), + 107: uint16(21141), + 108: uint16(21142), + 109: uint16(21143), + 110: uint16(21144), + 111: uint16(21145), + 112: uint16(21146), + 113: uint16(21148), + 114: uint16(21156), + 115: uint16(21157), + 116: uint16(21158), + 117: uint16(21159), + 118: uint16(21166), + 119: uint16(21167), + 120: uint16(21168), + 121: uint16(21172), + 122: uint16(21173), + 123: uint16(21174), + 124: uint16(21175), + 125: uint16(21176), + 126: uint16(21177), + 127: uint16(21178), + 128: uint16(21179), + 129: uint16(21180), + 130: uint16(21181), + 131: uint16(21184), + 132: uint16(21185), + 133: uint16(21186), + 134: uint16(21188), + 135: uint16(21189), + 136: uint16(21190), + 137: uint16(21192), + 138: uint16(21194), + 139: uint16(21196), + 140: uint16(21197), + 141: uint16(21198), + 142: uint16(21199), + 143: uint16(21201), + 144: uint16(21203), + 145: uint16(21204), + 146: uint16(21205), + 147: uint16(21207), + 148: uint16(21209), + 149: uint16(21210), + 150: uint16(21211), + 151: uint16(21212), + 152: uint16(21213), + 153: uint16(21214), + 154: uint16(21216), + 155: uint16(21217), + 156: uint16(21218), + 157: uint16(21219), + 158: uint16(21221), + 159: uint16(21222), + 160: uint16(21223), + 161: uint16(21224), + 162: uint16(21225), + 163: uint16(21226), + 164: uint16(21227), + 165: uint16(21228), + 166: uint16(21229), + 167: uint16(21230), + 168: uint16(21231), + 169: uint16(21233), + 170: uint16(21234), + 171: uint16(21235), + 172: uint16(21236), + 173: uint16(21237), + 174: uint16(21238), + 175: uint16(21239), + 176: uint16(21240), + 177: uint16(21243), + 178: uint16(21244), + 179: uint16(21245), + 180: uint16(21249), + 181: uint16(21250), + 182: uint16(21251), + 183: uint16(21252), + 184: uint16(21255), + 185: uint16(21257), + 186: uint16(21258), + 187: uint16(21259), + 188: uint16(21260), + 189: uint16(21262), + }, + 4: { + 0: uint16(21265), + 1: uint16(21266), + 2: uint16(21267), + 3: uint16(21268), + 4: uint16(21272), + 5: uint16(21275), + 6: uint16(21276), + 7: uint16(21278), + 8: uint16(21279), + 9: uint16(21282), + 10: uint16(21284), + 11: uint16(21285), + 12: uint16(21287), + 13: uint16(21288), + 14: uint16(21289), + 15: uint16(21291), + 16: uint16(21292), + 17: uint16(21293), + 18: uint16(21295), + 19: uint16(21296), + 20: uint16(21297), + 21: uint16(21298), + 22: uint16(21299), + 23: uint16(21300), + 24: uint16(21301), + 25: uint16(21302), + 26: uint16(21303), + 27: uint16(21304), + 28: uint16(21308), + 29: uint16(21309), + 30: uint16(21312), + 31: uint16(21314), + 32: uint16(21316), + 33: uint16(21318), + 34: uint16(21323), + 35: uint16(21324), + 36: uint16(21325), + 37: uint16(21328), + 38: uint16(21332), + 39: uint16(21336), + 40: uint16(21337), + 41: uint16(21339), + 42: uint16(21341), + 43: uint16(21349), + 44: uint16(21352), + 45: uint16(21354), + 46: uint16(21356), + 47: uint16(21357), + 48: uint16(21362), + 49: uint16(21366), + 50: uint16(21369), + 51: uint16(21371), + 52: uint16(21372), + 53: uint16(21373), + 54: uint16(21374), + 55: uint16(21376), + 56: uint16(21377), + 57: uint16(21379), + 58: uint16(21383), + 59: uint16(21384), + 60: uint16(21386), + 61: uint16(21390), + 62: uint16(21391), + 63: uint16(21392), + 64: uint16(21393), + 65: uint16(21394), + 66: uint16(21395), + 67: uint16(21396), + 68: uint16(21398), + 69: uint16(21399), + 70: uint16(21401), + 71: uint16(21403), + 72: uint16(21404), + 73: uint16(21406), + 74: uint16(21408), + 75: uint16(21409), + 76: uint16(21412), + 77: uint16(21415), + 78: uint16(21418), + 79: uint16(21419), + 80: uint16(21420), + 81: uint16(21421), + 82: uint16(21423), + 83: uint16(21424), + 84: uint16(21425), + 85: uint16(21426), + 86: uint16(21427), + 87: uint16(21428), + 88: uint16(21429), + 89: uint16(21431), + 90: uint16(21432), + 91: uint16(21433), + 92: uint16(21434), + 93: uint16(21436), + 94: uint16(21437), + 95: uint16(21438), + 96: uint16(21440), + 97: uint16(21443), + 98: uint16(21444), + 99: uint16(21445), + 100: uint16(21446), + 101: uint16(21447), + 102: uint16(21454), + 103: uint16(21455), + 104: uint16(21456), + 105: uint16(21458), + 106: uint16(21459), + 107: uint16(21461), + 108: uint16(21466), + 109: uint16(21468), + 110: uint16(21469), + 111: uint16(21470), + 112: uint16(21473), + 113: uint16(21474), + 114: uint16(21479), + 115: uint16(21492), + 116: uint16(21498), + 117: uint16(21502), + 118: uint16(21503), + 119: uint16(21504), + 120: uint16(21506), + 121: uint16(21509), + 122: uint16(21511), + 123: uint16(21515), + 124: uint16(21524), + 125: uint16(21528), + 126: uint16(21529), + 127: uint16(21530), + 128: uint16(21532), + 129: uint16(21538), + 130: uint16(21540), + 131: uint16(21541), + 132: uint16(21546), + 133: uint16(21552), + 134: uint16(21555), + 135: uint16(21558), + 136: uint16(21559), + 137: uint16(21562), + 138: uint16(21565), + 139: uint16(21567), + 140: uint16(21569), + 141: uint16(21570), + 142: uint16(21572), + 143: uint16(21573), + 144: uint16(21575), + 145: uint16(21577), + 146: uint16(21580), + 147: uint16(21581), + 148: uint16(21582), + 149: uint16(21583), + 150: uint16(21585), + 151: uint16(21594), + 152: uint16(21597), + 153: uint16(21598), + 154: uint16(21599), + 155: uint16(21600), + 156: uint16(21601), + 157: uint16(21603), + 158: uint16(21605), + 159: uint16(21607), + 160: uint16(21609), + 161: uint16(21610), + 162: uint16(21611), + 163: uint16(21612), + 164: uint16(21613), + 165: uint16(21614), + 166: uint16(21615), + 167: uint16(21616), + 168: uint16(21620), + 169: uint16(21625), + 170: uint16(21626), + 171: uint16(21630), + 172: uint16(21631), + 173: uint16(21633), + 174: uint16(21635), + 175: uint16(21637), + 176: uint16(21639), + 177: uint16(21640), + 178: uint16(21641), + 179: uint16(21642), + 180: uint16(21645), + 181: uint16(21649), + 182: uint16(21651), + 183: uint16(21655), + 184: uint16(21656), + 185: uint16(21660), + 186: uint16(21662), + 187: uint16(21663), + 188: uint16(21664), + 189: uint16(21665), + }, + 5: { + 0: uint16(21666), + 1: uint16(21669), + 2: uint16(21678), + 3: uint16(21680), + 4: uint16(21682), + 5: uint16(21685), + 6: uint16(21686), + 7: uint16(21687), + 8: uint16(21689), + 9: uint16(21690), + 10: uint16(21692), + 11: uint16(21694), + 12: uint16(21699), + 13: uint16(21701), + 14: uint16(21706), + 15: uint16(21707), + 16: uint16(21718), + 17: uint16(21720), + 18: uint16(21723), + 19: uint16(21728), + 20: uint16(21729), + 21: uint16(21730), + 22: uint16(21731), + 23: uint16(21732), + 24: uint16(21739), + 25: uint16(21740), + 26: uint16(21743), + 27: uint16(21744), + 28: uint16(21745), + 29: uint16(21748), + 30: uint16(21749), + 31: uint16(21750), + 32: uint16(21751), + 33: uint16(21752), + 34: uint16(21753), + 35: uint16(21755), + 36: uint16(21758), + 37: uint16(21760), + 38: uint16(21762), + 39: uint16(21763), + 40: uint16(21764), + 41: uint16(21765), + 42: uint16(21768), + 43: uint16(21770), + 44: uint16(21771), + 45: uint16(21772), + 46: uint16(21773), + 47: uint16(21774), + 48: uint16(21778), + 49: uint16(21779), + 50: uint16(21781), + 51: uint16(21782), + 52: uint16(21783), + 53: uint16(21784), + 54: uint16(21785), + 55: uint16(21786), + 56: uint16(21788), + 57: uint16(21789), + 58: uint16(21790), + 59: uint16(21791), + 60: uint16(21793), + 61: uint16(21797), + 62: uint16(21798), + 63: uint16(21800), + 64: uint16(21801), + 65: uint16(21803), + 66: uint16(21805), + 67: uint16(21810), + 68: uint16(21812), + 69: uint16(21813), + 70: uint16(21814), + 71: uint16(21816), + 72: uint16(21817), + 73: uint16(21818), + 74: uint16(21819), + 75: uint16(21821), + 76: uint16(21824), + 77: uint16(21826), + 78: uint16(21829), + 79: uint16(21831), + 80: uint16(21832), + 81: uint16(21835), + 82: uint16(21836), + 83: uint16(21837), + 84: uint16(21838), + 85: uint16(21839), + 86: uint16(21841), + 87: uint16(21842), + 88: uint16(21843), + 89: uint16(21844), + 90: uint16(21847), + 91: uint16(21848), + 92: uint16(21849), + 93: uint16(21850), + 94: uint16(21851), + 95: uint16(21853), + 96: uint16(21854), + 97: uint16(21855), + 98: uint16(21856), + 99: uint16(21858), + 100: uint16(21859), + 101: uint16(21864), + 102: uint16(21865), + 103: uint16(21867), + 104: uint16(21871), + 105: uint16(21872), + 106: uint16(21873), + 107: uint16(21874), + 108: uint16(21875), + 109: uint16(21876), + 110: uint16(21881), + 111: uint16(21882), + 112: uint16(21885), + 113: uint16(21887), + 114: uint16(21893), + 115: uint16(21894), + 116: uint16(21900), + 117: uint16(21901), + 118: uint16(21902), + 119: uint16(21904), + 120: uint16(21906), + 121: uint16(21907), + 122: uint16(21909), + 123: uint16(21910), + 124: uint16(21911), + 125: uint16(21914), + 126: uint16(21915), + 127: uint16(21918), + 128: uint16(21920), + 129: uint16(21921), + 130: uint16(21922), + 131: uint16(21923), + 132: uint16(21924), + 133: uint16(21925), + 134: uint16(21926), + 135: uint16(21928), + 136: uint16(21929), + 137: uint16(21930), + 138: uint16(21931), + 139: uint16(21932), + 140: uint16(21933), + 141: uint16(21934), + 142: uint16(21935), + 143: uint16(21936), + 144: uint16(21938), + 145: uint16(21940), + 146: uint16(21942), + 147: uint16(21944), + 148: uint16(21946), + 149: uint16(21948), + 150: uint16(21951), + 151: uint16(21952), + 152: uint16(21953), + 153: uint16(21954), + 154: uint16(21955), + 155: uint16(21958), + 156: uint16(21959), + 157: uint16(21960), + 158: uint16(21962), + 159: uint16(21963), + 160: uint16(21966), + 161: uint16(21967), + 162: uint16(21968), + 163: uint16(21973), + 164: uint16(21975), + 165: uint16(21976), + 166: uint16(21977), + 167: uint16(21978), + 168: uint16(21979), + 169: uint16(21982), + 170: uint16(21984), + 171: uint16(21986), + 172: uint16(21991), + 173: uint16(21993), + 174: uint16(21997), + 175: uint16(21998), + 176: uint16(22000), + 177: uint16(22001), + 178: uint16(22004), + 179: uint16(22006), + 180: uint16(22008), + 181: uint16(22009), + 182: uint16(22010), + 183: uint16(22011), + 184: uint16(22012), + 185: uint16(22015), + 186: uint16(22018), + 187: uint16(22019), + 188: uint16(22020), + 189: uint16(22021), + }, + 6: { + 0: uint16(22022), + 1: uint16(22023), + 2: uint16(22026), + 3: uint16(22027), + 4: uint16(22029), + 5: uint16(22032), + 6: uint16(22033), + 7: uint16(22034), + 8: uint16(22035), + 9: uint16(22036), + 10: uint16(22037), + 11: uint16(22038), + 12: uint16(22039), + 13: uint16(22041), + 14: uint16(22042), + 15: uint16(22044), + 16: uint16(22045), + 17: uint16(22048), + 18: uint16(22049), + 19: uint16(22050), + 20: uint16(22053), + 21: uint16(22054), + 22: uint16(22056), + 23: uint16(22057), + 24: uint16(22058), + 25: uint16(22059), + 26: uint16(22062), + 27: uint16(22063), + 28: uint16(22064), + 29: uint16(22067), + 30: uint16(22069), + 31: uint16(22071), + 32: uint16(22072), + 33: uint16(22074), + 34: uint16(22076), + 35: uint16(22077), + 36: uint16(22078), + 37: uint16(22080), + 38: uint16(22081), + 39: uint16(22082), + 40: uint16(22083), + 41: uint16(22084), + 42: uint16(22085), + 43: uint16(22086), + 44: uint16(22087), + 45: uint16(22088), + 46: uint16(22089), + 47: uint16(22090), + 48: uint16(22091), + 49: uint16(22095), + 50: uint16(22096), + 51: uint16(22097), + 52: uint16(22098), + 53: uint16(22099), + 54: uint16(22101), + 55: uint16(22102), + 56: uint16(22106), + 57: uint16(22107), + 58: uint16(22109), + 59: uint16(22110), + 60: uint16(22111), + 61: uint16(22112), + 62: uint16(22113), + 63: uint16(22115), + 64: uint16(22117), + 65: uint16(22118), + 66: uint16(22119), + 67: uint16(22125), + 68: uint16(22126), + 69: uint16(22127), + 70: uint16(22128), + 71: uint16(22130), + 72: uint16(22131), + 73: uint16(22132), + 74: uint16(22133), + 75: uint16(22135), + 76: uint16(22136), + 77: uint16(22137), + 78: uint16(22138), + 79: uint16(22141), + 80: uint16(22142), + 81: uint16(22143), + 82: uint16(22144), + 83: uint16(22145), + 84: uint16(22146), + 85: uint16(22147), + 86: uint16(22148), + 87: uint16(22151), + 88: uint16(22152), + 89: uint16(22153), + 90: uint16(22154), + 91: uint16(22155), + 92: uint16(22156), + 93: uint16(22157), + 94: uint16(22160), + 95: uint16(22161), + 96: uint16(22162), + 97: uint16(22164), + 98: uint16(22165), + 99: uint16(22166), + 100: uint16(22167), + 101: uint16(22168), + 102: uint16(22169), + 103: uint16(22170), + 104: uint16(22171), + 105: uint16(22172), + 106: uint16(22173), + 107: uint16(22174), + 108: uint16(22175), + 109: uint16(22176), + 110: uint16(22177), + 111: uint16(22178), + 112: uint16(22180), + 113: uint16(22181), + 114: uint16(22182), + 115: uint16(22183), + 116: uint16(22184), + 117: uint16(22185), + 118: uint16(22186), + 119: uint16(22187), + 120: uint16(22188), + 121: uint16(22189), + 122: uint16(22190), + 123: uint16(22192), + 124: uint16(22193), + 125: uint16(22194), + 126: uint16(22195), + 127: uint16(22196), + 128: uint16(22197), + 129: uint16(22198), + 130: uint16(22200), + 131: uint16(22201), + 132: uint16(22202), + 133: uint16(22203), + 134: uint16(22205), + 135: uint16(22206), + 136: uint16(22207), + 137: uint16(22208), + 138: uint16(22209), + 139: uint16(22210), + 140: uint16(22211), + 141: uint16(22212), + 142: uint16(22213), + 143: uint16(22214), + 144: uint16(22215), + 145: uint16(22216), + 146: uint16(22217), + 147: uint16(22219), + 148: uint16(22220), + 149: uint16(22221), + 150: uint16(22222), + 151: uint16(22223), + 152: uint16(22224), + 153: uint16(22225), + 154: uint16(22226), + 155: uint16(22227), + 156: uint16(22229), + 157: uint16(22230), + 158: uint16(22232), + 159: uint16(22233), + 160: uint16(22236), + 161: uint16(22243), + 162: uint16(22245), + 163: uint16(22246), + 164: uint16(22247), + 165: uint16(22248), + 166: uint16(22249), + 167: uint16(22250), + 168: uint16(22252), + 169: uint16(22254), + 170: uint16(22255), + 171: uint16(22258), + 172: uint16(22259), + 173: uint16(22262), + 174: uint16(22263), + 175: uint16(22264), + 176: uint16(22267), + 177: uint16(22268), + 178: uint16(22272), + 179: uint16(22273), + 180: uint16(22274), + 181: uint16(22277), + 182: uint16(22279), + 183: uint16(22283), + 184: uint16(22284), + 185: uint16(22285), + 186: uint16(22286), + 187: uint16(22287), + 188: uint16(22288), + 189: uint16(22289), + }, + 7: { + 0: uint16(22290), + 1: uint16(22291), + 2: uint16(22292), + 3: uint16(22293), + 4: uint16(22294), + 5: uint16(22295), + 6: uint16(22296), + 7: uint16(22297), + 8: uint16(22298), + 9: uint16(22299), + 10: uint16(22301), + 11: uint16(22302), + 12: uint16(22304), + 13: uint16(22305), + 14: uint16(22306), + 15: uint16(22308), + 16: uint16(22309), + 17: uint16(22310), + 18: uint16(22311), + 19: uint16(22315), + 20: uint16(22321), + 21: uint16(22322), + 22: uint16(22324), + 23: uint16(22325), + 24: uint16(22326), + 25: uint16(22327), + 26: uint16(22328), + 27: uint16(22332), + 28: uint16(22333), + 29: uint16(22335), + 30: uint16(22337), + 31: uint16(22339), + 32: uint16(22340), + 33: uint16(22341), + 34: uint16(22342), + 35: uint16(22344), + 36: uint16(22345), + 37: uint16(22347), + 38: uint16(22354), + 39: uint16(22355), + 40: uint16(22356), + 41: uint16(22357), + 42: uint16(22358), + 43: uint16(22360), + 44: uint16(22361), + 45: uint16(22370), + 46: uint16(22371), + 47: uint16(22373), + 48: uint16(22375), + 49: uint16(22380), + 50: uint16(22382), + 51: uint16(22384), + 52: uint16(22385), + 53: uint16(22386), + 54: uint16(22388), + 55: uint16(22389), + 56: uint16(22392), + 57: uint16(22393), + 58: uint16(22394), + 59: uint16(22397), + 60: uint16(22398), + 61: uint16(22399), + 62: uint16(22400), + 63: uint16(22401), + 64: uint16(22407), + 65: uint16(22408), + 66: uint16(22409), + 67: uint16(22410), + 68: uint16(22413), + 69: uint16(22414), + 70: uint16(22415), + 71: uint16(22416), + 72: uint16(22417), + 73: uint16(22420), + 74: uint16(22421), + 75: uint16(22422), + 76: uint16(22423), + 77: uint16(22424), + 78: uint16(22425), + 79: uint16(22426), + 80: uint16(22428), + 81: uint16(22429), + 82: uint16(22430), + 83: uint16(22431), + 84: uint16(22437), + 85: uint16(22440), + 86: uint16(22442), + 87: uint16(22444), + 88: uint16(22447), + 89: uint16(22448), + 90: uint16(22449), + 91: uint16(22451), + 92: uint16(22453), + 93: uint16(22454), + 94: uint16(22455), + 95: uint16(22457), + 96: uint16(22458), + 97: uint16(22459), + 98: uint16(22460), + 99: uint16(22461), + 100: uint16(22462), + 101: uint16(22463), + 102: uint16(22464), + 103: uint16(22465), + 104: uint16(22468), + 105: uint16(22469), + 106: uint16(22470), + 107: uint16(22471), + 108: uint16(22472), + 109: uint16(22473), + 110: uint16(22474), + 111: uint16(22476), + 112: uint16(22477), + 113: uint16(22480), + 114: uint16(22481), + 115: uint16(22483), + 116: uint16(22486), + 117: uint16(22487), + 118: uint16(22491), + 119: uint16(22492), + 120: uint16(22494), + 121: uint16(22497), + 122: uint16(22498), + 123: uint16(22499), + 124: uint16(22501), + 125: uint16(22502), + 126: uint16(22503), + 127: uint16(22504), + 128: uint16(22505), + 129: uint16(22506), + 130: uint16(22507), + 131: uint16(22508), + 132: uint16(22510), + 133: uint16(22512), + 134: uint16(22513), + 135: uint16(22514), + 136: uint16(22515), + 137: uint16(22517), + 138: uint16(22518), + 139: uint16(22519), + 140: uint16(22523), + 141: uint16(22524), + 142: uint16(22526), + 143: uint16(22527), + 144: uint16(22529), + 145: uint16(22531), + 146: uint16(22532), + 147: uint16(22533), + 148: uint16(22536), + 149: uint16(22537), + 150: uint16(22538), + 151: uint16(22540), + 152: uint16(22542), + 153: uint16(22543), + 154: uint16(22544), + 155: uint16(22546), + 156: uint16(22547), + 157: uint16(22548), + 158: uint16(22550), + 159: uint16(22551), + 160: uint16(22552), + 161: uint16(22554), + 162: uint16(22555), + 163: uint16(22556), + 164: uint16(22557), + 165: uint16(22559), + 166: uint16(22562), + 167: uint16(22563), + 168: uint16(22565), + 169: uint16(22566), + 170: uint16(22567), + 171: uint16(22568), + 172: uint16(22569), + 173: uint16(22571), + 174: uint16(22572), + 175: uint16(22573), + 176: uint16(22574), + 177: uint16(22575), + 178: uint16(22577), + 179: uint16(22578), + 180: uint16(22579), + 181: uint16(22580), + 182: uint16(22582), + 183: uint16(22583), + 184: uint16(22584), + 185: uint16(22585), + 186: uint16(22586), + 187: uint16(22587), + 188: uint16(22588), + 189: uint16(22589), + }, + 8: { + 0: uint16(22590), + 1: uint16(22591), + 2: uint16(22592), + 3: uint16(22593), + 4: uint16(22594), + 5: uint16(22595), + 6: uint16(22597), + 7: uint16(22598), + 8: uint16(22599), + 9: uint16(22600), + 10: uint16(22601), + 11: uint16(22602), + 12: uint16(22603), + 13: uint16(22606), + 14: uint16(22607), + 15: uint16(22608), + 16: uint16(22610), + 17: uint16(22611), + 18: uint16(22613), + 19: uint16(22614), + 20: uint16(22615), + 21: uint16(22617), + 22: uint16(22618), + 23: uint16(22619), + 24: uint16(22620), + 25: uint16(22621), + 26: uint16(22623), + 27: uint16(22624), + 28: uint16(22625), + 29: uint16(22626), + 30: uint16(22627), + 31: uint16(22628), + 32: uint16(22630), + 33: uint16(22631), + 34: uint16(22632), + 35: uint16(22633), + 36: uint16(22634), + 37: uint16(22637), + 38: uint16(22638), + 39: uint16(22639), + 40: uint16(22640), + 41: uint16(22641), + 42: uint16(22642), + 43: uint16(22643), + 44: uint16(22644), + 45: uint16(22645), + 46: uint16(22646), + 47: uint16(22647), + 48: uint16(22648), + 49: uint16(22649), + 50: uint16(22650), + 51: uint16(22651), + 52: uint16(22652), + 53: uint16(22653), + 54: uint16(22655), + 55: uint16(22658), + 56: uint16(22660), + 57: uint16(22662), + 58: uint16(22663), + 59: uint16(22664), + 60: uint16(22666), + 61: uint16(22667), + 62: uint16(22668), + 63: uint16(22669), + 64: uint16(22670), + 65: uint16(22671), + 66: uint16(22672), + 67: uint16(22673), + 68: uint16(22676), + 69: uint16(22677), + 70: uint16(22678), + 71: uint16(22679), + 72: uint16(22680), + 73: uint16(22683), + 74: uint16(22684), + 75: uint16(22685), + 76: uint16(22688), + 77: uint16(22689), + 78: uint16(22690), + 79: uint16(22691), + 80: uint16(22692), + 81: uint16(22693), + 82: uint16(22694), + 83: uint16(22695), + 84: uint16(22698), + 85: uint16(22699), + 86: uint16(22700), + 87: uint16(22701), + 88: uint16(22702), + 89: uint16(22703), + 90: uint16(22704), + 91: uint16(22705), + 92: uint16(22706), + 93: uint16(22707), + 94: uint16(22708), + 95: uint16(22709), + 96: uint16(22710), + 97: uint16(22711), + 98: uint16(22712), + 99: uint16(22713), + 100: uint16(22714), + 101: uint16(22715), + 102: uint16(22717), + 103: uint16(22718), + 104: uint16(22719), + 105: uint16(22720), + 106: uint16(22722), + 107: uint16(22723), + 108: uint16(22724), + 109: uint16(22726), + 110: uint16(22727), + 111: uint16(22728), + 112: uint16(22729), + 113: uint16(22730), + 114: uint16(22731), + 115: uint16(22732), + 116: uint16(22733), + 117: uint16(22734), + 118: uint16(22735), + 119: uint16(22736), + 120: uint16(22738), + 121: uint16(22739), + 122: uint16(22740), + 123: uint16(22742), + 124: uint16(22743), + 125: uint16(22744), + 126: uint16(22745), + 127: uint16(22746), + 128: uint16(22747), + 129: uint16(22748), + 130: uint16(22749), + 131: uint16(22750), + 132: uint16(22751), + 133: uint16(22752), + 134: uint16(22753), + 135: uint16(22754), + 136: uint16(22755), + 137: uint16(22757), + 138: uint16(22758), + 139: uint16(22759), + 140: uint16(22760), + 141: uint16(22761), + 142: uint16(22762), + 143: uint16(22765), + 144: uint16(22767), + 145: uint16(22769), + 146: uint16(22770), + 147: uint16(22772), + 148: uint16(22773), + 149: uint16(22775), + 150: uint16(22776), + 151: uint16(22778), + 152: uint16(22779), + 153: uint16(22780), + 154: uint16(22781), + 155: uint16(22782), + 156: uint16(22783), + 157: uint16(22784), + 158: uint16(22785), + 159: uint16(22787), + 160: uint16(22789), + 161: uint16(22790), + 162: uint16(22792), + 163: uint16(22793), + 164: uint16(22794), + 165: uint16(22795), + 166: uint16(22796), + 167: uint16(22798), + 168: uint16(22800), + 169: uint16(22801), + 170: uint16(22802), + 171: uint16(22803), + 172: uint16(22807), + 173: uint16(22808), + 174: uint16(22811), + 175: uint16(22813), + 176: uint16(22814), + 177: uint16(22816), + 178: uint16(22817), + 179: uint16(22818), + 180: uint16(22819), + 181: uint16(22822), + 182: uint16(22824), + 183: uint16(22828), + 184: uint16(22832), + 185: uint16(22834), + 186: uint16(22835), + 187: uint16(22837), + 188: uint16(22838), + 189: uint16(22843), + }, + 9: { + 0: uint16(22845), + 1: uint16(22846), + 2: uint16(22847), + 3: uint16(22848), + 4: uint16(22851), + 5: uint16(22853), + 6: uint16(22854), + 7: uint16(22858), + 8: uint16(22860), + 9: uint16(22861), + 10: uint16(22864), + 11: uint16(22866), + 12: uint16(22867), + 13: uint16(22873), + 14: uint16(22875), + 15: uint16(22876), + 16: uint16(22877), + 17: uint16(22878), + 18: uint16(22879), + 19: uint16(22881), + 20: uint16(22883), + 21: uint16(22884), + 22: uint16(22886), + 23: uint16(22887), + 24: uint16(22888), + 25: uint16(22889), + 26: uint16(22890), + 27: uint16(22891), + 28: uint16(22892), + 29: uint16(22893), + 30: uint16(22894), + 31: uint16(22895), + 32: uint16(22896), + 33: uint16(22897), + 34: uint16(22898), + 35: uint16(22901), + 36: uint16(22903), + 37: uint16(22906), + 38: uint16(22907), + 39: uint16(22908), + 40: uint16(22910), + 41: uint16(22911), + 42: uint16(22912), + 43: uint16(22917), + 44: uint16(22921), + 45: uint16(22923), + 46: uint16(22924), + 47: uint16(22926), + 48: uint16(22927), + 49: uint16(22928), + 50: uint16(22929), + 51: uint16(22932), + 52: uint16(22933), + 53: uint16(22936), + 54: uint16(22938), + 55: uint16(22939), + 56: uint16(22940), + 57: uint16(22941), + 58: uint16(22943), + 59: uint16(22944), + 60: uint16(22945), + 61: uint16(22946), + 62: uint16(22950), + 63: uint16(22951), + 64: uint16(22956), + 65: uint16(22957), + 66: uint16(22960), + 67: uint16(22961), + 68: uint16(22963), + 69: uint16(22964), + 70: uint16(22965), + 71: uint16(22966), + 72: uint16(22967), + 73: uint16(22968), + 74: uint16(22970), + 75: uint16(22972), + 76: uint16(22973), + 77: uint16(22975), + 78: uint16(22976), + 79: uint16(22977), + 80: uint16(22978), + 81: uint16(22979), + 82: uint16(22980), + 83: uint16(22981), + 84: uint16(22983), + 85: uint16(22984), + 86: uint16(22985), + 87: uint16(22988), + 88: uint16(22989), + 89: uint16(22990), + 90: uint16(22991), + 91: uint16(22997), + 92: uint16(22998), + 93: uint16(23001), + 94: uint16(23003), + 95: uint16(23006), + 96: uint16(23007), + 97: uint16(23008), + 98: uint16(23009), + 99: uint16(23010), + 100: uint16(23012), + 101: uint16(23014), + 102: uint16(23015), + 103: uint16(23017), + 104: uint16(23018), + 105: uint16(23019), + 106: uint16(23021), + 107: uint16(23022), + 108: uint16(23023), + 109: uint16(23024), + 110: uint16(23025), + 111: uint16(23026), + 112: uint16(23027), + 113: uint16(23028), + 114: uint16(23029), + 115: uint16(23030), + 116: uint16(23031), + 117: uint16(23032), + 118: uint16(23034), + 119: uint16(23036), + 120: uint16(23037), + 121: uint16(23038), + 122: uint16(23040), + 123: uint16(23042), + 124: uint16(23050), + 125: uint16(23051), + 126: uint16(23053), + 127: uint16(23054), + 128: uint16(23055), + 129: uint16(23056), + 130: uint16(23058), + 131: uint16(23060), + 132: uint16(23061), + 133: uint16(23062), + 134: uint16(23063), + 135: uint16(23065), + 136: uint16(23066), + 137: uint16(23067), + 138: uint16(23069), + 139: uint16(23070), + 140: uint16(23073), + 141: uint16(23074), + 142: uint16(23076), + 143: uint16(23078), + 144: uint16(23079), + 145: uint16(23080), + 146: uint16(23082), + 147: uint16(23083), + 148: uint16(23084), + 149: uint16(23085), + 150: uint16(23086), + 151: uint16(23087), + 152: uint16(23088), + 153: uint16(23091), + 154: uint16(23093), + 155: uint16(23095), + 156: uint16(23096), + 157: uint16(23097), + 158: uint16(23098), + 159: uint16(23099), + 160: uint16(23101), + 161: uint16(23102), + 162: uint16(23103), + 163: uint16(23105), + 164: uint16(23106), + 165: uint16(23107), + 166: uint16(23108), + 167: uint16(23109), + 168: uint16(23111), + 169: uint16(23112), + 170: uint16(23115), + 171: uint16(23116), + 172: uint16(23117), + 173: uint16(23118), + 174: uint16(23119), + 175: uint16(23120), + 176: uint16(23121), + 177: uint16(23122), + 178: uint16(23123), + 179: uint16(23124), + 180: uint16(23126), + 181: uint16(23127), + 182: uint16(23128), + 183: uint16(23129), + 184: uint16(23131), + 185: uint16(23132), + 186: uint16(23133), + 187: uint16(23134), + 188: uint16(23135), + 189: uint16(23136), + }, + 10: { + 0: uint16(23137), + 1: uint16(23139), + 2: uint16(23140), + 3: uint16(23141), + 4: uint16(23142), + 5: uint16(23144), + 6: uint16(23145), + 7: uint16(23147), + 8: uint16(23148), + 9: uint16(23149), + 10: uint16(23150), + 11: uint16(23151), + 12: uint16(23152), + 13: uint16(23153), + 14: uint16(23154), + 15: uint16(23155), + 16: uint16(23160), + 17: uint16(23161), + 18: uint16(23163), + 19: uint16(23164), + 20: uint16(23165), + 21: uint16(23166), + 22: uint16(23168), + 23: uint16(23169), + 24: uint16(23170), + 25: uint16(23171), + 26: uint16(23172), + 27: uint16(23173), + 28: uint16(23174), + 29: uint16(23175), + 30: uint16(23176), + 31: uint16(23177), + 32: uint16(23178), + 33: uint16(23179), + 34: uint16(23180), + 35: uint16(23181), + 36: uint16(23182), + 37: uint16(23183), + 38: uint16(23184), + 39: uint16(23185), + 40: uint16(23187), + 41: uint16(23188), + 42: uint16(23189), + 43: uint16(23190), + 44: uint16(23191), + 45: uint16(23192), + 46: uint16(23193), + 47: uint16(23196), + 48: uint16(23197), + 49: uint16(23198), + 50: uint16(23199), + 51: uint16(23200), + 52: uint16(23201), + 53: uint16(23202), + 54: uint16(23203), + 55: uint16(23204), + 56: uint16(23205), + 57: uint16(23206), + 58: uint16(23207), + 59: uint16(23208), + 60: uint16(23209), + 61: uint16(23211), + 62: uint16(23212), + 63: uint16(23213), + 64: uint16(23214), + 65: uint16(23215), + 66: uint16(23216), + 67: uint16(23217), + 68: uint16(23220), + 69: uint16(23222), + 70: uint16(23223), + 71: uint16(23225), + 72: uint16(23226), + 73: uint16(23227), + 74: uint16(23228), + 75: uint16(23229), + 76: uint16(23231), + 77: uint16(23232), + 78: uint16(23235), + 79: uint16(23236), + 80: uint16(23237), + 81: uint16(23238), + 82: uint16(23239), + 83: uint16(23240), + 84: uint16(23242), + 85: uint16(23243), + 86: uint16(23245), + 87: uint16(23246), + 88: uint16(23247), + 89: uint16(23248), + 90: uint16(23249), + 91: uint16(23251), + 92: uint16(23253), + 93: uint16(23255), + 94: uint16(23257), + 95: uint16(23258), + 96: uint16(23259), + 97: uint16(23261), + 98: uint16(23262), + 99: uint16(23263), + 100: uint16(23266), + 101: uint16(23268), + 102: uint16(23269), + 103: uint16(23271), + 104: uint16(23272), + 105: uint16(23274), + 106: uint16(23276), + 107: uint16(23277), + 108: uint16(23278), + 109: uint16(23279), + 110: uint16(23280), + 111: uint16(23282), + 112: uint16(23283), + 113: uint16(23284), + 114: uint16(23285), + 115: uint16(23286), + 116: uint16(23287), + 117: uint16(23288), + 118: uint16(23289), + 119: uint16(23290), + 120: uint16(23291), + 121: uint16(23292), + 122: uint16(23293), + 123: uint16(23294), + 124: uint16(23295), + 125: uint16(23296), + 126: uint16(23297), + 127: uint16(23298), + 128: uint16(23299), + 129: uint16(23300), + 130: uint16(23301), + 131: uint16(23302), + 132: uint16(23303), + 133: uint16(23304), + 134: uint16(23306), + 135: uint16(23307), + 136: uint16(23308), + 137: uint16(23309), + 138: uint16(23310), + 139: uint16(23311), + 140: uint16(23312), + 141: uint16(23313), + 142: uint16(23314), + 143: uint16(23315), + 144: uint16(23316), + 145: uint16(23317), + 146: uint16(23320), + 147: uint16(23321), + 148: uint16(23322), + 149: uint16(23323), + 150: uint16(23324), + 151: uint16(23325), + 152: uint16(23326), + 153: uint16(23327), + 154: uint16(23328), + 155: uint16(23329), + 156: uint16(23330), + 157: uint16(23331), + 158: uint16(23332), + 159: uint16(23333), + 160: uint16(23334), + 161: uint16(23335), + 162: uint16(23336), + 163: uint16(23337), + 164: uint16(23338), + 165: uint16(23339), + 166: uint16(23340), + 167: uint16(23341), + 168: uint16(23342), + 169: uint16(23343), + 170: uint16(23344), + 171: uint16(23345), + 172: uint16(23347), + 173: uint16(23349), + 174: uint16(23350), + 175: uint16(23352), + 176: uint16(23353), + 177: uint16(23354), + 178: uint16(23355), + 179: uint16(23356), + 180: uint16(23357), + 181: uint16(23358), + 182: uint16(23359), + 183: uint16(23361), + 184: uint16(23362), + 185: uint16(23363), + 186: uint16(23364), + 187: uint16(23365), + 188: uint16(23366), + 189: uint16(23367), + }, + 11: { + 0: uint16(23368), + 1: uint16(23369), + 2: uint16(23370), + 3: uint16(23371), + 4: uint16(23372), + 5: uint16(23373), + 6: uint16(23374), + 7: uint16(23375), + 8: uint16(23378), + 9: uint16(23382), + 10: uint16(23390), + 11: uint16(23392), + 12: uint16(23393), + 13: uint16(23399), + 14: uint16(23400), + 15: uint16(23403), + 16: uint16(23405), + 17: uint16(23406), + 18: uint16(23407), + 19: uint16(23410), + 20: uint16(23412), + 21: uint16(23414), + 22: uint16(23415), + 23: uint16(23416), + 24: uint16(23417), + 25: uint16(23419), + 26: uint16(23420), + 27: uint16(23422), + 28: uint16(23423), + 29: uint16(23426), + 30: uint16(23430), + 31: uint16(23434), + 32: uint16(23437), + 33: uint16(23438), + 34: uint16(23440), + 35: uint16(23441), + 36: uint16(23442), + 37: uint16(23444), + 38: uint16(23446), + 39: uint16(23455), + 40: uint16(23463), + 41: uint16(23464), + 42: uint16(23465), + 43: uint16(23468), + 44: uint16(23469), + 45: uint16(23470), + 46: uint16(23471), + 47: uint16(23473), + 48: uint16(23474), + 49: uint16(23479), + 50: uint16(23482), + 51: uint16(23483), + 52: uint16(23484), + 53: uint16(23488), + 54: uint16(23489), + 55: uint16(23491), + 56: uint16(23496), + 57: uint16(23497), + 58: uint16(23498), + 59: uint16(23499), + 60: uint16(23501), + 61: uint16(23502), + 62: uint16(23503), + 63: uint16(23505), + 64: uint16(23508), + 65: uint16(23509), + 66: uint16(23510), + 67: uint16(23511), + 68: uint16(23512), + 69: uint16(23513), + 70: uint16(23514), + 71: uint16(23515), + 72: uint16(23516), + 73: uint16(23520), + 74: uint16(23522), + 75: uint16(23523), + 76: uint16(23526), + 77: uint16(23527), + 78: uint16(23529), + 79: uint16(23530), + 80: uint16(23531), + 81: uint16(23532), + 82: uint16(23533), + 83: uint16(23535), + 84: uint16(23537), + 85: uint16(23538), + 86: uint16(23539), + 87: uint16(23540), + 88: uint16(23541), + 89: uint16(23542), + 90: uint16(23543), + 91: uint16(23549), + 92: uint16(23550), + 93: uint16(23552), + 94: uint16(23554), + 95: uint16(23555), + 96: uint16(23557), + 97: uint16(23559), + 98: uint16(23560), + 99: uint16(23563), + 100: uint16(23564), + 101: uint16(23565), + 102: uint16(23566), + 103: uint16(23568), + 104: uint16(23570), + 105: uint16(23571), + 106: uint16(23575), + 107: uint16(23577), + 108: uint16(23579), + 109: uint16(23582), + 110: uint16(23583), + 111: uint16(23584), + 112: uint16(23585), + 113: uint16(23587), + 114: uint16(23590), + 115: uint16(23592), + 116: uint16(23593), + 117: uint16(23594), + 118: uint16(23595), + 119: uint16(23597), + 120: uint16(23598), + 121: uint16(23599), + 122: uint16(23600), + 123: uint16(23602), + 124: uint16(23603), + 125: uint16(23605), + 126: uint16(23606), + 127: uint16(23607), + 128: uint16(23619), + 129: uint16(23620), + 130: uint16(23622), + 131: uint16(23623), + 132: uint16(23628), + 133: uint16(23629), + 134: uint16(23634), + 135: uint16(23635), + 136: uint16(23636), + 137: uint16(23638), + 138: uint16(23639), + 139: uint16(23640), + 140: uint16(23642), + 141: uint16(23643), + 142: uint16(23644), + 143: uint16(23645), + 144: uint16(23647), + 145: uint16(23650), + 146: uint16(23652), + 147: uint16(23655), + 148: uint16(23656), + 149: uint16(23657), + 150: uint16(23658), + 151: uint16(23659), + 152: uint16(23660), + 153: uint16(23661), + 154: uint16(23664), + 155: uint16(23666), + 156: uint16(23667), + 157: uint16(23668), + 158: uint16(23669), + 159: uint16(23670), + 160: uint16(23671), + 161: uint16(23672), + 162: uint16(23675), + 163: uint16(23676), + 164: uint16(23677), + 165: uint16(23678), + 166: uint16(23680), + 167: uint16(23683), + 168: uint16(23684), + 169: uint16(23685), + 170: uint16(23686), + 171: uint16(23687), + 172: uint16(23689), + 173: uint16(23690), + 174: uint16(23691), + 175: uint16(23694), + 176: uint16(23695), + 177: uint16(23698), + 178: uint16(23699), + 179: uint16(23701), + 180: uint16(23709), + 181: uint16(23710), + 182: uint16(23711), + 183: uint16(23712), + 184: uint16(23713), + 185: uint16(23716), + 186: uint16(23717), + 187: uint16(23718), + 188: uint16(23719), + 189: uint16(23720), + }, + 12: { + 0: uint16(23722), + 1: uint16(23726), + 2: uint16(23727), + 3: uint16(23728), + 4: uint16(23730), + 5: uint16(23732), + 6: uint16(23734), + 7: uint16(23737), + 8: uint16(23738), + 9: uint16(23739), + 10: uint16(23740), + 11: uint16(23742), + 12: uint16(23744), + 13: uint16(23746), + 14: uint16(23747), + 15: uint16(23749), + 16: uint16(23750), + 17: uint16(23751), + 18: uint16(23752), + 19: uint16(23753), + 20: uint16(23754), + 21: uint16(23756), + 22: uint16(23757), + 23: uint16(23758), + 24: uint16(23759), + 25: uint16(23760), + 26: uint16(23761), + 27: uint16(23763), + 28: uint16(23764), + 29: uint16(23765), + 30: uint16(23766), + 31: uint16(23767), + 32: uint16(23768), + 33: uint16(23770), + 34: uint16(23771), + 35: uint16(23772), + 36: uint16(23773), + 37: uint16(23774), + 38: uint16(23775), + 39: uint16(23776), + 40: uint16(23778), + 41: uint16(23779), + 42: uint16(23783), + 43: uint16(23785), + 44: uint16(23787), + 45: uint16(23788), + 46: uint16(23790), + 47: uint16(23791), + 48: uint16(23793), + 49: uint16(23794), + 50: uint16(23795), + 51: uint16(23796), + 52: uint16(23797), + 53: uint16(23798), + 54: uint16(23799), + 55: uint16(23800), + 56: uint16(23801), + 57: uint16(23802), + 58: uint16(23804), + 59: uint16(23805), + 60: uint16(23806), + 61: uint16(23807), + 62: uint16(23808), + 63: uint16(23809), + 64: uint16(23812), + 65: uint16(23813), + 66: uint16(23816), + 67: uint16(23817), + 68: uint16(23818), + 69: uint16(23819), + 70: uint16(23820), + 71: uint16(23821), + 72: uint16(23823), + 73: uint16(23824), + 74: uint16(23825), + 75: uint16(23826), + 76: uint16(23827), + 77: uint16(23829), + 78: uint16(23831), + 79: uint16(23832), + 80: uint16(23833), + 81: uint16(23834), + 82: uint16(23836), + 83: uint16(23837), + 84: uint16(23839), + 85: uint16(23840), + 86: uint16(23841), + 87: uint16(23842), + 88: uint16(23843), + 89: uint16(23845), + 90: uint16(23848), + 91: uint16(23850), + 92: uint16(23851), + 93: uint16(23852), + 94: uint16(23855), + 95: uint16(23856), + 96: uint16(23857), + 97: uint16(23858), + 98: uint16(23859), + 99: uint16(23861), + 100: uint16(23862), + 101: uint16(23863), + 102: uint16(23864), + 103: uint16(23865), + 104: uint16(23866), + 105: uint16(23867), + 106: uint16(23868), + 107: uint16(23871), + 108: uint16(23872), + 109: uint16(23873), + 110: uint16(23874), + 111: uint16(23875), + 112: uint16(23876), + 113: uint16(23877), + 114: uint16(23878), + 115: uint16(23880), + 116: uint16(23881), + 117: uint16(23885), + 118: uint16(23886), + 119: uint16(23887), + 120: uint16(23888), + 121: uint16(23889), + 122: uint16(23890), + 123: uint16(23891), + 124: uint16(23892), + 125: uint16(23893), + 126: uint16(23894), + 127: uint16(23895), + 128: uint16(23897), + 129: uint16(23898), + 130: uint16(23900), + 131: uint16(23902), + 132: uint16(23903), + 133: uint16(23904), + 134: uint16(23905), + 135: uint16(23906), + 136: uint16(23907), + 137: uint16(23908), + 138: uint16(23909), + 139: uint16(23910), + 140: uint16(23911), + 141: uint16(23912), + 142: uint16(23914), + 143: uint16(23917), + 144: uint16(23918), + 145: uint16(23920), + 146: uint16(23921), + 147: uint16(23922), + 148: uint16(23923), + 149: uint16(23925), + 150: uint16(23926), + 151: uint16(23927), + 152: uint16(23928), + 153: uint16(23929), + 154: uint16(23930), + 155: uint16(23931), + 156: uint16(23932), + 157: uint16(23933), + 158: uint16(23934), + 159: uint16(23935), + 160: uint16(23936), + 161: uint16(23937), + 162: uint16(23939), + 163: uint16(23940), + 164: uint16(23941), + 165: uint16(23942), + 166: uint16(23943), + 167: uint16(23944), + 168: uint16(23945), + 169: uint16(23946), + 170: uint16(23947), + 171: uint16(23948), + 172: uint16(23949), + 173: uint16(23950), + 174: uint16(23951), + 175: uint16(23952), + 176: uint16(23953), + 177: uint16(23954), + 178: uint16(23955), + 179: uint16(23956), + 180: uint16(23957), + 181: uint16(23958), + 182: uint16(23959), + 183: uint16(23960), + 184: uint16(23962), + 185: uint16(23963), + 186: uint16(23964), + 187: uint16(23966), + 188: uint16(23967), + 189: uint16(23968), + }, + 13: { + 0: uint16(23969), + 1: uint16(23970), + 2: uint16(23971), + 3: uint16(23972), + 4: uint16(23973), + 5: uint16(23974), + 6: uint16(23975), + 7: uint16(23976), + 8: uint16(23977), + 9: uint16(23978), + 10: uint16(23979), + 11: uint16(23980), + 12: uint16(23981), + 13: uint16(23982), + 14: uint16(23983), + 15: uint16(23984), + 16: uint16(23985), + 17: uint16(23986), + 18: uint16(23987), + 19: uint16(23988), + 20: uint16(23989), + 21: uint16(23990), + 22: uint16(23992), + 23: uint16(23993), + 24: uint16(23994), + 25: uint16(23995), + 26: uint16(23996), + 27: uint16(23997), + 28: uint16(23998), + 29: uint16(23999), + 30: uint16(24000), + 31: uint16(24001), + 32: uint16(24002), + 33: uint16(24003), + 34: uint16(24004), + 35: uint16(24006), + 36: uint16(24007), + 37: uint16(24008), + 38: uint16(24009), + 39: uint16(24010), + 40: uint16(24011), + 41: uint16(24012), + 42: uint16(24014), + 43: uint16(24015), + 44: uint16(24016), + 45: uint16(24017), + 46: uint16(24018), + 47: uint16(24019), + 48: uint16(24020), + 49: uint16(24021), + 50: uint16(24022), + 51: uint16(24023), + 52: uint16(24024), + 53: uint16(24025), + 54: uint16(24026), + 55: uint16(24028), + 56: uint16(24031), + 57: uint16(24032), + 58: uint16(24035), + 59: uint16(24036), + 60: uint16(24042), + 61: uint16(24044), + 62: uint16(24045), + 63: uint16(24048), + 64: uint16(24053), + 65: uint16(24054), + 66: uint16(24056), + 67: uint16(24057), + 68: uint16(24058), + 69: uint16(24059), + 70: uint16(24060), + 71: uint16(24063), + 72: uint16(24064), + 73: uint16(24068), + 74: uint16(24071), + 75: uint16(24073), + 76: uint16(24074), + 77: uint16(24075), + 78: uint16(24077), + 79: uint16(24078), + 80: uint16(24082), + 81: uint16(24083), + 82: uint16(24087), + 83: uint16(24094), + 84: uint16(24095), + 85: uint16(24096), + 86: uint16(24097), + 87: uint16(24098), + 88: uint16(24099), + 89: uint16(24100), + 90: uint16(24101), + 91: uint16(24104), + 92: uint16(24105), + 93: uint16(24106), + 94: uint16(24107), + 95: uint16(24108), + 96: uint16(24111), + 97: uint16(24112), + 98: uint16(24114), + 99: uint16(24115), + 100: uint16(24116), + 101: uint16(24117), + 102: uint16(24118), + 103: uint16(24121), + 104: uint16(24122), + 105: uint16(24126), + 106: uint16(24127), + 107: uint16(24128), + 108: uint16(24129), + 109: uint16(24131), + 110: uint16(24134), + 111: uint16(24135), + 112: uint16(24136), + 113: uint16(24137), + 114: uint16(24138), + 115: uint16(24139), + 116: uint16(24141), + 117: uint16(24142), + 118: uint16(24143), + 119: uint16(24144), + 120: uint16(24145), + 121: uint16(24146), + 122: uint16(24147), + 123: uint16(24150), + 124: uint16(24151), + 125: uint16(24152), + 126: uint16(24153), + 127: uint16(24154), + 128: uint16(24156), + 129: uint16(24157), + 130: uint16(24159), + 131: uint16(24160), + 132: uint16(24163), + 133: uint16(24164), + 134: uint16(24165), + 135: uint16(24166), + 136: uint16(24167), + 137: uint16(24168), + 138: uint16(24169), + 139: uint16(24170), + 140: uint16(24171), + 141: uint16(24172), + 142: uint16(24173), + 143: uint16(24174), + 144: uint16(24175), + 145: uint16(24176), + 146: uint16(24177), + 147: uint16(24181), + 148: uint16(24183), + 149: uint16(24185), + 150: uint16(24190), + 151: uint16(24193), + 152: uint16(24194), + 153: uint16(24195), + 154: uint16(24197), + 155: uint16(24200), + 156: uint16(24201), + 157: uint16(24204), + 158: uint16(24205), + 159: uint16(24206), + 160: uint16(24210), + 161: uint16(24216), + 162: uint16(24219), + 163: uint16(24221), + 164: uint16(24225), + 165: uint16(24226), + 166: uint16(24227), + 167: uint16(24228), + 168: uint16(24232), + 169: uint16(24233), + 170: uint16(24234), + 171: uint16(24235), + 172: uint16(24236), + 173: uint16(24238), + 174: uint16(24239), + 175: uint16(24240), + 176: uint16(24241), + 177: uint16(24242), + 178: uint16(24244), + 179: uint16(24250), + 180: uint16(24251), + 181: uint16(24252), + 182: uint16(24253), + 183: uint16(24255), + 184: uint16(24256), + 185: uint16(24257), + 186: uint16(24258), + 187: uint16(24259), + 188: uint16(24260), + 189: uint16(24261), + }, + 14: { + 0: uint16(24262), + 1: uint16(24263), + 2: uint16(24264), + 3: uint16(24267), + 4: uint16(24268), + 5: uint16(24269), + 6: uint16(24270), + 7: uint16(24271), + 8: uint16(24272), + 9: uint16(24276), + 10: uint16(24277), + 11: uint16(24279), + 12: uint16(24280), + 13: uint16(24281), + 14: uint16(24282), + 15: uint16(24284), + 16: uint16(24285), + 17: uint16(24286), + 18: uint16(24287), + 19: uint16(24288), + 20: uint16(24289), + 21: uint16(24290), + 22: uint16(24291), + 23: uint16(24292), + 24: uint16(24293), + 25: uint16(24294), + 26: uint16(24295), + 27: uint16(24297), + 28: uint16(24299), + 29: uint16(24300), + 30: uint16(24301), + 31: uint16(24302), + 32: uint16(24303), + 33: uint16(24304), + 34: uint16(24305), + 35: uint16(24306), + 36: uint16(24307), + 37: uint16(24309), + 38: uint16(24312), + 39: uint16(24313), + 40: uint16(24315), + 41: uint16(24316), + 42: uint16(24317), + 43: uint16(24325), + 44: uint16(24326), + 45: uint16(24327), + 46: uint16(24329), + 47: uint16(24332), + 48: uint16(24333), + 49: uint16(24334), + 50: uint16(24336), + 51: uint16(24338), + 52: uint16(24340), + 53: uint16(24342), + 54: uint16(24345), + 55: uint16(24346), + 56: uint16(24348), + 57: uint16(24349), + 58: uint16(24350), + 59: uint16(24353), + 60: uint16(24354), + 61: uint16(24355), + 62: uint16(24356), + 63: uint16(24360), + 64: uint16(24363), + 65: uint16(24364), + 66: uint16(24366), + 67: uint16(24368), + 68: uint16(24370), + 69: uint16(24371), + 70: uint16(24372), + 71: uint16(24373), + 72: uint16(24374), + 73: uint16(24375), + 74: uint16(24376), + 75: uint16(24379), + 76: uint16(24381), + 77: uint16(24382), + 78: uint16(24383), + 79: uint16(24385), + 80: uint16(24386), + 81: uint16(24387), + 82: uint16(24388), + 83: uint16(24389), + 84: uint16(24390), + 85: uint16(24391), + 86: uint16(24392), + 87: uint16(24393), + 88: uint16(24394), + 89: uint16(24395), + 90: uint16(24396), + 91: uint16(24397), + 92: uint16(24398), + 93: uint16(24399), + 94: uint16(24401), + 95: uint16(24404), + 96: uint16(24409), + 97: uint16(24410), + 98: uint16(24411), + 99: uint16(24412), + 100: uint16(24414), + 101: uint16(24415), + 102: uint16(24416), + 103: uint16(24419), + 104: uint16(24421), + 105: uint16(24423), + 106: uint16(24424), + 107: uint16(24427), + 108: uint16(24430), + 109: uint16(24431), + 110: uint16(24434), + 111: uint16(24436), + 112: uint16(24437), + 113: uint16(24438), + 114: uint16(24440), + 115: uint16(24442), + 116: uint16(24445), + 117: uint16(24446), + 118: uint16(24447), + 119: uint16(24451), + 120: uint16(24454), + 121: uint16(24461), + 122: uint16(24462), + 123: uint16(24463), + 124: uint16(24465), + 125: uint16(24467), + 126: uint16(24468), + 127: uint16(24470), + 128: uint16(24474), + 129: uint16(24475), + 130: uint16(24477), + 131: uint16(24478), + 132: uint16(24479), + 133: uint16(24480), + 134: uint16(24482), + 135: uint16(24483), + 136: uint16(24484), + 137: uint16(24485), + 138: uint16(24486), + 139: uint16(24487), + 140: uint16(24489), + 141: uint16(24491), + 142: uint16(24492), + 143: uint16(24495), + 144: uint16(24496), + 145: uint16(24497), + 146: uint16(24498), + 147: uint16(24499), + 148: uint16(24500), + 149: uint16(24502), + 150: uint16(24504), + 151: uint16(24505), + 152: uint16(24506), + 153: uint16(24507), + 154: uint16(24510), + 155: uint16(24511), + 156: uint16(24512), + 157: uint16(24513), + 158: uint16(24514), + 159: uint16(24519), + 160: uint16(24520), + 161: uint16(24522), + 162: uint16(24523), + 163: uint16(24526), + 164: uint16(24531), + 165: uint16(24532), + 166: uint16(24533), + 167: uint16(24538), + 168: uint16(24539), + 169: uint16(24540), + 170: uint16(24542), + 171: uint16(24543), + 172: uint16(24546), + 173: uint16(24547), + 174: uint16(24549), + 175: uint16(24550), + 176: uint16(24552), + 177: uint16(24553), + 178: uint16(24556), + 179: uint16(24559), + 180: uint16(24560), + 181: uint16(24562), + 182: uint16(24563), + 183: uint16(24564), + 184: uint16(24566), + 185: uint16(24567), + 186: uint16(24569), + 187: uint16(24570), + 188: uint16(24572), + 189: uint16(24583), + }, + 15: { + 0: uint16(24584), + 1: uint16(24585), + 2: uint16(24587), + 3: uint16(24588), + 4: uint16(24592), + 5: uint16(24593), + 6: uint16(24595), + 7: uint16(24599), + 8: uint16(24600), + 9: uint16(24602), + 10: uint16(24606), + 11: uint16(24607), + 12: uint16(24610), + 13: uint16(24611), + 14: uint16(24612), + 15: uint16(24620), + 16: uint16(24621), + 17: uint16(24622), + 18: uint16(24624), + 19: uint16(24625), + 20: uint16(24626), + 21: uint16(24627), + 22: uint16(24628), + 23: uint16(24630), + 24: uint16(24631), + 25: uint16(24632), + 26: uint16(24633), + 27: uint16(24634), + 28: uint16(24637), + 29: uint16(24638), + 30: uint16(24640), + 31: uint16(24644), + 32: uint16(24645), + 33: uint16(24646), + 34: uint16(24647), + 35: uint16(24648), + 36: uint16(24649), + 37: uint16(24650), + 38: uint16(24652), + 39: uint16(24654), + 40: uint16(24655), + 41: uint16(24657), + 42: uint16(24659), + 43: uint16(24660), + 44: uint16(24662), + 45: uint16(24663), + 46: uint16(24664), + 47: uint16(24667), + 48: uint16(24668), + 49: uint16(24670), + 50: uint16(24671), + 51: uint16(24672), + 52: uint16(24673), + 53: uint16(24677), + 54: uint16(24678), + 55: uint16(24686), + 56: uint16(24689), + 57: uint16(24690), + 58: uint16(24692), + 59: uint16(24693), + 60: uint16(24695), + 61: uint16(24702), + 62: uint16(24704), + 63: uint16(24705), + 64: uint16(24706), + 65: uint16(24709), + 66: uint16(24710), + 67: uint16(24711), + 68: uint16(24712), + 69: uint16(24714), + 70: uint16(24715), + 71: uint16(24718), + 72: uint16(24719), + 73: uint16(24720), + 74: uint16(24721), + 75: uint16(24723), + 76: uint16(24725), + 77: uint16(24727), + 78: uint16(24728), + 79: uint16(24729), + 80: uint16(24732), + 81: uint16(24734), + 82: uint16(24737), + 83: uint16(24738), + 84: uint16(24740), + 85: uint16(24741), + 86: uint16(24743), + 87: uint16(24745), + 88: uint16(24746), + 89: uint16(24750), + 90: uint16(24752), + 91: uint16(24755), + 92: uint16(24757), + 93: uint16(24758), + 94: uint16(24759), + 95: uint16(24761), + 96: uint16(24762), + 97: uint16(24765), + 98: uint16(24766), + 99: uint16(24767), + 100: uint16(24768), + 101: uint16(24769), + 102: uint16(24770), + 103: uint16(24771), + 104: uint16(24772), + 105: uint16(24775), + 106: uint16(24776), + 107: uint16(24777), + 108: uint16(24780), + 109: uint16(24781), + 110: uint16(24782), + 111: uint16(24783), + 112: uint16(24784), + 113: uint16(24786), + 114: uint16(24787), + 115: uint16(24788), + 116: uint16(24790), + 117: uint16(24791), + 118: uint16(24793), + 119: uint16(24795), + 120: uint16(24798), + 121: uint16(24801), + 122: uint16(24802), + 123: uint16(24803), + 124: uint16(24804), + 125: uint16(24805), + 126: uint16(24810), + 127: uint16(24817), + 128: uint16(24818), + 129: uint16(24821), + 130: uint16(24823), + 131: uint16(24824), + 132: uint16(24827), + 133: uint16(24828), + 134: uint16(24829), + 135: uint16(24830), + 136: uint16(24831), + 137: uint16(24834), + 138: uint16(24835), + 139: uint16(24836), + 140: uint16(24837), + 141: uint16(24839), + 142: uint16(24842), + 143: uint16(24843), + 144: uint16(24844), + 145: uint16(24848), + 146: uint16(24849), + 147: uint16(24850), + 148: uint16(24851), + 149: uint16(24852), + 150: uint16(24854), + 151: uint16(24855), + 152: uint16(24856), + 153: uint16(24857), + 154: uint16(24859), + 155: uint16(24860), + 156: uint16(24861), + 157: uint16(24862), + 158: uint16(24865), + 159: uint16(24866), + 160: uint16(24869), + 161: uint16(24872), + 162: uint16(24873), + 163: uint16(24874), + 164: uint16(24876), + 165: uint16(24877), + 166: uint16(24878), + 167: uint16(24879), + 168: uint16(24880), + 169: uint16(24881), + 170: uint16(24882), + 171: uint16(24883), + 172: uint16(24884), + 173: uint16(24885), + 174: uint16(24886), + 175: uint16(24887), + 176: uint16(24888), + 177: uint16(24889), + 178: uint16(24890), + 179: uint16(24891), + 180: uint16(24892), + 181: uint16(24893), + 182: uint16(24894), + 183: uint16(24896), + 184: uint16(24897), + 185: uint16(24898), + 186: uint16(24899), + 187: uint16(24900), + 188: uint16(24901), + 189: uint16(24902), + }, + 16: { + 0: uint16(24903), + 1: uint16(24905), + 2: uint16(24907), + 3: uint16(24909), + 4: uint16(24911), + 5: uint16(24912), + 6: uint16(24914), + 7: uint16(24915), + 8: uint16(24916), + 9: uint16(24918), + 10: uint16(24919), + 11: uint16(24920), + 12: uint16(24921), + 13: uint16(24922), + 14: uint16(24923), + 15: uint16(24924), + 16: uint16(24926), + 17: uint16(24927), + 18: uint16(24928), + 19: uint16(24929), + 20: uint16(24931), + 21: uint16(24932), + 22: uint16(24933), + 23: uint16(24934), + 24: uint16(24937), + 25: uint16(24938), + 26: uint16(24939), + 27: uint16(24940), + 28: uint16(24941), + 29: uint16(24942), + 30: uint16(24943), + 31: uint16(24945), + 32: uint16(24946), + 33: uint16(24947), + 34: uint16(24948), + 35: uint16(24950), + 36: uint16(24952), + 37: uint16(24953), + 38: uint16(24954), + 39: uint16(24955), + 40: uint16(24956), + 41: uint16(24957), + 42: uint16(24958), + 43: uint16(24959), + 44: uint16(24960), + 45: uint16(24961), + 46: uint16(24962), + 47: uint16(24963), + 48: uint16(24964), + 49: uint16(24965), + 50: uint16(24966), + 51: uint16(24967), + 52: uint16(24968), + 53: uint16(24969), + 54: uint16(24970), + 55: uint16(24972), + 56: uint16(24973), + 57: uint16(24975), + 58: uint16(24976), + 59: uint16(24977), + 60: uint16(24978), + 61: uint16(24979), + 62: uint16(24981), + 63: uint16(24982), + 64: uint16(24983), + 65: uint16(24984), + 66: uint16(24985), + 67: uint16(24986), + 68: uint16(24987), + 69: uint16(24988), + 70: uint16(24990), + 71: uint16(24991), + 72: uint16(24992), + 73: uint16(24993), + 74: uint16(24994), + 75: uint16(24995), + 76: uint16(24996), + 77: uint16(24997), + 78: uint16(24998), + 79: uint16(25002), + 80: uint16(25003), + 81: uint16(25005), + 82: uint16(25006), + 83: uint16(25007), + 84: uint16(25008), + 85: uint16(25009), + 86: uint16(25010), + 87: uint16(25011), + 88: uint16(25012), + 89: uint16(25013), + 90: uint16(25014), + 91: uint16(25016), + 92: uint16(25017), + 93: uint16(25018), + 94: uint16(25019), + 95: uint16(25020), + 96: uint16(25021), + 97: uint16(25023), + 98: uint16(25024), + 99: uint16(25025), + 100: uint16(25027), + 101: uint16(25028), + 102: uint16(25029), + 103: uint16(25030), + 104: uint16(25031), + 105: uint16(25033), + 106: uint16(25036), + 107: uint16(25037), + 108: uint16(25038), + 109: uint16(25039), + 110: uint16(25040), + 111: uint16(25043), + 112: uint16(25045), + 113: uint16(25046), + 114: uint16(25047), + 115: uint16(25048), + 116: uint16(25049), + 117: uint16(25050), + 118: uint16(25051), + 119: uint16(25052), + 120: uint16(25053), + 121: uint16(25054), + 122: uint16(25055), + 123: uint16(25056), + 124: uint16(25057), + 125: uint16(25058), + 126: uint16(25059), + 127: uint16(25060), + 128: uint16(25061), + 129: uint16(25063), + 130: uint16(25064), + 131: uint16(25065), + 132: uint16(25066), + 133: uint16(25067), + 134: uint16(25068), + 135: uint16(25069), + 136: uint16(25070), + 137: uint16(25071), + 138: uint16(25072), + 139: uint16(25073), + 140: uint16(25074), + 141: uint16(25075), + 142: uint16(25076), + 143: uint16(25078), + 144: uint16(25079), + 145: uint16(25080), + 146: uint16(25081), + 147: uint16(25082), + 148: uint16(25083), + 149: uint16(25084), + 150: uint16(25085), + 151: uint16(25086), + 152: uint16(25088), + 153: uint16(25089), + 154: uint16(25090), + 155: uint16(25091), + 156: uint16(25092), + 157: uint16(25093), + 158: uint16(25095), + 159: uint16(25097), + 160: uint16(25107), + 161: uint16(25108), + 162: uint16(25113), + 163: uint16(25116), + 164: uint16(25117), + 165: uint16(25118), + 166: uint16(25120), + 167: uint16(25123), + 168: uint16(25126), + 169: uint16(25127), + 170: uint16(25128), + 171: uint16(25129), + 172: uint16(25131), + 173: uint16(25133), + 174: uint16(25135), + 175: uint16(25136), + 176: uint16(25137), + 177: uint16(25138), + 178: uint16(25141), + 179: uint16(25142), + 180: uint16(25144), + 181: uint16(25145), + 182: uint16(25146), + 183: uint16(25147), + 184: uint16(25148), + 185: uint16(25154), + 186: uint16(25156), + 187: uint16(25157), + 188: uint16(25158), + 189: uint16(25162), + }, + 17: { + 0: uint16(25167), + 1: uint16(25168), + 2: uint16(25173), + 3: uint16(25174), + 4: uint16(25175), + 5: uint16(25177), + 6: uint16(25178), + 7: uint16(25180), + 8: uint16(25181), + 9: uint16(25182), + 10: uint16(25183), + 11: uint16(25184), + 12: uint16(25185), + 13: uint16(25186), + 14: uint16(25188), + 15: uint16(25189), + 16: uint16(25192), + 17: uint16(25201), + 18: uint16(25202), + 19: uint16(25204), + 20: uint16(25205), + 21: uint16(25207), + 22: uint16(25208), + 23: uint16(25210), + 24: uint16(25211), + 25: uint16(25213), + 26: uint16(25217), + 27: uint16(25218), + 28: uint16(25219), + 29: uint16(25221), + 30: uint16(25222), + 31: uint16(25223), + 32: uint16(25224), + 33: uint16(25227), + 34: uint16(25228), + 35: uint16(25229), + 36: uint16(25230), + 37: uint16(25231), + 38: uint16(25232), + 39: uint16(25236), + 40: uint16(25241), + 41: uint16(25244), + 42: uint16(25245), + 43: uint16(25246), + 44: uint16(25251), + 45: uint16(25254), + 46: uint16(25255), + 47: uint16(25257), + 48: uint16(25258), + 49: uint16(25261), + 50: uint16(25262), + 51: uint16(25263), + 52: uint16(25264), + 53: uint16(25266), + 54: uint16(25267), + 55: uint16(25268), + 56: uint16(25270), + 57: uint16(25271), + 58: uint16(25272), + 59: uint16(25274), + 60: uint16(25278), + 61: uint16(25280), + 62: uint16(25281), + 63: uint16(25283), + 64: uint16(25291), + 65: uint16(25295), + 66: uint16(25297), + 67: uint16(25301), + 68: uint16(25309), + 69: uint16(25310), + 70: uint16(25312), + 71: uint16(25313), + 72: uint16(25316), + 73: uint16(25322), + 74: uint16(25323), + 75: uint16(25328), + 76: uint16(25330), + 77: uint16(25333), + 78: uint16(25336), + 79: uint16(25337), + 80: uint16(25338), + 81: uint16(25339), + 82: uint16(25344), + 83: uint16(25347), + 84: uint16(25348), + 85: uint16(25349), + 86: uint16(25350), + 87: uint16(25354), + 88: uint16(25355), + 89: uint16(25356), + 90: uint16(25357), + 91: uint16(25359), + 92: uint16(25360), + 93: uint16(25362), + 94: uint16(25363), + 95: uint16(25364), + 96: uint16(25365), + 97: uint16(25367), + 98: uint16(25368), + 99: uint16(25369), + 100: uint16(25372), + 101: uint16(25382), + 102: uint16(25383), + 103: uint16(25385), + 104: uint16(25388), + 105: uint16(25389), + 106: uint16(25390), + 107: uint16(25392), + 108: uint16(25393), + 109: uint16(25395), + 110: uint16(25396), + 111: uint16(25397), + 112: uint16(25398), + 113: uint16(25399), + 114: uint16(25400), + 115: uint16(25403), + 116: uint16(25404), + 117: uint16(25406), + 118: uint16(25407), + 119: uint16(25408), + 120: uint16(25409), + 121: uint16(25412), + 122: uint16(25415), + 123: uint16(25416), + 124: uint16(25418), + 125: uint16(25425), + 126: uint16(25426), + 127: uint16(25427), + 128: uint16(25428), + 129: uint16(25430), + 130: uint16(25431), + 131: uint16(25432), + 132: uint16(25433), + 133: uint16(25434), + 134: uint16(25435), + 135: uint16(25436), + 136: uint16(25437), + 137: uint16(25440), + 138: uint16(25444), + 139: uint16(25445), + 140: uint16(25446), + 141: uint16(25448), + 142: uint16(25450), + 143: uint16(25451), + 144: uint16(25452), + 145: uint16(25455), + 146: uint16(25456), + 147: uint16(25458), + 148: uint16(25459), + 149: uint16(25460), + 150: uint16(25461), + 151: uint16(25464), + 152: uint16(25465), + 153: uint16(25468), + 154: uint16(25469), + 155: uint16(25470), + 156: uint16(25471), + 157: uint16(25473), + 158: uint16(25475), + 159: uint16(25476), + 160: uint16(25477), + 161: uint16(25478), + 162: uint16(25483), + 163: uint16(25485), + 164: uint16(25489), + 165: uint16(25491), + 166: uint16(25492), + 167: uint16(25493), + 168: uint16(25495), + 169: uint16(25497), + 170: uint16(25498), + 171: uint16(25499), + 172: uint16(25500), + 173: uint16(25501), + 174: uint16(25502), + 175: uint16(25503), + 176: uint16(25505), + 177: uint16(25508), + 178: uint16(25510), + 179: uint16(25515), + 180: uint16(25519), + 181: uint16(25521), + 182: uint16(25522), + 183: uint16(25525), + 184: uint16(25526), + 185: uint16(25529), + 186: uint16(25531), + 187: uint16(25533), + 188: uint16(25535), + 189: uint16(25536), + }, + 18: { + 0: uint16(25537), + 1: uint16(25538), + 2: uint16(25539), + 3: uint16(25541), + 4: uint16(25543), + 5: uint16(25544), + 6: uint16(25546), + 7: uint16(25547), + 8: uint16(25548), + 9: uint16(25553), + 10: uint16(25555), + 11: uint16(25556), + 12: uint16(25557), + 13: uint16(25559), + 14: uint16(25560), + 15: uint16(25561), + 16: uint16(25562), + 17: uint16(25563), + 18: uint16(25564), + 19: uint16(25565), + 20: uint16(25567), + 21: uint16(25570), + 22: uint16(25572), + 23: uint16(25573), + 24: uint16(25574), + 25: uint16(25575), + 26: uint16(25576), + 27: uint16(25579), + 28: uint16(25580), + 29: uint16(25582), + 30: uint16(25583), + 31: uint16(25584), + 32: uint16(25585), + 33: uint16(25587), + 34: uint16(25589), + 35: uint16(25591), + 36: uint16(25593), + 37: uint16(25594), + 38: uint16(25595), + 39: uint16(25596), + 40: uint16(25598), + 41: uint16(25603), + 42: uint16(25604), + 43: uint16(25606), + 44: uint16(25607), + 45: uint16(25608), + 46: uint16(25609), + 47: uint16(25610), + 48: uint16(25613), + 49: uint16(25614), + 50: uint16(25617), + 51: uint16(25618), + 52: uint16(25621), + 53: uint16(25622), + 54: uint16(25623), + 55: uint16(25624), + 56: uint16(25625), + 57: uint16(25626), + 58: uint16(25629), + 59: uint16(25631), + 60: uint16(25634), + 61: uint16(25635), + 62: uint16(25636), + 63: uint16(25637), + 64: uint16(25639), + 65: uint16(25640), + 66: uint16(25641), + 67: uint16(25643), + 68: uint16(25646), + 69: uint16(25647), + 70: uint16(25648), + 71: uint16(25649), + 72: uint16(25650), + 73: uint16(25651), + 74: uint16(25653), + 75: uint16(25654), + 76: uint16(25655), + 77: uint16(25656), + 78: uint16(25657), + 79: uint16(25659), + 80: uint16(25660), + 81: uint16(25662), + 82: uint16(25664), + 83: uint16(25666), + 84: uint16(25667), + 85: uint16(25673), + 86: uint16(25675), + 87: uint16(25676), + 88: uint16(25677), + 89: uint16(25678), + 90: uint16(25679), + 91: uint16(25680), + 92: uint16(25681), + 93: uint16(25683), + 94: uint16(25685), + 95: uint16(25686), + 96: uint16(25687), + 97: uint16(25689), + 98: uint16(25690), + 99: uint16(25691), + 100: uint16(25692), + 101: uint16(25693), + 102: uint16(25695), + 103: uint16(25696), + 104: uint16(25697), + 105: uint16(25698), + 106: uint16(25699), + 107: uint16(25700), + 108: uint16(25701), + 109: uint16(25702), + 110: uint16(25704), + 111: uint16(25706), + 112: uint16(25707), + 113: uint16(25708), + 114: uint16(25710), + 115: uint16(25711), + 116: uint16(25712), + 117: uint16(25713), + 118: uint16(25714), + 119: uint16(25715), + 120: uint16(25716), + 121: uint16(25717), + 122: uint16(25718), + 123: uint16(25719), + 124: uint16(25723), + 125: uint16(25724), + 126: uint16(25725), + 127: uint16(25726), + 128: uint16(25727), + 129: uint16(25728), + 130: uint16(25729), + 131: uint16(25731), + 132: uint16(25734), + 133: uint16(25736), + 134: uint16(25737), + 135: uint16(25738), + 136: uint16(25739), + 137: uint16(25740), + 138: uint16(25741), + 139: uint16(25742), + 140: uint16(25743), + 141: uint16(25744), + 142: uint16(25747), + 143: uint16(25748), + 144: uint16(25751), + 145: uint16(25752), + 146: uint16(25754), + 147: uint16(25755), + 148: uint16(25756), + 149: uint16(25757), + 150: uint16(25759), + 151: uint16(25760), + 152: uint16(25761), + 153: uint16(25762), + 154: uint16(25763), + 155: uint16(25765), + 156: uint16(25766), + 157: uint16(25767), + 158: uint16(25768), + 159: uint16(25770), + 160: uint16(25771), + 161: uint16(25775), + 162: uint16(25777), + 163: uint16(25778), + 164: uint16(25779), + 165: uint16(25780), + 166: uint16(25782), + 167: uint16(25785), + 168: uint16(25787), + 169: uint16(25789), + 170: uint16(25790), + 171: uint16(25791), + 172: uint16(25793), + 173: uint16(25795), + 174: uint16(25796), + 175: uint16(25798), + 176: uint16(25799), + 177: uint16(25800), + 178: uint16(25801), + 179: uint16(25802), + 180: uint16(25803), + 181: uint16(25804), + 182: uint16(25807), + 183: uint16(25809), + 184: uint16(25811), + 185: uint16(25812), + 186: uint16(25813), + 187: uint16(25814), + 188: uint16(25817), + 189: uint16(25818), + }, + 19: { + 0: uint16(25819), + 1: uint16(25820), + 2: uint16(25821), + 3: uint16(25823), + 4: uint16(25824), + 5: uint16(25825), + 6: uint16(25827), + 7: uint16(25829), + 8: uint16(25831), + 9: uint16(25832), + 10: uint16(25833), + 11: uint16(25834), + 12: uint16(25835), + 13: uint16(25836), + 14: uint16(25837), + 15: uint16(25838), + 16: uint16(25839), + 17: uint16(25840), + 18: uint16(25841), + 19: uint16(25842), + 20: uint16(25843), + 21: uint16(25844), + 22: uint16(25845), + 23: uint16(25846), + 24: uint16(25847), + 25: uint16(25848), + 26: uint16(25849), + 27: uint16(25850), + 28: uint16(25851), + 29: uint16(25852), + 30: uint16(25853), + 31: uint16(25854), + 32: uint16(25855), + 33: uint16(25857), + 34: uint16(25858), + 35: uint16(25859), + 36: uint16(25860), + 37: uint16(25861), + 38: uint16(25862), + 39: uint16(25863), + 40: uint16(25864), + 41: uint16(25866), + 42: uint16(25867), + 43: uint16(25868), + 44: uint16(25869), + 45: uint16(25870), + 46: uint16(25871), + 47: uint16(25872), + 48: uint16(25873), + 49: uint16(25875), + 50: uint16(25876), + 51: uint16(25877), + 52: uint16(25878), + 53: uint16(25879), + 54: uint16(25881), + 55: uint16(25882), + 56: uint16(25883), + 57: uint16(25884), + 58: uint16(25885), + 59: uint16(25886), + 60: uint16(25887), + 61: uint16(25888), + 62: uint16(25889), + 63: uint16(25890), + 64: uint16(25891), + 65: uint16(25892), + 66: uint16(25894), + 67: uint16(25895), + 68: uint16(25896), + 69: uint16(25897), + 70: uint16(25898), + 71: uint16(25900), + 72: uint16(25901), + 73: uint16(25904), + 74: uint16(25905), + 75: uint16(25906), + 76: uint16(25907), + 77: uint16(25911), + 78: uint16(25914), + 79: uint16(25916), + 80: uint16(25917), + 81: uint16(25920), + 82: uint16(25921), + 83: uint16(25922), + 84: uint16(25923), + 85: uint16(25924), + 86: uint16(25926), + 87: uint16(25927), + 88: uint16(25930), + 89: uint16(25931), + 90: uint16(25933), + 91: uint16(25934), + 92: uint16(25936), + 93: uint16(25938), + 94: uint16(25939), + 95: uint16(25940), + 96: uint16(25943), + 97: uint16(25944), + 98: uint16(25946), + 99: uint16(25948), + 100: uint16(25951), + 101: uint16(25952), + 102: uint16(25953), + 103: uint16(25956), + 104: uint16(25957), + 105: uint16(25959), + 106: uint16(25960), + 107: uint16(25961), + 108: uint16(25962), + 109: uint16(25965), + 110: uint16(25966), + 111: uint16(25967), + 112: uint16(25969), + 113: uint16(25971), + 114: uint16(25973), + 115: uint16(25974), + 116: uint16(25976), + 117: uint16(25977), + 118: uint16(25978), + 119: uint16(25979), + 120: uint16(25980), + 121: uint16(25981), + 122: uint16(25982), + 123: uint16(25983), + 124: uint16(25984), + 125: uint16(25985), + 126: uint16(25986), + 127: uint16(25987), + 128: uint16(25988), + 129: uint16(25989), + 130: uint16(25990), + 131: uint16(25992), + 132: uint16(25993), + 133: uint16(25994), + 134: uint16(25997), + 135: uint16(25998), + 136: uint16(25999), + 137: uint16(26002), + 138: uint16(26004), + 139: uint16(26005), + 140: uint16(26006), + 141: uint16(26008), + 142: uint16(26010), + 143: uint16(26013), + 144: uint16(26014), + 145: uint16(26016), + 146: uint16(26018), + 147: uint16(26019), + 148: uint16(26022), + 149: uint16(26024), + 150: uint16(26026), + 151: uint16(26028), + 152: uint16(26030), + 153: uint16(26033), + 154: uint16(26034), + 155: uint16(26035), + 156: uint16(26036), + 157: uint16(26037), + 158: uint16(26038), + 159: uint16(26039), + 160: uint16(26040), + 161: uint16(26042), + 162: uint16(26043), + 163: uint16(26046), + 164: uint16(26047), + 165: uint16(26048), + 166: uint16(26050), + 167: uint16(26055), + 168: uint16(26056), + 169: uint16(26057), + 170: uint16(26058), + 171: uint16(26061), + 172: uint16(26064), + 173: uint16(26065), + 174: uint16(26067), + 175: uint16(26068), + 176: uint16(26069), + 177: uint16(26072), + 178: uint16(26073), + 179: uint16(26074), + 180: uint16(26075), + 181: uint16(26076), + 182: uint16(26077), + 183: uint16(26078), + 184: uint16(26079), + 185: uint16(26081), + 186: uint16(26083), + 187: uint16(26084), + 188: uint16(26090), + 189: uint16(26091), + }, + 20: { + 0: uint16(26098), + 1: uint16(26099), + 2: uint16(26100), + 3: uint16(26101), + 4: uint16(26104), + 5: uint16(26105), + 6: uint16(26107), + 7: uint16(26108), + 8: uint16(26109), + 9: uint16(26110), + 10: uint16(26111), + 11: uint16(26113), + 12: uint16(26116), + 13: uint16(26117), + 14: uint16(26119), + 15: uint16(26120), + 16: uint16(26121), + 17: uint16(26123), + 18: uint16(26125), + 19: uint16(26128), + 20: uint16(26129), + 21: uint16(26130), + 22: uint16(26134), + 23: uint16(26135), + 24: uint16(26136), + 25: uint16(26138), + 26: uint16(26139), + 27: uint16(26140), + 28: uint16(26142), + 29: uint16(26145), + 30: uint16(26146), + 31: uint16(26147), + 32: uint16(26148), + 33: uint16(26150), + 34: uint16(26153), + 35: uint16(26154), + 36: uint16(26155), + 37: uint16(26156), + 38: uint16(26158), + 39: uint16(26160), + 40: uint16(26162), + 41: uint16(26163), + 42: uint16(26167), + 43: uint16(26168), + 44: uint16(26169), + 45: uint16(26170), + 46: uint16(26171), + 47: uint16(26173), + 48: uint16(26175), + 49: uint16(26176), + 50: uint16(26178), + 51: uint16(26180), + 52: uint16(26181), + 53: uint16(26182), + 54: uint16(26183), + 55: uint16(26184), + 56: uint16(26185), + 57: uint16(26186), + 58: uint16(26189), + 59: uint16(26190), + 60: uint16(26192), + 61: uint16(26193), + 62: uint16(26200), + 63: uint16(26201), + 64: uint16(26203), + 65: uint16(26204), + 66: uint16(26205), + 67: uint16(26206), + 68: uint16(26208), + 69: uint16(26210), + 70: uint16(26211), + 71: uint16(26213), + 72: uint16(26215), + 73: uint16(26217), + 74: uint16(26218), + 75: uint16(26219), + 76: uint16(26220), + 77: uint16(26221), + 78: uint16(26225), + 79: uint16(26226), + 80: uint16(26227), + 81: uint16(26229), + 82: uint16(26232), + 83: uint16(26233), + 84: uint16(26235), + 85: uint16(26236), + 86: uint16(26237), + 87: uint16(26239), + 88: uint16(26240), + 89: uint16(26241), + 90: uint16(26243), + 91: uint16(26245), + 92: uint16(26246), + 93: uint16(26248), + 94: uint16(26249), + 95: uint16(26250), + 96: uint16(26251), + 97: uint16(26253), + 98: uint16(26254), + 99: uint16(26255), + 100: uint16(26256), + 101: uint16(26258), + 102: uint16(26259), + 103: uint16(26260), + 104: uint16(26261), + 105: uint16(26264), + 106: uint16(26265), + 107: uint16(26266), + 108: uint16(26267), + 109: uint16(26268), + 110: uint16(26270), + 111: uint16(26271), + 112: uint16(26272), + 113: uint16(26273), + 114: uint16(26274), + 115: uint16(26275), + 116: uint16(26276), + 117: uint16(26277), + 118: uint16(26278), + 119: uint16(26281), + 120: uint16(26282), + 121: uint16(26283), + 122: uint16(26284), + 123: uint16(26285), + 124: uint16(26287), + 125: uint16(26288), + 126: uint16(26289), + 127: uint16(26290), + 128: uint16(26291), + 129: uint16(26293), + 130: uint16(26294), + 131: uint16(26295), + 132: uint16(26296), + 133: uint16(26298), + 134: uint16(26299), + 135: uint16(26300), + 136: uint16(26301), + 137: uint16(26303), + 138: uint16(26304), + 139: uint16(26305), + 140: uint16(26306), + 141: uint16(26307), + 142: uint16(26308), + 143: uint16(26309), + 144: uint16(26310), + 145: uint16(26311), + 146: uint16(26312), + 147: uint16(26313), + 148: uint16(26314), + 149: uint16(26315), + 150: uint16(26316), + 151: uint16(26317), + 152: uint16(26318), + 153: uint16(26319), + 154: uint16(26320), + 155: uint16(26321), + 156: uint16(26322), + 157: uint16(26323), + 158: uint16(26324), + 159: uint16(26325), + 160: uint16(26326), + 161: uint16(26327), + 162: uint16(26328), + 163: uint16(26330), + 164: uint16(26334), + 165: uint16(26335), + 166: uint16(26336), + 167: uint16(26337), + 168: uint16(26338), + 169: uint16(26339), + 170: uint16(26340), + 171: uint16(26341), + 172: uint16(26343), + 173: uint16(26344), + 174: uint16(26346), + 175: uint16(26347), + 176: uint16(26348), + 177: uint16(26349), + 178: uint16(26350), + 179: uint16(26351), + 180: uint16(26353), + 181: uint16(26357), + 182: uint16(26358), + 183: uint16(26360), + 184: uint16(26362), + 185: uint16(26363), + 186: uint16(26365), + 187: uint16(26369), + 188: uint16(26370), + 189: uint16(26371), + }, + 21: { + 0: uint16(26372), + 1: uint16(26373), + 2: uint16(26374), + 3: uint16(26375), + 4: uint16(26380), + 5: uint16(26382), + 6: uint16(26383), + 7: uint16(26385), + 8: uint16(26386), + 9: uint16(26387), + 10: uint16(26390), + 11: uint16(26392), + 12: uint16(26393), + 13: uint16(26394), + 14: uint16(26396), + 15: uint16(26398), + 16: uint16(26400), + 17: uint16(26401), + 18: uint16(26402), + 19: uint16(26403), + 20: uint16(26404), + 21: uint16(26405), + 22: uint16(26407), + 23: uint16(26409), + 24: uint16(26414), + 25: uint16(26416), + 26: uint16(26418), + 27: uint16(26419), + 28: uint16(26422), + 29: uint16(26423), + 30: uint16(26424), + 31: uint16(26425), + 32: uint16(26427), + 33: uint16(26428), + 34: uint16(26430), + 35: uint16(26431), + 36: uint16(26433), + 37: uint16(26436), + 38: uint16(26437), + 39: uint16(26439), + 40: uint16(26442), + 41: uint16(26443), + 42: uint16(26445), + 43: uint16(26450), + 44: uint16(26452), + 45: uint16(26453), + 46: uint16(26455), + 47: uint16(26456), + 48: uint16(26457), + 49: uint16(26458), + 50: uint16(26459), + 51: uint16(26461), + 52: uint16(26466), + 53: uint16(26467), + 54: uint16(26468), + 55: uint16(26470), + 56: uint16(26471), + 57: uint16(26475), + 58: uint16(26476), + 59: uint16(26478), + 60: uint16(26481), + 61: uint16(26484), + 62: uint16(26486), + 63: uint16(26488), + 64: uint16(26489), + 65: uint16(26490), + 66: uint16(26491), + 67: uint16(26493), + 68: uint16(26496), + 69: uint16(26498), + 70: uint16(26499), + 71: uint16(26501), + 72: uint16(26502), + 73: uint16(26504), + 74: uint16(26506), + 75: uint16(26508), + 76: uint16(26509), + 77: uint16(26510), + 78: uint16(26511), + 79: uint16(26513), + 80: uint16(26514), + 81: uint16(26515), + 82: uint16(26516), + 83: uint16(26518), + 84: uint16(26521), + 85: uint16(26523), + 86: uint16(26527), + 87: uint16(26528), + 88: uint16(26529), + 89: uint16(26532), + 90: uint16(26534), + 91: uint16(26537), + 92: uint16(26540), + 93: uint16(26542), + 94: uint16(26545), + 95: uint16(26546), + 96: uint16(26548), + 97: uint16(26553), + 98: uint16(26554), + 99: uint16(26555), + 100: uint16(26556), + 101: uint16(26557), + 102: uint16(26558), + 103: uint16(26559), + 104: uint16(26560), + 105: uint16(26562), + 106: uint16(26565), + 107: uint16(26566), + 108: uint16(26567), + 109: uint16(26568), + 110: uint16(26569), + 111: uint16(26570), + 112: uint16(26571), + 113: uint16(26572), + 114: uint16(26573), + 115: uint16(26574), + 116: uint16(26581), + 117: uint16(26582), + 118: uint16(26583), + 119: uint16(26587), + 120: uint16(26591), + 121: uint16(26593), + 122: uint16(26595), + 123: uint16(26596), + 124: uint16(26598), + 125: uint16(26599), + 126: uint16(26600), + 127: uint16(26602), + 128: uint16(26603), + 129: uint16(26605), + 130: uint16(26606), + 131: uint16(26610), + 132: uint16(26613), + 133: uint16(26614), + 134: uint16(26615), + 135: uint16(26616), + 136: uint16(26617), + 137: uint16(26618), + 138: uint16(26619), + 139: uint16(26620), + 140: uint16(26622), + 141: uint16(26625), + 142: uint16(26626), + 143: uint16(26627), + 144: uint16(26628), + 145: uint16(26630), + 146: uint16(26637), + 147: uint16(26640), + 148: uint16(26642), + 149: uint16(26644), + 150: uint16(26645), + 151: uint16(26648), + 152: uint16(26649), + 153: uint16(26650), + 154: uint16(26651), + 155: uint16(26652), + 156: uint16(26654), + 157: uint16(26655), + 158: uint16(26656), + 159: uint16(26658), + 160: uint16(26659), + 161: uint16(26660), + 162: uint16(26661), + 163: uint16(26662), + 164: uint16(26663), + 165: uint16(26664), + 166: uint16(26667), + 167: uint16(26668), + 168: uint16(26669), + 169: uint16(26670), + 170: uint16(26671), + 171: uint16(26672), + 172: uint16(26673), + 173: uint16(26676), + 174: uint16(26677), + 175: uint16(26678), + 176: uint16(26682), + 177: uint16(26683), + 178: uint16(26687), + 179: uint16(26695), + 180: uint16(26699), + 181: uint16(26701), + 182: uint16(26703), + 183: uint16(26706), + 184: uint16(26710), + 185: uint16(26711), + 186: uint16(26712), + 187: uint16(26713), + 188: uint16(26714), + 189: uint16(26715), + }, + 22: { + 0: uint16(26716), + 1: uint16(26717), + 2: uint16(26718), + 3: uint16(26719), + 4: uint16(26730), + 5: uint16(26732), + 6: uint16(26733), + 7: uint16(26734), + 8: uint16(26735), + 9: uint16(26736), + 10: uint16(26737), + 11: uint16(26738), + 12: uint16(26739), + 13: uint16(26741), + 14: uint16(26744), + 15: uint16(26745), + 16: uint16(26746), + 17: uint16(26747), + 18: uint16(26748), + 19: uint16(26749), + 20: uint16(26750), + 21: uint16(26751), + 22: uint16(26752), + 23: uint16(26754), + 24: uint16(26756), + 25: uint16(26759), + 26: uint16(26760), + 27: uint16(26761), + 28: uint16(26762), + 29: uint16(26763), + 30: uint16(26764), + 31: uint16(26765), + 32: uint16(26766), + 33: uint16(26768), + 34: uint16(26769), + 35: uint16(26770), + 36: uint16(26772), + 37: uint16(26773), + 38: uint16(26774), + 39: uint16(26776), + 40: uint16(26777), + 41: uint16(26778), + 42: uint16(26779), + 43: uint16(26780), + 44: uint16(26781), + 45: uint16(26782), + 46: uint16(26783), + 47: uint16(26784), + 48: uint16(26785), + 49: uint16(26787), + 50: uint16(26788), + 51: uint16(26789), + 52: uint16(26793), + 53: uint16(26794), + 54: uint16(26795), + 55: uint16(26796), + 56: uint16(26798), + 57: uint16(26801), + 58: uint16(26802), + 59: uint16(26804), + 60: uint16(26806), + 61: uint16(26807), + 62: uint16(26808), + 63: uint16(26809), + 64: uint16(26810), + 65: uint16(26811), + 66: uint16(26812), + 67: uint16(26813), + 68: uint16(26814), + 69: uint16(26815), + 70: uint16(26817), + 71: uint16(26819), + 72: uint16(26820), + 73: uint16(26821), + 74: uint16(26822), + 75: uint16(26823), + 76: uint16(26824), + 77: uint16(26826), + 78: uint16(26828), + 79: uint16(26830), + 80: uint16(26831), + 81: uint16(26832), + 82: uint16(26833), + 83: uint16(26835), + 84: uint16(26836), + 85: uint16(26838), + 86: uint16(26839), + 87: uint16(26841), + 88: uint16(26843), + 89: uint16(26844), + 90: uint16(26845), + 91: uint16(26846), + 92: uint16(26847), + 93: uint16(26849), + 94: uint16(26850), + 95: uint16(26852), + 96: uint16(26853), + 97: uint16(26854), + 98: uint16(26855), + 99: uint16(26856), + 100: uint16(26857), + 101: uint16(26858), + 102: uint16(26859), + 103: uint16(26860), + 104: uint16(26861), + 105: uint16(26863), + 106: uint16(26866), + 107: uint16(26867), + 108: uint16(26868), + 109: uint16(26870), + 110: uint16(26871), + 111: uint16(26872), + 112: uint16(26875), + 113: uint16(26877), + 114: uint16(26878), + 115: uint16(26879), + 116: uint16(26880), + 117: uint16(26882), + 118: uint16(26883), + 119: uint16(26884), + 120: uint16(26886), + 121: uint16(26887), + 122: uint16(26888), + 123: uint16(26889), + 124: uint16(26890), + 125: uint16(26892), + 126: uint16(26895), + 127: uint16(26897), + 128: uint16(26899), + 129: uint16(26900), + 130: uint16(26901), + 131: uint16(26902), + 132: uint16(26903), + 133: uint16(26904), + 134: uint16(26905), + 135: uint16(26906), + 136: uint16(26907), + 137: uint16(26908), + 138: uint16(26909), + 139: uint16(26910), + 140: uint16(26913), + 141: uint16(26914), + 142: uint16(26915), + 143: uint16(26917), + 144: uint16(26918), + 145: uint16(26919), + 146: uint16(26920), + 147: uint16(26921), + 148: uint16(26922), + 149: uint16(26923), + 150: uint16(26924), + 151: uint16(26926), + 152: uint16(26927), + 153: uint16(26929), + 154: uint16(26930), + 155: uint16(26931), + 156: uint16(26933), + 157: uint16(26934), + 158: uint16(26935), + 159: uint16(26936), + 160: uint16(26938), + 161: uint16(26939), + 162: uint16(26940), + 163: uint16(26942), + 164: uint16(26944), + 165: uint16(26945), + 166: uint16(26947), + 167: uint16(26948), + 168: uint16(26949), + 169: uint16(26950), + 170: uint16(26951), + 171: uint16(26952), + 172: uint16(26953), + 173: uint16(26954), + 174: uint16(26955), + 175: uint16(26956), + 176: uint16(26957), + 177: uint16(26958), + 178: uint16(26959), + 179: uint16(26960), + 180: uint16(26961), + 181: uint16(26962), + 182: uint16(26963), + 183: uint16(26965), + 184: uint16(26966), + 185: uint16(26968), + 186: uint16(26969), + 187: uint16(26971), + 188: uint16(26972), + 189: uint16(26975), + }, + 23: { + 0: uint16(26977), + 1: uint16(26978), + 2: uint16(26980), + 3: uint16(26981), + 4: uint16(26983), + 5: uint16(26984), + 6: uint16(26985), + 7: uint16(26986), + 8: uint16(26988), + 9: uint16(26989), + 10: uint16(26991), + 11: uint16(26992), + 12: uint16(26994), + 13: uint16(26995), + 14: uint16(26996), + 15: uint16(26997), + 16: uint16(26998), + 17: uint16(27002), + 18: uint16(27003), + 19: uint16(27005), + 20: uint16(27006), + 21: uint16(27007), + 22: uint16(27009), + 23: uint16(27011), + 24: uint16(27013), + 25: uint16(27018), + 26: uint16(27019), + 27: uint16(27020), + 28: uint16(27022), + 29: uint16(27023), + 30: uint16(27024), + 31: uint16(27025), + 32: uint16(27026), + 33: uint16(27027), + 34: uint16(27030), + 35: uint16(27031), + 36: uint16(27033), + 37: uint16(27034), + 38: uint16(27037), + 39: uint16(27038), + 40: uint16(27039), + 41: uint16(27040), + 42: uint16(27041), + 43: uint16(27042), + 44: uint16(27043), + 45: uint16(27044), + 46: uint16(27045), + 47: uint16(27046), + 48: uint16(27049), + 49: uint16(27050), + 50: uint16(27052), + 51: uint16(27054), + 52: uint16(27055), + 53: uint16(27056), + 54: uint16(27058), + 55: uint16(27059), + 56: uint16(27061), + 57: uint16(27062), + 58: uint16(27064), + 59: uint16(27065), + 60: uint16(27066), + 61: uint16(27068), + 62: uint16(27069), + 63: uint16(27070), + 64: uint16(27071), + 65: uint16(27072), + 66: uint16(27074), + 67: uint16(27075), + 68: uint16(27076), + 69: uint16(27077), + 70: uint16(27078), + 71: uint16(27079), + 72: uint16(27080), + 73: uint16(27081), + 74: uint16(27083), + 75: uint16(27085), + 76: uint16(27087), + 77: uint16(27089), + 78: uint16(27090), + 79: uint16(27091), + 80: uint16(27093), + 81: uint16(27094), + 82: uint16(27095), + 83: uint16(27096), + 84: uint16(27097), + 85: uint16(27098), + 86: uint16(27100), + 87: uint16(27101), + 88: uint16(27102), + 89: uint16(27105), + 90: uint16(27106), + 91: uint16(27107), + 92: uint16(27108), + 93: uint16(27109), + 94: uint16(27110), + 95: uint16(27111), + 96: uint16(27112), + 97: uint16(27113), + 98: uint16(27114), + 99: uint16(27115), + 100: uint16(27116), + 101: uint16(27118), + 102: uint16(27119), + 103: uint16(27120), + 104: uint16(27121), + 105: uint16(27123), + 106: uint16(27124), + 107: uint16(27125), + 108: uint16(27126), + 109: uint16(27127), + 110: uint16(27128), + 111: uint16(27129), + 112: uint16(27130), + 113: uint16(27131), + 114: uint16(27132), + 115: uint16(27134), + 116: uint16(27136), + 117: uint16(27137), + 118: uint16(27138), + 119: uint16(27139), + 120: uint16(27140), + 121: uint16(27141), + 122: uint16(27142), + 123: uint16(27143), + 124: uint16(27144), + 125: uint16(27145), + 126: uint16(27147), + 127: uint16(27148), + 128: uint16(27149), + 129: uint16(27150), + 130: uint16(27151), + 131: uint16(27152), + 132: uint16(27153), + 133: uint16(27154), + 134: uint16(27155), + 135: uint16(27156), + 136: uint16(27157), + 137: uint16(27158), + 138: uint16(27161), + 139: uint16(27162), + 140: uint16(27163), + 141: uint16(27164), + 142: uint16(27165), + 143: uint16(27166), + 144: uint16(27168), + 145: uint16(27170), + 146: uint16(27171), + 147: uint16(27172), + 148: uint16(27173), + 149: uint16(27174), + 150: uint16(27175), + 151: uint16(27177), + 152: uint16(27179), + 153: uint16(27180), + 154: uint16(27181), + 155: uint16(27182), + 156: uint16(27184), + 157: uint16(27186), + 158: uint16(27187), + 159: uint16(27188), + 160: uint16(27190), + 161: uint16(27191), + 162: uint16(27192), + 163: uint16(27193), + 164: uint16(27194), + 165: uint16(27195), + 166: uint16(27196), + 167: uint16(27199), + 168: uint16(27200), + 169: uint16(27201), + 170: uint16(27202), + 171: uint16(27203), + 172: uint16(27205), + 173: uint16(27206), + 174: uint16(27208), + 175: uint16(27209), + 176: uint16(27210), + 177: uint16(27211), + 178: uint16(27212), + 179: uint16(27213), + 180: uint16(27214), + 181: uint16(27215), + 182: uint16(27217), + 183: uint16(27218), + 184: uint16(27219), + 185: uint16(27220), + 186: uint16(27221), + 187: uint16(27222), + 188: uint16(27223), + 189: uint16(27226), + }, + 24: { + 0: uint16(27228), + 1: uint16(27229), + 2: uint16(27230), + 3: uint16(27231), + 4: uint16(27232), + 5: uint16(27234), + 6: uint16(27235), + 7: uint16(27236), + 8: uint16(27238), + 9: uint16(27239), + 10: uint16(27240), + 11: uint16(27241), + 12: uint16(27242), + 13: uint16(27243), + 14: uint16(27244), + 15: uint16(27245), + 16: uint16(27246), + 17: uint16(27247), + 18: uint16(27248), + 19: uint16(27250), + 20: uint16(27251), + 21: uint16(27252), + 22: uint16(27253), + 23: uint16(27254), + 24: uint16(27255), + 25: uint16(27256), + 26: uint16(27258), + 27: uint16(27259), + 28: uint16(27261), + 29: uint16(27262), + 30: uint16(27263), + 31: uint16(27265), + 32: uint16(27266), + 33: uint16(27267), + 34: uint16(27269), + 35: uint16(27270), + 36: uint16(27271), + 37: uint16(27272), + 38: uint16(27273), + 39: uint16(27274), + 40: uint16(27275), + 41: uint16(27276), + 42: uint16(27277), + 43: uint16(27279), + 44: uint16(27282), + 45: uint16(27283), + 46: uint16(27284), + 47: uint16(27285), + 48: uint16(27286), + 49: uint16(27288), + 50: uint16(27289), + 51: uint16(27290), + 52: uint16(27291), + 53: uint16(27292), + 54: uint16(27293), + 55: uint16(27294), + 56: uint16(27295), + 57: uint16(27297), + 58: uint16(27298), + 59: uint16(27299), + 60: uint16(27300), + 61: uint16(27301), + 62: uint16(27302), + 63: uint16(27303), + 64: uint16(27304), + 65: uint16(27306), + 66: uint16(27309), + 67: uint16(27310), + 68: uint16(27311), + 69: uint16(27312), + 70: uint16(27313), + 71: uint16(27314), + 72: uint16(27315), + 73: uint16(27316), + 74: uint16(27317), + 75: uint16(27318), + 76: uint16(27319), + 77: uint16(27320), + 78: uint16(27321), + 79: uint16(27322), + 80: uint16(27323), + 81: uint16(27324), + 82: uint16(27325), + 83: uint16(27326), + 84: uint16(27327), + 85: uint16(27328), + 86: uint16(27329), + 87: uint16(27330), + 88: uint16(27331), + 89: uint16(27332), + 90: uint16(27333), + 91: uint16(27334), + 92: uint16(27335), + 93: uint16(27336), + 94: uint16(27337), + 95: uint16(27338), + 96: uint16(27339), + 97: uint16(27340), + 98: uint16(27341), + 99: uint16(27342), + 100: uint16(27343), + 101: uint16(27344), + 102: uint16(27345), + 103: uint16(27346), + 104: uint16(27347), + 105: uint16(27348), + 106: uint16(27349), + 107: uint16(27350), + 108: uint16(27351), + 109: uint16(27352), + 110: uint16(27353), + 111: uint16(27354), + 112: uint16(27355), + 113: uint16(27356), + 114: uint16(27357), + 115: uint16(27358), + 116: uint16(27359), + 117: uint16(27360), + 118: uint16(27361), + 119: uint16(27362), + 120: uint16(27363), + 121: uint16(27364), + 122: uint16(27365), + 123: uint16(27366), + 124: uint16(27367), + 125: uint16(27368), + 126: uint16(27369), + 127: uint16(27370), + 128: uint16(27371), + 129: uint16(27372), + 130: uint16(27373), + 131: uint16(27374), + 132: uint16(27375), + 133: uint16(27376), + 134: uint16(27377), + 135: uint16(27378), + 136: uint16(27379), + 137: uint16(27380), + 138: uint16(27381), + 139: uint16(27382), + 140: uint16(27383), + 141: uint16(27384), + 142: uint16(27385), + 143: uint16(27386), + 144: uint16(27387), + 145: uint16(27388), + 146: uint16(27389), + 147: uint16(27390), + 148: uint16(27391), + 149: uint16(27392), + 150: uint16(27393), + 151: uint16(27394), + 152: uint16(27395), + 153: uint16(27396), + 154: uint16(27397), + 155: uint16(27398), + 156: uint16(27399), + 157: uint16(27400), + 158: uint16(27401), + 159: uint16(27402), + 160: uint16(27403), + 161: uint16(27404), + 162: uint16(27405), + 163: uint16(27406), + 164: uint16(27407), + 165: uint16(27408), + 166: uint16(27409), + 167: uint16(27410), + 168: uint16(27411), + 169: uint16(27412), + 170: uint16(27413), + 171: uint16(27414), + 172: uint16(27415), + 173: uint16(27416), + 174: uint16(27417), + 175: uint16(27418), + 176: uint16(27419), + 177: uint16(27420), + 178: uint16(27421), + 179: uint16(27422), + 180: uint16(27423), + 181: uint16(27429), + 182: uint16(27430), + 183: uint16(27432), + 184: uint16(27433), + 185: uint16(27434), + 186: uint16(27435), + 187: uint16(27436), + 188: uint16(27437), + 189: uint16(27438), + }, + 25: { + 0: uint16(27439), + 1: uint16(27440), + 2: uint16(27441), + 3: uint16(27443), + 4: uint16(27444), + 5: uint16(27445), + 6: uint16(27446), + 7: uint16(27448), + 8: uint16(27451), + 9: uint16(27452), + 10: uint16(27453), + 11: uint16(27455), + 12: uint16(27456), + 13: uint16(27457), + 14: uint16(27458), + 15: uint16(27460), + 16: uint16(27461), + 17: uint16(27464), + 18: uint16(27466), + 19: uint16(27467), + 20: uint16(27469), + 21: uint16(27470), + 22: uint16(27471), + 23: uint16(27472), + 24: uint16(27473), + 25: uint16(27474), + 26: uint16(27475), + 27: uint16(27476), + 28: uint16(27477), + 29: uint16(27478), + 30: uint16(27479), + 31: uint16(27480), + 32: uint16(27482), + 33: uint16(27483), + 34: uint16(27484), + 35: uint16(27485), + 36: uint16(27486), + 37: uint16(27487), + 38: uint16(27488), + 39: uint16(27489), + 40: uint16(27496), + 41: uint16(27497), + 42: uint16(27499), + 43: uint16(27500), + 44: uint16(27501), + 45: uint16(27502), + 46: uint16(27503), + 47: uint16(27504), + 48: uint16(27505), + 49: uint16(27506), + 50: uint16(27507), + 51: uint16(27508), + 52: uint16(27509), + 53: uint16(27510), + 54: uint16(27511), + 55: uint16(27512), + 56: uint16(27514), + 57: uint16(27517), + 58: uint16(27518), + 59: uint16(27519), + 60: uint16(27520), + 61: uint16(27525), + 62: uint16(27528), + 63: uint16(27532), + 64: uint16(27534), + 65: uint16(27535), + 66: uint16(27536), + 67: uint16(27537), + 68: uint16(27540), + 69: uint16(27541), + 70: uint16(27543), + 71: uint16(27544), + 72: uint16(27545), + 73: uint16(27548), + 74: uint16(27549), + 75: uint16(27550), + 76: uint16(27551), + 77: uint16(27552), + 78: uint16(27554), + 79: uint16(27555), + 80: uint16(27556), + 81: uint16(27557), + 82: uint16(27558), + 83: uint16(27559), + 84: uint16(27560), + 85: uint16(27561), + 86: uint16(27563), + 87: uint16(27564), + 88: uint16(27565), + 89: uint16(27566), + 90: uint16(27567), + 91: uint16(27568), + 92: uint16(27569), + 93: uint16(27570), + 94: uint16(27574), + 95: uint16(27576), + 96: uint16(27577), + 97: uint16(27578), + 98: uint16(27579), + 99: uint16(27580), + 100: uint16(27581), + 101: uint16(27582), + 102: uint16(27584), + 103: uint16(27587), + 104: uint16(27588), + 105: uint16(27590), + 106: uint16(27591), + 107: uint16(27592), + 108: uint16(27593), + 109: uint16(27594), + 110: uint16(27596), + 111: uint16(27598), + 112: uint16(27600), + 113: uint16(27601), + 114: uint16(27608), + 115: uint16(27610), + 116: uint16(27612), + 117: uint16(27613), + 118: uint16(27614), + 119: uint16(27615), + 120: uint16(27616), + 121: uint16(27618), + 122: uint16(27619), + 123: uint16(27620), + 124: uint16(27621), + 125: uint16(27622), + 126: uint16(27623), + 127: uint16(27624), + 128: uint16(27625), + 129: uint16(27628), + 130: uint16(27629), + 131: uint16(27630), + 132: uint16(27632), + 133: uint16(27633), + 134: uint16(27634), + 135: uint16(27636), + 136: uint16(27638), + 137: uint16(27639), + 138: uint16(27640), + 139: uint16(27642), + 140: uint16(27643), + 141: uint16(27644), + 142: uint16(27646), + 143: uint16(27647), + 144: uint16(27648), + 145: uint16(27649), + 146: uint16(27650), + 147: uint16(27651), + 148: uint16(27652), + 149: uint16(27656), + 150: uint16(27657), + 151: uint16(27658), + 152: uint16(27659), + 153: uint16(27660), + 154: uint16(27662), + 155: uint16(27666), + 156: uint16(27671), + 157: uint16(27676), + 158: uint16(27677), + 159: uint16(27678), + 160: uint16(27680), + 161: uint16(27683), + 162: uint16(27685), + 163: uint16(27691), + 164: uint16(27692), + 165: uint16(27693), + 166: uint16(27697), + 167: uint16(27699), + 168: uint16(27702), + 169: uint16(27703), + 170: uint16(27705), + 171: uint16(27706), + 172: uint16(27707), + 173: uint16(27708), + 174: uint16(27710), + 175: uint16(27711), + 176: uint16(27715), + 177: uint16(27716), + 178: uint16(27717), + 179: uint16(27720), + 180: uint16(27723), + 181: uint16(27724), + 182: uint16(27725), + 183: uint16(27726), + 184: uint16(27727), + 185: uint16(27729), + 186: uint16(27730), + 187: uint16(27731), + 188: uint16(27734), + 189: uint16(27736), + }, + 26: { + 0: uint16(27737), + 1: uint16(27738), + 2: uint16(27746), + 3: uint16(27747), + 4: uint16(27749), + 5: uint16(27750), + 6: uint16(27751), + 7: uint16(27755), + 8: uint16(27756), + 9: uint16(27757), + 10: uint16(27758), + 11: uint16(27759), + 12: uint16(27761), + 13: uint16(27763), + 14: uint16(27765), + 15: uint16(27767), + 16: uint16(27768), + 17: uint16(27770), + 18: uint16(27771), + 19: uint16(27772), + 20: uint16(27775), + 21: uint16(27776), + 22: uint16(27780), + 23: uint16(27783), + 24: uint16(27786), + 25: uint16(27787), + 26: uint16(27789), + 27: uint16(27790), + 28: uint16(27793), + 29: uint16(27794), + 30: uint16(27797), + 31: uint16(27798), + 32: uint16(27799), + 33: uint16(27800), + 34: uint16(27802), + 35: uint16(27804), + 36: uint16(27805), + 37: uint16(27806), + 38: uint16(27808), + 39: uint16(27810), + 40: uint16(27816), + 41: uint16(27820), + 42: uint16(27823), + 43: uint16(27824), + 44: uint16(27828), + 45: uint16(27829), + 46: uint16(27830), + 47: uint16(27831), + 48: uint16(27834), + 49: uint16(27840), + 50: uint16(27841), + 51: uint16(27842), + 52: uint16(27843), + 53: uint16(27846), + 54: uint16(27847), + 55: uint16(27848), + 56: uint16(27851), + 57: uint16(27853), + 58: uint16(27854), + 59: uint16(27855), + 60: uint16(27857), + 61: uint16(27858), + 62: uint16(27864), + 63: uint16(27865), + 64: uint16(27866), + 65: uint16(27868), + 66: uint16(27869), + 67: uint16(27871), + 68: uint16(27876), + 69: uint16(27878), + 70: uint16(27879), + 71: uint16(27881), + 72: uint16(27884), + 73: uint16(27885), + 74: uint16(27890), + 75: uint16(27892), + 76: uint16(27897), + 77: uint16(27903), + 78: uint16(27904), + 79: uint16(27906), + 80: uint16(27907), + 81: uint16(27909), + 82: uint16(27910), + 83: uint16(27912), + 84: uint16(27913), + 85: uint16(27914), + 86: uint16(27917), + 87: uint16(27919), + 88: uint16(27920), + 89: uint16(27921), + 90: uint16(27923), + 91: uint16(27924), + 92: uint16(27925), + 93: uint16(27926), + 94: uint16(27928), + 95: uint16(27932), + 96: uint16(27933), + 97: uint16(27935), + 98: uint16(27936), + 99: uint16(27937), + 100: uint16(27938), + 101: uint16(27939), + 102: uint16(27940), + 103: uint16(27942), + 104: uint16(27944), + 105: uint16(27945), + 106: uint16(27948), + 107: uint16(27949), + 108: uint16(27951), + 109: uint16(27952), + 110: uint16(27956), + 111: uint16(27958), + 112: uint16(27959), + 113: uint16(27960), + 114: uint16(27962), + 115: uint16(27967), + 116: uint16(27968), + 117: uint16(27970), + 118: uint16(27972), + 119: uint16(27977), + 120: uint16(27980), + 121: uint16(27984), + 122: uint16(27989), + 123: uint16(27990), + 124: uint16(27991), + 125: uint16(27992), + 126: uint16(27995), + 127: uint16(27997), + 128: uint16(27999), + 129: uint16(28001), + 130: uint16(28002), + 131: uint16(28004), + 132: uint16(28005), + 133: uint16(28007), + 134: uint16(28008), + 135: uint16(28011), + 136: uint16(28012), + 137: uint16(28013), + 138: uint16(28016), + 139: uint16(28017), + 140: uint16(28018), + 141: uint16(28019), + 142: uint16(28021), + 143: uint16(28022), + 144: uint16(28025), + 145: uint16(28026), + 146: uint16(28027), + 147: uint16(28029), + 148: uint16(28030), + 149: uint16(28031), + 150: uint16(28032), + 151: uint16(28033), + 152: uint16(28035), + 153: uint16(28036), + 154: uint16(28038), + 155: uint16(28039), + 156: uint16(28042), + 157: uint16(28043), + 158: uint16(28045), + 159: uint16(28047), + 160: uint16(28048), + 161: uint16(28050), + 162: uint16(28054), + 163: uint16(28055), + 164: uint16(28056), + 165: uint16(28057), + 166: uint16(28058), + 167: uint16(28060), + 168: uint16(28066), + 169: uint16(28069), + 170: uint16(28076), + 171: uint16(28077), + 172: uint16(28080), + 173: uint16(28081), + 174: uint16(28083), + 175: uint16(28084), + 176: uint16(28086), + 177: uint16(28087), + 178: uint16(28089), + 179: uint16(28090), + 180: uint16(28091), + 181: uint16(28092), + 182: uint16(28093), + 183: uint16(28094), + 184: uint16(28097), + 185: uint16(28098), + 186: uint16(28099), + 187: uint16(28104), + 188: uint16(28105), + 189: uint16(28106), + }, + 27: { + 0: uint16(28109), + 1: uint16(28110), + 2: uint16(28111), + 3: uint16(28112), + 4: uint16(28114), + 5: uint16(28115), + 6: uint16(28116), + 7: uint16(28117), + 8: uint16(28119), + 9: uint16(28122), + 10: uint16(28123), + 11: uint16(28124), + 12: uint16(28127), + 13: uint16(28130), + 14: uint16(28131), + 15: uint16(28133), + 16: uint16(28135), + 17: uint16(28136), + 18: uint16(28137), + 19: uint16(28138), + 20: uint16(28141), + 21: uint16(28143), + 22: uint16(28144), + 23: uint16(28146), + 24: uint16(28148), + 25: uint16(28149), + 26: uint16(28150), + 27: uint16(28152), + 28: uint16(28154), + 29: uint16(28157), + 30: uint16(28158), + 31: uint16(28159), + 32: uint16(28160), + 33: uint16(28161), + 34: uint16(28162), + 35: uint16(28163), + 36: uint16(28164), + 37: uint16(28166), + 38: uint16(28167), + 39: uint16(28168), + 40: uint16(28169), + 41: uint16(28171), + 42: uint16(28175), + 43: uint16(28178), + 44: uint16(28179), + 45: uint16(28181), + 46: uint16(28184), + 47: uint16(28185), + 48: uint16(28187), + 49: uint16(28188), + 50: uint16(28190), + 51: uint16(28191), + 52: uint16(28194), + 53: uint16(28198), + 54: uint16(28199), + 55: uint16(28200), + 56: uint16(28202), + 57: uint16(28204), + 58: uint16(28206), + 59: uint16(28208), + 60: uint16(28209), + 61: uint16(28211), + 62: uint16(28213), + 63: uint16(28214), + 64: uint16(28215), + 65: uint16(28217), + 66: uint16(28219), + 67: uint16(28220), + 68: uint16(28221), + 69: uint16(28222), + 70: uint16(28223), + 71: uint16(28224), + 72: uint16(28225), + 73: uint16(28226), + 74: uint16(28229), + 75: uint16(28230), + 76: uint16(28231), + 77: uint16(28232), + 78: uint16(28233), + 79: uint16(28234), + 80: uint16(28235), + 81: uint16(28236), + 82: uint16(28239), + 83: uint16(28240), + 84: uint16(28241), + 85: uint16(28242), + 86: uint16(28245), + 87: uint16(28247), + 88: uint16(28249), + 89: uint16(28250), + 90: uint16(28252), + 91: uint16(28253), + 92: uint16(28254), + 93: uint16(28256), + 94: uint16(28257), + 95: uint16(28258), + 96: uint16(28259), + 97: uint16(28260), + 98: uint16(28261), + 99: uint16(28262), + 100: uint16(28263), + 101: uint16(28264), + 102: uint16(28265), + 103: uint16(28266), + 104: uint16(28268), + 105: uint16(28269), + 106: uint16(28271), + 107: uint16(28272), + 108: uint16(28273), + 109: uint16(28274), + 110: uint16(28275), + 111: uint16(28276), + 112: uint16(28277), + 113: uint16(28278), + 114: uint16(28279), + 115: uint16(28280), + 116: uint16(28281), + 117: uint16(28282), + 118: uint16(28283), + 119: uint16(28284), + 120: uint16(28285), + 121: uint16(28288), + 122: uint16(28289), + 123: uint16(28290), + 124: uint16(28292), + 125: uint16(28295), + 126: uint16(28296), + 127: uint16(28298), + 128: uint16(28299), + 129: uint16(28300), + 130: uint16(28301), + 131: uint16(28302), + 132: uint16(28305), + 133: uint16(28306), + 134: uint16(28307), + 135: uint16(28308), + 136: uint16(28309), + 137: uint16(28310), + 138: uint16(28311), + 139: uint16(28313), + 140: uint16(28314), + 141: uint16(28315), + 142: uint16(28317), + 143: uint16(28318), + 144: uint16(28320), + 145: uint16(28321), + 146: uint16(28323), + 147: uint16(28324), + 148: uint16(28326), + 149: uint16(28328), + 150: uint16(28329), + 151: uint16(28331), + 152: uint16(28332), + 153: uint16(28333), + 154: uint16(28334), + 155: uint16(28336), + 156: uint16(28339), + 157: uint16(28341), + 158: uint16(28344), + 159: uint16(28345), + 160: uint16(28348), + 161: uint16(28350), + 162: uint16(28351), + 163: uint16(28352), + 164: uint16(28355), + 165: uint16(28356), + 166: uint16(28357), + 167: uint16(28358), + 168: uint16(28360), + 169: uint16(28361), + 170: uint16(28362), + 171: uint16(28364), + 172: uint16(28365), + 173: uint16(28366), + 174: uint16(28368), + 175: uint16(28370), + 176: uint16(28374), + 177: uint16(28376), + 178: uint16(28377), + 179: uint16(28379), + 180: uint16(28380), + 181: uint16(28381), + 182: uint16(28387), + 183: uint16(28391), + 184: uint16(28394), + 185: uint16(28395), + 186: uint16(28396), + 187: uint16(28397), + 188: uint16(28398), + 189: uint16(28399), + }, + 28: { + 0: uint16(28400), + 1: uint16(28401), + 2: uint16(28402), + 3: uint16(28403), + 4: uint16(28405), + 5: uint16(28406), + 6: uint16(28407), + 7: uint16(28408), + 8: uint16(28410), + 9: uint16(28411), + 10: uint16(28412), + 11: uint16(28413), + 12: uint16(28414), + 13: uint16(28415), + 14: uint16(28416), + 15: uint16(28417), + 16: uint16(28419), + 17: uint16(28420), + 18: uint16(28421), + 19: uint16(28423), + 20: uint16(28424), + 21: uint16(28426), + 22: uint16(28427), + 23: uint16(28428), + 24: uint16(28429), + 25: uint16(28430), + 26: uint16(28432), + 27: uint16(28433), + 28: uint16(28434), + 29: uint16(28438), + 30: uint16(28439), + 31: uint16(28440), + 32: uint16(28441), + 33: uint16(28442), + 34: uint16(28443), + 35: uint16(28444), + 36: uint16(28445), + 37: uint16(28446), + 38: uint16(28447), + 39: uint16(28449), + 40: uint16(28450), + 41: uint16(28451), + 42: uint16(28453), + 43: uint16(28454), + 44: uint16(28455), + 45: uint16(28456), + 46: uint16(28460), + 47: uint16(28462), + 48: uint16(28464), + 49: uint16(28466), + 50: uint16(28468), + 51: uint16(28469), + 52: uint16(28471), + 53: uint16(28472), + 54: uint16(28473), + 55: uint16(28474), + 56: uint16(28475), + 57: uint16(28476), + 58: uint16(28477), + 59: uint16(28479), + 60: uint16(28480), + 61: uint16(28481), + 62: uint16(28482), + 63: uint16(28483), + 64: uint16(28484), + 65: uint16(28485), + 66: uint16(28488), + 67: uint16(28489), + 68: uint16(28490), + 69: uint16(28492), + 70: uint16(28494), + 71: uint16(28495), + 72: uint16(28496), + 73: uint16(28497), + 74: uint16(28498), + 75: uint16(28499), + 76: uint16(28500), + 77: uint16(28501), + 78: uint16(28502), + 79: uint16(28503), + 80: uint16(28505), + 81: uint16(28506), + 82: uint16(28507), + 83: uint16(28509), + 84: uint16(28511), + 85: uint16(28512), + 86: uint16(28513), + 87: uint16(28515), + 88: uint16(28516), + 89: uint16(28517), + 90: uint16(28519), + 91: uint16(28520), + 92: uint16(28521), + 93: uint16(28522), + 94: uint16(28523), + 95: uint16(28524), + 96: uint16(28527), + 97: uint16(28528), + 98: uint16(28529), + 99: uint16(28531), + 100: uint16(28533), + 101: uint16(28534), + 102: uint16(28535), + 103: uint16(28537), + 104: uint16(28539), + 105: uint16(28541), + 106: uint16(28542), + 107: uint16(28543), + 108: uint16(28544), + 109: uint16(28545), + 110: uint16(28546), + 111: uint16(28547), + 112: uint16(28549), + 113: uint16(28550), + 114: uint16(28551), + 115: uint16(28554), + 116: uint16(28555), + 117: uint16(28559), + 118: uint16(28560), + 119: uint16(28561), + 120: uint16(28562), + 121: uint16(28563), + 122: uint16(28564), + 123: uint16(28565), + 124: uint16(28566), + 125: uint16(28567), + 126: uint16(28568), + 127: uint16(28569), + 128: uint16(28570), + 129: uint16(28571), + 130: uint16(28573), + 131: uint16(28574), + 132: uint16(28575), + 133: uint16(28576), + 134: uint16(28578), + 135: uint16(28579), + 136: uint16(28580), + 137: uint16(28581), + 138: uint16(28582), + 139: uint16(28584), + 140: uint16(28585), + 141: uint16(28586), + 142: uint16(28587), + 143: uint16(28588), + 144: uint16(28589), + 145: uint16(28590), + 146: uint16(28591), + 147: uint16(28592), + 148: uint16(28593), + 149: uint16(28594), + 150: uint16(28596), + 151: uint16(28597), + 152: uint16(28599), + 153: uint16(28600), + 154: uint16(28602), + 155: uint16(28603), + 156: uint16(28604), + 157: uint16(28605), + 158: uint16(28606), + 159: uint16(28607), + 160: uint16(28609), + 161: uint16(28611), + 162: uint16(28612), + 163: uint16(28613), + 164: uint16(28614), + 165: uint16(28615), + 166: uint16(28616), + 167: uint16(28618), + 168: uint16(28619), + 169: uint16(28620), + 170: uint16(28621), + 171: uint16(28622), + 172: uint16(28623), + 173: uint16(28624), + 174: uint16(28627), + 175: uint16(28628), + 176: uint16(28629), + 177: uint16(28630), + 178: uint16(28631), + 179: uint16(28632), + 180: uint16(28633), + 181: uint16(28634), + 182: uint16(28635), + 183: uint16(28636), + 184: uint16(28637), + 185: uint16(28639), + 186: uint16(28642), + 187: uint16(28643), + 188: uint16(28644), + 189: uint16(28645), + }, + 29: { + 0: uint16(28646), + 1: uint16(28647), + 2: uint16(28648), + 3: uint16(28649), + 4: uint16(28650), + 5: uint16(28651), + 6: uint16(28652), + 7: uint16(28653), + 8: uint16(28656), + 9: uint16(28657), + 10: uint16(28658), + 11: uint16(28659), + 12: uint16(28660), + 13: uint16(28661), + 14: uint16(28662), + 15: uint16(28663), + 16: uint16(28664), + 17: uint16(28665), + 18: uint16(28666), + 19: uint16(28667), + 20: uint16(28668), + 21: uint16(28669), + 22: uint16(28670), + 23: uint16(28671), + 24: uint16(28672), + 25: uint16(28673), + 26: uint16(28674), + 27: uint16(28675), + 28: uint16(28676), + 29: uint16(28677), + 30: uint16(28678), + 31: uint16(28679), + 32: uint16(28680), + 33: uint16(28681), + 34: uint16(28682), + 35: uint16(28683), + 36: uint16(28684), + 37: uint16(28685), + 38: uint16(28686), + 39: uint16(28687), + 40: uint16(28688), + 41: uint16(28690), + 42: uint16(28691), + 43: uint16(28692), + 44: uint16(28693), + 45: uint16(28694), + 46: uint16(28695), + 47: uint16(28696), + 48: uint16(28697), + 49: uint16(28700), + 50: uint16(28701), + 51: uint16(28702), + 52: uint16(28703), + 53: uint16(28704), + 54: uint16(28705), + 55: uint16(28706), + 56: uint16(28708), + 57: uint16(28709), + 58: uint16(28710), + 59: uint16(28711), + 60: uint16(28712), + 61: uint16(28713), + 62: uint16(28714), + 63: uint16(28715), + 64: uint16(28716), + 65: uint16(28717), + 66: uint16(28718), + 67: uint16(28719), + 68: uint16(28720), + 69: uint16(28721), + 70: uint16(28722), + 71: uint16(28723), + 72: uint16(28724), + 73: uint16(28726), + 74: uint16(28727), + 75: uint16(28728), + 76: uint16(28730), + 77: uint16(28731), + 78: uint16(28732), + 79: uint16(28733), + 80: uint16(28734), + 81: uint16(28735), + 82: uint16(28736), + 83: uint16(28737), + 84: uint16(28738), + 85: uint16(28739), + 86: uint16(28740), + 87: uint16(28741), + 88: uint16(28742), + 89: uint16(28743), + 90: uint16(28744), + 91: uint16(28745), + 92: uint16(28746), + 93: uint16(28747), + 94: uint16(28749), + 95: uint16(28750), + 96: uint16(28752), + 97: uint16(28753), + 98: uint16(28754), + 99: uint16(28755), + 100: uint16(28756), + 101: uint16(28757), + 102: uint16(28758), + 103: uint16(28759), + 104: uint16(28760), + 105: uint16(28761), + 106: uint16(28762), + 107: uint16(28763), + 108: uint16(28764), + 109: uint16(28765), + 110: uint16(28767), + 111: uint16(28768), + 112: uint16(28769), + 113: uint16(28770), + 114: uint16(28771), + 115: uint16(28772), + 116: uint16(28773), + 117: uint16(28774), + 118: uint16(28775), + 119: uint16(28776), + 120: uint16(28777), + 121: uint16(28778), + 122: uint16(28782), + 123: uint16(28785), + 124: uint16(28786), + 125: uint16(28787), + 126: uint16(28788), + 127: uint16(28791), + 128: uint16(28793), + 129: uint16(28794), + 130: uint16(28795), + 131: uint16(28797), + 132: uint16(28801), + 133: uint16(28802), + 134: uint16(28803), + 135: uint16(28804), + 136: uint16(28806), + 137: uint16(28807), + 138: uint16(28808), + 139: uint16(28811), + 140: uint16(28812), + 141: uint16(28813), + 142: uint16(28815), + 143: uint16(28816), + 144: uint16(28817), + 145: uint16(28819), + 146: uint16(28823), + 147: uint16(28824), + 148: uint16(28826), + 149: uint16(28827), + 150: uint16(28830), + 151: uint16(28831), + 152: uint16(28832), + 153: uint16(28833), + 154: uint16(28834), + 155: uint16(28835), + 156: uint16(28836), + 157: uint16(28837), + 158: uint16(28838), + 159: uint16(28839), + 160: uint16(28840), + 161: uint16(28841), + 162: uint16(28842), + 163: uint16(28848), + 164: uint16(28850), + 165: uint16(28852), + 166: uint16(28853), + 167: uint16(28854), + 168: uint16(28858), + 169: uint16(28862), + 170: uint16(28863), + 171: uint16(28868), + 172: uint16(28869), + 173: uint16(28870), + 174: uint16(28871), + 175: uint16(28873), + 176: uint16(28875), + 177: uint16(28876), + 178: uint16(28877), + 179: uint16(28878), + 180: uint16(28879), + 181: uint16(28880), + 182: uint16(28881), + 183: uint16(28882), + 184: uint16(28883), + 185: uint16(28884), + 186: uint16(28885), + 187: uint16(28886), + 188: uint16(28887), + 189: uint16(28890), + }, + 30: { + 0: uint16(28892), + 1: uint16(28893), + 2: uint16(28894), + 3: uint16(28896), + 4: uint16(28897), + 5: uint16(28898), + 6: uint16(28899), + 7: uint16(28901), + 8: uint16(28906), + 9: uint16(28910), + 10: uint16(28912), + 11: uint16(28913), + 12: uint16(28914), + 13: uint16(28915), + 14: uint16(28916), + 15: uint16(28917), + 16: uint16(28918), + 17: uint16(28920), + 18: uint16(28922), + 19: uint16(28923), + 20: uint16(28924), + 21: uint16(28926), + 22: uint16(28927), + 23: uint16(28928), + 24: uint16(28929), + 25: uint16(28930), + 26: uint16(28931), + 27: uint16(28932), + 28: uint16(28933), + 29: uint16(28934), + 30: uint16(28935), + 31: uint16(28936), + 32: uint16(28939), + 33: uint16(28940), + 34: uint16(28941), + 35: uint16(28942), + 36: uint16(28943), + 37: uint16(28945), + 38: uint16(28946), + 39: uint16(28948), + 40: uint16(28951), + 41: uint16(28955), + 42: uint16(28956), + 43: uint16(28957), + 44: uint16(28958), + 45: uint16(28959), + 46: uint16(28960), + 47: uint16(28961), + 48: uint16(28962), + 49: uint16(28963), + 50: uint16(28964), + 51: uint16(28965), + 52: uint16(28967), + 53: uint16(28968), + 54: uint16(28969), + 55: uint16(28970), + 56: uint16(28971), + 57: uint16(28972), + 58: uint16(28973), + 59: uint16(28974), + 60: uint16(28978), + 61: uint16(28979), + 62: uint16(28980), + 63: uint16(28981), + 64: uint16(28983), + 65: uint16(28984), + 66: uint16(28985), + 67: uint16(28986), + 68: uint16(28987), + 69: uint16(28988), + 70: uint16(28989), + 71: uint16(28990), + 72: uint16(28991), + 73: uint16(28992), + 74: uint16(28993), + 75: uint16(28994), + 76: uint16(28995), + 77: uint16(28996), + 78: uint16(28998), + 79: uint16(28999), + 80: uint16(29000), + 81: uint16(29001), + 82: uint16(29003), + 83: uint16(29005), + 84: uint16(29007), + 85: uint16(29008), + 86: uint16(29009), + 87: uint16(29010), + 88: uint16(29011), + 89: uint16(29012), + 90: uint16(29013), + 91: uint16(29014), + 92: uint16(29015), + 93: uint16(29016), + 94: uint16(29017), + 95: uint16(29018), + 96: uint16(29019), + 97: uint16(29021), + 98: uint16(29023), + 99: uint16(29024), + 100: uint16(29025), + 101: uint16(29026), + 102: uint16(29027), + 103: uint16(29029), + 104: uint16(29033), + 105: uint16(29034), + 106: uint16(29035), + 107: uint16(29036), + 108: uint16(29037), + 109: uint16(29039), + 110: uint16(29040), + 111: uint16(29041), + 112: uint16(29044), + 113: uint16(29045), + 114: uint16(29046), + 115: uint16(29047), + 116: uint16(29049), + 117: uint16(29051), + 118: uint16(29052), + 119: uint16(29054), + 120: uint16(29055), + 121: uint16(29056), + 122: uint16(29057), + 123: uint16(29058), + 124: uint16(29059), + 125: uint16(29061), + 126: uint16(29062), + 127: uint16(29063), + 128: uint16(29064), + 129: uint16(29065), + 130: uint16(29067), + 131: uint16(29068), + 132: uint16(29069), + 133: uint16(29070), + 134: uint16(29072), + 135: uint16(29073), + 136: uint16(29074), + 137: uint16(29075), + 138: uint16(29077), + 139: uint16(29078), + 140: uint16(29079), + 141: uint16(29082), + 142: uint16(29083), + 143: uint16(29084), + 144: uint16(29085), + 145: uint16(29086), + 146: uint16(29089), + 147: uint16(29090), + 148: uint16(29091), + 149: uint16(29092), + 150: uint16(29093), + 151: uint16(29094), + 152: uint16(29095), + 153: uint16(29097), + 154: uint16(29098), + 155: uint16(29099), + 156: uint16(29101), + 157: uint16(29102), + 158: uint16(29103), + 159: uint16(29104), + 160: uint16(29105), + 161: uint16(29106), + 162: uint16(29108), + 163: uint16(29110), + 164: uint16(29111), + 165: uint16(29112), + 166: uint16(29114), + 167: uint16(29115), + 168: uint16(29116), + 169: uint16(29117), + 170: uint16(29118), + 171: uint16(29119), + 172: uint16(29120), + 173: uint16(29121), + 174: uint16(29122), + 175: uint16(29124), + 176: uint16(29125), + 177: uint16(29126), + 178: uint16(29127), + 179: uint16(29128), + 180: uint16(29129), + 181: uint16(29130), + 182: uint16(29131), + 183: uint16(29132), + 184: uint16(29133), + 185: uint16(29135), + 186: uint16(29136), + 187: uint16(29137), + 188: uint16(29138), + 189: uint16(29139), + }, + 31: { + 0: uint16(29142), + 1: uint16(29143), + 2: uint16(29144), + 3: uint16(29145), + 4: uint16(29146), + 5: uint16(29147), + 6: uint16(29148), + 7: uint16(29149), + 8: uint16(29150), + 9: uint16(29151), + 10: uint16(29153), + 11: uint16(29154), + 12: uint16(29155), + 13: uint16(29156), + 14: uint16(29158), + 15: uint16(29160), + 16: uint16(29161), + 17: uint16(29162), + 18: uint16(29163), + 19: uint16(29164), + 20: uint16(29165), + 21: uint16(29167), + 22: uint16(29168), + 23: uint16(29169), + 24: uint16(29170), + 25: uint16(29171), + 26: uint16(29172), + 27: uint16(29173), + 28: uint16(29174), + 29: uint16(29175), + 30: uint16(29176), + 31: uint16(29178), + 32: uint16(29179), + 33: uint16(29180), + 34: uint16(29181), + 35: uint16(29182), + 36: uint16(29183), + 37: uint16(29184), + 38: uint16(29185), + 39: uint16(29186), + 40: uint16(29187), + 41: uint16(29188), + 42: uint16(29189), + 43: uint16(29191), + 44: uint16(29192), + 45: uint16(29193), + 46: uint16(29194), + 47: uint16(29195), + 48: uint16(29196), + 49: uint16(29197), + 50: uint16(29198), + 51: uint16(29199), + 52: uint16(29200), + 53: uint16(29201), + 54: uint16(29202), + 55: uint16(29203), + 56: uint16(29204), + 57: uint16(29205), + 58: uint16(29206), + 59: uint16(29207), + 60: uint16(29208), + 61: uint16(29209), + 62: uint16(29210), + 63: uint16(29211), + 64: uint16(29212), + 65: uint16(29214), + 66: uint16(29215), + 67: uint16(29216), + 68: uint16(29217), + 69: uint16(29218), + 70: uint16(29219), + 71: uint16(29220), + 72: uint16(29221), + 73: uint16(29222), + 74: uint16(29223), + 75: uint16(29225), + 76: uint16(29227), + 77: uint16(29229), + 78: uint16(29230), + 79: uint16(29231), + 80: uint16(29234), + 81: uint16(29235), + 82: uint16(29236), + 83: uint16(29242), + 84: uint16(29244), + 85: uint16(29246), + 86: uint16(29248), + 87: uint16(29249), + 88: uint16(29250), + 89: uint16(29251), + 90: uint16(29252), + 91: uint16(29253), + 92: uint16(29254), + 93: uint16(29257), + 94: uint16(29258), + 95: uint16(29259), + 96: uint16(29262), + 97: uint16(29263), + 98: uint16(29264), + 99: uint16(29265), + 100: uint16(29267), + 101: uint16(29268), + 102: uint16(29269), + 103: uint16(29271), + 104: uint16(29272), + 105: uint16(29274), + 106: uint16(29276), + 107: uint16(29278), + 108: uint16(29280), + 109: uint16(29283), + 110: uint16(29284), + 111: uint16(29285), + 112: uint16(29288), + 113: uint16(29290), + 114: uint16(29291), + 115: uint16(29292), + 116: uint16(29293), + 117: uint16(29296), + 118: uint16(29297), + 119: uint16(29299), + 120: uint16(29300), + 121: uint16(29302), + 122: uint16(29303), + 123: uint16(29304), + 124: uint16(29307), + 125: uint16(29308), + 126: uint16(29309), + 127: uint16(29314), + 128: uint16(29315), + 129: uint16(29317), + 130: uint16(29318), + 131: uint16(29319), + 132: uint16(29320), + 133: uint16(29321), + 134: uint16(29324), + 135: uint16(29326), + 136: uint16(29328), + 137: uint16(29329), + 138: uint16(29331), + 139: uint16(29332), + 140: uint16(29333), + 141: uint16(29334), + 142: uint16(29335), + 143: uint16(29336), + 144: uint16(29337), + 145: uint16(29338), + 146: uint16(29339), + 147: uint16(29340), + 148: uint16(29341), + 149: uint16(29342), + 150: uint16(29344), + 151: uint16(29345), + 152: uint16(29346), + 153: uint16(29347), + 154: uint16(29348), + 155: uint16(29349), + 156: uint16(29350), + 157: uint16(29351), + 158: uint16(29352), + 159: uint16(29353), + 160: uint16(29354), + 161: uint16(29355), + 162: uint16(29358), + 163: uint16(29361), + 164: uint16(29362), + 165: uint16(29363), + 166: uint16(29365), + 167: uint16(29370), + 168: uint16(29371), + 169: uint16(29372), + 170: uint16(29373), + 171: uint16(29374), + 172: uint16(29375), + 173: uint16(29376), + 174: uint16(29381), + 175: uint16(29382), + 176: uint16(29383), + 177: uint16(29385), + 178: uint16(29386), + 179: uint16(29387), + 180: uint16(29388), + 181: uint16(29391), + 182: uint16(29393), + 183: uint16(29395), + 184: uint16(29396), + 185: uint16(29397), + 186: uint16(29398), + 187: uint16(29400), + 188: uint16(29402), + 189: uint16(29403), + }, + 32: { + 0: uint16(58566), + 1: uint16(58567), + 2: uint16(58568), + 3: uint16(58569), + 4: uint16(58570), + 5: uint16(58571), + 6: uint16(58572), + 7: uint16(58573), + 8: uint16(58574), + 9: uint16(58575), + 10: uint16(58576), + 11: uint16(58577), + 12: uint16(58578), + 13: uint16(58579), + 14: uint16(58580), + 15: uint16(58581), + 16: uint16(58582), + 17: uint16(58583), + 18: uint16(58584), + 19: uint16(58585), + 20: uint16(58586), + 21: uint16(58587), + 22: uint16(58588), + 23: uint16(58589), + 24: uint16(58590), + 25: uint16(58591), + 26: uint16(58592), + 27: uint16(58593), + 28: uint16(58594), + 29: uint16(58595), + 30: uint16(58596), + 31: uint16(58597), + 32: uint16(58598), + 33: uint16(58599), + 34: uint16(58600), + 35: uint16(58601), + 36: uint16(58602), + 37: uint16(58603), + 38: uint16(58604), + 39: uint16(58605), + 40: uint16(58606), + 41: uint16(58607), + 42: uint16(58608), + 43: uint16(58609), + 44: uint16(58610), + 45: uint16(58611), + 46: uint16(58612), + 47: uint16(58613), + 48: uint16(58614), + 49: uint16(58615), + 50: uint16(58616), + 51: uint16(58617), + 52: uint16(58618), + 53: uint16(58619), + 54: uint16(58620), + 55: uint16(58621), + 56: uint16(58622), + 57: uint16(58623), + 58: uint16(58624), + 59: uint16(58625), + 60: uint16(58626), + 61: uint16(58627), + 62: uint16(58628), + 63: uint16(58629), + 64: uint16(58630), + 65: uint16(58631), + 66: uint16(58632), + 67: uint16(58633), + 68: uint16(58634), + 69: uint16(58635), + 70: uint16(58636), + 71: uint16(58637), + 72: uint16(58638), + 73: uint16(58639), + 74: uint16(58640), + 75: uint16(58641), + 76: uint16(58642), + 77: uint16(58643), + 78: uint16(58644), + 79: uint16(58645), + 80: uint16(58646), + 81: uint16(58647), + 82: uint16(58648), + 83: uint16(58649), + 84: uint16(58650), + 85: uint16(58651), + 86: uint16(58652), + 87: uint16(58653), + 88: uint16(58654), + 89: uint16(58655), + 90: uint16(58656), + 91: uint16(58657), + 92: uint16(58658), + 93: uint16(58659), + 94: uint16(58660), + 95: uint16(58661), + 96: uint16(12288), + 97: uint16(12289), + 98: uint16(12290), + 99: uint16(183), + 100: uint16(713), + 101: uint16(711), + 102: uint16(168), + 103: uint16(12291), + 104: uint16(12293), + 105: uint16(8212), + 106: uint16(65374), + 107: uint16(8214), + 108: uint16(8230), + 109: uint16(8216), + 110: uint16(8217), + 111: uint16(8220), + 112: uint16(8221), + 113: uint16(12308), + 114: uint16(12309), + 115: uint16(12296), + 116: uint16(12297), + 117: uint16(12298), + 118: uint16(12299), + 119: uint16(12300), + 120: uint16(12301), + 121: uint16(12302), + 122: uint16(12303), + 123: uint16(12310), + 124: uint16(12311), + 125: uint16(12304), + 126: uint16(12305), + 127: uint16(177), + 128: uint16(215), + 129: uint16(247), + 130: uint16(8758), + 131: uint16(8743), + 132: uint16(8744), + 133: uint16(8721), + 134: uint16(8719), + 135: uint16(8746), + 136: uint16(8745), + 137: uint16(8712), + 138: uint16(8759), + 139: uint16(8730), + 140: uint16(8869), + 141: uint16(8741), + 142: uint16(8736), + 143: uint16(8978), + 144: uint16(8857), + 145: uint16(8747), + 146: uint16(8750), + 147: uint16(8801), + 148: uint16(8780), + 149: uint16(8776), + 150: uint16(8765), + 151: uint16(8733), + 152: uint16(8800), + 153: uint16(8814), + 154: uint16(8815), + 155: uint16(8804), + 156: uint16(8805), + 157: uint16(8734), + 158: uint16(8757), + 159: uint16(8756), + 160: uint16(9794), + 161: uint16(9792), + 162: uint16(176), + 163: uint16(8242), + 164: uint16(8243), + 165: uint16(8451), + 166: uint16(65284), + 167: uint16(164), + 168: uint16(65504), + 169: uint16(65505), + 170: uint16(8240), + 171: uint16(167), + 172: uint16(8470), + 173: uint16(9734), + 174: uint16(9733), + 175: uint16(9675), + 176: uint16(9679), + 177: uint16(9678), + 178: uint16(9671), + 179: uint16(9670), + 180: uint16(9633), + 181: uint16(9632), + 182: uint16(9651), + 183: uint16(9650), + 184: uint16(8251), + 185: uint16(8594), + 186: uint16(8592), + 187: uint16(8593), + 188: uint16(8595), + 189: uint16(12307), + }, + 33: { + 0: uint16(58662), + 1: uint16(58663), + 2: uint16(58664), + 3: uint16(58665), + 4: uint16(58666), + 5: uint16(58667), + 6: uint16(58668), + 7: uint16(58669), + 8: uint16(58670), + 9: uint16(58671), + 10: uint16(58672), + 11: uint16(58673), + 12: uint16(58674), + 13: uint16(58675), + 14: uint16(58676), + 15: uint16(58677), + 16: uint16(58678), + 17: uint16(58679), + 18: uint16(58680), + 19: uint16(58681), + 20: uint16(58682), + 21: uint16(58683), + 22: uint16(58684), + 23: uint16(58685), + 24: uint16(58686), + 25: uint16(58687), + 26: uint16(58688), + 27: uint16(58689), + 28: uint16(58690), + 29: uint16(58691), + 30: uint16(58692), + 31: uint16(58693), + 32: uint16(58694), + 33: uint16(58695), + 34: uint16(58696), + 35: uint16(58697), + 36: uint16(58698), + 37: uint16(58699), + 38: uint16(58700), + 39: uint16(58701), + 40: uint16(58702), + 41: uint16(58703), + 42: uint16(58704), + 43: uint16(58705), + 44: uint16(58706), + 45: uint16(58707), + 46: uint16(58708), + 47: uint16(58709), + 48: uint16(58710), + 49: uint16(58711), + 50: uint16(58712), + 51: uint16(58713), + 52: uint16(58714), + 53: uint16(58715), + 54: uint16(58716), + 55: uint16(58717), + 56: uint16(58718), + 57: uint16(58719), + 58: uint16(58720), + 59: uint16(58721), + 60: uint16(58722), + 61: uint16(58723), + 62: uint16(58724), + 63: uint16(58725), + 64: uint16(58726), + 65: uint16(58727), + 66: uint16(58728), + 67: uint16(58729), + 68: uint16(58730), + 69: uint16(58731), + 70: uint16(58732), + 71: uint16(58733), + 72: uint16(58734), + 73: uint16(58735), + 74: uint16(58736), + 75: uint16(58737), + 76: uint16(58738), + 77: uint16(58739), + 78: uint16(58740), + 79: uint16(58741), + 80: uint16(58742), + 81: uint16(58743), + 82: uint16(58744), + 83: uint16(58745), + 84: uint16(58746), + 85: uint16(58747), + 86: uint16(58748), + 87: uint16(58749), + 88: uint16(58750), + 89: uint16(58751), + 90: uint16(58752), + 91: uint16(58753), + 92: uint16(58754), + 93: uint16(58755), + 94: uint16(58756), + 95: uint16(58757), + 96: uint16(8560), + 97: uint16(8561), + 98: uint16(8562), + 99: uint16(8563), + 100: uint16(8564), + 101: uint16(8565), + 102: uint16(8566), + 103: uint16(8567), + 104: uint16(8568), + 105: uint16(8569), + 106: uint16(59238), + 107: uint16(59239), + 108: uint16(59240), + 109: uint16(59241), + 110: uint16(59242), + 111: uint16(59243), + 112: uint16(9352), + 113: uint16(9353), + 114: uint16(9354), + 115: uint16(9355), + 116: uint16(9356), + 117: uint16(9357), + 118: uint16(9358), + 119: uint16(9359), + 120: uint16(9360), + 121: uint16(9361), + 122: uint16(9362), + 123: uint16(9363), + 124: uint16(9364), + 125: uint16(9365), + 126: uint16(9366), + 127: uint16(9367), + 128: uint16(9368), + 129: uint16(9369), + 130: uint16(9370), + 131: uint16(9371), + 132: uint16(9332), + 133: uint16(9333), + 134: uint16(9334), + 135: uint16(9335), + 136: uint16(9336), + 137: uint16(9337), + 138: uint16(9338), + 139: uint16(9339), + 140: uint16(9340), + 141: uint16(9341), + 142: uint16(9342), + 143: uint16(9343), + 144: uint16(9344), + 145: uint16(9345), + 146: uint16(9346), + 147: uint16(9347), + 148: uint16(9348), + 149: uint16(9349), + 150: uint16(9350), + 151: uint16(9351), + 152: uint16(9312), + 153: uint16(9313), + 154: uint16(9314), + 155: uint16(9315), + 156: uint16(9316), + 157: uint16(9317), + 158: uint16(9318), + 159: uint16(9319), + 160: uint16(9320), + 161: uint16(9321), + 162: uint16(8364), + 163: uint16(59245), + 164: uint16(12832), + 165: uint16(12833), + 166: uint16(12834), + 167: uint16(12835), + 168: uint16(12836), + 169: uint16(12837), + 170: uint16(12838), + 171: uint16(12839), + 172: uint16(12840), + 173: uint16(12841), + 174: uint16(59246), + 175: uint16(59247), + 176: uint16(8544), + 177: uint16(8545), + 178: uint16(8546), + 179: uint16(8547), + 180: uint16(8548), + 181: uint16(8549), + 182: uint16(8550), + 183: uint16(8551), + 184: uint16(8552), + 185: uint16(8553), + 186: uint16(8554), + 187: uint16(8555), + 188: uint16(59248), + 189: uint16(59249), + }, + 34: { + 0: uint16(58758), + 1: uint16(58759), + 2: uint16(58760), + 3: uint16(58761), + 4: uint16(58762), + 5: uint16(58763), + 6: uint16(58764), + 7: uint16(58765), + 8: uint16(58766), + 9: uint16(58767), + 10: uint16(58768), + 11: uint16(58769), + 12: uint16(58770), + 13: uint16(58771), + 14: uint16(58772), + 15: uint16(58773), + 16: uint16(58774), + 17: uint16(58775), + 18: uint16(58776), + 19: uint16(58777), + 20: uint16(58778), + 21: uint16(58779), + 22: uint16(58780), + 23: uint16(58781), + 24: uint16(58782), + 25: uint16(58783), + 26: uint16(58784), + 27: uint16(58785), + 28: uint16(58786), + 29: uint16(58787), + 30: uint16(58788), + 31: uint16(58789), + 32: uint16(58790), + 33: uint16(58791), + 34: uint16(58792), + 35: uint16(58793), + 36: uint16(58794), + 37: uint16(58795), + 38: uint16(58796), + 39: uint16(58797), + 40: uint16(58798), + 41: uint16(58799), + 42: uint16(58800), + 43: uint16(58801), + 44: uint16(58802), + 45: uint16(58803), + 46: uint16(58804), + 47: uint16(58805), + 48: uint16(58806), + 49: uint16(58807), + 50: uint16(58808), + 51: uint16(58809), + 52: uint16(58810), + 53: uint16(58811), + 54: uint16(58812), + 55: uint16(58813), + 56: uint16(58814), + 57: uint16(58815), + 58: uint16(58816), + 59: uint16(58817), + 60: uint16(58818), + 61: uint16(58819), + 62: uint16(58820), + 63: uint16(58821), + 64: uint16(58822), + 65: uint16(58823), + 66: uint16(58824), + 67: uint16(58825), + 68: uint16(58826), + 69: uint16(58827), + 70: uint16(58828), + 71: uint16(58829), + 72: uint16(58830), + 73: uint16(58831), + 74: uint16(58832), + 75: uint16(58833), + 76: uint16(58834), + 77: uint16(58835), + 78: uint16(58836), + 79: uint16(58837), + 80: uint16(58838), + 81: uint16(58839), + 82: uint16(58840), + 83: uint16(58841), + 84: uint16(58842), + 85: uint16(58843), + 86: uint16(58844), + 87: uint16(58845), + 88: uint16(58846), + 89: uint16(58847), + 90: uint16(58848), + 91: uint16(58849), + 92: uint16(58850), + 93: uint16(58851), + 94: uint16(58852), + 95: uint16(58853), + 96: uint16(65281), + 97: uint16(65282), + 98: uint16(65283), + 99: uint16(65509), + 100: uint16(65285), + 101: uint16(65286), + 102: uint16(65287), + 103: uint16(65288), + 104: uint16(65289), + 105: uint16(65290), + 106: uint16(65291), + 107: uint16(65292), + 108: uint16(65293), + 109: uint16(65294), + 110: uint16(65295), + 111: uint16(65296), + 112: uint16(65297), + 113: uint16(65298), + 114: uint16(65299), + 115: uint16(65300), + 116: uint16(65301), + 117: uint16(65302), + 118: uint16(65303), + 119: uint16(65304), + 120: uint16(65305), + 121: uint16(65306), + 122: uint16(65307), + 123: uint16(65308), + 124: uint16(65309), + 125: uint16(65310), + 126: uint16(65311), + 127: uint16(65312), + 128: uint16(65313), + 129: uint16(65314), + 130: uint16(65315), + 131: uint16(65316), + 132: uint16(65317), + 133: uint16(65318), + 134: uint16(65319), + 135: uint16(65320), + 136: uint16(65321), + 137: uint16(65322), + 138: uint16(65323), + 139: uint16(65324), + 140: uint16(65325), + 141: uint16(65326), + 142: uint16(65327), + 143: uint16(65328), + 144: uint16(65329), + 145: uint16(65330), + 146: uint16(65331), + 147: uint16(65332), + 148: uint16(65333), + 149: uint16(65334), + 150: uint16(65335), + 151: uint16(65336), + 152: uint16(65337), + 153: uint16(65338), + 154: uint16(65339), + 155: uint16(65340), + 156: uint16(65341), + 157: uint16(65342), + 158: uint16(65343), + 159: uint16(65344), + 160: uint16(65345), + 161: uint16(65346), + 162: uint16(65347), + 163: uint16(65348), + 164: uint16(65349), + 165: uint16(65350), + 166: uint16(65351), + 167: uint16(65352), + 168: uint16(65353), + 169: uint16(65354), + 170: uint16(65355), + 171: uint16(65356), + 172: uint16(65357), + 173: uint16(65358), + 174: uint16(65359), + 175: uint16(65360), + 176: uint16(65361), + 177: uint16(65362), + 178: uint16(65363), + 179: uint16(65364), + 180: uint16(65365), + 181: uint16(65366), + 182: uint16(65367), + 183: uint16(65368), + 184: uint16(65369), + 185: uint16(65370), + 186: uint16(65371), + 187: uint16(65372), + 188: uint16(65373), + 189: uint16(65507), + }, + 35: { + 0: uint16(58854), + 1: uint16(58855), + 2: uint16(58856), + 3: uint16(58857), + 4: uint16(58858), + 5: uint16(58859), + 6: uint16(58860), + 7: uint16(58861), + 8: uint16(58862), + 9: uint16(58863), + 10: uint16(58864), + 11: uint16(58865), + 12: uint16(58866), + 13: uint16(58867), + 14: uint16(58868), + 15: uint16(58869), + 16: uint16(58870), + 17: uint16(58871), + 18: uint16(58872), + 19: uint16(58873), + 20: uint16(58874), + 21: uint16(58875), + 22: uint16(58876), + 23: uint16(58877), + 24: uint16(58878), + 25: uint16(58879), + 26: uint16(58880), + 27: uint16(58881), + 28: uint16(58882), + 29: uint16(58883), + 30: uint16(58884), + 31: uint16(58885), + 32: uint16(58886), + 33: uint16(58887), + 34: uint16(58888), + 35: uint16(58889), + 36: uint16(58890), + 37: uint16(58891), + 38: uint16(58892), + 39: uint16(58893), + 40: uint16(58894), + 41: uint16(58895), + 42: uint16(58896), + 43: uint16(58897), + 44: uint16(58898), + 45: uint16(58899), + 46: uint16(58900), + 47: uint16(58901), + 48: uint16(58902), + 49: uint16(58903), + 50: uint16(58904), + 51: uint16(58905), + 52: uint16(58906), + 53: uint16(58907), + 54: uint16(58908), + 55: uint16(58909), + 56: uint16(58910), + 57: uint16(58911), + 58: uint16(58912), + 59: uint16(58913), + 60: uint16(58914), + 61: uint16(58915), + 62: uint16(58916), + 63: uint16(58917), + 64: uint16(58918), + 65: uint16(58919), + 66: uint16(58920), + 67: uint16(58921), + 68: uint16(58922), + 69: uint16(58923), + 70: uint16(58924), + 71: uint16(58925), + 72: uint16(58926), + 73: uint16(58927), + 74: uint16(58928), + 75: uint16(58929), + 76: uint16(58930), + 77: uint16(58931), + 78: uint16(58932), + 79: uint16(58933), + 80: uint16(58934), + 81: uint16(58935), + 82: uint16(58936), + 83: uint16(58937), + 84: uint16(58938), + 85: uint16(58939), + 86: uint16(58940), + 87: uint16(58941), + 88: uint16(58942), + 89: uint16(58943), + 90: uint16(58944), + 91: uint16(58945), + 92: uint16(58946), + 93: uint16(58947), + 94: uint16(58948), + 95: uint16(58949), + 96: uint16(12353), + 97: uint16(12354), + 98: uint16(12355), + 99: uint16(12356), + 100: uint16(12357), + 101: uint16(12358), + 102: uint16(12359), + 103: uint16(12360), + 104: uint16(12361), + 105: uint16(12362), + 106: uint16(12363), + 107: uint16(12364), + 108: uint16(12365), + 109: uint16(12366), + 110: uint16(12367), + 111: uint16(12368), + 112: uint16(12369), + 113: uint16(12370), + 114: uint16(12371), + 115: uint16(12372), + 116: uint16(12373), + 117: uint16(12374), + 118: uint16(12375), + 119: uint16(12376), + 120: uint16(12377), + 121: uint16(12378), + 122: uint16(12379), + 123: uint16(12380), + 124: uint16(12381), + 125: uint16(12382), + 126: uint16(12383), + 127: uint16(12384), + 128: uint16(12385), + 129: uint16(12386), + 130: uint16(12387), + 131: uint16(12388), + 132: uint16(12389), + 133: uint16(12390), + 134: uint16(12391), + 135: uint16(12392), + 136: uint16(12393), + 137: uint16(12394), + 138: uint16(12395), + 139: uint16(12396), + 140: uint16(12397), + 141: uint16(12398), + 142: uint16(12399), + 143: uint16(12400), + 144: uint16(12401), + 145: uint16(12402), + 146: uint16(12403), + 147: uint16(12404), + 148: uint16(12405), + 149: uint16(12406), + 150: uint16(12407), + 151: uint16(12408), + 152: uint16(12409), + 153: uint16(12410), + 154: uint16(12411), + 155: uint16(12412), + 156: uint16(12413), + 157: uint16(12414), + 158: uint16(12415), + 159: uint16(12416), + 160: uint16(12417), + 161: uint16(12418), + 162: uint16(12419), + 163: uint16(12420), + 164: uint16(12421), + 165: uint16(12422), + 166: uint16(12423), + 167: uint16(12424), + 168: uint16(12425), + 169: uint16(12426), + 170: uint16(12427), + 171: uint16(12428), + 172: uint16(12429), + 173: uint16(12430), + 174: uint16(12431), + 175: uint16(12432), + 176: uint16(12433), + 177: uint16(12434), + 178: uint16(12435), + 179: uint16(59250), + 180: uint16(59251), + 181: uint16(59252), + 182: uint16(59253), + 183: uint16(59254), + 184: uint16(59255), + 185: uint16(59256), + 186: uint16(59257), + 187: uint16(59258), + 188: uint16(59259), + 189: uint16(59260), + }, + 36: { + 0: uint16(58950), + 1: uint16(58951), + 2: uint16(58952), + 3: uint16(58953), + 4: uint16(58954), + 5: uint16(58955), + 6: uint16(58956), + 7: uint16(58957), + 8: uint16(58958), + 9: uint16(58959), + 10: uint16(58960), + 11: uint16(58961), + 12: uint16(58962), + 13: uint16(58963), + 14: uint16(58964), + 15: uint16(58965), + 16: uint16(58966), + 17: uint16(58967), + 18: uint16(58968), + 19: uint16(58969), + 20: uint16(58970), + 21: uint16(58971), + 22: uint16(58972), + 23: uint16(58973), + 24: uint16(58974), + 25: uint16(58975), + 26: uint16(58976), + 27: uint16(58977), + 28: uint16(58978), + 29: uint16(58979), + 30: uint16(58980), + 31: uint16(58981), + 32: uint16(58982), + 33: uint16(58983), + 34: uint16(58984), + 35: uint16(58985), + 36: uint16(58986), + 37: uint16(58987), + 38: uint16(58988), + 39: uint16(58989), + 40: uint16(58990), + 41: uint16(58991), + 42: uint16(58992), + 43: uint16(58993), + 44: uint16(58994), + 45: uint16(58995), + 46: uint16(58996), + 47: uint16(58997), + 48: uint16(58998), + 49: uint16(58999), + 50: uint16(59000), + 51: uint16(59001), + 52: uint16(59002), + 53: uint16(59003), + 54: uint16(59004), + 55: uint16(59005), + 56: uint16(59006), + 57: uint16(59007), + 58: uint16(59008), + 59: uint16(59009), + 60: uint16(59010), + 61: uint16(59011), + 62: uint16(59012), + 63: uint16(59013), + 64: uint16(59014), + 65: uint16(59015), + 66: uint16(59016), + 67: uint16(59017), + 68: uint16(59018), + 69: uint16(59019), + 70: uint16(59020), + 71: uint16(59021), + 72: uint16(59022), + 73: uint16(59023), + 74: uint16(59024), + 75: uint16(59025), + 76: uint16(59026), + 77: uint16(59027), + 78: uint16(59028), + 79: uint16(59029), + 80: uint16(59030), + 81: uint16(59031), + 82: uint16(59032), + 83: uint16(59033), + 84: uint16(59034), + 85: uint16(59035), + 86: uint16(59036), + 87: uint16(59037), + 88: uint16(59038), + 89: uint16(59039), + 90: uint16(59040), + 91: uint16(59041), + 92: uint16(59042), + 93: uint16(59043), + 94: uint16(59044), + 95: uint16(59045), + 96: uint16(12449), + 97: uint16(12450), + 98: uint16(12451), + 99: uint16(12452), + 100: uint16(12453), + 101: uint16(12454), + 102: uint16(12455), + 103: uint16(12456), + 104: uint16(12457), + 105: uint16(12458), + 106: uint16(12459), + 107: uint16(12460), + 108: uint16(12461), + 109: uint16(12462), + 110: uint16(12463), + 111: uint16(12464), + 112: uint16(12465), + 113: uint16(12466), + 114: uint16(12467), + 115: uint16(12468), + 116: uint16(12469), + 117: uint16(12470), + 118: uint16(12471), + 119: uint16(12472), + 120: uint16(12473), + 121: uint16(12474), + 122: uint16(12475), + 123: uint16(12476), + 124: uint16(12477), + 125: uint16(12478), + 126: uint16(12479), + 127: uint16(12480), + 128: uint16(12481), + 129: uint16(12482), + 130: uint16(12483), + 131: uint16(12484), + 132: uint16(12485), + 133: uint16(12486), + 134: uint16(12487), + 135: uint16(12488), + 136: uint16(12489), + 137: uint16(12490), + 138: uint16(12491), + 139: uint16(12492), + 140: uint16(12493), + 141: uint16(12494), + 142: uint16(12495), + 143: uint16(12496), + 144: uint16(12497), + 145: uint16(12498), + 146: uint16(12499), + 147: uint16(12500), + 148: uint16(12501), + 149: uint16(12502), + 150: uint16(12503), + 151: uint16(12504), + 152: uint16(12505), + 153: uint16(12506), + 154: uint16(12507), + 155: uint16(12508), + 156: uint16(12509), + 157: uint16(12510), + 158: uint16(12511), + 159: uint16(12512), + 160: uint16(12513), + 161: uint16(12514), + 162: uint16(12515), + 163: uint16(12516), + 164: uint16(12517), + 165: uint16(12518), + 166: uint16(12519), + 167: uint16(12520), + 168: uint16(12521), + 169: uint16(12522), + 170: uint16(12523), + 171: uint16(12524), + 172: uint16(12525), + 173: uint16(12526), + 174: uint16(12527), + 175: uint16(12528), + 176: uint16(12529), + 177: uint16(12530), + 178: uint16(12531), + 179: uint16(12532), + 180: uint16(12533), + 181: uint16(12534), + 182: uint16(59261), + 183: uint16(59262), + 184: uint16(59263), + 185: uint16(59264), + 186: uint16(59265), + 187: uint16(59266), + 188: uint16(59267), + 189: uint16(59268), + }, + 37: { + 0: uint16(59046), + 1: uint16(59047), + 2: uint16(59048), + 3: uint16(59049), + 4: uint16(59050), + 5: uint16(59051), + 6: uint16(59052), + 7: uint16(59053), + 8: uint16(59054), + 9: uint16(59055), + 10: uint16(59056), + 11: uint16(59057), + 12: uint16(59058), + 13: uint16(59059), + 14: uint16(59060), + 15: uint16(59061), + 16: uint16(59062), + 17: uint16(59063), + 18: uint16(59064), + 19: uint16(59065), + 20: uint16(59066), + 21: uint16(59067), + 22: uint16(59068), + 23: uint16(59069), + 24: uint16(59070), + 25: uint16(59071), + 26: uint16(59072), + 27: uint16(59073), + 28: uint16(59074), + 29: uint16(59075), + 30: uint16(59076), + 31: uint16(59077), + 32: uint16(59078), + 33: uint16(59079), + 34: uint16(59080), + 35: uint16(59081), + 36: uint16(59082), + 37: uint16(59083), + 38: uint16(59084), + 39: uint16(59085), + 40: uint16(59086), + 41: uint16(59087), + 42: uint16(59088), + 43: uint16(59089), + 44: uint16(59090), + 45: uint16(59091), + 46: uint16(59092), + 47: uint16(59093), + 48: uint16(59094), + 49: uint16(59095), + 50: uint16(59096), + 51: uint16(59097), + 52: uint16(59098), + 53: uint16(59099), + 54: uint16(59100), + 55: uint16(59101), + 56: uint16(59102), + 57: uint16(59103), + 58: uint16(59104), + 59: uint16(59105), + 60: uint16(59106), + 61: uint16(59107), + 62: uint16(59108), + 63: uint16(59109), + 64: uint16(59110), + 65: uint16(59111), + 66: uint16(59112), + 67: uint16(59113), + 68: uint16(59114), + 69: uint16(59115), + 70: uint16(59116), + 71: uint16(59117), + 72: uint16(59118), + 73: uint16(59119), + 74: uint16(59120), + 75: uint16(59121), + 76: uint16(59122), + 77: uint16(59123), + 78: uint16(59124), + 79: uint16(59125), + 80: uint16(59126), + 81: uint16(59127), + 82: uint16(59128), + 83: uint16(59129), + 84: uint16(59130), + 85: uint16(59131), + 86: uint16(59132), + 87: uint16(59133), + 88: uint16(59134), + 89: uint16(59135), + 90: uint16(59136), + 91: uint16(59137), + 92: uint16(59138), + 93: uint16(59139), + 94: uint16(59140), + 95: uint16(59141), + 96: uint16(913), + 97: uint16(914), + 98: uint16(915), + 99: uint16(916), + 100: uint16(917), + 101: uint16(918), + 102: uint16(919), + 103: uint16(920), + 104: uint16(921), + 105: uint16(922), + 106: uint16(923), + 107: uint16(924), + 108: uint16(925), + 109: uint16(926), + 110: uint16(927), + 111: uint16(928), + 112: uint16(929), + 113: uint16(931), + 114: uint16(932), + 115: uint16(933), + 116: uint16(934), + 117: uint16(935), + 118: uint16(936), + 119: uint16(937), + 120: uint16(59269), + 121: uint16(59270), + 122: uint16(59271), + 123: uint16(59272), + 124: uint16(59273), + 125: uint16(59274), + 126: uint16(59275), + 127: uint16(59276), + 128: uint16(945), + 129: uint16(946), + 130: uint16(947), + 131: uint16(948), + 132: uint16(949), + 133: uint16(950), + 134: uint16(951), + 135: uint16(952), + 136: uint16(953), + 137: uint16(954), + 138: uint16(955), + 139: uint16(956), + 140: uint16(957), + 141: uint16(958), + 142: uint16(959), + 143: uint16(960), + 144: uint16(961), + 145: uint16(963), + 146: uint16(964), + 147: uint16(965), + 148: uint16(966), + 149: uint16(967), + 150: uint16(968), + 151: uint16(969), + 152: uint16(59277), + 153: uint16(59278), + 154: uint16(59279), + 155: uint16(59280), + 156: uint16(59281), + 157: uint16(59282), + 158: uint16(59283), + 159: uint16(65077), + 160: uint16(65078), + 161: uint16(65081), + 162: uint16(65082), + 163: uint16(65087), + 164: uint16(65088), + 165: uint16(65085), + 166: uint16(65086), + 167: uint16(65089), + 168: uint16(65090), + 169: uint16(65091), + 170: uint16(65092), + 171: uint16(59284), + 172: uint16(59285), + 173: uint16(65083), + 174: uint16(65084), + 175: uint16(65079), + 176: uint16(65080), + 177: uint16(65073), + 178: uint16(59286), + 179: uint16(65075), + 180: uint16(65076), + 181: uint16(59287), + 182: uint16(59288), + 183: uint16(59289), + 184: uint16(59290), + 185: uint16(59291), + 186: uint16(59292), + 187: uint16(59293), + 188: uint16(59294), + 189: uint16(59295), + }, + 38: { + 0: uint16(59142), + 1: uint16(59143), + 2: uint16(59144), + 3: uint16(59145), + 4: uint16(59146), + 5: uint16(59147), + 6: uint16(59148), + 7: uint16(59149), + 8: uint16(59150), + 9: uint16(59151), + 10: uint16(59152), + 11: uint16(59153), + 12: uint16(59154), + 13: uint16(59155), + 14: uint16(59156), + 15: uint16(59157), + 16: uint16(59158), + 17: uint16(59159), + 18: uint16(59160), + 19: uint16(59161), + 20: uint16(59162), + 21: uint16(59163), + 22: uint16(59164), + 23: uint16(59165), + 24: uint16(59166), + 25: uint16(59167), + 26: uint16(59168), + 27: uint16(59169), + 28: uint16(59170), + 29: uint16(59171), + 30: uint16(59172), + 31: uint16(59173), + 32: uint16(59174), + 33: uint16(59175), + 34: uint16(59176), + 35: uint16(59177), + 36: uint16(59178), + 37: uint16(59179), + 38: uint16(59180), + 39: uint16(59181), + 40: uint16(59182), + 41: uint16(59183), + 42: uint16(59184), + 43: uint16(59185), + 44: uint16(59186), + 45: uint16(59187), + 46: uint16(59188), + 47: uint16(59189), + 48: uint16(59190), + 49: uint16(59191), + 50: uint16(59192), + 51: uint16(59193), + 52: uint16(59194), + 53: uint16(59195), + 54: uint16(59196), + 55: uint16(59197), + 56: uint16(59198), + 57: uint16(59199), + 58: uint16(59200), + 59: uint16(59201), + 60: uint16(59202), + 61: uint16(59203), + 62: uint16(59204), + 63: uint16(59205), + 64: uint16(59206), + 65: uint16(59207), + 66: uint16(59208), + 67: uint16(59209), + 68: uint16(59210), + 69: uint16(59211), + 70: uint16(59212), + 71: uint16(59213), + 72: uint16(59214), + 73: uint16(59215), + 74: uint16(59216), + 75: uint16(59217), + 76: uint16(59218), + 77: uint16(59219), + 78: uint16(59220), + 79: uint16(59221), + 80: uint16(59222), + 81: uint16(59223), + 82: uint16(59224), + 83: uint16(59225), + 84: uint16(59226), + 85: uint16(59227), + 86: uint16(59228), + 87: uint16(59229), + 88: uint16(59230), + 89: uint16(59231), + 90: uint16(59232), + 91: uint16(59233), + 92: uint16(59234), + 93: uint16(59235), + 94: uint16(59236), + 95: uint16(59237), + 96: uint16(1040), + 97: uint16(1041), + 98: uint16(1042), + 99: uint16(1043), + 100: uint16(1044), + 101: uint16(1045), + 102: uint16(1025), + 103: uint16(1046), + 104: uint16(1047), + 105: uint16(1048), + 106: uint16(1049), + 107: uint16(1050), + 108: uint16(1051), + 109: uint16(1052), + 110: uint16(1053), + 111: uint16(1054), + 112: uint16(1055), + 113: uint16(1056), + 114: uint16(1057), + 115: uint16(1058), + 116: uint16(1059), + 117: uint16(1060), + 118: uint16(1061), + 119: uint16(1062), + 120: uint16(1063), + 121: uint16(1064), + 122: uint16(1065), + 123: uint16(1066), + 124: uint16(1067), + 125: uint16(1068), + 126: uint16(1069), + 127: uint16(1070), + 128: uint16(1071), + 129: uint16(59296), + 130: uint16(59297), + 131: uint16(59298), + 132: uint16(59299), + 133: uint16(59300), + 134: uint16(59301), + 135: uint16(59302), + 136: uint16(59303), + 137: uint16(59304), + 138: uint16(59305), + 139: uint16(59306), + 140: uint16(59307), + 141: uint16(59308), + 142: uint16(59309), + 143: uint16(59310), + 144: uint16(1072), + 145: uint16(1073), + 146: uint16(1074), + 147: uint16(1075), + 148: uint16(1076), + 149: uint16(1077), + 150: uint16(1105), + 151: uint16(1078), + 152: uint16(1079), + 153: uint16(1080), + 154: uint16(1081), + 155: uint16(1082), + 156: uint16(1083), + 157: uint16(1084), + 158: uint16(1085), + 159: uint16(1086), + 160: uint16(1087), + 161: uint16(1088), + 162: uint16(1089), + 163: uint16(1090), + 164: uint16(1091), + 165: uint16(1092), + 166: uint16(1093), + 167: uint16(1094), + 168: uint16(1095), + 169: uint16(1096), + 170: uint16(1097), + 171: uint16(1098), + 172: uint16(1099), + 173: uint16(1100), + 174: uint16(1101), + 175: uint16(1102), + 176: uint16(1103), + 177: uint16(59311), + 178: uint16(59312), + 179: uint16(59313), + 180: uint16(59314), + 181: uint16(59315), + 182: uint16(59316), + 183: uint16(59317), + 184: uint16(59318), + 185: uint16(59319), + 186: uint16(59320), + 187: uint16(59321), + 188: uint16(59322), + 189: uint16(59323), + }, + 39: { + 0: uint16(714), + 1: uint16(715), + 2: uint16(729), + 3: uint16(8211), + 4: uint16(8213), + 5: uint16(8229), + 6: uint16(8245), + 7: uint16(8453), + 8: uint16(8457), + 9: uint16(8598), + 10: uint16(8599), + 11: uint16(8600), + 12: uint16(8601), + 13: uint16(8725), + 14: uint16(8735), + 15: uint16(8739), + 16: uint16(8786), + 17: uint16(8806), + 18: uint16(8807), + 19: uint16(8895), + 20: uint16(9552), + 21: uint16(9553), + 22: uint16(9554), + 23: uint16(9555), + 24: uint16(9556), + 25: uint16(9557), + 26: uint16(9558), + 27: uint16(9559), + 28: uint16(9560), + 29: uint16(9561), + 30: uint16(9562), + 31: uint16(9563), + 32: uint16(9564), + 33: uint16(9565), + 34: uint16(9566), + 35: uint16(9567), + 36: uint16(9568), + 37: uint16(9569), + 38: uint16(9570), + 39: uint16(9571), + 40: uint16(9572), + 41: uint16(9573), + 42: uint16(9574), + 43: uint16(9575), + 44: uint16(9576), + 45: uint16(9577), + 46: uint16(9578), + 47: uint16(9579), + 48: uint16(9580), + 49: uint16(9581), + 50: uint16(9582), + 51: uint16(9583), + 52: uint16(9584), + 53: uint16(9585), + 54: uint16(9586), + 55: uint16(9587), + 56: uint16(9601), + 57: uint16(9602), + 58: uint16(9603), + 59: uint16(9604), + 60: uint16(9605), + 61: uint16(9606), + 62: uint16(9607), + 63: uint16(9608), + 64: uint16(9609), + 65: uint16(9610), + 66: uint16(9611), + 67: uint16(9612), + 68: uint16(9613), + 69: uint16(9614), + 70: uint16(9615), + 71: uint16(9619), + 72: uint16(9620), + 73: uint16(9621), + 74: uint16(9660), + 75: uint16(9661), + 76: uint16(9698), + 77: uint16(9699), + 78: uint16(9700), + 79: uint16(9701), + 80: uint16(9737), + 81: uint16(8853), + 82: uint16(12306), + 83: uint16(12317), + 84: uint16(12318), + 85: uint16(59324), + 86: uint16(59325), + 87: uint16(59326), + 88: uint16(59327), + 89: uint16(59328), + 90: uint16(59329), + 91: uint16(59330), + 92: uint16(59331), + 93: uint16(59332), + 94: uint16(59333), + 95: uint16(59334), + 96: uint16(257), + 97: uint16(225), + 98: uint16(462), + 99: uint16(224), + 100: uint16(275), + 101: uint16(233), + 102: uint16(283), + 103: uint16(232), + 104: uint16(299), + 105: uint16(237), + 106: uint16(464), + 107: uint16(236), + 108: uint16(333), + 109: uint16(243), + 110: uint16(466), + 111: uint16(242), + 112: uint16(363), + 113: uint16(250), + 114: uint16(468), + 115: uint16(249), + 116: uint16(470), + 117: uint16(472), + 118: uint16(474), + 119: uint16(476), + 120: uint16(252), + 121: uint16(234), + 122: uint16(593), + 123: uint16(59335), + 124: uint16(324), + 125: uint16(328), + 126: uint16(505), + 127: uint16(609), + 128: uint16(59337), + 129: uint16(59338), + 130: uint16(59339), + 131: uint16(59340), + 132: uint16(12549), + 133: uint16(12550), + 134: uint16(12551), + 135: uint16(12552), + 136: uint16(12553), + 137: uint16(12554), + 138: uint16(12555), + 139: uint16(12556), + 140: uint16(12557), + 141: uint16(12558), + 142: uint16(12559), + 143: uint16(12560), + 144: uint16(12561), + 145: uint16(12562), + 146: uint16(12563), + 147: uint16(12564), + 148: uint16(12565), + 149: uint16(12566), + 150: uint16(12567), + 151: uint16(12568), + 152: uint16(12569), + 153: uint16(12570), + 154: uint16(12571), + 155: uint16(12572), + 156: uint16(12573), + 157: uint16(12574), + 158: uint16(12575), + 159: uint16(12576), + 160: uint16(12577), + 161: uint16(12578), + 162: uint16(12579), + 163: uint16(12580), + 164: uint16(12581), + 165: uint16(12582), + 166: uint16(12583), + 167: uint16(12584), + 168: uint16(12585), + 169: uint16(59341), + 170: uint16(59342), + 171: uint16(59343), + 172: uint16(59344), + 173: uint16(59345), + 174: uint16(59346), + 175: uint16(59347), + 176: uint16(59348), + 177: uint16(59349), + 178: uint16(59350), + 179: uint16(59351), + 180: uint16(59352), + 181: uint16(59353), + 182: uint16(59354), + 183: uint16(59355), + 184: uint16(59356), + 185: uint16(59357), + 186: uint16(59358), + 187: uint16(59359), + 188: uint16(59360), + 189: uint16(59361), + }, + 40: { + 0: uint16(12321), + 1: uint16(12322), + 2: uint16(12323), + 3: uint16(12324), + 4: uint16(12325), + 5: uint16(12326), + 6: uint16(12327), + 7: uint16(12328), + 8: uint16(12329), + 9: uint16(12963), + 10: uint16(13198), + 11: uint16(13199), + 12: uint16(13212), + 13: uint16(13213), + 14: uint16(13214), + 15: uint16(13217), + 16: uint16(13252), + 17: uint16(13262), + 18: uint16(13265), + 19: uint16(13266), + 20: uint16(13269), + 21: uint16(65072), + 22: uint16(65506), + 23: uint16(65508), + 24: uint16(59362), + 25: uint16(8481), + 26: uint16(12849), + 27: uint16(59363), + 28: uint16(8208), + 29: uint16(59364), + 30: uint16(59365), + 31: uint16(59366), + 32: uint16(12540), + 33: uint16(12443), + 34: uint16(12444), + 35: uint16(12541), + 36: uint16(12542), + 37: uint16(12294), + 38: uint16(12445), + 39: uint16(12446), + 40: uint16(65097), + 41: uint16(65098), + 42: uint16(65099), + 43: uint16(65100), + 44: uint16(65101), + 45: uint16(65102), + 46: uint16(65103), + 47: uint16(65104), + 48: uint16(65105), + 49: uint16(65106), + 50: uint16(65108), + 51: uint16(65109), + 52: uint16(65110), + 53: uint16(65111), + 54: uint16(65113), + 55: uint16(65114), + 56: uint16(65115), + 57: uint16(65116), + 58: uint16(65117), + 59: uint16(65118), + 60: uint16(65119), + 61: uint16(65120), + 62: uint16(65121), + 63: uint16(65122), + 64: uint16(65123), + 65: uint16(65124), + 66: uint16(65125), + 67: uint16(65126), + 68: uint16(65128), + 69: uint16(65129), + 70: uint16(65130), + 71: uint16(65131), + 72: uint16(12350), + 73: uint16(12272), + 74: uint16(12273), + 75: uint16(12274), + 76: uint16(12275), + 77: uint16(12276), + 78: uint16(12277), + 79: uint16(12278), + 80: uint16(12279), + 81: uint16(12280), + 82: uint16(12281), + 83: uint16(12282), + 84: uint16(12283), + 85: uint16(12295), + 86: uint16(59380), + 87: uint16(59381), + 88: uint16(59382), + 89: uint16(59383), + 90: uint16(59384), + 91: uint16(59385), + 92: uint16(59386), + 93: uint16(59387), + 94: uint16(59388), + 95: uint16(59389), + 96: uint16(59390), + 97: uint16(59391), + 98: uint16(59392), + 99: uint16(9472), + 100: uint16(9473), + 101: uint16(9474), + 102: uint16(9475), + 103: uint16(9476), + 104: uint16(9477), + 105: uint16(9478), + 106: uint16(9479), + 107: uint16(9480), + 108: uint16(9481), + 109: uint16(9482), + 110: uint16(9483), + 111: uint16(9484), + 112: uint16(9485), + 113: uint16(9486), + 114: uint16(9487), + 115: uint16(9488), + 116: uint16(9489), + 117: uint16(9490), + 118: uint16(9491), + 119: uint16(9492), + 120: uint16(9493), + 121: uint16(9494), + 122: uint16(9495), + 123: uint16(9496), + 124: uint16(9497), + 125: uint16(9498), + 126: uint16(9499), + 127: uint16(9500), + 128: uint16(9501), + 129: uint16(9502), + 130: uint16(9503), + 131: uint16(9504), + 132: uint16(9505), + 133: uint16(9506), + 134: uint16(9507), + 135: uint16(9508), + 136: uint16(9509), + 137: uint16(9510), + 138: uint16(9511), + 139: uint16(9512), + 140: uint16(9513), + 141: uint16(9514), + 142: uint16(9515), + 143: uint16(9516), + 144: uint16(9517), + 145: uint16(9518), + 146: uint16(9519), + 147: uint16(9520), + 148: uint16(9521), + 149: uint16(9522), + 150: uint16(9523), + 151: uint16(9524), + 152: uint16(9525), + 153: uint16(9526), + 154: uint16(9527), + 155: uint16(9528), + 156: uint16(9529), + 157: uint16(9530), + 158: uint16(9531), + 159: uint16(9532), + 160: uint16(9533), + 161: uint16(9534), + 162: uint16(9535), + 163: uint16(9536), + 164: uint16(9537), + 165: uint16(9538), + 166: uint16(9539), + 167: uint16(9540), + 168: uint16(9541), + 169: uint16(9542), + 170: uint16(9543), + 171: uint16(9544), + 172: uint16(9545), + 173: uint16(9546), + 174: uint16(9547), + 175: uint16(59393), + 176: uint16(59394), + 177: uint16(59395), + 178: uint16(59396), + 179: uint16(59397), + 180: uint16(59398), + 181: uint16(59399), + 182: uint16(59400), + 183: uint16(59401), + 184: uint16(59402), + 185: uint16(59403), + 186: uint16(59404), + 187: uint16(59405), + 188: uint16(59406), + 189: uint16(59407), + }, + 41: { + 0: uint16(29404), + 1: uint16(29405), + 2: uint16(29407), + 3: uint16(29410), + 4: uint16(29411), + 5: uint16(29412), + 6: uint16(29413), + 7: uint16(29414), + 8: uint16(29415), + 9: uint16(29418), + 10: uint16(29419), + 11: uint16(29429), + 12: uint16(29430), + 13: uint16(29433), + 14: uint16(29437), + 15: uint16(29438), + 16: uint16(29439), + 17: uint16(29440), + 18: uint16(29442), + 19: uint16(29444), + 20: uint16(29445), + 21: uint16(29446), + 22: uint16(29447), + 23: uint16(29448), + 24: uint16(29449), + 25: uint16(29451), + 26: uint16(29452), + 27: uint16(29453), + 28: uint16(29455), + 29: uint16(29456), + 30: uint16(29457), + 31: uint16(29458), + 32: uint16(29460), + 33: uint16(29464), + 34: uint16(29465), + 35: uint16(29466), + 36: uint16(29471), + 37: uint16(29472), + 38: uint16(29475), + 39: uint16(29476), + 40: uint16(29478), + 41: uint16(29479), + 42: uint16(29480), + 43: uint16(29485), + 44: uint16(29487), + 45: uint16(29488), + 46: uint16(29490), + 47: uint16(29491), + 48: uint16(29493), + 49: uint16(29494), + 50: uint16(29498), + 51: uint16(29499), + 52: uint16(29500), + 53: uint16(29501), + 54: uint16(29504), + 55: uint16(29505), + 56: uint16(29506), + 57: uint16(29507), + 58: uint16(29508), + 59: uint16(29509), + 60: uint16(29510), + 61: uint16(29511), + 62: uint16(29512), + 63: uint16(29513), + 64: uint16(29514), + 65: uint16(29515), + 66: uint16(29516), + 67: uint16(29518), + 68: uint16(29519), + 69: uint16(29521), + 70: uint16(29523), + 71: uint16(29524), + 72: uint16(29525), + 73: uint16(29526), + 74: uint16(29528), + 75: uint16(29529), + 76: uint16(29530), + 77: uint16(29531), + 78: uint16(29532), + 79: uint16(29533), + 80: uint16(29534), + 81: uint16(29535), + 82: uint16(29537), + 83: uint16(29538), + 84: uint16(29539), + 85: uint16(29540), + 86: uint16(29541), + 87: uint16(29542), + 88: uint16(29543), + 89: uint16(29544), + 90: uint16(29545), + 91: uint16(29546), + 92: uint16(29547), + 93: uint16(29550), + 94: uint16(29552), + 95: uint16(29553), + 96: uint16(57344), + 97: uint16(57345), + 98: uint16(57346), + 99: uint16(57347), + 100: uint16(57348), + 101: uint16(57349), + 102: uint16(57350), + 103: uint16(57351), + 104: uint16(57352), + 105: uint16(57353), + 106: uint16(57354), + 107: uint16(57355), + 108: uint16(57356), + 109: uint16(57357), + 110: uint16(57358), + 111: uint16(57359), + 112: uint16(57360), + 113: uint16(57361), + 114: uint16(57362), + 115: uint16(57363), + 116: uint16(57364), + 117: uint16(57365), + 118: uint16(57366), + 119: uint16(57367), + 120: uint16(57368), + 121: uint16(57369), + 122: uint16(57370), + 123: uint16(57371), + 124: uint16(57372), + 125: uint16(57373), + 126: uint16(57374), + 127: uint16(57375), + 128: uint16(57376), + 129: uint16(57377), + 130: uint16(57378), + 131: uint16(57379), + 132: uint16(57380), + 133: uint16(57381), + 134: uint16(57382), + 135: uint16(57383), + 136: uint16(57384), + 137: uint16(57385), + 138: uint16(57386), + 139: uint16(57387), + 140: uint16(57388), + 141: uint16(57389), + 142: uint16(57390), + 143: uint16(57391), + 144: uint16(57392), + 145: uint16(57393), + 146: uint16(57394), + 147: uint16(57395), + 148: uint16(57396), + 149: uint16(57397), + 150: uint16(57398), + 151: uint16(57399), + 152: uint16(57400), + 153: uint16(57401), + 154: uint16(57402), + 155: uint16(57403), + 156: uint16(57404), + 157: uint16(57405), + 158: uint16(57406), + 159: uint16(57407), + 160: uint16(57408), + 161: uint16(57409), + 162: uint16(57410), + 163: uint16(57411), + 164: uint16(57412), + 165: uint16(57413), + 166: uint16(57414), + 167: uint16(57415), + 168: uint16(57416), + 169: uint16(57417), + 170: uint16(57418), + 171: uint16(57419), + 172: uint16(57420), + 173: uint16(57421), + 174: uint16(57422), + 175: uint16(57423), + 176: uint16(57424), + 177: uint16(57425), + 178: uint16(57426), + 179: uint16(57427), + 180: uint16(57428), + 181: uint16(57429), + 182: uint16(57430), + 183: uint16(57431), + 184: uint16(57432), + 185: uint16(57433), + 186: uint16(57434), + 187: uint16(57435), + 188: uint16(57436), + 189: uint16(57437), + }, + 42: { + 0: uint16(29554), + 1: uint16(29555), + 2: uint16(29556), + 3: uint16(29557), + 4: uint16(29558), + 5: uint16(29559), + 6: uint16(29560), + 7: uint16(29561), + 8: uint16(29562), + 9: uint16(29563), + 10: uint16(29564), + 11: uint16(29565), + 12: uint16(29567), + 13: uint16(29568), + 14: uint16(29569), + 15: uint16(29570), + 16: uint16(29571), + 17: uint16(29573), + 18: uint16(29574), + 19: uint16(29576), + 20: uint16(29578), + 21: uint16(29580), + 22: uint16(29581), + 23: uint16(29583), + 24: uint16(29584), + 25: uint16(29586), + 26: uint16(29587), + 27: uint16(29588), + 28: uint16(29589), + 29: uint16(29591), + 30: uint16(29592), + 31: uint16(29593), + 32: uint16(29594), + 33: uint16(29596), + 34: uint16(29597), + 35: uint16(29598), + 36: uint16(29600), + 37: uint16(29601), + 38: uint16(29603), + 39: uint16(29604), + 40: uint16(29605), + 41: uint16(29606), + 42: uint16(29607), + 43: uint16(29608), + 44: uint16(29610), + 45: uint16(29612), + 46: uint16(29613), + 47: uint16(29617), + 48: uint16(29620), + 49: uint16(29621), + 50: uint16(29622), + 51: uint16(29624), + 52: uint16(29625), + 53: uint16(29628), + 54: uint16(29629), + 55: uint16(29630), + 56: uint16(29631), + 57: uint16(29633), + 58: uint16(29635), + 59: uint16(29636), + 60: uint16(29637), + 61: uint16(29638), + 62: uint16(29639), + 63: uint16(29643), + 64: uint16(29644), + 65: uint16(29646), + 66: uint16(29650), + 67: uint16(29651), + 68: uint16(29652), + 69: uint16(29653), + 70: uint16(29654), + 71: uint16(29655), + 72: uint16(29656), + 73: uint16(29658), + 74: uint16(29659), + 75: uint16(29660), + 76: uint16(29661), + 77: uint16(29663), + 78: uint16(29665), + 79: uint16(29666), + 80: uint16(29667), + 81: uint16(29668), + 82: uint16(29670), + 83: uint16(29672), + 84: uint16(29674), + 85: uint16(29675), + 86: uint16(29676), + 87: uint16(29678), + 88: uint16(29679), + 89: uint16(29680), + 90: uint16(29681), + 91: uint16(29683), + 92: uint16(29684), + 93: uint16(29685), + 94: uint16(29686), + 95: uint16(29687), + 96: uint16(57438), + 97: uint16(57439), + 98: uint16(57440), + 99: uint16(57441), + 100: uint16(57442), + 101: uint16(57443), + 102: uint16(57444), + 103: uint16(57445), + 104: uint16(57446), + 105: uint16(57447), + 106: uint16(57448), + 107: uint16(57449), + 108: uint16(57450), + 109: uint16(57451), + 110: uint16(57452), + 111: uint16(57453), + 112: uint16(57454), + 113: uint16(57455), + 114: uint16(57456), + 115: uint16(57457), + 116: uint16(57458), + 117: uint16(57459), + 118: uint16(57460), + 119: uint16(57461), + 120: uint16(57462), + 121: uint16(57463), + 122: uint16(57464), + 123: uint16(57465), + 124: uint16(57466), + 125: uint16(57467), + 126: uint16(57468), + 127: uint16(57469), + 128: uint16(57470), + 129: uint16(57471), + 130: uint16(57472), + 131: uint16(57473), + 132: uint16(57474), + 133: uint16(57475), + 134: uint16(57476), + 135: uint16(57477), + 136: uint16(57478), + 137: uint16(57479), + 138: uint16(57480), + 139: uint16(57481), + 140: uint16(57482), + 141: uint16(57483), + 142: uint16(57484), + 143: uint16(57485), + 144: uint16(57486), + 145: uint16(57487), + 146: uint16(57488), + 147: uint16(57489), + 148: uint16(57490), + 149: uint16(57491), + 150: uint16(57492), + 151: uint16(57493), + 152: uint16(57494), + 153: uint16(57495), + 154: uint16(57496), + 155: uint16(57497), + 156: uint16(57498), + 157: uint16(57499), + 158: uint16(57500), + 159: uint16(57501), + 160: uint16(57502), + 161: uint16(57503), + 162: uint16(57504), + 163: uint16(57505), + 164: uint16(57506), + 165: uint16(57507), + 166: uint16(57508), + 167: uint16(57509), + 168: uint16(57510), + 169: uint16(57511), + 170: uint16(57512), + 171: uint16(57513), + 172: uint16(57514), + 173: uint16(57515), + 174: uint16(57516), + 175: uint16(57517), + 176: uint16(57518), + 177: uint16(57519), + 178: uint16(57520), + 179: uint16(57521), + 180: uint16(57522), + 181: uint16(57523), + 182: uint16(57524), + 183: uint16(57525), + 184: uint16(57526), + 185: uint16(57527), + 186: uint16(57528), + 187: uint16(57529), + 188: uint16(57530), + 189: uint16(57531), + }, + 43: { + 0: uint16(29688), + 1: uint16(29689), + 2: uint16(29690), + 3: uint16(29691), + 4: uint16(29692), + 5: uint16(29693), + 6: uint16(29694), + 7: uint16(29695), + 8: uint16(29696), + 9: uint16(29697), + 10: uint16(29698), + 11: uint16(29700), + 12: uint16(29703), + 13: uint16(29704), + 14: uint16(29707), + 15: uint16(29708), + 16: uint16(29709), + 17: uint16(29710), + 18: uint16(29713), + 19: uint16(29714), + 20: uint16(29715), + 21: uint16(29716), + 22: uint16(29717), + 23: uint16(29718), + 24: uint16(29719), + 25: uint16(29720), + 26: uint16(29721), + 27: uint16(29724), + 28: uint16(29725), + 29: uint16(29726), + 30: uint16(29727), + 31: uint16(29728), + 32: uint16(29729), + 33: uint16(29731), + 34: uint16(29732), + 35: uint16(29735), + 36: uint16(29737), + 37: uint16(29739), + 38: uint16(29741), + 39: uint16(29743), + 40: uint16(29745), + 41: uint16(29746), + 42: uint16(29751), + 43: uint16(29752), + 44: uint16(29753), + 45: uint16(29754), + 46: uint16(29755), + 47: uint16(29757), + 48: uint16(29758), + 49: uint16(29759), + 50: uint16(29760), + 51: uint16(29762), + 52: uint16(29763), + 53: uint16(29764), + 54: uint16(29765), + 55: uint16(29766), + 56: uint16(29767), + 57: uint16(29768), + 58: uint16(29769), + 59: uint16(29770), + 60: uint16(29771), + 61: uint16(29772), + 62: uint16(29773), + 63: uint16(29774), + 64: uint16(29775), + 65: uint16(29776), + 66: uint16(29777), + 67: uint16(29778), + 68: uint16(29779), + 69: uint16(29780), + 70: uint16(29782), + 71: uint16(29784), + 72: uint16(29789), + 73: uint16(29792), + 74: uint16(29793), + 75: uint16(29794), + 76: uint16(29795), + 77: uint16(29796), + 78: uint16(29797), + 79: uint16(29798), + 80: uint16(29799), + 81: uint16(29800), + 82: uint16(29801), + 83: uint16(29802), + 84: uint16(29803), + 85: uint16(29804), + 86: uint16(29806), + 87: uint16(29807), + 88: uint16(29809), + 89: uint16(29810), + 90: uint16(29811), + 91: uint16(29812), + 92: uint16(29813), + 93: uint16(29816), + 94: uint16(29817), + 95: uint16(29818), + 96: uint16(57532), + 97: uint16(57533), + 98: uint16(57534), + 99: uint16(57535), + 100: uint16(57536), + 101: uint16(57537), + 102: uint16(57538), + 103: uint16(57539), + 104: uint16(57540), + 105: uint16(57541), + 106: uint16(57542), + 107: uint16(57543), + 108: uint16(57544), + 109: uint16(57545), + 110: uint16(57546), + 111: uint16(57547), + 112: uint16(57548), + 113: uint16(57549), + 114: uint16(57550), + 115: uint16(57551), + 116: uint16(57552), + 117: uint16(57553), + 118: uint16(57554), + 119: uint16(57555), + 120: uint16(57556), + 121: uint16(57557), + 122: uint16(57558), + 123: uint16(57559), + 124: uint16(57560), + 125: uint16(57561), + 126: uint16(57562), + 127: uint16(57563), + 128: uint16(57564), + 129: uint16(57565), + 130: uint16(57566), + 131: uint16(57567), + 132: uint16(57568), + 133: uint16(57569), + 134: uint16(57570), + 135: uint16(57571), + 136: uint16(57572), + 137: uint16(57573), + 138: uint16(57574), + 139: uint16(57575), + 140: uint16(57576), + 141: uint16(57577), + 142: uint16(57578), + 143: uint16(57579), + 144: uint16(57580), + 145: uint16(57581), + 146: uint16(57582), + 147: uint16(57583), + 148: uint16(57584), + 149: uint16(57585), + 150: uint16(57586), + 151: uint16(57587), + 152: uint16(57588), + 153: uint16(57589), + 154: uint16(57590), + 155: uint16(57591), + 156: uint16(57592), + 157: uint16(57593), + 158: uint16(57594), + 159: uint16(57595), + 160: uint16(57596), + 161: uint16(57597), + 162: uint16(57598), + 163: uint16(57599), + 164: uint16(57600), + 165: uint16(57601), + 166: uint16(57602), + 167: uint16(57603), + 168: uint16(57604), + 169: uint16(57605), + 170: uint16(57606), + 171: uint16(57607), + 172: uint16(57608), + 173: uint16(57609), + 174: uint16(57610), + 175: uint16(57611), + 176: uint16(57612), + 177: uint16(57613), + 178: uint16(57614), + 179: uint16(57615), + 180: uint16(57616), + 181: uint16(57617), + 182: uint16(57618), + 183: uint16(57619), + 184: uint16(57620), + 185: uint16(57621), + 186: uint16(57622), + 187: uint16(57623), + 188: uint16(57624), + 189: uint16(57625), + }, + 44: { + 0: uint16(29819), + 1: uint16(29820), + 2: uint16(29821), + 3: uint16(29823), + 4: uint16(29826), + 5: uint16(29828), + 6: uint16(29829), + 7: uint16(29830), + 8: uint16(29832), + 9: uint16(29833), + 10: uint16(29834), + 11: uint16(29836), + 12: uint16(29837), + 13: uint16(29839), + 14: uint16(29841), + 15: uint16(29842), + 16: uint16(29843), + 17: uint16(29844), + 18: uint16(29845), + 19: uint16(29846), + 20: uint16(29847), + 21: uint16(29848), + 22: uint16(29849), + 23: uint16(29850), + 24: uint16(29851), + 25: uint16(29853), + 26: uint16(29855), + 27: uint16(29856), + 28: uint16(29857), + 29: uint16(29858), + 30: uint16(29859), + 31: uint16(29860), + 32: uint16(29861), + 33: uint16(29862), + 34: uint16(29866), + 35: uint16(29867), + 36: uint16(29868), + 37: uint16(29869), + 38: uint16(29870), + 39: uint16(29871), + 40: uint16(29872), + 41: uint16(29873), + 42: uint16(29874), + 43: uint16(29875), + 44: uint16(29876), + 45: uint16(29877), + 46: uint16(29878), + 47: uint16(29879), + 48: uint16(29880), + 49: uint16(29881), + 50: uint16(29883), + 51: uint16(29884), + 52: uint16(29885), + 53: uint16(29886), + 54: uint16(29887), + 55: uint16(29888), + 56: uint16(29889), + 57: uint16(29890), + 58: uint16(29891), + 59: uint16(29892), + 60: uint16(29893), + 61: uint16(29894), + 62: uint16(29895), + 63: uint16(29896), + 64: uint16(29897), + 65: uint16(29898), + 66: uint16(29899), + 67: uint16(29900), + 68: uint16(29901), + 69: uint16(29902), + 70: uint16(29903), + 71: uint16(29904), + 72: uint16(29905), + 73: uint16(29907), + 74: uint16(29908), + 75: uint16(29909), + 76: uint16(29910), + 77: uint16(29911), + 78: uint16(29912), + 79: uint16(29913), + 80: uint16(29914), + 81: uint16(29915), + 82: uint16(29917), + 83: uint16(29919), + 84: uint16(29921), + 85: uint16(29925), + 86: uint16(29927), + 87: uint16(29928), + 88: uint16(29929), + 89: uint16(29930), + 90: uint16(29931), + 91: uint16(29932), + 92: uint16(29933), + 93: uint16(29936), + 94: uint16(29937), + 95: uint16(29938), + 96: uint16(57626), + 97: uint16(57627), + 98: uint16(57628), + 99: uint16(57629), + 100: uint16(57630), + 101: uint16(57631), + 102: uint16(57632), + 103: uint16(57633), + 104: uint16(57634), + 105: uint16(57635), + 106: uint16(57636), + 107: uint16(57637), + 108: uint16(57638), + 109: uint16(57639), + 110: uint16(57640), + 111: uint16(57641), + 112: uint16(57642), + 113: uint16(57643), + 114: uint16(57644), + 115: uint16(57645), + 116: uint16(57646), + 117: uint16(57647), + 118: uint16(57648), + 119: uint16(57649), + 120: uint16(57650), + 121: uint16(57651), + 122: uint16(57652), + 123: uint16(57653), + 124: uint16(57654), + 125: uint16(57655), + 126: uint16(57656), + 127: uint16(57657), + 128: uint16(57658), + 129: uint16(57659), + 130: uint16(57660), + 131: uint16(57661), + 132: uint16(57662), + 133: uint16(57663), + 134: uint16(57664), + 135: uint16(57665), + 136: uint16(57666), + 137: uint16(57667), + 138: uint16(57668), + 139: uint16(57669), + 140: uint16(57670), + 141: uint16(57671), + 142: uint16(57672), + 143: uint16(57673), + 144: uint16(57674), + 145: uint16(57675), + 146: uint16(57676), + 147: uint16(57677), + 148: uint16(57678), + 149: uint16(57679), + 150: uint16(57680), + 151: uint16(57681), + 152: uint16(57682), + 153: uint16(57683), + 154: uint16(57684), + 155: uint16(57685), + 156: uint16(57686), + 157: uint16(57687), + 158: uint16(57688), + 159: uint16(57689), + 160: uint16(57690), + 161: uint16(57691), + 162: uint16(57692), + 163: uint16(57693), + 164: uint16(57694), + 165: uint16(57695), + 166: uint16(57696), + 167: uint16(57697), + 168: uint16(57698), + 169: uint16(57699), + 170: uint16(57700), + 171: uint16(57701), + 172: uint16(57702), + 173: uint16(57703), + 174: uint16(57704), + 175: uint16(57705), + 176: uint16(57706), + 177: uint16(57707), + 178: uint16(57708), + 179: uint16(57709), + 180: uint16(57710), + 181: uint16(57711), + 182: uint16(57712), + 183: uint16(57713), + 184: uint16(57714), + 185: uint16(57715), + 186: uint16(57716), + 187: uint16(57717), + 188: uint16(57718), + 189: uint16(57719), + }, + 45: { + 0: uint16(29939), + 1: uint16(29941), + 2: uint16(29944), + 3: uint16(29945), + 4: uint16(29946), + 5: uint16(29947), + 6: uint16(29948), + 7: uint16(29949), + 8: uint16(29950), + 9: uint16(29952), + 10: uint16(29953), + 11: uint16(29954), + 12: uint16(29955), + 13: uint16(29957), + 14: uint16(29958), + 15: uint16(29959), + 16: uint16(29960), + 17: uint16(29961), + 18: uint16(29962), + 19: uint16(29963), + 20: uint16(29964), + 21: uint16(29966), + 22: uint16(29968), + 23: uint16(29970), + 24: uint16(29972), + 25: uint16(29973), + 26: uint16(29974), + 27: uint16(29975), + 28: uint16(29979), + 29: uint16(29981), + 30: uint16(29982), + 31: uint16(29984), + 32: uint16(29985), + 33: uint16(29986), + 34: uint16(29987), + 35: uint16(29988), + 36: uint16(29990), + 37: uint16(29991), + 38: uint16(29994), + 39: uint16(29998), + 40: uint16(30004), + 41: uint16(30006), + 42: uint16(30009), + 43: uint16(30012), + 44: uint16(30013), + 45: uint16(30015), + 46: uint16(30017), + 47: uint16(30018), + 48: uint16(30019), + 49: uint16(30020), + 50: uint16(30022), + 51: uint16(30023), + 52: uint16(30025), + 53: uint16(30026), + 54: uint16(30029), + 55: uint16(30032), + 56: uint16(30033), + 57: uint16(30034), + 58: uint16(30035), + 59: uint16(30037), + 60: uint16(30038), + 61: uint16(30039), + 62: uint16(30040), + 63: uint16(30045), + 64: uint16(30046), + 65: uint16(30047), + 66: uint16(30048), + 67: uint16(30049), + 68: uint16(30050), + 69: uint16(30051), + 70: uint16(30052), + 71: uint16(30055), + 72: uint16(30056), + 73: uint16(30057), + 74: uint16(30059), + 75: uint16(30060), + 76: uint16(30061), + 77: uint16(30062), + 78: uint16(30063), + 79: uint16(30064), + 80: uint16(30065), + 81: uint16(30067), + 82: uint16(30069), + 83: uint16(30070), + 84: uint16(30071), + 85: uint16(30074), + 86: uint16(30075), + 87: uint16(30076), + 88: uint16(30077), + 89: uint16(30078), + 90: uint16(30080), + 91: uint16(30081), + 92: uint16(30082), + 93: uint16(30084), + 94: uint16(30085), + 95: uint16(30087), + 96: uint16(57720), + 97: uint16(57721), + 98: uint16(57722), + 99: uint16(57723), + 100: uint16(57724), + 101: uint16(57725), + 102: uint16(57726), + 103: uint16(57727), + 104: uint16(57728), + 105: uint16(57729), + 106: uint16(57730), + 107: uint16(57731), + 108: uint16(57732), + 109: uint16(57733), + 110: uint16(57734), + 111: uint16(57735), + 112: uint16(57736), + 113: uint16(57737), + 114: uint16(57738), + 115: uint16(57739), + 116: uint16(57740), + 117: uint16(57741), + 118: uint16(57742), + 119: uint16(57743), + 120: uint16(57744), + 121: uint16(57745), + 122: uint16(57746), + 123: uint16(57747), + 124: uint16(57748), + 125: uint16(57749), + 126: uint16(57750), + 127: uint16(57751), + 128: uint16(57752), + 129: uint16(57753), + 130: uint16(57754), + 131: uint16(57755), + 132: uint16(57756), + 133: uint16(57757), + 134: uint16(57758), + 135: uint16(57759), + 136: uint16(57760), + 137: uint16(57761), + 138: uint16(57762), + 139: uint16(57763), + 140: uint16(57764), + 141: uint16(57765), + 142: uint16(57766), + 143: uint16(57767), + 144: uint16(57768), + 145: uint16(57769), + 146: uint16(57770), + 147: uint16(57771), + 148: uint16(57772), + 149: uint16(57773), + 150: uint16(57774), + 151: uint16(57775), + 152: uint16(57776), + 153: uint16(57777), + 154: uint16(57778), + 155: uint16(57779), + 156: uint16(57780), + 157: uint16(57781), + 158: uint16(57782), + 159: uint16(57783), + 160: uint16(57784), + 161: uint16(57785), + 162: uint16(57786), + 163: uint16(57787), + 164: uint16(57788), + 165: uint16(57789), + 166: uint16(57790), + 167: uint16(57791), + 168: uint16(57792), + 169: uint16(57793), + 170: uint16(57794), + 171: uint16(57795), + 172: uint16(57796), + 173: uint16(57797), + 174: uint16(57798), + 175: uint16(57799), + 176: uint16(57800), + 177: uint16(57801), + 178: uint16(57802), + 179: uint16(57803), + 180: uint16(57804), + 181: uint16(57805), + 182: uint16(57806), + 183: uint16(57807), + 184: uint16(57808), + 185: uint16(57809), + 186: uint16(57810), + 187: uint16(57811), + 188: uint16(57812), + 189: uint16(57813), + }, + 46: { + 0: uint16(30088), + 1: uint16(30089), + 2: uint16(30090), + 3: uint16(30092), + 4: uint16(30093), + 5: uint16(30094), + 6: uint16(30096), + 7: uint16(30099), + 8: uint16(30101), + 9: uint16(30104), + 10: uint16(30107), + 11: uint16(30108), + 12: uint16(30110), + 13: uint16(30114), + 14: uint16(30118), + 15: uint16(30119), + 16: uint16(30120), + 17: uint16(30121), + 18: uint16(30122), + 19: uint16(30125), + 20: uint16(30134), + 21: uint16(30135), + 22: uint16(30138), + 23: uint16(30139), + 24: uint16(30143), + 25: uint16(30144), + 26: uint16(30145), + 27: uint16(30150), + 28: uint16(30155), + 29: uint16(30156), + 30: uint16(30158), + 31: uint16(30159), + 32: uint16(30160), + 33: uint16(30161), + 34: uint16(30163), + 35: uint16(30167), + 36: uint16(30169), + 37: uint16(30170), + 38: uint16(30172), + 39: uint16(30173), + 40: uint16(30175), + 41: uint16(30176), + 42: uint16(30177), + 43: uint16(30181), + 44: uint16(30185), + 45: uint16(30188), + 46: uint16(30189), + 47: uint16(30190), + 48: uint16(30191), + 49: uint16(30194), + 50: uint16(30195), + 51: uint16(30197), + 52: uint16(30198), + 53: uint16(30199), + 54: uint16(30200), + 55: uint16(30202), + 56: uint16(30203), + 57: uint16(30205), + 58: uint16(30206), + 59: uint16(30210), + 60: uint16(30212), + 61: uint16(30214), + 62: uint16(30215), + 63: uint16(30216), + 64: uint16(30217), + 65: uint16(30219), + 66: uint16(30221), + 67: uint16(30222), + 68: uint16(30223), + 69: uint16(30225), + 70: uint16(30226), + 71: uint16(30227), + 72: uint16(30228), + 73: uint16(30230), + 74: uint16(30234), + 75: uint16(30236), + 76: uint16(30237), + 77: uint16(30238), + 78: uint16(30241), + 79: uint16(30243), + 80: uint16(30247), + 81: uint16(30248), + 82: uint16(30252), + 83: uint16(30254), + 84: uint16(30255), + 85: uint16(30257), + 86: uint16(30258), + 87: uint16(30262), + 88: uint16(30263), + 89: uint16(30265), + 90: uint16(30266), + 91: uint16(30267), + 92: uint16(30269), + 93: uint16(30273), + 94: uint16(30274), + 95: uint16(30276), + 96: uint16(57814), + 97: uint16(57815), + 98: uint16(57816), + 99: uint16(57817), + 100: uint16(57818), + 101: uint16(57819), + 102: uint16(57820), + 103: uint16(57821), + 104: uint16(57822), + 105: uint16(57823), + 106: uint16(57824), + 107: uint16(57825), + 108: uint16(57826), + 109: uint16(57827), + 110: uint16(57828), + 111: uint16(57829), + 112: uint16(57830), + 113: uint16(57831), + 114: uint16(57832), + 115: uint16(57833), + 116: uint16(57834), + 117: uint16(57835), + 118: uint16(57836), + 119: uint16(57837), + 120: uint16(57838), + 121: uint16(57839), + 122: uint16(57840), + 123: uint16(57841), + 124: uint16(57842), + 125: uint16(57843), + 126: uint16(57844), + 127: uint16(57845), + 128: uint16(57846), + 129: uint16(57847), + 130: uint16(57848), + 131: uint16(57849), + 132: uint16(57850), + 133: uint16(57851), + 134: uint16(57852), + 135: uint16(57853), + 136: uint16(57854), + 137: uint16(57855), + 138: uint16(57856), + 139: uint16(57857), + 140: uint16(57858), + 141: uint16(57859), + 142: uint16(57860), + 143: uint16(57861), + 144: uint16(57862), + 145: uint16(57863), + 146: uint16(57864), + 147: uint16(57865), + 148: uint16(57866), + 149: uint16(57867), + 150: uint16(57868), + 151: uint16(57869), + 152: uint16(57870), + 153: uint16(57871), + 154: uint16(57872), + 155: uint16(57873), + 156: uint16(57874), + 157: uint16(57875), + 158: uint16(57876), + 159: uint16(57877), + 160: uint16(57878), + 161: uint16(57879), + 162: uint16(57880), + 163: uint16(57881), + 164: uint16(57882), + 165: uint16(57883), + 166: uint16(57884), + 167: uint16(57885), + 168: uint16(57886), + 169: uint16(57887), + 170: uint16(57888), + 171: uint16(57889), + 172: uint16(57890), + 173: uint16(57891), + 174: uint16(57892), + 175: uint16(57893), + 176: uint16(57894), + 177: uint16(57895), + 178: uint16(57896), + 179: uint16(57897), + 180: uint16(57898), + 181: uint16(57899), + 182: uint16(57900), + 183: uint16(57901), + 184: uint16(57902), + 185: uint16(57903), + 186: uint16(57904), + 187: uint16(57905), + 188: uint16(57906), + 189: uint16(57907), + }, + 47: { + 0: uint16(30277), + 1: uint16(30278), + 2: uint16(30279), + 3: uint16(30280), + 4: uint16(30281), + 5: uint16(30282), + 6: uint16(30283), + 7: uint16(30286), + 8: uint16(30287), + 9: uint16(30288), + 10: uint16(30289), + 11: uint16(30290), + 12: uint16(30291), + 13: uint16(30293), + 14: uint16(30295), + 15: uint16(30296), + 16: uint16(30297), + 17: uint16(30298), + 18: uint16(30299), + 19: uint16(30301), + 20: uint16(30303), + 21: uint16(30304), + 22: uint16(30305), + 23: uint16(30306), + 24: uint16(30308), + 25: uint16(30309), + 26: uint16(30310), + 27: uint16(30311), + 28: uint16(30312), + 29: uint16(30313), + 30: uint16(30314), + 31: uint16(30316), + 32: uint16(30317), + 33: uint16(30318), + 34: uint16(30320), + 35: uint16(30321), + 36: uint16(30322), + 37: uint16(30323), + 38: uint16(30324), + 39: uint16(30325), + 40: uint16(30326), + 41: uint16(30327), + 42: uint16(30329), + 43: uint16(30330), + 44: uint16(30332), + 45: uint16(30335), + 46: uint16(30336), + 47: uint16(30337), + 48: uint16(30339), + 49: uint16(30341), + 50: uint16(30345), + 51: uint16(30346), + 52: uint16(30348), + 53: uint16(30349), + 54: uint16(30351), + 55: uint16(30352), + 56: uint16(30354), + 57: uint16(30356), + 58: uint16(30357), + 59: uint16(30359), + 60: uint16(30360), + 61: uint16(30362), + 62: uint16(30363), + 63: uint16(30364), + 64: uint16(30365), + 65: uint16(30366), + 66: uint16(30367), + 67: uint16(30368), + 68: uint16(30369), + 69: uint16(30370), + 70: uint16(30371), + 71: uint16(30373), + 72: uint16(30374), + 73: uint16(30375), + 74: uint16(30376), + 75: uint16(30377), + 76: uint16(30378), + 77: uint16(30379), + 78: uint16(30380), + 79: uint16(30381), + 80: uint16(30383), + 81: uint16(30384), + 82: uint16(30387), + 83: uint16(30389), + 84: uint16(30390), + 85: uint16(30391), + 86: uint16(30392), + 87: uint16(30393), + 88: uint16(30394), + 89: uint16(30395), + 90: uint16(30396), + 91: uint16(30397), + 92: uint16(30398), + 93: uint16(30400), + 94: uint16(30401), + 95: uint16(30403), + 96: uint16(21834), + 97: uint16(38463), + 98: uint16(22467), + 99: uint16(25384), + 100: uint16(21710), + 101: uint16(21769), + 102: uint16(21696), + 103: uint16(30353), + 104: uint16(30284), + 105: uint16(34108), + 106: uint16(30702), + 107: uint16(33406), + 108: uint16(30861), + 109: uint16(29233), + 110: uint16(38552), + 111: uint16(38797), + 112: uint16(27688), + 113: uint16(23433), + 114: uint16(20474), + 115: uint16(25353), + 116: uint16(26263), + 117: uint16(23736), + 118: uint16(33018), + 119: uint16(26696), + 120: uint16(32942), + 121: uint16(26114), + 122: uint16(30414), + 123: uint16(20985), + 124: uint16(25942), + 125: uint16(29100), + 126: uint16(32753), + 127: uint16(34948), + 128: uint16(20658), + 129: uint16(22885), + 130: uint16(25034), + 131: uint16(28595), + 132: uint16(33453), + 133: uint16(25420), + 134: uint16(25170), + 135: uint16(21485), + 136: uint16(21543), + 137: uint16(31494), + 138: uint16(20843), + 139: uint16(30116), + 140: uint16(24052), + 141: uint16(25300), + 142: uint16(36299), + 143: uint16(38774), + 144: uint16(25226), + 145: uint16(32793), + 146: uint16(22365), + 147: uint16(38712), + 148: uint16(32610), + 149: uint16(29240), + 150: uint16(30333), + 151: uint16(26575), + 152: uint16(30334), + 153: uint16(25670), + 154: uint16(20336), + 155: uint16(36133), + 156: uint16(25308), + 157: uint16(31255), + 158: uint16(26001), + 159: uint16(29677), + 160: uint16(25644), + 161: uint16(25203), + 162: uint16(33324), + 163: uint16(39041), + 164: uint16(26495), + 165: uint16(29256), + 166: uint16(25198), + 167: uint16(25292), + 168: uint16(20276), + 169: uint16(29923), + 170: uint16(21322), + 171: uint16(21150), + 172: uint16(32458), + 173: uint16(37030), + 174: uint16(24110), + 175: uint16(26758), + 176: uint16(27036), + 177: uint16(33152), + 178: uint16(32465), + 179: uint16(26834), + 180: uint16(30917), + 181: uint16(34444), + 182: uint16(38225), + 183: uint16(20621), + 184: uint16(35876), + 185: uint16(33502), + 186: uint16(32990), + 187: uint16(21253), + 188: uint16(35090), + 189: uint16(21093), + }, + 48: { + 0: uint16(30404), + 1: uint16(30407), + 2: uint16(30409), + 3: uint16(30411), + 4: uint16(30412), + 5: uint16(30419), + 6: uint16(30421), + 7: uint16(30425), + 8: uint16(30426), + 9: uint16(30428), + 10: uint16(30429), + 11: uint16(30430), + 12: uint16(30432), + 13: uint16(30433), + 14: uint16(30434), + 15: uint16(30435), + 16: uint16(30436), + 17: uint16(30438), + 18: uint16(30439), + 19: uint16(30440), + 20: uint16(30441), + 21: uint16(30442), + 22: uint16(30443), + 23: uint16(30444), + 24: uint16(30445), + 25: uint16(30448), + 26: uint16(30451), + 27: uint16(30453), + 28: uint16(30454), + 29: uint16(30455), + 30: uint16(30458), + 31: uint16(30459), + 32: uint16(30461), + 33: uint16(30463), + 34: uint16(30464), + 35: uint16(30466), + 36: uint16(30467), + 37: uint16(30469), + 38: uint16(30470), + 39: uint16(30474), + 40: uint16(30476), + 41: uint16(30478), + 42: uint16(30479), + 43: uint16(30480), + 44: uint16(30481), + 45: uint16(30482), + 46: uint16(30483), + 47: uint16(30484), + 48: uint16(30485), + 49: uint16(30486), + 50: uint16(30487), + 51: uint16(30488), + 52: uint16(30491), + 53: uint16(30492), + 54: uint16(30493), + 55: uint16(30494), + 56: uint16(30497), + 57: uint16(30499), + 58: uint16(30500), + 59: uint16(30501), + 60: uint16(30503), + 61: uint16(30506), + 62: uint16(30507), + 63: uint16(30508), + 64: uint16(30510), + 65: uint16(30512), + 66: uint16(30513), + 67: uint16(30514), + 68: uint16(30515), + 69: uint16(30516), + 70: uint16(30521), + 71: uint16(30523), + 72: uint16(30525), + 73: uint16(30526), + 74: uint16(30527), + 75: uint16(30530), + 76: uint16(30532), + 77: uint16(30533), + 78: uint16(30534), + 79: uint16(30536), + 80: uint16(30537), + 81: uint16(30538), + 82: uint16(30539), + 83: uint16(30540), + 84: uint16(30541), + 85: uint16(30542), + 86: uint16(30543), + 87: uint16(30546), + 88: uint16(30547), + 89: uint16(30548), + 90: uint16(30549), + 91: uint16(30550), + 92: uint16(30551), + 93: uint16(30552), + 94: uint16(30553), + 95: uint16(30556), + 96: uint16(34180), + 97: uint16(38649), + 98: uint16(20445), + 99: uint16(22561), + 100: uint16(39281), + 101: uint16(23453), + 102: uint16(25265), + 103: uint16(25253), + 104: uint16(26292), + 105: uint16(35961), + 106: uint16(40077), + 107: uint16(29190), + 108: uint16(26479), + 109: uint16(30865), + 110: uint16(24754), + 111: uint16(21329), + 112: uint16(21271), + 113: uint16(36744), + 114: uint16(32972), + 115: uint16(36125), + 116: uint16(38049), + 117: uint16(20493), + 118: uint16(29384), + 119: uint16(22791), + 120: uint16(24811), + 121: uint16(28953), + 122: uint16(34987), + 123: uint16(22868), + 124: uint16(33519), + 125: uint16(26412), + 126: uint16(31528), + 127: uint16(23849), + 128: uint16(32503), + 129: uint16(29997), + 130: uint16(27893), + 131: uint16(36454), + 132: uint16(36856), + 133: uint16(36924), + 134: uint16(40763), + 135: uint16(27604), + 136: uint16(37145), + 137: uint16(31508), + 138: uint16(24444), + 139: uint16(30887), + 140: uint16(34006), + 141: uint16(34109), + 142: uint16(27605), + 143: uint16(27609), + 144: uint16(27606), + 145: uint16(24065), + 146: uint16(24199), + 147: uint16(30201), + 148: uint16(38381), + 149: uint16(25949), + 150: uint16(24330), + 151: uint16(24517), + 152: uint16(36767), + 153: uint16(22721), + 154: uint16(33218), + 155: uint16(36991), + 156: uint16(38491), + 157: uint16(38829), + 158: uint16(36793), + 159: uint16(32534), + 160: uint16(36140), + 161: uint16(25153), + 162: uint16(20415), + 163: uint16(21464), + 164: uint16(21342), + 165: uint16(36776), + 166: uint16(36777), + 167: uint16(36779), + 168: uint16(36941), + 169: uint16(26631), + 170: uint16(24426), + 171: uint16(33176), + 172: uint16(34920), + 173: uint16(40150), + 174: uint16(24971), + 175: uint16(21035), + 176: uint16(30250), + 177: uint16(24428), + 178: uint16(25996), + 179: uint16(28626), + 180: uint16(28392), + 181: uint16(23486), + 182: uint16(25672), + 183: uint16(20853), + 184: uint16(20912), + 185: uint16(26564), + 186: uint16(19993), + 187: uint16(31177), + 188: uint16(39292), + 189: uint16(28851), + }, + 49: { + 0: uint16(30557), + 1: uint16(30558), + 2: uint16(30559), + 3: uint16(30560), + 4: uint16(30564), + 5: uint16(30567), + 6: uint16(30569), + 7: uint16(30570), + 8: uint16(30573), + 9: uint16(30574), + 10: uint16(30575), + 11: uint16(30576), + 12: uint16(30577), + 13: uint16(30578), + 14: uint16(30579), + 15: uint16(30580), + 16: uint16(30581), + 17: uint16(30582), + 18: uint16(30583), + 19: uint16(30584), + 20: uint16(30586), + 21: uint16(30587), + 22: uint16(30588), + 23: uint16(30593), + 24: uint16(30594), + 25: uint16(30595), + 26: uint16(30598), + 27: uint16(30599), + 28: uint16(30600), + 29: uint16(30601), + 30: uint16(30602), + 31: uint16(30603), + 32: uint16(30607), + 33: uint16(30608), + 34: uint16(30611), + 35: uint16(30612), + 36: uint16(30613), + 37: uint16(30614), + 38: uint16(30615), + 39: uint16(30616), + 40: uint16(30617), + 41: uint16(30618), + 42: uint16(30619), + 43: uint16(30620), + 44: uint16(30621), + 45: uint16(30622), + 46: uint16(30625), + 47: uint16(30627), + 48: uint16(30628), + 49: uint16(30630), + 50: uint16(30632), + 51: uint16(30635), + 52: uint16(30637), + 53: uint16(30638), + 54: uint16(30639), + 55: uint16(30641), + 56: uint16(30642), + 57: uint16(30644), + 58: uint16(30646), + 59: uint16(30647), + 60: uint16(30648), + 61: uint16(30649), + 62: uint16(30650), + 63: uint16(30652), + 64: uint16(30654), + 65: uint16(30656), + 66: uint16(30657), + 67: uint16(30658), + 68: uint16(30659), + 69: uint16(30660), + 70: uint16(30661), + 71: uint16(30662), + 72: uint16(30663), + 73: uint16(30664), + 74: uint16(30665), + 75: uint16(30666), + 76: uint16(30667), + 77: uint16(30668), + 78: uint16(30670), + 79: uint16(30671), + 80: uint16(30672), + 81: uint16(30673), + 82: uint16(30674), + 83: uint16(30675), + 84: uint16(30676), + 85: uint16(30677), + 86: uint16(30678), + 87: uint16(30680), + 88: uint16(30681), + 89: uint16(30682), + 90: uint16(30685), + 91: uint16(30686), + 92: uint16(30687), + 93: uint16(30688), + 94: uint16(30689), + 95: uint16(30692), + 96: uint16(30149), + 97: uint16(24182), + 98: uint16(29627), + 99: uint16(33760), + 100: uint16(25773), + 101: uint16(25320), + 102: uint16(38069), + 103: uint16(27874), + 104: uint16(21338), + 105: uint16(21187), + 106: uint16(25615), + 107: uint16(38082), + 108: uint16(31636), + 109: uint16(20271), + 110: uint16(24091), + 111: uint16(33334), + 112: uint16(33046), + 113: uint16(33162), + 114: uint16(28196), + 115: uint16(27850), + 116: uint16(39539), + 117: uint16(25429), + 118: uint16(21340), + 119: uint16(21754), + 120: uint16(34917), + 121: uint16(22496), + 122: uint16(19981), + 123: uint16(24067), + 124: uint16(27493), + 125: uint16(31807), + 126: uint16(37096), + 127: uint16(24598), + 128: uint16(25830), + 129: uint16(29468), + 130: uint16(35009), + 131: uint16(26448), + 132: uint16(25165), + 133: uint16(36130), + 134: uint16(30572), + 135: uint16(36393), + 136: uint16(37319), + 137: uint16(24425), + 138: uint16(33756), + 139: uint16(34081), + 140: uint16(39184), + 141: uint16(21442), + 142: uint16(34453), + 143: uint16(27531), + 144: uint16(24813), + 145: uint16(24808), + 146: uint16(28799), + 147: uint16(33485), + 148: uint16(33329), + 149: uint16(20179), + 150: uint16(27815), + 151: uint16(34255), + 152: uint16(25805), + 153: uint16(31961), + 154: uint16(27133), + 155: uint16(26361), + 156: uint16(33609), + 157: uint16(21397), + 158: uint16(31574), + 159: uint16(20391), + 160: uint16(20876), + 161: uint16(27979), + 162: uint16(23618), + 163: uint16(36461), + 164: uint16(25554), + 165: uint16(21449), + 166: uint16(33580), + 167: uint16(33590), + 168: uint16(26597), + 169: uint16(30900), + 170: uint16(25661), + 171: uint16(23519), + 172: uint16(23700), + 173: uint16(24046), + 174: uint16(35815), + 175: uint16(25286), + 176: uint16(26612), + 177: uint16(35962), + 178: uint16(25600), + 179: uint16(25530), + 180: uint16(34633), + 181: uint16(39307), + 182: uint16(35863), + 183: uint16(32544), + 184: uint16(38130), + 185: uint16(20135), + 186: uint16(38416), + 187: uint16(39076), + 188: uint16(26124), + 189: uint16(29462), + }, + 50: { + 0: uint16(30694), + 1: uint16(30696), + 2: uint16(30698), + 3: uint16(30703), + 4: uint16(30704), + 5: uint16(30705), + 6: uint16(30706), + 7: uint16(30708), + 8: uint16(30709), + 9: uint16(30711), + 10: uint16(30713), + 11: uint16(30714), + 12: uint16(30715), + 13: uint16(30716), + 14: uint16(30723), + 15: uint16(30724), + 16: uint16(30725), + 17: uint16(30726), + 18: uint16(30727), + 19: uint16(30728), + 20: uint16(30730), + 21: uint16(30731), + 22: uint16(30734), + 23: uint16(30735), + 24: uint16(30736), + 25: uint16(30739), + 26: uint16(30741), + 27: uint16(30745), + 28: uint16(30747), + 29: uint16(30750), + 30: uint16(30752), + 31: uint16(30753), + 32: uint16(30754), + 33: uint16(30756), + 34: uint16(30760), + 35: uint16(30762), + 36: uint16(30763), + 37: uint16(30766), + 38: uint16(30767), + 39: uint16(30769), + 40: uint16(30770), + 41: uint16(30771), + 42: uint16(30773), + 43: uint16(30774), + 44: uint16(30781), + 45: uint16(30783), + 46: uint16(30785), + 47: uint16(30786), + 48: uint16(30787), + 49: uint16(30788), + 50: uint16(30790), + 51: uint16(30792), + 52: uint16(30793), + 53: uint16(30794), + 54: uint16(30795), + 55: uint16(30797), + 56: uint16(30799), + 57: uint16(30801), + 58: uint16(30803), + 59: uint16(30804), + 60: uint16(30808), + 61: uint16(30809), + 62: uint16(30810), + 63: uint16(30811), + 64: uint16(30812), + 65: uint16(30814), + 66: uint16(30815), + 67: uint16(30816), + 68: uint16(30817), + 69: uint16(30818), + 70: uint16(30819), + 71: uint16(30820), + 72: uint16(30821), + 73: uint16(30822), + 74: uint16(30823), + 75: uint16(30824), + 76: uint16(30825), + 77: uint16(30831), + 78: uint16(30832), + 79: uint16(30833), + 80: uint16(30834), + 81: uint16(30835), + 82: uint16(30836), + 83: uint16(30837), + 84: uint16(30838), + 85: uint16(30840), + 86: uint16(30841), + 87: uint16(30842), + 88: uint16(30843), + 89: uint16(30845), + 90: uint16(30846), + 91: uint16(30847), + 92: uint16(30848), + 93: uint16(30849), + 94: uint16(30850), + 95: uint16(30851), + 96: uint16(22330), + 97: uint16(23581), + 98: uint16(24120), + 99: uint16(38271), + 100: uint16(20607), + 101: uint16(32928), + 102: uint16(21378), + 103: uint16(25950), + 104: uint16(30021), + 105: uint16(21809), + 106: uint16(20513), + 107: uint16(36229), + 108: uint16(25220), + 109: uint16(38046), + 110: uint16(26397), + 111: uint16(22066), + 112: uint16(28526), + 113: uint16(24034), + 114: uint16(21557), + 115: uint16(28818), + 116: uint16(36710), + 117: uint16(25199), + 118: uint16(25764), + 119: uint16(25507), + 120: uint16(24443), + 121: uint16(28552), + 122: uint16(37108), + 123: uint16(33251), + 124: uint16(36784), + 125: uint16(23576), + 126: uint16(26216), + 127: uint16(24561), + 128: uint16(27785), + 129: uint16(38472), + 130: uint16(36225), + 131: uint16(34924), + 132: uint16(25745), + 133: uint16(31216), + 134: uint16(22478), + 135: uint16(27225), + 136: uint16(25104), + 137: uint16(21576), + 138: uint16(20056), + 139: uint16(31243), + 140: uint16(24809), + 141: uint16(28548), + 142: uint16(35802), + 143: uint16(25215), + 144: uint16(36894), + 145: uint16(39563), + 146: uint16(31204), + 147: uint16(21507), + 148: uint16(30196), + 149: uint16(25345), + 150: uint16(21273), + 151: uint16(27744), + 152: uint16(36831), + 153: uint16(24347), + 154: uint16(39536), + 155: uint16(32827), + 156: uint16(40831), + 157: uint16(20360), + 158: uint16(23610), + 159: uint16(36196), + 160: uint16(32709), + 161: uint16(26021), + 162: uint16(28861), + 163: uint16(20805), + 164: uint16(20914), + 165: uint16(34411), + 166: uint16(23815), + 167: uint16(23456), + 168: uint16(25277), + 169: uint16(37228), + 170: uint16(30068), + 171: uint16(36364), + 172: uint16(31264), + 173: uint16(24833), + 174: uint16(31609), + 175: uint16(20167), + 176: uint16(32504), + 177: uint16(30597), + 178: uint16(19985), + 179: uint16(33261), + 180: uint16(21021), + 181: uint16(20986), + 182: uint16(27249), + 183: uint16(21416), + 184: uint16(36487), + 185: uint16(38148), + 186: uint16(38607), + 187: uint16(28353), + 188: uint16(38500), + 189: uint16(26970), + }, + 51: { + 0: uint16(30852), + 1: uint16(30853), + 2: uint16(30854), + 3: uint16(30856), + 4: uint16(30858), + 5: uint16(30859), + 6: uint16(30863), + 7: uint16(30864), + 8: uint16(30866), + 9: uint16(30868), + 10: uint16(30869), + 11: uint16(30870), + 12: uint16(30873), + 13: uint16(30877), + 14: uint16(30878), + 15: uint16(30880), + 16: uint16(30882), + 17: uint16(30884), + 18: uint16(30886), + 19: uint16(30888), + 20: uint16(30889), + 21: uint16(30890), + 22: uint16(30891), + 23: uint16(30892), + 24: uint16(30893), + 25: uint16(30894), + 26: uint16(30895), + 27: uint16(30901), + 28: uint16(30902), + 29: uint16(30903), + 30: uint16(30904), + 31: uint16(30906), + 32: uint16(30907), + 33: uint16(30908), + 34: uint16(30909), + 35: uint16(30911), + 36: uint16(30912), + 37: uint16(30914), + 38: uint16(30915), + 39: uint16(30916), + 40: uint16(30918), + 41: uint16(30919), + 42: uint16(30920), + 43: uint16(30924), + 44: uint16(30925), + 45: uint16(30926), + 46: uint16(30927), + 47: uint16(30929), + 48: uint16(30930), + 49: uint16(30931), + 50: uint16(30934), + 51: uint16(30935), + 52: uint16(30936), + 53: uint16(30938), + 54: uint16(30939), + 55: uint16(30940), + 56: uint16(30941), + 57: uint16(30942), + 58: uint16(30943), + 59: uint16(30944), + 60: uint16(30945), + 61: uint16(30946), + 62: uint16(30947), + 63: uint16(30948), + 64: uint16(30949), + 65: uint16(30950), + 66: uint16(30951), + 67: uint16(30953), + 68: uint16(30954), + 69: uint16(30955), + 70: uint16(30957), + 71: uint16(30958), + 72: uint16(30959), + 73: uint16(30960), + 74: uint16(30961), + 75: uint16(30963), + 76: uint16(30965), + 77: uint16(30966), + 78: uint16(30968), + 79: uint16(30969), + 80: uint16(30971), + 81: uint16(30972), + 82: uint16(30973), + 83: uint16(30974), + 84: uint16(30975), + 85: uint16(30976), + 86: uint16(30978), + 87: uint16(30979), + 88: uint16(30980), + 89: uint16(30982), + 90: uint16(30983), + 91: uint16(30984), + 92: uint16(30985), + 93: uint16(30986), + 94: uint16(30987), + 95: uint16(30988), + 96: uint16(30784), + 97: uint16(20648), + 98: uint16(30679), + 99: uint16(25616), + 100: uint16(35302), + 101: uint16(22788), + 102: uint16(25571), + 103: uint16(24029), + 104: uint16(31359), + 105: uint16(26941), + 106: uint16(20256), + 107: uint16(33337), + 108: uint16(21912), + 109: uint16(20018), + 110: uint16(30126), + 111: uint16(31383), + 112: uint16(24162), + 113: uint16(24202), + 114: uint16(38383), + 115: uint16(21019), + 116: uint16(21561), + 117: uint16(28810), + 118: uint16(25462), + 119: uint16(38180), + 120: uint16(22402), + 121: uint16(26149), + 122: uint16(26943), + 123: uint16(37255), + 124: uint16(21767), + 125: uint16(28147), + 126: uint16(32431), + 127: uint16(34850), + 128: uint16(25139), + 129: uint16(32496), + 130: uint16(30133), + 131: uint16(33576), + 132: uint16(30913), + 133: uint16(38604), + 134: uint16(36766), + 135: uint16(24904), + 136: uint16(29943), + 137: uint16(35789), + 138: uint16(27492), + 139: uint16(21050), + 140: uint16(36176), + 141: uint16(27425), + 142: uint16(32874), + 143: uint16(33905), + 144: uint16(22257), + 145: uint16(21254), + 146: uint16(20174), + 147: uint16(19995), + 148: uint16(20945), + 149: uint16(31895), + 150: uint16(37259), + 151: uint16(31751), + 152: uint16(20419), + 153: uint16(36479), + 154: uint16(31713), + 155: uint16(31388), + 156: uint16(25703), + 157: uint16(23828), + 158: uint16(20652), + 159: uint16(33030), + 160: uint16(30209), + 161: uint16(31929), + 162: uint16(28140), + 163: uint16(32736), + 164: uint16(26449), + 165: uint16(23384), + 166: uint16(23544), + 167: uint16(30923), + 168: uint16(25774), + 169: uint16(25619), + 170: uint16(25514), + 171: uint16(25387), + 172: uint16(38169), + 173: uint16(25645), + 174: uint16(36798), + 175: uint16(31572), + 176: uint16(30249), + 177: uint16(25171), + 178: uint16(22823), + 179: uint16(21574), + 180: uint16(27513), + 181: uint16(20643), + 182: uint16(25140), + 183: uint16(24102), + 184: uint16(27526), + 185: uint16(20195), + 186: uint16(36151), + 187: uint16(34955), + 188: uint16(24453), + 189: uint16(36910), + }, + 52: { + 0: uint16(30989), + 1: uint16(30990), + 2: uint16(30991), + 3: uint16(30992), + 4: uint16(30993), + 5: uint16(30994), + 6: uint16(30996), + 7: uint16(30997), + 8: uint16(30998), + 9: uint16(30999), + 10: uint16(31000), + 11: uint16(31001), + 12: uint16(31002), + 13: uint16(31003), + 14: uint16(31004), + 15: uint16(31005), + 16: uint16(31007), + 17: uint16(31008), + 18: uint16(31009), + 19: uint16(31010), + 20: uint16(31011), + 21: uint16(31013), + 22: uint16(31014), + 23: uint16(31015), + 24: uint16(31016), + 25: uint16(31017), + 26: uint16(31018), + 27: uint16(31019), + 28: uint16(31020), + 29: uint16(31021), + 30: uint16(31022), + 31: uint16(31023), + 32: uint16(31024), + 33: uint16(31025), + 34: uint16(31026), + 35: uint16(31027), + 36: uint16(31029), + 37: uint16(31030), + 38: uint16(31031), + 39: uint16(31032), + 40: uint16(31033), + 41: uint16(31037), + 42: uint16(31039), + 43: uint16(31042), + 44: uint16(31043), + 45: uint16(31044), + 46: uint16(31045), + 47: uint16(31047), + 48: uint16(31050), + 49: uint16(31051), + 50: uint16(31052), + 51: uint16(31053), + 52: uint16(31054), + 53: uint16(31055), + 54: uint16(31056), + 55: uint16(31057), + 56: uint16(31058), + 57: uint16(31060), + 58: uint16(31061), + 59: uint16(31064), + 60: uint16(31065), + 61: uint16(31073), + 62: uint16(31075), + 63: uint16(31076), + 64: uint16(31078), + 65: uint16(31081), + 66: uint16(31082), + 67: uint16(31083), + 68: uint16(31084), + 69: uint16(31086), + 70: uint16(31088), + 71: uint16(31089), + 72: uint16(31090), + 73: uint16(31091), + 74: uint16(31092), + 75: uint16(31093), + 76: uint16(31094), + 77: uint16(31097), + 78: uint16(31099), + 79: uint16(31100), + 80: uint16(31101), + 81: uint16(31102), + 82: uint16(31103), + 83: uint16(31106), + 84: uint16(31107), + 85: uint16(31110), + 86: uint16(31111), + 87: uint16(31112), + 88: uint16(31113), + 89: uint16(31115), + 90: uint16(31116), + 91: uint16(31117), + 92: uint16(31118), + 93: uint16(31120), + 94: uint16(31121), + 95: uint16(31122), + 96: uint16(24608), + 97: uint16(32829), + 98: uint16(25285), + 99: uint16(20025), + 100: uint16(21333), + 101: uint16(37112), + 102: uint16(25528), + 103: uint16(32966), + 104: uint16(26086), + 105: uint16(27694), + 106: uint16(20294), + 107: uint16(24814), + 108: uint16(28129), + 109: uint16(35806), + 110: uint16(24377), + 111: uint16(34507), + 112: uint16(24403), + 113: uint16(25377), + 114: uint16(20826), + 115: uint16(33633), + 116: uint16(26723), + 117: uint16(20992), + 118: uint16(25443), + 119: uint16(36424), + 120: uint16(20498), + 121: uint16(23707), + 122: uint16(31095), + 123: uint16(23548), + 124: uint16(21040), + 125: uint16(31291), + 126: uint16(24764), + 127: uint16(36947), + 128: uint16(30423), + 129: uint16(24503), + 130: uint16(24471), + 131: uint16(30340), + 132: uint16(36460), + 133: uint16(28783), + 134: uint16(30331), + 135: uint16(31561), + 136: uint16(30634), + 137: uint16(20979), + 138: uint16(37011), + 139: uint16(22564), + 140: uint16(20302), + 141: uint16(28404), + 142: uint16(36842), + 143: uint16(25932), + 144: uint16(31515), + 145: uint16(29380), + 146: uint16(28068), + 147: uint16(32735), + 148: uint16(23265), + 149: uint16(25269), + 150: uint16(24213), + 151: uint16(22320), + 152: uint16(33922), + 153: uint16(31532), + 154: uint16(24093), + 155: uint16(24351), + 156: uint16(36882), + 157: uint16(32532), + 158: uint16(39072), + 159: uint16(25474), + 160: uint16(28359), + 161: uint16(30872), + 162: uint16(28857), + 163: uint16(20856), + 164: uint16(38747), + 165: uint16(22443), + 166: uint16(30005), + 167: uint16(20291), + 168: uint16(30008), + 169: uint16(24215), + 170: uint16(24806), + 171: uint16(22880), + 172: uint16(28096), + 173: uint16(27583), + 174: uint16(30857), + 175: uint16(21500), + 176: uint16(38613), + 177: uint16(20939), + 178: uint16(20993), + 179: uint16(25481), + 180: uint16(21514), + 181: uint16(38035), + 182: uint16(35843), + 183: uint16(36300), + 184: uint16(29241), + 185: uint16(30879), + 186: uint16(34678), + 187: uint16(36845), + 188: uint16(35853), + 189: uint16(21472), + }, + 53: { + 0: uint16(31123), + 1: uint16(31124), + 2: uint16(31125), + 3: uint16(31126), + 4: uint16(31127), + 5: uint16(31128), + 6: uint16(31129), + 7: uint16(31131), + 8: uint16(31132), + 9: uint16(31133), + 10: uint16(31134), + 11: uint16(31135), + 12: uint16(31136), + 13: uint16(31137), + 14: uint16(31138), + 15: uint16(31139), + 16: uint16(31140), + 17: uint16(31141), + 18: uint16(31142), + 19: uint16(31144), + 20: uint16(31145), + 21: uint16(31146), + 22: uint16(31147), + 23: uint16(31148), + 24: uint16(31149), + 25: uint16(31150), + 26: uint16(31151), + 27: uint16(31152), + 28: uint16(31153), + 29: uint16(31154), + 30: uint16(31156), + 31: uint16(31157), + 32: uint16(31158), + 33: uint16(31159), + 34: uint16(31160), + 35: uint16(31164), + 36: uint16(31167), + 37: uint16(31170), + 38: uint16(31172), + 39: uint16(31173), + 40: uint16(31175), + 41: uint16(31176), + 42: uint16(31178), + 43: uint16(31180), + 44: uint16(31182), + 45: uint16(31183), + 46: uint16(31184), + 47: uint16(31187), + 48: uint16(31188), + 49: uint16(31190), + 50: uint16(31191), + 51: uint16(31193), + 52: uint16(31194), + 53: uint16(31195), + 54: uint16(31196), + 55: uint16(31197), + 56: uint16(31198), + 57: uint16(31200), + 58: uint16(31201), + 59: uint16(31202), + 60: uint16(31205), + 61: uint16(31208), + 62: uint16(31210), + 63: uint16(31212), + 64: uint16(31214), + 65: uint16(31217), + 66: uint16(31218), + 67: uint16(31219), + 68: uint16(31220), + 69: uint16(31221), + 70: uint16(31222), + 71: uint16(31223), + 72: uint16(31225), + 73: uint16(31226), + 74: uint16(31228), + 75: uint16(31230), + 76: uint16(31231), + 77: uint16(31233), + 78: uint16(31236), + 79: uint16(31237), + 80: uint16(31239), + 81: uint16(31240), + 82: uint16(31241), + 83: uint16(31242), + 84: uint16(31244), + 85: uint16(31247), + 86: uint16(31248), + 87: uint16(31249), + 88: uint16(31250), + 89: uint16(31251), + 90: uint16(31253), + 91: uint16(31254), + 92: uint16(31256), + 93: uint16(31257), + 94: uint16(31259), + 95: uint16(31260), + 96: uint16(19969), + 97: uint16(30447), + 98: uint16(21486), + 99: uint16(38025), + 100: uint16(39030), + 101: uint16(40718), + 102: uint16(38189), + 103: uint16(23450), + 104: uint16(35746), + 105: uint16(20002), + 106: uint16(19996), + 107: uint16(20908), + 108: uint16(33891), + 109: uint16(25026), + 110: uint16(21160), + 111: uint16(26635), + 112: uint16(20375), + 113: uint16(24683), + 114: uint16(20923), + 115: uint16(27934), + 116: uint16(20828), + 117: uint16(25238), + 118: uint16(26007), + 119: uint16(38497), + 120: uint16(35910), + 121: uint16(36887), + 122: uint16(30168), + 123: uint16(37117), + 124: uint16(30563), + 125: uint16(27602), + 126: uint16(29322), + 127: uint16(29420), + 128: uint16(35835), + 129: uint16(22581), + 130: uint16(30585), + 131: uint16(36172), + 132: uint16(26460), + 133: uint16(38208), + 134: uint16(32922), + 135: uint16(24230), + 136: uint16(28193), + 137: uint16(22930), + 138: uint16(31471), + 139: uint16(30701), + 140: uint16(38203), + 141: uint16(27573), + 142: uint16(26029), + 143: uint16(32526), + 144: uint16(22534), + 145: uint16(20817), + 146: uint16(38431), + 147: uint16(23545), + 148: uint16(22697), + 149: uint16(21544), + 150: uint16(36466), + 151: uint16(25958), + 152: uint16(39039), + 153: uint16(22244), + 154: uint16(38045), + 155: uint16(30462), + 156: uint16(36929), + 157: uint16(25479), + 158: uint16(21702), + 159: uint16(22810), + 160: uint16(22842), + 161: uint16(22427), + 162: uint16(36530), + 163: uint16(26421), + 164: uint16(36346), + 165: uint16(33333), + 166: uint16(21057), + 167: uint16(24816), + 168: uint16(22549), + 169: uint16(34558), + 170: uint16(23784), + 171: uint16(40517), + 172: uint16(20420), + 173: uint16(39069), + 174: uint16(35769), + 175: uint16(23077), + 176: uint16(24694), + 177: uint16(21380), + 178: uint16(25212), + 179: uint16(36943), + 180: uint16(37122), + 181: uint16(39295), + 182: uint16(24681), + 183: uint16(32780), + 184: uint16(20799), + 185: uint16(32819), + 186: uint16(23572), + 187: uint16(39285), + 188: uint16(27953), + 189: uint16(20108), + }, + 54: { + 0: uint16(31261), + 1: uint16(31263), + 2: uint16(31265), + 3: uint16(31266), + 4: uint16(31268), + 5: uint16(31269), + 6: uint16(31270), + 7: uint16(31271), + 8: uint16(31272), + 9: uint16(31273), + 10: uint16(31274), + 11: uint16(31275), + 12: uint16(31276), + 13: uint16(31277), + 14: uint16(31278), + 15: uint16(31279), + 16: uint16(31280), + 17: uint16(31281), + 18: uint16(31282), + 19: uint16(31284), + 20: uint16(31285), + 21: uint16(31286), + 22: uint16(31288), + 23: uint16(31290), + 24: uint16(31294), + 25: uint16(31296), + 26: uint16(31297), + 27: uint16(31298), + 28: uint16(31299), + 29: uint16(31300), + 30: uint16(31301), + 31: uint16(31303), + 32: uint16(31304), + 33: uint16(31305), + 34: uint16(31306), + 35: uint16(31307), + 36: uint16(31308), + 37: uint16(31309), + 38: uint16(31310), + 39: uint16(31311), + 40: uint16(31312), + 41: uint16(31314), + 42: uint16(31315), + 43: uint16(31316), + 44: uint16(31317), + 45: uint16(31318), + 46: uint16(31320), + 47: uint16(31321), + 48: uint16(31322), + 49: uint16(31323), + 50: uint16(31324), + 51: uint16(31325), + 52: uint16(31326), + 53: uint16(31327), + 54: uint16(31328), + 55: uint16(31329), + 56: uint16(31330), + 57: uint16(31331), + 58: uint16(31332), + 59: uint16(31333), + 60: uint16(31334), + 61: uint16(31335), + 62: uint16(31336), + 63: uint16(31337), + 64: uint16(31338), + 65: uint16(31339), + 66: uint16(31340), + 67: uint16(31341), + 68: uint16(31342), + 69: uint16(31343), + 70: uint16(31345), + 71: uint16(31346), + 72: uint16(31347), + 73: uint16(31349), + 74: uint16(31355), + 75: uint16(31356), + 76: uint16(31357), + 77: uint16(31358), + 78: uint16(31362), + 79: uint16(31365), + 80: uint16(31367), + 81: uint16(31369), + 82: uint16(31370), + 83: uint16(31371), + 84: uint16(31372), + 85: uint16(31374), + 86: uint16(31375), + 87: uint16(31376), + 88: uint16(31379), + 89: uint16(31380), + 90: uint16(31385), + 91: uint16(31386), + 92: uint16(31387), + 93: uint16(31390), + 94: uint16(31393), + 95: uint16(31394), + 96: uint16(36144), + 97: uint16(21457), + 98: uint16(32602), + 99: uint16(31567), + 100: uint16(20240), + 101: uint16(20047), + 102: uint16(38400), + 103: uint16(27861), + 104: uint16(29648), + 105: uint16(34281), + 106: uint16(24070), + 107: uint16(30058), + 108: uint16(32763), + 109: uint16(27146), + 110: uint16(30718), + 111: uint16(38034), + 112: uint16(32321), + 113: uint16(20961), + 114: uint16(28902), + 115: uint16(21453), + 116: uint16(36820), + 117: uint16(33539), + 118: uint16(36137), + 119: uint16(29359), + 120: uint16(39277), + 121: uint16(27867), + 122: uint16(22346), + 123: uint16(33459), + 124: uint16(26041), + 125: uint16(32938), + 126: uint16(25151), + 127: uint16(38450), + 128: uint16(22952), + 129: uint16(20223), + 130: uint16(35775), + 131: uint16(32442), + 132: uint16(25918), + 133: uint16(33778), + 134: uint16(38750), + 135: uint16(21857), + 136: uint16(39134), + 137: uint16(32933), + 138: uint16(21290), + 139: uint16(35837), + 140: uint16(21536), + 141: uint16(32954), + 142: uint16(24223), + 143: uint16(27832), + 144: uint16(36153), + 145: uint16(33452), + 146: uint16(37210), + 147: uint16(21545), + 148: uint16(27675), + 149: uint16(20998), + 150: uint16(32439), + 151: uint16(22367), + 152: uint16(28954), + 153: uint16(27774), + 154: uint16(31881), + 155: uint16(22859), + 156: uint16(20221), + 157: uint16(24575), + 158: uint16(24868), + 159: uint16(31914), + 160: uint16(20016), + 161: uint16(23553), + 162: uint16(26539), + 163: uint16(34562), + 164: uint16(23792), + 165: uint16(38155), + 166: uint16(39118), + 167: uint16(30127), + 168: uint16(28925), + 169: uint16(36898), + 170: uint16(20911), + 171: uint16(32541), + 172: uint16(35773), + 173: uint16(22857), + 174: uint16(20964), + 175: uint16(20315), + 176: uint16(21542), + 177: uint16(22827), + 178: uint16(25975), + 179: uint16(32932), + 180: uint16(23413), + 181: uint16(25206), + 182: uint16(25282), + 183: uint16(36752), + 184: uint16(24133), + 185: uint16(27679), + 186: uint16(31526), + 187: uint16(20239), + 188: uint16(20440), + 189: uint16(26381), + }, + 55: { + 0: uint16(31395), + 1: uint16(31396), + 2: uint16(31399), + 3: uint16(31401), + 4: uint16(31402), + 5: uint16(31403), + 6: uint16(31406), + 7: uint16(31407), + 8: uint16(31408), + 9: uint16(31409), + 10: uint16(31410), + 11: uint16(31412), + 12: uint16(31413), + 13: uint16(31414), + 14: uint16(31415), + 15: uint16(31416), + 16: uint16(31417), + 17: uint16(31418), + 18: uint16(31419), + 19: uint16(31420), + 20: uint16(31421), + 21: uint16(31422), + 22: uint16(31424), + 23: uint16(31425), + 24: uint16(31426), + 25: uint16(31427), + 26: uint16(31428), + 27: uint16(31429), + 28: uint16(31430), + 29: uint16(31431), + 30: uint16(31432), + 31: uint16(31433), + 32: uint16(31434), + 33: uint16(31436), + 34: uint16(31437), + 35: uint16(31438), + 36: uint16(31439), + 37: uint16(31440), + 38: uint16(31441), + 39: uint16(31442), + 40: uint16(31443), + 41: uint16(31444), + 42: uint16(31445), + 43: uint16(31447), + 44: uint16(31448), + 45: uint16(31450), + 46: uint16(31451), + 47: uint16(31452), + 48: uint16(31453), + 49: uint16(31457), + 50: uint16(31458), + 51: uint16(31460), + 52: uint16(31463), + 53: uint16(31464), + 54: uint16(31465), + 55: uint16(31466), + 56: uint16(31467), + 57: uint16(31468), + 58: uint16(31470), + 59: uint16(31472), + 60: uint16(31473), + 61: uint16(31474), + 62: uint16(31475), + 63: uint16(31476), + 64: uint16(31477), + 65: uint16(31478), + 66: uint16(31479), + 67: uint16(31480), + 68: uint16(31483), + 69: uint16(31484), + 70: uint16(31486), + 71: uint16(31488), + 72: uint16(31489), + 73: uint16(31490), + 74: uint16(31493), + 75: uint16(31495), + 76: uint16(31497), + 77: uint16(31500), + 78: uint16(31501), + 79: uint16(31502), + 80: uint16(31504), + 81: uint16(31506), + 82: uint16(31507), + 83: uint16(31510), + 84: uint16(31511), + 85: uint16(31512), + 86: uint16(31514), + 87: uint16(31516), + 88: uint16(31517), + 89: uint16(31519), + 90: uint16(31521), + 91: uint16(31522), + 92: uint16(31523), + 93: uint16(31527), + 94: uint16(31529), + 95: uint16(31533), + 96: uint16(28014), + 97: uint16(28074), + 98: uint16(31119), + 99: uint16(34993), + 100: uint16(24343), + 101: uint16(29995), + 102: uint16(25242), + 103: uint16(36741), + 104: uint16(20463), + 105: uint16(37340), + 106: uint16(26023), + 107: uint16(33071), + 108: uint16(33105), + 109: uint16(24220), + 110: uint16(33104), + 111: uint16(36212), + 112: uint16(21103), + 113: uint16(35206), + 114: uint16(36171), + 115: uint16(22797), + 116: uint16(20613), + 117: uint16(20184), + 118: uint16(38428), + 119: uint16(29238), + 120: uint16(33145), + 121: uint16(36127), + 122: uint16(23500), + 123: uint16(35747), + 124: uint16(38468), + 125: uint16(22919), + 126: uint16(32538), + 127: uint16(21648), + 128: uint16(22134), + 129: uint16(22030), + 130: uint16(35813), + 131: uint16(25913), + 132: uint16(27010), + 133: uint16(38041), + 134: uint16(30422), + 135: uint16(28297), + 136: uint16(24178), + 137: uint16(29976), + 138: uint16(26438), + 139: uint16(26577), + 140: uint16(31487), + 141: uint16(32925), + 142: uint16(36214), + 143: uint16(24863), + 144: uint16(31174), + 145: uint16(25954), + 146: uint16(36195), + 147: uint16(20872), + 148: uint16(21018), + 149: uint16(38050), + 150: uint16(32568), + 151: uint16(32923), + 152: uint16(32434), + 153: uint16(23703), + 154: uint16(28207), + 155: uint16(26464), + 156: uint16(31705), + 157: uint16(30347), + 158: uint16(39640), + 159: uint16(33167), + 160: uint16(32660), + 161: uint16(31957), + 162: uint16(25630), + 163: uint16(38224), + 164: uint16(31295), + 165: uint16(21578), + 166: uint16(21733), + 167: uint16(27468), + 168: uint16(25601), + 169: uint16(25096), + 170: uint16(40509), + 171: uint16(33011), + 172: uint16(30105), + 173: uint16(21106), + 174: uint16(38761), + 175: uint16(33883), + 176: uint16(26684), + 177: uint16(34532), + 178: uint16(38401), + 179: uint16(38548), + 180: uint16(38124), + 181: uint16(20010), + 182: uint16(21508), + 183: uint16(32473), + 184: uint16(26681), + 185: uint16(36319), + 186: uint16(32789), + 187: uint16(26356), + 188: uint16(24218), + 189: uint16(32697), + }, + 56: { + 0: uint16(31535), + 1: uint16(31536), + 2: uint16(31538), + 3: uint16(31540), + 4: uint16(31541), + 5: uint16(31542), + 6: uint16(31543), + 7: uint16(31545), + 8: uint16(31547), + 9: uint16(31549), + 10: uint16(31551), + 11: uint16(31552), + 12: uint16(31553), + 13: uint16(31554), + 14: uint16(31555), + 15: uint16(31556), + 16: uint16(31558), + 17: uint16(31560), + 18: uint16(31562), + 19: uint16(31565), + 20: uint16(31566), + 21: uint16(31571), + 22: uint16(31573), + 23: uint16(31575), + 24: uint16(31577), + 25: uint16(31580), + 26: uint16(31582), + 27: uint16(31583), + 28: uint16(31585), + 29: uint16(31587), + 30: uint16(31588), + 31: uint16(31589), + 32: uint16(31590), + 33: uint16(31591), + 34: uint16(31592), + 35: uint16(31593), + 36: uint16(31594), + 37: uint16(31595), + 38: uint16(31596), + 39: uint16(31597), + 40: uint16(31599), + 41: uint16(31600), + 42: uint16(31603), + 43: uint16(31604), + 44: uint16(31606), + 45: uint16(31608), + 46: uint16(31610), + 47: uint16(31612), + 48: uint16(31613), + 49: uint16(31615), + 50: uint16(31617), + 51: uint16(31618), + 52: uint16(31619), + 53: uint16(31620), + 54: uint16(31622), + 55: uint16(31623), + 56: uint16(31624), + 57: uint16(31625), + 58: uint16(31626), + 59: uint16(31627), + 60: uint16(31628), + 61: uint16(31630), + 62: uint16(31631), + 63: uint16(31633), + 64: uint16(31634), + 65: uint16(31635), + 66: uint16(31638), + 67: uint16(31640), + 68: uint16(31641), + 69: uint16(31642), + 70: uint16(31643), + 71: uint16(31646), + 72: uint16(31647), + 73: uint16(31648), + 74: uint16(31651), + 75: uint16(31652), + 76: uint16(31653), + 77: uint16(31662), + 78: uint16(31663), + 79: uint16(31664), + 80: uint16(31666), + 81: uint16(31667), + 82: uint16(31669), + 83: uint16(31670), + 84: uint16(31671), + 85: uint16(31673), + 86: uint16(31674), + 87: uint16(31675), + 88: uint16(31676), + 89: uint16(31677), + 90: uint16(31678), + 91: uint16(31679), + 92: uint16(31680), + 93: uint16(31682), + 94: uint16(31683), + 95: uint16(31684), + 96: uint16(22466), + 97: uint16(32831), + 98: uint16(26775), + 99: uint16(24037), + 100: uint16(25915), + 101: uint16(21151), + 102: uint16(24685), + 103: uint16(40858), + 104: uint16(20379), + 105: uint16(36524), + 106: uint16(20844), + 107: uint16(23467), + 108: uint16(24339), + 109: uint16(24041), + 110: uint16(27742), + 111: uint16(25329), + 112: uint16(36129), + 113: uint16(20849), + 114: uint16(38057), + 115: uint16(21246), + 116: uint16(27807), + 117: uint16(33503), + 118: uint16(29399), + 119: uint16(22434), + 120: uint16(26500), + 121: uint16(36141), + 122: uint16(22815), + 123: uint16(36764), + 124: uint16(33735), + 125: uint16(21653), + 126: uint16(31629), + 127: uint16(20272), + 128: uint16(27837), + 129: uint16(23396), + 130: uint16(22993), + 131: uint16(40723), + 132: uint16(21476), + 133: uint16(34506), + 134: uint16(39592), + 135: uint16(35895), + 136: uint16(32929), + 137: uint16(25925), + 138: uint16(39038), + 139: uint16(22266), + 140: uint16(38599), + 141: uint16(21038), + 142: uint16(29916), + 143: uint16(21072), + 144: uint16(23521), + 145: uint16(25346), + 146: uint16(35074), + 147: uint16(20054), + 148: uint16(25296), + 149: uint16(24618), + 150: uint16(26874), + 151: uint16(20851), + 152: uint16(23448), + 153: uint16(20896), + 154: uint16(35266), + 155: uint16(31649), + 156: uint16(39302), + 157: uint16(32592), + 158: uint16(24815), + 159: uint16(28748), + 160: uint16(36143), + 161: uint16(20809), + 162: uint16(24191), + 163: uint16(36891), + 164: uint16(29808), + 165: uint16(35268), + 166: uint16(22317), + 167: uint16(30789), + 168: uint16(24402), + 169: uint16(40863), + 170: uint16(38394), + 171: uint16(36712), + 172: uint16(39740), + 173: uint16(35809), + 174: uint16(30328), + 175: uint16(26690), + 176: uint16(26588), + 177: uint16(36330), + 178: uint16(36149), + 179: uint16(21053), + 180: uint16(36746), + 181: uint16(28378), + 182: uint16(26829), + 183: uint16(38149), + 184: uint16(37101), + 185: uint16(22269), + 186: uint16(26524), + 187: uint16(35065), + 188: uint16(36807), + 189: uint16(21704), + }, + 57: { + 0: uint16(31685), + 1: uint16(31688), + 2: uint16(31689), + 3: uint16(31690), + 4: uint16(31691), + 5: uint16(31693), + 6: uint16(31694), + 7: uint16(31695), + 8: uint16(31696), + 9: uint16(31698), + 10: uint16(31700), + 11: uint16(31701), + 12: uint16(31702), + 13: uint16(31703), + 14: uint16(31704), + 15: uint16(31707), + 16: uint16(31708), + 17: uint16(31710), + 18: uint16(31711), + 19: uint16(31712), + 20: uint16(31714), + 21: uint16(31715), + 22: uint16(31716), + 23: uint16(31719), + 24: uint16(31720), + 25: uint16(31721), + 26: uint16(31723), + 27: uint16(31724), + 28: uint16(31725), + 29: uint16(31727), + 30: uint16(31728), + 31: uint16(31730), + 32: uint16(31731), + 33: uint16(31732), + 34: uint16(31733), + 35: uint16(31734), + 36: uint16(31736), + 37: uint16(31737), + 38: uint16(31738), + 39: uint16(31739), + 40: uint16(31741), + 41: uint16(31743), + 42: uint16(31744), + 43: uint16(31745), + 44: uint16(31746), + 45: uint16(31747), + 46: uint16(31748), + 47: uint16(31749), + 48: uint16(31750), + 49: uint16(31752), + 50: uint16(31753), + 51: uint16(31754), + 52: uint16(31757), + 53: uint16(31758), + 54: uint16(31760), + 55: uint16(31761), + 56: uint16(31762), + 57: uint16(31763), + 58: uint16(31764), + 59: uint16(31765), + 60: uint16(31767), + 61: uint16(31768), + 62: uint16(31769), + 63: uint16(31770), + 64: uint16(31771), + 65: uint16(31772), + 66: uint16(31773), + 67: uint16(31774), + 68: uint16(31776), + 69: uint16(31777), + 70: uint16(31778), + 71: uint16(31779), + 72: uint16(31780), + 73: uint16(31781), + 74: uint16(31784), + 75: uint16(31785), + 76: uint16(31787), + 77: uint16(31788), + 78: uint16(31789), + 79: uint16(31790), + 80: uint16(31791), + 81: uint16(31792), + 82: uint16(31793), + 83: uint16(31794), + 84: uint16(31795), + 85: uint16(31796), + 86: uint16(31797), + 87: uint16(31798), + 88: uint16(31799), + 89: uint16(31801), + 90: uint16(31802), + 91: uint16(31803), + 92: uint16(31804), + 93: uint16(31805), + 94: uint16(31806), + 95: uint16(31810), + 96: uint16(39608), + 97: uint16(23401), + 98: uint16(28023), + 99: uint16(27686), + 100: uint16(20133), + 101: uint16(23475), + 102: uint16(39559), + 103: uint16(37219), + 104: uint16(25000), + 105: uint16(37039), + 106: uint16(38889), + 107: uint16(21547), + 108: uint16(28085), + 109: uint16(23506), + 110: uint16(20989), + 111: uint16(21898), + 112: uint16(32597), + 113: uint16(32752), + 114: uint16(25788), + 115: uint16(25421), + 116: uint16(26097), + 117: uint16(25022), + 118: uint16(24717), + 119: uint16(28938), + 120: uint16(27735), + 121: uint16(27721), + 122: uint16(22831), + 123: uint16(26477), + 124: uint16(33322), + 125: uint16(22741), + 126: uint16(22158), + 127: uint16(35946), + 128: uint16(27627), + 129: uint16(37085), + 130: uint16(22909), + 131: uint16(32791), + 132: uint16(21495), + 133: uint16(28009), + 134: uint16(21621), + 135: uint16(21917), + 136: uint16(33655), + 137: uint16(33743), + 138: uint16(26680), + 139: uint16(31166), + 140: uint16(21644), + 141: uint16(20309), + 142: uint16(21512), + 143: uint16(30418), + 144: uint16(35977), + 145: uint16(38402), + 146: uint16(27827), + 147: uint16(28088), + 148: uint16(36203), + 149: uint16(35088), + 150: uint16(40548), + 151: uint16(36154), + 152: uint16(22079), + 153: uint16(40657), + 154: uint16(30165), + 155: uint16(24456), + 156: uint16(29408), + 157: uint16(24680), + 158: uint16(21756), + 159: uint16(20136), + 160: uint16(27178), + 161: uint16(34913), + 162: uint16(24658), + 163: uint16(36720), + 164: uint16(21700), + 165: uint16(28888), + 166: uint16(34425), + 167: uint16(40511), + 168: uint16(27946), + 169: uint16(23439), + 170: uint16(24344), + 171: uint16(32418), + 172: uint16(21897), + 173: uint16(20399), + 174: uint16(29492), + 175: uint16(21564), + 176: uint16(21402), + 177: uint16(20505), + 178: uint16(21518), + 179: uint16(21628), + 180: uint16(20046), + 181: uint16(24573), + 182: uint16(29786), + 183: uint16(22774), + 184: uint16(33899), + 185: uint16(32993), + 186: uint16(34676), + 187: uint16(29392), + 188: uint16(31946), + 189: uint16(28246), + }, + 58: { + 0: uint16(31811), + 1: uint16(31812), + 2: uint16(31813), + 3: uint16(31814), + 4: uint16(31815), + 5: uint16(31816), + 6: uint16(31817), + 7: uint16(31818), + 8: uint16(31819), + 9: uint16(31820), + 10: uint16(31822), + 11: uint16(31823), + 12: uint16(31824), + 13: uint16(31825), + 14: uint16(31826), + 15: uint16(31827), + 16: uint16(31828), + 17: uint16(31829), + 18: uint16(31830), + 19: uint16(31831), + 20: uint16(31832), + 21: uint16(31833), + 22: uint16(31834), + 23: uint16(31835), + 24: uint16(31836), + 25: uint16(31837), + 26: uint16(31838), + 27: uint16(31839), + 28: uint16(31840), + 29: uint16(31841), + 30: uint16(31842), + 31: uint16(31843), + 32: uint16(31844), + 33: uint16(31845), + 34: uint16(31846), + 35: uint16(31847), + 36: uint16(31848), + 37: uint16(31849), + 38: uint16(31850), + 39: uint16(31851), + 40: uint16(31852), + 41: uint16(31853), + 42: uint16(31854), + 43: uint16(31855), + 44: uint16(31856), + 45: uint16(31857), + 46: uint16(31858), + 47: uint16(31861), + 48: uint16(31862), + 49: uint16(31863), + 50: uint16(31864), + 51: uint16(31865), + 52: uint16(31866), + 53: uint16(31870), + 54: uint16(31871), + 55: uint16(31872), + 56: uint16(31873), + 57: uint16(31874), + 58: uint16(31875), + 59: uint16(31876), + 60: uint16(31877), + 61: uint16(31878), + 62: uint16(31879), + 63: uint16(31880), + 64: uint16(31882), + 65: uint16(31883), + 66: uint16(31884), + 67: uint16(31885), + 68: uint16(31886), + 69: uint16(31887), + 70: uint16(31888), + 71: uint16(31891), + 72: uint16(31892), + 73: uint16(31894), + 74: uint16(31897), + 75: uint16(31898), + 76: uint16(31899), + 77: uint16(31904), + 78: uint16(31905), + 79: uint16(31907), + 80: uint16(31910), + 81: uint16(31911), + 82: uint16(31912), + 83: uint16(31913), + 84: uint16(31915), + 85: uint16(31916), + 86: uint16(31917), + 87: uint16(31919), + 88: uint16(31920), + 89: uint16(31924), + 90: uint16(31925), + 91: uint16(31926), + 92: uint16(31927), + 93: uint16(31928), + 94: uint16(31930), + 95: uint16(31931), + 96: uint16(24359), + 97: uint16(34382), + 98: uint16(21804), + 99: uint16(25252), + 100: uint16(20114), + 101: uint16(27818), + 102: uint16(25143), + 103: uint16(33457), + 104: uint16(21719), + 105: uint16(21326), + 106: uint16(29502), + 107: uint16(28369), + 108: uint16(30011), + 109: uint16(21010), + 110: uint16(21270), + 111: uint16(35805), + 112: uint16(27088), + 113: uint16(24458), + 114: uint16(24576), + 115: uint16(28142), + 116: uint16(22351), + 117: uint16(27426), + 118: uint16(29615), + 119: uint16(26707), + 120: uint16(36824), + 121: uint16(32531), + 122: uint16(25442), + 123: uint16(24739), + 124: uint16(21796), + 125: uint16(30186), + 126: uint16(35938), + 127: uint16(28949), + 128: uint16(28067), + 129: uint16(23462), + 130: uint16(24187), + 131: uint16(33618), + 132: uint16(24908), + 133: uint16(40644), + 134: uint16(30970), + 135: uint16(34647), + 136: uint16(31783), + 137: uint16(30343), + 138: uint16(20976), + 139: uint16(24822), + 140: uint16(29004), + 141: uint16(26179), + 142: uint16(24140), + 143: uint16(24653), + 144: uint16(35854), + 145: uint16(28784), + 146: uint16(25381), + 147: uint16(36745), + 148: uint16(24509), + 149: uint16(24674), + 150: uint16(34516), + 151: uint16(22238), + 152: uint16(27585), + 153: uint16(24724), + 154: uint16(24935), + 155: uint16(21321), + 156: uint16(24800), + 157: uint16(26214), + 158: uint16(36159), + 159: uint16(31229), + 160: uint16(20250), + 161: uint16(28905), + 162: uint16(27719), + 163: uint16(35763), + 164: uint16(35826), + 165: uint16(32472), + 166: uint16(33636), + 167: uint16(26127), + 168: uint16(23130), + 169: uint16(39746), + 170: uint16(27985), + 171: uint16(28151), + 172: uint16(35905), + 173: uint16(27963), + 174: uint16(20249), + 175: uint16(28779), + 176: uint16(33719), + 177: uint16(25110), + 178: uint16(24785), + 179: uint16(38669), + 180: uint16(36135), + 181: uint16(31096), + 182: uint16(20987), + 183: uint16(22334), + 184: uint16(22522), + 185: uint16(26426), + 186: uint16(30072), + 187: uint16(31293), + 188: uint16(31215), + 189: uint16(31637), + }, + 59: { + 0: uint16(31935), + 1: uint16(31936), + 2: uint16(31938), + 3: uint16(31939), + 4: uint16(31940), + 5: uint16(31942), + 6: uint16(31945), + 7: uint16(31947), + 8: uint16(31950), + 9: uint16(31951), + 10: uint16(31952), + 11: uint16(31953), + 12: uint16(31954), + 13: uint16(31955), + 14: uint16(31956), + 15: uint16(31960), + 16: uint16(31962), + 17: uint16(31963), + 18: uint16(31965), + 19: uint16(31966), + 20: uint16(31969), + 21: uint16(31970), + 22: uint16(31971), + 23: uint16(31972), + 24: uint16(31973), + 25: uint16(31974), + 26: uint16(31975), + 27: uint16(31977), + 28: uint16(31978), + 29: uint16(31979), + 30: uint16(31980), + 31: uint16(31981), + 32: uint16(31982), + 33: uint16(31984), + 34: uint16(31985), + 35: uint16(31986), + 36: uint16(31987), + 37: uint16(31988), + 38: uint16(31989), + 39: uint16(31990), + 40: uint16(31991), + 41: uint16(31993), + 42: uint16(31994), + 43: uint16(31996), + 44: uint16(31997), + 45: uint16(31998), + 46: uint16(31999), + 47: uint16(32000), + 48: uint16(32001), + 49: uint16(32002), + 50: uint16(32003), + 51: uint16(32004), + 52: uint16(32005), + 53: uint16(32006), + 54: uint16(32007), + 55: uint16(32008), + 56: uint16(32009), + 57: uint16(32011), + 58: uint16(32012), + 59: uint16(32013), + 60: uint16(32014), + 61: uint16(32015), + 62: uint16(32016), + 63: uint16(32017), + 64: uint16(32018), + 65: uint16(32019), + 66: uint16(32020), + 67: uint16(32021), + 68: uint16(32022), + 69: uint16(32023), + 70: uint16(32024), + 71: uint16(32025), + 72: uint16(32026), + 73: uint16(32027), + 74: uint16(32028), + 75: uint16(32029), + 76: uint16(32030), + 77: uint16(32031), + 78: uint16(32033), + 79: uint16(32035), + 80: uint16(32036), + 81: uint16(32037), + 82: uint16(32038), + 83: uint16(32040), + 84: uint16(32041), + 85: uint16(32042), + 86: uint16(32044), + 87: uint16(32045), + 88: uint16(32046), + 89: uint16(32048), + 90: uint16(32049), + 91: uint16(32050), + 92: uint16(32051), + 93: uint16(32052), + 94: uint16(32053), + 95: uint16(32054), + 96: uint16(32908), + 97: uint16(39269), + 98: uint16(36857), + 99: uint16(28608), + 100: uint16(35749), + 101: uint16(40481), + 102: uint16(23020), + 103: uint16(32489), + 104: uint16(32521), + 105: uint16(21513), + 106: uint16(26497), + 107: uint16(26840), + 108: uint16(36753), + 109: uint16(31821), + 110: uint16(38598), + 111: uint16(21450), + 112: uint16(24613), + 113: uint16(30142), + 114: uint16(27762), + 115: uint16(21363), + 116: uint16(23241), + 117: uint16(32423), + 118: uint16(25380), + 119: uint16(20960), + 120: uint16(33034), + 121: uint16(24049), + 122: uint16(34015), + 123: uint16(25216), + 124: uint16(20864), + 125: uint16(23395), + 126: uint16(20238), + 127: uint16(31085), + 128: uint16(21058), + 129: uint16(24760), + 130: uint16(27982), + 131: uint16(23492), + 132: uint16(23490), + 133: uint16(35745), + 134: uint16(35760), + 135: uint16(26082), + 136: uint16(24524), + 137: uint16(38469), + 138: uint16(22931), + 139: uint16(32487), + 140: uint16(32426), + 141: uint16(22025), + 142: uint16(26551), + 143: uint16(22841), + 144: uint16(20339), + 145: uint16(23478), + 146: uint16(21152), + 147: uint16(33626), + 148: uint16(39050), + 149: uint16(36158), + 150: uint16(30002), + 151: uint16(38078), + 152: uint16(20551), + 153: uint16(31292), + 154: uint16(20215), + 155: uint16(26550), + 156: uint16(39550), + 157: uint16(23233), + 158: uint16(27516), + 159: uint16(30417), + 160: uint16(22362), + 161: uint16(23574), + 162: uint16(31546), + 163: uint16(38388), + 164: uint16(29006), + 165: uint16(20860), + 166: uint16(32937), + 167: uint16(33392), + 168: uint16(22904), + 169: uint16(32516), + 170: uint16(33575), + 171: uint16(26816), + 172: uint16(26604), + 173: uint16(30897), + 174: uint16(30839), + 175: uint16(25315), + 176: uint16(25441), + 177: uint16(31616), + 178: uint16(20461), + 179: uint16(21098), + 180: uint16(20943), + 181: uint16(33616), + 182: uint16(27099), + 183: uint16(37492), + 184: uint16(36341), + 185: uint16(36145), + 186: uint16(35265), + 187: uint16(38190), + 188: uint16(31661), + 189: uint16(20214), + }, + 60: { + 0: uint16(32055), + 1: uint16(32056), + 2: uint16(32057), + 3: uint16(32058), + 4: uint16(32059), + 5: uint16(32060), + 6: uint16(32061), + 7: uint16(32062), + 8: uint16(32063), + 9: uint16(32064), + 10: uint16(32065), + 11: uint16(32066), + 12: uint16(32067), + 13: uint16(32068), + 14: uint16(32069), + 15: uint16(32070), + 16: uint16(32071), + 17: uint16(32072), + 18: uint16(32073), + 19: uint16(32074), + 20: uint16(32075), + 21: uint16(32076), + 22: uint16(32077), + 23: uint16(32078), + 24: uint16(32079), + 25: uint16(32080), + 26: uint16(32081), + 27: uint16(32082), + 28: uint16(32083), + 29: uint16(32084), + 30: uint16(32085), + 31: uint16(32086), + 32: uint16(32087), + 33: uint16(32088), + 34: uint16(32089), + 35: uint16(32090), + 36: uint16(32091), + 37: uint16(32092), + 38: uint16(32093), + 39: uint16(32094), + 40: uint16(32095), + 41: uint16(32096), + 42: uint16(32097), + 43: uint16(32098), + 44: uint16(32099), + 45: uint16(32100), + 46: uint16(32101), + 47: uint16(32102), + 48: uint16(32103), + 49: uint16(32104), + 50: uint16(32105), + 51: uint16(32106), + 52: uint16(32107), + 53: uint16(32108), + 54: uint16(32109), + 55: uint16(32111), + 56: uint16(32112), + 57: uint16(32113), + 58: uint16(32114), + 59: uint16(32115), + 60: uint16(32116), + 61: uint16(32117), + 62: uint16(32118), + 63: uint16(32120), + 64: uint16(32121), + 65: uint16(32122), + 66: uint16(32123), + 67: uint16(32124), + 68: uint16(32125), + 69: uint16(32126), + 70: uint16(32127), + 71: uint16(32128), + 72: uint16(32129), + 73: uint16(32130), + 74: uint16(32131), + 75: uint16(32132), + 76: uint16(32133), + 77: uint16(32134), + 78: uint16(32135), + 79: uint16(32136), + 80: uint16(32137), + 81: uint16(32138), + 82: uint16(32139), + 83: uint16(32140), + 84: uint16(32141), + 85: uint16(32142), + 86: uint16(32143), + 87: uint16(32144), + 88: uint16(32145), + 89: uint16(32146), + 90: uint16(32147), + 91: uint16(32148), + 92: uint16(32149), + 93: uint16(32150), + 94: uint16(32151), + 95: uint16(32152), + 96: uint16(20581), + 97: uint16(33328), + 98: uint16(21073), + 99: uint16(39279), + 100: uint16(28176), + 101: uint16(28293), + 102: uint16(28071), + 103: uint16(24314), + 104: uint16(20725), + 105: uint16(23004), + 106: uint16(23558), + 107: uint16(27974), + 108: uint16(27743), + 109: uint16(30086), + 110: uint16(33931), + 111: uint16(26728), + 112: uint16(22870), + 113: uint16(35762), + 114: uint16(21280), + 115: uint16(37233), + 116: uint16(38477), + 117: uint16(34121), + 118: uint16(26898), + 119: uint16(30977), + 120: uint16(28966), + 121: uint16(33014), + 122: uint16(20132), + 123: uint16(37066), + 124: uint16(27975), + 125: uint16(39556), + 126: uint16(23047), + 127: uint16(22204), + 128: uint16(25605), + 129: uint16(38128), + 130: uint16(30699), + 131: uint16(20389), + 132: uint16(33050), + 133: uint16(29409), + 134: uint16(35282), + 135: uint16(39290), + 136: uint16(32564), + 137: uint16(32478), + 138: uint16(21119), + 139: uint16(25945), + 140: uint16(37237), + 141: uint16(36735), + 142: uint16(36739), + 143: uint16(21483), + 144: uint16(31382), + 145: uint16(25581), + 146: uint16(25509), + 147: uint16(30342), + 148: uint16(31224), + 149: uint16(34903), + 150: uint16(38454), + 151: uint16(25130), + 152: uint16(21163), + 153: uint16(33410), + 154: uint16(26708), + 155: uint16(26480), + 156: uint16(25463), + 157: uint16(30571), + 158: uint16(31469), + 159: uint16(27905), + 160: uint16(32467), + 161: uint16(35299), + 162: uint16(22992), + 163: uint16(25106), + 164: uint16(34249), + 165: uint16(33445), + 166: uint16(30028), + 167: uint16(20511), + 168: uint16(20171), + 169: uint16(30117), + 170: uint16(35819), + 171: uint16(23626), + 172: uint16(24062), + 173: uint16(31563), + 174: uint16(26020), + 175: uint16(37329), + 176: uint16(20170), + 177: uint16(27941), + 178: uint16(35167), + 179: uint16(32039), + 180: uint16(38182), + 181: uint16(20165), + 182: uint16(35880), + 183: uint16(36827), + 184: uint16(38771), + 185: uint16(26187), + 186: uint16(31105), + 187: uint16(36817), + 188: uint16(28908), + 189: uint16(28024), + }, + 61: { + 0: uint16(32153), + 1: uint16(32154), + 2: uint16(32155), + 3: uint16(32156), + 4: uint16(32157), + 5: uint16(32158), + 6: uint16(32159), + 7: uint16(32160), + 8: uint16(32161), + 9: uint16(32162), + 10: uint16(32163), + 11: uint16(32164), + 12: uint16(32165), + 13: uint16(32167), + 14: uint16(32168), + 15: uint16(32169), + 16: uint16(32170), + 17: uint16(32171), + 18: uint16(32172), + 19: uint16(32173), + 20: uint16(32175), + 21: uint16(32176), + 22: uint16(32177), + 23: uint16(32178), + 24: uint16(32179), + 25: uint16(32180), + 26: uint16(32181), + 27: uint16(32182), + 28: uint16(32183), + 29: uint16(32184), + 30: uint16(32185), + 31: uint16(32186), + 32: uint16(32187), + 33: uint16(32188), + 34: uint16(32189), + 35: uint16(32190), + 36: uint16(32191), + 37: uint16(32192), + 38: uint16(32193), + 39: uint16(32194), + 40: uint16(32195), + 41: uint16(32196), + 42: uint16(32197), + 43: uint16(32198), + 44: uint16(32199), + 45: uint16(32200), + 46: uint16(32201), + 47: uint16(32202), + 48: uint16(32203), + 49: uint16(32204), + 50: uint16(32205), + 51: uint16(32206), + 52: uint16(32207), + 53: uint16(32208), + 54: uint16(32209), + 55: uint16(32210), + 56: uint16(32211), + 57: uint16(32212), + 58: uint16(32213), + 59: uint16(32214), + 60: uint16(32215), + 61: uint16(32216), + 62: uint16(32217), + 63: uint16(32218), + 64: uint16(32219), + 65: uint16(32220), + 66: uint16(32221), + 67: uint16(32222), + 68: uint16(32223), + 69: uint16(32224), + 70: uint16(32225), + 71: uint16(32226), + 72: uint16(32227), + 73: uint16(32228), + 74: uint16(32229), + 75: uint16(32230), + 76: uint16(32231), + 77: uint16(32232), + 78: uint16(32233), + 79: uint16(32234), + 80: uint16(32235), + 81: uint16(32236), + 82: uint16(32237), + 83: uint16(32238), + 84: uint16(32239), + 85: uint16(32240), + 86: uint16(32241), + 87: uint16(32242), + 88: uint16(32243), + 89: uint16(32244), + 90: uint16(32245), + 91: uint16(32246), + 92: uint16(32247), + 93: uint16(32248), + 94: uint16(32249), + 95: uint16(32250), + 96: uint16(23613), + 97: uint16(21170), + 98: uint16(33606), + 99: uint16(20834), + 100: uint16(33550), + 101: uint16(30555), + 102: uint16(26230), + 103: uint16(40120), + 104: uint16(20140), + 105: uint16(24778), + 106: uint16(31934), + 107: uint16(31923), + 108: uint16(32463), + 109: uint16(20117), + 110: uint16(35686), + 111: uint16(26223), + 112: uint16(39048), + 113: uint16(38745), + 114: uint16(22659), + 115: uint16(25964), + 116: uint16(38236), + 117: uint16(24452), + 118: uint16(30153), + 119: uint16(38742), + 120: uint16(31455), + 121: uint16(31454), + 122: uint16(20928), + 123: uint16(28847), + 124: uint16(31384), + 125: uint16(25578), + 126: uint16(31350), + 127: uint16(32416), + 128: uint16(29590), + 129: uint16(38893), + 130: uint16(20037), + 131: uint16(28792), + 132: uint16(20061), + 133: uint16(37202), + 134: uint16(21417), + 135: uint16(25937), + 136: uint16(26087), + 137: uint16(33276), + 138: uint16(33285), + 139: uint16(21646), + 140: uint16(23601), + 141: uint16(30106), + 142: uint16(38816), + 143: uint16(25304), + 144: uint16(29401), + 145: uint16(30141), + 146: uint16(23621), + 147: uint16(39545), + 148: uint16(33738), + 149: uint16(23616), + 150: uint16(21632), + 151: uint16(30697), + 152: uint16(20030), + 153: uint16(27822), + 154: uint16(32858), + 155: uint16(25298), + 156: uint16(25454), + 157: uint16(24040), + 158: uint16(20855), + 159: uint16(36317), + 160: uint16(36382), + 161: uint16(38191), + 162: uint16(20465), + 163: uint16(21477), + 164: uint16(24807), + 165: uint16(28844), + 166: uint16(21095), + 167: uint16(25424), + 168: uint16(40515), + 169: uint16(23071), + 170: uint16(20518), + 171: uint16(30519), + 172: uint16(21367), + 173: uint16(32482), + 174: uint16(25733), + 175: uint16(25899), + 176: uint16(25225), + 177: uint16(25496), + 178: uint16(20500), + 179: uint16(29237), + 180: uint16(35273), + 181: uint16(20915), + 182: uint16(35776), + 183: uint16(32477), + 184: uint16(22343), + 185: uint16(33740), + 186: uint16(38055), + 187: uint16(20891), + 188: uint16(21531), + 189: uint16(23803), + }, + 62: { + 0: uint16(32251), + 1: uint16(32252), + 2: uint16(32253), + 3: uint16(32254), + 4: uint16(32255), + 5: uint16(32256), + 6: uint16(32257), + 7: uint16(32258), + 8: uint16(32259), + 9: uint16(32260), + 10: uint16(32261), + 11: uint16(32262), + 12: uint16(32263), + 13: uint16(32264), + 14: uint16(32265), + 15: uint16(32266), + 16: uint16(32267), + 17: uint16(32268), + 18: uint16(32269), + 19: uint16(32270), + 20: uint16(32271), + 21: uint16(32272), + 22: uint16(32273), + 23: uint16(32274), + 24: uint16(32275), + 25: uint16(32276), + 26: uint16(32277), + 27: uint16(32278), + 28: uint16(32279), + 29: uint16(32280), + 30: uint16(32281), + 31: uint16(32282), + 32: uint16(32283), + 33: uint16(32284), + 34: uint16(32285), + 35: uint16(32286), + 36: uint16(32287), + 37: uint16(32288), + 38: uint16(32289), + 39: uint16(32290), + 40: uint16(32291), + 41: uint16(32292), + 42: uint16(32293), + 43: uint16(32294), + 44: uint16(32295), + 45: uint16(32296), + 46: uint16(32297), + 47: uint16(32298), + 48: uint16(32299), + 49: uint16(32300), + 50: uint16(32301), + 51: uint16(32302), + 52: uint16(32303), + 53: uint16(32304), + 54: uint16(32305), + 55: uint16(32306), + 56: uint16(32307), + 57: uint16(32308), + 58: uint16(32309), + 59: uint16(32310), + 60: uint16(32311), + 61: uint16(32312), + 62: uint16(32313), + 63: uint16(32314), + 64: uint16(32316), + 65: uint16(32317), + 66: uint16(32318), + 67: uint16(32319), + 68: uint16(32320), + 69: uint16(32322), + 70: uint16(32323), + 71: uint16(32324), + 72: uint16(32325), + 73: uint16(32326), + 74: uint16(32328), + 75: uint16(32329), + 76: uint16(32330), + 77: uint16(32331), + 78: uint16(32332), + 79: uint16(32333), + 80: uint16(32334), + 81: uint16(32335), + 82: uint16(32336), + 83: uint16(32337), + 84: uint16(32338), + 85: uint16(32339), + 86: uint16(32340), + 87: uint16(32341), + 88: uint16(32342), + 89: uint16(32343), + 90: uint16(32344), + 91: uint16(32345), + 92: uint16(32346), + 93: uint16(32347), + 94: uint16(32348), + 95: uint16(32349), + 96: uint16(20426), + 97: uint16(31459), + 98: uint16(27994), + 99: uint16(37089), + 100: uint16(39567), + 101: uint16(21888), + 102: uint16(21654), + 103: uint16(21345), + 104: uint16(21679), + 105: uint16(24320), + 106: uint16(25577), + 107: uint16(26999), + 108: uint16(20975), + 109: uint16(24936), + 110: uint16(21002), + 111: uint16(22570), + 112: uint16(21208), + 113: uint16(22350), + 114: uint16(30733), + 115: uint16(30475), + 116: uint16(24247), + 117: uint16(24951), + 118: uint16(31968), + 119: uint16(25179), + 120: uint16(25239), + 121: uint16(20130), + 122: uint16(28821), + 123: uint16(32771), + 124: uint16(25335), + 125: uint16(28900), + 126: uint16(38752), + 127: uint16(22391), + 128: uint16(33499), + 129: uint16(26607), + 130: uint16(26869), + 131: uint16(30933), + 132: uint16(39063), + 133: uint16(31185), + 134: uint16(22771), + 135: uint16(21683), + 136: uint16(21487), + 137: uint16(28212), + 138: uint16(20811), + 139: uint16(21051), + 140: uint16(23458), + 141: uint16(35838), + 142: uint16(32943), + 143: uint16(21827), + 144: uint16(22438), + 145: uint16(24691), + 146: uint16(22353), + 147: uint16(21549), + 148: uint16(31354), + 149: uint16(24656), + 150: uint16(23380), + 151: uint16(25511), + 152: uint16(25248), + 153: uint16(21475), + 154: uint16(25187), + 155: uint16(23495), + 156: uint16(26543), + 157: uint16(21741), + 158: uint16(31391), + 159: uint16(33510), + 160: uint16(37239), + 161: uint16(24211), + 162: uint16(35044), + 163: uint16(22840), + 164: uint16(22446), + 165: uint16(25358), + 166: uint16(36328), + 167: uint16(33007), + 168: uint16(22359), + 169: uint16(31607), + 170: uint16(20393), + 171: uint16(24555), + 172: uint16(23485), + 173: uint16(27454), + 174: uint16(21281), + 175: uint16(31568), + 176: uint16(29378), + 177: uint16(26694), + 178: uint16(30719), + 179: uint16(30518), + 180: uint16(26103), + 181: uint16(20917), + 182: uint16(20111), + 183: uint16(30420), + 184: uint16(23743), + 185: uint16(31397), + 186: uint16(33909), + 187: uint16(22862), + 188: uint16(39745), + 189: uint16(20608), + }, + 63: { + 0: uint16(32350), + 1: uint16(32351), + 2: uint16(32352), + 3: uint16(32353), + 4: uint16(32354), + 5: uint16(32355), + 6: uint16(32356), + 7: uint16(32357), + 8: uint16(32358), + 9: uint16(32359), + 10: uint16(32360), + 11: uint16(32361), + 12: uint16(32362), + 13: uint16(32363), + 14: uint16(32364), + 15: uint16(32365), + 16: uint16(32366), + 17: uint16(32367), + 18: uint16(32368), + 19: uint16(32369), + 20: uint16(32370), + 21: uint16(32371), + 22: uint16(32372), + 23: uint16(32373), + 24: uint16(32374), + 25: uint16(32375), + 26: uint16(32376), + 27: uint16(32377), + 28: uint16(32378), + 29: uint16(32379), + 30: uint16(32380), + 31: uint16(32381), + 32: uint16(32382), + 33: uint16(32383), + 34: uint16(32384), + 35: uint16(32385), + 36: uint16(32387), + 37: uint16(32388), + 38: uint16(32389), + 39: uint16(32390), + 40: uint16(32391), + 41: uint16(32392), + 42: uint16(32393), + 43: uint16(32394), + 44: uint16(32395), + 45: uint16(32396), + 46: uint16(32397), + 47: uint16(32398), + 48: uint16(32399), + 49: uint16(32400), + 50: uint16(32401), + 51: uint16(32402), + 52: uint16(32403), + 53: uint16(32404), + 54: uint16(32405), + 55: uint16(32406), + 56: uint16(32407), + 57: uint16(32408), + 58: uint16(32409), + 59: uint16(32410), + 60: uint16(32412), + 61: uint16(32413), + 62: uint16(32414), + 63: uint16(32430), + 64: uint16(32436), + 65: uint16(32443), + 66: uint16(32444), + 67: uint16(32470), + 68: uint16(32484), + 69: uint16(32492), + 70: uint16(32505), + 71: uint16(32522), + 72: uint16(32528), + 73: uint16(32542), + 74: uint16(32567), + 75: uint16(32569), + 76: uint16(32571), + 77: uint16(32572), + 78: uint16(32573), + 79: uint16(32574), + 80: uint16(32575), + 81: uint16(32576), + 82: uint16(32577), + 83: uint16(32579), + 84: uint16(32582), + 85: uint16(32583), + 86: uint16(32584), + 87: uint16(32585), + 88: uint16(32586), + 89: uint16(32587), + 90: uint16(32588), + 91: uint16(32589), + 92: uint16(32590), + 93: uint16(32591), + 94: uint16(32594), + 95: uint16(32595), + 96: uint16(39304), + 97: uint16(24871), + 98: uint16(28291), + 99: uint16(22372), + 100: uint16(26118), + 101: uint16(25414), + 102: uint16(22256), + 103: uint16(25324), + 104: uint16(25193), + 105: uint16(24275), + 106: uint16(38420), + 107: uint16(22403), + 108: uint16(25289), + 109: uint16(21895), + 110: uint16(34593), + 111: uint16(33098), + 112: uint16(36771), + 113: uint16(21862), + 114: uint16(33713), + 115: uint16(26469), + 116: uint16(36182), + 117: uint16(34013), + 118: uint16(23146), + 119: uint16(26639), + 120: uint16(25318), + 121: uint16(31726), + 122: uint16(38417), + 123: uint16(20848), + 124: uint16(28572), + 125: uint16(35888), + 126: uint16(25597), + 127: uint16(35272), + 128: uint16(25042), + 129: uint16(32518), + 130: uint16(28866), + 131: uint16(28389), + 132: uint16(29701), + 133: uint16(27028), + 134: uint16(29436), + 135: uint16(24266), + 136: uint16(37070), + 137: uint16(26391), + 138: uint16(28010), + 139: uint16(25438), + 140: uint16(21171), + 141: uint16(29282), + 142: uint16(32769), + 143: uint16(20332), + 144: uint16(23013), + 145: uint16(37226), + 146: uint16(28889), + 147: uint16(28061), + 148: uint16(21202), + 149: uint16(20048), + 150: uint16(38647), + 151: uint16(38253), + 152: uint16(34174), + 153: uint16(30922), + 154: uint16(32047), + 155: uint16(20769), + 156: uint16(22418), + 157: uint16(25794), + 158: uint16(32907), + 159: uint16(31867), + 160: uint16(27882), + 161: uint16(26865), + 162: uint16(26974), + 163: uint16(20919), + 164: uint16(21400), + 165: uint16(26792), + 166: uint16(29313), + 167: uint16(40654), + 168: uint16(31729), + 169: uint16(29432), + 170: uint16(31163), + 171: uint16(28435), + 172: uint16(29702), + 173: uint16(26446), + 174: uint16(37324), + 175: uint16(40100), + 176: uint16(31036), + 177: uint16(33673), + 178: uint16(33620), + 179: uint16(21519), + 180: uint16(26647), + 181: uint16(20029), + 182: uint16(21385), + 183: uint16(21169), + 184: uint16(30782), + 185: uint16(21382), + 186: uint16(21033), + 187: uint16(20616), + 188: uint16(20363), + 189: uint16(20432), + }, + 64: { + 0: uint16(32598), + 1: uint16(32601), + 2: uint16(32603), + 3: uint16(32604), + 4: uint16(32605), + 5: uint16(32606), + 6: uint16(32608), + 7: uint16(32611), + 8: uint16(32612), + 9: uint16(32613), + 10: uint16(32614), + 11: uint16(32615), + 12: uint16(32619), + 13: uint16(32620), + 14: uint16(32621), + 15: uint16(32623), + 16: uint16(32624), + 17: uint16(32627), + 18: uint16(32629), + 19: uint16(32630), + 20: uint16(32631), + 21: uint16(32632), + 22: uint16(32634), + 23: uint16(32635), + 24: uint16(32636), + 25: uint16(32637), + 26: uint16(32639), + 27: uint16(32640), + 28: uint16(32642), + 29: uint16(32643), + 30: uint16(32644), + 31: uint16(32645), + 32: uint16(32646), + 33: uint16(32647), + 34: uint16(32648), + 35: uint16(32649), + 36: uint16(32651), + 37: uint16(32653), + 38: uint16(32655), + 39: uint16(32656), + 40: uint16(32657), + 41: uint16(32658), + 42: uint16(32659), + 43: uint16(32661), + 44: uint16(32662), + 45: uint16(32663), + 46: uint16(32664), + 47: uint16(32665), + 48: uint16(32667), + 49: uint16(32668), + 50: uint16(32672), + 51: uint16(32674), + 52: uint16(32675), + 53: uint16(32677), + 54: uint16(32678), + 55: uint16(32680), + 56: uint16(32681), + 57: uint16(32682), + 58: uint16(32683), + 59: uint16(32684), + 60: uint16(32685), + 61: uint16(32686), + 62: uint16(32689), + 63: uint16(32691), + 64: uint16(32692), + 65: uint16(32693), + 66: uint16(32694), + 67: uint16(32695), + 68: uint16(32698), + 69: uint16(32699), + 70: uint16(32702), + 71: uint16(32704), + 72: uint16(32706), + 73: uint16(32707), + 74: uint16(32708), + 75: uint16(32710), + 76: uint16(32711), + 77: uint16(32712), + 78: uint16(32713), + 79: uint16(32715), + 80: uint16(32717), + 81: uint16(32719), + 82: uint16(32720), + 83: uint16(32721), + 84: uint16(32722), + 85: uint16(32723), + 86: uint16(32726), + 87: uint16(32727), + 88: uint16(32729), + 89: uint16(32730), + 90: uint16(32731), + 91: uint16(32732), + 92: uint16(32733), + 93: uint16(32734), + 94: uint16(32738), + 95: uint16(32739), + 96: uint16(30178), + 97: uint16(31435), + 98: uint16(31890), + 99: uint16(27813), + 100: uint16(38582), + 101: uint16(21147), + 102: uint16(29827), + 103: uint16(21737), + 104: uint16(20457), + 105: uint16(32852), + 106: uint16(33714), + 107: uint16(36830), + 108: uint16(38256), + 109: uint16(24265), + 110: uint16(24604), + 111: uint16(28063), + 112: uint16(24088), + 113: uint16(25947), + 114: uint16(33080), + 115: uint16(38142), + 116: uint16(24651), + 117: uint16(28860), + 118: uint16(32451), + 119: uint16(31918), + 120: uint16(20937), + 121: uint16(26753), + 122: uint16(31921), + 123: uint16(33391), + 124: uint16(20004), + 125: uint16(36742), + 126: uint16(37327), + 127: uint16(26238), + 128: uint16(20142), + 129: uint16(35845), + 130: uint16(25769), + 131: uint16(32842), + 132: uint16(20698), + 133: uint16(30103), + 134: uint16(29134), + 135: uint16(23525), + 136: uint16(36797), + 137: uint16(28518), + 138: uint16(20102), + 139: uint16(25730), + 140: uint16(38243), + 141: uint16(24278), + 142: uint16(26009), + 143: uint16(21015), + 144: uint16(35010), + 145: uint16(28872), + 146: uint16(21155), + 147: uint16(29454), + 148: uint16(29747), + 149: uint16(26519), + 150: uint16(30967), + 151: uint16(38678), + 152: uint16(20020), + 153: uint16(37051), + 154: uint16(40158), + 155: uint16(28107), + 156: uint16(20955), + 157: uint16(36161), + 158: uint16(21533), + 159: uint16(25294), + 160: uint16(29618), + 161: uint16(33777), + 162: uint16(38646), + 163: uint16(40836), + 164: uint16(38083), + 165: uint16(20278), + 166: uint16(32666), + 167: uint16(20940), + 168: uint16(28789), + 169: uint16(38517), + 170: uint16(23725), + 171: uint16(39046), + 172: uint16(21478), + 173: uint16(20196), + 174: uint16(28316), + 175: uint16(29705), + 176: uint16(27060), + 177: uint16(30827), + 178: uint16(39311), + 179: uint16(30041), + 180: uint16(21016), + 181: uint16(30244), + 182: uint16(27969), + 183: uint16(26611), + 184: uint16(20845), + 185: uint16(40857), + 186: uint16(32843), + 187: uint16(21657), + 188: uint16(31548), + 189: uint16(31423), + }, + 65: { + 0: uint16(32740), + 1: uint16(32743), + 2: uint16(32744), + 3: uint16(32746), + 4: uint16(32747), + 5: uint16(32748), + 6: uint16(32749), + 7: uint16(32751), + 8: uint16(32754), + 9: uint16(32756), + 10: uint16(32757), + 11: uint16(32758), + 12: uint16(32759), + 13: uint16(32760), + 14: uint16(32761), + 15: uint16(32762), + 16: uint16(32765), + 17: uint16(32766), + 18: uint16(32767), + 19: uint16(32770), + 20: uint16(32775), + 21: uint16(32776), + 22: uint16(32777), + 23: uint16(32778), + 24: uint16(32782), + 25: uint16(32783), + 26: uint16(32785), + 27: uint16(32787), + 28: uint16(32794), + 29: uint16(32795), + 30: uint16(32797), + 31: uint16(32798), + 32: uint16(32799), + 33: uint16(32801), + 34: uint16(32803), + 35: uint16(32804), + 36: uint16(32811), + 37: uint16(32812), + 38: uint16(32813), + 39: uint16(32814), + 40: uint16(32815), + 41: uint16(32816), + 42: uint16(32818), + 43: uint16(32820), + 44: uint16(32825), + 45: uint16(32826), + 46: uint16(32828), + 47: uint16(32830), + 48: uint16(32832), + 49: uint16(32833), + 50: uint16(32836), + 51: uint16(32837), + 52: uint16(32839), + 53: uint16(32840), + 54: uint16(32841), + 55: uint16(32846), + 56: uint16(32847), + 57: uint16(32848), + 58: uint16(32849), + 59: uint16(32851), + 60: uint16(32853), + 61: uint16(32854), + 62: uint16(32855), + 63: uint16(32857), + 64: uint16(32859), + 65: uint16(32860), + 66: uint16(32861), + 67: uint16(32862), + 68: uint16(32863), + 69: uint16(32864), + 70: uint16(32865), + 71: uint16(32866), + 72: uint16(32867), + 73: uint16(32868), + 74: uint16(32869), + 75: uint16(32870), + 76: uint16(32871), + 77: uint16(32872), + 78: uint16(32875), + 79: uint16(32876), + 80: uint16(32877), + 81: uint16(32878), + 82: uint16(32879), + 83: uint16(32880), + 84: uint16(32882), + 85: uint16(32883), + 86: uint16(32884), + 87: uint16(32885), + 88: uint16(32886), + 89: uint16(32887), + 90: uint16(32888), + 91: uint16(32889), + 92: uint16(32890), + 93: uint16(32891), + 94: uint16(32892), + 95: uint16(32893), + 96: uint16(38534), + 97: uint16(22404), + 98: uint16(25314), + 99: uint16(38471), + 100: uint16(27004), + 101: uint16(23044), + 102: uint16(25602), + 103: uint16(31699), + 104: uint16(28431), + 105: uint16(38475), + 106: uint16(33446), + 107: uint16(21346), + 108: uint16(39045), + 109: uint16(24208), + 110: uint16(28809), + 111: uint16(25523), + 112: uint16(21348), + 113: uint16(34383), + 114: uint16(40065), + 115: uint16(40595), + 116: uint16(30860), + 117: uint16(38706), + 118: uint16(36335), + 119: uint16(36162), + 120: uint16(40575), + 121: uint16(28510), + 122: uint16(31108), + 123: uint16(24405), + 124: uint16(38470), + 125: uint16(25134), + 126: uint16(39540), + 127: uint16(21525), + 128: uint16(38109), + 129: uint16(20387), + 130: uint16(26053), + 131: uint16(23653), + 132: uint16(23649), + 133: uint16(32533), + 134: uint16(34385), + 135: uint16(27695), + 136: uint16(24459), + 137: uint16(29575), + 138: uint16(28388), + 139: uint16(32511), + 140: uint16(23782), + 141: uint16(25371), + 142: uint16(23402), + 143: uint16(28390), + 144: uint16(21365), + 145: uint16(20081), + 146: uint16(25504), + 147: uint16(30053), + 148: uint16(25249), + 149: uint16(36718), + 150: uint16(20262), + 151: uint16(20177), + 152: uint16(27814), + 153: uint16(32438), + 154: uint16(35770), + 155: uint16(33821), + 156: uint16(34746), + 157: uint16(32599), + 158: uint16(36923), + 159: uint16(38179), + 160: uint16(31657), + 161: uint16(39585), + 162: uint16(35064), + 163: uint16(33853), + 164: uint16(27931), + 165: uint16(39558), + 166: uint16(32476), + 167: uint16(22920), + 168: uint16(40635), + 169: uint16(29595), + 170: uint16(30721), + 171: uint16(34434), + 172: uint16(39532), + 173: uint16(39554), + 174: uint16(22043), + 175: uint16(21527), + 176: uint16(22475), + 177: uint16(20080), + 178: uint16(40614), + 179: uint16(21334), + 180: uint16(36808), + 181: uint16(33033), + 182: uint16(30610), + 183: uint16(39314), + 184: uint16(34542), + 185: uint16(28385), + 186: uint16(34067), + 187: uint16(26364), + 188: uint16(24930), + 189: uint16(28459), + }, + 66: { + 0: uint16(32894), + 1: uint16(32897), + 2: uint16(32898), + 3: uint16(32901), + 4: uint16(32904), + 5: uint16(32906), + 6: uint16(32909), + 7: uint16(32910), + 8: uint16(32911), + 9: uint16(32912), + 10: uint16(32913), + 11: uint16(32914), + 12: uint16(32916), + 13: uint16(32917), + 14: uint16(32919), + 15: uint16(32921), + 16: uint16(32926), + 17: uint16(32931), + 18: uint16(32934), + 19: uint16(32935), + 20: uint16(32936), + 21: uint16(32940), + 22: uint16(32944), + 23: uint16(32947), + 24: uint16(32949), + 25: uint16(32950), + 26: uint16(32952), + 27: uint16(32953), + 28: uint16(32955), + 29: uint16(32965), + 30: uint16(32967), + 31: uint16(32968), + 32: uint16(32969), + 33: uint16(32970), + 34: uint16(32971), + 35: uint16(32975), + 36: uint16(32976), + 37: uint16(32977), + 38: uint16(32978), + 39: uint16(32979), + 40: uint16(32980), + 41: uint16(32981), + 42: uint16(32984), + 43: uint16(32991), + 44: uint16(32992), + 45: uint16(32994), + 46: uint16(32995), + 47: uint16(32998), + 48: uint16(33006), + 49: uint16(33013), + 50: uint16(33015), + 51: uint16(33017), + 52: uint16(33019), + 53: uint16(33022), + 54: uint16(33023), + 55: uint16(33024), + 56: uint16(33025), + 57: uint16(33027), + 58: uint16(33028), + 59: uint16(33029), + 60: uint16(33031), + 61: uint16(33032), + 62: uint16(33035), + 63: uint16(33036), + 64: uint16(33045), + 65: uint16(33047), + 66: uint16(33049), + 67: uint16(33051), + 68: uint16(33052), + 69: uint16(33053), + 70: uint16(33055), + 71: uint16(33056), + 72: uint16(33057), + 73: uint16(33058), + 74: uint16(33059), + 75: uint16(33060), + 76: uint16(33061), + 77: uint16(33062), + 78: uint16(33063), + 79: uint16(33064), + 80: uint16(33065), + 81: uint16(33066), + 82: uint16(33067), + 83: uint16(33069), + 84: uint16(33070), + 85: uint16(33072), + 86: uint16(33075), + 87: uint16(33076), + 88: uint16(33077), + 89: uint16(33079), + 90: uint16(33081), + 91: uint16(33082), + 92: uint16(33083), + 93: uint16(33084), + 94: uint16(33085), + 95: uint16(33087), + 96: uint16(35881), + 97: uint16(33426), + 98: uint16(33579), + 99: uint16(30450), + 100: uint16(27667), + 101: uint16(24537), + 102: uint16(33725), + 103: uint16(29483), + 104: uint16(33541), + 105: uint16(38170), + 106: uint16(27611), + 107: uint16(30683), + 108: uint16(38086), + 109: uint16(21359), + 110: uint16(33538), + 111: uint16(20882), + 112: uint16(24125), + 113: uint16(35980), + 114: uint16(36152), + 115: uint16(20040), + 116: uint16(29611), + 117: uint16(26522), + 118: uint16(26757), + 119: uint16(37238), + 120: uint16(38665), + 121: uint16(29028), + 122: uint16(27809), + 123: uint16(30473), + 124: uint16(23186), + 125: uint16(38209), + 126: uint16(27599), + 127: uint16(32654), + 128: uint16(26151), + 129: uint16(23504), + 130: uint16(22969), + 131: uint16(23194), + 132: uint16(38376), + 133: uint16(38391), + 134: uint16(20204), + 135: uint16(33804), + 136: uint16(33945), + 137: uint16(27308), + 138: uint16(30431), + 139: uint16(38192), + 140: uint16(29467), + 141: uint16(26790), + 142: uint16(23391), + 143: uint16(30511), + 144: uint16(37274), + 145: uint16(38753), + 146: uint16(31964), + 147: uint16(36855), + 148: uint16(35868), + 149: uint16(24357), + 150: uint16(31859), + 151: uint16(31192), + 152: uint16(35269), + 153: uint16(27852), + 154: uint16(34588), + 155: uint16(23494), + 156: uint16(24130), + 157: uint16(26825), + 158: uint16(30496), + 159: uint16(32501), + 160: uint16(20885), + 161: uint16(20813), + 162: uint16(21193), + 163: uint16(23081), + 164: uint16(32517), + 165: uint16(38754), + 166: uint16(33495), + 167: uint16(25551), + 168: uint16(30596), + 169: uint16(34256), + 170: uint16(31186), + 171: uint16(28218), + 172: uint16(24217), + 173: uint16(22937), + 174: uint16(34065), + 175: uint16(28781), + 176: uint16(27665), + 177: uint16(25279), + 178: uint16(30399), + 179: uint16(25935), + 180: uint16(24751), + 181: uint16(38397), + 182: uint16(26126), + 183: uint16(34719), + 184: uint16(40483), + 185: uint16(38125), + 186: uint16(21517), + 187: uint16(21629), + 188: uint16(35884), + 189: uint16(25720), + }, + 67: { + 0: uint16(33088), + 1: uint16(33089), + 2: uint16(33090), + 3: uint16(33091), + 4: uint16(33092), + 5: uint16(33093), + 6: uint16(33095), + 7: uint16(33097), + 8: uint16(33101), + 9: uint16(33102), + 10: uint16(33103), + 11: uint16(33106), + 12: uint16(33110), + 13: uint16(33111), + 14: uint16(33112), + 15: uint16(33115), + 16: uint16(33116), + 17: uint16(33117), + 18: uint16(33118), + 19: uint16(33119), + 20: uint16(33121), + 21: uint16(33122), + 22: uint16(33123), + 23: uint16(33124), + 24: uint16(33126), + 25: uint16(33128), + 26: uint16(33130), + 27: uint16(33131), + 28: uint16(33132), + 29: uint16(33135), + 30: uint16(33138), + 31: uint16(33139), + 32: uint16(33141), + 33: uint16(33142), + 34: uint16(33143), + 35: uint16(33144), + 36: uint16(33153), + 37: uint16(33155), + 38: uint16(33156), + 39: uint16(33157), + 40: uint16(33158), + 41: uint16(33159), + 42: uint16(33161), + 43: uint16(33163), + 44: uint16(33164), + 45: uint16(33165), + 46: uint16(33166), + 47: uint16(33168), + 48: uint16(33170), + 49: uint16(33171), + 50: uint16(33172), + 51: uint16(33173), + 52: uint16(33174), + 53: uint16(33175), + 54: uint16(33177), + 55: uint16(33178), + 56: uint16(33182), + 57: uint16(33183), + 58: uint16(33184), + 59: uint16(33185), + 60: uint16(33186), + 61: uint16(33188), + 62: uint16(33189), + 63: uint16(33191), + 64: uint16(33193), + 65: uint16(33195), + 66: uint16(33196), + 67: uint16(33197), + 68: uint16(33198), + 69: uint16(33199), + 70: uint16(33200), + 71: uint16(33201), + 72: uint16(33202), + 73: uint16(33204), + 74: uint16(33205), + 75: uint16(33206), + 76: uint16(33207), + 77: uint16(33208), + 78: uint16(33209), + 79: uint16(33212), + 80: uint16(33213), + 81: uint16(33214), + 82: uint16(33215), + 83: uint16(33220), + 84: uint16(33221), + 85: uint16(33223), + 86: uint16(33224), + 87: uint16(33225), + 88: uint16(33227), + 89: uint16(33229), + 90: uint16(33230), + 91: uint16(33231), + 92: uint16(33232), + 93: uint16(33233), + 94: uint16(33234), + 95: uint16(33235), + 96: uint16(25721), + 97: uint16(34321), + 98: uint16(27169), + 99: uint16(33180), + 100: uint16(30952), + 101: uint16(25705), + 102: uint16(39764), + 103: uint16(25273), + 104: uint16(26411), + 105: uint16(33707), + 106: uint16(22696), + 107: uint16(40664), + 108: uint16(27819), + 109: uint16(28448), + 110: uint16(23518), + 111: uint16(38476), + 112: uint16(35851), + 113: uint16(29279), + 114: uint16(26576), + 115: uint16(25287), + 116: uint16(29281), + 117: uint16(20137), + 118: uint16(22982), + 119: uint16(27597), + 120: uint16(22675), + 121: uint16(26286), + 122: uint16(24149), + 123: uint16(21215), + 124: uint16(24917), + 125: uint16(26408), + 126: uint16(30446), + 127: uint16(30566), + 128: uint16(29287), + 129: uint16(31302), + 130: uint16(25343), + 131: uint16(21738), + 132: uint16(21584), + 133: uint16(38048), + 134: uint16(37027), + 135: uint16(23068), + 136: uint16(32435), + 137: uint16(27670), + 138: uint16(20035), + 139: uint16(22902), + 140: uint16(32784), + 141: uint16(22856), + 142: uint16(21335), + 143: uint16(30007), + 144: uint16(38590), + 145: uint16(22218), + 146: uint16(25376), + 147: uint16(33041), + 148: uint16(24700), + 149: uint16(38393), + 150: uint16(28118), + 151: uint16(21602), + 152: uint16(39297), + 153: uint16(20869), + 154: uint16(23273), + 155: uint16(33021), + 156: uint16(22958), + 157: uint16(38675), + 158: uint16(20522), + 159: uint16(27877), + 160: uint16(23612), + 161: uint16(25311), + 162: uint16(20320), + 163: uint16(21311), + 164: uint16(33147), + 165: uint16(36870), + 166: uint16(28346), + 167: uint16(34091), + 168: uint16(25288), + 169: uint16(24180), + 170: uint16(30910), + 171: uint16(25781), + 172: uint16(25467), + 173: uint16(24565), + 174: uint16(23064), + 175: uint16(37247), + 176: uint16(40479), + 177: uint16(23615), + 178: uint16(25423), + 179: uint16(32834), + 180: uint16(23421), + 181: uint16(21870), + 182: uint16(38218), + 183: uint16(38221), + 184: uint16(28037), + 185: uint16(24744), + 186: uint16(26592), + 187: uint16(29406), + 188: uint16(20957), + 189: uint16(23425), + }, + 68: { + 0: uint16(33236), + 1: uint16(33237), + 2: uint16(33238), + 3: uint16(33239), + 4: uint16(33240), + 5: uint16(33241), + 6: uint16(33242), + 7: uint16(33243), + 8: uint16(33244), + 9: uint16(33245), + 10: uint16(33246), + 11: uint16(33247), + 12: uint16(33248), + 13: uint16(33249), + 14: uint16(33250), + 15: uint16(33252), + 16: uint16(33253), + 17: uint16(33254), + 18: uint16(33256), + 19: uint16(33257), + 20: uint16(33259), + 21: uint16(33262), + 22: uint16(33263), + 23: uint16(33264), + 24: uint16(33265), + 25: uint16(33266), + 26: uint16(33269), + 27: uint16(33270), + 28: uint16(33271), + 29: uint16(33272), + 30: uint16(33273), + 31: uint16(33274), + 32: uint16(33277), + 33: uint16(33279), + 34: uint16(33283), + 35: uint16(33287), + 36: uint16(33288), + 37: uint16(33289), + 38: uint16(33290), + 39: uint16(33291), + 40: uint16(33294), + 41: uint16(33295), + 42: uint16(33297), + 43: uint16(33299), + 44: uint16(33301), + 45: uint16(33302), + 46: uint16(33303), + 47: uint16(33304), + 48: uint16(33305), + 49: uint16(33306), + 50: uint16(33309), + 51: uint16(33312), + 52: uint16(33316), + 53: uint16(33317), + 54: uint16(33318), + 55: uint16(33319), + 56: uint16(33321), + 57: uint16(33326), + 58: uint16(33330), + 59: uint16(33338), + 60: uint16(33340), + 61: uint16(33341), + 62: uint16(33343), + 63: uint16(33344), + 64: uint16(33345), + 65: uint16(33346), + 66: uint16(33347), + 67: uint16(33349), + 68: uint16(33350), + 69: uint16(33352), + 70: uint16(33354), + 71: uint16(33356), + 72: uint16(33357), + 73: uint16(33358), + 74: uint16(33360), + 75: uint16(33361), + 76: uint16(33362), + 77: uint16(33363), + 78: uint16(33364), + 79: uint16(33365), + 80: uint16(33366), + 81: uint16(33367), + 82: uint16(33369), + 83: uint16(33371), + 84: uint16(33372), + 85: uint16(33373), + 86: uint16(33374), + 87: uint16(33376), + 88: uint16(33377), + 89: uint16(33378), + 90: uint16(33379), + 91: uint16(33380), + 92: uint16(33381), + 93: uint16(33382), + 94: uint16(33383), + 95: uint16(33385), + 96: uint16(25319), + 97: uint16(27870), + 98: uint16(29275), + 99: uint16(25197), + 100: uint16(38062), + 101: uint16(32445), + 102: uint16(33043), + 103: uint16(27987), + 104: uint16(20892), + 105: uint16(24324), + 106: uint16(22900), + 107: uint16(21162), + 108: uint16(24594), + 109: uint16(22899), + 110: uint16(26262), + 111: uint16(34384), + 112: uint16(30111), + 113: uint16(25386), + 114: uint16(25062), + 115: uint16(31983), + 116: uint16(35834), + 117: uint16(21734), + 118: uint16(27431), + 119: uint16(40485), + 120: uint16(27572), + 121: uint16(34261), + 122: uint16(21589), + 123: uint16(20598), + 124: uint16(27812), + 125: uint16(21866), + 126: uint16(36276), + 127: uint16(29228), + 128: uint16(24085), + 129: uint16(24597), + 130: uint16(29750), + 131: uint16(25293), + 132: uint16(25490), + 133: uint16(29260), + 134: uint16(24472), + 135: uint16(28227), + 136: uint16(27966), + 137: uint16(25856), + 138: uint16(28504), + 139: uint16(30424), + 140: uint16(30928), + 141: uint16(30460), + 142: uint16(30036), + 143: uint16(21028), + 144: uint16(21467), + 145: uint16(20051), + 146: uint16(24222), + 147: uint16(26049), + 148: uint16(32810), + 149: uint16(32982), + 150: uint16(25243), + 151: uint16(21638), + 152: uint16(21032), + 153: uint16(28846), + 154: uint16(34957), + 155: uint16(36305), + 156: uint16(27873), + 157: uint16(21624), + 158: uint16(32986), + 159: uint16(22521), + 160: uint16(35060), + 161: uint16(36180), + 162: uint16(38506), + 163: uint16(37197), + 164: uint16(20329), + 165: uint16(27803), + 166: uint16(21943), + 167: uint16(30406), + 168: uint16(30768), + 169: uint16(25256), + 170: uint16(28921), + 171: uint16(28558), + 172: uint16(24429), + 173: uint16(34028), + 174: uint16(26842), + 175: uint16(30844), + 176: uint16(31735), + 177: uint16(33192), + 178: uint16(26379), + 179: uint16(40527), + 180: uint16(25447), + 181: uint16(30896), + 182: uint16(22383), + 183: uint16(30738), + 184: uint16(38713), + 185: uint16(25209), + 186: uint16(25259), + 187: uint16(21128), + 188: uint16(29749), + 189: uint16(27607), + }, + 69: { + 0: uint16(33386), + 1: uint16(33387), + 2: uint16(33388), + 3: uint16(33389), + 4: uint16(33393), + 5: uint16(33397), + 6: uint16(33398), + 7: uint16(33399), + 8: uint16(33400), + 9: uint16(33403), + 10: uint16(33404), + 11: uint16(33408), + 12: uint16(33409), + 13: uint16(33411), + 14: uint16(33413), + 15: uint16(33414), + 16: uint16(33415), + 17: uint16(33417), + 18: uint16(33420), + 19: uint16(33424), + 20: uint16(33427), + 21: uint16(33428), + 22: uint16(33429), + 23: uint16(33430), + 24: uint16(33434), + 25: uint16(33435), + 26: uint16(33438), + 27: uint16(33440), + 28: uint16(33442), + 29: uint16(33443), + 30: uint16(33447), + 31: uint16(33458), + 32: uint16(33461), + 33: uint16(33462), + 34: uint16(33466), + 35: uint16(33467), + 36: uint16(33468), + 37: uint16(33471), + 38: uint16(33472), + 39: uint16(33474), + 40: uint16(33475), + 41: uint16(33477), + 42: uint16(33478), + 43: uint16(33481), + 44: uint16(33488), + 45: uint16(33494), + 46: uint16(33497), + 47: uint16(33498), + 48: uint16(33501), + 49: uint16(33506), + 50: uint16(33511), + 51: uint16(33512), + 52: uint16(33513), + 53: uint16(33514), + 54: uint16(33516), + 55: uint16(33517), + 56: uint16(33518), + 57: uint16(33520), + 58: uint16(33522), + 59: uint16(33523), + 60: uint16(33525), + 61: uint16(33526), + 62: uint16(33528), + 63: uint16(33530), + 64: uint16(33532), + 65: uint16(33533), + 66: uint16(33534), + 67: uint16(33535), + 68: uint16(33536), + 69: uint16(33546), + 70: uint16(33547), + 71: uint16(33549), + 72: uint16(33552), + 73: uint16(33554), + 74: uint16(33555), + 75: uint16(33558), + 76: uint16(33560), + 77: uint16(33561), + 78: uint16(33565), + 79: uint16(33566), + 80: uint16(33567), + 81: uint16(33568), + 82: uint16(33569), + 83: uint16(33570), + 84: uint16(33571), + 85: uint16(33572), + 86: uint16(33573), + 87: uint16(33574), + 88: uint16(33577), + 89: uint16(33578), + 90: uint16(33582), + 91: uint16(33584), + 92: uint16(33586), + 93: uint16(33591), + 94: uint16(33595), + 95: uint16(33597), + 96: uint16(21860), + 97: uint16(33086), + 98: uint16(30130), + 99: uint16(30382), + 100: uint16(21305), + 101: uint16(30174), + 102: uint16(20731), + 103: uint16(23617), + 104: uint16(35692), + 105: uint16(31687), + 106: uint16(20559), + 107: uint16(29255), + 108: uint16(39575), + 109: uint16(39128), + 110: uint16(28418), + 111: uint16(29922), + 112: uint16(31080), + 113: uint16(25735), + 114: uint16(30629), + 115: uint16(25340), + 116: uint16(39057), + 117: uint16(36139), + 118: uint16(21697), + 119: uint16(32856), + 120: uint16(20050), + 121: uint16(22378), + 122: uint16(33529), + 123: uint16(33805), + 124: uint16(24179), + 125: uint16(20973), + 126: uint16(29942), + 127: uint16(35780), + 128: uint16(23631), + 129: uint16(22369), + 130: uint16(27900), + 131: uint16(39047), + 132: uint16(23110), + 133: uint16(30772), + 134: uint16(39748), + 135: uint16(36843), + 136: uint16(31893), + 137: uint16(21078), + 138: uint16(25169), + 139: uint16(38138), + 140: uint16(20166), + 141: uint16(33670), + 142: uint16(33889), + 143: uint16(33769), + 144: uint16(33970), + 145: uint16(22484), + 146: uint16(26420), + 147: uint16(22275), + 148: uint16(26222), + 149: uint16(28006), + 150: uint16(35889), + 151: uint16(26333), + 152: uint16(28689), + 153: uint16(26399), + 154: uint16(27450), + 155: uint16(26646), + 156: uint16(25114), + 157: uint16(22971), + 158: uint16(19971), + 159: uint16(20932), + 160: uint16(28422), + 161: uint16(26578), + 162: uint16(27791), + 163: uint16(20854), + 164: uint16(26827), + 165: uint16(22855), + 166: uint16(27495), + 167: uint16(30054), + 168: uint16(23822), + 169: uint16(33040), + 170: uint16(40784), + 171: uint16(26071), + 172: uint16(31048), + 173: uint16(31041), + 174: uint16(39569), + 175: uint16(36215), + 176: uint16(23682), + 177: uint16(20062), + 178: uint16(20225), + 179: uint16(21551), + 180: uint16(22865), + 181: uint16(30732), + 182: uint16(22120), + 183: uint16(27668), + 184: uint16(36804), + 185: uint16(24323), + 186: uint16(27773), + 187: uint16(27875), + 188: uint16(35755), + 189: uint16(25488), + }, + 70: { + 0: uint16(33598), + 1: uint16(33599), + 2: uint16(33601), + 3: uint16(33602), + 4: uint16(33604), + 5: uint16(33605), + 6: uint16(33608), + 7: uint16(33610), + 8: uint16(33611), + 9: uint16(33612), + 10: uint16(33613), + 11: uint16(33614), + 12: uint16(33619), + 13: uint16(33621), + 14: uint16(33622), + 15: uint16(33623), + 16: uint16(33624), + 17: uint16(33625), + 18: uint16(33629), + 19: uint16(33634), + 20: uint16(33648), + 21: uint16(33649), + 22: uint16(33650), + 23: uint16(33651), + 24: uint16(33652), + 25: uint16(33653), + 26: uint16(33654), + 27: uint16(33657), + 28: uint16(33658), + 29: uint16(33662), + 30: uint16(33663), + 31: uint16(33664), + 32: uint16(33665), + 33: uint16(33666), + 34: uint16(33667), + 35: uint16(33668), + 36: uint16(33671), + 37: uint16(33672), + 38: uint16(33674), + 39: uint16(33675), + 40: uint16(33676), + 41: uint16(33677), + 42: uint16(33679), + 43: uint16(33680), + 44: uint16(33681), + 45: uint16(33684), + 46: uint16(33685), + 47: uint16(33686), + 48: uint16(33687), + 49: uint16(33689), + 50: uint16(33690), + 51: uint16(33693), + 52: uint16(33695), + 53: uint16(33697), + 54: uint16(33698), + 55: uint16(33699), + 56: uint16(33700), + 57: uint16(33701), + 58: uint16(33702), + 59: uint16(33703), + 60: uint16(33708), + 61: uint16(33709), + 62: uint16(33710), + 63: uint16(33711), + 64: uint16(33717), + 65: uint16(33723), + 66: uint16(33726), + 67: uint16(33727), + 68: uint16(33730), + 69: uint16(33731), + 70: uint16(33732), + 71: uint16(33734), + 72: uint16(33736), + 73: uint16(33737), + 74: uint16(33739), + 75: uint16(33741), + 76: uint16(33742), + 77: uint16(33744), + 78: uint16(33745), + 79: uint16(33746), + 80: uint16(33747), + 81: uint16(33749), + 82: uint16(33751), + 83: uint16(33753), + 84: uint16(33754), + 85: uint16(33755), + 86: uint16(33758), + 87: uint16(33762), + 88: uint16(33763), + 89: uint16(33764), + 90: uint16(33766), + 91: uint16(33767), + 92: uint16(33768), + 93: uint16(33771), + 94: uint16(33772), + 95: uint16(33773), + 96: uint16(24688), + 97: uint16(27965), + 98: uint16(29301), + 99: uint16(25190), + 100: uint16(38030), + 101: uint16(38085), + 102: uint16(21315), + 103: uint16(36801), + 104: uint16(31614), + 105: uint16(20191), + 106: uint16(35878), + 107: uint16(20094), + 108: uint16(40660), + 109: uint16(38065), + 110: uint16(38067), + 111: uint16(21069), + 112: uint16(28508), + 113: uint16(36963), + 114: uint16(27973), + 115: uint16(35892), + 116: uint16(22545), + 117: uint16(23884), + 118: uint16(27424), + 119: uint16(27465), + 120: uint16(26538), + 121: uint16(21595), + 122: uint16(33108), + 123: uint16(32652), + 124: uint16(22681), + 125: uint16(34103), + 126: uint16(24378), + 127: uint16(25250), + 128: uint16(27207), + 129: uint16(38201), + 130: uint16(25970), + 131: uint16(24708), + 132: uint16(26725), + 133: uint16(30631), + 134: uint16(20052), + 135: uint16(20392), + 136: uint16(24039), + 137: uint16(38808), + 138: uint16(25772), + 139: uint16(32728), + 140: uint16(23789), + 141: uint16(20431), + 142: uint16(31373), + 143: uint16(20999), + 144: uint16(33540), + 145: uint16(19988), + 146: uint16(24623), + 147: uint16(31363), + 148: uint16(38054), + 149: uint16(20405), + 150: uint16(20146), + 151: uint16(31206), + 152: uint16(29748), + 153: uint16(21220), + 154: uint16(33465), + 155: uint16(25810), + 156: uint16(31165), + 157: uint16(23517), + 158: uint16(27777), + 159: uint16(38738), + 160: uint16(36731), + 161: uint16(27682), + 162: uint16(20542), + 163: uint16(21375), + 164: uint16(28165), + 165: uint16(25806), + 166: uint16(26228), + 167: uint16(27696), + 168: uint16(24773), + 169: uint16(39031), + 170: uint16(35831), + 171: uint16(24198), + 172: uint16(29756), + 173: uint16(31351), + 174: uint16(31179), + 175: uint16(19992), + 176: uint16(37041), + 177: uint16(29699), + 178: uint16(27714), + 179: uint16(22234), + 180: uint16(37195), + 181: uint16(27845), + 182: uint16(36235), + 183: uint16(21306), + 184: uint16(34502), + 185: uint16(26354), + 186: uint16(36527), + 187: uint16(23624), + 188: uint16(39537), + 189: uint16(28192), + }, + 71: { + 0: uint16(33774), + 1: uint16(33775), + 2: uint16(33779), + 3: uint16(33780), + 4: uint16(33781), + 5: uint16(33782), + 6: uint16(33783), + 7: uint16(33786), + 8: uint16(33787), + 9: uint16(33788), + 10: uint16(33790), + 11: uint16(33791), + 12: uint16(33792), + 13: uint16(33794), + 14: uint16(33797), + 15: uint16(33799), + 16: uint16(33800), + 17: uint16(33801), + 18: uint16(33802), + 19: uint16(33808), + 20: uint16(33810), + 21: uint16(33811), + 22: uint16(33812), + 23: uint16(33813), + 24: uint16(33814), + 25: uint16(33815), + 26: uint16(33817), + 27: uint16(33818), + 28: uint16(33819), + 29: uint16(33822), + 30: uint16(33823), + 31: uint16(33824), + 32: uint16(33825), + 33: uint16(33826), + 34: uint16(33827), + 35: uint16(33833), + 36: uint16(33834), + 37: uint16(33835), + 38: uint16(33836), + 39: uint16(33837), + 40: uint16(33838), + 41: uint16(33839), + 42: uint16(33840), + 43: uint16(33842), + 44: uint16(33843), + 45: uint16(33844), + 46: uint16(33845), + 47: uint16(33846), + 48: uint16(33847), + 49: uint16(33849), + 50: uint16(33850), + 51: uint16(33851), + 52: uint16(33854), + 53: uint16(33855), + 54: uint16(33856), + 55: uint16(33857), + 56: uint16(33858), + 57: uint16(33859), + 58: uint16(33860), + 59: uint16(33861), + 60: uint16(33863), + 61: uint16(33864), + 62: uint16(33865), + 63: uint16(33866), + 64: uint16(33867), + 65: uint16(33868), + 66: uint16(33869), + 67: uint16(33870), + 68: uint16(33871), + 69: uint16(33872), + 70: uint16(33874), + 71: uint16(33875), + 72: uint16(33876), + 73: uint16(33877), + 74: uint16(33878), + 75: uint16(33880), + 76: uint16(33885), + 77: uint16(33886), + 78: uint16(33887), + 79: uint16(33888), + 80: uint16(33890), + 81: uint16(33892), + 82: uint16(33893), + 83: uint16(33894), + 84: uint16(33895), + 85: uint16(33896), + 86: uint16(33898), + 87: uint16(33902), + 88: uint16(33903), + 89: uint16(33904), + 90: uint16(33906), + 91: uint16(33908), + 92: uint16(33911), + 93: uint16(33913), + 94: uint16(33915), + 95: uint16(33916), + 96: uint16(21462), + 97: uint16(23094), + 98: uint16(40843), + 99: uint16(36259), + 100: uint16(21435), + 101: uint16(22280), + 102: uint16(39079), + 103: uint16(26435), + 104: uint16(37275), + 105: uint16(27849), + 106: uint16(20840), + 107: uint16(30154), + 108: uint16(25331), + 109: uint16(29356), + 110: uint16(21048), + 111: uint16(21149), + 112: uint16(32570), + 113: uint16(28820), + 114: uint16(30264), + 115: uint16(21364), + 116: uint16(40522), + 117: uint16(27063), + 118: uint16(30830), + 119: uint16(38592), + 120: uint16(35033), + 121: uint16(32676), + 122: uint16(28982), + 123: uint16(29123), + 124: uint16(20873), + 125: uint16(26579), + 126: uint16(29924), + 127: uint16(22756), + 128: uint16(25880), + 129: uint16(22199), + 130: uint16(35753), + 131: uint16(39286), + 132: uint16(25200), + 133: uint16(32469), + 134: uint16(24825), + 135: uint16(28909), + 136: uint16(22764), + 137: uint16(20161), + 138: uint16(20154), + 139: uint16(24525), + 140: uint16(38887), + 141: uint16(20219), + 142: uint16(35748), + 143: uint16(20995), + 144: uint16(22922), + 145: uint16(32427), + 146: uint16(25172), + 147: uint16(20173), + 148: uint16(26085), + 149: uint16(25102), + 150: uint16(33592), + 151: uint16(33993), + 152: uint16(33635), + 153: uint16(34701), + 154: uint16(29076), + 155: uint16(28342), + 156: uint16(23481), + 157: uint16(32466), + 158: uint16(20887), + 159: uint16(25545), + 160: uint16(26580), + 161: uint16(32905), + 162: uint16(33593), + 163: uint16(34837), + 164: uint16(20754), + 165: uint16(23418), + 166: uint16(22914), + 167: uint16(36785), + 168: uint16(20083), + 169: uint16(27741), + 170: uint16(20837), + 171: uint16(35109), + 172: uint16(36719), + 173: uint16(38446), + 174: uint16(34122), + 175: uint16(29790), + 176: uint16(38160), + 177: uint16(38384), + 178: uint16(28070), + 179: uint16(33509), + 180: uint16(24369), + 181: uint16(25746), + 182: uint16(27922), + 183: uint16(33832), + 184: uint16(33134), + 185: uint16(40131), + 186: uint16(22622), + 187: uint16(36187), + 188: uint16(19977), + 189: uint16(21441), + }, + 72: { + 0: uint16(33917), + 1: uint16(33918), + 2: uint16(33919), + 3: uint16(33920), + 4: uint16(33921), + 5: uint16(33923), + 6: uint16(33924), + 7: uint16(33925), + 8: uint16(33926), + 9: uint16(33930), + 10: uint16(33933), + 11: uint16(33935), + 12: uint16(33936), + 13: uint16(33937), + 14: uint16(33938), + 15: uint16(33939), + 16: uint16(33940), + 17: uint16(33941), + 18: uint16(33942), + 19: uint16(33944), + 20: uint16(33946), + 21: uint16(33947), + 22: uint16(33949), + 23: uint16(33950), + 24: uint16(33951), + 25: uint16(33952), + 26: uint16(33954), + 27: uint16(33955), + 28: uint16(33956), + 29: uint16(33957), + 30: uint16(33958), + 31: uint16(33959), + 32: uint16(33960), + 33: uint16(33961), + 34: uint16(33962), + 35: uint16(33963), + 36: uint16(33964), + 37: uint16(33965), + 38: uint16(33966), + 39: uint16(33968), + 40: uint16(33969), + 41: uint16(33971), + 42: uint16(33973), + 43: uint16(33974), + 44: uint16(33975), + 45: uint16(33979), + 46: uint16(33980), + 47: uint16(33982), + 48: uint16(33984), + 49: uint16(33986), + 50: uint16(33987), + 51: uint16(33989), + 52: uint16(33990), + 53: uint16(33991), + 54: uint16(33992), + 55: uint16(33995), + 56: uint16(33996), + 57: uint16(33998), + 58: uint16(33999), + 59: uint16(34002), + 60: uint16(34004), + 61: uint16(34005), + 62: uint16(34007), + 63: uint16(34008), + 64: uint16(34009), + 65: uint16(34010), + 66: uint16(34011), + 67: uint16(34012), + 68: uint16(34014), + 69: uint16(34017), + 70: uint16(34018), + 71: uint16(34020), + 72: uint16(34023), + 73: uint16(34024), + 74: uint16(34025), + 75: uint16(34026), + 76: uint16(34027), + 77: uint16(34029), + 78: uint16(34030), + 79: uint16(34031), + 80: uint16(34033), + 81: uint16(34034), + 82: uint16(34035), + 83: uint16(34036), + 84: uint16(34037), + 85: uint16(34038), + 86: uint16(34039), + 87: uint16(34040), + 88: uint16(34041), + 89: uint16(34042), + 90: uint16(34043), + 91: uint16(34045), + 92: uint16(34046), + 93: uint16(34048), + 94: uint16(34049), + 95: uint16(34050), + 96: uint16(20254), + 97: uint16(25955), + 98: uint16(26705), + 99: uint16(21971), + 100: uint16(20007), + 101: uint16(25620), + 102: uint16(39578), + 103: uint16(25195), + 104: uint16(23234), + 105: uint16(29791), + 106: uint16(33394), + 107: uint16(28073), + 108: uint16(26862), + 109: uint16(20711), + 110: uint16(33678), + 111: uint16(30722), + 112: uint16(26432), + 113: uint16(21049), + 114: uint16(27801), + 115: uint16(32433), + 116: uint16(20667), + 117: uint16(21861), + 118: uint16(29022), + 119: uint16(31579), + 120: uint16(26194), + 121: uint16(29642), + 122: uint16(33515), + 123: uint16(26441), + 124: uint16(23665), + 125: uint16(21024), + 126: uint16(29053), + 127: uint16(34923), + 128: uint16(38378), + 129: uint16(38485), + 130: uint16(25797), + 131: uint16(36193), + 132: uint16(33203), + 133: uint16(21892), + 134: uint16(27733), + 135: uint16(25159), + 136: uint16(32558), + 137: uint16(22674), + 138: uint16(20260), + 139: uint16(21830), + 140: uint16(36175), + 141: uint16(26188), + 142: uint16(19978), + 143: uint16(23578), + 144: uint16(35059), + 145: uint16(26786), + 146: uint16(25422), + 147: uint16(31245), + 148: uint16(28903), + 149: uint16(33421), + 150: uint16(21242), + 151: uint16(38902), + 152: uint16(23569), + 153: uint16(21736), + 154: uint16(37045), + 155: uint16(32461), + 156: uint16(22882), + 157: uint16(36170), + 158: uint16(34503), + 159: uint16(33292), + 160: uint16(33293), + 161: uint16(36198), + 162: uint16(25668), + 163: uint16(23556), + 164: uint16(24913), + 165: uint16(28041), + 166: uint16(31038), + 167: uint16(35774), + 168: uint16(30775), + 169: uint16(30003), + 170: uint16(21627), + 171: uint16(20280), + 172: uint16(36523), + 173: uint16(28145), + 174: uint16(23072), + 175: uint16(32453), + 176: uint16(31070), + 177: uint16(27784), + 178: uint16(23457), + 179: uint16(23158), + 180: uint16(29978), + 181: uint16(32958), + 182: uint16(24910), + 183: uint16(28183), + 184: uint16(22768), + 185: uint16(29983), + 186: uint16(29989), + 187: uint16(29298), + 188: uint16(21319), + 189: uint16(32499), + }, + 73: { + 0: uint16(34051), + 1: uint16(34052), + 2: uint16(34053), + 3: uint16(34054), + 4: uint16(34055), + 5: uint16(34056), + 6: uint16(34057), + 7: uint16(34058), + 8: uint16(34059), + 9: uint16(34061), + 10: uint16(34062), + 11: uint16(34063), + 12: uint16(34064), + 13: uint16(34066), + 14: uint16(34068), + 15: uint16(34069), + 16: uint16(34070), + 17: uint16(34072), + 18: uint16(34073), + 19: uint16(34075), + 20: uint16(34076), + 21: uint16(34077), + 22: uint16(34078), + 23: uint16(34080), + 24: uint16(34082), + 25: uint16(34083), + 26: uint16(34084), + 27: uint16(34085), + 28: uint16(34086), + 29: uint16(34087), + 30: uint16(34088), + 31: uint16(34089), + 32: uint16(34090), + 33: uint16(34093), + 34: uint16(34094), + 35: uint16(34095), + 36: uint16(34096), + 37: uint16(34097), + 38: uint16(34098), + 39: uint16(34099), + 40: uint16(34100), + 41: uint16(34101), + 42: uint16(34102), + 43: uint16(34110), + 44: uint16(34111), + 45: uint16(34112), + 46: uint16(34113), + 47: uint16(34114), + 48: uint16(34116), + 49: uint16(34117), + 50: uint16(34118), + 51: uint16(34119), + 52: uint16(34123), + 53: uint16(34124), + 54: uint16(34125), + 55: uint16(34126), + 56: uint16(34127), + 57: uint16(34128), + 58: uint16(34129), + 59: uint16(34130), + 60: uint16(34131), + 61: uint16(34132), + 62: uint16(34133), + 63: uint16(34135), + 64: uint16(34136), + 65: uint16(34138), + 66: uint16(34139), + 67: uint16(34140), + 68: uint16(34141), + 69: uint16(34143), + 70: uint16(34144), + 71: uint16(34145), + 72: uint16(34146), + 73: uint16(34147), + 74: uint16(34149), + 75: uint16(34150), + 76: uint16(34151), + 77: uint16(34153), + 78: uint16(34154), + 79: uint16(34155), + 80: uint16(34156), + 81: uint16(34157), + 82: uint16(34158), + 83: uint16(34159), + 84: uint16(34160), + 85: uint16(34161), + 86: uint16(34163), + 87: uint16(34165), + 88: uint16(34166), + 89: uint16(34167), + 90: uint16(34168), + 91: uint16(34172), + 92: uint16(34173), + 93: uint16(34175), + 94: uint16(34176), + 95: uint16(34177), + 96: uint16(30465), + 97: uint16(30427), + 98: uint16(21097), + 99: uint16(32988), + 100: uint16(22307), + 101: uint16(24072), + 102: uint16(22833), + 103: uint16(29422), + 104: uint16(26045), + 105: uint16(28287), + 106: uint16(35799), + 107: uint16(23608), + 108: uint16(34417), + 109: uint16(21313), + 110: uint16(30707), + 111: uint16(25342), + 112: uint16(26102), + 113: uint16(20160), + 114: uint16(39135), + 115: uint16(34432), + 116: uint16(23454), + 117: uint16(35782), + 118: uint16(21490), + 119: uint16(30690), + 120: uint16(20351), + 121: uint16(23630), + 122: uint16(39542), + 123: uint16(22987), + 124: uint16(24335), + 125: uint16(31034), + 126: uint16(22763), + 127: uint16(19990), + 128: uint16(26623), + 129: uint16(20107), + 130: uint16(25325), + 131: uint16(35475), + 132: uint16(36893), + 133: uint16(21183), + 134: uint16(26159), + 135: uint16(21980), + 136: uint16(22124), + 137: uint16(36866), + 138: uint16(20181), + 139: uint16(20365), + 140: uint16(37322), + 141: uint16(39280), + 142: uint16(27663), + 143: uint16(24066), + 144: uint16(24643), + 145: uint16(23460), + 146: uint16(35270), + 147: uint16(35797), + 148: uint16(25910), + 149: uint16(25163), + 150: uint16(39318), + 151: uint16(23432), + 152: uint16(23551), + 153: uint16(25480), + 154: uint16(21806), + 155: uint16(21463), + 156: uint16(30246), + 157: uint16(20861), + 158: uint16(34092), + 159: uint16(26530), + 160: uint16(26803), + 161: uint16(27530), + 162: uint16(25234), + 163: uint16(36755), + 164: uint16(21460), + 165: uint16(33298), + 166: uint16(28113), + 167: uint16(30095), + 168: uint16(20070), + 169: uint16(36174), + 170: uint16(23408), + 171: uint16(29087), + 172: uint16(34223), + 173: uint16(26257), + 174: uint16(26329), + 175: uint16(32626), + 176: uint16(34560), + 177: uint16(40653), + 178: uint16(40736), + 179: uint16(23646), + 180: uint16(26415), + 181: uint16(36848), + 182: uint16(26641), + 183: uint16(26463), + 184: uint16(25101), + 185: uint16(31446), + 186: uint16(22661), + 187: uint16(24246), + 188: uint16(25968), + 189: uint16(28465), + }, + 74: { + 0: uint16(34178), + 1: uint16(34179), + 2: uint16(34182), + 3: uint16(34184), + 4: uint16(34185), + 5: uint16(34186), + 6: uint16(34187), + 7: uint16(34188), + 8: uint16(34189), + 9: uint16(34190), + 10: uint16(34192), + 11: uint16(34193), + 12: uint16(34194), + 13: uint16(34195), + 14: uint16(34196), + 15: uint16(34197), + 16: uint16(34198), + 17: uint16(34199), + 18: uint16(34200), + 19: uint16(34201), + 20: uint16(34202), + 21: uint16(34205), + 22: uint16(34206), + 23: uint16(34207), + 24: uint16(34208), + 25: uint16(34209), + 26: uint16(34210), + 27: uint16(34211), + 28: uint16(34213), + 29: uint16(34214), + 30: uint16(34215), + 31: uint16(34217), + 32: uint16(34219), + 33: uint16(34220), + 34: uint16(34221), + 35: uint16(34225), + 36: uint16(34226), + 37: uint16(34227), + 38: uint16(34228), + 39: uint16(34229), + 40: uint16(34230), + 41: uint16(34232), + 42: uint16(34234), + 43: uint16(34235), + 44: uint16(34236), + 45: uint16(34237), + 46: uint16(34238), + 47: uint16(34239), + 48: uint16(34240), + 49: uint16(34242), + 50: uint16(34243), + 51: uint16(34244), + 52: uint16(34245), + 53: uint16(34246), + 54: uint16(34247), + 55: uint16(34248), + 56: uint16(34250), + 57: uint16(34251), + 58: uint16(34252), + 59: uint16(34253), + 60: uint16(34254), + 61: uint16(34257), + 62: uint16(34258), + 63: uint16(34260), + 64: uint16(34262), + 65: uint16(34263), + 66: uint16(34264), + 67: uint16(34265), + 68: uint16(34266), + 69: uint16(34267), + 70: uint16(34269), + 71: uint16(34270), + 72: uint16(34271), + 73: uint16(34272), + 74: uint16(34273), + 75: uint16(34274), + 76: uint16(34275), + 77: uint16(34277), + 78: uint16(34278), + 79: uint16(34279), + 80: uint16(34280), + 81: uint16(34282), + 82: uint16(34283), + 83: uint16(34284), + 84: uint16(34285), + 85: uint16(34286), + 86: uint16(34287), + 87: uint16(34288), + 88: uint16(34289), + 89: uint16(34290), + 90: uint16(34291), + 91: uint16(34292), + 92: uint16(34293), + 93: uint16(34294), + 94: uint16(34295), + 95: uint16(34296), + 96: uint16(24661), + 97: uint16(21047), + 98: uint16(32781), + 99: uint16(25684), + 100: uint16(34928), + 101: uint16(29993), + 102: uint16(24069), + 103: uint16(26643), + 104: uint16(25332), + 105: uint16(38684), + 106: uint16(21452), + 107: uint16(29245), + 108: uint16(35841), + 109: uint16(27700), + 110: uint16(30561), + 111: uint16(31246), + 112: uint16(21550), + 113: uint16(30636), + 114: uint16(39034), + 115: uint16(33308), + 116: uint16(35828), + 117: uint16(30805), + 118: uint16(26388), + 119: uint16(28865), + 120: uint16(26031), + 121: uint16(25749), + 122: uint16(22070), + 123: uint16(24605), + 124: uint16(31169), + 125: uint16(21496), + 126: uint16(19997), + 127: uint16(27515), + 128: uint16(32902), + 129: uint16(23546), + 130: uint16(21987), + 131: uint16(22235), + 132: uint16(20282), + 133: uint16(20284), + 134: uint16(39282), + 135: uint16(24051), + 136: uint16(26494), + 137: uint16(32824), + 138: uint16(24578), + 139: uint16(39042), + 140: uint16(36865), + 141: uint16(23435), + 142: uint16(35772), + 143: uint16(35829), + 144: uint16(25628), + 145: uint16(33368), + 146: uint16(25822), + 147: uint16(22013), + 148: uint16(33487), + 149: uint16(37221), + 150: uint16(20439), + 151: uint16(32032), + 152: uint16(36895), + 153: uint16(31903), + 154: uint16(20723), + 155: uint16(22609), + 156: uint16(28335), + 157: uint16(23487), + 158: uint16(35785), + 159: uint16(32899), + 160: uint16(37240), + 161: uint16(33948), + 162: uint16(31639), + 163: uint16(34429), + 164: uint16(38539), + 165: uint16(38543), + 166: uint16(32485), + 167: uint16(39635), + 168: uint16(30862), + 169: uint16(23681), + 170: uint16(31319), + 171: uint16(36930), + 172: uint16(38567), + 173: uint16(31071), + 174: uint16(23385), + 175: uint16(25439), + 176: uint16(31499), + 177: uint16(34001), + 178: uint16(26797), + 179: uint16(21766), + 180: uint16(32553), + 181: uint16(29712), + 182: uint16(32034), + 183: uint16(38145), + 184: uint16(25152), + 185: uint16(22604), + 186: uint16(20182), + 187: uint16(23427), + 188: uint16(22905), + 189: uint16(22612), + }, + 75: { + 0: uint16(34297), + 1: uint16(34298), + 2: uint16(34300), + 3: uint16(34301), + 4: uint16(34302), + 5: uint16(34304), + 6: uint16(34305), + 7: uint16(34306), + 8: uint16(34307), + 9: uint16(34308), + 10: uint16(34310), + 11: uint16(34311), + 12: uint16(34312), + 13: uint16(34313), + 14: uint16(34314), + 15: uint16(34315), + 16: uint16(34316), + 17: uint16(34317), + 18: uint16(34318), + 19: uint16(34319), + 20: uint16(34320), + 21: uint16(34322), + 22: uint16(34323), + 23: uint16(34324), + 24: uint16(34325), + 25: uint16(34327), + 26: uint16(34328), + 27: uint16(34329), + 28: uint16(34330), + 29: uint16(34331), + 30: uint16(34332), + 31: uint16(34333), + 32: uint16(34334), + 33: uint16(34335), + 34: uint16(34336), + 35: uint16(34337), + 36: uint16(34338), + 37: uint16(34339), + 38: uint16(34340), + 39: uint16(34341), + 40: uint16(34342), + 41: uint16(34344), + 42: uint16(34346), + 43: uint16(34347), + 44: uint16(34348), + 45: uint16(34349), + 46: uint16(34350), + 47: uint16(34351), + 48: uint16(34352), + 49: uint16(34353), + 50: uint16(34354), + 51: uint16(34355), + 52: uint16(34356), + 53: uint16(34357), + 54: uint16(34358), + 55: uint16(34359), + 56: uint16(34361), + 57: uint16(34362), + 58: uint16(34363), + 59: uint16(34365), + 60: uint16(34366), + 61: uint16(34367), + 62: uint16(34368), + 63: uint16(34369), + 64: uint16(34370), + 65: uint16(34371), + 66: uint16(34372), + 67: uint16(34373), + 68: uint16(34374), + 69: uint16(34375), + 70: uint16(34376), + 71: uint16(34377), + 72: uint16(34378), + 73: uint16(34379), + 74: uint16(34380), + 75: uint16(34386), + 76: uint16(34387), + 77: uint16(34389), + 78: uint16(34390), + 79: uint16(34391), + 80: uint16(34392), + 81: uint16(34393), + 82: uint16(34395), + 83: uint16(34396), + 84: uint16(34397), + 85: uint16(34399), + 86: uint16(34400), + 87: uint16(34401), + 88: uint16(34403), + 89: uint16(34404), + 90: uint16(34405), + 91: uint16(34406), + 92: uint16(34407), + 93: uint16(34408), + 94: uint16(34409), + 95: uint16(34410), + 96: uint16(29549), + 97: uint16(25374), + 98: uint16(36427), + 99: uint16(36367), + 100: uint16(32974), + 101: uint16(33492), + 102: uint16(25260), + 103: uint16(21488), + 104: uint16(27888), + 105: uint16(37214), + 106: uint16(22826), + 107: uint16(24577), + 108: uint16(27760), + 109: uint16(22349), + 110: uint16(25674), + 111: uint16(36138), + 112: uint16(30251), + 113: uint16(28393), + 114: uint16(22363), + 115: uint16(27264), + 116: uint16(30192), + 117: uint16(28525), + 118: uint16(35885), + 119: uint16(35848), + 120: uint16(22374), + 121: uint16(27631), + 122: uint16(34962), + 123: uint16(30899), + 124: uint16(25506), + 125: uint16(21497), + 126: uint16(28845), + 127: uint16(27748), + 128: uint16(22616), + 129: uint16(25642), + 130: uint16(22530), + 131: uint16(26848), + 132: uint16(33179), + 133: uint16(21776), + 134: uint16(31958), + 135: uint16(20504), + 136: uint16(36538), + 137: uint16(28108), + 138: uint16(36255), + 139: uint16(28907), + 140: uint16(25487), + 141: uint16(28059), + 142: uint16(28372), + 143: uint16(32486), + 144: uint16(33796), + 145: uint16(26691), + 146: uint16(36867), + 147: uint16(28120), + 148: uint16(38518), + 149: uint16(35752), + 150: uint16(22871), + 151: uint16(29305), + 152: uint16(34276), + 153: uint16(33150), + 154: uint16(30140), + 155: uint16(35466), + 156: uint16(26799), + 157: uint16(21076), + 158: uint16(36386), + 159: uint16(38161), + 160: uint16(25552), + 161: uint16(39064), + 162: uint16(36420), + 163: uint16(21884), + 164: uint16(20307), + 165: uint16(26367), + 166: uint16(22159), + 167: uint16(24789), + 168: uint16(28053), + 169: uint16(21059), + 170: uint16(23625), + 171: uint16(22825), + 172: uint16(28155), + 173: uint16(22635), + 174: uint16(30000), + 175: uint16(29980), + 176: uint16(24684), + 177: uint16(33300), + 178: uint16(33094), + 179: uint16(25361), + 180: uint16(26465), + 181: uint16(36834), + 182: uint16(30522), + 183: uint16(36339), + 184: uint16(36148), + 185: uint16(38081), + 186: uint16(24086), + 187: uint16(21381), + 188: uint16(21548), + 189: uint16(28867), + }, + 76: { + 0: uint16(34413), + 1: uint16(34415), + 2: uint16(34416), + 3: uint16(34418), + 4: uint16(34419), + 5: uint16(34420), + 6: uint16(34421), + 7: uint16(34422), + 8: uint16(34423), + 9: uint16(34424), + 10: uint16(34435), + 11: uint16(34436), + 12: uint16(34437), + 13: uint16(34438), + 14: uint16(34439), + 15: uint16(34440), + 16: uint16(34441), + 17: uint16(34446), + 18: uint16(34447), + 19: uint16(34448), + 20: uint16(34449), + 21: uint16(34450), + 22: uint16(34452), + 23: uint16(34454), + 24: uint16(34455), + 25: uint16(34456), + 26: uint16(34457), + 27: uint16(34458), + 28: uint16(34459), + 29: uint16(34462), + 30: uint16(34463), + 31: uint16(34464), + 32: uint16(34465), + 33: uint16(34466), + 34: uint16(34469), + 35: uint16(34470), + 36: uint16(34475), + 37: uint16(34477), + 38: uint16(34478), + 39: uint16(34482), + 40: uint16(34483), + 41: uint16(34487), + 42: uint16(34488), + 43: uint16(34489), + 44: uint16(34491), + 45: uint16(34492), + 46: uint16(34493), + 47: uint16(34494), + 48: uint16(34495), + 49: uint16(34497), + 50: uint16(34498), + 51: uint16(34499), + 52: uint16(34501), + 53: uint16(34504), + 54: uint16(34508), + 55: uint16(34509), + 56: uint16(34514), + 57: uint16(34515), + 58: uint16(34517), + 59: uint16(34518), + 60: uint16(34519), + 61: uint16(34522), + 62: uint16(34524), + 63: uint16(34525), + 64: uint16(34528), + 65: uint16(34529), + 66: uint16(34530), + 67: uint16(34531), + 68: uint16(34533), + 69: uint16(34534), + 70: uint16(34535), + 71: uint16(34536), + 72: uint16(34538), + 73: uint16(34539), + 74: uint16(34540), + 75: uint16(34543), + 76: uint16(34549), + 77: uint16(34550), + 78: uint16(34551), + 79: uint16(34554), + 80: uint16(34555), + 81: uint16(34556), + 82: uint16(34557), + 83: uint16(34559), + 84: uint16(34561), + 85: uint16(34564), + 86: uint16(34565), + 87: uint16(34566), + 88: uint16(34571), + 89: uint16(34572), + 90: uint16(34574), + 91: uint16(34575), + 92: uint16(34576), + 93: uint16(34577), + 94: uint16(34580), + 95: uint16(34582), + 96: uint16(27712), + 97: uint16(24311), + 98: uint16(20572), + 99: uint16(20141), + 100: uint16(24237), + 101: uint16(25402), + 102: uint16(33351), + 103: uint16(36890), + 104: uint16(26704), + 105: uint16(37230), + 106: uint16(30643), + 107: uint16(21516), + 108: uint16(38108), + 109: uint16(24420), + 110: uint16(31461), + 111: uint16(26742), + 112: uint16(25413), + 113: uint16(31570), + 114: uint16(32479), + 115: uint16(30171), + 116: uint16(20599), + 117: uint16(25237), + 118: uint16(22836), + 119: uint16(36879), + 120: uint16(20984), + 121: uint16(31171), + 122: uint16(31361), + 123: uint16(22270), + 124: uint16(24466), + 125: uint16(36884), + 126: uint16(28034), + 127: uint16(23648), + 128: uint16(22303), + 129: uint16(21520), + 130: uint16(20820), + 131: uint16(28237), + 132: uint16(22242), + 133: uint16(25512), + 134: uint16(39059), + 135: uint16(33151), + 136: uint16(34581), + 137: uint16(35114), + 138: uint16(36864), + 139: uint16(21534), + 140: uint16(23663), + 141: uint16(33216), + 142: uint16(25302), + 143: uint16(25176), + 144: uint16(33073), + 145: uint16(40501), + 146: uint16(38464), + 147: uint16(39534), + 148: uint16(39548), + 149: uint16(26925), + 150: uint16(22949), + 151: uint16(25299), + 152: uint16(21822), + 153: uint16(25366), + 154: uint16(21703), + 155: uint16(34521), + 156: uint16(27964), + 157: uint16(23043), + 158: uint16(29926), + 159: uint16(34972), + 160: uint16(27498), + 161: uint16(22806), + 162: uint16(35916), + 163: uint16(24367), + 164: uint16(28286), + 165: uint16(29609), + 166: uint16(39037), + 167: uint16(20024), + 168: uint16(28919), + 169: uint16(23436), + 170: uint16(30871), + 171: uint16(25405), + 172: uint16(26202), + 173: uint16(30358), + 174: uint16(24779), + 175: uint16(23451), + 176: uint16(23113), + 177: uint16(19975), + 178: uint16(33109), + 179: uint16(27754), + 180: uint16(29579), + 181: uint16(20129), + 182: uint16(26505), + 183: uint16(32593), + 184: uint16(24448), + 185: uint16(26106), + 186: uint16(26395), + 187: uint16(24536), + 188: uint16(22916), + 189: uint16(23041), + }, + 77: { + 0: uint16(34585), + 1: uint16(34587), + 2: uint16(34589), + 3: uint16(34591), + 4: uint16(34592), + 5: uint16(34596), + 6: uint16(34598), + 7: uint16(34599), + 8: uint16(34600), + 9: uint16(34602), + 10: uint16(34603), + 11: uint16(34604), + 12: uint16(34605), + 13: uint16(34607), + 14: uint16(34608), + 15: uint16(34610), + 16: uint16(34611), + 17: uint16(34613), + 18: uint16(34614), + 19: uint16(34616), + 20: uint16(34617), + 21: uint16(34618), + 22: uint16(34620), + 23: uint16(34621), + 24: uint16(34624), + 25: uint16(34625), + 26: uint16(34626), + 27: uint16(34627), + 28: uint16(34628), + 29: uint16(34629), + 30: uint16(34630), + 31: uint16(34634), + 32: uint16(34635), + 33: uint16(34637), + 34: uint16(34639), + 35: uint16(34640), + 36: uint16(34641), + 37: uint16(34642), + 38: uint16(34644), + 39: uint16(34645), + 40: uint16(34646), + 41: uint16(34648), + 42: uint16(34650), + 43: uint16(34651), + 44: uint16(34652), + 45: uint16(34653), + 46: uint16(34654), + 47: uint16(34655), + 48: uint16(34657), + 49: uint16(34658), + 50: uint16(34662), + 51: uint16(34663), + 52: uint16(34664), + 53: uint16(34665), + 54: uint16(34666), + 55: uint16(34667), + 56: uint16(34668), + 57: uint16(34669), + 58: uint16(34671), + 59: uint16(34673), + 60: uint16(34674), + 61: uint16(34675), + 62: uint16(34677), + 63: uint16(34679), + 64: uint16(34680), + 65: uint16(34681), + 66: uint16(34682), + 67: uint16(34687), + 68: uint16(34688), + 69: uint16(34689), + 70: uint16(34692), + 71: uint16(34694), + 72: uint16(34695), + 73: uint16(34697), + 74: uint16(34698), + 75: uint16(34700), + 76: uint16(34702), + 77: uint16(34703), + 78: uint16(34704), + 79: uint16(34705), + 80: uint16(34706), + 81: uint16(34708), + 82: uint16(34709), + 83: uint16(34710), + 84: uint16(34712), + 85: uint16(34713), + 86: uint16(34714), + 87: uint16(34715), + 88: uint16(34716), + 89: uint16(34717), + 90: uint16(34718), + 91: uint16(34720), + 92: uint16(34721), + 93: uint16(34722), + 94: uint16(34723), + 95: uint16(34724), + 96: uint16(24013), + 97: uint16(24494), + 98: uint16(21361), + 99: uint16(38886), + 100: uint16(36829), + 101: uint16(26693), + 102: uint16(22260), + 103: uint16(21807), + 104: uint16(24799), + 105: uint16(20026), + 106: uint16(28493), + 107: uint16(32500), + 108: uint16(33479), + 109: uint16(33806), + 110: uint16(22996), + 111: uint16(20255), + 112: uint16(20266), + 113: uint16(23614), + 114: uint16(32428), + 115: uint16(26410), + 116: uint16(34074), + 117: uint16(21619), + 118: uint16(30031), + 119: uint16(32963), + 120: uint16(21890), + 121: uint16(39759), + 122: uint16(20301), + 123: uint16(28205), + 124: uint16(35859), + 125: uint16(23561), + 126: uint16(24944), + 127: uint16(21355), + 128: uint16(30239), + 129: uint16(28201), + 130: uint16(34442), + 131: uint16(25991), + 132: uint16(38395), + 133: uint16(32441), + 134: uint16(21563), + 135: uint16(31283), + 136: uint16(32010), + 137: uint16(38382), + 138: uint16(21985), + 139: uint16(32705), + 140: uint16(29934), + 141: uint16(25373), + 142: uint16(34583), + 143: uint16(28065), + 144: uint16(31389), + 145: uint16(25105), + 146: uint16(26017), + 147: uint16(21351), + 148: uint16(25569), + 149: uint16(27779), + 150: uint16(24043), + 151: uint16(21596), + 152: uint16(38056), + 153: uint16(20044), + 154: uint16(27745), + 155: uint16(35820), + 156: uint16(23627), + 157: uint16(26080), + 158: uint16(33436), + 159: uint16(26791), + 160: uint16(21566), + 161: uint16(21556), + 162: uint16(27595), + 163: uint16(27494), + 164: uint16(20116), + 165: uint16(25410), + 166: uint16(21320), + 167: uint16(33310), + 168: uint16(20237), + 169: uint16(20398), + 170: uint16(22366), + 171: uint16(25098), + 172: uint16(38654), + 173: uint16(26212), + 174: uint16(29289), + 175: uint16(21247), + 176: uint16(21153), + 177: uint16(24735), + 178: uint16(35823), + 179: uint16(26132), + 180: uint16(29081), + 181: uint16(26512), + 182: uint16(35199), + 183: uint16(30802), + 184: uint16(30717), + 185: uint16(26224), + 186: uint16(22075), + 187: uint16(21560), + 188: uint16(38177), + 189: uint16(29306), + }, + 78: { + 0: uint16(34725), + 1: uint16(34726), + 2: uint16(34727), + 3: uint16(34729), + 4: uint16(34730), + 5: uint16(34734), + 6: uint16(34736), + 7: uint16(34737), + 8: uint16(34738), + 9: uint16(34740), + 10: uint16(34742), + 11: uint16(34743), + 12: uint16(34744), + 13: uint16(34745), + 14: uint16(34747), + 15: uint16(34748), + 16: uint16(34750), + 17: uint16(34751), + 18: uint16(34753), + 19: uint16(34754), + 20: uint16(34755), + 21: uint16(34756), + 22: uint16(34757), + 23: uint16(34759), + 24: uint16(34760), + 25: uint16(34761), + 26: uint16(34764), + 27: uint16(34765), + 28: uint16(34766), + 29: uint16(34767), + 30: uint16(34768), + 31: uint16(34772), + 32: uint16(34773), + 33: uint16(34774), + 34: uint16(34775), + 35: uint16(34776), + 36: uint16(34777), + 37: uint16(34778), + 38: uint16(34780), + 39: uint16(34781), + 40: uint16(34782), + 41: uint16(34783), + 42: uint16(34785), + 43: uint16(34786), + 44: uint16(34787), + 45: uint16(34788), + 46: uint16(34790), + 47: uint16(34791), + 48: uint16(34792), + 49: uint16(34793), + 50: uint16(34795), + 51: uint16(34796), + 52: uint16(34797), + 53: uint16(34799), + 54: uint16(34800), + 55: uint16(34801), + 56: uint16(34802), + 57: uint16(34803), + 58: uint16(34804), + 59: uint16(34805), + 60: uint16(34806), + 61: uint16(34807), + 62: uint16(34808), + 63: uint16(34810), + 64: uint16(34811), + 65: uint16(34812), + 66: uint16(34813), + 67: uint16(34815), + 68: uint16(34816), + 69: uint16(34817), + 70: uint16(34818), + 71: uint16(34820), + 72: uint16(34821), + 73: uint16(34822), + 74: uint16(34823), + 75: uint16(34824), + 76: uint16(34825), + 77: uint16(34827), + 78: uint16(34828), + 79: uint16(34829), + 80: uint16(34830), + 81: uint16(34831), + 82: uint16(34832), + 83: uint16(34833), + 84: uint16(34834), + 85: uint16(34836), + 86: uint16(34839), + 87: uint16(34840), + 88: uint16(34841), + 89: uint16(34842), + 90: uint16(34844), + 91: uint16(34845), + 92: uint16(34846), + 93: uint16(34847), + 94: uint16(34848), + 95: uint16(34851), + 96: uint16(31232), + 97: uint16(24687), + 98: uint16(24076), + 99: uint16(24713), + 100: uint16(33181), + 101: uint16(22805), + 102: uint16(24796), + 103: uint16(29060), + 104: uint16(28911), + 105: uint16(28330), + 106: uint16(27728), + 107: uint16(29312), + 108: uint16(27268), + 109: uint16(34989), + 110: uint16(24109), + 111: uint16(20064), + 112: uint16(23219), + 113: uint16(21916), + 114: uint16(38115), + 115: uint16(27927), + 116: uint16(31995), + 117: uint16(38553), + 118: uint16(25103), + 119: uint16(32454), + 120: uint16(30606), + 121: uint16(34430), + 122: uint16(21283), + 123: uint16(38686), + 124: uint16(36758), + 125: uint16(26247), + 126: uint16(23777), + 127: uint16(20384), + 128: uint16(29421), + 129: uint16(19979), + 130: uint16(21414), + 131: uint16(22799), + 132: uint16(21523), + 133: uint16(25472), + 134: uint16(38184), + 135: uint16(20808), + 136: uint16(20185), + 137: uint16(40092), + 138: uint16(32420), + 139: uint16(21688), + 140: uint16(36132), + 141: uint16(34900), + 142: uint16(33335), + 143: uint16(38386), + 144: uint16(28046), + 145: uint16(24358), + 146: uint16(23244), + 147: uint16(26174), + 148: uint16(38505), + 149: uint16(29616), + 150: uint16(29486), + 151: uint16(21439), + 152: uint16(33146), + 153: uint16(39301), + 154: uint16(32673), + 155: uint16(23466), + 156: uint16(38519), + 157: uint16(38480), + 158: uint16(32447), + 159: uint16(30456), + 160: uint16(21410), + 161: uint16(38262), + 162: uint16(39321), + 163: uint16(31665), + 164: uint16(35140), + 165: uint16(28248), + 166: uint16(20065), + 167: uint16(32724), + 168: uint16(31077), + 169: uint16(35814), + 170: uint16(24819), + 171: uint16(21709), + 172: uint16(20139), + 173: uint16(39033), + 174: uint16(24055), + 175: uint16(27233), + 176: uint16(20687), + 177: uint16(21521), + 178: uint16(35937), + 179: uint16(33831), + 180: uint16(30813), + 181: uint16(38660), + 182: uint16(21066), + 183: uint16(21742), + 184: uint16(22179), + 185: uint16(38144), + 186: uint16(28040), + 187: uint16(23477), + 188: uint16(28102), + 189: uint16(26195), + }, + 79: { + 0: uint16(34852), + 1: uint16(34853), + 2: uint16(34854), + 3: uint16(34855), + 4: uint16(34856), + 5: uint16(34857), + 6: uint16(34858), + 7: uint16(34859), + 8: uint16(34860), + 9: uint16(34861), + 10: uint16(34862), + 11: uint16(34863), + 12: uint16(34864), + 13: uint16(34865), + 14: uint16(34867), + 15: uint16(34868), + 16: uint16(34869), + 17: uint16(34870), + 18: uint16(34871), + 19: uint16(34872), + 20: uint16(34874), + 21: uint16(34875), + 22: uint16(34877), + 23: uint16(34878), + 24: uint16(34879), + 25: uint16(34881), + 26: uint16(34882), + 27: uint16(34883), + 28: uint16(34886), + 29: uint16(34887), + 30: uint16(34888), + 31: uint16(34889), + 32: uint16(34890), + 33: uint16(34891), + 34: uint16(34894), + 35: uint16(34895), + 36: uint16(34896), + 37: uint16(34897), + 38: uint16(34898), + 39: uint16(34899), + 40: uint16(34901), + 41: uint16(34902), + 42: uint16(34904), + 43: uint16(34906), + 44: uint16(34907), + 45: uint16(34908), + 46: uint16(34909), + 47: uint16(34910), + 48: uint16(34911), + 49: uint16(34912), + 50: uint16(34918), + 51: uint16(34919), + 52: uint16(34922), + 53: uint16(34925), + 54: uint16(34927), + 55: uint16(34929), + 56: uint16(34931), + 57: uint16(34932), + 58: uint16(34933), + 59: uint16(34934), + 60: uint16(34936), + 61: uint16(34937), + 62: uint16(34938), + 63: uint16(34939), + 64: uint16(34940), + 65: uint16(34944), + 66: uint16(34947), + 67: uint16(34950), + 68: uint16(34951), + 69: uint16(34953), + 70: uint16(34954), + 71: uint16(34956), + 72: uint16(34958), + 73: uint16(34959), + 74: uint16(34960), + 75: uint16(34961), + 76: uint16(34963), + 77: uint16(34964), + 78: uint16(34965), + 79: uint16(34967), + 80: uint16(34968), + 81: uint16(34969), + 82: uint16(34970), + 83: uint16(34971), + 84: uint16(34973), + 85: uint16(34974), + 86: uint16(34975), + 87: uint16(34976), + 88: uint16(34977), + 89: uint16(34979), + 90: uint16(34981), + 91: uint16(34982), + 92: uint16(34983), + 93: uint16(34984), + 94: uint16(34985), + 95: uint16(34986), + 96: uint16(23567), + 97: uint16(23389), + 98: uint16(26657), + 99: uint16(32918), + 100: uint16(21880), + 101: uint16(31505), + 102: uint16(25928), + 103: uint16(26964), + 104: uint16(20123), + 105: uint16(27463), + 106: uint16(34638), + 107: uint16(38795), + 108: uint16(21327), + 109: uint16(25375), + 110: uint16(25658), + 111: uint16(37034), + 112: uint16(26012), + 113: uint16(32961), + 114: uint16(35856), + 115: uint16(20889), + 116: uint16(26800), + 117: uint16(21368), + 118: uint16(34809), + 119: uint16(25032), + 120: uint16(27844), + 121: uint16(27899), + 122: uint16(35874), + 123: uint16(23633), + 124: uint16(34218), + 125: uint16(33455), + 126: uint16(38156), + 127: uint16(27427), + 128: uint16(36763), + 129: uint16(26032), + 130: uint16(24571), + 131: uint16(24515), + 132: uint16(20449), + 133: uint16(34885), + 134: uint16(26143), + 135: uint16(33125), + 136: uint16(29481), + 137: uint16(24826), + 138: uint16(20852), + 139: uint16(21009), + 140: uint16(22411), + 141: uint16(24418), + 142: uint16(37026), + 143: uint16(34892), + 144: uint16(37266), + 145: uint16(24184), + 146: uint16(26447), + 147: uint16(24615), + 148: uint16(22995), + 149: uint16(20804), + 150: uint16(20982), + 151: uint16(33016), + 152: uint16(21256), + 153: uint16(27769), + 154: uint16(38596), + 155: uint16(29066), + 156: uint16(20241), + 157: uint16(20462), + 158: uint16(32670), + 159: uint16(26429), + 160: uint16(21957), + 161: uint16(38152), + 162: uint16(31168), + 163: uint16(34966), + 164: uint16(32483), + 165: uint16(22687), + 166: uint16(25100), + 167: uint16(38656), + 168: uint16(34394), + 169: uint16(22040), + 170: uint16(39035), + 171: uint16(24464), + 172: uint16(35768), + 173: uint16(33988), + 174: uint16(37207), + 175: uint16(21465), + 176: uint16(26093), + 177: uint16(24207), + 178: uint16(30044), + 179: uint16(24676), + 180: uint16(32110), + 181: uint16(23167), + 182: uint16(32490), + 183: uint16(32493), + 184: uint16(36713), + 185: uint16(21927), + 186: uint16(23459), + 187: uint16(24748), + 188: uint16(26059), + 189: uint16(29572), + }, + 80: { + 0: uint16(34988), + 1: uint16(34990), + 2: uint16(34991), + 3: uint16(34992), + 4: uint16(34994), + 5: uint16(34995), + 6: uint16(34996), + 7: uint16(34997), + 8: uint16(34998), + 9: uint16(35000), + 10: uint16(35001), + 11: uint16(35002), + 12: uint16(35003), + 13: uint16(35005), + 14: uint16(35006), + 15: uint16(35007), + 16: uint16(35008), + 17: uint16(35011), + 18: uint16(35012), + 19: uint16(35015), + 20: uint16(35016), + 21: uint16(35018), + 22: uint16(35019), + 23: uint16(35020), + 24: uint16(35021), + 25: uint16(35023), + 26: uint16(35024), + 27: uint16(35025), + 28: uint16(35027), + 29: uint16(35030), + 30: uint16(35031), + 31: uint16(35034), + 32: uint16(35035), + 33: uint16(35036), + 34: uint16(35037), + 35: uint16(35038), + 36: uint16(35040), + 37: uint16(35041), + 38: uint16(35046), + 39: uint16(35047), + 40: uint16(35049), + 41: uint16(35050), + 42: uint16(35051), + 43: uint16(35052), + 44: uint16(35053), + 45: uint16(35054), + 46: uint16(35055), + 47: uint16(35058), + 48: uint16(35061), + 49: uint16(35062), + 50: uint16(35063), + 51: uint16(35066), + 52: uint16(35067), + 53: uint16(35069), + 54: uint16(35071), + 55: uint16(35072), + 56: uint16(35073), + 57: uint16(35075), + 58: uint16(35076), + 59: uint16(35077), + 60: uint16(35078), + 61: uint16(35079), + 62: uint16(35080), + 63: uint16(35081), + 64: uint16(35083), + 65: uint16(35084), + 66: uint16(35085), + 67: uint16(35086), + 68: uint16(35087), + 69: uint16(35089), + 70: uint16(35092), + 71: uint16(35093), + 72: uint16(35094), + 73: uint16(35095), + 74: uint16(35096), + 75: uint16(35100), + 76: uint16(35101), + 77: uint16(35102), + 78: uint16(35103), + 79: uint16(35104), + 80: uint16(35106), + 81: uint16(35107), + 82: uint16(35108), + 83: uint16(35110), + 84: uint16(35111), + 85: uint16(35112), + 86: uint16(35113), + 87: uint16(35116), + 88: uint16(35117), + 89: uint16(35118), + 90: uint16(35119), + 91: uint16(35121), + 92: uint16(35122), + 93: uint16(35123), + 94: uint16(35125), + 95: uint16(35127), + 96: uint16(36873), + 97: uint16(30307), + 98: uint16(30505), + 99: uint16(32474), + 100: uint16(38772), + 101: uint16(34203), + 102: uint16(23398), + 103: uint16(31348), + 104: uint16(38634), + 105: uint16(34880), + 106: uint16(21195), + 107: uint16(29071), + 108: uint16(24490), + 109: uint16(26092), + 110: uint16(35810), + 111: uint16(23547), + 112: uint16(39535), + 113: uint16(24033), + 114: uint16(27529), + 115: uint16(27739), + 116: uint16(35757), + 117: uint16(35759), + 118: uint16(36874), + 119: uint16(36805), + 120: uint16(21387), + 121: uint16(25276), + 122: uint16(40486), + 123: uint16(40493), + 124: uint16(21568), + 125: uint16(20011), + 126: uint16(33469), + 127: uint16(29273), + 128: uint16(34460), + 129: uint16(23830), + 130: uint16(34905), + 131: uint16(28079), + 132: uint16(38597), + 133: uint16(21713), + 134: uint16(20122), + 135: uint16(35766), + 136: uint16(28937), + 137: uint16(21693), + 138: uint16(38409), + 139: uint16(28895), + 140: uint16(28153), + 141: uint16(30416), + 142: uint16(20005), + 143: uint16(30740), + 144: uint16(34578), + 145: uint16(23721), + 146: uint16(24310), + 147: uint16(35328), + 148: uint16(39068), + 149: uint16(38414), + 150: uint16(28814), + 151: uint16(27839), + 152: uint16(22852), + 153: uint16(25513), + 154: uint16(30524), + 155: uint16(34893), + 156: uint16(28436), + 157: uint16(33395), + 158: uint16(22576), + 159: uint16(29141), + 160: uint16(21388), + 161: uint16(30746), + 162: uint16(38593), + 163: uint16(21761), + 164: uint16(24422), + 165: uint16(28976), + 166: uint16(23476), + 167: uint16(35866), + 168: uint16(39564), + 169: uint16(27523), + 170: uint16(22830), + 171: uint16(40495), + 172: uint16(31207), + 173: uint16(26472), + 174: uint16(25196), + 175: uint16(20335), + 176: uint16(30113), + 177: uint16(32650), + 178: uint16(27915), + 179: uint16(38451), + 180: uint16(27687), + 181: uint16(20208), + 182: uint16(30162), + 183: uint16(20859), + 184: uint16(26679), + 185: uint16(28478), + 186: uint16(36992), + 187: uint16(33136), + 188: uint16(22934), + 189: uint16(29814), + }, + 81: { + 0: uint16(35128), + 1: uint16(35129), + 2: uint16(35130), + 3: uint16(35131), + 4: uint16(35132), + 5: uint16(35133), + 6: uint16(35134), + 7: uint16(35135), + 8: uint16(35136), + 9: uint16(35138), + 10: uint16(35139), + 11: uint16(35141), + 12: uint16(35142), + 13: uint16(35143), + 14: uint16(35144), + 15: uint16(35145), + 16: uint16(35146), + 17: uint16(35147), + 18: uint16(35148), + 19: uint16(35149), + 20: uint16(35150), + 21: uint16(35151), + 22: uint16(35152), + 23: uint16(35153), + 24: uint16(35154), + 25: uint16(35155), + 26: uint16(35156), + 27: uint16(35157), + 28: uint16(35158), + 29: uint16(35159), + 30: uint16(35160), + 31: uint16(35161), + 32: uint16(35162), + 33: uint16(35163), + 34: uint16(35164), + 35: uint16(35165), + 36: uint16(35168), + 37: uint16(35169), + 38: uint16(35170), + 39: uint16(35171), + 40: uint16(35172), + 41: uint16(35173), + 42: uint16(35175), + 43: uint16(35176), + 44: uint16(35177), + 45: uint16(35178), + 46: uint16(35179), + 47: uint16(35180), + 48: uint16(35181), + 49: uint16(35182), + 50: uint16(35183), + 51: uint16(35184), + 52: uint16(35185), + 53: uint16(35186), + 54: uint16(35187), + 55: uint16(35188), + 56: uint16(35189), + 57: uint16(35190), + 58: uint16(35191), + 59: uint16(35192), + 60: uint16(35193), + 61: uint16(35194), + 62: uint16(35196), + 63: uint16(35197), + 64: uint16(35198), + 65: uint16(35200), + 66: uint16(35202), + 67: uint16(35204), + 68: uint16(35205), + 69: uint16(35207), + 70: uint16(35208), + 71: uint16(35209), + 72: uint16(35210), + 73: uint16(35211), + 74: uint16(35212), + 75: uint16(35213), + 76: uint16(35214), + 77: uint16(35215), + 78: uint16(35216), + 79: uint16(35217), + 80: uint16(35218), + 81: uint16(35219), + 82: uint16(35220), + 83: uint16(35221), + 84: uint16(35222), + 85: uint16(35223), + 86: uint16(35224), + 87: uint16(35225), + 88: uint16(35226), + 89: uint16(35227), + 90: uint16(35228), + 91: uint16(35229), + 92: uint16(35230), + 93: uint16(35231), + 94: uint16(35232), + 95: uint16(35233), + 96: uint16(25671), + 97: uint16(23591), + 98: uint16(36965), + 99: uint16(31377), + 100: uint16(35875), + 101: uint16(23002), + 102: uint16(21676), + 103: uint16(33280), + 104: uint16(33647), + 105: uint16(35201), + 106: uint16(32768), + 107: uint16(26928), + 108: uint16(22094), + 109: uint16(32822), + 110: uint16(29239), + 111: uint16(37326), + 112: uint16(20918), + 113: uint16(20063), + 114: uint16(39029), + 115: uint16(25494), + 116: uint16(19994), + 117: uint16(21494), + 118: uint16(26355), + 119: uint16(33099), + 120: uint16(22812), + 121: uint16(28082), + 122: uint16(19968), + 123: uint16(22777), + 124: uint16(21307), + 125: uint16(25558), + 126: uint16(38129), + 127: uint16(20381), + 128: uint16(20234), + 129: uint16(34915), + 130: uint16(39056), + 131: uint16(22839), + 132: uint16(36951), + 133: uint16(31227), + 134: uint16(20202), + 135: uint16(33008), + 136: uint16(30097), + 137: uint16(27778), + 138: uint16(23452), + 139: uint16(23016), + 140: uint16(24413), + 141: uint16(26885), + 142: uint16(34433), + 143: uint16(20506), + 144: uint16(24050), + 145: uint16(20057), + 146: uint16(30691), + 147: uint16(20197), + 148: uint16(33402), + 149: uint16(25233), + 150: uint16(26131), + 151: uint16(37009), + 152: uint16(23673), + 153: uint16(20159), + 154: uint16(24441), + 155: uint16(33222), + 156: uint16(36920), + 157: uint16(32900), + 158: uint16(30123), + 159: uint16(20134), + 160: uint16(35028), + 161: uint16(24847), + 162: uint16(27589), + 163: uint16(24518), + 164: uint16(20041), + 165: uint16(30410), + 166: uint16(28322), + 167: uint16(35811), + 168: uint16(35758), + 169: uint16(35850), + 170: uint16(35793), + 171: uint16(24322), + 172: uint16(32764), + 173: uint16(32716), + 174: uint16(32462), + 175: uint16(33589), + 176: uint16(33643), + 177: uint16(22240), + 178: uint16(27575), + 179: uint16(38899), + 180: uint16(38452), + 181: uint16(23035), + 182: uint16(21535), + 183: uint16(38134), + 184: uint16(28139), + 185: uint16(23493), + 186: uint16(39278), + 187: uint16(23609), + 188: uint16(24341), + 189: uint16(38544), + }, + 82: { + 0: uint16(35234), + 1: uint16(35235), + 2: uint16(35236), + 3: uint16(35237), + 4: uint16(35238), + 5: uint16(35239), + 6: uint16(35240), + 7: uint16(35241), + 8: uint16(35242), + 9: uint16(35243), + 10: uint16(35244), + 11: uint16(35245), + 12: uint16(35246), + 13: uint16(35247), + 14: uint16(35248), + 15: uint16(35249), + 16: uint16(35250), + 17: uint16(35251), + 18: uint16(35252), + 19: uint16(35253), + 20: uint16(35254), + 21: uint16(35255), + 22: uint16(35256), + 23: uint16(35257), + 24: uint16(35258), + 25: uint16(35259), + 26: uint16(35260), + 27: uint16(35261), + 28: uint16(35262), + 29: uint16(35263), + 30: uint16(35264), + 31: uint16(35267), + 32: uint16(35277), + 33: uint16(35283), + 34: uint16(35284), + 35: uint16(35285), + 36: uint16(35287), + 37: uint16(35288), + 38: uint16(35289), + 39: uint16(35291), + 40: uint16(35293), + 41: uint16(35295), + 42: uint16(35296), + 43: uint16(35297), + 44: uint16(35298), + 45: uint16(35300), + 46: uint16(35303), + 47: uint16(35304), + 48: uint16(35305), + 49: uint16(35306), + 50: uint16(35308), + 51: uint16(35309), + 52: uint16(35310), + 53: uint16(35312), + 54: uint16(35313), + 55: uint16(35314), + 56: uint16(35316), + 57: uint16(35317), + 58: uint16(35318), + 59: uint16(35319), + 60: uint16(35320), + 61: uint16(35321), + 62: uint16(35322), + 63: uint16(35323), + 64: uint16(35324), + 65: uint16(35325), + 66: uint16(35326), + 67: uint16(35327), + 68: uint16(35329), + 69: uint16(35330), + 70: uint16(35331), + 71: uint16(35332), + 72: uint16(35333), + 73: uint16(35334), + 74: uint16(35336), + 75: uint16(35337), + 76: uint16(35338), + 77: uint16(35339), + 78: uint16(35340), + 79: uint16(35341), + 80: uint16(35342), + 81: uint16(35343), + 82: uint16(35344), + 83: uint16(35345), + 84: uint16(35346), + 85: uint16(35347), + 86: uint16(35348), + 87: uint16(35349), + 88: uint16(35350), + 89: uint16(35351), + 90: uint16(35352), + 91: uint16(35353), + 92: uint16(35354), + 93: uint16(35355), + 94: uint16(35356), + 95: uint16(35357), + 96: uint16(21360), + 97: uint16(33521), + 98: uint16(27185), + 99: uint16(23156), + 100: uint16(40560), + 101: uint16(24212), + 102: uint16(32552), + 103: uint16(33721), + 104: uint16(33828), + 105: uint16(33829), + 106: uint16(33639), + 107: uint16(34631), + 108: uint16(36814), + 109: uint16(36194), + 110: uint16(30408), + 111: uint16(24433), + 112: uint16(39062), + 113: uint16(30828), + 114: uint16(26144), + 115: uint16(21727), + 116: uint16(25317), + 117: uint16(20323), + 118: uint16(33219), + 119: uint16(30152), + 120: uint16(24248), + 121: uint16(38605), + 122: uint16(36362), + 123: uint16(34553), + 124: uint16(21647), + 125: uint16(27891), + 126: uint16(28044), + 127: uint16(27704), + 128: uint16(24703), + 129: uint16(21191), + 130: uint16(29992), + 131: uint16(24189), + 132: uint16(20248), + 133: uint16(24736), + 134: uint16(24551), + 135: uint16(23588), + 136: uint16(30001), + 137: uint16(37038), + 138: uint16(38080), + 139: uint16(29369), + 140: uint16(27833), + 141: uint16(28216), + 142: uint16(37193), + 143: uint16(26377), + 144: uint16(21451), + 145: uint16(21491), + 146: uint16(20305), + 147: uint16(37321), + 148: uint16(35825), + 149: uint16(21448), + 150: uint16(24188), + 151: uint16(36802), + 152: uint16(28132), + 153: uint16(20110), + 154: uint16(30402), + 155: uint16(27014), + 156: uint16(34398), + 157: uint16(24858), + 158: uint16(33286), + 159: uint16(20313), + 160: uint16(20446), + 161: uint16(36926), + 162: uint16(40060), + 163: uint16(24841), + 164: uint16(28189), + 165: uint16(28180), + 166: uint16(38533), + 167: uint16(20104), + 168: uint16(23089), + 169: uint16(38632), + 170: uint16(19982), + 171: uint16(23679), + 172: uint16(31161), + 173: uint16(23431), + 174: uint16(35821), + 175: uint16(32701), + 176: uint16(29577), + 177: uint16(22495), + 178: uint16(33419), + 179: uint16(37057), + 180: uint16(21505), + 181: uint16(36935), + 182: uint16(21947), + 183: uint16(23786), + 184: uint16(24481), + 185: uint16(24840), + 186: uint16(27442), + 187: uint16(29425), + 188: uint16(32946), + 189: uint16(35465), + }, + 83: { + 0: uint16(35358), + 1: uint16(35359), + 2: uint16(35360), + 3: uint16(35361), + 4: uint16(35362), + 5: uint16(35363), + 6: uint16(35364), + 7: uint16(35365), + 8: uint16(35366), + 9: uint16(35367), + 10: uint16(35368), + 11: uint16(35369), + 12: uint16(35370), + 13: uint16(35371), + 14: uint16(35372), + 15: uint16(35373), + 16: uint16(35374), + 17: uint16(35375), + 18: uint16(35376), + 19: uint16(35377), + 20: uint16(35378), + 21: uint16(35379), + 22: uint16(35380), + 23: uint16(35381), + 24: uint16(35382), + 25: uint16(35383), + 26: uint16(35384), + 27: uint16(35385), + 28: uint16(35386), + 29: uint16(35387), + 30: uint16(35388), + 31: uint16(35389), + 32: uint16(35391), + 33: uint16(35392), + 34: uint16(35393), + 35: uint16(35394), + 36: uint16(35395), + 37: uint16(35396), + 38: uint16(35397), + 39: uint16(35398), + 40: uint16(35399), + 41: uint16(35401), + 42: uint16(35402), + 43: uint16(35403), + 44: uint16(35404), + 45: uint16(35405), + 46: uint16(35406), + 47: uint16(35407), + 48: uint16(35408), + 49: uint16(35409), + 50: uint16(35410), + 51: uint16(35411), + 52: uint16(35412), + 53: uint16(35413), + 54: uint16(35414), + 55: uint16(35415), + 56: uint16(35416), + 57: uint16(35417), + 58: uint16(35418), + 59: uint16(35419), + 60: uint16(35420), + 61: uint16(35421), + 62: uint16(35422), + 63: uint16(35423), + 64: uint16(35424), + 65: uint16(35425), + 66: uint16(35426), + 67: uint16(35427), + 68: uint16(35428), + 69: uint16(35429), + 70: uint16(35430), + 71: uint16(35431), + 72: uint16(35432), + 73: uint16(35433), + 74: uint16(35434), + 75: uint16(35435), + 76: uint16(35436), + 77: uint16(35437), + 78: uint16(35438), + 79: uint16(35439), + 80: uint16(35440), + 81: uint16(35441), + 82: uint16(35442), + 83: uint16(35443), + 84: uint16(35444), + 85: uint16(35445), + 86: uint16(35446), + 87: uint16(35447), + 88: uint16(35448), + 89: uint16(35450), + 90: uint16(35451), + 91: uint16(35452), + 92: uint16(35453), + 93: uint16(35454), + 94: uint16(35455), + 95: uint16(35456), + 96: uint16(28020), + 97: uint16(23507), + 98: uint16(35029), + 99: uint16(39044), + 100: uint16(35947), + 101: uint16(39533), + 102: uint16(40499), + 103: uint16(28170), + 104: uint16(20900), + 105: uint16(20803), + 106: uint16(22435), + 107: uint16(34945), + 108: uint16(21407), + 109: uint16(25588), + 110: uint16(36757), + 111: uint16(22253), + 112: uint16(21592), + 113: uint16(22278), + 114: uint16(29503), + 115: uint16(28304), + 116: uint16(32536), + 117: uint16(36828), + 118: uint16(33489), + 119: uint16(24895), + 120: uint16(24616), + 121: uint16(38498), + 122: uint16(26352), + 123: uint16(32422), + 124: uint16(36234), + 125: uint16(36291), + 126: uint16(38053), + 127: uint16(23731), + 128: uint16(31908), + 129: uint16(26376), + 130: uint16(24742), + 131: uint16(38405), + 132: uint16(32792), + 133: uint16(20113), + 134: uint16(37095), + 135: uint16(21248), + 136: uint16(38504), + 137: uint16(20801), + 138: uint16(36816), + 139: uint16(34164), + 140: uint16(37213), + 141: uint16(26197), + 142: uint16(38901), + 143: uint16(23381), + 144: uint16(21277), + 145: uint16(30776), + 146: uint16(26434), + 147: uint16(26685), + 148: uint16(21705), + 149: uint16(28798), + 150: uint16(23472), + 151: uint16(36733), + 152: uint16(20877), + 153: uint16(22312), + 154: uint16(21681), + 155: uint16(25874), + 156: uint16(26242), + 157: uint16(36190), + 158: uint16(36163), + 159: uint16(33039), + 160: uint16(33900), + 161: uint16(36973), + 162: uint16(31967), + 163: uint16(20991), + 164: uint16(34299), + 165: uint16(26531), + 166: uint16(26089), + 167: uint16(28577), + 168: uint16(34468), + 169: uint16(36481), + 170: uint16(22122), + 171: uint16(36896), + 172: uint16(30338), + 173: uint16(28790), + 174: uint16(29157), + 175: uint16(36131), + 176: uint16(25321), + 177: uint16(21017), + 178: uint16(27901), + 179: uint16(36156), + 180: uint16(24590), + 181: uint16(22686), + 182: uint16(24974), + 183: uint16(26366), + 184: uint16(36192), + 185: uint16(25166), + 186: uint16(21939), + 187: uint16(28195), + 188: uint16(26413), + 189: uint16(36711), + }, + 84: { + 0: uint16(35457), + 1: uint16(35458), + 2: uint16(35459), + 3: uint16(35460), + 4: uint16(35461), + 5: uint16(35462), + 6: uint16(35463), + 7: uint16(35464), + 8: uint16(35467), + 9: uint16(35468), + 10: uint16(35469), + 11: uint16(35470), + 12: uint16(35471), + 13: uint16(35472), + 14: uint16(35473), + 15: uint16(35474), + 16: uint16(35476), + 17: uint16(35477), + 18: uint16(35478), + 19: uint16(35479), + 20: uint16(35480), + 21: uint16(35481), + 22: uint16(35482), + 23: uint16(35483), + 24: uint16(35484), + 25: uint16(35485), + 26: uint16(35486), + 27: uint16(35487), + 28: uint16(35488), + 29: uint16(35489), + 30: uint16(35490), + 31: uint16(35491), + 32: uint16(35492), + 33: uint16(35493), + 34: uint16(35494), + 35: uint16(35495), + 36: uint16(35496), + 37: uint16(35497), + 38: uint16(35498), + 39: uint16(35499), + 40: uint16(35500), + 41: uint16(35501), + 42: uint16(35502), + 43: uint16(35503), + 44: uint16(35504), + 45: uint16(35505), + 46: uint16(35506), + 47: uint16(35507), + 48: uint16(35508), + 49: uint16(35509), + 50: uint16(35510), + 51: uint16(35511), + 52: uint16(35512), + 53: uint16(35513), + 54: uint16(35514), + 55: uint16(35515), + 56: uint16(35516), + 57: uint16(35517), + 58: uint16(35518), + 59: uint16(35519), + 60: uint16(35520), + 61: uint16(35521), + 62: uint16(35522), + 63: uint16(35523), + 64: uint16(35524), + 65: uint16(35525), + 66: uint16(35526), + 67: uint16(35527), + 68: uint16(35528), + 69: uint16(35529), + 70: uint16(35530), + 71: uint16(35531), + 72: uint16(35532), + 73: uint16(35533), + 74: uint16(35534), + 75: uint16(35535), + 76: uint16(35536), + 77: uint16(35537), + 78: uint16(35538), + 79: uint16(35539), + 80: uint16(35540), + 81: uint16(35541), + 82: uint16(35542), + 83: uint16(35543), + 84: uint16(35544), + 85: uint16(35545), + 86: uint16(35546), + 87: uint16(35547), + 88: uint16(35548), + 89: uint16(35549), + 90: uint16(35550), + 91: uint16(35551), + 92: uint16(35552), + 93: uint16(35553), + 94: uint16(35554), + 95: uint16(35555), + 96: uint16(38113), + 97: uint16(38392), + 98: uint16(30504), + 99: uint16(26629), + 100: uint16(27048), + 101: uint16(21643), + 102: uint16(20045), + 103: uint16(28856), + 104: uint16(35784), + 105: uint16(25688), + 106: uint16(25995), + 107: uint16(23429), + 108: uint16(31364), + 109: uint16(20538), + 110: uint16(23528), + 111: uint16(30651), + 112: uint16(27617), + 113: uint16(35449), + 114: uint16(31896), + 115: uint16(27838), + 116: uint16(30415), + 117: uint16(26025), + 118: uint16(36759), + 119: uint16(23853), + 120: uint16(23637), + 121: uint16(34360), + 122: uint16(26632), + 123: uint16(21344), + 124: uint16(25112), + 125: uint16(31449), + 126: uint16(28251), + 127: uint16(32509), + 128: uint16(27167), + 129: uint16(31456), + 130: uint16(24432), + 131: uint16(28467), + 132: uint16(24352), + 133: uint16(25484), + 134: uint16(28072), + 135: uint16(26454), + 136: uint16(19976), + 137: uint16(24080), + 138: uint16(36134), + 139: uint16(20183), + 140: uint16(32960), + 141: uint16(30260), + 142: uint16(38556), + 143: uint16(25307), + 144: uint16(26157), + 145: uint16(25214), + 146: uint16(27836), + 147: uint16(36213), + 148: uint16(29031), + 149: uint16(32617), + 150: uint16(20806), + 151: uint16(32903), + 152: uint16(21484), + 153: uint16(36974), + 154: uint16(25240), + 155: uint16(21746), + 156: uint16(34544), + 157: uint16(36761), + 158: uint16(32773), + 159: uint16(38167), + 160: uint16(34071), + 161: uint16(36825), + 162: uint16(27993), + 163: uint16(29645), + 164: uint16(26015), + 165: uint16(30495), + 166: uint16(29956), + 167: uint16(30759), + 168: uint16(33275), + 169: uint16(36126), + 170: uint16(38024), + 171: uint16(20390), + 172: uint16(26517), + 173: uint16(30137), + 174: uint16(35786), + 175: uint16(38663), + 176: uint16(25391), + 177: uint16(38215), + 178: uint16(38453), + 179: uint16(33976), + 180: uint16(25379), + 181: uint16(30529), + 182: uint16(24449), + 183: uint16(29424), + 184: uint16(20105), + 185: uint16(24596), + 186: uint16(25972), + 187: uint16(25327), + 188: uint16(27491), + 189: uint16(25919), + }, + 85: { + 0: uint16(35556), + 1: uint16(35557), + 2: uint16(35558), + 3: uint16(35559), + 4: uint16(35560), + 5: uint16(35561), + 6: uint16(35562), + 7: uint16(35563), + 8: uint16(35564), + 9: uint16(35565), + 10: uint16(35566), + 11: uint16(35567), + 12: uint16(35568), + 13: uint16(35569), + 14: uint16(35570), + 15: uint16(35571), + 16: uint16(35572), + 17: uint16(35573), + 18: uint16(35574), + 19: uint16(35575), + 20: uint16(35576), + 21: uint16(35577), + 22: uint16(35578), + 23: uint16(35579), + 24: uint16(35580), + 25: uint16(35581), + 26: uint16(35582), + 27: uint16(35583), + 28: uint16(35584), + 29: uint16(35585), + 30: uint16(35586), + 31: uint16(35587), + 32: uint16(35588), + 33: uint16(35589), + 34: uint16(35590), + 35: uint16(35592), + 36: uint16(35593), + 37: uint16(35594), + 38: uint16(35595), + 39: uint16(35596), + 40: uint16(35597), + 41: uint16(35598), + 42: uint16(35599), + 43: uint16(35600), + 44: uint16(35601), + 45: uint16(35602), + 46: uint16(35603), + 47: uint16(35604), + 48: uint16(35605), + 49: uint16(35606), + 50: uint16(35607), + 51: uint16(35608), + 52: uint16(35609), + 53: uint16(35610), + 54: uint16(35611), + 55: uint16(35612), + 56: uint16(35613), + 57: uint16(35614), + 58: uint16(35615), + 59: uint16(35616), + 60: uint16(35617), + 61: uint16(35618), + 62: uint16(35619), + 63: uint16(35620), + 64: uint16(35621), + 65: uint16(35623), + 66: uint16(35624), + 67: uint16(35625), + 68: uint16(35626), + 69: uint16(35627), + 70: uint16(35628), + 71: uint16(35629), + 72: uint16(35630), + 73: uint16(35631), + 74: uint16(35632), + 75: uint16(35633), + 76: uint16(35634), + 77: uint16(35635), + 78: uint16(35636), + 79: uint16(35637), + 80: uint16(35638), + 81: uint16(35639), + 82: uint16(35640), + 83: uint16(35641), + 84: uint16(35642), + 85: uint16(35643), + 86: uint16(35644), + 87: uint16(35645), + 88: uint16(35646), + 89: uint16(35647), + 90: uint16(35648), + 91: uint16(35649), + 92: uint16(35650), + 93: uint16(35651), + 94: uint16(35652), + 95: uint16(35653), + 96: uint16(24103), + 97: uint16(30151), + 98: uint16(37073), + 99: uint16(35777), + 100: uint16(33437), + 101: uint16(26525), + 102: uint16(25903), + 103: uint16(21553), + 104: uint16(34584), + 105: uint16(30693), + 106: uint16(32930), + 107: uint16(33026), + 108: uint16(27713), + 109: uint16(20043), + 110: uint16(32455), + 111: uint16(32844), + 112: uint16(30452), + 113: uint16(26893), + 114: uint16(27542), + 115: uint16(25191), + 116: uint16(20540), + 117: uint16(20356), + 118: uint16(22336), + 119: uint16(25351), + 120: uint16(27490), + 121: uint16(36286), + 122: uint16(21482), + 123: uint16(26088), + 124: uint16(32440), + 125: uint16(24535), + 126: uint16(25370), + 127: uint16(25527), + 128: uint16(33267), + 129: uint16(33268), + 130: uint16(32622), + 131: uint16(24092), + 132: uint16(23769), + 133: uint16(21046), + 134: uint16(26234), + 135: uint16(31209), + 136: uint16(31258), + 137: uint16(36136), + 138: uint16(28825), + 139: uint16(30164), + 140: uint16(28382), + 141: uint16(27835), + 142: uint16(31378), + 143: uint16(20013), + 144: uint16(30405), + 145: uint16(24544), + 146: uint16(38047), + 147: uint16(34935), + 148: uint16(32456), + 149: uint16(31181), + 150: uint16(32959), + 151: uint16(37325), + 152: uint16(20210), + 153: uint16(20247), + 154: uint16(33311), + 155: uint16(21608), + 156: uint16(24030), + 157: uint16(27954), + 158: uint16(35788), + 159: uint16(31909), + 160: uint16(36724), + 161: uint16(32920), + 162: uint16(24090), + 163: uint16(21650), + 164: uint16(30385), + 165: uint16(23449), + 166: uint16(26172), + 167: uint16(39588), + 168: uint16(29664), + 169: uint16(26666), + 170: uint16(34523), + 171: uint16(26417), + 172: uint16(29482), + 173: uint16(35832), + 174: uint16(35803), + 175: uint16(36880), + 176: uint16(31481), + 177: uint16(28891), + 178: uint16(29038), + 179: uint16(25284), + 180: uint16(30633), + 181: uint16(22065), + 182: uint16(20027), + 183: uint16(33879), + 184: uint16(26609), + 185: uint16(21161), + 186: uint16(34496), + 187: uint16(36142), + 188: uint16(38136), + 189: uint16(31569), + }, + 86: { + 0: uint16(35654), + 1: uint16(35655), + 2: uint16(35656), + 3: uint16(35657), + 4: uint16(35658), + 5: uint16(35659), + 6: uint16(35660), + 7: uint16(35661), + 8: uint16(35662), + 9: uint16(35663), + 10: uint16(35664), + 11: uint16(35665), + 12: uint16(35666), + 13: uint16(35667), + 14: uint16(35668), + 15: uint16(35669), + 16: uint16(35670), + 17: uint16(35671), + 18: uint16(35672), + 19: uint16(35673), + 20: uint16(35674), + 21: uint16(35675), + 22: uint16(35676), + 23: uint16(35677), + 24: uint16(35678), + 25: uint16(35679), + 26: uint16(35680), + 27: uint16(35681), + 28: uint16(35682), + 29: uint16(35683), + 30: uint16(35684), + 31: uint16(35685), + 32: uint16(35687), + 33: uint16(35688), + 34: uint16(35689), + 35: uint16(35690), + 36: uint16(35691), + 37: uint16(35693), + 38: uint16(35694), + 39: uint16(35695), + 40: uint16(35696), + 41: uint16(35697), + 42: uint16(35698), + 43: uint16(35699), + 44: uint16(35700), + 45: uint16(35701), + 46: uint16(35702), + 47: uint16(35703), + 48: uint16(35704), + 49: uint16(35705), + 50: uint16(35706), + 51: uint16(35707), + 52: uint16(35708), + 53: uint16(35709), + 54: uint16(35710), + 55: uint16(35711), + 56: uint16(35712), + 57: uint16(35713), + 58: uint16(35714), + 59: uint16(35715), + 60: uint16(35716), + 61: uint16(35717), + 62: uint16(35718), + 63: uint16(35719), + 64: uint16(35720), + 65: uint16(35721), + 66: uint16(35722), + 67: uint16(35723), + 68: uint16(35724), + 69: uint16(35725), + 70: uint16(35726), + 71: uint16(35727), + 72: uint16(35728), + 73: uint16(35729), + 74: uint16(35730), + 75: uint16(35731), + 76: uint16(35732), + 77: uint16(35733), + 78: uint16(35734), + 79: uint16(35735), + 80: uint16(35736), + 81: uint16(35737), + 82: uint16(35738), + 83: uint16(35739), + 84: uint16(35740), + 85: uint16(35741), + 86: uint16(35742), + 87: uint16(35743), + 88: uint16(35756), + 89: uint16(35761), + 90: uint16(35771), + 91: uint16(35783), + 92: uint16(35792), + 93: uint16(35818), + 94: uint16(35849), + 95: uint16(35870), + 96: uint16(20303), + 97: uint16(27880), + 98: uint16(31069), + 99: uint16(39547), + 100: uint16(25235), + 101: uint16(29226), + 102: uint16(25341), + 103: uint16(19987), + 104: uint16(30742), + 105: uint16(36716), + 106: uint16(25776), + 107: uint16(36186), + 108: uint16(31686), + 109: uint16(26729), + 110: uint16(24196), + 111: uint16(35013), + 112: uint16(22918), + 113: uint16(25758), + 114: uint16(22766), + 115: uint16(29366), + 116: uint16(26894), + 117: uint16(38181), + 118: uint16(36861), + 119: uint16(36184), + 120: uint16(22368), + 121: uint16(32512), + 122: uint16(35846), + 123: uint16(20934), + 124: uint16(25417), + 125: uint16(25305), + 126: uint16(21331), + 127: uint16(26700), + 128: uint16(29730), + 129: uint16(33537), + 130: uint16(37196), + 131: uint16(21828), + 132: uint16(30528), + 133: uint16(28796), + 134: uint16(27978), + 135: uint16(20857), + 136: uint16(21672), + 137: uint16(36164), + 138: uint16(23039), + 139: uint16(28363), + 140: uint16(28100), + 141: uint16(23388), + 142: uint16(32043), + 143: uint16(20180), + 144: uint16(31869), + 145: uint16(28371), + 146: uint16(23376), + 147: uint16(33258), + 148: uint16(28173), + 149: uint16(23383), + 150: uint16(39683), + 151: uint16(26837), + 152: uint16(36394), + 153: uint16(23447), + 154: uint16(32508), + 155: uint16(24635), + 156: uint16(32437), + 157: uint16(37049), + 158: uint16(36208), + 159: uint16(22863), + 160: uint16(25549), + 161: uint16(31199), + 162: uint16(36275), + 163: uint16(21330), + 164: uint16(26063), + 165: uint16(31062), + 166: uint16(35781), + 167: uint16(38459), + 168: uint16(32452), + 169: uint16(38075), + 170: uint16(32386), + 171: uint16(22068), + 172: uint16(37257), + 173: uint16(26368), + 174: uint16(32618), + 175: uint16(23562), + 176: uint16(36981), + 177: uint16(26152), + 178: uint16(24038), + 179: uint16(20304), + 180: uint16(26590), + 181: uint16(20570), + 182: uint16(20316), + 183: uint16(22352), + 184: uint16(24231), + 185: uint16(59408), + 186: uint16(59409), + 187: uint16(59410), + 188: uint16(59411), + 189: uint16(59412), + }, + 87: { + 0: uint16(35896), + 1: uint16(35897), + 2: uint16(35898), + 3: uint16(35899), + 4: uint16(35900), + 5: uint16(35901), + 6: uint16(35902), + 7: uint16(35903), + 8: uint16(35904), + 9: uint16(35906), + 10: uint16(35907), + 11: uint16(35908), + 12: uint16(35909), + 13: uint16(35912), + 14: uint16(35914), + 15: uint16(35915), + 16: uint16(35917), + 17: uint16(35918), + 18: uint16(35919), + 19: uint16(35920), + 20: uint16(35921), + 21: uint16(35922), + 22: uint16(35923), + 23: uint16(35924), + 24: uint16(35926), + 25: uint16(35927), + 26: uint16(35928), + 27: uint16(35929), + 28: uint16(35931), + 29: uint16(35932), + 30: uint16(35933), + 31: uint16(35934), + 32: uint16(35935), + 33: uint16(35936), + 34: uint16(35939), + 35: uint16(35940), + 36: uint16(35941), + 37: uint16(35942), + 38: uint16(35943), + 39: uint16(35944), + 40: uint16(35945), + 41: uint16(35948), + 42: uint16(35949), + 43: uint16(35950), + 44: uint16(35951), + 45: uint16(35952), + 46: uint16(35953), + 47: uint16(35954), + 48: uint16(35956), + 49: uint16(35957), + 50: uint16(35958), + 51: uint16(35959), + 52: uint16(35963), + 53: uint16(35964), + 54: uint16(35965), + 55: uint16(35966), + 56: uint16(35967), + 57: uint16(35968), + 58: uint16(35969), + 59: uint16(35971), + 60: uint16(35972), + 61: uint16(35974), + 62: uint16(35975), + 63: uint16(35976), + 64: uint16(35979), + 65: uint16(35981), + 66: uint16(35982), + 67: uint16(35983), + 68: uint16(35984), + 69: uint16(35985), + 70: uint16(35986), + 71: uint16(35987), + 72: uint16(35989), + 73: uint16(35990), + 74: uint16(35991), + 75: uint16(35993), + 76: uint16(35994), + 77: uint16(35995), + 78: uint16(35996), + 79: uint16(35997), + 80: uint16(35998), + 81: uint16(35999), + 82: uint16(36000), + 83: uint16(36001), + 84: uint16(36002), + 85: uint16(36003), + 86: uint16(36004), + 87: uint16(36005), + 88: uint16(36006), + 89: uint16(36007), + 90: uint16(36008), + 91: uint16(36009), + 92: uint16(36010), + 93: uint16(36011), + 94: uint16(36012), + 95: uint16(36013), + 96: uint16(20109), + 97: uint16(19980), + 98: uint16(20800), + 99: uint16(19984), + 100: uint16(24319), + 101: uint16(21317), + 102: uint16(19989), + 103: uint16(20120), + 104: uint16(19998), + 105: uint16(39730), + 106: uint16(23404), + 107: uint16(22121), + 108: uint16(20008), + 109: uint16(31162), + 110: uint16(20031), + 111: uint16(21269), + 112: uint16(20039), + 113: uint16(22829), + 114: uint16(29243), + 115: uint16(21358), + 116: uint16(27664), + 117: uint16(22239), + 118: uint16(32996), + 119: uint16(39319), + 120: uint16(27603), + 121: uint16(30590), + 122: uint16(40727), + 123: uint16(20022), + 124: uint16(20127), + 125: uint16(40720), + 126: uint16(20060), + 127: uint16(20073), + 128: uint16(20115), + 129: uint16(33416), + 130: uint16(23387), + 131: uint16(21868), + 132: uint16(22031), + 133: uint16(20164), + 134: uint16(21389), + 135: uint16(21405), + 136: uint16(21411), + 137: uint16(21413), + 138: uint16(21422), + 139: uint16(38757), + 140: uint16(36189), + 141: uint16(21274), + 142: uint16(21493), + 143: uint16(21286), + 144: uint16(21294), + 145: uint16(21310), + 146: uint16(36188), + 147: uint16(21350), + 148: uint16(21347), + 149: uint16(20994), + 150: uint16(21000), + 151: uint16(21006), + 152: uint16(21037), + 153: uint16(21043), + 154: uint16(21055), + 155: uint16(21056), + 156: uint16(21068), + 157: uint16(21086), + 158: uint16(21089), + 159: uint16(21084), + 160: uint16(33967), + 161: uint16(21117), + 162: uint16(21122), + 163: uint16(21121), + 164: uint16(21136), + 165: uint16(21139), + 166: uint16(20866), + 167: uint16(32596), + 168: uint16(20155), + 169: uint16(20163), + 170: uint16(20169), + 171: uint16(20162), + 172: uint16(20200), + 173: uint16(20193), + 174: uint16(20203), + 175: uint16(20190), + 176: uint16(20251), + 177: uint16(20211), + 178: uint16(20258), + 179: uint16(20324), + 180: uint16(20213), + 181: uint16(20261), + 182: uint16(20263), + 183: uint16(20233), + 184: uint16(20267), + 185: uint16(20318), + 186: uint16(20327), + 187: uint16(25912), + 188: uint16(20314), + 189: uint16(20317), + }, + 88: { + 0: uint16(36014), + 1: uint16(36015), + 2: uint16(36016), + 3: uint16(36017), + 4: uint16(36018), + 5: uint16(36019), + 6: uint16(36020), + 7: uint16(36021), + 8: uint16(36022), + 9: uint16(36023), + 10: uint16(36024), + 11: uint16(36025), + 12: uint16(36026), + 13: uint16(36027), + 14: uint16(36028), + 15: uint16(36029), + 16: uint16(36030), + 17: uint16(36031), + 18: uint16(36032), + 19: uint16(36033), + 20: uint16(36034), + 21: uint16(36035), + 22: uint16(36036), + 23: uint16(36037), + 24: uint16(36038), + 25: uint16(36039), + 26: uint16(36040), + 27: uint16(36041), + 28: uint16(36042), + 29: uint16(36043), + 30: uint16(36044), + 31: uint16(36045), + 32: uint16(36046), + 33: uint16(36047), + 34: uint16(36048), + 35: uint16(36049), + 36: uint16(36050), + 37: uint16(36051), + 38: uint16(36052), + 39: uint16(36053), + 40: uint16(36054), + 41: uint16(36055), + 42: uint16(36056), + 43: uint16(36057), + 44: uint16(36058), + 45: uint16(36059), + 46: uint16(36060), + 47: uint16(36061), + 48: uint16(36062), + 49: uint16(36063), + 50: uint16(36064), + 51: uint16(36065), + 52: uint16(36066), + 53: uint16(36067), + 54: uint16(36068), + 55: uint16(36069), + 56: uint16(36070), + 57: uint16(36071), + 58: uint16(36072), + 59: uint16(36073), + 60: uint16(36074), + 61: uint16(36075), + 62: uint16(36076), + 63: uint16(36077), + 64: uint16(36078), + 65: uint16(36079), + 66: uint16(36080), + 67: uint16(36081), + 68: uint16(36082), + 69: uint16(36083), + 70: uint16(36084), + 71: uint16(36085), + 72: uint16(36086), + 73: uint16(36087), + 74: uint16(36088), + 75: uint16(36089), + 76: uint16(36090), + 77: uint16(36091), + 78: uint16(36092), + 79: uint16(36093), + 80: uint16(36094), + 81: uint16(36095), + 82: uint16(36096), + 83: uint16(36097), + 84: uint16(36098), + 85: uint16(36099), + 86: uint16(36100), + 87: uint16(36101), + 88: uint16(36102), + 89: uint16(36103), + 90: uint16(36104), + 91: uint16(36105), + 92: uint16(36106), + 93: uint16(36107), + 94: uint16(36108), + 95: uint16(36109), + 96: uint16(20319), + 97: uint16(20311), + 98: uint16(20274), + 99: uint16(20285), + 100: uint16(20342), + 101: uint16(20340), + 102: uint16(20369), + 103: uint16(20361), + 104: uint16(20355), + 105: uint16(20367), + 106: uint16(20350), + 107: uint16(20347), + 108: uint16(20394), + 109: uint16(20348), + 110: uint16(20396), + 111: uint16(20372), + 112: uint16(20454), + 113: uint16(20456), + 114: uint16(20458), + 115: uint16(20421), + 116: uint16(20442), + 117: uint16(20451), + 118: uint16(20444), + 119: uint16(20433), + 120: uint16(20447), + 121: uint16(20472), + 122: uint16(20521), + 123: uint16(20556), + 124: uint16(20467), + 125: uint16(20524), + 126: uint16(20495), + 127: uint16(20526), + 128: uint16(20525), + 129: uint16(20478), + 130: uint16(20508), + 131: uint16(20492), + 132: uint16(20517), + 133: uint16(20520), + 134: uint16(20606), + 135: uint16(20547), + 136: uint16(20565), + 137: uint16(20552), + 138: uint16(20558), + 139: uint16(20588), + 140: uint16(20603), + 141: uint16(20645), + 142: uint16(20647), + 143: uint16(20649), + 144: uint16(20666), + 145: uint16(20694), + 146: uint16(20742), + 147: uint16(20717), + 148: uint16(20716), + 149: uint16(20710), + 150: uint16(20718), + 151: uint16(20743), + 152: uint16(20747), + 153: uint16(20189), + 154: uint16(27709), + 155: uint16(20312), + 156: uint16(20325), + 157: uint16(20430), + 158: uint16(40864), + 159: uint16(27718), + 160: uint16(31860), + 161: uint16(20846), + 162: uint16(24061), + 163: uint16(40649), + 164: uint16(39320), + 165: uint16(20865), + 166: uint16(22804), + 167: uint16(21241), + 168: uint16(21261), + 169: uint16(35335), + 170: uint16(21264), + 171: uint16(20971), + 172: uint16(22809), + 173: uint16(20821), + 174: uint16(20128), + 175: uint16(20822), + 176: uint16(20147), + 177: uint16(34926), + 178: uint16(34980), + 179: uint16(20149), + 180: uint16(33044), + 181: uint16(35026), + 182: uint16(31104), + 183: uint16(23348), + 184: uint16(34819), + 185: uint16(32696), + 186: uint16(20907), + 187: uint16(20913), + 188: uint16(20925), + 189: uint16(20924), + }, + 89: { + 0: uint16(36110), + 1: uint16(36111), + 2: uint16(36112), + 3: uint16(36113), + 4: uint16(36114), + 5: uint16(36115), + 6: uint16(36116), + 7: uint16(36117), + 8: uint16(36118), + 9: uint16(36119), + 10: uint16(36120), + 11: uint16(36121), + 12: uint16(36122), + 13: uint16(36123), + 14: uint16(36124), + 15: uint16(36128), + 16: uint16(36177), + 17: uint16(36178), + 18: uint16(36183), + 19: uint16(36191), + 20: uint16(36197), + 21: uint16(36200), + 22: uint16(36201), + 23: uint16(36202), + 24: uint16(36204), + 25: uint16(36206), + 26: uint16(36207), + 27: uint16(36209), + 28: uint16(36210), + 29: uint16(36216), + 30: uint16(36217), + 31: uint16(36218), + 32: uint16(36219), + 33: uint16(36220), + 34: uint16(36221), + 35: uint16(36222), + 36: uint16(36223), + 37: uint16(36224), + 38: uint16(36226), + 39: uint16(36227), + 40: uint16(36230), + 41: uint16(36231), + 42: uint16(36232), + 43: uint16(36233), + 44: uint16(36236), + 45: uint16(36237), + 46: uint16(36238), + 47: uint16(36239), + 48: uint16(36240), + 49: uint16(36242), + 50: uint16(36243), + 51: uint16(36245), + 52: uint16(36246), + 53: uint16(36247), + 54: uint16(36248), + 55: uint16(36249), + 56: uint16(36250), + 57: uint16(36251), + 58: uint16(36252), + 59: uint16(36253), + 60: uint16(36254), + 61: uint16(36256), + 62: uint16(36257), + 63: uint16(36258), + 64: uint16(36260), + 65: uint16(36261), + 66: uint16(36262), + 67: uint16(36263), + 68: uint16(36264), + 69: uint16(36265), + 70: uint16(36266), + 71: uint16(36267), + 72: uint16(36268), + 73: uint16(36269), + 74: uint16(36270), + 75: uint16(36271), + 76: uint16(36272), + 77: uint16(36274), + 78: uint16(36278), + 79: uint16(36279), + 80: uint16(36281), + 81: uint16(36283), + 82: uint16(36285), + 83: uint16(36288), + 84: uint16(36289), + 85: uint16(36290), + 86: uint16(36293), + 87: uint16(36295), + 88: uint16(36296), + 89: uint16(36297), + 90: uint16(36298), + 91: uint16(36301), + 92: uint16(36304), + 93: uint16(36306), + 94: uint16(36307), + 95: uint16(36308), + 96: uint16(20935), + 97: uint16(20886), + 98: uint16(20898), + 99: uint16(20901), + 100: uint16(35744), + 101: uint16(35750), + 102: uint16(35751), + 103: uint16(35754), + 104: uint16(35764), + 105: uint16(35765), + 106: uint16(35767), + 107: uint16(35778), + 108: uint16(35779), + 109: uint16(35787), + 110: uint16(35791), + 111: uint16(35790), + 112: uint16(35794), + 113: uint16(35795), + 114: uint16(35796), + 115: uint16(35798), + 116: uint16(35800), + 117: uint16(35801), + 118: uint16(35804), + 119: uint16(35807), + 120: uint16(35808), + 121: uint16(35812), + 122: uint16(35816), + 123: uint16(35817), + 124: uint16(35822), + 125: uint16(35824), + 126: uint16(35827), + 127: uint16(35830), + 128: uint16(35833), + 129: uint16(35836), + 130: uint16(35839), + 131: uint16(35840), + 132: uint16(35842), + 133: uint16(35844), + 134: uint16(35847), + 135: uint16(35852), + 136: uint16(35855), + 137: uint16(35857), + 138: uint16(35858), + 139: uint16(35860), + 140: uint16(35861), + 141: uint16(35862), + 142: uint16(35865), + 143: uint16(35867), + 144: uint16(35864), + 145: uint16(35869), + 146: uint16(35871), + 147: uint16(35872), + 148: uint16(35873), + 149: uint16(35877), + 150: uint16(35879), + 151: uint16(35882), + 152: uint16(35883), + 153: uint16(35886), + 154: uint16(35887), + 155: uint16(35890), + 156: uint16(35891), + 157: uint16(35893), + 158: uint16(35894), + 159: uint16(21353), + 160: uint16(21370), + 161: uint16(38429), + 162: uint16(38434), + 163: uint16(38433), + 164: uint16(38449), + 165: uint16(38442), + 166: uint16(38461), + 167: uint16(38460), + 168: uint16(38466), + 169: uint16(38473), + 170: uint16(38484), + 171: uint16(38495), + 172: uint16(38503), + 173: uint16(38508), + 174: uint16(38514), + 175: uint16(38516), + 176: uint16(38536), + 177: uint16(38541), + 178: uint16(38551), + 179: uint16(38576), + 180: uint16(37015), + 181: uint16(37019), + 182: uint16(37021), + 183: uint16(37017), + 184: uint16(37036), + 185: uint16(37025), + 186: uint16(37044), + 187: uint16(37043), + 188: uint16(37046), + 189: uint16(37050), + }, + 90: { + 0: uint16(36309), + 1: uint16(36312), + 2: uint16(36313), + 3: uint16(36316), + 4: uint16(36320), + 5: uint16(36321), + 6: uint16(36322), + 7: uint16(36325), + 8: uint16(36326), + 9: uint16(36327), + 10: uint16(36329), + 11: uint16(36333), + 12: uint16(36334), + 13: uint16(36336), + 14: uint16(36337), + 15: uint16(36338), + 16: uint16(36340), + 17: uint16(36342), + 18: uint16(36348), + 19: uint16(36350), + 20: uint16(36351), + 21: uint16(36352), + 22: uint16(36353), + 23: uint16(36354), + 24: uint16(36355), + 25: uint16(36356), + 26: uint16(36358), + 27: uint16(36359), + 28: uint16(36360), + 29: uint16(36363), + 30: uint16(36365), + 31: uint16(36366), + 32: uint16(36368), + 33: uint16(36369), + 34: uint16(36370), + 35: uint16(36371), + 36: uint16(36373), + 37: uint16(36374), + 38: uint16(36375), + 39: uint16(36376), + 40: uint16(36377), + 41: uint16(36378), + 42: uint16(36379), + 43: uint16(36380), + 44: uint16(36384), + 45: uint16(36385), + 46: uint16(36388), + 47: uint16(36389), + 48: uint16(36390), + 49: uint16(36391), + 50: uint16(36392), + 51: uint16(36395), + 52: uint16(36397), + 53: uint16(36400), + 54: uint16(36402), + 55: uint16(36403), + 56: uint16(36404), + 57: uint16(36406), + 58: uint16(36407), + 59: uint16(36408), + 60: uint16(36411), + 61: uint16(36412), + 62: uint16(36414), + 63: uint16(36415), + 64: uint16(36419), + 65: uint16(36421), + 66: uint16(36422), + 67: uint16(36428), + 68: uint16(36429), + 69: uint16(36430), + 70: uint16(36431), + 71: uint16(36432), + 72: uint16(36435), + 73: uint16(36436), + 74: uint16(36437), + 75: uint16(36438), + 76: uint16(36439), + 77: uint16(36440), + 78: uint16(36442), + 79: uint16(36443), + 80: uint16(36444), + 81: uint16(36445), + 82: uint16(36446), + 83: uint16(36447), + 84: uint16(36448), + 85: uint16(36449), + 86: uint16(36450), + 87: uint16(36451), + 88: uint16(36452), + 89: uint16(36453), + 90: uint16(36455), + 91: uint16(36456), + 92: uint16(36458), + 93: uint16(36459), + 94: uint16(36462), + 95: uint16(36465), + 96: uint16(37048), + 97: uint16(37040), + 98: uint16(37071), + 99: uint16(37061), + 100: uint16(37054), + 101: uint16(37072), + 102: uint16(37060), + 103: uint16(37063), + 104: uint16(37075), + 105: uint16(37094), + 106: uint16(37090), + 107: uint16(37084), + 108: uint16(37079), + 109: uint16(37083), + 110: uint16(37099), + 111: uint16(37103), + 112: uint16(37118), + 113: uint16(37124), + 114: uint16(37154), + 115: uint16(37150), + 116: uint16(37155), + 117: uint16(37169), + 118: uint16(37167), + 119: uint16(37177), + 120: uint16(37187), + 121: uint16(37190), + 122: uint16(21005), + 123: uint16(22850), + 124: uint16(21154), + 125: uint16(21164), + 126: uint16(21165), + 127: uint16(21182), + 128: uint16(21759), + 129: uint16(21200), + 130: uint16(21206), + 131: uint16(21232), + 132: uint16(21471), + 133: uint16(29166), + 134: uint16(30669), + 135: uint16(24308), + 136: uint16(20981), + 137: uint16(20988), + 138: uint16(39727), + 139: uint16(21430), + 140: uint16(24321), + 141: uint16(30042), + 142: uint16(24047), + 143: uint16(22348), + 144: uint16(22441), + 145: uint16(22433), + 146: uint16(22654), + 147: uint16(22716), + 148: uint16(22725), + 149: uint16(22737), + 150: uint16(22313), + 151: uint16(22316), + 152: uint16(22314), + 153: uint16(22323), + 154: uint16(22329), + 155: uint16(22318), + 156: uint16(22319), + 157: uint16(22364), + 158: uint16(22331), + 159: uint16(22338), + 160: uint16(22377), + 161: uint16(22405), + 162: uint16(22379), + 163: uint16(22406), + 164: uint16(22396), + 165: uint16(22395), + 166: uint16(22376), + 167: uint16(22381), + 168: uint16(22390), + 169: uint16(22387), + 170: uint16(22445), + 171: uint16(22436), + 172: uint16(22412), + 173: uint16(22450), + 174: uint16(22479), + 175: uint16(22439), + 176: uint16(22452), + 177: uint16(22419), + 178: uint16(22432), + 179: uint16(22485), + 180: uint16(22488), + 181: uint16(22490), + 182: uint16(22489), + 183: uint16(22482), + 184: uint16(22456), + 185: uint16(22516), + 186: uint16(22511), + 187: uint16(22520), + 188: uint16(22500), + 189: uint16(22493), + }, + 91: { + 0: uint16(36467), + 1: uint16(36469), + 2: uint16(36471), + 3: uint16(36472), + 4: uint16(36473), + 5: uint16(36474), + 6: uint16(36475), + 7: uint16(36477), + 8: uint16(36478), + 9: uint16(36480), + 10: uint16(36482), + 11: uint16(36483), + 12: uint16(36484), + 13: uint16(36486), + 14: uint16(36488), + 15: uint16(36489), + 16: uint16(36490), + 17: uint16(36491), + 18: uint16(36492), + 19: uint16(36493), + 20: uint16(36494), + 21: uint16(36497), + 22: uint16(36498), + 23: uint16(36499), + 24: uint16(36501), + 25: uint16(36502), + 26: uint16(36503), + 27: uint16(36504), + 28: uint16(36505), + 29: uint16(36506), + 30: uint16(36507), + 31: uint16(36509), + 32: uint16(36511), + 33: uint16(36512), + 34: uint16(36513), + 35: uint16(36514), + 36: uint16(36515), + 37: uint16(36516), + 38: uint16(36517), + 39: uint16(36518), + 40: uint16(36519), + 41: uint16(36520), + 42: uint16(36521), + 43: uint16(36522), + 44: uint16(36525), + 45: uint16(36526), + 46: uint16(36528), + 47: uint16(36529), + 48: uint16(36531), + 49: uint16(36532), + 50: uint16(36533), + 51: uint16(36534), + 52: uint16(36535), + 53: uint16(36536), + 54: uint16(36537), + 55: uint16(36539), + 56: uint16(36540), + 57: uint16(36541), + 58: uint16(36542), + 59: uint16(36543), + 60: uint16(36544), + 61: uint16(36545), + 62: uint16(36546), + 63: uint16(36547), + 64: uint16(36548), + 65: uint16(36549), + 66: uint16(36550), + 67: uint16(36551), + 68: uint16(36552), + 69: uint16(36553), + 70: uint16(36554), + 71: uint16(36555), + 72: uint16(36556), + 73: uint16(36557), + 74: uint16(36559), + 75: uint16(36560), + 76: uint16(36561), + 77: uint16(36562), + 78: uint16(36563), + 79: uint16(36564), + 80: uint16(36565), + 81: uint16(36566), + 82: uint16(36567), + 83: uint16(36568), + 84: uint16(36569), + 85: uint16(36570), + 86: uint16(36571), + 87: uint16(36572), + 88: uint16(36573), + 89: uint16(36574), + 90: uint16(36575), + 91: uint16(36576), + 92: uint16(36577), + 93: uint16(36578), + 94: uint16(36579), + 95: uint16(36580), + 96: uint16(22539), + 97: uint16(22541), + 98: uint16(22525), + 99: uint16(22509), + 100: uint16(22528), + 101: uint16(22558), + 102: uint16(22553), + 103: uint16(22596), + 104: uint16(22560), + 105: uint16(22629), + 106: uint16(22636), + 107: uint16(22657), + 108: uint16(22665), + 109: uint16(22682), + 110: uint16(22656), + 111: uint16(39336), + 112: uint16(40729), + 113: uint16(25087), + 114: uint16(33401), + 115: uint16(33405), + 116: uint16(33407), + 117: uint16(33423), + 118: uint16(33418), + 119: uint16(33448), + 120: uint16(33412), + 121: uint16(33422), + 122: uint16(33425), + 123: uint16(33431), + 124: uint16(33433), + 125: uint16(33451), + 126: uint16(33464), + 127: uint16(33470), + 128: uint16(33456), + 129: uint16(33480), + 130: uint16(33482), + 131: uint16(33507), + 132: uint16(33432), + 133: uint16(33463), + 134: uint16(33454), + 135: uint16(33483), + 136: uint16(33484), + 137: uint16(33473), + 138: uint16(33449), + 139: uint16(33460), + 140: uint16(33441), + 141: uint16(33450), + 142: uint16(33439), + 143: uint16(33476), + 144: uint16(33486), + 145: uint16(33444), + 146: uint16(33505), + 147: uint16(33545), + 148: uint16(33527), + 149: uint16(33508), + 150: uint16(33551), + 151: uint16(33543), + 152: uint16(33500), + 153: uint16(33524), + 154: uint16(33490), + 155: uint16(33496), + 156: uint16(33548), + 157: uint16(33531), + 158: uint16(33491), + 159: uint16(33553), + 160: uint16(33562), + 161: uint16(33542), + 162: uint16(33556), + 163: uint16(33557), + 164: uint16(33504), + 165: uint16(33493), + 166: uint16(33564), + 167: uint16(33617), + 168: uint16(33627), + 169: uint16(33628), + 170: uint16(33544), + 171: uint16(33682), + 172: uint16(33596), + 173: uint16(33588), + 174: uint16(33585), + 175: uint16(33691), + 176: uint16(33630), + 177: uint16(33583), + 178: uint16(33615), + 179: uint16(33607), + 180: uint16(33603), + 181: uint16(33631), + 182: uint16(33600), + 183: uint16(33559), + 184: uint16(33632), + 185: uint16(33581), + 186: uint16(33594), + 187: uint16(33587), + 188: uint16(33638), + 189: uint16(33637), + }, + 92: { + 0: uint16(36581), + 1: uint16(36582), + 2: uint16(36583), + 3: uint16(36584), + 4: uint16(36585), + 5: uint16(36586), + 6: uint16(36587), + 7: uint16(36588), + 8: uint16(36589), + 9: uint16(36590), + 10: uint16(36591), + 11: uint16(36592), + 12: uint16(36593), + 13: uint16(36594), + 14: uint16(36595), + 15: uint16(36596), + 16: uint16(36597), + 17: uint16(36598), + 18: uint16(36599), + 19: uint16(36600), + 20: uint16(36601), + 21: uint16(36602), + 22: uint16(36603), + 23: uint16(36604), + 24: uint16(36605), + 25: uint16(36606), + 26: uint16(36607), + 27: uint16(36608), + 28: uint16(36609), + 29: uint16(36610), + 30: uint16(36611), + 31: uint16(36612), + 32: uint16(36613), + 33: uint16(36614), + 34: uint16(36615), + 35: uint16(36616), + 36: uint16(36617), + 37: uint16(36618), + 38: uint16(36619), + 39: uint16(36620), + 40: uint16(36621), + 41: uint16(36622), + 42: uint16(36623), + 43: uint16(36624), + 44: uint16(36625), + 45: uint16(36626), + 46: uint16(36627), + 47: uint16(36628), + 48: uint16(36629), + 49: uint16(36630), + 50: uint16(36631), + 51: uint16(36632), + 52: uint16(36633), + 53: uint16(36634), + 54: uint16(36635), + 55: uint16(36636), + 56: uint16(36637), + 57: uint16(36638), + 58: uint16(36639), + 59: uint16(36640), + 60: uint16(36641), + 61: uint16(36642), + 62: uint16(36643), + 63: uint16(36644), + 64: uint16(36645), + 65: uint16(36646), + 66: uint16(36647), + 67: uint16(36648), + 68: uint16(36649), + 69: uint16(36650), + 70: uint16(36651), + 71: uint16(36652), + 72: uint16(36653), + 73: uint16(36654), + 74: uint16(36655), + 75: uint16(36656), + 76: uint16(36657), + 77: uint16(36658), + 78: uint16(36659), + 79: uint16(36660), + 80: uint16(36661), + 81: uint16(36662), + 82: uint16(36663), + 83: uint16(36664), + 84: uint16(36665), + 85: uint16(36666), + 86: uint16(36667), + 87: uint16(36668), + 88: uint16(36669), + 89: uint16(36670), + 90: uint16(36671), + 91: uint16(36672), + 92: uint16(36673), + 93: uint16(36674), + 94: uint16(36675), + 95: uint16(36676), + 96: uint16(33640), + 97: uint16(33563), + 98: uint16(33641), + 99: uint16(33644), + 100: uint16(33642), + 101: uint16(33645), + 102: uint16(33646), + 103: uint16(33712), + 104: uint16(33656), + 105: uint16(33715), + 106: uint16(33716), + 107: uint16(33696), + 108: uint16(33706), + 109: uint16(33683), + 110: uint16(33692), + 111: uint16(33669), + 112: uint16(33660), + 113: uint16(33718), + 114: uint16(33705), + 115: uint16(33661), + 116: uint16(33720), + 117: uint16(33659), + 118: uint16(33688), + 119: uint16(33694), + 120: uint16(33704), + 121: uint16(33722), + 122: uint16(33724), + 123: uint16(33729), + 124: uint16(33793), + 125: uint16(33765), + 126: uint16(33752), + 127: uint16(22535), + 128: uint16(33816), + 129: uint16(33803), + 130: uint16(33757), + 131: uint16(33789), + 132: uint16(33750), + 133: uint16(33820), + 134: uint16(33848), + 135: uint16(33809), + 136: uint16(33798), + 137: uint16(33748), + 138: uint16(33759), + 139: uint16(33807), + 140: uint16(33795), + 141: uint16(33784), + 142: uint16(33785), + 143: uint16(33770), + 144: uint16(33733), + 145: uint16(33728), + 146: uint16(33830), + 147: uint16(33776), + 148: uint16(33761), + 149: uint16(33884), + 150: uint16(33873), + 151: uint16(33882), + 152: uint16(33881), + 153: uint16(33907), + 154: uint16(33927), + 155: uint16(33928), + 156: uint16(33914), + 157: uint16(33929), + 158: uint16(33912), + 159: uint16(33852), + 160: uint16(33862), + 161: uint16(33897), + 162: uint16(33910), + 163: uint16(33932), + 164: uint16(33934), + 165: uint16(33841), + 166: uint16(33901), + 167: uint16(33985), + 168: uint16(33997), + 169: uint16(34000), + 170: uint16(34022), + 171: uint16(33981), + 172: uint16(34003), + 173: uint16(33994), + 174: uint16(33983), + 175: uint16(33978), + 176: uint16(34016), + 177: uint16(33953), + 178: uint16(33977), + 179: uint16(33972), + 180: uint16(33943), + 181: uint16(34021), + 182: uint16(34019), + 183: uint16(34060), + 184: uint16(29965), + 185: uint16(34104), + 186: uint16(34032), + 187: uint16(34105), + 188: uint16(34079), + 189: uint16(34106), + }, + 93: { + 0: uint16(36677), + 1: uint16(36678), + 2: uint16(36679), + 3: uint16(36680), + 4: uint16(36681), + 5: uint16(36682), + 6: uint16(36683), + 7: uint16(36684), + 8: uint16(36685), + 9: uint16(36686), + 10: uint16(36687), + 11: uint16(36688), + 12: uint16(36689), + 13: uint16(36690), + 14: uint16(36691), + 15: uint16(36692), + 16: uint16(36693), + 17: uint16(36694), + 18: uint16(36695), + 19: uint16(36696), + 20: uint16(36697), + 21: uint16(36698), + 22: uint16(36699), + 23: uint16(36700), + 24: uint16(36701), + 25: uint16(36702), + 26: uint16(36703), + 27: uint16(36704), + 28: uint16(36705), + 29: uint16(36706), + 30: uint16(36707), + 31: uint16(36708), + 32: uint16(36709), + 33: uint16(36714), + 34: uint16(36736), + 35: uint16(36748), + 36: uint16(36754), + 37: uint16(36765), + 38: uint16(36768), + 39: uint16(36769), + 40: uint16(36770), + 41: uint16(36772), + 42: uint16(36773), + 43: uint16(36774), + 44: uint16(36775), + 45: uint16(36778), + 46: uint16(36780), + 47: uint16(36781), + 48: uint16(36782), + 49: uint16(36783), + 50: uint16(36786), + 51: uint16(36787), + 52: uint16(36788), + 53: uint16(36789), + 54: uint16(36791), + 55: uint16(36792), + 56: uint16(36794), + 57: uint16(36795), + 58: uint16(36796), + 59: uint16(36799), + 60: uint16(36800), + 61: uint16(36803), + 62: uint16(36806), + 63: uint16(36809), + 64: uint16(36810), + 65: uint16(36811), + 66: uint16(36812), + 67: uint16(36813), + 68: uint16(36815), + 69: uint16(36818), + 70: uint16(36822), + 71: uint16(36823), + 72: uint16(36826), + 73: uint16(36832), + 74: uint16(36833), + 75: uint16(36835), + 76: uint16(36839), + 77: uint16(36844), + 78: uint16(36847), + 79: uint16(36849), + 80: uint16(36850), + 81: uint16(36852), + 82: uint16(36853), + 83: uint16(36854), + 84: uint16(36858), + 85: uint16(36859), + 86: uint16(36860), + 87: uint16(36862), + 88: uint16(36863), + 89: uint16(36871), + 90: uint16(36872), + 91: uint16(36876), + 92: uint16(36878), + 93: uint16(36883), + 94: uint16(36885), + 95: uint16(36888), + 96: uint16(34134), + 97: uint16(34107), + 98: uint16(34047), + 99: uint16(34044), + 100: uint16(34137), + 101: uint16(34120), + 102: uint16(34152), + 103: uint16(34148), + 104: uint16(34142), + 105: uint16(34170), + 106: uint16(30626), + 107: uint16(34115), + 108: uint16(34162), + 109: uint16(34171), + 110: uint16(34212), + 111: uint16(34216), + 112: uint16(34183), + 113: uint16(34191), + 114: uint16(34169), + 115: uint16(34222), + 116: uint16(34204), + 117: uint16(34181), + 118: uint16(34233), + 119: uint16(34231), + 120: uint16(34224), + 121: uint16(34259), + 122: uint16(34241), + 123: uint16(34268), + 124: uint16(34303), + 125: uint16(34343), + 126: uint16(34309), + 127: uint16(34345), + 128: uint16(34326), + 129: uint16(34364), + 130: uint16(24318), + 131: uint16(24328), + 132: uint16(22844), + 133: uint16(22849), + 134: uint16(32823), + 135: uint16(22869), + 136: uint16(22874), + 137: uint16(22872), + 138: uint16(21263), + 139: uint16(23586), + 140: uint16(23589), + 141: uint16(23596), + 142: uint16(23604), + 143: uint16(25164), + 144: uint16(25194), + 145: uint16(25247), + 146: uint16(25275), + 147: uint16(25290), + 148: uint16(25306), + 149: uint16(25303), + 150: uint16(25326), + 151: uint16(25378), + 152: uint16(25334), + 153: uint16(25401), + 154: uint16(25419), + 155: uint16(25411), + 156: uint16(25517), + 157: uint16(25590), + 158: uint16(25457), + 159: uint16(25466), + 160: uint16(25486), + 161: uint16(25524), + 162: uint16(25453), + 163: uint16(25516), + 164: uint16(25482), + 165: uint16(25449), + 166: uint16(25518), + 167: uint16(25532), + 168: uint16(25586), + 169: uint16(25592), + 170: uint16(25568), + 171: uint16(25599), + 172: uint16(25540), + 173: uint16(25566), + 174: uint16(25550), + 175: uint16(25682), + 176: uint16(25542), + 177: uint16(25534), + 178: uint16(25669), + 179: uint16(25665), + 180: uint16(25611), + 181: uint16(25627), + 182: uint16(25632), + 183: uint16(25612), + 184: uint16(25638), + 185: uint16(25633), + 186: uint16(25694), + 187: uint16(25732), + 188: uint16(25709), + 189: uint16(25750), + }, + 94: { + 0: uint16(36889), + 1: uint16(36892), + 2: uint16(36899), + 3: uint16(36900), + 4: uint16(36901), + 5: uint16(36903), + 6: uint16(36904), + 7: uint16(36905), + 8: uint16(36906), + 9: uint16(36907), + 10: uint16(36908), + 11: uint16(36912), + 12: uint16(36913), + 13: uint16(36914), + 14: uint16(36915), + 15: uint16(36916), + 16: uint16(36919), + 17: uint16(36921), + 18: uint16(36922), + 19: uint16(36925), + 20: uint16(36927), + 21: uint16(36928), + 22: uint16(36931), + 23: uint16(36933), + 24: uint16(36934), + 25: uint16(36936), + 26: uint16(36937), + 27: uint16(36938), + 28: uint16(36939), + 29: uint16(36940), + 30: uint16(36942), + 31: uint16(36948), + 32: uint16(36949), + 33: uint16(36950), + 34: uint16(36953), + 35: uint16(36954), + 36: uint16(36956), + 37: uint16(36957), + 38: uint16(36958), + 39: uint16(36959), + 40: uint16(36960), + 41: uint16(36961), + 42: uint16(36964), + 43: uint16(36966), + 44: uint16(36967), + 45: uint16(36969), + 46: uint16(36970), + 47: uint16(36971), + 48: uint16(36972), + 49: uint16(36975), + 50: uint16(36976), + 51: uint16(36977), + 52: uint16(36978), + 53: uint16(36979), + 54: uint16(36982), + 55: uint16(36983), + 56: uint16(36984), + 57: uint16(36985), + 58: uint16(36986), + 59: uint16(36987), + 60: uint16(36988), + 61: uint16(36990), + 62: uint16(36993), + 63: uint16(36996), + 64: uint16(36997), + 65: uint16(36998), + 66: uint16(36999), + 67: uint16(37001), + 68: uint16(37002), + 69: uint16(37004), + 70: uint16(37005), + 71: uint16(37006), + 72: uint16(37007), + 73: uint16(37008), + 74: uint16(37010), + 75: uint16(37012), + 76: uint16(37014), + 77: uint16(37016), + 78: uint16(37018), + 79: uint16(37020), + 80: uint16(37022), + 81: uint16(37023), + 82: uint16(37024), + 83: uint16(37028), + 84: uint16(37029), + 85: uint16(37031), + 86: uint16(37032), + 87: uint16(37033), + 88: uint16(37035), + 89: uint16(37037), + 90: uint16(37042), + 91: uint16(37047), + 92: uint16(37052), + 93: uint16(37053), + 94: uint16(37055), + 95: uint16(37056), + 96: uint16(25722), + 97: uint16(25783), + 98: uint16(25784), + 99: uint16(25753), + 100: uint16(25786), + 101: uint16(25792), + 102: uint16(25808), + 103: uint16(25815), + 104: uint16(25828), + 105: uint16(25826), + 106: uint16(25865), + 107: uint16(25893), + 108: uint16(25902), + 109: uint16(24331), + 110: uint16(24530), + 111: uint16(29977), + 112: uint16(24337), + 113: uint16(21343), + 114: uint16(21489), + 115: uint16(21501), + 116: uint16(21481), + 117: uint16(21480), + 118: uint16(21499), + 119: uint16(21522), + 120: uint16(21526), + 121: uint16(21510), + 122: uint16(21579), + 123: uint16(21586), + 124: uint16(21587), + 125: uint16(21588), + 126: uint16(21590), + 127: uint16(21571), + 128: uint16(21537), + 129: uint16(21591), + 130: uint16(21593), + 131: uint16(21539), + 132: uint16(21554), + 133: uint16(21634), + 134: uint16(21652), + 135: uint16(21623), + 136: uint16(21617), + 137: uint16(21604), + 138: uint16(21658), + 139: uint16(21659), + 140: uint16(21636), + 141: uint16(21622), + 142: uint16(21606), + 143: uint16(21661), + 144: uint16(21712), + 145: uint16(21677), + 146: uint16(21698), + 147: uint16(21684), + 148: uint16(21714), + 149: uint16(21671), + 150: uint16(21670), + 151: uint16(21715), + 152: uint16(21716), + 153: uint16(21618), + 154: uint16(21667), + 155: uint16(21717), + 156: uint16(21691), + 157: uint16(21695), + 158: uint16(21708), + 159: uint16(21721), + 160: uint16(21722), + 161: uint16(21724), + 162: uint16(21673), + 163: uint16(21674), + 164: uint16(21668), + 165: uint16(21725), + 166: uint16(21711), + 167: uint16(21726), + 168: uint16(21787), + 169: uint16(21735), + 170: uint16(21792), + 171: uint16(21757), + 172: uint16(21780), + 173: uint16(21747), + 174: uint16(21794), + 175: uint16(21795), + 176: uint16(21775), + 177: uint16(21777), + 178: uint16(21799), + 179: uint16(21802), + 180: uint16(21863), + 181: uint16(21903), + 182: uint16(21941), + 183: uint16(21833), + 184: uint16(21869), + 185: uint16(21825), + 186: uint16(21845), + 187: uint16(21823), + 188: uint16(21840), + 189: uint16(21820), + }, + 95: { + 0: uint16(37058), + 1: uint16(37059), + 2: uint16(37062), + 3: uint16(37064), + 4: uint16(37065), + 5: uint16(37067), + 6: uint16(37068), + 7: uint16(37069), + 8: uint16(37074), + 9: uint16(37076), + 10: uint16(37077), + 11: uint16(37078), + 12: uint16(37080), + 13: uint16(37081), + 14: uint16(37082), + 15: uint16(37086), + 16: uint16(37087), + 17: uint16(37088), + 18: uint16(37091), + 19: uint16(37092), + 20: uint16(37093), + 21: uint16(37097), + 22: uint16(37098), + 23: uint16(37100), + 24: uint16(37102), + 25: uint16(37104), + 26: uint16(37105), + 27: uint16(37106), + 28: uint16(37107), + 29: uint16(37109), + 30: uint16(37110), + 31: uint16(37111), + 32: uint16(37113), + 33: uint16(37114), + 34: uint16(37115), + 35: uint16(37116), + 36: uint16(37119), + 37: uint16(37120), + 38: uint16(37121), + 39: uint16(37123), + 40: uint16(37125), + 41: uint16(37126), + 42: uint16(37127), + 43: uint16(37128), + 44: uint16(37129), + 45: uint16(37130), + 46: uint16(37131), + 47: uint16(37132), + 48: uint16(37133), + 49: uint16(37134), + 50: uint16(37135), + 51: uint16(37136), + 52: uint16(37137), + 53: uint16(37138), + 54: uint16(37139), + 55: uint16(37140), + 56: uint16(37141), + 57: uint16(37142), + 58: uint16(37143), + 59: uint16(37144), + 60: uint16(37146), + 61: uint16(37147), + 62: uint16(37148), + 63: uint16(37149), + 64: uint16(37151), + 65: uint16(37152), + 66: uint16(37153), + 67: uint16(37156), + 68: uint16(37157), + 69: uint16(37158), + 70: uint16(37159), + 71: uint16(37160), + 72: uint16(37161), + 73: uint16(37162), + 74: uint16(37163), + 75: uint16(37164), + 76: uint16(37165), + 77: uint16(37166), + 78: uint16(37168), + 79: uint16(37170), + 80: uint16(37171), + 81: uint16(37172), + 82: uint16(37173), + 83: uint16(37174), + 84: uint16(37175), + 85: uint16(37176), + 86: uint16(37178), + 87: uint16(37179), + 88: uint16(37180), + 89: uint16(37181), + 90: uint16(37182), + 91: uint16(37183), + 92: uint16(37184), + 93: uint16(37185), + 94: uint16(37186), + 95: uint16(37188), + 96: uint16(21815), + 97: uint16(21846), + 98: uint16(21877), + 99: uint16(21878), + 100: uint16(21879), + 101: uint16(21811), + 102: uint16(21808), + 103: uint16(21852), + 104: uint16(21899), + 105: uint16(21970), + 106: uint16(21891), + 107: uint16(21937), + 108: uint16(21945), + 109: uint16(21896), + 110: uint16(21889), + 111: uint16(21919), + 112: uint16(21886), + 113: uint16(21974), + 114: uint16(21905), + 115: uint16(21883), + 116: uint16(21983), + 117: uint16(21949), + 118: uint16(21950), + 119: uint16(21908), + 120: uint16(21913), + 121: uint16(21994), + 122: uint16(22007), + 123: uint16(21961), + 124: uint16(22047), + 125: uint16(21969), + 126: uint16(21995), + 127: uint16(21996), + 128: uint16(21972), + 129: uint16(21990), + 130: uint16(21981), + 131: uint16(21956), + 132: uint16(21999), + 133: uint16(21989), + 134: uint16(22002), + 135: uint16(22003), + 136: uint16(21964), + 137: uint16(21965), + 138: uint16(21992), + 139: uint16(22005), + 140: uint16(21988), + 141: uint16(36756), + 142: uint16(22046), + 143: uint16(22024), + 144: uint16(22028), + 145: uint16(22017), + 146: uint16(22052), + 147: uint16(22051), + 148: uint16(22014), + 149: uint16(22016), + 150: uint16(22055), + 151: uint16(22061), + 152: uint16(22104), + 153: uint16(22073), + 154: uint16(22103), + 155: uint16(22060), + 156: uint16(22093), + 157: uint16(22114), + 158: uint16(22105), + 159: uint16(22108), + 160: uint16(22092), + 161: uint16(22100), + 162: uint16(22150), + 163: uint16(22116), + 164: uint16(22129), + 165: uint16(22123), + 166: uint16(22139), + 167: uint16(22140), + 168: uint16(22149), + 169: uint16(22163), + 170: uint16(22191), + 171: uint16(22228), + 172: uint16(22231), + 173: uint16(22237), + 174: uint16(22241), + 175: uint16(22261), + 176: uint16(22251), + 177: uint16(22265), + 178: uint16(22271), + 179: uint16(22276), + 180: uint16(22282), + 181: uint16(22281), + 182: uint16(22300), + 183: uint16(24079), + 184: uint16(24089), + 185: uint16(24084), + 186: uint16(24081), + 187: uint16(24113), + 188: uint16(24123), + 189: uint16(24124), + }, + 96: { + 0: uint16(37189), + 1: uint16(37191), + 2: uint16(37192), + 3: uint16(37201), + 4: uint16(37203), + 5: uint16(37204), + 6: uint16(37205), + 7: uint16(37206), + 8: uint16(37208), + 9: uint16(37209), + 10: uint16(37211), + 11: uint16(37212), + 12: uint16(37215), + 13: uint16(37216), + 14: uint16(37222), + 15: uint16(37223), + 16: uint16(37224), + 17: uint16(37227), + 18: uint16(37229), + 19: uint16(37235), + 20: uint16(37242), + 21: uint16(37243), + 22: uint16(37244), + 23: uint16(37248), + 24: uint16(37249), + 25: uint16(37250), + 26: uint16(37251), + 27: uint16(37252), + 28: uint16(37254), + 29: uint16(37256), + 30: uint16(37258), + 31: uint16(37262), + 32: uint16(37263), + 33: uint16(37267), + 34: uint16(37268), + 35: uint16(37269), + 36: uint16(37270), + 37: uint16(37271), + 38: uint16(37272), + 39: uint16(37273), + 40: uint16(37276), + 41: uint16(37277), + 42: uint16(37278), + 43: uint16(37279), + 44: uint16(37280), + 45: uint16(37281), + 46: uint16(37284), + 47: uint16(37285), + 48: uint16(37286), + 49: uint16(37287), + 50: uint16(37288), + 51: uint16(37289), + 52: uint16(37291), + 53: uint16(37292), + 54: uint16(37296), + 55: uint16(37297), + 56: uint16(37298), + 57: uint16(37299), + 58: uint16(37302), + 59: uint16(37303), + 60: uint16(37304), + 61: uint16(37305), + 62: uint16(37307), + 63: uint16(37308), + 64: uint16(37309), + 65: uint16(37310), + 66: uint16(37311), + 67: uint16(37312), + 68: uint16(37313), + 69: uint16(37314), + 70: uint16(37315), + 71: uint16(37316), + 72: uint16(37317), + 73: uint16(37318), + 74: uint16(37320), + 75: uint16(37323), + 76: uint16(37328), + 77: uint16(37330), + 78: uint16(37331), + 79: uint16(37332), + 80: uint16(37333), + 81: uint16(37334), + 82: uint16(37335), + 83: uint16(37336), + 84: uint16(37337), + 85: uint16(37338), + 86: uint16(37339), + 87: uint16(37341), + 88: uint16(37342), + 89: uint16(37343), + 90: uint16(37344), + 91: uint16(37345), + 92: uint16(37346), + 93: uint16(37347), + 94: uint16(37348), + 95: uint16(37349), + 96: uint16(24119), + 97: uint16(24132), + 98: uint16(24148), + 99: uint16(24155), + 100: uint16(24158), + 101: uint16(24161), + 102: uint16(23692), + 103: uint16(23674), + 104: uint16(23693), + 105: uint16(23696), + 106: uint16(23702), + 107: uint16(23688), + 108: uint16(23704), + 109: uint16(23705), + 110: uint16(23697), + 111: uint16(23706), + 112: uint16(23708), + 113: uint16(23733), + 114: uint16(23714), + 115: uint16(23741), + 116: uint16(23724), + 117: uint16(23723), + 118: uint16(23729), + 119: uint16(23715), + 120: uint16(23745), + 121: uint16(23735), + 122: uint16(23748), + 123: uint16(23762), + 124: uint16(23780), + 125: uint16(23755), + 126: uint16(23781), + 127: uint16(23810), + 128: uint16(23811), + 129: uint16(23847), + 130: uint16(23846), + 131: uint16(23854), + 132: uint16(23844), + 133: uint16(23838), + 134: uint16(23814), + 135: uint16(23835), + 136: uint16(23896), + 137: uint16(23870), + 138: uint16(23860), + 139: uint16(23869), + 140: uint16(23916), + 141: uint16(23899), + 142: uint16(23919), + 143: uint16(23901), + 144: uint16(23915), + 145: uint16(23883), + 146: uint16(23882), + 147: uint16(23913), + 148: uint16(23924), + 149: uint16(23938), + 150: uint16(23961), + 151: uint16(23965), + 152: uint16(35955), + 153: uint16(23991), + 154: uint16(24005), + 155: uint16(24435), + 156: uint16(24439), + 157: uint16(24450), + 158: uint16(24455), + 159: uint16(24457), + 160: uint16(24460), + 161: uint16(24469), + 162: uint16(24473), + 163: uint16(24476), + 164: uint16(24488), + 165: uint16(24493), + 166: uint16(24501), + 167: uint16(24508), + 168: uint16(34914), + 169: uint16(24417), + 170: uint16(29357), + 171: uint16(29360), + 172: uint16(29364), + 173: uint16(29367), + 174: uint16(29368), + 175: uint16(29379), + 176: uint16(29377), + 177: uint16(29390), + 178: uint16(29389), + 179: uint16(29394), + 180: uint16(29416), + 181: uint16(29423), + 182: uint16(29417), + 183: uint16(29426), + 184: uint16(29428), + 185: uint16(29431), + 186: uint16(29441), + 187: uint16(29427), + 188: uint16(29443), + 189: uint16(29434), + }, + 97: { + 0: uint16(37350), + 1: uint16(37351), + 2: uint16(37352), + 3: uint16(37353), + 4: uint16(37354), + 5: uint16(37355), + 6: uint16(37356), + 7: uint16(37357), + 8: uint16(37358), + 9: uint16(37359), + 10: uint16(37360), + 11: uint16(37361), + 12: uint16(37362), + 13: uint16(37363), + 14: uint16(37364), + 15: uint16(37365), + 16: uint16(37366), + 17: uint16(37367), + 18: uint16(37368), + 19: uint16(37369), + 20: uint16(37370), + 21: uint16(37371), + 22: uint16(37372), + 23: uint16(37373), + 24: uint16(37374), + 25: uint16(37375), + 26: uint16(37376), + 27: uint16(37377), + 28: uint16(37378), + 29: uint16(37379), + 30: uint16(37380), + 31: uint16(37381), + 32: uint16(37382), + 33: uint16(37383), + 34: uint16(37384), + 35: uint16(37385), + 36: uint16(37386), + 37: uint16(37387), + 38: uint16(37388), + 39: uint16(37389), + 40: uint16(37390), + 41: uint16(37391), + 42: uint16(37392), + 43: uint16(37393), + 44: uint16(37394), + 45: uint16(37395), + 46: uint16(37396), + 47: uint16(37397), + 48: uint16(37398), + 49: uint16(37399), + 50: uint16(37400), + 51: uint16(37401), + 52: uint16(37402), + 53: uint16(37403), + 54: uint16(37404), + 55: uint16(37405), + 56: uint16(37406), + 57: uint16(37407), + 58: uint16(37408), + 59: uint16(37409), + 60: uint16(37410), + 61: uint16(37411), + 62: uint16(37412), + 63: uint16(37413), + 64: uint16(37414), + 65: uint16(37415), + 66: uint16(37416), + 67: uint16(37417), + 68: uint16(37418), + 69: uint16(37419), + 70: uint16(37420), + 71: uint16(37421), + 72: uint16(37422), + 73: uint16(37423), + 74: uint16(37424), + 75: uint16(37425), + 76: uint16(37426), + 77: uint16(37427), + 78: uint16(37428), + 79: uint16(37429), + 80: uint16(37430), + 81: uint16(37431), + 82: uint16(37432), + 83: uint16(37433), + 84: uint16(37434), + 85: uint16(37435), + 86: uint16(37436), + 87: uint16(37437), + 88: uint16(37438), + 89: uint16(37439), + 90: uint16(37440), + 91: uint16(37441), + 92: uint16(37442), + 93: uint16(37443), + 94: uint16(37444), + 95: uint16(37445), + 96: uint16(29435), + 97: uint16(29463), + 98: uint16(29459), + 99: uint16(29473), + 100: uint16(29450), + 101: uint16(29470), + 102: uint16(29469), + 103: uint16(29461), + 104: uint16(29474), + 105: uint16(29497), + 106: uint16(29477), + 107: uint16(29484), + 108: uint16(29496), + 109: uint16(29489), + 110: uint16(29520), + 111: uint16(29517), + 112: uint16(29527), + 113: uint16(29536), + 114: uint16(29548), + 115: uint16(29551), + 116: uint16(29566), + 117: uint16(33307), + 118: uint16(22821), + 119: uint16(39143), + 120: uint16(22820), + 121: uint16(22786), + 122: uint16(39267), + 123: uint16(39271), + 124: uint16(39272), + 125: uint16(39273), + 126: uint16(39274), + 127: uint16(39275), + 128: uint16(39276), + 129: uint16(39284), + 130: uint16(39287), + 131: uint16(39293), + 132: uint16(39296), + 133: uint16(39300), + 134: uint16(39303), + 135: uint16(39306), + 136: uint16(39309), + 137: uint16(39312), + 138: uint16(39313), + 139: uint16(39315), + 140: uint16(39316), + 141: uint16(39317), + 142: uint16(24192), + 143: uint16(24209), + 144: uint16(24203), + 145: uint16(24214), + 146: uint16(24229), + 147: uint16(24224), + 148: uint16(24249), + 149: uint16(24245), + 150: uint16(24254), + 151: uint16(24243), + 152: uint16(36179), + 153: uint16(24274), + 154: uint16(24273), + 155: uint16(24283), + 156: uint16(24296), + 157: uint16(24298), + 158: uint16(33210), + 159: uint16(24516), + 160: uint16(24521), + 161: uint16(24534), + 162: uint16(24527), + 163: uint16(24579), + 164: uint16(24558), + 165: uint16(24580), + 166: uint16(24545), + 167: uint16(24548), + 168: uint16(24574), + 169: uint16(24581), + 170: uint16(24582), + 171: uint16(24554), + 172: uint16(24557), + 173: uint16(24568), + 174: uint16(24601), + 175: uint16(24629), + 176: uint16(24614), + 177: uint16(24603), + 178: uint16(24591), + 179: uint16(24589), + 180: uint16(24617), + 181: uint16(24619), + 182: uint16(24586), + 183: uint16(24639), + 184: uint16(24609), + 185: uint16(24696), + 186: uint16(24697), + 187: uint16(24699), + 188: uint16(24698), + 189: uint16(24642), + }, + 98: { + 0: uint16(37446), + 1: uint16(37447), + 2: uint16(37448), + 3: uint16(37449), + 4: uint16(37450), + 5: uint16(37451), + 6: uint16(37452), + 7: uint16(37453), + 8: uint16(37454), + 9: uint16(37455), + 10: uint16(37456), + 11: uint16(37457), + 12: uint16(37458), + 13: uint16(37459), + 14: uint16(37460), + 15: uint16(37461), + 16: uint16(37462), + 17: uint16(37463), + 18: uint16(37464), + 19: uint16(37465), + 20: uint16(37466), + 21: uint16(37467), + 22: uint16(37468), + 23: uint16(37469), + 24: uint16(37470), + 25: uint16(37471), + 26: uint16(37472), + 27: uint16(37473), + 28: uint16(37474), + 29: uint16(37475), + 30: uint16(37476), + 31: uint16(37477), + 32: uint16(37478), + 33: uint16(37479), + 34: uint16(37480), + 35: uint16(37481), + 36: uint16(37482), + 37: uint16(37483), + 38: uint16(37484), + 39: uint16(37485), + 40: uint16(37486), + 41: uint16(37487), + 42: uint16(37488), + 43: uint16(37489), + 44: uint16(37490), + 45: uint16(37491), + 46: uint16(37493), + 47: uint16(37494), + 48: uint16(37495), + 49: uint16(37496), + 50: uint16(37497), + 51: uint16(37498), + 52: uint16(37499), + 53: uint16(37500), + 54: uint16(37501), + 55: uint16(37502), + 56: uint16(37503), + 57: uint16(37504), + 58: uint16(37505), + 59: uint16(37506), + 60: uint16(37507), + 61: uint16(37508), + 62: uint16(37509), + 63: uint16(37510), + 64: uint16(37511), + 65: uint16(37512), + 66: uint16(37513), + 67: uint16(37514), + 68: uint16(37515), + 69: uint16(37516), + 70: uint16(37517), + 71: uint16(37519), + 72: uint16(37520), + 73: uint16(37521), + 74: uint16(37522), + 75: uint16(37523), + 76: uint16(37524), + 77: uint16(37525), + 78: uint16(37526), + 79: uint16(37527), + 80: uint16(37528), + 81: uint16(37529), + 82: uint16(37530), + 83: uint16(37531), + 84: uint16(37532), + 85: uint16(37533), + 86: uint16(37534), + 87: uint16(37535), + 88: uint16(37536), + 89: uint16(37537), + 90: uint16(37538), + 91: uint16(37539), + 92: uint16(37540), + 93: uint16(37541), + 94: uint16(37542), + 95: uint16(37543), + 96: uint16(24682), + 97: uint16(24701), + 98: uint16(24726), + 99: uint16(24730), + 100: uint16(24749), + 101: uint16(24733), + 102: uint16(24707), + 103: uint16(24722), + 104: uint16(24716), + 105: uint16(24731), + 106: uint16(24812), + 107: uint16(24763), + 108: uint16(24753), + 109: uint16(24797), + 110: uint16(24792), + 111: uint16(24774), + 112: uint16(24794), + 113: uint16(24756), + 114: uint16(24864), + 115: uint16(24870), + 116: uint16(24853), + 117: uint16(24867), + 118: uint16(24820), + 119: uint16(24832), + 120: uint16(24846), + 121: uint16(24875), + 122: uint16(24906), + 123: uint16(24949), + 124: uint16(25004), + 125: uint16(24980), + 126: uint16(24999), + 127: uint16(25015), + 128: uint16(25044), + 129: uint16(25077), + 130: uint16(24541), + 131: uint16(38579), + 132: uint16(38377), + 133: uint16(38379), + 134: uint16(38385), + 135: uint16(38387), + 136: uint16(38389), + 137: uint16(38390), + 138: uint16(38396), + 139: uint16(38398), + 140: uint16(38403), + 141: uint16(38404), + 142: uint16(38406), + 143: uint16(38408), + 144: uint16(38410), + 145: uint16(38411), + 146: uint16(38412), + 147: uint16(38413), + 148: uint16(38415), + 149: uint16(38418), + 150: uint16(38421), + 151: uint16(38422), + 152: uint16(38423), + 153: uint16(38425), + 154: uint16(38426), + 155: uint16(20012), + 156: uint16(29247), + 157: uint16(25109), + 158: uint16(27701), + 159: uint16(27732), + 160: uint16(27740), + 161: uint16(27722), + 162: uint16(27811), + 163: uint16(27781), + 164: uint16(27792), + 165: uint16(27796), + 166: uint16(27788), + 167: uint16(27752), + 168: uint16(27753), + 169: uint16(27764), + 170: uint16(27766), + 171: uint16(27782), + 172: uint16(27817), + 173: uint16(27856), + 174: uint16(27860), + 175: uint16(27821), + 176: uint16(27895), + 177: uint16(27896), + 178: uint16(27889), + 179: uint16(27863), + 180: uint16(27826), + 181: uint16(27872), + 182: uint16(27862), + 183: uint16(27898), + 184: uint16(27883), + 185: uint16(27886), + 186: uint16(27825), + 187: uint16(27859), + 188: uint16(27887), + 189: uint16(27902), + }, + 99: { + 0: uint16(37544), + 1: uint16(37545), + 2: uint16(37546), + 3: uint16(37547), + 4: uint16(37548), + 5: uint16(37549), + 6: uint16(37551), + 7: uint16(37552), + 8: uint16(37553), + 9: uint16(37554), + 10: uint16(37555), + 11: uint16(37556), + 12: uint16(37557), + 13: uint16(37558), + 14: uint16(37559), + 15: uint16(37560), + 16: uint16(37561), + 17: uint16(37562), + 18: uint16(37563), + 19: uint16(37564), + 20: uint16(37565), + 21: uint16(37566), + 22: uint16(37567), + 23: uint16(37568), + 24: uint16(37569), + 25: uint16(37570), + 26: uint16(37571), + 27: uint16(37572), + 28: uint16(37573), + 29: uint16(37574), + 30: uint16(37575), + 31: uint16(37577), + 32: uint16(37578), + 33: uint16(37579), + 34: uint16(37580), + 35: uint16(37581), + 36: uint16(37582), + 37: uint16(37583), + 38: uint16(37584), + 39: uint16(37585), + 40: uint16(37586), + 41: uint16(37587), + 42: uint16(37588), + 43: uint16(37589), + 44: uint16(37590), + 45: uint16(37591), + 46: uint16(37592), + 47: uint16(37593), + 48: uint16(37594), + 49: uint16(37595), + 50: uint16(37596), + 51: uint16(37597), + 52: uint16(37598), + 53: uint16(37599), + 54: uint16(37600), + 55: uint16(37601), + 56: uint16(37602), + 57: uint16(37603), + 58: uint16(37604), + 59: uint16(37605), + 60: uint16(37606), + 61: uint16(37607), + 62: uint16(37608), + 63: uint16(37609), + 64: uint16(37610), + 65: uint16(37611), + 66: uint16(37612), + 67: uint16(37613), + 68: uint16(37614), + 69: uint16(37615), + 70: uint16(37616), + 71: uint16(37617), + 72: uint16(37618), + 73: uint16(37619), + 74: uint16(37620), + 75: uint16(37621), + 76: uint16(37622), + 77: uint16(37623), + 78: uint16(37624), + 79: uint16(37625), + 80: uint16(37626), + 81: uint16(37627), + 82: uint16(37628), + 83: uint16(37629), + 84: uint16(37630), + 85: uint16(37631), + 86: uint16(37632), + 87: uint16(37633), + 88: uint16(37634), + 89: uint16(37635), + 90: uint16(37636), + 91: uint16(37637), + 92: uint16(37638), + 93: uint16(37639), + 94: uint16(37640), + 95: uint16(37641), + 96: uint16(27961), + 97: uint16(27943), + 98: uint16(27916), + 99: uint16(27971), + 100: uint16(27976), + 101: uint16(27911), + 102: uint16(27908), + 103: uint16(27929), + 104: uint16(27918), + 105: uint16(27947), + 106: uint16(27981), + 107: uint16(27950), + 108: uint16(27957), + 109: uint16(27930), + 110: uint16(27983), + 111: uint16(27986), + 112: uint16(27988), + 113: uint16(27955), + 114: uint16(28049), + 115: uint16(28015), + 116: uint16(28062), + 117: uint16(28064), + 118: uint16(27998), + 119: uint16(28051), + 120: uint16(28052), + 121: uint16(27996), + 122: uint16(28000), + 123: uint16(28028), + 124: uint16(28003), + 125: uint16(28186), + 126: uint16(28103), + 127: uint16(28101), + 128: uint16(28126), + 129: uint16(28174), + 130: uint16(28095), + 131: uint16(28128), + 132: uint16(28177), + 133: uint16(28134), + 134: uint16(28125), + 135: uint16(28121), + 136: uint16(28182), + 137: uint16(28075), + 138: uint16(28172), + 139: uint16(28078), + 140: uint16(28203), + 141: uint16(28270), + 142: uint16(28238), + 143: uint16(28267), + 144: uint16(28338), + 145: uint16(28255), + 146: uint16(28294), + 147: uint16(28243), + 148: uint16(28244), + 149: uint16(28210), + 150: uint16(28197), + 151: uint16(28228), + 152: uint16(28383), + 153: uint16(28337), + 154: uint16(28312), + 155: uint16(28384), + 156: uint16(28461), + 157: uint16(28386), + 158: uint16(28325), + 159: uint16(28327), + 160: uint16(28349), + 161: uint16(28347), + 162: uint16(28343), + 163: uint16(28375), + 164: uint16(28340), + 165: uint16(28367), + 166: uint16(28303), + 167: uint16(28354), + 168: uint16(28319), + 169: uint16(28514), + 170: uint16(28486), + 171: uint16(28487), + 172: uint16(28452), + 173: uint16(28437), + 174: uint16(28409), + 175: uint16(28463), + 176: uint16(28470), + 177: uint16(28491), + 178: uint16(28532), + 179: uint16(28458), + 180: uint16(28425), + 181: uint16(28457), + 182: uint16(28553), + 183: uint16(28557), + 184: uint16(28556), + 185: uint16(28536), + 186: uint16(28530), + 187: uint16(28540), + 188: uint16(28538), + 189: uint16(28625), + }, + 100: { + 0: uint16(37642), + 1: uint16(37643), + 2: uint16(37644), + 3: uint16(37645), + 4: uint16(37646), + 5: uint16(37647), + 6: uint16(37648), + 7: uint16(37649), + 8: uint16(37650), + 9: uint16(37651), + 10: uint16(37652), + 11: uint16(37653), + 12: uint16(37654), + 13: uint16(37655), + 14: uint16(37656), + 15: uint16(37657), + 16: uint16(37658), + 17: uint16(37659), + 18: uint16(37660), + 19: uint16(37661), + 20: uint16(37662), + 21: uint16(37663), + 22: uint16(37664), + 23: uint16(37665), + 24: uint16(37666), + 25: uint16(37667), + 26: uint16(37668), + 27: uint16(37669), + 28: uint16(37670), + 29: uint16(37671), + 30: uint16(37672), + 31: uint16(37673), + 32: uint16(37674), + 33: uint16(37675), + 34: uint16(37676), + 35: uint16(37677), + 36: uint16(37678), + 37: uint16(37679), + 38: uint16(37680), + 39: uint16(37681), + 40: uint16(37682), + 41: uint16(37683), + 42: uint16(37684), + 43: uint16(37685), + 44: uint16(37686), + 45: uint16(37687), + 46: uint16(37688), + 47: uint16(37689), + 48: uint16(37690), + 49: uint16(37691), + 50: uint16(37692), + 51: uint16(37693), + 52: uint16(37695), + 53: uint16(37696), + 54: uint16(37697), + 55: uint16(37698), + 56: uint16(37699), + 57: uint16(37700), + 58: uint16(37701), + 59: uint16(37702), + 60: uint16(37703), + 61: uint16(37704), + 62: uint16(37705), + 63: uint16(37706), + 64: uint16(37707), + 65: uint16(37708), + 66: uint16(37709), + 67: uint16(37710), + 68: uint16(37711), + 69: uint16(37712), + 70: uint16(37713), + 71: uint16(37714), + 72: uint16(37715), + 73: uint16(37716), + 74: uint16(37717), + 75: uint16(37718), + 76: uint16(37719), + 77: uint16(37720), + 78: uint16(37721), + 79: uint16(37722), + 80: uint16(37723), + 81: uint16(37724), + 82: uint16(37725), + 83: uint16(37726), + 84: uint16(37727), + 85: uint16(37728), + 86: uint16(37729), + 87: uint16(37730), + 88: uint16(37731), + 89: uint16(37732), + 90: uint16(37733), + 91: uint16(37734), + 92: uint16(37735), + 93: uint16(37736), + 94: uint16(37737), + 95: uint16(37739), + 96: uint16(28617), + 97: uint16(28583), + 98: uint16(28601), + 99: uint16(28598), + 100: uint16(28610), + 101: uint16(28641), + 102: uint16(28654), + 103: uint16(28638), + 104: uint16(28640), + 105: uint16(28655), + 106: uint16(28698), + 107: uint16(28707), + 108: uint16(28699), + 109: uint16(28729), + 110: uint16(28725), + 111: uint16(28751), + 112: uint16(28766), + 113: uint16(23424), + 114: uint16(23428), + 115: uint16(23445), + 116: uint16(23443), + 117: uint16(23461), + 118: uint16(23480), + 119: uint16(29999), + 120: uint16(39582), + 121: uint16(25652), + 122: uint16(23524), + 123: uint16(23534), + 124: uint16(35120), + 125: uint16(23536), + 126: uint16(36423), + 127: uint16(35591), + 128: uint16(36790), + 129: uint16(36819), + 130: uint16(36821), + 131: uint16(36837), + 132: uint16(36846), + 133: uint16(36836), + 134: uint16(36841), + 135: uint16(36838), + 136: uint16(36851), + 137: uint16(36840), + 138: uint16(36869), + 139: uint16(36868), + 140: uint16(36875), + 141: uint16(36902), + 142: uint16(36881), + 143: uint16(36877), + 144: uint16(36886), + 145: uint16(36897), + 146: uint16(36917), + 147: uint16(36918), + 148: uint16(36909), + 149: uint16(36911), + 150: uint16(36932), + 151: uint16(36945), + 152: uint16(36946), + 153: uint16(36944), + 154: uint16(36968), + 155: uint16(36952), + 156: uint16(36962), + 157: uint16(36955), + 158: uint16(26297), + 159: uint16(36980), + 160: uint16(36989), + 161: uint16(36994), + 162: uint16(37000), + 163: uint16(36995), + 164: uint16(37003), + 165: uint16(24400), + 166: uint16(24407), + 167: uint16(24406), + 168: uint16(24408), + 169: uint16(23611), + 170: uint16(21675), + 171: uint16(23632), + 172: uint16(23641), + 173: uint16(23409), + 174: uint16(23651), + 175: uint16(23654), + 176: uint16(32700), + 177: uint16(24362), + 178: uint16(24361), + 179: uint16(24365), + 180: uint16(33396), + 181: uint16(24380), + 182: uint16(39739), + 183: uint16(23662), + 184: uint16(22913), + 185: uint16(22915), + 186: uint16(22925), + 187: uint16(22953), + 188: uint16(22954), + 189: uint16(22947), + }, + 101: { + 0: uint16(37740), + 1: uint16(37741), + 2: uint16(37742), + 3: uint16(37743), + 4: uint16(37744), + 5: uint16(37745), + 6: uint16(37746), + 7: uint16(37747), + 8: uint16(37748), + 9: uint16(37749), + 10: uint16(37750), + 11: uint16(37751), + 12: uint16(37752), + 13: uint16(37753), + 14: uint16(37754), + 15: uint16(37755), + 16: uint16(37756), + 17: uint16(37757), + 18: uint16(37758), + 19: uint16(37759), + 20: uint16(37760), + 21: uint16(37761), + 22: uint16(37762), + 23: uint16(37763), + 24: uint16(37764), + 25: uint16(37765), + 26: uint16(37766), + 27: uint16(37767), + 28: uint16(37768), + 29: uint16(37769), + 30: uint16(37770), + 31: uint16(37771), + 32: uint16(37772), + 33: uint16(37773), + 34: uint16(37774), + 35: uint16(37776), + 36: uint16(37777), + 37: uint16(37778), + 38: uint16(37779), + 39: uint16(37780), + 40: uint16(37781), + 41: uint16(37782), + 42: uint16(37783), + 43: uint16(37784), + 44: uint16(37785), + 45: uint16(37786), + 46: uint16(37787), + 47: uint16(37788), + 48: uint16(37789), + 49: uint16(37790), + 50: uint16(37791), + 51: uint16(37792), + 52: uint16(37793), + 53: uint16(37794), + 54: uint16(37795), + 55: uint16(37796), + 56: uint16(37797), + 57: uint16(37798), + 58: uint16(37799), + 59: uint16(37800), + 60: uint16(37801), + 61: uint16(37802), + 62: uint16(37803), + 63: uint16(37804), + 64: uint16(37805), + 65: uint16(37806), + 66: uint16(37807), + 67: uint16(37808), + 68: uint16(37809), + 69: uint16(37810), + 70: uint16(37811), + 71: uint16(37812), + 72: uint16(37813), + 73: uint16(37814), + 74: uint16(37815), + 75: uint16(37816), + 76: uint16(37817), + 77: uint16(37818), + 78: uint16(37819), + 79: uint16(37820), + 80: uint16(37821), + 81: uint16(37822), + 82: uint16(37823), + 83: uint16(37824), + 84: uint16(37825), + 85: uint16(37826), + 86: uint16(37827), + 87: uint16(37828), + 88: uint16(37829), + 89: uint16(37830), + 90: uint16(37831), + 91: uint16(37832), + 92: uint16(37833), + 93: uint16(37835), + 94: uint16(37836), + 95: uint16(37837), + 96: uint16(22935), + 97: uint16(22986), + 98: uint16(22955), + 99: uint16(22942), + 100: uint16(22948), + 101: uint16(22994), + 102: uint16(22962), + 103: uint16(22959), + 104: uint16(22999), + 105: uint16(22974), + 106: uint16(23045), + 107: uint16(23046), + 108: uint16(23005), + 109: uint16(23048), + 110: uint16(23011), + 111: uint16(23000), + 112: uint16(23033), + 113: uint16(23052), + 114: uint16(23049), + 115: uint16(23090), + 116: uint16(23092), + 117: uint16(23057), + 118: uint16(23075), + 119: uint16(23059), + 120: uint16(23104), + 121: uint16(23143), + 122: uint16(23114), + 123: uint16(23125), + 124: uint16(23100), + 125: uint16(23138), + 126: uint16(23157), + 127: uint16(33004), + 128: uint16(23210), + 129: uint16(23195), + 130: uint16(23159), + 131: uint16(23162), + 132: uint16(23230), + 133: uint16(23275), + 134: uint16(23218), + 135: uint16(23250), + 136: uint16(23252), + 137: uint16(23224), + 138: uint16(23264), + 139: uint16(23267), + 140: uint16(23281), + 141: uint16(23254), + 142: uint16(23270), + 143: uint16(23256), + 144: uint16(23260), + 145: uint16(23305), + 146: uint16(23319), + 147: uint16(23318), + 148: uint16(23346), + 149: uint16(23351), + 150: uint16(23360), + 151: uint16(23573), + 152: uint16(23580), + 153: uint16(23386), + 154: uint16(23397), + 155: uint16(23411), + 156: uint16(23377), + 157: uint16(23379), + 158: uint16(23394), + 159: uint16(39541), + 160: uint16(39543), + 161: uint16(39544), + 162: uint16(39546), + 163: uint16(39551), + 164: uint16(39549), + 165: uint16(39552), + 166: uint16(39553), + 167: uint16(39557), + 168: uint16(39560), + 169: uint16(39562), + 170: uint16(39568), + 171: uint16(39570), + 172: uint16(39571), + 173: uint16(39574), + 174: uint16(39576), + 175: uint16(39579), + 176: uint16(39580), + 177: uint16(39581), + 178: uint16(39583), + 179: uint16(39584), + 180: uint16(39586), + 181: uint16(39587), + 182: uint16(39589), + 183: uint16(39591), + 184: uint16(32415), + 185: uint16(32417), + 186: uint16(32419), + 187: uint16(32421), + 188: uint16(32424), + 189: uint16(32425), + }, + 102: { + 0: uint16(37838), + 1: uint16(37839), + 2: uint16(37840), + 3: uint16(37841), + 4: uint16(37842), + 5: uint16(37843), + 6: uint16(37844), + 7: uint16(37845), + 8: uint16(37847), + 9: uint16(37848), + 10: uint16(37849), + 11: uint16(37850), + 12: uint16(37851), + 13: uint16(37852), + 14: uint16(37853), + 15: uint16(37854), + 16: uint16(37855), + 17: uint16(37856), + 18: uint16(37857), + 19: uint16(37858), + 20: uint16(37859), + 21: uint16(37860), + 22: uint16(37861), + 23: uint16(37862), + 24: uint16(37863), + 25: uint16(37864), + 26: uint16(37865), + 27: uint16(37866), + 28: uint16(37867), + 29: uint16(37868), + 30: uint16(37869), + 31: uint16(37870), + 32: uint16(37871), + 33: uint16(37872), + 34: uint16(37873), + 35: uint16(37874), + 36: uint16(37875), + 37: uint16(37876), + 38: uint16(37877), + 39: uint16(37878), + 40: uint16(37879), + 41: uint16(37880), + 42: uint16(37881), + 43: uint16(37882), + 44: uint16(37883), + 45: uint16(37884), + 46: uint16(37885), + 47: uint16(37886), + 48: uint16(37887), + 49: uint16(37888), + 50: uint16(37889), + 51: uint16(37890), + 52: uint16(37891), + 53: uint16(37892), + 54: uint16(37893), + 55: uint16(37894), + 56: uint16(37895), + 57: uint16(37896), + 58: uint16(37897), + 59: uint16(37898), + 60: uint16(37899), + 61: uint16(37900), + 62: uint16(37901), + 63: uint16(37902), + 64: uint16(37903), + 65: uint16(37904), + 66: uint16(37905), + 67: uint16(37906), + 68: uint16(37907), + 69: uint16(37908), + 70: uint16(37909), + 71: uint16(37910), + 72: uint16(37911), + 73: uint16(37912), + 74: uint16(37913), + 75: uint16(37914), + 76: uint16(37915), + 77: uint16(37916), + 78: uint16(37917), + 79: uint16(37918), + 80: uint16(37919), + 81: uint16(37920), + 82: uint16(37921), + 83: uint16(37922), + 84: uint16(37923), + 85: uint16(37924), + 86: uint16(37925), + 87: uint16(37926), + 88: uint16(37927), + 89: uint16(37928), + 90: uint16(37929), + 91: uint16(37930), + 92: uint16(37931), + 93: uint16(37932), + 94: uint16(37933), + 95: uint16(37934), + 96: uint16(32429), + 97: uint16(32432), + 98: uint16(32446), + 99: uint16(32448), + 100: uint16(32449), + 101: uint16(32450), + 102: uint16(32457), + 103: uint16(32459), + 104: uint16(32460), + 105: uint16(32464), + 106: uint16(32468), + 107: uint16(32471), + 108: uint16(32475), + 109: uint16(32480), + 110: uint16(32481), + 111: uint16(32488), + 112: uint16(32491), + 113: uint16(32494), + 114: uint16(32495), + 115: uint16(32497), + 116: uint16(32498), + 117: uint16(32525), + 118: uint16(32502), + 119: uint16(32506), + 120: uint16(32507), + 121: uint16(32510), + 122: uint16(32513), + 123: uint16(32514), + 124: uint16(32515), + 125: uint16(32519), + 126: uint16(32520), + 127: uint16(32523), + 128: uint16(32524), + 129: uint16(32527), + 130: uint16(32529), + 131: uint16(32530), + 132: uint16(32535), + 133: uint16(32537), + 134: uint16(32540), + 135: uint16(32539), + 136: uint16(32543), + 137: uint16(32545), + 138: uint16(32546), + 139: uint16(32547), + 140: uint16(32548), + 141: uint16(32549), + 142: uint16(32550), + 143: uint16(32551), + 144: uint16(32554), + 145: uint16(32555), + 146: uint16(32556), + 147: uint16(32557), + 148: uint16(32559), + 149: uint16(32560), + 150: uint16(32561), + 151: uint16(32562), + 152: uint16(32563), + 153: uint16(32565), + 154: uint16(24186), + 155: uint16(30079), + 156: uint16(24027), + 157: uint16(30014), + 158: uint16(37013), + 159: uint16(29582), + 160: uint16(29585), + 161: uint16(29614), + 162: uint16(29602), + 163: uint16(29599), + 164: uint16(29647), + 165: uint16(29634), + 166: uint16(29649), + 167: uint16(29623), + 168: uint16(29619), + 169: uint16(29632), + 170: uint16(29641), + 171: uint16(29640), + 172: uint16(29669), + 173: uint16(29657), + 174: uint16(39036), + 175: uint16(29706), + 176: uint16(29673), + 177: uint16(29671), + 178: uint16(29662), + 179: uint16(29626), + 180: uint16(29682), + 181: uint16(29711), + 182: uint16(29738), + 183: uint16(29787), + 184: uint16(29734), + 185: uint16(29733), + 186: uint16(29736), + 187: uint16(29744), + 188: uint16(29742), + 189: uint16(29740), + }, + 103: { + 0: uint16(37935), + 1: uint16(37936), + 2: uint16(37937), + 3: uint16(37938), + 4: uint16(37939), + 5: uint16(37940), + 6: uint16(37941), + 7: uint16(37942), + 8: uint16(37943), + 9: uint16(37944), + 10: uint16(37945), + 11: uint16(37946), + 12: uint16(37947), + 13: uint16(37948), + 14: uint16(37949), + 15: uint16(37951), + 16: uint16(37952), + 17: uint16(37953), + 18: uint16(37954), + 19: uint16(37955), + 20: uint16(37956), + 21: uint16(37957), + 22: uint16(37958), + 23: uint16(37959), + 24: uint16(37960), + 25: uint16(37961), + 26: uint16(37962), + 27: uint16(37963), + 28: uint16(37964), + 29: uint16(37965), + 30: uint16(37966), + 31: uint16(37967), + 32: uint16(37968), + 33: uint16(37969), + 34: uint16(37970), + 35: uint16(37971), + 36: uint16(37972), + 37: uint16(37973), + 38: uint16(37974), + 39: uint16(37975), + 40: uint16(37976), + 41: uint16(37977), + 42: uint16(37978), + 43: uint16(37979), + 44: uint16(37980), + 45: uint16(37981), + 46: uint16(37982), + 47: uint16(37983), + 48: uint16(37984), + 49: uint16(37985), + 50: uint16(37986), + 51: uint16(37987), + 52: uint16(37988), + 53: uint16(37989), + 54: uint16(37990), + 55: uint16(37991), + 56: uint16(37992), + 57: uint16(37993), + 58: uint16(37994), + 59: uint16(37996), + 60: uint16(37997), + 61: uint16(37998), + 62: uint16(37999), + 63: uint16(38000), + 64: uint16(38001), + 65: uint16(38002), + 66: uint16(38003), + 67: uint16(38004), + 68: uint16(38005), + 69: uint16(38006), + 70: uint16(38007), + 71: uint16(38008), + 72: uint16(38009), + 73: uint16(38010), + 74: uint16(38011), + 75: uint16(38012), + 76: uint16(38013), + 77: uint16(38014), + 78: uint16(38015), + 79: uint16(38016), + 80: uint16(38017), + 81: uint16(38018), + 82: uint16(38019), + 83: uint16(38020), + 84: uint16(38033), + 85: uint16(38038), + 86: uint16(38040), + 87: uint16(38087), + 88: uint16(38095), + 89: uint16(38099), + 90: uint16(38100), + 91: uint16(38106), + 92: uint16(38118), + 93: uint16(38139), + 94: uint16(38172), + 95: uint16(38176), + 96: uint16(29723), + 97: uint16(29722), + 98: uint16(29761), + 99: uint16(29788), + 100: uint16(29783), + 101: uint16(29781), + 102: uint16(29785), + 103: uint16(29815), + 104: uint16(29805), + 105: uint16(29822), + 106: uint16(29852), + 107: uint16(29838), + 108: uint16(29824), + 109: uint16(29825), + 110: uint16(29831), + 111: uint16(29835), + 112: uint16(29854), + 113: uint16(29864), + 114: uint16(29865), + 115: uint16(29840), + 116: uint16(29863), + 117: uint16(29906), + 118: uint16(29882), + 119: uint16(38890), + 120: uint16(38891), + 121: uint16(38892), + 122: uint16(26444), + 123: uint16(26451), + 124: uint16(26462), + 125: uint16(26440), + 126: uint16(26473), + 127: uint16(26533), + 128: uint16(26503), + 129: uint16(26474), + 130: uint16(26483), + 131: uint16(26520), + 132: uint16(26535), + 133: uint16(26485), + 134: uint16(26536), + 135: uint16(26526), + 136: uint16(26541), + 137: uint16(26507), + 138: uint16(26487), + 139: uint16(26492), + 140: uint16(26608), + 141: uint16(26633), + 142: uint16(26584), + 143: uint16(26634), + 144: uint16(26601), + 145: uint16(26544), + 146: uint16(26636), + 147: uint16(26585), + 148: uint16(26549), + 149: uint16(26586), + 150: uint16(26547), + 151: uint16(26589), + 152: uint16(26624), + 153: uint16(26563), + 154: uint16(26552), + 155: uint16(26594), + 156: uint16(26638), + 157: uint16(26561), + 158: uint16(26621), + 159: uint16(26674), + 160: uint16(26675), + 161: uint16(26720), + 162: uint16(26721), + 163: uint16(26702), + 164: uint16(26722), + 165: uint16(26692), + 166: uint16(26724), + 167: uint16(26755), + 168: uint16(26653), + 169: uint16(26709), + 170: uint16(26726), + 171: uint16(26689), + 172: uint16(26727), + 173: uint16(26688), + 174: uint16(26686), + 175: uint16(26698), + 176: uint16(26697), + 177: uint16(26665), + 178: uint16(26805), + 179: uint16(26767), + 180: uint16(26740), + 181: uint16(26743), + 182: uint16(26771), + 183: uint16(26731), + 184: uint16(26818), + 185: uint16(26990), + 186: uint16(26876), + 187: uint16(26911), + 188: uint16(26912), + 189: uint16(26873), + }, + 104: { + 0: uint16(38183), + 1: uint16(38195), + 2: uint16(38205), + 3: uint16(38211), + 4: uint16(38216), + 5: uint16(38219), + 6: uint16(38229), + 7: uint16(38234), + 8: uint16(38240), + 9: uint16(38254), + 10: uint16(38260), + 11: uint16(38261), + 12: uint16(38263), + 13: uint16(38264), + 14: uint16(38265), + 15: uint16(38266), + 16: uint16(38267), + 17: uint16(38268), + 18: uint16(38269), + 19: uint16(38270), + 20: uint16(38272), + 21: uint16(38273), + 22: uint16(38274), + 23: uint16(38275), + 24: uint16(38276), + 25: uint16(38277), + 26: uint16(38278), + 27: uint16(38279), + 28: uint16(38280), + 29: uint16(38281), + 30: uint16(38282), + 31: uint16(38283), + 32: uint16(38284), + 33: uint16(38285), + 34: uint16(38286), + 35: uint16(38287), + 36: uint16(38288), + 37: uint16(38289), + 38: uint16(38290), + 39: uint16(38291), + 40: uint16(38292), + 41: uint16(38293), + 42: uint16(38294), + 43: uint16(38295), + 44: uint16(38296), + 45: uint16(38297), + 46: uint16(38298), + 47: uint16(38299), + 48: uint16(38300), + 49: uint16(38301), + 50: uint16(38302), + 51: uint16(38303), + 52: uint16(38304), + 53: uint16(38305), + 54: uint16(38306), + 55: uint16(38307), + 56: uint16(38308), + 57: uint16(38309), + 58: uint16(38310), + 59: uint16(38311), + 60: uint16(38312), + 61: uint16(38313), + 62: uint16(38314), + 63: uint16(38315), + 64: uint16(38316), + 65: uint16(38317), + 66: uint16(38318), + 67: uint16(38319), + 68: uint16(38320), + 69: uint16(38321), + 70: uint16(38322), + 71: uint16(38323), + 72: uint16(38324), + 73: uint16(38325), + 74: uint16(38326), + 75: uint16(38327), + 76: uint16(38328), + 77: uint16(38329), + 78: uint16(38330), + 79: uint16(38331), + 80: uint16(38332), + 81: uint16(38333), + 82: uint16(38334), + 83: uint16(38335), + 84: uint16(38336), + 85: uint16(38337), + 86: uint16(38338), + 87: uint16(38339), + 88: uint16(38340), + 89: uint16(38341), + 90: uint16(38342), + 91: uint16(38343), + 92: uint16(38344), + 93: uint16(38345), + 94: uint16(38346), + 95: uint16(38347), + 96: uint16(26916), + 97: uint16(26864), + 98: uint16(26891), + 99: uint16(26881), + 100: uint16(26967), + 101: uint16(26851), + 102: uint16(26896), + 103: uint16(26993), + 104: uint16(26937), + 105: uint16(26976), + 106: uint16(26946), + 107: uint16(26973), + 108: uint16(27012), + 109: uint16(26987), + 110: uint16(27008), + 111: uint16(27032), + 112: uint16(27000), + 113: uint16(26932), + 114: uint16(27084), + 115: uint16(27015), + 116: uint16(27016), + 117: uint16(27086), + 118: uint16(27017), + 119: uint16(26982), + 120: uint16(26979), + 121: uint16(27001), + 122: uint16(27035), + 123: uint16(27047), + 124: uint16(27067), + 125: uint16(27051), + 126: uint16(27053), + 127: uint16(27092), + 128: uint16(27057), + 129: uint16(27073), + 130: uint16(27082), + 131: uint16(27103), + 132: uint16(27029), + 133: uint16(27104), + 134: uint16(27021), + 135: uint16(27135), + 136: uint16(27183), + 137: uint16(27117), + 138: uint16(27159), + 139: uint16(27160), + 140: uint16(27237), + 141: uint16(27122), + 142: uint16(27204), + 143: uint16(27198), + 144: uint16(27296), + 145: uint16(27216), + 146: uint16(27227), + 147: uint16(27189), + 148: uint16(27278), + 149: uint16(27257), + 150: uint16(27197), + 151: uint16(27176), + 152: uint16(27224), + 153: uint16(27260), + 154: uint16(27281), + 155: uint16(27280), + 156: uint16(27305), + 157: uint16(27287), + 158: uint16(27307), + 159: uint16(29495), + 160: uint16(29522), + 161: uint16(27521), + 162: uint16(27522), + 163: uint16(27527), + 164: uint16(27524), + 165: uint16(27538), + 166: uint16(27539), + 167: uint16(27533), + 168: uint16(27546), + 169: uint16(27547), + 170: uint16(27553), + 171: uint16(27562), + 172: uint16(36715), + 173: uint16(36717), + 174: uint16(36721), + 175: uint16(36722), + 176: uint16(36723), + 177: uint16(36725), + 178: uint16(36726), + 179: uint16(36728), + 180: uint16(36727), + 181: uint16(36729), + 182: uint16(36730), + 183: uint16(36732), + 184: uint16(36734), + 185: uint16(36737), + 186: uint16(36738), + 187: uint16(36740), + 188: uint16(36743), + 189: uint16(36747), + }, + 105: { + 0: uint16(38348), + 1: uint16(38349), + 2: uint16(38350), + 3: uint16(38351), + 4: uint16(38352), + 5: uint16(38353), + 6: uint16(38354), + 7: uint16(38355), + 8: uint16(38356), + 9: uint16(38357), + 10: uint16(38358), + 11: uint16(38359), + 12: uint16(38360), + 13: uint16(38361), + 14: uint16(38362), + 15: uint16(38363), + 16: uint16(38364), + 17: uint16(38365), + 18: uint16(38366), + 19: uint16(38367), + 20: uint16(38368), + 21: uint16(38369), + 22: uint16(38370), + 23: uint16(38371), + 24: uint16(38372), + 25: uint16(38373), + 26: uint16(38374), + 27: uint16(38375), + 28: uint16(38380), + 29: uint16(38399), + 30: uint16(38407), + 31: uint16(38419), + 32: uint16(38424), + 33: uint16(38427), + 34: uint16(38430), + 35: uint16(38432), + 36: uint16(38435), + 37: uint16(38436), + 38: uint16(38437), + 39: uint16(38438), + 40: uint16(38439), + 41: uint16(38440), + 42: uint16(38441), + 43: uint16(38443), + 44: uint16(38444), + 45: uint16(38445), + 46: uint16(38447), + 47: uint16(38448), + 48: uint16(38455), + 49: uint16(38456), + 50: uint16(38457), + 51: uint16(38458), + 52: uint16(38462), + 53: uint16(38465), + 54: uint16(38467), + 55: uint16(38474), + 56: uint16(38478), + 57: uint16(38479), + 58: uint16(38481), + 59: uint16(38482), + 60: uint16(38483), + 61: uint16(38486), + 62: uint16(38487), + 63: uint16(38488), + 64: uint16(38489), + 65: uint16(38490), + 66: uint16(38492), + 67: uint16(38493), + 68: uint16(38494), + 69: uint16(38496), + 70: uint16(38499), + 71: uint16(38501), + 72: uint16(38502), + 73: uint16(38507), + 74: uint16(38509), + 75: uint16(38510), + 76: uint16(38511), + 77: uint16(38512), + 78: uint16(38513), + 79: uint16(38515), + 80: uint16(38520), + 81: uint16(38521), + 82: uint16(38522), + 83: uint16(38523), + 84: uint16(38524), + 85: uint16(38525), + 86: uint16(38526), + 87: uint16(38527), + 88: uint16(38528), + 89: uint16(38529), + 90: uint16(38530), + 91: uint16(38531), + 92: uint16(38532), + 93: uint16(38535), + 94: uint16(38537), + 95: uint16(38538), + 96: uint16(36749), + 97: uint16(36750), + 98: uint16(36751), + 99: uint16(36760), + 100: uint16(36762), + 101: uint16(36558), + 102: uint16(25099), + 103: uint16(25111), + 104: uint16(25115), + 105: uint16(25119), + 106: uint16(25122), + 107: uint16(25121), + 108: uint16(25125), + 109: uint16(25124), + 110: uint16(25132), + 111: uint16(33255), + 112: uint16(29935), + 113: uint16(29940), + 114: uint16(29951), + 115: uint16(29967), + 116: uint16(29969), + 117: uint16(29971), + 118: uint16(25908), + 119: uint16(26094), + 120: uint16(26095), + 121: uint16(26096), + 122: uint16(26122), + 123: uint16(26137), + 124: uint16(26482), + 125: uint16(26115), + 126: uint16(26133), + 127: uint16(26112), + 128: uint16(28805), + 129: uint16(26359), + 130: uint16(26141), + 131: uint16(26164), + 132: uint16(26161), + 133: uint16(26166), + 134: uint16(26165), + 135: uint16(32774), + 136: uint16(26207), + 137: uint16(26196), + 138: uint16(26177), + 139: uint16(26191), + 140: uint16(26198), + 141: uint16(26209), + 142: uint16(26199), + 143: uint16(26231), + 144: uint16(26244), + 145: uint16(26252), + 146: uint16(26279), + 147: uint16(26269), + 148: uint16(26302), + 149: uint16(26331), + 150: uint16(26332), + 151: uint16(26342), + 152: uint16(26345), + 153: uint16(36146), + 154: uint16(36147), + 155: uint16(36150), + 156: uint16(36155), + 157: uint16(36157), + 158: uint16(36160), + 159: uint16(36165), + 160: uint16(36166), + 161: uint16(36168), + 162: uint16(36169), + 163: uint16(36167), + 164: uint16(36173), + 165: uint16(36181), + 166: uint16(36185), + 167: uint16(35271), + 168: uint16(35274), + 169: uint16(35275), + 170: uint16(35276), + 171: uint16(35278), + 172: uint16(35279), + 173: uint16(35280), + 174: uint16(35281), + 175: uint16(29294), + 176: uint16(29343), + 177: uint16(29277), + 178: uint16(29286), + 179: uint16(29295), + 180: uint16(29310), + 181: uint16(29311), + 182: uint16(29316), + 183: uint16(29323), + 184: uint16(29325), + 185: uint16(29327), + 186: uint16(29330), + 187: uint16(25352), + 188: uint16(25394), + 189: uint16(25520), + }, + 106: { + 0: uint16(38540), + 1: uint16(38542), + 2: uint16(38545), + 3: uint16(38546), + 4: uint16(38547), + 5: uint16(38549), + 6: uint16(38550), + 7: uint16(38554), + 8: uint16(38555), + 9: uint16(38557), + 10: uint16(38558), + 11: uint16(38559), + 12: uint16(38560), + 13: uint16(38561), + 14: uint16(38562), + 15: uint16(38563), + 16: uint16(38564), + 17: uint16(38565), + 18: uint16(38566), + 19: uint16(38568), + 20: uint16(38569), + 21: uint16(38570), + 22: uint16(38571), + 23: uint16(38572), + 24: uint16(38573), + 25: uint16(38574), + 26: uint16(38575), + 27: uint16(38577), + 28: uint16(38578), + 29: uint16(38580), + 30: uint16(38581), + 31: uint16(38583), + 32: uint16(38584), + 33: uint16(38586), + 34: uint16(38587), + 35: uint16(38591), + 36: uint16(38594), + 37: uint16(38595), + 38: uint16(38600), + 39: uint16(38602), + 40: uint16(38603), + 41: uint16(38608), + 42: uint16(38609), + 43: uint16(38611), + 44: uint16(38612), + 45: uint16(38614), + 46: uint16(38615), + 47: uint16(38616), + 48: uint16(38617), + 49: uint16(38618), + 50: uint16(38619), + 51: uint16(38620), + 52: uint16(38621), + 53: uint16(38622), + 54: uint16(38623), + 55: uint16(38625), + 56: uint16(38626), + 57: uint16(38627), + 58: uint16(38628), + 59: uint16(38629), + 60: uint16(38630), + 61: uint16(38631), + 62: uint16(38635), + 63: uint16(38636), + 64: uint16(38637), + 65: uint16(38638), + 66: uint16(38640), + 67: uint16(38641), + 68: uint16(38642), + 69: uint16(38644), + 70: uint16(38645), + 71: uint16(38648), + 72: uint16(38650), + 73: uint16(38651), + 74: uint16(38652), + 75: uint16(38653), + 76: uint16(38655), + 77: uint16(38658), + 78: uint16(38659), + 79: uint16(38661), + 80: uint16(38666), + 81: uint16(38667), + 82: uint16(38668), + 83: uint16(38672), + 84: uint16(38673), + 85: uint16(38674), + 86: uint16(38676), + 87: uint16(38677), + 88: uint16(38679), + 89: uint16(38680), + 90: uint16(38681), + 91: uint16(38682), + 92: uint16(38683), + 93: uint16(38685), + 94: uint16(38687), + 95: uint16(38688), + 96: uint16(25663), + 97: uint16(25816), + 98: uint16(32772), + 99: uint16(27626), + 100: uint16(27635), + 101: uint16(27645), + 102: uint16(27637), + 103: uint16(27641), + 104: uint16(27653), + 105: uint16(27655), + 106: uint16(27654), + 107: uint16(27661), + 108: uint16(27669), + 109: uint16(27672), + 110: uint16(27673), + 111: uint16(27674), + 112: uint16(27681), + 113: uint16(27689), + 114: uint16(27684), + 115: uint16(27690), + 116: uint16(27698), + 117: uint16(25909), + 118: uint16(25941), + 119: uint16(25963), + 120: uint16(29261), + 121: uint16(29266), + 122: uint16(29270), + 123: uint16(29232), + 124: uint16(34402), + 125: uint16(21014), + 126: uint16(32927), + 127: uint16(32924), + 128: uint16(32915), + 129: uint16(32956), + 130: uint16(26378), + 131: uint16(32957), + 132: uint16(32945), + 133: uint16(32939), + 134: uint16(32941), + 135: uint16(32948), + 136: uint16(32951), + 137: uint16(32999), + 138: uint16(33000), + 139: uint16(33001), + 140: uint16(33002), + 141: uint16(32987), + 142: uint16(32962), + 143: uint16(32964), + 144: uint16(32985), + 145: uint16(32973), + 146: uint16(32983), + 147: uint16(26384), + 148: uint16(32989), + 149: uint16(33003), + 150: uint16(33009), + 151: uint16(33012), + 152: uint16(33005), + 153: uint16(33037), + 154: uint16(33038), + 155: uint16(33010), + 156: uint16(33020), + 157: uint16(26389), + 158: uint16(33042), + 159: uint16(35930), + 160: uint16(33078), + 161: uint16(33054), + 162: uint16(33068), + 163: uint16(33048), + 164: uint16(33074), + 165: uint16(33096), + 166: uint16(33100), + 167: uint16(33107), + 168: uint16(33140), + 169: uint16(33113), + 170: uint16(33114), + 171: uint16(33137), + 172: uint16(33120), + 173: uint16(33129), + 174: uint16(33148), + 175: uint16(33149), + 176: uint16(33133), + 177: uint16(33127), + 178: uint16(22605), + 179: uint16(23221), + 180: uint16(33160), + 181: uint16(33154), + 182: uint16(33169), + 183: uint16(28373), + 184: uint16(33187), + 185: uint16(33194), + 186: uint16(33228), + 187: uint16(26406), + 188: uint16(33226), + 189: uint16(33211), + }, + 107: { + 0: uint16(38689), + 1: uint16(38690), + 2: uint16(38691), + 3: uint16(38692), + 4: uint16(38693), + 5: uint16(38694), + 6: uint16(38695), + 7: uint16(38696), + 8: uint16(38697), + 9: uint16(38699), + 10: uint16(38700), + 11: uint16(38702), + 12: uint16(38703), + 13: uint16(38705), + 14: uint16(38707), + 15: uint16(38708), + 16: uint16(38709), + 17: uint16(38710), + 18: uint16(38711), + 19: uint16(38714), + 20: uint16(38715), + 21: uint16(38716), + 22: uint16(38717), + 23: uint16(38719), + 24: uint16(38720), + 25: uint16(38721), + 26: uint16(38722), + 27: uint16(38723), + 28: uint16(38724), + 29: uint16(38725), + 30: uint16(38726), + 31: uint16(38727), + 32: uint16(38728), + 33: uint16(38729), + 34: uint16(38730), + 35: uint16(38731), + 36: uint16(38732), + 37: uint16(38733), + 38: uint16(38734), + 39: uint16(38735), + 40: uint16(38736), + 41: uint16(38737), + 42: uint16(38740), + 43: uint16(38741), + 44: uint16(38743), + 45: uint16(38744), + 46: uint16(38746), + 47: uint16(38748), + 48: uint16(38749), + 49: uint16(38751), + 50: uint16(38755), + 51: uint16(38756), + 52: uint16(38758), + 53: uint16(38759), + 54: uint16(38760), + 55: uint16(38762), + 56: uint16(38763), + 57: uint16(38764), + 58: uint16(38765), + 59: uint16(38766), + 60: uint16(38767), + 61: uint16(38768), + 62: uint16(38769), + 63: uint16(38770), + 64: uint16(38773), + 65: uint16(38775), + 66: uint16(38776), + 67: uint16(38777), + 68: uint16(38778), + 69: uint16(38779), + 70: uint16(38781), + 71: uint16(38782), + 72: uint16(38783), + 73: uint16(38784), + 74: uint16(38785), + 75: uint16(38786), + 76: uint16(38787), + 77: uint16(38788), + 78: uint16(38790), + 79: uint16(38791), + 80: uint16(38792), + 81: uint16(38793), + 82: uint16(38794), + 83: uint16(38796), + 84: uint16(38798), + 85: uint16(38799), + 86: uint16(38800), + 87: uint16(38803), + 88: uint16(38805), + 89: uint16(38806), + 90: uint16(38807), + 91: uint16(38809), + 92: uint16(38810), + 93: uint16(38811), + 94: uint16(38812), + 95: uint16(38813), + 96: uint16(33217), + 97: uint16(33190), + 98: uint16(27428), + 99: uint16(27447), + 100: uint16(27449), + 101: uint16(27459), + 102: uint16(27462), + 103: uint16(27481), + 104: uint16(39121), + 105: uint16(39122), + 106: uint16(39123), + 107: uint16(39125), + 108: uint16(39129), + 109: uint16(39130), + 110: uint16(27571), + 111: uint16(24384), + 112: uint16(27586), + 113: uint16(35315), + 114: uint16(26000), + 115: uint16(40785), + 116: uint16(26003), + 117: uint16(26044), + 118: uint16(26054), + 119: uint16(26052), + 120: uint16(26051), + 121: uint16(26060), + 122: uint16(26062), + 123: uint16(26066), + 124: uint16(26070), + 125: uint16(28800), + 126: uint16(28828), + 127: uint16(28822), + 128: uint16(28829), + 129: uint16(28859), + 130: uint16(28864), + 131: uint16(28855), + 132: uint16(28843), + 133: uint16(28849), + 134: uint16(28904), + 135: uint16(28874), + 136: uint16(28944), + 137: uint16(28947), + 138: uint16(28950), + 139: uint16(28975), + 140: uint16(28977), + 141: uint16(29043), + 142: uint16(29020), + 143: uint16(29032), + 144: uint16(28997), + 145: uint16(29042), + 146: uint16(29002), + 147: uint16(29048), + 148: uint16(29050), + 149: uint16(29080), + 150: uint16(29107), + 151: uint16(29109), + 152: uint16(29096), + 153: uint16(29088), + 154: uint16(29152), + 155: uint16(29140), + 156: uint16(29159), + 157: uint16(29177), + 158: uint16(29213), + 159: uint16(29224), + 160: uint16(28780), + 161: uint16(28952), + 162: uint16(29030), + 163: uint16(29113), + 164: uint16(25150), + 165: uint16(25149), + 166: uint16(25155), + 167: uint16(25160), + 168: uint16(25161), + 169: uint16(31035), + 170: uint16(31040), + 171: uint16(31046), + 172: uint16(31049), + 173: uint16(31067), + 174: uint16(31068), + 175: uint16(31059), + 176: uint16(31066), + 177: uint16(31074), + 178: uint16(31063), + 179: uint16(31072), + 180: uint16(31087), + 181: uint16(31079), + 182: uint16(31098), + 183: uint16(31109), + 184: uint16(31114), + 185: uint16(31130), + 186: uint16(31143), + 187: uint16(31155), + 188: uint16(24529), + 189: uint16(24528), + }, + 108: { + 0: uint16(38814), + 1: uint16(38815), + 2: uint16(38817), + 3: uint16(38818), + 4: uint16(38820), + 5: uint16(38821), + 6: uint16(38822), + 7: uint16(38823), + 8: uint16(38824), + 9: uint16(38825), + 10: uint16(38826), + 11: uint16(38828), + 12: uint16(38830), + 13: uint16(38832), + 14: uint16(38833), + 15: uint16(38835), + 16: uint16(38837), + 17: uint16(38838), + 18: uint16(38839), + 19: uint16(38840), + 20: uint16(38841), + 21: uint16(38842), + 22: uint16(38843), + 23: uint16(38844), + 24: uint16(38845), + 25: uint16(38846), + 26: uint16(38847), + 27: uint16(38848), + 28: uint16(38849), + 29: uint16(38850), + 30: uint16(38851), + 31: uint16(38852), + 32: uint16(38853), + 33: uint16(38854), + 34: uint16(38855), + 35: uint16(38856), + 36: uint16(38857), + 37: uint16(38858), + 38: uint16(38859), + 39: uint16(38860), + 40: uint16(38861), + 41: uint16(38862), + 42: uint16(38863), + 43: uint16(38864), + 44: uint16(38865), + 45: uint16(38866), + 46: uint16(38867), + 47: uint16(38868), + 48: uint16(38869), + 49: uint16(38870), + 50: uint16(38871), + 51: uint16(38872), + 52: uint16(38873), + 53: uint16(38874), + 54: uint16(38875), + 55: uint16(38876), + 56: uint16(38877), + 57: uint16(38878), + 58: uint16(38879), + 59: uint16(38880), + 60: uint16(38881), + 61: uint16(38882), + 62: uint16(38883), + 63: uint16(38884), + 64: uint16(38885), + 65: uint16(38888), + 66: uint16(38894), + 67: uint16(38895), + 68: uint16(38896), + 69: uint16(38897), + 70: uint16(38898), + 71: uint16(38900), + 72: uint16(38903), + 73: uint16(38904), + 74: uint16(38905), + 75: uint16(38906), + 76: uint16(38907), + 77: uint16(38908), + 78: uint16(38909), + 79: uint16(38910), + 80: uint16(38911), + 81: uint16(38912), + 82: uint16(38913), + 83: uint16(38914), + 84: uint16(38915), + 85: uint16(38916), + 86: uint16(38917), + 87: uint16(38918), + 88: uint16(38919), + 89: uint16(38920), + 90: uint16(38921), + 91: uint16(38922), + 92: uint16(38923), + 93: uint16(38924), + 94: uint16(38925), + 95: uint16(38926), + 96: uint16(24636), + 97: uint16(24669), + 98: uint16(24666), + 99: uint16(24679), + 100: uint16(24641), + 101: uint16(24665), + 102: uint16(24675), + 103: uint16(24747), + 104: uint16(24838), + 105: uint16(24845), + 106: uint16(24925), + 107: uint16(25001), + 108: uint16(24989), + 109: uint16(25035), + 110: uint16(25041), + 111: uint16(25094), + 112: uint16(32896), + 113: uint16(32895), + 114: uint16(27795), + 115: uint16(27894), + 116: uint16(28156), + 117: uint16(30710), + 118: uint16(30712), + 119: uint16(30720), + 120: uint16(30729), + 121: uint16(30743), + 122: uint16(30744), + 123: uint16(30737), + 124: uint16(26027), + 125: uint16(30765), + 126: uint16(30748), + 127: uint16(30749), + 128: uint16(30777), + 129: uint16(30778), + 130: uint16(30779), + 131: uint16(30751), + 132: uint16(30780), + 133: uint16(30757), + 134: uint16(30764), + 135: uint16(30755), + 136: uint16(30761), + 137: uint16(30798), + 138: uint16(30829), + 139: uint16(30806), + 140: uint16(30807), + 141: uint16(30758), + 142: uint16(30800), + 143: uint16(30791), + 144: uint16(30796), + 145: uint16(30826), + 146: uint16(30875), + 147: uint16(30867), + 148: uint16(30874), + 149: uint16(30855), + 150: uint16(30876), + 151: uint16(30881), + 152: uint16(30883), + 153: uint16(30898), + 154: uint16(30905), + 155: uint16(30885), + 156: uint16(30932), + 157: uint16(30937), + 158: uint16(30921), + 159: uint16(30956), + 160: uint16(30962), + 161: uint16(30981), + 162: uint16(30964), + 163: uint16(30995), + 164: uint16(31012), + 165: uint16(31006), + 166: uint16(31028), + 167: uint16(40859), + 168: uint16(40697), + 169: uint16(40699), + 170: uint16(40700), + 171: uint16(30449), + 172: uint16(30468), + 173: uint16(30477), + 174: uint16(30457), + 175: uint16(30471), + 176: uint16(30472), + 177: uint16(30490), + 178: uint16(30498), + 179: uint16(30489), + 180: uint16(30509), + 181: uint16(30502), + 182: uint16(30517), + 183: uint16(30520), + 184: uint16(30544), + 185: uint16(30545), + 186: uint16(30535), + 187: uint16(30531), + 188: uint16(30554), + 189: uint16(30568), + }, + 109: { + 0: uint16(38927), + 1: uint16(38928), + 2: uint16(38929), + 3: uint16(38930), + 4: uint16(38931), + 5: uint16(38932), + 6: uint16(38933), + 7: uint16(38934), + 8: uint16(38935), + 9: uint16(38936), + 10: uint16(38937), + 11: uint16(38938), + 12: uint16(38939), + 13: uint16(38940), + 14: uint16(38941), + 15: uint16(38942), + 16: uint16(38943), + 17: uint16(38944), + 18: uint16(38945), + 19: uint16(38946), + 20: uint16(38947), + 21: uint16(38948), + 22: uint16(38949), + 23: uint16(38950), + 24: uint16(38951), + 25: uint16(38952), + 26: uint16(38953), + 27: uint16(38954), + 28: uint16(38955), + 29: uint16(38956), + 30: uint16(38957), + 31: uint16(38958), + 32: uint16(38959), + 33: uint16(38960), + 34: uint16(38961), + 35: uint16(38962), + 36: uint16(38963), + 37: uint16(38964), + 38: uint16(38965), + 39: uint16(38966), + 40: uint16(38967), + 41: uint16(38968), + 42: uint16(38969), + 43: uint16(38970), + 44: uint16(38971), + 45: uint16(38972), + 46: uint16(38973), + 47: uint16(38974), + 48: uint16(38975), + 49: uint16(38976), + 50: uint16(38977), + 51: uint16(38978), + 52: uint16(38979), + 53: uint16(38980), + 54: uint16(38981), + 55: uint16(38982), + 56: uint16(38983), + 57: uint16(38984), + 58: uint16(38985), + 59: uint16(38986), + 60: uint16(38987), + 61: uint16(38988), + 62: uint16(38989), + 63: uint16(38990), + 64: uint16(38991), + 65: uint16(38992), + 66: uint16(38993), + 67: uint16(38994), + 68: uint16(38995), + 69: uint16(38996), + 70: uint16(38997), + 71: uint16(38998), + 72: uint16(38999), + 73: uint16(39000), + 74: uint16(39001), + 75: uint16(39002), + 76: uint16(39003), + 77: uint16(39004), + 78: uint16(39005), + 79: uint16(39006), + 80: uint16(39007), + 81: uint16(39008), + 82: uint16(39009), + 83: uint16(39010), + 84: uint16(39011), + 85: uint16(39012), + 86: uint16(39013), + 87: uint16(39014), + 88: uint16(39015), + 89: uint16(39016), + 90: uint16(39017), + 91: uint16(39018), + 92: uint16(39019), + 93: uint16(39020), + 94: uint16(39021), + 95: uint16(39022), + 96: uint16(30562), + 97: uint16(30565), + 98: uint16(30591), + 99: uint16(30605), + 100: uint16(30589), + 101: uint16(30592), + 102: uint16(30604), + 103: uint16(30609), + 104: uint16(30623), + 105: uint16(30624), + 106: uint16(30640), + 107: uint16(30645), + 108: uint16(30653), + 109: uint16(30010), + 110: uint16(30016), + 111: uint16(30030), + 112: uint16(30027), + 113: uint16(30024), + 114: uint16(30043), + 115: uint16(30066), + 116: uint16(30073), + 117: uint16(30083), + 118: uint16(32600), + 119: uint16(32609), + 120: uint16(32607), + 121: uint16(35400), + 122: uint16(32616), + 123: uint16(32628), + 124: uint16(32625), + 125: uint16(32633), + 126: uint16(32641), + 127: uint16(32638), + 128: uint16(30413), + 129: uint16(30437), + 130: uint16(34866), + 131: uint16(38021), + 132: uint16(38022), + 133: uint16(38023), + 134: uint16(38027), + 135: uint16(38026), + 136: uint16(38028), + 137: uint16(38029), + 138: uint16(38031), + 139: uint16(38032), + 140: uint16(38036), + 141: uint16(38039), + 142: uint16(38037), + 143: uint16(38042), + 144: uint16(38043), + 145: uint16(38044), + 146: uint16(38051), + 147: uint16(38052), + 148: uint16(38059), + 149: uint16(38058), + 150: uint16(38061), + 151: uint16(38060), + 152: uint16(38063), + 153: uint16(38064), + 154: uint16(38066), + 155: uint16(38068), + 156: uint16(38070), + 157: uint16(38071), + 158: uint16(38072), + 159: uint16(38073), + 160: uint16(38074), + 161: uint16(38076), + 162: uint16(38077), + 163: uint16(38079), + 164: uint16(38084), + 165: uint16(38088), + 166: uint16(38089), + 167: uint16(38090), + 168: uint16(38091), + 169: uint16(38092), + 170: uint16(38093), + 171: uint16(38094), + 172: uint16(38096), + 173: uint16(38097), + 174: uint16(38098), + 175: uint16(38101), + 176: uint16(38102), + 177: uint16(38103), + 178: uint16(38105), + 179: uint16(38104), + 180: uint16(38107), + 181: uint16(38110), + 182: uint16(38111), + 183: uint16(38112), + 184: uint16(38114), + 185: uint16(38116), + 186: uint16(38117), + 187: uint16(38119), + 188: uint16(38120), + 189: uint16(38122), + }, + 110: { + 0: uint16(39023), + 1: uint16(39024), + 2: uint16(39025), + 3: uint16(39026), + 4: uint16(39027), + 5: uint16(39028), + 6: uint16(39051), + 7: uint16(39054), + 8: uint16(39058), + 9: uint16(39061), + 10: uint16(39065), + 11: uint16(39075), + 12: uint16(39080), + 13: uint16(39081), + 14: uint16(39082), + 15: uint16(39083), + 16: uint16(39084), + 17: uint16(39085), + 18: uint16(39086), + 19: uint16(39087), + 20: uint16(39088), + 21: uint16(39089), + 22: uint16(39090), + 23: uint16(39091), + 24: uint16(39092), + 25: uint16(39093), + 26: uint16(39094), + 27: uint16(39095), + 28: uint16(39096), + 29: uint16(39097), + 30: uint16(39098), + 31: uint16(39099), + 32: uint16(39100), + 33: uint16(39101), + 34: uint16(39102), + 35: uint16(39103), + 36: uint16(39104), + 37: uint16(39105), + 38: uint16(39106), + 39: uint16(39107), + 40: uint16(39108), + 41: uint16(39109), + 42: uint16(39110), + 43: uint16(39111), + 44: uint16(39112), + 45: uint16(39113), + 46: uint16(39114), + 47: uint16(39115), + 48: uint16(39116), + 49: uint16(39117), + 50: uint16(39119), + 51: uint16(39120), + 52: uint16(39124), + 53: uint16(39126), + 54: uint16(39127), + 55: uint16(39131), + 56: uint16(39132), + 57: uint16(39133), + 58: uint16(39136), + 59: uint16(39137), + 60: uint16(39138), + 61: uint16(39139), + 62: uint16(39140), + 63: uint16(39141), + 64: uint16(39142), + 65: uint16(39145), + 66: uint16(39146), + 67: uint16(39147), + 68: uint16(39148), + 69: uint16(39149), + 70: uint16(39150), + 71: uint16(39151), + 72: uint16(39152), + 73: uint16(39153), + 74: uint16(39154), + 75: uint16(39155), + 76: uint16(39156), + 77: uint16(39157), + 78: uint16(39158), + 79: uint16(39159), + 80: uint16(39160), + 81: uint16(39161), + 82: uint16(39162), + 83: uint16(39163), + 84: uint16(39164), + 85: uint16(39165), + 86: uint16(39166), + 87: uint16(39167), + 88: uint16(39168), + 89: uint16(39169), + 90: uint16(39170), + 91: uint16(39171), + 92: uint16(39172), + 93: uint16(39173), + 94: uint16(39174), + 95: uint16(39175), + 96: uint16(38121), + 97: uint16(38123), + 98: uint16(38126), + 99: uint16(38127), + 100: uint16(38131), + 101: uint16(38132), + 102: uint16(38133), + 103: uint16(38135), + 104: uint16(38137), + 105: uint16(38140), + 106: uint16(38141), + 107: uint16(38143), + 108: uint16(38147), + 109: uint16(38146), + 110: uint16(38150), + 111: uint16(38151), + 112: uint16(38153), + 113: uint16(38154), + 114: uint16(38157), + 115: uint16(38158), + 116: uint16(38159), + 117: uint16(38162), + 118: uint16(38163), + 119: uint16(38164), + 120: uint16(38165), + 121: uint16(38166), + 122: uint16(38168), + 123: uint16(38171), + 124: uint16(38173), + 125: uint16(38174), + 126: uint16(38175), + 127: uint16(38178), + 128: uint16(38186), + 129: uint16(38187), + 130: uint16(38185), + 131: uint16(38188), + 132: uint16(38193), + 133: uint16(38194), + 134: uint16(38196), + 135: uint16(38198), + 136: uint16(38199), + 137: uint16(38200), + 138: uint16(38204), + 139: uint16(38206), + 140: uint16(38207), + 141: uint16(38210), + 142: uint16(38197), + 143: uint16(38212), + 144: uint16(38213), + 145: uint16(38214), + 146: uint16(38217), + 147: uint16(38220), + 148: uint16(38222), + 149: uint16(38223), + 150: uint16(38226), + 151: uint16(38227), + 152: uint16(38228), + 153: uint16(38230), + 154: uint16(38231), + 155: uint16(38232), + 156: uint16(38233), + 157: uint16(38235), + 158: uint16(38238), + 159: uint16(38239), + 160: uint16(38237), + 161: uint16(38241), + 162: uint16(38242), + 163: uint16(38244), + 164: uint16(38245), + 165: uint16(38246), + 166: uint16(38247), + 167: uint16(38248), + 168: uint16(38249), + 169: uint16(38250), + 170: uint16(38251), + 171: uint16(38252), + 172: uint16(38255), + 173: uint16(38257), + 174: uint16(38258), + 175: uint16(38259), + 176: uint16(38202), + 177: uint16(30695), + 178: uint16(30700), + 179: uint16(38601), + 180: uint16(31189), + 181: uint16(31213), + 182: uint16(31203), + 183: uint16(31211), + 184: uint16(31238), + 185: uint16(23879), + 186: uint16(31235), + 187: uint16(31234), + 188: uint16(31262), + 189: uint16(31252), + }, + 111: { + 0: uint16(39176), + 1: uint16(39177), + 2: uint16(39178), + 3: uint16(39179), + 4: uint16(39180), + 5: uint16(39182), + 6: uint16(39183), + 7: uint16(39185), + 8: uint16(39186), + 9: uint16(39187), + 10: uint16(39188), + 11: uint16(39189), + 12: uint16(39190), + 13: uint16(39191), + 14: uint16(39192), + 15: uint16(39193), + 16: uint16(39194), + 17: uint16(39195), + 18: uint16(39196), + 19: uint16(39197), + 20: uint16(39198), + 21: uint16(39199), + 22: uint16(39200), + 23: uint16(39201), + 24: uint16(39202), + 25: uint16(39203), + 26: uint16(39204), + 27: uint16(39205), + 28: uint16(39206), + 29: uint16(39207), + 30: uint16(39208), + 31: uint16(39209), + 32: uint16(39210), + 33: uint16(39211), + 34: uint16(39212), + 35: uint16(39213), + 36: uint16(39215), + 37: uint16(39216), + 38: uint16(39217), + 39: uint16(39218), + 40: uint16(39219), + 41: uint16(39220), + 42: uint16(39221), + 43: uint16(39222), + 44: uint16(39223), + 45: uint16(39224), + 46: uint16(39225), + 47: uint16(39226), + 48: uint16(39227), + 49: uint16(39228), + 50: uint16(39229), + 51: uint16(39230), + 52: uint16(39231), + 53: uint16(39232), + 54: uint16(39233), + 55: uint16(39234), + 56: uint16(39235), + 57: uint16(39236), + 58: uint16(39237), + 59: uint16(39238), + 60: uint16(39239), + 61: uint16(39240), + 62: uint16(39241), + 63: uint16(39242), + 64: uint16(39243), + 65: uint16(39244), + 66: uint16(39245), + 67: uint16(39246), + 68: uint16(39247), + 69: uint16(39248), + 70: uint16(39249), + 71: uint16(39250), + 72: uint16(39251), + 73: uint16(39254), + 74: uint16(39255), + 75: uint16(39256), + 76: uint16(39257), + 77: uint16(39258), + 78: uint16(39259), + 79: uint16(39260), + 80: uint16(39261), + 81: uint16(39262), + 82: uint16(39263), + 83: uint16(39264), + 84: uint16(39265), + 85: uint16(39266), + 86: uint16(39268), + 87: uint16(39270), + 88: uint16(39283), + 89: uint16(39288), + 90: uint16(39289), + 91: uint16(39291), + 92: uint16(39294), + 93: uint16(39298), + 94: uint16(39299), + 95: uint16(39305), + 96: uint16(31289), + 97: uint16(31287), + 98: uint16(31313), + 99: uint16(40655), + 100: uint16(39333), + 101: uint16(31344), + 102: uint16(30344), + 103: uint16(30350), + 104: uint16(30355), + 105: uint16(30361), + 106: uint16(30372), + 107: uint16(29918), + 108: uint16(29920), + 109: uint16(29996), + 110: uint16(40480), + 111: uint16(40482), + 112: uint16(40488), + 113: uint16(40489), + 114: uint16(40490), + 115: uint16(40491), + 116: uint16(40492), + 117: uint16(40498), + 118: uint16(40497), + 119: uint16(40502), + 120: uint16(40504), + 121: uint16(40503), + 122: uint16(40505), + 123: uint16(40506), + 124: uint16(40510), + 125: uint16(40513), + 126: uint16(40514), + 127: uint16(40516), + 128: uint16(40518), + 129: uint16(40519), + 130: uint16(40520), + 131: uint16(40521), + 132: uint16(40523), + 133: uint16(40524), + 134: uint16(40526), + 135: uint16(40529), + 136: uint16(40533), + 137: uint16(40535), + 138: uint16(40538), + 139: uint16(40539), + 140: uint16(40540), + 141: uint16(40542), + 142: uint16(40547), + 143: uint16(40550), + 144: uint16(40551), + 145: uint16(40552), + 146: uint16(40553), + 147: uint16(40554), + 148: uint16(40555), + 149: uint16(40556), + 150: uint16(40561), + 151: uint16(40557), + 152: uint16(40563), + 153: uint16(30098), + 154: uint16(30100), + 155: uint16(30102), + 156: uint16(30112), + 157: uint16(30109), + 158: uint16(30124), + 159: uint16(30115), + 160: uint16(30131), + 161: uint16(30132), + 162: uint16(30136), + 163: uint16(30148), + 164: uint16(30129), + 165: uint16(30128), + 166: uint16(30147), + 167: uint16(30146), + 168: uint16(30166), + 169: uint16(30157), + 170: uint16(30179), + 171: uint16(30184), + 172: uint16(30182), + 173: uint16(30180), + 174: uint16(30187), + 175: uint16(30183), + 176: uint16(30211), + 177: uint16(30193), + 178: uint16(30204), + 179: uint16(30207), + 180: uint16(30224), + 181: uint16(30208), + 182: uint16(30213), + 183: uint16(30220), + 184: uint16(30231), + 185: uint16(30218), + 186: uint16(30245), + 187: uint16(30232), + 188: uint16(30229), + 189: uint16(30233), + }, + 112: { + 0: uint16(39308), + 1: uint16(39310), + 2: uint16(39322), + 3: uint16(39323), + 4: uint16(39324), + 5: uint16(39325), + 6: uint16(39326), + 7: uint16(39327), + 8: uint16(39328), + 9: uint16(39329), + 10: uint16(39330), + 11: uint16(39331), + 12: uint16(39332), + 13: uint16(39334), + 14: uint16(39335), + 15: uint16(39337), + 16: uint16(39338), + 17: uint16(39339), + 18: uint16(39340), + 19: uint16(39341), + 20: uint16(39342), + 21: uint16(39343), + 22: uint16(39344), + 23: uint16(39345), + 24: uint16(39346), + 25: uint16(39347), + 26: uint16(39348), + 27: uint16(39349), + 28: uint16(39350), + 29: uint16(39351), + 30: uint16(39352), + 31: uint16(39353), + 32: uint16(39354), + 33: uint16(39355), + 34: uint16(39356), + 35: uint16(39357), + 36: uint16(39358), + 37: uint16(39359), + 38: uint16(39360), + 39: uint16(39361), + 40: uint16(39362), + 41: uint16(39363), + 42: uint16(39364), + 43: uint16(39365), + 44: uint16(39366), + 45: uint16(39367), + 46: uint16(39368), + 47: uint16(39369), + 48: uint16(39370), + 49: uint16(39371), + 50: uint16(39372), + 51: uint16(39373), + 52: uint16(39374), + 53: uint16(39375), + 54: uint16(39376), + 55: uint16(39377), + 56: uint16(39378), + 57: uint16(39379), + 58: uint16(39380), + 59: uint16(39381), + 60: uint16(39382), + 61: uint16(39383), + 62: uint16(39384), + 63: uint16(39385), + 64: uint16(39386), + 65: uint16(39387), + 66: uint16(39388), + 67: uint16(39389), + 68: uint16(39390), + 69: uint16(39391), + 70: uint16(39392), + 71: uint16(39393), + 72: uint16(39394), + 73: uint16(39395), + 74: uint16(39396), + 75: uint16(39397), + 76: uint16(39398), + 77: uint16(39399), + 78: uint16(39400), + 79: uint16(39401), + 80: uint16(39402), + 81: uint16(39403), + 82: uint16(39404), + 83: uint16(39405), + 84: uint16(39406), + 85: uint16(39407), + 86: uint16(39408), + 87: uint16(39409), + 88: uint16(39410), + 89: uint16(39411), + 90: uint16(39412), + 91: uint16(39413), + 92: uint16(39414), + 93: uint16(39415), + 94: uint16(39416), + 95: uint16(39417), + 96: uint16(30235), + 97: uint16(30268), + 98: uint16(30242), + 99: uint16(30240), + 100: uint16(30272), + 101: uint16(30253), + 102: uint16(30256), + 103: uint16(30271), + 104: uint16(30261), + 105: uint16(30275), + 106: uint16(30270), + 107: uint16(30259), + 108: uint16(30285), + 109: uint16(30302), + 110: uint16(30292), + 111: uint16(30300), + 112: uint16(30294), + 113: uint16(30315), + 114: uint16(30319), + 115: uint16(32714), + 116: uint16(31462), + 117: uint16(31352), + 118: uint16(31353), + 119: uint16(31360), + 120: uint16(31366), + 121: uint16(31368), + 122: uint16(31381), + 123: uint16(31398), + 124: uint16(31392), + 125: uint16(31404), + 126: uint16(31400), + 127: uint16(31405), + 128: uint16(31411), + 129: uint16(34916), + 130: uint16(34921), + 131: uint16(34930), + 132: uint16(34941), + 133: uint16(34943), + 134: uint16(34946), + 135: uint16(34978), + 136: uint16(35014), + 137: uint16(34999), + 138: uint16(35004), + 139: uint16(35017), + 140: uint16(35042), + 141: uint16(35022), + 142: uint16(35043), + 143: uint16(35045), + 144: uint16(35057), + 145: uint16(35098), + 146: uint16(35068), + 147: uint16(35048), + 148: uint16(35070), + 149: uint16(35056), + 150: uint16(35105), + 151: uint16(35097), + 152: uint16(35091), + 153: uint16(35099), + 154: uint16(35082), + 155: uint16(35124), + 156: uint16(35115), + 157: uint16(35126), + 158: uint16(35137), + 159: uint16(35174), + 160: uint16(35195), + 161: uint16(30091), + 162: uint16(32997), + 163: uint16(30386), + 164: uint16(30388), + 165: uint16(30684), + 166: uint16(32786), + 167: uint16(32788), + 168: uint16(32790), + 169: uint16(32796), + 170: uint16(32800), + 171: uint16(32802), + 172: uint16(32805), + 173: uint16(32806), + 174: uint16(32807), + 175: uint16(32809), + 176: uint16(32808), + 177: uint16(32817), + 178: uint16(32779), + 179: uint16(32821), + 180: uint16(32835), + 181: uint16(32838), + 182: uint16(32845), + 183: uint16(32850), + 184: uint16(32873), + 185: uint16(32881), + 186: uint16(35203), + 187: uint16(39032), + 188: uint16(39040), + 189: uint16(39043), + }, + 113: { + 0: uint16(39418), + 1: uint16(39419), + 2: uint16(39420), + 3: uint16(39421), + 4: uint16(39422), + 5: uint16(39423), + 6: uint16(39424), + 7: uint16(39425), + 8: uint16(39426), + 9: uint16(39427), + 10: uint16(39428), + 11: uint16(39429), + 12: uint16(39430), + 13: uint16(39431), + 14: uint16(39432), + 15: uint16(39433), + 16: uint16(39434), + 17: uint16(39435), + 18: uint16(39436), + 19: uint16(39437), + 20: uint16(39438), + 21: uint16(39439), + 22: uint16(39440), + 23: uint16(39441), + 24: uint16(39442), + 25: uint16(39443), + 26: uint16(39444), + 27: uint16(39445), + 28: uint16(39446), + 29: uint16(39447), + 30: uint16(39448), + 31: uint16(39449), + 32: uint16(39450), + 33: uint16(39451), + 34: uint16(39452), + 35: uint16(39453), + 36: uint16(39454), + 37: uint16(39455), + 38: uint16(39456), + 39: uint16(39457), + 40: uint16(39458), + 41: uint16(39459), + 42: uint16(39460), + 43: uint16(39461), + 44: uint16(39462), + 45: uint16(39463), + 46: uint16(39464), + 47: uint16(39465), + 48: uint16(39466), + 49: uint16(39467), + 50: uint16(39468), + 51: uint16(39469), + 52: uint16(39470), + 53: uint16(39471), + 54: uint16(39472), + 55: uint16(39473), + 56: uint16(39474), + 57: uint16(39475), + 58: uint16(39476), + 59: uint16(39477), + 60: uint16(39478), + 61: uint16(39479), + 62: uint16(39480), + 63: uint16(39481), + 64: uint16(39482), + 65: uint16(39483), + 66: uint16(39484), + 67: uint16(39485), + 68: uint16(39486), + 69: uint16(39487), + 70: uint16(39488), + 71: uint16(39489), + 72: uint16(39490), + 73: uint16(39491), + 74: uint16(39492), + 75: uint16(39493), + 76: uint16(39494), + 77: uint16(39495), + 78: uint16(39496), + 79: uint16(39497), + 80: uint16(39498), + 81: uint16(39499), + 82: uint16(39500), + 83: uint16(39501), + 84: uint16(39502), + 85: uint16(39503), + 86: uint16(39504), + 87: uint16(39505), + 88: uint16(39506), + 89: uint16(39507), + 90: uint16(39508), + 91: uint16(39509), + 92: uint16(39510), + 93: uint16(39511), + 94: uint16(39512), + 95: uint16(39513), + 96: uint16(39049), + 97: uint16(39052), + 98: uint16(39053), + 99: uint16(39055), + 100: uint16(39060), + 101: uint16(39066), + 102: uint16(39067), + 103: uint16(39070), + 104: uint16(39071), + 105: uint16(39073), + 106: uint16(39074), + 107: uint16(39077), + 108: uint16(39078), + 109: uint16(34381), + 110: uint16(34388), + 111: uint16(34412), + 112: uint16(34414), + 113: uint16(34431), + 114: uint16(34426), + 115: uint16(34428), + 116: uint16(34427), + 117: uint16(34472), + 118: uint16(34445), + 119: uint16(34443), + 120: uint16(34476), + 121: uint16(34461), + 122: uint16(34471), + 123: uint16(34467), + 124: uint16(34474), + 125: uint16(34451), + 126: uint16(34473), + 127: uint16(34486), + 128: uint16(34500), + 129: uint16(34485), + 130: uint16(34510), + 131: uint16(34480), + 132: uint16(34490), + 133: uint16(34481), + 134: uint16(34479), + 135: uint16(34505), + 136: uint16(34511), + 137: uint16(34484), + 138: uint16(34537), + 139: uint16(34545), + 140: uint16(34546), + 141: uint16(34541), + 142: uint16(34547), + 143: uint16(34512), + 144: uint16(34579), + 145: uint16(34526), + 146: uint16(34548), + 147: uint16(34527), + 148: uint16(34520), + 149: uint16(34513), + 150: uint16(34563), + 151: uint16(34567), + 152: uint16(34552), + 153: uint16(34568), + 154: uint16(34570), + 155: uint16(34573), + 156: uint16(34569), + 157: uint16(34595), + 158: uint16(34619), + 159: uint16(34590), + 160: uint16(34597), + 161: uint16(34606), + 162: uint16(34586), + 163: uint16(34622), + 164: uint16(34632), + 165: uint16(34612), + 166: uint16(34609), + 167: uint16(34601), + 168: uint16(34615), + 169: uint16(34623), + 170: uint16(34690), + 171: uint16(34594), + 172: uint16(34685), + 173: uint16(34686), + 174: uint16(34683), + 175: uint16(34656), + 176: uint16(34672), + 177: uint16(34636), + 178: uint16(34670), + 179: uint16(34699), + 180: uint16(34643), + 181: uint16(34659), + 182: uint16(34684), + 183: uint16(34660), + 184: uint16(34649), + 185: uint16(34661), + 186: uint16(34707), + 187: uint16(34735), + 188: uint16(34728), + 189: uint16(34770), + }, + 114: { + 0: uint16(39514), + 1: uint16(39515), + 2: uint16(39516), + 3: uint16(39517), + 4: uint16(39518), + 5: uint16(39519), + 6: uint16(39520), + 7: uint16(39521), + 8: uint16(39522), + 9: uint16(39523), + 10: uint16(39524), + 11: uint16(39525), + 12: uint16(39526), + 13: uint16(39527), + 14: uint16(39528), + 15: uint16(39529), + 16: uint16(39530), + 17: uint16(39531), + 18: uint16(39538), + 19: uint16(39555), + 20: uint16(39561), + 21: uint16(39565), + 22: uint16(39566), + 23: uint16(39572), + 24: uint16(39573), + 25: uint16(39577), + 26: uint16(39590), + 27: uint16(39593), + 28: uint16(39594), + 29: uint16(39595), + 30: uint16(39596), + 31: uint16(39597), + 32: uint16(39598), + 33: uint16(39599), + 34: uint16(39602), + 35: uint16(39603), + 36: uint16(39604), + 37: uint16(39605), + 38: uint16(39609), + 39: uint16(39611), + 40: uint16(39613), + 41: uint16(39614), + 42: uint16(39615), + 43: uint16(39619), + 44: uint16(39620), + 45: uint16(39622), + 46: uint16(39623), + 47: uint16(39624), + 48: uint16(39625), + 49: uint16(39626), + 50: uint16(39629), + 51: uint16(39630), + 52: uint16(39631), + 53: uint16(39632), + 54: uint16(39634), + 55: uint16(39636), + 56: uint16(39637), + 57: uint16(39638), + 58: uint16(39639), + 59: uint16(39641), + 60: uint16(39642), + 61: uint16(39643), + 62: uint16(39644), + 63: uint16(39645), + 64: uint16(39646), + 65: uint16(39648), + 66: uint16(39650), + 67: uint16(39651), + 68: uint16(39652), + 69: uint16(39653), + 70: uint16(39655), + 71: uint16(39656), + 72: uint16(39657), + 73: uint16(39658), + 74: uint16(39660), + 75: uint16(39662), + 76: uint16(39664), + 77: uint16(39665), + 78: uint16(39666), + 79: uint16(39667), + 80: uint16(39668), + 81: uint16(39669), + 82: uint16(39670), + 83: uint16(39671), + 84: uint16(39672), + 85: uint16(39674), + 86: uint16(39676), + 87: uint16(39677), + 88: uint16(39678), + 89: uint16(39679), + 90: uint16(39680), + 91: uint16(39681), + 92: uint16(39682), + 93: uint16(39684), + 94: uint16(39685), + 95: uint16(39686), + 96: uint16(34758), + 97: uint16(34696), + 98: uint16(34693), + 99: uint16(34733), + 100: uint16(34711), + 101: uint16(34691), + 102: uint16(34731), + 103: uint16(34789), + 104: uint16(34732), + 105: uint16(34741), + 106: uint16(34739), + 107: uint16(34763), + 108: uint16(34771), + 109: uint16(34749), + 110: uint16(34769), + 111: uint16(34752), + 112: uint16(34762), + 113: uint16(34779), + 114: uint16(34794), + 115: uint16(34784), + 116: uint16(34798), + 117: uint16(34838), + 118: uint16(34835), + 119: uint16(34814), + 120: uint16(34826), + 121: uint16(34843), + 122: uint16(34849), + 123: uint16(34873), + 124: uint16(34876), + 125: uint16(32566), + 126: uint16(32578), + 127: uint16(32580), + 128: uint16(32581), + 129: uint16(33296), + 130: uint16(31482), + 131: uint16(31485), + 132: uint16(31496), + 133: uint16(31491), + 134: uint16(31492), + 135: uint16(31509), + 136: uint16(31498), + 137: uint16(31531), + 138: uint16(31503), + 139: uint16(31559), + 140: uint16(31544), + 141: uint16(31530), + 142: uint16(31513), + 143: uint16(31534), + 144: uint16(31537), + 145: uint16(31520), + 146: uint16(31525), + 147: uint16(31524), + 148: uint16(31539), + 149: uint16(31550), + 150: uint16(31518), + 151: uint16(31576), + 152: uint16(31578), + 153: uint16(31557), + 154: uint16(31605), + 155: uint16(31564), + 156: uint16(31581), + 157: uint16(31584), + 158: uint16(31598), + 159: uint16(31611), + 160: uint16(31586), + 161: uint16(31602), + 162: uint16(31601), + 163: uint16(31632), + 164: uint16(31654), + 165: uint16(31655), + 166: uint16(31672), + 167: uint16(31660), + 168: uint16(31645), + 169: uint16(31656), + 170: uint16(31621), + 171: uint16(31658), + 172: uint16(31644), + 173: uint16(31650), + 174: uint16(31659), + 175: uint16(31668), + 176: uint16(31697), + 177: uint16(31681), + 178: uint16(31692), + 179: uint16(31709), + 180: uint16(31706), + 181: uint16(31717), + 182: uint16(31718), + 183: uint16(31722), + 184: uint16(31756), + 185: uint16(31742), + 186: uint16(31740), + 187: uint16(31759), + 188: uint16(31766), + 189: uint16(31755), + }, + 115: { + 0: uint16(39687), + 1: uint16(39689), + 2: uint16(39690), + 3: uint16(39691), + 4: uint16(39692), + 5: uint16(39693), + 6: uint16(39694), + 7: uint16(39696), + 8: uint16(39697), + 9: uint16(39698), + 10: uint16(39700), + 11: uint16(39701), + 12: uint16(39702), + 13: uint16(39703), + 14: uint16(39704), + 15: uint16(39705), + 16: uint16(39706), + 17: uint16(39707), + 18: uint16(39708), + 19: uint16(39709), + 20: uint16(39710), + 21: uint16(39712), + 22: uint16(39713), + 23: uint16(39714), + 24: uint16(39716), + 25: uint16(39717), + 26: uint16(39718), + 27: uint16(39719), + 28: uint16(39720), + 29: uint16(39721), + 30: uint16(39722), + 31: uint16(39723), + 32: uint16(39724), + 33: uint16(39725), + 34: uint16(39726), + 35: uint16(39728), + 36: uint16(39729), + 37: uint16(39731), + 38: uint16(39732), + 39: uint16(39733), + 40: uint16(39734), + 41: uint16(39735), + 42: uint16(39736), + 43: uint16(39737), + 44: uint16(39738), + 45: uint16(39741), + 46: uint16(39742), + 47: uint16(39743), + 48: uint16(39744), + 49: uint16(39750), + 50: uint16(39754), + 51: uint16(39755), + 52: uint16(39756), + 53: uint16(39758), + 54: uint16(39760), + 55: uint16(39762), + 56: uint16(39763), + 57: uint16(39765), + 58: uint16(39766), + 59: uint16(39767), + 60: uint16(39768), + 61: uint16(39769), + 62: uint16(39770), + 63: uint16(39771), + 64: uint16(39772), + 65: uint16(39773), + 66: uint16(39774), + 67: uint16(39775), + 68: uint16(39776), + 69: uint16(39777), + 70: uint16(39778), + 71: uint16(39779), + 72: uint16(39780), + 73: uint16(39781), + 74: uint16(39782), + 75: uint16(39783), + 76: uint16(39784), + 77: uint16(39785), + 78: uint16(39786), + 79: uint16(39787), + 80: uint16(39788), + 81: uint16(39789), + 82: uint16(39790), + 83: uint16(39791), + 84: uint16(39792), + 85: uint16(39793), + 86: uint16(39794), + 87: uint16(39795), + 88: uint16(39796), + 89: uint16(39797), + 90: uint16(39798), + 91: uint16(39799), + 92: uint16(39800), + 93: uint16(39801), + 94: uint16(39802), + 95: uint16(39803), + 96: uint16(31775), + 97: uint16(31786), + 98: uint16(31782), + 99: uint16(31800), + 100: uint16(31809), + 101: uint16(31808), + 102: uint16(33278), + 103: uint16(33281), + 104: uint16(33282), + 105: uint16(33284), + 106: uint16(33260), + 107: uint16(34884), + 108: uint16(33313), + 109: uint16(33314), + 110: uint16(33315), + 111: uint16(33325), + 112: uint16(33327), + 113: uint16(33320), + 114: uint16(33323), + 115: uint16(33336), + 116: uint16(33339), + 117: uint16(33331), + 118: uint16(33332), + 119: uint16(33342), + 120: uint16(33348), + 121: uint16(33353), + 122: uint16(33355), + 123: uint16(33359), + 124: uint16(33370), + 125: uint16(33375), + 126: uint16(33384), + 127: uint16(34942), + 128: uint16(34949), + 129: uint16(34952), + 130: uint16(35032), + 131: uint16(35039), + 132: uint16(35166), + 133: uint16(32669), + 134: uint16(32671), + 135: uint16(32679), + 136: uint16(32687), + 137: uint16(32688), + 138: uint16(32690), + 139: uint16(31868), + 140: uint16(25929), + 141: uint16(31889), + 142: uint16(31901), + 143: uint16(31900), + 144: uint16(31902), + 145: uint16(31906), + 146: uint16(31922), + 147: uint16(31932), + 148: uint16(31933), + 149: uint16(31937), + 150: uint16(31943), + 151: uint16(31948), + 152: uint16(31949), + 153: uint16(31944), + 154: uint16(31941), + 155: uint16(31959), + 156: uint16(31976), + 157: uint16(33390), + 158: uint16(26280), + 159: uint16(32703), + 160: uint16(32718), + 161: uint16(32725), + 162: uint16(32741), + 163: uint16(32737), + 164: uint16(32742), + 165: uint16(32745), + 166: uint16(32750), + 167: uint16(32755), + 168: uint16(31992), + 169: uint16(32119), + 170: uint16(32166), + 171: uint16(32174), + 172: uint16(32327), + 173: uint16(32411), + 174: uint16(40632), + 175: uint16(40628), + 176: uint16(36211), + 177: uint16(36228), + 178: uint16(36244), + 179: uint16(36241), + 180: uint16(36273), + 181: uint16(36199), + 182: uint16(36205), + 183: uint16(35911), + 184: uint16(35913), + 185: uint16(37194), + 186: uint16(37200), + 187: uint16(37198), + 188: uint16(37199), + 189: uint16(37220), + }, + 116: { + 0: uint16(39804), + 1: uint16(39805), + 2: uint16(39806), + 3: uint16(39807), + 4: uint16(39808), + 5: uint16(39809), + 6: uint16(39810), + 7: uint16(39811), + 8: uint16(39812), + 9: uint16(39813), + 10: uint16(39814), + 11: uint16(39815), + 12: uint16(39816), + 13: uint16(39817), + 14: uint16(39818), + 15: uint16(39819), + 16: uint16(39820), + 17: uint16(39821), + 18: uint16(39822), + 19: uint16(39823), + 20: uint16(39824), + 21: uint16(39825), + 22: uint16(39826), + 23: uint16(39827), + 24: uint16(39828), + 25: uint16(39829), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39832), + 29: uint16(39833), + 30: uint16(39834), + 31: uint16(39835), + 32: uint16(39836), + 33: uint16(39837), + 34: uint16(39838), + 35: uint16(39839), + 36: uint16(39840), + 37: uint16(39841), + 38: uint16(39842), + 39: uint16(39843), + 40: uint16(39844), + 41: uint16(39845), + 42: uint16(39846), + 43: uint16(39847), + 44: uint16(39848), + 45: uint16(39849), + 46: uint16(39850), + 47: uint16(39851), + 48: uint16(39852), + 49: uint16(39853), + 50: uint16(39854), + 51: uint16(39855), + 52: uint16(39856), + 53: uint16(39857), + 54: uint16(39858), + 55: uint16(39859), + 56: uint16(39860), + 57: uint16(39861), + 58: uint16(39862), + 59: uint16(39863), + 60: uint16(39864), + 61: uint16(39865), + 62: uint16(39866), + 63: uint16(39867), + 64: uint16(39868), + 65: uint16(39869), + 66: uint16(39870), + 67: uint16(39871), + 68: uint16(39872), + 69: uint16(39873), + 70: uint16(39874), + 71: uint16(39875), + 72: uint16(39876), + 73: uint16(39877), + 74: uint16(39878), + 75: uint16(39879), + 76: uint16(39880), + 77: uint16(39881), + 78: uint16(39882), + 79: uint16(39883), + 80: uint16(39884), + 81: uint16(39885), + 82: uint16(39886), + 83: uint16(39887), + 84: uint16(39888), + 85: uint16(39889), + 86: uint16(39890), + 87: uint16(39891), + 88: uint16(39892), + 89: uint16(39893), + 90: uint16(39894), + 91: uint16(39895), + 92: uint16(39896), + 93: uint16(39897), + 94: uint16(39898), + 95: uint16(39899), + 96: uint16(37218), + 97: uint16(37217), + 98: uint16(37232), + 99: uint16(37225), + 100: uint16(37231), + 101: uint16(37245), + 102: uint16(37246), + 103: uint16(37234), + 104: uint16(37236), + 105: uint16(37241), + 106: uint16(37260), + 107: uint16(37253), + 108: uint16(37264), + 109: uint16(37261), + 110: uint16(37265), + 111: uint16(37282), + 112: uint16(37283), + 113: uint16(37290), + 114: uint16(37293), + 115: uint16(37294), + 116: uint16(37295), + 117: uint16(37301), + 118: uint16(37300), + 119: uint16(37306), + 120: uint16(35925), + 121: uint16(40574), + 122: uint16(36280), + 123: uint16(36331), + 124: uint16(36357), + 125: uint16(36441), + 126: uint16(36457), + 127: uint16(36277), + 128: uint16(36287), + 129: uint16(36284), + 130: uint16(36282), + 131: uint16(36292), + 132: uint16(36310), + 133: uint16(36311), + 134: uint16(36314), + 135: uint16(36318), + 136: uint16(36302), + 137: uint16(36303), + 138: uint16(36315), + 139: uint16(36294), + 140: uint16(36332), + 141: uint16(36343), + 142: uint16(36344), + 143: uint16(36323), + 144: uint16(36345), + 145: uint16(36347), + 146: uint16(36324), + 147: uint16(36361), + 148: uint16(36349), + 149: uint16(36372), + 150: uint16(36381), + 151: uint16(36383), + 152: uint16(36396), + 153: uint16(36398), + 154: uint16(36387), + 155: uint16(36399), + 156: uint16(36410), + 157: uint16(36416), + 158: uint16(36409), + 159: uint16(36405), + 160: uint16(36413), + 161: uint16(36401), + 162: uint16(36425), + 163: uint16(36417), + 164: uint16(36418), + 165: uint16(36433), + 166: uint16(36434), + 167: uint16(36426), + 168: uint16(36464), + 169: uint16(36470), + 170: uint16(36476), + 171: uint16(36463), + 172: uint16(36468), + 173: uint16(36485), + 174: uint16(36495), + 175: uint16(36500), + 176: uint16(36496), + 177: uint16(36508), + 178: uint16(36510), + 179: uint16(35960), + 180: uint16(35970), + 181: uint16(35978), + 182: uint16(35973), + 183: uint16(35992), + 184: uint16(35988), + 185: uint16(26011), + 186: uint16(35286), + 187: uint16(35294), + 188: uint16(35290), + 189: uint16(35292), + }, + 117: { + 0: uint16(39900), + 1: uint16(39901), + 2: uint16(39902), + 3: uint16(39903), + 4: uint16(39904), + 5: uint16(39905), + 6: uint16(39906), + 7: uint16(39907), + 8: uint16(39908), + 9: uint16(39909), + 10: uint16(39910), + 11: uint16(39911), + 12: uint16(39912), + 13: uint16(39913), + 14: uint16(39914), + 15: uint16(39915), + 16: uint16(39916), + 17: uint16(39917), + 18: uint16(39918), + 19: uint16(39919), + 20: uint16(39920), + 21: uint16(39921), + 22: uint16(39922), + 23: uint16(39923), + 24: uint16(39924), + 25: uint16(39925), + 26: uint16(39926), + 27: uint16(39927), + 28: uint16(39928), + 29: uint16(39929), + 30: uint16(39930), + 31: uint16(39931), + 32: uint16(39932), + 33: uint16(39933), + 34: uint16(39934), + 35: uint16(39935), + 36: uint16(39936), + 37: uint16(39937), + 38: uint16(39938), + 39: uint16(39939), + 40: uint16(39940), + 41: uint16(39941), + 42: uint16(39942), + 43: uint16(39943), + 44: uint16(39944), + 45: uint16(39945), + 46: uint16(39946), + 47: uint16(39947), + 48: uint16(39948), + 49: uint16(39949), + 50: uint16(39950), + 51: uint16(39951), + 52: uint16(39952), + 53: uint16(39953), + 54: uint16(39954), + 55: uint16(39955), + 56: uint16(39956), + 57: uint16(39957), + 58: uint16(39958), + 59: uint16(39959), + 60: uint16(39960), + 61: uint16(39961), + 62: uint16(39962), + 63: uint16(39963), + 64: uint16(39964), + 65: uint16(39965), + 66: uint16(39966), + 67: uint16(39967), + 68: uint16(39968), + 69: uint16(39969), + 70: uint16(39970), + 71: uint16(39971), + 72: uint16(39972), + 73: uint16(39973), + 74: uint16(39974), + 75: uint16(39975), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39978), + 79: uint16(39979), + 80: uint16(39980), + 81: uint16(39981), + 82: uint16(39982), + 83: uint16(39983), + 84: uint16(39984), + 85: uint16(39985), + 86: uint16(39986), + 87: uint16(39987), + 88: uint16(39988), + 89: uint16(39989), + 90: uint16(39990), + 91: uint16(39991), + 92: uint16(39992), + 93: uint16(39993), + 94: uint16(39994), + 95: uint16(39995), + 96: uint16(35301), + 97: uint16(35307), + 98: uint16(35311), + 99: uint16(35390), + 100: uint16(35622), + 101: uint16(38739), + 102: uint16(38633), + 103: uint16(38643), + 104: uint16(38639), + 105: uint16(38662), + 106: uint16(38657), + 107: uint16(38664), + 108: uint16(38671), + 109: uint16(38670), + 110: uint16(38698), + 111: uint16(38701), + 112: uint16(38704), + 113: uint16(38718), + 114: uint16(40832), + 115: uint16(40835), + 116: uint16(40837), + 117: uint16(40838), + 118: uint16(40839), + 119: uint16(40840), + 120: uint16(40841), + 121: uint16(40842), + 122: uint16(40844), + 123: uint16(40702), + 124: uint16(40715), + 125: uint16(40717), + 126: uint16(38585), + 127: uint16(38588), + 128: uint16(38589), + 129: uint16(38606), + 130: uint16(38610), + 131: uint16(30655), + 132: uint16(38624), + 133: uint16(37518), + 134: uint16(37550), + 135: uint16(37576), + 136: uint16(37694), + 137: uint16(37738), + 138: uint16(37834), + 139: uint16(37775), + 140: uint16(37950), + 141: uint16(37995), + 142: uint16(40063), + 143: uint16(40066), + 144: uint16(40069), + 145: uint16(40070), + 146: uint16(40071), + 147: uint16(40072), + 148: uint16(31267), + 149: uint16(40075), + 150: uint16(40078), + 151: uint16(40080), + 152: uint16(40081), + 153: uint16(40082), + 154: uint16(40084), + 155: uint16(40085), + 156: uint16(40090), + 157: uint16(40091), + 158: uint16(40094), + 159: uint16(40095), + 160: uint16(40096), + 161: uint16(40097), + 162: uint16(40098), + 163: uint16(40099), + 164: uint16(40101), + 165: uint16(40102), + 166: uint16(40103), + 167: uint16(40104), + 168: uint16(40105), + 169: uint16(40107), + 170: uint16(40109), + 171: uint16(40110), + 172: uint16(40112), + 173: uint16(40113), + 174: uint16(40114), + 175: uint16(40115), + 176: uint16(40116), + 177: uint16(40117), + 178: uint16(40118), + 179: uint16(40119), + 180: uint16(40122), + 181: uint16(40123), + 182: uint16(40124), + 183: uint16(40125), + 184: uint16(40132), + 185: uint16(40133), + 186: uint16(40134), + 187: uint16(40135), + 188: uint16(40138), + 189: uint16(40139), + }, + 118: { + 0: uint16(39996), + 1: uint16(39997), + 2: uint16(39998), + 3: uint16(39999), + 4: uint16(40000), + 5: uint16(40001), + 6: uint16(40002), + 7: uint16(40003), + 8: uint16(40004), + 9: uint16(40005), + 10: uint16(40006), + 11: uint16(40007), + 12: uint16(40008), + 13: uint16(40009), + 14: uint16(40010), + 15: uint16(40011), + 16: uint16(40012), + 17: uint16(40013), + 18: uint16(40014), + 19: uint16(40015), + 20: uint16(40016), + 21: uint16(40017), + 22: uint16(40018), + 23: uint16(40019), + 24: uint16(40020), + 25: uint16(40021), + 26: uint16(40022), + 27: uint16(40023), + 28: uint16(40024), + 29: uint16(40025), + 30: uint16(40026), + 31: uint16(40027), + 32: uint16(40028), + 33: uint16(40029), + 34: uint16(40030), + 35: uint16(40031), + 36: uint16(40032), + 37: uint16(40033), + 38: uint16(40034), + 39: uint16(40035), + 40: uint16(40036), + 41: uint16(40037), + 42: uint16(40038), + 43: uint16(40039), + 44: uint16(40040), + 45: uint16(40041), + 46: uint16(40042), + 47: uint16(40043), + 48: uint16(40044), + 49: uint16(40045), + 50: uint16(40046), + 51: uint16(40047), + 52: uint16(40048), + 53: uint16(40049), + 54: uint16(40050), + 55: uint16(40051), + 56: uint16(40052), + 57: uint16(40053), + 58: uint16(40054), + 59: uint16(40055), + 60: uint16(40056), + 61: uint16(40057), + 62: uint16(40058), + 63: uint16(40059), + 64: uint16(40061), + 65: uint16(40062), + 66: uint16(40064), + 67: uint16(40067), + 68: uint16(40068), + 69: uint16(40073), + 70: uint16(40074), + 71: uint16(40076), + 72: uint16(40079), + 73: uint16(40083), + 74: uint16(40086), + 75: uint16(40087), + 76: uint16(40088), + 77: uint16(40089), + 78: uint16(40093), + 79: uint16(40106), + 80: uint16(40108), + 81: uint16(40111), + 82: uint16(40121), + 83: uint16(40126), + 84: uint16(40127), + 85: uint16(40128), + 86: uint16(40129), + 87: uint16(40130), + 88: uint16(40136), + 89: uint16(40137), + 90: uint16(40145), + 91: uint16(40146), + 92: uint16(40154), + 93: uint16(40155), + 94: uint16(40160), + 95: uint16(40161), + 96: uint16(40140), + 97: uint16(40141), + 98: uint16(40142), + 99: uint16(40143), + 100: uint16(40144), + 101: uint16(40147), + 102: uint16(40148), + 103: uint16(40149), + 104: uint16(40151), + 105: uint16(40152), + 106: uint16(40153), + 107: uint16(40156), + 108: uint16(40157), + 109: uint16(40159), + 110: uint16(40162), + 111: uint16(38780), + 112: uint16(38789), + 113: uint16(38801), + 114: uint16(38802), + 115: uint16(38804), + 116: uint16(38831), + 117: uint16(38827), + 118: uint16(38819), + 119: uint16(38834), + 120: uint16(38836), + 121: uint16(39601), + 122: uint16(39600), + 123: uint16(39607), + 124: uint16(40536), + 125: uint16(39606), + 126: uint16(39610), + 127: uint16(39612), + 128: uint16(39617), + 129: uint16(39616), + 130: uint16(39621), + 131: uint16(39618), + 132: uint16(39627), + 133: uint16(39628), + 134: uint16(39633), + 135: uint16(39749), + 136: uint16(39747), + 137: uint16(39751), + 138: uint16(39753), + 139: uint16(39752), + 140: uint16(39757), + 141: uint16(39761), + 142: uint16(39144), + 143: uint16(39181), + 144: uint16(39214), + 145: uint16(39253), + 146: uint16(39252), + 147: uint16(39647), + 148: uint16(39649), + 149: uint16(39654), + 150: uint16(39663), + 151: uint16(39659), + 152: uint16(39675), + 153: uint16(39661), + 154: uint16(39673), + 155: uint16(39688), + 156: uint16(39695), + 157: uint16(39699), + 158: uint16(39711), + 159: uint16(39715), + 160: uint16(40637), + 161: uint16(40638), + 162: uint16(32315), + 163: uint16(40578), + 164: uint16(40583), + 165: uint16(40584), + 166: uint16(40587), + 167: uint16(40594), + 168: uint16(37846), + 169: uint16(40605), + 170: uint16(40607), + 171: uint16(40667), + 172: uint16(40668), + 173: uint16(40669), + 174: uint16(40672), + 175: uint16(40671), + 176: uint16(40674), + 177: uint16(40681), + 178: uint16(40679), + 179: uint16(40677), + 180: uint16(40682), + 181: uint16(40687), + 182: uint16(40738), + 183: uint16(40748), + 184: uint16(40751), + 185: uint16(40761), + 186: uint16(40759), + 187: uint16(40765), + 188: uint16(40766), + 189: uint16(40772), + }, + 119: { + 0: uint16(40163), + 1: uint16(40164), + 2: uint16(40165), + 3: uint16(40166), + 4: uint16(40167), + 5: uint16(40168), + 6: uint16(40169), + 7: uint16(40170), + 8: uint16(40171), + 9: uint16(40172), + 10: uint16(40173), + 11: uint16(40174), + 12: uint16(40175), + 13: uint16(40176), + 14: uint16(40177), + 15: uint16(40178), + 16: uint16(40179), + 17: uint16(40180), + 18: uint16(40181), + 19: uint16(40182), + 20: uint16(40183), + 21: uint16(40184), + 22: uint16(40185), + 23: uint16(40186), + 24: uint16(40187), + 25: uint16(40188), + 26: uint16(40189), + 27: uint16(40190), + 28: uint16(40191), + 29: uint16(40192), + 30: uint16(40193), + 31: uint16(40194), + 32: uint16(40195), + 33: uint16(40196), + 34: uint16(40197), + 35: uint16(40198), + 36: uint16(40199), + 37: uint16(40200), + 38: uint16(40201), + 39: uint16(40202), + 40: uint16(40203), + 41: uint16(40204), + 42: uint16(40205), + 43: uint16(40206), + 44: uint16(40207), + 45: uint16(40208), + 46: uint16(40209), + 47: uint16(40210), + 48: uint16(40211), + 49: uint16(40212), + 50: uint16(40213), + 51: uint16(40214), + 52: uint16(40215), + 53: uint16(40216), + 54: uint16(40217), + 55: uint16(40218), + 56: uint16(40219), + 57: uint16(40220), + 58: uint16(40221), + 59: uint16(40222), + 60: uint16(40223), + 61: uint16(40224), + 62: uint16(40225), + 63: uint16(40226), + 64: uint16(40227), + 65: uint16(40228), + 66: uint16(40229), + 67: uint16(40230), + 68: uint16(40231), + 69: uint16(40232), + 70: uint16(40233), + 71: uint16(40234), + 72: uint16(40235), + 73: uint16(40236), + 74: uint16(40237), + 75: uint16(40238), + 76: uint16(40239), + 77: uint16(40240), + 78: uint16(40241), + 79: uint16(40242), + 80: uint16(40243), + 81: uint16(40244), + 82: uint16(40245), + 83: uint16(40246), + 84: uint16(40247), + 85: uint16(40248), + 86: uint16(40249), + 87: uint16(40250), + 88: uint16(40251), + 89: uint16(40252), + 90: uint16(40253), + 91: uint16(40254), + 92: uint16(40255), + 93: uint16(40256), + 94: uint16(40257), + 95: uint16(40258), + 96: uint16(57908), + 97: uint16(57909), + 98: uint16(57910), + 99: uint16(57911), + 100: uint16(57912), + 101: uint16(57913), + 102: uint16(57914), + 103: uint16(57915), + 104: uint16(57916), + 105: uint16(57917), + 106: uint16(57918), + 107: uint16(57919), + 108: uint16(57920), + 109: uint16(57921), + 110: uint16(57922), + 111: uint16(57923), + 112: uint16(57924), + 113: uint16(57925), + 114: uint16(57926), + 115: uint16(57927), + 116: uint16(57928), + 117: uint16(57929), + 118: uint16(57930), + 119: uint16(57931), + 120: uint16(57932), + 121: uint16(57933), + 122: uint16(57934), + 123: uint16(57935), + 124: uint16(57936), + 125: uint16(57937), + 126: uint16(57938), + 127: uint16(57939), + 128: uint16(57940), + 129: uint16(57941), + 130: uint16(57942), + 131: uint16(57943), + 132: uint16(57944), + 133: uint16(57945), + 134: uint16(57946), + 135: uint16(57947), + 136: uint16(57948), + 137: uint16(57949), + 138: uint16(57950), + 139: uint16(57951), + 140: uint16(57952), + 141: uint16(57953), + 142: uint16(57954), + 143: uint16(57955), + 144: uint16(57956), + 145: uint16(57957), + 146: uint16(57958), + 147: uint16(57959), + 148: uint16(57960), + 149: uint16(57961), + 150: uint16(57962), + 151: uint16(57963), + 152: uint16(57964), + 153: uint16(57965), + 154: uint16(57966), + 155: uint16(57967), + 156: uint16(57968), + 157: uint16(57969), + 158: uint16(57970), + 159: uint16(57971), + 160: uint16(57972), + 161: uint16(57973), + 162: uint16(57974), + 163: uint16(57975), + 164: uint16(57976), + 165: uint16(57977), + 166: uint16(57978), + 167: uint16(57979), + 168: uint16(57980), + 169: uint16(57981), + 170: uint16(57982), + 171: uint16(57983), + 172: uint16(57984), + 173: uint16(57985), + 174: uint16(57986), + 175: uint16(57987), + 176: uint16(57988), + 177: uint16(57989), + 178: uint16(57990), + 179: uint16(57991), + 180: uint16(57992), + 181: uint16(57993), + 182: uint16(57994), + 183: uint16(57995), + 184: uint16(57996), + 185: uint16(57997), + 186: uint16(57998), + 187: uint16(57999), + 188: uint16(58000), + 189: uint16(58001), + }, + 120: { + 0: uint16(40259), + 1: uint16(40260), + 2: uint16(40261), + 3: uint16(40262), + 4: uint16(40263), + 5: uint16(40264), + 6: uint16(40265), + 7: uint16(40266), + 8: uint16(40267), + 9: uint16(40268), + 10: uint16(40269), + 11: uint16(40270), + 12: uint16(40271), + 13: uint16(40272), + 14: uint16(40273), + 15: uint16(40274), + 16: uint16(40275), + 17: uint16(40276), + 18: uint16(40277), + 19: uint16(40278), + 20: uint16(40279), + 21: uint16(40280), + 22: uint16(40281), + 23: uint16(40282), + 24: uint16(40283), + 25: uint16(40284), + 26: uint16(40285), + 27: uint16(40286), + 28: uint16(40287), + 29: uint16(40288), + 30: uint16(40289), + 31: uint16(40290), + 32: uint16(40291), + 33: uint16(40292), + 34: uint16(40293), + 35: uint16(40294), + 36: uint16(40295), + 37: uint16(40296), + 38: uint16(40297), + 39: uint16(40298), + 40: uint16(40299), + 41: uint16(40300), + 42: uint16(40301), + 43: uint16(40302), + 44: uint16(40303), + 45: uint16(40304), + 46: uint16(40305), + 47: uint16(40306), + 48: uint16(40307), + 49: uint16(40308), + 50: uint16(40309), + 51: uint16(40310), + 52: uint16(40311), + 53: uint16(40312), + 54: uint16(40313), + 55: uint16(40314), + 56: uint16(40315), + 57: uint16(40316), + 58: uint16(40317), + 59: uint16(40318), + 60: uint16(40319), + 61: uint16(40320), + 62: uint16(40321), + 63: uint16(40322), + 64: uint16(40323), + 65: uint16(40324), + 66: uint16(40325), + 67: uint16(40326), + 68: uint16(40327), + 69: uint16(40328), + 70: uint16(40329), + 71: uint16(40330), + 72: uint16(40331), + 73: uint16(40332), + 74: uint16(40333), + 75: uint16(40334), + 76: uint16(40335), + 77: uint16(40336), + 78: uint16(40337), + 79: uint16(40338), + 80: uint16(40339), + 81: uint16(40340), + 82: uint16(40341), + 83: uint16(40342), + 84: uint16(40343), + 85: uint16(40344), + 86: uint16(40345), + 87: uint16(40346), + 88: uint16(40347), + 89: uint16(40348), + 90: uint16(40349), + 91: uint16(40350), + 92: uint16(40351), + 93: uint16(40352), + 94: uint16(40353), + 95: uint16(40354), + 96: uint16(58002), + 97: uint16(58003), + 98: uint16(58004), + 99: uint16(58005), + 100: uint16(58006), + 101: uint16(58007), + 102: uint16(58008), + 103: uint16(58009), + 104: uint16(58010), + 105: uint16(58011), + 106: uint16(58012), + 107: uint16(58013), + 108: uint16(58014), + 109: uint16(58015), + 110: uint16(58016), + 111: uint16(58017), + 112: uint16(58018), + 113: uint16(58019), + 114: uint16(58020), + 115: uint16(58021), + 116: uint16(58022), + 117: uint16(58023), + 118: uint16(58024), + 119: uint16(58025), + 120: uint16(58026), + 121: uint16(58027), + 122: uint16(58028), + 123: uint16(58029), + 124: uint16(58030), + 125: uint16(58031), + 126: uint16(58032), + 127: uint16(58033), + 128: uint16(58034), + 129: uint16(58035), + 130: uint16(58036), + 131: uint16(58037), + 132: uint16(58038), + 133: uint16(58039), + 134: uint16(58040), + 135: uint16(58041), + 136: uint16(58042), + 137: uint16(58043), + 138: uint16(58044), + 139: uint16(58045), + 140: uint16(58046), + 141: uint16(58047), + 142: uint16(58048), + 143: uint16(58049), + 144: uint16(58050), + 145: uint16(58051), + 146: uint16(58052), + 147: uint16(58053), + 148: uint16(58054), + 149: uint16(58055), + 150: uint16(58056), + 151: uint16(58057), + 152: uint16(58058), + 153: uint16(58059), + 154: uint16(58060), + 155: uint16(58061), + 156: uint16(58062), + 157: uint16(58063), + 158: uint16(58064), + 159: uint16(58065), + 160: uint16(58066), + 161: uint16(58067), + 162: uint16(58068), + 163: uint16(58069), + 164: uint16(58070), + 165: uint16(58071), + 166: uint16(58072), + 167: uint16(58073), + 168: uint16(58074), + 169: uint16(58075), + 170: uint16(58076), + 171: uint16(58077), + 172: uint16(58078), + 173: uint16(58079), + 174: uint16(58080), + 175: uint16(58081), + 176: uint16(58082), + 177: uint16(58083), + 178: uint16(58084), + 179: uint16(58085), + 180: uint16(58086), + 181: uint16(58087), + 182: uint16(58088), + 183: uint16(58089), + 184: uint16(58090), + 185: uint16(58091), + 186: uint16(58092), + 187: uint16(58093), + 188: uint16(58094), + 189: uint16(58095), + }, + 121: { + 0: uint16(40355), + 1: uint16(40356), + 2: uint16(40357), + 3: uint16(40358), + 4: uint16(40359), + 5: uint16(40360), + 6: uint16(40361), + 7: uint16(40362), + 8: uint16(40363), + 9: uint16(40364), + 10: uint16(40365), + 11: uint16(40366), + 12: uint16(40367), + 13: uint16(40368), + 14: uint16(40369), + 15: uint16(40370), + 16: uint16(40371), + 17: uint16(40372), + 18: uint16(40373), + 19: uint16(40374), + 20: uint16(40375), + 21: uint16(40376), + 22: uint16(40377), + 23: uint16(40378), + 24: uint16(40379), + 25: uint16(40380), + 26: uint16(40381), + 27: uint16(40382), + 28: uint16(40383), + 29: uint16(40384), + 30: uint16(40385), + 31: uint16(40386), + 32: uint16(40387), + 33: uint16(40388), + 34: uint16(40389), + 35: uint16(40390), + 36: uint16(40391), + 37: uint16(40392), + 38: uint16(40393), + 39: uint16(40394), + 40: uint16(40395), + 41: uint16(40396), + 42: uint16(40397), + 43: uint16(40398), + 44: uint16(40399), + 45: uint16(40400), + 46: uint16(40401), + 47: uint16(40402), + 48: uint16(40403), + 49: uint16(40404), + 50: uint16(40405), + 51: uint16(40406), + 52: uint16(40407), + 53: uint16(40408), + 54: uint16(40409), + 55: uint16(40410), + 56: uint16(40411), + 57: uint16(40412), + 58: uint16(40413), + 59: uint16(40414), + 60: uint16(40415), + 61: uint16(40416), + 62: uint16(40417), + 63: uint16(40418), + 64: uint16(40419), + 65: uint16(40420), + 66: uint16(40421), + 67: uint16(40422), + 68: uint16(40423), + 69: uint16(40424), + 70: uint16(40425), + 71: uint16(40426), + 72: uint16(40427), + 73: uint16(40428), + 74: uint16(40429), + 75: uint16(40430), + 76: uint16(40431), + 77: uint16(40432), + 78: uint16(40433), + 79: uint16(40434), + 80: uint16(40435), + 81: uint16(40436), + 82: uint16(40437), + 83: uint16(40438), + 84: uint16(40439), + 85: uint16(40440), + 86: uint16(40441), + 87: uint16(40442), + 88: uint16(40443), + 89: uint16(40444), + 90: uint16(40445), + 91: uint16(40446), + 92: uint16(40447), + 93: uint16(40448), + 94: uint16(40449), + 95: uint16(40450), + 96: uint16(58096), + 97: uint16(58097), + 98: uint16(58098), + 99: uint16(58099), + 100: uint16(58100), + 101: uint16(58101), + 102: uint16(58102), + 103: uint16(58103), + 104: uint16(58104), + 105: uint16(58105), + 106: uint16(58106), + 107: uint16(58107), + 108: uint16(58108), + 109: uint16(58109), + 110: uint16(58110), + 111: uint16(58111), + 112: uint16(58112), + 113: uint16(58113), + 114: uint16(58114), + 115: uint16(58115), + 116: uint16(58116), + 117: uint16(58117), + 118: uint16(58118), + 119: uint16(58119), + 120: uint16(58120), + 121: uint16(58121), + 122: uint16(58122), + 123: uint16(58123), + 124: uint16(58124), + 125: uint16(58125), + 126: uint16(58126), + 127: uint16(58127), + 128: uint16(58128), + 129: uint16(58129), + 130: uint16(58130), + 131: uint16(58131), + 132: uint16(58132), + 133: uint16(58133), + 134: uint16(58134), + 135: uint16(58135), + 136: uint16(58136), + 137: uint16(58137), + 138: uint16(58138), + 139: uint16(58139), + 140: uint16(58140), + 141: uint16(58141), + 142: uint16(58142), + 143: uint16(58143), + 144: uint16(58144), + 145: uint16(58145), + 146: uint16(58146), + 147: uint16(58147), + 148: uint16(58148), + 149: uint16(58149), + 150: uint16(58150), + 151: uint16(58151), + 152: uint16(58152), + 153: uint16(58153), + 154: uint16(58154), + 155: uint16(58155), + 156: uint16(58156), + 157: uint16(58157), + 158: uint16(58158), + 159: uint16(58159), + 160: uint16(58160), + 161: uint16(58161), + 162: uint16(58162), + 163: uint16(58163), + 164: uint16(58164), + 165: uint16(58165), + 166: uint16(58166), + 167: uint16(58167), + 168: uint16(58168), + 169: uint16(58169), + 170: uint16(58170), + 171: uint16(58171), + 172: uint16(58172), + 173: uint16(58173), + 174: uint16(58174), + 175: uint16(58175), + 176: uint16(58176), + 177: uint16(58177), + 178: uint16(58178), + 179: uint16(58179), + 180: uint16(58180), + 181: uint16(58181), + 182: uint16(58182), + 183: uint16(58183), + 184: uint16(58184), + 185: uint16(58185), + 186: uint16(58186), + 187: uint16(58187), + 188: uint16(58188), + 189: uint16(58189), + }, + 122: { + 0: uint16(40451), + 1: uint16(40452), + 2: uint16(40453), + 3: uint16(40454), + 4: uint16(40455), + 5: uint16(40456), + 6: uint16(40457), + 7: uint16(40458), + 8: uint16(40459), + 9: uint16(40460), + 10: uint16(40461), + 11: uint16(40462), + 12: uint16(40463), + 13: uint16(40464), + 14: uint16(40465), + 15: uint16(40466), + 16: uint16(40467), + 17: uint16(40468), + 18: uint16(40469), + 19: uint16(40470), + 20: uint16(40471), + 21: uint16(40472), + 22: uint16(40473), + 23: uint16(40474), + 24: uint16(40475), + 25: uint16(40476), + 26: uint16(40477), + 27: uint16(40478), + 28: uint16(40484), + 29: uint16(40487), + 30: uint16(40494), + 31: uint16(40496), + 32: uint16(40500), + 33: uint16(40507), + 34: uint16(40508), + 35: uint16(40512), + 36: uint16(40525), + 37: uint16(40528), + 38: uint16(40530), + 39: uint16(40531), + 40: uint16(40532), + 41: uint16(40534), + 42: uint16(40537), + 43: uint16(40541), + 44: uint16(40543), + 45: uint16(40544), + 46: uint16(40545), + 47: uint16(40546), + 48: uint16(40549), + 49: uint16(40558), + 50: uint16(40559), + 51: uint16(40562), + 52: uint16(40564), + 53: uint16(40565), + 54: uint16(40566), + 55: uint16(40567), + 56: uint16(40568), + 57: uint16(40569), + 58: uint16(40570), + 59: uint16(40571), + 60: uint16(40572), + 61: uint16(40573), + 62: uint16(40576), + 63: uint16(40577), + 64: uint16(40579), + 65: uint16(40580), + 66: uint16(40581), + 67: uint16(40582), + 68: uint16(40585), + 69: uint16(40586), + 70: uint16(40588), + 71: uint16(40589), + 72: uint16(40590), + 73: uint16(40591), + 74: uint16(40592), + 75: uint16(40593), + 76: uint16(40596), + 77: uint16(40597), + 78: uint16(40598), + 79: uint16(40599), + 80: uint16(40600), + 81: uint16(40601), + 82: uint16(40602), + 83: uint16(40603), + 84: uint16(40604), + 85: uint16(40606), + 86: uint16(40608), + 87: uint16(40609), + 88: uint16(40610), + 89: uint16(40611), + 90: uint16(40612), + 91: uint16(40613), + 92: uint16(40615), + 93: uint16(40616), + 94: uint16(40617), + 95: uint16(40618), + 96: uint16(58190), + 97: uint16(58191), + 98: uint16(58192), + 99: uint16(58193), + 100: uint16(58194), + 101: uint16(58195), + 102: uint16(58196), + 103: uint16(58197), + 104: uint16(58198), + 105: uint16(58199), + 106: uint16(58200), + 107: uint16(58201), + 108: uint16(58202), + 109: uint16(58203), + 110: uint16(58204), + 111: uint16(58205), + 112: uint16(58206), + 113: uint16(58207), + 114: uint16(58208), + 115: uint16(58209), + 116: uint16(58210), + 117: uint16(58211), + 118: uint16(58212), + 119: uint16(58213), + 120: uint16(58214), + 121: uint16(58215), + 122: uint16(58216), + 123: uint16(58217), + 124: uint16(58218), + 125: uint16(58219), + 126: uint16(58220), + 127: uint16(58221), + 128: uint16(58222), + 129: uint16(58223), + 130: uint16(58224), + 131: uint16(58225), + 132: uint16(58226), + 133: uint16(58227), + 134: uint16(58228), + 135: uint16(58229), + 136: uint16(58230), + 137: uint16(58231), + 138: uint16(58232), + 139: uint16(58233), + 140: uint16(58234), + 141: uint16(58235), + 142: uint16(58236), + 143: uint16(58237), + 144: uint16(58238), + 145: uint16(58239), + 146: uint16(58240), + 147: uint16(58241), + 148: uint16(58242), + 149: uint16(58243), + 150: uint16(58244), + 151: uint16(58245), + 152: uint16(58246), + 153: uint16(58247), + 154: uint16(58248), + 155: uint16(58249), + 156: uint16(58250), + 157: uint16(58251), + 158: uint16(58252), + 159: uint16(58253), + 160: uint16(58254), + 161: uint16(58255), + 162: uint16(58256), + 163: uint16(58257), + 164: uint16(58258), + 165: uint16(58259), + 166: uint16(58260), + 167: uint16(58261), + 168: uint16(58262), + 169: uint16(58263), + 170: uint16(58264), + 171: uint16(58265), + 172: uint16(58266), + 173: uint16(58267), + 174: uint16(58268), + 175: uint16(58269), + 176: uint16(58270), + 177: uint16(58271), + 178: uint16(58272), + 179: uint16(58273), + 180: uint16(58274), + 181: uint16(58275), + 182: uint16(58276), + 183: uint16(58277), + 184: uint16(58278), + 185: uint16(58279), + 186: uint16(58280), + 187: uint16(58281), + 188: uint16(58282), + 189: uint16(58283), + }, + 123: { + 0: uint16(40619), + 1: uint16(40620), + 2: uint16(40621), + 3: uint16(40622), + 4: uint16(40623), + 5: uint16(40624), + 6: uint16(40625), + 7: uint16(40626), + 8: uint16(40627), + 9: uint16(40629), + 10: uint16(40630), + 11: uint16(40631), + 12: uint16(40633), + 13: uint16(40634), + 14: uint16(40636), + 15: uint16(40639), + 16: uint16(40640), + 17: uint16(40641), + 18: uint16(40642), + 19: uint16(40643), + 20: uint16(40645), + 21: uint16(40646), + 22: uint16(40647), + 23: uint16(40648), + 24: uint16(40650), + 25: uint16(40651), + 26: uint16(40652), + 27: uint16(40656), + 28: uint16(40658), + 29: uint16(40659), + 30: uint16(40661), + 31: uint16(40662), + 32: uint16(40663), + 33: uint16(40665), + 34: uint16(40666), + 35: uint16(40670), + 36: uint16(40673), + 37: uint16(40675), + 38: uint16(40676), + 39: uint16(40678), + 40: uint16(40680), + 41: uint16(40683), + 42: uint16(40684), + 43: uint16(40685), + 44: uint16(40686), + 45: uint16(40688), + 46: uint16(40689), + 47: uint16(40690), + 48: uint16(40691), + 49: uint16(40692), + 50: uint16(40693), + 51: uint16(40694), + 52: uint16(40695), + 53: uint16(40696), + 54: uint16(40698), + 55: uint16(40701), + 56: uint16(40703), + 57: uint16(40704), + 58: uint16(40705), + 59: uint16(40706), + 60: uint16(40707), + 61: uint16(40708), + 62: uint16(40709), + 63: uint16(40710), + 64: uint16(40711), + 65: uint16(40712), + 66: uint16(40713), + 67: uint16(40714), + 68: uint16(40716), + 69: uint16(40719), + 70: uint16(40721), + 71: uint16(40722), + 72: uint16(40724), + 73: uint16(40725), + 74: uint16(40726), + 75: uint16(40728), + 76: uint16(40730), + 77: uint16(40731), + 78: uint16(40732), + 79: uint16(40733), + 80: uint16(40734), + 81: uint16(40735), + 82: uint16(40737), + 83: uint16(40739), + 84: uint16(40740), + 85: uint16(40741), + 86: uint16(40742), + 87: uint16(40743), + 88: uint16(40744), + 89: uint16(40745), + 90: uint16(40746), + 91: uint16(40747), + 92: uint16(40749), + 93: uint16(40750), + 94: uint16(40752), + 95: uint16(40753), + 96: uint16(58284), + 97: uint16(58285), + 98: uint16(58286), + 99: uint16(58287), + 100: uint16(58288), + 101: uint16(58289), + 102: uint16(58290), + 103: uint16(58291), + 104: uint16(58292), + 105: uint16(58293), + 106: uint16(58294), + 107: uint16(58295), + 108: uint16(58296), + 109: uint16(58297), + 110: uint16(58298), + 111: uint16(58299), + 112: uint16(58300), + 113: uint16(58301), + 114: uint16(58302), + 115: uint16(58303), + 116: uint16(58304), + 117: uint16(58305), + 118: uint16(58306), + 119: uint16(58307), + 120: uint16(58308), + 121: uint16(58309), + 122: uint16(58310), + 123: uint16(58311), + 124: uint16(58312), + 125: uint16(58313), + 126: uint16(58314), + 127: uint16(58315), + 128: uint16(58316), + 129: uint16(58317), + 130: uint16(58318), + 131: uint16(58319), + 132: uint16(58320), + 133: uint16(58321), + 134: uint16(58322), + 135: uint16(58323), + 136: uint16(58324), + 137: uint16(58325), + 138: uint16(58326), + 139: uint16(58327), + 140: uint16(58328), + 141: uint16(58329), + 142: uint16(58330), + 143: uint16(58331), + 144: uint16(58332), + 145: uint16(58333), + 146: uint16(58334), + 147: uint16(58335), + 148: uint16(58336), + 149: uint16(58337), + 150: uint16(58338), + 151: uint16(58339), + 152: uint16(58340), + 153: uint16(58341), + 154: uint16(58342), + 155: uint16(58343), + 156: uint16(58344), + 157: uint16(58345), + 158: uint16(58346), + 159: uint16(58347), + 160: uint16(58348), + 161: uint16(58349), + 162: uint16(58350), + 163: uint16(58351), + 164: uint16(58352), + 165: uint16(58353), + 166: uint16(58354), + 167: uint16(58355), + 168: uint16(58356), + 169: uint16(58357), + 170: uint16(58358), + 171: uint16(58359), + 172: uint16(58360), + 173: uint16(58361), + 174: uint16(58362), + 175: uint16(58363), + 176: uint16(58364), + 177: uint16(58365), + 178: uint16(58366), + 179: uint16(58367), + 180: uint16(58368), + 181: uint16(58369), + 182: uint16(58370), + 183: uint16(58371), + 184: uint16(58372), + 185: uint16(58373), + 186: uint16(58374), + 187: uint16(58375), + 188: uint16(58376), + 189: uint16(58377), + }, + 124: { + 0: uint16(40754), + 1: uint16(40755), + 2: uint16(40756), + 3: uint16(40757), + 4: uint16(40758), + 5: uint16(40760), + 6: uint16(40762), + 7: uint16(40764), + 8: uint16(40767), + 9: uint16(40768), + 10: uint16(40769), + 11: uint16(40770), + 12: uint16(40771), + 13: uint16(40773), + 14: uint16(40774), + 15: uint16(40775), + 16: uint16(40776), + 17: uint16(40777), + 18: uint16(40778), + 19: uint16(40779), + 20: uint16(40780), + 21: uint16(40781), + 22: uint16(40782), + 23: uint16(40783), + 24: uint16(40786), + 25: uint16(40787), + 26: uint16(40788), + 27: uint16(40789), + 28: uint16(40790), + 29: uint16(40791), + 30: uint16(40792), + 31: uint16(40793), + 32: uint16(40794), + 33: uint16(40795), + 34: uint16(40796), + 35: uint16(40797), + 36: uint16(40798), + 37: uint16(40799), + 38: uint16(40800), + 39: uint16(40801), + 40: uint16(40802), + 41: uint16(40803), + 42: uint16(40804), + 43: uint16(40805), + 44: uint16(40806), + 45: uint16(40807), + 46: uint16(40808), + 47: uint16(40809), + 48: uint16(40810), + 49: uint16(40811), + 50: uint16(40812), + 51: uint16(40813), + 52: uint16(40814), + 53: uint16(40815), + 54: uint16(40816), + 55: uint16(40817), + 56: uint16(40818), + 57: uint16(40819), + 58: uint16(40820), + 59: uint16(40821), + 60: uint16(40822), + 61: uint16(40823), + 62: uint16(40824), + 63: uint16(40825), + 64: uint16(40826), + 65: uint16(40827), + 66: uint16(40828), + 67: uint16(40829), + 68: uint16(40830), + 69: uint16(40833), + 70: uint16(40834), + 71: uint16(40845), + 72: uint16(40846), + 73: uint16(40847), + 74: uint16(40848), + 75: uint16(40849), + 76: uint16(40850), + 77: uint16(40851), + 78: uint16(40852), + 79: uint16(40853), + 80: uint16(40854), + 81: uint16(40855), + 82: uint16(40856), + 83: uint16(40860), + 84: uint16(40861), + 85: uint16(40862), + 86: uint16(40865), + 87: uint16(40866), + 88: uint16(40867), + 89: uint16(40868), + 90: uint16(40869), + 91: uint16(63788), + 92: uint16(63865), + 93: uint16(63893), + 94: uint16(63975), + 95: uint16(63985), + 96: uint16(58378), + 97: uint16(58379), + 98: uint16(58380), + 99: uint16(58381), + 100: uint16(58382), + 101: uint16(58383), + 102: uint16(58384), + 103: uint16(58385), + 104: uint16(58386), + 105: uint16(58387), + 106: uint16(58388), + 107: uint16(58389), + 108: uint16(58390), + 109: uint16(58391), + 110: uint16(58392), + 111: uint16(58393), + 112: uint16(58394), + 113: uint16(58395), + 114: uint16(58396), + 115: uint16(58397), + 116: uint16(58398), + 117: uint16(58399), + 118: uint16(58400), + 119: uint16(58401), + 120: uint16(58402), + 121: uint16(58403), + 122: uint16(58404), + 123: uint16(58405), + 124: uint16(58406), + 125: uint16(58407), + 126: uint16(58408), + 127: uint16(58409), + 128: uint16(58410), + 129: uint16(58411), + 130: uint16(58412), + 131: uint16(58413), + 132: uint16(58414), + 133: uint16(58415), + 134: uint16(58416), + 135: uint16(58417), + 136: uint16(58418), + 137: uint16(58419), + 138: uint16(58420), + 139: uint16(58421), + 140: uint16(58422), + 141: uint16(58423), + 142: uint16(58424), + 143: uint16(58425), + 144: uint16(58426), + 145: uint16(58427), + 146: uint16(58428), + 147: uint16(58429), + 148: uint16(58430), + 149: uint16(58431), + 150: uint16(58432), + 151: uint16(58433), + 152: uint16(58434), + 153: uint16(58435), + 154: uint16(58436), + 155: uint16(58437), + 156: uint16(58438), + 157: uint16(58439), + 158: uint16(58440), + 159: uint16(58441), + 160: uint16(58442), + 161: uint16(58443), + 162: uint16(58444), + 163: uint16(58445), + 164: uint16(58446), + 165: uint16(58447), + 166: uint16(58448), + 167: uint16(58449), + 168: uint16(58450), + 169: uint16(58451), + 170: uint16(58452), + 171: uint16(58453), + 172: uint16(58454), + 173: uint16(58455), + 174: uint16(58456), + 175: uint16(58457), + 176: uint16(58458), + 177: uint16(58459), + 178: uint16(58460), + 179: uint16(58461), + 180: uint16(58462), + 181: uint16(58463), + 182: uint16(58464), + 183: uint16(58465), + 184: uint16(58466), + 185: uint16(58467), + 186: uint16(58468), + 187: uint16(58469), + 188: uint16(58470), + 189: uint16(58471), + }, + 125: { + 0: uint16(64012), + 1: uint16(64013), + 2: uint16(64014), + 3: uint16(64015), + 4: uint16(64017), + 5: uint16(64019), + 6: uint16(64020), + 7: uint16(64024), + 8: uint16(64031), + 9: uint16(64032), + 10: uint16(64033), + 11: uint16(64035), + 12: uint16(64036), + 13: uint16(64039), + 14: uint16(64040), + 15: uint16(64041), + 16: uint16(11905), + 17: uint16(59414), + 18: uint16(59415), + 19: uint16(59416), + 20: uint16(11908), + 21: uint16(13427), + 22: uint16(13383), + 23: uint16(11912), + 24: uint16(11915), + 25: uint16(59422), + 26: uint16(13726), + 27: uint16(13850), + 28: uint16(13838), + 29: uint16(11916), + 30: uint16(11927), + 31: uint16(14702), + 32: uint16(14616), + 33: uint16(59430), + 34: uint16(14799), + 35: uint16(14815), + 36: uint16(14963), + 37: uint16(14800), + 38: uint16(59435), + 39: uint16(59436), + 40: uint16(15182), + 41: uint16(15470), + 42: uint16(15584), + 43: uint16(11943), + 44: uint16(59441), + 45: uint16(59442), + 46: uint16(11946), + 47: uint16(16470), + 48: uint16(16735), + 49: uint16(11950), + 50: uint16(17207), + 51: uint16(11955), + 52: uint16(11958), + 53: uint16(11959), + 54: uint16(59451), + 55: uint16(17329), + 56: uint16(17324), + 57: uint16(11963), + 58: uint16(17373), + 59: uint16(17622), + 60: uint16(18017), + 61: uint16(17996), + 62: uint16(59459), + 63: uint16(18211), + 64: uint16(18217), + 65: uint16(18300), + 66: uint16(18317), + 67: uint16(11978), + 68: uint16(18759), + 69: uint16(18810), + 70: uint16(18813), + 71: uint16(18818), + 72: uint16(18819), + 73: uint16(18821), + 74: uint16(18822), + 75: uint16(18847), + 76: uint16(18843), + 77: uint16(18871), + 78: uint16(18870), + 79: uint16(59476), + 80: uint16(59477), + 81: uint16(19619), + 82: uint16(19615), + 83: uint16(19616), + 84: uint16(19617), + 85: uint16(19575), + 86: uint16(19618), + 87: uint16(19731), + 88: uint16(19732), + 89: uint16(19733), + 90: uint16(19734), + 91: uint16(19735), + 92: uint16(19736), + 93: uint16(19737), + 94: uint16(19886), + 95: uint16(59492), + 96: uint16(58472), + 97: uint16(58473), + 98: uint16(58474), + 99: uint16(58475), + 100: uint16(58476), + 101: uint16(58477), + 102: uint16(58478), + 103: uint16(58479), + 104: uint16(58480), + 105: uint16(58481), + 106: uint16(58482), + 107: uint16(58483), + 108: uint16(58484), + 109: uint16(58485), + 110: uint16(58486), + 111: uint16(58487), + 112: uint16(58488), + 113: uint16(58489), + 114: uint16(58490), + 115: uint16(58491), + 116: uint16(58492), + 117: uint16(58493), + 118: uint16(58494), + 119: uint16(58495), + 120: uint16(58496), + 121: uint16(58497), + 122: uint16(58498), + 123: uint16(58499), + 124: uint16(58500), + 125: uint16(58501), + 126: uint16(58502), + 127: uint16(58503), + 128: uint16(58504), + 129: uint16(58505), + 130: uint16(58506), + 131: uint16(58507), + 132: uint16(58508), + 133: uint16(58509), + 134: uint16(58510), + 135: uint16(58511), + 136: uint16(58512), + 137: uint16(58513), + 138: uint16(58514), + 139: uint16(58515), + 140: uint16(58516), + 141: uint16(58517), + 142: uint16(58518), + 143: uint16(58519), + 144: uint16(58520), + 145: uint16(58521), + 146: uint16(58522), + 147: uint16(58523), + 148: uint16(58524), + 149: uint16(58525), + 150: uint16(58526), + 151: uint16(58527), + 152: uint16(58528), + 153: uint16(58529), + 154: uint16(58530), + 155: uint16(58531), + 156: uint16(58532), + 157: uint16(58533), + 158: uint16(58534), + 159: uint16(58535), + 160: uint16(58536), + 161: uint16(58537), + 162: uint16(58538), + 163: uint16(58539), + 164: uint16(58540), + 165: uint16(58541), + 166: uint16(58542), + 167: uint16(58543), + 168: uint16(58544), + 169: uint16(58545), + 170: uint16(58546), + 171: uint16(58547), + 172: uint16(58548), + 173: uint16(58549), + 174: uint16(58550), + 175: uint16(58551), + 176: uint16(58552), + 177: uint16(58553), + 178: uint16(58554), + 179: uint16(58555), + 180: uint16(58556), + 181: uint16(58557), + 182: uint16(58558), + 183: uint16(58559), + 184: uint16(58560), + 185: uint16(58561), + 186: uint16(58562), + 187: uint16(58563), + 188: uint16(58564), + 189: uint16(58565), + }, +} + +var _big5 = [89][157]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(65292), + 2: uint16(12289), + 3: uint16(12290), + 4: uint16(65294), + 5: uint16(8231), + 6: uint16(65307), + 7: uint16(65306), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(65072), + 11: uint16(8230), + 12: uint16(8229), + 13: uint16(65104), + 14: uint16(65105), + 15: uint16(65106), + 16: uint16(183), + 17: uint16(65108), + 18: uint16(65109), + 19: uint16(65110), + 20: uint16(65111), + 21: uint16(65372), + 22: uint16(8211), + 23: uint16(65073), + 24: uint16(8212), + 25: uint16(65075), + 26: uint16(9588), + 27: uint16(65076), + 28: uint16(65103), + 29: uint16(65288), + 30: uint16(65289), + 31: uint16(65077), + 32: uint16(65078), + 33: uint16(65371), + 34: uint16(65373), + 35: uint16(65079), + 36: uint16(65080), + 37: uint16(12308), + 38: uint16(12309), + 39: uint16(65081), + 40: uint16(65082), + 41: uint16(12304), + 42: uint16(12305), + 43: uint16(65083), + 44: uint16(65084), + 45: uint16(12298), + 46: uint16(12299), + 47: uint16(65085), + 48: uint16(65086), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(65087), + 52: uint16(65088), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(65089), + 56: uint16(65090), + 57: uint16(12302), + 58: uint16(12303), + 59: uint16(65091), + 60: uint16(65092), + 61: uint16(65113), + 62: uint16(65114), + 63: uint16(65115), + 64: uint16(65116), + 65: uint16(65117), + 66: uint16(65118), + 67: uint16(8216), + 68: uint16(8217), + 69: uint16(8220), + 70: uint16(8221), + 71: uint16(12317), + 72: uint16(12318), + 73: uint16(8245), + 74: uint16(8242), + 75: uint16(65283), + 76: uint16(65286), + 77: uint16(65290), + 78: uint16(8251), + 79: uint16(167), + 80: uint16(12291), + 81: uint16(9675), + 82: uint16(9679), + 83: uint16(9651), + 84: uint16(9650), + 85: uint16(9678), + 86: uint16(9734), + 87: uint16(9733), + 88: uint16(9671), + 89: uint16(9670), + 90: uint16(9633), + 91: uint16(9632), + 92: uint16(9661), + 93: uint16(9660), + 94: uint16(12963), + 95: uint16(8453), + 96: uint16(175), + 97: uint16(65507), + 98: uint16(65343), + 99: uint16(717), + 100: uint16(65097), + 101: uint16(65098), + 102: uint16(65101), + 103: uint16(65102), + 104: uint16(65099), + 105: uint16(65100), + 106: uint16(65119), + 107: uint16(65120), + 108: uint16(65121), + 109: uint16(65291), + 110: uint16(65293), + 111: uint16(215), + 112: uint16(247), + 113: uint16(177), + 114: uint16(8730), + 115: uint16(65308), + 116: uint16(65310), + 117: uint16(65309), + 118: uint16(8806), + 119: uint16(8807), + 120: uint16(8800), + 121: uint16(8734), + 122: uint16(8786), + 123: uint16(8801), + 124: uint16(65122), + 125: uint16(65123), + 126: uint16(65124), + 127: uint16(65125), + 128: uint16(65126), + 129: uint16(65374), + 130: uint16(8745), + 131: uint16(8746), + 132: uint16(8869), + 133: uint16(8736), + 134: uint16(8735), + 135: uint16(8895), + 136: uint16(13266), + 137: uint16(13265), + 138: uint16(8747), + 139: uint16(8750), + 140: uint16(8757), + 141: uint16(8756), + 142: uint16(9792), + 143: uint16(9794), + 144: uint16(8853), + 145: uint16(8857), + 146: uint16(8593), + 147: uint16(8595), + 148: uint16(8592), + 149: uint16(8594), + 150: uint16(8598), + 151: uint16(8599), + 152: uint16(8601), + 153: uint16(8600), + 154: uint16(8741), + 155: uint16(8739), + 156: uint16(65295), + }, + 1: { + 0: uint16(65340), + 1: uint16(8725), + 2: uint16(65128), + 3: uint16(65284), + 4: uint16(65509), + 5: uint16(12306), + 6: uint16(65504), + 7: uint16(65505), + 8: uint16(65285), + 9: uint16(65312), + 10: uint16(8451), + 11: uint16(8457), + 12: uint16(65129), + 13: uint16(65130), + 14: uint16(65131), + 15: uint16(13269), + 16: uint16(13212), + 17: uint16(13213), + 18: uint16(13214), + 19: uint16(13262), + 20: uint16(13217), + 21: uint16(13198), + 22: uint16(13199), + 23: uint16(13252), + 24: uint16(176), + 25: uint16(20825), + 26: uint16(20827), + 27: uint16(20830), + 28: uint16(20829), + 29: uint16(20833), + 30: uint16(20835), + 31: uint16(21991), + 32: uint16(29929), + 33: uint16(31950), + 34: uint16(9601), + 35: uint16(9602), + 36: uint16(9603), + 37: uint16(9604), + 38: uint16(9605), + 39: uint16(9606), + 40: uint16(9607), + 41: uint16(9608), + 42: uint16(9615), + 43: uint16(9614), + 44: uint16(9613), + 45: uint16(9612), + 46: uint16(9611), + 47: uint16(9610), + 48: uint16(9609), + 49: uint16(9532), + 50: uint16(9524), + 51: uint16(9516), + 52: uint16(9508), + 53: uint16(9500), + 54: uint16(9620), + 55: uint16(9472), + 56: uint16(9474), + 57: uint16(9621), + 58: uint16(9484), + 59: uint16(9488), + 60: uint16(9492), + 61: uint16(9496), + 62: uint16(9581), + 63: uint16(9582), + 64: uint16(9584), + 65: uint16(9583), + 66: uint16(9552), + 67: uint16(9566), + 68: uint16(9578), + 69: uint16(9569), + 70: uint16(9698), + 71: uint16(9699), + 72: uint16(9701), + 73: uint16(9700), + 74: uint16(9585), + 75: uint16(9586), + 76: uint16(9587), + 77: uint16(65296), + 78: uint16(65297), + 79: uint16(65298), + 80: uint16(65299), + 81: uint16(65300), + 82: uint16(65301), + 83: uint16(65302), + 84: uint16(65303), + 85: uint16(65304), + 86: uint16(65305), + 87: uint16(8544), + 88: uint16(8545), + 89: uint16(8546), + 90: uint16(8547), + 91: uint16(8548), + 92: uint16(8549), + 93: uint16(8550), + 94: uint16(8551), + 95: uint16(8552), + 96: uint16(8553), + 97: uint16(12321), + 98: uint16(12322), + 99: uint16(12323), + 100: uint16(12324), + 101: uint16(12325), + 102: uint16(12326), + 103: uint16(12327), + 104: uint16(12328), + 105: uint16(12329), + 106: uint16(21313), + 107: uint16(21316), + 108: uint16(21317), + 109: uint16(65313), + 110: uint16(65314), + 111: uint16(65315), + 112: uint16(65316), + 113: uint16(65317), + 114: uint16(65318), + 115: uint16(65319), + 116: uint16(65320), + 117: uint16(65321), + 118: uint16(65322), + 119: uint16(65323), + 120: uint16(65324), + 121: uint16(65325), + 122: uint16(65326), + 123: uint16(65327), + 124: uint16(65328), + 125: uint16(65329), + 126: uint16(65330), + 127: uint16(65331), + 128: uint16(65332), + 129: uint16(65333), + 130: uint16(65334), + 131: uint16(65335), + 132: uint16(65336), + 133: uint16(65337), + 134: uint16(65338), + 135: uint16(65345), + 136: uint16(65346), + 137: uint16(65347), + 138: uint16(65348), + 139: uint16(65349), + 140: uint16(65350), + 141: uint16(65351), + 142: uint16(65352), + 143: uint16(65353), + 144: uint16(65354), + 145: uint16(65355), + 146: uint16(65356), + 147: uint16(65357), + 148: uint16(65358), + 149: uint16(65359), + 150: uint16(65360), + 151: uint16(65361), + 152: uint16(65362), + 153: uint16(65363), + 154: uint16(65364), + 155: uint16(65365), + 156: uint16(65366), + }, + 2: { + 0: uint16(65367), + 1: uint16(65368), + 2: uint16(65369), + 3: uint16(65370), + 4: uint16(913), + 5: uint16(914), + 6: uint16(915), + 7: uint16(916), + 8: uint16(917), + 9: uint16(918), + 10: uint16(919), + 11: uint16(920), + 12: uint16(921), + 13: uint16(922), + 14: uint16(923), + 15: uint16(924), + 16: uint16(925), + 17: uint16(926), + 18: uint16(927), + 19: uint16(928), + 20: uint16(929), + 21: uint16(931), + 22: uint16(932), + 23: uint16(933), + 24: uint16(934), + 25: uint16(935), + 26: uint16(936), + 27: uint16(937), + 28: uint16(945), + 29: uint16(946), + 30: uint16(947), + 31: uint16(948), + 32: uint16(949), + 33: uint16(950), + 34: uint16(951), + 35: uint16(952), + 36: uint16(953), + 37: uint16(954), + 38: uint16(955), + 39: uint16(956), + 40: uint16(957), + 41: uint16(958), + 42: uint16(959), + 43: uint16(960), + 44: uint16(961), + 45: uint16(963), + 46: uint16(964), + 47: uint16(965), + 48: uint16(966), + 49: uint16(967), + 50: uint16(968), + 51: uint16(969), + 52: uint16(12549), + 53: uint16(12550), + 54: uint16(12551), + 55: uint16(12552), + 56: uint16(12553), + 57: uint16(12554), + 58: uint16(12555), + 59: uint16(12556), + 60: uint16(12557), + 61: uint16(12558), + 62: uint16(12559), + 63: uint16(12560), + 64: uint16(12561), + 65: uint16(12562), + 66: uint16(12563), + 67: uint16(12564), + 68: uint16(12565), + 69: uint16(12566), + 70: uint16(12567), + 71: uint16(12568), + 72: uint16(12569), + 73: uint16(12570), + 74: uint16(12571), + 75: uint16(12572), + 76: uint16(12573), + 77: uint16(12574), + 78: uint16(12575), + 79: uint16(12576), + 80: uint16(12577), + 81: uint16(12578), + 82: uint16(12579), + 83: uint16(12580), + 84: uint16(12581), + 85: uint16(12582), + 86: uint16(12583), + 87: uint16(12584), + 88: uint16(12585), + 89: uint16(729), + 90: uint16(713), + 91: uint16(714), + 92: uint16(711), + 93: uint16(715), + 94: uint16(9216), + 95: uint16(9217), + 96: uint16(9218), + 97: uint16(9219), + 98: uint16(9220), + 99: uint16(9221), + 100: uint16(9222), + 101: uint16(9223), + 102: uint16(9224), + 103: uint16(9225), + 104: uint16(9226), + 105: uint16(9227), + 106: uint16(9228), + 107: uint16(9229), + 108: uint16(9230), + 109: uint16(9231), + 110: uint16(9232), + 111: uint16(9233), + 112: uint16(9234), + 113: uint16(9235), + 114: uint16(9236), + 115: uint16(9237), + 116: uint16(9238), + 117: uint16(9239), + 118: uint16(9240), + 119: uint16(9241), + 120: uint16(9242), + 121: uint16(9243), + 122: uint16(9244), + 123: uint16(9245), + 124: uint16(9246), + 125: uint16(9247), + 126: uint16(9249), + 127: uint16(8364), + }, + 3: { + 0: uint16(19968), + 1: uint16(20057), + 2: uint16(19969), + 3: uint16(19971), + 4: uint16(20035), + 5: uint16(20061), + 6: uint16(20102), + 7: uint16(20108), + 8: uint16(20154), + 9: uint16(20799), + 10: uint16(20837), + 11: uint16(20843), + 12: uint16(20960), + 13: uint16(20992), + 14: uint16(20993), + 15: uint16(21147), + 16: uint16(21269), + 17: uint16(21313), + 18: uint16(21340), + 19: uint16(21448), + 20: uint16(19977), + 21: uint16(19979), + 22: uint16(19976), + 23: uint16(19978), + 24: uint16(20011), + 25: uint16(20024), + 26: uint16(20961), + 27: uint16(20037), + 28: uint16(20040), + 29: uint16(20063), + 30: uint16(20062), + 31: uint16(20110), + 32: uint16(20129), + 33: uint16(20800), + 34: uint16(20995), + 35: uint16(21242), + 36: uint16(21315), + 37: uint16(21449), + 38: uint16(21475), + 39: uint16(22303), + 40: uint16(22763), + 41: uint16(22805), + 42: uint16(22823), + 43: uint16(22899), + 44: uint16(23376), + 45: uint16(23377), + 46: uint16(23379), + 47: uint16(23544), + 48: uint16(23567), + 49: uint16(23586), + 50: uint16(23608), + 51: uint16(23665), + 52: uint16(24029), + 53: uint16(24037), + 54: uint16(24049), + 55: uint16(24050), + 56: uint16(24051), + 57: uint16(24062), + 58: uint16(24178), + 59: uint16(24318), + 60: uint16(24331), + 61: uint16(24339), + 62: uint16(25165), + 63: uint16(19985), + 64: uint16(19984), + 65: uint16(19981), + 66: uint16(20013), + 67: uint16(20016), + 68: uint16(20025), + 69: uint16(20043), + 70: uint16(23609), + 71: uint16(20104), + 72: uint16(20113), + 73: uint16(20117), + 74: uint16(20114), + 75: uint16(20116), + 76: uint16(20130), + 77: uint16(20161), + 78: uint16(20160), + 79: uint16(20163), + 80: uint16(20166), + 81: uint16(20167), + 82: uint16(20173), + 83: uint16(20170), + 84: uint16(20171), + 85: uint16(20164), + 86: uint16(20803), + 87: uint16(20801), + 88: uint16(20839), + 89: uint16(20845), + 90: uint16(20846), + 91: uint16(20844), + 92: uint16(20887), + 93: uint16(20982), + 94: uint16(20998), + 95: uint16(20999), + 96: uint16(21000), + 97: uint16(21243), + 98: uint16(21246), + 99: uint16(21247), + 100: uint16(21270), + 101: uint16(21305), + 102: uint16(21320), + 103: uint16(21319), + 104: uint16(21317), + 105: uint16(21342), + 106: uint16(21380), + 107: uint16(21451), + 108: uint16(21450), + 109: uint16(21453), + 110: uint16(22764), + 111: uint16(22825), + 112: uint16(22827), + 113: uint16(22826), + 114: uint16(22829), + 115: uint16(23380), + 116: uint16(23569), + 117: uint16(23588), + 118: uint16(23610), + 119: uint16(23663), + 120: uint16(24052), + 121: uint16(24187), + 122: uint16(24319), + 123: uint16(24340), + 124: uint16(24341), + 125: uint16(24515), + 126: uint16(25096), + 127: uint16(25142), + 128: uint16(25163), + 129: uint16(25166), + 130: uint16(25903), + 131: uint16(25991), + 132: uint16(26007), + 133: uint16(26020), + 134: uint16(26041), + 135: uint16(26085), + 136: uint16(26352), + 137: uint16(26376), + 138: uint16(26408), + 139: uint16(27424), + 140: uint16(27490), + 141: uint16(27513), + 142: uint16(27595), + 143: uint16(27604), + 144: uint16(27611), + 145: uint16(27663), + 146: uint16(27700), + 147: uint16(28779), + 148: uint16(29226), + 149: uint16(29238), + 150: uint16(29243), + 151: uint16(29255), + 152: uint16(29273), + 153: uint16(29275), + 154: uint16(29356), + 155: uint16(29579), + 156: uint16(19993), + }, + 4: { + 0: uint16(19990), + 1: uint16(19989), + 2: uint16(19988), + 3: uint16(19992), + 4: uint16(20027), + 5: uint16(20045), + 6: uint16(20047), + 7: uint16(20046), + 8: uint16(20197), + 9: uint16(20184), + 10: uint16(20180), + 11: uint16(20181), + 12: uint16(20182), + 13: uint16(20183), + 14: uint16(20195), + 15: uint16(20196), + 16: uint16(20185), + 17: uint16(20190), + 18: uint16(20805), + 19: uint16(20804), + 20: uint16(20873), + 21: uint16(20874), + 22: uint16(20908), + 23: uint16(20985), + 24: uint16(20986), + 25: uint16(20984), + 26: uint16(21002), + 27: uint16(21152), + 28: uint16(21151), + 29: uint16(21253), + 30: uint16(21254), + 31: uint16(21271), + 32: uint16(21277), + 33: uint16(20191), + 34: uint16(21322), + 35: uint16(21321), + 36: uint16(21345), + 37: uint16(21344), + 38: uint16(21359), + 39: uint16(21358), + 40: uint16(21435), + 41: uint16(21487), + 42: uint16(21476), + 43: uint16(21491), + 44: uint16(21484), + 45: uint16(21486), + 46: uint16(21481), + 47: uint16(21480), + 48: uint16(21500), + 49: uint16(21496), + 50: uint16(21493), + 51: uint16(21483), + 52: uint16(21478), + 53: uint16(21482), + 54: uint16(21490), + 55: uint16(21489), + 56: uint16(21488), + 57: uint16(21477), + 58: uint16(21485), + 59: uint16(21499), + 60: uint16(22235), + 61: uint16(22234), + 62: uint16(22806), + 63: uint16(22830), + 64: uint16(22833), + 65: uint16(22900), + 66: uint16(22902), + 67: uint16(23381), + 68: uint16(23427), + 69: uint16(23612), + 70: uint16(24040), + 71: uint16(24039), + 72: uint16(24038), + 73: uint16(24066), + 74: uint16(24067), + 75: uint16(24179), + 76: uint16(24188), + 77: uint16(24321), + 78: uint16(24344), + 79: uint16(24343), + 80: uint16(24517), + 81: uint16(25098), + 82: uint16(25171), + 83: uint16(25172), + 84: uint16(25170), + 85: uint16(25169), + 86: uint16(26021), + 87: uint16(26086), + 88: uint16(26414), + 89: uint16(26412), + 90: uint16(26410), + 91: uint16(26411), + 92: uint16(26413), + 93: uint16(27491), + 94: uint16(27597), + 95: uint16(27665), + 96: uint16(27664), + 97: uint16(27704), + 98: uint16(27713), + 99: uint16(27712), + 100: uint16(27710), + 101: uint16(29359), + 102: uint16(29572), + 103: uint16(29577), + 104: uint16(29916), + 105: uint16(29926), + 106: uint16(29976), + 107: uint16(29983), + 108: uint16(29992), + 109: uint16(29993), + 110: uint16(30000), + 111: uint16(30001), + 112: uint16(30002), + 113: uint16(30003), + 114: uint16(30091), + 115: uint16(30333), + 116: uint16(30382), + 117: uint16(30399), + 118: uint16(30446), + 119: uint16(30683), + 120: uint16(30690), + 121: uint16(30707), + 122: uint16(31034), + 123: uint16(31166), + 124: uint16(31348), + 125: uint16(31435), + 126: uint16(19998), + 127: uint16(19999), + 128: uint16(20050), + 129: uint16(20051), + 130: uint16(20073), + 131: uint16(20121), + 132: uint16(20132), + 133: uint16(20134), + 134: uint16(20133), + 135: uint16(20223), + 136: uint16(20233), + 137: uint16(20249), + 138: uint16(20234), + 139: uint16(20245), + 140: uint16(20237), + 141: uint16(20240), + 142: uint16(20241), + 143: uint16(20239), + 144: uint16(20210), + 145: uint16(20214), + 146: uint16(20219), + 147: uint16(20208), + 148: uint16(20211), + 149: uint16(20221), + 150: uint16(20225), + 151: uint16(20235), + 152: uint16(20809), + 153: uint16(20807), + 154: uint16(20806), + 155: uint16(20808), + 156: uint16(20840), + }, + 5: { + 0: uint16(20849), + 1: uint16(20877), + 2: uint16(20912), + 3: uint16(21015), + 4: uint16(21009), + 5: uint16(21010), + 6: uint16(21006), + 7: uint16(21014), + 8: uint16(21155), + 9: uint16(21256), + 10: uint16(21281), + 11: uint16(21280), + 12: uint16(21360), + 13: uint16(21361), + 14: uint16(21513), + 15: uint16(21519), + 16: uint16(21516), + 17: uint16(21514), + 18: uint16(21520), + 19: uint16(21505), + 20: uint16(21515), + 21: uint16(21508), + 22: uint16(21521), + 23: uint16(21517), + 24: uint16(21512), + 25: uint16(21507), + 26: uint16(21518), + 27: uint16(21510), + 28: uint16(21522), + 29: uint16(22240), + 30: uint16(22238), + 31: uint16(22237), + 32: uint16(22323), + 33: uint16(22320), + 34: uint16(22312), + 35: uint16(22317), + 36: uint16(22316), + 37: uint16(22319), + 38: uint16(22313), + 39: uint16(22809), + 40: uint16(22810), + 41: uint16(22839), + 42: uint16(22840), + 43: uint16(22916), + 44: uint16(22904), + 45: uint16(22915), + 46: uint16(22909), + 47: uint16(22905), + 48: uint16(22914), + 49: uint16(22913), + 50: uint16(23383), + 51: uint16(23384), + 52: uint16(23431), + 53: uint16(23432), + 54: uint16(23429), + 55: uint16(23433), + 56: uint16(23546), + 57: uint16(23574), + 58: uint16(23673), + 59: uint16(24030), + 60: uint16(24070), + 61: uint16(24182), + 62: uint16(24180), + 63: uint16(24335), + 64: uint16(24347), + 65: uint16(24537), + 66: uint16(24534), + 67: uint16(25102), + 68: uint16(25100), + 69: uint16(25101), + 70: uint16(25104), + 71: uint16(25187), + 72: uint16(25179), + 73: uint16(25176), + 74: uint16(25910), + 75: uint16(26089), + 76: uint16(26088), + 77: uint16(26092), + 78: uint16(26093), + 79: uint16(26354), + 80: uint16(26355), + 81: uint16(26377), + 82: uint16(26429), + 83: uint16(26420), + 84: uint16(26417), + 85: uint16(26421), + 86: uint16(27425), + 87: uint16(27492), + 88: uint16(27515), + 89: uint16(27670), + 90: uint16(27741), + 91: uint16(27735), + 92: uint16(27737), + 93: uint16(27743), + 94: uint16(27744), + 95: uint16(27728), + 96: uint16(27733), + 97: uint16(27745), + 98: uint16(27739), + 99: uint16(27725), + 100: uint16(27726), + 101: uint16(28784), + 102: uint16(29279), + 103: uint16(29277), + 104: uint16(30334), + 105: uint16(31481), + 106: uint16(31859), + 107: uint16(31992), + 108: uint16(32566), + 109: uint16(32650), + 110: uint16(32701), + 111: uint16(32769), + 112: uint16(32771), + 113: uint16(32780), + 114: uint16(32786), + 115: uint16(32819), + 116: uint16(32895), + 117: uint16(32905), + 118: uint16(32907), + 119: uint16(32908), + 120: uint16(33251), + 121: uint16(33258), + 122: uint16(33267), + 123: uint16(33276), + 124: uint16(33292), + 125: uint16(33307), + 126: uint16(33311), + 127: uint16(33390), + 128: uint16(33394), + 129: uint16(33406), + 130: uint16(34411), + 131: uint16(34880), + 132: uint16(34892), + 133: uint16(34915), + 134: uint16(35199), + 135: uint16(38433), + 136: uint16(20018), + 137: uint16(20136), + 138: uint16(20301), + 139: uint16(20303), + 140: uint16(20295), + 141: uint16(20311), + 142: uint16(20318), + 143: uint16(20276), + 144: uint16(20315), + 145: uint16(20309), + 146: uint16(20272), + 147: uint16(20304), + 148: uint16(20305), + 149: uint16(20285), + 150: uint16(20282), + 151: uint16(20280), + 152: uint16(20291), + 153: uint16(20308), + 154: uint16(20284), + 155: uint16(20294), + 156: uint16(20323), + }, + 6: { + 0: uint16(20316), + 1: uint16(20320), + 2: uint16(20271), + 3: uint16(20302), + 4: uint16(20278), + 5: uint16(20313), + 6: uint16(20317), + 7: uint16(20296), + 8: uint16(20314), + 9: uint16(20812), + 10: uint16(20811), + 11: uint16(20813), + 12: uint16(20853), + 13: uint16(20918), + 14: uint16(20919), + 15: uint16(21029), + 16: uint16(21028), + 17: uint16(21033), + 18: uint16(21034), + 19: uint16(21032), + 20: uint16(21163), + 21: uint16(21161), + 22: uint16(21162), + 23: uint16(21164), + 24: uint16(21283), + 25: uint16(21363), + 26: uint16(21365), + 27: uint16(21533), + 28: uint16(21549), + 29: uint16(21534), + 30: uint16(21566), + 31: uint16(21542), + 32: uint16(21582), + 33: uint16(21543), + 34: uint16(21574), + 35: uint16(21571), + 36: uint16(21555), + 37: uint16(21576), + 38: uint16(21570), + 39: uint16(21531), + 40: uint16(21545), + 41: uint16(21578), + 42: uint16(21561), + 43: uint16(21563), + 44: uint16(21560), + 45: uint16(21550), + 46: uint16(21557), + 47: uint16(21558), + 48: uint16(21536), + 49: uint16(21564), + 50: uint16(21568), + 51: uint16(21553), + 52: uint16(21547), + 53: uint16(21535), + 54: uint16(21548), + 55: uint16(22250), + 56: uint16(22256), + 57: uint16(22244), + 58: uint16(22251), + 59: uint16(22346), + 60: uint16(22353), + 61: uint16(22336), + 62: uint16(22349), + 63: uint16(22343), + 64: uint16(22350), + 65: uint16(22334), + 66: uint16(22352), + 67: uint16(22351), + 68: uint16(22331), + 69: uint16(22767), + 70: uint16(22846), + 71: uint16(22941), + 72: uint16(22930), + 73: uint16(22952), + 74: uint16(22942), + 75: uint16(22947), + 76: uint16(22937), + 77: uint16(22934), + 78: uint16(22925), + 79: uint16(22948), + 80: uint16(22931), + 81: uint16(22922), + 82: uint16(22949), + 83: uint16(23389), + 84: uint16(23388), + 85: uint16(23386), + 86: uint16(23387), + 87: uint16(23436), + 88: uint16(23435), + 89: uint16(23439), + 90: uint16(23596), + 91: uint16(23616), + 92: uint16(23617), + 93: uint16(23615), + 94: uint16(23614), + 95: uint16(23696), + 96: uint16(23697), + 97: uint16(23700), + 98: uint16(23692), + 99: uint16(24043), + 100: uint16(24076), + 101: uint16(24207), + 102: uint16(24199), + 103: uint16(24202), + 104: uint16(24311), + 105: uint16(24324), + 106: uint16(24351), + 107: uint16(24420), + 108: uint16(24418), + 109: uint16(24439), + 110: uint16(24441), + 111: uint16(24536), + 112: uint16(24524), + 113: uint16(24535), + 114: uint16(24525), + 115: uint16(24561), + 116: uint16(24555), + 117: uint16(24568), + 118: uint16(24554), + 119: uint16(25106), + 120: uint16(25105), + 121: uint16(25220), + 122: uint16(25239), + 123: uint16(25238), + 124: uint16(25216), + 125: uint16(25206), + 126: uint16(25225), + 127: uint16(25197), + 128: uint16(25226), + 129: uint16(25212), + 130: uint16(25214), + 131: uint16(25209), + 132: uint16(25203), + 133: uint16(25234), + 134: uint16(25199), + 135: uint16(25240), + 136: uint16(25198), + 137: uint16(25237), + 138: uint16(25235), + 139: uint16(25233), + 140: uint16(25222), + 141: uint16(25913), + 142: uint16(25915), + 143: uint16(25912), + 144: uint16(26097), + 145: uint16(26356), + 146: uint16(26463), + 147: uint16(26446), + 148: uint16(26447), + 149: uint16(26448), + 150: uint16(26449), + 151: uint16(26460), + 152: uint16(26454), + 153: uint16(26462), + 154: uint16(26441), + 155: uint16(26438), + 156: uint16(26464), + }, + 7: { + 0: uint16(26451), + 1: uint16(26455), + 2: uint16(27493), + 3: uint16(27599), + 4: uint16(27714), + 5: uint16(27742), + 6: uint16(27801), + 7: uint16(27777), + 8: uint16(27784), + 9: uint16(27785), + 10: uint16(27781), + 11: uint16(27803), + 12: uint16(27754), + 13: uint16(27770), + 14: uint16(27792), + 15: uint16(27760), + 16: uint16(27788), + 17: uint16(27752), + 18: uint16(27798), + 19: uint16(27794), + 20: uint16(27773), + 21: uint16(27779), + 22: uint16(27762), + 23: uint16(27774), + 24: uint16(27764), + 25: uint16(27782), + 26: uint16(27766), + 27: uint16(27789), + 28: uint16(27796), + 29: uint16(27800), + 30: uint16(27778), + 31: uint16(28790), + 32: uint16(28796), + 33: uint16(28797), + 34: uint16(28792), + 35: uint16(29282), + 36: uint16(29281), + 37: uint16(29280), + 38: uint16(29380), + 39: uint16(29378), + 40: uint16(29590), + 41: uint16(29996), + 42: uint16(29995), + 43: uint16(30007), + 44: uint16(30008), + 45: uint16(30338), + 46: uint16(30447), + 47: uint16(30691), + 48: uint16(31169), + 49: uint16(31168), + 50: uint16(31167), + 51: uint16(31350), + 52: uint16(31995), + 53: uint16(32597), + 54: uint16(32918), + 55: uint16(32915), + 56: uint16(32925), + 57: uint16(32920), + 58: uint16(32923), + 59: uint16(32922), + 60: uint16(32946), + 61: uint16(33391), + 62: uint16(33426), + 63: uint16(33419), + 64: uint16(33421), + 65: uint16(35211), + 66: uint16(35282), + 67: uint16(35328), + 68: uint16(35895), + 69: uint16(35910), + 70: uint16(35925), + 71: uint16(35997), + 72: uint16(36196), + 73: uint16(36208), + 74: uint16(36275), + 75: uint16(36523), + 76: uint16(36554), + 77: uint16(36763), + 78: uint16(36784), + 79: uint16(36802), + 80: uint16(36806), + 81: uint16(36805), + 82: uint16(36804), + 83: uint16(24033), + 84: uint16(37009), + 85: uint16(37026), + 86: uint16(37034), + 87: uint16(37030), + 88: uint16(37027), + 89: uint16(37193), + 90: uint16(37318), + 91: uint16(37324), + 92: uint16(38450), + 93: uint16(38446), + 94: uint16(38449), + 95: uint16(38442), + 96: uint16(38444), + 97: uint16(20006), + 98: uint16(20054), + 99: uint16(20083), + 100: uint16(20107), + 101: uint16(20123), + 102: uint16(20126), + 103: uint16(20139), + 104: uint16(20140), + 105: uint16(20335), + 106: uint16(20381), + 107: uint16(20365), + 108: uint16(20339), + 109: uint16(20351), + 110: uint16(20332), + 111: uint16(20379), + 112: uint16(20363), + 113: uint16(20358), + 114: uint16(20355), + 115: uint16(20336), + 116: uint16(20341), + 117: uint16(20360), + 118: uint16(20329), + 119: uint16(20347), + 120: uint16(20374), + 121: uint16(20350), + 122: uint16(20367), + 123: uint16(20369), + 124: uint16(20346), + 125: uint16(20820), + 126: uint16(20818), + 127: uint16(20821), + 128: uint16(20841), + 129: uint16(20855), + 130: uint16(20854), + 131: uint16(20856), + 132: uint16(20925), + 133: uint16(20989), + 134: uint16(21051), + 135: uint16(21048), + 136: uint16(21047), + 137: uint16(21050), + 138: uint16(21040), + 139: uint16(21038), + 140: uint16(21046), + 141: uint16(21057), + 142: uint16(21182), + 143: uint16(21179), + 144: uint16(21330), + 145: uint16(21332), + 146: uint16(21331), + 147: uint16(21329), + 148: uint16(21350), + 149: uint16(21367), + 150: uint16(21368), + 151: uint16(21369), + 152: uint16(21462), + 153: uint16(21460), + 154: uint16(21463), + 155: uint16(21619), + 156: uint16(21621), + }, + 8: { + 0: uint16(21654), + 1: uint16(21624), + 2: uint16(21653), + 3: uint16(21632), + 4: uint16(21627), + 5: uint16(21623), + 6: uint16(21636), + 7: uint16(21650), + 8: uint16(21638), + 9: uint16(21628), + 10: uint16(21648), + 11: uint16(21617), + 12: uint16(21622), + 13: uint16(21644), + 14: uint16(21658), + 15: uint16(21602), + 16: uint16(21608), + 17: uint16(21643), + 18: uint16(21629), + 19: uint16(21646), + 20: uint16(22266), + 21: uint16(22403), + 22: uint16(22391), + 23: uint16(22378), + 24: uint16(22377), + 25: uint16(22369), + 26: uint16(22374), + 27: uint16(22372), + 28: uint16(22396), + 29: uint16(22812), + 30: uint16(22857), + 31: uint16(22855), + 32: uint16(22856), + 33: uint16(22852), + 34: uint16(22868), + 35: uint16(22974), + 36: uint16(22971), + 37: uint16(22996), + 38: uint16(22969), + 39: uint16(22958), + 40: uint16(22993), + 41: uint16(22982), + 42: uint16(22992), + 43: uint16(22989), + 44: uint16(22987), + 45: uint16(22995), + 46: uint16(22986), + 47: uint16(22959), + 48: uint16(22963), + 49: uint16(22994), + 50: uint16(22981), + 51: uint16(23391), + 52: uint16(23396), + 53: uint16(23395), + 54: uint16(23447), + 55: uint16(23450), + 56: uint16(23448), + 57: uint16(23452), + 58: uint16(23449), + 59: uint16(23451), + 60: uint16(23578), + 61: uint16(23624), + 62: uint16(23621), + 63: uint16(23622), + 64: uint16(23735), + 65: uint16(23713), + 66: uint16(23736), + 67: uint16(23721), + 68: uint16(23723), + 69: uint16(23729), + 70: uint16(23731), + 71: uint16(24088), + 72: uint16(24090), + 73: uint16(24086), + 74: uint16(24085), + 75: uint16(24091), + 76: uint16(24081), + 77: uint16(24184), + 78: uint16(24218), + 79: uint16(24215), + 80: uint16(24220), + 81: uint16(24213), + 82: uint16(24214), + 83: uint16(24310), + 84: uint16(24358), + 85: uint16(24359), + 86: uint16(24361), + 87: uint16(24448), + 88: uint16(24449), + 89: uint16(24447), + 90: uint16(24444), + 91: uint16(24541), + 92: uint16(24544), + 93: uint16(24573), + 94: uint16(24565), + 95: uint16(24575), + 96: uint16(24591), + 97: uint16(24596), + 98: uint16(24623), + 99: uint16(24629), + 100: uint16(24598), + 101: uint16(24618), + 102: uint16(24597), + 103: uint16(24609), + 104: uint16(24615), + 105: uint16(24617), + 106: uint16(24619), + 107: uint16(24603), + 108: uint16(25110), + 109: uint16(25109), + 110: uint16(25151), + 111: uint16(25150), + 112: uint16(25152), + 113: uint16(25215), + 114: uint16(25289), + 115: uint16(25292), + 116: uint16(25284), + 117: uint16(25279), + 118: uint16(25282), + 119: uint16(25273), + 120: uint16(25298), + 121: uint16(25307), + 122: uint16(25259), + 123: uint16(25299), + 124: uint16(25300), + 125: uint16(25291), + 126: uint16(25288), + 127: uint16(25256), + 128: uint16(25277), + 129: uint16(25276), + 130: uint16(25296), + 131: uint16(25305), + 132: uint16(25287), + 133: uint16(25293), + 134: uint16(25269), + 135: uint16(25306), + 136: uint16(25265), + 137: uint16(25304), + 138: uint16(25302), + 139: uint16(25303), + 140: uint16(25286), + 141: uint16(25260), + 142: uint16(25294), + 143: uint16(25918), + 144: uint16(26023), + 145: uint16(26044), + 146: uint16(26106), + 147: uint16(26132), + 148: uint16(26131), + 149: uint16(26124), + 150: uint16(26118), + 151: uint16(26114), + 152: uint16(26126), + 153: uint16(26112), + 154: uint16(26127), + 155: uint16(26133), + 156: uint16(26122), + }, + 9: { + 0: uint16(26119), + 1: uint16(26381), + 2: uint16(26379), + 3: uint16(26477), + 4: uint16(26507), + 5: uint16(26517), + 6: uint16(26481), + 7: uint16(26524), + 8: uint16(26483), + 9: uint16(26487), + 10: uint16(26503), + 11: uint16(26525), + 12: uint16(26519), + 13: uint16(26479), + 14: uint16(26480), + 15: uint16(26495), + 16: uint16(26505), + 17: uint16(26494), + 18: uint16(26512), + 19: uint16(26485), + 20: uint16(26522), + 21: uint16(26515), + 22: uint16(26492), + 23: uint16(26474), + 24: uint16(26482), + 25: uint16(27427), + 26: uint16(27494), + 27: uint16(27495), + 28: uint16(27519), + 29: uint16(27667), + 30: uint16(27675), + 31: uint16(27875), + 32: uint16(27880), + 33: uint16(27891), + 34: uint16(27825), + 35: uint16(27852), + 36: uint16(27877), + 37: uint16(27827), + 38: uint16(27837), + 39: uint16(27838), + 40: uint16(27836), + 41: uint16(27874), + 42: uint16(27819), + 43: uint16(27861), + 44: uint16(27859), + 45: uint16(27832), + 46: uint16(27844), + 47: uint16(27833), + 48: uint16(27841), + 49: uint16(27822), + 50: uint16(27863), + 51: uint16(27845), + 52: uint16(27889), + 53: uint16(27839), + 54: uint16(27835), + 55: uint16(27873), + 56: uint16(27867), + 57: uint16(27850), + 58: uint16(27820), + 59: uint16(27887), + 60: uint16(27868), + 61: uint16(27862), + 62: uint16(27872), + 63: uint16(28821), + 64: uint16(28814), + 65: uint16(28818), + 66: uint16(28810), + 67: uint16(28825), + 68: uint16(29228), + 69: uint16(29229), + 70: uint16(29240), + 71: uint16(29256), + 72: uint16(29287), + 73: uint16(29289), + 74: uint16(29376), + 75: uint16(29390), + 76: uint16(29401), + 77: uint16(29399), + 78: uint16(29392), + 79: uint16(29609), + 80: uint16(29608), + 81: uint16(29599), + 82: uint16(29611), + 83: uint16(29605), + 84: uint16(30013), + 85: uint16(30109), + 86: uint16(30105), + 87: uint16(30106), + 88: uint16(30340), + 89: uint16(30402), + 90: uint16(30450), + 91: uint16(30452), + 92: uint16(30693), + 93: uint16(30717), + 94: uint16(31038), + 95: uint16(31040), + 96: uint16(31041), + 97: uint16(31177), + 98: uint16(31176), + 99: uint16(31354), + 100: uint16(31353), + 101: uint16(31482), + 102: uint16(31998), + 103: uint16(32596), + 104: uint16(32652), + 105: uint16(32651), + 106: uint16(32773), + 107: uint16(32954), + 108: uint16(32933), + 109: uint16(32930), + 110: uint16(32945), + 111: uint16(32929), + 112: uint16(32939), + 113: uint16(32937), + 114: uint16(32948), + 115: uint16(32938), + 116: uint16(32943), + 117: uint16(33253), + 118: uint16(33278), + 119: uint16(33293), + 120: uint16(33459), + 121: uint16(33437), + 122: uint16(33433), + 123: uint16(33453), + 124: uint16(33469), + 125: uint16(33439), + 126: uint16(33465), + 127: uint16(33457), + 128: uint16(33452), + 129: uint16(33445), + 130: uint16(33455), + 131: uint16(33464), + 132: uint16(33443), + 133: uint16(33456), + 134: uint16(33470), + 135: uint16(33463), + 136: uint16(34382), + 137: uint16(34417), + 138: uint16(21021), + 139: uint16(34920), + 140: uint16(36555), + 141: uint16(36814), + 142: uint16(36820), + 143: uint16(36817), + 144: uint16(37045), + 145: uint16(37048), + 146: uint16(37041), + 147: uint16(37046), + 148: uint16(37319), + 149: uint16(37329), + 150: uint16(38263), + 151: uint16(38272), + 152: uint16(38428), + 153: uint16(38464), + 154: uint16(38463), + 155: uint16(38459), + 156: uint16(38468), + }, + 10: { + 0: uint16(38466), + 1: uint16(38585), + 2: uint16(38632), + 3: uint16(38738), + 4: uint16(38750), + 5: uint16(20127), + 6: uint16(20141), + 7: uint16(20142), + 8: uint16(20449), + 9: uint16(20405), + 10: uint16(20399), + 11: uint16(20415), + 12: uint16(20448), + 13: uint16(20433), + 14: uint16(20431), + 15: uint16(20445), + 16: uint16(20419), + 17: uint16(20406), + 18: uint16(20440), + 19: uint16(20447), + 20: uint16(20426), + 21: uint16(20439), + 22: uint16(20398), + 23: uint16(20432), + 24: uint16(20420), + 25: uint16(20418), + 26: uint16(20442), + 27: uint16(20430), + 28: uint16(20446), + 29: uint16(20407), + 30: uint16(20823), + 31: uint16(20882), + 32: uint16(20881), + 33: uint16(20896), + 34: uint16(21070), + 35: uint16(21059), + 36: uint16(21066), + 37: uint16(21069), + 38: uint16(21068), + 39: uint16(21067), + 40: uint16(21063), + 41: uint16(21191), + 42: uint16(21193), + 43: uint16(21187), + 44: uint16(21185), + 45: uint16(21261), + 46: uint16(21335), + 47: uint16(21371), + 48: uint16(21402), + 49: uint16(21467), + 50: uint16(21676), + 51: uint16(21696), + 52: uint16(21672), + 53: uint16(21710), + 54: uint16(21705), + 55: uint16(21688), + 56: uint16(21670), + 57: uint16(21683), + 58: uint16(21703), + 59: uint16(21698), + 60: uint16(21693), + 61: uint16(21674), + 62: uint16(21697), + 63: uint16(21700), + 64: uint16(21704), + 65: uint16(21679), + 66: uint16(21675), + 67: uint16(21681), + 68: uint16(21691), + 69: uint16(21673), + 70: uint16(21671), + 71: uint16(21695), + 72: uint16(22271), + 73: uint16(22402), + 74: uint16(22411), + 75: uint16(22432), + 76: uint16(22435), + 77: uint16(22434), + 78: uint16(22478), + 79: uint16(22446), + 80: uint16(22419), + 81: uint16(22869), + 82: uint16(22865), + 83: uint16(22863), + 84: uint16(22862), + 85: uint16(22864), + 86: uint16(23004), + 87: uint16(23000), + 88: uint16(23039), + 89: uint16(23011), + 90: uint16(23016), + 91: uint16(23043), + 92: uint16(23013), + 93: uint16(23018), + 94: uint16(23002), + 95: uint16(23014), + 96: uint16(23041), + 97: uint16(23035), + 98: uint16(23401), + 99: uint16(23459), + 100: uint16(23462), + 101: uint16(23460), + 102: uint16(23458), + 103: uint16(23461), + 104: uint16(23553), + 105: uint16(23630), + 106: uint16(23631), + 107: uint16(23629), + 108: uint16(23627), + 109: uint16(23769), + 110: uint16(23762), + 111: uint16(24055), + 112: uint16(24093), + 113: uint16(24101), + 114: uint16(24095), + 115: uint16(24189), + 116: uint16(24224), + 117: uint16(24230), + 118: uint16(24314), + 119: uint16(24328), + 120: uint16(24365), + 121: uint16(24421), + 122: uint16(24456), + 123: uint16(24453), + 124: uint16(24458), + 125: uint16(24459), + 126: uint16(24455), + 127: uint16(24460), + 128: uint16(24457), + 129: uint16(24594), + 130: uint16(24605), + 131: uint16(24608), + 132: uint16(24613), + 133: uint16(24590), + 134: uint16(24616), + 135: uint16(24653), + 136: uint16(24688), + 137: uint16(24680), + 138: uint16(24674), + 139: uint16(24646), + 140: uint16(24643), + 141: uint16(24684), + 142: uint16(24683), + 143: uint16(24682), + 144: uint16(24676), + 145: uint16(25153), + 146: uint16(25308), + 147: uint16(25366), + 148: uint16(25353), + 149: uint16(25340), + 150: uint16(25325), + 151: uint16(25345), + 152: uint16(25326), + 153: uint16(25341), + 154: uint16(25351), + 155: uint16(25329), + 156: uint16(25335), + }, + 11: { + 0: uint16(25327), + 1: uint16(25324), + 2: uint16(25342), + 3: uint16(25332), + 4: uint16(25361), + 5: uint16(25346), + 6: uint16(25919), + 7: uint16(25925), + 8: uint16(26027), + 9: uint16(26045), + 10: uint16(26082), + 11: uint16(26149), + 12: uint16(26157), + 13: uint16(26144), + 14: uint16(26151), + 15: uint16(26159), + 16: uint16(26143), + 17: uint16(26152), + 18: uint16(26161), + 19: uint16(26148), + 20: uint16(26359), + 21: uint16(26623), + 22: uint16(26579), + 23: uint16(26609), + 24: uint16(26580), + 25: uint16(26576), + 26: uint16(26604), + 27: uint16(26550), + 28: uint16(26543), + 29: uint16(26613), + 30: uint16(26601), + 31: uint16(26607), + 32: uint16(26564), + 33: uint16(26577), + 34: uint16(26548), + 35: uint16(26586), + 36: uint16(26597), + 37: uint16(26552), + 38: uint16(26575), + 39: uint16(26590), + 40: uint16(26611), + 41: uint16(26544), + 42: uint16(26585), + 43: uint16(26594), + 44: uint16(26589), + 45: uint16(26578), + 46: uint16(27498), + 47: uint16(27523), + 48: uint16(27526), + 49: uint16(27573), + 50: uint16(27602), + 51: uint16(27607), + 52: uint16(27679), + 53: uint16(27849), + 54: uint16(27915), + 55: uint16(27954), + 56: uint16(27946), + 57: uint16(27969), + 58: uint16(27941), + 59: uint16(27916), + 60: uint16(27953), + 61: uint16(27934), + 62: uint16(27927), + 63: uint16(27963), + 64: uint16(27965), + 65: uint16(27966), + 66: uint16(27958), + 67: uint16(27931), + 68: uint16(27893), + 69: uint16(27961), + 70: uint16(27943), + 71: uint16(27960), + 72: uint16(27945), + 73: uint16(27950), + 74: uint16(27957), + 75: uint16(27918), + 76: uint16(27947), + 77: uint16(28843), + 78: uint16(28858), + 79: uint16(28851), + 80: uint16(28844), + 81: uint16(28847), + 82: uint16(28845), + 83: uint16(28856), + 84: uint16(28846), + 85: uint16(28836), + 86: uint16(29232), + 87: uint16(29298), + 88: uint16(29295), + 89: uint16(29300), + 90: uint16(29417), + 91: uint16(29408), + 92: uint16(29409), + 93: uint16(29623), + 94: uint16(29642), + 95: uint16(29627), + 96: uint16(29618), + 97: uint16(29645), + 98: uint16(29632), + 99: uint16(29619), + 100: uint16(29978), + 101: uint16(29997), + 102: uint16(30031), + 103: uint16(30028), + 104: uint16(30030), + 105: uint16(30027), + 106: uint16(30123), + 107: uint16(30116), + 108: uint16(30117), + 109: uint16(30114), + 110: uint16(30115), + 111: uint16(30328), + 112: uint16(30342), + 113: uint16(30343), + 114: uint16(30344), + 115: uint16(30408), + 116: uint16(30406), + 117: uint16(30403), + 118: uint16(30405), + 119: uint16(30465), + 120: uint16(30457), + 121: uint16(30456), + 122: uint16(30473), + 123: uint16(30475), + 124: uint16(30462), + 125: uint16(30460), + 126: uint16(30471), + 127: uint16(30684), + 128: uint16(30722), + 129: uint16(30740), + 130: uint16(30732), + 131: uint16(30733), + 132: uint16(31046), + 133: uint16(31049), + 134: uint16(31048), + 135: uint16(31047), + 136: uint16(31161), + 137: uint16(31162), + 138: uint16(31185), + 139: uint16(31186), + 140: uint16(31179), + 141: uint16(31359), + 142: uint16(31361), + 143: uint16(31487), + 144: uint16(31485), + 145: uint16(31869), + 146: uint16(32002), + 147: uint16(32005), + 148: uint16(32000), + 149: uint16(32009), + 150: uint16(32007), + 151: uint16(32004), + 152: uint16(32006), + 153: uint16(32568), + 154: uint16(32654), + 155: uint16(32703), + 156: uint16(32772), + }, + 12: { + 0: uint16(32784), + 1: uint16(32781), + 2: uint16(32785), + 3: uint16(32822), + 4: uint16(32982), + 5: uint16(32997), + 6: uint16(32986), + 7: uint16(32963), + 8: uint16(32964), + 9: uint16(32972), + 10: uint16(32993), + 11: uint16(32987), + 12: uint16(32974), + 13: uint16(32990), + 14: uint16(32996), + 15: uint16(32989), + 16: uint16(33268), + 17: uint16(33314), + 18: uint16(33511), + 19: uint16(33539), + 20: uint16(33541), + 21: uint16(33507), + 22: uint16(33499), + 23: uint16(33510), + 24: uint16(33540), + 25: uint16(33509), + 26: uint16(33538), + 27: uint16(33545), + 28: uint16(33490), + 29: uint16(33495), + 30: uint16(33521), + 31: uint16(33537), + 32: uint16(33500), + 33: uint16(33492), + 34: uint16(33489), + 35: uint16(33502), + 36: uint16(33491), + 37: uint16(33503), + 38: uint16(33519), + 39: uint16(33542), + 40: uint16(34384), + 41: uint16(34425), + 42: uint16(34427), + 43: uint16(34426), + 44: uint16(34893), + 45: uint16(34923), + 46: uint16(35201), + 47: uint16(35284), + 48: uint16(35336), + 49: uint16(35330), + 50: uint16(35331), + 51: uint16(35998), + 52: uint16(36000), + 53: uint16(36212), + 54: uint16(36211), + 55: uint16(36276), + 56: uint16(36557), + 57: uint16(36556), + 58: uint16(36848), + 59: uint16(36838), + 60: uint16(36834), + 61: uint16(36842), + 62: uint16(36837), + 63: uint16(36845), + 64: uint16(36843), + 65: uint16(36836), + 66: uint16(36840), + 67: uint16(37066), + 68: uint16(37070), + 69: uint16(37057), + 70: uint16(37059), + 71: uint16(37195), + 72: uint16(37194), + 73: uint16(37325), + 74: uint16(38274), + 75: uint16(38480), + 76: uint16(38475), + 77: uint16(38476), + 78: uint16(38477), + 79: uint16(38754), + 80: uint16(38761), + 81: uint16(38859), + 82: uint16(38893), + 83: uint16(38899), + 84: uint16(38913), + 85: uint16(39080), + 86: uint16(39131), + 87: uint16(39135), + 88: uint16(39318), + 89: uint16(39321), + 90: uint16(20056), + 91: uint16(20147), + 92: uint16(20492), + 93: uint16(20493), + 94: uint16(20515), + 95: uint16(20463), + 96: uint16(20518), + 97: uint16(20517), + 98: uint16(20472), + 99: uint16(20521), + 100: uint16(20502), + 101: uint16(20486), + 102: uint16(20540), + 103: uint16(20511), + 104: uint16(20506), + 105: uint16(20498), + 106: uint16(20497), + 107: uint16(20474), + 108: uint16(20480), + 109: uint16(20500), + 110: uint16(20520), + 111: uint16(20465), + 112: uint16(20513), + 113: uint16(20491), + 114: uint16(20505), + 115: uint16(20504), + 116: uint16(20467), + 117: uint16(20462), + 118: uint16(20525), + 119: uint16(20522), + 120: uint16(20478), + 121: uint16(20523), + 122: uint16(20489), + 123: uint16(20860), + 124: uint16(20900), + 125: uint16(20901), + 126: uint16(20898), + 127: uint16(20941), + 128: uint16(20940), + 129: uint16(20934), + 130: uint16(20939), + 131: uint16(21078), + 132: uint16(21084), + 133: uint16(21076), + 134: uint16(21083), + 135: uint16(21085), + 136: uint16(21290), + 137: uint16(21375), + 138: uint16(21407), + 139: uint16(21405), + 140: uint16(21471), + 141: uint16(21736), + 142: uint16(21776), + 143: uint16(21761), + 144: uint16(21815), + 145: uint16(21756), + 146: uint16(21733), + 147: uint16(21746), + 148: uint16(21766), + 149: uint16(21754), + 150: uint16(21780), + 151: uint16(21737), + 152: uint16(21741), + 153: uint16(21729), + 154: uint16(21769), + 155: uint16(21742), + 156: uint16(21738), + }, + 13: { + 0: uint16(21734), + 1: uint16(21799), + 2: uint16(21767), + 3: uint16(21757), + 4: uint16(21775), + 5: uint16(22275), + 6: uint16(22276), + 7: uint16(22466), + 8: uint16(22484), + 9: uint16(22475), + 10: uint16(22467), + 11: uint16(22537), + 12: uint16(22799), + 13: uint16(22871), + 14: uint16(22872), + 15: uint16(22874), + 16: uint16(23057), + 17: uint16(23064), + 18: uint16(23068), + 19: uint16(23071), + 20: uint16(23067), + 21: uint16(23059), + 22: uint16(23020), + 23: uint16(23072), + 24: uint16(23075), + 25: uint16(23081), + 26: uint16(23077), + 27: uint16(23052), + 28: uint16(23049), + 29: uint16(23403), + 30: uint16(23640), + 31: uint16(23472), + 32: uint16(23475), + 33: uint16(23478), + 34: uint16(23476), + 35: uint16(23470), + 36: uint16(23477), + 37: uint16(23481), + 38: uint16(23480), + 39: uint16(23556), + 40: uint16(23633), + 41: uint16(23637), + 42: uint16(23632), + 43: uint16(23789), + 44: uint16(23805), + 45: uint16(23803), + 46: uint16(23786), + 47: uint16(23784), + 48: uint16(23792), + 49: uint16(23798), + 50: uint16(23809), + 51: uint16(23796), + 52: uint16(24046), + 53: uint16(24109), + 54: uint16(24107), + 55: uint16(24235), + 56: uint16(24237), + 57: uint16(24231), + 58: uint16(24369), + 59: uint16(24466), + 60: uint16(24465), + 61: uint16(24464), + 62: uint16(24665), + 63: uint16(24675), + 64: uint16(24677), + 65: uint16(24656), + 66: uint16(24661), + 67: uint16(24685), + 68: uint16(24681), + 69: uint16(24687), + 70: uint16(24708), + 71: uint16(24735), + 72: uint16(24730), + 73: uint16(24717), + 74: uint16(24724), + 75: uint16(24716), + 76: uint16(24709), + 77: uint16(24726), + 78: uint16(25159), + 79: uint16(25331), + 80: uint16(25352), + 81: uint16(25343), + 82: uint16(25422), + 83: uint16(25406), + 84: uint16(25391), + 85: uint16(25429), + 86: uint16(25410), + 87: uint16(25414), + 88: uint16(25423), + 89: uint16(25417), + 90: uint16(25402), + 91: uint16(25424), + 92: uint16(25405), + 93: uint16(25386), + 94: uint16(25387), + 95: uint16(25384), + 96: uint16(25421), + 97: uint16(25420), + 98: uint16(25928), + 99: uint16(25929), + 100: uint16(26009), + 101: uint16(26049), + 102: uint16(26053), + 103: uint16(26178), + 104: uint16(26185), + 105: uint16(26191), + 106: uint16(26179), + 107: uint16(26194), + 108: uint16(26188), + 109: uint16(26181), + 110: uint16(26177), + 111: uint16(26360), + 112: uint16(26388), + 113: uint16(26389), + 114: uint16(26391), + 115: uint16(26657), + 116: uint16(26680), + 117: uint16(26696), + 118: uint16(26694), + 119: uint16(26707), + 120: uint16(26681), + 121: uint16(26690), + 122: uint16(26708), + 123: uint16(26665), + 124: uint16(26803), + 125: uint16(26647), + 126: uint16(26700), + 127: uint16(26705), + 128: uint16(26685), + 129: uint16(26612), + 130: uint16(26704), + 131: uint16(26688), + 132: uint16(26684), + 133: uint16(26691), + 134: uint16(26666), + 135: uint16(26693), + 136: uint16(26643), + 137: uint16(26648), + 138: uint16(26689), + 139: uint16(27530), + 140: uint16(27529), + 141: uint16(27575), + 142: uint16(27683), + 143: uint16(27687), + 144: uint16(27688), + 145: uint16(27686), + 146: uint16(27684), + 147: uint16(27888), + 148: uint16(28010), + 149: uint16(28053), + 150: uint16(28040), + 151: uint16(28039), + 152: uint16(28006), + 153: uint16(28024), + 154: uint16(28023), + 155: uint16(27993), + 156: uint16(28051), + }, + 14: { + 0: uint16(28012), + 1: uint16(28041), + 2: uint16(28014), + 3: uint16(27994), + 4: uint16(28020), + 5: uint16(28009), + 6: uint16(28044), + 7: uint16(28042), + 8: uint16(28025), + 9: uint16(28037), + 10: uint16(28005), + 11: uint16(28052), + 12: uint16(28874), + 13: uint16(28888), + 14: uint16(28900), + 15: uint16(28889), + 16: uint16(28872), + 17: uint16(28879), + 18: uint16(29241), + 19: uint16(29305), + 20: uint16(29436), + 21: uint16(29433), + 22: uint16(29437), + 23: uint16(29432), + 24: uint16(29431), + 25: uint16(29574), + 26: uint16(29677), + 27: uint16(29705), + 28: uint16(29678), + 29: uint16(29664), + 30: uint16(29674), + 31: uint16(29662), + 32: uint16(30036), + 33: uint16(30045), + 34: uint16(30044), + 35: uint16(30042), + 36: uint16(30041), + 37: uint16(30142), + 38: uint16(30149), + 39: uint16(30151), + 40: uint16(30130), + 41: uint16(30131), + 42: uint16(30141), + 43: uint16(30140), + 44: uint16(30137), + 45: uint16(30146), + 46: uint16(30136), + 47: uint16(30347), + 48: uint16(30384), + 49: uint16(30410), + 50: uint16(30413), + 51: uint16(30414), + 52: uint16(30505), + 53: uint16(30495), + 54: uint16(30496), + 55: uint16(30504), + 56: uint16(30697), + 57: uint16(30768), + 58: uint16(30759), + 59: uint16(30776), + 60: uint16(30749), + 61: uint16(30772), + 62: uint16(30775), + 63: uint16(30757), + 64: uint16(30765), + 65: uint16(30752), + 66: uint16(30751), + 67: uint16(30770), + 68: uint16(31061), + 69: uint16(31056), + 70: uint16(31072), + 71: uint16(31071), + 72: uint16(31062), + 73: uint16(31070), + 74: uint16(31069), + 75: uint16(31063), + 76: uint16(31066), + 77: uint16(31204), + 78: uint16(31203), + 79: uint16(31207), + 80: uint16(31199), + 81: uint16(31206), + 82: uint16(31209), + 83: uint16(31192), + 84: uint16(31364), + 85: uint16(31368), + 86: uint16(31449), + 87: uint16(31494), + 88: uint16(31505), + 89: uint16(31881), + 90: uint16(32033), + 91: uint16(32023), + 92: uint16(32011), + 93: uint16(32010), + 94: uint16(32032), + 95: uint16(32034), + 96: uint16(32020), + 97: uint16(32016), + 98: uint16(32021), + 99: uint16(32026), + 100: uint16(32028), + 101: uint16(32013), + 102: uint16(32025), + 103: uint16(32027), + 104: uint16(32570), + 105: uint16(32607), + 106: uint16(32660), + 107: uint16(32709), + 108: uint16(32705), + 109: uint16(32774), + 110: uint16(32792), + 111: uint16(32789), + 112: uint16(32793), + 113: uint16(32791), + 114: uint16(32829), + 115: uint16(32831), + 116: uint16(33009), + 117: uint16(33026), + 118: uint16(33008), + 119: uint16(33029), + 120: uint16(33005), + 121: uint16(33012), + 122: uint16(33030), + 123: uint16(33016), + 124: uint16(33011), + 125: uint16(33032), + 126: uint16(33021), + 127: uint16(33034), + 128: uint16(33020), + 129: uint16(33007), + 130: uint16(33261), + 131: uint16(33260), + 132: uint16(33280), + 133: uint16(33296), + 134: uint16(33322), + 135: uint16(33323), + 136: uint16(33320), + 137: uint16(33324), + 138: uint16(33467), + 139: uint16(33579), + 140: uint16(33618), + 141: uint16(33620), + 142: uint16(33610), + 143: uint16(33592), + 144: uint16(33616), + 145: uint16(33609), + 146: uint16(33589), + 147: uint16(33588), + 148: uint16(33615), + 149: uint16(33586), + 150: uint16(33593), + 151: uint16(33590), + 152: uint16(33559), + 153: uint16(33600), + 154: uint16(33585), + 155: uint16(33576), + 156: uint16(33603), + }, + 15: { + 0: uint16(34388), + 1: uint16(34442), + 2: uint16(34474), + 3: uint16(34451), + 4: uint16(34468), + 5: uint16(34473), + 6: uint16(34444), + 7: uint16(34467), + 8: uint16(34460), + 9: uint16(34928), + 10: uint16(34935), + 11: uint16(34945), + 12: uint16(34946), + 13: uint16(34941), + 14: uint16(34937), + 15: uint16(35352), + 16: uint16(35344), + 17: uint16(35342), + 18: uint16(35340), + 19: uint16(35349), + 20: uint16(35338), + 21: uint16(35351), + 22: uint16(35347), + 23: uint16(35350), + 24: uint16(35343), + 25: uint16(35345), + 26: uint16(35912), + 27: uint16(35962), + 28: uint16(35961), + 29: uint16(36001), + 30: uint16(36002), + 31: uint16(36215), + 32: uint16(36524), + 33: uint16(36562), + 34: uint16(36564), + 35: uint16(36559), + 36: uint16(36785), + 37: uint16(36865), + 38: uint16(36870), + 39: uint16(36855), + 40: uint16(36864), + 41: uint16(36858), + 42: uint16(36852), + 43: uint16(36867), + 44: uint16(36861), + 45: uint16(36869), + 46: uint16(36856), + 47: uint16(37013), + 48: uint16(37089), + 49: uint16(37085), + 50: uint16(37090), + 51: uint16(37202), + 52: uint16(37197), + 53: uint16(37196), + 54: uint16(37336), + 55: uint16(37341), + 56: uint16(37335), + 57: uint16(37340), + 58: uint16(37337), + 59: uint16(38275), + 60: uint16(38498), + 61: uint16(38499), + 62: uint16(38497), + 63: uint16(38491), + 64: uint16(38493), + 65: uint16(38500), + 66: uint16(38488), + 67: uint16(38494), + 68: uint16(38587), + 69: uint16(39138), + 70: uint16(39340), + 71: uint16(39592), + 72: uint16(39640), + 73: uint16(39717), + 74: uint16(39730), + 75: uint16(39740), + 76: uint16(20094), + 77: uint16(20602), + 78: uint16(20605), + 79: uint16(20572), + 80: uint16(20551), + 81: uint16(20547), + 82: uint16(20556), + 83: uint16(20570), + 84: uint16(20553), + 85: uint16(20581), + 86: uint16(20598), + 87: uint16(20558), + 88: uint16(20565), + 89: uint16(20597), + 90: uint16(20596), + 91: uint16(20599), + 92: uint16(20559), + 93: uint16(20495), + 94: uint16(20591), + 95: uint16(20589), + 96: uint16(20828), + 97: uint16(20885), + 98: uint16(20976), + 99: uint16(21098), + 100: uint16(21103), + 101: uint16(21202), + 102: uint16(21209), + 103: uint16(21208), + 104: uint16(21205), + 105: uint16(21264), + 106: uint16(21263), + 107: uint16(21273), + 108: uint16(21311), + 109: uint16(21312), + 110: uint16(21310), + 111: uint16(21443), + 112: uint16(26364), + 113: uint16(21830), + 114: uint16(21866), + 115: uint16(21862), + 116: uint16(21828), + 117: uint16(21854), + 118: uint16(21857), + 119: uint16(21827), + 120: uint16(21834), + 121: uint16(21809), + 122: uint16(21846), + 123: uint16(21839), + 124: uint16(21845), + 125: uint16(21807), + 126: uint16(21860), + 127: uint16(21816), + 128: uint16(21806), + 129: uint16(21852), + 130: uint16(21804), + 131: uint16(21859), + 132: uint16(21811), + 133: uint16(21825), + 134: uint16(21847), + 135: uint16(22280), + 136: uint16(22283), + 137: uint16(22281), + 138: uint16(22495), + 139: uint16(22533), + 140: uint16(22538), + 141: uint16(22534), + 142: uint16(22496), + 143: uint16(22500), + 144: uint16(22522), + 145: uint16(22530), + 146: uint16(22581), + 147: uint16(22519), + 148: uint16(22521), + 149: uint16(22816), + 150: uint16(22882), + 151: uint16(23094), + 152: uint16(23105), + 153: uint16(23113), + 154: uint16(23142), + 155: uint16(23146), + 156: uint16(23104), + }, + 16: { + 0: uint16(23100), + 1: uint16(23138), + 2: uint16(23130), + 3: uint16(23110), + 4: uint16(23114), + 5: uint16(23408), + 6: uint16(23495), + 7: uint16(23493), + 8: uint16(23492), + 9: uint16(23490), + 10: uint16(23487), + 11: uint16(23494), + 12: uint16(23561), + 13: uint16(23560), + 14: uint16(23559), + 15: uint16(23648), + 16: uint16(23644), + 17: uint16(23645), + 18: uint16(23815), + 19: uint16(23814), + 20: uint16(23822), + 21: uint16(23835), + 22: uint16(23830), + 23: uint16(23842), + 24: uint16(23825), + 25: uint16(23849), + 26: uint16(23828), + 27: uint16(23833), + 28: uint16(23844), + 29: uint16(23847), + 30: uint16(23831), + 31: uint16(24034), + 32: uint16(24120), + 33: uint16(24118), + 34: uint16(24115), + 35: uint16(24119), + 36: uint16(24247), + 37: uint16(24248), + 38: uint16(24246), + 39: uint16(24245), + 40: uint16(24254), + 41: uint16(24373), + 42: uint16(24375), + 43: uint16(24407), + 44: uint16(24428), + 45: uint16(24425), + 46: uint16(24427), + 47: uint16(24471), + 48: uint16(24473), + 49: uint16(24478), + 50: uint16(24472), + 51: uint16(24481), + 52: uint16(24480), + 53: uint16(24476), + 54: uint16(24703), + 55: uint16(24739), + 56: uint16(24713), + 57: uint16(24736), + 58: uint16(24744), + 59: uint16(24779), + 60: uint16(24756), + 61: uint16(24806), + 62: uint16(24765), + 63: uint16(24773), + 64: uint16(24763), + 65: uint16(24757), + 66: uint16(24796), + 67: uint16(24764), + 68: uint16(24792), + 69: uint16(24789), + 70: uint16(24774), + 71: uint16(24799), + 72: uint16(24760), + 73: uint16(24794), + 74: uint16(24775), + 75: uint16(25114), + 76: uint16(25115), + 77: uint16(25160), + 78: uint16(25504), + 79: uint16(25511), + 80: uint16(25458), + 81: uint16(25494), + 82: uint16(25506), + 83: uint16(25509), + 84: uint16(25463), + 85: uint16(25447), + 86: uint16(25496), + 87: uint16(25514), + 88: uint16(25457), + 89: uint16(25513), + 90: uint16(25481), + 91: uint16(25475), + 92: uint16(25499), + 93: uint16(25451), + 94: uint16(25512), + 95: uint16(25476), + 96: uint16(25480), + 97: uint16(25497), + 98: uint16(25505), + 99: uint16(25516), + 100: uint16(25490), + 101: uint16(25487), + 102: uint16(25472), + 103: uint16(25467), + 104: uint16(25449), + 105: uint16(25448), + 106: uint16(25466), + 107: uint16(25949), + 108: uint16(25942), + 109: uint16(25937), + 110: uint16(25945), + 111: uint16(25943), + 112: uint16(21855), + 113: uint16(25935), + 114: uint16(25944), + 115: uint16(25941), + 116: uint16(25940), + 117: uint16(26012), + 118: uint16(26011), + 119: uint16(26028), + 120: uint16(26063), + 121: uint16(26059), + 122: uint16(26060), + 123: uint16(26062), + 124: uint16(26205), + 125: uint16(26202), + 126: uint16(26212), + 127: uint16(26216), + 128: uint16(26214), + 129: uint16(26206), + 130: uint16(26361), + 131: uint16(21207), + 132: uint16(26395), + 133: uint16(26753), + 134: uint16(26799), + 135: uint16(26786), + 136: uint16(26771), + 137: uint16(26805), + 138: uint16(26751), + 139: uint16(26742), + 140: uint16(26801), + 141: uint16(26791), + 142: uint16(26775), + 143: uint16(26800), + 144: uint16(26755), + 145: uint16(26820), + 146: uint16(26797), + 147: uint16(26758), + 148: uint16(26757), + 149: uint16(26772), + 150: uint16(26781), + 151: uint16(26792), + 152: uint16(26783), + 153: uint16(26785), + 154: uint16(26754), + 155: uint16(27442), + 156: uint16(27578), + }, + 17: { + 0: uint16(27627), + 1: uint16(27628), + 2: uint16(27691), + 3: uint16(28046), + 4: uint16(28092), + 5: uint16(28147), + 6: uint16(28121), + 7: uint16(28082), + 8: uint16(28129), + 9: uint16(28108), + 10: uint16(28132), + 11: uint16(28155), + 12: uint16(28154), + 13: uint16(28165), + 14: uint16(28103), + 15: uint16(28107), + 16: uint16(28079), + 17: uint16(28113), + 18: uint16(28078), + 19: uint16(28126), + 20: uint16(28153), + 21: uint16(28088), + 22: uint16(28151), + 23: uint16(28149), + 24: uint16(28101), + 25: uint16(28114), + 26: uint16(28186), + 27: uint16(28085), + 28: uint16(28122), + 29: uint16(28139), + 30: uint16(28120), + 31: uint16(28138), + 32: uint16(28145), + 33: uint16(28142), + 34: uint16(28136), + 35: uint16(28102), + 36: uint16(28100), + 37: uint16(28074), + 38: uint16(28140), + 39: uint16(28095), + 40: uint16(28134), + 41: uint16(28921), + 42: uint16(28937), + 43: uint16(28938), + 44: uint16(28925), + 45: uint16(28911), + 46: uint16(29245), + 47: uint16(29309), + 48: uint16(29313), + 49: uint16(29468), + 50: uint16(29467), + 51: uint16(29462), + 52: uint16(29459), + 53: uint16(29465), + 54: uint16(29575), + 55: uint16(29701), + 56: uint16(29706), + 57: uint16(29699), + 58: uint16(29702), + 59: uint16(29694), + 60: uint16(29709), + 61: uint16(29920), + 62: uint16(29942), + 63: uint16(29943), + 64: uint16(29980), + 65: uint16(29986), + 66: uint16(30053), + 67: uint16(30054), + 68: uint16(30050), + 69: uint16(30064), + 70: uint16(30095), + 71: uint16(30164), + 72: uint16(30165), + 73: uint16(30133), + 74: uint16(30154), + 75: uint16(30157), + 76: uint16(30350), + 77: uint16(30420), + 78: uint16(30418), + 79: uint16(30427), + 80: uint16(30519), + 81: uint16(30526), + 82: uint16(30524), + 83: uint16(30518), + 84: uint16(30520), + 85: uint16(30522), + 86: uint16(30827), + 87: uint16(30787), + 88: uint16(30798), + 89: uint16(31077), + 90: uint16(31080), + 91: uint16(31085), + 92: uint16(31227), + 93: uint16(31378), + 94: uint16(31381), + 95: uint16(31520), + 96: uint16(31528), + 97: uint16(31515), + 98: uint16(31532), + 99: uint16(31526), + 100: uint16(31513), + 101: uint16(31518), + 102: uint16(31534), + 103: uint16(31890), + 104: uint16(31895), + 105: uint16(31893), + 106: uint16(32070), + 107: uint16(32067), + 108: uint16(32113), + 109: uint16(32046), + 110: uint16(32057), + 111: uint16(32060), + 112: uint16(32064), + 113: uint16(32048), + 114: uint16(32051), + 115: uint16(32068), + 116: uint16(32047), + 117: uint16(32066), + 118: uint16(32050), + 119: uint16(32049), + 120: uint16(32573), + 121: uint16(32670), + 122: uint16(32666), + 123: uint16(32716), + 124: uint16(32718), + 125: uint16(32722), + 126: uint16(32796), + 127: uint16(32842), + 128: uint16(32838), + 129: uint16(33071), + 130: uint16(33046), + 131: uint16(33059), + 132: uint16(33067), + 133: uint16(33065), + 134: uint16(33072), + 135: uint16(33060), + 136: uint16(33282), + 137: uint16(33333), + 138: uint16(33335), + 139: uint16(33334), + 140: uint16(33337), + 141: uint16(33678), + 142: uint16(33694), + 143: uint16(33688), + 144: uint16(33656), + 145: uint16(33698), + 146: uint16(33686), + 147: uint16(33725), + 148: uint16(33707), + 149: uint16(33682), + 150: uint16(33674), + 151: uint16(33683), + 152: uint16(33673), + 153: uint16(33696), + 154: uint16(33655), + 155: uint16(33659), + 156: uint16(33660), + }, + 18: { + 0: uint16(33670), + 1: uint16(33703), + 2: uint16(34389), + 3: uint16(24426), + 4: uint16(34503), + 5: uint16(34496), + 6: uint16(34486), + 7: uint16(34500), + 8: uint16(34485), + 9: uint16(34502), + 10: uint16(34507), + 11: uint16(34481), + 12: uint16(34479), + 13: uint16(34505), + 14: uint16(34899), + 15: uint16(34974), + 16: uint16(34952), + 17: uint16(34987), + 18: uint16(34962), + 19: uint16(34966), + 20: uint16(34957), + 21: uint16(34955), + 22: uint16(35219), + 23: uint16(35215), + 24: uint16(35370), + 25: uint16(35357), + 26: uint16(35363), + 27: uint16(35365), + 28: uint16(35377), + 29: uint16(35373), + 30: uint16(35359), + 31: uint16(35355), + 32: uint16(35362), + 33: uint16(35913), + 34: uint16(35930), + 35: uint16(36009), + 36: uint16(36012), + 37: uint16(36011), + 38: uint16(36008), + 39: uint16(36010), + 40: uint16(36007), + 41: uint16(36199), + 42: uint16(36198), + 43: uint16(36286), + 44: uint16(36282), + 45: uint16(36571), + 46: uint16(36575), + 47: uint16(36889), + 48: uint16(36877), + 49: uint16(36890), + 50: uint16(36887), + 51: uint16(36899), + 52: uint16(36895), + 53: uint16(36893), + 54: uint16(36880), + 55: uint16(36885), + 56: uint16(36894), + 57: uint16(36896), + 58: uint16(36879), + 59: uint16(36898), + 60: uint16(36886), + 61: uint16(36891), + 62: uint16(36884), + 63: uint16(37096), + 64: uint16(37101), + 65: uint16(37117), + 66: uint16(37207), + 67: uint16(37326), + 68: uint16(37365), + 69: uint16(37350), + 70: uint16(37347), + 71: uint16(37351), + 72: uint16(37357), + 73: uint16(37353), + 74: uint16(38281), + 75: uint16(38506), + 76: uint16(38517), + 77: uint16(38515), + 78: uint16(38520), + 79: uint16(38512), + 80: uint16(38516), + 81: uint16(38518), + 82: uint16(38519), + 83: uint16(38508), + 84: uint16(38592), + 85: uint16(38634), + 86: uint16(38633), + 87: uint16(31456), + 88: uint16(31455), + 89: uint16(38914), + 90: uint16(38915), + 91: uint16(39770), + 92: uint16(40165), + 93: uint16(40565), + 94: uint16(40575), + 95: uint16(40613), + 96: uint16(40635), + 97: uint16(20642), + 98: uint16(20621), + 99: uint16(20613), + 100: uint16(20633), + 101: uint16(20625), + 102: uint16(20608), + 103: uint16(20630), + 104: uint16(20632), + 105: uint16(20634), + 106: uint16(26368), + 107: uint16(20977), + 108: uint16(21106), + 109: uint16(21108), + 110: uint16(21109), + 111: uint16(21097), + 112: uint16(21214), + 113: uint16(21213), + 114: uint16(21211), + 115: uint16(21338), + 116: uint16(21413), + 117: uint16(21883), + 118: uint16(21888), + 119: uint16(21927), + 120: uint16(21884), + 121: uint16(21898), + 122: uint16(21917), + 123: uint16(21912), + 124: uint16(21890), + 125: uint16(21916), + 126: uint16(21930), + 127: uint16(21908), + 128: uint16(21895), + 129: uint16(21899), + 130: uint16(21891), + 131: uint16(21939), + 132: uint16(21934), + 133: uint16(21919), + 134: uint16(21822), + 135: uint16(21938), + 136: uint16(21914), + 137: uint16(21947), + 138: uint16(21932), + 139: uint16(21937), + 140: uint16(21886), + 141: uint16(21897), + 142: uint16(21931), + 143: uint16(21913), + 144: uint16(22285), + 145: uint16(22575), + 146: uint16(22570), + 147: uint16(22580), + 148: uint16(22564), + 149: uint16(22576), + 150: uint16(22577), + 151: uint16(22561), + 152: uint16(22557), + 153: uint16(22560), + 154: uint16(22777), + 155: uint16(22778), + 156: uint16(22880), + }, + 19: { + 0: uint16(23159), + 1: uint16(23194), + 2: uint16(23167), + 3: uint16(23186), + 4: uint16(23195), + 5: uint16(23207), + 6: uint16(23411), + 7: uint16(23409), + 8: uint16(23506), + 9: uint16(23500), + 10: uint16(23507), + 11: uint16(23504), + 12: uint16(23562), + 13: uint16(23563), + 14: uint16(23601), + 15: uint16(23884), + 16: uint16(23888), + 17: uint16(23860), + 18: uint16(23879), + 19: uint16(24061), + 20: uint16(24133), + 21: uint16(24125), + 22: uint16(24128), + 23: uint16(24131), + 24: uint16(24190), + 25: uint16(24266), + 26: uint16(24257), + 27: uint16(24258), + 28: uint16(24260), + 29: uint16(24380), + 30: uint16(24429), + 31: uint16(24489), + 32: uint16(24490), + 33: uint16(24488), + 34: uint16(24785), + 35: uint16(24801), + 36: uint16(24754), + 37: uint16(24758), + 38: uint16(24800), + 39: uint16(24860), + 40: uint16(24867), + 41: uint16(24826), + 42: uint16(24853), + 43: uint16(24816), + 44: uint16(24827), + 45: uint16(24820), + 46: uint16(24936), + 47: uint16(24817), + 48: uint16(24846), + 49: uint16(24822), + 50: uint16(24841), + 51: uint16(24832), + 52: uint16(24850), + 53: uint16(25119), + 54: uint16(25161), + 55: uint16(25507), + 56: uint16(25484), + 57: uint16(25551), + 58: uint16(25536), + 59: uint16(25577), + 60: uint16(25545), + 61: uint16(25542), + 62: uint16(25549), + 63: uint16(25554), + 64: uint16(25571), + 65: uint16(25552), + 66: uint16(25569), + 67: uint16(25558), + 68: uint16(25581), + 69: uint16(25582), + 70: uint16(25462), + 71: uint16(25588), + 72: uint16(25578), + 73: uint16(25563), + 74: uint16(25682), + 75: uint16(25562), + 76: uint16(25593), + 77: uint16(25950), + 78: uint16(25958), + 79: uint16(25954), + 80: uint16(25955), + 81: uint16(26001), + 82: uint16(26000), + 83: uint16(26031), + 84: uint16(26222), + 85: uint16(26224), + 86: uint16(26228), + 87: uint16(26230), + 88: uint16(26223), + 89: uint16(26257), + 90: uint16(26234), + 91: uint16(26238), + 92: uint16(26231), + 93: uint16(26366), + 94: uint16(26367), + 95: uint16(26399), + 96: uint16(26397), + 97: uint16(26874), + 98: uint16(26837), + 99: uint16(26848), + 100: uint16(26840), + 101: uint16(26839), + 102: uint16(26885), + 103: uint16(26847), + 104: uint16(26869), + 105: uint16(26862), + 106: uint16(26855), + 107: uint16(26873), + 108: uint16(26834), + 109: uint16(26866), + 110: uint16(26851), + 111: uint16(26827), + 112: uint16(26829), + 113: uint16(26893), + 114: uint16(26898), + 115: uint16(26894), + 116: uint16(26825), + 117: uint16(26842), + 118: uint16(26990), + 119: uint16(26875), + 120: uint16(27454), + 121: uint16(27450), + 122: uint16(27453), + 123: uint16(27544), + 124: uint16(27542), + 125: uint16(27580), + 126: uint16(27631), + 127: uint16(27694), + 128: uint16(27695), + 129: uint16(27692), + 130: uint16(28207), + 131: uint16(28216), + 132: uint16(28244), + 133: uint16(28193), + 134: uint16(28210), + 135: uint16(28263), + 136: uint16(28234), + 137: uint16(28192), + 138: uint16(28197), + 139: uint16(28195), + 140: uint16(28187), + 141: uint16(28251), + 142: uint16(28248), + 143: uint16(28196), + 144: uint16(28246), + 145: uint16(28270), + 146: uint16(28205), + 147: uint16(28198), + 148: uint16(28271), + 149: uint16(28212), + 150: uint16(28237), + 151: uint16(28218), + 152: uint16(28204), + 153: uint16(28227), + 154: uint16(28189), + 155: uint16(28222), + 156: uint16(28363), + }, + 20: { + 0: uint16(28297), + 1: uint16(28185), + 2: uint16(28238), + 3: uint16(28259), + 4: uint16(28228), + 5: uint16(28274), + 6: uint16(28265), + 7: uint16(28255), + 8: uint16(28953), + 9: uint16(28954), + 10: uint16(28966), + 11: uint16(28976), + 12: uint16(28961), + 13: uint16(28982), + 14: uint16(29038), + 15: uint16(28956), + 16: uint16(29260), + 17: uint16(29316), + 18: uint16(29312), + 19: uint16(29494), + 20: uint16(29477), + 21: uint16(29492), + 22: uint16(29481), + 23: uint16(29754), + 24: uint16(29738), + 25: uint16(29747), + 26: uint16(29730), + 27: uint16(29733), + 28: uint16(29749), + 29: uint16(29750), + 30: uint16(29748), + 31: uint16(29743), + 32: uint16(29723), + 33: uint16(29734), + 34: uint16(29736), + 35: uint16(29989), + 36: uint16(29990), + 37: uint16(30059), + 38: uint16(30058), + 39: uint16(30178), + 40: uint16(30171), + 41: uint16(30179), + 42: uint16(30169), + 43: uint16(30168), + 44: uint16(30174), + 45: uint16(30176), + 46: uint16(30331), + 47: uint16(30332), + 48: uint16(30358), + 49: uint16(30355), + 50: uint16(30388), + 51: uint16(30428), + 52: uint16(30543), + 53: uint16(30701), + 54: uint16(30813), + 55: uint16(30828), + 56: uint16(30831), + 57: uint16(31245), + 58: uint16(31240), + 59: uint16(31243), + 60: uint16(31237), + 61: uint16(31232), + 62: uint16(31384), + 63: uint16(31383), + 64: uint16(31382), + 65: uint16(31461), + 66: uint16(31459), + 67: uint16(31561), + 68: uint16(31574), + 69: uint16(31558), + 70: uint16(31568), + 71: uint16(31570), + 72: uint16(31572), + 73: uint16(31565), + 74: uint16(31563), + 75: uint16(31567), + 76: uint16(31569), + 77: uint16(31903), + 78: uint16(31909), + 79: uint16(32094), + 80: uint16(32080), + 81: uint16(32104), + 82: uint16(32085), + 83: uint16(32043), + 84: uint16(32110), + 85: uint16(32114), + 86: uint16(32097), + 87: uint16(32102), + 88: uint16(32098), + 89: uint16(32112), + 90: uint16(32115), + 91: uint16(21892), + 92: uint16(32724), + 93: uint16(32725), + 94: uint16(32779), + 95: uint16(32850), + 96: uint16(32901), + 97: uint16(33109), + 98: uint16(33108), + 99: uint16(33099), + 100: uint16(33105), + 101: uint16(33102), + 102: uint16(33081), + 103: uint16(33094), + 104: uint16(33086), + 105: uint16(33100), + 106: uint16(33107), + 107: uint16(33140), + 108: uint16(33298), + 109: uint16(33308), + 110: uint16(33769), + 111: uint16(33795), + 112: uint16(33784), + 113: uint16(33805), + 114: uint16(33760), + 115: uint16(33733), + 116: uint16(33803), + 117: uint16(33729), + 118: uint16(33775), + 119: uint16(33777), + 120: uint16(33780), + 121: uint16(33879), + 122: uint16(33802), + 123: uint16(33776), + 124: uint16(33804), + 125: uint16(33740), + 126: uint16(33789), + 127: uint16(33778), + 128: uint16(33738), + 129: uint16(33848), + 130: uint16(33806), + 131: uint16(33796), + 132: uint16(33756), + 133: uint16(33799), + 134: uint16(33748), + 135: uint16(33759), + 136: uint16(34395), + 137: uint16(34527), + 138: uint16(34521), + 139: uint16(34541), + 140: uint16(34516), + 141: uint16(34523), + 142: uint16(34532), + 143: uint16(34512), + 144: uint16(34526), + 145: uint16(34903), + 146: uint16(35009), + 147: uint16(35010), + 148: uint16(34993), + 149: uint16(35203), + 150: uint16(35222), + 151: uint16(35387), + 152: uint16(35424), + 153: uint16(35413), + 154: uint16(35422), + 155: uint16(35388), + 156: uint16(35393), + }, + 21: { + 0: uint16(35412), + 1: uint16(35419), + 2: uint16(35408), + 3: uint16(35398), + 4: uint16(35380), + 5: uint16(35386), + 6: uint16(35382), + 7: uint16(35414), + 8: uint16(35937), + 9: uint16(35970), + 10: uint16(36015), + 11: uint16(36028), + 12: uint16(36019), + 13: uint16(36029), + 14: uint16(36033), + 15: uint16(36027), + 16: uint16(36032), + 17: uint16(36020), + 18: uint16(36023), + 19: uint16(36022), + 20: uint16(36031), + 21: uint16(36024), + 22: uint16(36234), + 23: uint16(36229), + 24: uint16(36225), + 25: uint16(36302), + 26: uint16(36317), + 27: uint16(36299), + 28: uint16(36314), + 29: uint16(36305), + 30: uint16(36300), + 31: uint16(36315), + 32: uint16(36294), + 33: uint16(36603), + 34: uint16(36600), + 35: uint16(36604), + 36: uint16(36764), + 37: uint16(36910), + 38: uint16(36917), + 39: uint16(36913), + 40: uint16(36920), + 41: uint16(36914), + 42: uint16(36918), + 43: uint16(37122), + 44: uint16(37109), + 45: uint16(37129), + 46: uint16(37118), + 47: uint16(37219), + 48: uint16(37221), + 49: uint16(37327), + 50: uint16(37396), + 51: uint16(37397), + 52: uint16(37411), + 53: uint16(37385), + 54: uint16(37406), + 55: uint16(37389), + 56: uint16(37392), + 57: uint16(37383), + 58: uint16(37393), + 59: uint16(38292), + 60: uint16(38287), + 61: uint16(38283), + 62: uint16(38289), + 63: uint16(38291), + 64: uint16(38290), + 65: uint16(38286), + 66: uint16(38538), + 67: uint16(38542), + 68: uint16(38539), + 69: uint16(38525), + 70: uint16(38533), + 71: uint16(38534), + 72: uint16(38541), + 73: uint16(38514), + 74: uint16(38532), + 75: uint16(38593), + 76: uint16(38597), + 77: uint16(38596), + 78: uint16(38598), + 79: uint16(38599), + 80: uint16(38639), + 81: uint16(38642), + 82: uint16(38860), + 83: uint16(38917), + 84: uint16(38918), + 85: uint16(38920), + 86: uint16(39143), + 87: uint16(39146), + 88: uint16(39151), + 89: uint16(39145), + 90: uint16(39154), + 91: uint16(39149), + 92: uint16(39342), + 93: uint16(39341), + 94: uint16(40643), + 95: uint16(40653), + 96: uint16(40657), + 97: uint16(20098), + 98: uint16(20653), + 99: uint16(20661), + 100: uint16(20658), + 101: uint16(20659), + 102: uint16(20677), + 103: uint16(20670), + 104: uint16(20652), + 105: uint16(20663), + 106: uint16(20667), + 107: uint16(20655), + 108: uint16(20679), + 109: uint16(21119), + 110: uint16(21111), + 111: uint16(21117), + 112: uint16(21215), + 113: uint16(21222), + 114: uint16(21220), + 115: uint16(21218), + 116: uint16(21219), + 117: uint16(21295), + 118: uint16(21983), + 119: uint16(21992), + 120: uint16(21971), + 121: uint16(21990), + 122: uint16(21966), + 123: uint16(21980), + 124: uint16(21959), + 125: uint16(21969), + 126: uint16(21987), + 127: uint16(21988), + 128: uint16(21999), + 129: uint16(21978), + 130: uint16(21985), + 131: uint16(21957), + 132: uint16(21958), + 133: uint16(21989), + 134: uint16(21961), + 135: uint16(22290), + 136: uint16(22291), + 137: uint16(22622), + 138: uint16(22609), + 139: uint16(22616), + 140: uint16(22615), + 141: uint16(22618), + 142: uint16(22612), + 143: uint16(22635), + 144: uint16(22604), + 145: uint16(22637), + 146: uint16(22602), + 147: uint16(22626), + 148: uint16(22610), + 149: uint16(22603), + 150: uint16(22887), + 151: uint16(23233), + 152: uint16(23241), + 153: uint16(23244), + 154: uint16(23230), + 155: uint16(23229), + 156: uint16(23228), + }, + 22: { + 0: uint16(23219), + 1: uint16(23234), + 2: uint16(23218), + 3: uint16(23913), + 4: uint16(23919), + 5: uint16(24140), + 6: uint16(24185), + 7: uint16(24265), + 8: uint16(24264), + 9: uint16(24338), + 10: uint16(24409), + 11: uint16(24492), + 12: uint16(24494), + 13: uint16(24858), + 14: uint16(24847), + 15: uint16(24904), + 16: uint16(24863), + 17: uint16(24819), + 18: uint16(24859), + 19: uint16(24825), + 20: uint16(24833), + 21: uint16(24840), + 22: uint16(24910), + 23: uint16(24908), + 24: uint16(24900), + 25: uint16(24909), + 26: uint16(24894), + 27: uint16(24884), + 28: uint16(24871), + 29: uint16(24845), + 30: uint16(24838), + 31: uint16(24887), + 32: uint16(25121), + 33: uint16(25122), + 34: uint16(25619), + 35: uint16(25662), + 36: uint16(25630), + 37: uint16(25642), + 38: uint16(25645), + 39: uint16(25661), + 40: uint16(25644), + 41: uint16(25615), + 42: uint16(25628), + 43: uint16(25620), + 44: uint16(25613), + 45: uint16(25654), + 46: uint16(25622), + 47: uint16(25623), + 48: uint16(25606), + 49: uint16(25964), + 50: uint16(26015), + 51: uint16(26032), + 52: uint16(26263), + 53: uint16(26249), + 54: uint16(26247), + 55: uint16(26248), + 56: uint16(26262), + 57: uint16(26244), + 58: uint16(26264), + 59: uint16(26253), + 60: uint16(26371), + 61: uint16(27028), + 62: uint16(26989), + 63: uint16(26970), + 64: uint16(26999), + 65: uint16(26976), + 66: uint16(26964), + 67: uint16(26997), + 68: uint16(26928), + 69: uint16(27010), + 70: uint16(26954), + 71: uint16(26984), + 72: uint16(26987), + 73: uint16(26974), + 74: uint16(26963), + 75: uint16(27001), + 76: uint16(27014), + 77: uint16(26973), + 78: uint16(26979), + 79: uint16(26971), + 80: uint16(27463), + 81: uint16(27506), + 82: uint16(27584), + 83: uint16(27583), + 84: uint16(27603), + 85: uint16(27645), + 86: uint16(28322), + 87: uint16(28335), + 88: uint16(28371), + 89: uint16(28342), + 90: uint16(28354), + 91: uint16(28304), + 92: uint16(28317), + 93: uint16(28359), + 94: uint16(28357), + 95: uint16(28325), + 96: uint16(28312), + 97: uint16(28348), + 98: uint16(28346), + 99: uint16(28331), + 100: uint16(28369), + 101: uint16(28310), + 102: uint16(28316), + 103: uint16(28356), + 104: uint16(28372), + 105: uint16(28330), + 106: uint16(28327), + 107: uint16(28340), + 108: uint16(29006), + 109: uint16(29017), + 110: uint16(29033), + 111: uint16(29028), + 112: uint16(29001), + 113: uint16(29031), + 114: uint16(29020), + 115: uint16(29036), + 116: uint16(29030), + 117: uint16(29004), + 118: uint16(29029), + 119: uint16(29022), + 120: uint16(28998), + 121: uint16(29032), + 122: uint16(29014), + 123: uint16(29242), + 124: uint16(29266), + 125: uint16(29495), + 126: uint16(29509), + 127: uint16(29503), + 128: uint16(29502), + 129: uint16(29807), + 130: uint16(29786), + 131: uint16(29781), + 132: uint16(29791), + 133: uint16(29790), + 134: uint16(29761), + 135: uint16(29759), + 136: uint16(29785), + 137: uint16(29787), + 138: uint16(29788), + 139: uint16(30070), + 140: uint16(30072), + 141: uint16(30208), + 142: uint16(30192), + 143: uint16(30209), + 144: uint16(30194), + 145: uint16(30193), + 146: uint16(30202), + 147: uint16(30207), + 148: uint16(30196), + 149: uint16(30195), + 150: uint16(30430), + 151: uint16(30431), + 152: uint16(30555), + 153: uint16(30571), + 154: uint16(30566), + 155: uint16(30558), + 156: uint16(30563), + }, + 23: { + 0: uint16(30585), + 1: uint16(30570), + 2: uint16(30572), + 3: uint16(30556), + 4: uint16(30565), + 5: uint16(30568), + 6: uint16(30562), + 7: uint16(30702), + 8: uint16(30862), + 9: uint16(30896), + 10: uint16(30871), + 11: uint16(30872), + 12: uint16(30860), + 13: uint16(30857), + 14: uint16(30844), + 15: uint16(30865), + 16: uint16(30867), + 17: uint16(30847), + 18: uint16(31098), + 19: uint16(31103), + 20: uint16(31105), + 21: uint16(33836), + 22: uint16(31165), + 23: uint16(31260), + 24: uint16(31258), + 25: uint16(31264), + 26: uint16(31252), + 27: uint16(31263), + 28: uint16(31262), + 29: uint16(31391), + 30: uint16(31392), + 31: uint16(31607), + 32: uint16(31680), + 33: uint16(31584), + 34: uint16(31598), + 35: uint16(31591), + 36: uint16(31921), + 37: uint16(31923), + 38: uint16(31925), + 39: uint16(32147), + 40: uint16(32121), + 41: uint16(32145), + 42: uint16(32129), + 43: uint16(32143), + 44: uint16(32091), + 45: uint16(32622), + 46: uint16(32617), + 47: uint16(32618), + 48: uint16(32626), + 49: uint16(32681), + 50: uint16(32680), + 51: uint16(32676), + 52: uint16(32854), + 53: uint16(32856), + 54: uint16(32902), + 55: uint16(32900), + 56: uint16(33137), + 57: uint16(33136), + 58: uint16(33144), + 59: uint16(33125), + 60: uint16(33134), + 61: uint16(33139), + 62: uint16(33131), + 63: uint16(33145), + 64: uint16(33146), + 65: uint16(33126), + 66: uint16(33285), + 67: uint16(33351), + 68: uint16(33922), + 69: uint16(33911), + 70: uint16(33853), + 71: uint16(33841), + 72: uint16(33909), + 73: uint16(33894), + 74: uint16(33899), + 75: uint16(33865), + 76: uint16(33900), + 77: uint16(33883), + 78: uint16(33852), + 79: uint16(33845), + 80: uint16(33889), + 81: uint16(33891), + 82: uint16(33897), + 83: uint16(33901), + 84: uint16(33862), + 85: uint16(34398), + 86: uint16(34396), + 87: uint16(34399), + 88: uint16(34553), + 89: uint16(34579), + 90: uint16(34568), + 91: uint16(34567), + 92: uint16(34560), + 93: uint16(34558), + 94: uint16(34555), + 95: uint16(34562), + 96: uint16(34563), + 97: uint16(34566), + 98: uint16(34570), + 99: uint16(34905), + 100: uint16(35039), + 101: uint16(35028), + 102: uint16(35033), + 103: uint16(35036), + 104: uint16(35032), + 105: uint16(35037), + 106: uint16(35041), + 107: uint16(35018), + 108: uint16(35029), + 109: uint16(35026), + 110: uint16(35228), + 111: uint16(35299), + 112: uint16(35435), + 113: uint16(35442), + 114: uint16(35443), + 115: uint16(35430), + 116: uint16(35433), + 117: uint16(35440), + 118: uint16(35463), + 119: uint16(35452), + 120: uint16(35427), + 121: uint16(35488), + 122: uint16(35441), + 123: uint16(35461), + 124: uint16(35437), + 125: uint16(35426), + 126: uint16(35438), + 127: uint16(35436), + 128: uint16(35449), + 129: uint16(35451), + 130: uint16(35390), + 131: uint16(35432), + 132: uint16(35938), + 133: uint16(35978), + 134: uint16(35977), + 135: uint16(36042), + 136: uint16(36039), + 137: uint16(36040), + 138: uint16(36036), + 139: uint16(36018), + 140: uint16(36035), + 141: uint16(36034), + 142: uint16(36037), + 143: uint16(36321), + 144: uint16(36319), + 145: uint16(36328), + 146: uint16(36335), + 147: uint16(36339), + 148: uint16(36346), + 149: uint16(36330), + 150: uint16(36324), + 151: uint16(36326), + 152: uint16(36530), + 153: uint16(36611), + 154: uint16(36617), + 155: uint16(36606), + 156: uint16(36618), + }, + 24: { + 0: uint16(36767), + 1: uint16(36786), + 2: uint16(36939), + 3: uint16(36938), + 4: uint16(36947), + 5: uint16(36930), + 6: uint16(36948), + 7: uint16(36924), + 8: uint16(36949), + 9: uint16(36944), + 10: uint16(36935), + 11: uint16(36943), + 12: uint16(36942), + 13: uint16(36941), + 14: uint16(36945), + 15: uint16(36926), + 16: uint16(36929), + 17: uint16(37138), + 18: uint16(37143), + 19: uint16(37228), + 20: uint16(37226), + 21: uint16(37225), + 22: uint16(37321), + 23: uint16(37431), + 24: uint16(37463), + 25: uint16(37432), + 26: uint16(37437), + 27: uint16(37440), + 28: uint16(37438), + 29: uint16(37467), + 30: uint16(37451), + 31: uint16(37476), + 32: uint16(37457), + 33: uint16(37428), + 34: uint16(37449), + 35: uint16(37453), + 36: uint16(37445), + 37: uint16(37433), + 38: uint16(37439), + 39: uint16(37466), + 40: uint16(38296), + 41: uint16(38552), + 42: uint16(38548), + 43: uint16(38549), + 44: uint16(38605), + 45: uint16(38603), + 46: uint16(38601), + 47: uint16(38602), + 48: uint16(38647), + 49: uint16(38651), + 50: uint16(38649), + 51: uint16(38646), + 52: uint16(38742), + 53: uint16(38772), + 54: uint16(38774), + 55: uint16(38928), + 56: uint16(38929), + 57: uint16(38931), + 58: uint16(38922), + 59: uint16(38930), + 60: uint16(38924), + 61: uint16(39164), + 62: uint16(39156), + 63: uint16(39165), + 64: uint16(39166), + 65: uint16(39347), + 66: uint16(39345), + 67: uint16(39348), + 68: uint16(39649), + 69: uint16(40169), + 70: uint16(40578), + 71: uint16(40718), + 72: uint16(40723), + 73: uint16(40736), + 74: uint16(20711), + 75: uint16(20718), + 76: uint16(20709), + 77: uint16(20694), + 78: uint16(20717), + 79: uint16(20698), + 80: uint16(20693), + 81: uint16(20687), + 82: uint16(20689), + 83: uint16(20721), + 84: uint16(20686), + 85: uint16(20713), + 86: uint16(20834), + 87: uint16(20979), + 88: uint16(21123), + 89: uint16(21122), + 90: uint16(21297), + 91: uint16(21421), + 92: uint16(22014), + 93: uint16(22016), + 94: uint16(22043), + 95: uint16(22039), + 96: uint16(22013), + 97: uint16(22036), + 98: uint16(22022), + 99: uint16(22025), + 100: uint16(22029), + 101: uint16(22030), + 102: uint16(22007), + 103: uint16(22038), + 104: uint16(22047), + 105: uint16(22024), + 106: uint16(22032), + 107: uint16(22006), + 108: uint16(22296), + 109: uint16(22294), + 110: uint16(22645), + 111: uint16(22654), + 112: uint16(22659), + 113: uint16(22675), + 114: uint16(22666), + 115: uint16(22649), + 116: uint16(22661), + 117: uint16(22653), + 118: uint16(22781), + 119: uint16(22821), + 120: uint16(22818), + 121: uint16(22820), + 122: uint16(22890), + 123: uint16(22889), + 124: uint16(23265), + 125: uint16(23270), + 126: uint16(23273), + 127: uint16(23255), + 128: uint16(23254), + 129: uint16(23256), + 130: uint16(23267), + 131: uint16(23413), + 132: uint16(23518), + 133: uint16(23527), + 134: uint16(23521), + 135: uint16(23525), + 136: uint16(23526), + 137: uint16(23528), + 138: uint16(23522), + 139: uint16(23524), + 140: uint16(23519), + 141: uint16(23565), + 142: uint16(23650), + 143: uint16(23940), + 144: uint16(23943), + 145: uint16(24155), + 146: uint16(24163), + 147: uint16(24149), + 148: uint16(24151), + 149: uint16(24148), + 150: uint16(24275), + 151: uint16(24278), + 152: uint16(24330), + 153: uint16(24390), + 154: uint16(24432), + 155: uint16(24505), + 156: uint16(24903), + }, + 25: { + 0: uint16(24895), + 1: uint16(24907), + 2: uint16(24951), + 3: uint16(24930), + 4: uint16(24931), + 5: uint16(24927), + 6: uint16(24922), + 7: uint16(24920), + 8: uint16(24949), + 9: uint16(25130), + 10: uint16(25735), + 11: uint16(25688), + 12: uint16(25684), + 13: uint16(25764), + 14: uint16(25720), + 15: uint16(25695), + 16: uint16(25722), + 17: uint16(25681), + 18: uint16(25703), + 19: uint16(25652), + 20: uint16(25709), + 21: uint16(25723), + 22: uint16(25970), + 23: uint16(26017), + 24: uint16(26071), + 25: uint16(26070), + 26: uint16(26274), + 27: uint16(26280), + 28: uint16(26269), + 29: uint16(27036), + 30: uint16(27048), + 31: uint16(27029), + 32: uint16(27073), + 33: uint16(27054), + 34: uint16(27091), + 35: uint16(27083), + 36: uint16(27035), + 37: uint16(27063), + 38: uint16(27067), + 39: uint16(27051), + 40: uint16(27060), + 41: uint16(27088), + 42: uint16(27085), + 43: uint16(27053), + 44: uint16(27084), + 45: uint16(27046), + 46: uint16(27075), + 47: uint16(27043), + 48: uint16(27465), + 49: uint16(27468), + 50: uint16(27699), + 51: uint16(28467), + 52: uint16(28436), + 53: uint16(28414), + 54: uint16(28435), + 55: uint16(28404), + 56: uint16(28457), + 57: uint16(28478), + 58: uint16(28448), + 59: uint16(28460), + 60: uint16(28431), + 61: uint16(28418), + 62: uint16(28450), + 63: uint16(28415), + 64: uint16(28399), + 65: uint16(28422), + 66: uint16(28465), + 67: uint16(28472), + 68: uint16(28466), + 69: uint16(28451), + 70: uint16(28437), + 71: uint16(28459), + 72: uint16(28463), + 73: uint16(28552), + 74: uint16(28458), + 75: uint16(28396), + 76: uint16(28417), + 77: uint16(28402), + 78: uint16(28364), + 79: uint16(28407), + 80: uint16(29076), + 81: uint16(29081), + 82: uint16(29053), + 83: uint16(29066), + 84: uint16(29060), + 85: uint16(29074), + 86: uint16(29246), + 87: uint16(29330), + 88: uint16(29334), + 89: uint16(29508), + 90: uint16(29520), + 91: uint16(29796), + 92: uint16(29795), + 93: uint16(29802), + 94: uint16(29808), + 95: uint16(29805), + 96: uint16(29956), + 97: uint16(30097), + 98: uint16(30247), + 99: uint16(30221), + 100: uint16(30219), + 101: uint16(30217), + 102: uint16(30227), + 103: uint16(30433), + 104: uint16(30435), + 105: uint16(30596), + 106: uint16(30589), + 107: uint16(30591), + 108: uint16(30561), + 109: uint16(30913), + 110: uint16(30879), + 111: uint16(30887), + 112: uint16(30899), + 113: uint16(30889), + 114: uint16(30883), + 115: uint16(31118), + 116: uint16(31119), + 117: uint16(31117), + 118: uint16(31278), + 119: uint16(31281), + 120: uint16(31402), + 121: uint16(31401), + 122: uint16(31469), + 123: uint16(31471), + 124: uint16(31649), + 125: uint16(31637), + 126: uint16(31627), + 127: uint16(31605), + 128: uint16(31639), + 129: uint16(31645), + 130: uint16(31636), + 131: uint16(31631), + 132: uint16(31672), + 133: uint16(31623), + 134: uint16(31620), + 135: uint16(31929), + 136: uint16(31933), + 137: uint16(31934), + 138: uint16(32187), + 139: uint16(32176), + 140: uint16(32156), + 141: uint16(32189), + 142: uint16(32190), + 143: uint16(32160), + 144: uint16(32202), + 145: uint16(32180), + 146: uint16(32178), + 147: uint16(32177), + 148: uint16(32186), + 149: uint16(32162), + 150: uint16(32191), + 151: uint16(32181), + 152: uint16(32184), + 153: uint16(32173), + 154: uint16(32210), + 155: uint16(32199), + 156: uint16(32172), + }, + 26: { + 0: uint16(32624), + 1: uint16(32736), + 2: uint16(32737), + 3: uint16(32735), + 4: uint16(32862), + 5: uint16(32858), + 6: uint16(32903), + 7: uint16(33104), + 8: uint16(33152), + 9: uint16(33167), + 10: uint16(33160), + 11: uint16(33162), + 12: uint16(33151), + 13: uint16(33154), + 14: uint16(33255), + 15: uint16(33274), + 16: uint16(33287), + 17: uint16(33300), + 18: uint16(33310), + 19: uint16(33355), + 20: uint16(33993), + 21: uint16(33983), + 22: uint16(33990), + 23: uint16(33988), + 24: uint16(33945), + 25: uint16(33950), + 26: uint16(33970), + 27: uint16(33948), + 28: uint16(33995), + 29: uint16(33976), + 30: uint16(33984), + 31: uint16(34003), + 32: uint16(33936), + 33: uint16(33980), + 34: uint16(34001), + 35: uint16(33994), + 36: uint16(34623), + 37: uint16(34588), + 38: uint16(34619), + 39: uint16(34594), + 40: uint16(34597), + 41: uint16(34612), + 42: uint16(34584), + 43: uint16(34645), + 44: uint16(34615), + 45: uint16(34601), + 46: uint16(35059), + 47: uint16(35074), + 48: uint16(35060), + 49: uint16(35065), + 50: uint16(35064), + 51: uint16(35069), + 52: uint16(35048), + 53: uint16(35098), + 54: uint16(35055), + 55: uint16(35494), + 56: uint16(35468), + 57: uint16(35486), + 58: uint16(35491), + 59: uint16(35469), + 60: uint16(35489), + 61: uint16(35475), + 62: uint16(35492), + 63: uint16(35498), + 64: uint16(35493), + 65: uint16(35496), + 66: uint16(35480), + 67: uint16(35473), + 68: uint16(35482), + 69: uint16(35495), + 70: uint16(35946), + 71: uint16(35981), + 72: uint16(35980), + 73: uint16(36051), + 74: uint16(36049), + 75: uint16(36050), + 76: uint16(36203), + 77: uint16(36249), + 78: uint16(36245), + 79: uint16(36348), + 80: uint16(36628), + 81: uint16(36626), + 82: uint16(36629), + 83: uint16(36627), + 84: uint16(36771), + 85: uint16(36960), + 86: uint16(36952), + 87: uint16(36956), + 88: uint16(36963), + 89: uint16(36953), + 90: uint16(36958), + 91: uint16(36962), + 92: uint16(36957), + 93: uint16(36955), + 94: uint16(37145), + 95: uint16(37144), + 96: uint16(37150), + 97: uint16(37237), + 98: uint16(37240), + 99: uint16(37239), + 100: uint16(37236), + 101: uint16(37496), + 102: uint16(37504), + 103: uint16(37509), + 104: uint16(37528), + 105: uint16(37526), + 106: uint16(37499), + 107: uint16(37523), + 108: uint16(37532), + 109: uint16(37544), + 110: uint16(37500), + 111: uint16(37521), + 112: uint16(38305), + 113: uint16(38312), + 114: uint16(38313), + 115: uint16(38307), + 116: uint16(38309), + 117: uint16(38308), + 118: uint16(38553), + 119: uint16(38556), + 120: uint16(38555), + 121: uint16(38604), + 122: uint16(38610), + 123: uint16(38656), + 124: uint16(38780), + 125: uint16(38789), + 126: uint16(38902), + 127: uint16(38935), + 128: uint16(38936), + 129: uint16(39087), + 130: uint16(39089), + 131: uint16(39171), + 132: uint16(39173), + 133: uint16(39180), + 134: uint16(39177), + 135: uint16(39361), + 136: uint16(39599), + 137: uint16(39600), + 138: uint16(39654), + 139: uint16(39745), + 140: uint16(39746), + 141: uint16(40180), + 142: uint16(40182), + 143: uint16(40179), + 144: uint16(40636), + 145: uint16(40763), + 146: uint16(40778), + 147: uint16(20740), + 148: uint16(20736), + 149: uint16(20731), + 150: uint16(20725), + 151: uint16(20729), + 152: uint16(20738), + 153: uint16(20744), + 154: uint16(20745), + 155: uint16(20741), + 156: uint16(20956), + }, + 27: { + 0: uint16(21127), + 1: uint16(21128), + 2: uint16(21129), + 3: uint16(21133), + 4: uint16(21130), + 5: uint16(21232), + 6: uint16(21426), + 7: uint16(22062), + 8: uint16(22075), + 9: uint16(22073), + 10: uint16(22066), + 11: uint16(22079), + 12: uint16(22068), + 13: uint16(22057), + 14: uint16(22099), + 15: uint16(22094), + 16: uint16(22103), + 17: uint16(22132), + 18: uint16(22070), + 19: uint16(22063), + 20: uint16(22064), + 21: uint16(22656), + 22: uint16(22687), + 23: uint16(22686), + 24: uint16(22707), + 25: uint16(22684), + 26: uint16(22702), + 27: uint16(22697), + 28: uint16(22694), + 29: uint16(22893), + 30: uint16(23305), + 31: uint16(23291), + 32: uint16(23307), + 33: uint16(23285), + 34: uint16(23308), + 35: uint16(23304), + 36: uint16(23534), + 37: uint16(23532), + 38: uint16(23529), + 39: uint16(23531), + 40: uint16(23652), + 41: uint16(23653), + 42: uint16(23965), + 43: uint16(23956), + 44: uint16(24162), + 45: uint16(24159), + 46: uint16(24161), + 47: uint16(24290), + 48: uint16(24282), + 49: uint16(24287), + 50: uint16(24285), + 51: uint16(24291), + 52: uint16(24288), + 53: uint16(24392), + 54: uint16(24433), + 55: uint16(24503), + 56: uint16(24501), + 57: uint16(24950), + 58: uint16(24935), + 59: uint16(24942), + 60: uint16(24925), + 61: uint16(24917), + 62: uint16(24962), + 63: uint16(24956), + 64: uint16(24944), + 65: uint16(24939), + 66: uint16(24958), + 67: uint16(24999), + 68: uint16(24976), + 69: uint16(25003), + 70: uint16(24974), + 71: uint16(25004), + 72: uint16(24986), + 73: uint16(24996), + 74: uint16(24980), + 75: uint16(25006), + 76: uint16(25134), + 77: uint16(25705), + 78: uint16(25711), + 79: uint16(25721), + 80: uint16(25758), + 81: uint16(25778), + 82: uint16(25736), + 83: uint16(25744), + 84: uint16(25776), + 85: uint16(25765), + 86: uint16(25747), + 87: uint16(25749), + 88: uint16(25769), + 89: uint16(25746), + 90: uint16(25774), + 91: uint16(25773), + 92: uint16(25771), + 93: uint16(25754), + 94: uint16(25772), + 95: uint16(25753), + 96: uint16(25762), + 97: uint16(25779), + 98: uint16(25973), + 99: uint16(25975), + 100: uint16(25976), + 101: uint16(26286), + 102: uint16(26283), + 103: uint16(26292), + 104: uint16(26289), + 105: uint16(27171), + 106: uint16(27167), + 107: uint16(27112), + 108: uint16(27137), + 109: uint16(27166), + 110: uint16(27161), + 111: uint16(27133), + 112: uint16(27169), + 113: uint16(27155), + 114: uint16(27146), + 115: uint16(27123), + 116: uint16(27138), + 117: uint16(27141), + 118: uint16(27117), + 119: uint16(27153), + 120: uint16(27472), + 121: uint16(27470), + 122: uint16(27556), + 123: uint16(27589), + 124: uint16(27590), + 125: uint16(28479), + 126: uint16(28540), + 127: uint16(28548), + 128: uint16(28497), + 129: uint16(28518), + 130: uint16(28500), + 131: uint16(28550), + 132: uint16(28525), + 133: uint16(28507), + 134: uint16(28536), + 135: uint16(28526), + 136: uint16(28558), + 137: uint16(28538), + 138: uint16(28528), + 139: uint16(28516), + 140: uint16(28567), + 141: uint16(28504), + 142: uint16(28373), + 143: uint16(28527), + 144: uint16(28512), + 145: uint16(28511), + 146: uint16(29087), + 147: uint16(29100), + 148: uint16(29105), + 149: uint16(29096), + 150: uint16(29270), + 151: uint16(29339), + 152: uint16(29518), + 153: uint16(29527), + 154: uint16(29801), + 155: uint16(29835), + 156: uint16(29827), + }, + 28: { + 0: uint16(29822), + 1: uint16(29824), + 2: uint16(30079), + 3: uint16(30240), + 4: uint16(30249), + 5: uint16(30239), + 6: uint16(30244), + 7: uint16(30246), + 8: uint16(30241), + 9: uint16(30242), + 10: uint16(30362), + 11: uint16(30394), + 12: uint16(30436), + 13: uint16(30606), + 14: uint16(30599), + 15: uint16(30604), + 16: uint16(30609), + 17: uint16(30603), + 18: uint16(30923), + 19: uint16(30917), + 20: uint16(30906), + 21: uint16(30922), + 22: uint16(30910), + 23: uint16(30933), + 24: uint16(30908), + 25: uint16(30928), + 26: uint16(31295), + 27: uint16(31292), + 28: uint16(31296), + 29: uint16(31293), + 30: uint16(31287), + 31: uint16(31291), + 32: uint16(31407), + 33: uint16(31406), + 34: uint16(31661), + 35: uint16(31665), + 36: uint16(31684), + 37: uint16(31668), + 38: uint16(31686), + 39: uint16(31687), + 40: uint16(31681), + 41: uint16(31648), + 42: uint16(31692), + 43: uint16(31946), + 44: uint16(32224), + 45: uint16(32244), + 46: uint16(32239), + 47: uint16(32251), + 48: uint16(32216), + 49: uint16(32236), + 50: uint16(32221), + 51: uint16(32232), + 52: uint16(32227), + 53: uint16(32218), + 54: uint16(32222), + 55: uint16(32233), + 56: uint16(32158), + 57: uint16(32217), + 58: uint16(32242), + 59: uint16(32249), + 60: uint16(32629), + 61: uint16(32631), + 62: uint16(32687), + 63: uint16(32745), + 64: uint16(32806), + 65: uint16(33179), + 66: uint16(33180), + 67: uint16(33181), + 68: uint16(33184), + 69: uint16(33178), + 70: uint16(33176), + 71: uint16(34071), + 72: uint16(34109), + 73: uint16(34074), + 74: uint16(34030), + 75: uint16(34092), + 76: uint16(34093), + 77: uint16(34067), + 78: uint16(34065), + 79: uint16(34083), + 80: uint16(34081), + 81: uint16(34068), + 82: uint16(34028), + 83: uint16(34085), + 84: uint16(34047), + 85: uint16(34054), + 86: uint16(34690), + 87: uint16(34676), + 88: uint16(34678), + 89: uint16(34656), + 90: uint16(34662), + 91: uint16(34680), + 92: uint16(34664), + 93: uint16(34649), + 94: uint16(34647), + 95: uint16(34636), + 96: uint16(34643), + 97: uint16(34907), + 98: uint16(34909), + 99: uint16(35088), + 100: uint16(35079), + 101: uint16(35090), + 102: uint16(35091), + 103: uint16(35093), + 104: uint16(35082), + 105: uint16(35516), + 106: uint16(35538), + 107: uint16(35527), + 108: uint16(35524), + 109: uint16(35477), + 110: uint16(35531), + 111: uint16(35576), + 112: uint16(35506), + 113: uint16(35529), + 114: uint16(35522), + 115: uint16(35519), + 116: uint16(35504), + 117: uint16(35542), + 118: uint16(35533), + 119: uint16(35510), + 120: uint16(35513), + 121: uint16(35547), + 122: uint16(35916), + 123: uint16(35918), + 124: uint16(35948), + 125: uint16(36064), + 126: uint16(36062), + 127: uint16(36070), + 128: uint16(36068), + 129: uint16(36076), + 130: uint16(36077), + 131: uint16(36066), + 132: uint16(36067), + 133: uint16(36060), + 134: uint16(36074), + 135: uint16(36065), + 136: uint16(36205), + 137: uint16(36255), + 138: uint16(36259), + 139: uint16(36395), + 140: uint16(36368), + 141: uint16(36381), + 142: uint16(36386), + 143: uint16(36367), + 144: uint16(36393), + 145: uint16(36383), + 146: uint16(36385), + 147: uint16(36382), + 148: uint16(36538), + 149: uint16(36637), + 150: uint16(36635), + 151: uint16(36639), + 152: uint16(36649), + 153: uint16(36646), + 154: uint16(36650), + 155: uint16(36636), + 156: uint16(36638), + }, + 29: { + 0: uint16(36645), + 1: uint16(36969), + 2: uint16(36974), + 3: uint16(36968), + 4: uint16(36973), + 5: uint16(36983), + 6: uint16(37168), + 7: uint16(37165), + 8: uint16(37159), + 9: uint16(37169), + 10: uint16(37255), + 11: uint16(37257), + 12: uint16(37259), + 13: uint16(37251), + 14: uint16(37573), + 15: uint16(37563), + 16: uint16(37559), + 17: uint16(37610), + 18: uint16(37548), + 19: uint16(37604), + 20: uint16(37569), + 21: uint16(37555), + 22: uint16(37564), + 23: uint16(37586), + 24: uint16(37575), + 25: uint16(37616), + 26: uint16(37554), + 27: uint16(38317), + 28: uint16(38321), + 29: uint16(38660), + 30: uint16(38662), + 31: uint16(38663), + 32: uint16(38665), + 33: uint16(38752), + 34: uint16(38797), + 35: uint16(38795), + 36: uint16(38799), + 37: uint16(38945), + 38: uint16(38955), + 39: uint16(38940), + 40: uint16(39091), + 41: uint16(39178), + 42: uint16(39187), + 43: uint16(39186), + 44: uint16(39192), + 45: uint16(39389), + 46: uint16(39376), + 47: uint16(39391), + 48: uint16(39387), + 49: uint16(39377), + 50: uint16(39381), + 51: uint16(39378), + 52: uint16(39385), + 53: uint16(39607), + 54: uint16(39662), + 55: uint16(39663), + 56: uint16(39719), + 57: uint16(39749), + 58: uint16(39748), + 59: uint16(39799), + 60: uint16(39791), + 61: uint16(40198), + 62: uint16(40201), + 63: uint16(40195), + 64: uint16(40617), + 65: uint16(40638), + 66: uint16(40654), + 67: uint16(22696), + 68: uint16(40786), + 69: uint16(20754), + 70: uint16(20760), + 71: uint16(20756), + 72: uint16(20752), + 73: uint16(20757), + 74: uint16(20864), + 75: uint16(20906), + 76: uint16(20957), + 77: uint16(21137), + 78: uint16(21139), + 79: uint16(21235), + 80: uint16(22105), + 81: uint16(22123), + 82: uint16(22137), + 83: uint16(22121), + 84: uint16(22116), + 85: uint16(22136), + 86: uint16(22122), + 87: uint16(22120), + 88: uint16(22117), + 89: uint16(22129), + 90: uint16(22127), + 91: uint16(22124), + 92: uint16(22114), + 93: uint16(22134), + 94: uint16(22721), + 95: uint16(22718), + 96: uint16(22727), + 97: uint16(22725), + 98: uint16(22894), + 99: uint16(23325), + 100: uint16(23348), + 101: uint16(23416), + 102: uint16(23536), + 103: uint16(23566), + 104: uint16(24394), + 105: uint16(25010), + 106: uint16(24977), + 107: uint16(25001), + 108: uint16(24970), + 109: uint16(25037), + 110: uint16(25014), + 111: uint16(25022), + 112: uint16(25034), + 113: uint16(25032), + 114: uint16(25136), + 115: uint16(25797), + 116: uint16(25793), + 117: uint16(25803), + 118: uint16(25787), + 119: uint16(25788), + 120: uint16(25818), + 121: uint16(25796), + 122: uint16(25799), + 123: uint16(25794), + 124: uint16(25805), + 125: uint16(25791), + 126: uint16(25810), + 127: uint16(25812), + 128: uint16(25790), + 129: uint16(25972), + 130: uint16(26310), + 131: uint16(26313), + 132: uint16(26297), + 133: uint16(26308), + 134: uint16(26311), + 135: uint16(26296), + 136: uint16(27197), + 137: uint16(27192), + 138: uint16(27194), + 139: uint16(27225), + 140: uint16(27243), + 141: uint16(27224), + 142: uint16(27193), + 143: uint16(27204), + 144: uint16(27234), + 145: uint16(27233), + 146: uint16(27211), + 147: uint16(27207), + 148: uint16(27189), + 149: uint16(27231), + 150: uint16(27208), + 151: uint16(27481), + 152: uint16(27511), + 153: uint16(27653), + 154: uint16(28610), + 155: uint16(28593), + 156: uint16(28577), + }, + 30: { + 0: uint16(28611), + 1: uint16(28580), + 2: uint16(28609), + 3: uint16(28583), + 4: uint16(28595), + 5: uint16(28608), + 6: uint16(28601), + 7: uint16(28598), + 8: uint16(28582), + 9: uint16(28576), + 10: uint16(28596), + 11: uint16(29118), + 12: uint16(29129), + 13: uint16(29136), + 14: uint16(29138), + 15: uint16(29128), + 16: uint16(29141), + 17: uint16(29113), + 18: uint16(29134), + 19: uint16(29145), + 20: uint16(29148), + 21: uint16(29123), + 22: uint16(29124), + 23: uint16(29544), + 24: uint16(29852), + 25: uint16(29859), + 26: uint16(29848), + 27: uint16(29855), + 28: uint16(29854), + 29: uint16(29922), + 30: uint16(29964), + 31: uint16(29965), + 32: uint16(30260), + 33: uint16(30264), + 34: uint16(30266), + 35: uint16(30439), + 36: uint16(30437), + 37: uint16(30624), + 38: uint16(30622), + 39: uint16(30623), + 40: uint16(30629), + 41: uint16(30952), + 42: uint16(30938), + 43: uint16(30956), + 44: uint16(30951), + 45: uint16(31142), + 46: uint16(31309), + 47: uint16(31310), + 48: uint16(31302), + 49: uint16(31308), + 50: uint16(31307), + 51: uint16(31418), + 52: uint16(31705), + 53: uint16(31761), + 54: uint16(31689), + 55: uint16(31716), + 56: uint16(31707), + 57: uint16(31713), + 58: uint16(31721), + 59: uint16(31718), + 60: uint16(31957), + 61: uint16(31958), + 62: uint16(32266), + 63: uint16(32273), + 64: uint16(32264), + 65: uint16(32283), + 66: uint16(32291), + 67: uint16(32286), + 68: uint16(32285), + 69: uint16(32265), + 70: uint16(32272), + 71: uint16(32633), + 72: uint16(32690), + 73: uint16(32752), + 74: uint16(32753), + 75: uint16(32750), + 76: uint16(32808), + 77: uint16(33203), + 78: uint16(33193), + 79: uint16(33192), + 80: uint16(33275), + 81: uint16(33288), + 82: uint16(33368), + 83: uint16(33369), + 84: uint16(34122), + 85: uint16(34137), + 86: uint16(34120), + 87: uint16(34152), + 88: uint16(34153), + 89: uint16(34115), + 90: uint16(34121), + 91: uint16(34157), + 92: uint16(34154), + 93: uint16(34142), + 94: uint16(34691), + 95: uint16(34719), + 96: uint16(34718), + 97: uint16(34722), + 98: uint16(34701), + 99: uint16(34913), + 100: uint16(35114), + 101: uint16(35122), + 102: uint16(35109), + 103: uint16(35115), + 104: uint16(35105), + 105: uint16(35242), + 106: uint16(35238), + 107: uint16(35558), + 108: uint16(35578), + 109: uint16(35563), + 110: uint16(35569), + 111: uint16(35584), + 112: uint16(35548), + 113: uint16(35559), + 114: uint16(35566), + 115: uint16(35582), + 116: uint16(35585), + 117: uint16(35586), + 118: uint16(35575), + 119: uint16(35565), + 120: uint16(35571), + 121: uint16(35574), + 122: uint16(35580), + 123: uint16(35947), + 124: uint16(35949), + 125: uint16(35987), + 126: uint16(36084), + 127: uint16(36420), + 128: uint16(36401), + 129: uint16(36404), + 130: uint16(36418), + 131: uint16(36409), + 132: uint16(36405), + 133: uint16(36667), + 134: uint16(36655), + 135: uint16(36664), + 136: uint16(36659), + 137: uint16(36776), + 138: uint16(36774), + 139: uint16(36981), + 140: uint16(36980), + 141: uint16(36984), + 142: uint16(36978), + 143: uint16(36988), + 144: uint16(36986), + 145: uint16(37172), + 146: uint16(37266), + 147: uint16(37664), + 148: uint16(37686), + 149: uint16(37624), + 150: uint16(37683), + 151: uint16(37679), + 152: uint16(37666), + 153: uint16(37628), + 154: uint16(37675), + 155: uint16(37636), + 156: uint16(37658), + }, + 31: { + 0: uint16(37648), + 1: uint16(37670), + 2: uint16(37665), + 3: uint16(37653), + 4: uint16(37678), + 5: uint16(37657), + 6: uint16(38331), + 7: uint16(38567), + 8: uint16(38568), + 9: uint16(38570), + 10: uint16(38613), + 11: uint16(38670), + 12: uint16(38673), + 13: uint16(38678), + 14: uint16(38669), + 15: uint16(38675), + 16: uint16(38671), + 17: uint16(38747), + 18: uint16(38748), + 19: uint16(38758), + 20: uint16(38808), + 21: uint16(38960), + 22: uint16(38968), + 23: uint16(38971), + 24: uint16(38967), + 25: uint16(38957), + 26: uint16(38969), + 27: uint16(38948), + 28: uint16(39184), + 29: uint16(39208), + 30: uint16(39198), + 31: uint16(39195), + 32: uint16(39201), + 33: uint16(39194), + 34: uint16(39405), + 35: uint16(39394), + 36: uint16(39409), + 37: uint16(39608), + 38: uint16(39612), + 39: uint16(39675), + 40: uint16(39661), + 41: uint16(39720), + 42: uint16(39825), + 43: uint16(40213), + 44: uint16(40227), + 45: uint16(40230), + 46: uint16(40232), + 47: uint16(40210), + 48: uint16(40219), + 49: uint16(40664), + 50: uint16(40660), + 51: uint16(40845), + 52: uint16(40860), + 53: uint16(20778), + 54: uint16(20767), + 55: uint16(20769), + 56: uint16(20786), + 57: uint16(21237), + 58: uint16(22158), + 59: uint16(22144), + 60: uint16(22160), + 61: uint16(22149), + 62: uint16(22151), + 63: uint16(22159), + 64: uint16(22741), + 65: uint16(22739), + 66: uint16(22737), + 67: uint16(22734), + 68: uint16(23344), + 69: uint16(23338), + 70: uint16(23332), + 71: uint16(23418), + 72: uint16(23607), + 73: uint16(23656), + 74: uint16(23996), + 75: uint16(23994), + 76: uint16(23997), + 77: uint16(23992), + 78: uint16(24171), + 79: uint16(24396), + 80: uint16(24509), + 81: uint16(25033), + 82: uint16(25026), + 83: uint16(25031), + 84: uint16(25062), + 85: uint16(25035), + 86: uint16(25138), + 87: uint16(25140), + 88: uint16(25806), + 89: uint16(25802), + 90: uint16(25816), + 91: uint16(25824), + 92: uint16(25840), + 93: uint16(25830), + 94: uint16(25836), + 95: uint16(25841), + 96: uint16(25826), + 97: uint16(25837), + 98: uint16(25986), + 99: uint16(25987), + 100: uint16(26329), + 101: uint16(26326), + 102: uint16(27264), + 103: uint16(27284), + 104: uint16(27268), + 105: uint16(27298), + 106: uint16(27292), + 107: uint16(27355), + 108: uint16(27299), + 109: uint16(27262), + 110: uint16(27287), + 111: uint16(27280), + 112: uint16(27296), + 113: uint16(27484), + 114: uint16(27566), + 115: uint16(27610), + 116: uint16(27656), + 117: uint16(28632), + 118: uint16(28657), + 119: uint16(28639), + 120: uint16(28640), + 121: uint16(28635), + 122: uint16(28644), + 123: uint16(28651), + 124: uint16(28655), + 125: uint16(28544), + 126: uint16(28652), + 127: uint16(28641), + 128: uint16(28649), + 129: uint16(28629), + 130: uint16(28654), + 131: uint16(28656), + 132: uint16(29159), + 133: uint16(29151), + 134: uint16(29166), + 135: uint16(29158), + 136: uint16(29157), + 137: uint16(29165), + 138: uint16(29164), + 139: uint16(29172), + 140: uint16(29152), + 141: uint16(29237), + 142: uint16(29254), + 143: uint16(29552), + 144: uint16(29554), + 145: uint16(29865), + 146: uint16(29872), + 147: uint16(29862), + 148: uint16(29864), + 149: uint16(30278), + 150: uint16(30274), + 151: uint16(30284), + 152: uint16(30442), + 153: uint16(30643), + 154: uint16(30634), + 155: uint16(30640), + 156: uint16(30636), + }, + 32: { + 0: uint16(30631), + 1: uint16(30637), + 2: uint16(30703), + 3: uint16(30967), + 4: uint16(30970), + 5: uint16(30964), + 6: uint16(30959), + 7: uint16(30977), + 8: uint16(31143), + 9: uint16(31146), + 10: uint16(31319), + 11: uint16(31423), + 12: uint16(31751), + 13: uint16(31757), + 14: uint16(31742), + 15: uint16(31735), + 16: uint16(31756), + 17: uint16(31712), + 18: uint16(31968), + 19: uint16(31964), + 20: uint16(31966), + 21: uint16(31970), + 22: uint16(31967), + 23: uint16(31961), + 24: uint16(31965), + 25: uint16(32302), + 26: uint16(32318), + 27: uint16(32326), + 28: uint16(32311), + 29: uint16(32306), + 30: uint16(32323), + 31: uint16(32299), + 32: uint16(32317), + 33: uint16(32305), + 34: uint16(32325), + 35: uint16(32321), + 36: uint16(32308), + 37: uint16(32313), + 38: uint16(32328), + 39: uint16(32309), + 40: uint16(32319), + 41: uint16(32303), + 42: uint16(32580), + 43: uint16(32755), + 44: uint16(32764), + 45: uint16(32881), + 46: uint16(32882), + 47: uint16(32880), + 48: uint16(32879), + 49: uint16(32883), + 50: uint16(33222), + 51: uint16(33219), + 52: uint16(33210), + 53: uint16(33218), + 54: uint16(33216), + 55: uint16(33215), + 56: uint16(33213), + 57: uint16(33225), + 58: uint16(33214), + 59: uint16(33256), + 60: uint16(33289), + 61: uint16(33393), + 62: uint16(34218), + 63: uint16(34180), + 64: uint16(34174), + 65: uint16(34204), + 66: uint16(34193), + 67: uint16(34196), + 68: uint16(34223), + 69: uint16(34203), + 70: uint16(34183), + 71: uint16(34216), + 72: uint16(34186), + 73: uint16(34407), + 74: uint16(34752), + 75: uint16(34769), + 76: uint16(34739), + 77: uint16(34770), + 78: uint16(34758), + 79: uint16(34731), + 80: uint16(34747), + 81: uint16(34746), + 82: uint16(34760), + 83: uint16(34763), + 84: uint16(35131), + 85: uint16(35126), + 86: uint16(35140), + 87: uint16(35128), + 88: uint16(35133), + 89: uint16(35244), + 90: uint16(35598), + 91: uint16(35607), + 92: uint16(35609), + 93: uint16(35611), + 94: uint16(35594), + 95: uint16(35616), + 96: uint16(35613), + 97: uint16(35588), + 98: uint16(35600), + 99: uint16(35905), + 100: uint16(35903), + 101: uint16(35955), + 102: uint16(36090), + 103: uint16(36093), + 104: uint16(36092), + 105: uint16(36088), + 106: uint16(36091), + 107: uint16(36264), + 108: uint16(36425), + 109: uint16(36427), + 110: uint16(36424), + 111: uint16(36426), + 112: uint16(36676), + 113: uint16(36670), + 114: uint16(36674), + 115: uint16(36677), + 116: uint16(36671), + 117: uint16(36991), + 118: uint16(36989), + 119: uint16(36996), + 120: uint16(36993), + 121: uint16(36994), + 122: uint16(36992), + 123: uint16(37177), + 124: uint16(37283), + 125: uint16(37278), + 126: uint16(37276), + 127: uint16(37709), + 128: uint16(37762), + 129: uint16(37672), + 130: uint16(37749), + 131: uint16(37706), + 132: uint16(37733), + 133: uint16(37707), + 134: uint16(37656), + 135: uint16(37758), + 136: uint16(37740), + 137: uint16(37723), + 138: uint16(37744), + 139: uint16(37722), + 140: uint16(37716), + 141: uint16(38346), + 142: uint16(38347), + 143: uint16(38348), + 144: uint16(38344), + 145: uint16(38342), + 146: uint16(38577), + 147: uint16(38584), + 148: uint16(38614), + 149: uint16(38684), + 150: uint16(38686), + 151: uint16(38816), + 152: uint16(38867), + 153: uint16(38982), + 154: uint16(39094), + 155: uint16(39221), + 156: uint16(39425), + }, + 33: { + 0: uint16(39423), + 1: uint16(39854), + 2: uint16(39851), + 3: uint16(39850), + 4: uint16(39853), + 5: uint16(40251), + 6: uint16(40255), + 7: uint16(40587), + 8: uint16(40655), + 9: uint16(40670), + 10: uint16(40668), + 11: uint16(40669), + 12: uint16(40667), + 13: uint16(40766), + 14: uint16(40779), + 15: uint16(21474), + 16: uint16(22165), + 17: uint16(22190), + 18: uint16(22745), + 19: uint16(22744), + 20: uint16(23352), + 21: uint16(24413), + 22: uint16(25059), + 23: uint16(25139), + 24: uint16(25844), + 25: uint16(25842), + 26: uint16(25854), + 27: uint16(25862), + 28: uint16(25850), + 29: uint16(25851), + 30: uint16(25847), + 31: uint16(26039), + 32: uint16(26332), + 33: uint16(26406), + 34: uint16(27315), + 35: uint16(27308), + 36: uint16(27331), + 37: uint16(27323), + 38: uint16(27320), + 39: uint16(27330), + 40: uint16(27310), + 41: uint16(27311), + 42: uint16(27487), + 43: uint16(27512), + 44: uint16(27567), + 45: uint16(28681), + 46: uint16(28683), + 47: uint16(28670), + 48: uint16(28678), + 49: uint16(28666), + 50: uint16(28689), + 51: uint16(28687), + 52: uint16(29179), + 53: uint16(29180), + 54: uint16(29182), + 55: uint16(29176), + 56: uint16(29559), + 57: uint16(29557), + 58: uint16(29863), + 59: uint16(29887), + 60: uint16(29973), + 61: uint16(30294), + 62: uint16(30296), + 63: uint16(30290), + 64: uint16(30653), + 65: uint16(30655), + 66: uint16(30651), + 67: uint16(30652), + 68: uint16(30990), + 69: uint16(31150), + 70: uint16(31329), + 71: uint16(31330), + 72: uint16(31328), + 73: uint16(31428), + 74: uint16(31429), + 75: uint16(31787), + 76: uint16(31783), + 77: uint16(31786), + 78: uint16(31774), + 79: uint16(31779), + 80: uint16(31777), + 81: uint16(31975), + 82: uint16(32340), + 83: uint16(32341), + 84: uint16(32350), + 85: uint16(32346), + 86: uint16(32353), + 87: uint16(32338), + 88: uint16(32345), + 89: uint16(32584), + 90: uint16(32761), + 91: uint16(32763), + 92: uint16(32887), + 93: uint16(32886), + 94: uint16(33229), + 95: uint16(33231), + 96: uint16(33290), + 97: uint16(34255), + 98: uint16(34217), + 99: uint16(34253), + 100: uint16(34256), + 101: uint16(34249), + 102: uint16(34224), + 103: uint16(34234), + 104: uint16(34233), + 105: uint16(34214), + 106: uint16(34799), + 107: uint16(34796), + 108: uint16(34802), + 109: uint16(34784), + 110: uint16(35206), + 111: uint16(35250), + 112: uint16(35316), + 113: uint16(35624), + 114: uint16(35641), + 115: uint16(35628), + 116: uint16(35627), + 117: uint16(35920), + 118: uint16(36101), + 119: uint16(36441), + 120: uint16(36451), + 121: uint16(36454), + 122: uint16(36452), + 123: uint16(36447), + 124: uint16(36437), + 125: uint16(36544), + 126: uint16(36681), + 127: uint16(36685), + 128: uint16(36999), + 129: uint16(36995), + 130: uint16(37000), + 131: uint16(37291), + 132: uint16(37292), + 133: uint16(37328), + 134: uint16(37780), + 135: uint16(37770), + 136: uint16(37782), + 137: uint16(37794), + 138: uint16(37811), + 139: uint16(37806), + 140: uint16(37804), + 141: uint16(37808), + 142: uint16(37784), + 143: uint16(37786), + 144: uint16(37783), + 145: uint16(38356), + 146: uint16(38358), + 147: uint16(38352), + 148: uint16(38357), + 149: uint16(38626), + 150: uint16(38620), + 151: uint16(38617), + 152: uint16(38619), + 153: uint16(38622), + 154: uint16(38692), + 155: uint16(38819), + 156: uint16(38822), + }, + 34: { + 0: uint16(38829), + 1: uint16(38905), + 2: uint16(38989), + 3: uint16(38991), + 4: uint16(38988), + 5: uint16(38990), + 6: uint16(38995), + 7: uint16(39098), + 8: uint16(39230), + 9: uint16(39231), + 10: uint16(39229), + 11: uint16(39214), + 12: uint16(39333), + 13: uint16(39438), + 14: uint16(39617), + 15: uint16(39683), + 16: uint16(39686), + 17: uint16(39759), + 18: uint16(39758), + 19: uint16(39757), + 20: uint16(39882), + 21: uint16(39881), + 22: uint16(39933), + 23: uint16(39880), + 24: uint16(39872), + 25: uint16(40273), + 26: uint16(40285), + 27: uint16(40288), + 28: uint16(40672), + 29: uint16(40725), + 30: uint16(40748), + 31: uint16(20787), + 32: uint16(22181), + 33: uint16(22750), + 34: uint16(22751), + 35: uint16(22754), + 36: uint16(23541), + 37: uint16(40848), + 38: uint16(24300), + 39: uint16(25074), + 40: uint16(25079), + 41: uint16(25078), + 42: uint16(25077), + 43: uint16(25856), + 44: uint16(25871), + 45: uint16(26336), + 46: uint16(26333), + 47: uint16(27365), + 48: uint16(27357), + 49: uint16(27354), + 50: uint16(27347), + 51: uint16(28699), + 52: uint16(28703), + 53: uint16(28712), + 54: uint16(28698), + 55: uint16(28701), + 56: uint16(28693), + 57: uint16(28696), + 58: uint16(29190), + 59: uint16(29197), + 60: uint16(29272), + 61: uint16(29346), + 62: uint16(29560), + 63: uint16(29562), + 64: uint16(29885), + 65: uint16(29898), + 66: uint16(29923), + 67: uint16(30087), + 68: uint16(30086), + 69: uint16(30303), + 70: uint16(30305), + 71: uint16(30663), + 72: uint16(31001), + 73: uint16(31153), + 74: uint16(31339), + 75: uint16(31337), + 76: uint16(31806), + 77: uint16(31807), + 78: uint16(31800), + 79: uint16(31805), + 80: uint16(31799), + 81: uint16(31808), + 82: uint16(32363), + 83: uint16(32365), + 84: uint16(32377), + 85: uint16(32361), + 86: uint16(32362), + 87: uint16(32645), + 88: uint16(32371), + 89: uint16(32694), + 90: uint16(32697), + 91: uint16(32696), + 92: uint16(33240), + 93: uint16(34281), + 94: uint16(34269), + 95: uint16(34282), + 96: uint16(34261), + 97: uint16(34276), + 98: uint16(34277), + 99: uint16(34295), + 100: uint16(34811), + 101: uint16(34821), + 102: uint16(34829), + 103: uint16(34809), + 104: uint16(34814), + 105: uint16(35168), + 106: uint16(35167), + 107: uint16(35158), + 108: uint16(35166), + 109: uint16(35649), + 110: uint16(35676), + 111: uint16(35672), + 112: uint16(35657), + 113: uint16(35674), + 114: uint16(35662), + 115: uint16(35663), + 116: uint16(35654), + 117: uint16(35673), + 118: uint16(36104), + 119: uint16(36106), + 120: uint16(36476), + 121: uint16(36466), + 122: uint16(36487), + 123: uint16(36470), + 124: uint16(36460), + 125: uint16(36474), + 126: uint16(36468), + 127: uint16(36692), + 128: uint16(36686), + 129: uint16(36781), + 130: uint16(37002), + 131: uint16(37003), + 132: uint16(37297), + 133: uint16(37294), + 134: uint16(37857), + 135: uint16(37841), + 136: uint16(37855), + 137: uint16(37827), + 138: uint16(37832), + 139: uint16(37852), + 140: uint16(37853), + 141: uint16(37846), + 142: uint16(37858), + 143: uint16(37837), + 144: uint16(37848), + 145: uint16(37860), + 146: uint16(37847), + 147: uint16(37864), + 148: uint16(38364), + 149: uint16(38580), + 150: uint16(38627), + 151: uint16(38698), + 152: uint16(38695), + 153: uint16(38753), + 154: uint16(38876), + 155: uint16(38907), + 156: uint16(39006), + }, + 35: { + 0: uint16(39000), + 1: uint16(39003), + 2: uint16(39100), + 3: uint16(39237), + 4: uint16(39241), + 5: uint16(39446), + 6: uint16(39449), + 7: uint16(39693), + 8: uint16(39912), + 9: uint16(39911), + 10: uint16(39894), + 11: uint16(39899), + 12: uint16(40329), + 13: uint16(40289), + 14: uint16(40306), + 15: uint16(40298), + 16: uint16(40300), + 17: uint16(40594), + 18: uint16(40599), + 19: uint16(40595), + 20: uint16(40628), + 21: uint16(21240), + 22: uint16(22184), + 23: uint16(22199), + 24: uint16(22198), + 25: uint16(22196), + 26: uint16(22204), + 27: uint16(22756), + 28: uint16(23360), + 29: uint16(23363), + 30: uint16(23421), + 31: uint16(23542), + 32: uint16(24009), + 33: uint16(25080), + 34: uint16(25082), + 35: uint16(25880), + 36: uint16(25876), + 37: uint16(25881), + 38: uint16(26342), + 39: uint16(26407), + 40: uint16(27372), + 41: uint16(28734), + 42: uint16(28720), + 43: uint16(28722), + 44: uint16(29200), + 45: uint16(29563), + 46: uint16(29903), + 47: uint16(30306), + 48: uint16(30309), + 49: uint16(31014), + 50: uint16(31018), + 51: uint16(31020), + 52: uint16(31019), + 53: uint16(31431), + 54: uint16(31478), + 55: uint16(31820), + 56: uint16(31811), + 57: uint16(31821), + 58: uint16(31983), + 59: uint16(31984), + 60: uint16(36782), + 61: uint16(32381), + 62: uint16(32380), + 63: uint16(32386), + 64: uint16(32588), + 65: uint16(32768), + 66: uint16(33242), + 67: uint16(33382), + 68: uint16(34299), + 69: uint16(34297), + 70: uint16(34321), + 71: uint16(34298), + 72: uint16(34310), + 73: uint16(34315), + 74: uint16(34311), + 75: uint16(34314), + 76: uint16(34836), + 77: uint16(34837), + 78: uint16(35172), + 79: uint16(35258), + 80: uint16(35320), + 81: uint16(35696), + 82: uint16(35692), + 83: uint16(35686), + 84: uint16(35695), + 85: uint16(35679), + 86: uint16(35691), + 87: uint16(36111), + 88: uint16(36109), + 89: uint16(36489), + 90: uint16(36481), + 91: uint16(36485), + 92: uint16(36482), + 93: uint16(37300), + 94: uint16(37323), + 95: uint16(37912), + 96: uint16(37891), + 97: uint16(37885), + 98: uint16(38369), + 99: uint16(38704), + 100: uint16(39108), + 101: uint16(39250), + 102: uint16(39249), + 103: uint16(39336), + 104: uint16(39467), + 105: uint16(39472), + 106: uint16(39479), + 107: uint16(39477), + 108: uint16(39955), + 109: uint16(39949), + 110: uint16(40569), + 111: uint16(40629), + 112: uint16(40680), + 113: uint16(40751), + 114: uint16(40799), + 115: uint16(40803), + 116: uint16(40801), + 117: uint16(20791), + 118: uint16(20792), + 119: uint16(22209), + 120: uint16(22208), + 121: uint16(22210), + 122: uint16(22804), + 123: uint16(23660), + 124: uint16(24013), + 125: uint16(25084), + 126: uint16(25086), + 127: uint16(25885), + 128: uint16(25884), + 129: uint16(26005), + 130: uint16(26345), + 131: uint16(27387), + 132: uint16(27396), + 133: uint16(27386), + 134: uint16(27570), + 135: uint16(28748), + 136: uint16(29211), + 137: uint16(29351), + 138: uint16(29910), + 139: uint16(29908), + 140: uint16(30313), + 141: uint16(30675), + 142: uint16(31824), + 143: uint16(32399), + 144: uint16(32396), + 145: uint16(32700), + 146: uint16(34327), + 147: uint16(34349), + 148: uint16(34330), + 149: uint16(34851), + 150: uint16(34850), + 151: uint16(34849), + 152: uint16(34847), + 153: uint16(35178), + 154: uint16(35180), + 155: uint16(35261), + 156: uint16(35700), + }, + 36: { + 0: uint16(35703), + 1: uint16(35709), + 2: uint16(36115), + 3: uint16(36490), + 4: uint16(36493), + 5: uint16(36491), + 6: uint16(36703), + 7: uint16(36783), + 8: uint16(37306), + 9: uint16(37934), + 10: uint16(37939), + 11: uint16(37941), + 12: uint16(37946), + 13: uint16(37944), + 14: uint16(37938), + 15: uint16(37931), + 16: uint16(38370), + 17: uint16(38712), + 18: uint16(38713), + 19: uint16(38706), + 20: uint16(38911), + 21: uint16(39015), + 22: uint16(39013), + 23: uint16(39255), + 24: uint16(39493), + 25: uint16(39491), + 26: uint16(39488), + 27: uint16(39486), + 28: uint16(39631), + 29: uint16(39764), + 30: uint16(39761), + 31: uint16(39981), + 32: uint16(39973), + 33: uint16(40367), + 34: uint16(40372), + 35: uint16(40386), + 36: uint16(40376), + 37: uint16(40605), + 38: uint16(40687), + 39: uint16(40729), + 40: uint16(40796), + 41: uint16(40806), + 42: uint16(40807), + 43: uint16(20796), + 44: uint16(20795), + 45: uint16(22216), + 46: uint16(22218), + 47: uint16(22217), + 48: uint16(23423), + 49: uint16(24020), + 50: uint16(24018), + 51: uint16(24398), + 52: uint16(25087), + 53: uint16(25892), + 54: uint16(27402), + 55: uint16(27489), + 56: uint16(28753), + 57: uint16(28760), + 58: uint16(29568), + 59: uint16(29924), + 60: uint16(30090), + 61: uint16(30318), + 62: uint16(30316), + 63: uint16(31155), + 64: uint16(31840), + 65: uint16(31839), + 66: uint16(32894), + 67: uint16(32893), + 68: uint16(33247), + 69: uint16(35186), + 70: uint16(35183), + 71: uint16(35324), + 72: uint16(35712), + 73: uint16(36118), + 74: uint16(36119), + 75: uint16(36497), + 76: uint16(36499), + 77: uint16(36705), + 78: uint16(37192), + 79: uint16(37956), + 80: uint16(37969), + 81: uint16(37970), + 82: uint16(38717), + 83: uint16(38718), + 84: uint16(38851), + 85: uint16(38849), + 86: uint16(39019), + 87: uint16(39253), + 88: uint16(39509), + 89: uint16(39501), + 90: uint16(39634), + 91: uint16(39706), + 92: uint16(40009), + 93: uint16(39985), + 94: uint16(39998), + 95: uint16(39995), + 96: uint16(40403), + 97: uint16(40407), + 98: uint16(40756), + 99: uint16(40812), + 100: uint16(40810), + 101: uint16(40852), + 102: uint16(22220), + 103: uint16(24022), + 104: uint16(25088), + 105: uint16(25891), + 106: uint16(25899), + 107: uint16(25898), + 108: uint16(26348), + 109: uint16(27408), + 110: uint16(29914), + 111: uint16(31434), + 112: uint16(31844), + 113: uint16(31843), + 114: uint16(31845), + 115: uint16(32403), + 116: uint16(32406), + 117: uint16(32404), + 118: uint16(33250), + 119: uint16(34360), + 120: uint16(34367), + 121: uint16(34865), + 122: uint16(35722), + 123: uint16(37008), + 124: uint16(37007), + 125: uint16(37987), + 126: uint16(37984), + 127: uint16(37988), + 128: uint16(38760), + 129: uint16(39023), + 130: uint16(39260), + 131: uint16(39514), + 132: uint16(39515), + 133: uint16(39511), + 134: uint16(39635), + 135: uint16(39636), + 136: uint16(39633), + 137: uint16(40020), + 138: uint16(40023), + 139: uint16(40022), + 140: uint16(40421), + 141: uint16(40607), + 142: uint16(40692), + 143: uint16(22225), + 144: uint16(22761), + 145: uint16(25900), + 146: uint16(28766), + 147: uint16(30321), + 148: uint16(30322), + 149: uint16(30679), + 150: uint16(32592), + 151: uint16(32648), + 152: uint16(34870), + 153: uint16(34873), + 154: uint16(34914), + 155: uint16(35731), + 156: uint16(35730), + }, + 37: { + 0: uint16(35734), + 1: uint16(33399), + 2: uint16(36123), + 3: uint16(37312), + 4: uint16(37994), + 5: uint16(38722), + 6: uint16(38728), + 7: uint16(38724), + 8: uint16(38854), + 9: uint16(39024), + 10: uint16(39519), + 11: uint16(39714), + 12: uint16(39768), + 13: uint16(40031), + 14: uint16(40441), + 15: uint16(40442), + 16: uint16(40572), + 17: uint16(40573), + 18: uint16(40711), + 19: uint16(40823), + 20: uint16(40818), + 21: uint16(24307), + 22: uint16(27414), + 23: uint16(28771), + 24: uint16(31852), + 25: uint16(31854), + 26: uint16(34875), + 27: uint16(35264), + 28: uint16(36513), + 29: uint16(37313), + 30: uint16(38002), + 31: uint16(38000), + 32: uint16(39025), + 33: uint16(39262), + 34: uint16(39638), + 35: uint16(39715), + 36: uint16(40652), + 37: uint16(28772), + 38: uint16(30682), + 39: uint16(35738), + 40: uint16(38007), + 41: uint16(38857), + 42: uint16(39522), + 43: uint16(39525), + 44: uint16(32412), + 45: uint16(35740), + 46: uint16(36522), + 47: uint16(37317), + 48: uint16(38013), + 49: uint16(38014), + 50: uint16(38012), + 51: uint16(40055), + 52: uint16(40056), + 53: uint16(40695), + 54: uint16(35924), + 55: uint16(38015), + 56: uint16(40474), + 57: uint16(29224), + 58: uint16(39530), + 59: uint16(39729), + 60: uint16(40475), + 61: uint16(40478), + 62: uint16(31858), + 63: uint16(9312), + 64: uint16(9313), + 65: uint16(9314), + 66: uint16(9315), + 67: uint16(9316), + 68: uint16(9317), + 69: uint16(9318), + 70: uint16(9319), + 71: uint16(9320), + 72: uint16(9321), + 73: uint16(9332), + 74: uint16(9333), + 75: uint16(9334), + 76: uint16(9335), + 77: uint16(9336), + 78: uint16(9337), + 79: uint16(9338), + 80: uint16(9339), + 81: uint16(9340), + 82: uint16(9341), + 83: uint16(8560), + 84: uint16(8561), + 85: uint16(8562), + 86: uint16(8563), + 87: uint16(8564), + 88: uint16(8565), + 89: uint16(8566), + 90: uint16(8567), + 91: uint16(8568), + 92: uint16(8569), + 93: uint16(20022), + 94: uint16(20031), + 95: uint16(20101), + 96: uint16(20128), + 97: uint16(20866), + 98: uint16(20886), + 99: uint16(20907), + 100: uint16(21241), + 101: uint16(21304), + 102: uint16(21353), + 103: uint16(21430), + 104: uint16(22794), + 105: uint16(23424), + 106: uint16(24027), + 107: uint16(24186), + 108: uint16(24191), + 109: uint16(24308), + 110: uint16(24400), + 111: uint16(24417), + 112: uint16(25908), + 113: uint16(26080), + 114: uint16(30098), + 115: uint16(30326), + 116: uint16(36789), + 117: uint16(38582), + 118: uint16(168), + 119: uint16(710), + 120: uint16(12541), + 121: uint16(12542), + 122: uint16(12445), + 123: uint16(12446), + 126: uint16(12293), + 127: uint16(12294), + 128: uint16(12295), + 129: uint16(12540), + 130: uint16(65339), + 131: uint16(65341), + 132: uint16(10045), + 133: uint16(12353), + 134: uint16(12354), + 135: uint16(12355), + 136: uint16(12356), + 137: uint16(12357), + 138: uint16(12358), + 139: uint16(12359), + 140: uint16(12360), + 141: uint16(12361), + 142: uint16(12362), + 143: uint16(12363), + 144: uint16(12364), + 145: uint16(12365), + 146: uint16(12366), + 147: uint16(12367), + 148: uint16(12368), + 149: uint16(12369), + 150: uint16(12370), + 151: uint16(12371), + 152: uint16(12372), + 153: uint16(12373), + 154: uint16(12374), + 155: uint16(12375), + 156: uint16(12376), + }, + 38: { + 0: uint16(12377), + 1: uint16(12378), + 2: uint16(12379), + 3: uint16(12380), + 4: uint16(12381), + 5: uint16(12382), + 6: uint16(12383), + 7: uint16(12384), + 8: uint16(12385), + 9: uint16(12386), + 10: uint16(12387), + 11: uint16(12388), + 12: uint16(12389), + 13: uint16(12390), + 14: uint16(12391), + 15: uint16(12392), + 16: uint16(12393), + 17: uint16(12394), + 18: uint16(12395), + 19: uint16(12396), + 20: uint16(12397), + 21: uint16(12398), + 22: uint16(12399), + 23: uint16(12400), + 24: uint16(12401), + 25: uint16(12402), + 26: uint16(12403), + 27: uint16(12404), + 28: uint16(12405), + 29: uint16(12406), + 30: uint16(12407), + 31: uint16(12408), + 32: uint16(12409), + 33: uint16(12410), + 34: uint16(12411), + 35: uint16(12412), + 36: uint16(12413), + 37: uint16(12414), + 38: uint16(12415), + 39: uint16(12416), + 40: uint16(12417), + 41: uint16(12418), + 42: uint16(12419), + 43: uint16(12420), + 44: uint16(12421), + 45: uint16(12422), + 46: uint16(12423), + 47: uint16(12424), + 48: uint16(12425), + 49: uint16(12426), + 50: uint16(12427), + 51: uint16(12428), + 52: uint16(12429), + 53: uint16(12430), + 54: uint16(12431), + 55: uint16(12432), + 56: uint16(12433), + 57: uint16(12434), + 58: uint16(12435), + 59: uint16(12449), + 60: uint16(12450), + 61: uint16(12451), + 62: uint16(12452), + 63: uint16(12453), + 64: uint16(12454), + 65: uint16(12455), + 66: uint16(12456), + 67: uint16(12457), + 68: uint16(12458), + 69: uint16(12459), + 70: uint16(12460), + 71: uint16(12461), + 72: uint16(12462), + 73: uint16(12463), + 74: uint16(12464), + 75: uint16(12465), + 76: uint16(12466), + 77: uint16(12467), + 78: uint16(12468), + 79: uint16(12469), + 80: uint16(12470), + 81: uint16(12471), + 82: uint16(12472), + 83: uint16(12473), + 84: uint16(12474), + 85: uint16(12475), + 86: uint16(12476), + 87: uint16(12477), + 88: uint16(12478), + 89: uint16(12479), + 90: uint16(12480), + 91: uint16(12481), + 92: uint16(12482), + 93: uint16(12483), + 94: uint16(12484), + 95: uint16(12485), + 96: uint16(12486), + 97: uint16(12487), + 98: uint16(12488), + 99: uint16(12489), + 100: uint16(12490), + 101: uint16(12491), + 102: uint16(12492), + 103: uint16(12493), + 104: uint16(12494), + 105: uint16(12495), + 106: uint16(12496), + 107: uint16(12497), + 108: uint16(12498), + 109: uint16(12499), + 110: uint16(12500), + 111: uint16(12501), + 112: uint16(12502), + 113: uint16(12503), + 114: uint16(12504), + 115: uint16(12505), + 116: uint16(12506), + 117: uint16(12507), + 118: uint16(12508), + 119: uint16(12509), + 120: uint16(12510), + 121: uint16(12511), + 122: uint16(12512), + 123: uint16(12513), + 124: uint16(12514), + 125: uint16(12515), + 126: uint16(12516), + 127: uint16(12517), + 128: uint16(12518), + 129: uint16(12519), + 130: uint16(12520), + 131: uint16(12521), + 132: uint16(12522), + 133: uint16(12523), + 134: uint16(12524), + 135: uint16(12525), + 136: uint16(12526), + 137: uint16(12527), + 138: uint16(12528), + 139: uint16(12529), + 140: uint16(12530), + 141: uint16(12531), + 142: uint16(12532), + 143: uint16(12533), + 144: uint16(12534), + 145: uint16(1040), + 146: uint16(1041), + 147: uint16(1042), + 148: uint16(1043), + 149: uint16(1044), + 150: uint16(1045), + 151: uint16(1025), + 152: uint16(1046), + 153: uint16(1047), + 154: uint16(1048), + 155: uint16(1049), + 156: uint16(1050), + }, + 39: { + 0: uint16(1051), + 1: uint16(1052), + 2: uint16(1053), + 3: uint16(1054), + 4: uint16(1055), + 5: uint16(1056), + 6: uint16(1057), + 7: uint16(1058), + 8: uint16(1059), + 9: uint16(1060), + 10: uint16(1061), + 11: uint16(1062), + 12: uint16(1063), + 13: uint16(1064), + 14: uint16(1065), + 15: uint16(1066), + 16: uint16(1067), + 17: uint16(1068), + 18: uint16(1069), + 19: uint16(1070), + 20: uint16(1071), + 21: uint16(1072), + 22: uint16(1073), + 23: uint16(1074), + 24: uint16(1075), + 25: uint16(1076), + 26: uint16(1077), + 27: uint16(1105), + 28: uint16(1078), + 29: uint16(1079), + 30: uint16(1080), + 31: uint16(1081), + 32: uint16(1082), + 33: uint16(1083), + 34: uint16(1084), + 35: uint16(1085), + 36: uint16(1086), + 37: uint16(1087), + 38: uint16(1088), + 39: uint16(1089), + 40: uint16(1090), + 41: uint16(1091), + 42: uint16(1092), + 43: uint16(1093), + 44: uint16(1094), + 45: uint16(1095), + 46: uint16(1096), + 47: uint16(1097), + 48: uint16(1098), + 49: uint16(1099), + 50: uint16(1100), + 51: uint16(1101), + 52: uint16(1102), + 53: uint16(1103), + 54: uint16(8679), + 55: uint16(8632), + 56: uint16(8633), + 57: uint16(12751), + 58: uint16(204), + 59: uint16(20058), + 60: uint16(138), + 61: uint16(20994), + 62: uint16(17553), + 63: uint16(40880), + 64: uint16(20872), + 65: uint16(40881), + 66: uint16(30215), + 107: uint16(65506), + 108: uint16(65508), + 109: uint16(65287), + 110: uint16(65282), + 111: uint16(12849), + 112: uint16(8470), + 113: uint16(8481), + 114: uint16(12443), + 115: uint16(12444), + 116: uint16(11904), + 117: uint16(11908), + 118: uint16(11910), + 119: uint16(11911), + 120: uint16(11912), + 121: uint16(11914), + 122: uint16(11916), + 123: uint16(11917), + 124: uint16(11925), + 125: uint16(11932), + 126: uint16(11933), + 127: uint16(11941), + 128: uint16(11943), + 129: uint16(11946), + 130: uint16(11948), + 131: uint16(11950), + 132: uint16(11958), + 133: uint16(11964), + 134: uint16(11966), + 135: uint16(11974), + 136: uint16(11978), + 137: uint16(11980), + 138: uint16(11981), + 139: uint16(11983), + 140: uint16(11990), + 141: uint16(11991), + 142: uint16(11998), + 143: uint16(12003), + 147: uint16(643), + 148: uint16(592), + 149: uint16(603), + 150: uint16(596), + 151: uint16(629), + 152: uint16(339), + 153: uint16(248), + 154: uint16(331), + 155: uint16(650), + 156: uint16(618), + }, + 40: { + 0: uint16(20034), + 1: uint16(20060), + 2: uint16(20981), + 3: uint16(21274), + 4: uint16(21378), + 5: uint16(19975), + 6: uint16(19980), + 7: uint16(20039), + 8: uint16(20109), + 9: uint16(22231), + 10: uint16(64012), + 11: uint16(23662), + 12: uint16(24435), + 13: uint16(19983), + 14: uint16(20871), + 15: uint16(19982), + 16: uint16(20014), + 17: uint16(20115), + 18: uint16(20162), + 19: uint16(20169), + 20: uint16(20168), + 21: uint16(20888), + 22: uint16(21244), + 23: uint16(21356), + 24: uint16(21433), + 25: uint16(22304), + 26: uint16(22787), + 27: uint16(22828), + 28: uint16(23568), + 29: uint16(24063), + 30: uint16(26081), + 31: uint16(27571), + 32: uint16(27596), + 33: uint16(27668), + 34: uint16(29247), + 35: uint16(20017), + 36: uint16(20028), + 37: uint16(20200), + 38: uint16(20188), + 39: uint16(20201), + 40: uint16(20193), + 41: uint16(20189), + 42: uint16(20186), + 43: uint16(21004), + 44: uint16(21276), + 45: uint16(21324), + 46: uint16(22306), + 47: uint16(22307), + 48: uint16(22807), + 49: uint16(22831), + 50: uint16(23425), + 51: uint16(23428), + 52: uint16(23570), + 53: uint16(23611), + 54: uint16(23668), + 55: uint16(23667), + 56: uint16(24068), + 57: uint16(24192), + 58: uint16(24194), + 59: uint16(24521), + 60: uint16(25097), + 61: uint16(25168), + 62: uint16(27669), + 63: uint16(27702), + 64: uint16(27715), + 65: uint16(27711), + 66: uint16(27707), + 67: uint16(29358), + 68: uint16(29360), + 69: uint16(29578), + 70: uint16(31160), + 71: uint16(32906), + 72: uint16(38430), + 73: uint16(20238), + 74: uint16(20248), + 75: uint16(20268), + 76: uint16(20213), + 77: uint16(20244), + 78: uint16(20209), + 79: uint16(20224), + 80: uint16(20215), + 81: uint16(20232), + 82: uint16(20253), + 83: uint16(20226), + 84: uint16(20229), + 85: uint16(20258), + 86: uint16(20243), + 87: uint16(20228), + 88: uint16(20212), + 89: uint16(20242), + 90: uint16(20913), + 91: uint16(21011), + 92: uint16(21001), + 93: uint16(21008), + 94: uint16(21158), + 95: uint16(21282), + 96: uint16(21279), + 97: uint16(21325), + 98: uint16(21386), + 99: uint16(21511), + 100: uint16(22241), + 101: uint16(22239), + 102: uint16(22318), + 103: uint16(22314), + 104: uint16(22324), + 105: uint16(22844), + 106: uint16(22912), + 107: uint16(22908), + 108: uint16(22917), + 109: uint16(22907), + 110: uint16(22910), + 111: uint16(22903), + 112: uint16(22911), + 113: uint16(23382), + 114: uint16(23573), + 115: uint16(23589), + 116: uint16(23676), + 117: uint16(23674), + 118: uint16(23675), + 119: uint16(23678), + 120: uint16(24031), + 121: uint16(24181), + 122: uint16(24196), + 123: uint16(24322), + 124: uint16(24346), + 125: uint16(24436), + 126: uint16(24533), + 127: uint16(24532), + 128: uint16(24527), + 129: uint16(25180), + 130: uint16(25182), + 131: uint16(25188), + 132: uint16(25185), + 133: uint16(25190), + 134: uint16(25186), + 135: uint16(25177), + 136: uint16(25184), + 137: uint16(25178), + 138: uint16(25189), + 139: uint16(26095), + 140: uint16(26094), + 141: uint16(26430), + 142: uint16(26425), + 143: uint16(26424), + 144: uint16(26427), + 145: uint16(26426), + 146: uint16(26431), + 147: uint16(26428), + 148: uint16(26419), + 149: uint16(27672), + 150: uint16(27718), + 151: uint16(27730), + 152: uint16(27740), + 153: uint16(27727), + 154: uint16(27722), + 155: uint16(27732), + 156: uint16(27723), + }, + 41: { + 0: uint16(27724), + 1: uint16(28785), + 2: uint16(29278), + 3: uint16(29364), + 4: uint16(29365), + 5: uint16(29582), + 6: uint16(29994), + 7: uint16(30335), + 8: uint16(31349), + 9: uint16(32593), + 10: uint16(33400), + 11: uint16(33404), + 12: uint16(33408), + 13: uint16(33405), + 14: uint16(33407), + 15: uint16(34381), + 16: uint16(35198), + 17: uint16(37017), + 18: uint16(37015), + 19: uint16(37016), + 20: uint16(37019), + 21: uint16(37012), + 22: uint16(38434), + 23: uint16(38436), + 24: uint16(38432), + 25: uint16(38435), + 26: uint16(20310), + 27: uint16(20283), + 28: uint16(20322), + 29: uint16(20297), + 30: uint16(20307), + 31: uint16(20324), + 32: uint16(20286), + 33: uint16(20327), + 34: uint16(20306), + 35: uint16(20319), + 36: uint16(20289), + 37: uint16(20312), + 38: uint16(20269), + 39: uint16(20275), + 40: uint16(20287), + 41: uint16(20321), + 42: uint16(20879), + 43: uint16(20921), + 44: uint16(21020), + 45: uint16(21022), + 46: uint16(21025), + 47: uint16(21165), + 48: uint16(21166), + 49: uint16(21257), + 50: uint16(21347), + 51: uint16(21362), + 52: uint16(21390), + 53: uint16(21391), + 54: uint16(21552), + 55: uint16(21559), + 56: uint16(21546), + 57: uint16(21588), + 58: uint16(21573), + 59: uint16(21529), + 60: uint16(21532), + 61: uint16(21541), + 62: uint16(21528), + 63: uint16(21565), + 64: uint16(21583), + 65: uint16(21569), + 66: uint16(21544), + 67: uint16(21540), + 68: uint16(21575), + 69: uint16(22254), + 70: uint16(22247), + 71: uint16(22245), + 72: uint16(22337), + 73: uint16(22341), + 74: uint16(22348), + 75: uint16(22345), + 76: uint16(22347), + 77: uint16(22354), + 78: uint16(22790), + 79: uint16(22848), + 80: uint16(22950), + 81: uint16(22936), + 82: uint16(22944), + 83: uint16(22935), + 84: uint16(22926), + 85: uint16(22946), + 86: uint16(22928), + 87: uint16(22927), + 88: uint16(22951), + 89: uint16(22945), + 90: uint16(23438), + 91: uint16(23442), + 92: uint16(23592), + 93: uint16(23594), + 94: uint16(23693), + 95: uint16(23695), + 96: uint16(23688), + 97: uint16(23691), + 98: uint16(23689), + 99: uint16(23698), + 100: uint16(23690), + 101: uint16(23686), + 102: uint16(23699), + 103: uint16(23701), + 104: uint16(24032), + 105: uint16(24074), + 106: uint16(24078), + 107: uint16(24203), + 108: uint16(24201), + 109: uint16(24204), + 110: uint16(24200), + 111: uint16(24205), + 112: uint16(24325), + 113: uint16(24349), + 114: uint16(24440), + 115: uint16(24438), + 116: uint16(24530), + 117: uint16(24529), + 118: uint16(24528), + 119: uint16(24557), + 120: uint16(24552), + 121: uint16(24558), + 122: uint16(24563), + 123: uint16(24545), + 124: uint16(24548), + 125: uint16(24547), + 126: uint16(24570), + 127: uint16(24559), + 128: uint16(24567), + 129: uint16(24571), + 130: uint16(24576), + 131: uint16(24564), + 132: uint16(25146), + 133: uint16(25219), + 134: uint16(25228), + 135: uint16(25230), + 136: uint16(25231), + 137: uint16(25236), + 138: uint16(25223), + 139: uint16(25201), + 140: uint16(25211), + 141: uint16(25210), + 142: uint16(25200), + 143: uint16(25217), + 144: uint16(25224), + 145: uint16(25207), + 146: uint16(25213), + 147: uint16(25202), + 148: uint16(25204), + 149: uint16(25911), + 150: uint16(26096), + 151: uint16(26100), + 152: uint16(26099), + 153: uint16(26098), + 154: uint16(26101), + 155: uint16(26437), + 156: uint16(26439), + }, + 42: { + 0: uint16(26457), + 1: uint16(26453), + 2: uint16(26444), + 3: uint16(26440), + 4: uint16(26461), + 5: uint16(26445), + 6: uint16(26458), + 7: uint16(26443), + 8: uint16(27600), + 9: uint16(27673), + 10: uint16(27674), + 11: uint16(27768), + 12: uint16(27751), + 13: uint16(27755), + 14: uint16(27780), + 15: uint16(27787), + 16: uint16(27791), + 17: uint16(27761), + 18: uint16(27759), + 19: uint16(27753), + 20: uint16(27802), + 21: uint16(27757), + 22: uint16(27783), + 23: uint16(27797), + 24: uint16(27804), + 25: uint16(27750), + 26: uint16(27763), + 27: uint16(27749), + 28: uint16(27771), + 29: uint16(27790), + 30: uint16(28788), + 31: uint16(28794), + 32: uint16(29283), + 33: uint16(29375), + 34: uint16(29373), + 35: uint16(29379), + 36: uint16(29382), + 37: uint16(29377), + 38: uint16(29370), + 39: uint16(29381), + 40: uint16(29589), + 41: uint16(29591), + 42: uint16(29587), + 43: uint16(29588), + 44: uint16(29586), + 45: uint16(30010), + 46: uint16(30009), + 47: uint16(30100), + 48: uint16(30101), + 49: uint16(30337), + 50: uint16(31037), + 51: uint16(32820), + 52: uint16(32917), + 53: uint16(32921), + 54: uint16(32912), + 55: uint16(32914), + 56: uint16(32924), + 57: uint16(33424), + 58: uint16(33423), + 59: uint16(33413), + 60: uint16(33422), + 61: uint16(33425), + 62: uint16(33427), + 63: uint16(33418), + 64: uint16(33411), + 65: uint16(33412), + 66: uint16(35960), + 67: uint16(36809), + 68: uint16(36799), + 69: uint16(37023), + 70: uint16(37025), + 71: uint16(37029), + 72: uint16(37022), + 73: uint16(37031), + 74: uint16(37024), + 75: uint16(38448), + 76: uint16(38440), + 77: uint16(38447), + 78: uint16(38445), + 79: uint16(20019), + 80: uint16(20376), + 81: uint16(20348), + 82: uint16(20357), + 83: uint16(20349), + 84: uint16(20352), + 85: uint16(20359), + 86: uint16(20342), + 87: uint16(20340), + 88: uint16(20361), + 89: uint16(20356), + 90: uint16(20343), + 91: uint16(20300), + 92: uint16(20375), + 93: uint16(20330), + 94: uint16(20378), + 95: uint16(20345), + 96: uint16(20353), + 97: uint16(20344), + 98: uint16(20368), + 99: uint16(20380), + 100: uint16(20372), + 101: uint16(20382), + 102: uint16(20370), + 103: uint16(20354), + 104: uint16(20373), + 105: uint16(20331), + 106: uint16(20334), + 107: uint16(20894), + 108: uint16(20924), + 109: uint16(20926), + 110: uint16(21045), + 111: uint16(21042), + 112: uint16(21043), + 113: uint16(21062), + 114: uint16(21041), + 115: uint16(21180), + 116: uint16(21258), + 117: uint16(21259), + 118: uint16(21308), + 119: uint16(21394), + 120: uint16(21396), + 121: uint16(21639), + 122: uint16(21631), + 123: uint16(21633), + 124: uint16(21649), + 125: uint16(21634), + 126: uint16(21640), + 127: uint16(21611), + 128: uint16(21626), + 129: uint16(21630), + 130: uint16(21605), + 131: uint16(21612), + 132: uint16(21620), + 133: uint16(21606), + 134: uint16(21645), + 135: uint16(21615), + 136: uint16(21601), + 137: uint16(21600), + 138: uint16(21656), + 139: uint16(21603), + 140: uint16(21607), + 141: uint16(21604), + 142: uint16(22263), + 143: uint16(22265), + 144: uint16(22383), + 145: uint16(22386), + 146: uint16(22381), + 147: uint16(22379), + 148: uint16(22385), + 149: uint16(22384), + 150: uint16(22390), + 151: uint16(22400), + 152: uint16(22389), + 153: uint16(22395), + 154: uint16(22387), + 155: uint16(22388), + 156: uint16(22370), + }, + 43: { + 0: uint16(22376), + 1: uint16(22397), + 2: uint16(22796), + 3: uint16(22853), + 4: uint16(22965), + 5: uint16(22970), + 6: uint16(22991), + 7: uint16(22990), + 8: uint16(22962), + 9: uint16(22988), + 10: uint16(22977), + 11: uint16(22966), + 12: uint16(22972), + 13: uint16(22979), + 14: uint16(22998), + 15: uint16(22961), + 16: uint16(22973), + 17: uint16(22976), + 18: uint16(22984), + 19: uint16(22964), + 20: uint16(22983), + 21: uint16(23394), + 22: uint16(23397), + 23: uint16(23443), + 24: uint16(23445), + 25: uint16(23620), + 26: uint16(23623), + 27: uint16(23726), + 28: uint16(23716), + 29: uint16(23712), + 30: uint16(23733), + 31: uint16(23727), + 32: uint16(23720), + 33: uint16(23724), + 34: uint16(23711), + 35: uint16(23715), + 36: uint16(23725), + 37: uint16(23714), + 38: uint16(23722), + 39: uint16(23719), + 40: uint16(23709), + 41: uint16(23717), + 42: uint16(23734), + 43: uint16(23728), + 44: uint16(23718), + 45: uint16(24087), + 46: uint16(24084), + 47: uint16(24089), + 48: uint16(24360), + 49: uint16(24354), + 50: uint16(24355), + 51: uint16(24356), + 52: uint16(24404), + 53: uint16(24450), + 54: uint16(24446), + 55: uint16(24445), + 56: uint16(24542), + 57: uint16(24549), + 58: uint16(24621), + 59: uint16(24614), + 60: uint16(24601), + 61: uint16(24626), + 62: uint16(24587), + 63: uint16(24628), + 64: uint16(24586), + 65: uint16(24599), + 66: uint16(24627), + 67: uint16(24602), + 68: uint16(24606), + 69: uint16(24620), + 70: uint16(24610), + 71: uint16(24589), + 72: uint16(24592), + 73: uint16(24622), + 74: uint16(24595), + 75: uint16(24593), + 76: uint16(24588), + 77: uint16(24585), + 78: uint16(24604), + 79: uint16(25108), + 80: uint16(25149), + 81: uint16(25261), + 82: uint16(25268), + 83: uint16(25297), + 84: uint16(25278), + 85: uint16(25258), + 86: uint16(25270), + 87: uint16(25290), + 88: uint16(25262), + 89: uint16(25267), + 90: uint16(25263), + 91: uint16(25275), + 92: uint16(25257), + 93: uint16(25264), + 94: uint16(25272), + 95: uint16(25917), + 96: uint16(26024), + 97: uint16(26043), + 98: uint16(26121), + 99: uint16(26108), + 100: uint16(26116), + 101: uint16(26130), + 102: uint16(26120), + 103: uint16(26107), + 104: uint16(26115), + 105: uint16(26123), + 106: uint16(26125), + 107: uint16(26117), + 108: uint16(26109), + 109: uint16(26129), + 110: uint16(26128), + 111: uint16(26358), + 112: uint16(26378), + 113: uint16(26501), + 114: uint16(26476), + 115: uint16(26510), + 116: uint16(26514), + 117: uint16(26486), + 118: uint16(26491), + 119: uint16(26520), + 120: uint16(26502), + 121: uint16(26500), + 122: uint16(26484), + 123: uint16(26509), + 124: uint16(26508), + 125: uint16(26490), + 126: uint16(26527), + 127: uint16(26513), + 128: uint16(26521), + 129: uint16(26499), + 130: uint16(26493), + 131: uint16(26497), + 132: uint16(26488), + 133: uint16(26489), + 134: uint16(26516), + 135: uint16(27429), + 136: uint16(27520), + 137: uint16(27518), + 138: uint16(27614), + 139: uint16(27677), + 140: uint16(27795), + 141: uint16(27884), + 142: uint16(27883), + 143: uint16(27886), + 144: uint16(27865), + 145: uint16(27830), + 146: uint16(27860), + 147: uint16(27821), + 148: uint16(27879), + 149: uint16(27831), + 150: uint16(27856), + 151: uint16(27842), + 152: uint16(27834), + 153: uint16(27843), + 154: uint16(27846), + 155: uint16(27885), + 156: uint16(27890), + }, + 44: { + 0: uint16(27858), + 1: uint16(27869), + 2: uint16(27828), + 3: uint16(27786), + 4: uint16(27805), + 5: uint16(27776), + 6: uint16(27870), + 7: uint16(27840), + 8: uint16(27952), + 9: uint16(27853), + 10: uint16(27847), + 11: uint16(27824), + 12: uint16(27897), + 13: uint16(27855), + 14: uint16(27881), + 15: uint16(27857), + 16: uint16(28820), + 17: uint16(28824), + 18: uint16(28805), + 19: uint16(28819), + 20: uint16(28806), + 21: uint16(28804), + 22: uint16(28817), + 23: uint16(28822), + 24: uint16(28802), + 25: uint16(28826), + 26: uint16(28803), + 27: uint16(29290), + 28: uint16(29398), + 29: uint16(29387), + 30: uint16(29400), + 31: uint16(29385), + 32: uint16(29404), + 33: uint16(29394), + 34: uint16(29396), + 35: uint16(29402), + 36: uint16(29388), + 37: uint16(29393), + 38: uint16(29604), + 39: uint16(29601), + 40: uint16(29613), + 41: uint16(29606), + 42: uint16(29602), + 43: uint16(29600), + 44: uint16(29612), + 45: uint16(29597), + 46: uint16(29917), + 47: uint16(29928), + 48: uint16(30015), + 49: uint16(30016), + 50: uint16(30014), + 51: uint16(30092), + 52: uint16(30104), + 53: uint16(30383), + 54: uint16(30451), + 55: uint16(30449), + 56: uint16(30448), + 57: uint16(30453), + 58: uint16(30712), + 59: uint16(30716), + 60: uint16(30713), + 61: uint16(30715), + 62: uint16(30714), + 63: uint16(30711), + 64: uint16(31042), + 65: uint16(31039), + 66: uint16(31173), + 67: uint16(31352), + 68: uint16(31355), + 69: uint16(31483), + 70: uint16(31861), + 71: uint16(31997), + 72: uint16(32821), + 73: uint16(32911), + 74: uint16(32942), + 75: uint16(32931), + 76: uint16(32952), + 77: uint16(32949), + 78: uint16(32941), + 79: uint16(33312), + 80: uint16(33440), + 81: uint16(33472), + 82: uint16(33451), + 83: uint16(33434), + 84: uint16(33432), + 85: uint16(33435), + 86: uint16(33461), + 87: uint16(33447), + 88: uint16(33454), + 89: uint16(33468), + 90: uint16(33438), + 91: uint16(33466), + 92: uint16(33460), + 93: uint16(33448), + 94: uint16(33441), + 95: uint16(33449), + 96: uint16(33474), + 97: uint16(33444), + 98: uint16(33475), + 99: uint16(33462), + 100: uint16(33442), + 101: uint16(34416), + 102: uint16(34415), + 103: uint16(34413), + 104: uint16(34414), + 105: uint16(35926), + 106: uint16(36818), + 107: uint16(36811), + 108: uint16(36819), + 109: uint16(36813), + 110: uint16(36822), + 111: uint16(36821), + 112: uint16(36823), + 113: uint16(37042), + 114: uint16(37044), + 115: uint16(37039), + 116: uint16(37043), + 117: uint16(37040), + 118: uint16(38457), + 119: uint16(38461), + 120: uint16(38460), + 121: uint16(38458), + 122: uint16(38467), + 123: uint16(20429), + 124: uint16(20421), + 125: uint16(20435), + 126: uint16(20402), + 127: uint16(20425), + 128: uint16(20427), + 129: uint16(20417), + 130: uint16(20436), + 131: uint16(20444), + 132: uint16(20441), + 133: uint16(20411), + 134: uint16(20403), + 135: uint16(20443), + 136: uint16(20423), + 137: uint16(20438), + 138: uint16(20410), + 139: uint16(20416), + 140: uint16(20409), + 141: uint16(20460), + 142: uint16(21060), + 143: uint16(21065), + 144: uint16(21184), + 145: uint16(21186), + 146: uint16(21309), + 147: uint16(21372), + 148: uint16(21399), + 149: uint16(21398), + 150: uint16(21401), + 151: uint16(21400), + 152: uint16(21690), + 153: uint16(21665), + 154: uint16(21677), + 155: uint16(21669), + 156: uint16(21711), + }, + 45: { + 0: uint16(21699), + 1: uint16(33549), + 2: uint16(21687), + 3: uint16(21678), + 4: uint16(21718), + 5: uint16(21686), + 6: uint16(21701), + 7: uint16(21702), + 8: uint16(21664), + 9: uint16(21616), + 10: uint16(21692), + 11: uint16(21666), + 12: uint16(21694), + 13: uint16(21618), + 14: uint16(21726), + 15: uint16(21680), + 16: uint16(22453), + 17: uint16(22430), + 18: uint16(22431), + 19: uint16(22436), + 20: uint16(22412), + 21: uint16(22423), + 22: uint16(22429), + 23: uint16(22427), + 24: uint16(22420), + 25: uint16(22424), + 26: uint16(22415), + 27: uint16(22425), + 28: uint16(22437), + 29: uint16(22426), + 30: uint16(22421), + 31: uint16(22772), + 32: uint16(22797), + 33: uint16(22867), + 34: uint16(23009), + 35: uint16(23006), + 36: uint16(23022), + 37: uint16(23040), + 38: uint16(23025), + 39: uint16(23005), + 40: uint16(23034), + 41: uint16(23037), + 42: uint16(23036), + 43: uint16(23030), + 44: uint16(23012), + 45: uint16(23026), + 46: uint16(23031), + 47: uint16(23003), + 48: uint16(23017), + 49: uint16(23027), + 50: uint16(23029), + 51: uint16(23008), + 52: uint16(23038), + 53: uint16(23028), + 54: uint16(23021), + 55: uint16(23464), + 56: uint16(23628), + 57: uint16(23760), + 58: uint16(23768), + 59: uint16(23756), + 60: uint16(23767), + 61: uint16(23755), + 62: uint16(23771), + 63: uint16(23774), + 64: uint16(23770), + 65: uint16(23753), + 66: uint16(23751), + 67: uint16(23754), + 68: uint16(23766), + 69: uint16(23763), + 70: uint16(23764), + 71: uint16(23759), + 72: uint16(23752), + 73: uint16(23750), + 74: uint16(23758), + 75: uint16(23775), + 76: uint16(23800), + 77: uint16(24057), + 78: uint16(24097), + 79: uint16(24098), + 80: uint16(24099), + 81: uint16(24096), + 82: uint16(24100), + 83: uint16(24240), + 84: uint16(24228), + 85: uint16(24226), + 86: uint16(24219), + 87: uint16(24227), + 88: uint16(24229), + 89: uint16(24327), + 90: uint16(24366), + 91: uint16(24406), + 92: uint16(24454), + 93: uint16(24631), + 94: uint16(24633), + 95: uint16(24660), + 96: uint16(24690), + 97: uint16(24670), + 98: uint16(24645), + 99: uint16(24659), + 100: uint16(24647), + 101: uint16(24649), + 102: uint16(24667), + 103: uint16(24652), + 104: uint16(24640), + 105: uint16(24642), + 106: uint16(24671), + 107: uint16(24612), + 108: uint16(24644), + 109: uint16(24664), + 110: uint16(24678), + 111: uint16(24686), + 112: uint16(25154), + 113: uint16(25155), + 114: uint16(25295), + 115: uint16(25357), + 116: uint16(25355), + 117: uint16(25333), + 118: uint16(25358), + 119: uint16(25347), + 120: uint16(25323), + 121: uint16(25337), + 122: uint16(25359), + 123: uint16(25356), + 124: uint16(25336), + 125: uint16(25334), + 126: uint16(25344), + 127: uint16(25363), + 128: uint16(25364), + 129: uint16(25338), + 130: uint16(25365), + 131: uint16(25339), + 132: uint16(25328), + 133: uint16(25921), + 134: uint16(25923), + 135: uint16(26026), + 136: uint16(26047), + 137: uint16(26166), + 138: uint16(26145), + 139: uint16(26162), + 140: uint16(26165), + 141: uint16(26140), + 142: uint16(26150), + 143: uint16(26146), + 144: uint16(26163), + 145: uint16(26155), + 146: uint16(26170), + 147: uint16(26141), + 148: uint16(26164), + 149: uint16(26169), + 150: uint16(26158), + 151: uint16(26383), + 152: uint16(26384), + 153: uint16(26561), + 154: uint16(26610), + 155: uint16(26568), + 156: uint16(26554), + }, + 46: { + 0: uint16(26588), + 1: uint16(26555), + 2: uint16(26616), + 3: uint16(26584), + 4: uint16(26560), + 5: uint16(26551), + 6: uint16(26565), + 7: uint16(26603), + 8: uint16(26596), + 9: uint16(26591), + 10: uint16(26549), + 11: uint16(26573), + 12: uint16(26547), + 13: uint16(26615), + 14: uint16(26614), + 15: uint16(26606), + 16: uint16(26595), + 17: uint16(26562), + 18: uint16(26553), + 19: uint16(26574), + 20: uint16(26599), + 21: uint16(26608), + 22: uint16(26546), + 23: uint16(26620), + 24: uint16(26566), + 25: uint16(26605), + 26: uint16(26572), + 27: uint16(26542), + 28: uint16(26598), + 29: uint16(26587), + 30: uint16(26618), + 31: uint16(26569), + 32: uint16(26570), + 33: uint16(26563), + 34: uint16(26602), + 35: uint16(26571), + 36: uint16(27432), + 37: uint16(27522), + 38: uint16(27524), + 39: uint16(27574), + 40: uint16(27606), + 41: uint16(27608), + 42: uint16(27616), + 43: uint16(27680), + 44: uint16(27681), + 45: uint16(27944), + 46: uint16(27956), + 47: uint16(27949), + 48: uint16(27935), + 49: uint16(27964), + 50: uint16(27967), + 51: uint16(27922), + 52: uint16(27914), + 53: uint16(27866), + 54: uint16(27955), + 55: uint16(27908), + 56: uint16(27929), + 57: uint16(27962), + 58: uint16(27930), + 59: uint16(27921), + 60: uint16(27904), + 61: uint16(27933), + 62: uint16(27970), + 63: uint16(27905), + 64: uint16(27928), + 65: uint16(27959), + 66: uint16(27907), + 67: uint16(27919), + 68: uint16(27968), + 69: uint16(27911), + 70: uint16(27936), + 71: uint16(27948), + 72: uint16(27912), + 73: uint16(27938), + 74: uint16(27913), + 75: uint16(27920), + 76: uint16(28855), + 77: uint16(28831), + 78: uint16(28862), + 79: uint16(28849), + 80: uint16(28848), + 81: uint16(28833), + 82: uint16(28852), + 83: uint16(28853), + 84: uint16(28841), + 85: uint16(29249), + 86: uint16(29257), + 87: uint16(29258), + 88: uint16(29292), + 89: uint16(29296), + 90: uint16(29299), + 91: uint16(29294), + 92: uint16(29386), + 93: uint16(29412), + 94: uint16(29416), + 95: uint16(29419), + 96: uint16(29407), + 97: uint16(29418), + 98: uint16(29414), + 99: uint16(29411), + 100: uint16(29573), + 101: uint16(29644), + 102: uint16(29634), + 103: uint16(29640), + 104: uint16(29637), + 105: uint16(29625), + 106: uint16(29622), + 107: uint16(29621), + 108: uint16(29620), + 109: uint16(29675), + 110: uint16(29631), + 111: uint16(29639), + 112: uint16(29630), + 113: uint16(29635), + 114: uint16(29638), + 115: uint16(29624), + 116: uint16(29643), + 117: uint16(29932), + 118: uint16(29934), + 119: uint16(29998), + 120: uint16(30023), + 121: uint16(30024), + 122: uint16(30119), + 123: uint16(30122), + 124: uint16(30329), + 125: uint16(30404), + 126: uint16(30472), + 127: uint16(30467), + 128: uint16(30468), + 129: uint16(30469), + 130: uint16(30474), + 131: uint16(30455), + 132: uint16(30459), + 133: uint16(30458), + 134: uint16(30695), + 135: uint16(30696), + 136: uint16(30726), + 137: uint16(30737), + 138: uint16(30738), + 139: uint16(30725), + 140: uint16(30736), + 141: uint16(30735), + 142: uint16(30734), + 143: uint16(30729), + 144: uint16(30723), + 145: uint16(30739), + 146: uint16(31050), + 147: uint16(31052), + 148: uint16(31051), + 149: uint16(31045), + 150: uint16(31044), + 151: uint16(31189), + 152: uint16(31181), + 153: uint16(31183), + 154: uint16(31190), + 155: uint16(31182), + 156: uint16(31360), + }, + 47: { + 0: uint16(31358), + 1: uint16(31441), + 2: uint16(31488), + 3: uint16(31489), + 4: uint16(31866), + 5: uint16(31864), + 6: uint16(31865), + 7: uint16(31871), + 8: uint16(31872), + 9: uint16(31873), + 10: uint16(32003), + 11: uint16(32008), + 12: uint16(32001), + 13: uint16(32600), + 14: uint16(32657), + 15: uint16(32653), + 16: uint16(32702), + 17: uint16(32775), + 18: uint16(32782), + 19: uint16(32783), + 20: uint16(32788), + 21: uint16(32823), + 22: uint16(32984), + 23: uint16(32967), + 24: uint16(32992), + 25: uint16(32977), + 26: uint16(32968), + 27: uint16(32962), + 28: uint16(32976), + 29: uint16(32965), + 30: uint16(32995), + 31: uint16(32985), + 32: uint16(32988), + 33: uint16(32970), + 34: uint16(32981), + 35: uint16(32969), + 36: uint16(32975), + 37: uint16(32983), + 38: uint16(32998), + 39: uint16(32973), + 40: uint16(33279), + 41: uint16(33313), + 42: uint16(33428), + 43: uint16(33497), + 44: uint16(33534), + 45: uint16(33529), + 46: uint16(33543), + 47: uint16(33512), + 48: uint16(33536), + 49: uint16(33493), + 50: uint16(33594), + 51: uint16(33515), + 52: uint16(33494), + 53: uint16(33524), + 54: uint16(33516), + 55: uint16(33505), + 56: uint16(33522), + 57: uint16(33525), + 58: uint16(33548), + 59: uint16(33531), + 60: uint16(33526), + 61: uint16(33520), + 62: uint16(33514), + 63: uint16(33508), + 64: uint16(33504), + 65: uint16(33530), + 66: uint16(33523), + 67: uint16(33517), + 68: uint16(34423), + 69: uint16(34420), + 70: uint16(34428), + 71: uint16(34419), + 72: uint16(34881), + 73: uint16(34894), + 74: uint16(34919), + 75: uint16(34922), + 76: uint16(34921), + 77: uint16(35283), + 78: uint16(35332), + 79: uint16(35335), + 80: uint16(36210), + 81: uint16(36835), + 82: uint16(36833), + 83: uint16(36846), + 84: uint16(36832), + 85: uint16(37105), + 86: uint16(37053), + 87: uint16(37055), + 88: uint16(37077), + 89: uint16(37061), + 90: uint16(37054), + 91: uint16(37063), + 92: uint16(37067), + 93: uint16(37064), + 94: uint16(37332), + 95: uint16(37331), + 96: uint16(38484), + 97: uint16(38479), + 98: uint16(38481), + 99: uint16(38483), + 100: uint16(38474), + 101: uint16(38478), + 102: uint16(20510), + 103: uint16(20485), + 104: uint16(20487), + 105: uint16(20499), + 106: uint16(20514), + 107: uint16(20528), + 108: uint16(20507), + 109: uint16(20469), + 110: uint16(20468), + 111: uint16(20531), + 112: uint16(20535), + 113: uint16(20524), + 114: uint16(20470), + 115: uint16(20471), + 116: uint16(20503), + 117: uint16(20508), + 118: uint16(20512), + 119: uint16(20519), + 120: uint16(20533), + 121: uint16(20527), + 122: uint16(20529), + 123: uint16(20494), + 124: uint16(20826), + 125: uint16(20884), + 126: uint16(20883), + 127: uint16(20938), + 128: uint16(20932), + 129: uint16(20933), + 130: uint16(20936), + 131: uint16(20942), + 132: uint16(21089), + 133: uint16(21082), + 134: uint16(21074), + 135: uint16(21086), + 136: uint16(21087), + 137: uint16(21077), + 138: uint16(21090), + 139: uint16(21197), + 140: uint16(21262), + 141: uint16(21406), + 142: uint16(21798), + 143: uint16(21730), + 144: uint16(21783), + 145: uint16(21778), + 146: uint16(21735), + 147: uint16(21747), + 148: uint16(21732), + 149: uint16(21786), + 150: uint16(21759), + 151: uint16(21764), + 152: uint16(21768), + 153: uint16(21739), + 154: uint16(21777), + 155: uint16(21765), + 156: uint16(21745), + }, + 48: { + 0: uint16(21770), + 1: uint16(21755), + 2: uint16(21751), + 3: uint16(21752), + 4: uint16(21728), + 5: uint16(21774), + 6: uint16(21763), + 7: uint16(21771), + 8: uint16(22273), + 9: uint16(22274), + 10: uint16(22476), + 11: uint16(22578), + 12: uint16(22485), + 13: uint16(22482), + 14: uint16(22458), + 15: uint16(22470), + 16: uint16(22461), + 17: uint16(22460), + 18: uint16(22456), + 19: uint16(22454), + 20: uint16(22463), + 21: uint16(22471), + 22: uint16(22480), + 23: uint16(22457), + 24: uint16(22465), + 25: uint16(22798), + 26: uint16(22858), + 27: uint16(23065), + 28: uint16(23062), + 29: uint16(23085), + 30: uint16(23086), + 31: uint16(23061), + 32: uint16(23055), + 33: uint16(23063), + 34: uint16(23050), + 35: uint16(23070), + 36: uint16(23091), + 37: uint16(23404), + 38: uint16(23463), + 39: uint16(23469), + 40: uint16(23468), + 41: uint16(23555), + 42: uint16(23638), + 43: uint16(23636), + 44: uint16(23788), + 45: uint16(23807), + 46: uint16(23790), + 47: uint16(23793), + 48: uint16(23799), + 49: uint16(23808), + 50: uint16(23801), + 51: uint16(24105), + 52: uint16(24104), + 53: uint16(24232), + 54: uint16(24238), + 55: uint16(24234), + 56: uint16(24236), + 57: uint16(24371), + 58: uint16(24368), + 59: uint16(24423), + 60: uint16(24669), + 61: uint16(24666), + 62: uint16(24679), + 63: uint16(24641), + 64: uint16(24738), + 65: uint16(24712), + 66: uint16(24704), + 67: uint16(24722), + 68: uint16(24705), + 69: uint16(24733), + 70: uint16(24707), + 71: uint16(24725), + 72: uint16(24731), + 73: uint16(24727), + 74: uint16(24711), + 75: uint16(24732), + 76: uint16(24718), + 77: uint16(25113), + 78: uint16(25158), + 79: uint16(25330), + 80: uint16(25360), + 81: uint16(25430), + 82: uint16(25388), + 83: uint16(25412), + 84: uint16(25413), + 85: uint16(25398), + 86: uint16(25411), + 87: uint16(25572), + 88: uint16(25401), + 89: uint16(25419), + 90: uint16(25418), + 91: uint16(25404), + 92: uint16(25385), + 93: uint16(25409), + 94: uint16(25396), + 95: uint16(25432), + 96: uint16(25428), + 97: uint16(25433), + 98: uint16(25389), + 99: uint16(25415), + 100: uint16(25395), + 101: uint16(25434), + 102: uint16(25425), + 103: uint16(25400), + 104: uint16(25431), + 105: uint16(25408), + 106: uint16(25416), + 107: uint16(25930), + 108: uint16(25926), + 109: uint16(26054), + 110: uint16(26051), + 111: uint16(26052), + 112: uint16(26050), + 113: uint16(26186), + 114: uint16(26207), + 115: uint16(26183), + 116: uint16(26193), + 117: uint16(26386), + 118: uint16(26387), + 119: uint16(26655), + 120: uint16(26650), + 121: uint16(26697), + 122: uint16(26674), + 123: uint16(26675), + 124: uint16(26683), + 125: uint16(26699), + 126: uint16(26703), + 127: uint16(26646), + 128: uint16(26673), + 129: uint16(26652), + 130: uint16(26677), + 131: uint16(26667), + 132: uint16(26669), + 133: uint16(26671), + 134: uint16(26702), + 135: uint16(26692), + 136: uint16(26676), + 137: uint16(26653), + 138: uint16(26642), + 139: uint16(26644), + 140: uint16(26662), + 141: uint16(26664), + 142: uint16(26670), + 143: uint16(26701), + 144: uint16(26682), + 145: uint16(26661), + 146: uint16(26656), + 147: uint16(27436), + 148: uint16(27439), + 149: uint16(27437), + 150: uint16(27441), + 151: uint16(27444), + 152: uint16(27501), + 153: uint16(32898), + 154: uint16(27528), + 155: uint16(27622), + 156: uint16(27620), + }, + 49: { + 0: uint16(27624), + 1: uint16(27619), + 2: uint16(27618), + 3: uint16(27623), + 4: uint16(27685), + 5: uint16(28026), + 6: uint16(28003), + 7: uint16(28004), + 8: uint16(28022), + 9: uint16(27917), + 10: uint16(28001), + 11: uint16(28050), + 12: uint16(27992), + 13: uint16(28002), + 14: uint16(28013), + 15: uint16(28015), + 16: uint16(28049), + 17: uint16(28045), + 18: uint16(28143), + 19: uint16(28031), + 20: uint16(28038), + 21: uint16(27998), + 22: uint16(28007), + 23: uint16(28000), + 24: uint16(28055), + 25: uint16(28016), + 26: uint16(28028), + 27: uint16(27999), + 28: uint16(28034), + 29: uint16(28056), + 30: uint16(27951), + 31: uint16(28008), + 32: uint16(28043), + 33: uint16(28030), + 34: uint16(28032), + 35: uint16(28036), + 36: uint16(27926), + 37: uint16(28035), + 38: uint16(28027), + 39: uint16(28029), + 40: uint16(28021), + 41: uint16(28048), + 42: uint16(28892), + 43: uint16(28883), + 44: uint16(28881), + 45: uint16(28893), + 46: uint16(28875), + 47: uint16(32569), + 48: uint16(28898), + 49: uint16(28887), + 50: uint16(28882), + 51: uint16(28894), + 52: uint16(28896), + 53: uint16(28884), + 54: uint16(28877), + 55: uint16(28869), + 56: uint16(28870), + 57: uint16(28871), + 58: uint16(28890), + 59: uint16(28878), + 60: uint16(28897), + 61: uint16(29250), + 62: uint16(29304), + 63: uint16(29303), + 64: uint16(29302), + 65: uint16(29440), + 66: uint16(29434), + 67: uint16(29428), + 68: uint16(29438), + 69: uint16(29430), + 70: uint16(29427), + 71: uint16(29435), + 72: uint16(29441), + 73: uint16(29651), + 74: uint16(29657), + 75: uint16(29669), + 76: uint16(29654), + 77: uint16(29628), + 78: uint16(29671), + 79: uint16(29667), + 80: uint16(29673), + 81: uint16(29660), + 82: uint16(29650), + 83: uint16(29659), + 84: uint16(29652), + 85: uint16(29661), + 86: uint16(29658), + 87: uint16(29655), + 88: uint16(29656), + 89: uint16(29672), + 90: uint16(29918), + 91: uint16(29919), + 92: uint16(29940), + 93: uint16(29941), + 94: uint16(29985), + 95: uint16(30043), + 96: uint16(30047), + 97: uint16(30128), + 98: uint16(30145), + 99: uint16(30139), + 100: uint16(30148), + 101: uint16(30144), + 102: uint16(30143), + 103: uint16(30134), + 104: uint16(30138), + 105: uint16(30346), + 106: uint16(30409), + 107: uint16(30493), + 108: uint16(30491), + 109: uint16(30480), + 110: uint16(30483), + 111: uint16(30482), + 112: uint16(30499), + 113: uint16(30481), + 114: uint16(30485), + 115: uint16(30489), + 116: uint16(30490), + 117: uint16(30498), + 118: uint16(30503), + 119: uint16(30755), + 120: uint16(30764), + 121: uint16(30754), + 122: uint16(30773), + 123: uint16(30767), + 124: uint16(30760), + 125: uint16(30766), + 126: uint16(30763), + 127: uint16(30753), + 128: uint16(30761), + 129: uint16(30771), + 130: uint16(30762), + 131: uint16(30769), + 132: uint16(31060), + 133: uint16(31067), + 134: uint16(31055), + 135: uint16(31068), + 136: uint16(31059), + 137: uint16(31058), + 138: uint16(31057), + 139: uint16(31211), + 140: uint16(31212), + 141: uint16(31200), + 142: uint16(31214), + 143: uint16(31213), + 144: uint16(31210), + 145: uint16(31196), + 146: uint16(31198), + 147: uint16(31197), + 148: uint16(31366), + 149: uint16(31369), + 150: uint16(31365), + 151: uint16(31371), + 152: uint16(31372), + 153: uint16(31370), + 154: uint16(31367), + 155: uint16(31448), + 156: uint16(31504), + }, + 50: { + 0: uint16(31492), + 1: uint16(31507), + 2: uint16(31493), + 3: uint16(31503), + 4: uint16(31496), + 5: uint16(31498), + 6: uint16(31502), + 7: uint16(31497), + 8: uint16(31506), + 9: uint16(31876), + 10: uint16(31889), + 11: uint16(31882), + 12: uint16(31884), + 13: uint16(31880), + 14: uint16(31885), + 15: uint16(31877), + 16: uint16(32030), + 17: uint16(32029), + 18: uint16(32017), + 19: uint16(32014), + 20: uint16(32024), + 21: uint16(32022), + 22: uint16(32019), + 23: uint16(32031), + 24: uint16(32018), + 25: uint16(32015), + 26: uint16(32012), + 27: uint16(32604), + 28: uint16(32609), + 29: uint16(32606), + 30: uint16(32608), + 31: uint16(32605), + 32: uint16(32603), + 33: uint16(32662), + 34: uint16(32658), + 35: uint16(32707), + 36: uint16(32706), + 37: uint16(32704), + 38: uint16(32790), + 39: uint16(32830), + 40: uint16(32825), + 41: uint16(33018), + 42: uint16(33010), + 43: uint16(33017), + 44: uint16(33013), + 45: uint16(33025), + 46: uint16(33019), + 47: uint16(33024), + 48: uint16(33281), + 49: uint16(33327), + 50: uint16(33317), + 51: uint16(33587), + 52: uint16(33581), + 53: uint16(33604), + 54: uint16(33561), + 55: uint16(33617), + 56: uint16(33573), + 57: uint16(33622), + 58: uint16(33599), + 59: uint16(33601), + 60: uint16(33574), + 61: uint16(33564), + 62: uint16(33570), + 63: uint16(33602), + 64: uint16(33614), + 65: uint16(33563), + 66: uint16(33578), + 67: uint16(33544), + 68: uint16(33596), + 69: uint16(33613), + 70: uint16(33558), + 71: uint16(33572), + 72: uint16(33568), + 73: uint16(33591), + 74: uint16(33583), + 75: uint16(33577), + 76: uint16(33607), + 77: uint16(33605), + 78: uint16(33612), + 79: uint16(33619), + 80: uint16(33566), + 81: uint16(33580), + 82: uint16(33611), + 83: uint16(33575), + 84: uint16(33608), + 85: uint16(34387), + 86: uint16(34386), + 87: uint16(34466), + 88: uint16(34472), + 89: uint16(34454), + 90: uint16(34445), + 91: uint16(34449), + 92: uint16(34462), + 93: uint16(34439), + 94: uint16(34455), + 95: uint16(34438), + 96: uint16(34443), + 97: uint16(34458), + 98: uint16(34437), + 99: uint16(34469), + 100: uint16(34457), + 101: uint16(34465), + 102: uint16(34471), + 103: uint16(34453), + 104: uint16(34456), + 105: uint16(34446), + 106: uint16(34461), + 107: uint16(34448), + 108: uint16(34452), + 109: uint16(34883), + 110: uint16(34884), + 111: uint16(34925), + 112: uint16(34933), + 113: uint16(34934), + 114: uint16(34930), + 115: uint16(34944), + 116: uint16(34929), + 117: uint16(34943), + 118: uint16(34927), + 119: uint16(34947), + 120: uint16(34942), + 121: uint16(34932), + 122: uint16(34940), + 123: uint16(35346), + 124: uint16(35911), + 125: uint16(35927), + 126: uint16(35963), + 127: uint16(36004), + 128: uint16(36003), + 129: uint16(36214), + 130: uint16(36216), + 131: uint16(36277), + 132: uint16(36279), + 133: uint16(36278), + 134: uint16(36561), + 135: uint16(36563), + 136: uint16(36862), + 137: uint16(36853), + 138: uint16(36866), + 139: uint16(36863), + 140: uint16(36859), + 141: uint16(36868), + 142: uint16(36860), + 143: uint16(36854), + 144: uint16(37078), + 145: uint16(37088), + 146: uint16(37081), + 147: uint16(37082), + 148: uint16(37091), + 149: uint16(37087), + 150: uint16(37093), + 151: uint16(37080), + 152: uint16(37083), + 153: uint16(37079), + 154: uint16(37084), + 155: uint16(37092), + 156: uint16(37200), + }, + 51: { + 0: uint16(37198), + 1: uint16(37199), + 2: uint16(37333), + 3: uint16(37346), + 4: uint16(37338), + 5: uint16(38492), + 6: uint16(38495), + 7: uint16(38588), + 8: uint16(39139), + 9: uint16(39647), + 10: uint16(39727), + 11: uint16(20095), + 12: uint16(20592), + 13: uint16(20586), + 14: uint16(20577), + 15: uint16(20574), + 16: uint16(20576), + 17: uint16(20563), + 18: uint16(20555), + 19: uint16(20573), + 20: uint16(20594), + 21: uint16(20552), + 22: uint16(20557), + 23: uint16(20545), + 24: uint16(20571), + 25: uint16(20554), + 26: uint16(20578), + 27: uint16(20501), + 28: uint16(20549), + 29: uint16(20575), + 30: uint16(20585), + 31: uint16(20587), + 32: uint16(20579), + 33: uint16(20580), + 34: uint16(20550), + 35: uint16(20544), + 36: uint16(20590), + 37: uint16(20595), + 38: uint16(20567), + 39: uint16(20561), + 40: uint16(20944), + 41: uint16(21099), + 42: uint16(21101), + 43: uint16(21100), + 44: uint16(21102), + 45: uint16(21206), + 46: uint16(21203), + 47: uint16(21293), + 48: uint16(21404), + 49: uint16(21877), + 50: uint16(21878), + 51: uint16(21820), + 52: uint16(21837), + 53: uint16(21840), + 54: uint16(21812), + 55: uint16(21802), + 56: uint16(21841), + 57: uint16(21858), + 58: uint16(21814), + 59: uint16(21813), + 60: uint16(21808), + 61: uint16(21842), + 62: uint16(21829), + 63: uint16(21772), + 64: uint16(21810), + 65: uint16(21861), + 66: uint16(21838), + 67: uint16(21817), + 68: uint16(21832), + 69: uint16(21805), + 70: uint16(21819), + 71: uint16(21824), + 72: uint16(21835), + 73: uint16(22282), + 74: uint16(22279), + 75: uint16(22523), + 76: uint16(22548), + 77: uint16(22498), + 78: uint16(22518), + 79: uint16(22492), + 80: uint16(22516), + 81: uint16(22528), + 82: uint16(22509), + 83: uint16(22525), + 84: uint16(22536), + 85: uint16(22520), + 86: uint16(22539), + 87: uint16(22515), + 88: uint16(22479), + 89: uint16(22535), + 90: uint16(22510), + 91: uint16(22499), + 92: uint16(22514), + 93: uint16(22501), + 94: uint16(22508), + 95: uint16(22497), + 96: uint16(22542), + 97: uint16(22524), + 98: uint16(22544), + 99: uint16(22503), + 100: uint16(22529), + 101: uint16(22540), + 102: uint16(22513), + 103: uint16(22505), + 104: uint16(22512), + 105: uint16(22541), + 106: uint16(22532), + 107: uint16(22876), + 108: uint16(23136), + 109: uint16(23128), + 110: uint16(23125), + 111: uint16(23143), + 112: uint16(23134), + 113: uint16(23096), + 114: uint16(23093), + 115: uint16(23149), + 116: uint16(23120), + 117: uint16(23135), + 118: uint16(23141), + 119: uint16(23148), + 120: uint16(23123), + 121: uint16(23140), + 122: uint16(23127), + 123: uint16(23107), + 124: uint16(23133), + 125: uint16(23122), + 126: uint16(23108), + 127: uint16(23131), + 128: uint16(23112), + 129: uint16(23182), + 130: uint16(23102), + 131: uint16(23117), + 132: uint16(23097), + 133: uint16(23116), + 134: uint16(23152), + 135: uint16(23145), + 136: uint16(23111), + 137: uint16(23121), + 138: uint16(23126), + 139: uint16(23106), + 140: uint16(23132), + 141: uint16(23410), + 142: uint16(23406), + 143: uint16(23489), + 144: uint16(23488), + 145: uint16(23641), + 146: uint16(23838), + 147: uint16(23819), + 148: uint16(23837), + 149: uint16(23834), + 150: uint16(23840), + 151: uint16(23820), + 152: uint16(23848), + 153: uint16(23821), + 154: uint16(23846), + 155: uint16(23845), + 156: uint16(23823), + }, + 52: { + 0: uint16(23856), + 1: uint16(23826), + 2: uint16(23843), + 3: uint16(23839), + 4: uint16(23854), + 5: uint16(24126), + 6: uint16(24116), + 7: uint16(24241), + 8: uint16(24244), + 9: uint16(24249), + 10: uint16(24242), + 11: uint16(24243), + 12: uint16(24374), + 13: uint16(24376), + 14: uint16(24475), + 15: uint16(24470), + 16: uint16(24479), + 17: uint16(24714), + 18: uint16(24720), + 19: uint16(24710), + 20: uint16(24766), + 21: uint16(24752), + 22: uint16(24762), + 23: uint16(24787), + 24: uint16(24788), + 25: uint16(24783), + 26: uint16(24804), + 27: uint16(24793), + 28: uint16(24797), + 29: uint16(24776), + 30: uint16(24753), + 31: uint16(24795), + 32: uint16(24759), + 33: uint16(24778), + 34: uint16(24767), + 35: uint16(24771), + 36: uint16(24781), + 37: uint16(24768), + 38: uint16(25394), + 39: uint16(25445), + 40: uint16(25482), + 41: uint16(25474), + 42: uint16(25469), + 43: uint16(25533), + 44: uint16(25502), + 45: uint16(25517), + 46: uint16(25501), + 47: uint16(25495), + 48: uint16(25515), + 49: uint16(25486), + 50: uint16(25455), + 51: uint16(25479), + 52: uint16(25488), + 53: uint16(25454), + 54: uint16(25519), + 55: uint16(25461), + 56: uint16(25500), + 57: uint16(25453), + 58: uint16(25518), + 59: uint16(25468), + 60: uint16(25508), + 61: uint16(25403), + 62: uint16(25503), + 63: uint16(25464), + 64: uint16(25477), + 65: uint16(25473), + 66: uint16(25489), + 67: uint16(25485), + 68: uint16(25456), + 69: uint16(25939), + 70: uint16(26061), + 71: uint16(26213), + 72: uint16(26209), + 73: uint16(26203), + 74: uint16(26201), + 75: uint16(26204), + 76: uint16(26210), + 77: uint16(26392), + 78: uint16(26745), + 79: uint16(26759), + 80: uint16(26768), + 81: uint16(26780), + 82: uint16(26733), + 83: uint16(26734), + 84: uint16(26798), + 85: uint16(26795), + 86: uint16(26966), + 87: uint16(26735), + 88: uint16(26787), + 89: uint16(26796), + 90: uint16(26793), + 91: uint16(26741), + 92: uint16(26740), + 93: uint16(26802), + 94: uint16(26767), + 95: uint16(26743), + 96: uint16(26770), + 97: uint16(26748), + 98: uint16(26731), + 99: uint16(26738), + 100: uint16(26794), + 101: uint16(26752), + 102: uint16(26737), + 103: uint16(26750), + 104: uint16(26779), + 105: uint16(26774), + 106: uint16(26763), + 107: uint16(26784), + 108: uint16(26761), + 109: uint16(26788), + 110: uint16(26744), + 111: uint16(26747), + 112: uint16(26769), + 113: uint16(26764), + 114: uint16(26762), + 115: uint16(26749), + 116: uint16(27446), + 117: uint16(27443), + 118: uint16(27447), + 119: uint16(27448), + 120: uint16(27537), + 121: uint16(27535), + 122: uint16(27533), + 123: uint16(27534), + 124: uint16(27532), + 125: uint16(27690), + 126: uint16(28096), + 127: uint16(28075), + 128: uint16(28084), + 129: uint16(28083), + 130: uint16(28276), + 131: uint16(28076), + 132: uint16(28137), + 133: uint16(28130), + 134: uint16(28087), + 135: uint16(28150), + 136: uint16(28116), + 137: uint16(28160), + 138: uint16(28104), + 139: uint16(28128), + 140: uint16(28127), + 141: uint16(28118), + 142: uint16(28094), + 143: uint16(28133), + 144: uint16(28124), + 145: uint16(28125), + 146: uint16(28123), + 147: uint16(28148), + 148: uint16(28106), + 149: uint16(28093), + 150: uint16(28141), + 151: uint16(28144), + 152: uint16(28090), + 153: uint16(28117), + 154: uint16(28098), + 155: uint16(28111), + 156: uint16(28105), + }, + 53: { + 0: uint16(28112), + 1: uint16(28146), + 2: uint16(28115), + 3: uint16(28157), + 4: uint16(28119), + 5: uint16(28109), + 6: uint16(28131), + 7: uint16(28091), + 8: uint16(28922), + 9: uint16(28941), + 10: uint16(28919), + 11: uint16(28951), + 12: uint16(28916), + 13: uint16(28940), + 14: uint16(28912), + 15: uint16(28932), + 16: uint16(28915), + 17: uint16(28944), + 18: uint16(28924), + 19: uint16(28927), + 20: uint16(28934), + 21: uint16(28947), + 22: uint16(28928), + 23: uint16(28920), + 24: uint16(28918), + 25: uint16(28939), + 26: uint16(28930), + 27: uint16(28942), + 28: uint16(29310), + 29: uint16(29307), + 30: uint16(29308), + 31: uint16(29311), + 32: uint16(29469), + 33: uint16(29463), + 34: uint16(29447), + 35: uint16(29457), + 36: uint16(29464), + 37: uint16(29450), + 38: uint16(29448), + 39: uint16(29439), + 40: uint16(29455), + 41: uint16(29470), + 42: uint16(29576), + 43: uint16(29686), + 44: uint16(29688), + 45: uint16(29685), + 46: uint16(29700), + 47: uint16(29697), + 48: uint16(29693), + 49: uint16(29703), + 50: uint16(29696), + 51: uint16(29690), + 52: uint16(29692), + 53: uint16(29695), + 54: uint16(29708), + 55: uint16(29707), + 56: uint16(29684), + 57: uint16(29704), + 58: uint16(30052), + 59: uint16(30051), + 60: uint16(30158), + 61: uint16(30162), + 62: uint16(30159), + 63: uint16(30155), + 64: uint16(30156), + 65: uint16(30161), + 66: uint16(30160), + 67: uint16(30351), + 68: uint16(30345), + 69: uint16(30419), + 70: uint16(30521), + 71: uint16(30511), + 72: uint16(30509), + 73: uint16(30513), + 74: uint16(30514), + 75: uint16(30516), + 76: uint16(30515), + 77: uint16(30525), + 78: uint16(30501), + 79: uint16(30523), + 80: uint16(30517), + 81: uint16(30792), + 82: uint16(30802), + 83: uint16(30793), + 84: uint16(30797), + 85: uint16(30794), + 86: uint16(30796), + 87: uint16(30758), + 88: uint16(30789), + 89: uint16(30800), + 90: uint16(31076), + 91: uint16(31079), + 92: uint16(31081), + 93: uint16(31082), + 94: uint16(31075), + 95: uint16(31083), + 96: uint16(31073), + 97: uint16(31163), + 98: uint16(31226), + 99: uint16(31224), + 100: uint16(31222), + 101: uint16(31223), + 102: uint16(31375), + 103: uint16(31380), + 104: uint16(31376), + 105: uint16(31541), + 106: uint16(31559), + 107: uint16(31540), + 108: uint16(31525), + 109: uint16(31536), + 110: uint16(31522), + 111: uint16(31524), + 112: uint16(31539), + 113: uint16(31512), + 114: uint16(31530), + 115: uint16(31517), + 116: uint16(31537), + 117: uint16(31531), + 118: uint16(31533), + 119: uint16(31535), + 120: uint16(31538), + 121: uint16(31544), + 122: uint16(31514), + 123: uint16(31523), + 124: uint16(31892), + 125: uint16(31896), + 126: uint16(31894), + 127: uint16(31907), + 128: uint16(32053), + 129: uint16(32061), + 130: uint16(32056), + 131: uint16(32054), + 132: uint16(32058), + 133: uint16(32069), + 134: uint16(32044), + 135: uint16(32041), + 136: uint16(32065), + 137: uint16(32071), + 138: uint16(32062), + 139: uint16(32063), + 140: uint16(32074), + 141: uint16(32059), + 142: uint16(32040), + 143: uint16(32611), + 144: uint16(32661), + 145: uint16(32668), + 146: uint16(32669), + 147: uint16(32667), + 148: uint16(32714), + 149: uint16(32715), + 150: uint16(32717), + 151: uint16(32720), + 152: uint16(32721), + 153: uint16(32711), + 154: uint16(32719), + 155: uint16(32713), + 156: uint16(32799), + }, + 54: { + 0: uint16(32798), + 1: uint16(32795), + 2: uint16(32839), + 3: uint16(32835), + 4: uint16(32840), + 5: uint16(33048), + 6: uint16(33061), + 7: uint16(33049), + 8: uint16(33051), + 9: uint16(33069), + 10: uint16(33055), + 11: uint16(33068), + 12: uint16(33054), + 13: uint16(33057), + 14: uint16(33045), + 15: uint16(33063), + 16: uint16(33053), + 17: uint16(33058), + 18: uint16(33297), + 19: uint16(33336), + 20: uint16(33331), + 21: uint16(33338), + 22: uint16(33332), + 23: uint16(33330), + 24: uint16(33396), + 25: uint16(33680), + 26: uint16(33699), + 27: uint16(33704), + 28: uint16(33677), + 29: uint16(33658), + 30: uint16(33651), + 31: uint16(33700), + 32: uint16(33652), + 33: uint16(33679), + 34: uint16(33665), + 35: uint16(33685), + 36: uint16(33689), + 37: uint16(33653), + 38: uint16(33684), + 39: uint16(33705), + 40: uint16(33661), + 41: uint16(33667), + 42: uint16(33676), + 43: uint16(33693), + 44: uint16(33691), + 45: uint16(33706), + 46: uint16(33675), + 47: uint16(33662), + 48: uint16(33701), + 49: uint16(33711), + 50: uint16(33672), + 51: uint16(33687), + 52: uint16(33712), + 53: uint16(33663), + 54: uint16(33702), + 55: uint16(33671), + 56: uint16(33710), + 57: uint16(33654), + 58: uint16(33690), + 59: uint16(34393), + 60: uint16(34390), + 61: uint16(34495), + 62: uint16(34487), + 63: uint16(34498), + 64: uint16(34497), + 65: uint16(34501), + 66: uint16(34490), + 67: uint16(34480), + 68: uint16(34504), + 69: uint16(34489), + 70: uint16(34483), + 71: uint16(34488), + 72: uint16(34508), + 73: uint16(34484), + 74: uint16(34491), + 75: uint16(34492), + 76: uint16(34499), + 77: uint16(34493), + 78: uint16(34494), + 79: uint16(34898), + 80: uint16(34953), + 81: uint16(34965), + 82: uint16(34984), + 83: uint16(34978), + 84: uint16(34986), + 85: uint16(34970), + 86: uint16(34961), + 87: uint16(34977), + 88: uint16(34975), + 89: uint16(34968), + 90: uint16(34983), + 91: uint16(34969), + 92: uint16(34971), + 93: uint16(34967), + 94: uint16(34980), + 95: uint16(34988), + 96: uint16(34956), + 97: uint16(34963), + 98: uint16(34958), + 99: uint16(35202), + 100: uint16(35286), + 101: uint16(35289), + 102: uint16(35285), + 103: uint16(35376), + 104: uint16(35367), + 105: uint16(35372), + 106: uint16(35358), + 107: uint16(35897), + 108: uint16(35899), + 109: uint16(35932), + 110: uint16(35933), + 111: uint16(35965), + 112: uint16(36005), + 113: uint16(36221), + 114: uint16(36219), + 115: uint16(36217), + 116: uint16(36284), + 117: uint16(36290), + 118: uint16(36281), + 119: uint16(36287), + 120: uint16(36289), + 121: uint16(36568), + 122: uint16(36574), + 123: uint16(36573), + 124: uint16(36572), + 125: uint16(36567), + 126: uint16(36576), + 127: uint16(36577), + 128: uint16(36900), + 129: uint16(36875), + 130: uint16(36881), + 131: uint16(36892), + 132: uint16(36876), + 133: uint16(36897), + 134: uint16(37103), + 135: uint16(37098), + 136: uint16(37104), + 137: uint16(37108), + 138: uint16(37106), + 139: uint16(37107), + 140: uint16(37076), + 141: uint16(37099), + 142: uint16(37100), + 143: uint16(37097), + 144: uint16(37206), + 145: uint16(37208), + 146: uint16(37210), + 147: uint16(37203), + 148: uint16(37205), + 149: uint16(37356), + 150: uint16(37364), + 151: uint16(37361), + 152: uint16(37363), + 153: uint16(37368), + 154: uint16(37348), + 155: uint16(37369), + 156: uint16(37354), + }, + 55: { + 0: uint16(37355), + 1: uint16(37367), + 2: uint16(37352), + 3: uint16(37358), + 4: uint16(38266), + 5: uint16(38278), + 6: uint16(38280), + 7: uint16(38524), + 8: uint16(38509), + 9: uint16(38507), + 10: uint16(38513), + 11: uint16(38511), + 12: uint16(38591), + 13: uint16(38762), + 14: uint16(38916), + 15: uint16(39141), + 16: uint16(39319), + 17: uint16(20635), + 18: uint16(20629), + 19: uint16(20628), + 20: uint16(20638), + 21: uint16(20619), + 22: uint16(20643), + 23: uint16(20611), + 24: uint16(20620), + 25: uint16(20622), + 26: uint16(20637), + 27: uint16(20584), + 28: uint16(20636), + 29: uint16(20626), + 30: uint16(20610), + 31: uint16(20615), + 32: uint16(20831), + 33: uint16(20948), + 34: uint16(21266), + 35: uint16(21265), + 36: uint16(21412), + 37: uint16(21415), + 38: uint16(21905), + 39: uint16(21928), + 40: uint16(21925), + 41: uint16(21933), + 42: uint16(21879), + 43: uint16(22085), + 44: uint16(21922), + 45: uint16(21907), + 46: uint16(21896), + 47: uint16(21903), + 48: uint16(21941), + 49: uint16(21889), + 50: uint16(21923), + 51: uint16(21906), + 52: uint16(21924), + 53: uint16(21885), + 54: uint16(21900), + 55: uint16(21926), + 56: uint16(21887), + 57: uint16(21909), + 58: uint16(21921), + 59: uint16(21902), + 60: uint16(22284), + 61: uint16(22569), + 62: uint16(22583), + 63: uint16(22553), + 64: uint16(22558), + 65: uint16(22567), + 66: uint16(22563), + 67: uint16(22568), + 68: uint16(22517), + 69: uint16(22600), + 70: uint16(22565), + 71: uint16(22556), + 72: uint16(22555), + 73: uint16(22579), + 74: uint16(22591), + 75: uint16(22582), + 76: uint16(22574), + 77: uint16(22585), + 78: uint16(22584), + 79: uint16(22573), + 80: uint16(22572), + 81: uint16(22587), + 82: uint16(22881), + 83: uint16(23215), + 84: uint16(23188), + 85: uint16(23199), + 86: uint16(23162), + 87: uint16(23202), + 88: uint16(23198), + 89: uint16(23160), + 90: uint16(23206), + 91: uint16(23164), + 92: uint16(23205), + 93: uint16(23212), + 94: uint16(23189), + 95: uint16(23214), + 96: uint16(23095), + 97: uint16(23172), + 98: uint16(23178), + 99: uint16(23191), + 100: uint16(23171), + 101: uint16(23179), + 102: uint16(23209), + 103: uint16(23163), + 104: uint16(23165), + 105: uint16(23180), + 106: uint16(23196), + 107: uint16(23183), + 108: uint16(23187), + 109: uint16(23197), + 110: uint16(23530), + 111: uint16(23501), + 112: uint16(23499), + 113: uint16(23508), + 114: uint16(23505), + 115: uint16(23498), + 116: uint16(23502), + 117: uint16(23564), + 118: uint16(23600), + 119: uint16(23863), + 120: uint16(23875), + 121: uint16(23915), + 122: uint16(23873), + 123: uint16(23883), + 124: uint16(23871), + 125: uint16(23861), + 126: uint16(23889), + 127: uint16(23886), + 128: uint16(23893), + 129: uint16(23859), + 130: uint16(23866), + 131: uint16(23890), + 132: uint16(23869), + 133: uint16(23857), + 134: uint16(23897), + 135: uint16(23874), + 136: uint16(23865), + 137: uint16(23881), + 138: uint16(23864), + 139: uint16(23868), + 140: uint16(23858), + 141: uint16(23862), + 142: uint16(23872), + 143: uint16(23877), + 144: uint16(24132), + 145: uint16(24129), + 146: uint16(24408), + 147: uint16(24486), + 148: uint16(24485), + 149: uint16(24491), + 150: uint16(24777), + 151: uint16(24761), + 152: uint16(24780), + 153: uint16(24802), + 154: uint16(24782), + 155: uint16(24772), + 156: uint16(24852), + }, + 56: { + 0: uint16(24818), + 1: uint16(24842), + 2: uint16(24854), + 3: uint16(24837), + 4: uint16(24821), + 5: uint16(24851), + 6: uint16(24824), + 7: uint16(24828), + 8: uint16(24830), + 9: uint16(24769), + 10: uint16(24835), + 11: uint16(24856), + 12: uint16(24861), + 13: uint16(24848), + 14: uint16(24831), + 15: uint16(24836), + 16: uint16(24843), + 17: uint16(25162), + 18: uint16(25492), + 19: uint16(25521), + 20: uint16(25520), + 21: uint16(25550), + 22: uint16(25573), + 23: uint16(25576), + 24: uint16(25583), + 25: uint16(25539), + 26: uint16(25757), + 27: uint16(25587), + 28: uint16(25546), + 29: uint16(25568), + 30: uint16(25590), + 31: uint16(25557), + 32: uint16(25586), + 33: uint16(25589), + 34: uint16(25697), + 35: uint16(25567), + 36: uint16(25534), + 37: uint16(25565), + 38: uint16(25564), + 39: uint16(25540), + 40: uint16(25560), + 41: uint16(25555), + 42: uint16(25538), + 43: uint16(25543), + 44: uint16(25548), + 45: uint16(25547), + 46: uint16(25544), + 47: uint16(25584), + 48: uint16(25559), + 49: uint16(25561), + 50: uint16(25906), + 51: uint16(25959), + 52: uint16(25962), + 53: uint16(25956), + 54: uint16(25948), + 55: uint16(25960), + 56: uint16(25957), + 57: uint16(25996), + 58: uint16(26013), + 59: uint16(26014), + 60: uint16(26030), + 61: uint16(26064), + 62: uint16(26066), + 63: uint16(26236), + 64: uint16(26220), + 65: uint16(26235), + 66: uint16(26240), + 67: uint16(26225), + 68: uint16(26233), + 69: uint16(26218), + 70: uint16(26226), + 71: uint16(26369), + 72: uint16(26892), + 73: uint16(26835), + 74: uint16(26884), + 75: uint16(26844), + 76: uint16(26922), + 77: uint16(26860), + 78: uint16(26858), + 79: uint16(26865), + 80: uint16(26895), + 81: uint16(26838), + 82: uint16(26871), + 83: uint16(26859), + 84: uint16(26852), + 85: uint16(26870), + 86: uint16(26899), + 87: uint16(26896), + 88: uint16(26867), + 89: uint16(26849), + 90: uint16(26887), + 91: uint16(26828), + 92: uint16(26888), + 93: uint16(26992), + 94: uint16(26804), + 95: uint16(26897), + 96: uint16(26863), + 97: uint16(26822), + 98: uint16(26900), + 99: uint16(26872), + 100: uint16(26832), + 101: uint16(26877), + 102: uint16(26876), + 103: uint16(26856), + 104: uint16(26891), + 105: uint16(26890), + 106: uint16(26903), + 107: uint16(26830), + 108: uint16(26824), + 109: uint16(26845), + 110: uint16(26846), + 111: uint16(26854), + 112: uint16(26868), + 113: uint16(26833), + 114: uint16(26886), + 115: uint16(26836), + 116: uint16(26857), + 117: uint16(26901), + 118: uint16(26917), + 119: uint16(26823), + 120: uint16(27449), + 121: uint16(27451), + 122: uint16(27455), + 123: uint16(27452), + 124: uint16(27540), + 125: uint16(27543), + 126: uint16(27545), + 127: uint16(27541), + 128: uint16(27581), + 129: uint16(27632), + 130: uint16(27634), + 131: uint16(27635), + 132: uint16(27696), + 133: uint16(28156), + 134: uint16(28230), + 135: uint16(28231), + 136: uint16(28191), + 137: uint16(28233), + 138: uint16(28296), + 139: uint16(28220), + 140: uint16(28221), + 141: uint16(28229), + 142: uint16(28258), + 143: uint16(28203), + 144: uint16(28223), + 145: uint16(28225), + 146: uint16(28253), + 147: uint16(28275), + 148: uint16(28188), + 149: uint16(28211), + 150: uint16(28235), + 151: uint16(28224), + 152: uint16(28241), + 153: uint16(28219), + 154: uint16(28163), + 155: uint16(28206), + 156: uint16(28254), + }, + 57: { + 0: uint16(28264), + 1: uint16(28252), + 2: uint16(28257), + 3: uint16(28209), + 4: uint16(28200), + 5: uint16(28256), + 6: uint16(28273), + 7: uint16(28267), + 8: uint16(28217), + 9: uint16(28194), + 10: uint16(28208), + 11: uint16(28243), + 12: uint16(28261), + 13: uint16(28199), + 14: uint16(28280), + 15: uint16(28260), + 16: uint16(28279), + 17: uint16(28245), + 18: uint16(28281), + 19: uint16(28242), + 20: uint16(28262), + 21: uint16(28213), + 22: uint16(28214), + 23: uint16(28250), + 24: uint16(28960), + 25: uint16(28958), + 26: uint16(28975), + 27: uint16(28923), + 28: uint16(28974), + 29: uint16(28977), + 30: uint16(28963), + 31: uint16(28965), + 32: uint16(28962), + 33: uint16(28978), + 34: uint16(28959), + 35: uint16(28968), + 36: uint16(28986), + 37: uint16(28955), + 38: uint16(29259), + 39: uint16(29274), + 40: uint16(29320), + 41: uint16(29321), + 42: uint16(29318), + 43: uint16(29317), + 44: uint16(29323), + 45: uint16(29458), + 46: uint16(29451), + 47: uint16(29488), + 48: uint16(29474), + 49: uint16(29489), + 50: uint16(29491), + 51: uint16(29479), + 52: uint16(29490), + 53: uint16(29485), + 54: uint16(29478), + 55: uint16(29475), + 56: uint16(29493), + 57: uint16(29452), + 58: uint16(29742), + 59: uint16(29740), + 60: uint16(29744), + 61: uint16(29739), + 62: uint16(29718), + 63: uint16(29722), + 64: uint16(29729), + 65: uint16(29741), + 66: uint16(29745), + 67: uint16(29732), + 68: uint16(29731), + 69: uint16(29725), + 70: uint16(29737), + 71: uint16(29728), + 72: uint16(29746), + 73: uint16(29947), + 74: uint16(29999), + 75: uint16(30063), + 76: uint16(30060), + 77: uint16(30183), + 78: uint16(30170), + 79: uint16(30177), + 80: uint16(30182), + 81: uint16(30173), + 82: uint16(30175), + 83: uint16(30180), + 84: uint16(30167), + 85: uint16(30357), + 86: uint16(30354), + 87: uint16(30426), + 88: uint16(30534), + 89: uint16(30535), + 90: uint16(30532), + 91: uint16(30541), + 92: uint16(30533), + 93: uint16(30538), + 94: uint16(30542), + 95: uint16(30539), + 96: uint16(30540), + 97: uint16(30686), + 98: uint16(30700), + 99: uint16(30816), + 100: uint16(30820), + 101: uint16(30821), + 102: uint16(30812), + 103: uint16(30829), + 104: uint16(30833), + 105: uint16(30826), + 106: uint16(30830), + 107: uint16(30832), + 108: uint16(30825), + 109: uint16(30824), + 110: uint16(30814), + 111: uint16(30818), + 112: uint16(31092), + 113: uint16(31091), + 114: uint16(31090), + 115: uint16(31088), + 116: uint16(31234), + 117: uint16(31242), + 118: uint16(31235), + 119: uint16(31244), + 120: uint16(31236), + 121: uint16(31385), + 122: uint16(31462), + 123: uint16(31460), + 124: uint16(31562), + 125: uint16(31547), + 126: uint16(31556), + 127: uint16(31560), + 128: uint16(31564), + 129: uint16(31566), + 130: uint16(31552), + 131: uint16(31576), + 132: uint16(31557), + 133: uint16(31906), + 134: uint16(31902), + 135: uint16(31912), + 136: uint16(31905), + 137: uint16(32088), + 138: uint16(32111), + 139: uint16(32099), + 140: uint16(32083), + 141: uint16(32086), + 142: uint16(32103), + 143: uint16(32106), + 144: uint16(32079), + 145: uint16(32109), + 146: uint16(32092), + 147: uint16(32107), + 148: uint16(32082), + 149: uint16(32084), + 150: uint16(32105), + 151: uint16(32081), + 152: uint16(32095), + 153: uint16(32078), + 154: uint16(32574), + 155: uint16(32575), + 156: uint16(32613), + }, + 58: { + 0: uint16(32614), + 1: uint16(32674), + 2: uint16(32672), + 3: uint16(32673), + 4: uint16(32727), + 5: uint16(32849), + 6: uint16(32847), + 7: uint16(32848), + 8: uint16(33022), + 9: uint16(32980), + 10: uint16(33091), + 11: uint16(33098), + 12: uint16(33106), + 13: uint16(33103), + 14: uint16(33095), + 15: uint16(33085), + 16: uint16(33101), + 17: uint16(33082), + 18: uint16(33254), + 19: uint16(33262), + 20: uint16(33271), + 21: uint16(33272), + 22: uint16(33273), + 23: uint16(33284), + 24: uint16(33340), + 25: uint16(33341), + 26: uint16(33343), + 27: uint16(33397), + 28: uint16(33595), + 29: uint16(33743), + 30: uint16(33785), + 31: uint16(33827), + 32: uint16(33728), + 33: uint16(33768), + 34: uint16(33810), + 35: uint16(33767), + 36: uint16(33764), + 37: uint16(33788), + 38: uint16(33782), + 39: uint16(33808), + 40: uint16(33734), + 41: uint16(33736), + 42: uint16(33771), + 43: uint16(33763), + 44: uint16(33727), + 45: uint16(33793), + 46: uint16(33757), + 47: uint16(33765), + 48: uint16(33752), + 49: uint16(33791), + 50: uint16(33761), + 51: uint16(33739), + 52: uint16(33742), + 53: uint16(33750), + 54: uint16(33781), + 55: uint16(33737), + 56: uint16(33801), + 57: uint16(33807), + 58: uint16(33758), + 59: uint16(33809), + 60: uint16(33798), + 61: uint16(33730), + 62: uint16(33779), + 63: uint16(33749), + 64: uint16(33786), + 65: uint16(33735), + 66: uint16(33745), + 67: uint16(33770), + 68: uint16(33811), + 69: uint16(33731), + 70: uint16(33772), + 71: uint16(33774), + 72: uint16(33732), + 73: uint16(33787), + 74: uint16(33751), + 75: uint16(33762), + 76: uint16(33819), + 77: uint16(33755), + 78: uint16(33790), + 79: uint16(34520), + 80: uint16(34530), + 81: uint16(34534), + 82: uint16(34515), + 83: uint16(34531), + 84: uint16(34522), + 85: uint16(34538), + 86: uint16(34525), + 87: uint16(34539), + 88: uint16(34524), + 89: uint16(34540), + 90: uint16(34537), + 91: uint16(34519), + 92: uint16(34536), + 93: uint16(34513), + 94: uint16(34888), + 95: uint16(34902), + 96: uint16(34901), + 97: uint16(35002), + 98: uint16(35031), + 99: uint16(35001), + 100: uint16(35000), + 101: uint16(35008), + 102: uint16(35006), + 103: uint16(34998), + 104: uint16(35004), + 105: uint16(34999), + 106: uint16(35005), + 107: uint16(34994), + 108: uint16(35073), + 109: uint16(35017), + 110: uint16(35221), + 111: uint16(35224), + 112: uint16(35223), + 113: uint16(35293), + 114: uint16(35290), + 115: uint16(35291), + 116: uint16(35406), + 117: uint16(35405), + 118: uint16(35385), + 119: uint16(35417), + 120: uint16(35392), + 121: uint16(35415), + 122: uint16(35416), + 123: uint16(35396), + 124: uint16(35397), + 125: uint16(35410), + 126: uint16(35400), + 127: uint16(35409), + 128: uint16(35402), + 129: uint16(35404), + 130: uint16(35407), + 131: uint16(35935), + 132: uint16(35969), + 133: uint16(35968), + 134: uint16(36026), + 135: uint16(36030), + 136: uint16(36016), + 137: uint16(36025), + 138: uint16(36021), + 139: uint16(36228), + 140: uint16(36224), + 141: uint16(36233), + 142: uint16(36312), + 143: uint16(36307), + 144: uint16(36301), + 145: uint16(36295), + 146: uint16(36310), + 147: uint16(36316), + 148: uint16(36303), + 149: uint16(36309), + 150: uint16(36313), + 151: uint16(36296), + 152: uint16(36311), + 153: uint16(36293), + 154: uint16(36591), + 155: uint16(36599), + 156: uint16(36602), + }, + 59: { + 0: uint16(36601), + 1: uint16(36582), + 2: uint16(36590), + 3: uint16(36581), + 4: uint16(36597), + 5: uint16(36583), + 6: uint16(36584), + 7: uint16(36598), + 8: uint16(36587), + 9: uint16(36593), + 10: uint16(36588), + 11: uint16(36596), + 12: uint16(36585), + 13: uint16(36909), + 14: uint16(36916), + 15: uint16(36911), + 16: uint16(37126), + 17: uint16(37164), + 18: uint16(37124), + 19: uint16(37119), + 20: uint16(37116), + 21: uint16(37128), + 22: uint16(37113), + 23: uint16(37115), + 24: uint16(37121), + 25: uint16(37120), + 26: uint16(37127), + 27: uint16(37125), + 28: uint16(37123), + 29: uint16(37217), + 30: uint16(37220), + 31: uint16(37215), + 32: uint16(37218), + 33: uint16(37216), + 34: uint16(37377), + 35: uint16(37386), + 36: uint16(37413), + 37: uint16(37379), + 38: uint16(37402), + 39: uint16(37414), + 40: uint16(37391), + 41: uint16(37388), + 42: uint16(37376), + 43: uint16(37394), + 44: uint16(37375), + 45: uint16(37373), + 46: uint16(37382), + 47: uint16(37380), + 48: uint16(37415), + 49: uint16(37378), + 50: uint16(37404), + 51: uint16(37412), + 52: uint16(37401), + 53: uint16(37399), + 54: uint16(37381), + 55: uint16(37398), + 56: uint16(38267), + 57: uint16(38285), + 58: uint16(38284), + 59: uint16(38288), + 60: uint16(38535), + 61: uint16(38526), + 62: uint16(38536), + 63: uint16(38537), + 64: uint16(38531), + 65: uint16(38528), + 66: uint16(38594), + 67: uint16(38600), + 68: uint16(38595), + 69: uint16(38641), + 70: uint16(38640), + 71: uint16(38764), + 72: uint16(38768), + 73: uint16(38766), + 74: uint16(38919), + 75: uint16(39081), + 76: uint16(39147), + 77: uint16(40166), + 78: uint16(40697), + 79: uint16(20099), + 80: uint16(20100), + 81: uint16(20150), + 82: uint16(20669), + 83: uint16(20671), + 84: uint16(20678), + 85: uint16(20654), + 86: uint16(20676), + 87: uint16(20682), + 88: uint16(20660), + 89: uint16(20680), + 90: uint16(20674), + 91: uint16(20656), + 92: uint16(20673), + 93: uint16(20666), + 94: uint16(20657), + 95: uint16(20683), + 96: uint16(20681), + 97: uint16(20662), + 98: uint16(20664), + 99: uint16(20951), + 100: uint16(21114), + 101: uint16(21112), + 102: uint16(21115), + 103: uint16(21116), + 104: uint16(21955), + 105: uint16(21979), + 106: uint16(21964), + 107: uint16(21968), + 108: uint16(21963), + 109: uint16(21962), + 110: uint16(21981), + 111: uint16(21952), + 112: uint16(21972), + 113: uint16(21956), + 114: uint16(21993), + 115: uint16(21951), + 116: uint16(21970), + 117: uint16(21901), + 118: uint16(21967), + 119: uint16(21973), + 120: uint16(21986), + 121: uint16(21974), + 122: uint16(21960), + 123: uint16(22002), + 124: uint16(21965), + 125: uint16(21977), + 126: uint16(21954), + 127: uint16(22292), + 128: uint16(22611), + 129: uint16(22632), + 130: uint16(22628), + 131: uint16(22607), + 132: uint16(22605), + 133: uint16(22601), + 134: uint16(22639), + 135: uint16(22613), + 136: uint16(22606), + 137: uint16(22621), + 138: uint16(22617), + 139: uint16(22629), + 140: uint16(22619), + 141: uint16(22589), + 142: uint16(22627), + 143: uint16(22641), + 144: uint16(22780), + 145: uint16(23239), + 146: uint16(23236), + 147: uint16(23243), + 148: uint16(23226), + 149: uint16(23224), + 150: uint16(23217), + 151: uint16(23221), + 152: uint16(23216), + 153: uint16(23231), + 154: uint16(23240), + 155: uint16(23227), + 156: uint16(23238), + }, + 60: { + 0: uint16(23223), + 1: uint16(23232), + 2: uint16(23242), + 3: uint16(23220), + 4: uint16(23222), + 5: uint16(23245), + 6: uint16(23225), + 7: uint16(23184), + 8: uint16(23510), + 9: uint16(23512), + 10: uint16(23513), + 11: uint16(23583), + 12: uint16(23603), + 13: uint16(23921), + 14: uint16(23907), + 15: uint16(23882), + 16: uint16(23909), + 17: uint16(23922), + 18: uint16(23916), + 19: uint16(23902), + 20: uint16(23912), + 21: uint16(23911), + 22: uint16(23906), + 23: uint16(24048), + 24: uint16(24143), + 25: uint16(24142), + 26: uint16(24138), + 27: uint16(24141), + 28: uint16(24139), + 29: uint16(24261), + 30: uint16(24268), + 31: uint16(24262), + 32: uint16(24267), + 33: uint16(24263), + 34: uint16(24384), + 35: uint16(24495), + 36: uint16(24493), + 37: uint16(24823), + 38: uint16(24905), + 39: uint16(24906), + 40: uint16(24875), + 41: uint16(24901), + 42: uint16(24886), + 43: uint16(24882), + 44: uint16(24878), + 45: uint16(24902), + 46: uint16(24879), + 47: uint16(24911), + 48: uint16(24873), + 49: uint16(24896), + 50: uint16(25120), + 51: uint16(37224), + 52: uint16(25123), + 53: uint16(25125), + 54: uint16(25124), + 55: uint16(25541), + 56: uint16(25585), + 57: uint16(25579), + 58: uint16(25616), + 59: uint16(25618), + 60: uint16(25609), + 61: uint16(25632), + 62: uint16(25636), + 63: uint16(25651), + 64: uint16(25667), + 65: uint16(25631), + 66: uint16(25621), + 67: uint16(25624), + 68: uint16(25657), + 69: uint16(25655), + 70: uint16(25634), + 71: uint16(25635), + 72: uint16(25612), + 73: uint16(25638), + 74: uint16(25648), + 75: uint16(25640), + 76: uint16(25665), + 77: uint16(25653), + 78: uint16(25647), + 79: uint16(25610), + 80: uint16(25626), + 81: uint16(25664), + 82: uint16(25637), + 83: uint16(25639), + 84: uint16(25611), + 85: uint16(25575), + 86: uint16(25627), + 87: uint16(25646), + 88: uint16(25633), + 89: uint16(25614), + 90: uint16(25967), + 91: uint16(26002), + 92: uint16(26067), + 93: uint16(26246), + 94: uint16(26252), + 95: uint16(26261), + 96: uint16(26256), + 97: uint16(26251), + 98: uint16(26250), + 99: uint16(26265), + 100: uint16(26260), + 101: uint16(26232), + 102: uint16(26400), + 103: uint16(26982), + 104: uint16(26975), + 105: uint16(26936), + 106: uint16(26958), + 107: uint16(26978), + 108: uint16(26993), + 109: uint16(26943), + 110: uint16(26949), + 111: uint16(26986), + 112: uint16(26937), + 113: uint16(26946), + 114: uint16(26967), + 115: uint16(26969), + 116: uint16(27002), + 117: uint16(26952), + 118: uint16(26953), + 119: uint16(26933), + 120: uint16(26988), + 121: uint16(26931), + 122: uint16(26941), + 123: uint16(26981), + 124: uint16(26864), + 125: uint16(27000), + 126: uint16(26932), + 127: uint16(26985), + 128: uint16(26944), + 129: uint16(26991), + 130: uint16(26948), + 131: uint16(26998), + 132: uint16(26968), + 133: uint16(26945), + 134: uint16(26996), + 135: uint16(26956), + 136: uint16(26939), + 137: uint16(26955), + 138: uint16(26935), + 139: uint16(26972), + 140: uint16(26959), + 141: uint16(26961), + 142: uint16(26930), + 143: uint16(26962), + 144: uint16(26927), + 145: uint16(27003), + 146: uint16(26940), + 147: uint16(27462), + 148: uint16(27461), + 149: uint16(27459), + 150: uint16(27458), + 151: uint16(27464), + 152: uint16(27457), + 153: uint16(27547), + 154: uint16(64013), + 155: uint16(27643), + 156: uint16(27644), + }, + 61: { + 0: uint16(27641), + 1: uint16(27639), + 2: uint16(27640), + 3: uint16(28315), + 4: uint16(28374), + 5: uint16(28360), + 6: uint16(28303), + 7: uint16(28352), + 8: uint16(28319), + 9: uint16(28307), + 10: uint16(28308), + 11: uint16(28320), + 12: uint16(28337), + 13: uint16(28345), + 14: uint16(28358), + 15: uint16(28370), + 16: uint16(28349), + 17: uint16(28353), + 18: uint16(28318), + 19: uint16(28361), + 20: uint16(28343), + 21: uint16(28336), + 22: uint16(28365), + 23: uint16(28326), + 24: uint16(28367), + 25: uint16(28338), + 26: uint16(28350), + 27: uint16(28355), + 28: uint16(28380), + 29: uint16(28376), + 30: uint16(28313), + 31: uint16(28306), + 32: uint16(28302), + 33: uint16(28301), + 34: uint16(28324), + 35: uint16(28321), + 36: uint16(28351), + 37: uint16(28339), + 38: uint16(28368), + 39: uint16(28362), + 40: uint16(28311), + 41: uint16(28334), + 42: uint16(28323), + 43: uint16(28999), + 44: uint16(29012), + 45: uint16(29010), + 46: uint16(29027), + 47: uint16(29024), + 48: uint16(28993), + 49: uint16(29021), + 50: uint16(29026), + 51: uint16(29042), + 52: uint16(29048), + 53: uint16(29034), + 54: uint16(29025), + 55: uint16(28994), + 56: uint16(29016), + 57: uint16(28995), + 58: uint16(29003), + 59: uint16(29040), + 60: uint16(29023), + 61: uint16(29008), + 62: uint16(29011), + 63: uint16(28996), + 64: uint16(29005), + 65: uint16(29018), + 66: uint16(29263), + 67: uint16(29325), + 68: uint16(29324), + 69: uint16(29329), + 70: uint16(29328), + 71: uint16(29326), + 72: uint16(29500), + 73: uint16(29506), + 74: uint16(29499), + 75: uint16(29498), + 76: uint16(29504), + 77: uint16(29514), + 78: uint16(29513), + 79: uint16(29764), + 80: uint16(29770), + 81: uint16(29771), + 82: uint16(29778), + 83: uint16(29777), + 84: uint16(29783), + 85: uint16(29760), + 86: uint16(29775), + 87: uint16(29776), + 88: uint16(29774), + 89: uint16(29762), + 90: uint16(29766), + 91: uint16(29773), + 92: uint16(29780), + 93: uint16(29921), + 94: uint16(29951), + 95: uint16(29950), + 96: uint16(29949), + 97: uint16(29981), + 98: uint16(30073), + 99: uint16(30071), + 100: uint16(27011), + 101: uint16(30191), + 102: uint16(30223), + 103: uint16(30211), + 104: uint16(30199), + 105: uint16(30206), + 106: uint16(30204), + 107: uint16(30201), + 108: uint16(30200), + 109: uint16(30224), + 110: uint16(30203), + 111: uint16(30198), + 112: uint16(30189), + 113: uint16(30197), + 114: uint16(30205), + 115: uint16(30361), + 116: uint16(30389), + 117: uint16(30429), + 118: uint16(30549), + 119: uint16(30559), + 120: uint16(30560), + 121: uint16(30546), + 122: uint16(30550), + 123: uint16(30554), + 124: uint16(30569), + 125: uint16(30567), + 126: uint16(30548), + 127: uint16(30553), + 128: uint16(30573), + 129: uint16(30688), + 130: uint16(30855), + 131: uint16(30874), + 132: uint16(30868), + 133: uint16(30863), + 134: uint16(30852), + 135: uint16(30869), + 136: uint16(30853), + 137: uint16(30854), + 138: uint16(30881), + 139: uint16(30851), + 140: uint16(30841), + 141: uint16(30873), + 142: uint16(30848), + 143: uint16(30870), + 144: uint16(30843), + 145: uint16(31100), + 146: uint16(31106), + 147: uint16(31101), + 148: uint16(31097), + 149: uint16(31249), + 150: uint16(31256), + 151: uint16(31257), + 152: uint16(31250), + 153: uint16(31255), + 154: uint16(31253), + 155: uint16(31266), + 156: uint16(31251), + }, + 62: { + 0: uint16(31259), + 1: uint16(31248), + 2: uint16(31395), + 3: uint16(31394), + 4: uint16(31390), + 5: uint16(31467), + 6: uint16(31590), + 7: uint16(31588), + 8: uint16(31597), + 9: uint16(31604), + 10: uint16(31593), + 11: uint16(31602), + 12: uint16(31589), + 13: uint16(31603), + 14: uint16(31601), + 15: uint16(31600), + 16: uint16(31585), + 17: uint16(31608), + 18: uint16(31606), + 19: uint16(31587), + 20: uint16(31922), + 21: uint16(31924), + 22: uint16(31919), + 23: uint16(32136), + 24: uint16(32134), + 25: uint16(32128), + 26: uint16(32141), + 27: uint16(32127), + 28: uint16(32133), + 29: uint16(32122), + 30: uint16(32142), + 31: uint16(32123), + 32: uint16(32131), + 33: uint16(32124), + 34: uint16(32140), + 35: uint16(32148), + 36: uint16(32132), + 37: uint16(32125), + 38: uint16(32146), + 39: uint16(32621), + 40: uint16(32619), + 41: uint16(32615), + 42: uint16(32616), + 43: uint16(32620), + 44: uint16(32678), + 45: uint16(32677), + 46: uint16(32679), + 47: uint16(32731), + 48: uint16(32732), + 49: uint16(32801), + 50: uint16(33124), + 51: uint16(33120), + 52: uint16(33143), + 53: uint16(33116), + 54: uint16(33129), + 55: uint16(33115), + 56: uint16(33122), + 57: uint16(33138), + 58: uint16(26401), + 59: uint16(33118), + 60: uint16(33142), + 61: uint16(33127), + 62: uint16(33135), + 63: uint16(33092), + 64: uint16(33121), + 65: uint16(33309), + 66: uint16(33353), + 67: uint16(33348), + 68: uint16(33344), + 69: uint16(33346), + 70: uint16(33349), + 71: uint16(34033), + 72: uint16(33855), + 73: uint16(33878), + 74: uint16(33910), + 75: uint16(33913), + 76: uint16(33935), + 77: uint16(33933), + 78: uint16(33893), + 79: uint16(33873), + 80: uint16(33856), + 81: uint16(33926), + 82: uint16(33895), + 83: uint16(33840), + 84: uint16(33869), + 85: uint16(33917), + 86: uint16(33882), + 87: uint16(33881), + 88: uint16(33908), + 89: uint16(33907), + 90: uint16(33885), + 91: uint16(34055), + 92: uint16(33886), + 93: uint16(33847), + 94: uint16(33850), + 95: uint16(33844), + 96: uint16(33914), + 97: uint16(33859), + 98: uint16(33912), + 99: uint16(33842), + 100: uint16(33861), + 101: uint16(33833), + 102: uint16(33753), + 103: uint16(33867), + 104: uint16(33839), + 105: uint16(33858), + 106: uint16(33837), + 107: uint16(33887), + 108: uint16(33904), + 109: uint16(33849), + 110: uint16(33870), + 111: uint16(33868), + 112: uint16(33874), + 113: uint16(33903), + 114: uint16(33989), + 115: uint16(33934), + 116: uint16(33851), + 117: uint16(33863), + 118: uint16(33846), + 119: uint16(33843), + 120: uint16(33896), + 121: uint16(33918), + 122: uint16(33860), + 123: uint16(33835), + 124: uint16(33888), + 125: uint16(33876), + 126: uint16(33902), + 127: uint16(33872), + 128: uint16(34571), + 129: uint16(34564), + 130: uint16(34551), + 131: uint16(34572), + 132: uint16(34554), + 133: uint16(34518), + 134: uint16(34549), + 135: uint16(34637), + 136: uint16(34552), + 137: uint16(34574), + 138: uint16(34569), + 139: uint16(34561), + 140: uint16(34550), + 141: uint16(34573), + 142: uint16(34565), + 143: uint16(35030), + 144: uint16(35019), + 145: uint16(35021), + 146: uint16(35022), + 147: uint16(35038), + 148: uint16(35035), + 149: uint16(35034), + 150: uint16(35020), + 151: uint16(35024), + 152: uint16(35205), + 153: uint16(35227), + 154: uint16(35295), + 155: uint16(35301), + 156: uint16(35300), + }, + 63: { + 0: uint16(35297), + 1: uint16(35296), + 2: uint16(35298), + 3: uint16(35292), + 4: uint16(35302), + 5: uint16(35446), + 6: uint16(35462), + 7: uint16(35455), + 8: uint16(35425), + 9: uint16(35391), + 10: uint16(35447), + 11: uint16(35458), + 12: uint16(35460), + 13: uint16(35445), + 14: uint16(35459), + 15: uint16(35457), + 16: uint16(35444), + 17: uint16(35450), + 18: uint16(35900), + 19: uint16(35915), + 20: uint16(35914), + 21: uint16(35941), + 22: uint16(35940), + 23: uint16(35942), + 24: uint16(35974), + 25: uint16(35972), + 26: uint16(35973), + 27: uint16(36044), + 28: uint16(36200), + 29: uint16(36201), + 30: uint16(36241), + 31: uint16(36236), + 32: uint16(36238), + 33: uint16(36239), + 34: uint16(36237), + 35: uint16(36243), + 36: uint16(36244), + 37: uint16(36240), + 38: uint16(36242), + 39: uint16(36336), + 40: uint16(36320), + 41: uint16(36332), + 42: uint16(36337), + 43: uint16(36334), + 44: uint16(36304), + 45: uint16(36329), + 46: uint16(36323), + 47: uint16(36322), + 48: uint16(36327), + 49: uint16(36338), + 50: uint16(36331), + 51: uint16(36340), + 52: uint16(36614), + 53: uint16(36607), + 54: uint16(36609), + 55: uint16(36608), + 56: uint16(36613), + 57: uint16(36615), + 58: uint16(36616), + 59: uint16(36610), + 60: uint16(36619), + 61: uint16(36946), + 62: uint16(36927), + 63: uint16(36932), + 64: uint16(36937), + 65: uint16(36925), + 66: uint16(37136), + 67: uint16(37133), + 68: uint16(37135), + 69: uint16(37137), + 70: uint16(37142), + 71: uint16(37140), + 72: uint16(37131), + 73: uint16(37134), + 74: uint16(37230), + 75: uint16(37231), + 76: uint16(37448), + 77: uint16(37458), + 78: uint16(37424), + 79: uint16(37434), + 80: uint16(37478), + 81: uint16(37427), + 82: uint16(37477), + 83: uint16(37470), + 84: uint16(37507), + 85: uint16(37422), + 86: uint16(37450), + 87: uint16(37446), + 88: uint16(37485), + 89: uint16(37484), + 90: uint16(37455), + 91: uint16(37472), + 92: uint16(37479), + 93: uint16(37487), + 94: uint16(37430), + 95: uint16(37473), + 96: uint16(37488), + 97: uint16(37425), + 98: uint16(37460), + 99: uint16(37475), + 100: uint16(37456), + 101: uint16(37490), + 102: uint16(37454), + 103: uint16(37459), + 104: uint16(37452), + 105: uint16(37462), + 106: uint16(37426), + 107: uint16(38303), + 108: uint16(38300), + 109: uint16(38302), + 110: uint16(38299), + 111: uint16(38546), + 112: uint16(38547), + 113: uint16(38545), + 114: uint16(38551), + 115: uint16(38606), + 116: uint16(38650), + 117: uint16(38653), + 118: uint16(38648), + 119: uint16(38645), + 120: uint16(38771), + 121: uint16(38775), + 122: uint16(38776), + 123: uint16(38770), + 124: uint16(38927), + 125: uint16(38925), + 126: uint16(38926), + 127: uint16(39084), + 128: uint16(39158), + 129: uint16(39161), + 130: uint16(39343), + 131: uint16(39346), + 132: uint16(39344), + 133: uint16(39349), + 134: uint16(39597), + 135: uint16(39595), + 136: uint16(39771), + 137: uint16(40170), + 138: uint16(40173), + 139: uint16(40167), + 140: uint16(40576), + 141: uint16(40701), + 142: uint16(20710), + 143: uint16(20692), + 144: uint16(20695), + 145: uint16(20712), + 146: uint16(20723), + 147: uint16(20699), + 148: uint16(20714), + 149: uint16(20701), + 150: uint16(20708), + 151: uint16(20691), + 152: uint16(20716), + 153: uint16(20720), + 154: uint16(20719), + 155: uint16(20707), + 156: uint16(20704), + }, + 64: { + 0: uint16(20952), + 1: uint16(21120), + 2: uint16(21121), + 3: uint16(21225), + 4: uint16(21227), + 5: uint16(21296), + 6: uint16(21420), + 7: uint16(22055), + 8: uint16(22037), + 9: uint16(22028), + 10: uint16(22034), + 11: uint16(22012), + 12: uint16(22031), + 13: uint16(22044), + 14: uint16(22017), + 15: uint16(22035), + 16: uint16(22018), + 17: uint16(22010), + 18: uint16(22045), + 19: uint16(22020), + 20: uint16(22015), + 21: uint16(22009), + 22: uint16(22665), + 23: uint16(22652), + 24: uint16(22672), + 25: uint16(22680), + 26: uint16(22662), + 27: uint16(22657), + 28: uint16(22655), + 29: uint16(22644), + 30: uint16(22667), + 31: uint16(22650), + 32: uint16(22663), + 33: uint16(22673), + 34: uint16(22670), + 35: uint16(22646), + 36: uint16(22658), + 37: uint16(22664), + 38: uint16(22651), + 39: uint16(22676), + 40: uint16(22671), + 41: uint16(22782), + 42: uint16(22891), + 43: uint16(23260), + 44: uint16(23278), + 45: uint16(23269), + 46: uint16(23253), + 47: uint16(23274), + 48: uint16(23258), + 49: uint16(23277), + 50: uint16(23275), + 51: uint16(23283), + 52: uint16(23266), + 53: uint16(23264), + 54: uint16(23259), + 55: uint16(23276), + 56: uint16(23262), + 57: uint16(23261), + 58: uint16(23257), + 59: uint16(23272), + 60: uint16(23263), + 61: uint16(23415), + 62: uint16(23520), + 63: uint16(23523), + 64: uint16(23651), + 65: uint16(23938), + 66: uint16(23936), + 67: uint16(23933), + 68: uint16(23942), + 69: uint16(23930), + 70: uint16(23937), + 71: uint16(23927), + 72: uint16(23946), + 73: uint16(23945), + 74: uint16(23944), + 75: uint16(23934), + 76: uint16(23932), + 77: uint16(23949), + 78: uint16(23929), + 79: uint16(23935), + 80: uint16(24152), + 81: uint16(24153), + 82: uint16(24147), + 83: uint16(24280), + 84: uint16(24273), + 85: uint16(24279), + 86: uint16(24270), + 87: uint16(24284), + 88: uint16(24277), + 89: uint16(24281), + 90: uint16(24274), + 91: uint16(24276), + 92: uint16(24388), + 93: uint16(24387), + 94: uint16(24431), + 95: uint16(24502), + 96: uint16(24876), + 97: uint16(24872), + 98: uint16(24897), + 99: uint16(24926), + 100: uint16(24945), + 101: uint16(24947), + 102: uint16(24914), + 103: uint16(24915), + 104: uint16(24946), + 105: uint16(24940), + 106: uint16(24960), + 107: uint16(24948), + 108: uint16(24916), + 109: uint16(24954), + 110: uint16(24923), + 111: uint16(24933), + 112: uint16(24891), + 113: uint16(24938), + 114: uint16(24929), + 115: uint16(24918), + 116: uint16(25129), + 117: uint16(25127), + 118: uint16(25131), + 119: uint16(25643), + 120: uint16(25677), + 121: uint16(25691), + 122: uint16(25693), + 123: uint16(25716), + 124: uint16(25718), + 125: uint16(25714), + 126: uint16(25715), + 127: uint16(25725), + 128: uint16(25717), + 129: uint16(25702), + 130: uint16(25766), + 131: uint16(25678), + 132: uint16(25730), + 133: uint16(25694), + 134: uint16(25692), + 135: uint16(25675), + 136: uint16(25683), + 137: uint16(25696), + 138: uint16(25680), + 139: uint16(25727), + 140: uint16(25663), + 141: uint16(25708), + 142: uint16(25707), + 143: uint16(25689), + 144: uint16(25701), + 145: uint16(25719), + 146: uint16(25971), + 147: uint16(26016), + 148: uint16(26273), + 149: uint16(26272), + 150: uint16(26271), + 151: uint16(26373), + 152: uint16(26372), + 153: uint16(26402), + 154: uint16(27057), + 155: uint16(27062), + 156: uint16(27081), + }, + 65: { + 0: uint16(27040), + 1: uint16(27086), + 2: uint16(27030), + 3: uint16(27056), + 4: uint16(27052), + 5: uint16(27068), + 6: uint16(27025), + 7: uint16(27033), + 8: uint16(27022), + 9: uint16(27047), + 10: uint16(27021), + 11: uint16(27049), + 12: uint16(27070), + 13: uint16(27055), + 14: uint16(27071), + 15: uint16(27076), + 16: uint16(27069), + 17: uint16(27044), + 18: uint16(27092), + 19: uint16(27065), + 20: uint16(27082), + 21: uint16(27034), + 22: uint16(27087), + 23: uint16(27059), + 24: uint16(27027), + 25: uint16(27050), + 26: uint16(27041), + 27: uint16(27038), + 28: uint16(27097), + 29: uint16(27031), + 30: uint16(27024), + 31: uint16(27074), + 32: uint16(27061), + 33: uint16(27045), + 34: uint16(27078), + 35: uint16(27466), + 36: uint16(27469), + 37: uint16(27467), + 38: uint16(27550), + 39: uint16(27551), + 40: uint16(27552), + 41: uint16(27587), + 42: uint16(27588), + 43: uint16(27646), + 44: uint16(28366), + 45: uint16(28405), + 46: uint16(28401), + 47: uint16(28419), + 48: uint16(28453), + 49: uint16(28408), + 50: uint16(28471), + 51: uint16(28411), + 52: uint16(28462), + 53: uint16(28425), + 54: uint16(28494), + 55: uint16(28441), + 56: uint16(28442), + 57: uint16(28455), + 58: uint16(28440), + 59: uint16(28475), + 60: uint16(28434), + 61: uint16(28397), + 62: uint16(28426), + 63: uint16(28470), + 64: uint16(28531), + 65: uint16(28409), + 66: uint16(28398), + 67: uint16(28461), + 68: uint16(28480), + 69: uint16(28464), + 70: uint16(28476), + 71: uint16(28469), + 72: uint16(28395), + 73: uint16(28423), + 74: uint16(28430), + 75: uint16(28483), + 76: uint16(28421), + 77: uint16(28413), + 78: uint16(28406), + 79: uint16(28473), + 80: uint16(28444), + 81: uint16(28412), + 82: uint16(28474), + 83: uint16(28447), + 84: uint16(28429), + 85: uint16(28446), + 86: uint16(28424), + 87: uint16(28449), + 88: uint16(29063), + 89: uint16(29072), + 90: uint16(29065), + 91: uint16(29056), + 92: uint16(29061), + 93: uint16(29058), + 94: uint16(29071), + 95: uint16(29051), + 96: uint16(29062), + 97: uint16(29057), + 98: uint16(29079), + 99: uint16(29252), + 100: uint16(29267), + 101: uint16(29335), + 102: uint16(29333), + 103: uint16(29331), + 104: uint16(29507), + 105: uint16(29517), + 106: uint16(29521), + 107: uint16(29516), + 108: uint16(29794), + 109: uint16(29811), + 110: uint16(29809), + 111: uint16(29813), + 112: uint16(29810), + 113: uint16(29799), + 114: uint16(29806), + 115: uint16(29952), + 116: uint16(29954), + 117: uint16(29955), + 118: uint16(30077), + 119: uint16(30096), + 120: uint16(30230), + 121: uint16(30216), + 122: uint16(30220), + 123: uint16(30229), + 124: uint16(30225), + 125: uint16(30218), + 126: uint16(30228), + 127: uint16(30392), + 128: uint16(30593), + 129: uint16(30588), + 130: uint16(30597), + 131: uint16(30594), + 132: uint16(30574), + 133: uint16(30592), + 134: uint16(30575), + 135: uint16(30590), + 136: uint16(30595), + 137: uint16(30898), + 138: uint16(30890), + 139: uint16(30900), + 140: uint16(30893), + 141: uint16(30888), + 142: uint16(30846), + 143: uint16(30891), + 144: uint16(30878), + 145: uint16(30885), + 146: uint16(30880), + 147: uint16(30892), + 148: uint16(30882), + 149: uint16(30884), + 150: uint16(31128), + 151: uint16(31114), + 152: uint16(31115), + 153: uint16(31126), + 154: uint16(31125), + 155: uint16(31124), + 156: uint16(31123), + }, + 66: { + 0: uint16(31127), + 1: uint16(31112), + 2: uint16(31122), + 3: uint16(31120), + 4: uint16(31275), + 5: uint16(31306), + 6: uint16(31280), + 7: uint16(31279), + 8: uint16(31272), + 9: uint16(31270), + 10: uint16(31400), + 11: uint16(31403), + 12: uint16(31404), + 13: uint16(31470), + 14: uint16(31624), + 15: uint16(31644), + 16: uint16(31626), + 17: uint16(31633), + 18: uint16(31632), + 19: uint16(31638), + 20: uint16(31629), + 21: uint16(31628), + 22: uint16(31643), + 23: uint16(31630), + 24: uint16(31621), + 25: uint16(31640), + 26: uint16(21124), + 27: uint16(31641), + 28: uint16(31652), + 29: uint16(31618), + 30: uint16(31931), + 31: uint16(31935), + 32: uint16(31932), + 33: uint16(31930), + 34: uint16(32167), + 35: uint16(32183), + 36: uint16(32194), + 37: uint16(32163), + 38: uint16(32170), + 39: uint16(32193), + 40: uint16(32192), + 41: uint16(32197), + 42: uint16(32157), + 43: uint16(32206), + 44: uint16(32196), + 45: uint16(32198), + 46: uint16(32203), + 47: uint16(32204), + 48: uint16(32175), + 49: uint16(32185), + 50: uint16(32150), + 51: uint16(32188), + 52: uint16(32159), + 53: uint16(32166), + 54: uint16(32174), + 55: uint16(32169), + 56: uint16(32161), + 57: uint16(32201), + 58: uint16(32627), + 59: uint16(32738), + 60: uint16(32739), + 61: uint16(32741), + 62: uint16(32734), + 63: uint16(32804), + 64: uint16(32861), + 65: uint16(32860), + 66: uint16(33161), + 67: uint16(33158), + 68: uint16(33155), + 69: uint16(33159), + 70: uint16(33165), + 71: uint16(33164), + 72: uint16(33163), + 73: uint16(33301), + 74: uint16(33943), + 75: uint16(33956), + 76: uint16(33953), + 77: uint16(33951), + 78: uint16(33978), + 79: uint16(33998), + 80: uint16(33986), + 81: uint16(33964), + 82: uint16(33966), + 83: uint16(33963), + 84: uint16(33977), + 85: uint16(33972), + 86: uint16(33985), + 87: uint16(33997), + 88: uint16(33962), + 89: uint16(33946), + 90: uint16(33969), + 91: uint16(34000), + 92: uint16(33949), + 93: uint16(33959), + 94: uint16(33979), + 95: uint16(33954), + 96: uint16(33940), + 97: uint16(33991), + 98: uint16(33996), + 99: uint16(33947), + 100: uint16(33961), + 101: uint16(33967), + 102: uint16(33960), + 103: uint16(34006), + 104: uint16(33944), + 105: uint16(33974), + 106: uint16(33999), + 107: uint16(33952), + 108: uint16(34007), + 109: uint16(34004), + 110: uint16(34002), + 111: uint16(34011), + 112: uint16(33968), + 113: uint16(33937), + 114: uint16(34401), + 115: uint16(34611), + 116: uint16(34595), + 117: uint16(34600), + 118: uint16(34667), + 119: uint16(34624), + 120: uint16(34606), + 121: uint16(34590), + 122: uint16(34593), + 123: uint16(34585), + 124: uint16(34587), + 125: uint16(34627), + 126: uint16(34604), + 127: uint16(34625), + 128: uint16(34622), + 129: uint16(34630), + 130: uint16(34592), + 131: uint16(34610), + 132: uint16(34602), + 133: uint16(34605), + 134: uint16(34620), + 135: uint16(34578), + 136: uint16(34618), + 137: uint16(34609), + 138: uint16(34613), + 139: uint16(34626), + 140: uint16(34598), + 141: uint16(34599), + 142: uint16(34616), + 143: uint16(34596), + 144: uint16(34586), + 145: uint16(34608), + 146: uint16(34577), + 147: uint16(35063), + 148: uint16(35047), + 149: uint16(35057), + 150: uint16(35058), + 151: uint16(35066), + 152: uint16(35070), + 153: uint16(35054), + 154: uint16(35068), + 155: uint16(35062), + 156: uint16(35067), + }, + 67: { + 0: uint16(35056), + 1: uint16(35052), + 2: uint16(35051), + 3: uint16(35229), + 4: uint16(35233), + 5: uint16(35231), + 6: uint16(35230), + 7: uint16(35305), + 8: uint16(35307), + 9: uint16(35304), + 10: uint16(35499), + 11: uint16(35481), + 12: uint16(35467), + 13: uint16(35474), + 14: uint16(35471), + 15: uint16(35478), + 16: uint16(35901), + 17: uint16(35944), + 18: uint16(35945), + 19: uint16(36053), + 20: uint16(36047), + 21: uint16(36055), + 22: uint16(36246), + 23: uint16(36361), + 24: uint16(36354), + 25: uint16(36351), + 26: uint16(36365), + 27: uint16(36349), + 28: uint16(36362), + 29: uint16(36355), + 30: uint16(36359), + 31: uint16(36358), + 32: uint16(36357), + 33: uint16(36350), + 34: uint16(36352), + 35: uint16(36356), + 36: uint16(36624), + 37: uint16(36625), + 38: uint16(36622), + 39: uint16(36621), + 40: uint16(37155), + 41: uint16(37148), + 42: uint16(37152), + 43: uint16(37154), + 44: uint16(37151), + 45: uint16(37149), + 46: uint16(37146), + 47: uint16(37156), + 48: uint16(37153), + 49: uint16(37147), + 50: uint16(37242), + 51: uint16(37234), + 52: uint16(37241), + 53: uint16(37235), + 54: uint16(37541), + 55: uint16(37540), + 56: uint16(37494), + 57: uint16(37531), + 58: uint16(37498), + 59: uint16(37536), + 60: uint16(37524), + 61: uint16(37546), + 62: uint16(37517), + 63: uint16(37542), + 64: uint16(37530), + 65: uint16(37547), + 66: uint16(37497), + 67: uint16(37527), + 68: uint16(37503), + 69: uint16(37539), + 70: uint16(37614), + 71: uint16(37518), + 72: uint16(37506), + 73: uint16(37525), + 74: uint16(37538), + 75: uint16(37501), + 76: uint16(37512), + 77: uint16(37537), + 78: uint16(37514), + 79: uint16(37510), + 80: uint16(37516), + 81: uint16(37529), + 82: uint16(37543), + 83: uint16(37502), + 84: uint16(37511), + 85: uint16(37545), + 86: uint16(37533), + 87: uint16(37515), + 88: uint16(37421), + 89: uint16(38558), + 90: uint16(38561), + 91: uint16(38655), + 92: uint16(38744), + 93: uint16(38781), + 94: uint16(38778), + 95: uint16(38782), + 96: uint16(38787), + 97: uint16(38784), + 98: uint16(38786), + 99: uint16(38779), + 100: uint16(38788), + 101: uint16(38785), + 102: uint16(38783), + 103: uint16(38862), + 104: uint16(38861), + 105: uint16(38934), + 106: uint16(39085), + 107: uint16(39086), + 108: uint16(39170), + 109: uint16(39168), + 110: uint16(39175), + 111: uint16(39325), + 112: uint16(39324), + 113: uint16(39363), + 114: uint16(39353), + 115: uint16(39355), + 116: uint16(39354), + 117: uint16(39362), + 118: uint16(39357), + 119: uint16(39367), + 120: uint16(39601), + 121: uint16(39651), + 122: uint16(39655), + 123: uint16(39742), + 124: uint16(39743), + 125: uint16(39776), + 126: uint16(39777), + 127: uint16(39775), + 128: uint16(40177), + 129: uint16(40178), + 130: uint16(40181), + 131: uint16(40615), + 132: uint16(20735), + 133: uint16(20739), + 134: uint16(20784), + 135: uint16(20728), + 136: uint16(20742), + 137: uint16(20743), + 138: uint16(20726), + 139: uint16(20734), + 140: uint16(20747), + 141: uint16(20748), + 142: uint16(20733), + 143: uint16(20746), + 144: uint16(21131), + 145: uint16(21132), + 146: uint16(21233), + 147: uint16(21231), + 148: uint16(22088), + 149: uint16(22082), + 150: uint16(22092), + 151: uint16(22069), + 152: uint16(22081), + 153: uint16(22090), + 154: uint16(22089), + 155: uint16(22086), + 156: uint16(22104), + }, + 68: { + 0: uint16(22106), + 1: uint16(22080), + 2: uint16(22067), + 3: uint16(22077), + 4: uint16(22060), + 5: uint16(22078), + 6: uint16(22072), + 7: uint16(22058), + 8: uint16(22074), + 9: uint16(22298), + 10: uint16(22699), + 11: uint16(22685), + 12: uint16(22705), + 13: uint16(22688), + 14: uint16(22691), + 15: uint16(22703), + 16: uint16(22700), + 17: uint16(22693), + 18: uint16(22689), + 19: uint16(22783), + 20: uint16(23295), + 21: uint16(23284), + 22: uint16(23293), + 23: uint16(23287), + 24: uint16(23286), + 25: uint16(23299), + 26: uint16(23288), + 27: uint16(23298), + 28: uint16(23289), + 29: uint16(23297), + 30: uint16(23303), + 31: uint16(23301), + 32: uint16(23311), + 33: uint16(23655), + 34: uint16(23961), + 35: uint16(23959), + 36: uint16(23967), + 37: uint16(23954), + 38: uint16(23970), + 39: uint16(23955), + 40: uint16(23957), + 41: uint16(23968), + 42: uint16(23964), + 43: uint16(23969), + 44: uint16(23962), + 45: uint16(23966), + 46: uint16(24169), + 47: uint16(24157), + 48: uint16(24160), + 49: uint16(24156), + 50: uint16(32243), + 51: uint16(24283), + 52: uint16(24286), + 53: uint16(24289), + 54: uint16(24393), + 55: uint16(24498), + 56: uint16(24971), + 57: uint16(24963), + 58: uint16(24953), + 59: uint16(25009), + 60: uint16(25008), + 61: uint16(24994), + 62: uint16(24969), + 63: uint16(24987), + 64: uint16(24979), + 65: uint16(25007), + 66: uint16(25005), + 67: uint16(24991), + 68: uint16(24978), + 69: uint16(25002), + 70: uint16(24993), + 71: uint16(24973), + 72: uint16(24934), + 73: uint16(25011), + 74: uint16(25133), + 75: uint16(25710), + 76: uint16(25712), + 77: uint16(25750), + 78: uint16(25760), + 79: uint16(25733), + 80: uint16(25751), + 81: uint16(25756), + 82: uint16(25743), + 83: uint16(25739), + 84: uint16(25738), + 85: uint16(25740), + 86: uint16(25763), + 87: uint16(25759), + 88: uint16(25704), + 89: uint16(25777), + 90: uint16(25752), + 91: uint16(25974), + 92: uint16(25978), + 93: uint16(25977), + 94: uint16(25979), + 95: uint16(26034), + 96: uint16(26035), + 97: uint16(26293), + 98: uint16(26288), + 99: uint16(26281), + 100: uint16(26290), + 101: uint16(26295), + 102: uint16(26282), + 103: uint16(26287), + 104: uint16(27136), + 105: uint16(27142), + 106: uint16(27159), + 107: uint16(27109), + 108: uint16(27128), + 109: uint16(27157), + 110: uint16(27121), + 111: uint16(27108), + 112: uint16(27168), + 113: uint16(27135), + 114: uint16(27116), + 115: uint16(27106), + 116: uint16(27163), + 117: uint16(27165), + 118: uint16(27134), + 119: uint16(27175), + 120: uint16(27122), + 121: uint16(27118), + 122: uint16(27156), + 123: uint16(27127), + 124: uint16(27111), + 125: uint16(27200), + 126: uint16(27144), + 127: uint16(27110), + 128: uint16(27131), + 129: uint16(27149), + 130: uint16(27132), + 131: uint16(27115), + 132: uint16(27145), + 133: uint16(27140), + 134: uint16(27160), + 135: uint16(27173), + 136: uint16(27151), + 137: uint16(27126), + 138: uint16(27174), + 139: uint16(27143), + 140: uint16(27124), + 141: uint16(27158), + 142: uint16(27473), + 143: uint16(27557), + 144: uint16(27555), + 145: uint16(27554), + 146: uint16(27558), + 147: uint16(27649), + 148: uint16(27648), + 149: uint16(27647), + 150: uint16(27650), + 151: uint16(28481), + 152: uint16(28454), + 153: uint16(28542), + 154: uint16(28551), + 155: uint16(28614), + 156: uint16(28562), + }, + 69: { + 0: uint16(28557), + 1: uint16(28553), + 2: uint16(28556), + 3: uint16(28514), + 4: uint16(28495), + 5: uint16(28549), + 6: uint16(28506), + 7: uint16(28566), + 8: uint16(28534), + 9: uint16(28524), + 10: uint16(28546), + 11: uint16(28501), + 12: uint16(28530), + 13: uint16(28498), + 14: uint16(28496), + 15: uint16(28503), + 16: uint16(28564), + 17: uint16(28563), + 18: uint16(28509), + 19: uint16(28416), + 20: uint16(28513), + 21: uint16(28523), + 22: uint16(28541), + 23: uint16(28519), + 24: uint16(28560), + 25: uint16(28499), + 26: uint16(28555), + 27: uint16(28521), + 28: uint16(28543), + 29: uint16(28565), + 30: uint16(28515), + 31: uint16(28535), + 32: uint16(28522), + 33: uint16(28539), + 34: uint16(29106), + 35: uint16(29103), + 36: uint16(29083), + 37: uint16(29104), + 38: uint16(29088), + 39: uint16(29082), + 40: uint16(29097), + 41: uint16(29109), + 42: uint16(29085), + 43: uint16(29093), + 44: uint16(29086), + 45: uint16(29092), + 46: uint16(29089), + 47: uint16(29098), + 48: uint16(29084), + 49: uint16(29095), + 50: uint16(29107), + 51: uint16(29336), + 52: uint16(29338), + 53: uint16(29528), + 54: uint16(29522), + 55: uint16(29534), + 56: uint16(29535), + 57: uint16(29536), + 58: uint16(29533), + 59: uint16(29531), + 60: uint16(29537), + 61: uint16(29530), + 62: uint16(29529), + 63: uint16(29538), + 64: uint16(29831), + 65: uint16(29833), + 66: uint16(29834), + 67: uint16(29830), + 68: uint16(29825), + 69: uint16(29821), + 70: uint16(29829), + 71: uint16(29832), + 72: uint16(29820), + 73: uint16(29817), + 74: uint16(29960), + 75: uint16(29959), + 76: uint16(30078), + 77: uint16(30245), + 78: uint16(30238), + 79: uint16(30233), + 80: uint16(30237), + 81: uint16(30236), + 82: uint16(30243), + 83: uint16(30234), + 84: uint16(30248), + 85: uint16(30235), + 86: uint16(30364), + 87: uint16(30365), + 88: uint16(30366), + 89: uint16(30363), + 90: uint16(30605), + 91: uint16(30607), + 92: uint16(30601), + 93: uint16(30600), + 94: uint16(30925), + 95: uint16(30907), + 96: uint16(30927), + 97: uint16(30924), + 98: uint16(30929), + 99: uint16(30926), + 100: uint16(30932), + 101: uint16(30920), + 102: uint16(30915), + 103: uint16(30916), + 104: uint16(30921), + 105: uint16(31130), + 106: uint16(31137), + 107: uint16(31136), + 108: uint16(31132), + 109: uint16(31138), + 110: uint16(31131), + 111: uint16(27510), + 112: uint16(31289), + 113: uint16(31410), + 114: uint16(31412), + 115: uint16(31411), + 116: uint16(31671), + 117: uint16(31691), + 118: uint16(31678), + 119: uint16(31660), + 120: uint16(31694), + 121: uint16(31663), + 122: uint16(31673), + 123: uint16(31690), + 124: uint16(31669), + 125: uint16(31941), + 126: uint16(31944), + 127: uint16(31948), + 128: uint16(31947), + 129: uint16(32247), + 130: uint16(32219), + 131: uint16(32234), + 132: uint16(32231), + 133: uint16(32215), + 134: uint16(32225), + 135: uint16(32259), + 136: uint16(32250), + 137: uint16(32230), + 138: uint16(32246), + 139: uint16(32241), + 140: uint16(32240), + 141: uint16(32238), + 142: uint16(32223), + 143: uint16(32630), + 144: uint16(32684), + 145: uint16(32688), + 146: uint16(32685), + 147: uint16(32749), + 148: uint16(32747), + 149: uint16(32746), + 150: uint16(32748), + 151: uint16(32742), + 152: uint16(32744), + 153: uint16(32868), + 154: uint16(32871), + 155: uint16(33187), + 156: uint16(33183), + }, + 70: { + 0: uint16(33182), + 1: uint16(33173), + 2: uint16(33186), + 3: uint16(33177), + 4: uint16(33175), + 5: uint16(33302), + 6: uint16(33359), + 7: uint16(33363), + 8: uint16(33362), + 9: uint16(33360), + 10: uint16(33358), + 11: uint16(33361), + 12: uint16(34084), + 13: uint16(34107), + 14: uint16(34063), + 15: uint16(34048), + 16: uint16(34089), + 17: uint16(34062), + 18: uint16(34057), + 19: uint16(34061), + 20: uint16(34079), + 21: uint16(34058), + 22: uint16(34087), + 23: uint16(34076), + 24: uint16(34043), + 25: uint16(34091), + 26: uint16(34042), + 27: uint16(34056), + 28: uint16(34060), + 29: uint16(34036), + 30: uint16(34090), + 31: uint16(34034), + 32: uint16(34069), + 33: uint16(34039), + 34: uint16(34027), + 35: uint16(34035), + 36: uint16(34044), + 37: uint16(34066), + 38: uint16(34026), + 39: uint16(34025), + 40: uint16(34070), + 41: uint16(34046), + 42: uint16(34088), + 43: uint16(34077), + 44: uint16(34094), + 45: uint16(34050), + 46: uint16(34045), + 47: uint16(34078), + 48: uint16(34038), + 49: uint16(34097), + 50: uint16(34086), + 51: uint16(34023), + 52: uint16(34024), + 53: uint16(34032), + 54: uint16(34031), + 55: uint16(34041), + 56: uint16(34072), + 57: uint16(34080), + 58: uint16(34096), + 59: uint16(34059), + 60: uint16(34073), + 61: uint16(34095), + 62: uint16(34402), + 63: uint16(34646), + 64: uint16(34659), + 65: uint16(34660), + 66: uint16(34679), + 67: uint16(34785), + 68: uint16(34675), + 69: uint16(34648), + 70: uint16(34644), + 71: uint16(34651), + 72: uint16(34642), + 73: uint16(34657), + 74: uint16(34650), + 75: uint16(34641), + 76: uint16(34654), + 77: uint16(34669), + 78: uint16(34666), + 79: uint16(34640), + 80: uint16(34638), + 81: uint16(34655), + 82: uint16(34653), + 83: uint16(34671), + 84: uint16(34668), + 85: uint16(34682), + 86: uint16(34670), + 87: uint16(34652), + 88: uint16(34661), + 89: uint16(34639), + 90: uint16(34683), + 91: uint16(34677), + 92: uint16(34658), + 93: uint16(34663), + 94: uint16(34665), + 95: uint16(34906), + 96: uint16(35077), + 97: uint16(35084), + 98: uint16(35092), + 99: uint16(35083), + 100: uint16(35095), + 101: uint16(35096), + 102: uint16(35097), + 103: uint16(35078), + 104: uint16(35094), + 105: uint16(35089), + 106: uint16(35086), + 107: uint16(35081), + 108: uint16(35234), + 109: uint16(35236), + 110: uint16(35235), + 111: uint16(35309), + 112: uint16(35312), + 113: uint16(35308), + 114: uint16(35535), + 115: uint16(35526), + 116: uint16(35512), + 117: uint16(35539), + 118: uint16(35537), + 119: uint16(35540), + 120: uint16(35541), + 121: uint16(35515), + 122: uint16(35543), + 123: uint16(35518), + 124: uint16(35520), + 125: uint16(35525), + 126: uint16(35544), + 127: uint16(35523), + 128: uint16(35514), + 129: uint16(35517), + 130: uint16(35545), + 131: uint16(35902), + 132: uint16(35917), + 133: uint16(35983), + 134: uint16(36069), + 135: uint16(36063), + 136: uint16(36057), + 137: uint16(36072), + 138: uint16(36058), + 139: uint16(36061), + 140: uint16(36071), + 141: uint16(36256), + 142: uint16(36252), + 143: uint16(36257), + 144: uint16(36251), + 145: uint16(36384), + 146: uint16(36387), + 147: uint16(36389), + 148: uint16(36388), + 149: uint16(36398), + 150: uint16(36373), + 151: uint16(36379), + 152: uint16(36374), + 153: uint16(36369), + 154: uint16(36377), + 155: uint16(36390), + 156: uint16(36391), + }, + 71: { + 0: uint16(36372), + 1: uint16(36370), + 2: uint16(36376), + 3: uint16(36371), + 4: uint16(36380), + 5: uint16(36375), + 6: uint16(36378), + 7: uint16(36652), + 8: uint16(36644), + 9: uint16(36632), + 10: uint16(36634), + 11: uint16(36640), + 12: uint16(36643), + 13: uint16(36630), + 14: uint16(36631), + 15: uint16(36979), + 16: uint16(36976), + 17: uint16(36975), + 18: uint16(36967), + 19: uint16(36971), + 20: uint16(37167), + 21: uint16(37163), + 22: uint16(37161), + 23: uint16(37162), + 24: uint16(37170), + 25: uint16(37158), + 26: uint16(37166), + 27: uint16(37253), + 28: uint16(37254), + 29: uint16(37258), + 30: uint16(37249), + 31: uint16(37250), + 32: uint16(37252), + 33: uint16(37248), + 34: uint16(37584), + 35: uint16(37571), + 36: uint16(37572), + 37: uint16(37568), + 38: uint16(37593), + 39: uint16(37558), + 40: uint16(37583), + 41: uint16(37617), + 42: uint16(37599), + 43: uint16(37592), + 44: uint16(37609), + 45: uint16(37591), + 46: uint16(37597), + 47: uint16(37580), + 48: uint16(37615), + 49: uint16(37570), + 50: uint16(37608), + 51: uint16(37578), + 52: uint16(37576), + 53: uint16(37582), + 54: uint16(37606), + 55: uint16(37581), + 56: uint16(37589), + 57: uint16(37577), + 58: uint16(37600), + 59: uint16(37598), + 60: uint16(37607), + 61: uint16(37585), + 62: uint16(37587), + 63: uint16(37557), + 64: uint16(37601), + 65: uint16(37574), + 66: uint16(37556), + 67: uint16(38268), + 68: uint16(38316), + 69: uint16(38315), + 70: uint16(38318), + 71: uint16(38320), + 72: uint16(38564), + 73: uint16(38562), + 74: uint16(38611), + 75: uint16(38661), + 76: uint16(38664), + 77: uint16(38658), + 78: uint16(38746), + 79: uint16(38794), + 80: uint16(38798), + 81: uint16(38792), + 82: uint16(38864), + 83: uint16(38863), + 84: uint16(38942), + 85: uint16(38941), + 86: uint16(38950), + 87: uint16(38953), + 88: uint16(38952), + 89: uint16(38944), + 90: uint16(38939), + 91: uint16(38951), + 92: uint16(39090), + 93: uint16(39176), + 94: uint16(39162), + 95: uint16(39185), + 96: uint16(39188), + 97: uint16(39190), + 98: uint16(39191), + 99: uint16(39189), + 100: uint16(39388), + 101: uint16(39373), + 102: uint16(39375), + 103: uint16(39379), + 104: uint16(39380), + 105: uint16(39374), + 106: uint16(39369), + 107: uint16(39382), + 108: uint16(39384), + 109: uint16(39371), + 110: uint16(39383), + 111: uint16(39372), + 112: uint16(39603), + 113: uint16(39660), + 114: uint16(39659), + 115: uint16(39667), + 116: uint16(39666), + 117: uint16(39665), + 118: uint16(39750), + 119: uint16(39747), + 120: uint16(39783), + 121: uint16(39796), + 122: uint16(39793), + 123: uint16(39782), + 124: uint16(39798), + 125: uint16(39797), + 126: uint16(39792), + 127: uint16(39784), + 128: uint16(39780), + 129: uint16(39788), + 130: uint16(40188), + 131: uint16(40186), + 132: uint16(40189), + 133: uint16(40191), + 134: uint16(40183), + 135: uint16(40199), + 136: uint16(40192), + 137: uint16(40185), + 138: uint16(40187), + 139: uint16(40200), + 140: uint16(40197), + 141: uint16(40196), + 142: uint16(40579), + 143: uint16(40659), + 144: uint16(40719), + 145: uint16(40720), + 146: uint16(20764), + 147: uint16(20755), + 148: uint16(20759), + 149: uint16(20762), + 150: uint16(20753), + 151: uint16(20958), + 152: uint16(21300), + 153: uint16(21473), + 154: uint16(22128), + 155: uint16(22112), + 156: uint16(22126), + }, + 72: { + 0: uint16(22131), + 1: uint16(22118), + 2: uint16(22115), + 3: uint16(22125), + 4: uint16(22130), + 5: uint16(22110), + 6: uint16(22135), + 7: uint16(22300), + 8: uint16(22299), + 9: uint16(22728), + 10: uint16(22717), + 11: uint16(22729), + 12: uint16(22719), + 13: uint16(22714), + 14: uint16(22722), + 15: uint16(22716), + 16: uint16(22726), + 17: uint16(23319), + 18: uint16(23321), + 19: uint16(23323), + 20: uint16(23329), + 21: uint16(23316), + 22: uint16(23315), + 23: uint16(23312), + 24: uint16(23318), + 25: uint16(23336), + 26: uint16(23322), + 27: uint16(23328), + 28: uint16(23326), + 29: uint16(23535), + 30: uint16(23980), + 31: uint16(23985), + 32: uint16(23977), + 33: uint16(23975), + 34: uint16(23989), + 35: uint16(23984), + 36: uint16(23982), + 37: uint16(23978), + 38: uint16(23976), + 39: uint16(23986), + 40: uint16(23981), + 41: uint16(23983), + 42: uint16(23988), + 43: uint16(24167), + 44: uint16(24168), + 45: uint16(24166), + 46: uint16(24175), + 47: uint16(24297), + 48: uint16(24295), + 49: uint16(24294), + 50: uint16(24296), + 51: uint16(24293), + 52: uint16(24395), + 53: uint16(24508), + 54: uint16(24989), + 55: uint16(25000), + 56: uint16(24982), + 57: uint16(25029), + 58: uint16(25012), + 59: uint16(25030), + 60: uint16(25025), + 61: uint16(25036), + 62: uint16(25018), + 63: uint16(25023), + 64: uint16(25016), + 65: uint16(24972), + 66: uint16(25815), + 67: uint16(25814), + 68: uint16(25808), + 69: uint16(25807), + 70: uint16(25801), + 71: uint16(25789), + 72: uint16(25737), + 73: uint16(25795), + 74: uint16(25819), + 75: uint16(25843), + 76: uint16(25817), + 77: uint16(25907), + 78: uint16(25983), + 79: uint16(25980), + 80: uint16(26018), + 81: uint16(26312), + 82: uint16(26302), + 83: uint16(26304), + 84: uint16(26314), + 85: uint16(26315), + 86: uint16(26319), + 87: uint16(26301), + 88: uint16(26299), + 89: uint16(26298), + 90: uint16(26316), + 91: uint16(26403), + 92: uint16(27188), + 93: uint16(27238), + 94: uint16(27209), + 95: uint16(27239), + 96: uint16(27186), + 97: uint16(27240), + 98: uint16(27198), + 99: uint16(27229), + 100: uint16(27245), + 101: uint16(27254), + 102: uint16(27227), + 103: uint16(27217), + 104: uint16(27176), + 105: uint16(27226), + 106: uint16(27195), + 107: uint16(27199), + 108: uint16(27201), + 109: uint16(27242), + 110: uint16(27236), + 111: uint16(27216), + 112: uint16(27215), + 113: uint16(27220), + 114: uint16(27247), + 115: uint16(27241), + 116: uint16(27232), + 117: uint16(27196), + 118: uint16(27230), + 119: uint16(27222), + 120: uint16(27221), + 121: uint16(27213), + 122: uint16(27214), + 123: uint16(27206), + 124: uint16(27477), + 125: uint16(27476), + 126: uint16(27478), + 127: uint16(27559), + 128: uint16(27562), + 129: uint16(27563), + 130: uint16(27592), + 131: uint16(27591), + 132: uint16(27652), + 133: uint16(27651), + 134: uint16(27654), + 135: uint16(28589), + 136: uint16(28619), + 137: uint16(28579), + 138: uint16(28615), + 139: uint16(28604), + 140: uint16(28622), + 141: uint16(28616), + 142: uint16(28510), + 143: uint16(28612), + 144: uint16(28605), + 145: uint16(28574), + 146: uint16(28618), + 147: uint16(28584), + 148: uint16(28676), + 149: uint16(28581), + 150: uint16(28590), + 151: uint16(28602), + 152: uint16(28588), + 153: uint16(28586), + 154: uint16(28623), + 155: uint16(28607), + 156: uint16(28600), + }, + 73: { + 0: uint16(28578), + 1: uint16(28617), + 2: uint16(28587), + 3: uint16(28621), + 4: uint16(28591), + 5: uint16(28594), + 6: uint16(28592), + 7: uint16(29125), + 8: uint16(29122), + 9: uint16(29119), + 10: uint16(29112), + 11: uint16(29142), + 12: uint16(29120), + 13: uint16(29121), + 14: uint16(29131), + 15: uint16(29140), + 16: uint16(29130), + 17: uint16(29127), + 18: uint16(29135), + 19: uint16(29117), + 20: uint16(29144), + 21: uint16(29116), + 22: uint16(29126), + 23: uint16(29146), + 24: uint16(29147), + 25: uint16(29341), + 26: uint16(29342), + 27: uint16(29545), + 28: uint16(29542), + 29: uint16(29543), + 30: uint16(29548), + 31: uint16(29541), + 32: uint16(29547), + 33: uint16(29546), + 34: uint16(29823), + 35: uint16(29850), + 36: uint16(29856), + 37: uint16(29844), + 38: uint16(29842), + 39: uint16(29845), + 40: uint16(29857), + 41: uint16(29963), + 42: uint16(30080), + 43: uint16(30255), + 44: uint16(30253), + 45: uint16(30257), + 46: uint16(30269), + 47: uint16(30259), + 48: uint16(30268), + 49: uint16(30261), + 50: uint16(30258), + 51: uint16(30256), + 52: uint16(30395), + 53: uint16(30438), + 54: uint16(30618), + 55: uint16(30621), + 56: uint16(30625), + 57: uint16(30620), + 58: uint16(30619), + 59: uint16(30626), + 60: uint16(30627), + 61: uint16(30613), + 62: uint16(30617), + 63: uint16(30615), + 64: uint16(30941), + 65: uint16(30953), + 66: uint16(30949), + 67: uint16(30954), + 68: uint16(30942), + 69: uint16(30947), + 70: uint16(30939), + 71: uint16(30945), + 72: uint16(30946), + 73: uint16(30957), + 74: uint16(30943), + 75: uint16(30944), + 76: uint16(31140), + 77: uint16(31300), + 78: uint16(31304), + 79: uint16(31303), + 80: uint16(31414), + 81: uint16(31416), + 82: uint16(31413), + 83: uint16(31409), + 84: uint16(31415), + 85: uint16(31710), + 86: uint16(31715), + 87: uint16(31719), + 88: uint16(31709), + 89: uint16(31701), + 90: uint16(31717), + 91: uint16(31706), + 92: uint16(31720), + 93: uint16(31737), + 94: uint16(31700), + 95: uint16(31722), + 96: uint16(31714), + 97: uint16(31708), + 98: uint16(31723), + 99: uint16(31704), + 100: uint16(31711), + 101: uint16(31954), + 102: uint16(31956), + 103: uint16(31959), + 104: uint16(31952), + 105: uint16(31953), + 106: uint16(32274), + 107: uint16(32289), + 108: uint16(32279), + 109: uint16(32268), + 110: uint16(32287), + 111: uint16(32288), + 112: uint16(32275), + 113: uint16(32270), + 114: uint16(32284), + 115: uint16(32277), + 116: uint16(32282), + 117: uint16(32290), + 118: uint16(32267), + 119: uint16(32271), + 120: uint16(32278), + 121: uint16(32269), + 122: uint16(32276), + 123: uint16(32293), + 124: uint16(32292), + 125: uint16(32579), + 126: uint16(32635), + 127: uint16(32636), + 128: uint16(32634), + 129: uint16(32689), + 130: uint16(32751), + 131: uint16(32810), + 132: uint16(32809), + 133: uint16(32876), + 134: uint16(33201), + 135: uint16(33190), + 136: uint16(33198), + 137: uint16(33209), + 138: uint16(33205), + 139: uint16(33195), + 140: uint16(33200), + 141: uint16(33196), + 142: uint16(33204), + 143: uint16(33202), + 144: uint16(33207), + 145: uint16(33191), + 146: uint16(33266), + 147: uint16(33365), + 148: uint16(33366), + 149: uint16(33367), + 150: uint16(34134), + 151: uint16(34117), + 152: uint16(34155), + 153: uint16(34125), + 154: uint16(34131), + 155: uint16(34145), + 156: uint16(34136), + }, + 74: { + 0: uint16(34112), + 1: uint16(34118), + 2: uint16(34148), + 3: uint16(34113), + 4: uint16(34146), + 5: uint16(34116), + 6: uint16(34129), + 7: uint16(34119), + 8: uint16(34147), + 9: uint16(34110), + 10: uint16(34139), + 11: uint16(34161), + 12: uint16(34126), + 13: uint16(34158), + 14: uint16(34165), + 15: uint16(34133), + 16: uint16(34151), + 17: uint16(34144), + 18: uint16(34188), + 19: uint16(34150), + 20: uint16(34141), + 21: uint16(34132), + 22: uint16(34149), + 23: uint16(34156), + 24: uint16(34403), + 25: uint16(34405), + 26: uint16(34404), + 27: uint16(34715), + 28: uint16(34703), + 29: uint16(34711), + 30: uint16(34707), + 31: uint16(34706), + 32: uint16(34696), + 33: uint16(34689), + 34: uint16(34710), + 35: uint16(34712), + 36: uint16(34681), + 37: uint16(34695), + 38: uint16(34723), + 39: uint16(34693), + 40: uint16(34704), + 41: uint16(34705), + 42: uint16(34717), + 43: uint16(34692), + 44: uint16(34708), + 45: uint16(34716), + 46: uint16(34714), + 47: uint16(34697), + 48: uint16(35102), + 49: uint16(35110), + 50: uint16(35120), + 51: uint16(35117), + 52: uint16(35118), + 53: uint16(35111), + 54: uint16(35121), + 55: uint16(35106), + 56: uint16(35113), + 57: uint16(35107), + 58: uint16(35119), + 59: uint16(35116), + 60: uint16(35103), + 61: uint16(35313), + 62: uint16(35552), + 63: uint16(35554), + 64: uint16(35570), + 65: uint16(35572), + 66: uint16(35573), + 67: uint16(35549), + 68: uint16(35604), + 69: uint16(35556), + 70: uint16(35551), + 71: uint16(35568), + 72: uint16(35528), + 73: uint16(35550), + 74: uint16(35553), + 75: uint16(35560), + 76: uint16(35583), + 77: uint16(35567), + 78: uint16(35579), + 79: uint16(35985), + 80: uint16(35986), + 81: uint16(35984), + 82: uint16(36085), + 83: uint16(36078), + 84: uint16(36081), + 85: uint16(36080), + 86: uint16(36083), + 87: uint16(36204), + 88: uint16(36206), + 89: uint16(36261), + 90: uint16(36263), + 91: uint16(36403), + 92: uint16(36414), + 93: uint16(36408), + 94: uint16(36416), + 95: uint16(36421), + 96: uint16(36406), + 97: uint16(36412), + 98: uint16(36413), + 99: uint16(36417), + 100: uint16(36400), + 101: uint16(36415), + 102: uint16(36541), + 103: uint16(36662), + 104: uint16(36654), + 105: uint16(36661), + 106: uint16(36658), + 107: uint16(36665), + 108: uint16(36663), + 109: uint16(36660), + 110: uint16(36982), + 111: uint16(36985), + 112: uint16(36987), + 113: uint16(36998), + 114: uint16(37114), + 115: uint16(37171), + 116: uint16(37173), + 117: uint16(37174), + 118: uint16(37267), + 119: uint16(37264), + 120: uint16(37265), + 121: uint16(37261), + 122: uint16(37263), + 123: uint16(37671), + 124: uint16(37662), + 125: uint16(37640), + 126: uint16(37663), + 127: uint16(37638), + 128: uint16(37647), + 129: uint16(37754), + 130: uint16(37688), + 131: uint16(37692), + 132: uint16(37659), + 133: uint16(37667), + 134: uint16(37650), + 135: uint16(37633), + 136: uint16(37702), + 137: uint16(37677), + 138: uint16(37646), + 139: uint16(37645), + 140: uint16(37579), + 141: uint16(37661), + 142: uint16(37626), + 143: uint16(37669), + 144: uint16(37651), + 145: uint16(37625), + 146: uint16(37623), + 147: uint16(37684), + 148: uint16(37634), + 149: uint16(37668), + 150: uint16(37631), + 151: uint16(37673), + 152: uint16(37689), + 153: uint16(37685), + 154: uint16(37674), + 155: uint16(37652), + 156: uint16(37644), + }, + 75: { + 0: uint16(37643), + 1: uint16(37630), + 2: uint16(37641), + 3: uint16(37632), + 4: uint16(37627), + 5: uint16(37654), + 6: uint16(38332), + 7: uint16(38349), + 8: uint16(38334), + 9: uint16(38329), + 10: uint16(38330), + 11: uint16(38326), + 12: uint16(38335), + 13: uint16(38325), + 14: uint16(38333), + 15: uint16(38569), + 16: uint16(38612), + 17: uint16(38667), + 18: uint16(38674), + 19: uint16(38672), + 20: uint16(38809), + 21: uint16(38807), + 22: uint16(38804), + 23: uint16(38896), + 24: uint16(38904), + 25: uint16(38965), + 26: uint16(38959), + 27: uint16(38962), + 28: uint16(39204), + 29: uint16(39199), + 30: uint16(39207), + 31: uint16(39209), + 32: uint16(39326), + 33: uint16(39406), + 34: uint16(39404), + 35: uint16(39397), + 36: uint16(39396), + 37: uint16(39408), + 38: uint16(39395), + 39: uint16(39402), + 40: uint16(39401), + 41: uint16(39399), + 42: uint16(39609), + 43: uint16(39615), + 44: uint16(39604), + 45: uint16(39611), + 46: uint16(39670), + 47: uint16(39674), + 48: uint16(39673), + 49: uint16(39671), + 50: uint16(39731), + 51: uint16(39808), + 52: uint16(39813), + 53: uint16(39815), + 54: uint16(39804), + 55: uint16(39806), + 56: uint16(39803), + 57: uint16(39810), + 58: uint16(39827), + 59: uint16(39826), + 60: uint16(39824), + 61: uint16(39802), + 62: uint16(39829), + 63: uint16(39805), + 64: uint16(39816), + 65: uint16(40229), + 66: uint16(40215), + 67: uint16(40224), + 68: uint16(40222), + 69: uint16(40212), + 70: uint16(40233), + 71: uint16(40221), + 72: uint16(40216), + 73: uint16(40226), + 74: uint16(40208), + 75: uint16(40217), + 76: uint16(40223), + 77: uint16(40584), + 78: uint16(40582), + 79: uint16(40583), + 80: uint16(40622), + 81: uint16(40621), + 82: uint16(40661), + 83: uint16(40662), + 84: uint16(40698), + 85: uint16(40722), + 86: uint16(40765), + 87: uint16(20774), + 88: uint16(20773), + 89: uint16(20770), + 90: uint16(20772), + 91: uint16(20768), + 92: uint16(20777), + 93: uint16(21236), + 94: uint16(22163), + 95: uint16(22156), + 96: uint16(22157), + 97: uint16(22150), + 98: uint16(22148), + 99: uint16(22147), + 100: uint16(22142), + 101: uint16(22146), + 102: uint16(22143), + 103: uint16(22145), + 104: uint16(22742), + 105: uint16(22740), + 106: uint16(22735), + 107: uint16(22738), + 108: uint16(23341), + 109: uint16(23333), + 110: uint16(23346), + 111: uint16(23331), + 112: uint16(23340), + 113: uint16(23335), + 114: uint16(23334), + 115: uint16(23343), + 116: uint16(23342), + 117: uint16(23419), + 118: uint16(23537), + 119: uint16(23538), + 120: uint16(23991), + 121: uint16(24172), + 122: uint16(24170), + 123: uint16(24510), + 124: uint16(24507), + 125: uint16(25027), + 126: uint16(25013), + 127: uint16(25020), + 128: uint16(25063), + 129: uint16(25056), + 130: uint16(25061), + 131: uint16(25060), + 132: uint16(25064), + 133: uint16(25054), + 134: uint16(25839), + 135: uint16(25833), + 136: uint16(25827), + 137: uint16(25835), + 138: uint16(25828), + 139: uint16(25832), + 140: uint16(25985), + 141: uint16(25984), + 142: uint16(26038), + 143: uint16(26074), + 144: uint16(26322), + 145: uint16(27277), + 146: uint16(27286), + 147: uint16(27265), + 148: uint16(27301), + 149: uint16(27273), + 150: uint16(27295), + 151: uint16(27291), + 152: uint16(27297), + 153: uint16(27294), + 154: uint16(27271), + 155: uint16(27283), + 156: uint16(27278), + }, + 76: { + 0: uint16(27285), + 1: uint16(27267), + 2: uint16(27304), + 3: uint16(27300), + 4: uint16(27281), + 5: uint16(27263), + 6: uint16(27302), + 7: uint16(27290), + 8: uint16(27269), + 9: uint16(27276), + 10: uint16(27282), + 11: uint16(27483), + 12: uint16(27565), + 13: uint16(27657), + 14: uint16(28620), + 15: uint16(28585), + 16: uint16(28660), + 17: uint16(28628), + 18: uint16(28643), + 19: uint16(28636), + 20: uint16(28653), + 21: uint16(28647), + 22: uint16(28646), + 23: uint16(28638), + 24: uint16(28658), + 25: uint16(28637), + 26: uint16(28642), + 27: uint16(28648), + 28: uint16(29153), + 29: uint16(29169), + 30: uint16(29160), + 31: uint16(29170), + 32: uint16(29156), + 33: uint16(29168), + 34: uint16(29154), + 35: uint16(29555), + 36: uint16(29550), + 37: uint16(29551), + 38: uint16(29847), + 39: uint16(29874), + 40: uint16(29867), + 41: uint16(29840), + 42: uint16(29866), + 43: uint16(29869), + 44: uint16(29873), + 45: uint16(29861), + 46: uint16(29871), + 47: uint16(29968), + 48: uint16(29969), + 49: uint16(29970), + 50: uint16(29967), + 51: uint16(30084), + 52: uint16(30275), + 53: uint16(30280), + 54: uint16(30281), + 55: uint16(30279), + 56: uint16(30372), + 57: uint16(30441), + 58: uint16(30645), + 59: uint16(30635), + 60: uint16(30642), + 61: uint16(30647), + 62: uint16(30646), + 63: uint16(30644), + 64: uint16(30641), + 65: uint16(30632), + 66: uint16(30704), + 67: uint16(30963), + 68: uint16(30973), + 69: uint16(30978), + 70: uint16(30971), + 71: uint16(30972), + 72: uint16(30962), + 73: uint16(30981), + 74: uint16(30969), + 75: uint16(30974), + 76: uint16(30980), + 77: uint16(31147), + 78: uint16(31144), + 79: uint16(31324), + 80: uint16(31323), + 81: uint16(31318), + 82: uint16(31320), + 83: uint16(31316), + 84: uint16(31322), + 85: uint16(31422), + 86: uint16(31424), + 87: uint16(31425), + 88: uint16(31749), + 89: uint16(31759), + 90: uint16(31730), + 91: uint16(31744), + 92: uint16(31743), + 93: uint16(31739), + 94: uint16(31758), + 95: uint16(31732), + 96: uint16(31755), + 97: uint16(31731), + 98: uint16(31746), + 99: uint16(31753), + 100: uint16(31747), + 101: uint16(31745), + 102: uint16(31736), + 103: uint16(31741), + 104: uint16(31750), + 105: uint16(31728), + 106: uint16(31729), + 107: uint16(31760), + 108: uint16(31754), + 109: uint16(31976), + 110: uint16(32301), + 111: uint16(32316), + 112: uint16(32322), + 113: uint16(32307), + 114: uint16(38984), + 115: uint16(32312), + 116: uint16(32298), + 117: uint16(32329), + 118: uint16(32320), + 119: uint16(32327), + 120: uint16(32297), + 121: uint16(32332), + 122: uint16(32304), + 123: uint16(32315), + 124: uint16(32310), + 125: uint16(32324), + 126: uint16(32314), + 127: uint16(32581), + 128: uint16(32639), + 129: uint16(32638), + 130: uint16(32637), + 131: uint16(32756), + 132: uint16(32754), + 133: uint16(32812), + 134: uint16(33211), + 135: uint16(33220), + 136: uint16(33228), + 137: uint16(33226), + 138: uint16(33221), + 139: uint16(33223), + 140: uint16(33212), + 141: uint16(33257), + 142: uint16(33371), + 143: uint16(33370), + 144: uint16(33372), + 145: uint16(34179), + 146: uint16(34176), + 147: uint16(34191), + 148: uint16(34215), + 149: uint16(34197), + 150: uint16(34208), + 151: uint16(34187), + 152: uint16(34211), + 153: uint16(34171), + 154: uint16(34212), + 155: uint16(34202), + 156: uint16(34206), + }, + 77: { + 0: uint16(34167), + 1: uint16(34172), + 2: uint16(34185), + 3: uint16(34209), + 4: uint16(34170), + 5: uint16(34168), + 6: uint16(34135), + 7: uint16(34190), + 8: uint16(34198), + 9: uint16(34182), + 10: uint16(34189), + 11: uint16(34201), + 12: uint16(34205), + 13: uint16(34177), + 14: uint16(34210), + 15: uint16(34178), + 16: uint16(34184), + 17: uint16(34181), + 18: uint16(34169), + 19: uint16(34166), + 20: uint16(34200), + 21: uint16(34192), + 22: uint16(34207), + 23: uint16(34408), + 24: uint16(34750), + 25: uint16(34730), + 26: uint16(34733), + 27: uint16(34757), + 28: uint16(34736), + 29: uint16(34732), + 30: uint16(34745), + 31: uint16(34741), + 32: uint16(34748), + 33: uint16(34734), + 34: uint16(34761), + 35: uint16(34755), + 36: uint16(34754), + 37: uint16(34764), + 38: uint16(34743), + 39: uint16(34735), + 40: uint16(34756), + 41: uint16(34762), + 42: uint16(34740), + 43: uint16(34742), + 44: uint16(34751), + 45: uint16(34744), + 46: uint16(34749), + 47: uint16(34782), + 48: uint16(34738), + 49: uint16(35125), + 50: uint16(35123), + 51: uint16(35132), + 52: uint16(35134), + 53: uint16(35137), + 54: uint16(35154), + 55: uint16(35127), + 56: uint16(35138), + 57: uint16(35245), + 58: uint16(35247), + 59: uint16(35246), + 60: uint16(35314), + 61: uint16(35315), + 62: uint16(35614), + 63: uint16(35608), + 64: uint16(35606), + 65: uint16(35601), + 66: uint16(35589), + 67: uint16(35595), + 68: uint16(35618), + 69: uint16(35599), + 70: uint16(35602), + 71: uint16(35605), + 72: uint16(35591), + 73: uint16(35597), + 74: uint16(35592), + 75: uint16(35590), + 76: uint16(35612), + 77: uint16(35603), + 78: uint16(35610), + 79: uint16(35919), + 80: uint16(35952), + 81: uint16(35954), + 82: uint16(35953), + 83: uint16(35951), + 84: uint16(35989), + 85: uint16(35988), + 86: uint16(36089), + 87: uint16(36207), + 88: uint16(36430), + 89: uint16(36429), + 90: uint16(36435), + 91: uint16(36432), + 92: uint16(36428), + 93: uint16(36423), + 94: uint16(36675), + 95: uint16(36672), + 96: uint16(36997), + 97: uint16(36990), + 98: uint16(37176), + 99: uint16(37274), + 100: uint16(37282), + 101: uint16(37275), + 102: uint16(37273), + 103: uint16(37279), + 104: uint16(37281), + 105: uint16(37277), + 106: uint16(37280), + 107: uint16(37793), + 108: uint16(37763), + 109: uint16(37807), + 110: uint16(37732), + 111: uint16(37718), + 112: uint16(37703), + 113: uint16(37756), + 114: uint16(37720), + 115: uint16(37724), + 116: uint16(37750), + 117: uint16(37705), + 118: uint16(37712), + 119: uint16(37713), + 120: uint16(37728), + 121: uint16(37741), + 122: uint16(37775), + 123: uint16(37708), + 124: uint16(37738), + 125: uint16(37753), + 126: uint16(37719), + 127: uint16(37717), + 128: uint16(37714), + 129: uint16(37711), + 130: uint16(37745), + 131: uint16(37751), + 132: uint16(37755), + 133: uint16(37729), + 134: uint16(37726), + 135: uint16(37731), + 136: uint16(37735), + 137: uint16(37760), + 138: uint16(37710), + 139: uint16(37721), + 140: uint16(38343), + 141: uint16(38336), + 142: uint16(38345), + 143: uint16(38339), + 144: uint16(38341), + 145: uint16(38327), + 146: uint16(38574), + 147: uint16(38576), + 148: uint16(38572), + 149: uint16(38688), + 150: uint16(38687), + 151: uint16(38680), + 152: uint16(38685), + 153: uint16(38681), + 154: uint16(38810), + 155: uint16(38817), + 156: uint16(38812), + }, + 78: { + 0: uint16(38814), + 1: uint16(38813), + 2: uint16(38869), + 3: uint16(38868), + 4: uint16(38897), + 5: uint16(38977), + 6: uint16(38980), + 7: uint16(38986), + 8: uint16(38985), + 9: uint16(38981), + 10: uint16(38979), + 11: uint16(39205), + 12: uint16(39211), + 13: uint16(39212), + 14: uint16(39210), + 15: uint16(39219), + 16: uint16(39218), + 17: uint16(39215), + 18: uint16(39213), + 19: uint16(39217), + 20: uint16(39216), + 21: uint16(39320), + 22: uint16(39331), + 23: uint16(39329), + 24: uint16(39426), + 25: uint16(39418), + 26: uint16(39412), + 27: uint16(39415), + 28: uint16(39417), + 29: uint16(39416), + 30: uint16(39414), + 31: uint16(39419), + 32: uint16(39421), + 33: uint16(39422), + 34: uint16(39420), + 35: uint16(39427), + 36: uint16(39614), + 37: uint16(39678), + 38: uint16(39677), + 39: uint16(39681), + 40: uint16(39676), + 41: uint16(39752), + 42: uint16(39834), + 43: uint16(39848), + 44: uint16(39838), + 45: uint16(39835), + 46: uint16(39846), + 47: uint16(39841), + 48: uint16(39845), + 49: uint16(39844), + 50: uint16(39814), + 51: uint16(39842), + 52: uint16(39840), + 53: uint16(39855), + 54: uint16(40243), + 55: uint16(40257), + 56: uint16(40295), + 57: uint16(40246), + 58: uint16(40238), + 59: uint16(40239), + 60: uint16(40241), + 61: uint16(40248), + 62: uint16(40240), + 63: uint16(40261), + 64: uint16(40258), + 65: uint16(40259), + 66: uint16(40254), + 67: uint16(40247), + 68: uint16(40256), + 69: uint16(40253), + 70: uint16(32757), + 71: uint16(40237), + 72: uint16(40586), + 73: uint16(40585), + 74: uint16(40589), + 75: uint16(40624), + 76: uint16(40648), + 77: uint16(40666), + 78: uint16(40699), + 79: uint16(40703), + 80: uint16(40740), + 81: uint16(40739), + 82: uint16(40738), + 83: uint16(40788), + 84: uint16(40864), + 85: uint16(20785), + 86: uint16(20781), + 87: uint16(20782), + 88: uint16(22168), + 89: uint16(22172), + 90: uint16(22167), + 91: uint16(22170), + 92: uint16(22173), + 93: uint16(22169), + 94: uint16(22896), + 95: uint16(23356), + 96: uint16(23657), + 97: uint16(23658), + 98: uint16(24000), + 99: uint16(24173), + 100: uint16(24174), + 101: uint16(25048), + 102: uint16(25055), + 103: uint16(25069), + 104: uint16(25070), + 105: uint16(25073), + 106: uint16(25066), + 107: uint16(25072), + 108: uint16(25067), + 109: uint16(25046), + 110: uint16(25065), + 111: uint16(25855), + 112: uint16(25860), + 113: uint16(25853), + 114: uint16(25848), + 115: uint16(25857), + 116: uint16(25859), + 117: uint16(25852), + 118: uint16(26004), + 119: uint16(26075), + 120: uint16(26330), + 121: uint16(26331), + 122: uint16(26328), + 123: uint16(27333), + 124: uint16(27321), + 125: uint16(27325), + 126: uint16(27361), + 127: uint16(27334), + 128: uint16(27322), + 129: uint16(27318), + 130: uint16(27319), + 131: uint16(27335), + 132: uint16(27316), + 133: uint16(27309), + 134: uint16(27486), + 135: uint16(27593), + 136: uint16(27659), + 137: uint16(28679), + 138: uint16(28684), + 139: uint16(28685), + 140: uint16(28673), + 141: uint16(28677), + 142: uint16(28692), + 143: uint16(28686), + 144: uint16(28671), + 145: uint16(28672), + 146: uint16(28667), + 147: uint16(28710), + 148: uint16(28668), + 149: uint16(28663), + 150: uint16(28682), + 151: uint16(29185), + 152: uint16(29183), + 153: uint16(29177), + 154: uint16(29187), + 155: uint16(29181), + 156: uint16(29558), + }, + 79: { + 0: uint16(29880), + 1: uint16(29888), + 2: uint16(29877), + 3: uint16(29889), + 4: uint16(29886), + 5: uint16(29878), + 6: uint16(29883), + 7: uint16(29890), + 8: uint16(29972), + 9: uint16(29971), + 10: uint16(30300), + 11: uint16(30308), + 12: uint16(30297), + 13: uint16(30288), + 14: uint16(30291), + 15: uint16(30295), + 16: uint16(30298), + 17: uint16(30374), + 18: uint16(30397), + 19: uint16(30444), + 20: uint16(30658), + 21: uint16(30650), + 22: uint16(30975), + 23: uint16(30988), + 24: uint16(30995), + 25: uint16(30996), + 26: uint16(30985), + 27: uint16(30992), + 28: uint16(30994), + 29: uint16(30993), + 30: uint16(31149), + 31: uint16(31148), + 32: uint16(31327), + 33: uint16(31772), + 34: uint16(31785), + 35: uint16(31769), + 36: uint16(31776), + 37: uint16(31775), + 38: uint16(31789), + 39: uint16(31773), + 40: uint16(31782), + 41: uint16(31784), + 42: uint16(31778), + 43: uint16(31781), + 44: uint16(31792), + 45: uint16(32348), + 46: uint16(32336), + 47: uint16(32342), + 48: uint16(32355), + 49: uint16(32344), + 50: uint16(32354), + 51: uint16(32351), + 52: uint16(32337), + 53: uint16(32352), + 54: uint16(32343), + 55: uint16(32339), + 56: uint16(32693), + 57: uint16(32691), + 58: uint16(32759), + 59: uint16(32760), + 60: uint16(32885), + 61: uint16(33233), + 62: uint16(33234), + 63: uint16(33232), + 64: uint16(33375), + 65: uint16(33374), + 66: uint16(34228), + 67: uint16(34246), + 68: uint16(34240), + 69: uint16(34243), + 70: uint16(34242), + 71: uint16(34227), + 72: uint16(34229), + 73: uint16(34237), + 74: uint16(34247), + 75: uint16(34244), + 76: uint16(34239), + 77: uint16(34251), + 78: uint16(34254), + 79: uint16(34248), + 80: uint16(34245), + 81: uint16(34225), + 82: uint16(34230), + 83: uint16(34258), + 84: uint16(34340), + 85: uint16(34232), + 86: uint16(34231), + 87: uint16(34238), + 88: uint16(34409), + 89: uint16(34791), + 90: uint16(34790), + 91: uint16(34786), + 92: uint16(34779), + 93: uint16(34795), + 94: uint16(34794), + 95: uint16(34789), + 96: uint16(34783), + 97: uint16(34803), + 98: uint16(34788), + 99: uint16(34772), + 100: uint16(34780), + 101: uint16(34771), + 102: uint16(34797), + 103: uint16(34776), + 104: uint16(34787), + 105: uint16(34724), + 106: uint16(34775), + 107: uint16(34777), + 108: uint16(34817), + 109: uint16(34804), + 110: uint16(34792), + 111: uint16(34781), + 112: uint16(35155), + 113: uint16(35147), + 114: uint16(35151), + 115: uint16(35148), + 116: uint16(35142), + 117: uint16(35152), + 118: uint16(35153), + 119: uint16(35145), + 120: uint16(35626), + 121: uint16(35623), + 122: uint16(35619), + 123: uint16(35635), + 124: uint16(35632), + 125: uint16(35637), + 126: uint16(35655), + 127: uint16(35631), + 128: uint16(35644), + 129: uint16(35646), + 130: uint16(35633), + 131: uint16(35621), + 132: uint16(35639), + 133: uint16(35622), + 134: uint16(35638), + 135: uint16(35630), + 136: uint16(35620), + 137: uint16(35643), + 138: uint16(35645), + 139: uint16(35642), + 140: uint16(35906), + 141: uint16(35957), + 142: uint16(35993), + 143: uint16(35992), + 144: uint16(35991), + 145: uint16(36094), + 146: uint16(36100), + 147: uint16(36098), + 148: uint16(36096), + 149: uint16(36444), + 150: uint16(36450), + 151: uint16(36448), + 152: uint16(36439), + 153: uint16(36438), + 154: uint16(36446), + 155: uint16(36453), + 156: uint16(36455), + }, + 80: { + 0: uint16(36443), + 1: uint16(36442), + 2: uint16(36449), + 3: uint16(36445), + 4: uint16(36457), + 5: uint16(36436), + 6: uint16(36678), + 7: uint16(36679), + 8: uint16(36680), + 9: uint16(36683), + 10: uint16(37160), + 11: uint16(37178), + 12: uint16(37179), + 13: uint16(37182), + 14: uint16(37288), + 15: uint16(37285), + 16: uint16(37287), + 17: uint16(37295), + 18: uint16(37290), + 19: uint16(37813), + 20: uint16(37772), + 21: uint16(37778), + 22: uint16(37815), + 23: uint16(37787), + 24: uint16(37789), + 25: uint16(37769), + 26: uint16(37799), + 27: uint16(37774), + 28: uint16(37802), + 29: uint16(37790), + 30: uint16(37798), + 31: uint16(37781), + 32: uint16(37768), + 33: uint16(37785), + 34: uint16(37791), + 35: uint16(37773), + 36: uint16(37809), + 37: uint16(37777), + 38: uint16(37810), + 39: uint16(37796), + 40: uint16(37800), + 41: uint16(37812), + 42: uint16(37795), + 43: uint16(37797), + 44: uint16(38354), + 45: uint16(38355), + 46: uint16(38353), + 47: uint16(38579), + 48: uint16(38615), + 49: uint16(38618), + 50: uint16(24002), + 51: uint16(38623), + 52: uint16(38616), + 53: uint16(38621), + 54: uint16(38691), + 55: uint16(38690), + 56: uint16(38693), + 57: uint16(38828), + 58: uint16(38830), + 59: uint16(38824), + 60: uint16(38827), + 61: uint16(38820), + 62: uint16(38826), + 63: uint16(38818), + 64: uint16(38821), + 65: uint16(38871), + 66: uint16(38873), + 67: uint16(38870), + 68: uint16(38872), + 69: uint16(38906), + 70: uint16(38992), + 71: uint16(38993), + 72: uint16(38994), + 73: uint16(39096), + 74: uint16(39233), + 75: uint16(39228), + 76: uint16(39226), + 77: uint16(39439), + 78: uint16(39435), + 79: uint16(39433), + 80: uint16(39437), + 81: uint16(39428), + 82: uint16(39441), + 83: uint16(39434), + 84: uint16(39429), + 85: uint16(39431), + 86: uint16(39430), + 87: uint16(39616), + 88: uint16(39644), + 89: uint16(39688), + 90: uint16(39684), + 91: uint16(39685), + 92: uint16(39721), + 93: uint16(39733), + 94: uint16(39754), + 95: uint16(39756), + 96: uint16(39755), + 97: uint16(39879), + 98: uint16(39878), + 99: uint16(39875), + 100: uint16(39871), + 101: uint16(39873), + 102: uint16(39861), + 103: uint16(39864), + 104: uint16(39891), + 105: uint16(39862), + 106: uint16(39876), + 107: uint16(39865), + 108: uint16(39869), + 109: uint16(40284), + 110: uint16(40275), + 111: uint16(40271), + 112: uint16(40266), + 113: uint16(40283), + 114: uint16(40267), + 115: uint16(40281), + 116: uint16(40278), + 117: uint16(40268), + 118: uint16(40279), + 119: uint16(40274), + 120: uint16(40276), + 121: uint16(40287), + 122: uint16(40280), + 123: uint16(40282), + 124: uint16(40590), + 125: uint16(40588), + 126: uint16(40671), + 127: uint16(40705), + 128: uint16(40704), + 129: uint16(40726), + 130: uint16(40741), + 131: uint16(40747), + 132: uint16(40746), + 133: uint16(40745), + 134: uint16(40744), + 135: uint16(40780), + 136: uint16(40789), + 137: uint16(20788), + 138: uint16(20789), + 139: uint16(21142), + 140: uint16(21239), + 141: uint16(21428), + 142: uint16(22187), + 143: uint16(22189), + 144: uint16(22182), + 145: uint16(22183), + 146: uint16(22186), + 147: uint16(22188), + 148: uint16(22746), + 149: uint16(22749), + 150: uint16(22747), + 151: uint16(22802), + 152: uint16(23357), + 153: uint16(23358), + 154: uint16(23359), + 155: uint16(24003), + 156: uint16(24176), + }, + 81: { + 0: uint16(24511), + 1: uint16(25083), + 2: uint16(25863), + 3: uint16(25872), + 4: uint16(25869), + 5: uint16(25865), + 6: uint16(25868), + 7: uint16(25870), + 8: uint16(25988), + 9: uint16(26078), + 10: uint16(26077), + 11: uint16(26334), + 12: uint16(27367), + 13: uint16(27360), + 14: uint16(27340), + 15: uint16(27345), + 16: uint16(27353), + 17: uint16(27339), + 18: uint16(27359), + 19: uint16(27356), + 20: uint16(27344), + 21: uint16(27371), + 22: uint16(27343), + 23: uint16(27341), + 24: uint16(27358), + 25: uint16(27488), + 26: uint16(27568), + 27: uint16(27660), + 28: uint16(28697), + 29: uint16(28711), + 30: uint16(28704), + 31: uint16(28694), + 32: uint16(28715), + 33: uint16(28705), + 34: uint16(28706), + 35: uint16(28707), + 36: uint16(28713), + 37: uint16(28695), + 38: uint16(28708), + 39: uint16(28700), + 40: uint16(28714), + 41: uint16(29196), + 42: uint16(29194), + 43: uint16(29191), + 44: uint16(29186), + 45: uint16(29189), + 46: uint16(29349), + 47: uint16(29350), + 48: uint16(29348), + 49: uint16(29347), + 50: uint16(29345), + 51: uint16(29899), + 52: uint16(29893), + 53: uint16(29879), + 54: uint16(29891), + 55: uint16(29974), + 56: uint16(30304), + 57: uint16(30665), + 58: uint16(30666), + 59: uint16(30660), + 60: uint16(30705), + 61: uint16(31005), + 62: uint16(31003), + 63: uint16(31009), + 64: uint16(31004), + 65: uint16(30999), + 66: uint16(31006), + 67: uint16(31152), + 68: uint16(31335), + 69: uint16(31336), + 70: uint16(31795), + 71: uint16(31804), + 72: uint16(31801), + 73: uint16(31788), + 74: uint16(31803), + 75: uint16(31980), + 76: uint16(31978), + 77: uint16(32374), + 78: uint16(32373), + 79: uint16(32376), + 80: uint16(32368), + 81: uint16(32375), + 82: uint16(32367), + 83: uint16(32378), + 84: uint16(32370), + 85: uint16(32372), + 86: uint16(32360), + 87: uint16(32587), + 88: uint16(32586), + 89: uint16(32643), + 90: uint16(32646), + 91: uint16(32695), + 92: uint16(32765), + 93: uint16(32766), + 94: uint16(32888), + 95: uint16(33239), + 96: uint16(33237), + 97: uint16(33380), + 98: uint16(33377), + 99: uint16(33379), + 100: uint16(34283), + 101: uint16(34289), + 102: uint16(34285), + 103: uint16(34265), + 104: uint16(34273), + 105: uint16(34280), + 106: uint16(34266), + 107: uint16(34263), + 108: uint16(34284), + 109: uint16(34290), + 110: uint16(34296), + 111: uint16(34264), + 112: uint16(34271), + 113: uint16(34275), + 114: uint16(34268), + 115: uint16(34257), + 116: uint16(34288), + 117: uint16(34278), + 118: uint16(34287), + 119: uint16(34270), + 120: uint16(34274), + 121: uint16(34816), + 122: uint16(34810), + 123: uint16(34819), + 124: uint16(34806), + 125: uint16(34807), + 126: uint16(34825), + 127: uint16(34828), + 128: uint16(34827), + 129: uint16(34822), + 130: uint16(34812), + 131: uint16(34824), + 132: uint16(34815), + 133: uint16(34826), + 134: uint16(34818), + 135: uint16(35170), + 136: uint16(35162), + 137: uint16(35163), + 138: uint16(35159), + 139: uint16(35169), + 140: uint16(35164), + 141: uint16(35160), + 142: uint16(35165), + 143: uint16(35161), + 144: uint16(35208), + 145: uint16(35255), + 146: uint16(35254), + 147: uint16(35318), + 148: uint16(35664), + 149: uint16(35656), + 150: uint16(35658), + 151: uint16(35648), + 152: uint16(35667), + 153: uint16(35670), + 154: uint16(35668), + 155: uint16(35659), + 156: uint16(35669), + }, + 82: { + 0: uint16(35665), + 1: uint16(35650), + 2: uint16(35666), + 3: uint16(35671), + 4: uint16(35907), + 5: uint16(35959), + 6: uint16(35958), + 7: uint16(35994), + 8: uint16(36102), + 9: uint16(36103), + 10: uint16(36105), + 11: uint16(36268), + 12: uint16(36266), + 13: uint16(36269), + 14: uint16(36267), + 15: uint16(36461), + 16: uint16(36472), + 17: uint16(36467), + 18: uint16(36458), + 19: uint16(36463), + 20: uint16(36475), + 21: uint16(36546), + 22: uint16(36690), + 23: uint16(36689), + 24: uint16(36687), + 25: uint16(36688), + 26: uint16(36691), + 27: uint16(36788), + 28: uint16(37184), + 29: uint16(37183), + 30: uint16(37296), + 31: uint16(37293), + 32: uint16(37854), + 33: uint16(37831), + 34: uint16(37839), + 35: uint16(37826), + 36: uint16(37850), + 37: uint16(37840), + 38: uint16(37881), + 39: uint16(37868), + 40: uint16(37836), + 41: uint16(37849), + 42: uint16(37801), + 43: uint16(37862), + 44: uint16(37834), + 45: uint16(37844), + 46: uint16(37870), + 47: uint16(37859), + 48: uint16(37845), + 49: uint16(37828), + 50: uint16(37838), + 51: uint16(37824), + 52: uint16(37842), + 53: uint16(37863), + 54: uint16(38269), + 55: uint16(38362), + 56: uint16(38363), + 57: uint16(38625), + 58: uint16(38697), + 59: uint16(38699), + 60: uint16(38700), + 61: uint16(38696), + 62: uint16(38694), + 63: uint16(38835), + 64: uint16(38839), + 65: uint16(38838), + 66: uint16(38877), + 67: uint16(38878), + 68: uint16(38879), + 69: uint16(39004), + 70: uint16(39001), + 71: uint16(39005), + 72: uint16(38999), + 73: uint16(39103), + 74: uint16(39101), + 75: uint16(39099), + 76: uint16(39102), + 77: uint16(39240), + 78: uint16(39239), + 79: uint16(39235), + 80: uint16(39334), + 81: uint16(39335), + 82: uint16(39450), + 83: uint16(39445), + 84: uint16(39461), + 85: uint16(39453), + 86: uint16(39460), + 87: uint16(39451), + 88: uint16(39458), + 89: uint16(39456), + 90: uint16(39463), + 91: uint16(39459), + 92: uint16(39454), + 93: uint16(39452), + 94: uint16(39444), + 95: uint16(39618), + 96: uint16(39691), + 97: uint16(39690), + 98: uint16(39694), + 99: uint16(39692), + 100: uint16(39735), + 101: uint16(39914), + 102: uint16(39915), + 103: uint16(39904), + 104: uint16(39902), + 105: uint16(39908), + 106: uint16(39910), + 107: uint16(39906), + 108: uint16(39920), + 109: uint16(39892), + 110: uint16(39895), + 111: uint16(39916), + 112: uint16(39900), + 113: uint16(39897), + 114: uint16(39909), + 115: uint16(39893), + 116: uint16(39905), + 117: uint16(39898), + 118: uint16(40311), + 119: uint16(40321), + 120: uint16(40330), + 121: uint16(40324), + 122: uint16(40328), + 123: uint16(40305), + 124: uint16(40320), + 125: uint16(40312), + 126: uint16(40326), + 127: uint16(40331), + 128: uint16(40332), + 129: uint16(40317), + 130: uint16(40299), + 131: uint16(40308), + 132: uint16(40309), + 133: uint16(40304), + 134: uint16(40297), + 135: uint16(40325), + 136: uint16(40307), + 137: uint16(40315), + 138: uint16(40322), + 139: uint16(40303), + 140: uint16(40313), + 141: uint16(40319), + 142: uint16(40327), + 143: uint16(40296), + 144: uint16(40596), + 145: uint16(40593), + 146: uint16(40640), + 147: uint16(40700), + 148: uint16(40749), + 149: uint16(40768), + 150: uint16(40769), + 151: uint16(40781), + 152: uint16(40790), + 153: uint16(40791), + 154: uint16(40792), + 155: uint16(21303), + 156: uint16(22194), + }, + 83: { + 0: uint16(22197), + 1: uint16(22195), + 2: uint16(22755), + 3: uint16(23365), + 4: uint16(24006), + 5: uint16(24007), + 6: uint16(24302), + 7: uint16(24303), + 8: uint16(24512), + 9: uint16(24513), + 10: uint16(25081), + 11: uint16(25879), + 12: uint16(25878), + 13: uint16(25877), + 14: uint16(25875), + 15: uint16(26079), + 16: uint16(26344), + 17: uint16(26339), + 18: uint16(26340), + 19: uint16(27379), + 20: uint16(27376), + 21: uint16(27370), + 22: uint16(27368), + 23: uint16(27385), + 24: uint16(27377), + 25: uint16(27374), + 26: uint16(27375), + 27: uint16(28732), + 28: uint16(28725), + 29: uint16(28719), + 30: uint16(28727), + 31: uint16(28724), + 32: uint16(28721), + 33: uint16(28738), + 34: uint16(28728), + 35: uint16(28735), + 36: uint16(28730), + 37: uint16(28729), + 38: uint16(28736), + 39: uint16(28731), + 40: uint16(28723), + 41: uint16(28737), + 42: uint16(29203), + 43: uint16(29204), + 44: uint16(29352), + 45: uint16(29565), + 46: uint16(29564), + 47: uint16(29882), + 48: uint16(30379), + 49: uint16(30378), + 50: uint16(30398), + 51: uint16(30445), + 52: uint16(30668), + 53: uint16(30670), + 54: uint16(30671), + 55: uint16(30669), + 56: uint16(30706), + 57: uint16(31013), + 58: uint16(31011), + 59: uint16(31015), + 60: uint16(31016), + 61: uint16(31012), + 62: uint16(31017), + 63: uint16(31154), + 64: uint16(31342), + 65: uint16(31340), + 66: uint16(31341), + 67: uint16(31479), + 68: uint16(31817), + 69: uint16(31816), + 70: uint16(31818), + 71: uint16(31815), + 72: uint16(31813), + 73: uint16(31982), + 74: uint16(32379), + 75: uint16(32382), + 76: uint16(32385), + 77: uint16(32384), + 78: uint16(32698), + 79: uint16(32767), + 80: uint16(32889), + 81: uint16(33243), + 82: uint16(33241), + 83: uint16(33291), + 84: uint16(33384), + 85: uint16(33385), + 86: uint16(34338), + 87: uint16(34303), + 88: uint16(34305), + 89: uint16(34302), + 90: uint16(34331), + 91: uint16(34304), + 92: uint16(34294), + 93: uint16(34308), + 94: uint16(34313), + 95: uint16(34309), + 96: uint16(34316), + 97: uint16(34301), + 98: uint16(34841), + 99: uint16(34832), + 100: uint16(34833), + 101: uint16(34839), + 102: uint16(34835), + 103: uint16(34838), + 104: uint16(35171), + 105: uint16(35174), + 106: uint16(35257), + 107: uint16(35319), + 108: uint16(35680), + 109: uint16(35690), + 110: uint16(35677), + 111: uint16(35688), + 112: uint16(35683), + 113: uint16(35685), + 114: uint16(35687), + 115: uint16(35693), + 116: uint16(36270), + 117: uint16(36486), + 118: uint16(36488), + 119: uint16(36484), + 120: uint16(36697), + 121: uint16(36694), + 122: uint16(36695), + 123: uint16(36693), + 124: uint16(36696), + 125: uint16(36698), + 126: uint16(37005), + 127: uint16(37187), + 128: uint16(37185), + 129: uint16(37303), + 130: uint16(37301), + 131: uint16(37298), + 132: uint16(37299), + 133: uint16(37899), + 134: uint16(37907), + 135: uint16(37883), + 136: uint16(37920), + 137: uint16(37903), + 138: uint16(37908), + 139: uint16(37886), + 140: uint16(37909), + 141: uint16(37904), + 142: uint16(37928), + 143: uint16(37913), + 144: uint16(37901), + 145: uint16(37877), + 146: uint16(37888), + 147: uint16(37879), + 148: uint16(37895), + 149: uint16(37902), + 150: uint16(37910), + 151: uint16(37906), + 152: uint16(37882), + 153: uint16(37897), + 154: uint16(37880), + 155: uint16(37898), + 156: uint16(37887), + }, + 84: { + 0: uint16(37884), + 1: uint16(37900), + 2: uint16(37878), + 3: uint16(37905), + 4: uint16(37894), + 5: uint16(38366), + 6: uint16(38368), + 7: uint16(38367), + 8: uint16(38702), + 9: uint16(38703), + 10: uint16(38841), + 11: uint16(38843), + 12: uint16(38909), + 13: uint16(38910), + 14: uint16(39008), + 15: uint16(39010), + 16: uint16(39011), + 17: uint16(39007), + 18: uint16(39105), + 19: uint16(39106), + 20: uint16(39248), + 21: uint16(39246), + 22: uint16(39257), + 23: uint16(39244), + 24: uint16(39243), + 25: uint16(39251), + 26: uint16(39474), + 27: uint16(39476), + 28: uint16(39473), + 29: uint16(39468), + 30: uint16(39466), + 31: uint16(39478), + 32: uint16(39465), + 33: uint16(39470), + 34: uint16(39480), + 35: uint16(39469), + 36: uint16(39623), + 37: uint16(39626), + 38: uint16(39622), + 39: uint16(39696), + 40: uint16(39698), + 41: uint16(39697), + 42: uint16(39947), + 43: uint16(39944), + 44: uint16(39927), + 45: uint16(39941), + 46: uint16(39954), + 47: uint16(39928), + 48: uint16(40000), + 49: uint16(39943), + 50: uint16(39950), + 51: uint16(39942), + 52: uint16(39959), + 53: uint16(39956), + 54: uint16(39945), + 55: uint16(40351), + 56: uint16(40345), + 57: uint16(40356), + 58: uint16(40349), + 59: uint16(40338), + 60: uint16(40344), + 61: uint16(40336), + 62: uint16(40347), + 63: uint16(40352), + 64: uint16(40340), + 65: uint16(40348), + 66: uint16(40362), + 67: uint16(40343), + 68: uint16(40353), + 69: uint16(40346), + 70: uint16(40354), + 71: uint16(40360), + 72: uint16(40350), + 73: uint16(40355), + 74: uint16(40383), + 75: uint16(40361), + 76: uint16(40342), + 77: uint16(40358), + 78: uint16(40359), + 79: uint16(40601), + 80: uint16(40603), + 81: uint16(40602), + 82: uint16(40677), + 83: uint16(40676), + 84: uint16(40679), + 85: uint16(40678), + 86: uint16(40752), + 87: uint16(40750), + 88: uint16(40795), + 89: uint16(40800), + 90: uint16(40798), + 91: uint16(40797), + 92: uint16(40793), + 93: uint16(40849), + 94: uint16(20794), + 95: uint16(20793), + 96: uint16(21144), + 97: uint16(21143), + 98: uint16(22211), + 99: uint16(22205), + 100: uint16(22206), + 101: uint16(23368), + 102: uint16(23367), + 103: uint16(24011), + 104: uint16(24015), + 105: uint16(24305), + 106: uint16(25085), + 107: uint16(25883), + 108: uint16(27394), + 109: uint16(27388), + 110: uint16(27395), + 111: uint16(27384), + 112: uint16(27392), + 113: uint16(28739), + 114: uint16(28740), + 115: uint16(28746), + 116: uint16(28744), + 117: uint16(28745), + 118: uint16(28741), + 119: uint16(28742), + 120: uint16(29213), + 121: uint16(29210), + 122: uint16(29209), + 123: uint16(29566), + 124: uint16(29975), + 125: uint16(30314), + 126: uint16(30672), + 127: uint16(31021), + 128: uint16(31025), + 129: uint16(31023), + 130: uint16(31828), + 131: uint16(31827), + 132: uint16(31986), + 133: uint16(32394), + 134: uint16(32391), + 135: uint16(32392), + 136: uint16(32395), + 137: uint16(32390), + 138: uint16(32397), + 139: uint16(32589), + 140: uint16(32699), + 141: uint16(32816), + 142: uint16(33245), + 143: uint16(34328), + 144: uint16(34346), + 145: uint16(34342), + 146: uint16(34335), + 147: uint16(34339), + 148: uint16(34332), + 149: uint16(34329), + 150: uint16(34343), + 151: uint16(34350), + 152: uint16(34337), + 153: uint16(34336), + 154: uint16(34345), + 155: uint16(34334), + 156: uint16(34341), + }, + 85: { + 0: uint16(34857), + 1: uint16(34845), + 2: uint16(34843), + 3: uint16(34848), + 4: uint16(34852), + 5: uint16(34844), + 6: uint16(34859), + 7: uint16(34890), + 8: uint16(35181), + 9: uint16(35177), + 10: uint16(35182), + 11: uint16(35179), + 12: uint16(35322), + 13: uint16(35705), + 14: uint16(35704), + 15: uint16(35653), + 16: uint16(35706), + 17: uint16(35707), + 18: uint16(36112), + 19: uint16(36116), + 20: uint16(36271), + 21: uint16(36494), + 22: uint16(36492), + 23: uint16(36702), + 24: uint16(36699), + 25: uint16(36701), + 26: uint16(37190), + 27: uint16(37188), + 28: uint16(37189), + 29: uint16(37305), + 30: uint16(37951), + 31: uint16(37947), + 32: uint16(37942), + 33: uint16(37929), + 34: uint16(37949), + 35: uint16(37948), + 36: uint16(37936), + 37: uint16(37945), + 38: uint16(37930), + 39: uint16(37943), + 40: uint16(37932), + 41: uint16(37952), + 42: uint16(37937), + 43: uint16(38373), + 44: uint16(38372), + 45: uint16(38371), + 46: uint16(38709), + 47: uint16(38714), + 48: uint16(38847), + 49: uint16(38881), + 50: uint16(39012), + 51: uint16(39113), + 52: uint16(39110), + 53: uint16(39104), + 54: uint16(39256), + 55: uint16(39254), + 56: uint16(39481), + 57: uint16(39485), + 58: uint16(39494), + 59: uint16(39492), + 60: uint16(39490), + 61: uint16(39489), + 62: uint16(39482), + 63: uint16(39487), + 64: uint16(39629), + 65: uint16(39701), + 66: uint16(39703), + 67: uint16(39704), + 68: uint16(39702), + 69: uint16(39738), + 70: uint16(39762), + 71: uint16(39979), + 72: uint16(39965), + 73: uint16(39964), + 74: uint16(39980), + 75: uint16(39971), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39972), + 79: uint16(39969), + 80: uint16(40375), + 81: uint16(40374), + 82: uint16(40380), + 83: uint16(40385), + 84: uint16(40391), + 85: uint16(40394), + 86: uint16(40399), + 87: uint16(40382), + 88: uint16(40389), + 89: uint16(40387), + 90: uint16(40379), + 91: uint16(40373), + 92: uint16(40398), + 93: uint16(40377), + 94: uint16(40378), + 95: uint16(40364), + 96: uint16(40392), + 97: uint16(40369), + 98: uint16(40365), + 99: uint16(40396), + 100: uint16(40371), + 101: uint16(40397), + 102: uint16(40370), + 103: uint16(40570), + 104: uint16(40604), + 105: uint16(40683), + 106: uint16(40686), + 107: uint16(40685), + 108: uint16(40731), + 109: uint16(40728), + 110: uint16(40730), + 111: uint16(40753), + 112: uint16(40782), + 113: uint16(40805), + 114: uint16(40804), + 115: uint16(40850), + 116: uint16(20153), + 117: uint16(22214), + 118: uint16(22213), + 119: uint16(22219), + 120: uint16(22897), + 121: uint16(23371), + 122: uint16(23372), + 123: uint16(24021), + 124: uint16(24017), + 125: uint16(24306), + 126: uint16(25889), + 127: uint16(25888), + 128: uint16(25894), + 129: uint16(25890), + 130: uint16(27403), + 131: uint16(27400), + 132: uint16(27401), + 133: uint16(27661), + 134: uint16(28757), + 135: uint16(28758), + 136: uint16(28759), + 137: uint16(28754), + 138: uint16(29214), + 139: uint16(29215), + 140: uint16(29353), + 141: uint16(29567), + 142: uint16(29912), + 143: uint16(29909), + 144: uint16(29913), + 145: uint16(29911), + 146: uint16(30317), + 147: uint16(30381), + 148: uint16(31029), + 149: uint16(31156), + 150: uint16(31344), + 151: uint16(31345), + 152: uint16(31831), + 153: uint16(31836), + 154: uint16(31833), + 155: uint16(31835), + 156: uint16(31834), + }, + 86: { + 0: uint16(31988), + 1: uint16(31985), + 2: uint16(32401), + 3: uint16(32591), + 4: uint16(32647), + 5: uint16(33246), + 6: uint16(33387), + 7: uint16(34356), + 8: uint16(34357), + 9: uint16(34355), + 10: uint16(34348), + 11: uint16(34354), + 12: uint16(34358), + 13: uint16(34860), + 14: uint16(34856), + 15: uint16(34854), + 16: uint16(34858), + 17: uint16(34853), + 18: uint16(35185), + 19: uint16(35263), + 20: uint16(35262), + 21: uint16(35323), + 22: uint16(35710), + 23: uint16(35716), + 24: uint16(35714), + 25: uint16(35718), + 26: uint16(35717), + 27: uint16(35711), + 28: uint16(36117), + 29: uint16(36501), + 30: uint16(36500), + 31: uint16(36506), + 32: uint16(36498), + 33: uint16(36496), + 34: uint16(36502), + 35: uint16(36503), + 36: uint16(36704), + 37: uint16(36706), + 38: uint16(37191), + 39: uint16(37964), + 40: uint16(37968), + 41: uint16(37962), + 42: uint16(37963), + 43: uint16(37967), + 44: uint16(37959), + 45: uint16(37957), + 46: uint16(37960), + 47: uint16(37961), + 48: uint16(37958), + 49: uint16(38719), + 50: uint16(38883), + 51: uint16(39018), + 52: uint16(39017), + 53: uint16(39115), + 54: uint16(39252), + 55: uint16(39259), + 56: uint16(39502), + 57: uint16(39507), + 58: uint16(39508), + 59: uint16(39500), + 60: uint16(39503), + 61: uint16(39496), + 62: uint16(39498), + 63: uint16(39497), + 64: uint16(39506), + 65: uint16(39504), + 66: uint16(39632), + 67: uint16(39705), + 68: uint16(39723), + 69: uint16(39739), + 70: uint16(39766), + 71: uint16(39765), + 72: uint16(40006), + 73: uint16(40008), + 74: uint16(39999), + 75: uint16(40004), + 76: uint16(39993), + 77: uint16(39987), + 78: uint16(40001), + 79: uint16(39996), + 80: uint16(39991), + 81: uint16(39988), + 82: uint16(39986), + 83: uint16(39997), + 84: uint16(39990), + 85: uint16(40411), + 86: uint16(40402), + 87: uint16(40414), + 88: uint16(40410), + 89: uint16(40395), + 90: uint16(40400), + 91: uint16(40412), + 92: uint16(40401), + 93: uint16(40415), + 94: uint16(40425), + 95: uint16(40409), + 96: uint16(40408), + 97: uint16(40406), + 98: uint16(40437), + 99: uint16(40405), + 100: uint16(40413), + 101: uint16(40630), + 102: uint16(40688), + 103: uint16(40757), + 104: uint16(40755), + 105: uint16(40754), + 106: uint16(40770), + 107: uint16(40811), + 108: uint16(40853), + 109: uint16(40866), + 110: uint16(20797), + 111: uint16(21145), + 112: uint16(22760), + 113: uint16(22759), + 114: uint16(22898), + 115: uint16(23373), + 116: uint16(24024), + 117: uint16(34863), + 118: uint16(24399), + 119: uint16(25089), + 120: uint16(25091), + 121: uint16(25092), + 122: uint16(25897), + 123: uint16(25893), + 124: uint16(26006), + 125: uint16(26347), + 126: uint16(27409), + 127: uint16(27410), + 128: uint16(27407), + 129: uint16(27594), + 130: uint16(28763), + 131: uint16(28762), + 132: uint16(29218), + 133: uint16(29570), + 134: uint16(29569), + 135: uint16(29571), + 136: uint16(30320), + 137: uint16(30676), + 138: uint16(31847), + 139: uint16(31846), + 140: uint16(32405), + 141: uint16(33388), + 142: uint16(34362), + 143: uint16(34368), + 144: uint16(34361), + 145: uint16(34364), + 146: uint16(34353), + 147: uint16(34363), + 148: uint16(34366), + 149: uint16(34864), + 150: uint16(34866), + 151: uint16(34862), + 152: uint16(34867), + 153: uint16(35190), + 154: uint16(35188), + 155: uint16(35187), + 156: uint16(35326), + }, + 87: { + 0: uint16(35724), + 1: uint16(35726), + 2: uint16(35723), + 3: uint16(35720), + 4: uint16(35909), + 5: uint16(36121), + 6: uint16(36504), + 7: uint16(36708), + 8: uint16(36707), + 9: uint16(37308), + 10: uint16(37986), + 11: uint16(37973), + 12: uint16(37981), + 13: uint16(37975), + 14: uint16(37982), + 15: uint16(38852), + 16: uint16(38853), + 17: uint16(38912), + 18: uint16(39510), + 19: uint16(39513), + 20: uint16(39710), + 21: uint16(39711), + 22: uint16(39712), + 23: uint16(40018), + 24: uint16(40024), + 25: uint16(40016), + 26: uint16(40010), + 27: uint16(40013), + 28: uint16(40011), + 29: uint16(40021), + 30: uint16(40025), + 31: uint16(40012), + 32: uint16(40014), + 33: uint16(40443), + 34: uint16(40439), + 35: uint16(40431), + 36: uint16(40419), + 37: uint16(40427), + 38: uint16(40440), + 39: uint16(40420), + 40: uint16(40438), + 41: uint16(40417), + 42: uint16(40430), + 43: uint16(40422), + 44: uint16(40434), + 45: uint16(40432), + 46: uint16(40418), + 47: uint16(40428), + 48: uint16(40436), + 49: uint16(40435), + 50: uint16(40424), + 51: uint16(40429), + 52: uint16(40642), + 53: uint16(40656), + 54: uint16(40690), + 55: uint16(40691), + 56: uint16(40710), + 57: uint16(40732), + 58: uint16(40760), + 59: uint16(40759), + 60: uint16(40758), + 61: uint16(40771), + 62: uint16(40783), + 63: uint16(40817), + 64: uint16(40816), + 65: uint16(40814), + 66: uint16(40815), + 67: uint16(22227), + 68: uint16(22221), + 69: uint16(23374), + 70: uint16(23661), + 71: uint16(25901), + 72: uint16(26349), + 73: uint16(26350), + 74: uint16(27411), + 75: uint16(28767), + 76: uint16(28769), + 77: uint16(28765), + 78: uint16(28768), + 79: uint16(29219), + 80: uint16(29915), + 81: uint16(29925), + 82: uint16(30677), + 83: uint16(31032), + 84: uint16(31159), + 85: uint16(31158), + 86: uint16(31850), + 87: uint16(32407), + 88: uint16(32649), + 89: uint16(33389), + 90: uint16(34371), + 91: uint16(34872), + 92: uint16(34871), + 93: uint16(34869), + 94: uint16(34891), + 95: uint16(35732), + 96: uint16(35733), + 97: uint16(36510), + 98: uint16(36511), + 99: uint16(36512), + 100: uint16(36509), + 101: uint16(37310), + 102: uint16(37309), + 103: uint16(37314), + 104: uint16(37995), + 105: uint16(37992), + 106: uint16(37993), + 107: uint16(38629), + 108: uint16(38726), + 109: uint16(38723), + 110: uint16(38727), + 111: uint16(38855), + 112: uint16(38885), + 113: uint16(39518), + 114: uint16(39637), + 115: uint16(39769), + 116: uint16(40035), + 117: uint16(40039), + 118: uint16(40038), + 119: uint16(40034), + 120: uint16(40030), + 121: uint16(40032), + 122: uint16(40450), + 123: uint16(40446), + 124: uint16(40455), + 125: uint16(40451), + 126: uint16(40454), + 127: uint16(40453), + 128: uint16(40448), + 129: uint16(40449), + 130: uint16(40457), + 131: uint16(40447), + 132: uint16(40445), + 133: uint16(40452), + 134: uint16(40608), + 135: uint16(40734), + 136: uint16(40774), + 137: uint16(40820), + 138: uint16(40821), + 139: uint16(40822), + 140: uint16(22228), + 141: uint16(25902), + 142: uint16(26040), + 143: uint16(27416), + 144: uint16(27417), + 145: uint16(27415), + 146: uint16(27418), + 147: uint16(28770), + 148: uint16(29222), + 149: uint16(29354), + 150: uint16(30680), + 151: uint16(30681), + 152: uint16(31033), + 153: uint16(31849), + 154: uint16(31851), + 155: uint16(31990), + 156: uint16(32410), + }, + 88: { + 0: uint16(32408), + 1: uint16(32411), + 2: uint16(32409), + 3: uint16(33248), + 4: uint16(33249), + 5: uint16(34374), + 6: uint16(34375), + 7: uint16(34376), + 8: uint16(35193), + 9: uint16(35194), + 10: uint16(35196), + 11: uint16(35195), + 12: uint16(35327), + 13: uint16(35736), + 14: uint16(35737), + 15: uint16(36517), + 16: uint16(36516), + 17: uint16(36515), + 18: uint16(37998), + 19: uint16(37997), + 20: uint16(37999), + 21: uint16(38001), + 22: uint16(38003), + 23: uint16(38729), + 24: uint16(39026), + 25: uint16(39263), + 26: uint16(40040), + 27: uint16(40046), + 28: uint16(40045), + 29: uint16(40459), + 30: uint16(40461), + 31: uint16(40464), + 32: uint16(40463), + 33: uint16(40466), + 34: uint16(40465), + 35: uint16(40609), + 36: uint16(40693), + 37: uint16(40713), + 38: uint16(40775), + 39: uint16(40824), + 40: uint16(40827), + 41: uint16(40826), + 42: uint16(40825), + 43: uint16(22302), + 44: uint16(28774), + 45: uint16(31855), + 46: uint16(34876), + 47: uint16(36274), + 48: uint16(36518), + 49: uint16(37315), + 50: uint16(38004), + 51: uint16(38008), + 52: uint16(38006), + 53: uint16(38005), + 54: uint16(39520), + 55: uint16(40052), + 56: uint16(40051), + 57: uint16(40049), + 58: uint16(40053), + 59: uint16(40468), + 60: uint16(40467), + 61: uint16(40694), + 62: uint16(40714), + 63: uint16(40868), + 64: uint16(28776), + 65: uint16(28773), + 66: uint16(31991), + 67: uint16(34410), + 68: uint16(34878), + 69: uint16(34877), + 70: uint16(34879), + 71: uint16(35742), + 72: uint16(35996), + 73: uint16(36521), + 74: uint16(36553), + 75: uint16(38731), + 76: uint16(39027), + 77: uint16(39028), + 78: uint16(39116), + 79: uint16(39265), + 80: uint16(39339), + 81: uint16(39524), + 82: uint16(39526), + 83: uint16(39527), + 84: uint16(39716), + 85: uint16(40469), + 86: uint16(40471), + 87: uint16(40776), + 88: uint16(25095), + 89: uint16(27422), + 90: uint16(29223), + 91: uint16(34380), + 92: uint16(36520), + 93: uint16(38018), + 94: uint16(38016), + 95: uint16(38017), + 96: uint16(39529), + 97: uint16(39528), + 98: uint16(39726), + 99: uint16(40473), + 100: uint16(29225), + 101: uint16(34379), + 102: uint16(35743), + 103: uint16(38019), + 104: uint16(40057), + 105: uint16(40631), + 106: uint16(30325), + 107: uint16(39531), + 108: uint16(40058), + 109: uint16(40477), + 110: uint16(28777), + 111: uint16(28778), + 112: uint16(40612), + 113: uint16(40830), + 114: uint16(40777), + 115: uint16(40856), + 116: uint16(30849), + 117: uint16(37561), + 118: uint16(35023), + 119: uint16(22715), + 120: uint16(24658), + 121: uint16(31911), + 122: uint16(23290), + 123: uint16(9556), + 124: uint16(9574), + 125: uint16(9559), + 126: uint16(9568), + 127: uint16(9580), + 128: uint16(9571), + 129: uint16(9562), + 130: uint16(9577), + 131: uint16(9565), + 132: uint16(9554), + 133: uint16(9572), + 134: uint16(9557), + 135: uint16(9566), + 136: uint16(9578), + 137: uint16(9569), + 138: uint16(9560), + 139: uint16(9575), + 140: uint16(9563), + 141: uint16(9555), + 142: uint16(9573), + 143: uint16(9558), + 144: uint16(9567), + 145: uint16(9579), + 146: uint16(9570), + 147: uint16(9561), + 148: uint16(9576), + 149: uint16(9564), + 150: uint16(9553), + 151: uint16(9552), + 152: uint16(9581), + 153: uint16(9582), + 154: uint16(9584), + 155: uint16(9583), + 156: uint16(9619), + }, +} + +var _hkscs = [5172]uint16{ + 0: uint16(17392), + 1: uint16(19506), + 2: uint16(17923), + 3: uint16(17830), + 4: uint16(17784), + 5: uint16(29287), + 6: uint16(19831), + 7: uint16(17843), + 8: uint16(31921), + 9: uint16(19682), + 10: uint16(31941), + 11: uint16(15253), + 12: uint16(18230), + 13: uint16(18244), + 14: uint16(19527), + 15: uint16(19520), + 16: uint16(17087), + 17: uint16(13847), + 18: uint16(29522), + 19: uint16(28299), + 20: uint16(28882), + 21: uint16(19543), + 22: uint16(41809), + 23: uint16(18255), + 24: uint16(17882), + 25: uint16(19589), + 26: uint16(31852), + 27: uint16(19719), + 28: uint16(19108), + 29: uint16(18081), + 30: uint16(27427), + 31: uint16(29221), + 32: uint16(23124), + 33: uint16(6755), + 34: uint16(15878), + 35: uint16(16225), + 36: uint16(26189), + 37: uint16(22267), + 39: uint16(32149), + 40: uint16(22813), + 41: uint16(35769), + 42: uint16(15860), + 43: uint16(38708), + 44: uint16(31727), + 45: uint16(23515), + 46: uint16(7518), + 47: uint16(23204), + 48: uint16(13861), + 49: uint16(40624), + 50: uint16(23249), + 51: uint16(23479), + 52: uint16(23804), + 53: uint16(26478), + 54: uint16(34195), + 55: uint16(39237), + 56: uint16(29793), + 57: uint16(29853), + 58: uint16(14453), + 59: uint16(7507), + 60: uint16(13982), + 61: uint16(24609), + 62: uint16(16108), + 63: uint16(22750), + 64: uint16(15093), + 65: uint16(31484), + 66: uint16(40855), + 67: uint16(16737), + 68: uint16(35085), + 69: uint16(12778), + 70: uint16(2698), + 71: uint16(12894), + 72: uint16(17162), + 73: uint16(33924), + 74: uint16(40854), + 75: uint16(37935), + 76: uint16(18736), + 77: uint16(34323), + 78: uint16(22678), + 79: uint16(38730), + 80: uint16(37400), + 81: uint16(31184), + 82: uint16(31282), + 83: uint16(26208), + 84: uint16(27177), + 85: uint16(34973), + 86: uint16(29772), + 87: uint16(31685), + 88: uint16(26498), + 89: uint16(31276), + 90: uint16(21071), + 91: uint16(36934), + 92: uint16(13542), + 93: uint16(29636), + 94: uint16(23993), + 95: uint16(29894), + 96: uint16(40903), + 97: uint16(22451), + 98: uint16(18735), + 99: uint16(21580), + 100: uint16(16689), + 101: uint16(13966), + 102: uint16(22552), + 103: uint16(31346), + 104: uint16(31589), + 105: uint16(35727), + 106: uint16(18094), + 107: uint16(28296), + 108: uint16(16769), + 109: uint16(23961), + 110: uint16(31662), + 111: uint16(9404), + 112: uint16(40904), + 113: uint16(9409), + 114: uint16(9417), + 115: uint16(9420), + 116: uint16(40905), + 117: uint16(34052), + 118: uint16(13755), + 119: uint16(16564), + 120: uint16(40906), + 121: uint16(17633), + 122: uint16(44543), + 123: uint16(25281), + 124: uint16(28782), + 125: uint16(40907), + 157: uint16(12736), + 158: uint16(12737), + 159: uint16(12738), + 160: uint16(12739), + 161: uint16(12740), + 162: uint16(268), + 163: uint16(12741), + 164: uint16(209), + 165: uint16(205), + 166: uint16(12742), + 167: uint16(12743), + 168: uint16(203), + 169: uint16(8168), + 170: uint16(12744), + 171: uint16(202), + 172: uint16(12745), + 173: uint16(12746), + 174: uint16(12747), + 175: uint16(12748), + 176: uint16(270), + 177: uint16(12749), + 178: uint16(12750), + 179: uint16(256), + 180: uint16(193), + 181: uint16(461), + 182: uint16(192), + 183: uint16(274), + 184: uint16(201), + 185: uint16(282), + 186: uint16(200), + 187: uint16(332), + 188: uint16(211), + 189: uint16(465), + 190: uint16(210), + 191: uint16(56320), + 192: uint16(7870), + 193: uint16(56324), + 194: uint16(7872), + 195: uint16(202), + 196: uint16(257), + 197: uint16(225), + 198: uint16(462), + 199: uint16(224), + 200: uint16(593), + 201: uint16(275), + 202: uint16(233), + 203: uint16(283), + 204: uint16(232), + 205: uint16(299), + 206: uint16(237), + 207: uint16(464), + 208: uint16(236), + 209: uint16(333), + 210: uint16(243), + 211: uint16(466), + 212: uint16(242), + 213: uint16(363), + 214: uint16(250), + 215: uint16(468), + 216: uint16(249), + 217: uint16(470), + 218: uint16(472), + 219: uint16(474), + 220: uint16(476), + 221: uint16(252), + 222: uint16(56328), + 223: uint16(7871), + 224: uint16(56332), + 225: uint16(7873), + 226: uint16(234), + 227: uint16(609), + 228: uint16(9178), + 229: uint16(9179), + 314: uint16(41897), + 315: uint16(4421), + 317: uint16(25866), + 320: uint16(20029), + 321: uint16(28381), + 322: uint16(40270), + 323: uint16(37343), + 326: uint16(30517), + 327: uint16(25745), + 328: uint16(20250), + 329: uint16(20264), + 330: uint16(20392), + 331: uint16(20822), + 332: uint16(20852), + 333: uint16(20892), + 334: uint16(20964), + 335: uint16(21153), + 336: uint16(21160), + 337: uint16(21307), + 338: uint16(21326), + 339: uint16(21457), + 340: uint16(21464), + 341: uint16(22242), + 342: uint16(22768), + 343: uint16(22788), + 344: uint16(22791), + 345: uint16(22834), + 346: uint16(22836), + 347: uint16(23398), + 348: uint16(23454), + 349: uint16(23455), + 350: uint16(23706), + 351: uint16(24198), + 352: uint16(24635), + 353: uint16(25993), + 354: uint16(26622), + 355: uint16(26628), + 356: uint16(26725), + 357: uint16(27982), + 358: uint16(28860), + 359: uint16(30005), + 360: uint16(32420), + 361: uint16(32428), + 362: uint16(32442), + 363: uint16(32455), + 364: uint16(32463), + 365: uint16(32479), + 366: uint16(32518), + 367: uint16(32567), + 368: uint16(33402), + 369: uint16(33487), + 370: uint16(33647), + 371: uint16(35270), + 372: uint16(35774), + 373: uint16(35810), + 374: uint16(36710), + 375: uint16(36711), + 376: uint16(36718), + 377: uint16(29713), + 378: uint16(31996), + 379: uint16(32205), + 380: uint16(26950), + 381: uint16(31433), + 382: uint16(21031), + 387: uint16(37260), + 388: uint16(30904), + 389: uint16(37214), + 390: uint16(32956), + 392: uint16(36107), + 393: uint16(33014), + 394: uint16(2535), + 397: uint16(32927), + 398: uint16(40647), + 399: uint16(19661), + 400: uint16(40393), + 401: uint16(40460), + 402: uint16(19518), + 403: uint16(40438), + 404: uint16(28686), + 405: uint16(40458), + 406: uint16(41267), + 407: uint16(13761), + 409: uint16(28314), + 410: uint16(33342), + 411: uint16(29977), + 413: uint16(18705), + 414: uint16(39532), + 415: uint16(39567), + 416: uint16(40857), + 417: uint16(31111), + 418: uint16(33900), + 419: uint16(7626), + 420: uint16(1488), + 421: uint16(10982), + 422: uint16(20004), + 423: uint16(20097), + 424: uint16(20096), + 425: uint16(20103), + 426: uint16(20159), + 427: uint16(20203), + 428: uint16(20279), + 429: uint16(13388), + 430: uint16(20413), + 431: uint16(15944), + 432: uint16(20483), + 433: uint16(20616), + 434: uint16(13437), + 435: uint16(13459), + 436: uint16(13477), + 437: uint16(20870), + 438: uint16(22789), + 439: uint16(20955), + 440: uint16(20988), + 441: uint16(20997), + 442: uint16(20105), + 443: uint16(21113), + 444: uint16(21136), + 445: uint16(21287), + 446: uint16(13767), + 447: uint16(21417), + 448: uint16(13649), + 449: uint16(21424), + 450: uint16(13651), + 451: uint16(21442), + 452: uint16(21539), + 453: uint16(13677), + 454: uint16(13682), + 455: uint16(13953), + 456: uint16(21651), + 457: uint16(21667), + 458: uint16(21684), + 459: uint16(21689), + 460: uint16(21712), + 461: uint16(21743), + 462: uint16(21784), + 463: uint16(21795), + 464: uint16(21800), + 465: uint16(13720), + 466: uint16(21823), + 467: uint16(13733), + 468: uint16(13759), + 469: uint16(21975), + 470: uint16(13765), + 471: uint16(32132), + 472: uint16(21797), + 474: uint16(3138), + 475: uint16(3349), + 476: uint16(20779), + 477: uint16(21904), + 478: uint16(11462), + 479: uint16(14828), + 480: uint16(833), + 481: uint16(36422), + 482: uint16(19896), + 483: uint16(38117), + 484: uint16(16467), + 485: uint16(32958), + 486: uint16(30586), + 487: uint16(11320), + 488: uint16(14900), + 489: uint16(18389), + 490: uint16(33117), + 491: uint16(27122), + 492: uint16(19946), + 493: uint16(25821), + 494: uint16(3452), + 495: uint16(4020), + 496: uint16(3285), + 497: uint16(4340), + 498: uint16(25741), + 499: uint16(36478), + 500: uint16(3734), + 501: uint16(3083), + 502: uint16(3940), + 503: uint16(11433), + 504: uint16(33366), + 505: uint16(17619), + 507: uint16(3398), + 508: uint16(39501), + 509: uint16(33001), + 510: uint16(18420), + 511: uint16(20135), + 512: uint16(11458), + 513: uint16(39602), + 514: uint16(14951), + 515: uint16(38388), + 516: uint16(16365), + 517: uint16(13574), + 518: uint16(21191), + 519: uint16(38868), + 520: uint16(30920), + 521: uint16(11588), + 522: uint16(40302), + 523: uint16(38933), + 525: uint16(17369), + 526: uint16(24741), + 527: uint16(25780), + 528: uint16(21731), + 529: uint16(11596), + 530: uint16(11210), + 531: uint16(4215), + 532: uint16(14843), + 533: uint16(4207), + 534: uint16(26330), + 535: uint16(26390), + 536: uint16(31136), + 537: uint16(25834), + 538: uint16(20562), + 539: uint16(3139), + 540: uint16(36456), + 541: uint16(8609), + 542: uint16(35660), + 543: uint16(1841), + 545: uint16(18443), + 546: uint16(425), + 547: uint16(16378), + 548: uint16(22643), + 549: uint16(11661), + 551: uint16(17864), + 552: uint16(1276), + 553: uint16(24727), + 554: uint16(3916), + 555: uint16(3478), + 556: uint16(21881), + 557: uint16(16571), + 558: uint16(17338), + 560: uint16(19124), + 561: uint16(10854), + 562: uint16(4253), + 563: uint16(33194), + 564: uint16(39157), + 565: uint16(3484), + 566: uint16(25465), + 567: uint16(14846), + 568: uint16(10101), + 569: uint16(36288), + 570: uint16(22177), + 571: uint16(25724), + 572: uint16(15939), + 574: uint16(42497), + 575: uint16(3593), + 576: uint16(10959), + 577: uint16(11465), + 579: uint16(4296), + 580: uint16(14786), + 581: uint16(14738), + 582: uint16(14854), + 583: uint16(33435), + 584: uint16(13688), + 585: uint16(24137), + 586: uint16(8391), + 587: uint16(22098), + 588: uint16(3889), + 589: uint16(11442), + 590: uint16(38688), + 591: uint16(13500), + 592: uint16(27709), + 593: uint16(20027), + 596: uint16(30068), + 597: uint16(11915), + 598: uint16(8712), + 599: uint16(42587), + 600: uint16(36045), + 601: uint16(3706), + 602: uint16(3124), + 603: uint16(26652), + 604: uint16(32659), + 605: uint16(4303), + 606: uint16(10243), + 607: uint16(10553), + 608: uint16(13819), + 609: uint16(20963), + 610: uint16(3724), + 611: uint16(3981), + 612: uint16(3754), + 613: uint16(16275), + 614: uint16(3888), + 615: uint16(3399), + 616: uint16(4431), + 617: uint16(3660), + 619: uint16(3755), + 620: uint16(2985), + 621: uint16(3400), + 622: uint16(4288), + 623: uint16(4413), + 624: uint16(16377), + 625: uint16(9878), + 626: uint16(25650), + 627: uint16(4013), + 628: uint16(13300), + 629: uint16(30265), + 630: uint16(11214), + 631: uint16(3454), + 632: uint16(3455), + 633: uint16(11345), + 634: uint16(11349), + 635: uint16(14872), + 636: uint16(3736), + 637: uint16(4295), + 638: uint16(3886), + 639: uint16(42546), + 640: uint16(27472), + 641: uint16(36050), + 642: uint16(36249), + 643: uint16(36042), + 644: uint16(38314), + 645: uint16(21708), + 646: uint16(33476), + 647: uint16(21945), + 649: uint16(40643), + 650: uint16(39974), + 651: uint16(39606), + 652: uint16(30558), + 653: uint16(11758), + 654: uint16(28992), + 655: uint16(33133), + 656: uint16(33004), + 657: uint16(23580), + 658: uint16(25970), + 659: uint16(33076), + 660: uint16(14231), + 661: uint16(21343), + 662: uint16(32957), + 663: uint16(37302), + 664: uint16(3834), + 665: uint16(3599), + 666: uint16(3703), + 667: uint16(3835), + 668: uint16(13789), + 669: uint16(19947), + 670: uint16(13833), + 671: uint16(3286), + 672: uint16(22191), + 673: uint16(10165), + 674: uint16(4297), + 675: uint16(3600), + 676: uint16(3704), + 677: uint16(4216), + 678: uint16(4424), + 679: uint16(33287), + 680: uint16(5205), + 681: uint16(3705), + 682: uint16(20048), + 683: uint16(11684), + 684: uint16(23124), + 685: uint16(4125), + 686: uint16(4126), + 687: uint16(4341), + 688: uint16(4342), + 689: uint16(22428), + 690: uint16(3601), + 691: uint16(30356), + 692: uint16(33485), + 693: uint16(4021), + 694: uint16(3707), + 695: uint16(20862), + 696: uint16(14083), + 697: uint16(4022), + 698: uint16(4480), + 699: uint16(21208), + 700: uint16(41661), + 701: uint16(18906), + 702: uint16(6202), + 703: uint16(16759), + 704: uint16(33404), + 705: uint16(22681), + 706: uint16(21096), + 707: uint16(13850), + 708: uint16(22333), + 709: uint16(31666), + 710: uint16(23400), + 711: uint16(18432), + 712: uint16(19244), + 713: uint16(40743), + 714: uint16(18919), + 715: uint16(39967), + 716: uint16(39821), + 717: uint16(23412), + 718: uint16(12605), + 719: uint16(22011), + 720: uint16(13810), + 721: uint16(22153), + 722: uint16(20008), + 723: uint16(22786), + 724: uint16(7105), + 725: uint16(63608), + 726: uint16(38737), + 727: uint16(134), + 728: uint16(20059), + 729: uint16(20155), + 730: uint16(13630), + 731: uint16(23587), + 732: uint16(24401), + 733: uint16(24516), + 734: uint16(14586), + 735: uint16(25164), + 736: uint16(25909), + 737: uint16(27514), + 738: uint16(27701), + 739: uint16(27706), + 740: uint16(28780), + 741: uint16(29227), + 742: uint16(20012), + 743: uint16(29357), + 744: uint16(18665), + 745: uint16(32594), + 746: uint16(31035), + 747: uint16(31993), + 748: uint16(32595), + 749: uint16(25194), + 750: uint16(13505), + 752: uint16(25419), + 753: uint16(32770), + 754: uint16(32896), + 755: uint16(26130), + 756: uint16(26961), + 757: uint16(21341), + 758: uint16(34916), + 759: uint16(35265), + 760: uint16(30898), + 761: uint16(35744), + 762: uint16(36125), + 763: uint16(38021), + 764: uint16(38264), + 765: uint16(38271), + 766: uint16(38376), + 767: uint16(36367), + 768: uint16(38886), + 769: uint16(39029), + 770: uint16(39118), + 771: uint16(39134), + 772: uint16(39267), + 773: uint16(38928), + 774: uint16(40060), + 775: uint16(40479), + 776: uint16(40644), + 777: uint16(27503), + 778: uint16(63751), + 779: uint16(20023), + 780: uint16(135), + 781: uint16(38429), + 782: uint16(25143), + 783: uint16(38050), + 785: uint16(20539), + 786: uint16(28158), + 787: uint16(40051), + 788: uint16(40870), + 789: uint16(15817), + 790: uint16(34959), + 791: uint16(16718), + 792: uint16(28791), + 793: uint16(23797), + 794: uint16(19232), + 795: uint16(20941), + 796: uint16(13657), + 797: uint16(23856), + 798: uint16(24866), + 799: uint16(35378), + 800: uint16(36775), + 801: uint16(37366), + 802: uint16(29073), + 803: uint16(26393), + 804: uint16(29626), + 805: uint16(12929), + 806: uint16(41223), + 807: uint16(15499), + 808: uint16(6528), + 809: uint16(19216), + 810: uint16(30948), + 811: uint16(29698), + 812: uint16(20910), + 813: uint16(34575), + 814: uint16(16393), + 815: uint16(27235), + 816: uint16(41658), + 817: uint16(16931), + 818: uint16(34319), + 819: uint16(2671), + 820: uint16(31274), + 821: uint16(39239), + 822: uint16(35562), + 823: uint16(38741), + 824: uint16(28749), + 825: uint16(21284), + 826: uint16(8318), + 827: uint16(37876), + 828: uint16(30425), + 829: uint16(35299), + 830: uint16(40871), + 831: uint16(30685), + 832: uint16(20131), + 833: uint16(20464), + 834: uint16(20668), + 835: uint16(20015), + 836: uint16(20247), + 837: uint16(40872), + 838: uint16(21556), + 839: uint16(32139), + 840: uint16(22674), + 841: uint16(22736), + 842: uint16(7606), + 843: uint16(24210), + 844: uint16(24217), + 845: uint16(24514), + 846: uint16(10002), + 847: uint16(25995), + 848: uint16(13305), + 849: uint16(26905), + 850: uint16(27203), + 851: uint16(15459), + 852: uint16(27903), + 854: uint16(29184), + 855: uint16(17669), + 856: uint16(29580), + 857: uint16(16091), + 858: uint16(18963), + 859: uint16(23317), + 860: uint16(29881), + 861: uint16(35715), + 862: uint16(23716), + 863: uint16(22165), + 864: uint16(31379), + 865: uint16(31724), + 866: uint16(31939), + 867: uint16(32364), + 868: uint16(33528), + 869: uint16(34199), + 870: uint16(40873), + 871: uint16(34960), + 872: uint16(40874), + 873: uint16(36537), + 874: uint16(40875), + 875: uint16(36815), + 876: uint16(34143), + 877: uint16(39392), + 878: uint16(37409), + 879: uint16(40876), + 880: uint16(36281), + 881: uint16(5183), + 882: uint16(16497), + 883: uint16(17058), + 884: uint16(23066), + 888: uint16(39016), + 889: uint16(26475), + 890: uint16(17014), + 891: uint16(22333), + 893: uint16(34262), + 894: uint16(18811), + 895: uint16(33471), + 896: uint16(28941), + 897: uint16(19585), + 898: uint16(28020), + 899: uint16(23931), + 900: uint16(27413), + 901: uint16(28606), + 902: uint16(40877), + 903: uint16(40878), + 904: uint16(23446), + 905: uint16(40879), + 906: uint16(26343), + 907: uint16(32347), + 908: uint16(28247), + 909: uint16(31178), + 910: uint16(15752), + 911: uint16(17603), + 912: uint16(12886), + 913: uint16(10134), + 914: uint16(17306), + 915: uint16(17718), + 917: uint16(23765), + 918: uint16(15130), + 919: uint16(35577), + 920: uint16(23672), + 921: uint16(15634), + 922: uint16(13649), + 923: uint16(23928), + 924: uint16(40882), + 925: uint16(29015), + 926: uint16(17752), + 927: uint16(16620), + 928: uint16(7715), + 929: uint16(19575), + 930: uint16(14712), + 931: uint16(13386), + 932: uint16(420), + 933: uint16(27713), + 934: uint16(35532), + 935: uint16(20404), + 936: uint16(569), + 937: uint16(22975), + 938: uint16(33132), + 939: uint16(38998), + 940: uint16(39162), + 941: uint16(24379), + 942: uint16(2975), + 944: uint16(8641), + 945: uint16(35181), + 946: uint16(16642), + 947: uint16(18107), + 948: uint16(36985), + 949: uint16(16135), + 950: uint16(40883), + 951: uint16(41397), + 952: uint16(16632), + 953: uint16(14294), + 954: uint16(18167), + 955: uint16(27718), + 956: uint16(16764), + 957: uint16(34482), + 958: uint16(29695), + 959: uint16(17773), + 960: uint16(14548), + 961: uint16(21658), + 962: uint16(17761), + 963: uint16(17691), + 964: uint16(19849), + 965: uint16(19579), + 966: uint16(19830), + 967: uint16(17898), + 968: uint16(16328), + 969: uint16(19215), + 970: uint16(13921), + 971: uint16(17630), + 972: uint16(17597), + 973: uint16(16877), + 974: uint16(23870), + 975: uint16(23880), + 976: uint16(23894), + 977: uint16(15868), + 978: uint16(14351), + 979: uint16(23972), + 980: uint16(23993), + 981: uint16(14368), + 982: uint16(14392), + 983: uint16(24130), + 984: uint16(24253), + 985: uint16(24357), + 986: uint16(24451), + 987: uint16(14600), + 988: uint16(14612), + 989: uint16(14655), + 990: uint16(14669), + 991: uint16(24791), + 992: uint16(24893), + 993: uint16(23781), + 994: uint16(14729), + 995: uint16(25015), + 996: uint16(25017), + 997: uint16(25039), + 998: uint16(14776), + 999: uint16(25132), + 1000: uint16(25232), + 1001: uint16(25317), + 1002: uint16(25368), + 1003: uint16(14840), + 1004: uint16(22193), + 1005: uint16(14851), + 1006: uint16(25570), + 1007: uint16(25595), + 1008: uint16(25607), + 1009: uint16(25690), + 1010: uint16(14923), + 1011: uint16(25792), + 1012: uint16(23829), + 1013: uint16(22049), + 1014: uint16(40863), + 1015: uint16(14999), + 1016: uint16(25990), + 1017: uint16(15037), + 1018: uint16(26111), + 1019: uint16(26195), + 1020: uint16(15090), + 1021: uint16(26258), + 1022: uint16(15138), + 1023: uint16(26390), + 1024: uint16(15170), + 1025: uint16(26532), + 1026: uint16(26624), + 1027: uint16(15192), + 1028: uint16(26698), + 1029: uint16(26756), + 1030: uint16(15218), + 1031: uint16(15217), + 1032: uint16(15227), + 1033: uint16(26889), + 1034: uint16(26947), + 1035: uint16(29276), + 1036: uint16(26980), + 1037: uint16(27039), + 1038: uint16(27013), + 1039: uint16(15292), + 1040: uint16(27094), + 1041: uint16(15325), + 1042: uint16(27237), + 1043: uint16(27252), + 1044: uint16(27249), + 1045: uint16(27266), + 1046: uint16(15340), + 1047: uint16(27289), + 1048: uint16(15346), + 1049: uint16(27307), + 1050: uint16(27317), + 1051: uint16(27348), + 1052: uint16(27382), + 1053: uint16(27521), + 1054: uint16(27585), + 1055: uint16(27626), + 1056: uint16(27765), + 1057: uint16(27818), + 1058: uint16(15563), + 1059: uint16(27906), + 1060: uint16(27910), + 1061: uint16(27942), + 1062: uint16(28033), + 1063: uint16(15599), + 1064: uint16(28068), + 1065: uint16(28081), + 1066: uint16(28181), + 1067: uint16(28184), + 1068: uint16(28201), + 1069: uint16(28294), + 1070: uint16(35264), + 1071: uint16(28347), + 1072: uint16(28386), + 1073: uint16(28378), + 1074: uint16(40831), + 1075: uint16(28392), + 1076: uint16(28393), + 1077: uint16(28452), + 1078: uint16(28468), + 1079: uint16(15686), + 1080: uint16(16193), + 1081: uint16(28545), + 1082: uint16(28606), + 1083: uint16(15722), + 1084: uint16(15733), + 1085: uint16(29111), + 1086: uint16(23705), + 1087: uint16(15754), + 1088: uint16(28716), + 1089: uint16(15761), + 1090: uint16(28752), + 1091: uint16(28756), + 1092: uint16(28783), + 1093: uint16(28799), + 1094: uint16(28809), + 1095: uint16(805), + 1096: uint16(17345), + 1097: uint16(13809), + 1098: uint16(3800), + 1099: uint16(16087), + 1100: uint16(22462), + 1101: uint16(28371), + 1102: uint16(28990), + 1103: uint16(22496), + 1104: uint16(13902), + 1105: uint16(27042), + 1106: uint16(35817), + 1107: uint16(23412), + 1108: uint16(31305), + 1109: uint16(22753), + 1110: uint16(38105), + 1111: uint16(31333), + 1112: uint16(31357), + 1113: uint16(22956), + 1114: uint16(31419), + 1115: uint16(31408), + 1116: uint16(31426), + 1117: uint16(31427), + 1118: uint16(29137), + 1119: uint16(25741), + 1120: uint16(16842), + 1121: uint16(31450), + 1122: uint16(31453), + 1123: uint16(31466), + 1124: uint16(16879), + 1125: uint16(21682), + 1126: uint16(23553), + 1127: uint16(31499), + 1128: uint16(31573), + 1129: uint16(31529), + 1130: uint16(21262), + 1131: uint16(23806), + 1132: uint16(31650), + 1133: uint16(31599), + 1134: uint16(33692), + 1135: uint16(23476), + 1136: uint16(27775), + 1137: uint16(31696), + 1138: uint16(33825), + 1139: uint16(31634), + 1141: uint16(23840), + 1142: uint16(15789), + 1143: uint16(23653), + 1144: uint16(33938), + 1145: uint16(31738), + 1147: uint16(31797), + 1148: uint16(23745), + 1149: uint16(31812), + 1150: uint16(31875), + 1151: uint16(18562), + 1152: uint16(31910), + 1153: uint16(26237), + 1154: uint16(17784), + 1155: uint16(31945), + 1156: uint16(31943), + 1157: uint16(31974), + 1158: uint16(31860), + 1159: uint16(31987), + 1160: uint16(31989), + 1162: uint16(32359), + 1163: uint16(17693), + 1164: uint16(28228), + 1165: uint16(32093), + 1166: uint16(28374), + 1167: uint16(29837), + 1168: uint16(32137), + 1169: uint16(32171), + 1170: uint16(28981), + 1171: uint16(32179), + 1173: uint16(16471), + 1174: uint16(24617), + 1175: uint16(32228), + 1176: uint16(15635), + 1177: uint16(32245), + 1178: uint16(6137), + 1179: uint16(32229), + 1180: uint16(33645), + 1182: uint16(24865), + 1183: uint16(24922), + 1184: uint16(32366), + 1185: uint16(32402), + 1186: uint16(17195), + 1187: uint16(37996), + 1188: uint16(32295), + 1189: uint16(32576), + 1190: uint16(32577), + 1191: uint16(32583), + 1192: uint16(31030), + 1193: uint16(25296), + 1194: uint16(39393), + 1195: uint16(32663), + 1196: uint16(25425), + 1197: uint16(32675), + 1198: uint16(5729), + 1199: uint16(104), + 1200: uint16(17756), + 1201: uint16(14182), + 1202: uint16(17667), + 1203: uint16(33594), + 1204: uint16(32762), + 1205: uint16(25737), + 1207: uint16(32776), + 1208: uint16(32797), + 1210: uint16(32815), + 1211: uint16(41095), + 1212: uint16(27843), + 1213: uint16(32827), + 1214: uint16(32828), + 1215: uint16(32865), + 1216: uint16(10004), + 1217: uint16(18825), + 1218: uint16(26150), + 1219: uint16(15843), + 1220: uint16(26344), + 1221: uint16(26405), + 1222: uint16(32935), + 1223: uint16(35400), + 1224: uint16(33031), + 1225: uint16(33050), + 1226: uint16(22704), + 1227: uint16(9974), + 1228: uint16(27775), + 1229: uint16(25752), + 1230: uint16(20408), + 1231: uint16(25831), + 1232: uint16(5258), + 1233: uint16(33304), + 1234: uint16(6238), + 1235: uint16(27219), + 1236: uint16(19045), + 1237: uint16(19093), + 1238: uint16(17530), + 1239: uint16(33321), + 1240: uint16(2829), + 1241: uint16(27218), + 1242: uint16(15742), + 1243: uint16(20473), + 1244: uint16(5373), + 1245: uint16(34018), + 1246: uint16(33634), + 1247: uint16(27402), + 1248: uint16(18855), + 1249: uint16(13616), + 1250: uint16(6003), + 1251: uint16(15864), + 1252: uint16(33450), + 1253: uint16(26907), + 1254: uint16(63892), + 1255: uint16(16859), + 1256: uint16(34123), + 1257: uint16(33488), + 1258: uint16(33562), + 1259: uint16(3606), + 1260: uint16(6068), + 1261: uint16(14017), + 1262: uint16(12669), + 1263: uint16(13658), + 1264: uint16(33403), + 1265: uint16(33506), + 1266: uint16(33560), + 1267: uint16(16011), + 1268: uint16(28067), + 1269: uint16(27397), + 1270: uint16(27543), + 1271: uint16(13774), + 1272: uint16(15807), + 1273: uint16(33565), + 1274: uint16(21996), + 1275: uint16(33669), + 1276: uint16(17675), + 1277: uint16(28069), + 1278: uint16(33708), + 1280: uint16(33747), + 1281: uint16(13438), + 1282: uint16(28372), + 1283: uint16(27223), + 1284: uint16(34138), + 1285: uint16(13462), + 1286: uint16(28226), + 1287: uint16(12015), + 1288: uint16(33880), + 1289: uint16(23524), + 1290: uint16(33905), + 1291: uint16(15827), + 1292: uint16(17636), + 1293: uint16(27303), + 1294: uint16(33866), + 1295: uint16(15541), + 1296: uint16(31064), + 1298: uint16(27542), + 1299: uint16(28279), + 1300: uint16(28227), + 1301: uint16(34014), + 1303: uint16(33681), + 1304: uint16(17568), + 1305: uint16(33939), + 1306: uint16(34020), + 1307: uint16(23697), + 1308: uint16(16960), + 1309: uint16(23744), + 1310: uint16(17731), + 1311: uint16(34100), + 1312: uint16(23282), + 1313: uint16(28313), + 1314: uint16(17703), + 1315: uint16(34163), + 1316: uint16(17686), + 1317: uint16(26559), + 1318: uint16(34326), + 1319: uint16(34341), + 1320: uint16(34363), + 1321: uint16(34241), + 1322: uint16(28808), + 1323: uint16(34306), + 1324: uint16(5506), + 1325: uint16(28877), + 1326: uint16(63922), + 1327: uint16(17770), + 1328: uint16(34344), + 1329: uint16(13896), + 1330: uint16(6306), + 1331: uint16(21495), + 1332: uint16(29594), + 1333: uint16(34430), + 1334: uint16(34673), + 1335: uint16(41208), + 1336: uint16(34798), + 1337: uint16(11303), + 1338: uint16(34737), + 1339: uint16(34778), + 1340: uint16(34831), + 1341: uint16(22113), + 1342: uint16(34412), + 1343: uint16(26710), + 1344: uint16(17935), + 1345: uint16(34885), + 1346: uint16(34886), + 1347: uint16(30176), + 1348: uint16(15801), + 1349: uint16(30180), + 1350: uint16(34910), + 1351: uint16(34972), + 1352: uint16(18011), + 1353: uint16(34996), + 1354: uint16(34997), + 1355: uint16(25537), + 1356: uint16(35013), + 1357: uint16(30583), + 1358: uint16(30479), + 1359: uint16(35207), + 1360: uint16(35210), + 1363: uint16(35239), + 1364: uint16(35260), + 1365: uint16(35365), + 1366: uint16(35303), + 1367: uint16(31012), + 1368: uint16(31421), + 1369: uint16(35484), + 1370: uint16(30611), + 1371: uint16(37374), + 1372: uint16(35472), + 1373: uint16(31321), + 1374: uint16(31465), + 1375: uint16(31546), + 1376: uint16(16271), + 1377: uint16(18195), + 1378: uint16(31544), + 1379: uint16(29052), + 1380: uint16(35596), + 1381: uint16(35615), + 1382: uint16(21552), + 1383: uint16(21861), + 1384: uint16(35647), + 1385: uint16(35660), + 1386: uint16(35661), + 1387: uint16(35497), + 1388: uint16(19066), + 1389: uint16(35728), + 1390: uint16(35739), + 1391: uint16(35503), + 1392: uint16(5855), + 1393: uint16(17941), + 1394: uint16(34895), + 1395: uint16(35995), + 1396: uint16(32084), + 1397: uint16(32143), + 1398: uint16(63956), + 1399: uint16(14117), + 1400: uint16(32083), + 1401: uint16(36054), + 1402: uint16(32152), + 1403: uint16(32189), + 1404: uint16(36114), + 1405: uint16(36099), + 1406: uint16(6416), + 1407: uint16(36059), + 1408: uint16(28764), + 1409: uint16(36113), + 1410: uint16(19657), + 1411: uint16(16080), + 1413: uint16(36265), + 1414: uint16(32770), + 1415: uint16(4116), + 1416: uint16(18826), + 1417: uint16(15228), + 1418: uint16(33212), + 1419: uint16(28940), + 1420: uint16(31463), + 1421: uint16(36525), + 1422: uint16(36534), + 1423: uint16(36547), + 1424: uint16(37588), + 1425: uint16(36633), + 1426: uint16(36653), + 1427: uint16(33637), + 1428: uint16(33810), + 1429: uint16(36773), + 1430: uint16(37635), + 1431: uint16(41631), + 1432: uint16(2640), + 1433: uint16(36787), + 1434: uint16(18730), + 1435: uint16(35294), + 1436: uint16(34109), + 1437: uint16(15803), + 1438: uint16(24312), + 1439: uint16(12898), + 1440: uint16(36857), + 1441: uint16(40980), + 1442: uint16(34492), + 1443: uint16(34049), + 1444: uint16(8997), + 1445: uint16(14720), + 1446: uint16(28375), + 1447: uint16(36919), + 1448: uint16(34108), + 1449: uint16(31422), + 1450: uint16(36961), + 1451: uint16(34156), + 1452: uint16(34315), + 1453: uint16(37032), + 1454: uint16(34579), + 1455: uint16(37060), + 1456: uint16(34534), + 1457: uint16(37038), + 1459: uint16(37223), + 1460: uint16(15088), + 1461: uint16(37289), + 1462: uint16(37316), + 1463: uint16(31916), + 1464: uint16(35123), + 1465: uint16(7817), + 1466: uint16(37390), + 1467: uint16(27807), + 1468: uint16(37441), + 1469: uint16(37474), + 1470: uint16(21945), + 1472: uint16(35526), + 1473: uint16(15515), + 1474: uint16(35596), + 1475: uint16(21979), + 1476: uint16(3377), + 1477: uint16(37676), + 1478: uint16(37739), + 1479: uint16(35553), + 1480: uint16(35819), + 1481: uint16(28815), + 1482: uint16(23235), + 1483: uint16(35554), + 1484: uint16(35557), + 1485: uint16(18789), + 1486: uint16(37444), + 1487: uint16(35820), + 1488: uint16(35897), + 1489: uint16(35839), + 1490: uint16(37747), + 1491: uint16(37979), + 1492: uint16(36540), + 1493: uint16(38277), + 1494: uint16(38310), + 1495: uint16(37926), + 1496: uint16(38304), + 1497: uint16(28662), + 1498: uint16(17081), + 1499: uint16(9850), + 1500: uint16(34520), + 1501: uint16(4732), + 1502: uint16(15918), + 1503: uint16(18911), + 1504: uint16(27676), + 1505: uint16(38523), + 1506: uint16(38550), + 1507: uint16(16748), + 1508: uint16(38563), + 1509: uint16(28373), + 1510: uint16(25050), + 1511: uint16(38582), + 1512: uint16(30965), + 1513: uint16(35552), + 1514: uint16(38589), + 1515: uint16(21452), + 1516: uint16(18849), + 1517: uint16(27832), + 1518: uint16(628), + 1519: uint16(25616), + 1520: uint16(37039), + 1521: uint16(37093), + 1522: uint16(19153), + 1523: uint16(6421), + 1524: uint16(13066), + 1525: uint16(38705), + 1526: uint16(34370), + 1527: uint16(38710), + 1528: uint16(18959), + 1529: uint16(17725), + 1530: uint16(17797), + 1531: uint16(19177), + 1532: uint16(28789), + 1533: uint16(23361), + 1534: uint16(38683), + 1536: uint16(37333), + 1537: uint16(38743), + 1538: uint16(23370), + 1539: uint16(37355), + 1540: uint16(38751), + 1541: uint16(37925), + 1542: uint16(20688), + 1543: uint16(12471), + 1544: uint16(12476), + 1545: uint16(38793), + 1546: uint16(38815), + 1547: uint16(38833), + 1548: uint16(38846), + 1549: uint16(38848), + 1550: uint16(38866), + 1551: uint16(38880), + 1552: uint16(21612), + 1553: uint16(38894), + 1554: uint16(29724), + 1555: uint16(37939), + 1557: uint16(38901), + 1558: uint16(37917), + 1559: uint16(31098), + 1560: uint16(19153), + 1561: uint16(38964), + 1562: uint16(38963), + 1563: uint16(38987), + 1564: uint16(39014), + 1565: uint16(15118), + 1566: uint16(29045), + 1567: uint16(15697), + 1568: uint16(1584), + 1569: uint16(16732), + 1570: uint16(22278), + 1571: uint16(39114), + 1572: uint16(39095), + 1573: uint16(39112), + 1574: uint16(39111), + 1575: uint16(19199), + 1576: uint16(27943), + 1577: uint16(5843), + 1578: uint16(21936), + 1579: uint16(39137), + 1580: uint16(39142), + 1581: uint16(39148), + 1582: uint16(37752), + 1583: uint16(39225), + 1584: uint16(18985), + 1585: uint16(19314), + 1586: uint16(38999), + 1587: uint16(39173), + 1588: uint16(39413), + 1589: uint16(39436), + 1590: uint16(39483), + 1591: uint16(39440), + 1592: uint16(39512), + 1593: uint16(22309), + 1594: uint16(14020), + 1595: uint16(37041), + 1596: uint16(39893), + 1597: uint16(39648), + 1598: uint16(39650), + 1599: uint16(39685), + 1600: uint16(39668), + 1601: uint16(19470), + 1602: uint16(39700), + 1603: uint16(39725), + 1604: uint16(34304), + 1605: uint16(20532), + 1606: uint16(39732), + 1607: uint16(27048), + 1608: uint16(14531), + 1609: uint16(12413), + 1610: uint16(39760), + 1611: uint16(39744), + 1612: uint16(40254), + 1613: uint16(23109), + 1614: uint16(6243), + 1615: uint16(39822), + 1616: uint16(16971), + 1617: uint16(39938), + 1618: uint16(39935), + 1619: uint16(39948), + 1620: uint16(40552), + 1621: uint16(40404), + 1622: uint16(40887), + 1623: uint16(41362), + 1624: uint16(41387), + 1625: uint16(41185), + 1626: uint16(41251), + 1627: uint16(41439), + 1628: uint16(40318), + 1629: uint16(40323), + 1630: uint16(41268), + 1631: uint16(40462), + 1632: uint16(26760), + 1633: uint16(40388), + 1634: uint16(8539), + 1635: uint16(41363), + 1636: uint16(41504), + 1637: uint16(6459), + 1638: uint16(41523), + 1639: uint16(40249), + 1640: uint16(41145), + 1641: uint16(41652), + 1642: uint16(40592), + 1643: uint16(40597), + 1644: uint16(40606), + 1645: uint16(40610), + 1646: uint16(19764), + 1647: uint16(40618), + 1648: uint16(40623), + 1649: uint16(17252), + 1650: uint16(40641), + 1651: uint16(15200), + 1652: uint16(14821), + 1653: uint16(15645), + 1654: uint16(20274), + 1655: uint16(14270), + 1656: uint16(35883), + 1657: uint16(40706), + 1658: uint16(40712), + 1659: uint16(19350), + 1660: uint16(37924), + 1661: uint16(28066), + 1662: uint16(40727), + 1664: uint16(40761), + 1665: uint16(22175), + 1666: uint16(22154), + 1667: uint16(40773), + 1668: uint16(39352), + 1669: uint16(37003), + 1670: uint16(38898), + 1671: uint16(33919), + 1672: uint16(40802), + 1673: uint16(40809), + 1674: uint16(31452), + 1675: uint16(40846), + 1676: uint16(29206), + 1677: uint16(19390), + 1678: uint16(18805), + 1679: uint16(18875), + 1680: uint16(29047), + 1681: uint16(18936), + 1682: uint16(17224), + 1683: uint16(19025), + 1684: uint16(29598), + 1685: uint16(35802), + 1686: uint16(6394), + 1687: uint16(31135), + 1688: uint16(35198), + 1689: uint16(36406), + 1690: uint16(37737), + 1691: uint16(37875), + 1692: uint16(35396), + 1693: uint16(37612), + 1694: uint16(37761), + 1695: uint16(37835), + 1696: uint16(35180), + 1697: uint16(17593), + 1698: uint16(29207), + 1699: uint16(16107), + 1700: uint16(30578), + 1701: uint16(31299), + 1702: uint16(28880), + 1703: uint16(17523), + 1704: uint16(17400), + 1705: uint16(29054), + 1706: uint16(6127), + 1707: uint16(28835), + 1708: uint16(6334), + 1709: uint16(13721), + 1710: uint16(16071), + 1711: uint16(6277), + 1712: uint16(21551), + 1713: uint16(6136), + 1714: uint16(14114), + 1715: uint16(5883), + 1716: uint16(6201), + 1717: uint16(14049), + 1718: uint16(6004), + 1719: uint16(6353), + 1720: uint16(24395), + 1721: uint16(14115), + 1722: uint16(5824), + 1723: uint16(22363), + 1724: uint16(18981), + 1725: uint16(5118), + 1726: uint16(4776), + 1727: uint16(5062), + 1728: uint16(5302), + 1729: uint16(34051), + 1730: uint16(13990), + 1732: uint16(33877), + 1733: uint16(18836), + 1734: uint16(29029), + 1735: uint16(15921), + 1736: uint16(21852), + 1737: uint16(16123), + 1738: uint16(28754), + 1739: uint16(17652), + 1740: uint16(14062), + 1741: uint16(39325), + 1742: uint16(28454), + 1743: uint16(26617), + 1744: uint16(14131), + 1745: uint16(15381), + 1746: uint16(15847), + 1747: uint16(22636), + 1748: uint16(6434), + 1749: uint16(26640), + 1750: uint16(16471), + 1751: uint16(14143), + 1752: uint16(16609), + 1753: uint16(16523), + 1754: uint16(16655), + 1755: uint16(27681), + 1756: uint16(21707), + 1757: uint16(22174), + 1758: uint16(26289), + 1759: uint16(22162), + 1760: uint16(4063), + 1761: uint16(2984), + 1762: uint16(3597), + 1763: uint16(37830), + 1764: uint16(35603), + 1765: uint16(37788), + 1766: uint16(20216), + 1767: uint16(20779), + 1768: uint16(14361), + 1769: uint16(17462), + 1770: uint16(20156), + 1771: uint16(1125), + 1772: uint16(895), + 1773: uint16(20299), + 1774: uint16(20362), + 1775: uint16(22097), + 1776: uint16(23144), + 1777: uint16(427), + 1778: uint16(971), + 1779: uint16(14745), + 1780: uint16(778), + 1781: uint16(1044), + 1782: uint16(13365), + 1783: uint16(20265), + 1784: uint16(704), + 1785: uint16(36531), + 1786: uint16(629), + 1787: uint16(35546), + 1788: uint16(524), + 1789: uint16(20120), + 1790: uint16(20685), + 1791: uint16(20749), + 1792: uint16(20386), + 1793: uint16(20227), + 1794: uint16(18958), + 1795: uint16(16010), + 1796: uint16(20290), + 1797: uint16(20526), + 1798: uint16(20588), + 1799: uint16(20609), + 1800: uint16(20428), + 1801: uint16(20453), + 1802: uint16(20568), + 1803: uint16(20732), + 1808: uint16(28278), + 1809: uint16(13717), + 1810: uint16(15929), + 1811: uint16(16063), + 1812: uint16(28018), + 1813: uint16(6276), + 1814: uint16(16009), + 1815: uint16(20904), + 1816: uint16(20931), + 1817: uint16(1504), + 1818: uint16(17629), + 1819: uint16(1187), + 1820: uint16(1170), + 1821: uint16(1169), + 1822: uint16(36218), + 1823: uint16(35484), + 1824: uint16(1806), + 1825: uint16(21081), + 1826: uint16(21156), + 1827: uint16(2163), + 1828: uint16(21217), + 1830: uint16(18042), + 1831: uint16(29068), + 1832: uint16(17292), + 1833: uint16(3104), + 1834: uint16(18860), + 1835: uint16(4324), + 1836: uint16(27089), + 1837: uint16(3613), + 1839: uint16(16094), + 1840: uint16(29849), + 1841: uint16(29716), + 1842: uint16(29782), + 1843: uint16(29592), + 1844: uint16(19342), + 1845: uint16(19132), + 1846: uint16(16525), + 1847: uint16(21456), + 1848: uint16(13700), + 1849: uint16(29199), + 1850: uint16(16585), + 1851: uint16(21940), + 1852: uint16(837), + 1853: uint16(21709), + 1854: uint16(3014), + 1855: uint16(22301), + 1856: uint16(37469), + 1857: uint16(38644), + 1858: uint16(37734), + 1859: uint16(22493), + 1860: uint16(22413), + 1861: uint16(22399), + 1862: uint16(13886), + 1863: uint16(22731), + 1864: uint16(23193), + 1865: uint16(35398), + 1866: uint16(5882), + 1867: uint16(5999), + 1868: uint16(5904), + 1869: uint16(23084), + 1870: uint16(22968), + 1871: uint16(37519), + 1872: uint16(23166), + 1873: uint16(23247), + 1874: uint16(23058), + 1875: uint16(22854), + 1876: uint16(6643), + 1877: uint16(6241), + 1878: uint16(17045), + 1879: uint16(14069), + 1880: uint16(27909), + 1881: uint16(29763), + 1882: uint16(23073), + 1883: uint16(24195), + 1884: uint16(23169), + 1885: uint16(35799), + 1886: uint16(1043), + 1887: uint16(37856), + 1888: uint16(29836), + 1889: uint16(4867), + 1890: uint16(28933), + 1891: uint16(18802), + 1892: uint16(37896), + 1893: uint16(35323), + 1894: uint16(37821), + 1895: uint16(14240), + 1896: uint16(23582), + 1897: uint16(23710), + 1898: uint16(24158), + 1899: uint16(24136), + 1900: uint16(6550), + 1901: uint16(6524), + 1902: uint16(15086), + 1903: uint16(24269), + 1904: uint16(23375), + 1905: uint16(6403), + 1906: uint16(6404), + 1907: uint16(14081), + 1908: uint16(6304), + 1909: uint16(14045), + 1910: uint16(5886), + 1911: uint16(14035), + 1912: uint16(33066), + 1913: uint16(35399), + 1914: uint16(7610), + 1915: uint16(13426), + 1916: uint16(35240), + 1917: uint16(24332), + 1918: uint16(24334), + 1919: uint16(6439), + 1920: uint16(6059), + 1921: uint16(23147), + 1922: uint16(5947), + 1923: uint16(23364), + 1924: uint16(34324), + 1925: uint16(30205), + 1926: uint16(34912), + 1927: uint16(24702), + 1928: uint16(10336), + 1929: uint16(9771), + 1930: uint16(24539), + 1931: uint16(16056), + 1932: uint16(9647), + 1933: uint16(9662), + 1934: uint16(37000), + 1935: uint16(28531), + 1936: uint16(25024), + 1937: uint16(62), + 1938: uint16(70), + 1939: uint16(9755), + 1940: uint16(24985), + 1941: uint16(24984), + 1942: uint16(24693), + 1943: uint16(11419), + 1944: uint16(11527), + 1945: uint16(18132), + 1946: uint16(37197), + 1947: uint16(25713), + 1948: uint16(18021), + 1949: uint16(11114), + 1950: uint16(14889), + 1951: uint16(11042), + 1952: uint16(13392), + 1953: uint16(39146), + 1954: uint16(11896), + 1955: uint16(25399), + 1956: uint16(42075), + 1957: uint16(25782), + 1958: uint16(25393), + 1959: uint16(25553), + 1960: uint16(18915), + 1961: uint16(11623), + 1962: uint16(25252), + 1963: uint16(11425), + 1964: uint16(25659), + 1965: uint16(25963), + 1966: uint16(26994), + 1967: uint16(15348), + 1968: uint16(12430), + 1969: uint16(12973), + 1970: uint16(18825), + 1971: uint16(12971), + 1972: uint16(21773), + 1973: uint16(13024), + 1974: uint16(6361), + 1975: uint16(37951), + 1976: uint16(26318), + 1977: uint16(12937), + 1978: uint16(12723), + 1979: uint16(15072), + 1980: uint16(16784), + 1981: uint16(21892), + 1982: uint16(35618), + 1983: uint16(21903), + 1984: uint16(5884), + 1985: uint16(21851), + 1986: uint16(21541), + 1987: uint16(30958), + 1988: uint16(12547), + 1989: uint16(6186), + 1990: uint16(12852), + 1991: uint16(13412), + 1992: uint16(12815), + 1993: uint16(12674), + 1994: uint16(17097), + 1995: uint16(26254), + 1996: uint16(27940), + 1997: uint16(26219), + 1998: uint16(19347), + 1999: uint16(26160), + 2000: uint16(30832), + 2001: uint16(7659), + 2002: uint16(26211), + 2003: uint16(13010), + 2004: uint16(13025), + 2005: uint16(26142), + 2006: uint16(22642), + 2007: uint16(14545), + 2008: uint16(14394), + 2009: uint16(14268), + 2010: uint16(15257), + 2011: uint16(14242), + 2012: uint16(13310), + 2013: uint16(29904), + 2014: uint16(15254), + 2015: uint16(26511), + 2016: uint16(17962), + 2017: uint16(26806), + 2018: uint16(26654), + 2019: uint16(15300), + 2020: uint16(27326), + 2021: uint16(14435), + 2022: uint16(14293), + 2023: uint16(17543), + 2024: uint16(27187), + 2025: uint16(27218), + 2026: uint16(27337), + 2027: uint16(27397), + 2028: uint16(6418), + 2029: uint16(25873), + 2030: uint16(26776), + 2031: uint16(27212), + 2032: uint16(15319), + 2033: uint16(27258), + 2034: uint16(27479), + 2035: uint16(16320), + 2036: uint16(15514), + 2037: uint16(37792), + 2038: uint16(37618), + 2039: uint16(35818), + 2040: uint16(35531), + 2041: uint16(37513), + 2042: uint16(32798), + 2043: uint16(35292), + 2044: uint16(37991), + 2045: uint16(28069), + 2046: uint16(28427), + 2047: uint16(18924), + 2049: uint16(16255), + 2050: uint16(15759), + 2051: uint16(28164), + 2052: uint16(16444), + 2053: uint16(23101), + 2054: uint16(28170), + 2055: uint16(22599), + 2056: uint16(27940), + 2057: uint16(30786), + 2058: uint16(28987), + 2059: uint16(17178), + 2060: uint16(17014), + 2061: uint16(28913), + 2062: uint16(29264), + 2063: uint16(29319), + 2064: uint16(29332), + 2065: uint16(18319), + 2066: uint16(18213), + 2067: uint16(20857), + 2068: uint16(19108), + 2069: uint16(1515), + 2070: uint16(29818), + 2071: uint16(16120), + 2072: uint16(13919), + 2073: uint16(19018), + 2074: uint16(18711), + 2075: uint16(24545), + 2076: uint16(16134), + 2077: uint16(16049), + 2078: uint16(19167), + 2079: uint16(35875), + 2080: uint16(16181), + 2081: uint16(24743), + 2082: uint16(16115), + 2083: uint16(29900), + 2084: uint16(29756), + 2085: uint16(37767), + 2086: uint16(29751), + 2087: uint16(17567), + 2088: uint16(28138), + 2089: uint16(17745), + 2090: uint16(30083), + 2091: uint16(16227), + 2092: uint16(19673), + 2093: uint16(19718), + 2094: uint16(16216), + 2095: uint16(30037), + 2096: uint16(30323), + 2097: uint16(42438), + 2098: uint16(15129), + 2099: uint16(29800), + 2100: uint16(35532), + 2101: uint16(18859), + 2102: uint16(18830), + 2103: uint16(15099), + 2104: uint16(15821), + 2105: uint16(19022), + 2106: uint16(16127), + 2107: uint16(18885), + 2108: uint16(18675), + 2109: uint16(37370), + 2110: uint16(22322), + 2111: uint16(37698), + 2112: uint16(35555), + 2113: uint16(6244), + 2114: uint16(20703), + 2115: uint16(21025), + 2116: uint16(20967), + 2117: uint16(30584), + 2118: uint16(12850), + 2119: uint16(30478), + 2120: uint16(30479), + 2121: uint16(30587), + 2122: uint16(18071), + 2123: uint16(14209), + 2124: uint16(14942), + 2125: uint16(18672), + 2126: uint16(29752), + 2127: uint16(29851), + 2128: uint16(16063), + 2129: uint16(19130), + 2130: uint16(19143), + 2131: uint16(16584), + 2132: uint16(19094), + 2133: uint16(25006), + 2134: uint16(37639), + 2135: uint16(21889), + 2136: uint16(30750), + 2137: uint16(30861), + 2138: uint16(30856), + 2139: uint16(30930), + 2140: uint16(29648), + 2141: uint16(31065), + 2142: uint16(30529), + 2143: uint16(22243), + 2144: uint16(16654), + 2146: uint16(33942), + 2147: uint16(31141), + 2148: uint16(27181), + 2149: uint16(16122), + 2150: uint16(31290), + 2151: uint16(31220), + 2152: uint16(16750), + 2153: uint16(5862), + 2154: uint16(16690), + 2155: uint16(37429), + 2156: uint16(31217), + 2157: uint16(3404), + 2158: uint16(18828), + 2159: uint16(665), + 2160: uint16(15802), + 2161: uint16(5998), + 2162: uint16(13719), + 2163: uint16(21867), + 2164: uint16(13680), + 2165: uint16(13994), + 2166: uint16(468), + 2167: uint16(3085), + 2168: uint16(31458), + 2169: uint16(23129), + 2170: uint16(9973), + 2171: uint16(23215), + 2172: uint16(23196), + 2173: uint16(23053), + 2174: uint16(603), + 2175: uint16(30960), + 2176: uint16(23082), + 2177: uint16(23494), + 2178: uint16(31486), + 2179: uint16(16889), + 2180: uint16(31837), + 2181: uint16(31853), + 2182: uint16(16913), + 2183: uint16(23475), + 2184: uint16(24252), + 2185: uint16(24230), + 2186: uint16(31949), + 2187: uint16(18937), + 2188: uint16(6064), + 2189: uint16(31886), + 2190: uint16(31868), + 2191: uint16(31918), + 2192: uint16(27314), + 2193: uint16(32220), + 2194: uint16(32263), + 2195: uint16(32211), + 2196: uint16(32590), + 2197: uint16(25185), + 2198: uint16(24924), + 2199: uint16(31560), + 2200: uint16(32151), + 2201: uint16(24194), + 2202: uint16(17002), + 2203: uint16(27509), + 2204: uint16(2326), + 2205: uint16(26582), + 2206: uint16(78), + 2207: uint16(13775), + 2208: uint16(22468), + 2209: uint16(25618), + 2210: uint16(25592), + 2211: uint16(18786), + 2212: uint16(32733), + 2213: uint16(31527), + 2214: uint16(2092), + 2215: uint16(23273), + 2216: uint16(23875), + 2217: uint16(31500), + 2218: uint16(24078), + 2219: uint16(39398), + 2220: uint16(34373), + 2221: uint16(39523), + 2222: uint16(27164), + 2223: uint16(13375), + 2224: uint16(14818), + 2225: uint16(18935), + 2226: uint16(26029), + 2227: uint16(39455), + 2228: uint16(26016), + 2229: uint16(33920), + 2230: uint16(28967), + 2231: uint16(27857), + 2232: uint16(17642), + 2233: uint16(33079), + 2234: uint16(17410), + 2235: uint16(32966), + 2236: uint16(33033), + 2237: uint16(33090), + 2238: uint16(26548), + 2239: uint16(39107), + 2240: uint16(27202), + 2241: uint16(33378), + 2242: uint16(33381), + 2243: uint16(27217), + 2244: uint16(33875), + 2245: uint16(28071), + 2246: uint16(34320), + 2247: uint16(29211), + 2248: uint16(23174), + 2249: uint16(16767), + 2250: uint16(6208), + 2251: uint16(23339), + 2252: uint16(6305), + 2253: uint16(23268), + 2254: uint16(6360), + 2255: uint16(34464), + 2256: uint16(63932), + 2257: uint16(15759), + 2258: uint16(34861), + 2259: uint16(29730), + 2260: uint16(23042), + 2261: uint16(34926), + 2262: uint16(20293), + 2263: uint16(34951), + 2264: uint16(35007), + 2265: uint16(35046), + 2266: uint16(35173), + 2267: uint16(35149), + 2268: uint16(22147), + 2269: uint16(35156), + 2270: uint16(30597), + 2271: uint16(30596), + 2272: uint16(35829), + 2273: uint16(35801), + 2274: uint16(35740), + 2275: uint16(35321), + 2276: uint16(16045), + 2277: uint16(33955), + 2278: uint16(18165), + 2279: uint16(18127), + 2280: uint16(14322), + 2281: uint16(35389), + 2282: uint16(35356), + 2283: uint16(37960), + 2284: uint16(24397), + 2285: uint16(37419), + 2286: uint16(17028), + 2287: uint16(26068), + 2288: uint16(28969), + 2289: uint16(28868), + 2290: uint16(6213), + 2291: uint16(40301), + 2292: uint16(35999), + 2293: uint16(36073), + 2294: uint16(32220), + 2295: uint16(22938), + 2296: uint16(30659), + 2297: uint16(23024), + 2298: uint16(17262), + 2299: uint16(14036), + 2300: uint16(36394), + 2301: uint16(36519), + 2302: uint16(19465), + 2303: uint16(36656), + 2304: uint16(36682), + 2305: uint16(17140), + 2306: uint16(27736), + 2307: uint16(28603), + 2308: uint16(8993), + 2309: uint16(18587), + 2310: uint16(28537), + 2311: uint16(28299), + 2312: uint16(6106), + 2313: uint16(39913), + 2314: uint16(14005), + 2315: uint16(18735), + 2316: uint16(37051), + 2318: uint16(21873), + 2319: uint16(18694), + 2320: uint16(37307), + 2321: uint16(37892), + 2322: uint16(35403), + 2323: uint16(16482), + 2324: uint16(35580), + 2325: uint16(37927), + 2326: uint16(35869), + 2327: uint16(35899), + 2328: uint16(34021), + 2329: uint16(35371), + 2330: uint16(38297), + 2331: uint16(38311), + 2332: uint16(38295), + 2333: uint16(38294), + 2334: uint16(36148), + 2335: uint16(29765), + 2336: uint16(16066), + 2337: uint16(18687), + 2338: uint16(19010), + 2339: uint16(17386), + 2340: uint16(16103), + 2341: uint16(12837), + 2342: uint16(38543), + 2343: uint16(36583), + 2344: uint16(36454), + 2345: uint16(36453), + 2346: uint16(16076), + 2347: uint16(18925), + 2348: uint16(19064), + 2349: uint16(16366), + 2350: uint16(29714), + 2351: uint16(29803), + 2352: uint16(16124), + 2353: uint16(38721), + 2354: uint16(37040), + 2355: uint16(26695), + 2356: uint16(18973), + 2357: uint16(37011), + 2358: uint16(22495), + 2360: uint16(37736), + 2361: uint16(35209), + 2362: uint16(35878), + 2363: uint16(35631), + 2364: uint16(25534), + 2365: uint16(37562), + 2366: uint16(23313), + 2367: uint16(35689), + 2368: uint16(18748), + 2369: uint16(29689), + 2370: uint16(16923), + 2371: uint16(38811), + 2372: uint16(38769), + 2373: uint16(39224), + 2374: uint16(3878), + 2375: uint16(24001), + 2376: uint16(35781), + 2377: uint16(19122), + 2378: uint16(38943), + 2379: uint16(38106), + 2380: uint16(37622), + 2381: uint16(38359), + 2382: uint16(37349), + 2383: uint16(17600), + 2384: uint16(35664), + 2385: uint16(19047), + 2386: uint16(35684), + 2387: uint16(39132), + 2388: uint16(35397), + 2389: uint16(16128), + 2390: uint16(37418), + 2391: uint16(18725), + 2392: uint16(33812), + 2393: uint16(39227), + 2394: uint16(39245), + 2395: uint16(31494), + 2396: uint16(15869), + 2397: uint16(39323), + 2398: uint16(19311), + 2399: uint16(39338), + 2400: uint16(39516), + 2401: uint16(35685), + 2402: uint16(22728), + 2403: uint16(27279), + 2404: uint16(39457), + 2405: uint16(23294), + 2406: uint16(39471), + 2407: uint16(39153), + 2408: uint16(19344), + 2409: uint16(39240), + 2410: uint16(39356), + 2411: uint16(19389), + 2412: uint16(19351), + 2413: uint16(37757), + 2414: uint16(22642), + 2415: uint16(4866), + 2416: uint16(22562), + 2417: uint16(18872), + 2418: uint16(5352), + 2419: uint16(30788), + 2420: uint16(10015), + 2421: uint16(15800), + 2422: uint16(26821), + 2423: uint16(15741), + 2424: uint16(37976), + 2425: uint16(14631), + 2426: uint16(24912), + 2427: uint16(10113), + 2428: uint16(10603), + 2429: uint16(24839), + 2430: uint16(40015), + 2431: uint16(40019), + 2432: uint16(40059), + 2433: uint16(39989), + 2434: uint16(39952), + 2435: uint16(39807), + 2436: uint16(39887), + 2437: uint16(40493), + 2438: uint16(39839), + 2439: uint16(41461), + 2440: uint16(41214), + 2441: uint16(40225), + 2442: uint16(19630), + 2443: uint16(16644), + 2444: uint16(40472), + 2445: uint16(19632), + 2446: uint16(40204), + 2447: uint16(41396), + 2448: uint16(41197), + 2449: uint16(41203), + 2450: uint16(39215), + 2451: uint16(40357), + 2452: uint16(33981), + 2453: uint16(28178), + 2454: uint16(28639), + 2455: uint16(27522), + 2456: uint16(34300), + 2457: uint16(17715), + 2458: uint16(28068), + 2459: uint16(28292), + 2460: uint16(28144), + 2461: uint16(33824), + 2462: uint16(34286), + 2463: uint16(28160), + 2464: uint16(14295), + 2465: uint16(24676), + 2466: uint16(31202), + 2467: uint16(13724), + 2468: uint16(13888), + 2469: uint16(18733), + 2470: uint16(18910), + 2471: uint16(15714), + 2472: uint16(37851), + 2473: uint16(37566), + 2474: uint16(37704), + 2475: uint16(703), + 2476: uint16(30905), + 2477: uint16(37495), + 2478: uint16(37965), + 2479: uint16(20452), + 2480: uint16(13376), + 2481: uint16(36964), + 2482: uint16(21853), + 2483: uint16(30781), + 2484: uint16(30804), + 2485: uint16(30902), + 2486: uint16(30795), + 2487: uint16(5975), + 2488: uint16(12745), + 2489: uint16(18753), + 2490: uint16(13978), + 2491: uint16(20338), + 2492: uint16(28634), + 2493: uint16(28633), + 2495: uint16(28702), + 2496: uint16(21524), + 2497: uint16(16821), + 2498: uint16(22459), + 2499: uint16(22771), + 2500: uint16(22410), + 2501: uint16(40214), + 2502: uint16(22487), + 2503: uint16(28980), + 2504: uint16(13487), + 2505: uint16(16812), + 2506: uint16(29163), + 2507: uint16(27712), + 2508: uint16(20375), + 2510: uint16(6069), + 2511: uint16(35401), + 2512: uint16(24844), + 2513: uint16(23246), + 2514: uint16(23051), + 2515: uint16(17084), + 2516: uint16(17544), + 2517: uint16(14124), + 2518: uint16(19323), + 2519: uint16(35324), + 2520: uint16(37819), + 2521: uint16(37816), + 2522: uint16(6358), + 2523: uint16(3869), + 2524: uint16(33906), + 2525: uint16(27840), + 2526: uint16(5139), + 2527: uint16(17146), + 2528: uint16(11302), + 2529: uint16(17345), + 2530: uint16(22932), + 2531: uint16(15799), + 2532: uint16(26433), + 2533: uint16(32168), + 2534: uint16(24923), + 2535: uint16(24740), + 2536: uint16(18873), + 2537: uint16(18827), + 2538: uint16(35322), + 2539: uint16(37605), + 2540: uint16(29666), + 2541: uint16(16105), + 2542: uint16(29876), + 2543: uint16(35683), + 2544: uint16(6303), + 2545: uint16(16097), + 2546: uint16(19123), + 2547: uint16(27352), + 2548: uint16(29683), + 2549: uint16(29691), + 2550: uint16(16086), + 2551: uint16(19006), + 2552: uint16(19092), + 2553: uint16(6105), + 2554: uint16(19046), + 2555: uint16(935), + 2556: uint16(5156), + 2557: uint16(18917), + 2558: uint16(29768), + 2559: uint16(18710), + 2560: uint16(28837), + 2561: uint16(18806), + 2562: uint16(37508), + 2563: uint16(29670), + 2564: uint16(37727), + 2565: uint16(1278), + 2566: uint16(37681), + 2567: uint16(35534), + 2568: uint16(35350), + 2569: uint16(37766), + 2570: uint16(35815), + 2571: uint16(21973), + 2572: uint16(18741), + 2573: uint16(35458), + 2574: uint16(29035), + 2575: uint16(18755), + 2576: uint16(3327), + 2577: uint16(22180), + 2578: uint16(1562), + 2579: uint16(3051), + 2580: uint16(3256), + 2581: uint16(21762), + 2582: uint16(31172), + 2583: uint16(6138), + 2584: uint16(32254), + 2585: uint16(5826), + 2586: uint16(19024), + 2587: uint16(6226), + 2588: uint16(17710), + 2589: uint16(37889), + 2590: uint16(14090), + 2591: uint16(35520), + 2592: uint16(18861), + 2593: uint16(22960), + 2594: uint16(6335), + 2595: uint16(6275), + 2596: uint16(29828), + 2597: uint16(23201), + 2598: uint16(14050), + 2599: uint16(15707), + 2600: uint16(14000), + 2601: uint16(37471), + 2602: uint16(23161), + 2603: uint16(35457), + 2604: uint16(6242), + 2605: uint16(37748), + 2606: uint16(15565), + 2607: uint16(2740), + 2608: uint16(19094), + 2609: uint16(14730), + 2610: uint16(20724), + 2611: uint16(15721), + 2612: uint16(15692), + 2613: uint16(5020), + 2614: uint16(29045), + 2615: uint16(17147), + 2616: uint16(33304), + 2617: uint16(28175), + 2618: uint16(37092), + 2619: uint16(17643), + 2620: uint16(27991), + 2621: uint16(32335), + 2622: uint16(28775), + 2623: uint16(27823), + 2624: uint16(15574), + 2625: uint16(16365), + 2626: uint16(15917), + 2627: uint16(28162), + 2628: uint16(28428), + 2629: uint16(15727), + 2630: uint16(1013), + 2631: uint16(30033), + 2632: uint16(14012), + 2633: uint16(13512), + 2634: uint16(18048), + 2635: uint16(16090), + 2636: uint16(18545), + 2637: uint16(22980), + 2638: uint16(37486), + 2639: uint16(18750), + 2640: uint16(36673), + 2641: uint16(35868), + 2642: uint16(27584), + 2643: uint16(22546), + 2644: uint16(22472), + 2645: uint16(14038), + 2646: uint16(5202), + 2647: uint16(28926), + 2648: uint16(17250), + 2649: uint16(19057), + 2650: uint16(12259), + 2651: uint16(4784), + 2652: uint16(9149), + 2653: uint16(26809), + 2654: uint16(26983), + 2655: uint16(5016), + 2656: uint16(13541), + 2657: uint16(31732), + 2658: uint16(14047), + 2659: uint16(35459), + 2660: uint16(14294), + 2661: uint16(13306), + 2662: uint16(19615), + 2663: uint16(27162), + 2664: uint16(13997), + 2665: uint16(27831), + 2666: uint16(33854), + 2667: uint16(17631), + 2668: uint16(17614), + 2669: uint16(27942), + 2670: uint16(27985), + 2671: uint16(27778), + 2672: uint16(28638), + 2673: uint16(28439), + 2674: uint16(28937), + 2675: uint16(33597), + 2676: uint16(5946), + 2677: uint16(33773), + 2678: uint16(27776), + 2679: uint16(28755), + 2680: uint16(6107), + 2681: uint16(22921), + 2682: uint16(23170), + 2683: uint16(6067), + 2684: uint16(23137), + 2685: uint16(23153), + 2686: uint16(6405), + 2687: uint16(16892), + 2688: uint16(14125), + 2689: uint16(23023), + 2690: uint16(5948), + 2691: uint16(14023), + 2692: uint16(29070), + 2693: uint16(37776), + 2694: uint16(26266), + 2695: uint16(17061), + 2696: uint16(23150), + 2697: uint16(23083), + 2698: uint16(17043), + 2699: uint16(27179), + 2700: uint16(16121), + 2701: uint16(30518), + 2702: uint16(17499), + 2703: uint16(17098), + 2704: uint16(28957), + 2705: uint16(16985), + 2706: uint16(35297), + 2707: uint16(20400), + 2708: uint16(27944), + 2709: uint16(23746), + 2710: uint16(17614), + 2711: uint16(32333), + 2712: uint16(17341), + 2713: uint16(27148), + 2714: uint16(16982), + 2715: uint16(4868), + 2716: uint16(28838), + 2717: uint16(28979), + 2718: uint16(17385), + 2719: uint16(15781), + 2720: uint16(27871), + 2721: uint16(63525), + 2722: uint16(19023), + 2723: uint16(32357), + 2724: uint16(23019), + 2725: uint16(23855), + 2726: uint16(15859), + 2727: uint16(24412), + 2728: uint16(19037), + 2729: uint16(6111), + 2730: uint16(32164), + 2731: uint16(33830), + 2732: uint16(21637), + 2733: uint16(15098), + 2734: uint16(13056), + 2735: uint16(532), + 2736: uint16(22398), + 2737: uint16(2261), + 2738: uint16(1561), + 2739: uint16(16357), + 2740: uint16(8094), + 2741: uint16(41654), + 2742: uint16(28675), + 2743: uint16(37211), + 2744: uint16(23920), + 2745: uint16(29583), + 2746: uint16(31955), + 2747: uint16(35417), + 2748: uint16(37920), + 2749: uint16(20424), + 2750: uint16(32743), + 2751: uint16(29389), + 2752: uint16(29456), + 2753: uint16(31476), + 2754: uint16(29496), + 2755: uint16(29497), + 2756: uint16(22262), + 2757: uint16(29505), + 2758: uint16(29512), + 2759: uint16(16041), + 2760: uint16(31512), + 2761: uint16(36972), + 2762: uint16(29173), + 2763: uint16(18674), + 2764: uint16(29665), + 2765: uint16(33270), + 2766: uint16(16074), + 2767: uint16(30476), + 2768: uint16(16081), + 2769: uint16(27810), + 2770: uint16(22269), + 2771: uint16(29721), + 2772: uint16(29726), + 2773: uint16(29727), + 2774: uint16(16098), + 2775: uint16(16112), + 2776: uint16(16116), + 2777: uint16(16122), + 2778: uint16(29907), + 2779: uint16(16142), + 2780: uint16(16211), + 2781: uint16(30018), + 2782: uint16(30061), + 2783: uint16(30066), + 2784: uint16(30093), + 2785: uint16(16252), + 2786: uint16(30152), + 2787: uint16(30172), + 2788: uint16(16320), + 2789: uint16(30285), + 2790: uint16(16343), + 2791: uint16(30324), + 2792: uint16(16348), + 2793: uint16(30330), + 2794: uint16(20316), + 2795: uint16(29064), + 2796: uint16(22051), + 2797: uint16(35200), + 2798: uint16(22633), + 2799: uint16(16413), + 2800: uint16(30531), + 2801: uint16(16441), + 2802: uint16(26465), + 2803: uint16(16453), + 2804: uint16(13787), + 2805: uint16(30616), + 2806: uint16(16490), + 2807: uint16(16495), + 2808: uint16(23646), + 2809: uint16(30654), + 2810: uint16(30667), + 2811: uint16(22770), + 2812: uint16(30744), + 2813: uint16(28857), + 2814: uint16(30748), + 2815: uint16(16552), + 2816: uint16(30777), + 2817: uint16(30791), + 2818: uint16(30801), + 2819: uint16(30822), + 2820: uint16(33864), + 2821: uint16(21813), + 2822: uint16(31027), + 2823: uint16(26627), + 2824: uint16(31026), + 2825: uint16(16643), + 2826: uint16(16649), + 2827: uint16(31121), + 2828: uint16(31129), + 2829: uint16(36795), + 2830: uint16(31238), + 2831: uint16(36796), + 2832: uint16(16743), + 2833: uint16(31377), + 2834: uint16(16818), + 2835: uint16(31420), + 2836: uint16(33401), + 2837: uint16(16836), + 2838: uint16(31439), + 2839: uint16(31451), + 2840: uint16(16847), + 2841: uint16(20001), + 2842: uint16(31586), + 2843: uint16(31596), + 2844: uint16(31611), + 2845: uint16(31762), + 2846: uint16(31771), + 2847: uint16(16992), + 2848: uint16(17018), + 2849: uint16(31867), + 2850: uint16(31900), + 2851: uint16(17036), + 2852: uint16(31928), + 2853: uint16(17044), + 2854: uint16(31981), + 2855: uint16(36755), + 2856: uint16(28864), + 2857: uint16(3279), + 2858: uint16(32207), + 2859: uint16(32212), + 2860: uint16(32208), + 2861: uint16(32253), + 2862: uint16(32686), + 2863: uint16(32692), + 2864: uint16(29343), + 2865: uint16(17303), + 2866: uint16(32800), + 2867: uint16(32805), + 2868: uint16(31545), + 2869: uint16(32814), + 2870: uint16(32817), + 2871: uint16(32852), + 2872: uint16(15820), + 2873: uint16(22452), + 2874: uint16(28832), + 2875: uint16(32951), + 2876: uint16(33001), + 2877: uint16(17389), + 2878: uint16(33036), + 2879: uint16(29482), + 2880: uint16(33038), + 2881: uint16(33042), + 2882: uint16(30048), + 2883: uint16(33044), + 2884: uint16(17409), + 2885: uint16(15161), + 2886: uint16(33110), + 2887: uint16(33113), + 2888: uint16(33114), + 2889: uint16(17427), + 2890: uint16(22586), + 2891: uint16(33148), + 2892: uint16(33156), + 2893: uint16(17445), + 2894: uint16(33171), + 2895: uint16(17453), + 2896: uint16(33189), + 2897: uint16(22511), + 2898: uint16(33217), + 2899: uint16(33252), + 2900: uint16(33364), + 2901: uint16(17551), + 2902: uint16(33446), + 2903: uint16(33398), + 2904: uint16(33482), + 2905: uint16(33496), + 2906: uint16(33535), + 2907: uint16(17584), + 2908: uint16(33623), + 2909: uint16(38505), + 2910: uint16(27018), + 2911: uint16(33797), + 2912: uint16(28917), + 2913: uint16(33892), + 2914: uint16(24803), + 2915: uint16(33928), + 2916: uint16(17668), + 2917: uint16(33982), + 2918: uint16(34017), + 2919: uint16(34040), + 2920: uint16(34064), + 2921: uint16(34104), + 2922: uint16(34130), + 2923: uint16(17723), + 2924: uint16(34159), + 2925: uint16(34160), + 2926: uint16(34272), + 2927: uint16(17783), + 2928: uint16(34418), + 2929: uint16(34450), + 2930: uint16(34482), + 2931: uint16(34543), + 2932: uint16(38469), + 2933: uint16(34699), + 2934: uint16(17926), + 2935: uint16(17943), + 2936: uint16(34990), + 2937: uint16(35071), + 2938: uint16(35108), + 2939: uint16(35143), + 2940: uint16(35217), + 2941: uint16(31079), + 2942: uint16(35369), + 2943: uint16(35384), + 2944: uint16(35476), + 2945: uint16(35508), + 2946: uint16(35921), + 2947: uint16(36052), + 2948: uint16(36082), + 2949: uint16(36124), + 2950: uint16(18328), + 2951: uint16(22623), + 2952: uint16(36291), + 2953: uint16(18413), + 2954: uint16(20206), + 2955: uint16(36410), + 2956: uint16(21976), + 2957: uint16(22356), + 2958: uint16(36465), + 2959: uint16(22005), + 2960: uint16(36528), + 2961: uint16(18487), + 2962: uint16(36558), + 2963: uint16(36578), + 2964: uint16(36580), + 2965: uint16(36589), + 2966: uint16(36594), + 2967: uint16(36791), + 2968: uint16(36801), + 2969: uint16(36810), + 2970: uint16(36812), + 2971: uint16(36915), + 2972: uint16(39364), + 2973: uint16(18605), + 2974: uint16(39136), + 2975: uint16(37395), + 2976: uint16(18718), + 2977: uint16(37416), + 2978: uint16(37464), + 2979: uint16(37483), + 2980: uint16(37553), + 2981: uint16(37550), + 2982: uint16(37567), + 2983: uint16(37603), + 2984: uint16(37611), + 2985: uint16(37619), + 2986: uint16(37620), + 2987: uint16(37629), + 2988: uint16(37699), + 2989: uint16(37764), + 2990: uint16(37805), + 2991: uint16(18757), + 2992: uint16(18769), + 2993: uint16(40639), + 2994: uint16(37911), + 2995: uint16(21249), + 2996: uint16(37917), + 2997: uint16(37933), + 2998: uint16(37950), + 2999: uint16(18794), + 3000: uint16(37972), + 3001: uint16(38009), + 3002: uint16(38189), + 3003: uint16(38306), + 3004: uint16(18855), + 3005: uint16(38388), + 3006: uint16(38451), + 3007: uint16(18917), + 3008: uint16(26528), + 3009: uint16(18980), + 3010: uint16(38720), + 3011: uint16(18997), + 3012: uint16(38834), + 3013: uint16(38850), + 3014: uint16(22100), + 3015: uint16(19172), + 3016: uint16(24808), + 3017: uint16(39097), + 3018: uint16(19225), + 3019: uint16(39153), + 3020: uint16(22596), + 3021: uint16(39182), + 3022: uint16(39193), + 3023: uint16(20916), + 3024: uint16(39196), + 3025: uint16(39223), + 3026: uint16(39234), + 3027: uint16(39261), + 3028: uint16(39266), + 3029: uint16(19312), + 3030: uint16(39365), + 3031: uint16(19357), + 3032: uint16(39484), + 3033: uint16(39695), + 3034: uint16(31363), + 3035: uint16(39785), + 3036: uint16(39809), + 3037: uint16(39901), + 3038: uint16(39921), + 3039: uint16(39924), + 3040: uint16(19565), + 3041: uint16(39968), + 3042: uint16(14191), + 3043: uint16(7106), + 3044: uint16(40265), + 3045: uint16(39994), + 3046: uint16(40702), + 3047: uint16(22096), + 3048: uint16(40339), + 3049: uint16(40381), + 3050: uint16(40384), + 3051: uint16(40444), + 3052: uint16(38134), + 3053: uint16(36790), + 3054: uint16(40571), + 3055: uint16(40620), + 3056: uint16(40625), + 3057: uint16(40637), + 3058: uint16(40646), + 3059: uint16(38108), + 3060: uint16(40674), + 3061: uint16(40689), + 3062: uint16(40696), + 3063: uint16(31432), + 3064: uint16(40772), + 3065: uint16(148), + 3066: uint16(695), + 3067: uint16(928), + 3068: uint16(26906), + 3069: uint16(38083), + 3070: uint16(22956), + 3071: uint16(1239), + 3072: uint16(22592), + 3073: uint16(38081), + 3074: uint16(14265), + 3075: uint16(1493), + 3076: uint16(1557), + 3077: uint16(1654), + 3078: uint16(5818), + 3079: uint16(22359), + 3080: uint16(29043), + 3081: uint16(2754), + 3082: uint16(2765), + 3083: uint16(3007), + 3084: uint16(21610), + 3085: uint16(63547), + 3086: uint16(3019), + 3087: uint16(21662), + 3088: uint16(3067), + 3089: uint16(3131), + 3090: uint16(3155), + 3091: uint16(3173), + 3092: uint16(3196), + 3093: uint16(24807), + 3094: uint16(3213), + 3095: uint16(22138), + 3096: uint16(3253), + 3097: uint16(3293), + 3098: uint16(3309), + 3099: uint16(3439), + 3100: uint16(3506), + 3101: uint16(3528), + 3102: uint16(26965), + 3103: uint16(39983), + 3104: uint16(34725), + 3105: uint16(3588), + 3106: uint16(3598), + 3107: uint16(3799), + 3108: uint16(3984), + 3109: uint16(3885), + 3110: uint16(3699), + 3111: uint16(23584), + 3112: uint16(4028), + 3113: uint16(24075), + 3114: uint16(4188), + 3115: uint16(4175), + 3116: uint16(4214), + 3117: uint16(26398), + 3118: uint16(4219), + 3119: uint16(4232), + 3120: uint16(4246), + 3121: uint16(13895), + 3122: uint16(4287), + 3123: uint16(4307), + 3124: uint16(4399), + 3125: uint16(4411), + 3126: uint16(21348), + 3127: uint16(33965), + 3128: uint16(4835), + 3129: uint16(4981), + 3130: uint16(4918), + 3131: uint16(35713), + 3132: uint16(5495), + 3133: uint16(5657), + 3134: uint16(6083), + 3135: uint16(6087), + 3136: uint16(20088), + 3137: uint16(28859), + 3138: uint16(6189), + 3139: uint16(6506), + 3140: uint16(6701), + 3141: uint16(6725), + 3142: uint16(7210), + 3143: uint16(7280), + 3144: uint16(7340), + 3145: uint16(7880), + 3146: uint16(25283), + 3147: uint16(7893), + 3148: uint16(7957), + 3149: uint16(29080), + 3150: uint16(26709), + 3151: uint16(8261), + 3152: uint16(27113), + 3153: uint16(14024), + 3154: uint16(8828), + 3155: uint16(9175), + 3156: uint16(9210), + 3157: uint16(10026), + 3158: uint16(10353), + 3159: uint16(10575), + 3160: uint16(33533), + 3161: uint16(10599), + 3162: uint16(10643), + 3163: uint16(10965), + 3164: uint16(35237), + 3165: uint16(10984), + 3166: uint16(36768), + 3167: uint16(11022), + 3168: uint16(38840), + 3169: uint16(11071), + 3170: uint16(38983), + 3171: uint16(39613), + 3172: uint16(11340), + 3174: uint16(11400), + 3175: uint16(11447), + 3176: uint16(23528), + 3177: uint16(11528), + 3178: uint16(11538), + 3179: uint16(11703), + 3180: uint16(11669), + 3181: uint16(11842), + 3182: uint16(12148), + 3183: uint16(12236), + 3184: uint16(12339), + 3185: uint16(12390), + 3186: uint16(13087), + 3187: uint16(13278), + 3188: uint16(24497), + 3189: uint16(26184), + 3190: uint16(26303), + 3191: uint16(31353), + 3192: uint16(13671), + 3193: uint16(13811), + 3195: uint16(18874), + 3197: uint16(13850), + 3198: uint16(14102), + 3200: uint16(838), + 3201: uint16(22709), + 3202: uint16(26382), + 3203: uint16(26904), + 3204: uint16(15015), + 3205: uint16(30295), + 3206: uint16(24546), + 3207: uint16(15889), + 3208: uint16(16057), + 3209: uint16(30206), + 3210: uint16(8346), + 3211: uint16(18640), + 3212: uint16(19128), + 3213: uint16(16665), + 3214: uint16(35482), + 3215: uint16(17134), + 3216: uint16(17165), + 3217: uint16(16443), + 3218: uint16(17204), + 3219: uint16(17302), + 3220: uint16(19013), + 3221: uint16(1482), + 3222: uint16(20946), + 3223: uint16(1553), + 3224: uint16(22943), + 3225: uint16(7848), + 3226: uint16(15294), + 3227: uint16(15615), + 3228: uint16(17412), + 3229: uint16(17622), + 3230: uint16(22408), + 3231: uint16(18036), + 3232: uint16(14747), + 3233: uint16(18223), + 3234: uint16(34280), + 3235: uint16(39369), + 3236: uint16(14178), + 3237: uint16(8643), + 3238: uint16(35678), + 3239: uint16(35662), + 3241: uint16(18450), + 3242: uint16(18683), + 3243: uint16(18965), + 3244: uint16(29193), + 3245: uint16(19136), + 3246: uint16(3192), + 3247: uint16(22885), + 3248: uint16(20133), + 3249: uint16(20358), + 3250: uint16(1913), + 3251: uint16(36570), + 3252: uint16(20524), + 3253: uint16(21135), + 3254: uint16(22335), + 3255: uint16(29041), + 3256: uint16(21145), + 3257: uint16(21529), + 3258: uint16(16202), + 3259: uint16(19111), + 3260: uint16(21948), + 3261: uint16(21574), + 3262: uint16(21614), + 3263: uint16(27474), + 3265: uint16(13427), + 3266: uint16(21823), + 3267: uint16(30258), + 3268: uint16(21854), + 3269: uint16(18200), + 3270: uint16(21858), + 3271: uint16(21862), + 3272: uint16(22471), + 3273: uint16(18751), + 3274: uint16(22621), + 3275: uint16(20582), + 3276: uint16(13563), + 3277: uint16(13260), + 3279: uint16(22787), + 3280: uint16(18300), + 3281: uint16(35144), + 3282: uint16(23214), + 3283: uint16(23433), + 3284: uint16(23558), + 3285: uint16(7568), + 3286: uint16(22433), + 3287: uint16(29009), + 3289: uint16(24834), + 3290: uint16(31762), + 3291: uint16(36950), + 3292: uint16(25010), + 3293: uint16(20378), + 3294: uint16(35682), + 3295: uint16(25602), + 3296: uint16(25674), + 3297: uint16(23899), + 3298: uint16(27639), + 3300: uint16(25732), + 3301: uint16(6428), + 3302: uint16(35562), + 3303: uint16(18934), + 3304: uint16(25736), + 3305: uint16(16367), + 3306: uint16(25874), + 3307: uint16(19392), + 3308: uint16(26047), + 3309: uint16(26293), + 3310: uint16(10011), + 3311: uint16(37989), + 3312: uint16(22497), + 3313: uint16(24981), + 3314: uint16(23079), + 3315: uint16(63693), + 3317: uint16(22201), + 3318: uint16(17697), + 3319: uint16(26364), + 3320: uint16(20074), + 3321: uint16(18740), + 3322: uint16(38486), + 3323: uint16(28047), + 3324: uint16(27837), + 3325: uint16(13848), + 3326: uint16(35191), + 3327: uint16(26521), + 3328: uint16(26734), + 3329: uint16(25617), + 3330: uint16(26718), + 3332: uint16(26823), + 3333: uint16(31554), + 3334: uint16(37056), + 3335: uint16(2577), + 3336: uint16(26918), + 3338: uint16(26937), + 3339: uint16(31301), + 3341: uint16(27130), + 3342: uint16(39462), + 3343: uint16(27181), + 3344: uint16(13919), + 3345: uint16(25705), + 3346: uint16(33), + 3347: uint16(31107), + 3348: uint16(27188), + 3349: uint16(27483), + 3350: uint16(23852), + 3351: uint16(13593), + 3353: uint16(27549), + 3354: uint16(18128), + 3355: uint16(27812), + 3356: uint16(30011), + 3357: uint16(34917), + 3358: uint16(28078), + 3359: uint16(22710), + 3360: uint16(14108), + 3361: uint16(9613), + 3362: uint16(28747), + 3363: uint16(29133), + 3364: uint16(15444), + 3365: uint16(29312), + 3366: uint16(29317), + 3367: uint16(37505), + 3368: uint16(8570), + 3369: uint16(29323), + 3370: uint16(37680), + 3371: uint16(29414), + 3372: uint16(18896), + 3373: uint16(27705), + 3374: uint16(38047), + 3375: uint16(29776), + 3376: uint16(3832), + 3377: uint16(34855), + 3378: uint16(35061), + 3379: uint16(10534), + 3380: uint16(33907), + 3381: uint16(6065), + 3382: uint16(28344), + 3383: uint16(18986), + 3384: uint16(6176), + 3385: uint16(14756), + 3386: uint16(14009), + 3389: uint16(17727), + 3390: uint16(26294), + 3391: uint16(40109), + 3392: uint16(39076), + 3393: uint16(35139), + 3394: uint16(30668), + 3395: uint16(30808), + 3396: uint16(22230), + 3397: uint16(16607), + 3398: uint16(5642), + 3399: uint16(14753), + 3400: uint16(14127), + 3401: uint16(33000), + 3402: uint16(5061), + 3403: uint16(29101), + 3404: uint16(33638), + 3405: uint16(31197), + 3406: uint16(37288), + 3408: uint16(19639), + 3409: uint16(28847), + 3410: uint16(35243), + 3411: uint16(31229), + 3412: uint16(31242), + 3413: uint16(31499), + 3414: uint16(32102), + 3415: uint16(16762), + 3416: uint16(31555), + 3417: uint16(31102), + 3418: uint16(32777), + 3419: uint16(28597), + 3420: uint16(41695), + 3421: uint16(27139), + 3422: uint16(33560), + 3423: uint16(21410), + 3424: uint16(28167), + 3425: uint16(37823), + 3426: uint16(26678), + 3427: uint16(38749), + 3428: uint16(33135), + 3429: uint16(32803), + 3430: uint16(27061), + 3431: uint16(5101), + 3432: uint16(12847), + 3433: uint16(32840), + 3434: uint16(23941), + 3435: uint16(35888), + 3436: uint16(32899), + 3437: uint16(22293), + 3438: uint16(38947), + 3439: uint16(35145), + 3440: uint16(23979), + 3441: uint16(18824), + 3442: uint16(26046), + 3443: uint16(27093), + 3444: uint16(21458), + 3445: uint16(19109), + 3446: uint16(16257), + 3447: uint16(15377), + 3448: uint16(26422), + 3449: uint16(32912), + 3450: uint16(33012), + 3451: uint16(33070), + 3452: uint16(8097), + 3453: uint16(33103), + 3454: uint16(33161), + 3455: uint16(33199), + 3456: uint16(33306), + 3457: uint16(33542), + 3458: uint16(33583), + 3459: uint16(33674), + 3460: uint16(13770), + 3461: uint16(33896), + 3462: uint16(34474), + 3463: uint16(18682), + 3464: uint16(25574), + 3465: uint16(35158), + 3466: uint16(30728), + 3467: uint16(37461), + 3468: uint16(35256), + 3469: uint16(17394), + 3470: uint16(35303), + 3471: uint16(17375), + 3472: uint16(35304), + 3473: uint16(35654), + 3474: uint16(35796), + 3475: uint16(23032), + 3476: uint16(35849), + 3478: uint16(36805), + 3479: uint16(37100), + 3481: uint16(37136), + 3482: uint16(37180), + 3483: uint16(15863), + 3484: uint16(37214), + 3485: uint16(19146), + 3486: uint16(36816), + 3487: uint16(29327), + 3488: uint16(22155), + 3489: uint16(38119), + 3490: uint16(38377), + 3491: uint16(38320), + 3492: uint16(38328), + 3493: uint16(38706), + 3494: uint16(39121), + 3495: uint16(39241), + 3496: uint16(39274), + 3497: uint16(39363), + 3498: uint16(39464), + 3499: uint16(39694), + 3500: uint16(40282), + 3501: uint16(40347), + 3502: uint16(32415), + 3503: uint16(40696), + 3504: uint16(40739), + 3505: uint16(19620), + 3506: uint16(38215), + 3507: uint16(41619), + 3508: uint16(29090), + 3509: uint16(41727), + 3510: uint16(19857), + 3511: uint16(36882), + 3512: uint16(42443), + 3513: uint16(19868), + 3514: uint16(3228), + 3515: uint16(36798), + 3516: uint16(21953), + 3517: uint16(36794), + 3518: uint16(9392), + 3519: uint16(36793), + 3520: uint16(19091), + 3521: uint16(17673), + 3522: uint16(32383), + 3523: uint16(28502), + 3524: uint16(27313), + 3525: uint16(20202), + 3526: uint16(13540), + 3527: uint16(35628), + 3528: uint16(30877), + 3529: uint16(14138), + 3530: uint16(36480), + 3531: uint16(6133), + 3532: uint16(32804), + 3533: uint16(35692), + 3534: uint16(35737), + 3535: uint16(31294), + 3536: uint16(26287), + 3537: uint16(15851), + 3538: uint16(30293), + 3539: uint16(15543), + 3540: uint16(22069), + 3541: uint16(22870), + 3542: uint16(20122), + 3543: uint16(24193), + 3544: uint16(25176), + 3545: uint16(22207), + 3546: uint16(3693), + 3547: uint16(36366), + 3548: uint16(23405), + 3549: uint16(16008), + 3550: uint16(19614), + 3551: uint16(25566), + 3553: uint16(6134), + 3554: uint16(6267), + 3555: uint16(25904), + 3556: uint16(22061), + 3557: uint16(23626), + 3558: uint16(21530), + 3559: uint16(21265), + 3560: uint16(15814), + 3561: uint16(40344), + 3562: uint16(19581), + 3563: uint16(22050), + 3564: uint16(22046), + 3565: uint16(32585), + 3566: uint16(24280), + 3567: uint16(22901), + 3568: uint16(15680), + 3569: uint16(34672), + 3570: uint16(19996), + 3571: uint16(4074), + 3572: uint16(3401), + 3573: uint16(14010), + 3574: uint16(33047), + 3575: uint16(40286), + 3576: uint16(36120), + 3577: uint16(30267), + 3578: uint16(40005), + 3579: uint16(30286), + 3580: uint16(30649), + 3581: uint16(37701), + 3582: uint16(21554), + 3583: uint16(33096), + 3584: uint16(33527), + 3585: uint16(22053), + 3586: uint16(33074), + 3587: uint16(33816), + 3588: uint16(32957), + 3589: uint16(21994), + 3590: uint16(31074), + 3591: uint16(22083), + 3592: uint16(21526), + 3593: uint16(3741), + 3594: uint16(13774), + 3595: uint16(22021), + 3596: uint16(22001), + 3597: uint16(26353), + 3598: uint16(33506), + 3599: uint16(13869), + 3600: uint16(30004), + 3601: uint16(22000), + 3602: uint16(21946), + 3603: uint16(21655), + 3604: uint16(21874), + 3605: uint16(3137), + 3606: uint16(3222), + 3607: uint16(24272), + 3608: uint16(20808), + 3609: uint16(3702), + 3610: uint16(11362), + 3611: uint16(3746), + 3612: uint16(40619), + 3613: uint16(32090), + 3614: uint16(21982), + 3615: uint16(4213), + 3616: uint16(25245), + 3617: uint16(38765), + 3618: uint16(21652), + 3619: uint16(36045), + 3620: uint16(29174), + 3621: uint16(37238), + 3622: uint16(25596), + 3623: uint16(25529), + 3624: uint16(25598), + 3625: uint16(21865), + 3626: uint16(11075), + 3627: uint16(40050), + 3628: uint16(11955), + 3629: uint16(20890), + 3630: uint16(13535), + 3631: uint16(3495), + 3632: uint16(20903), + 3633: uint16(21581), + 3634: uint16(21790), + 3635: uint16(21779), + 3636: uint16(30310), + 3637: uint16(36397), + 3638: uint16(26762), + 3639: uint16(30129), + 3640: uint16(32950), + 3641: uint16(34820), + 3642: uint16(34694), + 3643: uint16(35015), + 3644: uint16(33206), + 3645: uint16(33820), + 3646: uint16(4289), + 3647: uint16(17644), + 3648: uint16(29444), + 3649: uint16(18182), + 3650: uint16(23440), + 3651: uint16(33547), + 3652: uint16(26771), + 3653: uint16(22139), + 3654: uint16(9972), + 3655: uint16(32047), + 3656: uint16(16803), + 3657: uint16(32115), + 3658: uint16(28368), + 3659: uint16(29366), + 3660: uint16(37232), + 3661: uint16(4569), + 3662: uint16(37384), + 3663: uint16(15612), + 3664: uint16(42665), + 3665: uint16(3756), + 3666: uint16(3833), + 3667: uint16(29286), + 3668: uint16(7330), + 3669: uint16(18254), + 3670: uint16(20418), + 3671: uint16(32761), + 3672: uint16(4075), + 3673: uint16(16634), + 3674: uint16(40029), + 3675: uint16(25887), + 3676: uint16(11680), + 3677: uint16(18675), + 3678: uint16(18400), + 3679: uint16(40316), + 3680: uint16(4076), + 3681: uint16(3594), + 3683: uint16(30115), + 3684: uint16(4077), + 3686: uint16(24648), + 3687: uint16(4487), + 3688: uint16(29091), + 3689: uint16(32398), + 3690: uint16(40272), + 3691: uint16(19994), + 3692: uint16(19972), + 3693: uint16(13687), + 3694: uint16(23309), + 3695: uint16(27826), + 3696: uint16(21351), + 3697: uint16(13996), + 3698: uint16(14812), + 3699: uint16(21373), + 3700: uint16(13989), + 3701: uint16(17944), + 3702: uint16(22682), + 3703: uint16(19310), + 3704: uint16(33325), + 3705: uint16(21579), + 3706: uint16(22442), + 3707: uint16(23189), + 3708: uint16(2425), + 3710: uint16(14930), + 3711: uint16(9317), + 3712: uint16(29556), + 3713: uint16(40620), + 3714: uint16(19721), + 3715: uint16(39917), + 3716: uint16(15614), + 3717: uint16(40752), + 3718: uint16(19547), + 3719: uint16(20393), + 3720: uint16(38302), + 3721: uint16(40926), + 3722: uint16(33884), + 3723: uint16(15798), + 3724: uint16(29362), + 3725: uint16(26547), + 3726: uint16(14112), + 3727: uint16(25390), + 3728: uint16(32037), + 3729: uint16(16119), + 3730: uint16(15916), + 3731: uint16(14890), + 3732: uint16(36872), + 3733: uint16(21196), + 3734: uint16(15988), + 3735: uint16(13946), + 3736: uint16(17897), + 3737: uint16(1166), + 3738: uint16(30272), + 3739: uint16(23280), + 3740: uint16(3766), + 3741: uint16(30842), + 3742: uint16(32558), + 3743: uint16(22695), + 3744: uint16(16575), + 3745: uint16(22140), + 3746: uint16(39819), + 3747: uint16(23924), + 3748: uint16(30292), + 3749: uint16(42036), + 3750: uint16(40581), + 3751: uint16(19681), + 3753: uint16(14331), + 3754: uint16(24857), + 3755: uint16(12506), + 3756: uint16(17394), + 3758: uint16(22109), + 3759: uint16(4777), + 3760: uint16(22439), + 3761: uint16(18787), + 3762: uint16(40454), + 3763: uint16(21044), + 3764: uint16(28846), + 3765: uint16(13741), + 3767: uint16(40316), + 3768: uint16(31830), + 3769: uint16(39737), + 3770: uint16(22494), + 3771: uint16(5996), + 3772: uint16(23635), + 3773: uint16(25811), + 3774: uint16(38096), + 3775: uint16(25397), + 3776: uint16(29028), + 3777: uint16(34477), + 3778: uint16(3368), + 3779: uint16(27938), + 3780: uint16(19170), + 3781: uint16(3441), + 3783: uint16(20990), + 3784: uint16(7951), + 3785: uint16(23950), + 3786: uint16(38659), + 3787: uint16(7633), + 3788: uint16(40577), + 3789: uint16(36940), + 3790: uint16(31519), + 3791: uint16(39682), + 3792: uint16(23761), + 3793: uint16(31651), + 3794: uint16(25192), + 3795: uint16(25397), + 3796: uint16(39679), + 3797: uint16(31695), + 3798: uint16(39722), + 3799: uint16(31870), + 3801: uint16(31810), + 3802: uint16(31878), + 3803: uint16(39957), + 3804: uint16(31740), + 3805: uint16(39689), + 3807: uint16(39963), + 3808: uint16(18750), + 3809: uint16(40794), + 3810: uint16(21875), + 3811: uint16(23491), + 3812: uint16(20477), + 3813: uint16(40600), + 3814: uint16(20466), + 3815: uint16(21088), + 3816: uint16(15878), + 3817: uint16(21201), + 3818: uint16(22375), + 3819: uint16(20566), + 3820: uint16(22967), + 3821: uint16(24082), + 3822: uint16(38856), + 3823: uint16(40363), + 3824: uint16(36700), + 3825: uint16(21609), + 3826: uint16(38836), + 3827: uint16(39232), + 3828: uint16(38842), + 3829: uint16(21292), + 3830: uint16(24880), + 3831: uint16(26924), + 3832: uint16(21466), + 3833: uint16(39946), + 3834: uint16(40194), + 3835: uint16(19515), + 3836: uint16(38465), + 3837: uint16(27008), + 3838: uint16(20646), + 3839: uint16(30022), + 3840: uint16(5997), + 3841: uint16(39386), + 3842: uint16(21107), + 3844: uint16(37209), + 3845: uint16(38529), + 3846: uint16(37212), + 3848: uint16(37201), + 3849: uint16(36503), + 3850: uint16(25471), + 3851: uint16(27939), + 3852: uint16(27338), + 3853: uint16(22033), + 3854: uint16(37262), + 3855: uint16(30074), + 3856: uint16(25221), + 3857: uint16(1020), + 3858: uint16(29519), + 3859: uint16(31856), + 3860: uint16(23585), + 3861: uint16(15613), + 3863: uint16(18713), + 3864: uint16(30422), + 3865: uint16(39837), + 3866: uint16(20010), + 3867: uint16(3284), + 3868: uint16(33726), + 3869: uint16(34882), + 3871: uint16(23626), + 3872: uint16(27072), + 3874: uint16(22394), + 3875: uint16(21023), + 3876: uint16(24053), + 3877: uint16(20174), + 3878: uint16(27697), + 3879: uint16(498), + 3880: uint16(20281), + 3881: uint16(21660), + 3882: uint16(21722), + 3883: uint16(21146), + 3884: uint16(36226), + 3885: uint16(13822), + 3887: uint16(13811), + 3889: uint16(27474), + 3890: uint16(37244), + 3891: uint16(40869), + 3892: uint16(39831), + 3893: uint16(38958), + 3894: uint16(39092), + 3895: uint16(39610), + 3896: uint16(40616), + 3897: uint16(40580), + 3898: uint16(29050), + 3899: uint16(31508), + 3901: uint16(27642), + 3902: uint16(34840), + 3903: uint16(32632), + 3905: uint16(22048), + 3906: uint16(42570), + 3907: uint16(36471), + 3908: uint16(40787), + 3910: uint16(36308), + 3911: uint16(36431), + 3912: uint16(40476), + 3913: uint16(36353), + 3914: uint16(25218), + 3915: uint16(33661), + 3916: uint16(36392), + 3917: uint16(36469), + 3918: uint16(31443), + 3919: uint16(19063), + 3920: uint16(31294), + 3921: uint16(30936), + 3922: uint16(27882), + 3923: uint16(35431), + 3924: uint16(30215), + 3925: uint16(35418), + 3926: uint16(40742), + 3927: uint16(27854), + 3928: uint16(34774), + 3929: uint16(30147), + 3930: uint16(41650), + 3931: uint16(30803), + 3932: uint16(63552), + 3933: uint16(36108), + 3934: uint16(29410), + 3935: uint16(29553), + 3936: uint16(35629), + 3937: uint16(29442), + 3938: uint16(29937), + 3939: uint16(36075), + 3940: uint16(19131), + 3941: uint16(34351), + 3942: uint16(24506), + 3943: uint16(34976), + 3944: uint16(17591), + 3946: uint16(6203), + 3947: uint16(28165), + 3949: uint16(35454), + 3950: uint16(9499), + 3952: uint16(24829), + 3953: uint16(30311), + 3954: uint16(39639), + 3955: uint16(40260), + 3956: uint16(37742), + 3957: uint16(39823), + 3958: uint16(34805), + 3961: uint16(36087), + 3962: uint16(29484), + 3963: uint16(38689), + 3964: uint16(39856), + 3965: uint16(13782), + 3966: uint16(29362), + 3967: uint16(19463), + 3968: uint16(31825), + 3969: uint16(39242), + 3970: uint16(24921), + 3971: uint16(24921), + 3972: uint16(19460), + 3973: uint16(40598), + 3974: uint16(24957), + 3976: uint16(22367), + 3977: uint16(24943), + 3978: uint16(25254), + 3979: uint16(25145), + 3981: uint16(14940), + 3982: uint16(25058), + 3983: uint16(21418), + 3984: uint16(13301), + 3985: uint16(25444), + 3986: uint16(26626), + 3987: uint16(13778), + 3988: uint16(23895), + 3989: uint16(35778), + 3990: uint16(36826), + 3991: uint16(36409), + 3993: uint16(20697), + 3994: uint16(7494), + 3995: uint16(30982), + 3996: uint16(21298), + 3997: uint16(38456), + 3998: uint16(3899), + 3999: uint16(16485), + 4001: uint16(30718), + 4003: uint16(31938), + 4004: uint16(24346), + 4005: uint16(31962), + 4006: uint16(31277), + 4007: uint16(32870), + 4008: uint16(32867), + 4009: uint16(32077), + 4010: uint16(29957), + 4011: uint16(29938), + 4012: uint16(35220), + 4013: uint16(33306), + 4014: uint16(26380), + 4015: uint16(32866), + 4016: uint16(29830), + 4017: uint16(32859), + 4018: uint16(29936), + 4019: uint16(33027), + 4020: uint16(30500), + 4021: uint16(35209), + 4022: uint16(26572), + 4023: uint16(30035), + 4024: uint16(28369), + 4025: uint16(34729), + 4026: uint16(34766), + 4027: uint16(33224), + 4028: uint16(34700), + 4029: uint16(35401), + 4030: uint16(36013), + 4031: uint16(35651), + 4032: uint16(30507), + 4033: uint16(29944), + 4034: uint16(34010), + 4035: uint16(13877), + 4036: uint16(27058), + 4037: uint16(36262), + 4039: uint16(35241), + 4041: uint16(28089), + 4042: uint16(34753), + 4043: uint16(16401), + 4044: uint16(29927), + 4045: uint16(15835), + 4046: uint16(29046), + 4047: uint16(24740), + 4048: uint16(24988), + 4049: uint16(15569), + 4051: uint16(24695), + 4053: uint16(32625), + 4054: uint16(35629), + 4056: uint16(24809), + 4057: uint16(19326), + 4058: uint16(21024), + 4059: uint16(15384), + 4060: uint16(15559), + 4061: uint16(24279), + 4062: uint16(30294), + 4063: uint16(21809), + 4064: uint16(6468), + 4065: uint16(4862), + 4066: uint16(39171), + 4067: uint16(28124), + 4068: uint16(28845), + 4069: uint16(23745), + 4070: uint16(25005), + 4071: uint16(35343), + 4072: uint16(13943), + 4073: uint16(238), + 4074: uint16(26694), + 4075: uint16(20238), + 4076: uint16(17762), + 4077: uint16(23327), + 4078: uint16(25420), + 4079: uint16(40784), + 4080: uint16(40614), + 4081: uint16(25195), + 4082: uint16(1351), + 4083: uint16(37595), + 4084: uint16(1503), + 4085: uint16(16325), + 4086: uint16(34124), + 4087: uint16(17077), + 4088: uint16(29679), + 4089: uint16(20917), + 4090: uint16(13897), + 4091: uint16(18754), + 4092: uint16(35300), + 4093: uint16(37700), + 4094: uint16(6619), + 4095: uint16(33518), + 4096: uint16(15560), + 4097: uint16(30780), + 4098: uint16(26436), + 4099: uint16(25311), + 4100: uint16(18739), + 4101: uint16(35242), + 4102: uint16(672), + 4103: uint16(27571), + 4104: uint16(4869), + 4105: uint16(20395), + 4106: uint16(9453), + 4107: uint16(20488), + 4108: uint16(27945), + 4109: uint16(31364), + 4110: uint16(13824), + 4111: uint16(19121), + 4112: uint16(9491), + 4114: uint16(894), + 4115: uint16(24484), + 4116: uint16(896), + 4117: uint16(839), + 4118: uint16(28379), + 4119: uint16(1055), + 4121: uint16(20737), + 4122: uint16(13434), + 4123: uint16(20750), + 4124: uint16(39020), + 4125: uint16(14147), + 4126: uint16(33814), + 4127: uint16(18852), + 4128: uint16(1159), + 4129: uint16(20832), + 4130: uint16(13236), + 4131: uint16(20842), + 4132: uint16(3071), + 4133: uint16(8444), + 4134: uint16(741), + 4135: uint16(9520), + 4136: uint16(1422), + 4137: uint16(12851), + 4138: uint16(6531), + 4139: uint16(23426), + 4140: uint16(34685), + 4141: uint16(1459), + 4142: uint16(15513), + 4143: uint16(20914), + 4144: uint16(20920), + 4145: uint16(40244), + 4146: uint16(20937), + 4147: uint16(20943), + 4148: uint16(20945), + 4149: uint16(15580), + 4150: uint16(20947), + 4151: uint16(19110), + 4152: uint16(20915), + 4153: uint16(20962), + 4154: uint16(21314), + 4155: uint16(20973), + 4156: uint16(33741), + 4157: uint16(26942), + 4158: uint16(14125), + 4159: uint16(24443), + 4160: uint16(21003), + 4161: uint16(21030), + 4162: uint16(21052), + 4163: uint16(21173), + 4164: uint16(21079), + 4165: uint16(21140), + 4166: uint16(21177), + 4167: uint16(21189), + 4168: uint16(31765), + 4169: uint16(34114), + 4170: uint16(21216), + 4171: uint16(34317), + 4172: uint16(27411), + 4174: uint16(35550), + 4175: uint16(21833), + 4176: uint16(28377), + 4177: uint16(16256), + 4178: uint16(2388), + 4179: uint16(16364), + 4180: uint16(21299), + 4182: uint16(3042), + 4183: uint16(27851), + 4184: uint16(5926), + 4185: uint16(26651), + 4186: uint16(29653), + 4187: uint16(24650), + 4188: uint16(16042), + 4189: uint16(14540), + 4190: uint16(5864), + 4191: uint16(29149), + 4192: uint16(17570), + 4193: uint16(21357), + 4194: uint16(21364), + 4195: uint16(34475), + 4196: uint16(21374), + 4198: uint16(5526), + 4199: uint16(5651), + 4200: uint16(30694), + 4201: uint16(21395), + 4202: uint16(35483), + 4203: uint16(21408), + 4204: uint16(21419), + 4205: uint16(21422), + 4206: uint16(29607), + 4207: uint16(22386), + 4208: uint16(16217), + 4209: uint16(29596), + 4210: uint16(21441), + 4211: uint16(21445), + 4212: uint16(27721), + 4213: uint16(20041), + 4214: uint16(22526), + 4215: uint16(21465), + 4216: uint16(15019), + 4217: uint16(2959), + 4218: uint16(21472), + 4219: uint16(16363), + 4220: uint16(11683), + 4221: uint16(21494), + 4222: uint16(3191), + 4223: uint16(21523), + 4224: uint16(28793), + 4225: uint16(21803), + 4226: uint16(26199), + 4227: uint16(27995), + 4228: uint16(21613), + 4229: uint16(27475), + 4230: uint16(3444), + 4231: uint16(21853), + 4232: uint16(21647), + 4233: uint16(21668), + 4234: uint16(18342), + 4235: uint16(5901), + 4236: uint16(3805), + 4237: uint16(15796), + 4238: uint16(3405), + 4239: uint16(35260), + 4240: uint16(9880), + 4241: uint16(21831), + 4242: uint16(19693), + 4243: uint16(21551), + 4244: uint16(29719), + 4245: uint16(21894), + 4246: uint16(21929), + 4248: uint16(6359), + 4249: uint16(16442), + 4250: uint16(17746), + 4251: uint16(17461), + 4252: uint16(26291), + 4253: uint16(4276), + 4254: uint16(22071), + 4255: uint16(26317), + 4256: uint16(12938), + 4257: uint16(26276), + 4258: uint16(26285), + 4259: uint16(22093), + 4260: uint16(22095), + 4261: uint16(30961), + 4262: uint16(22257), + 4263: uint16(38791), + 4264: uint16(21502), + 4265: uint16(22272), + 4266: uint16(22255), + 4267: uint16(22253), + 4268: uint16(35686), + 4269: uint16(13859), + 4270: uint16(4687), + 4271: uint16(22342), + 4272: uint16(16805), + 4273: uint16(27758), + 4274: uint16(28811), + 4275: uint16(22338), + 4276: uint16(14001), + 4277: uint16(27774), + 4278: uint16(22502), + 4279: uint16(5142), + 4280: uint16(22531), + 4281: uint16(5204), + 4282: uint16(17251), + 4283: uint16(22566), + 4284: uint16(19445), + 4285: uint16(22620), + 4286: uint16(22698), + 4287: uint16(13665), + 4288: uint16(22752), + 4289: uint16(22748), + 4290: uint16(4668), + 4291: uint16(22779), + 4292: uint16(23551), + 4293: uint16(22339), + 4294: uint16(41296), + 4295: uint16(17016), + 4296: uint16(37843), + 4297: uint16(13729), + 4298: uint16(22815), + 4299: uint16(26790), + 4300: uint16(14019), + 4301: uint16(28249), + 4302: uint16(5694), + 4303: uint16(23076), + 4304: uint16(21843), + 4305: uint16(5778), + 4306: uint16(34053), + 4307: uint16(22985), + 4308: uint16(3406), + 4309: uint16(27777), + 4310: uint16(27946), + 4311: uint16(6108), + 4312: uint16(23001), + 4313: uint16(6139), + 4314: uint16(6066), + 4315: uint16(28070), + 4316: uint16(28017), + 4317: uint16(6184), + 4318: uint16(5845), + 4319: uint16(23033), + 4320: uint16(28229), + 4321: uint16(23211), + 4322: uint16(23139), + 4323: uint16(14054), + 4324: uint16(18857), + 4326: uint16(14088), + 4327: uint16(23190), + 4328: uint16(29797), + 4329: uint16(23251), + 4330: uint16(28577), + 4331: uint16(9556), + 4332: uint16(15749), + 4333: uint16(6417), + 4334: uint16(14130), + 4335: uint16(5816), + 4336: uint16(24195), + 4337: uint16(21200), + 4338: uint16(23414), + 4339: uint16(25992), + 4340: uint16(23420), + 4341: uint16(31246), + 4342: uint16(16388), + 4343: uint16(18525), + 4344: uint16(516), + 4345: uint16(23509), + 4346: uint16(24928), + 4347: uint16(6708), + 4348: uint16(22988), + 4349: uint16(1445), + 4350: uint16(23539), + 4351: uint16(23453), + 4352: uint16(19728), + 4353: uint16(23557), + 4354: uint16(6980), + 4355: uint16(23571), + 4356: uint16(29646), + 4357: uint16(23572), + 4358: uint16(7333), + 4359: uint16(27432), + 4360: uint16(23625), + 4361: uint16(18653), + 4362: uint16(23685), + 4363: uint16(23785), + 4364: uint16(23791), + 4365: uint16(23947), + 4366: uint16(7673), + 4367: uint16(7735), + 4368: uint16(23824), + 4369: uint16(23832), + 4370: uint16(23878), + 4371: uint16(7844), + 4372: uint16(23738), + 4373: uint16(24023), + 4374: uint16(33532), + 4375: uint16(14381), + 4376: uint16(18689), + 4377: uint16(8265), + 4378: uint16(8563), + 4379: uint16(33415), + 4380: uint16(14390), + 4381: uint16(15298), + 4382: uint16(24110), + 4383: uint16(27274), + 4385: uint16(24186), + 4386: uint16(17596), + 4387: uint16(3283), + 4388: uint16(21414), + 4389: uint16(20151), + 4391: uint16(21416), + 4392: uint16(6001), + 4393: uint16(24073), + 4394: uint16(24308), + 4395: uint16(33922), + 4396: uint16(24313), + 4397: uint16(24315), + 4398: uint16(14496), + 4399: uint16(24316), + 4400: uint16(26686), + 4401: uint16(37915), + 4402: uint16(24333), + 4403: uint16(449), + 4404: uint16(63636), + 4405: uint16(15070), + 4406: uint16(18606), + 4407: uint16(4922), + 4408: uint16(24378), + 4409: uint16(26760), + 4410: uint16(9168), + 4412: uint16(9329), + 4413: uint16(24419), + 4414: uint16(38845), + 4415: uint16(28270), + 4416: uint16(24434), + 4417: uint16(37696), + 4418: uint16(35382), + 4419: uint16(24487), + 4420: uint16(23990), + 4421: uint16(15711), + 4422: uint16(21072), + 4423: uint16(8042), + 4424: uint16(28920), + 4425: uint16(9832), + 4426: uint16(37334), + 4427: uint16(670), + 4428: uint16(35369), + 4429: uint16(24625), + 4430: uint16(26245), + 4431: uint16(6263), + 4432: uint16(14691), + 4433: uint16(15815), + 4434: uint16(13881), + 4435: uint16(22416), + 4436: uint16(10164), + 4437: uint16(31089), + 4438: uint16(15936), + 4439: uint16(24734), + 4441: uint16(24755), + 4442: uint16(18818), + 4443: uint16(18831), + 4444: uint16(31315), + 4445: uint16(29860), + 4446: uint16(20705), + 4447: uint16(23200), + 4448: uint16(24932), + 4449: uint16(33828), + 4450: uint16(24898), + 4451: uint16(63654), + 4452: uint16(28370), + 4453: uint16(24961), + 4454: uint16(20980), + 4455: uint16(1622), + 4456: uint16(24967), + 4457: uint16(23466), + 4458: uint16(16311), + 4459: uint16(10335), + 4460: uint16(25043), + 4461: uint16(35741), + 4462: uint16(39261), + 4463: uint16(25040), + 4464: uint16(14642), + 4465: uint16(10624), + 4466: uint16(10433), + 4467: uint16(24611), + 4468: uint16(24924), + 4469: uint16(25886), + 4470: uint16(25483), + 4471: uint16(280), + 4472: uint16(25285), + 4473: uint16(6000), + 4474: uint16(25301), + 4475: uint16(11789), + 4476: uint16(25452), + 4477: uint16(18911), + 4478: uint16(14871), + 4479: uint16(25656), + 4480: uint16(25592), + 4481: uint16(5006), + 4482: uint16(6140), + 4484: uint16(28554), + 4485: uint16(11830), + 4486: uint16(38932), + 4487: uint16(16524), + 4488: uint16(22301), + 4489: uint16(25825), + 4490: uint16(25829), + 4491: uint16(38011), + 4492: uint16(14950), + 4493: uint16(25658), + 4494: uint16(14935), + 4495: uint16(25933), + 4496: uint16(28438), + 4497: uint16(18984), + 4498: uint16(18979), + 4499: uint16(25989), + 4500: uint16(25965), + 4501: uint16(25951), + 4502: uint16(12414), + 4503: uint16(26037), + 4504: uint16(18752), + 4505: uint16(19255), + 4506: uint16(26065), + 4507: uint16(16600), + 4508: uint16(6185), + 4509: uint16(26080), + 4510: uint16(26083), + 4511: uint16(24543), + 4512: uint16(13312), + 4513: uint16(26136), + 4514: uint16(12791), + 4515: uint16(12792), + 4516: uint16(26180), + 4517: uint16(12708), + 4518: uint16(12709), + 4519: uint16(26187), + 4520: uint16(3701), + 4521: uint16(26215), + 4522: uint16(20966), + 4523: uint16(26227), + 4525: uint16(7741), + 4526: uint16(12849), + 4527: uint16(34292), + 4528: uint16(12744), + 4529: uint16(21267), + 4530: uint16(30661), + 4531: uint16(10487), + 4532: uint16(39332), + 4533: uint16(26370), + 4534: uint16(17308), + 4535: uint16(18977), + 4536: uint16(15147), + 4537: uint16(27130), + 4538: uint16(14274), + 4540: uint16(26471), + 4541: uint16(26466), + 4542: uint16(16845), + 4543: uint16(37101), + 4544: uint16(26583), + 4545: uint16(17641), + 4546: uint16(26658), + 4547: uint16(28240), + 4548: uint16(37436), + 4549: uint16(26625), + 4550: uint16(13286), + 4551: uint16(28064), + 4552: uint16(26717), + 4553: uint16(13423), + 4554: uint16(27105), + 4555: uint16(27147), + 4556: uint16(35551), + 4557: uint16(26995), + 4558: uint16(26819), + 4559: uint16(13773), + 4560: uint16(26881), + 4561: uint16(26880), + 4562: uint16(15666), + 4563: uint16(14849), + 4564: uint16(13884), + 4565: uint16(15232), + 4566: uint16(26540), + 4567: uint16(26977), + 4568: uint16(35402), + 4569: uint16(17148), + 4570: uint16(26934), + 4571: uint16(27032), + 4572: uint16(15265), + 4573: uint16(969), + 4574: uint16(33635), + 4575: uint16(20624), + 4576: uint16(27129), + 4577: uint16(13913), + 4578: uint16(8490), + 4579: uint16(27205), + 4580: uint16(14083), + 4581: uint16(27293), + 4582: uint16(15347), + 4583: uint16(26545), + 4584: uint16(27336), + 4585: uint16(37276), + 4586: uint16(15373), + 4587: uint16(27421), + 4588: uint16(2339), + 4589: uint16(24798), + 4590: uint16(27445), + 4591: uint16(27508), + 4592: uint16(10189), + 4593: uint16(28341), + 4594: uint16(15067), + 4595: uint16(949), + 4596: uint16(6488), + 4597: uint16(14144), + 4598: uint16(21537), + 4599: uint16(15194), + 4600: uint16(27617), + 4601: uint16(16124), + 4602: uint16(27612), + 4603: uint16(27703), + 4604: uint16(9355), + 4605: uint16(18673), + 4606: uint16(27473), + 4607: uint16(27738), + 4608: uint16(33318), + 4609: uint16(27769), + 4610: uint16(15804), + 4611: uint16(17605), + 4612: uint16(15805), + 4613: uint16(16804), + 4614: uint16(18700), + 4615: uint16(18688), + 4616: uint16(15561), + 4617: uint16(14053), + 4618: uint16(15595), + 4619: uint16(3378), + 4620: uint16(39811), + 4621: uint16(12793), + 4622: uint16(9361), + 4623: uint16(32655), + 4624: uint16(26679), + 4625: uint16(27941), + 4626: uint16(28065), + 4627: uint16(28139), + 4628: uint16(28054), + 4629: uint16(27996), + 4630: uint16(28284), + 4631: uint16(28420), + 4632: uint16(18815), + 4633: uint16(16517), + 4634: uint16(28274), + 4635: uint16(34099), + 4636: uint16(28532), + 4637: uint16(20935), + 4640: uint16(33838), + 4641: uint16(35617), + 4643: uint16(15919), + 4644: uint16(29779), + 4645: uint16(16258), + 4646: uint16(31180), + 4647: uint16(28239), + 4648: uint16(23185), + 4649: uint16(12363), + 4650: uint16(28664), + 4651: uint16(14093), + 4652: uint16(28573), + 4653: uint16(15920), + 4654: uint16(28410), + 4655: uint16(5271), + 4656: uint16(16445), + 4657: uint16(17749), + 4658: uint16(37872), + 4659: uint16(28484), + 4660: uint16(28508), + 4661: uint16(15694), + 4662: uint16(28532), + 4663: uint16(37232), + 4664: uint16(15675), + 4665: uint16(28575), + 4666: uint16(16708), + 4667: uint16(28627), + 4668: uint16(16529), + 4669: uint16(16725), + 4670: uint16(16441), + 4671: uint16(16368), + 4672: uint16(16308), + 4673: uint16(16703), + 4674: uint16(20959), + 4675: uint16(16726), + 4676: uint16(16727), + 4677: uint16(16704), + 4678: uint16(25053), + 4679: uint16(28747), + 4680: uint16(28798), + 4681: uint16(28839), + 4682: uint16(28801), + 4683: uint16(28876), + 4684: uint16(28885), + 4685: uint16(28886), + 4686: uint16(28895), + 4687: uint16(16644), + 4688: uint16(15848), + 4689: uint16(29108), + 4690: uint16(29078), + 4691: uint16(17015), + 4692: uint16(28971), + 4693: uint16(28997), + 4694: uint16(23176), + 4695: uint16(29002), + 4697: uint16(23708), + 4698: uint16(17253), + 4699: uint16(29007), + 4700: uint16(37730), + 4701: uint16(17089), + 4702: uint16(28972), + 4703: uint16(17498), + 4704: uint16(18983), + 4705: uint16(18978), + 4706: uint16(29114), + 4707: uint16(35816), + 4708: uint16(28861), + 4709: uint16(29198), + 4710: uint16(37954), + 4711: uint16(29205), + 4712: uint16(22801), + 4713: uint16(37955), + 4714: uint16(29220), + 4715: uint16(37697), + 4716: uint16(22021), + 4717: uint16(29230), + 4718: uint16(29248), + 4719: uint16(18804), + 4720: uint16(26813), + 4721: uint16(29269), + 4722: uint16(29271), + 4723: uint16(15957), + 4724: uint16(12356), + 4725: uint16(26637), + 4726: uint16(28477), + 4727: uint16(29314), + 4729: uint16(29483), + 4730: uint16(18467), + 4731: uint16(34859), + 4732: uint16(18669), + 4733: uint16(34820), + 4734: uint16(29480), + 4735: uint16(29486), + 4736: uint16(29647), + 4737: uint16(29610), + 4738: uint16(3130), + 4739: uint16(27182), + 4740: uint16(29641), + 4741: uint16(29769), + 4742: uint16(16866), + 4743: uint16(5863), + 4744: uint16(18980), + 4745: uint16(26147), + 4746: uint16(14021), + 4747: uint16(18871), + 4748: uint16(18829), + 4749: uint16(18939), + 4750: uint16(29687), + 4751: uint16(29717), + 4752: uint16(26883), + 4753: uint16(18982), + 4754: uint16(29753), + 4755: uint16(1475), + 4756: uint16(16087), + 4758: uint16(10413), + 4759: uint16(29792), + 4760: uint16(36530), + 4761: uint16(29767), + 4762: uint16(29668), + 4763: uint16(29814), + 4764: uint16(33721), + 4765: uint16(29804), + 4766: uint16(14128), + 4767: uint16(29812), + 4768: uint16(37873), + 4769: uint16(27180), + 4770: uint16(29826), + 4771: uint16(18771), + 4772: uint16(19084), + 4773: uint16(16735), + 4774: uint16(19065), + 4775: uint16(35727), + 4776: uint16(23366), + 4777: uint16(35843), + 4778: uint16(6302), + 4779: uint16(29896), + 4780: uint16(6536), + 4781: uint16(29966), + 4783: uint16(29982), + 4784: uint16(36569), + 4785: uint16(6731), + 4786: uint16(23511), + 4787: uint16(36524), + 4788: uint16(37765), + 4789: uint16(30029), + 4790: uint16(30026), + 4791: uint16(30055), + 4792: uint16(30062), + 4793: uint16(20354), + 4794: uint16(16132), + 4795: uint16(19731), + 4796: uint16(30094), + 4797: uint16(29789), + 4798: uint16(30110), + 4799: uint16(30132), + 4800: uint16(30210), + 4801: uint16(30252), + 4802: uint16(30289), + 4803: uint16(30287), + 4804: uint16(30319), + 4805: uint16(30326), + 4806: uint16(25589), + 4807: uint16(30352), + 4808: uint16(33263), + 4809: uint16(14328), + 4810: uint16(26897), + 4811: uint16(26894), + 4812: uint16(30369), + 4813: uint16(30373), + 4814: uint16(30391), + 4815: uint16(30412), + 4816: uint16(28575), + 4817: uint16(33890), + 4818: uint16(20637), + 4819: uint16(20861), + 4820: uint16(7708), + 4821: uint16(30494), + 4822: uint16(30502), + 4823: uint16(30528), + 4824: uint16(25775), + 4825: uint16(21024), + 4826: uint16(30552), + 4827: uint16(12972), + 4828: uint16(30639), + 4829: uint16(35172), + 4830: uint16(35176), + 4831: uint16(5825), + 4832: uint16(30708), + 4834: uint16(4982), + 4835: uint16(18962), + 4836: uint16(26826), + 4837: uint16(30895), + 4838: uint16(30919), + 4839: uint16(30931), + 4840: uint16(38565), + 4841: uint16(31022), + 4842: uint16(21984), + 4843: uint16(30935), + 4844: uint16(31028), + 4845: uint16(30897), + 4846: uint16(30220), + 4847: uint16(36792), + 4848: uint16(34948), + 4849: uint16(35627), + 4850: uint16(24707), + 4851: uint16(9756), + 4852: uint16(31110), + 4853: uint16(35072), + 4854: uint16(26882), + 4855: uint16(31104), + 4856: uint16(22615), + 4857: uint16(31133), + 4858: uint16(31545), + 4859: uint16(31036), + 4860: uint16(31145), + 4861: uint16(28202), + 4862: uint16(28966), + 4863: uint16(16040), + 4864: uint16(31174), + 4865: uint16(37133), + 4866: uint16(31188), + 4867: uint16(1312), + 4868: uint16(17503), + 4869: uint16(21007), + 4870: uint16(47234), + 4871: uint16(248), + 4872: uint16(16384), + 4873: uint16(43296), + 4874: uint16(1102), + 4877: uint16(2868), + 4878: uint16(1), + 4886: uint16(3072), + 4887: uint16(64), + 4891: uint16(1024), + 4892: uint16(88), + 4893: uint16(60), + 4896: uint16(23680), + 4897: uint16(56493), + 4898: uint16(48115), + 4899: uint16(17353), + 4900: uint16(60910), + 4901: uint16(4004), + 4902: uint16(49446), + 4903: uint16(30363), + 4904: uint16(61426), + 4905: uint16(64478), + 4906: uint16(63482), + 4907: uint16(12815), + 4908: uint16(44868), + 4909: uint16(61438), + 4910: uint16(65277), + 4911: uint16(24593), + 4912: uint16(176), + 4913: uint16(8448), + 4914: uint16(33049), + 4915: uint16(4128), + 4916: uint16(43144), + 4917: uint16(8544), + 4918: uint16(9321), + 4919: uint16(17408), + 4920: uint16(50313), + 4922: uint16(16387), + 4923: uint16(53), + 4924: uint16(33859), + 4925: uint16(20785), + 4926: uint16(26771), + 4927: uint16(514), + 4933: uint16(16384), + 4934: uint16(256), + 4935: uint16(44160), + 4936: uint16(33380), + 4937: uint16(35904), + 4938: uint16(37025), + 4939: uint16(20484), + 4940: uint16(54368), + 4941: uint16(53760), + 4942: uint16(6186), + 4943: uint16(26781), + 4944: uint16(38709), + 4945: uint16(55375), + 4946: uint16(8440), + 4947: uint16(33476), + 4948: uint16(10268), + 4949: uint16(30082), + 4950: uint16(660), + 4951: uint16(16440), + 4952: uint16(41376), + 4953: uint16(4293), + 4954: uint16(19825), + 4955: uint16(3524), + 4956: uint16(47512), + 4957: uint16(23390), + 4958: uint16(17153), + 4959: uint16(39327), + 4960: uint16(30723), + 4961: uint16(57888), + 4962: uint16(2079), + 4963: uint16(393), + 4964: uint16(16585), + 4965: uint16(775), + 4966: uint16(39437), + 4967: uint16(21136), + 4968: uint16(20433), + 4969: uint16(892), + 4970: uint16(8450), + 4971: uint16(49184), + 4972: uint16(4974), + 4973: uint16(46467), + 4974: uint16(62939), + 4975: uint16(30693), + 4976: uint16(20368), + 4977: uint16(39447), + 4978: uint16(5942), + 4979: uint16(12), + 4980: uint16(47726), + 4981: uint16(12041), + 4982: uint16(21600), + 4983: uint16(7680), + 4984: uint16(26744), + 4985: uint16(28706), + 4986: uint16(40534), + 4987: uint16(62245), + 4988: uint16(46990), + 4989: uint16(2839), + 4990: uint16(59119), + 4991: uint16(6007), + 4992: uint16(7003), + 4993: uint16(4289), + 4994: uint16(36248), + 4995: uint16(6162), + 4996: uint16(53174), + 4997: uint16(12545), + 4998: uint16(6770), + 4999: uint16(11355), + 5000: uint16(49334), + 5001: uint16(57888), + 5002: uint16(23747), + 5003: uint16(7042), + 5004: uint16(56032), + 5005: uint16(34254), + 5006: uint16(16598), + 5007: uint16(21673), + 5008: uint16(53259), + 5009: uint16(18447), + 5010: uint16(16452), + 5011: uint16(2320), + 5012: uint16(16596), + 5013: uint16(15278), + 5014: uint16(7780), + 5015: uint16(11076), + 5016: uint16(2071), + 5017: uint16(33414), + 5018: uint16(6198), + 5019: uint16(35232), + 5020: uint16(40167), + 5021: uint16(2139), + 5022: uint16(900), + 5023: uint16(55810), + 5024: uint16(60560), + 5025: uint16(34779), + 5026: uint16(49029), + 5027: uint16(44450), + 5028: uint16(36509), + 5029: uint16(39069), + 5030: uint16(9504), + 5031: uint16(70), + 5032: uint16(40774), + 5033: uint16(58239), + 5034: uint16(51669), + 5035: uint16(62596), + 5036: uint16(19926), + 5037: uint16(58118), + 5038: uint16(6326), + 5039: uint16(2322), + 5041: uint16(1024), + 5043: uint16(32), + 5045: uint16(512), + 5050: uint16(8192), + 5057: uint16(8), + 5058: uint16(36352), + 5059: uint16(28280), + 5060: uint16(16223), + 5061: uint16(56702), + 5062: uint16(63293), + 5063: uint16(39932), + 5064: uint16(44796), + 5065: uint16(65490), + 5066: uint16(27535), + 5067: uint16(59377), + 5068: uint16(47807), + 5069: uint16(28334), + 5070: uint16(61207), + 5071: uint16(42972), + 5072: uint16(46654), + 5073: uint16(30645), + 5074: uint16(37577), + 5075: uint16(42455), + 5076: uint16(19126), + 5077: uint16(39790), + 5078: uint16(33209), + 5079: uint16(26445), + 5080: uint16(21758), + 5081: uint16(39921), + 5082: uint16(65122), + 5083: uint16(21103), + 5084: uint16(14039), + 5085: uint16(49150), + 5086: uint16(17705), + 5087: uint16(63873), + 5088: uint16(26045), + 5089: uint16(17062), + 5090: uint16(57), + 5091: uint16(16896), + 5092: uint16(36704), + 5093: uint16(37888), + 5094: uint16(16448), + 5095: uint16(45010), + 5096: uint16(53719), + 5097: uint16(219), + 5098: uint16(39072), + 5099: uint16(31666), + 5100: uint16(20998), + 5101: uint16(38944), + 5102: uint16(51222), + 5103: uint16(2365), + 5105: uint16(1), + 5107: uint16(2561), + 5108: uint16(2226), + 5109: uint16(128), + 5111: uint16(34820), + 5112: uint16(5152), + 5113: uint16(19472), + 5115: uint16(4), + 5116: uint16(17569), + 5117: uint16(16), + 5118: uint16(321), + 5119: uint16(2048), + 5120: uint16(61504), + 5121: uint16(20447), + 5122: uint16(22582), + 5123: uint16(62961), + 5124: uint16(32949), + 5125: uint16(26613), + 5126: uint16(16512), + 5127: uint16(20480), + 5128: uint16(16718), + 5129: uint16(33992), + 5130: uint16(23040), + 5131: uint16(55392), + 5132: uint16(11009), + 5133: uint16(20481), + 5134: uint16(5793), + 5135: uint16(16580), + 5136: uint16(28402), + 5137: uint16(44049), + 5138: uint16(14624), + 5139: uint16(49348), + 5140: uint16(1800), + 5141: uint16(2316), + 5142: uint16(38552), + 5143: uint16(39876), + 5144: uint16(7184), + 5145: uint16(27800), + 5146: uint16(10886), + 5147: uint16(422), + 5148: uint16(4422), + 5149: uint16(58733), + 5150: uint16(50379), + 5151: uint16(37568), + 5152: uint16(8464), + 5153: uint16(4630), + 5154: uint16(29341), + 5155: uint16(27124), + 5156: uint16(5902), + 5157: uint16(41514), + 5158: uint16(62593), + 5159: uint16(123), + 5160: uint16(41992), + 5161: uint16(36875), + 5162: uint16(11280), + 5163: uint16(14796), + 5164: uint16(330), + 5165: uint16(5872), + 5166: uint16(2571), + 5167: uint16(3136), + 5168: uint16(59933), + 5169: uint16(17420), + 5170: uint16(17678), + 5171: uint16(2), +} + +var _ksc = [93][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(183), + 4: uint16(8229), + 5: uint16(8230), + 6: uint16(168), + 7: uint16(12291), + 8: uint16(173), + 9: uint16(8213), + 10: uint16(8741), + 11: uint16(65340), + 12: uint16(8764), + 13: uint16(8216), + 14: uint16(8217), + 15: uint16(8220), + 16: uint16(8221), + 17: uint16(12308), + 18: uint16(12309), + 19: uint16(12296), + 20: uint16(12297), + 21: uint16(12298), + 22: uint16(12299), + 23: uint16(12300), + 24: uint16(12301), + 25: uint16(12302), + 26: uint16(12303), + 27: uint16(12304), + 28: uint16(12305), + 29: uint16(177), + 30: uint16(215), + 31: uint16(247), + 32: uint16(8800), + 33: uint16(8804), + 34: uint16(8805), + 35: uint16(8734), + 36: uint16(8756), + 37: uint16(176), + 38: uint16(8242), + 39: uint16(8243), + 40: uint16(8451), + 41: uint16(8491), + 42: uint16(65504), + 43: uint16(65505), + 44: uint16(65509), + 45: uint16(9794), + 46: uint16(9792), + 47: uint16(8736), + 48: uint16(8869), + 49: uint16(8978), + 50: uint16(8706), + 51: uint16(8711), + 52: uint16(8801), + 53: uint16(8786), + 54: uint16(167), + 55: uint16(8251), + 56: uint16(9734), + 57: uint16(9733), + 58: uint16(9675), + 59: uint16(9679), + 60: uint16(9678), + 61: uint16(9671), + 62: uint16(9670), + 63: uint16(9633), + 64: uint16(9632), + 65: uint16(9651), + 66: uint16(9650), + 67: uint16(9661), + 68: uint16(9660), + 69: uint16(8594), + 70: uint16(8592), + 71: uint16(8593), + 72: uint16(8595), + 73: uint16(8596), + 74: uint16(12307), + 75: uint16(8810), + 76: uint16(8811), + 77: uint16(8730), + 78: uint16(8765), + 79: uint16(8733), + 80: uint16(8757), + 81: uint16(8747), + 82: uint16(8748), + 83: uint16(8712), + 84: uint16(8715), + 85: uint16(8838), + 86: uint16(8839), + 87: uint16(8834), + 88: uint16(8835), + 89: uint16(8746), + 90: uint16(8745), + 91: uint16(8743), + 92: uint16(8744), + 93: uint16(65506), + }, + 1: { + 0: uint16(8658), + 1: uint16(8660), + 2: uint16(8704), + 3: uint16(8707), + 4: uint16(180), + 5: uint16(65374), + 6: uint16(711), + 7: uint16(728), + 8: uint16(733), + 9: uint16(730), + 10: uint16(729), + 11: uint16(184), + 12: uint16(731), + 13: uint16(161), + 14: uint16(191), + 15: uint16(720), + 16: uint16(8750), + 17: uint16(8721), + 18: uint16(8719), + 19: uint16(164), + 20: uint16(8457), + 21: uint16(8240), + 22: uint16(9665), + 23: uint16(9664), + 24: uint16(9655), + 25: uint16(9654), + 26: uint16(9828), + 27: uint16(9824), + 28: uint16(9825), + 29: uint16(9829), + 30: uint16(9831), + 31: uint16(9827), + 32: uint16(8857), + 33: uint16(9672), + 34: uint16(9635), + 35: uint16(9680), + 36: uint16(9681), + 37: uint16(9618), + 38: uint16(9636), + 39: uint16(9637), + 40: uint16(9640), + 41: uint16(9639), + 42: uint16(9638), + 43: uint16(9641), + 44: uint16(9832), + 45: uint16(9743), + 46: uint16(9742), + 47: uint16(9756), + 48: uint16(9758), + 49: uint16(182), + 50: uint16(8224), + 51: uint16(8225), + 52: uint16(8597), + 53: uint16(8599), + 54: uint16(8601), + 55: uint16(8598), + 56: uint16(8600), + 57: uint16(9837), + 58: uint16(9833), + 59: uint16(9834), + 60: uint16(9836), + 61: uint16(12927), + 62: uint16(12828), + 63: uint16(8470), + 64: uint16(13255), + 65: uint16(8482), + 66: uint16(13250), + 67: uint16(13272), + 68: uint16(8481), + 69: uint16(8364), + 70: uint16(174), + }, + 2: { + 0: uint16(65281), + 1: uint16(65282), + 2: uint16(65283), + 3: uint16(65284), + 4: uint16(65285), + 5: uint16(65286), + 6: uint16(65287), + 7: uint16(65288), + 8: uint16(65289), + 9: uint16(65290), + 10: uint16(65291), + 11: uint16(65292), + 12: uint16(65293), + 13: uint16(65294), + 14: uint16(65295), + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 25: uint16(65306), + 26: uint16(65307), + 27: uint16(65308), + 28: uint16(65309), + 29: uint16(65310), + 30: uint16(65311), + 31: uint16(65312), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 58: uint16(65339), + 59: uint16(65510), + 60: uint16(65341), + 61: uint16(65342), + 62: uint16(65343), + 63: uint16(65344), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + 90: uint16(65371), + 91: uint16(65372), + 92: uint16(65373), + 93: uint16(65507), + }, + 3: { + 0: uint16(12593), + 1: uint16(12594), + 2: uint16(12595), + 3: uint16(12596), + 4: uint16(12597), + 5: uint16(12598), + 6: uint16(12599), + 7: uint16(12600), + 8: uint16(12601), + 9: uint16(12602), + 10: uint16(12603), + 11: uint16(12604), + 12: uint16(12605), + 13: uint16(12606), + 14: uint16(12607), + 15: uint16(12608), + 16: uint16(12609), + 17: uint16(12610), + 18: uint16(12611), + 19: uint16(12612), + 20: uint16(12613), + 21: uint16(12614), + 22: uint16(12615), + 23: uint16(12616), + 24: uint16(12617), + 25: uint16(12618), + 26: uint16(12619), + 27: uint16(12620), + 28: uint16(12621), + 29: uint16(12622), + 30: uint16(12623), + 31: uint16(12624), + 32: uint16(12625), + 33: uint16(12626), + 34: uint16(12627), + 35: uint16(12628), + 36: uint16(12629), + 37: uint16(12630), + 38: uint16(12631), + 39: uint16(12632), + 40: uint16(12633), + 41: uint16(12634), + 42: uint16(12635), + 43: uint16(12636), + 44: uint16(12637), + 45: uint16(12638), + 46: uint16(12639), + 47: uint16(12640), + 48: uint16(12641), + 49: uint16(12642), + 50: uint16(12643), + 51: uint16(12644), + 52: uint16(12645), + 53: uint16(12646), + 54: uint16(12647), + 55: uint16(12648), + 56: uint16(12649), + 57: uint16(12650), + 58: uint16(12651), + 59: uint16(12652), + 60: uint16(12653), + 61: uint16(12654), + 62: uint16(12655), + 63: uint16(12656), + 64: uint16(12657), + 65: uint16(12658), + 66: uint16(12659), + 67: uint16(12660), + 68: uint16(12661), + 69: uint16(12662), + 70: uint16(12663), + 71: uint16(12664), + 72: uint16(12665), + 73: uint16(12666), + 74: uint16(12667), + 75: uint16(12668), + 76: uint16(12669), + 77: uint16(12670), + 78: uint16(12671), + 79: uint16(12672), + 80: uint16(12673), + 81: uint16(12674), + 82: uint16(12675), + 83: uint16(12676), + 84: uint16(12677), + 85: uint16(12678), + 86: uint16(12679), + 87: uint16(12680), + 88: uint16(12681), + 89: uint16(12682), + 90: uint16(12683), + 91: uint16(12684), + 92: uint16(12685), + 93: uint16(12686), + }, + 4: { + 0: uint16(8560), + 1: uint16(8561), + 2: uint16(8562), + 3: uint16(8563), + 4: uint16(8564), + 5: uint16(8565), + 6: uint16(8566), + 7: uint16(8567), + 8: uint16(8568), + 9: uint16(8569), + 15: uint16(8544), + 16: uint16(8545), + 17: uint16(8546), + 18: uint16(8547), + 19: uint16(8548), + 20: uint16(8549), + 21: uint16(8550), + 22: uint16(8551), + 23: uint16(8552), + 24: uint16(8553), + 32: uint16(913), + 33: uint16(914), + 34: uint16(915), + 35: uint16(916), + 36: uint16(917), + 37: uint16(918), + 38: uint16(919), + 39: uint16(920), + 40: uint16(921), + 41: uint16(922), + 42: uint16(923), + 43: uint16(924), + 44: uint16(925), + 45: uint16(926), + 46: uint16(927), + 47: uint16(928), + 48: uint16(929), + 49: uint16(931), + 50: uint16(932), + 51: uint16(933), + 52: uint16(934), + 53: uint16(935), + 54: uint16(936), + 55: uint16(937), + 64: uint16(945), + 65: uint16(946), + 66: uint16(947), + 67: uint16(948), + 68: uint16(949), + 69: uint16(950), + 70: uint16(951), + 71: uint16(952), + 72: uint16(953), + 73: uint16(954), + 74: uint16(955), + 75: uint16(956), + 76: uint16(957), + 77: uint16(958), + 78: uint16(959), + 79: uint16(960), + 80: uint16(961), + 81: uint16(963), + 82: uint16(964), + 83: uint16(965), + 84: uint16(966), + 85: uint16(967), + 86: uint16(968), + 87: uint16(969), + }, + 5: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + 32: uint16(9490), + 33: uint16(9489), + 34: uint16(9498), + 35: uint16(9497), + 36: uint16(9494), + 37: uint16(9493), + 38: uint16(9486), + 39: uint16(9485), + 40: uint16(9502), + 41: uint16(9503), + 42: uint16(9505), + 43: uint16(9506), + 44: uint16(9510), + 45: uint16(9511), + 46: uint16(9513), + 47: uint16(9514), + 48: uint16(9517), + 49: uint16(9518), + 50: uint16(9521), + 51: uint16(9522), + 52: uint16(9525), + 53: uint16(9526), + 54: uint16(9529), + 55: uint16(9530), + 56: uint16(9533), + 57: uint16(9534), + 58: uint16(9536), + 59: uint16(9537), + 60: uint16(9539), + 61: uint16(9540), + 62: uint16(9541), + 63: uint16(9542), + 64: uint16(9543), + 65: uint16(9544), + 66: uint16(9545), + 67: uint16(9546), + }, + 6: { + 0: uint16(13205), + 1: uint16(13206), + 2: uint16(13207), + 3: uint16(8467), + 4: uint16(13208), + 5: uint16(13252), + 6: uint16(13219), + 7: uint16(13220), + 8: uint16(13221), + 9: uint16(13222), + 10: uint16(13209), + 11: uint16(13210), + 12: uint16(13211), + 13: uint16(13212), + 14: uint16(13213), + 15: uint16(13214), + 16: uint16(13215), + 17: uint16(13216), + 18: uint16(13217), + 19: uint16(13218), + 20: uint16(13258), + 21: uint16(13197), + 22: uint16(13198), + 23: uint16(13199), + 24: uint16(13263), + 25: uint16(13192), + 26: uint16(13193), + 27: uint16(13256), + 28: uint16(13223), + 29: uint16(13224), + 30: uint16(13232), + 31: uint16(13233), + 32: uint16(13234), + 33: uint16(13235), + 34: uint16(13236), + 35: uint16(13237), + 36: uint16(13238), + 37: uint16(13239), + 38: uint16(13240), + 39: uint16(13241), + 40: uint16(13184), + 41: uint16(13185), + 42: uint16(13186), + 43: uint16(13187), + 44: uint16(13188), + 45: uint16(13242), + 46: uint16(13243), + 47: uint16(13244), + 48: uint16(13245), + 49: uint16(13246), + 50: uint16(13247), + 51: uint16(13200), + 52: uint16(13201), + 53: uint16(13202), + 54: uint16(13203), + 55: uint16(13204), + 56: uint16(8486), + 57: uint16(13248), + 58: uint16(13249), + 59: uint16(13194), + 60: uint16(13195), + 61: uint16(13196), + 62: uint16(13270), + 63: uint16(13253), + 64: uint16(13229), + 65: uint16(13230), + 66: uint16(13231), + 67: uint16(13275), + 68: uint16(13225), + 69: uint16(13226), + 70: uint16(13227), + 71: uint16(13228), + 72: uint16(13277), + 73: uint16(13264), + 74: uint16(13267), + 75: uint16(13251), + 76: uint16(13257), + 77: uint16(13276), + 78: uint16(13254), + }, + 7: { + 0: uint16(198), + 1: uint16(208), + 2: uint16(170), + 3: uint16(294), + 5: uint16(306), + 7: uint16(319), + 8: uint16(321), + 9: uint16(216), + 10: uint16(338), + 11: uint16(186), + 12: uint16(222), + 13: uint16(358), + 14: uint16(330), + 16: uint16(12896), + 17: uint16(12897), + 18: uint16(12898), + 19: uint16(12899), + 20: uint16(12900), + 21: uint16(12901), + 22: uint16(12902), + 23: uint16(12903), + 24: uint16(12904), + 25: uint16(12905), + 26: uint16(12906), + 27: uint16(12907), + 28: uint16(12908), + 29: uint16(12909), + 30: uint16(12910), + 31: uint16(12911), + 32: uint16(12912), + 33: uint16(12913), + 34: uint16(12914), + 35: uint16(12915), + 36: uint16(12916), + 37: uint16(12917), + 38: uint16(12918), + 39: uint16(12919), + 40: uint16(12920), + 41: uint16(12921), + 42: uint16(12922), + 43: uint16(12923), + 44: uint16(9424), + 45: uint16(9425), + 46: uint16(9426), + 47: uint16(9427), + 48: uint16(9428), + 49: uint16(9429), + 50: uint16(9430), + 51: uint16(9431), + 52: uint16(9432), + 53: uint16(9433), + 54: uint16(9434), + 55: uint16(9435), + 56: uint16(9436), + 57: uint16(9437), + 58: uint16(9438), + 59: uint16(9439), + 60: uint16(9440), + 61: uint16(9441), + 62: uint16(9442), + 63: uint16(9443), + 64: uint16(9444), + 65: uint16(9445), + 66: uint16(9446), + 67: uint16(9447), + 68: uint16(9448), + 69: uint16(9449), + 70: uint16(9312), + 71: uint16(9313), + 72: uint16(9314), + 73: uint16(9315), + 74: uint16(9316), + 75: uint16(9317), + 76: uint16(9318), + 77: uint16(9319), + 78: uint16(9320), + 79: uint16(9321), + 80: uint16(9322), + 81: uint16(9323), + 82: uint16(9324), + 83: uint16(9325), + 84: uint16(9326), + 85: uint16(189), + 86: uint16(8531), + 87: uint16(8532), + 88: uint16(188), + 89: uint16(190), + 90: uint16(8539), + 91: uint16(8540), + 92: uint16(8541), + 93: uint16(8542), + }, + 8: { + 0: uint16(230), + 1: uint16(273), + 2: uint16(240), + 3: uint16(295), + 4: uint16(305), + 5: uint16(307), + 6: uint16(312), + 7: uint16(320), + 8: uint16(322), + 9: uint16(248), + 10: uint16(339), + 11: uint16(223), + 12: uint16(254), + 13: uint16(359), + 14: uint16(331), + 15: uint16(329), + 16: uint16(12800), + 17: uint16(12801), + 18: uint16(12802), + 19: uint16(12803), + 20: uint16(12804), + 21: uint16(12805), + 22: uint16(12806), + 23: uint16(12807), + 24: uint16(12808), + 25: uint16(12809), + 26: uint16(12810), + 27: uint16(12811), + 28: uint16(12812), + 29: uint16(12813), + 30: uint16(12814), + 31: uint16(12815), + 32: uint16(12816), + 33: uint16(12817), + 34: uint16(12818), + 35: uint16(12819), + 36: uint16(12820), + 37: uint16(12821), + 38: uint16(12822), + 39: uint16(12823), + 40: uint16(12824), + 41: uint16(12825), + 42: uint16(12826), + 43: uint16(12827), + 44: uint16(9372), + 45: uint16(9373), + 46: uint16(9374), + 47: uint16(9375), + 48: uint16(9376), + 49: uint16(9377), + 50: uint16(9378), + 51: uint16(9379), + 52: uint16(9380), + 53: uint16(9381), + 54: uint16(9382), + 55: uint16(9383), + 56: uint16(9384), + 57: uint16(9385), + 58: uint16(9386), + 59: uint16(9387), + 60: uint16(9388), + 61: uint16(9389), + 62: uint16(9390), + 63: uint16(9391), + 64: uint16(9392), + 65: uint16(9393), + 66: uint16(9394), + 67: uint16(9395), + 68: uint16(9396), + 69: uint16(9397), + 70: uint16(9332), + 71: uint16(9333), + 72: uint16(9334), + 73: uint16(9335), + 74: uint16(9336), + 75: uint16(9337), + 76: uint16(9338), + 77: uint16(9339), + 78: uint16(9340), + 79: uint16(9341), + 80: uint16(9342), + 81: uint16(9343), + 82: uint16(9344), + 83: uint16(9345), + 84: uint16(9346), + 85: uint16(185), + 86: uint16(178), + 87: uint16(179), + 88: uint16(8308), + 89: uint16(8319), + 90: uint16(8321), + 91: uint16(8322), + 92: uint16(8323), + 93: uint16(8324), + }, + 9: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 10: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 11: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(44032), + 1: uint16(44033), + 2: uint16(44036), + 3: uint16(44039), + 4: uint16(44040), + 5: uint16(44041), + 6: uint16(44042), + 7: uint16(44048), + 8: uint16(44049), + 9: uint16(44050), + 10: uint16(44051), + 11: uint16(44052), + 12: uint16(44053), + 13: uint16(44054), + 14: uint16(44055), + 15: uint16(44057), + 16: uint16(44058), + 17: uint16(44059), + 18: uint16(44060), + 19: uint16(44061), + 20: uint16(44064), + 21: uint16(44068), + 22: uint16(44076), + 23: uint16(44077), + 24: uint16(44079), + 25: uint16(44080), + 26: uint16(44081), + 27: uint16(44088), + 28: uint16(44089), + 29: uint16(44092), + 30: uint16(44096), + 31: uint16(44107), + 32: uint16(44109), + 33: uint16(44116), + 34: uint16(44120), + 35: uint16(44124), + 36: uint16(44144), + 37: uint16(44145), + 38: uint16(44148), + 39: uint16(44151), + 40: uint16(44152), + 41: uint16(44154), + 42: uint16(44160), + 43: uint16(44161), + 44: uint16(44163), + 45: uint16(44164), + 46: uint16(44165), + 47: uint16(44166), + 48: uint16(44169), + 49: uint16(44170), + 50: uint16(44171), + 51: uint16(44172), + 52: uint16(44176), + 53: uint16(44180), + 54: uint16(44188), + 55: uint16(44189), + 56: uint16(44191), + 57: uint16(44192), + 58: uint16(44193), + 59: uint16(44200), + 60: uint16(44201), + 61: uint16(44202), + 62: uint16(44204), + 63: uint16(44207), + 64: uint16(44208), + 65: uint16(44216), + 66: uint16(44217), + 67: uint16(44219), + 68: uint16(44220), + 69: uint16(44221), + 70: uint16(44225), + 71: uint16(44228), + 72: uint16(44232), + 73: uint16(44236), + 74: uint16(44245), + 75: uint16(44247), + 76: uint16(44256), + 77: uint16(44257), + 78: uint16(44260), + 79: uint16(44263), + 80: uint16(44264), + 81: uint16(44266), + 82: uint16(44268), + 83: uint16(44271), + 84: uint16(44272), + 85: uint16(44273), + 86: uint16(44275), + 87: uint16(44277), + 88: uint16(44278), + 89: uint16(44284), + 90: uint16(44285), + 91: uint16(44288), + 92: uint16(44292), + 93: uint16(44294), + }, + 16: { + 0: uint16(44300), + 1: uint16(44301), + 2: uint16(44303), + 3: uint16(44305), + 4: uint16(44312), + 5: uint16(44316), + 6: uint16(44320), + 7: uint16(44329), + 8: uint16(44332), + 9: uint16(44333), + 10: uint16(44340), + 11: uint16(44341), + 12: uint16(44344), + 13: uint16(44348), + 14: uint16(44356), + 15: uint16(44357), + 16: uint16(44359), + 17: uint16(44361), + 18: uint16(44368), + 19: uint16(44372), + 20: uint16(44376), + 21: uint16(44385), + 22: uint16(44387), + 23: uint16(44396), + 24: uint16(44397), + 25: uint16(44400), + 26: uint16(44403), + 27: uint16(44404), + 28: uint16(44405), + 29: uint16(44406), + 30: uint16(44411), + 31: uint16(44412), + 32: uint16(44413), + 33: uint16(44415), + 34: uint16(44417), + 35: uint16(44418), + 36: uint16(44424), + 37: uint16(44425), + 38: uint16(44428), + 39: uint16(44432), + 40: uint16(44444), + 41: uint16(44445), + 42: uint16(44452), + 43: uint16(44471), + 44: uint16(44480), + 45: uint16(44481), + 46: uint16(44484), + 47: uint16(44488), + 48: uint16(44496), + 49: uint16(44497), + 50: uint16(44499), + 51: uint16(44508), + 52: uint16(44512), + 53: uint16(44516), + 54: uint16(44536), + 55: uint16(44537), + 56: uint16(44540), + 57: uint16(44543), + 58: uint16(44544), + 59: uint16(44545), + 60: uint16(44552), + 61: uint16(44553), + 62: uint16(44555), + 63: uint16(44557), + 64: uint16(44564), + 65: uint16(44592), + 66: uint16(44593), + 67: uint16(44596), + 68: uint16(44599), + 69: uint16(44600), + 70: uint16(44602), + 71: uint16(44608), + 72: uint16(44609), + 73: uint16(44611), + 74: uint16(44613), + 75: uint16(44614), + 76: uint16(44618), + 77: uint16(44620), + 78: uint16(44621), + 79: uint16(44622), + 80: uint16(44624), + 81: uint16(44628), + 82: uint16(44630), + 83: uint16(44636), + 84: uint16(44637), + 85: uint16(44639), + 86: uint16(44640), + 87: uint16(44641), + 88: uint16(44645), + 89: uint16(44648), + 90: uint16(44649), + 91: uint16(44652), + 92: uint16(44656), + 93: uint16(44664), + }, + 17: { + 0: uint16(44665), + 1: uint16(44667), + 2: uint16(44668), + 3: uint16(44669), + 4: uint16(44676), + 5: uint16(44677), + 6: uint16(44684), + 7: uint16(44732), + 8: uint16(44733), + 9: uint16(44734), + 10: uint16(44736), + 11: uint16(44740), + 12: uint16(44748), + 13: uint16(44749), + 14: uint16(44751), + 15: uint16(44752), + 16: uint16(44753), + 17: uint16(44760), + 18: uint16(44761), + 19: uint16(44764), + 20: uint16(44776), + 21: uint16(44779), + 22: uint16(44781), + 23: uint16(44788), + 24: uint16(44792), + 25: uint16(44796), + 26: uint16(44807), + 27: uint16(44808), + 28: uint16(44813), + 29: uint16(44816), + 30: uint16(44844), + 31: uint16(44845), + 32: uint16(44848), + 33: uint16(44850), + 34: uint16(44852), + 35: uint16(44860), + 36: uint16(44861), + 37: uint16(44863), + 38: uint16(44865), + 39: uint16(44866), + 40: uint16(44867), + 41: uint16(44872), + 42: uint16(44873), + 43: uint16(44880), + 44: uint16(44892), + 45: uint16(44893), + 46: uint16(44900), + 47: uint16(44901), + 48: uint16(44921), + 49: uint16(44928), + 50: uint16(44932), + 51: uint16(44936), + 52: uint16(44944), + 53: uint16(44945), + 54: uint16(44949), + 55: uint16(44956), + 56: uint16(44984), + 57: uint16(44985), + 58: uint16(44988), + 59: uint16(44992), + 60: uint16(44999), + 61: uint16(45000), + 62: uint16(45001), + 63: uint16(45003), + 64: uint16(45005), + 65: uint16(45006), + 66: uint16(45012), + 67: uint16(45020), + 68: uint16(45032), + 69: uint16(45033), + 70: uint16(45040), + 71: uint16(45041), + 72: uint16(45044), + 73: uint16(45048), + 74: uint16(45056), + 75: uint16(45057), + 76: uint16(45060), + 77: uint16(45068), + 78: uint16(45072), + 79: uint16(45076), + 80: uint16(45084), + 81: uint16(45085), + 82: uint16(45096), + 83: uint16(45124), + 84: uint16(45125), + 85: uint16(45128), + 86: uint16(45130), + 87: uint16(45132), + 88: uint16(45134), + 89: uint16(45139), + 90: uint16(45140), + 91: uint16(45141), + 92: uint16(45143), + 93: uint16(45145), + }, + 18: { + 0: uint16(45149), + 1: uint16(45180), + 2: uint16(45181), + 3: uint16(45184), + 4: uint16(45188), + 5: uint16(45196), + 6: uint16(45197), + 7: uint16(45199), + 8: uint16(45201), + 9: uint16(45208), + 10: uint16(45209), + 11: uint16(45210), + 12: uint16(45212), + 13: uint16(45215), + 14: uint16(45216), + 15: uint16(45217), + 16: uint16(45218), + 17: uint16(45224), + 18: uint16(45225), + 19: uint16(45227), + 20: uint16(45228), + 21: uint16(45229), + 22: uint16(45230), + 23: uint16(45231), + 24: uint16(45233), + 25: uint16(45235), + 26: uint16(45236), + 27: uint16(45237), + 28: uint16(45240), + 29: uint16(45244), + 30: uint16(45252), + 31: uint16(45253), + 32: uint16(45255), + 33: uint16(45256), + 34: uint16(45257), + 35: uint16(45264), + 36: uint16(45265), + 37: uint16(45268), + 38: uint16(45272), + 39: uint16(45280), + 40: uint16(45285), + 41: uint16(45320), + 42: uint16(45321), + 43: uint16(45323), + 44: uint16(45324), + 45: uint16(45328), + 46: uint16(45330), + 47: uint16(45331), + 48: uint16(45336), + 49: uint16(45337), + 50: uint16(45339), + 51: uint16(45340), + 52: uint16(45341), + 53: uint16(45347), + 54: uint16(45348), + 55: uint16(45349), + 56: uint16(45352), + 57: uint16(45356), + 58: uint16(45364), + 59: uint16(45365), + 60: uint16(45367), + 61: uint16(45368), + 62: uint16(45369), + 63: uint16(45376), + 64: uint16(45377), + 65: uint16(45380), + 66: uint16(45384), + 67: uint16(45392), + 68: uint16(45393), + 69: uint16(45396), + 70: uint16(45397), + 71: uint16(45400), + 72: uint16(45404), + 73: uint16(45408), + 74: uint16(45432), + 75: uint16(45433), + 76: uint16(45436), + 77: uint16(45440), + 78: uint16(45442), + 79: uint16(45448), + 80: uint16(45449), + 81: uint16(45451), + 82: uint16(45453), + 83: uint16(45458), + 84: uint16(45459), + 85: uint16(45460), + 86: uint16(45464), + 87: uint16(45468), + 88: uint16(45480), + 89: uint16(45516), + 90: uint16(45520), + 91: uint16(45524), + 92: uint16(45532), + 93: uint16(45533), + }, + 19: { + 0: uint16(45535), + 1: uint16(45544), + 2: uint16(45545), + 3: uint16(45548), + 4: uint16(45552), + 5: uint16(45561), + 6: uint16(45563), + 7: uint16(45565), + 8: uint16(45572), + 9: uint16(45573), + 10: uint16(45576), + 11: uint16(45579), + 12: uint16(45580), + 13: uint16(45588), + 14: uint16(45589), + 15: uint16(45591), + 16: uint16(45593), + 17: uint16(45600), + 18: uint16(45620), + 19: uint16(45628), + 20: uint16(45656), + 21: uint16(45660), + 22: uint16(45664), + 23: uint16(45672), + 24: uint16(45673), + 25: uint16(45684), + 26: uint16(45685), + 27: uint16(45692), + 28: uint16(45700), + 29: uint16(45701), + 30: uint16(45705), + 31: uint16(45712), + 32: uint16(45713), + 33: uint16(45716), + 34: uint16(45720), + 35: uint16(45721), + 36: uint16(45722), + 37: uint16(45728), + 38: uint16(45729), + 39: uint16(45731), + 40: uint16(45733), + 41: uint16(45734), + 42: uint16(45738), + 43: uint16(45740), + 44: uint16(45744), + 45: uint16(45748), + 46: uint16(45768), + 47: uint16(45769), + 48: uint16(45772), + 49: uint16(45776), + 50: uint16(45778), + 51: uint16(45784), + 52: uint16(45785), + 53: uint16(45787), + 54: uint16(45789), + 55: uint16(45794), + 56: uint16(45796), + 57: uint16(45797), + 58: uint16(45798), + 59: uint16(45800), + 60: uint16(45803), + 61: uint16(45804), + 62: uint16(45805), + 63: uint16(45806), + 64: uint16(45807), + 65: uint16(45811), + 66: uint16(45812), + 67: uint16(45813), + 68: uint16(45815), + 69: uint16(45816), + 70: uint16(45817), + 71: uint16(45818), + 72: uint16(45819), + 73: uint16(45823), + 74: uint16(45824), + 75: uint16(45825), + 76: uint16(45828), + 77: uint16(45832), + 78: uint16(45840), + 79: uint16(45841), + 80: uint16(45843), + 81: uint16(45844), + 82: uint16(45845), + 83: uint16(45852), + 84: uint16(45908), + 85: uint16(45909), + 86: uint16(45910), + 87: uint16(45912), + 88: uint16(45915), + 89: uint16(45916), + 90: uint16(45918), + 91: uint16(45919), + 92: uint16(45924), + 93: uint16(45925), + }, + 20: { + 0: uint16(45927), + 1: uint16(45929), + 2: uint16(45931), + 3: uint16(45934), + 4: uint16(45936), + 5: uint16(45937), + 6: uint16(45940), + 7: uint16(45944), + 8: uint16(45952), + 9: uint16(45953), + 10: uint16(45955), + 11: uint16(45956), + 12: uint16(45957), + 13: uint16(45964), + 14: uint16(45968), + 15: uint16(45972), + 16: uint16(45984), + 17: uint16(45985), + 18: uint16(45992), + 19: uint16(45996), + 20: uint16(46020), + 21: uint16(46021), + 22: uint16(46024), + 23: uint16(46027), + 24: uint16(46028), + 25: uint16(46030), + 26: uint16(46032), + 27: uint16(46036), + 28: uint16(46037), + 29: uint16(46039), + 30: uint16(46041), + 31: uint16(46043), + 32: uint16(46045), + 33: uint16(46048), + 34: uint16(46052), + 35: uint16(46056), + 36: uint16(46076), + 37: uint16(46096), + 38: uint16(46104), + 39: uint16(46108), + 40: uint16(46112), + 41: uint16(46120), + 42: uint16(46121), + 43: uint16(46123), + 44: uint16(46132), + 45: uint16(46160), + 46: uint16(46161), + 47: uint16(46164), + 48: uint16(46168), + 49: uint16(46176), + 50: uint16(46177), + 51: uint16(46179), + 52: uint16(46181), + 53: uint16(46188), + 54: uint16(46208), + 55: uint16(46216), + 56: uint16(46237), + 57: uint16(46244), + 58: uint16(46248), + 59: uint16(46252), + 60: uint16(46261), + 61: uint16(46263), + 62: uint16(46265), + 63: uint16(46272), + 64: uint16(46276), + 65: uint16(46280), + 66: uint16(46288), + 67: uint16(46293), + 68: uint16(46300), + 69: uint16(46301), + 70: uint16(46304), + 71: uint16(46307), + 72: uint16(46308), + 73: uint16(46310), + 74: uint16(46316), + 75: uint16(46317), + 76: uint16(46319), + 77: uint16(46321), + 78: uint16(46328), + 79: uint16(46356), + 80: uint16(46357), + 81: uint16(46360), + 82: uint16(46363), + 83: uint16(46364), + 84: uint16(46372), + 85: uint16(46373), + 86: uint16(46375), + 87: uint16(46376), + 88: uint16(46377), + 89: uint16(46378), + 90: uint16(46384), + 91: uint16(46385), + 92: uint16(46388), + 93: uint16(46392), + }, + 21: { + 0: uint16(46400), + 1: uint16(46401), + 2: uint16(46403), + 3: uint16(46404), + 4: uint16(46405), + 5: uint16(46411), + 6: uint16(46412), + 7: uint16(46413), + 8: uint16(46416), + 9: uint16(46420), + 10: uint16(46428), + 11: uint16(46429), + 12: uint16(46431), + 13: uint16(46432), + 14: uint16(46433), + 15: uint16(46496), + 16: uint16(46497), + 17: uint16(46500), + 18: uint16(46504), + 19: uint16(46506), + 20: uint16(46507), + 21: uint16(46512), + 22: uint16(46513), + 23: uint16(46515), + 24: uint16(46516), + 25: uint16(46517), + 26: uint16(46523), + 27: uint16(46524), + 28: uint16(46525), + 29: uint16(46528), + 30: uint16(46532), + 31: uint16(46540), + 32: uint16(46541), + 33: uint16(46543), + 34: uint16(46544), + 35: uint16(46545), + 36: uint16(46552), + 37: uint16(46572), + 38: uint16(46608), + 39: uint16(46609), + 40: uint16(46612), + 41: uint16(46616), + 42: uint16(46629), + 43: uint16(46636), + 44: uint16(46644), + 45: uint16(46664), + 46: uint16(46692), + 47: uint16(46696), + 48: uint16(46748), + 49: uint16(46749), + 50: uint16(46752), + 51: uint16(46756), + 52: uint16(46763), + 53: uint16(46764), + 54: uint16(46769), + 55: uint16(46804), + 56: uint16(46832), + 57: uint16(46836), + 58: uint16(46840), + 59: uint16(46848), + 60: uint16(46849), + 61: uint16(46853), + 62: uint16(46888), + 63: uint16(46889), + 64: uint16(46892), + 65: uint16(46895), + 66: uint16(46896), + 67: uint16(46904), + 68: uint16(46905), + 69: uint16(46907), + 70: uint16(46916), + 71: uint16(46920), + 72: uint16(46924), + 73: uint16(46932), + 74: uint16(46933), + 75: uint16(46944), + 76: uint16(46948), + 77: uint16(46952), + 78: uint16(46960), + 79: uint16(46961), + 80: uint16(46963), + 81: uint16(46965), + 82: uint16(46972), + 83: uint16(46973), + 84: uint16(46976), + 85: uint16(46980), + 86: uint16(46988), + 87: uint16(46989), + 88: uint16(46991), + 89: uint16(46992), + 90: uint16(46993), + 91: uint16(46994), + 92: uint16(46998), + 93: uint16(46999), + }, + 22: { + 0: uint16(47000), + 1: uint16(47001), + 2: uint16(47004), + 3: uint16(47008), + 4: uint16(47016), + 5: uint16(47017), + 6: uint16(47019), + 7: uint16(47020), + 8: uint16(47021), + 9: uint16(47028), + 10: uint16(47029), + 11: uint16(47032), + 12: uint16(47047), + 13: uint16(47049), + 14: uint16(47084), + 15: uint16(47085), + 16: uint16(47088), + 17: uint16(47092), + 18: uint16(47100), + 19: uint16(47101), + 20: uint16(47103), + 21: uint16(47104), + 22: uint16(47105), + 23: uint16(47111), + 24: uint16(47112), + 25: uint16(47113), + 26: uint16(47116), + 27: uint16(47120), + 28: uint16(47128), + 29: uint16(47129), + 30: uint16(47131), + 31: uint16(47133), + 32: uint16(47140), + 33: uint16(47141), + 34: uint16(47144), + 35: uint16(47148), + 36: uint16(47156), + 37: uint16(47157), + 38: uint16(47159), + 39: uint16(47160), + 40: uint16(47161), + 41: uint16(47168), + 42: uint16(47172), + 43: uint16(47185), + 44: uint16(47187), + 45: uint16(47196), + 46: uint16(47197), + 47: uint16(47200), + 48: uint16(47204), + 49: uint16(47212), + 50: uint16(47213), + 51: uint16(47215), + 52: uint16(47217), + 53: uint16(47224), + 54: uint16(47228), + 55: uint16(47245), + 56: uint16(47272), + 57: uint16(47280), + 58: uint16(47284), + 59: uint16(47288), + 60: uint16(47296), + 61: uint16(47297), + 62: uint16(47299), + 63: uint16(47301), + 64: uint16(47308), + 65: uint16(47312), + 66: uint16(47316), + 67: uint16(47325), + 68: uint16(47327), + 69: uint16(47329), + 70: uint16(47336), + 71: uint16(47337), + 72: uint16(47340), + 73: uint16(47344), + 74: uint16(47352), + 75: uint16(47353), + 76: uint16(47355), + 77: uint16(47357), + 78: uint16(47364), + 79: uint16(47384), + 80: uint16(47392), + 81: uint16(47420), + 82: uint16(47421), + 83: uint16(47424), + 84: uint16(47428), + 85: uint16(47436), + 86: uint16(47439), + 87: uint16(47441), + 88: uint16(47448), + 89: uint16(47449), + 90: uint16(47452), + 91: uint16(47456), + 92: uint16(47464), + 93: uint16(47465), + }, + 23: { + 0: uint16(47467), + 1: uint16(47469), + 2: uint16(47476), + 3: uint16(47477), + 4: uint16(47480), + 5: uint16(47484), + 6: uint16(47492), + 7: uint16(47493), + 8: uint16(47495), + 9: uint16(47497), + 10: uint16(47498), + 11: uint16(47501), + 12: uint16(47502), + 13: uint16(47532), + 14: uint16(47533), + 15: uint16(47536), + 16: uint16(47540), + 17: uint16(47548), + 18: uint16(47549), + 19: uint16(47551), + 20: uint16(47553), + 21: uint16(47560), + 22: uint16(47561), + 23: uint16(47564), + 24: uint16(47566), + 25: uint16(47567), + 26: uint16(47568), + 27: uint16(47569), + 28: uint16(47570), + 29: uint16(47576), + 30: uint16(47577), + 31: uint16(47579), + 32: uint16(47581), + 33: uint16(47582), + 34: uint16(47585), + 35: uint16(47587), + 36: uint16(47588), + 37: uint16(47589), + 38: uint16(47592), + 39: uint16(47596), + 40: uint16(47604), + 41: uint16(47605), + 42: uint16(47607), + 43: uint16(47608), + 44: uint16(47609), + 45: uint16(47610), + 46: uint16(47616), + 47: uint16(47617), + 48: uint16(47624), + 49: uint16(47637), + 50: uint16(47672), + 51: uint16(47673), + 52: uint16(47676), + 53: uint16(47680), + 54: uint16(47682), + 55: uint16(47688), + 56: uint16(47689), + 57: uint16(47691), + 58: uint16(47693), + 59: uint16(47694), + 60: uint16(47699), + 61: uint16(47700), + 62: uint16(47701), + 63: uint16(47704), + 64: uint16(47708), + 65: uint16(47716), + 66: uint16(47717), + 67: uint16(47719), + 68: uint16(47720), + 69: uint16(47721), + 70: uint16(47728), + 71: uint16(47729), + 72: uint16(47732), + 73: uint16(47736), + 74: uint16(47747), + 75: uint16(47748), + 76: uint16(47749), + 77: uint16(47751), + 78: uint16(47756), + 79: uint16(47784), + 80: uint16(47785), + 81: uint16(47787), + 82: uint16(47788), + 83: uint16(47792), + 84: uint16(47794), + 85: uint16(47800), + 86: uint16(47801), + 87: uint16(47803), + 88: uint16(47805), + 89: uint16(47812), + 90: uint16(47816), + 91: uint16(47832), + 92: uint16(47833), + 93: uint16(47868), + }, + 24: { + 0: uint16(47872), + 1: uint16(47876), + 2: uint16(47885), + 3: uint16(47887), + 4: uint16(47889), + 5: uint16(47896), + 6: uint16(47900), + 7: uint16(47904), + 8: uint16(47913), + 9: uint16(47915), + 10: uint16(47924), + 11: uint16(47925), + 12: uint16(47926), + 13: uint16(47928), + 14: uint16(47931), + 15: uint16(47932), + 16: uint16(47933), + 17: uint16(47934), + 18: uint16(47940), + 19: uint16(47941), + 20: uint16(47943), + 21: uint16(47945), + 22: uint16(47949), + 23: uint16(47951), + 24: uint16(47952), + 25: uint16(47956), + 26: uint16(47960), + 27: uint16(47969), + 28: uint16(47971), + 29: uint16(47980), + 30: uint16(48008), + 31: uint16(48012), + 32: uint16(48016), + 33: uint16(48036), + 34: uint16(48040), + 35: uint16(48044), + 36: uint16(48052), + 37: uint16(48055), + 38: uint16(48064), + 39: uint16(48068), + 40: uint16(48072), + 41: uint16(48080), + 42: uint16(48083), + 43: uint16(48120), + 44: uint16(48121), + 45: uint16(48124), + 46: uint16(48127), + 47: uint16(48128), + 48: uint16(48130), + 49: uint16(48136), + 50: uint16(48137), + 51: uint16(48139), + 52: uint16(48140), + 53: uint16(48141), + 54: uint16(48143), + 55: uint16(48145), + 56: uint16(48148), + 57: uint16(48149), + 58: uint16(48150), + 59: uint16(48151), + 60: uint16(48152), + 61: uint16(48155), + 62: uint16(48156), + 63: uint16(48157), + 64: uint16(48158), + 65: uint16(48159), + 66: uint16(48164), + 67: uint16(48165), + 68: uint16(48167), + 69: uint16(48169), + 70: uint16(48173), + 71: uint16(48176), + 72: uint16(48177), + 73: uint16(48180), + 74: uint16(48184), + 75: uint16(48192), + 76: uint16(48193), + 77: uint16(48195), + 78: uint16(48196), + 79: uint16(48197), + 80: uint16(48201), + 81: uint16(48204), + 82: uint16(48205), + 83: uint16(48208), + 84: uint16(48221), + 85: uint16(48260), + 86: uint16(48261), + 87: uint16(48264), + 88: uint16(48267), + 89: uint16(48268), + 90: uint16(48270), + 91: uint16(48276), + 92: uint16(48277), + 93: uint16(48279), + }, + 25: { + 0: uint16(48281), + 1: uint16(48282), + 2: uint16(48288), + 3: uint16(48289), + 4: uint16(48292), + 5: uint16(48295), + 6: uint16(48296), + 7: uint16(48304), + 8: uint16(48305), + 9: uint16(48307), + 10: uint16(48308), + 11: uint16(48309), + 12: uint16(48316), + 13: uint16(48317), + 14: uint16(48320), + 15: uint16(48324), + 16: uint16(48333), + 17: uint16(48335), + 18: uint16(48336), + 19: uint16(48337), + 20: uint16(48341), + 21: uint16(48344), + 22: uint16(48348), + 23: uint16(48372), + 24: uint16(48373), + 25: uint16(48374), + 26: uint16(48376), + 27: uint16(48380), + 28: uint16(48388), + 29: uint16(48389), + 30: uint16(48391), + 31: uint16(48393), + 32: uint16(48400), + 33: uint16(48404), + 34: uint16(48420), + 35: uint16(48428), + 36: uint16(48448), + 37: uint16(48456), + 38: uint16(48457), + 39: uint16(48460), + 40: uint16(48464), + 41: uint16(48472), + 42: uint16(48473), + 43: uint16(48484), + 44: uint16(48488), + 45: uint16(48512), + 46: uint16(48513), + 47: uint16(48516), + 48: uint16(48519), + 49: uint16(48520), + 50: uint16(48521), + 51: uint16(48522), + 52: uint16(48528), + 53: uint16(48529), + 54: uint16(48531), + 55: uint16(48533), + 56: uint16(48537), + 57: uint16(48538), + 58: uint16(48540), + 59: uint16(48548), + 60: uint16(48560), + 61: uint16(48568), + 62: uint16(48596), + 63: uint16(48597), + 64: uint16(48600), + 65: uint16(48604), + 66: uint16(48617), + 67: uint16(48624), + 68: uint16(48628), + 69: uint16(48632), + 70: uint16(48640), + 71: uint16(48643), + 72: uint16(48645), + 73: uint16(48652), + 74: uint16(48653), + 75: uint16(48656), + 76: uint16(48660), + 77: uint16(48668), + 78: uint16(48669), + 79: uint16(48671), + 80: uint16(48708), + 81: uint16(48709), + 82: uint16(48712), + 83: uint16(48716), + 84: uint16(48718), + 85: uint16(48724), + 86: uint16(48725), + 87: uint16(48727), + 88: uint16(48729), + 89: uint16(48730), + 90: uint16(48731), + 91: uint16(48736), + 92: uint16(48737), + 93: uint16(48740), + }, + 26: { + 0: uint16(48744), + 1: uint16(48746), + 2: uint16(48752), + 3: uint16(48753), + 4: uint16(48755), + 5: uint16(48756), + 6: uint16(48757), + 7: uint16(48763), + 8: uint16(48764), + 9: uint16(48765), + 10: uint16(48768), + 11: uint16(48772), + 12: uint16(48780), + 13: uint16(48781), + 14: uint16(48783), + 15: uint16(48784), + 16: uint16(48785), + 17: uint16(48792), + 18: uint16(48793), + 19: uint16(48808), + 20: uint16(48848), + 21: uint16(48849), + 22: uint16(48852), + 23: uint16(48855), + 24: uint16(48856), + 25: uint16(48864), + 26: uint16(48867), + 27: uint16(48868), + 28: uint16(48869), + 29: uint16(48876), + 30: uint16(48897), + 31: uint16(48904), + 32: uint16(48905), + 33: uint16(48920), + 34: uint16(48921), + 35: uint16(48923), + 36: uint16(48924), + 37: uint16(48925), + 38: uint16(48960), + 39: uint16(48961), + 40: uint16(48964), + 41: uint16(48968), + 42: uint16(48976), + 43: uint16(48977), + 44: uint16(48981), + 45: uint16(49044), + 46: uint16(49072), + 47: uint16(49093), + 48: uint16(49100), + 49: uint16(49101), + 50: uint16(49104), + 51: uint16(49108), + 52: uint16(49116), + 53: uint16(49119), + 54: uint16(49121), + 55: uint16(49212), + 56: uint16(49233), + 57: uint16(49240), + 58: uint16(49244), + 59: uint16(49248), + 60: uint16(49256), + 61: uint16(49257), + 62: uint16(49296), + 63: uint16(49297), + 64: uint16(49300), + 65: uint16(49304), + 66: uint16(49312), + 67: uint16(49313), + 68: uint16(49315), + 69: uint16(49317), + 70: uint16(49324), + 71: uint16(49325), + 72: uint16(49327), + 73: uint16(49328), + 74: uint16(49331), + 75: uint16(49332), + 76: uint16(49333), + 77: uint16(49334), + 78: uint16(49340), + 79: uint16(49341), + 80: uint16(49343), + 81: uint16(49344), + 82: uint16(49345), + 83: uint16(49349), + 84: uint16(49352), + 85: uint16(49353), + 86: uint16(49356), + 87: uint16(49360), + 88: uint16(49368), + 89: uint16(49369), + 90: uint16(49371), + 91: uint16(49372), + 92: uint16(49373), + 93: uint16(49380), + }, + 27: { + 0: uint16(49381), + 1: uint16(49384), + 2: uint16(49388), + 3: uint16(49396), + 4: uint16(49397), + 5: uint16(49399), + 6: uint16(49401), + 7: uint16(49408), + 8: uint16(49412), + 9: uint16(49416), + 10: uint16(49424), + 11: uint16(49429), + 12: uint16(49436), + 13: uint16(49437), + 14: uint16(49438), + 15: uint16(49439), + 16: uint16(49440), + 17: uint16(49443), + 18: uint16(49444), + 19: uint16(49446), + 20: uint16(49447), + 21: uint16(49452), + 22: uint16(49453), + 23: uint16(49455), + 24: uint16(49456), + 25: uint16(49457), + 26: uint16(49462), + 27: uint16(49464), + 28: uint16(49465), + 29: uint16(49468), + 30: uint16(49472), + 31: uint16(49480), + 32: uint16(49481), + 33: uint16(49483), + 34: uint16(49484), + 35: uint16(49485), + 36: uint16(49492), + 37: uint16(49493), + 38: uint16(49496), + 39: uint16(49500), + 40: uint16(49508), + 41: uint16(49509), + 42: uint16(49511), + 43: uint16(49512), + 44: uint16(49513), + 45: uint16(49520), + 46: uint16(49524), + 47: uint16(49528), + 48: uint16(49541), + 49: uint16(49548), + 50: uint16(49549), + 51: uint16(49550), + 52: uint16(49552), + 53: uint16(49556), + 54: uint16(49558), + 55: uint16(49564), + 56: uint16(49565), + 57: uint16(49567), + 58: uint16(49569), + 59: uint16(49573), + 60: uint16(49576), + 61: uint16(49577), + 62: uint16(49580), + 63: uint16(49584), + 64: uint16(49597), + 65: uint16(49604), + 66: uint16(49608), + 67: uint16(49612), + 68: uint16(49620), + 69: uint16(49623), + 70: uint16(49624), + 71: uint16(49632), + 72: uint16(49636), + 73: uint16(49640), + 74: uint16(49648), + 75: uint16(49649), + 76: uint16(49651), + 77: uint16(49660), + 78: uint16(49661), + 79: uint16(49664), + 80: uint16(49668), + 81: uint16(49676), + 82: uint16(49677), + 83: uint16(49679), + 84: uint16(49681), + 85: uint16(49688), + 86: uint16(49689), + 87: uint16(49692), + 88: uint16(49695), + 89: uint16(49696), + 90: uint16(49704), + 91: uint16(49705), + 92: uint16(49707), + 93: uint16(49709), + }, + 28: { + 0: uint16(49711), + 1: uint16(49713), + 2: uint16(49714), + 3: uint16(49716), + 4: uint16(49736), + 5: uint16(49744), + 6: uint16(49745), + 7: uint16(49748), + 8: uint16(49752), + 9: uint16(49760), + 10: uint16(49765), + 11: uint16(49772), + 12: uint16(49773), + 13: uint16(49776), + 14: uint16(49780), + 15: uint16(49788), + 16: uint16(49789), + 17: uint16(49791), + 18: uint16(49793), + 19: uint16(49800), + 20: uint16(49801), + 21: uint16(49808), + 22: uint16(49816), + 23: uint16(49819), + 24: uint16(49821), + 25: uint16(49828), + 26: uint16(49829), + 27: uint16(49832), + 28: uint16(49836), + 29: uint16(49837), + 30: uint16(49844), + 31: uint16(49845), + 32: uint16(49847), + 33: uint16(49849), + 34: uint16(49884), + 35: uint16(49885), + 36: uint16(49888), + 37: uint16(49891), + 38: uint16(49892), + 39: uint16(49899), + 40: uint16(49900), + 41: uint16(49901), + 42: uint16(49903), + 43: uint16(49905), + 44: uint16(49910), + 45: uint16(49912), + 46: uint16(49913), + 47: uint16(49915), + 48: uint16(49916), + 49: uint16(49920), + 50: uint16(49928), + 51: uint16(49929), + 52: uint16(49932), + 53: uint16(49933), + 54: uint16(49939), + 55: uint16(49940), + 56: uint16(49941), + 57: uint16(49944), + 58: uint16(49948), + 59: uint16(49956), + 60: uint16(49957), + 61: uint16(49960), + 62: uint16(49961), + 63: uint16(49989), + 64: uint16(50024), + 65: uint16(50025), + 66: uint16(50028), + 67: uint16(50032), + 68: uint16(50034), + 69: uint16(50040), + 70: uint16(50041), + 71: uint16(50044), + 72: uint16(50045), + 73: uint16(50052), + 74: uint16(50056), + 75: uint16(50060), + 76: uint16(50112), + 77: uint16(50136), + 78: uint16(50137), + 79: uint16(50140), + 80: uint16(50143), + 81: uint16(50144), + 82: uint16(50146), + 83: uint16(50152), + 84: uint16(50153), + 85: uint16(50157), + 86: uint16(50164), + 87: uint16(50165), + 88: uint16(50168), + 89: uint16(50184), + 90: uint16(50192), + 91: uint16(50212), + 92: uint16(50220), + 93: uint16(50224), + }, + 29: { + 0: uint16(50228), + 1: uint16(50236), + 2: uint16(50237), + 3: uint16(50248), + 4: uint16(50276), + 5: uint16(50277), + 6: uint16(50280), + 7: uint16(50284), + 8: uint16(50292), + 9: uint16(50293), + 10: uint16(50297), + 11: uint16(50304), + 12: uint16(50324), + 13: uint16(50332), + 14: uint16(50360), + 15: uint16(50364), + 16: uint16(50409), + 17: uint16(50416), + 18: uint16(50417), + 19: uint16(50420), + 20: uint16(50424), + 21: uint16(50426), + 22: uint16(50431), + 23: uint16(50432), + 24: uint16(50433), + 25: uint16(50444), + 26: uint16(50448), + 27: uint16(50452), + 28: uint16(50460), + 29: uint16(50472), + 30: uint16(50473), + 31: uint16(50476), + 32: uint16(50480), + 33: uint16(50488), + 34: uint16(50489), + 35: uint16(50491), + 36: uint16(50493), + 37: uint16(50500), + 38: uint16(50501), + 39: uint16(50504), + 40: uint16(50505), + 41: uint16(50506), + 42: uint16(50508), + 43: uint16(50509), + 44: uint16(50510), + 45: uint16(50515), + 46: uint16(50516), + 47: uint16(50517), + 48: uint16(50519), + 49: uint16(50520), + 50: uint16(50521), + 51: uint16(50525), + 52: uint16(50526), + 53: uint16(50528), + 54: uint16(50529), + 55: uint16(50532), + 56: uint16(50536), + 57: uint16(50544), + 58: uint16(50545), + 59: uint16(50547), + 60: uint16(50548), + 61: uint16(50549), + 62: uint16(50556), + 63: uint16(50557), + 64: uint16(50560), + 65: uint16(50564), + 66: uint16(50567), + 67: uint16(50572), + 68: uint16(50573), + 69: uint16(50575), + 70: uint16(50577), + 71: uint16(50581), + 72: uint16(50583), + 73: uint16(50584), + 74: uint16(50588), + 75: uint16(50592), + 76: uint16(50601), + 77: uint16(50612), + 78: uint16(50613), + 79: uint16(50616), + 80: uint16(50617), + 81: uint16(50619), + 82: uint16(50620), + 83: uint16(50621), + 84: uint16(50622), + 85: uint16(50628), + 86: uint16(50629), + 87: uint16(50630), + 88: uint16(50631), + 89: uint16(50632), + 90: uint16(50633), + 91: uint16(50634), + 92: uint16(50636), + 93: uint16(50638), + }, + 30: { + 0: uint16(50640), + 1: uint16(50641), + 2: uint16(50644), + 3: uint16(50648), + 4: uint16(50656), + 5: uint16(50657), + 6: uint16(50659), + 7: uint16(50661), + 8: uint16(50668), + 9: uint16(50669), + 10: uint16(50670), + 11: uint16(50672), + 12: uint16(50676), + 13: uint16(50678), + 14: uint16(50679), + 15: uint16(50684), + 16: uint16(50685), + 17: uint16(50686), + 18: uint16(50687), + 19: uint16(50688), + 20: uint16(50689), + 21: uint16(50693), + 22: uint16(50694), + 23: uint16(50695), + 24: uint16(50696), + 25: uint16(50700), + 26: uint16(50704), + 27: uint16(50712), + 28: uint16(50713), + 29: uint16(50715), + 30: uint16(50716), + 31: uint16(50724), + 32: uint16(50725), + 33: uint16(50728), + 34: uint16(50732), + 35: uint16(50733), + 36: uint16(50734), + 37: uint16(50736), + 38: uint16(50739), + 39: uint16(50740), + 40: uint16(50741), + 41: uint16(50743), + 42: uint16(50745), + 43: uint16(50747), + 44: uint16(50752), + 45: uint16(50753), + 46: uint16(50756), + 47: uint16(50760), + 48: uint16(50768), + 49: uint16(50769), + 50: uint16(50771), + 51: uint16(50772), + 52: uint16(50773), + 53: uint16(50780), + 54: uint16(50781), + 55: uint16(50784), + 56: uint16(50796), + 57: uint16(50799), + 58: uint16(50801), + 59: uint16(50808), + 60: uint16(50809), + 61: uint16(50812), + 62: uint16(50816), + 63: uint16(50824), + 64: uint16(50825), + 65: uint16(50827), + 66: uint16(50829), + 67: uint16(50836), + 68: uint16(50837), + 69: uint16(50840), + 70: uint16(50844), + 71: uint16(50852), + 72: uint16(50853), + 73: uint16(50855), + 74: uint16(50857), + 75: uint16(50864), + 76: uint16(50865), + 77: uint16(50868), + 78: uint16(50872), + 79: uint16(50873), + 80: uint16(50874), + 81: uint16(50880), + 82: uint16(50881), + 83: uint16(50883), + 84: uint16(50885), + 85: uint16(50892), + 86: uint16(50893), + 87: uint16(50896), + 88: uint16(50900), + 89: uint16(50908), + 90: uint16(50909), + 91: uint16(50912), + 92: uint16(50913), + 93: uint16(50920), + }, + 31: { + 0: uint16(50921), + 1: uint16(50924), + 2: uint16(50928), + 3: uint16(50936), + 4: uint16(50937), + 5: uint16(50941), + 6: uint16(50948), + 7: uint16(50949), + 8: uint16(50952), + 9: uint16(50956), + 10: uint16(50964), + 11: uint16(50965), + 12: uint16(50967), + 13: uint16(50969), + 14: uint16(50976), + 15: uint16(50977), + 16: uint16(50980), + 17: uint16(50984), + 18: uint16(50992), + 19: uint16(50993), + 20: uint16(50995), + 21: uint16(50997), + 22: uint16(50999), + 23: uint16(51004), + 24: uint16(51005), + 25: uint16(51008), + 26: uint16(51012), + 27: uint16(51018), + 28: uint16(51020), + 29: uint16(51021), + 30: uint16(51023), + 31: uint16(51025), + 32: uint16(51026), + 33: uint16(51027), + 34: uint16(51028), + 35: uint16(51029), + 36: uint16(51030), + 37: uint16(51031), + 38: uint16(51032), + 39: uint16(51036), + 40: uint16(51040), + 41: uint16(51048), + 42: uint16(51051), + 43: uint16(51060), + 44: uint16(51061), + 45: uint16(51064), + 46: uint16(51068), + 47: uint16(51069), + 48: uint16(51070), + 49: uint16(51075), + 50: uint16(51076), + 51: uint16(51077), + 52: uint16(51079), + 53: uint16(51080), + 54: uint16(51081), + 55: uint16(51082), + 56: uint16(51086), + 57: uint16(51088), + 58: uint16(51089), + 59: uint16(51092), + 60: uint16(51094), + 61: uint16(51095), + 62: uint16(51096), + 63: uint16(51098), + 64: uint16(51104), + 65: uint16(51105), + 66: uint16(51107), + 67: uint16(51108), + 68: uint16(51109), + 69: uint16(51110), + 70: uint16(51116), + 71: uint16(51117), + 72: uint16(51120), + 73: uint16(51124), + 74: uint16(51132), + 75: uint16(51133), + 76: uint16(51135), + 77: uint16(51136), + 78: uint16(51137), + 79: uint16(51144), + 80: uint16(51145), + 81: uint16(51148), + 82: uint16(51150), + 83: uint16(51152), + 84: uint16(51160), + 85: uint16(51165), + 86: uint16(51172), + 87: uint16(51176), + 88: uint16(51180), + 89: uint16(51200), + 90: uint16(51201), + 91: uint16(51204), + 92: uint16(51208), + 93: uint16(51210), + }, + 32: { + 0: uint16(51216), + 1: uint16(51217), + 2: uint16(51219), + 3: uint16(51221), + 4: uint16(51222), + 5: uint16(51228), + 6: uint16(51229), + 7: uint16(51232), + 8: uint16(51236), + 9: uint16(51244), + 10: uint16(51245), + 11: uint16(51247), + 12: uint16(51249), + 13: uint16(51256), + 14: uint16(51260), + 15: uint16(51264), + 16: uint16(51272), + 17: uint16(51273), + 18: uint16(51276), + 19: uint16(51277), + 20: uint16(51284), + 21: uint16(51312), + 22: uint16(51313), + 23: uint16(51316), + 24: uint16(51320), + 25: uint16(51322), + 26: uint16(51328), + 27: uint16(51329), + 28: uint16(51331), + 29: uint16(51333), + 30: uint16(51334), + 31: uint16(51335), + 32: uint16(51339), + 33: uint16(51340), + 34: uint16(51341), + 35: uint16(51348), + 36: uint16(51357), + 37: uint16(51359), + 38: uint16(51361), + 39: uint16(51368), + 40: uint16(51388), + 41: uint16(51389), + 42: uint16(51396), + 43: uint16(51400), + 44: uint16(51404), + 45: uint16(51412), + 46: uint16(51413), + 47: uint16(51415), + 48: uint16(51417), + 49: uint16(51424), + 50: uint16(51425), + 51: uint16(51428), + 52: uint16(51445), + 53: uint16(51452), + 54: uint16(51453), + 55: uint16(51456), + 56: uint16(51460), + 57: uint16(51461), + 58: uint16(51462), + 59: uint16(51468), + 60: uint16(51469), + 61: uint16(51471), + 62: uint16(51473), + 63: uint16(51480), + 64: uint16(51500), + 65: uint16(51508), + 66: uint16(51536), + 67: uint16(51537), + 68: uint16(51540), + 69: uint16(51544), + 70: uint16(51552), + 71: uint16(51553), + 72: uint16(51555), + 73: uint16(51564), + 74: uint16(51568), + 75: uint16(51572), + 76: uint16(51580), + 77: uint16(51592), + 78: uint16(51593), + 79: uint16(51596), + 80: uint16(51600), + 81: uint16(51608), + 82: uint16(51609), + 83: uint16(51611), + 84: uint16(51613), + 85: uint16(51648), + 86: uint16(51649), + 87: uint16(51652), + 88: uint16(51655), + 89: uint16(51656), + 90: uint16(51658), + 91: uint16(51664), + 92: uint16(51665), + 93: uint16(51667), + }, + 33: { + 0: uint16(51669), + 1: uint16(51670), + 2: uint16(51673), + 3: uint16(51674), + 4: uint16(51676), + 5: uint16(51677), + 6: uint16(51680), + 7: uint16(51682), + 8: uint16(51684), + 9: uint16(51687), + 10: uint16(51692), + 11: uint16(51693), + 12: uint16(51695), + 13: uint16(51696), + 14: uint16(51697), + 15: uint16(51704), + 16: uint16(51705), + 17: uint16(51708), + 18: uint16(51712), + 19: uint16(51720), + 20: uint16(51721), + 21: uint16(51723), + 22: uint16(51724), + 23: uint16(51725), + 24: uint16(51732), + 25: uint16(51736), + 26: uint16(51753), + 27: uint16(51788), + 28: uint16(51789), + 29: uint16(51792), + 30: uint16(51796), + 31: uint16(51804), + 32: uint16(51805), + 33: uint16(51807), + 34: uint16(51808), + 35: uint16(51809), + 36: uint16(51816), + 37: uint16(51837), + 38: uint16(51844), + 39: uint16(51864), + 40: uint16(51900), + 41: uint16(51901), + 42: uint16(51904), + 43: uint16(51908), + 44: uint16(51916), + 45: uint16(51917), + 46: uint16(51919), + 47: uint16(51921), + 48: uint16(51923), + 49: uint16(51928), + 50: uint16(51929), + 51: uint16(51936), + 52: uint16(51948), + 53: uint16(51956), + 54: uint16(51976), + 55: uint16(51984), + 56: uint16(51988), + 57: uint16(51992), + 58: uint16(52000), + 59: uint16(52001), + 60: uint16(52033), + 61: uint16(52040), + 62: uint16(52041), + 63: uint16(52044), + 64: uint16(52048), + 65: uint16(52056), + 66: uint16(52057), + 67: uint16(52061), + 68: uint16(52068), + 69: uint16(52088), + 70: uint16(52089), + 71: uint16(52124), + 72: uint16(52152), + 73: uint16(52180), + 74: uint16(52196), + 75: uint16(52199), + 76: uint16(52201), + 77: uint16(52236), + 78: uint16(52237), + 79: uint16(52240), + 80: uint16(52244), + 81: uint16(52252), + 82: uint16(52253), + 83: uint16(52257), + 84: uint16(52258), + 85: uint16(52263), + 86: uint16(52264), + 87: uint16(52265), + 88: uint16(52268), + 89: uint16(52270), + 90: uint16(52272), + 91: uint16(52280), + 92: uint16(52281), + 93: uint16(52283), + }, + 34: { + 0: uint16(52284), + 1: uint16(52285), + 2: uint16(52286), + 3: uint16(52292), + 4: uint16(52293), + 5: uint16(52296), + 6: uint16(52300), + 7: uint16(52308), + 8: uint16(52309), + 9: uint16(52311), + 10: uint16(52312), + 11: uint16(52313), + 12: uint16(52320), + 13: uint16(52324), + 14: uint16(52326), + 15: uint16(52328), + 16: uint16(52336), + 17: uint16(52341), + 18: uint16(52376), + 19: uint16(52377), + 20: uint16(52380), + 21: uint16(52384), + 22: uint16(52392), + 23: uint16(52393), + 24: uint16(52395), + 25: uint16(52396), + 26: uint16(52397), + 27: uint16(52404), + 28: uint16(52405), + 29: uint16(52408), + 30: uint16(52412), + 31: uint16(52420), + 32: uint16(52421), + 33: uint16(52423), + 34: uint16(52425), + 35: uint16(52432), + 36: uint16(52436), + 37: uint16(52452), + 38: uint16(52460), + 39: uint16(52464), + 40: uint16(52481), + 41: uint16(52488), + 42: uint16(52489), + 43: uint16(52492), + 44: uint16(52496), + 45: uint16(52504), + 46: uint16(52505), + 47: uint16(52507), + 48: uint16(52509), + 49: uint16(52516), + 50: uint16(52520), + 51: uint16(52524), + 52: uint16(52537), + 53: uint16(52572), + 54: uint16(52576), + 55: uint16(52580), + 56: uint16(52588), + 57: uint16(52589), + 58: uint16(52591), + 59: uint16(52593), + 60: uint16(52600), + 61: uint16(52616), + 62: uint16(52628), + 63: uint16(52629), + 64: uint16(52632), + 65: uint16(52636), + 66: uint16(52644), + 67: uint16(52645), + 68: uint16(52647), + 69: uint16(52649), + 70: uint16(52656), + 71: uint16(52676), + 72: uint16(52684), + 73: uint16(52688), + 74: uint16(52712), + 75: uint16(52716), + 76: uint16(52720), + 77: uint16(52728), + 78: uint16(52729), + 79: uint16(52731), + 80: uint16(52733), + 81: uint16(52740), + 82: uint16(52744), + 83: uint16(52748), + 84: uint16(52756), + 85: uint16(52761), + 86: uint16(52768), + 87: uint16(52769), + 88: uint16(52772), + 89: uint16(52776), + 90: uint16(52784), + 91: uint16(52785), + 92: uint16(52787), + 93: uint16(52789), + }, + 35: { + 0: uint16(52824), + 1: uint16(52825), + 2: uint16(52828), + 3: uint16(52831), + 4: uint16(52832), + 5: uint16(52833), + 6: uint16(52840), + 7: uint16(52841), + 8: uint16(52843), + 9: uint16(52845), + 10: uint16(52852), + 11: uint16(52853), + 12: uint16(52856), + 13: uint16(52860), + 14: uint16(52868), + 15: uint16(52869), + 16: uint16(52871), + 17: uint16(52873), + 18: uint16(52880), + 19: uint16(52881), + 20: uint16(52884), + 21: uint16(52888), + 22: uint16(52896), + 23: uint16(52897), + 24: uint16(52899), + 25: uint16(52900), + 26: uint16(52901), + 27: uint16(52908), + 28: uint16(52909), + 29: uint16(52929), + 30: uint16(52964), + 31: uint16(52965), + 32: uint16(52968), + 33: uint16(52971), + 34: uint16(52972), + 35: uint16(52980), + 36: uint16(52981), + 37: uint16(52983), + 38: uint16(52984), + 39: uint16(52985), + 40: uint16(52992), + 41: uint16(52993), + 42: uint16(52996), + 43: uint16(53000), + 44: uint16(53008), + 45: uint16(53009), + 46: uint16(53011), + 47: uint16(53013), + 48: uint16(53020), + 49: uint16(53024), + 50: uint16(53028), + 51: uint16(53036), + 52: uint16(53037), + 53: uint16(53039), + 54: uint16(53040), + 55: uint16(53041), + 56: uint16(53048), + 57: uint16(53076), + 58: uint16(53077), + 59: uint16(53080), + 60: uint16(53084), + 61: uint16(53092), + 62: uint16(53093), + 63: uint16(53095), + 64: uint16(53097), + 65: uint16(53104), + 66: uint16(53105), + 67: uint16(53108), + 68: uint16(53112), + 69: uint16(53120), + 70: uint16(53125), + 71: uint16(53132), + 72: uint16(53153), + 73: uint16(53160), + 74: uint16(53168), + 75: uint16(53188), + 76: uint16(53216), + 77: uint16(53217), + 78: uint16(53220), + 79: uint16(53224), + 80: uint16(53232), + 81: uint16(53233), + 82: uint16(53235), + 83: uint16(53237), + 84: uint16(53244), + 85: uint16(53248), + 86: uint16(53252), + 87: uint16(53265), + 88: uint16(53272), + 89: uint16(53293), + 90: uint16(53300), + 91: uint16(53301), + 92: uint16(53304), + 93: uint16(53308), + }, + 36: { + 0: uint16(53316), + 1: uint16(53317), + 2: uint16(53319), + 3: uint16(53321), + 4: uint16(53328), + 5: uint16(53332), + 6: uint16(53336), + 7: uint16(53344), + 8: uint16(53356), + 9: uint16(53357), + 10: uint16(53360), + 11: uint16(53364), + 12: uint16(53372), + 13: uint16(53373), + 14: uint16(53377), + 15: uint16(53412), + 16: uint16(53413), + 17: uint16(53416), + 18: uint16(53420), + 19: uint16(53428), + 20: uint16(53429), + 21: uint16(53431), + 22: uint16(53433), + 23: uint16(53440), + 24: uint16(53441), + 25: uint16(53444), + 26: uint16(53448), + 27: uint16(53449), + 28: uint16(53456), + 29: uint16(53457), + 30: uint16(53459), + 31: uint16(53460), + 32: uint16(53461), + 33: uint16(53468), + 34: uint16(53469), + 35: uint16(53472), + 36: uint16(53476), + 37: uint16(53484), + 38: uint16(53485), + 39: uint16(53487), + 40: uint16(53488), + 41: uint16(53489), + 42: uint16(53496), + 43: uint16(53517), + 44: uint16(53552), + 45: uint16(53553), + 46: uint16(53556), + 47: uint16(53560), + 48: uint16(53562), + 49: uint16(53568), + 50: uint16(53569), + 51: uint16(53571), + 52: uint16(53572), + 53: uint16(53573), + 54: uint16(53580), + 55: uint16(53581), + 56: uint16(53584), + 57: uint16(53588), + 58: uint16(53596), + 59: uint16(53597), + 60: uint16(53599), + 61: uint16(53601), + 62: uint16(53608), + 63: uint16(53612), + 64: uint16(53628), + 65: uint16(53636), + 66: uint16(53640), + 67: uint16(53664), + 68: uint16(53665), + 69: uint16(53668), + 70: uint16(53672), + 71: uint16(53680), + 72: uint16(53681), + 73: uint16(53683), + 74: uint16(53685), + 75: uint16(53690), + 76: uint16(53692), + 77: uint16(53696), + 78: uint16(53720), + 79: uint16(53748), + 80: uint16(53752), + 81: uint16(53767), + 82: uint16(53769), + 83: uint16(53776), + 84: uint16(53804), + 85: uint16(53805), + 86: uint16(53808), + 87: uint16(53812), + 88: uint16(53820), + 89: uint16(53821), + 90: uint16(53823), + 91: uint16(53825), + 92: uint16(53832), + 93: uint16(53852), + }, + 37: { + 0: uint16(53860), + 1: uint16(53888), + 2: uint16(53889), + 3: uint16(53892), + 4: uint16(53896), + 5: uint16(53904), + 6: uint16(53905), + 7: uint16(53909), + 8: uint16(53916), + 9: uint16(53920), + 10: uint16(53924), + 11: uint16(53932), + 12: uint16(53937), + 13: uint16(53944), + 14: uint16(53945), + 15: uint16(53948), + 16: uint16(53951), + 17: uint16(53952), + 18: uint16(53954), + 19: uint16(53960), + 20: uint16(53961), + 21: uint16(53963), + 22: uint16(53972), + 23: uint16(53976), + 24: uint16(53980), + 25: uint16(53988), + 26: uint16(53989), + 27: uint16(54000), + 28: uint16(54001), + 29: uint16(54004), + 30: uint16(54008), + 31: uint16(54016), + 32: uint16(54017), + 33: uint16(54019), + 34: uint16(54021), + 35: uint16(54028), + 36: uint16(54029), + 37: uint16(54030), + 38: uint16(54032), + 39: uint16(54036), + 40: uint16(54038), + 41: uint16(54044), + 42: uint16(54045), + 43: uint16(54047), + 44: uint16(54048), + 45: uint16(54049), + 46: uint16(54053), + 47: uint16(54056), + 48: uint16(54057), + 49: uint16(54060), + 50: uint16(54064), + 51: uint16(54072), + 52: uint16(54073), + 53: uint16(54075), + 54: uint16(54076), + 55: uint16(54077), + 56: uint16(54084), + 57: uint16(54085), + 58: uint16(54140), + 59: uint16(54141), + 60: uint16(54144), + 61: uint16(54148), + 62: uint16(54156), + 63: uint16(54157), + 64: uint16(54159), + 65: uint16(54160), + 66: uint16(54161), + 67: uint16(54168), + 68: uint16(54169), + 69: uint16(54172), + 70: uint16(54176), + 71: uint16(54184), + 72: uint16(54185), + 73: uint16(54187), + 74: uint16(54189), + 75: uint16(54196), + 76: uint16(54200), + 77: uint16(54204), + 78: uint16(54212), + 79: uint16(54213), + 80: uint16(54216), + 81: uint16(54217), + 82: uint16(54224), + 83: uint16(54232), + 84: uint16(54241), + 85: uint16(54243), + 86: uint16(54252), + 87: uint16(54253), + 88: uint16(54256), + 89: uint16(54260), + 90: uint16(54268), + 91: uint16(54269), + 92: uint16(54271), + 93: uint16(54273), + }, + 38: { + 0: uint16(54280), + 1: uint16(54301), + 2: uint16(54336), + 3: uint16(54340), + 4: uint16(54364), + 5: uint16(54368), + 6: uint16(54372), + 7: uint16(54381), + 8: uint16(54383), + 9: uint16(54392), + 10: uint16(54393), + 11: uint16(54396), + 12: uint16(54399), + 13: uint16(54400), + 14: uint16(54402), + 15: uint16(54408), + 16: uint16(54409), + 17: uint16(54411), + 18: uint16(54413), + 19: uint16(54420), + 20: uint16(54441), + 21: uint16(54476), + 22: uint16(54480), + 23: uint16(54484), + 24: uint16(54492), + 25: uint16(54495), + 26: uint16(54504), + 27: uint16(54508), + 28: uint16(54512), + 29: uint16(54520), + 30: uint16(54523), + 31: uint16(54525), + 32: uint16(54532), + 33: uint16(54536), + 34: uint16(54540), + 35: uint16(54548), + 36: uint16(54549), + 37: uint16(54551), + 38: uint16(54588), + 39: uint16(54589), + 40: uint16(54592), + 41: uint16(54596), + 42: uint16(54604), + 43: uint16(54605), + 44: uint16(54607), + 45: uint16(54609), + 46: uint16(54616), + 47: uint16(54617), + 48: uint16(54620), + 49: uint16(54624), + 50: uint16(54629), + 51: uint16(54632), + 52: uint16(54633), + 53: uint16(54635), + 54: uint16(54637), + 55: uint16(54644), + 56: uint16(54645), + 57: uint16(54648), + 58: uint16(54652), + 59: uint16(54660), + 60: uint16(54661), + 61: uint16(54663), + 62: uint16(54664), + 63: uint16(54665), + 64: uint16(54672), + 65: uint16(54693), + 66: uint16(54728), + 67: uint16(54729), + 68: uint16(54732), + 69: uint16(54736), + 70: uint16(54738), + 71: uint16(54744), + 72: uint16(54745), + 73: uint16(54747), + 74: uint16(54749), + 75: uint16(54756), + 76: uint16(54757), + 77: uint16(54760), + 78: uint16(54764), + 79: uint16(54772), + 80: uint16(54773), + 81: uint16(54775), + 82: uint16(54777), + 83: uint16(54784), + 84: uint16(54785), + 85: uint16(54788), + 86: uint16(54792), + 87: uint16(54800), + 88: uint16(54801), + 89: uint16(54803), + 90: uint16(54804), + 91: uint16(54805), + 92: uint16(54812), + 93: uint16(54816), + }, + 39: { + 0: uint16(54820), + 1: uint16(54829), + 2: uint16(54840), + 3: uint16(54841), + 4: uint16(54844), + 5: uint16(54848), + 6: uint16(54853), + 7: uint16(54856), + 8: uint16(54857), + 9: uint16(54859), + 10: uint16(54861), + 11: uint16(54865), + 12: uint16(54868), + 13: uint16(54869), + 14: uint16(54872), + 15: uint16(54876), + 16: uint16(54887), + 17: uint16(54889), + 18: uint16(54896), + 19: uint16(54897), + 20: uint16(54900), + 21: uint16(54915), + 22: uint16(54917), + 23: uint16(54924), + 24: uint16(54925), + 25: uint16(54928), + 26: uint16(54932), + 27: uint16(54941), + 28: uint16(54943), + 29: uint16(54945), + 30: uint16(54952), + 31: uint16(54956), + 32: uint16(54960), + 33: uint16(54969), + 34: uint16(54971), + 35: uint16(54980), + 36: uint16(54981), + 37: uint16(54984), + 38: uint16(54988), + 39: uint16(54993), + 40: uint16(54996), + 41: uint16(54999), + 42: uint16(55001), + 43: uint16(55008), + 44: uint16(55012), + 45: uint16(55016), + 46: uint16(55024), + 47: uint16(55029), + 48: uint16(55036), + 49: uint16(55037), + 50: uint16(55040), + 51: uint16(55044), + 52: uint16(55057), + 53: uint16(55064), + 54: uint16(55065), + 55: uint16(55068), + 56: uint16(55072), + 57: uint16(55080), + 58: uint16(55081), + 59: uint16(55083), + 60: uint16(55085), + 61: uint16(55092), + 62: uint16(55093), + 63: uint16(55096), + 64: uint16(55100), + 65: uint16(55108), + 66: uint16(55111), + 67: uint16(55113), + 68: uint16(55120), + 69: uint16(55121), + 70: uint16(55124), + 71: uint16(55126), + 72: uint16(55127), + 73: uint16(55128), + 74: uint16(55129), + 75: uint16(55136), + 76: uint16(55137), + 77: uint16(55139), + 78: uint16(55141), + 79: uint16(55145), + 80: uint16(55148), + 81: uint16(55152), + 82: uint16(55156), + 83: uint16(55164), + 84: uint16(55165), + 85: uint16(55169), + 86: uint16(55176), + 87: uint16(55177), + 88: uint16(55180), + 89: uint16(55184), + 90: uint16(55192), + 91: uint16(55193), + 92: uint16(55195), + 93: uint16(55197), + }, + 40: {}, + 41: { + 0: uint16(20285), + 1: uint16(20339), + 2: uint16(20551), + 3: uint16(20729), + 4: uint16(21152), + 5: uint16(21487), + 6: uint16(21621), + 7: uint16(21733), + 8: uint16(22025), + 9: uint16(23233), + 10: uint16(23478), + 11: uint16(26247), + 12: uint16(26550), + 13: uint16(26551), + 14: uint16(26607), + 15: uint16(27468), + 16: uint16(29634), + 17: uint16(30146), + 18: uint16(31292), + 19: uint16(33499), + 20: uint16(33540), + 21: uint16(34903), + 22: uint16(34952), + 23: uint16(35382), + 24: uint16(36040), + 25: uint16(36303), + 26: uint16(36603), + 27: uint16(36838), + 28: uint16(39381), + 29: uint16(21051), + 30: uint16(21364), + 31: uint16(21508), + 32: uint16(24682), + 33: uint16(24932), + 34: uint16(27580), + 35: uint16(29647), + 36: uint16(33050), + 37: uint16(35258), + 38: uint16(35282), + 39: uint16(38307), + 40: uint16(20355), + 41: uint16(21002), + 42: uint16(22718), + 43: uint16(22904), + 44: uint16(23014), + 45: uint16(24178), + 46: uint16(24185), + 47: uint16(25031), + 48: uint16(25536), + 49: uint16(26438), + 50: uint16(26604), + 51: uint16(26751), + 52: uint16(28567), + 53: uint16(30286), + 54: uint16(30475), + 55: uint16(30965), + 56: uint16(31240), + 57: uint16(31487), + 58: uint16(31777), + 59: uint16(32925), + 60: uint16(33390), + 61: uint16(33393), + 62: uint16(35563), + 63: uint16(38291), + 64: uint16(20075), + 65: uint16(21917), + 66: uint16(26359), + 67: uint16(28212), + 68: uint16(30883), + 69: uint16(31469), + 70: uint16(33883), + 71: uint16(35088), + 72: uint16(34638), + 73: uint16(38824), + 74: uint16(21208), + 75: uint16(22350), + 76: uint16(22570), + 77: uint16(23884), + 78: uint16(24863), + 79: uint16(25022), + 80: uint16(25121), + 81: uint16(25954), + 82: uint16(26577), + 83: uint16(27204), + 84: uint16(28187), + 85: uint16(29976), + 86: uint16(30131), + 87: uint16(30435), + 88: uint16(30640), + 89: uint16(32058), + 90: uint16(37039), + 91: uint16(37969), + 92: uint16(37970), + 93: uint16(40853), + }, + 42: { + 0: uint16(21283), + 1: uint16(23724), + 2: uint16(30002), + 3: uint16(32987), + 4: uint16(37440), + 5: uint16(38296), + 6: uint16(21083), + 7: uint16(22536), + 8: uint16(23004), + 9: uint16(23713), + 10: uint16(23831), + 11: uint16(24247), + 12: uint16(24378), + 13: uint16(24394), + 14: uint16(24951), + 15: uint16(27743), + 16: uint16(30074), + 17: uint16(30086), + 18: uint16(31968), + 19: uint16(32115), + 20: uint16(32177), + 21: uint16(32652), + 22: uint16(33108), + 23: uint16(33313), + 24: uint16(34193), + 25: uint16(35137), + 26: uint16(35611), + 27: uint16(37628), + 28: uint16(38477), + 29: uint16(40007), + 30: uint16(20171), + 31: uint16(20215), + 32: uint16(20491), + 33: uint16(20977), + 34: uint16(22607), + 35: uint16(24887), + 36: uint16(24894), + 37: uint16(24936), + 38: uint16(25913), + 39: uint16(27114), + 40: uint16(28433), + 41: uint16(30117), + 42: uint16(30342), + 43: uint16(30422), + 44: uint16(31623), + 45: uint16(33445), + 46: uint16(33995), + 47: uint16(63744), + 48: uint16(37799), + 49: uint16(38283), + 50: uint16(21888), + 51: uint16(23458), + 52: uint16(22353), + 53: uint16(63745), + 54: uint16(31923), + 55: uint16(32697), + 56: uint16(37301), + 57: uint16(20520), + 58: uint16(21435), + 59: uint16(23621), + 60: uint16(24040), + 61: uint16(25298), + 62: uint16(25454), + 63: uint16(25818), + 64: uint16(25831), + 65: uint16(28192), + 66: uint16(28844), + 67: uint16(31067), + 68: uint16(36317), + 69: uint16(36382), + 70: uint16(63746), + 71: uint16(36989), + 72: uint16(37445), + 73: uint16(37624), + 74: uint16(20094), + 75: uint16(20214), + 76: uint16(20581), + 77: uint16(24062), + 78: uint16(24314), + 79: uint16(24838), + 80: uint16(26967), + 81: uint16(33137), + 82: uint16(34388), + 83: uint16(36423), + 84: uint16(37749), + 85: uint16(39467), + 86: uint16(20062), + 87: uint16(20625), + 88: uint16(26480), + 89: uint16(26688), + 90: uint16(20745), + 91: uint16(21133), + 92: uint16(21138), + 93: uint16(27298), + }, + 43: { + 0: uint16(30652), + 1: uint16(37392), + 2: uint16(40660), + 3: uint16(21163), + 4: uint16(24623), + 5: uint16(36850), + 6: uint16(20552), + 7: uint16(25001), + 8: uint16(25581), + 9: uint16(25802), + 10: uint16(26684), + 11: uint16(27268), + 12: uint16(28608), + 13: uint16(33160), + 14: uint16(35233), + 15: uint16(38548), + 16: uint16(22533), + 17: uint16(29309), + 18: uint16(29356), + 19: uint16(29956), + 20: uint16(32121), + 21: uint16(32365), + 22: uint16(32937), + 23: uint16(35211), + 24: uint16(35700), + 25: uint16(36963), + 26: uint16(40273), + 27: uint16(25225), + 28: uint16(27770), + 29: uint16(28500), + 30: uint16(32080), + 31: uint16(32570), + 32: uint16(35363), + 33: uint16(20860), + 34: uint16(24906), + 35: uint16(31645), + 36: uint16(35609), + 37: uint16(37463), + 38: uint16(37772), + 39: uint16(20140), + 40: uint16(20435), + 41: uint16(20510), + 42: uint16(20670), + 43: uint16(20742), + 44: uint16(21185), + 45: uint16(21197), + 46: uint16(21375), + 47: uint16(22384), + 48: uint16(22659), + 49: uint16(24218), + 50: uint16(24465), + 51: uint16(24950), + 52: uint16(25004), + 53: uint16(25806), + 54: uint16(25964), + 55: uint16(26223), + 56: uint16(26299), + 57: uint16(26356), + 58: uint16(26775), + 59: uint16(28039), + 60: uint16(28805), + 61: uint16(28913), + 62: uint16(29855), + 63: uint16(29861), + 64: uint16(29898), + 65: uint16(30169), + 66: uint16(30828), + 67: uint16(30956), + 68: uint16(31455), + 69: uint16(31478), + 70: uint16(32069), + 71: uint16(32147), + 72: uint16(32789), + 73: uint16(32831), + 74: uint16(33051), + 75: uint16(33686), + 76: uint16(35686), + 77: uint16(36629), + 78: uint16(36885), + 79: uint16(37857), + 80: uint16(38915), + 81: uint16(38968), + 82: uint16(39514), + 83: uint16(39912), + 84: uint16(20418), + 85: uint16(21843), + 86: uint16(22586), + 87: uint16(22865), + 88: uint16(23395), + 89: uint16(23622), + 90: uint16(24760), + 91: uint16(25106), + 92: uint16(26690), + 93: uint16(26800), + }, + 44: { + 0: uint16(26856), + 1: uint16(28330), + 2: uint16(30028), + 3: uint16(30328), + 4: uint16(30926), + 5: uint16(31293), + 6: uint16(31995), + 7: uint16(32363), + 8: uint16(32380), + 9: uint16(35336), + 10: uint16(35489), + 11: uint16(35903), + 12: uint16(38542), + 13: uint16(40388), + 14: uint16(21476), + 15: uint16(21481), + 16: uint16(21578), + 17: uint16(21617), + 18: uint16(22266), + 19: uint16(22993), + 20: uint16(23396), + 21: uint16(23611), + 22: uint16(24235), + 23: uint16(25335), + 24: uint16(25911), + 25: uint16(25925), + 26: uint16(25970), + 27: uint16(26272), + 28: uint16(26543), + 29: uint16(27073), + 30: uint16(27837), + 31: uint16(30204), + 32: uint16(30352), + 33: uint16(30590), + 34: uint16(31295), + 35: uint16(32660), + 36: uint16(32771), + 37: uint16(32929), + 38: uint16(33167), + 39: uint16(33510), + 40: uint16(33533), + 41: uint16(33776), + 42: uint16(34241), + 43: uint16(34865), + 44: uint16(34996), + 45: uint16(35493), + 46: uint16(63747), + 47: uint16(36764), + 48: uint16(37678), + 49: uint16(38599), + 50: uint16(39015), + 51: uint16(39640), + 52: uint16(40723), + 53: uint16(21741), + 54: uint16(26011), + 55: uint16(26354), + 56: uint16(26767), + 57: uint16(31296), + 58: uint16(35895), + 59: uint16(40288), + 60: uint16(22256), + 61: uint16(22372), + 62: uint16(23825), + 63: uint16(26118), + 64: uint16(26801), + 65: uint16(26829), + 66: uint16(28414), + 67: uint16(29736), + 68: uint16(34974), + 69: uint16(39908), + 70: uint16(27752), + 71: uint16(63748), + 72: uint16(39592), + 73: uint16(20379), + 74: uint16(20844), + 75: uint16(20849), + 76: uint16(21151), + 77: uint16(23380), + 78: uint16(24037), + 79: uint16(24656), + 80: uint16(24685), + 81: uint16(25329), + 82: uint16(25511), + 83: uint16(25915), + 84: uint16(29657), + 85: uint16(31354), + 86: uint16(34467), + 87: uint16(36002), + 88: uint16(38799), + 89: uint16(20018), + 90: uint16(23521), + 91: uint16(25096), + 92: uint16(26524), + 93: uint16(29916), + }, + 45: { + 0: uint16(31185), + 1: uint16(33747), + 2: uint16(35463), + 3: uint16(35506), + 4: uint16(36328), + 5: uint16(36942), + 6: uint16(37707), + 7: uint16(38982), + 8: uint16(24275), + 9: uint16(27112), + 10: uint16(34303), + 11: uint16(37101), + 12: uint16(63749), + 13: uint16(20896), + 14: uint16(23448), + 15: uint16(23532), + 16: uint16(24931), + 17: uint16(26874), + 18: uint16(27454), + 19: uint16(28748), + 20: uint16(29743), + 21: uint16(29912), + 22: uint16(31649), + 23: uint16(32592), + 24: uint16(33733), + 25: uint16(35264), + 26: uint16(36011), + 27: uint16(38364), + 28: uint16(39208), + 29: uint16(21038), + 30: uint16(24669), + 31: uint16(25324), + 32: uint16(36866), + 33: uint16(20362), + 34: uint16(20809), + 35: uint16(21281), + 36: uint16(22745), + 37: uint16(24291), + 38: uint16(26336), + 39: uint16(27960), + 40: uint16(28826), + 41: uint16(29378), + 42: uint16(29654), + 43: uint16(31568), + 44: uint16(33009), + 45: uint16(37979), + 46: uint16(21350), + 47: uint16(25499), + 48: uint16(32619), + 49: uint16(20054), + 50: uint16(20608), + 51: uint16(22602), + 52: uint16(22750), + 53: uint16(24618), + 54: uint16(24871), + 55: uint16(25296), + 56: uint16(27088), + 57: uint16(39745), + 58: uint16(23439), + 59: uint16(32024), + 60: uint16(32945), + 61: uint16(36703), + 62: uint16(20132), + 63: uint16(20689), + 64: uint16(21676), + 65: uint16(21932), + 66: uint16(23308), + 67: uint16(23968), + 68: uint16(24039), + 69: uint16(25898), + 70: uint16(25934), + 71: uint16(26657), + 72: uint16(27211), + 73: uint16(29409), + 74: uint16(30350), + 75: uint16(30703), + 76: uint16(32094), + 77: uint16(32761), + 78: uint16(33184), + 79: uint16(34126), + 80: uint16(34527), + 81: uint16(36611), + 82: uint16(36686), + 83: uint16(37066), + 84: uint16(39171), + 85: uint16(39509), + 86: uint16(39851), + 87: uint16(19992), + 88: uint16(20037), + 89: uint16(20061), + 90: uint16(20167), + 91: uint16(20465), + 92: uint16(20855), + 93: uint16(21246), + }, + 46: { + 0: uint16(21312), + 1: uint16(21475), + 2: uint16(21477), + 3: uint16(21646), + 4: uint16(22036), + 5: uint16(22389), + 6: uint16(22434), + 7: uint16(23495), + 8: uint16(23943), + 9: uint16(24272), + 10: uint16(25084), + 11: uint16(25304), + 12: uint16(25937), + 13: uint16(26552), + 14: uint16(26601), + 15: uint16(27083), + 16: uint16(27472), + 17: uint16(27590), + 18: uint16(27628), + 19: uint16(27714), + 20: uint16(28317), + 21: uint16(28792), + 22: uint16(29399), + 23: uint16(29590), + 24: uint16(29699), + 25: uint16(30655), + 26: uint16(30697), + 27: uint16(31350), + 28: uint16(32127), + 29: uint16(32777), + 30: uint16(33276), + 31: uint16(33285), + 32: uint16(33290), + 33: uint16(33503), + 34: uint16(34914), + 35: uint16(35635), + 36: uint16(36092), + 37: uint16(36544), + 38: uint16(36881), + 39: uint16(37041), + 40: uint16(37476), + 41: uint16(37558), + 42: uint16(39378), + 43: uint16(39493), + 44: uint16(40169), + 45: uint16(40407), + 46: uint16(40860), + 47: uint16(22283), + 48: uint16(23616), + 49: uint16(33738), + 50: uint16(38816), + 51: uint16(38827), + 52: uint16(40628), + 53: uint16(21531), + 54: uint16(31384), + 55: uint16(32676), + 56: uint16(35033), + 57: uint16(36557), + 58: uint16(37089), + 59: uint16(22528), + 60: uint16(23624), + 61: uint16(25496), + 62: uint16(31391), + 63: uint16(23470), + 64: uint16(24339), + 65: uint16(31353), + 66: uint16(31406), + 67: uint16(33422), + 68: uint16(36524), + 69: uint16(20518), + 70: uint16(21048), + 71: uint16(21240), + 72: uint16(21367), + 73: uint16(22280), + 74: uint16(25331), + 75: uint16(25458), + 76: uint16(27402), + 77: uint16(28099), + 78: uint16(30519), + 79: uint16(21413), + 80: uint16(29527), + 81: uint16(34152), + 82: uint16(36470), + 83: uint16(38357), + 84: uint16(26426), + 85: uint16(27331), + 86: uint16(28528), + 87: uint16(35437), + 88: uint16(36556), + 89: uint16(39243), + 90: uint16(63750), + 91: uint16(26231), + 92: uint16(27512), + 93: uint16(36020), + }, + 47: { + 0: uint16(39740), + 1: uint16(63751), + 2: uint16(21483), + 3: uint16(22317), + 4: uint16(22862), + 5: uint16(25542), + 6: uint16(27131), + 7: uint16(29674), + 8: uint16(30789), + 9: uint16(31418), + 10: uint16(31429), + 11: uint16(31998), + 12: uint16(33909), + 13: uint16(35215), + 14: uint16(36211), + 15: uint16(36917), + 16: uint16(38312), + 17: uint16(21243), + 18: uint16(22343), + 19: uint16(30023), + 20: uint16(31584), + 21: uint16(33740), + 22: uint16(37406), + 23: uint16(63752), + 24: uint16(27224), + 25: uint16(20811), + 26: uint16(21067), + 27: uint16(21127), + 28: uint16(25119), + 29: uint16(26840), + 30: uint16(26997), + 31: uint16(38553), + 32: uint16(20677), + 33: uint16(21156), + 34: uint16(21220), + 35: uint16(25027), + 36: uint16(26020), + 37: uint16(26681), + 38: uint16(27135), + 39: uint16(29822), + 40: uint16(31563), + 41: uint16(33465), + 42: uint16(33771), + 43: uint16(35250), + 44: uint16(35641), + 45: uint16(36817), + 46: uint16(39241), + 47: uint16(63753), + 48: uint16(20170), + 49: uint16(22935), + 50: uint16(25810), + 51: uint16(26129), + 52: uint16(27278), + 53: uint16(29748), + 54: uint16(31105), + 55: uint16(31165), + 56: uint16(33449), + 57: uint16(34942), + 58: uint16(34943), + 59: uint16(35167), + 60: uint16(63754), + 61: uint16(37670), + 62: uint16(20235), + 63: uint16(21450), + 64: uint16(24613), + 65: uint16(25201), + 66: uint16(27762), + 67: uint16(32026), + 68: uint16(32102), + 69: uint16(20120), + 70: uint16(20834), + 71: uint16(30684), + 72: uint16(32943), + 73: uint16(20225), + 74: uint16(20238), + 75: uint16(20854), + 76: uint16(20864), + 77: uint16(21980), + 78: uint16(22120), + 79: uint16(22331), + 80: uint16(22522), + 81: uint16(22524), + 82: uint16(22804), + 83: uint16(22855), + 84: uint16(22931), + 85: uint16(23492), + 86: uint16(23696), + 87: uint16(23822), + 88: uint16(24049), + 89: uint16(24190), + 90: uint16(24524), + 91: uint16(25216), + 92: uint16(26071), + 93: uint16(26083), + }, + 48: { + 0: uint16(26398), + 1: uint16(26399), + 2: uint16(26462), + 3: uint16(26827), + 4: uint16(26820), + 5: uint16(27231), + 6: uint16(27450), + 7: uint16(27683), + 8: uint16(27773), + 9: uint16(27778), + 10: uint16(28103), + 11: uint16(29592), + 12: uint16(29734), + 13: uint16(29738), + 14: uint16(29826), + 15: uint16(29859), + 16: uint16(30072), + 17: uint16(30079), + 18: uint16(30849), + 19: uint16(30959), + 20: uint16(31041), + 21: uint16(31047), + 22: uint16(31048), + 23: uint16(31098), + 24: uint16(31637), + 25: uint16(32000), + 26: uint16(32186), + 27: uint16(32648), + 28: uint16(32774), + 29: uint16(32813), + 30: uint16(32908), + 31: uint16(35352), + 32: uint16(35663), + 33: uint16(35912), + 34: uint16(36215), + 35: uint16(37665), + 36: uint16(37668), + 37: uint16(39138), + 38: uint16(39249), + 39: uint16(39438), + 40: uint16(39439), + 41: uint16(39525), + 42: uint16(40594), + 43: uint16(32202), + 44: uint16(20342), + 45: uint16(21513), + 46: uint16(25326), + 47: uint16(26708), + 48: uint16(37329), + 49: uint16(21931), + 50: uint16(20794), + 51: uint16(63755), + 52: uint16(63756), + 53: uint16(23068), + 54: uint16(25062), + 55: uint16(63757), + 56: uint16(25295), + 57: uint16(25343), + 58: uint16(63758), + 59: uint16(63759), + 60: uint16(63760), + 61: uint16(63761), + 62: uint16(63762), + 63: uint16(63763), + 64: uint16(37027), + 65: uint16(63764), + 66: uint16(63765), + 67: uint16(63766), + 68: uint16(63767), + 69: uint16(63768), + 70: uint16(35582), + 71: uint16(63769), + 72: uint16(63770), + 73: uint16(63771), + 74: uint16(63772), + 75: uint16(26262), + 76: uint16(63773), + 77: uint16(29014), + 78: uint16(63774), + 79: uint16(63775), + 80: uint16(38627), + 81: uint16(63776), + 82: uint16(25423), + 83: uint16(25466), + 84: uint16(21335), + 85: uint16(63777), + 86: uint16(26511), + 87: uint16(26976), + 88: uint16(28275), + 89: uint16(63778), + 90: uint16(30007), + 91: uint16(63779), + 92: uint16(63780), + 93: uint16(63781), + }, + 49: { + 0: uint16(32013), + 1: uint16(63782), + 2: uint16(63783), + 3: uint16(34930), + 4: uint16(22218), + 5: uint16(23064), + 6: uint16(63784), + 7: uint16(63785), + 8: uint16(63786), + 9: uint16(63787), + 10: uint16(63788), + 11: uint16(20035), + 12: uint16(63789), + 13: uint16(20839), + 14: uint16(22856), + 15: uint16(26608), + 16: uint16(32784), + 17: uint16(63790), + 18: uint16(22899), + 19: uint16(24180), + 20: uint16(25754), + 21: uint16(31178), + 22: uint16(24565), + 23: uint16(24684), + 24: uint16(25288), + 25: uint16(25467), + 26: uint16(23527), + 27: uint16(23511), + 28: uint16(21162), + 29: uint16(63791), + 30: uint16(22900), + 31: uint16(24361), + 32: uint16(24594), + 33: uint16(63792), + 34: uint16(63793), + 35: uint16(63794), + 36: uint16(29785), + 37: uint16(63795), + 38: uint16(63796), + 39: uint16(63797), + 40: uint16(63798), + 41: uint16(63799), + 42: uint16(63800), + 43: uint16(39377), + 44: uint16(63801), + 45: uint16(63802), + 46: uint16(63803), + 47: uint16(63804), + 48: uint16(63805), + 49: uint16(63806), + 50: uint16(63807), + 51: uint16(63808), + 52: uint16(63809), + 53: uint16(63810), + 54: uint16(63811), + 55: uint16(28611), + 56: uint16(63812), + 57: uint16(63813), + 58: uint16(33215), + 59: uint16(36786), + 60: uint16(24817), + 61: uint16(63814), + 62: uint16(63815), + 63: uint16(33126), + 64: uint16(63816), + 65: uint16(63817), + 66: uint16(23615), + 67: uint16(63818), + 68: uint16(63819), + 69: uint16(63820), + 70: uint16(63821), + 71: uint16(63822), + 72: uint16(63823), + 73: uint16(63824), + 74: uint16(63825), + 75: uint16(23273), + 76: uint16(35365), + 77: uint16(26491), + 78: uint16(32016), + 79: uint16(63826), + 80: uint16(63827), + 81: uint16(63828), + 82: uint16(63829), + 83: uint16(63830), + 84: uint16(63831), + 85: uint16(33021), + 86: uint16(63832), + 87: uint16(63833), + 88: uint16(23612), + 89: uint16(27877), + 90: uint16(21311), + 91: uint16(28346), + 92: uint16(22810), + 93: uint16(33590), + }, + 50: { + 0: uint16(20025), + 1: uint16(20150), + 2: uint16(20294), + 3: uint16(21934), + 4: uint16(22296), + 5: uint16(22727), + 6: uint16(24406), + 7: uint16(26039), + 8: uint16(26086), + 9: uint16(27264), + 10: uint16(27573), + 11: uint16(28237), + 12: uint16(30701), + 13: uint16(31471), + 14: uint16(31774), + 15: uint16(32222), + 16: uint16(34507), + 17: uint16(34962), + 18: uint16(37170), + 19: uint16(37723), + 20: uint16(25787), + 21: uint16(28606), + 22: uint16(29562), + 23: uint16(30136), + 24: uint16(36948), + 25: uint16(21846), + 26: uint16(22349), + 27: uint16(25018), + 28: uint16(25812), + 29: uint16(26311), + 30: uint16(28129), + 31: uint16(28251), + 32: uint16(28525), + 33: uint16(28601), + 34: uint16(30192), + 35: uint16(32835), + 36: uint16(33213), + 37: uint16(34113), + 38: uint16(35203), + 39: uint16(35527), + 40: uint16(35674), + 41: uint16(37663), + 42: uint16(27795), + 43: uint16(30035), + 44: uint16(31572), + 45: uint16(36367), + 46: uint16(36957), + 47: uint16(21776), + 48: uint16(22530), + 49: uint16(22616), + 50: uint16(24162), + 51: uint16(25095), + 52: uint16(25758), + 53: uint16(26848), + 54: uint16(30070), + 55: uint16(31958), + 56: uint16(34739), + 57: uint16(40680), + 58: uint16(20195), + 59: uint16(22408), + 60: uint16(22382), + 61: uint16(22823), + 62: uint16(23565), + 63: uint16(23729), + 64: uint16(24118), + 65: uint16(24453), + 66: uint16(25140), + 67: uint16(25825), + 68: uint16(29619), + 69: uint16(33274), + 70: uint16(34955), + 71: uint16(36024), + 72: uint16(38538), + 73: uint16(40667), + 74: uint16(23429), + 75: uint16(24503), + 76: uint16(24755), + 77: uint16(20498), + 78: uint16(20992), + 79: uint16(21040), + 80: uint16(22294), + 81: uint16(22581), + 82: uint16(22615), + 83: uint16(23566), + 84: uint16(23648), + 85: uint16(23798), + 86: uint16(23947), + 87: uint16(24230), + 88: uint16(24466), + 89: uint16(24764), + 90: uint16(25361), + 91: uint16(25481), + 92: uint16(25623), + 93: uint16(26691), + }, + 51: { + 0: uint16(26873), + 1: uint16(27330), + 2: uint16(28120), + 3: uint16(28193), + 4: uint16(28372), + 5: uint16(28644), + 6: uint16(29182), + 7: uint16(30428), + 8: uint16(30585), + 9: uint16(31153), + 10: uint16(31291), + 11: uint16(33796), + 12: uint16(35241), + 13: uint16(36077), + 14: uint16(36339), + 15: uint16(36424), + 16: uint16(36867), + 17: uint16(36884), + 18: uint16(36947), + 19: uint16(37117), + 20: uint16(37709), + 21: uint16(38518), + 22: uint16(38876), + 23: uint16(27602), + 24: uint16(28678), + 25: uint16(29272), + 26: uint16(29346), + 27: uint16(29544), + 28: uint16(30563), + 29: uint16(31167), + 30: uint16(31716), + 31: uint16(32411), + 32: uint16(35712), + 33: uint16(22697), + 34: uint16(24775), + 35: uint16(25958), + 36: uint16(26109), + 37: uint16(26302), + 38: uint16(27788), + 39: uint16(28958), + 40: uint16(29129), + 41: uint16(35930), + 42: uint16(38931), + 43: uint16(20077), + 44: uint16(31361), + 45: uint16(20189), + 46: uint16(20908), + 47: uint16(20941), + 48: uint16(21205), + 49: uint16(21516), + 50: uint16(24999), + 51: uint16(26481), + 52: uint16(26704), + 53: uint16(26847), + 54: uint16(27934), + 55: uint16(28540), + 56: uint16(30140), + 57: uint16(30643), + 58: uint16(31461), + 59: uint16(33012), + 60: uint16(33891), + 61: uint16(37509), + 62: uint16(20828), + 63: uint16(26007), + 64: uint16(26460), + 65: uint16(26515), + 66: uint16(30168), + 67: uint16(31431), + 68: uint16(33651), + 69: uint16(63834), + 70: uint16(35910), + 71: uint16(36887), + 72: uint16(38957), + 73: uint16(23663), + 74: uint16(33216), + 75: uint16(33434), + 76: uint16(36929), + 77: uint16(36975), + 78: uint16(37389), + 79: uint16(24471), + 80: uint16(23965), + 81: uint16(27225), + 82: uint16(29128), + 83: uint16(30331), + 84: uint16(31561), + 85: uint16(34276), + 86: uint16(35588), + 87: uint16(37159), + 88: uint16(39472), + 89: uint16(21895), + 90: uint16(25078), + 91: uint16(63835), + 92: uint16(30313), + 93: uint16(32645), + }, + 52: { + 0: uint16(34367), + 1: uint16(34746), + 2: uint16(35064), + 3: uint16(37007), + 4: uint16(63836), + 5: uint16(27931), + 6: uint16(28889), + 7: uint16(29662), + 8: uint16(32097), + 9: uint16(33853), + 10: uint16(63837), + 11: uint16(37226), + 12: uint16(39409), + 13: uint16(63838), + 14: uint16(20098), + 15: uint16(21365), + 16: uint16(27396), + 17: uint16(27410), + 18: uint16(28734), + 19: uint16(29211), + 20: uint16(34349), + 21: uint16(40478), + 22: uint16(21068), + 23: uint16(36771), + 24: uint16(23888), + 25: uint16(25829), + 26: uint16(25900), + 27: uint16(27414), + 28: uint16(28651), + 29: uint16(31811), + 30: uint16(32412), + 31: uint16(34253), + 32: uint16(35172), + 33: uint16(35261), + 34: uint16(25289), + 35: uint16(33240), + 36: uint16(34847), + 37: uint16(24266), + 38: uint16(26391), + 39: uint16(28010), + 40: uint16(29436), + 41: uint16(29701), + 42: uint16(29807), + 43: uint16(34690), + 44: uint16(37086), + 45: uint16(20358), + 46: uint16(23821), + 47: uint16(24480), + 48: uint16(33802), + 49: uint16(20919), + 50: uint16(25504), + 51: uint16(30053), + 52: uint16(20142), + 53: uint16(20486), + 54: uint16(20841), + 55: uint16(20937), + 56: uint16(26753), + 57: uint16(27153), + 58: uint16(31918), + 59: uint16(31921), + 60: uint16(31975), + 61: uint16(33391), + 62: uint16(35538), + 63: uint16(36635), + 64: uint16(37327), + 65: uint16(20406), + 66: uint16(20791), + 67: uint16(21237), + 68: uint16(21570), + 69: uint16(24300), + 70: uint16(24942), + 71: uint16(25150), + 72: uint16(26053), + 73: uint16(27354), + 74: uint16(28670), + 75: uint16(31018), + 76: uint16(34268), + 77: uint16(34851), + 78: uint16(38317), + 79: uint16(39522), + 80: uint16(39530), + 81: uint16(40599), + 82: uint16(40654), + 83: uint16(21147), + 84: uint16(26310), + 85: uint16(27511), + 86: uint16(28701), + 87: uint16(31019), + 88: uint16(36706), + 89: uint16(38722), + 90: uint16(24976), + 91: uint16(25088), + 92: uint16(25891), + 93: uint16(28451), + }, + 53: { + 0: uint16(29001), + 1: uint16(29833), + 2: uint16(32244), + 3: uint16(32879), + 4: uint16(34030), + 5: uint16(36646), + 6: uint16(36899), + 7: uint16(37706), + 8: uint16(20925), + 9: uint16(21015), + 10: uint16(21155), + 11: uint16(27916), + 12: uint16(28872), + 13: uint16(35010), + 14: uint16(24265), + 15: uint16(25986), + 16: uint16(27566), + 17: uint16(28610), + 18: uint16(31806), + 19: uint16(29557), + 20: uint16(20196), + 21: uint16(20278), + 22: uint16(22265), + 23: uint16(63839), + 24: uint16(23738), + 25: uint16(23994), + 26: uint16(24604), + 27: uint16(29618), + 28: uint16(31533), + 29: uint16(32666), + 30: uint16(32718), + 31: uint16(32838), + 32: uint16(36894), + 33: uint16(37428), + 34: uint16(38646), + 35: uint16(38728), + 36: uint16(38936), + 37: uint16(40801), + 38: uint16(20363), + 39: uint16(28583), + 40: uint16(31150), + 41: uint16(37300), + 42: uint16(38583), + 43: uint16(21214), + 44: uint16(63840), + 45: uint16(25736), + 46: uint16(25796), + 47: uint16(27347), + 48: uint16(28510), + 49: uint16(28696), + 50: uint16(29200), + 51: uint16(30439), + 52: uint16(32769), + 53: uint16(34310), + 54: uint16(34396), + 55: uint16(36335), + 56: uint16(36613), + 57: uint16(38706), + 58: uint16(39791), + 59: uint16(40442), + 60: uint16(40565), + 61: uint16(30860), + 62: uint16(31103), + 63: uint16(32160), + 64: uint16(33737), + 65: uint16(37636), + 66: uint16(40575), + 67: uint16(40595), + 68: uint16(35542), + 69: uint16(22751), + 70: uint16(24324), + 71: uint16(26407), + 72: uint16(28711), + 73: uint16(29903), + 74: uint16(31840), + 75: uint16(32894), + 76: uint16(20769), + 77: uint16(28712), + 78: uint16(29282), + 79: uint16(30922), + 80: uint16(36034), + 81: uint16(36058), + 82: uint16(36084), + 83: uint16(38647), + 84: uint16(20102), + 85: uint16(20698), + 86: uint16(23534), + 87: uint16(24278), + 88: uint16(26009), + 89: uint16(29134), + 90: uint16(30274), + 91: uint16(30637), + 92: uint16(32842), + 93: uint16(34044), + }, + 54: { + 0: uint16(36988), + 1: uint16(39719), + 2: uint16(40845), + 3: uint16(22744), + 4: uint16(23105), + 5: uint16(23650), + 6: uint16(27155), + 7: uint16(28122), + 8: uint16(28431), + 9: uint16(30267), + 10: uint16(32047), + 11: uint16(32311), + 12: uint16(34078), + 13: uint16(35128), + 14: uint16(37860), + 15: uint16(38475), + 16: uint16(21129), + 17: uint16(26066), + 18: uint16(26611), + 19: uint16(27060), + 20: uint16(27969), + 21: uint16(28316), + 22: uint16(28687), + 23: uint16(29705), + 24: uint16(29792), + 25: uint16(30041), + 26: uint16(30244), + 27: uint16(30827), + 28: uint16(35628), + 29: uint16(39006), + 30: uint16(20845), + 31: uint16(25134), + 32: uint16(38520), + 33: uint16(20374), + 34: uint16(20523), + 35: uint16(23833), + 36: uint16(28138), + 37: uint16(32184), + 38: uint16(36650), + 39: uint16(24459), + 40: uint16(24900), + 41: uint16(26647), + 42: uint16(63841), + 43: uint16(38534), + 44: uint16(21202), + 45: uint16(32907), + 46: uint16(20956), + 47: uint16(20940), + 48: uint16(26974), + 49: uint16(31260), + 50: uint16(32190), + 51: uint16(33777), + 52: uint16(38517), + 53: uint16(20442), + 54: uint16(21033), + 55: uint16(21400), + 56: uint16(21519), + 57: uint16(21774), + 58: uint16(23653), + 59: uint16(24743), + 60: uint16(26446), + 61: uint16(26792), + 62: uint16(28012), + 63: uint16(29313), + 64: uint16(29432), + 65: uint16(29702), + 66: uint16(29827), + 67: uint16(63842), + 68: uint16(30178), + 69: uint16(31852), + 70: uint16(32633), + 71: uint16(32696), + 72: uint16(33673), + 73: uint16(35023), + 74: uint16(35041), + 75: uint16(37324), + 76: uint16(37328), + 77: uint16(38626), + 78: uint16(39881), + 79: uint16(21533), + 80: uint16(28542), + 81: uint16(29136), + 82: uint16(29848), + 83: uint16(34298), + 84: uint16(36522), + 85: uint16(38563), + 86: uint16(40023), + 87: uint16(40607), + 88: uint16(26519), + 89: uint16(28107), + 90: uint16(29747), + 91: uint16(33256), + 92: uint16(38678), + 93: uint16(30764), + }, + 55: { + 0: uint16(31435), + 1: uint16(31520), + 2: uint16(31890), + 3: uint16(25705), + 4: uint16(29802), + 5: uint16(30194), + 6: uint16(30908), + 7: uint16(30952), + 8: uint16(39340), + 9: uint16(39764), + 10: uint16(40635), + 11: uint16(23518), + 12: uint16(24149), + 13: uint16(28448), + 14: uint16(33180), + 15: uint16(33707), + 16: uint16(37000), + 17: uint16(19975), + 18: uint16(21325), + 19: uint16(23081), + 20: uint16(24018), + 21: uint16(24398), + 22: uint16(24930), + 23: uint16(25405), + 24: uint16(26217), + 25: uint16(26364), + 26: uint16(28415), + 27: uint16(28459), + 28: uint16(28771), + 29: uint16(30622), + 30: uint16(33836), + 31: uint16(34067), + 32: uint16(34875), + 33: uint16(36627), + 34: uint16(39237), + 35: uint16(39995), + 36: uint16(21788), + 37: uint16(25273), + 38: uint16(26411), + 39: uint16(27819), + 40: uint16(33545), + 41: uint16(35178), + 42: uint16(38778), + 43: uint16(20129), + 44: uint16(22916), + 45: uint16(24536), + 46: uint16(24537), + 47: uint16(26395), + 48: uint16(32178), + 49: uint16(32596), + 50: uint16(33426), + 51: uint16(33579), + 52: uint16(33725), + 53: uint16(36638), + 54: uint16(37017), + 55: uint16(22475), + 56: uint16(22969), + 57: uint16(23186), + 58: uint16(23504), + 59: uint16(26151), + 60: uint16(26522), + 61: uint16(26757), + 62: uint16(27599), + 63: uint16(29028), + 64: uint16(32629), + 65: uint16(36023), + 66: uint16(36067), + 67: uint16(36993), + 68: uint16(39749), + 69: uint16(33032), + 70: uint16(35978), + 71: uint16(38476), + 72: uint16(39488), + 73: uint16(40613), + 74: uint16(23391), + 75: uint16(27667), + 76: uint16(29467), + 77: uint16(30450), + 78: uint16(30431), + 79: uint16(33804), + 80: uint16(20906), + 81: uint16(35219), + 82: uint16(20813), + 83: uint16(20885), + 84: uint16(21193), + 85: uint16(26825), + 86: uint16(27796), + 87: uint16(30468), + 88: uint16(30496), + 89: uint16(32191), + 90: uint16(32236), + 91: uint16(38754), + 92: uint16(40629), + 93: uint16(28357), + }, + 56: { + 0: uint16(34065), + 1: uint16(20901), + 2: uint16(21517), + 3: uint16(21629), + 4: uint16(26126), + 5: uint16(26269), + 6: uint16(26919), + 7: uint16(28319), + 8: uint16(30399), + 9: uint16(30609), + 10: uint16(33559), + 11: uint16(33986), + 12: uint16(34719), + 13: uint16(37225), + 14: uint16(37528), + 15: uint16(40180), + 16: uint16(34946), + 17: uint16(20398), + 18: uint16(20882), + 19: uint16(21215), + 20: uint16(22982), + 21: uint16(24125), + 22: uint16(24917), + 23: uint16(25720), + 24: uint16(25721), + 25: uint16(26286), + 26: uint16(26576), + 27: uint16(27169), + 28: uint16(27597), + 29: uint16(27611), + 30: uint16(29279), + 31: uint16(29281), + 32: uint16(29761), + 33: uint16(30520), + 34: uint16(30683), + 35: uint16(32791), + 36: uint16(33468), + 37: uint16(33541), + 38: uint16(35584), + 39: uint16(35624), + 40: uint16(35980), + 41: uint16(26408), + 42: uint16(27792), + 43: uint16(29287), + 44: uint16(30446), + 45: uint16(30566), + 46: uint16(31302), + 47: uint16(40361), + 48: uint16(27519), + 49: uint16(27794), + 50: uint16(22818), + 51: uint16(26406), + 52: uint16(33945), + 53: uint16(21359), + 54: uint16(22675), + 55: uint16(22937), + 56: uint16(24287), + 57: uint16(25551), + 58: uint16(26164), + 59: uint16(26483), + 60: uint16(28218), + 61: uint16(29483), + 62: uint16(31447), + 63: uint16(33495), + 64: uint16(37672), + 65: uint16(21209), + 66: uint16(24043), + 67: uint16(25006), + 68: uint16(25035), + 69: uint16(25098), + 70: uint16(25287), + 71: uint16(25771), + 72: uint16(26080), + 73: uint16(26969), + 74: uint16(27494), + 75: uint16(27595), + 76: uint16(28961), + 77: uint16(29687), + 78: uint16(30045), + 79: uint16(32326), + 80: uint16(33310), + 81: uint16(33538), + 82: uint16(34154), + 83: uint16(35491), + 84: uint16(36031), + 85: uint16(38695), + 86: uint16(40289), + 87: uint16(22696), + 88: uint16(40664), + 89: uint16(20497), + 90: uint16(21006), + 91: uint16(21563), + 92: uint16(21839), + 93: uint16(25991), + }, + 57: { + 0: uint16(27766), + 1: uint16(32010), + 2: uint16(32011), + 3: uint16(32862), + 4: uint16(34442), + 5: uint16(38272), + 6: uint16(38639), + 7: uint16(21247), + 8: uint16(27797), + 9: uint16(29289), + 10: uint16(21619), + 11: uint16(23194), + 12: uint16(23614), + 13: uint16(23883), + 14: uint16(24396), + 15: uint16(24494), + 16: uint16(26410), + 17: uint16(26806), + 18: uint16(26979), + 19: uint16(28220), + 20: uint16(28228), + 21: uint16(30473), + 22: uint16(31859), + 23: uint16(32654), + 24: uint16(34183), + 25: uint16(35598), + 26: uint16(36855), + 27: uint16(38753), + 28: uint16(40692), + 29: uint16(23735), + 30: uint16(24758), + 31: uint16(24845), + 32: uint16(25003), + 33: uint16(25935), + 34: uint16(26107), + 35: uint16(26108), + 36: uint16(27665), + 37: uint16(27887), + 38: uint16(29599), + 39: uint16(29641), + 40: uint16(32225), + 41: uint16(38292), + 42: uint16(23494), + 43: uint16(34588), + 44: uint16(35600), + 45: uint16(21085), + 46: uint16(21338), + 47: uint16(25293), + 48: uint16(25615), + 49: uint16(25778), + 50: uint16(26420), + 51: uint16(27192), + 52: uint16(27850), + 53: uint16(29632), + 54: uint16(29854), + 55: uint16(31636), + 56: uint16(31893), + 57: uint16(32283), + 58: uint16(33162), + 59: uint16(33334), + 60: uint16(34180), + 61: uint16(36843), + 62: uint16(38649), + 63: uint16(39361), + 64: uint16(20276), + 65: uint16(21322), + 66: uint16(21453), + 67: uint16(21467), + 68: uint16(25292), + 69: uint16(25644), + 70: uint16(25856), + 71: uint16(26001), + 72: uint16(27075), + 73: uint16(27886), + 74: uint16(28504), + 75: uint16(29677), + 76: uint16(30036), + 77: uint16(30242), + 78: uint16(30436), + 79: uint16(30460), + 80: uint16(30928), + 81: uint16(30971), + 82: uint16(31020), + 83: uint16(32070), + 84: uint16(33324), + 85: uint16(34784), + 86: uint16(36820), + 87: uint16(38930), + 88: uint16(39151), + 89: uint16(21187), + 90: uint16(25300), + 91: uint16(25765), + 92: uint16(28196), + 93: uint16(28497), + }, + 58: { + 0: uint16(30332), + 1: uint16(36299), + 2: uint16(37297), + 3: uint16(37474), + 4: uint16(39662), + 5: uint16(39747), + 6: uint16(20515), + 7: uint16(20621), + 8: uint16(22346), + 9: uint16(22952), + 10: uint16(23592), + 11: uint16(24135), + 12: uint16(24439), + 13: uint16(25151), + 14: uint16(25918), + 15: uint16(26041), + 16: uint16(26049), + 17: uint16(26121), + 18: uint16(26507), + 19: uint16(27036), + 20: uint16(28354), + 21: uint16(30917), + 22: uint16(32033), + 23: uint16(32938), + 24: uint16(33152), + 25: uint16(33323), + 26: uint16(33459), + 27: uint16(33953), + 28: uint16(34444), + 29: uint16(35370), + 30: uint16(35607), + 31: uint16(37030), + 32: uint16(38450), + 33: uint16(40848), + 34: uint16(20493), + 35: uint16(20467), + 36: uint16(63843), + 37: uint16(22521), + 38: uint16(24472), + 39: uint16(25308), + 40: uint16(25490), + 41: uint16(26479), + 42: uint16(28227), + 43: uint16(28953), + 44: uint16(30403), + 45: uint16(32972), + 46: uint16(32986), + 47: uint16(35060), + 48: uint16(35061), + 49: uint16(35097), + 50: uint16(36064), + 51: uint16(36649), + 52: uint16(37197), + 53: uint16(38506), + 54: uint16(20271), + 55: uint16(20336), + 56: uint16(24091), + 57: uint16(26575), + 58: uint16(26658), + 59: uint16(30333), + 60: uint16(30334), + 61: uint16(39748), + 62: uint16(24161), + 63: uint16(27146), + 64: uint16(29033), + 65: uint16(29140), + 66: uint16(30058), + 67: uint16(63844), + 68: uint16(32321), + 69: uint16(34115), + 70: uint16(34281), + 71: uint16(39132), + 72: uint16(20240), + 73: uint16(31567), + 74: uint16(32624), + 75: uint16(38309), + 76: uint16(20961), + 77: uint16(24070), + 78: uint16(26805), + 79: uint16(27710), + 80: uint16(27726), + 81: uint16(27867), + 82: uint16(29359), + 83: uint16(31684), + 84: uint16(33539), + 85: uint16(27861), + 86: uint16(29754), + 87: uint16(20731), + 88: uint16(21128), + 89: uint16(22721), + 90: uint16(25816), + 91: uint16(27287), + 92: uint16(29863), + 93: uint16(30294), + }, + 59: { + 0: uint16(30887), + 1: uint16(34327), + 2: uint16(38370), + 3: uint16(38713), + 4: uint16(63845), + 5: uint16(21342), + 6: uint16(24321), + 7: uint16(35722), + 8: uint16(36776), + 9: uint16(36783), + 10: uint16(37002), + 11: uint16(21029), + 12: uint16(30629), + 13: uint16(40009), + 14: uint16(40712), + 15: uint16(19993), + 16: uint16(20482), + 17: uint16(20853), + 18: uint16(23643), + 19: uint16(24183), + 20: uint16(26142), + 21: uint16(26170), + 22: uint16(26564), + 23: uint16(26821), + 24: uint16(28851), + 25: uint16(29953), + 26: uint16(30149), + 27: uint16(31177), + 28: uint16(31453), + 29: uint16(36647), + 30: uint16(39200), + 31: uint16(39432), + 32: uint16(20445), + 33: uint16(22561), + 34: uint16(22577), + 35: uint16(23542), + 36: uint16(26222), + 37: uint16(27493), + 38: uint16(27921), + 39: uint16(28282), + 40: uint16(28541), + 41: uint16(29668), + 42: uint16(29995), + 43: uint16(33769), + 44: uint16(35036), + 45: uint16(35091), + 46: uint16(35676), + 47: uint16(36628), + 48: uint16(20239), + 49: uint16(20693), + 50: uint16(21264), + 51: uint16(21340), + 52: uint16(23443), + 53: uint16(24489), + 54: uint16(26381), + 55: uint16(31119), + 56: uint16(33145), + 57: uint16(33583), + 58: uint16(34068), + 59: uint16(35079), + 60: uint16(35206), + 61: uint16(36665), + 62: uint16(36667), + 63: uint16(39333), + 64: uint16(39954), + 65: uint16(26412), + 66: uint16(20086), + 67: uint16(20472), + 68: uint16(22857), + 69: uint16(23553), + 70: uint16(23791), + 71: uint16(23792), + 72: uint16(25447), + 73: uint16(26834), + 74: uint16(28925), + 75: uint16(29090), + 76: uint16(29739), + 77: uint16(32299), + 78: uint16(34028), + 79: uint16(34562), + 80: uint16(36898), + 81: uint16(37586), + 82: uint16(40179), + 83: uint16(19981), + 84: uint16(20184), + 85: uint16(20463), + 86: uint16(20613), + 87: uint16(21078), + 88: uint16(21103), + 89: uint16(21542), + 90: uint16(21648), + 91: uint16(22496), + 92: uint16(22827), + 93: uint16(23142), + }, + 60: { + 0: uint16(23386), + 1: uint16(23413), + 2: uint16(23500), + 3: uint16(24220), + 4: uint16(63846), + 5: uint16(25206), + 6: uint16(25975), + 7: uint16(26023), + 8: uint16(28014), + 9: uint16(28325), + 10: uint16(29238), + 11: uint16(31526), + 12: uint16(31807), + 13: uint16(32566), + 14: uint16(33104), + 15: uint16(33105), + 16: uint16(33178), + 17: uint16(33344), + 18: uint16(33433), + 19: uint16(33705), + 20: uint16(35331), + 21: uint16(36000), + 22: uint16(36070), + 23: uint16(36091), + 24: uint16(36212), + 25: uint16(36282), + 26: uint16(37096), + 27: uint16(37340), + 28: uint16(38428), + 29: uint16(38468), + 30: uint16(39385), + 31: uint16(40167), + 32: uint16(21271), + 33: uint16(20998), + 34: uint16(21545), + 35: uint16(22132), + 36: uint16(22707), + 37: uint16(22868), + 38: uint16(22894), + 39: uint16(24575), + 40: uint16(24996), + 41: uint16(25198), + 42: uint16(26128), + 43: uint16(27774), + 44: uint16(28954), + 45: uint16(30406), + 46: uint16(31881), + 47: uint16(31966), + 48: uint16(32027), + 49: uint16(33452), + 50: uint16(36033), + 51: uint16(38640), + 52: uint16(63847), + 53: uint16(20315), + 54: uint16(24343), + 55: uint16(24447), + 56: uint16(25282), + 57: uint16(23849), + 58: uint16(26379), + 59: uint16(26842), + 60: uint16(30844), + 61: uint16(32323), + 62: uint16(40300), + 63: uint16(19989), + 64: uint16(20633), + 65: uint16(21269), + 66: uint16(21290), + 67: uint16(21329), + 68: uint16(22915), + 69: uint16(23138), + 70: uint16(24199), + 71: uint16(24754), + 72: uint16(24970), + 73: uint16(25161), + 74: uint16(25209), + 75: uint16(26000), + 76: uint16(26503), + 77: uint16(27047), + 78: uint16(27604), + 79: uint16(27606), + 80: uint16(27607), + 81: uint16(27608), + 82: uint16(27832), + 83: uint16(63848), + 84: uint16(29749), + 85: uint16(30202), + 86: uint16(30738), + 87: uint16(30865), + 88: uint16(31189), + 89: uint16(31192), + 90: uint16(31875), + 91: uint16(32203), + 92: uint16(32737), + 93: uint16(32933), + }, + 61: { + 0: uint16(33086), + 1: uint16(33218), + 2: uint16(33778), + 3: uint16(34586), + 4: uint16(35048), + 5: uint16(35513), + 6: uint16(35692), + 7: uint16(36027), + 8: uint16(37145), + 9: uint16(38750), + 10: uint16(39131), + 11: uint16(40763), + 12: uint16(22188), + 13: uint16(23338), + 14: uint16(24428), + 15: uint16(25996), + 16: uint16(27315), + 17: uint16(27567), + 18: uint16(27996), + 19: uint16(28657), + 20: uint16(28693), + 21: uint16(29277), + 22: uint16(29613), + 23: uint16(36007), + 24: uint16(36051), + 25: uint16(38971), + 26: uint16(24977), + 27: uint16(27703), + 28: uint16(32856), + 29: uint16(39425), + 30: uint16(20045), + 31: uint16(20107), + 32: uint16(20123), + 33: uint16(20181), + 34: uint16(20282), + 35: uint16(20284), + 36: uint16(20351), + 37: uint16(20447), + 38: uint16(20735), + 39: uint16(21490), + 40: uint16(21496), + 41: uint16(21766), + 42: uint16(21987), + 43: uint16(22235), + 44: uint16(22763), + 45: uint16(22882), + 46: uint16(23057), + 47: uint16(23531), + 48: uint16(23546), + 49: uint16(23556), + 50: uint16(24051), + 51: uint16(24107), + 52: uint16(24473), + 53: uint16(24605), + 54: uint16(25448), + 55: uint16(26012), + 56: uint16(26031), + 57: uint16(26614), + 58: uint16(26619), + 59: uint16(26797), + 60: uint16(27515), + 61: uint16(27801), + 62: uint16(27863), + 63: uint16(28195), + 64: uint16(28681), + 65: uint16(29509), + 66: uint16(30722), + 67: uint16(31038), + 68: uint16(31040), + 69: uint16(31072), + 70: uint16(31169), + 71: uint16(31721), + 72: uint16(32023), + 73: uint16(32114), + 74: uint16(32902), + 75: uint16(33293), + 76: uint16(33678), + 77: uint16(34001), + 78: uint16(34503), + 79: uint16(35039), + 80: uint16(35408), + 81: uint16(35422), + 82: uint16(35613), + 83: uint16(36060), + 84: uint16(36198), + 85: uint16(36781), + 86: uint16(37034), + 87: uint16(39164), + 88: uint16(39391), + 89: uint16(40605), + 90: uint16(21066), + 91: uint16(63849), + 92: uint16(26388), + 93: uint16(63850), + }, + 62: { + 0: uint16(20632), + 1: uint16(21034), + 2: uint16(23665), + 3: uint16(25955), + 4: uint16(27733), + 5: uint16(29642), + 6: uint16(29987), + 7: uint16(30109), + 8: uint16(31639), + 9: uint16(33948), + 10: uint16(37240), + 11: uint16(38704), + 12: uint16(20087), + 13: uint16(25746), + 14: uint16(27578), + 15: uint16(29022), + 16: uint16(34217), + 17: uint16(19977), + 18: uint16(63851), + 19: uint16(26441), + 20: uint16(26862), + 21: uint16(28183), + 22: uint16(33439), + 23: uint16(34072), + 24: uint16(34923), + 25: uint16(25591), + 26: uint16(28545), + 27: uint16(37394), + 28: uint16(39087), + 29: uint16(19978), + 30: uint16(20663), + 31: uint16(20687), + 32: uint16(20767), + 33: uint16(21830), + 34: uint16(21930), + 35: uint16(22039), + 36: uint16(23360), + 37: uint16(23577), + 38: uint16(23776), + 39: uint16(24120), + 40: uint16(24202), + 41: uint16(24224), + 42: uint16(24258), + 43: uint16(24819), + 44: uint16(26705), + 45: uint16(27233), + 46: uint16(28248), + 47: uint16(29245), + 48: uint16(29248), + 49: uint16(29376), + 50: uint16(30456), + 51: uint16(31077), + 52: uint16(31665), + 53: uint16(32724), + 54: uint16(35059), + 55: uint16(35316), + 56: uint16(35443), + 57: uint16(35937), + 58: uint16(36062), + 59: uint16(38684), + 60: uint16(22622), + 61: uint16(29885), + 62: uint16(36093), + 63: uint16(21959), + 64: uint16(63852), + 65: uint16(31329), + 66: uint16(32034), + 67: uint16(33394), + 68: uint16(29298), + 69: uint16(29983), + 70: uint16(29989), + 71: uint16(63853), + 72: uint16(31513), + 73: uint16(22661), + 74: uint16(22779), + 75: uint16(23996), + 76: uint16(24207), + 77: uint16(24246), + 78: uint16(24464), + 79: uint16(24661), + 80: uint16(25234), + 81: uint16(25471), + 82: uint16(25933), + 83: uint16(26257), + 84: uint16(26329), + 85: uint16(26360), + 86: uint16(26646), + 87: uint16(26866), + 88: uint16(29312), + 89: uint16(29790), + 90: uint16(31598), + 91: uint16(32110), + 92: uint16(32214), + 93: uint16(32626), + }, + 63: { + 0: uint16(32997), + 1: uint16(33298), + 2: uint16(34223), + 3: uint16(35199), + 4: uint16(35475), + 5: uint16(36893), + 6: uint16(37604), + 7: uint16(40653), + 8: uint16(40736), + 9: uint16(22805), + 10: uint16(22893), + 11: uint16(24109), + 12: uint16(24796), + 13: uint16(26132), + 14: uint16(26227), + 15: uint16(26512), + 16: uint16(27728), + 17: uint16(28101), + 18: uint16(28511), + 19: uint16(30707), + 20: uint16(30889), + 21: uint16(33990), + 22: uint16(37323), + 23: uint16(37675), + 24: uint16(20185), + 25: uint16(20682), + 26: uint16(20808), + 27: uint16(21892), + 28: uint16(23307), + 29: uint16(23459), + 30: uint16(25159), + 31: uint16(25982), + 32: uint16(26059), + 33: uint16(28210), + 34: uint16(29053), + 35: uint16(29697), + 36: uint16(29764), + 37: uint16(29831), + 38: uint16(29887), + 39: uint16(30316), + 40: uint16(31146), + 41: uint16(32218), + 42: uint16(32341), + 43: uint16(32680), + 44: uint16(33146), + 45: uint16(33203), + 46: uint16(33337), + 47: uint16(34330), + 48: uint16(34796), + 49: uint16(35445), + 50: uint16(36323), + 51: uint16(36984), + 52: uint16(37521), + 53: uint16(37925), + 54: uint16(39245), + 55: uint16(39854), + 56: uint16(21352), + 57: uint16(23633), + 58: uint16(26964), + 59: uint16(27844), + 60: uint16(27945), + 61: uint16(28203), + 62: uint16(33292), + 63: uint16(34203), + 64: uint16(35131), + 65: uint16(35373), + 66: uint16(35498), + 67: uint16(38634), + 68: uint16(40807), + 69: uint16(21089), + 70: uint16(26297), + 71: uint16(27570), + 72: uint16(32406), + 73: uint16(34814), + 74: uint16(36109), + 75: uint16(38275), + 76: uint16(38493), + 77: uint16(25885), + 78: uint16(28041), + 79: uint16(29166), + 80: uint16(63854), + 81: uint16(22478), + 82: uint16(22995), + 83: uint16(23468), + 84: uint16(24615), + 85: uint16(24826), + 86: uint16(25104), + 87: uint16(26143), + 88: uint16(26207), + 89: uint16(29481), + 90: uint16(29689), + 91: uint16(30427), + 92: uint16(30465), + 93: uint16(31596), + }, + 64: { + 0: uint16(32854), + 1: uint16(32882), + 2: uint16(33125), + 3: uint16(35488), + 4: uint16(37266), + 5: uint16(19990), + 6: uint16(21218), + 7: uint16(27506), + 8: uint16(27927), + 9: uint16(31237), + 10: uint16(31545), + 11: uint16(32048), + 12: uint16(63855), + 13: uint16(36016), + 14: uint16(21484), + 15: uint16(22063), + 16: uint16(22609), + 17: uint16(23477), + 18: uint16(23567), + 19: uint16(23569), + 20: uint16(24034), + 21: uint16(25152), + 22: uint16(25475), + 23: uint16(25620), + 24: uint16(26157), + 25: uint16(26803), + 26: uint16(27836), + 27: uint16(28040), + 28: uint16(28335), + 29: uint16(28703), + 30: uint16(28836), + 31: uint16(29138), + 32: uint16(29990), + 33: uint16(30095), + 34: uint16(30094), + 35: uint16(30233), + 36: uint16(31505), + 37: uint16(31712), + 38: uint16(31787), + 39: uint16(32032), + 40: uint16(32057), + 41: uint16(34092), + 42: uint16(34157), + 43: uint16(34311), + 44: uint16(35380), + 45: uint16(36877), + 46: uint16(36961), + 47: uint16(37045), + 48: uint16(37559), + 49: uint16(38902), + 50: uint16(39479), + 51: uint16(20439), + 52: uint16(23660), + 53: uint16(26463), + 54: uint16(28049), + 55: uint16(31903), + 56: uint16(32396), + 57: uint16(35606), + 58: uint16(36118), + 59: uint16(36895), + 60: uint16(23403), + 61: uint16(24061), + 62: uint16(25613), + 63: uint16(33984), + 64: uint16(36956), + 65: uint16(39137), + 66: uint16(29575), + 67: uint16(23435), + 68: uint16(24730), + 69: uint16(26494), + 70: uint16(28126), + 71: uint16(35359), + 72: uint16(35494), + 73: uint16(36865), + 74: uint16(38924), + 75: uint16(21047), + 76: uint16(63856), + 77: uint16(28753), + 78: uint16(30862), + 79: uint16(37782), + 80: uint16(34928), + 81: uint16(37335), + 82: uint16(20462), + 83: uint16(21463), + 84: uint16(22013), + 85: uint16(22234), + 86: uint16(22402), + 87: uint16(22781), + 88: uint16(23234), + 89: uint16(23432), + 90: uint16(23723), + 91: uint16(23744), + 92: uint16(24101), + 93: uint16(24833), + }, + 65: { + 0: uint16(25101), + 1: uint16(25163), + 2: uint16(25480), + 3: uint16(25628), + 4: uint16(25910), + 5: uint16(25976), + 6: uint16(27193), + 7: uint16(27530), + 8: uint16(27700), + 9: uint16(27929), + 10: uint16(28465), + 11: uint16(29159), + 12: uint16(29417), + 13: uint16(29560), + 14: uint16(29703), + 15: uint16(29874), + 16: uint16(30246), + 17: uint16(30561), + 18: uint16(31168), + 19: uint16(31319), + 20: uint16(31466), + 21: uint16(31929), + 22: uint16(32143), + 23: uint16(32172), + 24: uint16(32353), + 25: uint16(32670), + 26: uint16(33065), + 27: uint16(33585), + 28: uint16(33936), + 29: uint16(34010), + 30: uint16(34282), + 31: uint16(34966), + 32: uint16(35504), + 33: uint16(35728), + 34: uint16(36664), + 35: uint16(36930), + 36: uint16(36995), + 37: uint16(37228), + 38: uint16(37526), + 39: uint16(37561), + 40: uint16(38539), + 41: uint16(38567), + 42: uint16(38568), + 43: uint16(38614), + 44: uint16(38656), + 45: uint16(38920), + 46: uint16(39318), + 47: uint16(39635), + 48: uint16(39706), + 49: uint16(21460), + 50: uint16(22654), + 51: uint16(22809), + 52: uint16(23408), + 53: uint16(23487), + 54: uint16(28113), + 55: uint16(28506), + 56: uint16(29087), + 57: uint16(29729), + 58: uint16(29881), + 59: uint16(32901), + 60: uint16(33789), + 61: uint16(24033), + 62: uint16(24455), + 63: uint16(24490), + 64: uint16(24642), + 65: uint16(26092), + 66: uint16(26642), + 67: uint16(26991), + 68: uint16(27219), + 69: uint16(27529), + 70: uint16(27957), + 71: uint16(28147), + 72: uint16(29667), + 73: uint16(30462), + 74: uint16(30636), + 75: uint16(31565), + 76: uint16(32020), + 77: uint16(33059), + 78: uint16(33308), + 79: uint16(33600), + 80: uint16(34036), + 81: uint16(34147), + 82: uint16(35426), + 83: uint16(35524), + 84: uint16(37255), + 85: uint16(37662), + 86: uint16(38918), + 87: uint16(39348), + 88: uint16(25100), + 89: uint16(34899), + 90: uint16(36848), + 91: uint16(37477), + 92: uint16(23815), + 93: uint16(23847), + }, + 66: { + 0: uint16(23913), + 1: uint16(29791), + 2: uint16(33181), + 3: uint16(34664), + 4: uint16(28629), + 5: uint16(25342), + 6: uint16(32722), + 7: uint16(35126), + 8: uint16(35186), + 9: uint16(19998), + 10: uint16(20056), + 11: uint16(20711), + 12: uint16(21213), + 13: uint16(21319), + 14: uint16(25215), + 15: uint16(26119), + 16: uint16(32361), + 17: uint16(34821), + 18: uint16(38494), + 19: uint16(20365), + 20: uint16(21273), + 21: uint16(22070), + 22: uint16(22987), + 23: uint16(23204), + 24: uint16(23608), + 25: uint16(23630), + 26: uint16(23629), + 27: uint16(24066), + 28: uint16(24337), + 29: uint16(24643), + 30: uint16(26045), + 31: uint16(26159), + 32: uint16(26178), + 33: uint16(26558), + 34: uint16(26612), + 35: uint16(29468), + 36: uint16(30690), + 37: uint16(31034), + 38: uint16(32709), + 39: uint16(33940), + 40: uint16(33997), + 41: uint16(35222), + 42: uint16(35430), + 43: uint16(35433), + 44: uint16(35553), + 45: uint16(35925), + 46: uint16(35962), + 47: uint16(22516), + 48: uint16(23508), + 49: uint16(24335), + 50: uint16(24687), + 51: uint16(25325), + 52: uint16(26893), + 53: uint16(27542), + 54: uint16(28252), + 55: uint16(29060), + 56: uint16(31698), + 57: uint16(34645), + 58: uint16(35672), + 59: uint16(36606), + 60: uint16(39135), + 61: uint16(39166), + 62: uint16(20280), + 63: uint16(20353), + 64: uint16(20449), + 65: uint16(21627), + 66: uint16(23072), + 67: uint16(23480), + 68: uint16(24892), + 69: uint16(26032), + 70: uint16(26216), + 71: uint16(29180), + 72: uint16(30003), + 73: uint16(31070), + 74: uint16(32051), + 75: uint16(33102), + 76: uint16(33251), + 77: uint16(33688), + 78: uint16(34218), + 79: uint16(34254), + 80: uint16(34563), + 81: uint16(35338), + 82: uint16(36523), + 83: uint16(36763), + 84: uint16(63857), + 85: uint16(36805), + 86: uint16(22833), + 87: uint16(23460), + 88: uint16(23526), + 89: uint16(24713), + 90: uint16(23529), + 91: uint16(23563), + 92: uint16(24515), + 93: uint16(27777), + }, + 67: { + 0: uint16(63858), + 1: uint16(28145), + 2: uint16(28683), + 3: uint16(29978), + 4: uint16(33455), + 5: uint16(35574), + 6: uint16(20160), + 7: uint16(21313), + 8: uint16(63859), + 9: uint16(38617), + 10: uint16(27663), + 11: uint16(20126), + 12: uint16(20420), + 13: uint16(20818), + 14: uint16(21854), + 15: uint16(23077), + 16: uint16(23784), + 17: uint16(25105), + 18: uint16(29273), + 19: uint16(33469), + 20: uint16(33706), + 21: uint16(34558), + 22: uint16(34905), + 23: uint16(35357), + 24: uint16(38463), + 25: uint16(38597), + 26: uint16(39187), + 27: uint16(40201), + 28: uint16(40285), + 29: uint16(22538), + 30: uint16(23731), + 31: uint16(23997), + 32: uint16(24132), + 33: uint16(24801), + 34: uint16(24853), + 35: uint16(25569), + 36: uint16(27138), + 37: uint16(28197), + 38: uint16(37122), + 39: uint16(37716), + 40: uint16(38990), + 41: uint16(39952), + 42: uint16(40823), + 43: uint16(23433), + 44: uint16(23736), + 45: uint16(25353), + 46: uint16(26191), + 47: uint16(26696), + 48: uint16(30524), + 49: uint16(38593), + 50: uint16(38797), + 51: uint16(38996), + 52: uint16(39839), + 53: uint16(26017), + 54: uint16(35585), + 55: uint16(36555), + 56: uint16(38332), + 57: uint16(21813), + 58: uint16(23721), + 59: uint16(24022), + 60: uint16(24245), + 61: uint16(26263), + 62: uint16(30284), + 63: uint16(33780), + 64: uint16(38343), + 65: uint16(22739), + 66: uint16(25276), + 67: uint16(29390), + 68: uint16(40232), + 69: uint16(20208), + 70: uint16(22830), + 71: uint16(24591), + 72: uint16(26171), + 73: uint16(27523), + 74: uint16(31207), + 75: uint16(40230), + 76: uint16(21395), + 77: uint16(21696), + 78: uint16(22467), + 79: uint16(23830), + 80: uint16(24859), + 81: uint16(26326), + 82: uint16(28079), + 83: uint16(30861), + 84: uint16(33406), + 85: uint16(38552), + 86: uint16(38724), + 87: uint16(21380), + 88: uint16(25212), + 89: uint16(25494), + 90: uint16(28082), + 91: uint16(32266), + 92: uint16(33099), + 93: uint16(38989), + }, + 68: { + 0: uint16(27387), + 1: uint16(32588), + 2: uint16(40367), + 3: uint16(40474), + 4: uint16(20063), + 5: uint16(20539), + 6: uint16(20918), + 7: uint16(22812), + 8: uint16(24825), + 9: uint16(25590), + 10: uint16(26928), + 11: uint16(29242), + 12: uint16(32822), + 13: uint16(63860), + 14: uint16(37326), + 15: uint16(24369), + 16: uint16(63861), + 17: uint16(63862), + 18: uint16(32004), + 19: uint16(33509), + 20: uint16(33903), + 21: uint16(33979), + 22: uint16(34277), + 23: uint16(36493), + 24: uint16(63863), + 25: uint16(20335), + 26: uint16(63864), + 27: uint16(63865), + 28: uint16(22756), + 29: uint16(23363), + 30: uint16(24665), + 31: uint16(25562), + 32: uint16(25880), + 33: uint16(25965), + 34: uint16(26264), + 35: uint16(63866), + 36: uint16(26954), + 37: uint16(27171), + 38: uint16(27915), + 39: uint16(28673), + 40: uint16(29036), + 41: uint16(30162), + 42: uint16(30221), + 43: uint16(31155), + 44: uint16(31344), + 45: uint16(63867), + 46: uint16(32650), + 47: uint16(63868), + 48: uint16(35140), + 49: uint16(63869), + 50: uint16(35731), + 51: uint16(37312), + 52: uint16(38525), + 53: uint16(63870), + 54: uint16(39178), + 55: uint16(22276), + 56: uint16(24481), + 57: uint16(26044), + 58: uint16(28417), + 59: uint16(30208), + 60: uint16(31142), + 61: uint16(35486), + 62: uint16(39341), + 63: uint16(39770), + 64: uint16(40812), + 65: uint16(20740), + 66: uint16(25014), + 67: uint16(25233), + 68: uint16(27277), + 69: uint16(33222), + 70: uint16(20547), + 71: uint16(22576), + 72: uint16(24422), + 73: uint16(28937), + 74: uint16(35328), + 75: uint16(35578), + 76: uint16(23420), + 77: uint16(34326), + 78: uint16(20474), + 79: uint16(20796), + 80: uint16(22196), + 81: uint16(22852), + 82: uint16(25513), + 83: uint16(28153), + 84: uint16(23978), + 85: uint16(26989), + 86: uint16(20870), + 87: uint16(20104), + 88: uint16(20313), + 89: uint16(63871), + 90: uint16(63872), + 91: uint16(63873), + 92: uint16(22914), + 93: uint16(63874), + }, + 69: { + 0: uint16(63875), + 1: uint16(27487), + 2: uint16(27741), + 3: uint16(63876), + 4: uint16(29877), + 5: uint16(30998), + 6: uint16(63877), + 7: uint16(33287), + 8: uint16(33349), + 9: uint16(33593), + 10: uint16(36671), + 11: uint16(36701), + 12: uint16(63878), + 13: uint16(39192), + 14: uint16(63879), + 15: uint16(63880), + 16: uint16(63881), + 17: uint16(20134), + 18: uint16(63882), + 19: uint16(22495), + 20: uint16(24441), + 21: uint16(26131), + 22: uint16(63883), + 23: uint16(63884), + 24: uint16(30123), + 25: uint16(32377), + 26: uint16(35695), + 27: uint16(63885), + 28: uint16(36870), + 29: uint16(39515), + 30: uint16(22181), + 31: uint16(22567), + 32: uint16(23032), + 33: uint16(23071), + 34: uint16(23476), + 35: uint16(63886), + 36: uint16(24310), + 37: uint16(63887), + 38: uint16(63888), + 39: uint16(25424), + 40: uint16(25403), + 41: uint16(63889), + 42: uint16(26941), + 43: uint16(27783), + 44: uint16(27839), + 45: uint16(28046), + 46: uint16(28051), + 47: uint16(28149), + 48: uint16(28436), + 49: uint16(63890), + 50: uint16(28895), + 51: uint16(28982), + 52: uint16(29017), + 53: uint16(63891), + 54: uint16(29123), + 55: uint16(29141), + 56: uint16(63892), + 57: uint16(30799), + 58: uint16(30831), + 59: uint16(63893), + 60: uint16(31605), + 61: uint16(32227), + 62: uint16(63894), + 63: uint16(32303), + 64: uint16(63895), + 65: uint16(34893), + 66: uint16(36575), + 67: uint16(63896), + 68: uint16(63897), + 69: uint16(63898), + 70: uint16(37467), + 71: uint16(63899), + 72: uint16(40182), + 73: uint16(63900), + 74: uint16(63901), + 75: uint16(63902), + 76: uint16(24709), + 77: uint16(28037), + 78: uint16(63903), + 79: uint16(29105), + 80: uint16(63904), + 81: uint16(63905), + 82: uint16(38321), + 83: uint16(21421), + 84: uint16(63906), + 85: uint16(63907), + 86: uint16(63908), + 87: uint16(26579), + 88: uint16(63909), + 89: uint16(28814), + 90: uint16(28976), + 91: uint16(29744), + 92: uint16(33398), + 93: uint16(33490), + }, + 70: { + 0: uint16(63910), + 1: uint16(38331), + 2: uint16(39653), + 3: uint16(40573), + 4: uint16(26308), + 5: uint16(63911), + 6: uint16(29121), + 7: uint16(33865), + 8: uint16(63912), + 9: uint16(63913), + 10: uint16(22603), + 11: uint16(63914), + 12: uint16(63915), + 13: uint16(23992), + 14: uint16(24433), + 15: uint16(63916), + 16: uint16(26144), + 17: uint16(26254), + 18: uint16(27001), + 19: uint16(27054), + 20: uint16(27704), + 21: uint16(27891), + 22: uint16(28214), + 23: uint16(28481), + 24: uint16(28634), + 25: uint16(28699), + 26: uint16(28719), + 27: uint16(29008), + 28: uint16(29151), + 29: uint16(29552), + 30: uint16(63917), + 31: uint16(29787), + 32: uint16(63918), + 33: uint16(29908), + 34: uint16(30408), + 35: uint16(31310), + 36: uint16(32403), + 37: uint16(63919), + 38: uint16(63920), + 39: uint16(33521), + 40: uint16(35424), + 41: uint16(36814), + 42: uint16(63921), + 43: uint16(37704), + 44: uint16(63922), + 45: uint16(38681), + 46: uint16(63923), + 47: uint16(63924), + 48: uint16(20034), + 49: uint16(20522), + 50: uint16(63925), + 51: uint16(21000), + 52: uint16(21473), + 53: uint16(26355), + 54: uint16(27757), + 55: uint16(28618), + 56: uint16(29450), + 57: uint16(30591), + 58: uint16(31330), + 59: uint16(33454), + 60: uint16(34269), + 61: uint16(34306), + 62: uint16(63926), + 63: uint16(35028), + 64: uint16(35427), + 65: uint16(35709), + 66: uint16(35947), + 67: uint16(63927), + 68: uint16(37555), + 69: uint16(63928), + 70: uint16(38675), + 71: uint16(38928), + 72: uint16(20116), + 73: uint16(20237), + 74: uint16(20425), + 75: uint16(20658), + 76: uint16(21320), + 77: uint16(21566), + 78: uint16(21555), + 79: uint16(21978), + 80: uint16(22626), + 81: uint16(22714), + 82: uint16(22887), + 83: uint16(23067), + 84: uint16(23524), + 85: uint16(24735), + 86: uint16(63929), + 87: uint16(25034), + 88: uint16(25942), + 89: uint16(26111), + 90: uint16(26212), + 91: uint16(26791), + 92: uint16(27738), + 93: uint16(28595), + }, + 71: { + 0: uint16(28879), + 1: uint16(29100), + 2: uint16(29522), + 3: uint16(31613), + 4: uint16(34568), + 5: uint16(35492), + 6: uint16(39986), + 7: uint16(40711), + 8: uint16(23627), + 9: uint16(27779), + 10: uint16(29508), + 11: uint16(29577), + 12: uint16(37434), + 13: uint16(28331), + 14: uint16(29797), + 15: uint16(30239), + 16: uint16(31337), + 17: uint16(32277), + 18: uint16(34314), + 19: uint16(20800), + 20: uint16(22725), + 21: uint16(25793), + 22: uint16(29934), + 23: uint16(29973), + 24: uint16(30320), + 25: uint16(32705), + 26: uint16(37013), + 27: uint16(38605), + 28: uint16(39252), + 29: uint16(28198), + 30: uint16(29926), + 31: uint16(31401), + 32: uint16(31402), + 33: uint16(33253), + 34: uint16(34521), + 35: uint16(34680), + 36: uint16(35355), + 37: uint16(23113), + 38: uint16(23436), + 39: uint16(23451), + 40: uint16(26785), + 41: uint16(26880), + 42: uint16(28003), + 43: uint16(29609), + 44: uint16(29715), + 45: uint16(29740), + 46: uint16(30871), + 47: uint16(32233), + 48: uint16(32747), + 49: uint16(33048), + 50: uint16(33109), + 51: uint16(33694), + 52: uint16(35916), + 53: uint16(38446), + 54: uint16(38929), + 55: uint16(26352), + 56: uint16(24448), + 57: uint16(26106), + 58: uint16(26505), + 59: uint16(27754), + 60: uint16(29579), + 61: uint16(20525), + 62: uint16(23043), + 63: uint16(27498), + 64: uint16(30702), + 65: uint16(22806), + 66: uint16(23916), + 67: uint16(24013), + 68: uint16(29477), + 69: uint16(30031), + 70: uint16(63930), + 71: uint16(63931), + 72: uint16(20709), + 73: uint16(20985), + 74: uint16(22575), + 75: uint16(22829), + 76: uint16(22934), + 77: uint16(23002), + 78: uint16(23525), + 79: uint16(63932), + 80: uint16(63933), + 81: uint16(23970), + 82: uint16(25303), + 83: uint16(25622), + 84: uint16(25747), + 85: uint16(25854), + 86: uint16(63934), + 87: uint16(26332), + 88: uint16(63935), + 89: uint16(27208), + 90: uint16(63936), + 91: uint16(29183), + 92: uint16(29796), + 93: uint16(63937), + }, + 72: { + 0: uint16(31368), + 1: uint16(31407), + 2: uint16(32327), + 3: uint16(32350), + 4: uint16(32768), + 5: uint16(33136), + 6: uint16(63938), + 7: uint16(34799), + 8: uint16(35201), + 9: uint16(35616), + 10: uint16(36953), + 11: uint16(63939), + 12: uint16(36992), + 13: uint16(39250), + 14: uint16(24958), + 15: uint16(27442), + 16: uint16(28020), + 17: uint16(32287), + 18: uint16(35109), + 19: uint16(36785), + 20: uint16(20433), + 21: uint16(20653), + 22: uint16(20887), + 23: uint16(21191), + 24: uint16(22471), + 25: uint16(22665), + 26: uint16(23481), + 27: uint16(24248), + 28: uint16(24898), + 29: uint16(27029), + 30: uint16(28044), + 31: uint16(28263), + 32: uint16(28342), + 33: uint16(29076), + 34: uint16(29794), + 35: uint16(29992), + 36: uint16(29996), + 37: uint16(32883), + 38: uint16(33592), + 39: uint16(33993), + 40: uint16(36362), + 41: uint16(37780), + 42: uint16(37854), + 43: uint16(63940), + 44: uint16(20110), + 45: uint16(20305), + 46: uint16(20598), + 47: uint16(20778), + 48: uint16(21448), + 49: uint16(21451), + 50: uint16(21491), + 51: uint16(23431), + 52: uint16(23507), + 53: uint16(23588), + 54: uint16(24858), + 55: uint16(24962), + 56: uint16(26100), + 57: uint16(29275), + 58: uint16(29591), + 59: uint16(29760), + 60: uint16(30402), + 61: uint16(31056), + 62: uint16(31121), + 63: uint16(31161), + 64: uint16(32006), + 65: uint16(32701), + 66: uint16(33419), + 67: uint16(34261), + 68: uint16(34398), + 69: uint16(36802), + 70: uint16(36935), + 71: uint16(37109), + 72: uint16(37354), + 73: uint16(38533), + 74: uint16(38632), + 75: uint16(38633), + 76: uint16(21206), + 77: uint16(24423), + 78: uint16(26093), + 79: uint16(26161), + 80: uint16(26671), + 81: uint16(29020), + 82: uint16(31286), + 83: uint16(37057), + 84: uint16(38922), + 85: uint16(20113), + 86: uint16(63941), + 87: uint16(27218), + 88: uint16(27550), + 89: uint16(28560), + 90: uint16(29065), + 91: uint16(32792), + 92: uint16(33464), + 93: uint16(34131), + }, + 73: { + 0: uint16(36939), + 1: uint16(38549), + 2: uint16(38642), + 3: uint16(38907), + 4: uint16(34074), + 5: uint16(39729), + 6: uint16(20112), + 7: uint16(29066), + 8: uint16(38596), + 9: uint16(20803), + 10: uint16(21407), + 11: uint16(21729), + 12: uint16(22291), + 13: uint16(22290), + 14: uint16(22435), + 15: uint16(23195), + 16: uint16(23236), + 17: uint16(23491), + 18: uint16(24616), + 19: uint16(24895), + 20: uint16(25588), + 21: uint16(27781), + 22: uint16(27961), + 23: uint16(28274), + 24: uint16(28304), + 25: uint16(29232), + 26: uint16(29503), + 27: uint16(29783), + 28: uint16(33489), + 29: uint16(34945), + 30: uint16(36677), + 31: uint16(36960), + 32: uint16(63942), + 33: uint16(38498), + 34: uint16(39000), + 35: uint16(40219), + 36: uint16(26376), + 37: uint16(36234), + 38: uint16(37470), + 39: uint16(20301), + 40: uint16(20553), + 41: uint16(20702), + 42: uint16(21361), + 43: uint16(22285), + 44: uint16(22996), + 45: uint16(23041), + 46: uint16(23561), + 47: uint16(24944), + 48: uint16(26256), + 49: uint16(28205), + 50: uint16(29234), + 51: uint16(29771), + 52: uint16(32239), + 53: uint16(32963), + 54: uint16(33806), + 55: uint16(33894), + 56: uint16(34111), + 57: uint16(34655), + 58: uint16(34907), + 59: uint16(35096), + 60: uint16(35586), + 61: uint16(36949), + 62: uint16(38859), + 63: uint16(39759), + 64: uint16(20083), + 65: uint16(20369), + 66: uint16(20754), + 67: uint16(20842), + 68: uint16(63943), + 69: uint16(21807), + 70: uint16(21929), + 71: uint16(23418), + 72: uint16(23461), + 73: uint16(24188), + 74: uint16(24189), + 75: uint16(24254), + 76: uint16(24736), + 77: uint16(24799), + 78: uint16(24840), + 79: uint16(24841), + 80: uint16(25540), + 81: uint16(25912), + 82: uint16(26377), + 83: uint16(63944), + 84: uint16(26580), + 85: uint16(26586), + 86: uint16(63945), + 87: uint16(26977), + 88: uint16(26978), + 89: uint16(27833), + 90: uint16(27943), + 91: uint16(63946), + 92: uint16(28216), + 93: uint16(63947), + }, + 74: { + 0: uint16(28641), + 1: uint16(29494), + 2: uint16(29495), + 3: uint16(63948), + 4: uint16(29788), + 5: uint16(30001), + 6: uint16(63949), + 7: uint16(30290), + 8: uint16(63950), + 9: uint16(63951), + 10: uint16(32173), + 11: uint16(33278), + 12: uint16(33848), + 13: uint16(35029), + 14: uint16(35480), + 15: uint16(35547), + 16: uint16(35565), + 17: uint16(36400), + 18: uint16(36418), + 19: uint16(36938), + 20: uint16(36926), + 21: uint16(36986), + 22: uint16(37193), + 23: uint16(37321), + 24: uint16(37742), + 25: uint16(63952), + 26: uint16(63953), + 27: uint16(22537), + 28: uint16(63954), + 29: uint16(27603), + 30: uint16(32905), + 31: uint16(32946), + 32: uint16(63955), + 33: uint16(63956), + 34: uint16(20801), + 35: uint16(22891), + 36: uint16(23609), + 37: uint16(63957), + 38: uint16(63958), + 39: uint16(28516), + 40: uint16(29607), + 41: uint16(32996), + 42: uint16(36103), + 43: uint16(63959), + 44: uint16(37399), + 45: uint16(38287), + 46: uint16(63960), + 47: uint16(63961), + 48: uint16(63962), + 49: uint16(63963), + 50: uint16(32895), + 51: uint16(25102), + 52: uint16(28700), + 53: uint16(32104), + 54: uint16(34701), + 55: uint16(63964), + 56: uint16(22432), + 57: uint16(24681), + 58: uint16(24903), + 59: uint16(27575), + 60: uint16(35518), + 61: uint16(37504), + 62: uint16(38577), + 63: uint16(20057), + 64: uint16(21535), + 65: uint16(28139), + 66: uint16(34093), + 67: uint16(38512), + 68: uint16(38899), + 69: uint16(39150), + 70: uint16(25558), + 71: uint16(27875), + 72: uint16(37009), + 73: uint16(20957), + 74: uint16(25033), + 75: uint16(33210), + 76: uint16(40441), + 77: uint16(20381), + 78: uint16(20506), + 79: uint16(20736), + 80: uint16(23452), + 81: uint16(24847), + 82: uint16(25087), + 83: uint16(25836), + 84: uint16(26885), + 85: uint16(27589), + 86: uint16(30097), + 87: uint16(30691), + 88: uint16(32681), + 89: uint16(33380), + 90: uint16(34191), + 91: uint16(34811), + 92: uint16(34915), + 93: uint16(35516), + }, + 75: { + 0: uint16(35696), + 1: uint16(37291), + 2: uint16(20108), + 3: uint16(20197), + 4: uint16(20234), + 5: uint16(63965), + 6: uint16(63966), + 7: uint16(22839), + 8: uint16(23016), + 9: uint16(63967), + 10: uint16(24050), + 11: uint16(24347), + 12: uint16(24411), + 13: uint16(24609), + 14: uint16(63968), + 15: uint16(63969), + 16: uint16(63970), + 17: uint16(63971), + 18: uint16(29246), + 19: uint16(29669), + 20: uint16(63972), + 21: uint16(30064), + 22: uint16(30157), + 23: uint16(63973), + 24: uint16(31227), + 25: uint16(63974), + 26: uint16(32780), + 27: uint16(32819), + 28: uint16(32900), + 29: uint16(33505), + 30: uint16(33617), + 31: uint16(63975), + 32: uint16(63976), + 33: uint16(36029), + 34: uint16(36019), + 35: uint16(36999), + 36: uint16(63977), + 37: uint16(63978), + 38: uint16(39156), + 39: uint16(39180), + 40: uint16(63979), + 41: uint16(63980), + 42: uint16(28727), + 43: uint16(30410), + 44: uint16(32714), + 45: uint16(32716), + 46: uint16(32764), + 47: uint16(35610), + 48: uint16(20154), + 49: uint16(20161), + 50: uint16(20995), + 51: uint16(21360), + 52: uint16(63981), + 53: uint16(21693), + 54: uint16(22240), + 55: uint16(23035), + 56: uint16(23493), + 57: uint16(24341), + 58: uint16(24525), + 59: uint16(28270), + 60: uint16(63982), + 61: uint16(63983), + 62: uint16(32106), + 63: uint16(33589), + 64: uint16(63984), + 65: uint16(34451), + 66: uint16(35469), + 67: uint16(63985), + 68: uint16(38765), + 69: uint16(38775), + 70: uint16(63986), + 71: uint16(63987), + 72: uint16(19968), + 73: uint16(20314), + 74: uint16(20350), + 75: uint16(22777), + 76: uint16(26085), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(37808), + 80: uint16(39353), + 81: uint16(20219), + 82: uint16(22764), + 83: uint16(22922), + 84: uint16(23001), + 85: uint16(24641), + 86: uint16(63988), + 87: uint16(63989), + 88: uint16(31252), + 89: uint16(63990), + 90: uint16(33615), + 91: uint16(36035), + 92: uint16(20837), + 93: uint16(21316), + }, + 76: { + 0: uint16(63991), + 1: uint16(63992), + 2: uint16(63993), + 3: uint16(20173), + 4: uint16(21097), + 5: uint16(23381), + 6: uint16(33471), + 7: uint16(20180), + 8: uint16(21050), + 9: uint16(21672), + 10: uint16(22985), + 11: uint16(23039), + 12: uint16(23376), + 13: uint16(23383), + 14: uint16(23388), + 15: uint16(24675), + 16: uint16(24904), + 17: uint16(28363), + 18: uint16(28825), + 19: uint16(29038), + 20: uint16(29574), + 21: uint16(29943), + 22: uint16(30133), + 23: uint16(30913), + 24: uint16(32043), + 25: uint16(32773), + 26: uint16(33258), + 27: uint16(33576), + 28: uint16(34071), + 29: uint16(34249), + 30: uint16(35566), + 31: uint16(36039), + 32: uint16(38604), + 33: uint16(20316), + 34: uint16(21242), + 35: uint16(22204), + 36: uint16(26027), + 37: uint16(26152), + 38: uint16(28796), + 39: uint16(28856), + 40: uint16(29237), + 41: uint16(32189), + 42: uint16(33421), + 43: uint16(37196), + 44: uint16(38592), + 45: uint16(40306), + 46: uint16(23409), + 47: uint16(26855), + 48: uint16(27544), + 49: uint16(28538), + 50: uint16(30430), + 51: uint16(23697), + 52: uint16(26283), + 53: uint16(28507), + 54: uint16(31668), + 55: uint16(31786), + 56: uint16(34870), + 57: uint16(38620), + 58: uint16(19976), + 59: uint16(20183), + 60: uint16(21280), + 61: uint16(22580), + 62: uint16(22715), + 63: uint16(22767), + 64: uint16(22892), + 65: uint16(23559), + 66: uint16(24115), + 67: uint16(24196), + 68: uint16(24373), + 69: uint16(25484), + 70: uint16(26290), + 71: uint16(26454), + 72: uint16(27167), + 73: uint16(27299), + 74: uint16(27404), + 75: uint16(28479), + 76: uint16(29254), + 77: uint16(63994), + 78: uint16(29520), + 79: uint16(29835), + 80: uint16(31456), + 81: uint16(31911), + 82: uint16(33144), + 83: uint16(33247), + 84: uint16(33255), + 85: uint16(33674), + 86: uint16(33900), + 87: uint16(34083), + 88: uint16(34196), + 89: uint16(34255), + 90: uint16(35037), + 91: uint16(36115), + 92: uint16(37292), + 93: uint16(38263), + }, + 77: { + 0: uint16(38556), + 1: uint16(20877), + 2: uint16(21705), + 3: uint16(22312), + 4: uint16(23472), + 5: uint16(25165), + 6: uint16(26448), + 7: uint16(26685), + 8: uint16(26771), + 9: uint16(28221), + 10: uint16(28371), + 11: uint16(28797), + 12: uint16(32289), + 13: uint16(35009), + 14: uint16(36001), + 15: uint16(36617), + 16: uint16(40779), + 17: uint16(40782), + 18: uint16(29229), + 19: uint16(31631), + 20: uint16(35533), + 21: uint16(37658), + 22: uint16(20295), + 23: uint16(20302), + 24: uint16(20786), + 25: uint16(21632), + 26: uint16(22992), + 27: uint16(24213), + 28: uint16(25269), + 29: uint16(26485), + 30: uint16(26990), + 31: uint16(27159), + 32: uint16(27822), + 33: uint16(28186), + 34: uint16(29401), + 35: uint16(29482), + 36: uint16(30141), + 37: uint16(31672), + 38: uint16(32053), + 39: uint16(33511), + 40: uint16(33785), + 41: uint16(33879), + 42: uint16(34295), + 43: uint16(35419), + 44: uint16(36015), + 45: uint16(36487), + 46: uint16(36889), + 47: uint16(37048), + 48: uint16(38606), + 49: uint16(40799), + 50: uint16(21219), + 51: uint16(21514), + 52: uint16(23265), + 53: uint16(23490), + 54: uint16(25688), + 55: uint16(25973), + 56: uint16(28404), + 57: uint16(29380), + 58: uint16(63995), + 59: uint16(30340), + 60: uint16(31309), + 61: uint16(31515), + 62: uint16(31821), + 63: uint16(32318), + 64: uint16(32735), + 65: uint16(33659), + 66: uint16(35627), + 67: uint16(36042), + 68: uint16(36196), + 69: uint16(36321), + 70: uint16(36447), + 71: uint16(36842), + 72: uint16(36857), + 73: uint16(36969), + 74: uint16(37841), + 75: uint16(20291), + 76: uint16(20346), + 77: uint16(20659), + 78: uint16(20840), + 79: uint16(20856), + 80: uint16(21069), + 81: uint16(21098), + 82: uint16(22625), + 83: uint16(22652), + 84: uint16(22880), + 85: uint16(23560), + 86: uint16(23637), + 87: uint16(24283), + 88: uint16(24731), + 89: uint16(25136), + 90: uint16(26643), + 91: uint16(27583), + 92: uint16(27656), + 93: uint16(28593), + }, + 78: { + 0: uint16(29006), + 1: uint16(29728), + 2: uint16(30000), + 3: uint16(30008), + 4: uint16(30033), + 5: uint16(30322), + 6: uint16(31564), + 7: uint16(31627), + 8: uint16(31661), + 9: uint16(31686), + 10: uint16(32399), + 11: uint16(35438), + 12: uint16(36670), + 13: uint16(36681), + 14: uint16(37439), + 15: uint16(37523), + 16: uint16(37666), + 17: uint16(37931), + 18: uint16(38651), + 19: uint16(39002), + 20: uint16(39019), + 21: uint16(39198), + 22: uint16(20999), + 23: uint16(25130), + 24: uint16(25240), + 25: uint16(27993), + 26: uint16(30308), + 27: uint16(31434), + 28: uint16(31680), + 29: uint16(32118), + 30: uint16(21344), + 31: uint16(23742), + 32: uint16(24215), + 33: uint16(28472), + 34: uint16(28857), + 35: uint16(31896), + 36: uint16(38673), + 37: uint16(39822), + 38: uint16(40670), + 39: uint16(25509), + 40: uint16(25722), + 41: uint16(34678), + 42: uint16(19969), + 43: uint16(20117), + 44: uint16(20141), + 45: uint16(20572), + 46: uint16(20597), + 47: uint16(21576), + 48: uint16(22979), + 49: uint16(23450), + 50: uint16(24128), + 51: uint16(24237), + 52: uint16(24311), + 53: uint16(24449), + 54: uint16(24773), + 55: uint16(25402), + 56: uint16(25919), + 57: uint16(25972), + 58: uint16(26060), + 59: uint16(26230), + 60: uint16(26232), + 61: uint16(26622), + 62: uint16(26984), + 63: uint16(27273), + 64: uint16(27491), + 65: uint16(27712), + 66: uint16(28096), + 67: uint16(28136), + 68: uint16(28191), + 69: uint16(28254), + 70: uint16(28702), + 71: uint16(28833), + 72: uint16(29582), + 73: uint16(29693), + 74: uint16(30010), + 75: uint16(30555), + 76: uint16(30855), + 77: uint16(31118), + 78: uint16(31243), + 79: uint16(31357), + 80: uint16(31934), + 81: uint16(32142), + 82: uint16(33351), + 83: uint16(35330), + 84: uint16(35562), + 85: uint16(35998), + 86: uint16(37165), + 87: uint16(37194), + 88: uint16(37336), + 89: uint16(37478), + 90: uint16(37580), + 91: uint16(37664), + 92: uint16(38662), + 93: uint16(38742), + }, + 79: { + 0: uint16(38748), + 1: uint16(38914), + 2: uint16(40718), + 3: uint16(21046), + 4: uint16(21137), + 5: uint16(21884), + 6: uint16(22564), + 7: uint16(24093), + 8: uint16(24351), + 9: uint16(24716), + 10: uint16(25552), + 11: uint16(26799), + 12: uint16(28639), + 13: uint16(31085), + 14: uint16(31532), + 15: uint16(33229), + 16: uint16(34234), + 17: uint16(35069), + 18: uint16(35576), + 19: uint16(36420), + 20: uint16(37261), + 21: uint16(38500), + 22: uint16(38555), + 23: uint16(38717), + 24: uint16(38988), + 25: uint16(40778), + 26: uint16(20430), + 27: uint16(20806), + 28: uint16(20939), + 29: uint16(21161), + 30: uint16(22066), + 31: uint16(24340), + 32: uint16(24427), + 33: uint16(25514), + 34: uint16(25805), + 35: uint16(26089), + 36: uint16(26177), + 37: uint16(26362), + 38: uint16(26361), + 39: uint16(26397), + 40: uint16(26781), + 41: uint16(26839), + 42: uint16(27133), + 43: uint16(28437), + 44: uint16(28526), + 45: uint16(29031), + 46: uint16(29157), + 47: uint16(29226), + 48: uint16(29866), + 49: uint16(30522), + 50: uint16(31062), + 51: uint16(31066), + 52: uint16(31199), + 53: uint16(31264), + 54: uint16(31381), + 55: uint16(31895), + 56: uint16(31967), + 57: uint16(32068), + 58: uint16(32368), + 59: uint16(32903), + 60: uint16(34299), + 61: uint16(34468), + 62: uint16(35412), + 63: uint16(35519), + 64: uint16(36249), + 65: uint16(36481), + 66: uint16(36896), + 67: uint16(36973), + 68: uint16(37347), + 69: uint16(38459), + 70: uint16(38613), + 71: uint16(40165), + 72: uint16(26063), + 73: uint16(31751), + 74: uint16(36275), + 75: uint16(37827), + 76: uint16(23384), + 77: uint16(23562), + 78: uint16(21330), + 79: uint16(25305), + 80: uint16(29469), + 81: uint16(20519), + 82: uint16(23447), + 83: uint16(24478), + 84: uint16(24752), + 85: uint16(24939), + 86: uint16(26837), + 87: uint16(28121), + 88: uint16(29742), + 89: uint16(31278), + 90: uint16(32066), + 91: uint16(32156), + 92: uint16(32305), + 93: uint16(33131), + }, + 80: { + 0: uint16(36394), + 1: uint16(36405), + 2: uint16(37758), + 3: uint16(37912), + 4: uint16(20304), + 5: uint16(22352), + 6: uint16(24038), + 7: uint16(24231), + 8: uint16(25387), + 9: uint16(32618), + 10: uint16(20027), + 11: uint16(20303), + 12: uint16(20367), + 13: uint16(20570), + 14: uint16(23005), + 15: uint16(32964), + 16: uint16(21610), + 17: uint16(21608), + 18: uint16(22014), + 19: uint16(22863), + 20: uint16(23449), + 21: uint16(24030), + 22: uint16(24282), + 23: uint16(26205), + 24: uint16(26417), + 25: uint16(26609), + 26: uint16(26666), + 27: uint16(27880), + 28: uint16(27954), + 29: uint16(28234), + 30: uint16(28557), + 31: uint16(28855), + 32: uint16(29664), + 33: uint16(30087), + 34: uint16(31820), + 35: uint16(32002), + 36: uint16(32044), + 37: uint16(32162), + 38: uint16(33311), + 39: uint16(34523), + 40: uint16(35387), + 41: uint16(35461), + 42: uint16(36208), + 43: uint16(36490), + 44: uint16(36659), + 45: uint16(36913), + 46: uint16(37198), + 47: uint16(37202), + 48: uint16(37956), + 49: uint16(39376), + 50: uint16(31481), + 51: uint16(31909), + 52: uint16(20426), + 53: uint16(20737), + 54: uint16(20934), + 55: uint16(22472), + 56: uint16(23535), + 57: uint16(23803), + 58: uint16(26201), + 59: uint16(27197), + 60: uint16(27994), + 61: uint16(28310), + 62: uint16(28652), + 63: uint16(28940), + 64: uint16(30063), + 65: uint16(31459), + 66: uint16(34850), + 67: uint16(36897), + 68: uint16(36981), + 69: uint16(38603), + 70: uint16(39423), + 71: uint16(33537), + 72: uint16(20013), + 73: uint16(20210), + 74: uint16(34886), + 75: uint16(37325), + 76: uint16(21373), + 77: uint16(27355), + 78: uint16(26987), + 79: uint16(27713), + 80: uint16(33914), + 81: uint16(22686), + 82: uint16(24974), + 83: uint16(26366), + 84: uint16(25327), + 85: uint16(28893), + 86: uint16(29969), + 87: uint16(30151), + 88: uint16(32338), + 89: uint16(33976), + 90: uint16(35657), + 91: uint16(36104), + 92: uint16(20043), + 93: uint16(21482), + }, + 81: { + 0: uint16(21675), + 1: uint16(22320), + 2: uint16(22336), + 3: uint16(24535), + 4: uint16(25345), + 5: uint16(25351), + 6: uint16(25711), + 7: uint16(25903), + 8: uint16(26088), + 9: uint16(26234), + 10: uint16(26525), + 11: uint16(26547), + 12: uint16(27490), + 13: uint16(27744), + 14: uint16(27802), + 15: uint16(28460), + 16: uint16(30693), + 17: uint16(30757), + 18: uint16(31049), + 19: uint16(31063), + 20: uint16(32025), + 21: uint16(32930), + 22: uint16(33026), + 23: uint16(33267), + 24: uint16(33437), + 25: uint16(33463), + 26: uint16(34584), + 27: uint16(35468), + 28: uint16(63996), + 29: uint16(36100), + 30: uint16(36286), + 31: uint16(36978), + 32: uint16(30452), + 33: uint16(31257), + 34: uint16(31287), + 35: uint16(32340), + 36: uint16(32887), + 37: uint16(21767), + 38: uint16(21972), + 39: uint16(22645), + 40: uint16(25391), + 41: uint16(25634), + 42: uint16(26185), + 43: uint16(26187), + 44: uint16(26733), + 45: uint16(27035), + 46: uint16(27524), + 47: uint16(27941), + 48: uint16(28337), + 49: uint16(29645), + 50: uint16(29800), + 51: uint16(29857), + 52: uint16(30043), + 53: uint16(30137), + 54: uint16(30433), + 55: uint16(30494), + 56: uint16(30603), + 57: uint16(31206), + 58: uint16(32265), + 59: uint16(32285), + 60: uint16(33275), + 61: uint16(34095), + 62: uint16(34967), + 63: uint16(35386), + 64: uint16(36049), + 65: uint16(36587), + 66: uint16(36784), + 67: uint16(36914), + 68: uint16(37805), + 69: uint16(38499), + 70: uint16(38515), + 71: uint16(38663), + 72: uint16(20356), + 73: uint16(21489), + 74: uint16(23018), + 75: uint16(23241), + 76: uint16(24089), + 77: uint16(26702), + 78: uint16(29894), + 79: uint16(30142), + 80: uint16(31209), + 81: uint16(31378), + 82: uint16(33187), + 83: uint16(34541), + 84: uint16(36074), + 85: uint16(36300), + 86: uint16(36845), + 87: uint16(26015), + 88: uint16(26389), + 89: uint16(63997), + 90: uint16(22519), + 91: uint16(28503), + 92: uint16(32221), + 93: uint16(36655), + }, + 82: { + 0: uint16(37878), + 1: uint16(38598), + 2: uint16(24501), + 3: uint16(25074), + 4: uint16(28548), + 5: uint16(19988), + 6: uint16(20376), + 7: uint16(20511), + 8: uint16(21449), + 9: uint16(21983), + 10: uint16(23919), + 11: uint16(24046), + 12: uint16(27425), + 13: uint16(27492), + 14: uint16(30923), + 15: uint16(31642), + 16: uint16(63998), + 17: uint16(36425), + 18: uint16(36554), + 19: uint16(36974), + 20: uint16(25417), + 21: uint16(25662), + 22: uint16(30528), + 23: uint16(31364), + 24: uint16(37679), + 25: uint16(38015), + 26: uint16(40810), + 27: uint16(25776), + 28: uint16(28591), + 29: uint16(29158), + 30: uint16(29864), + 31: uint16(29914), + 32: uint16(31428), + 33: uint16(31762), + 34: uint16(32386), + 35: uint16(31922), + 36: uint16(32408), + 37: uint16(35738), + 38: uint16(36106), + 39: uint16(38013), + 40: uint16(39184), + 41: uint16(39244), + 42: uint16(21049), + 43: uint16(23519), + 44: uint16(25830), + 45: uint16(26413), + 46: uint16(32046), + 47: uint16(20717), + 48: uint16(21443), + 49: uint16(22649), + 50: uint16(24920), + 51: uint16(24921), + 52: uint16(25082), + 53: uint16(26028), + 54: uint16(31449), + 55: uint16(35730), + 56: uint16(35734), + 57: uint16(20489), + 58: uint16(20513), + 59: uint16(21109), + 60: uint16(21809), + 61: uint16(23100), + 62: uint16(24288), + 63: uint16(24432), + 64: uint16(24884), + 65: uint16(25950), + 66: uint16(26124), + 67: uint16(26166), + 68: uint16(26274), + 69: uint16(27085), + 70: uint16(28356), + 71: uint16(28466), + 72: uint16(29462), + 73: uint16(30241), + 74: uint16(31379), + 75: uint16(33081), + 76: uint16(33369), + 77: uint16(33750), + 78: uint16(33980), + 79: uint16(20661), + 80: uint16(22512), + 81: uint16(23488), + 82: uint16(23528), + 83: uint16(24425), + 84: uint16(25505), + 85: uint16(30758), + 86: uint16(32181), + 87: uint16(33756), + 88: uint16(34081), + 89: uint16(37319), + 90: uint16(37365), + 91: uint16(20874), + 92: uint16(26613), + 93: uint16(31574), + }, + 83: { + 0: uint16(36012), + 1: uint16(20932), + 2: uint16(22971), + 3: uint16(24765), + 4: uint16(34389), + 5: uint16(20508), + 6: uint16(63999), + 7: uint16(21076), + 8: uint16(23610), + 9: uint16(24957), + 10: uint16(25114), + 11: uint16(25299), + 12: uint16(25842), + 13: uint16(26021), + 14: uint16(28364), + 15: uint16(30240), + 16: uint16(33034), + 17: uint16(36448), + 18: uint16(38495), + 19: uint16(38587), + 20: uint16(20191), + 21: uint16(21315), + 22: uint16(21912), + 23: uint16(22825), + 24: uint16(24029), + 25: uint16(25797), + 26: uint16(27849), + 27: uint16(28154), + 28: uint16(29588), + 29: uint16(31359), + 30: uint16(33307), + 31: uint16(34214), + 32: uint16(36068), + 33: uint16(36368), + 34: uint16(36983), + 35: uint16(37351), + 36: uint16(38369), + 37: uint16(38433), + 38: uint16(38854), + 39: uint16(20984), + 40: uint16(21746), + 41: uint16(21894), + 42: uint16(24505), + 43: uint16(25764), + 44: uint16(28552), + 45: uint16(32180), + 46: uint16(36639), + 47: uint16(36685), + 48: uint16(37941), + 49: uint16(20681), + 50: uint16(23574), + 51: uint16(27838), + 52: uint16(28155), + 53: uint16(29979), + 54: uint16(30651), + 55: uint16(31805), + 56: uint16(31844), + 57: uint16(35449), + 58: uint16(35522), + 59: uint16(22558), + 60: uint16(22974), + 61: uint16(24086), + 62: uint16(25463), + 63: uint16(29266), + 64: uint16(30090), + 65: uint16(30571), + 66: uint16(35548), + 67: uint16(36028), + 68: uint16(36626), + 69: uint16(24307), + 70: uint16(26228), + 71: uint16(28152), + 72: uint16(32893), + 73: uint16(33729), + 74: uint16(35531), + 75: uint16(38737), + 76: uint16(39894), + 77: uint16(64000), + 78: uint16(21059), + 79: uint16(26367), + 80: uint16(28053), + 81: uint16(28399), + 82: uint16(32224), + 83: uint16(35558), + 84: uint16(36910), + 85: uint16(36958), + 86: uint16(39636), + 87: uint16(21021), + 88: uint16(21119), + 89: uint16(21736), + 90: uint16(24980), + 91: uint16(25220), + 92: uint16(25307), + 93: uint16(26786), + }, + 84: { + 0: uint16(26898), + 1: uint16(26970), + 2: uint16(27189), + 3: uint16(28818), + 4: uint16(28966), + 5: uint16(30813), + 6: uint16(30977), + 7: uint16(30990), + 8: uint16(31186), + 9: uint16(31245), + 10: uint16(32918), + 11: uint16(33400), + 12: uint16(33493), + 13: uint16(33609), + 14: uint16(34121), + 15: uint16(35970), + 16: uint16(36229), + 17: uint16(37218), + 18: uint16(37259), + 19: uint16(37294), + 20: uint16(20419), + 21: uint16(22225), + 22: uint16(29165), + 23: uint16(30679), + 24: uint16(34560), + 25: uint16(35320), + 26: uint16(23544), + 27: uint16(24534), + 28: uint16(26449), + 29: uint16(37032), + 30: uint16(21474), + 31: uint16(22618), + 32: uint16(23541), + 33: uint16(24740), + 34: uint16(24961), + 35: uint16(25696), + 36: uint16(32317), + 37: uint16(32880), + 38: uint16(34085), + 39: uint16(37507), + 40: uint16(25774), + 41: uint16(20652), + 42: uint16(23828), + 43: uint16(26368), + 44: uint16(22684), + 45: uint16(25277), + 46: uint16(25512), + 47: uint16(26894), + 48: uint16(27000), + 49: uint16(27166), + 50: uint16(28267), + 51: uint16(30394), + 52: uint16(31179), + 53: uint16(33467), + 54: uint16(33833), + 55: uint16(35535), + 56: uint16(36264), + 57: uint16(36861), + 58: uint16(37138), + 59: uint16(37195), + 60: uint16(37276), + 61: uint16(37648), + 62: uint16(37656), + 63: uint16(37786), + 64: uint16(38619), + 65: uint16(39478), + 66: uint16(39949), + 67: uint16(19985), + 68: uint16(30044), + 69: uint16(31069), + 70: uint16(31482), + 71: uint16(31569), + 72: uint16(31689), + 73: uint16(32302), + 74: uint16(33988), + 75: uint16(36441), + 76: uint16(36468), + 77: uint16(36600), + 78: uint16(36880), + 79: uint16(26149), + 80: uint16(26943), + 81: uint16(29763), + 82: uint16(20986), + 83: uint16(26414), + 84: uint16(40668), + 85: uint16(20805), + 86: uint16(24544), + 87: uint16(27798), + 88: uint16(34802), + 89: uint16(34909), + 90: uint16(34935), + 91: uint16(24756), + 92: uint16(33205), + 93: uint16(33795), + }, + 85: { + 0: uint16(36101), + 1: uint16(21462), + 2: uint16(21561), + 3: uint16(22068), + 4: uint16(23094), + 5: uint16(23601), + 6: uint16(28810), + 7: uint16(32736), + 8: uint16(32858), + 9: uint16(33030), + 10: uint16(33261), + 11: uint16(36259), + 12: uint16(37257), + 13: uint16(39519), + 14: uint16(40434), + 15: uint16(20596), + 16: uint16(20164), + 17: uint16(21408), + 18: uint16(24827), + 19: uint16(28204), + 20: uint16(23652), + 21: uint16(20360), + 22: uint16(20516), + 23: uint16(21988), + 24: uint16(23769), + 25: uint16(24159), + 26: uint16(24677), + 27: uint16(26772), + 28: uint16(27835), + 29: uint16(28100), + 30: uint16(29118), + 31: uint16(30164), + 32: uint16(30196), + 33: uint16(30305), + 34: uint16(31258), + 35: uint16(31305), + 36: uint16(32199), + 37: uint16(32251), + 38: uint16(32622), + 39: uint16(33268), + 40: uint16(34473), + 41: uint16(36636), + 42: uint16(38601), + 43: uint16(39347), + 44: uint16(40786), + 45: uint16(21063), + 46: uint16(21189), + 47: uint16(39149), + 48: uint16(35242), + 49: uint16(19971), + 50: uint16(26578), + 51: uint16(28422), + 52: uint16(20405), + 53: uint16(23522), + 54: uint16(26517), + 55: uint16(27784), + 56: uint16(28024), + 57: uint16(29723), + 58: uint16(30759), + 59: uint16(37341), + 60: uint16(37756), + 61: uint16(34756), + 62: uint16(31204), + 63: uint16(31281), + 64: uint16(24555), + 65: uint16(20182), + 66: uint16(21668), + 67: uint16(21822), + 68: uint16(22702), + 69: uint16(22949), + 70: uint16(24816), + 71: uint16(25171), + 72: uint16(25302), + 73: uint16(26422), + 74: uint16(26965), + 75: uint16(33333), + 76: uint16(38464), + 77: uint16(39345), + 78: uint16(39389), + 79: uint16(20524), + 80: uint16(21331), + 81: uint16(21828), + 82: uint16(22396), + 83: uint16(64001), + 84: uint16(25176), + 85: uint16(64002), + 86: uint16(25826), + 87: uint16(26219), + 88: uint16(26589), + 89: uint16(28609), + 90: uint16(28655), + 91: uint16(29730), + 92: uint16(29752), + 93: uint16(35351), + }, + 86: { + 0: uint16(37944), + 1: uint16(21585), + 2: uint16(22022), + 3: uint16(22374), + 4: uint16(24392), + 5: uint16(24986), + 6: uint16(27470), + 7: uint16(28760), + 8: uint16(28845), + 9: uint16(32187), + 10: uint16(35477), + 11: uint16(22890), + 12: uint16(33067), + 13: uint16(25506), + 14: uint16(30472), + 15: uint16(32829), + 16: uint16(36010), + 17: uint16(22612), + 18: uint16(25645), + 19: uint16(27067), + 20: uint16(23445), + 21: uint16(24081), + 22: uint16(28271), + 23: uint16(64003), + 24: uint16(34153), + 25: uint16(20812), + 26: uint16(21488), + 27: uint16(22826), + 28: uint16(24608), + 29: uint16(24907), + 30: uint16(27526), + 31: uint16(27760), + 32: uint16(27888), + 33: uint16(31518), + 34: uint16(32974), + 35: uint16(33492), + 36: uint16(36294), + 37: uint16(37040), + 38: uint16(39089), + 39: uint16(64004), + 40: uint16(25799), + 41: uint16(28580), + 42: uint16(25745), + 43: uint16(25860), + 44: uint16(20814), + 45: uint16(21520), + 46: uint16(22303), + 47: uint16(35342), + 48: uint16(24927), + 49: uint16(26742), + 50: uint16(64005), + 51: uint16(30171), + 52: uint16(31570), + 53: uint16(32113), + 54: uint16(36890), + 55: uint16(22534), + 56: uint16(27084), + 57: uint16(33151), + 58: uint16(35114), + 59: uint16(36864), + 60: uint16(38969), + 61: uint16(20600), + 62: uint16(22871), + 63: uint16(22956), + 64: uint16(25237), + 65: uint16(36879), + 66: uint16(39722), + 67: uint16(24925), + 68: uint16(29305), + 69: uint16(38358), + 70: uint16(22369), + 71: uint16(23110), + 72: uint16(24052), + 73: uint16(25226), + 74: uint16(25773), + 75: uint16(25850), + 76: uint16(26487), + 77: uint16(27874), + 78: uint16(27966), + 79: uint16(29228), + 80: uint16(29750), + 81: uint16(30772), + 82: uint16(32631), + 83: uint16(33453), + 84: uint16(36315), + 85: uint16(38935), + 86: uint16(21028), + 87: uint16(22338), + 88: uint16(26495), + 89: uint16(29256), + 90: uint16(29923), + 91: uint16(36009), + 92: uint16(36774), + 93: uint16(37393), + }, + 87: { + 0: uint16(38442), + 1: uint16(20843), + 2: uint16(21485), + 3: uint16(25420), + 4: uint16(20329), + 5: uint16(21764), + 6: uint16(24726), + 7: uint16(25943), + 8: uint16(27803), + 9: uint16(28031), + 10: uint16(29260), + 11: uint16(29437), + 12: uint16(31255), + 13: uint16(35207), + 14: uint16(35997), + 15: uint16(24429), + 16: uint16(28558), + 17: uint16(28921), + 18: uint16(33192), + 19: uint16(24846), + 20: uint16(20415), + 21: uint16(20559), + 22: uint16(25153), + 23: uint16(29255), + 24: uint16(31687), + 25: uint16(32232), + 26: uint16(32745), + 27: uint16(36941), + 28: uint16(38829), + 29: uint16(39449), + 30: uint16(36022), + 31: uint16(22378), + 32: uint16(24179), + 33: uint16(26544), + 34: uint16(33805), + 35: uint16(35413), + 36: uint16(21536), + 37: uint16(23318), + 38: uint16(24163), + 39: uint16(24290), + 40: uint16(24330), + 41: uint16(25987), + 42: uint16(32954), + 43: uint16(34109), + 44: uint16(38281), + 45: uint16(38491), + 46: uint16(20296), + 47: uint16(21253), + 48: uint16(21261), + 49: uint16(21263), + 50: uint16(21638), + 51: uint16(21754), + 52: uint16(22275), + 53: uint16(24067), + 54: uint16(24598), + 55: uint16(25243), + 56: uint16(25265), + 57: uint16(25429), + 58: uint16(64006), + 59: uint16(27873), + 60: uint16(28006), + 61: uint16(30129), + 62: uint16(30770), + 63: uint16(32990), + 64: uint16(33071), + 65: uint16(33502), + 66: uint16(33889), + 67: uint16(33970), + 68: uint16(34957), + 69: uint16(35090), + 70: uint16(36875), + 71: uint16(37610), + 72: uint16(39165), + 73: uint16(39825), + 74: uint16(24133), + 75: uint16(26292), + 76: uint16(26333), + 77: uint16(28689), + 78: uint16(29190), + 79: uint16(64007), + 80: uint16(20469), + 81: uint16(21117), + 82: uint16(24426), + 83: uint16(24915), + 84: uint16(26451), + 85: uint16(27161), + 86: uint16(28418), + 87: uint16(29922), + 88: uint16(31080), + 89: uint16(34920), + 90: uint16(35961), + 91: uint16(39111), + 92: uint16(39108), + 93: uint16(39491), + }, + 88: { + 0: uint16(21697), + 1: uint16(31263), + 2: uint16(26963), + 3: uint16(35575), + 4: uint16(35914), + 5: uint16(39080), + 6: uint16(39342), + 7: uint16(24444), + 8: uint16(25259), + 9: uint16(30130), + 10: uint16(30382), + 11: uint16(34987), + 12: uint16(36991), + 13: uint16(38466), + 14: uint16(21305), + 15: uint16(24380), + 16: uint16(24517), + 17: uint16(27852), + 18: uint16(29644), + 19: uint16(30050), + 20: uint16(30091), + 21: uint16(31558), + 22: uint16(33534), + 23: uint16(39325), + 24: uint16(20047), + 25: uint16(36924), + 26: uint16(19979), + 27: uint16(20309), + 28: uint16(21414), + 29: uint16(22799), + 30: uint16(24264), + 31: uint16(26160), + 32: uint16(27827), + 33: uint16(29781), + 34: uint16(33655), + 35: uint16(34662), + 36: uint16(36032), + 37: uint16(36944), + 38: uint16(38686), + 39: uint16(39957), + 40: uint16(22737), + 41: uint16(23416), + 42: uint16(34384), + 43: uint16(35604), + 44: uint16(40372), + 45: uint16(23506), + 46: uint16(24680), + 47: uint16(24717), + 48: uint16(26097), + 49: uint16(27735), + 50: uint16(28450), + 51: uint16(28579), + 52: uint16(28698), + 53: uint16(32597), + 54: uint16(32752), + 55: uint16(38289), + 56: uint16(38290), + 57: uint16(38480), + 58: uint16(38867), + 59: uint16(21106), + 60: uint16(36676), + 61: uint16(20989), + 62: uint16(21547), + 63: uint16(21688), + 64: uint16(21859), + 65: uint16(21898), + 66: uint16(27323), + 67: uint16(28085), + 68: uint16(32216), + 69: uint16(33382), + 70: uint16(37532), + 71: uint16(38519), + 72: uint16(40569), + 73: uint16(21512), + 74: uint16(21704), + 75: uint16(30418), + 76: uint16(34532), + 77: uint16(38308), + 78: uint16(38356), + 79: uint16(38492), + 80: uint16(20130), + 81: uint16(20233), + 82: uint16(23022), + 83: uint16(23270), + 84: uint16(24055), + 85: uint16(24658), + 86: uint16(25239), + 87: uint16(26477), + 88: uint16(26689), + 89: uint16(27782), + 90: uint16(28207), + 91: uint16(32568), + 92: uint16(32923), + 93: uint16(33322), + }, + 89: { + 0: uint16(64008), + 1: uint16(64009), + 2: uint16(38917), + 3: uint16(20133), + 4: uint16(20565), + 5: uint16(21683), + 6: uint16(22419), + 7: uint16(22874), + 8: uint16(23401), + 9: uint16(23475), + 10: uint16(25032), + 11: uint16(26999), + 12: uint16(28023), + 13: uint16(28707), + 14: uint16(34809), + 15: uint16(35299), + 16: uint16(35442), + 17: uint16(35559), + 18: uint16(36994), + 19: uint16(39405), + 20: uint16(39608), + 21: uint16(21182), + 22: uint16(26680), + 23: uint16(20502), + 24: uint16(24184), + 25: uint16(26447), + 26: uint16(33607), + 27: uint16(34892), + 28: uint16(20139), + 29: uint16(21521), + 30: uint16(22190), + 31: uint16(29670), + 32: uint16(37141), + 33: uint16(38911), + 34: uint16(39177), + 35: uint16(39255), + 36: uint16(39321), + 37: uint16(22099), + 38: uint16(22687), + 39: uint16(34395), + 40: uint16(35377), + 41: uint16(25010), + 42: uint16(27382), + 43: uint16(29563), + 44: uint16(36562), + 45: uint16(27463), + 46: uint16(38570), + 47: uint16(39511), + 48: uint16(22869), + 49: uint16(29184), + 50: uint16(36203), + 51: uint16(38761), + 52: uint16(20436), + 53: uint16(23796), + 54: uint16(24358), + 55: uint16(25080), + 56: uint16(26203), + 57: uint16(27883), + 58: uint16(28843), + 59: uint16(29572), + 60: uint16(29625), + 61: uint16(29694), + 62: uint16(30505), + 63: uint16(30541), + 64: uint16(32067), + 65: uint16(32098), + 66: uint16(32291), + 67: uint16(33335), + 68: uint16(34898), + 69: uint16(64010), + 70: uint16(36066), + 71: uint16(37449), + 72: uint16(39023), + 73: uint16(23377), + 74: uint16(31348), + 75: uint16(34880), + 76: uint16(38913), + 77: uint16(23244), + 78: uint16(20448), + 79: uint16(21332), + 80: uint16(22846), + 81: uint16(23805), + 82: uint16(25406), + 83: uint16(28025), + 84: uint16(29433), + 85: uint16(33029), + 86: uint16(33031), + 87: uint16(33698), + 88: uint16(37583), + 89: uint16(38960), + 90: uint16(20136), + 91: uint16(20804), + 92: uint16(21009), + 93: uint16(22411), + }, + 90: { + 0: uint16(24418), + 1: uint16(27842), + 2: uint16(28366), + 3: uint16(28677), + 4: uint16(28752), + 5: uint16(28847), + 6: uint16(29074), + 7: uint16(29673), + 8: uint16(29801), + 9: uint16(33610), + 10: uint16(34722), + 11: uint16(34913), + 12: uint16(36872), + 13: uint16(37026), + 14: uint16(37795), + 15: uint16(39336), + 16: uint16(20846), + 17: uint16(24407), + 18: uint16(24800), + 19: uint16(24935), + 20: uint16(26291), + 21: uint16(34137), + 22: uint16(36426), + 23: uint16(37295), + 24: uint16(38795), + 25: uint16(20046), + 26: uint16(20114), + 27: uint16(21628), + 28: uint16(22741), + 29: uint16(22778), + 30: uint16(22909), + 31: uint16(23733), + 32: uint16(24359), + 33: uint16(25142), + 34: uint16(25160), + 35: uint16(26122), + 36: uint16(26215), + 37: uint16(27627), + 38: uint16(28009), + 39: uint16(28111), + 40: uint16(28246), + 41: uint16(28408), + 42: uint16(28564), + 43: uint16(28640), + 44: uint16(28649), + 45: uint16(28765), + 46: uint16(29392), + 47: uint16(29733), + 48: uint16(29786), + 49: uint16(29920), + 50: uint16(30355), + 51: uint16(31068), + 52: uint16(31946), + 53: uint16(32286), + 54: uint16(32993), + 55: uint16(33446), + 56: uint16(33899), + 57: uint16(33983), + 58: uint16(34382), + 59: uint16(34399), + 60: uint16(34676), + 61: uint16(35703), + 62: uint16(35946), + 63: uint16(37804), + 64: uint16(38912), + 65: uint16(39013), + 66: uint16(24785), + 67: uint16(25110), + 68: uint16(37239), + 69: uint16(23130), + 70: uint16(26127), + 71: uint16(28151), + 72: uint16(28222), + 73: uint16(29759), + 74: uint16(39746), + 75: uint16(24573), + 76: uint16(24794), + 77: uint16(31503), + 78: uint16(21700), + 79: uint16(24344), + 80: uint16(27742), + 81: uint16(27859), + 82: uint16(27946), + 83: uint16(28888), + 84: uint16(32005), + 85: uint16(34425), + 86: uint16(35340), + 87: uint16(40251), + 88: uint16(21270), + 89: uint16(21644), + 90: uint16(23301), + 91: uint16(27194), + 92: uint16(28779), + 93: uint16(30069), + }, + 91: { + 0: uint16(31117), + 1: uint16(31166), + 2: uint16(33457), + 3: uint16(33775), + 4: uint16(35441), + 5: uint16(35649), + 6: uint16(36008), + 7: uint16(38772), + 8: uint16(64011), + 9: uint16(25844), + 10: uint16(25899), + 11: uint16(30906), + 12: uint16(30907), + 13: uint16(31339), + 14: uint16(20024), + 15: uint16(21914), + 16: uint16(22864), + 17: uint16(23462), + 18: uint16(24187), + 19: uint16(24739), + 20: uint16(25563), + 21: uint16(27489), + 22: uint16(26213), + 23: uint16(26707), + 24: uint16(28185), + 25: uint16(29029), + 26: uint16(29872), + 27: uint16(32008), + 28: uint16(36996), + 29: uint16(39529), + 30: uint16(39973), + 31: uint16(27963), + 32: uint16(28369), + 33: uint16(29502), + 34: uint16(35905), + 35: uint16(38346), + 36: uint16(20976), + 37: uint16(24140), + 38: uint16(24488), + 39: uint16(24653), + 40: uint16(24822), + 41: uint16(24880), + 42: uint16(24908), + 43: uint16(26179), + 44: uint16(26180), + 45: uint16(27045), + 46: uint16(27841), + 47: uint16(28255), + 48: uint16(28361), + 49: uint16(28514), + 50: uint16(29004), + 51: uint16(29852), + 52: uint16(30343), + 53: uint16(31681), + 54: uint16(31783), + 55: uint16(33618), + 56: uint16(34647), + 57: uint16(36945), + 58: uint16(38541), + 59: uint16(40643), + 60: uint16(21295), + 61: uint16(22238), + 62: uint16(24315), + 63: uint16(24458), + 64: uint16(24674), + 65: uint16(24724), + 66: uint16(25079), + 67: uint16(26214), + 68: uint16(26371), + 69: uint16(27292), + 70: uint16(28142), + 71: uint16(28590), + 72: uint16(28784), + 73: uint16(29546), + 74: uint16(32362), + 75: uint16(33214), + 76: uint16(33588), + 77: uint16(34516), + 78: uint16(35496), + 79: uint16(36036), + 80: uint16(21123), + 81: uint16(29554), + 82: uint16(23446), + 83: uint16(27243), + 84: uint16(37892), + 85: uint16(21742), + 86: uint16(22150), + 87: uint16(23389), + 88: uint16(25928), + 89: uint16(25989), + 90: uint16(26313), + 91: uint16(26783), + 92: uint16(28045), + 93: uint16(28102), + }, + 92: { + 0: uint16(29243), + 1: uint16(32948), + 2: uint16(37237), + 3: uint16(39501), + 4: uint16(20399), + 5: uint16(20505), + 6: uint16(21402), + 7: uint16(21518), + 8: uint16(21564), + 9: uint16(21897), + 10: uint16(21957), + 11: uint16(24127), + 12: uint16(24460), + 13: uint16(26429), + 14: uint16(29030), + 15: uint16(29661), + 16: uint16(36869), + 17: uint16(21211), + 18: uint16(21235), + 19: uint16(22628), + 20: uint16(22734), + 21: uint16(28932), + 22: uint16(29071), + 23: uint16(29179), + 24: uint16(34224), + 25: uint16(35347), + 26: uint16(26248), + 27: uint16(34216), + 28: uint16(21927), + 29: uint16(26244), + 30: uint16(29002), + 31: uint16(33841), + 32: uint16(21321), + 33: uint16(21913), + 34: uint16(27585), + 35: uint16(24409), + 36: uint16(24509), + 37: uint16(25582), + 38: uint16(26249), + 39: uint16(28999), + 40: uint16(35569), + 41: uint16(36637), + 42: uint16(40638), + 43: uint16(20241), + 44: uint16(25658), + 45: uint16(28875), + 46: uint16(30054), + 47: uint16(34407), + 48: uint16(24676), + 49: uint16(35662), + 50: uint16(40440), + 51: uint16(20807), + 52: uint16(20982), + 53: uint16(21256), + 54: uint16(27958), + 55: uint16(33016), + 56: uint16(40657), + 57: uint16(26133), + 58: uint16(27427), + 59: uint16(28824), + 60: uint16(30165), + 61: uint16(21507), + 62: uint16(23673), + 63: uint16(32007), + 64: uint16(35350), + 65: uint16(27424), + 66: uint16(27453), + 67: uint16(27462), + 68: uint16(21560), + 69: uint16(24688), + 70: uint16(27965), + 71: uint16(32725), + 72: uint16(33288), + 73: uint16(20694), + 74: uint16(20958), + 75: uint16(21916), + 76: uint16(22123), + 77: uint16(22221), + 78: uint16(23020), + 79: uint16(23305), + 80: uint16(24076), + 81: uint16(24985), + 82: uint16(24984), + 83: uint16(25137), + 84: uint16(26206), + 85: uint16(26342), + 86: uint16(29081), + 87: uint16(29113), + 88: uint16(29114), + 89: uint16(29351), + 90: uint16(31143), + 91: uint16(31232), + 92: uint16(32690), + 93: uint16(35440), + }, +} + +var _rev_jis = [6879]uint16{ + 0: uint16(31), + 1: uint16(80), + 2: uint16(81), + 3: uint16(87), + 4: uint16(14), + 5: uint16(299), + 6: uint16(74), + 7: uint16(61), + 8: uint16(12), + 9: uint16(344), + 10: uint16(62), + 11: uint16(63), + 12: uint16(1280), + 13: uint16(1281), + 14: uint16(1282), + 15: uint16(1283), + 16: uint16(1284), + 17: uint16(1285), + 18: uint16(1286), + 19: uint16(1287), + 20: uint16(1288), + 21: uint16(1289), + 22: uint16(1290), + 23: uint16(1291), + 24: uint16(1292), + 25: uint16(1293), + 26: uint16(1294), + 27: uint16(1295), + 28: uint16(1296), + 29: uint16(1297), + 30: uint16(1298), + 31: uint16(1299), + 32: uint16(1300), + 33: uint16(1301), + 34: uint16(1302), + 35: uint16(1303), + 36: uint16(1312), + 37: uint16(1313), + 38: uint16(1314), + 39: uint16(1315), + 40: uint16(1316), + 41: uint16(1317), + 42: uint16(1318), + 43: uint16(1319), + 44: uint16(1320), + 45: uint16(1321), + 46: uint16(1322), + 47: uint16(1323), + 48: uint16(1324), + 49: uint16(1325), + 50: uint16(1326), + 51: uint16(1327), + 52: uint16(1328), + 53: uint16(1329), + 54: uint16(1330), + 55: uint16(1331), + 56: uint16(1332), + 57: uint16(1333), + 58: uint16(1334), + 59: uint16(1335), + 60: uint16(1542), + 61: uint16(1536), + 62: uint16(1537), + 63: uint16(1538), + 64: uint16(1539), + 65: uint16(1540), + 66: uint16(1541), + 67: uint16(1543), + 68: uint16(1544), + 69: uint16(1545), + 70: uint16(1546), + 71: uint16(1547), + 72: uint16(1548), + 73: uint16(1549), + 74: uint16(1550), + 75: uint16(1551), + 76: uint16(1552), + 77: uint16(1553), + 78: uint16(1554), + 79: uint16(1555), + 80: uint16(1556), + 81: uint16(1557), + 82: uint16(1558), + 83: uint16(1559), + 84: uint16(1560), + 85: uint16(1561), + 86: uint16(1562), + 87: uint16(1563), + 88: uint16(1564), + 89: uint16(1565), + 90: uint16(1566), + 91: uint16(1567), + 92: uint16(1568), + 93: uint16(1584), + 94: uint16(1585), + 95: uint16(1586), + 96: uint16(1587), + 97: uint16(1588), + 98: uint16(1589), + 99: uint16(1591), + 100: uint16(1592), + 101: uint16(1593), + 102: uint16(1594), + 103: uint16(1595), + 104: uint16(1596), + 105: uint16(1597), + 106: uint16(1598), + 107: uint16(1599), + 108: uint16(1600), + 109: uint16(1601), + 110: uint16(1602), + 111: uint16(1603), + 112: uint16(1604), + 113: uint16(1605), + 114: uint16(1606), + 115: uint16(1607), + 116: uint16(1608), + 117: uint16(1609), + 118: uint16(1610), + 119: uint16(1611), + 120: uint16(1612), + 121: uint16(1613), + 122: uint16(1614), + 123: uint16(1615), + 124: uint16(1616), + 125: uint16(1590), + 126: uint16(29), + 127: uint16(28), + 128: uint16(33), + 129: uint16(37), + 130: uint16(38), + 131: uint16(39), + 132: uint16(40), + 133: uint16(342), + 134: uint16(343), + 135: uint16(36), + 136: uint16(35), + 137: uint16(338), + 138: uint16(75), + 139: uint16(76), + 140: uint16(263), + 141: uint16(77), + 142: uint16(337), + 143: uint16(266), + 144: uint16(267), + 145: uint16(265), + 146: uint16(268), + 147: uint16(300), + 148: uint16(301), + 149: uint16(302), + 150: uint16(318), + 151: uint16(303), + 152: uint16(319), + 153: uint16(281), + 154: uint16(282), + 155: uint16(60), + 156: uint16(324), + 157: uint16(326), + 158: uint16(70), + 159: uint16(315), + 160: uint16(297), + 161: uint16(298), + 162: uint16(288), + 163: uint16(287), + 164: uint16(328), + 165: uint16(329), + 166: uint16(71), + 167: uint16(327), + 168: uint16(325), + 169: uint16(321), + 170: uint16(65), + 171: uint16(320), + 172: uint16(68), + 173: uint16(69), + 174: uint16(322), + 175: uint16(323), + 176: uint16(285), + 177: uint16(286), + 178: uint16(283), + 179: uint16(284), + 180: uint16(316), + 181: uint16(317), + 182: uint16(1792), + 183: uint16(1803), + 184: uint16(1793), + 185: uint16(1804), + 186: uint16(1794), + 187: uint16(1805), + 188: uint16(1795), + 189: uint16(1806), + 190: uint16(1797), + 191: uint16(1808), + 192: uint16(1796), + 193: uint16(1807), + 194: uint16(1798), + 195: uint16(1819), + 196: uint16(1814), + 197: uint16(1809), + 198: uint16(1800), + 199: uint16(1821), + 200: uint16(1816), + 201: uint16(1811), + 202: uint16(1799), + 203: uint16(1815), + 204: uint16(1820), + 205: uint16(1810), + 206: uint16(1801), + 207: uint16(1817), + 208: uint16(1822), + 209: uint16(1812), + 210: uint16(1802), + 211: uint16(1818), + 212: uint16(1823), + 213: uint16(1813), + 214: uint16(258), + 215: uint16(257), + 216: uint16(260), + 217: uint16(259), + 218: uint16(262), + 219: uint16(261), + 220: uint16(256), + 221: uint16(93), + 222: uint16(90), + 223: uint16(92), + 224: uint16(91), + 225: uint16(349), + 226: uint16(89), + 227: uint16(88), + 228: uint16(73), + 229: uint16(72), + 230: uint16(341), + 231: uint16(340), + 232: uint16(339), + 234: uint16(1), + 235: uint16(2), + 236: uint16(22), + 237: uint16(24), + 238: uint16(25), + 239: uint16(26), + 240: uint16(49), + 241: uint16(50), + 242: uint16(51), + 243: uint16(52), + 244: uint16(53), + 245: uint16(54), + 246: uint16(55), + 247: uint16(56), + 248: uint16(57), + 249: uint16(58), + 250: uint16(264), + 251: uint16(269), + 252: uint16(43), + 253: uint16(44), + 254: uint16(32), + 255: uint16(768), + 256: uint16(769), + 257: uint16(770), + 258: uint16(771), + 259: uint16(772), + 260: uint16(773), + 261: uint16(774), + 262: uint16(775), + 263: uint16(776), + 264: uint16(777), + 265: uint16(778), + 266: uint16(779), + 267: uint16(780), + 268: uint16(781), + 269: uint16(782), + 270: uint16(783), + 271: uint16(784), + 272: uint16(785), + 273: uint16(786), + 274: uint16(787), + 275: uint16(788), + 276: uint16(789), + 277: uint16(790), + 278: uint16(791), + 279: uint16(792), + 280: uint16(793), + 281: uint16(794), + 282: uint16(795), + 283: uint16(796), + 284: uint16(797), + 285: uint16(798), + 286: uint16(799), + 287: uint16(800), + 288: uint16(801), + 289: uint16(802), + 290: uint16(803), + 291: uint16(804), + 292: uint16(805), + 293: uint16(806), + 294: uint16(807), + 295: uint16(808), + 296: uint16(809), + 297: uint16(810), + 298: uint16(811), + 299: uint16(812), + 300: uint16(813), + 301: uint16(814), + 302: uint16(815), + 303: uint16(816), + 304: uint16(817), + 305: uint16(818), + 306: uint16(819), + 307: uint16(820), + 308: uint16(821), + 309: uint16(822), + 310: uint16(823), + 311: uint16(824), + 312: uint16(825), + 313: uint16(826), + 314: uint16(827), + 315: uint16(828), + 316: uint16(829), + 317: uint16(830), + 318: uint16(831), + 319: uint16(832), + 320: uint16(833), + 321: uint16(834), + 322: uint16(835), + 323: uint16(836), + 324: uint16(837), + 325: uint16(838), + 326: uint16(839), + 327: uint16(840), + 328: uint16(841), + 329: uint16(842), + 330: uint16(843), + 331: uint16(844), + 332: uint16(845), + 333: uint16(846), + 334: uint16(847), + 335: uint16(848), + 336: uint16(849), + 337: uint16(850), + 338: uint16(10), + 339: uint16(11), + 340: uint16(20), + 341: uint16(21), + 342: uint16(1024), + 343: uint16(1025), + 344: uint16(1026), + 345: uint16(1027), + 346: uint16(1028), + 347: uint16(1029), + 348: uint16(1030), + 349: uint16(1031), + 350: uint16(1032), + 351: uint16(1033), + 352: uint16(1034), + 353: uint16(1035), + 354: uint16(1036), + 355: uint16(1037), + 356: uint16(1038), + 357: uint16(1039), + 358: uint16(1040), + 359: uint16(1041), + 360: uint16(1042), + 361: uint16(1043), + 362: uint16(1044), + 363: uint16(1045), + 364: uint16(1046), + 365: uint16(1047), + 366: uint16(1048), + 367: uint16(1049), + 368: uint16(1050), + 369: uint16(1051), + 370: uint16(1052), + 371: uint16(1053), + 372: uint16(1054), + 373: uint16(1055), + 374: uint16(1056), + 375: uint16(1057), + 376: uint16(1058), + 377: uint16(1059), + 378: uint16(1060), + 379: uint16(1061), + 380: uint16(1062), + 381: uint16(1063), + 382: uint16(1064), + 383: uint16(1065), + 384: uint16(1066), + 385: uint16(1067), + 386: uint16(1068), + 387: uint16(1069), + 388: uint16(1070), + 389: uint16(1071), + 390: uint16(1072), + 391: uint16(1073), + 392: uint16(1074), + 393: uint16(1075), + 394: uint16(1076), + 395: uint16(1077), + 396: uint16(1078), + 397: uint16(1079), + 398: uint16(1080), + 399: uint16(1081), + 400: uint16(1082), + 401: uint16(1083), + 402: uint16(1084), + 403: uint16(1085), + 404: uint16(1086), + 405: uint16(1087), + 406: uint16(1088), + 407: uint16(1089), + 408: uint16(1090), + 409: uint16(1091), + 410: uint16(1092), + 411: uint16(1093), + 412: uint16(1094), + 413: uint16(1095), + 414: uint16(1096), + 415: uint16(1097), + 416: uint16(1098), + 417: uint16(1099), + 418: uint16(1100), + 419: uint16(1101), + 420: uint16(1102), + 421: uint16(1103), + 422: uint16(1104), + 423: uint16(1105), + 424: uint16(1106), + 425: uint16(1107), + 426: uint16(1108), + 427: uint16(1109), + 428: uint16(5), + 429: uint16(27), + 430: uint16(18), + 431: uint16(19), + 432: uint16(3915), + 433: uint16(8793), + 434: uint16(6934), + 435: uint16(10843), + 436: uint16(7493), + 437: uint16(6671), + 438: uint16(7492), + 439: uint16(4379), + 440: uint16(10291), + 441: uint16(11294), + 442: uint16(12033), + 443: uint16(4110), + 444: uint16(4685), + 445: uint16(12034), + 446: uint16(7939), + 447: uint16(12577), + 448: uint16(5173), + 449: uint16(10521), + 450: uint16(7494), + 451: uint16(11549), + 452: uint16(10529), + 453: uint16(12035), + 454: uint16(8773), + 455: uint16(12036), + 456: uint16(5465), + 457: uint16(12037), + 458: uint16(4924), + 459: uint16(8719), + 460: uint16(6982), + 461: uint16(12038), + 462: uint16(12039), + 463: uint16(12040), + 464: uint16(9748), + 465: uint16(5174), + 466: uint16(9750), + 467: uint16(9538), + 468: uint16(5922), + 469: uint16(10770), + 470: uint16(18472), + 471: uint16(12041), + 472: uint16(7495), + 473: uint16(12042), + 474: uint16(4372), + 475: uint16(5444), + 476: uint16(5967), + 477: uint16(11080), + 478: uint16(13573), + 479: uint16(11343), + 480: uint16(9564), + 481: uint16(4868), + 482: uint16(5140), + 483: uint16(12043), + 484: uint16(12044), + 485: uint16(11546), + 486: uint16(11292), + 487: uint16(8263), + 488: uint16(12046), + 489: uint16(6741), + 490: uint16(9554), + 491: uint16(12049), + 492: uint16(4125), + 493: uint16(5950), + 494: uint16(5949), + 495: uint16(3909), + 496: uint16(11818), + 497: uint16(11817), + 498: uint16(6418), + 499: uint16(3840), + 500: uint16(12050), + 501: uint16(12051), + 502: uint16(12052), + 503: uint16(10771), + 504: uint16(12053), + 505: uint16(5969), + 506: uint16(3910), + 507: uint16(10833), + 508: uint16(5211), + 509: uint16(5212), + 510: uint16(5213), + 511: uint16(9025), + 512: uint16(11547), + 513: uint16(12054), + 514: uint16(12055), + 515: uint16(12056), + 516: uint16(7724), + 517: uint16(7193), + 518: uint16(7725), + 519: uint16(12061), + 520: uint16(12059), + 521: uint16(12060), + 522: uint16(5175), + 523: uint16(6402), + 524: uint16(4431), + 525: uint16(12058), + 526: uint16(12057), + 527: uint16(10504), + 528: uint16(6693), + 529: uint16(6692), + 530: uint16(8477), + 531: uint16(12062), + 532: uint16(10292), + 533: uint16(8006), + 534: uint16(23), + 535: uint16(12063), + 536: uint16(12065), + 537: uint16(8516), + 538: uint16(11584), + 539: uint16(3881), + 540: uint16(12064), + 541: uint16(4381), + 542: uint16(5411), + 543: uint16(8774), + 544: uint16(5710), + 545: uint16(12066), + 546: uint16(9731), + 547: uint16(4938), + 548: uint16(12067), + 549: uint16(3882), + 550: uint16(5951), + 551: uint16(4939), + 552: uint16(10329), + 553: uint16(10001), + 554: uint16(5176), + 555: uint16(4432), + 556: uint16(12102), + 557: uint16(9248), + 558: uint16(9803), + 559: uint16(12069), + 560: uint16(10011), + 561: uint16(11585), + 562: uint16(7692), + 563: uint16(6694), + 564: uint16(6742), + 565: uint16(4383), + 566: uint16(9008), + 567: uint16(8705), + 568: uint16(12073), + 569: uint16(3883), + 570: uint16(9026), + 571: uint16(7194), + 572: uint16(6419), + 573: uint16(11267), + 574: uint16(8493), + 575: uint16(4382), + 576: uint16(12072), + 577: uint16(11293), + 578: uint16(12068), + 579: uint16(12070), + 580: uint16(6477), + 581: uint16(12071), + 582: uint16(13315), + 583: uint16(12079), + 584: uint16(12082), + 585: uint16(12080), + 586: uint16(4385), + 587: uint16(10522), + 588: uint16(12074), + 589: uint16(12078), + 590: uint16(5970), + 591: uint16(6695), + 592: uint16(4869), + 593: uint16(12083), + 594: uint16(12075), + 595: uint16(11586), + 596: uint16(6743), + 597: uint16(12076), + 598: uint16(12081), + 599: uint16(12084), + 600: uint16(12077), + 601: uint16(5376), + 602: uint16(3884), + 603: uint16(5377), + 604: uint16(4384), + 605: uint16(13316), + 606: uint16(10840), + 607: uint16(10317), + 608: uint16(5971), + 609: uint16(7694), + 610: uint16(11542), + 611: uint16(10551), + 612: uint16(5655), + 613: uint16(8452), + 614: uint16(4419), + 615: uint16(7218), + 616: uint16(12088), + 617: uint16(12093), + 618: uint16(12091), + 619: uint16(12086), + 620: uint16(8462), + 621: uint16(12089), + 622: uint16(12092), + 623: uint16(12090), + 624: uint16(10556), + 625: uint16(12087), + 626: uint16(7693), + 627: uint16(10834), + 628: uint16(12094), + 629: uint16(12095), + 630: uint16(7171), + 631: uint16(12108), + 632: uint16(9775), + 633: uint16(10261), + 634: uint16(12103), + 635: uint16(10575), + 636: uint16(4373), + 637: uint16(12107), + 638: uint16(12101), + 639: uint16(12110), + 640: uint16(8241), + 641: uint16(5923), + 642: uint16(9787), + 643: uint16(16166), + 644: uint16(12109), + 645: uint16(9276), + 646: uint16(12098), + 647: uint16(5973), + 648: uint16(5972), + 649: uint16(12096), + 650: uint16(6969), + 651: uint16(12104), + 652: uint16(10574), + 653: uint16(8748), + 654: uint16(12100), + 655: uint16(5712), + 656: uint16(12097), + 657: uint16(12105), + 658: uint16(12099), + 659: uint16(11568), + 660: uint16(12106), + 661: uint16(11808), + 662: uint16(5445), + 663: uint16(5711), + 664: uint16(12111), + 665: uint16(12112), + 666: uint16(12116), + 667: uint16(3885), + 668: uint16(10543), + 669: uint16(12115), + 670: uint16(12114), + 671: uint16(12118), + 672: uint16(12117), + 673: uint16(9027), + 674: uint16(5713), + 675: uint16(12119), + 676: uint16(6948), + 677: uint16(8453), + 678: uint16(9028), + 679: uint16(5461), + 680: uint16(12120), + 681: uint16(5141), + 682: uint16(12121), + 683: uint16(12123), + 684: uint16(10772), + 685: uint16(5701), + 686: uint16(6672), + 687: uint16(10070), + 688: uint16(12122), + 689: uint16(6436), + 690: uint16(11298), + 691: uint16(12125), + 692: uint16(12290), + 693: uint16(12124), + 694: uint16(6435), + 695: uint16(7260), + 696: uint16(5656), + 697: uint16(12291), + 698: uint16(5422), + 699: uint16(12288), + 700: uint16(12289), + 701: uint16(9486), + 702: uint16(8283), + 703: uint16(5378), + 704: uint16(10796), + 705: uint16(12292), + 706: uint16(11548), + 707: uint16(12293), + 708: uint16(12296), + 709: uint16(12294), + 710: uint16(8237), + 711: uint16(12295), + 712: uint16(12297), + 713: uint16(12299), + 714: uint16(12298), + 715: uint16(10535), + 716: uint16(5142), + 717: uint16(12301), + 718: uint16(12302), + 719: uint16(4366), + 720: uint16(12300), + 721: uint16(6995), + 722: uint16(12305), + 723: uint16(12304), + 724: uint16(12303), + 725: uint16(12085), + 726: uint16(12306), + 727: uint16(7261), + 728: uint16(12307), + 729: uint16(11268), + 730: uint16(11064), + 731: uint16(12309), + 732: uint16(12308), + 733: uint16(12311), + 734: uint16(12310), + 735: uint16(12312), + 736: uint16(12313), + 737: uint16(3923), + 738: uint16(5908), + 739: uint16(5658), + 740: uint16(7195), + 741: uint16(8794), + 742: uint16(5379), + 743: uint16(8007), + 744: uint16(5974), + 745: uint16(6221), + 746: uint16(12315), + 747: uint16(11047), + 748: uint16(9253), + 749: uint16(6744), + 750: uint16(12314), + 751: uint16(12316), + 752: uint16(9277), + 753: uint16(4692), + 754: uint16(12317), + 755: uint16(9565), + 756: uint16(8211), + 757: uint16(12319), + 758: uint16(12320), + 759: uint16(9995), + 760: uint16(5975), + 761: uint16(11802), + 762: uint16(12321), + 763: uint16(5381), + 764: uint16(10523), + 765: uint16(8469), + 766: uint16(5456), + 767: uint16(9236), + 768: uint16(5714), + 769: uint16(12322), + 770: uint16(12323), + 771: uint16(9537), + 772: uint16(4158), + 773: uint16(12326), + 774: uint16(6492), + 775: uint16(12325), + 776: uint16(6437), + 777: uint16(12327), + 778: uint16(17741), + 779: uint16(12328), + 780: uint16(10784), + 781: uint16(12329), + 782: uint16(12330), + 783: uint16(12331), + 784: uint16(7496), + 785: uint16(6955), + 786: uint16(4870), + 787: uint16(12334), + 788: uint16(12332), + 789: uint16(11036), + 790: uint16(12333), + 791: uint16(10297), + 792: uint16(12335), + 793: uint16(12336), + 794: uint16(12337), + 795: uint16(9278), + 796: uint16(12341), + 797: uint16(12339), + 798: uint16(12340), + 799: uint16(12338), + 800: uint16(6466), + 801: uint16(12342), + 802: uint16(11081), + 803: uint16(11587), + 804: uint16(12343), + 805: uint16(7943), + 806: uint16(12344), + 807: uint16(7225), + 808: uint16(12345), + 809: uint16(8795), + 810: uint16(11550), + 811: uint16(9279), + 812: uint16(12580), + 813: uint16(12346), + 814: uint16(21252), + 815: uint16(5412), + 816: uint16(12347), + 817: uint16(10813), + 818: uint16(7239), + 819: uint16(8539), + 820: uint16(12349), + 821: uint16(9539), + 822: uint16(12350), + 823: uint16(12351), + 824: uint16(4621), + 825: uint16(12352), + 826: uint16(5382), + 827: uint16(9515), + 828: uint16(4185), + 829: uint16(7215), + 830: uint16(9984), + 831: uint16(12353), + 832: uint16(9280), + 833: uint16(7726), + 834: uint16(12354), + 835: uint16(10507), + 836: uint16(7993), + 837: uint16(4865), + 838: uint16(4872), + 839: uint16(12355), + 840: uint16(12357), + 841: uint16(5657), + 842: uint16(12356), + 843: uint16(11602), + 844: uint16(7240), + 845: uint16(10012), + 846: uint16(10539), + 847: uint16(12358), + 848: uint16(11351), + 849: uint16(12359), + 850: uint16(12360), + 851: uint16(9309), + 852: uint16(12361), + 853: uint16(7944), + 854: uint16(6493), + 855: uint16(5715), + 856: uint16(12362), + 857: uint16(6696), + 858: uint16(6222), + 859: uint16(9029), + 860: uint16(12364), + 861: uint16(8454), + 862: uint16(6478), + 863: uint16(12365), + 864: uint16(12366), + 865: uint16(8207), + 866: uint16(12363), + 867: uint16(12368), + 868: uint16(10773), + 869: uint16(6211), + 870: uint16(12367), + 871: uint16(5716), + 872: uint16(6461), + 873: uint16(9804), + 874: uint16(12371), + 875: uint16(12369), + 876: uint16(10330), + 877: uint16(7497), + 878: uint16(12378), + 879: uint16(4675), + 880: uint16(12372), + 881: uint16(12370), + 882: uint16(8238), + 883: uint16(12374), + 884: uint16(12373), + 885: uint16(4643), + 886: uint16(5695), + 887: uint16(12379), + 888: uint16(11532), + 889: uint16(12375), + 890: uint16(12380), + 891: uint16(12377), + 892: uint16(12376), + 893: uint16(11566), + 894: uint16(5976), + 895: uint16(4386), + 896: uint16(11603), + 897: uint16(7252), + 898: uint16(9271), + 899: uint16(6212), + 900: uint16(12545), + 901: uint16(12546), + 902: uint16(11588), + 903: uint16(11786), + 904: uint16(12548), + 905: uint16(5977), + 906: uint16(12547), + 907: uint16(4622), + 908: uint16(12549), + 909: uint16(10805), + 910: uint16(8987), + 911: uint16(11269), + 912: uint16(10552), + 913: uint16(12550), + 914: uint16(20276), + 915: uint16(9487), + 916: uint16(12551), + 917: uint16(4873), + 918: uint16(11026), + 919: uint16(7424), + 920: uint16(12552), + 921: uint16(10566), + 922: uint16(12556), + 923: uint16(7945), + 924: uint16(12553), + 925: uint16(5423), + 926: uint16(12554), + 927: uint16(4874), + 928: uint16(5645), + 929: uint16(12557), + 930: uint16(12558), + 931: uint16(12559), + 932: uint16(12560), + 933: uint16(6970), + 934: uint16(5978), + 935: uint16(11069), + 936: uint16(11079), + 937: uint16(9558), + 938: uint16(10576), + 939: uint16(12561), + 940: uint16(12562), + 941: uint16(12564), + 942: uint16(12566), + 943: uint16(12565), + 944: uint16(12567), + 945: uint16(4380), + 946: uint16(10795), + 947: uint16(6491), + 948: uint16(12568), + 949: uint16(8248), + 950: uint16(7425), + 951: uint16(5384), + 952: uint16(12569), + 953: uint16(10042), + 954: uint16(12570), + 955: uint16(12571), + 956: uint16(12572), + 957: uint16(12573), + 958: uint16(10243), + 959: uint16(5447), + 960: uint16(3908), + 961: uint16(9502), + 962: uint16(12574), + 963: uint16(7196), + 964: uint16(8008), + 965: uint16(12576), + 966: uint16(12575), + 967: uint16(7426), + 968: uint16(5952), + 969: uint16(12578), + 970: uint16(10013), + 971: uint16(12579), + 972: uint16(10043), + 973: uint16(8467), + 974: uint16(8525), + 975: uint16(5383), + 976: uint16(9549), + 977: uint16(8720), + 978: uint16(9805), + 979: uint16(10797), + 980: uint16(12581), + 981: uint16(8009), + 982: uint16(5652), + 983: uint16(12582), + 984: uint16(12583), + 985: uint16(4107), + 986: uint16(3924), + 987: uint16(4940), + 988: uint16(8455), + 989: uint16(5168), + 990: uint16(11344), + 991: uint16(12586), + 992: uint16(4374), + 993: uint16(12585), + 994: uint16(5385), + 995: uint16(12587), + 996: uint16(11088), + 997: uint16(12588), + 998: uint16(11569), + 999: uint16(5979), + 1000: uint16(5909), + 1001: uint16(12589), + 1002: uint16(12591), + 1003: uint16(12590), + 1004: uint16(7742), + 1005: uint16(4120), + 1006: uint16(4157), + 1007: uint16(12592), + 1008: uint16(12593), + 1009: uint16(5910), + 1010: uint16(12594), + 1011: uint16(5197), + 1012: uint16(6673), + 1013: uint16(12595), + 1014: uint16(10835), + 1015: uint16(6420), + 1016: uint16(5177), + 1017: uint16(11270), + 1018: uint16(8239), + 1019: uint16(10014), + 1020: uint16(7004), + 1021: uint16(7206), + 1022: uint16(6983), + 1023: uint16(6996), + 1024: uint16(7253), + 1025: uint16(10015), + 1026: uint16(12598), + 1027: uint16(4130), + 1028: uint16(8240), + 1029: uint16(5980), + 1030: uint16(5924), + 1031: uint16(5446), + 1032: uint16(12602), + 1033: uint16(8704), + 1034: uint16(8541), + 1035: uint16(5386), + 1036: uint16(7427), + 1037: uint16(12603), + 1038: uint16(12601), + 1039: uint16(4387), + 1040: uint16(8517), + 1041: uint16(6935), + 1042: uint16(6698), + 1043: uint16(4101), + 1044: uint16(4687), + 1045: uint16(6213), + 1046: uint16(6697), + 1047: uint16(12604), + 1048: uint16(12605), + 1049: uint16(5160), + 1050: uint16(4645), + 1051: uint16(6214), + 1052: uint16(5159), + 1053: uint16(9022), + 1054: uint16(4100), + 1055: uint16(9488), + 1056: uint16(11037), + 1057: uint16(6144), + 1058: uint16(11352), + 1059: uint16(9254), + 1060: uint16(5981), + 1061: uint16(5646), + 1062: uint16(12614), + 1063: uint16(5442), + 1064: uint16(10793), + 1065: uint16(10044), + 1066: uint16(12613), + 1067: uint16(4925), + 1068: uint16(12608), + 1069: uint16(12609), + 1070: uint16(12611), + 1071: uint16(12612), + 1072: uint16(5178), + 1073: uint16(7744), + 1074: uint16(10508), + 1075: uint16(12610), + 1076: uint16(12606), + 1077: uint16(5954), + 1078: uint16(12607), + 1079: uint16(11779), + 1080: uint16(10577), + 1081: uint16(9031), + 1082: uint16(5953), + 1083: uint16(6223), + 1084: uint16(12615), + 1085: uint16(9532), + 1086: uint16(12619), + 1087: uint16(7005), + 1088: uint16(6997), + 1089: uint16(12622), + 1090: uint16(12620), + 1091: uint16(11010), + 1092: uint16(12617), + 1093: uint16(12626), + 1094: uint16(12621), + 1095: uint16(12624), + 1096: uint16(5925), + 1097: uint16(11038), + 1098: uint16(12625), + 1099: uint16(12627), + 1100: uint16(12629), + 1101: uint16(6479), + 1102: uint16(11809), + 1103: uint16(12618), + 1104: uint16(12616), + 1105: uint16(12628), + 1106: uint16(12623), + 1107: uint16(12631), + 1108: uint16(12802), + 1109: uint16(12633), + 1110: uint16(12637), + 1111: uint16(12800), + 1112: uint16(12634), + 1113: uint16(12829), + 1114: uint16(6472), + 1115: uint16(4624), + 1116: uint16(12632), + 1117: uint16(12804), + 1118: uint16(3925), + 1119: uint16(12803), + 1120: uint16(3844), + 1121: uint16(10281), + 1122: uint16(12801), + 1123: uint16(12635), + 1124: uint16(12630), + 1125: uint16(12636), + 1126: uint16(6439), + 1127: uint16(12805), + 1128: uint16(3926), + 1129: uint16(12814), + 1130: uint16(12806), + 1131: uint16(12807), + 1132: uint16(7428), + 1133: uint16(10824), + 1134: uint16(12812), + 1135: uint16(12811), + 1136: uint16(9230), + 1137: uint16(12813), + 1138: uint16(12810), + 1139: uint16(4115), + 1140: uint16(6421), + 1141: uint16(7695), + 1142: uint16(12808), + 1143: uint16(9281), + 1144: uint16(12809), + 1145: uint16(3841), + 1146: uint16(12819), + 1147: uint16(11266), + 1148: uint16(7430), + 1149: uint16(12825), + 1150: uint16(12824), + 1151: uint16(12815), + 1152: uint16(8482), + 1153: uint16(12816), + 1154: uint16(8526), + 1155: uint16(12821), + 1156: uint16(7429), + 1157: uint16(12818), + 1158: uint16(11075), + 1159: uint16(5659), + 1160: uint16(12822), + 1161: uint16(12823), + 1162: uint16(12820), + 1163: uint16(12826), + 1164: uint16(12817), + 1165: uint16(12832), + 1166: uint16(12837), + 1167: uint16(12833), + 1168: uint16(12828), + 1169: uint16(12838), + 1170: uint16(8208), + 1171: uint16(12840), + 1172: uint16(6145), + 1173: uint16(12830), + 1174: uint16(8796), + 1175: uint16(12834), + 1176: uint16(12827), + 1177: uint16(4876), + 1178: uint16(4941), + 1179: uint16(4676), + 1180: uint16(12835), + 1181: uint16(12831), + 1182: uint16(5717), + 1183: uint16(12841), + 1184: uint16(12839), + 1185: uint16(8242), + 1186: uint16(5161), + 1187: uint16(5387), + 1188: uint16(12836), + 1189: uint16(5459), + 1190: uint16(4131), + 1191: uint16(12845), + 1192: uint16(12843), + 1193: uint16(13062), + 1194: uint16(12848), + 1195: uint16(12842), + 1196: uint16(12846), + 1197: uint16(12844), + 1198: uint16(6699), + 1199: uint16(12847), + 1200: uint16(12850), + 1201: uint16(12855), + 1202: uint16(12853), + 1203: uint16(12852), + 1204: uint16(8721), + 1205: uint16(4388), + 1206: uint16(12849), + 1207: uint16(12851), + 1208: uint16(7431), + 1209: uint16(4114), + 1210: uint16(12854), + 1211: uint16(4413), + 1212: uint16(12865), + 1213: uint16(7515), + 1214: uint16(12861), + 1215: uint16(12859), + 1216: uint16(12860), + 1217: uint16(12862), + 1218: uint16(4124), + 1219: uint16(8216), + 1220: uint16(12856), + 1221: uint16(12857), + 1222: uint16(4697), + 1223: uint16(12864), + 1224: uint16(4942), + 1225: uint16(12867), + 1226: uint16(12863), + 1227: uint16(12866), + 1228: uint16(10509), + 1229: uint16(9524), + 1230: uint16(10007), + 1231: uint16(12869), + 1232: uint16(12868), + 1233: uint16(4644), + 1234: uint16(12870), + 1235: uint16(12873), + 1236: uint16(12872), + 1237: uint16(12871), + 1238: uint16(9752), + 1239: uint16(12874), + 1240: uint16(12875), + 1241: uint16(12877), + 1242: uint16(12876), + 1243: uint16(12879), + 1244: uint16(12882), + 1245: uint16(12880), + 1246: uint16(12878), + 1247: uint16(12881), + 1248: uint16(12883), + 1249: uint16(12884), + 1250: uint16(12885), + 1251: uint16(12886), + 1252: uint16(12887), + 1253: uint16(12324), + 1254: uint16(7003), + 1255: uint16(6700), + 1256: uint16(4434), + 1257: uint16(3927), + 1258: uint16(8739), + 1259: uint16(12888), + 1260: uint16(6403), + 1261: uint16(3886), + 1262: uint16(7741), + 1263: uint16(12889), + 1264: uint16(5926), + 1265: uint16(6224), + 1266: uint16(12891), + 1267: uint16(12890), + 1268: uint16(10559), + 1269: uint16(12892), + 1270: uint16(13056), + 1271: uint16(12893), + 1272: uint16(13057), + 1273: uint16(13058), + 1274: uint16(5718), + 1275: uint16(4159), + 1276: uint16(13059), + 1277: uint16(13061), + 1278: uint16(13060), + 1279: uint16(13063), + 1280: uint16(9273), + 1281: uint16(13064), + 1282: uint16(3860), + 1283: uint16(6462), + 1284: uint16(5660), + 1285: uint16(8750), + 1286: uint16(13065), + 1287: uint16(13066), + 1288: uint16(13068), + 1289: uint16(13069), + 1290: uint16(6467), + 1291: uint16(5424), + 1292: uint16(10774), + 1293: uint16(13067), + 1294: uint16(13070), + 1295: uint16(6432), + 1296: uint16(6146), + 1297: uint16(13074), + 1298: uint16(6404), + 1299: uint16(8722), + 1300: uint16(13071), + 1301: uint16(9017), + 1302: uint16(13075), + 1303: uint16(7745), + 1304: uint16(13073), + 1305: uint16(13076), + 1306: uint16(5662), + 1307: uint16(13077), + 1308: uint16(13078), + 1309: uint16(6147), + 1310: uint16(4639), + 1311: uint16(13080), + 1312: uint16(13081), + 1313: uint16(13082), + 1314: uint16(13079), + 1315: uint16(13072), + 1316: uint16(13083), + 1317: uint16(13084), + 1318: uint16(10819), + 1319: uint16(7498), + 1320: uint16(13086), + 1321: uint16(13087), + 1322: uint16(13085), + 1323: uint16(13089), + 1324: uint16(9751), + 1325: uint16(3911), + 1326: uint16(10293), + 1327: uint16(13090), + 1328: uint16(7516), + 1329: uint16(6936), + 1330: uint16(9788), + 1331: uint16(4943), + 1332: uint16(6474), + 1333: uint16(10808), + 1334: uint16(9489), + 1335: uint16(5719), + 1336: uint16(8494), + 1337: uint16(13088), + 1338: uint16(13091), + 1339: uint16(8483), + 1340: uint16(13092), + 1341: uint16(13093), + 1342: uint16(13095), + 1343: uint16(9032), + 1344: uint16(4877), + 1345: uint16(21248), + 1346: uint16(4160), + 1347: uint16(10578), + 1348: uint16(7499), + 1349: uint16(9255), + 1350: uint16(6469), + 1351: uint16(13101), + 1352: uint16(10524), + 1353: uint16(11580), + 1354: uint16(4435), + 1355: uint16(13097), + 1356: uint16(8217), + 1357: uint16(13100), + 1358: uint16(9282), + 1359: uint16(9256), + 1360: uint16(9283), + 1361: uint16(10008), + 1362: uint16(9004), + 1363: uint16(6440), + 1364: uint16(13096), + 1365: uint16(4181), + 1366: uint16(9237), + 1367: uint16(13098), + 1368: uint16(13094), + 1369: uint16(7727), + 1370: uint16(13102), + 1371: uint16(7213), + 1372: uint16(5388), + 1373: uint16(13103), + 1374: uint16(10567), + 1375: uint16(8284), + 1376: uint16(8997), + 1377: uint16(13105), + 1378: uint16(10798), + 1379: uint16(13106), + 1380: uint16(13111), + 1381: uint16(10510), + 1382: uint16(13110), + 1383: uint16(13104), + 1384: uint16(13107), + 1385: uint16(13109), + 1386: uint16(6405), + 1387: uint16(10536), + 1388: uint16(13112), + 1389: uint16(8740), + 1390: uint16(4436), + 1391: uint16(7500), + 1392: uint16(13114), + 1393: uint16(13113), + 1394: uint16(6215), + 1395: uint16(13115), + 1396: uint16(13117), + 1397: uint16(13116), + 1398: uint16(13119), + 1399: uint16(13108), + 1400: uint16(13121), + 1401: uint16(13120), + 1402: uint16(13118), + 1403: uint16(6701), + 1404: uint16(7728), + 1405: uint16(8243), + 1406: uint16(13122), + 1407: uint16(7963), + 1408: uint16(3916), + 1409: uint16(9795), + 1410: uint16(9018), + 1411: uint16(13124), + 1412: uint16(13123), + 1413: uint16(13125), + 1414: uint16(13126), + 1415: uint16(13127), + 1416: uint16(13128), + 1417: uint16(10544), + 1418: uint16(13129), + 1419: uint16(4389), + 1420: uint16(13130), + 1421: uint16(11291), + 1422: uint16(4623), + 1423: uint16(12584), + 1424: uint16(7207), + 1425: uint16(8478), + 1426: uint16(13131), + 1427: uint16(11082), + 1428: uint16(11027), + 1429: uint16(13133), + 1430: uint16(8518), + 1431: uint16(9238), + 1432: uint16(8479), + 1433: uint16(10294), + 1434: uint16(13134), + 1435: uint16(13135), + 1436: uint16(4186), + 1437: uint16(6937), + 1438: uint16(13136), + 1439: uint16(3887), + 1440: uint16(13137), + 1441: uint16(13138), + 1442: uint16(4161), + 1443: uint16(4944), + 1444: uint16(9535), + 1445: uint16(10579), + 1446: uint16(13142), + 1447: uint16(8244), + 1448: uint16(13141), + 1449: uint16(5663), + 1450: uint16(10810), + 1451: uint16(13140), + 1452: uint16(9284), + 1453: uint16(13144), + 1454: uint16(13143), + 1455: uint16(13146), + 1456: uint16(13145), + 1457: uint16(4187), + 1458: uint16(13147), + 1459: uint16(7432), + 1460: uint16(13149), + 1461: uint16(8708), + 1462: uint16(13148), + 1463: uint16(10514), + 1464: uint16(7254), + 1465: uint16(9274), + 1466: uint16(13312), + 1467: uint16(6148), + 1468: uint16(13313), + 1469: uint16(9728), + 1470: uint16(10045), + 1471: uint16(11056), + 1472: uint16(9732), + 1473: uint16(13322), + 1474: uint16(5143), + 1475: uint16(11300), + 1476: uint16(11022), + 1477: uint16(13579), + 1478: uint16(13314), + 1479: uint16(13317), + 1480: uint16(8484), + 1481: uint16(10775), + 1482: uint16(9257), + 1483: uint16(13318), + 1484: uint16(10820), + 1485: uint16(6441), + 1486: uint16(7433), + 1487: uint16(13319), + 1488: uint16(6703), + 1489: uint16(6702), + 1490: uint16(3864), + 1491: uint16(5927), + 1492: uint16(7946), + 1493: uint16(3888), + 1494: uint16(13323), + 1495: uint16(13324), + 1496: uint16(13321), + 1497: uint16(4119), + 1498: uint16(4878), + 1499: uint16(13320), + 1500: uint16(11044), + 1501: uint16(10256), + 1502: uint16(3847), + 1503: uint16(3928), + 1504: uint16(6704), + 1505: uint16(3889), + 1506: uint16(3842), + 1507: uint16(13329), + 1508: uint16(13327), + 1509: uint16(11035), + 1510: uint16(13330), + 1511: uint16(13328), + 1512: uint16(13326), + 1513: uint16(7696), + 1514: uint16(13325), + 1515: uint16(10553), + 1516: uint16(5955), + 1517: uint16(13334), + 1518: uint16(13335), + 1519: uint16(7434), + 1520: uint16(13331), + 1521: uint16(11787), + 1522: uint16(9771), + 1523: uint16(13333), + 1524: uint16(6406), + 1525: uint16(13336), + 1526: uint16(10295), + 1527: uint16(13337), + 1528: uint16(13332), + 1529: uint16(11034), + 1530: uint16(9789), + 1531: uint16(13338), + 1532: uint16(10257), + 1533: uint16(13339), + 1534: uint16(13343), + 1535: uint16(13340), + 1536: uint16(4390), + 1537: uint16(13342), + 1538: uint16(6938), + 1539: uint16(13341), + 1540: uint16(5720), + 1541: uint16(13355), + 1542: uint16(13348), + 1543: uint16(13345), + 1544: uint16(8771), + 1545: uint16(13344), + 1546: uint16(13346), + 1547: uint16(13347), + 1548: uint16(13349), + 1549: uint16(13350), + 1550: uint16(4945), + 1551: uint16(13352), + 1552: uint16(13351), + 1553: uint16(13353), + 1554: uint16(7501), + 1555: uint16(13356), + 1556: uint16(9019), + 1557: uint16(4132), + 1558: uint16(13354), + 1559: uint16(13357), + 1560: uint16(13358), + 1561: uint16(13361), + 1562: uint16(13359), + 1563: uint16(13360), + 1564: uint16(6705), + 1565: uint16(13362), + 1566: uint16(6149), + 1567: uint16(13363), + 1568: uint16(6745), + 1569: uint16(8471), + 1570: uint16(13364), + 1571: uint16(13365), + 1572: uint16(6713), + 1573: uint16(6150), + 1574: uint16(11057), + 1575: uint16(5127), + 1576: uint16(5928), + 1577: uint16(13366), + 1578: uint16(4663), + 1579: uint16(13367), + 1580: uint16(8472), + 1581: uint16(13368), + 1582: uint16(13570), + 1583: uint16(13369), + 1584: uint16(13370), + 1585: uint16(13371), + 1586: uint16(13373), + 1587: uint16(13374), + 1588: uint16(13375), + 1589: uint16(8527), + 1590: uint16(4102), + 1591: uint16(6984), + 1592: uint16(3873), + 1593: uint16(8246), + 1594: uint16(4879), + 1595: uint16(6932), + 1596: uint16(6151), + 1597: uint16(9285), + 1598: uint16(7168), + 1599: uint16(4880), + 1600: uint16(8775), + 1601: uint16(9033), + 1602: uint16(3863), + 1603: uint16(5144), + 1604: uint16(10580), + 1605: uint16(6945), + 1606: uint16(5169), + 1607: uint16(8010), + 1608: uint16(6939), + 1609: uint16(11271), + 1610: uint16(13376), + 1611: uint16(5179), + 1612: uint16(6442), + 1613: uint16(4625), + 1614: uint16(4162), + 1615: uint16(7435), + 1616: uint16(4391), + 1617: uint16(13377), + 1618: uint16(11301), + 1619: uint16(7208), + 1620: uint16(6979), + 1621: uint16(13378), + 1622: uint16(4946), + 1623: uint16(9521), + 1624: uint16(11016), + 1625: uint16(13379), + 1626: uint16(13380), + 1627: uint16(10296), + 1628: uint16(13382), + 1629: uint16(4871), + 1630: uint16(5462), + 1631: uint16(13381), + 1632: uint16(4881), + 1633: uint16(7697), + 1634: uint16(13386), + 1635: uint16(6656), + 1636: uint16(4392), + 1637: uint16(13385), + 1638: uint16(13383), + 1639: uint16(13387), + 1640: uint16(13384), + 1641: uint16(9738), + 1642: uint16(15148), + 1643: uint16(7698), + 1644: uint16(13388), + 1645: uint16(11551), + 1646: uint16(13389), + 1647: uint16(13391), + 1648: uint16(8797), + 1649: uint16(13390), + 1650: uint16(7938), + 1651: uint16(6746), + 1652: uint16(8495), + 1653: uint16(6998), + 1654: uint16(10324), + 1655: uint16(8011), + 1656: uint16(6956), + 1657: uint16(13392), + 1658: uint16(7436), + 1659: uint16(13393), + 1660: uint16(13394), + 1661: uint16(3890), + 1662: uint16(8473), + 1663: uint16(7729), + 1664: uint16(13395), + 1665: uint16(9490), + 1666: uint16(7437), + 1667: uint16(7438), + 1668: uint16(13396), + 1669: uint16(8012), + 1670: uint16(7439), + 1671: uint16(13397), + 1672: uint16(13398), + 1673: uint16(11071), + 1674: uint16(13399), + 1675: uint16(5413), + 1676: uint16(7169), + 1677: uint16(13400), + 1678: uint16(13401), + 1679: uint16(6971), + 1680: uint16(7691), + 1681: uint16(9555), + 1682: uint16(7731), + 1683: uint16(10071), + 1684: uint16(9729), + 1685: uint16(5416), + 1686: uint16(13402), + 1687: uint16(5198), + 1688: uint16(13403), + 1689: uint16(5469), + 1690: uint16(9518), + 1691: uint16(4367), + 1692: uint16(6706), + 1693: uint16(13404), + 1694: uint16(13569), + 1695: uint16(13568), + 1696: uint16(5468), + 1697: uint16(13405), + 1698: uint16(9239), + 1699: uint16(8463), + 1700: uint16(9258), + 1701: uint16(6951), + 1702: uint16(8247), + 1703: uint16(11353), + 1704: uint16(13571), + 1705: uint16(13572), + 1706: uint16(9525), + 1707: uint16(6674), + 1708: uint16(13574), + 1709: uint16(13575), + 1710: uint16(13576), + 1711: uint16(4947), + 1712: uint16(13577), + 1713: uint16(13578), + 1714: uint16(4363), + 1715: uint16(8218), + 1716: uint16(4931), + 1717: uint16(13580), + 1718: uint16(11015), + 1719: uint16(8497), + 1720: uint16(4664), + 1721: uint16(13582), + 1722: uint16(13584), + 1723: uint16(4926), + 1724: uint16(13581), + 1725: uint16(13583), + 1726: uint16(13586), + 1727: uint16(13585), + 1728: uint16(13587), + 1729: uint16(13588), + 1730: uint16(9500), + 1731: uint16(5389), + 1732: uint16(4420), + 1733: uint16(13589), + 1734: uint16(13594), + 1735: uint16(13592), + 1736: uint16(10582), + 1737: uint16(10581), + 1738: uint16(9286), + 1739: uint16(13591), + 1740: uint16(7219), + 1741: uint16(13590), + 1742: uint16(7761), + 1743: uint16(13595), + 1744: uint16(6473), + 1745: uint16(13601), + 1746: uint16(13602), + 1747: uint16(13596), + 1748: uint16(4626), + 1749: uint16(13597), + 1750: uint16(13606), + 1751: uint16(13605), + 1752: uint16(13604), + 1753: uint16(13600), + 1754: uint16(13599), + 1755: uint16(13603), + 1756: uint16(10583), + 1757: uint16(13610), + 1758: uint16(13607), + 1759: uint16(13609), + 1760: uint16(11345), + 1761: uint16(13608), + 1762: uint16(13598), + 1763: uint16(7762), + 1764: uint16(13611), + 1765: uint16(6422), + 1766: uint16(13612), + 1767: uint16(13613), + 1768: uint16(13616), + 1769: uint16(13615), + 1770: uint16(13614), + 1771: uint16(9287), + 1772: uint16(13593), + 1773: uint16(13622), + 1774: uint16(13618), + 1775: uint16(13617), + 1776: uint16(13619), + 1777: uint16(13620), + 1778: uint16(13623), + 1779: uint16(11589), + 1780: uint16(13624), + 1781: uint16(13621), + 1782: uint16(13625), + 1783: uint16(4927), + 1784: uint16(13626), + 1785: uint16(13628), + 1786: uint16(13627), + 1787: uint16(13629), + 1788: uint16(13630), + 1789: uint16(8013), + 1790: uint16(7170), + 1791: uint16(7235), + 1792: uint16(8258), + 1793: uint16(6152), + 1794: uint16(6423), + 1795: uint16(6153), + 1796: uint16(5199), + 1797: uint16(13631), + 1798: uint16(6424), + 1799: uint16(5929), + 1800: uint16(13632), + 1801: uint16(11013), + 1802: uint16(9762), + 1803: uint16(13633), + 1804: uint16(6154), + 1805: uint16(4875), + 1806: uint16(8710), + 1807: uint16(5425), + 1808: uint16(6707), + 1809: uint16(10298), + 1810: uint16(10016), + 1811: uint16(13634), + 1812: uint16(4948), + 1813: uint16(13637), + 1814: uint16(8960), + 1815: uint16(13636), + 1816: uint16(13635), + 1817: uint16(13638), + 1818: uint16(9034), + 1819: uint16(7746), + 1820: uint16(6708), + 1821: uint16(7977), + 1822: uint16(8498), + 1823: uint16(5121), + 1824: uint16(8961), + 1825: uint16(13639), + 1826: uint16(13640), + 1827: uint16(7502), + 1828: uint16(10776), + 1829: uint16(13643), + 1830: uint16(13642), + 1831: uint16(13641), + 1832: uint16(10332), + 1833: uint16(13650), + 1834: uint16(10809), + 1835: uint16(13644), + 1836: uint16(13646), + 1837: uint16(10826), + 1838: uint16(13645), + 1839: uint16(13647), + 1840: uint16(9991), + 1841: uint16(13648), + 1842: uint16(10525), + 1843: uint16(13649), + 1844: uint16(4882), + 1845: uint16(10526), + 1846: uint16(9742), + 1847: uint16(13651), + 1848: uint16(13652), + 1849: uint16(6155), + 1850: uint16(4883), + 1851: uint16(13653), + 1852: uint16(5911), + 1853: uint16(11299), + 1854: uint16(11272), + 1855: uint16(4949), + 1856: uint16(13655), + 1857: uint16(8962), + 1858: uint16(6156), + 1859: uint16(7440), + 1860: uint16(10046), + 1861: uint16(7441), + 1862: uint16(7255), + 1863: uint16(9035), + 1864: uint16(10584), + 1865: uint16(9240), + 1866: uint16(6157), + 1867: uint16(10299), + 1868: uint16(13656), + 1869: uint16(9272), + 1870: uint16(6433), + 1871: uint16(5930), + 1872: uint16(9036), + 1873: uint16(3874), + 1874: uint16(7245), + 1875: uint16(6158), + 1876: uint16(11302), + 1877: uint16(13657), + 1878: uint16(13658), + 1879: uint16(9776), + 1880: uint16(13659), + 1881: uint16(11606), + 1882: uint16(11788), + 1883: uint16(13661), + 1884: uint16(13660), + 1885: uint16(4646), + 1886: uint16(13824), + 1887: uint16(13827), + 1888: uint16(13828), + 1889: uint16(13826), + 1890: uint16(10271), + 1891: uint16(7442), + 1892: uint16(13830), + 1893: uint16(13829), + 1894: uint16(13825), + 1895: uint16(13831), + 1896: uint16(13832), + 1897: uint16(13833), + 1898: uint16(13836), + 1899: uint16(13834), + 1900: uint16(13835), + 1901: uint16(13837), + 1902: uint16(4163), + 1903: uint16(9037), + 1904: uint16(13838), + 1905: uint16(5721), + 1906: uint16(4437), + 1907: uint16(9749), + 1908: uint16(13839), + 1909: uint16(9562), + 1910: uint16(10554), + 1911: uint16(13840), + 1912: uint16(11789), + 1913: uint16(13841), + 1914: uint16(10527), + 1915: uint16(13844), + 1916: uint16(12032), + 1917: uint16(12048), + 1918: uint16(6927), + 1919: uint16(9556), + 1920: uint16(13845), + 1921: uint16(5180), + 1922: uint16(8963), + 1923: uint16(3929), + 1924: uint16(13846), + 1925: uint16(10501), + 1926: uint16(6159), + 1927: uint16(8751), + 1928: uint16(9038), + 1929: uint16(11086), + 1930: uint16(5912), + 1931: uint16(5931), + 1932: uint16(13847), + 1933: uint16(13848), + 1934: uint16(13854), + 1935: uint16(6980), + 1936: uint16(8964), + 1937: uint16(5390), + 1938: uint16(13849), + 1939: uint16(10250), + 1940: uint16(8741), + 1941: uint16(13850), + 1942: uint16(13851), + 1943: uint16(5391), + 1944: uint16(13852), + 1945: uint16(13853), + 1946: uint16(13855), + 1947: uint16(9301), + 1948: uint16(13856), + 1949: uint16(13857), + 1950: uint16(13858), + 1951: uint16(13843), + 1952: uint16(13842), + 1953: uint16(13859), + 1954: uint16(5664), + 1955: uint16(10246), + 1956: uint16(6443), + 1957: uint16(10262), + 1958: uint16(8965), + 1959: uint16(10282), + 1960: uint16(13860), + 1961: uint16(7443), + 1962: uint16(4133), + 1963: uint16(13861), + 1964: uint16(13862), + 1965: uint16(11089), + 1966: uint16(10047), + 1967: uint16(13865), + 1968: uint16(4188), + 1969: uint16(7947), + 1970: uint16(13864), + 1971: uint16(13863), + 1972: uint16(5665), + 1973: uint16(8499), + 1974: uint16(13869), + 1975: uint16(13867), + 1976: uint16(13866), + 1977: uint16(11526), + 1978: uint16(5956), + 1979: uint16(7256), + 1980: uint16(13868), + 1981: uint16(9259), + 1982: uint16(7197), + 1983: uint16(9503), + 1984: uint16(13872), + 1985: uint16(13871), + 1986: uint16(13870), + 1987: uint16(13873), + 1988: uint16(5957), + 1989: uint16(13874), + 1990: uint16(10331), + 1991: uint16(7226), + 1992: uint16(13875), + 1993: uint16(10072), + 1994: uint16(9504), + 1995: uint16(8966), + 1996: uint16(9231), + 1997: uint16(13876), + 1998: uint16(5130), + 1999: uint16(7699), + 2000: uint16(10251), + 2001: uint16(4950), + 2002: uint16(9733), + 2003: uint16(13877), + 2004: uint16(6709), + 2005: uint16(10777), + 2006: uint16(10778), + 2007: uint16(4189), + 2008: uint16(13882), + 2009: uint16(8776), + 2010: uint16(13879), + 2011: uint16(4438), + 2012: uint16(14092), + 2013: uint16(13881), + 2014: uint16(9743), + 2015: uint16(13880), + 2016: uint16(13878), + 2017: uint16(6233), + 2018: uint16(13884), + 2019: uint16(13890), + 2020: uint16(13896), + 2021: uint16(13888), + 2022: uint16(9275), + 2023: uint16(13893), + 2024: uint16(10300), + 2025: uint16(13887), + 2026: uint16(13892), + 2027: uint16(11590), + 2028: uint16(6710), + 2029: uint16(8500), + 2030: uint16(13885), + 2031: uint16(5181), + 2032: uint16(13895), + 2033: uint16(7948), + 2034: uint16(4164), + 2035: uint16(13889), + 2036: uint16(4439), + 2037: uint16(13894), + 2038: uint16(5392), + 2039: uint16(13891), + 2040: uint16(13897), + 2041: uint16(13899), + 2042: uint16(13909), + 2043: uint16(13907), + 2044: uint16(13904), + 2045: uint16(13903), + 2046: uint16(11607), + 2047: uint16(13905), + 2048: uint16(5393), + 2049: uint16(6160), + 2050: uint16(7257), + 2051: uint16(13912), + 2052: uint16(13898), + 2053: uint16(13902), + 2054: uint16(13886), + 2055: uint16(4441), + 2056: uint16(13906), + 2057: uint16(13908), + 2058: uint16(8752), + 2059: uint16(6407), + 2060: uint16(4375), + 2061: uint16(13900), + 2062: uint16(13911), + 2063: uint16(13910), + 2064: uint16(5394), + 2065: uint16(8456), + 2066: uint16(4677), + 2067: uint16(5666), + 2068: uint16(13901), + 2069: uint16(13913), + 2070: uint16(13916), + 2071: uint16(14080), + 2072: uint16(6940), + 2073: uint16(14086), + 2074: uint16(9039), + 2075: uint16(13914), + 2076: uint16(14084), + 2077: uint16(4440), + 2078: uint16(14082), + 2079: uint16(14083), + 2080: uint16(13917), + 2081: uint16(14081), + 2082: uint16(5958), + 2083: uint16(11273), + 2084: uint16(4884), + 2085: uint16(4152), + 2086: uint16(14085), + 2087: uint16(9753), + 2088: uint16(3852), + 2089: uint16(10048), + 2090: uint16(13883), + 2091: uint16(14091), + 2092: uint16(14095), + 2093: uint16(11076), + 2094: uint16(14088), + 2095: uint16(9288), + 2096: uint16(14093), + 2097: uint16(7503), + 2098: uint16(14094), + 2099: uint16(9526), + 2100: uint16(11814), + 2101: uint16(14090), + 2102: uint16(14096), + 2103: uint16(6234), + 2104: uint16(7978), + 2105: uint16(3891), + 2106: uint16(14089), + 2107: uint16(14087), + 2108: uint16(8249), + 2109: uint16(13915), + 2110: uint16(6675), + 2111: uint16(8485), + 2112: uint16(14108), + 2113: uint16(8250), + 2114: uint16(14103), + 2115: uint16(14100), + 2116: uint16(14101), + 2117: uint16(6981), + 2118: uint16(14104), + 2119: uint16(14107), + 2120: uint16(14102), + 2121: uint16(7172), + 2122: uint16(14105), + 2123: uint16(14099), + 2124: uint16(11099), + 2125: uint16(11098), + 2126: uint16(14109), + 2127: uint16(14110), + 2128: uint16(3892), + 2129: uint16(14098), + 2130: uint16(5457), + 2131: uint16(3845), + 2132: uint16(4885), + 2133: uint16(14106), + 2134: uint16(14114), + 2135: uint16(14113), + 2136: uint16(14118), + 2137: uint16(14119), + 2138: uint16(14117), + 2139: uint16(14120), + 2140: uint16(14112), + 2141: uint16(14116), + 2142: uint16(14121), + 2143: uint16(14122), + 2144: uint16(14111), + 2145: uint16(6747), + 2146: uint16(14115), + 2147: uint16(8501), + 2148: uint16(6161), + 2149: uint16(14097), + 2150: uint16(7700), + 2151: uint16(14135), + 2152: uint16(10568), + 2153: uint16(14125), + 2154: uint16(14126), + 2155: uint16(14127), + 2156: uint16(14134), + 2157: uint16(14133), + 2158: uint16(10844), + 2159: uint16(4886), + 2160: uint16(14131), + 2161: uint16(5668), + 2162: uint16(4627), + 2163: uint16(14128), + 2164: uint16(11543), + 2165: uint16(14130), + 2166: uint16(3893), + 2167: uint16(14132), + 2168: uint16(14123), + 2169: uint16(14129), + 2170: uint16(14136), + 2171: uint16(5667), + 2172: uint16(14124), + 2173: uint16(11324), + 2174: uint16(11274), + 2175: uint16(14139), + 2176: uint16(14143), + 2177: uint16(8285), + 2178: uint16(11608), + 2179: uint16(14144), + 2180: uint16(14141), + 2181: uint16(14138), + 2182: uint16(14137), + 2183: uint16(14142), + 2184: uint16(10511), + 2185: uint16(9491), + 2186: uint16(5669), + 2187: uint16(14145), + 2188: uint16(14140), + 2189: uint16(14146), + 2190: uint16(5722), + 2191: uint16(4368), + 2192: uint16(14154), + 2193: uint16(4887), + 2194: uint16(14152), + 2195: uint16(14153), + 2196: uint16(6408), + 2197: uint16(14151), + 2198: uint16(14149), + 2199: uint16(14148), + 2200: uint16(14155), + 2201: uint16(14147), + 2202: uint16(14157), + 2203: uint16(4442), + 2204: uint16(14159), + 2205: uint16(14158), + 2206: uint16(8967), + 2207: uint16(14162), + 2208: uint16(14160), + 2209: uint16(14150), + 2210: uint16(5723), + 2211: uint16(14161), + 2212: uint16(14165), + 2213: uint16(14164), + 2214: uint16(14166), + 2215: uint16(14163), + 2216: uint16(14167), + 2217: uint16(14168), + 2218: uint16(14169), + 2219: uint16(10569), + 2220: uint16(14171), + 2221: uint16(14170), + 2222: uint16(7198), + 2223: uint16(7949), + 2224: uint16(4421), + 2225: uint16(4443), + 2226: uint16(14172), + 2227: uint16(3870), + 2228: uint16(7979), + 2229: uint16(14173), + 2230: uint16(19234), + 2231: uint16(14336), + 2232: uint16(5696), + 2233: uint16(14337), + 2234: uint16(8014), + 2235: uint16(14338), + 2236: uint16(14339), + 2237: uint16(5145), + 2238: uint16(14340), + 2239: uint16(14341), + 2240: uint16(14342), + 2241: uint16(8502), + 2242: uint16(5932), + 2243: uint16(11072), + 2244: uint16(10779), + 2245: uint16(7241), + 2246: uint16(14343), + 2247: uint16(8015), + 2248: uint16(19740), + 2249: uint16(10049), + 2250: uint16(6985), + 2251: uint16(6444), + 2252: uint16(14344), + 2253: uint16(8486), + 2254: uint16(10502), + 2255: uint16(8528), + 2256: uint16(14347), + 2257: uint16(14345), + 2258: uint16(14348), + 2259: uint16(14346), + 2260: uint16(14349), + 2261: uint16(10512), + 2262: uint16(3862), + 2263: uint16(10301), + 2264: uint16(10050), + 2265: uint16(14350), + 2266: uint16(14353), + 2267: uint16(7444), + 2268: uint16(5146), + 2269: uint16(14351), + 2270: uint16(14358), + 2271: uint16(7445), + 2272: uint16(14352), + 2273: uint16(9763), + 2274: uint16(11325), + 2275: uint16(14354), + 2276: uint16(14355), + 2277: uint16(14359), + 2278: uint16(9289), + 2279: uint16(14356), + 2280: uint16(6162), + 2281: uint16(7997), + 2282: uint16(14373), + 2283: uint16(10003), + 2284: uint16(8529), + 2285: uint16(10051), + 2286: uint16(14604), + 2287: uint16(10585), + 2288: uint16(9040), + 2289: uint16(10836), + 2290: uint16(14362), + 2291: uint16(4352), + 2292: uint16(8777), + 2293: uint16(14371), + 2294: uint16(8723), + 2295: uint16(14365), + 2296: uint16(14372), + 2297: uint16(14367), + 2298: uint16(14374), + 2299: uint16(14370), + 2300: uint16(14369), + 2301: uint16(9806), + 2302: uint16(14363), + 2303: uint16(4444), + 2304: uint16(14361), + 2305: uint16(5200), + 2306: uint16(8530), + 2307: uint16(14357), + 2308: uint16(14360), + 2309: uint16(6163), + 2310: uint16(7994), + 2311: uint16(7446), + 2312: uint16(14368), + 2313: uint16(9777), + 2314: uint16(5201), + 2315: uint16(4647), + 2316: uint16(4678), + 2317: uint16(7680), + 2318: uint16(14376), + 2319: uint16(14381), + 2320: uint16(14377), + 2321: uint16(5724), + 2322: uint16(14382), + 2323: uint16(6657), + 2324: uint16(6216), + 2325: uint16(7173), + 2326: uint16(14364), + 2327: uint16(6748), + 2328: uint16(14379), + 2329: uint16(6711), + 2330: uint16(14380), + 2331: uint16(3875), + 2332: uint16(14375), + 2333: uint16(8968), + 2334: uint16(5202), + 2335: uint16(5395), + 2336: uint16(14378), + 2337: uint16(3846), + 2338: uint16(6434), + 2339: uint16(7701), + 2340: uint16(9041), + 2341: uint16(10035), + 2342: uint16(14384), + 2343: uint16(8253), + 2344: uint16(8457), + 2345: uint16(6666), + 2346: uint16(14385), + 2347: uint16(14387), + 2348: uint16(14383), + 2349: uint16(10560), + 2350: uint16(8988), + 2351: uint16(8251), + 2352: uint16(10586), + 2353: uint16(6957), + 2354: uint16(14399), + 2355: uint16(14398), + 2356: uint16(7767), + 2357: uint16(5725), + 2358: uint16(14392), + 2359: uint16(7448), + 2360: uint16(9543), + 2361: uint16(9744), + 2362: uint16(14390), + 2363: uint16(8252), + 2364: uint16(6999), + 2365: uint16(14395), + 2366: uint16(7447), + 2367: uint16(14389), + 2368: uint16(14394), + 2369: uint16(9778), + 2370: uint16(14388), + 2371: uint16(5632), + 2372: uint16(4668), + 2373: uint16(14396), + 2374: uint16(11530), + 2375: uint16(6445), + 2376: uint16(8724), + 2377: uint16(14393), + 2378: uint16(7995), + 2379: uint16(6164), + 2380: uint16(7747), + 2381: uint16(4165), + 2382: uint16(8219), + 2383: uint16(14391), + 2384: uint16(5156), + 2385: uint16(5670), + 2386: uint16(9006), + 2387: uint16(14397), + 2388: uint16(8254), + 2389: uint16(14400), + 2390: uint16(14402), + 2391: uint16(8470), + 2392: uint16(14408), + 2393: uint16(14403), + 2394: uint16(14405), + 2395: uint16(10272), + 2396: uint16(9042), + 2397: uint16(14406), + 2398: uint16(11275), + 2399: uint16(11303), + 2400: uint16(4888), + 2401: uint16(3853), + 2402: uint16(14404), + 2403: uint16(14401), + 2404: uint16(4951), + 2405: uint16(4166), + 2406: uint16(14407), + 2407: uint16(11304), + 2408: uint16(14411), + 2409: uint16(8474), + 2410: uint16(14418), + 2411: uint16(14412), + 2412: uint16(14409), + 2413: uint16(14416), + 2414: uint16(14386), + 2415: uint16(14413), + 2416: uint16(14417), + 2417: uint16(10017), + 2418: uint16(9290), + 2419: uint16(14410), + 2420: uint16(14414), + 2421: uint16(5671), + 2422: uint16(6480), + 2423: uint16(7996), + 2424: uint16(14422), + 2425: uint16(9221), + 2426: uint16(14419), + 2427: uint16(10815), + 2428: uint16(14420), + 2429: uint16(14421), + 2430: uint16(11053), + 2431: uint16(7937), + 2432: uint16(5697), + 2433: uint16(14428), + 2434: uint16(6676), + 2435: uint16(14425), + 2436: uint16(14424), + 2437: uint16(9745), + 2438: uint16(9492), + 2439: uint16(9232), + 2440: uint16(14426), + 2441: uint16(14427), + 2442: uint16(10318), + 2443: uint16(9764), + 2444: uint16(6658), + 2445: uint16(8016), + 2446: uint16(10799), + 2447: uint16(4648), + 2448: uint16(14596), + 2449: uint16(14429), + 2450: uint16(11305), + 2451: uint16(14598), + 2452: uint16(14594), + 2453: uint16(14595), + 2454: uint16(8255), + 2455: uint16(14593), + 2456: uint16(14366), + 2457: uint16(14597), + 2458: uint16(14592), + 2459: uint16(14602), + 2460: uint16(14603), + 2461: uint16(9222), + 2462: uint16(14605), + 2463: uint16(6659), + 2464: uint16(14600), + 2465: uint16(5147), + 2466: uint16(14606), + 2467: uint16(14599), + 2468: uint16(14610), + 2469: uint16(14609), + 2470: uint16(14608), + 2471: uint16(14611), + 2472: uint16(14613), + 2473: uint16(7504), + 2474: uint16(14612), + 2475: uint16(14616), + 2476: uint16(14614), + 2477: uint16(14615), + 2478: uint16(14415), + 2479: uint16(14618), + 2480: uint16(14617), + 2481: uint16(14423), + 2482: uint16(14619), + 2483: uint16(14607), + 2484: uint16(6712), + 2485: uint16(14620), + 2486: uint16(14621), + 2487: uint16(14623), + 2488: uint16(14622), + 2489: uint16(14624), + 2490: uint16(4445), + 2491: uint16(6165), + 2492: uint16(10587), + 2493: uint16(7950), + 2494: uint16(5933), + 2495: uint16(14626), + 2496: uint16(14629), + 2497: uint16(10289), + 2498: uint16(5182), + 2499: uint16(14628), + 2500: uint16(14627), + 2501: uint16(9779), + 2502: uint16(14630), + 2503: uint16(5396), + 2504: uint16(14632), + 2505: uint16(14631), + 2506: uint16(4889), + 2507: uint16(6677), + 2508: uint16(9527), + 2509: uint16(5672), + 2510: uint16(7763), + 2511: uint16(14633), + 2512: uint16(7951), + 2513: uint16(9223), + 2514: uint16(10302), + 2515: uint16(14634), + 2516: uint16(14635), + 2517: uint16(14636), + 2518: uint16(10519), + 2519: uint16(13372), + 2520: uint16(7973), + 2521: uint16(10283), + 2522: uint16(6455), + 2523: uint16(10052), + 2524: uint16(10018), + 2525: uint16(9260), + 2526: uint16(11552), + 2527: uint16(14638), + 2528: uint16(6959), + 2529: uint16(14639), + 2530: uint16(3861), + 2531: uint16(5427), + 2532: uint16(7980), + 2533: uint16(10303), + 2534: uint16(14640), + 2535: uint16(6689), + 2536: uint16(8742), + 2537: uint16(6714), + 2538: uint16(7702), + 2539: uint16(14641), + 2540: uint16(10588), + 2541: uint16(4182), + 2542: uint16(6715), + 2543: uint16(14644), + 2544: uint16(14642), + 2545: uint16(14645), + 2546: uint16(11544), + 2547: uint16(14643), + 2548: uint16(8026), + 2549: uint16(14646), + 2550: uint16(8465), + 2551: uint16(14647), + 2552: uint16(4953), + 2553: uint16(14649), + 2554: uint16(14648), + 2555: uint16(14650), + 2556: uint16(14651), + 2557: uint16(4954), + 2558: uint16(9563), + 2559: uint16(8725), + 2560: uint16(5195), + 2561: uint16(6716), + 2562: uint16(8256), + 2563: uint16(7227), + 2564: uint16(3855), + 2565: uint16(14652), + 2566: uint16(4353), + 2567: uint16(14656), + 2568: uint16(6166), + 2569: uint16(14655), + 2570: uint16(6410), + 2571: uint16(7449), + 2572: uint16(14654), + 2573: uint16(7450), + 2574: uint16(11039), + 2575: uint16(6409), + 2576: uint16(3894), + 2577: uint16(7981), + 2578: uint16(14661), + 2579: uint16(7952), + 2580: uint16(4134), + 2581: uint16(7220), + 2582: uint16(10821), + 2583: uint16(6481), + 2584: uint16(7451), + 2585: uint16(7942), + 2586: uint16(14660), + 2587: uint16(14658), + 2588: uint16(14659), + 2589: uint16(8778), + 2590: uint16(14853), + 2591: uint16(14665), + 2592: uint16(6749), + 2593: uint16(6167), + 2594: uint16(14663), + 2595: uint16(14664), + 2596: uint16(7703), + 2597: uint16(14662), + 2598: uint16(6670), + 2599: uint16(14667), + 2600: uint16(14666), + 2601: uint16(14671), + 2602: uint16(14672), + 2603: uint16(14668), + 2604: uint16(4609), + 2605: uint16(14669), + 2606: uint16(14670), + 2607: uint16(10036), + 2608: uint16(10304), + 2609: uint16(5673), + 2610: uint16(14673), + 2611: uint16(7953), + 2612: uint16(7452), + 2613: uint16(8753), + 2614: uint16(5414), + 2615: uint16(14674), + 2616: uint16(14678), + 2617: uint16(4394), + 2618: uint16(14675), + 2619: uint16(14677), + 2620: uint16(14676), + 2621: uint16(7242), + 2622: uint16(8743), + 2623: uint16(3876), + 2624: uint16(14679), + 2625: uint16(14680), + 2626: uint16(8969), + 2627: uint16(11600), + 2628: uint16(6690), + 2629: uint16(10570), + 2630: uint16(10780), + 2631: uint16(14849), + 2632: uint16(14682), + 2633: uint16(14685), + 2634: uint16(14684), + 2635: uint16(14681), + 2636: uint16(14848), + 2637: uint16(9533), + 2638: uint16(14683), + 2639: uint16(14850), + 2640: uint16(7243), + 2641: uint16(14851), + 2642: uint16(11306), + 2643: uint16(9815), + 2644: uint16(14852), + 2645: uint16(14854), + 2646: uint16(14855), + 2647: uint16(14856), + 2648: uint16(5417), + 2649: uint16(4135), + 2650: uint16(6168), + 2651: uint16(14857), + 2652: uint16(14858), + 2653: uint16(7248), + 2654: uint16(8257), + 2655: uint16(12599), + 2656: uint16(8221), + 2657: uint16(8220), + 2658: uint16(8503), + 2659: uint16(6438), + 2660: uint16(12113), + 2661: uint16(5709), + 2662: uint16(11276), + 2663: uint16(10589), + 2664: uint16(10333), + 2665: uint16(14859), + 2666: uint16(6482), + 2667: uint16(8990), + 2668: uint16(14860), + 2669: uint16(11790), + 2670: uint16(10781), + 2671: uint16(8970), + 2672: uint16(14861), + 2673: uint16(4955), + 2674: uint16(14862), + 2675: uint16(14863), + 2676: uint16(11065), + 2677: uint16(11011), + 2678: uint16(10837), + 2679: uint16(10811), + 2680: uint16(6660), + 2681: uint16(14865), + 2682: uint16(6986), + 2683: uint16(10800), + 2684: uint16(14867), + 2685: uint16(14870), + 2686: uint16(14869), + 2687: uint16(4952), + 2688: uint16(5183), + 2689: uint16(14866), + 2690: uint16(14868), + 2691: uint16(14871), + 2692: uint16(7768), + 2693: uint16(11354), + 2694: uint16(3880), + 2695: uint16(6463), + 2696: uint16(8475), + 2697: uint16(6972), + 2698: uint16(7506), + 2699: uint16(14874), + 2700: uint16(9261), + 2701: uint16(14872), + 2702: uint16(8458), + 2703: uint16(14873), + 2704: uint16(7505), + 2705: uint16(11068), + 2706: uint16(14875), + 2707: uint16(14876), + 2708: uint16(11335), + 2709: uint16(14881), + 2710: uint16(6169), + 2711: uint16(9780), + 2712: uint16(14878), + 2713: uint16(9291), + 2714: uint16(14653), + 2715: uint16(14657), + 2716: uint16(5166), + 2717: uint16(9766), + 2718: uint16(14880), + 2719: uint16(7453), + 2720: uint16(10019), + 2721: uint16(14886), + 2722: uint16(10073), + 2723: uint16(14877), + 2724: uint16(14883), + 2725: uint16(14882), + 2726: uint16(7982), + 2727: uint16(10828), + 2728: uint16(11570), + 2729: uint16(10822), + 2730: uint16(4395), + 2731: uint16(6717), + 2732: uint16(11815), + 2733: uint16(14885), + 2734: uint16(7764), + 2735: uint16(14884), + 2736: uint16(14879), + 2737: uint16(5934), + 2738: uint16(14891), + 2739: uint16(14889), + 2740: uint16(4396), + 2741: uint16(14887), + 2742: uint16(14893), + 2743: uint16(14899), + 2744: uint16(8487), + 2745: uint16(10528), + 2746: uint16(14901), + 2747: uint16(10241), + 2748: uint16(14900), + 2749: uint16(9807), + 2750: uint16(10782), + 2751: uint16(4890), + 2752: uint16(8022), + 2753: uint16(7199), + 2754: uint16(9010), + 2755: uint16(11277), + 2756: uint16(14896), + 2757: uint16(14895), + 2758: uint16(14897), + 2759: uint16(14894), + 2760: uint16(14902), + 2761: uint16(14892), + 2762: uint16(14890), + 2763: uint16(14898), + 2764: uint16(14888), + 2765: uint16(8779), + 2766: uint16(11095), + 2767: uint16(6949), + 2768: uint16(6483), + 2769: uint16(6425), + 2770: uint16(10830), + 2771: uint16(4640), + 2772: uint16(9005), + 2773: uint16(9513), + 2774: uint16(4136), + 2775: uint16(8017), + 2776: uint16(7955), + 2777: uint16(5641), + 2778: uint16(14904), + 2779: uint16(6170), + 2780: uint16(4699), + 2781: uint16(14906), + 2782: uint16(4691), + 2783: uint16(14912), + 2784: uint16(14909), + 2785: uint16(8018), + 2786: uint16(4650), + 2787: uint16(6411), + 2788: uint16(4649), + 2789: uint16(6446), + 2790: uint16(14907), + 2791: uint16(5700), + 2792: uint16(5674), + 2793: uint16(9292), + 2794: uint16(14905), + 2795: uint16(3877), + 2796: uint16(14908), + 2797: uint16(14910), + 2798: uint16(5420), + 2799: uint16(5643), + 2800: uint16(4891), + 2801: uint16(5162), + 2802: uint16(14913), + 2803: uint16(6488), + 2804: uint16(10832), + 2805: uint16(6678), + 2806: uint16(14914), + 2807: uint16(10255), + 2808: uint16(14926), + 2809: uint16(4370), + 2810: uint16(14915), + 2811: uint16(14932), + 2812: uint16(14916), + 2813: uint16(11553), + 2814: uint16(14923), + 2815: uint16(9790), + 2816: uint16(14931), + 2817: uint16(14918), + 2818: uint16(3859), + 2819: uint16(14920), + 2820: uint16(6171), + 2821: uint16(14922), + 2822: uint16(14921), + 2823: uint16(14917), + 2824: uint16(14928), + 2825: uint16(7454), + 2826: uint16(13132), + 2827: uint16(5959), + 2828: uint16(11355), + 2829: uint16(14919), + 2830: uint16(9043), + 2831: uint16(4610), + 2832: uint16(6412), + 2833: uint16(14911), + 2834: uint16(14927), + 2835: uint16(4672), + 2836: uint16(14925), + 2837: uint16(14929), + 2838: uint16(9293), + 2839: uint16(4957), + 2840: uint16(15121), + 2841: uint16(11048), + 2842: uint16(14934), + 2843: uint16(4956), + 2844: uint16(14941), + 2845: uint16(10783), + 2846: uint16(15104), + 2847: uint16(15106), + 2848: uint16(15110), + 2849: uint16(14936), + 2850: uint16(8713), + 2851: uint16(9294), + 2852: uint16(15114), + 2853: uint16(14939), + 2854: uint16(15111), + 2855: uint16(15105), + 2856: uint16(7704), + 2857: uint16(15115), + 2858: uint16(7954), + 2859: uint16(15113), + 2860: uint16(4892), + 2861: uint16(11823), + 2862: uint16(14933), + 2863: uint16(15109), + 2864: uint16(3895), + 2865: uint16(14935), + 2866: uint16(11033), + 2867: uint16(14940), + 2868: uint16(7681), + 2869: uint16(8998), + 2870: uint16(14930), + 2871: uint16(15108), + 2872: uint16(7769), + 2873: uint16(15118), + 2874: uint16(4688), + 2875: uint16(5888), + 2876: uint16(15120), + 2877: uint16(14937), + 2878: uint16(15119), + 2879: uint16(15112), + 2880: uint16(14938), + 2881: uint16(15116), + 2882: uint16(15117), + 2883: uint16(15134), + 2884: uint16(9517), + 2885: uint16(15107), + 2886: uint16(15130), + 2887: uint16(15132), + 2888: uint16(9015), + 2889: uint16(11307), + 2890: uint16(10325), + 2891: uint16(15127), + 2892: uint16(8489), + 2893: uint16(15133), + 2894: uint16(8222), + 2895: uint16(15124), + 2896: uint16(15137), + 2897: uint16(15136), + 2898: uint16(9550), + 2899: uint16(15135), + 2900: uint16(9545), + 2901: uint16(15139), + 2902: uint16(15126), + 2903: uint16(5415), + 2904: uint16(15129), + 2905: uint16(7228), + 2906: uint16(9791), + 2907: uint16(15131), + 2908: uint16(5418), + 2909: uint16(15123), + 2910: uint16(15125), + 2911: uint16(15122), + 2912: uint16(11791), + 2913: uint16(4665), + 2914: uint16(15128), + 2915: uint16(15138), + 2916: uint16(4628), + 2917: uint16(6470), + 2918: uint16(4156), + 2919: uint16(15155), + 2920: uint16(11792), + 2921: uint16(15158), + 2922: uint16(7705), + 2923: uint16(15157), + 2924: uint16(15156), + 2925: uint16(15153), + 2926: uint16(15141), + 2927: uint16(15170), + 2928: uint16(15140), + 2929: uint16(15159), + 2930: uint16(15151), + 2931: uint16(15146), + 2932: uint16(15143), + 2933: uint16(15144), + 2934: uint16(15152), + 2935: uint16(21249), + 2936: uint16(15149), + 2937: uint16(6172), + 2938: uint16(8999), + 2939: uint16(8259), + 2940: uint16(15147), + 2941: uint16(15142), + 2942: uint16(15145), + 2943: uint16(11308), + 2944: uint16(10825), + 2945: uint16(15150), + 2946: uint16(15160), + 2947: uint16(15168), + 2948: uint16(15161), + 2949: uint16(15174), + 2950: uint16(15172), + 2951: uint16(15167), + 2952: uint16(15166), + 2953: uint16(9007), + 2954: uint16(8260), + 2955: uint16(15164), + 2956: uint16(15162), + 2957: uint16(15169), + 2958: uint16(15175), + 2959: uint16(10068), + 2960: uint16(15181), + 2961: uint16(15176), + 2962: uint16(15179), + 2963: uint16(15173), + 2964: uint16(8787), + 2965: uint16(10263), + 2966: uint16(15163), + 2967: uint16(15171), + 2968: uint16(7455), + 2969: uint16(11054), + 2970: uint16(15191), + 2971: uint16(15178), + 2972: uint16(5889), + 2973: uint16(4354), + 2974: uint16(4670), + 2975: uint16(15154), + 2976: uint16(7456), + 2977: uint16(15183), + 2978: uint16(15190), + 2979: uint16(7000), + 2980: uint16(4689), + 2981: uint16(8717), + 2982: uint16(15180), + 2983: uint16(15185), + 2984: uint16(15189), + 2985: uint16(5397), + 2986: uint16(5163), + 2987: uint16(15187), + 2988: uint16(5120), + 2989: uint16(9514), + 2990: uint16(15186), + 2991: uint16(15188), + 2992: uint16(15182), + 2993: uint16(15184), + 2994: uint16(4671), + 2995: uint16(8744), + 2996: uint16(15195), + 2997: uint16(15193), + 2998: uint16(5960), + 2999: uint16(15192), + 3000: uint16(15360), + 3001: uint16(14903), + 3002: uint16(15194), + 3003: uint16(15196), + 3004: uint16(15197), + 3005: uint16(15371), + 3006: uint16(15367), + 3007: uint16(14924), + 3008: uint16(15366), + 3009: uint16(15365), + 3010: uint16(15362), + 3011: uint16(15177), + 3012: uint16(15364), + 3013: uint16(15363), + 3014: uint16(15369), + 3015: uint16(11781), + 3016: uint16(15372), + 3017: uint16(5466), + 3018: uint16(15368), + 3019: uint16(15370), + 3020: uint16(9990), + 3021: uint16(15373), + 3022: uint16(15377), + 3023: uint16(15374), + 3024: uint16(11346), + 3025: uint16(15375), + 3026: uint16(15165), + 3027: uint16(15378), + 3028: uint16(15379), + 3029: uint16(4116), + 3030: uint16(15381), + 3031: uint16(5702), + 3032: uint16(6912), + 3033: uint16(5428), + 3034: uint16(4355), + 3035: uint16(11326), + 3036: uint16(15383), + 3037: uint16(15382), + 3038: uint16(15385), + 3039: uint16(5148), + 3040: uint16(5429), + 3041: uint16(4893), + 3042: uint16(15388), + 3043: uint16(15387), + 3044: uint16(15389), + 3045: uint16(4397), + 3046: uint16(8726), + 3047: uint16(15390), + 3048: uint16(4894), + 3049: uint16(15392), + 3050: uint16(15391), + 3051: uint16(15393), + 3052: uint16(15394), + 3053: uint16(15395), + 3054: uint16(6718), + 3055: uint16(7956), + 3056: uint16(6400), + 3057: uint16(10319), + 3058: uint16(10561), + 3059: uint16(11811), + 3060: uint16(6740), + 3061: uint16(6447), + 3062: uint16(11601), + 3063: uint16(15396), + 3064: uint16(15397), + 3065: uint16(6719), + 3066: uint16(15398), + 3067: uint16(15399), + 3068: uint16(15401), + 3069: uint16(15400), + 3070: uint16(10807), + 3071: uint16(7229), + 3072: uint16(6987), + 3073: uint16(6691), + 3074: uint16(15402), + 3075: uint16(15404), + 3076: uint16(7682), + 3077: uint16(15403), + 3078: uint16(15405), + 3079: uint16(15406), + 3080: uint16(15407), + 3081: uint16(15408), + 3082: uint16(15409), + 3083: uint16(15411), + 3084: uint16(15410), + 3085: uint16(15412), + 3086: uint16(4356), + 3087: uint16(8745), + 3088: uint16(15413), + 3089: uint16(6661), + 3090: uint16(4651), + 3091: uint16(15414), + 3092: uint16(9249), + 3093: uint16(13099), + 3094: uint16(5122), + 3095: uint16(15415), + 3096: uint16(15416), + 3097: uint16(10571), + 3098: uint16(10823), + 3099: uint16(9510), + 3100: uint16(15417), + 3101: uint16(10053), + 3102: uint16(10074), + 3103: uint16(11058), + 3104: uint16(15418), + 3105: uint16(15420), + 3106: uint16(15419), + 3107: uint16(15422), + 3108: uint16(15421), + 3109: uint16(15424), + 3110: uint16(6720), + 3111: uint16(11024), + 3112: uint16(15425), + 3113: uint16(15426), + 3114: uint16(5123), + 3115: uint16(15427), + 3116: uint16(15429), + 3117: uint16(15428), + 3118: uint16(7748), + 3119: uint16(10264), + 3120: uint16(4137), + 3121: uint16(10020), + 3122: uint16(9044), + 3123: uint16(7200), + 3124: uint16(5184), + 3125: uint16(10021), + 3126: uint16(6925), + 3127: uint16(15431), + 3128: uint16(4895), + 3129: uint16(4183), + 3130: uint16(9553), + 3131: uint16(15430), + 3132: uint16(6173), + 3133: uint16(8754), + 3134: uint16(15432), + 3135: uint16(15440), + 3136: uint16(15433), + 3137: uint16(8480), + 3138: uint16(5185), + 3139: uint16(15441), + 3140: uint16(5703), + 3141: uint16(5124), + 3142: uint16(15439), + 3143: uint16(15437), + 3144: uint16(15434), + 3145: uint16(11327), + 3146: uint16(8991), + 3147: uint16(9528), + 3148: uint16(15435), + 3149: uint16(15443), + 3150: uint16(15442), + 3151: uint16(5634), + 3152: uint16(4364), + 3153: uint16(6426), + 3154: uint16(15436), + 3155: uint16(15438), + 3156: uint16(10806), + 3157: uint16(8531), + 3158: uint16(10838), + 3159: uint16(15451), + 3160: uint16(15452), + 3161: uint16(4398), + 3162: uint16(10503), + 3163: uint16(11100), + 3164: uint16(15616), + 3165: uint16(6914), + 3166: uint16(7457), + 3167: uint16(15447), + 3168: uint16(15453), + 3169: uint16(4167), + 3170: uint16(5398), + 3171: uint16(15444), + 3172: uint16(15449), + 3173: uint16(8019), + 3174: uint16(9808), + 3175: uint16(10054), + 3176: uint16(15446), + 3177: uint16(10752), + 3178: uint16(15448), + 3179: uint16(15619), + 3180: uint16(15617), + 3181: uint16(15450), + 3182: uint16(10753), + 3183: uint16(9767), + 3184: uint16(5186), + 3185: uint16(9220), + 3186: uint16(8780), + 3187: uint16(15620), + 3188: uint16(15618), + 3189: uint16(8504), + 3190: uint16(15445), + 3191: uint16(4138), + 3192: uint16(11309), + 3193: uint16(15631), + 3194: uint16(15630), + 3195: uint16(8021), + 3196: uint16(15627), + 3197: uint16(11339), + 3198: uint16(9493), + 3199: uint16(15621), + 3200: uint16(8996), + 3201: uint16(4139), + 3202: uint16(6174), + 3203: uint16(15624), + 3204: uint16(7174), + 3205: uint16(15629), + 3206: uint16(15628), + 3207: uint16(15623), + 3208: uint16(15626), + 3209: uint16(4679), + 3210: uint16(15625), + 3211: uint16(9768), + 3212: uint16(11533), + 3213: uint16(7507), + 3214: uint16(8020), + 3215: uint16(15637), + 3216: uint16(15635), + 3217: uint16(10284), + 3218: uint16(15632), + 3219: uint16(15634), + 3220: uint16(4121), + 3221: uint16(6175), + 3222: uint16(11793), + 3223: uint16(4636), + 3224: uint16(10305), + 3225: uint16(11328), + 3226: uint16(4611), + 3227: uint16(7706), + 3228: uint16(15636), + 3229: uint16(15641), + 3230: uint16(7458), + 3231: uint16(11279), + 3232: uint16(15638), + 3233: uint16(15633), + 3234: uint16(15639), + 3235: uint16(11581), + 3236: uint16(9298), + 3237: uint16(9505), + 3238: uint16(4629), + 3239: uint16(4148), + 3240: uint16(15645), + 3241: uint16(15648), + 3242: uint16(11554), + 3243: uint16(11331), + 3244: uint16(15655), + 3245: uint16(15649), + 3246: uint16(15646), + 3247: uint16(11571), + 3248: uint16(15652), + 3249: uint16(7209), + 3250: uint16(15654), + 3251: uint16(15659), + 3252: uint16(9296), + 3253: uint16(15657), + 3254: uint16(15651), + 3255: uint16(8727), + 3256: uint16(15658), + 3257: uint16(15647), + 3258: uint16(15653), + 3259: uint16(15660), + 3260: uint16(3931), + 3261: uint16(15650), + 3262: uint16(15661), + 3263: uint16(7707), + 3264: uint16(7230), + 3265: uint16(10500), + 3266: uint16(6413), + 3267: uint16(15642), + 3268: uint16(15656), + 3269: uint16(9241), + 3270: uint16(7957), + 3271: uint16(4680), + 3272: uint16(6448), + 3273: uint16(7459), + 3274: uint16(15644), + 3275: uint16(7201), + 3276: uint16(5675), + 3277: uint16(15643), + 3278: uint16(15665), + 3279: uint16(7244), + 3280: uint16(5913), + 3281: uint16(15680), + 3282: uint16(15674), + 3283: uint16(5203), + 3284: uint16(9262), + 3285: uint16(15669), + 3286: uint16(15678), + 3287: uint16(3854), + 3288: uint16(4113), + 3289: uint16(4376), + 3290: uint16(15671), + 3291: uint16(8459), + 3292: uint16(15662), + 3293: uint16(15664), + 3294: uint16(6176), + 3295: uint16(15681), + 3296: uint16(15676), + 3297: uint16(15668), + 3298: uint16(15675), + 3299: uint16(11018), + 3300: uint16(15673), + 3301: uint16(15677), + 3302: uint16(5935), + 3303: uint16(7460), + 3304: uint16(8728), + 3305: uint16(15667), + 3306: uint16(11278), + 3307: uint16(15670), + 3308: uint16(15663), + 3309: uint16(9297), + 3310: uint16(15666), + 3311: uint16(15672), + 3312: uint16(11824), + 3313: uint16(6941), + 3314: uint16(10845), + 3315: uint16(15682), + 3316: uint16(9997), + 3317: uint16(15694), + 3318: uint16(5914), + 3319: uint16(7231), + 3320: uint16(15684), + 3321: uint16(11534), + 3322: uint16(6177), + 3323: uint16(15697), + 3324: uint16(3917), + 3325: uint16(15695), + 3326: uint16(15683), + 3327: uint16(15689), + 3328: uint16(15691), + 3329: uint16(11310), + 3330: uint16(15686), + 3331: uint16(9229), + 3332: uint16(15688), + 3333: uint16(15696), + 3334: uint16(15690), + 3335: uint16(11046), + 3336: uint16(15685), + 3337: uint16(6913), + 3338: uint16(15709), + 3339: uint16(4681), + 3340: uint16(15687), + 3341: uint16(15692), + 3342: uint16(15693), + 3343: uint16(8523), + 3344: uint16(8505), + 3345: uint16(15701), + 3346: uint16(15707), + 3347: uint16(15705), + 3348: uint16(9224), + 3349: uint16(15874), + 3350: uint16(15702), + 3351: uint16(15703), + 3352: uint16(15679), + 3353: uint16(5208), + 3354: uint16(10265), + 3355: uint16(6942), + 3356: uint16(6230), + 3357: uint16(11794), + 3358: uint16(15699), + 3359: uint16(15873), + 3360: uint16(4168), + 3361: uint16(8261), + 3362: uint16(9816), + 3363: uint16(4896), + 3364: uint16(11609), + 3365: uint16(11008), + 3366: uint16(9009), + 3367: uint16(15706), + 3368: uint16(15708), + 3369: uint16(8209), + 3370: uint16(15872), + 3371: uint16(15704), + 3372: uint16(15698), + 3373: uint16(4898), + 3374: uint16(5704), + 3375: uint16(15886), + 3376: uint16(15881), + 3377: uint16(8023), + 3378: uint16(4674), + 3379: uint16(7232), + 3380: uint16(15890), + 3381: uint16(15883), + 3382: uint16(8971), + 3383: uint16(15880), + 3384: uint16(9016), + 3385: uint16(15915), + 3386: uint16(15877), + 3387: uint16(15876), + 3388: uint16(15885), + 3389: uint16(15879), + 3390: uint16(15878), + 3391: uint16(15884), + 3392: uint16(7936), + 3393: uint16(15875), + 3394: uint16(15887), + 3395: uint16(15888), + 3396: uint16(4897), + 3397: uint16(15893), + 3398: uint16(15892), + 3399: uint16(15894), + 3400: uint16(15897), + 3401: uint16(9250), + 3402: uint16(15891), + 3403: uint16(15895), + 3404: uint16(5698), + 3405: uint16(8536), + 3406: uint16(15889), + 3407: uint16(9754), + 3408: uint16(15896), + 3409: uint16(15901), + 3410: uint16(15899), + 3411: uint16(15902), + 3412: uint16(15905), + 3413: uint16(15898), + 3414: uint16(6217), + 3415: uint16(9735), + 3416: uint16(15640), + 3417: uint16(11347), + 3418: uint16(15900), + 3419: uint16(15904), + 3420: uint16(8532), + 3421: uint16(15903), + 3422: uint16(15882), + 3423: uint16(20040), + 3424: uint16(15908), + 3425: uint16(15912), + 3426: uint16(15910), + 3427: uint16(15906), + 3428: uint16(15907), + 3429: uint16(15911), + 3430: uint16(15909), + 3431: uint16(10285), + 3432: uint16(15917), + 3433: uint16(15914), + 3434: uint16(15913), + 3435: uint16(15916), + 3436: uint16(9523), + 3437: uint16(15918), + 3438: uint16(8788), + 3439: uint16(8524), + 3440: uint16(7940), + 3441: uint16(15919), + 3442: uint16(15921), + 3443: uint16(15920), + 3444: uint16(15700), + 3445: uint16(15922), + 3446: uint16(9542), + 3447: uint16(15923), + 3448: uint16(4399), + 3449: uint16(9299), + 3450: uint16(4612), + 3451: uint16(5187), + 3452: uint16(6973), + 3453: uint16(6449), + 3454: uint16(11782), + 3455: uint16(7749), + 3456: uint16(4169), + 3457: uint16(15925), + 3458: uint16(15924), + 3459: uint16(15928), + 3460: uint16(8729), + 3461: uint16(15931), + 3462: uint16(15926), + 3463: uint16(15930), + 3464: uint16(15929), + 3465: uint16(9247), + 3466: uint16(3896), + 3467: uint16(11604), + 3468: uint16(15933), + 3469: uint16(4103), + 3470: uint16(15935), + 3471: uint16(15934), + 3472: uint16(15932), + 3473: uint16(15927), + 3474: uint16(10754), + 3475: uint16(15937), + 3476: uint16(15936), + 3477: uint16(4170), + 3478: uint16(15939), + 3479: uint16(10513), + 3480: uint16(15938), + 3481: uint16(11028), + 3482: uint16(7462), + 3483: uint16(8210), + 3484: uint16(7461), + 3485: uint16(11610), + 3486: uint16(15945), + 3487: uint16(8024), + 3488: uint16(15941), + 3489: uint16(15946), + 3490: uint16(4171), + 3491: uint16(15944), + 3492: uint16(9792), + 3493: uint16(15940), + 3494: uint16(15943), + 3495: uint16(7463), + 3496: uint16(10032), + 3497: uint16(15947), + 3498: uint16(6960), + 3499: uint16(8025), + 3500: uint16(15950), + 3501: uint16(15942), + 3502: uint16(5638), + 3503: uint16(15948), + 3504: uint16(11311), + 3505: uint16(15951), + 3506: uint16(21253), + 3507: uint16(7214), + 3508: uint16(15952), + 3509: uint16(15953), + 3510: uint16(9741), + 3511: uint16(15955), + 3512: uint16(15956), + 3513: uint16(9746), + 3514: uint16(9300), + 3515: uint16(15958), + 3516: uint16(15960), + 3517: uint16(11572), + 3518: uint16(15957), + 3519: uint16(15959), + 3520: uint16(4172), + 3521: uint16(15954), + 3522: uint16(12858), + 3523: uint16(15961), + 3524: uint16(8262), + 3525: uint16(6679), + 3526: uint16(15963), + 3527: uint16(15962), + 3528: uint16(7683), + 3529: uint16(12600), + 3530: uint16(15964), + 3531: uint16(16128), + 3532: uint16(15949), + 3533: uint16(15965), + 3534: uint16(16129), + 3535: uint16(9817), + 3536: uint16(16130), + 3537: uint16(16131), + 3538: uint16(16132), + 3539: uint16(16133), + 3540: uint16(9021), + 3541: uint16(16135), + 3542: uint16(16134), + 3543: uint16(16136), + 3544: uint16(16137), + 3545: uint16(6974), + 3546: uint16(10306), + 3547: uint16(11083), + 3548: uint16(16138), + 3549: uint16(16139), + 3550: uint16(8245), + 3551: uint16(6915), + 3552: uint16(16140), + 3553: uint16(16141), + 3554: uint16(16142), + 3555: uint16(10545), + 3556: uint16(10022), + 3557: uint16(16143), + 3558: uint16(9782), + 3559: uint16(8972), + 3560: uint16(16144), + 3561: uint16(4422), + 3562: uint16(5196), + 3563: uint16(11045), + 3564: uint16(11029), + 3565: uint16(4371), + 3566: uint16(11795), + 3567: uint16(10801), + 3568: uint16(10505), + 3569: uint16(7958), + 3570: uint16(16145), + 3571: uint16(9506), + 3572: uint16(5890), + 3573: uint16(16146), + 3574: uint16(6451), + 3575: uint16(16148), + 3576: uint16(16147), + 3577: uint16(16149), + 3578: uint16(16150), + 3579: uint16(16151), + 3580: uint16(5149), + 3581: uint16(16152), + 3582: uint16(16153), + 3583: uint16(5891), + 3584: uint16(10023), + 3585: uint16(16155), + 3586: uint16(7508), + 3587: uint16(16154), + 3588: uint16(5399), + 3589: uint16(16156), + 3590: uint16(16158), + 3591: uint16(16157), + 3592: uint16(16159), + 3593: uint16(5936), + 3594: uint16(16160), + 3595: uint16(5448), + 3596: uint16(8223), + 3597: uint16(6236), + 3598: uint16(16162), + 3599: uint16(16163), + 3600: uint16(16161), + 3601: uint16(6988), + 3602: uint16(9511), + 3603: uint16(5400), + 3604: uint16(16165), + 3605: uint16(8715), + 3606: uint16(16164), + 3607: uint16(11796), + 3608: uint16(9793), + 3609: uint16(16168), + 3610: uint16(16170), + 3611: uint16(16167), + 3612: uint16(11059), + 3613: uint16(16169), + 3614: uint16(16171), + 3615: uint16(11555), + 3616: uint16(16175), + 3617: uint16(16174), + 3618: uint16(8789), + 3619: uint16(9740), + 3620: uint16(5892), + 3621: uint16(16173), + 3622: uint16(16172), + 3623: uint16(11280), + 3624: uint16(11281), + 3625: uint16(16176), + 3626: uint16(4173), + 3627: uint16(6229), + 3628: uint16(6721), + 3629: uint16(16177), + 3630: uint16(16178), + 3631: uint16(16180), + 3632: uint16(7202), + 3633: uint16(16182), + 3634: uint16(16181), + 3635: uint16(16183), + 3636: uint16(4652), + 3637: uint16(16185), + 3638: uint16(16184), + 3639: uint16(16187), + 3640: uint16(16186), + 3641: uint16(5915), + 3642: uint16(11527), + 3643: uint16(5419), + 3644: uint16(4357), + 3645: uint16(5449), + 3646: uint16(4928), + 3647: uint16(11591), + 3648: uint16(16189), + 3649: uint16(16191), + 3650: uint16(16192), + 3651: uint16(4400), + 3652: uint16(16188), + 3653: uint16(6680), + 3654: uint16(8992), + 3655: uint16(16190), + 3656: uint16(16195), + 3657: uint16(6989), + 3658: uint16(16193), + 3659: uint16(5661), + 3660: uint16(10024), + 3661: uint16(16194), + 3662: uint16(16221), + 3663: uint16(16200), + 3664: uint16(5916), + 3665: uint16(5188), + 3666: uint16(16197), + 3667: uint16(11356), + 3668: uint16(11535), + 3669: uint16(8533), + 3670: uint16(16199), + 3671: uint16(16201), + 3672: uint16(11573), + 3673: uint16(5430), + 3674: uint16(10075), + 3675: uint16(9769), + 3676: uint16(16202), + 3677: uint16(16204), + 3678: uint16(16207), + 3679: uint16(16203), + 3680: uint16(16206), + 3681: uint16(5961), + 3682: uint16(4140), + 3683: uint16(16208), + 3684: uint16(7759), + 3685: uint16(16205), + 3686: uint16(11579), + 3687: uint16(16211), + 3688: uint16(21251), + 3689: uint16(16209), + 3690: uint16(16212), + 3691: uint16(16198), + 3692: uint16(16210), + 3693: uint16(6427), + 3694: uint16(16213), + 3695: uint16(16214), + 3696: uint16(11357), + 3697: uint16(16215), + 3698: uint16(16216), + 3699: uint16(16196), + 3700: uint16(16217), + 3701: uint16(4899), + 3702: uint16(6916), + 3703: uint16(16218), + 3704: uint16(16219), + 3705: uint16(16220), + 3706: uint16(4122), + 3707: uint16(16384), + 3708: uint16(10266), + 3709: uint16(16385), + 3710: uint16(4867), + 3711: uint16(16386), + 3712: uint16(16387), + 3713: uint16(16388), + 3714: uint16(16390), + 3715: uint16(16391), + 3716: uint16(16389), + 3717: uint16(10290), + 3718: uint16(16393), + 3719: uint16(16392), + 3720: uint16(16395), + 3721: uint16(16394), + 3722: uint16(16396), + 3723: uint16(16397), + 3724: uint16(16399), + 3725: uint16(16398), + 3726: uint16(6232), + 3727: uint16(16401), + 3728: uint16(16400), + 3729: uint16(4900), + 3730: uint16(7730), + 3731: uint16(9243), + 3732: uint16(16402), + 3733: uint16(7959), + 3734: uint16(6681), + 3735: uint16(4184), + 3736: uint16(16403), + 3737: uint16(11312), + 3738: uint16(10562), + 3739: uint16(16404), + 3740: uint16(9251), + 3741: uint16(11282), + 3742: uint16(6178), + 3743: uint16(7708), + 3744: uint16(8746), + 3745: uint16(12563), + 3746: uint16(8973), + 3747: uint16(4423), + 3748: uint16(16405), + 3749: uint16(16406), + 3750: uint16(16411), + 3751: uint16(16409), + 3752: uint16(16408), + 3753: uint16(14625), + 3754: uint16(4613), + 3755: uint16(16407), + 3756: uint16(3897), + 3757: uint16(9993), + 3758: uint16(10025), + 3759: uint16(11536), + 3760: uint16(16412), + 3761: uint16(16410), + 3762: uint16(8763), + 3763: uint16(7941), + 3764: uint16(9994), + 3765: uint16(10252), + 3766: uint16(16414), + 3767: uint16(11531), + 3768: uint16(5676), + 3769: uint16(16415), + 3770: uint16(16413), + 3771: uint16(10037), + 3772: uint16(16416), + 3773: uint16(16417), + 3774: uint16(3898), + 3775: uint16(7509), + 3776: uint16(16422), + 3777: uint16(16419), + 3778: uint16(9548), + 3779: uint16(16418), + 3780: uint16(5125), + 3781: uint16(16425), + 3782: uint16(16420), + 3783: uint16(16421), + 3784: uint16(16424), + 3785: uint16(16423), + 3786: uint16(10244), + 3787: uint16(8225), + 3788: uint16(8224), + 3789: uint16(5150), + 3790: uint16(16426), + 3791: uint16(16427), + 3792: uint16(16428), + 3793: uint16(16430), + 3794: uint16(16429), + 3795: uint16(4149), + 3796: uint16(16438), + 3797: uint16(10055), + 3798: uint16(16432), + 3799: uint16(16434), + 3800: uint16(16436), + 3801: uint16(7709), + 3802: uint16(16437), + 3803: uint16(16435), + 3804: uint16(6943), + 3805: uint16(16431), + 3806: uint16(16433), + 3807: uint16(10273), + 3808: uint16(7464), + 3809: uint16(16440), + 3810: uint16(16439), + 3811: uint16(16441), + 3812: uint16(6917), + 3813: uint16(6414), + 3814: uint16(9302), + 3815: uint16(16442), + 3816: uint16(9002), + 3817: uint16(16444), + 3818: uint16(11520), + 3819: uint16(16443), + 3820: uint16(8264), + 3821: uint16(16449), + 3822: uint16(16451), + 3823: uint16(16452), + 3824: uint16(8755), + 3825: uint16(16450), + 3826: uint16(16447), + 3827: uint16(16445), + 3828: uint16(16446), + 3829: uint16(16448), + 3830: uint16(16455), + 3831: uint16(16453), + 3832: uint16(16454), + 3833: uint16(16456), + 3834: uint16(16458), + 3835: uint16(16459), + 3836: uint16(16460), + 3837: uint16(16461), + 3838: uint16(16457), + 3839: uint16(16463), + 3840: uint16(16462), + 3841: uint16(16464), + 3842: uint16(11556), + 3843: uint16(16467), + 3844: uint16(16465), + 3845: uint16(16466), + 3846: uint16(4929), + 3847: uint16(11101), + 3848: uint16(10537), + 3849: uint16(16469), + 3850: uint16(16468), + 3851: uint16(16470), + 3852: uint16(16471), + 3853: uint16(16475), + 3854: uint16(16472), + 3855: uint16(16473), + 3856: uint16(16474), + 3857: uint16(16476), + 3858: uint16(16477), + 3859: uint16(16640), + 3860: uint16(16641), + 3861: uint16(16642), + 3862: uint16(9998), + 3863: uint16(9263), + 3864: uint16(16643), + 3865: uint16(9809), + 3866: uint16(10259), + 3867: uint16(16644), + 3868: uint16(16645), + 3869: uint16(9225), + 3870: uint16(4614), + 3871: uint16(6179), + 3872: uint16(16646), + 3873: uint16(16647), + 3874: uint16(16648), + 3875: uint16(6664), + 3876: uint16(16650), + 3877: uint16(16649), + 3878: uint16(16651), + 3879: uint16(16652), + 3880: uint16(10056), + 3881: uint16(16653), + 3882: uint16(16654), + 3883: uint16(21064), + 3884: uint16(16655), + 3885: uint16(16656), + 3886: uint16(16657), + 3887: uint16(6669), + 3888: uint16(16658), + 3889: uint16(9781), + 3890: uint16(10814), + 3891: uint16(4141), + 3892: uint16(4150), + 3893: uint16(16659), + 3894: uint16(16661), + 3895: uint16(16660), + 3896: uint16(9295), + 3897: uint16(7960), + 3898: uint16(15384), + 3899: uint16(16662), + 3900: uint16(11040), + 3901: uint16(16663), + 3902: uint16(4901), + 3903: uint16(10038), + 3904: uint16(16664), + 3905: uint16(16665), + 3906: uint16(16666), + 3907: uint16(11067), + 3908: uint16(11060), + 3909: uint16(8989), + 3910: uint16(8265), + 3911: uint16(16668), + 3912: uint16(7233), + 3913: uint16(7465), + 3914: uint16(16671), + 3915: uint16(16670), + 3916: uint16(16669), + 3917: uint16(10076), + 3918: uint16(4902), + 3919: uint16(5896), + 3920: uint16(16677), + 3921: uint16(16674), + 3922: uint16(7710), + 3923: uint16(11025), + 3924: uint16(16673), + 3925: uint16(16675), + 3926: uint16(16676), + 3927: uint16(16672), + 3928: uint16(16678), + 3929: uint16(16679), + 3930: uint16(8974), + 3931: uint16(4930), + 3932: uint16(8772), + 3933: uint16(16680), + 3934: uint16(16681), + 3935: uint16(16684), + 3936: uint16(7750), + 3937: uint16(9507), + 3938: uint16(16685), + 3939: uint16(10802), + 3940: uint16(16682), + 3941: uint16(16683), + 3942: uint16(16688), + 3943: uint16(16687), + 3944: uint16(16686), + 3945: uint16(16690), + 3946: uint16(16689), + 3947: uint16(16691), + 3948: uint16(16693), + 3949: uint16(16692), + 3950: uint16(10540), + 3951: uint16(7221), + 3952: uint16(11557), + 3953: uint16(16694), + 3954: uint16(9494), + 3955: uint16(16695), + 3956: uint16(16696), + 3957: uint16(16700), + 3958: uint16(16698), + 3959: uint16(16699), + 3960: uint16(16697), + 3961: uint16(16701), + 3962: uint16(16702), + 3963: uint16(16703), + 3964: uint16(16704), + 3965: uint16(11030), + 3966: uint16(16705), + 3967: uint16(11087), + 3968: uint16(16706), + 3969: uint16(8749), + 3970: uint16(9801), + 3971: uint16(5450), + 3972: uint16(8730), + 3973: uint16(16707), + 3974: uint16(5401), + 3975: uint16(7983), + 3976: uint16(16708), + 3977: uint16(6428), + 3978: uint16(16709), + 3979: uint16(16710), + 3980: uint16(5893), + 3981: uint16(6452), + 3982: uint16(16712), + 3983: uint16(9269), + 3984: uint16(6453), + 3985: uint16(5165), + 3986: uint16(10755), + 3987: uint16(9770), + 3988: uint16(9270), + 3989: uint16(6203), + 3990: uint16(16714), + 3991: uint16(7466), + 3992: uint16(11537), + 3993: uint16(6180), + 3994: uint16(5894), + 3995: uint16(9986), + 3996: uint16(16716), + 3997: uint16(16718), + 3998: uint16(5962), + 3999: uint16(16717), + 4000: uint16(9045), + 4001: uint16(16720), + 4002: uint16(4630), + 4003: uint16(16715), + 4004: uint16(10057), + 4005: uint16(4111), + 4006: uint16(6475), + 4007: uint16(11825), + 4008: uint16(16719), + 4009: uint16(16721), + 4010: uint16(10538), + 4011: uint16(7992), + 4012: uint16(16723), + 4013: uint16(16724), + 4014: uint16(16722), + 4015: uint16(4653), + 4016: uint16(16730), + 4017: uint16(16729), + 4018: uint16(6918), + 4019: uint16(16731), + 4020: uint16(16726), + 4021: uint16(16732), + 4022: uint16(16727), + 4023: uint16(10039), + 4024: uint16(16725), + 4025: uint16(16728), + 4026: uint16(16897), + 4027: uint16(16896), + 4028: uint16(10816), + 4029: uint16(16733), + 4030: uint16(3914), + 4031: uint16(16899), + 4032: uint16(16898), + 4033: uint16(7467), + 4034: uint16(16900), + 4035: uint16(8226), + 4036: uint16(16902), + 4037: uint16(16901), + 4038: uint16(16903), + 4039: uint16(16711), + 4040: uint16(16713), + 4041: uint16(16905), + 4042: uint16(16904), + 4043: uint16(6919), + 4044: uint16(11592), + 4045: uint16(6961), + 4046: uint16(16906), + 4047: uint16(5654), + 4048: uint16(5151), + 4049: uint16(5126), + 4050: uint16(6722), + 4051: uint16(11283), + 4052: uint16(16912), + 4053: uint16(16911), + 4054: uint16(8227), + 4055: uint16(16908), + 4056: uint16(16910), + 4057: uint16(7210), + 4058: uint16(7711), + 4059: uint16(16909), + 4060: uint16(16907), + 4061: uint16(9737), + 4062: uint16(7468), + 4063: uint16(10267), + 4064: uint16(6454), + 4065: uint16(9303), + 4066: uint16(16913), + 4067: uint16(16914), + 4068: uint16(16936), + 4069: uint16(5431), + 4070: uint16(11804), + 4071: uint16(8212), + 4072: uint16(16915), + 4073: uint16(4401), + 4074: uint16(9046), + 4075: uint16(10496), + 4076: uint16(16916), + 4077: uint16(5209), + 4078: uint16(16917), + 4079: uint16(16919), + 4080: uint16(16920), + 4081: uint16(9736), + 4082: uint16(16921), + 4083: uint16(16922), + 4084: uint16(16923), + 4085: uint16(5432), + 4086: uint16(4402), + 4087: uint16(9508), + 4088: uint16(7175), + 4089: uint16(6723), + 4090: uint16(16924), + 4091: uint16(7176), + 4092: uint16(4393), + 4093: uint16(10274), + 4094: uint16(16925), + 4095: uint16(10058), + 4096: uint16(8228), + 4097: uint16(16928), + 4098: uint16(16929), + 4099: uint16(9800), + 4100: uint16(7712), + 4101: uint16(16926), + 4102: uint16(8768), + 4103: uint16(16927), + 4104: uint16(7469), + 4105: uint16(3899), + 4106: uint16(5128), + 4107: uint16(16930), + 4108: uint16(9047), + 4109: uint16(16931), + 4110: uint16(7974), + 4111: uint16(11020), + 4112: uint16(10242), + 4113: uint16(16932), + 4114: uint16(16933), + 4115: uint16(8756), + 4116: uint16(11558), + 4117: uint16(16935), + 4118: uint16(16934), + 4119: uint16(6990), + 4120: uint16(16937), + 4121: uint16(3919), + 4122: uint16(16940), + 4123: uint16(16938), + 4124: uint16(4403), + 4125: uint16(5677), + 4126: uint16(16939), + 4127: uint16(6181), + 4128: uint16(6225), + 4129: uint16(10565), + 4130: uint16(16941), + 4131: uint16(10803), + 4132: uint16(16943), + 4133: uint16(7984), + 4134: uint16(4142), + 4135: uint16(4377), + 4136: uint16(3851), + 4137: uint16(16942), + 4138: uint16(16944), + 4139: uint16(16945), + 4140: uint16(7510), + 4141: uint16(16946), + 4142: uint16(4654), + 4143: uint16(16948), + 4144: uint16(5705), + 4145: uint16(5189), + 4146: uint16(16949), + 4147: uint16(5460), + 4148: uint16(16950), + 4149: uint16(8027), + 4150: uint16(9516), + 4151: uint16(7999), + 4152: uint16(6484), + 4153: uint16(16951), + 4154: uint16(8769), + 4155: uint16(8266), + 4156: uint16(16953), + 4157: uint16(16955), + 4158: uint16(16952), + 4159: uint16(16954), + 4160: uint16(5633), + 4161: uint16(16956), + 4162: uint16(5637), + 4163: uint16(5190), + 4164: uint16(11313), + 4165: uint16(16958), + 4166: uint16(16959), + 4167: uint16(4109), + 4168: uint16(16962), + 4169: uint16(4693), + 4170: uint16(16961), + 4171: uint16(16960), + 4172: uint16(16964), + 4173: uint16(16957), + 4174: uint16(16965), + 4175: uint16(11528), + 4176: uint16(16966), + 4177: uint16(16967), + 4178: uint16(13139), + 4179: uint16(16969), + 4180: uint16(16968), + 4181: uint16(16970), + 4182: uint16(16971), + 4183: uint16(11540), + 4184: uint16(16972), + 4185: uint16(20302), + 4186: uint16(7470), + 4187: uint16(16973), + 4188: uint16(16974), + 4189: uint16(7222), + 4190: uint16(9495), + 4191: uint16(16975), + 4192: uint16(8711), + 4193: uint16(16976), + 4194: uint16(8731), + 4195: uint16(16977), + 4196: uint16(5380), + 4197: uint16(12318), + 4198: uint16(8764), + 4199: uint16(6930), + 4200: uint16(4903), + 4201: uint16(16978), + 4202: uint16(17153), + 4203: uint16(16981), + 4204: uint16(5191), + 4205: uint16(16980), + 4206: uint16(17155), + 4207: uint16(16979), + 4208: uint16(7471), + 4209: uint16(16983), + 4210: uint16(16984), + 4211: uint16(9226), + 4212: uint16(16985), + 4213: uint16(4669), + 4214: uint16(7737), + 4215: uint16(10307), + 4216: uint16(16987), + 4217: uint16(8519), + 4218: uint16(16982), + 4219: uint16(16986), + 4220: uint16(16988), + 4221: uint16(6490), + 4222: uint16(17157), + 4223: uint16(10253), + 4224: uint16(9989), + 4225: uint16(9304), + 4226: uint16(5433), + 4227: uint16(17156), + 4228: uint16(17154), + 4229: uint16(10004), + 4230: uint16(16989), + 4231: uint16(8765), + 4232: uint16(9306), + 4233: uint16(9305), + 4234: uint16(6485), + 4235: uint16(17175), + 4236: uint16(17159), + 4237: uint16(17161), + 4238: uint16(17164), + 4239: uint16(17165), + 4240: uint16(17162), + 4241: uint16(17163), + 4242: uint16(17160), + 4243: uint16(17158), + 4244: uint16(17152), + 4245: uint16(10542), + 4246: uint16(4404), + 4247: uint16(17172), + 4248: uint16(17169), + 4249: uint16(17174), + 4250: uint16(17173), + 4251: uint16(9810), + 4252: uint16(11014), + 4253: uint16(6682), + 4254: uint16(17167), + 4255: uint16(17176), + 4256: uint16(17171), + 4257: uint16(17170), + 4258: uint16(17166), + 4259: uint16(17168), + 4260: uint16(4904), + 4261: uint16(8732), + 4262: uint16(8028), + 4263: uint16(9985), + 4264: uint16(17181), + 4265: uint16(9987), + 4266: uint16(8000), + 4267: uint16(17178), + 4268: uint16(10030), + 4269: uint16(17182), + 4270: uint16(10546), + 4271: uint16(8762), + 4272: uint16(17177), + 4273: uint16(17179), + 4274: uint16(17180), + 4275: uint16(17183), + 4276: uint16(6947), + 4277: uint16(9509), + 4278: uint16(17188), + 4279: uint16(17187), + 4280: uint16(17184), + 4281: uint16(11797), + 4282: uint16(17193), + 4283: uint16(17197), + 4284: uint16(17194), + 4285: uint16(17190), + 4286: uint16(17191), + 4287: uint16(17196), + 4288: uint16(17185), + 4289: uint16(12596), + 4290: uint16(17192), + 4291: uint16(17186), + 4292: uint16(17195), + 4293: uint16(17201), + 4294: uint16(4905), + 4295: uint16(17198), + 4296: uint16(17199), + 4297: uint16(17200), + 4298: uint16(17203), + 4299: uint16(17202), + 4300: uint16(10069), + 4301: uint16(17204), + 4302: uint16(11611), + 4303: uint16(10572), + 4304: uint16(17209), + 4305: uint16(17206), + 4306: uint16(17205), + 4307: uint16(7985), + 4308: uint16(17208), + 4309: uint16(17210), + 4310: uint16(17207), + 4311: uint16(17214), + 4312: uint16(17211), + 4313: uint16(17212), + 4314: uint16(17189), + 4315: uint16(17213), + 4316: uint16(17215), + 4317: uint16(17216), + 4318: uint16(10533), + 4319: uint16(17217), + 4320: uint16(11073), + 4321: uint16(5421), + 4322: uint16(5640), + 4323: uint16(17218), + 4324: uint16(10515), + 4325: uint16(7751), + 4326: uint16(11023), + 4327: uint16(17219), + 4328: uint16(11538), + 4329: uint16(9811), + 4330: uint16(8229), + 4331: uint16(9747), + 4332: uint16(7212), + 4333: uint16(3871), + 4334: uint16(17224), + 4335: uint16(17222), + 4336: uint16(17220), + 4337: uint16(4864), + 4338: uint16(7472), + 4339: uint16(17225), + 4340: uint16(17223), + 4341: uint16(17221), + 4342: uint16(17229), + 4343: uint16(17228), + 4344: uint16(17227), + 4345: uint16(17226), + 4346: uint16(17230), + 4347: uint16(17231), + 4348: uint16(7961), + 4349: uint16(17232), + 4350: uint16(17234), + 4351: uint16(17233), + 4352: uint16(5937), + 4353: uint16(8215), + 4354: uint16(17236), + 4355: uint16(9307), + 4356: uint16(17235), + 4357: uint16(17237), + 4358: uint16(10516), + 4359: uint16(8267), + 4360: uint16(6182), + 4361: uint16(17238), + 4362: uint16(11559), + 4363: uint16(17240), + 4364: uint16(17241), + 4365: uint16(17242), + 4366: uint16(17243), + 4367: uint16(6724), + 4368: uint16(17244), + 4369: uint16(5678), + 4370: uint16(5193), + 4371: uint16(5129), + 4372: uint16(17408), + 4373: uint16(11090), + 4374: uint16(6183), + 4375: uint16(17245), + 4376: uint16(17411), + 4377: uint16(11077), + 4378: uint16(9755), + 4379: uint16(10258), + 4380: uint16(7234), + 4381: uint16(17410), + 4382: uint16(6962), + 4383: uint16(6184), + 4384: uint16(6725), + 4385: uint16(5192), + 4386: uint16(10517), + 4387: uint16(17409), + 4388: uint16(8230), + 4389: uint16(10785), + 4390: uint16(6486), + 4391: uint16(6726), + 4392: uint16(9020), + 4393: uint16(17414), + 4394: uint16(11582), + 4395: uint16(6456), + 4396: uint16(17415), + 4397: uint16(7713), + 4398: uint16(17417), + 4399: uint16(7473), + 4400: uint16(6415), + 4401: uint16(17416), + 4402: uint16(7177), + 4403: uint16(5917), + 4404: uint16(8231), + 4405: uint16(17412), + 4406: uint16(17418), + 4407: uint16(17413), + 4408: uint16(5679), + 4409: uint16(17421), + 4410: uint16(17425), + 4411: uint16(5706), + 4412: uint16(17420), + 4413: uint16(17429), + 4414: uint16(6185), + 4415: uint16(11340), + 4416: uint16(3867), + 4417: uint16(17426), + 4418: uint16(5194), + 4419: uint16(17423), + 4420: uint16(17424), + 4421: uint16(9308), + 4422: uint16(17422), + 4423: uint16(17419), + 4424: uint16(4615), + 4425: uint16(8003), + 4426: uint16(5895), + 4427: uint16(17431), + 4428: uint16(17428), + 4429: uint16(17430), + 4430: uint16(17427), + 4431: uint16(5680), + 4432: uint16(8466), + 4433: uint16(17432), + 4434: uint16(8269), + 4435: uint16(17445), + 4436: uint16(17441), + 4437: uint16(17435), + 4438: uint16(17439), + 4439: uint16(7001), + 4440: uint16(3900), + 4441: uint16(17434), + 4442: uint16(17442), + 4443: uint16(17446), + 4444: uint16(6186), + 4445: uint16(11061), + 4446: uint16(9013), + 4447: uint16(17436), + 4448: uint16(17444), + 4449: uint16(17433), + 4450: uint16(8733), + 4451: uint16(17438), + 4452: uint16(3868), + 4453: uint16(11049), + 4454: uint16(17437), + 4455: uint16(5434), + 4456: uint16(10059), + 4457: uint16(8268), + 4458: uint16(11567), + 4459: uint16(7246), + 4460: uint16(17485), + 4461: uint16(17447), + 4462: uint16(8029), + 4463: uint16(17443), + 4464: uint16(17448), + 4465: uint16(17450), + 4466: uint16(9048), + 4467: uint16(17453), + 4468: uint16(17449), + 4469: uint16(10547), + 4470: uint16(4906), + 4471: uint16(11050), + 4472: uint16(3901), + 4473: uint16(17452), + 4474: uint16(11612), + 4475: uint16(17451), + 4476: uint16(4174), + 4477: uint16(9547), + 4478: uint16(17454), + 4479: uint16(17461), + 4480: uint16(17455), + 4481: uint16(17462), + 4482: uint16(17458), + 4483: uint16(9818), + 4484: uint16(6953), + 4485: uint16(17460), + 4486: uint16(17457), + 4487: uint16(17463), + 4488: uint16(17456), + 4489: uint16(7203), + 4490: uint16(10756), + 4491: uint16(7211), + 4492: uint16(17459), + 4493: uint16(17471), + 4494: uint16(17467), + 4495: uint16(17470), + 4496: uint16(17468), + 4497: uint16(17472), + 4498: uint16(17466), + 4499: uint16(17440), + 4500: uint16(7986), + 4501: uint16(10026), + 4502: uint16(17469), + 4503: uint16(17464), + 4504: uint16(8192), + 4505: uint16(5681), + 4506: uint16(7178), + 4507: uint16(7684), + 4508: uint16(8213), + 4509: uint16(17475), + 4510: uint16(17477), + 4511: uint16(17478), + 4512: uint16(17474), + 4513: uint16(17476), + 4514: uint16(17465), + 4515: uint16(17473), + 4516: uint16(17481), + 4517: uint16(17480), + 4518: uint16(10841), + 4519: uint16(5642), + 4520: uint16(17479), + 4521: uint16(17483), + 4522: uint16(17482), + 4523: uint16(17486), + 4524: uint16(17488), + 4525: uint16(6683), + 4526: uint16(17484), + 4527: uint16(17489), + 4528: uint16(17490), + 4529: uint16(17491), + 4530: uint16(17497), + 4531: uint16(9242), + 4532: uint16(17493), + 4533: uint16(17492), + 4534: uint16(17494), + 4535: uint16(17495), + 4536: uint16(17496), + 4537: uint16(17498), + 4538: uint16(17499), + 4539: uint16(4907), + 4540: uint16(17500), + 4541: uint16(17501), + 4542: uint16(17664), + 4543: uint16(17665), + 4544: uint16(17666), + 4545: uint16(17667), + 4546: uint16(17668), + 4547: uint16(17669), + 4548: uint16(17671), + 4549: uint16(17670), + 4550: uint16(17672), + 4551: uint16(17673), + 4552: uint16(17674), + 4553: uint16(17677), + 4554: uint16(17675), + 4555: uint16(17676), + 4556: uint16(6464), + 4557: uint16(5682), + 4558: uint16(8757), + 4559: uint16(10002), + 4560: uint16(7247), + 4561: uint16(9772), + 4562: uint16(10060), + 4563: uint16(17678), + 4564: uint16(14156), + 4565: uint16(17679), + 4566: uint16(17681), + 4567: uint16(11332), + 4568: uint16(17680), + 4569: uint16(17683), + 4570: uint16(17682), + 4571: uint16(11314), + 4572: uint16(17684), + 4573: uint16(10077), + 4574: uint16(17685), + 4575: uint16(17688), + 4576: uint16(17687), + 4577: uint16(17686), + 4578: uint16(17689), + 4579: uint16(5649), + 4580: uint16(8193), + 4581: uint16(5152), + 4582: uint16(17693), + 4583: uint16(17690), + 4584: uint16(17691), + 4585: uint16(17694), + 4586: uint16(17695), + 4587: uint16(17692), + 4588: uint16(4104), + 4589: uint16(4358), + 4590: uint16(17697), + 4591: uint16(17698), + 4592: uint16(17699), + 4593: uint16(11329), + 4594: uint16(7179), + 4595: uint16(17701), + 4596: uint16(17700), + 4597: uint16(7752), + 4598: uint16(17702), + 4599: uint16(17703), + 4600: uint16(17704), + 4601: uint16(4932), + 4602: uint16(4908), + 4603: uint16(17705), + 4604: uint16(17706), + 4605: uint16(10812), + 4606: uint16(11330), + 4607: uint16(11315), + 4608: uint16(11798), + 4609: uint16(6188), + 4610: uint16(17709), + 4611: uint16(6963), + 4612: uint16(17708), + 4613: uint16(17710), + 4614: uint16(6920), + 4615: uint16(8496), + 4616: uint16(17711), + 4617: uint16(6187), + 4618: uint16(11062), + 4619: uint16(17712), + 4620: uint16(17713), + 4621: uint16(17714), + 4622: uint16(17715), + 4623: uint16(17716), + 4624: uint16(6921), + 4625: uint16(11084), + 4626: uint16(17718), + 4627: uint16(8734), + 4628: uint16(17717), + 4629: uint16(17720), + 4630: uint16(17719), + 4631: uint16(17721), + 4632: uint16(7962), + 4633: uint16(17722), + 4634: uint16(17723), + 4635: uint16(10520), + 4636: uint16(17724), + 4637: uint16(8270), + 4638: uint16(17725), + 4639: uint16(17726), + 4640: uint16(11613), + 4641: uint16(17729), + 4642: uint16(17728), + 4643: uint16(17727), + 4644: uint16(8975), + 4645: uint16(17730), + 4646: uint16(7685), + 4647: uint16(17731), + 4648: uint16(17732), + 4649: uint16(11799), + 4650: uint16(17733), + 4651: uint16(17734), + 4652: uint16(17736), + 4653: uint16(17735), + 4654: uint16(9988), + 4655: uint16(9560), + 4656: uint16(11805), + 4657: uint16(9992), + 4658: uint16(17738), + 4659: uint16(7474), + 4660: uint16(10249), + 4661: uint16(17739), + 4662: uint16(17737), + 4663: uint16(4909), + 4664: uint16(5939), + 4665: uint16(6727), + 4666: uint16(10061), + 4667: uint16(5897), + 4668: uint16(10786), + 4669: uint16(17742), + 4670: uint16(17740), + 4671: uint16(6189), + 4672: uint16(6190), + 4673: uint16(3912), + 4674: uint16(6471), + 4675: uint16(9784), + 4676: uint16(3902), + 4677: uint16(17747), + 4678: uint16(8735), + 4679: uint16(9783), + 4680: uint16(8506), + 4681: uint16(17749), + 4682: uint16(17745), + 4683: uint16(17748), + 4684: uint16(17743), + 4685: uint16(17746), + 4686: uint16(10757), + 4687: uint16(5940), + 4688: uint16(3932), + 4689: uint16(17744), + 4690: uint16(17751), + 4691: uint16(17752), + 4692: uint16(9496), + 4693: uint16(5402), + 4694: uint16(17925), + 4695: uint16(9756), + 4696: uint16(6728), + 4697: uint16(5403), + 4698: uint16(7975), + 4699: uint16(11813), + 4700: uint16(11021), + 4701: uint16(17750), + 4702: uint16(7987), + 4703: uint16(5170), + 4704: uint16(17753), + 4705: uint16(17755), + 4706: uint16(17754), + 4707: uint16(17756), + 4708: uint16(8709), + 4709: uint16(9757), + 4710: uint16(8976), + 4711: uint16(17922), + 4712: uint16(17921), + 4713: uint16(17757), + 4714: uint16(7732), + 4715: uint16(10308), + 4716: uint16(17924), + 4717: uint16(17923), + 4718: uint16(6191), + 4719: uint16(11826), + 4720: uint16(17940), + 4721: uint16(17928), + 4722: uint16(17929), + 4723: uint16(6991), + 4724: uint16(17927), + 4725: uint16(6231), + 4726: uint16(17926), + 4727: uint16(17930), + 4728: uint16(8977), + 4729: uint16(10497), + 4730: uint16(8194), + 4731: uint16(8507), + 4732: uint16(17934), + 4733: uint16(17935), + 4734: uint16(17931), + 4735: uint16(17932), + 4736: uint16(17933), + 4737: uint16(6192), + 4738: uint16(17941), + 4739: uint16(17937), + 4740: uint16(10309), + 4741: uint16(10827), + 4742: uint16(10247), + 4743: uint16(17936), + 4744: uint16(17939), + 4745: uint16(17938), + 4746: uint16(10787), + 4747: uint16(17942), + 4748: uint16(17943), + 4749: uint16(8214), + 4750: uint16(17944), + 4751: uint16(17946), + 4752: uint16(17950), + 4753: uint16(17947), + 4754: uint16(17945), + 4755: uint16(9758), + 4756: uint16(17948), + 4757: uint16(17949), + 4758: uint16(4369), + 4759: uint16(17956), + 4760: uint16(17951), + 4761: uint16(17952), + 4762: uint16(17953), + 4763: uint16(8448), + 4764: uint16(17955), + 4765: uint16(17954), + 4766: uint16(17957), + 4767: uint16(17958), + 4768: uint16(17959), + 4769: uint16(7714), + 4770: uint16(4424), + 4771: uint16(17960), + 4772: uint16(11574), + 4773: uint16(6922), + 4774: uint16(7180), + 4775: uint16(6729), + 4776: uint16(8758), + 4777: uint16(17961), + 4778: uint16(17962), + 4779: uint16(4112), + 4780: uint16(17963), + 4781: uint16(17964), + 4782: uint16(17965), + 4783: uint16(17966), + 4784: uint16(17967), + 4785: uint16(5404), + 4786: uint16(14601), + 4787: uint16(17968), + 4788: uint16(8004), + 4789: uint16(17969), + 4790: uint16(6954), + 4791: uint16(17970), + 4792: uint16(12047), + 4793: uint16(17971), + 4794: uint16(10557), + 4795: uint16(4923), + 4796: uint16(8195), + 4797: uint16(7223), + 4798: uint16(10320), + 4799: uint16(7181), + 4800: uint16(17972), + 4801: uint16(6193), + 4802: uint16(17973), + 4803: uint16(10027), + 4804: uint16(17987), + 4805: uint16(17975), + 4806: uint16(8488), + 4807: uint16(9812), + 4808: uint16(5918), + 4809: uint16(17974), + 4810: uint16(8196), + 4811: uint16(17976), + 4812: uint16(9049), + 4813: uint16(17978), + 4814: uint16(17977), + 4815: uint16(17980), + 4816: uint16(17979), + 4817: uint16(17981), + 4818: uint16(17983), + 4819: uint16(17982), + 4820: uint16(4910), + 4821: uint16(17984), + 4822: uint16(17985), + 4823: uint16(17986), + 4824: uint16(6416), + 4825: uint16(11560), + 4826: uint16(17988), + 4827: uint16(7686), + 4828: uint16(4175), + 4829: uint16(17989), + 4830: uint16(17990), + 4831: uint16(17991), + 4832: uint16(3921), + 4833: uint16(17992), + 4834: uint16(17993), + 4835: uint16(10310), + 4836: uint16(6950), + 4837: uint16(17995), + 4838: uint16(4616), + 4839: uint16(3857), + 4840: uint16(17994), + 4841: uint16(17997), + 4842: uint16(9773), + 4843: uint16(7715), + 4844: uint16(4405), + 4845: uint16(10758), + 4846: uint16(5692), + 4847: uint16(5435), + 4848: uint16(17996), + 4849: uint16(4425), + 4850: uint16(4866), + 4851: uint16(4176), + 4852: uint16(18001), + 4853: uint16(11593), + 4854: uint16(8508), + 4855: uint16(10275), + 4856: uint16(18013), + 4857: uint16(4406), + 4858: uint16(18011), + 4859: uint16(18009), + 4860: uint16(18000), + 4861: uint16(17998), + 4862: uint16(17999), + 4863: uint16(6978), + 4864: uint16(5451), + 4865: uint16(8790), + 4866: uint16(9520), + 4867: uint16(4144), + 4868: uint16(18003), + 4869: uint16(18002), + 4870: uint16(18008), + 4871: uint16(18004), + 4872: uint16(18007), + 4873: uint16(11055), + 4874: uint16(18006), + 4875: uint16(4407), + 4876: uint16(4700), + 4877: uint16(18010), + 4878: uint16(18012), + 4879: uint16(5683), + 4880: uint16(18178), + 4881: uint16(18187), + 4882: uint16(18188), + 4883: uint16(3850), + 4884: uint16(18195), + 4885: uint16(3920), + 4886: uint16(18186), + 4887: uint16(18185), + 4888: uint16(18180), + 4889: uint16(18179), + 4890: uint16(18177), + 4891: uint16(18176), + 4892: uint16(8770), + 4893: uint16(8538), + 4894: uint16(18182), + 4895: uint16(18181), + 4896: uint16(18184), + 4897: uint16(8271), + 4898: uint16(5684), + 4899: uint16(4128), + 4900: uint16(18183), + 4901: uint16(6194), + 4902: uint16(8272), + 4903: uint16(18201), + 4904: uint16(18202), + 4905: uint16(4408), + 4906: uint16(4365), + 4907: uint16(18199), + 4908: uint16(18189), + 4909: uint16(18197), + 4910: uint16(18204), + 4911: uint16(18198), + 4912: uint16(18196), + 4913: uint16(18005), + 4914: uint16(18194), + 4915: uint16(18190), + 4916: uint16(4911), + 4917: uint16(18192), + 4918: uint16(18203), + 4919: uint16(18193), + 4920: uint16(18205), + 4921: uint16(18191), + 4922: uint16(9819), + 4923: uint16(11336), + 4924: uint16(18200), + 4925: uint16(18222), + 4926: uint16(18214), + 4927: uint16(7770), + 4928: uint16(5157), + 4929: uint16(5436), + 4930: uint16(18209), + 4931: uint16(4410), + 4932: uint16(7475), + 4933: uint16(18212), + 4934: uint16(6457), + 4935: uint16(9264), + 4936: uint16(18217), + 4937: uint16(10573), + 4938: uint16(18208), + 4939: uint16(4409), + 4940: uint16(5941), + 4941: uint16(10248), + 4942: uint16(18218), + 4943: uint16(18206), + 4944: uint16(18215), + 4945: uint16(18225), + 4946: uint16(18210), + 4947: uint16(18211), + 4948: uint16(9497), + 4949: uint16(18216), + 4950: uint16(18213), + 4951: uint16(10759), + 4952: uint16(18219), + 4953: uint16(3903), + 4954: uint16(18207), + 4955: uint16(18221), + 4956: uint16(18220), + 4957: uint16(9802), + 4958: uint16(18227), + 4959: uint16(18238), + 4960: uint16(4701), + 4961: uint16(18241), + 4962: uint16(18223), + 4963: uint16(18228), + 4964: uint16(11341), + 4965: uint16(18237), + 4966: uint16(11316), + 4967: uint16(11529), + 4968: uint16(8791), + 4969: uint16(4682), + 4970: uint16(10321), + 4971: uint16(18243), + 4972: uint16(9472), + 4973: uint16(3856), + 4974: uint16(18236), + 4975: uint16(18232), + 4976: uint16(8273), + 4977: uint16(18226), + 4978: uint16(18234), + 4979: uint16(18239), + 4980: uint16(9739), + 4981: uint16(3849), + 4982: uint16(18231), + 4983: uint16(18240), + 4984: uint16(10327), + 4985: uint16(18235), + 4986: uint16(18230), + 4987: uint16(7476), + 4988: uint16(7182), + 4989: uint16(6923), + 4990: uint16(11063), + 4991: uint16(10278), + 4992: uint16(18246), + 4993: uint16(18255), + 4994: uint16(18233), + 4995: uint16(4694), + 4996: uint16(7511), + 4997: uint16(18244), + 4998: uint16(18249), + 4999: uint16(8274), + 5000: uint16(18245), + 5001: uint16(18252), + 5002: uint16(8766), + 5003: uint16(18253), + 5004: uint16(11317), + 5005: uint16(18242), + 5006: uint16(4631), + 5007: uint16(18248), + 5008: uint16(18251), + 5009: uint16(11019), + 5010: uint16(18254), + 5011: uint16(18247), + 5012: uint16(18250), + 5013: uint16(10760), + 5014: uint16(11776), + 5015: uint16(18258), + 5016: uint16(18265), + 5017: uint16(18257), + 5018: uint16(6946), + 5019: uint16(18224), + 5020: uint16(10541), + 5021: uint16(11009), + 5022: uint16(18264), + 5023: uint16(18263), + 5024: uint16(18259), + 5025: uint16(18260), + 5026: uint16(4117), + 5027: uint16(18262), + 5028: uint16(18256), + 5029: uint16(9012), + 5030: uint16(18261), + 5031: uint16(3933), + 5032: uint16(8449), + 5033: uint16(10530), + 5034: uint16(18266), + 5035: uint16(18432), + 5036: uint16(10040), + 5037: uint16(18269), + 5038: uint16(7477), + 5039: uint16(6952), + 5040: uint16(18434), + 5041: uint16(5405), + 5042: uint16(18435), + 5043: uint16(10328), + 5044: uint16(18268), + 5045: uint16(18229), + 5046: uint16(18267), + 5047: uint16(11822), + 5048: uint16(9473), + 5049: uint16(10322), + 5050: uint16(18442), + 5051: uint16(18448), + 5052: uint16(18449), + 5053: uint16(18436), + 5054: uint16(9813), + 5055: uint16(18446), + 5056: uint16(18438), + 5057: uint16(18440), + 5058: uint16(18450), + 5059: uint16(18439), + 5060: uint16(18443), + 5061: uint16(4177), + 5062: uint16(9540), + 5063: uint16(18444), + 5064: uint16(18447), + 5065: uint16(18437), + 5066: uint16(8197), + 5067: uint16(18441), + 5068: uint16(6662), + 5069: uint16(7716), + 5070: uint16(5647), + 5071: uint16(11091), + 5072: uint16(11096), + 5073: uint16(7249), + 5074: uint16(18454), + 5075: uint16(18452), + 5076: uint16(11821), + 5077: uint16(18451), + 5078: uint16(11348), + 5079: uint16(18453), + 5080: uint16(18455), + 5081: uint16(18456), + 5082: uint16(18459), + 5083: uint16(18457), + 5084: uint16(9474), + 5085: uint16(18458), + 5086: uint16(10028), + 5087: uint16(18445), + 5088: uint16(7250), + 5089: uint16(18460), + 5090: uint16(18465), + 5091: uint16(8275), + 5092: uint16(18464), + 5093: uint16(18433), + 5094: uint16(18466), + 5095: uint16(8232), + 5096: uint16(18461), + 5097: uint16(18463), + 5098: uint16(18462), + 5099: uint16(15376), + 5100: uint16(15361), + 5101: uint16(18468), + 5102: uint16(18467), + 5103: uint16(11349), + 5104: uint16(16667), + 5105: uint16(18469), + 5106: uint16(18470), + 5107: uint16(18471), + 5108: uint16(5942), + 5109: uint16(5171), + 5110: uint16(18473), + 5111: uint16(12348), + 5112: uint16(5204), + 5113: uint16(11545), + 5114: uint16(5458), + 5115: uint16(18474), + 5116: uint16(18475), + 5117: uint16(8781), + 5118: uint16(18476), + 5119: uint16(9561), + 5120: uint16(3865), + 5121: uint16(4418), + 5122: uint16(18481), + 5123: uint16(18482), + 5124: uint16(18477), + 5125: uint16(6684), + 5126: uint16(18478), + 5127: uint16(9761), + 5128: uint16(18479), + 5129: uint16(18480), + 5130: uint16(18490), + 5131: uint16(18484), + 5132: uint16(18487), + 5133: uint16(18483), + 5134: uint16(18485), + 5135: uint16(18486), + 5136: uint16(6967), + 5137: uint16(18488), + 5138: uint16(8736), + 5139: uint16(5685), + 5140: uint16(4641), + 5141: uint16(18491), + 5142: uint16(4638), + 5143: uint16(18496), + 5144: uint16(18492), + 5145: uint16(18495), + 5146: uint16(10009), + 5147: uint16(18493), + 5148: uint16(18494), + 5149: uint16(10279), + 5150: uint16(10041), + 5151: uint16(18497), + 5152: uint16(8540), + 5153: uint16(18507), + 5154: uint16(18503), + 5155: uint16(4426), + 5156: uint16(18501), + 5157: uint16(10761), + 5158: uint16(18502), + 5159: uint16(18499), + 5160: uint16(18500), + 5161: uint16(18505), + 5162: uint16(18508), + 5163: uint16(18506), + 5164: uint16(18504), + 5165: uint16(18498), + 5166: uint16(8759), + 5167: uint16(18515), + 5168: uint16(11017), + 5169: uint16(18513), + 5170: uint16(18514), + 5171: uint16(18509), + 5172: uint16(18511), + 5173: uint16(18512), + 5174: uint16(18510), + 5175: uint16(8005), + 5176: uint16(11800), + 5177: uint16(18519), + 5178: uint16(18520), + 5179: uint16(18688), + 5180: uint16(7689), + 5181: uint16(18522), + 5182: uint16(18525), + 5183: uint16(18517), + 5184: uint16(18516), + 5185: uint16(18689), + 5186: uint16(4411), + 5187: uint16(18523), + 5188: uint16(18690), + 5189: uint16(18524), + 5190: uint16(18521), + 5191: uint16(8978), + 5192: uint16(18518), + 5193: uint16(9799), + 5194: uint16(18694), + 5195: uint16(11290), + 5196: uint16(18693), + 5197: uint16(18692), + 5198: uint16(18701), + 5199: uint16(18695), + 5200: uint16(18703), + 5201: uint16(11333), + 5202: uint16(18706), + 5203: uint16(18697), + 5204: uint16(18698), + 5205: uint16(18702), + 5206: uint16(18705), + 5207: uint16(18704), + 5208: uint16(18696), + 5209: uint16(18699), + 5210: uint16(18716), + 5211: uint16(18709), + 5212: uint16(18707), + 5213: uint16(18708), + 5214: uint16(18713), + 5215: uint16(18714), + 5216: uint16(4617), + 5217: uint16(5153), + 5218: uint16(18712), + 5219: uint16(18691), + 5220: uint16(18711), + 5221: uint16(18715), + 5222: uint16(18710), + 5223: uint16(18717), + 5224: uint16(18719), + 5225: uint16(18718), + 5226: uint16(18721), + 5227: uint16(18720), + 5228: uint16(18489), + 5229: uint16(18725), + 5230: uint16(18722), + 5231: uint16(18723), + 5232: uint16(18724), + 5233: uint16(18726), + 5234: uint16(5707), + 5235: uint16(18728), + 5236: uint16(18727), + 5237: uint16(7183), + 5238: uint16(6195), + 5239: uint16(15622), + 5240: uint16(18729), + 5241: uint16(7216), + 5242: uint16(4632), + 5243: uint16(18730), + 5244: uint16(4145), + 5245: uint16(7478), + 5246: uint16(18731), + 5247: uint16(6196), + 5248: uint16(18732), + 5249: uint16(3904), + 5250: uint16(10268), + 5251: uint16(18733), + 5252: uint16(7753), + 5253: uint16(18740), + 5254: uint16(18737), + 5255: uint16(8782), + 5256: uint16(18738), + 5257: uint16(18735), + 5258: uint16(5437), + 5259: uint16(18734), + 5260: uint16(18741), + 5261: uint16(5653), + 5262: uint16(8509), + 5263: uint16(18747), + 5264: uint16(18743), + 5265: uint16(8468), + 5266: uint16(18742), + 5267: uint16(18745), + 5268: uint16(18736), + 5269: uint16(18746), + 5270: uint16(18748), + 5271: uint16(10062), + 5272: uint16(18744), + 5273: uint16(18749), + 5274: uint16(18751), + 5275: uint16(5938), + 5276: uint16(18739), + 5277: uint16(3872), + 5278: uint16(18750), + 5279: uint16(6458), + 5280: uint16(11605), + 5281: uint16(18752), + 5282: uint16(18753), + 5283: uint16(8276), + 5284: uint16(11521), + 5285: uint16(18754), + 5286: uint16(11284), + 5287: uint16(18755), + 5288: uint16(18756), + 5289: uint16(10563), + 5290: uint16(18757), + 5291: uint16(6431), + 5292: uint16(11522), + 5293: uint16(18762), + 5294: uint16(18763), + 5295: uint16(7479), + 5296: uint16(18761), + 5297: uint16(11334), + 5298: uint16(18758), + 5299: uint16(18760), + 5300: uint16(7964), + 5301: uint16(7773), + 5302: uint16(18759), + 5303: uint16(18764), + 5304: uint16(10498), + 5305: uint16(18766), + 5306: uint16(18765), + 5307: uint16(4683), + 5308: uint16(10762), + 5309: uint16(18767), + 5310: uint16(18779), + 5311: uint16(18769), + 5312: uint16(18770), + 5313: uint16(18771), + 5314: uint16(18772), + 5315: uint16(18776), + 5316: uint16(18777), + 5317: uint16(18775), + 5318: uint16(18773), + 5319: uint16(18768), + 5320: uint16(18774), + 5321: uint16(18778), + 5322: uint16(20246), + 5323: uint16(4359), + 5324: uint16(18781), + 5325: uint16(5438), + 5326: uint16(18780), + 5327: uint16(18945), + 5328: uint16(18944), + 5329: uint16(18947), + 5330: uint16(18946), + 5331: uint16(18948), + 5332: uint16(7184), + 5333: uint16(18949), + 5334: uint16(18950), + 5335: uint16(18951), + 5336: uint16(7965), + 5337: uint16(11318), + 5338: uint16(18952), + 5339: uint16(10499), + 5340: uint16(9765), + 5341: uint16(18953), + 5342: uint16(18954), + 5343: uint16(5898), + 5344: uint16(5131), + 5345: uint16(18955), + 5346: uint16(6730), + 5347: uint16(9760), + 5348: uint16(18956), + 5349: uint16(4655), + 5350: uint16(18957), + 5351: uint16(18959), + 5352: uint16(11350), + 5353: uint16(18958), + 5354: uint16(7717), + 5355: uint16(18960), + 5356: uint16(18961), + 5357: uint16(18962), + 5358: uint16(4912), + 5359: uint16(18963), + 5360: uint16(18964), + 5361: uint16(18965), + 5362: uint16(18966), + 5363: uint16(4656), + 5364: uint16(18967), + 5365: uint16(18968), + 5366: uint16(18969), + 5367: uint16(4433), + 5368: uint16(7687), + 5369: uint16(18970), + 5370: uint16(18971), + 5371: uint16(18972), + 5372: uint16(5919), + 5373: uint16(9050), + 5374: uint16(18973), + 5375: uint16(5686), + 5376: uint16(7733), + 5377: uint16(18976), + 5378: uint16(9475), + 5379: uint16(18975), + 5380: uint16(5648), + 5381: uint16(18974), + 5382: uint16(8534), + 5383: uint16(5132), + 5384: uint16(18977), + 5385: uint16(18978), + 5386: uint16(7480), + 5387: uint16(5708), + 5388: uint16(18979), + 5389: uint16(10763), + 5390: uint16(7998), + 5391: uint16(5205), + 5392: uint16(11092), + 5393: uint16(8233), + 5394: uint16(18980), + 5395: uint16(7718), + 5396: uint16(8783), + 5397: uint16(7481), + 5398: uint16(18981), + 5399: uint16(18984), + 5400: uint16(18985), + 5401: uint16(6429), + 5402: uint16(8481), + 5403: uint16(18983), + 5404: uint16(7482), + 5405: uint16(10269), + 5406: uint16(18982), + 5407: uint16(6731), + 5408: uint16(4146), + 5409: uint16(18989), + 5410: uint16(5687), + 5411: uint16(6733), + 5412: uint16(6732), + 5413: uint16(11820), + 5414: uint16(18988), + 5415: uint16(18987), + 5416: uint16(8198), + 5417: uint16(5164), + 5418: uint16(11810), + 5419: uint16(4633), + 5420: uint16(7483), + 5421: uint16(18986), + 5422: uint16(18991), + 5423: uint16(18992), + 5424: uint16(18990), + 5425: uint16(5943), + 5426: uint16(11295), + 5427: uint16(6734), + 5428: uint16(9734), + 5429: uint16(18995), + 5430: uint16(7967), + 5431: uint16(8737), + 5432: uint16(11285), + 5433: uint16(18998), + 5434: uint16(5963), + 5435: uint16(7966), + 5436: uint16(18994), + 5437: uint16(18999), + 5438: uint16(5964), + 5439: uint16(18996), + 5440: uint16(18997), + 5441: uint16(18993), + 5442: uint16(8001), + 5443: uint16(9512), + 5444: uint16(8718), + 5445: uint16(4412), + 5446: uint16(10063), + 5447: uint16(5154), + 5448: uint16(8979), + 5449: uint16(19002), + 5450: uint16(19000), + 5451: uint16(8747), + 5452: uint16(7968), + 5453: uint16(4913), + 5454: uint16(19001), + 5455: uint16(7738), + 5456: uint16(11561), + 5457: uint16(11807), + 5458: uint16(19003), + 5459: uint16(19014), + 5460: uint16(8980), + 5461: uint16(19013), + 5462: uint16(19010), + 5463: uint16(19018), + 5464: uint16(19011), + 5465: uint16(19007), + 5466: uint16(9051), + 5467: uint16(19006), + 5468: uint16(19004), + 5469: uint16(11264), + 5470: uint16(6735), + 5471: uint16(19008), + 5472: uint16(19005), + 5473: uint16(19012), + 5474: uint16(7251), + 5475: uint16(5920), + 5476: uint16(8537), + 5477: uint16(10788), + 5478: uint16(4153), + 5479: uint16(3905), + 5480: uint16(9476), + 5481: uint16(19016), + 5482: uint16(19015), + 5483: uint16(9541), + 5484: uint16(19020), + 5485: uint16(19009), + 5486: uint16(19019), + 5487: uint16(19021), + 5488: uint16(5899), + 5489: uint16(19017), + 5490: uint16(6197), + 5491: uint16(6964), + 5492: uint16(19022), + 5493: uint16(11319), + 5494: uint16(19025), + 5495: uint16(19028), + 5496: uint16(19026), + 5497: uint16(10260), + 5498: uint16(19023), + 5499: uint16(5439), + 5500: uint16(19027), + 5501: uint16(19029), + 5502: uint16(19033), + 5503: uint16(19030), + 5504: uint16(19032), + 5505: uint16(19031), + 5506: uint16(19034), + 5507: uint16(6928), + 5508: uint16(19036), + 5509: uint16(19035), + 5510: uint16(10311), + 5511: uint16(19200), + 5512: uint16(5688), + 5513: uint16(19037), + 5514: uint16(19201), + 5515: uint16(19202), + 5516: uint16(5155), + 5517: uint16(17696), + 5518: uint16(7512), + 5519: uint16(19203), + 5520: uint16(5965), + 5521: uint16(19204), + 5522: uint16(19205), + 5523: uint16(6685), + 5524: uint16(14637), + 5525: uint16(19206), + 5526: uint16(19207), + 5527: uint16(7185), + 5528: uint16(19208), + 5529: uint16(19209), + 5530: uint16(19210), + 5531: uint16(19211), + 5532: uint16(19212), + 5533: uint16(8714), + 5534: uint16(19213), + 5535: uint16(19215), + 5536: uint16(19214), + 5537: uint16(9477), + 5538: uint16(19216), + 5539: uint16(10764), + 5540: uint16(19217), + 5541: uint16(19218), + 5542: uint16(19219), + 5543: uint16(19220), + 5544: uint16(9529), + 5545: uint16(7484), + 5546: uint16(19221), + 5547: uint16(6218), + 5548: uint16(12045), + 5549: uint16(19222), + 5550: uint16(19223), + 5551: uint16(10270), + 5552: uint16(19224), + 5553: uint16(19232), + 5554: uint16(19225), + 5555: uint16(19227), + 5556: uint16(19226), + 5557: uint16(19228), + 5558: uint16(10789), + 5559: uint16(19229), + 5560: uint16(19230), + 5561: uint16(19231), + 5562: uint16(19233), + 5563: uint16(4620), + 5564: uint16(9030), + 5565: uint16(10312), + 5566: uint16(6465), + 5567: uint16(6198), + 5568: uint16(10286), + 5569: uint16(4414), + 5570: uint16(10029), + 5571: uint16(19236), + 5572: uint16(4914), + 5573: uint16(7988), + 5574: uint16(19235), + 5575: uint16(19240), + 5576: uint16(8792), + 5577: uint16(11074), + 5578: uint16(19238), + 5579: uint16(19239), + 5580: uint16(5133), + 5581: uint16(19241), + 5582: uint16(9794), + 5583: uint16(8510), + 5584: uint16(10064), + 5585: uint16(9244), + 5586: uint16(19237), + 5587: uint16(10790), + 5588: uint16(4427), + 5589: uint16(19243), + 5590: uint16(11783), + 5591: uint16(8993), + 5592: uint16(11812), + 5593: uint16(6736), + 5594: uint16(19242), + 5595: uint16(8464), + 5596: uint16(19259), + 5597: uint16(8199), + 5598: uint16(9559), + 5599: uint16(10287), + 5600: uint16(19246), + 5601: uint16(6686), + 5602: uint16(6737), + 5603: uint16(7485), + 5604: uint16(9796), + 5605: uint16(5900), + 5606: uint16(19245), + 5607: uint16(19244), + 5608: uint16(10313), + 5609: uint16(6944), + 5610: uint16(9265), + 5611: uint16(19248), + 5612: uint16(19249), + 5613: uint16(6199), + 5614: uint16(19247), + 5615: uint16(19250), + 5616: uint16(19251), + 5617: uint16(19253), + 5618: uint16(8450), + 5619: uint16(19252), + 5620: uint16(4933), + 5621: uint16(19255), + 5622: uint16(19254), + 5623: uint16(19256), + 5624: uint16(19258), + 5625: uint16(19260), + 5626: uint16(19261), + 5627: uint16(7989), + 5628: uint16(6958), + 5629: uint16(19262), + 5630: uint16(4657), + 5631: uint16(19263), + 5632: uint16(8277), + 5633: uint16(19264), + 5634: uint16(19265), + 5635: uint16(10314), + 5636: uint16(5134), + 5637: uint16(19266), + 5638: uint16(8981), + 5639: uint16(4154), + 5640: uint16(19267), + 5641: uint16(6992), + 5642: uint16(7765), + 5643: uint16(8460), + 5644: uint16(19270), + 5645: uint16(19269), + 5646: uint16(19268), + 5647: uint16(19276), + 5648: uint16(19274), + 5649: uint16(19271), + 5650: uint16(19273), + 5651: uint16(19272), + 5652: uint16(19275), + 5653: uint16(5206), + 5654: uint16(19279), + 5655: uint16(7990), + 5656: uint16(19280), + 5657: uint16(5944), + 5658: uint16(19277), + 5659: uint16(19278), + 5660: uint16(11784), + 5661: uint16(8982), + 5662: uint16(8200), + 5663: uint16(19281), + 5664: uint16(19284), + 5665: uint16(19282), + 5666: uint16(19283), + 5667: uint16(11320), + 5668: uint16(9478), + 5669: uint16(19287), + 5670: uint16(19285), + 5671: uint16(19286), + 5672: uint16(19288), + 5673: uint16(19464), + 5674: uint16(19291), + 5675: uint16(19292), + 5676: uint16(19290), + 5677: uint16(19289), + 5678: uint16(9052), + 5679: uint16(19456), + 5680: uint16(19460), + 5681: uint16(19457), + 5682: uint16(19293), + 5683: uint16(19458), + 5684: uint16(19459), + 5685: uint16(19466), + 5686: uint16(19461), + 5687: uint16(7991), + 5688: uint16(19463), + 5689: uint16(19465), + 5690: uint16(19462), + 5691: uint16(19468), + 5692: uint16(7186), + 5693: uint16(19467), + 5694: uint16(19469), + 5695: uint16(19470), + 5696: uint16(19473), + 5697: uint16(19472), + 5698: uint16(19471), + 5699: uint16(19475), + 5700: uint16(19474), + 5701: uint16(11093), + 5702: uint16(19477), + 5703: uint16(19476), + 5704: uint16(19478), + 5705: uint16(19479), + 5706: uint16(19481), + 5707: uint16(19480), + 5708: uint16(7719), + 5709: uint16(19482), + 5710: uint16(5452), + 5711: uint16(19483), + 5712: uint16(19485), + 5713: uint16(19486), + 5714: uint16(19487), + 5715: uint16(19484), + 5716: uint16(19488), + 5717: uint16(6965), + 5718: uint16(19489), + 5719: uint16(5135), + 5720: uint16(5650), + 5721: uint16(5901), + 5722: uint16(19490), + 5723: uint16(9551), + 5724: uint16(9245), + 5725: uint16(19491), + 5726: uint16(19494), + 5727: uint16(6931), + 5728: uint16(19493), + 5729: uint16(19492), + 5730: uint16(5689), + 5731: uint16(19495), + 5732: uint16(4658), + 5733: uint16(19497), + 5734: uint16(6459), + 5735: uint16(19496), + 5736: uint16(19505), + 5737: uint16(19499), + 5738: uint16(19501), + 5739: uint16(10564), + 5740: uint16(19498), + 5741: uint16(19500), + 5742: uint16(19504), + 5743: uint16(19502), + 5744: uint16(5136), + 5745: uint16(19503), + 5746: uint16(19506), + 5747: uint16(9785), + 5748: uint16(11575), + 5749: uint16(7187), + 5750: uint16(19507), + 5751: uint16(11265), + 5752: uint16(19509), + 5753: uint16(19508), + 5754: uint16(19512), + 5755: uint16(11296), + 5756: uint16(19511), + 5757: uint16(4684), + 5758: uint16(19510), + 5759: uint16(19515), + 5760: uint16(19514), + 5761: uint16(19513), + 5762: uint16(9233), + 5763: uint16(19516), + 5764: uint16(19517), + 5765: uint16(19518), + 5766: uint16(6219), + 5767: uint16(5636), + 5768: uint16(19519), + 5769: uint16(19520), + 5770: uint16(19521), + 5771: uint16(7720), + 5772: uint16(19522), + 5773: uint16(6924), + 5774: uint16(19523), + 5775: uint16(19524), + 5776: uint16(12544), + 5777: uint16(12381), + 5778: uint16(19525), + 5779: uint16(17487), + 5780: uint16(19526), + 5781: uint16(8707), + 5782: uint16(7690), + 5783: uint16(9759), + 5784: uint16(19527), + 5785: uint16(10548), + 5786: uint16(9011), + 5787: uint16(6237), + 5788: uint16(8712), + 5789: uint16(4105), + 5790: uint16(10839), + 5791: uint16(7734), + 5792: uint16(5693), + 5793: uint16(5440), + 5794: uint16(10549), + 5795: uint16(19528), + 5796: uint16(19530), + 5797: uint16(19529), + 5798: uint16(4415), + 5799: uint16(9557), + 5800: uint16(19531), + 5801: uint16(9814), + 5802: uint16(9234), + 5803: uint16(19532), + 5804: uint16(7217), + 5805: uint16(19534), + 5806: uint16(11041), + 5807: uint16(19549), + 5808: uint16(19536), + 5809: uint16(19537), + 5810: uint16(9000), + 5811: uint16(8511), + 5812: uint16(8278), + 5813: uint16(9479), + 5814: uint16(19535), + 5815: uint16(5172), + 5816: uint16(19544), + 5817: uint16(19541), + 5818: uint16(19716), + 5819: uint16(9480), + 5820: uint16(8767), + 5821: uint16(19538), + 5822: uint16(9053), + 5823: uint16(9266), + 5824: uint16(19539), + 5825: uint16(19543), + 5826: uint16(7743), + 5827: uint16(9798), + 5828: uint16(9003), + 5829: uint16(7969), + 5830: uint16(19542), + 5831: uint16(8461), + 5832: uint16(8451), + 5833: uint16(19540), + 5834: uint16(3848), + 5835: uint16(11777), + 5836: uint16(19545), + 5837: uint16(8512), + 5838: uint16(7188), + 5839: uint16(7721), + 5840: uint16(19547), + 5841: uint16(19546), + 5842: uint16(3918), + 5843: uint16(19548), + 5844: uint16(10254), + 5845: uint16(19718), + 5846: uint16(9530), + 5847: uint16(7754), + 5848: uint16(8760), + 5849: uint16(5463), + 5850: uint16(19717), + 5851: uint16(11286), + 5852: uint16(4126), + 5853: uint16(10550), + 5854: uint16(4416), + 5855: uint16(19712), + 5856: uint16(19713), + 5857: uint16(19714), + 5858: uint16(19715), + 5859: uint16(9498), + 5860: uint16(8706), + 5861: uint16(3906), + 5862: uint16(19719), + 5863: uint16(19720), + 5864: uint16(21250), + 5865: uint16(8476), + 5866: uint16(19721), + 5867: uint16(4178), + 5868: uint16(8235), + 5869: uint16(5902), + 5870: uint16(11321), + 5871: uint16(19722), + 5872: uint16(9227), + 5873: uint16(8279), + 5874: uint16(6966), + 5875: uint16(19723), + 5876: uint16(19726), + 5877: uint16(7236), + 5878: uint16(19724), + 5879: uint16(8202), + 5880: uint16(8201), + 5881: uint16(3907), + 5882: uint16(11562), + 5883: uint16(19728), + 5884: uint16(10065), + 5885: uint16(19730), + 5886: uint16(19729), + 5887: uint16(19727), + 5888: uint16(16963), + 5889: uint16(4915), + 5890: uint16(19533), + 5891: uint16(19732), + 5892: uint16(19731), + 5893: uint16(19733), + 5894: uint16(11287), + 5895: uint16(9536), + 5896: uint16(10765), + 5897: uint16(19734), + 5898: uint16(6968), + 5899: uint16(19735), + 5900: uint16(19736), + 5901: uint16(19737), + 5902: uint16(9216), + 5903: uint16(3913), + 5904: uint16(6200), + 5905: uint16(11801), + 5906: uint16(19741), + 5907: uint16(5651), + 5908: uint16(19738), + 5909: uint16(19739), + 5910: uint16(10323), + 5911: uint16(4659), + 5912: uint16(11288), + 5913: uint16(5406), + 5914: uint16(9267), + 5915: uint16(19742), + 5916: uint16(19743), + 5917: uint16(19744), + 5918: uint16(9217), + 5919: uint16(19746), + 5920: uint16(19745), + 5921: uint16(9522), + 5922: uint16(19747), + 5923: uint16(7189), + 5924: uint16(6975), + 5925: uint16(9786), + 5926: uint16(8784), + 5927: uint16(6993), + 5928: uint16(7755), + 5929: uint16(19748), + 5930: uint16(19749), + 5931: uint16(7740), + 5932: uint16(19750), + 5933: uint16(19751), + 5934: uint16(19752), + 5935: uint16(11342), + 5936: uint16(7190), + 5937: uint16(19754), + 5938: uint16(19753), + 5939: uint16(6201), + 5940: uint16(6226), + 5941: uint16(6687), + 5942: uint16(19757), + 5943: uint16(7237), + 5944: uint16(19756), + 5945: uint16(19755), + 5946: uint16(8520), + 5947: uint16(5966), + 5948: uint16(7970), + 5949: uint16(9999), + 5950: uint16(7192), + 5951: uint16(19758), + 5952: uint16(7486), + 5953: uint16(19761), + 5954: uint16(19759), + 5955: uint16(19760), + 5956: uint16(19763), + 5957: uint16(19762), + 5958: uint16(7513), + 5959: uint16(19764), + 5960: uint16(19765), + 5961: uint16(19766), + 5962: uint16(10031), + 5963: uint16(6450), + 5964: uint16(6976), + 5965: uint16(19767), + 5966: uint16(19768), + 5967: uint16(11523), + 5968: uint16(7204), + 5969: uint16(11085), + 5970: uint16(11563), + 5971: uint16(19769), + 5972: uint16(5441), + 5973: uint16(19770), + 5974: uint16(9218), + 5975: uint16(19773), + 5976: uint16(4695), + 5977: uint16(7722), + 5978: uint16(19771), + 5979: uint16(19772), + 5980: uint16(9023), + 5981: uint16(10804), + 5982: uint16(5467), + 5983: uint16(19775), + 5984: uint16(19776), + 5985: uint16(19774), + 5986: uint16(19778), + 5987: uint16(9534), + 5988: uint16(4642), + 5989: uint16(19782), + 5990: uint16(19779), + 5991: uint16(19781), + 5992: uint16(19777), + 5993: uint16(20014), + 5994: uint16(19780), + 5995: uint16(11594), + 5996: uint16(5945), + 5997: uint16(19790), + 5998: uint16(9235), + 5999: uint16(19785), + 6000: uint16(19788), + 6001: uint16(19786), + 6002: uint16(19791), + 6003: uint16(19792), + 6004: uint16(19784), + 6005: uint16(19797), + 6006: uint16(4179), + 6007: uint16(19783), + 6008: uint16(9996), + 6009: uint16(19787), + 6010: uint16(7487), + 6011: uint16(6202), + 6012: uint16(10791), + 6013: uint16(5443), + 6014: uint16(7205), + 6015: uint16(9499), + 6016: uint16(8204), + 6017: uint16(19795), + 6018: uint16(19789), + 6019: uint16(19794), + 6020: uint16(11042), + 6021: uint16(8983), + 6022: uint16(19796), + 6023: uint16(19793), + 6024: uint16(8203), + 6025: uint16(19800), + 6026: uint16(19799), + 6027: uint16(19798), + 6028: uint16(10766), + 6029: uint16(7258), + 6030: uint16(19801), + 6031: uint16(10558), + 6032: uint16(4147), + 6033: uint16(10277), + 6034: uint16(8785), + 6035: uint16(5207), + 6036: uint16(19803), + 6037: uint16(6204), + 6038: uint16(6667), + 6039: uint16(19802), + 6040: uint16(7756), + 6041: uint16(7757), + 6042: uint16(19968), + 6043: uint16(19970), + 6044: uint16(7514), + 6045: uint16(19969), + 6046: uint16(19971), + 6047: uint16(5426), + 6048: uint16(10276), + 6049: uint16(6977), + 6050: uint16(11778), + 6051: uint16(19805), + 6052: uint16(6487), + 6053: uint16(11806), + 6054: uint16(19973), + 6055: uint16(19972), + 6056: uint16(19974), + 6057: uint16(19804), + 6058: uint16(9544), + 6059: uint16(9268), + 6060: uint16(9014), + 6061: uint16(19979), + 6062: uint16(8738), + 6063: uint16(19975), + 6064: uint16(19976), + 6065: uint16(5644), + 6066: uint16(19978), + 6067: uint16(5903), + 6068: uint16(19977), + 6069: uint16(7488), + 6070: uint16(4696), + 6071: uint16(19983), + 6072: uint16(6430), + 6073: uint16(8280), + 6074: uint16(9001), + 6075: uint16(4634), + 6076: uint16(19981), + 6077: uint16(19982), + 6078: uint16(8994), + 6079: uint16(19980), + 6080: uint16(19984), + 6081: uint16(19990), + 6082: uint16(19993), + 6083: uint16(19992), + 6084: uint16(9228), + 6085: uint16(19985), + 6086: uint16(19986), + 6087: uint16(19989), + 6088: uint16(19991), + 6089: uint16(5407), + 6090: uint16(19994), + 6091: uint16(19988), + 6092: uint16(19987), + 6093: uint16(19998), + 6094: uint16(19999), + 6095: uint16(20000), + 6096: uint16(19997), + 6097: uint16(19996), + 6098: uint16(7489), + 6099: uint16(9481), + 6100: uint16(19995), + 6101: uint16(20004), + 6102: uint16(20002), + 6103: uint16(20003), + 6104: uint16(20001), + 6105: uint16(8535), + 6106: uint16(20005), + 6107: uint16(20006), + 6108: uint16(20008), + 6109: uint16(4916), + 6110: uint16(20007), + 6111: uint16(11097), + 6112: uint16(20019), + 6113: uint16(20009), + 6114: uint16(20012), + 6115: uint16(20010), + 6116: uint16(20011), + 6117: uint16(20013), + 6118: uint16(20015), + 6119: uint16(20016), + 6120: uint16(20017), + 6121: uint16(20020), + 6122: uint16(20018), + 6123: uint16(20021), + 6124: uint16(20023), + 6125: uint16(20022), + 6126: uint16(8984), + 6127: uint16(11078), + 6128: uint16(20024), + 6129: uint16(8205), + 6130: uint16(20025), + 6131: uint16(10531), + 6132: uint16(20026), + 6133: uint16(4618), + 6134: uint16(4123), + 6135: uint16(4918), + 6136: uint16(4917), + 6137: uint16(20027), + 6138: uint16(20028), + 6139: uint16(20029), + 6140: uint16(20030), + 6141: uint16(20031), + 6142: uint16(4919), + 6143: uint16(4660), + 6144: uint16(6205), + 6145: uint16(10005), + 6146: uint16(20033), + 6147: uint16(20032), + 6148: uint16(20034), + 6149: uint16(4155), + 6150: uint16(20037), + 6151: uint16(20036), + 6152: uint16(20035), + 6153: uint16(20038), + 6154: uint16(20041), + 6155: uint16(3878), + 6156: uint16(20039), + 6157: uint16(20043), + 6158: uint16(20042), + 6159: uint16(20045), + 6160: uint16(20044), + 6161: uint16(20046), + 6162: uint16(9485), + 6163: uint16(20047), + 6164: uint16(20048), + 6165: uint16(20050), + 6166: uint16(20049), + 6167: uint16(10315), + 6168: uint16(20051), + 6169: uint16(20052), + 6170: uint16(6468), + 6171: uint16(20053), + 6172: uint16(20054), + 6173: uint16(10792), + 6174: uint16(8234), + 6175: uint16(3843), + 6176: uint16(8490), + 6177: uint16(20055), + 6178: uint16(10316), + 6179: uint16(20058), + 6180: uint16(20056), + 6181: uint16(6206), + 6182: uint16(20057), + 6183: uint16(5921), + 6184: uint16(10532), + 6185: uint16(20060), + 6186: uint16(20224), + 6187: uint16(20061), + 6188: uint16(20225), + 6189: uint16(4096), + 6190: uint16(7735), + 6191: uint16(7259), + 6192: uint16(4920), + 6193: uint16(20226), + 6194: uint16(9797), + 6195: uint16(20228), + 6196: uint16(4097), + 6197: uint16(20227), + 6198: uint16(8995), + 6199: uint16(11564), + 6200: uint16(9482), + 6201: uint16(20059), + 6202: uint16(11525), + 6203: uint16(5904), + 6204: uint16(11322), + 6205: uint16(5464), + 6206: uint16(11539), + 6207: uint16(5639), + 6208: uint16(8513), + 6209: uint16(17920), + 6210: uint16(20229), + 6211: uint16(4619), + 6212: uint16(7758), + 6213: uint16(4661), + 6214: uint16(20231), + 6215: uint16(20232), + 6216: uint16(20230), + 6217: uint16(5699), + 6218: uint16(6460), + 6219: uint16(7490), + 6220: uint16(4098), + 6221: uint16(11576), + 6222: uint16(20234), + 6223: uint16(19725), + 6224: uint16(20233), + 6225: uint16(20237), + 6226: uint16(20235), + 6227: uint16(20236), + 6228: uint16(20238), + 6229: uint16(20239), + 6230: uint16(11595), + 6231: uint16(20240), + 6232: uint16(20241), + 6233: uint16(7976), + 6234: uint16(10010), + 6235: uint16(7772), + 6236: uint16(4934), + 6237: uint16(11289), + 6238: uint16(4428), + 6239: uint16(7191), + 6240: uint16(5946), + 6241: uint16(20244), + 6242: uint16(20243), + 6243: uint16(6738), + 6244: uint16(20245), + 6245: uint16(20242), + 6246: uint16(6663), + 6247: uint16(20249), + 6248: uint16(18700), + 6249: uint16(12597), + 6250: uint16(7766), + 6251: uint16(20247), + 6252: uint16(11524), + 6253: uint16(9552), + 6254: uint16(4106), + 6255: uint16(8002), + 6256: uint16(6933), + 6257: uint16(10518), + 6258: uint16(4127), + 6259: uint16(11596), + 6260: uint16(11338), + 6261: uint16(20250), + 6262: uint16(9252), + 6263: uint16(7002), + 6264: uint16(20251), + 6265: uint16(20252), + 6266: uint16(7723), + 6267: uint16(20253), + 6268: uint16(11597), + 6269: uint16(20248), + 6270: uint16(20255), + 6271: uint16(20257), + 6272: uint16(20256), + 6273: uint16(20254), + 6274: uint16(20258), + 6275: uint16(20259), + 6276: uint16(8281), + 6277: uint16(4417), + 6278: uint16(20260), + 6279: uint16(11031), + 6280: uint16(20261), + 6281: uint16(20262), + 6282: uint16(11785), + 6283: uint16(14864), + 6284: uint16(20263), + 6285: uint16(20264), + 6286: uint16(20265), + 6287: uint16(20269), + 6288: uint16(20266), + 6289: uint16(20267), + 6290: uint16(20268), + 6291: uint16(20270), + 6292: uint16(7971), + 6293: uint16(11094), + 6294: uint16(7972), + 6295: uint16(20271), + 6296: uint16(10066), + 6297: uint16(20272), + 6298: uint16(21042), + 6299: uint16(11051), + 6300: uint16(20273), + 6301: uint16(20274), + 6302: uint16(20275), + 6303: uint16(4662), + 6304: uint16(20277), + 6305: uint16(7736), + 6306: uint16(20278), + 6307: uint16(5635), + 6308: uint16(20279), + 6309: uint16(20283), + 6310: uint16(20281), + 6311: uint16(20282), + 6312: uint16(4690), + 6313: uint16(20280), + 6314: uint16(20284), + 6315: uint16(20285), + 6316: uint16(3879), + 6317: uint16(20286), + 6318: uint16(20287), + 6319: uint16(7491), + 6320: uint16(20288), + 6321: uint16(5158), + 6322: uint16(20291), + 6323: uint16(20290), + 6324: uint16(20289), + 6325: uint16(19024), + 6326: uint16(10555), + 6327: uint16(20292), + 6328: uint16(20293), + 6329: uint16(20294), + 6330: uint16(20295), + 6331: uint16(20296), + 6332: uint16(20297), + 6333: uint16(4921), + 6334: uint16(20298), + 6335: uint16(20299), + 6336: uint16(9730), + 6337: uint16(20301), + 6338: uint16(4378), + 6339: uint16(20304), + 6340: uint16(20303), + 6341: uint16(4099), + 6342: uint16(5408), + 6343: uint16(10534), + 6344: uint16(8985), + 6345: uint16(6401), + 6346: uint16(6207), + 6347: uint16(7238), + 6348: uint16(7739), + 6349: uint16(20306), + 6350: uint16(20305), + 6351: uint16(11297), + 6352: uint16(4935), + 6353: uint16(10033), + 6354: uint16(9531), + 6355: uint16(7771), + 6356: uint16(11565), + 6357: uint16(5690), + 6358: uint16(20309), + 6359: uint16(20308), + 6360: uint16(10794), + 6361: uint16(9483), + 6362: uint16(4143), + 6363: uint16(20310), + 6364: uint16(20307), + 6365: uint16(10288), + 6366: uint16(11337), + 6367: uint16(20311), + 6368: uint16(20312), + 6369: uint16(20314), + 6370: uint16(8521), + 6371: uint16(4666), + 6372: uint16(4667), + 6373: uint16(20313), + 6374: uint16(4936), + 6375: uint16(5905), + 6376: uint16(4937), + 6377: uint16(9246), + 6378: uint16(11583), + 6379: uint16(5947), + 6380: uint16(20315), + 6381: uint16(20316), + 6382: uint16(20317), + 6383: uint16(20480), + 6384: uint16(20482), + 6385: uint16(20481), + 6386: uint16(10326), + 6387: uint16(20483), + 6388: uint16(20484), + 6389: uint16(20485), + 6390: uint16(20486), + 6391: uint16(20488), + 6392: uint16(20487), + 6393: uint16(20489), + 6394: uint16(10067), + 6395: uint16(17707), + 6396: uint16(7688), + 6397: uint16(5137), + 6398: uint16(20490), + 6399: uint16(20491), + 6400: uint16(12555), + 6401: uint16(15386), + 6402: uint16(10034), + 6403: uint16(3930), + 6404: uint16(3866), + 6405: uint16(6739), + 6406: uint16(10767), + 6407: uint16(7517), + 6408: uint16(20492), + 6409: uint16(11070), + 6410: uint16(20493), + 6411: uint16(11323), + 6412: uint16(4129), + 6413: uint16(6688), + 6414: uint16(20494), + 6415: uint16(4429), + 6416: uint16(20495), + 6417: uint16(20496), + 6418: uint16(20498), + 6419: uint16(20499), + 6420: uint16(20501), + 6421: uint16(20497), + 6422: uint16(20500), + 6423: uint16(4922), + 6424: uint16(20502), + 6425: uint16(20503), + 6426: uint16(20504), + 6427: uint16(20505), + 6428: uint16(20506), + 6429: uint16(20508), + 6430: uint16(20507), + 6431: uint16(20510), + 6432: uint16(20513), + 6433: uint16(20509), + 6434: uint16(20511), + 6435: uint16(20512), + 6436: uint16(20514), + 6437: uint16(5409), + 6438: uint16(6994), + 6439: uint16(20515), + 6440: uint16(20516), + 6441: uint16(6208), + 6442: uint16(20517), + 6443: uint16(4637), + 6444: uint16(9774), + 6445: uint16(20518), + 6446: uint16(20519), + 6447: uint16(8761), + 6448: uint16(9546), + 6449: uint16(20520), + 6450: uint16(9820), + 6451: uint16(8491), + 6452: uint16(4151), + 6453: uint16(5453), + 6454: uint16(5454), + 6455: uint16(8786), + 6456: uint16(20525), + 6457: uint16(5455), + 6458: uint16(4430), + 6459: uint16(20524), + 6460: uint16(20522), + 6461: uint16(20523), + 6462: uint16(20521), + 6463: uint16(20535), + 6464: uint16(20526), + 6465: uint16(20527), + 6466: uint16(20528), + 6467: uint16(20529), + 6468: uint16(20531), + 6469: uint16(20530), + 6470: uint16(7224), + 6471: uint16(20532), + 6472: uint16(20534), + 6473: uint16(5138), + 6474: uint16(20533), + 6475: uint16(8282), + 6476: uint16(5906), + 6477: uint16(20536), + 6478: uint16(8492), + 6479: uint16(20537), + 6480: uint16(9484), + 6481: uint16(20538), + 6482: uint16(20543), + 6483: uint16(20541), + 6484: uint16(20540), + 6485: uint16(20542), + 6486: uint16(20539), + 6487: uint16(20545), + 6488: uint16(20544), + 6489: uint16(20547), + 6490: uint16(5410), + 6491: uint16(20546), + 6492: uint16(20548), + 6493: uint16(20549), + 6494: uint16(20551), + 6495: uint16(20550), + 6496: uint16(20552), + 6497: uint16(20554), + 6498: uint16(20553), + 6499: uint16(6235), + 6500: uint16(20555), + 6501: uint16(20556), + 6502: uint16(4635), + 6503: uint16(20557), + 6504: uint16(20558), + 6505: uint16(7760), + 6506: uint16(20559), + 6507: uint16(20560), + 6508: uint16(20561), + 6509: uint16(20562), + 6510: uint16(6209), + 6511: uint16(20563), + 6512: uint16(20564), + 6513: uint16(20565), + 6514: uint16(20566), + 6515: uint16(20567), + 6516: uint16(10000), + 6517: uint16(20569), + 6518: uint16(10245), + 6519: uint16(20570), + 6520: uint16(20568), + 6521: uint16(20572), + 6522: uint16(20571), + 6523: uint16(20573), + 6524: uint16(20736), + 6525: uint16(20737), + 6526: uint16(20738), + 6527: uint16(20739), + 6528: uint16(20740), + 6529: uint16(20741), + 6530: uint16(20742), + 6531: uint16(20743), + 6532: uint16(20744), + 6533: uint16(20745), + 6534: uint16(20746), + 6535: uint16(20747), + 6536: uint16(20748), + 6537: uint16(20749), + 6538: uint16(15380), + 6539: uint16(20750), + 6540: uint16(17239), + 6541: uint16(5139), + 6542: uint16(4608), + 6543: uint16(6417), + 6544: uint16(20752), + 6545: uint16(20751), + 6546: uint16(11012), + 6547: uint16(20754), + 6548: uint16(20755), + 6549: uint16(20753), + 6550: uint16(20756), + 6551: uint16(10817), + 6552: uint16(20757), + 6553: uint16(5210), + 6554: uint16(11780), + 6555: uint16(20758), + 6556: uint16(20760), + 6557: uint16(3869), + 6558: uint16(20761), + 6559: uint16(10506), + 6560: uint16(20759), + 6561: uint16(20762), + 6562: uint16(20763), + 6563: uint16(20764), + 6564: uint16(20765), + 6565: uint16(20766), + 6566: uint16(10829), + 6567: uint16(6668), + 6568: uint16(6489), + 6569: uint16(8206), + 6570: uint16(20767), + 6571: uint16(20770), + 6572: uint16(20768), + 6573: uint16(20771), + 6574: uint16(5968), + 6575: uint16(20769), + 6576: uint16(20772), + 6577: uint16(20773), + 6578: uint16(20774), + 6579: uint16(20778), + 6580: uint16(6665), + 6581: uint16(8515), + 6582: uint16(20779), + 6583: uint16(20776), + 6584: uint16(20775), + 6585: uint16(20777), + 6586: uint16(5694), + 6587: uint16(20783), + 6588: uint16(20782), + 6589: uint16(20781), + 6590: uint16(3858), + 6591: uint16(20793), + 6592: uint16(20789), + 6593: uint16(20790), + 6594: uint16(20786), + 6595: uint16(20792), + 6596: uint16(20788), + 6597: uint16(4673), + 6598: uint16(11819), + 6599: uint16(20791), + 6600: uint16(20787), + 6601: uint16(20785), + 6602: uint16(20784), + 6603: uint16(20795), + 6604: uint16(20798), + 6605: uint16(20797), + 6606: uint16(20796), + 6607: uint16(10280), + 6608: uint16(20794), + 6609: uint16(3922), + 6610: uint16(20799), + 6611: uint16(20801), + 6612: uint16(4686), + 6613: uint16(20780), + 6614: uint16(4118), + 6615: uint16(20803), + 6616: uint16(20802), + 6617: uint16(20800), + 6618: uint16(8716), + 6619: uint16(10831), + 6620: uint16(11577), + 6621: uint16(20804), + 6622: uint16(20805), + 6623: uint16(20806), + 6624: uint16(20807), + 6625: uint16(20808), + 6626: uint16(8986), + 6627: uint16(20809), + 6628: uint16(10006), + 6629: uint16(20814), + 6630: uint16(20810), + 6631: uint16(20811), + 6632: uint16(10768), + 6633: uint16(11043), + 6634: uint16(9519), + 6635: uint16(20815), + 6636: uint16(20816), + 6637: uint16(9501), + 6638: uint16(20813), + 6639: uint16(20812), + 6640: uint16(4361), + 6641: uint16(20824), + 6642: uint16(20823), + 6643: uint16(4180), + 6644: uint16(20821), + 6645: uint16(20820), + 6646: uint16(20818), + 6647: uint16(4698), + 6648: uint16(20817), + 6649: uint16(6929), + 6650: uint16(4360), + 6651: uint16(6210), + 6652: uint16(20827), + 6653: uint16(20826), + 6654: uint16(20825), + 6655: uint16(20822), + 6656: uint16(20828), + 6657: uint16(20829), + 6658: uint16(20996), + 6659: uint16(20995), + 6660: uint16(20997), + 6661: uint16(4108), + 6662: uint16(20992), + 6663: uint16(20993), + 6664: uint16(6227), + 6665: uint16(11032), + 6666: uint16(20994), + 6667: uint16(10769), + 6668: uint16(21002), + 6669: uint16(20998), + 6670: uint16(21003), + 6671: uint16(21000), + 6672: uint16(20999), + 6673: uint16(5691), + 6674: uint16(21004), + 6675: uint16(21005), + 6676: uint16(21006), + 6677: uint16(21001), + 6678: uint16(20819), + 6679: uint16(21007), + 6680: uint16(9024), + 6681: uint16(21011), + 6682: uint16(21012), + 6683: uint16(21010), + 6684: uint16(21009), + 6685: uint16(21015), + 6686: uint16(21008), + 6687: uint16(21013), + 6688: uint16(21014), + 6689: uint16(21017), + 6690: uint16(21016), + 6691: uint16(21019), + 6692: uint16(21020), + 6693: uint16(21021), + 6694: uint16(11816), + 6695: uint16(21018), + 6696: uint16(8522), + 6697: uint16(6476), + 6698: uint16(21022), + 6699: uint16(21023), + 6700: uint16(21024), + 6701: uint16(21025), + 6702: uint16(21026), + 6703: uint16(5907), + 6704: uint16(21027), + 6705: uint16(21028), + 6706: uint16(6926), + 6707: uint16(21029), + 6708: uint16(21030), + 6709: uint16(21031), + 6710: uint16(21032), + 6711: uint16(21035), + 6712: uint16(21033), + 6713: uint16(11803), + 6714: uint16(21034), + 6715: uint16(11598), + 6716: uint16(21036), + 6717: uint16(11578), + 6718: uint16(21037), + 6719: uint16(9821), + 6720: uint16(21038), + 6721: uint16(21040), + 6722: uint16(21041), + 6723: uint16(21039), + 6724: uint16(6220), + 6725: uint16(11052), + 6726: uint16(10818), + 6727: uint16(13654), + 6728: uint16(15423), + 6729: uint16(10842), + 6730: uint16(4362), + 6731: uint16(21043), + 6732: uint16(5167), + 6733: uint16(21044), + 6734: uint16(21045), + 6735: uint16(21046), + 6736: uint16(6228), + 6737: uint16(21047), + 6738: uint16(16179), + 6739: uint16(11066), + 6740: uint16(8514), + 6741: uint16(21048), + 6742: uint16(21050), + 6743: uint16(21049), + 6744: uint16(21051), + 6745: uint16(21052), + 6746: uint16(21053), + 6747: uint16(21054), + 6748: uint16(21055), + 6749: uint16(21056), + 6750: uint16(21057), + 6751: uint16(21058), + 6752: uint16(21059), + 6753: uint16(21060), + 6754: uint16(21061), + 6755: uint16(21062), + 6756: uint16(21063), + 6757: uint16(9219), + 6758: uint16(5948), + 6759: uint16(21065), + 6760: uint16(8236), + 6761: uint16(21066), + 6762: uint16(21067), + 6763: uint16(10240), + 6764: uint16(21068), + 6765: uint16(21069), + 6766: uint16(16918), + 6767: uint16(19257), + 6768: uint16(20300), + 6769: uint16(21070), + 6770: uint16(21071), + 6771: uint16(21073), + 6772: uint16(21074), + 6773: uint16(21075), + 6774: uint16(11599), + 6775: uint16(21072), + 6776: uint16(21076), + 6777: uint16(21077), + 6778: uint16(21079), + 6779: uint16(21078), + 6780: uint16(21081), + 6781: uint16(21082), + 6782: uint16(21080), + 6783: uint16(11541), + 6784: uint16(21083), + 6785: uint16(21084), + 6786: uint16(16947), + 6787: uint16(21085), + 6788: uint16(9), + 6789: uint16(83), + 6790: uint16(79), + 6791: uint16(82), + 6792: uint16(84), + 6793: uint16(41), + 6794: uint16(42), + 6795: uint16(85), + 6796: uint16(59), + 6797: uint16(3), + 6798: uint16(4), + 6799: uint16(30), + 6800: uint16(527), + 6801: uint16(528), + 6802: uint16(529), + 6803: uint16(530), + 6804: uint16(531), + 6805: uint16(532), + 6806: uint16(533), + 6807: uint16(534), + 6808: uint16(535), + 6809: uint16(536), + 6810: uint16(6), + 6811: uint16(7), + 6812: uint16(66), + 6813: uint16(64), + 6814: uint16(67), + 6815: uint16(8), + 6816: uint16(86), + 6817: uint16(544), + 6818: uint16(545), + 6819: uint16(546), + 6820: uint16(547), + 6821: uint16(548), + 6822: uint16(549), + 6823: uint16(550), + 6824: uint16(551), + 6825: uint16(552), + 6826: uint16(553), + 6827: uint16(554), + 6828: uint16(555), + 6829: uint16(556), + 6830: uint16(557), + 6831: uint16(558), + 6832: uint16(559), + 6833: uint16(560), + 6834: uint16(561), + 6835: uint16(562), + 6836: uint16(563), + 6837: uint16(564), + 6838: uint16(565), + 6839: uint16(566), + 6840: uint16(567), + 6841: uint16(568), + 6842: uint16(569), + 6843: uint16(45), + 6844: uint16(46), + 6845: uint16(15), + 6846: uint16(17), + 6847: uint16(13), + 6848: uint16(576), + 6849: uint16(577), + 6850: uint16(578), + 6851: uint16(579), + 6852: uint16(580), + 6853: uint16(581), + 6854: uint16(582), + 6855: uint16(583), + 6856: uint16(584), + 6857: uint16(585), + 6858: uint16(586), + 6859: uint16(587), + 6860: uint16(588), + 6861: uint16(589), + 6862: uint16(590), + 6863: uint16(591), + 6864: uint16(592), + 6865: uint16(593), + 6866: uint16(594), + 6867: uint16(595), + 6868: uint16(596), + 6869: uint16(597), + 6870: uint16(598), + 6871: uint16(599), + 6872: uint16(600), + 6873: uint16(601), + 6874: uint16(47), + 6875: uint16(34), + 6876: uint16(48), + 6877: uint16(16), + 6878: uint16(78), +} + +func _fuzzycmp(tls *TLS, a uintptr, b uintptr) (r int32) { + for { + if !(*(*uint8)(unsafe.Pointer(a)) != 0 && *(*uint8)(unsafe.Pointer(b)) != 0) { + break + } + for *(*uint8)(unsafe.Pointer(a)) != 0 && uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32)-uint32('a') > uint32(26) && uint32(int32(*(*uint8)(unsafe.Pointer(a)))-int32('0')) > uint32(10) { + a++ + } + if uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32) != uint32(*(*uint8)(unsafe.Pointer(b))) { + return int32(1) + } + goto _1 + _1: + ; + a++ + b++ + } + return BoolInt32(int32(*(*uint8)(unsafe.Pointer(a))) != int32(*(*uint8)(unsafe.Pointer(b)))) +} + +func _find_charmap(tls *TLS, name uintptr) (r Tsize_t) { + var s uintptr + _ = s + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + name = uintptr(unsafe.Pointer(&_charmaps)) + } /* "utf8" */ + s = uintptr(unsafe.Pointer(&_charmaps)) + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if !(_fuzzycmp(tls, name, s) != 0) { + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s += uintptr(Xstrlen(tls, s) + uint32(1)) + } + return uint32(int32(s+uintptr(1)) - t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_charmaps)))) + } + s += uintptr(Xstrlen(tls, s) + uint32(1)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + if int32(*(*uint8)(unsafe.Pointer(s + 1))) > int32(0200) { + s += uintptr(2) + } else { + s += uintptr(uint32(2) + (uint32(64)-uint32(*(*uint8)(unsafe.Pointer(s + 1))))*uint32(5)) + } + } + goto _1 + _1: + } + return uint32(-Int32FromInt32(1)) +} + +type Tstateful_cd = struct { + Fbase_cd Ticonv_t + Fstate uint32 +} + +func _combine_to_from(tls *TLS, t Tsize_t, f Tsize_t) (r Ticonv_t) { + return uintptr(f<> int32(16) +} + +func _extract_to(tls *TLS, cd Ticonv_t) (r Tsize_t) { + return uint32(cd) >> int32(1) & uint32(0x7fff) +} + +func Xiconv_open(tls *TLS, to uintptr, from uintptr) (r Ticonv_t) { + if __ccgo_strace { + trc("tls=%v to=%v from=%v, (%v:)", tls, to, from, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cd Ticonv_t + var f, t, v1, v2 Tsize_t + var scd uintptr + var v3 bool + _, _, _, _, _, _, _ = cd, f, scd, t, v1, v2, v3 + v1 = _find_charmap(tls, to) + t = v1 + if v3 = v1 == uint32(-Int32FromInt32(1)); !v3 { + v2 = _find_charmap(tls, from) + f = v2 + } + if v3 || v2 == uint32(-Int32FromInt32(1)) || int32(_charmaps[t]) >= int32(0330) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + cd = _combine_to_from(tls, t, f) + switch int32(_charmaps[f]) { + case int32(UTF_16): + fallthrough + case int32(UTF_32): + fallthrough + case int32(UCS2): + fallthrough + case int32(ISO2022_JP): + scd = Xmalloc(tls, uint32(8)) + if !(scd != 0) { + return uintptr(-Int32FromInt32(1)) + } + (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd = cd + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + cd = scd + } + return cd +} + +func _get_16(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(1) + return uint32(int32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))<> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(int32(1)-e))) = uint8(c) +} + +func _get_32(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(3) + return (uint32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))+0)<> int32(24)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(1)))) = uint8(c >> int32(16)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(2)))) = uint8(c >> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(3)))) = uint8(c) +} + +/* Adapt as needed */ + +func _legacy_map(tls *TLS, map1 uintptr, c uint32) (r uint32) { + var x, v1 uint32 + _, _ = x, v1 + if c < uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) { + return c + } + x = c - uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) + x = uint32(int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)))))>>(uint32(2)*x%uint32(8)) | int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)+uint32(1)))))<<(uint32(8)-uint32(2)*x%uint32(8))&int32(1023)) + if x < uint32(256) { + v1 = x + } else { + v1 = uint32(_legacy_chars[x-uint32(256)]) + } + return v1 +} + +func _uni_to_jis(tls *TLS, c uint32) (r uint32) { + var b, d, i, j, nel uint32 + _, _, _, _, _ = b, d, i, j, nel + nel = Uint32FromInt64(13758) / Uint32FromInt64(2) + b = uint32(0) + for { + i = nel / uint32(2) + j = uint32(_rev_jis[b+i]) + d = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(j/uint32(256))*188 + uintptr(j%uint32(256))*2))) + if d == c { + return j + uint32(0x2121) + } else { + if nel == uint32(1) { + return uint32(0) + } else { + if c < d { + nel /= uint32(2) + } else { + b += i + nel -= nel / uint32(2) + } + } + } + goto _1 + _1: + } + return r +} + +func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v cd=%v in=%v inb=%v out=%v outb=%v, (%v:)", tls, cd, in, inb, out, outb, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var c, d, from, to, v62 uint32 + var err, i, i1, j, j1, v25, v26, v27, v28, v59 int32 + var k, l, tmplen, tmpx, x Tsize_t + var loc Tlocale_t + var map1, ploc, scd, tomap, v100, v101, v102, v103, v104, v54, v55, v57, v58, v60, v61, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 uintptr + var totype, type1 uint8 + var _ /* ptmp at bp+40 */ uintptr + var _ /* st at bp+16 */ Tmbstate_t + var _ /* tmp at bp+32 */ struct { + Fwc [0][2]Twchar_t + Fc [8]uint8 + } + var _ /* tmp at bp+44 */ [4]uint8 + var _ /* wc at bp+24 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, err, from, i, i1, j, j1, k, l, loc, map1, ploc, scd, tmplen, tmpx, to, tomap, totype, type1, x, v100, v101, v102, v103, v104, v25, v26, v27, v28, v54, v55, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 + x = uint32(0) + scd = uintptr(0) + if !(uint32(cd)&Uint32FromInt32(1) != 0) { + scd = cd + cd = (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd + } + to = _extract_to(tls, cd) + from = _extract_from(tls, cd) + map1 = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(from) + uintptr(1) + tomap = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(to) + uintptr(1) + *(*Tmbstate_t)(unsafe.Pointer(bp + 16)) = Tmbstate_t{} + type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) + totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) + ploc = uintptr(___get_tp(tls)) + 88 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + return uint32(0) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + for { + if !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + break + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + l = uint32(1) + switch int32(type1) { + case int32(UTF_8): + goto _2 + case int32(US_ASCII): + goto _3 + case int32(WCHAR_T): + goto _4 + case int32(UTF_32LE): + goto _5 + case int32(UTF_32BE): + goto _6 + case int32(UTF_16LE): + goto _7 + case int32(UTF_16BE): + goto _8 + case int32(UCS2LE): + goto _9 + case int32(UCS2BE): + goto _10 + case int32(UTF_16): + goto _11 + case int32(UCS2): + goto _12 + case int32(UTF_32): + goto _13 + case int32(SHIFT_JIS): + goto _14 + case int32(EUC_JP): + goto _15 + case int32(ISO2022_JP): + goto _16 + case int32(GB2312): + goto _17 + case int32(GBK): + goto _18 + case int32(GB18030): + goto _19 + case int32(BIG5): + goto _20 + case int32(EUC_KR): + goto _21 + default: + goto _22 + } + goto _23 + _2: + ; + if c < uint32(128) { + goto _23 + } + l = Xmbrtowc(tls, bp+24, *(*uintptr)(unsafe.Pointer(in)), *(*Tsize_t)(unsafe.Pointer(inb)), bp+16) + if l == uint32(-Int32FromInt32(1)) { + goto ilseq + } + if l == uint32(-Int32FromInt32(2)) { + goto starved + } + c = *(*Twchar_t)(unsafe.Pointer(bp + 24)) + goto _23 + _3: + ; + if c >= uint32(128) { + goto ilseq + } + goto _23 + _4: + ; + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < l { + goto starved + } + c = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)))) + if !(0 != 0) { + goto _24 + } + _6: + ; + _5: + ; + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + c = _get_32(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + _24: + ; + if c-uint32(0xd800) < uint32(0x800) || c >= uint32(0x110000) { + goto ilseq + } + goto _23 + _10: + ; + _9: + ; + _8: + ; + _7: + ; + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + c = _get_16(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + if c-Uint32FromInt32(0xdc00) < uint32(0x400) { + goto ilseq + } + if c-Uint32FromInt32(0xd800) < uint32(0x400) { + if uint32(int32(type1)-int32(UCS2BE)) < uint32(2) { + goto ilseq + } + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + d = _get_16(tls, *(*uintptr)(unsafe.Pointer(in))+UintptrFromInt32(2), int32(type1)) + if d-Uint32FromInt32(0xdc00) >= uint32(0x400) { + goto ilseq + } + c = (c-uint32(0xd7c0))< uint32(127) { + d-- + } + d -= uint32(64) + } else { + if d-uint32(159) <= uint32(Int32FromInt32(252)-Int32FromInt32(159)) { + c++ + d -= uint32(159) + } + } + if c >= uint32(84) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _15: + ; + if c < uint32(128) { + goto _23 + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if c == uint32(0x8e) { + c = d + if c-uint32(0xa1) > uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + goto ilseq + } + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0xa1)) + goto _23 + } + c -= uint32(0xa1) + d -= uint32(0xa1) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _16: + ; + if c >= uint32(128) { + goto ilseq + } + if c == uint32('\033') { + l = uint32(3) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(3) { + goto starved + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if c != uint32('(') && c != uint32('$') { + goto ilseq + } + switch uint32(Int32FromInt32(128)*BoolInt32(c == Uint32FromUint8('$'))) + d { + case uint32('B'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + goto _1 + case uint32('J'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(1) + goto _1 + case uint32('I'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(4) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('@')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(2) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('B')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(3) + goto _1 + } + goto ilseq + } + switch (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate { + case uint32(1): + if c == uint32('\\') { + c = uint32(0xa5) + } + if c == uint32('~') { + c = uint32(0x203e) + } + case uint32(2): + fallthrough + case uint32(3): + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + c -= uint32(0x21) + d -= uint32(0x21) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + case uint32(4): + if c-uint32(0x60) < uint32(0x1f) { + goto ilseq + } + if c-uint32(0x21) < uint32(0x5e) { + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0x21)) + } + break + } + goto _23 + _17: + ; + if c < uint32(128) { + goto _23 + } + if c < uint32(0xa1) { + goto ilseq + } + _18: + ; + if c == uint32(128) { + c = uint32(0x20ac) + goto _23 + } + _19: + ; + if c < uint32(128) { + goto _23 + } + c -= uint32(0x81) + if c >= uint32(126) { + goto ilseq + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d < uint32(0xa1) && int32(type1) == int32(GB2312) { + goto ilseq + } + if d-uint32(0x40) >= uint32(191) || d == uint32(127) { + if d-uint32('0') > uint32(9) || int32(type1) != int32(GB18030) { + goto ilseq + } + l = uint32(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(4) { + goto starved + } + c = (uint32(10)*c + d - uint32('0')) * uint32(1260) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if d-uint32(0x81) > uint32(126) { + goto ilseq + } + c += uint32(10) * (d - uint32(0x81)) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(3)))) + if d-uint32('0') > uint32(9) { + goto ilseq + } + c += d - uint32('0') + c += uint32(128) + d = uint32(0) + for { + if !(d <= c) { + break + } + k = uint32(0) + i = 0 + for { + if !(i < int32(126)) { + break + } + j = 0 + for { + if !(j < int32(190)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(i)*380 + uintptr(j)*2)))-d <= c-d { + k++ + } + goto _31 + _31: + ; + j++ + } + goto _30 + _30: + ; + i++ + } + d = c + uint32(1) + c += k + goto _29 + _29: + } + goto _23 + } + d -= uint32(0x40) + if d > uint32(63) { + d-- + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(c)*380 + uintptr(d)*2))) + goto _23 + _20: + ; + if c < uint32(128) { + goto _23 + } + l = uint32(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint32(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d-uint32(0x40) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x40)) || d-uint32(0x7f) < uint32(Int32FromInt32(0xa1)-Int32FromInt32(0x7f)) { + goto ilseq + } + d -= uint32(0x40) + if d > uint32(0x3e) { + d -= uint32(0x22) + } + if c-uint32(0xa1) >= uint32(Int32FromInt32(0xfa)-Int32FromInt32(0xa1)) { + if c-uint32(0x87) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x87)) { + goto ilseq + } + if c < uint32(0xa1) { + c -= uint32(0x87) + } else { + c -= uint32(Int32FromInt32(0x87) + (Int32FromInt32(0xfa) - Int32FromInt32(0xa1))) + } + c = uint32(int32(_hkscs[uint32(4867)+(c*uint32(157)+d)/uint32(16)])>>((c*uint32(157)+d)%uint32(16))%int32(2)< *(*Tsize_t)(unsafe.Pointer(outb)) { + goto toobig + } + if tmpx != 0 { + x++ + } + _memcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+32, tmplen) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(tmplen) + *(*Tsize_t)(unsafe.Pointer(outb)) -= tmplen + goto _1 + } + if !(c != 0) { + goto ilseq + } + goto _23 + } + c -= uint32(0xa1) + c = uint32(int32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_big5)) + uintptr(c)*314 + uintptr(d)*2))) | BoolInt32(c == uint32(0x27) && (d == uint32(0x3a) || d == uint32(0x3c) || d == uint32(0x42)))<= uint32(93) || d >= uint32(94) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0x81)) + d += uint32(0xa1) + if c >= uint32(93) || c >= uint32(Int32FromInt32(0xc6)-Int32FromInt32(0x81)) && d > uint32(0x52) { + goto ilseq + } + if d-uint32('A') < uint32(26) { + d = d - uint32('A') + } else { + if d-uint32('a') < uint32(26) { + d = d - uint32('a') + uint32(26) + } else { + if d-uint32(0x81) < uint32(Int32FromInt32(0xff)-Int32FromInt32(0x81)) { + d = d - uint32(0x81) + uint32(52) + } else { + goto ilseq + } + } + } + if c < uint32(0x20) { + c = uint32(178)*c + d + } else { + c = uint32(Int32FromInt32(178)*Int32FromInt32(0x20)) + uint32(84)*(c-uint32(0x20)) + d + } + c += uint32(0xac00) + d = uint32(0xac00) + for { + if !(d <= c) { + break + } + k = uint32(0) + i1 = 0 + for { + if !(i1 < int32(93)) { + break + } + j1 = 0 + for { + if !(j1 < int32(94)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(i1)*188 + uintptr(j1)*2)))-d <= c-d { + k++ + } + goto _34 + _34: + ; + j1++ + } + goto _33 + _33: + ; + i1++ + } + d = c + uint32(1) + c += k + goto _32 + _32: + } + goto _23 + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _22: + ; + if !(c != 0) { + goto _23 + } + c = _legacy_map(tls, map1, c) + if !(c != 0) { + goto ilseq + } + _23: + ; + switch int32(totype) { + case int32(WCHAR_T): + goto _35 + case int32(UTF_8): + goto _36 + case int32(US_ASCII): + goto _37 + default: + goto _38 + case int32(SHIFT_JIS): + goto _39 + case int32(EUC_JP): + goto _40 + case int32(ISO2022_JP): + goto _41 + case int32(UCS2): + goto _42 + case int32(UTF_16LE): + goto _43 + case int32(UTF_16BE): + goto _44 + case int32(UTF_16): + goto _45 + case int32(UCS2LE): + goto _46 + case int32(UCS2BE): + goto _47 + case int32(UTF_32): + goto _48 + case int32(UTF_32LE): + goto _49 + case int32(UTF_32BE): + goto _50 + } + goto _51 + _35: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(out)))) = c + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _36: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + k = uint32(Xwctomb(tls, bp+44, c)) + if *(*Tsize_t)(unsafe.Pointer(outb)) < k { + goto toobig + } + _memcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+44, k) + } else { + k = uint32(Xwctomb(tls, *(*uintptr)(unsafe.Pointer(out)), c)) + } + *(*uintptr)(unsafe.Pointer(out)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(outb)) -= k + goto _51 + _37: + ; + if !(c > uint32(0x7f)) { + goto _52 + } + goto subst + subst: + ; + x++ + c = Uint32FromUint8('*') + _52: + ; + _38: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(1) { + goto toobig + } + if !(c < uint32(256) && c == _legacy_map(tls, tomap, c)) { + goto _53 + } + goto revout + revout: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(1) { + goto toobig + } + v55 = out + v54 = *(*uintptr)(unsafe.Pointer(v55)) + *(*uintptr)(unsafe.Pointer(v55))++ + *(*uint8)(unsafe.Pointer(v54)) = uint8(c) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(1) + goto _51 + _53: + ; + d = c + c = uint32(int32(4) * int32(totype)) + for { + if !(c < uint32(256)) { + break + } + if d == _legacy_map(tls, tomap, c) { + goto revout + } + goto _56 + _56: + ; + c++ + } + goto subst + _39: + ; + if c < uint32(128) { + goto revout + } + if c == uint32(0xa5) { + x++ + c = uint32('\\') + goto revout + } + if c == uint32(0x203e) { + x++ + c = uint32('~') + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0xff61)) + goto revout + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + d = c % uint32(256) + c = c / uint32(256) + v58 = out + v57 = *(*uintptr)(unsafe.Pointer(v58)) + *(*uintptr)(unsafe.Pointer(v58))++ + if c < uint32(95) { + v59 = int32(112) + } else { + v59 = int32(176) + } + *(*uint8)(unsafe.Pointer(v57)) = uint8((c+uint32(1))/uint32(2) + uint32(v59)) + v61 = out + v60 = *(*uintptr)(unsafe.Pointer(v61)) + *(*uintptr)(unsafe.Pointer(v61))++ + if c%uint32(2) != 0 { + v62 = d + uint32(31) + d/uint32(96) + } else { + v62 = d + uint32(126) + } + *(*uint8)(unsafe.Pointer(v60)) = uint8(v62) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + _40: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0x0e00) + Int32FromInt32(0x21) - Int32FromInt32(0xff61)) + } else { + c = _uni_to_jis(tls, c) + } + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + v64 = out + v63 = *(*uintptr)(unsafe.Pointer(v64)) + *(*uintptr)(unsafe.Pointer(v64))++ + *(*uint8)(unsafe.Pointer(v63)) = uint8(c/uint32(256) + uint32(0x80)) + v66 = out + v65 = *(*uintptr)(unsafe.Pointer(v66)) + *(*uintptr)(unsafe.Pointer(v66))++ + *(*uint8)(unsafe.Pointer(v65)) = uint8(c%uint32(256) + uint32(0x80)) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + _41: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) || c == uint32(0xa5) || c == uint32(0x203e) { + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(7) { + goto toobig + } + v68 = out + v67 = *(*uintptr)(unsafe.Pointer(v68)) + *(*uintptr)(unsafe.Pointer(v68))++ + *(*uint8)(unsafe.Pointer(v67)) = uint8('\033') + v70 = out + v69 = *(*uintptr)(unsafe.Pointer(v70)) + *(*uintptr)(unsafe.Pointer(v70))++ + *(*uint8)(unsafe.Pointer(v69)) = uint8('(') + if c == uint32(0xa5) { + v72 = out + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + *(*uint8)(unsafe.Pointer(v71)) = uint8('J') + v74 = out + v73 = *(*uintptr)(unsafe.Pointer(v74)) + *(*uintptr)(unsafe.Pointer(v74))++ + *(*uint8)(unsafe.Pointer(v73)) = uint8('\\') + } else { + if c == uint32(0x203e) { + v76 = out + v75 = *(*uintptr)(unsafe.Pointer(v76)) + *(*uintptr)(unsafe.Pointer(v76))++ + *(*uint8)(unsafe.Pointer(v75)) = uint8('J') + v78 = out + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + *(*uint8)(unsafe.Pointer(v77)) = uint8('~') + } else { + v80 = out + v79 = *(*uintptr)(unsafe.Pointer(v80)) + *(*uintptr)(unsafe.Pointer(v80))++ + *(*uint8)(unsafe.Pointer(v79)) = uint8('I') + v82 = out + v81 = *(*uintptr)(unsafe.Pointer(v82)) + *(*uintptr)(unsafe.Pointer(v82))++ + *(*uint8)(unsafe.Pointer(v81)) = uint8(c - uint32(0xff61) + uint32(0x21)) + } + } + v84 = out + v83 = *(*uintptr)(unsafe.Pointer(v84)) + *(*uintptr)(unsafe.Pointer(v84))++ + *(*uint8)(unsafe.Pointer(v83)) = uint8('\033') + v86 = out + v85 = *(*uintptr)(unsafe.Pointer(v86)) + *(*uintptr)(unsafe.Pointer(v86))++ + *(*uint8)(unsafe.Pointer(v85)) = uint8('(') + v88 = out + v87 = *(*uintptr)(unsafe.Pointer(v88)) + *(*uintptr)(unsafe.Pointer(v88))++ + *(*uint8)(unsafe.Pointer(v87)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(7) + goto _51 + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(8) { + goto toobig + } + v90 = out + v89 = *(*uintptr)(unsafe.Pointer(v90)) + *(*uintptr)(unsafe.Pointer(v90))++ + *(*uint8)(unsafe.Pointer(v89)) = uint8('\033') + v92 = out + v91 = *(*uintptr)(unsafe.Pointer(v92)) + *(*uintptr)(unsafe.Pointer(v92))++ + *(*uint8)(unsafe.Pointer(v91)) = uint8('$') + v94 = out + v93 = *(*uintptr)(unsafe.Pointer(v94)) + *(*uintptr)(unsafe.Pointer(v94))++ + *(*uint8)(unsafe.Pointer(v93)) = uint8('B') + v96 = out + v95 = *(*uintptr)(unsafe.Pointer(v96)) + *(*uintptr)(unsafe.Pointer(v96))++ + *(*uint8)(unsafe.Pointer(v95)) = uint8(c / uint32(256)) + v98 = out + v97 = *(*uintptr)(unsafe.Pointer(v98)) + *(*uintptr)(unsafe.Pointer(v98))++ + *(*uint8)(unsafe.Pointer(v97)) = uint8(c % uint32(256)) + v100 = out + v99 = *(*uintptr)(unsafe.Pointer(v100)) + *(*uintptr)(unsafe.Pointer(v100))++ + *(*uint8)(unsafe.Pointer(v99)) = uint8('\033') + v102 = out + v101 = *(*uintptr)(unsafe.Pointer(v102)) + *(*uintptr)(unsafe.Pointer(v102))++ + *(*uint8)(unsafe.Pointer(v101)) = uint8('(') + v104 = out + v103 = *(*uintptr)(unsafe.Pointer(v104)) + *(*uintptr)(unsafe.Pointer(v104))++ + *(*uint8)(unsafe.Pointer(v103)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(8) + goto _51 + _42: + ; + totype = uint8(UCS2BE) + _47: + ; + _46: + ; + _45: + ; + _44: + ; + _43: + ; + if c < uint32(0x10000) || uint32(int32(totype)-int32(UCS2BE)) < uint32(2) { + if c >= uint32(0x10000) { + c = uint32(0xFFFD) + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(2) { + goto toobig + } + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(2) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(2) + goto _51 + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + c -= uint32(0x10000) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c>>int32(10)|uint32(0xd800), int32(totype)) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out))+UintptrFromInt32(2), c&uint32(0x3ff)|uint32(0xdc00), int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _48: + ; + totype = uint8(UTF_32BE) + _50: + ; + _49: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint32(4) { + goto toobig + } + _put_32(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint32(4) + goto _51 + _51: + ; + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(in)) += uintptr(l) + *(*Tsize_t)(unsafe.Pointer(inb)) -= l + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x + goto ilseq +ilseq: + ; + err = int32(EILSEQ) + x = uint32(-Int32FromInt32(1)) + goto end + goto toobig +toobig: + ; + err = int32(E2BIG) + x = uint32(-Int32FromInt32(1)) + goto end + goto starved +starved: + ; + err = int32(EINVAL) + x = uint32(-Int32FromInt32(1)) + goto end +end: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x +} + +func Xiconv_close(tls *TLS, cd Ticonv_t) (r int32) { + if __ccgo_strace { + trc("tls=%v cd=%v, (%v:)", tls, cd, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(uint32(cd)&Uint32FromInt32(1) != 0) { + Xfree(tls, cd) + } + return 0 +} + +var _c_time = [316]uint8{'S', 'u', 'n', 0, 'M', 'o', 'n', 0, 'T', 'u', 'e', 0, 'W', 'e', 'd', 0, 'T', 'h', 'u', 0, 'F', 'r', 'i', 0, 'S', 'a', 't', 0, 'S', 'u', 'n', 'd', 'a', 'y', 0, 'M', 'o', 'n', 'd', 'a', 'y', 0, 'T', 'u', 'e', 's', 'd', 'a', 'y', 0, 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 0, 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 0, 'F', 'r', 'i', 'd', 'a', 'y', 0, 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 0, 'J', 'a', 'n', 0, 'F', 'e', 'b', 0, 'M', 'a', 'r', 0, 'A', 'p', 'r', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 0, 'J', 'u', 'l', 0, 'A', 'u', 'g', 0, 'S', 'e', 'p', 0, 'O', 'c', 't', 0, 'N', 'o', 'v', 0, 'D', 'e', 'c', 0, 'J', 'a', 'n', 'u', 'a', 'r', 'y', 0, 'F', 'e', 'b', 'r', 'u', 'a', 'r', 'y', 0, 'M', 'a', 'r', 'c', 'h', 0, 'A', 'p', 'r', 'i', 'l', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 'e', 0, 'J', 'u', 'l', 'y', 0, 'A', 'u', 'g', 'u', 's', 't', 0, 'S', 'e', 'p', 't', 'e', 'm', 'b', 'e', 'r', 0, 'O', 'c', 't', 'o', 'b', 'e', 'r', 0, 'N', 'o', 'v', 'e', 'm', 'b', 'e', 'r', 0, 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 0, 'A', 'M', 0, 'P', 'M', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S', 0, '%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p', 0, 0, 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S'} + +var _c_messages = [19]uint8{'^', '[', 'y', 'Y', ']', 0, '^', '[', 'n', 'N', ']', 0, 'y', 'e', 's', 0, 'n', 'o'} +var _c_numeric = [3]uint8{'.'} + +func X__nl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cat, idx int32 + var str, v1, v2 uintptr + _, _, _, _, _ = cat, idx, str, v1, v2 + cat = item >> int32(16) + idx = item & int32(65535) + if item == int32(CODESET) { + if *(*uintptr)(unsafe.Pointer(loc)) != 0 { + v1 = __ccgo_ts + 322 + } else { + v1 = __ccgo_ts + 441 + } + return v1 + } + /* _NL_LOCALE_NAME extension */ + if idx == int32(65535) && cat < int32(LC_ALL) { + if *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4)) != 0 { + v2 = *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4)) + 8 + } else { + v2 = __ccgo_ts + 447 + } + return v2 + } + switch cat { + case int32(LC_NUMERIC): + if idx > int32(1) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_numeric)) + case int32(LC_TIME): + if idx > int32(0x31) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_time)) + case int32(LC_MONETARY): + if idx > 0 { + return __ccgo_ts + } + str = __ccgo_ts + case int32(LC_MESSAGES): + if idx > int32(3) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_messages)) + default: + return __ccgo_ts + } + for { + if !(idx != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(str)) != 0) { + break + } + goto _4 + _4: + ; + str++ + } + goto _3 + _3: + ; + idx-- + str++ + } + if cat != int32(LC_NUMERIC) && *(*uint8)(unsafe.Pointer(str)) != 0 { + str = X__lctrans(tls, str, *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*4))) + } + return str +} + +func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo(tls, item) +} + +func Xnl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, loc) +} + +func X__lctrans_impl(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var trans, v1 uintptr + _, _ = trans, v1 + trans = uintptr(0) + if lm != 0 { + trans = X__mo_lookup(tls, (*t__locale_map)(unsafe.Pointer(lm)).Fmap1, (*t__locale_map)(unsafe.Pointer(lm)).Fmap_size, msg) + } + if trans != 0 { + v1 = trans + } else { + v1 = msg + } + return v1 +} + +var _envvars = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +func X__get_locale(tls *TLS, cat int32, val uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v val=%v, (%v:)", tls, cat, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var builtin int32 + var l, n Tsize_t + var map1, new1, p, path, z, v1, v11, v2, v4, v6 uintptr + var v12, v3, v5, v7 bool + var _ /* buf at bp+0 */ [256]uint8 + var _ /* map_size at bp+256 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = builtin, l, map1, n, new1, p, path, z, v1, v11, v12, v2, v3, v4, v5, v6, v7 + new1 = uintptr(0) + path = uintptr(0) + if !(*(*uint8)(unsafe.Pointer(val)) != 0) { + v1 = Xgetenv(tls, __ccgo_ts+449) + val = v1 + if v3 = v1 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v3 { + v2 = Xgetenv(tls, uintptr(unsafe.Pointer(&_envvars))+uintptr(cat)*12) + val = v2 + } + if v5 = v3 || v2 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v5 { + v4 = Xgetenv(tls, __ccgo_ts+336) + val = v4 + } + if v7 = v5 || v4 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v7 { + v6 = __ccgo_ts + 456 + val = v6 + } + _ = v7 || v6 != 0 + } + /* Limit name length and forbid leading dot or any slashes. */ + n = uint32(0) + for { + if !(n < uint32(LOCALE_NAME_MAX) && *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 && int32(*(*uint8)(unsafe.Pointer(val + uintptr(n)))) != int32('/')) { + break + } + goto _8 + _8: + ; + n++ + } + if int32(*(*uint8)(unsafe.Pointer(val))) == int32('.') || *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 { + val = __ccgo_ts + 456 + } + builtin = BoolInt32(int32(*(*uint8)(unsafe.Pointer(val))) == int32('C') && !(*(*uint8)(unsafe.Pointer(val + 1)) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+456) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+464) != 0)) + if builtin != 0 { + if cat == LC_CTYPE && int32(*(*uint8)(unsafe.Pointer(val + 1))) == int32('.') { + return uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return uintptr(0) + } + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, val, p+8) != 0) { + return p + } + goto _9 + _9: + ; + p = (*t__locale_map)(unsafe.Pointer(p)).Fnext + } + if !(X__libc.Fsecure != 0) { + path = Xgetenv(tls, __ccgo_ts+470) + } + /* FIXME: add a default path? */ + if path != 0 { + for { + if !(*(*uint8)(unsafe.Pointer(path)) != 0) { + break + } + z = X__strchrnul(tls, path, int32(':')) + l = uint32(int32(z) - int32(path)) + if l >= uint32(256)-n-uint32(2) { + goto _10 + } + _memcpy(tls, bp, path, l) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l] = uint8('/') + _memcpy(tls, bp+uintptr(l)+uintptr(1), val, n) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l+uint32(1)+n] = uint8(0) + map1 = X__map_file(tls, bp, bp+256) + if map1 != 0 { + new1 = Xmalloc(tls, uint32(36)) + if !(new1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp + 256))) + break + } + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = map1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp + 256)) + _memcpy(tls, new1+8, val, n) + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + break + } + goto _10 + _10: + ; + path = z + BoolUintptr(!!(*(*uint8)(unsafe.Pointer(z)) != 0)) + } + } + /* If no locale definition was found, make a locale map + * object anyway to store the name, which is kept for the + * sake of being able to do message translations at the + * application level. */ + if v12 = !(new1 != 0); v12 { + v11 = Xmalloc(tls, uint32(36)) + new1 = v11 + } + if v12 && v11 != 0 { + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = X__c_dot_utf8.Fmap1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = X__c_dot_utf8.Fmap_size + _memcpy(tls, new1+8, val, n) + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + } + /* For LC_CTYPE, never return a null pointer unless the + * requested name was "C" or "POSIX". */ + if !(new1 != 0) && cat == LC_CTYPE { + new1 = uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return new1 +} + +var _loc_head uintptr + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _posix_lconv = Tlconv{ + Fdecimal_point: __ccgo_ts + 483, + Fthousands_sep: __ccgo_ts, + Fgrouping: __ccgo_ts, + Fint_curr_symbol: __ccgo_ts, + Fcurrency_symbol: __ccgo_ts, + Fmon_decimal_point: __ccgo_ts, + Fmon_thousands_sep: __ccgo_ts, + Fmon_grouping: __ccgo_ts, + Fpositive_sign: __ccgo_ts, + Fnegative_sign: __ccgo_ts, + Fint_frac_digits: uint8(CHAR_MAX), + Ffrac_digits: uint8(CHAR_MAX), + Fp_cs_precedes: uint8(CHAR_MAX), + Fp_sep_by_space: uint8(CHAR_MAX), + Fn_cs_precedes: uint8(CHAR_MAX), + Fn_sep_by_space: uint8(CHAR_MAX), + Fp_sign_posn: uint8(CHAR_MAX), + Fn_sign_posn: uint8(CHAR_MAX), + Fint_p_cs_precedes: uint8(CHAR_MAX), + Fint_p_sep_by_space: uint8(CHAR_MAX), + Fint_n_cs_precedes: uint8(CHAR_MAX), + Fint_n_sep_by_space: uint8(CHAR_MAX), + Fint_p_sign_posn: uint8(CHAR_MAX), + Fint_n_sign_posn: uint8(CHAR_MAX), +} + +func Xlocaleconv(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_posix_lconv)) +} + +var _default_locale_init_done int32 +var _default_locale t__locale_struct +var _default_ctype_locale t__locale_struct + +func X__loc_is_allocated(tls *TLS, loc Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v loc=%v, (%v:)", tls, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(loc != 0 && loc != uintptr(unsafe.Pointer(&X__c_locale)) && loc != uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) && loc != uintptr(unsafe.Pointer(&_default_locale)) && loc != uintptr(unsafe.Pointer(&_default_ctype_locale))) +} + +func _do_newlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var i, i1 int32 + var v2, v3 uintptr + var v5 Tlocale_t + var _ /* tmp at bp+0 */ t__locale_struct + _, _, _, _, _ = i, i1, v2, v3, v5 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + if !(mask&(Int32FromInt32(1)< %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + loc = _do_newlocale(tls, mask, name, loc) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return loc +} + +func Xnewlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v mask=%v name=%v loc=%v, (%v:)", tls, mask, name, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__newlocale(tls, mask, name, loc) +} + +/* +grammar: + +Start = Expr ';' +Expr = Or | Or '?' Expr ':' Expr +Or = And | Or '||' And +And = Eq | And '&&' Eq +Eq = Rel | Eq '==' Rel | Eq '!=' Rel +Rel = Add | Rel '<=' Add | Rel '>=' Add | Rel '<' Add | Rel '>' Add +Add = Mul | Add '+' Mul | Add '-' Mul +Mul = Prim | Mul '*' Prim | Mul '/' Prim | Mul '%' Prim +Prim = '(' Expr ')' | '!' Prim | decimal | 'n' + +internals: + +recursive descent expression evaluator with stack depth limit. +for binary operators an operator-precedence parser is used. +eval* functions store the result of the parsed subexpression +and return a pointer to the next non-space character. +*/ + +type Tst = struct { + Fr uint32 + Fn uint32 + Fop int32 +} + +func _skipspace(tls *TLS, s uintptr) (r uintptr) { + var v1, v2 int32 + _, _ = v1, v2 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + return s +} + +func _evalprim(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* e at bp+0 */ uintptr + _ = v1 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _skipspace(tls, s) + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = Xstrtoul(tls, s, bp, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp)) == s || (*Tst)(unsafe.Pointer(st)).Fr == uint32(-Int32FromInt32(1)) { + return __ccgo_ts + } + return _skipspace(tls, *(*uintptr)(unsafe.Pointer(bp))) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('n') { + (*Tst)(unsafe.Pointer(st)).Fr = (*Tst)(unsafe.Pointer(st)).Fn + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(')') { + return __ccgo_ts + } + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('!') { + s = _evalprim(tls, st, s+uintptr(1), d) + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(!((*Tst)(unsafe.Pointer(st)).Fr != 0)) + return s + } + return __ccgo_ts +} + +func _binop(tls *TLS, st uintptr, op int32, left uint32) (r int32) { + var a, b uint32 + _, _ = a, b + a = left + b = (*Tst)(unsafe.Pointer(st)).Fr + switch op { + case 0: + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != 0 || b != 0) + return 0 + case int32(1): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != 0 && b != 0) + return 0 + case int32(2): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a == b) + return 0 + case int32(3): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a != b) + return 0 + case int32(4): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a >= b) + return 0 + case int32(5): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a <= b) + return 0 + case int32(6): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a > b) + return 0 + case int32(7): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint32(a < b) + return 0 + case int32(8): + (*Tst)(unsafe.Pointer(st)).Fr = a + b + return 0 + case int32(9): + (*Tst)(unsafe.Pointer(st)).Fr = a - b + return 0 + case int32(10): + (*Tst)(unsafe.Pointer(st)).Fr = a * b + return 0 + case int32(11): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a % b + return 0 + } + return int32(1) + case int32(12): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a / b + return 0 + } + return int32(1) + } + return int32(1) +} + +func _parseop(tls *TLS, st uintptr, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(i < int32(11)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(_opch[i]) { + /* note: >,< are accepted with or without = */ + if i < int32(6) && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(_opch2[i]) { + (*Tst)(unsafe.Pointer(st)).Fop = i + return s + uintptr(2) + } + if i >= int32(4) { + (*Tst)(unsafe.Pointer(st)).Fop = i + int32(2) + return s + uintptr(1) + } + break + } + goto _1 + _1: + ; + i++ + } + (*Tst)(unsafe.Pointer(st)).Fop = int32(13) + return s +} + +var _opch = [11]uint8{'|', '&', '=', '!', '>', '<', '+', '-', '*', '%', '/'} + +var _opch2 = [6]uint8{'|', '&', '=', '=', '=', '='} + +func _evalbinop(tls *TLS, st uintptr, s uintptr, minprec int32, d int32) (r uintptr) { + var left uint32 + var op int32 + _, _ = left, op + d-- + s = _evalprim(tls, st, s, d) + s = _parseop(tls, st, s) + for { + /* + st->r (left hand side value) and st->op are now set, + get the right hand side or back out if op has low prec, + if op was missing then prec[op]==0 + */ + op = (*Tst)(unsafe.Pointer(st)).Fop + if int32(_prec[op]) <= minprec { + return s + } + left = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalbinop(tls, st, s, int32(_prec[op]), d) + if _binop(tls, st, op, left) != 0 { + return __ccgo_ts + } + goto _1 + _1: + } + return r +} + +var _prec = [14]uint8{ + 0: uint8(1), + 1: uint8(2), + 2: uint8(3), + 3: uint8(3), + 4: uint8(4), + 5: uint8(4), + 6: uint8(4), + 7: uint8(4), + 8: uint8(5), + 9: uint8(5), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), +} + +func _evalexpr(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + var a, b, v2 uint32 + var v1 int32 + _, _, _, _ = a, b, v1, v2 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _evalbinop(tls, st, s, 0, d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') { + return s + } + a = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(':') { + return __ccgo_ts + } + b = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if a != 0 { + v2 = b + } else { + v2 = (*Tst)(unsafe.Pointer(st)).Fr + } + (*Tst)(unsafe.Pointer(st)).Fr = v2 + return s +} + +func X__pleval(tls *TLS, s uintptr, n uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* st at bp+0 */ Tst + _ = v1 + (*(*Tst)(unsafe.Pointer(bp))).Fn = n + s = _evalexpr(tls, bp, s, int32(100)) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(';') { + v1 = (*(*Tst)(unsafe.Pointer(bp))).Fr + } else { + v1 = uint32(-Int32FromInt32(1)) + } + return v1 +} + +var _buf1 [144]uint8 + +func Xsetlocale(tls *TLS, cat int32, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v name=%v, (%v:)", tls, cat, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var i, same int32 + var l Tsize_t + var lm, lm1, p, part1, ret, s, z, v3, v4, v5, v6 uintptr + var _ /* part at bp+24 */ [24]uint8 + var _ /* tmp_locale at bp+0 */ t__locale_struct + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, lm, lm1, p, part1, ret, s, same, z, v3, v4, v5, v6 + if uint32(cat) > uint32(LC_ALL) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + /* For LC_ALL, setlocale is required to return a string which + * encodes the current setting for all categories. The format of + * this string is unspecified, and only the following code, which + * performs both the serialization and deserialization, depends + * on the format, so it can easily be changed if needed. */ + if cat == int32(LC_ALL) { + if name != 0 { + *(*[24]uint8)(unsafe.Pointer(bp + 24)) = [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'} + p = name + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + z = X__strchrnul(tls, p, int32(';')) + if int32(z)-int32(p) <= int32(LOCALE_NAME_MAX) { + _memcpy(tls, bp+24, p, uint32(int32(z)-int32(p))) + (*(*[24]uint8)(unsafe.Pointer(bp + 24)))[int32(z)-int32(p)] = uint8(0) + if *(*uint8)(unsafe.Pointer(z)) != 0 { + p = z + uintptr(1) + } + } + lm = X__get_locale(tls, i, bp+24) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*4)) = lm + goto _1 + _1: + ; + i++ + } + X__libc.Fglobal_locale = *(*t__locale_struct)(unsafe.Pointer(bp)) + } + s = uintptr(unsafe.Pointer(&_buf1)) + same = 0 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + lm1 = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(i)*4)) + if lm1 == *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32)) { + same++ + } + if lm1 != 0 { + v3 = lm1 + 8 + } else { + v3 = __ccgo_ts + 447 + } + part1 = v3 + l = Xstrlen(tls, part1) + _memcpy(tls, s, part1, l) + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(';') + s += uintptr(l + uint32(1)) + goto _2 + _2: + ; + i++ + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + if same == int32(LC_ALL) { + v5 = part1 + } else { + v5 = uintptr(unsafe.Pointer(&_buf1)) + } + return v5 + } + if name != 0 { + lm = X__get_locale(tls, cat, name) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(cat)*4)) = lm + } else { + lm = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 32 + uintptr(cat)*4)) + } + if lm != 0 { + v6 = lm + 8 + } else { + v6 = __ccgo_ts + 447 + } + ret = v6 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return ret +} + +func X__strcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcmp(tls, l, r) +} + +func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, loc) +} + +func _vstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, ap Tva_list) (r Tssize_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var fill, fw, intl, left, lp, negpar, nogrp, nosym, rp, w int32 + var l Tsize_t + var s0, v12, v5, v6, v8 uintptr + var x float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = fill, fw, intl, l, left, lp, negpar, nogrp, nosym, rp, s0, w, x, v12, v5, v6, v8 + s0 = s +_3: + ; + if !(n != 0 && *(*uint8)(unsafe.Pointer(fmt)) != 0) { + goto _1 + } + if !(int32(*(*uint8)(unsafe.Pointer(fmt))) != int32('%')) { + goto _4 + } + goto literal +literal: + ; + v5 = s + s++ + v6 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + n-- + goto _2 +_4: + ; + fmt++ + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('%') { + goto literal + } + fill = int32(' ') + nogrp = 0 + negpar = 0 + nosym = 0 + left = 0 + for { + switch int32(*(*uint8)(unsafe.Pointer(fmt))) { + case int32('='): + fmt++ + v8 = fmt + fill = int32(*(*uint8)(unsafe.Pointer(v8))) + goto _7 + case int32('^'): + nogrp = int32(1) + goto _7 + case int32('('): + negpar = int32(1) + fallthrough + case int32('+'): + goto _7 + case int32('!'): + nosym = int32(1) + goto _7 + case int32('-'): + left = int32(1) + goto _7 + } + break + goto _7 + _7: + ; + fmt++ + } + fw = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + fw = int32(10)*fw + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _9 + _9: + ; + fmt++ + } + lp = 0 + rp = int32(2) + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('#') { + lp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + lp = int32(10)*lp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _10 + _10: + ; + fmt++ + } + } + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('.') { + rp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + rp = int32(10)*rp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _11 + _11: + ; + fmt++ + } + } + v12 = fmt + fmt++ + intl = BoolInt32(int32(*(*uint8)(unsafe.Pointer(v12))) == int32('i')) + w = lp + int32(1) + rp + if !(left != 0) && fw > w { + w = fw + } + x = VaFloat64(&ap) + l = uint32(Xsnprintf(tls, s, n, __ccgo_ts+485, VaList(bp+8, w, rp, x))) + if l >= n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(E2BIG) + return -int32(1) + } + s += uintptr(l) + n -= l + goto _2 +_2: + ; + goto _3 + goto _1 +_1: + ; + return int32(s) - int32(s0) +} + +func Xstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v loc=%v fmt=%v va=%v, (%v:)", tls, s, n, loc, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, loc, fmt, ap) + _ = ap + return ret +} + +func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale, fmt, ap) + _ = ap + return ret +} + +func Xstrtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof(tls, s, p) +} + +func Xstrtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, p) +} + +func Xstrtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold(tls, s, p) +} + +func X__strtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod_l(tls, s, p, l) +} + +func X__strtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof_l(tls, s, p, l) +} + +func X__strtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold_l(tls, s, p, l) +} + +// C documentation +// +// /* collate only by code points */ +func X__strxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, src) + if n > l { + Xstrcpy(tls, dest, src) + } + return l +} + +func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xstrxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, loc) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _current_domain uintptr + +func X__gettextdomain(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if _current_domain != 0 { + v1 = _current_domain + } else { + v1 = __ccgo_ts + 350 + } + return v1 +} + +func Xtextdomain(tls *TLS, domainname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v, (%v:)", tls, domainname, origin(2)) + defer func() { trc("-> %v", r) }() + } + var domlen Tsize_t + _ = domlen + if !(domainname != 0) { + return X__gettextdomain(tls) + } + domlen = Xstrlen(tls, domainname) + if domlen > uint32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(_current_domain != 0) { + _current_domain = Xmalloc(tls, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if !(_current_domain != 0) { + return uintptr(0) + } + } + _memcpy(tls, _current_domain, domainname, domlen+uint32(1)) + return _current_domain +} + +func Xgettext(tls *TLS, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid=%v, (%v:)", tls, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdgettext(tls, uintptr(0), msgid) +} + +func Xngettext(tls *TLS, msgid1 uintptr, msgid2 uintptr, n uint32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdngettext(tls, uintptr(0), msgid1, msgid2, n) +} + +func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var global, old, v1, v2 Tlocale_t + var self Tpthread_t + _, _, _, _, _ = global, old, self, v1, v2 + self = uintptr(___get_tp(tls)) + old = (*t__pthread)(unsafe.Pointer(self)).Flocale + global = uintptr(unsafe.Pointer(&X__libc)) + 32 + if new1 != 0 { + if new1 == uintptr(-Int32FromInt32(1)) { + v1 = global + } else { + v1 = new1 + } + (*t__pthread)(unsafe.Pointer(self)).Flocale = v1 + } + if old == global { + v2 = uintptr(-Int32FromInt32(1)) + } else { + v2 = old + } + return v2 +} + +func Xuselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__uselocale(tls, new1) +} + +// C documentation +// +// /* FIXME: stub */ +func X__wcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscmp(tls, l, r) +} + +func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* FIXME: stub */ +func Xwcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, locale) +} + +// C documentation +// +// /* collate only by code points */ +func X__wcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xwcslen(tls, src) + if l < n { + Xwmemcpy(tls, dest, src, l+uint32(1)) + } else { + if n != 0 { + Xwmemcpy(tls, dest, src, n-uint32(1)) + *(*Twchar_t)(unsafe.Pointer(dest + uintptr(n-uint32(1))*4)) = uint32(0) + } + } + return l +} + +func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xwcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, loc) +} + +func Xreallocarray(tls *TLS, ptr uintptr, m Tsize_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ptr=%v m=%v n=%v, (%v:)", tls, ptr, m, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n != 0 && m > uint32(-Int32FromInt32(1))/n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + return Xrealloc(tls, ptr, m*n) +} + +const LDBL_EPSILON2 = 0 +const LDBL_MAX2 = 0 +const LDBL_MIN2 = 0 + +var _C1 = float64(0.0416666666666666) /* 0x3FA55555, 0x5555554C */ +var _C2 = -Float64FromFloat64(0.001388888888887411) /* 0xBF56C16C, 0x16C15177 */ +var _C3 = float64(2.480158728947673e-05) /* 0x3EFA01A0, 0x19CB1590 */ +var _C4 = -Float64FromFloat64(2.7557314351390663e-07) /* 0xBE927E4F, 0x809C52AD */ +var _C5 = float64(2.087572321298175e-09) /* 0x3E21EE9E, 0xBDB4B1C4 */ +var _C6 = -Float64FromFloat64(1.1359647557788195e-11) /* 0xBDA8FAE9, 0xBE8838D4 */ + +func X__cos(tls *TLS, x float64, y float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hz, r, w, z Tdouble_t + _, _, _, _ = hz, r, w, z + z = x * x + w = z * z + r = z*(_C1+z*(_C2+z*_C3)) + w*w*(_C4+z*(_C5+z*_C6)) + hz = float64(0.5) * z + w = float64(1) - hz + return w + (Float64FromFloat64(1) - w - hz + (z*r - x*y)) +} + +// C documentation +// +// /* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ + +var _C0 = -Float64FromFloat64(0.499999997251031) /* -0.499999997251031003120 */ +var _C11 = float64(0.04166662332373906) /* 0.0416666233237390631894 */ +var _C21 = -Float64FromFloat64(0.001388676377460993) /* -0.00138867637746099294692 */ +var _C31 = float64(2.439044879627741e-05) /* 0.0000243904487962774090654 */ + +func X__cosdf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w, z Tdouble_t + _, _, _ = r, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _C21 + z*_C31 + return float32(float64(1) + z*_C0 + w*_C11 + w*z*r) +} + +// C documentation +// +// /* k is such that k*ln2 has minimal relative error and x - kln2 > log(DBL_MIN) */ +var _k2 = int32(2043) +var _kln22 = float64(1416.0996898839683) + +// C documentation +// +// /* exp(x)/2 for x >= log(DBL_MAX), slightly better than 0.5*exp(x/2)*exp(x/2) */ +func X__expo2(tls *TLS, x float64, sign float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float64 + var v1 Tuint64_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint64(uint32(Int32FromInt32(0x3ff)+_k2/Int32FromInt32(2))< log(FLT_MIN) */ +var _k3 = int32(235) +var _kln23 = Float32FromFloat32(162.88958740234375) + +// C documentation +// +// /* expf(x)/2 for x >= log(FLT_MAX), slightly better than 0.5f*expf(x/2)*expf(x/2) */ +func X__expo2f(tls *TLS, x float32, sign float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float32 + var v1 Tuint32_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint32(Int32FromInt32(0x7f)+_k3/Int32FromInt32(2)) << int32(23) + scale = *(*float32)(unsafe.Pointer(&v1)) + /* exp(x - k ln2) * 2**(k-1) */ + /* in directed rounding correct sign before rounding or overflow is important */ + return Xexpf(tls, x-_kln23) * (sign * scale) * scale +} + +func X__fpclassify(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _ = e, v1, v2 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + if *(*Tuint64_t)(unsafe.Pointer(bp))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(e != 0) { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return X__fpclassify(tls, x) +} + +const pio2_hi = 0 +const pio2_lo = 0 + +func X__math_divzero(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float64 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float64FromFloat64(1) + } else { + v1 = float64(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / float64(0) +} + +func X__math_divzerof(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float32 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float32FromFloat32(1) + } else { + v1 = Float32FromFloat32(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / Float32FromFloat32(0) +} + +func X__math_invalid(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_invalidf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_oflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(3.105036184601418e+231)) +} + +func X__math_oflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(1.5845632502852868e+29)) +} + +func X__math_uflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(1.2882297539194267e-231)) +} + +func X__math_uflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(2.524354896707238e-29)) +} + +func X__math_xflow(tls *TLS, sign Tuint32_t, y2 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float64 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +func X__math_xflowf(tls *TLS, sign Tuint32_t, y2 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float32 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +const DBL_EPSILON1 = 2.220446049250313e-16 +const EPS = 0 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 33 bit of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// * pio2_2: second 33 bit of pi/2 +// * pio2_2t: pi/2 - (pio2_1+pio2_2) +// * pio2_3: third 33 bit of pi/2 +// * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +// */ + +var _toint = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio4 = float64(0.7853981633974483) +var _invpio2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_1 = float64(1.5707963267341256) /* 0x3FF921FB, 0x54400000 */ +var _pio2_1t = float64(6.077100506506192e-11) /* 0x3DD0B461, 0x1A626331 */ +var _pio2_2 = float64(6.077100506303966e-11) /* 0x3DD0B461, 0x1A600000 */ +var _pio2_2t = float64(2.0222662487959506e-21) /* 0x3BA3198A, 0x2E037073 */ +var _pio2_3 = float64(2.0222662487111665e-21) /* 0x3BA3198A, 0x2E000000 */ +var _pio2_3t = float64(8.4784276603689e-32) /* 0x397B839A, 0x252049C1 */ + +// C documentation +// +// /* caller must handle the case when reduction is not needed: |x| ~<= pi/4 */ +func X__rem_pio2(tls *TLS, x float64, y uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey, i, n, sign int32 + var fn, r, t, w, z Tdouble_t + var ix Tuint32_t + var v2 float64 + var _ /* tx at bp+8 */ [3]float64 + var _ /* ty at bp+32 */ [2]float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, fn, i, ix, n, r, sign, t, w, z, v2 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix <= uint32(0x400f6a7a) { /* |x| ~<= 5pi/4 */ + if ix&uint32(0xfffff) == uint32(0x921fb) { /* |x| ~= pi/2 or 2pi/2 */ + goto medium + } /* cancellation -- use medium case */ + if ix <= uint32(0x4002d97c) { /* |x| ~<= 3pi/4 */ + if !(sign != 0) { + z = x - _pio2_1 /* one round good to 85 bits */ + *(*float64)(unsafe.Pointer(y)) = z - _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - _pio2_1t + return int32(1) + } else { + z = x + _pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + _pio2_1t + return -int32(1) + } + } else { + if !(sign != 0) { + z = x - Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(2)*_pio2_1t + return int32(2) + } else { + z = x + Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(2)*_pio2_1t + return -int32(2) + } + } + } + if ix <= uint32(0x401c463b) { /* |x| ~<= 9pi/4 */ + if ix <= uint32(0x4015fdbc) { /* |x| ~<= 7pi/4 */ + if ix == uint32(0x4012d97c) { /* |x| ~= 3pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(3)*_pio2_1t + return int32(3) + } else { + z = x + Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(3)*_pio2_1t + return -int32(3) + } + } else { + if ix == uint32(0x401921fb) { /* |x| ~= 4pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(4)*_pio2_1t + return int32(4) + } else { + z = x + Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(4)*_pio2_1t + return -int32(4) + } + } + } + if !(ix < uint32(0x413921fb)) { + goto _1 + } /* |x| ~< 2^20*(pi/2), medium size */ + goto medium +medium: + ; + /* rint(x/(pi/2)) */ + fn = x*_invpio2 + _toint - _toint + n = int32(fn) + r = x - fn*_pio2_1 + w = fn * _pio2_1t /* 1st round, good to 85 bits */ + /* Matters with directed rounding. */ + if r-w < -_pio4 { + n-- + fn-- + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } else { + if r-w > _pio4 { + n++ + fn++ + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } + } + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + ex = int32(ix >> int32(20)) + if ex-ey > int32(16) { /* 2nd round, good to 118 bits */ + t = r + w = fn * _pio2_2 + r = t - w + w = fn*_pio2_2t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if ex-ey > int32(49) { /* 3rd round, good to 151 bits, covers all cases */ + t = r + w = fn * _pio2_3 + r = t - w + w = fn*_pio2_3t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + } + } + *(*float64)(unsafe.Pointer(y + 1*8)) = r - *(*float64)(unsafe.Pointer(y)) - w + return n +_1: + ; + /* + * all other (large) arguments + */ + if ix >= uint32(0x7ff00000) { /* x is inf or NaN */ + v2 = x - x + *(*float64)(unsafe.Pointer(y + 1*8)) = v2 + *(*float64)(unsafe.Pointer(y)) = v2 + return 0 + } + /* set z = scalbn(|x|,-ilogb(x)+23) */ + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(Int32FromInt32(0x3ff)+Int32FromInt32(23)) << Int32FromInt32(52) + z = *(*float64)(unsafe.Pointer(bp)) + i = 0 + for { + if !(i < int32(2)) { + break + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = float64(int32(z)) + z = (z - (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i]) * float64(1.6777216e+07) + goto _3 + _3: + ; + i++ + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = z + /* skip zero terms, first term is non-zero */ + for (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] == float64(0) { + i-- + } + n = X__rem_pio2_large(tls, bp+8, bp+32, int32(ix>>Int32FromInt32(20))-(Int32FromInt32(0x3ff)+Int32FromInt32(23)), i+int32(1), int32(1)) + if sign != 0 { + *(*float64)(unsafe.Pointer(y)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return -n + } + *(*float64)(unsafe.Pointer(y)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return n +} + +const DBL_EPSILON2 = 0 + +var _init_jk = [4]int32{ + 0: int32(3), + 1: int32(4), + 2: int32(4), + 3: int32(6), +} /* initial value for jk */ + +// C documentation +// +// /* +// * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi +// * +// * integer array, contains the (24*i)-th to (24*i+23)-th +// * bit of 2/pi after binary point. The corresponding +// * floating value is +// * +// * ipio2[i] * 2^(-24(i+1)). +// * +// * NB: This table must have at least (e0-3)/24 + jk terms. +// * For quad precision (e0 <= 16360, jk = 6), this is 686. +// */ +var _ipio2 = [66]Tint32_t{ + 0: int32(0xA2F983), + 1: int32(0x6E4E44), + 2: int32(0x1529FC), + 3: int32(0x2757D1), + 4: int32(0xF534DD), + 5: int32(0xC0DB62), + 6: int32(0x95993C), + 7: int32(0x439041), + 8: int32(0xFE5163), + 9: int32(0xABDEBB), + 10: int32(0xC561B7), + 11: int32(0x246E3A), + 12: int32(0x424DD2), + 13: int32(0xE00649), + 14: int32(0x2EEA09), + 15: int32(0xD1921C), + 16: int32(0xFE1DEB), + 17: int32(0x1CB129), + 18: int32(0xA73EE8), + 19: int32(0x8235F5), + 20: int32(0x2EBB44), + 21: int32(0x84E99C), + 22: int32(0x7026B4), + 23: int32(0x5F7E41), + 24: int32(0x3991D6), + 25: int32(0x398353), + 26: int32(0x39F49C), + 27: int32(0x845F8B), + 28: int32(0xBDF928), + 29: int32(0x3B1FF8), + 30: int32(0x97FFDE), + 31: int32(0x05980F), + 32: int32(0xEF2F11), + 33: int32(0x8B5A0A), + 34: int32(0x6D1F6D), + 35: int32(0x367ECF), + 36: int32(0x27CB09), + 37: int32(0xB74F46), + 38: int32(0x3F669E), + 39: int32(0x5FEA2D), + 40: int32(0x7527BA), + 41: int32(0xC7EBE5), + 42: int32(0xF17B3D), + 43: int32(0x0739F7), + 44: int32(0x8A5292), + 45: int32(0xEA6BFB), + 46: int32(0x5FB11F), + 47: int32(0x8D5D08), + 48: int32(0x560330), + 49: int32(0x46FC7B), + 50: int32(0x6BABF0), + 51: int32(0xCFBC20), + 52: int32(0x9AF436), + 53: int32(0x1DA9E3), + 54: int32(0x91615E), + 55: int32(0xE61B08), + 56: int32(0x659985), + 57: int32(0x5F14A0), + 58: int32(0x68408D), + 59: int32(0xFFD880), + 60: int32(0x4D7327), + 61: int32(0x310606), + 62: int32(0x1556CA), + 63: int32(0x73A8C9), + 64: int32(0x60E27B), + 65: int32(0xC08C6B), +} + +var _PIo2 = [8]float64{ + 0: float64(1.570796251296997), + 1: float64(7.549789415861596e-08), + 2: float64(5.390302529957765e-15), + 3: float64(3.282003415807913e-22), + 4: float64(1.270655753080676e-29), + 5: float64(1.2293330898111133e-36), + 6: float64(2.7337005381646456e-44), + 7: float64(2.1674168387780482e-51), +} + +func X__rem_pio2_large(tls *TLS, x uintptr, y uintptr, e0 int32, nx int32, prec int32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v e0=%v nx=%v prec=%v, (%v:)", tls, x, y, e0, nx, prec, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var carry, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q0 Tint32_t + var f, q [20]float64 + var fw, z, v2, v20, v22, v24 float64 + var _ /* fq at bp+80 */ [20]float64 + var _ /* iq at bp+0 */ [20]Tint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = carry, f, fw, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q, q0, z, v2, v20, v22, v24 + /* initialize jk*/ + jk = _init_jk[prec] + jp = jk + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx - int32(1) + jv = (e0 - int32(3)) / int32(24) + if jv < 0 { + jv = 0 + } + q0 = e0 - int32(24)*(jv+int32(1)) + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv - jx + m = jx + jk + i = 0 + for { + if !(i <= m) { + break + } + if j < 0 { + v2 = float64(0) + } else { + v2 = float64(_ipio2[j]) + } + f[i] = v2 + goto _1 + _1: + ; + i++ + j++ + } + /* compute q[0],q[1],...q[jk] */ + i = 0 + for { + if !(i <= jk) { + break + } + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _4 + _4: + ; + j++ + } + q[i] = fw + goto _3 + _3: + ; + i++ + } + jz = jk + goto recompute +recompute: + ; + /* distill q[] into iq[] reversingly */ + i = 0 + j = jz + z = q[jz] + for { + if !(j > 0) { + break + } + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + z = q[j-int32(1)] + fw + goto _5 + _5: + ; + i++ + j-- + } + /* compute n */ + z = Xscalbn(tls, z, q0) /* actual value of z */ + z -= float64(8) * Xfloor(tls, z*float64(0.125)) /* trim off integer >= 8 */ + n = int32(z) + z -= float64(n) + ih = 0 + if q0 > 0 { /* need iq[jz-1] to determine n */ + i = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(24) - q0) + n += i + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) -= i << (int32(24) - q0) + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(23) - q0) + } else { + if q0 == 0 { + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> int32(23) + } else { + if z >= float64(0.5) { + ih = int32(2) + } + } + } + if ih > 0 { /* q > 0.5 */ + n += int32(1) + carry = 0 + i = 0 + for { + if !(i < jz) { + break + } /* compute 1-q */ + j = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + if carry == 0 { + if j != 0 { + carry = int32(1) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0x1000000) - j + } + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0xffffff) - j + } + goto _6 + _6: + ; + i++ + } + if q0 > 0 { /* rare case: chance is 1 in 12 */ + switch q0 { + case int32(1): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x7fffff) + case int32(2): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x3fffff) + break + } + } + if ih == int32(2) { + z = float64(1) - z + if carry != 0 { + z -= Xscalbn(tls, float64(1), q0) + } + } + } + /* check if recomputation is needed */ + if z == float64(0) { + j = 0 + i = jz - int32(1) + for { + if !(i >= jk) { + break + } + j |= (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + goto _7 + _7: + ; + i-- + } + if j == 0 { /* need recomputation */ + k = int32(1) + for { + if !((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jk-k] == 0) { + break + } + goto _8 + _8: + ; + k++ + } /* k = no. of terms needed */ + i = jz + int32(1) + for { + if !(i <= jz+k) { + break + } /* add q[jz+1] to q[jz+k] */ + f[jx+i] = float64(_ipio2[jv+i]) + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _10 + _10: + ; + j++ + } + q[i] = fw + goto _9 + _9: + ; + i++ + } + jz += k + goto recompute + } + } + /* chop off zero terms */ + if z == float64(0) { + jz -= int32(1) + q0 -= int32(24) + for (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] == 0 { + jz-- + q0 -= int32(24) + } + } else { /* break z into 24-bit if necessary */ + z = Xscalbn(tls, z, -q0) + if z >= float64(1.6777216e+07) { + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + jz += int32(1) + q0 += int32(24) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(fw) + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z) + } + } + /* convert integer "bit" chunk to floating-point value */ + fw = Xscalbn(tls, float64(1), q0) + i = jz + for { + if !(i >= 0) { + break + } + q[i] = fw * float64((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i]) + fw *= float64(5.960464477539063e-08) + goto _11 + _11: + ; + i-- + } + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + i = jz + for { + if !(i >= 0) { + break + } + fw = float64(0) + k = Int32FromInt32(0) + for { + if !(k <= jp && k <= jz-i) { + break + } + fw += _PIo2[k] * q[i+k] + goto _13 + _13: + ; + k++ + } + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[jz-i] = fw + goto _12 + _12: + ; + i-- + } + /* compress fq[] into y[] */ + switch prec { + case 0: + goto _14 + case int32(2): + goto _15 + case int32(1): + goto _16 + case int32(3): + goto _17 + } + goto _18 +_14: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _19 + _19: + ; + i-- + } + if ih == 0 { + v20 = fw + } else { + v20 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v20 + goto _18 +_16: + ; +_15: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _21 + _21: + ; + i-- + } + // TODO: drop excess precision here once double_t is used + fw = fw + if ih == 0 { + v22 = fw + } else { + v22 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v22 + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] - fw + i = int32(1) + for { + if !(i <= jz) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _23 + _23: + ; + i++ + } + if ih == 0 { + v24 = fw + } else { + v24 = -fw + } + *(*float64)(unsafe.Pointer(y + 1*8)) = v24 + goto _18 +_17: + ; /* painful */ + i = jz +_27: + ; + if !(i > 0) { + goto _25 + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _26 +_26: + ; + i-- + goto _27 + goto _25 +_25: + ; + i = jz + for { + if !(i > int32(1)) { + break + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _28 + _28: + ; + i-- + } + fw = float64(0) + i = jz + for { + if !(i >= int32(2)) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _29 + _29: + ; + i-- + } + if ih == 0 { + *(*float64)(unsafe.Pointer(y)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = fw + } else { + *(*float64)(unsafe.Pointer(y)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = -fw + } +_18: + ; + return n & int32(7) +} + +const DBL_EPSILON3 = 2.220446049250313e-16 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 25 bits of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// */ + +var _toint1 = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio41 = float64(0.7853981852531433) +var _invpio21 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_11 = float64(1.5707963109016418) /* 0x3FF921FB, 0x50000000 */ +var _pio2_1t1 = float64(1.5893254773528196e-08) /* 0x3E5110b4, 0x611A6263 */ + +func X__rem_pio2f(tls *TLS, x float32, y uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e0, n, sign int32 + var fn Tdouble_t + var ix Tuint32_t + var _ /* tx at bp+8 */ [1]float64 + var _ /* ty at bp+16 */ [1]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e0, fn, ix, n, sign + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + /* 25+53 bit pi is good enough for medium size */ + if ix < uint32(0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */ + /* Use a specialized rint() to get fn. */ + fn = float64(x)*_invpio21 + _toint1 - _toint1 + n = int32(fn) + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + /* Matters with directed rounding. */ + if *(*float64)(unsafe.Pointer(y)) < -_pio41 { + n-- + fn-- + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } else { + if *(*float64)(unsafe.Pointer(y)) > _pio41 { + n++ + fn++ + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } + } + return n + } + if ix >= uint32(0x7f800000) { /* x is inf or NaN */ + *(*float64)(unsafe.Pointer(y)) = float64(x - x) + return 0 + } + /* scale x into [2^23, 2^24-1] */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + e0 = int32(ix>>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(23))) /* e0 = ilogb(|x|)-23, positive */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix - uint32(e0< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + } + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) +} + +// C documentation +// +// // FIXME: macro in math.h +func X__signbitf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) +} + +func X__signbitl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__signbit(tls, x) +} + +var _S1 = -Float64FromFloat64(0.16666666666666632) /* 0xBFC55555, 0x55555549 */ +var _S2 = float64(0.00833333333332249) /* 0x3F811111, 0x1110F8A6 */ +var _S3 = -Float64FromFloat64(0.0001984126982985795) /* 0xBF2A01A0, 0x19C161D5 */ +var _S4 = float64(2.7557313707070068e-06) /* 0x3EC71DE3, 0x57B1FE7D */ +var _S5 = -Float64FromFloat64(2.5050760253406863e-08) /* 0xBE5AE5E6, 0x8A2B9CEB */ +var _S6 = float64(1.58969099521155e-10) /* 0x3DE5D93A, 0x5ACFD57C */ + +func X__sin(tls *TLS, x float64, y float64, iy int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v iy=%v, (%v:)", tls, x, y, iy, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v, w, z Tdouble_t + _, _, _, _ = r, v, w, z + z = x * x + w = z * z + r = _S2 + z*(_S3+z*_S4) + z*w*(_S5+z*_S6) + v = z * x + if iy == 0 { + return x + v*(_S1+z*r) + } else { + return x - (z*(Float64FromFloat64(0.5)*y-v*r) - y - v*_S1) + } + return r1 +} + +// C documentation +// +// /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ + +var _S11 = -Float64FromFloat64(0.16666666641626524) /* -0.166666666416265235595 */ +var _S21 = float64(0.008333329385889463) /* 0.0083333293858894631756 */ +var _S31 = -Float64FromFloat64(0.00019839334836096632) /* -0.000198393348360966317347 */ +var _S41 = float64(2.718311493989822e-06) /* 0.0000027183114939898219064 */ + +func X__sindf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, w, z Tdouble_t + _, _, _, _ = r, s, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _S31 + z*_S41 + s = z * x + return float32(x + s*(_S11+z*_S21) + s*w*r) +} + +var _T = [13]float64{ + 0: float64(0.3333333333333341), + 1: float64(0.13333333333320124), + 2: float64(0.05396825397622605), + 3: float64(0.021869488294859542), + 4: float64(0.0088632398235993), + 5: float64(0.0035920791075913124), + 6: float64(0.0014562094543252903), + 7: float64(0.0005880412408202641), + 8: float64(0.0002464631348184699), + 9: float64(7.817944429395571e-05), + 10: float64(7.140724913826082e-05), + 11: -Float64FromFloat64(1.8558637485527546e-05), + 12: float64(2.590730518636337e-05), +} +var _pio42 = float64(0.7853981633974483) /* 3FE921FB, 54442D18 */ +var _pio4lo = float64(3.061616997868383e-17) /* 3C81A626, 33145C07 */ + +func X__tan(tls *TLS, x float64, y float64, odd int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v odd=%v, (%v:)", tls, x, y, odd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a, r, s, v, w, z, v1, v3 Tdouble_t + var a0, w0 float64 + var big, sign int32 + var hx Tuint32_t + var v2, v4 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, a0, big, hx, r, s, sign, v, w, w0, z, v1, v2, v3, v4 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + big = BoolInt32(hx&uint32(0x7fffffff) >= uint32(0x3FE59428)) /* |x| >= 0.6744 */ + if big != 0 { + sign = int32(hx >> int32(31)) + if sign != 0 { + x = -x + y = -y + } + x = _pio42 - x + (_pio4lo - y) + y = float64(0) + } + z = x * x + w = z * z + /* + * Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = _T[int32(1)] + w*(_T[int32(3)]+w*(_T[int32(5)]+w*(_T[int32(7)]+w*(_T[int32(9)]+w*_T[int32(11)])))) + v = z * (_T[int32(2)] + w*(_T[int32(4)]+w*(_T[int32(6)]+w*(_T[int32(8)]+w*(_T[int32(10)]+w*_T[int32(12)]))))) + s = z * x + r = y + z*(s*(r+v)+y) + s*_T[0] + w = x + r + if big != 0 { + s = float64(int32(1) - int32(2)*odd) + v = s - float64(2)*(x+(r-w*w/(w+s))) + if sign != 0 { + v1 = -v + } else { + v1 = v + } + return v1 + } + if !(odd != 0) { + return w + } + /* -1.0/(x+r) has up to 2ulp error, so compute it accurately */ + w0 = w + v2 = *(*Tuint64_t)(unsafe.Pointer(&w0))>>Int32FromInt32(32)<>Int32FromInt32(32)< %v", r1) }() + } + var r, s, t, u, w, z Tdouble_t + var v1 float64 + _, _, _, _, _, _, _ = r, s, t, u, w, z, v1 + z = x * x + /* + * Split up the polynomial into small independent terms to give + * opportunities for parallel evaluation. The chosen splitting is + * micro-optimized for Athlons (XP, X64). It costs 2 multiplications + * relative to Horner's method on sequential machines. + * + * We add the small terms from lowest degree up for efficiency on + * non-sequential machines (the lowest degree terms tend to be ready + * earlier). Apart from this, we don't care about order of + * operations, and don't need to to care since we have precision to + * spare. However, the chosen splitting is good for accuracy too, + * and would give results as accurate as Horner's method if the + * small terms were added from highest degree down. + */ + r = _T1[int32(4)] + z*_T1[int32(5)] + t = _T1[int32(2)] + z*_T1[int32(3)] + w = z * z + s = z * x + u = _T1[0] + z*_T1[int32(1)] + r = x + s*u + s*w*(t+w*r) + if odd != 0 { + v1 = -Float64FromFloat64(1) / r + } else { + v1 = r + } + return float32(v1) +} + +var _pio2_hi = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +var _pS0 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS1 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS2 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS3 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS4 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS5 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS1 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS2 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS3 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS4 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS0 + z*(_pS1+z*(_pS2+z*(_pS3+z*(_pS4+z*_pS5))))) + q = float64(1) + z*(_qS1+z*(_qS2+z*(_qS3+z*_qS4))) + return p / q +} + +func Xacos(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, df, s, w, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, df, hx, ix, lx, s, w, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* acos(1)=0, acos(-1)=pi */ + if hx>>int32(31) != 0 { + return Float64FromInt32(2)*_pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + if ix <= uint32(0x3c600000) { /* |x| < 2**-57 */ + return _pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return _pio2_hi - (x - (_pio2_lo - x*_R(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (float64(1) + x) * float64(0.5) + s = Xsqrt(tls, z) + w = _R(tls, z)*s - _pio2_lo + return Float64FromInt32(2) * (_pio2_hi - (s + w)) + } + /* x > 0.5 */ + z = (float64(1) - x) * float64(0.5) + s = Xsqrt(tls, z) + df = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&df))>>Int32FromInt32(32)< %v", r) }() + } + var c, df, s, w, z float32 + var hx, ix, v1 Tuint32_t + _, _, _, _, _, _, _, _ = c, df, hx, ix, s, w, z, v1 + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3f800000) { + if ix == uint32(0x3f800000) { + if hx>>int32(31) != 0 { + return Float32FromInt32(2)*_pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return Float32FromInt32(0) + } + return Float32FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3f000000) { + if ix <= uint32(0x32800000) { /* |x| < 2**-26 */ + return _pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return _pio2_hi1 - (x - (_pio2_lo1 - x*_R1(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (Float32FromInt32(1) + x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + w = _R1(tls, z)*s - _pio2_lo1 + return Float32FromInt32(2) * (_pio2_hi1 - (s + w)) + } + /* x > 0.5 */ + z = (Float32FromInt32(1) - x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + hx = *(*Tuint32_t)(unsafe.Pointer(&s)) + v1 = hx & uint32(0xfffff000) + df = *(*float32)(unsafe.Pointer(&v1)) + c = (z - df*df) / (s + df) + w = _R1(tls, z)*s + c + return Float32FromInt32(2) * (df + w) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacosh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e uint32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _ = e + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + /* x < 1 domain error is handled in the called functions */ + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| < 2, up to 2ulp error in [1,1.125] */ + return Xlog1p(tls, x-Float64FromInt32(1)+Xsqrt(tls, (x-Float64FromInt32(1))*(x-Float64FromInt32(1))+Float64FromInt32(2)*(x-Float64FromInt32(1)))) + } + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| < 0x1p26 */ + return Xlog(tls, Float64FromInt32(2)*x-Float64FromInt32(1)/(x+Xsqrt(tls, x*x-Float64FromInt32(1)))) + } + /* |x| >= 0x1p26 or nan */ + return Xlog(tls, x) + float64(0.6931471805599453) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacoshf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = a + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + a = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if a < uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 0x1p12 or x <= -2 or nan */ + return Xlogf(tls, x) + Float32FromFloat32(0.6931471805599453) +} + +func Xacoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacosh(tls, x) +} + +func Xacosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacos(tls, x) +} + +var _pio2_hi2 = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo2 = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +/* coefficients for R(x^2) */ +var _pS02 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS12 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS22 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS31 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS41 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS51 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS12 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS21 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS31 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS41 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R2(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS02 + z*(_pS12+z*(_pS22+z*(_pS31+z*(_pS41+z*_pS51))))) + q = float64(1) + z*(_qS12+z*(_qS21+z*(_qS31+z*_qS41))) + return p / q +} + +func Xasin(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, f, r, s, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, f, hx, ix, lx, r, s, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* asin(1) = +-pi/2 with inexact */ + return x*_pio2_hi2 + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + /* if 0x1p-1022 <= |x| < 0x1p-26, avoid raising underflow */ + if ix < uint32(0x3e500000) && ix >= uint32(0x00100000) { + return x + } + return x + x*_R2(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float64FromInt32(1) - Xfabs(tls, x)) * float64(0.5) + s = Xsqrt(tls, z) + r = _R2(tls, z) + if ix >= uint32(0x3fef3333) { /* if |x| > 0.975 */ + x = _pio2_hi2 - (Float64FromInt32(2)*(s+s*r) - _pio2_lo2) + } else { + /* f+c = sqrt(z) */ + f = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&f))>>Int32FromInt32(32)<>int32(31) != 0 { + return -x + } + return x +} + +var _pio2 = float64(1.5707963267948966) + +/* coefficients for R(x^2) */ +var _pS03 = float32(0.16666586697) +var _pS13 = float32(-Float64FromFloat64(0.042743422091)) +var _pS23 = float32(-Float64FromFloat64(0.008656363003)) +var _qS13 = float32(-Float64FromFloat64(0.7066296339)) + +func _R3(tls *TLS, z float32) (r float32) { + var p, q Tfloat_t + _, _ = p, q + p = z * (_pS03 + z*(_pS13+z*_pS23)) + q = Float32FromFloat32(1) + z*_qS13 + return p / q +} + +func Xasinf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var hx, ix Tuint32_t + var s float64 + var z float32 + _, _, _, _ = hx, ix, s, z + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x3f800000) { /* |x| >= 1 */ + if ix == uint32(0x3f800000) { /* |x| == 1 */ + return float32(float64(x)*_pio2 + Float64FromFloat32(7.52316384526264e-37)) + } /* asin(+-1) = +-pi/2 with inexact */ + return Float32FromInt32(0) / (x - x) /* asin(|x|>1) is NaN */ + } + if ix < uint32(0x3f000000) { /* |x| < 0.5 */ + /* if 0x1p-126 <= |x| < 0x1p-12, avoid raising underflow */ + if ix < uint32(0x39800000) && ix >= uint32(0x00800000) { + return x + } + return x + x*_R3(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float32FromInt32(1) - Xfabsf(tls, x)) * Float32FromFloat32(0.5) + s = Xsqrt(tls, float64(z)) + x = float32(_pio2 - Float64FromInt32(2)*(s+s*float64(_R3(tls, z)))) + if hx>>int32(31) != 0 { + return -x + } + return x +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, s, y, y1, y2, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| >= 0x1p26 or inf or nan */ + x3 = Xlog(tls, x3) + float64(0.6931471805599453) + } else { + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| >= 2 */ + x3 = Xlog(tls, Float64FromInt32(2)*x3+Float64FromInt32(1)/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+x3)) + } else { + if e >= uint32(Int32FromInt32(0x3ff)-Int32FromInt32(26)) { + /* |x| >= 0x1p-26, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1p(tls, x3+x3*x3/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+Float64FromInt32(1))) + } else { + /* |x| < 0x1p-26, raise inexact if x != 0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tuint32_t + var s uint32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = i, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = i + x3 = *(*float32)(unsafe.Pointer(bp)) + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(12)<= 0x1p12 or inf or nan */ + x3 = Xlogf(tls, x3) + Float32FromFloat32(0.6931471805599453) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 2 */ + x3 = Xlogf(tls, Float32FromInt32(2)*x3+Float32FromInt32(1)/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+x3)) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)<= 0x1p-12, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1pf(tls, x3+x3*x3/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+Float32FromInt32(1))) + } else { + /* |x| < 0x1p-12, raise inexact if x!=0 */ + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +func Xasinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasinh(tls, x) +} + +func Xasinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasin(tls, x) +} + +var _atanhi = [4]float64{ + 0: float64(0.4636476090008061), + 1: float64(0.7853981633974483), + 2: float64(0.982793723247329), + 3: float64(1.5707963267948966), +} + +var _atanlo = [4]float64{ + 0: float64(2.2698777452961687e-17), + 1: float64(3.061616997868383e-17), + 2: float64(1.3903311031230998e-17), + 3: float64(6.123233995736766e-17), +} + +var _aT = [11]float64{ + 0: float64(0.3333333333333293), + 1: -Float64FromFloat64(0.19999999999876483), + 2: float64(0.14285714272503466), + 3: -Float64FromFloat64(0.11111110405462356), + 4: float64(0.09090887133436507), + 5: -Float64FromFloat64(0.0769187620504483), + 6: float64(0.06661073137387531), + 7: -Float64FromFloat64(0.058335701337905735), + 8: float64(0.049768779946159324), + 9: -Float64FromFloat64(0.036531572744216916), + 10: float64(0.016285820115365782), +} + +func Xatan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tdouble_t + var y float32 + var y1, y2 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x44100000) { /* if |x| >= 2^66 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, __u2 Tuint64_t + var ix, iy, lx, ly, m Tuint32_t + var z, v6, v7 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, __u2, ix, iy, lx, ly, m, z, v1, v3, v5, v6, v7 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<> int32(32)) + lx = uint32(__u1) + __u2 = *(*Tuint64_t)(unsafe.Pointer(&y)) + iy = uint32(__u2 >> int32(32)) + ly = uint32(__u2) + if ix-uint32(0x3ff00000)|lx == uint32(0) { /* x = 1.0 */ + return Xatan(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix = ix & uint32(0x7fffffff) + iy = iy & uint32(0x7fffffff) + /* when y = 0 */ + if iy|ly == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix|lx == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi / Float64FromInt32(2) + } else { + v6 = _pi / Float64FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7ff00000) { + if iy == uint32(0x7ff00000) { + switch m { + case uint32(0): + return _pi / Float64FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi / Float64FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float64FromInt32(3) * _pi / Float64FromInt32(4) /* atan(+INF,-INF) */ + case uint32(3): + return float64(-Int32FromInt32(3)) * _pi / Float64FromInt32(4) /* atan(-INF,-INF) */ + } + } else { + switch m { + case uint32(0): + return float64(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float64FromFloat64(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi /* atan(+...,-INF) */ + case uint32(3): + return -_pi /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p64 */ + if ix+uint32(Int32FromInt32(64)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix, iy, m Tuint32_t + var z, v6, v7 float32 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _ = ix, iy, m, z, v1, v3, v5, v6, v7 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + y + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y)) + if ix == uint32(0x3f800000) { /* x=1.0 */ + return Xatanf(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix &= uint32(0x7fffffff) + iy &= uint32(0x7fffffff) + /* when y = 0 */ + if iy == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi1 /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi1 /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi1 / Float32FromInt32(2) + } else { + v6 = _pi1 / Float32FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7f800000) { + if iy == uint32(0x7f800000) { + switch m { + case uint32(0): + return _pi1 / Float32FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi1 / Float32FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float32FromInt32(3) * _pi1 / Float32FromInt32(4) /*atan(+INF,-INF)*/ + case uint32(3): + return float32(-Int32FromInt32(3)) * _pi1 / Float32FromInt32(4) /*atan(-INF,-INF)*/ + } + } else { + switch m { + case uint32(0): + return Float32FromFloat32(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float32FromFloat32(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi1 /* atan(+...,-INF) */ + case uint32(3): + return -_pi1 /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p26 */ + if ix+uint32(Int32FromInt32(26)< %v", r) }() + } + return Xatan2(tls, y, x) +} + +var _atanhi1 = [4]float32{ + 0: float32(0.46364760399), + 1: float32(0.78539812565), + 2: float32(0.98279368877), + 3: float32(1.5707962513), +} + +var _atanlo1 = [4]float32{ + 0: float32(5.012158244e-09), + 1: float32(3.7748947079e-08), + 2: float32(3.447321717e-08), + 3: float32(7.5497894159e-08), +} + +var _aT1 = [5]float32{ + 0: float32(0.33333328366), + 1: float32(-Float64FromFloat64(0.19999158382)), + 2: float32(0.14253635705), + 3: float32(-Float64FromFloat64(0.10648017377)), + 4: float32(0.061687607318), +} + +func Xatanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tfloat_t + var y float32 + var y1, y2 float64 + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x4c800000) { /* if |x| >= 2**26 */ + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + } + z = _atanhi1[int32(3)] + Float32FromFloat32(7.52316384526264e-37) + if sign != 0 { + v3 = -z + } else { + v3 = z + } + return v3 + } + if ix < uint32(0x3ee00000) { /* |x| < 0.4375 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + if ix < uint32(0x00800000) { + /* raise underflow for subnormal x */ + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } + id = -int32(1) + } else { + x3 = Xfabsf(tls, x3) + if ix < uint32(0x3f980000) { /* |x| < 1.1875 */ + if ix < uint32(0x3f300000) { /* 7/16 <= |x| < 11/16 */ + id = 0 + x3 = (Float32FromFloat32(2)*x3 - Float32FromFloat32(1)) / (Float32FromFloat32(2) + x3) + } else { /* 11/16 <= |x| < 19/16 */ + id = int32(1) + x3 = (x3 - Float32FromFloat32(1)) / (x3 + Float32FromFloat32(1)) + } + } else { + if ix < uint32(0x401c0000) { /* |x| < 2.4375 */ + id = int32(2) + x3 = (x3 - Float32FromFloat32(1.5)) / (Float32FromFloat32(1) + Float32FromFloat32(1.5)*x3) + } else { /* 2.4375 <= |x| < 2**26 */ + id = int32(3) + x3 = -Float32FromFloat32(1) / x3 + } + } + } + /* end of argument reduction */ + z = x3 * x3 + w = z * z + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z * (_aT1[0] + w*(_aT1[int32(2)]+w*_aT1[int32(4)])) + s2 = w * (_aT1[int32(1)] + w*_aT1[int32(3)]) + if id < 0 { + return x3 - x3*(s1+s2) + } + z = _atanhi1[id] - (x3*(s1+s2) - _atanlo1[id] - x3) + if sign != 0 { + v4 = -z + } else { + v4 = z + } + return v4 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = e, s, y, y1, y2, y3, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + y3 = *(*float64)(unsafe.Pointer(bp)) + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(1)) { + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(32)) { + /* handle underflow */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = float32(y3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(y3)) + } else { + y2 = float64(float32(y3)) + } + } + } + } else { + /* |x| < 0.5, up to 1.7ulp error */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*y3+Float64FromInt32(2)*y3*y3/(Float64FromInt32(1)-y3)) + } + } else { + /* avoid overflow */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*(y3/(Float64FromInt32(1)-y3))) + } + if s != 0 { + v1 = -y3 + } else { + v1 = y3 + } + return v1 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + y3 = *(*float32)(unsafe.Pointer(bp)) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(1)< %v", r) }() + } + return Xatanh(tls, x) +} + +func Xatanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan(tls, x) +} + +var _B1 = uint32(715094163) /* B1 = (1023-1023/3-0.03306235651)*2**20 */ +var _B2 = uint32(696219795) /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */ + +// C documentation +// +// /* |1/cbrt(x) - p(x)| < 2**-23.5 (~[-7.93e-8, 7.929e-8]). */ + +var _P0 = float64(1.87595182427177) /* 0x3ffe03e6, 0x0f61e692 */ +var _P1 = -Float64FromFloat64(1.8849797954337717) /* 0xbffe28e0, 0x92f02420 */ +var _P2 = float64(1.6214297201053545) /* 0x3ff9f160, 0x4a49d6c2 */ +var _P3 = -Float64FromFloat64(0.758397934778766) /* 0xbfe844cb, 0xbee751d9 */ +var _P4 = float64(0.14599619288661245) /* 0x3fc2b000, 0xd4e4edd7 */ + +func Xcbrt(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var hx Tuint32_t + var r, s, t, w Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = hx, r, s, t, w + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx >= uint32(0x7ff00000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* + * Rough cbrt to 5 bits: + * cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3) + * where e is integral and >= 0, m is real and in [0, 1), and "/" and + * "%" are integer division and modulus with rounding towards minus + * infinity. The RHS is always >= the LHS and has a maximum relative + * error of about 1 in 16. Adding a bias of -0.03306235651 to the + * (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE + * floating point representation, for finite positive normal values, + * ordinary integer divison of the value in bits magically gives + * almost exactly the RHS of the above provided we first subtract the + * exponent bias (1023 for doubles) and later add it back. We do the + * subtraction virtually to keep e >= 0 so that ordinary integer + * division rounds towards minus infinity; this is also efficient. + */ + if hx < uint32(0x00100000) { /* zero or subnormal? */ + *(*float64)(unsafe.Pointer(bp)) = x * float64(1.8014398509481984e+16) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx == uint32(0) { + return x + } /* cbrt(0) is itself */ + hx = hx/uint32(3) + _B2 + } else { + hx = hx/uint32(3) + _B1 + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= Uint64FromUint64(1) << Int32FromInt32(63) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) + t = *(*float64)(unsafe.Pointer(bp)) + /* + * New cbrt to 23 bits: + * cbrt(x) = t*cbrt(x/t**3) ~= t*P(t**3/x) + * where P(r) is a polynomial of degree 4 that approximates 1/cbrt(r) + * to within 2**-23.5 when |r - 1| < 1/10. The rough approximation + * has produced t such than |t/cbrt(x) - 1| ~< 1/32, and cubing this + * gives us bounds for r = t**3/x. + * + * Try to optimize for parallel evaluation as in __tanf.c. + */ + r = t * t * (t / x) + t = t * (_P0 + r*(_P1+r*_P2) + r*r*r*(_P3+r*_P4)) + /* + * Round t away from zero to 23 bits (sloppily except for ensuring that + * the result is larger in magnitude than cbrt(x) but not much more than + * 2 23-bit ulps larger). With rounding towards zero, the error bound + * would be ~5/6 instead of ~4/6. With a maximum error of 2 23-bit ulps + * in the rounded t, the infinite-precision error in the Newton + * approximation barely affects third digit in the final error + * 0.667; the error in the rounded t can be up to about 3 23-bit ulps + * before the final error is larger than 0.667 ulps. + */ + *(*float64)(unsafe.Pointer(bp)) = t + *(*Tuint64_t)(unsafe.Pointer(bp)) = (*(*Tuint64_t)(unsafe.Pointer(bp)) + uint64(0x80000000)) & uint64(0xffffffffc0000000) + t = *(*float64)(unsafe.Pointer(bp)) + /* one step Newton iteration to 53 bits with error < 0.667 ulps */ + s = t * t /* t*t is exact */ + r = x / s /* error <= 0.5 ulps; |r| < |t| */ + w = t + t /* t+t is exact */ + r = (r - t) / (w + r) /* r-t is exact; w+r ~= 3*t */ + t = t + t*r /* error <= 0.5 + 0.5/3 + epsilon */ + return t +} + +var _B11 = uint32(709958130) /* B1 = (127-127.0/3-0.03306235651)*2**23 */ +var _B21 = uint32(642849266) /* B2 = (127-127.0/3-24/3-0.03306235651)*2**23 */ + +func Xcbrtf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var T, r Tdouble_t + var hx Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = T, hx, r + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if hx >= uint32(0x7f800000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* rough cbrt to 5 bits */ + if hx < uint32(0x00800000) { /* zero or subnormal? */ + if hx == uint32(0) { + return x + } /* cbrt(+-0) is itself */ + *(*float32)(unsafe.Pointer(bp)) = x * Float32FromFloat32(1.6777216e+07) + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + hx = hx/uint32(3) + _B21 + } else { + hx = hx/uint32(3) + _B11 + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= hx + /* + * First step Newton iteration (solving t*t-x/t == 0) to 16 bits. In + * double precision so that its terms can be arranged for efficiency + * without causing overflow or underflow. + */ + T = float64(*(*float32)(unsafe.Pointer(bp))) + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* + * Second step Newton iteration to 47 bits. In double precision for + * efficiency and accuracy. + */ + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* rounding to 24 bits is perfect in round-to-nearest mode */ + return float32(T) +} + +func Xcbrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcbrt(tls, x) +} + +const DBL_EPSILON5 = 2.220446049250313e-16 + +var _toint2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xceil(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2, v1 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint2 + _toint2 - x3 + } else { + y3 = x3 + _toint2 - _toint2 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint32(8) == uint32(4) { + y = float32(y3) + } else { + if uint32(8) == uint32(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(1) + } + return v1 + } + if y3 < Float64FromInt32(0) { + return x3 + y3 + Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON6 = 0 + +func Xceilf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*float32)(unsafe.Pointer(bp)) = float32(-Float64FromFloat64(0)) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xceil(tls, x) +} + +func Xcopysign(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) / Uint64FromInt32(2) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= *(*Tuint64_t)(unsafe.Pointer(bp + 8)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xcopysignf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xcopysignl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcopysign(tls, x, y) +} + +func Xcos(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _ = ix, n, y, y1, y2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) */ + /* raise inexact if x!=0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + return float64(1) + } + return X__cos(tls, x3, Float64FromInt32(0)) + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(1): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(2): + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + default: + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + } + return r +} + +const M_PI_23 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _c1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _c2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _c3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _c4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xcosf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y float32 + var y1, y2, v1, v2 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x != 0 */ + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + return Float32FromFloat32(1) + } + return X__cosdf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix > uint32(0x4016cbe3) { /* |x| ~> 3*pi/4 */ + if sign != 0 { + v1 = float64(x3) + _c2pio2 + } else { + v1 = float64(x3) - _c2pio2 + } + return -X__cosdf(tls, v1) + } else { + if sign != 0 { + return X__sindf(tls, float64(x3)+_c1pio2) + } else { + return X__sindf(tls, _c1pio2-float64(x3)) + } + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix > uint32(0x40afeddf) { /* |x| ~> 7*pi/4 */ + if sign != 0 { + v2 = float64(x3) + _c4pio2 + } else { + v2 = float64(x3) - _c4pio2 + } + return X__cosdf(tls, v2) + } else { + if sign != 0 { + return X__sindf(tls, float64(-x3)-_c3pio2) + } else { + return X__sindf(tls, float64(x3)-_c3pio2) + } + } + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case uint32(1): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + case uint32(2): + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + default: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_24 = 0 + +// C documentation +// +// /* cosh(x) = (exp(x) + 1/exp(x))/2 +// * = 1 + 0.5*(exp(x)-1)*(exp(x)-1)/exp(x) +// * = 1 + x*x/2 + o(x^4) +// */ +func Xcosh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y1, y2 float64 + var w Tuint32_t + var y float32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(2) */ + if w < uint32(0x3fe62e42) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26) then the 1/t is not needed */ + return float64(0.5) * (t + Float64FromInt32(1)/t) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, x3, float64(1)) + return t +} + +func Xcoshf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(2) */ + if w < uint32(0x3f317217) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< log(FLT_MAX) or nan */ + t = X__expo2f(tls, x3, Float32FromFloat32(1)) + return t +} + +func Xcoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcosh(tls, x) +} + +func Xcosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcos(tls, x) +} + +var _erx = float64(0.8450629115104675) /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx8 = float64(1.0270333367641007) /* 0x3FF06EBA, 0x8214DB69 */ +var _pp0 = float64(0.12837916709551256) /* 0x3FC06EBA, 0x8214DB68 */ +var _pp1 = -Float64FromFloat64(0.3250421072470015) /* 0xBFD4CD7D, 0x691CB913 */ +var _pp2 = -Float64FromFloat64(0.02848174957559851) /* 0xBF9D2A51, 0xDBD7194F */ +var _pp3 = -Float64FromFloat64(0.005770270296489442) /* 0xBF77A291, 0x236668E4 */ +var _pp4 = -Float64FromFloat64(2.3763016656650163e-05) /* 0xBEF8EAD6, 0x120016AC */ +var _qq1 = float64(0.39791722395915535) /* 0x3FD97779, 0xCDDADC09 */ +var _qq2 = float64(0.0650222499887673) /* 0x3FB0A54C, 0x5536CEBA */ +var _qq3 = float64(0.005081306281875766) /* 0x3F74D022, 0xC4D36B0F */ +var _qq4 = float64(0.00013249473800432164) /* 0x3F215DC9, 0x221C1A10 */ +var _qq5 = -Float64FromFloat64(3.960228278775368e-06) /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa0 = -Float64FromFloat64(0.0023621185607526594) /* 0xBF6359B8, 0xBEF77538 */ +var _pa1 = float64(0.41485611868374833) /* 0x3FDA8D00, 0xAD92B34D */ +var _pa2 = -Float64FromFloat64(0.3722078760357013) /* 0xBFD7D240, 0xFBB8C3F1 */ +var _pa3 = float64(0.31834661990116175) /* 0x3FD45FCA, 0x805120E4 */ +var _pa4 = -Float64FromFloat64(0.11089469428239668) /* 0xBFBC6398, 0x3D3E28EC */ +var _pa5 = float64(0.035478304325618236) /* 0x3FA22A36, 0x599795EB */ +var _pa6 = -Float64FromFloat64(0.002166375594868791) /* 0xBF61BF38, 0x0A96073F */ +var _qa1 = float64(0.10642088040084423) /* 0x3FBB3E66, 0x18EEE323 */ +var _qa2 = float64(0.540397917702171) /* 0x3FE14AF0, 0x92EB6F33 */ +var _qa3 = float64(0.07182865441419627) /* 0x3FB2635C, 0xD99FE9A7 */ +var _qa4 = float64(0.12617121980876164) /* 0x3FC02660, 0xE763351F */ +var _qa5 = float64(0.01363708391202905) /* 0x3F8BEDC2, 0x6B51DD1C */ +var _qa6 = float64(0.011984499846799107) /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra0 = -Float64FromFloat64(0.009864944034847148) /* 0xBF843412, 0x600D6435 */ +var _ra1 = -Float64FromFloat64(0.6938585727071818) /* 0xBFE63416, 0xE4BA7360 */ +var _ra2 = -Float64FromFloat64(10.558626225323291) /* 0xC0251E04, 0x41B0E726 */ +var _ra3 = -Float64FromFloat64(62.375332450326006) /* 0xC04F300A, 0xE4CBA38D */ +var _ra4 = -Float64FromFloat64(162.39666946257347) /* 0xC0644CB1, 0x84282266 */ +var _ra5 = -Float64FromFloat64(184.60509290671104) /* 0xC067135C, 0xEBCCABB2 */ +var _ra6 = -Float64FromFloat64(81.2874355063066) /* 0xC0545265, 0x57E4D2F2 */ +var _ra7 = -Float64FromFloat64(9.814329344169145) /* 0xC023A0EF, 0xC69AC25C */ +var _sa1 = float64(19.651271667439257) /* 0x4033A6B9, 0xBD707687 */ +var _sa2 = float64(137.65775414351904) /* 0x4061350C, 0x526AE721 */ +var _sa3 = float64(434.56587747522923) /* 0x407B290D, 0xD58A1A71 */ +var _sa4 = float64(645.3872717332679) /* 0x40842B19, 0x21EC2868 */ +var _sa5 = float64(429.00814002756783) /* 0x407AD021, 0x57700314 */ +var _sa6 = float64(108.63500554177944) /* 0x405B28A3, 0xEE48AE2C */ +var _sa7 = float64(6.570249770319282) /* 0x401A47EF, 0x8E484A93 */ +var _sa8 = -Float64FromFloat64(0.0604244152148581) /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb0 = -Float64FromFloat64(0.0098649429247001) /* 0xBF843412, 0x39E86F4A */ +var _rb1 = -Float64FromFloat64(0.799283237680523) /* 0xBFE993BA, 0x70C285DE */ +var _rb2 = -Float64FromFloat64(17.757954917754752) /* 0xC031C209, 0x555F995A */ +var _rb3 = -Float64FromFloat64(160.63638485582192) /* 0xC064145D, 0x43C5ED98 */ +var _rb4 = -Float64FromFloat64(637.5664433683896) /* 0xC083EC88, 0x1375F228 */ +var _rb5 = -Float64FromFloat64(1025.0951316110772) /* 0xC0900461, 0x6A2E5992 */ +var _rb6 = -Float64FromFloat64(483.5191916086514) /* 0xC07E384E, 0x9BDC383F */ +var _sb1 = float64(30.33806074348246) /* 0x403E568B, 0x261D5190 */ +var _sb2 = float64(325.7925129965739) /* 0x40745CAE, 0x221B9F0A */ +var _sb3 = float64(1536.729586084437) /* 0x409802EB, 0x189D5118 */ +var _sb4 = float64(3199.8582195085955) /* 0x40A8FFB7, 0x688C246A */ +var _sb5 = float64(2553.0504064331644) /* 0x40A3F219, 0xCEDF3BE6 */ +var _sb6 = float64(474.52854120695537) /* 0x407DA874, 0xE79FE763 */ +var _sb7 = -Float64FromFloat64(22.44095244658582) /* 0xC03670E2, 0x42712D62 */ + +func _erfc1(tls *TLS, x float64) (r float64) { + var P, Q, s Tdouble_t + _, _, _ = P, Q, s + s = Xfabs(tls, x) - Float64FromInt32(1) + P = _pa0 + s*(_pa1+s*(_pa2+s*(_pa3+s*(_pa4+s*(_pa5+s*_pa6))))) + Q = Float64FromInt32(1) + s*(_qa1+s*(_qa2+s*(_qa3+s*(_qa4+s*(_qa5+s*_qa6))))) + return Float64FromInt32(1) - _erx - P/Q +} + +func _erfc2(tls *TLS, ix Tuint32_t, x float64) (r float64) { + var R, S, s Tdouble_t + var z float64 + var v1 Tuint64_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3ff40000) { /* |x| < 1.25 */ + return _erfc1(tls, x) + } + x = Xfabs(tls, x) + s = Float64FromInt32(1) / (x * x) + if ix < uint32(0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */ + R = _ra0 + s*(_ra1+s*(_ra2+s*(_ra3+s*(_ra4+s*(_ra5+s*(_ra6+s*_ra7)))))) + S = float64(1) + s*(_sa1+s*(_sa2+s*(_sa3+s*(_sa4+s*(_sa5+s*(_sa6+s*(_sa7+s*_sa8))))))) + } else { /* |x| > 1/.35 */ + R = _rb0 + s*(_rb1+s*(_rb2+s*(_rb3+s*(_rb4+s*(_rb5+s*_rb6))))) + S = float64(1) + s*(_sb1+s*(_sb2+s*(_sb3+s*(_sb4+s*(_sb5+s*(_sb6+s*_sb7)))))) + } + z = x + v1 = *(*Tuint64_t)(unsafe.Pointer(&z))>>Int32FromInt32(32)< %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float64 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float64(int32(1)-int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3e300000) { /* |x| < 2**-28 */ + /* avoid underflow */ + return float64(0.125) * (Float64FromInt32(8)*x + _efx8*x) + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40180000) { /* 0.84375 <= |x| < 6 */ + y = Float64FromInt32(1) - _erfc2(tls, ix, x) + } else { + y = Float64FromInt32(1) - Float64FromFloat64(2.2250738585072014e-308) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfc(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float64 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float64(int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3c700000) { /* |x| < 2**-56 */ + return float64(1) - x + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + if sign != 0 || ix < uint32(0x3fd00000) { /* x < 1/4 */ + return float64(1) - (x + x*y) + } + return float64(0.5) - (x - float64(0.5) + x*y) + } + if ix < uint32(0x403c0000) { /* 0.84375 <= |x| < 28 */ + if sign != 0 { + v1 = Float64FromInt32(2) - _erfc2(tls, ix, x) + } else { + v1 = _erfc2(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float64FromInt32(2) - Float64FromFloat64(2.2250738585072014e-308) + } else { + v2 = Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(2.2250738585072014e-308) + } + return v2 +} + +var _erx1 = float32(0.84506291151) /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx81 = float32(1.027033329) /* 0x3f8375d4 */ +var _pp01 = float32(0.12837916613) /* 0x3e0375d4 */ +var _pp11 = float32(-Float64FromFloat64(0.32504209876)) /* 0xbea66beb */ +var _pp21 = float32(-Float64FromFloat64(0.028481749818)) /* 0xbce9528f */ +var _pp31 = float32(-Float64FromFloat64(0.005770270247)) /* 0xbbbd1489 */ +var _pp41 = float32(-Float64FromFloat64(2.3763017452e-05)) /* 0xb7c756b1 */ +var _qq11 = float32(0.39791721106) /* 0x3ecbbbce */ +var _qq21 = float32(0.0650222525) /* 0x3d852a63 */ +var _qq31 = float32(0.0050813062117) /* 0x3ba68116 */ +var _qq41 = float32(0.00013249473704) /* 0x390aee49 */ +var _qq51 = float32(-Float64FromFloat64(3.9602282413e-06)) /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa01 = float32(-Float64FromFloat64(0.0023621185683)) /* 0xbb1acdc6 */ +var _pa11 = float32(0.41485610604) /* 0x3ed46805 */ +var _pa21 = float32(-Float64FromFloat64(0.37220788002)) /* 0xbebe9208 */ +var _pa31 = float32(0.31834661961) /* 0x3ea2fe54 */ +var _pa41 = float32(-Float64FromFloat64(0.11089469492)) /* 0xbde31cc2 */ +var _pa51 = float32(0.035478305072) /* 0x3d1151b3 */ +var _pa61 = float32(-Float64FromFloat64(0.0021663755178)) /* 0xbb0df9c0 */ +var _qa11 = float32(0.10642088205) /* 0x3dd9f331 */ +var _qa21 = float32(0.54039794207) /* 0x3f0a5785 */ +var _qa31 = float32(0.071828655899) /* 0x3d931ae7 */ +var _qa41 = float32(0.12617121637) /* 0x3e013307 */ +var _qa51 = float32(0.013637083583) /* 0x3c5f6e13 */ +var _qa61 = float32(0.011984500103) /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra01 = float32(-Float64FromFloat64(0.0098649440333)) /* 0xbc21a093 */ +var _ra11 = float32(-Float64FromFloat64(0.6938585639)) /* 0xbf31a0b7 */ +var _ra21 = float32(-Float64FromFloat64(10.558626175)) /* 0xc128f022 */ +var _ra31 = float32(-Float64FromFloat64(62.375331879)) /* 0xc2798057 */ +var _ra41 = float32(-Float64FromFloat64(162.39666748)) /* 0xc322658c */ +var _ra51 = float32(-Float64FromFloat64(184.60508728)) /* 0xc3389ae7 */ +var _ra61 = float32(-Float64FromFloat64(81.287437439)) /* 0xc2a2932b */ +var _ra71 = float32(-Float64FromFloat64(9.8143291473)) /* 0xc11d077e */ +var _sa11 = float32(19.65127182) /* 0x419d35ce */ +var _sa21 = float32(137.65776062) /* 0x4309a863 */ +var _sa31 = float32(434.56588745) /* 0x43d9486f */ +var _sa41 = float32(645.38726807) /* 0x442158c9 */ +var _sa51 = float32(429.00814819) /* 0x43d6810b */ +var _sa61 = float32(108.63500214) /* 0x42d9451f */ +var _sa71 = float32(6.5702495575) /* 0x40d23f7c */ +var _sa81 = float32(-Float64FromFloat64(0.060424413532)) /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb01 = float32(-Float64FromFloat64(0.009864943102)) /* 0xbc21a092 */ +var _rb11 = float32(-Float64FromFloat64(0.79928326607)) /* 0xbf4c9dd4 */ +var _rb21 = float32(-Float64FromFloat64(17.757955551)) /* 0xc18e104b */ +var _rb31 = float32(-Float64FromFloat64(160.63638306)) /* 0xc320a2ea */ +var _rb41 = float32(-Float64FromFloat64(637.56646729)) /* 0xc41f6441 */ +var _rb51 = float32(-Float64FromFloat64(1025.0950928)) /* 0xc480230b */ +var _rb61 = float32(-Float64FromFloat64(483.51919556)) /* 0xc3f1c275 */ +var _sb11 = float32(30.338060379) /* 0x41f2b459 */ +var _sb21 = float32(325.79251099) /* 0x43a2e571 */ +var _sb31 = float32(1536.7296143) /* 0x44c01759 */ +var _sb41 = float32(3199.8581543) /* 0x4547fdbb */ +var _sb51 = float32(2553.050293) /* 0x451f90ce */ +var _sb61 = float32(474.52853394) /* 0x43ed43a7 */ +var _sb71 = float32(-Float64FromFloat64(22.440952301)) /* 0xc1b38712 */ + +func _erfc11(tls *TLS, x float32) (r float32) { + var P, Q, s Tfloat_t + _, _, _ = P, Q, s + s = Xfabsf(tls, x) - Float32FromInt32(1) + P = _pa01 + s*(_pa11+s*(_pa21+s*(_pa31+s*(_pa41+s*(_pa51+s*_pa61))))) + Q = Float32FromInt32(1) + s*(_qa11+s*(_qa21+s*(_qa31+s*(_qa41+s*(_qa51+s*_qa61))))) + return Float32FromInt32(1) - _erx1 - P/Q +} + +func _erfc21(tls *TLS, ix Tuint32_t, x float32) (r float32) { + var R, S, s Tfloat_t + var z float32 + var v1 Tuint32_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3fa00000) { /* |x| < 1.25 */ + return _erfc11(tls, x) + } + x = Xfabsf(tls, x) + s = Float32FromInt32(1) / (x * x) + if ix < uint32(0x4036db6d) { /* |x| < 1/0.35 */ + R = _ra01 + s*(_ra11+s*(_ra21+s*(_ra31+s*(_ra41+s*(_ra51+s*(_ra61+s*_ra71)))))) + S = Float32FromFloat32(1) + s*(_sa11+s*(_sa21+s*(_sa31+s*(_sa41+s*(_sa51+s*(_sa61+s*(_sa71+s*_sa81))))))) + } else { /* |x| >= 1/0.35 */ + R = _rb01 + s*(_rb11+s*(_rb21+s*(_rb31+s*(_rb41+s*(_rb51+s*_rb61))))) + S = Float32FromFloat32(1) + s*(_sb11+s*(_sb21+s*(_sb31+s*(_sb41+s*(_sb51+s*(_sb61+s*_sb71)))))) + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + v1 = ix & uint32(0xffffe000) + z = *(*float32)(unsafe.Pointer(&v1)) + return Xexpf(tls, -z*z-Float32FromFloat32(0.5625)) * Xexpf(tls, (z-x)*(z+x)+R/S) / x +} + +func Xerff(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float32 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float32(int32(1)-int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x31800000) { /* |x| < 2**-28 */ + /*avoid underflow */ + return Float32FromFloat32(0.125) * (Float32FromInt32(8)*x + _efx81*x) + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromInt32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40c00000) { /* |x| < 6 */ + y = Float32FromInt32(1) - _erfc21(tls, ix, x) + } else { + y = Float32FromInt32(1) - Float32FromFloat32(7.52316384526264e-37) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfcf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float32 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float32(int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x23800000) { /* |x| < 2**-56 */ + return Float32FromFloat32(1) - x + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromFloat32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + if sign != 0 || ix < uint32(0x3e800000) { /* x < 1/4 */ + return Float32FromFloat32(1) - (x + x*y) + } + return Float32FromFloat32(0.5) - (x - Float32FromFloat32(0.5) + x*y) + } + if ix < uint32(0x41e00000) { /* |x| < 28 */ + if sign != 0 { + v1 = Float32FromInt32(2) - _erfc21(tls, ix, x) + } else { + v1 = _erfc21(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float32FromInt32(2) - Float32FromFloat32(7.52316384526264e-37) + } else { + v2 = Float32FromFloat32(7.52316384526264e-37) * Float32FromFloat32(7.52316384526264e-37) + } + return v2 +} + +func Xerfl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerf(tls, x) +} + +func Xerfcl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerfc(tls, x) +} + +const EXP2_POLY_ORDER = 5 +const EXP_POLY_ORDER = 5 +const EXP_TABLE_BITS = 7 +const EXP_USE_TOINT_NARROW = 0 +const N = 128 + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by <= 460. */ + sbits -= Uint64FromUint64(1009) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = float64(5.486124068793689e+303) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if y3 < float64(1) { + lo = scale - y3 + scale*tmp + hi = float64(1) + y3 + lo = float64(1) - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - float64(1) + /* Avoid -0.0 with downward rounding. */ + if Bool(int32(WANT_ROUNDING) != 0) && y3 == float64(0) { + y3 = float64(0) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v5 = y1 + goto _6 + _6: + y2 = v5 * float64(2.2250738585072014e-308) + } + y3 = float64(2.2250738585072014e-308) * y3 + y = y3 + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top12(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +func Xexp(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v5 Tuint64_t + var kd, r, r2, scale, tail, tmp, z Tdouble_t + var y, v1, v2, v4, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v4, v5, v6 + abstop = _top12(tls, x1) & uint32(0x7ff) + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= _top12(tls, float64(512))-_top12(tls, float64(5.551115123125783e-17)) { + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top12(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top12(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if *(*Tuint64_t)(unsafe.Pointer(&x1))>>int32(63) != 0 { + return X__math_uflow(tls, uint32(0)) + } else { + return X__math_oflow(tls, uint32(0)) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v2 = y + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v6 = y + goto _7 +_7: + return v6 +} + +const HUGE = 0 + +func Xexp10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float64 + var _ /* n at bp+0 */ float64 + var _ /* u at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = Xmodf(tls, x, bp) + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = *(*float64)(unsafe.Pointer(bp)) + /* fabs(n) < 16 without raising invalid on nan */ + if *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(52)&uint64(0x7ff) < uint64(Int32FromInt32(0x3ff)+Int32FromInt32(4)) { + if !(y != 0) { + return _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + y = Xexp2(tls, float64(3.321928094887362)*y) + return y * _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + return Xpow(tls, float64(10), x) +} + +var _p10 = [31]float64{ + 0: float64(1e-15), + 1: float64(1e-14), + 2: float64(1e-13), + 3: float64(1e-12), + 4: float64(1e-11), + 5: float64(1e-10), + 6: float64(1e-09), + 7: float64(1e-08), + 8: float64(1e-07), + 9: float64(1e-06), + 10: float64(1e-05), + 11: float64(0.0001), + 12: float64(0.001), + 13: float64(0.01), + 14: float64(0.1), + 15: Float64FromInt32(1), + 16: float64(10), + 17: float64(100), + 18: float64(1000), + 19: float64(10000), + 20: float64(100000), + 21: float64(1e+06), + 22: float64(1e+07), + 23: float64(1e+08), + 24: float64(1e+09), + 25: float64(1e+10), + 26: float64(1e+11), + 27: float64(1e+12), + 28: float64(1e+13), + 29: float64(1e+14), + 30: float64(1e+15), +} + +func Xpow10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xexp10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float32 + var _ /* n at bp+0 */ float32 + var _ /* u at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = Xmodff(tls, x, bp) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = *(*float32)(unsafe.Pointer(bp)) + /* fabsf(n) < 8 without raising invalid on nan */ + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))>>int32(23)&uint32(0xff) < uint32(Int32FromInt32(0x7f)+Int32FromInt32(3)) { + if !(y != 0) { + return _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + y = Xexp2f(tls, Float32FromFloat32(3.321928094887362)*y) + return y * _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + return float32(Xexp2(tls, float64(3.321928094887362)*float64(x))) +} + +var _p101 = [15]float32{ + 0: Float32FromFloat32(1e-07), + 1: Float32FromFloat32(1e-06), + 2: Float32FromFloat32(1e-05), + 3: Float32FromFloat32(0.0001), + 4: Float32FromFloat32(0.001), + 5: Float32FromFloat32(0.01), + 6: Float32FromFloat32(0.1), + 7: Float32FromInt32(1), + 8: float32(10), + 9: float32(100), + 10: float32(1000), + 11: float32(10000), + 12: float32(100000), + 13: float32(1e+06), + 14: float32(1e+07), +} + +func Xpow10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10f(tls, x) +} + +func Xexp10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xpow10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10l(tls, x) +} + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase1(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by 1. */ + sbits -= Uint64FromUint64(1) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = Float64FromInt32(2) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if y3 < float64(1) { + lo = scale - y3 + scale*tmp + hi = float64(1) + y3 + lo = float64(1) - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - float64(1) + /* Avoid -0.0 with downward rounding. */ + if Bool(int32(WANT_ROUNDING) != 0) && y3 == float64(0) { + y3 = float64(0) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v5 = y1 + goto _6 + _6: + y2 = v5 * float64(2.2250738585072014e-308) + } + y3 = float64(2.2250738585072014e-308) * y3 + y = y3 + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top121(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +func Xexp2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v7 Tuint64_t + var kd, r, r2, scale, tail, tmp Tdouble_t + var y, v1, v2, v3, v4, v6, v8 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, v1, v2, v3, v4, v6, v7, v8 + abstop = _top121(tls, x1) & uint32(0x7ff) + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= _top121(tls, float64(512))-_top121(tls, float64(5.551115123125783e-17)) { + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top121(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top121(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if !(*(*Tuint64_t)(unsafe.Pointer(&x1))>>Int32FromInt32(63) != 0) { + return X__math_oflow(tls, uint32(0)) + } else { + v2 = -Float64FromFloat64(1075) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) >= *(*Tuint64_t)(unsafe.Pointer(&v2)) { + return X__math_uflow(tls, uint32(0)) + } + } + } + v3 = float64(928) + if uint64(2)**(*Tuint64_t)(unsafe.Pointer(&x1)) > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Large x is special cased below. */ + abstop = uint32(0) + } + } + /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */ + /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */ + y = x1 + X__exp_data.Fexp2_shift + v4 = y + goto _5 +_5: + kd = v4 + v6 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v6)) /* k. */ + kd -= X__exp_data.Fexp2_shift /* k/N for int k. */ + r = x1 - kd + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-65 and scale > 2^-928, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v8 = y + goto _9 +_9: + return v8 +} + +const EXP2F_POLY_ORDER = 3 +const EXP2F_TABLE_BITS = 5 +const N1 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.) +Wrong count: 168353 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top122(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexp2f(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top122(tls, x2) & uint32(0x7ff) + if abstop >= _top122(tls, Float32FromFloat32(128)) { + /* |x| >= 128 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top122(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(0) { + return X__math_oflowf(tls, uint32(0)) + } + if x2 <= -Float32FromFloat32(150) { + return X__math_uflowf(tls, uint32(0)) + } + } + /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ + y1 = xd + X__exp2f_data.Fshift_scaled + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift_scaled /* k/N for int k. */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp2(tls, x) +} + +const N2 = 128 + +type Texp_data = struct { + F__ccgo_align [0]uint32 + Finvln2N float64 + Fshift float64 + Fnegln2hiN float64 + Fnegln2loN float64 + Fpoly [4]float64 + Fexp2_shift float64 + Fexp2_poly [5]float64 + Ftab [256]Tuint64_t +} + +const N3 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.) +Wrong count: 170635 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top123(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexpf(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top123(tls, x2) & uint32(0x7ff) + if abstop >= _top123(tls, Float32FromFloat32(88)) { + /* |x| >= 88 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top123(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(88.72283172607422) { /* x > log(0x1p128) ~= 88.72 */ + return X__math_oflowf(tls, uint32(0)) + } + if x2 < -Float32FromFloat32(103.97207641601562) { /* x < log(0x1p-150) ~= -103.97 */ + return X__math_uflowf(tls, uint32(0)) + } + } + /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */ + z = X__exp2f_data.Finvln2_scaled * xd + /* Round and convert z to int, the result is in [-150*N, 128*N] and + ideally ties-to-even rule is used, otherwise the magnitude of r + can be bigger which gives larger approximation error. */ + y1 = z + X__exp2f_data.Fshift + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift + r = z - kd + /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp(tls, x) +} + +var _o_threshold = float64(709.782712893384) /* 0x40862E42, 0xFEFA39EF */ +var _ln2_hi = float64(0.6931471803691238) /* 0x3fe62e42, 0xfee00000 */ +var _ln2_lo = float64(1.9082149292705877e-10) /* 0x3dea39ef, 0x35793c76 */ +var _invln2 = float64(1.4426950408889634) /* 0x3ff71547, 0x652b82fe */ +/* Scaled Q's: Qn_here = 2**n * Qn_above, for R(2*z) where z = hxs = x*x/2: */ +var _Q1 = -Float64FromFloat64(0.03333333333333313) /* BFA11111 111110F4 */ +var _Q2 = float64(0.0015873015872548146) /* 3F5A01A0 19FE5585 */ +var _Q3 = -Float64FromFloat64(7.93650757867488e-05) /* BF14CE19 9EAADBB7 */ +var _Q4 = float64(4.008217827329362e-06) /* 3ED0CFCA 86E65239 */ +var _Q5 = -Float64FromFloat64(2.0109921818362437e-07) /* BE8AFDB7 6E09C32D */ + +func Xexpm1(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tdouble_t + var hx Tuint32_t + var k, sign int32 + var y float32 + var y1, y2, v3 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* u at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1, v3 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4043687A) { /* if |x|>=56*ln2 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< _o_threshold { + x3 *= float64(8.98846567431158e+307) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi + lo = _ln2_lo + k = int32(1) + } else { + hi = x3 + _ln2_hi + lo = -_ln2_lo + k = -int32(1) + } + } else { + if sign != 0 { + v3 = -Float64FromFloat64(0.5) + } else { + v3 = float64(0.5) + } + k = int32(_invln2*x3 + v3) + t = float64(k) + hi = x3 - t*_ln2_hi /* t*ln2_hi is exact here */ + lo = t * _ln2_lo + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x3c900000) { /* |x| < 2**-54, return x */ + if hx < uint32(0x00100000) { + if uint32(4) == uint32(4) { + y = float32(x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(0.5) * x3 + hxs = x3 * hfx + r1 = float64(1) + hxs*(_Q1+hxs*(_Q2+hxs*(_Q3+hxs*(_Q4+hxs*_Q5)))) + t = float64(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat64(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float64(0.5)*(x3-e) - float64(0.5) + } + if k == int32(1) { + if x3 < -Float64FromFloat64(0.25) { + return -Float64FromFloat64(2) * (e - (x3 + Float64FromFloat64(0.5))) + } + return float64(1) + float64(2)*(x3-e) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)+k) << int32(52) /* 2^k */ + twopk = *(*float64)(unsafe.Pointer(bp + 8)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + float64(1) + if k == int32(1024) { + y3 = y3 * float64(2) * float64(8.98846567431158e+307) + } else { + y3 = y3 * twopk + } + return y3 - float64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)-k) << int32(52) /* 2^-k */ + if k < int32(20) { + y3 = (x3 - e + (Float64FromInt32(1) - *(*float64)(unsafe.Pointer(bp + 8)))) * twopk + } else { + y3 = (x3 - (e + *(*float64)(unsafe.Pointer(bp + 8))) + Float64FromInt32(1)) * twopk + } + return y3 +} + +var _ln2_hi1 = float32(0.69313812256) /* 0x3f317180 */ +var _ln2_lo1 = float32(9.0580006145e-06) /* 0x3717f7d1 */ +var _invln21 = float32(1.4426950216) /* 0x3fb8aa3b */ +/* + * Domain [-0.34568, 0.34568], range ~[-6.694e-10, 6.696e-10]: + * |6 / x * (1 + 2 * (1 / (exp(x) - 1) - 1 / x)) - q(x)| < 2**-30.04 + * Scaled coefficients: Qn_here = 2**n * Qn_for_q (see s_expm1.c): + */ +var _Q11 = float32(-Float64FromFloat64(0.033333212137)) /* -0x888868.0p-28 */ +var _Q21 = float32(0.0015807170421) /* 0xcf3010.0p-33 */ + +func Xexpm1f(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tfloat_t + var hx Tuint32_t + var k, sign int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4195b844) { /* if |x|>=27*ln2 */ + if hx > uint32(0x7f800000) { /* NaN */ + return x3 + } + if sign != 0 { + return float32(-Int32FromInt32(1)) + } + if hx > uint32(0x42b17217) { /* x > log(FLT_MAX) */ + x3 *= Float32FromFloat32(1.7014118346046923e+38) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3eb17218) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3F851592) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi1 + lo = _ln2_lo1 + k = int32(1) + } else { + hi = x3 + _ln2_hi1 + lo = -_ln2_lo1 + k = -int32(1) + } + } else { + if sign != 0 { + v1 = -Float32FromFloat32(0.5) + } else { + v1 = Float32FromFloat32(0.5) + } + k = int32(_invln21*x3 + v1) + t = float32(k) + hi = x3 - t*_ln2_hi1 /* t*ln2_hi is exact here */ + lo = t * _ln2_lo1 + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x33000000) { /* when |x|<2**-25, return x */ + if hx < uint32(0x00800000) { + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = Float32FromFloat32(0.5) * x3 + hxs = x3 * hfx + r1 = Float32FromFloat32(1) + hxs*(_Q11+hxs*_Q21) + t = Float32FromFloat32(3) - r1*hfx + e = hxs * ((r1 - t) / (Float32FromFloat32(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return Float32FromFloat32(0.5)*(x3-e) - Float32FromFloat32(0.5) + } + if k == int32(1) { + if x3 < -Float32FromFloat32(0.25) { + return -Float32FromFloat32(2) * (e - (x3 + Float32FromFloat32(0.5))) + } + return Float32FromFloat32(1) + Float32FromFloat32(2)*(x3-e) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) + k) << int32(23)) /* 2^k */ + twopk = *(*float32)(unsafe.Pointer(bp)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + Float32FromFloat32(1) + if k == int32(128) { + y3 = y3 * Float32FromFloat32(2) * Float32FromFloat32(1.7014118346046923e+38) + } else { + y3 = y3 * twopk + } + return y3 - Float32FromFloat32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) - k) << int32(23)) /* 2^-k */ + if k < int32(23) { + y3 = (x3 - e + (Float32FromInt32(1) - *(*float32)(unsafe.Pointer(bp)))) * twopk + } else { + y3 = (x3 - (e + *(*float32)(unsafe.Pointer(bp))) + Float32FromInt32(1)) * twopk + } + return y3 +} + +func Xexpm1l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexpm1(tls, x) +} + +func Xfabs(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) / Uint64FromInt32(2) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfabsf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfabsl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfabs(tls, x) +} + +func Xfdim(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _ = v1, v3, v5 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< y { + v5 = x - y + } else { + v5 = Float64FromInt32(0) + } + return v5 +} + +func Xfdimf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _ = v1, v3, v5 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + if x > y { + v5 = x - y + } else { + v5 = Float32FromInt32(0) + } + return v5 +} + +func Xfdiml(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfdim(tls, x, y) +} + +func Xfinite(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&uint32(0x7fffffff) < uint32(0x7f800000)) +} + +const DBL_EPSILON7 = 2.220446049250313e-16 + +var _toint3 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xfloor(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1 int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint3 + _toint3 - x3 + } else { + y3 = x3 + _toint3 - _toint3 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint32(8) == uint32(4) { + y = float32(y3) + } else { + if uint32(8) == uint32(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return float64(v1) + } + if y3 > Float64FromInt32(0) { + return x3 + y3 - Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON8 = 0 + +func Xfloorf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(0) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xfloor(tls, x) +} + +const DBL_MIN1 = 2.2250738585072014e-308 +const FLT_MIN1 = 1.1754943508222875e-38 +const ZEROINFNAN = 971 + +type Tnum = struct { + F__ccgo_align [0]uint32 + Fm Tuint64_t + Fe int32 + Fsign int32 +} + +func _normalize(tls *TLS, x float64) (r Tnum) { + var e, sign, v2 int32 + var ix Tuint64_t + var v1 float64 + _, _, _, _, _ = e, ix, sign, v1, v2 + ix = *(*Tuint64_t)(unsafe.Pointer(&x)) + e = int32(ix >> int32(52)) + sign = e & int32(0x800) + e &= int32(0x7ff) + if !(e != 0) { + v1 = x * float64(9.223372036854776e+18) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + e = int32(ix >> int32(52) & uint64(0x7ff)) + if e != 0 { + v2 = e - int32(63) + } else { + v2 = int32(0x800) + } + e = v2 + } + ix &= Uint64FromUint64(1)<> int32(32) + ylo = uint64(uint32(y)) + yhi = y >> int32(32) + t1 = xlo * ylo + t2 = xlo*yhi + xhi*ylo + t3 = xhi * yhi + *(*Tuint64_t)(unsafe.Pointer(lo)) = t1 + t2<>Int32FromInt32(32) + BoolUint64(t1 > *(*Tuint64_t)(unsafe.Pointer(lo))) +} + +func Xfma(tls *TLS, x1 float64, y float64, z float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y=%v z=%v, (%v:)", tls, x1, y, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, r float64 + var d, e, nonzero, samesign, sign, v2, v5 int32 + var fltmin float32 + var i Tint64_t + var nx, ny, nz Tnum + var t, zhi, zlo, v1, v4 Tuint64_t + var tiny Tdouble_t + var _ /* rhi at bp+0 */ Tuint64_t + var _ /* rlo at bp+8 */ Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, e, fltmin, i, nonzero, nx, ny, nz, r, samesign, sign, t, tiny, zhi, zlo, v1, v2, v4, v5 + nx = _normalize(tls, x1) + ny = _normalize(tls, y) + nz = _normalize(tls, z) + if nx.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) || ny.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + return x1*y + z + } + if nz.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + if nz.Fe > Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { /* z==0 */ + return x1*y + z + } + return z + } + _mul(tls, bp, bp+8, nx.Fm, ny.Fm) + /* either top 20 or 21 bits of rhi and last 2 bits of rlo are 0 */ + /* align exponents */ + e = nx.Fe + ny.Fe + d = nz.Fe - e + /* shift bits z<<=kz, r>>=kr, so kz+kr == d, set e = e+kr (== ez-kz) */ + if d > 0 { + if d < int32(64) { + zlo = nz.Fm << d + zhi = nz.Fm >> (int32(64) - d) + } else { + zlo = uint64(0) + zhi = nz.Fm + e = nz.Fe - int32(64) + d -= int32(64) + if d == 0 { + } else { + if d < int32(64) { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = *(*Tuint64_t)(unsafe.Pointer(bp))<<(int32(64)-d) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<<(Int32FromInt32(64)-d) != 0)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) >> d + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(1) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(0) + } + } + } + } else { + zhi = uint64(0) + d = -d + if d == 0 { + zlo = nz.Fm + } else { + if d < int32(64) { + zlo = nz.Fm>>d | BoolUint64(!!(nz.Fm<<(Int32FromInt32(64)-d) != 0)) + } else { + zlo = uint64(1) + } + } + } + /* add */ + sign = nx.Fsign ^ ny.Fsign + samesign = BoolInt32(!(sign^nz.Fsign != 0)) + nonzero = int32(1) + if samesign != 0 { + /* r += z */ + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) += zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) += zhi + BoolUint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) < zlo) + } else { + /* r -= z */ + t = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) -= zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) - zhi - BoolUint64(t < *(*Tuint64_t)(unsafe.Pointer(bp + 8))) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = -*(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = -*(*Tuint64_t)(unsafe.Pointer(bp)) - BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) != 0)) + sign = BoolInt32(!(sign != 0)) + } + nonzero = BoolInt32(!!(*(*Tuint64_t)(unsafe.Pointer(bp)) != 0)) + } + /* set rhi to top 63bit of the result (last bit is sticky) */ + if nonzero != 0 { + e += int32(64) + v1 = *(*Tuint64_t)(unsafe.Pointer(bp)) + if v1>>Int32FromInt32(32) != 0 { + v2 = _a_clz_32(tls, uint32(v1>>int32(32))) + goto _3 + } + v2 = _a_clz_32(tls, uint32(v1)) + int32(32) + goto _3 + _3: + d = v2 - int32(1) + /* note: d > 0 */ + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp))<>(int32(64)-d) | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<>Int32FromInt32(32) != 0 { + v5 = _a_clz_32(tls, uint32(v4>>int32(32))) + goto _6 + } + v5 = _a_clz_32(tls, uint32(v4)) + int32(32) + goto _6 + _6: + d = v5 - int32(1) + if d < 0 { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&uint64(1) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) << d + } + } else { + /* exact +-0 */ + return x1*y + z + } + } + e -= d + /* convert to double */ + i = int64(*(*Tuint64_t)(unsafe.Pointer(bp))) /* i is in [1<<62,(1<<63)-1] */ + if sign != 0 { + i = -i + } + r = float64(i) /* |r| is in [0x1p62,0x1p63] */ + if e < -Int32FromInt32(1022)-Int32FromInt32(62) { + /* result is subnormal before rounding */ + if e == -Int32FromInt32(1022)-Int32FromInt32(63) { + c = float64(9.223372036854776e+18) + if sign != 0 { + c = -c + } + if r == c { + /* min normal after rounding, underflow depends + on arch behaviour which can be imitated by + a double to float conversion */ + fltmin = float32(Float64FromFloat64(1.0842021401737618e-19) * Float64FromFloat32(1.1754943508222875e-38) * r) + return Float64FromFloat64(2.2250738585072014e-308) / Float64FromFloat32(1.1754943508222875e-38) * float64(fltmin) + } + /* one bit is lost when scaled, add another top bit to + only round once at conversion if it is inexact */ + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp))&uint64(1) | Uint64FromUint64(1)<>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp))<<(Int32FromInt32(64)-d) != 0))) << d) + if sign != 0 { + i = -i + } + r = float64(i) + } + } + return Xscalbn(tls, r, e) +} + +const DBL_MIN2 = 0 +const FLT_MIN2 = 0 + +func Xfmal(tls *TLS, x float64, y float64, z float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v z=%v, (%v:)", tls, x, y, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfma(tls, x, y, z) +} + +func Xfmax(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeroes, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmax(tls, x, y) +} + +func Xfmin(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeros, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmin(tls, x, y) +} + +func Xfmod(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx int32 + var i, uxi Tuint64_t + var v1 uint64 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* in the followings uxi should be ux.i, but then gcc wrongly adds */ + /* float load/store to inner loops ruining performance and code size */ + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi &= -Uint64FromUint64(1) >> Int32FromInt32(12) + uxi |= Uint64FromUint64(1) << Int32FromInt32(52) + } + if !(ey != 0) { + i = *(*Tuint64_t)(unsafe.Pointer(bp + 16)) << int32(12) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) &= -Uint64FromUint64(1) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) |= Uint64FromUint64(1) << Int32FromInt32(52) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + uxi <<= uint64(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint64(1) + ex-- + } + /* scale result */ + if ex > 0 { + uxi -= Uint64FromUint64(1) << Int32FromInt32(52) + uxi |= uint64(ex) << int32(52) + } else { + uxi >>= uint64(-ex + int32(1)) + } + uxi |= uint64(sx) << int32(63) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xfmodf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey int32 + var i, sx, uxi Tuint32_t + var v1 uint32 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if uxi<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + uxi <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + /* scale result up */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + uxi |= sx + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xfmodl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmod(tls, x, y) +} + +func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var _ /* y at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + } + _ = ee + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexp(tls, x*float64(1.8446744073709552e+19), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0x7ff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(0x800fffffffffffff) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(0x3fe0000000000000) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfrexpf(tls *TLS, x float32, e uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexpf(tls, float32(float64(x)*float64(1.8446744073709552e+19)), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0xff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x7e) + p1 = bp + *(*Tuint32_t)(unsafe.Pointer(p1)) = Tuint32_t(*(*Tuint32_t)(unsafe.Pointer(p1)) & Uint32FromUint32(0x807fffff)) + p2 = bp + *(*Tuint32_t)(unsafe.Pointer(p2)) = Tuint32_t(*(*Tuint32_t)(unsafe.Pointer(p2)) | Uint32FromUint32(0x3f000000)) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfrexpl(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfrexp(tls, x, e) +} + +const SPLIT = 1 + +func _sq(tls *TLS, hi uintptr, lo uintptr, x float64) { + var xc, xh, xl Tdouble_t + _, _, _ = xc, xh, xl + xc = x * (Float64FromFloat64(1.34217728e+08) + Float64FromInt32(1)) + xh = x - xc + xc + xl = x - xh + *(*Tdouble_t)(unsafe.Pointer(hi)) = x * x + *(*Tdouble_t)(unsafe.Pointer(lo)) = xh*xh - *(*Tdouble_t)(unsafe.Pointer(hi)) + Float64FromInt32(2)*xh*xl + xl*xl +} + +func Xhypot(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey int32 + var ut struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var z Tdouble_t + var _ /* hx at bp+16 */ Tdouble_t + var _ /* hy at bp+32 */ Tdouble_t + var _ /* lx at bp+24 */ Tdouble_t + var _ /* ly at bp+40 */ Tdouble_t + var _ /* ux at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = ex, ey, ut, z + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + /* arrange |x| >= |y| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= -Uint64FromUint64(1) >> Int32FromInt32(1) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) &= -Uint64FromUint64(1) >> Int32FromInt32(1) + if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { + ut = *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = ut + } + /* special cases */ + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52)) + x = *(*float64)(unsafe.Pointer(bp)) + y = *(*float64)(unsafe.Pointer(bp + 8)) + /* note: hypot(inf,nan) == inf */ + if ey == int32(0x7ff) { + return y + } + if ex == int32(0x7ff) || *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == uint64(0) { + return x + } + /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ + /* 64 difference is enough for ld80 double_t */ + if ex-ey > int32(64) { + return x + y + } + /* precise sqrt argument in nearest rounding mode without overflow */ + /* xh*xh must not overflow and xl*xl must not underflow in sq */ + z = Float64FromInt32(1) + if ex > Int32FromInt32(0x3ff)+Int32FromInt32(510) { + z = float64(5.260135901548374e+210) + x *= float64(1.90109156629516e-211) + y *= float64(1.90109156629516e-211) + } else { + if ey < Int32FromInt32(0x3ff)-Int32FromInt32(450) { + z = float64(1.90109156629516e-211) + x *= float64(5.260135901548374e+210) + y *= float64(5.260135901548374e+210) + } + } + _sq(tls, bp+16, bp+24, x) + _sq(tls, bp+32, bp+40, y) + return z * Xsqrt(tls, *(*Tdouble_t)(unsafe.Pointer(bp + 40))+*(*Tdouble_t)(unsafe.Pointer(bp + 24))+*(*Tdouble_t)(unsafe.Pointer(bp + 32))+*(*Tdouble_t)(unsafe.Pointer(bp + 16))) +} + +func Xhypotf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ut struct { + Fi [0]Tuint32_t + Ff float32 + } + var z Tfloat_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = ut, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < *(*Tuint32_t)(unsafe.Pointer(bp + 4)) { + ut = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = ut + } + x = *(*float32)(unsafe.Pointer(bp)) + y = *(*float32)(unsafe.Pointer(bp + 4)) + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(25)<= uint32((Int32FromInt32(0x7f)+Int32FromInt32(60))< %v", r) }() + } + return Xhypot(tls, x, y) +} + +func Xilogb(tls *TLS, x3 float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint64_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + i <<= uint64(12) + if i == uint64(0) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x3ff) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint64(1) + } + return e + } + if e == int32(0x7ff) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(23) & uint32(0xff)) + if !(e != 0) { + i <<= uint32(9) + if i == uint32(0) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x7f) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint32(1) + } + return e + } + if e == int32(0xff) { + if uint32(4) == uint32(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint32(4) == uint32(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + return Xilogb(tls, x) +} + +var _invsqrtpi = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +// C documentation +// +// /* common method when |x|>=2 */ +func _common(tls *TLS, ix Tuint32_t, x float64, y0 int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x-pi/4)-q0(x)*sin(x-pi/4)) + * y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x-pi/4)+q0(x)*cos(x-pi/4)) + * + * sin(x-pi/4) = (sin(x) - cos(x))/sqrt(2) + * cos(x-pi/4) = (sin(x) + cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + c = Xcos(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + /* avoid overflow in 2*x, big ulp error when x>=0x1p1023 */ + if ix < uint32(0x7fe00000) { + ss = s - c + z = -Xcos(tls, Float64FromInt32(2)*x) + if s*c < Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y0 != 0 { + ss = -ss + } + cc = _pzero(tls, x)*cc - _qzero(tls, x)*ss + } + } + return _invsqrtpi * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R02 = float64(0.015624999999999995) /* 0x3F8FFFFF, 0xFFFFFFFD */ +var _R03 = -Float64FromFloat64(0.00018997929423885472) /* 0xBF28E6A5, 0xB61AC6E9 */ +var _R04 = float64(1.8295404953270067e-06) /* 0x3EBEB1D1, 0x0C503919 */ +var _R05 = -Float64FromFloat64(4.618326885321032e-09) /* 0xBE33D5E7, 0x73D63FCE */ +var _S01 = float64(0.015619102946489001) /* 0x3F8FFCE8, 0x82C8C2A4 */ +var _S02 = float64(0.00011692678466333745) /* 0x3F1EA6D2, 0xDD57DBF4 */ +var _S03 = float64(5.135465502073181e-07) /* 0x3EA13B54, 0xCE84D5A9 */ +var _S04 = float64(1.1661400333379e-09) /* 0x3E1408BC, 0xF4745D8F */ + +func Xj0(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + _, _, _, _ = ix, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* j0(+-inf)=0, j0(nan)=nan */ + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + x = Xfabs(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros: 2.4, 5.52, 8.6537,.. */ + return _common(tls, ix, x, 0) + } + /* 1 - x*x/4 + x*x*R(x^2)/S(x^2) */ + if ix >= uint32(0x3f200000) { /* |x| >= 2**-13 */ + /* up to 4ulp error close to 2 */ + z = x * x + r = z * (_R02 + z*(_R03+z*(_R04+z*_R05))) + s = Float64FromInt32(1) + z*(_S01+z*(_S02+z*(_S03+z*_S04))) + return (Float64FromInt32(1)+x/Float64FromInt32(2))*(Float64FromInt32(1)-x/Float64FromInt32(2)) + z*(r/s) + } + /* 1 - x*x/4 */ + /* prevent underflow */ + /* inexact should be raised when x!=0, this is not done correctly */ + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + x = float64(0.25) * x * x + } + return Float64FromInt32(1) - x +} + +var _u00 = -Float64FromFloat64(0.07380429510868723) /* 0xBFB2E4D6, 0x99CBD01F */ +var _u01 = float64(0.17666645250918112) /* 0x3FC69D01, 0x9DE9E3FC */ +var _u02 = -Float64FromFloat64(0.01381856719455969) /* 0xBF8C4CE8, 0xB16CFA97 */ +var _u03 = float64(0.00034745343209368365) /* 0x3F36C54D, 0x20B29B6B */ +var _u04 = -Float64FromFloat64(3.8140705372436416e-06) /* 0xBECFFEA7, 0x73D25CAD */ +var _u05 = float64(1.9559013703502292e-08) /* 0x3E550057, 0x3B4EABD4 */ +var _u06 = -Float64FromFloat64(3.982051941321034e-11) /* 0xBDC5E43D, 0x693FB3C8 */ +var _v01 = float64(0.01273048348341237) /* 0x3F8A1270, 0x91C9C71A */ +var _v02 = float64(7.600686273503533e-05) /* 0x3F13ECBB, 0xF578C6C1 */ +var _v03 = float64(2.591508518404578e-07) /* 0x3E91642D, 0x7FF202FD */ +var _v04 = float64(4.4111031133267547e-10) /* 0x3DFE5018, 0x3BD6D9EF */ + +func Xy0(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y0(nan)=nan, y0(<0)=nan, y0(0)=-inf, y0(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + /* large ulp errors near zeros: 3.958, 7.086,.. */ + return _common(tls, ix, x, int32(1)) + } + /* U(x^2)/V(x^2) + (2/pi)*j0(x)*log(x) */ + if ix >= uint32(0x3e400000) { /* x >= 2**-27 */ + /* large ulp error near the first zero, x ~= 0.89 */ + z = x * x + u = _u00 + z*(_u01+z*(_u02+z*(_u03+z*(_u04+z*(_u05+z*_u06))))) + v = float64(1) + z*(_v01+z*(_v02+z*(_v03+z*_v04))) + return u/v + _tpi*(Xj0(tls, x)*Xlog(tls, x)) + } + return _u00 + _tpi*Xlog(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR8 = [6]float64{ + 1: -Float64FromFloat64(0.07031249999999004), + 2: -Float64FromFloat64(8.081670412753498), + 3: -Float64FromFloat64(257.06310567970485), + 4: -Float64FromFloat64(2485.216410094288), + 5: -Float64FromFloat64(5253.043804907295), +} +var _pS8 = [5]float64{ + 0: float64(116.53436461966818), + 1: float64(3833.7447536412183), + 2: float64(40597.857264847255), + 3: float64(116752.97256437592), + 4: float64(47627.728414673096), +} + +var _pR5 = [6]float64{ + 0: -Float64FromFloat64(1.141254646918945e-11), + 1: -Float64FromFloat64(0.07031249408735993), + 2: -Float64FromFloat64(4.159610644705878), + 3: -Float64FromFloat64(67.67476522651673), + 4: -Float64FromFloat64(331.23129964917297), + 5: -Float64FromFloat64(346.4333883656049), +} +var _pS52 = [5]float64{ + 0: float64(60.753938269230034), + 1: float64(1051.2523059570458), + 2: float64(5978.970943338558), + 3: float64(9625.445143577745), + 4: float64(2406.058159229391), +} + +var _pR3 = [6]float64{ + 0: -Float64FromFloat64(2.547046017719519e-09), + 1: -Float64FromFloat64(0.07031196163814817), + 2: -Float64FromFloat64(2.409032215495296), + 3: -Float64FromFloat64(21.96597747348831), + 4: -Float64FromFloat64(58.07917047017376), + 5: -Float64FromFloat64(31.44794705948885), +} +var _pS32 = [5]float64{ + 0: float64(35.85603380552097), + 1: float64(361.51398305030386), + 2: float64(1193.6078379211153), + 3: float64(1127.9967985690741), + 4: float64(173.58093081333575), +} + +var _pR2 = [6]float64{ + 0: -Float64FromFloat64(8.875343330325264e-08), + 1: -Float64FromFloat64(0.07030309954836247), + 2: -Float64FromFloat64(1.4507384678095299), + 3: -Float64FromFloat64(7.635696138235278), + 4: -Float64FromFloat64(11.193166886035675), + 5: -Float64FromFloat64(3.2336457935133534), +} +var _pS24 = [5]float64{ + 0: float64(22.22029975320888), + 1: float64(136.2067942182152), + 2: float64(270.4702786580835), + 3: float64(153.87539420832033), + 4: float64(14.65761769482562), +} + +func _pzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pR8)) + q = uintptr(unsafe.Pointer(&_pS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pR5)) + q = uintptr(unsafe.Pointer(&_pS52)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pR3)) + q = uintptr(unsafe.Pointer(&_pS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR2)) + q = uintptr(unsafe.Pointer(&_pS24)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR8 = [6]float64{ + 1: float64(0.0732421874999935), + 2: float64(11.76820646822527), + 3: float64(557.6733802564019), + 4: float64(8859.197207564686), + 5: float64(37014.62677768878), +} +var _qS8 = [6]float64{ + 0: float64(163.77602689568982), + 1: float64(8098.344946564498), + 2: float64(142538.29141912048), + 3: float64(803309.2571195144), + 4: float64(840501.5798190605), + 5: -Float64FromFloat64(343899.2935378666), +} + +var _qR5 = [6]float64{ + 0: float64(1.8408596359451553e-11), + 1: float64(0.07324217666126848), + 2: float64(5.8356350896205695), + 3: float64(135.11157728644983), + 4: float64(1027.243765961641), + 5: float64(1989.9778586460538), +} +var _qS5 = [6]float64{ + 0: float64(82.77661022365378), + 1: float64(2077.81416421393), + 2: float64(18847.28877857181), + 3: float64(56751.11228949473), + 4: float64(35976.75384251145), + 5: -Float64FromFloat64(5354.342756019448), +} + +var _qR3 = [6]float64{ + 0: float64(4.377410140897386e-09), + 1: float64(0.07324111800429114), + 2: float64(3.344231375161707), + 3: float64(42.621844074541265), + 4: float64(170.8080913405656), + 5: float64(166.73394869665117), +} +var _qS32 = [6]float64{ + 0: float64(48.75887297245872), + 1: float64(709.689221056606), + 2: float64(3704.1482262011136), + 3: float64(6460.425167525689), + 4: float64(2516.3336892036896), + 5: -Float64FromFloat64(149.2474518361564), +} + +var _qR2 = [6]float64{ + 0: float64(1.5044444488698327e-07), + 1: float64(0.07322342659630793), + 2: float64(1.99819174093816), + 3: float64(14.495602934788574), + 4: float64(31.666231750478154), + 5: float64(16.252707571092927), +} +var _qS22 = [6]float64{ + 0: float64(30.36558483552192), + 1: float64(269.34811860804984), + 2: float64(844.7837575953201), + 3: float64(882.9358451124886), + 4: float64(212.66638851179883), + 5: -Float64FromFloat64(5.3109549388266695), +} + +func _qzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qR8)) + q = uintptr(unsafe.Pointer(&_qS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qR5)) + q = uintptr(unsafe.Pointer(&_qS5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qR3)) + q = uintptr(unsafe.Pointer(&_qS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR2)) + q = uintptr(unsafe.Pointer(&_qS22)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (-Float64FromFloat64(0.125) + r/s) / x +} + +var _invsqrtpi1 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi1 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common1(tls *TLS, ix Tuint32_t, x float32, y0 int32) (r float32) { + var c, cc, s, ss, z float32 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + s = Xsinf(tls, x) + c = Xcosf(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + if ix < uint32(0x7f000000) { + ss = s - c + z = -Xcosf(tls, Float32FromInt32(2)*x) + if s*c < Float32FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y0 != 0 { + ss = -ss + } + cc = _pzerof(tls, x)*cc - _qzerof(tls, x)*ss + } + } + return _invsqrtpi1 * cc / Xsqrtf(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R021 = float32(0.015625) /* 0x3c800000 */ +var _R031 = float32(-Float64FromFloat64(0.00018997929874)) /* 0xb947352e */ +var _R041 = float32(1.8295404516e-06) /* 0x35f58e88 */ +var _R051 = float32(-Float64FromFloat64(4.6183270541e-09)) /* 0xb19eaf3c */ +var _S011 = float32(0.015619102865) /* 0x3c7fe744 */ +var _S021 = float32(0.00011692678527) /* 0x38f53697 */ +var _S031 = float32(5.1354652442e-07) /* 0x3509daa6 */ +var _S041 = float32(1.1661400734e-09) /* 0x30a045e8 */ + +func Xj0f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + _, _, _, _ = ix, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + x = Xfabsf(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, 0) + } + if ix >= uint32(0x3a000000) { /* |x| >= 2**-11 */ + /* up to 4ulp error near 2 */ + z = x * x + r = z * (_R021 + z*(_R031+z*(_R041+z*_R051))) + s = Float32FromInt32(1) + z*(_S011+z*(_S021+z*(_S031+z*_S041))) + return (Float32FromInt32(1)+x/Float32FromInt32(2))*(Float32FromInt32(1)-x/Float32FromInt32(2)) + z*(r/s) + } + if ix >= uint32(0x21800000) { /* |x| >= 2**-60 */ + x = Float32FromFloat32(0.25) * x * x + } + return Float32FromInt32(1) - x +} + +var _u001 = float32(-Float64FromFloat64(0.073804296553)) /* 0xbd9726b5 */ +var _u011 = float32(0.17666645348) /* 0x3e34e80d */ +var _u021 = float32(-Float64FromFloat64(0.013818567619)) /* 0xbc626746 */ +var _u031 = float32(0.00034745343146) /* 0x39b62a69 */ +var _u041 = float32(-Float64FromFloat64(3.8140706238e-06)) /* 0xb67ff53c */ +var _u051 = float32(1.9559013964e-08) /* 0x32a802ba */ +var _u061 = float32(-Float64FromFloat64(3.982051841e-11)) /* 0xae2f21eb */ +var _v011 = float32(0.012730483897) /* 0x3c509385 */ +var _v021 = float32(7.6006865129e-05) /* 0x389f65e0 */ +var _v031 = float32(2.5915085189e-07) /* 0x348b216c */ +var _v041 = float32(4.4111031494e-10) /* 0x2ff280c2 */ + +func Xy0f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, int32(1)) + } + if ix >= uint32(0x39000000) { /* x >= 2**-13 */ + /* large ulp error at x ~= 0.89 */ + z = x * x + u = _u001 + z*(_u011+z*(_u021+z*(_u031+z*(_u041+z*(_u051+z*_u061))))) + v = Float32FromInt32(1) + z*(_v011+z*(_v021+z*(_v031+z*_v041))) + return u/v + _tpi1*(Xj0f(tls, x)*Xlogf(tls, x)) + } + return _u001 + _tpi1*Xlogf(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.0703125)), + 2: float32(-Float64FromFloat64(8.0816707611)), + 3: float32(-Float64FromFloat64(257.06311035)), + 4: float32(-Float64FromFloat64(2485.2163086)), + 5: float32(-Float64FromFloat64(5253.0439453)), +} +var _pS81 = [5]float32{ + 0: float32(116.53436279), + 1: float32(3833.744873), + 2: float32(40597.855469), + 3: float32(116752.96875), + 4: float32(47627.726562), +} +var _pR51 = [6]float32{ + 0: float32(-Float64FromFloat64(1.1412546255e-11)), + 1: float32(-Float64FromFloat64(0.070312492549)), + 2: float32(-Float64FromFloat64(4.1596107483)), + 3: float32(-Float64FromFloat64(67.674766541)), + 4: float32(-Float64FromFloat64(331.23129272)), + 5: float32(-Float64FromFloat64(346.43338013)), +} +var _pS53 = [5]float32{ + 0: float32(60.753936768), + 1: float32(1051.2523193), + 2: float32(5978.9707031), + 3: float32(9625.4453125), + 4: float32(2406.0581055), +} + +var _pR31 = [6]float32{ + 0: float32(-Float64FromFloat64(2.5470459075e-09)), + 1: float32(-Float64FromFloat64(0.070311963558)), + 2: float32(-Float64FromFloat64(2.4090321064)), + 3: float32(-Float64FromFloat64(21.965976715)), + 4: float32(-Float64FromFloat64(58.079170227)), + 5: float32(-Float64FromFloat64(31.447946548)), +} +var _pS33 = [5]float32{ + 0: float32(35.856033325), + 1: float32(361.51397705), + 2: float32(1193.6077881), + 3: float32(1127.9968262), + 4: float32(173.58093262), +} + +var _pR21 = [6]float32{ + 0: float32(-Float64FromFloat64(8.8753431271e-08)), + 1: float32(-Float64FromFloat64(0.070303097367)), + 2: float32(-Float64FromFloat64(1.45073843)), + 3: float32(-Float64FromFloat64(7.6356959343)), + 4: float32(-Float64FromFloat64(11.193166733)), + 5: float32(-Float64FromFloat64(3.2336456776)), +} +var _pS25 = [5]float32{ + 0: float32(22.220300674), + 1: float32(136.20678711), + 2: float32(270.47027588), + 3: float32(153.87539673), + 4: float32(14.657617569), +} + +func _pzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pR81)) + q = uintptr(unsafe.Pointer(&_pS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pR51)) + q = uintptr(unsafe.Pointer(&_pS53)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pR31)) + q = uintptr(unsafe.Pointer(&_pS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR21)) + q = uintptr(unsafe.Pointer(&_pS25)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR81 = [6]float32{ + 1: float32(0.0732421875), + 2: float32(11.768206596), + 3: float32(557.67340088), + 4: float32(8859.1972656), + 5: float32(37014.625), +} +var _qS81 = [6]float32{ + 0: float32(163.77603149), + 1: float32(8098.3447266), + 2: float32(142538.29688), + 3: float32(803309.25), + 4: float32(840501.5625), + 5: float32(-Float64FromFloat64(343899.28125)), +} + +var _qR51 = [6]float32{ + 0: float32(1.8408595828e-11), + 1: float32(0.073242180049), + 2: float32(5.8356351852), + 3: float32(135.11157227), + 4: float32(1027.2437744), + 5: float32(1989.9779053), +} +var _qS51 = [6]float32{ + 0: float32(82.776611328), + 1: float32(2077.814209), + 2: float32(18847.289062), + 3: float32(56751.113281), + 4: float32(35976.753906), + 5: float32(-Float64FromFloat64(5354.3427734)), +} + +var _qR31 = [6]float32{ + 0: float32(4.37740999e-09), + 1: float32(0.073241114616), + 2: float32(3.3442313671), + 3: float32(42.621845245), + 4: float32(170.80809021), + 5: float32(166.73394775), +} +var _qS33 = [6]float32{ + 0: float32(48.758872986), + 1: float32(709.68920898), + 2: float32(3704.1481934), + 3: float32(6460.425293), + 4: float32(2516.3337402), + 5: float32(-Float64FromFloat64(149.24745178)), +} + +var _qR21 = [6]float32{ + 0: float32(1.5044444979e-07), + 1: float32(0.073223426938), + 2: float32(1.9981917143), + 3: float32(14.495602608), + 4: float32(31.666231155), + 5: float32(16.252708435), +} +var _qS23 = [6]float32{ + 0: float32(30.365585327), + 1: float32(269.34811401), + 2: float32(844.78375244), + 3: float32(882.93585205), + 4: float32(212.66638184), + 5: float32(-Float64FromFloat64(5.3109550476)), +} + +func _qzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qR81)) + q = uintptr(unsafe.Pointer(&_qS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qR51)) + q = uintptr(unsafe.Pointer(&_qS51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qR31)) + q = uintptr(unsafe.Pointer(&_qS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR21)) + q = uintptr(unsafe.Pointer(&_qS23)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (-Float32FromFloat32(0.125) + r/s) / x +} + +var _invsqrtpi2 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +func _common2(tls *TLS, ix Tuint32_t, x float64, y1 int32, sign int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x-3pi/4)-q1(x)*sin(x-3pi/4)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x-3pi/4)+q1(x)*cos(x-3pi/4)) + * + * sin(x-3pi/4) = -(sin(x) + cos(x))/sqrt(2) + * cos(x-3pi/4) = (sin(x) - cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + if y1 != 0 { + s = -s + } + c = Xcos(tls, x) + cc = s - c + if ix < uint32(0x7fe00000) { + /* avoid overflow in 2*x */ + ss = -s - c + z = Xcos(tls, Float64FromInt32(2)*x) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y1 != 0 { + ss = -ss + } + cc = _pone(tls, x)*cc - _qone(tls, x)*ss + } + } + if sign != 0 { + cc = -cc + } + return _invsqrtpi2 * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r00 = -Float64FromFloat64(0.0625) /* 0xBFB00000, 0x00000000 */ +var _r01 = float64(0.001407056669551897) /* 0x3F570D9F, 0x98472C61 */ +var _r02 = -Float64FromFloat64(1.599556310840356e-05) /* 0xBEF0C5C6, 0xBA169668 */ +var _r03 = float64(4.9672799960958445e-08) /* 0x3E6AAAFA, 0x46CA0BD9 */ +var _s01 = float64(0.019153759953836346) /* 0x3F939D0B, 0x12637E53 */ +var _s02 = float64(0.00018594678558863092) /* 0x3F285F56, 0xB9CDF664 */ +var _s03 = float64(1.1771846404262368e-06) /* 0x3EB3BFF8, 0x333F8498 */ +var _s04 = float64(5.0463625707621704e-09) /* 0x3E35AC88, 0xC97DFF2C */ +var _s05 = float64(1.2354227442613791e-11) /* 0x3DAB2ACF, 0xCFB97ED8 */ + +func Xj1(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common2(tls, ix, Xfabs(tls, x), 0, sign) + } + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + z = x * x + r = z * (_r00 + z*(_r01+z*(_r02+z*_r03))) + s = Float64FromInt32(1) + z*(_s01+z*(_s02+z*(_s03+z*(_s04+z*_s05)))) + z = r / s + } else { + /* avoid underflow, raise inexact if x!=0 */ + z = x + } + return (float64(0.5) + z) * x +} + +var _U0 = [5]float64{ + 0: -Float64FromFloat64(0.19605709064623894), + 1: float64(0.05044387166398113), + 2: -Float64FromFloat64(0.0019125689587576355), + 3: float64(2.352526005616105e-05), + 4: -Float64FromFloat64(9.190991580398789e-08), +} +var _V0 = [5]float64{ + 0: float64(0.01991673182366499), + 1: float64(0.00020255258102513517), + 2: float64(1.3560880109751623e-06), + 3: float64(6.227414523646215e-09), + 4: float64(1.6655924620799208e-11), +} + +func Xy1(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + return _common2(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x3c900000) { /* x < 2**-54 */ + return -_tpi2 / x + } + z = x * x + u = _U0[0] + z*(_U0[int32(1)]+z*(_U0[int32(2)]+z*(_U0[int32(3)]+z*_U0[int32(4)]))) + v = Float64FromInt32(1) + z*(_V0[0]+z*(_V0[int32(1)]+z*(_V0[int32(2)]+z*(_V0[int32(3)]+z*_V0[int32(4)])))) + return x*(u/v) + _tpi2*(Xj1(tls, x)*Xlog(tls, x)-Float64FromInt32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr8 = [6]float64{ + 1: float64(0.11718749999998865), + 2: float64(13.239480659307358), + 3: float64(412.05185430737856), + 4: float64(3874.7453891396053), + 5: float64(7914.479540318917), +} +var _ps8 = [5]float64{ + 0: float64(114.20737037567841), + 1: float64(3650.9308342085346), + 2: float64(36956.206026903346), + 3: float64(97602.79359349508), + 4: float64(30804.27206278888), +} + +var _pr5 = [6]float64{ + 0: float64(1.3199051955624352e-11), + 1: float64(0.1171874931906141), + 2: float64(6.802751278684329), + 3: float64(108.30818299018911), + 4: float64(517.6361395331998), + 5: float64(528.7152013633375), +} +var _ps5 = [5]float64{ + 0: float64(59.28059872211313), + 1: float64(991.4014187336144), + 2: float64(5353.26695291488), + 3: float64(7844.690317495512), + 4: float64(1504.0468881036106), +} + +var _pr3 = [6]float64{ + 0: float64(3.025039161373736e-09), + 1: float64(0.11718686556725359), + 2: float64(3.9329775003331564), + 3: float64(35.11940355916369), + 4: float64(91.05501107507813), + 5: float64(48.55906851973649), +} +var _ps3 = [5]float64{ + 0: float64(34.79130950012515), + 1: float64(336.76245874782575), + 2: float64(1046.8713997577513), + 3: float64(890.8113463982564), + 4: float64(103.78793243963928), +} + +var _pr2 = [6]float64{ + 0: float64(1.0771083010687374e-07), + 1: float64(0.11717621946268335), + 2: float64(2.368514966676088), + 3: float64(12.242610914826123), + 4: float64(17.693971127168773), + 5: float64(5.073523125888185), +} +var _ps2 = [5]float64{ + 0: float64(21.43648593638214), + 1: float64(125.29022716840275), + 2: float64(232.2764690571628), + 3: float64(117.6793732871471), + 4: float64(8.364638933716183), +} + +func _pone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pr8)) + q = uintptr(unsafe.Pointer(&_ps8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pr5)) + q = uintptr(unsafe.Pointer(&_ps5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pr3)) + q = uintptr(unsafe.Pointer(&_ps3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr2)) + q = uintptr(unsafe.Pointer(&_ps2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr8 = [6]float64{ + 1: -Float64FromFloat64(0.10253906249999271), + 2: -Float64FromFloat64(16.271753454459), + 3: -Float64FromFloat64(759.6017225139501), + 4: -Float64FromFloat64(11849.806670242959), + 5: -Float64FromFloat64(48438.512428575035), +} +var _qs8 = [6]float64{ + 0: float64(161.3953697007229), + 1: float64(7825.385999233485), + 2: float64(133875.33628724958), + 3: float64(719657.7236832409), + 4: float64(666601.2326177764), + 5: -Float64FromFloat64(294490.26430383464), +} + +var _qr5 = [6]float64{ + 0: -Float64FromFloat64(2.089799311417641e-11), + 1: -Float64FromFloat64(0.10253905024137543), + 2: -Float64FromFloat64(8.05644828123936), + 3: -Float64FromFloat64(183.66960747488838), + 4: -Float64FromFloat64(1373.1937606550816), + 5: -Float64FromFloat64(2612.4444045321566), +} +var _qs5 = [6]float64{ + 0: float64(81.27655013843358), + 1: float64(1991.7987346048596), + 2: float64(17468.48519249089), + 3: float64(49851.42709103523), + 4: float64(27948.075163891812), + 5: -Float64FromFloat64(4719.183547951285), +} + +var _qr3 = [6]float64{ + 0: -Float64FromFloat64(5.078312264617666e-09), + 1: -Float64FromFloat64(0.10253782982083709), + 2: -Float64FromFloat64(4.610115811394734), + 3: -Float64FromFloat64(57.847221656278364), + 4: -Float64FromFloat64(228.2445407376317), + 5: -Float64FromFloat64(219.21012847890933), +} +var _qs3 = [6]float64{ + 0: float64(47.66515503237295), + 1: float64(673.8651126766997), + 2: float64(3380.1528667952634), + 3: float64(5547.729097207228), + 4: float64(1903.119193388108), + 5: -Float64FromFloat64(135.20119144430734), +} + +var _qr2 = [6]float64{ + 0: -Float64FromFloat64(1.7838172751095887e-07), + 1: -Float64FromFloat64(0.10251704260798555), + 2: -Float64FromFloat64(2.7522056827818746), + 3: -Float64FromFloat64(19.663616264370372), + 4: -Float64FromFloat64(42.32531333728305), + 5: -Float64FromFloat64(21.371921170370406), +} +var _qs2 = [6]float64{ + 0: float64(29.533362906052385), + 1: float64(252.98154998219053), + 2: float64(757.5028348686454), + 3: float64(739.3932053204672), + 4: float64(155.94900333666612), + 5: -Float64FromFloat64(4.959498988226282), +} + +func _qone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qr8)) + q = uintptr(unsafe.Pointer(&_qs8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qr5)) + q = uintptr(unsafe.Pointer(&_qs5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qr3)) + q = uintptr(unsafe.Pointer(&_qs3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr2)) + q = uintptr(unsafe.Pointer(&_qs2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (float64(0.375) + r/s) / x +} + +var _invsqrtpi3 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi3 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common3(tls *TLS, ix Tuint32_t, x float32, y1 int32, sign int32) (r float32) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + s = float64(Xsinf(tls, x)) + if y1 != 0 { + s = -s + } + c = float64(Xcosf(tls, x)) + cc = s - c + if ix < uint32(0x7f000000) { + ss = -s - c + z = float64(Xcosf(tls, Float32FromInt32(2)*x)) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y1 != 0 { + ss = -ss + } + cc = float64(_ponef(tls, x))*cc - float64(_qonef(tls, x))*ss + } + } + if sign != 0 { + cc = -cc + } + return float32(float64(_invsqrtpi3) * cc / float64(Xsqrtf(tls, x))) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r001 = float32(-Float64FromFloat64(0.0625)) /* 0xbd800000 */ +var _r011 = float32(0.0014070566976) /* 0x3ab86cfd */ +var _r021 = float32(-Float64FromFloat64(1.5995563444e-05)) /* 0xb7862e36 */ +var _r031 = float32(4.9672799207e-08) /* 0x335557d2 */ +var _s011 = float32(0.019153760746) /* 0x3c9ce859 */ +var _s021 = float32(0.00018594678841) /* 0x3942fab6 */ +var _s031 = float32(1.1771846857e-06) /* 0x359dffc2 */ +var _s041 = float32(5.046362439e-09) /* 0x31ad6446 */ +var _s051 = float32(1.2354227016e-11) /* 0x2d59567e */ + +func Xj1f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common3(tls, ix, Xfabsf(tls, x), 0, sign) + } + if ix >= uint32(0x39000000) { /* |x| >= 2**-13 */ + z = x * x + r = z * (_r001 + z*(_r011+z*(_r021+z*_r031))) + s = Float32FromInt32(1) + z*(_s011+z*(_s021+z*(_s031+z*(_s041+z*_s051)))) + z = Float32FromFloat32(0.5) + r/s + } else { + z = Float32FromFloat32(0.5) + } + return z * x +} + +var _U01 = [5]float32{ + 0: float32(-Float64FromFloat64(0.19605709612)), + 1: float32(0.050443872809), + 2: float32(-Float64FromFloat64(0.0019125689287)), + 3: float32(2.3525259166e-05), + 4: float32(-Float64FromFloat64(9.1909917899e-08)), +} +var _V01 = [5]float32{ + 0: float32(0.019916731864), + 1: float32(0.0002025525755), + 2: float32(1.3560879779e-06), + 3: float32(6.227414584e-09), + 4: float32(1.6655924903e-11), +} + +func Xy1f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + return _common3(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x33000000) { /* x < 2**-25 */ + return -_tpi3 / x + } + z = x * x + u = _U01[0] + z*(_U01[int32(1)]+z*(_U01[int32(2)]+z*(_U01[int32(3)]+z*_U01[int32(4)]))) + v = Float32FromFloat32(1) + z*(_V01[0]+z*(_V01[int32(1)]+z*(_V01[int32(2)]+z*(_V01[int32(3)]+z*_V01[int32(4)])))) + return x*(u/v) + _tpi3*(Xj1f(tls, x)*Xlogf(tls, x)-Float32FromFloat32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr81 = [6]float32{ + 1: float32(0.1171875), + 2: float32(13.239480972), + 3: float32(412.05184937), + 4: float32(3874.7453613), + 5: float32(7914.4794922), +} +var _ps81 = [5]float32{ + 0: float32(114.20736694), + 1: float32(3650.9309082), + 2: float32(36956.207031), + 3: float32(97602.796875), + 4: float32(30804.271484), +} + +var _pr51 = [6]float32{ + 0: float32(1.3199052094e-11), + 1: float32(0.11718749255), + 2: float32(6.8027510643), + 3: float32(108.30818176), + 4: float32(517.63616943), + 5: float32(528.71520996), +} +var _ps51 = [5]float32{ + 0: float32(59.280597687), + 1: float32(991.40142822), + 2: float32(5353.2670898), + 3: float32(7844.6904297), + 4: float32(1504.046875), +} + +var _pr31 = [6]float32{ + 0: float32(3.0250391081e-09), + 1: float32(0.1171868667), + 2: float32(3.932977438), + 3: float32(35.119403839), + 4: float32(91.055007935), + 5: float32(48.559066772), +} +var _ps31 = [5]float32{ + 0: float32(34.791309357), + 1: float32(336.76245117), + 2: float32(1046.87146), + 3: float32(890.81134033), + 4: float32(103.78793335), +} + +var _pr21 = [6]float32{ + 0: float32(1.0771083225e-07), + 1: float32(0.11717621982), + 2: float32(2.3685150146), + 3: float32(12.242610931), + 4: float32(17.693971634), + 5: float32(5.0735230446), +} +var _ps21 = [5]float32{ + 0: float32(21.436485291), + 1: float32(125.2902298), + 2: float32(232.276474), + 3: float32(117.67937469), + 4: float32(8.3646392822), +} + +func _ponef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pr81)) + q = uintptr(unsafe.Pointer(&_ps81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pr51)) + q = uintptr(unsafe.Pointer(&_ps51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pr31)) + q = uintptr(unsafe.Pointer(&_ps31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr21)) + q = uintptr(unsafe.Pointer(&_ps21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.1025390625)), + 2: float32(-Float64FromFloat64(16.271753311)), + 3: float32(-Float64FromFloat64(759.60174561)), + 4: float32(-Float64FromFloat64(11849.806641)), + 5: float32(-Float64FromFloat64(48438.511719)), +} +var _qs81 = [6]float32{ + 0: float32(161.39537048), + 1: float32(7825.3862305), + 2: float32(133875.34375), + 3: float32(719657.75), + 4: float32(666601.25), + 5: float32(-Float64FromFloat64(294490.25)), +} + +var _qr51 = [6]float32{ + 0: float32(-Float64FromFloat64(2.0897993405e-11)), + 1: float32(-Float64FromFloat64(0.1025390476)), + 2: float32(-Float64FromFloat64(8.0564479828)), + 3: float32(-Float64FromFloat64(183.66960144)), + 4: float32(-Float64FromFloat64(1373.1937256)), + 5: float32(-Float64FromFloat64(2612.4443359)), +} +var _qs51 = [6]float32{ + 0: float32(81.276550293), + 1: float32(1991.7987061), + 2: float32(17468.484375), + 3: float32(49851.425781), + 4: float32(27948.074219), + 5: float32(-Float64FromFloat64(4719.1835938)), +} + +var _qr31 = [6]float32{ + 0: float32(-Float64FromFloat64(5.0783124372e-09)), + 1: float32(-Float64FromFloat64(0.10253783315)), + 2: float32(-Float64FromFloat64(4.6101160049)), + 3: float32(-Float64FromFloat64(57.847221375)), + 4: float32(-Float64FromFloat64(228.24453735)), + 5: float32(-Float64FromFloat64(219.21012878)), +} +var _qs31 = [6]float32{ + 0: float32(47.665153503), + 1: float32(673.8651123), + 2: float32(3380.152832), + 3: float32(5547.7290039), + 4: float32(1903.1191406), + 5: float32(-Float64FromFloat64(135.20118713)), +} + +var _qr21 = [6]float32{ + 0: float32(-Float64FromFloat64(1.7838172539e-07)), + 1: float32(-Float64FromFloat64(0.10251704603)), + 2: float32(-Float64FromFloat64(2.7522056103)), + 3: float32(-Float64FromFloat64(19.66361618)), + 4: float32(-Float64FromFloat64(42.325313568)), + 5: float32(-Float64FromFloat64(21.371921539)), +} +var _qs21 = [6]float32{ + 0: float32(29.533363342), + 1: float32(252.98155212), + 2: float32(757.50280762), + 3: float32(739.39318848), + 4: float32(155.94900513), + 5: float32(-Float64FromFloat64(4.9594988823)), +} + +func _qonef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qr81)) + q = uintptr(unsafe.Pointer(&_qs81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qr51)) + q = uintptr(unsafe.Pointer(&_qs51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qr31)) + q = uintptr(unsafe.Pointer(&_qs31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr21)) + q = uintptr(unsafe.Pointer(&_qs21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (Float32FromFloat32(0.375) + r/s) / x +} + +var _invsqrtpi4 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ + +func Xjn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float64 + var i, k, nm1, sign int32 + var ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, h, i, ix, k, lx, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + /* nm1 = |n|-1 is used instead of |n| to handle n==INT_MIN */ + if n == 0 { + return Xj0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabs(tls, x) + if ix|lx == uint32(0) || ix == uint32(0x7ff00000) { /* if x is 0 or inf */ + b = float64(0) + } else { + if float64(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xcos(tls, x) + Xsin(tls, x) + case int32(1): + temp = -Xcos(tls, x) - Xsin(tls, x) + case int32(2): + temp = Xcos(tls, x) - Xsin(tls, x) + default: + fallthrough + case int32(3): + temp = Xcos(tls, x) + Xsin(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xj0(tls, x) + b = Xj1(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(float64(2)*float64(i)/x) - a /* avoid underflow */ + a = temp + goto _1 + _1: + } + } + } else { + if ix < uint32(0x3e100000) { /* x < 2**-29 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(32) { /* underflow */ + b = float64(0) + } else { + temp = x * float64(0.5) + b = temp + a = float64(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float64(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } + } else { + nf = float64(nm1) + float64(1) + w = Float64FromInt32(2) * nf / x + h = Float64FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - float64(1) + k = int32(1) + for q1 < float64(1e+09) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = float64(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float64FromInt32(1) / (Float64FromInt32(2)*(float64(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = float64(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlog(tls, Xfabs(tls, w)) + if tmp < float64(709.782712893384) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > float64(3.273390607896142e+150) { + a /= b + t /= b + b = float64(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0(tls, x) + w = Xj1(tls, x) + if Xfabs(tls, z) >= Xfabs(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xyn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, temp, v1, v3 float64 + var i, nm1, sign int32 + var ib, ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, i, ib, ix, lx, nm1, sign, temp, v1, v3 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + if sign != 0 && ix|lx != uint32(0) { /* x < 0 */ + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix == uint32(0x7ff00000) { + return float64(0) + } + if n == 0 { + return Xy0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1(tls, x) + } else { + v1 = Xy1(tls, x) + } + return v1 + } + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xsin(tls, x) - Xcos(tls, x) + case int32(1): + temp = -Xsin(tls, x) + Xcos(tls, x) + case int32(2): + temp = Xsin(tls, x) + Xcos(tls, x) + default: + fallthrough + case int32(3): + temp = Xsin(tls, x) - Xcos(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xy0(tls, x) + b = Xy1(tls, x) + /* quit if b is -inf */ + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xfff00000)) { + break + } + i++ + temp = b + b = float64(2)*float64(i)/x*b - a + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + a = temp + goto _2 + _2: + } + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xjnf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float32 + var i, k, nm1, sign int32 + var ix Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, h, i, ix, k, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + /* J(-n,x) = J(n,-x), use |n|-1 to avoid overflow in -n */ + if n == 0 { + return Xj0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1f(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabsf(tls, x) + if ix == uint32(0) || ix == uint32(0x7f800000) { /* if x is 0 or inf */ + b = Float32FromFloat32(0) + } else { + if float32(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = Xj0f(tls, x) + b = Xj1f(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(Float32FromFloat32(2)*float32(i)/x) - a + a = temp + goto _1 + _1: + } + } else { + if ix < uint32(0x35800000) { /* x < 2**-20 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(8) { /* underflow */ + nm1 = int32(8) + } + temp = Float32FromFloat32(0.5) * x + b = temp + a = Float32FromFloat32(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float32(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } else { + nf = float32(nm1) + Float32FromFloat32(1) + w = Float32FromInt32(2) * nf / x + h = Float32FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - Float32FromFloat32(1) + k = int32(1) + for q1 < Float32FromFloat32(10000) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = Float32FromFloat32(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float32FromFloat32(1) / (Float32FromInt32(2)*(float32(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = Float32FromFloat32(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlogf(tls, Xfabsf(tls, w)) + if tmp < Float32FromFloat32(88.721679688) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > Float32FromFloat32(1.152921504606847e+18) { + a /= b + t /= b + b = Float32FromFloat32(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0f(tls, x) + w = Xj1f(tls, x) + if Xfabsf(tls, z) >= Xfabsf(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xynf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, temp, v1, v3 float32 + var i, nm1, sign int32 + var ib, ix Tuint32_t + _, _, _, _, _, _, _, _, _, _ = a, b, i, ib, ix, nm1, sign, temp, v1, v3 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + if sign != 0 && ix != uint32(0) { /* x < 0 */ + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix == uint32(0x7f800000) { + return Float32FromFloat32(0) + } + if n == 0 { + return Xy0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1f(tls, x) + } else { + v1 = Xy1f(tls, x) + } + return v1 + } + a = Xy0f(tls, x) + b = Xy1f(tls, x) + /* quit if b is -inf */ + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xff800000)) { + break + } + i++ + temp = b + b = Float32FromFloat32(2)*float32(i)/x*b - a + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + a = temp + goto _2 + _2: + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xldexp(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xldexpf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, n) +} + +func Xldexpl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnl(tls, x, n) +} + +func Xlgamma(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi2 = float64(3.141592653589793) /* 0x400921FB, 0x54442D18 */ +var _a0 = float64(0.07721566490153287) /* 0x3FB3C467, 0xE37DB0C8 */ +var _a1 = float64(0.3224670334241136) /* 0x3FD4A34C, 0xC4A60FAD */ +var _a2 = float64(0.06735230105312927) /* 0x3FB13E00, 0x1A5562A7 */ +var _a3 = float64(0.020580808432516733) /* 0x3F951322, 0xAC92547B */ +var _a4 = float64(0.007385550860814029) /* 0x3F7E404F, 0xB68FEFE8 */ +var _a5 = float64(0.0028905138367341563) /* 0x3F67ADD8, 0xCCB7926B */ +var _a6 = float64(0.0011927076318336207) /* 0x3F538A94, 0x116F3F5D */ +var _a7 = float64(0.0005100697921535113) /* 0x3F40B6C6, 0x89B99C00 */ +var _a8 = float64(0.00022086279071390839) /* 0x3F2CF2EC, 0xED10E54D */ +var _a9 = float64(0.00010801156724758394) /* 0x3F1C5088, 0x987DFB07 */ +var _a10 = float64(2.5214456545125733e-05) /* 0x3EFA7074, 0x428CFA52 */ +var _a11 = float64(4.4864094961891516e-05) /* 0x3F07858E, 0x90A45837 */ +var _tc = float64(1.4616321449683622) /* 0x3FF762D8, 0x6356BE3F */ +var _tf = -Float64FromFloat64(0.12148629053584961) /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +var _tt = -Float64FromFloat64(3.638676997039505e-18) /* 0xBC50C7CA, 0xA48A971F */ +var _t0 = float64(0.48383612272381005) /* 0x3FDEF72B, 0xC8EE38A2 */ +var _t1 = -Float64FromFloat64(0.1475877229945939) /* 0xBFC2E427, 0x8DC6C509 */ +var _t2 = float64(0.06462494023913339) /* 0x3FB08B42, 0x94D5419B */ +var _t3 = -Float64FromFloat64(0.032788541075985965) /* 0xBFA0C9A8, 0xDF35B713 */ +var _t4 = float64(0.01797067508118204) /* 0x3F9266E7, 0x970AF9EC */ +var _t5 = -Float64FromFloat64(0.010314224129834144) /* 0xBF851F9F, 0xBA91EC6A */ +var _t6 = float64(0.006100538702462913) /* 0x3F78FCE0, 0xE370E344 */ +var _t7 = -Float64FromFloat64(0.0036845201678113826) /* 0xBF6E2EFF, 0xB3E914D7 */ +var _t8 = float64(0.0022596478090061247) /* 0x3F6282D3, 0x2E15C915 */ +var _t9 = -Float64FromFloat64(0.0014034646998923284) /* 0xBF56FE8E, 0xBF2D1AF1 */ +var _t10 = float64(0.000881081882437654) /* 0x3F4CDF0C, 0xEF61A8E9 */ +var _t11 = -Float64FromFloat64(0.0005385953053567405) /* 0xBF41A610, 0x9C73E0EC */ +var _t12 = float64(0.00031563207090362595) /* 0x3F34AF6D, 0x6C0EBBF7 */ +var _t13 = -Float64FromFloat64(0.00031275416837512086) /* 0xBF347F24, 0xECC38C38 */ +var _t14 = float64(0.0003355291926355191) /* 0x3F35FD3E, 0xE8C2D3F4 */ +var _u0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _u1 = float64(0.6328270640250934) /* 0x3FE4401E, 0x8B005DFF */ +var _u2 = float64(1.4549225013723477) /* 0x3FF7475C, 0xD119BD6F */ +var _u3 = float64(0.9777175279633727) /* 0x3FEF4976, 0x44EA8450 */ +var _u4 = float64(0.22896372806469245) /* 0x3FCD4EAE, 0xF6010924 */ +var _u5 = float64(0.013381091853678766) /* 0x3F8B678B, 0xBF2BAB09 */ +var _v1 = float64(2.4559779371304113) /* 0x4003A5D7, 0xC2BD619C */ +var _v2 = float64(2.128489763798934) /* 0x40010725, 0xA42B18F5 */ +var _v3 = float64(0.7692851504566728) /* 0x3FE89DFB, 0xE45050AF */ +var _v4 = float64(0.10422264559336913) /* 0x3FBAAE55, 0xD6537C88 */ +var _v5 = float64(0.003217092422824239) /* 0x3F6A5ABB, 0x57D0CF61 */ +var _s0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _s1 = float64(0.21498241596060885) /* 0x3FCB848B, 0x36E20878 */ +var _s2 = float64(0.325778796408931) /* 0x3FD4D98F, 0x4F139F59 */ +var _s3 = float64(0.14635047265246445) /* 0x3FC2BB9C, 0xBEE5F2F7 */ +var _s4 = float64(0.02664227030336386) /* 0x3F9B481C, 0x7E939961 */ +var _s5 = float64(0.0018402845140733772) /* 0x3F5E26B6, 0x7368F239 */ +var _s6 = float64(3.194753265841009e-05) /* 0x3F00BFEC, 0xDD17E945 */ +var _r1 = float64(1.3920053346762105) /* 0x3FF645A7, 0x62C4AB74 */ +var _r2 = float64(0.7219355475671381) /* 0x3FE71A18, 0x93D3DCDC */ +var _r3 = float64(0.17193386563280308) /* 0x3FC601ED, 0xCCFBDF27 */ +var _r4 = float64(0.01864591917156529) /* 0x3F9317EA, 0x742ED475 */ +var _r5 = float64(0.0007779424963818936) /* 0x3F497DDA, 0xCA41A95B */ +var _r6 = float64(7.326684307446256e-06) /* 0x3EDEBAF7, 0xA5B38140 */ +var _w0 = float64(0.4189385332046727) /* 0x3FDACFE3, 0x90C97D69 */ +var _w1 = float64(0.08333333333333297) /* 0x3FB55555, 0x5555553B */ +var _w2 = -Float64FromFloat64(0.0027777777772877554) /* 0xBF66C16C, 0x16B02E5C */ +var _w3 = float64(0.0007936505586430196) /* 0x3F4A019F, 0x98CF38B6 */ +var _w4 = -Float64FromFloat64(0.00059518755745034) /* 0xBF4380CB, 0x8C0FE741 */ +var _w5 = float64(0.0008363399189962821) /* 0x3F4B67BA, 0x4CDAD5D1 */ +var _w6 = -Float64FromFloat64(0.0016309293409657527) /* 0xBF5AB89D, 0x0B9E43E4 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* spurious inexact if odd int */ + x = float64(2) * (x*float64(0.5) - Xfloor(tls, x*float64(0.5))) /* x mod 2.0 */ + n = int32(x * Float64FromFloat64(4)) + n = (n + int32(1)) / int32(2) + x -= float64(float32(n) * Float32FromFloat32(0.5)) + x *= _pi2 + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sin(tls, x, float64(0), 0) + case int32(1): + return X__cos(tls, x, float64(0)) + case int32(2): + return X__sin(tls, -x, float64(0), 0) + case int32(3): + return -X__cos(tls, x, float64(0)) + } + return r +} + +func X__lgamma_r(tls *TLS, x float64, signgamp uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix >= uint32(0x7ff00000) { + return x * x + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(70))< float64(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlog(tls, _pi2/(t*x)) + } + /* purge off 1 and 2 */ + if (ix == uint32(0x3ff00000) || ix == uint32(0x40000000)) && uint32(*(*Tuint64_t)(unsafe.Pointer(bp))) == uint32(0) { + r = Float64FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlog(tls, x) + if ix >= uint32(0x3FE76944) { + y = float64(1) - x + i = 0 + } else { + if ix >= uint32(0x3FCDA661) { + y = x - (_tc - Float64FromFloat64(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = float64(0) + if ix >= uint32(0x3FFBB4C3) { /* [1.7316,2] */ + y = float64(2) - x + i = 0 + } else { + if ix >= uint32(0x3FF3B4C4) { /* [1.23,1.73] */ + y = x - _tc + i = int32(1) + } else { + y = x - float64(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a0 + z*(_a2+z*(_a4+z*(_a6+z*(_a8+z*_a10)))) + p2 = z * (_a1 + z*(_a3+z*(_a5+z*(_a7+z*(_a9+z*_a11))))) + p = y*p1 + p2 + r += p - float64(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t0 + w*(_t3+w*(_t6+w*(_t9+w*_t12))) /* parallel comp */ + p2 = _t1 + w*(_t4+w*(_t7+w*(_t10+w*_t13))) + p3 = _t2 + w*(_t5+w*(_t8+w*(_t11+w*_t14))) + p = z*p1 - (_tt - w*(p2+y*p3)) + r += _tf + p + case int32(2): + p1 = y * (_u0 + y*(_u1+y*(_u2+y*(_u3+y*(_u4+y*_u5))))) + p2 = float64(1) + y*(_v1+y*(_v2+y*(_v3+y*(_v4+y*_v5)))) + r += -Float64FromFloat64(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x40200000) { /* x < 8.0 */ + i = int32(x) + y = x - float64(i) + p = y * (_s0 + y*(_s1+y*(_s2+y*(_s3+y*(_s4+y*(_s5+y*_s6)))))) + q = float64(1) + y*(_r1+y*(_r2+y*(_r3+y*(_r4+y*(_r5+y*_r6))))) + r = float64(0.5)*y + p/q + z = float64(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + float64(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + float64(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + float64(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + float64(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + float64(2) /* FALLTHRU */ + r += Xlog(tls, z) + break + } + } else { + if ix < uint32(0x43900000) { /* 8.0 <= x < 2**58 */ + t = Xlog(tls, x) + z = float64(1) / x + y = z * z + w = _w0 + z*(_w1+y*(_w2+y*(_w3+y*(_w4+y*(_w5+y*_w6))))) + r = (x-float64(0.5))*(t-Float64FromFloat64(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlog(tls, x) - float64(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgamma_r(tls *TLS, x float64, signgamp uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, signgamp) +} + +func Xlgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi3 = float32(3.141592741) /* 0x40490fdb */ +var _a01 = float32(0.077215664089) /* 0x3d9e233f */ +var _a12 = float32(0.32246702909) /* 0x3ea51a66 */ +var _a21 = float32(0.067352302372) /* 0x3d89f001 */ +var _a31 = float32(0.020580807701) /* 0x3ca89915 */ +var _a41 = float32(0.0073855509982) /* 0x3bf2027e */ +var _a51 = float32(0.0028905137442) /* 0x3b3d6ec6 */ +var _a61 = float32(0.0011927076848) /* 0x3a9c54a1 */ +var _a71 = float32(0.00051006977446) /* 0x3a05b634 */ +var _a81 = float32(0.00022086278477) /* 0x39679767 */ +var _a91 = float32(0.00010801156895) /* 0x38e28445 */ +var _a101 = float32(2.52144564e-05) /* 0x37d383a2 */ +var _a111 = float32(4.4864096708e-05) /* 0x383c2c75 */ +var _tc1 = float32(1.4616321325) /* 0x3fbb16c3 */ +var _tf1 = float32(-Float64FromFloat64(0.12148628384)) /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +var _tt1 = float32(6.6971006518e-09) /* 0x31e61c52 */ +var _t01 = float32(0.48383611441) /* 0x3ef7b95e */ +var _t15 = float32(-Float64FromFloat64(0.14758771658)) /* 0xbe17213c */ +var _t21 = float32(0.064624942839) /* 0x3d845a15 */ +var _t31 = float32(-Float64FromFloat64(0.032788541168)) /* 0xbd064d47 */ +var _t41 = float32(0.017970675603) /* 0x3c93373d */ +var _t51 = float32(-Float64FromFloat64(0.010314224288)) /* 0xbc28fcfe */ +var _t61 = float32(0.0061005386524) /* 0x3bc7e707 */ +var _t71 = float32(-Float64FromFloat64(0.0036845202558)) /* 0xbb7177fe */ +var _t81 = float32(0.0022596477065) /* 0x3b141699 */ +var _t91 = float32(-Float64FromFloat64(0.0014034647029)) /* 0xbab7f476 */ +var _t101 = float32(0.00088108185446) /* 0x3a66f867 */ +var _t111 = float32(-Float64FromFloat64(0.00053859531181)) /* 0xba0d3085 */ +var _t121 = float32(0.00031563205994) /* 0x39a57b6b */ +var _t131 = float32(-Float64FromFloat64(0.00031275415677)) /* 0xb9a3f927 */ +var _t141 = float32(0.00033552918467) /* 0x39afe9f7 */ +var _u07 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _u11 = float32(0.63282704353) /* 0x3f2200f4 */ +var _u21 = float32(1.4549225569) /* 0x3fba3ae7 */ +var _u31 = float32(0.97771751881) /* 0x3f7a4bb2 */ +var _u41 = float32(0.22896373272) /* 0x3e6a7578 */ +var _u51 = float32(0.013381091878) /* 0x3c5b3c5e */ +var _v11 = float32(2.4559779167) /* 0x401d2ebe */ +var _v21 = float32(2.1284897327) /* 0x4008392d */ +var _v31 = float32(0.76928514242) /* 0x3f44efdf */ +var _v41 = float32(0.10422264785) /* 0x3dd572af */ +var _v51 = float32(0.0032170924824) /* 0x3b52d5db */ +var _s06 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _s11 = float32(0.21498242021) /* 0x3e5c245a */ +var _s21 = float32(0.32577878237) /* 0x3ea6cc7a */ +var _s31 = float32(0.14635047317) /* 0x3e15dce6 */ +var _s41 = float32(0.026642270386) /* 0x3cda40e4 */ +var _s51 = float32(0.0018402845599) /* 0x3af135b4 */ +var _s61 = float32(3.1947532989e-05) /* 0x3805ff67 */ +var _r11 = float32(1.3920053244) /* 0x3fb22d3b */ +var _r21 = float32(0.72193557024) /* 0x3f38d0c5 */ +var _r31 = float32(0.17193385959) /* 0x3e300f6e */ +var _r41 = float32(0.018645919859) /* 0x3c98bf54 */ +var _r51 = float32(0.00077794247773) /* 0x3a4beed6 */ +var _r61 = float32(7.3266842264e-06) /* 0x36f5d7bd */ +var _w01 = float32(0.41893854737) /* 0x3ed67f1d */ +var _w11 = float32(0.083333335817) /* 0x3daaaaab */ +var _w21 = float32(-Float64FromFloat64(0.002777777845)) /* 0xbb360b61 */ +var _w31 = float32(0.00079365057172) /* 0x3a500cfd */ +var _w41 = float32(-Float64FromFloat64(0.00059518753551)) /* 0xba1c065c */ +var _w51 = float32(0.00083633989561) /* 0x3a5b3dd2 */ +var _w61 = float32(-Float64FromFloat64(0.0016309292987)) /* 0xbad5c4e8 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi1(tls *TLS, x float32) (r float32) { + var n int32 + var y Tdouble_t + _, _ = n, y + /* spurious inexact if odd int */ + x = Float32FromInt32(2) * (x*Float32FromFloat32(0.5) - Xfloorf(tls, x*Float32FromFloat32(0.5))) /* x mod 2.0 */ + n = int32(x * Float32FromInt32(4)) + n = (n + int32(1)) / int32(2) + y = float64(x - float32(n)*Float32FromFloat32(0.5)) + y *= float64(3.141592653589793) + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sindf(tls, y) + case int32(1): + return X__cosdf(tls, y) + case int32(2): + return X__sindf(tls, -y) + case int32(3): + return -X__cosdf(tls, y) + } + return r +} + +func X__lgammaf_r(tls *TLS, x float32, signgamp uintptr) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return x * x + } + if ix < uint32(0x35000000) { /* |x| < 2**-21, return -log(|x|) */ + if sign != 0 { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + x = -x + } + return -Xlogf(tls, x) + } + if sign != 0 { + x = -x + t = _sin_pi1(tls, x) + if t == Float32FromFloat32(0) { /* -integer */ + return Float32FromFloat32(1) / (x - x) + } + if t > Float32FromFloat32(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlogf(tls, _pi3/(t*x)) + } + /* purge off 1 and 2 */ + if ix == uint32(0x3f800000) || ix == uint32(0x40000000) { + r = Float32FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3f666666) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlogf(tls, x) + if ix >= uint32(0x3f3b4a20) { + y = Float32FromFloat32(1) - x + i = 0 + } else { + if ix >= uint32(0x3e6d3308) { + y = x - (_tc1 - Float32FromFloat32(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float32FromFloat32(0) + if ix >= uint32(0x3fdda618) { /* [1.7316,2] */ + y = Float32FromFloat32(2) - x + i = 0 + } else { + if ix >= uint32(0x3F9da620) { /* [1.23,1.73] */ + y = x - _tc1 + i = int32(1) + } else { + y = x - Float32FromFloat32(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a01 + z*(_a21+z*(_a41+z*(_a61+z*(_a81+z*_a101)))) + p2 = z * (_a12 + z*(_a31+z*(_a51+z*(_a71+z*(_a91+z*_a111))))) + p = y*p1 + p2 + r += p - Float32FromFloat32(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t01 + w*(_t31+w*(_t61+w*(_t91+w*_t121))) /* parallel comp */ + p2 = _t15 + w*(_t41+w*(_t71+w*(_t101+w*_t131))) + p3 = _t21 + w*(_t51+w*(_t81+w*(_t111+w*_t141))) + p = z*p1 - (_tt1 - w*(p2+y*p3)) + r += _tf1 + p + case int32(2): + p1 = y * (_u07 + y*(_u11+y*(_u21+y*(_u31+y*(_u41+y*_u51))))) + p2 = Float32FromFloat32(1) + y*(_v11+y*(_v21+y*(_v31+y*(_v41+y*_v51)))) + r += -Float32FromFloat32(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x41000000) { /* x < 8.0 */ + i = int32(x) + y = x - float32(i) + p = y * (_s06 + y*(_s11+y*(_s21+y*(_s31+y*(_s41+y*(_s51+y*_s61)))))) + q = Float32FromFloat32(1) + y*(_r11+y*(_r21+y*(_r31+y*(_r41+y*(_r51+y*_r61))))) + r = Float32FromFloat32(0.5)*y + p/q + z = Float32FromFloat32(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float32FromFloat32(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float32FromFloat32(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float32FromFloat32(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float32FromFloat32(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float32FromFloat32(2) /* FALLTHRU */ + r += Xlogf(tls, z) + break + } + } else { + if ix < uint32(0x5c800000) { /* 8.0 <= x < 2**58 */ + t = Xlogf(tls, x) + z = Float32FromFloat32(1) / x + y = z * z + w = _w01 + z*(_w11+y*(_w21+y*(_w31+y*(_w41+y*(_w51+y*_w61))))) + r = (x-Float32FromFloat32(0.5))*(t-Float32FromFloat32(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlogf(tls, x) - Float32FromFloat32(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgammaf_r(tls *TLS, x float32, signgamp uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, signgamp) +} + +func X__lgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, sg) +} + +func Xlgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +func Xlgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, sg) +} + +/* uses LLONG_MAX > 2^53, see comments in lrint.c */ + +func Xllrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LLONG_MAX > 2^24, see comments in lrint.c */ + +func Xllrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +const FE_ALL_EXCEPT = 31 +const FE_DIVBYZERO = 2 +const FE_DOWNWARD = 8388608 +const FE_INEXACT = 16 +const FE_INVALID = 1 +const FE_OVERFLOW = 4 +const FE_TONEAREST = 0 +const FE_TOWARDZERO = 12582912 +const FE_UNDERFLOW = 8 +const FE_UPWARD = 4194304 + +type Tfexcept_t = uint32 + +type Tfenv_t = struct { + F__cw uint32 +} + +func Xllrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xllrint(tls, x) +} + +func Xllround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xllroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xllroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +const LOG_POLY1_ORDER = 12 +const LOG_POLY_ORDER = 6 +const LOG_TABLE_BITS = 7 +const N4 = 128 +const OFF = 4604367669032910848 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top16(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, r, r2, r3, rhi, rlo, w, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, r, r2, r3, rhi, rlo, tmp, top, w, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top16(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.064697265625) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + r2 = r * r + r3 = r * r2 + y1 = r3 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 1*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 2*8)) + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 3*8)) + r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 5*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 6*8))+r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 7*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 8*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 9*8))+r3**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 10*8))))) + /* Worst-case error is around 0.507 ULP. */ + w = r * float64(1.34217728e+08) + rhi = r + w - w + rlo = r - rhi + w = rhi * rhi * *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) /* B[0] == -0.5. */ + hi = r + w + lo = r - hi + w + lo += *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) * rlo * (rhi + r) + y1 += lo + y1 += hi + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-5: + 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma) + Worst case error if |y| > 0x1p-4: + 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */ + y1 = lo + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16)) + r*r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 1*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 2*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 3*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 4*8)))) + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +var _ivln10hi = float64(0.4342944818781689) /* 0x3fdbcb7b, 0x15200000 */ +var _ivln10lo = float64(2.5082946711645275e-11) /* 0x3dbb9438, 0xca9aadd5 */ +var _log10_2hi = float64(0.30102999566361177) /* 0x3FD34413, 0x509F6000 */ +var _log10_2lo = float64(3.694239077158931e-13) /* 0x3D59FEF3, 0x11F12B36 */ +var _Lg1 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg2 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg3 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg4 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg5 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg6 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg7 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, val_hi, val_lo, w, y, z Tdouble_t + var hx Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, hx, k, lo, s, t1, t2, val_hi, val_lo, w, y, z + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = 0 + if hx < uint32(0x00100000) || hx>>int32(31) != 0 { + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(31) != 0 { + return (x - x) / float64(0) + } /* log(-#) = NaN */ + /* subnormal number, scale x up */ + k -= int32(54) + x *= float64(1.8014398509481984e+16) + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + } else { + if hx >= uint32(0x7ff00000) { + return x + } else { + if hx == uint32(0x3ff00000) && *(*Tuint64_t)(unsafe.Pointer(bp))<>Int32FromInt32(20)) - int32(0x3ff) + hx = hx&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hx)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, w, z Tfloat_t + var ix Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, ix, k, lo, s, t1, t2, w, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = 0 + if ix < uint32(0x00800000) || ix>>int32(31) != 0 { /* x < 2**-126 */ + if ix<>int32(31) != 0 { + return (x - x) / Float32FromFloat32(0) + } /* log(-#) = NaN */ + /* subnormal number, scale up x */ + k -= int32(25) + x *= Float32FromFloat32(3.3554432e+07) + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + } else { + if ix >= uint32(0x7f800000) { + return x + } else { + if ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + } + } + /* reduce x into [sqrt(2)/2, sqrt(2)] */ + ix += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k += int32(ix>>Int32FromInt32(23)) - int32(0x7f) + ix = ix&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix + x = *(*float32)(unsafe.Pointer(bp)) + f = x - Float32FromFloat32(1) + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg21 + w*_Lg41) + t2 = z * (_Lg11 + w*_Lg31) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + hi = f - hfsq + *(*float32)(unsafe.Pointer(bp)) = hi + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0xfffff000) + hi = *(*float32)(unsafe.Pointer(bp)) + lo = f - hi - hfsq + s*(hfsq+R) + dk = float32(k) + return dk*_log10_2lo1 + (lo+hi)*_ivln10lo1 + lo*_ivln10hi1 + hi*_ivln10hi1 + dk*_log10_2hi1 +} + +func Xlog10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog10(tls, x) +} + +var _ln2_hi2 = float64(0.6931471803691238) /* 3fe62e42 fee00000 */ +var _ln2_lo2 = float64(1.9082149292705877e-10) /* 3dea39ef 35793c76 */ +var _Lg12 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg22 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg32 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg42 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg51 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg61 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg71 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog1p(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tdouble_t + var hu, hx Tuint32_t + var k int32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, hu, hx, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = int32(1) + if hx < uint32(0x3fda827a) || hx>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if hx >= uint32(0xbff00000) { /* x <= -1.0 */ + if x3 == float64(-Int32FromInt32(1)) { + return x3 / float64(0) + } /* log1p(-1) = -inf */ + return (x3 - x3) / float64(0) /* log1p(x<-1) = NaN */ + } + if hx<= uint32(0x7ff00000) { + return x3 + } + } + if k != 0 { + *(*float64)(unsafe.Pointer(bp)) = Float64FromInt32(1) + x3 + hu = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + hu += uint32(Int32FromInt32(0x3ff00000) - Int32FromInt32(0x3fe6a09e)) + k = int32(hu>>Int32FromInt32(20)) - int32(0x3ff) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(54) { + if k >= int32(2) { + v1 = Float64FromInt32(1) - (*(*float64)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float64)(unsafe.Pointer(bp)) - Float64FromInt32(1)) + } + c = v1 + c /= *(*float64)(unsafe.Pointer(bp)) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + hu = hu&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hu)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tfloat_t + var iu, ix Tuint32_t + var k int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, iu, ix, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = int32(1) + if ix < uint32(0x3ed413d0) || ix>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if ix >= uint32(0xbf800000) { /* x <= -1.0 */ + if x3 == float32(-Int32FromInt32(1)) { + return x3 / Float32FromFloat32(0) + } /* log1p(-1)=+inf */ + return (x3 - x3) / Float32FromFloat32(0) /* log1p(x<-1)=NaN */ + } + if ix<= uint32(0x7f800000) { + return x3 + } + } + if k != 0 { + *(*float32)(unsafe.Pointer(bp)) = Float32FromInt32(1) + x3 + iu = *(*Tuint32_t)(unsafe.Pointer(bp)) + iu += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k = int32(iu>>Int32FromInt32(23)) - int32(0x7f) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(25) { + if k >= int32(2) { + v1 = Float32FromInt32(1) - (*(*float32)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + c = v1 + c /= *(*float32)(unsafe.Pointer(bp)) + } else { + c = Float32FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + iu = iu&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = iu + f = *(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1) + } + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg23 + w*_Lg43) + t2 = z * (_Lg13 + w*_Lg33) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + dk = float32(k) + return s*(hfsq+R) + (dk*_ln2_lo3 + c) - hfsq + f + dk*_ln2_hi3 +} + +func Xlog1pl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog1p(tls, x) +} + +const LOG2_POLY1_ORDER = 11 +const LOG2_POLY_ORDER = 7 +const LOG2_TABLE_BITS = 6 +const N5 = 64 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top161(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, p, r, r2, r4, rhi, rhi1, rlo, rlo1, t1, t2, t3, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp, v12, v6 Tuint64_t + var top Tuint32_t + var y, v1, v10, v11, v13, v14, v2, v3, v4, v7, v8 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, p, r, r2, r4, rhi, rhi1, rlo, rlo1, t1, t2, t3, tmp, top, y, y1, z, v1, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top161(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.044274330139160156) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + v7 = r + v6 = *(*Tuint64_t)(unsafe.Pointer(&v7)) & (-Uint64FromUint64(1) << Int32FromInt32(32)) + rhi = *(*float64)(unsafe.Pointer(&v6)) + rlo = r - rhi + hi = rhi * X__log2_data.Finvln2hi + lo = rlo*X__log2_data.Finvln2hi + r*X__log2_data.Finvln2lo + r2 = r * r /* rounding error: 0x1p-62. */ + r4 = r2 * r2 + /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */ + p = r2 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 1*8))) + y1 = hi + p + lo += hi - y1 + p + lo += r4 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 2*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 3*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 5*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 6*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 7*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 8*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 9*8))))) + y1 += lo + y = y1 + v8 = y + goto _9 + _9: + return v8 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v10 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v11 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v11)) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-4: 0.547 ULP (0.550 ULP without fma). + ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */ + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 1*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 2*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 3*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 5*8))) + y1 = lo + r2*p + hi + y = y1 + v14 = y + goto _15 +_15: + return v14 +} + +type Tlog2_data = struct { + F__ccgo_align [0]uint32 + Finvln2hi float64 + Finvln2lo float64 + Fpoly [6]float64 + Fpoly1 [10]float64 + Ftab [64]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + } + Ftab2 [64]struct { + F__ccgo_align [0]uint32 + Fchi float64 + Fclo float64 + } +} + +const LOG2F_POLY_ORDER = 4 +const LOG2F_TABLE_BITS = 4 +const N6 = 16 +const OFF1 = 1060306944 + +/* +LOG2F_TABLE_BITS = 4 +LOG2F_POLY_ORDER = 4 + +ULP error: 0.752 (nearest rounding.) +Relative error: 1.9 * 2^-26 (before rounding.) +*/ + +func Xlog2f(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, k int32 + var invc, logc, p, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp, top Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, p, r, r2, tmp, top, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log2(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOG2F_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + invc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256))*r2 + y1 + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 3*8))*r + y0 + y1 = y1*r2 + p + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlog2f_data = struct { + F__ccgo_align [0]uint32 + Ftab [16]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + } + Fpoly [4]float64 +} + +func Xlog2l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog2(tls, x) +} + +const N7 = 128 + +type Tlog_data = struct { + F__ccgo_align [0]uint32 + Fln2hi float64 + Fln2lo float64 + Fpoly [5]float64 + Fpoly1 [11]float64 + Ftab [128]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + } + Ftab2 [128]struct { + F__ccgo_align [0]uint32 + Fchi float64 + Fclo float64 + } +} + +/* +special cases: + logb(+-0) = -inf, and raise divbyzero + logb(+-inf) = +inf + logb(nan) = nan +*/ + +func Xlogb(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + return x * x + } + if x == Float32FromInt32(0) { + return float32(-Int32FromInt32(1)) / (x * x) + } + return float32(Xilogbf(tls, x)) +} + +func Xlogbl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r1) }() + } + var i, k int32 + var invc, logc, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, r, r2, tmp, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOGF_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + iz = ix - tmp&uint32(0xff800000) + invc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k)*X__logf_data.Fln2 + /* Pipelined polynomial evaluation to approximate log1p(r). */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264))*r2 + y1 + y1 = y1*r2 + (y0 + r) + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlogf_data = struct { + F__ccgo_align [0]uint32 + Ftab [16]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + } + Fln2 float64 + Fpoly [3]float64 +} + +func Xlogl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog(tls, x) +} + +const DBL_EPSILON9 = 2.220446049250313e-16 + +/* +If the result cannot be represented (overflow, nan), then +lrint raises the invalid exception. + +Otherwise if the input was not an integer then the inexact +exception is raised. + +C99 is a bit vague about whether inexact exception is +allowed to be raised when invalid is raised. +(F.9 explicitly allows spurious inexact exceptions, F.9.6.5 +does not make it clear if that rule applies to lrint, but +IEEE 754r 7.8 seems to forbid spurious inexact exception in +the ineger conversion functions) + +So we try to make sure that no spurious inexact exception is +raised in case of an overflow. + +If the bit size of long > precision of double, then there +cannot be inexact rounding in case the result overflows, +otherwise LONG_MAX and LONG_MIN can be represented exactly +as a double. +*/ + +// C documentation +// +// /* avoid stack frame in lrint */ +func _lrint_slow(tls *TLS, x float64) (r int32) { + var e int32 + _ = e + e = _fetestexcept(tls, int32(FE_INEXACT)) + x = Xrint(tls, x) + if !(e != 0) && (x > Float64FromInt32(0x7fffffff) || x < float64(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))) { + _feclearexcept(tls, int32(FE_INEXACT)) + } + /* conversion */ + return int32(x) +} + +func Xlrint(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var abstop Tuint32_t + var sign, v1 Tuint64_t + var toint, y Tdouble_t + var v2 float64 + _, _, _, _, _, _ = abstop, sign, toint, y, v1, v2 + abstop = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32) & uint64(0x7fffffff)) + sign = *(*Tuint64_t)(unsafe.Pointer(&x)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + if abstop < uint32(0x41dfffff) { + v2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + v1 = *(*Tuint64_t)(unsafe.Pointer(&v2)) | sign + /* |x| < 0x7ffffc00, no overflow */ + toint = *(*float64)(unsafe.Pointer(&v1)) + y = x + toint - toint + return int32(y) + } + return _lrint_slow(tls, x) +} + +/* uses LONG_MAX > 2^24, see comments in lrint.c */ + +func Xlrintf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xrintf(tls, x)) +} + +const DBL_EPSILON10 = 0 + +func Xlrintl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlrint(tls, x) +} + +func Xlround(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xround(tls, x)) +} + +func Xlroundf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xroundf(tls, x)) +} + +func Xlroundl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xroundl(tls, x)) +} + +func Xmodf(tls *TLS, x float64, iptr uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint64_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _ = e, mask + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + /* no fractional part */ + if e >= int32(52) { + *(*float64)(unsafe.Pointer(iptr)) = x + if e == int32(0x400) && *(*Tuint64_t)(unsafe.Pointer(bp))<> Int32FromInt32(12) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { + *(*float64)(unsafe.Pointer(iptr)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= Uint64FromUint64(1) << Int32FromInt32(63) + return *(*float64)(unsafe.Pointer(bp)) + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return x - *(*float64)(unsafe.Pointer(bp)) +} + +func Xmodff(tls *TLS, x float32, iptr uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + /* no fractional part */ + if e >= int32(23) { + *(*float32)(unsafe.Pointer(iptr)) = x + if e == int32(0x80) && *(*Tuint32_t)(unsafe.Pointer(bp))<> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&mask == uint32(0) { + *(*float32)(unsafe.Pointer(iptr)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^mask + *(*float32)(unsafe.Pointer(iptr)) = *(*float32)(unsafe.Pointer(bp)) + return x - *(*float32)(unsafe.Pointer(bp)) +} + +func Xmodfl(tls *TLS, x float64, iptr uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r float64 + var _ /* d at bp+0 */ float64 + _ = r + r = Xmodf(tls, x, bp) + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return r +} + +func Xnan(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnanf(tls *TLS, s uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__builtin_nanf(tls, __ccgo_ts) +} + +func Xnanl(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnextafter(tls *TLS, x3 float64, y3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ax, ay Tuint64_t + var e int32 + var y float32 + var y1, y2 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y3 + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> int32(52) & uint64(0x7ff)) + /* raise overflow if ux.f is infinite and x is finite */ + if e == int32(0x7ff) { + if uint32(8) == uint32(4) { + y = float32(x3 + x3) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + x3 + } else { + y2 = x3 + x3 + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == 0 { + if uint32(8) == uint32(4) { + y = float32(x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8))) + } else { + if uint32(8) == uint32(8) { + y1 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } else { + y2 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } + } + } + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xnextafterf(tls *TLS, x3 float32, y3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ax, ay, e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y3 + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + y3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == *(*Tuint32_t)(unsafe.Pointer(bp + 8)) { + return y3 + } + ax = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7fffffff) + ay = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) & uint32(0x7fffffff) + if ax == uint32(0) { + if ay == uint32(0) { + return y3 + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = *(*Tuint32_t)(unsafe.Pointer(bp + 8))&uint32(0x80000000) | uint32(1) + } else { + if ax > ay || (*(*Tuint32_t)(unsafe.Pointer(bp + 4))^*(*Tuint32_t)(unsafe.Pointer(bp + 8)))&uint32(0x80000000) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))++ + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint32(4) == uint32(4) { + y = x3 + x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4)) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xnextafterl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttoward(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttowardf(tls *TLS, x3 float32, y3 float64) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v10, v8 uint32 + var v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* __u at bp+8 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+16 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _ = e, y, y1, y2, v1, v10, v3, v5, v6, v8 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 16)) = x3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float64)(unsafe.Pointer(bp + 8)) = y3 + v3 = *(*uint64)(unsafe.Pointer(bp + 8)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16)) |= uint32(0x80000000) + } + } else { + if float64(x3) < y3 { + *(*float32)(unsafe.Pointer(bp)) = x3 + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 + _9: + if int32(v8>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } + } else { + *(*float32)(unsafe.Pointer(bp)) = x3 + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 16)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint32(4) == uint32(4) { + y = x3 + x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint32(4) == uint32(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16)) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 16)) +} + +func Xnexttowardl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafterl(tls, x, y) +} + +const OFF2 = 4604531861337669632 +const POW_LOG_POLY_ORDER = 8 +const POW_LOG_TABLE_BITS = 7 +const SIGN_BIAS = 262144 + +/* +Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53) +relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma) +ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma) +*/ + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top124(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +// C documentation +// +// /* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about +// additional 15 bits precision. IX is the bit representation of x, but +// normalized in the subnormal range using the sign bit for the exponent. */ +func _log_inline(tls *TLS, ix Tuint64_t, tail uintptr) (r1 Tdouble_t) { + var ar, ar2, ar3, arhi, arhi2, hi, invc, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, rhi, rlo, t1, t2, y, z, zhi, zlo Tdouble_t + var i, k int32 + var iz, tmp, v1 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ar, ar2, ar3, arhi, arhi2, hi, i, invc, iz, k, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, rhi, rlo, t1, t2, tmp, y, z, zhi, zlo, v1 + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF2) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ + sbits -= Uint64FromUint64(1009) << Int32FromInt32(52) + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = float64(5.486124068793689e+303) * (scale + scale*tmp) + y = y3 + v1 = y + goto _2 + _2: + return v1 + } + /* k < 0, need special care in the subnormal range. */ + sbits += Uint64FromUint64(1022) << Int32FromInt32(52) + /* Note: sbits is signed scale. */ + scale = *(*float64)(unsafe.Pointer(&sbits)) + y3 = scale + scale*tmp + if Xfabs(tls, y3) < float64(1) { + one = float64(1) + if y3 < float64(0) { + one = -Float64FromFloat64(1) + } + lo = scale - y3 + scale*tmp + hi = one + y3 + lo = one - hi + y3 + lo + y = hi + lo + v3 = y + goto _4 + _4: + y3 = v3 - one + /* Fix the sign of 0. */ + if y3 == float64(0) { + v5 = sbits & uint64(0x8000000000000000) + y3 = *(*float64)(unsafe.Pointer(&v5)) + } + /* The underflow exception needs to be signaled explicitly. */ + y1 = float64(2.2250738585072014e-308) + v6 = y1 + goto _7 + _7: + y2 = v6 * float64(2.2250738585072014e-308) + } + y3 = float64(2.2250738585072014e-308) * y3 + y = y3 + v8 = y + goto _9 +_9: + return v8 +} + +// C documentation +// +// /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|. +// The sign_bias argument is SIGN_BIAS or 0 and sets the sign to -1 or 1. */ +func _exp_inline(tls *TLS, x1 Tdouble_t, xtail Tdouble_t, sign_bias Tuint32_t) (r1 float64) { + var abstop Tuint32_t + var idx, ki, sbits, top, v6 Tuint64_t + var kd, one, r, r2, scale, tail, tmp, z, v1 Tdouble_t + var y, v2, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, one, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v3, v5, v6, v7 + abstop = _top124(tls, x1) & uint32(0x7ff) + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= _top124(tls, float64(512))-_top124(tls, float64(5.551115123125783e-17)) { + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + one = float64(1) + x1 + if sign_bias != 0 { + v1 = -one + } else { + v1 = one + } + return v1 + } + if abstop >= _top124(tls, float64(1024)) { + /* Note: inf and nan are already handled. */ + v2 = x1 + if *(*Tuint64_t)(unsafe.Pointer(&v2))>>int32(63) != 0 { + return X__math_uflow(tls, sign_bias) + } else { + return X__math_oflow(tls, sign_bias) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v3 = y + goto _4 +_4: + kd = v3 + v5 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v5)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* The code assumes 2^-200 < |xtail| < 2^-8/N. */ + r += xtail + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is +// the bit representation of a non-zero finite floating-point value. */ +func _checkint(tls *TLS, iy Tuint64_t) (r int32) { + var e int32 + _ = e + e = int32(iy >> int32(52) & uint64(0x7ff)) + if e < int32(0x3ff) { + return 0 + } + if e > Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return int32(2) + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)-uint64(1)) != 0 { + return 0 + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +// C documentation +// +// /* Returns 1 if input is the bit representation of 0, infinity or nan. */ +func _zeroinfnan(tls *TLS, i Tuint64_t) (r int32) { + var v1 float64 + _ = v1 + v1 = float64(X__builtin_inff(tls)) + return BoolInt32(uint64(2)*i-uint64(1) >= uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v1))-uint64(1)) +} + +func Xpow(tls *TLS, x1 float64, y1 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ehi, elo, hi, lhi, llo, x2, yhi, ylo Tdouble_t + var ix, iy, v16, v17 Tuint64_t + var sign_bias, topx, topy Tuint32_t + var y, v1, v10, v11, v12, v13, v14, v15, v18, v2, v3, v5, v6, v7, v8 float64 + var yint int32 + var v4 bool + var _ /* lo at bp+0 */ Tdouble_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ehi, elo, hi, ix, iy, lhi, llo, sign_bias, topx, topy, x2, y, yhi, yint, ylo, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v2, v3, v4, v5, v6, v7, v8 + sign_bias = uint32(0) + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint64_t)(unsafe.Pointer(&y1)) + topx = _top124(tls, x1) + topy = _top124(tls, y1) + if topx-uint32(0x001) >= uint32(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) || topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0 + and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */ + /* Special cases: (x < 0x1p-126 or inf or nan) or + (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */ + if _zeroinfnan(tls, iy) != 0 { + if uint64(2)*iy == uint64(0) { + return float64(1) + } + v1 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(1) + } + v2 = float64(X__builtin_inff(tls)) + if v4 = uint64(2)*ix > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v2)); !v4 { + v3 = float64(X__builtin_inff(tls)) + } + if v4 || uint64(2)*iy > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + return x1 + y1 + } + v5 = float64(1) + if uint64(2)*ix == uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v5)) { + return float64(1) + } + v6 = float64(1) + if BoolInt32(uint64(2)*ix < uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v6))) == BoolInt32(!(iy>>Int32FromInt32(63) != 0)) { + return float64(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan(tls, ix) != 0 { + x2 = x1 * x1 + if ix>>int32(63) != 0 && _checkint(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy>>int32(63) != 0 { + y = Float64FromInt32(1) / x2 + v8 = y + goto _9 + _9: + v7 = v8 + } else { + v7 = x2 + } + return v7 + } + /* Here x and y are non-zero finite. */ + if ix>>int32(63) != 0 { + /* Finite x < 0. */ + yint = _checkint(tls, iy) + if yint == 0 { + return X__math_invalid(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(0x800) << Int32FromInt32(EXP_TABLE_BITS)) + } + ix &= uint64(0x7fffffffffffffff) + topx &= uint32(0x7ff) + } + if topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: sign_bias == 0 here because y is not odd. */ + v10 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { + return float64(1) + } + if topy&uint32(0x7ff) < uint32(0x3be) { + /* |y| < 2^-65, x^y ~= 1 + y*log(x). */ + if int32(WANT_ROUNDING) != 0 { + v12 = float64(1) + if ix > *(*Tuint64_t)(unsafe.Pointer(&v12)) { + v11 = float64(1) + y1 + } else { + v11 = float64(1) - y1 + } + return v11 + } else { + return float64(1) + } + } + v14 = float64(1) + if BoolInt32(ix > *(*Tuint64_t)(unsafe.Pointer(&v14))) == BoolInt32(topy < uint32(0x800)) { + v13 = X__math_oflow(tls, uint32(0)) + } else { + v13 = X__math_uflow(tls, uint32(0)) + } + return v13 + } + if topx == uint32(0) { + /* Normalize subnormal x so exponent becomes negative. */ + v15 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v15)) + ix &= uint64(0x7fffffffffffffff) + ix -= Uint64FromUint64(52) << Int32FromInt32(52) + } + } + hi = _log_inline(tls, ix, bp) + v16 = iy & (-Uint64FromUint64(1) << Int32FromInt32(27)) + yhi = *(*float64)(unsafe.Pointer(&v16)) + ylo = y1 - yhi + v18 = hi + v17 = *(*Tuint64_t)(unsafe.Pointer(&v18)) & (-Uint64FromUint64(1) << Int32FromInt32(27)) + lhi = *(*float64)(unsafe.Pointer(&v17)) + llo = hi - lhi + *(*Tdouble_t)(unsafe.Pointer(bp)) + ehi = yhi * lhi + elo = ylo*lhi + y1*llo /* |elo| < |ehi| * 2^-25. */ + return _exp_inline(tls, ehi, elo, sign_bias) +} + +const N9 = 128 + +type Tpow_log_data = struct { + F__ccgo_align [0]uint32 + Fln2hi float64 + Fln2lo float64 + Fpoly [7]float64 + Ftab [128]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + } +} + +const OFF3 = 1060306944 +const POWF_LOG2_POLY_ORDER = 5 +const POWF_LOG2_TABLE_BITS = 4 +const POWF_SCALE_BITS = 0 +const SIGN_BIAS1 = 65536 + +/* +POWF_LOG2_POLY_ORDER = 5 +EXP2F_TABLE_BITS = 5 + +ULP error: 0.82 (~ 0.5 + relerr*2^24) +relerr: 1.27 * 2^-26 (Relative error ~= 128*Ln2*relerr_log2 + relerr_exp2) +relerr_log2: 1.83 * 2^-33 (Relative error of logx.) +relerr_exp2: 1.69 * 2^-34 (Relative error of exp2(ylogx).) +*/ + +// C documentation +// +// /* Subnormal input is normalized so ix has negative biased exponent. +// Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set. */ +func _log2_inline(tls *TLS, ix Tuint32_t) (r1 Tdouble_t) { + var i, k int32 + var invc, logc, p, q, r, r2, r4, y, y0, z Tdouble_t + var iz, tmp, top Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, iz, k, logc, p, q, r, r2, r4, tmp, top, y, y0, z + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF3) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(POWF_LOG2_TABLE_BITS)) % uint32(Int32FromInt32(1)<> (Int32FromInt32(23) - Int32FromInt32(POWF_SCALE_BITS)) /* arithmetic shift */ + invc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 1*8)) + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 2*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 3*8)) + r4 = r2 * r2 + q = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 4*8))*r + y0 + q = p*r2 + q + y = y*r4 + q + return y +} + +// C documentation +// +// /* The output of log2 and thus the input of exp2 is either scaled by N +// (in case of fast toint intrinsics) or not. The unscaled xd must be +// in [-1021,1023], sign_bias sets the sign of the result. */ +func _exp2_inline(tls *TLS, xd Tdouble_t, sign_bias Tuint32_t) (r1 float32) { + var kd, r, r2, s, y2, z Tdouble_t + var ki, ski, t Tuint64_t + var y, v4 float32 + var y1, v1, v3 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = kd, ki, r, r2, s, ski, t, y, y1, y2, z, v1, v3, v4 + /* x = k/N + r with r in [-1/(2N), 1/(2N)] */ + y1 = xd + X__exp2f_data.Fshift_scaled + v1 = y1 + goto _2 +_2: + kd = v1 + v3 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v3)) + kd -= X__exp2f_data.Fshift_scaled /* k/N */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)<> int32(23) & uint32(0xff)) + if e < int32(0x7f) { + return 0 + } + if e > Int32FromInt32(0x7f)+Int32FromInt32(23) { + return int32(2) + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)-Int32FromInt32(1)) != 0 { + return 0 + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +func _zeroinfnan1(tls *TLS, ix Tuint32_t) (r int32) { + return BoolInt32(uint32(2)*ix-uint32(1) >= Uint32FromUint32(2)*Uint32FromInt32(0x7f800000)-Uint32FromInt32(1)) +} + +func Xpowf(tls *TLS, x1 float32, y1 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix, iy, sign_bias Tuint32_t + var logx, ylogx Tdouble_t + var x2 Tfloat_t + var y, v1, v2, v4 float32 + var yint int32 + var v5, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, iy, logx, sign_bias, x2, y, yint, ylogx, v1, v2, v4, v5, v6 + sign_bias = uint32(0) + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) || _zeroinfnan1(tls, iy) != 0 { + /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */ + if _zeroinfnan1(tls, iy) != 0 { + if uint32(2)*iy == uint32(0) { + return Float32FromFloat32(1) + } + if ix == uint32(0x3f800000) { + return Float32FromFloat32(1) + } + if uint32(2)*ix > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) || uint32(2)*iy > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) { + return x1 + y1 + } + if uint32(2)*ix == uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000)) { + return Float32FromFloat32(1) + } + if BoolInt32(uint32(2)*ix < uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000))) == BoolInt32(!(iy&Uint32FromUint32(0x80000000) != 0)) { + return Float32FromFloat32(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan1(tls, ix) != 0 { + x2 = x1 * x1 + if ix&uint32(0x80000000) != 0 && _checkint1(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy&uint32(0x80000000) != 0 { + y = Float32FromInt32(1) / x2 + v2 = y + goto _3 + _3: + v1 = v2 + } else { + v1 = x2 + } + return v1 + } + /* x and y are non-zero finite. */ + if ix&uint32(0x80000000) != 0 { + /* Finite x < 0. */ + yint = _checkint1(tls, iy) + if yint == 0 { + return X__math_invalidf(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(1) << (Int32FromInt32(EXP2F_TABLE_BITS) + Int32FromInt32(11))) + } + ix &= uint32(0x7fffffff) + } + if ix < uint32(0x00800000) { + /* Normalize subnormal x so exponent becomes negative. */ + v4 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v4)) + ix &= uint32(0x7fffffff) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + } + logx = _log2_inline(tls, ix) + ylogx = float64(y1) * logx /* cannot overflow, y is single prec. */ + v5 = ylogx + v6 = float64(126) * float64(Int32FromInt32(1)<>int32(47)&uint64(0xffff) >= *(*Tuint64_t)(unsafe.Pointer(&v6))>>int32(47) { + /* |y*log(x)| >= 126. */ + if ylogx > float64(127.99999995700433)*float64(Int32FromInt32(1)< %v", r) }() + } + return Xpow(tls, x, y) +} + +func Xremainder(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquo(tls, x, y, bp) +} + +func Xdrem(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremainderf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquof(tls, x, y, bp) +} + +func Xdremf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainderf(tls, x, y) +} + +func Xremainderl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremquo(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx, sy, v8 int32 + var i, uxi Tuint64_t + var q Tuint32_t + var v1 uint64 + var v3 bool + var v9 float64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + sy = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(63)) + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi &= -Uint64FromUint64(1) >> Int32FromInt32(12) + uxi |= Uint64FromUint64(1) << Int32FromInt32(52) + } + if !(ey != 0) { + i = *(*Tuint64_t)(unsafe.Pointer(bp + 16)) << int32(12) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) &= -Uint64FromUint64(1) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) |= Uint64FromUint64(1) << Int32FromInt32(52) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + uxi <<= uint64(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + if uxi == uint64(0) { + ex = -int32(60) + } else { + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint64(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint64FromUint64(1) << Int32FromInt32(52) + uxi |= uint64(ex) << int32(52) + } else { + uxi >>= uint64(-ex + int32(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + x = *(*float64)(unsafe.Pointer(bp + 8)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float64FromInt32(2)*x > y || Float64FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquof(tls *TLS, x float32, y float32, quo uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey, sx, sy, v8 int32 + var i, q, uxi Tuint32_t + var v1 uint32 + var v3 bool + var v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(31)) + sy = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(31)) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + uxi <<= uint32(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + if uxi == uint32(0) { + ex = -int32(30) + } else { + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + x = *(*float32)(unsafe.Pointer(bp + 4)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float32FromInt32(2)*x > y || Float32FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquol(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremquo(tls, x, y, quo) +} + +const DBL_EPSILON11 = 2.220446049250313e-16 + +var _toint4 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xrint(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tdouble_t + var v1 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x + } + if s != 0 { + y = x - _toint4 + _toint4 + } else { + y = x + _toint4 - _toint4 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(0) + } + return v1 + } + return y +} + +const DBL_EPSILON12 = 0 +const FLT_EPSILON1 = 1.1920928955078125e-07 + +var _toint5 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xrintf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tfloat_t + var v1 float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + s = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x + } + if s != 0 { + y = x - _toint5 + _toint5 + } else { + y = x + _toint5 - _toint5 + } + if y == Float32FromInt32(0) { + if s != 0 { + v1 = -Float32FromFloat32(0) + } else { + v1 = Float32FromFloat32(0) + } + return v1 + } + return y +} + +const FLT_EPSILON2 = 0 + +func Xrintl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrint(tls, x) +} + +const DBL_EPSILON13 = 2.220446049250313e-16 + +var _toint6 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xround(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x3 + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x3ff)-Int32FromInt32(1) { + /* raise inexact if x!=0 */ + if uint32(8) == uint32(4) { + y = float32(x3 + _toint6) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + _toint6 + } else { + y2 = float64(x3 + _toint6) + } + } + return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint6 - _toint6 - x3 + if y3 > float64(0.5) { + y3 = y3 + x3 - Float64FromInt32(1) + } else { + if y3 <= -Float64FromFloat64(0.5) { + y3 = y3 + x3 + Float64FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = -y3 + } + return y3 +} + +const DBL_EPSILON14 = 0 +const FLT_EPSILON3 = 1.1920928955078125e-07 + +var _toint7 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xroundf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x7f)-Int32FromInt32(1) { + if uint32(4) == uint32(4) { + y = x3 + _toint7 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + _toint7) + } else { + y2 = float64(x3 + _toint7) + } + } + return Float32FromInt32(0) * *(*float32)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint7 - _toint7 - x3 + if y3 > Float32FromFloat32(0.5) { + y3 = y3 + x3 - Float32FromInt32(1) + } else { + if y3 <= -Float32FromFloat32(0.5) { + y3 = y3 + x3 + Float32FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + y3 = -y3 + } + return y3 +} + +const FLT_EPSILON4 = 0 + +func Xroundl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xround(tls, x) +} + +func Xscalb(tls *TLS, x float64, fn float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< float64(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrint(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > float64(65000) { + return Xscalbn(tls, x, int32(65000)) + } + if -fn > float64(65000) { + return Xscalbn(tls, x, -int32(65000)) + } + return Xscalbn(tls, x, int32(fn)) +} + +func Xscalbf(tls *TLS, x float32, fn float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = fn + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x * fn + } + *(*float32)(unsafe.Pointer(bp)) = fn + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 +_7: + if !(BoolInt32(v6&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if fn > Float32FromFloat32(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrintf(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, int32(65000)) + } + if -fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, -int32(65000)) + } + return Xscalbnf(tls, x, int32(fn)) +} + +func Xscalbln(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int32(INT_MAX) { + n = int32(INT_MAX) + } else { + if n < int32(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int32(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbn(tls, x, n) +} + +func Xscalblnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int32(INT_MAX) { + n = int32(INT_MAX) + } else { + if n < int32(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int32(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbnf(tls, x, n) +} + +func Xscalblnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbln(tls, x, n) +} + +func Xscalbn(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tdouble_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = x + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + n = int32(1023) + } + } + } else { + if n < -int32(1022) { + /* make sure final n < -53 to avoid double + rounding in the subnormal range */ + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + n = -int32(1022) + } + } + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(Int32FromInt32(0x3ff)+n) << int32(52) + x = y * *(*float64)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = x + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + n = int32(127) + } + } + } else { + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + n = -int32(126) + } + } + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(Int32FromInt32(0x7f)+n) << int32(23) + x = y * *(*float32)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xsignificand(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, -Xilogb(tls, x)) +} + +func Xsignificandf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, -Xilogbf(tls, x)) +} + +func Xsin(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + /* High word of x. */ + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e500000) { /* |x| < 2**-26 */ + /* raise inexact if x != 0 and underflow if subnormal*/ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__sin(tls, x3, float64(0), 0) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(1): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(2): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + default: + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + } + return r +} + +func Xsincos(tls *TLS, x3 float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s, y1, y2, v1, v2, v3, v4 float64 + var ix Tuint32_t + var n uint32 + var y float32 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, y, y1, y2, v1, v2, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + /* if |x| < 2**-27 * sqrt(2) */ + if ix < uint32(0x3e46a09e) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + *(*float64)(unsafe.Pointer(sin)) = x3 + *(*float64)(unsafe.Pointer(cos)) = float64(1) + return + } + *(*float64)(unsafe.Pointer(sin)) = X__sin(tls, x3, float64(0), 0) + *(*float64)(unsafe.Pointer(cos)) = X__cos(tls, x3, float64(0)) + return + } + /* sincos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + v4 = x3 - x3 + *(*float64)(unsafe.Pointer(cos)) = v4 + *(*float64)(unsafe.Pointer(sin)) = v4 + return + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + s = X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + c = X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float64)(unsafe.Pointer(sin)) = s + *(*float64)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float64)(unsafe.Pointer(sin)) = c + *(*float64)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float64)(unsafe.Pointer(sin)) = -s + *(*float64)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float64)(unsafe.Pointer(sin)) = -c + *(*float64)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_25 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsincosf(tls *TLS, x3 float32, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s Tfloat_t + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3, v8 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + /* |x| ~<= pi/4 */ + if ix <= uint32(0x3f490fda) { + /* |x| < 2**-12 */ + if ix < uint32(0x39800000) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + *(*float32)(unsafe.Pointer(sin)) = x3 + *(*float32)(unsafe.Pointer(cos)) = Float32FromFloat32(1) + return + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, float64(x3)) + return + } + /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x407b53d1) { + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)+_s1pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)+_s1pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, _s1pio2-float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, _s1pio2-float64(x3)) + } + return + } + /* -sin(x+c) is not correct if x+c could be 0: -0 vs +0 */ + if sign != 0 { + v4 = float64(x3) + _s2pio2 + } else { + v4 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(sin)) = -X__sindf(tls, v4) + if sign != 0 { + v5 = float64(x3) + _s2pio2 + } else { + v5 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(cos)) = -X__cosdf(tls, v5) + return + } + /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40e231d5) { + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, float64(x3)+_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = -X__sindf(tls, float64(x3)+_s3pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)-_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)-_s3pio2) + } + return + } + if sign != 0 { + v6 = float64(x3) + _s4pio2 + } else { + v6 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, v6) + if sign != 0 { + v7 = float64(x3) + _s4pio2 + } else { + v7 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, v7) + return + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + v8 = x3 - x3 + *(*float32)(unsafe.Pointer(cos)) = v8 + *(*float32)(unsafe.Pointer(sin)) = v8 + return + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + s = X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + c = X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float32)(unsafe.Pointer(sin)) = s + *(*float32)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float32)(unsafe.Pointer(sin)) = c + *(*float32)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float32)(unsafe.Pointer(sin)) = -s + *(*float32)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float32)(unsafe.Pointer(sin)) = -c + *(*float32)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_26 = 0 + +func Xsincosl(tls *TLS, x float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v sin=%v cos=%v, (%v:)", tls, x, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cosd at bp+8 */ float64 + var _ /* sind at bp+0 */ float64 + Xsincos(tls, x, bp, bp+8) + *(*float64)(unsafe.Pointer(sin)) = *(*float64)(unsafe.Pointer(bp)) + *(*float64)(unsafe.Pointer(cos)) = *(*float64)(unsafe.Pointer(bp + 8)) +} + +const M_PI_27 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio21 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio21 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio21 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio21 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsinf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign int32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__sindf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + return -X__cosdf(tls, float64(x3)+_s1pio21) + } else { + return X__cosdf(tls, float64(x3)-_s1pio21) + } + } + if sign != 0 { + v4 = -(float64(x3) + _s2pio21) + } else { + v4 = -(float64(x3) - _s2pio21) + } + return X__sindf(tls, v4) + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + return X__cosdf(tls, float64(x3)+_s3pio21) + } else { + return -X__cosdf(tls, float64(x3)-_s3pio21) + } + } + if sign != 0 { + v5 = float64(x3) + _s4pio21 + } else { + v5 = float64(x3) - _s4pio21 + } + return X__sindf(tls, v5) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = X__rem_pio2f(tls, x3, bp) + switch n & Int32FromInt32(3) { + case 0: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(1): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(2): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + default: + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_28 = 0 + +// C documentation +// +// /* sinh(x) = (exp(x) - 1/exp(x))/2 +// * = (exp(x)-1 + (exp(x)-1)/exp(x))/2 +// * = x + x^3/6 + o(x^5) +// */ +func Xsinh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float64 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = absx, h, t, w + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + h = float64(0.5) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + h = -h + } + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + absx = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(DBL_MAX) */ + if w < uint32(0x40862e42) { + t = Xexpm1(tls, absx) + if w < uint32(0x3ff00000) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26)+eps could be just h*exp(x) */ + return h * (t + t/(t+Float64FromInt32(1))) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, absx, Float64FromInt32(2)*h) + return t +} + +func Xsinhf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float32 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + h = float32(0.5) + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + h = -h + } + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + absx = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(FLT_MAX) */ + if w < uint32(0x42b17217) { + t = Xexpm1f(tls, absx) + if w < uint32(0x3f800000) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< logf(FLT_MAX) or nan */ + t = X__expo2f(tls, absx, Float32FromInt32(2)*h) + return t +} + +func Xsinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsinh(tls, x) +} + +func Xsinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsin(tls, x) +} + +const FENV_SUPPORT = 1 + +// C documentation +// +// /* returns a*b*2^-32 - e, with error 0 <= e < 1. */ +func _mul32(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +// C documentation +// +// /* returns a*b*2^-64 - e, with error 0 <= e < 3. */ +func _mul64(tls *TLS, a Tuint64_t, b Tuint64_t) (r Tuint64_t) { + var ahi, alo, bhi, blo Tuint64_t + _, _, _, _ = ahi, alo, bhi, blo + ahi = a >> int32(32) + alo = a & uint64(0xffffffff) + bhi = b >> int32(32) + blo = b & uint64(0xffffffff) + return ahi*bhi + ahi*blo>>int32(32) + alo*bhi>>int32(32) +} + +func Xsqrt(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, i, ix, m, r, s, tiny, top, u Tuint64_t + var even int32 + var t, y, y1, v1, v3 float64 + var v2 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, i, ix, m, r, s, t, tiny, top, u, y, y1, v1, v2, v3 + /* special case handling. */ + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = ix >> int32(52) + if top-uint64(0x001) >= uint64(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return x1 + } + if ix == uint64(0x7ff0000000000000) { + return x1 + } + if ix > uint64(0x7ff0000000000000) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + top = ix >> int32(52) + top -= uint64(52) + } + /* argument reduction: + x = 4^e m; with integer e, and m in [1, 4) + m: fixed point representation [2.62] + 2^e is the exponent part of the result. */ + even = int32(top & uint64(1)) + m = ix<>= uint64(1) + } + top = (top + uint64(0x3ff)) >> int32(1) + i = ix >> Int32FromInt32(46) % uint64(128) + r = uint64(uint32(X__rsqrt_tab[i]) << int32(16)) + /* |r sqrt(m) - 1| < 0x1.fdp-9 */ + s = uint64(_mul32(tls, uint32(m>>int32(32)), uint32(r))) + /* |s/sqrt(m) - 1| < 0x1.fdp-9 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.7bp-16 */ + s = uint64(_mul32(tls, uint32(s), uint32(u)) << int32(1)) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.3704p-29 (measured worst-case) */ + r = r << int32(32) + s = _mul64(tls, m, r) + d = _mul64(tls, s, r) + u = _three<> int32(9) + d0 = m<> int32(63) + s &= uint64(0x000fffffffffffff) + s |= top << int32(52) + y1 = *(*float64)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint64(0) { + v2 = 0 + } else { + v2 = int64(0x0010000000000000) + } + /* handle rounding modes and inexact exception: + only (s+1)^2 == 2^42 m case is exact otherwise + add a tiny value to cause the fenv effects. */ + tiny = uint64(v2) + tiny |= (d1 ^ d2) & uint64(0x8000000000000000) + t = *(*float64)(unsafe.Pointer(&tiny)) + y = y1 + t + v3 = y + goto _4 + _4: + y1 = v3 + } + return y1 +} + +/* approximate r ~ 1/sqrt(m) and s ~ sqrt(m) when m in [1,4) + + initial estimate: + 7bit table lookup (1bit exponent and 6bit significand). + + iterative approximation: + using 2 goldschmidt iterations with 32bit int arithmetics + and a final iteration with 64bit int arithmetics. + + details: + + the relative error (e = r0 sqrt(m)-1) of a linear estimate + (r0 = a m + b) is |e| < 0.085955 ~ 0x1.6p-4 at best, + a table lookup is faster and needs one less iteration + 6 bit lookup table (128b) gives |e| < 0x1.f9p-8 + 7 bit lookup table (256b) gives |e| < 0x1.fdp-9 + for single and double prec 6bit is enough but for quad + prec 7bit is needed (or modified iterations). to avoid + one more iteration >=13bit table would be needed (16k). + + a newton-raphson iteration for r is + w = r*r + u = 3 - m*w + r = r*u/2 + can use a goldschmidt iteration for s at the end or + s = m*r + + first goldschmidt iteration is + s = m*r + u = 3 - s*r + r = r*u/2 + s = s*u/2 + next goldschmidt iteration is + u = 3 - s*r + r = r*u/2 + s = s*u/2 + and at the end r is not computed only s. + + they use the same amount of operations and converge at the + same quadratic rate, i.e. if + r1 sqrt(m) - 1 = e, then + r2 sqrt(m) - 1 = -3/2 e^2 - 1/2 e^3 + the advantage of goldschmidt is that the mul for s and r + are independent (computed in parallel), however it is not + "self synchronizing": it only uses the input m in the + first iteration so rounding errors accumulate. at the end + or when switching to larger precision arithmetics rounding + errors dominate so the first iteration should be used. + + the fixed point representations are + m: 2.30 r: 0.32, s: 2.30, d: 2.30, u: 2.30, three: 2.30 + and after switching to 64 bit + m: 2.62 r: 0.64, s: 2.62, d: 2.62, u: 2.62, three: 2.62 */ + +var _three = uint64(0xc0000000) + +func _mul321(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +/* see sqrt.c for more detailed comments. */ + +func Xsqrtf(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, tiny, u Tuint32_t + var t, y, y1, v1, v4 float32 + var v2 uint32 + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, t, tiny, u, y, y1, v1, v2, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return x1 + } + if ix == uint32(0x7f800000) { + return x1 + } + if ix > uint32(0x7f800000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 4^e m; with int e and m in [1, 4). */ + even = ix & uint32(0x00800000) + m1 = ix<> int32(1) + ey += uint32(Int32FromInt32(0x3f800000) >> Int32FromInt32(1)) + ey &= uint32(0x7f800000) + i = ix >> Int32FromInt32(17) % uint32(128) + r = uint32(X__rsqrt_tab[i]) << int32(16) + /* |r*sqrt(m) - 1| < 0x1p-8 */ + s = _mul321(tls, m, r) + /* |s/sqrt(m) - 1| < 0x1p-8 */ + d = _mul321(tls, s, r) + u = _three1 - d + r = _mul321(tls, r, u) << int32(1) + /* |r*sqrt(m) - 1| < 0x1.7bp-16 */ + s = _mul321(tls, s, u) << int32(1) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = _mul321(tls, s, r) + u = _three1 - d + s = _mul321(tls, s, u) + /* -0x1.03p-28 < s/sqrt(m) - 1 < 0x1.fp-31 */ + s = (s - uint32(1)) >> int32(6) + d0 = m<> int32(31) + s &= uint32(0x007fffff) + s |= ey + y1 = *(*float32)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint32(0) { + v3 = 0 + } else { + v3 = int32(0x01000000) + } + /* handle rounding and inexact exception. */ + tiny = uint32(v3) + tiny |= (d1 ^ d2) & uint32(0x80000000) + t = *(*float32)(unsafe.Pointer(&tiny)) + y = y1 + t + v4 = y + goto _5 + _5: + y1 = v4 + } + return y1 +} + +/* compute r ~ 1/sqrt(m), s ~ sqrt(m) with 2 goldschmidt iterations. */ +var _three1 = uint32(0xc0000000) + +func Xsqrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsqrt(tls, x) +} + +func Xtan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e400000) { /* |x| < 2**-27 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(8) == uint32(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint32(8) == uint32(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__tan(tls, x3, float64(0), 0) + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + return X__tan(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(n&uint32(1))) +} + +const M_PI_29 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _t1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _t2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _t3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _t4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xtanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint32(4) == uint32(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint32(4) == uint32(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__tandf(tls, float64(x3), 0) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + v4 = float64(x3) + _t1pio2 + } else { + v4 = float64(x3) - _t1pio2 + } + return X__tandf(tls, v4, int32(1)) + } else { + if sign != 0 { + v5 = float64(x3) + _t2pio2 + } else { + v5 = float64(x3) - _t2pio2 + } + return X__tandf(tls, v5, 0) + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + v6 = float64(x3) + _t3pio2 + } else { + v6 = float64(x3) - _t3pio2 + } + return X__tandf(tls, v6, int32(1)) + } else { + if sign != 0 { + v7 = float64(x3) + _t4pio2 + } else { + v7 = float64(x3) - _t4pio2 + } + return X__tandf(tls, v7, 0) + } + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + return X__tandf(tls, *(*float64)(unsafe.Pointer(bp)), int32(n&uint32(1))) +} + +const M_PI_210 = 0 + +// C documentation +// +// /* tanh(x) = (exp(x) - exp(-x))/(exp(x) + exp(-x)) +// * = (exp(2*x) - 1)/(exp(2*x) - 1 + 2) +// * = (1 - exp(-2*x))/(exp(-2*x) - 1 + 2) +// */ +func Xtanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, v1 Tdouble_t + var w Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + if w > uint32(0x3fe193ea) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x40340000) { + /* |x| > 20 or nan */ + /* note: this branch avoids raising overflow */ + t = Float64FromInt32(1) - Float64FromInt32(0)/x3 + } else { + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = Float64FromInt32(1) - Float64FromInt32(2)/(t+Float64FromInt32(2)) + } + } else { + if w > uint32(0x3fd058ae) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = t / (t + Float64FromInt32(2)) + } else { + if w >= uint32(0x00100000) { + /* |x| >= 0x1p-1022, up to 2ulp error in [0.1,0.2554] */ + t = Xexpm1(tls, float64(-Int32FromInt32(2))*x3) + t = -t / (t + Float64FromInt32(2)) + } else { + /* |x| is subnormal */ + /* note: the branch above would not raise underflow in [0x1p-1023,0x1p-1022) */ + if uint32(4) == uint32(4) { + y = float32(x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, y, v1 float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + if w > uint32(0x3f0c9f54) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x41200000) { + /* |x| > 10 */ + t = Float32FromInt32(1) + Float32FromInt32(0)/x3 + } else { + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = Float32FromInt32(1) - Float32FromInt32(2)/(t+Float32FromInt32(2)) + } + } else { + if w > uint32(0x3e82c578) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = t / (t + Float32FromInt32(2)) + } else { + if w >= uint32(0x00800000) { + /* |x| >= 0x1p-126 */ + t = Xexpm1f(tls, float32(-Int32FromInt32(2))*x3) + t = -t / (t + Float32FromInt32(2)) + } else { + /* |x| is subnormal */ + if uint32(4) == uint32(4) { + y = x3 * x3 + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtanh(tls, x) +} + +func Xtanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtan(tls, x) +} + +const N10 = 12 + +var _pi4 = float64(3.141592653589793) + +// C documentation +// +// /* sin(pi x) with x > 0x1p-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sinpi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* argument reduction: x = |x| mod 2 */ + /* spurious inexact when x is odd int */ + x = x * float64(0.5) + x = Float64FromInt32(2) * (x - Xfloor(tls, x)) + /* reduce x into [-.25,.25] */ + n = int32(Float64FromInt32(4) * x) + n = (n + int32(1)) / int32(2) + x -= float64(n) * float64(0.5) + x *= _pi4 + switch n { + default: /* case 4 */ + fallthrough + case 0: + return X__sin(tls, x, Float64FromInt32(0), 0) + case int32(1): + return X__cos(tls, x, Float64FromInt32(0)) + case int32(2): + return X__sin(tls, -x, Float64FromInt32(0), 0) + case int32(3): + return -X__cos(tls, x, Float64FromInt32(0)) + } + return r +} + +// C documentation +// +// //static const double g = 6.024680040776729583740234375; +var _gmhalf = float64(5.52468004077673) +var _Snum = [13]float64{ + 0: float64(2.353137688041076e+10), + 1: float64(4.29198036426491e+10), + 2: float64(3.571195923735567e+10), + 3: float64(1.792103442603721e+10), + 4: float64(6.039542586352028e+09), + 5: float64(1.4397204073117216e+09), + 6: float64(2.4887455786205417e+08), + 7: float64(3.1426415585400194e+07), + 8: float64(2.8763706289353725e+06), + 9: float64(186056.26539522348), + 10: float64(8071.672002365816), + 11: float64(210.82427775157936), + 12: float64(2.5066282746310002), +} +var _Sden = [13]float64{ + 1: Float64FromInt32(39916800), + 2: Float64FromInt32(120543840), + 3: Float64FromInt32(150917976), + 4: Float64FromInt32(105258076), + 5: Float64FromInt32(45995730), + 6: Float64FromInt32(13339535), + 7: Float64FromInt32(2637558), + 8: Float64FromInt32(357423), + 9: Float64FromInt32(32670), + 10: Float64FromInt32(1925), + 11: Float64FromInt32(66), + 12: Float64FromInt32(1), +} + +// C documentation +// +// /* n! for small integer n */ +var _fact = [23]float64{ + 0: Float64FromInt32(1), + 1: Float64FromInt32(1), + 2: Float64FromInt32(2), + 3: Float64FromInt32(6), + 4: Float64FromInt32(24), + 5: Float64FromInt32(120), + 6: Float64FromInt32(720), + 7: float64(5040), + 8: float64(40320), + 9: float64(362880), + 10: float64(3.6288e+06), + 11: float64(3.99168e+07), + 12: float64(4.790016e+08), + 13: float64(6.2270208e+09), + 14: float64(8.71782912e+10), + 15: float64(1.307674368e+12), + 16: float64(2.0922789888e+13), + 17: float64(3.55687428096e+14), + 18: float64(6.402373705728e+15), + 19: float64(1.21645100408832e+17), + 20: float64(2.43290200817664e+18), + 21: float64(5.109094217170944e+19), + 22: float64(1.1240007277776077e+21), +} + +// C documentation +// +// /* S(x) rational function for positive x */ +func _S(tls *TLS, x float64) (r float64) { + var den, num Tdouble_t + var i int32 + _, _, _ = den, i, num + num = Float64FromInt32(0) + den = Float64FromInt32(0) + /* to avoid overflow handle large x differently */ + if x < Float64FromInt32(8) { + i = int32(N10) + for { + if !(i >= 0) { + break + } + num = num*x + _Snum[i] + den = den*x + _Sden[i] + goto _1 + _1: + ; + i-- + } + } else { + i = 0 + for { + if !(i <= int32(N10)) { + break + } + num = num/x + _Snum[i] + den = den/x + _Sden[i] + goto _2 + _2: + ; + i++ + } + } + return num / den +} + +func Xtgamma(tls *TLS, x3 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, y1, y2, y3, v1 float64 + var dy, r, z Tdouble_t + var ix Tuint32_t + var sign int32 + var y float32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = absx, dy, ix, r, sign, y, y1, y2, y3, z, v1 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* special cases */ + if ix >= uint32(0x7ff00000) { + /* tgamma(nan)=nan, tgamma(inf)=inf, tgamma(-inf)=nan with invalid */ + return x3 + float64(X__builtin_inff(tls)) + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(54))<= 172: tgamma(x)=inf with overflow */ + /* x =< -184: tgamma(x)=+-0 with underflow */ + if ix >= uint32(0x40670000) { /* |x| >= 184 */ + if sign != 0 { + if uint32(4) == uint32(4) { + y = float32(Float64FromFloat64(1.1754943508222875e-38) / x3) + } else { + if uint32(4) == uint32(8) { + y1 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } else { + y2 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } + } + if Xfloor(tls, x3)*float64(0.5) == Xfloor(tls, x3*float64(0.5)) { + return Float64FromInt32(0) + } + return -Float64FromFloat64(0) + } + x3 *= float64(8.98846567431158e+307) + return x3 + } + if sign != 0 { + v1 = -x3 + } else { + v1 = x3 + } + absx = v1 + /* handle the error of x + g - 0.5 */ + y3 = absx + _gmhalf + if absx > _gmhalf { + dy = y3 - absx + dy -= _gmhalf + } else { + dy = y3 - _gmhalf + dy -= absx + } + z = absx - float64(0.5) + r = _S(tls, absx) * Xexp(tls, -y3) + if x3 < Float64FromInt32(0) { + /* reflection formula for negative x */ + /* sinpi(absx) is not 0, integers are already handled */ + r = -_pi4 / (_sinpi(tls, absx) * absx * r) + dy = -dy + z = -z + } + r += dy * (_gmhalf + Float64FromFloat64(0.5)) * r / y3 + z = Xpow(tls, y3, float64(0.5)*z) + y3 = r * z * z + return y3 +} + +func Xtgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(Xtgamma(tls, float64(x))) +} + +func Xtgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtgamma(tls, x) +} + +func Xtrunc(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + int32(12) + if e >= Int32FromInt32(52)+Int32FromInt32(12) { + return x3 + } + if e < int32(12) { + e = int32(1) + } + m = -Uint64FromUint64(1) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { + return x3 + } + if uint32(8) == uint32(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint32(8) == uint32(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xtruncf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + int32(9) + if e >= Int32FromInt32(23)+Int32FromInt32(9) { + return x3 + } + if e < int32(9) { + e = int32(1) + } + m = -Uint32FromUint32(1) >> e + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint32(4) == uint32(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint32(4) == uint32(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xtruncl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtrunc(tls, x) +} + +var _digits = [65]uint8{'.', '/', '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', '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'} + +func Xa64l(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var e int32 + var x Tuint32_t + _, _, _ = d, e, x + x = uint32(0) + e = 0 + for { + if !(e < int32(36) && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + d = Xstrchr(tls, uintptr(unsafe.Pointer(&_digits)), int32(*(*uint8)(unsafe.Pointer(s)))) + if !(d != 0) { + break + } + x |= uint32(int32(d)-t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_digits)))) << e + goto _1 + _1: + ; + e += int32(6) + s++ + } + return int32(x) +} + +func Xl64a(tls *TLS, x0 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x0=%v, (%v:)", tls, x0, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var x Tuint32_t + _, _ = p, x + x = uint32(x0) + p = uintptr(unsafe.Pointer(&_s)) + for { + if !(x != 0) { + break + } + *(*uint8)(unsafe.Pointer(p)) = _digits[x&uint32(63)] + goto _1 + _1: + ; + p++ + x >>= uint32(6) + } + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return uintptr(unsafe.Pointer(&_s)) +} + +var _s [7]uint8 + +func Xbasename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 483 + } + i = Xstrlen(tls, s) - uint32(1) + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + goto _1 + _1: + ; + i-- + } + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint32(1))))) != int32('/')) { + break + } + goto _2 + _2: + ; + i-- + } + return s + uintptr(i) +} + +func X__xpg_basename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xbasename(tls, s) +} + +func Xdirname(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 483 + } + i = Xstrlen(tls, s) - uint32(1) + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 491 + } + goto _1 + _1: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) != int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 483 + } + goto _2 + _2: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 491 + } + goto _3 + _3: + ; + i-- + } + *(*uint8)(unsafe.Pointer(s + uintptr(i+uint32(1)))) = uint8(0) + return s +} + +func Xffs(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v6 int32 + var v2 uint32 + var v5 Tuint32_t + _, _, _, _, _ = v1, v2, v3, v5, v6 + if i != 0 { + v2 = uint32(i) + v5 = v2 + v6 = int32(31) - _a_clz_32(tls, v5&-v5) + goto _7 + _7: + v3 = v6 + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsl(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v6 int32 + var v2 uint32 + var v5 Tuint32_t + _, _, _, _, _ = v1, v2, v3, v5, v6 + if i != 0 { + v2 = uint32(i) + v5 = v2 + v6 = int32(31) - _a_clz_32(tls, v5&-v5) + goto _7 + _7: + v3 = v6 + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsll(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v5, v8 Tuint32_t + var v1, v3, v6, v9 int32 + var v2 Tuint64_t + _, _, _, _, _, _, _, _ = y, v1, v2, v3, v5, v6, v8, v9 + if i != 0 { + v2 = uint64(i) + if Uint32FromInt64(4) < Uint32FromInt32(8) { + y = uint32(v2) + if !(y != 0) { + y = uint32(v2 >> int32(32)) + v5 = y + v6 = int32(31) - _a_clz_32(tls, v5&-v5) + goto _7 + _7: + v3 = int32(32) + v6 + goto _4 + } + v8 = y + v9 = int32(31) - _a_clz_32(tls, v8&-v8) + goto _10 + _10: + v3 = v9 + goto _4 + } + v3 = int32(_debruijn64[v2&-v2*uint64(0x022fdd63cc95386d)>>int32(58)]) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +var _debruijn64 = [64]uint8{ + 1: uint8(1), + 2: uint8(2), + 3: uint8(53), + 4: uint8(3), + 5: uint8(7), + 6: uint8(54), + 7: uint8(27), + 8: uint8(4), + 9: uint8(38), + 10: uint8(41), + 11: uint8(8), + 12: uint8(34), + 13: uint8(55), + 14: uint8(48), + 15: uint8(28), + 16: uint8(62), + 17: uint8(5), + 18: uint8(39), + 19: uint8(46), + 20: uint8(44), + 21: uint8(42), + 22: uint8(22), + 23: uint8(9), + 24: uint8(24), + 25: uint8(35), + 26: uint8(59), + 27: uint8(56), + 28: uint8(49), + 29: uint8(18), + 30: uint8(29), + 31: uint8(11), + 32: uint8(63), + 33: uint8(52), + 34: uint8(6), + 35: uint8(26), + 36: uint8(37), + 37: uint8(40), + 38: uint8(33), + 39: uint8(47), + 40: uint8(61), + 41: uint8(45), + 42: uint8(43), + 43: uint8(21), + 44: uint8(23), + 45: uint8(58), + 46: uint8(17), + 47: uint8(10), + 48: uint8(51), + 49: uint8(25), + 50: uint8(36), + 51: uint8(32), + 52: uint8(60), + 53: uint8(20), + 54: uint8(57), + 55: uint8(16), + 56: uint8(50), + 57: uint8(31), + 58: uint8(19), + 59: uint8(15), + 60: uint8(30), + 61: uint8(14), + 62: uint8(13), + 63: uint8(12), +} + +const MM_APPL = 8 +const MM_CONSOLE = 512 +const MM_ERROR = 2 +const MM_FIRM = 4 +const MM_HALT = 1 +const MM_HARD = 1 +const MM_INFO = 4 +const MM_NOCON = 4 +const MM_NOMSG = 1 +const MM_NOSEV = 0 +const MM_NOTOK = -1 +const MM_NRECOV = 128 +const MM_NULLMC = 0 +const MM_NULLSEV = 0 +const MM_OK = 0 +const MM_OPSYS = 32 +const MM_PRINT = 256 +const MM_RECOVER = 64 +const MM_SOFT = 2 +const MM_UTIL = 16 +const MM_WARNING = 3 + +// C documentation +// +// /* +// * If lstr is the first part of bstr, check that the next char in bstr +// * is either \0 or : +// */ +func __strcolcmp(tls *TLS, lstr uintptr, bstr uintptr) (r int32) { + var i Tsize_t + _ = i + i = uint32(0) + for *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 && *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(lstr + uintptr(i)))) { + i++ + } + if *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 || *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) != int32(':') { + return int32(1) + } + return 0 +} + +func Xfmtmsg(tls *TLS, classification int32, label uintptr, severity int32, text uintptr, action uintptr, tag uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v classification=%v label=%v severity=%v text=%v action=%v tag=%v, (%v:)", tls, classification, label, severity, text, action, tag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var cmsg, errstring, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 uintptr + var consolefd, i, ret, verb int32 + var msgs [6]uintptr + var _ /* cs at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cmsg, consolefd, errstring, i, msgs, ret, verb, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + ret = 0 + verb = 0 + errstring = uintptr(MM_NULLSEV) + cmsg = Xgetenv(tls, __ccgo_ts+493) + msgs = [6]uintptr{ + 0: __ccgo_ts + 501, + 1: __ccgo_ts + 507, + 2: __ccgo_ts + 516, + 3: __ccgo_ts + 521, + 4: __ccgo_ts + 528, + 5: UintptrFromInt32(0), + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + if severity == int32(MM_HALT) { + errstring = __ccgo_ts + 532 + } else { + if severity == int32(MM_ERROR) { + errstring = __ccgo_ts + 539 + } else { + if severity == int32(MM_WARNING) { + errstring = __ccgo_ts + 547 + } else { + if severity == int32(MM_INFO) { + errstring = __ccgo_ts + 557 + } + } + } + } + if classification&int32(MM_CONSOLE) != 0 { + consolefd = Xopen(tls, __ccgo_ts+564, int32(O_WRONLY), 0) + if consolefd < 0 { + ret = int32(MM_NOCON) + } else { + if label != 0 { + v1 = label + } else { + v1 = __ccgo_ts + } + if label != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + if severity != 0 { + v3 = errstring + } else { + v3 = __ccgo_ts + } + if text != 0 { + v4 = text + } else { + v4 = __ccgo_ts + } + if action != 0 { + v5 = __ccgo_ts + 577 + } else { + v5 = __ccgo_ts + } + if action != 0 { + v6 = action + } else { + v6 = __ccgo_ts + } + if action != 0 { + v7 = __ccgo_ts + 587 + } else { + v7 = __ccgo_ts + } + if tag != 0 { + v8 = tag + } else { + v8 = __ccgo_ts + } + if Xdprintf(tls, consolefd, __ccgo_ts+589, VaList(bp+16, v1, v2, v3, v4, v5, v6, v7, v8)) < int32(1) { + ret = int32(MM_NOCON) + } + Xclose(tls, consolefd) + } + } + if classification&int32(MM_PRINT) != 0 { + for cmsg != 0 && *(*uint8)(unsafe.Pointer(cmsg)) != 0 { + i = 0 + for { + if !(msgs[i] != 0) { + break + } + if !(__strcolcmp(tls, msgs[i], cmsg) != 0) { + break + } + goto _9 + _9: + ; + i++ + } + if msgs[i] == UintptrFromInt32(0) { + //ignore MSGVERB-unrecognized component + verb = int32(0xFF) + break + } else { + verb |= int32(1) << i + cmsg = Xstrchr(tls, cmsg, int32(':')) + if cmsg != 0 { + cmsg++ + } + } + } + if !(verb != 0) { + verb = int32(0xFF) + } + if verb&int32(1) != 0 && label != 0 { + v10 = label + } else { + v10 = __ccgo_ts + } + if verb&int32(1) != 0 && label != 0 { + v11 = __ccgo_ts + 289 + } else { + v11 = __ccgo_ts + } + if verb&int32(2) != 0 && severity != 0 { + v12 = errstring + } else { + v12 = __ccgo_ts + } + if verb&int32(4) != 0 && text != 0 { + v13 = text + } else { + v13 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v14 = __ccgo_ts + 577 + } else { + v14 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v15 = action + } else { + v15 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v16 = __ccgo_ts + 587 + } else { + v16 = __ccgo_ts + } + if verb&int32(16) != 0 && tag != 0 { + v17 = tag + } else { + v17 = __ccgo_ts + } + if Xdprintf(tls, int32(2), __ccgo_ts+589, VaList(bp+16, v10, v11, v12, v13, v14, v15, v16, v17)) < int32(1) { + ret |= int32(MM_NOMSG) + } + } + if ret&(Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG)) == Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG) { + ret = -int32(1) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xget_current_dir_name(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var res uintptr + var _ /* a at bp+0 */ Tstat + var _ /* b at bp+152 */ Tstat + _ = res + res = Xgetenv(tls, __ccgo_ts+607) + if res != 0 && *(*uint8)(unsafe.Pointer(res)) != 0 && !(Xstat(tls, res, bp) != 0) && !(Xstat(tls, __ccgo_ts+483, bp+152) != 0) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev == (*(*Tstat)(unsafe.Pointer(bp + 152))).Fst_dev && (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino == (*(*Tstat)(unsafe.Pointer(bp + 152))).Fst_ino { + return Xstrdup(tls, res) + } + return Xgetcwd(tls, uintptr(0), uint32(0)) +} + +func X__getauxval(tls *TLS, item uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + var auxv uintptr + _ = auxv + auxv = X__libc.Fauxv + if item == uint32(AT_SECURE) { + return uint32(X__libc.Fsecure) + } + for { + if !(*(*Tsize_t)(unsafe.Pointer(auxv)) != 0) { + break + } + if *(*Tsize_t)(unsafe.Pointer(auxv)) == item { + return *(*Tsize_t)(unsafe.Pointer(auxv + 1*4)) + } + goto _1 + _1: + ; + auxv += uintptr(2) * 4 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uint32(0) +} + +func Xgetauxval(tls *TLS, item uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__getauxval(tls, item) +} + +type Tutsname = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + Fdomainname [65]uint8 +} + +func Xgetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* temp at bp+0 */ Tutsname + Xuname(tls, bp) + if !(len1 != 0) || Xstrlen(tls, bp+325) >= len1 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + Xstrcpy(tls, name, bp+325) + return 0 +} + +func Xgetentropy(tls *TLS, buffer uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v buffer=%v len1=%v, (%v:)", tls, buffer, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pos uintptr + var ret int32 + var _ /* cs at bp+0 */ int32 + _, _ = pos, ret + ret = 0 + pos = buffer + if len1 > uint32(256) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + for len1 != 0 { + ret = Xgetrandom(tls, pos, len1, uint32(0)) + if ret < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) { + continue + } else { + break + } + } + pos += uintptr(ret) + len1 -= uint32(ret) + ret = 0 + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xgethostid(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const optpos = 0 + +type Tucontext_t3 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +type t__ucontext1 = Tucontext_t3 + +func X__getopt_msg(tls *TLS, a uintptr, b uintptr, c uintptr, l Tsize_t) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v l=%v, (%v:)", tls, a, b, c, l, origin(2)) + } + var __need_unlock, v1 int32 + var f uintptr + _, _, _ = __need_unlock, f, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + b = X__lctrans_cur(tls, b) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + _ = Xfputs(tls, a, f) >= 0 && Xfwrite(tls, b, Xstrlen(tls, b), uint32(1), f) != 0 && Xfwrite(tls, c, uint32(1), l, f) == l && Xputc(tls, int32('\n'), f) != 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xgetopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, k, l, v1, v2, v3 int32 + var optchar uintptr + var _ /* c at bp+0 */ Twchar_t + var _ /* d at bp+4 */ Twchar_t + _, _, _, _, _, _, _ = i, k, l, optchar, v1, v2, v3 + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))))) != int32('-') { + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') { + v1 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v1)*4)) + return int32(1) + } + return -int32(1) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') && !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 2)) != 0) { + Xoptind++ + return -Int32FromInt32(1) + } + if !(X__optpos != 0) { + X__optpos++ + } + v2 = Xmbtowc(tls, bp, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(X__optpos), uint32(MB_LEN_MAX)) + k = v2 + if v2 < 0 { + k = int32(1) + *(*Twchar_t)(unsafe.Pointer(bp)) = uint32(0xfffd) /* replacement char */ + } + optchar = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(X__optpos) + X__optpos += k + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(X__optpos))) != 0) { + Xoptind++ + X__optpos = 0 + } + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') { + optstring++ + } + i = 0 + *(*Twchar_t)(unsafe.Pointer(bp + 4)) = uint32(0) + for cond := true; cond; cond = l != 0 && *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) { + l = Xmbtowc(tls, bp+4, optstring+uintptr(i), uint32(MB_LEN_MAX)) + if l > 0 { + i += l + } else { + i++ + } + } + if *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) || *(*Twchar_t)(unsafe.Pointer(bp)) == uint32(':') { + Xoptopt = int32(*(*Twchar_t)(unsafe.Pointer(bp))) + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32(':') && Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+611, optchar, uint32(k)) + } + return int32('?') + } + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i)))) == int32(':') { + Xoptarg = uintptr(0) + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+int32(1))))) != int32(':') || X__optpos != 0 { + v3 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v3)*4)) + if X__optpos != 0 { + Xoptarg += uintptr(X__optpos) + } + X__optpos = 0 + } + if Xoptind > argc { + Xoptopt = int32(*(*Twchar_t)(unsafe.Pointer(bp))) + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32(':') { + return int32(':') + } + if Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+635, optchar, uint32(k)) + } + return int32('?') + } + } + return int32(*(*Twchar_t)(unsafe.Pointer(bp))) +} + +func X__posix_getopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetopt(tls, argc, argv, optstring) +} + +const no_argument = 0 +const optional_argument = 2 +const required_argument = 1 + +type Toption = struct { + Fname uintptr + Fhas_arg int32 + Fflag uintptr + Fval int32 +} + +func _permute(tls *TLS, argv uintptr, dest int32, src int32) { + var av, tmp uintptr + var i int32 + _, _, _ = av, i, tmp + av = argv + tmp = *(*uintptr)(unsafe.Pointer(av + uintptr(src)*4)) + i = src + for { + if !(i > dest) { + break + } + *(*uintptr)(unsafe.Pointer(av + uintptr(i)*4)) = *(*uintptr)(unsafe.Pointer(av + uintptr(i-int32(1))*4)) + goto _1 + _1: + ; + i-- + } + *(*uintptr)(unsafe.Pointer(av + uintptr(dest)*4)) = tmp +} + +func ___getopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var cnt, i, i1, resumed, ret, skipped int32 + _, _, _, _, _, _ = cnt, i, i1, resumed, ret, skipped + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) != 0) { + return -int32(1) + } + skipped = Xoptind + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('-') { + i = Xoptind + for { + if i >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)) + 1)) != 0 { + break + } + goto _1 + _1: + ; + i++ + } + Xoptind = i + } + resumed = Xoptind + ret = ___getopt_long_core(tls, argc, argv, optstring, longopts, idx, longonly) + if resumed > skipped { + cnt = Xoptind - resumed + i1 = 0 + for { + if !(i1 < cnt) { + break + } + _permute(tls, argv, skipped, Xoptind-int32(1)) + goto _2 + _2: + ; + i1++ + } + Xoptind = skipped + cnt + } + return ret +} + +func ___getopt_long_core(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var arg, name, opt, start, v5, v6 uintptr + var cnt, colon, i, j, l, match, v2 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = arg, cnt, colon, i, j, l, match, name, opt, start, v2, v5, v6 + Xoptarg = uintptr(0) + if longopts != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))))) == int32('-') && (longonly != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) != int32('-') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 2)) != 0) { + colon = BoolInt32(int32(*(*uint8)(unsafe.Pointer(optstring + BoolUintptr(int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-'))))) == int32(':')) + start = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + uintptr(1) + v2 = Int32FromInt32(0) + i = v2 + cnt = v2 + for { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname != 0) { + break + } + name = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname + opt = start + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('-') { + opt++ + } + for *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') && int32(*(*uint8)(unsafe.Pointer(opt))) == int32(*(*uint8)(unsafe.Pointer(name))) { + name++ + opt++ + } + if *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') { + goto _1 + } + arg = opt + match = i + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + cnt = int32(1) + break + } + cnt++ + goto _1 + _1: + ; + i++ + } + if cnt == int32(1) && longonly != 0 && int32(arg)-int32(start) == Xmblen(tls, start, uint32(MB_LEN_MAX)) { + l = int32(arg) - int32(start) + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(optstring + uintptr(i))) != 0) { + break + } + j = 0 + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(start + uintptr(j)))) == int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+j))))) { + break + } + goto _4 + _4: + ; + j++ + } + if j == l { + cnt++ + break + } + goto _3 + _3: + ; + i++ + } + } + if cnt == int32(1) { + i = match + opt = arg + Xoptind++ + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('=') { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fhas_arg != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + if colon != 0 || !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+667, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname)) + return int32('?') + } + Xoptarg = opt + uintptr(1) + } else { + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fhas_arg == int32(required_argument) { + v5 = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + Xoptarg = v5 + if !(v5 != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + if colon != 0 { + return int32(':') + } + if !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+635, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fname)) + return int32('?') + } + Xoptind++ + } + } + if idx != 0 { + *(*int32)(unsafe.Pointer(idx)) = i + } + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fflag != 0 { + *(*int32)(unsafe.Pointer((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fflag)) = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + return 0 + } + return (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*16))).Fval + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4)) + 1))) == int32('-') { + Xoptopt = 0 + if !(colon != 0) && Xopterr != 0 { + if cnt != 0 { + v6 = __ccgo_ts + 704 + } else { + v6 = __ccgo_ts + 611 + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), v6, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(2), Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*4))+uintptr(2))) + } + Xoptind++ + return int32('?') + } + } + return Xgetopt(tls, argc, argv, optstring) +} + +func Xgetopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, 0) +} + +func Xgetopt_long_only(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, int32(1)) +} + +func Xgetpriority(tls *TLS, which int32, who Tid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v, (%v:)", tls, which, who, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getpriority), which, int32(who)))) + if ret < 0 { + return ret + } + return int32(20) - ret +} + +func Xgetresgid(tls *TLS, rgid uintptr, egid uintptr, sgid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v rgid=%v egid=%v sgid=%v, (%v:)", tls, rgid, egid, sgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getresgid32), int32(rgid), int32(egid), int32(sgid)))) +} + +func Xgetresuid(tls *TLS, ruid uintptr, euid uintptr, suid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ruid=%v euid=%v suid=%v, (%v:)", tls, ruid, euid, suid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_getresuid32), int32(ruid), int32(euid), int32(suid)))) +} + +func Xgetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret int32 + var v1, v2 uint64 + var _ /* k_rlim at bp+0 */ [2]uint32 + _, _, _ = ret, v1, v2 + ret = X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_prlimit64), int32(Int32FromInt32(0)), resource, int32(Int32FromInt32(0)), int32(rlim)))) + if !(ret != 0) { + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + } + if !(ret != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) { + return ret + } + if X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_ugetrlimit), resource, int32(bp)))) < 0 { + return -int32(1) + } + if (*(*[2]uint32)(unsafe.Pointer(bp)))[0] == -Uint32FromUint32(1) { + v1 = ^Uint64FromUint64(0) + } else { + v1 = uint64((*(*[2]uint32)(unsafe.Pointer(bp)))[0]) + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = v1 + if (*(*[2]uint32)(unsafe.Pointer(bp)))[int32(1)] == -Uint32FromUint32(1) { + v2 = ^Uint64FromUint64(0) + } else { + v2 = uint64((*(*[2]uint32)(unsafe.Pointer(bp)))[int32(1)]) + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = v2 + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + return 0 +} + +func Xgetrusage(tls *TLS, who int32, ru uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v ru=%v, (%v:)", tls, who, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dest uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int32 + _, _ = dest, r + dest = ru + 32 - uintptr(Uint32FromInt32(4)*Uint32FromInt64(4)) + r = int32(X__syscall2(tls, int32(SYS_getrusage), who, int32(dest))) + if !(r != 0) && Bool(uint32(8) > uint32(4)) { + _memcpy(tls, bp, dest, Uint32FromInt32(4)*Uint32FromInt64(4)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]), + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]), + Ftv_usec: int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]), + } + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xgetsubopt(tls *TLS, opt uintptr, keys uintptr, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v opt=%v keys=%v val=%v, (%v:)", tls, opt, keys, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var l Tsize_t + var s, v1, v2 uintptr + _, _, _, _, _ = i, l, s, v1, v2 + s = *(*uintptr)(unsafe.Pointer(opt)) + *(*uintptr)(unsafe.Pointer(val)) = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(opt)) = Xstrchr(tls, s, int32(',')) + if *(*uintptr)(unsafe.Pointer(opt)) != 0 { + v2 = opt + v1 = *(*uintptr)(unsafe.Pointer(v2)) + *(*uintptr)(unsafe.Pointer(v2))++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(opt)) = s + uintptr(Xstrlen(tls, s)) + } + i = 0 + for { + if !(*(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4)) != 0) { + break + } + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4))) + if Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*4)), s, l) != 0 { + goto _3 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(l)))) == int32('=') { + *(*uintptr)(unsafe.Pointer(val)) = s + uintptr(l) + uintptr(1) + } else { + if *(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0 { + goto _3 + } + } + return i + goto _3 + _3: + ; + i++ + } + return -int32(1) +} + +const R = 2 +const W = 1 +const WR = 3 + +type Tioctl_compat_map = struct { + Fnew_req int32 + Fold_req int32 + Fold_size uint8 + Fdir uint8 + Fforce_align uint8 + Fnoffs uint8 + Foffsets [8]uint8 +} + +/* yields a type for a struct with original size n, with a misaligned + * timeval/timespec expanded from 32- to 64-bit. for use with ioctl + * number producing macros; only size of result is meaningful. */ + +type Tv4l2_event = struct { + F__ccgo_align [0]uint32 + Fa Tuint32_t + F__ccgo_align1 [4]byte + Fb [8]Tuint64_t + Fc [2]Tuint32_t + Fts [2]Tuint32_t + Fd [9]Tuint32_t + F__ccgo_pad5 [4]byte +} + +var _compat_map = [20]Tioctl_compat_map{ + 0: { + Fnew_req: int32(Uint32FromUint32(2)< %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var ap Tva_list + var arg uintptr + var i, r int32 + var _ /* u at bp+0 */ struct { + F__ccgo_align [0]uint32 + Fbuf [0][256]uint8 + Falign int64 + F__ccgo_pad2 [248]byte + } + _, _, _, _ = ap, arg, i, r + ap = va + arg = VaUintptr(&ap) + _ = ap + r = int32(X__syscall3(tls, int32(SYS_ioctl), fd, req, int32(arg))) + if Bool(Uint32FromUint32(2)< %v", r) }() + } + return int32(X__libc.Fsecure) +} + +func Xlockf(tls *TLS, fd int32, op int32, size Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v size=%v, (%v:)", tls, fd, op, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var _ /* l at bp+0 */ Tflock + *(*Tflock)(unsafe.Pointer(bp)) = Tflock{ + Fl_type: int16(F_WRLCK), + Fl_whence: int16(1), + Fl_len: size, + } + switch op { + case int32(F_TEST): + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = F_RDLCK + if Xfcntl(tls, fd, int32(F_GETLK), VaList(bp+40, bp)) < 0 { + return -int32(1) + } + if int32((*(*Tflock)(unsafe.Pointer(bp))).Fl_type) == int32(F_UNLCK) || (*(*Tflock)(unsafe.Pointer(bp))).Fl_pid == Xgetpid(tls) { + return 0 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + return -int32(1) + case F_ULOCK: + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = int16(F_UNLCK) + fallthrough + case int32(F_TLOCK): + return Xfcntl(tls, fd, int32(F_SETLK), VaList(bp+40, bp)) + case int32(F_LOCK): + return Xfcntl(tls, fd, int32(F_SETLKW), VaList(bp+40, bp)) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) +} + +const ACCOUNTING = 9 +const UTMP_FILE = "_PATH_UTMP" +const UTMP_FILENAME = "_PATH_UTMP" +const UT_HOSTSIZE = 256 +const UT_LINESIZE = 32 +const UT_NAMESIZE = 32 +const WTMP_FILE = "_PATH_WTMP" +const WTMP_FILENAME = "_PATH_WTMP" +const _PATH_UTMP = "/dev/null/utmp" +const _PATH_WTMP = "/dev/null/wtmp" +const ut_name = 0 +const utmp = 0 + +type Tlastlog = struct { + F__ccgo_align [0]uint32 + Fll_time Ttime_t + Fll_line [32]uint8 + Fll_host [256]uint8 +} + +func Xlogin_tty(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xsetsid(tls) + if Xioctl(tls, fd, int32(TIOCSCTTY), VaList(bp+8, UintptrFromInt32(0))) != 0 { + return -int32(1) + } + Xdup2(tls, fd, 0) + Xdup2(tls, fd, int32(1)) + Xdup2(tls, fd, int32(2)) + if fd > int32(2) { + Xclose(tls, fd) + } + return 0 +} + +const MNTOPT_DEFAULTS = "defaults" +const MNTOPT_NOAUTO = "noauto" +const MNTOPT_NOSUID = "nosuid" +const MNTOPT_RO = "ro" +const MNTOPT_RW = "rw" +const MNTOPT_SUID = "suid" +const MNTTYPE_IGNORE = "ignore" +const MNTTYPE_NFS = "nfs" +const MNTTYPE_SWAP = "swap" +const MOUNTED = "/etc/mtab" +const SENTINEL = 0 + +type Tmntent = struct { + Fmnt_fsname uintptr + Fmnt_dir uintptr + Fmnt_type uintptr + Fmnt_opts uintptr + Fmnt_freq int32 + Fmnt_passno int32 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _internal_buf uintptr +var _internal_bufsize Tsize_t + +func Xsetmntent(tls *TLS, name uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v mode=%v, (%v:)", tls, name, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfopen(tls, name, mode) +} + +func Xendmntent(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + if f != 0 { + Xfclose(tls, f) + } + return int32(1) +} + +func _unescape_ent(tls *TLS, beg uintptr) (r uintptr) { + var cval uint8 + var dest, src, val, v1, v2, v3, v4, v6, v7, v8, v9 uintptr + var i int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = cval, dest, i, src, val, v1, v2, v3, v4, v6, v7, v8, v9 + dest = beg + src = beg + for *(*uint8)(unsafe.Pointer(src)) != 0 { + cval = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(src))) != int32('\\') { + v1 = dest + dest++ + v2 = src + src++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + continue + } + if int32(*(*uint8)(unsafe.Pointer(src + 1))) == int32('\\') { + src++ + v3 = dest + dest++ + v4 = src + src++ + *(*uint8)(unsafe.Pointer(v3)) = *(*uint8)(unsafe.Pointer(v4)) + continue + } + val = src + uintptr(1) + i = 0 + for { + if !(i < int32(3)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(val))) >= int32('0') && int32(*(*uint8)(unsafe.Pointer(val))) <= int32('7') { + cval = uint8(int32(cval) << Int32FromInt32(3)) + v6 = val + val++ + cval = uint8(int32(cval) + (int32(*(*uint8)(unsafe.Pointer(v6))) - Int32FromUint8('0'))) + } else { + break + } + goto _5 + _5: + ; + i++ + } + if cval != 0 { + v7 = dest + dest++ + *(*uint8)(unsafe.Pointer(v7)) = cval + src = val + } else { + v8 = dest + dest++ + v9 = src + src++ + *(*uint8)(unsafe.Pointer(v8)) = *(*uint8)(unsafe.Pointer(v9)) + } + } + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + return beg +} + +func Xgetmntent_r(tls *TLS, f uintptr, mnt uintptr, linebuf uintptr, buflen int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v linebuf=%v buflen=%v, (%v:)", tls, f, mnt, linebuf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var i, len1 Tsize_t + var use_internal int32 + var _ /* n at bp+0 */ [8]int32 + _, _, _ = i, len1, use_internal + use_internal = BoolInt32(linebuf == uintptr(unsafe.Pointer(&_internal_buf))) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno = 0 + for cond := true; cond; cond = int32(*(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])))) == int32('#') || uint32((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]) == len1 { + if use_internal != 0 { + Xgetline(tls, uintptr(unsafe.Pointer(&_internal_buf)), uintptr(unsafe.Pointer(&_internal_bufsize)), f) + linebuf = _internal_buf + } else { + Xfgets(tls, linebuf, buflen, f) + } + if Xfeof(tls, f) != 0 || Xferror(tls, f) != 0 { + return uintptr(0) + } + if !(Xstrchr(tls, linebuf, int32('\n')) != 0) { + Xfscanf(tls, f, __ccgo_ts+728, 0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return uintptr(0) + } + len1 = Xstrlen(tls, linebuf) + if len1 > uint32(INT_MAX) { + continue + } + i = uint32(0) + for { + if !(i < Uint32FromInt64(32)/Uint32FromInt64(4)) { + break + } + (*(*[8]int32)(unsafe.Pointer(bp)))[i] = int32(len1) + goto _1 + _1: + ; + i++ + } + Xsscanf(tls, linebuf, __ccgo_ts+740, VaList(bp+40, bp, bp+uintptr(1)*4, bp+uintptr(2)*4, bp+uintptr(3)*4, bp+uintptr(4)*4, bp+uintptr(5)*4, bp+uintptr(6)*4, bp+uintptr(7)*4, mnt+16, mnt+20)) + } + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(3)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(5)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(7)]))) = uint8(0) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(2)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(4)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(6)])) + return mnt +} + +func Xgetmntent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetmntent_r(tls, f, uintptr(unsafe.Pointer(&_mnt)), uintptr(unsafe.Pointer(&_internal_buf)), 0) +} + +var _mnt Tmntent + +func Xaddmntent(tls *TLS, f uintptr, mnt uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v, (%v:)", tls, f, mnt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xfseek(tls, f, 0, int32(2)) != 0 { + return int32(1) + } + return BoolInt32(Xfprintf(tls, f, __ccgo_ts+795, VaList(bp+8, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno)) < 0) +} + +func Xhasmntopt(tls *TLS, mnt uintptr, opt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mnt=%v opt=%v, (%v:)", tls, mnt, opt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrstr(tls, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, opt) +} + +type Thistory = struct { + F__ccgo_align [0]uint32 + Fchain uintptr + F__ccgo_align1 [4]byte + Fdev Tdev_t + Fino Tino_t + Flevel int32 + Fbase int32 +} + +func _do_nftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32, h uintptr) (r1 int32) { + bp := tls.Alloc(192) + defer tls.Free(192) + var d, de, v10 uintptr + var dfd, err, r, type1, v11, v12, v3, v4, v7 int32 + var j, k, l Tsize_t + var v1 uint32 + var v13, v8 bool + var v2 Tino_t + var _ /* lev at bp+184 */ TFTW + var _ /* new at bp+152 */ Thistory + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, de, dfd, err, j, k, l, r, type1, v1, v10, v11, v12, v13, v2, v3, v4, v7, v8 + l = Xstrlen(tls, path) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(l-uint32(1))))) == int32('/') { + v1 = l - uint32(1) + } else { + v1 = l + } + j = v1 + v2 = Uint64FromInt32(0) + (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino = v2 + (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev = v2 + if flags&int32(FTW_PHYS) != 0 { + v3 = Xlstat(tls, path, bp) + } else { + v3 = BoolInt32(Xstat(tls, path, bp) < 0) + } + if v3 != 0 { + if !(flags&Int32FromInt32(FTW_PHYS) != 0) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) && !(Xlstat(tls, path, bp) != 0) { + type1 = int32(FTW_SLN) + } else { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EACCES) { + return -int32(1) + } else { + type1 = int32(FTW_NS) + } + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + if flags&int32(FTW_DEPTH) != 0 { + type1 = int32(FTW_DP) + } else { + type1 = int32(FTW_D) + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + if flags&int32(FTW_PHYS) != 0 { + type1 = int32(FTW_SL) + } else { + type1 = int32(FTW_SLN) + } + } else { + type1 = int32(FTW_F) + } + } + } + if flags&int32(FTW_MOUNT) != 0 && h != 0 && type1 != int32(FTW_NS) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*Thistory)(unsafe.Pointer(h)).Fdev { + return 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 152))).Fchain = h + (*(*Thistory)(unsafe.Pointer(bp + 152))).Fdev = (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev + (*(*Thistory)(unsafe.Pointer(bp + 152))).Fino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + if h != 0 { + v4 = (*Thistory)(unsafe.Pointer(h)).Flevel + int32(1) + } else { + v4 = 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 152))).Flevel = v4 + (*(*Thistory)(unsafe.Pointer(bp + 152))).Fbase = int32(j + uint32(1)) + (*(*TFTW)(unsafe.Pointer(bp + 184))).Flevel = (*(*Thistory)(unsafe.Pointer(bp + 152))).Flevel + if h != 0 { + (*(*TFTW)(unsafe.Pointer(bp + 184))).Fbase = (*Thistory)(unsafe.Pointer(h)).Fbase + } else { + k = j + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k)))) == int32('/')) { + break + } + goto _5 + _5: + ; + k-- + } + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k-uint32(1))))) != int32('/')) { + break + } + goto _6 + _6: + ; + k-- + } + (*(*TFTW)(unsafe.Pointer(bp + 184))).Fbase = int32(k) + } + if type1 == int32(FTW_D) || type1 == int32(FTW_DP) { + dfd = Xopen(tls, path, O_RDONLY, 0) + err = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if dfd < 0 && err == int32(EACCES) { + type1 = int32(FTW_DNR) + } + if !(fd_limit != 0) { + Xclose(tls, dfd) + } + } + if v8 = !(flags&Int32FromInt32(FTW_DEPTH) != 0); v8 { + v7 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+184) + r = v7 + } + if v8 && v7 != 0 { + return r + } + for { + if !(h != 0) { + break + } + if (*Thistory)(unsafe.Pointer(h)).Fdev == (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev && (*Thistory)(unsafe.Pointer(h)).Fino == (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino { + return 0 + } + goto _9 + _9: + ; + h = (*Thistory)(unsafe.Pointer(h)).Fchain + } + if (type1 == int32(FTW_D) || type1 == int32(FTW_DP)) && fd_limit != 0 { + if dfd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return -int32(1) + } + d = Xfdopendir(tls, dfd) + if d != 0 { + for { + v10 = Xreaddir(tls, d) + de = v10 + if !(v10 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) { + continue + } + if Xstrlen(tls, de+19) >= uint32(PATH_MAX)-l { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + Xclosedir(tls, d) + return -int32(1) + } + *(*uint8)(unsafe.Pointer(path + uintptr(j))) = uint8('/') + Xstrcpy(tls, path+uintptr(j)+uintptr(1), de+19) + v11 = _do_nftw(tls, path, fn, fd_limit-int32(1), flags, bp+152) + r = v11 + if v11 != 0 { + Xclosedir(tls, d) + return r + } + } + Xclosedir(tls, d) + } else { + Xclose(tls, dfd) + return -int32(1) + } + } + *(*uint8)(unsafe.Pointer(path + uintptr(l))) = uint8(0) + if v13 = flags&int32(FTW_DEPTH) != 0; v13 { + v12 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+184) + r = v12 + } + if v13 && v12 != 0 { + return r + } + return 0 +} + +func Xnftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v flags=%v, (%v:)", tls, path, fn, fd_limit, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var l Tsize_t + var r int32 + var _ /* cs at bp+0 */ int32 + var _ /* pathbuf at bp+4 */ [4097]uint8 + _, _ = l, r + if fd_limit <= 0 { + return 0 + } + l = Xstrlen(tls, path) + if l > uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + _memcpy(tls, bp+4, path, l+uint32(1)) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + r = _do_nftw(tls, bp+4, fn, fd_limit, flags, UintptrFromInt32(0)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return r +} + +/* Nonstandard, but vastly superior to the standard functions */ + +func Xopenpty(tls *TLS, pm uintptr, ps uintptr, name uintptr, tio uintptr, ws uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pm=%v ps=%v name=%v tio=%v ws=%v, (%v:)", tls, pm, ps, name, tio, ws, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var m, s, v1 int32 + var _ /* buf at bp+8 */ [20]uint8 + var _ /* cs at bp+4 */ int32 + var _ /* n at bp+0 */ int32 + _, _, _ = m, s, v1 + *(*int32)(unsafe.Pointer(bp)) = 0 + m = Xopen(tls, __ccgo_ts+814, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + if m < 0 { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + if Xioctl(tls, m, int32(TIOCSPTLCK), VaList(bp+40, bp)) != 0 || Xioctl(tls, m, Int32FromUint32(TIOCGPTN), VaList(bp+40, bp)) != 0 { + goto fail + } + if !(name != 0) { + name = bp + 8 + } + Xsnprintf(tls, name, uint32(20), __ccgo_ts+824, VaList(bp+40, *(*int32)(unsafe.Pointer(bp)))) + v1 = Xopen(tls, name, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + s = v1 + if v1 < 0 { + goto fail + } + if tio != 0 { + Xtcsetattr(tls, s, TCSANOW, tio) + } + if ws != 0 { + Xioctl(tls, s, int32(TIOCSWINSZ), VaList(bp+40, ws)) + } + *(*int32)(unsafe.Pointer(pm)) = m + *(*int32)(unsafe.Pointer(ps)) = s + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return 0 + goto fail +fail: + ; + Xclose(tls, m) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return -int32(1) +} + +func Xptsname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var err int32 + _ = err + err = X__ptsname_r(tls, fd, uintptr(unsafe.Pointer(&_buf2)), uint32(22)) + if err != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_buf2)) +} + +var _buf2 [22]uint8 + +func Xposix_openpt(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xopen(tls, __ccgo_ts+814, flags, 0) + if r < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSPC) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAGAIN) + } + return r +} + +func Xgrantpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xunlockpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* unlock at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = 0 + return Xioctl(tls, fd, int32(TIOCSPTLCK), VaList(bp+16, bp)) +} + +func X__ptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var err, v1 int32 + var _ /* pty at bp+0 */ int32 + _, _ = err, v1 + if !(buf != 0) { + len1 = uint32(0) + } + v1 = int32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Uint32FromUint32(TIOCGPTN)), int32(bp))) + err = v1 + if v1 != 0 { + return -err + } + if uint32(Xsnprintf(tls, buf, len1, __ccgo_ts+824, VaList(bp+16, *(*int32)(unsafe.Pointer(bp))))) >= len1 { + return int32(ERANGE) + } + return 0 +} + +func Xptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ptsname_r(tls, fd, buf, len1) +} + +func _slash_len(tls *TLS, s uintptr) (r Tsize_t) { + var s0 uintptr + _ = s0 + s0 = s + for int32(*(*uint8)(unsafe.Pointer(s))) == int32('/') { + s++ + } + return uint32(int32(s) - int32(s0)) +} + +func Xrealpath(tls *TLS, filename uintptr, resolved uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v resolved=%v, (%v:)", tls, filename, resolved, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(8208) + defer tls.Free(8208) + var check_dir, up int32 + var cnt, l, l0, nup, p, q, v10, v11, v4, v5, v6, v7, v9 Tsize_t + var k Tssize_t + var z uintptr + var _ /* output at bp+4097 */ [4096]uint8 + var _ /* stack at bp+0 */ [4097]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = check_dir, cnt, k, l, l0, nup, p, q, up, z, v10, v11, v4, v5, v6, v7, v9 + cnt = uint32(0) + nup = uint32(0) + check_dir = 0 + if !(filename != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + l = Xstrnlen(tls, filename, uint32(4097)) + if !(l != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if l >= uint32(PATH_MAX) { + goto toolong + } + p = uint32(4097) - l - uint32(1) + q = uint32(0) + _memcpy(tls, bp+uintptr(p), filename, l+uint32(1)) + /* Main loop. Each iteration pops the next part from stack of + * remaining path components and consumes any slashes that follow. + * If not a link, it's moved to output; if a link, contents are + * pushed to the stack. */ + goto restart +restart: + ; +_3: + ; + /* If stack starts with /, the whole component is / or // + * and the output state must be reset. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + check_dir = 0 + nup = uint32(0) + q = uint32(0) + v4 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v4] = uint8('/') + p++ + /* Initial // is special. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p+uint32(1)]) != int32('/') { + v5 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v5] = uint8('/') + } + goto _2 + } + z = X__strchrnul(tls, bp+uintptr(p), int32('/')) + v6 = uint32(int32(z) - int32(bp+uintptr(p))) + l = v6 + l0 = v6 + if !(l != 0) && !(check_dir != 0) { + goto _1 + } + /* Skip any . component but preserve check_dir status. */ + if l == uint32(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('.') { + p += l + goto _2 + } + /* Copy next component onto output at least temporarily, to + * call readlink, but wait to advance output position until + * determining it's not a link. */ + if q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint32(1)]) != int32('/') { + if !(p != 0) { + goto toolong + } + p-- + v7 = p + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v7] = uint8('/') + l++ + } + if q+l >= uint32(PATH_MAX) { + goto toolong + } + _memcpy(tls, bp+4097+uintptr(q), bp+uintptr(p), l) + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q+l] = uint8(0) + p += l + up = 0 + if l0 == uint32(2) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint32(2)]) == int32('.') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint32(1)]) == int32('.') { + up = int32(1) + /* Any non-.. path components we could cancel start + * after nup repetitions of the 3-byte string "../"; + * if there are none, accumulate .. components to + * later apply to cwd, if needed. */ + if q <= uint32(3)*nup { + nup++ + q += l + goto _2 + } + /* When previous components are already known to be + * directories, processing .. can skip readlink. */ + if !(check_dir != 0) { + goto skip_readlink + } + } + k = Xreadlink(tls, bp+4097, bp, p) + if uint32(k) == p { + goto toolong + } + if !(k != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if !(k < 0) { + goto _8 + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return uintptr(0) + } + goto skip_readlink +skip_readlink: + ; + check_dir = 0 + if up != 0 { + for q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint32(1)]) != int32('/') { + q-- + } + if q > uint32(1) && (q > uint32(2) || int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/')) { + q-- + } + goto _2 + } + if l0 != 0 { + q += l + } + check_dir = int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) + goto _2 +_8: + ; + cnt++ + v9 = cnt + if v9 == uint32(SYMLOOP_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ELOOP) + return uintptr(0) + } + /* If link contents end in /, strip any slashes already on + * stack to avoid /->// or //->/// or spurious toolong. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[k-int32(1)]) == int32('/') { + for int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + p++ + } + } + p -= uint32(k) + Xmemmove(tls, bp+uintptr(p), bp, uint32(k)) + /* Skip the stack advancement in case we have a new + * absolute base path. */ + goto restart + goto _2 +_2: + ; + p += _slash_len(tls, bp+uintptr(p)) + goto _3 + goto _1 +_1: + ; + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q] = uint8(0) + if int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/') { + if !(Xgetcwd(tls, bp, uint32(4097)) != 0) { + return uintptr(0) + } + l = Xstrlen(tls, bp) + /* Cancel any initial .. components. */ + p = uint32(0) + for { + v10 = nup + nup-- + if !(v10 != 0) { + break + } + for l > uint32(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint32(1)]) != int32('/') { + l-- + } + if l > uint32(1) { + l-- + } + p += uint32(2) + if p < q { + p++ + } + } + if q-p != 0 && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint32(1)]) != int32('/') { + v11 = l + l++ + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v11] = uint8('/') + } + if l+(q-p)+uint32(1) >= uint32(PATH_MAX) { + goto toolong + } + Xmemmove(tls, bp+4097+uintptr(l), bp+4097+uintptr(p), q-p+uint32(1)) + _memcpy(tls, bp+4097, bp, l) + q = l + q - p + } + if resolved != 0 { + return _memcpy(tls, resolved, bp+4097, q+uint32(1)) + } else { + return Xstrdup(tls, bp+4097) + } + goto toolong +toolong: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) +} + +func Xsetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setdomainname), int32(name), int32(len1)))) +} + +func Xsetpriority(tls *TLS, which int32, who Tid_t, prio int32) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v prio=%v, (%v:)", tls, which, who, prio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_setpriority), which, int32(who), prio))) +} + +type Tctx = struct { + Flim [2]uint32 + Fres int32 + Ferr int32 +} + +func _do_setrlimit(tls *TLS, p uintptr) { + var c uintptr + _ = c + c = p + if (*Tctx)(unsafe.Pointer(c)).Ferr > 0 { + return + } + (*Tctx)(unsafe.Pointer(c)).Ferr = int32(-X__syscall2(tls, int32(SYS_setrlimit), (*Tctx)(unsafe.Pointer(c)).Fres, int32(c))) +} + +func Xsetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var v1, v2 uint64 + var _ /* c at bp+16 */ Tctx + var _ /* tmp at bp+0 */ Trlimit + _, _, _ = ret, v1, v2 + if ^Uint64FromUint64(0) != ^Uint64FromUint64(0) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(rlim)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + rlim = bp + } + ret = int32(X__syscall4(tls, int32(SYS_prlimit64), int32(Int32FromInt32(0)), resource, int32(rlim), int32(Int32FromInt32(0)))) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur < uint64(-Uint32FromUint32(1)) { + v1 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur + } else { + v1 = uint64(-Uint32FromUint32(1)) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max < uint64(-Uint32FromUint32(1)) { + v2 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max + } else { + v2 = uint64(-Uint32FromUint32(1)) + } + *(*Tctx)(unsafe.Pointer(bp + 16)) = Tctx{ + Flim: [2]uint32{ + 0: uint32(v1), + 1: uint32(v2), + }, + Fres: resource, + Ferr: -int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setrlimit), bp+16) + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr != 0 { + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr > 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr + } + return -int32(1) + } + return 0 +} + +func Xsyscall(tls *TLS, n int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v va=%v, (%v:)", tls, n, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, c, d, e, f Tsyscall_arg_t + var ap Tva_list + _, _, _, _, _, _, _ = a, ap, b, c, d, e, f + ap = va + a = VaInt32(&ap) + b = VaInt32(&ap) + c = VaInt32(&ap) + d = VaInt32(&ap) + e = VaInt32(&ap) + f = VaInt32(&ap) + _ = ap + return X__syscall_ret(tls, uint32(X__syscall6(tls, n, a, b, c, d, e, f))) +} + +const AF_ALG = 38 +const AF_APPLETALK = 5 +const AF_ASH = 18 +const AF_ATMPVC = 8 +const AF_ATMSVC = 20 +const AF_AX25 = 3 +const AF_BLUETOOTH = 31 +const AF_BRIDGE = 7 +const AF_CAIF = 37 +const AF_CAN = 29 +const AF_DECnet = 12 +const AF_ECONET = 19 +const AF_FILE = 1 +const AF_IB = 27 +const AF_IEEE802154 = 36 +const AF_INET = 2 +const AF_INET6 = 10 +const AF_IPX = 4 +const AF_IRDA = 23 +const AF_ISDN = 34 +const AF_IUCV = 32 +const AF_KCM = 41 +const AF_KEY = 15 +const AF_LLC = 26 +const AF_LOCAL = 1 +const AF_MAX = 45 +const AF_MPLS = 28 +const AF_NETBEUI = 13 +const AF_NETLINK = 16 +const AF_NETROM = 6 +const AF_NFC = 39 +const AF_PACKET = 17 +const AF_PHONET = 35 +const AF_PPPOX = 24 +const AF_QIPCRTR = 42 +const AF_RDS = 21 +const AF_ROSE = 11 +const AF_ROUTE = 16 +const AF_RXRPC = 33 +const AF_SECURITY = 14 +const AF_SMC = 43 +const AF_SNA = 22 +const AF_TIPC = 30 +const AF_UNIX = 1 +const AF_UNSPEC = 0 +const AF_VSOCK = 40 +const AF_WANPIPE = 25 +const AF_X25 = 9 +const AF_XDP = 44 +const LOG_ALERT = 1 +const LOG_AUTH = 32 +const LOG_AUTHPRIV = 80 +const LOG_CONS = 2 +const LOG_CRIT = 2 +const LOG_CRON = 72 +const LOG_DAEMON = 24 +const LOG_DEBUG = 7 +const LOG_EMERG = 0 +const LOG_ERR = 3 +const LOG_FACMASK = 1016 +const LOG_FTP = 88 +const LOG_INFO = 6 +const LOG_KERN = 0 +const LOG_LOCAL0 = 128 +const LOG_LOCAL1 = 136 +const LOG_LOCAL2 = 144 +const LOG_LOCAL3 = 152 +const LOG_LOCAL4 = 160 +const LOG_LOCAL5 = 168 +const LOG_LOCAL6 = 176 +const LOG_LOCAL7 = 184 +const LOG_LPR = 48 +const LOG_MAIL = 16 +const LOG_NDELAY = 8 +const LOG_NEWS = 56 +const LOG_NFACILITIES = 24 +const LOG_NOTICE = 5 +const LOG_NOWAIT = 16 +const LOG_ODELAY = 4 +const LOG_PERROR = 32 +const LOG_PID = 1 +const LOG_PRIMASK = 7 +const LOG_SYSLOG = 40 +const LOG_USER = 8 +const LOG_UUCP = 64 +const LOG_WARNING = 4 +const MSG_BATCH = 262144 +const MSG_CMSG_CLOEXEC = 1073741824 +const MSG_CONFIRM = 2048 +const MSG_CTRUNC = 8 +const MSG_DONTROUTE = 4 +const MSG_DONTWAIT = 64 +const MSG_EOR = 128 +const MSG_ERRQUEUE = 8192 +const MSG_FASTOPEN = 536870912 +const MSG_FIN = 512 +const MSG_MORE = 32768 +const MSG_NOSIGNAL = 16384 +const MSG_OOB = 1 +const MSG_PEEK = 2 +const MSG_PROXY = 16 +const MSG_RST = 4096 +const MSG_SYN = 1024 +const MSG_TRUNC = 32 +const MSG_WAITALL = 256 +const MSG_WAITFORONE = 65536 +const MSG_ZEROCOPY = 67108864 +const PF_ALG = 38 +const PF_APPLETALK = 5 +const PF_ASH = 18 +const PF_ATMPVC = 8 +const PF_ATMSVC = 20 +const PF_AX25 = 3 +const PF_BLUETOOTH = 31 +const PF_BRIDGE = 7 +const PF_CAIF = 37 +const PF_CAN = 29 +const PF_DECnet = 12 +const PF_ECONET = 19 +const PF_FILE = 1 +const PF_IB = 27 +const PF_IEEE802154 = 36 +const PF_INET = 2 +const PF_INET6 = 10 +const PF_IPX = 4 +const PF_IRDA = 23 +const PF_ISDN = 34 +const PF_IUCV = 32 +const PF_KCM = 41 +const PF_KEY = 15 +const PF_LLC = 26 +const PF_LOCAL = 1 +const PF_MAX = 45 +const PF_MPLS = 28 +const PF_NETBEUI = 13 +const PF_NETLINK = 16 +const PF_NETROM = 6 +const PF_NFC = 39 +const PF_PACKET = 17 +const PF_PHONET = 35 +const PF_PPPOX = 24 +const PF_QIPCRTR = 42 +const PF_RDS = 21 +const PF_ROSE = 11 +const PF_ROUTE = 16 +const PF_RXRPC = 33 +const PF_SECURITY = 14 +const PF_SMC = 43 +const PF_SNA = 22 +const PF_TIPC = 30 +const PF_UNIX = 1 +const PF_UNSPEC = 0 +const PF_VSOCK = 40 +const PF_WANPIPE = 25 +const PF_X25 = 9 +const PF_XDP = 44 +const SCM_CREDENTIALS = 2 +const SCM_RIGHTS = 1 +const SCM_TIMESTAMP = 63 +const SCM_TIMESTAMPING = 65 +const SCM_TIMESTAMPING_OPT_STATS = 54 +const SCM_TIMESTAMPING_PKTINFO = 58 +const SCM_TIMESTAMPNS = 64 +const SCM_TXTIME = 61 +const SCM_WIFI_STATUS = 41 +const SHUT_RD = 0 +const SHUT_RDWR = 2 +const SHUT_WR = 1 +const SOCK_CLOEXEC = 524288 +const SOCK_DCCP = 6 +const SOCK_DGRAM = 2 +const SOCK_NONBLOCK = 2048 +const SOCK_PACKET = 10 +const SOCK_RAW = 3 +const SOCK_RDM = 4 +const SOCK_SEQPACKET = 5 +const SOCK_STREAM = 1 +const SOL_AAL = 265 +const SOL_ALG = 279 +const SOL_ATM = 264 +const SOL_BLUETOOTH = 274 +const SOL_CAIF = 278 +const SOL_DCCP = 269 +const SOL_DECNET = 261 +const SOL_ICMPV6 = 58 +const SOL_IP = 0 +const SOL_IPV6 = 41 +const SOL_IRDA = 266 +const SOL_IUCV = 277 +const SOL_KCM = 281 +const SOL_LLC = 268 +const SOL_NETBEUI = 267 +const SOL_NETLINK = 270 +const SOL_NFC = 280 +const SOL_PACKET = 263 +const SOL_PNPIPE = 275 +const SOL_PPPOL2TP = 273 +const SOL_RAW = 255 +const SOL_RDS = 276 +const SOL_RXRPC = 272 +const SOL_SOCKET = 1 +const SOL_TIPC = 271 +const SOL_TLS = 282 +const SOL_X25 = 262 +const SOL_XDP = 283 +const SOMAXCONN = 128 +const SO_ACCEPTCONN = 30 +const SO_ATTACH_BPF = 50 +const SO_ATTACH_FILTER = 26 +const SO_ATTACH_REUSEPORT_CBPF = 51 +const SO_ATTACH_REUSEPORT_EBPF = 52 +const SO_BINDTODEVICE = 25 +const SO_BINDTOIFINDEX = 62 +const SO_BPF_EXTENSIONS = 48 +const SO_BROADCAST = 6 +const SO_BSDCOMPAT = 14 +const SO_BUSY_POLL = 46 +const SO_BUSY_POLL_BUDGET = 70 +const SO_CNX_ADVICE = 53 +const SO_COOKIE = 57 +const SO_DEBUG = 1 +const SO_DETACH_BPF = 27 +const SO_DETACH_FILTER = 27 +const SO_DETACH_REUSEPORT_BPF = 68 +const SO_DOMAIN = 39 +const SO_DONTROUTE = 5 +const SO_ERROR = 4 +const SO_GET_FILTER = 26 +const SO_INCOMING_CPU = 49 +const SO_INCOMING_NAPI_ID = 56 +const SO_KEEPALIVE = 9 +const SO_LINGER = 13 +const SO_LOCK_FILTER = 44 +const SO_MARK = 36 +const SO_MAX_PACING_RATE = 47 +const SO_MEMINFO = 55 +const SO_NOFCS = 43 +const SO_NO_CHECK = 11 +const SO_OOBINLINE = 10 +const SO_PASSCRED = 16 +const SO_PASSSEC = 34 +const SO_PEEK_OFF = 42 +const SO_PEERCRED = 17 +const SO_PEERGROUPS = 59 +const SO_PEERNAME = 28 +const SO_PEERSEC = 31 +const SO_PREFER_BUSY_POLL = 69 +const SO_PRIORITY = 12 +const SO_PROTOCOL = 38 +const SO_RCVBUF = 8 +const SO_RCVBUFFORCE = 33 +const SO_RCVLOWAT = 18 +const SO_RCVTIMEO = 66 +const SO_REUSEADDR = 2 +const SO_REUSEPORT = 15 +const SO_RXQ_OVFL = 40 +const SO_SECURITY_AUTHENTICATION = 22 +const SO_SECURITY_ENCRYPTION_NETWORK = 24 +const SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +const SO_SELECT_ERR_QUEUE = 45 +const SO_SNDBUF = 7 +const SO_SNDBUFFORCE = 32 +const SO_SNDLOWAT = 19 +const SO_SNDTIMEO = 67 +const SO_TIMESTAMP = 63 +const SO_TIMESTAMPING = 65 +const SO_TIMESTAMPNS = 64 +const SO_TXTIME = 61 +const SO_TYPE = 3 +const SO_WIFI_STATUS = 41 +const SO_ZEROCOPY = 60 + +type Tsocklen_t = uint32 + +type Tsa_family_t = uint16 + +type Tmsghdr = struct { + Fmsg_name uintptr + Fmsg_namelen Tsocklen_t + Fmsg_iov uintptr + Fmsg_iovlen int32 + Fmsg_control uintptr + Fmsg_controllen Tsocklen_t + Fmsg_flags int32 +} + +type Tcmsghdr = struct { + Fcmsg_len Tsocklen_t + Fcmsg_level int32 + Fcmsg_type int32 +} + +type Tlinger = struct { + Fl_onoff int32 + Fl_linger int32 +} + +type Tsockaddr = struct { + Fsa_family Tsa_family_t + Fsa_data [14]uint8 +} + +type Tsockaddr_storage = struct { + Fss_family Tsa_family_t + F__ss_padding [122]uint8 + F__ss_align uint32 +} + +type t__ucontext2 = Tucontext_t2 + +var _lock2 [1]int32 +var _log_ident [32]uint8 +var _log_opt int32 +var _log_facility = Int32FromInt32(1) << Int32FromInt32(3) +var _log_mask = int32(0xff) +var _log_fd = -int32(1) + +func Xsetlogmask(tls *TLS, maskpri int32) (r int32) { + if __ccgo_strace { + trc("tls=%v maskpri=%v, (%v:)", tls, maskpri, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + ret = _log_mask + if maskpri != 0 { + _log_mask = maskpri + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + return ret +} + +var _log_addr = struct { + Fsun_family int16 + Fsun_path [9]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [9]uint8{'/', 'd', 'e', 'v', '/', 'l', 'o', 'g'}, +} + +func Xcloselog(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + Xclose(tls, _log_fd) + _log_fd = -int32(1) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func ___openlog(tls *TLS) { + _log_fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if _log_fd >= 0 { + Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) + } +} + +func Xopenlog(tls *TLS, ident uintptr, opt int32, facility int32) { + if __ccgo_strace { + trc("tls=%v ident=%v opt=%v facility=%v, (%v:)", tls, ident, opt, facility, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var n Tsize_t + var _ /* cs at bp+0 */ int32 + _ = n + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + if ident != 0 { + n = Xstrnlen(tls, ident, Uint32FromInt64(32)-Uint32FromInt32(1)) + _memcpy(tls, uintptr(unsafe.Pointer(&_log_ident)), ident, n) + _log_ident[n] = uint8(0) + } else { + _log_ident[0] = uint8(0) + } + _log_opt = opt + _log_facility = facility + if opt&int32(LOG_NDELAY) != 0 && _log_fd < 0 { + ___openlog(tls) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func _is_lost_conn(tls *TLS, e int32) (r int32) { + return BoolInt32(e == int32(ECONNREFUSED) || e == int32(ECONNRESET) || e == int32(ENOTCONN) || e == int32(EPIPE)) +} + +func __vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(1168) + defer tls.Free(1168) + var errno_save, fd, l, l2, pid, v1, v2 int32 + var _ /* buf at bp+68 */ [1024]uint8 + var _ /* hlen at bp+1092 */ int32 + var _ /* now at bp+16 */ Ttime_t + var _ /* timebuf at bp+0 */ [16]uint8 + var _ /* tm at bp+24 */ Ttm + _, _, _, _, _, _, _ = errno_save, fd, l, l2, pid, v1, v2 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if _log_fd < 0 { + ___openlog(tls) + } + if !(priority&Int32FromInt32(LOG_FACMASK) != 0) { + priority |= _log_facility + } + *(*Ttime_t)(unsafe.Pointer(bp + 16)) = Xtime(tls, UintptrFromInt32(0)) + Xgmtime_r(tls, bp+16, bp+24) + Xstrftime_l(tls, bp, uint32(16), __ccgo_ts+836, bp+24, uintptr(unsafe.Pointer(&X__c_locale))) + if _log_opt&int32(LOG_PID) != 0 { + v1 = Xgetpid(tls) + } else { + v1 = 0 + } + pid = v1 + l = Xsnprintf(tls, bp+68, uint32(1024), __ccgo_ts+845, VaList(bp+1104, priority, bp, bp+1092, uintptr(unsafe.Pointer(&_log_ident)), __ccgo_ts+867+BoolUintptr(!(pid != 0)), pid, __ccgo_ts+869+BoolUintptr(!(pid != 0)))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + l2 = Xvsnprintf(tls, bp+68+uintptr(l), uint32(1024)-uint32(l), message, ap) + if l2 >= 0 { + if uint32(l2) >= uint32(1024)-uint32(l) { + l = int32(Uint32FromInt64(1024) - Uint32FromInt32(1)) + } else { + l += l2 + } + if int32((*(*[1024]uint8)(unsafe.Pointer(bp + 68)))[l-int32(1)]) != int32('\n') { + v2 = l + l++ + (*(*[1024]uint8)(unsafe.Pointer(bp + 68)))[v2] = uint8('\n') + } + if Xsend(tls, _log_fd, bp+68, uint32(l), 0) < 0 && (!(_is_lost_conn(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0) || Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) < 0 || Xsend(tls, _log_fd, bp+68, uint32(l), 0) < 0) && _log_opt&int32(LOG_CONS) != 0 { + fd = Xopen(tls, __ccgo_ts+564, Int32FromInt32(O_WRONLY)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + if fd >= 0 { + Xdprintf(tls, fd, __ccgo_ts+871, VaList(bp+1104, l-*(*int32)(unsafe.Pointer(bp + 1092)), bp+68+uintptr(*(*int32)(unsafe.Pointer(bp + 1092))))) + Xclose(tls, fd) + } + } + if _log_opt&int32(LOG_PERROR) != 0 { + Xdprintf(tls, int32(2), __ccgo_ts+871, VaList(bp+1104, l-*(*int32)(unsafe.Pointer(bp + 1092)), bp+68+uintptr(*(*int32)(unsafe.Pointer(bp + 1092))))) + } + } +} + +func ___vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + if !(_log_mask&(Int32FromInt32(1)<<(priority&Int32FromInt32(7))) != 0) || priority & ^Int32FromInt32(0x3ff) != 0 { + return + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + __vsyslog(tls, priority, message, ap) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func Xsyslog(tls *TLS, priority int32, message uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v priority=%v message=%v va=%v, (%v:)", tls, priority, message, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + ___vsyslog(tls, priority, message, ap) + _ = ap +} + +type Tutsname1 = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + F__domainname [65]uint8 +} + +func Xuname(tls *TLS, uts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uts=%v, (%v:)", tls, uts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_uname), int32(uts)))) +} + +func X__madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_madvise), int32(addr), int32(len1), advice))) +} + +func Xmadvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__madvise(tls, addr, len1, advice) +} + +func Xmincore(tls *TLS, addr uintptr, len1 Tsize_t, vec uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v vec=%v, (%v:)", tls, addr, len1, vec, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mincore), int32(addr), int32(len1), int32(vec)))) +} + +func Xmlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_mlock), int32(addr), int32(len1)))) +} + +func Xmlockall(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_mlockall), flags))) +} + +const OFF_MASK = 4095 +const UNIT = 4096 + +func _dummy5(tls *TLS) { +} + +func X__mmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint64(off)&(-Uint64FromUint64(0x2000)<<(Uint32FromInt32(8)*Uint32FromInt64(4)-Uint32FromInt32(1))|(Uint64FromUint64(4096)-Uint64FromInt32(1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + if len1 >= uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MAP_FIXED) != 0 { + _dummy5(tls) + } + ret = X__syscall6(tls, int32(SYS_mmap2), int32(start), int32(len1), prot, flags, fd, int32(uint64(off)/Uint64FromUint64(4096))) + /* Fixup incorrect EPERM from kernel. */ + if ret == -int32(EPERM) && !(start != 0) && flags&int32(MAP_ANON) != 0 && !(flags&Int32FromInt32(MAP_FIXED) != 0) { + ret = -int32(ENOMEM) + } + return uintptr(X__syscall_ret(tls, uint32(ret))) +} + +func Xmmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mmap(tls, start, len1, prot, flags, fd, off) +} + +func X__mprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, start Tsize_t + _, _ = end, start + start = uint32(addr) & -X__libc.Fpage_size + end = uint32(addr+uintptr(len1)+uintptr(X__libc.Fpage_size)-UintptrFromInt32(1)) & -X__libc.Fpage_size + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mprotect), int32(start), int32(end-start), prot))) +} + +func Xmprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mprotect(tls, addr, len1, prot) +} + +func _dummy6(tls *TLS) { +} + +func X__mremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var new_addr uintptr + _, _ = ap, new_addr + new_addr = uintptr(0) + if new_len >= uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MREMAP_FIXED) != 0 { + _dummy6(tls) + ap = va + new_addr = VaUintptr(&ap) + _ = ap + } + return uintptr(X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_mremap), int32(old_addr), int32(old_len), int32(new_len), flags, int32(new_addr))))) +} + +func Xmremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mremap(tls, old_addr, old_len, new_len, flags, va) +} + +func Xmsync(tls *TLS, start uintptr, len1 Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v flags=%v, (%v:)", tls, start, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_msync), int32(start), int32(len1), flags, 0, 0, 0))) +} + +func Xmunlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_munlock), int32(addr), int32(len1)))) +} + +func Xmunlockall(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_munlockall)))) +} + +func _dummy7(tls *TLS) { +} + +func X__munmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + _dummy7(tls) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_munmap), int32(start), int32(len1)))) +} + +func Xmunmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__munmap(tls, start, len1) +} + +func Xposix_madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + if advice == int32(MADV_DONTNEED) { + return 0 + } + return int32(-X__syscall3(tls, int32(SYS_madvise), int32(addr), int32(len1), advice)) +} + +func X__shm_mapname(tls *TLS, name uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v, (%v:)", tls, name, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1 uintptr + _, _ = p, v1 + for int32(*(*uint8)(unsafe.Pointer(name))) == int32('/') { + name++ + } + v1 = X__strchrnul(tls, name, int32('/')) + p = v1 + if *(*uint8)(unsafe.Pointer(v1)) != 0 || p == name || int32(p)-int32(name) <= int32(2) && int32(*(*uint8)(unsafe.Pointer(name))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('.') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if int32(p)-int32(name) > int32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + _memcpy(tls, buf, __ccgo_ts+876, uint32(9)) + _memcpy(tls, buf+uintptr(9), name, uint32(int32(p)-int32(name)+int32(1))) + return buf +} + +func Xshm_open(tls *TLS, name uintptr, flag int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flag=%v mode=%v, (%v:)", tls, name, flag, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var fd int32 + var v1 uintptr + var _ /* buf at bp+4 */ [265]uint8 + var _ /* cs at bp+0 */ int32 + _, _ = fd, v1 + v1 = X__shm_mapname(tls, name, bp+4) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + fd = Xopen(tls, name, flag|int32(O_NOFOLLOW)|int32(O_CLOEXEC)|int32(O_NONBLOCK), VaList(bp+280, mode)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return fd +} + +func Xshm_unlink(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var v1 uintptr + var _ /* buf at bp+0 */ [265]uint8 + _ = v1 + v1 = X__shm_mapname(tls, name, bp) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + return Xunlink(tls, name) +} + +const SA = 194 +const SB = 244 +const bittab = 0 + +type Tucontext_t4 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +func Xbtowc(tls *TLS, c int32) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, v3 int32 + var v1, v2 uint32 + _, _, _, _ = b, v1, v2, v3 + b = int32(uint8(c)) + if uint32(b) < uint32(128) { + v1 = uint32(b) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) && c != -int32(1) { + v2 = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + } else { + v2 = uint32(0xffffffff) + } + v1 = v2 + } + return v1 +} + +type Tchar16_t = uint16 + +type Tchar32_t = uint32 + +func Xc16rtomb(tls *TLS, s uintptr, c16 Tchar16_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c16=%v ps=%v, (%v:)", tls, s, c16, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wc Twchar_t + var x uintptr + _, _ = wc, x + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state)) + } + x = ps + if !(s != 0) { + if *(*uint32)(unsafe.Pointer(x)) != 0 { + goto ilseq + } + return uint32(1) + } + if !(*(*uint32)(unsafe.Pointer(x)) != 0) && uint32(c16)-uint32(0xd800) < uint32(0x400) { + *(*uint32)(unsafe.Pointer(x)) = uint32((int32(c16) - int32(0xd7c0)) << int32(10)) + return uint32(0) + } + if *(*uint32)(unsafe.Pointer(x)) != 0 { + if uint32(c16)-uint32(0xdc00) >= uint32(0x400) { + goto ilseq + } else { + wc = *(*uint32)(unsafe.Pointer(x)) + uint32(c16) - uint32(0xdc00) + } + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + } else { + wc = uint32(c16) + } + return Xwcrtomb(tls, s, wc, uintptr(0)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +var _internal_state uint32 + +func Xc32rtomb(tls *TLS, s uintptr, c32 Tchar32_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c32=%v ps=%v, (%v:)", tls, s, c32, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcrtomb(tls, s, c32, ps) +} + +func Xmblen(tls *TLS, s uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmbtowc(tls, uintptr(0), s, n) +} + +func Xmbrlen(tls *TLS, s uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v st=%v, (%v:)", tls, s, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if st != 0 { + v1 = st + } else { + v1 = uintptr(unsafe.Pointer(&_internal)) + } + return Xmbrtowc(tls, uintptr(0), s, n, v1) +} + +var _internal uint32 + +func Xmbrtoc16(tls *TLS, pc16 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc16=%v s=%v n=%v ps=%v, (%v:)", tls, pc16, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pending uintptr + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _ = pending, ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state1)) + } + pending = ps + if !(s != 0) { + return Xmbrtoc16(tls, uintptr(0), __ccgo_ts, uint32(1), ps) + } + /* mbrtowc states for partial UTF-8 characters have the high bit set; + * we use nonzero states without high bit for pending surrogates. */ + if int32(*(*uint32)(unsafe.Pointer(pending))) > 0 { + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*uint32)(unsafe.Pointer(pending))) + } + *(*uint32)(unsafe.Pointer(pending)) = uint32(0) + return uint32(-Int32FromInt32(3)) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint32(4) { + if *(*Twchar_t)(unsafe.Pointer(bp)) >= uint32(0x10000) { + *(*uint32)(unsafe.Pointer(pending)) = *(*Twchar_t)(unsafe.Pointer(bp))&uint32(0x3ff) + uint32(0xdc00) + *(*Twchar_t)(unsafe.Pointer(bp)) = uint32(0xd7c0) + *(*Twchar_t)(unsafe.Pointer(bp))>>Int32FromInt32(10) + } + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + return ret +} + +var _internal_state1 uint32 + +func Xmbrtoc32(tls *TLS, pc32 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc32=%v s=%v n=%v ps=%v, (%v:)", tls, pc32, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _ = ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state2)) + } + if !(s != 0) { + return Xmbrtoc32(tls, uintptr(0), __ccgo_ts, uint32(1), ps) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint32(4) && pc32 != 0 { + *(*Tchar32_t)(unsafe.Pointer(pc32)) = *(*Twchar_t)(unsafe.Pointer(bp)) + } + return ret +} + +var _internal_state2 uint32 + +func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N Tsize_t + var c uint32 + var s, v3, v4 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = N, c, s, v1, v2, v3, v4 + s = src + N = n + if !(st != 0) { + st = uintptr(unsafe.Pointer(&_internal_state3)) + } + c = *(*uint32)(unsafe.Pointer(st)) + if !(s != 0) { + if c != 0 { + goto ilseq + } + return uint32(0) + } else { + if !(wc != 0) { + wc = bp + } + } + if !(n != 0) { + return uint32(-Int32FromInt32(2)) + } + if !(c != 0) { + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = uint32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolUint32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = uint32(Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s))))) + return Uint32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + n-- + } + if n != 0 { + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + goto loop + loop: + ; + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + goto loop + } + } + *(*uint32)(unsafe.Pointer(st)) = c + return uint32(-Int32FromInt32(2)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +var _internal_state3 uint32 + +func Xmbsinit(tls *TLS, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(st != 0) || !(*(*uint32)(unsafe.Pointer(st)) != 0)) +} + +func Xmbsnrtowcs(tls *TLS, wcs uintptr, src uintptr, n Tsize_t, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v src=%v n=%v wn=%v st=%v, (%v:)", tls, wcs, src, n, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + var cnt, l, n2, v1 Tsize_t + var tmp_s, ws uintptr + var v2 bool + var v3 uint32 + var _ /* s at bp+1024 */ uintptr + var _ /* wbuf at bp+0 */ [256]Twchar_t + _, _, _, _, _, _, _, _ = cnt, l, n2, tmp_s, ws, v1, v2, v3 + cnt = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 1024)) = *(*uintptr)(unsafe.Pointer(src)) + if !(wcs != 0) { + ws = bp + wn = Uint32FromInt64(1024) / Uint32FromInt64(4) + } else { + ws = wcs + } + /* making sure output buffer size is at most n/4 will ensure + * that mbsrtowcs never reads more than n input bytes. thus + * we can use mbsrtowcs as long as it's practical.. */ + for { + if v2 = *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 && wn != 0; v2 { + v1 = n / Uint32FromInt32(4) + n2 = v1 + } + if !(v2 && (v1 >= wn || n2 > uint32(32))) { + break + } + if n2 >= wn { + n2 = wn + } + tmp_s = *(*uintptr)(unsafe.Pointer(bp + 1024)) + l = Xmbsrtowcs(tls, ws, bp+1024, n2, st) + if !(l+Uint32FromInt32(1) != 0) { + cnt = l + wn = uint32(0) + break + } + if ws != bp { + ws += uintptr(l) * 4 + wn -= l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + v3 = n - uint32(int32(*(*uintptr)(unsafe.Pointer(bp + 1024)))-int32(tmp_s)) + } else { + v3 = uint32(0) + } + n = v3 + cnt += l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + for wn != 0 && n != 0 { + l = Xmbrtowc(tls, ws, *(*uintptr)(unsafe.Pointer(bp + 1024)), n, st) + if l+uint32(2) <= uint32(2) { + if !(l+Uint32FromInt32(1) != 0) { + cnt = l + break + } + if !(l != 0) { + *(*uintptr)(unsafe.Pointer(bp + 1024)) = uintptr(0) + break + } + /* have to roll back partial character */ + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + break + } + *(*uintptr)(unsafe.Pointer(bp + 1024)) += uintptr(l) + n -= l + /* safe - this loop runs fewer than sizeof(wbuf)/8 times */ + ws += 4 + wn-- + cnt++ + } + } + if wcs != 0 { + *(*uintptr)(unsafe.Pointer(src)) = *(*uintptr)(unsafe.Pointer(bp + 1024)) + } + return cnt +} + +func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v ws=%v src=%v wn=%v st=%v, (%v:)", tls, ws, src, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 uint32 + var s, v12, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v5, v6 uintptr + var wn0 Tsize_t + var v2 bool + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, s, wn0, v1, v12, v16, v17, v18, v19, v2, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v3, v30, v5, v6 + s = *(*uintptr)(unsafe.Pointer(src)) + wn0 = wn + c = uint32(0) + if v2 = st != 0; v2 { + v1 = *(*uint32)(unsafe.Pointer(st)) + c = v1 + } + if v2 && v1 != 0 { + if ws != 0 { + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + goto resume + } else { + goto resume0 + } + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + if !(ws != 0) { + return Xstrlen(tls, s) + } + for { + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + v5 = s + s++ + c = uint32(*(*uint8)(unsafe.Pointer(v5))) + v6 = ws + ws += 4 + *(*Twchar_t)(unsafe.Pointer(v6)) = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + wn-- + goto _4 + _4: + } + *(*Twchar_t)(unsafe.Pointer(ws)) = uint32(0) + *(*uintptr)(unsafe.Pointer(src)) = uintptr(0) + return wn0 - wn + } + if !!(ws != 0) { + goto _7 + } +_11: + ; + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint32(s)%uint32(4) == uint32(0) { + for !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + s += uintptr(4) + wn -= uint32(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + s++ + wn-- + goto _10 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _9 + } + v12 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v12)))-uint32(0xc2)] + goto resume0 +resume0: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(2) + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(3) + goto _9 + } + s++ + } + } + wn-- + c = uint32(0) + goto _10 +_10: + ; + goto _11 + goto _9 +_9: + ; + goto _8 +_7: + ; +_15: + ; + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint32(s)%uint32(4) == uint32(0) { + for wn >= uint32(5) && !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + v16 = ws + ws += 4 + v17 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v16)) = uint32(*(*uint8)(unsafe.Pointer(v17))) + v18 = ws + ws += 4 + v19 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v18)) = uint32(*(*uint8)(unsafe.Pointer(v19))) + v20 = ws + ws += 4 + v21 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v20)) = uint32(*(*uint8)(unsafe.Pointer(v21))) + v22 = ws + ws += 4 + v23 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v22)) = uint32(*(*uint8)(unsafe.Pointer(v23))) + wn -= uint32(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + v24 = ws + ws += 4 + v25 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v24)) = uint32(*(*uint8)(unsafe.Pointer(v25))) + wn-- + goto _14 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _13 + } + v26 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v26)))-uint32(0xc2)] + goto resume +resume: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _13 + } + v27 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(2) + goto _13 + } + v28 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(3) + goto _13 + } + v29 = s + s++ + c = c< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _s + return Xmbsrtowcs(tls, ws, bp, wn, uintptr(0)) +} + +func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v, (%v:)", tls, wc, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c uint32 + var s, v3, v4, v5, v6 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _ = c, s, v1, v2, v3, v4, v5, v6 + s = src + if !(s != 0) { + return 0 + } + if !(n != 0) { + goto ilseq + } + if !(wc != 0) { + wc = bp + } + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = uint32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolInt32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = uint32(Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s))))) + return Int32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + /* Avoid excessive checks against n: If shifting the state n-1 + * times does not clear the high bit, then the value of n is + * insufficient to read a character */ + if n < uint32(4) && c<<(uint32(6)*n-uint32(6))&(Uint32FromUint32(1)<>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v5 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v6 = s + s++ + *(*Twchar_t)(unsafe.Pointer(wc)) = c< %v", r) }() + } + var v1 int32 + var v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if !(s != 0) { + return uint32(1) + } + if wc < uint32(0x80) { + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint32(1) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) { + if !(wc-Uint32FromInt32(0xdf80) < Uint32FromInt32(0x80)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint32(1) + } else { + if wc < uint32(0x800) { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32(0xc0) | wc>>Int32FromInt32(6)) + *(*uint8)(unsafe.Pointer(s)) = uint8(uint32(0x80) | wc&uint32(0x3f)) + return uint32(2) + } else { + if wc < uint32(0xd800) || wc-uint32(0xe000) < uint32(0x2000) { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(uint32(0xe0) | wc>>Int32FromInt32(12)) + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(uint32(0x80) | wc>>Int32FromInt32(6)&uint32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(uint32(0x80) | wc&uint32(0x3f)) + return uint32(3) + } else { + if wc-uint32(0x10000) < uint32(0x100000) { + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(uint32(0xf0) | wc>>Int32FromInt32(18)) + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(uint32(0x80) | wc>>Int32FromInt32(12)&uint32(0x3f)) + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(uint32(0x80) | wc>>Int32FromInt32(6)&uint32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(uint32(0x80) | wc&uint32(0x3f)) + return uint32(4) + } + } + } + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint32(-Int32FromInt32(1)) +} + +func Xwcsnrtombs(tls *TLS, dst uintptr, wcs uintptr, wn Tsize_t, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dst=%v wcs=%v wn=%v n=%v st=%v, (%v:)", tls, dst, wcs, wn, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt, l Tsize_t + var ws, v1 uintptr + var _ /* tmp at bp+0 */ [4]uint8 + _, _, _, _ = cnt, l, ws, v1 + ws = *(*uintptr)(unsafe.Pointer(wcs)) + cnt = uint32(0) + if !(dst != 0) { + n = uint32(0) + } + for ws != 0 && wn != 0 { + if n < uint32(MB_LEN_MAX) { + v1 = bp + } else { + v1 = dst + } + l = Xwcrtomb(tls, v1, *(*Twchar_t)(unsafe.Pointer(ws)), uintptr(0)) + if l == uint32(-Int32FromInt32(1)) { + cnt = uint32(-Int32FromInt32(1)) + break + } + if dst != 0 { + if n < uint32(MB_LEN_MAX) { + if l > n { + break + } + _memcpy(tls, dst, bp, l) + } + dst += uintptr(l) + n -= l + } + if !(*(*Twchar_t)(unsafe.Pointer(ws)) != 0) { + ws = uintptr(0) + break + } + ws += 4 + wn-- + cnt += l + } + if dst != 0 { + *(*uintptr)(unsafe.Pointer(wcs)) = ws + } + return cnt +} + +func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N, l Tsize_t + var ws2, v2, v3 uintptr + var _ /* buf at bp+0 */ [4]uint8 + _, _, _, _, _ = N, l, ws2, v2, v3 + N = n + if !(s != 0) { + n = uint32(0) + ws2 = *(*uintptr)(unsafe.Pointer(ws)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(ws2)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(ws2)) >= uint32(0x80) { + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(ws2)), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + n += l + } else { + n++ + } + goto _1 + _1: + ; + ws2 += 4 + } + return n + } + for n >= uint32(4) { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + s += uintptr(l) + n -= l + } else { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + for n != 0 { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint32FromInt32(1) != 0) { + return uint32(-Int32FromInt32(1)) + } + if l > n { + return N - n + } + Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + s += uintptr(l) + n -= l + } else { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + return N +} + +func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = ws + return Xwcsrtombs(tls, s, bp, n, uintptr(0)) +} + +func Xwctob(tls *TLS, c Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if c < uint32(128) { + return int32(c) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) && c-uint32(0xdf80) < uint32(0x80) { + return int32(uint8(c)) + } + return -int32(1) +} + +func Xwctomb(tls *TLS, s uintptr, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v wc=%v, (%v:)", tls, s, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(s != 0) { + return 0 + } + return int32(Xwcrtomb(tls, s, wc, uintptr(0))) +} + +func Xaccept(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_accept) + _ = int32(__SC_accept) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +type Tucred = struct { + Fpid Tpid_t + Fuid Tuid_t + Fgid Tgid_t +} + +type Tmmsghdr = struct { + Fmsg_hdr Tmsghdr + Fmsg_len uint32 +} + +func Xaccept4(tls *TLS, fd int32, addr uintptr, len1 uintptr, flg int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v flg=%v, (%v:)", tls, fd, addr, len1, flg, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, ret, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _ = r, ret, v1, v2, v3, v4, v5, v6, v7, v8 + if !(flg != 0) { + return Xaccept(tls, fd, addr, len1) + } + v1 = int32(SYS_accept4) + _ = int32(__SC_accept4) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = flg + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + ret = X__syscall_ret(tls, uint32(v8)) + if ret >= 0 || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return ret + } + if flg & ^(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + ret = Xaccept(tls, fd, addr, len1) + if ret < 0 { + return ret + } + if flg&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flg&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), ret, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + return ret +} + +func Xbind(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_bind) + _ = int32(__SC_bind) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xconnect(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_connect) + _ = int32(__SC_connect) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +const ADD = 0 +const C_ANY = 0 +const C_CHAOS = 0 +const C_HS = 0 +const C_IN = 0 +const C_NONE = 0 +const DELETE = 0 +const FORMERR = 0 +const GETLONG = 0 +const GETSHORT = 0 +const HFIXEDSZ = 12 +const IN6ADDRSZ = 16 +const INADDRSZ = 4 +const INDIR_MASK = 192 +const INET6_ADDRSTRLEN = 46 +const INET_ADDRSTRLEN = 16 +const INT16SZ = 2 +const INT32SZ = 4 +const INT8SZ = 1 +const IN_CLASSA_HOST = 16777215 +const IN_CLASSA_MAX = 128 +const IN_CLASSA_NET = 4278190080 +const IN_CLASSA_NSHIFT = 24 +const IN_CLASSB_HOST = 65535 +const IN_CLASSB_MAX = 65536 +const IN_CLASSB_NET = 4294901760 +const IN_CLASSB_NSHIFT = 16 +const IN_CLASSC_HOST = 255 +const IN_CLASSC_NET = 4294967040 +const IN_CLASSC_NSHIFT = 8 +const IN_LOOPBACKNET = 127 +const IPPORT_RESERVED = 1024 +const IPPROTO_AH = 51 +const IPPROTO_BEETPH = 94 +const IPPROTO_COMP = 108 +const IPPROTO_DCCP = 33 +const IPPROTO_DSTOPTS = 60 +const IPPROTO_EGP = 8 +const IPPROTO_ENCAP = 98 +const IPPROTO_ESP = 50 +const IPPROTO_ETHERNET = 143 +const IPPROTO_FRAGMENT = 44 +const IPPROTO_GRE = 47 +const IPPROTO_HOPOPTS = 0 +const IPPROTO_ICMP = 1 +const IPPROTO_ICMPV6 = 58 +const IPPROTO_IDP = 22 +const IPPROTO_IGMP = 2 +const IPPROTO_IP = 0 +const IPPROTO_IPIP = 4 +const IPPROTO_IPV6 = 41 +const IPPROTO_MAX = 263 +const IPPROTO_MH = 135 +const IPPROTO_MPLS = 137 +const IPPROTO_MPTCP = 262 +const IPPROTO_MTP = 92 +const IPPROTO_NONE = 59 +const IPPROTO_PIM = 103 +const IPPROTO_PUP = 12 +const IPPROTO_RAW = 255 +const IPPROTO_ROUTING = 43 +const IPPROTO_RSVP = 46 +const IPPROTO_SCTP = 132 +const IPPROTO_TCP = 6 +const IPPROTO_TP = 29 +const IPPROTO_UDP = 17 +const IPPROTO_UDPLITE = 136 +const IPV6_2292DSTOPTS = 4 +const IPV6_2292HOPLIMIT = 8 +const IPV6_2292HOPOPTS = 3 +const IPV6_2292PKTINFO = 2 +const IPV6_2292PKTOPTIONS = 6 +const IPV6_2292RTHDR = 5 +const IPV6_ADDRFORM = 1 +const IPV6_ADDR_PREFERENCES = 72 +const IPV6_ADD_MEMBERSHIP = 20 +const IPV6_AUTHHDR = 10 +const IPV6_AUTOFLOWLABEL = 70 +const IPV6_CHECKSUM = 7 +const IPV6_DONTFRAG = 62 +const IPV6_DROP_MEMBERSHIP = 21 +const IPV6_DSTOPTS = 59 +const IPV6_FREEBIND = 78 +const IPV6_HDRINCL = 36 +const IPV6_HOPLIMIT = 52 +const IPV6_HOPOPTS = 54 +const IPV6_IPSEC_POLICY = 34 +const IPV6_JOIN_ANYCAST = 27 +const IPV6_JOIN_GROUP = 20 +const IPV6_LEAVE_ANYCAST = 28 +const IPV6_LEAVE_GROUP = 21 +const IPV6_MINHOPCOUNT = 73 +const IPV6_MTU = 24 +const IPV6_MTU_DISCOVER = 23 +const IPV6_MULTICAST_ALL = 29 +const IPV6_MULTICAST_HOPS = 18 +const IPV6_MULTICAST_IF = 17 +const IPV6_MULTICAST_LOOP = 19 +const IPV6_NEXTHOP = 9 +const IPV6_ORIGDSTADDR = 74 +const IPV6_PATHMTU = 61 +const IPV6_PKTINFO = 50 +const IPV6_PMTUDISC_DO = 2 +const IPV6_PMTUDISC_DONT = 0 +const IPV6_PMTUDISC_INTERFACE = 4 +const IPV6_PMTUDISC_OMIT = 5 +const IPV6_PMTUDISC_PROBE = 3 +const IPV6_PMTUDISC_WANT = 1 +const IPV6_PREFER_SRC_CGA = 8 +const IPV6_PREFER_SRC_COA = 4 +const IPV6_PREFER_SRC_HOME = 1024 +const IPV6_PREFER_SRC_NONCGA = 2048 +const IPV6_PREFER_SRC_PUBLIC = 2 +const IPV6_PREFER_SRC_PUBTMP_DEFAULT = 256 +const IPV6_PREFER_SRC_TMP = 1 +const IPV6_RECVDSTOPTS = 58 +const IPV6_RECVERR = 25 +const IPV6_RECVFRAGSIZE = 77 +const IPV6_RECVHOPLIMIT = 51 +const IPV6_RECVHOPOPTS = 53 +const IPV6_RECVORIGDSTADDR = 74 +const IPV6_RECVPATHMTU = 60 +const IPV6_RECVPKTINFO = 49 +const IPV6_RECVRTHDR = 56 +const IPV6_RECVTCLASS = 66 +const IPV6_ROUTER_ALERT = 22 +const IPV6_ROUTER_ALERT_ISOLATE = 30 +const IPV6_RTHDR = 57 +const IPV6_RTHDRDSTOPTS = 55 +const IPV6_RTHDR_LOOSE = 0 +const IPV6_RTHDR_STRICT = 1 +const IPV6_RTHDR_TYPE_0 = 0 +const IPV6_RXDSTOPTS = 59 +const IPV6_RXHOPOPTS = 54 +const IPV6_TCLASS = 67 +const IPV6_TRANSPARENT = 75 +const IPV6_UNICAST_HOPS = 16 +const IPV6_UNICAST_IF = 76 +const IPV6_V6ONLY = 26 +const IPV6_XFRM_POLICY = 35 +const IP_ADD_MEMBERSHIP = 35 +const IP_ADD_SOURCE_MEMBERSHIP = 39 +const IP_BIND_ADDRESS_NO_PORT = 24 +const IP_BLOCK_SOURCE = 38 +const IP_CHECKSUM = 23 +const IP_DEFAULT_MULTICAST_LOOP = 1 +const IP_DEFAULT_MULTICAST_TTL = 1 +const IP_DROP_MEMBERSHIP = 36 +const IP_DROP_SOURCE_MEMBERSHIP = 40 +const IP_FREEBIND = 15 +const IP_HDRINCL = 3 +const IP_IPSEC_POLICY = 16 +const IP_MAX_MEMBERSHIPS = 20 +const IP_MINTTL = 21 +const IP_MSFILTER = 41 +const IP_MTU = 14 +const IP_MTU_DISCOVER = 10 +const IP_MULTICAST_ALL = 49 +const IP_MULTICAST_IF = 32 +const IP_MULTICAST_LOOP = 34 +const IP_MULTICAST_TTL = 33 +const IP_NODEFRAG = 22 +const IP_OPTIONS = 4 +const IP_ORIGDSTADDR = 20 +const IP_PASSSEC = 18 +const IP_PKTINFO = 8 +const IP_PKTOPTIONS = 9 +const IP_PMTUDISC = 10 +const IP_PMTUDISC_DO = 2 +const IP_PMTUDISC_DONT = 0 +const IP_PMTUDISC_INTERFACE = 4 +const IP_PMTUDISC_OMIT = 5 +const IP_PMTUDISC_PROBE = 3 +const IP_PMTUDISC_WANT = 1 +const IP_RECVERR = 11 +const IP_RECVERR_RFC4884 = 26 +const IP_RECVFRAGSIZE = 25 +const IP_RECVOPTS = 6 +const IP_RECVORIGDSTADDR = 20 +const IP_RECVRETOPTS = 7 +const IP_RECVTOS = 13 +const IP_RECVTTL = 12 +const IP_RETOPTS = 7 +const IP_ROUTER_ALERT = 5 +const IP_TOS = 1 +const IP_TRANSPARENT = 19 +const IP_TTL = 2 +const IP_UNBLOCK_SOURCE = 37 +const IP_UNICAST_IF = 50 +const IP_XFRM_POLICY = 17 +const IQUERY = 0 +const LOCALDOMAINPARTS = 2 +const MAXCDNAME = 255 +const MAXDFLSRCH = 3 +const MAXDNAME = 1025 +const MAXDNSRCH = 6 +const MAXLABEL = 63 +const MAXNS = 3 +const MAXRESOLVSORT = 10 +const NAMESERVER_PORT = 53 +const NOERROR = 0 +const NOTAUTH = 0 +const NOTIMP = 0 +const NOTZONE = 0 +const NS_ALG_DH = 2 +const NS_ALG_DSA = 3 +const NS_ALG_DSS = 3 +const NS_ALG_EXPIRE_ONLY = 253 +const NS_ALG_MD5RSA = 1 +const NS_ALG_PRIVATE_OID = 254 +const NS_CMPRSFLGS = 192 +const NS_DEFAULTPORT = 53 +const NS_DSA_MAX_BYTES = 405 +const NS_DSA_MIN_SIZE = 213 +const NS_DSA_SIG_SIZE = 41 +const NS_HFIXEDSZ = 12 +const NS_IN6ADDRSZ = 16 +const NS_INADDRSZ = 4 +const NS_INT16SZ = 2 +const NS_INT32SZ = 4 +const NS_INT8SZ = 1 +const NS_KEY_EXTENDED_FLAGS = 4096 +const NS_KEY_NAME_ENTITY = 512 +const NS_KEY_NAME_RESERVED = 768 +const NS_KEY_NAME_TYPE = 768 +const NS_KEY_NAME_USER = 0 +const NS_KEY_NAME_ZONE = 256 +const NS_KEY_NO_AUTH = 32768 +const NS_KEY_NO_CONF = 16384 +const NS_KEY_PROT_ANY = 255 +const NS_KEY_PROT_DNSSEC = 3 +const NS_KEY_PROT_EMAIL = 2 +const NS_KEY_PROT_IPSEC = 4 +const NS_KEY_PROT_TLS = 1 +const NS_KEY_RESERVED10 = 32 +const NS_KEY_RESERVED11 = 16 +const NS_KEY_RESERVED2 = 8192 +const NS_KEY_RESERVED4 = 2048 +const NS_KEY_RESERVED5 = 1024 +const NS_KEY_RESERVED8 = 128 +const NS_KEY_RESERVED9 = 64 +const NS_KEY_RESERVED_BITMASK = 11504 +const NS_KEY_RESERVED_BITMASK2 = 65535 +const NS_KEY_SIGNATORYMASK = 15 +const NS_KEY_TYPEMASK = 49152 +const NS_KEY_TYPE_AUTH_CONF = 0 +const NS_KEY_TYPE_AUTH_ONLY = 16384 +const NS_KEY_TYPE_CONF_ONLY = 32768 +const NS_KEY_TYPE_NO_KEY = 49152 +const NS_MAXCDNAME = 255 +const NS_MAXDNAME = 1025 +const NS_MAXLABEL = 63 +const NS_MAXMSG = 65535 +const NS_MD5RSA_MAX_BASE64 = 10928 +const NS_MD5RSA_MAX_BITS = 4096 +const NS_MD5RSA_MAX_BYTES = 8195 +const NS_MD5RSA_MAX_SIZE = 512 +const NS_MD5RSA_MIN_BITS = 512 +const NS_MD5RSA_MIN_SIZE = 64 +const NS_NOTIFY_OP = 0 +const NS_NXT_BITS = 8 +const NS_NXT_MAX = 127 +const NS_OPT_DNSSEC_OK = 32768 +const NS_OPT_NSID = 3 +const NS_PACKETSZ = 512 +const NS_QFIXEDSZ = 4 +const NS_RRFIXEDSZ = 10 +const NS_SIG_ALG = 2 +const NS_SIG_EXPIR = 8 +const NS_SIG_FOOT = 16 +const NS_SIG_LABELS = 3 +const NS_SIG_OTTL = 4 +const NS_SIG_SIGNED = 12 +const NS_SIG_SIGNER = 18 +const NS_SIG_TYPE = 0 +const NS_TSIG_ALG_HMAC_MD5 = "HMAC-MD5.SIG-ALG.REG.INT" +const NS_TSIG_ERROR_FORMERR = -12 +const NS_TSIG_ERROR_NO_SPACE = -11 +const NS_TSIG_ERROR_NO_TSIG = -10 +const NS_TSIG_FUDGE = 300 +const NS_TSIG_TCP_COUNT = 100 +const NS_UPDATE_OP = 0 +const NXDOMAIN = 0 +const NXRRSET = 0 +const PACKETSZ = 512 +const PRIX16 = "X" +const PRIX32 = "X" +const PRIX8 = "X" +const PRIXFAST16 = "X" +const PRIXFAST32 = "X" +const PRIXFAST8 = "X" +const PRIXLEAST16 = "X" +const PRIXLEAST32 = "X" +const PRIXLEAST8 = "X" +const PRId16 = "d" +const PRId32 = "d" +const PRId8 = "d" +const PRIdFAST16 = "d" +const PRIdFAST32 = "d" +const PRIdFAST8 = "d" +const PRIdLEAST16 = "d" +const PRIdLEAST32 = "d" +const PRIdLEAST8 = "d" +const PRIi16 = "i" +const PRIi32 = "i" +const PRIi8 = "i" +const PRIiFAST16 = "i" +const PRIiFAST32 = "i" +const PRIiFAST8 = "i" +const PRIiLEAST16 = "i" +const PRIiLEAST32 = "i" +const PRIiLEAST8 = "i" +const PRIo16 = "o" +const PRIo32 = "o" +const PRIo8 = "o" +const PRIoFAST16 = "o" +const PRIoFAST32 = "o" +const PRIoFAST8 = "o" +const PRIoLEAST16 = "o" +const PRIoLEAST32 = "o" +const PRIoLEAST8 = "o" +const PRIu16 = "u" +const PRIu32 = "u" +const PRIu8 = "u" +const PRIuFAST16 = "u" +const PRIuFAST32 = "u" +const PRIuFAST8 = "u" +const PRIuLEAST16 = "u" +const PRIuLEAST32 = "u" +const PRIuLEAST8 = "u" +const PRIx16 = "x" +const PRIx32 = "x" +const PRIx8 = "x" +const PRIxFAST16 = "x" +const PRIxFAST32 = "x" +const PRIxFAST8 = "x" +const PRIxLEAST16 = "x" +const PRIxLEAST32 = "x" +const PRIxLEAST8 = "x" +const PUTLONG = 0 +const PUTSHORT = 0 +const QFIXEDSZ = 4 +const QUERY = 0 +const REFUSED = 0 +const RES_AAONLY = 4 +const RES_BLAST = 131072 +const RES_DEBUG = 2 +const RES_DEFAULT = 524992 +const RES_DEFNAMES = 128 +const RES_DFLRETRY = 2 +const RES_DNSRCH = 512 +const RES_EXHAUSTIVE = 1 +const RES_F_CONN = 2 +const RES_F_EDNS0ERR = 4 +const RES_F_VC = 1 +const RES_IGNTC = 32 +const RES_INIT = 1 +const RES_INSECURE1 = 1024 +const RES_INSECURE2 = 2048 +const RES_KEEPTSIG = 65536 +const RES_MAXNDOTS = 15 +const RES_MAXRETRANS = 30 +const RES_MAXRETRY = 5 +const RES_MAXTIME = 65535 +const RES_NOALIASES = 4096 +const RES_NOCHECKNAME = 32768 +const RES_NOIP6DOTINT = 524288 +const RES_PRF_ADD = 128 +const RES_PRF_ANS = 32 +const RES_PRF_AUTH = 64 +const RES_PRF_CLASS = 4 +const RES_PRF_CMD = 8 +const RES_PRF_HEAD1 = 256 +const RES_PRF_HEAD2 = 512 +const RES_PRF_HEADX = 2048 +const RES_PRF_INIT = 16384 +const RES_PRF_QUERY = 4096 +const RES_PRF_QUES = 16 +const RES_PRF_REPLY = 8192 +const RES_PRF_STATS = 1 +const RES_PRF_TTLID = 1024 +const RES_PRF_UPDATE = 2 +const RES_PRIMARY = 16 +const RES_RECURSE = 64 +const RES_ROTATE = 16384 +const RES_SNGLKUP = 2097152 +const RES_SNGLKUPREOP = 4194304 +const RES_STAYOPEN = 256 +const RES_TIMEOUT = 5 +const RES_USEBSTRING = 262144 +const RES_USEVC = 8 +const RES_USE_DNSSEC = 8388608 +const RES_USE_EDNS0 = 1048576 +const RES_USE_INET6 = 8192 +const RRFIXEDSZ = 10 +const SCNd16 = "hd" +const SCNd32 = "d" +const SCNd8 = "hhd" +const SCNdFAST16 = "d" +const SCNdFAST32 = "d" +const SCNdFAST8 = "hhd" +const SCNdLEAST16 = "hd" +const SCNdLEAST32 = "d" +const SCNdLEAST8 = "hhd" +const SCNi16 = "hi" +const SCNi32 = "i" +const SCNi8 = "hhi" +const SCNiFAST16 = "i" +const SCNiFAST32 = "i" +const SCNiFAST8 = "hhi" +const SCNiLEAST16 = "hi" +const SCNiLEAST32 = "i" +const SCNiLEAST8 = "hhi" +const SCNo16 = "ho" +const SCNo32 = "o" +const SCNo8 = "hho" +const SCNoFAST16 = "o" +const SCNoFAST32 = "o" +const SCNoFAST8 = "hho" +const SCNoLEAST16 = "ho" +const SCNoLEAST32 = "o" +const SCNoLEAST8 = "hho" +const SCNu16 = "hu" +const SCNu32 = "u" +const SCNu8 = "hhu" +const SCNuFAST16 = "u" +const SCNuFAST32 = "u" +const SCNuFAST8 = "hhu" +const SCNuLEAST16 = "hu" +const SCNuLEAST32 = "u" +const SCNuLEAST8 = "hhu" +const SCNx16 = "hx" +const SCNx32 = "x" +const SCNx8 = "hhx" +const SCNxFAST16 = "x" +const SCNxFAST32 = "x" +const SCNxFAST8 = "hhx" +const SCNxLEAST16 = "hx" +const SCNxLEAST32 = "x" +const SCNxLEAST8 = "hhx" +const SERVFAIL = 0 +const STATUS = 0 +const S_ADDT = 0 +const S_PREREQ = 0 +const S_UPDATE = 0 +const S_ZONE = 0 +const T_A = 0 +const T_A6 = 0 +const T_AAAA = 0 +const T_AFSDB = 0 +const T_ANY = 0 +const T_ATMA = 0 +const T_AVC = 0 +const T_AXFR = 0 +const T_CAA = 0 +const T_CDNSKEY = 0 +const T_CDS = 0 +const T_CNAME = 0 +const T_CSYNC = 0 +const T_DHCID = 0 +const T_DLV = 0 +const T_DNAME = 0 +const T_DNSKEY = 0 +const T_DS = 0 +const T_EID = 0 +const T_EUI48 = 0 +const T_EUI64 = 0 +const T_GID = 0 +const T_GPOS = 0 +const T_HINFO = 0 +const T_HIP = 0 +const T_IPSECKEY = 0 +const T_ISDN = 0 +const T_IXFR = 0 +const T_KEY = 0 +const T_L32 = 0 +const T_L64 = 0 +const T_LOC = 0 +const T_LP = 0 +const T_MAILA = 0 +const T_MAILB = 0 +const T_MB = 0 +const T_MD = 0 +const T_MF = 0 +const T_MG = 0 +const T_MINFO = 0 +const T_MR = 0 +const T_MX = 0 +const T_NAPTR = 0 +const T_NID = 0 +const T_NIMLOC = 0 +const T_NINFO = 0 +const T_NS = 0 +const T_NSAP = 0 +const T_NSAP_PTR = 0 +const T_NSEC = 0 +const T_NSEC3 = 0 +const T_NSEC3PARAM = 0 +const T_NULL = 0 +const T_NXT = 0 +const T_OPENPGPKEY = 0 +const T_PTR = 0 +const T_PX = 0 +const T_RKEY = 0 +const T_RP = 0 +const T_RRSIG = 0 +const T_RT = 0 +const T_SIG = 0 +const T_SMIMEA = 0 +const T_SOA = 0 +const T_SPF = 0 +const T_SRV = 0 +const T_SSHFP = 0 +const T_TA = 0 +const T_TALINK = 0 +const T_TKEY = 0 +const T_TLSA = 0 +const T_TSIG = 0 +const T_TXT = 0 +const T_UID = 0 +const T_UINFO = 0 +const T_UNSPEC = 0 +const T_URI = 0 +const T_WKS = 0 +const T_X25 = 0 +const YXDOMAIN = 0 +const YXRRSET = 0 +const _PATH_RESCONF = "/etc/resolv.conf" +const __BIND = 19950621 +const __NAMESER = 19991006 +const __PRI64 = "ll" +const __PRIPTR = "" +const __RES = 19960801 +const __UAPI_DEF_IN6_ADDR = 0 +const __UAPI_DEF_IN6_ADDR_ALT = 0 +const __UAPI_DEF_IN6_PKTINFO = 0 +const __UAPI_DEF_IN_ADDR = 0 +const __UAPI_DEF_IN_CLASS = 0 +const __UAPI_DEF_IN_IPPROTO = 0 +const __UAPI_DEF_IN_PKTINFO = 0 +const __UAPI_DEF_IP6_MTUINFO = 0 +const __UAPI_DEF_IPPROTO_V6 = 0 +const __UAPI_DEF_IPV6_MREQ = 0 +const __UAPI_DEF_IPV6_OPTIONS = 0 +const __UAPI_DEF_IP_MREQ = 0 +const __UAPI_DEF_SOCKADDR_IN = 0 +const __UAPI_DEF_SOCKADDR_IN6 = 0 +const _res = 0 + +type Tns_sect = int32 + +type ___ns_sect = int32 + +const _ns_s_qd = 0 +const _ns_s_zn = 0 +const _ns_s_an = 1 +const _ns_s_pr = 1 +const _ns_s_ns = 2 +const _ns_s_ud = 2 +const _ns_s_ar = 3 +const _ns_s_max = 4 + +type Tns_msg = struct { + F_msg uintptr + F_eom uintptr + F_id Tuint16_t + F_flags Tuint16_t + F_counts [4]Tuint16_t + F_sections [4]uintptr + F_sect Tns_sect + F_rrnum int32 + F_msg_ptr uintptr +} + +type t__ns_msg = Tns_msg + +type T_ns_flagdata = struct { + Fmask int32 + Fshift int32 +} + +type Tns_rr = struct { + Fname [1025]uint8 + Ftype1 Tuint16_t + Frr_class Tuint16_t + Fttl Tuint32_t + Frdlength Tuint16_t + Frdata uintptr +} + +type t__ns_rr = Tns_rr + +type Tns_flag = int32 + +type ___ns_flag = int32 + +const _ns_f_qr = 0 +const _ns_f_opcode = 1 +const _ns_f_aa = 2 +const _ns_f_tc = 3 +const _ns_f_rd = 4 +const _ns_f_ra = 5 +const _ns_f_z = 6 +const _ns_f_ad = 7 +const _ns_f_cd = 8 +const _ns_f_rcode = 9 +const _ns_f_max = 10 + +type Tns_opcode = int32 + +type ___ns_opcode = int32 + +const _ns_o_query = 0 +const _ns_o_iquery = 1 +const _ns_o_status = 2 +const _ns_o_notify = 4 +const _ns_o_update = 5 +const _ns_o_max = 6 + +type Tns_rcode = int32 + +type ___ns_rcode = int32 + +const _ns_r_noerror = 0 +const _ns_r_formerr = 1 +const _ns_r_servfail = 2 +const _ns_r_nxdomain = 3 +const _ns_r_notimpl = 4 +const _ns_r_refused = 5 +const _ns_r_yxdomain = 6 +const _ns_r_yxrrset = 7 +const _ns_r_nxrrset = 8 +const _ns_r_notauth = 9 +const _ns_r_notzone = 10 +const _ns_r_max = 11 +const _ns_r_badvers = 16 +const _ns_r_badsig = 16 +const _ns_r_badkey = 17 +const _ns_r_badtime = 18 + +type Tns_update_operation = int32 + +type ___ns_update_operation = int32 + +const _ns_uop_delete = 0 +const _ns_uop_add = 1 +const _ns_uop_max = 2 + +type Tns_tsig_key1 = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tsig_key = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tcp_tsig_state1 = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_tcp_tsig_state = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_type = int32 + +type ___ns_type = int32 + +const _ns_t_invalid = 0 +const _ns_t_a = 1 +const _ns_t_ns = 2 +const _ns_t_md = 3 +const _ns_t_mf = 4 +const _ns_t_cname = 5 +const _ns_t_soa = 6 +const _ns_t_mb = 7 +const _ns_t_mg = 8 +const _ns_t_mr = 9 +const _ns_t_null = 10 +const _ns_t_wks = 11 +const _ns_t_ptr = 12 +const _ns_t_hinfo = 13 +const _ns_t_minfo = 14 +const _ns_t_mx = 15 +const _ns_t_txt = 16 +const _ns_t_rp = 17 +const _ns_t_afsdb = 18 +const _ns_t_x25 = 19 +const _ns_t_isdn = 20 +const _ns_t_rt = 21 +const _ns_t_nsap = 22 +const _ns_t_nsap_ptr = 23 +const _ns_t_sig = 24 +const _ns_t_key = 25 +const _ns_t_px = 26 +const _ns_t_gpos = 27 +const _ns_t_aaaa = 28 +const _ns_t_loc = 29 +const _ns_t_nxt = 30 +const _ns_t_eid = 31 +const _ns_t_nimloc = 32 +const _ns_t_srv = 33 +const _ns_t_atma = 34 +const _ns_t_naptr = 35 +const _ns_t_kx = 36 +const _ns_t_cert = 37 +const _ns_t_a6 = 38 +const _ns_t_dname = 39 +const _ns_t_sink = 40 +const _ns_t_opt = 41 +const _ns_t_apl = 42 +const _ns_t_ds = 43 +const _ns_t_sshfp = 44 +const _ns_t_ipseckey = 45 +const _ns_t_rrsig = 46 +const _ns_t_nsec = 47 +const _ns_t_dnskey = 48 +const _ns_t_dhcid = 49 +const _ns_t_nsec3 = 50 +const _ns_t_nsec3param = 51 +const _ns_t_tlsa = 52 +const _ns_t_smimea = 53 +const _ns_t_hip = 55 +const _ns_t_ninfo = 56 +const _ns_t_rkey = 57 +const _ns_t_talink = 58 +const _ns_t_cds = 59 +const _ns_t_cdnskey = 60 +const _ns_t_openpgpkey = 61 +const _ns_t_csync = 62 +const _ns_t_spf = 99 +const _ns_t_uinfo = 100 +const _ns_t_uid = 101 +const _ns_t_gid = 102 +const _ns_t_unspec = 103 +const _ns_t_nid = 104 +const _ns_t_l32 = 105 +const _ns_t_l64 = 106 +const _ns_t_lp = 107 +const _ns_t_eui48 = 108 +const _ns_t_eui64 = 109 +const _ns_t_tkey = 249 +const _ns_t_tsig = 250 +const _ns_t_ixfr = 251 +const _ns_t_axfr = 252 +const _ns_t_mailb = 253 +const _ns_t_maila = 254 +const _ns_t_any = 255 +const _ns_t_zxfr = 256 +const _ns_t_uri = 256 +const _ns_t_caa = 257 +const _ns_t_avc = 258 +const _ns_t_ta = 32768 +const _ns_t_dlv = 32769 +const _ns_t_max = 65536 + +type Tns_class = int32 + +type ___ns_class = int32 + +const _ns_c_invalid = 0 +const _ns_c_in = 1 +const _ns_c_2 = 2 +const _ns_c_chaos = 3 +const _ns_c_hs = 4 +const _ns_c_none = 254 +const _ns_c_any = 255 +const _ns_c_max = 65536 + +type Tns_key_types = int32 + +type ___ns_key_types = int32 + +const _ns_kt_rsa = 1 +const _ns_kt_dh = 2 +const _ns_kt_dsa = 3 +const _ns_kt_private = 254 + +type Tns_cert_types = int32 + +type ___ns_cert_types = int32 + +const _cert_t_pkix = 1 +const _cert_t_spki = 2 +const _cert_t_pgp = 3 +const _cert_t_url = 253 +const _cert_t_oid = 254 + +type THEADER = struct { + F__ccgo0 uint32 + F__ccgo4 uint32 + F__ccgo8 uint32 +} + +type Timaxdiv_t = struct { + F__ccgo_align [0]uint32 + Fquot Tintmax_t + Frem Tintmax_t +} + +type Tin_port_t = uint16 + +type Tin_addr_t = uint32 + +type Tin_addr = struct { + Fs_addr Tin_addr_t +} + +type Tsockaddr_in = struct { + Fsin_family Tsa_family_t + Fsin_port Tin_port_t + Fsin_addr Tin_addr + Fsin_zero [8]Tuint8_t +} + +type Tin6_addr = struct { + F__in6_union struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + } +} + +type Tsockaddr_in6 = struct { + Fsin6_family Tsa_family_t + Fsin6_port Tin_port_t + Fsin6_flowinfo Tuint32_t + Fsin6_addr Tin6_addr + Fsin6_scope_id Tuint32_t +} + +type Tipv6_mreq = struct { + Fipv6mr_multiaddr Tin6_addr + Fipv6mr_interface uint32 +} + +type Tip_opts = struct { + Fip_dst Tin_addr + Fip_opts [40]uint8 +} + +type Tres_state = uintptr + +type t__res_state = struct { + Fretrans int32 + Fretry int32 + Foptions uint32 + Fnscount int32 + Fnsaddr_list [3]Tsockaddr_in + Fid uint16 + Fdnsrch [7]uintptr + Fdefdname [256]uint8 + Fpfcode uint32 + F__ccgo356 uint32 + Fsort_list [10]struct { + Faddr Tin_addr + Fmask Tuint32_t + } + Fqhook uintptr + Frhook uintptr + Fres_h_errno int32 + F_vcsock int32 + F_flags uint32 + F_u struct { + F_ext [0]struct { + Fnscount Tuint16_t + Fnsmap [3]Tuint16_t + Fnssocks [3]int32 + Fnscount6 Tuint16_t + Fnsinit Tuint16_t + Fnsaddrs [3]uintptr + F_initstamp [2]uint32 + } + Fpad [52]uint8 + } +} + +type Tres_sym = struct { + Fnumber int32 + Fname uintptr + Fhumanname uintptr +} + +/* RFC 1035 message compression */ + +// C documentation +// +// /* label start offsets of a compressed domain name s */ +func _getoffs(tls *TLS, offs uintptr, base uintptr, s uintptr) (r int32) { + var i, v2 int32 + _, _ = i, v2 + i = 0 + for { + for int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != 0 { + if int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != int32(0xc0) { + return 0 + } + s = base + uintptr(int32(*(*uint8)(unsafe.Pointer(s)))&Int32FromInt32(0x3f)<= int32(0x4000) { + return 0 + } + v2 = i + i++ + *(*int16)(unsafe.Pointer(offs + uintptr(v2)*2)) = int16(int32(s) - int32(base)) + s += uintptr(int32(*(*uint8)(unsafe.Pointer(s))) + int32(1)) + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* label lengths of an ascii domain name s */ +func _getlens(tls *TLS, lens uintptr, s uintptr, l int32) (r int32) { + var i, j, k, v3, v4 int32 + _, _, _, _, _ = i, j, k, v3, v4 + i = 0 + j = 0 + k = 0 + for { + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-k)-uint32(1) > uint32(62) { + return 0 + } + v3 = i + i++ + *(*uint8)(unsafe.Pointer(lens + uintptr(v3))) = uint8(j - k) + if j == l { + return i + } + j++ + v4 = j + k = v4 + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* longest suffix match of an ascii domain with a compressed domain name dn */ +func _match(tls *TLS, offset uintptr, base uintptr, dn uintptr, end uintptr, lens uintptr, nlen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var l, m, noff, o, v2, v3 int32 + var _ /* offs at bp+0 */ [128]int16 + _, _, _, _, _, _ = l, m, noff, o, v2, v3 + m = 0 + noff = _getoffs(tls, bp, base, dn) + if !(noff != 0) { + return 0 + } + for { + nlen-- + v2 = nlen + l = int32(*(*uint8)(unsafe.Pointer(lens + uintptr(v2)))) + noff-- + v3 = noff + o = int32((*(*[128]int16)(unsafe.Pointer(bp)))[v3]) + end -= uintptr(l) + if l != int32(*(*uint8)(unsafe.Pointer(base + uintptr(o)))) || Xmemcmp(tls, base+uintptr(o)+uintptr(1), end, uint32(l)) != 0 { + return m + } + *(*int32)(unsafe.Pointer(offset)) = o + m += l + if nlen != 0 { + m++ + } + if !(nlen != 0) || !(noff != 0) { + return m + } + end-- + goto _1 + _1: + } + return r +} + +func Xdn_comp(tls *TLS, src uintptr, dst uintptr, space int32, dnptrs uintptr, lastdnptr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v src=%v dst=%v space=%v dnptrs=%v lastdnptr=%v, (%v:)", tls, src, dst, space, dnptrs, lastdnptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var bestlen, bestoff, i, j, m, n, v3, v4, v5, v6, v7 int32 + var end, p, v8 uintptr + var l Tsize_t + var _ /* lens at bp+4 */ [127]uint8 + var _ /* offset at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bestlen, bestoff, end, i, j, l, m, n, p, v3, v4, v5, v6, v7, v8 + m = 0 + bestlen = 0 + l = Xstrnlen(tls, src, uint32(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(src + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if l > uint32(253) || space <= 0 { + return -int32(1) + } + if !(l != 0) { + *(*uint8)(unsafe.Pointer(dst)) = uint8(0) + return int32(1) + } + end = src + uintptr(l) + n = _getlens(tls, bp+4, src, int32(l)) + if !(n != 0) { + return -int32(1) + } + p = dnptrs + if p != 0 && *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 4 + for { + if !(*(*uintptr)(unsafe.Pointer(p)) != 0) { + break + } + m = _match(tls, bp, *(*uintptr)(unsafe.Pointer(dnptrs)), *(*uintptr)(unsafe.Pointer(p)), end, bp+4, n) + if m > bestlen { + bestlen = m + bestoff = *(*int32)(unsafe.Pointer(bp)) + if uint32(m) == l { + break + } + } + goto _1 + _1: + ; + p += 4 + } + } + /* encode unmatched part */ + if uint32(space) < l-uint32(bestlen)+uint32(2)+BoolUint32(uint32(bestlen-Int32FromInt32(1)) < l-Uint32FromInt32(1)) { + return -int32(1) + } + _memcpy(tls, dst+uintptr(1), src, l-uint32(bestlen)) + v3 = Int32FromInt32(0) + j = v3 + i = v3 + for { + if !(uint32(i) < l-uint32(bestlen)) { + break + } + *(*uint8)(unsafe.Pointer(dst + uintptr(i))) = (*(*[127]uint8)(unsafe.Pointer(bp + 4)))[j] + goto _2 + _2: + ; + v4 = j + j++ + i += int32((*(*[127]uint8)(unsafe.Pointer(bp + 4)))[v4]) + int32(1) + } + /* add tail */ + if bestlen != 0 { + v5 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v5))) = uint8(int32(0xc0) | bestoff>>int32(8)) + v6 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v6))) = uint8(bestoff) + } else { + v7 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v7))) = uint8(0) + } + /* save dst pointer */ + if i > int32(2) && lastdnptr != 0 && dnptrs != 0 && *(*uintptr)(unsafe.Pointer(dnptrs)) != 0 { + for *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 4 + } + if p+uintptr(1)*4 < lastdnptr { + v8 = p + p += 4 + *(*uintptr)(unsafe.Pointer(v8)) = dst + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + } + return i +} + +func X__dn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dbegin, dend, p, v3, v4, v6, v7 uintptr + var i, j, len1, v1, v5 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = dbegin, dend, i, j, len1, p, v1, v3, v4, v5, v6, v7 + p = src + dbegin = dest + len1 = -int32(1) + if p == end || space <= 0 { + return -int32(1) + } + if space > int32(254) { + v1 = int32(254) + } else { + v1 = space + } + dend = dest + uintptr(v1) + /* detect reference loop using an iteration counter */ + i = 0 + for { + if !(i < int32(end)-int32(base)) { + break + } + /* loop invariants: p= int32(end)-int32(base) { + return -int32(1) + } + p = base + uintptr(j) + } else { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + if dest != dbegin { + v3 = dest + dest++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + } + v4 = p + p++ + j = int32(*(*uint8)(unsafe.Pointer(v4))) + if j >= int32(end)-int32(p) || j >= int32(dend)-int32(dest) { + return -int32(1) + } + for { + v5 = j + j-- + if !(v5 != 0) { + break + } + v6 = dest + dest++ + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + } + } else { + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + if len1 < 0 { + len1 = int32(p+uintptr(1)) - int32(src) + } + return len1 + } + } + goto _2 + _2: + ; + i += int32(2) + } + return -int32(1) +} + +func Xdn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dn_expand(tls, base, end, src, dest, space) +} + +func Xdn_skipname(tls *TLS, s uintptr, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v end=%v, (%v:)", tls, s, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = s + for p < end { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + return int32(p) - int32(s) + int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) >= int32(192) { + if p+uintptr(1) < end { + return int32(p) - int32(s) + int32(2) + } else { + break + } + } else { + if int32(end)-int32(p) < int32(*(*uint8)(unsafe.Pointer(p)))+int32(1) { + break + } else { + p += uintptr(int32(*(*uint8)(unsafe.Pointer(p))) + int32(1)) + } + } + } + } + return -int32(1) +} + +const AI_ADDRCONFIG = 32 +const AI_ALL = 16 +const AI_CANONNAME = 2 +const AI_NUMERICHOST = 4 +const AI_NUMERICSERV = 1024 +const AI_PASSIVE = 1 +const AI_V4MAPPED = 8 +const EAI_AGAIN = -3 +const EAI_BADFLAGS = -1 +const EAI_FAIL = -4 +const EAI_FAMILY = -6 +const EAI_MEMORY = -10 +const EAI_NODATA = -5 +const EAI_NONAME = -2 +const EAI_OVERFLOW = -12 +const EAI_SERVICE = -8 +const EAI_SOCKTYPE = -7 +const EAI_SYSTEM = -11 +const MAXADDRS = 48 +const MAXSERVS = 2 +const NI_DGRAM = 16 +const NI_NAMEREQD = 8 +const NI_NOFQDN = 4 +const NI_NUMERICHOST = 1 +const NI_NUMERICSCOPE = 256 +const NI_NUMERICSERV = 2 + +type Taddrinfo = struct { + Fai_flags int32 + Fai_family int32 + Fai_socktype int32 + Fai_protocol int32 + Fai_addrlen Tsocklen_t + Fai_addr uintptr + Fai_canonname uintptr + Fai_next uintptr +} + +type Tnetent = struct { + Fn_name uintptr + Fn_aliases uintptr + Fn_addrtype int32 + Fn_net Tuint32_t +} + +type Thostent = struct { + Fh_name uintptr + Fh_aliases uintptr + Fh_addrtype int32 + Fh_length int32 + Fh_addr_list uintptr +} + +type Tservent = struct { + Fs_name uintptr + Fs_aliases uintptr + Fs_port int32 + Fs_proto uintptr +} + +type Tprotoent = struct { + Fp_name uintptr + Fp_aliases uintptr + Fp_proto int32 +} + +type Taibuf = struct { + Fai Taddrinfo + Fsa Tsa + Flock [1]int32 + Fslot int16 + Fref int16 +} + +type Taddress = struct { + Ffamily int32 + Fscopeid uint32 + Faddr [16]Tuint8_t + Fsortkey int32 +} + +type Tservice = struct { + Fport Tuint16_t + Fproto uint8 + Fsocktype uint8 +} + +type Tresolvconf = struct { + Fns [3]Taddress + Fnns uint32 + Fattempts uint32 + Fndots uint32 + Ftimeout uint32 +} + +func X__dns_parse(tls *TLS, r uintptr, rlen int32, callback uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v rlen=%v callback=%v ctx=%v, (%v:)", tls, r, rlen, callback, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ancount, len1, qdcount, v1, v2 int32 + var p uintptr + _, _, _, _, _, _ = ancount, len1, p, qdcount, v1, v2 + if rlen < int32(12) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(r + 3)))&int32(15) != 0 { + return 0 + } + p = r + uintptr(12) + qdcount = int32(*(*uint8)(unsafe.Pointer(r + 4)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 5))) + ancount = int32(*(*uint8)(unsafe.Pointer(r + 6)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 7))) + for { + v1 = qdcount + qdcount-- + if !(v1 != 0) { + break + } + for int32(p)-int32(r) < rlen && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(6) { + return -int32(1) + } + p += uintptr(int32(5) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + } + for { + v2 = ancount + ancount-- + if !(v2 != 0) { + break + } + for int32(p)-int32(r) < rlen && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(12) { + return -int32(1) + } + p += uintptr(int32(1) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + len1 = int32(*(*uint8)(unsafe.Pointer(p + 8)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(p + 9))) + if len1+int32(10) > int32(r+uintptr(rlen))-int32(p) { + return -int32(1) + } + if (*(*func(*TLS, uintptr, int32, uintptr, int32, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{callback})))(tls, ctx, int32(*(*uint8)(unsafe.Pointer(p + 1))), p+uintptr(10), len1, r, rlen) < 0 { + return -int32(1) + } + p += uintptr(int32(10) + len1) + } + return 0 +} + +type Tsa = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte +} + +func Xsethostent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } +} + +func Xgethostent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xendhostent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendnetent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendhostent(tls) +} + +func Xsetnetent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } + Xsethostent(tls, x) +} + +const ARPD_FLUSH = 3 +const ARPD_LOOKUP = 2 +const ARPD_UPDATE = 1 +const ARPHRD_6LOWPAN = 825 +const ARPHRD_ADAPT = 264 +const ARPHRD_APPLETLK = 8 +const ARPHRD_ARCNET = 7 +const ARPHRD_ASH = 781 +const ARPHRD_ATM = 19 +const ARPHRD_AX25 = 3 +const ARPHRD_BIF = 775 +const ARPHRD_CAIF = 822 +const ARPHRD_CAN = 280 +const ARPHRD_CHAOS = 5 +const ARPHRD_CISCO = 513 +const ARPHRD_CSLIP = 257 +const ARPHRD_CSLIP6 = 259 +const ARPHRD_DDCMP = 517 +const ARPHRD_DLCI = 15 +const ARPHRD_ECONET = 782 +const ARPHRD_EETHER = 2 +const ARPHRD_ETHER = 1 +const ARPHRD_EUI64 = 27 +const ARPHRD_FCAL = 785 +const ARPHRD_FCFABRIC = 787 +const ARPHRD_FCPL = 786 +const ARPHRD_FCPP = 784 +const ARPHRD_FDDI = 774 +const ARPHRD_FRAD = 770 +const ARPHRD_HDLC = 513 +const ARPHRD_HIPPI = 780 +const ARPHRD_HWX25 = 272 +const ARPHRD_IEEE1394 = 24 +const ARPHRD_IEEE802 = 6 +const ARPHRD_IEEE80211 = 801 +const ARPHRD_IEEE80211_PRISM = 802 +const ARPHRD_IEEE80211_RADIOTAP = 803 +const ARPHRD_IEEE802154 = 804 +const ARPHRD_IEEE802154_MONITOR = 805 +const ARPHRD_IEEE802_TR = 800 +const ARPHRD_INFINIBAND = 32 +const ARPHRD_IP6GRE = 823 +const ARPHRD_IPDDP = 777 +const ARPHRD_IPGRE = 778 +const ARPHRD_IRDA = 783 +const ARPHRD_LAPB = 516 +const ARPHRD_LOCALTLK = 773 +const ARPHRD_LOOPBACK = 772 +const ARPHRD_METRICOM = 23 +const ARPHRD_NETLINK = 824 +const ARPHRD_NETROM = 0 +const ARPHRD_NONE = 65534 +const ARPHRD_PHONET = 820 +const ARPHRD_PHONET_PIPE = 821 +const ARPHRD_PIMREG = 779 +const ARPHRD_PPP = 512 +const ARPHRD_PRONET = 4 +const ARPHRD_RAWHDLC = 518 +const ARPHRD_RAWIP = 519 +const ARPHRD_ROSE = 270 +const ARPHRD_RSRVD = 260 +const ARPHRD_SIT = 776 +const ARPHRD_SKIP = 771 +const ARPHRD_SLIP = 256 +const ARPHRD_SLIP6 = 258 +const ARPHRD_TUNNEL = 768 +const ARPHRD_TUNNEL6 = 769 +const ARPHRD_VOID = 65535 +const ARPHRD_VSOCKMON = 826 +const ARPHRD_X25 = 271 +const ARPOP_InREPLY = 9 +const ARPOP_InREQUEST = 8 +const ARPOP_NAK = 10 +const ARPOP_REPLY = 2 +const ARPOP_REQUEST = 1 +const ARPOP_RREPLY = 4 +const ARPOP_RREQUEST = 3 +const ATF_COM = 2 +const ATF_DONTPUB = 64 +const ATF_MAGIC = 128 +const ATF_NETMASK = 32 +const ATF_PERM = 4 +const ATF_PUBL = 8 +const ATF_USETRAILERS = 16 +const ETHERMIN = 46 +const ETHERMTU = 1500 +const ETHERTYPE_AARP = 33011 +const ETHERTYPE_ARP = 2054 +const ETHERTYPE_AT = 32923 +const ETHERTYPE_IP = 2048 +const ETHERTYPE_IPV6 = 34525 +const ETHERTYPE_IPX = 33079 +const ETHERTYPE_LOOPBACK = 36864 +const ETHERTYPE_NTRAILER = 16 +const ETHERTYPE_PUP = 512 +const ETHERTYPE_REVARP = 32821 +const ETHERTYPE_SPRITE = 1280 +const ETHERTYPE_TRAIL = 4096 +const ETHERTYPE_VLAN = 33024 +const ETHER_ADDR_LEN = 6 +const ETHER_CRC_LEN = 4 +const ETHER_HDR_LEN = 14 +const ETHER_MAX_LEN = 1518 +const ETHER_MIN_LEN = 64 +const ETHER_TYPE_LEN = 2 +const ETH_ALEN = 6 +const ETH_DATA_LEN = 1500 +const ETH_FCS_LEN = 4 +const ETH_FRAME_LEN = 1514 +const ETH_HLEN = 14 +const ETH_MAX_MTU = 65535 +const ETH_MIN_MTU = 68 +const ETH_P_1588 = 35063 +const ETH_P_8021AD = 34984 +const ETH_P_8021AH = 35047 +const ETH_P_8021Q = 33024 +const ETH_P_80221 = 35095 +const ETH_P_802_2 = 4 +const ETH_P_802_3 = 1 +const ETH_P_802_3_MIN = 1536 +const ETH_P_802_EX1 = 34997 +const ETH_P_AARP = 33011 +const ETH_P_AF_IUCV = 64507 +const ETH_P_ALL = 3 +const ETH_P_AOE = 34978 +const ETH_P_ARCNET = 26 +const ETH_P_ARP = 2054 +const ETH_P_ATALK = 32923 +const ETH_P_ATMFATE = 34948 +const ETH_P_ATMMPOA = 34892 +const ETH_P_AX25 = 2 +const ETH_P_BATMAN = 17157 +const ETH_P_BPQ = 2303 +const ETH_P_CAIF = 247 +const ETH_P_CAN = 12 +const ETH_P_CANFD = 13 +const ETH_P_CFM = 35074 +const ETH_P_CONTROL = 22 +const ETH_P_CUST = 24582 +const ETH_P_DDCMP = 6 +const ETH_P_DEC = 24576 +const ETH_P_DIAG = 24581 +const ETH_P_DNA_DL = 24577 +const ETH_P_DNA_RC = 24578 +const ETH_P_DNA_RT = 24579 +const ETH_P_DSA = 27 +const ETH_P_DSA_8021Q = 56027 +const ETH_P_ECONET = 24 +const ETH_P_EDSA = 56026 +const ETH_P_ERSPAN = 35006 +const ETH_P_ERSPAN2 = 8939 +const ETH_P_FCOE = 35078 +const ETH_P_FIP = 35092 +const ETH_P_HDLC = 25 +const ETH_P_HSR = 35119 +const ETH_P_IBOE = 35093 +const ETH_P_IEEE802154 = 246 +const ETH_P_IEEEPUP = 2560 +const ETH_P_IEEEPUPAT = 2561 +const ETH_P_IFE = 60734 +const ETH_P_IP = 2048 +const ETH_P_IPV6 = 34525 +const ETH_P_IPX = 33079 +const ETH_P_IRDA = 23 +const ETH_P_LAT = 24580 +const ETH_P_LINK_CTL = 34924 +const ETH_P_LLDP = 35020 +const ETH_P_LOCALTALK = 9 +const ETH_P_LOOP = 96 +const ETH_P_LOOPBACK = 36864 +const ETH_P_MACSEC = 35045 +const ETH_P_MAP = 249 +const ETH_P_MOBITEX = 21 +const ETH_P_MPLS_MC = 34888 +const ETH_P_MPLS_UC = 34887 +const ETH_P_MRP = 35043 +const ETH_P_MVRP = 35061 +const ETH_P_NCSI = 35064 +const ETH_P_NSH = 35151 +const ETH_P_PAE = 34958 +const ETH_P_PAUSE = 34824 +const ETH_P_PHONET = 245 +const ETH_P_PPPTALK = 16 +const ETH_P_PPP_DISC = 34915 +const ETH_P_PPP_MP = 8 +const ETH_P_PPP_SES = 34916 +const ETH_P_PREAUTH = 35015 +const ETH_P_PRP = 35067 +const ETH_P_PUP = 512 +const ETH_P_PUPAT = 513 +const ETH_P_QINQ1 = 37120 +const ETH_P_QINQ2 = 37376 +const ETH_P_QINQ3 = 37632 +const ETH_P_RARP = 32821 +const ETH_P_SCA = 24583 +const ETH_P_SLOW = 34825 +const ETH_P_SNAP = 5 +const ETH_P_TDLS = 35085 +const ETH_P_TEB = 25944 +const ETH_P_TIPC = 35018 +const ETH_P_TRAILER = 28 +const ETH_P_TR_802_2 = 17 +const ETH_P_TSN = 8944 +const ETH_P_WAN_PPP = 7 +const ETH_P_WCCP = 34878 +const ETH_P_X25 = 2053 +const ETH_P_XDSA = 248 +const ETH_TLEN = 2 +const ETH_ZLEN = 60 +const MAX_ADDR_LEN = 7 +const __UAPI_DEF_ETHHDR = 0 + +type Tethhdr = struct { + Fh_dest [6]Tuint8_t + Fh_source [6]Tuint8_t + Fh_proto Tuint16_t +} + +type Tether_addr = struct { + Fether_addr_octet [6]Tuint8_t +} + +type Tether_header = struct { + Fether_dhost [6]Tuint8_t + Fether_shost [6]Tuint8_t + Fether_type Tuint16_t +} + +type Tarphdr = struct { + Far_hrd Tuint16_t + Far_pro Tuint16_t + Far_hln Tuint8_t + Far_pln Tuint8_t + Far_op Tuint16_t +} + +type Tarpreq = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr + Farp_dev [16]uint8 +} + +type Tarpreq_old = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr +} + +type Tarpd_request = struct { + Freq uint16 + Fip Tuint32_t + Fdev uint32 + Fstamp uint32 + Fupdated uint32 + Fha [7]uint8 +} + +type Tether_arp = struct { + Fea_hdr Tarphdr + Farp_sha [6]Tuint8_t + Farp_spa [4]Tuint8_t + Farp_tha [6]Tuint8_t + Farp_tpa [4]Tuint8_t +} + +func Xether_aton_r(tls *TLS, x uintptr, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v p_a=%v, (%v:)", tls, x, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var n uint32 + var _ /* a at bp+0 */ Tether_addr + var _ /* y at bp+8 */ uintptr + _, _ = ii, n + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii != 0 { + if int32(*(*uint8)(unsafe.Pointer(x))) != int32(':') { + return uintptr(0) + } else { + x++ + } + } + n = Xstrtoul(tls, x, bp+8, int32(16)) + x = *(*uintptr)(unsafe.Pointer(bp + 8)) + if n > uint32(0xFF) { + return uintptr(0) + } /* bad byte */ + *(*Tuint8_t)(unsafe.Pointer(bp + uintptr(ii))) = uint8(n) + goto _1 + _1: + ; + ii++ + } + if int32(*(*uint8)(unsafe.Pointer(x))) != 0 { + return uintptr(0) + } /* bad format */ + *(*Tether_addr)(unsafe.Pointer(p_a)) = *(*Tether_addr)(unsafe.Pointer(bp)) + return p_a +} + +func Xether_aton(tls *TLS, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_aton_r(tls, x, uintptr(unsafe.Pointer(&_a))) +} + +var _a Tether_addr + +func Xether_ntoa_r(tls *TLS, p_a uintptr, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v x=%v, (%v:)", tls, p_a, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var y, v2 uintptr + _, _, _ = ii, y, v2 + y = x + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii == 0 { + v2 = __ccgo_ts + 886 + } else { + v2 = __ccgo_ts + 891 + } + x += uintptr(Xsprintf(tls, x, v2, VaList(bp+8, int32(*(*Tuint8_t)(unsafe.Pointer(p_a + uintptr(ii))))))) + goto _1 + _1: + ; + ii++ + } + return y +} + +func Xether_ntoa(tls *TLS, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v, (%v:)", tls, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_ntoa_r(tls, p_a, uintptr(unsafe.Pointer(&_x))) +} + +var _x [18]uint8 + +func Xether_line(tls *TLS, l uintptr, e uintptr, hostname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v l=%v e=%v hostname=%v, (%v:)", tls, l, e, hostname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_ntohost(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_hostton(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xfreeaddrinfo(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + var b, p2 uintptr + var cnt Tsize_t + _, _, _ = b, cnt, p2 + cnt = uint32(1) + for { + if !((*Taddrinfo)(unsafe.Pointer(p)).Fai_next != 0) { + break + } + goto _1 + _1: + ; + cnt++ + p = (*Taddrinfo)(unsafe.Pointer(p)).Fai_next + } + b = p - uintptr(uint32(UintptrFromInt32(0))) + b -= uintptr((*Taibuf)(unsafe.Pointer(b)).Fslot) * 68 + ___lock(tls, b+60) + p2 = b + 66 + *(*int16)(unsafe.Pointer(p2)) = int16(uint32(*(*int16)(unsafe.Pointer(p2))) - cnt) + if !(*(*int16)(unsafe.Pointer(p2)) != 0) { + Xfree(tls, b) + } else { + ___unlock(tls, b+60) + } +} + +var _msgs = [252]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'f', 'l', 'a', 'g', 's', 0, 'N', 'a', 'm', 'e', ' ', 'd', 'o', 'e', 's', ' ', 'n', 'o', 't', ' ', 'r', 'e', 's', 'o', 'l', 'v', 'e', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'a', 'm', 'e', ' ', 'h', 'a', 's', ' ', 'n', 'o', ' ', 'u', 's', 'a', 'b', 'l', 'e', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'o', 'r', ' ', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'l', 'e', 'n', 'g', 't', 'h', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'S', 'y', 's', 't', 'e', 'm', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xgai_strerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs)) + ecode++ + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode++ + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1616) + defer tls.Free(1616) + var canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, proto, r, s, saved_errno, socktype, v3 int32 + var out, outcanon uintptr + var ta [2]uintptr + var tf [2]int32 + var tl [2]Tsocklen_t + var v5 uint32 + var _ /* addrs at bp+8 */ [48]Taddress + var _ /* canon at bp+1352 */ [256]uint8 + var _ /* cs at bp+1608 */ int32 + var _ /* ports at bp+0 */ [2]Tservice + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, out, outcanon, proto, r, s, saved_errno, socktype, ta, tf, tl, v3, v5 + family = PF_UNSPEC + flags = 0 + proto = 0 + socktype = 0 + no_family = 0 + if !(host != 0) && !(serv != 0) { + return -int32(2) + } + if hint != 0 { + family = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_family + flags = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_flags + proto = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_protocol + socktype = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_socktype + mask = Int32FromInt32(AI_PASSIVE) | Int32FromInt32(AI_CANONNAME) | Int32FromInt32(AI_NUMERICHOST) | Int32FromInt32(AI_V4MAPPED) | Int32FromInt32(AI_ALL) | Int32FromInt32(AI_ADDRCONFIG) | Int32FromInt32(AI_NUMERICSERV) + if flags&mask != flags { + return -int32(1) + } + switch family { + case int32(PF_INET): + fallthrough + case int32(PF_INET6): + fallthrough + case PF_UNSPEC: + default: + return -int32(6) + } + } + if flags&int32(AI_ADDRCONFIG) != 0 { + tf = [2]int32{ + 0: int32(PF_INET), + 1: int32(PF_INET6), + } + ta = [2]uintptr{ + 0: uintptr(unsafe.Pointer(&_lo4)), + 1: uintptr(unsafe.Pointer(&_lo6)), + } + tl = [2]Tsocklen_t{ + 0: uint32(16), + 1: uint32(28), + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family == tf[int32(1)-i] { + goto _1 + } + s = Xsocket(tls, tf[i], Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_DGRAM), int32(IPPROTO_UDP)) + if s >= 0 { + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+1608) + r = Xconnect(tls, s, ta[i], tl[i]) + saved_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 1608)), uintptr(0)) + Xclose(tls, s) + if !(r != 0) { + goto _1 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = saved_errno + } + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EADDRNOTAVAIL): + fallthrough + case int32(EAFNOSUPPORT): + fallthrough + case int32(EHOSTUNREACH): + fallthrough + case int32(ENETDOWN): + fallthrough + case int32(ENETUNREACH): + default: + return -int32(11) + } + if family == tf[i] { + no_family = int32(1) + } + family = tf[int32(1)-i] + goto _1 + _1: + ; + i++ + } + } + nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) + if nservs < 0 { + return nservs + } + naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) + if naddrs < 0 { + return naddrs + } + if no_family != 0 { + return -int32(5) + } + nais = nservs * naddrs + canon_len = int32(Xstrlen(tls, bp+1352)) + out = Xcalloc(tls, uint32(1), uint32(nais)*uint32(68)+uint32(canon_len)+uint32(1)) + if !(out != 0) { + return -int32(10) + } + if canon_len != 0 { + outcanon = out + uintptr(nais)*68 + _memcpy(tls, outcanon, bp+1352, uint32(canon_len+int32(1))) + } else { + outcanon = uintptr(0) + } + v3 = Int32FromInt32(0) + i = v3 + k = v3 + for { + if !(i < naddrs) { + break + } + j = 0 + for { + if !(j < nservs) { + break + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*68))).Fslot = int16(k) + if (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily == int32(PF_INET) { + v5 = uint32(16) + } else { + v5 = uint32(28) + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*68))).Fai = Taddrinfo{ + Fai_family: (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily, + Fai_socktype: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fsocktype), + Fai_protocol: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fproto), + Fai_addrlen: v5, + Fai_addr: out + uintptr(k)*68 + 32, + Fai_canonname: outcanon, + } + if k != 0 { + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k-int32(1))*68))).Fai.Fai_next = out + uintptr(k)*68 + } + switch (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily { + case int32(PF_INET): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*68 + 32)) = uint16(PF_INET) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + _memcpy(tls, out+uintptr(k)*68+32+4, bp+8+uintptr(i)*28+8, uint32(4)) + case int32(PF_INET6): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*68 + 32)) = uint16(PF_INET6) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + *(*Tuint32_t)(unsafe.Pointer(out + uintptr(k)*68 + 32 + 24)) = (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Fscopeid + _memcpy(tls, out+uintptr(k)*68+32+8, bp+8+uintptr(i)*28+8, uint32(16)) + break + } + goto _4 + _4: + ; + j++ + k++ + } + goto _2 + _2: + ; + i++ + } + (*(*Taibuf)(unsafe.Pointer(out))).Fref = int16(nais) + *(*uintptr)(unsafe.Pointer(res)) = out + return 0 +} + +/* Define the "an address is configured" condition for address + * families via ability to create a socket for the family plus + * routability of the loopback address for the family. */ +var _lo4 = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + Fsin_addr: Tin_addr{ + Fs_addr: uint32(0x0100007f), + }, +} + +var _lo6 = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_addr: Tin6_addr{ + F__in6_union: *(*struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + })(unsafe.Pointer(&[16]Tuint8_t{ + 15: uint8(1), + })), + }, +} + +const EAI_ADDRFAMILY = -9 +const EAI_ALLDONE = -103 +const EAI_CANCELED = -101 +const EAI_IDN_ENCODE = -105 +const EAI_INPROGRESS = -100 +const EAI_INTR = -104 +const EAI_NOTCANCELED = -102 +const HOST_NOT_FOUND = 1 +const MCAST_BLOCK_SOURCE = 43 +const MCAST_EXCLUDE = 0 +const MCAST_INCLUDE = 1 +const MCAST_JOIN_GROUP = 42 +const MCAST_JOIN_SOURCE_GROUP = 46 +const MCAST_LEAVE_GROUP = 45 +const MCAST_LEAVE_SOURCE_GROUP = 47 +const MCAST_MSFILTER = 48 +const MCAST_UNBLOCK_SOURCE = 44 +const NI_MAXHOST = 255 +const NI_MAXSERV = 32 +const NO_ADDRESS = 4 +const NO_DATA = 4 +const NO_RECOVERY = 3 +const TRY_AGAIN = 2 +const h_errno = 0 + +type Tip_mreq = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr +} + +type Tip_mreqn = struct { + Fimr_multiaddr Tin_addr + Fimr_address Tin_addr + Fimr_ifindex int32 +} + +type Tip_mreq_source = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr + Fimr_sourceaddr Tin_addr +} + +type Tip_msfilter = struct { + Fimsf_multiaddr Tin_addr + Fimsf_interface Tin_addr + Fimsf_fmode Tuint32_t + Fimsf_numsrc Tuint32_t + Fimsf_slist [1]Tin_addr +} + +type Tgroup_req = struct { + Fgr_interface Tuint32_t + Fgr_group Tsockaddr_storage +} + +type Tgroup_source_req = struct { + Fgsr_interface Tuint32_t + Fgsr_group Tsockaddr_storage + Fgsr_source Tsockaddr_storage +} + +type Tgroup_filter = struct { + Fgf_interface Tuint32_t + Fgf_group Tsockaddr_storage + Fgf_fmode Tuint32_t + Fgf_numsrc Tuint32_t + Fgf_slist [1]Tsockaddr_storage +} + +type Tin_pktinfo = struct { + Fipi_ifindex int32 + Fipi_spec_dst Tin_addr + Fipi_addr Tin_addr +} + +type Tin6_pktinfo = struct { + Fipi6_addr Tin6_addr + Fipi6_ifindex uint32 +} + +type Tip6_mtuinfo = struct { + Fip6m_addr Tsockaddr_in6 + Fip6m_mtu Tuint32_t +} + +func Xgethostbyaddr(tls *TLS, a uintptr, l Tsocklen_t, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint32(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h) + size += size + uint32(1) + _h = Xmalloc(tls, size) + if !(_h != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyaddr_r(tls, a, l, af, _h, _h+UintptrFromInt32(1)*20, size-uint32(20), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h uintptr + +func Xgethostbyaddr_r(tls *TLS, a uintptr, l Tsocklen_t, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var sl Tsocklen_t + var v1 uint32 + var _ /* sa at bp+0 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _ = i, sl, v1 + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp)) = uint16(af) + if af == int32(PF_INET6) { + v1 = uint32(28) + } else { + v1 = uint32(16) + } + sl = v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Load address argument into sockaddr structure */ + if af == int32(PF_INET6) && l == uint32(16) { + _memcpy(tls, bp+8, a, uint32(16)) + } else { + if af == int32(PF_INET) && l == uint32(4) { + _memcpy(tls, bp+4, a, uint32(4)) + } else { + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EINVAL) + } + } + /* Align buffer and check for space for pointers and ip address */ + i = int32(uint32(buf) & (Uint32FromInt64(4) - Uint32FromInt32(1))) + if !(i != 0) { + i = int32(4) + } + if buflen <= Uint32FromInt32(5)*Uint32FromInt64(4)-uint32(i)+l { + return int32(ERANGE) + } + buf += uintptr(uint32(4) - uint32(i)) + buflen -= Uint32FromInt32(5)*Uint32FromInt64(4) - uint32(i) + l + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(Uint32FromInt32(2) * Uint32FromInt64(4)) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint32FromInt32(2) * Uint32FromInt64(4)) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf + _memcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)), a, l) + buf += uintptr(l) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + 1*4)) = uintptr(0) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = uintptr(0) + switch Xgetnameinfo(tls, bp, sl, buf, buflen, uintptr(0), uint32(0), 0) { + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + case -int32(12): + return int32(ERANGE) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + case 0: + break + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + (*Thostent)(unsafe.Pointer(h)).Fh_length = int32(l) + (*Thostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2(tls, name, int32(PF_INET)) +} + +func Xgethostbyname2(tls *TLS, name uintptr, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint32(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h1) + size += size + uint32(1) + _h1 = Xmalloc(tls, size) + if !(_h1 != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyname2_r(tls, name, af, _h1, _h1+UintptrFromInt32(1)*20, size-uint32(20), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h1 uintptr + +func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1600) + defer tls.Free(1600) + var align, need Tsize_t + var cnt, i, v1 int32 + var v3 uintptr + var _ /* addrs at bp+0 */ [48]Taddress + var _ /* canon at bp+1344 */ [256]uint8 + _, _, _, _, _, _ = align, cnt, i, need, v1, v3 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + cnt = X__lookup_name(tls, bp, bp+1344, name, af, int32(AI_CANONNAME)) + if cnt < 0 { + switch cnt { + case -int32(2): + *(*int32)(unsafe.Pointer(err)) = int32(HOST_NOT_FOUND) + return 0 + case -int32(5): + *(*int32)(unsafe.Pointer(err)) = int32(NO_DATA) + return 0 + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + if af == int32(PF_INET6) { + v1 = int32(16) + } else { + v1 = int32(4) + } + (*Thostent)(unsafe.Pointer(h)).Fh_length = v1 + /* Align buffer */ + align = -uint32(buf) & (Uint32FromInt64(4) - Uint32FromInt32(1)) + need = Uint32FromInt32(4) * Uint32FromInt64(4) + need += uint32(cnt+Int32FromInt32(1)) * (uint32(4) + uint32((*Thostent)(unsafe.Pointer(h)).Fh_length)) + need += Xstrlen(tls, name) + uint32(1) + need += Xstrlen(tls, bp+1344) + uint32(1) + need += align + if need > buflen { + return int32(ERANGE) + } + buf += uintptr(align) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint32FromInt32(3) * Uint32FromInt64(4)) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(uint32(cnt+Int32FromInt32(1)) * uint32(4)) + i = 0 + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = buf + buf += uintptr((*Thostent)(unsafe.Pointer(h)).Fh_length) + _memcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)), bp+uintptr(i)*28+8, uint32((*Thostent)(unsafe.Pointer(h)).Fh_length)) + goto _2 + _2: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = uintptr(0) + v3 = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = v3 + (*Thostent)(unsafe.Pointer(h)).Fh_name = v3 + Xstrcpy(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, bp+1344) + buf += uintptr(Xstrlen(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name) + uint32(1)) + if Xstrcmp(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = buf + Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)), name) + buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4))) + uint32(1)) + } else { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = uintptr(0) + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 2*4)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2_r(tls, name, int32(PF_INET), h, buf, buflen, res, err) +} + +const IFADDRS_HASH_SIZE = 64 +const IFA_ADDRESS = 1 +const IFA_BROADCAST = 4 +const IFA_LABEL = 3 +const IFA_LOCAL = 2 +const IFF_ALLMULTI = 512 +const IFF_AUTOMEDIA = 16384 +const IFF_BROADCAST = 2 +const IFF_DEBUG = 4 +const IFF_DORMANT = 131072 +const IFF_DYNAMIC = 32768 +const IFF_ECHO = 262144 +const IFF_LOOPBACK = 8 +const IFF_LOWER_UP = 65536 +const IFF_MASTER = 1024 +const IFF_MULTICAST = 4096 +const IFF_NOARP = 128 +const IFF_NOTRAILERS = 32 +const IFF_POINTOPOINT = 16 +const IFF_PORTSEL = 8192 +const IFF_PROMISC = 256 +const IFF_RUNNING = 64 +const IFF_SLAVE = 2048 +const IFF_UP = 1 +const IFF_VOLATILE = 461914 +const IFHWADDRLEN = 6 +const IFLA_ADDRESS = 1 +const IFLA_BROADCAST = 2 +const IFLA_IFNAME = 3 +const IFLA_STATS = 7 +const IFNAMSIZ = 16 +const IF_NAMESIZE = 16 +const NETLINK_ROUTE = 0 +const NLMSG_DONE = 3 +const NLMSG_ERROR = 2 +const NLMSG_NOOP = 1 +const NLMSG_OVERRUN = 4 +const NLM_F_ACK = 4 +const NLM_F_ATOMIC = 1024 +const NLM_F_DUMP = 768 +const NLM_F_MATCH = 512 +const NLM_F_MULTI = 2 +const NLM_F_REQUEST = 1 +const NLM_F_ROOT = 256 +const RTM_GETADDR = 22 +const RTM_GETLINK = 18 +const RTM_NEWADDR = 20 +const RTM_NEWLINK = 16 +const __UAPI_DEF_IF_IFCONF = 0 +const __UAPI_DEF_IF_IFMAP = 0 +const __UAPI_DEF_IF_IFNAMSIZ = 0 +const __UAPI_DEF_IF_IFREQ = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO = 0 + +type Tifaddrs = struct { + Fifa_next uintptr + Fifa_name uintptr + Fifa_flags uint32 + Fifa_addr uintptr + Fifa_netmask uintptr + Fifa_ifu struct { + Fifu_dstaddr [0]uintptr + Fifu_broadaddr uintptr + } + Fifa_data uintptr +} + +type Tif_nameindex = struct { + Fif_index uint32 + Fif_name uintptr +} + +type Tifaddr = struct { + Fifa_addr Tsockaddr + Fifa_ifu struct { + Fifu_dstaddr [0]Tsockaddr + Fifu_broadaddr Tsockaddr + } + Fifa_ifp uintptr + Fifa_next uintptr +} + +type Tifmap = struct { + Fmem_start uint32 + Fmem_end uint32 + Fbase_addr uint16 + Firq uint8 + Fdma uint8 + Fport uint8 +} + +type Tifreq = struct { + Fifr_ifrn struct { + Fifrn_name [16]uint8 + } + Fifr_ifru struct { + Fifru_dstaddr [0]Tsockaddr + Fifru_broadaddr [0]Tsockaddr + Fifru_netmask [0]Tsockaddr + Fifru_hwaddr [0]Tsockaddr + Fifru_flags [0]int16 + Fifru_ivalue [0]int32 + Fifru_mtu [0]int32 + Fifru_map [0]Tifmap + Fifru_slave [0][16]uint8 + Fifru_newname [0][16]uint8 + Fifru_data [0]uintptr + Fifru_addr Tsockaddr + } +} + +type Tifconf = struct { + Fifc_len int32 + Fifc_ifcu struct { + Fifcu_req [0]uintptr + Fifcu_buf uintptr + } +} + +type Tnlmsghdr = struct { + Fnlmsg_len Tuint32_t + Fnlmsg_type Tuint16_t + Fnlmsg_flags Tuint16_t + Fnlmsg_seq Tuint32_t + Fnlmsg_pid Tuint32_t +} + +type Trtattr = struct { + Frta_len uint16 + Frta_type uint16 +} + +type Trtgenmsg = struct { + Frtgen_family uint8 +} + +type Tifinfomsg = struct { + Fifi_family uint8 + F__ifi_pad uint8 + Fifi_type uint16 + Fifi_index int32 + Fifi_flags uint32 + Fifi_change uint32 +} + +type Tifaddrmsg = struct { + Fifa_family Tuint8_t + Fifa_prefixlen Tuint8_t + Fifa_flags Tuint8_t + Fifa_scope Tuint8_t + Fifa_index Tuint32_t +} + +/* getifaddrs() reports hardware addresses with PF_PACKET that implies + * struct sockaddr_ll. But e.g. Infiniband socket address length is + * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct + * to extend ssl_addr - callers should be able to still use it. */ +type Tsockaddr_ll_hack = struct { + Fsll_family uint16 + Fsll_protocol uint16 + Fsll_ifindex int32 + Fsll_hatype uint16 + Fsll_pkttype uint8 + Fsll_halen uint8 + Fsll_addr [24]uint8 +} + +type Tsockany = struct { + Fll [0]Tsockaddr_ll_hack + Fv4 [0]Tsockaddr_in + Fv6 [0]Tsockaddr_in6 + Fsa Tsockaddr + F__ccgo_pad4 [20]byte +} + +type Tifaddrs_storage = struct { + Fifa Tifaddrs + Fhash_next uintptr + Faddr Tsockany + Fnetmask Tsockany + Fifu Tsockany + Findex uint32 + Fname [17]uint8 +} + +type Tifaddrs_ctx = struct { + Ffirst uintptr + Flast uintptr + Fhash [64]uintptr +} + +func Xfreeifaddrs(tls *TLS, ifp uintptr) { + if __ccgo_strace { + trc("tls=%v ifp=%v, (%v:)", tls, ifp, origin(2)) + } + var n uintptr + _ = n + for ifp != 0 { + n = (*Tifaddrs)(unsafe.Pointer(ifp)).Fifa_next + Xfree(tls, ifp) + ifp = n + } +} + +func _copy_addr(tls *TLS, r uintptr, af int32, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32) { + var dst uintptr + var len1 int32 + _, _ = dst, len1 + switch af { + case int32(PF_INET): + dst = sa + 4 + len1 = int32(4) + case int32(PF_INET6): + dst = sa + 8 + len1 = int32(16) + if int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xf) == int32(0x2) { + (*(*Tsockaddr_in6)(unsafe.Pointer(sa))).Fsin6_scope_id = uint32(ifindex) + } + default: + return + } + if addrlen < uint32(len1) { + return + } + (*Tsockany)(unsafe.Pointer(sa)).Fsa.Fsa_family = uint16(af) + _memcpy(tls, dst, addr, uint32(len1)) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _gen_netmask(tls *TLS, r uintptr, af int32, sa uintptr, prefixlen int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v1 int32 + var _ /* addr at bp+0 */ [16]Tuint8_t + _, _ = i, v1 + *(*[16]Tuint8_t)(unsafe.Pointer(bp)) = [16]Tuint8_t{} + if uint32(prefixlen) > Uint32FromInt32(8)*Uint32FromInt64(16) { + prefixlen = int32(Uint32FromInt32(8) * Uint32FromInt64(16)) + } + i = prefixlen / int32(8) + Xmemset(tls, bp, int32(0xff), uint32(i)) + if uint32(i) < uint32(16) { + v1 = i + i++ + (*(*[16]Tuint8_t)(unsafe.Pointer(bp)))[v1] = uint8(int32(0xff) << (int32(8) - prefixlen%int32(8))) + } + _copy_addr(tls, r, af, sa, bp, uint32(16), 0) +} + +func _copy_lladdr(tls *TLS, r uintptr, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32, hatype uint16) { + if addrlen > uint32(24) { + return + } + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_family = uint16(PF_PACKET) + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_ifindex = ifindex + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_hatype = hatype + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_halen = uint8(addrlen) + _memcpy(tls, sa+12, addr, addrlen) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _netlink_msg_to_ifaddr(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var bucket uint32 + var ctx, ifa, ifi, ifs, ifs0, rta uintptr + var stats_len int32 + _, _, _, _, _, _, _, _ = bucket, ctx, ifa, ifi, ifs, ifs0, rta, stats_len + ctx = pctx + ifi = h + UintptrFromInt64(16) + ifa = h + UintptrFromInt64(16) + stats_len = 0 + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != int32(IFLA_STATS) { + goto _1 + } + stats_len = int32(uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - Uint32FromInt64(4)) + break + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + } else { + ifs0 = *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index%uint32(IFADDRS_HASH_SIZE))*4)) + for { + if !(ifs0 != 0) { + break + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Findex == (*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index { + break + } + goto _2 + _2: + ; + ifs0 = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fhash_next + } + if !(ifs0 != 0) { + return 0 + } + } + ifs = Xcalloc(tls, uint32(1), uint32(164)+uint32(stats_len)) + if ifs == uintptr(0) { + return -int32(1) + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex = uint32((*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFLA_IFNAME): + if uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint32(4) < uint32(17) { + _memcpy(tls, ifs+144, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 144 + } + case int32(IFLA_ADDRESS): + _copy_lladdr(tls, ifs+12, ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_BROADCAST): + _copy_lladdr(tls, ifs+20, ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_STATS): + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data = ifs + UintptrFromInt32(1)*164 + _memcpy(tls, (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + break + } + goto _3 + _3: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + bucket = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex % uint32(IFADDRS_HASH_SIZE) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fhash_next = *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr(bucket)*4)) + *(*uintptr)(unsafe.Pointer(ctx + 8 + uintptr(bucket)*4)) = ifs + } + } else { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_name + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(8)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFA_ADDRESS): + /* If ifa_addr is already set we, received an IFA_LOCAL before + * so treat this as destination address */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _copy_addr(tls, ifs+20, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } else { + _copy_addr(tls, ifs+12, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } + case int32(IFA_BROADCAST): + _copy_addr(tls, ifs+20, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+104, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LOCAL): + /* If ifa_addr is set and we get IFA_LOCAL, assume we have + * a point-to-point network. Move address to correct field. */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifu = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Faddr + *(*uintptr)(unsafe.Pointer(ifs + 20)) = ifs + 104 + Xmemset(tls, ifs+32, 0, uint32(36)) + } + _copy_addr(tls, ifs+12, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+32, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LABEL): + if uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint32(4) < uint32(17) { + _memcpy(tls, ifs+144, rta+UintptrFromInt64(4), uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint32FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 144 + } + break + } + goto _4 + _4: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _gen_netmask(tls, ifs+16, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+68, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_prefixlen)) + } + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + if !((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst != 0) { + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst = ifs + } + if (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast != 0 { + (*Tifaddrs)(unsafe.Pointer((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast)).Fifa_next = ifs + } + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast = ifs + } else { + Xfree(tls, ifs) + } + return 0 +} + +func Xgetifaddrs(tls *TLS, ifap uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ifap=%v, (%v:)", tls, ifap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var ctx uintptr + var r int32 + var _ /* _ctx at bp+0 */ Tifaddrs_ctx + _, _ = ctx, r + ctx = bp + Xmemset(tls, ctx, 0, uint32(264)) + r = X__rtnetlink_enumerate(tls, PF_UNSPEC, PF_UNSPEC, __ccgo_fp(_netlink_msg_to_ifaddr), ctx) + if r == 0 { + *(*uintptr)(unsafe.Pointer(ifap)) = (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst + } else { + Xfreeifaddrs(tls, (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst) + } + return r +} + +const RR_PTR = 12 + +func _itoa(tls *TLS, p uintptr, x uint32) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + p += uintptr(Uint32FromInt32(3) * Uint32FromInt64(4)) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func _mkptr4(tls *TLS, s uintptr, ip uintptr) { + bp := tls.Alloc(48) + defer tls.Free(48) + Xsprintf(tls, s, __ccgo_ts+897, VaList(bp+8, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) +} + +func _mkptr6(tls *TLS, s uintptr, ip uintptr) { + var i int32 + var v2, v3, v4, v5 uintptr + _, _, _, _, _ = i, v2, v3, v4, v5 + i = int32(15) + for { + if !(i >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&int32(15)] + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>int32(4)] + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('.') + goto _1 + _1: + ; + i-- + } + Xstrcpy(tls, s, __ccgo_ts+922) +} + +var _xdigits = [17]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + +func _reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { + bp := tls.Alloc(1744) + defer tls.Free(1744) + var f, p, z, v1, v2, v8 uintptr + var v10, v11, v15, v16, v4, v5 int32 + var v13, v18, v7 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1592 */ TFILE + var _ /* atmp at bp+1544 */ [16]uint8 + var _ /* iplit at bp+1560 */ Taddress + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, p, z, v1, v10, v11, v13, v15, v16, v18, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+931, bp+1592, bp+512, uint32(1032)) + if !(f != 0) { + return + } + if family == int32(PF_INET) { + _memcpy(tls, bp+1544+uintptr(12), a, uint32(4)) + _memcpy(tls, bp+1544, __ccgo_ts+942, uint32(12)) + a = bp + 1544 + } + for Xfgets(tls, bp, int32(512), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + if X__lookup_ipliteral(tls, bp+1560, bp, PF_UNSPEC) <= 0 { + continue + } + if (*(*Taddress)(unsafe.Pointer(bp + 1560))).Ffamily == int32(PF_INET) { + _memcpy(tls, bp+1560+8+uintptr(12), bp+1560+8, uint32(4)) + _memcpy(tls, bp+1560+8, __ccgo_ts+942, uint32(12)) + (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid = uint32(0) + } + if Xmemcmp(tls, a, bp+1560+8, uint32(16)) != 0 || (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid != scopeid { + continue + } + for { + if v13 = *(*uint8)(unsafe.Pointer(p)) != 0; v13 { + v10 = int32(*(*uint8)(unsafe.Pointer(p))) + v11 = BoolInt32(v10 == int32(' ') || uint32(v10)-uint32('\t') < uint32(5)) + goto _12 + _12: + } + if !(v13 && v11 != 0) { + break + } + goto _9 + _9: + ; + p++ + } + z = p + for { + if v18 = *(*uint8)(unsafe.Pointer(z)) != 0; v18 { + v15 = int32(*(*uint8)(unsafe.Pointer(z))) + v16 = BoolInt32(v15 == int32(' ') || uint32(v15)-uint32('\t') < uint32(5)) + goto _17 + _17: + } + if !(v18 && !(v16 != 0)) { + break + } + goto _14 + _14: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if int32(z)-int32(p) < int32(256) { + _memcpy(tls, buf, p, uint32(int32(z)-int32(p)+int32(1))) + break + } + } + X__fclose_ca(tls, f) +} + +func _reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { + bp := tls.Alloc(1312) + defer tls.Free(1312) + var f, p, v1, v2, v8 uintptr + var svport uint32 + var v4, v5 int32 + var v7 bool + var _ /* _buf at bp+132 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _ = f, p, svport, v1, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+955, bp+1168, bp+132, uint32(1032)) + if !(f != 0) { + return + } + for Xfgets(tls, bp, int32(128), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + svport = Xstrtoul(tls, p, bp+128, int32(10)) + if svport != uint32(port) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if dgram != 0 && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+969, uint32(4)) != 0 { + continue + } + if !(dgram != 0) && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+974, uint32(4)) != 0 { + continue + } + if int32(p)-t__predefined_ptrdiff_t(bp) > int32(32) { + continue + } + _memcpy(tls, buf, bp, uint32(int32(p)-t__predefined_ptrdiff_t(bp))) + break + } + X__fclose_ca(tls, f) +} + +func _dns_parse_callback(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + if rr != int32(RR_PTR) { + return 0 + } + if X__dn_expand(tls, packet, packet+uintptr(plen), data, c, int32(256)) <= 0 { + *(*uint8)(unsafe.Pointer(c)) = uint8(0) + } + return 0 +} + +func Xgetnameinfo(tls *TLS, sa uintptr, sl Tsocklen_t, node uintptr, nodelen Tsocklen_t, serv uintptr, servlen Tsocklen_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sa=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa, sl, node, nodelen, serv, servlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(976) + defer tls.Free(976) + var a, p, p1, v1 uintptr + var af, port, qlen, rlen int32 + var scopeid uint32 + var _ /* buf at bp+78 */ [256]uint8 + var _ /* num at bp+334 */ [13]uint8 + var _ /* ptr at bp+0 */ [78]uint8 + var _ /* query at bp+347 */ [96]uint8 + var _ /* reply at bp+443 */ [512]uint8 + var _ /* tmp at bp+955 */ [17]uint8 + _, _, _, _, _, _, _, _, _ = a, af, p, p1, port, qlen, rlen, scopeid, v1 + af = int32((*Tsockaddr)(unsafe.Pointer(sa)).Fsa_family) + switch af { + case int32(PF_INET): + a = sa + 4 + if sl < uint32(16) { + return -int32(6) + } + _mkptr4(tls, bp, a) + scopeid = uint32(0) + case int32(PF_INET6): + a = sa + 8 + if sl < uint32(28) { + return -int32(6) + } + if Xmemcmp(tls, a, __ccgo_ts+942, uint32(12)) != 0 { + _mkptr6(tls, bp, a) + } else { + _mkptr4(tls, bp, a+uintptr(12)) + } + scopeid = (*Tsockaddr_in6)(unsafe.Pointer(sa)).Fsin6_scope_id + default: + return -int32(6) + } + if node != 0 && nodelen != 0 { + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + _reverse_hosts(tls, bp+78, a, scopeid, af) + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) && !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + qlen = X__res_mkquery(tls, 0, bp, int32(1), int32(RR_PTR), uintptr(0), 0, uintptr(0), bp+347, int32(96)) + (*(*[96]uint8)(unsafe.Pointer(bp + 347)))[int32(3)] = uint8(0) /* don't need AD flag */ + rlen = X__res_send(tls, bp+347, qlen, bp+443, int32(512)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if rlen > 0 { + if uint32(rlen) > uint32(512) { + rlen = int32(512) + } + X__dns_parse(tls, bp+443, rlen, __ccgo_fp(_dns_parse_callback), bp+78) + } + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) { + if flags&int32(NI_NAMEREQD) != 0 { + return -int32(2) + } + Xinet_ntop(tls, af, a, bp+78, uint32(256)) + if scopeid != 0 { + p = uintptr(0) + if !(flags&Int32FromInt32(NI_NUMERICSCOPE) != 0) && (int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xf) == int32(0x2)) { + p = Xif_indextoname(tls, scopeid, bp+955+uintptr(1)) + } + if !(p != 0) { + p = _itoa(tls, bp+334, scopeid) + } + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8('%') + Xstrcat(tls, bp+78, p) + } + } + if Xstrlen(tls, bp+78) >= nodelen { + return -int32(12) + } + Xstrcpy(tls, node, bp+78) + } + if serv != 0 && servlen != 0 { + p1 = bp + 78 + port = int32(Xntohs(tls, (*Tsockaddr_in)(unsafe.Pointer(sa)).Fsin_port)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICSERV) != 0) { + _reverse_services(tls, bp+78, port, flags&int32(NI_DGRAM)) + } + if !(*(*uint8)(unsafe.Pointer(p1)) != 0) { + p1 = _itoa(tls, bp+334, uint32(port)) + } + if Xstrlen(tls, p1) >= servlen { + return -int32(12) + } + Xstrcpy(tls, serv, p1) + } + return 0 +} + +func Xgetpeername(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getpeername) + _ = int32(__SC_getpeername) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xgetservbyname(tls *TLS, name uintptr, prots uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v, (%v:)", tls, name, prots, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if Xgetservbyname_r(tls, name, prots, uintptr(unsafe.Pointer(&_se)), uintptr(unsafe.Pointer(&_buf3)), uint32(8), bp) != 0 { + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_se)) +} + +var _se Tservent + +var _buf3 [2]uintptr + +const ALIGN = 0 + +func Xgetservbyname_r(tls *TLS, name uintptr, prots uintptr, se uintptr, buf uintptr, buflen Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v se=%v buf=%v buflen=%v res=%v, (%v:)", tls, name, prots, se, buf, buflen, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var align, cnt, proto int32 + var v1 uintptr + var _ /* end at bp+8 */ uintptr + var _ /* servs at bp+0 */ [2]Tservice + _, _, _, _ = align, cnt, proto, v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Don't treat numeric port number strings as service records. */ + *(*uintptr)(unsafe.Pointer(bp + 8)) = __ccgo_ts + Xstrtoul(tls, name, bp+8, int32(10)) + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + return int32(ENOENT) + } + /* Align buffer */ + align = int32(-uint32(buf) & (Uint32FromInt64(8) - Uint32FromInt64(4) - Uint32FromInt32(1))) + if buflen < Uint32FromInt32(2)*Uint32FromInt64(4)+uint32(align) { + return int32(ERANGE) + } + buf += uintptr(align) + if !(prots != 0) { + proto = 0 + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+979) != 0) { + proto = int32(IPPROTO_TCP) + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+983) != 0) { + proto = int32(IPPROTO_UDP) + } else { + return int32(EINVAL) + } + } + } + cnt = X__lookup_serv(tls, bp, name, proto, 0, 0) + if cnt < 0 { + switch cnt { + case -int32(10): + fallthrough + case -int32(11): + return int32(ENOMEM) + default: + return int32(ENOENT) + } + } + (*Tservent)(unsafe.Pointer(se)).Fs_name = name + (*Tservent)(unsafe.Pointer(se)).Fs_aliases = buf + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases)) = (*Tservent)(unsafe.Pointer(se)).Fs_name + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases + 1*4)) = uintptr(0) + (*Tservent)(unsafe.Pointer(se)).Fs_port = int32(Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fport)) + if int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fproto) == int32(IPPROTO_TCP) { + v1 = __ccgo_ts + 979 + } else { + v1 = __ccgo_ts + 983 + } + (*Tservent)(unsafe.Pointer(se)).Fs_proto = v1 + *(*uintptr)(unsafe.Pointer(res)) = se + return 0 +} + +func Xgetsockname(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getsockname) + _ = int32(__SC_getsockname) + v2 = fd + v3 = int32(addr) + v4 = int32(len1) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xgetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r, r1, v1, v10, v17, v19, v26, v8 int32 + var tv uintptr + var v11, v12, v13, v14, v15, v16, v2, v20, v21, v22, v23, v24, v25, v3, v4, v5, v6, v7 Tsyscall_arg_t + var _ /* tv32 at bp+8 */ [2]int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, tv, v1, v10, v11, v12, v13, v14, v15, v16, v17, v19, v2, v20, v21, v22, v23, v24, v25, v26, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v2 = fd + v3 = level + v4 = optname + v5 = int32(optval) + v6 = int32(optlen) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = v8 + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if *(*Tsocklen_t)(unsafe.Pointer(optlen)) < uint32(16) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + *(*[1]Tsocklen_t)(unsafe.Pointer(bp)) = [1]Tsocklen_t{ + 0: uint32(8), + } + v10 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v11 = fd + v12 = level + v13 = optname + v14 = int32(bp + 8) + v15 = int32(bp) + v16 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v10, v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, v10, v11, v12, v13, v14, v15, v16) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + r1 = v17 + if r1 < 0 { + break + } + tv = optval + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp + 8)))[0]) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64((*(*[2]int32)(unsafe.Pointer(bp + 8)))[int32(1)]) + *(*Tsocklen_t)(unsafe.Pointer(optlen)) = uint32(16) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if false { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v19 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v20 = fd + v21 = level + v22 = optname + v23 = int32(optval) + v24 = int32(optlen) + v25 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v19, v20, v21, v22, v23, v24, v25) + } else { + r = X__syscall6(tls, v19, v20, v21, v22, v23, v24, v25) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v26 = r + goto _27 + } + v26 = r + goto _27 + _27: + r1 = v26 + break + } + } + } + return X__syscall_ret(tls, uint32(r1)) +} + +func X__h_errno_location(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstack != 0) { + return uintptr(unsafe.Pointer(&Xh_errno)) + } + return uintptr(___get_tp(tls)) + 80 +} + +func Xherror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1, v2 uintptr + _, _ = v1, v2 + if msg != 0 { + v1 = msg + } else { + v1 = __ccgo_ts + } + if msg != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+987, VaList(bp+8, v1, v2, Xhstrerror(tls, *(*int32)(unsafe.Pointer(X__h_errno_location(tls)))))) +} + +type Tcpu_set_t1 = struct { + F__bits [32]uint32 +} + +type Tucontext_t5 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +var _msgs1 = [84]uint8{'H', 'o', 's', 't', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xhstrerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs1)) + ecode-- + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode-- + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xhtonl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +func Xif_freenameindex(tls *TLS, idx uintptr) { + if __ccgo_strace { + trc("tls=%v idx=%v, (%v:)", tls, idx, origin(2)) + } + Xfree(tls, idx) +} + +func Xif_indextoname(tls *TLS, index uint32, name uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v index=%v name=%v, (%v:)", tls, index, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var fd, r, v1 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _ = fd, r, v1 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(bp + 16)) = int32(index) + r = Xioctl(tls, fd, int32(SIOCGIFNAME), VaList(bp+40, bp)) + X__syscall1(tls, int32(SYS_close), fd) + if r < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENODEV) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENXIO) + } + return uintptr(0) + } + return Xstrncpy(tls, name, bp, uint32(IF_NAMESIZE)) +} + +type Tifnamemap = struct { + Fhash_next uint32 + Findex uint32 + Fnamelen uint8 + Fname [16]uint8 +} + +type Tifnameindexctx = struct { + Fnum uint32 + Fallocated uint32 + Fstr_bytes uint32 + Flist uintptr + Fhash [64]uint32 +} + +func _netlink_msg_to_nameindex(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var a Tsize_t + var bucket, index, namelen, type1 int32 + var ctx, ifa, ifi, map1, rta uintptr + var i, v2 uint32 + _, _, _, _, _, _, _, _, _, _, _, _ = a, bucket, ctx, i, ifa, ifi, index, map1, namelen, rta, type1, v2 + ctx = pctx + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + ifi = h + UintptrFromInt64(16) + index = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index + type1 = int32(IFLA_IFNAME) + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(16)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } else { + ifa = h + UintptrFromInt64(16) + index = int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index) + type1 = int32(IFA_LABEL) + rta = h + UintptrFromInt64(16) + uintptr((Uint32FromInt64(8)+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + for { + if !(uint32(int32(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int32(rta)) >= uint32(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != type1 { + goto _1 + } + namelen = int32(uint32((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - uint32(4) - uint32(1)) + if namelen > int32(IF_NAMESIZE) { + return 0 + } + /* suppress duplicates */ + bucket = index % int32(IFADDRS_HASH_SIZE) + i = *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) + for i != 0 { + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr(i-uint32(1))*28 + if (*Tifnamemap)(unsafe.Pointer(map1)).Findex == uint32(index) && int32((*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen) == namelen && Xmemcmp(tls, map1+9, rta+UintptrFromInt64(4), uint32(namelen)) == 0 { + return 0 + } + i = (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next + } + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum >= (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated { + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated != 0 { + v2 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated*uint32(2) + uint32(1) + } else { + v2 = uint32(8) + } + a = v2 + if a > Uint32FromUint32(0xffffffff)/Uint32FromInt64(28) { + return -int32(1) + } + map1 = Xrealloc(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist, a*uint32(28)) + if !(map1 != 0) { + return -int32(1) + } + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist = map1 + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated = a + } + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*28 + (*Tifnamemap)(unsafe.Pointer(map1)).Findex = uint32(index) + (*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen = uint8(namelen) + _memcpy(tls, map1+9, rta+UintptrFromInt64(4), uint32(namelen)) + *(*uint32)(unsafe.Pointer(ctx + 8)) += uint32(namelen + int32(1)) + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum++ + (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next = *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) + *(*uint32)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*4)) = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum + return 0 + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + return 0 +} + +func Xif_nameindex(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var ctx, d, ifs, p, s, v2 uintptr + var i int32 + var _ /* _ctx at bp+0 */ Tifnameindexctx + var _ /* cs at bp+272 */ int32 + _, _, _, _, _, _, _ = ctx, d, i, ifs, p, s, v2 + ctx = bp + ifs = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+272) + Xmemset(tls, ctx, 0, uint32(272)) + if X__rtnetlink_enumerate(tls, PF_UNSPEC, int32(PF_INET), __ccgo_fp(_netlink_msg_to_nameindex), ctx) < 0 { + goto err + } + ifs = Xmalloc(tls, ((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum+Uint32FromInt32(1))*8+(*Tifnameindexctx)(unsafe.Pointer(ctx)).Fstr_bytes) + if !(ifs != 0) { + goto err + } + p = ifs + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*8 + UintptrFromInt32(1)*8 + i = int32((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum) + d = ifs + s = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + for { + if !(i != 0) { + break + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = (*Tifnamemap)(unsafe.Pointer(s)).Findex + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = p + _memcpy(tls, p, s+9, uint32((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen)) + p += uintptr((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen) + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + goto _1 + _1: + ; + i-- + s += 28 + d += 8 + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = uint32(0) + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = uintptr(0) + goto err +err: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 272)), uintptr(0)) + Xfree(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOBUFS) + return ifs +} + +func Xif_nametoindex(tls *TLS, name uintptr) (r1 uint32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var fd, r, v1, v2 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _, _ = fd, r, v1, v2 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uint32(0) + } + Xstrncpy(tls, bp, name, uint32(16)) + r = Xioctl(tls, fd, int32(SIOCGIFINDEX), VaList(bp+40, bp)) + X__syscall1(tls, int32(SYS_close), fd) + if r < 0 { + v2 = 0 + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 16)) + } + return uint32(v2) +} + +func Xinet_addr(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* a at bp+0 */ Tin_addr + if !(X__inet_aton(tls, p, bp) != 0) { + return uint32(-Int32FromInt32(1)) + } + return (*(*Tin_addr)(unsafe.Pointer(bp))).Fs_addr +} + +func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, s uintptr + var i int32 + var _ /* a at bp+0 */ [4]uint32 + var _ /* z at bp+16 */ uintptr + _, _, _ = d, i, s + s = s0 + d = dest + *(*[4]uint32)(unsafe.Pointer(bp)) = [4]uint32{} + i = 0 + for { + if !(i < int32(4)) { + break + } + (*(*[4]uint32)(unsafe.Pointer(bp)))[i] = Xstrtoul(tls, s, bp+16, 0) + if *(*uintptr)(unsafe.Pointer(bp + 16)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != int32('.') || !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return 0 + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0) { + break + } + s = *(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(1) + goto _1 + _1: + ; + i++ + } + if i == int32(4) { + return 0 + } + switch i { + case 0: + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(1)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[0] & uint32(0xffffff) + *(*uint32)(unsafe.Pointer(bp)) >>= uint32(24) + fallthrough + case int32(1): + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(2)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(1)] & uint32(0xffff) + *(*uint32)(unsafe.Pointer(bp + 1*4)) >>= uint32(16) + fallthrough + case int32(2): + (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(3)] = (*(*[4]uint32)(unsafe.Pointer(bp)))[int32(2)] & uint32(0xff) + *(*uint32)(unsafe.Pointer(bp + 2*4)) >>= uint32(8) + } + i = 0 + for { + if !(i < int32(4)) { + break + } + if (*(*[4]uint32)(unsafe.Pointer(bp)))[i] > uint32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8((*(*[4]uint32)(unsafe.Pointer(bp)))[i]) + goto _2 + _2: + ; + i++ + } + return int32(1) +} + +func Xinet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__inet_aton(tls, s0, dest) +} + +func Xinet_network(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xntohl(tls, Xinet_addr(tls, p)) +} + +func Xinet_makeaddr(tls *TLS, n Tin_addr_t, h Tin_addr_t) (r Tin_addr) { + if __ccgo_strace { + trc("tls=%v n=%v h=%v, (%v:)", tls, n, h, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n < uint32(256) { + h |= n << int32(24) + } else { + if n < uint32(65536) { + h |= n << int32(16) + } else { + h |= n << int32(8) + } + } + return Tin_addr{ + Fs_addr: h, + } +} + +func Xinet_lnaof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h & uint32(0xffffff) + } + if h>>int32(24) < uint32(192) { + return h & uint32(0xffff) + } + return h & uint32(0xff) +} + +func Xinet_netof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h >> int32(24) + } + if h>>int32(24) < uint32(192) { + return h >> int32(16) + } + return h >> int32(8) +} + +func Xinet_ntoa(tls *TLS, _in Tin_addr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v _in=%v, (%v:)", tls, _in, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + *(*Tin_addr)(unsafe.Pointer(bp)) = _in + var a uintptr + _ = a + a = bp + Xsnprintf(tls, uintptr(unsafe.Pointer(&_buf4)), uint32(16), __ccgo_ts+995, VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3))))) + return uintptr(unsafe.Pointer(&_buf4)) +} + +var _buf4 [16]uint8 + +func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l Tsocklen_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var a uintptr + var best, i, j, max, v2 int32 + var v3 uint8 + var _ /* buf at bp+0 */ [100]uint8 + _, _, _, _, _, _, _ = a, best, i, j, max, v2, v3 + a = a0 + switch af { + case int32(PF_INET): + if uint32(Xsnprintf(tls, s, l, __ccgo_ts+995, VaList(bp+112, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { + return s + } + case int32(PF_INET6): + if Xmemcmp(tls, a, __ccgo_ts+942, uint32(12)) != 0 { + Xsnprintf(tls, bp, uint32(100), __ccgo_ts+1007, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } else { + Xsnprintf(tls, bp, uint32(100), __ccgo_ts+1031, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } + /* Replace longest /(^0|:)[:0]{2,}/ with "::" */ + v2 = Int32FromInt32(0) + best = v2 + i = v2 + max = Int32FromInt32(2) + for { + if !((*(*[100]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + if i != 0 && int32((*(*[100]uint8)(unsafe.Pointer(bp)))[i]) != int32(':') { + goto _1 + } + j = int32(Xstrspn(tls, bp+uintptr(i), __ccgo_ts+1061)) + if j > max { + best = i + max = j + } + goto _1 + _1: + ; + i++ + } + if max > int32(3) { + v3 = Uint8FromUint8(':') + (*(*[100]uint8)(unsafe.Pointer(bp)))[best+int32(1)] = v3 + (*(*[100]uint8)(unsafe.Pointer(bp)))[best] = v3 + Xmemmove(tls, bp+uintptr(best)+uintptr(2), bp+uintptr(best)+uintptr(max), uint32(i-best-max+int32(1))) + } + if Xstrlen(tls, bp) < l { + Xstrcpy(tls, s, bp) + return s + } + default: + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return uintptr(0) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOSPC) + return uintptr(0) +} + +func _hexval(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, v14, v15, v4, v7 uintptr + var brk, d, i, j, need_v4, v, v10, v3, v9 int32 + var v11, v5 bool + var _ /* ip at bp+0 */ [8]Tuint16_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, brk, d, i, j, need_v4, v, v10, v11, v14, v15, v3, v4, v5, v7, v9 + a = a0 + brk = -int32(1) + need_v4 = 0 + if af == int32(PF_INET) { + i = 0 + for { + if !(i < int32(4)) { + break + } + v3 = Int32FromInt32(0) + j = v3 + v = v3 + for { + if !(j < int32(3) && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + v = int32(10)*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - int32('0') + goto _2 + _2: + ; + j++ + } + if j == 0 || j > int32(1) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('0') || v > int32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == int32(3) { + return int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') { + return 0 + } + s += uintptr(j + int32(1)) + goto _1 + _1: + ; + i++ + } + return 0 + } else { + if af != int32(PF_INET6) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return -int32(1) + } + } + if v5 = int32(*(*uint8)(unsafe.Pointer(s))) == int32(':'); v5 { + s++ + v4 = s + } + if v5 && int32(*(*uint8)(unsafe.Pointer(v4))) != int32(':') { + return 0 + } + i = 0 + for { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(':') && brk < 0 { + brk = i + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + s++ + v7 = s + if !(*(*uint8)(unsafe.Pointer(v7)) != 0) { + break + } + if i == int32(7) { + return 0 + } + goto _6 + } + v9 = Int32FromInt32(0) + j = v9 + v = v9 + for { + if v11 = j < int32(4); v11 { + v10 = _hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) + d = v10 + } + if !(v11 && v10 >= 0) { + break + } + v = int32(16)*v + d + goto _8 + _8: + ; + j++ + } + if j == 0 { + return 0 + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(v) + if !(*(*uint8)(unsafe.Pointer(s + uintptr(j))) != 0) && (brk >= 0 || i == int32(7)) { + break + } + if i == int32(7) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32(':') { + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') || i < int32(6) && brk < 0 { + return 0 + } + need_v4 = int32(1) + i++ + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + break + } + s += uintptr(j + int32(1)) + goto _6 + _6: + ; + i++ + } + if brk >= 0 { + Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint32(int32(2)*(i+int32(1)-brk))) + j = 0 + for { + if !(j < int32(7)-i) { + break + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[brk+j] = uint16(0) + goto _12 + _12: + ; + j++ + } + } + j = 0 + for { + if !(j < int32(8)) { + break + } + v14 = a + a++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) >> int32(8)) + v15 = a + a++ + *(*uint8)(unsafe.Pointer(v15)) = uint8((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) + goto _13 + _13: + ; + j++ + } + if need_v4 != 0 && Xinet_pton(tls, int32(PF_INET), s, a-uintptr(4)) <= 0 { + return 0 + } + return int32(1) +} + +func Xlisten(tls *TLS, fd int32, backlog int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v backlog=%v, (%v:)", tls, fd, backlog, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_listen) + _ = int32(__SC_listen) + v2 = fd + v3 = backlog + v4 = int32(Int32FromInt32(0)) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var p, v1 uintptr + var scopeid uint64 + var _ /* a4 at bp+0 */ Tin_addr + var _ /* a6 at bp+4 */ Tin6_addr + var _ /* tmp at bp+20 */ [64]uint8 + var _ /* z at bp+84 */ uintptr + _, _, _ = p, scopeid, v1 + if X__inet_aton(tls, name, bp) > 0 { + if family == int32(PF_INET6) { /* wrong family */ + return -int32(5) + } + _memcpy(tls, buf+8, bp, uint32(4)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET) + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(0) + return int32(1) + } + p = Xstrchr(tls, name, int32('%')) + scopeid = uint64(0) + if p != 0 && int32(p)-int32(name) < int32(64) { + _memcpy(tls, bp+20, name, uint32(int32(p)-int32(name))) + (*(*[64]uint8)(unsafe.Pointer(bp + 20)))[int32(p)-int32(name)] = uint8(0) + name = bp + 20 + } + if Xinet_pton(tls, int32(PF_INET6), name, bp+4) <= 0 { + return 0 + } + if family == int32(PF_INET) { /* wrong family */ + return -int32(5) + } + _memcpy(tls, buf+8, bp+4, uint32(16)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET6) + if p != 0 { + p++ + v1 = p + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(v1)))-uint32('0') < uint32(10)) != 0 { + scopeid = Xstrtoull(tls, p, bp+84, int32(10)) + } else { + *(*uintptr)(unsafe.Pointer(bp + 84)) = p - uintptr(1) + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)))) != 0 { + if !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xc0) == int32(0x80)) && !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xf) == int32(0x2)) { + return -int32(2) + } + scopeid = uint64(Xif_nametoindex(tls, p)) + if !(scopeid != 0) { + return -int32(2) + } + } + if scopeid > uint64(0xffffffff) { + return -int32(2) + } + } + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(scopeid) + return int32(1) +} + +const ABUF_SIZE = 4800 +const DAS_MATCHINGLABEL = 268435456 +const DAS_MATCHINGSCOPE = 536870912 +const DAS_ORDER_SHIFT = 0 +const DAS_PREC_SHIFT = 20 +const DAS_PREFIX_SHIFT = 8 +const DAS_SCOPE_SHIFT = 16 +const DAS_USABLE = 1073741824 +const RR_A = 1 +const RR_AAAA = 28 +const RR_CNAME = 5 + +func _is_valid_hostname(tls *TLS, host uintptr) (r int32) { + var s uintptr + _ = s + if Xstrnlen(tls, host, uint32(255))-uint32(1) >= uint32(254) || Xmbstowcs(tls, uintptr(0), host, uint32(0)) == uint32(-Int32FromInt32(1)) { + return 0 + } + s = host + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) >= int32(0x80) || int32(*(*uint8)(unsafe.Pointer(s))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0) { + break + } + goto _1 + _1: + ; + s++ + } + return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) +} + +func _name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) (r int32) { + var cnt, v1, v2, v3, v4 int32 + _, _, _, _, _ = cnt, v1, v2, v3, v4 + cnt = 0 + if name != 0 { + return 0 + } + if flags&int32(AI_PASSIVE) != 0 { + if family != int32(PF_INET6) { + v1 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v1)*28)) = Taddress{ + Ffamily: int32(PF_INET), + } + } + if family != int32(PF_INET) { + v2 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v2)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + } + } + } else { + if family != int32(PF_INET6) { + v3 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v3)*28)) = Taddress{ + Ffamily: int32(PF_INET), + Faddr: [16]Tuint8_t{ + 0: uint8(127), + 3: uint8(1), + }, + } + } + if family != int32(PF_INET) { + v4 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + Faddr: [16]Tuint8_t{ + 15: uint8(1), + }, + } + } + } + return cnt +} + +func _name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + return X__lookup_ipliteral(tls, buf, name, family) +} + +func _name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(1696) + defer tls.Free(1696) + var badfam, cnt, have_canon, v14, v15, v20, v21, v25, v26, v29, v5, v6, v8, v9 int32 + var f, p, z, v1, v18, v2, v4 uintptr + var l Tsize_t + var v11, v12, v17, v23, v28 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1544 */ TFILE + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = badfam, cnt, f, have_canon, l, p, z, v1, v11, v12, v14, v15, v17, v18, v2, v20, v21, v23, v25, v26, v28, v29, v4, v5, v6, v8, v9 + l = Xstrlen(tls, name) + cnt = 0 + badfam = 0 + have_canon = 0 + f = X__fopen_rb_ca(tls, __ccgo_ts+931, bp+1544, bp+512, uint32(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return 0 + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(512), f) != 0 && cnt < int32(MAXADDRS) { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + uintptr(1) + for { + v4 = Xstrstr(tls, p, name) + p = v4 + if v12 = v4 != 0; v12 { + v5 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + ; + if v11 = !(v6 != 0); !v11 { + v8 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + } + if !(v12 && (v11 || !(v9 != 0))) { + break + } + goto _3 + _3: + ; + p++ + } + if !(p != 0) { + continue + } + /* Isolate IP address to parse */ + p = bp + for { + if v17 = *(*uint8)(unsafe.Pointer(p)) != 0; v17 { + v14 = int32(*(*uint8)(unsafe.Pointer(p))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + } + if !(v17 && !(v15 != 0)) { + break + } + goto _13 + _13: + ; + p++ + } + v18 = p + p++ + *(*uint8)(unsafe.Pointer(v18)) = uint8(0) + switch _name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { + case int32(1): + cnt++ + case 0: + continue + default: + badfam = -int32(5) + break + } + if have_canon != 0 { + continue + } + /* Extract first name as canonical name */ + for { + if v23 = *(*uint8)(unsafe.Pointer(p)) != 0; v23 { + v20 = int32(*(*uint8)(unsafe.Pointer(p))) + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + } + if !(v23 && v21 != 0) { + break + } + goto _19 + _19: + ; + p++ + } + z = p + for { + if v28 = *(*uint8)(unsafe.Pointer(z)) != 0; v28 { + v25 = int32(*(*uint8)(unsafe.Pointer(z))) + v26 = BoolInt32(v25 == int32(' ') || uint32(v25)-uint32('\t') < uint32(5)) + goto _27 + _27: + } + if !(v28 && !(v26 != 0)) { + break + } + goto _24 + _24: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if _is_valid_hostname(tls, p) != 0 { + have_canon = int32(1) + _memcpy(tls, canon, p, uint32(int32(z)-int32(p)+int32(1))) + } + } + X__fclose_ca(tls, f) + if cnt != 0 { + v29 = cnt + } else { + v29 = badfam + } + return v29 +} + +type Tdpc_ctx = struct { + Faddrs uintptr + Fcanon uintptr + Fcnt int32 + Frrtype int32 +} + +func _dns_parse_callback1(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ctx, v2 uintptr + var family, v1 int32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _, _ = ctx, family, v1, v2 + ctx = c + if rr == int32(RR_CNAME) { + if X__dn_expand(tls, packet, packet+uintptr(plen), data, bp, int32(256)) > 0 && _is_valid_hostname(tls, bp) != 0 { + Xstrcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcanon, bp) + } + return 0 + } + if (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt >= int32(MAXADDRS) { + return 0 + } + if rr != (*Tdpc_ctx)(unsafe.Pointer(ctx)).Frrtype { + return 0 + } + switch rr { + case int32(RR_A): + if len1 != int32(4) { + return -int32(1) + } + family = int32(PF_INET) + case int32(RR_AAAA): + if len1 != int32(16) { + return -int32(1) + } + family = int32(PF_INET6) + break + } + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Ffamily = family + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Fscopeid = uint32(0) + v2 = ctx + 8 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + _memcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs+uintptr(v1)*28+8, data, uint32(len1)) + return 0 +} + +func _name_from_dns(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, conf uintptr) (r int32) { + bp := tls.Alloc(10208) + defer tls.Free(10208) + var i, nq int32 + var qtypes [2]int32 + var _ /* abuf at bp+560 */ [2][4800]uint8 + var _ /* alens at bp+10184 */ [2]int32 + var _ /* ap at bp+10168 */ [2]uintptr + var _ /* ctx at bp+10192 */ Tdpc_ctx + var _ /* qbuf at bp+0 */ [2][280]uint8 + var _ /* qlens at bp+10176 */ [2]int32 + var _ /* qp at bp+10160 */ [2]uintptr + _, _, _ = i, nq, qtypes + *(*[2]uintptr)(unsafe.Pointer(bp + 10160)) = [2]uintptr{ + 0: bp, + 1: bp + 1*280, + } + *(*[2]uintptr)(unsafe.Pointer(bp + 10168)) = [2]uintptr{ + 0: bp + 560, + 1: bp + 560 + 1*4800, + } + nq = 0 + *(*Tdpc_ctx)(unsafe.Pointer(bp + 10192)) = Tdpc_ctx{ + Faddrs: buf, + Fcanon: canon, + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family != _afrr[i].Faf { + (*(*[2]int32)(unsafe.Pointer(bp + 10176)))[nq] = X__res_mkquery(tls, 0, name, int32(1), _afrr[i].Frr, uintptr(0), 0, uintptr(0), bp+uintptr(nq)*280, int32(280)) + if (*(*[2]int32)(unsafe.Pointer(bp + 10176)))[nq] == -int32(1) { + return 0 + } + qtypes[nq] = _afrr[i].Frr + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280 + 3)) = uint8(0) /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if nq != 0 && int32(*(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))) == int32(*(*uint8)(unsafe.Pointer(bp))) { + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))++ + } + nq++ + } + goto _1 + _1: + ; + i++ + } + if X__res_msend_rc(tls, nq, bp+10160, bp+10176, bp+10168, bp+10184, int32(4800), conf) < 0 { + return -int32(11) + } + i = 0 + for { + if !(i < nq) { + break + } + if (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i] < int32(4) || int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(2) { + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(3) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) != 0 { + return -int32(4) + } + goto _2 + _2: + ; + i++ + } + i = nq - int32(1) + for { + if !(i >= 0) { + break + } + (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Frrtype = qtypes[i] + if uint32((*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i]) > uint32(4800) { + (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i] = int32(4800) + } + X__dns_parse(tls, bp+560+uintptr(i)*4800, (*(*[2]int32)(unsafe.Pointer(bp + 10184)))[i], __ccgo_fp(_dns_parse_callback1), bp+10192) + goto _3 + _3: + ; + i-- + } + if (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Fcnt != 0 { + return (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10192))).Fcnt + } + return -int32(5) +} + +var _afrr = [2]struct { + Faf int32 + Frr int32 +}{ + 0: { + Faf: int32(PF_INET6), + Frr: int32(RR_A), + }, + 1: { + Faf: int32(PF_INET), + Frr: int32(RR_AAAA), + }, +} + +func _name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(368) + defer tls.Free(368) + var cnt, v10, v5, v6, v9 int32 + var dots, l, v2 Tsize_t + var p, z uintptr + var v12 bool + var _ /* conf at bp+256 */ Tresolvconf + var _ /* search at bp+0 */ [256]uint8 + _, _, _, _, _, _, _, _, _, _, _ = cnt, dots, l, p, z, v10, v12, v2, v5, v6, v9 + if X__get_resolv_conf(tls, bp+256, bp, uint32(256)) < 0 { + return -int32(1) + } + /* Count dots, suppress search when >=ndots or name ends in + * a dot, which is an explicit request for global scope. */ + v2 = Uint32FromInt32(0) + l = v2 + dots = v2 + for { + if !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l)))) == int32('.') { + dots++ + } + goto _1 + _1: + ; + l++ + } + if dots >= (*(*Tresolvconf)(unsafe.Pointer(bp + 256))).Fndots || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + *(*uint8)(unsafe.Pointer(bp)) = uint8(0) + } + /* Strip final dot for canon, fail if multiple trailing dots. */ + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if !(l != 0) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint32(1))))) == int32('.') { + return -int32(2) + } + /* This can never happen; the caller already checked length. */ + if l >= uint32(256) { + return -int32(2) + } + /* Name with search domain appended is setup in canon[]. This both + * provides the desired default canonical name (if the requested + * name is not a CNAME record) and serves as a buffer for passing + * the full requested name to name_from_dns. */ + _memcpy(tls, canon, name, l) + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8('.') + p = bp + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + for { + v5 = int32(*(*uint8)(unsafe.Pointer(p))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + goto _4 + _4: + ; + p++ + } + z = p + for { + if v12 = *(*uint8)(unsafe.Pointer(z)) != 0; v12 { + v9 = int32(*(*uint8)(unsafe.Pointer(z))) + v10 = BoolInt32(v9 == int32(' ') || uint32(v9)-uint32('\t') < uint32(5)) + goto _11 + _11: + } + if !(v12 && !(v10 != 0)) { + break + } + goto _8 + _8: + ; + z++ + } + if z == p { + break + } + if uint32(int32(z)-int32(p)) < uint32(256)-l-uint32(1) { + _memcpy(tls, canon+uintptr(l)+uintptr(1), p, uint32(int32(z)-int32(p))) + *(*uint8)(unsafe.Pointer(canon + uintptr(uint32(int32(z)-int32(p)+int32(1))+l))) = uint8(0) + cnt = _name_from_dns(tls, buf, canon, canon, family, bp+256) + if cnt != 0 { + return cnt + } + } + goto _3 + _3: + ; + p = z + } + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8(0) + return _name_from_dns(tls, buf, canon, name, family, bp+256) +} + +type Tpolicy = struct { + Faddr [16]uint8 + Flen1 uint8 + Fmask uint8 + Fprec uint8 + Flabel uint8 +} + +var _defpolicy = [6]Tpolicy{ + 0: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + Flen1: uint8(15), + Fmask: uint8(0xff), + Fprec: uint8(50), + }, + 1: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}, + Flen1: uint8(11), + Fmask: uint8(0xff), + Fprec: uint8(35), + Flabel: uint8(4), + }, + 2: { + Faddr: [16]uint8{' ', 2}, + Flen1: uint8(1), + Fmask: uint8(0xff), + Fprec: uint8(30), + Flabel: uint8(2), + }, + 3: { + Faddr: [16]uint8{' ', 1}, + Flen1: uint8(3), + Fmask: uint8(0xff), + Fprec: uint8(5), + Flabel: uint8(5), + }, + 4: { + Faddr: [16]uint8{252}, + Fmask: uint8(0xfe), + Fprec: uint8(3), + Flabel: uint8(13), + }, + 5: { + Faddr: [16]uint8{}, + Fprec: uint8(40), + Flabel: uint8(1), + }, +} + +func _policyof(tls *TLS, a uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&_defpolicy))+uintptr(i)*20, uint32(_defpolicy[i].Flen1)) != 0 { + goto _1 + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a + uintptr(_defpolicy[i].Flen1))))&int32(_defpolicy[i].Fmask) != int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + uintptr(_defpolicy[i].Flen1)))) { + goto _1 + } + return uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + goto _1 + _1: + ; + i++ + } + return r +} + +func _labelof(tls *TLS, a uintptr) (r int32) { + return int32((*Tpolicy)(unsafe.Pointer(_policyof(tls, a))).Flabel) +} + +func _scopeof(tls *TLS, a uintptr) (r int32) { + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) { + return int32(*(*Tuint8_t)(unsafe.Pointer(a + 1))) & int32(15) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) { + return int32(2) + } + if *(*Tuint32_t)(unsafe.Pointer(a)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 1*4)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 2*4)) == uint32(0) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 15))) == int32(1) { + return int32(2) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0xc0) { + return int32(5) + } + return int32(14) +} + +func _prefixmatch(tls *TLS, s uintptr, d uintptr) (r int32) { + var i uint32 + _ = i + i = uint32(0) + for { + if !(i < uint32(128) && !((int32(*(*Tuint8_t)(unsafe.Pointer(s + uintptr(i/uint32(8)))))^int32(*(*Tuint8_t)(unsafe.Pointer(d + uintptr(i/uint32(8))))))&(Int32FromInt32(128)>>(i%Uint32FromInt32(8))) != 0)) { + break + } + goto _1 + _1: + ; + i++ + } + return int32(i) +} + +func _addrcmp(tls *TLS, _a uintptr, _b uintptr) (r int32) { + var a, b uintptr + _, _ = a, b + a = _a + b = _b + return (*Taddress)(unsafe.Pointer(b)).Fsortkey - (*Taddress)(unsafe.Pointer(a)).Fsortkey +} + +func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var cnt, dlabel, dprec, dscope, family1, fd, i, j, key, prefixlen, v1, v4, v5 int32 + var da, dpolicy, sa uintptr + var dalen Tsocklen_t + var l Tsize_t + var _ /* cs at bp+0 */ int32 + var _ /* da4 at bp+76 */ Tsockaddr_in + var _ /* da6 at bp+32 */ Tsockaddr_in6 + var _ /* sa4 at bp+60 */ Tsockaddr_in + var _ /* sa6 at bp+4 */ Tsockaddr_in6 + var _ /* salen at bp+92 */ Tsocklen_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, da, dalen, dlabel, dpolicy, dprec, dscope, family1, fd, i, j, key, l, prefixlen, sa, v1, v4, v5 + cnt = 0 + *(*uint8)(unsafe.Pointer(canon)) = uint8(0) + if name != 0 { + /* reject empty name and check len so it fits into temp bufs */ + l = Xstrnlen(tls, name, uint32(255)) + if l-uint32(1) >= uint32(254) { + return -int32(2) + } + _memcpy(tls, canon, name, l+uint32(1)) + } + /* Procedurally, a request for v6 addresses with the v4-mapped + * flag set is like a request for unspecified family, followed + * by filtering of the results. */ + if flags&int32(AI_V4MAPPED) != 0 { + if family == int32(PF_INET6) { + family = PF_UNSPEC + } else { + flags -= int32(AI_V4MAPPED) + } + } + /* Try each backend until there's at least one result. */ + cnt = _name_from_null(tls, buf, name, family, flags) + if !(cnt != 0) { + cnt = _name_from_numeric(tls, buf, name, family) + } + if !(cnt != 0) && !(flags&Int32FromInt32(AI_NUMERICHOST) != 0) { + cnt = _name_from_hosts(tls, buf, canon, name, family) + if !(cnt != 0) { + cnt = _name_from_dns_search(tls, buf, canon, name, family) + } + } + if cnt <= 0 { + if cnt != 0 { + v1 = cnt + } else { + v1 = -int32(2) + } + return v1 + } + /* Filter/transform results for v4-mapped lookup, if requested. */ + if flags&int32(AI_V4MAPPED) != 0 { + if !(flags&Int32FromInt32(AI_ALL) != 0) { + /* If any v6 results exist, remove v4 results. */ + i = 0 + for { + if !(i < cnt && (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET6)) { + break + } + goto _2 + _2: + ; + i++ + } + if i < cnt { + j = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily == int32(PF_INET6) { + v4 = j + j++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = *(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28)) + } + goto _3 + _3: + ; + i++ + } + v5 = j + i = v5 + cnt = v5 + } + } + /* Translate any remaining v4 results to v6 */ + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + goto _6 + } + _memcpy(tls, buf+uintptr(i)*28+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + _memcpy(tls, buf+uintptr(i)*28+8, __ccgo_ts+942, uint32(12)) + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily = int32(PF_INET6) + goto _6 + _6: + ; + i++ + } + } + /* No further processing is needed if there are fewer than 2 + * results or if there are only IPv4 results. */ + if cnt < int32(2) || family == int32(PF_INET) { + return cnt + } + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + break + } + goto _7 + _7: + ; + i++ + } + if i == cnt { + return cnt + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + /* The following implements a subset of RFC 3484/6724 destination + * address selection by generating a single 31-bit sort key for + * each address. Rules 3, 4, and 7 are omitted for having + * excessive runtime and code size cost and dubious benefit. + * So far the label/precedence table cannot be customized. */ + i = 0 + for { + if !(i < cnt) { + break + } + family1 = (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily + key = 0 + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 4)) = Tsockaddr_in6{} + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 32)) = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_scope_id: (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fscopeid, + } + *(*Tsockaddr_in)(unsafe.Pointer(bp + 60)) = Tsockaddr_in{} + *(*Tsockaddr_in)(unsafe.Pointer(bp + 76)) = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + } + if family1 == int32(PF_INET6) { + _memcpy(tls, bp+32+8, buf+uintptr(i)*28+8, uint32(16)) + da = bp + 32 + dalen = uint32(28) + sa = bp + 4 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(28) + } else { + _memcpy(tls, bp+4+8, __ccgo_ts+942, uint32(12)) + _memcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + _memcpy(tls, bp+32+8, __ccgo_ts+942, uint32(12)) + _memcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4)) + _memcpy(tls, bp+76+4, buf+uintptr(i)*28+8, uint32(4)) + da = bp + 76 + dalen = uint32(16) + sa = bp + 60 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(16) + } + dpolicy = _policyof(tls, bp+32+8) + dscope = _scopeof(tls, bp+32+8) + dlabel = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Flabel) + dprec = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Fprec) + prefixlen = 0 + fd = Xsocket(tls, family1, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), int32(IPPROTO_UDP)) + if fd >= 0 { + if !(Xconnect(tls, fd, da, dalen) != 0) { + key |= int32(DAS_USABLE) + if !(Xgetsockname(tls, fd, sa, bp+92) != 0) { + if family1 == int32(PF_INET) { + _memcpy(tls, bp+4+8+uintptr(12), bp+60+4, uint32(4)) + } + if dscope == _scopeof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGSCOPE) + } + if dlabel == _labelof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGLABEL) + } + prefixlen = _prefixmatch(tls, bp+4+8, bp+32+8) + } + } + Xclose(tls, fd) + } + key |= dprec << int32(DAS_PREC_SHIFT) + key |= (int32(15) - dscope) << int32(DAS_SCOPE_SHIFT) + key |= prefixlen << int32(DAS_PREFIX_SHIFT) + key |= (int32(MAXADDRS) - i) << DAS_ORDER_SHIFT + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fsortkey = key + goto _8 + _8: + ; + i++ + } + Xqsort(tls, buf, uint32(cnt), uint32(28), __ccgo_fp(_addrcmp)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return cnt +} + +func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1312) + defer tls.Free(1312) + var cnt, v1, v11, v12, v16, v17, v2, v20, v21, v22, v7, v8 int32 + var f, p, v3, v4, v6 uintptr + var l Tsize_t + var port uint32 + var v10, v14, v19 bool + var _ /* _buf at bp+132 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, f, l, p, port, v1, v10, v11, v12, v14, v16, v17, v19, v2, v20, v21, v22, v3, v4, v6, v7, v8 + cnt = 0 + *(*uintptr)(unsafe.Pointer(bp + 128)) = __ccgo_ts + port = uint32(0) + switch socktype { + case int32(SOCK_STREAM): + switch proto { + case 0: + proto = int32(IPPROTO_TCP) + fallthrough + case int32(IPPROTO_TCP): + default: + return -int32(8) + } + case int32(SOCK_DGRAM): + switch proto { + case 0: + proto = int32(IPPROTO_UDP) + fallthrough + case int32(IPPROTO_UDP): + default: + return -int32(8) + } + fallthrough + case 0: + default: + if name != 0 { + return -int32(8) + } + (*(*Tservice)(unsafe.Pointer(buf))).Fport = uint16(0) + (*(*Tservice)(unsafe.Pointer(buf))).Fproto = uint8(proto) + (*(*Tservice)(unsafe.Pointer(buf))).Fsocktype = uint8(socktype) + return int32(1) + } + if name != 0 { + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + return -int32(8) + } + port = Xstrtoul(tls, name, bp+128, int32(10)) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 128)))) != 0) { + if port > uint32(65535) { + return -int32(8) + } + if proto != int32(IPPROTO_UDP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v1 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v1)*4))).Fproto = uint8(IPPROTO_TCP) + } + if proto != int32(IPPROTO_TCP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v2 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v2)*4))).Fproto = uint8(IPPROTO_UDP) + } + return cnt + } + if flags&int32(AI_NUMERICSERV) != 0 { + return -int32(2) + } + l = Xstrlen(tls, name) + f = X__fopen_rb_ca(tls, __ccgo_ts+955, bp+1168, bp+132, uint32(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return -int32(8) + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(128), f) != 0 && cnt < int32(MAXSERVS) { + v3 = Xstrchr(tls, bp, int32('#')) + p = v3 + if v3 != 0 { + v4 = p + p++ + *(*uint8)(unsafe.Pointer(v4)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + /* Find service name */ + p = bp + for { + v6 = Xstrstr(tls, p, name) + p = v6 + if !(v6 != 0) { + break + } + if v10 = p > bp; v10 { + v7 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v8 = BoolInt32(v7 == int32(' ') || uint32(v7)-uint32('\t') < uint32(5)) + goto _9 + _9: + } + if v10 && !(v8 != 0) { + goto _5 + } + if v14 = *(*uint8)(unsafe.Pointer(p + uintptr(l))) != 0; v14 { + v11 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + } + if v14 && !(v12 != 0) { + goto _5 + } + break + goto _5 + _5: + ; + p++ + } + if !(p != 0) { + continue + } + /* Skip past canonical name at beginning of line */ + p = bp + for { + if v19 = *(*uint8)(unsafe.Pointer(p)) != 0; v19 { + v16 = int32(*(*uint8)(unsafe.Pointer(p))) + v17 = BoolInt32(v16 == int32(' ') || uint32(v16)-uint32('\t') < uint32(5)) + goto _18 + _18: + } + if !(v19 && !(v17 != 0)) { + break + } + goto _15 + _15: + ; + p++ + } + port = Xstrtoul(tls, p, bp+128, int32(10)) + if port > uint32(65535) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+969, uint32(4)) != 0) { + if proto == int32(IPPROTO_TCP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v20 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v20)*4))).Fproto = uint8(IPPROTO_UDP) + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+974, uint32(4)) != 0) { + if proto == int32(IPPROTO_UDP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v21 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v21)*4))).Fproto = uint8(IPPROTO_TCP) + } + } + X__fclose_ca(tls, f) + if cnt > 0 { + v22 = cnt + } else { + v22 = -int32(8) + } + return v22 +} + +func ___netlink_enumerate(tls *TLS, fd int32, seq uint32, type1 int32, af int32, cb uintptr, ctx uintptr) (r1 int32) { + bp := tls.Alloc(8192) + defer tls.Free(8192) + var h uintptr + var r, ret int32 + var _ /* u at bp+0 */ struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + } + _, _, _ = h, r, ret + Xmemset(tls, bp, 0, uint32(20)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_len = uint32(20) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_type = uint16(type1) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_flags = uint16(Int32FromInt32(NLM_F_ROOT) | Int32FromInt32(NLM_F_MATCH) | Int32FromInt32(NLM_F_REQUEST)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_seq = seq + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fg.Frtgen_family = uint8(af) + r = Xsend(tls, fd, bp, uint32(20), 0) + if r < 0 { + return r + } + for int32(1) != 0 { + r = Xrecv(tls, fd, bp, uint32(8192), int32(MSG_DONTWAIT)) + if r <= 0 { + return -int32(1) + } + h = bp + for { + if !(uint32(int32(bp+uintptr(r))-int32(h)) >= uint32(16)) { + break + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_DONE) { + return 0 + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_ERROR) { + return -int32(1) + } + ret = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cb})))(tls, ctx, h) + if ret != 0 { + return ret + } + goto _1 + _1: + ; + h = h + uintptr(((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + } + return r1 +} + +func X__rtnetlink_enumerate(tls *TLS, link_af int32, addr_af int32, cb uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v link_af=%v addr_af=%v cb=%v ctx=%v, (%v:)", tls, link_af, addr_af, cb, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var fd, r int32 + _, _ = fd, r + fd = Xsocket(tls, int32(PF_NETLINK), Int32FromInt32(SOCK_RAW)|Int32FromInt32(SOCK_CLOEXEC), NETLINK_ROUTE) + if fd < 0 { + return -int32(1) + } + r = ___netlink_enumerate(tls, fd, uint32(1), int32(RTM_GETLINK), link_af, cb, ctx) + if !(r != 0) { + r = ___netlink_enumerate(tls, fd, uint32(2), int32(RTM_GETADDR), addr_af, cb, ctx) + } + X__syscall1(tls, int32(SYS_close), fd) + return r +} + +func Xgetnetbyaddr(tls *TLS, net Tuint32_t, type1 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v net=%v type1=%v, (%v:)", tls, net, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xns_get16(tls *TLS, cp uintptr) (r uint32) { + if __ccgo_strace { + trc("tls=%v cp=%v, (%v:)", tls, cp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(int32(*(*uint8)(unsafe.Pointer(cp)))< %v", r) }() + } + return uint32(*(*uint8)(unsafe.Pointer(cp)))<> int32(8)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(s) +} + +func Xns_put32(tls *TLS, l uint32, cp uintptr) { + if __ccgo_strace { + trc("tls=%v l=%v cp=%v, (%v:)", tls, l, cp, origin(2)) + } + var v1, v2, v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + v1 = cp + cp++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(l >> int32(24)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(l >> int32(16)) + v3 = cp + cp++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(l >> int32(8)) + v4 = cp + cp++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(l) +} + +func Xns_initparse(tls *TLS, msg uintptr, msglen int32, handle uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v msglen=%v handle=%v, (%v:)", tls, msg, msglen, handle, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, r int32 + _, _ = i, r + (*Tns_msg)(unsafe.Pointer(handle)).F_msg = msg + (*Tns_msg)(unsafe.Pointer(handle)).F_eom = msg + uintptr(msglen) + if msglen < (Int32FromInt32(2)+int32(_ns_s_max))*Int32FromInt32(NS_INT16SZ) { + goto bad + } + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_id = uint16(Xns_get16(tls, msg-uintptr(2))) + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_flags = uint16(Xns_get16(tls, msg-uintptr(2))) + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + msg += uintptr(2) + *(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)) = uint16(Xns_get16(tls, msg-uintptr(2))) + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + if *(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)) != 0 { + *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(i)*4)) = msg + r = Xns_skiprr(tls, msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, i, int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(i)*2)))) + if r < 0 { + return -int32(1) + } + msg += uintptr(r) + } else { + *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(i)*4)) = UintptrFromInt32(0) + } + goto _2 + _2: + ; + i++ + } + if msg != (*Tns_msg)(unsafe.Pointer(handle)).F_eom { + goto bad + } + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = int32(_ns_s_max) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_skiprr(tls *TLS, ptr uintptr, eom uintptr, section Tns_sect, count int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ptr=%v eom=%v section=%v count=%v, (%v:)", tls, ptr, eom, section, count, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var p uintptr + var r, v1 int32 + _, _, _ = p, r, v1 + p = ptr + for { + v1 = count + count-- + if !(v1 != 0) { + break + } + r = Xdn_skipname(tls, p, eom) + if r < 0 { + goto bad + } + if r+Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ) > int32(eom)-int32(p) { + goto bad + } + p += uintptr(r + Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) + if section != int32(_ns_s_qd) { + if Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ) > int32(eom)-int32(p) { + goto bad + } + p += uintptr(NS_INT32SZ) + p += uintptr(2) + r = int32(Xns_get16(tls, p-uintptr(2))) + if r > int32(eom)-int32(p) { + goto bad + } + p += uintptr(r) + } + } + return int32(p) - int32(ptr) + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_parserr(tls *TLS, handle uintptr, section Tns_sect, rrnum int32, rr uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v handle=%v section=%v rrnum=%v rr=%v, (%v:)", tls, handle, section, rrnum, rr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + var p1, p2, p3, p4 uintptr + _, _, _, _, _ = r, p1, p2, p3, p4 + if section < 0 || section >= int32(_ns_s_max) { + goto bad + } + if section != (*Tns_msg)(unsafe.Pointer(handle)).F_sect { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(section)*4)) + } + if rrnum == -int32(1) { + rrnum = (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum + } + if rrnum < 0 || rrnum >= int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(section)*2))) { + goto bad + } + if rrnum < (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 20 + uintptr(section)*4)) + } + if rrnum > (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + r = Xns_skiprr(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, section, rrnum-(*Tns_msg)(unsafe.Pointer(handle)).F_rrnum) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr(r) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = rrnum + } + r = Xns_name_uncompress(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, rr, uint32(NS_MAXDNAME)) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr(r) + if Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p1 = handle + 44 + *(*uintptr)(unsafe.Pointer(p1)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Ftype1 = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p1))-uintptr(2))) + p2 = handle + 44 + *(*uintptr)(unsafe.Pointer(p2)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frr_class = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p2))-uintptr(2))) + if section != int32(_ns_s_qd) { + if Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p3 = handle + 44 + *(*uintptr)(unsafe.Pointer(p3)) += uintptr(4) + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = Xns_get32(tls, *(*uintptr)(unsafe.Pointer(p3))-uintptr(4)) + p4 = handle + 44 + *(*uintptr)(unsafe.Pointer(p4)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p4))-uintptr(2))) + if int32((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) > int32((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int32((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr + *(*uintptr)(unsafe.Pointer(handle + 44)) += uintptr((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) + } else { + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = UintptrFromInt32(0) + } + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum++ + if (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum > int32(*(*Tuint16_t)(unsafe.Pointer(handle + 12 + uintptr(section)*2))) { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + int32(1) + if (*Tns_msg)(unsafe.Pointer(handle)).F_sect == int32(_ns_s_max) { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + } else { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + } + } + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENODEV) + return -int32(1) + goto size +size: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_name_uncompress(tls *TLS, msg uintptr, eom uintptr, src uintptr, dst uintptr, dstsiz Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v eom=%v src=%v dst=%v dstsiz=%v, (%v:)", tls, msg, eom, src, dst, dstsiz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xdn_expand(tls, msg, eom, src, dst, int32(dstsiz)) + if r < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + } + return r +} + +func Xntohl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +/* do we really need all these?? */ + +var _idx int32 +var _protos = [239]uint8{0, 'i', 'p', 0, 1, 'i', 'c', 'm', 'p', 0, 2, 'i', 'g', 'm', 'p', 0, 3, 'g', 'g', 'p', 0, 4, 'i', 'p', 'e', 'n', 'c', 'a', 'p', 0, 5, 's', 't', 0, 6, 't', 'c', 'p', 0, 8, 'e', 'g', 'p', 0, 12, 'p', 'u', 'p', 0, 17, 'u', 'd', 'p', 0, 20, 'h', 'm', 'p', 0, 22, 'x', 'n', 's', '-', 'i', 'd', 'p', 0, 27, 'r', 'd', 'p', 0, 29, 'i', 's', 'o', '-', 't', 'p', '4', 0, '$', 'x', 't', 'p', 0, '%', 'd', 'd', 'p', 0, '&', 'i', 'd', 'p', 'r', '-', 'c', 'm', 't', 'p', 0, ')', 'i', 'p', 'v', '6', 0, '+', 'i', 'p', 'v', '6', '-', 'r', 'o', 'u', 't', 'e', 0, ',', 'i', 'p', 'v', '6', '-', 'f', 'r', 'a', 'g', 0, '-', 'i', 'd', 'r', 'p', 0, '.', 'r', 's', 'v', 'p', 0, '/', 'g', 'r', 'e', 0, '2', 'e', 's', 'p', 0, '3', 'a', 'h', 0, '9', 's', 'k', 'i', 'p', 0, ':', 'i', 'p', 'v', '6', '-', 'i', 'c', 'm', 'p', 0, ';', 'i', 'p', 'v', '6', '-', 'n', 'o', 'n', 'x', 't', 0, '<', 'i', 'p', 'v', '6', '-', 'o', 'p', 't', 's', 0, 'I', 'r', 's', 'p', 'f', 0, 'Q', 'v', 'm', 't', 'p', 0, 'Y', 'o', 's', 'p', 'f', 0, '^', 'i', 'p', 'i', 'p', 0, 'b', 'e', 'n', 'c', 'a', 'p', 0, 'g', 'p', 'i', 'm', 0, 255, 'r', 'a', 'w'} + +func Xendprotoent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _idx = 0 +} + +func Xsetprotoent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } + _idx = 0 +} + +func Xgetprotoent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint32(_idx) >= uint32(239) { + return UintptrFromInt32(0) + } + _p.Fp_proto = int32(_protos[_idx]) + _p.Fp_name = uintptr(unsafe.Pointer(&_protos)) + uintptr(_idx+int32(1)) + _p.Fp_aliases = uintptr(unsafe.Pointer(&_aliases)) + _idx = int32(uint32(_idx) + (Xstrlen(tls, _p.Fp_name) + Uint32FromInt32(2))) + return uintptr(unsafe.Pointer(&_p)) +} + +var _p Tprotoent + +var _aliases uintptr + +func Xgetprotobyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && Xstrcmp(tls, name, (*Tprotoent)(unsafe.Pointer(p)).Fp_name) != 0 { + p = Xgetprotoent(tls) + } + return p +} + +func Xgetprotobynumber(tls *TLS, num int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v num=%v, (%v:)", tls, num, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && (*Tprotoent)(unsafe.Pointer(p)).Fp_proto != num { + p = Xgetprotoent(tls) + } + return p +} + +func Xrecv(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrecvfrom(tls, fd, buf, len1, flags, uintptr(0), uintptr(0)) +} + +func Xrecvfrom(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen uintptr) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_recvfrom) + _ = int32(__SC_recvfrom) + v2 = fd + v3 = int32(buf) + v4 = int32(len1) + v5 = flags + v6 = int32(addr) + v7 = int32(alen) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xrecvmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, timeout uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v timeout=%v, (%v:)", tls, fd, msgvec, vlen, flags, timeout, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var csize, v3, v6 uintptr + var i, i1, ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v4 t__predefined_size_t + var v7 uint64 + _, _, _, _, _, _, _, _, _, _, _, _ = csize, i, i1, ns, r, s, v1, v2, v3, v4, v6, v7 + defer func() { Xrealloc(tls, csize, 0) }() + if timeout != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(timeout)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if timeout != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(timeout)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if timeout != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_recvmmsg_time64), fd, int32(msgvec), int32(vlen), int32(flags), int32(v3), 0)) + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if vlen > uint32(IOV_MAX) { + vlen = uint32(IOV_MAX) + } + v4 = vlen * 4 + csize = Xrealloc(tls, csize, v4) + i = 0 + for { + if !(uint32(i) < vlen) { + break + } + *(*Tsocklen_t)(unsafe.Add(unsafe.Pointer(csize), i*4)) = (*(*Tmmsghdr)(unsafe.Pointer(msgvec + uintptr(i)*32))).Fmsg_hdr.Fmsg_controllen + goto _5 + _5: + ; + i++ + } + if timeout != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v7 = uint64(s) + } else { + v7 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v7), + 1: ns, + } + v6 = bp + 16 + } else { + v6 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_recvmmsg), fd, int32(msgvec), int32(vlen), int32(flags), int32(v6), 0)) + i1 = 0 + for { + if !(i1 < r) { + break + } + X__convert_scm_timestamps(tls, msgvec+uintptr(i1)*32, *(*Tsocklen_t)(unsafe.Add(unsafe.Pointer(csize), i1*4))) + goto _8 + _8: + ; + i1++ + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__convert_scm_timestamps(tls *TLS, msg uintptr, csize Tsocklen_t) { + if __ccgo_strace { + trc("tls=%v msg=%v csize=%v, (%v:)", tls, msg, csize, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cmsg, last, v2, v6, v7 uintptr + var type1 int32 + var _ /* tmp at bp+0 */ int32 + var _ /* tvts at bp+8 */ [2]int64 + _, _, _, _, _, _ = cmsg, last, type1, v2, v6, v7 + if false { + return + } + if !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control != 0) || !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen != 0) { + return + } + last = uintptr(0) + type1 = 0 + if (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen >= uint32(12) { + v2 = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control + } else { + v2 = UintptrFromInt32(0) + } + cmsg = v2 + for { + if !(cmsg != 0) { + break + } + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level == int32(SOL_SOCKET) { + switch (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type { + case int32(SO_TIMESTAMP_OLD): + goto _3 + case int32(SO_TIMESTAMPNS_OLD): + goto _4 + } + goto _5 + _3: + ; + if type1 != 0 { + goto _5 + } + type1 = int32(SO_TIMESTAMP) + goto common + _4: + ; + type1 = int32(SO_TIMESTAMPNS) + goto common + common: + ; + _memcpy(tls, bp, cmsg+UintptrFromInt32(1)*12, uint32(4)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[0] = int64(*(*int32)(unsafe.Pointer(bp))) + _memcpy(tls, bp, cmsg+UintptrFromInt32(1)*12+uintptr(4), uint32(4)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[int32(1)] = int64(*(*int32)(unsafe.Pointer(bp))) + goto _5 + _5: + } + last = cmsg + goto _1 + _1: + ; + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len < uint32(12) || uint32((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))+uint32(12) >= uint32(int32((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int32(cmsg)) { + v6 = uintptr(0) + } else { + v6 = cmsg + uintptr(uint32((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))) + } + cmsg = v6 + } + if !(last != 0) || !(type1 != 0) { + return + } + if (Uint32FromInt64(16)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) > csize-(*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen { + *(*int32)(unsafe.Pointer(msg + 24)) |= int32(MSG_CTRUNC) + return + } + *(*Tsocklen_t)(unsafe.Pointer(msg + 20)) += (Uint32FromInt64(16)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + if (*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len < uint32(12) || uint32((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))+uint32(12) >= uint32(int32((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int32(last)) { + v7 = uintptr(0) + } else { + v7 = last + uintptr(uint32((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len+Uint32FromInt64(4)-Uint32FromInt32(1))&uint32(^int32(Uint32FromInt64(4)-Uint32FromInt32(1)))) + } + cmsg = v7 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level = int32(SOL_SOCKET) + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type = type1 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len = (Uint32FromInt64(12)+Uint32FromInt64(4)-Uint32FromInt32(1)) & ^(Uint32FromInt64(4)-Uint32FromInt32(1)) + Uint32FromInt64(16) + _memcpy(tls, cmsg+UintptrFromInt32(1)*12, bp+8, uint32(16)) +} + +func Xrecvmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r2 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r2) }() + } + var orig_controllen Tsocklen_t + var r, v1, v8 int32 + var r1 Tssize_t + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = orig_controllen, r, r1, v1, v2, v3, v4, v5, v6, v7, v8 + orig_controllen = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen + v1 = int32(SYS_recvmsg) + _ = int32(__SC_recvmsg) + v2 = fd + v3 = int32(msg) + v4 = flags + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = X__syscall_ret(tls, uint32(v8)) + if r1 >= 0 { + X__convert_scm_timestamps(tls, msg, orig_controllen) + } + return r1 +} + +func Xres_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__res_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var i, id, j, n int32 + var l Tsize_t + var _ /* q at bp+0 */ [280]uint8 + var _ /* ts at bp+280 */ Ttimespec + _, _, _, _, _ = i, id, j, l, n + l = Xstrnlen(tls, dname, uint32(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint32(1))))) == int32('.') { + l-- + } + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint32(1))))) == int32('.') { + return -int32(1) + } + n = int32(uint32(17) + l + BoolUint32(!!(l != 0))) + if l > uint32(253) || buflen < n || uint32(op) > uint32(15) || uint32(class) > uint32(255) || uint32(type1) > uint32(255) { + return -int32(1) + } + /* Construct query template - ID will be filled later */ + Xmemset(tls, bp, 0, uint32(n)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(2)] = uint8(op*int32(8) + int32(1)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(3)] = uint8(32) /* AD */ + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(5)] = uint8(1) + _memcpy(tls, bp+uintptr(13), dname, l) + i = int32(13) + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + j = i + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[j] != 0 && int32((*(*[280]uint8)(unsafe.Pointer(bp)))[j]) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-i)-uint32(1) > uint32(62) { + return -int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i-int32(1)] = uint8(j - i) + goto _1 + _1: + ; + i = j + int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(1)] = uint8(type1) + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(3)] = uint8(class) + /* Make a reasonably unpredictable id */ + Xclock_gettime(tls, CLOCK_REALTIME, bp+280) + id = int32((uint32((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec) + uint32((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec)/uint32(65536)) & uint32(0xffff)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[0] = uint8(id / int32(256)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(1)] = uint8(id) + _memcpy(tls, buf, bp, uint32(n)) + return n +} + +func Xres_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_mkquery(tls, op, dname, class, type1, data, datalen, newrr, buf, buflen) +} + +const POLLERR = 8 +const POLLHUP = 16 +const POLLIN = 1 +const POLLMSG = 1024 +const POLLNVAL = 32 +const POLLOUT = 4 +const POLLPRI = 2 +const POLLRDBAND = 128 +const POLLRDHUP = 8192 +const POLLRDNORM = 64 +const POLLWRBAND = 512 +const POLLWRNORM = 256 +const TCP_CC_INFO = 26 +const TCP_CLOSE = 7 +const TCP_CLOSE_WAIT = 8 +const TCP_CLOSING = 11 +const TCP_CM_INQ = 36 +const TCP_CONGESTION = 13 +const TCP_CORK = 3 +const TCP_DEFER_ACCEPT = 9 +const TCP_ESTABLISHED = 1 +const TCP_FASTOPEN = 23 +const TCP_FASTOPEN_CONNECT = 30 +const TCP_FASTOPEN_KEY = 33 +const TCP_FASTOPEN_NO_COOKIE = 34 +const TCP_FIN_WAIT1 = 4 +const TCP_FIN_WAIT2 = 5 +const TCP_INFO = 11 +const TCP_INQ = 36 +const TCP_KEEPCNT = 6 +const TCP_KEEPIDLE = 4 +const TCP_KEEPINTVL = 5 +const TCP_LAST_ACK = 9 +const TCP_LINGER2 = 8 +const TCP_LISTEN = 10 +const TCP_MAXSEG = 2 +const TCP_MD5SIG = 14 +const TCP_MD5SIG_EXT = 32 +const TCP_NODELAY = 1 +const TCP_NOTSENT_LOWAT = 25 +const TCP_QUEUE_SEQ = 21 +const TCP_QUICKACK = 12 +const TCP_REPAIR = 19 +const TCP_REPAIR_OPTIONS = 22 +const TCP_REPAIR_QUEUE = 20 +const TCP_REPAIR_WINDOW = 29 +const TCP_SAVED_SYN = 28 +const TCP_SAVE_SYN = 27 +const TCP_SYNCNT = 7 +const TCP_SYN_RECV = 3 +const TCP_SYN_SENT = 2 +const TCP_THIN_DUPACK = 17 +const TCP_THIN_LINEAR_TIMEOUTS = 16 +const TCP_TIMESTAMP = 24 +const TCP_TIME_WAIT = 6 +const TCP_TX_DELAY = 37 +const TCP_ULP = 31 +const TCP_USER_TIMEOUT = 18 +const TCP_WINDOW_CLAMP = 10 +const TCP_ZEROCOPY_RECEIVE = 35 + +const _TCP_NLA_PAD = 0 +const _TCP_NLA_BUSY = 1 +const _TCP_NLA_RWND_LIMITED = 2 +const _TCP_NLA_SNDBUF_LIMITED = 3 +const _TCP_NLA_DATA_SEGS_OUT = 4 +const _TCP_NLA_TOTAL_RETRANS = 5 +const _TCP_NLA_PACING_RATE = 6 +const _TCP_NLA_DELIVERY_RATE = 7 +const _TCP_NLA_SND_CWND = 8 +const _TCP_NLA_REORDERING = 9 +const _TCP_NLA_MIN_RTT = 10 +const _TCP_NLA_RECUR_RETRANS = 11 +const _TCP_NLA_DELIVERY_RATE_APP_LMT = 12 +const _TCP_NLA_SNDQ_SIZE = 13 +const _TCP_NLA_CA_STATE = 14 +const _TCP_NLA_SND_SSTHRESH = 15 +const _TCP_NLA_DELIVERED = 16 +const _TCP_NLA_DELIVERED_CE = 17 +const _TCP_NLA_BYTES_SENT = 18 +const _TCP_NLA_BYTES_RETRANS = 19 +const _TCP_NLA_DSACK_DUPS = 20 +const _TCP_NLA_REORD_SEEN = 21 +const _TCP_NLA_SRTT = 22 +const _TCP_NLA_TIMEOUT_REHASH = 23 +const _TCP_NLA_BYTES_NOTSENT = 24 +const _TCP_NLA_EDT = 25 +const _TCP_NLA_TTL = 26 + +type Tnfds_t = uint32 + +type Tpollfd = struct { + Ffd int32 + Fevents int16 + Frevents int16 +} + +func _cleanup(tls *TLS, p uintptr) { + var i int32 + var pfd uintptr + _, _ = i, pfd + pfd = p + i = 0 + for { + if !((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= -int32(1)) { + break + } + if (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= 0 { + X__syscall1(tls, int32(SYS_close), (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd) + } + goto _1 + _1: + ; + i++ + } +} + +func _mtime(tls *TLS) (r uint32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if Xclock_gettime(tls, int32(CLOCK_MONOTONIC), bp) < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSYS) { + Xclock_gettime(tls, CLOCK_REALTIME, bp) + } + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec)*uint32(1000) + uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000000)) +} + +func _start_tcp(tls *TLS, pfd uintptr, family int32, sa uintptr, sl Tsocklen_t, q uintptr, ql int32) (r1 int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r int32 + var _ /* mh at bp+24 */ Tmsghdr + _, _ = fd, r + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 16)) = [2]Tuint8_t{ + 0: uint8(ql >> int32(8)), + 1: uint8(ql), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 16, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: q, + Fiov_len: uint32(ql), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 24)) = Tmsghdr{ + Fmsg_name: sa, + Fmsg_namelen: sl, + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + fd = Xsocket(tls, family, Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = fd + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLOUT) + *(*int32)(unsafe.Pointer(bp + 20)) = int32(1) + if !(Xsetsockopt(tls, fd, int32(IPPROTO_TCP), int32(TCP_FASTOPEN_CONNECT), bp+20, uint32(4)) != 0) { + r = Xsendmsg(tls, fd, bp+24, Int32FromInt32(MSG_FASTOPEN)|Int32FromInt32(MSG_NOSIGNAL)) + if r == ql+int32(2) { + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLIN) + } + if r >= 0 { + return r + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + } + r = Xconnect(tls, fd, sa, sl) + if !(r != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + Xclose(tls, fd) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = -int32(1) + return -int32(1) +} + +func _step_mh(tls *TLS, mh uintptr, n Tsize_t) { + /* Adjust iovec in msghdr to skip first n bytes. */ + for (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0 && n >= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len { + n -= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov += 8 + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen-- + } + if !((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0) { + return + } + (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base = (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base + uintptr(n) + *(*Tsize_t)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov + 4)) -= n +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + +func X__res_msend_rc(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32, conf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v conf=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, conf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var alen, attempts, family, fd, i, j, next, nns, r, rcode, retry_interval, rlen, servfail_retry, timeout, v17, v6 int32 + var alen_buf, apos, iplit, pfd, qpos uintptr + var sl Tsocklen_t + var t0, t1, t2, v10 uint32 + var v1, v2, v3, v4 t__predefined_size_t + var v18 bool + var _ /* __cb at bp+164 */ t__ptcb + var _ /* cs at bp+160 */ int32 + var _ /* mh at bp+176 */ Tmsghdr + var _ /* mh at bp+204 */ Tmsghdr + var _ /* mh at bp+232 */ Tmsghdr + var _ /* ns at bp+76 */ [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + var _ /* sa at bp+48 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alen, alen_buf, apos, attempts, family, fd, i, iplit, j, next, nns, pfd, qpos, r, rcode, retry_interval, rlen, servfail_retry, sl, t0, t1, t2, timeout, v1, v10, v17, v18, v2, v3, v4, v6 + defer func() { + Xrealloc(tls, alen_buf, 0) + Xrealloc(tls, apos, 0) + Xrealloc(tls, pfd, 0) + Xrealloc(tls, qpos, 0) + }() + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 48)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp + 48)) = uint16(0) + *(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)) = [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + sl = uint32(16) + nns = 0 + family = int32(PF_INET) + v1 = uint32(nqueries+int32(2)) * 8 + pfd = Xrealloc(tls, pfd, v1) + v2 = uint32(nqueries) * 4 + qpos = Xrealloc(tls, qpos, v2) + v3 = uint32(nqueries) * 4 + apos = Xrealloc(tls, apos, v3) + v4 = uint32(nqueries) * 2 + alen_buf = Xrealloc(tls, alen_buf, v4) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+160) + timeout = int32(uint32(1000) * (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout) + attempts = int32((*Tresolvconf)(unsafe.Pointer(conf)).Fattempts) + nns = 0 + for { + if !(uint32(nns) < (*Tresolvconf)(unsafe.Pointer(conf)).Fnns) { + break + } + iplit = conf + uintptr(nns)*28 + if (*Taddress)(unsafe.Pointer(iplit)).Ffamily == int32(PF_INET) { + _memcpy(tls, bp+76+uintptr(nns)*28+4, iplit+8, uint32(4)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[nns].Fsin.Fsin_port = Xhtons(tls, uint16(53)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[nns].Fsin.Fsin_family = uint16(PF_INET) + } else { + sl = uint32(28) + _memcpy(tls, bp+76+uintptr(nns)*28+8, iplit+8, uint32(16)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_port = Xhtons(tls, uint16(53)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_scope_id = (*Taddress)(unsafe.Pointer(iplit)).Fscopeid + v6 = Int32FromInt32(PF_INET6) + family = v6 + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(nns)*28))).Fsin6_family = uint16(v6) + } + goto _5 + _5: + ; + nns++ + } + /* Get local address and open/bind a socket */ + fd = Xsocket(tls, family, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + /* Handle case where system lacks IPv6 support */ + if fd < 0 && family == int32(PF_INET6) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + i = 0 + for { + if !(i < nns && (*(*Taddress)(unsafe.Pointer(conf + uintptr(nns)*28))).Ffamily == int32(PF_INET6)) { + break + } + goto _7 + _7: + ; + i++ + } + if i == nns { + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + return -int32(1) + } + fd = Xsocket(tls, int32(PF_INET), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + family = int32(PF_INET) + sl = uint32(16) + } + /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ + if fd >= 0 && family == int32(PF_INET6) { + *(*int32)(unsafe.Pointer(bp)) = 0 + Xsetsockopt(tls, fd, int32(IPPROTO_IPV6), int32(IPV6_V6ONLY), bp, uint32(4)) + i = 0 + for { + if !(i < nns) { + break + } + if int32((*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 76)))[i].Fsin.Fsin_family) != int32(PF_INET) { + goto _8 + } + _memcpy(tls, bp+76+uintptr(i)*28+8+uintptr(12), bp+76+uintptr(i)*28+4, uint32(4)) + _memcpy(tls, bp+76+uintptr(i)*28+8, __ccgo_ts+942, uint32(12)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_family = uint16(PF_INET6) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_flowinfo = uint32(0) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 76 + uintptr(i)*28))).Fsin6_scope_id = uint32(0) + goto _8 + _8: + ; + i++ + } + } + (*(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 48))).Fsin.Fsin_family = uint16(family) + if fd < 0 || Xbind(tls, fd, bp+48, sl) < 0 { + if fd >= 0 { + Xclose(tls, fd) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + return -int32(1) + } + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + i = 0 + for { + if !(i < nqueries) { + break + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + goto _9 + _9: + ; + i++ + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Ffd = fd + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = int16(POLLIN) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), (nqueries+int32(1))*8))).Ffd = -int32(2) + __pthread_cleanup_push(tls, bp+164, __ccgo_fp(_cleanup), pfd) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + Xmemset(tls, alens, 0, uint32(4)*uint32(nqueries)) + retry_interval = timeout / attempts + next = 0 + v10 = _mtime(tls) + t2 = v10 + t0 = v10 + t1 = t2 - uint32(retry_interval) + for { + if !(t2-t0 < uint32(timeout)) { + break + } + /* This is the loop exit condition: that all queries + * have an accepted answer. */ + i = 0 + for { + if !(i < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) > 0) { + break + } + goto _12 + _12: + ; + i++ + } + if i == nqueries { + break + } + if t2-t1 >= uint32(retry_interval) { + /* Query all configured namservers in parallel */ + i = 0 + for { + if !(i < nqueries) { + break + } + if !(*(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0) { + j = 0 + for { + if !(j < nns) { + break + } + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+76+uintptr(j)*28, sl) + goto _14 + _14: + ; + j++ + } + } + goto _13 + _13: + ; + i++ + } + t1 = t2 + servfail_retry = int32(2) * nqueries + } + /* Wait for a response, or until time to retry */ + if Xpoll(tls, pfd, uint32(nqueries+int32(1)), int32(t1+uint32(retry_interval)-t2)) <= 0 { + goto _11 + } + for next < nqueries { + *(*[1]Tiovec)(unsafe.Pointer(bp + 8)) = [1]Tiovec{ + 0: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)), + Fiov_len: uint32(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 176)) = Tmsghdr{ + Fmsg_name: bp + 48, + Fmsg_namelen: sl, + Fmsg_iov: bp + 8, + Fmsg_iovlen: int32(1), + } + rlen = Xrecvmsg(tls, fd, bp+176, 0) + if rlen < 0 { + break + } + /* Ignore non-identifiable packets */ + if rlen < int32(4) { + continue + } + /* Ignore replies from addresses we didn't send to */ + j = 0 + for { + if !(j < nns && Xmemcmp(tls, bp+76+uintptr(j)*28, bp+48, sl) != 0) { + break + } + goto _15 + _15: + ; + j++ + } + if j == nns { + continue + } + /* Find which query this answer goes with, if any */ + i = next + for { + if !(i < nqueries && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4))))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4))))) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)) + 1))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)) + 1))))) { + break + } + goto _16 + _16: + ; + i++ + } + if i == nqueries { + continue + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0 { + continue + } + /* Only accept positive or negative responses; + * retry immediately on server failure, and ignore + * all other codes such as refusal. */ + switch int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)) + 3))) & Int32FromInt32(15) { + case 0: + fallthrough + case int32(3): + case int32(2): + if v18 = servfail_retry != 0; v18 { + v17 = servfail_retry + servfail_retry-- + } + if v18 && v17 != 0 { + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+76+uintptr(j)*28, sl) + } + fallthrough + default: + continue + } + /* Store answer in the right slot, or update next + * available temp slot if it's already in place. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = rlen + if i == next { + for { + if !(next < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(next)*4)) != 0) { + break + } + goto _19 + _19: + ; + next++ + } + } else { + _memcpy(tls, *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)), *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*4)), uint32(rlen)) + } + /* Ignore further UDP if all slots full or TCP-mode */ + if next == nqueries { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = 0 + } + /* If answer is truncated (TC bit), fallback to TCP */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)) + 2)))&int32(2) != 0 || (*(*Tmsghdr)(unsafe.Pointer(bp + 176))).Fmsg_flags&int32(MSG_TRUNC) != 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = -int32(1) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), uintptr(0)) + r = _start_tcp(tls, pfd+uintptr(i)*8, family, bp+76+uintptr(j)*28, sl, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 160)), uintptr(0)) + if r >= 0 { + *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) = r + *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) = 0 + } + continue + } + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLOUT) != 0 { + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 28)) = [2]Tuint8_t{ + 0: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4)) >> int32(8)), + 1: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + } + *(*[2]Tiovec)(unsafe.Pointer(bp + 12)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 28, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*4)), + Fiov_len: uint32(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 204)) = Tmsghdr{ + Fmsg_iov: bp + 12, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+204, uint32(*(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)))) + r = Xsendmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+204, int32(MSG_NOSIGNAL)) + if r < 0 { + goto out + } + *(*int32)(unsafe.Pointer(qpos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) == *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))+int32(2) { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Fevents = int16(POLLIN) + } + } + goto _20 + _20: + ; + i++ + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLIN) != 0 { + *(*[2]Tiovec)(unsafe.Pointer(bp + 32)) = [2]Tiovec{ + 0: { + Fiov_base: alen_buf + uintptr(i)*2, + Fiov_len: uint32(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)), + Fiov_len: uint32(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 232)) = Tmsghdr{ + Fmsg_iov: bp + 32, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+232, uint32(*(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)))) + r = Xrecvmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+232, 0) + if r <= 0 { + goto out + } + *(*int32)(unsafe.Pointer(apos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < int32(2) { + goto _21 + } + alen = int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2 + 1))) + if alen < int32(13) { + goto out + } + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < alen+int32(2) && *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < asize+int32(2) { + goto _21 + } + rcode = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*4)) + 3))) & int32(15) + if rcode != 0 && rcode != int32(3) { + goto out + } + /* Storing the length here commits the accepted answer. + * Immediately close TCP socket so as not to consume + * resources we no longer need. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = alen + X__syscall1(tls, int32(SYS_close), (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + } + goto _21 + _21: + ; + i++ + } + goto _11 + _11: + ; + t2 = _mtime(tls) + } + goto out +out: + ; + __pthread_cleanup_pop(tls, bp+164, int32(1)) + /* Disregard any incomplete TCP results */ + i = 0 + for { + if !(i < nqueries) { + break + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = 0 + } + goto _22 + _22: + ; + i++ + } + return 0 +} + +func X__res_msend(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var _ /* conf at bp+0 */ Tresolvconf + if X__get_resolv_conf(tls, bp, uintptr(0), uint32(0)) < 0 { + return -int32(1) + } + return X__res_msend_rc(tls, nqueries, queries, qlens, answers, alens, asize, bp) +} + +func X__res_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + *(*uintptr)(unsafe.Pointer(bp)) = _msg + *(*int32)(unsafe.Pointer(bp + 4)) = _msglen + *(*uintptr)(unsafe.Pointer(bp + 8)) = _answer + *(*int32)(unsafe.Pointer(bp + 12)) = _anslen + var r, v1, v2 int32 + var _ /* buf at bp+16 */ [512]uint8 + _, _, _ = r, v1, v2 + if *(*int32)(unsafe.Pointer(bp + 12)) < int32(512) { + r = X__res_send(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), bp+16, int32(512)) + if r >= 0 { + if r < *(*int32)(unsafe.Pointer(bp + 12)) { + v1 = r + } else { + v1 = *(*int32)(unsafe.Pointer(bp + 12)) + } + _memcpy(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), bp+16, uint32(v1)) + } + return r + } + r = X__res_msend(tls, int32(1), bp, bp+4, bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 12))) + if r < 0 || !(*(*int32)(unsafe.Pointer(bp + 12)) != 0) { + v2 = -int32(1) + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 12)) + } + return v2 +} + +func Xres_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_send(tls, _msg, _msglen, _answer, _anslen) +} + +/* This is completely unused, and exists purely to satisfy broken apps. */ + +func X__res_state(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_res1)) +} + +var _res1 t__res_state + +func X__get_resolv_conf(tls *TLS, conf uintptr, search uintptr, search_sz Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v conf=%v search=%v search_sz=%v, (%v:)", tls, conf, search, search_sz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(672) + defer tls.Free(672) + var c, nns, v1, v13, v14, v17, v18, v2, v21, v22, v26, v27, v8, v9 int32 + var f, p uintptr + var l Tsize_t + var x, x1, x2, v5, v6, v7 uint32 + var v11, v20, v24, v4 bool + var _ /* _buf at bp+256 */ [256]uint8 + var _ /* _f at bp+512 */ TFILE + var _ /* line at bp+0 */ [256]uint8 + var _ /* z at bp+656 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, f, l, nns, p, x, x1, x2, v1, v11, v13, v14, v17, v18, v2, v20, v21, v22, v24, v26, v27, v4, v5, v6, v7, v8, v9 + nns = 0 + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(1) + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(5) + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(2) + if search != 0 { + *(*uint8)(unsafe.Pointer(search)) = uint8(0) + } + f = X__fopen_rb_ca(tls, __ccgo_ts+1064, bp+512, bp+256, uint32(256)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + goto no_resolv_conf + default: + return -int32(1) + } + } + for Xfgets(tls, bp, int32(256), f) != 0 { + if !(Xstrchr(tls, bp, int32('\n')) != 0) && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + for cond := true; cond; cond = c != int32('\n') && c != -int32(1) { + c = Xgetc(tls, f) + } + continue + } + if v4 = !(Xstrncmp(tls, bp, __ccgo_ts+1081, uint32(7)) != 0); v4 { + v1 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(7)]) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + } + if v4 && v2 != 0 { + p = Xstrstr(tls, bp, __ccgo_ts+1089) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 6)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(6) + x = Xstrtoul(tls, p, bp+656, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 656)) != p { + if x > uint32(15) { + v5 = uint32(15) + } else { + v5 = x + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = v5 + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1096) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 9)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(9) + x1 = Xstrtoul(tls, p, bp+656, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 656)) != p { + if x1 > uint32(10) { + v6 = uint32(10) + } else { + v6 = x1 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = v6 + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1106) + if p != 0 && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 8)))-uint32('0') < uint32(10)) != 0 || int32(*(*uint8)(unsafe.Pointer(p + 8))) == int32('.')) { + p += uintptr(8) + x2 = Xstrtoul(tls, p, bp+656, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 656)) != p { + if x2 > uint32(60) { + v7 = uint32(60) + } else { + v7 = x2 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = v7 + } + } + continue + } + if v11 = !(Xstrncmp(tls, bp, __ccgo_ts+1115, uint32(10)) != 0); v11 { + v8 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(10)]) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + if v11 && v9 != 0 { + if nns >= int32(MAXNS) { + continue + } + p = bp + uintptr(11) + for { + v13 = int32(*(*uint8)(unsafe.Pointer(p))) + v14 = BoolInt32(v13 == int32(' ') || uint32(v13)-uint32('\t') < uint32(5)) + goto _15 + _15: + if !(v14 != 0) { + break + } + goto _12 + _12: + ; + p++ + } + *(*uintptr)(unsafe.Pointer(bp + 656)) = p + for { + if v20 = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 656)))) != 0; v20 { + v17 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 656))))) + v18 = BoolInt32(v17 == int32(' ') || uint32(v17)-uint32('\t') < uint32(5)) + goto _19 + _19: + } + if !(v20 && !(v18 != 0)) { + break + } + goto _16 + _16: + ; + *(*uintptr)(unsafe.Pointer(bp + 656))++ + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 656)))) = uint8(0) + if X__lookup_ipliteral(tls, conf+uintptr(nns)*28, p, PF_UNSPEC) > 0 { + nns++ + } + continue + } + if !(search != 0) { + continue + } + if v24 = Xstrncmp(tls, bp, __ccgo_ts+1126, uint32(6)) != 0 && Xstrncmp(tls, bp, __ccgo_ts+1133, uint32(6)) != 0; !v24 { + v21 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(6)]) + v22 = BoolInt32(v21 == int32(' ') || uint32(v21)-uint32('\t') < uint32(5)) + goto _23 + _23: + } + if v24 || !(v22 != 0) { + continue + } + p = bp + uintptr(7) + for { + v26 = int32(*(*uint8)(unsafe.Pointer(p))) + v27 = BoolInt32(v26 == int32(' ') || uint32(v26)-uint32('\t') < uint32(5)) + goto _28 + _28: + if !(v27 != 0) { + break + } + goto _25 + _25: + ; + p++ + } + l = Xstrlen(tls, p) + /* This can never happen anyway with chosen buffer sizes. */ + if l >= search_sz { + continue + } + _memcpy(tls, search, p, l+uint32(1)) + } + X__fclose_ca(tls, f) + goto no_resolv_conf +no_resolv_conf: + ; + if !(nns != 0) { + X__lookup_ipliteral(tls, conf, __ccgo_ts+1140, PF_UNSPEC) + nns = int32(1) + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fnns = uint32(nns) + return 0 +} + +func Xsend(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsendto(tls, fd, buf, len1, flags, uintptr(0), uint32(0)) +} + +func Xsendmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v, (%v:)", tls, fd, msgvec, vlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_sendmmsg), fd, int32(msgvec), int32(vlen), int32(flags), 0, 0))) +} + +func Xsendmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_sendmsg) + _ = int32(__SC_sendmsg) + v2 = fd + v3 = int32(msg) + v4 = flags + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xsendto(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen Tsocklen_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_sendto) + _ = int32(__SC_sendto) + v2 = fd + v3 = int32(buf) + v4 = int32(len1) + v5 = flags + v6 = int32(addr) + v7 = int32(alen) + if int32(1) != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xendservent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetservent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } +} + +func Xgetservent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xsetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen Tsocklen_t) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r, r1, v1, v11, v18, v20, v27, v8 int32 + var s Ttime_t + var tv uintptr + var us Tsuseconds_t + var v10 uint64 + var v12, v13, v14, v15, v16, v17, v2, v21, v22, v23, v24, v25, v26, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, s, tv, us, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v2, v20, v21, v22, v23, v24, v25, v26, v27, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v2 = fd + v3 = level + v4 = optname + v5 = int32(optval) + v6 = int32(optlen) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = v8 + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if optlen < uint32(16) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + tv = optval + s = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + us = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + if !((uint64(us)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v10 = uint64(us) + } else { + v10 = uint64(0x7fffffff) + (0+uint64(us))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp)) = [2]int32{ + 0: int32(s), + 1: int32(v10), + } + v11 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v12 = fd + v13 = level + v14 = optname + v15 = int32(bp) + v16 = int32(Uint32FromInt32(2) * Uint32FromInt64(4)) + v17 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v11, v12, v13, v14, v15, v16, v17) + } else { + r = X__syscall6(tls, v11, v12, v13, v14, v15, v16, v17) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v18 = r + goto _19 + } + v18 = r + goto _19 + _19: + r1 = v18 + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if false { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v20 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v21 = fd + v22 = level + v23 = optname + v24 = int32(optval) + v25 = int32(optlen) + v26 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v20, v21, v22, v23, v24, v25, v26) + } else { + r = X__syscall6(tls, v20, v21, v22, v23, v24, v25, v26) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v27 = r + goto _28 + } + v27 = r + goto _28 + _28: + r1 = v27 + break + } + } + } + return X__syscall_ret(tls, uint32(r1)) +} + +func Xshutdown(tls *TLS, fd int32, how int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v how=%v, (%v:)", tls, fd, how, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v8 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_shutdown) + _ = int32(__SC_shutdown) + v2 = fd + v3 = how + v4 = int32(Int32FromInt32(0)) + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint32(v8)) +} + +func Xsockatmark(tls *TLS, s int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* ret at bp+0 */ int32 + if Xioctl(tls, s, int32(SIOCATMARK), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xsocket(tls *TLS, domain int32, type1 int32, protocol int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v, (%v:)", tls, domain, type1, protocol, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, v1, v10, v17, v8 int32 + var v11, v12, v13, v14, v15, v16, v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, s, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_socket) + _ = int32(__SC_socket) + v2 = domain + v3 = type1 + v4 = protocol + v5 = int32(Int32FromInt32(0)) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + s = v8 + if (s == -int32(EINVAL) || s == -int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v10 = int32(SYS_socket) + _ = int32(__SC_socket) + v11 = domain + v12 = int32(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v13 = protocol + v14 = int32(Int32FromInt32(0)) + v15 = int32(Int32FromInt32(0)) + v16 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v10, v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, v10, v11, v12, v13, v14, v15, v16) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + s = v17 + if s < 0 { + return X__syscall_ret(tls, uint32(s)) + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), s, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), s, int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return X__syscall_ret(tls, uint32(s)) +} + +func Xsocketpair(tls *TLS, domain int32, type1 int32, protocol int32, fd uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v fd=%v, (%v:)", tls, domain, type1, protocol, fd, origin(2)) + defer func() { trc("-> %v", r2) }() + } + var r, r1, v1, v10, v17, v8 int32 + var v11, v12, v13, v14, v15, v16, v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_socketpair) + _ = int32(__SC_socketpair) + v2 = domain + v3 = type1 + v4 = protocol + v5 = int32(fd) + v6 = int32(Int32FromInt32(0)) + v7 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v1, v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, v1, v2, v3, v4, v5, v6, v7) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = X__syscall_ret(tls, uint32(v8)) + if r1 < 0 && (*(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINVAL) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v10 = int32(SYS_socketpair) + _ = int32(__SC_socketpair) + v11 = domain + v12 = int32(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v13 = protocol + v14 = int32(fd) + v15 = int32(Int32FromInt32(0)) + v16 = int32(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, v10, v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, v10, v11, v12, v13, v14, v15, v16) + } + if r != int32(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + r1 = X__syscall_ret(tls, uint32(v17)) + if r1 < 0 { + return r1 + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + } + return r1 +} + +const SHADOW = "/etc/shadow" + +type Tgroup = struct { + Fgr_name uintptr + Fgr_passwd uintptr + Fgr_gid Tgid_t + Fgr_mem uintptr +} + +type Tspwd = struct { + Fsp_namp uintptr + Fsp_pwdp uintptr + Fsp_lstchg int32 + Fsp_min int32 + Fsp_max int32 + Fsp_warn int32 + Fsp_inact int32 + Fsp_expire int32 + Fsp_flag uint32 +} + +func Xfgetgrent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgrent_a(tls, f, uintptr(unsafe.Pointer(&_gr)), uintptr(unsafe.Pointer(&_line1)), bp+4, uintptr(unsafe.Pointer(&_mem)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _line1 uintptr + +var _mem uintptr + +var _gr Tgroup + +func Xfgetpwent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+4 */ uintptr + var _ /* size at bp+0 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp)) = uint32(0) + X__getpwent_a(tls, f, uintptr(unsafe.Pointer(&_pw)), uintptr(unsafe.Pointer(&_line2)), bp, bp+4) + return *(*uintptr)(unsafe.Pointer(bp + 4)) +} + +var _line2 uintptr + +var _pw Tpasswd + +const GETGRBYGID = 3 +const GETGRBYNAME = 2 +const GETINITGR = 15 +const GETPWBYNAME = 0 +const GETPWBYUID = 1 +const GRFOUND = 1 +const GRGID = 4 +const GRMEMCNT = 5 +const GRNAMELEN = 2 +const GRPASSWDLEN = 3 +const GRVERSION = 0 +const GR_LEN = 6 +const INITGRFOUND = 1 +const INITGRNGRPS = 2 +const INITGRVERSION = 0 +const INITGR_LEN = 3 +const NSCDVERSION = 2 +const PWDIRLEN = 7 +const PWFOUND = 1 +const PWGECOSLEN = 6 +const PWGID = 5 +const PWNAMELEN = 2 +const PWPASSWDLEN = 3 +const PWSHELLLEN = 8 +const PWUID = 4 +const PWVERSION = 0 +const PW_LEN = 9 +const REQKEYLEN = 2 +const REQTYPE = 1 +const REQVERSION = 0 +const REQ_LEN = 3 + +func _itoa1(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getgr_a(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gid=%v gr=%v buf=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, name, gid, gr, buf, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var f, key, ptr, tmp, tmp1 uintptr + var grlist_len, len1 Tsize_t + var i, req, v10 Tint32_t + var rv, v1, v2, v4, v8 int32 + var v5, v6 Tuint32_t + var _ /* cs at bp+0 */ int32 + var _ /* gidbuf at bp+28 */ [11]uint8 + var _ /* groupbuf at bp+4 */ [6]Tint32_t + var _ /* name_len at bp+44 */ Tuint32_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, grlist_len, i, key, len1, ptr, req, rv, tmp, tmp1, v1, v10, v2, v4, v5, v6, v8 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + f = Xfopen(tls, __ccgo_ts+1150, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getgrent_a(tls, f, gr, buf, size, mem, nmem, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_name) != 0) || !(name != 0) && (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_gid == gid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = int32(GETGRBYNAME) + } else { + v2 = int32(GETGRBYGID) + } + req = v2 + *(*[6]Tint32_t)(unsafe.Pointer(bp + 4)) = [6]Tint32_t{} + len1 = uint32(0) + grlist_len = uint32(0) + *(*[11]uint8)(unsafe.Pointer(bp + 28)) = [11]uint8{} + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + if name != 0 { + key = name + } else { + if gid < uint32(0) || gid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa1(tls, bp+28, gid) + } + f = X__nscd_query(tls, req, key, bp+4, uint32(24), bp+40) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] != 0) || !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) > uint32(0xffffffff)-uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] + (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + i = 0 + for { + if !(i < (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]) { + break + } + if Xfread(tls, bp+44, uint32(4), uint32(1), f) < uint32(1) { + if Xferror(tls, f) != 0 { + v4 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v4 = int32(EIO) + } + rv = v4 + goto cleanup_f + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + v5 = *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + v6 = v5>>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< uint32(0xffffffff)-grlist_len || *(*Tuint32_t)(unsafe.Pointer(bp + 44)) > uint32(0xffffffff)-len1 { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 += *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + grlist_len += *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + goto _3 + _3: + ; + i++ + } + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint32(1), f) != 0) { + if Xferror(tls, f) != 0 { + v8 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v8 = int32(EIO) + } + rv = v8 + goto cleanup_f + } + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > *(*Tsize_t)(unsafe.Pointer(nmem)) { + if uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > Uint32FromUint32(0xffffffff)/Uint32FromInt64(4) { + rv = int32(ENOMEM) + goto cleanup_f + } + tmp1 = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(mem)), uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+Int32FromInt32(1))*uint32(4)) + if !(tmp1 != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(mem)) = tmp1 + *(*Tsize_t)(unsafe.Pointer(nmem)) = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] + int32(1)) + } + if (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = *(*uintptr)(unsafe.Pointer(buf)) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + ptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) + i = Int32FromInt32(0) + for { + if !(ptr != *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem))))+uintptr(grlist_len)) { + break + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + i++ + v10 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v10)*4)) = ptr + uintptr(1) + } + goto _9 + _9: + ; + ptr++ + } + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(i)*4)) = uintptr(0) + if i != (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] { + rv = int32(EIO) + goto cleanup_f + } + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = (*Tgroup)(unsafe.Pointer(gr)).Fgr_name + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRGID)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + if *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name) != 0 || !(name != 0) && gid != (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = gr + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getgr_r(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var rv int32 + var _ /* cs at bp+16 */ int32 + var _ /* len at bp+4 */ Tsize_t + var _ /* line at bp+0 */ uintptr + var _ /* mem at bp+8 */ uintptr + var _ /* nmem at bp+12 */ Tsize_t + _, _ = i, rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 12)) = uint32(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+16) + rv = X__getgr_a(tls, name, gid, gr, bp, bp+4, bp+8, bp+12, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 4))+(*(*Tsize_t)(unsafe.Pointer(bp + 12))+uint32(1))*uint32(4)+uint32(32) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + buf += uintptr((uint32(16) - uint32(buf)) % uint32(16)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = buf + buf += uintptr((*(*Tsize_t)(unsafe.Pointer(bp + 12)) + uint32(1)) * uint32(4)) + _memcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 4))) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = uintptr(int32((*Tgroup)(unsafe.Pointer(gr)).Fgr_name)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = uintptr(int32((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + i = uint32(0) + for { + if !(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*4)) != 0) { + break + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) = uintptr(int32(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*4)))-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + goto _1 + _1: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) = uintptr(0) + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 16)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrnam_r(tls *TLS, name uintptr, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, name, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, name, uint32(0), gr, buf, size, res) +} + +func Xgetgrgid_r(tls *TLS, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, gid, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, uintptr(0), gid, gr, buf, size, res) +} + +var _f1 uintptr +var _line3 uintptr +var _mem1 uintptr +var _gr1 Tgroup + +func Xsetgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f1 != 0 { + Xfclose(tls, _f1) + } + _f1 = uintptr(0) +} + +func Xgetgrent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + if !(_f1 != 0) { + _f1 = Xfopen(tls, __ccgo_ts+1150, __ccgo_ts+315) + } + if !(_f1 != 0) { + return uintptr(0) + } + X__getgrent_a(tls, _f1, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrgid(tls *TLS, gid Tgid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgr_a(tls, uintptr(0), gid, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* nmem at bp+8 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+4 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint32(0) + X__getgr_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+4, uintptr(unsafe.Pointer(&_mem1)), bp+8, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetgrent(tls) +} + +func _atou(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getgrent_a(tls *TLS, f uintptr, gr uintptr, line uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v gr=%v line=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, f, gr, line, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v13, v14 Tsize_t + var l, v2 Tssize_t + var mems, v12, v4, v5, v6, v7, v8, v9 uintptr + var rv, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, mems, rv, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int32(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = _atou(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + mems = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + *(*Tsize_t)(unsafe.Pointer(nmem)) = BoolUint32(!!(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + *(*Tsize_t)(unsafe.Pointer(nmem))++ + } + goto _10 + _10: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(mem))) + *(*uintptr)(unsafe.Pointer(mem)) = Xcalloc(tls, uint32(4), *(*Tsize_t)(unsafe.Pointer(nmem))+uint32(1)) + if !(*(*uintptr)(unsafe.Pointer(mem)) != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + if *(*uint8)(unsafe.Pointer(mems)) != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = mems + *(*uintptr)(unsafe.Pointer(bp)) = mems + i = Uint32FromInt32(0) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + i++ + v13 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v13)*4)) = *(*uintptr)(unsafe.Pointer(bp)) + } + goto _11 + _11: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + i++ + v14 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v14)*4)) = uintptr(0) + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + goto end +end: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = gr + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrouplist(tls *TLS, user uintptr, gid Tgid_t, groups uintptr, ngroups uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v user=%v gid=%v groups=%v ngroups=%v, (%v:)", tls, user, gid, groups, ngroups, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, nscdbuf, v1, v10, v13 uintptr + var i, n, v12, v9 Tssize_t + var nbytes Tsize_t + var nlim, ret, rv, v14, v6 int32 + var v3, v4 Tuint32_t + var _ /* buf at bp+36 */ uintptr + var _ /* gr at bp+0 */ Tgroup + var _ /* mem at bp+40 */ uintptr + var _ /* nmem at bp+44 */ Tsize_t + var _ /* res at bp+16 */ uintptr + var _ /* resp at bp+24 */ [3]Tint32_t + var _ /* size at bp+48 */ Tsize_t + var _ /* swap at bp+20 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, n, nbytes, nlim, nscdbuf, ret, rv, v1, v10, v12, v13, v14, v3, v4, v6, v9 + ret = -int32(1) + n = int32(1) + *(*int32)(unsafe.Pointer(bp + 20)) = 0 + nscdbuf = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 36)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 44)) = uint32(0) + nlim = *(*int32)(unsafe.Pointer(ngroups)) + if nlim >= int32(1) { + v1 = groups + groups += 4 + *(*Tgid_t)(unsafe.Pointer(v1)) = gid + } + f = X__nscd_query(tls, int32(GETINITGR), user, bp+24, uint32(12), bp+20) + if !(f != 0) { + goto cleanup + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRFOUND)] != 0 { + nscdbuf = Xcalloc(tls, uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]), uint32(4)) + if !(nscdbuf != 0) { + goto cleanup + } + nbytes = uint32(4) * uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]) + if nbytes != 0 && !(Xfread(tls, nscdbuf, nbytes, uint32(1), f) != 0) { + if !(Xferror(tls, f) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + } + goto cleanup + } + if *(*int32)(unsafe.Pointer(bp + 20)) != 0 { + i = 0 + for { + if !(i < (*(*[3]Tint32_t)(unsafe.Pointer(bp + 24)))[int32(INITGRNGRPS)]) { + break + } + v3 = *(*Tuint32_t)(unsafe.Pointer(nscdbuf + uintptr(i)*4)) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3< nlim { + v14 = -int32(1) + } else { + v14 = n + } + ret = v14 + *(*int32)(unsafe.Pointer(ngroups)) = n + goto cleanup +cleanup: + ; + if f != 0 { + Xfclose(tls, f) + } + Xfree(tls, nscdbuf) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 36))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) + return ret +} + +func _itoa2(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getpw_a(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, key, tmp uintptr + var len1 Tsize_t + var req Tint32_t + var rv, v1, v2, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* passwdbuf at bp+8 */ [9]Tint32_t + var _ /* uidbuf at bp+44 */ [11]uint8 + _, _, _, _, _, _, _, _, _ = f, key, len1, req, rv, tmp, v1, v2, v3 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + f = Xfopen(tls, __ccgo_ts+1161, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getpwent_a(tls, f, pw, buf, size, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_name) != 0) || !(name != 0) && (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_uid == uid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = GETPWBYNAME + } else { + v2 = int32(GETPWBYUID) + } + req = v2 + *(*[9]Tint32_t)(unsafe.Pointer(bp + 8)) = [9]Tint32_t{} + len1 = uint32(0) + *(*[11]uint8)(unsafe.Pointer(bp + 44)) = [11]uint8{} + if name != 0 { + key = name + } else { + /* uid outside of this range can't be queried with the + * nscd interface, but might happen if uid_t ever + * happens to be a larger type (this is not true as of + * now) + */ + if uid < uint32(0) || uid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa2(tls, bp+44, uid) + } + *(*[1]int32)(unsafe.Pointer(bp)) = [1]int32{} + f = X__nscd_query(tls, req, key, bp+8, uint32(36), bp) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + /* A zero length response from nscd is invalid. We ignore + * invalid responses and just report an error, rather than + * trying to do something with them. + */ + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) >= Uint32FromUint32(0xffffffff)/Uint32FromInt32(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint32(1), f) != 0) { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = int32(EIO) + } + rv = v3 + goto cleanup_f + } + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWUID)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGID)]) + /* Don't assume that nscd made sure to null terminate strings. + * It's supposed to, but malicious nscd should be ignored + * rather than causing a crash. + */ + if *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name) != 0 || !(name != 0) && uid != (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = pw + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getpw_r(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rv int32 + var _ /* cs at bp+8 */ int32 + var _ /* len at bp+4 */ Tsize_t + var _ /* line at bp+0 */ uintptr + _ = rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4)) = uint32(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + rv = X__getpw_a(tls, name, uid, pw, bp, bp+4, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 4)) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + _memcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 4))) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_name)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = uintptr(int32((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)-int32(*(*uintptr)(unsafe.Pointer(bp)))) + buf + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetpwnam_r(tls *TLS, name uintptr, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, name, uint32(0), pw, buf, size, res) +} + +func Xgetpwuid_r(tls *TLS, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, uintptr(0), uid, pw, buf, size, res) +} + +var _f2 uintptr +var _line4 uintptr +var _pw1 Tpasswd +var _size Tsize_t + +func Xsetpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f2 != 0 { + Xfclose(tls, _f2) + } + _f2 = uintptr(0) +} + +func Xgetpwent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if !(_f2 != 0) { + _f2 = Xfopen(tls, __ccgo_ts+1161, __ccgo_ts+315) + } + if !(_f2 != 0) { + return uintptr(0) + } + X__getpwent_a(tls, _f2, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwuid(tls *TLS, uid Tuid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, uintptr(0), uid, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetpwent(tls) +} + +func _atou1(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getpwent_a(tls *TLS, f uintptr, pw uintptr, line uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pw=%v line=%v size=%v res=%v, (%v:)", tls, f, pw, line, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v2 Tssize_t + var rv, v3 int32 + var v10, v11, v12, v13, v14, v4, v5, v6, v7, v8, v9 uintptr + var _ /* cs at bp+4 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = l, rv, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + pw = uintptr(0) + break + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int32(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v10 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v10)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = *(*uintptr)(unsafe.Pointer(bp)) + v11 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v11 + if !(v11 != 0) { + goto _1 + } + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = *(*uintptr)(unsafe.Pointer(bp)) + v13 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v13 + if !(v13 != 0) { + goto _1 + } + v14 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = pw + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xsetspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetspent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xlckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xulckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +var _addr = struct { + Fsun_family int16 + Fsun_path [21]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [21]uint8{'/', 'v', 'a', 'r', '/', 'r', 'u', 'n', '/', 'n', 's', 'c', 'd', '/', 's', 'o', 'c', 'k', 'e', 't'}, +} + +func X__nscd_query(tls *TLS, req Tint32_t, key uintptr, buf uintptr, len1 Tsize_t, swap uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v req=%v key=%v buf=%v len1=%v swap=%v, (%v:)", tls, req, key, buf, len1, swap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var errno_save, fd int32 + var f, v1 uintptr + var i Tsize_t + var v3, v4, v7, v8 Tuint32_t + var _ /* msg at bp+28 */ Tmsghdr + var _ /* req_buf at bp+16 */ [3]Tint32_t + _, _, _, _, _, _, _, _, _ = errno_save, f, fd, i, v1, v3, v4, v7, v8 + f = uintptr(0) + *(*[3]Tint32_t)(unsafe.Pointer(bp + 16)) = [3]Tint32_t{ + 0: int32(NSCDVERSION), + 1: req, + 2: int32(Xstrnlen(tls, key, uint32(LOGIN_NAME_MAX)) + uint32(1)), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 16, + Fiov_len: uint32(12), + }, + 1: { + Fiov_base: key, + Fiov_len: Xstrlen(tls, key) + uint32(1), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 28)) = Tmsghdr{ + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + *(*int32)(unsafe.Pointer(swap)) = 0 + goto retry +retry: + ; + Xmemset(tls, buf, 0, len1) + *(*Tint32_t)(unsafe.Pointer(buf)) = int32(NSCDVERSION) + fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if fd < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + f = Xfopen(tls, __ccgo_ts+1173, __ccgo_ts+1183) + if f != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + } + return f + } + return uintptr(0) + } + v1 = Xfdopen(tls, fd, __ccgo_ts+1186) + f = v1 + if !(v1 != 0) { + Xclose(tls, fd) + return uintptr(0) + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 16)))[int32(2)] > int32(LOGIN_NAME_MAX) { + return f + } + if Xconnect(tls, fd, uintptr(unsafe.Pointer(&_addr)), uint32(24)) < 0 { + /* If there isn't a running nscd we simulate a "not found" + * result and the caller is responsible for calling + * fclose on the (unconnected) socket. The value of + * errno must be left unchanged in this case. */ + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ECONNREFUSED) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + return f + } + goto error + } + if Xsendmsg(tls, fd, bp+28, int32(MSG_NOSIGNAL)) < 0 { + goto error + } + if !(Xfread(tls, buf, len1, uint32(1), f) != 0) { + /* If the VERSION entry mismatches nscd will disconnect. The + * most likely cause is that the endianness mismatched. So, we + * byteswap and try once more. (if we already swapped, just + * fail out) + */ + if Xferror(tls, f) != 0 { + goto error + } + if !(*(*int32)(unsafe.Pointer(swap)) != 0) { + Xfclose(tls, f) + i = uint32(0) + for { + if !(i < Uint32FromInt64(12)/Uint32FromInt64(4)) { + break + } + v3 = uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 16)))[i]) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7< %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var r, v1, v3, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = i, r, v1, v3, v4, v5 + Xflockfile(tls, f) + v1 = Xfprintf(tls, f, __ccgo_ts+1188, VaList(bp+8, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd, (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid)) + r = v1 + if v1 < 0 { + goto done + } + if (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem != 0 { + i = uint32(0) + for { + if !(*(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)) != 0) { + break + } + if i != 0 { + v4 = __ccgo_ts + 1198 + } else { + v4 = __ccgo_ts + } + v3 = Xfprintf(tls, f, __ccgo_ts+1200, VaList(bp+8, v4, *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*4)))) + r = v3 + if v3 < 0 { + goto done + } + goto _2 + _2: + ; + i++ + } + } + r = Xfputc(tls, int32('\n'), f) + goto done +done: + ; + Xfunlockfile(tls, f) + if r < 0 { + v5 = -int32(1) + } else { + v5 = 0 + } + return v5 +} + +func Xputpwent(tls *TLS, pw uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pw=%v f=%v, (%v:)", tls, pw, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var v1 int32 + _ = v1 + if Xfprintf(tls, f, __ccgo_ts+1205, VaList(bp+8, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xputspent(tls *TLS, sp uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sp=%v f=%v, (%v:)", tls, sp, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1, v10, v11, v12, v13, v14, v15, v16, v4, v5, v6, v7, v8, v9 int32 + var v17 uint32 + var v2, v3 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8, v9 + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp != 0 { + v2 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp + } else { + v2 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp != 0 { + v3 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp + } else { + v3 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == -int32(1) { + v4 = 0 + } else { + v4 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == -int32(1) { + v5 = 0 + } else { + v5 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == -int32(1) { + v6 = 0 + } else { + v6 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == -int32(1) { + v7 = 0 + } else { + v7 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_min + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == -int32(1) { + v8 = 0 + } else { + v8 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == -int32(1) { + v9 = 0 + } else { + v9 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_max + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == -int32(1) { + v10 = 0 + } else { + v10 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == -int32(1) { + v11 = 0 + } else { + v11 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == -int32(1) { + v12 = 0 + } else { + v12 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == -int32(1) { + v13 = 0 + } else { + v13 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == -int32(1) { + v14 = 0 + } else { + v14 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == -int32(1) { + v15 = 0 + } else { + v15 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint32(-Int32FromInt32(1)) { + v16 = 0 + } else { + v16 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint32(-Int32FromInt32(1)) { + v17 = uint32(0) + } else { + v17 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag + } + if Xfprintf(tls, f, __ccgo_ts+1227, VaList(bp+8, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func X__rand48_step(tls *TLS, xi uintptr, lc uintptr) (r Tuint64_t) { + if __ccgo_strace { + trc("tls=%v xi=%v lc=%v, (%v:)", tls, xi, lc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, x Tuint64_t + _, _ = a, x + x = uint64(uint32(*(*uint16)(unsafe.Pointer(xi)))|(uint32(*(*uint16)(unsafe.Pointer(xi + 1*2)))+0)<> int32(16)) + *(*uint16)(unsafe.Pointer(xi + 2*2)) = uint16(x >> int32(32)) + return x & uint64(0xffffffffffff) +} + +func Xerand48(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* x at bp+0 */ struct { + F__ccgo_align [0]uint32 + Ff [0]float64 + Fu Tuint64_t + } + *(*struct { + F__ccgo_align [0]uint32 + Ff [0]float64 + Fu Tuint64_t + })(unsafe.Pointer(bp)) = struct { + F__ccgo_align [0]uint32 + Ff [0]float64 + Fu Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp)) = uint64(0x3ff0000000000000) | X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2)< %v", r) }() + } + return Xerand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xlcong48(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + _memcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), p, uint32(14)) +} + +func Xnrand48(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> int32(17)) +} + +func Xlrand48(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xjrand48(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> Int32FromInt32(16)) +} + +func Xmrand48(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xjrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +var _seed Tuint64_t + +func Xsrand(tls *TLS, s uint32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + } + _seed = uint64(s - uint32(1)) +} + +func Xrand(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + _seed = uint64(6364136223846793005)*_seed + uint64(1) + return int32(_seed >> int32(33)) +} + +func _temper(tls *TLS, x uint32) (r uint32) { + x ^= x >> int32(11) + x ^= x << int32(7) & uint32(0x9D2C5680) + x ^= x << int32(15) & uint32(0xEFC60000) + x ^= x >> int32(18) + return x +} + +func Xrand_r(tls *TLS, seed uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + v1 = *(*uint32)(unsafe.Pointer(seed))*Uint32FromInt32(1103515245) + Uint32FromInt32(12345) + *(*uint32)(unsafe.Pointer(seed)) = v1 + return int32(_temper(tls, v1) / uint32(2)) +} + +/* +this code uses the same lagged fibonacci generator as the +original bsd random implementation except for the seeding +which was broken in the original +*/ + +var _init = [32]Tuint32_t{ + 1: uint32(0x5851f42d), + 2: uint32(0xc0b18ccf), + 3: uint32(0xcbb5f646), + 4: uint32(0xc7033129), + 5: uint32(0x30705b04), + 6: uint32(0x20fd5db4), + 7: uint32(0x9a8b7f78), + 8: uint32(0x502959d8), + 9: uint32(0xab894868), + 10: uint32(0x6c0356a7), + 11: uint32(0x88cdb7ff), + 12: uint32(0xb477d43f), + 13: uint32(0x70a3a52b), + 14: uint32(0xa8e4baf1), + 15: uint32(0xfd8341fc), + 16: uint32(0x8ae16fd9), + 17: uint32(0x742d2f7a), + 18: uint32(0x0d1f0796), + 19: uint32(0x76035e09), + 20: uint32(0x40f7702c), + 21: uint32(0x6fa72ca5), + 22: uint32(0xaaa84157), + 23: uint32(0x58a0df74), + 24: uint32(0xc74a0364), + 25: uint32(0xae533cc4), + 26: uint32(0x04185faf), + 27: uint32(0x6de3b115), + 28: uint32(0x0cab8628), + 29: uint32(0xf043bfa4), + 30: uint32(0x398150e9), + 31: uint32(0x37521657), +} + +var _n = int32(31) +var _i = int32(3) +var _j = int32(0) +var _x1 = uintptr(unsafe.Pointer(&_init)) + uintptr(1)*4 +var _lock3 [1]int32 + +func _lcg31(tls *TLS, x Tuint32_t) (r Tuint32_t) { + return (uint32(1103515245)*x + uint32(12345)) & uint32(0x7fffffff) +} + +func _lcg64(tls *TLS, x Tuint64_t) (r Tuint64_t) { + return uint64(6364136223846793005)*x + uint64(1) +} + +func _savestate(tls *TLS) (r uintptr) { + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) = uint32(_n<> int32(16)) + _i = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) >> Int32FromInt32(8) & uint32(0xff)) + _j = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) & uint32(0xff)) +} + +func ___srandom(tls *TLS, seed uint32) { + var k, v1 int32 + var s Tuint64_t + _, _, _ = k, s, v1 + s = uint64(seed) + if _n == 0 { + *(*Tuint32_t)(unsafe.Pointer(_x1)) = uint32(s) + return + } + if _n == int32(31) || _n == int32(7) { + v1 = int32(3) + } else { + v1 = int32(1) + } + _i = v1 + _j = 0 + k = 0 + for { + if !(k < _n) { + break + } + s = _lcg64(tls, s) + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(k)*4)) = uint32(s >> int32(32)) + goto _2 + _2: + ; + k++ + } + /* make sure x contains at least one odd number */ + *(*Tuint32_t)(unsafe.Pointer(_x1)) |= uint32(1) +} + +func Xsrandom(tls *TLS, seed uint32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + ___srandom(tls, seed) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) +} + +func Xinitstate(tls *TLS, seed uint32, state uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v seed=%v state=%v size=%v, (%v:)", tls, seed, state, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + if size < uint32(8) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + if size < uint32(32) { + _n = 0 + } else { + if size < uint32(64) { + _n = int32(7) + } else { + if size < uint32(128) { + _n = int32(15) + } else { + if size < uint32(256) { + _n = int32(31) + } else { + _n = int32(63) + } + } + } + } + _x1 = state + uintptr(1)*4 + ___srandom(tls, seed) + _savestate(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xsetstate(tls *TLS, state uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v state=%v, (%v:)", tls, state, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + _loadstate(tls, state) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xrandom(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, v2, v3 int32 + var v1 Tuint32_t + _, _, _, _ = k, v1, v2, v3 + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + if _n == 0 { + v1 = _lcg31(tls, *(*Tuint32_t)(unsafe.Pointer(_x1))) + *(*Tuint32_t)(unsafe.Pointer(_x1)) = v1 + k = int32(v1) + goto end + } + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) += *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_j)*4)) + k = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) >> int32(1)) + _i++ + v2 = _i + if v2 == _n { + _i = 0 + } + _j++ + v3 = _j + if v3 == _n { + _j = 0 + } + goto end +end: + ; + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return k +} + +func Xseed48(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + _memcpy(tls, uintptr(unsafe.Pointer(&_p1)), uintptr(unsafe.Pointer(&X__seed48)), uint32(6)) + _memcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), s, uint32(6)) + return uintptr(unsafe.Pointer(&_p1)) +} + +var _p1 [3]uint16 + +func Xsrand48(tls *TLS, seed int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[3]uint16)(unsafe.Pointer(bp)) = [3]uint16{ + 0: uint16(0x330e), + 1: uint16(seed), + 2: uint16(seed >> int32(16)), + } + Xseed48(tls, bp) +} + +func Xexecl(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = UintptrFromInt32(0) + _ = ap + return Xexecv(tls, path, argv) + return r +} + +func Xexecle(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv, envp uintptr + var v2 t__predefined_size_t + _, _, _, _, _, _ = ap, argc, argv, envp, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i <= argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + envp = VaUintptr(&ap) + _ = ap + return Xexecve(tls, path, argv, envp) + return r +} + +func Xexeclp(tls *TLS, file uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv0=%v va=%v, (%v:)", tls, file, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint32(argc+int32(1)) * 4 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*4)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*4)) = UintptrFromInt32(0) + _ = ap + return Xexecvp(tls, file, argv) + return r +} + +func Xexecv(tls *TLS, path uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v, (%v:)", tls, path, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexecve(tls, path, argv, Xenviron) +} + +func Xexecve(tls *TLS, path uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v envp=%v, (%v:)", tls, path, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* do we need to use environ if envp is null? */ + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_execve), int32(path), int32(argv), int32(envp)))) +} + +func X__execvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, p, path, z, v3, v4 uintptr + var k, l Tsize_t + var seen_eacces int32 + var v2 t__predefined_size_t + _, _, _, _, _, _, _, _, _, _ = b, k, l, p, path, seen_eacces, z, v2, v3, v4 + defer func() { Xrealloc(tls, b, 0) }() + path = Xgetenv(tls, __ccgo_ts+1276) + seen_eacces = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + if !(*(*uint8)(unsafe.Pointer(file)) != 0) { + return -int32(1) + } + if Xstrchr(tls, file, int32('/')) != 0 { + return Xexecve(tls, file, argv, envp) + } + if !(path != 0) { + path = __ccgo_ts + 1281 + } + k = Xstrnlen(tls, file, uint32(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if k > uint32(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + l = Xstrnlen(tls, path, uint32(Int32FromInt32(PATH_MAX)-Int32FromInt32(1))) + uint32(1) + p = path + for { + v2 = l + k + uint32(1) + b = Xrealloc(tls, b, v2) + z = X__strchrnul(tls, p, int32(':')) + if uint32(int32(z)-int32(p)) >= l { + v3 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v3)) != 0) { + break + } + goto _1 + } + _memcpy(tls, b, p, uint32(int32(z)-int32(p))) + *(*uint8)(unsafe.Add(unsafe.Pointer(b), int32(z)-int32(p))) = uint8('/') + _memcpy(tls, b+uintptr(int32(z)-int32(p))+BoolUintptr(z > p), file, k+uint32(1)) + Xexecve(tls, b, argv, envp) + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EACCES): + seen_eacces = int32(1) + fallthrough + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + default: + return -int32(1) + } + v4 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v4)) != 0) { + break + } + goto _1 + _1: + ; + p = z + } + if seen_eacces != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + } + return -int32(1) +} + +func Xexecvp(tls *TLS, file uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v, (%v:)", tls, file, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, Xenviron) +} + +func Xexecvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, envp) +} + +func Xfexecve(tls *TLS, fd int32, argv uintptr, envp uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v argv=%v envp=%v, (%v:)", tls, fd, argv, envp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = r + r = int32(X__syscall5(tls, int32(SYS_execveat), fd, int32(__ccgo_ts), int32(argv), int32(envp), int32(Int32FromInt32(AT_EMPTY_PATH)))) + if r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + X__procfdname(tls, bp, uint32(fd)) + Xexecve(tls, bp, argv, envp) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + } + return -int32(1) +} + +var _dummy_lockptr = uintptr(0) + +var _atfork_locks = [10]uintptr{ + 0: uintptr(unsafe.Pointer(&X__at_quick_exit_lockptr)), + 1: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 2: uintptr(unsafe.Pointer(&X__gettext_lockptr)), + 3: uintptr(unsafe.Pointer(&X__locale_lockptr)), + 4: uintptr(unsafe.Pointer(&X__random_lockptr)), + 5: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 6: uintptr(unsafe.Pointer(&X__stdio_ofl_lockptr)), + 7: uintptr(unsafe.Pointer(&X__syslog_lockptr)), + 8: uintptr(unsafe.Pointer(&X__timezone_lockptr)), + 9: uintptr(unsafe.Pointer(&_dummy_lockptr)), +} + +func _dummy8(tls *TLS, x int32) { +} + +func _dummy_0(tls *TLS) { +} + +const FDOP_CHDIR = 4 +const FDOP_CLOSE = 1 +const FDOP_DUP2 = 2 +const FDOP_FCHDIR = 5 +const FDOP_OPEN = 3 +const POSIX_SPAWN_RESETIDS = 1 +const POSIX_SPAWN_SETPGROUP = 2 +const POSIX_SPAWN_SETSCHEDPARAM = 16 +const POSIX_SPAWN_SETSCHEDULER = 32 +const POSIX_SPAWN_SETSID = 128 +const POSIX_SPAWN_SETSIGDEF = 4 +const POSIX_SPAWN_SETSIGMASK = 8 +const POSIX_SPAWN_USEVFORK = 64 + +type Tposix_spawnattr_t = struct { + F__flags int32 + F__pgrp Tpid_t + F__def Tsigset_t + F__mask Tsigset_t + F__prio int32 + F__pol int32 + F__fn uintptr + F__pad [60]uint8 +} + +type Tposix_spawn_file_actions_t = struct { + F__pad0 [2]int32 + F__actions uintptr + F__pad [16]int32 +} + +type Tfdop = struct { + Fnext uintptr + Fprev uintptr + Fcmd int32 + Ffd int32 + Fsrcfd int32 + Foflag int32 + Fmode Tmode_t +} + +func Xposix_spawn_file_actions_addchdir_np(tls *TLS, fa uintptr, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v path=%v, (%v:)", tls, fa, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + op = Xmalloc(tls, uint32(28)+Xstrlen(tls, path)+uint32(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = -int32(1) + Xstrcpy(tls, op+28, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addclose(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CLOSE) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_adddup2(tls *TLS, fa uintptr, srcfd int32, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v srcfd=%v fd=%v, (%v:)", tls, fa, srcfd, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if srcfd < 0 || fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_DUP2) + (*Tfdop)(unsafe.Pointer(op)).Fsrcfd = srcfd + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addfchdir_np(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_FCHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addopen(tls *TLS, fa uintptr, fd int32, path uintptr, flags int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v path=%v flags=%v mode=%v, (%v:)", tls, fa, fd, path, flags, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint32(28)+Xstrlen(tls, path)+uint32(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_OPEN) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + (*Tfdop)(unsafe.Pointer(op)).Foflag = flags + (*Tfdop)(unsafe.Pointer(op)).Fmode = mode + Xstrcpy(tls, op+28, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_destroy(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + var next, op uintptr + _, _ = next, op + op = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + for op != 0 { + next = (*Tfdop)(unsafe.Pointer(op)).Fnext + Xfree(tls, op) + op = next + } + return 0 +} + +func Xposix_spawn_file_actions_init(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = uintptr(0) + return 0 +} + +func Xposix_spawnattr_destroy(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xposix_spawnattr_getflags(tls *TLS, attr uintptr, flags uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*int16)(unsafe.Pointer(flags)) = int16((*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags) + return 0 +} + +func Xposix_spawnattr_getpgroup(tls *TLS, attr uintptr, pgrp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tpid_t)(unsafe.Pointer(pgrp)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp + return 0 +} + +func Xposix_spawnattr_getsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(def)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def + return 0 +} + +func Xposix_spawnattr_getsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(mask)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask + return 0 +} + +func Xposix_spawnattr_init(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tposix_spawnattr_t)(unsafe.Pointer(attr)) = Tposix_spawnattr_t{} + return 0 +} + +func Xposix_spawnattr_getschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_getschedpolicy(tls *TLS, attr uintptr, policy uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedpolicy(tls *TLS, attr uintptr, policy int32) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setflags(tls *TLS, attr uintptr, flags int16) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var all_flags uint32 + _ = all_flags + all_flags = uint32(Int32FromInt32(POSIX_SPAWN_RESETIDS) | Int32FromInt32(POSIX_SPAWN_SETPGROUP) | Int32FromInt32(POSIX_SPAWN_SETSIGDEF) | Int32FromInt32(POSIX_SPAWN_SETSIGMASK) | Int32FromInt32(POSIX_SPAWN_SETSCHEDPARAM) | Int32FromInt32(POSIX_SPAWN_SETSCHEDULER) | Int32FromInt32(POSIX_SPAWN_USEVFORK) | Int32FromInt32(POSIX_SPAWN_SETSID)) + if uint32(flags) & ^all_flags != 0 { + return int32(EINVAL) + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags = int32(flags) + return 0 +} + +func Xposix_spawnattr_setpgroup(tls *TLS, attr uintptr, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp = pgrp + return 0 +} + +func Xposix_spawnattr_setsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def = *(*Tsigset_t)(unsafe.Pointer(def)) + return 0 +} + +func Xposix_spawnattr_setsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask = *(*Tsigset_t)(unsafe.Pointer(mask)) + return 0 +} + +func Xvfork(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* vfork syscall cannot be made from C code */ + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_fork)))) +} + +func Xwait(tls *TLS, status uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwaitpid(tls, -Int32FromInt32(1), status, 0) +} + +func Xwaitid(tls *TLS, type1 Tidtype_t, id Tid_t, info uintptr, options int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v id=%v info=%v options=%v, (%v:)", tls, type1, id, info, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_waitid), type1, int32(id), int32(info), options, int32(Int32FromInt32(0)), 0))) +} + +func Xwaitpid(tls *TLS, pid Tpid_t, status uintptr, options int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v, (%v:)", tls, pid, status, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_wait4), pid, int32(status), options, int32(Int32FromInt32(0)), 0, 0))) +} + +const BRACKET = -3 +const END = 0 +const FNM_CASEFOLD = 16 +const FNM_FILE_NAME = 1 +const FNM_LEADING_DIR = 8 +const FNM_NOESCAPE = 2 +const FNM_NOMATCH = 1 +const FNM_NOSYS = -1 +const FNM_PATHNAME = 1 +const FNM_PERIOD = 4 +const QUESTION = -4 +const STAR = -5 +const UNMATCHABLE = -2 + +func _str_next(tls *TLS, str uintptr, n Tsize_t, step uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k int32 + var _ /* wc at bp+0 */ Twchar_t + _ = k + if !(n != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return 0 + } + if uint32(*(*uint8)(unsafe.Pointer(str))) >= uint32(128) { + k = Xmbtowc(tls, bp, str, n) + if k < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return -int32(1) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(k) + return int32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return int32(*(*uint8)(unsafe.Pointer(str))) +} + +func _pat_next(tls *TLS, pat uintptr, m Tsize_t, step uintptr, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var esc, k1, z int32 + var k Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _ = esc, k, k1, z + esc = 0 + if !(m != 0) || !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return END + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('\\') && *(*uint8)(unsafe.Pointer(pat + 1)) != 0 && !(flags&Int32FromInt32(FNM_NOESCAPE) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(2) + pat++ + esc = int32(1) + goto escaped + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('[') { + k = uint32(1) + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('!') { + k++ + } + } + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32(']') { + k++ + } + } + for { + if !(k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + break + } + if k+uint32(1) < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k+uint32(1)))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) == int32('=')) { + z = int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint32(1))))) + k += uint32(2) + if k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 { + k++ + } + for k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k-uint32(1))))) != z || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + break + } + } + goto _1 + _1: + ; + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(1) + return int32('[') + } + *(*Tsize_t)(unsafe.Pointer(step)) = k + uint32(1) + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('*') { + return -int32(5) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('?') { + return -int32(4) + } + goto escaped +escaped: + ; + if uint32(*(*uint8)(unsafe.Pointer(pat))) >= uint32(128) { + k1 = Xmbtowc(tls, bp, pat, m) + if k1 < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(0) + return -int32(2) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint32(k1 + esc) + return int32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + return int32(*(*uint8)(unsafe.Pointer(pat))) +} + +func _casefold(tls *TLS, k int32) (r int32) { + var c int32 + var v1 uint32 + _, _ = c, v1 + c = int32(Xtowupper(tls, uint32(k))) + if c == k { + v1 = Xtowlower(tls, uint32(k)) + } else { + v1 = uint32(c) + } + return int32(v1) +} + +func _match_bracket(tls *TLS, p uintptr, k int32, kfold int32) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var inv, l, l1, z int32 + var p0 uintptr + var _ /* buf at bp+8 */ [16]uint8 + var _ /* wc at bp+0 */ Twchar_t + var _ /* wc2 at bp+4 */ Twchar_t + _, _, _, _, _ = inv, l, l1, p0, z + inv = 0 + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(p))) == int32('!') { + inv = int32(1) + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + if k == int32(']') { + return BoolInt32(!(inv != 0)) + } + p++ + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + if k == int32('-') { + return BoolInt32(!(inv != 0)) + } + p++ + } + } + *(*Twchar_t)(unsafe.Pointer(bp)) = uint32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + l = Xmbtowc(tls, bp+4, p+uintptr(1), uint32(4)) + if l < 0 { + return 0 + } + if *(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4)) { + if uint32(k)-*(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp)) || uint32(kfold)-*(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp)) { + return BoolInt32(!(inv != 0)) + } + } + p += uintptr(l - int32(1)) + goto _1 + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('=')) { + p0 = p + uintptr(2) + z = int32(*(*uint8)(unsafe.Pointer(p + 1))) + p += uintptr(3) + for int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) != z || int32(*(*uint8)(unsafe.Pointer(p))) != int32(']') { + p++ + } + if z == int32(':') && int32(p-uintptr(1))-int32(p0) < int32(16) { + _memcpy(tls, bp+8, p0, uint32(int32(p-uintptr(1))-int32(p0))) + (*(*[16]uint8)(unsafe.Pointer(bp + 8)))[int32(p-uintptr(1))-int32(p0)] = uint8(0) + if Xiswctype(tls, uint32(k), Xwctype(tls, bp+8)) != 0 || Xiswctype(tls, uint32(kfold), Xwctype(tls, bp+8)) != 0 { + return BoolInt32(!(inv != 0)) + } + } + goto _1 + } + if uint32(*(*uint8)(unsafe.Pointer(p))) < uint32(128) { + *(*Twchar_t)(unsafe.Pointer(bp)) = uint32(*(*uint8)(unsafe.Pointer(p))) + } else { + l1 = Xmbtowc(tls, bp, p, uint32(4)) + if l1 < 0 { + return 0 + } + p += uintptr(l1 - int32(1)) + } + if *(*Twchar_t)(unsafe.Pointer(bp)) == uint32(k) || *(*Twchar_t)(unsafe.Pointer(bp)) == uint32(kfold) { + return BoolInt32(!(inv != 0)) + } + goto _1 + _1: + ; + p++ + } + return inv +} + +func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, k, kfold, v12, v13, v15, v2, v3, v4, v8 int32 + var endpat, endstr, p, ptail, s, stail, v10, v6 uintptr + var tailcnt Tsize_t + var v9 bool + var _ /* pinc at bp+0 */ Tsize_t + var _ /* sinc at bp+4 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, endpat, endstr, k, kfold, p, ptail, s, stail, tailcnt, v10, v12, v13, v15, v2, v3, v4, v6, v8, v9 + tailcnt = uint32(0) + if flags&int32(FNM_PERIOD) != 0 { + if int32(*(*uint8)(unsafe.Pointer(str))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(pat))) != int32('.') { + return int32(FNM_NOMATCH) + } + } + for { + v2 = _pat_next(tls, pat, m, bp, flags) + c = v2 + switch v2 { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + pat++ + m-- + default: + k = _str_next(tls, str, n, bp+4) + if k <= 0 { + if c == END { + v3 = 0 + } else { + v3 = int32(FNM_NOMATCH) + } + return v3 + } + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + n -= *(*Tsize_t)(unsafe.Pointer(bp + 4)) + if flags&int32(FNM_CASEFOLD) != 0 { + v4 = _casefold(tls, k) + } else { + v4 = k + } + kfold = v4 + if c == -int32(3) { + if !(_match_bracket(tls, pat, k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + pat += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + m -= *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + } + break + goto _1 + _1: + } + /* Compute real pat length if it was initially unknown/-1 */ + m = Xstrnlen(tls, pat, m) + endpat = pat + uintptr(m) + /* Find the last * in pat and count chars needed after it */ + v6 = pat + ptail = v6 + p = v6 + for { + if !(p < endpat) { + break + } + switch _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + tailcnt = uint32(0) + ptail = p + uintptr(1) + default: + tailcnt++ + break + } + goto _5 + _5: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + /* Past this point we need not check for UNMATCHABLE in pat, + * because all of pat has already been parsed once. */ + /* Compute real str length if it was initially unknown/-1 */ + n = Xstrnlen(tls, str, n) + endstr = str + uintptr(n) + if n < tailcnt { + return int32(FNM_NOMATCH) + } + /* Find the final tailcnt chars of str, accounting for UTF-8. + * On illegal sequences we may get it wrong, but in that case + * we necessarily have a matching failure anyway. */ + s = endstr + for { + if !(s > str && tailcnt != 0) { + break + } + if v9 = uint32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v8 = int32(4) + } else { + v8 = int32(1) + } + } + if v9 || v8 == int32(1) { + s-- + } else { + for { + s-- + v10 = s + if !(uint32(*(*uint8)(unsafe.Pointer(v10)))-uint32(0x80) < uint32(0x40) && s > str) { + break + } + } + } + goto _7 + _7: + ; + tailcnt-- + } + if tailcnt != 0 { + return int32(FNM_NOMATCH) + } + stail = s + /* Check that the pat and str tails match */ + p = ptail + for { + c = _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + v12 = _str_next(tls, s, uint32(int32(endstr)-int32(s)), bp+4) + k = v12 + if v12 <= 0 { + if c != END { + return int32(FNM_NOMATCH) + } + break + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + if flags&int32(FNM_CASEFOLD) != 0 { + v13 = _casefold(tls, k) + } else { + v13 = k + } + kfold = v13 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + goto _11 + _11: + } + /* We're all done with the tails now, so throw them out */ + endstr = stail + endpat = ptail + /* Match pattern components until there are none left */ + for pat < endpat { + p = pat + s = str + for { + c = _pat_next(tls, p, uint32(int32(endpat)-int32(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + /* Encountering * completes/commits a component */ + if c == -int32(5) { + pat = p + str = s + break + } + k = _str_next(tls, s, uint32(int32(endstr)-int32(s)), bp+4) + if !(k != 0) { + return int32(FNM_NOMATCH) + } + if flags&int32(FNM_CASEFOLD) != 0 { + v15 = _casefold(tls, k) + } else { + v15 = k + } + kfold = v15 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + break + } + } else { + if c != -int32(4) && k != c && kfold != c { + break + } + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + goto _14 + _14: + } + if c == -int32(5) { + continue + } + /* If we failed, advance str, by 1 char if it's a valid + * char, or past all invalid bytes otherwise. */ + k = _str_next(tls, str, uint32(int32(endstr)-int32(str)), bp+4) + if k > 0 { + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 4))) + } else { + str++ + for { + if !(_str_next(tls, str, uint32(int32(endstr)-int32(str)), bp+4) < 0) { + break + } + goto _16 + _16: + ; + str++ + } + } + } + return 0 +} + +func Xfnmatch(tls *TLS, pat uintptr, str uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v str=%v flags=%v, (%v:)", tls, pat, str, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, v4 int32 + var p, s uintptr + var _ /* inc at bp+0 */ Tsize_t + _, _, _, _ = c, p, s, v4 + if flags&int32(FNM_PATHNAME) != 0 { + for { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != int32('/')) { + break + } + goto _2 + _2: + ; + s++ + } + p = pat + for { + v4 = _pat_next(tls, p, uint32(-Int32FromInt32(1)), bp, flags) + c = v4 + if !(v4 != END && c != int32('/')) { + break + } + goto _3 + _3: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + if c != int32(*(*uint8)(unsafe.Pointer(s))) && (!(*(*uint8)(unsafe.Pointer(s)) != 0) || !(flags&Int32FromInt32(FNM_LEADING_DIR) != 0)) { + return int32(FNM_NOMATCH) + } + if _fnmatch_internal(tls, pat, uint32(int32(p)-int32(pat)), str, uint32(int32(s)-int32(str)), flags) != 0 { + return int32(FNM_NOMATCH) + } + if !(c != 0) { + return 0 + } + str = s + uintptr(1) + pat = p + uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + goto _1 + _1: + } + } else { + if flags&int32(FNM_LEADING_DIR) != 0 { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('/') { + goto _5 + } + if !(_fnmatch_internal(tls, pat, uint32(-Int32FromInt32(1)), str, uint32(int32(s)-int32(str)), flags) != 0) { + return 0 + } + goto _5 + _5: + ; + s++ + } + } + } + return _fnmatch_internal(tls, pat, uint32(-Int32FromInt32(1)), str, uint32(-Int32FromInt32(1)), flags) +} + +const GLOB_ABORTED = 2 +const GLOB_APPEND = 32 +const GLOB_DOOFFS = 8 +const GLOB_ERR = 1 +const GLOB_MARK = 2 +const GLOB_NOCHECK = 16 +const GLOB_NOESCAPE = 64 +const GLOB_NOMATCH = 3 +const GLOB_NOSORT = 4 +const GLOB_NOSPACE = 1 +const GLOB_NOSYS = 4 +const GLOB_PERIOD = 128 +const GLOB_TILDE = 4096 +const GLOB_TILDE_CHECK = 16384 + +type Tglob_t = struct { + Fgl_pathc Tsize_t + Fgl_pathv uintptr + Fgl_offs Tsize_t + F__dummy1 int32 + F__dummy2 [5]uintptr +} + +type Tmatch = struct { + Fnext uintptr +} + +func _append(tls *TLS, tail uintptr, name uintptr, len1 Tsize_t, mark int32) (r int32) { + var new1 uintptr + _ = new1 + new1 = Xmalloc(tls, uint32(4)+len1+uint32(2)) + if !(new1 != 0) { + return -int32(1) + } + (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(tail)))).Fnext = new1 + (*Tmatch)(unsafe.Pointer(new1)).Fnext = UintptrFromInt32(0) + _memcpy(tls, new1+4, name, len1+uint32(1)) + if mark != 0 && len1 != 0 && int32(*(*uint8)(unsafe.Pointer(name + uintptr(len1-uint32(1))))) != int32('/') { + *(*uint8)(unsafe.Pointer(new1 + 4 + uintptr(len1))) = uint8('/') + *(*uint8)(unsafe.Pointer(new1 + 4 + uintptr(len1+uint32(1)))) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(tail)) = new1 + return 0 +} + +func _do_glob(tls *TLS, buf uintptr, pos Tsize_t, type1 int32, pat uintptr, flags int32, errfunc uintptr, tail uintptr) (r1 int32) { + bp := tls.Alloc(160) + defer tls.Free(160) + var de, dir, p, p2, v11, v2, v7, v8 uintptr + var fnm_flags, in_bracket, old_errno, overflow, r, readerr, v10, v9 int32 + var i, j, v4, v5 Tptrdiff_t + var l, v1 Tsize_t + var saved_sep uint8 + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = de, dir, fnm_flags, i, in_bracket, j, l, old_errno, overflow, p, p2, r, readerr, saved_sep, v1, v10, v11, v2, v4, v5, v7, v8, v9 + /* If GLOB_MARK is unused, we don't care about type. */ + if !(type1 != 0) && !(flags&Int32FromInt32(GLOB_MARK) != 0) { + type1 = int32(DT_REG) + } + /* Special-case the remaining pattern being all slashes, in + * which case we can use caller-passed type if it's a dir. */ + if *(*uint8)(unsafe.Pointer(pat)) != 0 && type1 != int32(DT_DIR) { + type1 = 0 + } + for pos+uint32(1) < uint32(PATH_MAX) && int32(*(*uint8)(unsafe.Pointer(pat))) == int32('/') { + v1 = pos + pos++ + v2 = pat + pat++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + } + /* Consume maximal [escaped-]literal prefix of pattern, copying + * and un-escaping it to the running buffer as we go. */ + i = 0 + j = 0 + in_bracket = 0 + overflow = 0 + for { + if !(int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('*') && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('?') && (!(in_bracket != 0) || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32(']'))) { + break + } + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i))) != 0) { + if overflow != 0 { + return 0 + } + pat += uintptr(i) + pos += uint32(j) + v4 = Int32FromInt32(0) + j = v4 + i = v4 + break + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('[') { + in_bracket = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('\\') && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + /* Backslashes inside a bracket are (at least by + * our interpretation) non-special, so if next + * char is ']' we have a complete expression. */ + if in_bracket != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int32(1))))) == int32(']') { + break + } + /* Unpaired final backslash never matches. */ + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int32(1)))) != 0) { + return 0 + } + i++ + } + } + } + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('/') { + if overflow != 0 { + return 0 + } + in_bracket = 0 + pat += uintptr(i + int32(1)) + i = -int32(1) + pos += uint32(j + int32(1)) + j = -int32(1) + } + /* Only store a character if it fits in the buffer, but if + * a potential bracket expression is open, the overflow + * must be remembered and handled later only if the bracket + * is unterminated (and thereby a literal), so as not to + * disallow long bracket expressions with short matches. */ + if pos+uint32(j+Int32FromInt32(1)) < uint32(PATH_MAX) { + v5 = j + j++ + *(*uint8)(unsafe.Pointer(buf + uintptr(pos+uint32(v5)))) = *(*uint8)(unsafe.Pointer(pat + uintptr(i))) + } else { + if in_bracket != 0 { + overflow = int32(1) + } else { + return 0 + } + } + /* If we consume any new components, the caller-passed type + * or dummy type from above is no longer valid. */ + type1 = 0 + goto _3 + _3: + ; + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(pos))) = uint8(0) + if !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + if flags&int32(GLOB_MARK) != 0 && (!(type1 != 0) || type1 == int32(DT_LNK)) && !(Xstat(tls, buf, bp) != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + type1 = int32(DT_DIR) + } else { + type1 = int32(DT_REG) + } + } + if !(type1 != 0) && Xlstat(tls, buf, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + return 0 + } + if _append(tls, tail, buf, pos, BoolInt32(flags&int32(GLOB_MARK) != 0 && type1 == int32(DT_DIR))) != 0 { + return int32(GLOB_NOSPACE) + } + return 0 + } + p2 = Xstrchr(tls, pat, int32('/')) + saved_sep = uint8('/') + /* Check if the '/' was escaped and, if so, remove the escape char + * so that it will not be unpaired when passed to fnmatch. */ + if p2 != 0 && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + p = p2 + for { + if !(p > pat && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('\\')) { + break + } + goto _6 + _6: + ; + p-- + } + if (int32(p2)-int32(p))%int32(2) != 0 { + p2-- + saved_sep = uint8('\\') + } + } + if pos != 0 { + v7 = buf + } else { + v7 = __ccgo_ts + 483 + } + dir = Xopendir(tls, v7) + if !(dir != 0) { + if (*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0 { + return int32(GLOB_ABORTED) + } + return 0 + } + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v8 = Xreaddir(tls, dir) + de = v8 + if !(v8 != 0) { + break + } + /* Quickly skip non-directories when there's pattern left. */ + if p2 != 0 && (*Tdirent)(unsafe.Pointer(de)).Fd_type != 0 && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_DIR) && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_LNK) { + continue + } + l = Xstrlen(tls, de+19) + if l >= uint32(PATH_MAX)-pos { + continue + } + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = uint8(0) + } + if flags&int32(GLOB_NOESCAPE) != 0 { + v9 = int32(FNM_NOESCAPE) + } else { + v9 = 0 + } + if !(flags&Int32FromInt32(GLOB_PERIOD) != 0) { + v10 = int32(FNM_PERIOD) + } else { + v10 = 0 + } + fnm_flags = v9 | v10 + if Xfnmatch(tls, pat, de+19, fnm_flags) != 0 { + continue + } + /* With GLOB_PERIOD, don't allow matching . or .. unless + * fnmatch would match them with FNM_PERIOD rules in effect. */ + if p2 != 0 && flags&int32(GLOB_PERIOD) != 0 && int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) && Xfnmatch(tls, pat, de+19, fnm_flags|int32(FNM_PERIOD)) != 0 { + continue + } + _memcpy(tls, buf+uintptr(pos), de+19, l+uint32(1)) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + if p2 != 0 { + v11 = p2 + } else { + v11 = __ccgo_ts + } + r = _do_glob(tls, buf, pos+l, int32((*Tdirent)(unsafe.Pointer(de)).Fd_type), v11, flags, errfunc, tail) + if r != 0 { + Xclosedir(tls, dir) + return r + } + } + readerr = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + Xclosedir(tls, dir) + if readerr != 0 && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return 0 +} + +func _ignore_err(tls *TLS, path uintptr, err int32) (r int32) { + return 0 +} + +func _freelist(tls *TLS, head uintptr) { + var match, next uintptr + _, _ = match, next + match = (*Tmatch)(unsafe.Pointer(head)).Fnext + for { + if !(match != 0) { + break + } + next = (*Tmatch)(unsafe.Pointer(match)).Fnext + Xfree(tls, match) + goto _1 + _1: + ; + match = next + } +} + +func _sort(tls *TLS, a uintptr, b uintptr) (r int32) { + return Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(a)), *(*uintptr)(unsafe.Pointer(b))) +} + +func _expand_tilde(tls *TLS, pat uintptr, buf uintptr, pos uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var delim, v1, v12 uint8 + var home, name_end, p, v11, v2, v3 uintptr + var i, v10, v13 Tsize_t + var v4 int32 + var _ /* pw at bp+0 */ Tpasswd + var _ /* res at bp+28 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = delim, home, i, name_end, p, v1, v10, v11, v12, v13, v2, v3, v4 + p = *(*uintptr)(unsafe.Pointer(pat)) + uintptr(1) + i = uint32(0) + name_end = X__strchrnul(tls, p, int32('/')) + v1 = *(*uint8)(unsafe.Pointer(name_end)) + delim = v1 + if v1 != 0 { + v2 = name_end + name_end++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(pat)) = name_end + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v3 = UintptrFromInt32(0) + } else { + v3 = Xgetenv(tls, __ccgo_ts+1310) + } + home = v3 + if !(home != 0) { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v4 = Xgetpwnam_r(tls, p, bp, buf, uint32(PATH_MAX), bp+28) + } else { + v4 = Xgetpwuid_r(tls, Xgetuid(tls), bp, buf, uint32(PATH_MAX), bp+28) + } + switch v4 { + case int32(ENOMEM): + goto _5 + default: + goto _6 + case 0: + goto _7 + } + goto _8 + _5: + ; + return int32(GLOB_NOSPACE) + _7: + ; + if !!(*(*uintptr)(unsafe.Pointer(bp + 28)) != 0) { + goto _9 + } + _6: + ; + return int32(GLOB_NOMATCH) + _9: + ; + _8: + ; + home = (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_dir + } + for i < uint32(Int32FromInt32(PATH_MAX)-Int32FromInt32(2)) && *(*uint8)(unsafe.Pointer(home)) != 0 { + v10 = i + i++ + v11 = home + home++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v10))) = *(*uint8)(unsafe.Pointer(v11)) + } + if *(*uint8)(unsafe.Pointer(home)) != 0 { + return int32(GLOB_NOMATCH) + } + v12 = delim + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v12 + if v12 != 0 { + i++ + v13 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v13))) = uint8(0) + } + *(*Tsize_t)(unsafe.Pointer(pos)) = i + return 0 +} + +func Xglob(tls *TLS, pat uintptr, flags int32, errfunc uintptr, g uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v flags=%v errfunc=%v g=%v, (%v:)", tls, pat, flags, errfunc, g, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var cnt, i, offs Tsize_t + var error1 int32 + var p, pathv uintptr + var v1 uint32 + var _ /* buf at bp+8 */ [4096]uint8 + var _ /* head at bp+0 */ Tmatch + var _ /* pos at bp+4104 */ Tsize_t + var _ /* s at bp+4108 */ uintptr + var _ /* tail at bp+4 */ uintptr + _, _, _, _, _, _, _ = cnt, error1, i, offs, p, pathv, v1 + *(*Tmatch)(unsafe.Pointer(bp)) = struct { + Fnext uintptr + }{} + *(*uintptr)(unsafe.Pointer(bp + 4)) = bp + if flags&int32(GLOB_DOOFFS) != 0 { + v1 = (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs + } else { + v1 = uint32(0) + } + offs = v1 + error1 = 0 + if !(errfunc != 0) { + errfunc = __ccgo_fp(_ignore_err) + } + if !(flags&Int32FromInt32(GLOB_APPEND) != 0) { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs = offs + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint32(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) + } + if *(*uint8)(unsafe.Pointer(pat)) != 0 { + p = Xstrdup(tls, pat) + if !(p != 0) { + return int32(GLOB_NOSPACE) + } + (*(*[4096]uint8)(unsafe.Pointer(bp + 8)))[0] = uint8(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4104)) = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4108)) = p + if flags&(Int32FromInt32(GLOB_TILDE)|Int32FromInt32(GLOB_TILDE_CHECK)) != 0 && int32(*(*uint8)(unsafe.Pointer(p))) == int32('~') { + error1 = _expand_tilde(tls, bp+4108, bp+8, bp+4104) + } + if !(error1 != 0) { + error1 = _do_glob(tls, bp+8, *(*Tsize_t)(unsafe.Pointer(bp + 4104)), 0, *(*uintptr)(unsafe.Pointer(bp + 4108)), flags, errfunc, bp+4) + } + Xfree(tls, p) + } + if error1 == int32(GLOB_NOSPACE) { + _freelist(tls, bp) + return error1 + } + cnt = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(*(*uintptr)(unsafe.Pointer(bp + 4)) != 0) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))).Fnext + cnt++ + } + if !(cnt != 0) { + if flags&int32(GLOB_NOCHECK) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 4)) = bp + if _append(tls, bp+4, pat, Xstrlen(tls, pat), 0) != 0 { + return int32(GLOB_NOSPACE) + } + cnt++ + } else { + if !(error1 != 0) { + return int32(GLOB_NOMATCH) + } + } + } + if flags&int32(GLOB_APPEND) != 0 { + pathv = Xrealloc(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv, (offs+(*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc+cnt+uint32(1))*uint32(4)) + if !(pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = pathv + offs += (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc + } else { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = Xmalloc(tls, (offs+cnt+uint32(1))*uint32(4)) + if !((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + i = uint32(0) + for { + if !(i < offs) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(i)*4)) = UintptrFromInt32(0) + goto _3 + _3: + ; + i++ + } + } + i = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*4)) = *(*uintptr)(unsafe.Pointer(bp + 4)) + 4 + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))).Fnext + i++ + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*4)) = UintptrFromInt32(0) + *(*Tsize_t)(unsafe.Pointer(g)) += cnt + if !(flags&Int32FromInt32(GLOB_NOSORT) != 0) { + Xqsort(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv+uintptr(offs)*4, cnt, uint32(4), __ccgo_fp(_sort)) + } + return error1 +} + +func Xglobfree(tls *TLS, g uintptr) { + if __ccgo_strace { + trc("tls=%v g=%v, (%v:)", tls, g, origin(2)) + } + var i Tsize_t + _ = i + i = uint32(0) + for { + if !(i < (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr((*Tglob_t)(unsafe.Pointer(g)).Fgl_offs+i)*4))-uintptr(uint32(UintptrFromInt32(0)+4))) + goto _1 + _1: + ; + i++ + } + Xfree(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint32(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) +} + +const ASSERTION = -2 +const ASSERT_AT_BOL = 1 +const ASSERT_AT_BOW = 16 +const ASSERT_AT_EOL = 2 +const ASSERT_AT_EOW = 32 +const ASSERT_AT_WB = 64 +const ASSERT_AT_WB_NEG = 128 +const ASSERT_BACKREF = 256 +const ASSERT_CHAR_CLASS = 4 +const ASSERT_CHAR_CLASS_NEG = 8 +const ASSERT_LAST = 256 +const BACKREF = -4 +const COPY_MAXIMIZE_FIRST_TAG = 2 +const COPY_REMOVE_TAGS = 1 +const EMPTY1 = -1 +const MAX_NEG_CLASSES = 64 +const REG_BADBR = 10 +const REG_BADPAT = 2 +const REG_BADRPT = 13 +const REG_EBRACE = 9 +const REG_EBRACK = 7 +const REG_ECOLLATE = 3 +const REG_ECTYPE = 4 +const REG_EESCAPE = 5 +const REG_ENOSYS = -1 +const REG_EPAREN = 8 +const REG_ERANGE = 11 +const REG_ESPACE = 12 +const REG_ESUBREG = 6 +const REG_EXTENDED = 1 +const REG_ICASE = 2 +const REG_NEWLINE = 4 +const REG_NOMATCH = 1 +const REG_NOSUB = 8 +const REG_NOTBOL = 1 +const REG_NOTEOL = 2 +const REG_OK = 0 +const TAG = -3 +const TRE_CHAR_MAX = 1114111 +const TRE_MEM_BLOCK_SIZE = 1024 +const TRE_REGEX_T_FIELD = 0 +const tre_ctype = 0 +const tre_isalnum = 0 +const tre_isalpha = 0 +const tre_isblank = 0 +const tre_iscntrl = 0 +const tre_isctype = 0 +const tre_isdigit = 0 +const tre_isgraph = 0 +const tre_islower = 0 +const tre_isprint = 0 +const tre_ispunct = 0 +const tre_isspace = 0 +const tre_isupper = 0 +const tre_isxdigit = 0 +const tre_mem_alloc_impl = 0 +const tre_mem_destroy = 0 +const tre_mem_new_impl = 0 +const tre_strlen = 0 +const tre_tolower = 0 +const tre_toupper = 0 +const xcalloc = 0 +const xfree = 0 +const xmalloc = 0 +const xrealloc = 0 + +type Tregoff_t = int32 + +type Tregex_t = struct { + Fre_nsub Tsize_t + F__opaque uintptr + F__padding [4]uintptr + F__nsub2 Tsize_t + F__padding2 uint8 +} + +type Tre_pattern_buffer = Tregex_t + +type Tregmatch_t = struct { + Frm_so Tregoff_t + Frm_eo Tregoff_t +} + +type Treg_errcode_t = int32 + +type Ttre_char_t = uint32 + +type Ttre_cint_t = uint32 + +type Ttre_ctype_t = uint32 + +type Ttre_tnfa_transition_t = struct { + Fcode_min Ttre_cint_t + Fcode_max Ttre_cint_t + Fstate uintptr + Fstate_id int32 + Ftags uintptr + Fassertions int32 + Fu struct { + Fbackref [0]int32 + Fclass Ttre_ctype_t + } + Fneg_classes uintptr +} + +type Ttnfa_transition = Ttre_tnfa_transition_t + +type Ttre_tag_direction_t = int32 + +const _TRE_TAG_MINIMIZE = 0 +const _TRE_TAG_MAXIMIZE = 1 + +type Ttre_submatch_data = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_submatch_data_t = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_tnfa_t = struct { + Ftransitions uintptr + Fnum_transitions uint32 + Finitial uintptr + Ffinal uintptr + Fsubmatch_data uintptr + Ffirstpos_chars uintptr + Ffirst_char int32 + Fnum_submatches uint32 + Ftag_directions uintptr + Fminimal_tags uintptr + Fnum_tags int32 + Fnum_minimals int32 + Fend_tag int32 + Fnum_states int32 + Fcflags int32 + Fhave_backrefs int32 + Fhave_approx int32 +} + +type Ttnfa = Ttre_tnfa_t + +type Ttre_list_t = struct { + Fdata uintptr + Fnext uintptr +} + +type Ttre_list = Ttre_list_t + +type Ttre_mem_t = uintptr + +type Ttre_mem_struct = struct { + Fblocks uintptr + Fcurrent uintptr + Fptr uintptr + Fn Tsize_t + Ffailed int32 + Fprovided uintptr +} + +/*********************************************************************** + from tre-compile.h +***********************************************************************/ + +type Ttre_pos_and_tags_t = struct { + Fposition int32 + Fcode_min int32 + Fcode_max int32 + Ftags uintptr + Fassertions int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr + Fbackref int32 +} + +/*********************************************************************** + from tre-ast.c and tre-ast.h +***********************************************************************/ + +// C documentation +// +// /* The different AST node types. */ +type Ttre_ast_type_t = int32 + +const _LITERAL = 0 +const _CATENATION = 1 +const _ITERATION = 2 +const _UNION = 3 + +/* Special subtypes of TRE_LITERAL. */ + +// C documentation +// +// /* A generic AST node. All AST nodes consist of this node on the top +// level with `obj' pointing to the actual content. */ +type Ttre_ast_node_t = struct { + Ftype1 Ttre_ast_type_t + Fobj uintptr + Fnullable int32 + Fsubmatch_id int32 + Fnum_submatches int32 + Fnum_tags int32 + Ffirstpos uintptr + Flastpos uintptr +} + +// C documentation +// +// /* A "literal" node. These are created for assertions, back references, +// tags, matching parameter settings, and all expressions that match one +// character. */ +type Ttre_literal_t = struct { + Fcode_min int32 + Fcode_max int32 + Fposition int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr +} + +// C documentation +// +// /* A "catenation" node. These are created when two regexps are concatenated. +// If there are more than one subexpressions in sequence, the `left' part +// holds all but the last, and `right' part holds the last subexpression +// (catenation is left associative). */ +type Ttre_catenation_t = struct { + Fleft uintptr + Fright uintptr +} + +// C documentation +// +// /* An "iteration" node. These are created for the "*", "+", "?", and "{m,n}" +// operators. */ +type Ttre_iteration_t = struct { + Farg uintptr + Fmin int32 + Fmax int32 + F__ccgo12 uint8 +} + +// C documentation +// +// /* An "union" node. These are created for the "|" operator. */ +type Ttre_union_t = struct { + Fleft uintptr + Fright uintptr +} + +func _tre_ast_new_node(tls *TLS, mem Ttre_mem_t, type1 int32, obj uintptr) (r uintptr) { + var node uintptr + _ = node + node = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)) + if !(node != 0) || !(obj != 0) { + return uintptr(0) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = obj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = type1 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = -int32(1) + return node +} + +func _tre_ast_new_literal(tls *TLS, mem Ttre_mem_t, code_min int32, code_max int32, position int32) (r uintptr) { + var lit, node uintptr + _, _ = lit, node + lit = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(20)) + node = _tre_ast_new_node(tls, mem, int32(_LITERAL), lit) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = code_min + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = code_max + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = position + return node +} + +func _tre_ast_new_iter(tls *TLS, mem Ttre_mem_t, arg uintptr, min int32, max int32, minimal int32) (r uintptr) { + var iter, node uintptr + _, _ = iter, node + iter = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(16)) + node = _tre_ast_new_node(tls, mem, int32(_ITERATION), iter) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg = arg + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin = min + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax = max + SetBitFieldPtr8Uint32(iter+12, uint32(minimal), 0, 0x1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(arg)).Fnum_submatches + return node +} + +func _tre_ast_new_union(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var node, un uintptr + _, _ = node, un + if !(left != 0) { + return right + } + un = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(8)) + node = _tre_ast_new_node(tls, mem, int32(_UNION), un) + if !(node != 0) || !(right != 0) { + return uintptr(0) + } + (*Ttre_union_t)(unsafe.Pointer(un)).Fleft = left + (*Ttre_union_t)(unsafe.Pointer(un)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +func _tre_ast_new_catenation(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var cat, node uintptr + _, _ = cat, node + if !(left != 0) { + return right + } + cat = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(8)) + node = _tre_ast_new_node(tls, mem, int32(_CATENATION), cat) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft = left + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_t = struct { + Fsize int32 + Fmax_size int32 + Fincrement int32 + Fptr int32 + Fstack uintptr +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_rec = Ttre_stack_t + +/* Just to save some typing. */ + +type Ttre_stack_item = struct { + Fint_value [0]int32 + Fvoidptr_value uintptr +} + +func _tre_stack_new(tls *TLS, size int32, max_size int32, increment int32) (r uintptr) { + var s uintptr + _ = s + s = Xmalloc(tls, uint32(20)) + if s != UintptrFromInt32(0) { + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = Xmalloc(tls, uint32(4)*uint32(size)) + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack == UintptrFromInt32(0) { + Xfree(tls, s) + return UintptrFromInt32(0) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size = max_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement = increment + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr = 0 + } + return s +} + +func _tre_stack_destroy(tls *TLS, s uintptr) { + Xfree(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack) + Xfree(tls, s) +} + +func _tre_stack_num_objects(tls *TLS, s uintptr) (r int32) { + return (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr +} + +func _tre_stack_push(tls *TLS, s uintptr, value Ttre_stack_item) (r Treg_errcode_t) { + var new_buffer uintptr + var new_size int32 + _, _ = new_buffer, new_size + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr < (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize { + *(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr((*Ttre_stack_t)(unsafe.Pointer(s)).Fptr)*4)) = value + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr++ + } else { + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize >= (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + return int32(REG_ESPACE) + } else { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement + if new_size > (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size + } + new_buffer = Xrealloc(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack, uint32(4)*uint32(new_size)) + if new_buffer == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = new_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = new_buffer + _tre_stack_push(tls, s, value) + } + } + return REG_OK +} + +func _tre_stack_push_int(tls *TLS, s uintptr, value int32) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*int32)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_push_voidptr(tls *TLS, s uintptr, value uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*uintptr)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_pop_int(tls *TLS, s uintptr) (r int32) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*int32)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*4)) +} + +func _tre_stack_pop_voidptr(tls *TLS, s uintptr) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*uintptr)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*4)) +} + +/*********************************************************************** + from tre-parse.c and tre-parse.h +***********************************************************************/ + +// C documentation +// +// /* Parse context. */ +type Ttre_parse_ctx_t = struct { + Fmem Ttre_mem_t + Fstack uintptr + Fn uintptr + Fs uintptr + Fstart uintptr + Fsubmatch_id int32 + Fposition int32 + Fmax_backref int32 + Fcflags int32 +} + +// C documentation +// +// /* Some macros for expanding \w, \s, etc. */ +var _tre_macros = [13]struct { + Fc uint8 + Fexpansion uintptr +}{ + 0: { + Fc: uint8('t'), + Fexpansion: __ccgo_ts + 1315, + }, + 1: { + Fc: uint8('n'), + Fexpansion: __ccgo_ts + 301, + }, + 2: { + Fc: uint8('r'), + Fexpansion: __ccgo_ts + 1317, + }, + 3: { + Fc: uint8('f'), + Fexpansion: __ccgo_ts + 1319, + }, + 4: { + Fc: uint8('a'), + Fexpansion: __ccgo_ts + 1321, + }, + 5: { + Fc: uint8('e'), + Fexpansion: __ccgo_ts + 1323, + }, + 6: { + Fc: uint8('w'), + Fexpansion: __ccgo_ts + 1325, + }, + 7: { + Fc: uint8('W'), + Fexpansion: __ccgo_ts + 1338, + }, + 8: { + Fc: uint8('s'), + Fexpansion: __ccgo_ts + 1352, + }, + 9: { + Fc: uint8('S'), + Fexpansion: __ccgo_ts + 1364, + }, + 10: { + Fc: uint8('d'), + Fexpansion: __ccgo_ts + 1377, + }, + 11: { + Fc: uint8('D'), + Fexpansion: __ccgo_ts + 1389, + }, + 12: {}, +} + +// C documentation +// +// /* Expands a macro delimited by `regex' and `regex_end' to `buf', which +// must have at least `len' items. Sets buf[0] to zero if the there +// is no match in `tre_macros'. */ +func _tre_expand_macro(tls *TLS, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(_tre_macros[i].Fc != 0 && int32(_tre_macros[i].Fc) != int32(*(*uint8)(unsafe.Pointer(s)))) { + break + } + goto _1 + _1: + ; + i++ + } + return _tre_macros[i].Fexpansion +} + +func _tre_compare_lit(tls *TLS, a uintptr, b uintptr) (r int32) { + var la, lb uintptr + _, _ = la, lb + la = a + lb = b + /* assumes the range of valid code_min is < INT_MAX */ + return (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(la)))).Fcode_min - (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(lb)))).Fcode_min +} + +type Tliterals = struct { + Fmem Ttre_mem_t + Fa uintptr + Flen1 int32 + Fcap1 int32 +} + +func _tre_new_lit(tls *TLS, p uintptr) (r uintptr) { + var a, v2 uintptr + var v1 int32 + _, _, _ = a, v1, v2 + if (*Tliterals)(unsafe.Pointer(p)).Flen1 >= (*Tliterals)(unsafe.Pointer(p)).Fcap1 { + if (*Tliterals)(unsafe.Pointer(p)).Fcap1 >= Int32FromInt32(1)< max { + return int32(REG_ERANGE) + } + s += uintptr(len1) + } + } + if class != 0 && (*Tneg)(unsafe.Pointer(neg)).Fnegate != 0 { + if (*Tneg)(unsafe.Pointer(neg)).Flen1 >= int32(MAX_NEG_CLASSES) { + return int32(REG_ESPACE) + } + v6 = neg + 4 + v5 = *(*int32)(unsafe.Pointer(v6)) + *(*int32)(unsafe.Pointer(v6))++ + *(*Ttre_ctype_t)(unsafe.Pointer(neg + 8 + uintptr(v5)*4)) = class + } else { + lit = _tre_new_lit(tls, ls) + if !(lit != 0) { + return int32(REG_ESPACE) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = min + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = max + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass = class + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* Add opposite-case codepoints if REG_ICASE is present. + It seems that POSIX requires that bracket negation + should happen before case-folding, but most practical + implementations do it the other way around. Changing + the order would need efficient representation of + case-fold ranges and bracket range sets even with + simple patterns so this is ok for now. */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && !(class != 0) { + if _add_icase_literals(tls, ls, min, max) != 0 { + return int32(REG_ESPACE) + } + } + } + goto _1 + _1: + } + return r +} + +func _parse_bracket(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(288) + defer tls.Free(288) + var err Treg_errcode_t + var i, max, min, negmax, negmin, v1, v3 int32 + var lit, n, nc, node uintptr + var _ /* ls at bp+0 */ Tliterals + var _ /* neg at bp+16 */ Tneg + _, _, _, _, _, _, _, _, _, _, _, _ = err, i, lit, max, min, n, nc, negmax, negmin, node, v1, v3 + node = uintptr(0) + nc = uintptr(0) + (*(*Tliterals)(unsafe.Pointer(bp))).Fmem = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem + (*(*Tliterals)(unsafe.Pointer(bp))).Flen1 = 0 + (*(*Tliterals)(unsafe.Pointer(bp))).Fcap1 = int32(32) + (*(*Tliterals)(unsafe.Pointer(bp))).Fa = Xmalloc(tls, uint32((*(*Tliterals)(unsafe.Pointer(bp))).Fcap1)*uint32(4)) + if !((*(*Tliterals)(unsafe.Pointer(bp))).Fa != 0) { + return int32(REG_ESPACE) + } + (*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1 = 0 + (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate = BoolInt32(int32(*(*uint8)(unsafe.Pointer(s))) == int32('^')) + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + s++ + } + err = _parse_bracket_terms(tls, ctx, s, bp, bp+16) + if err != REG_OK { + goto parse_bracket_done + } + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + /* + * With REG_NEWLINE, POSIX requires that newlines are not matched by + * any form of a non-matching list. + */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int32('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int32('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + } + /* Sort the array if we need to negate it. */ + Xqsort(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa, uint32((*(*Tliterals)(unsafe.Pointer(bp))).Flen1), uint32(4), __ccgo_fp(_tre_compare_lit)) + /* extra lit for the last negated range */ + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int32(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int32(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* negated classes */ + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1 != 0 { + nc = X__tre_mem_alloc_impl(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, UintptrFromInt32(0), 0, uint32((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1+Int32FromInt32(1))*uint32(4)) + if !(nc != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + _memcpy(tls, nc, bp+16+8, uint32((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1)*uint32(4)) + *(*Ttre_ctype_t)(unsafe.Pointer(nc + uintptr((*(*Tneg)(unsafe.Pointer(bp + 16))).Flen1)*4)) = uint32(0) + } + } + /* Build a union of the items in the array, negated if necessary. */ + v1 = Int32FromInt32(0) + negmin = v1 + negmax = v1 + i = 0 + for { + if !(i < (*(*Tliterals)(unsafe.Pointer(bp))).Flen1) { + break + } + lit = *(*uintptr)(unsafe.Pointer((*(*Tliterals)(unsafe.Pointer(bp))).Fa + uintptr(i)*4)) + min = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min + max = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + if (*(*Tneg)(unsafe.Pointer(bp + 16))).Fnegate != 0 { + if min <= negmin { + /* Overlap. */ + if max+int32(1) >= negmin { + v3 = max + int32(1) + } else { + v3 = negmin + } + negmin = v3 + goto _2 + } + negmax = min - int32(1) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = negmin + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = negmax + negmin = max + int32(1) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes = nc + n = _tre_ast_new_node(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(_LITERAL), lit) + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, node, n) + if !(node != 0) { + err = int32(REG_ESPACE) + break + } + goto _2 + _2: + ; + i++ + } + goto parse_bracket_done +parse_bracket_done: + ; + Xfree(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return err +} + +func _parse_dup_count(tls *TLS, s uintptr, n uintptr) (r uintptr) { + *(*int32)(unsafe.Pointer(n)) = -int32(1) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return s + } + *(*int32)(unsafe.Pointer(n)) = 0 + for { + *(*int32)(unsafe.Pointer(n)) = int32(10)**(*int32)(unsafe.Pointer(n)) + (int32(*(*uint8)(unsafe.Pointer(s))) - int32('0')) + s++ + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) || *(*int32)(unsafe.Pointer(n)) > int32(RE_DUP_MAX) { + break + } + goto _1 + _1: + } + return s +} + +func _parse_dup(tls *TLS, s uintptr, ere int32, pmin uintptr, pmax uintptr) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v4 uintptr + var v2, v3, v5 bool + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _ = v1, v2, v3, v4, v5 + s = _parse_dup_count(tls, s, bp) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(',') { + s = _parse_dup_count(tls, s+uintptr(1), bp+4) + } else { + *(*int32)(unsafe.Pointer(bp + 4)) = *(*int32)(unsafe.Pointer(bp)) + } + if v3 = *(*int32)(unsafe.Pointer(bp + 4)) < *(*int32)(unsafe.Pointer(bp)) && *(*int32)(unsafe.Pointer(bp + 4)) >= 0 || *(*int32)(unsafe.Pointer(bp + 4)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) < 0; !v3 { + if v2 = !(ere != 0); v2 { + v1 = s + s++ + } + } + if v5 = v3 || v2 && int32(*(*uint8)(unsafe.Pointer(v1))) != int32('\\'); !v5 { + v4 = s + s++ + } + if v5 || int32(*(*uint8)(unsafe.Pointer(v4))) != int32('}') { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(pmin)) = *(*int32)(unsafe.Pointer(bp)) + *(*int32)(unsafe.Pointer(pmax)) = *(*int32)(unsafe.Pointer(bp + 4)) + return s +} + +func _hexval1(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func _marksub(tls *TLS, ctx uintptr, node uintptr, subid int32) (r Treg_errcode_t) { + var n uintptr + _ = n + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + n = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !(n != 0) { + return int32(REG_ESPACE) + } + n = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, n, node) + if !(n != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(n)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches + node = n + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = subid + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return REG_OK +} + +/* +BRE grammar: +Regex = Branch | '^' | '$' | '^$' | '^' Branch | Branch '$' | '^' Branch '$' +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '\(' Branch '\)' | back_ref +Dup = '*' | '\{' Count '\}' | '\{' Count ',\}' | '\{' Count ',' Count '\}' + +(leading ^ and trailing $ in a sub expr may be an anchor or literal as well) + +ERE grammar: +Regex = Branch | Regex '|' Branch +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '(' Regex ')' | '^' | '$' +Dup = '*' | '+' | '?' | '{' Count '}' | '{' Count ',}' | '{' Count ',' Count '}' + +(a*+?, ^*, $+, \X, {, (|a) are unspecified) +*/ + +func _parse_atom(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, ere, i, len1, v, val, v16, v18, v20, v21, v23, v25 int32 + var err Treg_errcode_t + var node, p, tmp1, tmp11, tmp2, tmp21, v14, v17, v19, v22, v24, v26 uintptr + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ere, err, i, len1, node, p, tmp1, tmp11, tmp2, tmp21, v, val, v14, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26 + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('['): + goto _1 + case int32('\\'): + goto _2 + case int32('.'): + goto _3 + case int32('^'): + goto _4 + case int32('$'): + goto _5 + case int32('?'): + goto _6 + case int32('+'): + goto _7 + case int32('{'): + goto _8 + case int32('*'): + goto _9 + case int32('|'): + goto _10 + case 0: + goto _11 + default: + goto _12 + } + goto _13 +_1: + ; + return _parse_bracket(tls, ctx, s+uintptr(1)) +_2: + ; + p = _tre_expand_macro(tls, s+uintptr(1)) + if p != 0 { + /* assume \X expansion is a single atom */ + err = _parse_atom(tls, ctx, p) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + uintptr(2) + return err + } + /* extensions: \b, \B, \<, \>, \xHH \x{HHHH} */ + s++ + v14 = s + switch int32(*(*uint8)(unsafe.Pointer(v14))) { + case 0: + return int32(REG_EESCAPE) + case int32('b'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB), -int32(1)) + case int32('B'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB_NEG), -int32(1)) + case int32('<'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOW), -int32(1)) + case int32('>'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOW), -int32(1)) + case int32('x'): + s++ + v = 0 + len1 = int32(2) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + len1 = int32(8) + s++ + } + i = 0 + for { + if !(i < len1 && v < int32(0x110000)) { + break + } + c = _hexval1(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(i))))) + if c < 0 { + break + } + v = int32(16)*v + c + goto _15 + _15: + ; + i++ + } + s += uintptr(i) + if len1 == int32(8) { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('}') { + return int32(REG_EBRACE) + } + s++ + } + v17 = ctx + 24 + v16 = *(*int32)(unsafe.Pointer(v17)) + *(*int32)(unsafe.Pointer(v17))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, v, v, v16) + s-- + case int32('{'): + fallthrough + case int32('+'): + fallthrough + case int32('?'): + /* extension: treat \+, \? as repetitions in BRE */ + /* reject repetitions after empty expression in BRE */ + if !(ere != 0) { + return int32(REG_BADRPT) + } + fallthrough + case int32('|'): + /* extension: treat \| as alternation in BRE */ + if !(ere != 0) { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + s-- + goto end + } + /* fallthrough */ + fallthrough + default: + if !(ere != 0) && uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('1') < uint32(9) { + /* back reference */ + val = int32(*(*uint8)(unsafe.Pointer(s))) - int32('0') + v19 = ctx + 24 + v18 = *(*int32)(unsafe.Pointer(v19)) + *(*int32)(unsafe.Pointer(v19))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(4), val, v18) + if val >= (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref { + v20 = val + } else { + v20 = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref = v20 + } else { + /* extension: accept unknown escaped char + as a literal */ + goto parse_literal + } + } + s++ + goto _13 +_3: + ; + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + v22 = ctx + 24 + v21 = *(*int32)(unsafe.Pointer(v22)) + *(*int32)(unsafe.Pointer(v22))++ + tmp1 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, Int32FromUint8('\n')-Int32FromInt32(1), v21) + v24 = ctx + 24 + v23 = *(*int32)(unsafe.Pointer(v24)) + *(*int32)(unsafe.Pointer(v24))++ + tmp2 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, Int32FromUint8('\n')+Int32FromInt32(1), int32(TRE_CHAR_MAX), v23) + if tmp1 != 0 && tmp2 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp1, tmp2) + } else { + node = uintptr(0) + } + } else { + v26 = ctx + 24 + v25 = *(*int32)(unsafe.Pointer(v26)) + *(*int32)(unsafe.Pointer(v26))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, int32(TRE_CHAR_MAX), v25) + } + s++ + goto _13 +_4: + ; + /* '^' has a special meaning everywhere in EREs, and at beginning of BRE. */ + if !(ere != 0) && s != (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOL), -int32(1)) + s++ + goto _13 +_5: + ; + /* '$' is special everywhere in EREs, and at the end of a BRE subexpression. */ + if !(ere != 0) && *(*uint8)(unsafe.Pointer(s + 1)) != 0 && (int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('\\') || int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32(')') && int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32('|')) { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOL), -int32(1)) + s++ + goto _13 +_9: + ; +_8: + ; +_7: + ; +_6: + ; + /* reject repetitions after empty expression in ERE */ + if ere != 0 { + return int32(REG_BADRPT) + } +_10: + ; + if !(ere != 0) { + goto parse_literal + } +_11: + ; + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + goto _13 +_12: + ; + goto parse_literal +parse_literal: + ; + len1 = Xmbtowc(tls, bp, s, uint32(-Int32FromInt32(1))) + if len1 < 0 { + return int32(REG_BADPAT) + } + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && (Xiswupper(tls, *(*Twchar_t)(unsafe.Pointer(bp))) != 0 || Xiswlower(tls, *(*Twchar_t)(unsafe.Pointer(bp))) != 0) { + /* multiple opposite case characters are not supported */ + tmp11 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowupper(tls, *(*Twchar_t)(unsafe.Pointer(bp)))), int32(Xtowupper(tls, *(*Twchar_t)(unsafe.Pointer(bp)))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + tmp21 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(bp)))), int32(Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(bp)))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + if tmp11 != 0 && tmp21 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp11, tmp21) + } else { + node = uintptr(0) + } + } else { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(*(*Twchar_t)(unsafe.Pointer(bp))), int32(*(*Twchar_t)(unsafe.Pointer(bp))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + s += uintptr(len1) + goto _13 +_13: + ; + goto end +end: + ; + if !(node != 0) { + return int32(REG_ESPACE) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + return REG_OK +} + +func _tre_parse(tls *TLS, ctx uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, depth, ere, subid, v2, v7 int32 + var err, v1, v4, v5, v6 Treg_errcode_t + var nbranch, nunion, s, stack, v8 uintptr + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, depth, ere, err, nbranch, nunion, s, stack, subid, v1, v2, v4, v5, v6, v7, v8 + nbranch = uintptr(0) + nunion = uintptr(0) + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart + subid = 0 + depth = 0 + stack = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstack + v2 = subid + subid++ + v1 = _tre_stack_push_int(tls, stack, v2) + err = v1 + if v1 != REG_OK { + return err + } + for { + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('(') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + v4 = _tre_stack_push_voidptr(tls, stack, nunion) + err = v4 + if v4 != REG_OK { + return err + } + v5 = _tre_stack_push_voidptr(tls, stack, nbranch) + err = v5 + if v5 != REG_OK { + return err + } + v7 = subid + subid++ + v6 = _tre_stack_push_int(tls, stack, v7) + err = v6 + if v6 != REG_OK { + return err + } + s++ + if !(ere != 0) { + s++ + } + depth++ + v8 = UintptrFromInt32(0) + nunion = v8 + nbranch = v8 + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + goto _3 + } + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + } else { + err = _parse_atom(tls, ctx, s) + if err != REG_OK { + return err + } + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs + } + goto parse_iter + parse_iter: + ; + for { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('\\') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('*') { + if !(ere != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('{') { + break + } + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && ere != 0 { + break + } + /* extension: treat \+, \? as repetitions in BRE */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('{') { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') { + s++ + } + /* handle ^* at the start of a BRE. */ + if !(ere != 0) && s == (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart+uintptr(1) && int32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) == int32('^') { + break + } + /* extension: multiple consecutive *+?{,} is unspecified, + but (a+)+ has to be supported so accepting a++ makes + sense, note however that the RE_DUP_MAX limit can be + circumvented: (a{255}){255} uses a lot of memory.. */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + s = _parse_dup(tls, s+uintptr(1), ere, bp, bp+4) + if !(s != 0) { + return int32(REG_BADBR) + } + } else { + *(*int32)(unsafe.Pointer(bp)) = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = -int32(1) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + *(*int32)(unsafe.Pointer(bp)) = int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('?') { + *(*int32)(unsafe.Pointer(bp + 4)) = int32(1) + } + s++ + } + if *(*int32)(unsafe.Pointer(bp + 4)) == 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + } else { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_iter(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), 0) + } + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + goto _9 + _9: + } + nbranch = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nbranch, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn) + if ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('|') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + /* extension: empty branch is unspecified (), (|a), (a|) + here they are not rejected but match on empty string */ + c = int32(*(*uint8)(unsafe.Pointer(s))) + nunion = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nunion, nbranch) + nbranch = uintptr(0) + if c == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') { + s += uintptr(2) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('|') { + s++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('\\') { + if !(depth != 0) { + return int32(REG_EPAREN) + } + s += uintptr(2) + } else { + if c == int32(')') { + s++ + } + } + depth-- + err = _marksub(tls, ctx, nunion, _tre_stack_pop_int(tls, stack)) + if err != REG_OK { + return err + } + if !(c != 0) && depth < 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fsubmatch_id = subid + return REG_OK + } + if !(c != 0) || depth < 0 { + return int32(REG_EPAREN) + } + nbranch = _tre_stack_pop_voidptr(tls, stack) + nunion = _tre_stack_pop_voidptr(tls, stack) + goto parse_iter + } + } + } + goto _3 + _3: + } + return r +} + +/*********************************************************************** + from tre-compile.c +***********************************************************************/ + +/* + TODO: + - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive + function calls. +*/ + +/* + Algorithms to setup tags so that submatch addressing can be done. +*/ + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the left child a new tag with number `tag_id' to `node' is added, +// and the right child is the old root. */ +func _tre_add_tag_left(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(8)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the right child a new tag with number `tag_id' to `node' is added, +// and the left child is the old root. */ +func _tre_add_tag_right(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(8)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +type Ttre_addtags_symbol_t = int32 + +const _ADDTAGS_RECURSE = 0 +const _ADDTAGS_AFTER_ITERATION = 1 +const _ADDTAGS_AFTER_UNION_LEFT = 2 +const _ADDTAGS_AFTER_UNION_RIGHT = 3 +const _ADDTAGS_AFTER_CAT_LEFT = 4 +const _ADDTAGS_AFTER_CAT_RIGHT = 5 +const _ADDTAGS_SET_SUBMATCH_END = 6 + +type Ttre_tag_states_t = struct { + Ftag int32 + Fnext_tag int32 +} + +// C documentation +// +// /* Go through `regset' and set submatch data for submatches that are +// using this tag. */ +func _tre_purge_regset(tls *TLS, regset uintptr, tnfa uintptr, tag int32) { + var i, id, start int32 + _, _, _ = i, id, start + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) >= 0) { + break + } + id = *(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) / int32(2) + start = BoolInt32(!(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4))%Int32FromInt32(2) != 0)) + if start != 0 { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*12))).Fso_tag = tag + } else { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*12))).Feo_tag = tag + } + goto _1 + _1: + ; + i++ + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) +} + +// C documentation +// +// /* Adds tags to appropriate locations in the parse tree in `tree', so that +// subexpressions marked for submatch addressing can be traced. */ +func _tre_add_tags(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr, tnfa uintptr) (r Treg_errcode_t) { + var added_tags, bottom, enter_tag, first_pass, i1, i2, i3, i4, i5, i6, i7, id, id1, left_tag, minimal, minimal_tag, new_tag, next_tag, num_minimals, num_tags, reserved_tag, right_tag, tag, tag_left, tag_right, v22 int32 + var cat, iter, left, left1, left2, lit, node, orig_regset, p, parents, regset, right, right1, right2, saved_states, uni uintptr + var direction Ttre_tag_direction_t + var i uint32 + var status Treg_errcode_t + var symbol Ttre_addtags_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = added_tags, bottom, cat, direction, enter_tag, first_pass, i, i1, i2, i3, i4, i5, i6, i7, id, id1, iter, left, left1, left2, left_tag, lit, minimal, minimal_tag, new_tag, next_tag, node, num_minimals, num_tags, orig_regset, p, parents, regset, reserved_tag, right, right1, right2, right_tag, saved_states, status, symbol, tag, tag_left, tag_right, uni, v22 + status = REG_OK + node = tree /* Tree node we are currently looking at. */ + bottom = _tre_stack_num_objects(tls, stack) + /* True for first pass (counting number of needed tags) */ + first_pass = BoolInt32(mem == UintptrFromInt32(0) || tnfa == UintptrFromInt32(0)) + num_tags = 0 /* Total number of tags. */ + num_minimals = 0 /* Number of special minimal tags. */ + tag = 0 /* The tag that is to be added next. */ + next_tag = int32(1) /* Stack of submatches the current submatch is + contained in. */ + minimal_tag = -int32(1) + direction = int32(_TRE_TAG_MINIMIZE) + if !(first_pass != 0) { + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = 0 + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags)) = -int32(1) + } + regset = Xmalloc(tls, uint32(4)*(((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))*uint32(2))) + if regset == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + orig_regset = regset + parents = Xmalloc(tls, uint32(4)*((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))) + if parents == UintptrFromInt32(0) { + Xfree(tls, regset) + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(parents)) = -int32(1) + saved_states = Xmalloc(tls, uint32(8)*((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+uint32(1))) + if saved_states == UintptrFromInt32(0) { + Xfree(tls, regset) + Xfree(tls, parents) + return int32(REG_ESPACE) + } else { + i = uint32(0) + for { + if !(i <= (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + (*(*Ttre_tag_states_t)(unsafe.Pointer(saved_states + uintptr(i)*8))).Ftag = -int32(1) + goto _1 + _1: + ; + i++ + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + for _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_ADDTAGS_SET_SUBMATCH_END): + goto _2 + case int32(_ADDTAGS_RECURSE): + goto _3 + case int32(_ADDTAGS_AFTER_ITERATION): + goto _4 + case int32(_ADDTAGS_AFTER_CAT_LEFT): + goto _5 + case int32(_ADDTAGS_AFTER_CAT_RIGHT): + goto _6 + case int32(_ADDTAGS_AFTER_UNION_LEFT): + goto _7 + case int32(_ADDTAGS_AFTER_UNION_RIGHT): + goto _8 + default: + goto _9 + } + goto _10 + _2: + ; + id = _tre_stack_pop_int(tls, stack) + /* Add end of this submatch to regset. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) >= 0) { + break + } + goto _11 + _11: + ; + i1++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) = id*int32(2) + int32(1) + *(*int32)(unsafe.Pointer(regset + uintptr(i1+int32(1))*4)) = -int32(1) + /* Pop this submatch from the parents stack. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i1)*4)) >= 0) { + break + } + goto _12 + _12: + ; + i1++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i1-int32(1))*4)) = -int32(1) + goto _10 + _3: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + id1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + /* Add start of this submatch to regset. */ + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) >= 0) { + break + } + goto _13 + _13: + ; + i2++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) = id1 * int32(2) + *(*int32)(unsafe.Pointer(regset + uintptr(i2+int32(1))*4)) = -int32(1) + if !(first_pass != 0) { + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + goto _14 + _14: + ; + i2++ + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*12))).Fparents = UintptrFromInt32(0) + if i2 > 0 { + p = Xmalloc(tls, uint32(4)*uint32(i2+Int32FromInt32(1))) + if p == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + goto _10 + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*12))).Fparents = p + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = *(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) + goto _15 + _15: + ; + i2++ + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = -int32(1) + } + } + /* Add end of this submatch to regset after processing this + node. */ + status = _tre_stack_push_int(tls, stack, (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id) + if status != REG_OK { + goto _10 + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_SET_SUBMATCH_END)) + if status != REG_OK { + goto _10 + } + } + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + /* Regset is not empty, so add a tag before the + literal or backref. */ + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i3 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) >= 0) { + break + } + goto _16 + _16: + ; + i3++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = int32(1) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + } else { + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft + right = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright + reserved_tag = -int32(1) + /* After processing right child. */ + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, next_tag+(*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags) + if status != REG_OK { + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags > 0 && (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_tags > 0 { + /* Reserve the next tag to the right child. */ + reserved_tag = next_tag + next_tag++ + } + status = _tre_stack_push_int(tls, stack, reserved_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if first_pass != 0 { + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0)) + if status != REG_OK { + break + } + } else { + status = _tre_stack_push_int(tls, stack, tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0))) + if status != REG_OK { + break + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_ITERATION)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + if int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0)) != 0 { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = int32(_TRE_TAG_MAXIMIZE) + } else { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + } + if minimal_tag >= 0 { + i4 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) >= 0) { + break + } + goto _17 + _17: + ; + i4++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + direction = int32(_TRE_TAG_MINIMIZE) + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft + right1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fright + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + left_tag = next_tag + right_tag = next_tag + int32(1) + } else { + left_tag = tag + right_tag = next_tag + } + /* After processing right child. */ + status = _tre_stack_push_int(tls, stack, right_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, left_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, regset) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i5 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) >= 0) { + break + } + goto _18 + _18: + ; + i5++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + /* The next two tags are reserved for markers. */ + next_tag++ + tag = next_tag + next_tag++ + } + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + /* Push this submatch on the parents stack. */ + i6 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) >= 0) { + break + } + goto _19 + _19: + ; + i6++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + *(*int32)(unsafe.Pointer(parents + uintptr(i6+int32(1))*4)) = -int32(1) + } + goto _10 /* end case: ADDTAGS_RECURSE */ + _4: + ; + minimal = 0 + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg)).Fnum_tags + _tre_stack_pop_int(tls, stack) + minimal_tag = -int32(1) + } else { + minimal = _tre_stack_pop_int(tls, stack) + enter_tag = _tre_stack_pop_int(tls, stack) + if minimal != 0 { + minimal_tag = enter_tag + } + } + if !(first_pass != 0) { + if minimal != 0 { + direction = int32(_TRE_TAG_MINIMIZE) + } else { + direction = int32(_TRE_TAG_MAXIMIZE) + } + } + goto _10 + _5: + ; + new_tag = _tre_stack_pop_int(tls, stack) + next_tag = _tre_stack_pop_int(tls, stack) + if new_tag >= 0 { + tag = new_tag + } + goto _10 + _6: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + } + goto _10 + _7: + ; + /* Lift the bottom of the `regset' array so that when processing + the right operand the items currently in the array are + invisible. The original bottom was saved at ADDTAGS_UNION and + will be restored at ADDTAGS_AFTER_UNION_RIGHT below. */ + _21: + ; + if !(*(*int32)(unsafe.Pointer(regset)) >= 0) { + goto _20 + } + regset += 4 + goto _21 + _20: + ; + goto _10 + _8: + ; + left2 = _tre_stack_pop_voidptr(tls, stack) + right2 = _tre_stack_pop_voidptr(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + added_tags = _tre_stack_pop_int(tls, stack) + if first_pass != 0 { + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + v22 = int32(2) + } else { + v22 = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + added_tags + v22 + } + regset = _tre_stack_pop_voidptr(tls, stack) + tag_left = _tre_stack_pop_int(tls, stack) + tag_right = _tre_stack_pop_int(tls, stack) + /* Add tags after both children, the left child gets a smaller + tag than the right child. This guarantees that we prefer + the left child over the right child. */ + /* XXX - This is not always necessary (if the children have + tags which must be seen for every match of that child). */ + /* XXX - Check if this is the only place where tre_add_tag_right + is used. If so, use tre_add_tag_left (putting the tag before + the child as opposed after the child) and throw away + tre_add_tag_right. */ + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + if !(first_pass != 0) { + status = _tre_add_tag_right(tls, mem, left2, tag_left) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_left)*4)) = int32(_TRE_TAG_MAXIMIZE) + if status == REG_OK { + status = _tre_add_tag_right(tls, mem, right2, tag_right) + } + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_right)*4)) = int32(_TRE_TAG_MAXIMIZE) + } + num_tags += int32(2) + } + direction = int32(_TRE_TAG_MAXIMIZE) + goto _10 + _9: + ; + goto _10 + _10: + /* end switch(symbol) */ + } /* end while(tre_stack_num_objects(stack) > bottom) */ + if !(first_pass != 0) { + _tre_purge_regset(tls, regset, tnfa, tag) + } + if !(first_pass != 0) && minimal_tag >= 0 { + i7 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) >= 0) { + break + } + goto _23 + _23: + ; + i7++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals = num_minimals + Xfree(tls, orig_regset) + Xfree(tls, parents) + Xfree(tls, saved_states) + return status +} + +/* + AST to TNFA compilation routines. +*/ + +type Ttre_copyast_symbol_t = int32 + +const _COPY_RECURSE = 0 +const _COPY_SET_RESULT_PTR = 1 + +/* Flags for tre_copy_ast(). */ + +func _tre_copy_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, flags int32, pos_add uintptr, tag_directions uintptr, copy1 uintptr, max_pos uintptr) (r Treg_errcode_t) { + var bottom, first_tag, max, min, num_copied, pos, v1 int32 + var cat, iter, lit, node, p, result, tmp, tmp1, uni uintptr + var status Treg_errcode_t + var symbol Ttre_copyast_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bottom, cat, first_tag, iter, lit, max, min, node, num_copied, p, pos, result, status, symbol, tmp, tmp1, uni, v1 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + num_copied = 0 + first_tag = int32(1) + result = copy1 + status = _tre_stack_push_voidptr(tls, stack, ast) + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_COPY_SET_RESULT_PTR): + result = _tre_stack_pop_voidptr(tls, stack) + case int32(_COPY_RECURSE): + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + pos = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + min = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min + max = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + /* XXX - e.g. [ab] has only one position but two + nodes, so we are creating holes in the state space + here. Not fatal, just wastes memory. */ + pos += *(*int32)(unsafe.Pointer(pos_add)) + num_copied++ + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(3) && flags&int32(COPY_REMOVE_TAGS) != 0 { + /* Change this tag to empty. */ + min = -int32(1) + v1 = -Int32FromInt32(1) + pos = v1 + max = v1 + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(3) && flags&int32(COPY_MAXIMIZE_FIRST_TAG) != 0 && first_tag != 0 { + /* Maximize the first tag. */ + *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(max)*4)) = int32(_TRE_TAG_MAXIMIZE) + first_tag = 0 + } + } + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_literal(tls, mem, min, max, pos) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + } else { + p = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_literal_t)(unsafe.Pointer(p)).Fclass = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass + (*Ttre_literal_t)(unsafe.Pointer(p)).Fneg_classes = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes + } + if pos > *(*int32)(unsafe.Pointer(max_pos)) { + *(*int32)(unsafe.Pointer(max_pos)) = pos + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_union(tls, mem, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = tmp + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp+4) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_catenation(tls, mem, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp1 = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fleft = UintptrFromInt32(0) + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fright = UintptrFromInt32(0) + result = tmp1 + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp1+4) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_iter(tls, mem, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 12))&0x1>>0))) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + iter = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = iter + default: + break + } + break + } + } + *(*int32)(unsafe.Pointer(pos_add)) += num_copied + return status +} + +type Ttre_expand_ast_symbol_t = int32 + +const _EXPAND_RECURSE = 0 +const _EXPAND_AFTER_ITER = 1 + +// C documentation +// +// /* Expands each iteration node that has a finite nonzero minimum or maximum +// iteration count to a catenated sequence of copies of the node. */ +func _tre_expand_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, position uintptr, tag_directions uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var _status, _status1, status Treg_errcode_t + var bottom, flags, iter_depth, j, pos_add_last, pos_add_save, pos_add_total, v2 int32 + var cat, iter, iter1, lit, node, seq1, tmp, uni uintptr + var symbol Ttre_expand_ast_symbol_t + var _ /* copy at bp+12 */ uintptr + var _ /* copy at bp+16 */ uintptr + var _ /* max_pos at bp+4 */ int32 + var _ /* pos_add at bp+0 */ int32 + var _ /* seq2 at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, bottom, cat, flags, iter, iter1, iter_depth, j, lit, node, pos_add_last, pos_add_save, pos_add_total, seq1, status, symbol, tmp, uni, v2 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + *(*int32)(unsafe.Pointer(bp)) = 0 + pos_add_total = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + iter_depth = 0 + _status = _tre_stack_push_voidptr(tls, stack, ast) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_EXPAND_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int32FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + *(*int32)(unsafe.Pointer(lit + 8)) += *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition > *(*int32)(unsafe.Pointer(bp + 4)) { + *(*int32)(unsafe.Pointer(bp + 4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + } + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_int(tls, stack, *(*int32)(unsafe.Pointer(bp))) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_AFTER_ITER)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + /* If we are going to expand this node at EXPAND_AFTER_ITER + then don't increase the `pos' fields of the nodes now, it + will get done when expanding. */ + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax > int32(1) { + *(*int32)(unsafe.Pointer(bp)) = 0 + } + iter_depth++ + default: + break + } + case int32(_EXPAND_AFTER_ITER): + iter1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*int32)(unsafe.Pointer(bp)) = _tre_stack_pop_int(tls, stack) + pos_add_last = *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax > int32(1) { + seq1 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = UintptrFromInt32(0) + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + /* Create a catenated sequence of copies of the node. */ + j = 0 + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin) { + break + } + if j+int32(1) < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin { + v2 = int32(COPY_REMOVE_TAGS) + } else { + v2 = int32(COPY_MAXIMIZE_FIRST_TAG) + } + /* Remove tags from all but the last copy. */ + flags = v2 + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, flags, bp, tag_directions, bp+12, bp+4) + if status != REG_OK { + return status + } + if seq1 != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 12))) + } else { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 12)) + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _1 + _1: + ; + j++ + } + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax == -int32(1) { + /* No upper limit. */ + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+8, bp+4) + if status != REG_OK { + return status + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_iter(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, -int32(1), 0) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } else { + j = (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax) { + break + } + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+16, bp+4) + if status != REG_OK { + return status + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_catenation(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 8))) + } else { + *(*uintptr)(unsafe.Pointer(bp + 8)) = *(*uintptr)(unsafe.Pointer(bp + 16)) + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + tmp = _tre_ast_new_literal(tls, mem, -int32(1), -int32(1), -int32(1)) + if tmp == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_union(tls, mem, tmp, *(*uintptr)(unsafe.Pointer(bp + 8))) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _3 + _3: + ; + j++ + } + } + *(*int32)(unsafe.Pointer(bp)) = pos_add_save + if seq1 == UintptrFromInt32(0) { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 8))) + } + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Ftype1 + } + iter_depth-- + pos_add_total += *(*int32)(unsafe.Pointer(bp)) - pos_add_last + if iter_depth == 0 { + *(*int32)(unsafe.Pointer(bp)) = pos_add_total + } + default: + break + } + } + *(*int32)(unsafe.Pointer(position)) += pos_add_total + /* `max_pos' should never be larger than `*position' if the above + code works, but just an extra safeguard let's make sure + `*position' is set large enough so enough memory will be + allocated for the transition table. */ + if *(*int32)(unsafe.Pointer(bp + 4)) > *(*int32)(unsafe.Pointer(position)) { + *(*int32)(unsafe.Pointer(position)) = *(*int32)(unsafe.Pointer(bp + 4)) + } + return status +} + +func _tre_set_empty(tls *TLS, mem Ttre_mem_t) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_one(tls *TLS, mem Ttre_mem_t, position int32, code_min int32, code_max int32, class Ttre_ctype_t, neg_classes uintptr, backref int32) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), Uint32FromInt64(32)*Uint32FromInt32(2)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = position + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = code_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = code_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fclass = class + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fneg_classes = neg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fbackref = backref + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*32))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_union(tls *TLS, mem Ttre_mem_t, set1 uintptr, set2 uintptr, tags uintptr, assertions int32) (r uintptr) { + var i, j, num_tags, s1, s2 int32 + var new_set, new_tags uintptr + _, _, _, _, _, _, _ = i, j, new_set, new_tags, num_tags, s1, s2 + num_tags = 0 + for { + if !(tags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer(tags + uintptr(num_tags)*4)) >= 0) { + break + } + goto _1 + _1: + ; + num_tags++ + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition >= 0) { + break + } + goto _2 + _2: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition >= 0) { + break + } + goto _3 + _3: + ; + s2++ + } + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint32(32)*uint32(s1+s2+Int32FromInt32(1))) + if !(new_set != 0) { + return UintptrFromInt32(0) + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fcode_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fassertions | assertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags == UintptrFromInt32(0) && tags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _5 + _5: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, Uint32FromInt64(4)*uint32(i+num_tags+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*32))).Ftags + uintptr(j)*4)) + goto _6 + _6: + ; + j++ + } + i = 0 + for { + if !(i < num_tags) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) + goto _7 + _7: + ; + i++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*32))).Ftags = new_tags + } + goto _4 + _4: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fcode_max + /* XXX - why not | assertions here as well? */ + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fassertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _9 + _9: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32(i+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*32))).Ftags + uintptr(j)*4)) + goto _10 + _10: + ; + j++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Ftags = new_tags + } + goto _8 + _8: + ; + s2++ + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*32))).Fposition = -int32(1) + return new_set +} + +// C documentation +// +// /* Finds the empty path through `node' which is the one that should be +// taken according to POSIX.2 rules, and adds the tags on that path to +// `tags'. `tags' may be NULL. If `num_tags_seen' is not NULL, it is +// set to the number of tags seen on the path. */ +func _tre_match_empty(tls *TLS, stack uintptr, node uintptr, tags uintptr, assertions uintptr, num_tags_seen uintptr) (r Treg_errcode_t) { + var bottom, i int32 + var cat, iter, lit, uni, p2 uintptr + var status Treg_errcode_t + _, _, _, _, _, _, _, _ = bottom, cat, i, iter, lit, status, uni, p2 + bottom = _tre_stack_num_objects(tls, stack) + status = REG_OK + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen)) = 0 + } + status = _tre_stack_push_voidptr(tls, stack, node) + /* Walk through the tree recursively. */ + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + switch (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min { + case -int32(3): + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max >= 0 { + if tags != UintptrFromInt32(0) { + /* Add the tag to `tags'. */ + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) >= 0) { + break + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) == (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max { + break + } + goto _1 + _1: + ; + i++ + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + *(*int32)(unsafe.Pointer(tags + uintptr(i+int32(1))*4)) = -int32(1) + } + } + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen))++ + } + } + case -int32(2): + if assertions != UintptrFromInt32(0) { + p2 = assertions + *(*int32)(unsafe.Pointer(p2)) = *(*int32)(unsafe.Pointer(p2)) | (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max + } + case -int32(1): + default: + break + } + case int32(_UNION): + /* Subexpressions starting earlier take priority over ones + starting later, so we prefer the left subexpression over the + right subexpression. */ + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + } else { + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + } else { + } + } + case int32(_CATENATION): + /* The path must go through both children. */ + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + case int32(_ITERATION): + /* A match with an empty string is preferred over no match at + all, so we go through the argument if possible. */ + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + } + default: + break + } + } + return status +} + +type Ttre_nfl_stack_symbol_t = int32 + +const _NFL_RECURSE = 0 +const _NFL_POST_UNION = 1 +const _NFL_POST_CATENATION = 2 +const _NFL_POST_ITERATION = 3 + +// C documentation +// +// /* Computes and fills in the fields `nullable', `firstpos', and `lastpos' for +// the nodes of the AST `tree'. */ +func _tre_compute_nfl(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, status Treg_errcode_t + var bottom int32 + var cat, iter, lit, node, tags, uni uintptr + var symbol Ttre_nfl_stack_symbol_t + var _ /* assertions at bp+4 */ int32 + var _ /* num_tags at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, bottom, cat, iter, lit, node, status, symbol, tags, uni + bottom = _tre_stack_num_objects(tls, stack) + _status = _tre_stack_push_voidptr(tls, stack, tree) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for _tre_stack_num_objects(tls, stack) > bottom { + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_NFL_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == -int32(4) { + /* Back references: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint32(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint32(0), UintptrFromInt32(0), (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < 0 { + /* Tags, empty strings, params, and zero width assertions: + nullable = true, firstpos = {}, and lastpos = {}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + /* Literal at position i: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max, uint32(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes, -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } + } + case int32(_UNION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status2 = _tre_stack_push_voidptr(tls, stack, node) + if _status2 != REG_OK { + return _status2 + } + _status3 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_UNION)) + if _status3 != REG_OK { + return _status3 + } + _status4 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status4 != REG_OK { + return _status4 + } + _status5 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status5 != REG_OK { + return _status5 + } + _status6 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status6 != REG_OK { + return _status6 + } + _status7 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status7 != REG_OK { + return _status7 + } + case int32(_CATENATION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status8 = _tre_stack_push_voidptr(tls, stack, node) + if _status8 != REG_OK { + return _status8 + } + _status9 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_CATENATION)) + if _status9 != REG_OK { + return _status9 + } + _status10 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status10 != REG_OK { + return _status10 + } + _status11 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status11 != REG_OK { + return _status11 + } + _status12 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status12 != REG_OK { + return _status12 + } + _status13 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status13 != REG_OK { + return _status13 + } + case int32(_ITERATION): + /* Compute the attributes for the subtree, and after that for + this node. */ + _status14 = _tre_stack_push_voidptr(tls, stack, node) + if _status14 != REG_OK { + return _status14 + } + _status15 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_ITERATION)) + if _status15 != REG_OK { + return _status15 + } + _status16 = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg) + if _status16 != REG_OK { + return _status16 + } + _status17 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status17 != REG_OK { + return _status17 + } + break + } + case int32(_NFL_POST_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Ffirstpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Flastpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + case int32(_NFL_POST_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin == 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos + case int32(_NFL_POST_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 && (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0) + /* Compute firstpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 { + /* The left side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint32(4)*uint32(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos + } + /* Compute lastpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0 { + /* The right side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint32(4)*uint32(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos + } + default: + break + } + } + return REG_OK +} + +// C documentation +// +// /* Adds a transition from each position in `p1' to each position in `p2'. */ +func _tre_make_trans(tls *TLS, p1 uintptr, p2 uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var dup, i, j, k, l, prev_p2_pos, v1, v2, v6 int32 + var orig_p2, trans uintptr + _, _, _, _, _, _, _, _, _, _, _ = dup, i, j, k, l, orig_p2, prev_p2_pos, trans, v1, v2, v6 + orig_p2 = p2 + if transitions != UintptrFromInt32(0) { + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + prev_p2_pos = -int32(1) + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + /* Optimization: if this position was already handled, skip it. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition == prev_p2_pos { + p2 += 32 + continue + } + prev_p2_pos = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + /* Set `trans' to point to the next unused transition from + position `p1->position'. */ + trans = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4)))*32 + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != UintptrFromInt32(0) { + trans += 32 + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate == UintptrFromInt32(0) { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans + UintptrFromInt32(1)*32)).Fstate = UintptrFromInt32(0) + } + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_min = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_min) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_max = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_max) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition)*4)))*32 + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass != 0 { + v1 = int32(ASSERT_CHAR_CLASS) + } else { + v1 = 0 + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + v2 = int32(ASSERT_CHAR_CLASS_NEG) + } else { + v2 = 0 + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fassertions | (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fassertions | v1 | v2 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref >= 0 { + *(*int32)(unsafe.Pointer(trans + 24)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref + *(*int32)(unsafe.Pointer(trans + 20)) |= int32(ASSERT_BACKREF) + } else { + *(*Ttre_ctype_t)(unsafe.Pointer(trans + 24)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) != Uint32FromInt32(0)) { + break + } + goto _3 + _3: + ; + i++ + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = Xmalloc(tls, uint32(4)*uint32(i+Int32FromInt32(1))) + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) != Uint32FromInt32(0)) { + break + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*4)) = *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*4)) + goto _4 + _4: + ; + i++ + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*4)) = Uint32FromInt32(0) + } else { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = UintptrFromInt32(0) + } + /* Find out how many tags this transition has. */ + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + i++ + } + } + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + j++ + } + } + /* If we are overwriting a transition, free the old tag array. */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = UintptrFromInt32(0) + /* If there were any tags, allocate an array and fill it. */ + if i+j > 0 { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = Xmalloc(tls, uint32(4)*uint32(i+j+Int32FromInt32(1))) + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0) { + return int32(REG_ESPACE) + } + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) + i++ + } + } + l = i + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + /* Don't add duplicates. */ + dup = 0 + k = 0 + for { + if !(k < i) { + break + } + if *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(k)*4)) == *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) { + dup = int32(1) + break + } + goto _5 + _5: + ; + k++ + } + if !(dup != 0) { + v6 = l + l++ + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(v6)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) + } + j++ + } + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(l)*4)) = -int32(1) + } + p2 += 32 + } + p1 += 32 + } + } else { + /* Compute a maximum limit for the number of transitions leaving + from each state. */ + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + *(*int32)(unsafe.Pointer(counts + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4))++ + p2 += 32 + } + p1 += 32 + } + } + return REG_OK +} + +// C documentation +// +// /* Converts the syntax tree to a TNFA. All the transitions in the TNFA are +// labelled with one character range (there are no transitions on empty +// strings). The TNFA takes O(n^2) space in the worst case, `n' is size of +// the regexp. */ +func _tre_ast_to_tnfa(tls *TLS, node uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var cat, iter, uni uintptr + var errcode Treg_errcode_t + _, _, _, _ = cat, errcode, iter, uni + errcode = REG_OK + /* XXX - recurse using a stack!. */ + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright, transitions, counts, offs) + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + /* Add a transition from each position in cat->left->lastpos + to each position in cat->right->firstpos. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, transitions, counts, offs) + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax == -int32(1) { + /* Add a transition from each last position in the iterated + expression to each first position. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, transitions, counts, offs) + break + } + return errcode +} + +func Xregcomp(tls *TLS, preg uintptr, regex uintptr, cflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v regex=%v cflags=%v, (%v:)", tls, preg, regex, cflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var add, i, j, v1 int32 + var counts, initial, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v2 uintptr + var errcode Treg_errcode_t + var mem Ttre_mem_t + var _ /* parse_ctx at bp+0 */ Ttre_parse_ctx_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = add, counts, errcode, i, initial, j, mem, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v1, v2 + counts = UintptrFromInt32(0) + offs = UintptrFromInt32(0) + add = 0 + tnfa = UintptrFromInt32(0) + tag_directions = UintptrFromInt32(0) + /* Allocate a stack used throughout the compilation process for various + purposes. */ + stack = _tre_stack_new(tls, int32(512), int32(1024000), int32(128)) + if !(stack != 0) { + return int32(REG_ESPACE) + } + /* Allocate a fast memory allocator. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + if !(mem != 0) { + _tre_stack_destroy(tls, stack) + return int32(REG_ESPACE) + } + /* Parse the regexp. */ + Xmemset(tls, bp, 0, uint32(36)) + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmem = mem + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstack = stack + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstart = regex + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fcflags = cflags + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref = -int32(1) + errcode = _tre_parse(tls, bp) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id - int32(1)) + tree = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fn + /* Referring to nonexistent subexpressions is illegal. */ + if (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref > int32((*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub) { + errcode = int32(REG_ESUBREG) + if int32(1) != 0 { + goto error_exit + } + } + /* Allocate the TNFA struct. */ + tnfa = Xcalloc(tls, uint32(1), uint32(68)) + if tnfa == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs = BoolInt32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref >= 0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_approx = 0 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id) + /* Set up tags for submatch addressing. If REG_NOSUB is set and the + regexp does not have back references, this can be skipped. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 || !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Figure out how many tags we will need. */ + errcode = _tre_add_tags(tls, UintptrFromInt32(0), stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 { + tag_directions = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + if tag_directions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions = tag_directions + Xmemset(tls, tag_directions, -int32(1), uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags = Xcalloc(tls, uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)*uint32(2)+uint32(1), uint32(4)) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + submatch_data = Xcalloc(tls, uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id), uint32(12)) + if submatch_data == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data = submatch_data + errcode = _tre_add_tags(tls, mem, stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + } + /* Expand iteration nodes. */ + errcode = _tre_expand_ast(tls, mem, stack, tree, bp+24, tag_directions) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + /* Add a dummy node for the final state. + XXX - For certain patterns this dummy node can be optimized away, + for example "a*" or "ab*". Figure out a simple way to detect + this possibility. */ + tmp_ast_l = tree + v2 = bp + 24 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + tmp_ast_r = _tre_ast_new_literal(tls, mem, 0, 0, v1) + if tmp_ast_r == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + tree = _tre_ast_new_catenation(tls, mem, tmp_ast_l, tmp_ast_r) + if tree == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + errcode = _tre_compute_nfl(tls, mem, stack, tree) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + counts = Xmalloc(tls, uint32(4)*uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if counts == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + offs = Xmalloc(tls, uint32(4)*uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if offs == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _3 + _3: + ; + i++ + } + _tre_ast_to_tnfa(tls, tree, UintptrFromInt32(0), counts, UintptrFromInt32(0)) + add = 0 + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(offs + uintptr(i)*4)) = add + add += *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) + int32(1) + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _4 + _4: + ; + i++ + } + transitions = Xcalloc(tls, uint32(add)+uint32(1), uint32(32)) + if transitions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions = transitions + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + errcode = _tre_ast_to_tnfa(tls, tree, transitions, counts, offs) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars = UintptrFromInt32(0) + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + i = 0 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0 { + i++ + p += 32 + } + initial = Xcalloc(tls, uint32(i)+uint32(1), uint32(32)) + if initial == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial = initial + i = 0 + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + for { + if !((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0) { + break + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition)*4)))*32 + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags = UintptrFromInt32(0) + /* Copy the arrays p->tags, and p->params, they are allocated + from a tre_mem object. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags != 0 { + j = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags + uintptr(j)*4)) >= 0) { + break + } + goto _6 + _6: + ; + j++ + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags = Xmalloc(tls, uint32(4)*uint32(j+Int32FromInt32(1))) + if !((*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags != 0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + _memcpy(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Ftags, (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags, uint32(4)*uint32(j+Int32FromInt32(1))) + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fassertions + i++ + goto _5 + _5: + ; + p += 32 + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*32))).Fstate = UintptrFromInt32(0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*(*Ttre_pos_and_tags_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(tree)).Flastpos))).Fposition)*4)))*32 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags = cflags + X__tre_mem_destroy(tls, mem) + _tre_stack_destroy(tls, stack) + Xfree(tls, counts) + Xfree(tls, offs) + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + return REG_OK + goto error_exit +error_exit: + ; + /* Free everything that was allocated and return the error code. */ + X__tre_mem_destroy(tls, mem) + if stack != UintptrFromInt32(0) { + _tre_stack_destroy(tls, stack) + } + if counts != UintptrFromInt32(0) { + Xfree(tls, counts) + } + if offs != UintptrFromInt32(0) { + Xfree(tls, offs) + } + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + Xregfree(tls, preg) + return errcode +} + +func Xregfree(tls *TLS, preg uintptr) { + if __ccgo_strace { + trc("tls=%v preg=%v, (%v:)", tls, preg, origin(2)) + } + var i uint32 + var tnfa, trans uintptr + _, _, _ = i, tnfa, trans + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + if !(tnfa != 0) { + return + } + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions) { + break + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fstate != 0 { + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Ftags != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Ftags) + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fneg_classes != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*32))).Fneg_classes) + } + } + goto _1 + _1: + ; + i++ + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial != 0 { + trans = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0 { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + goto _2 + _2: + ; + trans += 32 + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data != 0 { + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*12))).Fparents != 0 { + Xfree(tls, (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*12))).Fparents) + } + goto _3 + _3: + ; + i++ + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags) + } + Xfree(tls, tnfa) +} + +/* Error message strings for error codes listed in `regex.h'. This list + needs to be in sync with the codes listed there, naturally. */ + +/* Converted to single string by Rich Felker to remove the need for + * data relocations at runtime, 27 Feb 2006. */ + +var _messages = [286]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'o', ' ', 'm', 'a', 't', 'c', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'r', 'e', 'g', 'e', 'x', 'p', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'o', 'l', 'l', 'a', 't', 'i', 'n', 'g', ' ', 'e', 'l', 'e', 'm', 'e', 'n', 't', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'c', 'l', 'a', 's', 's', ' ', 'n', 'a', 'm', 'e', 0, 'T', 'r', 'a', 'i', 'l', 'i', 'n', 'g', ' ', 'b', 'a', 'c', 'k', 's', 'l', 'a', 's', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'b', 'a', 'c', 'k', ' ', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ']', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ')', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', '}', '\'', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', ' ', 'o', 'f', ' ', '{', '}', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'r', 'a', 'n', 'g', 'e', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'R', 'e', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'd', ' ', 'b', 'y', ' ', 'v', 'a', 'l', 'i', 'd', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xregerror(tls *TLS, e int32, preg uintptr, buf uintptr, size Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v e=%v preg=%v buf=%v size=%v, (%v:)", tls, e, preg, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_messages)) + for { + if !(e != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + e-- + s += uintptr(Xstrlen(tls, s) + uint32(1)) + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + s = X__lctrans_cur(tls, s) + return uint32(int32(1) + Xsnprintf(tls, buf, size, __ccgo_ts+15, VaList(bp+8, s))) +} + +const tre_bt_mem_alloc = 0 +const tre_bt_mem_destroy = 0 +const tre_bt_mem_new = 0 + +/*********************************************************************** + from tre-match-utils.h +***********************************************************************/ + +// C documentation +// +// /* Returns 1 if `t1' wins `t2', 0 otherwise. */ +func _tre_tag_order(tls *TLS, num_tags int32, tag_directions uintptr, t1 uintptr, t2 uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(i < num_tags) { + break + } + if *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(i)*4)) == int32(_TRE_TAG_MINIMIZE) { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return 0 + } + } else { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*4)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*4)) { + return 0 + } + } + goto _1 + _1: + ; + i++ + } + /* assert(0);*/ + return 0 +} + +func _tre_neg_char_classes_match(tls *TLS, classes uintptr, wc Ttre_cint_t, icase int32) (r int32) { + for *(*Ttre_ctype_t)(unsafe.Pointer(classes)) != Uint32FromInt32(0) { + if !(icase != 0) && Xiswctype(tls, wc, *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || icase != 0 && (Xiswctype(tls, Xtowupper(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || Xiswctype(tls, Xtowlower(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0) { + return int32(1) + } else { + classes += 4 + } + } + return 0 /* No match. */ +} + +/*********************************************************************** + from tre-match-parallel.c +***********************************************************************/ + +/* + This algorithm searches for matches basically by reading characters + in the searched string one by one, starting at the beginning. All + matching paths in the TNFA are traversed in parallel. When two or + more paths reach the same state, exactly one is chosen according to + tag ordering rules; if returning submatches is not required it does + not matter which path is chosen. + + The worst case time required for finding the leftmost and longest + match, or determining that there is no match, is always linearly + dependent on the length of the text being searched. + + This algorithm cannot handle TNFAs with back referencing nodes. + See `tre-match-backtrack.c'. +*/ + +type Ttre_tnfa_reach_t = struct { + Fstate uintptr + Ftags uintptr +} + +type Ttre_reach_pos_t = struct { + Fpos Tregoff_t + Ftags uintptr +} + +func _tre_tnfa_run_parallel(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var buf, reach, reach_i, reach_next, reach_next_i, reach_pos, str_byte, tag_i, tmp_buf, tmp_iptr, tmp_tags, trans_i uintptr + var end, i, new_match, num_tags, reg_newline, reg_notbol, reg_noteol, skip, start, v18 int32 + var match_eo, pos, pos_add_next, v10, v7 Tregoff_t + var pbytes, rbytes, tbytes, total_bytes, xbytes Tsize_t + var prev_c Ttre_char_t + var ret Treg_errcode_t + var v1, v2, v3, v4 uint32 + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = buf, end, i, match_eo, new_match, num_tags, pbytes, pos, pos_add_next, prev_c, rbytes, reach, reach_i, reach_next, reach_next_i, reach_pos, reg_newline, reg_notbol, reg_noteol, ret, skip, start, str_byte, tag_i, tbytes, tmp_buf, tmp_iptr, tmp_tags, total_bytes, trans_i, xbytes, v1, v10, v18, v2, v3, v4, v7 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = uint32(0) + *(*Ttre_char_t)(unsafe.Pointer(bp)) = uint32(0) + str_byte = string1 + pos = -int32(1) + pos_add_next = int32(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + match_eo = -int32(1) /* end offset of match (-1 if no match found yet) */ + new_match = 0 + tmp_tags = UintptrFromInt32(0) + if !(match_tags != 0) { + num_tags = 0 + } else { + num_tags = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags + } + /* Allocate memory for temporary data required for matching. This needs to + be done for every matching operation to be thread safe. This allocates + everything in a single large block with calloc(). */ + /* Ensure that tbytes and xbytes*num_states cannot overflow, and that + * they don't contribute more than 1/8 of SIZE_MAX to total_bytes. */ + if uint32(num_tags) > uint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) { + return int32(REG_ESPACE) + } + /* Likewise check rbytes. */ + if uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+int32(1)) > Uint32FromUint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(8)) { + return int32(REG_ESPACE) + } + /* Likewise check pbytes. */ + if uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) > Uint32FromUint32(0xffffffff)/(Uint32FromInt32(8)*Uint32FromInt64(8)) { + return int32(REG_ESPACE) + } + /* Compute the length of the block we need. */ + tbytes = uint32(4) * uint32(num_tags) + rbytes = uint32(8) * uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+Int32FromInt32(1)) + pbytes = uint32(8) * uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) + xbytes = uint32(4) * uint32(num_tags) + total_bytes = (Uint32FromInt64(4)-Uint32FromInt32(1))*Uint32FromInt32(4) + (rbytes+xbytes*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states))*uint32(2) + tbytes + pbytes + /* Allocate the memory. */ + buf = Xcalloc(tls, total_bytes, uint32(1)) + if buf == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + /* Get the various pointers within tmp_buf (properly aligned). */ + tmp_tags = buf + tmp_buf = buf + uintptr(tbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v1 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v1 = uint32(0) + } + tmp_buf += uintptr(v1) + reach_next = tmp_buf + tmp_buf += uintptr(rbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v2 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v2 = uint32(0) + } + tmp_buf += uintptr(v2) + reach = tmp_buf + tmp_buf += uintptr(rbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v3 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v3 = uint32(0) + } + tmp_buf += uintptr(v3) + reach_pos = tmp_buf + tmp_buf += uintptr(pbytes) + if uint32(int32(tmp_buf))%uint32(4) != 0 { + v4 = uint32(4) - uint32(int32(tmp_buf))%uint32(4) + } else { + v4 = uint32(0) + } + tmp_buf += uintptr(v4) + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach + uintptr(i)*8))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next + uintptr(i)*8))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + goto _5 + _5: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr(i)*8))).Fpos = -int32(1) + goto _6 + _6: + ; + i++ + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v7 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v7 + if v7 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos = 0 + reach_next_i = reach_next + for int32(1) != 0 { + /* If no match found yet, add the initial states to `reach_next'. */ + if match_eo < 0 { + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != UintptrFromInt32(0) { + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos < pos { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') && BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') || BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0))) { + trans_i += 32 + continue + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) = -int32(1) + goto _8 + _8: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != 0 { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*4)) = pos + } + tag_i += 4 + } + } + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) + goto _9 + _9: + ; + i++ + } + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags = reach_next_i + 4 + reach_next_i += 8 + } + trans_i += 32 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } else { + if num_tags == 0 || reach_next_i == reach_next { + /* We have found a match. */ + break + } + } + /* Check for end of string. */ + if !(*(*Ttre_char_t)(unsafe.Pointer(bp)) != 0) { + break + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v10 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v10 + if v10 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + /* For each state in `reach', weed out states that don't fulfill the + minimal matching conditions. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals != 0 && new_match != 0 { + new_match = 0 + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + skip = 0 + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) >= 0) { + break + } + end = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) + start = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i+int32(1))*4)) + if end >= num_tags { + skip = int32(1) + break + } else { + if *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(start)*4)) == *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(start)*4)) && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(end)*4)) < *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(end)*4)) { + skip = int32(1) + break + } + } + goto _12 + _12: + ; + i += int32(2) + } + if !(skip != 0) { + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags = tmp_iptr + reach_next_i += 8 + } + goto _11 + _11: + ; + reach_i += 8 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + } + /* For each state in `reach' see if there is a transition leaving with + the current input symbol to a state not yet in `reach_next', and + add the destination states to `reach_next'. */ + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + trans_i = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + /* Does this transition match the input symbol? */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= prev_c && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= prev_c { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') && BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') || BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, prev_c, *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) && !(Xiswctype(tls, Xtowupper(tls, prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, prev_c, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _14 + } + /* Compute the tags after this transition. */ + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(i)*4)) + goto _15 + _15: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*4)) = pos + } + tag_i += 4 + } + } + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos < pos { + /* Found an unvisited node. */ + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = tmp_tags + tmp_tags = tmp_iptr + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags = reach_next_i + 4 + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal && (match_eo == -int32(1) || num_tags > 0 && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags)) <= *(*Tregoff_t)(unsafe.Pointer(match_tags))) { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*4)) + goto _16 + _16: + ; + i++ + } + } + reach_next_i += 8 + } else { + /* Another path has also reached this state. We choose + the winner by examining the tag values for both + paths. */ + if _tre_tag_order(tls, num_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tmp_tags, *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags))) != 0 { + /* The new path wins. */ + tmp_iptr = *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags)) + *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*8))).Ftags)) = tmp_tags + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*4)) + goto _17 + _17: + ; + i++ + } + } + tmp_tags = tmp_iptr + } + } + } + goto _14 + _14: + ; + trans_i += 32 + } + goto _13 + _13: + ; + reach_i += 8 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + if match_eo >= 0 { + v18 = REG_OK + } else { + v18 = int32(REG_NOMATCH) + } + ret = v18 + goto error_exit +error_exit: + ; + Xfree(tls, buf) + return ret +} + +/*********************************************************************** + from tre-match-backtrack.c +***********************************************************************/ + +/* + This matcher is for regexps that use back referencing. Regexp matching + with back referencing is an NP-complete problem on the number of back + references. The easiest way to match them is to use a backtracking + routine which basically goes through all possible paths in the TNFA + and chooses the one which results in the best (leftmost and longest) + match. This can be spectacularly expensive and may run out of stack + space, but there really is no better known generic algorithm. Quoting + Henry Spencer from comp.compilers: + + + POSIX.2 REs require longest match, which is really exciting to + implement since the obsolete ("basic") variant also includes + \. I haven't found a better way of tackling this than doing + a preliminary match using a DFA (or simulation) on a modified RE + that just replicates subREs for \, and then doing a + backtracking match to determine whether the subRE matches were + right. This can be rather slow, but I console myself with the + thought that people who use \ deserve very slow execution. + (Pun unintentional but very appropriate.) + +*/ + +type Ttre_backtrack_item_t = struct { + Fpos Tregoff_t + Fstr_byte uintptr + Fstate uintptr + Fstate_id int32 + Fnext_c int32 + Ftags uintptr +} + +type Ttre_backtrack_t = uintptr + +type Ttre_backtrack_struct = struct { + Fitem Ttre_backtrack_item_t + Fprev uintptr + Fnext uintptr +} + +func _tre_tnfa_run_backtrack(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bt, empty_br_match, i, i1, i2, i3, i4, next_c_start, reg_newline, reg_notbol, reg_noteol, result, ret, v20 int32 + var bt_len, eo, match_eo, pos, pos_add_next, pos_start, so, v11, v12, v3 Tregoff_t + var mem Ttre_mem_t + var next_state, next_tags, pmatch, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v18, v6 uintptr + var prev_c Ttre_char_t + var s, s1, stack Ttre_backtrack_t + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bt, bt_len, empty_br_match, eo, i, i1, i2, i3, i4, match_eo, mem, next_c_start, next_state, next_tags, pmatch, pos, pos_add_next, pos_start, prev_c, reg_newline, reg_notbol, reg_noteol, result, ret, s, s1, so, stack, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v11, v12, v18, v20, v3, v6 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = uint32(0) + *(*Ttre_char_t)(unsafe.Pointer(bp)) = uint32(0) + str_byte = string1 + pos = 0 + pos_add_next = int32(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + pos_start = -int32(1) + /* End offset of best match so far, or -1 if no match found yet. */ + match_eo = -int32(1) + tags = UintptrFromInt32(0) + states_seen = UintptrFromInt32(0) + /* Memory allocator to for allocating the backtracking stack. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + pmatch = UintptrFromInt32(0) + if !(mem != 0) { + return int32(REG_ESPACE) + } + stack = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(stack != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags != 0 { + tags = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !(tags != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches != 0 { + pmatch = Xmalloc(tls, uint32(8)*(*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) + if !(pmatch != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states != 0 { + states_seen = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) + if !(states_seen != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + goto retry +retry: + ; + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i)*4)) = -int32(1) + if match_tags != 0 { + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*4)) = -int32(1) + } + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + *(*int32)(unsafe.Pointer(states_seen + uintptr(i)*4)) = 0 + goto _2 + _2: + ; + i++ + } + state = UintptrFromInt32(0) + pos = pos_start + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v3 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v3 + if v3 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos_start = pos + next_c_start = int32(*(*Ttre_char_t)(unsafe.Pointer(bp))) + str_byte_start = str_byte + /* Handle initial states. */ + next_tags = UintptrFromInt32(0) + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') && BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') || BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0))) { + goto _4 + } + if state == UintptrFromInt32(0) { + /* Start from this state. */ + state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Backtrack to this state. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(s != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s + stack = s + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = int32(*(*Ttre_char_t)(unsafe.Pointer(bp))) + i1 = 0 + for { + if !(i1 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i1)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i1)*4)) + goto _5 + _5: + ; + i1++ + } + tmp = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tmp != 0 { + for *(*int32)(unsafe.Pointer(tmp)) >= 0 { + v6 = tmp + tmp += 4 + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(v6)))*4)) = pos + } + } + } + goto _4 + _4: + ; + trans_i += 32 + } + if next_tags != 0 { + for { + if !(*(*int32)(unsafe.Pointer(next_tags)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(next_tags)))*4)) = pos + goto _7 + _7: + ; + next_tags += 4 + } + } + if state == UintptrFromInt32(0) { + goto backtrack + } +_9: + ; + if !(int32(1) != 0) { + goto _8 + } + if state == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + if match_eo < pos || match_eo == pos && match_tags != 0 && _tre_tag_order(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tags, match_tags) != 0 { + /* This match wins the previous match. */ + match_eo = pos + if match_tags != 0 { + i2 = 0 + for { + if !(i2 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i2)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i2)*4)) + goto _10 + _10: + ; + i2++ + } + } + } + /* Our TNFAs never have transitions leaving from the final state, + so we jump right to backtracking. */ + goto backtrack + } + /* Go to the next character in the input string. */ + empty_br_match = 0 + trans_i = state + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0 && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_BACKREF) != 0 { + bt = *(*int32)(unsafe.Pointer(trans_i + 24)) + /* Get the substring we need to match against. Remember to + turn off REG_NOSUB temporarily. */ + _tre_fill_pmatch(tls, uint32(bt+int32(1)), pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & ^Int32FromInt32(REG_NOSUB), tnfa, tags, pos) + so = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*8))).Frm_so + eo = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*8))).Frm_eo + bt_len = eo - so + result = Xstrncmp(tls, string1+uintptr(so), str_byte-uintptr(1), uint32(bt_len)) + if result == 0 { + /* Back reference matched. Check for infinite loop. */ + if bt_len == 0 { + empty_br_match = int32(1) + } + if empty_br_match != 0 && *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) != 0 { + goto backtrack + } + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) = empty_br_match + /* Advance in input string and resync `prev_c', `next_c' + and pos. */ + str_byte += uintptr(bt_len - int32(1)) + pos += bt_len - int32(1) + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v11 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v11 + if v11 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } else { + goto backtrack + } + } else { + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') { + goto backtrack + } + /* Read the next character. */ + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v12 = Xmbtowc(tls, bp, str_byte, uint32(MB_LEN_MAX)) + pos_add_next = v12 + if v12 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } + next_state = UintptrFromInt32(0) + trans_i = state + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= prev_c && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= prev_c { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != uint32('\000') && BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') || BoolInt32(prev_c == uint32('_') || Xiswalnum(tls, prev_c) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('_') || Xiswalnum(tls, *(*Ttre_char_t)(unsafe.Pointer(bp))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, prev_c, *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) && !(Xiswctype(tls, Xtowupper(tls, prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 24))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, prev_c, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _13 + } + if next_state == UintptrFromInt32(0) { + /* First matching transition. */ + next_state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Second matching transition. We may need to backtrack here + to take this transition instead of the first one, so we + push this transition in the backtracking stack so we can + jump back here if needed. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s1 = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(32)) + if !(s1 != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s1 + stack = s1 + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = int32(*(*Ttre_char_t)(unsafe.Pointer(bp))) + i3 = 0 + for { + if !(i3 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i3)*4)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i3)*4)) + goto _14 + _14: + ; + i3++ + } + tmp1 = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + for { + if !(tmp1 != 0 && *(*int32)(unsafe.Pointer(tmp1)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(tmp1)))*4)) = pos + goto _15 + _15: + ; + tmp1 += 4 + } + } + } + goto _13 + _13: + ; + trans_i += 32 + } + if !(next_state != UintptrFromInt32(0)) { + goto _16 + } + /* Matching transitions were found. Take the first one. */ + state = next_state + /* Update the tag values. */ + if next_tags != 0 { + for *(*int32)(unsafe.Pointer(next_tags)) >= 0 { + v18 = next_tags + next_tags += 4 + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(v18)))*4)) = pos + } + } + goto _17 +_16: + ; + goto backtrack +backtrack: + ; + /* A matching transition was not found. Try to backtrack. */ + if (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev != 0 { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate)).Fassertions&int32(ASSERT_BACKREF) != 0 { + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id)*4)) = 0 + } + pos = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos + str_byte = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte + state = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate + *(*Ttre_char_t)(unsafe.Pointer(bp)) = uint32((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c) + i4 = 0 + for { + if !(i4 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i4)*4)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i4)*4)) + goto _19 + _19: + ; + i4++ + } + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev + } else { + if match_eo < 0 { + /* Try starting from a later position in the input string. */ + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == uint32('\000') { + goto _8 + } + *(*Ttre_char_t)(unsafe.Pointer(bp)) = uint32(next_c_start) + str_byte = str_byte_start + goto retry + } else { + goto _8 + } + } +_17: + ; + goto _9 +_8: + ; + if match_eo >= 0 { + v20 = REG_OK + } else { + v20 = int32(REG_NOMATCH) + } + ret = v20 + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + goto error_exit +error_exit: + ; + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return ret +} + +/*********************************************************************** + from regexec.c +***********************************************************************/ + +// C documentation +// +// /* Fills the POSIX.2 regmatch_t array according to the TNFA tag and match +// endpoint values. */ +func _tre_fill_pmatch(tls *TLS, nmatch Tsize_t, pmatch uintptr, cflags int32, tnfa uintptr, tags uintptr, match_eo Tregoff_t) { + var i, j uint32 + var parents, submatch_data uintptr + var v1, v3 Tregoff_t + _, _, _, _, _, _ = i, j, parents, submatch_data, v1, v3 + i = uint32(0) + if match_eo >= 0 && !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Construct submatch offsets from the tags. */ + submatch_data = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && i < nmatch { + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fso_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fso_tag)*4)) + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Feo_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Feo_tag)*4)) + } + /* If either of the endpoints were not used, this submatch + was not part of the match. */ + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so == -int32(1) || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo == -int32(1) { + v1 = -Int32FromInt32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = v1 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = v1 + } + i++ + } + /* Reset all submatches that are not within all of their parent + submatches. */ + i = uint32(0) + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && i < nmatch { + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo == -int32(1) { + } + parents = (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*12))).Fparents + if parents != UintptrFromInt32(0) { + j = uint32(0) + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)) >= 0) { + break + } + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so < (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*8))).Frm_so || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo > (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*8))).Frm_eo { + v3 = -Int32FromInt32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = v3 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = v3 + } + goto _2 + _2: + ; + j++ + } + } + i++ + } + } + for i < nmatch { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_so = -int32(1) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*8))).Frm_eo = -int32(1) + i++ + } +} + +/* + Wrapper functions for POSIX compatible regexp matching. +*/ + +func Xregexec(tls *TLS, preg uintptr, string1 uintptr, nmatch Tsize_t, pmatch uintptr, eflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v string1=%v nmatch=%v pmatch=%v eflags=%v, (%v:)", tls, preg, string1, nmatch, pmatch, eflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var status Treg_errcode_t + var tags, tnfa uintptr + var _ /* eo at bp+0 */ Tregoff_t + _, _, _ = status, tags, tnfa + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + tags = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_NOSUB) != 0 { + nmatch = uint32(0) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 && nmatch > uint32(0) { + tags = Xmalloc(tls, uint32(4)*uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if tags == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } + /* Dispatch to the appropriate matcher. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 { + /* The regex has back references, use the backtracking matcher. */ + status = _tre_tnfa_run_backtrack(tls, tnfa, string1, tags, eflags, bp) + } else { + /* Exact matching, no back references, use the parallel matcher. */ + status = _tre_tnfa_run_parallel(tls, tnfa, string1, tags, eflags, bp) + } + if status == REG_OK { + /* A match was found, so fill the submatch registers. */ + _tre_fill_pmatch(tls, nmatch, pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags, tnfa, tags, *(*Tregoff_t)(unsafe.Pointer(bp))) + } + if tags != 0 { + Xfree(tls, tags) + } + return status +} + +/* + This memory allocator is for allocating small memory blocks efficiently + in terms of memory overhead and execution speed. The allocated blocks + cannot be freed individually, only all at once. There can be multiple + allocators, though. +*/ + +// C documentation +// +// /* Returns a new memory allocator or NULL if out of memory. */ +func X__tre_mem_new_impl(tls *TLS, provided int32, provided_block uintptr) (r Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v provided=%v provided_block=%v, (%v:)", tls, provided, provided_block, origin(2)) + defer func() { trc("-> %v", r) }() + } + var mem Ttre_mem_t + _ = mem + if provided != 0 { + mem = provided_block + Xmemset(tls, mem, 0, uint32(24)) + } else { + mem = Xcalloc(tls, uint32(1), uint32(24)) + } + if mem == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + return mem +} + +// C documentation +// +// /* Frees the memory allocator and all memory allocated with it. */ +func X__tre_mem_destroy(tls *TLS, mem Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v mem=%v, (%v:)", tls, mem, origin(2)) + } + var l, tmp uintptr + _, _ = l, tmp + l = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks + for l != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_list_t)(unsafe.Pointer(l)).Fdata) + tmp = (*Ttre_list_t)(unsafe.Pointer(l)).Fnext + Xfree(tls, l) + l = tmp + } + Xfree(tls, mem) +} + +// C documentation +// +// /* Allocates a block of `size' bytes from `mem'. Returns a pointer to the +// allocated block or NULL if an underlying malloc() failed. */ +func X__tre_mem_alloc_impl(tls *TLS, mem Ttre_mem_t, provided int32, provided_block uintptr, zero int32, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mem=%v provided=%v provided_block=%v zero=%v size=%v, (%v:)", tls, mem, provided, provided_block, zero, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var block_size int32 + var l, ptr uintptr + var v1 uint32 + _, _, _, _ = block_size, l, ptr, v1 + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed != 0 { + return UintptrFromInt32(0) + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn < size { + if provided != 0 { + if provided_block == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = provided_block + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint32(TRE_MEM_BLOCK_SIZE) + } else { + if size*uint32(8) > uint32(TRE_MEM_BLOCK_SIZE) { + block_size = int32(size * uint32(8)) + } else { + block_size = int32(TRE_MEM_BLOCK_SIZE) + } + l = Xmalloc(tls, uint32(8)) + if l == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fdata = Xmalloc(tls, uint32(block_size)) + if (*Ttre_list_t)(unsafe.Pointer(l)).Fdata == UintptrFromInt32(0) { + Xfree(tls, l) + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fnext = UintptrFromInt32(0) + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent != UintptrFromInt32(0) { + (*Ttre_list_t)(unsafe.Pointer((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent)).Fnext = l + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks = l + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent = l + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = (*Ttre_list_t)(unsafe.Pointer(l)).Fdata + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint32(block_size) + } + } + /* Make sure the next pointer will be aligned. */ + if (uint32(int32((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint32(4) != 0 { + v1 = uint32(4) - (uint32(int32((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint32(4) + } else { + v1 = uint32(0) + } + size = size + v1 + /* Allocate from current block. */ + ptr = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr + *(*uintptr)(unsafe.Pointer(mem + 8)) += uintptr(size) + *(*Tsize_t)(unsafe.Pointer(mem + 12)) -= size + /* Set to zero if needed. */ + if zero != 0 { + Xmemset(tls, ptr, 0, size) + } + return ptr +} + +const MAXSIZE = 1 +const MINSIZE = 8 + +type TACTION = int32 + +const _FIND = 0 +const _ENTER = 1 + +type TVISIT = int32 + +const _preorder = 0 +const _postorder = 1 +const _endorder = 2 +const _leaf = 3 + +type TENTRY = struct { + Fkey uintptr + Fdata uintptr +} + +type Tentry = TENTRY + +type Thsearch_data = struct { + F__tab uintptr + F__unused1 uint32 + F__unused2 uint32 +} + +type Tqelem = struct { + Fq_forw uintptr + Fq_back uintptr + Fq_data [1]uint8 +} + +/* +open addressing hash table with 2^n table size +quadratic probing is used in case of hash collision +tab indices and hash are size_t +after resize fails with ENOMEM the state of tab is still usable + +with the posix api items cannot be iterated and length cannot be queried +*/ + +type t__tab = struct { + Fentries uintptr + Fmask Tsize_t + Fused Tsize_t +} + +var _htab Thsearch_data + +func _keyhash(tls *TLS, k uintptr) (r Tsize_t) { + var h Tsize_t + var p, v1 uintptr + _, _, _ = h, p, v1 + p = k + h = uint32(0) + for *(*uint8)(unsafe.Pointer(p)) != 0 { + v1 = p + p++ + h = uint32(31)*h + uint32(*(*uint8)(unsafe.Pointer(v1))) + } + return h +} + +func _resize(tls *TLS, nel Tsize_t, htab uintptr) (r int32) { + var e, newe, oldtab uintptr + var i, j, newsize, oldsize, v4 Tsize_t + _, _, _, _, _, _, _, _ = e, i, j, newe, newsize, oldsize, oldtab, v4 + oldsize = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask + uint32(1) + oldtab = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + if nel > uint32(-Int32FromInt32(1))/Uint32FromInt32(2)+Uint32FromInt32(1) { + nel = uint32(-Int32FromInt32(1))/Uint32FromInt32(2) + Uint32FromInt32(1) + } + newsize = uint32(MINSIZE) + for { + if !(newsize < nel) { + break + } + goto _1 + _1: + ; + newsize *= uint32(2) + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = Xcalloc(tls, newsize, uint32(8)) + if !((*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = oldtab + return 0 + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask = newsize - uint32(1) + if !(oldtab != 0) { + return int32(1) + } + e = oldtab + for { + if !(e < oldtab+uintptr(oldsize)*8) { + break + } + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + i = _keyhash(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey) + j = Uint32FromInt32(1) + for { + newe = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*8 + if !((*TENTRY)(unsafe.Pointer(newe)).Fkey != 0) { + break + } + goto _3 + _3: + ; + v4 = j + j++ + i += v4 + } + *(*TENTRY)(unsafe.Pointer(newe)) = *(*TENTRY)(unsafe.Pointer(e)) + } + goto _2 + _2: + ; + e += 8 + } + Xfree(tls, oldtab) + return int32(1) +} + +func Xhcreate(tls *TLS, nel Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v nel=%v, (%v:)", tls, nel, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___hcreate_r(tls, nel, uintptr(unsafe.Pointer(&_htab))) +} + +func Xhdestroy(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___hdestroy_r(tls, uintptr(unsafe.Pointer(&_htab))) +} + +func _lookup(tls *TLS, key uintptr, hash Tsize_t, htab uintptr) (r uintptr) { + var e uintptr + var i, j, v2 Tsize_t + _, _, _, _ = e, i, j, v2 + i = hash + j = Uint32FromInt32(1) + for { + e = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*8 + if !((*TENTRY)(unsafe.Pointer(e)).Fkey != 0) || Xstrcmp(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey, key) == 0 { + break + } + goto _1 + _1: + ; + v2 = j + j++ + i += v2 + } + return e +} + +func Xhsearch(tls *TLS, item TENTRY, action TACTION) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v action=%v, (%v:)", tls, item, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* e at bp+0 */ uintptr + ___hsearch_r(tls, item, action, bp, uintptr(unsafe.Pointer(&_htab))) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func ___hcreate_r(tls *TLS, nel Tsize_t, htab uintptr) (r1 int32) { + var r int32 + _ = r + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = Xcalloc(tls, uint32(1), uint32(12)) + if !((*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0) { + return 0 + } + r = _resize(tls, nel, htab) + if r == 0 { + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) + } + return r +} + +func ___hdestroy_r(tls *TLS, htab uintptr) { + if (*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0 { + Xfree(tls, (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries) + } + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) +} + +func ___hsearch_r(tls *TLS, item TENTRY, action TACTION, retval uintptr, htab uintptr) (r int32) { + var e, v2 uintptr + var hash, v1 Tsize_t + _, _, _, _ = e, hash, v1, v2 + hash = _keyhash(tls, item.Fkey) + e = _lookup(tls, item.Fkey, hash, htab) + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) + } + if action == int32(_FIND) { + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + *(*TENTRY)(unsafe.Pointer(e)) = item + v2 = (*Thsearch_data)(unsafe.Pointer(htab)).F__tab + 8 + *(*Tsize_t)(unsafe.Pointer(v2))++ + v1 = *(*Tsize_t)(unsafe.Pointer(v2)) + if v1 > (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask-(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask/uint32(4) { + if !(_resize(tls, uint32(2)*(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused, htab) != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused-- + (*TENTRY)(unsafe.Pointer(e)).Fkey = uintptr(0) + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + e = _lookup(tls, item.Fkey, hash, htab) + } + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) +} + +type Tnode = struct { + Fnext uintptr + Fprev uintptr +} + +func Xinsque(tls *TLS, element uintptr, pred uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v pred=%v, (%v:)", tls, element, pred, origin(2)) + } + var e, p, v1 uintptr + _, _, _ = e, p, v1 + e = element + p = pred + if !(p != 0) { + v1 = UintptrFromInt32(0) + (*Tnode)(unsafe.Pointer(e)).Fprev = v1 + (*Tnode)(unsafe.Pointer(e)).Fnext = v1 + return + } + (*Tnode)(unsafe.Pointer(e)).Fnext = (*Tnode)(unsafe.Pointer(p)).Fnext + (*Tnode)(unsafe.Pointer(e)).Fprev = p + (*Tnode)(unsafe.Pointer(p)).Fnext = e + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = e + } +} + +func Xremque(tls *TLS, element uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v, (%v:)", tls, element, origin(2)) + } + var e uintptr + _ = e + e = element + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = (*Tnode)(unsafe.Pointer(e)).Fprev + } + if (*Tnode)(unsafe.Pointer(e)).Fprev != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fprev)).Fnext = (*Tnode)(unsafe.Pointer(e)).Fnext + } +} + +func Xlsearch(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint32(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + *(*Tsize_t)(unsafe.Pointer(nelp)) = n + uint32(1) + return _memcpy(tls, p+uintptr(n)*uintptr(v1), key, width) +} + +func Xlfind(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint32(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + return uintptr(0) +} + +const MAXH = 0 + +type Tnode1 = struct { + Fkey uintptr + Fa [2]uintptr + Fh int32 +} + +func Xtdelete(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a [49]uintptr + var c, i, v1, v2, v4, v5, v6, v7, v8 int32 + var child, deleted, n, parent uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, c, child, deleted, i, n, parent, v1, v2, v4, v5, v6, v7, v8 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + /* *a[0] is an arbitrary non-null pointer that is returned when + the root node is deleted. */ + v1 = i + i++ + a[v1] = rootp + v2 = i + i++ + a[v2] = rootp + for { + if !(n != 0) { + return uintptr(0) + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + v4 = i + i++ + a[v4] = n + 4 + BoolUintptr(c > 0)*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _3 + _3: + } + parent = *(*uintptr)(unsafe.Pointer(a[i-int32(2)])) + if *(*uintptr)(unsafe.Pointer(n + 4)) != 0 { + /* free the preceding node instead of the deleted one. */ + deleted = n + v5 = i + i++ + a[v5] = n + 4 + n = *(*uintptr)(unsafe.Pointer(n + 4)) + for *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) != 0 { + v6 = i + i++ + a[v6] = n + 4 + 1*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) + } + (*Tnode1)(unsafe.Pointer(deleted)).Fkey = (*Tnode1)(unsafe.Pointer(n)).Fkey + child = *(*uintptr)(unsafe.Pointer(n + 4)) + } else { + child = *(*uintptr)(unsafe.Pointer(n + 4 + 1*4)) + } + /* freed node has at most one child, move it up and rebalance. */ + Xfree(tls, n) + i-- + v7 = i + *(*uintptr)(unsafe.Pointer(a[v7])) = child + for { + i-- + v8 = i + if !(v8 != 0 && X__tsearch_balance(tls, a[i]) != 0) { + break + } + } + return parent +} + +func Xtdestroy(tls *TLS, root uintptr, freekey uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v freekey=%v, (%v:)", tls, root, freekey, origin(2)) + } + var r uintptr + _ = r + r = root + if r == uintptr(0) { + return + } + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 4)), freekey) + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)), freekey) + if freekey != 0 { + (*(*func(*TLS, uintptr))(unsafe.Pointer(&struct{ uintptr }{freekey})))(tls, (*Tnode1)(unsafe.Pointer(r)).Fkey) + } + Xfree(tls, r) +} + +func Xtfind(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c int32 + var n uintptr + _, _ = c, n + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _1 + _1: + } + return n +} + +func _height(tls *TLS, n uintptr) (r int32) { + var v1 int32 + _ = v1 + if n != 0 { + v1 = (*Tnode1)(unsafe.Pointer(n)).Fh + } else { + v1 = 0 + } + return v1 +} + +func _rot(tls *TLS, p uintptr, x uintptr, dir int32) (r int32) { + var hx, hz int32 + var y, z uintptr + _, _, _, _ = hx, hz, y, z + y = *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) + z = *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) + hx = (*Tnode1)(unsafe.Pointer(x)).Fh + hz = _height(tls, z) + if hz > _height(tls, *(*uintptr)(unsafe.Pointer(y + 4 + uintptr(dir)*4))) { + /* + * x + * / \ dir z + * A y / * / \ --> x y + * z D /| | * / \ A B C D + * B C + */ + *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) = *(*uintptr)(unsafe.Pointer(z + 4 + BoolUintptr(!(dir != 0))*4)) + *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) = *(*uintptr)(unsafe.Pointer(z + 4 + uintptr(dir)*4)) + *(*uintptr)(unsafe.Pointer(z + 4 + BoolUintptr(!(dir != 0))*4)) = x + *(*uintptr)(unsafe.Pointer(z + 4 + uintptr(dir)*4)) = y + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + (*Tnode1)(unsafe.Pointer(z)).Fh = hz + int32(1) + } else { + /* + * x y + * / \ / * A y --> x D + * / \ / * z D A z + */ + *(*uintptr)(unsafe.Pointer(x + 4 + uintptr(dir)*4)) = z + *(*uintptr)(unsafe.Pointer(y + 4 + BoolUintptr(!(dir != 0))*4)) = x + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + int32(1) + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + int32(2) + z = y + } + *(*uintptr)(unsafe.Pointer(p)) = z + return (*Tnode1)(unsafe.Pointer(z)).Fh - hx +} + +// C documentation +// +// /* balance *p, return 0 if height is unchanged. */ +func X__tsearch_balance(tls *TLS, p uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h0, h1, old, v1 int32 + var n uintptr + _, _, _, _, _ = h0, h1, n, old, v1 + n = *(*uintptr)(unsafe.Pointer(p)) + h0 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 4))) + h1 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 4 + 1*4))) + if uint32(h0-h1)+uint32(1) < uint32(3) { + old = (*Tnode1)(unsafe.Pointer(n)).Fh + if h0 < h1 { + v1 = h1 + int32(1) + } else { + v1 = h0 + int32(1) + } + (*Tnode1)(unsafe.Pointer(n)).Fh = v1 + return (*Tnode1)(unsafe.Pointer(n)).Fh - old + } + return _rot(tls, p, n, BoolInt32(h0 < h1)) +} + +func Xtsearch(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a [48]uintptr + var c, i, v1, v3, v5, v6 int32 + var n, r, v4 uintptr + var v7 bool + _, _, _, _, _, _, _, _, _, _, _ = a, c, i, n, r, v1, v3, v4, v5, v6, v7 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + v1 = i + i++ + a[v1] = rootp + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + return n + } + v3 = i + i++ + a[v3] = n + 4 + BoolUintptr(c > 0)*4 + n = *(*uintptr)(unsafe.Pointer(n + 4 + BoolUintptr(c > 0)*4)) + goto _2 + _2: + } + r = Xmalloc(tls, uint32(16)) + if !(r != 0) { + return uintptr(0) + } + (*Tnode1)(unsafe.Pointer(r)).Fkey = key + v4 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)) = v4 + *(*uintptr)(unsafe.Pointer(r + 4)) = v4 + (*Tnode1)(unsafe.Pointer(r)).Fh = int32(1) + /* insert new node, rebalance ancestors. */ + i-- + v5 = i + *(*uintptr)(unsafe.Pointer(a[v5])) = r + for { + if v7 = i != 0; v7 { + i-- + v6 = i + } + if !(v7 && X__tsearch_balance(tls, a[v6]) != 0) { + break + } + } + return r +} + +func _walk(tls *TLS, r uintptr, action uintptr, d int32) { + if !(r != 0) { + return + } + if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) + } else { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 4)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 4 + 1*4)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) + } +} + +func Xtwalk(tls *TLS, root uintptr, action uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v action=%v, (%v:)", tls, root, action, origin(2)) + } + _walk(tls, root, action, 0) +} + +func Xpoll(tls *TLS, fds uintptr, n Tnfds_t, timeout int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v timeout=%v, (%v:)", tls, fds, n, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_poll), int32(fds), int32(n), timeout, 0, 0, 0))) +} + +type t__ucontext3 = Tucontext_t5 + +func Xppoll(tls *TLS, fds uintptr, n Tnfds_t, to uintptr, mask uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v to=%v mask=%v, (%v:)", tls, fds, n, to, mask, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v5 uintptr + var v4 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if to != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if to != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if to != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_ppoll_time64), int32(fds), int32(n), int32(v3), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if to != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + v5 = bp + 16 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ppoll), int32(fds), int32(n), int32(v5), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0))) +} + +type t__ucontext4 = Tucontext_t4 + +func Xpselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts uintptr, mask uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts, mask, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v5 uintptr + var v4 uint64 + var _ /* data at bp+24 */ [2]Tsyscall_arg_t + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 24)) = [2]Tsyscall_arg_t{ + 0: int32(uint32(mask)), + 1: int32(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_pselect6_time64), n, int32(rfds), int32(wfds), int32(efds), int32(v3), int32(bp+24))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if ts != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + v5 = bp + 16 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pselect6), n, int32(rfds), int32(wfds), int32(efds), int32(v5), int32(bp+24)))) +} + +type Tucontext_t6 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +func Xselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv=%v, (%v:)", tls, n, rfds, wfds, efds, tv, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var max_time, s Ttime_t + var ns, r int32 + var us Tsuseconds_t + var v1, v2 int64 + var v3, v5 uintptr + var v4 uint64 + _, _, _, _, _, _, _, _, _, _ = max_time, ns, r, s, us, v1, v2, v3, v4, v5 + if tv != 0 { + v1 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if tv != 0 { + v2 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + } else { + v2 = 0 + } + us = v2 + max_time = int64(Uint64FromUint64(1)<<(Uint32FromInt32(8)*Uint32FromInt64(8)-Uint32FromInt32(1)) - Uint64FromInt32(1)) + if s < 0 || us < 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if us/int64(1000000) > max_time-s { + s = max_time + us = int64(999999) + ns = int32(999999999) + } else { + s += us / int64(1000000) + us %= int64(1000000) + ns = int32(us * int64(1000)) + } + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if tv != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 1: int32(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + r = int32(___syscall_cp(tls, int32(SYS_pselect6_time64), n, int32(rfds), int32(wfds), int32(efds), int32(v3), int32(bp+16))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v4 = uint64(s) + } else { + v4 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + s = int64(int32(v4)) + if tv != 0 { + *(*[2]int32)(unsafe.Pointer(bp + 24)) = [2]int32{ + 0: int32(s), + 1: int32(us), + } + v5 = bp + 24 + } else { + v5 = uintptr(0) + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS__newselect), n, int32(rfds), int32(wfds), int32(efds), int32(v5), 0))) +} + +var _all_mask = [2]uint32{ + 0: -Uint32FromUint32(1), + 1: -Uint32FromUint32(1), +} + +var _app_mask = [2]uint32{ + 0: uint32(0x7fffffff), + 1: uint32(0xfffffffc), +} + +func X__block_all_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_BLOCK)), int32(uintptr(unsafe.Pointer(&_all_mask))), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__block_app_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_BLOCK)), int32(uintptr(unsafe.Pointer(&_app_mask))), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__restore_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_SETMASK)), int32(set), int32(Int32FromInt32(0)), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func Xgetitimer(tls *TLS, which int32, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old=%v, (%v:)", tls, which, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* old32 at bp+0 */ [4]int32 + _ = r + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_getitimer), which, int32(bp))) + if !(r != 0) { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)]) + } + return X__syscall_ret(tls, uint32(r)) + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getitimer), which, int32(old)))) +} + +func Xkill(tls *TLS, pid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v, (%v:)", tls, pid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_kill), pid, sig))) +} + +func Xkillpg(tls *TLS, pgid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pgid=%v sig=%v, (%v:)", tls, pgid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + if pgid < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xkill(tls, -pgid, sig) +} + +func Xpsiginfo(tls *TLS, si uintptr, msg uintptr) { + if __ccgo_strace { + trc("tls=%v si=%v msg=%v, (%v:)", tls, si, msg, origin(2)) + } + Xpsignal(tls, (*Tsiginfo_t)(unsafe.Pointer(si)).Fsi_signo, msg) +} + +func Xpsignal(tls *TLS, sig int32, msg uintptr) { + if __ccgo_strace { + trc("tls=%v sig=%v msg=%v, (%v:)", tls, sig, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var __need_unlock, old_errno, old_mode, v1 int32 + var f, old_locale, s, v2, v3 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, f, old_errno, old_locale, old_mode, s, v1, v2, v3 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + s = Xstrsignal(tls, sig) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since psignal is not + * permitted to change them. Save errno and restore it if there is no + * error since fprintf might change it even on success but psignal is + * not permitted to do so. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if msg != 0 { + v2 = msg + } else { + v2 = __ccgo_ts + } + if msg != 0 { + v3 = __ccgo_ts + 289 + } else { + v3 = __ccgo_ts + } + if Xfprintf(tls, f, __ccgo_ts+987, VaList(bp+8, v2, v3, s)) >= 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + } + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xraise(tls *TLS, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v, (%v:)", tls, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* set at bp+0 */ Tsigset_t + _ = ret + X__block_app_sigs(tls, bp) + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_tkill), (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid, sig))) + X__restore_sigs(tls, bp) + return ret +} + +/* These functions will not work, but suffice for targets where the + * kernel sigaction structure does not actually use sa_restorer. */ +func X__restore(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func X__restore_rt(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetitimer(tls *TLS, which int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new1=%v old=%v, (%v:)", tls, which, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var is, vs Ttime_t + var ius, r, vus int32 + var _ /* old32 at bp+16 */ [4]int32 + _, _, _, _, _ = is, ius, r, vs, vus + if uint32(8) > uint32(4) { + is = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ius = int32((*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_usec) + vus = int32((*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_usec) + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp)) = [4]int32{ + 0: int32(is), + 1: ius, + 2: int32(vs), + 3: vus, + } + r = int32(X__syscall3(tls, int32(SYS_setitimer), which, int32(bp), int32(bp+16))) + if !(r != 0) && old != 0 { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[0]) + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(1)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(2)]) + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = int64((*(*[4]int32)(unsafe.Pointer(bp + 16)))[int32(3)]) + } + return X__syscall_ret(tls, uint32(r)) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_setitimer), which, int32(new1), int32(old)))) +} + +type Tk_sigaction = struct { + Fhandler uintptr + Fflags uint32 + Frestorer uintptr + Fmask [2]uint32 +} + +var _unmask_done int32 +var _handler_set [2]uint32 + +func X__get_handler_set(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + _memcpy(tls, set, uintptr(unsafe.Pointer(&_handler_set)), uint32(8)) +} + +func X__libc_sigaction(tls *TLS, sig int32, sa uintptr, old1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old1=%v, (%v:)", tls, sig, sa, old1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var old, r, v2 int32 + var v1, v10, v11, v12, v3, v5, v6, v8 uintptr + var _ /* ksa at bp+16 */ Tk_sigaction + var _ /* ksa_old at bp+36 */ Tk_sigaction + var _ /* u at bp+8 */ struct { + F__ccgo_align [0]uint32 + Fr [0][2]Tuint32_t + Fv Tuint64_t + } + _, _, _, _, _, _, _, _, _, _, _ = old, r, v1, v10, v11, v12, v2, v3, v5, v6, v8 + if sa != 0 { + if uint32(*(*uintptr)(unsafe.Pointer(sa))) > uint32(1) { + v1 = uintptr(unsafe.Pointer(&_handler_set)) + uintptr(uint32(sig-Int32FromInt32(1))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + v2 = int32(uint32(1) << (uint32(sig-Int32FromInt32(1)) % (Uint32FromInt32(8) * Uint32FromInt64(4)))) + if Uint32FromInt64(4) == Uint32FromInt64(4) { + v3 = v1 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v3, old|v2) != 0) { + old = _a_ll(tls, v3) + } + _a_barrier(tls) + _ = old + goto _4 + _4: + } else { + v5 = v1 + *(*struct { + F__ccgo_align [0]uint32 + Fr [0][2]Tuint32_t + Fv Tuint64_t + })(unsafe.Pointer(bp + 8)) = struct { + F__ccgo_align [0]uint32 + Fr [0][2]Tuint32_t + Fv Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp + 8)) = uint64(v2) + if *(*Tuint32_t)(unsafe.Pointer(bp + 8)) != 0 { + v6 = v5 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v6, old|int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)))) != 0) { + old = _a_ll(tls, v6) + } + _a_barrier(tls) + _ = old + goto _7 + _7: + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)) != 0 { + v8 = v5 + uintptr(1)*4 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v8, old|int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)))) != 0) { + old = _a_ll(tls, v8) + } + _a_barrier(tls) + _ = old + goto _9 + _9: + } + } + /* If pthread_create has not yet been called, + * implementation-internal signals might not + * yet have been unblocked. They must be + * unblocked before any signal handler is + * installed, so that an application cannot + * receive an illegal sigset_t (with them + * blocked) as part of the ucontext_t passed + * to the signal handler. */ + if !(X__libc.Fthreaded != 0) && !(_unmask_done != 0) { + *(*[2]uint32)(unsafe.Pointer(bp)) = [2]uint32{ + 1: Uint32FromUint32(3) << (Int32FromInt32(32) * BoolInt32(Uint32FromInt64(4) > Uint32FromInt32(4))), + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_UNBLOCK)), int32(bp), int32(Int32FromInt32(0)), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + _unmask_done = int32(1) + } + if !((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags&Int32FromInt32(SA_RESTART) != 0) { + _a_barrier(tls) + AtomicStorePInt32(uintptr(unsafe.Pointer(&X__eintr_valid_flag)), int32(1)) + _a_barrier(tls) + } + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fhandler = *(*uintptr)(unsafe.Pointer(sa)) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags = uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags |= uint32(SA_RESTORER) + if (*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags&int32(SA_SIGINFO) != 0 { + v10 = __ccgo_fp(X__restore_rt) + } else { + v10 = __ccgo_fp(X__restore) + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Frestorer = v10 + _memcpy(tls, bp+16+12, sa+4, uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + if sa != 0 { + v11 = bp + 16 + } else { + v11 = uintptr(0) + } + if old1 != 0 { + v12 = bp + 36 + } else { + v12 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_rt_sigaction), sig, int32(v11), int32(v12), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if old1 != 0 && !(r != 0) { + *(*uintptr)(unsafe.Pointer(old1)) = (*(*Tk_sigaction)(unsafe.Pointer(bp + 36))).Fhandler + (*Tsigaction)(unsafe.Pointer(old1)).Fsa_flags = int32((*(*Tk_sigaction)(unsafe.Pointer(bp + 36))).Fflags) + _memcpy(tls, old1+4, bp+36+12, uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* set at bp+0 */ [2]uint32 + _ = r + if uint32(sig)-uint32(32) < uint32(3) || uint32(sig)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Doing anything with the disposition of SIGABRT requires a lock, + * so that it cannot be changed while abort is terminating the + * process and so any change made by abort can't be observed. */ + if sig == int32(SIGABRT) { + X__block_all_sigs(tls, bp) + ___lock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + } + r = X__libc_sigaction(tls, sig, sa, old) + if sig == int32(SIGABRT) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + X__restore_sigs(tls, bp) + } + return r +} + +func Xsigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__sigaction(tls, sig, sa, old) +} + +func Xsigaddset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4)) |= uint32(1) << (s & (Uint32FromInt32(8)*Uint32FromInt64(4) - Uint32FromInt32(1))) + return 0 +} + +func Xsigaltstack(tls *TLS, ss uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ss=%v old=%v, (%v:)", tls, ss, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + if ss != 0 { + if !((*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&Int32FromInt32(SS_DISABLE) != 0) && (*Tstack_t)(unsafe.Pointer(ss)).Fss_size < uint32(MINSIGSTKSZ) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + if (*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&int32(SS_ONSTACK) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_sigaltstack), int32(ss), int32(old)))) +} + +const SST_SIZE = 8 + +type Tucontext_t7 = struct { + F__ccgo_align [0]uint32 + Fuc_flags uint32 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t + Fuc_regspace [64]uint64 +} + +func Xsigandset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint32 + _, _, _, _ = d, i, l, r + i = uint32(0) + d = dest + l = left + r = right + for { + if !(i < uint32(uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4))) { + break + } + *(*uint32)(unsafe.Pointer(d + uintptr(i)*4)) = *(*uint32)(unsafe.Pointer(l + uintptr(i)*4)) & *(*uint32)(unsafe.Pointer(r + uintptr(i)*4)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigdelset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4)) &= ^(Uint32FromUint32(1) << (s & (Uint32FromInt32(8)*Uint32FromInt64(4) - Uint32FromInt32(1)))) + return 0 +} + +func Xsigemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint32)(unsafe.Pointer(set)) = uint32(0) + if Bool(uint32(4) == uint32(4)) || Bool(int32(_NSIG) > int32(65)) { + *(*uint32)(unsafe.Pointer(set + 1*4)) = uint32(0) + } + if Bool(uint32(4) == uint32(4)) && Bool(int32(_NSIG) > int32(65)) { + *(*uint32)(unsafe.Pointer(set + 2*4)) = uint32(0) + *(*uint32)(unsafe.Pointer(set + 3*4)) = uint32(0) + } + return 0 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xsigfillset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint32)(unsafe.Pointer(set)) = uint32(0x7fffffff) + *(*uint32)(unsafe.Pointer(set + 1*4)) = uint32(0xfffffffc) + if int32(_NSIG) > int32(65) { + *(*uint32)(unsafe.Pointer(set + 2*4)) = uint32(0xffffffff) + *(*uint32)(unsafe.Pointer(set + 3*4)) = uint32(0xffffffff) + } + return 0 +} + +func Xsigisemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4)) { + break + } + if *(*uint32)(unsafe.Pointer(set + uintptr(i)*4)) != 0 { + return 0 + } + goto _1 + _1: + ; + i++ + } + return int32(1) +} + +func Xsigismember(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + return 0 + } + return BoolInt32(!!(*(*uint32)(unsafe.Pointer(set + uintptr(s/uint32(8)/uint32(4))*4))&(Uint32FromUint32(1)<<(s&(Uint32FromInt32(8)*Uint32FromInt64(4)-Uint32FromInt32(1)))) != 0)) +} + +func Xsigorset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint32 + _, _, _, _ = d, i, l, r + i = uint32(0) + d = dest + l = left + r = right + for { + if !(i < uint32(uint32(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint32FromInt64(4))) { + break + } + *(*uint32)(unsafe.Pointer(d + uintptr(i)*4)) = *(*uint32)(unsafe.Pointer(l + uintptr(i)*4)) | *(*uint32)(unsafe.Pointer(r + uintptr(i)*4)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigpending(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_rt_sigpending), int32(set), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))))) +} + +func Xsigprocmask(tls *TLS, how int32, set uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v how=%v set=%v old=%v, (%v:)", tls, how, set, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = _pthread_sigmask(tls, how, set, old) + if !(r != 0) { + return r + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = r + return -int32(1) +} + +func Xsigqueue(tls *TLS, pid Tpid_t, sig int32, value Tsigval) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v value=%v, (%v:)", tls, pid, sig, value, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var r int32 + var _ /* set at bp+128 */ Tsigset_t + var _ /* si at bp+0 */ Tsiginfo_t + _ = r + Xmemset(tls, bp, 0, uint32(128)) + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo = sig + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_code = -int32(1) + *(*Tsigval)(unsafe.Pointer(bp + 12 + 8)) = value + *(*Tuid_t)(unsafe.Pointer(bp + 12 + 4)) = Xgetuid(tls) + X__block_app_sigs(tls, bp+128) + *(*Tpid_t)(unsafe.Pointer(bp + 12)) = Xgetpid(tls) + r = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_rt_sigqueueinfo), pid, sig, int32(bp)))) + X__restore_sigs(tls, bp+128) + return r +} + +func X__libc_current_sigrtmax(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Int32FromInt32(_NSIG) - Int32FromInt32(1) +} + +func X__libc_current_sigrtmin(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(35) +} + +type t__jmp_buf = [32]uint64 + +type Tjmp_buf = [1]t__jmp_buf_tag + +type t__jmp_buf_tag = struct { + F__ccgo_align [0]uint32 + F__jb t__jmp_buf + F__fl uint32 + F__ss [32]uint32 + F__ccgo_pad3 [4]byte +} + +type Tsigjmp_buf = [1]t__jmp_buf_tag + +func X__sigsetjmp_tail(tls *TLS, jb uintptr, ret int32) (r int32) { + if __ccgo_strace { + trc("tls=%v jb=%v ret=%v, (%v:)", tls, jb, ret, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1, v2 uintptr + _, _, _ = p, v1, v2 + p = jb + 260 + if ret != 0 { + v1 = p + } else { + v1 = uintptr(0) + } + if ret != 0 { + v2 = uintptr(0) + } else { + v2 = p + } + X__syscall4(tls, int32(SYS_rt_sigprocmask), int32(Int32FromInt32(SIG_SETMASK)), int32(v1), int32(v2), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + return ret +} + +func Xsigsuspend(tls *TLS, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_rt_sigsuspend), int32(mask), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0, 0, 0))) +} + +func _do_sigtimedwait(tls *TLS, mask uintptr, si uintptr, ts uintptr) (r1 int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r, v2 int32 + var s Ttime_t + var v1 int64 + var v3, v4 uintptr + var v5 uint64 + _, _, _, _, _, _, _, _ = ns, r, s, v1, v2, v3, v4, v5 + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + v3 = bp + } else { + v3 = uintptr(0) + } + r = int32(___syscall_cp(tls, int32(SYS_rt_sigtimedwait_time64), int32(mask), int32(si), int32(v3), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) + } + if Bool(false) || r != -int32(ENOSYS) { + return r + } + if ts != 0 { + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v5 = uint64(s) + } else { + v5 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v5), + 1: ns, + } + v4 = bp + 16 + } else { + v4 = uintptr(0) + } + return int32(___syscall_cp(tls, int32(SYS_rt_sigtimedwait), int32(mask), int32(si), int32(v4), int32(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) + return r1 +} + +func Xsigtimedwait(tls *TLS, mask uintptr, si uintptr, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v timeout=%v, (%v:)", tls, mask, si, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + for cond := true; cond; cond = ret == -int32(EINTR) { + ret = _do_sigtimedwait(tls, mask, si, timeout) + } + return X__syscall_ret(tls, uint32(ret)) +} + +func Xsigwait(tls *TLS, mask uintptr, sig uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v sig=%v, (%v:)", tls, mask, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* si at bp+0 */ Tsiginfo_t + if Xsigtimedwait(tls, mask, bp, uintptr(0)) < 0 { + return -int32(1) + } + *(*int32)(unsafe.Pointer(sig)) = (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo + return 0 +} + +func Xsigwaitinfo(tls *TLS, mask uintptr, si uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v, (%v:)", tls, mask, si, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsigtimedwait(tls, mask, si, uintptr(0)) +} + +func X__xmknod(tls *TLS, ver int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func X__xmknodat(tls *TLS, ver int32, fd int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func Xchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_chmod), int32(path), int32(mode)))) +} + +func Xfchmod(tls *TLS, fd int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall2(tls, int32(SYS_fchmod), fd, int32(mode))) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_chmod), int32(bp), int32(mode)))) +} + +func Xfchmodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v flag=%v, (%v:)", tls, fd, path, mode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var fd2, ret, v1 int32 + var _ /* proc at bp+152 */ [27]uint8 + var _ /* st at bp+0 */ Tstat + _, _, _ = fd2, ret, v1 + if !(flag != 0) { + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fchmodat), fd, int32(path), int32(mode)))) + } + ret = int32(X__syscall4(tls, int32(SYS_fchmodat2), fd, int32(path), int32(mode), flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if flag != int32(AT_SYMLINK_NOFOLLOW) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if Xfstatat(tls, fd, path, bp, flag) != 0 { + return -int32(1) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + v1 = int32(X__syscall3(tls, int32(SYS_openat), fd, int32(path), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_PATH)|Int32FromInt32(O_NOFOLLOW)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC)))) + fd2 = v1 + if v1 < 0 { + if fd2 == -int32(ELOOP) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + return X__syscall_ret(tls, uint32(fd2)) + } + X__procfdname(tls, bp+152, uint32(fd2)) + ret = Xstat(tls, bp+152, bp) + if !(ret != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + ret = X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } else { + ret = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fchmodat), int32(-Int32FromInt32(100)), int32(bp+152), int32(mode)))) + } + } + X__syscall1(tls, int32(SYS_close), fd2) + return ret +} + +func X__fstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + if fd < 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EBADF))) + } + return X__fstatat(tls, fd, __ccgo_ts, st, int32(AT_EMPTY_PATH)) +} + +func Xfstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat(tls, fd, st) +} + +type Tstatx1 = struct { + F__ccgo_align [0]uint32 + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + Fpad1 Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime struct { + F__ccgo_align [0]uint32 + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_btime struct { + F__ccgo_align [0]uint32 + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_ctime struct { + F__ccgo_align [0]uint32 + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_mtime struct { + F__ccgo_align [0]uint32 + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + Fspare [14]Tuint64_t +} + +func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ret int32 + var _ /* stx at bp+0 */ Tstatx1 + _ = ret + flag |= int32(AT_NO_AUTOMOUNT) + ret = int32(X__syscall5(tls, int32(SYS_statx), fd, int32(path), flag, int32(Int32FromInt32(0x7ff)), int32(bp))) + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 && !(*(*uint8)(unsafe.Pointer(path)) != 0) { + ret = int32(X__syscall2(tls, int32(SYS_fstat64), fd, int32(bp))) + if ret == -int32(EBADF) && X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) >= 0 { + ret = int32(X__syscall4(tls, int32(SYS_fstatat64), fd, int32(path), int32(bp), flag)) + if ret == -int32(EINVAL) { + X__procfdname(tls, bp+104, uint32(fd)) + ret = int32(X__syscall2(tls, int32(SYS_stat64), int32(bp+104), int32(bp))) + } + } + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && flag == int32(AT_SYMLINK_NOFOLLOW) { + ret = int32(X__syscall2(tls, int32(SYS_lstat64), int32(path), int32(bp))) + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && !(flag != 0) { + ret = int32(X__syscall2(tls, int32(SYS_stat64), int32(path), int32(bp))) + } else { + ret = int32(X__syscall4(tls, int32(SYS_fstatat64), fd, int32(path), int32(bp), flag)) + } + } + } + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_dev, + Fst_mode: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mode, + Fst_nlink: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_nlink, + Fst_uid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_uid, + Fst_gid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_gid, + Fst_rdev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_rdev, + Fst_size: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_size, + Fst_blksize: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blksize, + Fst_blocks: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blocks, + F__st_atim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + F__st_mtim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + F__st_ctim32: struct { + Ftv_sec int32 + Ftv_nsec int32 + }{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + Fst_ino: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ino, + Fst_atim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + Fst_mtim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + Fst_ctim: Ttimespec{ + Ftv_sec: int64((*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec), + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + } + return 0 +} + +func X__fstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint32(4) < uint32(8) { + ret = _fstatat_statx(tls, fd, path, st, flag) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + } + ret = _fstatat_kstat(tls, fd, path, st, flag) + return X__syscall_ret(tls, uint32(ret)) +} + +func Xfstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat(tls, fd, path, st, flag) +} + +func Xfutimens(tls *TLS, fd int32, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times=%v, (%v:)", tls, fd, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xutimensat(tls, fd, uintptr(0), times, 0) +} + +func X__futimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var v2 uintptr + var _ /* ts at bp+0 */ [2]Ttimespec + _, _ = i, v2 + if times != 0 { + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec) >= uint64(1000000) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_nsec = int32((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec * int64(1000)) + goto _1 + _1: + ; + i++ + } + } + if times != 0 { + v2 = bp + } else { + v2 = uintptr(0) + } + return Xutimensat(tls, dirfd, pathname, v2, 0) +} + +func Xfutimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, dirfd, pathname, times) +} + +func Xlchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfchmodat(tls, -int32(100), path, mode, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xlstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xmkdir(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_mkdir), int32(path), int32(mode)))) +} + +func Xmkdirat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mkdirat), fd, int32(path), int32(mode)))) +} + +func Xmkfifo(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmkfifoat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmknod(tls *TLS, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v dev=%v, (%v:)", tls, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_mknod), int32(path), int32(mode), int32(dev)))) +} + +func Xmknodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_mknodat), fd, int32(path), int32(mode), int32(dev)))) +} + +func Xstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, 0) +} + +func ___statfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_statfs64), int32(path), int32(Uint32FromInt64(88)), int32(buf)))) +} + +func Xfstatfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fstatfs64), fd, int32(Uint32FromInt64(88)), int32(buf)))) +} + +func _fixup(tls *TLS, out uintptr, in uintptr) { + var v1 uint32 + _ = v1 + *(*Tstatvfs)(unsafe.Pointer(out)) = Tstatvfs{} + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bsize = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + if (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize != 0 { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize + } else { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + } + (*Tstatvfs)(unsafe.Pointer(out)).Ff_frsize = v1 + (*Tstatvfs)(unsafe.Pointer(out)).Ff_blocks = (*Tstatfs)(unsafe.Pointer(in)).Ff_blocks + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bfree = (*Tstatfs)(unsafe.Pointer(in)).Ff_bfree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bavail = (*Tstatfs)(unsafe.Pointer(in)).Ff_bavail + (*Tstatvfs)(unsafe.Pointer(out)).Ff_files = (*Tstatfs)(unsafe.Pointer(in)).Ff_files + (*Tstatvfs)(unsafe.Pointer(out)).Ff_ffree = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_favail = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_fsid = uint32(*(*int32)(unsafe.Pointer(in + 48))) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_flag = (*Tstatfs)(unsafe.Pointer(in)).Ff_flags + (*Tstatvfs)(unsafe.Pointer(out)).Ff_namemax = (*Tstatfs)(unsafe.Pointer(in)).Ff_namelen + (*Tstatvfs)(unsafe.Pointer(out)).Ff_type = (*Tstatfs)(unsafe.Pointer(in)).Ff_type +} + +func Xstatvfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if ___statfs(tls, path, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xfstatvfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if Xfstatfs(tls, fd, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xumask(tls *TLS, mode Tmode_t) (r Tmode_t) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_umask), int32(mode))))) +} + +func Xutimensat(tls *TLS, fd int32, path uintptr, times uintptr, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times=%v flags=%v, (%v:)", tls, fd, path, times, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, ns0, ns1, r int32 + var s0, s1 Ttime_t + var tv, v1, v2 uintptr + var _ /* tmp at bp+48 */ [4]int32 + _, _, _, _, _, _, _, _, _ = i, ns0, ns1, r, s0, s1, tv, v1, v2 + if times != 0 && (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec == int32(UTIME_NOW) && (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec == int32(UTIME_NOW) { + times = uintptr(0) + } + r = -int32(ENOSYS) + s0 = 0 + s1 = 0 + ns0 = 0 + ns1 = 0 + if times != 0 { + ns0 = (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec + ns1 = (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec + if !(ns0 == int32(UTIME_NOW) || ns0 == int32(UTIME_OMIT)) { + s0 = (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_sec + } + if !(ns1 == int32(UTIME_NOW) || ns1 == int32(UTIME_OMIT)) { + s1 = (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_sec + } + } + if Bool(false) || !!((uint64(s0)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(s1)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + if times != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: s0, + 1: int64(ns0), + 2: s1, + 3: int64(ns1), + } + v1 = bp + } else { + v1 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_utimensat_time64), fd, int32(path), int32(v1), flags)) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(s0)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(s1)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + if times != 0 { + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(s0), + 1: ns0, + 2: int32(s1), + 3: ns1, + } + v2 = bp + 32 + } else { + v2 = uintptr(0) + } + r = int32(X__syscall4(tls, int32(SYS_utimensat), fd, int32(path), int32(v2), flags)) + if r != -int32(ENOSYS) || flags != 0 { + return X__syscall_ret(tls, uint32(r)) + } + tv = uintptr(0) + if times != 0 { + tv = bp + 48 + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec) >= uint64(1000000000) { + if (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int32(UTIME_NOW) || (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int32(UTIME_OMIT) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(ENOSYS))) + } + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)*i+0] = int32((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec) + (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)*i+int32(1)] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec / int32(1000) + goto _3 + _3: + ; + i++ + } + } + r = int32(X__syscall3(tls, int32(SYS_futimesat), fd, int32(path), int32(tv))) + if r != -int32(ENOSYS) || fd != -int32(100) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_utimes), int32(path), int32(tv))) + return X__syscall_ret(tls, uint32(r)) +} + +func X__fclose_ca(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) +} + +func X__fdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var f, v1 uintptr + var flags, v2 int32 + var _ /* wsz at bp+0 */ Twinsize + _, _, _, _ = f, flags, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+buffer or fail */ + v1 = Xmalloc(tls, Uint32FromInt64(144)+Uint32FromInt32(UNGET)+Uint32FromInt32(BUFSIZ)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint32(144)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(v2) + } + /* Apply close-on-exec flag */ + if Xstrchr(tls, mode, int32('e')) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + /* Set append mode on fd if opened for append */ + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags = int32(X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFL)))) + if !(flags&Int32FromInt32(O_APPEND) != 0) { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFL)), int32(flags|Int32FromInt32(O_APPEND))) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_APP) + } + (*TFILE)(unsafe.Pointer(f)).Ffd = fd + (*TFILE)(unsafe.Pointer(f)).Fbuf = f + uintptr(144) + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(BUFSIZ) + /* Activate line buffered mode for terminals */ + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0) && !(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp)) != 0) { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + /* Initialize op ptrs. No problem if some are unneeded. */ + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fdopen(tls, fd, mode) +} + +func X__fmodeflags(tls *TLS, mode uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var flags int32 + _ = flags + if Xstrchr(tls, mode, int32('+')) != 0 { + flags = int32(O_RDWR) + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + flags = O_RDONLY + } else { + flags = int32(O_WRONLY) + } + } + if Xstrchr(tls, mode, int32('x')) != 0 { + flags |= int32(O_EXCL) + } + if Xstrchr(tls, mode, int32('e')) != 0 { + flags |= int32(O_CLOEXEC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) != int32('r') { + flags |= int32(O_CREAT) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('w') { + flags |= int32(O_TRUNC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags |= int32(O_APPEND) + } + return flags +} + +func X__fopen_rb_ca(tls *TLS, filename uintptr, f uintptr, buf uintptr, len1 Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v f=%v buf=%v len1=%v, (%v:)", tls, filename, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemset(tls, f, 0, uint32(144)) + (*TFILE)(unsafe.Pointer(f)).Ffd = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_open), int32(filename), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_LARGEFILE))))) + if (*TFILE)(unsafe.Pointer(f)).Ffd < 0 { + return uintptr(0) + } + X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(Int32FromInt32(F_NOWR) | Int32FromInt32(F_PERM)) + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = len1 - uint32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + AtomicStorePInt32(f+76, -int32(1)) + return f +} + +func X__overflow(tls *TLS, f uintptr, _c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v _c=%v, (%v:)", tls, f, _c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint8 + var v2, v3 uintptr + var _ /* c at bp+0 */ uint8 + _, _, _ = v1, v2, v3 + *(*uint8)(unsafe.Pointer(bp)) = uint8(_c) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return -int32(1) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend && int32(*(*uint8)(unsafe.Pointer(bp))) != (*TFILE)(unsafe.Pointer(f)).Flbf { + v1 = *(*uint8)(unsafe.Pointer(bp)) + v3 = f + 20 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(v2)) = v1 + return int32(v1) + } + if (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, bp, uint32(1)) != uint32(1) { + return -int32(1) + } + return int32(*(*uint8)(unsafe.Pointer(bp))) +} + +func _dummy9(tls *TLS, fd int32) (r int32) { + return fd +} + +func X__stdio_close(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_close), _dummy9(tls, (*TFILE)(unsafe.Pointer(f)).Ffd)))) +} + +var _dummy_file = uintptr(0) + +func _close_file(tls *TLS, f uintptr) { + if !(f != 0) { + return + } + if AtomicLoadPInt32(f+76) >= 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Frend)), int32(1)) + } +} + +func X__stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + _close_file(tls, f) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdin_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) +} + +func X__stdio_exit_needed(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit(tls) +} + +func X__stdio_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt Tssize_t + var v1, v2 int32 + var v3, v4 uintptr + var _ /* iov at bp+0 */ [2]Tiovec + _, _, _, _, _ = cnt, v1, v2, v3, v4 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: buf, + Fiov_len: len1 - BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)), + }, + 1: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fbuf, + Fiov_len: (*TFILE)(unsafe.Pointer(f)).Fbuf_size, + }, + } + if (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len != 0 { + v1 = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_readv), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(bp), int32(Int32FromInt32(2))))) + } else { + v1 = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_read), (*TFILE)(unsafe.Pointer(f)).Ffd, int32((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_base), int32((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_len)))) + } + cnt = v1 + if cnt <= 0 { + if cnt != 0 { + v2 = int32(F_ERR) + } else { + v2 = int32(F_EOF) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v2) + return uint32(0) + } + if uint32(cnt) <= (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len { + return uint32(cnt) + } + cnt = Tssize_t(uint32(cnt) - (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len) + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(cnt) + if (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(len1-uint32(1)))) = *(*uint8)(unsafe.Pointer(v3)) + } + return len1 +} + +func X__stdio_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, (*TFILE)(unsafe.Pointer(f)).Ffd, off, whence) +} + +func X__stdio_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt Tssize_t + var iov, v2, v3, v4 uintptr + var iovcnt int32 + var rem Tsize_t + var v5 uint32 + var _ /* iovs at bp+0 */ [2]Tiovec + _, _, _, _, _, _, _, _ = cnt, iov, iovcnt, rem, v2, v3, v4, v5 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fwbase, + Fiov_len: uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)), + }, + 1: { + Fiov_base: buf, + Fiov_len: len1, + }, + } + iov = bp + rem = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + (*(*Tiovec)(unsafe.Pointer(iov + 1*8))).Fiov_len + iovcnt = int32(2) + for { + cnt = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_writev), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(iov), iovcnt))) + if uint32(cnt) == rem { + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + return len1 + } + if cnt < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if iovcnt == int32(2) { + v5 = uint32(0) + } else { + v5 = len1 - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + } + return v5 + } + rem -= uint32(cnt) + if uint32(cnt) > (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len { + cnt = Tssize_t(uint32(cnt) - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len) + iov += 8 + iovcnt-- + } + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base + uintptr(cnt) + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len -= uint32(cnt) + goto _1 + _1: + } + return r +} + +func X__stdout_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* wsz at bp+0 */ Twinsize + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_SVB) != 0) && X__syscall3(tls, int32(SYS_ioctl), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp)) != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + } + return X__stdio_write(tls, f, buf, len1) +} + +func X__toread(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + var v4 int32 + _, _, _, _ = v1, v2, v3, v4 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_EOF) != 0 { + v4 = -int32(1) + } else { + v4 = 0 + } + return v4 +} + +func X__toread_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +func X__towrite(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 uintptr + _, _ = v1, v2 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + /* Clear read buffer (easier than summoning nasal demons) */ + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + /* Activate write through the buffer. */ + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + return 0 +} + +func X__towrite_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +/* This function assumes it will never be called if there is already + * data buffered for reading. */ + +func X__uflow(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* c at bp+0 */ uint8 + if !(X__toread(tls, f) != 0) && (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, bp, uint32(1)) == uint32(1) { + return int32(*(*uint8)(unsafe.Pointer(bp))) + } + return -int32(1) +} + +func Xasprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvasprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xclearerr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^(Int32FromInt32(F_EOF) | Int32FromInt32(F_ERR))) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xclearerr_unlocked(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xclearerr(tls, f) +} + +func Xdprintf(tls *TLS, fd int32, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v va=%v, (%v:)", tls, fd, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvdprintf(tls, fd, fmt, ap) + _ = ap + return ret +} + +const FSETLOCKING_BYCALLER = 2 +const FSETLOCKING_INTERNAL = 1 +const FSETLOCKING_QUERY = 0 + +func X_flushlbf(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xfflush(tls, uintptr(0)) +} + +func X__fsetlocking(tls *TLS, f uintptr, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v type1=%v, (%v:)", tls, f, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__fwriting(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 || (*TFILE)(unsafe.Pointer(f)).Fwend != 0) +} + +func X__freading(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 || (*TFILE)(unsafe.Pointer(f)).Frend != 0) +} + +func X__freadable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NORD) != 0)) +} + +func X__fwritable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0)) +} + +func X__flbf(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Flbf >= 0) +} + +func X__fbufsize(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TFILE)(unsafe.Pointer(f)).Fbuf_size +} + +func X__fpending(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Fwend != 0 { + v1 = int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase) + } else { + v1 = 0 + } + return uint32(v1) +} + +func X__fpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + if !(f != 0) { // libbsd fpurge test fails w/o this. + return int32(1) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + return 0 +} + +func Xfpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fpurge(tls, f) +} + +func X__freadahead(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + v1 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } else { + v1 = 0 + } + return uint32(v1) +} + +func X__freadptr(tls *TLS, f uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v sizep=%v, (%v:)", tls, f, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + if (*TFILE)(unsafe.Pointer(f)).Frpos == (*TFILE)(unsafe.Pointer(f)).Frend { + return uintptr(0) + } + *(*Tsize_t)(unsafe.Pointer(sizep)) = uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + return (*TFILE)(unsafe.Pointer(f)).Frpos +} + +func X__freadptrinc(tls *TLS, f uintptr, inc Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v inc=%v, (%v:)", tls, f, inc, origin(2)) + } + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(inc) +} + +func X__fseterr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) +} + +func _dummy10(tls *TLS, f uintptr) { +} + +func Xfclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1 int32 + var head uintptr + _, _, _, _ = __need_unlock, head, r, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + r = Xfflush(tls, f) + r |= (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + /* Past this point, f is closed and any further explict access + * to it is undefined. However, it still exists as an entry in + * the open file list and possibly in the thread's locked files + * list, if it was closed while explicitly locked. Functions + * which process these lists must tolerate dead FILE objects + * (which necessarily have inactive buffer pointers) without + * producing any side effects. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) != 0 { + return r + } + X__unlist_locked_file(tls, f) + head = X__ofl_lock(tls) + if (*TFILE)(unsafe.Pointer(f)).Fprev != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev)).Fnext = (*TFILE)(unsafe.Pointer(f)).Fnext + } + if (*TFILE)(unsafe.Pointer(f)).Fnext != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext)).Fprev = (*TFILE)(unsafe.Pointer(f)).Fprev + } + if *(*uintptr)(unsafe.Pointer(head)) == f { + *(*uintptr)(unsafe.Pointer(head)) = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + Xfree(tls, (*TFILE)(unsafe.Pointer(f)).Fgetln_buf) + Xfree(tls, f) + return r +} + +func Xfeof(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_feof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xfeof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xferror(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_ferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +func Xferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +// C documentation +// +// /* stdout.c will override this if linked */ +var _dummy11 = uintptr(0) + +func Xfflush(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, __need_unlock1, r, v2, v3 int32 + var v4, v5, v6 uintptr + _, _, _, _, _, _, _, _ = __need_unlock, __need_unlock1, r, v2, v3, v4, v5, v6 + if !(f != 0) { + r = 0 + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + } + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) + } + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + if AtomicLoadPInt32(f+76) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + r |= Xfflush(tls, f) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + return r + } + if AtomicLoadPInt32(f+76) >= 0 { + v3 = ___lockfile(tls, f) + } else { + v3 = 0 + } + __need_unlock1 = v3 + /* If writing, flush output */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + } + /* If reading, sync position, per POSIX */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Frend)), int32(1)) + } + /* Clear read and write modes */ + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + v6 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v6 + (*TFILE)(unsafe.Pointer(f)).Frpos = v6 + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return 0 +} + +func Xfflush_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfflush(tls, f) +} + +func _locking_getc(tls *TLS, f uintptr) (r int32) { + var c, old, old1, v11, v12, v2, v4, v8 int32 + var v1, v10, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, v1, v10, v11, v12, v2, v4, v5, v6, v7, v8 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v7, 0) != 0) { + old1 = _a_ll(tls, v7) + } + _a_barrier(tls) + v8 = old1 + goto _9 +_9: + if v8&int32(MAYBE_WAITERS) != 0 { + v10 = f + 76 + v11 = int32(1) + v12 = int32(1) + if v12 != 0 { + v12 = int32(FUTEX_PRIVATE) + } + if v11 < Int32FromInt32(0) { + v11 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)|v12), v11) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)), v11) != 0 + } + return c +} + +func Xfgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc(tls, v1) + goto _3 +_3: + return v2 +} + +func Xfgetln(tls *TLS, f uintptr, plen uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v plen=%v, (%v:)", tls, f, plen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, v1, v2 int32 + var l, v8 Tssize_t + var ret, z, v3, v4, v5, v7 uintptr + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, ret, z, v1, v2, v3, v4, v5, v6, v7, v8 + ret = uintptr(0) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + Xungetc(tls, v2, f) + if v6 = (*TFILE)(unsafe.Pointer(f)).Frend != 0; v6 { + v5 = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + z = v5 + } + if v6 && v5 != 0 { + ret = (*TFILE)(unsafe.Pointer(f)).Frpos + z++ + v7 = z + *(*Tsize_t)(unsafe.Pointer(plen)) = uint32(int32(v7) - int32(ret)) + (*TFILE)(unsafe.Pointer(f)).Frpos = z + } else { + *(*[1]Tsize_t)(unsafe.Pointer(bp)) = [1]Tsize_t{} + v8 = Xgetline(tls, f+96, bp, f) + l = v8 + if v8 > 0 { + *(*Tsize_t)(unsafe.Pointer(plen)) = uint32(l) + ret = (*TFILE)(unsafe.Pointer(f)).Fgetln_buf + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func Xfgetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + var off Toff_t + _ = off + off = X__ftello(tls, f) + if off < 0 { + return -int32(1) + } + *(*int64)(unsafe.Pointer(pos)) = off + return 0 +} + +func Xfgets(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v4, v5 int32 + var k Tsize_t + var p, z, v6, v7, v9 uintptr + var v3 uint32 + var v8 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, k, p, z, v1, v2, v3, v4, v5, v6, v7, v8, v9 + p = s + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if n <= int32(1) { + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if n < int32(1) { + return uintptr(0) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + return s + } + n-- + for n != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v2 = int32(z) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + int32(1) + } else { + v2 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint32(v2) + if k < uint32(n) { + v3 = k + } else { + v3 = uint32(n) + } + k = v3 + _memcpy(tls, p, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + p += uintptr(k) + n = int32(uint32(n) - k) + if z != 0 || !(n != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 < 0 { + if p == s || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + s = uintptr(0) + } + break + } + n-- + v8 = uint8(c) + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = v8 + if int32(v8) == int32('\n') { + break + } + } + if s != 0 { + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return s +} + +func Xfgets_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgets(tls, s, n, f) +} + +func ___fgetwc_unlocked_internal(tls *TLS, f uintptr) (r Twint_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var c, first, v1, v2 int32 + var l Tsize_t + var v3, v4 uintptr + var _ /* b at bp+16 */ uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = c, first, l, v1, v2, v3, v4 + /* Convert character from buffer if possible */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + l = uint32(Xmbtowc(tls, bp, (*TFILE)(unsafe.Pointer(f)).Frpos, uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)))) + if l+uint32(1) >= uint32(1) { + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(l + BoolUint32(!(l != 0))) /* l==0 means 1 byte, null */ + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + } + /* Convert character byte-by-byte */ + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + first = int32(1) + for cond := true; cond; cond = l == uint32(-Int32FromInt32(2)) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + v1 = v2 + c = v1 + *(*uint8)(unsafe.Pointer(bp + 16)) = uint8(v1) + if c < 0 { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + } + return uint32(0xffffffff) + } + l = Xmbrtowc(tls, bp, bp+16, uint32(1), bp+8) + if l == uint32(-Int32FromInt32(1)) { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + Xungetc(tls, int32(*(*uint8)(unsafe.Pointer(bp + 16))), f) + } + return uint32(0xffffffff) + } + first = 0 + } + return *(*Twchar_t)(unsafe.Pointer(bp)) +} + +func X__fgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var loc Tlocale_t + var ploc uintptr + var wc Twchar_t + _, _, _ = loc, ploc, wc + ploc = uintptr(___get_tp(tls)) + 88 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + wc = ___fgetwc_unlocked_internal(tls, f) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return wc +} + +func Xfgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var c Twint_t + _, _, _ = __need_unlock, c, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fgetwc_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xfgetws(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v2 int32 + var c Twint_t + var p, v4, v5 uintptr + _, _, _, _, _, _, _ = __need_unlock, c, p, v1, v2, v4, v5 + p = s + v1 = n + n-- + if !(v1 != 0) { + return s + } + if AtomicLoadPInt32(f+76) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + for { + if !(n != 0) { + break + } + c = X__fgetwc_unlocked(tls, f) + if c == uint32(0xffffffff) { + break + } + v4 = p + p += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = c + if c == uint32('\n') { + break + } + goto _3 + _3: + ; + n-- + } + *(*Twchar_t)(unsafe.Pointer(p)) = uint32(0) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + p = s + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if p == s { + v5 = UintptrFromInt32(0) + } else { + v5 = s + } + return v5 +} + +func Xfgetws_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetws(tls, s, n, f) +} + +func Xfileno(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fd, v1 int32 + _, _, _ = __need_unlock, fd, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + fd = (*TFILE)(unsafe.Pointer(f)).Ffd + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if fd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return -int32(1) + } + return fd +} + +func Xfileno_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfileno(tls, f) +} + +func Xflockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if !(Xftrylockfile(tls, f) != 0) { + return + } + ___lockfile(tls, f) + X__register_locked_file(tls, f, uintptr(___get_tp(tls))) +} + +type Tcookie = struct { + Fpos Tsize_t + Flen1 Tsize_t + Fsize Tsize_t + Fbuf uintptr + Fmode int32 +} + +type Tmem_FILE = struct { + F__ccgo_align [0]uint32 + Ff TFILE + Fc Tcookie + Fbuf [1032]uint8 + F__ccgo_pad4 [4]byte +} + +func _mseek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(int32((*Tcookie)(unsafe.Pointer(c)).Fsize)-base) { + goto fail + } + v2 = uint32(int64(base) + off) + (*Tcookie)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _mread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var rem Tsize_t + _, _ = c, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + rem = (*Tcookie)(unsafe.Pointer(c)).Flen1 - (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + rem = uint32(0) + } + if len1 > rem { + len1 = rem + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_EOF) + } + _memcpy(tls, buf, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + rem -= len1 + if rem > (*TFILE)(unsafe.Pointer(f)).Fbuf_size { + rem = (*TFILE)(unsafe.Pointer(f)).Fbuf_size + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(rem) + _memcpy(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), rem) + *(*Tsize_t)(unsafe.Pointer(c)) += rem + return len1 +} + +func _mwrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var len2, rem Tsize_t + _, _, _ = c, len2, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _mwrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint32(0) + } + } + if (*Tcookie)(unsafe.Pointer(c)).Fmode == int32('a') { + (*Tcookie)(unsafe.Pointer(c)).Fpos = (*Tcookie)(unsafe.Pointer(c)).Flen1 + } + rem = (*Tcookie)(unsafe.Pointer(c)).Fsize - (*Tcookie)(unsafe.Pointer(c)).Fpos + if len1 > rem { + len1 = rem + } + _memcpy(tls, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + (*Tcookie)(unsafe.Pointer(c)).Flen1 = (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Flen1 < (*Tcookie)(unsafe.Pointer(c)).Fsize { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Flen1))) = uint8(0) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 && (*Tcookie)(unsafe.Pointer(c)).Fsize != 0 { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Fsize-uint32(1)))) = uint8(0) + } + } + } + return len1 +} + +func _mclose(tls *TLS, m uintptr) (r int32) { + return 0 +} + +func Xfmemopen(tls *TLS, buf uintptr, size Tsize_t, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v mode=%v, (%v:)", tls, buf, size, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var plus, v2 int32 + var v1 uint32 + var v3 Tsize_t + _, _, _, _, _ = f, plus, v1, v2, v3 + plus = BoolInt32(!!(Xstrchr(tls, mode, int32('+')) != 0)) + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(buf != 0) && size > uint32(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + if buf != 0 { + v1 = uint32(0) + } else { + v1 = size + } + f = Xmalloc(tls, uint32(1200)+v1) + if !(f != 0) { + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(UintptrFromInt32(0)+164)) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 144 + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 164 + uintptr(UNGET) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint32FromInt64(1032) - Uint32FromInt32(UNGET) + if !(buf != 0) { + buf = f + 1196 + Xmemset(tls, buf, 0, size) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf = buf + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fsize = size + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fmode = int32(*(*uint8)(unsafe.Pointer(mode))) + if !(plus != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = size + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + v3 = Xstrnlen(tls, buf, size) + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + } else { + if plus != 0 { + *(*uint8)(unsafe.Pointer((*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf)) = uint8(0) + } + } + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_mread) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_mwrite) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_mseek) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_mclose) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + return X__ofl_add(tls, f) +} + +func Xfopen(tls *TLS, filename uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var fd, flags int32 + _, _, _ = f, fd, flags + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Compute the flags to pass to open() */ + flags = X__fmodeflags(tls, mode) + fd = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open), int32(filename), int32(flags|Int32FromInt32(O_LARGEFILE)), int32(Int32FromInt32(0666))))) + if fd < 0 { + return uintptr(0) + } + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + f = X__fdopen(tls, fd, mode) + if f != 0 { + return f + } + X__syscall1(tls, int32(SYS_close), fd) + return uintptr(0) +} + +type Tfcookie = struct { + Fcookie uintptr + Fiofuncs Tcookie_io_functions_t +} + +type Tcookie_FILE = struct { + F__ccgo_align [0]uint32 + Ff TFILE + Ffc Tfcookie + Fbuf [1032]uint8 + F__ccgo_pad3 [4]byte +} + +func _cookieread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v2, v3, v5 uintptr + var len2, readlen, remain, v1 Tsize_t + var ret Tssize_t + var v4 int32 + _, _, _, _, _, _, _, _, _, _ = fc, len2, readlen, remain, ret, v1, v2, v3, v4, v5 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + ret = -int32(1) + remain = len1 + readlen = uint32(0) + len2 = len1 - BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread != 0) { + goto bail + } + if len2 != 0 { + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len2) + if ret <= 0 { + goto bail + } + readlen += uint32(ret) + remain -= uint32(ret) + } + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) || remain > BoolUint32(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) { + return readlen + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, (*TFILE)(unsafe.Pointer(f)).Frpos, (*TFILE)(unsafe.Pointer(f)).Fbuf_size) + if ret <= 0 { + goto bail + } + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(ret) + v1 = readlen + readlen++ + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + return readlen + goto bail +bail: + ; + if ret == 0 { + v4 = int32(F_EOF) + } else { + v4 = int32(F_ERR) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v4) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = v5 + (*TFILE)(unsafe.Pointer(f)).Frpos = v5 + return readlen +} + +func _cookiewrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v1, v2 uintptr + var len2 Tsize_t + var ret Tssize_t + _, _, _, _, _ = fc, len2, ret, v1, v2 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite != 0) { + return len1 + } + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _cookiewrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint32(0) + } + } + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len1) + if ret < 0 { + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint32(0) + } + return uint32(ret) +} + +func _cookieseek(tls *TLS, f uintptr, _off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Toff_t)(unsafe.Pointer(bp)) = _off + var fc uintptr + var res int32 + _, _ = fc, res + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if uint32(whence) > uint32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return int64(-int32(1)) + } + res = (*(*func(*TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, bp, whence) + if res < 0 { + return int64(res) + } + return *(*Toff_t)(unsafe.Pointer(bp)) +} + +func _cookieclose(tls *TLS, f uintptr) (r int32) { + var fc uintptr + _ = fc + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1 != 0 { + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie) + } + return 0 +} + +func Xfopencookie(tls *TLS, cookie uintptr, mode uintptr, iofuncs Tcookie_io_functions_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cookie=%v mode=%v iofuncs=%v, (%v:)", tls, cookie, mode, iofuncs, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f, v1 uintptr + var v2 int32 + _, _, _ = f, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1402, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+fcookie+buffer or fail */ + v1 = Xmalloc(tls, uint32(1200)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint32(144)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + /* Set up our fcookie */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fcookie = cookie + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fiofuncs = iofuncs + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 144 + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 164 + uintptr(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint32FromInt64(1032) - Uint32FromInt32(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + /* Initialize op ptrs. No problem if some are unneeded. */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_cookieread) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_cookiewrite) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_cookieseek) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_cookieclose) + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func _locking_putc(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, v12, v13, v2, v4, v9 int32 + var v1, v11, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, v1, v11, v12, v13, v2, v4, v5, v6, v7, v8, v9 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 20 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v8, 0) != 0) { + old1 = _a_ll(tls, v8) + } + _a_barrier(tls) + v9 = old1 + goto _10 +_10: + if v9&int32(MAYBE_WAITERS) != 0 { + v11 = f + 76 + v12 = int32(1) + v13 = int32(1) + if v13 != 0 { + v13 = int32(FUTEX_PRIVATE) + } + if v12 < Int32FromInt32(0) { + v12 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)|v13), v12) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)), v12) != 0 + } + return c +} + +func Xfputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xfputs(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, s) + return BoolInt32(Xfwrite(tls, s, uint32(1), l, f) == l) - int32(1) +} + +func Xfputs_unlocked(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputs(tls, s, f) +} + +func X__fputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v1 int32 + var loc Tlocale_t + var ploc, v3, v4 uintptr + var v2 uint8 + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _ = l, loc, ploc, v1, v2, v3, v4 + ploc = uintptr(___get_tp(tls)) + 88 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if BoolInt32(c < uint32(128)) != 0 { + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = uint32(v1) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwpos+uintptr(MB_LEN_MAX) < (*TFILE)(unsafe.Pointer(f)).Fwend { + l = Xwctomb(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, c) + if l < 0 { + c = uint32(0xffffffff) + } else { + *(*uintptr)(unsafe.Pointer(f + 20)) += uintptr(l) + } + } else { + l = Xwctomb(tls, bp, c) + if l < 0 || X__fwritex(tls, bp, uint32(l), f) < uint32(l) { + c = uint32(0xffffffff) + } + } + } + if c == uint32(0xffffffff) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xfputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fputwc_unlocked(tls, c, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xfputws(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + *(*uintptr)(unsafe.Pointer(bp)) = _ws + var __need_unlock, v1 int32 + var l, v2 Tsize_t + var loc Tlocale_t + var ploc uintptr + var v3 bool + var _ /* buf at bp+4 */ [1024]uint8 + _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3 + l = uint32(0) + ploc = uintptr(___get_tp(tls)) + 88 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + for { + if v3 = *(*uintptr)(unsafe.Pointer(bp)) != 0; v3 { + v2 = Xwcsrtombs(tls, bp+4, bp, uint32(1024), uintptr(0)) + l = v2 + } + if !(v3 && v2+uint32(1) > uint32(1)) { + break + } + if X__fwritex(tls, bp+4, l, f) < l { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return -int32(1) + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return int32(l) /* 0 or -1 */ +} + +func Xfputws_unlocked(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputws(tls, _ws, f) +} + +func Xfread(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var dest uintptr + var k, l, len1 Tsize_t + var v2, v4 uint32 + _, _, _, _, _, _, _, _ = __need_unlock, dest, k, l, len1, v1, v2, v4 + dest = destv + len1 = size * nmemb + l = len1 + if !(size != 0) { + nmemb = uint32(0) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + /* First exhaust the buffer. */ + if uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos)) < l { + v2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + } else { + v2 = l + } + k = v2 + _memcpy(tls, dest, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + dest += uintptr(k) + l -= k + } + /* Read the remainder directly */ + for { + if !(l != 0) { + break + } + if X__toread(tls, f) != 0 { + v4 = uint32(0) + } else { + v4 = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, dest, l) + } + k = v4 + if !(k != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return (len1 - l) / size + } + goto _3 + _3: + ; + l -= k + dest += uintptr(k) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return nmemb +} + +func Xfread_unlocked(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfread(tls, destv, size, nmemb, f) +} + +/* The basic idea of this implementation is to open a new FILE, + * hack the necessary parts of the new FILE into the old one, then + * close the new FILE. */ + +/* Locking IS necessary because another thread may provably hold the + * lock, via flockfile or otherwise, when freopen is called, and in that + * case, freopen cannot act until the lock is released. */ + +func Xfreopen(tls *TLS, filename uintptr, mode uintptr, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v f=%v, (%v:)", tls, filename, mode, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fl, v1 int32 + var f2 uintptr + _, _, _, _ = __need_unlock, f2, fl, v1 + fl = X__fmodeflags(tls, mode) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfflush(tls, f) + if !(filename != 0) { + if fl&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + fl &= ^(Int32FromInt32(O_CREAT) | Int32FromInt32(O_EXCL) | Int32FromInt32(O_CLOEXEC)) + if X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_fcntl64), (*TFILE)(unsafe.Pointer(f)).Ffd, int32(Int32FromInt32(F_SETFL)), fl))) < 0 { + goto fail + } + } else { + f2 = Xfopen(tls, filename, mode) + if !(f2 != 0) { + goto fail + } + if (*TFILE)(unsafe.Pointer(f2)).Ffd == (*TFILE)(unsafe.Pointer(f)).Ffd { + (*TFILE)(unsafe.Pointer(f2)).Ffd = -int32(1) + } else { + if X__dup3(tls, (*TFILE)(unsafe.Pointer(f2)).Ffd, (*TFILE)(unsafe.Pointer(f)).Ffd, fl&int32(O_CLOEXEC)) < 0 { + goto fail2 + } + } + (*TFILE)(unsafe.Pointer(f)).Fflags = (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) | (*TFILE)(unsafe.Pointer(f2)).Fflags + (*TFILE)(unsafe.Pointer(f)).Fread = (*TFILE)(unsafe.Pointer(f2)).Fread + (*TFILE)(unsafe.Pointer(f)).Fwrite = (*TFILE)(unsafe.Pointer(f2)).Fwrite + (*TFILE)(unsafe.Pointer(f)).Fseek = (*TFILE)(unsafe.Pointer(f2)).Fseek + (*TFILE)(unsafe.Pointer(f)).Fclose1 = (*TFILE)(unsafe.Pointer(f2)).Fclose1 + Xfclose(tls, f2) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = 0 + (*TFILE)(unsafe.Pointer(f)).Flocale = uintptr(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return f + goto fail2 +fail2: + ; + Xfclose(tls, f2) + goto fail +fail: + ; + Xfclose(tls, f) + return UintptrFromInt32(0) +} + +func Xfscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfscanf(tls, f, fmt, va) +} + +func X__fseeko_unlocked(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + /* Fail immediately for invalid whence argument. */ + if whence != int32(1) && whence != 0 && whence != int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Adjust relative offset for unread data in buffer, if any. */ + if whence == int32(1) && (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + off -= int64(int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos)) + } + /* Flush write buffer, and report error on failure. */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + return -int32(1) + } + } + /* Leave writing mode */ + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + /* Perform the underlying seek. */ + if (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, off, whence) < 0 { + return -int32(1) + } + /* If seek succeeded, file is seekable and we discard read buffer. */ + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + return 0 +} + +func X__fseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, result, v1 int32 + _, _, _ = __need_unlock, result, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + result = X__fseeko_unlocked(tls, f, off, whence) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return result +} + +func Xfseek(tls *TLS, f uintptr, off int32, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, int64(off), whence) +} + +func Xfseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfsetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, *(*int64)(unsafe.Pointer(pos)), 0) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__ftello_unlocked(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + var v1 int32 + _, _ = pos, v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_APP) != 0 && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + v1 = int32(2) + } else { + v1 = int32(1) + } + pos = (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, 0, v1) + if pos < 0 { + return pos + } + /* Adjust for data in buffer. */ + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + pos += int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos) - int32((*TFILE)(unsafe.Pointer(f)).Frend)) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwbase != 0 { + pos += int64(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + } + return pos +} + +func X__ftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var pos Toff_t + _, _, _ = __need_unlock, pos, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + pos = X__ftello_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return pos +} + +func Xftell(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + _ = pos + pos = X__ftello(tls, f) + if pos > int64(0x7fffffff) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + return int32(pos) +} + +func Xftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ftello(tls, f) +} + +func X__do_orphaned_stdio_locks(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks + for { + if !(f != 0) { + break + } + _a_barrier(tls) + AtomicStorePInt32(f+76, int32(0x40000000)) + _a_barrier(tls) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } +} + +func X__unlist_locked_file(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = (*TFILE)(unsafe.Pointer(f)).Fprev_locked + } + if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } else { + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } + } +} + +func X__register_locked_file(tls *TLS, f uintptr, self Tpthread_t) { + if __ccgo_strace { + trc("tls=%v f=%v self=%v, (%v:)", tls, f, self, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount = int32(1) + (*TFILE)(unsafe.Pointer(f)).Fprev_locked = uintptr(0) + (*TFILE)(unsafe.Pointer(f)).Fnext_locked = (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = f + } + (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks = f +} + +func Xftrylockfile(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old, owner, tid, v1, v3 int32 + var self Tpthread_t + var v2 uintptr + var v5 bool + _, _, _, _, _, _, _, _ = old, owner, self, tid, v1, v2, v3, v5 + self = uintptr(___get_tp(tls)) + tid = (*t__pthread)(unsafe.Pointer(self)).Ftid + owner = AtomicLoadPInt32(f + 76) + if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int32(0x7fffffff) { + return -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount++ + return 0 + } + if owner < 0 { + v1 = Int32FromInt32(0) + owner = v1 + AtomicStorePInt32(f+76, v1) + } + if v5 = owner != 0; !v5 { + v2 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v2, tid) != 0) { + old = _a_ll(tls, v2) + } + _a_barrier(tls) + v3 = old + goto _4 + _4: + } + if v5 || v3 != 0 { + return -int32(1) + } + X__register_locked_file(tls, f, self) + return 0 +} + +func Xfunlockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int32(1) { + X__unlist_locked_file(tls, f) + (*TFILE)(unsafe.Pointer(f)).Flockcount = 0 + ___unlockfile(tls, f) + } else { + (*TFILE)(unsafe.Pointer(f)).Flockcount-- + } +} + +func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mode=%v, (%v:)", tls, f, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v3, v4 int32 + var v2 Tlocale_t + _, _, _, _, _ = __need_unlock, v1, v2, v3, v4 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if mode != 0 { + if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + v2 = uintptr(unsafe.Pointer(&X__c_locale)) + } else { + v2 = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + } + (*TFILE)(unsafe.Pointer(f)).Flocale = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fmode != 0) { + if mode > 0 { + v4 = int32(1) + } else { + v4 = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = v4 + } + } + mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return mode +} + +func Xfwprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__fwritex(tls *TLS, s uintptr, l Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v, (%v:)", tls, s, l, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + _, _ = i, n + i = uint32(0) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return uint32(0) + } + if l > uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwend)-int32((*TFILE)(unsafe.Pointer(f)).Fwpos)) { + return (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, l) + } + if (*TFILE)(unsafe.Pointer(f)).Flbf >= 0 { + /* Match /^(.*\n|)/ */ + i = l + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint32(1))))) != int32('\n')) { + break + } + goto _1 + _1: + ; + i-- + } + if i != 0 { + n = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, i) + if n < i { + return n + } + s += uintptr(i) + l -= i + } + } + _memcpy(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, s, l) + *(*uintptr)(unsafe.Pointer(f + 20)) += uintptr(l) + return l + i +} + +func Xfwrite(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var k, l Tsize_t + var v2 uint32 + _, _, _, _, _ = __need_unlock, k, l, v1, v2 + l = size * nmemb + if !(size != 0) { + nmemb = uint32(0) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + k = X__fwritex(tls, src, l, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if k == l { + v2 = nmemb + } else { + v2 = k / size + } + return v2 +} + +func Xfwrite_unlocked(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwrite(tls, src, size, nmemb, f) +} + +func Xfwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwscanf(tls, f, fmt, va) +} + +func _locking_getc1(tls *TLS, f uintptr) (r int32) { + var c, old, old1, v11, v12, v2, v4, v8 int32 + var v1, v10, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, v1, v10, v11, v12, v2, v4, v5, v6, v7, v8 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v7, 0) != 0) { + old1 = _a_ll(tls, v7) + } + _a_barrier(tls) + v8 = old1 + goto _9 +_9: + if v8&int32(MAYBE_WAITERS) != 0 { + v10 = f + 76 + v11 = int32(1) + v12 = int32(1) + if v12 != 0 { + v12 = int32(FUTEX_PRIVATE) + } + if v11 < Int32FromInt32(0) { + v11 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)|v12), v11) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)), v11) != 0 + } + return c +} + +func Xgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc1(tls, v1) + goto _3 +_3: + return v2 +} + +func X_IO_getc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc(tls, f1) +} + +func Xgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + return v1 +} + +func X_IO_getc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func Xfgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func _locking_getc2(tls *TLS, f uintptr) (r int32) { + var c, old, old1, v11, v12, v2, v4, v8 int32 + var v1, v10, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, v1, v10, v11, v12, v2, v4, v5, v6, v7, v8 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v7, 0) != 0) { + old1 = _a_ll(tls, v7) + } + _a_barrier(tls) + v8 = old1 + goto _9 +_9: + if v8&int32(MAYBE_WAITERS) != 0 { + v10 = f + 76 + v11 = int32(1) + v12 = int32(1) + if v12 != 0 { + v12 = int32(FUTEX_PRIVATE) + } + if v11 < Int32FromInt32(0) { + v11 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)|v12), v11) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v10), int32(Int32FromInt32(FUTEX_WAKE)), v11) != 0 + } + return c +} + +func Xgetchar(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + l = AtomicLoadPInt32(v1 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc2(tls, v1) + goto _3 +_3: + return v2 +} + +func Xgetchar_unlocked(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v3 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return v1 +} + +func Xgetdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v3, v4, v5 int32 + var i, k, m, v11 Tsize_t + var tmp, z, v6, v7, v8, v9 uintptr + var v10 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, k, m, tmp, z, v1, v10, v11, v3, v4, v5, v6, v7, v8, v9 + i = uint32(0) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !(n != 0) || !(s != 0) { + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(*(*uintptr)(unsafe.Pointer(s)) != 0) { + *(*Tsize_t)(unsafe.Pointer(n)) = uint32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, delim, uint32(int32((*TFILE)(unsafe.Pointer(f)).Frend)-int32((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v3 = int32(z) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + int32(1) + } else { + v3 = int32((*TFILE)(unsafe.Pointer(f)).Frend) - int32((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint32(v3) + } else { + z = uintptr(0) + k = uint32(0) + } + if i+k >= *(*Tsize_t)(unsafe.Pointer(n)) { + m = i + k + uint32(2) + if !(z != 0) && m < Uint32FromUint32(0xffffffff)/Uint32FromInt32(4) { + m += m / uint32(2) + } + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + m = i + k + uint32(2) + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + /* Copy as much as fits and ensure no + * pushback remains in the FILE buf. */ + k = *(*Tsize_t)(unsafe.Pointer(n)) - i + _memcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + *(*int32)(unsafe.Pointer(f + 72)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + } + *(*uintptr)(unsafe.Pointer(s)) = tmp + *(*Tsize_t)(unsafe.Pointer(n)) = m + } + if k != 0 { + _memcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 4)) += uintptr(k) + i += k + } + if z != 0 { + break + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 4 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 == -int32(1) { + if !(i != 0) || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + break + } + /* If the byte read by getc won't fit without growing the + * output buffer, push it back for next iteration. */ + if i+uint32(1) >= *(*Tsize_t)(unsafe.Pointer(n)) { + v9 = f + 4 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + *(*uint8)(unsafe.Pointer(v8)) = uint8(c) + } else { + v10 = uint8(c) + v11 = i + i++ + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(v11))) = v10 + if int32(v10) == delim { + break + } + } + goto _2 + _2: + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(i))) = uint8(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(i) +} + +func X__getdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, delim, f) +} + +func Xgetline(tls *TLS, s uintptr, n uintptr, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, int32('\n'), f) +} + +func Xgets(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v3 int32 + var i, v6 Tsize_t + var v4, v5 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, v1, v2, v3, v4, v5, v6 + i = uint32(0) + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdin_FILE))+76) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + for { + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v5 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 4 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + v2 = v3 + c = v2 + if !(v2 != -int32(1) && c != int32('\n')) { + break + } + v6 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v6))) = uint8(c) + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + if c != int32('\n') && (!((*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Fflags&Uint32FromInt32(F_EOF) != 0) || !(i != 0)) { + s = uintptr(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return s +} + +func Xgetw(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* x at bp+0 */ int32 + _ = v1 + if Xfread(tls, bp, uint32(4), uint32(1), f) != 0 { + v1 = *(*int32)(unsafe.Pointer(bp)) + } else { + v1 = -int32(1) + } + return v1 +} + +func Xgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, f) +} + +func Xgetwchar(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) +} + +func Xgetwchar_unlocked(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetwchar(tls) +} + +var _ofl_head uintptr +var _ofl_lock [1]int32 + +func X__ofl_lock(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) + return uintptr(unsafe.Pointer(&_ofl_head)) +} + +func X__ofl_unlock(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) +} + +func X__ofl_add(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var head uintptr + _ = head + head = X__ofl_lock(tls) + (*TFILE)(unsafe.Pointer(f)).Fnext = *(*uintptr)(unsafe.Pointer(head)) + if *(*uintptr)(unsafe.Pointer(head)) != 0 { + (*TFILE)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(head)))).Fprev = f + } + *(*uintptr)(unsafe.Pointer(head)) = f + X__ofl_unlock(tls) + return f +} + +type Tcookie1 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t +} + +type Tms_FILE = struct { + F__ccgo_align [0]uint32 + Ff TFILE + Fc Tcookie1 + Fbuf [1024]uint8 +} + +func _ms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie1)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie1)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(int32(0x7fffffff)-base) { + goto fail + } + v2 = uint32(int64(base) + off) + (*Tcookie1)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _ms_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _ms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint32(0) + } + } + if len1+(*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Fspace { + len2 = uint32(2)*(*Tcookie1)(unsafe.Pointer(c)).Fspace + uint32(1) | ((*Tcookie1)(unsafe.Pointer(c)).Fpos + len1 + uint32(1)) + newbuf = Xrealloc(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf, len2) + if !(newbuf != 0) { + return uint32(0) + } + v1 = newbuf + (*Tcookie1)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fspace), 0, len2-(*Tcookie1)(unsafe.Pointer(c)).Fspace) + (*Tcookie1)(unsafe.Pointer(c)).Fspace = len2 + } + _memcpy(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c + 8)) += len1 + if (*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Flen1 { + (*Tcookie1)(unsafe.Pointer(c)).Flen1 = (*Tcookie1)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie1)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _ms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_memstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint32(1192)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint32(1)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(144)) + Xmemset(tls, f+144, 0, uint32(24)) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 144 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint32FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 168 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint32(1024) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_ms_write) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_ms_seek) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_ms_close) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fmode = -int32(1) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + return X__ofl_add(tls, f) +} + +type Tcookie2 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t + Fmbs Tmbstate_t +} + +type Twms_FILE = struct { + F__ccgo_align [0]uint32 + Ff TFILE + Fc Tcookie2 + Fbuf [1]uint8 + F__ccgo_pad3 [7]byte +} + +func _wms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie2)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie2)(unsafe.Pointer(c)).Flen1, + } + base = int32(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*4))) + if off < int64(-base) || off > int64(Int32FromInt32(0x7fffffff)/Int32FromInt32(4)-base) { + goto fail + } + Xmemset(tls, c+24, 0, uint32(8)) + v2 = uint32(int64(base) + off) + (*Tcookie2)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _wms_write(tls *TLS, f uintptr, _buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _buf + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _wms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint32(0) + } + } + if len1+(*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Fspace { + len2 = uint32(2)*(*Tcookie2)(unsafe.Pointer(c)).Fspace + uint32(1) | ((*Tcookie2)(unsafe.Pointer(c)).Fpos + len1 + uint32(1)) + if len2 > uint32(Int32FromInt32(0x7fffffff)/Int32FromInt32(4)) { + return uint32(0) + } + newbuf = Xrealloc(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf, len2*uint32(4)) + if !(newbuf != 0) { + return uint32(0) + } + v1 = newbuf + (*Tcookie2)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fspace)*4, 0, uint32(4)*(len2-(*Tcookie2)(unsafe.Pointer(c)).Fspace)) + (*Tcookie2)(unsafe.Pointer(c)).Fspace = len2 + } + len2 = Xmbsnrtowcs(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fpos)*4, bp, len1, (*Tcookie2)(unsafe.Pointer(c)).Fspace-(*Tcookie2)(unsafe.Pointer(c)).Fpos, c+24) + if len2 == uint32(-Int32FromInt32(1)) { + return uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(c + 8)) += len2 + if (*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Flen1 { + (*Tcookie2)(unsafe.Pointer(c)).Flen1 = (*Tcookie2)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie2)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _wms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_wmemstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint32(184)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint32(4)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint32(144)) + Xmemset(tls, f+144, 0, uint32(32)) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 144 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint32FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*Twchar_t)(unsafe.Pointer(buf)) = uint32(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 176 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint32(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_wms_write) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_wms_seek) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_wms_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+76, -int32(1)) + } + Xfwide(tls, f, int32(1)) + return X__ofl_add(tls, f) +} + +func Xpclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pid Tpid_t + var r, v1 int32 + var _ /* status at bp+0 */ int32 + _, _, _ = pid, r, v1 + pid = (*TFILE)(unsafe.Pointer(f)).Fpipe_pid + Xfclose(tls, f) + for { + v1 = int32(X__syscall4(tls, int32(SYS_wait4), pid, int32(bp), int32(Int32FromInt32(0)), int32(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EINTR)) { + break + } + } + if r < 0 { + return X__syscall_ret(tls, uint32(r)) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xperror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + var __need_unlock, old_mode, v1 int32 + var errstr, f, old_locale uintptr + _, _, _, _, _, _ = __need_unlock, errstr, f, old_locale, old_mode, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + errstr = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if msg != 0 && *(*uint8)(unsafe.Pointer(msg)) != 0 { + Xfwrite(tls, msg, Xstrlen(tls, msg), uint32(1), f) + Xfputc(tls, int32(':'), f) + Xfputc(tls, int32(' '), f) + } + Xfwrite(tls, errstr, Xstrlen(tls, errstr), uint32(1), f) + Xfputc(tls, int32('\n'), f) + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) + _ = ap + return ret +} + +func _locking_putc1(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, v12, v13, v2, v4, v9 int32 + var v1, v11, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, v1, v11, v12, v13, v2, v4, v5, v6, v7, v8, v9 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 20 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v8, 0) != 0) { + old1 = _a_ll(tls, v8) + } + _a_barrier(tls) + v9 = old1 + goto _10 +_10: + if v9&int32(MAYBE_WAITERS) != 0 { + v11 = f + 76 + v12 = int32(1) + v13 = int32(1) + if v13 != 0 { + v13 = int32(FUTEX_PRIVATE) + } + if v12 < Int32FromInt32(0) { + v12 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)|v13), v12) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)), v12) != 0 + } + return c +} + +func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc1(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func X_IO_putc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc(tls, c1, f1) +} + +func Xputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + return v1 +} + +func X_IO_putc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func Xfputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func _locking_putc2(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, v12, v13, v2, v4, v9 int32 + var v1, v11, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, v1, v11, v12, v13, v2, v4, v5, v6, v7, v8, v9 + v1 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = old == 0 && !(_a_sc(tls, v1, Int32FromInt32(MAYBE_WAITERS)-Int32FromInt32(1)) != 0) { + old = _a_ll(tls, v1) + } + _a_barrier(tls) + v2 = old + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 20 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 76 + _a_barrier(tls) + for cond := true; cond; cond = !(_a_sc(tls, v8, 0) != 0) { + old1 = _a_ll(tls, v8) + } + _a_barrier(tls) + v9 = old1 + goto _10 +_10: + if v9&int32(MAYBE_WAITERS) != 0 { + v11 = f + 76 + v12 = int32(1) + v13 = int32(1) + if v13 != 0 { + v13 = int32(FUTEX_PRIVATE) + } + if v12 < Int32FromInt32(0) { + v12 = int32(INT_MAX) + } + _ = X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)|v13), v12) != -int32(ENOSYS) || X__syscall3(tls, int32(SYS_futex), int32(v11), int32(Int32FromInt32(FUTEX_WAKE)), v12) != 0 + } + return c +} + +func Xputchar(tls *TLS, c1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v, (%v:)", tls, c1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + l = AtomicLoadPInt32(v2 + 76) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 20 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc2(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xputchar_unlocked(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v2 = uint8(c) + v4 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 20 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(c))) + } + return v1 +} + +func Xputs(tls *TLS, s uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1, v2 int32 + var v3 uint8 + var v4, v5 uintptr + var v6 bool + _, _, _, _, _, _, _, _ = __need_unlock, r, v1, v2, v3, v4, v5, v6 + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdout_FILE))+76) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + if v6 = Xfputs(tls, s, uintptr(unsafe.Pointer(&X__stdout_FILE))) < 0; !v6 { + if int32(uint8(Int32FromUint8('\n'))) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v3 = uint8(Int32FromUint8('\n')) + v5 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 20 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = v3 + v2 = int32(v3) + } else { + v2 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(Int32FromUint8('\n')))) + } + } + r = -BoolInt32(v6 || v2 < 0) + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } + return r +} + +func Xputw(tls *TLS, _x int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _x=%v f=%v, (%v:)", tls, _x, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*int32)(unsafe.Pointer(bp)) = _x + return int32(Xfwrite(tls, bp, uint32(4), uint32(1), f)) - int32(1) +} + +func Xputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, f) +} + +func Xputwchar(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, uintptr(unsafe.Pointer(&X__stdout_FILE))) +} + +func Xputwchar_unlocked(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputwchar(tls, c) +} + +func Xremove(tls *TLS, path uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int32(SYS_unlink), int32(path))) + if r == -int32(EISDIR) { + r = int32(X__syscall1(tls, int32(SYS_rmdir), int32(path))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xrename(tls *TLS, old uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_rename), int32(old), int32(new1)))) +} + +func Xrewind(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + X__fseeko_unlocked(tls, f, 0, 0) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_scanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscanf(tls, fmt, va) +} + +func Xsetbuf(tls *TLS, f uintptr, buf uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v, (%v:)", tls, f, buf, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, uint32(BUFSIZ)) +} + +func Xsetbuffer(tls *TLS, f uintptr, buf uintptr, size Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v size=%v, (%v:)", tls, f, buf, size, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, size) +} + +func Xsetlinebuf(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xsetvbuf(tls, f, uintptr(0), int32(_IOLBF), uint32(0)) +} + +/* The behavior of this function is undefined except when it is the first + * operation on the stream, so the presence or absence of locking is not + * observable in a program whose behavior is defined. Thus no locking is + * performed here. No allocation of buffers is performed, but a buffer + * provided by the caller is used as long as it is suitably sized. */ + +func Xsetvbuf(tls *TLS, f uintptr, buf uintptr, type1 int32, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v type1=%v size=%v, (%v:)", tls, f, buf, type1, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if type1 == int32(_IONBF) { + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(0) + } else { + if type1 == int32(_IOLBF) || type1 == _IOFBF { + if buf != 0 && size >= uint32(UNGET) { + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + UintptrFromInt32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = size - uint32(UNGET) + } + if type1 == int32(_IOLBF) && (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + } else { + return -int32(1) + } + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_SVB) + return 0 +} + +func Xsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsnprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xsprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_sscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsscanf(tls, s, fmt, va) +} + +var _buf5 [8]uint8 + +func init() { + p := unsafe.Pointer(&X__stderr_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 36)) = __ccgo_fp(X__stdio_write) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +var _buf6 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdin_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 32)) = __ccgo_fp(X__stdio_read) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +var _buf7 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdout_FILE) + *(*uintptr)(unsafe.Add(p, 12)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 36)) = __ccgo_fp(X__stdout_write) + *(*uintptr)(unsafe.Add(p, 40)) = __ccgo_fp(X__stdio_seek) +} + +func Xswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xswscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_swscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xswscanf(tls, s, fmt, va) +} + +const MAXTRIES = 100 + +func Xtempnam(tls *TLS, dir uintptr, pfx uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v pfx=%v, (%v:)", tls, dir, pfx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var dl, l, pl Tsize_t + var r, try int32 + var _ /* s at bp+1 */ [4096]uint8 + _, _, _, _, _ = dl, l, pl, r, try + if !(dir != 0) { + dir = __ccgo_ts + 1406 + } + if !(pfx != 0) { + pfx = __ccgo_ts + 1411 + } + dl = Xstrlen(tls, dir) + pl = Xstrlen(tls, pfx) + l = dl + uint32(1) + pl + uint32(1) + uint32(6) + if l >= uint32(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + _memcpy(tls, bp+1, dir, dl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl] = uint8('/') + _memcpy(tls, bp+1+uintptr(dl)+uintptr(1), pfx, pl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl+uint32(1)+pl] = uint8('_') + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[l] = uint8(0) + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(l)-uintptr(6)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(bp+1), int32(bp), int32(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + return Xstrdup(tls, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpfile(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var f uintptr + var fd, try int32 + var _ /* s at bp+0 */ [20]uint8 + _, _, _ = f, fd, try + *(*[20]uint8)(unsafe.Pointer(bp)) = [20]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'f', 'i', 'l', 'e', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+uintptr(13)) + fd = X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_open), int32(bp), int32(Int32FromInt32(O_RDWR)|Int32FromInt32(O_CREAT)|Int32FromInt32(O_EXCL)|Int32FromInt32(O_LARGEFILE)), int32(Int32FromInt32(0600))))) + if fd >= 0 { + X__syscall1(tls, int32(SYS_unlink), int32(bp)) + f = X__fdopen(tls, fd, __ccgo_ts+1416) + if !(f != 0) { + X__syscall1(tls, int32(SYS_close), fd) + } + return f + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpnam(tls *TLS, buf uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, try int32 + var v2 uintptr + var _ /* s at bp+1 */ [19]uint8 + _, _, _ = r, try, v2 + *(*[19]uint8)(unsafe.Pointer(bp + 1)) = [19]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'n', 'a', 'm', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(12)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(bp+1), int32(bp), int32(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + if buf != 0 { + v2 = buf + } else { + v2 = uintptr(unsafe.Pointer(&_internal1)) + } + return Xstrcpy(tls, v2, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +var _internal1 [20]uint8 + +func Xungetc(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var v2, v3 uintptr + _, _, _, _ = __need_unlock, v1, v2, v3 + if c == -int32(1) { + return c + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + v3 = f + 4 + *(*uintptr)(unsafe.Pointer(v3))-- + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uint8)(unsafe.Pointer(v2)) = uint8(c) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(uint8(c)) +} + +func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, l, v1, v2 int32 + var loc Tlocale_t + var ploc, v4, v5, p6 uintptr + var v3 bool + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 + ploc = uintptr(___get_tp(tls)) + 88 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if v3 = !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || c == uint32(0xffffffff); !v3 { + v2 = int32(Xwcrtomb(tls, bp, c, uintptr(0))) + l = v2 + } + if v3 || v2 < 0 || (*TFILE)(unsafe.Pointer(f)).Frpos < (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET)+uintptr(l) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(0xffffffff) + } + if BoolInt32(c < uint32(128)) != 0 { + v5 = f + 4 + *(*uintptr)(unsafe.Pointer(v5))-- + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uint8)(unsafe.Pointer(v4)) = uint8(c) + } else { + p6 = f + 4 + *(*uintptr)(unsafe.Pointer(p6)) -= uintptr(l) + _memcpy(tls, *(*uintptr)(unsafe.Pointer(p6)), bp, uint32(l)) + } + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xvasprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap2 Tva_list + var l int32 + var v1 uintptr + var v2 bool + _, _, _, _ = ap2, l, v1, v2 + ap2 = ap + l = Xvsnprintf(tls, uintptr(0), uint32(0), fmt, ap2) + _ = ap2 + if v2 = l < 0; !v2 { + v1 = Xmalloc(tls, uint32(l)+uint32(1)) + *(*uintptr)(unsafe.Pointer(s)) = v1 + } + if v2 || !(v1 != 0) { + return -int32(1) + } + return Xvsnprintf(tls, *(*uintptr)(unsafe.Pointer(s)), uint32(l)+uint32(1), fmt, ap) +} + +func Xvdprintf(tls *TLS, fd int32, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v ap=%v, (%v:)", tls, fd, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fwrite: __ccgo_fp(X__stdio_write), + Fbuf: fmt, + Ffd: fd, + Flock: -int32(1), + Flbf: -int32(1), + } + return Xvfprintf(tls, bp, fmt, ap) +} + +const ALT_FORM = 8 +const FLAGMASK = 75913 +const GROUPED = 128 +const LDBL_EPSILON3 = 2.22044604925031308085e-16 +const LEFT_ADJ = 8192 +const MARK_POS = 2048 +const PAD_POS = 1 +const ZERO_PAD = 65536 + +const _BARE = 0 +const _LPRE = 1 +const _LLPRE = 2 +const _HPRE = 3 +const _HHPRE = 4 +const _BIGLPRE = 5 +const _ZTPRE = 6 +const _JPRE = 7 +const _STOP = 8 +const _PTR = 9 +const _INT = 10 +const _UINT = 11 +const _ULLONG = 12 +const _LONG = 13 +const _ULONG = 14 +const _SHORT = 15 +const _USHORT = 16 +const _CHAR = 17 +const _UCHAR = 18 +const _LLONG = 19 +const _SIZET = 20 +const _IMAX = 21 +const _UMAX = 22 +const _PDIFF = 23 +const _UIPTR = 24 +const _DBL = 25 +const _LDBL = 26 +const _NOARG = 27 +const _MAXSTATE = 28 + +var _states = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +type Targ = struct { + F__ccgo_align [0]uint32 + Ff [0]float64 + Fp [0]uintptr + Fi Tuintmax_t +} + +func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint32(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0) { + X__fwritex(tls, s, l, f) + } +} + +func _pad3(tls *TLS, f uintptr, c uint8, w int32, l int32, fl int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uint32 + var _ /* pad at bp+0 */ [256]uint8 + _ = v1 + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0 || l >= w { + return + } + l = w - l + if uint32(l) > uint32(256) { + v1 = uint32(256) + } else { + v1 = uint32(l) + } + Xmemset(tls, bp, int32(c), v1) + for { + if !(uint32(l) >= uint32(256)) { + break + } + _out(tls, f, bp, uint32(256)) + goto _2 + _2: + ; + l = int32(uint32(l) - Uint32FromInt64(256)) + } + _out(tls, f, bp, uint32(l)) +} + +var _xdigits1 = [16]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} + +func _fmt_x(tls *TLS, x Tuintmax_t, s uintptr, lower int32) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(_xdigits1[x&uint64(15)]) | lower) + goto _1 + _1: + ; + x >>= uint64(4) + } + return s +} + +func _fmt_o(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x&uint64(7)) + goto _1 + _1: + ; + x >>= uint64(3) + } + return s +} + +func _fmt_u(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var y uint32 + var v2, v4 uintptr + _, _, _ = y, v2, v4 + for { + if !(x > uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1))) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x%uint64(10)) + goto _1 + _1: + ; + x /= uint64(10) + } + y = uint32(x) + for { + if !(y != 0) { + break + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(uint32('0') + y%uint32(10)) + goto _3 + _3: + ; + y /= uint32(10) + } + return s +} + +// C documentation +// +// /* Do not override this check. The floating point printing code below +// * depends on the float.h constants being right. If they are wrong, it +// * may overflow the stack. */ +type Tcompiler_defines_long_double_incorrectly = [1]uint8 + +func _fmt_fp(tls *TLS, f uintptr, y float64, w int32, p int32, fl int32, t int32) (r1 int32) { + bp := tls.Alloc(560) + defer tls.Free(560) + var a, b, d, ebuf, estr, prefix, r, s, s1, s2, s3, s4, z, v10, v11, v13, v14, v15, v17, v18, v19, v20, v21, v24, v27, v28, v31, v32, v43, v44, v46, v48, v49, v5, v51, v54, v55, v56, v6 uintptr + var carry, carry1, rm, x2 Tuint32_t + var e, i, j, l, need, pl, re, sh, sh1, x, v12, v16, v22, v25, v36, v37, v38, v39, v40, v41, v42, v45, v52, v57, v58, v7, v8, v9 int32 + var round, round1, small float64 + var x1 Tuint64_t + var v1, v3 uint64 + var _ /* __u at bp+0 */ struct { + F__ccgo_align [0]uint32 + F__i [0]uint64 + F__f float64 + } + var _ /* big at bp+8 */ [126]Tuint32_t + var _ /* buf at bp+516 */ [22]uint8 + var _ /* e2 at bp+512 */ int32 + var _ /* ebuf0 at bp+538 */ [12]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, carry, carry1, d, e, ebuf, estr, i, j, l, need, pl, prefix, r, re, rm, round, round1, s, s1, s2, s3, s4, sh, sh1, small, x, x1, x2, z, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v24, v25, v27, v28, v3, v31, v32, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v48, v49, v5, v51, v52, v54, v55, v56, v57, v58, v6, v7, v8, v9 + *(*int32)(unsafe.Pointer(bp + 512)) = 0 + prefix = __ccgo_ts + 1419 + ebuf = bp + 538 + uintptr(Uint32FromInt32(3)*Uint32FromInt64(4)) + pl = int32(1) + *(*float64)(unsafe.Pointer(bp)) = y + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if int32(v1>>Int32FromInt32(63)) != 0 { + y = -y + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(3) + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(6) + } else { + prefix++ + pl = Int32FromInt32(0) + } + } + } + *(*float64)(unsafe.Pointer(bp)) = y + v3 = *(*uint64)(unsafe.Pointer(bp)) + goto _4 +_4: + if !(BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< int32(3)+pl { + v7 = w + } else { + v7 = int32(3) + pl + } + return v7 + } + y = Xfrexpl(tls, y, bp+512) * Float64FromInt32(2) + if y != 0 { + *(*int32)(unsafe.Pointer(bp + 512))-- + } + if t|int32(32) == int32('a') { + round = Float64FromFloat64(8) + if t&int32(32) != 0 { + prefix += uintptr(9) + } + pl += int32(2) + if p < 0 || p >= Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)-Int32FromInt32(1) { + re = 0 + } else { + re = Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4) - Int32FromInt32(1) - p + } + if re != 0 { + round *= float64(Int32FromInt32(1) << (Int32FromInt32(LDBL_MANT_DIG) % Int32FromInt32(4))) + for { + v8 = re + re-- + if !(v8 != 0) { + break + } + round *= Float64FromInt32(16) + } + if int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + y = -y + y -= round + y += round + y = -y + } else { + y += round + y -= round + } + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v9 = -*(*int32)(unsafe.Pointer(bp + 512)) + } else { + v9 = *(*int32)(unsafe.Pointer(bp + 512)) + } + estr = _fmt_u(tls, uint64(v9), ebuf) + if estr == ebuf { + estr-- + v10 = estr + *(*uint8)(unsafe.Pointer(v10)) = uint8('0') + } + estr-- + v11 = estr + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v12 = int32('-') + } else { + v12 = int32('+') + } + *(*uint8)(unsafe.Pointer(v11)) = uint8(v12) + estr-- + v13 = estr + *(*uint8)(unsafe.Pointer(v13)) = uint8(t + (Int32FromUint8('p') - Int32FromUint8('a'))) + s = bp + 516 + for cond := true; cond; cond = y != 0 { + x = int32(y) + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32(_xdigits1[x]) | t&int32(32)) + y = Float64FromInt32(16) * (y - float64(x)) + if int32(s)-t__predefined_ptrdiff_t(bp+516) == int32(1) && (y != 0 || p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + v15 = s + s++ + *(*uint8)(unsafe.Pointer(v15)) = uint8('.') + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(2)-(int32(ebuf)-int32(estr))-pl { + return -int32(1) + } + if p != 0 && int32(s)-t__predefined_ptrdiff_t(bp+516)-int32(2) < p { + l = p + int32(2) + (int32(ebuf) - int32(estr)) + } else { + l = int32(s) - t__predefined_ptrdiff_t(bp+516) + (int32(ebuf) - int32(estr)) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _out(tls, f, bp+516, uint32(int32(s)-t__predefined_ptrdiff_t(bp+516))) + _pad3(tls, f, uint8('0'), l-(int32(ebuf)-int32(estr))-(int32(s)-t__predefined_ptrdiff_t(bp+516)), 0, 0) + _out(tls, f, estr, uint32(int32(ebuf)-int32(estr))) + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v16 = w + } else { + v16 = pl + l + } + return v16 + } + if p < 0 { + p = int32(6) + } + if y != 0 { + y *= Float64FromFloat64(2.68435456e+08) + *(*int32)(unsafe.Pointer(bp + 512)) -= int32(28) + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v18 = bp + 8 + z = v18 + v17 = v18 + r = v17 + a = v17 + } else { + v20 = bp + 8 + uintptr(Uint32FromInt64(504)/Uint32FromInt64(4))*4 - UintptrFromInt32(LDBL_MANT_DIG)*4 - UintptrFromInt32(1)*4 + z = v20 + v19 = v20 + r = v19 + a = v19 + } + for cond := true; cond; cond = y != 0 { + *(*Tuint32_t)(unsafe.Pointer(z)) = uint32(y) + v21 = z + z += 4 + y = Float64FromInt32(1000000000) * (y - float64(*(*Tuint32_t)(unsafe.Pointer(v21)))) + } + for *(*int32)(unsafe.Pointer(bp + 512)) > 0 { + carry = uint32(0) + if int32(29) < *(*int32)(unsafe.Pointer(bp + 512)) { + v22 = int32(29) + } else { + v22 = *(*int32)(unsafe.Pointer(bp + 512)) + } + sh = v22 + d = z - uintptr(1)*4 + for { + if !(d >= a) { + break + } + x1 = uint64(*(*Tuint32_t)(unsafe.Pointer(d)))< a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0) { + z -= 4 + } + *(*int32)(unsafe.Pointer(bp + 512)) -= sh + } + for *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + carry1 = uint32(0) + if int32(9) < -*(*int32)(unsafe.Pointer(bp + 512)) { + v25 = int32(9) + } else { + v25 = -*(*int32)(unsafe.Pointer(bp + 512)) + } + sh1 = v25 + need = int32(uint32(1) + (uint32(p)+Uint32FromInt32(LDBL_MANT_DIG)/Uint32FromUint32(3)+uint32(8))/uint32(9)) + d = a + for { + if !(d < z) { + break + } + rm = *(*Tuint32_t)(unsafe.Pointer(d)) & uint32(int32(1)<>sh1 + carry1 + carry1 = uint32(Int32FromInt32(1000000000)>>sh1) * rm + goto _26 + _26: + ; + d += 4 + } + if !(*(*Tuint32_t)(unsafe.Pointer(a)) != 0) { + a += 4 + } + if carry1 != 0 { + v27 = z + z += 4 + *(*Tuint32_t)(unsafe.Pointer(v27)) = carry1 + } + /* Avoid (slow!) computation past requested precision */ + if t|int32(32) == int32('f') { + v28 = r + } else { + v28 = a + } + b = v28 + if (int32(z)-int32(b))/4 > need { + z = b + uintptr(need)*4 + } + *(*int32)(unsafe.Pointer(bp + 512)) += sh1 + } + if a < z { + i = int32(10) + e = Int32FromInt32(9) * ((int32(r) - int32(a)) / 4) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _29 + _29: + ; + i *= int32(10) + e++ + } + } else { + e = 0 + } + /* Perform rounding: j is precision after the radix (possibly neg) */ + j = p - BoolInt32(t|int32(32) != int32('f'))*e - BoolInt32(t|int32(32) == int32('g') && p != 0) + if j < int32(9)*((int32(z)-int32(r))/4-int32(1)) { + /* We avoid C's broken division of negative numbers */ + d = r + uintptr(1)*4 + uintptr((j+Int32FromInt32(9)*Int32FromInt32(LDBL_MAX_EXP))/Int32FromInt32(9)-Int32FromInt32(LDBL_MAX_EXP))*4 + j += Int32FromInt32(9) * Int32FromInt32(LDBL_MAX_EXP) + j %= int32(9) + i = int32(10) + j++ + for { + if !(j < int32(9)) { + break + } + goto _30 + _30: + ; + i *= int32(10) + j++ + } + x2 = *(*Tuint32_t)(unsafe.Pointer(d)) % uint32(i) + /* Are there any significant digits past j? */ + if x2 != 0 || d+uintptr(1)*4 != z { + round1 = Float64FromInt32(2) / Float64FromFloat64(2.22044604925031308085e-16) + if *(*Tuint32_t)(unsafe.Pointer(d))/uint32(i)&uint32(1) != 0 || i == int32(1000000000) && d > a && *(*Tuint32_t)(unsafe.Pointer(d + uintptr(-Int32FromInt32(1))*4))&uint32(1) != 0 { + round1 += Float64FromInt32(2) + } + if x2 < uint32(i/int32(2)) { + small = Float64FromFloat64(0.5) + } else { + if x2 == uint32(i/int32(2)) && d+uintptr(1)*4 == z { + small = Float64FromFloat64(1) + } else { + small = Float64FromFloat64(1.5) + } + } + if pl != 0 && int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + round1 *= float64(-Int32FromInt32(1)) + small *= float64(-Int32FromInt32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(d)) -= x2 + /* Decide whether to round by probing round+small */ + if round1+small != round1 { + *(*Tuint32_t)(unsafe.Pointer(d)) = *(*Tuint32_t)(unsafe.Pointer(d)) + uint32(i) + for *(*Tuint32_t)(unsafe.Pointer(d)) > uint32(999999999) { + v31 = d + d -= 4 + *(*Tuint32_t)(unsafe.Pointer(v31)) = uint32(0) + if d < a { + a -= 4 + v32 = a + *(*Tuint32_t)(unsafe.Pointer(v32)) = uint32(0) + } + *(*Tuint32_t)(unsafe.Pointer(d))++ + } + i = int32(10) + e = Int32FromInt32(9) * ((int32(r) - int32(a)) / 4) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _33 + _33: + ; + i *= int32(10) + e++ + } + } + } + if z > d+uintptr(1)*4 { + z = d + uintptr(1)*4 + } + } + for { + if !(z > a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0)) { + break + } + goto _34 + _34: + ; + z -= 4 + } + if t|int32(32) == int32('g') { + if !(p != 0) { + p++ + } + if p > e && e >= -int32(4) { + t-- + p -= e + int32(1) + } else { + t -= int32(2) + p-- + } + if !(uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + /* Count trailing zeros in last place */ + if z > a && *(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0 { + i = int32(10) + j = Int32FromInt32(0) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4))%uint32(i) == uint32(0)) { + break + } + goto _35 + _35: + ; + i *= int32(10) + j++ + } + } else { + j = int32(9) + } + if t|int32(32) == int32('f') { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))-j { + v37 = 0 + } else { + v37 = int32(9)*((int32(z)-int32(r))/4-int32(1)) - j + } + if p < v37 { + v36 = p + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))-j { + v38 = 0 + } else { + v38 = int32(9)*((int32(z)-int32(r))/4-int32(1)) - j + } + v36 = v38 + } + p = v36 + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))+e-j { + v40 = 0 + } else { + v40 = int32(9)*((int32(z)-int32(r))/4-int32(1)) + e - j + } + if p < v40 { + v39 = p + } else { + if 0 > int32(9)*((int32(z)-int32(r))/4-int32(1))+e-j { + v41 = 0 + } else { + v41 = int32(9)*((int32(z)-int32(r))/4-int32(1)) + e - j + } + v39 = v41 + } + p = v39 + } + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(1)-BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + return -int32(1) + } + l = int32(1) + p + BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) + if t|int32(32) == int32('f') { + if e > int32(INT_MAX)-l { + return -int32(1) + } + if e > 0 { + l += e + } + } else { + if e < 0 { + v42 = -e + } else { + v42 = e + } + estr = _fmt_u(tls, uint64(v42), ebuf) + for int32(ebuf)-int32(estr) < int32(2) { + estr-- + v43 = estr + *(*uint8)(unsafe.Pointer(v43)) = uint8('0') + } + estr-- + v44 = estr + if e < 0 { + v45 = int32('-') + } else { + v45 = int32('+') + } + *(*uint8)(unsafe.Pointer(v44)) = uint8(v45) + estr-- + v46 = estr + *(*uint8)(unsafe.Pointer(v46)) = uint8(t) + if int32(ebuf)-int32(estr) > int32(INT_MAX)-l { + return -int32(1) + } + l += int32(ebuf) - int32(estr) + } + if l > int32(INT_MAX)-pl { + return -int32(1) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + if t|int32(32) == int32('f') { + if a > r { + a = r + } + d = a + for { + if !(d <= r) { + break + } + s2 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if d != a { + for s2 > bp+516 { + s2-- + v48 = s2 + *(*uint8)(unsafe.Pointer(v48)) = uint8('0') + } + } else { + if s2 == bp+516+uintptr(9) { + s2-- + v49 = s2 + *(*uint8)(unsafe.Pointer(v49)) = uint8('0') + } + } + _out(tls, f, s2, uint32(int32(bp+516+uintptr(9))-int32(s2))) + goto _47 + _47: + ; + d += 4 + } + if p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+483, uint32(1)) + } + for { + if !(d < z && p > 0) { + break + } + s3 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + for s3 > bp+516 { + s3-- + v51 = s3 + *(*uint8)(unsafe.Pointer(v51)) = uint8('0') + } + if int32(9) < p { + v52 = int32(9) + } else { + v52 = p + } + _out(tls, f, s3, uint32(v52)) + goto _50 + _50: + ; + d += 4 + p -= int32(9) + } + _pad3(tls, f, uint8('0'), p+int32(9), int32(9), 0) + } else { + if z <= a { + z = a + uintptr(1)*4 + } + d = a + for { + if !(d < z && p >= 0) { + break + } + s4 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if s4 == bp+516+uintptr(9) { + s4-- + v54 = s4 + *(*uint8)(unsafe.Pointer(v54)) = uint8('0') + } + if d != a { + for s4 > bp+516 { + s4-- + v55 = s4 + *(*uint8)(unsafe.Pointer(v55)) = uint8('0') + } + } else { + v56 = s4 + s4++ + _out(tls, f, v56, uint32(1)) + if p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+483, uint32(1)) + } + } + if int32(bp+516+UintptrFromInt32(9))-int32(s4) < p { + v57 = int32(bp+516+UintptrFromInt32(9)) - int32(s4) + } else { + v57 = p + } + _out(tls, f, s4, uint32(v57)) + p -= int32(bp+516+uintptr(9)) - int32(s4) + goto _53 + _53: + ; + d += 4 + } + _pad3(tls, f, uint8('0'), p+int32(18), int32(18), 0) + _out(tls, f, estr, uint32(int32(ebuf)-int32(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v58 = w + } else { + v58 = pl + l + } + return v58 +} + +func _getint(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return i +} + +func _printf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, prefix, ws, z, v35, v39, v44, v48, v8 uintptr + var argpos, cnt, l, p, pl, t, w, xp, v34, v36, v40, v42, v43, v47, v5, v50, v6, v7 int32 + var fl, l10n, ps, st, v31 uint32 + var i Tsize_t + var v45, v49 bool + var _ /* arg at bp+8 */ Targ + var _ /* buf at bp+16 */ [24]uint8 + var _ /* mb at bp+48 */ [4]uint8 + var _ /* s at bp+0 */ uintptr + var _ /* wc at bp+40 */ [2]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, cnt, fl, i, l, l10n, p, pl, prefix, ps, st, t, w, ws, xp, z, v31, v34, v35, v36, v39, v40, v42, v43, v44, v45, v47, v48, v49, v5, v50, v6, v7, v8 + *(*uintptr)(unsafe.Pointer(bp)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + z = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('%') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('%')) { + break + } + goto _3 + _3: + ; + z++ + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } + if int32(z)-int32(a) > int32(INT_MAX)-cnt { + goto overflow + } + l = int32(z) - int32(a) + if f != 0 { + _out(tls, f, a, uint32(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + argpos = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) - int32('0') + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read field width */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*4)) = int32(_INT) + w = Int32FromInt32(0) + } else { + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp))++ + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint(tls, bp) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 3))) == int32('$') { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*4)) = int32(_INT) + p = Int32FromInt32(0) + } else { + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(4) + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp))++ + p = _getint(tls, bp) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states)) + uintptr(st)*58 + uintptr(int32(*(*uint8)(unsafe.Pointer(v8)))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + } else { + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } + } else { + if f != 0 { + _pop_arg(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + z = bp + 16 + uintptr(24) + prefix = __ccgo_ts + 1450 + pl = 0 + t = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + uintptr(-Int32FromInt32(1))))) + /* Transform ls,lc -> S,C */ + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + /* - and 0 flags are mutually exclusive */ + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + switch t { + case int32('n'): + goto _9 + case int32('p'): + goto _10 + case int32('X'): + goto _11 + case int32('x'): + goto _12 + case int32('o'): + goto _13 + case int32('i'): + goto _14 + case int32('d'): + goto _15 + case int32('u'): + goto _16 + case int32('c'): + goto _17 + case int32('s'): + goto _18 + case int32('m'): + goto _19 + case int32('C'): + goto _20 + case int32('S'): + goto _21 + case int32('A'): + goto _22 + case int32('G'): + goto _23 + case int32('F'): + goto _24 + case int32('E'): + goto _25 + case int32('a'): + goto _26 + case int32('g'): + goto _27 + case int32('f'): + goto _28 + case int32('e'): + goto _29 + } + goto _30 + _9: + ; + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LPRE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint32(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint64(cnt) + break + } + goto _1 + _10: + ; + if uint32(p) > Uint32FromInt32(2)*Uint32FromInt64(4) { + v31 = uint32(p) + } else { + v31 = Uint32FromInt32(2) * Uint32FromInt64(4) + } + p = int32(v31) + t = int32('x') + fl |= Uint32FromUint32(1) << (Int32FromUint8('#') - Int32FromUint8(' ')) + _12: + ; + _11: + ; + a = _fmt_x(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z, t&int32(32)) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0 && fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(t >> Int32FromInt32(4)) + pl = Int32FromInt32(2) + } + if !(0 != 0) { + goto _32 + } + _13: + ; + a = _fmt_o(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 && p < int32(z)-int32(a)+int32(1) { + p = int32(z) - int32(a) + int32(1) + } + _32: + ; + if !(0 != 0) { + goto _33 + } + _15: + ; + _14: + ; + pl = int32(1) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) > uint64(Int64FromInt64(INT64_MAX)) { + *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) = -*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix++ + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(2) + } else { + pl = 0 + } + } + } + _16: + ; + a = _fmt_u(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + _33: + ; + if xp != 0 && p < 0 { + goto overflow + } + if xp != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) && !(p != 0) { + a = z + goto _30 + } + if p > int32(z)-int32(a)+BoolInt32(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) { + v34 = p + } else { + v34 = int32(z) - int32(a) + BoolInt32(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) + } + p = v34 + goto _30 + goto narrow_c + narrow_c: + ; + _17: + ; + v36 = Int32FromInt32(1) + p = v36 + v35 = z - uintptr(v36) + a = v35 + *(*uint8)(unsafe.Pointer(v35)) = uint8(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _19: + ; + if !(int32(1) != 0) { + goto _37 + } + a = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + goto _38 + _37: + ; + _18: + ; + if *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) != 0 { + v39 = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + } else { + v39 = __ccgo_ts + 1460 + } + a = v39 + _38: + ; + if p < 0 { + v40 = int32(INT_MAX) + } else { + v40 = p + } + z = a + uintptr(Xstrnlen(tls, a, uint32(v40))) + if p < 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32(z) - int32(a) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _20: + ; + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) { + goto narrow_c + } + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[0] = uint32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[int32(1)] = uint32(0) + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = bp + 40 + p = -int32(1) + _21: + ; + ws = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + v42 = Int32FromInt32(0) + l = v42 + i = uint32(v42) + for { + if v45 = i < uint32(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v45 { + v44 = ws + ws += 4 + v43 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v44))) + l = v43 + } + if !(v45 && v43 >= 0 && uint32(l) <= uint32(p)-i) { + break + } + goto _41 + _41: + ; + i += uint32(l) + } + if l < 0 { + return -int32(1) + } + if i > uint32(INT_MAX) { + goto overflow + } + p = int32(i) + _pad3(tls, f, uint8(' '), w, p, int32(fl)) + ws = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + i = uint32(0) + for { + if v49 = i < 0+uint32(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v49 { + v48 = ws + ws += 4 + v47 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v48))) + l = v47 + } + if !(v49 && i+uint32(v47) <= uint32(p)) { + break + } + _out(tls, f, bp+48, uint32(l)) + goto _46 + _46: + ; + i += uint32(l) + } + _pad3(tls, f, uint8(' '), w, p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > p { + v50 = w + } else { + v50 = p + } + l = v50 + goto _1 + _29: + ; + _28: + ; + _27: + ; + _26: + ; + _25: + ; + _24: + ; + _23: + ; + _22: + ; + if xp != 0 && p < 0 { + goto overflow + } + l = _fmt_fp(tls, f, *(*float64)(unsafe.Pointer(bp + 8)), w, p, int32(fl), t) + if l < 0 { + goto overflow + } + goto _1 + _30: + ; + if p < int32(z)-int32(a) { + p = int32(z) - int32(a) + } + if p > int32(INT_MAX)-pl { + goto overflow + } + if w < pl+p { + w = pl + p + } + if w > int32(INT_MAX)-cnt { + goto overflow + } + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl)) + _out(tls, f, prefix, uint32(pl)) + _pad3(tls, f, uint8('0'), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _pad3(tls, f, uint8('0'), p, int32(z)-int32(a), 0) + _out(tls, f, a, uint32(int32(z)-int32(a))) + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = uint32(1) + for { + if !(i <= uint32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _51 + _51: + ; + i++ + } + for { + if !(i <= uint32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _52 + _52: + ; + i++ + } + if i <= uint32(NL_ARGMAX) { + goto inval + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var __need_unlock, olderr, ret, v1 int32 + var saved_buf, v2, v3, v4, v5 uintptr + var _ /* ap2 at bp+0 */ Tva_list + var _ /* internal_buf at bp+128 */ [80]uint8 + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+4 */ [10]int32 + _, _, _, _, _, _, _, _, _ = __need_unlock, olderr, ret, saved_buf, v1, v2, v3, v4, v5 + *(*[10]int32)(unsafe.Pointer(bp + 4)) = [10]int32{} + saved_buf = uintptr(0) + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _printf_core(tls, uintptr(0), fmt, bp, bp+48, bp+4) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) { + saved_buf = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fbuf = bp + 128 + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(80) + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v3 + v2 = v3 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + ret = -int32(1) + } else { + ret = _printf_core(tls, f, fmt, bp, bp+48, bp+4) + } + if saved_buf != 0 { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint32(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + ret = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fbuf = saved_buf + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint32(0) + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + } + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +const SIZE_L = 2 +const SIZE_def = 0 +const SIZE_h = -1 +const SIZE_hh = -2 +const SIZE_l = 1 +const SIZE_ll = 3 + +func _store_int(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var __need_unlock, alloc, base, c, invert, matches, size, t, width, v1, v12, v13, v16, v17, v20, v21, v23, v29, v3, v32, v33, v36, v4, v6, v64, v65, v69, v7, v70, v75, v76, v80, v81, v9 int32 + var dest, p, s, tmp, tmp1, wcs, v10, v11, v18, v19, v24, v25, v28, v30, v31, v37, v38, v59, v62, v66, v67, v71, v72, v74, v77, v78, v82, v83 uintptr + var i, k, v68, v73, v79 Tsize_t + var pos Toff_t + var x uint64 + var y float64 + var v63 uint32 + var _ /* scanset at bp+16 */ [257]uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+276 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, base, c, dest, i, invert, k, matches, p, pos, s, size, t, tmp, tmp1, wcs, width, x, y, v1, v10, v11, v12, v13, v16, v17, v18, v19, v20, v21, v23, v24, v25, v28, v29, v3, v30, v31, v32, v33, v36, v37, v38, v4, v59, v6, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v9 + alloc = 0 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + goto input_fail + } + p = fmt + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + v3 = int32(*(*uint8)(unsafe.Pointer(p))) + v4 = BoolInt32(v3 == int32(' ') || uint32(v3)-uint32('\t') < uint32(5)) + goto _5 + _5: + if v4 != 0 { + for { + v6 = int32(*(*uint8)(unsafe.Pointer(p + 1))) + v7 = BoolInt32(v6 == int32(' ') || uint32(v6)-uint32('\t') < uint32(5)) + goto _8 + _8: + if !(v7 != 0) { + break + } + p++ + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 4 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + v12 = v9 + v13 = BoolInt32(v12 == int32(' ') || uint32(v12)-uint32('\t') < uint32(5)) + goto _14 + _14: + if !(v13 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + if int32(*(*uint8)(unsafe.Pointer(p))) != int32('%') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('%') { + X__shlim(tls, f, int64(Int32FromInt32(0))) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('%') { + p++ + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v19 = f + 4 + v18 = *(*uintptr)(unsafe.Pointer(v19)) + *(*uintptr)(unsafe.Pointer(v19))++ + v17 = int32(*(*uint8)(unsafe.Pointer(v18))) + } else { + v17 = X__shgetc(tls, f) + } + v16 = v17 + c = v16 + v20 = v16 + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + if !(v21 != 0) { + break + } + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v25 = f + 4 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = int32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = X__shgetc(tls, f) + } + c = v23 + } + if c != int32(*(*uint8)(unsafe.Pointer(p))) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('*') { + dest = uintptr(0) + p++ + } else { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('$') { + dest = _arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-int32('0'))) + p += uintptr(2) + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + int32(*(*uint8)(unsafe.Pointer(p))) - int32('0') + goto _27 + _27: + ; + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p++ + } else { + alloc = 0 + } + size = SIZE_def + v28 = p + p++ + switch int32(*(*uint8)(unsafe.Pointer(v28))) { + case int32('h'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('h') { + p++ + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('l') { + p++ + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p-- + default: + goto fmt_fail + } + t = int32(*(*uint8)(unsafe.Pointer(p))) + /* C or S */ + if t&int32(0x2f) == int32(3) { + t |= int32(32) + size = int32(SIZE_l) + } + switch t { + case int32('c'): + if width < int32(1) { + width = int32(1) + } + fallthrough + case int32('['): + case int32('n'): + _store_int(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + default: + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v31 = f + 4 + v30 = *(*uintptr)(unsafe.Pointer(v31)) + *(*uintptr)(unsafe.Pointer(v31))++ + v29 = int32(*(*uint8)(unsafe.Pointer(v30))) + } else { + v29 = X__shgetc(tls, f) + } + v32 = v29 + v33 = BoolInt32(v32 == int32(' ') || uint32(v32)-uint32('\t') < uint32(5)) + goto _34 + _34: + if !(v33 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + } + X__shlim(tls, f, int64(width)) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v38 = f + 4 + v37 = *(*uintptr)(unsafe.Pointer(v38)) + *(*uintptr)(unsafe.Pointer(v38))++ + v36 = int32(*(*uint8)(unsafe.Pointer(v37))) + } else { + v36 = X__shgetc(tls, f) + } + if v36 < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + switch t { + case int32('['): + goto _40 + case int32('c'): + goto _41 + case int32('s'): + goto _42 + case int32('x'): + goto _43 + case int32('X'): + goto _44 + case int32('p'): + goto _45 + case int32('o'): + goto _46 + case int32('u'): + goto _47 + case int32('d'): + goto _48 + case int32('i'): + goto _49 + case int32('G'): + goto _50 + case int32('g'): + goto _51 + case int32('F'): + goto _52 + case int32('f'): + goto _53 + case int32('E'): + goto _54 + case int32('e'): + goto _55 + case int32('A'): + goto _56 + case int32('a'): + goto _57 + } + goto _58 + _42: + ; + _41: + ; + _40: + ; + if t == int32('c') || t == int32('s') { + Xmemset(tls, bp+16, -int32(1), uint32(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if t == int32('s') { + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\t')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\n')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\v')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\f')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\r')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(' ')] = uint8(0) + } + } else { + p++ + v59 = p + if int32(*(*uint8)(unsafe.Pointer(v59))) == int32('^') { + p++ + invert = Int32FromInt32(1) + } else { + invert = 0 + } + Xmemset(tls, bp+16, invert, uint32(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('-')] = uint8(Int32FromInt32(1) - invert) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(']')] = uint8(Int32FromInt32(1) - invert) + } + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + v62 = p + p++ + c = int32(*(*uint8)(unsafe.Pointer(v62 + uintptr(-Int32FromInt32(1))))) + for { + if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { + break + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+c] = uint8(int32(1) - invert) + goto _61 + _61: + ; + c++ + } + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+int32(*(*uint8)(unsafe.Pointer(p)))] = uint8(int32(1) - invert) + goto _60 + _60: + ; + p++ + } + } + wcs = uintptr(0) + s = uintptr(0) + i = uint32(0) + if t == int32('c') { + v63 = uint32(width) + uint32(1) + } else { + v63 = uint32(31) + } + k = v63 + if size == int32(SIZE_l) { + if alloc != 0 { + wcs = Xmalloc(tls, k*uint32(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + wcs = dest + } + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v67 = f + 4 + v66 = *(*uintptr)(unsafe.Pointer(v67)) + *(*uintptr)(unsafe.Pointer(v67))++ + v65 = int32(*(*uint8)(unsafe.Pointer(v66))) + } else { + v65 = X__shgetc(tls, f) + } + v64 = v65 + c = v64 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v64+int32(1)] != 0) { + break + } + *(*uint8)(unsafe.Pointer(bp)) = uint8(c) + switch Xmbrtowc(tls, bp+276, bp, uint32(1), bp+8) { + case uint32(-Int32FromInt32(1)): + goto input_fail + case uint32(-Int32FromInt32(2)): + continue + } + if wcs != 0 { + v68 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v68)*4)) = *(*Twchar_t)(unsafe.Pointer(bp + 276)) + } + if alloc != 0 && i == k { + k += k + uint32(1) + tmp = Xrealloc(tls, wcs, k*uint32(4)) + if !(tmp != 0) { + goto alloc_fail + } + wcs = tmp + } + } + if !(Xmbsinit(tls, bp+8) != 0) { + goto input_fail + } + } else { + if alloc != 0 { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v72 = f + 4 + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + v70 = int32(*(*uint8)(unsafe.Pointer(v71))) + } else { + v70 = X__shgetc(tls, f) + } + v69 = v70 + c = v69 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v69+int32(1)] != 0) { + break + } + v73 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v73))) = uint8(c) + if i == k { + k += k + uint32(1) + tmp1 = Xrealloc(tls, s, k) + if !(tmp1 != 0) { + goto alloc_fail + } + s = tmp1 + } + } + } else { + v74 = dest + s = v74 + if v74 != 0 { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v78 = f + 4 + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + v76 = int32(*(*uint8)(unsafe.Pointer(v77))) + } else { + v76 = X__shgetc(tls, f) + } + v75 = v76 + c = v75 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v75+int32(1)] != 0) { + break + } + v79 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v79))) = uint8(c) + } + } else { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v83 = f + 4 + v82 = *(*uintptr)(unsafe.Pointer(v83)) + *(*uintptr)(unsafe.Pointer(v83))++ + v81 = int32(*(*uint8)(unsafe.Pointer(v82))) + } else { + v81 = X__shgetc(tls, f) + } + v80 = v81 + c = v80 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v80+int32(1)] != 0) { + break + } + } + } + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('c') && (*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != int64(width) { + goto match_fail + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = uint32(0) + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + goto _58 + _45: + ; + _44: + ; + _43: + ; + base = int32(16) + goto int_common + _46: + ; + base = int32(8) + goto int_common + _48: + ; + _47: + ; + base = int32(10) + goto int_common + _49: + ; + base = 0 + goto int_common + int_common: + ; + x = X__intscan(tls, f, uint32(base), 0, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('p') && dest != 0 { + *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uint32(x)) + } else { + _store_int(tls, dest, size, x) + } + goto _58 + _57: + ; + _56: + ; + _55: + ; + _54: + ; + _53: + ; + _52: + ; + _51: + ; + _50: + ; + y = X__floatscan(tls, f, size, 0) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if dest != 0 { + switch size { + case SIZE_def: + *(*float32)(unsafe.Pointer(dest)) = float32(y) + case int32(SIZE_l): + *(*float64)(unsafe.Pointer(dest)) = y + case int32(SIZE_L): + *(*float64)(unsafe.Pointer(dest)) = y + break + } + } + goto _58 + _58: + ; + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(f)).Frpos)-int32((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p++ + } + if !(0 != 0) { + goto _85 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_85: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +func X__isoc99_vfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, f, fmt, ap) +} + +var _states1 = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint32(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out1(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + var v1 Tsize_t + var v2 uintptr + _, _ = v1, v2 + for { + v1 = l + l-- + if !(v1 != 0 && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) { + break + } + v2 = s + s += 4 + Xfputwc(tls, *(*Twchar_t)(unsafe.Pointer(v2)), f) + } +} + +func _pad4(tls *TLS, f uintptr, n int32, fl int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 || !(n != 0) || (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return + } + Xfprintf(tls, f, __ccgo_ts+1467, VaList(bp+8, n, __ccgo_ts)) +} + +func _getint1(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-uint32('0') > uint32(int32(INT_MAX)-int32(10)*i) { + i = -int32(1) + } else { + i = int32(uint32(int32(10)*i) + (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))) - uint32('0'))) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s)) += 4 + } + return i +} + +var _sizeprefix = [24]uint8{ + 0: uint8('L'), + 3: uint8('j'), + 4: uint8('L'), + 5: uint8('L'), + 6: uint8('L'), + 8: uint8('j'), + 14: uint8('j'), + 15: uint8('j'), + 20: uint8('j'), + 23: uint8('j'), +} + +func _wprintf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(112) + defer tls.Free(112) + var a, bs, z, v8 uintptr + var argpos, cnt, i, l, p, t, w, xp, v10, v12, v13, v14, v16, v5, v6, v7 int32 + var fl, l10n, ps, st uint32 + var v15 bool + var v9 uint64 + var _ /* arg at bp+8 */ Targ + var _ /* charfmt at bp+16 */ [16]uint8 + var _ /* s at bp+4 */ uintptr + var _ /* wc at bp+32 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, bs, cnt, fl, i, l, l10n, p, ps, st, t, w, xp, z, v10, v12, v13, v14, v15, v16, v5, v6, v7, v8, v9 + *(*uintptr)(unsafe.Pointer(bp + 4)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp + 4)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) != uint32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + z = *(*uintptr)(unsafe.Pointer(bp + 4)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == uint32('%') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) == uint32('%')) { + break + } + goto _3 + _3: + ; + z += 4 + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(2) * 4 + } + if (int32(z)-int32(a))/4 > int32(INT_MAX)-cnt { + goto overflow + } + l = (int32(z) - int32(a)) / 4 + if f != 0 { + _out1(tls, f, a, uint32(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4)) == uint32('$') { + l10n = uint32(1) + argpos = int32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) - uint32('0')) + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(3) * 4 + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4))))-uint32(' '))) != 0) { + break + } + fl |= uint32(1) << (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) - uint32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } + /* Read field width */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == uint32('*') { + if BoolInt32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4)) == uint32('$') { + l10n = uint32(1) + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-uint32('0'))*4)) = int32(_INT) + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4))-uint32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(3) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint1(tls, bp+4) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == uint32('.') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 1*4)) == uint32('*') { + if BoolInt32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 3*4)) == uint32('$') { + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4))-uint32('0'))*4)) = int32(_INT) + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + 2*4))-uint32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(4) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp + 4)) += uintptr(2) * 4 + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)))) == uint32('.') { + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + p = _getint1(tls, bp+4) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp + 4)) + *(*uintptr)(unsafe.Pointer(bp + 4)) += 4 + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states1)) + uintptr(st)*58 + uintptr(*(*Twchar_t)(unsafe.Pointer(v8))-uint32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } else { + if f != 0 { + _pop_arg1(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + t = int32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 4)) + uintptr(-Int32FromInt32(1))*4))) + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + switch t { + case int32('n'): + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LPRE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = cnt + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint32(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))))) = uint64(cnt) + break + } + goto _1 + case int32('c'): + fallthrough + case int32('C'): + if w < int32(1) { + w = int32(1) + } + _pad4(tls, f, w-int32(1), int32(fl)) + if t == int32('C') { + v9 = *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + v9 = uint64(Xbtowc(tls, int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))))) + } + *(*Twchar_t)(unsafe.Pointer(bp)) = uint32(v9) + _out1(tls, f, bp, uint32(1)) + _pad4(tls, f, w-int32(1), int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('S'): + a = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + if p < 0 { + v10 = int32(INT_MAX) + } else { + v10 = p + } + z = a + uintptr(Xwcsnlen(tls, a, uint32(v10)))*4 + if p < 0 && *(*Twchar_t)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = (int32(z) - int32(a)) / 4 + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + _out1(tls, f, a, uint32(p)) + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('m'): + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + fallthrough + case int32('s'): + if !(*(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) != 0) { + *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) = __ccgo_ts + 1460 + } + bs = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + v12 = Int32FromInt32(0) + l = v12 + i = v12 + for { + if p < 0 { + v13 = int32(INT_MAX) + } else { + v13 = p + } + if v15 = l < v13; v15 { + v14 = Xmbtowc(tls, bp+32, bs, uint32(MB_LEN_MAX)) + i = v14 + } + if !(v15 && v14 > 0) { + break + } + goto _11 + _11: + ; + bs += uintptr(i) + l++ + } + if i < 0 { + return -int32(1) + } + if p < 0 && *(*uint8)(unsafe.Pointer(bs)) != 0 { + goto overflow + } + p = l + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + bs = *(*uintptr)(unsafe.Pointer(&*(*Targ)(unsafe.Pointer(bp + 8)))) + for { + v16 = l + l-- + if !(v16 != 0) { + break + } + i = Xmbtowc(tls, bp+32, bs, uint32(MB_LEN_MAX)) + bs += uintptr(i) + _out1(tls, f, bp+32, uint32(1)) + } + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + } + if xp != 0 && p < 0 { + goto overflow + } + Xsnprintf(tls, bp+16, uint32(16), __ccgo_ts+1471, VaList(bp+48, __ccgo_ts+1491+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1493+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1495+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0)), __ccgo_ts+587+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1497+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0)), int32(_sizeprefix[t|int32(32)-int32('a')]), t)) + switch t | Int32FromInt32(32) { + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + l = Xfprintf(tls, f, bp+16, VaList(bp+48, w, p, *(*float64)(unsafe.Pointer(bp + 8)))) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('p'): + l = Xfprintf(tls, f, bp+16, VaList(bp+48, w, p, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)))) + break + } + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = int32(1) + for { + if !(i <= int32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg1(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _17 + _17: + ; + i++ + } + for { + if !(i <= int32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _18 + _18: + ; + i++ + } + if i <= int32(NL_ARGMAX) { + return -int32(1) + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfwprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var __need_unlock, olderr, ret, v1 int32 + var _ /* ap2 at bp+0 */ Tva_list + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+4 */ [10]int32 + _, _, _, _ = __need_unlock, olderr, ret, v1 + *(*[10]int32)(unsafe.Pointer(bp + 4)) = [10]int32{} + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _wprintf_core(tls, uintptr(0), fmt, bp, bp+48, bp+4) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + ret = _wprintf_core(tls, f, fmt, bp, bp+48, bp+4) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +func _store_int1(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n1(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func _in_set(tls *TLS, set uintptr, c int32) (r int32) { + var j int32 + var p, v3 uintptr + _, _, _ = j, p, v3 + p = set + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('-') { + if c == int32('-') { + return int32(1) + } + p += 4 + } else { + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32(']') { + if c == int32(']') { + return int32(1) + } + p += 4 + } + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0 && *(*Twchar_t)(unsafe.Pointer(p)) != uint32(']')) { + break + } + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('-') && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != uint32(']') { + v3 = p + p += 4 + j = int32(*(*Twchar_t)(unsafe.Pointer(v3 + uintptr(-Int32FromInt32(1))*4))) + for { + if !(uint32(j) < *(*Twchar_t)(unsafe.Pointer(p))) { + break + } + if c == j { + return int32(1) + } + goto _2 + _2: + ; + j++ + } + } + if uint32(c) == *(*Twchar_t)(unsafe.Pointer(p)) { + return int32(1) + } + goto _1 + _1: + ; + p += 4 + } + return 0 +} + +func Xvfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var __need_unlock, alloc, c, gotmatch, invert, l, matches, size, t, width, v1, v10, v22, v3, v36 int32 + var dest, p, s, set, tmp1, tmp2, wcs, v12, v13, v15, v16, v18, v19, v21, v24, v25, v27, v28, v30, v31, v32, v33, v34, v38, v39, v41, v43, v44, v45, v5, v6, v8, v9 uintptr + var i, k, v40 Tsize_t + var pos Toff_t + var v11, v14, v23, v26, v35, v37, v4 uint32 + var _ /* cnt at bp+0 */ Toff_t + var _ /* tmp at bp+8 */ [22]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, c, dest, gotmatch, i, invert, k, l, matches, p, pos, s, set, size, t, tmp1, tmp2, wcs, width, v1, v10, v11, v12, v13, v14, v15, v16, v18, v19, v21, v22, v23, v24, v25, v26, v27, v28, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v4, v40, v41, v43, v44, v45, v5, v6, v8, v9 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+76) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + p = fmt + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + if Xiswspace(tls, *(*Twchar_t)(unsafe.Pointer(p))) != 0 { + for Xiswspace(tls, *(*Twchar_t)(unsafe.Pointer(p + 1*4))) != 0 { + p += 4 + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v6 = f + 4 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = uint32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = Xgetwc(tls, f) + } + v3 = int32(v4) + c = v3 + if !(Xiswspace(tls, uint32(v3)) != 0) { + break + } + pos++ + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v9 = f + 4 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + _ = *(*uint8)(unsafe.Pointer(v8)) + } else { + Xungetwc(tls, uint32(c), f) + } + goto _2 + } + if *(*Twchar_t)(unsafe.Pointer(p)) != uint32('%') || *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == uint32('%') { + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('%') { + p += 4 + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v13 = f + 4 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = uint32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = Xgetwc(tls, f) + } + v10 = int32(v11) + c = v10 + if !(Xiswspace(tls, uint32(v10)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v16 = f + 4 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = uint32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = Xgetwc(tls, f) + } + c = int32(v14) + } + if uint32(c) != *(*Twchar_t)(unsafe.Pointer(p)) { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v19 = f + 4 + *(*uintptr)(unsafe.Pointer(v19))-- + v18 = *(*uintptr)(unsafe.Pointer(v19)) + _ = *(*uint8)(unsafe.Pointer(v18)) + } else { + Xungetwc(tls, uint32(c), f) + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos++ + goto _2 + } + p += 4 + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('*') { + dest = uintptr(0) + p += 4 + } else { + if BoolInt32(*(*Twchar_t)(unsafe.Pointer(p))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == uint32('$') { + dest = _arg_n1(tls, ap, *(*Twchar_t)(unsafe.Pointer(p))-uint32('0')) + p += uintptr(2) * 4 + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(*(*Twchar_t)(unsafe.Pointer(p))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(uint32(int32(10)*width) + *(*Twchar_t)(unsafe.Pointer(p)) - uint32('0')) + goto _20 + _20: + ; + p += 4 + } + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p += 4 + } else { + alloc = 0 + } + size = SIZE_def + v21 = p + p += 4 + switch *(*Twchar_t)(unsafe.Pointer(v21)) { + case uint32('h'): + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('h') { + p += 4 + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case uint32('l'): + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32('l') { + p += 4 + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case uint32('j'): + size = int32(SIZE_ll) + case uint32('z'): + fallthrough + case uint32('t'): + size = int32(SIZE_l) + case uint32('L'): + size = int32(SIZE_L) + case uint32('d'): + fallthrough + case uint32('i'): + fallthrough + case uint32('o'): + fallthrough + case uint32('u'): + fallthrough + case uint32('x'): + fallthrough + case uint32('a'): + fallthrough + case uint32('e'): + fallthrough + case uint32('f'): + fallthrough + case uint32('g'): + fallthrough + case uint32('A'): + fallthrough + case uint32('E'): + fallthrough + case uint32('F'): + fallthrough + case uint32('G'): + fallthrough + case uint32('X'): + fallthrough + case uint32('s'): + fallthrough + case uint32('c'): + fallthrough + case uint32('['): + fallthrough + case uint32('S'): + fallthrough + case uint32('C'): + fallthrough + case uint32('p'): + fallthrough + case uint32('n'): + p -= 4 + default: + goto fmt_fail + } + t = int32(*(*Twchar_t)(unsafe.Pointer(p))) + /* Transform S,C -> ls,lc */ + if t&int32(0x2f) == int32(3) { + size = int32(SIZE_l) + t |= int32(32) + } + if t != int32('n') { + if t != int32('[') && t|int32(32) != int32('c') { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v25 = f + 4 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = uint32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = Xgetwc(tls, f) + } + v22 = int32(v23) + c = v22 + if !(Xiswspace(tls, uint32(v22)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v28 = f + 4 + v27 = *(*uintptr)(unsafe.Pointer(v28)) + *(*uintptr)(unsafe.Pointer(v28))++ + v26 = uint32(*(*uint8)(unsafe.Pointer(v27))) + } else { + v26 = Xgetwc(tls, f) + } + c = int32(v26) + } + if c < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v31 = f + 4 + *(*uintptr)(unsafe.Pointer(v31))-- + v30 = *(*uintptr)(unsafe.Pointer(v31)) + _ = *(*uint8)(unsafe.Pointer(v30)) + } else { + Xungetwc(tls, uint32(c), f) + } + } + switch t { + case int32('n'): + _store_int1(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + if t == int32('c') { + if width < int32(1) { + width = int32(1) + } + invert = int32(1) + set = __ccgo_ts + 1499 + } else { + if t == int32('s') { + invert = int32(1) + set = uintptr(unsafe.Pointer(&_spaces1)) + } else { + p += 4 + v32 = p + if *(*Twchar_t)(unsafe.Pointer(v32)) == uint32('^') { + p += 4 + invert = Int32FromInt32(1) + } else { + invert = 0 + } + set = p + if *(*Twchar_t)(unsafe.Pointer(p)) == uint32(']') { + p += 4 + } + for *(*Twchar_t)(unsafe.Pointer(p)) != uint32(']') { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + p += 4 + } + } + } + if size == SIZE_def { + v33 = dest + } else { + v33 = uintptr(0) + } + s = v33 + if size == int32(SIZE_l) { + v34 = dest + } else { + v34 = uintptr(0) + } + wcs = v34 + gotmatch = 0 + if width < int32(1) { + width = -int32(1) + } + i = uint32(0) + if alloc != 0 { + if t == int32('c') { + v35 = uint32(width) + uint32(1) + } else { + v35 = uint32(31) + } + k = v35 + if size == int32(SIZE_l) { + wcs = Xmalloc(tls, k*uint32(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + } + } + for width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v39 = f + 4 + v38 = *(*uintptr)(unsafe.Pointer(v39)) + *(*uintptr)(unsafe.Pointer(v39))++ + v37 = uint32(*(*uint8)(unsafe.Pointer(v38))) + } else { + v37 = Xgetwc(tls, f) + } + v36 = int32(v37) + c = v36 + if v36 < 0 { + break + } + if _in_set(tls, set, c) == invert { + break + } + if wcs != 0 { + v40 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v40)*4)) = uint32(c) + if alloc != 0 && i == k { + k += k + uint32(1) + tmp1 = Xrealloc(tls, wcs, k*uint32(4)) + if !(tmp1 != 0) { + goto alloc_fail + } + wcs = tmp1 + } + } else { + if size != int32(SIZE_l) { + if s != 0 { + v41 = s + uintptr(i) + } else { + v41 = bp + 8 + } + l = Xwctomb(tls, v41, uint32(c)) + if l < 0 { + goto input_fail + } + i += uint32(l) + if alloc != 0 && i > k-uint32(4) { + k += k + uint32(1) + tmp2 = Xrealloc(tls, s, k) + if !(tmp2 != 0) { + goto alloc_fail + } + s = tmp2 + } + } + } + pos++ + width -= BoolInt32(width > 0) + gotmatch = int32(1) + } + if width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v44 = f + 4 + *(*uintptr)(unsafe.Pointer(v44))-- + v43 = *(*uintptr)(unsafe.Pointer(v44)) + _ = *(*uint8)(unsafe.Pointer(v43)) + } else { + Xungetwc(tls, uint32(c), f) + } + if t == int32('c') || !(gotmatch != 0) { + goto match_fail + } + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = uint32(0) + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('p'): + if width < int32(1) { + width = 0 + } + Xsnprintf(tls, bp+8, uint32(22), __ccgo_ts+1503, VaList(bp+40, int32(1)+BoolInt32(!(dest != 0)), __ccgo_ts+1521, width, uintptr(unsafe.Pointer(&_size_pfx))+uintptr(size+int32(2))*3, t)) + *(*Toff_t)(unsafe.Pointer(bp)) = 0 + if dest != 0 { + v45 = dest + } else { + v45 = bp + } + if Xfscanf(tls, f, bp+8, VaList(bp+40, v45, bp)) == -int32(1) { + goto input_fail + } else { + if !(*(*Toff_t)(unsafe.Pointer(bp)) != 0) { + goto match_fail + } + } + pos += *(*Toff_t)(unsafe.Pointer(bp)) + default: + goto fmt_fail + } + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p += 4 + } + if !(0 != 0) { + goto _46 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_46: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +var _size_pfx = [6][3]uint8{ + 0: {'h', 'h'}, + 1: {'h'}, + 2: {}, + 3: {'l'}, + 4: {'L'}, + 5: {'l', 'l'}, +} + +var _spaces1 = [22]Twchar_t{ + 0: uint32(' '), + 1: uint32('\t'), + 2: uint32('\n'), + 3: uint32('\r'), + 4: uint32(11), + 5: uint32(12), + 6: uint32(0x0085), + 7: uint32(0x2000), + 8: uint32(0x2001), + 9: uint32(0x2002), + 10: uint32(0x2003), + 11: uint32(0x2004), + 12: uint32(0x2005), + 13: uint32(0x2006), + 14: uint32(0x2008), + 15: uint32(0x2009), + 16: uint32(0x200a), + 17: uint32(0x2028), + 18: uint32(0x2029), + 19: uint32(0x205f), + 20: uint32(0x3000), +} + +func X__isoc99_vfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, f, fmt, ap) +} + +func Xvprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvscanf(tls, fmt, ap) +} + +type Tcookie3 = struct { + Fs uintptr + Fn Tsize_t +} + +func _sn_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3 uintptr + var k Tsize_t + var v1, v2 uint32 + _, _, _, _, _ = c, k, v1, v2, v3 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tcookie3)(unsafe.Pointer(c)).Fn < uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos)-int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) { + v1 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v1 = uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos) - int32((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + k = v1 + if k != 0 { + _memcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, (*TFILE)(unsafe.Pointer(f)).Fwbase, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 4)) -= k + } + if (*Tcookie3)(unsafe.Pointer(c)).Fn < l { + v2 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v2 = l + } + k = v2 + if k != 0 { + _memcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, s, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 4)) -= k + } + *(*uint8)(unsafe.Pointer((*Tcookie3)(unsafe.Pointer(c)).Fs)) = uint8(0) + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + /* pretend to succeed, even if we discarded extra data */ + return l +} + +func Xvsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var v1 uintptr + var v2 uint32 + var _ /* buf at bp+0 */ [1]uint8 + var _ /* c at bp+8 */ Tcookie3 + var _ /* dummy at bp+1 */ [1]uint8 + var _ /* f at bp+16 */ TFILE + _, _ = v1, v2 + if n != 0 { + v1 = s + } else { + v1 = bp + 1 + } + if n != 0 { + v2 = n - uint32(1) + } else { + v2 = uint32(0) + } + *(*Tcookie3)(unsafe.Pointer(bp + 8)) = Tcookie3{ + Fs: v1, + Fn: v2, + } + *(*TFILE)(unsafe.Pointer(bp + 16)) = TFILE{ + Fwrite: __ccgo_fp(_sn_write), + Fbuf: bp, + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 8, + } + *(*uint8)(unsafe.Pointer((*(*Tcookie3)(unsafe.Pointer(bp + 8))).Fs)) = uint8(0) + return Xvfprintf(tls, bp+16, fmt, ap) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xvsprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsnprintf(tls, s, uint32(INT_MAX), fmt, ap) +} + +func _string_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var end, src uintptr + var k Tsize_t + _, _, _ = end, k, src + src = (*TFILE)(unsafe.Pointer(f)).Fcookie + k = len1 + uint32(256) + end = Xmemchr(tls, src, 0, k) + if end != 0 { + k = uint32(int32(end) - int32(src)) + } + if k < len1 { + len1 = k + } + _memcpy(tls, buf, src, len1) + (*TFILE)(unsafe.Pointer(f)).Frpos = src + uintptr(len1) + (*TFILE)(unsafe.Pointer(f)).Frend = src + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = src + uintptr(k) + return len1 +} + +func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fread: __ccgo_fp(_string_read), + Fbuf: s, + Flock: -int32(1), + Fcookie: s, + } + return Xvfscanf(tls, bp, fmt, ap) +} + +func X__isoc99_vsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsscanf(tls, s, fmt, ap) +} + +type Tcookie4 = struct { + Fws uintptr + Fl Tsize_t +} + +func _sw_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3, v4, v5 uintptr + var i, v1 int32 + var l0 Tsize_t + var v2 bool + _, _, _, _, _, _, _, _ = c, i, l0, v1, v2, v3, v4, v5 + l0 = l + i = 0 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if s != (*TFILE)(unsafe.Pointer(f)).Fwbase && _sw_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, uint32(int32((*TFILE)(unsafe.Pointer(f)).Fwpos)-int32((*TFILE)(unsafe.Pointer(f)).Fwbase))) == uint32(-Int32FromInt32(1)) { + return uint32(-Int32FromInt32(1)) + } + for { + if v2 = (*Tcookie4)(unsafe.Pointer(c)).Fl != 0 && l != 0; v2 { + v1 = Xmbtowc(tls, (*Tcookie4)(unsafe.Pointer(c)).Fws, s, l) + i = v1 + } + if !(v2 && v1 >= 0) { + break + } + if !(i != 0) { + i = int32(1) + } + s += uintptr(i) + l -= uint32(i) + (*Tcookie4)(unsafe.Pointer(c)).Fl-- + (*Tcookie4)(unsafe.Pointer(c)).Fws += 4 + } + *(*Twchar_t)(unsafe.Pointer((*Tcookie4)(unsafe.Pointer(c)).Fws)) = uint32(0) + if i < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint32(i) + } + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v5 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v5 + return l0 +} + +func Xvswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(416) + defer tls.Free(416) + var r, v1 int32 + var _ /* buf at bp+0 */ [256]uint8 + var _ /* c at bp+256 */ Tcookie4 + var _ /* f at bp+264 */ TFILE + _, _ = r, v1 + *(*Tcookie4)(unsafe.Pointer(bp + 256)) = Tcookie4{ + Fws: s, + Fl: n - uint32(1), + } + *(*TFILE)(unsafe.Pointer(bp + 264)) = TFILE{ + Fwrite: __ccgo_fp(_sw_write), + Fbuf: bp, + Fbuf_size: uint32(256), + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 256, + } + if !(n != 0) { + return -int32(1) + } + r = Xvfwprintf(tls, bp+264, fmt, ap) + _sw_write(tls, bp+264, uintptr(0), uint32(0)) + if uint32(r) >= n { + v1 = -int32(1) + } else { + v1 = r + } + return v1 +} + +func _wstring_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k Tsize_t + var v1, v2, v3 uintptr + var _ /* src at bp+0 */ uintptr + _, _, _, _ = k, v1, v2, v3 + *(*uintptr)(unsafe.Pointer(bp)) = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*uintptr)(unsafe.Pointer(bp)) != 0) { + return uint32(0) + } + k = Xwcsrtombs(tls, (*TFILE)(unsafe.Pointer(f)).Fbuf, bp, (*TFILE)(unsafe.Pointer(f)).Fbuf_size, uintptr(0)) + if k == uint32(-Int32FromInt32(1)) { + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + return uint32(0) + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = *(*uintptr)(unsafe.Pointer(bp)) + if !(len1 != 0) || !(k != 0) { + return uint32(0) + } + v3 = f + 4 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v2)) + return uint32(1) +} + +func Xvswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* buf at bp+0 */ [256]uint8 + var _ /* f at bp+256 */ TFILE + *(*TFILE)(unsafe.Pointer(bp + 256)) = TFILE{ + Fread: __ccgo_fp(_wstring_read), + Fbuf: bp, + Fbuf_size: uint32(256), + Flock: -int32(1), + Fcookie: s, + } + return Xvfwscanf(tls, bp+256, fmt, ap) +} + +func X__isoc99_vswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvswscanf(tls, s, fmt, ap) +} + +func Xvwprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvwscanf(tls, fmt, ap) +} + +func Xwprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwprintf(tls, fmt, ap) + _ = ap + return ret +} + +func Xwscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_wscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwscanf(tls, fmt, va) +} + +func Xabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xatof(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, uintptr(0)) +} + +func Xatoi(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on INT_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - (int32(*(*uint8)(unsafe.Pointer(v4))) - int32('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatol(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - int32(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatoll(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LLONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xbsearch(tls *TLS, key uintptr, base uintptr, nel Tsize_t, width Tsize_t, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var sign int32 + var try uintptr + _, _ = sign, try + for nel > uint32(0) { + try = base + uintptr(width*(nel/uint32(2))) + sign = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, try) + if sign < 0 { + nel /= uint32(2) + } else { + if sign > 0 { + base = try + uintptr(width) + nel -= nel/uint32(2) + uint32(1) + } else { + return try + } + } + } + return UintptrFromInt32(0) +} + +func Xdiv(tls *TLS, num int32, den int32) (r Tdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xecvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, j, v1, v3 int32 + var _ /* tmp at bp+0 */ [32]uint8 + _, _, _, _ = i, j, v1, v3 + if uint32(n)-uint32(1) > uint32(15) { + n = int32(15) + } + Xsprintf(tls, bp, __ccgo_ts+1524, VaList(bp+40, n-int32(1), x)) + v1 = BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[0]) == Int32FromUint8('-')) + *(*int32)(unsafe.Pointer(sign)) = v1 + i = v1 + j = 0 + for { + if !(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[i]) != int32('e')) { + break + } + _buf8[j] = (*(*[32]uint8)(unsafe.Pointer(bp)))[i] + goto _2 + _2: + ; + v3 = i + i++ + j += BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[v3]) != int32('.')) + } + _buf8[j] = uint8(0) + *(*int32)(unsafe.Pointer(dp)) = Xatoi(tls, bp+uintptr(i)+uintptr(1)) + int32(1) + return uintptr(unsafe.Pointer(&_buf8)) +} + +var _buf8 [16]uint8 + +func Xfcvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1536) + defer tls.Free(1536) + var i, lz int32 + var _ /* tmp at bp+0 */ [1500]uint8 + _, _ = i, lz + if uint32(n) > uint32(1400) { + n = int32(1400) + } + Xsprintf(tls, bp, __ccgo_ts+1529, VaList(bp+1512, n, x)) + i = BoolInt32(int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[0]) == int32('-')) + if int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[i]) == int32('0') { + lz = int32(Xstrspn(tls, bp+uintptr(i)+uintptr(2), __ccgo_ts+1497)) + } else { + lz = -int32(Xstrcspn(tls, bp+uintptr(i), __ccgo_ts+483)) + } + if n <= lz { + *(*int32)(unsafe.Pointer(sign)) = i + *(*int32)(unsafe.Pointer(dp)) = int32(1) + if uint32(n) > uint32(14) { + n = int32(14) + } + return __ccgo_ts + 1534 + UintptrFromInt32(14) - uintptr(n) + } + return Xecvt(tls, x, n-lz, dp, sign) +} + +func Xgcvt(tls *TLS, x float64, n int32, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v b=%v, (%v:)", tls, x, n, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + Xsprintf(tls, b, __ccgo_ts+1550, VaList(bp+8, n, x)) + return b +} + +func Ximaxabs(tls *TLS, a Tintmax_t) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Ximaxdiv(tls *TLS, num Tintmax_t, den Tintmax_t) (r Timaxdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Timaxdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xlabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xldiv(tls *TLS, num int32, den int32) (r Tldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xllabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xlldiv(tls *TLS, num int64, den int64) (r Tlldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tlldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +type Tcmpfun = uintptr + +func _pntz(tls *TLS, p uintptr) (r1 int32) { + var r, v12, v2, v5, v7, v9 int32 + var v1, v8 uint32 + var v11, v4 Tuint32_t + var v14 bool + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v11, v12, v14, v2, v4, v5, v7, v8, v9 + v1 = uint32(*(*Tsize_t)(unsafe.Pointer(p)) - Uint32FromInt32(1)) + v4 = v1 + v5 = int32(31) - _a_clz_32(tls, v4&-v4) + goto _6 +_6: + v2 = v5 + goto _3 +_3: + r = v2 + if v14 = r != 0; !v14 { + v8 = *(*Tsize_t)(unsafe.Pointer(p + 1*4)) + v11 = v8 + v12 = int32(31) - _a_clz_32(tls, v11&-v11) + goto _13 + _13: + v9 = v12 + goto _10 + _10: + v7 = int32(Uint32FromInt32(8)*Uint32FromInt64(4) + uint32(v9)) + r = v7 + } + if v14 || uint32(v7) != Uint32FromInt32(8)*Uint32FromInt64(4) { + return r + } + return 0 +} + +func _cycle(tls *TLS, width Tsize_t, ar uintptr, n int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i int32 + var l Tsize_t + var v1 uint32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _ = i, l, v1 + if n < int32(2) { + return + } + *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*4)) = bp + for width != 0 { + if uint32(256) < width { + v1 = uint32(256) + } else { + v1 = width + } + l = v1 + _memcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*4)), *(*uintptr)(unsafe.Pointer(ar)), l) + i = 0 + for { + if !(i < n) { + break + } + _memcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*4)), *(*uintptr)(unsafe.Pointer(ar + uintptr(i+int32(1))*4)), l) + *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*4)) += uintptr(l) + goto _2 + _2: + ; + i++ + } + width -= l + } +} + +// C documentation +// +// /* shl() and shr() need n > 0 */ +func _shl(tls *TLS, p uintptr, n int32) { + if uint32(n) >= Uint32FromInt32(8)*Uint32FromInt64(4) { + n = int32(uint32(n) - Uint32FromInt32(8)*Uint32FromInt64(4)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) = *(*Tsize_t)(unsafe.Pointer(p)) + *(*Tsize_t)(unsafe.Pointer(p)) = uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) <<= uint32(n) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) |= *(*Tsize_t)(unsafe.Pointer(p)) >> (Uint32FromInt64(4)*Uint32FromInt32(8) - uint32(n)) + *(*Tsize_t)(unsafe.Pointer(p)) <<= uint32(n) +} + +func _shr(tls *TLS, p uintptr, n int32) { + if uint32(n) >= Uint32FromInt32(8)*Uint32FromInt64(4) { + n = int32(uint32(n) - Uint32FromInt32(8)*Uint32FromInt64(4)) + *(*Tsize_t)(unsafe.Pointer(p)) = *(*Tsize_t)(unsafe.Pointer(p + 1*4)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) = uint32(0) + } + *(*Tsize_t)(unsafe.Pointer(p)) >>= uint32(n) + *(*Tsize_t)(unsafe.Pointer(p)) |= *(*Tsize_t)(unsafe.Pointer(p + 1*4)) << (Uint32FromInt64(4)*Uint32FromInt32(8) - uint32(n)) + *(*Tsize_t)(unsafe.Pointer(p + 1*4)) >>= uint32(n) +} + +func _sift(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pshift int32, lp uintptr) { + bp := tls.Alloc(240) + defer tls.Free(240) + var i, v1, v2 int32 + var lf, rt uintptr + var _ /* ar at bp+0 */ [57]uintptr + _, _, _, _, _ = i, lf, rt, v1, v2 + i = int32(1) + (*(*[57]uintptr)(unsafe.Pointer(bp)))[0] = head + for pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[57]uintptr)(unsafe.Pointer(bp)))[0], lf, arg) >= 0 && (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[57]uintptr)(unsafe.Pointer(bp)))[0], rt, arg) >= 0 { + break + } + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, rt, arg) >= 0 { + v1 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp)))[v1] = lf + head = lf + pshift -= int32(1) + } else { + v2 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp)))[v2] = rt + head = rt + pshift -= int32(2) + } + } + _cycle(tls, width, bp, i) +} + +func _trinkle(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pp uintptr, pshift int32, trusty int32, lp uintptr) { + bp := tls.Alloc(240) + defer tls.Free(240) + var i, trail, v1 int32 + var lf, rt, stepson uintptr + var _ /* ar at bp+8 */ [57]uintptr + var _ /* p at bp+0 */ [2]Tsize_t + _, _, _, _, _, _ = i, lf, rt, stepson, trail, v1 + i = int32(1) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] = *(*Tsize_t)(unsafe.Pointer(pp)) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = *(*Tsize_t)(unsafe.Pointer(pp + 1*4)) + (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[0] = head + for (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] != uint32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] != uint32(0) { + stepson = head - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift)*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, stepson, (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[0], arg) <= 0 { + break + } + if !(trusty != 0) && pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*4))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, rt, stepson, arg) >= 0 || (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, stepson, arg) >= 0 { + break + } + } + v1 = i + i++ + (*(*[57]uintptr)(unsafe.Pointer(bp + 8)))[v1] = stepson + head = stepson + trail = _pntz(tls, bp) + _shr(tls, bp, trail) + pshift += trail + trusty = 0 + } + if !(trusty != 0) { + _cycle(tls, width, bp+8, i) + _sift(tls, head, width, cmp, arg, pshift, lp) + } +} + +func X__qsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + bp := tls.Alloc(208) + defer tls.Free(208) + var head, high uintptr + var i, size, v2, v3 Tsize_t + var pshift, trail int32 + var _ /* lp at bp+0 */ [48]Tsize_t + var _ /* p at bp+192 */ [2]Tsize_t + _, _, _, _, _, _, _, _ = head, high, i, pshift, size, trail, v2, v3 + size = width * nel + *(*[2]Tsize_t)(unsafe.Pointer(bp + 192)) = [2]Tsize_t{ + 0: uint32(1), + } + pshift = int32(1) + if !(size != 0) { + return + } + head = base + high = head + uintptr(size) - uintptr(width) + /* Precompute Leonardo numbers, scaled by element width */ + v2 = width + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = v2 + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[0] = v2 + i = Uint32FromInt32(2) + for { + v3 = (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i-uint32(2)] + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i-uint32(1)] + width + (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[i] = v3 + if !(v3 < size) { + break + } + goto _1 + _1: + ; + i++ + } + for head < high { + if (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[0]&uint32(3) == uint32(3) { + _sift(tls, head, width, cmp, arg, pshift, bp) + _shr(tls, bp+192, int32(2)) + pshift += int32(2) + } else { + if (*(*[48]Tsize_t)(unsafe.Pointer(bp)))[pshift-int32(1)] >= uint32(int32(high)-int32(head)) { + _trinkle(tls, head, width, cmp, arg, bp+192, pshift, 0, bp) + } else { + _sift(tls, head, width, cmp, arg, pshift, bp) + } + if pshift == int32(1) { + _shl(tls, bp+192, int32(1)) + pshift = 0 + } else { + _shl(tls, bp+192, pshift-int32(1)) + pshift = int32(1) + } + } + *(*Tsize_t)(unsafe.Pointer(bp + 192)) |= uint32(1) + head += uintptr(width) + } + _trinkle(tls, head, width, cmp, arg, bp+192, pshift, 0, bp) + for pshift != int32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[0] != uint32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 192)))[int32(1)] != uint32(0) { + if pshift <= int32(1) { + trail = _pntz(tls, bp+192) + _shr(tls, bp+192, trail) + pshift += trail + } else { + _shl(tls, bp+192, int32(2)) + pshift -= int32(2) + *(*Tsize_t)(unsafe.Pointer(bp + 192)) ^= uint32(7) + _shr(tls, bp+192, int32(1)) + _trinkle(tls, head-uintptr((*(*[48]Tsize_t)(unsafe.Pointer(bp)))[pshift])-uintptr(width), width, cmp, arg, bp+192, pshift+int32(1), int32(1), bp) + _shl(tls, bp+192, int32(1)) + *(*Tsize_t)(unsafe.Pointer(bp + 192)) |= uint32(1) + _trinkle(tls, head-uintptr(width), width, cmp, arg, bp+192, pshift, int32(1), bp) + } + head -= uintptr(width) + } +} + +func Xqsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + X__qsort_r(tls, base, nel, width, cmp, arg) +} + +func _wrapper_cmp(tls *TLS, v1 uintptr, v2 uintptr, cmp uintptr) (r int32) { + return (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, v1, v2) +} + +func Xqsort(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, base, nel, width, cmp, origin(2)) + } + X__qsort_r(tls, base, nel, width, __ccgo_fp(_wrapper_cmp), cmp) +} + +func _strtox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(144) + defer tls.Free(144) + var cnt Toff_t + var y float64 + var v1, v2 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _, _ = cnt, y, v1, v2 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp, prec, int32(1)) + cnt = (*TFILE)(unsafe.Pointer(bp)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp)).Fbuf)) + if p != 0 { + if cnt != 0 { + v2 = s + uintptr(cnt) + } else { + v2 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v2 + } + return y +} + +func Xstrtof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_strtox(tls, s, p, 0)) +} + +func Xstrtod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(1)) +} + +func Xstrtold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(2)) +} + +func _strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(144) + defer tls.Free(144) + var cnt Tsize_t + var y uint64 + var v1 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _ = cnt, y, v1 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp)).Fbuf))) + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) + } + return y +} + +func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_strtox1(tls, s, p, base, uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1)))) +} + +func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_strtox1(tls, s, p, base, uint64(Uint32FromUint32(0)+uint32(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))))) +} + +func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoimax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoimax(tls, s, p, base) +} + +func X__strtol_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtol(tls, s, p, base) +} + +func X__strtoll_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func X__strtoul_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoul(tls, s, p, base) +} + +func X__strtoull_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoumax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoumax(tls, s, p, base) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 uint32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1555 + } + i = uint32(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < uint32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = uint32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint32(1) + } + return uint32(0) +} + +func _wcstox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(208) + defer tls.Free(208) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y float64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint32FromInt64(64) - Uint32FromInt32(4) + AtomicStorePInt32(bp+64+76, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read) + for Xiswspace(tls, *(*Twchar_t)(unsafe.Pointer(t))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp+64, prec, int32(1)) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp+64)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_wcstox(tls, s, p, 0)) +} + +func Xwcstod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(1)) +} + +func Xwcstold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(2)) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read1(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 uint32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1555 + } + i = uint32(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < uint32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = uint32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 4 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint32(1) + } + return uint32(0) +} + +func _wcstox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(208) + defer tls.Free(208) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y uint64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint32FromInt64(64) - Uint32FromInt32(4) + AtomicStorePInt32(bp+64+76, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read1) + for Xiswspace(tls, *(*Twchar_t)(unsafe.Pointer(t))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp+64, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint32((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + int64(int32((*TFILE)(unsafe.Pointer(bp+64)).Frpos)-int32((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_wcstox1(tls, s, p, base, uint64(Uint32FromUint32(2)*Uint32FromInt32(0x7fffffff)+Uint32FromInt32(1)))) +} + +func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_wcstox1(tls, s, p, base, uint64(Uint32FromUint32(0)+uint32(-Int32FromInt32(0x7fffffff)-Int32FromInt32(1))))) +} + +func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoll(tls, s, p, base) +} + +func Xwcstoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoull(tls, s, p, base) +} + +func Xbcmp(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcmp(tls, s1, s2, n) +} + +func Xbcopy(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + } + Xmemmove(tls, s2, s1, n) +} + +func Xbzero(tls *TLS, s uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + } + Xmemset(tls, s, 0, n) +} + +func Xexplicit_bzero(tls *TLS, d uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v n=%v, (%v:)", tls, d, n, origin(2)) + } + d = Xmemset(tls, d, 0, n) +} + +func Xindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrchr(tls, s, c) +} + +const ALIGN1 = -1 +const HIGHS = 0 +const ONES = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemccpy(tls *TLS, dest uintptr, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v c=%v n=%v, (%v:)", tls, dest, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, wd, ws uintptr + var k Tsize_t + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _, _, _, _ = d, k, s, wd, ws, v2, v3, v6, v7 + d = dest + s = src + c = int32(uint8(c)) + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v3 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && int32(v2) != c) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 { + goto tail + } + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(ws))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint32)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && int32(v6) != c) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + if n != 0 { + return d + uintptr(1) + } + return uintptr(0) +} + +const SS = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemchr(tls *TLS, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v src=%v c=%v n=%v, (%v:)", tls, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var s, w, v4 uintptr + _, _, _, _ = k, s, w, v4 + s = src + c = int32(uint8(c)) + for { + if !(uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _1 + _1: + ; + s++ + n-- + } + if n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c { + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + w = s + for { + if !(n >= Uint32FromInt64(4) && !((*(*uint32)(unsafe.Pointer(w))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(w))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 4 + n -= Uint32FromInt64(4) + } + s = w + } + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + n-- + } + if n != 0 { + v4 = s + } else { + v4 = uintptr(0) + } + return v4 +} + +func Xmemcmp(tls *TLS, vl uintptr, vr uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v vl=%v vr=%v n=%v, (%v:)", tls, vl, vr, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v2 int32 + _, _, _ = l, r, v2 + l = vl + r = vr + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _1 + _1: + ; + n-- + l++ + r++ + } + if n != 0 { + v2 = int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) + } else { + v2 = 0 + } + return v2 +} + +func _twobyte_memmem(tls *TLS, h uintptr, k Tsize_t, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Search loop */ + for { + /* If remainder of haystack is shorter than needle, done */ + if uint32(int32(z)-int32(h)) < l { + return uintptr(0) + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint32(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint32(0) + goto _9 + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(k < l && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if k < l { + h += uintptr(k - ms) + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint32(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint32(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xmemmem(tls *TLS, h0 uintptr, k Tsize_t, n0 uintptr, l Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h0=%v k=%v n0=%v l=%v, (%v:)", tls, h0, k, n0, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, n uintptr + _, _ = h, n + h = h0 + n = n0 + /* Return immediately on empty needle */ + if !(l != 0) { + return h + } + /* Return immediately when needle is longer than haystack */ + if k < l { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xmemchr(tls, h0, int32(*(*uint8)(unsafe.Pointer(n))), k) + if !(h != 0) || l == uint32(1) { + return h + } + k -= uint32(int32(h) - int32(h0)) + if k < l { + return uintptr(0) + } + if l == uint32(2) { + return _twobyte_memmem(tls, h, k, n) + } + if l == uint32(3) { + return _threebyte_memmem(tls, h, k, n) + } + if l == uint32(4) { + return _fourbyte_memmem(tls, h, k, n) + } + return _twoway_memmem(tls, h, h+uintptr(k), n, l) +} + +const WS = 0 + +type TWT = uint32 + +func Xmemmove(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v2, v3, v6, v7 uintptr + var v1, v8 Tsize_t + _, _, _, _, _, _, _, _ = d, s, v1, v2, v3, v6, v7, v8 + d = dest + s = src + if d == s { + return d + } + if uint32(s)-uint32(d)-n <= uint32(-Int32FromInt32(2))*n { + return _memcpy(tls, d, s, n) + } + if d < s { + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for uint32(d)%Uint32FromInt64(4) != 0 { + v1 = n + n-- + if !(v1 != 0) { + return dest + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + } + for { + if !(n >= Uint32FromInt64(4)) { + break + } + *(*TWT)(unsafe.Pointer(d)) = *(*TWT)(unsafe.Pointer(s)) + goto _4 + _4: + ; + n -= Uint32FromInt64(4) + d += uintptr(Uint32FromInt64(4)) + s += uintptr(Uint32FromInt64(4)) + } + } + for { + if !(n != 0) { + break + } + v6 = d + d++ + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + goto _5 + _5: + ; + n-- + } + } else { + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for uint32(d+uintptr(n))%Uint32FromInt64(4) != 0 { + v8 = n + n-- + if !(v8 != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + for n >= Uint32FromInt64(4) { + n -= Uint32FromInt64(4) + *(*TWT)(unsafe.Pointer(d + uintptr(n))) = *(*TWT)(unsafe.Pointer(s + uintptr(n))) + } + } + for n != 0 { + n-- + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + } + return dest +} + +func Xmempcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _memcpy(tls, dest, src, n) + uintptr(n) +} + +func X__memrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v1 Tsize_t + _, _ = s, v1 + s = m + c = int32(uint8(c)) + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(n)))) == c { + return s + uintptr(n) + } + } + return uintptr(0) +} + +func Xmemrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, m, c, n) +} + +func Xmemset(tls *TLS, dest uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v c=%v n=%v, (%v:)", tls, dest, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c32 uint32 + var c64 uint64 + var k Tsize_t + var s uintptr + _, _, _, _ = c32, c64, k, s + s = dest + /* Fill head and tail with minimal branching. Each + * conditional ensures that all the subsequently used + * offsets are well-defined and in the dest region. */ + if !(n != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(s)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(1)))) = uint8(c) + if n <= uint32(2) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 1)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + 2)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(2)))) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(3)))) = uint8(c) + if n <= uint32(6) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 3)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint32(4)))) = uint8(c) + if n <= uint32(8) { + return dest + } + /* Advance pointer to align it at a 4-byte boundary, + * and truncate n to a multiple of 4. The previous code + * already took care of any head/tail that get cut off + * by the alignment. */ + k = -uint32(s) & uint32(3) + s += uintptr(k) + n -= k + n &= uint32(-Int32FromInt32(4)) + c32 = uint32(-Int32FromInt32(1)) / Uint32FromInt32(255) * uint32(uint8(c)) + /* In preparation to copy 32 bytes at a time, aligned on + * an 8-byte bounary, fill head/tail up to 28 bytes each. + * As in the initial byte-based head/tail fill, each + * conditional below ensures that the subsequent offsets + * are valid (e.g. !(n<=24) implies n>=28). */ + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(4))) = c32 + if n <= uint32(8) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(8))) = c32 + if n <= uint32(24) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(16))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(28))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(16))) = c32 + /* Align to a multiple of 8 so we can fill 64 bits at a time, + * and avoid writing the same bytes twice as much as is + * practical without introducing additional branching. */ + k = uint32(24) + uint32(s)&uint32(4) + s += uintptr(k) + n -= k + /* If this loop is reached, 28 tail bytes have already been + * filled, so any remainder when n drops below 32 can be + * safely ignored. */ + c64 = uint64(c32) | uint64(c32)<= uint32(32)) { + break + } + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(0))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(8))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(16))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(24))) = c64 + goto _1 + _1: + ; + n -= uint32(32) + s += uintptr(32) + } + return dest +} + +func Xrindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrrchr(tls, s, c) +} + +const ALIGN2 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws, v4, v5 uintptr + var v2, v7 uint8 + _, _, _, _, _, _ = wd, ws, v2, v4, v5, v7 + if uint32(s)%Uint32FromInt64(4) == uint32(d)%Uint32FromInt64(4) { + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + if !(v2 != 0) { + return d + } + goto _1 + _1: + ; + s++ + d++ + } + wd = d + ws = s + for { + if !!((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _3 + _3: + ; + v4 = wd + wd += 4 + v5 = ws + ws += 4 + *(*uint32)(unsafe.Pointer(v4)) = *(*uint32)(unsafe.Pointer(v5)) + } + d = wd + s = ws + } + for { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + if !(v7 != 0) { + break + } + goto _6 + _6: + ; + s++ + d++ + } + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpcpy(tls, d, s) +} + +const ALIGN3 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws uintptr + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _ = wd, ws, v2, v3, v6, v7 + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v3 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if !(n != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + goto tail + } + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint32)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && v6 != 0) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + Xmemset(tls, d, 0, n) + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpncpy(tls, d, s, n) +} + +func Xstrcasecmp(tls *TLS, _l uintptr, _r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v, (%v:)", tls, _l, _r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + _, _ = l, r + l = _l + r = _r + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcasecmp(tls, l, r) +} + +func Xstrcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcasecmp_l(tls, l, r, loc) +} + +func Xstrcasestr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, n) + for { + if !(*(*uint8)(unsafe.Pointer(h)) != 0) { + break + } + if !(Xstrncasecmp(tls, h, n, l) != 0) { + return h + } + goto _1 + _1: + ; + h++ + } + return uintptr(0) +} + +func Xstrcat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xstrcpy(tls, dest+uintptr(Xstrlen(tls, dest)), src) + return dest +} + +func Xstrchr(tls *TLS, s uintptr, c int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 uintptr + _, _ = r, v1 + r = X__strchrnul(tls, s, c) + if int32(*(*uint8)(unsafe.Pointer(r))) == int32(uint8(c)) { + v1 = r + } else { + v1 = uintptr(0) + } + return v1 +} + +const ALIGN4 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__strchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var w uintptr + _, _ = k, w + c = int32(uint8(c)) + if !(c != 0) { + return s + uintptr(Xstrlen(tls, s)) + } + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { + return s + } + goto _1 + _1: + ; + s++ + } + k = uint32(-Int32FromInt32(1)) / Uint32FromInt32(UCHAR_MAX) * uint32(c) + w = s + for { + if !(!((*(*uint32)(unsafe.Pointer(w))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(w)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint32)(unsafe.Pointer(w))^k-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^(*(*uint32)(unsafe.Pointer(w))^k) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 4 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + } + return s +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strchrnul(tls, s, c) +} + +func Xstrcmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) && *(*uint8)(unsafe.Pointer(l)) != 0) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrcpy(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpcpy(tls, dest, src) + return dest +} + +func Xstrcspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p2 uintptr + var v3 bool + var _ /* byteset at bp+0 */ [8]Tsize_t + _, _, _ = a, v3, p2 + a = s + if !(*(*uint8)(unsafe.Pointer(c)) != 0) || !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + return uint32(int32(X__strchrnul(tls, s, int32(*(*uint8)(unsafe.Pointer(c))))) - int32(a)) + } + Xmemset(tls, bp, 0, uint32(32)) + for { + if v3 = *(*uint8)(unsafe.Pointer(c)) != 0; v3 { + p2 = bp + uintptr(uint32(*(*uint8)(unsafe.Pointer(c)))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + *(*Tsize_t)(unsafe.Pointer(p2)) |= Uint32FromInt32(1) << (uint32(*(*uint8)(unsafe.Pointer(c))) % (Uint32FromInt32(8) * Uint32FromInt64(4))) + } + if !(v3 && *(*Tsize_t)(unsafe.Pointer(p2)) != 0) { + break + } + goto _1 + _1: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && !((*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(s)))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(s)))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0)) { + break + } + goto _4 + _4: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func Xstrdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrlen(tls, s) + d = Xmalloc(tls, l+uint32(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return _memcpy(tls, d, s, l+uint32(1)) +} + +func Xstrerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var msg uintptr + _, _ = l, msg + msg = Xstrerror(tls, err) + l = Xstrlen(tls, msg) + if l >= buflen { + if buflen != 0 { + _memcpy(tls, buf, msg, buflen-uint32(1)) + *(*uint8)(unsafe.Pointer(buf + uintptr(buflen-uint32(1)))) = uint8(0) + } + return int32(ERANGE) + } + _memcpy(tls, buf, msg, l+uint32(1)) + return 0 +} + +func X__xpg_strerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrerror_r(tls, err, buf, buflen) +} + +func Xstrlcat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrnlen(tls, d, n) + if l == n { + return l + Xstrlen(tls, s) + } + return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) +} + +const ALIGN5 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, wd, ws uintptr + var v1 Tsize_t + var v3, v7 uint8 + var v4, v8 bool + _, _, _, _, _, _, _, _ = d0, wd, ws, v1, v3, v4, v7, v8 + d0 = d + v1 = n + n-- + if !(v1 != 0) { + goto finish + } + if uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) == uint32(d)&(Uint32FromInt64(4)-Uint32FromInt32(1)) { + for { + if v4 = uint32(s)&(Uint32FromInt64(4)-Uint32FromInt32(1)) != 0 && n != 0; v4 { + v3 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v3 + } + if !(v4 && v3 != 0) { + break + } + goto _2 + _2: + ; + n-- + s++ + d++ + } + if n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + wd = d + ws = s + for { + if !(n >= uint32(4) && !((*(*uint32)(unsafe.Pointer(ws))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(ws)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*Tsize_t)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) + goto _5 + _5: + ; + n -= uint32(4) + ws += 4 + wd += 4 + } + d = wd + s = ws + } + } + for { + if v8 = n != 0; v8 { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + } + if !(v8 && v7 != 0) { + break + } + goto _6 + _6: + ; + n-- + s++ + d++ + } + *(*uint8)(unsafe.Pointer(d)) = uint8(0) + goto finish +finish: + ; + return uint32(int32(d)-int32(d0)) + Xstrlen(tls, s) + return r +} + +const ALIGN6 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, w uintptr + _, _ = a, w + a = s + for { + if !(uint32(s)%Uint32FromInt64(4) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return uint32(int32(s) - int32(a)) + } + goto _1 + _1: + ; + s++ + } + w = s + for { + if !!((*(*uint32)(unsafe.Pointer(w))-uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)) & ^*(*uint32)(unsafe.Pointer(w)) & (uint32(-Int32FromInt32(1))/Uint32FromInt32(UCHAR_MAX)*uint32(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _2 + _2: + ; + w += 4 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrncasecmp(tls, l, r, n) +} + +func Xstrncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strncasecmp_l(tls, l, r, n, loc) +} + +func Xstrncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xstrlen(tls, d)) + for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d++ + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + } + v3 = d + d++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(0) + return a +} + +func Xstrncmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpncpy(tls, d, s, n) + return d +} + +func Xstrndup(tls *TLS, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrnlen(tls, s, n) + d = Xmalloc(tls, l+uint32(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + _memcpy(tls, d, s, l) + *(*uint8)(unsafe.Pointer(d + uintptr(l))) = uint8(0) + return d +} + +func Xstrnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var v1 uint32 + _, _ = p, v1 + p = Xmemchr(tls, s, 0, n) + if p != 0 { + v1 = uint32(int32(p) - int32(s)) + } else { + v1 = n + } + return v1 +} + +func Xstrpbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xstrcspn(tls, s, b)) + if *(*uint8)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xstrrchr(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, s, c, Xstrlen(tls, s)+uint32(1)) +} + +func Xstrsep(tls *TLS, str uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v str=%v sep=%v, (%v:)", tls, str, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, s, v1 uintptr + _, _, _ = end, s, v1 + s = *(*uintptr)(unsafe.Pointer(str)) + if !(s != 0) { + return UintptrFromInt32(0) + } + end = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(end)) != 0 { + v1 = end + end++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + end = uintptr(0) + } + *(*uintptr)(unsafe.Pointer(str)) = end + return s +} + +var _strings = [671]uint8{'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', 0, 'H', 'a', 'n', 'g', 'u', 'p', 0, 'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 0, 'Q', 'u', 'i', 't', 0, 'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'i', 'n', 's', 't', 'r', 'u', 'c', 't', 'i', 'o', 'n', 0, 'T', 'r', 'a', 'c', 'e', '/', 'b', 'r', 'e', 'a', 'k', 'p', 'o', 'i', 'n', 't', ' ', 't', 'r', 'a', 'p', 0, 'A', 'b', 'o', 'r', 't', 'e', 'd', 0, 'B', 'u', 's', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'r', 'i', 't', 'h', 'm', 'e', 't', 'i', 'c', ' ', 'e', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n', 0, 'K', 'i', 'l', 'l', 'e', 'd', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '1', 0, 'S', 'e', 'g', 'm', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', ' ', 'f', 'a', 'u', 'l', 't', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '2', 0, 'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e', 0, 'A', 'l', 'a', 'r', 'm', ' ', 'c', 'l', 'o', 'c', 'k', 0, 'T', 'e', 'r', 'm', 'i', 'n', 'a', 't', 'e', 'd', 0, 'S', 't', 'a', 'c', 'k', ' ', 'f', 'a', 'u', 'l', 't', 0, 'C', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 't', 'u', 's', 0, 'C', 'o', 'n', 't', 'i', 'n', 'u', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 's', 'i', 'g', 'n', 'a', 'l', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'i', 'n', 'p', 'u', 't', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'o', 'u', 't', 'p', 'u', 't', ')', 0, 'U', 'r', 'g', 'e', 'n', 't', ' ', 'I', '/', 'O', ' ', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', 0, 'C', 'P', 'U', ' ', 't', 'i', 'm', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'F', 'i', 'l', 'e', ' ', 's', 'i', 'z', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'P', 'r', 'o', 'f', 'i', 'l', 'i', 'n', 'g', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'W', 'i', 'n', 'd', 'o', 'w', ' ', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 0, 'I', '/', 'O', ' ', 'p', 'o', 's', 's', 'i', 'b', 'l', 'e', 0, 'P', 'o', 'w', 'e', 'r', ' ', 'f', 'a', 'i', 'l', 'u', 'r', 'e', 0, 'B', 'a', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l', 0, 'R', 'T', '3', '2', 0, 'R', 'T', '3', '3', 0, 'R', 'T', '3', '4', 0, 'R', 'T', '3', '5', 0, 'R', 'T', '3', '6', 0, 'R', 'T', '3', '7', 0, 'R', 'T', '3', '8', 0, 'R', 'T', '3', '9', 0, 'R', 'T', '4', '0', 0, 'R', 'T', '4', '1', 0, 'R', 'T', '4', '2', 0, 'R', 'T', '4', '3', 0, 'R', 'T', '4', '4', 0, 'R', 'T', '4', '5', 0, 'R', 'T', '4', '6', 0, 'R', 'T', '4', '7', 0, 'R', 'T', '4', '8', 0, 'R', 'T', '4', '9', 0, 'R', 'T', '5', '0', 0, 'R', 'T', '5', '1', 0, 'R', 'T', '5', '2', 0, 'R', 'T', '5', '3', 0, 'R', 'T', '5', '4', 0, 'R', 'T', '5', '5', 0, 'R', 'T', '5', '6', 0, 'R', 'T', '5', '7', 0, 'R', 'T', '5', '8', 0, 'R', 'T', '5', '9', 0, 'R', 'T', '6', '0', 0, 'R', 'T', '6', '1', 0, 'R', 'T', '6', '2', 0, 'R', 'T', '6', '3', 0, 'R', 'T', '6', '4'} + +func Xstrsignal(tls *TLS, signum int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v signum=%v, (%v:)", tls, signum, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v2 int32 + _, _ = s, v2 + s = uintptr(unsafe.Pointer(&_strings)) + signum = signum + if uint32(signum)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + signum = 0 + } + for { + v2 = signum + signum-- + if !(v2 != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + goto _1 + _1: + ; + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xstrspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p3 uintptr + var v4 bool + var _ /* byteset at bp+0 */ [8]Tsize_t + _, _, _ = a, v4, p3 + a = s + *(*[8]Tsize_t)(unsafe.Pointer(bp)) = [8]Tsize_t{} + if !(*(*uint8)(unsafe.Pointer(c)) != 0) { + return uint32(0) + } + if !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c)))) { + break + } + goto _1 + _1: + ; + s++ + } + return uint32(int32(s) - int32(a)) + } + for { + if v4 = *(*uint8)(unsafe.Pointer(c)) != 0; v4 { + p3 = bp + uintptr(uint32(*(*uint8)(unsafe.Pointer(c)))/(Uint32FromInt32(8)*Uint32FromInt64(4)))*4 + *(*Tsize_t)(unsafe.Pointer(p3)) |= Uint32FromInt32(1) << (uint32(*(*uint8)(unsafe.Pointer(c))) % (Uint32FromInt32(8) * Uint32FromInt64(4))) + } + if !(v4 && *(*Tsize_t)(unsafe.Pointer(p3)) != 0) { + break + } + goto _2 + _2: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(s)))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(s)))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0) { + break + } + goto _5 + _5: + ; + s++ + } + return uint32(int32(s) - int32(a)) +} + +func _twobyte_strstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint32(int32(z)-int32(h)) < l { + /* Fast estimate for MAX(l,63) */ + grow = l | uint32(63) + z2 = Xmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint32(int32(z)-int32(h)) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) + } + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[8]Tsize_t)(unsafe.Pointer(bp)))[uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))/(Uint32FromInt32(8)*Uint32FromInt64(4))]&(Uint32FromInt32(1)<<(uint32(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1)))))%(Uint32FromInt32(8)*Uint32FromInt64(4)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint32(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint32(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint32(0) + goto _9 + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 { + h += uintptr(k - ms) + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint32(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint32(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xstrstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle */ + if !(*(*uint8)(unsafe.Pointer(n)) != 0) { + return h + } + /* Use faster algorithms for short needles */ + h = Xstrchr(tls, h, int32(*(*uint8)(unsafe.Pointer(n)))) + if !(h != 0) || !(*(*uint8)(unsafe.Pointer(n + 1)) != 0) { + return h + } + if !(*(*uint8)(unsafe.Pointer(h + 1)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 2)) != 0) { + return _twobyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 2)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 3)) != 0) { + return _threebyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 3)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 4)) != 0) { + return _fourbyte_strstr(tls, h, n) + } + return _twoway_strstr(tls, h, n) +} + +func Xstrtok(tls *TLS, s uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4 uintptr + var v2 bool + _, _, _, _ = v1, v2, v3, v4 + if v2 = !(s != 0); v2 { + v1 = _p2 + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + _p2 = v3 + return v3 + } + _p2 = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(_p2)) != 0 { + v4 = _p2 + _p2++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + _p2 = uintptr(0) + } + return s +} + +var _p2 uintptr + +func Xstrtok_r(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xstrverscmp(tls *TLS, l0 uintptr, r0 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l0=%v r0=%v, (%v:)", tls, l0, r0, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, z int32 + var dp, i, j, v2 Tsize_t + var l, r uintptr + _, _, _, _, _, _, _, _ = c, dp, i, j, l, r, z, v2 + l = l0 + r = r0 + z = int32(1) + /* Find maximal matching prefix and track its maximal digit + * suffix and whether those digits are all zeros. */ + v2 = Uint32FromInt32(0) + i = v2 + dp = v2 + for { + if !(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))) { + break + } + c = int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) + if !(c != 0) { + return 0 + } + if !(BoolInt32(uint32(c)-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + dp = i + uint32(1) + z = Int32FromInt32(1) + } else { + if c != int32('0') { + z = 0 + } + } + goto _1 + _1: + ; + i++ + } + if uint32(int32(*(*uint8)(unsafe.Pointer(l + uintptr(dp))))-int32('1')) < uint32(9) && uint32(int32(*(*uint8)(unsafe.Pointer(r + uintptr(dp))))-int32('1')) < uint32(9) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ + j = i + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return int32(1) + } + goto _3 + _3: + ; + j++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-uint32('0') < uint32(10)) != 0 { + return -int32(1) + } + } else { + if z != 0 && dp < i && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-uint32('0') < uint32(10)) != 0 || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-uint32('0') < uint32(10)) != 0) { + /* Otherwise, if common prefix of digit sequence is + * all zeros, digits order less than non-digits. */ + return int32(uint8(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-Int32FromUint8('0'))) - int32(uint8(int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-Int32FromUint8('0'))) + } + } + return int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(r + uintptr(i)))) +} + +func Xswab(tls *TLS, _src uintptr, _dest uintptr, n Tssize_t) { + if __ccgo_strace { + trc("tls=%v _src=%v _dest=%v n=%v, (%v:)", tls, _src, _dest, n, origin(2)) + } + var dest, src uintptr + _, _ = dest, src + src = _src + dest = _dest + for { + if !(n > int32(1)) { + break + } + *(*uint8)(unsafe.Pointer(dest)) = *(*uint8)(unsafe.Pointer(src + 1)) + *(*uint8)(unsafe.Pointer(dest + 1)) = *(*uint8)(unsafe.Pointer(src)) + dest += uintptr(2) + src += uintptr(2) + goto _1 + _1: + ; + n -= int32(2) + } +} + +func Xwcpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcscpy(tls, d, s) + uintptr(Xwcslen(tls, s))*4 +} + +func Xwcpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsncpy(tls, d, s, n) + uintptr(Xwcsnlen(tls, s, n))*4 +} + +func Xwcscasecmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, uint32(-Int32FromInt32(1))) +} + +func Xwcscasecmp_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscasecmp(tls, l, r) +} + +func Xwcscat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xwcscpy(tls, dest+uintptr(Xwcslen(tls, dest))*4, src) + return dest +} + +func Xwcschr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + if !(c != 0) { + return s + uintptr(Xwcslen(tls, s))*4 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + s += 4 + } + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcscmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2 int32 + _ = v2 + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + l += 4 + r += 4 + } + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v2 = -int32(1) + } else { + v2 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + return v2 +} + +func Xwcscpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Twchar_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v2 = s + s += 4 + v1 = *(*Twchar_t)(unsafe.Pointer(v2)) + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = v1 + if !(v1 != 0) { + break + } + } + return a +} + +func Xwcscspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 uint32 + _, _, _, _ = a, v1, v2, v3 + if !(*(*Twchar_t)(unsafe.Pointer(c)) != 0) { + return Xwcslen(tls, s) + } + if !(*(*Twchar_t)(unsafe.Pointer(c + 1*4)) != 0) { + v3 = s + a = v3 + v2 = Xwcschr(tls, v3, *(*Twchar_t)(unsafe.Pointer(c))) + s = v2 + if v2 != 0 { + v1 = uint32((int32(s) - int32(a)) / 4) + } else { + v1 = Xwcslen(tls, a) + } + return v1 + } + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && !(Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0)) { + break + } + goto _4 + _4: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func Xwcsdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xwcslen(tls, s) + d = Xmalloc(tls, (l+uint32(1))*uint32(4)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xwmemcpy(tls, d, s, l+uint32(1)) +} + +func Xwcslen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func Xwcsncasecmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v1 Tsize_t + _ = v1 + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0 && n != 0 && (*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) || Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(l))) == Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(r))))) { + break + } + goto _2 + _2: + ; + l += 4 + r += 4 + n-- + } + return int32(Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(l))) - Xtowlower(tls, *(*Twchar_t)(unsafe.Pointer(r)))) +} + +func Xwcsncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v locale=%v, (%v:)", tls, l, r, n, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, n) +} + +func Xwcsncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xwcslen(tls, d)) * 4 + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = uint32(0) + return a +} + +func Xwcsncmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwcsncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2 uintptr + _, _, _ = a, v1, v2 + a = d + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + Xwmemset(tls, d, uint32(0), n) + return a +} + +func Xwcsnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var z uintptr + _ = z + z = Xwmemchr(tls, s, uint32(0), n) + if z != 0 { + n = uint32((int32(z) - int32(s)) / 4) + } + return n +} + +func Xwcspbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xwcscspn(tls, s, b)) * 4 + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = UintptrFromInt32(0) + } + return v1 +} + +func Xwcsrchr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v2 uintptr + _, _ = p, v2 + p = s + uintptr(Xwcslen(tls, s))*4 + for { + if !(p >= s && *(*Twchar_t)(unsafe.Pointer(p)) != c) { + break + } + goto _1 + _1: + ; + p -= 4 + } + if p >= s { + v2 = p + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcsspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint32((int32(s) - int32(a)) / 4) +} + +func _twoway_wcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var grow, ip, jp, k, l, mem, mem0, ms, p, p0, v2, v3, v4, v5, v6, v7 Tsize_t + var z, z2 uintptr + var v11, v8 uint32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = grow, ip, jp, k, l, mem, mem0, ms, p, p0, z, z2, v11, v2, v3, v4, v5, v6, v7, v8 + /* Computing length of needle */ + l = uint32(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(h + uintptr(l)*4)) != 0) { + break + } + goto _1 + _1: + ; + l++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 { + return uintptr(0) + } /* hit the end of h */ + /* Compute maximal suffix */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v2 = Uint32FromInt32(1) + p = v2 + k = v2 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) > *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint32FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint32(-Int32FromInt32(1)) + jp = uint32(0) + v5 = Uint32FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint32(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) < *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint32(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint32FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint32(1) > ms+uint32(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xwmemcmp(tls, n, n+uintptr(p)*4, ms+uint32(1)) != 0 { + mem0 = uint32(0) + if ms > l-ms-uint32(1) { + v8 = ms + } else { + v8 = l - ms - uint32(1) + } + p = v8 + uint32(1) + } else { + mem0 = l - p + } + mem = uint32(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint32((int32(z)-int32(h))/4) < l { + /* Fast estimate for MIN(l,63) */ + grow = l | uint32(63) + z2 = Xwmemchr(tls, z, uint32(0), grow) + if z2 != 0 { + z = z2 + if uint32((int32(z)-int32(h))/4) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) * 4 + } + } + /* Compare right half */ + if ms+uint32(1) > mem { + v11 = ms + uint32(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k)*4))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 { + h += uintptr(k-ms) * 4 + mem = uint32(0) + goto _9 + } + /* Compare left half */ + k = ms + uint32(1) + for { + if !(k > mem && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k-uint32(1))*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k-uint32(1))*4))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) * 4 + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xwcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle or haystack */ + if !(*(*Twchar_t)(unsafe.Pointer(n)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h)) != 0) { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xwcschr(tls, h, *(*Twchar_t)(unsafe.Pointer(n))) + if !(h != 0) || !(*(*Twchar_t)(unsafe.Pointer(n + 1*4)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h + 1*4)) != 0) { + return uintptr(0) + } + return _twoway_wcsstr(tls, h, n) +} + +func Xwcstok(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xwcsspn(tls, s, sep)) * 4 + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xwcscspn(tls, s, sep))*4 + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5)) += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = uint32(0) + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xwcswcs(tls *TLS, haystack uintptr, needle uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v haystack=%v needle=%v, (%v:)", tls, haystack, needle, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsstr(tls, haystack, needle) +} + +func Xwmemchr(tls *TLS, s uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v n=%v, (%v:)", tls, s, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + n-- + s += 4 + } + if n != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwmemcmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r))) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwmemcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Tsize_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + v3 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = *(*Twchar_t)(unsafe.Pointer(v3)) + } + return a +} + +func Xwmemmove(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, v3, v4 uintptr + var v1, v2 Tsize_t + _, _, _, _, _ = d0, v1, v2, v3, v4 + d0 = d + if d == s { + return d + } + if uint32(d)-uint32(s) < n*uint32(4) { + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + *(*Twchar_t)(unsafe.Pointer(d + uintptr(n)*4)) = *(*Twchar_t)(unsafe.Pointer(s + uintptr(n)*4)) + } + } else { + for { + v2 = n + n-- + if !(v2 != 0) { + break + } + v3 = d + d += 4 + v4 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = *(*Twchar_t)(unsafe.Pointer(v4)) + } + } + return d0 +} + +func Xwmemset(tls *TLS, d uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v c=%v n=%v, (%v:)", tls, d, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 uintptr + var v1 Tsize_t + _, _, _ = ret, v1, v2 + ret = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = c + } + return ret +} + +func Xmkdtemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var retries, v1 int32 + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if !(Xmkdir(tls, template, uint32(0700)) != 0) { + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + _memcpy(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) + return uintptr(0) +} + +func Xmkostemp(tls *TLS, template uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v flags=%v, (%v:)", tls, template, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, flags) +} + +func X__mkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var fd, retries, v1, v3 int32 + var l Tsize_t + _, _, _, _, _ = fd, l, retries, v1, v3 + l = Xstrlen(tls, template) + if l < uint32(6) || uint32(len1) > l-uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + flags -= flags & (Int32FromInt32(03) | Int32FromInt32(O_PATH)) + retries = int32(100) + for { + ___randname(tls, template+uintptr(l)-uintptr(len1)-uintptr(6)) + v3 = Xopen(tls, template, flags|int32(O_RDWR)|int32(O_CREAT)|int32(O_EXCL), VaList(bp+8, int32(0600))) + fd = v3 + if v3 >= 0 { + return fd + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + _memcpy(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1563, uint32(6)) + return -int32(1) +} + +func Xmkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, flags) +} + +func Xmkstemp(tls *TLS, template uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, 0) +} + +func Xmkstemps(tls *TLS, template uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v, (%v:)", tls, template, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, 0) +} + +func Xmktemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var l Tsize_t + var retries, v1 int32 + var _ /* st at bp+0 */ Tstat + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint32(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1563, uint32(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + return template + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if Xstat(tls, template, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) { + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + } + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0) { + break + } + } + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EEXIST) + return template +} + +func Xcfgetospeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*Ttermios)(unsafe.Pointer(tio)).Fc_cflag & uint32(CBAUD) +} + +func Xcfgetispeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfgetospeed(tls, tio) +} + +func Xcfmakeraw(tls *TLS, t uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + } + *(*Ttcflag_t)(unsafe.Pointer(t)) &= uint32(^(Int32FromInt32(IGNBRK) | Int32FromInt32(BRKINT) | Int32FromInt32(PARMRK) | Int32FromInt32(ISTRIP) | Int32FromInt32(INLCR) | Int32FromInt32(IGNCR) | Int32FromInt32(ICRNL) | Int32FromInt32(IXON))) + *(*Ttcflag_t)(unsafe.Pointer(t + 4)) &= uint32(^Int32FromInt32(OPOST)) + *(*Ttcflag_t)(unsafe.Pointer(t + 12)) &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ECHONL) | Int32FromInt32(ICANON) | Int32FromInt32(ISIG) | Int32FromInt32(IEXTEN))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) &= uint32(^(Int32FromInt32(CSIZE) | Int32FromInt32(PARENB))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) |= uint32(CS8) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 6)) = uint8(1) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 5)) = uint8(0) +} + +func Xcfsetospeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + if speed&uint32(^Int32FromInt32(CBAUD)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) &= uint32(^Int32FromInt32(CBAUD)) + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) |= speed + return 0 +} + +func Xcfsetispeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if speed != 0 { + v1 = Xcfsetospeed(tls, tio, speed) + } else { + v1 = 0 + } + return v1 +} + +func Xcfsetspeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfsetospeed(tls, tio, speed) +} + +func Xtcdrain(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TCSBRK)), int32(Int32FromInt32(1)), 0, 0, 0))) +} + +func Xtcflow(tls *TLS, fd int32, action int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v action=%v, (%v:)", tls, fd, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCXONC), VaList(bp+8, action)) +} + +func Xtcflush(tls *TLS, fd int32, queue int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v queue=%v, (%v:)", tls, fd, queue, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCFLSH), VaList(bp+8, queue)) +} + +func Xtcgetattr(tls *TLS, fd int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tio=%v, (%v:)", tls, fd, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if Xioctl(tls, fd, int32(TCGETS), VaList(bp+8, tio)) != 0 { + return -int32(1) + } + return 0 +} + +func Xtcgetsid(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* sid at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGSID), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcgetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(wsz)))) +} + +func Xtcsendbreak(tls *TLS, fd int32, dur int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v dur=%v, (%v:)", tls, fd, dur, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + /* nonzero duration is implementation-defined, so ignore it */ + return Xioctl(tls, fd, int32(TCSBRK), VaList(bp+8, 0)) +} + +func Xtcsetattr(tls *TLS, fd int32, act int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v act=%v tio=%v, (%v:)", tls, fd, act, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if act < 0 || act > int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xioctl(tls, fd, int32(TCSETS)+act, VaList(bp+8, tio)) +} + +func Xtcsetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCSWINSZ)), int32(wsz)))) +} + +func X__map_file(tls *TLS, pathname uintptr, size uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v pathname=%v size=%v, (%v:)", tls, pathname, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var fd int32 + var map1, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _, _ = fd, map1, v1 + map1 = uintptr(-Int32FromInt32(1)) + fd = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_open), int32(pathname), int32(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)|Int32FromInt32(O_LARGEFILE))))) + if fd < 0 { + return uintptr(0) + } + if !(X__fstat(tls, fd, bp) != 0) { + map1 = X__mmap(tls, uintptr(0), uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_size), int32(PROT_READ), int32(MAP_SHARED), fd, 0) + *(*Tsize_t)(unsafe.Pointer(size)) = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + } + X__syscall1(tls, int32(SYS_close), fd) + if map1 == uintptr(-Int32FromInt32(1)) { + v1 = uintptr(0) + } else { + v1 = map1 + } + return v1 +} + +func X__month_to_secs(tls *TLS, month int32, is_leap int32) (r int32) { + if __ccgo_strace { + trc("tls=%v month=%v is_leap=%v, (%v:)", tls, month, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t int32 + _ = t + t = _secs_through_month[month] + if is_leap != 0 && month >= int32(2) { + t += int32(86400) + } + return t +} + +var _secs_through_month = [12]int32{ + 1: Int32FromInt32(31) * Int32FromInt32(86400), + 2: Int32FromInt32(59) * Int32FromInt32(86400), + 3: Int32FromInt32(90) * Int32FromInt32(86400), + 4: Int32FromInt32(120) * Int32FromInt32(86400), + 5: Int32FromInt32(151) * Int32FromInt32(86400), + 6: Int32FromInt32(181) * Int32FromInt32(86400), + 7: Int32FromInt32(212) * Int32FromInt32(86400), + 8: Int32FromInt32(243) * Int32FromInt32(86400), + 9: Int32FromInt32(273) * Int32FromInt32(86400), + 10: Int32FromInt32(304) * Int32FromInt32(86400), + 11: Int32FromInt32(334) * Int32FromInt32(86400), +} + +const DAYS_PER_100Y = 36524 +const DAYS_PER_400Y = 146097 +const DAYS_PER_4Y = 1461 +const LEAPOCH = 951868800 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +/* 2000-03-01 (mod 400 year, immediately after feb29 */ + +func X__secs_to_tm(tls *TLS, t int64, tm uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c_cycles, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, wday, yday int32 + var days, secs, years int64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = c_cycles, days, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, secs, wday, yday, years + /* Reject time_t values whose year would overflow int */ + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || t > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + return -int32(1) + } + secs = t - (Int64FromInt64(946684800) + int64(Int32FromInt32(86400)*(Int32FromInt32(31)+Int32FromInt32(29)))) + days = secs / int64(86400) + remsecs = int32(secs % int64(86400)) + if remsecs < 0 { + remsecs += int32(86400) + days-- + } + wday = int32((int64(3) + days) % int64(7)) + if wday < 0 { + wday += int32(7) + } + qc_cycles = int32(days / int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + remdays = int32(days % int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + if remdays < 0 { + remdays += Int32FromInt32(365)*Int32FromInt32(400) + Int32FromInt32(97) + qc_cycles-- + } + c_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + if c_cycles == int32(4) { + c_cycles-- + } + remdays -= c_cycles * (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + q_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + if q_cycles == int32(25) { + q_cycles-- + } + remdays -= q_cycles * (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + remyears = remdays / int32(365) + if remyears == int32(4) { + remyears-- + } + remdays -= remyears * int32(365) + leap = BoolInt32(!(remyears != 0) && (q_cycles != 0 || !(c_cycles != 0))) + yday = remdays + int32(31) + int32(28) + leap + if yday >= int32(365)+leap { + yday -= int32(365) + leap + } + years = int64(remyears+int32(4)*q_cycles+int32(100)*c_cycles) + int64(400)*int64(qc_cycles) + months = 0 + for { + if !(int32(_days_in_month[months]) <= remdays) { + break + } + remdays -= int32(_days_in_month[months]) + goto _1 + _1: + ; + months++ + } + if months >= int32(10) { + months -= int32(12) + years++ + } + if years+int64(100) > int64(INT_MAX) || years+int64(100) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + return -int32(1) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = int32(years + int64(100)) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon = months + int32(2) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mday = remdays + int32(1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday = wday + (*Ttm)(unsafe.Pointer(tm)).Ftm_yday = yday + (*Ttm)(unsafe.Pointer(tm)).Ftm_hour = remsecs / int32(3600) + (*Ttm)(unsafe.Pointer(tm)).Ftm_min = remsecs / int32(60) % int32(60) + (*Ttm)(unsafe.Pointer(tm)).Ftm_sec = remsecs % int32(60) + return 0 +} + +var _days_in_month = [12]uint8{ + 0: uint8(31), + 1: uint8(30), + 2: uint8(31), + 3: uint8(30), + 4: uint8(31), + 5: uint8(31), + 6: uint8(30), + 7: uint8(31), + 8: uint8(30), + 9: uint8(31), + 10: uint8(31), + 11: uint8(29), +} + +func X__tm_to_secs(tls *TLS, tm uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, month int32 + var t, year int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _ = adj, month, t, year + year = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + month = (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + if month >= int32(12) || month < 0 { + adj = month / int32(12) + month %= int32(12) + if month < 0 { + adj-- + month += int32(12) + } + year += int64(adj) + } + t = X__year_to_secs(tls, year, bp) + t += int64(X__month_to_secs(tls, month, *(*int32)(unsafe.Pointer(bp)))) + t += int64(86400) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday-Int32FromInt32(1)) + t += int64(3600) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + t += int64(60) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + t += int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + return t +} + +var _std_name [7]uint8 +var _dst_name [7]uint8 + +var _dst_off int32 +var _r0 [5]int32 +var _r12 [5]int32 + +var _zi uintptr +var _trans uintptr +var _index uintptr +var _types uintptr +var _abbrevs uintptr +var _abbrevs_end uintptr +var _map_size Tsize_t + +var _old_tz_buf [32]uint8 +var _old_tz = uintptr(unsafe.Pointer(&_old_tz_buf)) +var _old_tz_size = uint32(32) + +var _lock4 [1]int32 + +func _getint2(tls *TLS, p uintptr) (r int32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) + uint32(10)*x + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(p))++ + } + return int32(x) +} + +func _getoff(tls *TLS, p uintptr) (r int32) { + var neg, off, v1 int32 + _, _, _ = neg, off, v1 + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('-') { + *(*uintptr)(unsafe.Pointer(p))++ + neg = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('+') { + *(*uintptr)(unsafe.Pointer(p))++ + } + } + off = int32(3600) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += int32(60) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += _getint2(tls, p) + } + } + if neg != 0 { + v1 = -off + } else { + v1 = off + } + return v1 +} + +func _getrule(tls *TLS, p uintptr, rule uintptr) { + var r, v1 int32 + _, _ = r, v1 + v1 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) + *(*int32)(unsafe.Pointer(rule)) = v1 + r = v1 + if r != int32('M') { + if r == int32('J') { + *(*uintptr)(unsafe.Pointer(p))++ + } else { + *(*int32)(unsafe.Pointer(rule)) = 0 + } + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + } else { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 2*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 3*4)) = _getint2(tls, p) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('/') { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 4*4)) = _getoff(tls, p) + } else { + *(*int32)(unsafe.Pointer(rule + 4*4)) = int32(7200) + } +} + +func _getname(tls *TLS, d uintptr, p uintptr) { + var i, v3 int32 + _, _ = i, v3 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('<') { + *(*uintptr)(unsafe.Pointer(p))++ + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i)))) != int32('>')) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _1 + _1: + ; + i++ + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 { + *(*uintptr)(unsafe.Pointer(p))++ + } + } else { + i = 0 + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))))|int32(32)-int32('a')) < uint32(26)) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _2 + _2: + ; + i++ + } + } + *(*uintptr)(unsafe.Pointer(p)) += uintptr(i) + if i < int32(TZNAME_MAX) { + v3 = i + } else { + v3 = int32(TZNAME_MAX) + } + *(*uint8)(unsafe.Pointer(d + uintptr(v3))) = uint8(0) +} + +func _zi_read32(tls *TLS, z uintptr) (r Tuint32_t) { + return uint32(*(*uint8)(unsafe.Pointer(z)))< uint32(Int32FromInt32(PATH_MAX)+Int32FromInt32(1)) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + i = Uint32FromInt32(3) + } + if i >= _old_tz_size { + _old_tz_size *= uint32(2) + if i >= _old_tz_size { + _old_tz_size = i + uint32(1) + } + if _old_tz_size > uint32(Int32FromInt32(PATH_MAX)+Int32FromInt32(2)) { + _old_tz_size = uint32(Int32FromInt32(PATH_MAX) + Int32FromInt32(2)) + } + _old_tz = Xmalloc(tls, _old_tz_size) + } + if _old_tz != 0 { + _memcpy(tls, _old_tz, *(*uintptr)(unsafe.Pointer(bp + 288)), i+uint32(1)) + } + posix_form = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) != int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 292)) = *(*uintptr)(unsafe.Pointer(bp + 288)) + _getname(tls, bp+301, bp+292) + if *(*uintptr)(unsafe.Pointer(bp + 292)) != *(*uintptr)(unsafe.Pointer(bp + 288)) && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292))))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292))))) == int32('-') || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 292)))))-uint32('0') < uint32(10)) != 0 || !(Xstrcmp(tls, bp+301, __ccgo_ts+1588) != 0) || !(Xstrcmp(tls, bp+301, __ccgo_ts+1592) != 0)) { + posix_form = int32(1) + } + } + /* Non-suid can use an absolute tzfile pathname or a relative + * pathame beginning with "."; in secure mode, only the + * standard path will be searched. */ + if !(posix_form != 0) { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 288))++ + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('/') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('.') { + if !(X__libc.Fsecure != 0) || !(Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), __ccgo_ts+1573) != 0) { + map1 = X__map_file(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), uintptr(unsafe.Pointer(&_map_size))) + } + } else { + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) + if l <= uint32(NAME_MAX) && !(Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), int32('.')) != 0) { + _memcpy(tls, pathname, *(*uintptr)(unsafe.Pointer(bp + 288)), l+uint32(1)) + *(*uint8)(unsafe.Pointer(pathname + uintptr(l))) = uint8(0) + try = uintptr(unsafe.Pointer(&_search)) + for { + if !(!(map1 != 0) && *(*uint8)(unsafe.Pointer(try)) != 0) { + break + } + l = Xstrlen(tls, try) + _memcpy(tls, pathname-uintptr(l), try, l) + map1 = X__map_file(tls, pathname-uintptr(l), uintptr(unsafe.Pointer(&_map_size))) + goto _3 + _3: + ; + try += uintptr(l + uint32(1)) + } + } + } + if !(map1 != 0) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + } + if map1 != 0 && (_map_size < uint32(44) || Xmemcmp(tls, map1, __ccgo_ts+1596, uint32(4)) != 0) { + X__munmap(tls, map1, _map_size) + map1 = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + _zi = map1 + if map1 != 0 { + scale = int32(2) + if int32(*(*uint8)(unsafe.Pointer(map1 + 4))) != int32('1') { + *(*[6]uint8)(unsafe.Pointer(bp)) = [6]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(8), + 3: uint8(5), + 4: uint8(6), + 5: uint8(1), + } + skip = _zi_dotprod(tls, _zi+uintptr(20), bp, uint32(6)) + _trans = _zi + uintptr(skip) + uintptr(44) + uintptr(44) + scale++ + } else { + _trans = _zi + uintptr(44) + } + _index = _trans + uintptr(_zi_read32(tls, _trans-uintptr(12))<> scale) + if !(n != 0) { + if alt != 0 { + *(*Tsize_t)(unsafe.Pointer(alt)) = uint32(0) + } + return uint32(0) + } + /* Binary search for 'most-recent rule before t'. */ + for n > uint32(1) { + m = a + n/uint32(2) + x = uint64(_zi_read32(tls, _trans+uintptr(m<> scale) + if a == n-uint32(1) { + return uint32(-Int32FromInt32(1)) + } + if a == uint32(0) { + x = uint64(_zi_read32(tls, _trans)) + if scale == int32(3) { + x = x<>(m-int32(1))&int32(1) + } + return r +} + +/* Convert a POSIX DST rule plus year to seconds since epoch. */ + +func _rule_to_secs(tls *TLS, rule uintptr, year int32) (r int64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var d, days, m, n, wday, x int32 + var t int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _, _, _, _ = d, days, m, n, t, wday, x + t = X__year_to_secs(tls, int64(year), bp) + if *(*int32)(unsafe.Pointer(rule)) != int32('M') { + x = *(*int32)(unsafe.Pointer(rule + 1*4)) + if *(*int32)(unsafe.Pointer(rule)) == int32('J') && (x < int32(60) || !(*(*int32)(unsafe.Pointer(bp)) != 0)) { + x-- + } + t += int64(int32(86400) * x) + } else { + m = *(*int32)(unsafe.Pointer(rule + 1*4)) + n = *(*int32)(unsafe.Pointer(rule + 2*4)) + d = *(*int32)(unsafe.Pointer(rule + 3*4)) + t += int64(X__month_to_secs(tls, m-int32(1), *(*int32)(unsafe.Pointer(bp)))) + wday = int32((t+int64(Int32FromInt32(4)*Int32FromInt32(86400)))%int64(Int32FromInt32(7)*Int32FromInt32(86400))) / int32(86400) + days = d - wday + if days < 0 { + days += int32(7) + } + if n == int32(5) && days+int32(28) >= _days_in_month1(tls, m, *(*int32)(unsafe.Pointer(bp))) { + n = int32(4) + } + t += int64(int32(86400) * (days + int32(7)*(n-int32(1)))) + } + t += int64(*(*int32)(unsafe.Pointer(rule + 4*4))) + return t +} + +/* Determine the time zone in effect for a given time in seconds since the + * epoch. It can be given in local or universal time. The results will + * indicate whether DST is in effect at the queried time, and will give both + * the GMT offset for the active zone/DST rule and the opposite DST. This + * enables a caller to efficiently adjust for the case where an explicit + * DST specification mismatches what would be in effect at the time. */ + +func X__secs_to_zone(tls *TLS, t int64, local int32, isdst uintptr, offset uintptr, oppoff uintptr, zonename uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v local=%v isdst=%v offset=%v oppoff=%v zonename=%v, (%v:)", tls, t, local, isdst, offset, oppoff, zonename, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tsize_t + var t0, t1, y int64 + var _ /* alt at bp+0 */ Tsize_t + _, _, _, _ = i, t0, t1, y + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if _zi != 0 { + i = _scan_trans(tls, t, local, bp) + if i != uint32(-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(isdst)) = int32(*(*uint8)(unsafe.Pointer(_types + uintptr(uint32(6)*i+uint32(4))))) + *(*int32)(unsafe.Pointer(offset)) = int32(_zi_read32(tls, _types+uintptr(uint32(6)*i))) + *(*uintptr)(unsafe.Pointer(zonename)) = _abbrevs + uintptr(*(*uint8)(unsafe.Pointer(_types + uintptr(uint32(6)*i+uint32(5))))) + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = int32(_zi_read32(tls, _types+uintptr(uint32(6)**(*Tsize_t)(unsafe.Pointer(bp))))) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + } + } + if !(Xdaylight != 0) { + goto std + } + /* FIXME: may be broken if DST changes right at year boundary? + * Also, this could be more efficient.*/ + y = t/int64(31556952) + int64(70) + for X__year_to_secs(tls, y, uintptr(0)) > t { + y-- + } + for X__year_to_secs(tls, y+int64(1), uintptr(0)) < t { + y++ + } + t0 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r0)), int32(y)) + t1 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r12)), int32(y)) + if !(local != 0) { + t0 += int64(Xtimezone) + t1 += int64(_dst_off) + } + if t0 < t1 { + if t >= t0 && t < t1 { + goto dst + } + goto std + } else { + if t >= t1 && t < t0 { + goto std + } + goto dst + } + goto std +std: + ; + *(*int32)(unsafe.Pointer(isdst)) = 0 + *(*int32)(unsafe.Pointer(offset)) = -Xtimezone + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = -_dst_off + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[0] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + goto dst +dst: + ; + *(*int32)(unsafe.Pointer(isdst)) = int32(1) + *(*int32)(unsafe.Pointer(offset)) = -_dst_off + if oppoff != 0 { + *(*int32)(unsafe.Pointer(oppoff)) = -Xtimezone + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[int32(1)] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func ___tzset(tls *TLS) { + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func X__tm_to_tzname(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = (*Ttm)(unsafe.Pointer(tm)).F__tm_zone + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if p != uintptr(unsafe.Pointer(&X__utc)) && p != Xtzname[0] && p != Xtzname[int32(1)] && (!(_zi != 0) || uint32(p)-uint32(_abbrevs) >= uint32(int32(_abbrevs_end)-int32(_abbrevs))) { + p = __ccgo_ts + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return p +} + +func X__year_to_secs(tls *TLS, year int64, is_leap uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v year=%v is_leap=%v, (%v:)", tls, year, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var centuries, cycles, leaps, leaps1, rem, y int32 + var _ /* dummy at bp+0 */ int32 + _, _, _, _, _, _ = centuries, cycles, leaps, leaps1, rem, y + if uint64(year)-uint64(2) <= uint64(136) { + y = int32(year) + leaps = (y - int32(68)) >> int32(2) + if !((y-Int32FromInt32(68))&Int32FromInt32(3) != 0) { + leaps-- + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + } + } else { + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + } + } + return int64(int32(31536000)*(y-int32(70)) + int32(86400)*leaps) + } + if !(is_leap != 0) { + is_leap = bp + } + cycles = int32((year - int64(100)) / int64(400)) + rem = int32((year - int64(100)) % int64(400)) + if rem < 0 { + cycles-- + rem += int32(400) + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + centuries = 0 + leaps1 = 0 + } else { + if rem >= int32(200) { + if rem >= int32(300) { + centuries = int32(3) + rem -= int32(300) + } else { + centuries = int32(2) + rem -= int32(200) + } + } else { + if rem >= int32(100) { + centuries = int32(1) + rem -= int32(100) + } else { + centuries = 0 + } + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + leaps1 = 0 + } else { + leaps1 = int32(uint32(rem) / uint32(4)) + rem = int32(uint32(rem) % Uint32FromUint32(4)) + *(*int32)(unsafe.Pointer(is_leap)) = BoolInt32(!(rem != 0)) + } + } + leaps1 += int32(97)*cycles + int32(24)*centuries - *(*int32)(unsafe.Pointer(is_leap)) + return (year-int64(100))*int64(31536000) + int64(leaps1)*int64(86400) + int64(946684800) + int64(86400) +} + +func Xasctime(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, uintptr(unsafe.Pointer(&_buf9))) +} + +var _buf9 [26]uint8 + +func X__asctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xsnprintf(tls, buf, uint32(26), __ccgo_ts+1601, VaList(bp+8, X__nl_langinfo_l(tls, int32(ABDAY_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_wday, uintptr(unsafe.Pointer(&X__c_locale))), X__nl_langinfo_l(tls, int32(ABMON_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_mon, uintptr(unsafe.Pointer(&X__c_locale))), (*Ttm)(unsafe.Pointer(tm)).Ftm_mday, (*Ttm)(unsafe.Pointer(tm)).Ftm_hour, (*Ttm)(unsafe.Pointer(tm)).Ftm_min, (*Ttm)(unsafe.Pointer(tm)).Ftm_sec, int32(1900)+(*Ttm)(unsafe.Pointer(tm)).Ftm_year)) >= int32(26) { + /* ISO C requires us to use the above format string, + * even if it will not fit in the buffer. Thus asctime_r + * is _supposed_ to crash if the fields in tm are too large. + * We follow this behavior and crash "gracefully" to warn + * application developers that they may not be so lucky + * on other implementations (e.g. stack smashing..). + */ + _a_crash(tls) + } + return buf +} + +func Xasctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, buf) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xclock(tls *TLS) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if X__clock_gettime(tls, int32(CLOCK_PROCESS_CPUTIME_ID), bp) != 0 { + return -int32(1) + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(0x7fffffff)/Int32FromInt32(1000000)) || int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000)) > int64(0x7fffffff)-int64(1000000)*(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec { + return -int32(1) + } + return int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec*int64(1000000) + int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int32(1000))) +} + +func Xclock_getcpuclockid(tls *TLS, pid Tpid_t, clk uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v clk=%v, (%v:)", tls, pid, clk, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id Tclockid_t + var ret int32 + var _ /* ts at bp+0 */ Ttimespec + _, _ = id, ret + id = int32(uint32(-pid-Int32FromInt32(1))*uint32(8) + uint32(2)) + ret = int32(X__syscall2(tls, int32(SYS_clock_getres_time32), id, int32(bp))) + if ret == -int32(EINVAL) { + ret = -int32(ESRCH) + } + if ret != 0 { + return -ret + } + *(*Tclockid_t)(unsafe.Pointer(clk)) = id + return 0 +} + +func Xclock_getres(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts32 at bp+0 */ [2]int32 + _ = r + /* On a 32-bit arch, use the old syscall if it exists. */ + if int32(SYS_clock_getres_time32) != int32(SYS_clock_getres_time64) { + r = int32(X__syscall2(tls, int32(SYS_clock_getres_time32), clk, int32(bp))) + if !(r != 0) && ts != 0 { + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp)))[0]) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp)))[int32(1)] + } + return X__syscall_ret(tls, uint32(r)) + } + /* If reaching this point, it's a 64-bit arch or time64-only + * 32-bit arch and we can get result directly into timespec. */ + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_clock_getres_time32), clk, int32(ts)))) +} + +func X__clock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts32 at bp+0 */ [2]int32 + _ = r + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_clock_gettime64), clk, int32(ts))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_clock_gettime32), clk, int32(bp))) + if r == -int32(ENOSYS) && clk == CLOCK_REALTIME { + r = int32(X__syscall2(tls, int32(SYS_gettimeofday_time32), int32(bp), int32(Int32FromInt32(0)))) + *(*int32)(unsafe.Pointer(bp + 1*4)) *= int32(1000) + } + if !(r != 0) { + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp)))[0]) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp)))[int32(1)] + return r + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xclock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_gettime(tls, clk, ts) +} + +func X__clock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var extra int64 + var ns, r int32 + var s Ttime_t + var v1, v2 uint64 + var _ /* ts32 at bp+16 */ [2]int32 + _, _, _, _, _, _ = extra, ns, r, s, v1, v2 + if clk == int32(CLOCK_THREAD_CPUTIME_ID) { + return int32(EINVAL) + } + s = (*Ttimespec)(unsafe.Pointer(req)).Ftv_sec + ns = (*Ttimespec)(unsafe.Pointer(req)).Ftv_nsec + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + r = int32(___syscall_cp(tls, int32(SYS_clock_nanosleep_time64), clk, flags, int32(bp), int32(rem), 0, 0)) + } + if Bool(false) || r != -int32(ENOSYS) { + return -r + } + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v1 = uint64(s) + } else { + v1 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + extra = s - int64(int32(v1)) + if !((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v2 = uint64(s) + } else { + v2 = uint64(0x7fffffff) + (0+uint64(s))>>int32(63) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(v2), + 1: ns, + } + if clk == CLOCK_REALTIME && !(flags != 0) { + r = int32(___syscall_cp(tls, int32(SYS_nanosleep), int32(bp+16), int32(bp+16), 0, 0, 0, 0)) + } else { + r = int32(___syscall_cp(tls, int32(SYS_clock_nanosleep_time32), clk, flags, int32(bp+16), int32(bp+16), 0, 0)) + } + if r == -int32(EINTR) && rem != 0 && !(flags&Int32FromInt32(TIMER_ABSTIME) != 0) { + (*Ttimespec)(unsafe.Pointer(rem)).Ftv_sec = int64((*(*[2]int32)(unsafe.Pointer(bp + 16)))[0]) + extra + (*Ttimespec)(unsafe.Pointer(rem)).Ftv_nsec = (*(*[2]int32)(unsafe.Pointer(bp + 16)))[int32(1)] + } + return -r +} + +func Xclock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_nanosleep(tls, clk, flags, req, rem) +} + +func Xclock_settime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, r int32 + var s Ttime_t + _, _, _ = ns, r, s + s = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + ns = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(ns), + } + r = int32(X__syscall2(tls, int32(SYS_clock_settime64), clk, int32(bp))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[2]int32)(unsafe.Pointer(bp + 16)) = [2]int32{ + 0: int32(s), + 1: ns, + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_clock_settime32), clk, int32(bp+16)))) +} + +func Xctime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var tm uintptr + _ = tm + tm = Xlocaltime(tls, t) + if !(tm != 0) { + return uintptr(0) + } + return Xasctime(tls, tm) +} + +func Xctime_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var tm_p, v1 uintptr + var _ /* tm at bp+0 */ Ttm + _, _ = tm_p, v1 + tm_p = Xlocaltime_r(tls, t, bp) + if tm_p != 0 { + v1 = Xasctime_r(tls, tm_p, buf) + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xdifftime(tls *TLS, t1 Ttime_t, t0 Ttime_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t0=%v, (%v:)", tls, t1, t0, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(t1 - t0) +} + +type Ttimeb = struct { + F__ccgo_align [0]uint32 + Ftime Ttime_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 + F__ccgo_pad4 [2]byte +} + +func Xftime(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int16 + var _ /* ts at bp+0 */ Ttimespec + _ = v1 + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeb)(unsafe.Pointer(tp)).Ftime = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeb)(unsafe.Pointer(tp)).Fmillitm = uint16((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int32(1000000)) + v1 = Int16FromInt32(0) + (*Ttimeb)(unsafe.Pointer(tp)).Fdstflag = v1 + (*Ttimeb)(unsafe.Pointer(tp)).Ftimezone = v1 + return 0 +} + +func Xgetdate(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var datemsk, f, p, ret uintptr + var _ /* cs at bp+100 */ int32 + var _ /* fmt at bp+0 */ [100]uint8 + _, _, _, _ = datemsk, f, p, ret + ret = uintptr(0) + datemsk = Xgetenv(tls, __ccgo_ts+1633) + f = uintptr(0) + _pthread_setcancelstate(tls, PTHREAD_CANCEL_DEFERRED, bp+100) + if !(datemsk != 0) { + Xgetdate_err = int32(1) + goto out + } + f = Xfopen(tls, datemsk, __ccgo_ts+315) + if !(f != 0) { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOMEM) { + Xgetdate_err = int32(6) + } else { + Xgetdate_err = int32(2) + } + goto out + } + for Xfgets(tls, bp, int32(100), f) != 0 { + p = Xstrptime(tls, s, bp, uintptr(unsafe.Pointer(&_tmbuf))) + if p != 0 && !(*(*uint8)(unsafe.Pointer(p)) != 0) { + ret = uintptr(unsafe.Pointer(&_tmbuf)) + goto out + } + } + if Xferror(tls, f) != 0 { + Xgetdate_err = int32(5) + } else { + Xgetdate_err = int32(7) + } + goto out +out: + ; + if f != 0 { + Xfclose(tls, f) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 100)), uintptr(0)) + return ret +} + +var _tmbuf Ttm + +func Xgettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if !(tv != 0) { + return 0 + } + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int32(1000)) + return 0 +} + +func Xgmtime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, uintptr(unsafe.Pointer(&_tm))) +} + +var _tm Ttm + +func X__gmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t)), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_zone = uintptr(unsafe.Pointer(&X__utc)) + return tm +} + +func Xgmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, tm) +} + +func Xlocaltime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, uintptr(unsafe.Pointer(&_tm1))) +} + +var _tm1 Ttm + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__localtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Reject time_t values whose year would overflow int because + * __secs_to_zone cannot safely handle them. */ + if *(*Ttime_t)(unsafe.Pointer(t)) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || *(*Ttime_t)(unsafe.Pointer(t)) > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + X__secs_to_zone(tls, *(*Ttime_t)(unsafe.Pointer(t)), 0, tm+32, tm+36, uintptr(0), tm+40) + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t))+int64((*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + return tm +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xlocaltime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, tm) +} + +func Xmktime(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t int64 + var _ /* new at bp+0 */ Ttm + var _ /* opp at bp+44 */ int32 + _ = t + t = X__tm_to_secs(tls, tm) + X__secs_to_zone(tls, t, int32(1), bp+32, bp+36, bp+44, bp+40) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst >= 0 && (*(*Ttm)(unsafe.Pointer(bp))).Ftm_isdst != (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst { + t -= int64(*(*int32)(unsafe.Pointer(bp + 44)) - (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff) + } + t -= int64((*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff) + if t != t { + goto error + } + X__secs_to_zone(tls, t, 0, bp+32, bp+36, bp+44, bp+40) + if X__secs_to_tm(tls, t+int64((*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff), bp) < 0 { + goto error + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return t + goto error +error: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) +} + +func Xnanosleep(tls *TLS, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v rem=%v, (%v:)", tls, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(-X__clock_nanosleep(tls, CLOCK_REALTIME, 0, req, rem))) +} + +func _is_leap(tls *TLS, y int32) (r int32) { + /* Avoid overflow */ + if y > Int32FromInt32(INT_MAX)-Int32FromInt32(1900) { + y -= int32(2000) + } + y += int32(1900) + return BoolInt32(!(y%Int32FromInt32(4) != 0) && (y%int32(100) != 0 || !(y%Int32FromInt32(400) != 0))) +} + +func _week_num(tls *TLS, tm uintptr) (r int32) { + var dec31, jan1, val int32 + _, _, _ = dec31, jan1, val + val = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + /* If 1 Jan is just 1-3 days past Monday, + * the previous week is also in this year. */ + if (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(371)-uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)-uint32(2))%uint32(7) <= uint32(2) { + val++ + } + if !(val != 0) { + val = int32(52) + /* If 31 December of prev year a Thursday, + * or Friday of a leap year, then the + * prev year has 53 weeks. */ + dec31 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) - uint32(1)) % uint32(7)) + if dec31 == int32(4) || dec31 == int32(5) && _is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year%int32(400)-int32(1)) != 0 { + val++ + } + } else { + if val == int32(53) { + /* If 1 January is not a Thursday, and not + * a Wednesday of a leap year, then this + * year has only 52 weeks. */ + jan1 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(371) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)) % uint32(7)) + if jan1 != int32(4) && (jan1 != int32(3) || !(_is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year) != 0)) { + val = int32(1) + } + } + } + return val +} + +func X__strftime_fmt_1(tls *TLS, s uintptr, l uintptr, f int32, tm uintptr, loc Tlocale_t, pad int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v tm=%v loc=%v pad=%v, (%v:)", tls, s, l, f, tm, loc, pad, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, fmt, v4, v5 uintptr + var def_pad, width, v1, v2, v6, v7 int32 + var item Tnl_item + var val int64 + _, _, _, _, _, _, _, _, _, _, _, _ = d, def_pad, fmt, item, val, width, v1, v2, v4, v5, v6, v7 + fmt = __ccgo_ts + 1495 + width = int32(2) + def_pad = int32('0') + switch f { + case int32('a'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(ABDAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('A'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(DAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('h'): + fallthrough + case int32('b'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(ABMON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('B'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(MON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('c'): + item = int32(D_T_FMT) + goto nl_strftime + case int32('C'): + val = (int64(1900) + int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year)) / int64(100) + goto number + case int32('e'): + def_pad = int32('_') + fallthrough + case int32('d'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday) + goto number + case int32('D'): + fmt = __ccgo_ts + 1641 + goto recu_strftime + case int32('F'): + fmt = __ccgo_ts + 1650 + goto recu_strftime + case int32('g'): + fallthrough + case int32('G'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday < int32(3) && _week_num(tls, tm) != int32(1) { + val-- + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday > int32(360) && _week_num(tls, tm) == int32(1) { + val++ + } + } + if f == int32('g') { + val %= int64(100) + } else { + width = int32(4) + } + goto number + case int32('H'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + goto number + case int32('l'): + def_pad = int32('_') + fallthrough + case int32('I'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + if !(val != 0) { + val = int64(12) + } else { + if val > int64(12) { + val -= int64(12) + } + } + goto number + case int32('j'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_yday + int32(1)) + width = int32(3) + goto number + case int32('k'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + def_pad = int32('_') + goto number + case int32('m'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mon + int32(1)) + goto number + case int32('M'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + goto number + case int32('n'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 301 + case int32('p'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v1 = int32(PM_STR) + } else { + v1 = int32(AM_STR) + } + item = v1 + goto nl_strcat + case int32('P'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v2 = int32(PM_STR) + } else { + v2 = int32(AM_STR) + } + item = v2 + fmt = X__nl_langinfo_l(tls, item, loc) + d = s + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + for { + if !(*(*uint8)(unsafe.Pointer(fmt)) != 0) { + break + } + v4 = d + d++ + v5 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(v5))))) + goto _3 + _3: + ; + *(*Tsize_t)(unsafe.Pointer(l))++ + } + return s + case int32('r'): + item = int32(T_FMT_AMPM) + goto nl_strftime + case int32('R'): + fmt = __ccgo_ts + 1659 + goto recu_strftime + case int32('s'): + val = X__tm_to_secs(tls, tm) - int64((*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff) + width = int32(1) + goto number + case int32('S'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + goto number + case int32('t'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 1315 + case int32('T'): + fmt = __ccgo_ts + 1665 + goto recu_strftime + case int32('u'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_wday != 0 { + v6 = (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + } else { + v6 = int32(7) + } + val = int64(v6) + width = int32(1) + goto number + case int32('U'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)) / uint32(7)) + goto number + case int32('W'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + goto number + case int32('V'): + val = int64(_week_num(tls, tm)) + goto number + case int32('w'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + width = int32(1) + goto number + case int32('x'): + item = int32(D_FMT) + goto nl_strftime + case int32('X'): + item = int32(T_FMT) + goto nl_strftime + case int32('y'): + val = (int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900)) % int64(100) + if val < 0 { + val = -val + } + goto number + case int32('Y'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if val >= int64(10000) { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1674, VaList(bp+8, val))) + return s + } + width = int32(4) + goto number + case int32('z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + return __ccgo_ts + } + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1680, VaList(bp+8, (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff/int32(3600)*int32(100)+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff%int32(3600)/int32(60)))) + return s + case int32('Z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(0) + return __ccgo_ts + } + fmt = X__tm_to_tzname(tls, tm) + goto string + case int32('%'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(1) + return __ccgo_ts + 348 + default: + return uintptr(0) + } + goto number +number: + ; + if pad != 0 { + v7 = pad + } else { + v7 = def_pad + } + switch v7 { + case int32('-'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1687, VaList(bp+8, val))) + case int32('_'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1692, VaList(bp+8, width, val))) + case int32('0'): + fallthrough + default: + *(*Tsize_t)(unsafe.Pointer(l)) = uint32(Xsnprintf(tls, s, uint32(100), __ccgo_ts+1698, VaList(bp+8, width, val))) + break + } + return s + goto nl_strcat +nl_strcat: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto string +string: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = Xstrlen(tls, fmt) + return fmt + goto nl_strftime +nl_strftime: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto recu_strftime +recu_strftime: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = X__strftime_l(tls, s, uint32(100), fmt, tm, loc) + if !(*(*Tsize_t)(unsafe.Pointer(l)) != 0) { + return uintptr(0) + } + return s +} + +func X__strftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var d, l, v10, v12, v2, v7 Tsize_t + var pad, plus, v4, v8 int32 + var t, v3 uintptr + var width uint32 + var v9 bool + var _ /* buf at bp+4 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+104 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, l, pad, plus, t, width, v10, v12, v2, v3, v4, v7, v8, v9 + l = uint32(0) + for { + if !(l < n) { + break + } + if !(*(*uint8)(unsafe.Pointer(f)) != 0) { + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + return l + } + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v2 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v2))) = *(*uint8)(unsafe.Pointer(f)) + goto _1 + } + f++ + pad = 0 + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('_') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('0') { + v3 = f + f++ + pad = int32(*(*uint8)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(int32(*(*uint8)(unsafe.Pointer(f))) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + width = Xstrtoul(tls, f, bp+104, int32(10)) + } else { + width = uint32(0) + *(*uintptr)(unsafe.Pointer(bp + 104)) = f + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('C') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('F') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('G') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 104)) != f { + width = uint32(1) + } + } else { + width = uint32(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 104)) + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('E') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('O') { + f++ + } + t = X__strftime_fmt_1(tls, bp+4, bp, int32(*(*uint8)(unsafe.Pointer(f))), tm, loc, pad) + if !(t != 0) { + break + } + if width != 0 { + /* Trim off any sign and leading zeros, then + * count remaining digits to determine behavior + * for the + flag. */ + if int32(*(*uint8)(unsafe.Pointer(t))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(t))) == int32('-') { + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(t))) == int32('0') && uint32(int32(*(*uint8)(unsafe.Pointer(t + 1)))-int32('0')) < uint32(10)) { + break + } + goto _5 + _5: + ; + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + if width < *(*Tsize_t)(unsafe.Pointer(bp)) { + width = *(*Tsize_t)(unsafe.Pointer(bp)) + } + d = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(t + uintptr(d))))-int32('0')) < uint32(10)) { + break + } + goto _6 + _6: + ; + d++ + } + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v7))) = uint8('-') + width-- + } else { + if v9 = plus != 0; v9 { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104))))) == int32('C') { + v8 = int32(3) + } else { + v8 = int32(5) + } + } + if v9 && d+(width-*(*Tsize_t)(unsafe.Pointer(bp))) >= uint32(v8) { + v10 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v10))) = uint8('+') + width-- + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v12 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v12))) = uint8('0') + goto _11 + _11: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) > n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + _memcpy(tls, s+uintptr(l), t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f++ + } + if n != 0 { + if l == n { + l = n - uint32(1) + } + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + } + return uint32(0) +} + +func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, loc) +} + +func Xstrptime(tls *TLS, s uintptr, f uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v tm=%v, (%v:)", tls, s, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, i, min, neg, range1, w, want_century, v1, v2, v45, v46, v5, v53, v6 int32 + var dest, ex, v49, v51, v54, v9 uintptr + var len1 Tsize_t + var v48, v8 bool + var _ /* century at bp+4 */ int32 + var _ /* dummy at bp+0 */ int32 + var _ /* new_f at bp+12 */ uintptr + var _ /* relyear at bp+8 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = adj, dest, ex, i, len1, min, neg, range1, w, want_century, v1, v2, v45, v46, v48, v49, v5, v51, v53, v54, v6, v8, v9 + want_century = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + *(*int32)(unsafe.Pointer(bp + 8)) = 0 + for *(*uint8)(unsafe.Pointer(f)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v1 = int32(*(*uint8)(unsafe.Pointer(f))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if v2 != 0 { + for { + if v8 = *(*uint8)(unsafe.Pointer(s)) != 0; v8 { + v5 = int32(*(*uint8)(unsafe.Pointer(s))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + } + if !(v8 && v6 != 0) { + break + } + goto _4 + _4: + ; + s++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(*(*uint8)(unsafe.Pointer(f))) { + return uintptr(0) + } else { + s++ + } + } + f++ + continue + } + f++ + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('+') { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + w = int32(Xstrtoul(tls, f, bp+12, int32(10))) + f = *(*uintptr)(unsafe.Pointer(bp + 12)) + } else { + w = -int32(1) + } + adj = 0 + v9 = f + f++ + switch int32(*(*uint8)(unsafe.Pointer(v9))) { + case int32('A'): + goto _10 + case int32('a'): + goto _11 + case int32('h'): + goto _12 + case int32('B'): + goto _13 + case int32('b'): + goto _14 + case int32('c'): + goto _15 + case int32('C'): + goto _16 + case int32('e'): + goto _17 + case int32('d'): + goto _18 + case int32('D'): + goto _19 + case int32('H'): + goto _20 + case int32('I'): + goto _21 + case int32('j'): + goto _22 + case int32('m'): + goto _23 + case int32('M'): + goto _24 + case int32('t'): + goto _25 + case int32('n'): + goto _26 + case int32('p'): + goto _27 + case int32('r'): + goto _28 + case int32('R'): + goto _29 + case int32('S'): + goto _30 + case int32('T'): + goto _31 + case int32('W'): + goto _32 + case int32('U'): + goto _33 + case int32('w'): + goto _34 + case int32('x'): + goto _35 + case int32('X'): + goto _36 + case int32('y'): + goto _37 + case int32('Y'): + goto _38 + case int32('%'): + goto _39 + default: + goto _40 + } + goto _41 + _11: + ; + _10: + ; + dest = tm + 24 + min = int32(ABDAY_1) + range1 = int32(7) + goto symbolic_range + _14: + ; + _13: + ; + _12: + ; + dest = tm + 16 + min = int32(ABMON_1) + range1 = int32(12) + goto symbolic_range + _15: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _16: + ; + dest = bp + 4 + if w < 0 { + w = int32(2) + } + want_century |= int32(2) + goto numeric_digits + _18: + ; + _17: + ; + dest = tm + 12 + min = int32(1) + range1 = int32(31) + goto numeric_range + _19: + ; + s = Xstrptime(tls, s, __ccgo_ts+1641, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _20: + ; + dest = tm + 8 + min = 0 + range1 = int32(24) + goto numeric_range + _21: + ; + dest = tm + 8 + min = int32(1) + range1 = int32(12) + goto numeric_range + _22: + ; + dest = tm + 28 + min = int32(1) + range1 = int32(366) + adj = int32(1) + goto numeric_range + _23: + ; + dest = tm + 16 + min = int32(1) + range1 = int32(12) + adj = int32(1) + goto numeric_range + _24: + ; + dest = tm + 4 + min = 0 + range1 = int32(60) + goto numeric_range + _26: + ; + _25: + ; + _44: + ; + if v48 = *(*uint8)(unsafe.Pointer(s)) != 0; v48 { + v45 = int32(*(*uint8)(unsafe.Pointer(s))) + v46 = BoolInt32(v45 == int32(' ') || uint32(v45)-uint32('\t') < uint32(5)) + goto _47 + _47: + } + if !(v48 && v46 != 0) { + goto _42 + } + goto _43 + _43: + ; + s++ + goto _44 + goto _42 + _42: + ; + goto _41 + _27: + ; + ex = Xnl_langinfo(tls, int32(AM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + s += uintptr(len1) + goto _41 + } + ex = Xnl_langinfo(tls, int32(PM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + *(*int32)(unsafe.Pointer(tm + 8)) += int32(12) + s += uintptr(len1) + goto _41 + } + return uintptr(0) + _28: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT_AMPM)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _29: + ; + s = Xstrptime(tls, s, __ccgo_ts+1659, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _30: + ; + dest = tm + min = 0 + range1 = int32(61) + goto numeric_range + _31: + ; + s = Xstrptime(tls, s, __ccgo_ts+1665, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _33: + ; + _32: + ; + /* Throw away result, for now. (FIXME?) */ + dest = bp + min = 0 + range1 = int32(54) + goto numeric_range + _34: + ; + dest = tm + 24 + min = 0 + range1 = int32(7) + goto numeric_range + _35: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _36: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _37: + ; + dest = bp + 8 + w = int32(2) + want_century |= int32(1) + goto numeric_digits + _38: + ; + dest = tm + 20 + if w < 0 { + w = int32(4) + } + adj = int32(1900) + want_century = 0 + goto numeric_digits + _39: + ; + v49 = s + s++ + if int32(*(*uint8)(unsafe.Pointer(v49))) != int32('%') { + return uintptr(0) + } + goto _41 + _40: + ; + return uintptr(0) + goto numeric_range + numeric_range: + ; + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) = 0 + i = int32(1) + for { + if !(i <= min+range1 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v51 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v51))) - int32('0') + goto _50 + _50: + ; + i *= int32(10) + } + if uint32(*(*int32)(unsafe.Pointer(dest))-min) >= uint32(range1) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + switch int32(dest) - int32(tm) { + case int32(uint32(UintptrFromInt32(0) + 28)): + } + goto update + goto numeric_digits + numeric_digits: + ; + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + s++ + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') { + neg = int32(1) + s++ + } + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + v53 = Int32FromInt32(0) + i = v53 + *(*int32)(unsafe.Pointer(dest)) = v53 + for { + if !(i < w && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v54 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v54))) - int32('0') + goto _52 + _52: + ; + i++ + } + if neg != 0 { + *(*int32)(unsafe.Pointer(dest)) = -*(*int32)(unsafe.Pointer(dest)) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + goto update + goto symbolic_range + symbolic_range: + ; + i = int32(2)*range1 - int32(1) + for { + if !(i >= 0) { + break + } + ex = Xnl_langinfo(tls, min+i) + len1 = Xstrlen(tls, ex) + if Xstrncasecmp(tls, s, ex, len1) != 0 { + goto _55 + } + s += uintptr(len1) + *(*int32)(unsafe.Pointer(dest)) = i % range1 + break + goto _55 + _55: + ; + i-- + } + if i < 0 { + return uintptr(0) + } + goto update + goto update + update: + ; + //FIXME + _41: + } + if want_century != 0 { + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = *(*int32)(unsafe.Pointer(bp + 8)) + if want_century&int32(2) != 0 { + *(*int32)(unsafe.Pointer(tm + 20)) += *(*int32)(unsafe.Pointer(bp + 4))*int32(100) - int32(1900) + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year <= int32(68) { + *(*int32)(unsafe.Pointer(tm + 20)) += int32(100) + } + } + } + return s +} + +func Xtime(tls *TLS, t uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + X__clock_gettime(tls, CLOCK_REALTIME, bp) + if t != 0 { + *(*Ttime_t)(unsafe.Pointer(t)) = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec +} + +func Xtimegm(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t int64 + var _ /* new at bp+0 */ Ttm1 + _ = t + t = X__tm_to_secs(tls, tm) + if X__secs_to_tm(tls, t, bp) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + *(*Ttm1)(unsafe.Pointer(tm)) = *(*Ttm1)(unsafe.Pointer(bp)) + (*Ttm1)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_gmtoff = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_zone = uintptr(unsafe.Pointer(&X__utc)) + return t +} + +func Xtimer_delete(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + _a_barrier(tls) + AtomicStorePInt32(td+84, AtomicLoadPInt32(td+84)|(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))) + _a_barrier(tls) + X__syscall2(tls, int32(SYS_tkill), (*t__pthread)(unsafe.Pointer(td)).Ftid, int32(Int32FromInt32(SIGTIMER))) + return 0 + } + return int32(X__syscall1(tls, int32(SYS_timer_delete), int32(t))) +} + +func Xtimer_getoverrun(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+84) & Int32FromInt32(INT_MAX))) + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_timer_getoverrun), int32(t)))) +} + +func Xtimer_gettime(tls *TLS, t Ttimer_t, val uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val=%v, (%v:)", tls, t, val, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var td Tpthread_t + var _ /* val32 at bp+0 */ [4]int32 + _, _ = r, td + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+84) & Int32FromInt32(INT_MAX))) + } + r = -int32(ENOSYS) + if uint32(8) > uint32(4) { + r = int32(X__syscall2(tls, int32(SYS_timer_gettime64), int32(t), int32(val))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + r = int32(X__syscall2(tls, int32(SYS_timer_gettime32), int32(t), int32(bp))) + if !(r != 0) { + (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[0]) + (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_timer_gettime32), int32(t), int32(val)))) +} + +func Xtimer_settime(tls *TLS, t Ttimer_t, flags int32, val uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val=%v old=%v, (%v:)", tls, t, flags, val, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var ins, r, vns int32 + var is, vs Ttime_t + var td Tpthread_t + var _ /* old32 at bp+48 */ [4]int32 + _, _, _, _, _, _ = ins, is, r, td, vns, vs + if int32(t) < 0 { + td = uintptr(uint32(t) << Int32FromInt32(1)) + t = uintptr(uint32(AtomicLoadPInt32(td+84) & Int32FromInt32(INT_MAX))) + } + is = (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_sec + vs = (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_sec + ins = (*Titimerspec)(unsafe.Pointer(val)).Fit_interval.Ftv_nsec + vns = (*Titimerspec)(unsafe.Pointer(val)).Fit_value.Ftv_nsec + r = -int32(ENOSYS) + if Bool(false) || !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || Bool(uint32(8) > uint32(4)) && old != 0 { + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: int64(ins), + 2: vs, + 3: int64(vns), + } + r = int32(X__syscall4(tls, int32(SYS_timer_settime64), int32(t), flags, int32(bp), int32(old))) + } + if Bool(false) || r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EOPNOTSUPP))) + } + *(*[4]int32)(unsafe.Pointer(bp + 32)) = [4]int32{ + 0: int32(is), + 1: ins, + 2: int32(vs), + 3: vns, + } + r = int32(X__syscall4(tls, int32(SYS_timer_settime32), int32(t), flags, int32(bp+32), int32(bp+48))) + if !(r != 0) && old != 0 { + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[0]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_interval.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(1)] + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_sec = int64((*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(2)]) + (*Titimerspec)(unsafe.Pointer(old)).Fit_value.Ftv_nsec = (*(*[4]int32)(unsafe.Pointer(bp + 48)))[int32(3)] + } + return X__syscall_ret(tls, uint32(r)) + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_timer_settime32), int32(t), flags, int32(val), int32(old)))) +} + +type Ttms = struct { + Ftms_utime Tclock_t + Ftms_stime Tclock_t + Ftms_cutime Tclock_t + Ftms_cstime Tclock_t +} + +func Xtimes(tls *TLS, tms uintptr) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v tms=%v, (%v:)", tls, tms, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall1(tls, int32(SYS_times), int32(tms)) +} + +// C documentation +// +// /* There is no other implemented value than TIME_UTC; all other values +// * are considered erroneous. */ +func Xtimespec_get(tls *TLS, ts uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ts=%v base=%v, (%v:)", tls, ts, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v1 int32 + _, _ = ret, v1 + if base != int32(TIME_UTC) { + return 0 + } + ret = X__clock_gettime(tls, CLOCK_REALTIME, ts) + if ret < 0 { + v1 = 0 + } else { + v1 = base + } + return v1 +} + +type Tutimbuf = struct { + F__ccgo_align [0]uint32 + Factime Ttime_t + Fmodtime Ttime_t +} + +func Xutime(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if times != 0 { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Factime, + }, + 1: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Fmodtime, + }, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), path, v1, 0) +} + +func X__wcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var l, v2, v6, v7, v9 Tsize_t + var pad, plus, v4 int32 + var t, t_mb, v3 uintptr + var width uint32 + var _ /* buf at bp+4 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+504 */ uintptr + var _ /* wbuf at bp+104 */ [100]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _ = l, pad, plus, t, t_mb, width, v2, v3, v4, v6, v7, v9 + l = uint32(0) + for { + if !(l < n) { + break + } + if !(*(*Twchar_t)(unsafe.Pointer(f)) != 0) { + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = uint32(0) + return l + } + if *(*Twchar_t)(unsafe.Pointer(f)) != uint32('%') { + v2 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v2)*4)) = *(*Twchar_t)(unsafe.Pointer(f)) + goto _1 + } + f += 4 + pad = 0 + if *(*Twchar_t)(unsafe.Pointer(f)) == uint32('-') || *(*Twchar_t)(unsafe.Pointer(f)) == uint32('_') || *(*Twchar_t)(unsafe.Pointer(f)) == uint32('0') { + v3 = f + f += 4 + pad = int32(*(*Twchar_t)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(f)) == Uint32FromUint8('+')) + plus = v4 + if v4 != 0 { + f += 4 + } + width = Xwcstoul(tls, f, bp+504, int32(10)) + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == uint32('C') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == uint32('F') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == uint32('G') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 504)))) == uint32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 504)) != f { + width = uint32(1) + } + } else { + width = uint32(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 504)) + if *(*Twchar_t)(unsafe.Pointer(f)) == uint32('E') || *(*Twchar_t)(unsafe.Pointer(f)) == uint32('O') { + f += 4 + } + t_mb = X__strftime_fmt_1(tls, bp+4, bp, int32(*(*Twchar_t)(unsafe.Pointer(f))), tm, loc, pad) + if !(t_mb != 0) { + break + } + *(*Tsize_t)(unsafe.Pointer(bp)) = Xmbstowcs(tls, bp+104, t_mb, Uint32FromInt64(400)/Uint32FromInt64(4)) + if *(*Tsize_t)(unsafe.Pointer(bp)) == uint32(-Int32FromInt32(1)) { + return uint32(0) + } + t = bp + 104 + if width != 0 { + for { + if !(*(*Twchar_t)(unsafe.Pointer(t)) == uint32('+') || *(*Twchar_t)(unsafe.Pointer(t)) == uint32('-') || *(*Twchar_t)(unsafe.Pointer(t)) == uint32('0') && *(*Twchar_t)(unsafe.Pointer(t + 1*4)) != 0) { + break + } + goto _5 + _5: + ; + t += 4 + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + width-- + if plus != 0 && (*Ttm)(unsafe.Pointer(tm)).Ftm_year >= Int32FromInt32(10000)-Int32FromInt32(1900) { + v6 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v6)*4)) = uint32('+') + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v7)*4)) = uint32('-') + } else { + width++ + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v9 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v9)*4)) = uint32('0') + goto _8 + _8: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) >= n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xwmemcpy(tls, s+uintptr(l)*4, t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f += 4 + } + if n != 0 { + if l == n { + l = n - uint32(1) + } + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = uint32(0) + } + return uint32(0) +} + +func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, s, n, f, tm, loc) +} + +func X_exit(tls *TLS, status int32) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + } + X_Exit(tls, status) +} + +func Xaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_access), int32(filename), amode))) +} + +func Xacct(tls *TLS, filename uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v, (%v:)", tls, filename, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_acct), int32(filename)))) +} + +func Xalarm(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_value: Ttimeval{ + Ftv_sec: int64(seconds), + }, + } + *(*Titimerval)(unsafe.Pointer(bp + 32)) = Titimerval{} + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec + BoolInt64(!!((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec != 0))) +} + +func Xchdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chdir), int32(path)))) +} + +func Xchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_chown32), int32(path), int32(uid), int32(gid)))) +} + +func _dummy12(tls *TLS, fd int32) (r int32) { + return fd +} + +func Xclose(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + fd = _dummy12(tls, fd) + r = int32(___syscall_cp(tls, int32(SYS_close), fd, 0, 0, 0, 0, 0)) + if r == -int32(EINTR) { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xctermid(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if s != 0 { + v1 = Xstrcpy(tls, s, __ccgo_ts+292) + } else { + v1 = __ccgo_ts + 292 + } + return v1 +} + +func Xdup(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_dup), fd))) +} + +func Xdup2(tls *TLS, old int32, new1 int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + for { + v1 = int32(X__syscall2(tls, int32(SYS_dup2), old, new1)) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + return X__syscall_ret(tls, uint32(r)) +} + +func X__dup3(tls *TLS, old int32, new1 int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v2 int32 + _, _, _ = r, v1, v2 + if old == new1 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + if flags != 0 { + for { + v1 = int32(X__syscall3(tls, int32(SYS_dup3), old, new1, flags)) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + if r != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(r)) + } + if flags & ^Int32FromInt32(O_CLOEXEC) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + } + for { + v2 = int32(X__syscall2(tls, int32(SYS_dup2), old, new1)) + r = v2 + if !(v2 == -int32(EBUSY)) { + break + } + } + if r >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), new1, int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xdup3(tls *TLS, old int32, new1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dup3(tls, old, new1, flags) +} + +type Tctx1 = struct { + Ffd int32 + Ffilename uintptr + Famode int32 + Fp int32 +} + +func _checker(tls *TLS, p uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c uintptr + var _ /* ret at bp+0 */ int32 + _ = c + c = p + if X__syscall2(tls, int32(SYS_setregid32), X__syscall0(tls, int32(SYS_getegid32)), int32(-Int32FromInt32(1))) != 0 || X__syscall2(tls, int32(SYS_setreuid32), X__syscall0(tls, int32(SYS_geteuid32)), int32(-Int32FromInt32(1))) != 0 { + X__syscall1(tls, int32(SYS_exit), int32(Int32FromInt32(1))) + } + *(*int32)(unsafe.Pointer(bp)) = int32(X__syscall4(tls, int32(SYS_faccessat), (*Tctx1)(unsafe.Pointer(c)).Ffd, int32((*Tctx1)(unsafe.Pointer(c)).Ffilename), (*Tctx1)(unsafe.Pointer(c)).Famode, int32(Int32FromInt32(0)))) + X__syscall3(tls, int32(SYS_write), (*Tctx1)(unsafe.Pointer(c)).Fp, int32(bp), int32(Uint32FromInt64(4))) + return 0 +} + +func Xfaccessat(tls *TLS, fd int32, filename uintptr, amode int32, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v amode=%v flag=%v, (%v:)", tls, fd, filename, amode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if flag != 0 { + ret = int32(X__syscall4(tls, int32(SYS_faccessat2), fd, int32(filename), amode, flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + } + if flag & ^Int32FromInt32(AT_EACCESS) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_faccessat), fd, int32(filename), amode))) +} + +func Xfchdir(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall1(tls, int32(SYS_fchdir), fd)) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_chdir), int32(bp)))) +} + +func Xfchown(tls *TLS, fd int32, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v uid=%v gid=%v, (%v:)", tls, fd, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall3(tls, int32(SYS_fchown32), fd, int32(uid), int32(gid))) + if ret != -int32(EBADF) || X__syscall2(tls, int32(SYS_fcntl64), fd, int32(Int32FromInt32(F_GETFD))) < 0 { + return X__syscall_ret(tls, uint32(ret)) + } + X__procfdname(tls, bp, uint32(fd)) + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_chown32), int32(bp), int32(uid), int32(gid)))) +} + +func Xfchownat(tls *TLS, fd int32, path uintptr, uid Tuid_t, gid Tgid_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v uid=%v gid=%v flag=%v, (%v:)", tls, fd, path, uid, gid, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_fchownat), fd, int32(path), int32(uid), int32(gid), flag))) +} + +func Xfdatasync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fdatasync), fd, 0, 0, 0, 0, 0))) +} + +func Xfsync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_fsync), fd, 0, 0, 0, 0, 0))) +} + +func Xftruncate(tls *TLS, fd int32, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v length=%v, (%v:)", tls, fd, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_ftruncate64), fd, int32(length)))) +} + +func Xgetcwd(tls *TLS, buf uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v, (%v:)", tls, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 int32 + var tmp, v3 uintptr + var v1 t__predefined_size_t + _, _, _, _, _ = ret, tmp, v1, v2, v3 + defer func() { Xrealloc(tls, tmp, 0) }() + if buf != 0 { + v2 = int32(1) + } else { + v2 = int32(PATH_MAX) + } + v1 = uint32(v2) + tmp = Xrealloc(tls, tmp, v1) + if !(buf != 0) { + buf = tmp + size = v1 + } else { + if !(size != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + } + ret = X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getcwd), int32(buf), int32(size)))) + if ret < 0 { + return uintptr(0) + } + if ret == 0 || int32(*(*uint8)(unsafe.Pointer(buf))) != int32('/') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if buf == tmp { + v3 = Xstrdup(tls, buf) + } else { + v3 = buf + } + return v3 +} + +func Xgetegid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getegid32))) +} + +func Xgeteuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_geteuid32))) +} + +func Xgetgid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getgid32))) +} + +func Xgetgroups(tls *TLS, count int32, list uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v count=%v list=%v, (%v:)", tls, count, list, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_getgroups32), count, int32(list)))) +} + +func Xgethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var i Tsize_t + var v2 uint8 + var v3 bool + var _ /* uts at bp+0 */ Tutsname1 + _, _, _ = i, v2, v3 + if Xuname(tls, bp) != 0 { + return -int32(1) + } + if len1 > uint32(65) { + len1 = uint32(65) + } + i = uint32(0) + for { + if v3 = i < len1; v3 { + v2 = *(*uint8)(unsafe.Pointer(bp + 65 + uintptr(i))) + *(*uint8)(unsafe.Pointer(name + uintptr(i))) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i != 0 && i == len1 { + *(*uint8)(unsafe.Pointer(name + uintptr(i-uint32(1)))) = uint8(0) + } + return 0 +} + +func Xgetlogin(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetenv(tls, __ccgo_ts+1705) +} + +func Xgetlogin_r(tls *TLS, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v size=%v, (%v:)", tls, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var logname uintptr + _ = logname + logname = Xgetlogin(tls) + if !(logname != 0) { + return int32(ENXIO) + } /* or...? */ + if Xstrlen(tls, logname) >= size { + return int32(ERANGE) + } + Xstrcpy(tls, name, logname) + return 0 +} + +func Xgetpgid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_getpgid), pid))) +} + +func Xgetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall1(tls, int32(SYS_getpgid), int32(Int32FromInt32(0)))) +} + +func Xgetpid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int32(SYS_getpid))) +} + +func Xgetppid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int32(SYS_getppid))) +} + +func Xgetsid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_getsid), pid))) +} + +func Xgetuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int32(SYS_getuid32))) +} + +func Xisatty(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r uint32 + var _ /* wsz at bp+0 */ Twinsize + _ = r + r = uint32(X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_ioctl), fd, int32(Int32FromInt32(TIOCGWINSZ)), int32(bp))))) + if r == uint32(0) { + return int32(1) + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EBADF) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTTY) + } + return 0 +} + +func Xlchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_lchown32), int32(path), int32(uid), int32(gid)))) +} + +func Xlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_link), int32(existing), int32(new1)))) +} + +func Xlinkat(tls *TLS, fd1 int32, existing uintptr, fd2 int32, new1 uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd1=%v existing=%v fd2=%v new1=%v flag=%v, (%v:)", tls, fd1, existing, fd2, new1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS_linkat), fd1, int32(existing), fd2, int32(new1), flag))) +} + +func X__lseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int64 + var _ /* result at bp+0 */ Toff_t + _ = v1 + if X__syscall_ret(tls, uint32(X__syscall5(tls, int32(SYS__llseek), fd, int32(offset>>Int32FromInt32(32)), int32(offset), int32(bp), whence))) != 0 { + v1 = int64(-int32(1)) + } else { + v1 = *(*Toff_t)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xlseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, fd, offset, whence) +} + +func Xnice(tls *TLS, inc int32) (r int32) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var prio int32 + _ = prio + prio = inc + // Only query old priority if it can affect the result. + // This also avoids issues with integer overflow. + if inc > -Int32FromInt32(2)*Int32FromInt32(NZERO) && inc < Int32FromInt32(2)*Int32FromInt32(NZERO) { + prio += Xgetpriority(tls, PRIO_PROCESS, uint32(0)) + } + if prio > Int32FromInt32(NZERO)-Int32FromInt32(1) { + prio = Int32FromInt32(NZERO) - Int32FromInt32(1) + } + if prio < -int32(NZERO) { + prio = -int32(NZERO) + } + if Xsetpriority(tls, PRIO_PROCESS, uint32(0), prio) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EPERM) + } + return -int32(1) + } else { + return prio + } + return r +} + +func Xpause(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pause), 0, 0, 0, 0, 0, 0))) +} + +func Xpipe(tls *TLS, fd uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_pipe), int32(fd)))) +} + +func Xpipe2(tls *TLS, fd uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flag=%v, (%v:)", tls, fd, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if !(flag != 0) { + return Xpipe(tls, fd) + } + ret = int32(X__syscall2(tls, int32(SYS_pipe2), int32(fd), flag)) + if ret != -int32(ENOSYS) { + return X__syscall_ret(tls, uint32(ret)) + } + if flag & ^(Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)) != 0 { + return X__syscall_ret(tls, uint32(-Int32FromInt32(EINVAL))) + } + ret = Xpipe(tls, fd) + if ret != 0 { + return ret + } + if flag&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFD)), int32(Int32FromInt32(FD_CLOEXEC))) + } + if flag&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int32(SYS_fcntl64), *(*int32)(unsafe.Pointer(fd + 1*4)), int32(Int32FromInt32(F_SETFL)), int32(Int32FromInt32(O_NONBLOCK))) + } + return 0 +} + +func Xposix_close(tls *TLS, fd int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v, (%v:)", tls, fd, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclose(tls, fd) +} + +func Xpread(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pread64), fd, int32(buf), int32(size), int32(ofs), 0, 0))) +} + +func Xpreadv(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_preadv), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) +} + +func Xpwrite(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwrite64), fd, int32(buf), int32(size), int32(ofs), 0, 0))) +} + +func Xpwritev(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_pwritev), fd, int32(iov), count, int32(ofs), int32(ofs>>Int32FromInt32(32)), 0))) +} + +func Xread(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_read), fd, int32(buf), int32(count), 0, 0, 0))) +} + +func Xreadlink(tls *TLS, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v bufsize=%v, (%v:)", tls, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint32(1) + } + r = int32(X__syscall3(tls, int32(SYS_readlink), int32(path), int32(buf), int32(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xreadlinkat(tls *TLS, fd int32, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v buf=%v bufsize=%v, (%v:)", tls, fd, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint32(1) + } + r = int32(X__syscall4(tls, int32(SYS_readlinkat), fd, int32(path), int32(buf), int32(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint32(r)) +} + +func Xreadv(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_readv), fd, int32(iov), count, 0, 0, 0))) +} + +func Xrenameat(tls *TLS, oldfd int32, old uintptr, newfd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v oldfd=%v old=%v newfd=%v new1=%v, (%v:)", tls, oldfd, old, newfd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall4(tls, int32(SYS_renameat), oldfd, int32(old), newfd, int32(new1)))) +} + +func Xrmdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_rmdir), int32(path)))) +} + +func Xsetgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setgid32), int32(gid), 0, 0) +} + +func Xsetpgid(tls *TLS, pid Tpid_t, pgid Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v pgid=%v, (%v:)", tls, pid, pgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_setpgid), pid, pgid))) +} + +func Xsetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsetpgid(tls, 0, 0) +} + +func Xsetsid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall0(tls, int32(SYS_setsid)))) +} + +func Xsetuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setuid32), int32(uid), 0, 0) +} + +type Tctx2 = struct { + Fid int32 + Feid int32 + Fsid int32 + Fnr int32 + Fret int32 +} + +func _do_setxid(tls *TLS, p uintptr) { + var c uintptr + var ret int32 + _, _ = c, ret + c = p + if (*Tctx2)(unsafe.Pointer(c)).Fret < 0 { + return + } + ret = int32(X__syscall3(tls, (*Tctx2)(unsafe.Pointer(c)).Fnr, (*Tctx2)(unsafe.Pointer(c)).Fid, (*Tctx2)(unsafe.Pointer(c)).Feid, (*Tctx2)(unsafe.Pointer(c)).Fsid)) + if ret != 0 && !((*Tctx2)(unsafe.Pointer(c)).Fret != 0) { + /* If one thread fails to set ids after another has already + * succeeded, forcibly killing the process is the only safe + * thing to do. State is inconsistent and dangerous. Use + * SIGKILL because it is uncatchable. */ + X__block_all_sigs(tls, uintptr(0)) + X__syscall2(tls, int32(SYS_kill), X__syscall0(tls, int32(SYS_getpid)), int32(Int32FromInt32(SIGKILL))) + } + (*Tctx2)(unsafe.Pointer(c)).Fret = ret +} + +func X__setxid(tls *TLS, nr int32, id int32, eid int32, sid int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nr=%v id=%v eid=%v sid=%v, (%v:)", tls, nr, id, eid, sid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 int32 + var _ /* c at bp+0 */ Tctx2 + _ = v1 + /* ret is initially nonzero so that failure of the first thread does not + * trigger the safety kill above. */ + *(*Tctx2)(unsafe.Pointer(bp)) = Tctx2{ + Fid: id, + Feid: eid, + Fsid: sid, + Fnr: nr, + Fret: int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setxid), bp) + if (*(*Tctx2)(unsafe.Pointer(bp))).Fret > 0 { + v1 = -int32(EAGAIN) + } else { + v1 = (*(*Tctx2)(unsafe.Pointer(bp))).Fret + } + return X__syscall_ret(tls, uint32(v1)) +} + +func Xsleep(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(seconds), + } + if Xnanosleep(tls, bp, bp) != 0 { + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + } + return uint32(0) +} + +func Xsymlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_symlink), int32(existing), int32(new1)))) +} + +func Xsymlinkat(tls *TLS, existing uintptr, fd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v fd=%v new1=%v, (%v:)", tls, existing, fd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_symlinkat), int32(existing), fd, int32(new1)))) +} + +func Xsync(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__syscall0(tls, int32(SYS_sync)) +} + +func Xtcgetpgrp(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGPGRP), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcsetpgrp(tls *TLS, fd int32, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pgrp=%v, (%v:)", tls, fd, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp_int at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = pgrp + return Xioctl(tls, fd, int32(TIOCSPGRP), VaList(bp+16, bp)) +} + +func Xtruncate(tls *TLS, path uintptr, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v length=%v, (%v:)", tls, path, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall2(tls, int32(SYS_truncate64), int32(path), int32(length)))) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xttyname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var result, v1 int32 + _, _ = result, v1 + v1 = Xttyname_r(tls, fd, uintptr(unsafe.Pointer(&_buf10)), uint32(32)) + result = v1 + if v1 != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = result + return UintptrFromInt32(0) + } + return uintptr(unsafe.Pointer(&_buf10)) +} + +var _buf10 [32]uint8 + +func Xttyname_r(tls *TLS, fd int32, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v size=%v, (%v:)", tls, fd, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(336) + defer tls.Free(336) + var l Tssize_t + var _ /* procname at bp+304 */ [29]uint8 + var _ /* st1 at bp+0 */ Tstat + var _ /* st2 at bp+152 */ Tstat + _ = l + if !(Xisatty(tls, fd) != 0) { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + X__procfdname(tls, bp+304, uint32(fd)) + l = Xreadlink(tls, bp+304, name, size) + if l < 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + if uint32(l) == size { + return int32(ERANGE) + } + } + *(*uint8)(unsafe.Pointer(name + uintptr(l))) = uint8(0) + if Xstat(tls, name, bp) != 0 || Xfstat(tls, fd, bp+152) != 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*(*Tstat)(unsafe.Pointer(bp + 152))).Fst_dev || (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino != (*(*Tstat)(unsafe.Pointer(bp + 152))).Fst_ino { + return int32(ENODEV) + } + return 0 +} + +func Xualarm(tls *TLS, value uint32, interval uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v value=%v interval=%v, (%v:)", tls, value, interval, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* it_old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_usec: int64(interval), + }, + Fit_value: Ttimeval{ + Ftv_usec: int64(value), + }, + } + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec*int64(1000000) + (*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) +} + +func Xunlink(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall1(tls, int32(SYS_unlink), int32(path)))) +} + +func Xunlinkat(tls *TLS, fd int32, path uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v flag=%v, (%v:)", tls, fd, path, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(X__syscall3(tls, int32(SYS_unlinkat), fd, int32(path), flag))) +} + +func Xusleep(tls *TLS, useconds uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v useconds=%v, (%v:)", tls, useconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(useconds / uint32(1000000)), + Ftv_nsec: int32(useconds % uint32(1000000) * uint32(1000)), + } + return Xnanosleep(tls, bp, bp) +} + +func Xwrite(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_write), fd, int32(buf), int32(count), 0, 0, 0))) +} + +func Xwritev(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint32(___syscall_cp(tls, int32(SYS_writev), fd, int32(iov), count, 0, 0, 0))) +} + +type Ttime32_t = int32 + +type Ttimeval32 = struct { + Ftv_sec int32 + Ftv_usec int32 +} + +type Titimerval32 = struct { + Fit_interval Ttimeval32 + Fit_value Ttimeval32 +} + +type Ttimespec32 = struct { + Ftv_sec int32 + Ftv_nsec int32 +} + +type Titimerspec32 = struct { + Fit_interval Ttimespec32 + Fit_value Ttimespec32 +} + +func X__fxstat(tls *TLS, ver int32, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v buf=%v, (%v:)", tls, ver, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat_time32(tls, fd, buf) +} + +func X__fxstatat(tls *TLS, ver int32, fd int32, path uintptr, buf uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v buf=%v flag=%v, (%v:)", tls, ver, fd, path, buf, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat_time32(tls, fd, path, buf, flag) +} + +func X__lxstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lstat_time32(tls, path, buf) +} + +func X__xstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stat_time32(tls, path, buf) +} + +type Tregister_t = int32 + +type Tu_int64_t = uint64 + +type Tu_int8_t = uint8 + +type Tu_int16_t = uint16 + +type Tu_int32_t = uint32 + +type Tcaddr_t = uintptr + +type Tu_char = uint8 + +type Tu_short = uint16 + +type Tushort = uint16 + +type Tu_int = uint32 + +type Tuint = uint32 + +type Tu_long = uint32 + +type Tulong = uint32 + +type Tquad_t = int64 + +type Tu_quad_t = uint64 + +func X__adjtime32(tls *TLS, in32 uintptr, out32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v in32=%v out32=%v, (%v:)", tls, in32, out32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* out at bp+16 */ Ttimeval + _ = r + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(in32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(in32)).Ftv_usec), + } + r = Xadjtime(tls, bp, bp+16) + if r != 0 { + return r + } + /* We can't range-check the result because success was already + * committed by the above call. */ + if out32 != 0 { + (*Ttimeval32)(unsafe.Pointer(out32)).Ftv_sec = int32((*(*Ttimeval)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimeval32)(unsafe.Pointer(out32)).Ftv_usec = int32((*(*Ttimeval)(unsafe.Pointer(bp + 16))).Ftv_usec) + } + return r +} + +func X__adjtimex_time32(tls *TLS, tx32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx32=%v, (%v:)", tls, tx32, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_adjtime32(tls, CLOCK_REALTIME, tx32) +} + +type Ttimex32 = struct { + Fmodes uint32 + Foffset int32 + Ffreq int32 + Fmaxerror int32 + Festerror int32 + Fstatus int32 + Fconstant int32 + Fprecision int32 + Ftolerance int32 + Ftime Ttimeval32 + Ftick int32 + Fppsfreq int32 + Fjitter int32 + Fshift int32 + Fstabil int32 + Fjitcnt int32 + Fcalcnt int32 + Ferrcnt int32 + Fstbcnt int32 + Ftai int32 + F__padding [11]int32 +} + +func X__clock_adjtime32(tls *TLS, clock_id Tclockid_t, tx32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v tx32=%v, (%v:)", tls, clock_id, tx32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var r int32 + var _ /* utx at bp+0 */ Ttimex + _ = r + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{ + Fmodes: (*Ttimex32)(unsafe.Pointer(tx32)).Fmodes, + Foffset: (*Ttimex32)(unsafe.Pointer(tx32)).Foffset, + Ffreq: (*Ttimex32)(unsafe.Pointer(tx32)).Ffreq, + Fmaxerror: (*Ttimex32)(unsafe.Pointer(tx32)).Fmaxerror, + Festerror: (*Ttimex32)(unsafe.Pointer(tx32)).Festerror, + Fstatus: (*Ttimex32)(unsafe.Pointer(tx32)).Fstatus, + Fconstant: (*Ttimex32)(unsafe.Pointer(tx32)).Fconstant, + Fprecision: (*Ttimex32)(unsafe.Pointer(tx32)).Fprecision, + Ftolerance: (*Ttimex32)(unsafe.Pointer(tx32)).Ftolerance, + Ftime: Ttimeval{ + Ftv_sec: int64((*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_sec), + Ftv_usec: int64((*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_usec), + }, + Ftick: (*Ttimex32)(unsafe.Pointer(tx32)).Ftick, + Fppsfreq: (*Ttimex32)(unsafe.Pointer(tx32)).Fppsfreq, + Fjitter: (*Ttimex32)(unsafe.Pointer(tx32)).Fjitter, + Fshift: (*Ttimex32)(unsafe.Pointer(tx32)).Fshift, + Fstabil: (*Ttimex32)(unsafe.Pointer(tx32)).Fstabil, + Fjitcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fjitcnt, + Fcalcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fcalcnt, + Ferrcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Ferrcnt, + Fstbcnt: (*Ttimex32)(unsafe.Pointer(tx32)).Fstbcnt, + Ftai: (*Ttimex32)(unsafe.Pointer(tx32)).Ftai, + } + r = Xclock_adjtime(tls, clock_id, bp) + if r < 0 { + return r + } + (*Ttimex32)(unsafe.Pointer(tx32)).Fmodes = (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes + (*Ttimex32)(unsafe.Pointer(tx32)).Foffset = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset + (*Ttimex32)(unsafe.Pointer(tx32)).Ffreq = (*(*Ttimex)(unsafe.Pointer(bp))).Ffreq + (*Ttimex32)(unsafe.Pointer(tx32)).Fmaxerror = (*(*Ttimex)(unsafe.Pointer(bp))).Fmaxerror + (*Ttimex32)(unsafe.Pointer(tx32)).Festerror = (*(*Ttimex)(unsafe.Pointer(bp))).Festerror + (*Ttimex32)(unsafe.Pointer(tx32)).Fstatus = (*(*Ttimex)(unsafe.Pointer(bp))).Fstatus + (*Ttimex32)(unsafe.Pointer(tx32)).Fconstant = (*(*Ttimex)(unsafe.Pointer(bp))).Fconstant + (*Ttimex32)(unsafe.Pointer(tx32)).Fprecision = (*(*Ttimex)(unsafe.Pointer(bp))).Fprecision + (*Ttimex32)(unsafe.Pointer(tx32)).Ftolerance = (*(*Ttimex)(unsafe.Pointer(bp))).Ftolerance + (*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_sec = int32((*(*Ttimex)(unsafe.Pointer(bp))).Ftime.Ftv_sec) + (*Ttimex32)(unsafe.Pointer(tx32)).Ftime.Ftv_usec = int32((*(*Ttimex)(unsafe.Pointer(bp))).Ftime.Ftv_usec) + (*Ttimex32)(unsafe.Pointer(tx32)).Ftick = (*(*Ttimex)(unsafe.Pointer(bp))).Ftick + (*Ttimex32)(unsafe.Pointer(tx32)).Fppsfreq = (*(*Ttimex)(unsafe.Pointer(bp))).Fppsfreq + (*Ttimex32)(unsafe.Pointer(tx32)).Fjitter = (*(*Ttimex)(unsafe.Pointer(bp))).Fjitter + (*Ttimex32)(unsafe.Pointer(tx32)).Fshift = (*(*Ttimex)(unsafe.Pointer(bp))).Fshift + (*Ttimex32)(unsafe.Pointer(tx32)).Fstabil = (*(*Ttimex)(unsafe.Pointer(bp))).Fstabil + (*Ttimex32)(unsafe.Pointer(tx32)).Fjitcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fjitcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Fcalcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fcalcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Ferrcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Ferrcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Fstbcnt = (*(*Ttimex)(unsafe.Pointer(bp))).Fstbcnt + (*Ttimex32)(unsafe.Pointer(tx32)).Ftai = (*(*Ttimex)(unsafe.Pointer(bp))).Ftai + return r +} + +func X__clock_getres_time32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xclock_getres(tls, clk, bp) + if !(r != 0) && ts32 != 0 { + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + } + return r +} + +func X__clock_gettime32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xclock_gettime(tls, clk, bp) + if r != 0 { + return r + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + return 0 +} + +func X__clock_nanosleep_time32(tls *TLS, clk Tclockid_t, flags int32, req32 uintptr, rem32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req32=%v rem32=%v, (%v:)", tls, clk, flags, req32, rem32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* rem at bp+16 */ Ttimespec + _ = ret + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(req32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(req32)).Ftv_nsec, + } + ret = Xclock_nanosleep(tls, clk, flags, bp, bp+16) + if ret == int32(EINTR) && rem32 != 0 && !(flags&Int32FromInt32(TIMER_ABSTIME) != 0) { + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_nsec + } + return ret +} + +func X__clock_settime32(tls *TLS, clk Tclockid_t, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts32=%v, (%v:)", tls, clk, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + return Xclock_settime(tls, clk, bp) +} + +func X__ctime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xctime(tls, bp) +} + +func X__ctime32_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xctime_r(tls, bp, buf) +} + +func X__difftime32(tls *TLS, t1 Ttime32_t, t2 Ttime32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t2=%v, (%v:)", tls, t1, t2, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdifftime(tls, int64(t1), int64(t2)) +} + +func X__fstat_time32(tls *TLS, fd int32, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st32=%v, (%v:)", tls, fd, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xfstat(tls, fd, bp) + if !(r != 0) { + _memcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+104)) + } + return r +} + +func X__fstatat_time32(tls *TLS, fd int32, path uintptr, st32 uintptr, flag int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st32=%v flag=%v, (%v:)", tls, fd, path, st32, flag, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xfstatat(tls, fd, path, bp, flag) + if !(r != 0) { + _memcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+104)) + } + return r +} + +type Ttimeb32 = struct { + Ftime Tint32_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func X__ftime32(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tb at bp+0 */ Ttimeb + if Xftime(tls, bp) < 0 { + return -int32(1) + } + if (*(*Ttimeb)(unsafe.Pointer(bp))).Ftime < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimeb)(unsafe.Pointer(bp))).Ftime > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimeb32)(unsafe.Pointer(tp)).Ftime = int32((*(*Ttimeb)(unsafe.Pointer(bp))).Ftime) + (*Ttimeb32)(unsafe.Pointer(tp)).Fmillitm = (*(*Ttimeb)(unsafe.Pointer(bp))).Fmillitm + (*Ttimeb32)(unsafe.Pointer(tp)).Ftimezone = (*(*Ttimeb)(unsafe.Pointer(bp))).Ftimezone + (*Ttimeb32)(unsafe.Pointer(tp)).Fdstflag = (*(*Ttimeb)(unsafe.Pointer(bp))).Fdstflag + return 0 +} + +func X__futimens_time32(tls *TLS, fd int32, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times32=%v, (%v:)", tls, fd, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_nsec, + }, + 1: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_nsec, + }, + } + v1 = bp + } + return Xfutimens(tls, fd, v1) +} + +func X__futimes_time32(tls *TLS, fd int32, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times32=%v, (%v:)", tls, fd, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xfutimes(tls, fd, v1) +} + +func X__futimesat_time32(tls *TLS, dirfd int32, pathname uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times32=%v, (%v:)", tls, dirfd, pathname, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xfutimesat(tls, dirfd, pathname, v1) +} + +func X__getitimer_time32(tls *TLS, which int32, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old32=%v, (%v:)", tls, which, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerval + _ = r + r = Xgetitimer(tls, which, bp) + if r != 0 { + return r + } + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_interval.Ftv_usec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp))).Fit_value.Ftv_usec) + return 0 +} + +type Tcompat_rusage = struct { + Fru_utime Ttimeval32 + Fru_stime Ttimeval32 + Fru_maxrss int32 + Fru_ixrss int32 + Fru_idrss int32 + Fru_isrss int32 + Fru_minflt int32 + Fru_majflt int32 + Fru_nswap int32 + Fru_inblock int32 + Fru_oublock int32 + Fru_msgsnd int32 + Fru_msgrcv int32 + Fru_nsignals int32 + Fru_nvcsw int32 + Fru_nivcsw int32 +} + +func X__getrusage_time32(tls *TLS, who int32, usage uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v usage=%v, (%v:)", tls, who, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* ru at bp+0 */ Trusage + _ = r + r = Xgetrusage(tls, who, bp) + if !(r != 0) { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + _memcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func X__gettimeofday_time32(tls *TLS, tv32 uintptr, tz uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v tv32=%v tz=%v, (%v:)", tls, tv32, tz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tv at bp+0 */ Ttimeval + _ = r + if !(tv32 != 0) { + return 0 + } + r = Xgettimeofday(tls, bp, uintptr(0)) + if r != 0 { + return r + } + if (*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + (*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec = int32((*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec = int32((*(*Ttimeval)(unsafe.Pointer(bp))).Ftv_usec) + return 0 +} + +func X__gmtime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xgmtime(tls, bp) +} + +func X__gmtime32_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xgmtime_r(tls, bp, tm) +} + +func X__localtime32(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xlocaltime(tls, bp) +} + +func X__localtime32_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xlocaltime_r(tls, bp, tm) +} + +func X__lstat_time32(tls *TLS, path uintptr, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v st32=%v, (%v:)", tls, path, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xlstat(tls, path, bp) + if !(r != 0) { + _memcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+104)) + } + return r +} + +func X__lutimes_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xlutimes(tls, path, v1) +} + +func X__mktime32(tls *TLS, tm uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var t Ttime_t + var _ /* tmp at bp+0 */ Ttm + _ = t + *(*Ttm)(unsafe.Pointer(bp)) = *(*Ttm)(unsafe.Pointer(tm)) + t = Xmktime(tls, bp) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return int32(t) +} + +func X__nanosleep_time32(tls *TLS, req32 uintptr, rem32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req32=%v rem32=%v, (%v:)", tls, req32, rem32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* rem at bp+16 */ Ttimespec + _ = ret + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(req32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(req32)).Ftv_nsec, + } + ret = Xnanosleep(tls, bp, bp+16) + if ret < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) && rem32 != 0 { + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(rem32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp + 16))).Ftv_nsec + } + return ret +} + +func X__ppoll_time32(tls *TLS, fds uintptr, n Tnfds_t, ts32 uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v ts32=%v mask=%v, (%v:)", tls, fds, n, ts32, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xppoll(tls, fds, n, v1, mask) +} + +func X__pselect_time32(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts32 uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts32=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts32, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xpselect(tls, n, rfds, wfds, efds, v1, mask) +} + +func X__recvmmsg_time32(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v ts32=%v, (%v:)", tls, fd, msgvec, vlen, flags, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if ts32 != 0 { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xrecvmmsg(tls, fd, msgvec, vlen, flags, v1) +} + +func X__select_time32(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv32=%v, (%v:)", tls, n, rfds, wfds, efds, tv32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(tv32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec), + } + v1 = bp + } + return Xselect(tls, n, rfds, wfds, efds, v1) +} + +func X__semtimedop_time32(tls *TLS, id int32, buf uintptr, n Tsize_t, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts32=%v, (%v:)", tls, id, buf, n, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xsemtimedop(tls, id, buf, n, v1) +} + +func X__setitimer_time32(tls *TLS, which int32, new32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new32=%v old32=%v, (%v:)", tls, which, new32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var _ /* old at bp+32 */ Titimerval + _ = r + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_sec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_interval.Ftv_sec), + Ftv_usec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_interval.Ftv_usec), + }, + Fit_value: Ttimeval{ + Ftv_sec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_value.Ftv_sec), + Ftv_usec: int64((*Titimerval32)(unsafe.Pointer(new32)).Fit_value.Ftv_usec), + }, + } + r = Xsetitimer(tls, which, bp, bp+32) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_interval.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_usec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerval32)(unsafe.Pointer(old32)).Fit_value.Ftv_usec = int32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) + } + return 0 +} + +func X__settimeofday_time32(tls *TLS, tv32 uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv32=%v tz=%v, (%v:)", tls, tv32, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(tv32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_sec), + Ftv_usec: int64((*Ttimeval32)(unsafe.Pointer(tv32)).Ftv_usec), + } + v1 = bp + } + return Xsettimeofday(tls, v1, uintptr(0)) +} + +func X__sigtimedwait_time32(tls *TLS, set uintptr, si uintptr, ts32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v si=%v ts32=%v, (%v:)", tls, set, si, ts32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(ts32 != 0) { + v1 = uintptr(0) + } else { + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64((*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec), + Ftv_nsec: (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec, + } + v1 = bp + } + return Xsigtimedwait(tls, set, si, v1) +} + +func X__stat_time32(tls *TLS, path uintptr, st32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v st32=%v, (%v:)", tls, path, st32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var _ /* st at bp+0 */ Tstat + _ = r + r = Xstat(tls, path, bp) + if !(r != 0) { + _memcpy(tls, st32, bp, uint32(UintptrFromInt32(0)+104)) + } + return r +} + +func X__stime32(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Ttime_t)(unsafe.Pointer(bp)) = int64(*(*Ttime32_t)(unsafe.Pointer(t))) + return Xstime(tls, bp) +} + +func X__time32(tls *TLS, p uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t Ttime_t + _ = t + t = Xtime(tls, uintptr(0)) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + if p != 0 { + *(*Ttime32_t)(unsafe.Pointer(p)) = int32(t) + } + return int32(t) +} + +func X__time32gm(tls *TLS, tm uintptr) (r Ttime32_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t Ttime_t + _ = t + t = Xtimegm(tls, tm) + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || t > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) + } + return int32(t) +} + +func X__timer_gettime32(tls *TLS, t Ttimer_t, val32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val32=%v, (%v:)", tls, t, val32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerspec + _ = r + r = Xtimer_gettime(tls, t, bp) + if r != 0 { + return r + } + /* No range checking for consistency with settime */ + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_nsec + return 0 +} + +func X__timer_settime32(tls *TLS, t Ttimer_t, flags int32, val32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val32=%v old32=%v, (%v:)", tls, t, flags, val32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var v1 uintptr + var _ /* old at bp+32 */ Titimerspec + _, _ = r, v1 + *(*Titimerspec)(unsafe.Pointer(bp)) = Titimerspec{ + Fit_interval: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec, + }, + Fit_value: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec, + }, + } + if old32 != 0 { + v1 = bp + 32 + } else { + v1 = uintptr(0) + } + r = Xtimer_settime(tls, t, flags, bp, v1) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_nsec + } + return 0 +} + +func X__timerfd_gettime32(tls *TLS, t int32, val32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v val32=%v, (%v:)", tls, t, val32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old at bp+0 */ Titimerspec + _ = r + r = Xtimerfd_gettime(tls, t, bp) + if r != 0 { + return r + } + /* No range checking for consistency with settime */ + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp))).Fit_value.Ftv_nsec + return 0 +} + +func X__timerfd_settime32(tls *TLS, t int32, flags int32, val32 uintptr, old32 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val32=%v old32=%v, (%v:)", tls, t, flags, val32, old32, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var r int32 + var v1 uintptr + var _ /* old at bp+32 */ Titimerspec + _, _ = r, v1 + *(*Titimerspec)(unsafe.Pointer(bp)) = Titimerspec{ + Fit_interval: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_interval.Ftv_nsec, + }, + Fit_value: Ttimespec{ + Ftv_sec: int64((*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_sec), + Ftv_nsec: (*Titimerspec32)(unsafe.Pointer(val32)).Fit_value.Ftv_nsec, + }, + } + if old32 != 0 { + v1 = bp + 32 + } else { + v1 = uintptr(0) + } + r = Xtimerfd_settime(tls, t, flags, bp, v1) + if r != 0 { + return r + } + /* The above call has already committed to success by changing the + * timer setting, so we can't fail on out-of-range old value. + * Since these are relative times, values large enough to overflow + * don't make sense anyway. */ + if old32 != 0 { + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_interval.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_interval.Ftv_nsec + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_sec = int32((*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec) + (*Titimerspec32)(unsafe.Pointer(old32)).Fit_value.Ftv_nsec = (*(*Titimerspec)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_nsec + } + return 0 +} + +func X__timespec_get_time32(tls *TLS, ts32 uintptr, base int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ts32=%v base=%v, (%v:)", tls, ts32, base, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* ts at bp+0 */ Ttimespec + _ = r + r = Xtimespec_get(tls, bp, base) + if !(r != 0) { + return r + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > int64(Int32FromInt32(INT32_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return 0 + } + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_sec = int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + (*Ttimespec32)(unsafe.Pointer(ts32)).Ftv_nsec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec + return r +} + +type Tutimbuf32 = struct { + Factime Ttime32_t + Fmodtime Ttime32_t +} + +func X__utime_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*Tutimbuf)(unsafe.Pointer(bp)) = Tutimbuf{ + Factime: int64((*Tutimbuf32)(unsafe.Pointer(times32)).Factime), + Fmodtime: int64((*Tutimbuf32)(unsafe.Pointer(times32)).Fmodtime), + } + v1 = bp + } + return Xutime(tls, path, v1) +} + +func X__utimensat_time32(tls *TLS, fd int32, path uintptr, times32 uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times32=%v flags=%v, (%v:)", tls, fd, path, times32, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32))).Ftv_nsec, + }, + 1: { + Ftv_sec: int64((*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_nsec: (*(*Ttimespec32)(unsafe.Pointer(times32 + 1*8))).Ftv_nsec, + }, + } + v1 = bp + } + return Xutimensat(tls, fd, path, v1, flags) +} + +func X__utimes_time32(tls *TLS, path uintptr, times32 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times32=%v, (%v:)", tls, path, times32, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if !(times32 != 0) { + v1 = uintptr(0) + } else { + *(*[2]Ttimeval)(unsafe.Pointer(bp)) = [2]Ttimeval{ + 0: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32))).Ftv_usec), + }, + 1: { + Ftv_sec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_sec), + Ftv_usec: int64((*(*Ttimeval32)(unsafe.Pointer(times32 + 1*8))).Ftv_usec), + }, + } + v1 = bp + } + return Xutimes(tls, path, v1) +} + +type t__ucontext5 = Tucontext_t7 + +func X__wait3_time32(tls *TLS, status uintptr, options int32, usage uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var v1 uintptr + var _ /* ru at bp+0 */ Trusage + _, _ = r, v1 + if usage != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + r = Xwait3(tls, status, options, v1) + if !(r != 0) && usage != 0 { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + _memcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func X__wait4_time32(tls *TLS, pid Tpid_t, status uintptr, options int32, usage uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v usage=%v, (%v:)", tls, pid, status, options, usage, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var r int32 + var v1 uintptr + var _ /* ru at bp+0 */ Trusage + _, _ = r, v1 + if usage != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + r = Xwait4(tls, pid, status, options, v1) + if !(r != 0) && usage != 0 { + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_utime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_utime.Ftv_usec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_sec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_sec) + (*Tcompat_rusage)(unsafe.Pointer(usage)).Fru_stime.Ftv_usec = int32((*(*Trusage)(unsafe.Pointer(bp))).Fru_stime.Ftv_usec) + _memcpy(tls, usage+16, bp+32, Uint32FromInt64(72)-uint32(UintptrFromInt32(0)+16)) + } + return r +} + +func __ccgo_fp(f interface{}) uintptr { + type iface [2]uintptr + return (*iface)(unsafe.Pointer(&f))[1] +} + +var X__abort_lock [1]int32 + +var X__at_quick_exit_lockptr = uintptr(unsafe.Pointer(&_lock)) + +var X__c_dot_utf8 = t__locale_map{ + Fmap1: uintptr(unsafe.Pointer(&_empty_mo)), + Fmap_size: uint32(20), + Fname: [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'}, +} + +var X__c_dot_utf8_locale = t__locale_struct{ + Fcat: [6]uintptr{ + 0: uintptr(unsafe.Pointer(&X__c_dot_utf8)), + }, +} + +var X__c_locale = t__locale_struct{} + +var Xdaylight int32 + +var X__eintr_valid_flag int32 + +var Xenviron uintptr + +var X__exp2f_data = Texp2f_data{ + Ftab: [32]Tuint64_t{ + 0: uint64(0x3ff0000000000000), + 1: uint64(0x3fefd9b0d3158574), + 2: uint64(0x3fefb5586cf9890f), + 3: uint64(0x3fef9301d0125b51), + 4: uint64(0x3fef72b83c7d517b), + 5: uint64(0x3fef54873168b9aa), + 6: uint64(0x3fef387a6e756238), + 7: uint64(0x3fef1e9df51fdee1), + 8: uint64(0x3fef06fe0a31b715), + 9: uint64(0x3feef1a7373aa9cb), + 10: uint64(0x3feedea64c123422), + 11: uint64(0x3feece086061892d), + 12: uint64(0x3feebfdad5362a27), + 13: uint64(0x3feeb42b569d4f82), + 14: uint64(0x3feeab07dd485429), + 15: uint64(0x3feea47eb03a5585), + 16: uint64(0x3feea09e667f3bcd), + 17: uint64(0x3fee9f75e8ec5f74), + 18: uint64(0x3feea11473eb0187), + 19: uint64(0x3feea589994cce13), + 20: uint64(0x3feeace5422aa0db), + 21: uint64(0x3feeb737b0cdc5e5), + 22: uint64(0x3feec49182a3f090), + 23: uint64(0x3feed503b23e255d), + 24: uint64(0x3feee89f995ad3ad), + 25: uint64(0x3feeff76f2fb5e47), + 26: uint64(0x3fef199bdd85529c), + 27: uint64(0x3fef3720dcef9069), + 28: uint64(0x3fef5818dcfba487), + 29: uint64(0x3fef7c97337b9b5f), + 30: uint64(0x3fefa4afa2a490da), + 31: uint64(0x3fefd0765b6e4540), + }, + Fshift_scaled: Float64FromFloat64(6.755399441055744e+15) / float64(Int32FromInt32(1)<>Int32FromInt32(6) | Uint32FromInt32(0x0), + 31: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x1), + 32: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x2), + 33: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x3), + 34: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x4), + 35: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x5), + 36: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x6), + 37: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x7), + 38: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x8), + 39: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x9), + 40: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xa), + 41: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xb), + 42: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xc), + 43: (Uint32FromUint32(0x40)-Uint32FromInt32(0xa0))<>Int32FromInt32(6) | Uint32FromInt32(0xd), + 44: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xe), + 45: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xf), + 46: (Uint32FromUint32(0)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x0), + 47: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x1), + 48: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x2), + 49: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x3), + 50: (Uint32FromUint32(0x40)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x4), +} + +var X__gettext_lockptr = uintptr(unsafe.Pointer(&_lock1)) + +var X__hwcap Tsize_t + +var X__libc t__libc + +var X__libc_version = [6]uint8{'1', '.', '2', '.', '5'} + +var X__locale_lock [1]int32 + +var X__locale_lockptr = uintptr(unsafe.Pointer(&X__locale_lock)) + +var X__log2_data = Tlog2_data{ + Finvln2hi: float64(1.4426950407214463), + Finvln2lo: float64(1.6751713164886512e-10), + Fpoly: [6]float64{ + 0: -Float64FromFloat64(0.7213475204444882), + 1: float64(0.4808983469629985), + 2: -Float64FromFloat64(0.36067375954075914), + 3: float64(0.2885390073180969), + 4: -Float64FromFloat64(0.2404693555628422), + 5: float64(0.2061202382173603), + }, + Fpoly1: [10]float64{ + 0: -Float64FromFloat64(0.7213475204444817), + 1: float64(0.48089834696298744), + 2: -Float64FromFloat64(0.360673760222145), + 3: float64(0.2885390081805197), + 4: -Float64FromFloat64(0.24044917405728863), + 5: float64(0.2060992861022954), + 6: -Float64FromFloat64(0.18033596705327856), + 7: float64(0.1603032746063156), + 8: -Float64FromFloat64(0.14483316576701266), + 9: float64(0.13046826811283835), + }, + Ftab: [64]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4463276106642393), + Flogc: -Float64FromFloat64(0.5323943771486483), + }, + 1: { + Finvc: float64(1.4301675812282968), + Flogc: -Float64FromFloat64(0.516184206053822), + }, + 2: { + Finvc: float64(1.4143648676229383), + Flogc: -Float64FromFloat64(0.5001543441974263), + }, + 3: { + Finvc: float64(1.3989068970611538), + Flogc: -Float64FromFloat64(0.4842999484799293), + }, + 4: { + Finvc: float64(1.3837838957784339), + Flogc: -Float64FromFloat64(0.46861865624623533), + }, + 5: { + Finvc: float64(1.368983882697786), + Flogc: -Float64FromFloat64(0.4531054615783887), + }, + 6: { + Finvc: float64(1.3544972916324536), + Flogc: -Float64FromFloat64(0.43775750882059583), + }, + 7: { + Finvc: float64(1.3403139676437443), + Flogc: -Float64FromFloat64(0.4225709906127122), + }, + 8: { + Finvc: float64(1.3264249304188642), + Flogc: -Float64FromFloat64(0.40754302793970965), + }, + 9: { + Finvc: float64(1.3128203652112156), + Flogc: -Float64FromFloat64(0.3926695240384106), + }, + 10: { + Finvc: float64(1.299492412370217), + Flogc: -Float64FromFloat64(0.3779482100565019), + }, + 11: { + Finvc: float64(1.28643198385998), + Flogc: -Float64FromFloat64(0.36337518101890964), + }, + 12: { + Finvc: float64(1.2736319291846832), + Flogc: -Float64FromFloat64(0.3489484089425332), + }, + 13: { + Finvc: float64(1.2610838968062879), + Flogc: -Float64FromFloat64(0.33466425780738973), + }, + 14: { + Finvc: float64(1.248780314313572), + Flogc: -Float64FromFloat64(0.3205197000629596), + }, + 15: { + Finvc: float64(1.2367150450059063), + Flogc: -Float64FromFloat64(0.3065131231801388), + }, + 16: { + Finvc: float64(1.2248804968401878), + Flogc: -Float64FromFloat64(0.2926410022678283), + }, + 17: { + Finvc: float64(1.2132702353497795), + Flogc: -Float64FromFloat64(0.2789009220805383), + }, + 18: { + Finvc: float64(1.2018780785715362), + Flogc: -Float64FromFloat64(0.2652905529862437), + }, + 19: { + Finvc: float64(1.190697765061355), + Flogc: -Float64FromFloat64(0.2518072602367738), + }, + 20: { + Finvc: float64(1.1797235410550593), + Flogc: -Float64FromFloat64(0.23844881494437686), + }, + 21: { + Finvc: float64(1.1689498986205256), + Flogc: -Float64FromFloat64(0.22521309705462045), + }, + 22: { + Finvc: float64(1.158371137408455), + Flogc: -Float64FromFloat64(0.21209756102439314), + }, + 23: { + Finvc: float64(1.1479820146386086), + Flogc: -Float64FromFloat64(0.1991000395789797), + }, + 24: { + Finvc: float64(1.1377775576851088), + Flogc: -Float64FromFloat64(0.18621852970682085), + }, + 25: { + Finvc: float64(1.127753150630225), + Flogc: -Float64FromFloat64(0.17345131655361), + }, + 26: { + Finvc: float64(1.1179037012282074), + Flogc: -Float64FromFloat64(0.16079591649577196), + }, + 27: { + Finvc: float64(1.1082251967632821), + Flogc: -Float64FromFloat64(0.14825107384353942), + }, + 28: { + Finvc: float64(1.098712461056607), + Flogc: -Float64FromFloat64(0.13581387465410444), + }, + 29: { + Finvc: float64(1.0893619091634283), + Flogc: -Float64FromFloat64(0.12348332762257996), + }, + 30: { + Finvc: float64(1.0801689912316736), + Flogc: -Float64FromFloat64(0.11125703807351783), + }, + 31: { + Finvc: float64(1.071129489697672), + Flogc: -Float64FromFloat64(0.09913289918449664), + }, + 32: { + Finvc: float64(1.0622406576750423), + Flogc: -Float64FromFloat64(0.08711065531497297), + }, + 33: { + Finvc: float64(1.0534977607927976), + Flogc: -Float64FromFloat64(0.07518724771330199), + }, + 34: { + Finvc: float64(1.044897877982342), + Flogc: -Float64FromFloat64(0.06336194888240243), + }, + 35: { + Finvc: float64(1.0364370289499079), + Flogc: -Float64FromFloat64(0.0516324649456692), + }, + 36: { + Finvc: float64(1.0281122132034575), + Flogc: -Float64FromFloat64(0.039997735929773626), + }, + 37: { + Finvc: float64(1.0199202450036955), + Flogc: -Float64FromFloat64(0.028456341769015125), + }, + 38: { + Finvc: float64(1.0118577522306755), + Flogc: -Float64FromFloat64(0.017006489068080555), + }, + 39: { + Finvc: float64(1.003921649236766), + Flogc: -Float64FromFloat64(0.005646678981520381), + }, + 40: { + Finvc: float64(0.9922480467550775), + Flogc: float64(0.011227277611396858), + }, + 41: { + Finvc: float64(0.9770993366178549), + Flogc: float64(0.033422853921138085), + }, + 42: { + Finvc: float64(0.9624059787315814), + Flogc: float64(0.05528248992573026), + }, + 43: { + Finvc: float64(0.9481480598286369), + Flogc: float64(0.07681573143713649), + }, + 44: { + Finvc: float64(0.9343065931261065), + Flogc: float64(0.09803204623631245), + }, + 45: { + Finvc: float64(0.9208633936884979), + Flogc: float64(0.11894094059630334), + }, + 46: { + Finvc: float64(0.9078013641840602), + Flogc: float64(0.13955143862290242), + }, + 47: { + Finvc: float64(0.8951048181512927), + Flogc: float64(0.15987146080919956), + }, + 48: { + Finvc: float64(0.882758574260473), + Flogc: float64(0.17990916589428707), + }, + 49: { + Finvc: float64(0.8707481902241709), + Flogc: float64(0.19967252559081317), + }, + 50: { + Finvc: float64(0.8590602881746972), + Flogc: float64(0.2191687127685782), + }, + 51: { + Finvc: float64(0.8476822044336688), + Flogc: float64(0.23840459427242422), + }, + 52: { + Finvc: float64(0.8366013284053287), + Flogc: float64(0.25738780610663525), + }, + 53: { + Finvc: float64(0.8258064913621258), + Flogc: float64(0.27612433583180973), + }, + 54: { + Finvc: float64(0.8152865101579193), + Flogc: float64(0.2946209507022104), + }, + 55: { + Finvc: float64(0.8050314363208223), + Flogc: float64(0.31288297359969874), + }, + 56: { + Finvc: float64(0.7950310492640542), + Flogc: float64(0.33091689015759584), + }, + 57: { + Finvc: float64(0.7852760432487271), + Flogc: float64(0.3487282100279572), + }, + 58: { + Finvc: float64(0.7757575660314712), + Flogc: float64(0.36632223233368677), + }, + 59: { + Finvc: float64(0.7664670566588946), + Flogc: float64(0.383704309808536), + }, + 60: { + Finvc: float64(0.7573965608078645), + Flogc: float64(0.4008792246509074), + }, + 61: { + Finvc: float64(0.7485380168514022), + Flogc: float64(0.41785250494945103), + }, + 62: { + Finvc: float64(0.7398844213755009), + Flogc: float64(0.4346281724315304), + }, + 63: { + Finvc: float64(0.7314286113178112), + Flogc: float64(0.45121103315341315), + }, + }, + Ftab2: [64]struct { + F__ccgo_align [0]uint32 + Fchi float64 + Fclo float64 + }{ + 0: { + Fchi: float64(0.6914062848739648), + Fclo: float64(4.339971893418182e-17), + }, + 1: { + Fchi: float64(0.6992187580850853), + Fclo: float64(7.805593338712074e-18), + }, + 2: { + Fchi: float64(0.7070311366547563), + Fclo: float64(3.20843320369626e-17), + }, + 3: { + Fchi: float64(0.7148438556567389), + Fclo: float64(4.336491946473985e-17), + }, + 4: { + Fchi: float64(0.7226561915128084), + Fclo: float64(4.681890319761607e-17), + }, + 5: { + Fchi: float64(0.730468789763508), + Fclo: -Float64FromFloat64(1.647126642147294e-17), + }, + 6: { + Fchi: float64(0.7382812842650944), + Fclo: float64(2.0846837208642192e-17), + }, + 7: { + Fchi: float64(0.7460938437864584), + Fclo: -Float64FromFloat64(7.82131795361932e-18), + }, + 8: { + Fchi: float64(0.7539062159244969), + Fclo: -Float64FromFloat64(3.470987810015201e-17), + }, + 9: { + Fchi: float64(0.761718835645205), + Fclo: float64(1.2996798345429576e-17), + }, + 10: { + Fchi: float64(0.7695312342578777), + Fclo: -Float64FromFloat64(5.2071007285622585e-17), + }, + 11: { + Fchi: float64(0.7773438569208053), + Fclo: -Float64FromFloat64(4.513636731226183e-17), + }, + 12: { + Fchi: float64(0.7851561955110148), + Fclo: -Float64FromFloat64(2.0797044446832382e-17), + }, + 13: { + Fchi: float64(0.7929686538163826), + Fclo: -Float64FromFloat64(1.9947626198727574e-17), + }, + 14: { + Fchi: float64(0.8007813612514213), + Fclo: float64(1.472064871061342e-17), + }, + 15: { + Fchi: float64(0.8085937047812207), + Fclo: float64(5.290804109377209e-17), + }, + 16: { + Fchi: float64(0.816406173973453), + Fclo: -Float64FromFloat64(1.129659587857177e-17), + }, + 17: { + Fchi: float64(0.8242186867064328), + Fclo: float64(3.901543738154691e-17), + }, + 18: { + Fchi: float64(0.8320311501051142), + Fclo: -Float64FromFloat64(3.212482853127187e-17), + }, + 19: { + Fchi: float64(0.8398436860662717), + Fclo: float64(5.220081794706035e-18), + }, + 20: { + Fchi: float64(0.8476562221566525), + Fclo: -Float64FromFloat64(5.37416378988278e-17), + }, + 21: { + Fchi: float64(0.8554686571084844), + Fclo: float64(4.291992377471359e-18), + }, + 22: { + Fchi: float64(0.8632811779454657), + Fclo: float64(1.7319616935225806e-17), + }, + 23: { + Fchi: float64(0.8710937865301015), + Fclo: float64(1.8251073579011692e-17), + }, + 24: { + Fchi: float64(0.8789064200163806), + Fclo: float64(1.2113671810693101e-17), + }, + 25: { + Fchi: float64(0.8867188705623812), + Fclo: -Float64FromFloat64(2.431195196496269e-17), + }, + 26: { + Fchi: float64(0.894531433164887), + Fclo: -Float64FromFloat64(2.258952781769403e-17), + }, + 27: { + Fchi: float64(0.9023436779100781), + Fclo: float64(4.3322028821617186e-17), + }, + 28: { + Fchi: float64(0.9101562378188762), + Fclo: -Float64FromFloat64(5.2414676705491076e-18), + }, + 29: { + Fchi: float64(0.9179685755379005), + Fclo: -Float64FromFloat64(2.3432856904274634e-17), + }, + 30: { + Fchi: float64(0.9257810658494647), + Fclo: float64(3.9914341909758727e-17), + }, + 31: { + Fchi: float64(0.9335939394986237), + Fclo: -Float64FromFloat64(1.8218382846902827e-17), + }, + 32: { + Fchi: float64(0.9414062555172099), + Fclo: float64(4.423669374431538e-17), + }, + 33: { + Fchi: float64(0.9492189136192009), + Fclo: -Float64FromFloat64(2.6059674623550364e-17), + }, + 34: { + Fchi: float64(0.9570313243730211), + Fclo: -Float64FromFloat64(4.947019261946595e-17), + }, + 35: { + Fchi: float64(0.9648439529540691), + Fclo: -Float64FromFloat64(5.4644837229582306e-17), + }, + 36: { + Fchi: float64(0.9726564738338594), + Fclo: -Float64FromFloat64(5.4656321533328614e-17), + }, + 37: { + Fchi: float64(0.9804688208697894), + Fclo: -Float64FromFloat64(1.782581090537996e-18), + }, + 38: { + Fchi: float64(0.98828120632121), + Fclo: -Float64FromFloat64(5.2277711573086786e-18), + }, + 39: { + Fchi: float64(0.9960936700192217), + Fclo: float64(4.1586638841164565e-17), + }, + 40: { + Fchi: float64(1.007812515499802), + Fclo: float64(9.540912389137736e-17), + }, + 41: { + Fchi: float64(1.0234373952820537), + Fclo: float64(3.985821704561347e-17), + }, + 42: { + Fchi: float64(1.0390625391978199), + Fclo: -Float64FromFloat64(5.179495640960355e-18), + }, + 43: { + Fchi: float64(1.0546875982436061), + Fclo: -Float64FromFloat64(6.074512782488841e-17), + }, + 44: { + Fchi: float64(1.07031247275489), + Fclo: -Float64FromFloat64(4.853656019321416e-17), + }, + 45: { + Fchi: float64(1.0859374005459401), + Fclo: -Float64FromFloat64(1.0233609026899023e-16), + }, + 46: { + Fchi: float64(1.101562565835984), + Fclo: float64(9.714504510281668e-17), + }, + 47: { + Fchi: float64(1.1171875960464082), + Fclo: -Float64FromFloat64(5.728631491659617e-17), + }, + 48: { + Fchi: float64(1.1328125595809087), + Fclo: -Float64FromFloat64(4.3353271744463366e-17), + }, + 49: { + Fchi: float64(1.1484376438870962), + Fclo: float64(5.029455257812864e-17), + }, + 50: { + Fchi: float64(1.1640626551656426), + Fclo: -Float64FromFloat64(1.3886091944776072e-17), + }, + 51: { + Fchi: float64(1.179687381390876), + Fclo: float64(9.535864385063222e-17), + }, + 52: { + Fchi: float64(1.19531246968748), + Fclo: float64(2.5970710873556995e-17), + }, + 53: { + Fchi: float64(1.2109374417129501), + Fclo: -Float64FromFloat64(1.0412863482435496e-16), + }, + 54: { + Fchi: float64(1.2265626715770166), + Fclo: float64(1.903080930681457e-17), + }, + 55: { + Fchi: float64(1.2421875157698543), + Fclo: float64(9.884933154288451e-17), + }, + 56: { + Fchi: float64(1.2578125104996614), + Fclo: float64(2.605028401046449e-17), + }, + 57: { + Fchi: float64(1.273437549250769), + Fclo: float64(3.128070230699857e-17), + }, + 58: { + Fchi: float64(1.2890625161616944), + Fclo: -Float64FromFloat64(4.506460293510891e-17), + }, + 59: { + Fchi: float64(1.3046875156762752), + Fclo: -Float64FromFloat64(2.0874781900380847e-17), + }, + 60: { + Fchi: float64(1.3203123063212308), + Fclo: float64(8.50535702424751e-17), + }, + 61: { + Fchi: float64(1.3359374907988373), + Fclo: -Float64FromFloat64(3.99657459893118e-17), + }, + 62: { + Fchi: float64(1.351562448282023), + Fclo: float64(4.1576596545784e-17), + }, + 63: { + Fchi: float64(1.3671874254389709), + Fclo: -Float64FromFloat64(6.072295450780066e-17), + }, + }, +} + +var X__log2f_data = Tlog2f_data{ + Ftab: [16]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.42257122959194704), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.3633754347673556), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.30651309567405577), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.25180720160537634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.19910014943794563), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.14825100623281615), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.09913323807318392), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.051632812977629436), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.07508531937943004), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.15987125980713107), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.2384046664317681), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.31288288605863257), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.38370422656453185), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.451211048935815), + }, + }, + Fpoly: [4]float64{ + 0: -Float64FromFloat64(0.36051725506874704), + 1: float64(0.4811247078767291), + 2: -Float64FromFloat64(0.7213476299867769), + 3: float64(1.4426950186867042), + }, +} + +var X__log_data = Tlog_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [5]float64{ + 0: -Float64FromFloat64(0.5000000000000001), + 1: float64(0.33333333331825593), + 2: -Float64FromFloat64(0.2499999999622955), + 3: float64(0.20000304511814496), + 4: -Float64FromFloat64(0.16667054827627667), + }, + Fpoly1: [11]float64{ + 0: -Float64FromFloat64(0.5), + 1: float64(0.3333333333333352), + 2: -Float64FromFloat64(0.24999999999998432), + 3: float64(0.19999999999320328), + 4: -Float64FromFloat64(0.16666666669929706), + 5: float64(0.14285715076560868), + 6: -Float64FromFloat64(0.12499997863982555), + 7: float64(0.11110712032936046), + 8: -Float64FromFloat64(0.10000486757818193), + 9: float64(0.09181994006195467), + 10: -Float64FromFloat64(0.08328363062289341), + }, + Ftab: [128]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4504249240398293), + Flogc: -Float64FromFloat64(0.3718565645633589), + }, + 1: { + Finvc: float64(1.442253508327276), + Flogc: -Float64FromFloat64(0.36620682668944937), + }, + 2: { + Finvc: float64(1.4341736174350004), + Flogc: -Float64FromFloat64(0.3605888069791945), + }, + 3: { + Finvc: float64(1.426183816329995), + Flogc: -Float64FromFloat64(0.3550022171419869), + }, + 4: { + Finvc: float64(1.4182825527052965), + Flogc: -Float64FromFloat64(0.34944666968829097), + }, + 5: { + Finvc: float64(1.4104682921759335), + Flogc: -Float64FromFloat64(0.3439217713603284), + }, + 6: { + Finvc: float64(1.4027396147468003), + Flogc: -Float64FromFloat64(0.3384271921261188), + }, + 7: { + Finvc: float64(1.3950954438932313), + Flogc: -Float64FromFloat64(0.332962831494342), + }, + 8: { + Finvc: float64(1.3875338232485754), + Flogc: -Float64FromFloat64(0.32752794345742586), + }, + 9: { + Finvc: float64(1.3800539211058593), + Flogc: -Float64FromFloat64(0.32212257167088865), + }, + 10: { + Finvc: float64(1.3726542695419708), + Flogc: -Float64FromFloat64(0.3167462884799761), + }, + 11: { + Finvc: float64(1.3653332798446802), + Flogc: -Float64FromFloat64(0.3113985598928366), + }, + 12: { + Finvc: float64(1.358090204587874), + Flogc: -Float64FromFloat64(0.3060794515165526), + }, + 13: { + Finvc: float64(1.3509234892132138), + Flogc: -Float64FromFloat64(0.300788424667644), + }, + 14: { + Finvc: float64(1.3438320840699889), + Flogc: -Float64FromFloat64(0.2955252968476998), + }, + 15: { + Finvc: float64(1.3368146974742003), + Flogc: -Float64FromFloat64(0.29028969275850613), + }, + 16: { + Finvc: float64(1.329870114677736), + Flogc: -Float64FromFloat64(0.2850812793277555), + }, + 17: { + Finvc: float64(1.322997339161106), + Flogc: -Float64FromFloat64(0.27989987391470095), + }, + 18: { + Finvc: float64(1.316195352741367), + Flogc: -Float64FromFloat64(0.27474526621870154), + }, + 19: { + Finvc: float64(1.3094628125672239), + Flogc: -Float64FromFloat64(0.2696169863701243), + }, + 20: { + Finvc: float64(1.3027990455471041), + Flogc: -Float64FromFloat64(0.26451506180308115), + }, + 21: { + Finvc: float64(1.2962024229438942), + Flogc: -Float64FromFloat64(0.2594387762767383), + }, + 22: { + Finvc: float64(1.2896726275815547), + Flogc: -Float64FromFloat64(0.2543884090981692), + }, + 23: { + Finvc: float64(1.2832080305745537), + Flogc: -Float64FromFloat64(0.24936321635129843), + }, + 24: { + Finvc: float64(1.276807885983376), + Flogc: -Float64FromFloat64(0.24436312405975968), + }, + 25: { + Finvc: float64(1.2704714060687552), + Flogc: -Float64FromFloat64(0.23938801747897287), + }, + 26: { + Finvc: float64(1.2641976054949482), + Flogc: -Float64FromFloat64(0.23443761696705678), + }, + 27: { + Finvc: float64(1.257985357514882), + Flogc: -Float64FromFloat64(0.22951151871518505), + }, + 28: { + Finvc: float64(1.2518337750655457), + Flogc: -Float64FromFloat64(0.2246094963439873), + }, + 29: { + Finvc: float64(1.2457421919097305), + Flogc: -Float64FromFloat64(0.21973149037705753), + }, + 30: { + Finvc: float64(1.2397094966625508), + Flogc: -Float64FromFloat64(0.2148770752847895), + }, + 31: { + Finvc: float64(1.2337348463589233), + Flogc: -Float64FromFloat64(0.210046029103637), + }, + 32: { + Finvc: float64(1.2278176973028803), + Flogc: -Float64FromFloat64(0.20523836373934046), + }, + 33: { + Finvc: float64(1.2219570190618474), + Flogc: -Float64FromFloat64(0.20045368751368642), + }, + 34: { + Finvc: float64(1.2161519732977757), + Flogc: -Float64FromFloat64(0.1956917537758045), + }, + 35: { + Finvc: float64(1.2104018095009725), + Flogc: -Float64FromFloat64(0.19095237845203883), + }, + 36: { + Finvc: float64(1.204705805718973), + Flogc: -Float64FromFloat64(0.18623539250290833), + }, + 37: { + Finvc: float64(1.1990631185441964), + Flogc: -Float64FromFloat64(0.18154051731551135), + }, + 38: { + Finvc: float64(1.1934733004462308), + Flogc: -Float64FromFloat64(0.1768677957431919), + }, + 39: { + Finvc: float64(1.1879350812847385), + Flogc: -Float64FromFloat64(0.17221657406412305), + }, + 40: { + Finvc: float64(1.1824481322833125), + Flogc: -Float64FromFloat64(0.16758697765942543), + }, + 41: { + Finvc: float64(1.1770114976921955), + Flogc: -Float64FromFloat64(0.16297859687290384), + }, + 42: { + Finvc: float64(1.1716248121809465), + Flogc: -Float64FromFloat64(0.15839151377804228), + }, + 43: { + Finvc: float64(1.1662869231674715), + Flogc: -Float64FromFloat64(0.15382513241456763), + }, + 44: { + Finvc: float64(1.1609977486762766), + Flogc: -Float64FromFloat64(0.14927976358922024), + }, + 45: { + Finvc: float64(1.1557563220795803), + Flogc: -Float64FromFloat64(0.14475495398119165), + }, + 46: { + Finvc: float64(1.1505619105480347), + Flogc: -Float64FromFloat64(0.14025044090817573), + }, + 47: { + Finvc: float64(1.1454138888505974), + Flogc: -Float64FromFloat64(0.1357660466685502), + }, + 48: { + Finvc: float64(1.140311877374656), + Flogc: -Float64FromFloat64(0.1313018016355727), + }, + 49: { + Finvc: float64(1.1352550225747513), + Flogc: -Float64FromFloat64(0.12685731518763532), + }, + 50: { + Finvc: float64(1.1302429094831266), + Flogc: -Float64FromFloat64(0.1224325737671279), + }, + 51: { + Finvc: float64(1.1252747693068048), + Flogc: -Float64FromFloat64(0.11802724521862729), + }, + 52: { + Finvc: float64(1.1203501571039876), + Flogc: -Float64FromFloat64(0.11364127671663482), + }, + 53: { + Finvc: float64(1.1154683327680124), + Flogc: -Float64FromFloat64(0.10927434611278386), + }, + 54: { + Finvc: float64(1.1106291463292157), + Flogc: -Float64FromFloat64(0.10492665324943573), + }, + 55: { + Finvc: float64(1.1058315813301596), + Flogc: -Float64FromFloat64(0.10059761422644442), + }, + 56: { + Finvc: float64(1.1010752177696026), + Flogc: -Float64FromFloat64(0.09628717309055901), + }, + 57: { + Finvc: float64(1.0963597137952512), + Flogc: -Float64FromFloat64(0.09199534069557558), + }, + 58: { + Finvc: float64(1.0916844827550398), + Flogc: -Float64FromFloat64(0.08772190036688698), + }, + 59: { + Finvc: float64(1.0870487291277784), + Flogc: -Float64FromFloat64(0.08346643613867855), + }, + 60: { + Finvc: float64(1.082452357388312), + Flogc: -Float64FromFloat64(0.07922916827544668), + }, + 61: { + Finvc: float64(1.0778948225025884), + Flogc: -Float64FromFloat64(0.0750099004750382), + }, + 62: { + Finvc: float64(1.0733751731601076), + Flogc: -Float64FromFloat64(0.07080805133352897), + }, + 63: { + Finvc: float64(1.068893585073351), + Flogc: -Float64FromFloat64(0.06662408085151128), + }, + 64: { + Finvc: float64(1.0644491706655506), + Flogc: -Float64FromFloat64(0.06245745471915143), + }, + 65: { + Finvc: float64(1.0600414846328305), + Flogc: -Float64FromFloat64(0.0583080438042316), + }, + 66: { + Finvc: float64(1.0556701316181605), + Flogc: -Float64FromFloat64(0.05417576112313327), + }, + 67: { + Finvc: float64(1.051334750556926), + Flogc: -Float64FromFloat64(0.050060547896805474), + }, + 68: { + Finvc: float64(1.0470347288442157), + Flogc: -Float64FromFloat64(0.045962101199052086), + }, + 69: { + Finvc: float64(1.0427699229652954), + Flogc: -Float64FromFloat64(0.04188056008865715), + }, + 70: { + Finvc: float64(1.0385395013738175), + Flogc: -Float64FromFloat64(0.03781540056183985), + }, + 71: { + Finvc: float64(1.034343418940345), + Flogc: -Float64FromFloat64(0.03376684757915882), + }, + 72: { + Finvc: float64(1.0301811073173315), + Flogc: -Float64FromFloat64(0.029734619131772888), + }, + 73: { + Finvc: float64(1.026052043621297), + Flogc: -Float64FromFloat64(0.025718470239212365), + }, + 74: { + Finvc: float64(1.0219561082336197), + Flogc: -Float64FromFloat64(0.021718543925430822), + }, + 75: { + Finvc: float64(1.0178926505784922), + Flogc: -Float64FromFloat64(0.01773446126981071), + }, + 76: { + Finvc: float64(1.0138614436244586), + Flogc: -Float64FromFloat64(0.013766252464051831), + }, + 77: { + Finvc: float64(1.0098620186501341), + Flogc: -Float64FromFloat64(0.009813706322574944), + }, + 78: { + Finvc: float64(1.0058938559734134), + Flogc: -Float64FromFloat64(0.005876555150052809), + }, + 79: { + Finvc: float64(1.00195696235014), + Flogc: -Float64FromFloat64(0.0019550499938532084), + }, + 80: { + Finvc: float64(0.9961089923088509), + Flogc: float64(0.0038985973556009412), + }, + 81: { + Finvc: float64(0.9884170338185201), + Flogc: float64(0.011650571286395461), + }, + 82: { + Finvc: float64(0.9808429191005297), + Flogc: float64(0.019342955478919066), + }, + 83: { + Finvc: float64(0.9733840169987446), + Flogc: float64(0.0269766014846482), + }, + 84: { + Finvc: float64(0.9660377568876556), + Flogc: float64(0.034552359728422744), + }, + 85: { + Finvc: float64(0.9588014945307369), + Flogc: float64(0.04207121767183253), + }, + 86: { + Finvc: float64(0.9516728569073111), + Flogc: float64(0.049533940950141186), + }, + 87: { + Finvc: float64(0.9446494635965822), + Flogc: float64(0.056941358295944156), + }, + 88: { + Finvc: float64(0.9377288993026223), + Flogc: float64(0.06429439168346107), + }, + 89: { + Finvc: float64(0.9309091073790681), + Flogc: float64(0.0715936354946507), + }, + 90: { + Finvc: float64(0.924187681612722), + Flogc: float64(0.07884010933776153), + }, + 91: { + Finvc: float64(0.9175626765599192), + Flogc: float64(0.08603438905970506), + }, + 92: { + Finvc: float64(0.9110320403624034), + Flogc: float64(0.09317721180013905), + }, + 93: { + Finvc: float64(0.9045935839762024), + Flogc: float64(0.10026951462748457), + }, + 94: { + Finvc: float64(0.8982456375922825), + Flogc: float64(0.10731170956330516), + }, + 95: { + Finvc: float64(0.8919860966782501), + Flogc: float64(0.11430473320717738), + }, + 96: { + Finvc: float64(0.8858131121185129), + Flogc: float64(0.12124928503033061), + }, + 97: { + Finvc: float64(0.879725075760676), + Flogc: float64(0.12814583422959913), + }, + 98: { + Finvc: float64(0.8737201372634685), + Flogc: float64(0.1349951636851756), + }, + 99: { + Finvc: float64(0.8677966405782273), + Flogc: float64(0.1417978768189414), + }, + 100: { + Finvc: float64(0.8619528050060739), + Flogc: float64(0.14855476039031146), + }, + 101: { + Finvc: float64(0.8561872354420692), + Flogc: float64(0.1552661937658968), + }, + 102: { + Finvc: float64(0.8504983927816893), + Flogc: float64(0.16193275688146969), + }, + 103: { + Finvc: float64(0.8448844572790304), + Flogc: float64(0.16855539792220497), + }, + 104: { + Finvc: float64(0.8393442741575965), + Flogc: float64(0.1751343179947753), + }, + 105: { + Finvc: float64(0.8338762249349438), + Flogc: float64(0.1816702989864325), + }, + 106: { + Finvc: float64(0.8284789320557778), + Flogc: float64(0.18816387146023317), + }, + 107: { + Finvc: float64(0.8231510800065832), + Flogc: float64(0.1946155228479256), + }, + 108: { + Finvc: float64(0.8178913903778707), + Flogc: float64(0.20102572579389744), + }, + 109: { + Finvc: float64(0.8126984007245374), + Flogc: float64(0.2073952090795501), + }, + 110: { + Finvc: float64(0.8075710029460227), + Flogc: float64(0.21372429840596396), + }, + 111: { + Finvc: float64(0.8025078881160415), + Flogc: float64(0.2200135945981856), + }, + 112: { + Finvc: float64(0.7975077379364331), + Flogc: float64(0.22626374162859975), + }, + 113: { + Finvc: float64(0.792569604966373), + Flogc: float64(0.23247494747693054), + }, + 114: { + Finvc: float64(0.7876923641254114), + Flogc: float64(0.23864766620658884), + }, + 115: { + Finvc: float64(0.7828746724940998), + Flogc: float64(0.24478265647405806), + }, + 116: { + Finvc: float64(0.7781155388790811), + Flogc: float64(0.25088025827324145), + }, + 117: { + Finvc: float64(0.7734139557869777), + Flogc: float64(0.2569408552510595), + }, + 118: { + Finvc: float64(0.7687687179914933), + Flogc: float64(0.26296511155101143), + }, + 119: { + Finvc: float64(0.7641790698041854), + Flogc: float64(0.2689531327189343), + }, + 120: { + Finvc: float64(0.7596438763692399), + Flogc: float64(0.27490553924610595), + }, + 121: { + Finvc: float64(0.7551621951078668), + Flogc: float64(0.2808227248478943), + }, + 122: { + Finvc: float64(0.7507331780216866), + Flogc: float64(0.286704979267256), + }, + 123: { + Finvc: float64(0.7463557196361751), + Flogc: float64(0.29255295645509705), + }, + 124: { + Finvc: float64(0.7420289364869653), + Flogc: float64(0.2983670386142876), + }, + 125: { + Finvc: float64(0.7377521537065876), + Flogc: float64(0.30414734587282055), + }, + 126: { + Finvc: float64(0.7335242966002608), + Flogc: float64(0.30989455774829366), + }, + 127: { + Finvc: float64(0.729344777457841), + Flogc: float64(0.31560871301871884), + }, + }, + Ftab2: [128]struct { + F__ccgo_align [0]uint32 + Fchi float64 + Fclo float64 + }{ + 0: { + Fchi: float64(0.6894531274426304), + Fclo: float64(2.60290652810535e-17), + }, + 1: { + Fchi: float64(0.6933593811533166), + Fclo: float64(5.1607448519931415e-17), + }, + 2: { + Fchi: float64(0.6972656502972674), + Fclo: float64(5.290672414887869e-17), + }, + 3: { + Fchi: float64(0.7011718886092148), + Fclo: float64(7.801030634806013e-18), + }, + 4: { + Fchi: float64(0.7050781228976939), + Fclo: -Float64FromFloat64(2.471355337688684e-17), + }, + 5: { + Fchi: float64(0.7089843887644558), + Fclo: -Float64FromFloat64(4.6413389636862956e-17), + }, + 6: { + Fchi: float64(0.7128906815542553), + Fclo: float64(3.3387408065940366e-17), + }, + 7: { + Fchi: float64(0.7167968359278303), + Fclo: -Float64FromFloat64(2.6454587338050098e-17), + }, + 8: { + Fchi: float64(0.7207031520563163), + Fclo: float64(2.4284096334522285e-17), + }, + 9: { + Fchi: float64(0.7246093683054673), + Fclo: float64(4.85782435031982e-17), + }, + 10: { + Fchi: float64(0.7285155644718035), + Fclo: -Float64FromFloat64(1.3014776598894487e-17), + }, + 11: { + Fchi: float64(0.7324219036935506), + Fclo: -Float64FromFloat64(1.0402317671225898e-17), + }, + 12: { + Fchi: float64(0.73632811474659), + Fclo: float64(3.078291427467431e-17), + }, + 13: { + Fchi: float64(0.7402343715130797), + Fclo: -Float64FromFloat64(1.4304998976623033e-17), + }, + 14: { + Fchi: float64(0.7441405900738403), + Fclo: -Float64FromFloat64(2.8625955785571303e-17), + }, + 15: { + Fchi: float64(0.7480468324364), + Fclo: float64(5.1609093535635645e-17), + }, + 16: { + Fchi: float64(0.7519531335902885), + Fclo: float64(4.423423949536319e-17), + }, + 17: { + Fchi: float64(0.7558594189116706), + Fclo: -Float64FromFloat64(4.683016762099508e-17), + }, + 18: { + Fchi: float64(0.7597656365502305), + Fclo: float64(4.466742007514772e-17), + }, + 19: { + Fchi: float64(0.7636719350887737), + Fclo: -Float64FromFloat64(4.8134498775190266e-17), + }, + 20: { + Fchi: float64(0.767578087670501), + Fclo: -Float64FromFloat64(4.3371015350542286e-17), + }, + 21: { + Fchi: float64(0.7714844396979536), + Fclo: -Float64FromFloat64(2.515644472251707e-17), + }, + 22: { + Fchi: float64(0.7753905747966752), + Fclo: -Float64FromFloat64(4.163636184961329e-17), + }, + 23: { + Fchi: float64(0.7792968686084766), + Fclo: float64(3.3837161384165165e-17), + }, + 24: { + Fchi: float64(0.783203182701066), + Fclo: float64(4.379206565056758e-17), + }, + 25: { + Fchi: float64(0.7871094109030913), + Fclo: float64(2.7322930976146396e-17), + }, + 26: { + Fchi: float64(0.7910155783031153), + Fclo: -Float64FromFloat64(5.463661225364046e-17), + }, + 27: { + Fchi: float64(0.7949218121071572), + Fclo: -Float64FromFloat64(1.4320502634189868e-17), + }, + 28: { + Fchi: float64(0.7988281031542229), + Fclo: -Float64FromFloat64(4.0766731402809024e-17), + }, + 29: { + Fchi: float64(0.8027343109146796), + Fclo: -Float64FromFloat64(4.0338264352540086e-17), + }, + 30: { + Fchi: float64(0.8066405901480322), + Fclo: float64(1.7241428071650815e-18), + }, + 31: { + Fchi: float64(0.8105469363625933), + Fclo: -Float64FromFloat64(4.5534218930924523e-17), + }, + 32: { + Fchi: float64(0.8144531571720115), + Fclo: float64(1.821216920589142e-17), + }, + 33: { + Fchi: float64(0.8183593894061396), + Fclo: float64(4.9864288025894273e-17), + }, + 34: { + Fchi: float64(0.8222656559018297), + Fclo: float64(4.335990416726689e-17), + }, + 35: { + Fchi: float64(0.8261719308006343), + Fclo: -Float64FromFloat64(5.422001471661127e-17), + }, + 36: { + Fchi: float64(0.830078177803083), + Fclo: -Float64FromFloat64(5.333603728929035e-17), + }, + 37: { + Fchi: float64(0.8339844538076674), + Fclo: -Float64FromFloat64(1.1270648442682386e-17), + }, + 38: { + Fchi: float64(0.8378905498984414), + Fclo: -Float64FromFloat64(3.165126734800398e-17), + }, + 39: { + Fchi: float64(0.8417968420618669), + Fclo: float64(1.1286283062565865e-17), + }, + 40: { + Fchi: float64(0.8457030568173808), + Fclo: float64(5.643595964448442e-18), + }, + 41: { + Fchi: float64(0.8496093725173733), + Fclo: -Float64FromFloat64(2.1687834632368187e-17), + }, + 42: { + Fchi: float64(0.8535155534462677), + Fclo: -Float64FromFloat64(2.2548234217914977e-17), + }, + 43: { + Fchi: float64(0.8574219432077146), + Fclo: float64(4.683260556353139e-17), + }, + 44: { + Fchi: float64(0.8613281129443706), + Fclo: float64(2.5148296884122795e-17), + }, + 45: { + Fchi: float64(0.8652342893532053), + Fclo: -Float64FromFloat64(8.672187570949467e-18), + }, + 46: { + Fchi: float64(0.8691405397938828), + Fclo: -Float64FromFloat64(1.2576268285559751e-17), + }, + 47: { + Fchi: float64(0.8730468608194392), + Fclo: -Float64FromFloat64(2.9930851265148e-17), + }, + 48: { + Fchi: float64(0.8769530685783117), + Fclo: float64(4.814801507681644e-17), + }, + 49: { + Fchi: float64(0.8808593488818101), + Fclo: -Float64FromFloat64(9.10549533611022e-18), + }, + 50: { + Fchi: float64(0.8847655593409667), + Fclo: -Float64FromFloat64(3.512414651620766e-17), + }, + 51: { + Fchi: float64(0.888671840226208), + Fclo: float64(3.555261815374023e-17), + }, + 52: { + Fchi: float64(0.8925780870017613), + Fclo: float64(1.692380503540994e-17), + }, + 53: { + Fchi: float64(0.8964844367374554), + Fclo: -Float64FromFloat64(1.0837881791715702e-17), + }, + 54: { + Fchi: float64(0.9003905608862683), + Fclo: float64(5.2900545724138363e-17), + }, + 55: { + Fchi: float64(0.9042968358682077), + Fclo: float64(5.3330721088784517e-17), + }, + 56: { + Fchi: float64(0.9082031671057441), + Fclo: float64(1.8640040753232978e-17), + }, + 57: { + Fchi: float64(0.9121093993305497), + Fclo: float64(4.467972832054075e-17), + }, + 58: { + Fchi: float64(0.9160155849026457), + Fclo: -Float64FromFloat64(5.216213419585033e-18), + }, + 59: { + Fchi: float64(0.9199219622862499), + Fclo: -Float64FromFloat64(2.7324731032846873e-17), + }, + 60: { + Fchi: float64(0.9238281880717143), + Fclo: -Float64FromFloat64(1.7769263393434193e-17), + }, + 61: { + Fchi: float64(0.9277343012727929), + Fclo: float64(4.943363080817441e-17), + }, + 62: { + Fchi: float64(0.9316407021562788), + Fclo: float64(4.164434042024055e-17), + }, + 63: { + Fchi: float64(0.935546825207466), + Fclo: float64(1.3011820859795741e-17), + }, + 64: { + Fchi: float64(0.9394530312562943), + Fclo: -Float64FromFloat64(2.7332907838481398e-17), + }, + 65: { + Fchi: float64(0.9433593066844669), + Fclo: float64(2.342133170803292e-17), + }, + 66: { + Fchi: float64(0.9472655994038329), + Fclo: float64(1.6478717480487438e-17), + }, + 67: { + Fchi: float64(0.9511718313032721), + Fclo: -Float64FromFloat64(5.19608290131499e-18), + }, + 68: { + Fchi: float64(0.9550781578218178), + Fclo: -Float64FromFloat64(3.5565573220579e-17), + }, + 69: { + Fchi: float64(0.9589843147339043), + Fclo: float64(2.0816772146458738e-17), + }, + 70: { + Fchi: float64(0.9628906735633685), + Fclo: -Float64FromFloat64(3.471962826146841e-18), + }, + 71: { + Fchi: float64(0.9667968893972092), + Fclo: -Float64FromFloat64(3.68646834472642e-17), + }, + 72: { + Fchi: float64(0.9707031054025779), + Fclo: -Float64FromFloat64(3.4674108076868834e-18), + }, + 73: { + Fchi: float64(0.9746094325494931), + Fclo: float64(4.598152624774392e-17), + }, + 74: { + Fchi: float64(0.9785156054582722), + Fclo: float64(4.553145752392568e-17), + }, + 75: { + Fchi: float64(0.9824218687812282), + Fclo: -Float64FromFloat64(7.811259169418978e-18), + }, + 76: { + Fchi: float64(0.9863280690752917), + Fclo: float64(2.0375615178047467e-17), + }, + 77: { + Fchi: float64(0.9902342909546034), + Fclo: -Float64FromFloat64(1.344597043422914e-17), + }, + 78: { + Fchi: float64(0.9941406780264008), + Fclo: float64(1.51853723695054e-17), + }, + 79: { + Fchi: float64(0.9980468598715558), + Fclo: -Float64FromFloat64(1.301926039598001e-17), + }, + 80: { + Fchi: float64(1.0039062067717412), + Fclo: -Float64FromFloat64(4.596120641744973e-17), + }, + 81: { + Fchi: float64(1.0117187035281372), + Fclo: -Float64FromFloat64(8.152405002665349e-17), + }, + 82: { + Fchi: float64(1.0195312424919558), + Fclo: float64(8.239927014757811e-17), + }, + 83: { + Fchi: float64(1.0273437641634193), + Fclo: float64(3.122851005327045e-17), + }, + 84: { + Fchi: float64(1.0351562274561221), + Fclo: -Float64FromFloat64(1.3010212611128995e-17), + }, + 85: { + Fchi: float64(1.0429687539123276), + Fclo: -Float64FromFloat64(5.984116688633458e-17), + }, + 86: { + Fchi: float64(1.0507812561238108), + Fclo: float64(2.860923854822335e-17), + }, + 87: { + Fchi: float64(1.0585937308350133), + Fclo: -Float64FromFloat64(1.9962944508904598e-17), + }, + 88: { + Fchi: float64(1.0664062936992642), + Fclo: float64(5.291469130309099e-17), + }, + 89: { + Fchi: float64(1.0742187309945372), + Fclo: float64(1.0321575006732523e-16), + }, + 90: { + Fchi: float64(1.082031301537134), + Fclo: float64(9.021194373419119e-17), + }, + 91: { + Fchi: float64(1.0898438063644336), + Fclo: float64(5.202798992357953e-17), + }, + 92: { + Fchi: float64(1.0976562356711468), + Fclo: float64(5.898318482500785e-17), + }, + 93: { + Fchi: float64(1.1054688179463226), + Fclo: float64(8.846377690653252e-17), + }, + 94: { + Fchi: float64(1.113281220803328), + Fclo: -Float64FromFloat64(9.529455965212574e-18), + }, + 95: { + Fchi: float64(1.1210937073167315), + Fclo: float64(6.765080709377787e-17), + }, + 96: { + Fchi: float64(1.1289062967338532), + Fclo: float64(1.0929327370933015e-16), + }, + 97: { + Fchi: float64(1.1367187631150848), + Fclo: float64(6.938570551230516e-17), + }, + 98: { + Fchi: float64(1.1445312490244826), + Fclo: float64(1.908841015045148e-17), + }, + 99: { + Fchi: float64(1.1523437096203593), + Fclo: float64(2.7744504138979832e-17), + }, + 100: { + Fchi: float64(1.1601563266482477), + Fclo: -Float64FromFloat64(1.5621964097491672e-17), + }, + 101: { + Fchi: float64(1.1679688257483505), + Fclo: -Float64FromFloat64(6.4191661495975e-17), + }, + 102: { + Fchi: float64(1.1757811754697645), + Fclo: -Float64FromFloat64(4.336465165059268e-17), + }, + 103: { + Fchi: float64(1.183593793665613), + Fclo: -Float64FromFloat64(3.8159292551356396e-17), + }, + 104: { + Fchi: float64(1.1914062331617676), + Fclo: -Float64FromFloat64(2.94933042768015e-17), + }, + 105: { + Fchi: float64(1.1992187450577771), + Fclo: -Float64FromFloat64(6.244142916351348e-17), + }, + 106: { + Fchi: float64(1.2070312971249755), + Fclo: float64(7.458644622627413e-17), + }, + 107: { + Fchi: float64(1.2148438169965134), + Fclo: float64(2.7760519266147807e-17), + }, + 108: { + Fchi: float64(1.222656225220801), + Fclo: -Float64FromFloat64(7.025106921079665e-17), + }, + 109: { + Fchi: float64(1.2304687681290862), + Fclo: float64(3.7292622364618835e-17), + }, + 110: { + Fchi: float64(1.2382812116234925), + Fclo: float64(2.2558949940652082e-17), + }, + 111: { + Fchi: float64(1.2460936706149877), + Fclo: float64(8.499368944400665e-17), + }, + 112: { + Fchi: float64(1.2539063289686938), + Fclo: float64(1.039515474644361e-17), + }, + 113: { + Fchi: float64(1.2617188367227732), + Fclo: float64(3.297262223275499e-17), + }, + 114: { + Fchi: float64(1.2695311590462317), + Fclo: float64(4.509883253594155e-17), + }, + 115: { + Fchi: float64(1.277343660657941), + Fclo: -Float64FromFloat64(7.546987371769545e-17), + }, + 116: { + Fchi: float64(1.2851561882963496), + Fclo: float64(9.454295598818184e-17), + }, + 117: { + Fchi: float64(1.2929686521915196), + Fclo: -Float64FromFloat64(7.28545609119749e-17), + }, + 118: { + Fchi: float64(1.3007813359167737), + Fclo: -Float64FromFloat64(8.934357651462802e-17), + }, + 119: { + Fchi: float64(1.3085938093753886), + Fclo: float64(8.15257059458102e-17), + }, + 120: { + Fchi: float64(1.3164063202609564), + Fclo: float64(6.946341460765881e-18), + }, + 121: { + Fchi: float64(1.3242188320313901), + Fclo: -Float64FromFloat64(7.892731380721676e-17), + }, + 122: { + Fchi: float64(1.3320311786874468), + Fclo: -Float64FromFloat64(4.3384657500713545e-17), + }, + 123: { + Fchi: float64(1.3398436880573092), + Fclo: float64(9.627577954598792e-17), + }, + 124: { + Fchi: float64(1.3476563390295309), + Fclo: float64(4.2492400590204517e-17), + }, + 125: { + Fchi: float64(1.3554687641043626), + Fclo: -Float64FromFloat64(1.0843419551446047e-16), + }, + 126: { + Fchi: float64(1.3632813590971713), + Fclo: -Float64FromFloat64(8.50172782472025e-17), + }, + 127: { + Fchi: float64(1.3710936595522603), + Fclo: -Float64FromFloat64(7.110627206162922e-17), + }, + }, +} + +var X__logf_data = Tlogf_data{ + Ftab: [16]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.33569133332882284), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.2929040563774074), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.2518726580937369), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.21245868807117255), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.17453945183745634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.1380057072319758), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.10275976698545139), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.06871392447020525), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.0357891387398228), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.05204517742929496), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.11081431298787942), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.1652495223695143), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.21687389031699977), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.2659635028121397), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.3127556664073557), + }, + }, + Fln2: float64(0.6931471805599453), + Fpoly: [3]float64{ + 0: -Float64FromFloat64(0.25089342214237154), + 1: float64(0.333456765744066), + 2: -Float64FromFloat64(0.4999997485802103), + }, +} + +var X__optpos int32 + +var Xoptreset int32 + +var X__pow_log_data = Tpow_log_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [7]float64{ + 0: -Float64FromFloat64(0.5), + 1: Float64FromFloat64(0.3333333333333339) * float64(-Int32FromInt32(2)), + 2: -Float64FromFloat64(0.25000000000000033) * float64(-Int32FromInt32(2)), + 3: Float64FromFloat64(0.1999999998830994) * Float64FromInt32(4), + 4: -Float64FromFloat64(0.16666666658719348) * Float64FromInt32(4), + 5: Float64FromFloat64(0.14286370355743763) * float64(-Int32FromInt32(8)), + 6: -Float64FromFloat64(0.12500519079594427) * float64(-Int32FromInt32(8)), + }, + Ftab: [128]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + }{ + 0: { + Finvc: float64(1.4140625), + Flogc: -Float64FromFloat64(0.3464667673462145), + Flogctail: float64(5.929407345889625e-15), + }, + 1: { + Finvc: float64(1.40625), + Flogc: -Float64FromFloat64(0.34092658697056777), + Flogctail: -Float64FromFloat64(2.544157440035963e-14), + }, + 2: { + Finvc: float64(1.3984375), + Flogc: -Float64FromFloat64(0.3353555419211034), + Flogctail: -Float64FromFloat64(3.443525940775045e-14), + }, + 3: { + Finvc: float64(1.390625), + Flogc: -Float64FromFloat64(0.3297532863724655), + Flogctail: -Float64FromFloat64(2.500123826022799e-15), + }, + 4: { + Finvc: float64(1.3828125), + Flogc: -Float64FromFloat64(0.32411946865420305), + Flogctail: -Float64FromFloat64(8.929337133850617e-15), + }, + 5: { + Finvc: float64(1.375), + Flogc: -Float64FromFloat64(0.31845373111855224), + Flogctail: float64(1.7625431312172662e-14), + }, + 6: { + Finvc: float64(1.3671875), + Flogc: -Float64FromFloat64(0.31275571000389846), + Flogctail: float64(1.5688303180062087e-15), + }, + 7: { + Finvc: float64(1.359375), + Flogc: -Float64FromFloat64(0.3070250352949415), + Flogctail: float64(2.9655274673691784e-14), + }, + 8: { + Finvc: float64(1.3515625), + Flogc: -Float64FromFloat64(0.3012613305781997), + Flogctail: float64(3.7923164802093147e-14), + }, + 9: { + Finvc: float64(1.34375), + Flogc: -Float64FromFloat64(0.2954642128938758), + Flogctail: float64(3.993416384387844e-14), + }, + 10: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 11: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 12: { + Finvc: float64(1.328125), + Flogc: -Float64FromFloat64(0.28376817313062475), + Flogctail: -Float64FromFloat64(1.9852665484979036e-14), + }, + 13: { + Finvc: float64(1.3203125), + Flogc: -Float64FromFloat64(0.27786845100342816), + Flogctail: -Float64FromFloat64(2.814323765595281e-14), + }, + 14: { + Finvc: float64(1.3125), + Flogc: -Float64FromFloat64(0.2719337154836694), + Flogctail: float64(2.7643769993528702e-14), + }, + 15: { + Finvc: float64(1.3046875), + Flogc: -Float64FromFloat64(0.2659635484970977), + Flogctail: -Float64FromFloat64(4.025092402293806e-14), + }, + 16: { + Finvc: float64(1.296875), + Flogc: -Float64FromFloat64(0.25995752443691345), + Flogctail: -Float64FromFloat64(1.2621729398885316e-14), + }, + 17: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 18: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 19: { + Finvc: float64(1.28125), + Flogc: -Float64FromFloat64(0.2478361639045943), + Flogctail: float64(1.3029797173308663e-14), + }, + 20: { + Finvc: float64(1.2734375), + Flogc: -Float64FromFloat64(0.2417199368871934), + Flogctail: float64(4.8230289429940886e-14), + }, + 21: { + Finvc: float64(1.265625), + Flogc: -Float64FromFloat64(0.23556607131274632), + Flogctail: -Float64FromFloat64(2.0592242769647135e-14), + }, + 22: { + Finvc: float64(1.2578125), + Flogc: -Float64FromFloat64(0.22937410106487732), + Flogctail: float64(3.149265065191484e-14), + }, + 23: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 24: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 25: { + Finvc: float64(1.2421875), + Flogc: -Float64FromFloat64(0.21687393830063684), + Flogctail: float64(2.2477465222466186e-14), + }, + 26: { + Finvc: float64(1.234375), + Flogc: -Float64FromFloat64(0.21056476910735), + Flogctail: float64(3.6507188831790577e-16), + }, + 27: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 28: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 29: { + Finvc: float64(1.21875), + Flogc: -Float64FromFloat64(0.19782574332987224), + Flogctail: -Float64FromFloat64(4.7641388950792196e-14), + }, + 30: { + Finvc: float64(1.2109375), + Flogc: -Float64FromFloat64(0.19139485299967873), + Flogctail: float64(4.9278276214647115e-14), + }, + 31: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 32: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 33: { + Finvc: float64(1.1953125), + Flogc: -Float64FromFloat64(0.1784076574728033), + Flogctail: -Float64FromFloat64(1.5003333854266542e-14), + }, + 34: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 35: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 36: { + Finvc: float64(1.1796875), + Flogc: -Float64FromFloat64(0.1652495728952772), + Flogctail: -Float64FromFloat64(2.99659267292569e-14), + }, + 37: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 38: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 39: { + Finvc: float64(1.1640625), + Flogc: -Float64FromFloat64(0.15191604202584585), + Flogctail: float64(3.879296723063646e-15), + }, + 40: { + Finvc: float64(1.15625), + Flogc: -Float64FromFloat64(0.1451820098444614), + Flogctail: -Float64FromFloat64(3.6506824353335045e-14), + }, + 41: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 42: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 43: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 44: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 45: { + Finvc: float64(1.1328125), + Flogc: -Float64FromFloat64(0.12470347850091912), + Flogctail: -Float64FromFloat64(3.811763084710266e-14), + }, + 46: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 47: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 48: { + Finvc: float64(1.1171875), + Flogc: -Float64FromFloat64(0.11081436634026431), + Flogctail: -Float64FromFloat64(2.5799991283069902e-14), + }, + 49: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 50: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 51: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 52: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 53: { + Finvc: float64(1.09375), + Flogc: -Float64FromFloat64(0.089612158689647), + Flogctail: -Float64FromFloat64(4.012913552726574e-14), + }, + 54: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 55: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 56: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 57: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 58: { + Finvc: float64(1.0703125), + Flogc: -Float64FromFloat64(0.06795066190852594), + Flogctail: float64(1.8195060030168815e-14), + }, + 59: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 60: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 61: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 62: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 63: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 64: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 65: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 66: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 67: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 68: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 69: { + Finvc: float64(1.0234375), + Flogc: -Float64FromFloat64(0.023167059281490765), + Flogctail: -Float64FromFloat64(4.361324067851568e-14), + }, + 70: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 71: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 72: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 73: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 74: { + Finvc: float64(1), + }, + 75: { + Finvc: float64(1), + }, + 76: { + Finvc: float64(0.9921875), + Flogc: float64(0.007843177461040796), + Flogctail: -Float64FromFloat64(1.4902732911301337e-14), + }, + 77: { + Finvc: float64(0.984375), + Flogc: float64(0.01574835696817445), + Flogctail: -Float64FromFloat64(3.527980389655325e-14), + }, + 78: { + Finvc: float64(0.9765625), + Flogc: float64(0.023716526617363343), + Flogctail: -Float64FromFloat64(4.730054772033249e-14), + }, + 79: { + Finvc: float64(0.96875), + Flogc: float64(0.03174869831457272), + Flogctail: float64(7.580310369375161e-15), + }, + 80: { + Finvc: float64(0.9609375), + Flogc: float64(0.039845908547249564), + Flogctail: -Float64FromFloat64(4.9893776716773285e-14), + }, + 81: { + Finvc: float64(0.953125), + Flogc: float64(0.048009219186383234), + Flogctail: -Float64FromFloat64(2.262629393030674e-14), + }, + 82: { + Finvc: float64(0.9453125), + Flogc: float64(0.056239718322899535), + Flogctail: -Float64FromFloat64(2.345674491018699e-14), + }, + 83: { + Finvc: float64(0.94140625), + Flogc: float64(0.06038051098892083), + Flogctail: -Float64FromFloat64(1.3352588834854848e-14), + }, + 84: { + Finvc: float64(0.93359375), + Flogc: float64(0.06871389254808946), + Flogctail: -Float64FromFloat64(3.765296820388875e-14), + }, + 85: { + Finvc: float64(0.92578125), + Flogc: float64(0.07711730334438016), + Flogctail: float64(5.1128335719851986e-14), + }, + 86: { + Finvc: float64(0.91796875), + Flogc: float64(0.08559193033545398), + Flogctail: -Float64FromFloat64(5.046674438470119e-14), + }, + 87: { + Finvc: float64(0.9140625), + Flogc: float64(0.08985632912185793), + Flogctail: float64(3.1218748807418837e-15), + }, + 88: { + Finvc: float64(0.90625), + Flogc: float64(0.09844007281321865), + Flogctail: float64(3.3871241029241416e-14), + }, + 89: { + Finvc: float64(0.8984375), + Flogc: float64(0.10709813555638448), + Flogctail: -Float64FromFloat64(1.7376727386423858e-14), + }, + 90: { + Finvc: float64(0.89453125), + Flogc: float64(0.11145544092528326), + Flogctail: float64(3.957125899799804e-14), + }, + 91: { + Finvc: float64(0.88671875), + Flogc: float64(0.12022742699821265), + Flogctail: -Float64FromFloat64(5.2849453521890294e-14), + }, + 92: { + Finvc: float64(0.8828125), + Flogc: float64(0.12464244520731427), + Flogctail: -Float64FromFloat64(3.767012502308738e-14), + }, + 93: { + Finvc: float64(0.875), + Flogc: float64(0.13353139262449076), + Flogctail: float64(3.1859736349078334e-14), + }, + 94: { + Finvc: float64(0.87109375), + Flogc: float64(0.13800567301939282), + Flogctail: float64(5.0900642926060466e-14), + }, + 95: { + Finvc: float64(0.86328125), + Flogc: float64(0.14701474296180095), + Flogctail: float64(8.710783796122478e-15), + }, + 96: { + Finvc: float64(0.859375), + Flogc: float64(0.15154989812720032), + Flogctail: float64(6.157896229122976e-16), + }, + 97: { + Finvc: float64(0.8515625), + Flogc: float64(0.16068238169043525), + Flogctail: float64(3.821577743916796e-14), + }, + 98: { + Finvc: float64(0.84765625), + Flogc: float64(0.16528009093906348), + Flogctail: float64(3.9440046718453496e-14), + }, + 99: { + Finvc: float64(0.83984375), + Flogc: float64(0.17453941635187675), + Flogctail: float64(2.2924522154618074e-14), + }, + 100: { + Finvc: float64(0.8359375), + Flogc: float64(0.17920142945774842), + Flogctail: -Float64FromFloat64(3.742530094732263e-14), + }, + 101: { + Finvc: float64(0.83203125), + Flogc: float64(0.18388527877016259), + Flogctail: -Float64FromFloat64(2.5223102140407338e-14), + }, + 102: { + Finvc: float64(0.82421875), + Flogc: float64(0.1933193110035063), + Flogctail: -Float64FromFloat64(1.0320443688698849e-14), + }, + 103: { + Finvc: float64(0.8203125), + Flogc: float64(0.19806991376208316), + Flogctail: float64(1.0634128304268335e-14), + }, + 104: { + Finvc: float64(0.8125), + Flogc: float64(0.20763936477828793), + Flogctail: -Float64FromFloat64(4.3425422595242564e-14), + }, + 105: { + Finvc: float64(0.80859375), + Flogc: float64(0.21245865121420593), + Flogctail: -Float64FromFloat64(1.2527395755711364e-14), + }, + 106: { + Finvc: float64(0.8046875), + Flogc: float64(0.21730127569003344), + Flogctail: -Float64FromFloat64(5.204008743405884e-14), + }, + 107: { + Finvc: float64(0.80078125), + Flogc: float64(0.22216746534115828), + Flogctail: -Float64FromFloat64(3.979844515951702e-15), + }, + 108: { + Finvc: float64(0.79296875), + Flogc: float64(0.2319714654378231), + Flogctail: -Float64FromFloat64(4.7955860343296286e-14), + }, + 109: { + Finvc: float64(0.7890625), + Flogc: float64(0.2369097470783572), + Flogctail: float64(5.015686013791602e-16), + }, + 110: { + Finvc: float64(0.78515625), + Flogc: float64(0.24187253642048745), + Flogctail: -Float64FromFloat64(7.252318953240293e-16), + }, + 111: { + Finvc: float64(0.78125), + Flogc: float64(0.2468600779315011), + Flogctail: float64(2.4688324156011588e-14), + }, + 112: { + Finvc: float64(0.7734375), + Flogc: float64(0.2569104137850218), + Flogctail: float64(5.465121253624792e-15), + }, + 113: { + Finvc: float64(0.76953125), + Flogc: float64(0.26197371574153294), + Flogctail: float64(4.102651071698446e-14), + }, + 114: { + Finvc: float64(0.765625), + Flogc: float64(0.2670627852490952), + Flogctail: -Float64FromFloat64(4.996736502345936e-14), + }, + 115: { + Finvc: float64(0.76171875), + Flogc: float64(0.27217788591576664), + Flogctail: float64(4.903580708156347e-14), + }, + 116: { + Finvc: float64(0.7578125), + Flogc: float64(0.27731928541618345), + Flogctail: float64(5.089628039500759e-14), + }, + 117: { + Finvc: float64(0.75390625), + Flogc: float64(0.28248725557466514), + Flogctail: float64(1.1782016386565151e-14), + }, + 118: { + Finvc: float64(0.74609375), + Flogc: float64(0.29290401643288533), + Flogctail: float64(4.727452940514406e-14), + }, + 119: { + Finvc: float64(0.7421875), + Flogc: float64(0.29815337231912054), + Flogctail: -Float64FromFloat64(4.4204083338755686e-14), + }, + 120: { + Finvc: float64(0.73828125), + Flogc: float64(0.3034304294199046), + Flogctail: float64(1.548345993498083e-14), + }, + 121: { + Finvc: float64(0.734375), + Flogc: float64(0.30873548164959175), + Flogctail: float64(2.1522127491642888e-14), + }, + 122: { + Finvc: float64(0.73046875), + Flogc: float64(0.3140688276249648), + Flogctail: float64(1.1054030169005386e-14), + }, + 123: { + Finvc: float64(0.7265625), + Flogc: float64(0.31943077076641657), + Flogctail: -Float64FromFloat64(5.534326352070679e-14), + }, + 124: { + Finvc: float64(0.72265625), + Flogc: float64(0.3248216194012912), + Flogctail: -Float64FromFloat64(5.351646604259541e-14), + }, + 125: { + Finvc: float64(0.71875), + Flogc: float64(0.33024168687052224), + Flogctail: float64(5.4612144489920215e-14), + }, + 126: { + Finvc: float64(0.71484375), + Flogc: float64(0.3356912916381134), + Flogctail: float64(2.8136969901227338e-14), + }, + 127: { + Finvc: float64(0.7109375), + Flogc: float64(0.3411707574027787), + Flogctail: -Float64FromFloat64(1.156568624616423e-14), + }, + }, +} + +var X__powf_log2_data = Tpowf_log2_data{ + Ftab: [16]struct { + F__ccgo_align [0]uint32 + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673) * float64(Int32FromInt32(1)<> int32(32)) + *(*int32)(unsafe.Pointer(expt)) = int32(hx>>Int32FromInt32(20) - uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1023)) + _k) + v1 = uint64(hx&Uint32FromInt32(0xfffff)|uint32((Int32FromInt32(0x3ff)+Int32FromInt32(1023))<= ln(DBL_MAX)) +// * where care is needed to avoid overflow. +// * +// * The present implementation is narrowly tailored for our hyperbolic and +// * exponential functions. We assume expt is small (0 or -1), and the caller +// * has filtered out very large x, for which overflow would be inevitable. +// */ +func X__ldexp_cexp(tls *TLS, z complex128, expt int32) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v expt=%v, (%v:)", tls, z, expt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float64 + var half_expt int32 + var v1, v2 Tuint64_t + var v3 [2]float64 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_exp(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + /* + * Arrange so that scale1 * scale2 == 2**expt. We use this to + * compensate for scalbn being horrendously slow. + */ + half_expt = expt / int32(2) + v1 = uint64((Int32FromInt32(0x3ff)+half_expt)<>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(127)) + _k1) + v1 = hx&uint32(0x7fffff) | uint32((Int32FromInt32(0x7f)+Int32FromInt32(127))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float32 + var half_expt int32 + var v1, v2 Tuint32_t + var v3 [2]float32 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_expf(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + half_expt = expt / int32(2) + v1 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale1 = *(*float32)(unsafe.Pointer(&v1)) + half_expt = expt - half_expt + v2 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale2 = *(*float32)(unsafe.Pointer(&v2)) + v3 = [2]float32{ + 0: Xcosf(tls, y) * exp_x * scale1 * scale2, + 1: Xsinf(tls, y) * exp_x * scale1 * scale2, + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +func Xcabs(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypot(tls, Float64FromComplex128(z), +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypotf(tls, Float32FromComplex64(z), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcabs(tls, Complex128FromComplex128(z)) +} + +const M_PI_21 = 1.5707963267948966 + +// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 + +/* acos(z) = pi/2 - asin(z) */ + +func Xcacos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + z = Xcasin(tls, z) + v1 = [2]float64{ + 0: float64(1.5707963267948966) - Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +var _float_pi_2 = float32(1.5707963267948966) + +func Xcacosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + z = Xcasinf(tls, z) + v1 = [2]float32{ + 0: _float_pi_2 - Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +const M_PI_22 = 0 + +/* acosh(z) = i acos(z) */ + +func Xcacosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint64 + var v3, v4 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float64)(unsafe.Pointer(bp)) = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(63)) + z = Xcacos(tls, z) + if zineg != 0 { + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint32 + var v3, v4 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(31)) + z = Xcacosf(tls, z) + if zineg != 0 { + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacosh(tls, Complex128FromComplex128(z))) +} + +func Xcacosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacos(tls, Complex128FromComplex128(z))) +} + +func Xcarg(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2(tls, +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], Float64FromComplex128(z)) +} + +func Xcargf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2f(tls, +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], Float32FromComplex64(z)) +} + +func Xcargl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcarg(tls, Complex128FromComplex128(z)) +} + +// FIXME + +/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ + +func Xcasin(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex128 + var x, y float64 + var v1, v2, v3 [2]float64 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float64{ + 0: float64(1) - (x-y)*(x+y), + 1: -Float64FromFloat64(2) * x * y, + } + w = *(*complex128)(unsafe.Pointer(&v1)) + v2 = [2]float64{ + 0: -y, + 1: x, + } + r = Xclog(tls, *(*complex128)(unsafe.Pointer(&v2))+Xcsqrt(tls, w)) + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float64FromComplex128(r), + } + return *(*complex128)(unsafe.Pointer(&v3)) +} + +// FIXME + +func Xcasinf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex64 + var x, y float32 + var v1, v2, v3 [2]float32 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float32{ + 0: float32(Float64FromFloat64(1) - float64((x-y)*(x+y))), + 1: float32(-Float64FromFloat64(2) * float64(x) * float64(y)), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + v2 = [2]float32{ + 0: -y, + 1: x, + } + r = Xclogf(tls, *(*complex64)(unsafe.Pointer(&v2))+Xcsqrtf(tls, w)) + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float32FromComplex64(r), + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +/* asinh(z) = -i asin(i z) */ + +func Xcasinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcasin(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcasinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcasinf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcasinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasinh(tls, Complex128FromComplex128(z))) +} + +func Xcasinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasin(tls, Complex128FromComplex128(z))) +} + +const MAXNUM = 0 +const M_PI1 = 3.141592653589793 + +var _DP1 = float64(3.141592651605606) +var _DP2 = float64(1.9841871479187034e-09) +var _DP3 = float64(1.1442377452219664e-17) + +func __redupi(tls *TLS, x float64) (r float64) { + var i int64 + var t float64 + _, _ = i, t + t = x / float64(3.141592653589793) + if t >= float64(0) { + t += float64(0.5) + } else { + t -= float64(0.5) + } + i = int64(t) /* the multiple */ + t = float64(i) + t = x - t*_DP1 - t*_DP2 - t*_DP3 + return t +} + +func Xcatan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float64 + var w complex128 + var v1 [2]float64 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = float64(1) - x2 - y*y + t = float64(0.5) * Xatan2(tls, float64(2)*x, a) + w = Complex128FromFloat64(__redupi(tls, t)) + t = y - float64(1) + a = x2 + t*t + t = y + float64(1) + a = (x2 + t*t) / a + v1 = [2]float64{ + 0: Float64FromComplex128(w), + 1: float64(0.25) * Xlog(tls, a), + } + w = *(*complex128)(unsafe.Pointer(&v1)) + return w +} + +const MAXNUMF = 0 + +var _DP11 = float64(3.140625) +var _DP21 = float64(0.0009675025939941406) +var _DP31 = float64(1.5099579909783765e-07) + +var _float_pi = float32(3.141592653589793) + +func __redupif(tls *TLS, xx float32) (r float32) { + var i int64 + var t, x float32 + _, _, _ = i, t, x + x = xx + t = x / _float_pi + if t >= Float32FromFloat32(0) { + t += Float32FromFloat32(0.5) + } else { + t -= Float32FromFloat32(0.5) + } + i = int64(t) /* the multiple */ + t = float32(i) + t = float32(float64(x) - float64(t)*_DP11 - float64(t)*_DP21 - float64(t)*_DP31) + return t +} + +func Xcatanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float32 + var w complex64 + var v1 [2]float32 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = Float32FromFloat32(1) - x2 - y*y + t = Float32FromFloat32(0.5) * Xatan2f(tls, Float32FromFloat32(2)*x, a) + w = Complex64FromFloat32(__redupif(tls, t)) + t = y - Float32FromFloat32(1) + a = x2 + t*t + t = y + Float32FromFloat32(1) + a = (x2 + t*t) / a + v1 = [2]float32{ + 0: Float32FromComplex64(w), + 1: Float32FromFloat32(0.25) * Xlogf(tls, a), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + return w +} + +const M_PI2 = 0 + +/* atanh = -i atan(i z) */ + +func Xcatanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcatan(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcatanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcatanf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcatanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatanh(tls, Complex128FromComplex128(z))) +} + +func Xcatanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatan(tls, Complex128FromComplex128(z))) +} + +/* cos(z) = cosh(i z) */ + +func Xccos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return Xccosh(tls, *(*complex128)(unsafe.Pointer(&v1))) +} + +func Xccosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return Xccoshf(tls, *(*complex64)(unsafe.Pointer(&v1))) +} + +var _huge = float64(8.98846567431158e+307) + +func Xccosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xcosh(tls, x), + 1: x * y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xcosh(tls, x) * Xcos(tls, y), + 1: Xsinh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: h * Xcos(tls, y), + 1: Xcopysign(tls, h, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] * Xcopysign(tls, Float64FromInt32(1), x), + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge * x + v6 = [2]float64{ + 0: h * h * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: y - y, + 1: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. + * + * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. + * The sign of 0 in the result is unspecified. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), x) * y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), (x+x)*y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * cosh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * cosh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * cosh(+-Inf + I NaN) = +Inf + I d(NaN). + * + * cosh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * x * Xcos(tls, y), + 1: x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * cosh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * cosh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge1 = float32(1.7014118346046923e+38) + +func Xccoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xcoshf(tls, x), + 1: x * y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xcoshf(tls, x) * Xcosf(tls, y), + 1: Xsinhf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: Xcopysignf(tls, h, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] * Xcopysignf(tls, Float32FromInt32(1), x), + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge1 * x + v6 = [2]float32{ + 0: h * h * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: y - y, + 1: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), x) * y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), (x+x)*y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * x * Xcosf(tls, y), + 1: x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xccoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccosh(tls, Complex128FromComplex128(z))) +} + +func Xccosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccos(tls, Complex128FromComplex128(z))) +} + +var _exp_ovfl = uint32(0x40862e42) /* high bits of MAX_EXP * ln2 ~= 710 */ +var _cexp_ovfl = uint32(0x4096b8e4) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexp(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var exp_x, x, y float64 + var hx, hy, lx, ly Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, exp_x, hx, hy, lx, ly, x, y, v1, v2, v3, v4, v5, v6 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = uint32(__u >> int32(32)) + ly = uint32(__u) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy|ly == uint32(0) { + v1 = [2]float64{ + 0: Xexp(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff)|lx == uint32(0) { + v2 = [2]float64{ + 0: Xcos(tls, y), + 1: Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7ff00000) { + if lx != uint32(0) || hx&uint32(0x7fffffff) != uint32(0x7ff00000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float64{ + 0: y - y, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float64{} + return *(*complex128)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float64{ + 0: x, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl && hx <= _cexp_ovfl { + /* + * x is between 709.7 and 1454.3, so we must scale to avoid + * overflow in exp(x). + */ + return X__ldexp_cexp(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexp(tls, x) + v6 = [2]float64{ + 0: exp_x * Xcos(tls, y), + 1: exp_x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + return r +} + +var _exp_ovfl1 = uint32(0x42b17218) /* MAX_EXP * ln2 ~= 88.722839355 */ +var _cexp_ovfl1 = uint32(0x43400074) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexpf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var exp_x, x, y float32 + var hx, hy Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float32 + _, _, _, _, _, _, _, _, _, _, _ = exp_x, hx, hy, x, y, v1, v2, v3, v4, v5, v6 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hy = *(*Tuint32_t)(unsafe.Pointer(&y)) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy == uint32(0) { + v1 = [2]float32{ + 0: Xexpf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff) == uint32(0) { + v2 = [2]float32{ + 0: Xcosf(tls, y), + 1: Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7f800000) { + if hx&uint32(0x7fffffff) != uint32(0x7f800000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float32{ + 0: y - y, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float32{} + return *(*complex64)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float32{ + 0: x, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl1 && hx <= _cexp_ovfl1 { + /* + * x is between 88.7 and 192, so we must scale to avoid + * overflow in expf(x). + */ + return X__ldexp_cexpf(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexpf(tls, x) + v6 = [2]float32{ + 0: exp_x * Xcosf(tls, y), + 1: exp_x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcexpl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcexp(tls, Complex128FromComplex128(z))) +} + +func Xcimag(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +// FIXME + +/* log(z) = log(|z|) + i arg(z) */ + +func Xclog(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float64 + var v1 [2]float64 + _, _, _ = phi, r, v1 + r = Xcabs(tls, z) + phi = Xcarg(tls, z) + v1 = [2]float64{ + 0: Xlog(tls, r), + 1: phi, + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +func Xclogf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float32 + var v1 [2]float32 + _, _, _ = phi, r, v1 + r = Xcabsf(tls, z) + phi = Xcargf(tls, z) + v1 = [2]float32{ + 0: Xlogf(tls, r), + 1: phi, + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xclogl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xclog(tls, Complex128FromComplex128(z))) +} + +func Xconj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +func Xconjf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xconjl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ + +func Xcpow(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexp(tls, c*Xclog(tls, z)) +} + +func Xcpowf(tls *TLS, z complex64, c complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexpf(tls, c*Xclogf(tls, z)) +} + +func Xcpowl(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcpow(tls, Complex128FromComplex128(z), Complex128FromComplex128(c))) +} + +func Xcproj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 bool + var v6 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = Float64FromComplex128(z) + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 bool + var v6 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = Float32FromComplex64(z) + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) == uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v6 = [2]float32{ + 0: X__builtin_inff(tls), + 1: Xcopysignf(tls, float32(0), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return z +} + +func Xcprojl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcproj(tls, Complex128FromComplex128(z))) +} + +func Xcreal(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +func Xcrealf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float32FromComplex64(z) +} + +func Xcreall(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +/* sin(z) = -i sinh(i z) */ + +func Xcsin(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcsinh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcsinf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcsinhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +var _huge2 = float64(8.98846567431158e+307) + +func Xcsinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xsinh(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xsinh(tls, x) * Xcos(tls, y), + 1: Xcosh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: Xcopysign(tls, h, x) * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z) * Xcopysign(tls, Float64FromInt32(1), x), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge2 * x + v6 = [2]float64{ + 0: h * Xcos(tls, y), + 1: h * h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * sinh(+-Inf +- I 0) = +-Inf + I +-0. + * + * sinh(NaN +- I 0) = d(NaN) + I +-0. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x, + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x, + 1: Xcopysign(tls, Float64FromInt32(0), y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * sinh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * sinh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). + * The sign of Inf in the result is unspecified. Choice = normally + * the same as d(NaN). + * + * sinh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * Xcos(tls, y), + 1: float64(X__builtin_inff(tls)) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * sinh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * sinh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge3 = float32(1.7014118346046923e+38) + +func Xcsinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xsinhf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xsinhf(tls, x) * Xcosf(tls, y), + 1: Xcoshf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: Xcopysignf(tls, h, x) * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z) * Xcopysignf(tls, Float32FromInt32(1), x), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge3 * x + v6 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: h * h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x, + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * Xcosf(tls, y), + 1: X__builtin_inff(tls) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xcsinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsinh(tls, Complex128FromComplex128(z))) +} + +func Xcsinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsin(tls, Complex128FromComplex128(z))) +} + +const THRESH = 7.446288774449766e+307 + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ + +func Xcsqrt(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b, t float64 + var result complex128 + var scale int32 + var v1, v12, v13, v14, v15, v4, v7 [2]float64 + var v10, v2, v5, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, result, scale, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float64FromComplex128(z) + b = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex128FromInt32(0) { + v1 = [2]float64{ + 1: b, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + *(*float64)(unsafe.Pointer(bp)) = b + v2 = *(*uint64)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + v12 = [2]float64{ + 0: Xfabs(tls, b-b), + 1: Xcopysign(tls, a, b), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float64{ + 0: a, + 1: Xcopysign(tls, b-b, b), + } + return *(*complex128)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* Scale to avoid overflow. */ + if Xfabs(tls, a) >= float64(7.446288774449766e+307) || Xfabs(tls, b) >= float64(7.446288774449766e+307) { + a *= float64(0.25) + b *= float64(0.25) + scale = int32(1) + } else { + scale = 0 + } + /* Algorithm 312, CACM vol 10, Oct 1967. */ + if a >= Float64FromInt32(0) { + t = Xsqrt(tls, (a+Xhypot(tls, a, b))*float64(0.5)) + v14 = [2]float64{ + 0: t, + 1: b / (Float64FromInt32(2) * t), + } + result = *(*complex128)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (-a+Xhypot(tls, a, b))*float64(0.5)) + v15 = [2]float64{ + 0: Xfabs(tls, b) / (Float64FromInt32(2) * t), + 1: Xcopysign(tls, t, b), + } + result = *(*complex128)(unsafe.Pointer(&v15)) + } + /* Rescale. */ + if scale != 0 { + result *= Complex128FromInt32(2) + } + return result +} + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +func Xcsqrtf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b float32 + var t float64 + var v1, v12, v13, v14, v15, v4, v7 [2]float32 + var v10, v2, v5, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float32FromComplex64(z) + b = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex64FromInt32(0) { + v1 = [2]float32{ + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + *(*float32)(unsafe.Pointer(bp)) = b + v2 = *(*uint32)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v4 = [2]float32{ + 0: X__builtin_inff(tls), + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = a + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + if BoolInt32(v5&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + t = float64((b - b) / (b - b)) /* raise invalid if b is not a NaN */ + v7 = [2]float32{ + 0: a, + 1: float32(t), + } + return *(*complex64)(unsafe.Pointer(&v7)) /* return NaN + NaN i */ + } + *(*float32)(unsafe.Pointer(bp)) = a + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if BoolInt32(v8&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + /* + * csqrtf(inf + NaN i) = inf + NaN i + * csqrtf(inf + y i) = inf + 0 i + * csqrtf(-inf + NaN i) = NaN +- inf i + * csqrtf(-inf + y i) = 0 + inf i + */ + *(*float32)(unsafe.Pointer(bp)) = a + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v12 = [2]float32{ + 0: Xfabsf(tls, b-b), + 1: Xcopysignf(tls, a, b), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float32{ + 0: a, + 1: Xcopysignf(tls, b-b, b), + } + return *(*complex64)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* + * We compute t in double precision to avoid overflow and to + * provide correct rounding in nearly all cases. + * This is Algorithm 312, CACM vol 10, Oct 1967. + */ + if a >= Float32FromInt32(0) { + t = Xsqrt(tls, (float64(a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v14 = [2]float32{ + 0: float32(t), + 1: float32(float64(b) / (Float64FromFloat64(2) * t)), + } + return *(*complex64)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (float64(-a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v15 = [2]float32{ + 0: float32(float64(Xfabsf(tls, b)) / (Float64FromFloat64(2) * t)), + 1: Xcopysignf(tls, float32(t), b), + } + return *(*complex64)(unsafe.Pointer(&v15)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcsqrtl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsqrt(tls, Complex128FromComplex128(z))) +} + +/* tan(z) = -i tanh(i z) */ + +func Xctan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xctanh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xctanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xctanhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xctanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, v3 Tuint64_t + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float64 + var hx, ix, lx Tuint32_t + var v1, v10, v12, v13, v4 [2]float64 + var v6, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, beta, denom, exp_mx, hx, ix, lx, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + ix = hx & uint32(0x7fffffff) + /* + * ctanh(NaN + i 0) = NaN + i 0 + * + * ctanh(NaN + i y) = NaN + i NaN for y != 0 + * + * The imaginary part has the sign of x*sin(2*y), but there's no + * special effort to get this right. + * + * ctanh(+-Inf +- i Inf) = +-1 +- 0 + * + * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite + * + * The imaginary part of the sign is unspecified. This special + * case is only needed to avoid a spurious invalid exception when + * y is infinite. + */ + if ix >= uint32(0x7ff00000) { + if ix&uint32(0xfffff)|lx != 0 { /* x is NaN */ + if y == Float64FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float64{ + 0: x, + 1: v2, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + v3 = uint64(hx-Uint32FromInt32(0x40000000))<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)<= uint32(0x40360000) { /* x >= 22 */ + exp_mx = Xexp(tls, -Xfabs(tls, x)) + v12 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(1), x), + 1: Float64FromInt32(4) * Xsin(tls, y) * Xcos(tls, y) * exp_mx * exp_mx, + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* Kahan's algorithm */ + t = Xtan(tls, y) + beta = float64(1) + t*t /* = 1 / cos^2(y) */ + s = Xsinh(tls, x) + rho = Xsqrt(tls, Float64FromInt32(1)+s*s) /* = cosh(x) */ + denom = Float64FromInt32(1) + beta*s*s + v13 = [2]float64{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +func Xctanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float32 + var hx, ix, v3 Tuint32_t + var v1, v10, v12, v13, v4 [2]float32 + var v6, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = beta, denom, exp_mx, hx, ix, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + if ix&uint32(0x7fffff) != 0 { + if y == Float32FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float32{ + 0: x, + 1: v2, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + v3 = hx - uint32(0x40000000) + x = *(*float32)(unsafe.Pointer(&v3)) + *(*float32)(unsafe.Pointer(bp)) = y + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 + _7: + if BoolInt32(v6&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v5 = y + } else { + v5 = Xsinf(tls, y) * Xcosf(tls, y) + } + v4 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), v5), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = y + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if !(BoolInt32(v8&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if ix != 0 { + v11 = y - y + } else { + v11 = x + } + v10 = [2]float32{ + 0: v11, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= uint32(0x41300000) { /* x >= 11 */ + exp_mx = Xexpf(tls, -Xfabsf(tls, x)) + v12 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(1), x), + 1: Float32FromInt32(4) * Xsinf(tls, y) * Xcosf(tls, y) * exp_mx * exp_mx, + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + t = Xtanf(tls, y) + beta = float32(float64(1) + float64(t*t)) + s = Xsinhf(tls, x) + rho = Xsqrtf(tls, Float32FromInt32(1)+s*s) + denom = Float32FromInt32(1) + beta*s*s + v13 = [2]float32{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xctanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctanh(tls, Complex128FromComplex128(z))) +} + +func Xctanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctan(tls, Complex128FromComplex128(z))) +} + +const BUFSIZ = 1024 +const E2BIG = 7 +const EACCES = 13 +const EADDRINUSE = 98 +const EADDRNOTAVAIL = 99 +const EADV = 68 +const EAFNOSUPPORT = 97 +const EAGAIN = 11 +const EALREADY = 114 +const EBADE = 52 +const EBADF = 9 +const EBADFD = 77 +const EBADMSG = 74 +const EBADR = 53 +const EBADRQC = 56 +const EBADSLT = 57 +const EBFONT = 59 +const EBUSY = 16 +const ECANCELED = 125 +const ECHILD = 10 +const ECHRNG = 44 +const ECOMM = 70 +const ECONNABORTED = 103 +const ECONNREFUSED = 111 +const ECONNRESET = 104 +const EDEADLK = 35 +const EDEADLOCK = 58 +const EDESTADDRREQ = 89 +const EDOM = 33 +const EDOTDOT = 73 +const EDQUOT = 122 +const EEXIST = 17 +const EFAULT = 14 +const EFBIG = 27 +const EHOSTDOWN = 112 +const EHOSTUNREACH = 113 +const EHWPOISON = 133 +const EIDRM = 43 +const EILSEQ = 84 +const EINPROGRESS = 115 +const EINTR = 4 +const EINVAL = 22 +const EIO = 5 +const EISCONN = 106 +const EISDIR = 21 +const EISNAM = 120 +const EKEYEXPIRED = 127 +const EKEYREJECTED = 129 +const EKEYREVOKED = 128 +const EL2HLT = 51 +const EL2NSYNC = 45 +const EL3HLT = 46 +const EL3RST = 47 +const ELIBACC = 79 +const ELIBBAD = 80 +const ELIBEXEC = 83 +const ELIBMAX = 82 +const ELIBSCN = 81 +const ELNRNG = 48 +const ELOOP = 40 +const EMEDIUMTYPE = 124 +const EMFILE = 24 +const EMLINK = 31 +const EMSGSIZE = 90 +const EMULTIHOP = 72 +const ENAMETOOLONG = 36 +const ENAVAIL = 119 +const ENETDOWN = 100 +const ENETRESET = 102 +const ENETUNREACH = 101 +const ENFILE = 23 +const ENOANO = 55 +const ENOBUFS = 105 +const ENOCSI = 50 +const ENODATA = 61 +const ENODEV = 19 +const ENOENT = 2 +const ENOEXEC = 8 +const ENOKEY = 126 +const ENOLCK = 37 +const ENOLINK = 67 +const ENOMEDIUM = 123 +const ENOMEM = 12 +const ENOMSG = 42 +const ENONET = 64 +const ENOPKG = 65 +const ENOPROTOOPT = 92 +const ENOSPC = 28 +const ENOSR = 63 +const ENOSTR = 60 +const ENOSYS = 38 +const ENOTBLK = 15 +const ENOTCONN = 107 +const ENOTDIR = 20 +const ENOTEMPTY = 39 +const ENOTNAM = 118 +const ENOTRECOVERABLE = 131 +const ENOTSOCK = 88 +const ENOTSUP = 95 +const ENOTTY = 25 +const ENOTUNIQ = 76 +const ENXIO = 6 +const EOPNOTSUPP = 95 +const EOVERFLOW = 75 +const EOWNERDEAD = 130 +const EPERM = 1 +const EPFNOSUPPORT = 96 +const EPIPE = 32 +const EPROTO = 71 +const EPROTONOSUPPORT = 93 +const EPROTOTYPE = 91 +const ERANGE = 34 +const EREMCHG = 78 +const EREMOTE = 66 +const EREMOTEIO = 121 +const ERESTART = 85 +const ERFKILL = 132 +const EROFS = 30 +const ESHUTDOWN = 108 +const ESOCKTNOSUPPORT = 94 +const ESPIPE = 29 +const ESRCH = 3 +const ESRMNT = 69 +const ESTALE = 116 +const ESTRPIPE = 86 +const ETIME = 62 +const ETIMEDOUT = 110 +const ETOOMANYREFS = 109 +const ETXTBSY = 26 +const EUCLEAN = 117 +const EUNATCH = 49 +const EUSERS = 87 +const EWOULDBLOCK = 11 +const EXDEV = 18 +const EXFULL = 54 +const FILENAME_MAX = 4096 +const FOPEN_MAX = 1000 +const F_LOCK = 1 +const F_OK = 0 +const F_TEST = 3 +const F_TLOCK = 2 +const F_ULOCK = 0 +const L_ctermid = 20 +const L_tmpnam = 20 +const POSIX_CLOSE_RESTART = 0 +const P_tmpdir = "/tmp" +const R_OK = 4 +const SEEK_DATA = 3 +const SEEK_HOLE = 4 +const STDERR_FILENO = 2 +const STDIN_FILENO = 0 +const STDOUT_FILENO = 1 +const TMP_MAX = 10000 +const W_OK = 2 +const X_OK = 1 +const _CS_GNU_LIBC_VERSION = 2 +const _CS_GNU_LIBPTHREAD_VERSION = 3 +const _CS_PATH = 0 +const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = 4 +const _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 +const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 +const _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 +const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 +const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 +const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 +const _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 +const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 +const _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 +const _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 +const _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 +const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 +const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 +const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 +const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 +const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 +const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 1 +const _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 +const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 +const _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 +const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 +const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 +const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 +const _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 +const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 +const _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 +const _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 +const _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 +const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 +const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 +const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 +const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 +const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 +const _CS_POSIX_V7_THREADS_CFLAGS = 1150 +const _CS_POSIX_V7_THREADS_LDFLAGS = 1151 +const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 5 +const _CS_V6_ENV = 1148 +const _CS_V7_ENV = 1149 +const _IOFBF = 0 +const _IOLBF = 1 +const _IONBF = 2 +const _PC_2_SYMLINKS = 20 +const _PC_ALLOC_SIZE_MIN = 18 +const _PC_ASYNC_IO = 10 +const _PC_CHOWN_RESTRICTED = 6 +const _PC_FILESIZEBITS = 13 +const _PC_LINK_MAX = 0 +const _PC_MAX_CANON = 1 +const _PC_MAX_INPUT = 2 +const _PC_NAME_MAX = 3 +const _PC_NO_TRUNC = 7 +const _PC_PATH_MAX = 4 +const _PC_PIPE_BUF = 5 +const _PC_PRIO_IO = 11 +const _PC_REC_INCR_XFER_SIZE = 14 +const _PC_REC_MAX_XFER_SIZE = 15 +const _PC_REC_MIN_XFER_SIZE = 16 +const _PC_REC_XFER_ALIGN = 17 +const _PC_SOCK_MAXBUF = 12 +const _PC_SYMLINK_MAX = 19 +const _PC_SYNC_IO = 9 +const _PC_VDISABLE = 8 +const _POSIX2_C_BIND = 200809 +const _POSIX2_VERSION = 200809 +const _POSIX_ADVISORY_INFO = 200809 +const _POSIX_ASYNCHRONOUS_IO = 200809 +const _POSIX_BARRIERS = 200809 +const _POSIX_CHOWN_RESTRICTED = 1 +const _POSIX_CLOCK_SELECTION = 200809 +const _POSIX_CPUTIME = 200809 +const _POSIX_FSYNC = 200809 +const _POSIX_IPV6 = 200809 +const _POSIX_JOB_CONTROL = 1 +const _POSIX_MAPPED_FILES = 200809 +const _POSIX_MEMLOCK = 200809 +const _POSIX_MEMLOCK_RANGE = 200809 +const _POSIX_MEMORY_PROTECTION = 200809 +const _POSIX_MESSAGE_PASSING = 200809 +const _POSIX_MONOTONIC_CLOCK = 200809 +const _POSIX_NO_TRUNC = 1 +const _POSIX_RAW_SOCKETS = 200809 +const _POSIX_READER_WRITER_LOCKS = 200809 +const _POSIX_REALTIME_SIGNALS = 200809 +const _POSIX_REGEXP = 1 +const _POSIX_SAVED_IDS = 1 +const _POSIX_SEMAPHORES = 200809 +const _POSIX_SHARED_MEMORY_OBJECTS = 200809 +const _POSIX_SHELL = 1 +const _POSIX_SPAWN = 200809 +const _POSIX_SPIN_LOCKS = 200809 +const _POSIX_THREADS = 200809 +const _POSIX_THREAD_ATTR_STACKADDR = 200809 +const _POSIX_THREAD_ATTR_STACKSIZE = 200809 +const _POSIX_THREAD_CPUTIME = 200809 +const _POSIX_THREAD_PRIORITY_SCHEDULING = 200809 +const _POSIX_THREAD_PROCESS_SHARED = 200809 +const _POSIX_THREAD_SAFE_FUNCTIONS = 200809 +const _POSIX_TIMEOUTS = 200809 +const _POSIX_TIMERS = 200809 +const _POSIX_V6_LP64_OFF64 = 1 +const _POSIX_V7_LP64_OFF64 = 1 +const _POSIX_VDISABLE = 0 +const _POSIX_VERSION = 200809 +const _SC_2_CHAR_TERM = 95 +const _SC_2_C_BIND = 47 +const _SC_2_C_DEV = 48 +const _SC_2_FORT_DEV = 49 +const _SC_2_FORT_RUN = 50 +const _SC_2_LOCALEDEF = 52 +const _SC_2_PBS = 168 +const _SC_2_PBS_ACCOUNTING = 169 +const _SC_2_PBS_CHECKPOINT = 175 +const _SC_2_PBS_LOCATE = 170 +const _SC_2_PBS_MESSAGE = 171 +const _SC_2_PBS_TRACK = 172 +const _SC_2_SW_DEV = 51 +const _SC_2_UPE = 97 +const _SC_2_VERSION = 46 +const _SC_ADVISORY_INFO = 132 +const _SC_AIO_LISTIO_MAX = 23 +const _SC_AIO_MAX = 24 +const _SC_AIO_PRIO_DELTA_MAX = 25 +const _SC_ARG_MAX = 0 +const _SC_ASYNCHRONOUS_IO = 12 +const _SC_ATEXIT_MAX = 87 +const _SC_AVPHYS_PAGES = 86 +const _SC_BARRIERS = 133 +const _SC_BC_BASE_MAX = 36 +const _SC_BC_DIM_MAX = 37 +const _SC_BC_SCALE_MAX = 38 +const _SC_BC_STRING_MAX = 39 +const _SC_CHILD_MAX = 1 +const _SC_CLK_TCK = 2 +const _SC_CLOCK_SELECTION = 137 +const _SC_COLL_WEIGHTS_MAX = 40 +const _SC_CPUTIME = 138 +const _SC_DELAYTIMER_MAX = 26 +const _SC_EXPR_NEST_MAX = 42 +const _SC_FSYNC = 15 +const _SC_GETGR_R_SIZE_MAX = 69 +const _SC_GETPW_R_SIZE_MAX = 70 +const _SC_HOST_NAME_MAX = 180 +const _SC_IOV_MAX = 60 +const _SC_IPV6 = 235 +const _SC_JOB_CONTROL = 7 +const _SC_LINE_MAX = 43 +const _SC_LOGIN_NAME_MAX = 71 +const _SC_MAPPED_FILES = 16 +const _SC_MEMLOCK = 17 +const _SC_MEMLOCK_RANGE = 18 +const _SC_MEMORY_PROTECTION = 19 +const _SC_MESSAGE_PASSING = 20 +const _SC_MINSIGSTKSZ = 249 +const _SC_MONOTONIC_CLOCK = 149 +const _SC_MQ_OPEN_MAX = 27 +const _SC_MQ_PRIO_MAX = 28 +const _SC_NGROUPS_MAX = 3 +const _SC_NPROCESSORS_CONF = 83 +const _SC_NPROCESSORS_ONLN = 84 +const _SC_NZERO = 109 +const _SC_OPEN_MAX = 4 +const _SC_PAGESIZE = 30 +const _SC_PAGE_SIZE = 30 +const _SC_PASS_MAX = 88 +const _SC_PHYS_PAGES = 85 +const _SC_PRIORITIZED_IO = 13 +const _SC_PRIORITY_SCHEDULING = 10 +const _SC_RAW_SOCKETS = 236 +const _SC_READER_WRITER_LOCKS = 153 +const _SC_REALTIME_SIGNALS = 9 +const _SC_REGEXP = 155 +const _SC_RE_DUP_MAX = 44 +const _SC_RTSIG_MAX = 31 +const _SC_SAVED_IDS = 8 +const _SC_SEMAPHORES = 21 +const _SC_SEM_NSEMS_MAX = 32 +const _SC_SEM_VALUE_MAX = 33 +const _SC_SHARED_MEMORY_OBJECTS = 22 +const _SC_SHELL = 157 +const _SC_SIGQUEUE_MAX = 34 +const _SC_SIGSTKSZ = 250 +const _SC_SPAWN = 159 +const _SC_SPIN_LOCKS = 154 +const _SC_SPORADIC_SERVER = 160 +const _SC_SS_REPL_MAX = 241 +const _SC_STREAMS = 174 +const _SC_STREAM_MAX = 5 +const _SC_SYMLOOP_MAX = 173 +const _SC_SYNCHRONIZED_IO = 14 +const _SC_THREADS = 67 +const _SC_THREAD_ATTR_STACKADDR = 77 +const _SC_THREAD_ATTR_STACKSIZE = 78 +const _SC_THREAD_CPUTIME = 139 +const _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 +const _SC_THREAD_KEYS_MAX = 74 +const _SC_THREAD_PRIORITY_SCHEDULING = 79 +const _SC_THREAD_PRIO_INHERIT = 80 +const _SC_THREAD_PRIO_PROTECT = 81 +const _SC_THREAD_PROCESS_SHARED = 82 +const _SC_THREAD_ROBUST_PRIO_INHERIT = 247 +const _SC_THREAD_ROBUST_PRIO_PROTECT = 248 +const _SC_THREAD_SAFE_FUNCTIONS = 68 +const _SC_THREAD_SPORADIC_SERVER = 161 +const _SC_THREAD_STACK_MIN = 75 +const _SC_THREAD_THREADS_MAX = 76 +const _SC_TIMEOUTS = 164 +const _SC_TIMERS = 11 +const _SC_TIMER_MAX = 35 +const _SC_TRACE = 181 +const _SC_TRACE_EVENT_FILTER = 182 +const _SC_TRACE_EVENT_NAME_MAX = 242 +const _SC_TRACE_INHERIT = 183 +const _SC_TRACE_LOG = 184 +const _SC_TRACE_NAME_MAX = 243 +const _SC_TRACE_SYS_MAX = 244 +const _SC_TRACE_USER_EVENT_MAX = 245 +const _SC_TTY_NAME_MAX = 72 +const _SC_TYPED_MEMORY_OBJECTS = 165 +const _SC_TZNAME_MAX = 6 +const _SC_UIO_MAXIOV = 60 +const _SC_V6_ILP32_OFF32 = 176 +const _SC_V6_ILP32_OFFBIG = 177 +const _SC_V6_LP64_OFF64 = 178 +const _SC_V6_LPBIG_OFFBIG = 179 +const _SC_V7_ILP32_OFF32 = 237 +const _SC_V7_ILP32_OFFBIG = 238 +const _SC_V7_LP64_OFF64 = 239 +const _SC_V7_LPBIG_OFFBIG = 240 +const _SC_VERSION = 29 +const _SC_XBS5_ILP32_OFF32 = 125 +const _SC_XBS5_ILP32_OFFBIG = 126 +const _SC_XBS5_LP64_OFF64 = 127 +const _SC_XBS5_LPBIG_OFFBIG = 128 +const _SC_XOPEN_CRYPT = 92 +const _SC_XOPEN_ENH_I18N = 93 +const _SC_XOPEN_LEGACY = 129 +const _SC_XOPEN_REALTIME = 130 +const _SC_XOPEN_REALTIME_THREADS = 131 +const _SC_XOPEN_SHM = 94 +const _SC_XOPEN_STREAMS = 246 +const _SC_XOPEN_UNIX = 91 +const _SC_XOPEN_VERSION = 89 +const _SC_XOPEN_XCU_VERSION = 90 +const _SC_XOPEN_XPG2 = 98 +const _SC_XOPEN_XPG3 = 99 +const _SC_XOPEN_XPG4 = 100 +const _XOPEN_ENH_I18N = 1 +const _XOPEN_UNIX = 1 +const _XOPEN_VERSION = 700 + +type Tsize_t = uint64 + +type Tssize_t = int64 + +type Toff_t = int64 + +type Tpid_t = int32 + +type Tuid_t = uint32 + +type Tgid_t = uint32 + +type Tuseconds_t = uint32 + +type Tva_list = uintptr + +type t__isoc_va_list = uintptr + +type Tfpos_t = struct { + F__lldata [0]int64 + F__align [0]float64 + F__opaque [16]uint8 +} + +type T_G_fpos64_t = Tfpos_t + +func Xconfstr(tls *TLS, name int32, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v len1=%v, (%v:)", tls, name, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = __ccgo_ts + if !(name != 0) { + s = __ccgo_ts + 1 + } else { + if uint32(name) & ^Uint32FromUint32(4) != uint32(1) && uint32(name-int32(_CS_POSIX_V6_ILP32_OFF32_CFLAGS)) > uint32(35) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + // snprintf is overkill but avoid wasting code size to implement + // this completely useless function and its truncation semantics + return uint64(Xsnprintf(tls, buf, len1, __ccgo_ts+15, VaList(bp+8, s)) + int32(1)) +} + +const ARG_MAX = 131072 +const BC_BASE_MAX = 99 +const BC_DIM_MAX = 2048 +const BC_SCALE_MAX = 99 +const BC_STRING_MAX = 1000 +const CHARCLASS_NAME_MAX = 14 +const CHAR_BIT = 8 +const CHAR_MAX = 255 +const CHAR_MIN = 0 +const COLL_WEIGHTS_MAX = 2 +const DELAYTIMER_MAX = 2147483647 +const EXPR_NEST_MAX = 32 +const FILESIZEBITS = 64 +const HOST_NAME_MAX = 255 +const INT_MAX = 2147483647 +const INT_MIN = -2147483648 +const IOV_MAX = 1024 +const LINE_MAX = 4096 +const LLONG_MAX = 9223372036854775807 +const LLONG_MIN = -9223372036854775808 +const LOGIN_NAME_MAX = 256 +const LONG_BIT = 64 +const LONG_MAX = 9223372036854775807 +const LONG_MIN = -9223372036854775808 +const MB_LEN_MAX = 4 +const MQ_PRIO_MAX = 32768 +const NAME_MAX = 255 +const NGROUPS_MAX = 32 +const NL_ARGMAX = 9 +const NL_LANGMAX = 32 +const NL_MSGMAX = 32767 +const NL_SETMAX = 255 +const NL_TEXTMAX = 2048 +const NZERO = 20 +const PATH_MAX = 4096 +const PIPE_BUF = 4096 +const PTHREAD_DESTRUCTOR_ITERATIONS = 4 +const PTHREAD_KEYS_MAX = 128 +const PTHREAD_STACK_MIN = 2048 +const RE_DUP_MAX = 255 +const SCHAR_MAX = 127 +const SCHAR_MIN = -128 +const SEEK_CUR = 1 +const SEEK_END = 2 +const SEEK_SET = 0 +const SEM_NSEMS_MAX = 256 +const SEM_VALUE_MAX = 2147483647 +const SHRT_MAX = 32767 +const SHRT_MIN = -32768 +const SSIZE_MAX = 9223372036854775807 +const SYMLOOP_MAX = 40 +const TTY_NAME_MAX = 32 +const TZNAME_MAX = 6 +const UCHAR_MAX = 255 +const UINT_MAX = 4294967295 +const ULLONG_MAX = 18446744073709551615 +const ULONG_MAX = 18446744073709551615 +const USHRT_MAX = 65535 +const WORD_BIT = 32 +const _POSIX2_BC_BASE_MAX = 99 +const _POSIX2_BC_DIM_MAX = 2048 +const _POSIX2_BC_SCALE_MAX = 99 +const _POSIX2_BC_STRING_MAX = 1000 +const _POSIX2_CHARCLASS_NAME_MAX = 14 +const _POSIX2_COLL_WEIGHTS_MAX = 2 +const _POSIX2_EXPR_NEST_MAX = 32 +const _POSIX2_LINE_MAX = 2048 +const _POSIX2_RE_DUP_MAX = 255 +const _POSIX_AIO_LISTIO_MAX = 2 +const _POSIX_AIO_MAX = 1 +const _POSIX_ARG_MAX = 4096 +const _POSIX_CHILD_MAX = 25 +const _POSIX_CLOCKRES_MIN = 20000000 +const _POSIX_DELAYTIMER_MAX = 32 +const _POSIX_HOST_NAME_MAX = 255 +const _POSIX_LINK_MAX = 8 +const _POSIX_LOGIN_NAME_MAX = 9 +const _POSIX_MAX_CANON = 255 +const _POSIX_MAX_INPUT = 255 +const _POSIX_MQ_OPEN_MAX = 8 +const _POSIX_MQ_PRIO_MAX = 32 +const _POSIX_NAME_MAX = 14 +const _POSIX_NGROUPS_MAX = 8 +const _POSIX_OPEN_MAX = 20 +const _POSIX_PATH_MAX = 256 +const _POSIX_PIPE_BUF = 512 +const _POSIX_RE_DUP_MAX = 255 +const _POSIX_RTSIG_MAX = 8 +const _POSIX_SEM_NSEMS_MAX = 256 +const _POSIX_SEM_VALUE_MAX = 32767 +const _POSIX_SIGQUEUE_MAX = 32 +const _POSIX_SSIZE_MAX = 32767 +const _POSIX_SS_REPL_MAX = 4 +const _POSIX_STREAM_MAX = 8 +const _POSIX_SYMLINK_MAX = 255 +const _POSIX_SYMLOOP_MAX = 8 +const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 +const _POSIX_THREAD_KEYS_MAX = 128 +const _POSIX_THREAD_THREADS_MAX = 64 +const _POSIX_TIMER_MAX = 32 +const _POSIX_TRACE_EVENT_NAME_MAX = 30 +const _POSIX_TRACE_NAME_MAX = 8 +const _POSIX_TRACE_SYS_MAX = 8 +const _POSIX_TRACE_USER_EVENT_MAX = 32 +const _POSIX_TTY_NAME_MAX = 9 +const _POSIX_TZNAME_MAX = 6 +const _XOPEN_IOV_MAX = 16 +const _XOPEN_NAME_MAX = 255 +const _XOPEN_PATH_MAX = 1024 + +func Xfpathconf(tls *TLS, fd int32, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(name) >= Uint64FromInt64(42)/Uint64FromInt64(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + return int64(_values[name]) +} + +var _values = [21]int16{ + 0: int16(_POSIX_LINK_MAX), + 1: int16(_POSIX_MAX_CANON), + 2: int16(_POSIX_MAX_INPUT), + 3: int16(NAME_MAX), + 4: int16(PATH_MAX), + 5: int16(PIPE_BUF), + 6: int16(1), + 7: int16(1), + 9: int16(1), + 10: int16(-int32(1)), + 11: int16(-int32(1)), + 12: int16(-int32(1)), + 13: int16(FILESIZEBITS), + 14: int16(4096), + 15: int16(4096), + 16: int16(4096), + 17: int16(4096), + 18: int16(4096), + 19: int16(-int32(1)), + 20: int16(1), +} + +const SI_LOAD_SHIFT = 16 + +type Tsysinfo = struct { + Fuptime uint64 + Floads [3]uint64 + Ftotalram uint64 + Ffreeram uint64 + Fsharedram uint64 + Fbufferram uint64 + Ftotalswap uint64 + Ffreeswap uint64 + Fprocs uint16 + Fpad uint16 + Ftotalhigh uint64 + Ffreehigh uint64 + Fmem_unit uint32 + F__reserved [256]uint8 +} + +func Xget_nprocs_conf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_CONF))) +} + +func Xget_nprocs(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_ONLN))) +} + +func Xget_phys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_PHYS_PAGES)) +} + +func Xget_avphys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_AVPHYS_PAGES)) +} + +func Xpathconf(tls *TLS, path uintptr, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfpathconf(tls, -int32(1), name) +} + +const AT_BASE = 7 +const AT_BASE_PLATFORM = 24 +const AT_CLKTCK = 17 +const AT_DCACHEBSIZE = 19 +const AT_EGID = 14 +const AT_ENTRY = 9 +const AT_EUID = 12 +const AT_EXECFD = 2 +const AT_EXECFN = 31 +const AT_FLAGS = 8 +const AT_FPUCW = 18 +const AT_GID = 13 +const AT_HWCAP = 16 +const AT_HWCAP2 = 26 +const AT_ICACHEBSIZE = 20 +const AT_IGNORE = 1 +const AT_IGNOREPPC = 22 +const AT_L1D_CACHEGEOMETRY = 43 +const AT_L1D_CACHESHAPE = 35 +const AT_L1D_CACHESIZE = 42 +const AT_L1I_CACHEGEOMETRY = 41 +const AT_L1I_CACHESHAPE = 34 +const AT_L1I_CACHESIZE = 40 +const AT_L2_CACHEGEOMETRY = 45 +const AT_L2_CACHESHAPE = 36 +const AT_L2_CACHESIZE = 44 +const AT_L3_CACHEGEOMETRY = 47 +const AT_L3_CACHESHAPE = 37 +const AT_L3_CACHESIZE = 46 +const AT_MINSIGSTKSZ = 51 +const AT_NOTELF = 10 +const AT_NULL = 0 +const AT_PAGESZ = 6 +const AT_PHDR = 3 +const AT_PHENT = 4 +const AT_PHNUM = 5 +const AT_PLATFORM = 15 +const AT_RANDOM = 25 +const AT_SECURE = 23 +const AT_SYSINFO = 32 +const AT_SYSINFO_EHDR = 33 +const AT_UCACHEBSIZE = 21 +const AT_UID = 11 +const BUS_ADRALN = 1 +const BUS_ADRERR = 2 +const BUS_MCEERR_AO = 5 +const BUS_MCEERR_AR = 4 +const BUS_OBJERR = 3 +const CLD_CONTINUED = 6 +const CLD_DUMPED = 3 +const CLD_EXITED = 1 +const CLD_KILLED = 2 +const CLD_STOPPED = 5 +const CLD_TRAPPED = 4 +const DF_1_CONFALT = 8192 +const DF_1_DIRECT = 256 +const DF_1_DISPRELDNE = 32768 +const DF_1_DISPRELPND = 65536 +const DF_1_EDITED = 2097152 +const DF_1_ENDFILTEE = 16384 +const DF_1_GLOBAL = 2 +const DF_1_GLOBAUDIT = 16777216 +const DF_1_GROUP = 4 +const DF_1_IGNMULDEF = 262144 +const DF_1_INITFIRST = 32 +const DF_1_INTERPOSE = 1024 +const DF_1_LOADFLTR = 16 +const DF_1_NODEFLIB = 2048 +const DF_1_NODELETE = 8 +const DF_1_NODIRECT = 131072 +const DF_1_NODUMP = 4096 +const DF_1_NOHDR = 1048576 +const DF_1_NOKSYMS = 524288 +const DF_1_NOOPEN = 64 +const DF_1_NORELOC = 4194304 +const DF_1_NOW = 1 +const DF_1_ORIGIN = 128 +const DF_1_PIE = 134217728 +const DF_1_SINGLETON = 33554432 +const DF_1_STUB = 67108864 +const DF_1_SYMINTPOSE = 8388608 +const DF_1_TRANS = 512 +const DF_BIND_NOW = 8 +const DF_ORIGIN = 1 +const DF_P1_GROUPPERM = 2 +const DF_P1_LAZYLOAD = 1 +const DF_STATIC_TLS = 16 +const DF_SYMBOLIC = 2 +const DF_TEXTREL = 4 +const DTF_1_CONFEXP = 2 +const DTF_1_PARINIT = 1 +const DT_ADDRNUM = 11 +const DT_ADDRRNGHI = 1879047935 +const DT_ADDRRNGLO = 1879047680 +const DT_ALPHA_NUM = 1 +const DT_ALPHA_PLTRO = 1879048192 +const DT_AUDIT = 1879047932 +const DT_AUXILIARY = 2147483645 +const DT_BIND_NOW = 24 +const DT_CHECKSUM = 1879047672 +const DT_CONFIG = 1879047930 +const DT_DEBUG = 21 +const DT_DEPAUDIT = 1879047931 +const DT_ENCODING = 32 +const DT_EXTRANUM = 3 +const DT_FEATURE_1 = 1879047676 +const DT_FILTER = 2147483647 +const DT_FINI = 13 +const DT_FINI_ARRAY = 26 +const DT_FINI_ARRAYSZ = 28 +const DT_FLAGS = 30 +const DT_FLAGS_1 = 1879048187 +const DT_GNU_CONFLICT = 1879047928 +const DT_GNU_CONFLICTSZ = 1879047670 +const DT_GNU_HASH = 1879047925 +const DT_GNU_LIBLIST = 1879047929 +const DT_GNU_LIBLISTSZ = 1879047671 +const DT_GNU_PRELINKED = 1879047669 +const DT_HASH = 4 +const DT_HIOS = 1879044096 +const DT_HIPROC = 2147483647 +const DT_IA_64_NUM = 1 +const DT_IA_64_PLT_RESERVE = 1879048192 +const DT_INIT = 12 +const DT_INIT_ARRAY = 25 +const DT_INIT_ARRAYSZ = 27 +const DT_JMPREL = 23 +const DT_LOOS = 1610612749 +const DT_LOPROC = 1879048192 +const DT_MIPS_AUX_DYNAMIC = 1879048241 +const DT_MIPS_BASE_ADDRESS = 1879048198 +const DT_MIPS_COMPACT_SIZE = 1879048239 +const DT_MIPS_CONFLICT = 1879048200 +const DT_MIPS_CONFLICTNO = 1879048203 +const DT_MIPS_CXX_FLAGS = 1879048226 +const DT_MIPS_DELTA_CLASS = 1879048215 +const DT_MIPS_DELTA_CLASSSYM = 1879048224 +const DT_MIPS_DELTA_CLASSSYM_NO = 1879048225 +const DT_MIPS_DELTA_CLASS_NO = 1879048216 +const DT_MIPS_DELTA_INSTANCE = 1879048217 +const DT_MIPS_DELTA_INSTANCE_NO = 1879048218 +const DT_MIPS_DELTA_RELOC = 1879048219 +const DT_MIPS_DELTA_RELOC_NO = 1879048220 +const DT_MIPS_DELTA_SYM = 1879048221 +const DT_MIPS_DELTA_SYM_NO = 1879048222 +const DT_MIPS_DYNSTR_ALIGN = 1879048235 +const DT_MIPS_FLAGS = 1879048197 +const DT_MIPS_GOTSYM = 1879048211 +const DT_MIPS_GP_VALUE = 1879048240 +const DT_MIPS_HIDDEN_GOTIDX = 1879048231 +const DT_MIPS_HIPAGENO = 1879048212 +const DT_MIPS_ICHECKSUM = 1879048195 +const DT_MIPS_INTERFACE = 1879048234 +const DT_MIPS_INTERFACE_SIZE = 1879048236 +const DT_MIPS_IVERSION = 1879048196 +const DT_MIPS_LIBLIST = 1879048201 +const DT_MIPS_LIBLISTNO = 1879048208 +const DT_MIPS_LOCALPAGE_GOTIDX = 1879048229 +const DT_MIPS_LOCAL_GOTIDX = 1879048230 +const DT_MIPS_LOCAL_GOTNO = 1879048202 +const DT_MIPS_MSYM = 1879048199 +const DT_MIPS_NUM = 54 +const DT_MIPS_OPTIONS = 1879048233 +const DT_MIPS_PERF_SUFFIX = 1879048238 +const DT_MIPS_PIXIE_INIT = 1879048227 +const DT_MIPS_PLTGOT = 1879048242 +const DT_MIPS_PROTECTED_GOTIDX = 1879048232 +const DT_MIPS_RLD_MAP = 1879048214 +const DT_MIPS_RLD_MAP_REL = 1879048245 +const DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 1879048237 +const DT_MIPS_RLD_VERSION = 1879048193 +const DT_MIPS_RWPLT = 1879048244 +const DT_MIPS_SYMBOL_LIB = 1879048228 +const DT_MIPS_SYMTABNO = 1879048209 +const DT_MIPS_TIME_STAMP = 1879048194 +const DT_MIPS_UNREFEXTNO = 1879048210 +const DT_MOVEENT = 1879047674 +const DT_MOVESZ = 1879047675 +const DT_MOVETAB = 1879047934 +const DT_NEEDED = 1 +const DT_NIOS2_GP = 1879048194 +const DT_NULL = 0 +const DT_NUM = 38 +const DT_PLTGOT = 3 +const DT_PLTPAD = 1879047933 +const DT_PLTPADSZ = 1879047673 +const DT_PLTREL = 20 +const DT_PLTRELSZ = 2 +const DT_POSFLAG_1 = 1879047677 +const DT_PPC64_GLINK = 1879048192 +const DT_PPC64_NUM = 4 +const DT_PPC64_OPD = 1879048193 +const DT_PPC64_OPDSZ = 1879048194 +const DT_PPC64_OPT = 1879048195 +const DT_PPC_GOT = 1879048192 +const DT_PPC_NUM = 2 +const DT_PPC_OPT = 1879048193 +const DT_PREINIT_ARRAY = 32 +const DT_PREINIT_ARRAYSZ = 33 +const DT_PROCNUM = 54 +const DT_REL = 17 +const DT_RELA = 7 +const DT_RELACOUNT = 1879048185 +const DT_RELAENT = 9 +const DT_RELASZ = 8 +const DT_RELCOUNT = 1879048186 +const DT_RELENT = 19 +const DT_RELR = 36 +const DT_RELRENT = 37 +const DT_RELRSZ = 35 +const DT_RELSZ = 18 +const DT_RPATH = 15 +const DT_RUNPATH = 29 +const DT_SONAME = 14 +const DT_SPARC_NUM = 2 +const DT_SPARC_REGISTER = 1879048193 +const DT_STRSZ = 10 +const DT_STRTAB = 5 +const DT_SYMBOLIC = 16 +const DT_SYMENT = 11 +const DT_SYMINENT = 1879047679 +const DT_SYMINFO = 1879047935 +const DT_SYMINSZ = 1879047678 +const DT_SYMTAB = 6 +const DT_SYMTAB_SHNDX = 34 +const DT_TEXTREL = 22 +const DT_TLSDESC_GOT = 1879047927 +const DT_TLSDESC_PLT = 1879047926 +const DT_VALNUM = 12 +const DT_VALRNGHI = 1879047679 +const DT_VALRNGLO = 1879047424 +const DT_VERDEF = 1879048188 +const DT_VERDEFNUM = 1879048189 +const DT_VERNEED = 1879048190 +const DT_VERNEEDNUM = 1879048191 +const DT_VERSIONTAGNUM = 16 +const DT_VERSYM = 1879048176 +const EFA_PARISC_1_0 = 523 +const EFA_PARISC_1_1 = 528 +const EFA_PARISC_2_0 = 532 +const EF_ALPHA_32BIT = 1 +const EF_ALPHA_CANRELAX = 2 +const EF_ARM_ABI_FLOAT_HARD = 1024 +const EF_ARM_ABI_FLOAT_SOFT = 512 +const EF_ARM_ALIGN8 = 64 +const EF_ARM_APCS_26 = 8 +const EF_ARM_APCS_FLOAT = 16 +const EF_ARM_BE8 = 8388608 +const EF_ARM_DYNSYMSUSESEGIDX = 8 +const EF_ARM_EABIMASK = 4278190080 +const EF_ARM_EABI_UNKNOWN = 0 +const EF_ARM_EABI_VER1 = 16777216 +const EF_ARM_EABI_VER2 = 33554432 +const EF_ARM_EABI_VER3 = 50331648 +const EF_ARM_EABI_VER4 = 67108864 +const EF_ARM_EABI_VER5 = 83886080 +const EF_ARM_HASENTRY = 2 +const EF_ARM_INTERWORK = 4 +const EF_ARM_LE8 = 4194304 +const EF_ARM_MAPSYMSFIRST = 16 +const EF_ARM_MAVERICK_FLOAT = 2048 +const EF_ARM_NEW_ABI = 128 +const EF_ARM_OLD_ABI = 256 +const EF_ARM_PIC = 32 +const EF_ARM_RELEXEC = 1 +const EF_ARM_SOFT_FLOAT = 512 +const EF_ARM_SYMSARESORTED = 4 +const EF_ARM_VFP_FLOAT = 1024 +const EF_CPU32 = 8454144 +const EF_IA_64_ABI64 = 16 +const EF_IA_64_ARCH = 4278190080 +const EF_IA_64_MASKOS = 15 +const EF_LARCH_ABI_DOUBLE_FLOAT = 3 +const EF_LARCH_ABI_MODIFIER_MASK = 7 +const EF_LARCH_ABI_SINGLE_FLOAT = 2 +const EF_LARCH_ABI_SOFT_FLOAT = 1 +const EF_LARCH_OBJABI_V1 = 64 +const EF_MIPS_64BIT_WHIRL = 16 +const EF_MIPS_ABI2 = 32 +const EF_MIPS_ABI_ON32 = 64 +const EF_MIPS_ARCH = 4026531840 +const EF_MIPS_ARCH_1 = 0 +const EF_MIPS_ARCH_2 = 268435456 +const EF_MIPS_ARCH_3 = 536870912 +const EF_MIPS_ARCH_32 = 1342177280 +const EF_MIPS_ARCH_32R2 = 1879048192 +const EF_MIPS_ARCH_4 = 805306368 +const EF_MIPS_ARCH_5 = 1073741824 +const EF_MIPS_ARCH_64 = 1610612736 +const EF_MIPS_ARCH_64R2 = 2147483648 +const EF_MIPS_CPIC = 4 +const EF_MIPS_FP64 = 512 +const EF_MIPS_NAN2008 = 1024 +const EF_MIPS_NOREORDER = 1 +const EF_MIPS_PIC = 2 +const EF_MIPS_XGOT = 8 +const EF_PARISC_ARCH = 65535 +const EF_PARISC_EXT = 131072 +const EF_PARISC_LAZYSWAP = 4194304 +const EF_PARISC_LSB = 262144 +const EF_PARISC_NO_KABP = 1048576 +const EF_PARISC_TRAPNIL = 65536 +const EF_PARISC_WIDE = 524288 +const EF_PPC64_ABI = 3 +const EF_PPC_EMB = 2147483648 +const EF_PPC_RELOCATABLE = 65536 +const EF_PPC_RELOCATABLE_LIB = 32768 +const EF_SH1 = 1 +const EF_SH2 = 2 +const EF_SH2A = 13 +const EF_SH2A_NOFPU = 19 +const EF_SH2A_SH3E = 24 +const EF_SH2A_SH3_NOFPU = 22 +const EF_SH2A_SH4 = 23 +const EF_SH2A_SH4_NOFPU = 21 +const EF_SH2E = 11 +const EF_SH3 = 3 +const EF_SH3E = 8 +const EF_SH3_DSP = 5 +const EF_SH3_NOMMU = 20 +const EF_SH4 = 9 +const EF_SH4A = 12 +const EF_SH4AL_DSP = 6 +const EF_SH4A_NOFPU = 17 +const EF_SH4_NOFPU = 16 +const EF_SH4_NOMMU_NOFPU = 18 +const EF_SH_DSP = 4 +const EF_SH_MACH_MASK = 31 +const EF_SH_UNKNOWN = 0 +const EF_SPARCV9_MM = 3 +const EF_SPARCV9_PSO = 1 +const EF_SPARCV9_RMO = 2 +const EF_SPARCV9_TSO = 0 +const EF_SPARC_32PLUS = 256 +const EF_SPARC_EXT_MASK = 16776960 +const EF_SPARC_HAL_R1 = 1024 +const EF_SPARC_LEDATA = 8388608 +const EF_SPARC_SUN_US1 = 512 +const EF_SPARC_SUN_US3 = 2048 +const EI_ABIVERSION = 8 +const EI_CLASS = 4 +const EI_DATA = 5 +const EI_MAG0 = 0 +const EI_MAG1 = 1 +const EI_MAG2 = 2 +const EI_MAG3 = 3 +const EI_NIDENT = 16 +const EI_OSABI = 7 +const EI_PAD = 9 +const EI_VERSION = 6 +const ELFCLASS32 = 1 +const ELFCLASS64 = 2 +const ELFCLASSNONE = 0 +const ELFCLASSNUM = 3 +const ELFCOMPRESS_HIOS = 1879048191 +const ELFCOMPRESS_HIPROC = 2147483647 +const ELFCOMPRESS_LOOS = 1610612736 +const ELFCOMPRESS_LOPROC = 1879048192 +const ELFCOMPRESS_ZLIB = 1 +const ELFCOMPRESS_ZSTD = 2 +const ELFDATA2LSB = 1 +const ELFDATA2MSB = 2 +const ELFDATANONE = 0 +const ELFDATANUM = 3 +const ELFMAG = "\\177ELF" +const ELFMAG0 = 127 +const ELFMAG1 = 69 +const ELFMAG2 = 76 +const ELFMAG3 = 70 +const ELFOSABI_AIX = 7 +const ELFOSABI_ARM = 97 +const ELFOSABI_FREEBSD = 9 +const ELFOSABI_GNU = 3 +const ELFOSABI_HPUX = 1 +const ELFOSABI_IRIX = 8 +const ELFOSABI_LINUX = 3 +const ELFOSABI_MODESTO = 11 +const ELFOSABI_NETBSD = 2 +const ELFOSABI_NONE = 0 +const ELFOSABI_OPENBSD = 12 +const ELFOSABI_SOLARIS = 6 +const ELFOSABI_STANDALONE = 255 +const ELFOSABI_SYSV = 0 +const ELFOSABI_TRU64 = 10 +const ELF_NOTE_ABI = 1 +const ELF_NOTE_GNU = "GNU" +const ELF_NOTE_OS_FREEBSD = 3 +const ELF_NOTE_OS_GNU = 1 +const ELF_NOTE_OS_LINUX = 0 +const ELF_NOTE_OS_SOLARIS2 = 2 +const ELF_NOTE_PAGESIZE_HINT = 1 +const ELF_NOTE_SOLARIS = "SUNW Solaris" +const EM_386 = 3 +const EM_56800EX = 200 +const EM_68HC05 = 72 +const EM_68HC08 = 71 +const EM_68HC11 = 70 +const EM_68HC12 = 53 +const EM_68HC16 = 69 +const EM_68K = 4 +const EM_78KOR = 199 +const EM_8051 = 165 +const EM_860 = 7 +const EM_88K = 5 +const EM_960 = 19 +const EM_AARCH64 = 183 +const EM_ALPHA = 36902 +const EM_ALTERA_NIOS2 = 113 +const EM_AMDGPU = 224 +const EM_ARC = 45 +const EM_ARCA = 109 +const EM_ARC_A5 = 93 +const EM_ARC_COMPACT = 93 +const EM_ARC_COMPACT2 = 195 +const EM_ARM = 40 +const EM_AVR = 83 +const EM_AVR32 = 185 +const EM_BA1 = 201 +const EM_BA2 = 202 +const EM_BLACKFIN = 106 +const EM_BPF = 247 +const EM_C166 = 116 +const EM_CDP = 215 +const EM_CE = 119 +const EM_CLOUDSHIELD = 192 +const EM_COGE = 216 +const EM_COLDFIRE = 52 +const EM_COOL = 217 +const EM_COREA_1ST = 193 +const EM_COREA_2ND = 194 +const EM_CR = 103 +const EM_CR16 = 177 +const EM_CRAYNV2 = 172 +const EM_CRIS = 76 +const EM_CRX = 114 +const EM_CSKY = 252 +const EM_CSR_KALIMBA = 219 +const EM_CUDA = 190 +const EM_CYPRESS_M8C = 161 +const EM_D10V = 85 +const EM_D30V = 86 +const EM_DSP24 = 136 +const EM_DSPIC30F = 118 +const EM_DXP = 112 +const EM_ECOG16 = 176 +const EM_ECOG1X = 168 +const EM_ECOG2 = 134 +const EM_EMX16 = 212 +const EM_EMX8 = 213 +const EM_ETPU = 178 +const EM_EXCESS = 111 +const EM_F2MC16 = 104 +const EM_FAKE_ALPHA = 41 +const EM_FIREPATH = 78 +const EM_FR20 = 37 +const EM_FR30 = 84 +const EM_FT32 = 222 +const EM_FX66 = 66 +const EM_H8S = 48 +const EM_H8_300 = 46 +const EM_H8_300H = 47 +const EM_H8_500 = 49 +const EM_HUANY = 81 +const EM_IA_64 = 50 +const EM_IP2K = 101 +const EM_JAVELIN = 77 +const EM_K10M = 181 +const EM_KM32 = 210 +const EM_KMX32 = 211 +const EM_KVARC = 214 +const EM_L10M = 180 +const EM_LATTICEMICO32 = 138 +const EM_LOONGARCH = 258 +const EM_M16C = 117 +const EM_M32 = 1 +const EM_M32C = 120 +const EM_M32R = 88 +const EM_MANIK = 171 +const EM_MAX = 102 +const EM_MAXQ30 = 169 +const EM_MCHP_PIC = 204 +const EM_MCST_ELBRUS = 175 +const EM_ME16 = 59 +const EM_METAG = 174 +const EM_MICROBLAZE = 189 +const EM_MIPS = 8 +const EM_MIPS_RS3_LE = 10 +const EM_MIPS_X = 51 +const EM_MMA = 54 +const EM_MMDSP_PLUS = 160 +const EM_MMIX = 80 +const EM_MN10200 = 90 +const EM_MN10300 = 89 +const EM_MOXIE = 223 +const EM_MSP430 = 105 +const EM_NCPU = 56 +const EM_NDR1 = 57 +const EM_NDS32 = 167 +const EM_NONE = 0 +const EM_NORC = 218 +const EM_NS32K = 97 +const EM_NUM = 259 +const EM_OPEN8 = 196 +const EM_OPENRISC = 92 +const EM_OR1K = 92 +const EM_PARISC = 15 +const EM_PCP = 55 +const EM_PDSP = 63 +const EM_PJ = 91 +const EM_PPC = 20 +const EM_PPC64 = 21 +const EM_PRISM = 82 +const EM_QDSP6 = 164 +const EM_R32C = 162 +const EM_RCE = 39 +const EM_RH32 = 38 +const EM_RISCV = 243 +const EM_RL78 = 197 +const EM_RS08 = 132 +const EM_RX = 173 +const EM_S370 = 9 +const EM_S390 = 22 +const EM_SCORE7 = 135 +const EM_SEP = 108 +const EM_SE_C17 = 139 +const EM_SE_C33 = 107 +const EM_SH = 42 +const EM_SHARC = 133 +const EM_SLE9X = 179 +const EM_SNP1K = 99 +const EM_SPARC = 2 +const EM_SPARC32PLUS = 18 +const EM_SPARCV9 = 43 +const EM_ST100 = 60 +const EM_ST19 = 74 +const EM_ST200 = 100 +const EM_ST7 = 68 +const EM_ST9PLUS = 67 +const EM_STARCORE = 58 +const EM_STM8 = 186 +const EM_STXP7X = 166 +const EM_SVX = 73 +const EM_TILE64 = 187 +const EM_TILEGX = 191 +const EM_TILEPRO = 188 +const EM_TINYJ = 61 +const EM_TI_ARP32 = 143 +const EM_TI_C2000 = 141 +const EM_TI_C5500 = 142 +const EM_TI_C6000 = 140 +const EM_TI_PRU = 144 +const EM_TMM_GPP = 96 +const EM_TPC = 98 +const EM_TRICORE = 44 +const EM_TRIMEDIA = 163 +const EM_TSK3000 = 131 +const EM_UNICORE = 110 +const EM_V800 = 36 +const EM_V850 = 87 +const EM_VAX = 75 +const EM_VIDEOCORE = 95 +const EM_VIDEOCORE3 = 137 +const EM_VIDEOCORE5 = 198 +const EM_VISIUM = 221 +const EM_VPP500 = 17 +const EM_X86_64 = 62 +const EM_XCORE = 203 +const EM_XGATE = 115 +const EM_XIMO16 = 170 +const EM_XTENSA = 94 +const EM_Z80 = 220 +const EM_ZSP = 79 +const ET_CORE = 4 +const ET_DYN = 3 +const ET_EXEC = 2 +const ET_HIOS = 65279 +const ET_HIPROC = 65535 +const ET_LOOS = 65024 +const ET_LOPROC = 65280 +const ET_NONE = 0 +const ET_NUM = 5 +const ET_REL = 1 +const EV_CURRENT = 1 +const EV_NONE = 0 +const EV_NUM = 2 +const EXIT_FAILURE = 1 +const EXIT_SUCCESS = 0 +const E_MIPS_ARCH_1 = 0 +const E_MIPS_ARCH_2 = 268435456 +const E_MIPS_ARCH_3 = 536870912 +const E_MIPS_ARCH_32 = 1342177280 +const E_MIPS_ARCH_4 = 805306368 +const E_MIPS_ARCH_5 = 1073741824 +const E_MIPS_ARCH_64 = 1610612736 +const FD_SETSIZE = 1024 +const FPE_FLTDIV = 3 +const FPE_FLTINV = 7 +const FPE_FLTOVF = 4 +const FPE_FLTRES = 6 +const FPE_FLTSUB = 8 +const FPE_FLTUND = 5 +const FPE_INTDIV = 1 +const FPE_INTOVF = 2 +const GRP_COMDAT = 1 +const ILL_BADSTK = 8 +const ILL_COPROC = 7 +const ILL_ILLADR = 3 +const ILL_ILLOPC = 1 +const ILL_ILLOPN = 2 +const ILL_ILLTRP = 4 +const ILL_PRVOPC = 5 +const ILL_PRVREG = 6 +const ITIMER_PROF = 2 +const ITIMER_REAL = 0 +const ITIMER_VIRTUAL = 1 +const JT_ARG_MAX = -254 +const JT_AVPHYS_PAGES = -247 +const JT_DELAYTIMER_MAX = -245 +const JT_MINSIGSTKSZ = -244 +const JT_MQ_PRIO_MAX = -253 +const JT_NPROCESSORS_CONF = -250 +const JT_NPROCESSORS_ONLN = -249 +const JT_PAGE_SIZE = -252 +const JT_PHYS_PAGES = -248 +const JT_SEM_VALUE_MAX = -251 +const JT_SIGSTKSZ = -243 +const JT_ZERO = -246 +const LITUSE_ALPHA_ADDR = 0 +const LITUSE_ALPHA_BASE = 1 +const LITUSE_ALPHA_BYTOFF = 2 +const LITUSE_ALPHA_JSR = 3 +const LITUSE_ALPHA_TLS_GD = 4 +const LITUSE_ALPHA_TLS_LDM = 5 +const LL_DELAY_LOAD = 16 +const LL_DELTA = 32 +const LL_EXACT_MATCH = 1 +const LL_EXPORTS = 8 +const LL_IGNORE_INT_VER = 2 +const LL_NONE = 0 +const LL_REQUIRE_MINOR = 4 +const MB_CUR_MAX = 0 +const MINSIGSTKSZ = 4096 +const MIPS_AFL_ASE_DSP = 1 +const MIPS_AFL_ASE_DSPR2 = 2 +const MIPS_AFL_ASE_EVA = 4 +const MIPS_AFL_ASE_MASK = 8191 +const MIPS_AFL_ASE_MCU = 8 +const MIPS_AFL_ASE_MDMX = 16 +const MIPS_AFL_ASE_MICROMIPS = 2048 +const MIPS_AFL_ASE_MIPS16 = 1024 +const MIPS_AFL_ASE_MIPS3D = 32 +const MIPS_AFL_ASE_MSA = 512 +const MIPS_AFL_ASE_MT = 64 +const MIPS_AFL_ASE_SMARTMIPS = 128 +const MIPS_AFL_ASE_VIRT = 256 +const MIPS_AFL_ASE_XPA = 4096 +const MIPS_AFL_EXT_10000 = 11 +const MIPS_AFL_EXT_3900 = 10 +const MIPS_AFL_EXT_4010 = 8 +const MIPS_AFL_EXT_4100 = 9 +const MIPS_AFL_EXT_4111 = 13 +const MIPS_AFL_EXT_4120 = 14 +const MIPS_AFL_EXT_4650 = 7 +const MIPS_AFL_EXT_5400 = 15 +const MIPS_AFL_EXT_5500 = 16 +const MIPS_AFL_EXT_5900 = 6 +const MIPS_AFL_EXT_LOONGSON_2E = 17 +const MIPS_AFL_EXT_LOONGSON_2F = 18 +const MIPS_AFL_EXT_LOONGSON_3A = 4 +const MIPS_AFL_EXT_OCTEON = 5 +const MIPS_AFL_EXT_OCTEON2 = 2 +const MIPS_AFL_EXT_OCTEONP = 3 +const MIPS_AFL_EXT_SB1 = 12 +const MIPS_AFL_EXT_XLR = 1 +const MIPS_AFL_FLAGS1_ODDSPREG = 1 +const MIPS_AFL_REG_128 = 3 +const MIPS_AFL_REG_32 = 1 +const MIPS_AFL_REG_64 = 2 +const MIPS_AFL_REG_NONE = 0 +const NT_386_IOPERM = 513 +const NT_386_TLS = 512 +const NT_ARC_V2 = 1536 +const NT_ARM_HW_BREAK = 1026 +const NT_ARM_HW_WATCH = 1027 +const NT_ARM_PACA_KEYS = 1031 +const NT_ARM_PACG_KEYS = 1032 +const NT_ARM_PAC_ENABLED_KEYS = 1034 +const NT_ARM_PAC_MASK = 1030 +const NT_ARM_SVE = 1029 +const NT_ARM_SYSTEM_CALL = 1028 +const NT_ARM_TAGGED_ADDR_CTRL = 1033 +const NT_ARM_TLS = 1025 +const NT_ARM_VFP = 1024 +const NT_ASRS = 8 +const NT_AUXV = 6 +const NT_FILE = 1179208773 +const NT_FPREGSET = 2 +const NT_GNU_ABI_TAG = 1 +const NT_GNU_BUILD_ID = 3 +const NT_GNU_GOLD_VERSION = 4 +const NT_GNU_PROPERTY_TYPE_0 = 5 +const NT_GWINDOWS = 7 +const NT_LOONGARCH_CPUCFG = 2560 +const NT_LOONGARCH_CSR = 2561 +const NT_LOONGARCH_LASX = 2563 +const NT_LOONGARCH_LBT = 2564 +const NT_LOONGARCH_LSX = 2562 +const NT_LWPSINFO = 17 +const NT_LWPSTATUS = 16 +const NT_METAG_CBUF = 1280 +const NT_METAG_RPIPE = 1281 +const NT_METAG_TLS = 1282 +const NT_MIPS_DSP = 2048 +const NT_MIPS_FP_MODE = 2049 +const NT_MIPS_MSA = 2050 +const NT_PLATFORM = 5 +const NT_PPC_DSCR = 261 +const NT_PPC_EBB = 262 +const NT_PPC_PMU = 263 +const NT_PPC_PPR = 260 +const NT_PPC_SPE = 257 +const NT_PPC_TAR = 259 +const NT_PPC_TM_CDSCR = 271 +const NT_PPC_TM_CFPR = 265 +const NT_PPC_TM_CGPR = 264 +const NT_PPC_TM_CPPR = 270 +const NT_PPC_TM_CTAR = 269 +const NT_PPC_TM_CVMX = 266 +const NT_PPC_TM_CVSX = 267 +const NT_PPC_TM_SPR = 268 +const NT_PPC_VMX = 256 +const NT_PPC_VSX = 258 +const NT_PRCRED = 14 +const NT_PRFPREG = 2 +const NT_PRFPXREG = 20 +const NT_PRPSINFO = 3 +const NT_PRSTATUS = 1 +const NT_PRXFPREG = 1189489535 +const NT_PRXREG = 4 +const NT_PSINFO = 13 +const NT_PSTATUS = 10 +const NT_RISCV_CSR = 2304 +const NT_RISCV_VECTOR = 2305 +const NT_S390_CTRS = 772 +const NT_S390_GS_BC = 780 +const NT_S390_GS_CB = 779 +const NT_S390_HIGH_GPRS = 768 +const NT_S390_LAST_BREAK = 774 +const NT_S390_PREFIX = 773 +const NT_S390_RI_CB = 781 +const NT_S390_SYSTEM_CALL = 775 +const NT_S390_TDB = 776 +const NT_S390_TIMER = 769 +const NT_S390_TODCMP = 770 +const NT_S390_TODPREG = 771 +const NT_S390_VXRS_HIGH = 778 +const NT_S390_VXRS_LOW = 777 +const NT_SIGINFO = 1397311305 +const NT_TASKSTRUCT = 4 +const NT_UTSNAME = 15 +const NT_VERSION = 1 +const NT_VMCOREDD = 1792 +const NT_X86_XSTATE = 514 +const ODK_EXCEPTIONS = 2 +const ODK_FILL = 5 +const ODK_HWAND = 7 +const ODK_HWOR = 8 +const ODK_HWPATCH = 4 +const ODK_NULL = 0 +const ODK_PAD = 3 +const ODK_REGINFO = 1 +const ODK_TAGS = 6 +const OEX_DISMISS = 524288 +const OEX_FPDBUG = 262144 +const OEX_FPU_DIV0 = 8 +const OEX_FPU_INEX = 1 +const OEX_FPU_INVAL = 16 +const OEX_FPU_MAX = 7936 +const OEX_FPU_MIN = 31 +const OEX_FPU_OFLO = 4 +const OEX_FPU_UFLO = 2 +const OEX_PAGE0 = 65536 +const OEX_PRECISEFP = 262144 +const OEX_SMM = 131072 +const OHWA0_R4KEOP_CHECKED = 1 +const OHWA1_R4KEOP_CLEAN = 2 +const OHW_R4KEOP = 1 +const OHW_R5KCVTL = 8 +const OHW_R5KEOP = 4 +const OHW_R8KPFETCH = 2 +const OPAD_POSTFIX = 2 +const OPAD_PREFIX = 1 +const OPAD_SYMBOL = 4 +const PF_ARM_ABS = 1073741824 +const PF_ARM_PI = 536870912 +const PF_ARM_SB = 268435456 +const PF_HP_CODE = 16777216 +const PF_HP_FAR_SHARED = 2097152 +const PF_HP_LAZYSWAP = 67108864 +const PF_HP_MODIFY = 33554432 +const PF_HP_NEAR_SHARED = 4194304 +const PF_HP_PAGE_SIZE = 1048576 +const PF_HP_SBP = 134217728 +const PF_IA_64_NORECOV = 2147483648 +const PF_MASKOS = 267386880 +const PF_MASKPROC = 4026531840 +const PF_MIPS_LOCAL = 268435456 +const PF_PARISC_SBP = 134217728 +const PF_R = 4 +const PF_W = 2 +const PF_X = 1 +const PN_XNUM = 65535 +const POLL_ERR = 4 +const POLL_HUP = 6 +const POLL_IN = 1 +const POLL_MSG = 3 +const POLL_OUT = 2 +const POLL_PRI = 5 +const PPC64_OPT_LOCALENTRY = 4 +const PPC64_OPT_MULTI_TOC = 2 +const PPC64_OPT_TLS = 1 +const PPC_FEATURE2_ARCH_2_07 = 2147483648 +const PPC_FEATURE2_ARCH_3_00 = 8388608 +const PPC_FEATURE2_DARN = 2097152 +const PPC_FEATURE2_DSCR = 536870912 +const PPC_FEATURE2_EBB = 268435456 +const PPC_FEATURE2_HAS_IEEE128 = 4194304 +const PPC_FEATURE2_HTM = 1073741824 +const PPC_FEATURE2_HTM_NOSC = 16777216 +const PPC_FEATURE2_HTM_NO_SUSPEND = 524288 +const PPC_FEATURE2_ISEL = 134217728 +const PPC_FEATURE2_SCV = 1048576 +const PPC_FEATURE2_TAR = 67108864 +const PPC_FEATURE2_VEC_CRYPTO = 33554432 +const PPC_FEATURE_32 = 2147483648 +const PPC_FEATURE_601_INSTR = 536870912 +const PPC_FEATURE_64 = 1073741824 +const PPC_FEATURE_ARCH_2_05 = 4096 +const PPC_FEATURE_ARCH_2_06 = 256 +const PPC_FEATURE_BOOKE = 32768 +const PPC_FEATURE_CELL = 65536 +const PPC_FEATURE_HAS_4xxMAC = 33554432 +const PPC_FEATURE_HAS_ALTIVEC = 268435456 +const PPC_FEATURE_HAS_DFP = 1024 +const PPC_FEATURE_HAS_EFP_DOUBLE = 2097152 +const PPC_FEATURE_HAS_EFP_SINGLE = 4194304 +const PPC_FEATURE_HAS_FPU = 134217728 +const PPC_FEATURE_HAS_MMU = 67108864 +const PPC_FEATURE_HAS_SPE = 8388608 +const PPC_FEATURE_HAS_VSX = 128 +const PPC_FEATURE_ICACHE_SNOOP = 8192 +const PPC_FEATURE_NO_TB = 1048576 +const PPC_FEATURE_PA6T = 2048 +const PPC_FEATURE_POWER4 = 524288 +const PPC_FEATURE_POWER5 = 262144 +const PPC_FEATURE_POWER5_PLUS = 131072 +const PPC_FEATURE_POWER6_EXT = 512 +const PPC_FEATURE_PPC_LE = 1 +const PPC_FEATURE_PSERIES_PERFMON_COMPAT = 64 +const PPC_FEATURE_SMT = 16384 +const PPC_FEATURE_TRUE_LE = 2 +const PPC_FEATURE_UNIFIED_CACHE = 16777216 +const PPC_OPT_TLS = 1 +const PRIO_MAX = 20 +const PRIO_MIN = -20 +const PRIO_PGRP = 1 +const PRIO_PROCESS = 0 +const PRIO_USER = 2 +const PT_ARM_EXIDX = 1879048193 +const PT_DYNAMIC = 2 +const PT_GNU_EH_FRAME = 1685382480 +const PT_GNU_PROPERTY = 1685382483 +const PT_GNU_RELRO = 1685382482 +const PT_GNU_STACK = 1685382481 +const PT_HIOS = 1879048191 +const PT_HIPROC = 2147483647 +const PT_HISUNW = 1879048191 +const PT_HP_CORE_COMM = 1610612740 +const PT_HP_CORE_KERNEL = 1610612739 +const PT_HP_CORE_LOADABLE = 1610612742 +const PT_HP_CORE_MMF = 1610612745 +const PT_HP_CORE_NONE = 1610612737 +const PT_HP_CORE_PROC = 1610612741 +const PT_HP_CORE_SHM = 1610612744 +const PT_HP_CORE_STACK = 1610612743 +const PT_HP_CORE_VERSION = 1610612738 +const PT_HP_FASTBIND = 1610612753 +const PT_HP_HSL_ANNOT = 1610612755 +const PT_HP_OPT_ANNOT = 1610612754 +const PT_HP_PARALLEL = 1610612752 +const PT_HP_STACK = 1610612756 +const PT_HP_TLS = 1610612736 +const PT_IA_64_ARCHEXT = 1879048192 +const PT_IA_64_HP_HSL_ANOT = 1610612755 +const PT_IA_64_HP_OPT_ANOT = 1610612754 +const PT_IA_64_HP_STACK = 1610612756 +const PT_IA_64_UNWIND = 1879048193 +const PT_INTERP = 3 +const PT_LOAD = 1 +const PT_LOOS = 1610612736 +const PT_LOPROC = 1879048192 +const PT_LOSUNW = 1879048186 +const PT_MIPS_ABIFLAGS = 1879048195 +const PT_MIPS_OPTIONS = 1879048194 +const PT_MIPS_REGINFO = 1879048192 +const PT_MIPS_RTPROC = 1879048193 +const PT_NOTE = 4 +const PT_NULL = 0 +const PT_NUM = 8 +const PT_PARISC_ARCHEXT = 1879048192 +const PT_PARISC_UNWIND = 1879048193 +const PT_PHDR = 6 +const PT_SHLIB = 5 +const PT_SUNWBSS = 1879048186 +const PT_SUNWSTACK = 1879048187 +const PT_TLS = 7 +const RAND_MAX = 2147483647 +const RHF_CORD = 4096 +const RHF_DEFAULT_DELAY_LOAD = 512 +const RHF_DELTA_C_PLUS_PLUS = 64 +const RHF_GUARANTEE_INIT = 32 +const RHF_GUARANTEE_START_INIT = 128 +const RHF_NONE = 0 +const RHF_NOTPOT = 2 +const RHF_NO_LIBRARY_REPLACEMENT = 4 +const RHF_NO_MOVE = 8 +const RHF_NO_UNRES_UNDEF = 8192 +const RHF_PIXIE = 256 +const RHF_QUICKSTART = 1 +const RHF_REQUICKSTART = 1024 +const RHF_REQUICKSTARTED = 2048 +const RHF_RLD_ORDER_SAFE = 16384 +const RHF_SGI_ONLY = 16 +const RLIMIT_AS = 9 +const RLIMIT_CORE = 4 +const RLIMIT_CPU = 0 +const RLIMIT_DATA = 2 +const RLIMIT_FSIZE = 1 +const RLIMIT_LOCKS = 10 +const RLIMIT_MEMLOCK = 8 +const RLIMIT_MSGQUEUE = 12 +const RLIMIT_NICE = 13 +const RLIMIT_NLIMITS = 16 +const RLIMIT_NOFILE = 7 +const RLIMIT_NPROC = 6 +const RLIMIT_RSS = 5 +const RLIMIT_RTPRIO = 14 +const RLIMIT_RTTIME = 15 +const RLIMIT_SIGPENDING = 11 +const RLIMIT_STACK = 3 +const RLIM_INFINITY = 18446744073709551615 +const RLIM_NLIMITS = 16 +const RLIM_SAVED_CUR = 18446744073709551615 +const RLIM_SAVED_MAX = 18446744073709551615 +const RUSAGE_CHILDREN = -1 +const RUSAGE_SELF = 0 +const RUSAGE_THREAD = 1 +const R_386_16 = 20 +const R_386_32 = 1 +const R_386_32PLT = 11 +const R_386_8 = 22 +const R_386_COPY = 5 +const R_386_GLOB_DAT = 6 +const R_386_GOT32 = 3 +const R_386_GOT32X = 43 +const R_386_GOTOFF = 9 +const R_386_GOTPC = 10 +const R_386_IRELATIVE = 42 +const R_386_JMP_SLOT = 7 +const R_386_NONE = 0 +const R_386_NUM = 44 +const R_386_PC16 = 21 +const R_386_PC32 = 2 +const R_386_PC8 = 23 +const R_386_PLT32 = 4 +const R_386_RELATIVE = 8 +const R_386_SIZE32 = 38 +const R_386_TLS_DESC = 41 +const R_386_TLS_DESC_CALL = 40 +const R_386_TLS_DTPMOD32 = 35 +const R_386_TLS_DTPOFF32 = 36 +const R_386_TLS_GD = 18 +const R_386_TLS_GD_32 = 24 +const R_386_TLS_GD_CALL = 26 +const R_386_TLS_GD_POP = 27 +const R_386_TLS_GD_PUSH = 25 +const R_386_TLS_GOTDESC = 39 +const R_386_TLS_GOTIE = 16 +const R_386_TLS_IE = 15 +const R_386_TLS_IE_32 = 33 +const R_386_TLS_LDM = 19 +const R_386_TLS_LDM_32 = 28 +const R_386_TLS_LDM_CALL = 30 +const R_386_TLS_LDM_POP = 31 +const R_386_TLS_LDM_PUSH = 29 +const R_386_TLS_LDO_32 = 32 +const R_386_TLS_LE = 17 +const R_386_TLS_LE_32 = 34 +const R_386_TLS_TPOFF = 14 +const R_386_TLS_TPOFF32 = 37 +const R_390_12 = 2 +const R_390_16 = 3 +const R_390_20 = 57 +const R_390_32 = 4 +const R_390_64 = 22 +const R_390_8 = 1 +const R_390_COPY = 9 +const R_390_GLOB_DAT = 10 +const R_390_GOT12 = 6 +const R_390_GOT16 = 15 +const R_390_GOT20 = 58 +const R_390_GOT32 = 7 +const R_390_GOT64 = 24 +const R_390_GOTENT = 26 +const R_390_GOTOFF16 = 27 +const R_390_GOTOFF32 = 13 +const R_390_GOTOFF64 = 28 +const R_390_GOTPC = 14 +const R_390_GOTPCDBL = 21 +const R_390_GOTPLT12 = 29 +const R_390_GOTPLT16 = 30 +const R_390_GOTPLT20 = 59 +const R_390_GOTPLT32 = 31 +const R_390_GOTPLT64 = 32 +const R_390_GOTPLTENT = 33 +const R_390_JMP_SLOT = 11 +const R_390_NONE = 0 +const R_390_NUM = 61 +const R_390_PC16 = 16 +const R_390_PC16DBL = 17 +const R_390_PC32 = 5 +const R_390_PC32DBL = 19 +const R_390_PC64 = 23 +const R_390_PLT16DBL = 18 +const R_390_PLT32 = 8 +const R_390_PLT32DBL = 20 +const R_390_PLT64 = 25 +const R_390_PLTOFF16 = 34 +const R_390_PLTOFF32 = 35 +const R_390_PLTOFF64 = 36 +const R_390_RELATIVE = 12 +const R_390_TLS_DTPMOD = 54 +const R_390_TLS_DTPOFF = 55 +const R_390_TLS_GD32 = 40 +const R_390_TLS_GD64 = 41 +const R_390_TLS_GDCALL = 38 +const R_390_TLS_GOTIE12 = 42 +const R_390_TLS_GOTIE20 = 60 +const R_390_TLS_GOTIE32 = 43 +const R_390_TLS_GOTIE64 = 44 +const R_390_TLS_IE32 = 47 +const R_390_TLS_IE64 = 48 +const R_390_TLS_IEENT = 49 +const R_390_TLS_LDCALL = 39 +const R_390_TLS_LDM32 = 45 +const R_390_TLS_LDM64 = 46 +const R_390_TLS_LDO32 = 52 +const R_390_TLS_LDO64 = 53 +const R_390_TLS_LE32 = 50 +const R_390_TLS_LE64 = 51 +const R_390_TLS_LOAD = 37 +const R_390_TLS_TPOFF = 56 +const R_68K_16 = 2 +const R_68K_32 = 1 +const R_68K_8 = 3 +const R_68K_COPY = 19 +const R_68K_GLOB_DAT = 20 +const R_68K_GOT16 = 8 +const R_68K_GOT16O = 11 +const R_68K_GOT32 = 7 +const R_68K_GOT32O = 10 +const R_68K_GOT8 = 9 +const R_68K_GOT8O = 12 +const R_68K_JMP_SLOT = 21 +const R_68K_NONE = 0 +const R_68K_NUM = 43 +const R_68K_PC16 = 5 +const R_68K_PC32 = 4 +const R_68K_PC8 = 6 +const R_68K_PLT16 = 14 +const R_68K_PLT16O = 17 +const R_68K_PLT32 = 13 +const R_68K_PLT32O = 16 +const R_68K_PLT8 = 15 +const R_68K_PLT8O = 18 +const R_68K_RELATIVE = 22 +const R_68K_TLS_DTPMOD32 = 40 +const R_68K_TLS_DTPREL32 = 41 +const R_68K_TLS_GD16 = 26 +const R_68K_TLS_GD32 = 25 +const R_68K_TLS_GD8 = 27 +const R_68K_TLS_IE16 = 35 +const R_68K_TLS_IE32 = 34 +const R_68K_TLS_IE8 = 36 +const R_68K_TLS_LDM16 = 29 +const R_68K_TLS_LDM32 = 28 +const R_68K_TLS_LDM8 = 30 +const R_68K_TLS_LDO16 = 32 +const R_68K_TLS_LDO32 = 31 +const R_68K_TLS_LDO8 = 33 +const R_68K_TLS_LE16 = 38 +const R_68K_TLS_LE32 = 37 +const R_68K_TLS_LE8 = 39 +const R_68K_TLS_TPREL32 = 42 +const R_AARCH64_ABS16 = 259 +const R_AARCH64_ABS32 = 258 +const R_AARCH64_ABS64 = 257 +const R_AARCH64_ADD_ABS_LO12_NC = 277 +const R_AARCH64_ADR_GOT_PAGE = 311 +const R_AARCH64_ADR_PREL_LO21 = 274 +const R_AARCH64_ADR_PREL_PG_HI21 = 275 +const R_AARCH64_ADR_PREL_PG_HI21_NC = 276 +const R_AARCH64_CALL26 = 283 +const R_AARCH64_CONDBR19 = 280 +const R_AARCH64_COPY = 1024 +const R_AARCH64_GLOB_DAT = 1025 +const R_AARCH64_GOTREL32 = 308 +const R_AARCH64_GOTREL64 = 307 +const R_AARCH64_GOT_LD_PREL19 = 309 +const R_AARCH64_JUMP26 = 282 +const R_AARCH64_JUMP_SLOT = 1026 +const R_AARCH64_LD64_GOTOFF_LO15 = 310 +const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +const R_AARCH64_LD64_GOT_LO12_NC = 312 +const R_AARCH64_LDST128_ABS_LO12_NC = 299 +const R_AARCH64_LDST16_ABS_LO12_NC = 284 +const R_AARCH64_LDST32_ABS_LO12_NC = 285 +const R_AARCH64_LDST64_ABS_LO12_NC = 286 +const R_AARCH64_LDST8_ABS_LO12_NC = 278 +const R_AARCH64_LD_PREL_LO19 = 273 +const R_AARCH64_MOVW_GOTOFF_G0 = 300 +const R_AARCH64_MOVW_GOTOFF_G0_NC = 301 +const R_AARCH64_MOVW_GOTOFF_G1 = 302 +const R_AARCH64_MOVW_GOTOFF_G1_NC = 303 +const R_AARCH64_MOVW_GOTOFF_G2 = 304 +const R_AARCH64_MOVW_GOTOFF_G2_NC = 305 +const R_AARCH64_MOVW_GOTOFF_G3 = 306 +const R_AARCH64_MOVW_PREL_G0 = 287 +const R_AARCH64_MOVW_PREL_G0_NC = 288 +const R_AARCH64_MOVW_PREL_G1 = 289 +const R_AARCH64_MOVW_PREL_G1_NC = 290 +const R_AARCH64_MOVW_PREL_G2 = 291 +const R_AARCH64_MOVW_PREL_G2_NC = 292 +const R_AARCH64_MOVW_PREL_G3 = 293 +const R_AARCH64_MOVW_SABS_G0 = 270 +const R_AARCH64_MOVW_SABS_G1 = 271 +const R_AARCH64_MOVW_SABS_G2 = 272 +const R_AARCH64_MOVW_UABS_G0 = 263 +const R_AARCH64_MOVW_UABS_G0_NC = 264 +const R_AARCH64_MOVW_UABS_G1 = 265 +const R_AARCH64_MOVW_UABS_G1_NC = 266 +const R_AARCH64_MOVW_UABS_G2 = 267 +const R_AARCH64_MOVW_UABS_G2_NC = 268 +const R_AARCH64_MOVW_UABS_G3 = 269 +const R_AARCH64_NONE = 0 +const R_AARCH64_P32_ABS32 = 1 +const R_AARCH64_P32_COPY = 180 +const R_AARCH64_P32_GLOB_DAT = 181 +const R_AARCH64_P32_IRELATIVE = 188 +const R_AARCH64_P32_JUMP_SLOT = 182 +const R_AARCH64_P32_RELATIVE = 183 +const R_AARCH64_P32_TLSDESC = 187 +const R_AARCH64_P32_TLS_DTPMOD = 184 +const R_AARCH64_P32_TLS_DTPREL = 185 +const R_AARCH64_P32_TLS_TPREL = 186 +const R_AARCH64_PREL16 = 262 +const R_AARCH64_PREL32 = 261 +const R_AARCH64_PREL64 = 260 +const R_AARCH64_RELATIVE = 1027 +const R_AARCH64_TLSDESC = 1031 +const R_AARCH64_TLSDESC_ADD = 568 +const R_AARCH64_TLSDESC_ADD_LO12 = 564 +const R_AARCH64_TLSDESC_ADR_PAGE21 = 562 +const R_AARCH64_TLSDESC_ADR_PREL21 = 561 +const R_AARCH64_TLSDESC_CALL = 569 +const R_AARCH64_TLSDESC_LD64_LO12 = 563 +const R_AARCH64_TLSDESC_LDR = 567 +const R_AARCH64_TLSDESC_LD_PREL19 = 560 +const R_AARCH64_TLSDESC_OFF_G0_NC = 566 +const R_AARCH64_TLSDESC_OFF_G1 = 565 +const R_AARCH64_TLSGD_ADD_LO12_NC = 514 +const R_AARCH64_TLSGD_ADR_PAGE21 = 513 +const R_AARCH64_TLSGD_ADR_PREL21 = 512 +const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +const R_AARCH64_TLSGD_MOVW_G1 = 515 +const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541 +const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542 +const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539 +const R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530 +const R_AARCH64_TLSLD_ADD_LO12_NC = 519 +const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +const R_AARCH64_TLSLD_ADR_PREL21 = 517 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532 +const R_AARCH64_TLSLD_LD_PREL19 = 522 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525 +const R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523 +const R_AARCH64_TLSLD_MOVW_G0_NC = 521 +const R_AARCH64_TLSLD_MOVW_G1 = 520 +const R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549 +const R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550 +const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553 +const R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547 +const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548 +const R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545 +const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546 +const R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544 +const R_AARCH64_TLS_DTPMOD = 1028 +const R_AARCH64_TLS_DTPMOD64 = 1028 +const R_AARCH64_TLS_DTPREL = 1029 +const R_AARCH64_TLS_DTPREL64 = 1029 +const R_AARCH64_TLS_TPREL = 1030 +const R_AARCH64_TLS_TPREL64 = 1030 +const R_AARCH64_TSTBR14 = 279 +const R_ALPHA_BRADDR = 7 +const R_ALPHA_COPY = 24 +const R_ALPHA_DTPMOD64 = 31 +const R_ALPHA_DTPREL16 = 36 +const R_ALPHA_DTPREL64 = 33 +const R_ALPHA_DTPRELHI = 34 +const R_ALPHA_DTPRELLO = 35 +const R_ALPHA_GLOB_DAT = 25 +const R_ALPHA_GOTDTPREL = 32 +const R_ALPHA_GOTTPREL = 37 +const R_ALPHA_GPDISP = 6 +const R_ALPHA_GPREL16 = 19 +const R_ALPHA_GPREL32 = 3 +const R_ALPHA_GPRELHIGH = 17 +const R_ALPHA_GPRELLOW = 18 +const R_ALPHA_HINT = 8 +const R_ALPHA_JMP_SLOT = 26 +const R_ALPHA_LITERAL = 4 +const R_ALPHA_LITUSE = 5 +const R_ALPHA_NONE = 0 +const R_ALPHA_NUM = 46 +const R_ALPHA_REFLONG = 1 +const R_ALPHA_REFQUAD = 2 +const R_ALPHA_RELATIVE = 27 +const R_ALPHA_SREL16 = 9 +const R_ALPHA_SREL32 = 10 +const R_ALPHA_SREL64 = 11 +const R_ALPHA_TLSGD = 29 +const R_ALPHA_TLS_GD_HI = 28 +const R_ALPHA_TLS_LDM = 30 +const R_ALPHA_TPREL16 = 41 +const R_ALPHA_TPREL64 = 38 +const R_ALPHA_TPRELHI = 39 +const R_ALPHA_TPRELLO = 40 +const R_ARM_ABS12 = 6 +const R_ARM_ABS16 = 5 +const R_ARM_ABS32 = 2 +const R_ARM_ABS32_NOI = 55 +const R_ARM_ABS8 = 8 +const R_ARM_ALU_PCREL_15_8 = 33 +const R_ARM_ALU_PCREL_23_15 = 34 +const R_ARM_ALU_PCREL_7_0 = 32 +const R_ARM_ALU_PC_G0 = 58 +const R_ARM_ALU_PC_G0_NC = 57 +const R_ARM_ALU_PC_G1 = 60 +const R_ARM_ALU_PC_G1_NC = 59 +const R_ARM_ALU_PC_G2 = 61 +const R_ARM_ALU_SBREL_19_12 = 36 +const R_ARM_ALU_SBREL_27_20 = 37 +const R_ARM_ALU_SB_G0 = 71 +const R_ARM_ALU_SB_G0_NC = 70 +const R_ARM_ALU_SB_G1 = 73 +const R_ARM_ALU_SB_G1_NC = 72 +const R_ARM_ALU_SB_G2 = 74 +const R_ARM_AMP_VCALL9 = 12 +const R_ARM_BASE_ABS = 31 +const R_ARM_CALL = 28 +const R_ARM_COPY = 20 +const R_ARM_GLOB_DAT = 21 +const R_ARM_GNU_VTENTRY = 100 +const R_ARM_GNU_VTINHERIT = 101 +const R_ARM_GOT32 = 26 +const R_ARM_GOTOFF = 24 +const R_ARM_GOTOFF12 = 98 +const R_ARM_GOTPC = 25 +const R_ARM_GOTRELAX = 99 +const R_ARM_GOT_ABS = 95 +const R_ARM_GOT_BREL12 = 97 +const R_ARM_GOT_PREL = 96 +const R_ARM_IRELATIVE = 160 +const R_ARM_JUMP24 = 29 +const R_ARM_JUMP_SLOT = 22 +const R_ARM_LDC_PC_G0 = 67 +const R_ARM_LDC_PC_G1 = 68 +const R_ARM_LDC_PC_G2 = 69 +const R_ARM_LDC_SB_G0 = 81 +const R_ARM_LDC_SB_G1 = 82 +const R_ARM_LDC_SB_G2 = 83 +const R_ARM_LDRS_PC_G0 = 64 +const R_ARM_LDRS_PC_G1 = 65 +const R_ARM_LDRS_PC_G2 = 66 +const R_ARM_LDRS_SB_G0 = 78 +const R_ARM_LDRS_SB_G1 = 79 +const R_ARM_LDRS_SB_G2 = 80 +const R_ARM_LDR_PC_G1 = 62 +const R_ARM_LDR_PC_G2 = 63 +const R_ARM_LDR_SBREL_11_0 = 35 +const R_ARM_LDR_SB_G0 = 75 +const R_ARM_LDR_SB_G1 = 76 +const R_ARM_LDR_SB_G2 = 77 +const R_ARM_ME_TOO = 128 +const R_ARM_MOVT_ABS = 44 +const R_ARM_MOVT_BREL = 85 +const R_ARM_MOVT_PREL = 46 +const R_ARM_MOVW_ABS_NC = 43 +const R_ARM_MOVW_BREL = 86 +const R_ARM_MOVW_BREL_NC = 84 +const R_ARM_MOVW_PREL_NC = 45 +const R_ARM_NONE = 0 +const R_ARM_NUM = 256 +const R_ARM_PC13 = 4 +const R_ARM_PC24 = 1 +const R_ARM_PLT32 = 27 +const R_ARM_PLT32_ABS = 94 +const R_ARM_PREL31 = 42 +const R_ARM_RABS22 = 253 +const R_ARM_RBASE = 255 +const R_ARM_REL32 = 3 +const R_ARM_REL32_NOI = 56 +const R_ARM_RELATIVE = 23 +const R_ARM_RPC24 = 254 +const R_ARM_RREL32 = 252 +const R_ARM_RSBREL32 = 250 +const R_ARM_RXPC25 = 249 +const R_ARM_SBREL31 = 39 +const R_ARM_SBREL32 = 9 +const R_ARM_TARGET1 = 38 +const R_ARM_TARGET2 = 41 +const R_ARM_THM_ABS5 = 7 +const R_ARM_THM_ALU_PREL_11_0 = 53 +const R_ARM_THM_GOT_BREL12 = 131 +const R_ARM_THM_JUMP19 = 51 +const R_ARM_THM_JUMP24 = 30 +const R_ARM_THM_JUMP6 = 52 +const R_ARM_THM_MOVT_ABS = 48 +const R_ARM_THM_MOVT_BREL = 88 +const R_ARM_THM_MOVT_PREL = 50 +const R_ARM_THM_MOVW_ABS_NC = 47 +const R_ARM_THM_MOVW_BREL = 89 +const R_ARM_THM_MOVW_BREL_NC = 87 +const R_ARM_THM_MOVW_PREL_NC = 49 +const R_ARM_THM_PC11 = 102 +const R_ARM_THM_PC12 = 54 +const R_ARM_THM_PC22 = 10 +const R_ARM_THM_PC8 = 11 +const R_ARM_THM_PC9 = 103 +const R_ARM_THM_RPC22 = 251 +const R_ARM_THM_SWI8 = 14 +const R_ARM_THM_TLS_CALL = 93 +const R_ARM_THM_TLS_DESCSEQ = 129 +const R_ARM_THM_TLS_DESCSEQ16 = 129 +const R_ARM_THM_TLS_DESCSEQ32 = 130 +const R_ARM_THM_XPC22 = 16 +const R_ARM_TLS_CALL = 91 +const R_ARM_TLS_DESC = 13 +const R_ARM_TLS_DESCSEQ = 92 +const R_ARM_TLS_DTPMOD32 = 17 +const R_ARM_TLS_DTPOFF32 = 18 +const R_ARM_TLS_GD32 = 104 +const R_ARM_TLS_GOTDESC = 90 +const R_ARM_TLS_IE12GP = 111 +const R_ARM_TLS_IE32 = 107 +const R_ARM_TLS_LDM32 = 105 +const R_ARM_TLS_LDO12 = 109 +const R_ARM_TLS_LDO32 = 106 +const R_ARM_TLS_LE12 = 110 +const R_ARM_TLS_LE32 = 108 +const R_ARM_TLS_TPOFF32 = 19 +const R_ARM_V4BX = 40 +const R_ARM_XPC25 = 15 +const R_BPF_MAP_FD = 1 +const R_BPF_NONE = 0 +const R_CKCORE_ADDR32 = 1 +const R_CKCORE_ADDRGOT = 17 +const R_CKCORE_ADDRGOT_HI16 = 36 +const R_CKCORE_ADDRGOT_LO16 = 37 +const R_CKCORE_ADDRPLT = 18 +const R_CKCORE_ADDRPLT_HI16 = 38 +const R_CKCORE_ADDRPLT_LO16 = 39 +const R_CKCORE_ADDR_HI16 = 24 +const R_CKCORE_ADDR_LO16 = 25 +const R_CKCORE_COPY = 10 +const R_CKCORE_DOFFSET_IMM18 = 44 +const R_CKCORE_DOFFSET_IMM18BY2 = 45 +const R_CKCORE_DOFFSET_IMM18BY4 = 46 +const R_CKCORE_DOFFSET_LO16 = 42 +const R_CKCORE_GLOB_DAT = 11 +const R_CKCORE_GOT12 = 30 +const R_CKCORE_GOT32 = 15 +const R_CKCORE_GOTOFF = 13 +const R_CKCORE_GOTOFF_HI16 = 28 +const R_CKCORE_GOTOFF_LO16 = 29 +const R_CKCORE_GOTPC = 14 +const R_CKCORE_GOTPC_HI16 = 26 +const R_CKCORE_GOTPC_LO16 = 27 +const R_CKCORE_GOT_HI16 = 31 +const R_CKCORE_GOT_IMM18BY4 = 48 +const R_CKCORE_GOT_LO16 = 32 +const R_CKCORE_JUMP_SLOT = 12 +const R_CKCORE_NONE = 0 +const R_CKCORE_PCREL32 = 5 +const R_CKCORE_PCRELIMM11BY2 = 3 +const R_CKCORE_PCRELIMM8BY4 = 2 +const R_CKCORE_PCRELJSR_IMM11BY2 = 6 +const R_CKCORE_PCREL_IMM10BY2 = 22 +const R_CKCORE_PCREL_IMM10BY4 = 23 +const R_CKCORE_PCREL_IMM16BY2 = 20 +const R_CKCORE_PCREL_IMM16BY4 = 21 +const R_CKCORE_PCREL_IMM18BY2 = 43 +const R_CKCORE_PCREL_IMM26BY2 = 19 +const R_CKCORE_PCREL_IMM7BY4 = 50 +const R_CKCORE_PCREL_JSR_IMM26BY2 = 40 +const R_CKCORE_PLT12 = 33 +const R_CKCORE_PLT32 = 16 +const R_CKCORE_PLT_HI16 = 34 +const R_CKCORE_PLT_IMM18BY4 = 49 +const R_CKCORE_PLT_LO16 = 35 +const R_CKCORE_RELATIVE = 9 +const R_CKCORE_TLS_DTPMOD32 = 56 +const R_CKCORE_TLS_DTPOFF32 = 57 +const R_CKCORE_TLS_GD32 = 53 +const R_CKCORE_TLS_IE32 = 52 +const R_CKCORE_TLS_LDM32 = 54 +const R_CKCORE_TLS_LDO32 = 55 +const R_CKCORE_TLS_LE32 = 51 +const R_CKCORE_TLS_TPOFF32 = 58 +const R_CKCORE_TOFFSET_LO16 = 41 +const R_CRIS_16 = 2 +const R_CRIS_16_GOT = 13 +const R_CRIS_16_GOTPLT = 15 +const R_CRIS_16_PCREL = 5 +const R_CRIS_32 = 3 +const R_CRIS_32_GOT = 14 +const R_CRIS_32_GOTPLT = 16 +const R_CRIS_32_GOTREL = 17 +const R_CRIS_32_PCREL = 6 +const R_CRIS_32_PLT_GOTREL = 18 +const R_CRIS_32_PLT_PCREL = 19 +const R_CRIS_8 = 1 +const R_CRIS_8_PCREL = 4 +const R_CRIS_COPY = 9 +const R_CRIS_GLOB_DAT = 10 +const R_CRIS_GNU_VTENTRY = 8 +const R_CRIS_GNU_VTINHERIT = 7 +const R_CRIS_JUMP_SLOT = 11 +const R_CRIS_NONE = 0 +const R_CRIS_NUM = 20 +const R_CRIS_RELATIVE = 12 +const R_IA64_COPY = 132 +const R_IA64_DIR32LSB = 37 +const R_IA64_DIR32MSB = 36 +const R_IA64_DIR64LSB = 39 +const R_IA64_DIR64MSB = 38 +const R_IA64_DTPMOD64LSB = 167 +const R_IA64_DTPMOD64MSB = 166 +const R_IA64_DTPREL14 = 177 +const R_IA64_DTPREL22 = 178 +const R_IA64_DTPREL32LSB = 181 +const R_IA64_DTPREL32MSB = 180 +const R_IA64_DTPREL64I = 179 +const R_IA64_DTPREL64LSB = 183 +const R_IA64_DTPREL64MSB = 182 +const R_IA64_FPTR32LSB = 69 +const R_IA64_FPTR32MSB = 68 +const R_IA64_FPTR64I = 67 +const R_IA64_FPTR64LSB = 71 +const R_IA64_FPTR64MSB = 70 +const R_IA64_GPREL22 = 42 +const R_IA64_GPREL32LSB = 45 +const R_IA64_GPREL32MSB = 44 +const R_IA64_GPREL64I = 43 +const R_IA64_GPREL64LSB = 47 +const R_IA64_GPREL64MSB = 46 +const R_IA64_IMM14 = 33 +const R_IA64_IMM22 = 34 +const R_IA64_IMM64 = 35 +const R_IA64_IPLTLSB = 129 +const R_IA64_IPLTMSB = 128 +const R_IA64_LDXMOV = 135 +const R_IA64_LTOFF22 = 50 +const R_IA64_LTOFF22X = 134 +const R_IA64_LTOFF64I = 51 +const R_IA64_LTOFF_DTPMOD22 = 170 +const R_IA64_LTOFF_DTPREL22 = 186 +const R_IA64_LTOFF_FPTR22 = 82 +const R_IA64_LTOFF_FPTR32LSB = 85 +const R_IA64_LTOFF_FPTR32MSB = 84 +const R_IA64_LTOFF_FPTR64I = 83 +const R_IA64_LTOFF_FPTR64LSB = 87 +const R_IA64_LTOFF_FPTR64MSB = 86 +const R_IA64_LTOFF_TPREL22 = 154 +const R_IA64_LTV32LSB = 117 +const R_IA64_LTV32MSB = 116 +const R_IA64_LTV64LSB = 119 +const R_IA64_LTV64MSB = 118 +const R_IA64_NONE = 0 +const R_IA64_PCREL21B = 73 +const R_IA64_PCREL21BI = 121 +const R_IA64_PCREL21F = 75 +const R_IA64_PCREL21M = 74 +const R_IA64_PCREL22 = 122 +const R_IA64_PCREL32LSB = 77 +const R_IA64_PCREL32MSB = 76 +const R_IA64_PCREL60B = 72 +const R_IA64_PCREL64I = 123 +const R_IA64_PCREL64LSB = 79 +const R_IA64_PCREL64MSB = 78 +const R_IA64_PLTOFF22 = 58 +const R_IA64_PLTOFF64I = 59 +const R_IA64_PLTOFF64LSB = 63 +const R_IA64_PLTOFF64MSB = 62 +const R_IA64_REL32LSB = 109 +const R_IA64_REL32MSB = 108 +const R_IA64_REL64LSB = 111 +const R_IA64_REL64MSB = 110 +const R_IA64_SECREL32LSB = 101 +const R_IA64_SECREL32MSB = 100 +const R_IA64_SECREL64LSB = 103 +const R_IA64_SECREL64MSB = 102 +const R_IA64_SEGREL32LSB = 93 +const R_IA64_SEGREL32MSB = 92 +const R_IA64_SEGREL64LSB = 95 +const R_IA64_SEGREL64MSB = 94 +const R_IA64_SUB = 133 +const R_IA64_TPREL14 = 145 +const R_IA64_TPREL22 = 146 +const R_IA64_TPREL64I = 147 +const R_IA64_TPREL64LSB = 151 +const R_IA64_TPREL64MSB = 150 +const R_LARCH_32 = 1 +const R_LARCH_32_PCREL = 99 +const R_LARCH_64 = 2 +const R_LARCH_ABS64_HI12 = 70 +const R_LARCH_ABS64_LO20 = 69 +const R_LARCH_ABS_HI20 = 67 +const R_LARCH_ABS_LO12 = 68 +const R_LARCH_ADD16 = 48 +const R_LARCH_ADD24 = 49 +const R_LARCH_ADD32 = 50 +const R_LARCH_ADD64 = 51 +const R_LARCH_ADD8 = 47 +const R_LARCH_B16 = 64 +const R_LARCH_B21 = 65 +const R_LARCH_B26 = 66 +const R_LARCH_COPY = 4 +const R_LARCH_GNU_VTENTRY = 58 +const R_LARCH_GNU_VTINHERIT = 57 +const R_LARCH_GOT64_HI12 = 82 +const R_LARCH_GOT64_LO20 = 81 +const R_LARCH_GOT64_PC_HI12 = 78 +const R_LARCH_GOT64_PC_LO20 = 77 +const R_LARCH_GOT_HI20 = 79 +const R_LARCH_GOT_LO12 = 80 +const R_LARCH_GOT_PC_HI20 = 75 +const R_LARCH_GOT_PC_LO12 = 76 +const R_LARCH_IRELATIVE = 12 +const R_LARCH_JUMP_SLOT = 5 +const R_LARCH_MARK_LA = 20 +const R_LARCH_MARK_PCREL = 21 +const R_LARCH_NONE = 0 +const R_LARCH_PCALA64_HI12 = 74 +const R_LARCH_PCALA64_LO20 = 73 +const R_LARCH_PCALA_HI20 = 71 +const R_LARCH_PCALA_LO12 = 72 +const R_LARCH_RELATIVE = 3 +const R_LARCH_RELAX = 100 +const R_LARCH_SOP_ADD = 35 +const R_LARCH_SOP_AND = 36 +const R_LARCH_SOP_ASSERT = 30 +const R_LARCH_SOP_IF_ELSE = 37 +const R_LARCH_SOP_NOT = 31 +const R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45 +const R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44 +const R_LARCH_SOP_POP_32_S_10_12 = 40 +const R_LARCH_SOP_POP_32_S_10_16 = 41 +const R_LARCH_SOP_POP_32_S_10_16_S2 = 42 +const R_LARCH_SOP_POP_32_S_10_5 = 38 +const R_LARCH_SOP_POP_32_S_5_20 = 43 +const R_LARCH_SOP_POP_32_U = 46 +const R_LARCH_SOP_POP_32_U_10_12 = 39 +const R_LARCH_SOP_PUSH_ABSOLUTE = 23 +const R_LARCH_SOP_PUSH_DUP = 24 +const R_LARCH_SOP_PUSH_GPREL = 25 +const R_LARCH_SOP_PUSH_PCREL = 22 +const R_LARCH_SOP_PUSH_PLT_PCREL = 29 +const R_LARCH_SOP_PUSH_TLS_GD = 28 +const R_LARCH_SOP_PUSH_TLS_GOT = 27 +const R_LARCH_SOP_PUSH_TLS_TPREL = 26 +const R_LARCH_SOP_SL = 33 +const R_LARCH_SOP_SR = 34 +const R_LARCH_SOP_SUB = 32 +const R_LARCH_SUB16 = 53 +const R_LARCH_SUB24 = 54 +const R_LARCH_SUB32 = 55 +const R_LARCH_SUB64 = 56 +const R_LARCH_SUB8 = 52 +const R_LARCH_TLS_DTPMOD32 = 6 +const R_LARCH_TLS_DTPMOD64 = 7 +const R_LARCH_TLS_DTPREL32 = 8 +const R_LARCH_TLS_DTPREL64 = 9 +const R_LARCH_TLS_GD_HI20 = 98 +const R_LARCH_TLS_GD_PC_HI20 = 97 +const R_LARCH_TLS_IE64_HI12 = 94 +const R_LARCH_TLS_IE64_LO20 = 93 +const R_LARCH_TLS_IE64_PC_HI12 = 90 +const R_LARCH_TLS_IE64_PC_LO20 = 89 +const R_LARCH_TLS_IE_HI20 = 91 +const R_LARCH_TLS_IE_LO12 = 92 +const R_LARCH_TLS_IE_PC_HI20 = 87 +const R_LARCH_TLS_IE_PC_LO12 = 88 +const R_LARCH_TLS_LD_HI20 = 96 +const R_LARCH_TLS_LD_PC_HI20 = 95 +const R_LARCH_TLS_LE64_HI12 = 86 +const R_LARCH_TLS_LE64_LO20 = 85 +const R_LARCH_TLS_LE_HI20 = 83 +const R_LARCH_TLS_LE_LO12 = 84 +const R_LARCH_TLS_TPREL32 = 10 +const R_LARCH_TLS_TPREL64 = 11 +const R_M32R_10_PCREL = 4 +const R_M32R_10_PCREL_RELA = 36 +const R_M32R_16 = 1 +const R_M32R_16_RELA = 33 +const R_M32R_18_PCREL = 5 +const R_M32R_18_PCREL_RELA = 37 +const R_M32R_24 = 3 +const R_M32R_24_RELA = 35 +const R_M32R_26_PCREL = 6 +const R_M32R_26_PCREL_RELA = 38 +const R_M32R_26_PLTREL = 49 +const R_M32R_32 = 2 +const R_M32R_32_RELA = 34 +const R_M32R_COPY = 50 +const R_M32R_GLOB_DAT = 51 +const R_M32R_GNU_VTENTRY = 12 +const R_M32R_GNU_VTINHERIT = 11 +const R_M32R_GOT16_HI_SLO = 57 +const R_M32R_GOT16_HI_ULO = 56 +const R_M32R_GOT16_LO = 58 +const R_M32R_GOT24 = 48 +const R_M32R_GOTOFF = 54 +const R_M32R_GOTOFF_HI_SLO = 63 +const R_M32R_GOTOFF_HI_ULO = 62 +const R_M32R_GOTOFF_LO = 64 +const R_M32R_GOTPC24 = 55 +const R_M32R_GOTPC_HI_SLO = 60 +const R_M32R_GOTPC_HI_ULO = 59 +const R_M32R_GOTPC_LO = 61 +const R_M32R_HI16_SLO = 8 +const R_M32R_HI16_SLO_RELA = 40 +const R_M32R_HI16_ULO = 7 +const R_M32R_HI16_ULO_RELA = 39 +const R_M32R_JMP_SLOT = 52 +const R_M32R_LO16 = 9 +const R_M32R_LO16_RELA = 41 +const R_M32R_NONE = 0 +const R_M32R_NUM = 256 +const R_M32R_REL32 = 45 +const R_M32R_RELATIVE = 53 +const R_M32R_RELA_GNU_VTENTRY = 44 +const R_M32R_RELA_GNU_VTINHERIT = 43 +const R_M32R_SDA16 = 10 +const R_M32R_SDA16_RELA = 42 +const R_MICROBLAZE_32 = 1 +const R_MICROBLAZE_32_LO = 6 +const R_MICROBLAZE_32_PCREL = 2 +const R_MICROBLAZE_32_PCREL_LO = 4 +const R_MICROBLAZE_32_SYM_OP_SYM = 10 +const R_MICROBLAZE_64 = 5 +const R_MICROBLAZE_64_NONE = 9 +const R_MICROBLAZE_64_PCREL = 3 +const R_MICROBLAZE_COPY = 21 +const R_MICROBLAZE_GLOB_DAT = 18 +const R_MICROBLAZE_GNU_VTENTRY = 12 +const R_MICROBLAZE_GNU_VTINHERIT = 11 +const R_MICROBLAZE_GOTOFF_32 = 20 +const R_MICROBLAZE_GOTOFF_64 = 19 +const R_MICROBLAZE_GOTPC_64 = 13 +const R_MICROBLAZE_GOT_64 = 14 +const R_MICROBLAZE_JUMP_SLOT = 17 +const R_MICROBLAZE_NONE = 0 +const R_MICROBLAZE_PLT_64 = 15 +const R_MICROBLAZE_REL = 16 +const R_MICROBLAZE_SRO32 = 7 +const R_MICROBLAZE_SRW32 = 8 +const R_MICROBLAZE_TLS = 22 +const R_MICROBLAZE_TLSDTPMOD32 = 25 +const R_MICROBLAZE_TLSDTPREL32 = 26 +const R_MICROBLAZE_TLSDTPREL64 = 27 +const R_MICROBLAZE_TLSGD = 23 +const R_MICROBLAZE_TLSGOTTPREL32 = 28 +const R_MICROBLAZE_TLSLD = 24 +const R_MICROBLAZE_TLSTPREL32 = 29 +const R_MIPS_16 = 1 +const R_MIPS_26 = 4 +const R_MIPS_32 = 2 +const R_MIPS_64 = 18 +const R_MIPS_ADD_IMMEDIATE = 34 +const R_MIPS_CALL16 = 11 +const R_MIPS_CALL_HI16 = 30 +const R_MIPS_CALL_LO16 = 31 +const R_MIPS_COPY = 126 +const R_MIPS_DELETE = 27 +const R_MIPS_GLOB_DAT = 51 +const R_MIPS_GOT16 = 9 +const R_MIPS_GOT_DISP = 19 +const R_MIPS_GOT_HI16 = 22 +const R_MIPS_GOT_LO16 = 23 +const R_MIPS_GOT_OFST = 21 +const R_MIPS_GOT_PAGE = 20 +const R_MIPS_GPREL16 = 7 +const R_MIPS_GPREL32 = 12 +const R_MIPS_HI16 = 5 +const R_MIPS_HIGHER = 28 +const R_MIPS_HIGHEST = 29 +const R_MIPS_INSERT_A = 25 +const R_MIPS_INSERT_B = 26 +const R_MIPS_JALR = 37 +const R_MIPS_JUMP_SLOT = 127 +const R_MIPS_LITERAL = 8 +const R_MIPS_LO16 = 6 +const R_MIPS_NONE = 0 +const R_MIPS_NUM = 128 +const R_MIPS_PC16 = 10 +const R_MIPS_PJUMP = 35 +const R_MIPS_REL16 = 33 +const R_MIPS_REL32 = 3 +const R_MIPS_RELGOT = 36 +const R_MIPS_SCN_DISP = 32 +const R_MIPS_SHIFT5 = 16 +const R_MIPS_SHIFT6 = 17 +const R_MIPS_SUB = 24 +const R_MIPS_TLS_DTPMOD32 = 38 +const R_MIPS_TLS_DTPMOD64 = 40 +const R_MIPS_TLS_DTPREL32 = 39 +const R_MIPS_TLS_DTPREL64 = 41 +const R_MIPS_TLS_DTPREL_HI16 = 44 +const R_MIPS_TLS_DTPREL_LO16 = 45 +const R_MIPS_TLS_GD = 42 +const R_MIPS_TLS_GOTTPREL = 46 +const R_MIPS_TLS_LDM = 43 +const R_MIPS_TLS_TPREL32 = 47 +const R_MIPS_TLS_TPREL64 = 48 +const R_MIPS_TLS_TPREL_HI16 = 49 +const R_MIPS_TLS_TPREL_LO16 = 50 +const R_MN10300_16 = 2 +const R_MN10300_24 = 9 +const R_MN10300_32 = 1 +const R_MN10300_8 = 3 +const R_MN10300_COPY = 20 +const R_MN10300_GLOB_DAT = 21 +const R_MN10300_GNU_VTENTRY = 8 +const R_MN10300_GNU_VTINHERIT = 7 +const R_MN10300_GOT16 = 19 +const R_MN10300_GOT24 = 18 +const R_MN10300_GOT32 = 17 +const R_MN10300_GOTOFF16 = 14 +const R_MN10300_GOTOFF24 = 13 +const R_MN10300_GOTOFF32 = 12 +const R_MN10300_GOTPC16 = 11 +const R_MN10300_GOTPC32 = 10 +const R_MN10300_JMP_SLOT = 22 +const R_MN10300_NONE = 0 +const R_MN10300_NUM = 24 +const R_MN10300_PCREL16 = 5 +const R_MN10300_PCREL32 = 4 +const R_MN10300_PCREL8 = 6 +const R_MN10300_PLT16 = 16 +const R_MN10300_PLT32 = 15 +const R_MN10300_RELATIVE = 23 +const R_NIOS2_ALIGN = 21 +const R_NIOS2_BFD_RELOC_16 = 13 +const R_NIOS2_BFD_RELOC_32 = 12 +const R_NIOS2_BFD_RELOC_8 = 14 +const R_NIOS2_CACHE_OPX = 6 +const R_NIOS2_CALL16 = 23 +const R_NIOS2_CALL26 = 4 +const R_NIOS2_CALL26_NOAT = 41 +const R_NIOS2_CALLR = 20 +const R_NIOS2_CALL_HA = 45 +const R_NIOS2_CALL_LO = 44 +const R_NIOS2_CJMP = 19 +const R_NIOS2_COPY = 36 +const R_NIOS2_GLOB_DAT = 37 +const R_NIOS2_GNU_VTENTRY = 17 +const R_NIOS2_GNU_VTINHERIT = 16 +const R_NIOS2_GOT16 = 22 +const R_NIOS2_GOTOFF = 40 +const R_NIOS2_GOTOFF_HA = 25 +const R_NIOS2_GOTOFF_LO = 24 +const R_NIOS2_GOT_HA = 43 +const R_NIOS2_GOT_LO = 42 +const R_NIOS2_GPREL = 15 +const R_NIOS2_HI16 = 9 +const R_NIOS2_HIADJ16 = 11 +const R_NIOS2_IMM5 = 5 +const R_NIOS2_IMM6 = 7 +const R_NIOS2_IMM8 = 8 +const R_NIOS2_JUMP_SLOT = 38 +const R_NIOS2_LO16 = 10 +const R_NIOS2_NONE = 0 +const R_NIOS2_PCREL16 = 3 +const R_NIOS2_PCREL_HA = 27 +const R_NIOS2_PCREL_LO = 26 +const R_NIOS2_RELATIVE = 39 +const R_NIOS2_S16 = 1 +const R_NIOS2_TLS_DTPMOD = 33 +const R_NIOS2_TLS_DTPREL = 34 +const R_NIOS2_TLS_GD16 = 28 +const R_NIOS2_TLS_IE16 = 31 +const R_NIOS2_TLS_LDM16 = 29 +const R_NIOS2_TLS_LDO16 = 30 +const R_NIOS2_TLS_LE16 = 32 +const R_NIOS2_TLS_TPREL = 35 +const R_NIOS2_U16 = 2 +const R_NIOS2_UJMP = 18 +const R_OR1K_16 = 2 +const R_OR1K_16_PCREL = 10 +const R_OR1K_32 = 1 +const R_OR1K_32_PCREL = 9 +const R_OR1K_8 = 3 +const R_OR1K_8_PCREL = 11 +const R_OR1K_COPY = 18 +const R_OR1K_GLOB_DAT = 19 +const R_OR1K_GNU_VTENTRY = 7 +const R_OR1K_GNU_VTINHERIT = 8 +const R_OR1K_GOT16 = 14 +const R_OR1K_GOTOFF_HI16 = 16 +const R_OR1K_GOTOFF_LO16 = 17 +const R_OR1K_GOTPC_HI16 = 12 +const R_OR1K_GOTPC_LO16 = 13 +const R_OR1K_HI_16_IN_INSN = 5 +const R_OR1K_INSN_REL_26 = 6 +const R_OR1K_JMP_SLOT = 20 +const R_OR1K_LO_16_IN_INSN = 4 +const R_OR1K_NONE = 0 +const R_OR1K_PLT26 = 15 +const R_OR1K_RELATIVE = 21 +const R_OR1K_TLS_DTPMOD = 34 +const R_OR1K_TLS_DTPOFF = 33 +const R_OR1K_TLS_GD_HI16 = 22 +const R_OR1K_TLS_GD_LO16 = 23 +const R_OR1K_TLS_IE_HI16 = 28 +const R_OR1K_TLS_IE_LO16 = 29 +const R_OR1K_TLS_LDM_HI16 = 24 +const R_OR1K_TLS_LDM_LO16 = 25 +const R_OR1K_TLS_LDO_HI16 = 26 +const R_OR1K_TLS_LDO_LO16 = 27 +const R_OR1K_TLS_LE_HI16 = 30 +const R_OR1K_TLS_LE_LO16 = 31 +const R_OR1K_TLS_TPOFF = 32 +const R_PARISC_COPY = 128 +const R_PARISC_DIR14DR = 84 +const R_PARISC_DIR14R = 6 +const R_PARISC_DIR14WR = 83 +const R_PARISC_DIR16DF = 87 +const R_PARISC_DIR16F = 85 +const R_PARISC_DIR16WF = 86 +const R_PARISC_DIR17F = 4 +const R_PARISC_DIR17R = 3 +const R_PARISC_DIR21L = 2 +const R_PARISC_DIR32 = 1 +const R_PARISC_DIR64 = 80 +const R_PARISC_DPREL14R = 22 +const R_PARISC_DPREL21L = 18 +const R_PARISC_EPLT = 130 +const R_PARISC_FPTR64 = 64 +const R_PARISC_GNU_VTENTRY = 232 +const R_PARISC_GNU_VTINHERIT = 233 +const R_PARISC_GPREL14DR = 92 +const R_PARISC_GPREL14R = 30 +const R_PARISC_GPREL14WR = 91 +const R_PARISC_GPREL16DF = 95 +const R_PARISC_GPREL16F = 93 +const R_PARISC_GPREL16WF = 94 +const R_PARISC_GPREL21L = 26 +const R_PARISC_GPREL64 = 88 +const R_PARISC_HIRESERVE = 255 +const R_PARISC_IPLT = 129 +const R_PARISC_LORESERVE = 128 +const R_PARISC_LTOFF14DR = 100 +const R_PARISC_LTOFF14R = 38 +const R_PARISC_LTOFF14WR = 99 +const R_PARISC_LTOFF16DF = 103 +const R_PARISC_LTOFF16F = 101 +const R_PARISC_LTOFF16WF = 102 +const R_PARISC_LTOFF21L = 34 +const R_PARISC_LTOFF64 = 96 +const R_PARISC_LTOFF_FPTR14DR = 124 +const R_PARISC_LTOFF_FPTR14R = 62 +const R_PARISC_LTOFF_FPTR14WR = 123 +const R_PARISC_LTOFF_FPTR16DF = 127 +const R_PARISC_LTOFF_FPTR16F = 125 +const R_PARISC_LTOFF_FPTR16WF = 126 +const R_PARISC_LTOFF_FPTR21L = 58 +const R_PARISC_LTOFF_FPTR32 = 57 +const R_PARISC_LTOFF_FPTR64 = 120 +const R_PARISC_LTOFF_TP14DR = 228 +const R_PARISC_LTOFF_TP14F = 167 +const R_PARISC_LTOFF_TP14R = 166 +const R_PARISC_LTOFF_TP14WR = 227 +const R_PARISC_LTOFF_TP16DF = 231 +const R_PARISC_LTOFF_TP16F = 229 +const R_PARISC_LTOFF_TP16WF = 230 +const R_PARISC_LTOFF_TP21L = 162 +const R_PARISC_LTOFF_TP64 = 224 +const R_PARISC_NONE = 0 +const R_PARISC_PCREL14DR = 76 +const R_PARISC_PCREL14R = 14 +const R_PARISC_PCREL14WR = 75 +const R_PARISC_PCREL16DF = 79 +const R_PARISC_PCREL16F = 77 +const R_PARISC_PCREL16WF = 78 +const R_PARISC_PCREL17F = 12 +const R_PARISC_PCREL17R = 11 +const R_PARISC_PCREL21L = 10 +const R_PARISC_PCREL22F = 74 +const R_PARISC_PCREL32 = 9 +const R_PARISC_PCREL64 = 72 +const R_PARISC_PLABEL14R = 70 +const R_PARISC_PLABEL21L = 66 +const R_PARISC_PLABEL32 = 65 +const R_PARISC_PLTOFF14DR = 116 +const R_PARISC_PLTOFF14R = 54 +const R_PARISC_PLTOFF14WR = 115 +const R_PARISC_PLTOFF16DF = 119 +const R_PARISC_PLTOFF16F = 117 +const R_PARISC_PLTOFF16WF = 118 +const R_PARISC_PLTOFF21L = 50 +const R_PARISC_SECREL32 = 41 +const R_PARISC_SECREL64 = 104 +const R_PARISC_SEGBASE = 48 +const R_PARISC_SEGREL32 = 49 +const R_PARISC_SEGREL64 = 112 +const R_PARISC_TLS_DTPMOD32 = 242 +const R_PARISC_TLS_DTPMOD64 = 243 +const R_PARISC_TLS_DTPOFF32 = 244 +const R_PARISC_TLS_DTPOFF64 = 245 +const R_PARISC_TLS_GD14R = 235 +const R_PARISC_TLS_GD21L = 234 +const R_PARISC_TLS_GDCALL = 236 +const R_PARISC_TLS_IE14R = 166 +const R_PARISC_TLS_IE21L = 162 +const R_PARISC_TLS_LDM14R = 238 +const R_PARISC_TLS_LDM21L = 237 +const R_PARISC_TLS_LDMCALL = 239 +const R_PARISC_TLS_LDO14R = 241 +const R_PARISC_TLS_LDO21L = 240 +const R_PARISC_TLS_LE14R = 158 +const R_PARISC_TLS_LE21L = 154 +const R_PARISC_TLS_TPREL32 = 153 +const R_PARISC_TLS_TPREL64 = 216 +const R_PARISC_TPREL14DR = 220 +const R_PARISC_TPREL14R = 158 +const R_PARISC_TPREL14WR = 219 +const R_PARISC_TPREL16DF = 223 +const R_PARISC_TPREL16F = 221 +const R_PARISC_TPREL16WF = 222 +const R_PARISC_TPREL21L = 154 +const R_PARISC_TPREL32 = 153 +const R_PARISC_TPREL64 = 216 +const R_PPC64_ADDR14 = 7 +const R_PPC64_ADDR14_BRNTAKEN = 9 +const R_PPC64_ADDR14_BRTAKEN = 8 +const R_PPC64_ADDR16 = 3 +const R_PPC64_ADDR16_DS = 56 +const R_PPC64_ADDR16_HA = 6 +const R_PPC64_ADDR16_HI = 5 +const R_PPC64_ADDR16_HIGH = 110 +const R_PPC64_ADDR16_HIGHA = 111 +const R_PPC64_ADDR16_HIGHER = 39 +const R_PPC64_ADDR16_HIGHERA = 40 +const R_PPC64_ADDR16_HIGHEST = 41 +const R_PPC64_ADDR16_HIGHESTA = 42 +const R_PPC64_ADDR16_LO = 4 +const R_PPC64_ADDR16_LO_DS = 57 +const R_PPC64_ADDR24 = 2 +const R_PPC64_ADDR30 = 37 +const R_PPC64_ADDR32 = 1 +const R_PPC64_ADDR64 = 38 +const R_PPC64_COPY = 19 +const R_PPC64_DTPMOD64 = 68 +const R_PPC64_DTPREL16 = 74 +const R_PPC64_DTPREL16_DS = 101 +const R_PPC64_DTPREL16_HA = 77 +const R_PPC64_DTPREL16_HI = 76 +const R_PPC64_DTPREL16_HIGH = 114 +const R_PPC64_DTPREL16_HIGHA = 115 +const R_PPC64_DTPREL16_HIGHER = 103 +const R_PPC64_DTPREL16_HIGHERA = 104 +const R_PPC64_DTPREL16_HIGHEST = 105 +const R_PPC64_DTPREL16_HIGHESTA = 106 +const R_PPC64_DTPREL16_LO = 75 +const R_PPC64_DTPREL16_LO_DS = 102 +const R_PPC64_DTPREL64 = 78 +const R_PPC64_GLOB_DAT = 20 +const R_PPC64_GOT16 = 14 +const R_PPC64_GOT16_DS = 58 +const R_PPC64_GOT16_HA = 17 +const R_PPC64_GOT16_HI = 16 +const R_PPC64_GOT16_LO = 15 +const R_PPC64_GOT16_LO_DS = 59 +const R_PPC64_GOT_DTPREL16_DS = 91 +const R_PPC64_GOT_DTPREL16_HA = 94 +const R_PPC64_GOT_DTPREL16_HI = 93 +const R_PPC64_GOT_DTPREL16_LO_DS = 92 +const R_PPC64_GOT_TLSGD16 = 79 +const R_PPC64_GOT_TLSGD16_HA = 82 +const R_PPC64_GOT_TLSGD16_HI = 81 +const R_PPC64_GOT_TLSGD16_LO = 80 +const R_PPC64_GOT_TLSLD16 = 83 +const R_PPC64_GOT_TLSLD16_HA = 86 +const R_PPC64_GOT_TLSLD16_HI = 85 +const R_PPC64_GOT_TLSLD16_LO = 84 +const R_PPC64_GOT_TPREL16_DS = 87 +const R_PPC64_GOT_TPREL16_HA = 90 +const R_PPC64_GOT_TPREL16_HI = 89 +const R_PPC64_GOT_TPREL16_LO_DS = 88 +const R_PPC64_IRELATIVE = 248 +const R_PPC64_JMP_IREL = 247 +const R_PPC64_JMP_SLOT = 21 +const R_PPC64_NONE = 0 +const R_PPC64_PLT16_HA = 31 +const R_PPC64_PLT16_HI = 30 +const R_PPC64_PLT16_LO = 29 +const R_PPC64_PLT16_LO_DS = 60 +const R_PPC64_PLT32 = 27 +const R_PPC64_PLT64 = 45 +const R_PPC64_PLTGOT16 = 52 +const R_PPC64_PLTGOT16_DS = 65 +const R_PPC64_PLTGOT16_HA = 55 +const R_PPC64_PLTGOT16_HI = 54 +const R_PPC64_PLTGOT16_LO = 53 +const R_PPC64_PLTGOT16_LO_DS = 66 +const R_PPC64_PLTREL32 = 28 +const R_PPC64_PLTREL64 = 46 +const R_PPC64_REL14 = 11 +const R_PPC64_REL14_BRNTAKEN = 13 +const R_PPC64_REL14_BRTAKEN = 12 +const R_PPC64_REL16 = 249 +const R_PPC64_REL16_HA = 252 +const R_PPC64_REL16_HI = 251 +const R_PPC64_REL16_LO = 250 +const R_PPC64_REL24 = 10 +const R_PPC64_REL32 = 26 +const R_PPC64_REL64 = 44 +const R_PPC64_RELATIVE = 22 +const R_PPC64_SECTOFF = 33 +const R_PPC64_SECTOFF_DS = 61 +const R_PPC64_SECTOFF_HA = 36 +const R_PPC64_SECTOFF_HI = 35 +const R_PPC64_SECTOFF_LO = 34 +const R_PPC64_SECTOFF_LO_DS = 62 +const R_PPC64_TLS = 67 +const R_PPC64_TLSGD = 107 +const R_PPC64_TLSLD = 108 +const R_PPC64_TOC = 51 +const R_PPC64_TOC16 = 47 +const R_PPC64_TOC16_DS = 63 +const R_PPC64_TOC16_HA = 50 +const R_PPC64_TOC16_HI = 49 +const R_PPC64_TOC16_LO = 48 +const R_PPC64_TOC16_LO_DS = 64 +const R_PPC64_TOCSAVE = 109 +const R_PPC64_TPREL16 = 69 +const R_PPC64_TPREL16_DS = 95 +const R_PPC64_TPREL16_HA = 72 +const R_PPC64_TPREL16_HI = 71 +const R_PPC64_TPREL16_HIGH = 112 +const R_PPC64_TPREL16_HIGHA = 113 +const R_PPC64_TPREL16_HIGHER = 97 +const R_PPC64_TPREL16_HIGHERA = 98 +const R_PPC64_TPREL16_HIGHEST = 99 +const R_PPC64_TPREL16_HIGHESTA = 100 +const R_PPC64_TPREL16_LO = 70 +const R_PPC64_TPREL16_LO_DS = 96 +const R_PPC64_TPREL64 = 73 +const R_PPC64_UADDR16 = 25 +const R_PPC64_UADDR32 = 24 +const R_PPC64_UADDR64 = 43 +const R_PPC_ADDR14 = 7 +const R_PPC_ADDR14_BRNTAKEN = 9 +const R_PPC_ADDR14_BRTAKEN = 8 +const R_PPC_ADDR16 = 3 +const R_PPC_ADDR16_HA = 6 +const R_PPC_ADDR16_HI = 5 +const R_PPC_ADDR16_LO = 4 +const R_PPC_ADDR24 = 2 +const R_PPC_ADDR32 = 1 +const R_PPC_COPY = 19 +const R_PPC_DIAB_RELSDA_HA = 185 +const R_PPC_DIAB_RELSDA_HI = 184 +const R_PPC_DIAB_RELSDA_LO = 183 +const R_PPC_DIAB_SDA21_HA = 182 +const R_PPC_DIAB_SDA21_HI = 181 +const R_PPC_DIAB_SDA21_LO = 180 +const R_PPC_DTPMOD32 = 68 +const R_PPC_DTPREL16 = 74 +const R_PPC_DTPREL16_HA = 77 +const R_PPC_DTPREL16_HI = 76 +const R_PPC_DTPREL16_LO = 75 +const R_PPC_DTPREL32 = 78 +const R_PPC_EMB_BIT_FLD = 115 +const R_PPC_EMB_MRKREF = 110 +const R_PPC_EMB_NADDR16 = 102 +const R_PPC_EMB_NADDR16_HA = 105 +const R_PPC_EMB_NADDR16_HI = 104 +const R_PPC_EMB_NADDR16_LO = 103 +const R_PPC_EMB_NADDR32 = 101 +const R_PPC_EMB_RELSDA = 116 +const R_PPC_EMB_RELSEC16 = 111 +const R_PPC_EMB_RELST_HA = 114 +const R_PPC_EMB_RELST_HI = 113 +const R_PPC_EMB_RELST_LO = 112 +const R_PPC_EMB_SDA21 = 109 +const R_PPC_EMB_SDA2I16 = 107 +const R_PPC_EMB_SDA2REL = 108 +const R_PPC_EMB_SDAI16 = 106 +const R_PPC_GLOB_DAT = 20 +const R_PPC_GOT16 = 14 +const R_PPC_GOT16_HA = 17 +const R_PPC_GOT16_HI = 16 +const R_PPC_GOT16_LO = 15 +const R_PPC_GOT_DTPREL16 = 91 +const R_PPC_GOT_DTPREL16_HA = 94 +const R_PPC_GOT_DTPREL16_HI = 93 +const R_PPC_GOT_DTPREL16_LO = 92 +const R_PPC_GOT_TLSGD16 = 79 +const R_PPC_GOT_TLSGD16_HA = 82 +const R_PPC_GOT_TLSGD16_HI = 81 +const R_PPC_GOT_TLSGD16_LO = 80 +const R_PPC_GOT_TLSLD16 = 83 +const R_PPC_GOT_TLSLD16_HA = 86 +const R_PPC_GOT_TLSLD16_HI = 85 +const R_PPC_GOT_TLSLD16_LO = 84 +const R_PPC_GOT_TPREL16 = 87 +const R_PPC_GOT_TPREL16_HA = 90 +const R_PPC_GOT_TPREL16_HI = 89 +const R_PPC_GOT_TPREL16_LO = 88 +const R_PPC_IRELATIVE = 248 +const R_PPC_JMP_SLOT = 21 +const R_PPC_LOCAL24PC = 23 +const R_PPC_NONE = 0 +const R_PPC_PLT16_HA = 31 +const R_PPC_PLT16_HI = 30 +const R_PPC_PLT16_LO = 29 +const R_PPC_PLT32 = 27 +const R_PPC_PLTREL24 = 18 +const R_PPC_PLTREL32 = 28 +const R_PPC_REL14 = 11 +const R_PPC_REL14_BRNTAKEN = 13 +const R_PPC_REL14_BRTAKEN = 12 +const R_PPC_REL16 = 249 +const R_PPC_REL16_HA = 252 +const R_PPC_REL16_HI = 251 +const R_PPC_REL16_LO = 250 +const R_PPC_REL24 = 10 +const R_PPC_REL32 = 26 +const R_PPC_RELATIVE = 22 +const R_PPC_SDAREL16 = 32 +const R_PPC_SECTOFF = 33 +const R_PPC_SECTOFF_HA = 36 +const R_PPC_SECTOFF_HI = 35 +const R_PPC_SECTOFF_LO = 34 +const R_PPC_TLS = 67 +const R_PPC_TLSGD = 95 +const R_PPC_TLSLD = 96 +const R_PPC_TOC16 = 255 +const R_PPC_TPREL16 = 69 +const R_PPC_TPREL16_HA = 72 +const R_PPC_TPREL16_HI = 71 +const R_PPC_TPREL16_LO = 70 +const R_PPC_TPREL32 = 73 +const R_PPC_UADDR16 = 25 +const R_PPC_UADDR32 = 24 +const R_RISCV_32 = 1 +const R_RISCV_32_PCREL = 57 +const R_RISCV_64 = 2 +const R_RISCV_ADD16 = 34 +const R_RISCV_ADD32 = 35 +const R_RISCV_ADD64 = 36 +const R_RISCV_ADD8 = 33 +const R_RISCV_ALIGN = 43 +const R_RISCV_BRANCH = 16 +const R_RISCV_CALL = 18 +const R_RISCV_CALL_PLT = 19 +const R_RISCV_COPY = 4 +const R_RISCV_GOT32_PCREL = 41 +const R_RISCV_GOT_HI20 = 20 +const R_RISCV_HI20 = 26 +const R_RISCV_IRELATIVE = 58 +const R_RISCV_JAL = 17 +const R_RISCV_JUMP_SLOT = 5 +const R_RISCV_LO12_I = 27 +const R_RISCV_LO12_S = 28 +const R_RISCV_NONE = 0 +const R_RISCV_PCREL_HI20 = 23 +const R_RISCV_PCREL_LO12_I = 24 +const R_RISCV_PCREL_LO12_S = 25 +const R_RISCV_PLT32 = 59 +const R_RISCV_RELATIVE = 3 +const R_RISCV_RELAX = 51 +const R_RISCV_RVC_BRANCH = 44 +const R_RISCV_RVC_JUMP = 45 +const R_RISCV_RVC_LUI = 46 +const R_RISCV_SET16 = 55 +const R_RISCV_SET32 = 56 +const R_RISCV_SET6 = 53 +const R_RISCV_SET8 = 54 +const R_RISCV_SET_ULEB128 = 60 +const R_RISCV_SUB16 = 38 +const R_RISCV_SUB32 = 39 +const R_RISCV_SUB6 = 52 +const R_RISCV_SUB64 = 40 +const R_RISCV_SUB8 = 37 +const R_RISCV_SUB_ULEB128 = 61 +const R_RISCV_TLSDESC = 12 +const R_RISCV_TLSDESC_ADD_LO12 = 64 +const R_RISCV_TLSDESC_CALL = 65 +const R_RISCV_TLSDESC_HI20 = 62 +const R_RISCV_TLSDESC_LOAD_LO12 = 63 +const R_RISCV_TLS_DTPMOD32 = 6 +const R_RISCV_TLS_DTPMOD64 = 7 +const R_RISCV_TLS_DTPREL32 = 8 +const R_RISCV_TLS_DTPREL64 = 9 +const R_RISCV_TLS_GD_HI20 = 22 +const R_RISCV_TLS_GOT_HI20 = 21 +const R_RISCV_TLS_TPREL32 = 10 +const R_RISCV_TLS_TPREL64 = 11 +const R_RISCV_TPREL_ADD = 32 +const R_RISCV_TPREL_HI20 = 29 +const R_RISCV_TPREL_LO12_I = 30 +const R_RISCV_TPREL_LO12_S = 31 +const R_SH_ALIGN = 29 +const R_SH_CODE = 30 +const R_SH_COPY = 162 +const R_SH_COUNT = 28 +const R_SH_DATA = 31 +const R_SH_DIR32 = 1 +const R_SH_DIR8BP = 7 +const R_SH_DIR8L = 9 +const R_SH_DIR8W = 8 +const R_SH_DIR8WPL = 5 +const R_SH_DIR8WPN = 3 +const R_SH_DIR8WPZ = 6 +const R_SH_FUNCDESC = 207 +const R_SH_FUNCDESC_VALUE = 208 +const R_SH_GLOB_DAT = 163 +const R_SH_GNU_VTENTRY = 35 +const R_SH_GNU_VTINHERIT = 34 +const R_SH_GOT20 = 201 +const R_SH_GOT32 = 160 +const R_SH_GOTFUNCDESC = 203 +const R_SH_GOTFUNCDEST20 = 204 +const R_SH_GOTOFF = 166 +const R_SH_GOTOFF20 = 202 +const R_SH_GOTOFFFUNCDESC = 205 +const R_SH_GOTOFFFUNCDEST20 = 206 +const R_SH_GOTPC = 167 +const R_SH_IND12W = 4 +const R_SH_JMP_SLOT = 164 +const R_SH_LABEL = 32 +const R_SH_NONE = 0 +const R_SH_NUM = 256 +const R_SH_PLT32 = 161 +const R_SH_REL32 = 2 +const R_SH_RELATIVE = 165 +const R_SH_SWITCH16 = 25 +const R_SH_SWITCH32 = 26 +const R_SH_SWITCH8 = 33 +const R_SH_TLS_DTPMOD32 = 149 +const R_SH_TLS_DTPOFF32 = 150 +const R_SH_TLS_GD_32 = 144 +const R_SH_TLS_IE_32 = 147 +const R_SH_TLS_LDO_32 = 146 +const R_SH_TLS_LD_32 = 145 +const R_SH_TLS_LE_32 = 148 +const R_SH_TLS_TPOFF32 = 151 +const R_SH_USES = 27 +const R_SPARC_10 = 30 +const R_SPARC_11 = 31 +const R_SPARC_13 = 11 +const R_SPARC_16 = 2 +const R_SPARC_22 = 10 +const R_SPARC_32 = 3 +const R_SPARC_5 = 44 +const R_SPARC_6 = 45 +const R_SPARC_64 = 32 +const R_SPARC_7 = 43 +const R_SPARC_8 = 1 +const R_SPARC_COPY = 19 +const R_SPARC_DISP16 = 5 +const R_SPARC_DISP32 = 6 +const R_SPARC_DISP64 = 46 +const R_SPARC_DISP8 = 4 +const R_SPARC_GLOB_DAT = 20 +const R_SPARC_GLOB_JMP = 42 +const R_SPARC_GNU_VTENTRY = 251 +const R_SPARC_GNU_VTINHERIT = 250 +const R_SPARC_GOT10 = 13 +const R_SPARC_GOT13 = 14 +const R_SPARC_GOT22 = 15 +const R_SPARC_GOTDATA_HIX22 = 80 +const R_SPARC_GOTDATA_LOX10 = 81 +const R_SPARC_GOTDATA_OP = 84 +const R_SPARC_GOTDATA_OP_HIX22 = 82 +const R_SPARC_GOTDATA_OP_LOX10 = 83 +const R_SPARC_H34 = 85 +const R_SPARC_H44 = 50 +const R_SPARC_HH22 = 34 +const R_SPARC_HI22 = 9 +const R_SPARC_HIPLT22 = 25 +const R_SPARC_HIX22 = 48 +const R_SPARC_HM10 = 35 +const R_SPARC_JMP_SLOT = 21 +const R_SPARC_L44 = 52 +const R_SPARC_LM22 = 36 +const R_SPARC_LO10 = 12 +const R_SPARC_LOPLT10 = 26 +const R_SPARC_LOX10 = 49 +const R_SPARC_M44 = 51 +const R_SPARC_NONE = 0 +const R_SPARC_NUM = 253 +const R_SPARC_OLO10 = 33 +const R_SPARC_PC10 = 16 +const R_SPARC_PC22 = 17 +const R_SPARC_PCPLT10 = 29 +const R_SPARC_PCPLT22 = 28 +const R_SPARC_PCPLT32 = 27 +const R_SPARC_PC_HH22 = 37 +const R_SPARC_PC_HM10 = 38 +const R_SPARC_PC_LM22 = 39 +const R_SPARC_PLT32 = 24 +const R_SPARC_PLT64 = 47 +const R_SPARC_REGISTER = 53 +const R_SPARC_RELATIVE = 22 +const R_SPARC_REV32 = 252 +const R_SPARC_SIZE32 = 86 +const R_SPARC_SIZE64 = 87 +const R_SPARC_TLS_DTPMOD32 = 74 +const R_SPARC_TLS_DTPMOD64 = 75 +const R_SPARC_TLS_DTPOFF32 = 76 +const R_SPARC_TLS_DTPOFF64 = 77 +const R_SPARC_TLS_GD_ADD = 58 +const R_SPARC_TLS_GD_CALL = 59 +const R_SPARC_TLS_GD_HI22 = 56 +const R_SPARC_TLS_GD_LO10 = 57 +const R_SPARC_TLS_IE_ADD = 71 +const R_SPARC_TLS_IE_HI22 = 67 +const R_SPARC_TLS_IE_LD = 69 +const R_SPARC_TLS_IE_LDX = 70 +const R_SPARC_TLS_IE_LO10 = 68 +const R_SPARC_TLS_LDM_ADD = 62 +const R_SPARC_TLS_LDM_CALL = 63 +const R_SPARC_TLS_LDM_HI22 = 60 +const R_SPARC_TLS_LDM_LO10 = 61 +const R_SPARC_TLS_LDO_ADD = 66 +const R_SPARC_TLS_LDO_HIX22 = 64 +const R_SPARC_TLS_LDO_LOX10 = 65 +const R_SPARC_TLS_LE_HIX22 = 72 +const R_SPARC_TLS_LE_LOX10 = 73 +const R_SPARC_TLS_TPOFF32 = 78 +const R_SPARC_TLS_TPOFF64 = 79 +const R_SPARC_UA16 = 55 +const R_SPARC_UA32 = 23 +const R_SPARC_UA64 = 54 +const R_SPARC_WDISP16 = 40 +const R_SPARC_WDISP19 = 41 +const R_SPARC_WDISP22 = 8 +const R_SPARC_WDISP30 = 7 +const R_SPARC_WPLT30 = 18 +const R_X86_64_16 = 12 +const R_X86_64_32 = 10 +const R_X86_64_32S = 11 +const R_X86_64_64 = 1 +const R_X86_64_8 = 14 +const R_X86_64_COPY = 5 +const R_X86_64_DTPMOD64 = 16 +const R_X86_64_DTPOFF32 = 21 +const R_X86_64_DTPOFF64 = 17 +const R_X86_64_GLOB_DAT = 6 +const R_X86_64_GOT32 = 3 +const R_X86_64_GOT64 = 27 +const R_X86_64_GOTOFF64 = 25 +const R_X86_64_GOTPC32 = 26 +const R_X86_64_GOTPC32_TLSDESC = 34 +const R_X86_64_GOTPC64 = 29 +const R_X86_64_GOTPCREL = 9 +const R_X86_64_GOTPCREL64 = 28 +const R_X86_64_GOTPCRELX = 41 +const R_X86_64_GOTPLT64 = 30 +const R_X86_64_GOTTPOFF = 22 +const R_X86_64_IRELATIVE = 37 +const R_X86_64_JUMP_SLOT = 7 +const R_X86_64_NONE = 0 +const R_X86_64_NUM = 43 +const R_X86_64_PC16 = 13 +const R_X86_64_PC32 = 2 +const R_X86_64_PC64 = 24 +const R_X86_64_PC8 = 15 +const R_X86_64_PLT32 = 4 +const R_X86_64_PLTOFF64 = 31 +const R_X86_64_RELATIVE = 8 +const R_X86_64_RELATIVE64 = 38 +const R_X86_64_REX_GOTPCRELX = 42 +const R_X86_64_SIZE32 = 32 +const R_X86_64_SIZE64 = 33 +const R_X86_64_TLSDESC = 36 +const R_X86_64_TLSDESC_CALL = 35 +const R_X86_64_TLSGD = 19 +const R_X86_64_TLSLD = 20 +const R_X86_64_TPOFF32 = 23 +const R_X86_64_TPOFF64 = 18 +const SA_EXPOSE_TAGBITS = 2048 +const SA_NOCLDSTOP = 1 +const SA_NOCLDWAIT = 2 +const SA_NODEFER = 1073741824 +const SA_ONSTACK = 134217728 +const SA_RESETHAND = 2147483648 +const SA_RESTART = 268435456 +const SA_RESTORER = 67108864 +const SA_SIGINFO = 4 +const SA_UNSUPPORTED = 1024 +const SCM_TIMESTAMPING_OLD = 37 +const SCM_TIMESTAMPNS_OLD = 35 +const SCM_TIMESTAMP_OLD = 29 +const SEGV_ACCERR = 2 +const SEGV_BNDERR = 3 +const SEGV_MAPERR = 1 +const SEGV_MTEAERR = 8 +const SEGV_MTESERR = 9 +const SEGV_PKUERR = 4 +const SELFMAG = 4 +const SHF_ALLOC = 2 +const SHF_ALPHA_GPREL = 268435456 +const SHF_ARM_COMDEF = 2147483648 +const SHF_ARM_ENTRYSECT = 268435456 +const SHF_COMPRESSED = 2048 +const SHF_EXCLUDE = 2147483648 +const SHF_EXECINSTR = 4 +const SHF_GROUP = 512 +const SHF_IA_64_NORECOV = 536870912 +const SHF_IA_64_SHORT = 268435456 +const SHF_INFO_LINK = 64 +const SHF_LINK_ORDER = 128 +const SHF_MASKOS = 267386880 +const SHF_MASKPROC = 4026531840 +const SHF_MERGE = 16 +const SHF_MIPS_ADDR = 1073741824 +const SHF_MIPS_GPREL = 268435456 +const SHF_MIPS_LOCAL = 67108864 +const SHF_MIPS_MERGE = 536870912 +const SHF_MIPS_NAMES = 33554432 +const SHF_MIPS_NODUPE = 16777216 +const SHF_MIPS_NOSTRIP = 134217728 +const SHF_MIPS_STRINGS = 2147483648 +const SHF_ORDERED = 1073741824 +const SHF_OS_NONCONFORMING = 256 +const SHF_PARISC_HUGE = 1073741824 +const SHF_PARISC_SBP = 2147483648 +const SHF_PARISC_SHORT = 536870912 +const SHF_STRINGS = 32 +const SHF_TLS = 1024 +const SHF_WRITE = 1 +const SHN_ABS = 65521 +const SHN_AFTER = 65281 +const SHN_BEFORE = 65280 +const SHN_COMMON = 65522 +const SHN_HIOS = 65343 +const SHN_HIPROC = 65311 +const SHN_HIRESERVE = 65535 +const SHN_LOOS = 65312 +const SHN_LOPROC = 65280 +const SHN_LORESERVE = 65280 +const SHN_MIPS_ACOMMON = 65280 +const SHN_MIPS_DATA = 65282 +const SHN_MIPS_SCOMMON = 65283 +const SHN_MIPS_SUNDEFINED = 65284 +const SHN_MIPS_TEXT = 65281 +const SHN_PARISC_ANSI_COMMON = 65280 +const SHN_PARISC_HUGE_COMMON = 65281 +const SHN_UNDEF = 0 +const SHN_XINDEX = 65535 +const SHT_ALPHA_DEBUG = 1879048193 +const SHT_ALPHA_REGINFO = 1879048194 +const SHT_ARM_ATTRIBUTES = 1879048195 +const SHT_ARM_EXIDX = 1879048193 +const SHT_ARM_PREEMPTMAP = 1879048194 +const SHT_CHECKSUM = 1879048184 +const SHT_DYNAMIC = 6 +const SHT_DYNSYM = 11 +const SHT_FINI_ARRAY = 15 +const SHT_GNU_ATTRIBUTES = 1879048181 +const SHT_GNU_HASH = 1879048182 +const SHT_GNU_LIBLIST = 1879048183 +const SHT_GNU_verdef = 1879048189 +const SHT_GNU_verneed = 1879048190 +const SHT_GNU_versym = 1879048191 +const SHT_GROUP = 17 +const SHT_HASH = 5 +const SHT_HIOS = 1879048191 +const SHT_HIPROC = 2147483647 +const SHT_HISUNW = 1879048191 +const SHT_HIUSER = 2415919103 +const SHT_IA_64_EXT = 1879048192 +const SHT_IA_64_UNWIND = 1879048193 +const SHT_INIT_ARRAY = 14 +const SHT_LOOS = 1610612736 +const SHT_LOPROC = 1879048192 +const SHT_LOSUNW = 1879048186 +const SHT_LOUSER = 2147483648 +const SHT_MIPS_AUXSYM = 1879048214 +const SHT_MIPS_CONFLICT = 1879048194 +const SHT_MIPS_CONTENT = 1879048204 +const SHT_MIPS_DEBUG = 1879048197 +const SHT_MIPS_DELTACLASS = 1879048221 +const SHT_MIPS_DELTADECL = 1879048223 +const SHT_MIPS_DELTAINST = 1879048220 +const SHT_MIPS_DELTASYM = 1879048219 +const SHT_MIPS_DENSE = 1879048211 +const SHT_MIPS_DWARF = 1879048222 +const SHT_MIPS_EH_REGION = 1879048231 +const SHT_MIPS_EVENTS = 1879048225 +const SHT_MIPS_EXTSYM = 1879048210 +const SHT_MIPS_FDESC = 1879048209 +const SHT_MIPS_GPTAB = 1879048195 +const SHT_MIPS_IFACE = 1879048203 +const SHT_MIPS_LIBLIST = 1879048192 +const SHT_MIPS_LINE = 1879048217 +const SHT_MIPS_LOCSTR = 1879048216 +const SHT_MIPS_LOCSYM = 1879048213 +const SHT_MIPS_MSYM = 1879048193 +const SHT_MIPS_OPTIONS = 1879048205 +const SHT_MIPS_OPTSYM = 1879048215 +const SHT_MIPS_PACKAGE = 1879048199 +const SHT_MIPS_PACKSYM = 1879048200 +const SHT_MIPS_PDESC = 1879048212 +const SHT_MIPS_PDR_EXCEPTION = 1879048233 +const SHT_MIPS_PIXIE = 1879048227 +const SHT_MIPS_REGINFO = 1879048198 +const SHT_MIPS_RELD = 1879048201 +const SHT_MIPS_RFDESC = 1879048218 +const SHT_MIPS_SHDR = 1879048208 +const SHT_MIPS_SYMBOL_LIB = 1879048224 +const SHT_MIPS_TRANSLATE = 1879048226 +const SHT_MIPS_UCODE = 1879048196 +const SHT_MIPS_WHIRL = 1879048230 +const SHT_MIPS_XLATE = 1879048228 +const SHT_MIPS_XLATE_DEBUG = 1879048229 +const SHT_MIPS_XLATE_OLD = 1879048232 +const SHT_NOBITS = 8 +const SHT_NOTE = 7 +const SHT_NULL = 0 +const SHT_NUM = 20 +const SHT_PARISC_DOC = 1879048194 +const SHT_PARISC_EXT = 1879048192 +const SHT_PARISC_UNWIND = 1879048193 +const SHT_PREINIT_ARRAY = 16 +const SHT_PROGBITS = 1 +const SHT_REL = 9 +const SHT_RELA = 4 +const SHT_RELR = 19 +const SHT_SHLIB = 10 +const SHT_STRTAB = 3 +const SHT_SUNW_COMDAT = 1879048187 +const SHT_SUNW_move = 1879048186 +const SHT_SUNW_syminfo = 1879048188 +const SHT_SYMTAB = 2 +const SHT_SYMTAB_SHNDX = 18 +const SIGABRT = 6 +const SIGALRM = 14 +const SIGBUS = 7 +const SIGCHLD = 17 +const SIGCONT = 18 +const SIGEV_NONE = 1 +const SIGEV_SIGNAL = 0 +const SIGEV_THREAD = 2 +const SIGEV_THREAD_ID = 4 +const SIGFPE = 8 +const SIGHUP = 1 +const SIGILL = 4 +const SIGINT = 2 +const SIGIO = 29 +const SIGIOT = 6 +const SIGKILL = 9 +const SIGPIPE = 13 +const SIGPOLL = 29 +const SIGPROF = 27 +const SIGPWR = 30 +const SIGQUIT = 3 +const SIGRTMAX = 0 +const SIGRTMIN = 0 +const SIGSEGV = 11 +const SIGSTKFLT = 16 +const SIGSTKSZ = 10240 +const SIGSTOP = 19 +const SIGSYS = 31 +const SIGTERM = 15 +const SIGTRAP = 5 +const SIGTSTP = 20 +const SIGTTIN = 21 +const SIGTTOU = 22 +const SIGUNUSED = 31 +const SIGURG = 23 +const SIGUSR1 = 10 +const SIGUSR2 = 12 +const SIGVTALRM = 26 +const SIGWINCH = 28 +const SIGXCPU = 24 +const SIGXFSZ = 25 +const SIG_BLOCK = 0 +const SIG_SETMASK = 2 +const SIG_UNBLOCK = 1 +const SIOCGSTAMPNS_OLD = 35079 +const SIOCGSTAMP_OLD = 35078 +const SI_ASYNCIO = -4 +const SI_ASYNCNL = -60 +const SI_KERNEL = 128 +const SI_MESGQ = -3 +const SI_QUEUE = -1 +const SI_SIGIO = -5 +const SI_TIMER = -2 +const SI_TKILL = -6 +const SI_USER = 0 +const SO_RCVTIMEO_OLD = 20 +const SO_SNDTIMEO_OLD = 21 +const SO_TIMESTAMPING_OLD = 37 +const SO_TIMESTAMPNS_OLD = 35 +const SO_TIMESTAMP_OLD = 29 +const SS_AUTODISARM = 2147483648 +const SS_DISABLE = 2 +const SS_FLAG_BITS = 2147483648 +const SS_ONSTACK = 1 +const STB_GLOBAL = 1 +const STB_GNU_UNIQUE = 10 +const STB_HIOS = 12 +const STB_HIPROC = 15 +const STB_LOCAL = 0 +const STB_LOOS = 10 +const STB_LOPROC = 13 +const STB_MIPS_SPLIT_COMMON = 13 +const STB_NUM = 3 +const STB_WEAK = 2 +const STN_UNDEF = 0 +const STO_ALPHA_NOPV = 128 +const STO_ALPHA_STD_GPLOAD = 136 +const STO_MIPS_DEFAULT = 0 +const STO_MIPS_HIDDEN = 2 +const STO_MIPS_INTERNAL = 1 +const STO_MIPS_PLT = 8 +const STO_MIPS_PROTECTED = 3 +const STO_MIPS_SC_ALIGN_UNUSED = 255 +const STO_PPC64_LOCAL_BIT = 5 +const STO_PPC64_LOCAL_MASK = 224 +const STT_ARM_16BIT = 15 +const STT_ARM_TFUNC = 13 +const STT_COMMON = 5 +const STT_FILE = 4 +const STT_FUNC = 2 +const STT_GNU_IFUNC = 10 +const STT_HIOS = 12 +const STT_HIPROC = 15 +const STT_HP_OPAQUE = 11 +const STT_HP_STUB = 12 +const STT_LOOS = 10 +const STT_LOPROC = 13 +const STT_NOTYPE = 0 +const STT_NUM = 7 +const STT_OBJECT = 1 +const STT_PARISC_MILLICODE = 13 +const STT_SECTION = 3 +const STT_SPARC_REGISTER = 13 +const STT_TLS = 6 +const STV_DEFAULT = 0 +const STV_HIDDEN = 2 +const STV_INTERNAL = 1 +const STV_PROTECTED = 3 +const SYMINFO_BT_LOWRESERVE = 65280 +const SYMINFO_BT_PARENT = 65534 +const SYMINFO_BT_SELF = 65535 +const SYMINFO_CURRENT = 1 +const SYMINFO_FLG_COPY = 4 +const SYMINFO_FLG_DIRECT = 1 +const SYMINFO_FLG_LAZYLOAD = 8 +const SYMINFO_FLG_PASSTHRU = 2 +const SYMINFO_NONE = 0 +const SYMINFO_NUM = 2 +const SYSCALL_MMAP2_UNIT = 4096 +const SYSCALL_RLIM_INFINITY = 18446744073709551615 +const SYS__llseek = 140 +const SYS__newselect = 142 +const SYS__sysctl = 149 +const SYS_accept = 330 +const SYS_accept4 = 344 +const SYS_access = 33 +const SYS_acct = 51 +const SYS_add_key = 269 +const SYS_adjtimex = 124 +const SYS_afs_syscall = 137 +const SYS_alarm = 27 +const SYS_bdflush = 134 +const SYS_bind = 327 +const SYS_bpf = 361 +const SYS_break = 17 +const SYS_brk = 45 +const SYS_cachestat = 451 +const SYS_capget = 183 +const SYS_capset = 184 +const SYS_chdir = 12 +const SYS_chmod = 15 +const SYS_chown = 181 +const SYS_chroot = 61 +const SYS_clock_adjtime = 347 +const SYS_clock_getres = 247 +const SYS_clock_gettime = 246 +const SYS_clock_nanosleep = 248 +const SYS_clock_settime = 245 +const SYS_clone = 120 +const SYS_clone3 = 435 +const SYS_close = 6 +const SYS_close_range = 436 +const SYS_connect = 328 +const SYS_copy_file_range = 379 +const SYS_creat = 8 +const SYS_create_module = 127 +const SYS_delete_module = 129 +const SYS_dup = 41 +const SYS_dup2 = 63 +const SYS_dup3 = 316 +const SYS_epoll_create = 236 +const SYS_epoll_create1 = 315 +const SYS_epoll_ctl = 237 +const SYS_epoll_pwait = 303 +const SYS_epoll_pwait2 = 441 +const SYS_epoll_wait = 238 +const SYS_eventfd = 307 +const SYS_eventfd2 = 314 +const SYS_execve = 11 +const SYS_execveat = 362 +const SYS_exit = 1 +const SYS_exit_group = 234 +const SYS_faccessat = 298 +const SYS_faccessat2 = 439 +const SYS_fadvise64 = 233 +const SYS_fallocate = 309 +const SYS_fanotify_init = 323 +const SYS_fanotify_mark = 324 +const SYS_fchdir = 133 +const SYS_fchmod = 94 +const SYS_fchmodat = 297 +const SYS_fchmodat2 = 452 +const SYS_fchown = 95 +const SYS_fchownat = 289 +const SYS_fcntl = 55 +const SYS_fdatasync = 148 +const SYS_fgetxattr = 214 +const SYS_finit_module = 353 +const SYS_flistxattr = 217 +const SYS_flock = 143 +const SYS_fork = 2 +const SYS_fremovexattr = 220 +const SYS_fsconfig = 431 +const SYS_fsetxattr = 211 +const SYS_fsmount = 432 +const SYS_fsopen = 430 +const SYS_fspick = 433 +const SYS_fstat = 108 +const SYS_fstatfs64 = 253 +const SYS_fsync = 118 +const SYS_ftime = 35 +const SYS_ftruncate = 93 +const SYS_futex = 221 +const SYS_futex_waitv = 449 +const SYS_futimesat = 290 +const SYS_get_kernel_syms = 130 +const SYS_get_mempolicy = 260 +const SYS_get_robust_list = 299 +const SYS_getcpu = 302 +const SYS_getcwd = 182 +const SYS_getdents64 = 202 +const SYS_getegid = 50 +const SYS_geteuid = 49 +const SYS_getgid = 47 +const SYS_getgroups = 80 +const SYS_getitimer = 105 +const SYS_getpeername = 332 +const SYS_getpgid = 132 +const SYS_getpgrp = 65 +const SYS_getpid = 20 +const SYS_getpmsg = 187 +const SYS_getppid = 64 +const SYS_getpriority = 96 +const SYS_getrandom = 359 +const SYS_getresgid = 170 +const SYS_getresuid = 165 +const SYS_getrusage = 77 +const SYS_getsid = 147 +const SYS_getsockname = 331 +const SYS_getsockopt = 340 +const SYS_gettid = 207 +const SYS_gettimeofday = 78 +const SYS_getuid = 24 +const SYS_getxattr = 212 +const SYS_gtty = 32 +const SYS_idle = 112 +const SYS_init_module = 128 +const SYS_inotify_add_watch = 276 +const SYS_inotify_init = 275 +const SYS_inotify_init1 = 318 +const SYS_inotify_rm_watch = 277 +const SYS_io_cancel = 231 +const SYS_io_destroy = 228 +const SYS_io_getevents = 229 +const SYS_io_pgetevents = 388 +const SYS_io_setup = 227 +const SYS_io_submit = 230 +const SYS_io_uring_enter = 426 +const SYS_io_uring_register = 427 +const SYS_io_uring_setup = 425 +const SYS_ioctl = 54 +const SYS_ioperm = 101 +const SYS_iopl = 110 +const SYS_ioprio_get = 274 +const SYS_ioprio_set = 273 +const SYS_ipc = 117 +const SYS_kcmp = 354 +const SYS_kexec_file_load = 382 +const SYS_kexec_load = 268 +const SYS_keyctl = 271 +const SYS_kill = 37 +const SYS_landlock_add_rule = 445 +const SYS_landlock_create_ruleset = 444 +const SYS_landlock_restrict_self = 446 +const SYS_lchown = 16 +const SYS_lgetxattr = 213 +const SYS_link = 9 +const SYS_linkat = 294 +const SYS_listen = 329 +const SYS_listxattr = 215 +const SYS_llistxattr = 216 +const SYS_lock = 53 +const SYS_lookup_dcookie = 235 +const SYS_lremovexattr = 219 +const SYS_lseek = 19 +const SYS_lsetxattr = 210 +const SYS_lstat = 107 +const SYS_madvise = 205 +const SYS_mbind = 259 +const SYS_membarrier = 365 +const SYS_memfd_create = 360 +const SYS_migrate_pages = 258 +const SYS_mincore = 206 +const SYS_mkdir = 39 +const SYS_mkdirat = 287 +const SYS_mknod = 14 +const SYS_mknodat = 288 +const SYS_mlock = 150 +const SYS_mlock2 = 378 +const SYS_mlockall = 152 +const SYS_mmap = 90 +const SYS_modify_ldt = 123 +const SYS_mount = 21 +const SYS_mount_setattr = 442 +const SYS_move_mount = 429 +const SYS_move_pages = 301 +const SYS_mprotect = 125 +const SYS_mpx = 56 +const SYS_mq_getsetattr = 267 +const SYS_mq_notify = 266 +const SYS_mq_open = 262 +const SYS_mq_timedreceive = 265 +const SYS_mq_timedsend = 264 +const SYS_mq_unlink = 263 +const SYS_mremap = 163 +const SYS_msgctl = 402 +const SYS_msgget = 399 +const SYS_msgrcv = 401 +const SYS_msgsnd = 400 +const SYS_msync = 144 +const SYS_multiplexer = 201 +const SYS_munlock = 151 +const SYS_munlockall = 153 +const SYS_munmap = 91 +const SYS_name_to_handle_at = 345 +const SYS_nanosleep = 162 +const SYS_newfstatat = 291 +const SYS_nfsservctl = 168 +const SYS_nice = 34 +const SYS_oldfstat = 28 +const SYS_oldlstat = 84 +const SYS_oldolduname = 59 +const SYS_oldstat = 18 +const SYS_olduname = 109 +const SYS_open = 5 +const SYS_open_by_handle_at = 346 +const SYS_open_tree = 428 +const SYS_openat = 286 +const SYS_openat2 = 437 +const SYS_pause = 29 +const SYS_pciconfig_iobase = 200 +const SYS_pciconfig_read = 198 +const SYS_pciconfig_write = 199 +const SYS_perf_event_open = 319 +const SYS_personality = 136 +const SYS_pidfd_getfd = 438 +const SYS_pidfd_open = 434 +const SYS_pidfd_send_signal = 424 +const SYS_pipe = 42 +const SYS_pipe2 = 317 +const SYS_pivot_root = 203 +const SYS_pkey_alloc = 384 +const SYS_pkey_free = 385 +const SYS_pkey_mprotect = 386 +const SYS_poll = 167 +const SYS_ppoll = 281 +const SYS_prctl = 171 +const SYS_pread64 = 179 +const SYS_preadv = 320 +const SYS_preadv2 = 380 +const SYS_prlimit64 = 325 +const SYS_process_madvise = 440 +const SYS_process_mrelease = 448 +const SYS_process_vm_readv = 351 +const SYS_process_vm_writev = 352 +const SYS_prof = 44 +const SYS_profil = 98 +const SYS_pselect6 = 280 +const SYS_ptrace = 26 +const SYS_putpmsg = 188 +const SYS_pwrite64 = 180 +const SYS_pwritev = 321 +const SYS_pwritev2 = 381 +const SYS_query_module = 166 +const SYS_quotactl = 131 +const SYS_read = 3 +const SYS_readahead = 191 +const SYS_readdir = 89 +const SYS_readlink = 85 +const SYS_readlinkat = 296 +const SYS_readv = 145 +const SYS_reboot = 88 +const SYS_recv = 336 +const SYS_recvfrom = 337 +const SYS_recvmmsg = 343 +const SYS_recvmsg = 342 +const SYS_remap_file_pages = 239 +const SYS_removexattr = 218 +const SYS_rename = 38 +const SYS_renameat = 293 +const SYS_renameat2 = 357 +const SYS_request_key = 270 +const SYS_restart_syscall = 0 +const SYS_rmdir = 40 +const SYS_rseq = 387 +const SYS_rt_sigaction = 173 +const SYS_rt_sigpending = 175 +const SYS_rt_sigprocmask = 174 +const SYS_rt_sigqueueinfo = 177 +const SYS_rt_sigreturn = 172 +const SYS_rt_sigsuspend = 178 +const SYS_rt_sigtimedwait = 176 +const SYS_rt_tgsigqueueinfo = 322 +const SYS_rtas = 255 +const SYS_sched_get_priority_max = 159 +const SYS_sched_get_priority_min = 160 +const SYS_sched_getaffinity = 223 +const SYS_sched_getattr = 356 +const SYS_sched_getparam = 155 +const SYS_sched_getscheduler = 157 +const SYS_sched_rr_get_interval = 161 +const SYS_sched_setaffinity = 222 +const SYS_sched_setattr = 355 +const SYS_sched_setparam = 154 +const SYS_sched_setscheduler = 156 +const SYS_sched_yield = 158 +const SYS_seccomp = 358 +const SYS_semctl = 394 +const SYS_semget = 393 +const SYS_semtimedop = 392 +const SYS_send = 334 +const SYS_sendfile = 186 +const SYS_sendmmsg = 349 +const SYS_sendmsg = 341 +const SYS_sendto = 335 +const SYS_set_mempolicy = 261 +const SYS_set_mempolicy_home_node = 450 +const SYS_set_robust_list = 300 +const SYS_set_tid_address = 232 +const SYS_setdomainname = 121 +const SYS_setfsgid = 139 +const SYS_setfsuid = 138 +const SYS_setgid = 46 +const SYS_setgroups = 81 +const SYS_sethostname = 74 +const SYS_setitimer = 104 +const SYS_setns = 350 +const SYS_setpgid = 57 +const SYS_setpriority = 97 +const SYS_setregid = 71 +const SYS_setresgid = 169 +const SYS_setresuid = 164 +const SYS_setreuid = 70 +const SYS_setrlimit = 75 +const SYS_setsid = 66 +const SYS_setsockopt = 339 +const SYS_settimeofday = 79 +const SYS_setuid = 23 +const SYS_setxattr = 209 +const SYS_sgetmask = 68 +const SYS_shmat = 397 +const SYS_shmctl = 396 +const SYS_shmdt = 398 +const SYS_shmget = 395 +const SYS_shutdown = 338 +const SYS_sigaction = 67 +const SYS_sigaltstack = 185 +const SYS_signal = 48 +const SYS_signalfd = 305 +const SYS_signalfd4 = 313 +const SYS_sigpending = 73 +const SYS_sigprocmask = 126 +const SYS_sigreturn = 119 +const SYS_sigsuspend = 72 +const SYS_socket = 326 +const SYS_socketcall = 102 +const SYS_socketpair = 333 +const SYS_splice = 283 +const SYS_spu_create = 279 +const SYS_spu_run = 278 +const SYS_ssetmask = 69 +const SYS_stat = 106 +const SYS_statfs64 = 252 +const SYS_statx = 383 +const SYS_stime = 25 +const SYS_stty = 31 +const SYS_subpage_prot = 310 +const SYS_swapcontext = 249 +const SYS_swapoff = 115 +const SYS_swapon = 87 +const SYS_switch_endian = 363 +const SYS_symlink = 83 +const SYS_symlinkat = 295 +const SYS_sync = 36 +const SYS_sync_file_range2 = 308 +const SYS_syncfs = 348 +const SYS_sys_debug_setcontext = 256 +const SYS_sysfs = 135 +const SYS_sysinfo = 116 +const SYS_syslog = 103 +const SYS_tee = 284 +const SYS_tgkill = 250 +const SYS_time = 13 +const SYS_timer_create = 240 +const SYS_timer_delete = 244 +const SYS_timer_getoverrun = 243 +const SYS_timer_gettime = 242 +const SYS_timer_settime = 241 +const SYS_timerfd_create = 306 +const SYS_timerfd_gettime = 312 +const SYS_timerfd_settime = 311 +const SYS_times = 43 +const SYS_tkill = 208 +const SYS_truncate = 92 +const SYS_tuxcall = 225 +const SYS_ugetrlimit = 190 +const SYS_ulimit = 58 +const SYS_umask = 60 +const SYS_umount = 22 +const SYS_umount2 = 52 +const SYS_uname = 122 +const SYS_unlink = 10 +const SYS_unlinkat = 292 +const SYS_unshare = 282 +const SYS_uselib = 86 +const SYS_userfaultfd = 364 +const SYS_ustat = 62 +const SYS_utime = 30 +const SYS_utimensat = 304 +const SYS_utimes = 251 +const SYS_vfork = 189 +const SYS_vhangup = 111 +const SYS_vm86 = 113 +const SYS_vmsplice = 285 +const SYS_wait4 = 114 +const SYS_waitid = 272 +const SYS_waitpid = 7 +const SYS_write = 4 +const SYS_writev = 146 +const TRAP_BRANCH = 3 +const TRAP_BRKPT = 1 +const TRAP_HWBKPT = 4 +const TRAP_TRACE = 2 +const TRAP_UNK = 5 +const VER = -255 +const VER_DEF_CURRENT = 1 +const VER_DEF_NONE = 0 +const VER_DEF_NUM = 2 +const VER_FLG_BASE = 1 +const VER_FLG_WEAK = 2 +const VER_NDX_ELIMINATE = 65281 +const VER_NDX_GLOBAL = 1 +const VER_NDX_LOCAL = 0 +const VER_NDX_LORESERVE = 65280 +const VER_NEED_CURRENT = 1 +const VER_NEED_NONE = 0 +const VER_NEED_NUM = 2 +const WNOHANG = 1 +const WUNTRACED = 2 +const _NSIG = 65 +const __NR__llseek = 140 +const __NR__newselect = 142 +const __NR__sysctl = 149 +const __NR_accept = 330 +const __NR_accept4 = 344 +const __NR_access = 33 +const __NR_acct = 51 +const __NR_add_key = 269 +const __NR_adjtimex = 124 +const __NR_afs_syscall = 137 +const __NR_alarm = 27 +const __NR_bdflush = 134 +const __NR_bind = 327 +const __NR_bpf = 361 +const __NR_break = 17 +const __NR_brk = 45 +const __NR_cachestat = 451 +const __NR_capget = 183 +const __NR_capset = 184 +const __NR_chdir = 12 +const __NR_chmod = 15 +const __NR_chown = 181 +const __NR_chroot = 61 +const __NR_clock_adjtime = 347 +const __NR_clock_getres = 247 +const __NR_clock_gettime = 246 +const __NR_clock_nanosleep = 248 +const __NR_clock_settime = 245 +const __NR_clone = 120 +const __NR_clone3 = 435 +const __NR_close = 6 +const __NR_close_range = 436 +const __NR_connect = 328 +const __NR_copy_file_range = 379 +const __NR_creat = 8 +const __NR_create_module = 127 +const __NR_delete_module = 129 +const __NR_dup = 41 +const __NR_dup2 = 63 +const __NR_dup3 = 316 +const __NR_epoll_create = 236 +const __NR_epoll_create1 = 315 +const __NR_epoll_ctl = 237 +const __NR_epoll_pwait = 303 +const __NR_epoll_pwait2 = 441 +const __NR_epoll_wait = 238 +const __NR_eventfd = 307 +const __NR_eventfd2 = 314 +const __NR_execve = 11 +const __NR_execveat = 362 +const __NR_exit = 1 +const __NR_exit_group = 234 +const __NR_faccessat = 298 +const __NR_faccessat2 = 439 +const __NR_fadvise64 = 233 +const __NR_fallocate = 309 +const __NR_fanotify_init = 323 +const __NR_fanotify_mark = 324 +const __NR_fchdir = 133 +const __NR_fchmod = 94 +const __NR_fchmodat = 297 +const __NR_fchmodat2 = 452 +const __NR_fchown = 95 +const __NR_fchownat = 289 +const __NR_fcntl = 55 +const __NR_fdatasync = 148 +const __NR_fgetxattr = 214 +const __NR_finit_module = 353 +const __NR_flistxattr = 217 +const __NR_flock = 143 +const __NR_fork = 2 +const __NR_fremovexattr = 220 +const __NR_fsconfig = 431 +const __NR_fsetxattr = 211 +const __NR_fsmount = 432 +const __NR_fsopen = 430 +const __NR_fspick = 433 +const __NR_fstat = 108 +const __NR_fstatfs = 100 +const __NR_fstatfs64 = 253 +const __NR_fsync = 118 +const __NR_ftime = 35 +const __NR_ftruncate = 93 +const __NR_futex = 221 +const __NR_futex_waitv = 449 +const __NR_futimesat = 290 +const __NR_get_kernel_syms = 130 +const __NR_get_mempolicy = 260 +const __NR_get_robust_list = 299 +const __NR_getcpu = 302 +const __NR_getcwd = 182 +const __NR_getdents = 141 +const __NR_getdents64 = 202 +const __NR_getegid = 50 +const __NR_geteuid = 49 +const __NR_getgid = 47 +const __NR_getgroups = 80 +const __NR_getitimer = 105 +const __NR_getpeername = 332 +const __NR_getpgid = 132 +const __NR_getpgrp = 65 +const __NR_getpid = 20 +const __NR_getpmsg = 187 +const __NR_getppid = 64 +const __NR_getpriority = 96 +const __NR_getrandom = 359 +const __NR_getresgid = 170 +const __NR_getresuid = 165 +const __NR_getrlimit = 76 +const __NR_getrusage = 77 +const __NR_getsid = 147 +const __NR_getsockname = 331 +const __NR_getsockopt = 340 +const __NR_gettid = 207 +const __NR_gettimeofday = 78 +const __NR_getuid = 24 +const __NR_getxattr = 212 +const __NR_gtty = 32 +const __NR_idle = 112 +const __NR_init_module = 128 +const __NR_inotify_add_watch = 276 +const __NR_inotify_init = 275 +const __NR_inotify_init1 = 318 +const __NR_inotify_rm_watch = 277 +const __NR_io_cancel = 231 +const __NR_io_destroy = 228 +const __NR_io_getevents = 229 +const __NR_io_pgetevents = 388 +const __NR_io_setup = 227 +const __NR_io_submit = 230 +const __NR_io_uring_enter = 426 +const __NR_io_uring_register = 427 +const __NR_io_uring_setup = 425 +const __NR_ioctl = 54 +const __NR_ioperm = 101 +const __NR_iopl = 110 +const __NR_ioprio_get = 274 +const __NR_ioprio_set = 273 +const __NR_ipc = 117 +const __NR_kcmp = 354 +const __NR_kexec_file_load = 382 +const __NR_kexec_load = 268 +const __NR_keyctl = 271 +const __NR_kill = 37 +const __NR_landlock_add_rule = 445 +const __NR_landlock_create_ruleset = 444 +const __NR_landlock_restrict_self = 446 +const __NR_lchown = 16 +const __NR_lgetxattr = 213 +const __NR_link = 9 +const __NR_linkat = 294 +const __NR_listen = 329 +const __NR_listxattr = 215 +const __NR_llistxattr = 216 +const __NR_lock = 53 +const __NR_lookup_dcookie = 235 +const __NR_lremovexattr = 219 +const __NR_lseek = 19 +const __NR_lsetxattr = 210 +const __NR_lstat = 107 +const __NR_madvise = 205 +const __NR_mbind = 259 +const __NR_membarrier = 365 +const __NR_memfd_create = 360 +const __NR_migrate_pages = 258 +const __NR_mincore = 206 +const __NR_mkdir = 39 +const __NR_mkdirat = 287 +const __NR_mknod = 14 +const __NR_mknodat = 288 +const __NR_mlock = 150 +const __NR_mlock2 = 378 +const __NR_mlockall = 152 +const __NR_mmap = 90 +const __NR_modify_ldt = 123 +const __NR_mount = 21 +const __NR_mount_setattr = 442 +const __NR_move_mount = 429 +const __NR_move_pages = 301 +const __NR_mprotect = 125 +const __NR_mpx = 56 +const __NR_mq_getsetattr = 267 +const __NR_mq_notify = 266 +const __NR_mq_open = 262 +const __NR_mq_timedreceive = 265 +const __NR_mq_timedsend = 264 +const __NR_mq_unlink = 263 +const __NR_mremap = 163 +const __NR_msgctl = 402 +const __NR_msgget = 399 +const __NR_msgrcv = 401 +const __NR_msgsnd = 400 +const __NR_msync = 144 +const __NR_multiplexer = 201 +const __NR_munlock = 151 +const __NR_munlockall = 153 +const __NR_munmap = 91 +const __NR_name_to_handle_at = 345 +const __NR_nanosleep = 162 +const __NR_newfstatat = 291 +const __NR_nfsservctl = 168 +const __NR_nice = 34 +const __NR_oldfstat = 28 +const __NR_oldlstat = 84 +const __NR_oldolduname = 59 +const __NR_oldstat = 18 +const __NR_olduname = 109 +const __NR_open = 5 +const __NR_open_by_handle_at = 346 +const __NR_open_tree = 428 +const __NR_openat = 286 +const __NR_openat2 = 437 +const __NR_pause = 29 +const __NR_pciconfig_iobase = 200 +const __NR_pciconfig_read = 198 +const __NR_pciconfig_write = 199 +const __NR_perf_event_open = 319 +const __NR_personality = 136 +const __NR_pidfd_getfd = 438 +const __NR_pidfd_open = 434 +const __NR_pidfd_send_signal = 424 +const __NR_pipe = 42 +const __NR_pipe2 = 317 +const __NR_pivot_root = 203 +const __NR_pkey_alloc = 384 +const __NR_pkey_free = 385 +const __NR_pkey_mprotect = 386 +const __NR_poll = 167 +const __NR_ppoll = 281 +const __NR_prctl = 171 +const __NR_pread64 = 179 +const __NR_preadv = 320 +const __NR_preadv2 = 380 +const __NR_prlimit64 = 325 +const __NR_process_madvise = 440 +const __NR_process_mrelease = 448 +const __NR_process_vm_readv = 351 +const __NR_process_vm_writev = 352 +const __NR_prof = 44 +const __NR_profil = 98 +const __NR_pselect6 = 280 +const __NR_ptrace = 26 +const __NR_putpmsg = 188 +const __NR_pwrite64 = 180 +const __NR_pwritev = 321 +const __NR_pwritev2 = 381 +const __NR_query_module = 166 +const __NR_quotactl = 131 +const __NR_read = 3 +const __NR_readahead = 191 +const __NR_readdir = 89 +const __NR_readlink = 85 +const __NR_readlinkat = 296 +const __NR_readv = 145 +const __NR_reboot = 88 +const __NR_recv = 336 +const __NR_recvfrom = 337 +const __NR_recvmmsg = 343 +const __NR_recvmsg = 342 +const __NR_remap_file_pages = 239 +const __NR_removexattr = 218 +const __NR_rename = 38 +const __NR_renameat = 293 +const __NR_renameat2 = 357 +const __NR_request_key = 270 +const __NR_restart_syscall = 0 +const __NR_rmdir = 40 +const __NR_rseq = 387 +const __NR_rt_sigaction = 173 +const __NR_rt_sigpending = 175 +const __NR_rt_sigprocmask = 174 +const __NR_rt_sigqueueinfo = 177 +const __NR_rt_sigreturn = 172 +const __NR_rt_sigsuspend = 178 +const __NR_rt_sigtimedwait = 176 +const __NR_rt_tgsigqueueinfo = 322 +const __NR_rtas = 255 +const __NR_sched_get_priority_max = 159 +const __NR_sched_get_priority_min = 160 +const __NR_sched_getaffinity = 223 +const __NR_sched_getattr = 356 +const __NR_sched_getparam = 155 +const __NR_sched_getscheduler = 157 +const __NR_sched_rr_get_interval = 161 +const __NR_sched_setaffinity = 222 +const __NR_sched_setattr = 355 +const __NR_sched_setparam = 154 +const __NR_sched_setscheduler = 156 +const __NR_sched_yield = 158 +const __NR_seccomp = 358 +const __NR_select = 82 +const __NR_semctl = 394 +const __NR_semget = 393 +const __NR_semtimedop = 392 +const __NR_send = 334 +const __NR_sendfile = 186 +const __NR_sendmmsg = 349 +const __NR_sendmsg = 341 +const __NR_sendto = 335 +const __NR_set_mempolicy = 261 +const __NR_set_mempolicy_home_node = 450 +const __NR_set_robust_list = 300 +const __NR_set_tid_address = 232 +const __NR_setdomainname = 121 +const __NR_setfsgid = 139 +const __NR_setfsuid = 138 +const __NR_setgid = 46 +const __NR_setgroups = 81 +const __NR_sethostname = 74 +const __NR_setitimer = 104 +const __NR_setns = 350 +const __NR_setpgid = 57 +const __NR_setpriority = 97 +const __NR_setregid = 71 +const __NR_setresgid = 169 +const __NR_setresuid = 164 +const __NR_setreuid = 70 +const __NR_setrlimit = 75 +const __NR_setsid = 66 +const __NR_setsockopt = 339 +const __NR_settimeofday = 79 +const __NR_setuid = 23 +const __NR_setxattr = 209 +const __NR_sgetmask = 68 +const __NR_shmat = 397 +const __NR_shmctl = 396 +const __NR_shmdt = 398 +const __NR_shmget = 395 +const __NR_shutdown = 338 +const __NR_sigaction = 67 +const __NR_sigaltstack = 185 +const __NR_signal = 48 +const __NR_signalfd = 305 +const __NR_signalfd4 = 313 +const __NR_sigpending = 73 +const __NR_sigprocmask = 126 +const __NR_sigreturn = 119 +const __NR_sigsuspend = 72 +const __NR_socket = 326 +const __NR_socketcall = 102 +const __NR_socketpair = 333 +const __NR_splice = 283 +const __NR_spu_create = 279 +const __NR_spu_run = 278 +const __NR_ssetmask = 69 +const __NR_stat = 106 +const __NR_statfs = 99 +const __NR_statfs64 = 252 +const __NR_statx = 383 +const __NR_stime = 25 +const __NR_stty = 31 +const __NR_subpage_prot = 310 +const __NR_swapcontext = 249 +const __NR_swapoff = 115 +const __NR_swapon = 87 +const __NR_switch_endian = 363 +const __NR_symlink = 83 +const __NR_symlinkat = 295 +const __NR_sync = 36 +const __NR_sync_file_range2 = 308 +const __NR_syncfs = 348 +const __NR_sys_debug_setcontext = 256 +const __NR_sysfs = 135 +const __NR_sysinfo = 116 +const __NR_syslog = 103 +const __NR_tee = 284 +const __NR_tgkill = 250 +const __NR_time = 13 +const __NR_timer_create = 240 +const __NR_timer_delete = 244 +const __NR_timer_getoverrun = 243 +const __NR_timer_gettime = 242 +const __NR_timer_settime = 241 +const __NR_timerfd_create = 306 +const __NR_timerfd_gettime = 312 +const __NR_timerfd_settime = 311 +const __NR_times = 43 +const __NR_tkill = 208 +const __NR_truncate = 92 +const __NR_tuxcall = 225 +const __NR_ugetrlimit = 190 +const __NR_ulimit = 58 +const __NR_umask = 60 +const __NR_umount = 22 +const __NR_umount2 = 52 +const __NR_uname = 122 +const __NR_unlink = 10 +const __NR_unlinkat = 292 +const __NR_unshare = 282 +const __NR_uselib = 86 +const __NR_userfaultfd = 364 +const __NR_ustat = 62 +const __NR_utime = 30 +const __NR_utimensat = 304 +const __NR_utimes = 251 +const __NR_vfork = 189 +const __NR_vhangup = 111 +const __NR_vm86 = 113 +const __NR_vmsplice = 285 +const __NR_wait4 = 114 +const __NR_waitid = 272 +const __NR_waitpid = 7 +const __NR_write = 4 +const __NR_writev = 146 +const __SC_accept = 5 +const __SC_accept4 = 18 +const __SC_bind = 2 +const __SC_connect = 3 +const __SC_getpeername = 7 +const __SC_getsockname = 6 +const __SC_getsockopt = 15 +const __SC_listen = 4 +const __SC_recv = 10 +const __SC_recvfrom = 12 +const __SC_recvmmsg = 19 +const __SC_recvmsg = 17 +const __SC_send = 9 +const __SC_sendmmsg = 20 +const __SC_sendmsg = 16 +const __SC_sendto = 11 +const __SC_setsockopt = 14 +const __SC_shutdown = 13 +const __SC_socket = 1 +const __SC_socketpair = 8 +const libc = 0 + +type Ttime_t = int64 + +type Tsuseconds_t = int64 + +type Ttimeval = struct { + Ftv_sec Ttime_t + Ftv_usec Tsuseconds_t +} + +type Ttimespec = struct { + Ftv_sec Ttime_t + Ftv_nsec int64 +} + +type Tsigset_t = struct { + F__bits [16]uint64 +} + +type t__sigset_t = Tsigset_t + +type Tfd_mask = uint64 + +type Tfd_set = struct { + Ffds_bits [16]uint64 +} + +type Titimerval = struct { + Fit_interval Ttimeval + Fit_value Ttimeval +} + +type Tid_t = uint32 + +type Trlim_t = uint64 + +type Trlimit = struct { + Frlim_cur Trlim_t + Frlim_max Trlim_t +} + +type Trusage = struct { + Fru_utime Ttimeval + Fru_stime Ttimeval + Fru_maxrss int64 + Fru_ixrss int64 + Fru_idrss int64 + Fru_isrss int64 + Fru_minflt int64 + Fru_majflt int64 + Fru_nswap int64 + Fru_inblock int64 + Fru_oublock int64 + Fru_msgsnd int64 + Fru_msgrcv int64 + Fru_nsignals int64 + Fru_nvcsw int64 + Fru_nivcsw int64 + F__reserved [16]int64 +} + +type Tclock_t = int64 + +type Tpthread_t = uintptr + +type Tpthread_attr_t = struct { + F__u struct { + F__vi [0][14]int32 + F__s [0][7]uint64 + F__i [14]int32 + } +} + +type Tstack_t = struct { + Fss_sp uintptr + Fss_flags int32 + Fss_size Tsize_t +} + +type Tsigaltstack = Tstack_t + +type Tmcontext_t = struct { + F__regs [191]int64 +} + +type Tucontext_t = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t +} + +type t__ucontext = Tucontext_t + +type Tsigval = struct { + Fsival_ptr [0]uintptr + Fsival_int int32 + F__ccgo_pad2 [4]byte +} + +type Tsiginfo_t = struct { + Fsi_signo int32 + Fsi_errno int32 + Fsi_code int32 + F__si_fields struct { + F__si_common [0]struct { + F__first struct { + F__timer [0]struct { + Fsi_timerid int32 + Fsi_overrun int32 + } + F__piduid struct { + Fsi_pid Tpid_t + Fsi_uid Tuid_t + } + } + F__second struct { + F__sigchld [0]struct { + Fsi_status int32 + Fsi_utime Tclock_t + Fsi_stime Tclock_t + } + Fsi_value Tsigval + F__ccgo_pad2 [16]byte + } + } + F__sigfault [0]struct { + Fsi_addr uintptr + Fsi_addr_lsb int16 + F__first struct { + Fsi_pkey [0]uint32 + F__addr_bnd struct { + Fsi_lower uintptr + Fsi_upper uintptr + } + } + } + F__sigpoll [0]struct { + Fsi_band int64 + Fsi_fd int32 + } + F__sigsys [0]struct { + Fsi_call_addr uintptr + Fsi_syscall int32 + Fsi_arch uint32 + } + F__pad [112]uint8 + } +} + +type Tsigaction = struct { + F__sa_handler struct { + Fsa_sigaction [0]uintptr + Fsa_handler uintptr + } + Fsa_mask Tsigset_t + Fsa_flags int32 + Fsa_restorer uintptr +} + +type Tsigevent = struct { + Fsigev_value Tsigval + Fsigev_signo int32 + Fsigev_notify int32 + F__sev_fields struct { + Fsigev_notify_thread_id [0]Tpid_t + F__sev_thread [0]struct { + Fsigev_notify_function uintptr + Fsigev_notify_attributes uintptr + } + F__pad [48]uint8 + } +} + +type Tsig_atomic_t = int32 + +type TElf32_Half = uint16 + +type TElf64_Half = uint16 + +type TElf32_Word = uint32 + +type TElf32_Sword = int32 + +type TElf64_Word = uint32 + +type TElf64_Sword = int32 + +type TElf32_Xword = uint64 + +type TElf32_Sxword = int64 + +type TElf64_Xword = uint64 + +type TElf64_Sxword = int64 + +type TElf32_Addr = uint32 + +type TElf64_Addr = uint64 + +type TElf32_Off = uint32 + +type TElf64_Off = uint64 + +type TElf32_Section = uint16 + +type TElf64_Section = uint16 + +type TElf32_Versym = uint16 + +type TElf64_Versym = uint16 + +type TElf32_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf32_Half + Fe_machine TElf32_Half + Fe_version TElf32_Word + Fe_entry TElf32_Addr + Fe_phoff TElf32_Off + Fe_shoff TElf32_Off + Fe_flags TElf32_Word + Fe_ehsize TElf32_Half + Fe_phentsize TElf32_Half + Fe_phnum TElf32_Half + Fe_shentsize TElf32_Half + Fe_shnum TElf32_Half + Fe_shstrndx TElf32_Half +} + +type TElf64_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TElf32_Shdr = struct { + Fsh_name TElf32_Word + Fsh_type TElf32_Word + Fsh_flags TElf32_Word + Fsh_addr TElf32_Addr + Fsh_offset TElf32_Off + Fsh_size TElf32_Word + Fsh_link TElf32_Word + Fsh_info TElf32_Word + Fsh_addralign TElf32_Word + Fsh_entsize TElf32_Word +} + +type TElf64_Shdr = struct { + Fsh_name TElf64_Word + Fsh_type TElf64_Word + Fsh_flags TElf64_Xword + Fsh_addr TElf64_Addr + Fsh_offset TElf64_Off + Fsh_size TElf64_Xword + Fsh_link TElf64_Word + Fsh_info TElf64_Word + Fsh_addralign TElf64_Xword + Fsh_entsize TElf64_Xword +} + +type TElf32_Chdr = struct { + Fch_type TElf32_Word + Fch_size TElf32_Word + Fch_addralign TElf32_Word +} + +type TElf64_Chdr = struct { + Fch_type TElf64_Word + Fch_reserved TElf64_Word + Fch_size TElf64_Xword + Fch_addralign TElf64_Xword +} + +type TElf32_Sym = struct { + Fst_name TElf32_Word + Fst_value TElf32_Addr + Fst_size TElf32_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf32_Section +} + +type TElf64_Sym = struct { + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TElf32_Syminfo = struct { + Fsi_boundto TElf32_Half + Fsi_flags TElf32_Half +} + +type TElf64_Syminfo = struct { + Fsi_boundto TElf64_Half + Fsi_flags TElf64_Half +} + +type TElf32_Rel = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word +} + +type TElf64_Rel = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword +} + +type TElf32_Rela = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word + Fr_addend TElf32_Sword +} + +type TElf64_Rela = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword + Fr_addend TElf64_Sxword +} + +type TElf32_Relr = uint32 + +type TElf64_Relr = uint64 + +type TElf32_Phdr = struct { + Fp_type TElf32_Word + Fp_offset TElf32_Off + Fp_vaddr TElf32_Addr + Fp_paddr TElf32_Addr + Fp_filesz TElf32_Word + Fp_memsz TElf32_Word + Fp_flags TElf32_Word + Fp_align TElf32_Word +} + +type TElf64_Phdr = struct { + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TElf32_Dyn = struct { + Fd_tag TElf32_Sword + Fd_un struct { + Fd_ptr [0]TElf32_Addr + Fd_val TElf32_Word + } +} + +type TElf64_Dyn = struct { + Fd_tag TElf64_Sxword + Fd_un struct { + Fd_ptr [0]TElf64_Addr + Fd_val TElf64_Xword + } +} + +type TElf32_Verdef = struct { + Fvd_version TElf32_Half + Fvd_flags TElf32_Half + Fvd_ndx TElf32_Half + Fvd_cnt TElf32_Half + Fvd_hash TElf32_Word + Fvd_aux TElf32_Word + Fvd_next TElf32_Word +} + +type TElf64_Verdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TElf32_Verdaux = struct { + Fvda_name TElf32_Word + Fvda_next TElf32_Word +} + +type TElf64_Verdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +type TElf32_Verneed = struct { + Fvn_version TElf32_Half + Fvn_cnt TElf32_Half + Fvn_file TElf32_Word + Fvn_aux TElf32_Word + Fvn_next TElf32_Word +} + +type TElf64_Verneed = struct { + Fvn_version TElf64_Half + Fvn_cnt TElf64_Half + Fvn_file TElf64_Word + Fvn_aux TElf64_Word + Fvn_next TElf64_Word +} + +type TElf32_Vernaux = struct { + Fvna_hash TElf32_Word + Fvna_flags TElf32_Half + Fvna_other TElf32_Half + Fvna_name TElf32_Word + Fvna_next TElf32_Word +} + +type TElf64_Vernaux = struct { + Fvna_hash TElf64_Word + Fvna_flags TElf64_Half + Fvna_other TElf64_Half + Fvna_name TElf64_Word + Fvna_next TElf64_Word +} + +type TElf32_auxv_t = struct { + Fa_type Tuint32_t + Fa_un struct { + Fa_val Tuint32_t + } +} + +type TElf64_auxv_t = struct { + Fa_type Tuint64_t + Fa_un struct { + Fa_val Tuint64_t + } +} + +type TElf32_Nhdr = struct { + Fn_namesz TElf32_Word + Fn_descsz TElf32_Word + Fn_type TElf32_Word +} + +type TElf64_Nhdr = struct { + Fn_namesz TElf64_Word + Fn_descsz TElf64_Word + Fn_type TElf64_Word +} + +type TElf32_Move = struct { + Fm_value TElf32_Xword + Fm_info TElf32_Word + Fm_poffset TElf32_Word + Fm_repeat TElf32_Half + Fm_stride TElf32_Half +} + +type TElf64_Move = struct { + Fm_value TElf64_Xword + Fm_info TElf64_Xword + Fm_poffset TElf64_Xword + Fm_repeat TElf64_Half + Fm_stride TElf64_Half +} + +type TElf32_gptab = struct { + Fgt_entry [0]struct { + Fgt_g_value TElf32_Word + Fgt_bytes TElf32_Word + } + Fgt_header struct { + Fgt_current_g_value TElf32_Word + Fgt_unused TElf32_Word + } +} + +type TElf32_RegInfo = struct { + Fri_gprmask TElf32_Word + Fri_cprmask [4]TElf32_Word + Fri_gp_value TElf32_Sword +} + +type TElf_Options = struct { + Fkind uint8 + Fsize uint8 + Fsection TElf32_Section + Finfo TElf32_Word +} + +type TElf_Options_Hw = struct { + Fhwp_flags1 TElf32_Word + Fhwp_flags2 TElf32_Word +} + +type TElf32_Lib = struct { + Fl_name TElf32_Word + Fl_time_stamp TElf32_Word + Fl_checksum TElf32_Word + Fl_version TElf32_Word + Fl_flags TElf32_Word +} + +type TElf64_Lib = struct { + Fl_name TElf64_Word + Fl_time_stamp TElf64_Word + Fl_checksum TElf64_Word + Fl_version TElf64_Word + Fl_flags TElf64_Word +} + +type TElf32_Conflict = uint32 + +type TElf_MIPS_ABIFlags_v0 = struct { + Fversion TElf32_Half + Fisa_level uint8 + Fisa_rev uint8 + Fgpr_size uint8 + Fcpr1_size uint8 + Fcpr2_size uint8 + Ffp_abi uint8 + Fisa_ext TElf32_Word + Fases TElf32_Word + Fflags1 TElf32_Word + Fflags2 TElf32_Word +} + +const _Val_GNU_MIPS_ABI_FP_ANY = 0 +const _Val_GNU_MIPS_ABI_FP_DOUBLE = 1 +const _Val_GNU_MIPS_ABI_FP_SINGLE = 2 +const _Val_GNU_MIPS_ABI_FP_SOFT = 3 +const _Val_GNU_MIPS_ABI_FP_OLD_64 = 4 +const _Val_GNU_MIPS_ABI_FP_XX = 5 +const _Val_GNU_MIPS_ABI_FP_64 = 6 +const _Val_GNU_MIPS_ABI_FP_64A = 7 +const _Val_GNU_MIPS_ABI_FP_MAX = 7 + +type Tsyscall_arg_t = int64 + +type Twchar_t = int32 + +type Tdiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tldiv_t = struct { + Fquot int64 + Frem int64 +} + +type Tlldiv_t = struct { + Fquot int64 + Frem int64 +} + +type t__locale_struct = struct { + Fcat [6]uintptr +} + +type Ttls_module = struct { + Fnext uintptr + Fimage uintptr + Flen1 Tsize_t + Fsize Tsize_t + Falign Tsize_t + Foffset Tsize_t +} + +type t__libc = struct { + Fcan_do_threads uint8 + Fthreaded uint8 + Fsecure uint8 + Fneed_locks int8 + Fthreads_minus_1 int32 + Fauxv uintptr + Ftls_head uintptr + Ftls_size Tsize_t + Ftls_align Tsize_t + Ftls_cnt Tsize_t + Fpage_size Tsize_t + Fglobal_locale t__locale_struct +} + +func Xsysconf(tls *TLS, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var cnt, i, v3 int32 + var mem, v1, v6 uint64 + var val int64 + var p5 uintptr + var _ /* lim at bp+0 */ Trlimit + var _ /* set at bp+16 */ [128]uint8 + var _ /* si at bp+144 */ Tsysinfo + _, _, _, _, _, _, _, _ = cnt, i, mem, val, v1, v3, v6, p5 + if uint64(name) >= Uint64FromInt64(502)/Uint64FromInt64(2) || !(_values1[name] != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } else { + if int32(_values1[name]) >= -int32(1) { + return int64(_values1[name]) + } else { + if int32(_values1[name]) < -int32(256) { + Xgetrlimit(tls, int32(_values1[name])&int32(16383), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur == ^Uint64FromUint64(0) { + return int64(-int32(1)) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur > uint64(0x7fffffffffffffff) { + v1 = uint64(0x7fffffffffffffff) + } else { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } + return int64(v1) + } + } + } + switch int32(uint8(_values1[name])) { + case (-Int32FromInt32(256) | Int32FromInt32(1)) & Int32FromInt32(255): + return int64(200809) + case (-Int32FromInt32(256) | Int32FromInt32(2)) & Int32FromInt32(255): + return int64(ARG_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(3)) & Int32FromInt32(255): + return int64(MQ_PRIO_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(4)) & Int32FromInt32(255): + return int64(X__libc.Fpage_size) + case (-Int32FromInt32(256) | Int32FromInt32(5)) & Int32FromInt32(255): + return int64(SEM_VALUE_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(11)) & Int32FromInt32(255): + return int64(DELAYTIMER_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(6)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(7)) & Int32FromInt32(255): + *(*[128]uint8)(unsafe.Pointer(bp + 16)) = [128]uint8{ + 0: uint8(1), + } + X__syscall3(tls, int64(SYS_sched_getaffinity), int64(Int32FromInt32(0)), int64(Uint64FromInt64(128)), int64(bp+16)) + v3 = Int32FromInt32(0) + cnt = v3 + i = v3 + for { + if !(uint64(i) < uint64(128)) { + break + } + for { + if !((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i] != 0) { + break + } + goto _4 + _4: + ; + p5 = bp + 16 + uintptr(i) + *(*uint8)(unsafe.Pointer(p5)) = uint8(int32(*(*uint8)(unsafe.Pointer(p5))) & (int32((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i]) - Int32FromInt32(1))) + cnt++ + } + goto _2 + _2: + ; + i++ + } + return int64(cnt) + case (-Int32FromInt32(256) | Int32FromInt32(8)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(9)) & Int32FromInt32(255): + X__lsysinfo(tls, bp+144) + if !((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit != 0) { + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit = uint32(1) + } + if name == int32(_SC_PHYS_PAGES) { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ftotalram + } else { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ffreeram + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fbufferram + } + mem *= uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit) + mem /= X__libc.Fpage_size + if mem > uint64(0x7fffffffffffffff) { + v6 = uint64(0x7fffffffffffffff) + } else { + v6 = mem + } + return int64(v6) + case (-Int32FromInt32(256) | Int32FromInt32(12)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(13)) & Int32FromInt32(255): + val = int64(X__getauxval(tls, uint64(AT_MINSIGSTKSZ))) + if val < int64(MINSIGSTKSZ) { + val = int64(MINSIGSTKSZ) + } + if int32(_values1[name]) == -Int32FromInt32(256)|Int32FromInt32(13) { + val += int64(Int32FromInt32(SIGSTKSZ) - Int32FromInt32(MINSIGSTKSZ)) + } + return val + case (-Int32FromInt32(256) | Int32FromInt32(10)) & Int32FromInt32(255): + return 0 + } + return int64(_values1[name]) +} + +var _values1 = [251]int16{ + 0: int16(-Int32FromInt32(256) | Int32FromInt32(2)), + 1: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NPROC)), + 2: int16(100), + 3: int16(32), + 4: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NOFILE)), + 5: int16(-int32(1)), + 6: int16(TZNAME_MAX), + 7: int16(1), + 8: int16(1), + 9: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 10: int16(-int32(1)), + 11: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 12: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 13: int16(-int32(1)), + 14: int16(-int32(1)), + 15: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 16: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 17: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 18: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 19: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 20: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 21: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 22: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 23: int16(-int32(1)), + 24: int16(-int32(1)), + 25: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 26: int16(-Int32FromInt32(256) | Int32FromInt32(11)), + 27: int16(-int32(1)), + 28: int16(-Int32FromInt32(256) | Int32FromInt32(3)), + 29: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 30: int16(-Int32FromInt32(256) | Int32FromInt32(4)), + 31: int16(Int32FromInt32(_NSIG) - Int32FromInt32(1) - Int32FromInt32(31) - Int32FromInt32(3)), + 32: int16(SEM_NSEMS_MAX), + 33: int16(-Int32FromInt32(256) | Int32FromInt32(5)), + 34: int16(-int32(1)), + 35: int16(-int32(1)), + 36: int16(_POSIX2_BC_BASE_MAX), + 37: int16(_POSIX2_BC_DIM_MAX), + 38: int16(_POSIX2_BC_SCALE_MAX), + 39: int16(_POSIX2_BC_STRING_MAX), + 40: int16(COLL_WEIGHTS_MAX), + 42: int16(-int32(1)), + 43: int16(-int32(1)), + 44: int16(RE_DUP_MAX), + 46: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 47: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 48: int16(-int32(1)), + 49: int16(-int32(1)), + 50: int16(-int32(1)), + 51: int16(-int32(1)), + 52: int16(-int32(1)), + 60: int16(IOV_MAX), + 67: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 68: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 69: int16(-int32(1)), + 70: int16(-int32(1)), + 71: int16(256), + 72: int16(TTY_NAME_MAX), + 73: int16(PTHREAD_DESTRUCTOR_ITERATIONS), + 74: int16(PTHREAD_KEYS_MAX), + 75: int16(PTHREAD_STACK_MIN), + 76: int16(-int32(1)), + 77: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 78: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 79: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 80: int16(-int32(1)), + 81: int16(-int32(1)), + 82: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 83: int16(-Int32FromInt32(256) | Int32FromInt32(6)), + 84: int16(-Int32FromInt32(256) | Int32FromInt32(7)), + 85: int16(-Int32FromInt32(256) | Int32FromInt32(8)), + 86: int16(-Int32FromInt32(256) | Int32FromInt32(9)), + 87: int16(-int32(1)), + 88: int16(-int32(1)), + 89: int16(_XOPEN_VERSION), + 90: int16(_XOPEN_VERSION), + 91: int16(1), + 92: int16(-int32(1)), + 93: int16(1), + 94: int16(1), + 95: int16(-int32(1)), + 97: int16(-int32(1)), + 98: int16(-int32(1)), + 99: int16(-int32(1)), + 100: int16(-int32(1)), + 109: int16(NZERO), + 125: int16(-int32(1)), + 126: int16(-int32(1)), + 127: int16(1), + 128: int16(-int32(1)), + 129: int16(-int32(1)), + 130: int16(-int32(1)), + 131: int16(-int32(1)), + 132: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 133: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 137: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 138: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 139: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 149: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 153: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 154: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 155: int16(1), + 157: int16(1), + 159: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 160: int16(-int32(1)), + 161: int16(-int32(1)), + 164: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 165: int16(-int32(1)), + 168: int16(-int32(1)), + 169: int16(-int32(1)), + 170: int16(-int32(1)), + 171: int16(-int32(1)), + 172: int16(-int32(1)), + 173: int16(SYMLOOP_MAX), + 174: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 175: int16(-int32(1)), + 176: int16(-int32(1)), + 177: int16(-int32(1)), + 178: int16(1), + 179: int16(-int32(1)), + 180: int16(HOST_NAME_MAX), + 181: int16(-int32(1)), + 182: int16(-int32(1)), + 183: int16(-int32(1)), + 184: int16(-int32(1)), + 235: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 236: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 237: int16(-int32(1)), + 238: int16(-int32(1)), + 239: int16(1), + 240: int16(-int32(1)), + 241: int16(-int32(1)), + 242: int16(-int32(1)), + 243: int16(-int32(1)), + 244: int16(-int32(1)), + 245: int16(-int32(1)), + 246: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 247: int16(-int32(1)), + 248: int16(-int32(1)), + 249: int16(-Int32FromInt32(256) | Int32FromInt32(12)), + 250: int16(-Int32FromInt32(256) | Int32FromInt32(13)), +} + +type Tcrypt_data = struct { + Finitialized int32 + F__buf [256]uint8 +} + +func Xcrypt(tls *TLS, key uintptr, salt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v, (%v:)", tls, key, salt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, uintptr(unsafe.Pointer(&_buf))) +} + +/* This buffer is sufficiently large for all + * currently-supported hash types. It needs to be updated if + * longer hashes are added. The cast to struct crypt_data * is + * purely to meet the public API requirements of the crypt_r + * function; the implementation of crypt_r uses the object + * purely as a char buffer. */ +var _buf [128]uint8 + +const BF_N = 16 + +type Tlocale_t = uintptr + +type TBF_word = uint32 + +type TBF_word_signed = int32 + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ + +type TBF_key = [18]TBF_word + +type TBF_ctx = struct { + FPS [0][1042]TBF_word + Fs struct { + FP TBF_key + FS [4][256]TBF_word + } +} + +// C documentation +// +// /* +// * Magic IV for 64 Blowfish encryptions that we do at the end. +// * The string is "OrpheanBeholderScryDoubt" on big-endian. +// */ +var _BF_magic_w = [6]TBF_word{ + 0: uint32(0x4F727068), + 1: uint32(0x65616E42), + 2: uint32(0x65686F6C), + 3: uint32(0x64657253), + 4: uint32(0x63727944), + 5: uint32(0x6F756274), +} + +// C documentation +// +// /* +// * P-box and S-box tables initialized with digits of Pi. +// */ +var _BF_init_state = *(*TBF_ctx)(unsafe.Pointer(&struct { + FP TBF_key + FS [4][256]TBF_word +}{ + FP: TBF_key{ + 0: uint32(0x243f6a88), + 1: uint32(0x85a308d3), + 2: uint32(0x13198a2e), + 3: uint32(0x03707344), + 4: uint32(0xa4093822), + 5: uint32(0x299f31d0), + 6: uint32(0x082efa98), + 7: uint32(0xec4e6c89), + 8: uint32(0x452821e6), + 9: uint32(0x38d01377), + 10: uint32(0xbe5466cf), + 11: uint32(0x34e90c6c), + 12: uint32(0xc0ac29b7), + 13: uint32(0xc97c50dd), + 14: uint32(0x3f84d5b5), + 15: uint32(0xb5470917), + 16: uint32(0x9216d5d9), + 17: uint32(0x8979fb1b), + }, + FS: [4][256]TBF_word{ + 0: { + 0: uint32(0xd1310ba6), + 1: uint32(0x98dfb5ac), + 2: uint32(0x2ffd72db), + 3: uint32(0xd01adfb7), + 4: uint32(0xb8e1afed), + 5: uint32(0x6a267e96), + 6: uint32(0xba7c9045), + 7: uint32(0xf12c7f99), + 8: uint32(0x24a19947), + 9: uint32(0xb3916cf7), + 10: uint32(0x0801f2e2), + 11: uint32(0x858efc16), + 12: uint32(0x636920d8), + 13: uint32(0x71574e69), + 14: uint32(0xa458fea3), + 15: uint32(0xf4933d7e), + 16: uint32(0x0d95748f), + 17: uint32(0x728eb658), + 18: uint32(0x718bcd58), + 19: uint32(0x82154aee), + 20: uint32(0x7b54a41d), + 21: uint32(0xc25a59b5), + 22: uint32(0x9c30d539), + 23: uint32(0x2af26013), + 24: uint32(0xc5d1b023), + 25: uint32(0x286085f0), + 26: uint32(0xca417918), + 27: uint32(0xb8db38ef), + 28: uint32(0x8e79dcb0), + 29: uint32(0x603a180e), + 30: uint32(0x6c9e0e8b), + 31: uint32(0xb01e8a3e), + 32: uint32(0xd71577c1), + 33: uint32(0xbd314b27), + 34: uint32(0x78af2fda), + 35: uint32(0x55605c60), + 36: uint32(0xe65525f3), + 37: uint32(0xaa55ab94), + 38: uint32(0x57489862), + 39: uint32(0x63e81440), + 40: uint32(0x55ca396a), + 41: uint32(0x2aab10b6), + 42: uint32(0xb4cc5c34), + 43: uint32(0x1141e8ce), + 44: uint32(0xa15486af), + 45: uint32(0x7c72e993), + 46: uint32(0xb3ee1411), + 47: uint32(0x636fbc2a), + 48: uint32(0x2ba9c55d), + 49: uint32(0x741831f6), + 50: uint32(0xce5c3e16), + 51: uint32(0x9b87931e), + 52: uint32(0xafd6ba33), + 53: uint32(0x6c24cf5c), + 54: uint32(0x7a325381), + 55: uint32(0x28958677), + 56: uint32(0x3b8f4898), + 57: uint32(0x6b4bb9af), + 58: uint32(0xc4bfe81b), + 59: uint32(0x66282193), + 60: uint32(0x61d809cc), + 61: uint32(0xfb21a991), + 62: uint32(0x487cac60), + 63: uint32(0x5dec8032), + 64: uint32(0xef845d5d), + 65: uint32(0xe98575b1), + 66: uint32(0xdc262302), + 67: uint32(0xeb651b88), + 68: uint32(0x23893e81), + 69: uint32(0xd396acc5), + 70: uint32(0x0f6d6ff3), + 71: uint32(0x83f44239), + 72: uint32(0x2e0b4482), + 73: uint32(0xa4842004), + 74: uint32(0x69c8f04a), + 75: uint32(0x9e1f9b5e), + 76: uint32(0x21c66842), + 77: uint32(0xf6e96c9a), + 78: uint32(0x670c9c61), + 79: uint32(0xabd388f0), + 80: uint32(0x6a51a0d2), + 81: uint32(0xd8542f68), + 82: uint32(0x960fa728), + 83: uint32(0xab5133a3), + 84: uint32(0x6eef0b6c), + 85: uint32(0x137a3be4), + 86: uint32(0xba3bf050), + 87: uint32(0x7efb2a98), + 88: uint32(0xa1f1651d), + 89: uint32(0x39af0176), + 90: uint32(0x66ca593e), + 91: uint32(0x82430e88), + 92: uint32(0x8cee8619), + 93: uint32(0x456f9fb4), + 94: uint32(0x7d84a5c3), + 95: uint32(0x3b8b5ebe), + 96: uint32(0xe06f75d8), + 97: uint32(0x85c12073), + 98: uint32(0x401a449f), + 99: uint32(0x56c16aa6), + 100: uint32(0x4ed3aa62), + 101: uint32(0x363f7706), + 102: uint32(0x1bfedf72), + 103: uint32(0x429b023d), + 104: uint32(0x37d0d724), + 105: uint32(0xd00a1248), + 106: uint32(0xdb0fead3), + 107: uint32(0x49f1c09b), + 108: uint32(0x075372c9), + 109: uint32(0x80991b7b), + 110: uint32(0x25d479d8), + 111: uint32(0xf6e8def7), + 112: uint32(0xe3fe501a), + 113: uint32(0xb6794c3b), + 114: uint32(0x976ce0bd), + 115: uint32(0x04c006ba), + 116: uint32(0xc1a94fb6), + 117: uint32(0x409f60c4), + 118: uint32(0x5e5c9ec2), + 119: uint32(0x196a2463), + 120: uint32(0x68fb6faf), + 121: uint32(0x3e6c53b5), + 122: uint32(0x1339b2eb), + 123: uint32(0x3b52ec6f), + 124: uint32(0x6dfc511f), + 125: uint32(0x9b30952c), + 126: uint32(0xcc814544), + 127: uint32(0xaf5ebd09), + 128: uint32(0xbee3d004), + 129: uint32(0xde334afd), + 130: uint32(0x660f2807), + 131: uint32(0x192e4bb3), + 132: uint32(0xc0cba857), + 133: uint32(0x45c8740f), + 134: uint32(0xd20b5f39), + 135: uint32(0xb9d3fbdb), + 136: uint32(0x5579c0bd), + 137: uint32(0x1a60320a), + 138: uint32(0xd6a100c6), + 139: uint32(0x402c7279), + 140: uint32(0x679f25fe), + 141: uint32(0xfb1fa3cc), + 142: uint32(0x8ea5e9f8), + 143: uint32(0xdb3222f8), + 144: uint32(0x3c7516df), + 145: uint32(0xfd616b15), + 146: uint32(0x2f501ec8), + 147: uint32(0xad0552ab), + 148: uint32(0x323db5fa), + 149: uint32(0xfd238760), + 150: uint32(0x53317b48), + 151: uint32(0x3e00df82), + 152: uint32(0x9e5c57bb), + 153: uint32(0xca6f8ca0), + 154: uint32(0x1a87562e), + 155: uint32(0xdf1769db), + 156: uint32(0xd542a8f6), + 157: uint32(0x287effc3), + 158: uint32(0xac6732c6), + 159: uint32(0x8c4f5573), + 160: uint32(0x695b27b0), + 161: uint32(0xbbca58c8), + 162: uint32(0xe1ffa35d), + 163: uint32(0xb8f011a0), + 164: uint32(0x10fa3d98), + 165: uint32(0xfd2183b8), + 166: uint32(0x4afcb56c), + 167: uint32(0x2dd1d35b), + 168: uint32(0x9a53e479), + 169: uint32(0xb6f84565), + 170: uint32(0xd28e49bc), + 171: uint32(0x4bfb9790), + 172: uint32(0xe1ddf2da), + 173: uint32(0xa4cb7e33), + 174: uint32(0x62fb1341), + 175: uint32(0xcee4c6e8), + 176: uint32(0xef20cada), + 177: uint32(0x36774c01), + 178: uint32(0xd07e9efe), + 179: uint32(0x2bf11fb4), + 180: uint32(0x95dbda4d), + 181: uint32(0xae909198), + 182: uint32(0xeaad8e71), + 183: uint32(0x6b93d5a0), + 184: uint32(0xd08ed1d0), + 185: uint32(0xafc725e0), + 186: uint32(0x8e3c5b2f), + 187: uint32(0x8e7594b7), + 188: uint32(0x8ff6e2fb), + 189: uint32(0xf2122b64), + 190: uint32(0x8888b812), + 191: uint32(0x900df01c), + 192: uint32(0x4fad5ea0), + 193: uint32(0x688fc31c), + 194: uint32(0xd1cff191), + 195: uint32(0xb3a8c1ad), + 196: uint32(0x2f2f2218), + 197: uint32(0xbe0e1777), + 198: uint32(0xea752dfe), + 199: uint32(0x8b021fa1), + 200: uint32(0xe5a0cc0f), + 201: uint32(0xb56f74e8), + 202: uint32(0x18acf3d6), + 203: uint32(0xce89e299), + 204: uint32(0xb4a84fe0), + 205: uint32(0xfd13e0b7), + 206: uint32(0x7cc43b81), + 207: uint32(0xd2ada8d9), + 208: uint32(0x165fa266), + 209: uint32(0x80957705), + 210: uint32(0x93cc7314), + 211: uint32(0x211a1477), + 212: uint32(0xe6ad2065), + 213: uint32(0x77b5fa86), + 214: uint32(0xc75442f5), + 215: uint32(0xfb9d35cf), + 216: uint32(0xebcdaf0c), + 217: uint32(0x7b3e89a0), + 218: uint32(0xd6411bd3), + 219: uint32(0xae1e7e49), + 220: uint32(0x00250e2d), + 221: uint32(0x2071b35e), + 222: uint32(0x226800bb), + 223: uint32(0x57b8e0af), + 224: uint32(0x2464369b), + 225: uint32(0xf009b91e), + 226: uint32(0x5563911d), + 227: uint32(0x59dfa6aa), + 228: uint32(0x78c14389), + 229: uint32(0xd95a537f), + 230: uint32(0x207d5ba2), + 231: uint32(0x02e5b9c5), + 232: uint32(0x83260376), + 233: uint32(0x6295cfa9), + 234: uint32(0x11c81968), + 235: uint32(0x4e734a41), + 236: uint32(0xb3472dca), + 237: uint32(0x7b14a94a), + 238: uint32(0x1b510052), + 239: uint32(0x9a532915), + 240: uint32(0xd60f573f), + 241: uint32(0xbc9bc6e4), + 242: uint32(0x2b60a476), + 243: uint32(0x81e67400), + 244: uint32(0x08ba6fb5), + 245: uint32(0x571be91f), + 246: uint32(0xf296ec6b), + 247: uint32(0x2a0dd915), + 248: uint32(0xb6636521), + 249: uint32(0xe7b9f9b6), + 250: uint32(0xff34052e), + 251: uint32(0xc5855664), + 252: uint32(0x53b02d5d), + 253: uint32(0xa99f8fa1), + 254: uint32(0x08ba4799), + 255: uint32(0x6e85076a), + }, + 1: { + 0: uint32(0x4b7a70e9), + 1: uint32(0xb5b32944), + 2: uint32(0xdb75092e), + 3: uint32(0xc4192623), + 4: uint32(0xad6ea6b0), + 5: uint32(0x49a7df7d), + 6: uint32(0x9cee60b8), + 7: uint32(0x8fedb266), + 8: uint32(0xecaa8c71), + 9: uint32(0x699a17ff), + 10: uint32(0x5664526c), + 11: uint32(0xc2b19ee1), + 12: uint32(0x193602a5), + 13: uint32(0x75094c29), + 14: uint32(0xa0591340), + 15: uint32(0xe4183a3e), + 16: uint32(0x3f54989a), + 17: uint32(0x5b429d65), + 18: uint32(0x6b8fe4d6), + 19: uint32(0x99f73fd6), + 20: uint32(0xa1d29c07), + 21: uint32(0xefe830f5), + 22: uint32(0x4d2d38e6), + 23: uint32(0xf0255dc1), + 24: uint32(0x4cdd2086), + 25: uint32(0x8470eb26), + 26: uint32(0x6382e9c6), + 27: uint32(0x021ecc5e), + 28: uint32(0x09686b3f), + 29: uint32(0x3ebaefc9), + 30: uint32(0x3c971814), + 31: uint32(0x6b6a70a1), + 32: uint32(0x687f3584), + 33: uint32(0x52a0e286), + 34: uint32(0xb79c5305), + 35: uint32(0xaa500737), + 36: uint32(0x3e07841c), + 37: uint32(0x7fdeae5c), + 38: uint32(0x8e7d44ec), + 39: uint32(0x5716f2b8), + 40: uint32(0xb03ada37), + 41: uint32(0xf0500c0d), + 42: uint32(0xf01c1f04), + 43: uint32(0x0200b3ff), + 44: uint32(0xae0cf51a), + 45: uint32(0x3cb574b2), + 46: uint32(0x25837a58), + 47: uint32(0xdc0921bd), + 48: uint32(0xd19113f9), + 49: uint32(0x7ca92ff6), + 50: uint32(0x94324773), + 51: uint32(0x22f54701), + 52: uint32(0x3ae5e581), + 53: uint32(0x37c2dadc), + 54: uint32(0xc8b57634), + 55: uint32(0x9af3dda7), + 56: uint32(0xa9446146), + 57: uint32(0x0fd0030e), + 58: uint32(0xecc8c73e), + 59: uint32(0xa4751e41), + 60: uint32(0xe238cd99), + 61: uint32(0x3bea0e2f), + 62: uint32(0x3280bba1), + 63: uint32(0x183eb331), + 64: uint32(0x4e548b38), + 65: uint32(0x4f6db908), + 66: uint32(0x6f420d03), + 67: uint32(0xf60a04bf), + 68: uint32(0x2cb81290), + 69: uint32(0x24977c79), + 70: uint32(0x5679b072), + 71: uint32(0xbcaf89af), + 72: uint32(0xde9a771f), + 73: uint32(0xd9930810), + 74: uint32(0xb38bae12), + 75: uint32(0xdccf3f2e), + 76: uint32(0x5512721f), + 77: uint32(0x2e6b7124), + 78: uint32(0x501adde6), + 79: uint32(0x9f84cd87), + 80: uint32(0x7a584718), + 81: uint32(0x7408da17), + 82: uint32(0xbc9f9abc), + 83: uint32(0xe94b7d8c), + 84: uint32(0xec7aec3a), + 85: uint32(0xdb851dfa), + 86: uint32(0x63094366), + 87: uint32(0xc464c3d2), + 88: uint32(0xef1c1847), + 89: uint32(0x3215d908), + 90: uint32(0xdd433b37), + 91: uint32(0x24c2ba16), + 92: uint32(0x12a14d43), + 93: uint32(0x2a65c451), + 94: uint32(0x50940002), + 95: uint32(0x133ae4dd), + 96: uint32(0x71dff89e), + 97: uint32(0x10314e55), + 98: uint32(0x81ac77d6), + 99: uint32(0x5f11199b), + 100: uint32(0x043556f1), + 101: uint32(0xd7a3c76b), + 102: uint32(0x3c11183b), + 103: uint32(0x5924a509), + 104: uint32(0xf28fe6ed), + 105: uint32(0x97f1fbfa), + 106: uint32(0x9ebabf2c), + 107: uint32(0x1e153c6e), + 108: uint32(0x86e34570), + 109: uint32(0xeae96fb1), + 110: uint32(0x860e5e0a), + 111: uint32(0x5a3e2ab3), + 112: uint32(0x771fe71c), + 113: uint32(0x4e3d06fa), + 114: uint32(0x2965dcb9), + 115: uint32(0x99e71d0f), + 116: uint32(0x803e89d6), + 117: uint32(0x5266c825), + 118: uint32(0x2e4cc978), + 119: uint32(0x9c10b36a), + 120: uint32(0xc6150eba), + 121: uint32(0x94e2ea78), + 122: uint32(0xa5fc3c53), + 123: uint32(0x1e0a2df4), + 124: uint32(0xf2f74ea7), + 125: uint32(0x361d2b3d), + 126: uint32(0x1939260f), + 127: uint32(0x19c27960), + 128: uint32(0x5223a708), + 129: uint32(0xf71312b6), + 130: uint32(0xebadfe6e), + 131: uint32(0xeac31f66), + 132: uint32(0xe3bc4595), + 133: uint32(0xa67bc883), + 134: uint32(0xb17f37d1), + 135: uint32(0x018cff28), + 136: uint32(0xc332ddef), + 137: uint32(0xbe6c5aa5), + 138: uint32(0x65582185), + 139: uint32(0x68ab9802), + 140: uint32(0xeecea50f), + 141: uint32(0xdb2f953b), + 142: uint32(0x2aef7dad), + 143: uint32(0x5b6e2f84), + 144: uint32(0x1521b628), + 145: uint32(0x29076170), + 146: uint32(0xecdd4775), + 147: uint32(0x619f1510), + 148: uint32(0x13cca830), + 149: uint32(0xeb61bd96), + 150: uint32(0x0334fe1e), + 151: uint32(0xaa0363cf), + 152: uint32(0xb5735c90), + 153: uint32(0x4c70a239), + 154: uint32(0xd59e9e0b), + 155: uint32(0xcbaade14), + 156: uint32(0xeecc86bc), + 157: uint32(0x60622ca7), + 158: uint32(0x9cab5cab), + 159: uint32(0xb2f3846e), + 160: uint32(0x648b1eaf), + 161: uint32(0x19bdf0ca), + 162: uint32(0xa02369b9), + 163: uint32(0x655abb50), + 164: uint32(0x40685a32), + 165: uint32(0x3c2ab4b3), + 166: uint32(0x319ee9d5), + 167: uint32(0xc021b8f7), + 168: uint32(0x9b540b19), + 169: uint32(0x875fa099), + 170: uint32(0x95f7997e), + 171: uint32(0x623d7da8), + 172: uint32(0xf837889a), + 173: uint32(0x97e32d77), + 174: uint32(0x11ed935f), + 175: uint32(0x16681281), + 176: uint32(0x0e358829), + 177: uint32(0xc7e61fd6), + 178: uint32(0x96dedfa1), + 179: uint32(0x7858ba99), + 180: uint32(0x57f584a5), + 181: uint32(0x1b227263), + 182: uint32(0x9b83c3ff), + 183: uint32(0x1ac24696), + 184: uint32(0xcdb30aeb), + 185: uint32(0x532e3054), + 186: uint32(0x8fd948e4), + 187: uint32(0x6dbc3128), + 188: uint32(0x58ebf2ef), + 189: uint32(0x34c6ffea), + 190: uint32(0xfe28ed61), + 191: uint32(0xee7c3c73), + 192: uint32(0x5d4a14d9), + 193: uint32(0xe864b7e3), + 194: uint32(0x42105d14), + 195: uint32(0x203e13e0), + 196: uint32(0x45eee2b6), + 197: uint32(0xa3aaabea), + 198: uint32(0xdb6c4f15), + 199: uint32(0xfacb4fd0), + 200: uint32(0xc742f442), + 201: uint32(0xef6abbb5), + 202: uint32(0x654f3b1d), + 203: uint32(0x41cd2105), + 204: uint32(0xd81e799e), + 205: uint32(0x86854dc7), + 206: uint32(0xe44b476a), + 207: uint32(0x3d816250), + 208: uint32(0xcf62a1f2), + 209: uint32(0x5b8d2646), + 210: uint32(0xfc8883a0), + 211: uint32(0xc1c7b6a3), + 212: uint32(0x7f1524c3), + 213: uint32(0x69cb7492), + 214: uint32(0x47848a0b), + 215: uint32(0x5692b285), + 216: uint32(0x095bbf00), + 217: uint32(0xad19489d), + 218: uint32(0x1462b174), + 219: uint32(0x23820e00), + 220: uint32(0x58428d2a), + 221: uint32(0x0c55f5ea), + 222: uint32(0x1dadf43e), + 223: uint32(0x233f7061), + 224: uint32(0x3372f092), + 225: uint32(0x8d937e41), + 226: uint32(0xd65fecf1), + 227: uint32(0x6c223bdb), + 228: uint32(0x7cde3759), + 229: uint32(0xcbee7460), + 230: uint32(0x4085f2a7), + 231: uint32(0xce77326e), + 232: uint32(0xa6078084), + 233: uint32(0x19f8509e), + 234: uint32(0xe8efd855), + 235: uint32(0x61d99735), + 236: uint32(0xa969a7aa), + 237: uint32(0xc50c06c2), + 238: uint32(0x5a04abfc), + 239: uint32(0x800bcadc), + 240: uint32(0x9e447a2e), + 241: uint32(0xc3453484), + 242: uint32(0xfdd56705), + 243: uint32(0x0e1e9ec9), + 244: uint32(0xdb73dbd3), + 245: uint32(0x105588cd), + 246: uint32(0x675fda79), + 247: uint32(0xe3674340), + 248: uint32(0xc5c43465), + 249: uint32(0x713e38d8), + 250: uint32(0x3d28f89e), + 251: uint32(0xf16dff20), + 252: uint32(0x153e21e7), + 253: uint32(0x8fb03d4a), + 254: uint32(0xe6e39f2b), + 255: uint32(0xdb83adf7), + }, + 2: { + 0: uint32(0xe93d5a68), + 1: uint32(0x948140f7), + 2: uint32(0xf64c261c), + 3: uint32(0x94692934), + 4: uint32(0x411520f7), + 5: uint32(0x7602d4f7), + 6: uint32(0xbcf46b2e), + 7: uint32(0xd4a20068), + 8: uint32(0xd4082471), + 9: uint32(0x3320f46a), + 10: uint32(0x43b7d4b7), + 11: uint32(0x500061af), + 12: uint32(0x1e39f62e), + 13: uint32(0x97244546), + 14: uint32(0x14214f74), + 15: uint32(0xbf8b8840), + 16: uint32(0x4d95fc1d), + 17: uint32(0x96b591af), + 18: uint32(0x70f4ddd3), + 19: uint32(0x66a02f45), + 20: uint32(0xbfbc09ec), + 21: uint32(0x03bd9785), + 22: uint32(0x7fac6dd0), + 23: uint32(0x31cb8504), + 24: uint32(0x96eb27b3), + 25: uint32(0x55fd3941), + 26: uint32(0xda2547e6), + 27: uint32(0xabca0a9a), + 28: uint32(0x28507825), + 29: uint32(0x530429f4), + 30: uint32(0x0a2c86da), + 31: uint32(0xe9b66dfb), + 32: uint32(0x68dc1462), + 33: uint32(0xd7486900), + 34: uint32(0x680ec0a4), + 35: uint32(0x27a18dee), + 36: uint32(0x4f3ffea2), + 37: uint32(0xe887ad8c), + 38: uint32(0xb58ce006), + 39: uint32(0x7af4d6b6), + 40: uint32(0xaace1e7c), + 41: uint32(0xd3375fec), + 42: uint32(0xce78a399), + 43: uint32(0x406b2a42), + 44: uint32(0x20fe9e35), + 45: uint32(0xd9f385b9), + 46: uint32(0xee39d7ab), + 47: uint32(0x3b124e8b), + 48: uint32(0x1dc9faf7), + 49: uint32(0x4b6d1856), + 50: uint32(0x26a36631), + 51: uint32(0xeae397b2), + 52: uint32(0x3a6efa74), + 53: uint32(0xdd5b4332), + 54: uint32(0x6841e7f7), + 55: uint32(0xca7820fb), + 56: uint32(0xfb0af54e), + 57: uint32(0xd8feb397), + 58: uint32(0x454056ac), + 59: uint32(0xba489527), + 60: uint32(0x55533a3a), + 61: uint32(0x20838d87), + 62: uint32(0xfe6ba9b7), + 63: uint32(0xd096954b), + 64: uint32(0x55a867bc), + 65: uint32(0xa1159a58), + 66: uint32(0xcca92963), + 67: uint32(0x99e1db33), + 68: uint32(0xa62a4a56), + 69: uint32(0x3f3125f9), + 70: uint32(0x5ef47e1c), + 71: uint32(0x9029317c), + 72: uint32(0xfdf8e802), + 73: uint32(0x04272f70), + 74: uint32(0x80bb155c), + 75: uint32(0x05282ce3), + 76: uint32(0x95c11548), + 77: uint32(0xe4c66d22), + 78: uint32(0x48c1133f), + 79: uint32(0xc70f86dc), + 80: uint32(0x07f9c9ee), + 81: uint32(0x41041f0f), + 82: uint32(0x404779a4), + 83: uint32(0x5d886e17), + 84: uint32(0x325f51eb), + 85: uint32(0xd59bc0d1), + 86: uint32(0xf2bcc18f), + 87: uint32(0x41113564), + 88: uint32(0x257b7834), + 89: uint32(0x602a9c60), + 90: uint32(0xdff8e8a3), + 91: uint32(0x1f636c1b), + 92: uint32(0x0e12b4c2), + 93: uint32(0x02e1329e), + 94: uint32(0xaf664fd1), + 95: uint32(0xcad18115), + 96: uint32(0x6b2395e0), + 97: uint32(0x333e92e1), + 98: uint32(0x3b240b62), + 99: uint32(0xeebeb922), + 100: uint32(0x85b2a20e), + 101: uint32(0xe6ba0d99), + 102: uint32(0xde720c8c), + 103: uint32(0x2da2f728), + 104: uint32(0xd0127845), + 105: uint32(0x95b794fd), + 106: uint32(0x647d0862), + 107: uint32(0xe7ccf5f0), + 108: uint32(0x5449a36f), + 109: uint32(0x877d48fa), + 110: uint32(0xc39dfd27), + 111: uint32(0xf33e8d1e), + 112: uint32(0x0a476341), + 113: uint32(0x992eff74), + 114: uint32(0x3a6f6eab), + 115: uint32(0xf4f8fd37), + 116: uint32(0xa812dc60), + 117: uint32(0xa1ebddf8), + 118: uint32(0x991be14c), + 119: uint32(0xdb6e6b0d), + 120: uint32(0xc67b5510), + 121: uint32(0x6d672c37), + 122: uint32(0x2765d43b), + 123: uint32(0xdcd0e804), + 124: uint32(0xf1290dc7), + 125: uint32(0xcc00ffa3), + 126: uint32(0xb5390f92), + 127: uint32(0x690fed0b), + 128: uint32(0x667b9ffb), + 129: uint32(0xcedb7d9c), + 130: uint32(0xa091cf0b), + 131: uint32(0xd9155ea3), + 132: uint32(0xbb132f88), + 133: uint32(0x515bad24), + 134: uint32(0x7b9479bf), + 135: uint32(0x763bd6eb), + 136: uint32(0x37392eb3), + 137: uint32(0xcc115979), + 138: uint32(0x8026e297), + 139: uint32(0xf42e312d), + 140: uint32(0x6842ada7), + 141: uint32(0xc66a2b3b), + 142: uint32(0x12754ccc), + 143: uint32(0x782ef11c), + 144: uint32(0x6a124237), + 145: uint32(0xb79251e7), + 146: uint32(0x06a1bbe6), + 147: uint32(0x4bfb6350), + 148: uint32(0x1a6b1018), + 149: uint32(0x11caedfa), + 150: uint32(0x3d25bdd8), + 151: uint32(0xe2e1c3c9), + 152: uint32(0x44421659), + 153: uint32(0x0a121386), + 154: uint32(0xd90cec6e), + 155: uint32(0xd5abea2a), + 156: uint32(0x64af674e), + 157: uint32(0xda86a85f), + 158: uint32(0xbebfe988), + 159: uint32(0x64e4c3fe), + 160: uint32(0x9dbc8057), + 161: uint32(0xf0f7c086), + 162: uint32(0x60787bf8), + 163: uint32(0x6003604d), + 164: uint32(0xd1fd8346), + 165: uint32(0xf6381fb0), + 166: uint32(0x7745ae04), + 167: uint32(0xd736fccc), + 168: uint32(0x83426b33), + 169: uint32(0xf01eab71), + 170: uint32(0xb0804187), + 171: uint32(0x3c005e5f), + 172: uint32(0x77a057be), + 173: uint32(0xbde8ae24), + 174: uint32(0x55464299), + 175: uint32(0xbf582e61), + 176: uint32(0x4e58f48f), + 177: uint32(0xf2ddfda2), + 178: uint32(0xf474ef38), + 179: uint32(0x8789bdc2), + 180: uint32(0x5366f9c3), + 181: uint32(0xc8b38e74), + 182: uint32(0xb475f255), + 183: uint32(0x46fcd9b9), + 184: uint32(0x7aeb2661), + 185: uint32(0x8b1ddf84), + 186: uint32(0x846a0e79), + 187: uint32(0x915f95e2), + 188: uint32(0x466e598e), + 189: uint32(0x20b45770), + 190: uint32(0x8cd55591), + 191: uint32(0xc902de4c), + 192: uint32(0xb90bace1), + 193: uint32(0xbb8205d0), + 194: uint32(0x11a86248), + 195: uint32(0x7574a99e), + 196: uint32(0xb77f19b6), + 197: uint32(0xe0a9dc09), + 198: uint32(0x662d09a1), + 199: uint32(0xc4324633), + 200: uint32(0xe85a1f02), + 201: uint32(0x09f0be8c), + 202: uint32(0x4a99a025), + 203: uint32(0x1d6efe10), + 204: uint32(0x1ab93d1d), + 205: uint32(0x0ba5a4df), + 206: uint32(0xa186f20f), + 207: uint32(0x2868f169), + 208: uint32(0xdcb7da83), + 209: uint32(0x573906fe), + 210: uint32(0xa1e2ce9b), + 211: uint32(0x4fcd7f52), + 212: uint32(0x50115e01), + 213: uint32(0xa70683fa), + 214: uint32(0xa002b5c4), + 215: uint32(0x0de6d027), + 216: uint32(0x9af88c27), + 217: uint32(0x773f8641), + 218: uint32(0xc3604c06), + 219: uint32(0x61a806b5), + 220: uint32(0xf0177a28), + 221: uint32(0xc0f586e0), + 222: uint32(0x006058aa), + 223: uint32(0x30dc7d62), + 224: uint32(0x11e69ed7), + 225: uint32(0x2338ea63), + 226: uint32(0x53c2dd94), + 227: uint32(0xc2c21634), + 228: uint32(0xbbcbee56), + 229: uint32(0x90bcb6de), + 230: uint32(0xebfc7da1), + 231: uint32(0xce591d76), + 232: uint32(0x6f05e409), + 233: uint32(0x4b7c0188), + 234: uint32(0x39720a3d), + 235: uint32(0x7c927c24), + 236: uint32(0x86e3725f), + 237: uint32(0x724d9db9), + 238: uint32(0x1ac15bb4), + 239: uint32(0xd39eb8fc), + 240: uint32(0xed545578), + 241: uint32(0x08fca5b5), + 242: uint32(0xd83d7cd3), + 243: uint32(0x4dad0fc4), + 244: uint32(0x1e50ef5e), + 245: uint32(0xb161e6f8), + 246: uint32(0xa28514d9), + 247: uint32(0x6c51133c), + 248: uint32(0x6fd5c7e7), + 249: uint32(0x56e14ec4), + 250: uint32(0x362abfce), + 251: uint32(0xddc6c837), + 252: uint32(0xd79a3234), + 253: uint32(0x92638212), + 254: uint32(0x670efa8e), + 255: uint32(0x406000e0), + }, + 3: { + 0: uint32(0x3a39ce37), + 1: uint32(0xd3faf5cf), + 2: uint32(0xabc27737), + 3: uint32(0x5ac52d1b), + 4: uint32(0x5cb0679e), + 5: uint32(0x4fa33742), + 6: uint32(0xd3822740), + 7: uint32(0x99bc9bbe), + 8: uint32(0xd5118e9d), + 9: uint32(0xbf0f7315), + 10: uint32(0xd62d1c7e), + 11: uint32(0xc700c47b), + 12: uint32(0xb78c1b6b), + 13: uint32(0x21a19045), + 14: uint32(0xb26eb1be), + 15: uint32(0x6a366eb4), + 16: uint32(0x5748ab2f), + 17: uint32(0xbc946e79), + 18: uint32(0xc6a376d2), + 19: uint32(0x6549c2c8), + 20: uint32(0x530ff8ee), + 21: uint32(0x468dde7d), + 22: uint32(0xd5730a1d), + 23: uint32(0x4cd04dc6), + 24: uint32(0x2939bbdb), + 25: uint32(0xa9ba4650), + 26: uint32(0xac9526e8), + 27: uint32(0xbe5ee304), + 28: uint32(0xa1fad5f0), + 29: uint32(0x6a2d519a), + 30: uint32(0x63ef8ce2), + 31: uint32(0x9a86ee22), + 32: uint32(0xc089c2b8), + 33: uint32(0x43242ef6), + 34: uint32(0xa51e03aa), + 35: uint32(0x9cf2d0a4), + 36: uint32(0x83c061ba), + 37: uint32(0x9be96a4d), + 38: uint32(0x8fe51550), + 39: uint32(0xba645bd6), + 40: uint32(0x2826a2f9), + 41: uint32(0xa73a3ae1), + 42: uint32(0x4ba99586), + 43: uint32(0xef5562e9), + 44: uint32(0xc72fefd3), + 45: uint32(0xf752f7da), + 46: uint32(0x3f046f69), + 47: uint32(0x77fa0a59), + 48: uint32(0x80e4a915), + 49: uint32(0x87b08601), + 50: uint32(0x9b09e6ad), + 51: uint32(0x3b3ee593), + 52: uint32(0xe990fd5a), + 53: uint32(0x9e34d797), + 54: uint32(0x2cf0b7d9), + 55: uint32(0x022b8b51), + 56: uint32(0x96d5ac3a), + 57: uint32(0x017da67d), + 58: uint32(0xd1cf3ed6), + 59: uint32(0x7c7d2d28), + 60: uint32(0x1f9f25cf), + 61: uint32(0xadf2b89b), + 62: uint32(0x5ad6b472), + 63: uint32(0x5a88f54c), + 64: uint32(0xe029ac71), + 65: uint32(0xe019a5e6), + 66: uint32(0x47b0acfd), + 67: uint32(0xed93fa9b), + 68: uint32(0xe8d3c48d), + 69: uint32(0x283b57cc), + 70: uint32(0xf8d56629), + 71: uint32(0x79132e28), + 72: uint32(0x785f0191), + 73: uint32(0xed756055), + 74: uint32(0xf7960e44), + 75: uint32(0xe3d35e8c), + 76: uint32(0x15056dd4), + 77: uint32(0x88f46dba), + 78: uint32(0x03a16125), + 79: uint32(0x0564f0bd), + 80: uint32(0xc3eb9e15), + 81: uint32(0x3c9057a2), + 82: uint32(0x97271aec), + 83: uint32(0xa93a072a), + 84: uint32(0x1b3f6d9b), + 85: uint32(0x1e6321f5), + 86: uint32(0xf59c66fb), + 87: uint32(0x26dcf319), + 88: uint32(0x7533d928), + 89: uint32(0xb155fdf5), + 90: uint32(0x03563482), + 91: uint32(0x8aba3cbb), + 92: uint32(0x28517711), + 93: uint32(0xc20ad9f8), + 94: uint32(0xabcc5167), + 95: uint32(0xccad925f), + 96: uint32(0x4de81751), + 97: uint32(0x3830dc8e), + 98: uint32(0x379d5862), + 99: uint32(0x9320f991), + 100: uint32(0xea7a90c2), + 101: uint32(0xfb3e7bce), + 102: uint32(0x5121ce64), + 103: uint32(0x774fbe32), + 104: uint32(0xa8b6e37e), + 105: uint32(0xc3293d46), + 106: uint32(0x48de5369), + 107: uint32(0x6413e680), + 108: uint32(0xa2ae0810), + 109: uint32(0xdd6db224), + 110: uint32(0x69852dfd), + 111: uint32(0x09072166), + 112: uint32(0xb39a460a), + 113: uint32(0x6445c0dd), + 114: uint32(0x586cdecf), + 115: uint32(0x1c20c8ae), + 116: uint32(0x5bbef7dd), + 117: uint32(0x1b588d40), + 118: uint32(0xccd2017f), + 119: uint32(0x6bb4e3bb), + 120: uint32(0xdda26a7e), + 121: uint32(0x3a59ff45), + 122: uint32(0x3e350a44), + 123: uint32(0xbcb4cdd5), + 124: uint32(0x72eacea8), + 125: uint32(0xfa6484bb), + 126: uint32(0x8d6612ae), + 127: uint32(0xbf3c6f47), + 128: uint32(0xd29be463), + 129: uint32(0x542f5d9e), + 130: uint32(0xaec2771b), + 131: uint32(0xf64e6370), + 132: uint32(0x740e0d8d), + 133: uint32(0xe75b1357), + 134: uint32(0xf8721671), + 135: uint32(0xaf537d5d), + 136: uint32(0x4040cb08), + 137: uint32(0x4eb4e2cc), + 138: uint32(0x34d2466a), + 139: uint32(0x0115af84), + 140: uint32(0xe1b00428), + 141: uint32(0x95983a1d), + 142: uint32(0x06b89fb4), + 143: uint32(0xce6ea048), + 144: uint32(0x6f3f3b82), + 145: uint32(0x3520ab82), + 146: uint32(0x011a1d4b), + 147: uint32(0x277227f8), + 148: uint32(0x611560b1), + 149: uint32(0xe7933fdc), + 150: uint32(0xbb3a792b), + 151: uint32(0x344525bd), + 152: uint32(0xa08839e1), + 153: uint32(0x51ce794b), + 154: uint32(0x2f32c9b7), + 155: uint32(0xa01fbac9), + 156: uint32(0xe01cc87e), + 157: uint32(0xbcc7d1f6), + 158: uint32(0xcf0111c3), + 159: uint32(0xa1e8aac7), + 160: uint32(0x1a908749), + 161: uint32(0xd44fbd9a), + 162: uint32(0xd0dadecb), + 163: uint32(0xd50ada38), + 164: uint32(0x0339c32a), + 165: uint32(0xc6913667), + 166: uint32(0x8df9317c), + 167: uint32(0xe0b12b4f), + 168: uint32(0xf79e59b7), + 169: uint32(0x43f5bb3a), + 170: uint32(0xf2d519ff), + 171: uint32(0x27d9459c), + 172: uint32(0xbf97222c), + 173: uint32(0x15e6fc2a), + 174: uint32(0x0f91fc71), + 175: uint32(0x9b941525), + 176: uint32(0xfae59361), + 177: uint32(0xceb69ceb), + 178: uint32(0xc2a86459), + 179: uint32(0x12baa8d1), + 180: uint32(0xb6c1075e), + 181: uint32(0xe3056a0c), + 182: uint32(0x10d25065), + 183: uint32(0xcb03a442), + 184: uint32(0xe0ec6e0e), + 185: uint32(0x1698db3b), + 186: uint32(0x4c98a0be), + 187: uint32(0x3278e964), + 188: uint32(0x9f1f9532), + 189: uint32(0xe0d392df), + 190: uint32(0xd3a0342b), + 191: uint32(0x8971f21e), + 192: uint32(0x1b0a7441), + 193: uint32(0x4ba3348c), + 194: uint32(0xc5be7120), + 195: uint32(0xc37632d8), + 196: uint32(0xdf359f8d), + 197: uint32(0x9b992f2e), + 198: uint32(0xe60b6f47), + 199: uint32(0x0fe3f11d), + 200: uint32(0xe54cda54), + 201: uint32(0x1edad891), + 202: uint32(0xce6279cf), + 203: uint32(0xcd3e7e6f), + 204: uint32(0x1618b166), + 205: uint32(0xfd2c1d05), + 206: uint32(0x848fd2c5), + 207: uint32(0xf6fb2299), + 208: uint32(0xf523f357), + 209: uint32(0xa6327623), + 210: uint32(0x93a83531), + 211: uint32(0x56cccd02), + 212: uint32(0xacf08162), + 213: uint32(0x5a75ebb5), + 214: uint32(0x6e163697), + 215: uint32(0x88d273cc), + 216: uint32(0xde966292), + 217: uint32(0x81b949d0), + 218: uint32(0x4c50901b), + 219: uint32(0x71c65614), + 220: uint32(0xe6c6c7bd), + 221: uint32(0x327a140a), + 222: uint32(0x45e1d006), + 223: uint32(0xc3f27b9a), + 224: uint32(0xc9aa53fd), + 225: uint32(0x62a80f00), + 226: uint32(0xbb25bfe2), + 227: uint32(0x35bdd2f6), + 228: uint32(0x71126905), + 229: uint32(0xb2040222), + 230: uint32(0xb6cbcf7c), + 231: uint32(0xcd769c2b), + 232: uint32(0x53113ec0), + 233: uint32(0x1640e3d3), + 234: uint32(0x38abbd60), + 235: uint32(0x2547adf0), + 236: uint32(0xba38209c), + 237: uint32(0xf746ce76), + 238: uint32(0x77afa1c5), + 239: uint32(0x20756060), + 240: uint32(0x85cbfe4e), + 241: uint32(0x8ae88dd8), + 242: uint32(0x7aaaf9b0), + 243: uint32(0x4cf9aa7e), + 244: uint32(0x1948c25c), + 245: uint32(0x02fb8a8c), + 246: uint32(0x01c36ae4), + 247: uint32(0xd6ebe1f9), + 248: uint32(0x90d4f869), + 249: uint32(0xa65cdea0), + 250: uint32(0x3f09252d), + 251: uint32(0xc208e69f), + 252: uint32(0xb74e6132), + 253: uint32(0xce77e25b), + 254: uint32(0x578fdfe3), + 255: uint32(0x3ac372e6), + }, + }, +})) + +var _BF_itoa64 = [65]uint8{'.', '/', '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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +var _BF_atoi64 = [96]uint8{ + 0: uint8(64), + 1: uint8(64), + 2: uint8(64), + 3: uint8(64), + 4: uint8(64), + 5: uint8(64), + 6: uint8(64), + 7: uint8(64), + 8: uint8(64), + 9: uint8(64), + 10: uint8(64), + 11: uint8(64), + 12: uint8(64), + 13: uint8(64), + 15: uint8(1), + 16: uint8(54), + 17: uint8(55), + 18: uint8(56), + 19: uint8(57), + 20: uint8(58), + 21: uint8(59), + 22: uint8(60), + 23: uint8(61), + 24: uint8(62), + 25: uint8(63), + 26: uint8(64), + 27: uint8(64), + 28: uint8(64), + 29: uint8(64), + 30: uint8(64), + 31: uint8(64), + 32: uint8(64), + 33: uint8(2), + 34: uint8(3), + 35: uint8(4), + 36: uint8(5), + 37: uint8(6), + 38: uint8(7), + 39: uint8(8), + 40: uint8(9), + 41: uint8(10), + 42: uint8(11), + 43: uint8(12), + 44: uint8(13), + 45: uint8(14), + 46: uint8(15), + 47: uint8(16), + 48: uint8(17), + 49: uint8(18), + 50: uint8(19), + 51: uint8(20), + 52: uint8(21), + 53: uint8(22), + 54: uint8(23), + 55: uint8(24), + 56: uint8(25), + 57: uint8(26), + 58: uint8(27), + 59: uint8(64), + 60: uint8(64), + 61: uint8(64), + 62: uint8(64), + 63: uint8(64), + 64: uint8(64), + 65: uint8(28), + 66: uint8(29), + 67: uint8(30), + 68: uint8(31), + 69: uint8(32), + 70: uint8(33), + 71: uint8(34), + 72: uint8(35), + 73: uint8(36), + 74: uint8(37), + 75: uint8(38), + 76: uint8(39), + 77: uint8(40), + 78: uint8(41), + 79: uint8(42), + 80: uint8(43), + 81: uint8(44), + 82: uint8(45), + 83: uint8(46), + 84: uint8(47), + 85: uint8(48), + 86: uint8(49), + 87: uint8(50), + 88: uint8(51), + 89: uint8(52), + 90: uint8(53), + 91: uint8(64), + 92: uint8(64), + 93: uint8(64), + 94: uint8(64), + 95: uint8(64), +} + +func _BF_decode(tls *TLS, dst uintptr, src uintptr, size int32) (r int32) { + var c1, c2, c3, c4, tmp uint32 + var dptr, end, sptr, v1, v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, c2, c3, c4, dptr, end, sptr, tmp, v1, v2, v3, v4, v5, v6, v7 + dptr = dst + end = dptr + uintptr(size) + sptr = src + for cond := true; cond; cond = dptr < end { + v1 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v1))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c1 = tmp + v2 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v2))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c2 = tmp + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(c1<>int32(4)) + if dptr >= end { + break + } + v4 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v4))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c3 = tmp + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(c2&uint32(0x0F)<>int32(2)) + if dptr >= end { + break + } + v6 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v6))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c4 = tmp + v7 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(c3&uint32(0x03)<>int32(2)] + c1 = c1 & uint32(0x03) << int32(4) + if sptr >= end { + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = _BF_itoa64[c1] + break + } + v4 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v4))) + c1 |= c2 >> int32(4) + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = _BF_itoa64[c1] + c1 = c2 & uint32(0x0f) << int32(2) + if sptr >= end { + v6 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v6)) = _BF_itoa64[c1] + break + } + v7 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v7))) + c1 |= c2 >> int32(6) + v8 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v8)) = _BF_itoa64[c1] + v9 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v9)) = _BF_itoa64[c2&uint32(0x3f)] + } +} + +func _BF_swap(tls *TLS, x uintptr, count int32) { + var tmp TBF_word + var v1, v2 int32 + var v4 uintptr + _, _, _, _ = tmp, v1, v2, v4 + v1 = int32(1) + if *(*uint8)(unsafe.Pointer(&v1)) != 0 { + for { + tmp = *(*TBF_word)(unsafe.Pointer(x)) + tmp = tmp<>Int32FromInt32(16) + v4 = x + x += 4 + *(*TBF_word)(unsafe.Pointer(v4)) = tmp&uint32(0x00FF00FF)<>Int32FromInt32(8)&uint32(0x00FF00FF) + goto _3 + _3: + ; + count-- + v2 = count + if !(v2 != 0) { + break + } + } + } +} + +func _BF_encrypt(tls *TLS, ctx uintptr, L TBF_word, R TBF_word, start uintptr, end uintptr) (r TBF_word) { + var i int32 + var ptr, v2, v3 uintptr + var tmp1, tmp2, tmp3, tmp4 TBF_word + _, _, _, _, _, _, _, _ = i, ptr, tmp1, tmp2, tmp3, tmp4, v2, v3 + ptr = start + for cond := true; cond; cond = ptr < end { + L ^= *(*TBF_word)(unsafe.Pointer(ctx)) + i = 0 + for { + if !(i < int32(16)) { + break + } + tmp1 = L & uint32(0xFF) + tmp2 = L >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = L >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = L >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + R ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1))*4)) + tmp3 += tmp1 + R ^= tmp3 + tmp1 = R & uint32(0xFF) + tmp2 = R >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = R >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = R >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + L ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1)+int32(1))*4)) + tmp3 += tmp1 + L ^= tmp3 + goto _1 + _1: + ; + i += int32(2) + } + tmp4 = R + R = L + L = tmp4 ^ *(*TBF_word)(unsafe.Pointer(ctx + uintptr(Int32FromInt32(BF_N)+Int32FromInt32(1))*4)) + v2 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v2)) = L + v3 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v3)) = R + } + return L +} + +func _BF_set_key(tls *TLS, key uintptr, expanded uintptr, initial uintptr, flags uint8) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bug, i, j uint32 + var diff, safety, sign, v1, v3 TBF_word + var ptr uintptr + var _ /* tmp at bp+0 */ [2]TBF_word + _, _, _, _, _, _, _, _, _ = bug, diff, i, j, ptr, safety, sign, v1, v3 + ptr = key + /* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = uint32(int32(flags) & int32(1)) + safety = uint32(flags) & uint32(2) << int32(15) + v1 = Uint32FromInt32(0) + diff = v1 + sign = v1 + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(BF_N)+Int32FromInt32(2))) { + break + } + v3 = Uint32FromInt32(0) + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] = v3 + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] = v3 + j = uint32(0) + for { + if !(j < uint32(4)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp)) |= uint32(*(*uint8)(unsafe.Pointer(ptr))) /* correct */ + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) |= uint32(int8(*(*uint8)(unsafe.Pointer(ptr)))) /* bug */ + /* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if j != 0 { + sign |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] & uint32(0x80) + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + ptr = key + } else { + ptr++ + } + goto _4 + _4: + ; + j++ + } + diff |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] /* Non-zero on any differences */ + *(*TBF_word)(unsafe.Pointer(expanded + uintptr(i)*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + *(*TBF_word)(unsafe.Pointer(initial + uintptr(i)*4)) = *(*TBF_word)(unsafe.Pointer(uintptr(unsafe.Pointer(&_BF_init_state)) + uintptr(i)*4)) ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + goto _2 + _2: + ; + i++ + } + /* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> int32(16) /* still zero iff exact match */ + diff &= uint32(0xffff) /* ditto */ + diff += uint32(0xffff) /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= uint32(9) /* move the non-benign sign extension flag to bit 16 */ + sign &= ^diff & safety /* action needed? */ + /* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + *(*TBF_word)(unsafe.Pointer(initial)) ^= sign +} + +var _flags_by_subtype = [26]uint8{ + 0: uint8(2), + 1: uint8(4), + 23: uint8(1), + 24: uint8(4), +} + +func _BF_crypt(tls *TLS, key uintptr, setting uintptr, output uintptr, min TBF_word) (r uintptr) { + bp := tls.Alloc(4272) + defer tls.Free(4272) + var L, L1, R, count, tmp1, tmp2, tmp3, tmp4, v1, v6 TBF_word + var done, i int32 + var ptr uintptr + var _ /* LR at bp+4264 */ [2]TBF_word + var _ /* data at bp+0 */ struct { + Fctx TBF_ctx + Fexpanded_key TBF_key + Fbinary struct { + Foutput [0][6]TBF_word + Fsalt [4]TBF_word + F__ccgo_pad2 [8]byte + } + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = L, L1, R, count, done, i, ptr, tmp1, tmp2, tmp3, tmp4, v1, v6 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('$') || int32(*(*uint8)(unsafe.Pointer(setting + 1))) != int32('2') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')) > uint32(25) || !(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')] != 0) || int32(*(*uint8)(unsafe.Pointer(setting + 3))) != int32('$') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0')) > uint32(1) || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 5)))-int32('0')) > uint32(9) || int32(*(*uint8)(unsafe.Pointer(setting + 6))) != int32('$') { + return UintptrFromInt32(0) + } + count = Uint32FromInt32(1) << ((int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0'))*int32(10) + (int32(*(*uint8)(unsafe.Pointer(setting + 5))) - int32('0'))) + if count < min || _BF_decode(tls, bp+4240, setting+7, int32(16)) != 0 { + return UintptrFromInt32(0) + } + _BF_swap(tls, bp+4240, int32(4)) + _BF_set_key(tls, key, bp+4168, bp, _flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + Xmemcpy(tls, bp+72, uintptr(unsafe.Pointer(&_BF_init_state))+72, uint64(4096)) + L = uint32(0) + R = uint32(0) + ptr = bp + for cond := true; cond; cond = int32(1) != 0 { + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + if ptr >= bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4 { + break + } + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + } + for { + i = 0 + for { + if !(i < Int32FromInt32(BF_N)+Int32FromInt32(2)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i)*4)) + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i+int32(1))*4)) + goto _3 + _3: + ; + i += int32(2) + } + done = 0 + for cond := true; cond; cond = int32(1) != 0 { + _BF_encrypt(tls, bp, uint32(0), uint32(0), bp, bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4) + if done != 0 { + break + } + done = int32(1) + tmp1 = *(*TBF_word)(unsafe.Pointer(bp + 4240)) + tmp2 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)) + tmp4 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)) + i = 0 + for { + if !(i < int32(BF_N)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= tmp2 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(2))*4)) ^= tmp3 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(3))*4)) ^= tmp4 + goto _4 + _4: + ; + i += int32(4) + } + *(*TBF_word)(unsafe.Pointer(bp + 16*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + 17*4)) ^= tmp2 + } + goto _2 + _2: + ; + count-- + v1 = count + if !(v1 != 0) { + break + } + } + i = 0 + for { + if !(i < int32(6)) { + break + } + L1 = _BF_magic_w[i] + (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] = _BF_magic_w[i+int32(1)] + count = uint32(64) + for { + L1 = _BF_encrypt(tls, bp, L1, (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)], bp+4264, bp+4264) + goto _7 + _7: + ; + count-- + v6 = count + if !(v6 != 0) { + break + } + } + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i)*4)) = L1 + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i+int32(1))*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] + goto _5 + _5: + ; + i += int32(2) + } + Xmemcpy(tls, output, setting, uint64(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1))) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))) = _BF_itoa64[int32(_BF_atoi64[int32(*(*uint8)(unsafe.Pointer(setting + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))))-int32(0x20)])&int32(0x30)] + /* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + _BF_swap(tls, bp+4240, int32(6)) + _BF_encode(tls, output+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), bp+4240, int32(23)) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)+Int32FromInt32(31)))) = uint8('\000') + return output +} + +// C documentation +// +// /* +// * Please preserve the runtime self-test. It serves two purposes at once: +// * +// * 1. We really can't afford the risk of producing incompatible hashes e.g. +// * when there's something like gcc bug 26587 again, whereas an application or +// * library integrating this code might not also integrate our external tests or +// * it might not run them after every build. Even if it does, the miscompile +// * might only occur on the production build, but not on a testing build (such +// * as because of different optimization settings). It is painful to recover +// * from incorrectly-computed hashes - merely fixing whatever broke is not +// * enough. Thus, a proactive measure like this self-test is needed. +// * +// * 2. We don't want to leave sensitive data from our actual password hash +// * computation on the stack or in registers. Previous revisions of the code +// * would do explicit cleanups, but simply running the self-test after hash +// * computation is more reliable. +// * +// * The performance cost of this quick self-test is around 0.6% at the "$2a$08" +// * setting. +// */ +func X__crypt_blowfish(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(384) + defer tls.Free(384) + var flags uint32 + var k, p, retval, test_hash, test_key, test_setting uintptr + var ok int32 + var _ /* ae at bp+96 */ TBF_key + var _ /* ai at bp+168 */ TBF_key + var _ /* buf at bp+0 */ struct { + Fs [30]uint8 + Fo [63]uint8 + } + var _ /* ye at bp+240 */ TBF_key + var _ /* yi at bp+312 */ TBF_key + _, _, _, _, _, _, _, _ = flags, k, ok, p, retval, test_hash, test_key, test_setting + test_key = __ccgo_ts + 18 + test_setting = __ccgo_ts + 28 + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + /* Hash the supplied password */ + retval = _BF_crypt(tls, key, setting, output, uint32(16)) + /* + * Do a quick self-test. It is important that we make both calls to BF_crypt() + * from the same scope such that they likely use the same stack locations, + * which makes the second call overwrite the first call's sensitive data on the + * stack and makes it more likely that any alignment related issues would be + * detected by the self-test. + */ + Xmemcpy(tls, bp, test_setting, uint64(30)) + if retval != 0 { + flags = uint32(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + uintptr(flags&uint32(1))*34 + *(*uint8)(unsafe.Pointer(bp + 2)) = *(*uint8)(unsafe.Pointer(setting + 2)) + } + Xmemset(tls, bp+30, int32(0x55), uint64(63)) + *(*uint8)(unsafe.Pointer(bp + 30 + uintptr(Uint64FromInt64(63)-Uint64FromInt32(1)))) = uint8(0) + p = _BF_crypt(tls, test_key, bp, bp+30, uint32(1)) + ok = BoolInt32(p == bp+30 && !(Xmemcmp(tls, p, bp, uint64(Int32FromInt32(7)+Int32FromInt32(22))) != 0) && !(Xmemcmp(tls, p+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), test_hash, uint64(Int32FromInt32(31)+Int32FromInt32(1)+Int32FromInt32(1)+Int32FromInt32(1))) != 0)) + k = __ccgo_ts + 58 + _BF_set_key(tls, k, bp+96, bp+168, uint8(2)) /* $2a$ */ + _BF_set_key(tls, k, bp+240, bp+312, uint8(4)) /* $2y$ */ + *(*TBF_word)(unsafe.Pointer(bp + 168)) ^= uint32(0x10000) /* undo the safety (for comparison) */ + ok = BoolInt32(ok != 0 && (*(*TBF_key)(unsafe.Pointer(bp + 168)))[0] == uint32(0xdb9c59bc) && (*(*TBF_key)(unsafe.Pointer(bp + 240)))[int32(17)] == uint32(0x33343500) && !(Xmemcmp(tls, bp+96, bp+240, uint64(72)) != 0) && !(Xmemcmp(tls, bp+168, bp+312, uint64(72)) != 0)) + if ok != 0 && retval != 0 { + return retval + } + return __ccgo_ts + 70 +} + +var _test_hashes = [2][34]uint8{ + 0: {'i', '1', 'D', '7', '0', '9', 'v', 'f', 'a', 'm', 'u', 'l', 'i', 'm', 'l', 'G', 'c', 'q', '0', 'q', 'q', '3', 'U', 'v', 'u', 'U', 'a', 's', 'v', 'E', 'a', 0, 'U'}, + 1: {'V', 'U', 'r', 'P', 'm', 'X', 'D', '6', 'q', '/', 'n', 'V', 'S', 'S', 'p', '7', 'p', 'N', 'D', 'h', 'C', 'R', '9', '0', '7', '1', 'I', 'f', 'I', 'R', 'e', 0, 'U'}, +} + +const _PASSWORD_EFMT1 = 95 + +type Texpanded_key = struct { + Fl [16]Tuint32_t + Fr [16]Tuint32_t +} + +var _key_shifts = [16]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(2), + 3: uint8(2), + 4: uint8(2), + 5: uint8(2), + 6: uint8(2), + 7: uint8(2), + 8: uint8(1), + 9: uint8(2), + 10: uint8(2), + 11: uint8(2), + 12: uint8(2), + 13: uint8(2), + 14: uint8(2), + 15: uint8(1), +} + +var _psbox = [8][64]Tuint32_t{ + 0: { + 0: uint32(0x00808200), + 2: uint32(0x00008000), + 3: uint32(0x00808202), + 4: uint32(0x00808002), + 5: uint32(0x00008202), + 6: uint32(0x00000002), + 7: uint32(0x00008000), + 8: uint32(0x00000200), + 9: uint32(0x00808200), + 10: uint32(0x00808202), + 11: uint32(0x00000200), + 12: uint32(0x00800202), + 13: uint32(0x00808002), + 14: uint32(0x00800000), + 15: uint32(0x00000002), + 16: uint32(0x00000202), + 17: uint32(0x00800200), + 18: uint32(0x00800200), + 19: uint32(0x00008200), + 20: uint32(0x00008200), + 21: uint32(0x00808000), + 22: uint32(0x00808000), + 23: uint32(0x00800202), + 24: uint32(0x00008002), + 25: uint32(0x00800002), + 26: uint32(0x00800002), + 27: uint32(0x00008002), + 29: uint32(0x00000202), + 30: uint32(0x00008202), + 31: uint32(0x00800000), + 32: uint32(0x00008000), + 33: uint32(0x00808202), + 34: uint32(0x00000002), + 35: uint32(0x00808000), + 36: uint32(0x00808200), + 37: uint32(0x00800000), + 38: uint32(0x00800000), + 39: uint32(0x00000200), + 40: uint32(0x00808002), + 41: uint32(0x00008000), + 42: uint32(0x00008200), + 43: uint32(0x00800002), + 44: uint32(0x00000200), + 45: uint32(0x00000002), + 46: uint32(0x00800202), + 47: uint32(0x00008202), + 48: uint32(0x00808202), + 49: uint32(0x00008002), + 50: uint32(0x00808000), + 51: uint32(0x00800202), + 52: uint32(0x00800002), + 53: uint32(0x00000202), + 54: uint32(0x00008202), + 55: uint32(0x00808200), + 56: uint32(0x00000202), + 57: uint32(0x00800200), + 58: uint32(0x00800200), + 60: uint32(0x00008002), + 61: uint32(0x00008200), + 63: uint32(0x00808002), + }, + 1: { + 0: uint32(0x40084010), + 1: uint32(0x40004000), + 2: uint32(0x00004000), + 3: uint32(0x00084010), + 4: uint32(0x00080000), + 5: uint32(0x00000010), + 6: uint32(0x40080010), + 7: uint32(0x40004010), + 8: uint32(0x40000010), + 9: uint32(0x40084010), + 10: uint32(0x40084000), + 11: uint32(0x40000000), + 12: uint32(0x40004000), + 13: uint32(0x00080000), + 14: uint32(0x00000010), + 15: uint32(0x40080010), + 16: uint32(0x00084000), + 17: uint32(0x00080010), + 18: uint32(0x40004010), + 20: uint32(0x40000000), + 21: uint32(0x00004000), + 22: uint32(0x00084010), + 23: uint32(0x40080000), + 24: uint32(0x00080010), + 25: uint32(0x40000010), + 27: uint32(0x00084000), + 28: uint32(0x00004010), + 29: uint32(0x40084000), + 30: uint32(0x40080000), + 31: uint32(0x00004010), + 33: uint32(0x00084010), + 34: uint32(0x40080010), + 35: uint32(0x00080000), + 36: uint32(0x40004010), + 37: uint32(0x40080000), + 38: uint32(0x40084000), + 39: uint32(0x00004000), + 40: uint32(0x40080000), + 41: uint32(0x40004000), + 42: uint32(0x00000010), + 43: uint32(0x40084010), + 44: uint32(0x00084010), + 45: uint32(0x00000010), + 46: uint32(0x00004000), + 47: uint32(0x40000000), + 48: uint32(0x00004010), + 49: uint32(0x40084000), + 50: uint32(0x00080000), + 51: uint32(0x40000010), + 52: uint32(0x00080010), + 53: uint32(0x40004010), + 54: uint32(0x40000010), + 55: uint32(0x00080010), + 56: uint32(0x00084000), + 58: uint32(0x40004000), + 59: uint32(0x00004010), + 60: uint32(0x40000000), + 61: uint32(0x40080010), + 62: uint32(0x40084010), + 63: uint32(0x00084000), + }, + 2: { + 0: uint32(0x00000104), + 1: uint32(0x04010100), + 3: uint32(0x04010004), + 4: uint32(0x04000100), + 6: uint32(0x00010104), + 7: uint32(0x04000100), + 8: uint32(0x00010004), + 9: uint32(0x04000004), + 10: uint32(0x04000004), + 11: uint32(0x00010000), + 12: uint32(0x04010104), + 13: uint32(0x00010004), + 14: uint32(0x04010000), + 15: uint32(0x00000104), + 16: uint32(0x04000000), + 17: uint32(0x00000004), + 18: uint32(0x04010100), + 19: uint32(0x00000100), + 20: uint32(0x00010100), + 21: uint32(0x04010000), + 22: uint32(0x04010004), + 23: uint32(0x00010104), + 24: uint32(0x04000104), + 25: uint32(0x00010100), + 26: uint32(0x00010000), + 27: uint32(0x04000104), + 28: uint32(0x00000004), + 29: uint32(0x04010104), + 30: uint32(0x00000100), + 31: uint32(0x04000000), + 32: uint32(0x04010100), + 33: uint32(0x04000000), + 34: uint32(0x00010004), + 35: uint32(0x00000104), + 36: uint32(0x00010000), + 37: uint32(0x04010100), + 38: uint32(0x04000100), + 40: uint32(0x00000100), + 41: uint32(0x00010004), + 42: uint32(0x04010104), + 43: uint32(0x04000100), + 44: uint32(0x04000004), + 45: uint32(0x00000100), + 47: uint32(0x04010004), + 48: uint32(0x04000104), + 49: uint32(0x00010000), + 50: uint32(0x04000000), + 51: uint32(0x04010104), + 52: uint32(0x00000004), + 53: uint32(0x00010104), + 54: uint32(0x00010100), + 55: uint32(0x04000004), + 56: uint32(0x04010000), + 57: uint32(0x04000104), + 58: uint32(0x00000104), + 59: uint32(0x04010000), + 60: uint32(0x00010104), + 61: uint32(0x00000004), + 62: uint32(0x04010004), + 63: uint32(0x00010100), + }, + 3: { + 0: uint32(0x80401000), + 1: uint32(0x80001040), + 2: uint32(0x80001040), + 3: uint32(0x00000040), + 4: uint32(0x00401040), + 5: uint32(0x80400040), + 6: uint32(0x80400000), + 7: uint32(0x80001000), + 9: uint32(0x00401000), + 10: uint32(0x00401000), + 11: uint32(0x80401040), + 12: uint32(0x80000040), + 14: uint32(0x00400040), + 15: uint32(0x80400000), + 16: uint32(0x80000000), + 17: uint32(0x00001000), + 18: uint32(0x00400000), + 19: uint32(0x80401000), + 20: uint32(0x00000040), + 21: uint32(0x00400000), + 22: uint32(0x80001000), + 23: uint32(0x00001040), + 24: uint32(0x80400040), + 25: uint32(0x80000000), + 26: uint32(0x00001040), + 27: uint32(0x00400040), + 28: uint32(0x00001000), + 29: uint32(0x00401040), + 30: uint32(0x80401040), + 31: uint32(0x80000040), + 32: uint32(0x00400040), + 33: uint32(0x80400000), + 34: uint32(0x00401000), + 35: uint32(0x80401040), + 36: uint32(0x80000040), + 39: uint32(0x00401000), + 40: uint32(0x00001040), + 41: uint32(0x00400040), + 42: uint32(0x80400040), + 43: uint32(0x80000000), + 44: uint32(0x80401000), + 45: uint32(0x80001040), + 46: uint32(0x80001040), + 47: uint32(0x00000040), + 48: uint32(0x80401040), + 49: uint32(0x80000040), + 50: uint32(0x80000000), + 51: uint32(0x00001000), + 52: uint32(0x80400000), + 53: uint32(0x80001000), + 54: uint32(0x00401040), + 55: uint32(0x80400040), + 56: uint32(0x80001000), + 57: uint32(0x00001040), + 58: uint32(0x00400000), + 59: uint32(0x80401000), + 60: uint32(0x00000040), + 61: uint32(0x00400000), + 62: uint32(0x00001000), + 63: uint32(0x00401040), + }, + 4: { + 0: uint32(0x00000080), + 1: uint32(0x01040080), + 2: uint32(0x01040000), + 3: uint32(0x21000080), + 4: uint32(0x00040000), + 5: uint32(0x00000080), + 6: uint32(0x20000000), + 7: uint32(0x01040000), + 8: uint32(0x20040080), + 9: uint32(0x00040000), + 10: uint32(0x01000080), + 11: uint32(0x20040080), + 12: uint32(0x21000080), + 13: uint32(0x21040000), + 14: uint32(0x00040080), + 15: uint32(0x20000000), + 16: uint32(0x01000000), + 17: uint32(0x20040000), + 18: uint32(0x20040000), + 20: uint32(0x20000080), + 21: uint32(0x21040080), + 22: uint32(0x21040080), + 23: uint32(0x01000080), + 24: uint32(0x21040000), + 25: uint32(0x20000080), + 27: uint32(0x21000000), + 28: uint32(0x01040080), + 29: uint32(0x01000000), + 30: uint32(0x21000000), + 31: uint32(0x00040080), + 32: uint32(0x00040000), + 33: uint32(0x21000080), + 34: uint32(0x00000080), + 35: uint32(0x01000000), + 36: uint32(0x20000000), + 37: uint32(0x01040000), + 38: uint32(0x21000080), + 39: uint32(0x20040080), + 40: uint32(0x01000080), + 41: uint32(0x20000000), + 42: uint32(0x21040000), + 43: uint32(0x01040080), + 44: uint32(0x20040080), + 45: uint32(0x00000080), + 46: uint32(0x01000000), + 47: uint32(0x21040000), + 48: uint32(0x21040080), + 49: uint32(0x00040080), + 50: uint32(0x21000000), + 51: uint32(0x21040080), + 52: uint32(0x01040000), + 54: uint32(0x20040000), + 55: uint32(0x21000000), + 56: uint32(0x00040080), + 57: uint32(0x01000080), + 58: uint32(0x20000080), + 59: uint32(0x00040000), + 61: uint32(0x20040000), + 62: uint32(0x01040080), + 63: uint32(0x20000080), + }, + 5: { + 0: uint32(0x10000008), + 1: uint32(0x10200000), + 2: uint32(0x00002000), + 3: uint32(0x10202008), + 4: uint32(0x10200000), + 5: uint32(0x00000008), + 6: uint32(0x10202008), + 7: uint32(0x00200000), + 8: uint32(0x10002000), + 9: uint32(0x00202008), + 10: uint32(0x00200000), + 11: uint32(0x10000008), + 12: uint32(0x00200008), + 13: uint32(0x10002000), + 14: uint32(0x10000000), + 15: uint32(0x00002008), + 17: uint32(0x00200008), + 18: uint32(0x10002008), + 19: uint32(0x00002000), + 20: uint32(0x00202000), + 21: uint32(0x10002008), + 22: uint32(0x00000008), + 23: uint32(0x10200008), + 24: uint32(0x10200008), + 26: uint32(0x00202008), + 27: uint32(0x10202000), + 28: uint32(0x00002008), + 29: uint32(0x00202000), + 30: uint32(0x10202000), + 31: uint32(0x10000000), + 32: uint32(0x10002000), + 33: uint32(0x00000008), + 34: uint32(0x10200008), + 35: uint32(0x00202000), + 36: uint32(0x10202008), + 37: uint32(0x00200000), + 38: uint32(0x00002008), + 39: uint32(0x10000008), + 40: uint32(0x00200000), + 41: uint32(0x10002000), + 42: uint32(0x10000000), + 43: uint32(0x00002008), + 44: uint32(0x10000008), + 45: uint32(0x10202008), + 46: uint32(0x00202000), + 47: uint32(0x10200000), + 48: uint32(0x00202008), + 49: uint32(0x10202000), + 51: uint32(0x10200008), + 52: uint32(0x00000008), + 53: uint32(0x00002000), + 54: uint32(0x10200000), + 55: uint32(0x00202008), + 56: uint32(0x00002000), + 57: uint32(0x00200008), + 58: uint32(0x10002008), + 60: uint32(0x10202000), + 61: uint32(0x10000000), + 62: uint32(0x00200008), + 63: uint32(0x10002008), + }, + 6: { + 0: uint32(0x00100000), + 1: uint32(0x02100001), + 2: uint32(0x02000401), + 4: uint32(0x00000400), + 5: uint32(0x02000401), + 6: uint32(0x00100401), + 7: uint32(0x02100400), + 8: uint32(0x02100401), + 9: uint32(0x00100000), + 11: uint32(0x02000001), + 12: uint32(0x00000001), + 13: uint32(0x02000000), + 14: uint32(0x02100001), + 15: uint32(0x00000401), + 16: uint32(0x02000400), + 17: uint32(0x00100401), + 18: uint32(0x00100001), + 19: uint32(0x02000400), + 20: uint32(0x02000001), + 21: uint32(0x02100000), + 22: uint32(0x02100400), + 23: uint32(0x00100001), + 24: uint32(0x02100000), + 25: uint32(0x00000400), + 26: uint32(0x00000401), + 27: uint32(0x02100401), + 28: uint32(0x00100400), + 29: uint32(0x00000001), + 30: uint32(0x02000000), + 31: uint32(0x00100400), + 32: uint32(0x02000000), + 33: uint32(0x00100400), + 34: uint32(0x00100000), + 35: uint32(0x02000401), + 36: uint32(0x02000401), + 37: uint32(0x02100001), + 38: uint32(0x02100001), + 39: uint32(0x00000001), + 40: uint32(0x00100001), + 41: uint32(0x02000000), + 42: uint32(0x02000400), + 43: uint32(0x00100000), + 44: uint32(0x02100400), + 45: uint32(0x00000401), + 46: uint32(0x00100401), + 47: uint32(0x02100400), + 48: uint32(0x00000401), + 49: uint32(0x02000001), + 50: uint32(0x02100401), + 51: uint32(0x02100000), + 52: uint32(0x00100400), + 54: uint32(0x00000001), + 55: uint32(0x02100401), + 57: uint32(0x00100401), + 58: uint32(0x02100000), + 59: uint32(0x00000400), + 60: uint32(0x02000001), + 61: uint32(0x02000400), + 62: uint32(0x00000400), + 63: uint32(0x00100001), + }, + 7: { + 0: uint32(0x08000820), + 1: uint32(0x00000800), + 2: uint32(0x00020000), + 3: uint32(0x08020820), + 4: uint32(0x08000000), + 5: uint32(0x08000820), + 6: uint32(0x00000020), + 7: uint32(0x08000000), + 8: uint32(0x00020020), + 9: uint32(0x08020000), + 10: uint32(0x08020820), + 11: uint32(0x00020800), + 12: uint32(0x08020800), + 13: uint32(0x00020820), + 14: uint32(0x00000800), + 15: uint32(0x00000020), + 16: uint32(0x08020000), + 17: uint32(0x08000020), + 18: uint32(0x08000800), + 19: uint32(0x00000820), + 20: uint32(0x00020800), + 21: uint32(0x00020020), + 22: uint32(0x08020020), + 23: uint32(0x08020800), + 24: uint32(0x00000820), + 27: uint32(0x08020020), + 28: uint32(0x08000020), + 29: uint32(0x08000800), + 30: uint32(0x00020820), + 31: uint32(0x00020000), + 32: uint32(0x00020820), + 33: uint32(0x00020000), + 34: uint32(0x08020800), + 35: uint32(0x00000800), + 36: uint32(0x00000020), + 37: uint32(0x08020020), + 38: uint32(0x00000800), + 39: uint32(0x00020820), + 40: uint32(0x08000800), + 41: uint32(0x00000020), + 42: uint32(0x08000020), + 43: uint32(0x08020000), + 44: uint32(0x08020020), + 45: uint32(0x08000000), + 46: uint32(0x00020000), + 47: uint32(0x08000820), + 49: uint32(0x08020820), + 50: uint32(0x00020020), + 51: uint32(0x08000020), + 52: uint32(0x08020000), + 53: uint32(0x08000800), + 54: uint32(0x08000820), + 56: uint32(0x08020820), + 57: uint32(0x00020800), + 58: uint32(0x00020800), + 59: uint32(0x00000820), + 60: uint32(0x00000820), + 61: uint32(0x00020020), + 62: uint32(0x08000000), + 63: uint32(0x08020800), + }, +} +var _ip_maskl = [16][16]Tuint32_t{ + 0: { + 1: uint32(0x00010000), + 3: uint32(0x00010000), + 4: uint32(0x01000000), + 5: uint32(0x01010000), + 6: uint32(0x01000000), + 7: uint32(0x01010000), + 9: uint32(0x00010000), + 11: uint32(0x00010000), + 12: uint32(0x01000000), + 13: uint32(0x01010000), + 14: uint32(0x01000000), + 15: uint32(0x01010000), + }, + 1: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 4: uint32(0x00000100), + 5: uint32(0x00000101), + 6: uint32(0x00000100), + 7: uint32(0x00000101), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 12: uint32(0x00000100), + 13: uint32(0x00000101), + 14: uint32(0x00000100), + 15: uint32(0x00000101), + }, + 2: { + 1: uint32(0x00020000), + 3: uint32(0x00020000), + 4: uint32(0x02000000), + 5: uint32(0x02020000), + 6: uint32(0x02000000), + 7: uint32(0x02020000), + 9: uint32(0x00020000), + 11: uint32(0x00020000), + 12: uint32(0x02000000), + 13: uint32(0x02020000), + 14: uint32(0x02000000), + 15: uint32(0x02020000), + }, + 3: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 4: uint32(0x00000200), + 5: uint32(0x00000202), + 6: uint32(0x00000200), + 7: uint32(0x00000202), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 12: uint32(0x00000200), + 13: uint32(0x00000202), + 14: uint32(0x00000200), + 15: uint32(0x00000202), + }, + 4: { + 1: uint32(0x00040000), + 3: uint32(0x00040000), + 4: uint32(0x04000000), + 5: uint32(0x04040000), + 6: uint32(0x04000000), + 7: uint32(0x04040000), + 9: uint32(0x00040000), + 11: uint32(0x00040000), + 12: uint32(0x04000000), + 13: uint32(0x04040000), + 14: uint32(0x04000000), + 15: uint32(0x04040000), + }, + 5: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 4: uint32(0x00000400), + 5: uint32(0x00000404), + 6: uint32(0x00000400), + 7: uint32(0x00000404), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 12: uint32(0x00000400), + 13: uint32(0x00000404), + 14: uint32(0x00000400), + 15: uint32(0x00000404), + }, + 6: { + 1: uint32(0x00080000), + 3: uint32(0x00080000), + 4: uint32(0x08000000), + 5: uint32(0x08080000), + 6: uint32(0x08000000), + 7: uint32(0x08080000), + 9: uint32(0x00080000), + 11: uint32(0x00080000), + 12: uint32(0x08000000), + 13: uint32(0x08080000), + 14: uint32(0x08000000), + 15: uint32(0x08080000), + }, + 7: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 4: uint32(0x00000800), + 5: uint32(0x00000808), + 6: uint32(0x00000800), + 7: uint32(0x00000808), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 12: uint32(0x00000800), + 13: uint32(0x00000808), + 14: uint32(0x00000800), + 15: uint32(0x00000808), + }, + 8: { + 1: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x10000000), + 5: uint32(0x10100000), + 6: uint32(0x10000000), + 7: uint32(0x10100000), + 9: uint32(0x00100000), + 11: uint32(0x00100000), + 12: uint32(0x10000000), + 13: uint32(0x10100000), + 14: uint32(0x10000000), + 15: uint32(0x10100000), + }, + 9: { + 1: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001010), + 6: uint32(0x00001000), + 7: uint32(0x00001010), + 9: uint32(0x00000010), + 11: uint32(0x00000010), + 12: uint32(0x00001000), + 13: uint32(0x00001010), + 14: uint32(0x00001000), + 15: uint32(0x00001010), + }, + 10: { + 1: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x20000000), + 5: uint32(0x20200000), + 6: uint32(0x20000000), + 7: uint32(0x20200000), + 9: uint32(0x00200000), + 11: uint32(0x00200000), + 12: uint32(0x20000000), + 13: uint32(0x20200000), + 14: uint32(0x20000000), + 15: uint32(0x20200000), + }, + 11: { + 1: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002020), + 6: uint32(0x00002000), + 7: uint32(0x00002020), + 9: uint32(0x00000020), + 11: uint32(0x00000020), + 12: uint32(0x00002000), + 13: uint32(0x00002020), + 14: uint32(0x00002000), + 15: uint32(0x00002020), + }, + 12: { + 1: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x40000000), + 5: uint32(0x40400000), + 6: uint32(0x40000000), + 7: uint32(0x40400000), + 9: uint32(0x00400000), + 11: uint32(0x00400000), + 12: uint32(0x40000000), + 13: uint32(0x40400000), + 14: uint32(0x40000000), + 15: uint32(0x40400000), + }, + 13: { + 1: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004040), + 6: uint32(0x00004000), + 7: uint32(0x00004040), + 9: uint32(0x00000040), + 11: uint32(0x00000040), + 12: uint32(0x00004000), + 13: uint32(0x00004040), + 14: uint32(0x00004000), + 15: uint32(0x00004040), + }, + 14: { + 1: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x80000000), + 5: uint32(0x80800000), + 6: uint32(0x80000000), + 7: uint32(0x80800000), + 9: uint32(0x00800000), + 11: uint32(0x00800000), + 12: uint32(0x80000000), + 13: uint32(0x80800000), + 14: uint32(0x80000000), + 15: uint32(0x80800000), + }, + 15: { + 1: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008080), + 6: uint32(0x00008000), + 7: uint32(0x00008080), + 9: uint32(0x00000080), + 11: uint32(0x00000080), + 12: uint32(0x00008000), + 13: uint32(0x00008080), + 14: uint32(0x00008000), + 15: uint32(0x00008080), + }, +} +var _ip_maskr = [16][16]Tuint32_t{ + 0: { + 2: uint32(0x00010000), + 3: uint32(0x00010000), + 6: uint32(0x00010000), + 7: uint32(0x00010000), + 8: uint32(0x01000000), + 9: uint32(0x01000000), + 10: uint32(0x01010000), + 11: uint32(0x01010000), + 12: uint32(0x01000000), + 13: uint32(0x01000000), + 14: uint32(0x01010000), + 15: uint32(0x01010000), + }, + 1: { + 2: uint32(0x00000001), + 3: uint32(0x00000001), + 6: uint32(0x00000001), + 7: uint32(0x00000001), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x00000101), + 11: uint32(0x00000101), + 12: uint32(0x00000100), + 13: uint32(0x00000100), + 14: uint32(0x00000101), + 15: uint32(0x00000101), + }, + 2: { + 2: uint32(0x00020000), + 3: uint32(0x00020000), + 6: uint32(0x00020000), + 7: uint32(0x00020000), + 8: uint32(0x02000000), + 9: uint32(0x02000000), + 10: uint32(0x02020000), + 11: uint32(0x02020000), + 12: uint32(0x02000000), + 13: uint32(0x02000000), + 14: uint32(0x02020000), + 15: uint32(0x02020000), + }, + 3: { + 2: uint32(0x00000002), + 3: uint32(0x00000002), + 6: uint32(0x00000002), + 7: uint32(0x00000002), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x00000202), + 11: uint32(0x00000202), + 12: uint32(0x00000200), + 13: uint32(0x00000200), + 14: uint32(0x00000202), + 15: uint32(0x00000202), + }, + 4: { + 2: uint32(0x00040000), + 3: uint32(0x00040000), + 6: uint32(0x00040000), + 7: uint32(0x00040000), + 8: uint32(0x04000000), + 9: uint32(0x04000000), + 10: uint32(0x04040000), + 11: uint32(0x04040000), + 12: uint32(0x04000000), + 13: uint32(0x04000000), + 14: uint32(0x04040000), + 15: uint32(0x04040000), + }, + 5: { + 2: uint32(0x00000004), + 3: uint32(0x00000004), + 6: uint32(0x00000004), + 7: uint32(0x00000004), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x00000404), + 11: uint32(0x00000404), + 12: uint32(0x00000400), + 13: uint32(0x00000400), + 14: uint32(0x00000404), + 15: uint32(0x00000404), + }, + 6: { + 2: uint32(0x00080000), + 3: uint32(0x00080000), + 6: uint32(0x00080000), + 7: uint32(0x00080000), + 8: uint32(0x08000000), + 9: uint32(0x08000000), + 10: uint32(0x08080000), + 11: uint32(0x08080000), + 12: uint32(0x08000000), + 13: uint32(0x08000000), + 14: uint32(0x08080000), + 15: uint32(0x08080000), + }, + 7: { + 2: uint32(0x00000008), + 3: uint32(0x00000008), + 6: uint32(0x00000008), + 7: uint32(0x00000008), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x00000808), + 11: uint32(0x00000808), + 12: uint32(0x00000800), + 13: uint32(0x00000800), + 14: uint32(0x00000808), + 15: uint32(0x00000808), + }, + 8: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 6: uint32(0x00100000), + 7: uint32(0x00100000), + 8: uint32(0x10000000), + 9: uint32(0x10000000), + 10: uint32(0x10100000), + 11: uint32(0x10100000), + 12: uint32(0x10000000), + 13: uint32(0x10000000), + 14: uint32(0x10100000), + 15: uint32(0x10100000), + }, + 9: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 6: uint32(0x00000010), + 7: uint32(0x00000010), + 8: uint32(0x00001000), + 9: uint32(0x00001000), + 10: uint32(0x00001010), + 11: uint32(0x00001010), + 12: uint32(0x00001000), + 13: uint32(0x00001000), + 14: uint32(0x00001010), + 15: uint32(0x00001010), + }, + 10: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 6: uint32(0x00200000), + 7: uint32(0x00200000), + 8: uint32(0x20000000), + 9: uint32(0x20000000), + 10: uint32(0x20200000), + 11: uint32(0x20200000), + 12: uint32(0x20000000), + 13: uint32(0x20000000), + 14: uint32(0x20200000), + 15: uint32(0x20200000), + }, + 11: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 6: uint32(0x00000020), + 7: uint32(0x00000020), + 8: uint32(0x00002000), + 9: uint32(0x00002000), + 10: uint32(0x00002020), + 11: uint32(0x00002020), + 12: uint32(0x00002000), + 13: uint32(0x00002000), + 14: uint32(0x00002020), + 15: uint32(0x00002020), + }, + 12: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 6: uint32(0x00400000), + 7: uint32(0x00400000), + 8: uint32(0x40000000), + 9: uint32(0x40000000), + 10: uint32(0x40400000), + 11: uint32(0x40400000), + 12: uint32(0x40000000), + 13: uint32(0x40000000), + 14: uint32(0x40400000), + 15: uint32(0x40400000), + }, + 13: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 6: uint32(0x00000040), + 7: uint32(0x00000040), + 8: uint32(0x00004000), + 9: uint32(0x00004000), + 10: uint32(0x00004040), + 11: uint32(0x00004040), + 12: uint32(0x00004000), + 13: uint32(0x00004000), + 14: uint32(0x00004040), + 15: uint32(0x00004040), + }, + 14: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 6: uint32(0x00800000), + 7: uint32(0x00800000), + 8: uint32(0x80000000), + 9: uint32(0x80000000), + 10: uint32(0x80800000), + 11: uint32(0x80800000), + 12: uint32(0x80000000), + 13: uint32(0x80000000), + 14: uint32(0x80800000), + 15: uint32(0x80800000), + }, + 15: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 6: uint32(0x00000080), + 7: uint32(0x00000080), + 8: uint32(0x00008000), + 9: uint32(0x00008000), + 10: uint32(0x00008080), + 11: uint32(0x00008080), + 12: uint32(0x00008000), + 13: uint32(0x00008000), + 14: uint32(0x00008080), + 15: uint32(0x00008080), + }, +} +var _fp_maskl = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _fp_maskr = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _key_perm_maskl = [8][16]Tuint32_t{ + 0: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00001010), + 7: uint32(0x00001010), + 8: uint32(0x00100000), + 9: uint32(0x00100000), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00101000), + 13: uint32(0x00101000), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 1: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002020), + 7: uint32(0x00002020), + 8: uint32(0x00200000), + 9: uint32(0x00200000), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00202000), + 13: uint32(0x00202000), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 2: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00004040), + 7: uint32(0x00004040), + 8: uint32(0x00400000), + 9: uint32(0x00400000), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00404000), + 13: uint32(0x00404000), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 3: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00008080), + 7: uint32(0x00008080), + 8: uint32(0x00800000), + 9: uint32(0x00800000), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00808000), + 13: uint32(0x00808000), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 4: { + 1: uint32(0x00000001), + 2: uint32(0x00000100), + 3: uint32(0x00000101), + 4: uint32(0x00010000), + 5: uint32(0x00010001), + 6: uint32(0x00010100), + 7: uint32(0x00010101), + 8: uint32(0x01000000), + 9: uint32(0x01000001), + 10: uint32(0x01000100), + 11: uint32(0x01000101), + 12: uint32(0x01010000), + 13: uint32(0x01010001), + 14: uint32(0x01010100), + 15: uint32(0x01010101), + }, + 5: { + 1: uint32(0x00000002), + 2: uint32(0x00000200), + 3: uint32(0x00000202), + 4: uint32(0x00020000), + 5: uint32(0x00020002), + 6: uint32(0x00020200), + 7: uint32(0x00020202), + 8: uint32(0x02000000), + 9: uint32(0x02000002), + 10: uint32(0x02000200), + 11: uint32(0x02000202), + 12: uint32(0x02020000), + 13: uint32(0x02020002), + 14: uint32(0x02020200), + 15: uint32(0x02020202), + }, + 6: { + 1: uint32(0x00000004), + 2: uint32(0x00000400), + 3: uint32(0x00000404), + 4: uint32(0x00040000), + 5: uint32(0x00040004), + 6: uint32(0x00040400), + 7: uint32(0x00040404), + 8: uint32(0x04000000), + 9: uint32(0x04000004), + 10: uint32(0x04000400), + 11: uint32(0x04000404), + 12: uint32(0x04040000), + 13: uint32(0x04040004), + 14: uint32(0x04040400), + 15: uint32(0x04040404), + }, + 7: { + 1: uint32(0x00000008), + 2: uint32(0x00000800), + 3: uint32(0x00000808), + 4: uint32(0x00080000), + 5: uint32(0x00080008), + 6: uint32(0x00080800), + 7: uint32(0x00080808), + 8: uint32(0x08000000), + 9: uint32(0x08000008), + 10: uint32(0x08000800), + 11: uint32(0x08000808), + 12: uint32(0x08080000), + 13: uint32(0x08080008), + 14: uint32(0x08080800), + 15: uint32(0x08080808), + }, +} +var _key_perm_maskr = [12][16]Tuint32_t{ + 0: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 5: uint32(0x00000001), + 7: uint32(0x00000001), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 13: uint32(0x00000001), + 15: uint32(0x00000001), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00101000), + 7: uint32(0x00101000), + 8: uint32(0x00000010), + 9: uint32(0x00000010), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00001010), + 13: uint32(0x00001010), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 2: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 5: uint32(0x00000002), + 7: uint32(0x00000002), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 13: uint32(0x00000002), + 15: uint32(0x00000002), + }, + 3: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00202000), + 7: uint32(0x00202000), + 8: uint32(0x00000020), + 9: uint32(0x00000020), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00002020), + 13: uint32(0x00002020), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 4: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 5: uint32(0x00000004), + 7: uint32(0x00000004), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 13: uint32(0x00000004), + 15: uint32(0x00000004), + }, + 5: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00404000), + 7: uint32(0x00404000), + 8: uint32(0x00000040), + 9: uint32(0x00000040), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00004040), + 13: uint32(0x00004040), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 6: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 5: uint32(0x00000008), + 7: uint32(0x00000008), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 13: uint32(0x00000008), + 15: uint32(0x00000008), + }, + 7: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00808000), + 7: uint32(0x00808000), + 8: uint32(0x00000080), + 9: uint32(0x00000080), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00008080), + 13: uint32(0x00008080), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 8: { + 2: uint32(0x01000000), + 3: uint32(0x01000000), + 4: uint32(0x00010000), + 5: uint32(0x00010000), + 6: uint32(0x01010000), + 7: uint32(0x01010000), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x01000100), + 11: uint32(0x01000100), + 12: uint32(0x00010100), + 13: uint32(0x00010100), + 14: uint32(0x01010100), + 15: uint32(0x01010100), + }, + 9: { + 2: uint32(0x02000000), + 3: uint32(0x02000000), + 4: uint32(0x00020000), + 5: uint32(0x00020000), + 6: uint32(0x02020000), + 7: uint32(0x02020000), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x02000200), + 11: uint32(0x02000200), + 12: uint32(0x00020200), + 13: uint32(0x00020200), + 14: uint32(0x02020200), + 15: uint32(0x02020200), + }, + 10: { + 2: uint32(0x04000000), + 3: uint32(0x04000000), + 4: uint32(0x00040000), + 5: uint32(0x00040000), + 6: uint32(0x04040000), + 7: uint32(0x04040000), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x04000400), + 11: uint32(0x04000400), + 12: uint32(0x00040400), + 13: uint32(0x00040400), + 14: uint32(0x04040400), + 15: uint32(0x04040400), + }, + 11: { + 2: uint32(0x08000000), + 3: uint32(0x08000000), + 4: uint32(0x00080000), + 5: uint32(0x00080000), + 6: uint32(0x08080000), + 7: uint32(0x08080000), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x08000800), + 11: uint32(0x08000800), + 12: uint32(0x00080800), + 13: uint32(0x00080800), + 14: uint32(0x08080800), + 15: uint32(0x08080800), + }, +} +var _comp_maskl0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00020000), + 2: uint32(0x00000001), + 3: uint32(0x00020001), + 4: uint32(0x00080000), + 5: uint32(0x000a0000), + 6: uint32(0x00080001), + 7: uint32(0x000a0001), + }, + 1: { + 1: uint32(0x00001000), + 3: uint32(0x00001000), + 4: uint32(0x00000040), + 5: uint32(0x00001040), + 6: uint32(0x00000040), + 7: uint32(0x00001040), + }, + 2: { + 1: uint32(0x00400000), + 2: uint32(0x00000020), + 3: uint32(0x00400020), + 4: uint32(0x00008000), + 5: uint32(0x00408000), + 6: uint32(0x00008020), + 7: uint32(0x00408020), + }, + 3: { + 1: uint32(0x00100000), + 2: uint32(0x00000800), + 3: uint32(0x00100800), + 5: uint32(0x00100000), + 6: uint32(0x00000800), + 7: uint32(0x00100800), + }, +} +var _comp_maskr0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00200000), + 2: uint32(0x00020000), + 3: uint32(0x00220000), + 4: uint32(0x00000002), + 5: uint32(0x00200002), + 6: uint32(0x00020002), + 7: uint32(0x00220002), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00000004), + 5: uint32(0x00000004), + 6: uint32(0x00100004), + 7: uint32(0x00100004), + }, + 2: { + 1: uint32(0x00004000), + 2: uint32(0x00000800), + 3: uint32(0x00004800), + 5: uint32(0x00004000), + 6: uint32(0x00000800), + 7: uint32(0x00004800), + }, + 3: { + 1: uint32(0x00400000), + 2: uint32(0x00008000), + 3: uint32(0x00408000), + 4: uint32(0x00000008), + 5: uint32(0x00400008), + 6: uint32(0x00008008), + 7: uint32(0x00408008), + }, +} +var _comp_maskl1 = [4][16]Tuint32_t{ + 0: { + 1: uint32(0x00000010), + 2: uint32(0x00004000), + 3: uint32(0x00004010), + 4: uint32(0x00040000), + 5: uint32(0x00040010), + 6: uint32(0x00044000), + 7: uint32(0x00044010), + 8: uint32(0x00000100), + 9: uint32(0x00000110), + 10: uint32(0x00004100), + 11: uint32(0x00004110), + 12: uint32(0x00040100), + 13: uint32(0x00040110), + 14: uint32(0x00044100), + 15: uint32(0x00044110), + }, + 1: { + 1: uint32(0x00800000), + 2: uint32(0x00000002), + 3: uint32(0x00800002), + 4: uint32(0x00000200), + 5: uint32(0x00800200), + 6: uint32(0x00000202), + 7: uint32(0x00800202), + 8: uint32(0x00200000), + 9: uint32(0x00a00000), + 10: uint32(0x00200002), + 11: uint32(0x00a00002), + 12: uint32(0x00200200), + 13: uint32(0x00a00200), + 14: uint32(0x00200202), + 15: uint32(0x00a00202), + }, + 2: { + 1: uint32(0x00002000), + 2: uint32(0x00000004), + 3: uint32(0x00002004), + 4: uint32(0x00000400), + 5: uint32(0x00002400), + 6: uint32(0x00000404), + 7: uint32(0x00002404), + 9: uint32(0x00002000), + 10: uint32(0x00000004), + 11: uint32(0x00002004), + 12: uint32(0x00000400), + 13: uint32(0x00002400), + 14: uint32(0x00000404), + 15: uint32(0x00002404), + }, + 3: { + 1: uint32(0x00010000), + 2: uint32(0x00000008), + 3: uint32(0x00010008), + 4: uint32(0x00000080), + 5: uint32(0x00010080), + 6: uint32(0x00000088), + 7: uint32(0x00010088), + 9: uint32(0x00010000), + 10: uint32(0x00000008), + 11: uint32(0x00010008), + 12: uint32(0x00000080), + 13: uint32(0x00010080), + 14: uint32(0x00000088), + 15: uint32(0x00010088), + }, +} +var _comp_maskr1 = [4][16]Tuint32_t{ + 0: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002080), + 7: uint32(0x00002080), + 8: uint32(0x00000001), + 9: uint32(0x00000001), + 10: uint32(0x00000081), + 11: uint32(0x00000081), + 12: uint32(0x00002001), + 13: uint32(0x00002001), + 14: uint32(0x00002081), + 15: uint32(0x00002081), + }, + 1: { + 1: uint32(0x00000010), + 2: uint32(0x00800000), + 3: uint32(0x00800010), + 4: uint32(0x00010000), + 5: uint32(0x00010010), + 6: uint32(0x00810000), + 7: uint32(0x00810010), + 8: uint32(0x00000200), + 9: uint32(0x00000210), + 10: uint32(0x00800200), + 11: uint32(0x00800210), + 12: uint32(0x00010200), + 13: uint32(0x00010210), + 14: uint32(0x00810200), + 15: uint32(0x00810210), + }, + 2: { + 1: uint32(0x00000400), + 2: uint32(0x00001000), + 3: uint32(0x00001400), + 4: uint32(0x00080000), + 5: uint32(0x00080400), + 6: uint32(0x00081000), + 7: uint32(0x00081400), + 8: uint32(0x00000020), + 9: uint32(0x00000420), + 10: uint32(0x00001020), + 11: uint32(0x00001420), + 12: uint32(0x00080020), + 13: uint32(0x00080420), + 14: uint32(0x00081020), + 15: uint32(0x00081420), + }, + 3: { + 1: uint32(0x00000100), + 2: uint32(0x00040000), + 3: uint32(0x00040100), + 5: uint32(0x00000100), + 6: uint32(0x00040000), + 7: uint32(0x00040100), + 8: uint32(0x00000040), + 9: uint32(0x00000140), + 10: uint32(0x00040040), + 11: uint32(0x00040140), + 12: uint32(0x00000040), + 13: uint32(0x00000140), + 14: uint32(0x00040040), + 15: uint32(0x00040140), + }, +} + +var _ascii64 = [65]uint8{'.', '/', '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', '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'} + +/* 0000000000111111111122222222223333333333444444444455555555556666 */ +/* 0123456789012345678901234567890123456789012345678901234567890123 */ + +// C documentation +// +// /* +// * We match the behavior of UFC-crypt on systems where "char" is signed by +// * default (the majority), regardless of char's signedness on our system. +// */ +func _ascii_to_bin(tls *TLS, ch int32) (r Tuint32_t) { + var retval, sch, v1 int32 + _, _, _ = retval, sch, v1 + if ch < int32(0x80) { + v1 = ch + } else { + v1 = -(int32(0x100) - ch) + } + sch = v1 + retval = sch - int32('.') + if sch >= int32('A') { + retval = sch - (Int32FromUint8('A') - Int32FromInt32(12)) + if sch >= int32('a') { + retval = sch - (Int32FromUint8('a') - Int32FromInt32(38)) + } + } + retval &= int32(0x3f) + return uint32(retval) +} + +// C documentation +// +// /* +// * When we choose to "support" invalid salts, nevertheless disallow those +// * containing characters that would violate the passwd file format. +// */ +func _ascii_is_unsafe(tls *TLS, ch uint8) (r int32) { + return BoolInt32(!(ch != 0) || int32(ch) == int32('\n') || int32(ch) == int32(':')) +} + +func _setup_salt(tls *TLS, salt Tuint32_t) (r Tuint32_t) { + var i uint32 + var obit, saltbit, saltbits Tuint32_t + _, _, _, _ = i, obit, saltbit, saltbits + saltbits = uint32(0) + saltbit = uint32(1) + obit = uint32(0x800000) + i = uint32(0) + for { + if !(i < uint32(24)) { + break + } + if salt&saltbit != 0 { + saltbits |= obit + } + saltbit <<= uint32(1) + obit >>= uint32(1) + goto _1 + _1: + ; + i++ + } + return saltbits +} + +func X__des_setkey(tls *TLS, key uintptr, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v ekey=%v, (%v:)", tls, key, ekey, origin(2)) + } + var i, ibit, j, round, shifts uint32 + var k0, k1, kl, kr, rawkey0, rawkey1, t0, t1, v1, v4 Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ibit, j, k0, k1, kl, kr, rawkey0, rawkey1, round, shifts, t0, t1, v1, v4 + rawkey0 = uint32(*(*uint8)(unsafe.Pointer(key + 3))) | uint32(*(*uint8)(unsafe.Pointer(key + 2)))<>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskl)) + uintptr(i+uint32(4))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j)*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) + ibit -= uint32(4) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j+uint32(1))*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(i+uint32(8))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + /* + * Rotate subkeys and do compression permutation. + */ + shifts = uint32(0) + round = uint32(0) + for { + if !(round < uint32(16)) { + break + } + shifts += uint32(_key_shifts[round]) + t0 = k0<>(Uint32FromInt32(28)-shifts) + t1 = k1<>(Uint32FromInt32(28)-shifts) + v4 = Uint32FromInt32(0) + kr = v4 + kl = v4 + ibit = uint32(25) + i = uint32(0) + for { + if !(i < uint32(4)) { + break + } + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl0)) + uintptr(i)*32 + uintptr(t0>>ibit&uint32(7))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr0)) + uintptr(i)*32 + uintptr(t1>>ibit&uint32(7))*4)) + ibit -= uint32(4) + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl1)) + uintptr(i)*64 + uintptr(t0>>ibit&uint32(0xf))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr1)) + uintptr(i)*64 + uintptr(t1>>ibit&uint32(0xf))*4)) + ibit -= uint32(3) + goto _5 + _5: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(ekey + uintptr(round)*4)) = kl + *(*Tuint32_t)(unsafe.Pointer(ekey + 64 + uintptr(round)*4)) = kr + goto _3 + _3: + ; + round++ + } +} + +// C documentation +// +// /* +// * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format. +// */ +func X__do_des(tls *TLS, l_in Tuint32_t, r_in Tuint32_t, l_out uintptr, r_out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v l_in=%v r_in=%v l_out=%v r_out=%v count=%v saltbits=%v ekey=%v, (%v:)", tls, l_in, r_in, l_out, r_out, count, saltbits, ekey, origin(2)) + } + var f, l, lo, r, r48l, r48r, ro, v1, v3, v7 Tuint32_t + var i, i1, ibit, ibit1, round, v4 uint32 + var kl, kr, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, i1, ibit, ibit1, kl, kr, l, lo, r, r48l, r48r, ro, round, v1, v3, v4, v5, v6, v7 + /* + * Do initial permutation (IP). + */ + v1 = Uint32FromInt32(0) + r = v1 + l = v1 + if l_in|r_in != 0 { + i = uint32(0) + ibit = Uint32FromInt32(28) + for { + if !(i < uint32(8)) { + break + } + l |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + r |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + } + for { + v3 = count + count-- + if !(v3 != 0) { + break + } + /* + * Do each round. + */ + round = uint32(16) + kl = ekey + kr = ekey + 64 + for { + v4 = round + round-- + if !(v4 != 0) { + break + } + /* + * Expand R to 48 bits (simulate the E-box). + */ + r48l = r&uint32(0x00000001)<>int32(9) | r&uint32(0x1f800000)>>int32(11) | r&uint32(0x01f80000)>>int32(13) | r&uint32(0x001f8000)>>int32(15) + r48r = r&uint32(0x0001f800)<>int32(31) + /* + * Do salting for crypt() and friends, and + * XOR with the permuted key. + */ + f = (r48l ^ r48r) & saltbits + v5 = kl + kl += 4 + r48l ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v5)) + v6 = kr + kr += 4 + r48r ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v6)) + /* + * Do S-box lookups (which shrink it back to 32 bits) + * and do the P-box permutation at the same time. + */ + f = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + uintptr(r48l>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 1*256 + uintptr(r48l>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 2*256 + uintptr(r48l>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 3*256 + uintptr(r48l&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 4*256 + uintptr(r48r>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 5*256 + uintptr(r48r>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 6*256 + uintptr(r48r>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 7*256 + uintptr(r48r&uint32(0x3f))*4)) + /* + * Now that we've permuted things, complete f(). + */ + f ^= l + l = r + r = f + } + r = l + l = f + } + /* + * Do final permutation (inverse of IP). + */ + v7 = Uint32FromInt32(0) + ro = v7 + lo = v7 + i1 = uint32(0) + ibit1 = Uint32FromInt32(28) + for { + if !(i1 < uint32(4)) { + break + } + ro |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + ibit1 -= uint32(4) + lo |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + goto _8 + _8: + ; + i1++ + ibit1 -= uint32(4) + } + *(*Tuint32_t)(unsafe.Pointer(l_out)) = lo + *(*Tuint32_t)(unsafe.Pointer(r_out)) = ro +} + +func _des_cipher(tls *TLS, in uintptr, out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rawl, rawr Tuint32_t + var _ /* l_out at bp+0 */ Tuint32_t + var _ /* r_out at bp+4 */ Tuint32_t + _, _ = rawl, rawr + rawl = uint32(*(*uint8)(unsafe.Pointer(in + 3))) | uint32(*(*uint8)(unsafe.Pointer(in + 2)))<> int32(24)) + *(*uint8)(unsafe.Pointer(out + 1)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 2)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 3)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp))) + *(*uint8)(unsafe.Pointer(out + 4)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(24)) + *(*uint8)(unsafe.Pointer(out + 5)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 6)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 7)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4))) +} + +func __crypt_extended_r_uut(tls *TLS, _key uintptr, _setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(144) + defer tls.Free(144) + var count, l, salt, value, value1 Tuint32_t + var i uint32 + var key, p, q, setting, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 uintptr + var _ /* ekey at bp+0 */ Texpanded_key + var _ /* keybuf at bp+128 */ [8]uint8 + var _ /* r0 at bp+136 */ Tuint32_t + var _ /* r1 at bp+140 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = count, i, key, l, p, q, salt, setting, value, value1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 + key = _key + setting = _setting + /* + * Copy the key, shifting each character left by one bit and padding + * with zeroes. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) { + v1 = q + q++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(int32(*(*uint8)(unsafe.Pointer(key))) << int32(1)) + if *(*uint8)(unsafe.Pointer(key)) != 0 { + key++ + } + } + X__des_setkey(tls, bp+128, bp) + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('_') { + /* + * "new"-style: + * setting - underscore, 4 chars of count, 4 chars of salt + * key - unlimited characters + */ + i = uint32(1) + count = Uint32FromInt32(0) + for { + if !(i < uint32(5)) { + break + } + value = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + count |= value << ((i - uint32(1)) * uint32(6)) + goto _2 + _2: + ; + i++ + } + if !(count != 0) { + return UintptrFromInt32(0) + } + i = uint32(5) + salt = Uint32FromInt32(0) + for { + if !(i < uint32(9)) { + break + } + value1 = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value1]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + salt |= value1 << ((i - uint32(5)) * uint32(6)) + goto _3 + _3: + ; + i++ + } + for *(*uint8)(unsafe.Pointer(key)) != 0 { + /* + * Encrypt the key with itself. + */ + _des_cipher(tls, bp+128, bp+128, uint32(1), uint32(0), bp) + /* + * And XOR with the next 8 characters of the key. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) && *(*uint8)(unsafe.Pointer(key)) != 0 { + v5 = q + q++ + p4 = v5 + v6 = key + key++ + *(*uint8)(unsafe.Pointer(p4)) = uint8(int32(*(*uint8)(unsafe.Pointer(p4))) ^ int32(*(*uint8)(unsafe.Pointer(v6)))<> int32(8) + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v7)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v10 = p + p++ + *(*uint8)(unsafe.Pointer(v10)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 136))<>Int32FromInt32(16)&uint32(0xffff) + v11 = p + p++ + *(*uint8)(unsafe.Pointer(v11)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v12 = p + p++ + *(*uint8)(unsafe.Pointer(v12)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v13 = p + p++ + *(*uint8)(unsafe.Pointer(v13)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v14 = p + p++ + *(*uint8)(unsafe.Pointer(v14)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 140)) << int32(2) + v15 = p + p++ + *(*uint8)(unsafe.Pointer(v15)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v16 = p + p++ + *(*uint8)(unsafe.Pointer(v16)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v17 = p + p++ + *(*uint8)(unsafe.Pointer(v17)) = _ascii64[l&uint32(0x3f)] + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return output +} + +func X__crypt_des(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var p, retval, test_hash, test_key, test_setting, v1 uintptr + var _ /* test_buf at bp+0 */ [21]uint8 + _, _, _, _, _, _ = p, retval, test_hash, test_key, test_setting, v1 + test_key = __ccgo_ts + 72 + test_setting = __ccgo_ts + 93 + test_hash = __ccgo_ts + 103 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('_') { + test_setting = __ccgo_ts + 124 + test_hash = __ccgo_ts + 127 + } + /* + * Hash the supplied password. + */ + retval = __crypt_extended_r_uut(tls, key, setting, output) + /* + * Perform a quick self-test. It is important that we make both calls + * to _crypt_extended_r_uut() from the same scope such that they likely + * use the same stack locations, which makes the second call overwrite + * the first call's sensitive data on the stack and makes it more + * likely that any alignment related issues would be detected. + */ + p = __crypt_extended_r_uut(tls, test_key, test_setting, bp) + if p != 0 && !(Xstrcmp(tls, p, test_hash) != 0) && retval != 0 { + return retval + } + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('*') { + v1 = __ccgo_ts + 141 + } else { + v1 = __ccgo_ts + 70 + } + return v1 +} + +const KEY_MAX = 30000 +const SALT_MAX = 8 + +/* public domain md5 implementation based on rfc1321 and libtomcrypt */ + +type Tmd5 = struct { + Flen1 Tuint64_t + Fh [4]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _rol(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n<>(Int32FromInt32(32)-k) +} + +var _tab = [64]Tuint32_t{ + 0: uint32(0xd76aa478), + 1: uint32(0xe8c7b756), + 2: uint32(0x242070db), + 3: uint32(0xc1bdceee), + 4: uint32(0xf57c0faf), + 5: uint32(0x4787c62a), + 6: uint32(0xa8304613), + 7: uint32(0xfd469501), + 8: uint32(0x698098d8), + 9: uint32(0x8b44f7af), + 10: uint32(0xffff5bb1), + 11: uint32(0x895cd7be), + 12: uint32(0x6b901122), + 13: uint32(0xfd987193), + 14: uint32(0xa679438e), + 15: uint32(0x49b40821), + 16: uint32(0xf61e2562), + 17: uint32(0xc040b340), + 18: uint32(0x265e5a51), + 19: uint32(0xe9b6c7aa), + 20: uint32(0xd62f105d), + 21: uint32(0x02441453), + 22: uint32(0xd8a1e681), + 23: uint32(0xe7d3fbc8), + 24: uint32(0x21e1cde6), + 25: uint32(0xc33707d6), + 26: uint32(0xf4d50d87), + 27: uint32(0x455a14ed), + 28: uint32(0xa9e3e905), + 29: uint32(0xfcefa3f8), + 30: uint32(0x676f02d9), + 31: uint32(0x8d2a4c8a), + 32: uint32(0xfffa3942), + 33: uint32(0x8771f681), + 34: uint32(0x6d9d6122), + 35: uint32(0xfde5380c), + 36: uint32(0xa4beea44), + 37: uint32(0x4bdecfa9), + 38: uint32(0xf6bb4b60), + 39: uint32(0xbebfbc70), + 40: uint32(0x289b7ec6), + 41: uint32(0xeaa127fa), + 42: uint32(0xd4ef3085), + 43: uint32(0x04881d05), + 44: uint32(0xd9d4d039), + 45: uint32(0xe6db99e5), + 46: uint32(0x1fa27cf8), + 47: uint32(0xc4ac5665), + 48: uint32(0xf4292244), + 49: uint32(0x432aff97), + 50: uint32(0xab9423a7), + 51: uint32(0xfc93a039), + 52: uint32(0x655b59c3), + 53: uint32(0x8f0ccc92), + 54: uint32(0xffeff47d), + 55: uint32(0x85845dd1), + 56: uint32(0x6fa87e4f), + 57: uint32(0xfe2ce6e0), + 58: uint32(0xa3014314), + 59: uint32(0x4e0811a1), + 60: uint32(0xf7537e82), + 61: uint32(0xbd3af235), + 62: uint32(0x2ad7d2bb), + 63: uint32(0xeb86d391), +} + +func _processblock(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, b, c, d, i Tuint32_t + var _ /* W at bp+0 */ [16]Tuint32_t + _, _, _, _, _ = a, b, c, d, i + i = uint32(0) + for { + if !(i < uint32(16)) { + break + } + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i)))) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(1))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(2))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(3))))) << int32(24) + goto _1 + _1: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + i = uint32(0) + for i < uint32(16) { + a += d ^ b&(c^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + a = _rol(tls, a, int32(7)) + b + i++ + d += c ^ a&(b^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + d = _rol(tls, d, int32(12)) + a + i++ + c += b ^ d&(a^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + c = _rol(tls, c, int32(17)) + d + i++ + b += a ^ c&(d^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + b = _rol(tls, b, int32(22)) + c + i++ + } + for i < uint32(32) { + a += c ^ d&(c^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(5)) + b + i++ + d += b ^ c&(b^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(9)) + a + i++ + c += a ^ b&(a^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(14)) + d + i++ + b += d ^ a&(d^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(20)) + c + i++ + } + for i < uint32(48) { + a += b ^ c ^ d + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(4)) + b + i++ + d += a ^ b ^ c + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(11)) + a + i++ + c += d ^ a ^ b + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(16)) + d + i++ + b += c ^ d ^ a + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(23)) + c + i++ + } + for i < uint32(64) { + a += c ^ (b | ^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(6)) + b + i++ + d += b ^ (a | ^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(10)) + a + i++ + c += a ^ (d | ^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(15)) + d + i++ + b += d ^ (c | ^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(21)) + c + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d +} + +func _pad(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 24 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock(tls, s, s+24) + } + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 56)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 57)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 58)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 59)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 60)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 61)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 62)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 63)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(56)) + _processblock(tls, s, s+24) +} + +func _md5_init(tls *TLS, s uintptr) { + (*Tmd5)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x67452301) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xefcdab89) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x98badcfe) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0x10325476) +} + +func _md5_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad(tls, s) + i = 0 + for { + if !(i < int32(4)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + goto _1 + _1: + ; + i++ + } +} + +func _md5_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+24+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+24+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock(tls, s, s+24) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+24, p, len1) +} + +/*- + * Copyright (c) 2003 Poul-Henning Kamp + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* key limit is not part of the original design, added for DoS protection */ + +var _b64 = [65]uint8{'.', '/', '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', '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'} + +func _to64(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b64[u%uint32(64)] + u /= uint32(64) + } + return s +} + +func _md5crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(112) + defer tls.Free(112) + var i, klen, slen uint32 + var p, salt, v5 uintptr + var _ /* ctx at bp+0 */ Tmd5 + var _ /* md at bp+88 */ [16]uint8 + _, _, _, _, _, _ = i, klen, p, salt, slen, v5 + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX) { + return uintptr(0) + } + /* setting: $1$salt$ (closing $ is optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+143, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + i = uint32(0) + for { + if !(i < uint32(SALT_MAX) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + goto _1 + _1: + ; + i++ + } + slen = i + /* md5(key salt key) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, salt, uint64(slen)) + _md5_update(tls, bp, key, uint64(klen)) + _md5_sum(tls, bp, bp+88) + /* md5(key $1$ salt repeated-md weird-key[0]-0) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, setting, uint64(uint32(3)+slen)) + i = klen + for { + if !(uint64(i) > uint64(16)) { + break + } + _md5_update(tls, bp, bp+88, uint64(16)) + goto _2 + _2: + ; + i = uint32(uint64(i) - Uint64FromInt64(16)) + } + _md5_update(tls, bp, bp+88, uint64(i)) + (*(*[16]uint8)(unsafe.Pointer(bp + 88)))[0] = uint8(0) + i = klen + for { + if !(i != 0) { + break + } + if i&uint32(1) != 0 { + _md5_update(tls, bp, bp+88, uint64(1)) + } else { + _md5_update(tls, bp, key, uint64(1)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _md5_sum(tls, bp, bp+88) + /* md = f(md, key, salt) iteration */ + i = uint32(0) + for { + if !(i < uint32(1000)) { + break + } + _md5_init(tls, bp) + if i%uint32(2) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } else { + _md5_update(tls, bp, bp+88, uint64(16)) + } + if i%uint32(3) != 0 { + _md5_update(tls, bp, salt, uint64(slen)) + } + if i%uint32(7) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } + if i%uint32(2) != 0 { + _md5_update(tls, bp, bp+88, uint64(16)) + } else { + _md5_update(tls, bp, key, uint64(klen)) + } + _md5_sum(tls, bp, bp+88) + goto _4 + _4: + ; + i++ + } + /* output is $1$salt$hash */ + Xmemcpy(tls, output, setting, uint64(uint32(3)+slen)) + p = output + uintptr(3) + uintptr(slen) + v5 = p + p++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('$') + i = uint32(0) + for { + if !(i < uint32(5)) { + break + } + p = _to64(tls, p, uint32(int32((*(*[16]uint8)(unsafe.Pointer(bp + 88)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var p, q uintptr + var _ /* testbuf at bp+0 */ [64]uint8 + _, _ = p, q + p = _md5crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _md5crypt(tls, uintptr(unsafe.Pointer(&_testkey)), uintptr(unsafe.Pointer(&_testsetting)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash)), uint64(35)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting = [13]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$'} + +var _testhash = [35]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$', '9', 'Q', 'c', 'g', '8', 'D', 'y', 'v', 'i', 'e', 'k', 'V', '3', 't', 'D', 'G', 'M', 'Z', 'y', 'n', 'J', '1'} + +func X__crypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + var output uintptr + _ = output + /* Per the crypt_r API, the caller has provided a pointer to + * struct crypt_data; however, this implementation does not + * use the structure to store any internal state, and treats + * it purely as a char buffer for storing the result. */ + output = data + if int32(*(*uint8)(unsafe.Pointer(salt))) == int32('$') && *(*uint8)(unsafe.Pointer(salt + 1)) != 0 && *(*uint8)(unsafe.Pointer(salt + 2)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('1') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_md5(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('2') && int32(*(*uint8)(unsafe.Pointer(salt + 3))) == int32('$') { + return X__crypt_blowfish(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('5') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha256(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('6') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha512(tls, key, salt, output) + } + } + return X__crypt_des(tls, key, salt, output) +} + +func Xcrypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, data) +} + +const KEY_MAX1 = 256 +const ROUNDS_DEFAULT = 5000 +const ROUNDS_MAX = 9999999 +const ROUNDS_MIN = 1000 +const SALT_MAX1 = 16 + +/* public domain sha256 implementation based on fips180-3 */ + +type Tsha256 = struct { + Flen1 Tuint64_t + Fh [8]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _ror(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n>>k | n<<(Int32FromInt32(32)-k) +} + +var _K = [64]Tuint32_t{ + 0: uint32(0x428a2f98), + 1: uint32(0x71374491), + 2: uint32(0xb5c0fbcf), + 3: uint32(0xe9b5dba5), + 4: uint32(0x3956c25b), + 5: uint32(0x59f111f1), + 6: uint32(0x923f82a4), + 7: uint32(0xab1c5ed5), + 8: uint32(0xd807aa98), + 9: uint32(0x12835b01), + 10: uint32(0x243185be), + 11: uint32(0x550c7dc3), + 12: uint32(0x72be5d74), + 13: uint32(0x80deb1fe), + 14: uint32(0x9bdc06a7), + 15: uint32(0xc19bf174), + 16: uint32(0xe49b69c1), + 17: uint32(0xefbe4786), + 18: uint32(0x0fc19dc6), + 19: uint32(0x240ca1cc), + 20: uint32(0x2de92c6f), + 21: uint32(0x4a7484aa), + 22: uint32(0x5cb0a9dc), + 23: uint32(0x76f988da), + 24: uint32(0x983e5152), + 25: uint32(0xa831c66d), + 26: uint32(0xb00327c8), + 27: uint32(0xbf597fc7), + 28: uint32(0xc6e00bf3), + 29: uint32(0xd5a79147), + 30: uint32(0x06ca6351), + 31: uint32(0x14292967), + 32: uint32(0x27b70a85), + 33: uint32(0x2e1b2138), + 34: uint32(0x4d2c6dfc), + 35: uint32(0x53380d13), + 36: uint32(0x650a7354), + 37: uint32(0x766a0abb), + 38: uint32(0x81c2c92e), + 39: uint32(0x92722c85), + 40: uint32(0xa2bfe8a1), + 41: uint32(0xa81a664b), + 42: uint32(0xc24b8b70), + 43: uint32(0xc76c51a3), + 44: uint32(0xd192e819), + 45: uint32(0xd6990624), + 46: uint32(0xf40e3585), + 47: uint32(0x106aa070), + 48: uint32(0x19a4c116), + 49: uint32(0x1e376c08), + 50: uint32(0x2748774c), + 51: uint32(0x34b0bcb5), + 52: uint32(0x391c0cb3), + 53: uint32(0x4ed8aa4a), + 54: uint32(0x5b9cca4f), + 55: uint32(0x682e6ff3), + 56: uint32(0x748f82ee), + 57: uint32(0x78a5636f), + 58: uint32(0x84c87814), + 59: uint32(0x8cc70208), + 60: uint32(0x90befffa), + 61: uint32(0xa4506ceb), + 62: uint32(0xbef9a3f7), + 63: uint32(0xc67178f2), +} + +func _processblock1(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var a, b, c, d, e, f, g, h, t1, t2 Tuint32_t + var i int32 + var _ /* W at bp+0 */ [64]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i)))) << int32(24) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(1))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(2))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(3))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(64)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(17)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(10) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(7)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(18)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(3)) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + e = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) + f = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) + g = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) + h = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) + i = 0 + for { + if !(i < int32(64)) { + break + } + t1 = h + (_ror(tls, e, int32(6)) ^ _ror(tls, e, int32(11)) ^ _ror(tls, e, int32(25))) + (g ^ e&(f^g)) + _K[i] + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] + t2 = _ror(tls, a, int32(2)) ^ _ror(tls, a, int32(13)) ^ _ror(tls, a, int32(22)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) += e + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) += f + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) += g + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) += h +} + +func _pad1(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 40 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock1(tls, s, s+40) + } + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 56)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 57)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 58)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 59)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 60)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 61)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 62)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 63)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1) + _processblock1(tls, s, s+40) +} + +func _sha256_init(tls *TLS, s uintptr) { + (*Tsha256)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x6a09e667) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xbb67ae85) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x3c6ef372) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0xa54ff53a) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) = uint32(0x510e527f) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) = uint32(0x9b05688c) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) = uint32(0x1f83d9ab) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) = uint32(0x5be0cd19) +} + +func _sha256_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad1(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + goto _1 + _1: + ; + i++ + } +} + +func _sha256_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+40+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+40+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock1(tls, s, s+40) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock1(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+40, p, len1) +} + +var _b641 = [65]uint8{'.', '/', '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', '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'} + +func _to641(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b641[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(32)) { + break + } + _sha256_update(tls, s, md, uint64(32)) + goto _1 + _1: + ; + i -= uint32(32) + } + _sha256_update(tls, s, md, uint64(i)) +} + +func _sha256crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(272) + defer tls.Free(272) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha256 + var _ /* end at bp+224 */ uintptr + var _ /* kmd at bp+136 */ [32]uint8 + var _ /* md at bp+104 */ [32]uint8 + var _ /* rounds at bp+200 */ [20]uint8 + var _ /* smd at bp+168 */ [32]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 200)) = [20]uint8{} + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX1)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX1) { + return uintptr(0) + } + /* setting: $5$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+147, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+224, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 224))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 224)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+200, __ccgo_ts+159, VaList(bp+240, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _1 + _1: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_sum(tls, bp, bp+104) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _hashmd(tls, bp, klen, bp+104) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _sha256_update(tls, bp, key, uint64(klen)) + } + goto _2 + _2: + ; + i >>= uint32(1) + } + _sha256_sum(tls, bp, bp+104) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha256_update(tls, bp, key, uint64(klen)) + goto _3 + _3: + ; + i++ + } + _sha256_sum(tls, bp, bp+136) + /* DS = sha(repeat-salt) */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[0]))) { + break + } + _sha256_update(tls, bp, salt, uint64(slen)) + goto _4 + _4: + ; + i++ + } + _sha256_sum(tls, bp, bp+168) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha256_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd(tls, bp, klen, bp+136) + } else { + _sha256_update(tls, bp, bp+104, uint64(32)) + } + if i%uint32(3) != 0 { + _sha256_update(tls, bp, bp+168, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd(tls, bp, klen, bp+136) + } + if i%uint32(2) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _hashmd(tls, bp, klen, bp+136) + } + _sha256_sum(tls, bp, bp+104) + goto _5 + _5: + ; + i++ + } + /* output is $5$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+170, VaList(bp+240, bp+200, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(10)) { + break + } + p = _to641(tls, p, uint32(int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm1)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha256crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha256crypt(tls, uintptr(unsafe.Pointer(&_testkey1)), uintptr(unsafe.Pointer(&_testsetting1)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash1)), uint64(73)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey1 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting1 = [30]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash1 = [73]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '3', 'V', 'f', 'D', 'j', 'P', 't', '0', '5', 'V', 'H', 'F', 'n', '4', '7', 'C', '/', 'o', 'j', 'F', 'Z', '6', 'K', 'R', 'P', 'Y', 'r', 'O', 'j', 'j', '1', 'l', 'L', 'b', 'H', '.', 'd', 'k', 'F', '3', 'b', 'Z', '6'} + +/* public domain sha512 implementation based on fips180-3 */ +/* >=2^64 bits messages are not supported (about 2000 peta bytes) */ + +type Tsha512 = struct { + Flen1 Tuint64_t + Fh [8]Tuint64_t + Fbuf [128]Tuint8_t +} + +func _ror1(tls *TLS, n Tuint64_t, k int32) (r Tuint64_t) { + return n>>k | n<<(Int32FromInt32(64)-k) +} + +var _K1 = [80]Tuint64_t{ + 0: uint64(0x428a2f98d728ae22), + 1: uint64(0x7137449123ef65cd), + 2: uint64(0xb5c0fbcfec4d3b2f), + 3: uint64(0xe9b5dba58189dbbc), + 4: uint64(0x3956c25bf348b538), + 5: uint64(0x59f111f1b605d019), + 6: uint64(0x923f82a4af194f9b), + 7: uint64(0xab1c5ed5da6d8118), + 8: uint64(0xd807aa98a3030242), + 9: uint64(0x12835b0145706fbe), + 10: uint64(0x243185be4ee4b28c), + 11: uint64(0x550c7dc3d5ffb4e2), + 12: uint64(0x72be5d74f27b896f), + 13: uint64(0x80deb1fe3b1696b1), + 14: uint64(0x9bdc06a725c71235), + 15: uint64(0xc19bf174cf692694), + 16: uint64(0xe49b69c19ef14ad2), + 17: uint64(0xefbe4786384f25e3), + 18: uint64(0x0fc19dc68b8cd5b5), + 19: uint64(0x240ca1cc77ac9c65), + 20: uint64(0x2de92c6f592b0275), + 21: uint64(0x4a7484aa6ea6e483), + 22: uint64(0x5cb0a9dcbd41fbd4), + 23: uint64(0x76f988da831153b5), + 24: uint64(0x983e5152ee66dfab), + 25: uint64(0xa831c66d2db43210), + 26: uint64(0xb00327c898fb213f), + 27: uint64(0xbf597fc7beef0ee4), + 28: uint64(0xc6e00bf33da88fc2), + 29: uint64(0xd5a79147930aa725), + 30: uint64(0x06ca6351e003826f), + 31: uint64(0x142929670a0e6e70), + 32: uint64(0x27b70a8546d22ffc), + 33: uint64(0x2e1b21385c26c926), + 34: uint64(0x4d2c6dfc5ac42aed), + 35: uint64(0x53380d139d95b3df), + 36: uint64(0x650a73548baf63de), + 37: uint64(0x766a0abb3c77b2a8), + 38: uint64(0x81c2c92e47edaee6), + 39: uint64(0x92722c851482353b), + 40: uint64(0xa2bfe8a14cf10364), + 41: uint64(0xa81a664bbc423001), + 42: uint64(0xc24b8b70d0f89791), + 43: uint64(0xc76c51a30654be30), + 44: uint64(0xd192e819d6ef5218), + 45: uint64(0xd69906245565a910), + 46: uint64(0xf40e35855771202a), + 47: uint64(0x106aa07032bbd1b8), + 48: uint64(0x19a4c116b8d2d0c8), + 49: uint64(0x1e376c085141ab53), + 50: uint64(0x2748774cdf8eeb99), + 51: uint64(0x34b0bcb5e19b48a8), + 52: uint64(0x391c0cb3c5c95a63), + 53: uint64(0x4ed8aa4ae3418acb), + 54: uint64(0x5b9cca4f7763e373), + 55: uint64(0x682e6ff3d6b2b8a3), + 56: uint64(0x748f82ee5defb2fc), + 57: uint64(0x78a5636f43172f60), + 58: uint64(0x84c87814a1f0ab72), + 59: uint64(0x8cc702081a6439ec), + 60: uint64(0x90befffa23631e28), + 61: uint64(0xa4506cebde82bde9), + 62: uint64(0xbef9a3f7b2c67915), + 63: uint64(0xc67178f2e372532b), + 64: uint64(0xca273eceea26619c), + 65: uint64(0xd186b8c721c0c207), + 66: uint64(0xeada7dd6cde0eb1e), + 67: uint64(0xf57d4f7fee6ed178), + 68: uint64(0x06f067aa72176fba), + 69: uint64(0x0a637dc5a2c898a6), + 70: uint64(0x113f9804bef90dae), + 71: uint64(0x1b710b35131c471b), + 72: uint64(0x28db77f523047d84), + 73: uint64(0x32caab7b40c72493), + 74: uint64(0x3c9ebe0a15c9bebc), + 75: uint64(0x431d67c49c100d4c), + 76: uint64(0x4cc5d4becb3e42b6), + 77: uint64(0x597f299cfc657e2a), + 78: uint64(0x5fcb6fab3ad6faec), + 79: uint64(0x6c44198c4a475817), +} + +func _processblock2(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(640) + defer tls.Free(640) + var a, b, c, d, e, f, g, h, t1, t2 Tuint64_t + var i int32 + var _ /* W at bp+0 */ [80]Tuint64_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i)))) << int32(56) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(1))))) << int32(48) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(2))))) << int32(40) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(3))))) << int32(32) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(4))))) << int32(24) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(5))))) << int32(16) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(6))))) << int32(8) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(7))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(80)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(61)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(6) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(1)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(8)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(7)) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint64_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) + c = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) + d = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) + e = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) + f = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) + g = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) + h = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) + i = 0 + for { + if !(i < int32(80)) { + break + } + t1 = h + (_ror1(tls, e, int32(14)) ^ _ror1(tls, e, int32(18)) ^ _ror1(tls, e, int32(41))) + (g ^ e&(f^g)) + _K1[i] + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] + t2 = _ror1(tls, a, int32(28)) ^ _ror1(tls, a, int32(34)) ^ _ror1(tls, a, int32(39)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint64_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) += b + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) += c + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) += d + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) += e + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) += f + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) += g + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) += h +} + +func _pad2(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 72 + uintptr(v1))) = uint8(0x80) + if r > uint32(112) { + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(128)-r)) + r = uint32(0) + _processblock2(tls, s, s+72) + } + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(120)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 120)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 121)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 122)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 123)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 124)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 125)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 126)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 127)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1) + _processblock2(tls, s, s+72) +} + +func _sha512_init(tls *TLS, s uintptr) { + (*Tsha512)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint64_t)(unsafe.Pointer(s + 8)) = uint64(0x6a09e667f3bcc908) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) = uint64(0xbb67ae8584caa73b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) = uint64(0x3c6ef372fe94f82b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) = uint64(0xa54ff53a5f1d36f1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) = uint64(0x510e527fade682d1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) = uint64(0x9b05688c2b3e6c1f) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) = uint64(0x1f83d9abfb41bd6b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) = uint64(0x5be0cd19137e2179) +} + +func _sha512_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad2(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(1)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(2)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(3)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(4)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(5)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(6)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(7)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8))) + goto _1 + _1: + ; + i++ + } +} + +func _sha512_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(128)-r) { + Xmemcpy(tls, s+72+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+72+uintptr(r), p, uint64(uint32(128)-r)) + len1 -= uint64(uint32(128) - r) + p += uintptr(uint32(128) - r) + _processblock2(tls, s, s+72) + } + for { + if !(len1 >= uint64(128)) { + break + } + _processblock2(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(128) + p += uintptr(128) + } + Xmemcpy(tls, s+72, p, len1) +} + +var _b642 = [65]uint8{'.', '/', '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', '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'} + +func _to642(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b642[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd1(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(64)) { + break + } + _sha512_update(tls, s, md, uint64(64)) + goto _1 + _1: + ; + i -= uint32(64) + } + _sha512_update(tls, s, md, uint64(i)) +} + +func _sha512crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(464) + defer tls.Free(464) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha512 + var _ /* end at bp+416 */ uintptr + var _ /* kmd at bp+264 */ [64]uint8 + var _ /* md at bp+200 */ [64]uint8 + var _ /* rounds at bp+392 */ [20]uint8 + var _ /* smd at bp+328 */ [64]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 392)) = [20]uint8{} + /* reject large keys */ + i = uint32(0) + for { + if !(i <= uint32(KEY_MAX1) && *(*uint8)(unsafe.Pointer(key + uintptr(i))) != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i > uint32(KEY_MAX1) { + return uintptr(0) + } + klen = i + /* setting: $6$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+181, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+416, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 416))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 416)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+392, __ccgo_ts+159, VaList(bp+432, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _2 + _2: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_sum(tls, bp, bp+200) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _hashmd1(tls, bp, klen, bp+200) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _sha512_update(tls, bp, key, uint64(klen)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _sha512_sum(tls, bp, bp+200) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha512_update(tls, bp, key, uint64(klen)) + goto _4 + _4: + ; + i++ + } + _sha512_sum(tls, bp, bp+264) + /* DS = sha(repeat-salt) */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[0]))) { + break + } + _sha512_update(tls, bp, salt, uint64(slen)) + goto _5 + _5: + ; + i++ + } + _sha512_sum(tls, bp, bp+328) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha512_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } else { + _sha512_update(tls, bp, bp+200, uint64(64)) + } + if i%uint32(3) != 0 { + _sha512_update(tls, bp, bp+328, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } + if i%uint32(2) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _hashmd1(tls, bp, klen, bp+264) + } + _sha512_sum(tls, bp, bp+200) + goto _6 + _6: + ; + i++ + } + /* output is $6$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+185, VaList(bp+432, bp+392, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(21)) { + break + } + p = _to642(tls, p, uint32(int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm2)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha512crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha512crypt(tls, uintptr(unsafe.Pointer(&_testkey2)), uintptr(unsafe.Pointer(&_testsetting2)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash2)), uint64(116)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey2 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting2 = [30]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash2 = [116]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', 'B', 'C', 'p', 't', '8', 'z', 'L', 'r', 'c', '/', 'R', 'c', 'y', 'u', 'X', 'm', 'C', 'D', 'O', 'E', '1', 'A', 'L', 'q', 'M', 'X', 'B', '2', 'M', 'H', '6', 'n', '1', 'g', '8', '9', '1', 'H', 'h', 'F', 'j', '8', '.', 'w', '7', 'L', 'x', 'G', 'v', '.', 'F', 'T', 'k', 'q', 'q', '6', 'V', 'x', 'c', '/', 'k', 'm', '3', 'Y', '0', 'j', 'E', '0', 'j', '2', '4', 'j', 'Y', '5', 'P', 'I', 'v', '/', 'o', 'O', 'u', '6', 'r', 'e', 'g', '1'} + +var ___encrypt_key Texpanded_key + +func Xsetkey(tls *TLS, key uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v, (%v:)", tls, key, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, j int32 + var p3 uintptr + var _ /* bkey at bp+0 */ [8]uint8 + _, _, _ = i, j, p3 + i = 0 + for { + if !(i < int32(8)) { + break + } + (*(*[8]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + j = int32(7) + for { + if !(j >= 0) { + break + } + p3 = bp + uintptr(i) + *(*uint8)(unsafe.Pointer(p3)) = uint8(uint32(*(*uint8)(unsafe.Pointer(p3))) | uint32(int32(*(*uint8)(unsafe.Pointer(key)))&Int32FromInt32(1))<= 0) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + 128 + uintptr(i)*4)) |= uint32(int32(*(*uint8)(unsafe.Pointer(p)))&Int32FromInt32(1)) << j + goto _2 + _2: + ; + j-- + p++ + } + goto _1 + _1: + ; + i++ + } + key = uintptr(unsafe.Pointer(&___encrypt_key)) + if edflag != 0 { + key = bp + i = 0 + for { + if !(i < int32(16)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + uintptr(int32(15)-i)*4)) + *(*Tuint32_t)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + 64 + uintptr(int32(15)-i)*4)) + goto _3 + _3: + ; + i++ + } + } + X__do_des(tls, (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[0], (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[int32(1)], bp+128, bp+128+uintptr(1)*4, uint32(1), uint32(0), key) + p = block + i = 0 + for { + if !(i < int32(2)) { + break + } + j = int32(31) + for { + if !(j >= 0) { + break + } + v6 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = uint8((*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[i] >> j & uint32(1)) + goto _5 + _5: + ; + j-- + } + goto _4 + _4: + ; + i++ + } +} + +var _table = [384]uint16{ + 128: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 129: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 130: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 131: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 132: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 133: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 134: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 135: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 136: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 137: uint16((Int32FromInt32(0x320)/Int32FromInt32(256) | Int32FromInt32(0x320)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 138: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 139: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 140: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 141: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 142: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 143: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 144: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 145: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 146: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 147: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 148: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 149: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 150: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 151: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 152: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 153: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 154: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 155: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 156: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 157: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 158: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 159: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 160: uint16((Int32FromInt32(0x160)/Int32FromInt32(256) | Int32FromInt32(0x160)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 161: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 162: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 163: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 164: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 165: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 166: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 167: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 168: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 169: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 170: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 171: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 172: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 173: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 174: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 175: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 176: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 177: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 178: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 179: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 180: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 181: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 182: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 183: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 184: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 185: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 186: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 187: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 188: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 189: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 190: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 191: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 192: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 193: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 194: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 195: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 196: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 197: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 198: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 199: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 200: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 201: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 202: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 203: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 204: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 205: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 206: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 207: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 208: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 209: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 210: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 211: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 212: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 213: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 214: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 215: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 216: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 217: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 218: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 219: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 220: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 221: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 222: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 223: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 224: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 225: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 226: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 227: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 228: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 229: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 230: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 231: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 232: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 233: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 234: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 235: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 236: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 237: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 238: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 239: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 240: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 241: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 242: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 243: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 244: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 245: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 246: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 247: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 248: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 249: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 250: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 251: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 252: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 253: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 254: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 255: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), +} + +var _ptable = uintptr(unsafe.Pointer(&_table)) + uintptr(128)*2 + +func X__ctype_b_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable)) +} + +const CLOCKS_PER_SEC = 1000000 +const CLOCK_BOOTTIME = 7 +const CLOCK_BOOTTIME_ALARM = 9 +const CLOCK_MONOTONIC = 1 +const CLOCK_MONOTONIC_COARSE = 6 +const CLOCK_MONOTONIC_RAW = 4 +const CLOCK_PROCESS_CPUTIME_ID = 2 +const CLOCK_REALTIME = 0 +const CLOCK_REALTIME_ALARM = 8 +const CLOCK_REALTIME_COARSE = 5 +const CLOCK_SGI_CYCLE = 10 +const CLOCK_TAI = 11 +const CLOCK_THREAD_CPUTIME_ID = 3 +const C_LOCALE = 0 +const DEFAULT_GUARD_MAX = 1048576 +const DEFAULT_GUARD_SIZE = 8192 +const DEFAULT_STACK_MAX = 8388608 +const DEFAULT_STACK_SIZE = 131072 +const DTP_OFFSET = 32768 +const FUTEX_CLOCK_REALTIME = 256 +const FUTEX_CMP_REQUEUE = 4 +const FUTEX_FD = 2 +const FUTEX_LOCK_PI = 6 +const FUTEX_PRIVATE = 128 +const FUTEX_REQUEUE = 3 +const FUTEX_TRYLOCK_PI = 8 +const FUTEX_UNLOCK_PI = 7 +const FUTEX_WAIT = 0 +const FUTEX_WAIT_BITSET = 9 +const FUTEX_WAKE = 1 +const FUTEX_WAKE_OP = 5 +const GAP_ABOVE_TP = 0 +const LC_ALL = 6 +const LC_ALL_MASK = 2147483647 +const LC_COLLATE = 3 +const LC_COLLATE_MASK = 8 +const LC_CTYPE = 0 +const LC_CTYPE_MASK = 1 +const LC_GLOBAL_LOCALE = -1 +const LC_MESSAGES = 5 +const LC_MESSAGES_MASK = 32 +const LC_MONETARY = 4 +const LC_MONETARY_MASK = 16 +const LC_NUMERIC = 1 +const LC_NUMERIC_MASK = 2 +const LC_TIME = 2 +const LC_TIME_MASK = 4 +const LOCALE_NAME_MAX = 23 +const MAP_ANON = 32 +const MAP_ANONYMOUS = 32 +const MAP_DENYWRITE = 2048 +const MAP_EXECUTABLE = 4096 +const MAP_FAILED = -1 +const MAP_FILE = 0 +const MAP_FIXED = 16 +const MAP_FIXED_NOREPLACE = 1048576 +const MAP_GROWSDOWN = 256 +const MAP_HUGETLB = 262144 +const MAP_HUGE_16GB = 2281701376 +const MAP_HUGE_16KB = 939524096 +const MAP_HUGE_16MB = 1610612736 +const MAP_HUGE_1GB = 2013265920 +const MAP_HUGE_1MB = 1342177280 +const MAP_HUGE_256MB = 1879048192 +const MAP_HUGE_2GB = 2080374784 +const MAP_HUGE_2MB = 1409286144 +const MAP_HUGE_32MB = 1677721600 +const MAP_HUGE_512KB = 1275068416 +const MAP_HUGE_512MB = 1946157056 +const MAP_HUGE_64KB = 1073741824 +const MAP_HUGE_8MB = 1543503872 +const MAP_HUGE_MASK = 63 +const MAP_HUGE_SHIFT = 26 +const MAP_NONBLOCK = 65536 +const MAP_POPULATE = 32768 +const MAP_PRIVATE = 2 +const MAP_SHARED = 1 +const MAP_SHARED_VALIDATE = 3 +const MAP_STACK = 131072 +const MAP_SYNC = 524288 +const MAP_TYPE = 15 +const MS_ASYNC = 1 +const MS_INVALIDATE = 2 +const MS_SYNC = 4 +const POSIX_MADV_DONTNEED = 4 +const POSIX_MADV_NORMAL = 0 +const POSIX_MADV_RANDOM = 1 +const POSIX_MADV_SEQUENTIAL = 2 +const POSIX_MADV_WILLNEED = 3 +const PROT_EXEC = 4 +const PROT_GROWSDOWN = 16777216 +const PROT_GROWSUP = 33554432 +const PROT_NONE = 0 +const PROT_READ = 1 +const PROT_SAO = 16 +const PROT_WRITE = 2 +const PTHREAD_BARRIER_SERIAL_THREAD = -1 +const PTHREAD_CANCELED = -1 +const PTHREAD_CANCEL_ASYNCHRONOUS = 1 +const PTHREAD_CANCEL_DEFERRED = 0 +const PTHREAD_CANCEL_DISABLE = 1 +const PTHREAD_CANCEL_ENABLE = 0 +const PTHREAD_CANCEL_MASKED = 2 +const PTHREAD_CREATE_DETACHED = 1 +const PTHREAD_CREATE_JOINABLE = 0 +const PTHREAD_EXPLICIT_SCHED = 1 +const PTHREAD_INHERIT_SCHED = 0 +const PTHREAD_MUTEX_DEFAULT = 0 +const PTHREAD_MUTEX_ERRORCHECK = 2 +const PTHREAD_MUTEX_NORMAL = 0 +const PTHREAD_MUTEX_RECURSIVE = 1 +const PTHREAD_MUTEX_ROBUST = 1 +const PTHREAD_MUTEX_STALLED = 0 +const PTHREAD_ONCE_INIT = 0 +const PTHREAD_PRIO_INHERIT = 1 +const PTHREAD_PRIO_NONE = 0 +const PTHREAD_PRIO_PROTECT = 2 +const PTHREAD_PROCESS_PRIVATE = 0 +const PTHREAD_PROCESS_SHARED = 1 +const PTHREAD_SCOPE_PROCESS = 1 +const PTHREAD_SCOPE_SYSTEM = 0 +const SCHED_BATCH = 3 +const SCHED_DEADLINE = 6 +const SCHED_FIFO = 1 +const SCHED_IDLE = 5 +const SCHED_OTHER = 0 +const SCHED_RESET_ON_FORK = 1073741824 +const SCHED_RR = 2 +const SIGCANCEL = 33 +const SIGSYNCCALL = 34 +const SIGTIMER = 32 +const TIMER_ABSTIME = 1 +const TIME_UTC = 1 +const TP_OFFSET = 28672 +const UTF8_LOCALE = 0 +const __CCGO_SIZEOF_GO_MUTEX = 8 +const __SU = 0 +const a_pre_llsc = 0 +const a_spin = 0 +const pthread = 0 +const tls_mod_off_t = 0 + +type Tlconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits uint8 + Ffrac_digits uint8 + Fp_cs_precedes uint8 + Fp_sep_by_space uint8 + Fn_cs_precedes uint8 + Fn_sep_by_space uint8 + Fp_sign_posn uint8 + Fn_sign_posn uint8 + Fint_p_cs_precedes uint8 + Fint_p_sep_by_space uint8 + Fint_n_cs_precedes uint8 + Fint_n_sep_by_space uint8 + Fint_p_sign_posn uint8 + Fint_n_sign_posn uint8 +} + +type t__locale_map = struct { + Fmap1 uintptr + Fmap_size Tsize_t + Fname [24]uint8 + Fnext uintptr +} + +type Tclockid_t = int32 + +type t__pthread = struct { + Fself uintptr + Fprev uintptr + Fnext uintptr + Fsysinfo Tuintptr_t + Ftid int32 + Ferrno_val int32 + Fdetach_state int32 + Fcancel int32 + Fcanceldisable uint8 + Fcancelasync uint8 + F__ccgo50 uint8 + Fmap_base uintptr + Fmap_size Tsize_t + Fstack uintptr + Fstack_size Tsize_t + Fguard_size Tsize_t + Fresult uintptr + Fcancelbuf uintptr + Ftsd uintptr + Frobust_list struct { + Fhead uintptr + Foff int64 + Fpending uintptr + } + Fh_errno_val int32 + Ftimer_id int32 + Flocale Tlocale_t + Fkilllock [1]int32 + Fdlerror_buf uintptr + Fstdio_locks uintptr + F__ccgo_join_mutex [1]int64 + Fcanary Tuintptr_t + Fdtv uintptr +} + +type Tpthread_once_t = int32 + +type Tpthread_key_t = uint32 + +type Tpthread_spinlock_t = int32 + +type Tpthread_mutexattr_t = struct { + F__attr uint32 +} + +type Tpthread_condattr_t = struct { + F__attr uint32 +} + +type Tpthread_barrierattr_t = struct { + F__attr uint32 +} + +type Tpthread_rwlockattr_t = struct { + F__attr [2]uint32 +} + +type Tpthread_mutex_t = struct { + F__u struct { + F__vi [0][10]int32 + F__p [0][5]uintptr + F__i [10]int32 + } +} + +type Tpthread_cond_t = struct { + F__u struct { + F__vi [0][12]int32 + F__p [0][6]uintptr + F__i [12]int32 + } +} + +type Tpthread_rwlock_t = struct { + F__u struct { + F__vi [0][14]int32 + F__p [0][7]uintptr + F__i [14]int32 + } +} + +type Tpthread_barrier_t = struct { + F__u struct { + F__vi [0][8]int32 + F__p [0][4]uintptr + F__i [8]int32 + } +} + +type Tsched_param = struct { + Fsched_priority int32 + F__reserved1 int32 + F__reserved2 [2]struct { + F__reserved1 Ttime_t + F__reserved2 int64 + } + F__reserved3 int32 +} + +type Ttimer_t = uintptr + +type Ttm = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + F__tm_gmtoff int64 + F__tm_zone uintptr +} + +type Titimerspec = struct { + Fit_interval Ttimespec + Fit_value Ttimespec +} + +type t__ptcb = struct { + F__f uintptr + F__x uintptr + F__next uintptr +} + +type Tmode_t = uint32 + +const _DT_EXITED = 0 +const _DT_EXITING = 1 +const _DT_JOINABLE = 2 +const _DT_DETACHED = 3 + +func X__ctype_get_mb_cur_max(tls *TLS) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + return uint64(v1) +} + +var _table1 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('a'), + 194: int32('b'), + 195: int32('c'), + 196: int32('d'), + 197: int32('e'), + 198: int32('f'), + 199: int32('g'), + 200: int32('h'), + 201: int32('i'), + 202: int32('j'), + 203: int32('k'), + 204: int32('l'), + 205: int32('m'), + 206: int32('n'), + 207: int32('o'), + 208: int32('p'), + 209: int32('q'), + 210: int32('r'), + 211: int32('s'), + 212: int32('t'), + 213: int32('u'), + 214: int32('v'), + 215: int32('w'), + 216: int32('x'), + 217: int32('y'), + 218: int32('z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('a'), + 226: int32('b'), + 227: int32('c'), + 228: int32('d'), + 229: int32('e'), + 230: int32('f'), + 231: int32('g'), + 232: int32('h'), + 233: int32('i'), + 234: int32('j'), + 235: int32('k'), + 236: int32('l'), + 237: int32('m'), + 238: int32('n'), + 239: int32('o'), + 240: int32('p'), + 241: int32('q'), + 242: int32('r'), + 243: int32('s'), + 244: int32('t'), + 245: int32('u'), + 246: int32('v'), + 247: int32('w'), + 248: int32('x'), + 249: int32('y'), + 250: int32('z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 + +func X__ctype_tolower_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable1)) +} + +var _table2 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('A'), + 194: int32('B'), + 195: int32('C'), + 196: int32('D'), + 197: int32('E'), + 198: int32('F'), + 199: int32('G'), + 200: int32('H'), + 201: int32('I'), + 202: int32('J'), + 203: int32('K'), + 204: int32('L'), + 205: int32('M'), + 206: int32('N'), + 207: int32('O'), + 208: int32('P'), + 209: int32('Q'), + 210: int32('R'), + 211: int32('S'), + 212: int32('T'), + 213: int32('U'), + 214: int32('V'), + 215: int32('W'), + 216: int32('X'), + 217: int32('Y'), + 218: int32('Z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('A'), + 226: int32('B'), + 227: int32('C'), + 228: int32('D'), + 229: int32('E'), + 230: int32('F'), + 231: int32('G'), + 232: int32('H'), + 233: int32('I'), + 234: int32('J'), + 235: int32('K'), + 236: int32('L'), + 237: int32('M'), + 238: int32('N'), + 239: int32('O'), + 240: int32('P'), + 241: int32('Q'), + 242: int32('R'), + 243: int32('S'), + 244: int32('T'), + 245: int32('U'), + 246: int32('V'), + 247: int32('W'), + 248: int32('X'), + 249: int32('Y'), + 250: int32('Z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable2 = uintptr(unsafe.Pointer(&_table2)) + uintptr(128)*4 + +func X__ctype_toupper_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable2)) +} + +func Xisalnum(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) != 0 || BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0) +} + +func X__isalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalnum(tls, c) +} + +func Xisalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalnum_l(tls, c, l) +} + +func Xisalpha(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) +} + +func X__isalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalpha(tls, c) +} + +func Xisalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalpha_l(tls, c, l) +} + +func Xisascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(c & ^Int32FromInt32(0x7f) != 0)) +} + +func Xisblank(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || c == int32('\t')) +} + +func X__isblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, c) +} + +func Xisblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isblank_l(tls, c, l) +} + +func Xiscntrl(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c) < uint32(0x20) || c == int32(0x7f)) +} + +func X__iscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiscntrl(tls, c) +} + +func Xiscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iscntrl_l(tls, c, l) +} + +func Xisdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('0') < uint32(10)) +} + +func X__isdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisdigit(tls, c) +} + +func Xisdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isdigit_l(tls, c, l) +} + +func Xisgraph(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) +} + +func X__isgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisgraph(tls, c) +} + +func Xisgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isgraph_l(tls, c, l) +} + +func Xislower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('a') < uint32(26)) +} + +func X__islower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xislower(tls, c) +} + +func Xislower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__islower_l(tls, c, l) +} + +func Xisprint(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x20) < uint32(0x5f)) +} + +func X__isprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisprint(tls, c) +} + +func Xisprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isprint_l(tls, c, l) +} + +func Xispunct(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) != 0 && !(Xisalnum(tls, c) != 0)) +} + +func X__ispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xispunct(tls, c) +} + +func Xispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ispunct_l(tls, c, l) +} + +func Xisspace(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || uint32(c)-uint32('\t') < uint32(5)) +} + +func X__isspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisspace(tls, c) +} + +func Xisspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isspace_l(tls, c, l) +} + +func Xisupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('A') < uint32(26)) +} + +func X__isupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisupper(tls, c) +} + +func Xisupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isupper_l(tls, c, l) +} + +type Twint_t = uint32 + +type Twctype_t = uint64 + +type Twctrans_t = uintptr + +func Xiswalnum(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(wc-uint32('0') < uint32(10)) != 0 || Xiswalpha(tls, wc) != 0) +} + +func X__iswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalnum(tls, c) +} + +func Xiswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalnum_l(tls, c, l) +} + +var _table3 = [3904]uint8{ + 0: uint8(18), + 1: uint8(17), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(17), + 18: uint8(34), + 19: uint8(35), + 20: uint8(36), + 21: uint8(17), + 22: uint8(37), + 23: uint8(38), + 24: uint8(39), + 25: uint8(40), + 26: uint8(41), + 27: uint8(42), + 28: uint8(43), + 29: uint8(44), + 30: uint8(17), + 31: uint8(45), + 32: uint8(46), + 33: uint8(47), + 34: uint8(16), + 35: uint8(16), + 36: uint8(48), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(16), + 48: uint8(52), + 49: uint8(53), + 50: uint8(16), + 51: uint8(16), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(54), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(55), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(56), + 165: uint8(17), + 166: uint8(57), + 167: uint8(58), + 168: uint8(59), + 169: uint8(60), + 170: uint8(61), + 171: uint8(62), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(63), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(64), + 251: uint8(65), + 252: uint8(17), + 253: uint8(66), + 254: uint8(67), + 255: uint8(68), + 256: uint8(69), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(73), + 261: uint8(74), + 262: uint8(17), + 263: uint8(75), + 264: uint8(76), + 265: uint8(77), + 266: uint8(78), + 267: uint8(79), + 268: uint8(80), + 269: uint8(81), + 270: uint8(16), + 271: uint8(82), + 272: uint8(83), + 273: uint8(84), + 274: uint8(85), + 275: uint8(86), + 276: uint8(87), + 277: uint8(88), + 278: uint8(89), + 279: uint8(90), + 280: uint8(91), + 281: uint8(92), + 282: uint8(93), + 283: uint8(16), + 284: uint8(94), + 285: uint8(95), + 286: uint8(96), + 287: uint8(16), + 288: uint8(17), + 289: uint8(17), + 290: uint8(17), + 291: uint8(97), + 292: uint8(98), + 293: uint8(99), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(17), + 305: uint8(17), + 306: uint8(17), + 307: uint8(17), + 308: uint8(100), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(17), + 325: uint8(17), + 326: uint8(101), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(17), + 361: uint8(17), + 362: uint8(102), + 363: uint8(103), + 364: uint8(16), + 365: uint8(16), + 366: uint8(104), + 367: uint8(105), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(106), + 392: uint8(17), + 393: uint8(17), + 394: uint8(107), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(108), + 434: uint8(109), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(110), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(111), + 469: uint8(112), + 470: uint8(113), + 471: uint8(114), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(115), + 481: uint8(116), + 482: uint8(117), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(118), + 489: uint8(119), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(120), + 495: uint8(16), + 496: uint8(16), + 497: uint8(121), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 584: uint8(254), + 585: uint8(255), + 586: uint8(255), + 587: uint8(7), + 588: uint8(254), + 589: uint8(255), + 590: uint8(255), + 591: uint8(7), + 597: uint8(4), + 598: uint8(32), + 599: uint8(4), + 600: uint8(255), + 601: uint8(255), + 602: uint8(127), + 603: uint8(255), + 604: uint8(255), + 605: uint8(255), + 606: uint8(127), + 607: uint8(255), + 608: uint8(255), + 609: uint8(255), + 610: uint8(255), + 611: uint8(255), + 612: uint8(255), + 613: uint8(255), + 614: uint8(255), + 615: uint8(255), + 616: uint8(255), + 617: uint8(255), + 618: uint8(255), + 619: uint8(255), + 620: uint8(255), + 621: uint8(255), + 622: uint8(255), + 623: uint8(255), + 624: uint8(255), + 625: uint8(255), + 626: uint8(255), + 627: uint8(255), + 628: uint8(255), + 629: uint8(255), + 630: uint8(255), + 631: uint8(255), + 632: uint8(195), + 633: uint8(255), + 634: uint8(3), + 636: uint8(31), + 637: uint8(80), + 648: uint8(32), + 654: uint8(223), + 655: uint8(188), + 656: uint8(64), + 657: uint8(215), + 658: uint8(255), + 659: uint8(255), + 660: uint8(251), + 661: uint8(255), + 662: uint8(255), + 663: uint8(255), + 664: uint8(255), + 665: uint8(255), + 666: uint8(255), + 667: uint8(255), + 668: uint8(255), + 669: uint8(255), + 670: uint8(191), + 671: uint8(255), + 672: uint8(255), + 673: uint8(255), + 674: uint8(255), + 675: uint8(255), + 676: uint8(255), + 677: uint8(255), + 678: uint8(255), + 679: uint8(255), + 680: uint8(255), + 681: uint8(255), + 682: uint8(255), + 683: uint8(255), + 684: uint8(255), + 685: uint8(255), + 686: uint8(255), + 687: uint8(255), + 688: uint8(3), + 689: uint8(252), + 690: uint8(255), + 691: uint8(255), + 692: uint8(255), + 693: uint8(255), + 694: uint8(255), + 695: uint8(255), + 696: uint8(255), + 697: uint8(255), + 698: uint8(255), + 699: uint8(255), + 700: uint8(255), + 701: uint8(255), + 702: uint8(255), + 703: uint8(255), + 704: uint8(255), + 705: uint8(255), + 706: uint8(255), + 707: uint8(255), + 708: uint8(255), + 709: uint8(255), + 710: uint8(254), + 711: uint8(255), + 712: uint8(255), + 713: uint8(255), + 714: uint8(127), + 715: uint8(2), + 716: uint8(255), + 717: uint8(255), + 718: uint8(255), + 719: uint8(255), + 720: uint8(255), + 721: uint8(1), + 726: uint8(255), + 727: uint8(191), + 728: uint8(182), + 730: uint8(255), + 731: uint8(255), + 732: uint8(255), + 733: uint8(135), + 734: uint8(7), + 738: uint8(255), + 739: uint8(7), + 740: uint8(255), + 741: uint8(255), + 742: uint8(255), + 743: uint8(255), + 744: uint8(255), + 745: uint8(255), + 746: uint8(255), + 747: uint8(254), + 748: uint8(255), + 749: uint8(195), + 750: uint8(255), + 751: uint8(255), + 752: uint8(255), + 753: uint8(255), + 754: uint8(255), + 755: uint8(255), + 756: uint8(255), + 757: uint8(255), + 758: uint8(255), + 759: uint8(255), + 760: uint8(255), + 761: uint8(255), + 762: uint8(239), + 763: uint8(31), + 764: uint8(254), + 765: uint8(225), + 766: uint8(255), + 767: uint8(159), + 770: uint8(255), + 771: uint8(255), + 772: uint8(255), + 773: uint8(255), + 774: uint8(255), + 775: uint8(255), + 777: uint8(224), + 778: uint8(255), + 779: uint8(255), + 780: uint8(255), + 781: uint8(255), + 782: uint8(255), + 783: uint8(255), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(255), + 788: uint8(255), + 789: uint8(255), + 790: uint8(3), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(7), + 798: uint8(48), + 799: uint8(4), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(252), + 804: uint8(255), + 805: uint8(31), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(1), + 812: uint8(255), + 813: uint8(7), + 820: uint8(255), + 821: uint8(255), + 822: uint8(223), + 823: uint8(63), + 826: uint8(240), + 827: uint8(255), + 828: uint8(248), + 829: uint8(3), + 830: uint8(255), + 831: uint8(255), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(239), + 840: uint8(255), + 841: uint8(223), + 842: uint8(225), + 843: uint8(255), + 844: uint8(207), + 845: uint8(255), + 846: uint8(254), + 847: uint8(255), + 848: uint8(239), + 849: uint8(159), + 850: uint8(249), + 851: uint8(255), + 852: uint8(255), + 853: uint8(253), + 854: uint8(197), + 855: uint8(227), + 856: uint8(159), + 857: uint8(89), + 858: uint8(128), + 859: uint8(176), + 860: uint8(207), + 861: uint8(255), + 862: uint8(3), + 863: uint8(16), + 864: uint8(238), + 865: uint8(135), + 866: uint8(249), + 867: uint8(255), + 868: uint8(255), + 869: uint8(253), + 870: uint8(109), + 871: uint8(195), + 872: uint8(135), + 873: uint8(25), + 874: uint8(2), + 875: uint8(94), + 876: uint8(192), + 877: uint8(255), + 878: uint8(63), + 880: uint8(238), + 881: uint8(191), + 882: uint8(251), + 883: uint8(255), + 884: uint8(255), + 885: uint8(253), + 886: uint8(237), + 887: uint8(227), + 888: uint8(191), + 889: uint8(27), + 890: uint8(1), + 892: uint8(207), + 893: uint8(255), + 895: uint8(30), + 896: uint8(238), + 897: uint8(159), + 898: uint8(249), + 899: uint8(255), + 900: uint8(255), + 901: uint8(253), + 902: uint8(237), + 903: uint8(227), + 904: uint8(159), + 905: uint8(25), + 906: uint8(192), + 907: uint8(176), + 908: uint8(207), + 909: uint8(255), + 910: uint8(2), + 912: uint8(236), + 913: uint8(199), + 914: uint8(61), + 915: uint8(214), + 916: uint8(24), + 917: uint8(199), + 918: uint8(255), + 919: uint8(195), + 920: uint8(199), + 921: uint8(29), + 922: uint8(129), + 924: uint8(192), + 925: uint8(255), + 928: uint8(239), + 929: uint8(223), + 930: uint8(253), + 931: uint8(255), + 932: uint8(255), + 933: uint8(253), + 934: uint8(255), + 935: uint8(227), + 936: uint8(223), + 937: uint8(29), + 938: uint8(96), + 939: uint8(7), + 940: uint8(207), + 941: uint8(255), + 944: uint8(239), + 945: uint8(223), + 946: uint8(253), + 947: uint8(255), + 948: uint8(255), + 949: uint8(253), + 950: uint8(239), + 951: uint8(227), + 952: uint8(223), + 953: uint8(29), + 954: uint8(96), + 955: uint8(64), + 956: uint8(207), + 957: uint8(255), + 958: uint8(6), + 960: uint8(239), + 961: uint8(223), + 962: uint8(253), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(231), + 968: uint8(223), + 969: uint8(93), + 970: uint8(240), + 971: uint8(128), + 972: uint8(207), + 973: uint8(255), + 975: uint8(252), + 976: uint8(236), + 977: uint8(255), + 978: uint8(127), + 979: uint8(252), + 980: uint8(255), + 981: uint8(255), + 982: uint8(251), + 983: uint8(47), + 984: uint8(127), + 985: uint8(128), + 986: uint8(95), + 987: uint8(255), + 988: uint8(192), + 989: uint8(255), + 990: uint8(12), + 992: uint8(254), + 993: uint8(255), + 994: uint8(255), + 995: uint8(255), + 996: uint8(255), + 997: uint8(127), + 998: uint8(255), + 999: uint8(7), + 1000: uint8(63), + 1001: uint8(32), + 1002: uint8(255), + 1003: uint8(3), + 1008: uint8(214), + 1009: uint8(247), + 1010: uint8(255), + 1011: uint8(255), + 1012: uint8(175), + 1013: uint8(255), + 1014: uint8(255), + 1015: uint8(59), + 1016: uint8(95), + 1017: uint8(32), + 1018: uint8(255), + 1019: uint8(243), + 1024: uint8(1), + 1028: uint8(255), + 1029: uint8(3), + 1032: uint8(255), + 1033: uint8(254), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(31), + 1038: uint8(254), + 1039: uint8(255), + 1040: uint8(3), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(254), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(31), + 1056: uint8(255), + 1057: uint8(255), + 1058: uint8(255), + 1059: uint8(255), + 1060: uint8(255), + 1061: uint8(255), + 1062: uint8(127), + 1063: uint8(249), + 1064: uint8(255), + 1065: uint8(3), + 1066: uint8(255), + 1067: uint8(255), + 1068: uint8(255), + 1069: uint8(255), + 1070: uint8(255), + 1071: uint8(255), + 1072: uint8(255), + 1073: uint8(255), + 1074: uint8(255), + 1075: uint8(63), + 1076: uint8(255), + 1077: uint8(255), + 1078: uint8(255), + 1079: uint8(255), + 1080: uint8(191), + 1081: uint8(32), + 1082: uint8(255), + 1083: uint8(255), + 1084: uint8(255), + 1085: uint8(255), + 1086: uint8(255), + 1087: uint8(247), + 1088: uint8(255), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(61), + 1098: uint8(127), + 1099: uint8(61), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(255), + 1104: uint8(255), + 1105: uint8(61), + 1106: uint8(255), + 1107: uint8(255), + 1108: uint8(255), + 1109: uint8(255), + 1110: uint8(61), + 1111: uint8(127), + 1112: uint8(61), + 1113: uint8(255), + 1114: uint8(127), + 1115: uint8(255), + 1116: uint8(255), + 1117: uint8(255), + 1118: uint8(255), + 1119: uint8(255), + 1120: uint8(255), + 1121: uint8(255), + 1122: uint8(61), + 1123: uint8(255), + 1124: uint8(255), + 1125: uint8(255), + 1126: uint8(255), + 1127: uint8(255), + 1128: uint8(255), + 1129: uint8(255), + 1130: uint8(255), + 1131: uint8(7), + 1136: uint8(255), + 1137: uint8(255), + 1140: uint8(255), + 1141: uint8(255), + 1142: uint8(255), + 1143: uint8(255), + 1144: uint8(255), + 1145: uint8(255), + 1146: uint8(255), + 1147: uint8(255), + 1148: uint8(255), + 1149: uint8(255), + 1150: uint8(63), + 1151: uint8(63), + 1152: uint8(254), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1183: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(159), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(254), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(7), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(199), + 1214: uint8(255), + 1215: uint8(1), + 1216: uint8(255), + 1217: uint8(223), + 1218: uint8(15), + 1220: uint8(255), + 1221: uint8(255), + 1222: uint8(15), + 1224: uint8(255), + 1225: uint8(255), + 1226: uint8(15), + 1228: uint8(255), + 1229: uint8(223), + 1230: uint8(13), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(207), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(1), + 1242: uint8(128), + 1243: uint8(16), + 1244: uint8(255), + 1245: uint8(3), + 1250: uint8(255), + 1251: uint8(3), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(1), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(7), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(63), + 1280: uint8(255), + 1281: uint8(255), + 1282: uint8(255), + 1283: uint8(127), + 1284: uint8(255), + 1285: uint8(15), + 1286: uint8(255), + 1287: uint8(1), + 1288: uint8(192), + 1289: uint8(255), + 1290: uint8(255), + 1291: uint8(255), + 1292: uint8(255), + 1293: uint8(63), + 1294: uint8(31), + 1296: uint8(255), + 1297: uint8(255), + 1298: uint8(255), + 1299: uint8(255), + 1300: uint8(255), + 1301: uint8(15), + 1302: uint8(255), + 1303: uint8(255), + 1304: uint8(255), + 1305: uint8(3), + 1306: uint8(255), + 1307: uint8(3), + 1312: uint8(255), + 1313: uint8(255), + 1314: uint8(255), + 1315: uint8(15), + 1316: uint8(255), + 1317: uint8(255), + 1318: uint8(255), + 1319: uint8(255), + 1320: uint8(255), + 1321: uint8(255), + 1322: uint8(255), + 1323: uint8(127), + 1324: uint8(254), + 1325: uint8(255), + 1326: uint8(31), + 1328: uint8(255), + 1329: uint8(3), + 1330: uint8(255), + 1331: uint8(3), + 1332: uint8(128), + 1344: uint8(255), + 1345: uint8(255), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(239), + 1351: uint8(255), + 1352: uint8(239), + 1353: uint8(15), + 1354: uint8(255), + 1355: uint8(3), + 1360: uint8(255), + 1361: uint8(255), + 1362: uint8(255), + 1363: uint8(255), + 1364: uint8(255), + 1365: uint8(243), + 1366: uint8(255), + 1367: uint8(255), + 1368: uint8(255), + 1369: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(191), + 1373: uint8(255), + 1374: uint8(3), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(255), + 1381: uint8(255), + 1382: uint8(127), + 1384: uint8(255), + 1385: uint8(227), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(63), + 1392: uint8(255), + 1393: uint8(1), + 1394: uint8(255), + 1395: uint8(255), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(231), + 1405: uint8(222), + 1406: uint8(111), + 1407: uint8(4), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(255), + 1416: uint8(255), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1436: uint8(128), + 1437: uint8(255), + 1438: uint8(31), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(63), + 1443: uint8(63), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(63), + 1449: uint8(63), + 1450: uint8(255), + 1451: uint8(170), + 1452: uint8(255), + 1453: uint8(255), + 1454: uint8(255), + 1455: uint8(63), + 1456: uint8(255), + 1457: uint8(255), + 1458: uint8(255), + 1459: uint8(255), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(223), + 1463: uint8(95), + 1464: uint8(220), + 1465: uint8(31), + 1466: uint8(207), + 1467: uint8(15), + 1468: uint8(255), + 1469: uint8(31), + 1470: uint8(220), + 1471: uint8(31), + 1486: uint8(2), + 1487: uint8(128), + 1490: uint8(255), + 1491: uint8(31), + 1504: uint8(132), + 1505: uint8(252), + 1506: uint8(47), + 1507: uint8(62), + 1508: uint8(80), + 1509: uint8(189), + 1510: uint8(255), + 1511: uint8(243), + 1512: uint8(224), + 1513: uint8(67), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(1), + 1558: uint8(192), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(3), + 1568: uint8(255), + 1569: uint8(255), + 1570: uint8(255), + 1571: uint8(255), + 1572: uint8(255), + 1573: uint8(127), + 1574: uint8(255), + 1575: uint8(255), + 1576: uint8(255), + 1577: uint8(255), + 1578: uint8(255), + 1579: uint8(127), + 1580: uint8(255), + 1581: uint8(255), + 1582: uint8(255), + 1583: uint8(255), + 1584: uint8(255), + 1585: uint8(255), + 1586: uint8(255), + 1587: uint8(255), + 1588: uint8(255), + 1589: uint8(255), + 1590: uint8(255), + 1591: uint8(255), + 1592: uint8(255), + 1593: uint8(255), + 1594: uint8(255), + 1595: uint8(255), + 1596: uint8(31), + 1597: uint8(120), + 1598: uint8(12), + 1600: uint8(255), + 1601: uint8(255), + 1602: uint8(255), + 1603: uint8(255), + 1604: uint8(191), + 1605: uint8(32), + 1606: uint8(255), + 1607: uint8(255), + 1608: uint8(255), + 1609: uint8(255), + 1610: uint8(255), + 1611: uint8(255), + 1612: uint8(255), + 1613: uint8(128), + 1616: uint8(255), + 1617: uint8(255), + 1618: uint8(127), + 1620: uint8(127), + 1621: uint8(127), + 1622: uint8(127), + 1623: uint8(127), + 1624: uint8(127), + 1625: uint8(127), + 1626: uint8(127), + 1627: uint8(127), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1637: uint8(128), + 1664: uint8(224), + 1668: uint8(254), + 1669: uint8(3), + 1670: uint8(62), + 1671: uint8(31), + 1672: uint8(254), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(127), + 1683: uint8(224), + 1684: uint8(254), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(255), + 1691: uint8(255), + 1692: uint8(255), + 1693: uint8(255), + 1694: uint8(255), + 1695: uint8(247), + 1696: uint8(224), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(255), + 1701: uint8(255), + 1702: uint8(254), + 1703: uint8(255), + 1704: uint8(255), + 1705: uint8(255), + 1706: uint8(255), + 1707: uint8(255), + 1708: uint8(255), + 1709: uint8(255), + 1710: uint8(255), + 1711: uint8(255), + 1712: uint8(255), + 1713: uint8(127), + 1716: uint8(255), + 1717: uint8(255), + 1718: uint8(255), + 1719: uint8(7), + 1726: uint8(255), + 1727: uint8(255), + 1728: uint8(255), + 1729: uint8(255), + 1730: uint8(255), + 1731: uint8(255), + 1732: uint8(255), + 1733: uint8(255), + 1734: uint8(255), + 1735: uint8(255), + 1736: uint8(255), + 1737: uint8(255), + 1738: uint8(255), + 1739: uint8(255), + 1740: uint8(255), + 1741: uint8(255), + 1742: uint8(255), + 1743: uint8(255), + 1744: uint8(255), + 1745: uint8(255), + 1746: uint8(255), + 1747: uint8(255), + 1748: uint8(255), + 1749: uint8(255), + 1750: uint8(63), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(255), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1792: uint8(255), + 1793: uint8(255), + 1794: uint8(255), + 1795: uint8(255), + 1796: uint8(255), + 1797: uint8(255), + 1798: uint8(255), + 1799: uint8(255), + 1800: uint8(255), + 1801: uint8(255), + 1802: uint8(255), + 1803: uint8(255), + 1804: uint8(255), + 1805: uint8(255), + 1806: uint8(255), + 1807: uint8(255), + 1808: uint8(255), + 1809: uint8(31), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(63), + 1824: uint8(255), + 1825: uint8(31), + 1826: uint8(255), + 1827: uint8(255), + 1828: uint8(255), + 1829: uint8(15), + 1832: uint8(255), + 1833: uint8(255), + 1834: uint8(255), + 1835: uint8(255), + 1836: uint8(255), + 1837: uint8(127), + 1838: uint8(240), + 1839: uint8(143), + 1840: uint8(255), + 1841: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(255), + 1849: uint8(255), + 1850: uint8(255), + 1851: uint8(255), + 1852: uint8(255), + 1853: uint8(255), + 1858: uint8(128), + 1859: uint8(255), + 1860: uint8(252), + 1861: uint8(255), + 1862: uint8(255), + 1863: uint8(255), + 1864: uint8(255), + 1865: uint8(255), + 1866: uint8(255), + 1867: uint8(255), + 1868: uint8(255), + 1869: uint8(255), + 1870: uint8(255), + 1871: uint8(255), + 1872: uint8(255), + 1873: uint8(249), + 1874: uint8(255), + 1875: uint8(255), + 1876: uint8(255), + 1877: uint8(255), + 1878: uint8(255), + 1879: uint8(255), + 1880: uint8(124), + 1886: uint8(128), + 1887: uint8(255), + 1888: uint8(191), + 1889: uint8(255), + 1890: uint8(255), + 1891: uint8(255), + 1892: uint8(255), + 1896: uint8(255), + 1897: uint8(255), + 1898: uint8(255), + 1899: uint8(255), + 1900: uint8(255), + 1901: uint8(255), + 1902: uint8(15), + 1904: uint8(255), + 1905: uint8(255), + 1906: uint8(255), + 1907: uint8(255), + 1908: uint8(255), + 1909: uint8(255), + 1910: uint8(255), + 1911: uint8(255), + 1912: uint8(47), + 1914: uint8(255), + 1915: uint8(3), + 1918: uint8(252), + 1919: uint8(232), + 1920: uint8(255), + 1921: uint8(255), + 1922: uint8(255), + 1923: uint8(255), + 1924: uint8(255), + 1925: uint8(7), + 1926: uint8(255), + 1927: uint8(255), + 1928: uint8(255), + 1929: uint8(255), + 1930: uint8(7), + 1932: uint8(255), + 1933: uint8(255), + 1934: uint8(255), + 1935: uint8(31), + 1936: uint8(255), + 1937: uint8(255), + 1938: uint8(255), + 1939: uint8(255), + 1940: uint8(255), + 1941: uint8(255), + 1942: uint8(247), + 1943: uint8(255), + 1945: uint8(128), + 1946: uint8(255), + 1947: uint8(3), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(255), + 1951: uint8(127), + 1952: uint8(255), + 1953: uint8(255), + 1954: uint8(255), + 1955: uint8(255), + 1956: uint8(255), + 1957: uint8(255), + 1958: uint8(127), + 1960: uint8(255), + 1961: uint8(63), + 1962: uint8(255), + 1963: uint8(3), + 1964: uint8(255), + 1965: uint8(255), + 1966: uint8(127), + 1967: uint8(252), + 1968: uint8(255), + 1969: uint8(255), + 1970: uint8(255), + 1971: uint8(255), + 1972: uint8(255), + 1973: uint8(255), + 1974: uint8(255), + 1975: uint8(127), + 1976: uint8(5), + 1979: uint8(56), + 1980: uint8(255), + 1981: uint8(255), + 1982: uint8(60), + 1984: uint8(126), + 1985: uint8(126), + 1986: uint8(126), + 1988: uint8(127), + 1989: uint8(127), + 1990: uint8(255), + 1991: uint8(255), + 1992: uint8(255), + 1993: uint8(255), + 1994: uint8(255), + 1995: uint8(247), + 1996: uint8(255), + 1998: uint8(255), + 1999: uint8(255), + 2000: uint8(255), + 2001: uint8(255), + 2002: uint8(255), + 2003: uint8(255), + 2004: uint8(255), + 2005: uint8(255), + 2006: uint8(255), + 2007: uint8(255), + 2008: uint8(255), + 2009: uint8(255), + 2010: uint8(255), + 2011: uint8(255), + 2012: uint8(255), + 2013: uint8(7), + 2014: uint8(255), + 2015: uint8(3), + 2016: uint8(255), + 2017: uint8(255), + 2018: uint8(255), + 2019: uint8(255), + 2020: uint8(255), + 2021: uint8(255), + 2022: uint8(255), + 2023: uint8(255), + 2024: uint8(255), + 2025: uint8(255), + 2026: uint8(255), + 2027: uint8(255), + 2028: uint8(255), + 2029: uint8(255), + 2030: uint8(255), + 2031: uint8(255), + 2032: uint8(255), + 2033: uint8(255), + 2034: uint8(255), + 2035: uint8(255), + 2036: uint8(15), + 2038: uint8(255), + 2039: uint8(255), + 2040: uint8(127), + 2041: uint8(248), + 2042: uint8(255), + 2043: uint8(255), + 2044: uint8(255), + 2045: uint8(255), + 2046: uint8(255), + 2047: uint8(15), + 2048: uint8(255), + 2049: uint8(255), + 2050: uint8(255), + 2051: uint8(255), + 2052: uint8(255), + 2053: uint8(255), + 2054: uint8(255), + 2055: uint8(255), + 2056: uint8(255), + 2057: uint8(255), + 2058: uint8(255), + 2059: uint8(255), + 2060: uint8(255), + 2061: uint8(63), + 2062: uint8(255), + 2063: uint8(255), + 2064: uint8(255), + 2065: uint8(255), + 2066: uint8(255), + 2067: uint8(255), + 2068: uint8(255), + 2069: uint8(255), + 2070: uint8(255), + 2071: uint8(255), + 2072: uint8(255), + 2073: uint8(255), + 2074: uint8(255), + 2075: uint8(3), + 2080: uint8(127), + 2082: uint8(248), + 2083: uint8(224), + 2084: uint8(255), + 2085: uint8(253), + 2086: uint8(127), + 2087: uint8(95), + 2088: uint8(219), + 2089: uint8(255), + 2090: uint8(255), + 2091: uint8(255), + 2092: uint8(255), + 2093: uint8(255), + 2094: uint8(255), + 2095: uint8(255), + 2096: uint8(255), + 2097: uint8(255), + 2098: uint8(255), + 2099: uint8(255), + 2100: uint8(255), + 2101: uint8(255), + 2102: uint8(3), + 2106: uint8(248), + 2107: uint8(255), + 2108: uint8(255), + 2109: uint8(255), + 2110: uint8(255), + 2111: uint8(255), + 2112: uint8(255), + 2113: uint8(255), + 2114: uint8(255), + 2115: uint8(255), + 2116: uint8(255), + 2117: uint8(255), + 2118: uint8(255), + 2119: uint8(63), + 2122: uint8(255), + 2123: uint8(255), + 2124: uint8(255), + 2125: uint8(255), + 2126: uint8(255), + 2127: uint8(255), + 2128: uint8(255), + 2129: uint8(255), + 2130: uint8(252), + 2131: uint8(255), + 2132: uint8(255), + 2133: uint8(255), + 2134: uint8(255), + 2135: uint8(255), + 2136: uint8(255), + 2142: uint8(255), + 2143: uint8(15), + 2158: uint8(223), + 2159: uint8(255), + 2160: uint8(255), + 2161: uint8(255), + 2162: uint8(255), + 2163: uint8(255), + 2164: uint8(255), + 2165: uint8(255), + 2166: uint8(255), + 2167: uint8(255), + 2168: uint8(255), + 2169: uint8(255), + 2170: uint8(255), + 2171: uint8(255), + 2172: uint8(255), + 2173: uint8(255), + 2174: uint8(255), + 2175: uint8(31), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(254), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(7), + 2184: uint8(254), + 2185: uint8(255), + 2186: uint8(255), + 2187: uint8(7), + 2188: uint8(192), + 2189: uint8(255), + 2190: uint8(255), + 2191: uint8(255), + 2192: uint8(255), + 2193: uint8(255), + 2194: uint8(255), + 2195: uint8(255), + 2196: uint8(255), + 2197: uint8(255), + 2198: uint8(255), + 2199: uint8(127), + 2200: uint8(252), + 2201: uint8(252), + 2202: uint8(252), + 2203: uint8(28), + 2208: uint8(255), + 2209: uint8(239), + 2210: uint8(255), + 2211: uint8(255), + 2212: uint8(127), + 2213: uint8(255), + 2214: uint8(255), + 2215: uint8(183), + 2216: uint8(255), + 2217: uint8(63), + 2218: uint8(255), + 2219: uint8(63), + 2224: uint8(255), + 2225: uint8(255), + 2226: uint8(255), + 2227: uint8(255), + 2228: uint8(255), + 2229: uint8(255), + 2230: uint8(255), + 2231: uint8(255), + 2232: uint8(255), + 2233: uint8(255), + 2234: uint8(255), + 2235: uint8(255), + 2236: uint8(255), + 2237: uint8(255), + 2238: uint8(255), + 2239: uint8(7), + 2248: uint8(255), + 2249: uint8(255), + 2250: uint8(255), + 2251: uint8(255), + 2252: uint8(255), + 2253: uint8(255), + 2254: uint8(31), + 2288: uint8(255), + 2289: uint8(255), + 2290: uint8(255), + 2291: uint8(31), + 2292: uint8(255), + 2293: uint8(255), + 2294: uint8(255), + 2295: uint8(255), + 2296: uint8(255), + 2297: uint8(255), + 2298: uint8(1), + 2304: uint8(255), + 2305: uint8(255), + 2306: uint8(255), + 2307: uint8(255), + 2309: uint8(224), + 2310: uint8(255), + 2311: uint8(255), + 2312: uint8(255), + 2313: uint8(7), + 2314: uint8(255), + 2315: uint8(255), + 2316: uint8(255), + 2317: uint8(255), + 2318: uint8(255), + 2319: uint8(7), + 2320: uint8(255), + 2321: uint8(255), + 2322: uint8(255), + 2323: uint8(63), + 2324: uint8(255), + 2325: uint8(255), + 2326: uint8(255), + 2327: uint8(255), + 2328: uint8(15), + 2329: uint8(255), + 2330: uint8(62), + 2336: uint8(255), + 2337: uint8(255), + 2338: uint8(255), + 2339: uint8(255), + 2340: uint8(255), + 2341: uint8(255), + 2342: uint8(255), + 2343: uint8(255), + 2344: uint8(255), + 2345: uint8(255), + 2346: uint8(255), + 2347: uint8(255), + 2348: uint8(255), + 2349: uint8(255), + 2350: uint8(255), + 2351: uint8(255), + 2352: uint8(255), + 2353: uint8(255), + 2354: uint8(255), + 2355: uint8(63), + 2356: uint8(255), + 2357: uint8(3), + 2358: uint8(255), + 2359: uint8(255), + 2360: uint8(255), + 2361: uint8(255), + 2362: uint8(15), + 2363: uint8(255), + 2364: uint8(255), + 2365: uint8(255), + 2366: uint8(255), + 2367: uint8(15), + 2368: uint8(255), + 2369: uint8(255), + 2370: uint8(255), + 2371: uint8(255), + 2372: uint8(255), + 2374: uint8(255), + 2375: uint8(255), + 2376: uint8(255), + 2377: uint8(255), + 2378: uint8(255), + 2379: uint8(255), + 2380: uint8(15), + 2400: uint8(255), + 2401: uint8(255), + 2402: uint8(255), + 2403: uint8(255), + 2404: uint8(255), + 2405: uint8(255), + 2406: uint8(127), + 2408: uint8(255), + 2409: uint8(255), + 2410: uint8(63), + 2412: uint8(255), + 2432: uint8(63), + 2433: uint8(253), + 2434: uint8(255), + 2435: uint8(255), + 2436: uint8(255), + 2437: uint8(255), + 2438: uint8(191), + 2439: uint8(145), + 2440: uint8(255), + 2441: uint8(255), + 2442: uint8(63), + 2444: uint8(255), + 2445: uint8(255), + 2446: uint8(127), + 2448: uint8(255), + 2449: uint8(255), + 2450: uint8(255), + 2451: uint8(127), + 2460: uint8(255), + 2461: uint8(255), + 2462: uint8(55), + 2464: uint8(255), + 2465: uint8(255), + 2466: uint8(63), + 2468: uint8(255), + 2469: uint8(255), + 2470: uint8(255), + 2471: uint8(3), + 2480: uint8(255), + 2481: uint8(255), + 2482: uint8(255), + 2483: uint8(255), + 2484: uint8(255), + 2485: uint8(255), + 2486: uint8(255), + 2487: uint8(192), + 2496: uint8(111), + 2497: uint8(240), + 2498: uint8(239), + 2499: uint8(254), + 2500: uint8(255), + 2501: uint8(255), + 2502: uint8(63), + 2508: uint8(255), + 2509: uint8(255), + 2510: uint8(255), + 2511: uint8(31), + 2512: uint8(255), + 2513: uint8(255), + 2514: uint8(255), + 2515: uint8(31), + 2520: uint8(255), + 2521: uint8(254), + 2522: uint8(255), + 2523: uint8(255), + 2524: uint8(31), + 2528: uint8(255), + 2529: uint8(255), + 2530: uint8(255), + 2531: uint8(255), + 2532: uint8(255), + 2533: uint8(255), + 2534: uint8(63), + 2536: uint8(255), + 2537: uint8(255), + 2538: uint8(63), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(7), + 2544: uint8(255), + 2545: uint8(255), + 2546: uint8(3), + 2560: uint8(255), + 2561: uint8(255), + 2562: uint8(255), + 2563: uint8(255), + 2564: uint8(255), + 2565: uint8(255), + 2566: uint8(255), + 2567: uint8(255), + 2568: uint8(255), + 2569: uint8(1), + 2576: uint8(255), + 2577: uint8(255), + 2578: uint8(255), + 2579: uint8(255), + 2580: uint8(255), + 2581: uint8(255), + 2582: uint8(7), + 2584: uint8(255), + 2585: uint8(255), + 2586: uint8(255), + 2587: uint8(255), + 2588: uint8(255), + 2589: uint8(255), + 2590: uint8(7), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2598: uint8(255), + 2599: uint8(3), + 2624: uint8(255), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(31), + 2628: uint8(128), + 2630: uint8(255), + 2631: uint8(255), + 2632: uint8(63), + 2652: uint8(255), + 2653: uint8(255), + 2654: uint8(127), + 2656: uint8(255), + 2657: uint8(255), + 2658: uint8(255), + 2659: uint8(255), + 2660: uint8(255), + 2661: uint8(255), + 2662: uint8(255), + 2663: uint8(255), + 2664: uint8(63), + 2668: uint8(192), + 2669: uint8(255), + 2672: uint8(252), + 2673: uint8(255), + 2674: uint8(255), + 2675: uint8(255), + 2676: uint8(255), + 2677: uint8(255), + 2678: uint8(255), + 2679: uint8(1), + 2682: uint8(255), + 2683: uint8(255), + 2684: uint8(255), + 2685: uint8(1), + 2686: uint8(255), + 2687: uint8(3), + 2688: uint8(255), + 2689: uint8(255), + 2690: uint8(255), + 2691: uint8(255), + 2692: uint8(255), + 2693: uint8(255), + 2694: uint8(199), + 2695: uint8(255), + 2696: uint8(112), + 2698: uint8(255), + 2699: uint8(255), + 2700: uint8(255), + 2701: uint8(255), + 2702: uint8(71), + 2704: uint8(255), + 2705: uint8(255), + 2706: uint8(255), + 2707: uint8(255), + 2708: uint8(255), + 2709: uint8(255), + 2710: uint8(255), + 2711: uint8(255), + 2712: uint8(30), + 2714: uint8(255), + 2715: uint8(23), + 2720: uint8(255), + 2721: uint8(255), + 2722: uint8(251), + 2723: uint8(255), + 2724: uint8(255), + 2725: uint8(255), + 2726: uint8(159), + 2727: uint8(64), + 2736: uint8(127), + 2737: uint8(189), + 2738: uint8(255), + 2739: uint8(191), + 2740: uint8(255), + 2741: uint8(1), + 2742: uint8(255), + 2743: uint8(255), + 2744: uint8(255), + 2745: uint8(255), + 2746: uint8(255), + 2747: uint8(255), + 2748: uint8(255), + 2749: uint8(1), + 2750: uint8(255), + 2751: uint8(3), + 2752: uint8(239), + 2753: uint8(159), + 2754: uint8(249), + 2755: uint8(255), + 2756: uint8(255), + 2757: uint8(253), + 2758: uint8(237), + 2759: uint8(227), + 2760: uint8(159), + 2761: uint8(25), + 2762: uint8(129), + 2763: uint8(224), + 2764: uint8(15), + 2784: uint8(255), + 2785: uint8(255), + 2786: uint8(255), + 2787: uint8(255), + 2788: uint8(255), + 2789: uint8(255), + 2790: uint8(255), + 2791: uint8(255), + 2792: uint8(187), + 2793: uint8(7), + 2794: uint8(255), + 2795: uint8(131), + 2800: uint8(255), + 2801: uint8(255), + 2802: uint8(255), + 2803: uint8(255), + 2804: uint8(255), + 2805: uint8(255), + 2806: uint8(255), + 2807: uint8(255), + 2808: uint8(179), + 2810: uint8(255), + 2811: uint8(3), + 2832: uint8(255), + 2833: uint8(255), + 2834: uint8(255), + 2835: uint8(255), + 2836: uint8(255), + 2837: uint8(255), + 2838: uint8(63), + 2839: uint8(127), + 2843: uint8(63), + 2848: uint8(255), + 2849: uint8(255), + 2850: uint8(255), + 2851: uint8(255), + 2852: uint8(255), + 2853: uint8(255), + 2854: uint8(255), + 2855: uint8(127), + 2856: uint8(17), + 2858: uint8(255), + 2859: uint8(3), + 2864: uint8(255), + 2865: uint8(255), + 2866: uint8(255), + 2867: uint8(255), + 2868: uint8(255), + 2869: uint8(255), + 2870: uint8(63), + 2871: uint8(1), + 2872: uint8(255), + 2873: uint8(3), + 2880: uint8(255), + 2881: uint8(255), + 2882: uint8(255), + 2883: uint8(231), + 2884: uint8(255), + 2885: uint8(7), + 2886: uint8(255), + 2887: uint8(3), + 2912: uint8(255), + 2913: uint8(255), + 2914: uint8(255), + 2915: uint8(255), + 2916: uint8(255), + 2917: uint8(255), + 2918: uint8(255), + 2919: uint8(1), + 2932: uint8(255), + 2933: uint8(255), + 2934: uint8(255), + 2935: uint8(255), + 2936: uint8(255), + 2937: uint8(255), + 2938: uint8(255), + 2939: uint8(255), + 2940: uint8(255), + 2941: uint8(3), + 2943: uint8(128), + 2964: uint8(255), + 2965: uint8(252), + 2966: uint8(255), + 2967: uint8(255), + 2968: uint8(255), + 2969: uint8(255), + 2970: uint8(255), + 2971: uint8(252), + 2972: uint8(26), + 2976: uint8(255), + 2977: uint8(255), + 2978: uint8(255), + 2979: uint8(255), + 2980: uint8(255), + 2981: uint8(255), + 2982: uint8(231), + 2983: uint8(127), + 2986: uint8(255), + 2987: uint8(255), + 2988: uint8(255), + 2989: uint8(255), + 2990: uint8(255), + 2991: uint8(255), + 2992: uint8(255), + 2993: uint8(255), + 2994: uint8(255), + 2995: uint8(32), + 3000: uint8(255), + 3001: uint8(255), + 3002: uint8(255), + 3003: uint8(255), + 3004: uint8(255), + 3005: uint8(255), + 3006: uint8(255), + 3007: uint8(1), + 3008: uint8(255), + 3009: uint8(253), + 3010: uint8(255), + 3011: uint8(255), + 3012: uint8(255), + 3013: uint8(255), + 3014: uint8(127), + 3015: uint8(127), + 3016: uint8(1), + 3018: uint8(255), + 3019: uint8(3), + 3022: uint8(252), + 3023: uint8(255), + 3024: uint8(255), + 3025: uint8(255), + 3026: uint8(252), + 3027: uint8(255), + 3028: uint8(255), + 3029: uint8(254), + 3030: uint8(127), + 3040: uint8(127), + 3041: uint8(251), + 3042: uint8(255), + 3043: uint8(255), + 3044: uint8(255), + 3045: uint8(255), + 3046: uint8(127), + 3047: uint8(180), + 3048: uint8(203), + 3050: uint8(255), + 3051: uint8(3), + 3052: uint8(191), + 3053: uint8(253), + 3054: uint8(255), + 3055: uint8(255), + 3056: uint8(255), + 3057: uint8(127), + 3058: uint8(123), + 3059: uint8(1), + 3060: uint8(255), + 3061: uint8(3), + 3100: uint8(255), + 3101: uint8(255), + 3102: uint8(127), + 3104: uint8(255), + 3105: uint8(255), + 3106: uint8(255), + 3107: uint8(255), + 3108: uint8(255), + 3109: uint8(255), + 3110: uint8(255), + 3111: uint8(255), + 3112: uint8(255), + 3113: uint8(255), + 3114: uint8(255), + 3115: uint8(255), + 3116: uint8(255), + 3117: uint8(255), + 3118: uint8(255), + 3119: uint8(255), + 3120: uint8(255), + 3121: uint8(255), + 3122: uint8(255), + 3123: uint8(3), + 3136: uint8(255), + 3137: uint8(255), + 3138: uint8(255), + 3139: uint8(255), + 3140: uint8(255), + 3141: uint8(255), + 3142: uint8(255), + 3143: uint8(255), + 3144: uint8(255), + 3145: uint8(255), + 3146: uint8(255), + 3147: uint8(255), + 3148: uint8(255), + 3149: uint8(127), + 3152: uint8(255), + 3153: uint8(255), + 3154: uint8(255), + 3155: uint8(255), + 3156: uint8(255), + 3157: uint8(255), + 3158: uint8(255), + 3159: uint8(255), + 3160: uint8(255), + 3161: uint8(255), + 3162: uint8(255), + 3163: uint8(255), + 3164: uint8(255), + 3165: uint8(255), + 3166: uint8(255), + 3167: uint8(255), + 3168: uint8(255), + 3169: uint8(255), + 3170: uint8(255), + 3171: uint8(255), + 3172: uint8(255), + 3173: uint8(255), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(15), + 3200: uint8(255), + 3201: uint8(255), + 3202: uint8(255), + 3203: uint8(255), + 3204: uint8(255), + 3205: uint8(127), + 3232: uint8(255), + 3233: uint8(255), + 3234: uint8(255), + 3235: uint8(255), + 3236: uint8(255), + 3237: uint8(255), + 3238: uint8(255), + 3239: uint8(255), + 3240: uint8(127), + 3264: uint8(255), + 3265: uint8(255), + 3266: uint8(255), + 3267: uint8(255), + 3268: uint8(255), + 3269: uint8(255), + 3270: uint8(255), + 3271: uint8(1), + 3272: uint8(255), + 3273: uint8(255), + 3274: uint8(255), + 3275: uint8(127), + 3276: uint8(255), + 3277: uint8(3), + 3290: uint8(255), + 3291: uint8(255), + 3292: uint8(255), + 3293: uint8(63), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3304: uint8(15), + 3306: uint8(255), + 3307: uint8(3), + 3308: uint8(248), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(224), + 3312: uint8(255), + 3313: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(255), + 3369: uint8(135), + 3370: uint8(255), + 3371: uint8(255), + 3372: uint8(255), + 3373: uint8(255), + 3374: uint8(255), + 3375: uint8(255), + 3376: uint8(255), + 3377: uint8(128), + 3378: uint8(255), + 3379: uint8(255), + 3388: uint8(11), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(255), + 3403: uint8(255), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(255), + 3408: uint8(255), + 3409: uint8(255), + 3410: uint8(255), + 3411: uint8(255), + 3412: uint8(255), + 3413: uint8(255), + 3414: uint8(255), + 3415: uint8(255), + 3416: uint8(255), + 3417: uint8(255), + 3418: uint8(255), + 3419: uint8(255), + 3420: uint8(255), + 3421: uint8(255), + 3422: uint8(255), + 3424: uint8(255), + 3425: uint8(255), + 3426: uint8(255), + 3427: uint8(255), + 3428: uint8(255), + 3429: uint8(255), + 3430: uint8(255), + 3431: uint8(255), + 3432: uint8(255), + 3433: uint8(255), + 3434: uint8(255), + 3435: uint8(255), + 3436: uint8(255), + 3437: uint8(255), + 3438: uint8(255), + 3439: uint8(255), + 3440: uint8(255), + 3441: uint8(255), + 3442: uint8(255), + 3443: uint8(255), + 3444: uint8(255), + 3445: uint8(255), + 3446: uint8(255), + 3447: uint8(255), + 3448: uint8(255), + 3449: uint8(255), + 3450: uint8(255), + 3451: uint8(255), + 3452: uint8(255), + 3453: uint8(255), + 3454: uint8(7), + 3456: uint8(255), + 3457: uint8(255), + 3458: uint8(255), + 3459: uint8(127), + 3466: uint8(7), + 3468: uint8(240), + 3470: uint8(255), + 3471: uint8(255), + 3472: uint8(255), + 3473: uint8(255), + 3474: uint8(255), + 3475: uint8(255), + 3476: uint8(255), + 3477: uint8(255), + 3478: uint8(255), + 3479: uint8(255), + 3480: uint8(255), + 3481: uint8(255), + 3482: uint8(255), + 3483: uint8(255), + 3484: uint8(255), + 3485: uint8(255), + 3486: uint8(255), + 3487: uint8(255), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(255), + 3506: uint8(255), + 3507: uint8(255), + 3508: uint8(255), + 3509: uint8(255), + 3510: uint8(255), + 3511: uint8(255), + 3512: uint8(255), + 3513: uint8(255), + 3514: uint8(255), + 3515: uint8(255), + 3516: uint8(255), + 3517: uint8(255), + 3518: uint8(255), + 3519: uint8(15), + 3520: uint8(255), + 3521: uint8(255), + 3522: uint8(255), + 3523: uint8(255), + 3524: uint8(255), + 3525: uint8(255), + 3526: uint8(255), + 3527: uint8(255), + 3528: uint8(255), + 3529: uint8(255), + 3530: uint8(255), + 3531: uint8(255), + 3532: uint8(255), + 3533: uint8(7), + 3534: uint8(255), + 3535: uint8(31), + 3536: uint8(255), + 3537: uint8(1), + 3538: uint8(255), + 3539: uint8(67), + 3552: uint8(255), + 3553: uint8(255), + 3554: uint8(255), + 3555: uint8(255), + 3556: uint8(255), + 3557: uint8(255), + 3558: uint8(255), + 3559: uint8(255), + 3560: uint8(255), + 3561: uint8(255), + 3562: uint8(223), + 3563: uint8(255), + 3564: uint8(255), + 3565: uint8(255), + 3566: uint8(255), + 3567: uint8(255), + 3568: uint8(255), + 3569: uint8(255), + 3570: uint8(255), + 3571: uint8(223), + 3572: uint8(100), + 3573: uint8(222), + 3574: uint8(255), + 3575: uint8(235), + 3576: uint8(239), + 3577: uint8(255), + 3578: uint8(255), + 3579: uint8(255), + 3580: uint8(255), + 3581: uint8(255), + 3582: uint8(255), + 3583: uint8(255), + 3584: uint8(191), + 3585: uint8(231), + 3586: uint8(223), + 3587: uint8(223), + 3588: uint8(255), + 3589: uint8(255), + 3590: uint8(255), + 3591: uint8(123), + 3592: uint8(95), + 3593: uint8(252), + 3594: uint8(253), + 3595: uint8(255), + 3596: uint8(255), + 3597: uint8(255), + 3598: uint8(255), + 3599: uint8(255), + 3600: uint8(255), + 3601: uint8(255), + 3602: uint8(255), + 3603: uint8(255), + 3604: uint8(255), + 3605: uint8(255), + 3606: uint8(255), + 3607: uint8(255), + 3608: uint8(255), + 3609: uint8(255), + 3610: uint8(255), + 3611: uint8(255), + 3612: uint8(255), + 3613: uint8(255), + 3614: uint8(255), + 3615: uint8(255), + 3616: uint8(255), + 3617: uint8(255), + 3618: uint8(255), + 3619: uint8(255), + 3620: uint8(255), + 3621: uint8(255), + 3622: uint8(255), + 3623: uint8(255), + 3624: uint8(255), + 3625: uint8(255), + 3626: uint8(255), + 3627: uint8(255), + 3628: uint8(255), + 3629: uint8(255), + 3630: uint8(255), + 3631: uint8(255), + 3632: uint8(255), + 3633: uint8(255), + 3634: uint8(255), + 3635: uint8(255), + 3636: uint8(63), + 3637: uint8(255), + 3638: uint8(255), + 3639: uint8(255), + 3640: uint8(253), + 3641: uint8(255), + 3642: uint8(255), + 3643: uint8(247), + 3644: uint8(255), + 3645: uint8(255), + 3646: uint8(255), + 3647: uint8(247), + 3648: uint8(255), + 3649: uint8(255), + 3650: uint8(223), + 3651: uint8(255), + 3652: uint8(255), + 3653: uint8(255), + 3654: uint8(223), + 3655: uint8(255), + 3656: uint8(255), + 3657: uint8(127), + 3658: uint8(255), + 3659: uint8(255), + 3660: uint8(255), + 3661: uint8(127), + 3662: uint8(255), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(253), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(253), + 3670: uint8(255), + 3671: uint8(255), + 3672: uint8(247), + 3673: uint8(207), + 3674: uint8(255), + 3675: uint8(255), + 3676: uint8(255), + 3677: uint8(255), + 3678: uint8(255), + 3679: uint8(255), + 3680: uint8(127), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(249), + 3684: uint8(219), + 3685: uint8(7), + 3712: uint8(255), + 3713: uint8(255), + 3714: uint8(255), + 3715: uint8(255), + 3716: uint8(255), + 3717: uint8(31), + 3718: uint8(128), + 3719: uint8(63), + 3720: uint8(255), + 3721: uint8(67), + 3768: uint8(255), + 3769: uint8(255), + 3770: uint8(255), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(15), + 3774: uint8(255), + 3775: uint8(3), + 3776: uint8(255), + 3777: uint8(255), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3782: uint8(255), + 3783: uint8(255), + 3784: uint8(255), + 3785: uint8(255), + 3786: uint8(255), + 3787: uint8(255), + 3788: uint8(255), + 3789: uint8(255), + 3790: uint8(255), + 3791: uint8(255), + 3792: uint8(255), + 3793: uint8(255), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(255), + 3798: uint8(255), + 3799: uint8(255), + 3800: uint8(31), + 3808: uint8(255), + 3809: uint8(255), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(255), + 3816: uint8(143), + 3817: uint8(8), + 3818: uint8(255), + 3819: uint8(3), + 3840: uint8(239), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(150), + 3845: uint8(254), + 3846: uint8(247), + 3847: uint8(10), + 3848: uint8(132), + 3849: uint8(234), + 3850: uint8(150), + 3851: uint8(170), + 3852: uint8(150), + 3853: uint8(247), + 3854: uint8(247), + 3855: uint8(94), + 3856: uint8(255), + 3857: uint8(251), + 3858: uint8(255), + 3859: uint8(15), + 3860: uint8(238), + 3861: uint8(251), + 3862: uint8(255), + 3863: uint8(15), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(3), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(3), + 3886: uint8(255), + 3887: uint8(255), + 3888: uint8(255), + 3889: uint8(3), +} + +func Xiswalpha(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table3[uint32(int32(_table3[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + if wc < uint32(0x2fffe) { + return int32(1) + } + return 0 +} + +func X__iswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalpha(tls, c) +} + +func Xiswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalpha_l(tls, c, l) +} + +func Xiswblank(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, int32(wc)) +} + +func X__iswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswblank(tls, c) +} + +func Xiswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswblank_l(tls, c, l) +} + +func Xiswcntrl(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc < uint32(32) || wc-Uint32FromInt32(0x7f) < uint32(33) || wc-Uint32FromInt32(0x2028) < uint32(2) || wc-Uint32FromInt32(0xfff9) < uint32(3)) +} + +func X__iswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswcntrl(tls, c) +} + +func Xiswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswcntrl_l(tls, c, l) +} + +const WCTYPE_ALNUM = 1 +const WCTYPE_ALPHA = 2 +const WCTYPE_BLANK = 3 +const WCTYPE_CNTRL = 4 +const WCTYPE_DIGIT = 5 +const WCTYPE_GRAPH = 6 +const WCTYPE_LOWER = 7 +const WCTYPE_PRINT = 8 +const WCTYPE_PUNCT = 9 +const WCTYPE_SPACE = 10 +const WCTYPE_UPPER = 11 +const WCTYPE_XDIGIT = 12 + +func Xiswctype(tls *TLS, wc Twint_t, type1 Twctype_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v type1=%v, (%v:)", tls, wc, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + switch type1 { + case uint64(WCTYPE_ALNUM): + return Xiswalnum(tls, wc) + case uint64(WCTYPE_ALPHA): + return Xiswalpha(tls, wc) + case uint64(WCTYPE_BLANK): + return Xiswblank(tls, wc) + case uint64(WCTYPE_CNTRL): + return Xiswcntrl(tls, wc) + case uint64(WCTYPE_DIGIT): + return BoolInt32(wc-uint32('0') < uint32(10)) + case uint64(WCTYPE_GRAPH): + return Xiswgraph(tls, wc) + case uint64(WCTYPE_LOWER): + return Xiswlower(tls, wc) + case uint64(WCTYPE_PRINT): + return Xiswprint(tls, wc) + case uint64(WCTYPE_PUNCT): + return Xiswpunct(tls, wc) + case uint64(WCTYPE_SPACE): + return Xiswspace(tls, wc) + case uint64(WCTYPE_UPPER): + return Xiswupper(tls, wc) + case uint64(WCTYPE_XDIGIT): + return Xiswxdigit(tls, wc) + } + return 0 +} + +func Xwctype(tls *TLS, s uintptr) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var p uintptr + _, _ = i, p + i = int32(1) + p = uintptr(unsafe.Pointer(&_names)) + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(p))) && !(Xstrcmp(tls, s, p) != 0) { + return uint64(i) + } + goto _1 + _1: + ; + i++ + p += uintptr(6) + } + return uint64(0) +} + +/* order must match! */ +var _names = [73]uint8{'a', 'l', 'n', 'u', 'm', 0, 'a', 'l', 'p', 'h', 'a', 0, 'b', 'l', 'a', 'n', 'k', 0, 'c', 'n', 't', 'r', 'l', 0, 'd', 'i', 'g', 'i', 't', 0, 'g', 'r', 'a', 'p', 'h', 0, 'l', 'o', 'w', 'e', 'r', 0, 'p', 'r', 'i', 'n', 't', 0, 'p', 'u', 'n', 'c', 't', 0, 's', 'p', 'a', 'c', 'e', 0, 'u', 'p', 'p', 'e', 'r', 0, 'x', 'd', 'i', 'g', 'i', 't'} + +func X__iswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswctype(tls, c, t) +} + +func X__wctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctype(tls, s) +} + +func Xiswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswctype_l(tls, c, t, l) +} + +func Xwctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctype_l(tls, s, l) +} + +func Xiswdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-uint32('0') < uint32(10)) +} + +func X__iswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswdigit(tls, c) +} + +func Xiswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswdigit_l(tls, c, l) +} + +func Xiswgraph(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* ISO C defines this function as: */ + return BoolInt32(!(Xiswspace(tls, wc) != 0) && Xiswprint(tls, wc) != 0) +} + +func X__iswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswgraph(tls, c) +} + +func Xiswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswgraph_l(tls, c, l) +} + +func Xiswlower(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowupper(tls, wc) != wc) +} + +func X__iswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswlower(tls, c) +} + +func Xiswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswlower_l(tls, c, l) +} + +/* Consider all legal codepoints as printable except for: + * - C0 and C1 control characters + * - U+2028 and U+2029 (line/para break) + * - U+FFF9 through U+FFFB (interlinear annotation controls) + * The following code is optimized heavily to make hot paths for the + * expected printable characters. */ + +func Xiswprint(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0xff) { + return BoolInt32((wc+uint32(1))&uint32(0x7f) >= uint32(0x21)) + } + if wc < uint32(0x2028) || wc-uint32(0x202a) < uint32(Int32FromInt32(0xd800)-Int32FromInt32(0x202a)) || wc-uint32(0xe000) < uint32(Int32FromInt32(0xfff9)-Int32FromInt32(0xe000)) { + return int32(1) + } + if wc-uint32(0xfffc) > uint32(Int32FromInt32(0x10ffff)-Int32FromInt32(0xfffc)) || wc&uint32(0xfffe) == uint32(0xfffe) { + return 0 + } + return int32(1) +} + +func X__iswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswprint(tls, c) +} + +func Xiswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswprint_l(tls, c, l) +} + +var _table4 = [4000]uint8{ + 0: uint8(18), + 1: uint8(16), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(16), + 18: uint8(16), + 19: uint8(34), + 20: uint8(35), + 21: uint8(16), + 22: uint8(36), + 23: uint8(37), + 24: uint8(38), + 25: uint8(39), + 26: uint8(40), + 27: uint8(41), + 28: uint8(42), + 29: uint8(43), + 30: uint8(16), + 31: uint8(44), + 32: uint8(45), + 33: uint8(46), + 34: uint8(17), + 35: uint8(17), + 36: uint8(47), + 37: uint8(17), + 38: uint8(17), + 39: uint8(17), + 40: uint8(17), + 41: uint8(17), + 42: uint8(17), + 43: uint8(48), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(52), + 48: uint8(53), + 49: uint8(54), + 50: uint8(55), + 51: uint8(17), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(56), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(57), + 165: uint8(16), + 166: uint8(58), + 167: uint8(59), + 168: uint8(60), + 169: uint8(61), + 170: uint8(62), + 171: uint8(63), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(16), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(64), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(65), + 249: uint8(16), + 250: uint8(16), + 251: uint8(66), + 252: uint8(16), + 253: uint8(67), + 254: uint8(68), + 255: uint8(69), + 256: uint8(16), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(16), + 261: uint8(73), + 262: uint8(16), + 263: uint8(16), + 264: uint8(74), + 265: uint8(75), + 266: uint8(76), + 267: uint8(77), + 268: uint8(78), + 269: uint8(16), + 270: uint8(79), + 271: uint8(80), + 272: uint8(81), + 273: uint8(82), + 274: uint8(83), + 275: uint8(84), + 276: uint8(85), + 277: uint8(86), + 278: uint8(87), + 279: uint8(88), + 280: uint8(89), + 281: uint8(90), + 282: uint8(91), + 283: uint8(16), + 284: uint8(92), + 285: uint8(93), + 286: uint8(94), + 287: uint8(95), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(96), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(97), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(98), + 363: uint8(99), + 364: uint8(16), + 365: uint8(16), + 366: uint8(100), + 367: uint8(101), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(102), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(103), + 465: uint8(104), + 466: uint8(105), + 467: uint8(106), + 468: uint8(16), + 469: uint8(16), + 470: uint8(107), + 471: uint8(108), + 472: uint8(17), + 473: uint8(17), + 474: uint8(109), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(110), + 482: uint8(111), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(112), + 489: uint8(113), + 490: uint8(16), + 491: uint8(16), + 492: uint8(114), + 493: uint8(115), + 494: uint8(116), + 495: uint8(16), + 496: uint8(117), + 497: uint8(118), + 498: uint8(119), + 499: uint8(17), + 500: uint8(17), + 501: uint8(17), + 502: uint8(120), + 503: uint8(121), + 504: uint8(122), + 505: uint8(123), + 506: uint8(124), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 580: uint8(254), + 581: uint8(255), + 583: uint8(252), + 584: uint8(1), + 587: uint8(248), + 588: uint8(1), + 591: uint8(120), + 596: uint8(255), + 597: uint8(251), + 598: uint8(223), + 599: uint8(251), + 602: uint8(128), + 606: uint8(128), + 632: uint8(60), + 634: uint8(252), + 635: uint8(255), + 636: uint8(224), + 637: uint8(175), + 638: uint8(255), + 639: uint8(255), + 640: uint8(255), + 641: uint8(255), + 642: uint8(255), + 643: uint8(255), + 644: uint8(255), + 645: uint8(255), + 646: uint8(255), + 647: uint8(255), + 648: uint8(223), + 649: uint8(255), + 650: uint8(255), + 651: uint8(255), + 652: uint8(255), + 653: uint8(255), + 654: uint8(32), + 655: uint8(64), + 656: uint8(176), + 670: uint8(64), + 688: uint8(252), + 689: uint8(3), + 715: uint8(252), + 721: uint8(230), + 722: uint8(254), + 723: uint8(255), + 724: uint8(255), + 725: uint8(255), + 727: uint8(64), + 728: uint8(73), + 734: uint8(24), + 736: uint8(255), + 737: uint8(255), + 739: uint8(216), + 747: uint8(1), + 749: uint8(60), + 762: uint8(16), + 763: uint8(224), + 764: uint8(1), + 765: uint8(30), + 767: uint8(96), + 768: uint8(255), + 769: uint8(191), + 776: uint8(255), + 777: uint8(7), + 797: uint8(248), + 798: uint8(207), + 799: uint8(227), + 803: uint8(3), + 805: uint8(32), + 806: uint8(255), + 807: uint8(127), + 811: uint8(78), + 826: uint8(8), + 828: uint8(7), + 829: uint8(252), + 839: uint8(16), + 841: uint8(32), + 842: uint8(30), + 844: uint8(48), + 846: uint8(1), + 855: uint8(16), + 857: uint8(32), + 862: uint8(252), + 863: uint8(111), + 871: uint8(16), + 873: uint8(32), + 878: uint8(64), + 887: uint8(16), + 889: uint8(32), + 894: uint8(3), + 895: uint8(224), + 903: uint8(16), + 905: uint8(32), + 910: uint8(253), + 921: uint8(32), + 926: uint8(255), + 927: uint8(7), + 928: uint8(16), + 937: uint8(32), + 942: uint8(128), + 943: uint8(255), + 944: uint8(16), + 951: uint8(16), + 953: uint8(32), + 967: uint8(24), + 969: uint8(160), + 971: uint8(127), + 974: uint8(255), + 975: uint8(3), + 985: uint8(4), + 990: uint8(16), + 997: uint8(128), + 999: uint8(128), + 1000: uint8(192), + 1001: uint8(223), + 1003: uint8(12), + 1015: uint8(4), + 1017: uint8(31), + 1024: uint8(254), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1029: uint8(252), + 1030: uint8(255), + 1031: uint8(255), + 1040: uint8(252), + 1047: uint8(192), + 1048: uint8(255), + 1049: uint8(223), + 1050: uint8(255), + 1051: uint8(7), + 1062: uint8(128), + 1063: uint8(6), + 1065: uint8(252), + 1075: uint8(192), + 1087: uint8(8), + 1099: uint8(224), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(31), + 1106: uint8(255), + 1107: uint8(3), + 1120: uint8(1), + 1165: uint8(96), + 1168: uint8(1), + 1171: uint8(24), + 1181: uint8(56), + 1186: uint8(16), + 1190: uint8(112), + 1206: uint8(48), + 1209: uint8(254), + 1210: uint8(127), + 1211: uint8(47), + 1214: uint8(255), + 1215: uint8(3), + 1216: uint8(255), + 1217: uint8(127), + 1255: uint8(14), + 1256: uint8(49), + 1275: uint8(196), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(255), + 1283: uint8(192), + 1292: uint8(1), + 1294: uint8(224), + 1295: uint8(159), + 1300: uint8(127), + 1301: uint8(63), + 1302: uint8(255), + 1303: uint8(127), + 1318: uint8(16), + 1320: uint8(16), + 1323: uint8(252), + 1324: uint8(255), + 1325: uint8(255), + 1326: uint8(255), + 1327: uint8(31), + 1333: uint8(12), + 1340: uint8(64), + 1342: uint8(12), + 1343: uint8(240), + 1350: uint8(128), + 1351: uint8(248), + 1359: uint8(192), + 1368: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(255), + 1373: uint8(33), + 1374: uint8(144), + 1375: uint8(3), + 1400: uint8(255), + 1401: uint8(255), + 1402: uint8(255), + 1403: uint8(255), + 1404: uint8(127), + 1406: uint8(224), + 1407: uint8(251), + 1431: uint8(160), + 1432: uint8(3), + 1433: uint8(224), + 1435: uint8(224), + 1437: uint8(224), + 1439: uint8(96), + 1440: uint8(128), + 1441: uint8(248), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(252), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(255), + 1449: uint8(255), + 1450: uint8(255), + 1451: uint8(127), + 1452: uint8(223), + 1453: uint8(255), + 1454: uint8(241), + 1455: uint8(127), + 1456: uint8(255), + 1457: uint8(127), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(255), + 1463: uint8(255), + 1466: uint8(255), + 1467: uint8(255), + 1468: uint8(255), + 1469: uint8(255), + 1470: uint8(1), + 1472: uint8(123), + 1473: uint8(3), + 1474: uint8(208), + 1475: uint8(193), + 1476: uint8(175), + 1477: uint8(66), + 1479: uint8(12), + 1480: uint8(31), + 1481: uint8(188), + 1482: uint8(255), + 1483: uint8(255), + 1489: uint8(14), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(255), + 1497: uint8(255), + 1498: uint8(255), + 1499: uint8(255), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(255), + 1503: uint8(255), + 1504: uint8(255), + 1505: uint8(255), + 1506: uint8(255), + 1507: uint8(255), + 1508: uint8(127), + 1512: uint8(255), + 1513: uint8(7), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(255), + 1522: uint8(255), + 1523: uint8(255), + 1524: uint8(255), + 1525: uint8(255), + 1526: uint8(63), + 1533: uint8(252), + 1534: uint8(255), + 1535: uint8(255), + 1536: uint8(255), + 1537: uint8(255), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(207), + 1551: uint8(255), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(63), + 1555: uint8(255), + 1556: uint8(255), + 1557: uint8(255), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1596: uint8(224), + 1597: uint8(135), + 1598: uint8(3), + 1599: uint8(254), + 1614: uint8(1), + 1615: uint8(128), + 1632: uint8(255), + 1633: uint8(255), + 1634: uint8(255), + 1635: uint8(255), + 1636: uint8(255), + 1637: uint8(127), + 1638: uint8(255), + 1639: uint8(255), + 1640: uint8(255), + 1641: uint8(255), + 1648: uint8(255), + 1649: uint8(255), + 1650: uint8(255), + 1651: uint8(251), + 1652: uint8(255), + 1653: uint8(255), + 1654: uint8(255), + 1655: uint8(255), + 1656: uint8(255), + 1657: uint8(255), + 1658: uint8(255), + 1659: uint8(255), + 1660: uint8(255), + 1661: uint8(255), + 1662: uint8(15), + 1664: uint8(255), + 1665: uint8(255), + 1666: uint8(255), + 1667: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1670: uint8(255), + 1671: uint8(255), + 1672: uint8(255), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(255), + 1683: uint8(255), + 1684: uint8(255), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(63), + 1694: uint8(255), + 1695: uint8(15), + 1696: uint8(30), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(1), + 1701: uint8(252), + 1702: uint8(193), + 1703: uint8(224), + 1715: uint8(30), + 1716: uint8(1), + 1727: uint8(8), + 1746: uint8(255), + 1747: uint8(255), + 1752: uint8(255), + 1753: uint8(255), + 1754: uint8(255), + 1755: uint8(255), + 1756: uint8(15), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(127), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1790: uint8(255), + 1791: uint8(255), + 1816: uint8(255), + 1817: uint8(255), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(127), + 1855: uint8(192), + 1857: uint8(224), + 1869: uint8(128), + 1870: uint8(15), + 1871: uint8(112), + 1886: uint8(255), + 1888: uint8(255), + 1889: uint8(255), + 1890: uint8(127), + 1892: uint8(3), + 1905: uint8(6), + 1920: uint8(64), + 1925: uint8(15), + 1926: uint8(255), + 1927: uint8(3), + 1934: uint8(240), + 1944: uint8(16), + 1945: uint8(192), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(3), + 1951: uint8(23), + 1957: uint8(248), + 1962: uint8(8), + 1963: uint8(128), + 1974: uint8(8), + 1976: uint8(255), + 1977: uint8(63), + 1979: uint8(192), + 1995: uint8(240), + 1998: uint8(128), + 1999: uint8(3), + 2007: uint8(128), + 2008: uint8(2), + 2011: uint8(192), + 2014: uint8(67), + 2027: uint8(8), + 2045: uint8(56), + 2048: uint8(1), + 2111: uint8(128), + 2117: uint8(2), + 2134: uint8(252), + 2135: uint8(255), + 2136: uint8(3), + 2151: uint8(192), + 2175: uint8(48), + 2176: uint8(255), + 2177: uint8(255), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(255), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(255), + 2184: uint8(255), + 2185: uint8(255), + 2186: uint8(247), + 2187: uint8(255), + 2188: uint8(127), + 2189: uint8(15), + 2207: uint8(128), + 2208: uint8(254), + 2209: uint8(255), + 2211: uint8(252), + 2212: uint8(1), + 2215: uint8(248), + 2216: uint8(1), + 2219: uint8(248), + 2220: uint8(63), + 2236: uint8(127), + 2237: uint8(127), + 2239: uint8(48), + 2240: uint8(135), + 2241: uint8(255), + 2242: uint8(255), + 2243: uint8(255), + 2244: uint8(255), + 2245: uint8(255), + 2246: uint8(143), + 2247: uint8(255), + 2254: uint8(224), + 2255: uint8(255), + 2256: uint8(255), + 2257: uint8(127), + 2258: uint8(255), + 2259: uint8(15), + 2260: uint8(1), + 2266: uint8(255), + 2267: uint8(255), + 2268: uint8(255), + 2269: uint8(255), + 2270: uint8(255), + 2271: uint8(63), + 2300: uint8(255), + 2301: uint8(255), + 2302: uint8(255), + 2303: uint8(15), + 2308: uint8(15), + 2323: uint8(128), + 2330: uint8(1), + 2349: uint8(128), + 2378: uint8(128), + 2379: uint8(255), + 2382: uint8(128), + 2383: uint8(255), + 2388: uint8(128), + 2389: uint8(255), + 2399: uint8(248), + 2402: uint8(192), + 2403: uint8(143), + 2407: uint8(128), + 2423: uint8(48), + 2424: uint8(255), + 2425: uint8(255), + 2426: uint8(252), + 2427: uint8(255), + 2428: uint8(255), + 2429: uint8(255), + 2430: uint8(255), + 2431: uint8(255), + 2439: uint8(135), + 2440: uint8(255), + 2441: uint8(1), + 2442: uint8(255), + 2443: uint8(1), + 2447: uint8(224), + 2451: uint8(224), + 2457: uint8(1), + 2460: uint8(96), + 2461: uint8(248), + 2462: uint8(127), + 2471: uint8(254), + 2475: uint8(255), + 2479: uint8(255), + 2483: uint8(30), + 2485: uint8(254), + 2527: uint8(252), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(255), + 2543: uint8(127), + 2563: uint8(224), + 2564: uint8(127), + 2568: uint8(192), + 2569: uint8(255), + 2570: uint8(255), + 2571: uint8(3), + 2600: uint8(192), + 2601: uint8(63), + 2602: uint8(252), + 2603: uint8(255), + 2604: uint8(63), + 2607: uint8(128), + 2608: uint8(3), + 2615: uint8(254), + 2616: uint8(3), + 2617: uint8(32), + 2630: uint8(24), + 2632: uint8(15), + 2638: uint8(56), + 2648: uint8(225), + 2649: uint8(63), + 2651: uint8(232), + 2652: uint8(254), + 2653: uint8(255), + 2654: uint8(31), + 2662: uint8(96), + 2663: uint8(63), + 2677: uint8(2), + 2685: uint8(6), + 2695: uint8(24), + 2697: uint8(32), + 2700: uint8(192), + 2701: uint8(31), + 2702: uint8(31), + 2728: uint8(68), + 2729: uint8(248), + 2731: uint8(104), + 2744: uint8(76), + 2775: uint8(128), + 2776: uint8(255), + 2777: uint8(255), + 2778: uint8(255), + 2791: uint8(128), + 2792: uint8(14), + 2796: uint8(255), + 2797: uint8(31), + 2806: uint8(192), + 2821: uint8(8), + 2823: uint8(252), + 2855: uint8(14), + 2877: uint8(252), + 2878: uint8(7), + 2908: uint8(5), + 2918: uint8(24), + 2919: uint8(128), + 2920: uint8(255), + 2931: uint8(223), + 2932: uint8(7), + 2951: uint8(128), + 2952: uint8(62), + 2955: uint8(252), + 2956: uint8(255), + 2957: uint8(31), + 2958: uint8(3), + 2984: uint8(52), + 2994: uint8(128), + 3038: uint8(128), + 3039: uint8(1), + 3064: uint8(255), + 3065: uint8(255), + 3066: uint8(255), + 3067: uint8(255), + 3068: uint8(255), + 3069: uint8(255), + 3070: uint8(3), + 3071: uint8(128), + 3086: uint8(31), + 3110: uint8(255), + 3111: uint8(1), + 3149: uint8(192), + 3166: uint8(63), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(48), + 3179: uint8(248), + 3180: uint8(3), + 3216: uint8(255), + 3217: uint8(255), + 3218: uint8(255), + 3219: uint8(7), + 3260: uint8(4), + 3283: uint8(176), + 3284: uint8(15), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3302: uint8(255), + 3303: uint8(255), + 3304: uint8(255), + 3305: uint8(255), + 3306: uint8(255), + 3307: uint8(255), + 3308: uint8(255), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(255), + 3312: uint8(255), + 3313: uint8(255), + 3314: uint8(255), + 3315: uint8(255), + 3316: uint8(255), + 3317: uint8(255), + 3318: uint8(255), + 3319: uint8(255), + 3320: uint8(255), + 3321: uint8(255), + 3322: uint8(255), + 3323: uint8(255), + 3324: uint8(255), + 3325: uint8(255), + 3326: uint8(63), + 3328: uint8(255), + 3329: uint8(255), + 3330: uint8(255), + 3331: uint8(255), + 3332: uint8(127), + 3333: uint8(254), + 3334: uint8(255), + 3335: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3344: uint8(255), + 3345: uint8(255), + 3346: uint8(255), + 3347: uint8(255), + 3348: uint8(255), + 3349: uint8(255), + 3350: uint8(255), + 3351: uint8(255), + 3352: uint8(255), + 3353: uint8(255), + 3354: uint8(255), + 3355: uint8(255), + 3356: uint8(255), + 3357: uint8(1), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(63), + 3388: uint8(255), + 3389: uint8(255), + 3390: uint8(15), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(127), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(1), + 3448: uint8(2), + 3451: uint8(8), + 3455: uint8(8), + 3458: uint8(32), + 3462: uint8(32), + 3465: uint8(128), + 3469: uint8(128), + 3473: uint8(2), + 3477: uint8(2), + 3480: uint8(8), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(15), + 3507: uint8(248), + 3508: uint8(254), + 3509: uint8(255), + 3526: uint8(127), + 3529: uint8(128), + 3581: uint8(240), + 3583: uint8(128), + 3608: uint8(128), + 3609: uint8(255), + 3610: uint8(127), + 3624: uint8(112), + 3625: uint8(7), + 3627: uint8(192), + 3662: uint8(254), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(255), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(255), + 3670: uint8(31), + 3680: uint8(254), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(255), + 3684: uint8(255), + 3685: uint8(255), + 3686: uint8(255), + 3687: uint8(63), + 3742: uint8(3), + 3744: uint8(255), + 3745: uint8(255), + 3746: uint8(255), + 3747: uint8(255), + 3748: uint8(255), + 3749: uint8(15), + 3750: uint8(255), + 3751: uint8(255), + 3752: uint8(255), + 3753: uint8(255), + 3754: uint8(255), + 3755: uint8(255), + 3756: uint8(255), + 3757: uint8(255), + 3758: uint8(255), + 3759: uint8(255), + 3760: uint8(255), + 3761: uint8(255), + 3762: uint8(15), + 3764: uint8(255), + 3765: uint8(127), + 3766: uint8(254), + 3767: uint8(255), + 3768: uint8(254), + 3769: uint8(255), + 3770: uint8(254), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(255), + 3774: uint8(63), + 3776: uint8(255), + 3777: uint8(31), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3785: uint8(252), + 3789: uint8(28), + 3793: uint8(252), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(31), + 3804: uint8(192), + 3805: uint8(255), + 3806: uint8(255), + 3807: uint8(255), + 3808: uint8(7), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(15), + 3816: uint8(255), + 3817: uint8(1), + 3818: uint8(3), + 3820: uint8(63), + 3840: uint8(255), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(255), + 3845: uint8(255), + 3846: uint8(255), + 3847: uint8(255), + 3848: uint8(255), + 3849: uint8(255), + 3850: uint8(255), + 3851: uint8(255), + 3852: uint8(255), + 3853: uint8(255), + 3854: uint8(255), + 3855: uint8(255), + 3856: uint8(255), + 3857: uint8(255), + 3858: uint8(255), + 3859: uint8(255), + 3860: uint8(255), + 3861: uint8(255), + 3862: uint8(255), + 3863: uint8(255), + 3864: uint8(255), + 3865: uint8(255), + 3866: uint8(63), + 3868: uint8(255), + 3869: uint8(31), + 3870: uint8(255), + 3871: uint8(7), + 3872: uint8(255), + 3873: uint8(255), + 3874: uint8(255), + 3875: uint8(255), + 3876: uint8(255), + 3877: uint8(255), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(255), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(255), + 3886: uint8(15), + 3888: uint8(255), + 3889: uint8(255), + 3890: uint8(255), + 3891: uint8(255), + 3892: uint8(255), + 3893: uint8(255), + 3894: uint8(255), + 3895: uint8(255), + 3896: uint8(255), + 3897: uint8(255), + 3898: uint8(255), + 3899: uint8(1), + 3900: uint8(255), + 3901: uint8(15), + 3904: uint8(255), + 3905: uint8(15), + 3906: uint8(255), + 3907: uint8(255), + 3908: uint8(255), + 3909: uint8(255), + 3910: uint8(255), + 3911: uint8(255), + 3912: uint8(255), + 3914: uint8(255), + 3915: uint8(3), + 3916: uint8(255), + 3917: uint8(255), + 3918: uint8(255), + 3919: uint8(255), + 3920: uint8(255), + 3922: uint8(255), + 3923: uint8(255), + 3924: uint8(255), + 3925: uint8(63), + 3936: uint8(255), + 3937: uint8(239), + 3938: uint8(255), + 3939: uint8(255), + 3940: uint8(255), + 3941: uint8(255), + 3942: uint8(255), + 3943: uint8(255), + 3944: uint8(255), + 3945: uint8(255), + 3946: uint8(255), + 3947: uint8(255), + 3948: uint8(255), + 3949: uint8(255), + 3950: uint8(123), + 3951: uint8(252), + 3952: uint8(255), + 3953: uint8(255), + 3954: uint8(255), + 3955: uint8(255), + 3956: uint8(231), + 3957: uint8(199), + 3958: uint8(255), + 3959: uint8(255), + 3960: uint8(255), + 3961: uint8(231), + 3962: uint8(255), + 3963: uint8(255), + 3964: uint8(255), + 3965: uint8(255), + 3966: uint8(255), + 3967: uint8(255), + 3968: uint8(255), + 3969: uint8(255), + 3970: uint8(255), + 3971: uint8(255), + 3972: uint8(255), + 3973: uint8(255), + 3974: uint8(255), + 3975: uint8(255), + 3976: uint8(255), + 3977: uint8(255), + 3978: uint8(15), + 3980: uint8(255), + 3981: uint8(63), + 3982: uint8(15), + 3983: uint8(7), + 3984: uint8(7), + 3986: uint8(63), +} + +func Xiswpunct(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table4[uint32(int32(_table4[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + return 0 +} + +func X__iswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswpunct(tls, c) +} + +func Xiswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswpunct_l(tls, c, l) +} + +type Tmbstate_t = struct { + F__opaque1 uint32 + F__opaque2 uint32 +} + +type t__mbstate_t = Tmbstate_t + +/* Our definition of whitespace is the Unicode White_Space property, + * minus non-breaking spaces (U+00A0, U+2007, and U+202F) and script- + * specific characters with non-blank glyphs (U+1680 and U+180E). */ + +func Xiswspace(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc != 0 && Xwcschr(tls, uintptr(unsafe.Pointer(&_spaces)), int32(wc)) != 0) +} + +var _spaces = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__iswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswspace(tls, c) +} + +func Xiswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswspace_l(tls, c, l) +} + +func Xiswupper(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowlower(tls, wc) != wc) +} + +func X__iswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswupper(tls, c) +} + +func Xiswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswupper_l(tls, c, l) +} + +func Xiswxdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-Uint32FromUint8('0') < uint32(10) || wc|Uint32FromInt32(32)-Uint32FromUint8('a') < uint32(6)) +} + +func X__iswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswxdigit(tls, c) +} + +func Xiswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswxdigit_l(tls, c, l) +} + +func Xisxdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) +} + +func X__isxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisxdigit(tls, c) +} + +func Xisxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isxdigit_l(tls, c, l) +} + +// C documentation +// +// /* nonsense function that should NEVER be used! */ +func Xtoascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return c & int32(0x7f) +} + +func Xtolower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('A') < uint32(26)) != 0 { + return c | int32(32) + } + return c +} + +func X__tolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtolower(tls, c) +} + +func Xtolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__tolower_l(tls, c, l) +} + +func Xtoupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('a') < uint32(26)) != 0 { + return c & int32(0x5f) + } + return c +} + +func X__toupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtoupper(tls, c) +} + +func Xtoupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__toupper_l(tls, c, l) +} + +var _tab1 = [2666]uint8{ + 0: uint8(7), + 1: uint8(8), + 2: uint8(9), + 3: uint8(10), + 4: uint8(11), + 5: uint8(12), + 6: uint8(6), + 7: uint8(6), + 8: uint8(6), + 9: uint8(6), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), + 13: uint8(6), + 14: uint8(6), + 15: uint8(6), + 16: uint8(13), + 17: uint8(6), + 18: uint8(6), + 19: uint8(14), + 20: uint8(6), + 21: uint8(6), + 22: uint8(6), + 23: uint8(6), + 24: uint8(6), + 25: uint8(6), + 26: uint8(6), + 27: uint8(6), + 28: uint8(15), + 29: uint8(16), + 30: uint8(17), + 31: uint8(18), + 32: uint8(6), + 33: uint8(19), + 34: uint8(6), + 35: uint8(6), + 36: uint8(6), + 37: uint8(6), + 38: uint8(6), + 39: uint8(6), + 40: uint8(6), + 41: uint8(6), + 42: uint8(6), + 43: uint8(6), + 44: uint8(20), + 45: uint8(21), + 46: uint8(6), + 47: uint8(6), + 48: uint8(6), + 49: uint8(6), + 50: uint8(6), + 51: uint8(6), + 52: uint8(6), + 53: uint8(6), + 54: uint8(6), + 55: uint8(6), + 56: uint8(6), + 57: uint8(6), + 58: uint8(6), + 59: uint8(6), + 60: uint8(6), + 61: uint8(6), + 62: uint8(6), + 63: uint8(6), + 64: uint8(6), + 65: uint8(6), + 66: uint8(6), + 67: uint8(6), + 68: uint8(6), + 69: uint8(6), + 70: uint8(6), + 71: uint8(6), + 72: uint8(6), + 73: uint8(6), + 74: uint8(6), + 75: uint8(6), + 76: uint8(6), + 77: uint8(6), + 78: uint8(6), + 79: uint8(6), + 80: uint8(6), + 81: uint8(6), + 82: uint8(6), + 83: uint8(6), + 84: uint8(6), + 85: uint8(6), + 86: uint8(6), + 87: uint8(6), + 88: uint8(6), + 89: uint8(6), + 90: uint8(6), + 91: uint8(6), + 92: uint8(6), + 93: uint8(6), + 94: uint8(6), + 95: uint8(6), + 96: uint8(6), + 97: uint8(6), + 98: uint8(6), + 99: uint8(6), + 100: uint8(6), + 101: uint8(6), + 102: uint8(6), + 103: uint8(6), + 104: uint8(6), + 105: uint8(6), + 106: uint8(6), + 107: uint8(6), + 108: uint8(6), + 109: uint8(6), + 110: uint8(6), + 111: uint8(6), + 112: uint8(6), + 113: uint8(6), + 114: uint8(6), + 115: uint8(6), + 116: uint8(6), + 117: uint8(6), + 118: uint8(6), + 119: uint8(6), + 120: uint8(6), + 121: uint8(6), + 122: uint8(6), + 123: uint8(6), + 124: uint8(6), + 125: uint8(6), + 126: uint8(6), + 127: uint8(6), + 128: uint8(6), + 129: uint8(6), + 130: uint8(6), + 131: uint8(6), + 132: uint8(6), + 133: uint8(6), + 134: uint8(6), + 135: uint8(6), + 136: uint8(6), + 137: uint8(6), + 138: uint8(6), + 139: uint8(6), + 140: uint8(6), + 141: uint8(6), + 142: uint8(6), + 143: uint8(6), + 144: uint8(6), + 145: uint8(6), + 146: uint8(6), + 147: uint8(6), + 148: uint8(6), + 149: uint8(6), + 150: uint8(6), + 151: uint8(6), + 152: uint8(6), + 153: uint8(6), + 154: uint8(6), + 155: uint8(6), + 156: uint8(6), + 157: uint8(6), + 158: uint8(6), + 159: uint8(6), + 160: uint8(6), + 161: uint8(6), + 162: uint8(6), + 163: uint8(6), + 164: uint8(6), + 165: uint8(6), + 166: uint8(22), + 167: uint8(23), + 168: uint8(6), + 169: uint8(6), + 170: uint8(6), + 171: uint8(24), + 172: uint8(6), + 173: uint8(6), + 174: uint8(6), + 175: uint8(6), + 176: uint8(6), + 177: uint8(6), + 178: uint8(6), + 179: uint8(6), + 180: uint8(6), + 181: uint8(6), + 182: uint8(6), + 183: uint8(6), + 184: uint8(6), + 185: uint8(6), + 186: uint8(6), + 187: uint8(6), + 188: uint8(6), + 189: uint8(6), + 190: uint8(6), + 191: uint8(6), + 192: uint8(6), + 193: uint8(6), + 194: uint8(6), + 195: uint8(6), + 196: uint8(6), + 197: uint8(6), + 198: uint8(6), + 199: uint8(6), + 200: uint8(6), + 201: uint8(6), + 202: uint8(6), + 203: uint8(6), + 204: uint8(6), + 205: uint8(6), + 206: uint8(6), + 207: uint8(6), + 208: uint8(6), + 209: uint8(6), + 210: uint8(6), + 211: uint8(6), + 212: uint8(6), + 213: uint8(6), + 214: uint8(6), + 215: uint8(6), + 216: uint8(6), + 217: uint8(6), + 218: uint8(6), + 219: uint8(6), + 220: uint8(6), + 221: uint8(6), + 222: uint8(6), + 223: uint8(6), + 224: uint8(6), + 225: uint8(6), + 226: uint8(6), + 227: uint8(6), + 228: uint8(6), + 229: uint8(6), + 230: uint8(6), + 231: uint8(6), + 232: uint8(6), + 233: uint8(6), + 234: uint8(6), + 235: uint8(6), + 236: uint8(6), + 237: uint8(6), + 238: uint8(6), + 239: uint8(6), + 240: uint8(6), + 241: uint8(6), + 242: uint8(6), + 243: uint8(6), + 244: uint8(6), + 245: uint8(6), + 246: uint8(6), + 247: uint8(6), + 248: uint8(6), + 249: uint8(6), + 250: uint8(6), + 251: uint8(6), + 252: uint8(6), + 253: uint8(6), + 254: uint8(6), + 255: uint8(25), + 256: uint8(6), + 257: uint8(6), + 258: uint8(6), + 259: uint8(6), + 260: uint8(26), + 261: uint8(6), + 262: uint8(6), + 263: uint8(6), + 264: uint8(6), + 265: uint8(6), + 266: uint8(6), + 267: uint8(6), + 268: uint8(27), + 269: uint8(6), + 270: uint8(6), + 271: uint8(6), + 272: uint8(6), + 273: uint8(6), + 274: uint8(6), + 275: uint8(6), + 276: uint8(6), + 277: uint8(6), + 278: uint8(6), + 279: uint8(6), + 280: uint8(28), + 281: uint8(6), + 282: uint8(6), + 283: uint8(6), + 284: uint8(6), + 285: uint8(6), + 286: uint8(6), + 287: uint8(6), + 288: uint8(6), + 289: uint8(6), + 290: uint8(6), + 291: uint8(6), + 292: uint8(6), + 293: uint8(6), + 294: uint8(6), + 295: uint8(6), + 296: uint8(6), + 297: uint8(6), + 298: uint8(6), + 299: uint8(6), + 300: uint8(6), + 301: uint8(6), + 302: uint8(6), + 303: uint8(6), + 304: uint8(6), + 305: uint8(6), + 306: uint8(6), + 307: uint8(6), + 308: uint8(6), + 309: uint8(6), + 310: uint8(6), + 311: uint8(6), + 312: uint8(6), + 313: uint8(6), + 314: uint8(6), + 315: uint8(6), + 316: uint8(6), + 317: uint8(6), + 318: uint8(6), + 319: uint8(6), + 320: uint8(6), + 321: uint8(6), + 322: uint8(6), + 323: uint8(6), + 324: uint8(6), + 325: uint8(6), + 326: uint8(6), + 327: uint8(6), + 328: uint8(6), + 329: uint8(6), + 330: uint8(6), + 331: uint8(6), + 332: uint8(6), + 333: uint8(6), + 334: uint8(6), + 335: uint8(6), + 336: uint8(6), + 337: uint8(6), + 338: uint8(6), + 339: uint8(6), + 340: uint8(6), + 341: uint8(6), + 342: uint8(6), + 343: uint8(6), + 344: uint8(6), + 345: uint8(6), + 346: uint8(6), + 347: uint8(6), + 348: uint8(6), + 349: uint8(6), + 350: uint8(6), + 351: uint8(6), + 352: uint8(6), + 353: uint8(6), + 354: uint8(6), + 355: uint8(6), + 356: uint8(6), + 357: uint8(6), + 358: uint8(6), + 359: uint8(6), + 360: uint8(6), + 361: uint8(6), + 362: uint8(6), + 363: uint8(6), + 364: uint8(6), + 365: uint8(6), + 366: uint8(29), + 367: uint8(6), + 368: uint8(6), + 369: uint8(6), + 370: uint8(6), + 371: uint8(6), + 372: uint8(6), + 373: uint8(6), + 374: uint8(6), + 375: uint8(6), + 376: uint8(6), + 377: uint8(6), + 378: uint8(6), + 379: uint8(6), + 380: uint8(6), + 381: uint8(6), + 382: uint8(6), + 383: uint8(6), + 384: uint8(6), + 385: uint8(6), + 386: uint8(6), + 387: uint8(6), + 388: uint8(6), + 389: uint8(6), + 390: uint8(6), + 391: uint8(6), + 392: uint8(6), + 393: uint8(6), + 394: uint8(6), + 395: uint8(6), + 396: uint8(6), + 397: uint8(6), + 398: uint8(6), + 399: uint8(6), + 400: uint8(6), + 401: uint8(6), + 402: uint8(6), + 403: uint8(6), + 404: uint8(6), + 405: uint8(6), + 406: uint8(6), + 407: uint8(6), + 408: uint8(6), + 409: uint8(6), + 410: uint8(6), + 411: uint8(6), + 412: uint8(6), + 413: uint8(6), + 414: uint8(6), + 415: uint8(6), + 416: uint8(6), + 417: uint8(6), + 418: uint8(6), + 419: uint8(6), + 420: uint8(6), + 421: uint8(6), + 422: uint8(6), + 423: uint8(6), + 424: uint8(6), + 425: uint8(6), + 426: uint8(6), + 427: uint8(6), + 428: uint8(6), + 429: uint8(6), + 430: uint8(6), + 431: uint8(6), + 432: uint8(6), + 433: uint8(6), + 434: uint8(6), + 435: uint8(6), + 436: uint8(6), + 437: uint8(6), + 438: uint8(6), + 439: uint8(6), + 440: uint8(6), + 441: uint8(6), + 442: uint8(6), + 443: uint8(6), + 444: uint8(6), + 445: uint8(6), + 446: uint8(6), + 447: uint8(6), + 448: uint8(6), + 449: uint8(6), + 450: uint8(6), + 451: uint8(6), + 452: uint8(6), + 453: uint8(6), + 454: uint8(6), + 455: uint8(6), + 456: uint8(6), + 457: uint8(6), + 458: uint8(6), + 459: uint8(6), + 460: uint8(6), + 461: uint8(6), + 462: uint8(6), + 463: uint8(6), + 464: uint8(6), + 465: uint8(6), + 466: uint8(6), + 467: uint8(6), + 468: uint8(6), + 469: uint8(6), + 470: uint8(6), + 471: uint8(6), + 472: uint8(6), + 473: uint8(6), + 474: uint8(6), + 475: uint8(6), + 476: uint8(6), + 477: uint8(6), + 478: uint8(6), + 479: uint8(6), + 480: uint8(6), + 481: uint8(6), + 482: uint8(6), + 483: uint8(6), + 484: uint8(6), + 485: uint8(6), + 486: uint8(6), + 487: uint8(6), + 488: uint8(6), + 489: uint8(30), + 490: uint8(6), + 491: uint8(6), + 492: uint8(6), + 493: uint8(6), + 494: uint8(6), + 495: uint8(6), + 496: uint8(6), + 497: uint8(6), + 498: uint8(6), + 499: uint8(6), + 500: uint8(6), + 501: uint8(6), + 502: uint8(6), + 503: uint8(6), + 504: uint8(6), + 505: uint8(6), + 506: uint8(6), + 507: uint8(6), + 508: uint8(6), + 509: uint8(6), + 510: uint8(6), + 511: uint8(6), + 623: uint8(36), + 624: uint8(43), + 625: uint8(43), + 626: uint8(43), + 627: uint8(43), + 628: uint8(43), + 629: uint8(43), + 630: uint8(43), + 631: uint8(43), + 632: uint8(1), + 634: uint8(84), + 635: uint8(86), + 636: uint8(86), + 637: uint8(86), + 638: uint8(86), + 639: uint8(86), + 640: uint8(86), + 641: uint8(86), + 642: uint8(86), + 662: uint8(24), + 666: uint8(43), + 667: uint8(43), + 668: uint8(43), + 669: uint8(43), + 670: uint8(43), + 671: uint8(43), + 672: uint8(43), + 673: uint8(7), + 674: uint8(43), + 675: uint8(43), + 676: uint8(91), + 677: uint8(86), + 678: uint8(86), + 679: uint8(86), + 680: uint8(86), + 681: uint8(86), + 682: uint8(86), + 683: uint8(86), + 684: uint8(74), + 685: uint8(86), + 686: uint8(86), + 687: uint8(5), + 688: uint8(49), + 689: uint8(80), + 690: uint8(49), + 691: uint8(80), + 692: uint8(49), + 693: uint8(80), + 694: uint8(49), + 695: uint8(80), + 696: uint8(49), + 697: uint8(80), + 698: uint8(49), + 699: uint8(80), + 700: uint8(49), + 701: uint8(80), + 702: uint8(49), + 703: uint8(80), + 704: uint8(36), + 705: uint8(80), + 706: uint8(121), + 707: uint8(49), + 708: uint8(80), + 709: uint8(49), + 710: uint8(80), + 711: uint8(49), + 712: uint8(56), + 713: uint8(80), + 714: uint8(49), + 715: uint8(80), + 716: uint8(49), + 717: uint8(80), + 718: uint8(49), + 719: uint8(80), + 720: uint8(49), + 721: uint8(80), + 722: uint8(49), + 723: uint8(80), + 724: uint8(49), + 725: uint8(80), + 726: uint8(49), + 727: uint8(80), + 728: uint8(78), + 729: uint8(49), + 730: uint8(2), + 731: uint8(78), + 732: uint8(13), + 733: uint8(13), + 734: uint8(78), + 735: uint8(3), + 736: uint8(78), + 738: uint8(36), + 739: uint8(110), + 741: uint8(78), + 742: uint8(49), + 743: uint8(38), + 744: uint8(110), + 745: uint8(81), + 746: uint8(78), + 747: uint8(36), + 748: uint8(80), + 749: uint8(78), + 750: uint8(57), + 751: uint8(20), + 752: uint8(129), + 753: uint8(27), + 754: uint8(29), + 755: uint8(29), + 756: uint8(83), + 757: uint8(49), + 758: uint8(80), + 759: uint8(49), + 760: uint8(80), + 761: uint8(13), + 762: uint8(49), + 763: uint8(80), + 764: uint8(49), + 765: uint8(80), + 766: uint8(49), + 767: uint8(80), + 768: uint8(27), + 769: uint8(83), + 770: uint8(36), + 771: uint8(80), + 772: uint8(49), + 773: uint8(2), + 774: uint8(92), + 775: uint8(123), + 776: uint8(92), + 777: uint8(123), + 778: uint8(92), + 779: uint8(123), + 780: uint8(92), + 781: uint8(123), + 782: uint8(92), + 783: uint8(123), + 784: uint8(20), + 785: uint8(121), + 786: uint8(92), + 787: uint8(123), + 788: uint8(92), + 789: uint8(123), + 790: uint8(92), + 791: uint8(45), + 792: uint8(43), + 793: uint8(73), + 794: uint8(3), + 795: uint8(72), + 796: uint8(3), + 797: uint8(120), + 798: uint8(92), + 799: uint8(123), + 800: uint8(20), + 802: uint8(150), + 803: uint8(10), + 804: uint8(1), + 805: uint8(43), + 806: uint8(40), + 807: uint8(6), + 808: uint8(6), + 810: uint8(42), + 811: uint8(6), + 812: uint8(42), + 813: uint8(42), + 814: uint8(43), + 815: uint8(7), + 816: uint8(187), + 817: uint8(181), + 818: uint8(43), + 819: uint8(30), + 821: uint8(43), + 822: uint8(7), + 823: uint8(43), + 824: uint8(43), + 825: uint8(43), + 826: uint8(1), + 827: uint8(43), + 828: uint8(43), + 829: uint8(43), + 830: uint8(43), + 831: uint8(43), + 832: uint8(43), + 833: uint8(43), + 834: uint8(43), + 835: uint8(43), + 836: uint8(43), + 837: uint8(43), + 838: uint8(43), + 839: uint8(43), + 840: uint8(43), + 841: uint8(43), + 842: uint8(43), + 843: uint8(43), + 844: uint8(43), + 845: uint8(43), + 846: uint8(43), + 847: uint8(43), + 848: uint8(43), + 849: uint8(43), + 850: uint8(43), + 851: uint8(43), + 852: uint8(43), + 853: uint8(43), + 854: uint8(43), + 855: uint8(43), + 856: uint8(43), + 857: uint8(43), + 858: uint8(43), + 859: uint8(1), + 860: uint8(43), + 861: uint8(43), + 862: uint8(43), + 863: uint8(43), + 864: uint8(43), + 865: uint8(43), + 866: uint8(43), + 867: uint8(43), + 868: uint8(43), + 869: uint8(43), + 870: uint8(43), + 871: uint8(43), + 872: uint8(43), + 873: uint8(43), + 874: uint8(43), + 875: uint8(43), + 876: uint8(43), + 877: uint8(43), + 878: uint8(43), + 879: uint8(43), + 880: uint8(43), + 881: uint8(43), + 882: uint8(43), + 883: uint8(42), + 884: uint8(43), + 885: uint8(43), + 886: uint8(43), + 887: uint8(43), + 888: uint8(43), + 889: uint8(43), + 890: uint8(43), + 891: uint8(43), + 892: uint8(43), + 893: uint8(43), + 894: uint8(43), + 895: uint8(43), + 896: uint8(43), + 897: uint8(205), + 898: uint8(70), + 899: uint8(205), + 900: uint8(43), + 902: uint8(37), + 903: uint8(43), + 904: uint8(7), + 905: uint8(1), + 906: uint8(6), + 907: uint8(1), + 908: uint8(85), + 909: uint8(86), + 910: uint8(86), + 911: uint8(86), + 912: uint8(86), + 913: uint8(86), + 914: uint8(85), + 915: uint8(86), + 916: uint8(86), + 917: uint8(2), + 918: uint8(36), + 919: uint8(129), + 920: uint8(129), + 921: uint8(129), + 922: uint8(129), + 923: uint8(129), + 924: uint8(21), + 925: uint8(129), + 926: uint8(129), + 927: uint8(129), + 930: uint8(43), + 932: uint8(178), + 933: uint8(209), + 934: uint8(178), + 935: uint8(209), + 936: uint8(178), + 937: uint8(209), + 938: uint8(178), + 939: uint8(209), + 942: uint8(205), + 943: uint8(204), + 944: uint8(1), + 946: uint8(215), + 947: uint8(215), + 948: uint8(215), + 949: uint8(215), + 950: uint8(215), + 951: uint8(131), + 952: uint8(129), + 953: uint8(129), + 954: uint8(129), + 955: uint8(129), + 956: uint8(129), + 957: uint8(129), + 958: uint8(129), + 959: uint8(129), + 960: uint8(129), + 961: uint8(129), + 962: uint8(172), + 963: uint8(172), + 964: uint8(172), + 965: uint8(172), + 966: uint8(172), + 967: uint8(172), + 968: uint8(172), + 969: uint8(172), + 970: uint8(172), + 971: uint8(172), + 972: uint8(28), + 978: uint8(49), + 979: uint8(80), + 980: uint8(49), + 981: uint8(80), + 982: uint8(49), + 983: uint8(80), + 984: uint8(49), + 985: uint8(80), + 986: uint8(49), + 987: uint8(80), + 988: uint8(49), + 989: uint8(2), + 992: uint8(49), + 993: uint8(80), + 994: uint8(49), + 995: uint8(80), + 996: uint8(49), + 997: uint8(80), + 998: uint8(49), + 999: uint8(80), + 1000: uint8(49), + 1001: uint8(80), + 1002: uint8(49), + 1003: uint8(80), + 1004: uint8(49), + 1005: uint8(80), + 1006: uint8(49), + 1007: uint8(80), + 1008: uint8(49), + 1009: uint8(80), + 1010: uint8(78), + 1011: uint8(49), + 1012: uint8(80), + 1013: uint8(49), + 1014: uint8(80), + 1015: uint8(78), + 1016: uint8(49), + 1017: uint8(80), + 1018: uint8(49), + 1019: uint8(80), + 1020: uint8(49), + 1021: uint8(80), + 1022: uint8(49), + 1023: uint8(80), + 1024: uint8(49), + 1025: uint8(80), + 1026: uint8(49), + 1027: uint8(80), + 1028: uint8(49), + 1029: uint8(80), + 1030: uint8(49), + 1031: uint8(2), + 1032: uint8(135), + 1033: uint8(166), + 1034: uint8(135), + 1035: uint8(166), + 1036: uint8(135), + 1037: uint8(166), + 1038: uint8(135), + 1039: uint8(166), + 1040: uint8(135), + 1041: uint8(166), + 1042: uint8(135), + 1043: uint8(166), + 1044: uint8(135), + 1045: uint8(166), + 1046: uint8(135), + 1047: uint8(166), + 1048: uint8(42), + 1049: uint8(43), + 1050: uint8(43), + 1051: uint8(43), + 1052: uint8(43), + 1053: uint8(43), + 1054: uint8(43), + 1055: uint8(43), + 1056: uint8(43), + 1057: uint8(43), + 1058: uint8(43), + 1059: uint8(43), + 1060: uint8(43), + 1064: uint8(84), + 1065: uint8(86), + 1066: uint8(86), + 1067: uint8(86), + 1068: uint8(86), + 1069: uint8(86), + 1070: uint8(86), + 1071: uint8(86), + 1072: uint8(86), + 1073: uint8(86), + 1074: uint8(86), + 1075: uint8(86), + 1076: uint8(86), + 1171: uint8(84), + 1172: uint8(86), + 1173: uint8(86), + 1174: uint8(86), + 1175: uint8(86), + 1176: uint8(86), + 1177: uint8(86), + 1178: uint8(86), + 1179: uint8(86), + 1180: uint8(86), + 1181: uint8(86), + 1182: uint8(86), + 1183: uint8(86), + 1184: uint8(12), + 1186: uint8(12), + 1187: uint8(42), + 1188: uint8(43), + 1189: uint8(43), + 1190: uint8(43), + 1191: uint8(43), + 1192: uint8(43), + 1193: uint8(43), + 1194: uint8(43), + 1195: uint8(43), + 1196: uint8(43), + 1197: uint8(43), + 1198: uint8(43), + 1199: uint8(43), + 1200: uint8(43), + 1201: uint8(7), + 1202: uint8(42), + 1203: uint8(1), + 1257: uint8(42), + 1258: uint8(43), + 1259: uint8(43), + 1260: uint8(43), + 1261: uint8(43), + 1262: uint8(43), + 1263: uint8(43), + 1264: uint8(43), + 1265: uint8(43), + 1266: uint8(43), + 1267: uint8(43), + 1268: uint8(43), + 1269: uint8(43), + 1270: uint8(43), + 1271: uint8(43), + 1272: uint8(43), + 1273: uint8(43), + 1274: uint8(43), + 1275: uint8(43), + 1276: uint8(43), + 1277: uint8(43), + 1278: uint8(43), + 1279: uint8(43), + 1280: uint8(43), + 1281: uint8(43), + 1282: uint8(43), + 1283: uint8(43), + 1284: uint8(86), + 1285: uint8(86), + 1286: uint8(108), + 1287: uint8(129), + 1288: uint8(21), + 1290: uint8(43), + 1291: uint8(43), + 1292: uint8(43), + 1293: uint8(43), + 1294: uint8(43), + 1295: uint8(43), + 1296: uint8(43), + 1297: uint8(43), + 1298: uint8(43), + 1299: uint8(43), + 1300: uint8(43), + 1301: uint8(43), + 1302: uint8(43), + 1303: uint8(43), + 1304: uint8(43), + 1305: uint8(43), + 1306: uint8(43), + 1307: uint8(43), + 1308: uint8(43), + 1309: uint8(43), + 1310: uint8(43), + 1311: uint8(43), + 1312: uint8(43), + 1313: uint8(43), + 1314: uint8(43), + 1315: uint8(43), + 1316: uint8(43), + 1317: uint8(43), + 1318: uint8(43), + 1319: uint8(43), + 1320: uint8(43), + 1321: uint8(43), + 1322: uint8(43), + 1323: uint8(43), + 1324: uint8(43), + 1325: uint8(43), + 1326: uint8(43), + 1327: uint8(43), + 1328: uint8(43), + 1329: uint8(43), + 1330: uint8(43), + 1331: uint8(43), + 1332: uint8(7), + 1333: uint8(108), + 1334: uint8(3), + 1335: uint8(65), + 1336: uint8(43), + 1337: uint8(43), + 1338: uint8(86), + 1339: uint8(86), + 1340: uint8(86), + 1341: uint8(86), + 1342: uint8(86), + 1343: uint8(86), + 1344: uint8(86), + 1345: uint8(86), + 1346: uint8(86), + 1347: uint8(86), + 1348: uint8(86), + 1349: uint8(86), + 1350: uint8(86), + 1351: uint8(86), + 1352: uint8(44), + 1353: uint8(86), + 1354: uint8(43), + 1355: uint8(43), + 1356: uint8(43), + 1357: uint8(43), + 1358: uint8(43), + 1359: uint8(43), + 1360: uint8(43), + 1361: uint8(43), + 1362: uint8(43), + 1363: uint8(43), + 1364: uint8(43), + 1365: uint8(43), + 1366: uint8(43), + 1367: uint8(43), + 1368: uint8(43), + 1369: uint8(43), + 1370: uint8(43), + 1371: uint8(43), + 1372: uint8(43), + 1373: uint8(43), + 1374: uint8(43), + 1375: uint8(1), + 1416: uint8(12), + 1417: uint8(108), + 1423: uint8(6), + 1462: uint8(6), + 1463: uint8(37), + 1464: uint8(6), + 1465: uint8(37), + 1466: uint8(6), + 1467: uint8(37), + 1468: uint8(6), + 1469: uint8(37), + 1470: uint8(6), + 1471: uint8(37), + 1472: uint8(6), + 1473: uint8(37), + 1474: uint8(6), + 1475: uint8(37), + 1476: uint8(6), + 1477: uint8(37), + 1478: uint8(6), + 1479: uint8(37), + 1480: uint8(6), + 1481: uint8(37), + 1482: uint8(6), + 1483: uint8(37), + 1484: uint8(6), + 1485: uint8(37), + 1486: uint8(6), + 1487: uint8(37), + 1488: uint8(6), + 1489: uint8(37), + 1490: uint8(6), + 1491: uint8(37), + 1492: uint8(6), + 1493: uint8(37), + 1494: uint8(6), + 1495: uint8(37), + 1496: uint8(6), + 1497: uint8(37), + 1498: uint8(6), + 1499: uint8(37), + 1500: uint8(6), + 1501: uint8(37), + 1502: uint8(6), + 1503: uint8(37), + 1504: uint8(6), + 1505: uint8(37), + 1506: uint8(6), + 1507: uint8(37), + 1508: uint8(6), + 1509: uint8(37), + 1510: uint8(6), + 1511: uint8(37), + 1512: uint8(86), + 1513: uint8(122), + 1514: uint8(158), + 1515: uint8(38), + 1516: uint8(6), + 1517: uint8(37), + 1518: uint8(6), + 1519: uint8(37), + 1520: uint8(6), + 1521: uint8(37), + 1522: uint8(6), + 1523: uint8(37), + 1524: uint8(6), + 1525: uint8(37), + 1526: uint8(6), + 1527: uint8(37), + 1528: uint8(6), + 1529: uint8(37), + 1530: uint8(6), + 1531: uint8(37), + 1532: uint8(6), + 1533: uint8(37), + 1534: uint8(6), + 1535: uint8(37), + 1536: uint8(6), + 1537: uint8(37), + 1538: uint8(6), + 1539: uint8(37), + 1540: uint8(6), + 1541: uint8(37), + 1542: uint8(6), + 1543: uint8(37), + 1544: uint8(6), + 1545: uint8(37), + 1546: uint8(6), + 1547: uint8(1), + 1548: uint8(43), + 1549: uint8(43), + 1550: uint8(79), + 1551: uint8(86), + 1552: uint8(86), + 1553: uint8(44), + 1554: uint8(43), + 1555: uint8(127), + 1556: uint8(86), + 1557: uint8(86), + 1558: uint8(57), + 1559: uint8(43), + 1560: uint8(43), + 1561: uint8(85), + 1562: uint8(86), + 1563: uint8(86), + 1564: uint8(43), + 1565: uint8(43), + 1566: uint8(79), + 1567: uint8(86), + 1568: uint8(86), + 1569: uint8(44), + 1570: uint8(43), + 1571: uint8(127), + 1572: uint8(86), + 1573: uint8(86), + 1574: uint8(129), + 1575: uint8(55), + 1576: uint8(117), + 1577: uint8(91), + 1578: uint8(123), + 1579: uint8(92), + 1580: uint8(43), + 1581: uint8(43), + 1582: uint8(79), + 1583: uint8(86), + 1584: uint8(86), + 1585: uint8(2), + 1586: uint8(172), + 1587: uint8(4), + 1590: uint8(57), + 1591: uint8(43), + 1592: uint8(43), + 1593: uint8(85), + 1594: uint8(86), + 1595: uint8(86), + 1596: uint8(43), + 1597: uint8(43), + 1598: uint8(79), + 1599: uint8(86), + 1600: uint8(86), + 1601: uint8(44), + 1602: uint8(43), + 1603: uint8(43), + 1604: uint8(86), + 1605: uint8(86), + 1606: uint8(50), + 1607: uint8(19), + 1608: uint8(129), + 1609: uint8(87), + 1611: uint8(111), + 1612: uint8(129), + 1613: uint8(126), + 1614: uint8(201), + 1615: uint8(215), + 1616: uint8(126), + 1617: uint8(45), + 1618: uint8(129), + 1619: uint8(129), + 1620: uint8(14), + 1621: uint8(126), + 1622: uint8(57), + 1623: uint8(127), + 1624: uint8(111), + 1625: uint8(87), + 1627: uint8(129), + 1628: uint8(129), + 1629: uint8(126), + 1630: uint8(21), + 1632: uint8(126), + 1633: uint8(3), + 1634: uint8(43), + 1635: uint8(43), + 1636: uint8(43), + 1637: uint8(43), + 1638: uint8(43), + 1639: uint8(43), + 1640: uint8(43), + 1641: uint8(43), + 1642: uint8(43), + 1643: uint8(43), + 1644: uint8(43), + 1645: uint8(43), + 1646: uint8(7), + 1647: uint8(43), + 1648: uint8(36), + 1649: uint8(43), + 1650: uint8(151), + 1651: uint8(43), + 1652: uint8(43), + 1653: uint8(43), + 1654: uint8(43), + 1655: uint8(43), + 1656: uint8(43), + 1657: uint8(43), + 1658: uint8(43), + 1659: uint8(43), + 1660: uint8(42), + 1661: uint8(43), + 1662: uint8(43), + 1663: uint8(43), + 1664: uint8(43), + 1665: uint8(43), + 1666: uint8(86), + 1667: uint8(86), + 1668: uint8(86), + 1669: uint8(86), + 1670: uint8(86), + 1671: uint8(128), + 1672: uint8(129), + 1673: uint8(129), + 1674: uint8(129), + 1675: uint8(129), + 1676: uint8(57), + 1677: uint8(187), + 1678: uint8(42), + 1679: uint8(43), + 1680: uint8(43), + 1681: uint8(43), + 1682: uint8(43), + 1683: uint8(43), + 1684: uint8(43), + 1685: uint8(43), + 1686: uint8(43), + 1687: uint8(43), + 1688: uint8(43), + 1689: uint8(43), + 1690: uint8(43), + 1691: uint8(43), + 1692: uint8(43), + 1693: uint8(43), + 1694: uint8(43), + 1695: uint8(43), + 1696: uint8(43), + 1697: uint8(43), + 1698: uint8(43), + 1699: uint8(43), + 1700: uint8(43), + 1701: uint8(43), + 1702: uint8(43), + 1703: uint8(43), + 1704: uint8(43), + 1705: uint8(43), + 1706: uint8(43), + 1707: uint8(43), + 1708: uint8(43), + 1709: uint8(43), + 1710: uint8(43), + 1711: uint8(43), + 1712: uint8(43), + 1713: uint8(43), + 1714: uint8(43), + 1715: uint8(43), + 1716: uint8(43), + 1717: uint8(43), + 1718: uint8(43), + 1719: uint8(1), + 1720: uint8(129), + 1721: uint8(129), + 1722: uint8(129), + 1723: uint8(129), + 1724: uint8(129), + 1725: uint8(129), + 1726: uint8(129), + 1727: uint8(129), + 1728: uint8(129), + 1729: uint8(129), + 1730: uint8(129), + 1731: uint8(129), + 1732: uint8(129), + 1733: uint8(129), + 1734: uint8(129), + 1735: uint8(201), + 1736: uint8(172), + 1737: uint8(172), + 1738: uint8(172), + 1739: uint8(172), + 1740: uint8(172), + 1741: uint8(172), + 1742: uint8(172), + 1743: uint8(172), + 1744: uint8(172), + 1745: uint8(172), + 1746: uint8(172), + 1747: uint8(172), + 1748: uint8(172), + 1749: uint8(172), + 1750: uint8(172), + 1751: uint8(208), + 1752: uint8(13), + 1754: uint8(78), + 1755: uint8(49), + 1756: uint8(2), + 1757: uint8(180), + 1758: uint8(193), + 1759: uint8(193), + 1760: uint8(215), + 1761: uint8(215), + 1762: uint8(36), + 1763: uint8(80), + 1764: uint8(49), + 1765: uint8(80), + 1766: uint8(49), + 1767: uint8(80), + 1768: uint8(49), + 1769: uint8(80), + 1770: uint8(49), + 1771: uint8(80), + 1772: uint8(49), + 1773: uint8(80), + 1774: uint8(49), + 1775: uint8(80), + 1776: uint8(49), + 1777: uint8(80), + 1778: uint8(49), + 1779: uint8(80), + 1780: uint8(49), + 1781: uint8(80), + 1782: uint8(49), + 1783: uint8(80), + 1784: uint8(49), + 1785: uint8(80), + 1786: uint8(49), + 1787: uint8(80), + 1788: uint8(49), + 1789: uint8(80), + 1790: uint8(49), + 1791: uint8(80), + 1792: uint8(49), + 1793: uint8(80), + 1794: uint8(49), + 1795: uint8(80), + 1796: uint8(215), + 1797: uint8(215), + 1798: uint8(83), + 1799: uint8(193), + 1800: uint8(71), + 1801: uint8(212), + 1802: uint8(215), + 1803: uint8(215), + 1804: uint8(215), + 1805: uint8(5), + 1806: uint8(43), + 1807: uint8(43), + 1808: uint8(43), + 1809: uint8(43), + 1810: uint8(43), + 1811: uint8(43), + 1812: uint8(43), + 1813: uint8(43), + 1814: uint8(43), + 1815: uint8(43), + 1816: uint8(43), + 1817: uint8(43), + 1818: uint8(7), + 1819: uint8(1), + 1821: uint8(1), + 1913: uint8(78), + 1914: uint8(49), + 1915: uint8(80), + 1916: uint8(49), + 1917: uint8(80), + 1918: uint8(49), + 1919: uint8(80), + 1920: uint8(49), + 1921: uint8(80), + 1922: uint8(49), + 1923: uint8(80), + 1924: uint8(49), + 1925: uint8(80), + 1926: uint8(49), + 1927: uint8(80), + 1928: uint8(13), + 1934: uint8(36), + 1935: uint8(80), + 1936: uint8(49), + 1937: uint8(80), + 1938: uint8(49), + 1939: uint8(80), + 1940: uint8(49), + 1941: uint8(80), + 1942: uint8(49), + 1943: uint8(80), + 1978: uint8(43), + 1979: uint8(43), + 1980: uint8(43), + 1981: uint8(43), + 1982: uint8(43), + 1983: uint8(43), + 1984: uint8(43), + 1985: uint8(43), + 1986: uint8(43), + 1987: uint8(43), + 1988: uint8(43), + 1989: uint8(121), + 1990: uint8(92), + 1991: uint8(123), + 1992: uint8(92), + 1993: uint8(123), + 1994: uint8(79), + 1995: uint8(123), + 1996: uint8(92), + 1997: uint8(123), + 1998: uint8(92), + 1999: uint8(123), + 2000: uint8(92), + 2001: uint8(123), + 2002: uint8(92), + 2003: uint8(123), + 2004: uint8(92), + 2005: uint8(123), + 2006: uint8(92), + 2007: uint8(123), + 2008: uint8(92), + 2009: uint8(123), + 2010: uint8(92), + 2011: uint8(123), + 2012: uint8(92), + 2013: uint8(123), + 2014: uint8(92), + 2015: uint8(45), + 2016: uint8(43), + 2017: uint8(43), + 2018: uint8(121), + 2019: uint8(20), + 2020: uint8(92), + 2021: uint8(123), + 2022: uint8(92), + 2023: uint8(45), + 2024: uint8(121), + 2025: uint8(42), + 2026: uint8(92), + 2027: uint8(39), + 2028: uint8(92), + 2029: uint8(123), + 2030: uint8(92), + 2031: uint8(123), + 2032: uint8(92), + 2033: uint8(123), + 2034: uint8(164), + 2036: uint8(10), + 2037: uint8(180), + 2038: uint8(92), + 2039: uint8(123), + 2040: uint8(92), + 2041: uint8(123), + 2042: uint8(79), + 2043: uint8(3), + 2044: uint8(42), + 2045: uint8(43), + 2046: uint8(43), + 2047: uint8(43), + 2048: uint8(43), + 2049: uint8(43), + 2050: uint8(43), + 2051: uint8(43), + 2052: uint8(43), + 2053: uint8(43), + 2054: uint8(43), + 2055: uint8(43), + 2056: uint8(43), + 2057: uint8(43), + 2058: uint8(43), + 2059: uint8(43), + 2060: uint8(43), + 2061: uint8(43), + 2062: uint8(43), + 2063: uint8(1), + 2091: uint8(72), + 2101: uint8(42), + 2102: uint8(43), + 2103: uint8(43), + 2104: uint8(43), + 2105: uint8(43), + 2106: uint8(43), + 2107: uint8(43), + 2108: uint8(43), + 2109: uint8(43), + 2110: uint8(43), + 2111: uint8(43), + 2112: uint8(43), + 2113: uint8(43), + 2114: uint8(43), + 2115: uint8(43), + 2116: uint8(43), + 2117: uint8(43), + 2118: uint8(43), + 2119: uint8(43), + 2120: uint8(43), + 2121: uint8(43), + 2122: uint8(43), + 2123: uint8(43), + 2124: uint8(43), + 2125: uint8(43), + 2126: uint8(43), + 2127: uint8(43), + 2161: uint8(43), + 2162: uint8(43), + 2163: uint8(43), + 2164: uint8(43), + 2165: uint8(43), + 2166: uint8(43), + 2167: uint8(43), + 2168: uint8(43), + 2169: uint8(7), + 2171: uint8(72), + 2172: uint8(86), + 2173: uint8(86), + 2174: uint8(86), + 2175: uint8(86), + 2176: uint8(86), + 2177: uint8(86), + 2178: uint8(86), + 2179: uint8(86), + 2180: uint8(2), + 2236: uint8(43), + 2237: uint8(43), + 2238: uint8(43), + 2239: uint8(43), + 2240: uint8(43), + 2241: uint8(43), + 2242: uint8(43), + 2243: uint8(43), + 2244: uint8(43), + 2245: uint8(43), + 2246: uint8(43), + 2247: uint8(43), + 2248: uint8(43), + 2249: uint8(85), + 2250: uint8(86), + 2251: uint8(86), + 2252: uint8(86), + 2253: uint8(86), + 2254: uint8(86), + 2255: uint8(86), + 2256: uint8(86), + 2257: uint8(86), + 2258: uint8(86), + 2259: uint8(86), + 2260: uint8(86), + 2261: uint8(86), + 2262: uint8(14), + 2294: uint8(36), + 2295: uint8(43), + 2296: uint8(43), + 2297: uint8(43), + 2298: uint8(43), + 2299: uint8(43), + 2300: uint8(43), + 2301: uint8(43), + 2302: uint8(43), + 2303: uint8(43), + 2304: uint8(43), + 2305: uint8(43), + 2306: uint8(7), + 2308: uint8(86), + 2309: uint8(86), + 2310: uint8(86), + 2311: uint8(86), + 2312: uint8(86), + 2313: uint8(86), + 2314: uint8(86), + 2315: uint8(86), + 2316: uint8(86), + 2317: uint8(86), + 2318: uint8(86), + 2319: uint8(86), + 2364: uint8(36), + 2365: uint8(43), + 2366: uint8(43), + 2367: uint8(43), + 2368: uint8(43), + 2369: uint8(43), + 2370: uint8(43), + 2371: uint8(43), + 2372: uint8(43), + 2373: uint8(43), + 2374: uint8(43), + 2375: uint8(43), + 2376: uint8(43), + 2377: uint8(43), + 2378: uint8(43), + 2379: uint8(43), + 2380: uint8(43), + 2381: uint8(7), + 2386: uint8(86), + 2387: uint8(86), + 2388: uint8(86), + 2389: uint8(86), + 2390: uint8(86), + 2391: uint8(86), + 2392: uint8(86), + 2393: uint8(86), + 2394: uint8(86), + 2395: uint8(86), + 2396: uint8(86), + 2397: uint8(86), + 2398: uint8(86), + 2399: uint8(86), + 2400: uint8(86), + 2401: uint8(86), + 2402: uint8(86), + 2461: uint8(42), + 2462: uint8(43), + 2463: uint8(43), + 2464: uint8(43), + 2465: uint8(43), + 2466: uint8(43), + 2467: uint8(43), + 2468: uint8(43), + 2469: uint8(43), + 2470: uint8(43), + 2471: uint8(43), + 2472: uint8(86), + 2473: uint8(86), + 2474: uint8(86), + 2475: uint8(86), + 2476: uint8(86), + 2477: uint8(86), + 2478: uint8(86), + 2479: uint8(86), + 2480: uint8(86), + 2481: uint8(86), + 2482: uint8(14), + 2515: uint8(42), + 2516: uint8(43), + 2517: uint8(43), + 2518: uint8(43), + 2519: uint8(43), + 2520: uint8(43), + 2521: uint8(43), + 2522: uint8(43), + 2523: uint8(43), + 2524: uint8(43), + 2525: uint8(43), + 2526: uint8(86), + 2527: uint8(86), + 2528: uint8(86), + 2529: uint8(86), + 2530: uint8(86), + 2531: uint8(86), + 2532: uint8(86), + 2533: uint8(86), + 2534: uint8(86), + 2535: uint8(86), + 2536: uint8(14), + 2580: uint8(43), + 2581: uint8(43), + 2582: uint8(43), + 2583: uint8(43), + 2584: uint8(43), + 2585: uint8(43), + 2586: uint8(43), + 2587: uint8(43), + 2588: uint8(43), + 2589: uint8(43), + 2590: uint8(43), + 2591: uint8(85), + 2592: uint8(86), + 2593: uint8(86), + 2594: uint8(86), + 2595: uint8(86), + 2596: uint8(86), + 2597: uint8(86), + 2598: uint8(86), + 2599: uint8(86), + 2600: uint8(86), + 2601: uint8(86), + 2602: uint8(14), +} +var _rules = [240]int32{ + 1: int32(0x2001), + 2: -int32(0x2000), + 3: int32(0x1dbf00), + 4: int32(0x2e700), + 5: int32(0x7900), + 6: int32(0x2402), + 7: int32(0x101), + 8: -int32(0x100), + 10: int32(0x201), + 11: -int32(0x200), + 12: -int32(0xc6ff), + 13: -int32(0xe800), + 14: -int32(0x78ff), + 15: -int32(0x12c00), + 16: int32(0xc300), + 17: int32(0xd201), + 18: int32(0xce01), + 19: int32(0xcd01), + 20: int32(0x4f01), + 21: int32(0xca01), + 22: int32(0xcb01), + 23: int32(0xcf01), + 24: int32(0x6100), + 25: int32(0xd301), + 26: int32(0xd101), + 27: int32(0xa300), + 28: int32(0xd501), + 29: int32(0x8200), + 30: int32(0xd601), + 31: int32(0xda01), + 32: int32(0xd901), + 33: int32(0xdb01), + 34: int32(0x3800), + 35: int32(0x3), + 36: -int32(0x4f00), + 37: -int32(0x60ff), + 38: -int32(0x37ff), + 39: int32(0x242802), + 41: int32(0x101), + 42: -int32(0x100), + 43: -int32(0xcd00), + 44: -int32(0xda00), + 45: -int32(0x81ff), + 46: int32(0x2a2b01), + 47: -int32(0xa2ff), + 48: int32(0x2a2801), + 49: int32(0x2a3f00), + 50: -int32(0xc2ff), + 51: int32(0x4501), + 52: int32(0x4701), + 53: int32(0x2a1f00), + 54: int32(0x2a1c00), + 55: int32(0x2a1e00), + 56: -int32(0xd200), + 57: -int32(0xce00), + 58: -int32(0xca00), + 59: -int32(0xcb00), + 60: int32(0xa54f00), + 61: int32(0xa54b00), + 62: -int32(0xcf00), + 63: int32(0xa52800), + 64: int32(0xa54400), + 65: -int32(0xd100), + 66: -int32(0xd300), + 67: int32(0x29f700), + 68: int32(0xa54100), + 69: int32(0x29fd00), + 70: -int32(0xd500), + 71: -int32(0xd600), + 72: int32(0x29e700), + 73: int32(0xa54300), + 74: int32(0xa52a00), + 75: -int32(0x4500), + 76: -int32(0xd900), + 77: -int32(0x4700), + 78: -int32(0xdb00), + 79: int32(0xa51500), + 80: int32(0xa51200), + 81: int32(0x4c2402), + 83: int32(0x2001), + 84: -int32(0x2000), + 85: int32(0x101), + 86: -int32(0x100), + 87: int32(0x5400), + 88: int32(0x7401), + 89: int32(0x2601), + 90: int32(0x2501), + 91: int32(0x4001), + 92: int32(0x3f01), + 93: -int32(0x2600), + 94: -int32(0x2500), + 95: -int32(0x1f00), + 96: -int32(0x4000), + 97: -int32(0x3f00), + 98: int32(0x801), + 99: -int32(0x3e00), + 100: -int32(0x3900), + 101: -int32(0x2f00), + 102: -int32(0x3600), + 103: -int32(0x800), + 104: -int32(0x5600), + 105: -int32(0x5000), + 106: int32(0x700), + 107: -int32(0x7400), + 108: -int32(0x3bff), + 109: -int32(0x6000), + 110: -int32(0x6ff), + 111: int32(0x701a02), + 112: int32(0x101), + 113: -int32(0x100), + 114: int32(0x2001), + 115: -int32(0x2000), + 116: int32(0x5001), + 117: int32(0xf01), + 118: -int32(0xf00), + 120: int32(0x3001), + 121: -int32(0x3000), + 122: int32(0x101), + 123: -int32(0x100), + 125: int32(0xbc000), + 126: int32(0x1c6001), + 128: int32(0x97d001), + 129: int32(0x801), + 130: -int32(0x800), + 131: int32(0x8a0502), + 133: -int32(0xbbfff), + 134: -int32(0x186200), + 135: int32(0x89c200), + 136: -int32(0x182500), + 137: -int32(0x186e00), + 138: -int32(0x186d00), + 139: -int32(0x186400), + 140: -int32(0x186300), + 141: -int32(0x185c00), + 143: int32(0x8a3800), + 144: int32(0x8a0400), + 145: int32(0xee600), + 146: int32(0x101), + 147: -int32(0x100), + 149: -int32(0x3b00), + 150: -int32(0x1dbeff), + 151: int32(0x8f1d02), + 152: int32(0x800), + 153: -int32(0x7ff), + 155: int32(0x5600), + 156: -int32(0x55ff), + 157: int32(0x4a00), + 158: int32(0x6400), + 159: int32(0x8000), + 160: int32(0x7000), + 161: int32(0x7e00), + 162: int32(0x900), + 163: -int32(0x49ff), + 164: -int32(0x8ff), + 165: -int32(0x1c2500), + 166: -int32(0x63ff), + 167: -int32(0x6fff), + 168: -int32(0x7fff), + 169: -int32(0x7dff), + 170: int32(0xac0502), + 172: int32(0x1001), + 173: -int32(0x1000), + 174: int32(0x1c01), + 175: int32(0x101), + 176: -int32(0x1d5cff), + 177: -int32(0x20beff), + 178: -int32(0x2045ff), + 179: -int32(0x1c00), + 180: int32(0xb10b02), + 181: int32(0x101), + 182: -int32(0x100), + 183: int32(0x3001), + 184: -int32(0x3000), + 186: -int32(0x29f6ff), + 187: -int32(0xee5ff), + 188: -int32(0x29e6ff), + 189: -int32(0x2a2b00), + 190: -int32(0x2a2800), + 191: -int32(0x2a1bff), + 192: -int32(0x29fcff), + 193: -int32(0x2a1eff), + 194: -int32(0x2a1dff), + 195: -int32(0x2a3eff), + 197: -int32(0x1c6000), + 199: int32(0x101), + 200: -int32(0x100), + 201: int32(0xbc0c02), + 203: int32(0x101), + 204: -int32(0x100), + 205: -int32(0xa543ff), + 206: int32(0x3a001), + 207: -int32(0x8a03ff), + 208: -int32(0xa527ff), + 209: int32(0x3000), + 210: -int32(0xa54eff), + 211: -int32(0xa54aff), + 212: -int32(0xa540ff), + 213: -int32(0xa511ff), + 214: -int32(0xa529ff), + 215: -int32(0xa514ff), + 216: -int32(0x2fff), + 217: -int32(0xa542ff), + 218: -int32(0x8a37ff), + 220: -int32(0x97d000), + 221: -int32(0x3a000), + 223: int32(0x2001), + 224: -int32(0x2000), + 226: int32(0x2801), + 227: -int32(0x2800), + 229: int32(0x4001), + 230: -int32(0x4000), + 232: int32(0x2001), + 233: -int32(0x2000), + 235: int32(0x2001), + 236: -int32(0x2000), + 238: int32(0x2201), + 239: -int32(0x2200), +} +var _rulebases = [512]uint8{ + 1: uint8(6), + 2: uint8(39), + 3: uint8(81), + 4: uint8(111), + 5: uint8(119), + 16: uint8(124), + 19: uint8(127), + 28: uint8(131), + 29: uint8(142), + 30: uint8(146), + 31: uint8(151), + 33: uint8(170), + 44: uint8(180), + 45: uint8(196), + 166: uint8(198), + 167: uint8(201), + 171: uint8(219), + 255: uint8(222), + 260: uint8(225), + 268: uint8(228), + 280: uint8(231), + 366: uint8(234), + 489: uint8(237), +} +var _exceptions = [200][2]uint8{ + 0: { + 0: uint8(48), + 1: uint8(12), + }, + 1: { + 0: uint8(49), + 1: uint8(13), + }, + 2: { + 0: uint8(120), + 1: uint8(14), + }, + 3: { + 0: uint8(127), + 1: uint8(15), + }, + 4: { + 0: uint8(128), + 1: uint8(16), + }, + 5: { + 0: uint8(129), + 1: uint8(17), + }, + 6: { + 0: uint8(134), + 1: uint8(18), + }, + 7: { + 0: uint8(137), + 1: uint8(19), + }, + 8: { + 0: uint8(138), + 1: uint8(19), + }, + 9: { + 0: uint8(142), + 1: uint8(20), + }, + 10: { + 0: uint8(143), + 1: uint8(21), + }, + 11: { + 0: uint8(144), + 1: uint8(22), + }, + 12: { + 0: uint8(147), + 1: uint8(19), + }, + 13: { + 0: uint8(148), + 1: uint8(23), + }, + 14: { + 0: uint8(149), + 1: uint8(24), + }, + 15: { + 0: uint8(150), + 1: uint8(25), + }, + 16: { + 0: uint8(151), + 1: uint8(26), + }, + 17: { + 0: uint8(154), + 1: uint8(27), + }, + 18: { + 0: uint8(156), + 1: uint8(25), + }, + 19: { + 0: uint8(157), + 1: uint8(28), + }, + 20: { + 0: uint8(158), + 1: uint8(29), + }, + 21: { + 0: uint8(159), + 1: uint8(30), + }, + 22: { + 0: uint8(166), + 1: uint8(31), + }, + 23: { + 0: uint8(169), + 1: uint8(31), + }, + 24: { + 0: uint8(174), + 1: uint8(31), + }, + 25: { + 0: uint8(177), + 1: uint8(32), + }, + 26: { + 0: uint8(178), + 1: uint8(32), + }, + 27: { + 0: uint8(183), + 1: uint8(33), + }, + 28: { + 0: uint8(191), + 1: uint8(34), + }, + 29: { + 0: uint8(197), + 1: uint8(35), + }, + 30: { + 0: uint8(200), + 1: uint8(35), + }, + 31: { + 0: uint8(203), + 1: uint8(35), + }, + 32: { + 0: uint8(221), + 1: uint8(36), + }, + 33: { + 0: uint8(242), + 1: uint8(35), + }, + 34: { + 0: uint8(246), + 1: uint8(37), + }, + 35: { + 0: uint8(247), + 1: uint8(38), + }, + 36: { + 0: uint8(32), + 1: uint8(45), + }, + 37: { + 0: uint8(58), + 1: uint8(46), + }, + 38: { + 0: uint8(61), + 1: uint8(47), + }, + 39: { + 0: uint8(62), + 1: uint8(48), + }, + 40: { + 0: uint8(63), + 1: uint8(49), + }, + 41: { + 0: uint8(64), + 1: uint8(49), + }, + 42: { + 0: uint8(67), + 1: uint8(50), + }, + 43: { + 0: uint8(68), + 1: uint8(51), + }, + 44: { + 0: uint8(69), + 1: uint8(52), + }, + 45: { + 0: uint8(80), + 1: uint8(53), + }, + 46: { + 0: uint8(81), + 1: uint8(54), + }, + 47: { + 0: uint8(82), + 1: uint8(55), + }, + 48: { + 0: uint8(83), + 1: uint8(56), + }, + 49: { + 0: uint8(84), + 1: uint8(57), + }, + 50: { + 0: uint8(89), + 1: uint8(58), + }, + 51: { + 0: uint8(91), + 1: uint8(59), + }, + 52: { + 0: uint8(92), + 1: uint8(60), + }, + 53: { + 0: uint8(97), + 1: uint8(61), + }, + 54: { + 0: uint8(99), + 1: uint8(62), + }, + 55: { + 0: uint8(101), + 1: uint8(63), + }, + 56: { + 0: uint8(102), + 1: uint8(64), + }, + 57: { + 0: uint8(104), + 1: uint8(65), + }, + 58: { + 0: uint8(105), + 1: uint8(66), + }, + 59: { + 0: uint8(106), + 1: uint8(64), + }, + 60: { + 0: uint8(107), + 1: uint8(67), + }, + 61: { + 0: uint8(108), + 1: uint8(68), + }, + 62: { + 0: uint8(111), + 1: uint8(66), + }, + 63: { + 0: uint8(113), + 1: uint8(69), + }, + 64: { + 0: uint8(114), + 1: uint8(70), + }, + 65: { + 0: uint8(117), + 1: uint8(71), + }, + 66: { + 0: uint8(125), + 1: uint8(72), + }, + 67: { + 0: uint8(130), + 1: uint8(73), + }, + 68: { + 0: uint8(135), + 1: uint8(74), + }, + 69: { + 0: uint8(137), + 1: uint8(75), + }, + 70: { + 0: uint8(138), + 1: uint8(76), + }, + 71: { + 0: uint8(139), + 1: uint8(76), + }, + 72: { + 0: uint8(140), + 1: uint8(77), + }, + 73: { + 0: uint8(146), + 1: uint8(78), + }, + 74: { + 0: uint8(157), + 1: uint8(79), + }, + 75: { + 0: uint8(158), + 1: uint8(80), + }, + 76: { + 0: uint8(69), + 1: uint8(87), + }, + 77: { + 0: uint8(123), + 1: uint8(29), + }, + 78: { + 0: uint8(124), + 1: uint8(29), + }, + 79: { + 0: uint8(125), + 1: uint8(29), + }, + 80: { + 0: uint8(127), + 1: uint8(88), + }, + 81: { + 0: uint8(134), + 1: uint8(89), + }, + 82: { + 0: uint8(136), + 1: uint8(90), + }, + 83: { + 0: uint8(137), + 1: uint8(90), + }, + 84: { + 0: uint8(138), + 1: uint8(90), + }, + 85: { + 0: uint8(140), + 1: uint8(91), + }, + 86: { + 0: uint8(142), + 1: uint8(92), + }, + 87: { + 0: uint8(143), + 1: uint8(92), + }, + 88: { + 0: uint8(172), + 1: uint8(93), + }, + 89: { + 0: uint8(173), + 1: uint8(94), + }, + 90: { + 0: uint8(174), + 1: uint8(94), + }, + 91: { + 0: uint8(175), + 1: uint8(94), + }, + 92: { + 0: uint8(194), + 1: uint8(95), + }, + 93: { + 0: uint8(204), + 1: uint8(96), + }, + 94: { + 0: uint8(205), + 1: uint8(97), + }, + 95: { + 0: uint8(206), + 1: uint8(97), + }, + 96: { + 0: uint8(207), + 1: uint8(98), + }, + 97: { + 0: uint8(208), + 1: uint8(99), + }, + 98: { + 0: uint8(209), + 1: uint8(100), + }, + 99: { + 0: uint8(213), + 1: uint8(101), + }, + 100: { + 0: uint8(214), + 1: uint8(102), + }, + 101: { + 0: uint8(215), + 1: uint8(103), + }, + 102: { + 0: uint8(240), + 1: uint8(104), + }, + 103: { + 0: uint8(241), + 1: uint8(105), + }, + 104: { + 0: uint8(242), + 1: uint8(106), + }, + 105: { + 0: uint8(243), + 1: uint8(107), + }, + 106: { + 0: uint8(244), + 1: uint8(108), + }, + 107: { + 0: uint8(245), + 1: uint8(109), + }, + 108: { + 0: uint8(249), + 1: uint8(110), + }, + 109: { + 0: uint8(253), + 1: uint8(45), + }, + 110: { + 0: uint8(254), + 1: uint8(45), + }, + 111: { + 0: uint8(255), + 1: uint8(45), + }, + 112: { + 0: uint8(80), + 1: uint8(105), + }, + 113: { + 0: uint8(81), + 1: uint8(105), + }, + 114: { + 0: uint8(82), + 1: uint8(105), + }, + 115: { + 0: uint8(83), + 1: uint8(105), + }, + 116: { + 0: uint8(84), + 1: uint8(105), + }, + 117: { + 0: uint8(85), + 1: uint8(105), + }, + 118: { + 0: uint8(86), + 1: uint8(105), + }, + 119: { + 0: uint8(87), + 1: uint8(105), + }, + 120: { + 0: uint8(88), + 1: uint8(105), + }, + 121: { + 0: uint8(89), + 1: uint8(105), + }, + 122: { + 0: uint8(90), + 1: uint8(105), + }, + 123: { + 0: uint8(91), + 1: uint8(105), + }, + 124: { + 0: uint8(92), + 1: uint8(105), + }, + 125: { + 0: uint8(93), + 1: uint8(105), + }, + 126: { + 0: uint8(94), + 1: uint8(105), + }, + 127: { + 0: uint8(95), + 1: uint8(105), + }, + 128: { + 0: uint8(130), + }, + 129: { + 0: uint8(131), + }, + 130: { + 0: uint8(132), + }, + 131: { + 0: uint8(133), + }, + 132: { + 0: uint8(134), + }, + 133: { + 0: uint8(135), + }, + 134: { + 0: uint8(136), + }, + 135: { + 0: uint8(137), + }, + 136: { + 0: uint8(192), + 1: uint8(117), + }, + 137: { + 0: uint8(207), + 1: uint8(118), + }, + 138: { + 0: uint8(128), + 1: uint8(137), + }, + 139: { + 0: uint8(129), + 1: uint8(138), + }, + 140: { + 0: uint8(130), + 1: uint8(139), + }, + 141: { + 0: uint8(133), + 1: uint8(140), + }, + 142: { + 0: uint8(134), + 1: uint8(141), + }, + 143: { + 0: uint8(112), + 1: uint8(157), + }, + 144: { + 0: uint8(113), + 1: uint8(157), + }, + 145: { + 0: uint8(118), + 1: uint8(158), + }, + 146: { + 0: uint8(119), + 1: uint8(158), + }, + 147: { + 0: uint8(120), + 1: uint8(159), + }, + 148: { + 0: uint8(121), + 1: uint8(159), + }, + 149: { + 0: uint8(122), + 1: uint8(160), + }, + 150: { + 0: uint8(123), + 1: uint8(160), + }, + 151: { + 0: uint8(124), + 1: uint8(161), + }, + 152: { + 0: uint8(125), + 1: uint8(161), + }, + 153: { + 0: uint8(179), + 1: uint8(162), + }, + 154: { + 0: uint8(186), + 1: uint8(163), + }, + 155: { + 0: uint8(187), + 1: uint8(163), + }, + 156: { + 0: uint8(188), + 1: uint8(164), + }, + 157: { + 0: uint8(190), + 1: uint8(165), + }, + 158: { + 0: uint8(195), + 1: uint8(162), + }, + 159: { + 0: uint8(204), + 1: uint8(164), + }, + 160: { + 0: uint8(218), + 1: uint8(166), + }, + 161: { + 0: uint8(219), + 1: uint8(166), + }, + 162: { + 0: uint8(229), + 1: uint8(106), + }, + 163: { + 0: uint8(234), + 1: uint8(167), + }, + 164: { + 0: uint8(235), + 1: uint8(167), + }, + 165: { + 0: uint8(236), + 1: uint8(110), + }, + 166: { + 0: uint8(243), + 1: uint8(162), + }, + 167: { + 0: uint8(248), + 1: uint8(168), + }, + 168: { + 0: uint8(249), + 1: uint8(168), + }, + 169: { + 0: uint8(250), + 1: uint8(169), + }, + 170: { + 0: uint8(251), + 1: uint8(169), + }, + 171: { + 0: uint8(252), + 1: uint8(164), + }, + 172: { + 0: uint8(38), + 1: uint8(176), + }, + 173: { + 0: uint8(42), + 1: uint8(177), + }, + 174: { + 0: uint8(43), + 1: uint8(178), + }, + 175: { + 0: uint8(78), + 1: uint8(179), + }, + 176: { + 0: uint8(132), + 1: uint8(8), + }, + 177: { + 0: uint8(98), + 1: uint8(186), + }, + 178: { + 0: uint8(99), + 1: uint8(187), + }, + 179: { + 0: uint8(100), + 1: uint8(188), + }, + 180: { + 0: uint8(101), + 1: uint8(189), + }, + 181: { + 0: uint8(102), + 1: uint8(190), + }, + 182: { + 0: uint8(109), + 1: uint8(191), + }, + 183: { + 0: uint8(110), + 1: uint8(192), + }, + 184: { + 0: uint8(111), + 1: uint8(193), + }, + 185: { + 0: uint8(112), + 1: uint8(194), + }, + 186: { + 0: uint8(126), + 1: uint8(195), + }, + 187: { + 0: uint8(127), + 1: uint8(195), + }, + 188: { + 0: uint8(125), + 1: uint8(207), + }, + 189: { + 0: uint8(141), + 1: uint8(208), + }, + 190: { + 0: uint8(148), + 1: uint8(209), + }, + 191: { + 0: uint8(171), + 1: uint8(210), + }, + 192: { + 0: uint8(172), + 1: uint8(211), + }, + 193: { + 0: uint8(173), + 1: uint8(212), + }, + 194: { + 0: uint8(176), + 1: uint8(213), + }, + 195: { + 0: uint8(177), + 1: uint8(214), + }, + 196: { + 0: uint8(178), + 1: uint8(215), + }, + 197: { + 0: uint8(196), + 1: uint8(216), + }, + 198: { + 0: uint8(197), + 1: uint8(217), + }, + 199: { + 0: uint8(198), + 1: uint8(218), + }, +} + +func _casemap(tls *TLS, c uint32, dir int32) (r1 int32) { + var b, rt, try, v, x, xb, xn, y uint32 + var c0, r, rd, v1 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = b, c0, r, rd, rt, try, v, x, xb, xn, y, v1 + c0 = int32(c) + if c >= uint32(0x20000) { + return int32(c) + } + b = c >> int32(8) + c &= uint32(255) + x = c / uint32(3) + y = c % uint32(3) + /* lookup entry in two-level base-6 table */ + v = uint32(_tab1[uint32(int32(_tab1[b])*int32(86))+x]) + v = v * uint32(_mt[y]) >> int32(11) % uint32(6) + /* use the bit vector out of the tables as an index into + * a block-specific set of rules and decode the rule into + * a type and a case-mapping delta. */ + r = _rules[uint32(_rulebases[b])+v] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + /* rules 0/1 are simple lower/upper case with a delta. + * apply according to desired mapping direction. */ + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* binary search. endpoints of the binary search for + * this block are stored in the rule delta field. */ + xn = uint32(rd & int32(0xff)) + xb = uint32(rd) >> int32(8) + for xn != 0 { + try = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2))) + if try == c { + r = _rules[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2 + 1))] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* Hard-coded for the four exceptional titlecase */ + if dir != 0 { + v1 = -int32(1) + } else { + v1 = int32(1) + } + return c0 + v1 + } else { + if try > c { + xn /= uint32(2) + } else { + xb += xn / uint32(2) + xn -= xn / uint32(2) + } + } + } + return c0 +} + +var _mt = [3]int32{ + 0: int32(2048), + 1: int32(342), + 2: int32(57), +} + +func Xtowlower(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, 0)) +} + +func Xtowupper(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, int32(1))) +} + +func X__towupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowupper(tls, c) +} + +func X__towlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowlower(tls, c) +} + +func Xtowlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towlower_l(tls, c, l) +} + +func Xtowupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towupper_l(tls, c, l) +} + +func Xwcswidth(tls *TLS, wcs uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v, (%v:)", tls, wcs, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, l, v3, v5 int32 + var v2 Tsize_t + var v4 bool + _, _, _, _, _, _ = k, l, v2, v3, v4, v5 + l = 0 + k = 0 + for { + v2 = n + n-- + if v4 = v2 != 0 && *(*Twchar_t)(unsafe.Pointer(wcs)) != 0; v4 { + v3 = Xwcwidth(tls, *(*Twchar_t)(unsafe.Pointer(wcs))) + k = v3 + } + if !(v4 && v3 >= 0) { + break + } + goto _1 + _1: + ; + l += k + wcs += 4 + } + if k < 0 { + v5 = k + } else { + v5 = l + } + return v5 +} + +func Xwctrans(tls *TLS, class uintptr) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v class=%v, (%v:)", tls, class, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(Xstrcmp(tls, class, __ccgo_ts+196) != 0) { + return UintptrFromInt32(1) + } + if !(Xstrcmp(tls, class, __ccgo_ts+204) != 0) { + return UintptrFromInt32(2) + } + return uintptr(0) +} + +func Xtowctrans(tls *TLS, wc Twint_t, trans Twctrans_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v trans=%v, (%v:)", tls, wc, trans, origin(2)) + defer func() { trc("-> %v", r) }() + } + if trans == UintptrFromInt32(1) { + return Xtowupper(tls, wc) + } + if trans == UintptrFromInt32(2) { + return Xtowlower(tls, wc) + } + return wc +} + +func X__wctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctrans(tls, s) +} + +func X__towctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowctrans(tls, c, t) +} + +func Xtowctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towctrans_l(tls, c, t, l) +} + +func Xwctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctrans_l(tls, s, l) +} + +var _table5 = [2784]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(18), + 4: uint8(19), + 5: uint8(20), + 6: uint8(21), + 7: uint8(22), + 8: uint8(23), + 9: uint8(24), + 10: uint8(25), + 11: uint8(26), + 12: uint8(27), + 13: uint8(28), + 14: uint8(29), + 15: uint8(30), + 16: uint8(31), + 17: uint8(32), + 18: uint8(16), + 19: uint8(33), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(34), + 24: uint8(35), + 25: uint8(36), + 26: uint8(37), + 27: uint8(38), + 28: uint8(39), + 29: uint8(40), + 30: uint8(16), + 31: uint8(16), + 32: uint8(41), + 33: uint8(16), + 34: uint8(16), + 35: uint8(16), + 36: uint8(16), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(42), + 45: uint8(43), + 46: uint8(16), + 47: uint8(16), + 48: uint8(44), + 49: uint8(16), + 50: uint8(16), + 51: uint8(16), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(16), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(16), + 165: uint8(16), + 166: uint8(45), + 167: uint8(16), + 168: uint8(46), + 169: uint8(47), + 170: uint8(48), + 171: uint8(49), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(50), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(16), + 250: uint8(16), + 251: uint8(51), + 252: uint8(16), + 253: uint8(16), + 254: uint8(52), + 255: uint8(53), + 256: uint8(16), + 257: uint8(54), + 258: uint8(55), + 259: uint8(56), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(57), + 267: uint8(16), + 268: uint8(16), + 269: uint8(58), + 270: uint8(16), + 271: uint8(59), + 272: uint8(60), + 273: uint8(61), + 274: uint8(62), + 275: uint8(63), + 276: uint8(64), + 277: uint8(65), + 278: uint8(66), + 279: uint8(67), + 280: uint8(68), + 281: uint8(69), + 282: uint8(70), + 283: uint8(16), + 284: uint8(71), + 285: uint8(72), + 286: uint8(73), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(74), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(75), + 363: uint8(76), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(77), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(78), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(79), + 466: uint8(80), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(81), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(82), + 481: uint8(83), + 482: uint8(84), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(85), + 489: uint8(86), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(16), + 497: uint8(16), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 588: uint8(255), + 589: uint8(255), + 624: uint8(248), + 625: uint8(3), + 658: uint8(254), + 659: uint8(255), + 660: uint8(255), + 661: uint8(255), + 662: uint8(255), + 663: uint8(191), + 664: uint8(182), + 672: uint8(63), + 674: uint8(255), + 675: uint8(23), + 681: uint8(248), + 682: uint8(255), + 683: uint8(255), + 686: uint8(1), + 698: uint8(192), + 699: uint8(191), + 700: uint8(159), + 701: uint8(61), + 705: uint8(128), + 706: uint8(2), + 710: uint8(255), + 711: uint8(255), + 712: uint8(255), + 713: uint8(7), + 724: uint8(192), + 725: uint8(255), + 726: uint8(1), + 733: uint8(248), + 734: uint8(15), + 735: uint8(32), + 738: uint8(192), + 739: uint8(251), + 740: uint8(239), + 741: uint8(62), + 747: uint8(14), + 762: uint8(248), + 763: uint8(255), + 764: uint8(255), + 765: uint8(255), + 766: uint8(255), + 767: uint8(255), + 768: uint8(7), + 775: uint8(20), + 776: uint8(254), + 777: uint8(33), + 778: uint8(254), + 780: uint8(12), + 784: uint8(2), + 791: uint8(16), + 792: uint8(30), + 793: uint8(32), + 796: uint8(12), + 799: uint8(64), + 800: uint8(6), + 807: uint8(16), + 808: uint8(134), + 809: uint8(57), + 810: uint8(2), + 814: uint8(35), + 816: uint8(6), + 823: uint8(16), + 824: uint8(190), + 825: uint8(33), + 828: uint8(12), + 831: uint8(252), + 832: uint8(2), + 839: uint8(144), + 840: uint8(30), + 841: uint8(32), + 842: uint8(64), + 844: uint8(12), + 848: uint8(4), + 856: uint8(1), + 857: uint8(32), + 864: uint8(17), + 871: uint8(192), + 872: uint8(193), + 873: uint8(61), + 874: uint8(96), + 876: uint8(12), + 880: uint8(2), + 887: uint8(144), + 888: uint8(64), + 889: uint8(48), + 892: uint8(12), + 896: uint8(3), + 903: uint8(24), + 904: uint8(30), + 905: uint8(32), + 908: uint8(12), + 921: uint8(4), + 922: uint8(92), + 934: uint8(242), + 935: uint8(7), + 936: uint8(128), + 937: uint8(127), + 950: uint8(242), + 951: uint8(31), + 953: uint8(63), + 963: uint8(3), + 966: uint8(160), + 967: uint8(2), + 974: uint8(254), + 975: uint8(127), + 976: uint8(223), + 977: uint8(224), + 978: uint8(255), + 979: uint8(254), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(31), + 984: uint8(64), + 997: uint8(224), + 998: uint8(253), + 999: uint8(102), + 1003: uint8(195), + 1004: uint8(1), + 1006: uint8(30), + 1008: uint8(100), + 1009: uint8(32), + 1011: uint8(32), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(255), + 1048: uint8(255), + 1049: uint8(255), + 1050: uint8(255), + 1051: uint8(255), + 1052: uint8(255), + 1053: uint8(255), + 1054: uint8(255), + 1055: uint8(255), + 1067: uint8(224), + 1090: uint8(28), + 1094: uint8(28), + 1098: uint8(12), + 1102: uint8(12), + 1110: uint8(176), + 1111: uint8(63), + 1112: uint8(64), + 1113: uint8(254), + 1114: uint8(15), + 1115: uint8(32), + 1121: uint8(120), + 1136: uint8(96), + 1141: uint8(2), + 1156: uint8(135), + 1157: uint8(1), + 1158: uint8(4), + 1159: uint8(14), + 1186: uint8(128), + 1187: uint8(9), + 1194: uint8(64), + 1195: uint8(127), + 1196: uint8(229), + 1197: uint8(31), + 1198: uint8(248), + 1199: uint8(159), + 1206: uint8(255), + 1207: uint8(127), + 1216: uint8(15), + 1222: uint8(208), + 1223: uint8(23), + 1224: uint8(4), + 1229: uint8(248), + 1230: uint8(15), + 1232: uint8(3), + 1236: uint8(60), + 1237: uint8(59), + 1244: uint8(64), + 1245: uint8(163), + 1246: uint8(3), + 1253: uint8(240), + 1254: uint8(207), + 1274: uint8(247), + 1275: uint8(255), + 1276: uint8(253), + 1277: uint8(33), + 1278: uint8(16), + 1279: uint8(3), + 1304: uint8(255), + 1305: uint8(255), + 1306: uint8(255), + 1307: uint8(255), + 1308: uint8(255), + 1309: uint8(255), + 1310: uint8(255), + 1311: uint8(251), + 1313: uint8(248), + 1317: uint8(124), + 1324: uint8(223), + 1325: uint8(255), + 1338: uint8(255), + 1339: uint8(255), + 1340: uint8(255), + 1341: uint8(255), + 1342: uint8(1), + 1373: uint8(128), + 1374: uint8(3), + 1391: uint8(128), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(255), + 1407: uint8(255), + 1413: uint8(60), + 1427: uint8(6), + 1453: uint8(128), + 1454: uint8(247), + 1455: uint8(63), + 1459: uint8(192), + 1470: uint8(3), + 1472: uint8(68), + 1473: uint8(8), + 1476: uint8(96), + 1496: uint8(48), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(3), + 1503: uint8(128), + 1508: uint8(192), + 1509: uint8(63), + 1512: uint8(128), + 1513: uint8(255), + 1514: uint8(3), + 1520: uint8(7), + 1526: uint8(200), + 1527: uint8(51), + 1532: uint8(32), + 1541: uint8(126), + 1542: uint8(102), + 1544: uint8(8), + 1545: uint8(16), + 1551: uint8(16), + 1558: uint8(157), + 1559: uint8(193), + 1560: uint8(2), + 1565: uint8(48), + 1566: uint8(64), + 1596: uint8(32), + 1597: uint8(33), + 1622: uint8(255), + 1623: uint8(255), + 1624: uint8(255), + 1625: uint8(255), + 1626: uint8(255), + 1627: uint8(255), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1635: uint8(64), + 1664: uint8(255), + 1665: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1695: uint8(128), + 1727: uint8(14), + 1759: uint8(32), + 1788: uint8(1), + 1806: uint8(192), + 1807: uint8(7), + 1824: uint8(110), + 1825: uint8(240), + 1831: uint8(135), + 1852: uint8(96), + 1860: uint8(240), + 1896: uint8(192), + 1897: uint8(255), + 1898: uint8(1), + 1920: uint8(2), + 1927: uint8(255), + 1928: uint8(127), + 1935: uint8(128), + 1936: uint8(3), + 1942: uint8(120), + 1943: uint8(38), + 1945: uint8(32), + 1952: uint8(7), + 1956: uint8(128), + 1957: uint8(239), + 1958: uint8(31), + 1966: uint8(8), + 1968: uint8(3), + 1974: uint8(192), + 1975: uint8(127), + 1977: uint8(30), + 1989: uint8(128), + 1990: uint8(211), + 1991: uint8(64), + 2011: uint8(128), + 2012: uint8(248), + 2013: uint8(7), + 2016: uint8(3), + 2023: uint8(24), + 2024: uint8(1), + 2028: uint8(192), + 2029: uint8(31), + 2030: uint8(31), + 2055: uint8(255), + 2056: uint8(92), + 2059: uint8(64), + 2070: uint8(248), + 2071: uint8(133), + 2072: uint8(13), + 2102: uint8(60), + 2103: uint8(176), + 2104: uint8(1), + 2107: uint8(48), + 2118: uint8(248), + 2119: uint8(167), + 2120: uint8(1), + 2133: uint8(40), + 2134: uint8(191), + 2147: uint8(224), + 2148: uint8(188), + 2149: uint8(15), + 2181: uint8(128), + 2182: uint8(255), + 2183: uint8(6), + 2234: uint8(240), + 2235: uint8(12), + 2236: uint8(1), + 2240: uint8(254), + 2241: uint8(7), + 2246: uint8(248), + 2247: uint8(121), + 2248: uint8(128), + 2250: uint8(126), + 2251: uint8(14), + 2257: uint8(252), + 2258: uint8(127), + 2259: uint8(3), + 2278: uint8(127), + 2279: uint8(191), + 2290: uint8(252), + 2291: uint8(255), + 2292: uint8(255), + 2293: uint8(252), + 2294: uint8(109), + 2310: uint8(126), + 2311: uint8(180), + 2312: uint8(191), + 2322: uint8(163), + 2366: uint8(24), + 2374: uint8(255), + 2375: uint8(1), + 2430: uint8(31), + 2438: uint8(127), + 2473: uint8(128), + 2481: uint8(128), + 2482: uint8(7), + 2515: uint8(96), + 2516: uint8(15), + 2540: uint8(128), + 2541: uint8(3), + 2542: uint8(248), + 2543: uint8(255), + 2544: uint8(231), + 2545: uint8(15), + 2549: uint8(60), + 2568: uint8(28), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2597: uint8(255), + 2598: uint8(127), + 2599: uint8(248), + 2600: uint8(255), + 2601: uint8(255), + 2602: uint8(255), + 2603: uint8(255), + 2604: uint8(255), + 2605: uint8(31), + 2606: uint8(32), + 2608: uint8(16), + 2611: uint8(248), + 2612: uint8(254), + 2613: uint8(255), + 2624: uint8(127), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(249), + 2628: uint8(219), + 2629: uint8(7), + 2662: uint8(127), + 2717: uint8(240), + 2746: uint8(127), + 2760: uint8(240), + 2761: uint8(7), +} + +var _wtable = [1600]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(16), + 4: uint8(16), + 5: uint8(16), + 6: uint8(16), + 7: uint8(16), + 8: uint8(16), + 9: uint8(16), + 10: uint8(16), + 11: uint8(16), + 12: uint8(16), + 13: uint8(16), + 14: uint8(16), + 15: uint8(16), + 16: uint8(16), + 17: uint8(18), + 18: uint8(16), + 19: uint8(16), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(16), + 24: uint8(16), + 25: uint8(16), + 26: uint8(16), + 27: uint8(16), + 28: uint8(16), + 29: uint8(16), + 30: uint8(16), + 31: uint8(16), + 32: uint8(16), + 33: uint8(16), + 34: uint8(16), + 35: uint8(19), + 36: uint8(16), + 37: uint8(20), + 38: uint8(21), + 39: uint8(22), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(23), + 44: uint8(16), + 45: uint8(16), + 46: uint8(24), + 47: uint8(25), + 48: uint8(26), + 49: uint8(27), + 50: uint8(28), + 51: uint8(17), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(29), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(17), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(30), + 165: uint8(16), + 166: uint8(16), + 167: uint8(16), + 168: uint8(16), + 169: uint8(31), + 170: uint8(16), + 171: uint8(16), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(32), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(17), + 251: uint8(16), + 252: uint8(16), + 253: uint8(16), + 254: uint8(33), + 255: uint8(34), + 256: uint8(16), + 257: uint8(16), + 258: uint8(16), + 259: uint8(16), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(16), + 267: uint8(16), + 268: uint8(16), + 269: uint8(16), + 270: uint8(16), + 271: uint8(16), + 272: uint8(16), + 273: uint8(16), + 274: uint8(16), + 275: uint8(16), + 276: uint8(16), + 277: uint8(16), + 278: uint8(16), + 279: uint8(16), + 280: uint8(16), + 281: uint8(16), + 282: uint8(16), + 283: uint8(16), + 284: uint8(16), + 285: uint8(16), + 286: uint8(16), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(16), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(16), + 363: uint8(16), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(35), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(36), + 392: uint8(17), + 393: uint8(17), + 394: uint8(37), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(38), + 434: uint8(39), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(16), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(16), + 482: uint8(16), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(16), + 489: uint8(16), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(40), + 497: uint8(41), + 498: uint8(42), + 499: uint8(43), + 500: uint8(44), + 501: uint8(45), + 502: uint8(46), + 503: uint8(47), + 504: uint8(16), + 505: uint8(48), + 506: uint8(49), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 611: uint8(12), + 613: uint8(6), + 637: uint8(30), + 638: uint8(9), + 671: uint8(96), + 674: uint8(48), + 681: uint8(255), + 682: uint8(15), + 687: uint8(128), + 690: uint8(8), + 692: uint8(2), + 693: uint8(12), + 695: uint8(96), + 696: uint8(48), + 697: uint8(64), + 698: uint8(16), + 701: uint8(4), + 702: uint8(44), + 703: uint8(36), + 704: uint8(32), + 705: uint8(12), + 709: uint8(1), + 713: uint8(80), + 714: uint8(184), + 722: uint8(224), + 726: uint8(1), + 727: uint8(128), + 739: uint8(24), + 746: uint8(33), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(251), + 788: uint8(255), + 789: uint8(255), + 790: uint8(255), + 791: uint8(255), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(255), + 798: uint8(15), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(255), + 804: uint8(255), + 805: uint8(255), + 806: uint8(255), + 807: uint8(255), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(255), + 812: uint8(255), + 813: uint8(255), + 814: uint8(255), + 815: uint8(255), + 816: uint8(255), + 817: uint8(255), + 818: uint8(255), + 819: uint8(255), + 820: uint8(255), + 821: uint8(255), + 822: uint8(255), + 823: uint8(255), + 824: uint8(255), + 825: uint8(255), + 826: uint8(63), + 830: uint8(255), + 831: uint8(15), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(127), + 840: uint8(254), + 841: uint8(255), + 842: uint8(255), + 843: uint8(255), + 844: uint8(255), + 845: uint8(255), + 846: uint8(255), + 847: uint8(255), + 848: uint8(255), + 849: uint8(255), + 850: uint8(127), + 851: uint8(254), + 852: uint8(255), + 853: uint8(255), + 854: uint8(255), + 855: uint8(255), + 856: uint8(255), + 857: uint8(255), + 858: uint8(255), + 859: uint8(255), + 860: uint8(255), + 861: uint8(255), + 862: uint8(255), + 863: uint8(255), + 864: uint8(224), + 865: uint8(255), + 866: uint8(255), + 867: uint8(255), + 868: uint8(255), + 869: uint8(255), + 870: uint8(254), + 871: uint8(255), + 872: uint8(255), + 873: uint8(255), + 874: uint8(255), + 875: uint8(255), + 876: uint8(255), + 877: uint8(255), + 878: uint8(255), + 879: uint8(255), + 880: uint8(255), + 881: uint8(127), + 882: uint8(255), + 883: uint8(255), + 884: uint8(255), + 885: uint8(255), + 886: uint8(255), + 887: uint8(7), + 888: uint8(255), + 889: uint8(255), + 890: uint8(255), + 891: uint8(255), + 892: uint8(15), + 894: uint8(255), + 895: uint8(255), + 896: uint8(255), + 897: uint8(255), + 898: uint8(255), + 899: uint8(127), + 900: uint8(255), + 901: uint8(255), + 902: uint8(255), + 903: uint8(255), + 904: uint8(255), + 906: uint8(255), + 907: uint8(255), + 908: uint8(255), + 909: uint8(255), + 910: uint8(255), + 911: uint8(255), + 912: uint8(255), + 913: uint8(255), + 914: uint8(255), + 915: uint8(255), + 916: uint8(255), + 917: uint8(255), + 918: uint8(255), + 919: uint8(255), + 920: uint8(255), + 921: uint8(255), + 922: uint8(255), + 923: uint8(255), + 924: uint8(255), + 925: uint8(255), + 926: uint8(255), + 927: uint8(255), + 928: uint8(255), + 929: uint8(255), + 930: uint8(255), + 931: uint8(255), + 932: uint8(255), + 933: uint8(255), + 934: uint8(255), + 935: uint8(255), + 936: uint8(255), + 937: uint8(255), + 938: uint8(255), + 939: uint8(255), + 940: uint8(255), + 941: uint8(255), + 942: uint8(255), + 943: uint8(255), + 944: uint8(255), + 945: uint8(255), + 946: uint8(255), + 947: uint8(255), + 948: uint8(255), + 949: uint8(255), + 950: uint8(255), + 951: uint8(255), + 960: uint8(255), + 961: uint8(255), + 962: uint8(255), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(255), + 968: uint8(255), + 969: uint8(255), + 970: uint8(255), + 971: uint8(255), + 972: uint8(255), + 973: uint8(255), + 974: uint8(255), + 975: uint8(255), + 976: uint8(255), + 977: uint8(31), + 978: uint8(255), + 979: uint8(255), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(255), + 984: uint8(127), + 1004: uint8(255), + 1005: uint8(255), + 1006: uint8(255), + 1007: uint8(31), + 1024: uint8(255), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1028: uint8(255), + 1029: uint8(255), + 1030: uint8(255), + 1031: uint8(255), + 1032: uint8(255), + 1033: uint8(255), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(15), + 1058: uint8(255), + 1059: uint8(3), + 1062: uint8(255), + 1063: uint8(255), + 1064: uint8(255), + 1065: uint8(255), + 1066: uint8(247), + 1067: uint8(255), + 1068: uint8(127), + 1069: uint8(15), + 1088: uint8(254), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(255), + 1098: uint8(255), + 1099: uint8(255), + 1100: uint8(1), + 1116: uint8(127), + 1148: uint8(15), + 1152: uint8(255), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(255), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(255), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(255), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(255), + 1214: uint8(7), + 1216: uint8(255), + 1217: uint8(255), + 1218: uint8(255), + 1219: uint8(127), + 1226: uint8(7), + 1228: uint8(240), + 1230: uint8(255), + 1231: uint8(255), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(255), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(255), + 1242: uint8(255), + 1243: uint8(255), + 1244: uint8(255), + 1245: uint8(255), + 1246: uint8(255), + 1247: uint8(255), + 1248: uint8(255), + 1249: uint8(255), + 1250: uint8(255), + 1251: uint8(255), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(255), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(255), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(15), + 1280: uint8(16), + 1305: uint8(128), + 1329: uint8(64), + 1330: uint8(254), + 1331: uint8(7), + 1344: uint8(7), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(255), + 1351: uint8(15), + 1352: uint8(255), + 1353: uint8(1), + 1354: uint8(3), + 1356: uint8(63), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(1), + 1381: uint8(224), + 1382: uint8(191), + 1383: uint8(255), + 1384: uint8(255), + 1385: uint8(255), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(223), + 1392: uint8(255), + 1393: uint8(255), + 1394: uint8(15), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(255), + 1400: uint8(255), + 1401: uint8(135), + 1402: uint8(15), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(17), + 1407: uint8(255), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(127), + 1416: uint8(253), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1432: uint8(255), + 1433: uint8(255), + 1434: uint8(255), + 1435: uint8(255), + 1436: uint8(255), + 1437: uint8(255), + 1438: uint8(255), + 1439: uint8(159), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(63), + 1449: uint8(120), + 1450: uint8(255), + 1451: uint8(255), + 1452: uint8(255), + 1455: uint8(4), + 1458: uint8(96), + 1460: uint8(16), + 1471: uint8(248), + 1472: uint8(255), + 1473: uint8(255), + 1474: uint8(255), + 1475: uint8(255), + 1476: uint8(255), + 1477: uint8(255), + 1478: uint8(255), + 1479: uint8(255), + 1480: uint8(255), + 1481: uint8(255), + 1488: uint8(255), + 1489: uint8(255), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(63), + 1497: uint8(16), + 1498: uint8(39), + 1501: uint8(24), + 1502: uint8(240), + 1503: uint8(7), + 1532: uint8(255), + 1533: uint8(15), + 1537: uint8(224), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(123), + 1551: uint8(252), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(255), + 1555: uint8(255), + 1556: uint8(231), + 1557: uint8(199), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(231), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1582: uint8(15), + 1583: uint8(7), + 1584: uint8(7), + 1586: uint8(63), +} + +func Xwcwidth(tls *TLS, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 int32 + _, _ = v1, v2 + if uint32(wc) < uint32(0xff) { + if (wc+int32(1))&int32(0x7f) >= int32(0x21) { + v1 = int32(1) + } else { + if wc != 0 { + v2 = -int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 + } + if uint32(wc)&uint32(0xfffeffff) < uint32(0xfffe) { + if int32(_table5[int32(_table5[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return 0 + } + if int32(_wtable[int32(_wtable[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return int32(2) + } + return int32(1) + } + if wc&int32(0xfffe) == int32(0xfffe) { + return -int32(1) + } + if uint32(wc)-uint32(0x20000) < uint32(0x20000) { + return int32(2) + } + if wc == int32(0xe0001) || uint32(wc)-uint32(0xe0020) < uint32(0x5f) || uint32(wc)-uint32(0xe0100) < uint32(0xef) { + return 0 + } + return int32(1) +} + +const d_fileno = 0 + +type Tino_t = uint64 + +type Tdirent = struct { + Fd_ino Tino_t + Fd_off Toff_t + Fd_reclen uint16 + Fd_type uint8 + Fd_name [256]uint8 +} + +func Xalphasort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrcoll(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +type TDIR = struct { + Ftell Toff_t + Ffd int32 + Fbuf_pos int32 + Fbuf_end int32 + Flock [1]int32 + Fbuf [2048]uint8 +} + +type t__dirstream = TDIR + +func Xclosedir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = Xclose(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd) + Xfree(tls, dir) + return ret +} + +func Xdirfd(tls *TLS, d uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(d)).Ffd +} + +const AT_EACCESS = 512 +const AT_FDCWD = -100 +const AT_REMOVEDIR = 512 +const AT_SYMLINK_FOLLOW = 1024 +const AT_SYMLINK_NOFOLLOW = 256 +const FD_CLOEXEC = 1 +const F_DUPFD = 0 +const F_DUPFD_CLOEXEC = 1030 +const F_GETFD = 1 +const F_GETFL = 3 +const F_GETLK = 5 +const F_GETOWN = 9 +const F_GETOWNER_UIDS = 17 +const F_GETOWN_EX = 16 +const F_GETSIG = 11 +const F_OFD_GETLK = 36 +const F_OFD_SETLK = 37 +const F_OFD_SETLKW = 38 +const F_RDLCK = 0 +const F_SETFD = 2 +const F_SETFL = 4 +const F_SETLK = 6 +const F_SETLKW = 7 +const F_SETOWN = 8 +const F_SETOWN_EX = 15 +const F_SETSIG = 10 +const F_UNLCK = 2 +const F_WRLCK = 1 +const O_ACCMODE = 2097155 +const O_APPEND = 1024 +const O_ASYNC = 8192 +const O_CLOEXEC = 524288 +const O_CREAT = 64 +const O_DIRECT = 131072 +const O_DIRECTORY = 16384 +const O_DSYNC = 4096 +const O_EXCL = 128 +const O_EXEC = 2097152 +const O_LARGEFILE = 65536 +const O_NDELAY = 2048 +const O_NOATIME = 262144 +const O_NOCTTY = 256 +const O_NOFOLLOW = 32768 +const O_NONBLOCK = 2048 +const O_PATH = 2097152 +const O_RDONLY = 0 +const O_RDWR = 2 +const O_RSYNC = 1052672 +const O_SEARCH = 2097152 +const O_SYNC = 1052672 +const O_TMPFILE = 4210688 +const O_TRUNC = 512 +const O_TTY_INIT = 0 +const O_WRONLY = 1 +const POSIX_FADV_DONTNEED = 4 +const POSIX_FADV_NOREUSE = 5 +const POSIX_FADV_NORMAL = 0 +const POSIX_FADV_RANDOM = 1 +const POSIX_FADV_SEQUENTIAL = 2 +const POSIX_FADV_WILLNEED = 3 +const S_IFBLK = 24576 +const S_IFCHR = 8192 +const S_IFDIR = 16384 +const S_IFIFO = 4096 +const S_IFLNK = 40960 +const S_IFMT = 61440 +const S_IFREG = 32768 +const S_IFSOCK = 49152 +const S_IRGRP = 32 +const S_IROTH = 4 +const S_IRUSR = 256 +const S_IRWXG = 56 +const S_IRWXO = 7 +const S_IRWXU = 448 +const S_ISGID = 1024 +const S_ISUID = 2048 +const S_ISVTX = 512 +const S_IWGRP = 16 +const S_IWOTH = 2 +const S_IWUSR = 128 +const S_IXGRP = 8 +const S_IXOTH = 1 +const S_IXUSR = 64 +const UTIME_NOW = 1073741823 +const UTIME_OMIT = 1073741822 + +type Tflock = struct { + Fl_type int16 + Fl_whence int16 + Fl_start Toff_t + Fl_len Toff_t + Fl_pid Tpid_t +} + +type Tnlink_t = uint64 + +type Tdev_t = uint64 + +type Tblksize_t = int64 + +type Tblkcnt_t = int64 + +type Tstat = struct { + Fst_dev Tdev_t + Fst_ino Tino_t + Fst_nlink Tnlink_t + Fst_mode Tmode_t + Fst_uid Tuid_t + Fst_gid Tgid_t + Fst_rdev Tdev_t + Fst_size Toff_t + Fst_blksize Tblksize_t + Fst_blocks Tblkcnt_t + Fst_atim Ttimespec + Fst_mtim Ttimespec + Fst_ctim Ttimespec + F__unused [3]uint64 +} + +func Xfdopendir(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var dir, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _ = dir, v1 + if Xfstat(tls, fd, bp) < 0 { + return uintptr(0) + } + if Xfcntl(tls, fd, int32(F_GETFL), 0)&int32(O_PATH) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return uintptr(0) + } + if !((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&Uint32FromInt32(S_IFMT) == Uint32FromInt32(S_IFDIR)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTDIR) + return uintptr(0) + } + v1 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v1 + if !(v1 != 0) { + return uintptr(0) + } + Xfcntl(tls, fd, int32(F_SETFD), VaList(bp+152, int32(FD_CLOEXEC))) + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +const AT_EMPTY_PATH = 4096 +const AT_NO_AUTOMOUNT = 2048 +const AT_RECURSIVE = 32768 +const AT_STATX_DONT_SYNC = 16384 +const AT_STATX_FORCE_SYNC = 8192 +const AT_STATX_SYNC_AS_STAT = 0 +const AT_STATX_SYNC_TYPE = 24576 +const DN_ACCESS = 1 +const DN_ATTRIB = 32 +const DN_CREATE = 4 +const DN_DELETE = 8 +const DN_MODIFY = 2 +const DN_MULTISHOT = 2147483648 +const DN_RENAME = 16 +const DT_BLK = 6 +const DT_CHR = 2 +const DT_DIR = 4 +const DT_FIFO = 1 +const DT_LNK = 10 +const DT_REG = 8 +const DT_SOCK = 12 +const DT_UNKNOWN = 0 +const DT_WHT = 14 +const FALLOC_FL_KEEP_SIZE = 1 +const FALLOC_FL_PUNCH_HOLE = 2 +const FAPPEND = 1024 +const FASYNC = 8192 +const FFSYNC = 1052672 +const FNDELAY = 2048 +const FNONBLOCK = 2048 +const F_ADD_SEALS = 1033 +const F_CANCELLK = 1029 +const F_GETLEASE = 1025 +const F_GETPIPE_SZ = 1032 +const F_GET_FILE_RW_HINT = 1037 +const F_GET_RW_HINT = 1035 +const F_GET_SEALS = 1034 +const F_NOTIFY = 1026 +const F_OWNER_GID = 2 +const F_OWNER_PGRP = 2 +const F_OWNER_PID = 1 +const F_OWNER_TID = 0 +const F_SEAL_FUTURE_WRITE = 16 +const F_SEAL_GROW = 4 +const F_SEAL_SEAL = 1 +const F_SEAL_SHRINK = 2 +const F_SEAL_WRITE = 8 +const F_SETLEASE = 1024 +const F_SETPIPE_SZ = 1031 +const F_SET_FILE_RW_HINT = 1038 +const F_SET_RW_HINT = 1036 +const MAX_HANDLE_SZ = 128 +const RWF_WRITE_LIFE_NOT_SET = 0 +const RWH_WRITE_LIFE_EXTREME = 5 +const RWH_WRITE_LIFE_LONG = 4 +const RWH_WRITE_LIFE_MEDIUM = 3 +const RWH_WRITE_LIFE_NONE = 1 +const RWH_WRITE_LIFE_SHORT = 2 +const SPLICE_F_GIFT = 8 +const SPLICE_F_MORE = 4 +const SPLICE_F_MOVE = 1 +const SPLICE_F_NONBLOCK = 2 +const SYNC_FILE_RANGE_WAIT_AFTER = 4 +const SYNC_FILE_RANGE_WAIT_BEFORE = 1 +const SYNC_FILE_RANGE_WRITE = 2 +const alloca = 0 +const loff_t = 0 + +type Tiovec = struct { + Fiov_base uintptr + Fiov_len Tsize_t +} + +type Tfile_handle = struct { + Fhandle_bytes uint32 + Fhandle_type int32 +} + +type Tf_owner_ex = struct { + Ftype1 int32 + Fpid Tpid_t +} + +func Xopendir(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dir, v2 uintptr + var fd, v1 int32 + _, _, _, _ = dir, fd, v1, v2 + v1 = Xopen(tls, name, Int32FromInt32(O_RDONLY)|Int32FromInt32(O_DIRECTORY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + v2 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v2 + if !(v2 != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +type Tptrdiff_t = int64 + +type Tdirstream_buf_alignment_check = [1]uint8 + +func Xreaddir(tls *TLS, dir uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var len1 int32 + _, _ = de, len1 + if (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos >= (*TDIR)(unsafe.Pointer(dir)).Fbuf_end { + len1 = int32(X__syscall3(tls, int64(SYS_getdents64), int64((*TDIR)(unsafe.Pointer(dir)).Ffd), int64(dir+24), int64(Uint64FromInt64(2048)))) + if len1 <= 0 { + if len1 < 0 && len1 != -int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = -len1 + } + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = len1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = 0 + } + de = dir + 24 + uintptr((*TDIR)(unsafe.Pointer(dir)).Fbuf_pos) + *(*int32)(unsafe.Pointer(dir + 12)) += int32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen) + (*TDIR)(unsafe.Pointer(dir)).Ftell = (*Tdirent)(unsafe.Pointer(de)).Fd_off + return de +} + +func Xreaddir_r(tls *TLS, dir uintptr, buf uintptr, result uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v buf=%v result=%v, (%v:)", tls, dir, buf, result, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var errno_save, ret, v1 int32 + _, _, _, _ = de, errno_save, ret, v1 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ___lock(tls, dir+20) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + de = Xreaddir(tls, dir) + v1 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ret = v1 + if v1 != 0 { + ___unlock(tls, dir+20) + return ret + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + if de != 0 { + Xmemcpy(tls, buf, de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } else { + buf = UintptrFromInt32(0) + } + ___unlock(tls, dir+20) + *(*uintptr)(unsafe.Pointer(result)) = buf + return 0 +} + +func Xrewinddir(tls *TLS, dir uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, 0, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + (*TDIR)(unsafe.Pointer(dir)).Ftell = 0 + ___unlock(tls, dir+20) +} + +func Xscandir(tls *TLS, path uintptr, res uintptr, sel uintptr, cmp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v res=%v sel=%v cmp=%v, (%v:)", tls, path, res, sel, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cnt, len1, v2, v3 Tsize_t + var d, de, names, tmp, v1 uintptr + var old_errno int32 + _, _, _, _, _, _, _, _, _, _ = cnt, d, de, len1, names, old_errno, tmp, v1, v2, v3 + d = Xopendir(tls, path) + names = uintptr(0) + cnt = uint64(0) + len1 = uint64(0) + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if !(d != 0) { + return -int32(1) + } + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v1 = Xreaddir(tls, d) + de = v1 + if !(v1 != 0) { + break + } + if sel != 0 && !((*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{sel})))(tls, de) != 0) { + continue + } + if cnt >= len1 { + len1 = uint64(2)*len1 + uint64(1) + if len1 > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + break + } + tmp = Xrealloc(tls, names, len1*uint64(8)) + if !(tmp != 0) { + break + } + names = tmp + } + *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) = Xmalloc(tls, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + if !(*(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) != 0) { + break + } + v2 = cnt + cnt++ + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(v2)*8)), de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } + Xclosedir(tls, d) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != 0 { + if names != 0 { + for { + v3 = cnt + cnt-- + if !(v3 > uint64(0)) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8))) + } + } + Xfree(tls, names) + return -int32(1) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if cmp != 0 { + Xqsort(tls, names, cnt, uint64(8), cmp) + } + *(*uintptr)(unsafe.Pointer(res)) = names + return int32(cnt) +} + +func Xseekdir(tls *TLS, dir uintptr, off int64) { + if __ccgo_strace { + trc("tls=%v dir=%v off=%v, (%v:)", tls, dir, off, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + (*TDIR)(unsafe.Pointer(dir)).Ftell = Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, off, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + ___unlock(tls, dir+20) +} + +func Xtelldir(tls *TLS, dir uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(dir)).Ftell +} + +func Xversionsort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrverscmp(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +func X__reset_tls(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var i, n Tsize_t + var mem, p uintptr + var self Tpthread_t + _, _, _, _, _ = i, mem, n, p, self + self = ___get_tp(tls) + n = *(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv)) + if n != 0 { + p = X__libc.Ftls_head + i = Uint64FromInt32(1) + for { + if !(i <= n) { + break + } + mem = uintptr(*(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv + uintptr(i)*8)) - Uint64FromInt32(DTP_OFFSET)) + Xmemcpy(tls, mem, (*Ttls_module)(unsafe.Pointer(p)).Fimage, (*Ttls_module)(unsafe.Pointer(p)).Flen1) + Xmemset(tls, mem+uintptr((*Ttls_module)(unsafe.Pointer(p)).Flen1), 0, (*Ttls_module)(unsafe.Pointer(p)).Fsize-(*Ttls_module)(unsafe.Pointer(p)).Flen1) + goto _1 + _1: + ; + i++ + p = (*Ttls_module)(unsafe.Pointer(p)).Fnext + } + } +} + +func X__init_ssp(tls *TLS, entropy uintptr) { + if __ccgo_strace { + trc("tls=%v entropy=%v, (%v:)", tls, entropy, origin(2)) + } + if entropy != 0 { + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__stack_chk_guard)), entropy, uint64(8)) + } else { + X__stack_chk_guard = Tuintptr_t(uintptr(unsafe.Pointer(&X__stack_chk_guard))) * uint64(1103515245) + } + /* Sacrifice 8 bits of entropy on 64bit to prevent leaking/ + * overwriting the canary via string-manipulation functions. + * The NULL byte is on the second byte so that off-by-ones can + * still be detected. Endianness is taken care of + * automatically. */ + *(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stack_chk_guard)) + 1)) = uint8(0) + (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fcanary = X__stack_chk_guard +} + +func X__stack_chk_fail(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + // __asm__ __volatile__ (".long 0"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 54, __ccgo_ts+261) +} + +func X__stack_chk_fail_local(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stack_chk_fail(tls) +} + +const L_INCR = 1 +const L_SET = 0 +const L_XTND = 2 + +func _dummy(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xclearenv(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, v1 uintptr + _, _ = e, v1 + e = Xenviron + Xenviron = uintptr(0) + if e != 0 { + for *(*uintptr)(unsafe.Pointer(e)) != 0 { + v1 = e + e += 8 + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(v1)), uintptr(0)) + } + } + return 0 +} + +func Xgetenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e uintptr + var l Tsize_t + _, _ = e, l + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if l != 0 && !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) && Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + return *(*uintptr)(unsafe.Pointer(e)) + uintptr(l) + uintptr(1) + } + goto _1 + _1: + ; + e += 8 + } + } + return uintptr(0) +} + +func _dummy1(tls *TLS, old uintptr, new1 uintptr) { +} + +func X__putenv(tls *TLS, s uintptr, l Tsize_t, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var e, newenv, tmp, v2 uintptr + var i Tsize_t + _, _, _, _, _ = e, i, newenv, tmp, v2 + i = uint64(0) + if Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) { + tmp = *(*uintptr)(unsafe.Pointer(e)) + *(*uintptr)(unsafe.Pointer(e)) = s + X__env_rm_add(tls, tmp, r) + return 0 + } + goto _1 + _1: + ; + e += 8 + i++ + } + } + if Xenviron == _oldenv { + newenv = Xrealloc(tls, _oldenv, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + } else { + newenv = Xmalloc(tls, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + if i != 0 { + Xmemcpy(tls, newenv, Xenviron, uint64(8)*i) + } + Xfree(tls, _oldenv) + } + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0) + v2 = newenv + _oldenv = v2 + Xenviron = v2 + if r != 0 { + X__env_rm_add(tls, uintptr(0), r) + } + return 0 + goto oom +oom: + ; + Xfree(tls, r) + return -int32(1) +} + +var _oldenv uintptr + +func Xputenv(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = uint64(int64(X__strchrnul(tls, s, int32('='))) - int64(s)) + if !(l != 0) || !(*(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0) { + return Xunsetenv(tls, s) + } + return X__putenv(tls, s, l, uintptr(0)) +} + +const L_cuserid = 20 +const NL_NMAX = 16 + +type Tcookie_io_functions_t = struct { + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fclose1 uintptr +} + +type T_IO_cookie_io_functions_t = Tcookie_io_functions_t + +func Xsecure_getenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if X__libc.Fsecure != 0 { + v1 = UintptrFromInt32(0) + } else { + v1 = Xgetenv(tls, name) + } + return v1 +} + +func X__env_rm_add(tls *TLS, old uintptr, new1 uintptr) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + } + var i, v3 Tsize_t + var t, v2 uintptr + _, _, _, _ = i, t, v2, v3 + i = uint64(0) + for { + if !(i < _env_alloced_n) { + break + } + if *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) == old { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + Xfree(tls, old) + return + } else { + if !(*(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) != 0) && new1 != 0 { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + new1 = uintptr(0) + } + } + goto _1 + _1: + ; + i++ + } + if !(new1 != 0) { + return + } + t = Xrealloc(tls, _env_alloced, uint64(8)*(_env_alloced_n+uint64(1))) + if !(t != 0) { + return + } + v2 = t + _env_alloced = v2 + v3 = _env_alloced_n + _env_alloced_n++ + *(*uintptr)(unsafe.Pointer(v2 + uintptr(v3)*8)) = new1 +} + +var _env_alloced uintptr + +var _env_alloced_n Tsize_t + +func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) (r int32) { + if __ccgo_strace { + trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l1, l2, v1 Tsize_t + var s uintptr + var v2 bool + _, _, _, _, _ = l1, l2, s, v1, v2 + if v2 = !(var1 != 0); !v2 { + v1 = uint64(int64(X__strchrnul(tls, var1, int32('='))) - int64(var1)) + l1 = v1 + } + if v2 || !(v1 != 0) || *(*uint8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { + return 0 + } + l2 = Xstrlen(tls, value) + s = Xmalloc(tls, l1+l2+uint64(2)) + if !(s != 0) { + return -int32(1) + } + Xmemcpy(tls, s, var1, l1) + *(*uint8)(unsafe.Pointer(s + uintptr(l1))) = uint8('=') + Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1)) + return X__putenv(tls, s, l1, s) +} + +func _dummy2(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xunsetenv(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, eo, v2 uintptr + var l Tsize_t + _, _, _, _ = e, eo, l, v2 + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if !(l != 0) || *(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if Xenviron != 0 { + e = Xenviron + eo = e + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) + } else { + if eo != e { + v2 = eo + eo += 8 + *(*uintptr)(unsafe.Pointer(v2)) = *(*uintptr)(unsafe.Pointer(e)) + } else { + eo += 8 + } + } + goto _1 + _1: + ; + e += 8 + } + if eo != e { + *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) + } + } + return 0 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +type Terrmsgstr_t = struct { + Fstr0 [21]uint8 + FstrEILSEQ [22]uint8 + FstrEDOM [13]uint8 + FstrERANGE [25]uint8 + FstrENOTTY [10]uint8 + FstrEACCES [18]uint8 + FstrEPERM [24]uint8 + FstrENOENT [26]uint8 + FstrESRCH [16]uint8 + FstrEEXIST [12]uint8 + FstrEOVERFLOW [30]uint8 + FstrENOSPC [24]uint8 + FstrENOMEM [14]uint8 + FstrEBUSY [14]uint8 + FstrEINTR [24]uint8 + FstrEAGAIN [33]uint8 + FstrESPIPE [13]uint8 + FstrEXDEV [18]uint8 + FstrEROFS [22]uint8 + FstrENOTEMPTY [20]uint8 + FstrECONNRESET [25]uint8 + FstrETIMEDOUT [20]uint8 + FstrECONNREFUSED [19]uint8 + FstrEHOSTDOWN [13]uint8 + FstrEHOSTUNREACH [20]uint8 + FstrEADDRINUSE [15]uint8 + FstrEPIPE [12]uint8 + FstrEIO [10]uint8 + FstrENXIO [26]uint8 + FstrENOTBLK [22]uint8 + FstrENODEV [15]uint8 + FstrENOTDIR [16]uint8 + FstrEISDIR [15]uint8 + FstrETXTBSY [15]uint8 + FstrENOEXEC [18]uint8 + FstrEINVAL [17]uint8 + FstrE2BIG [23]uint8 + FstrELOOP [19]uint8 + FstrENAMETOOLONG [18]uint8 + FstrENFILE [30]uint8 + FstrEMFILE [30]uint8 + FstrEBADF [20]uint8 + FstrECHILD [17]uint8 + FstrEFAULT [12]uint8 + FstrEFBIG [15]uint8 + FstrEMLINK [15]uint8 + FstrENOLCK [19]uint8 + FstrEDEADLK [30]uint8 + FstrENOTRECOVERABLE [22]uint8 + FstrEOWNERDEAD [20]uint8 + FstrECANCELED [19]uint8 + FstrENOSYS [25]uint8 + FstrENOMSG [27]uint8 + FstrEIDRM [19]uint8 + FstrENOSTR [20]uint8 + FstrENODATA [18]uint8 + FstrETIME [15]uint8 + FstrENOSR [25]uint8 + FstrENOLINK [22]uint8 + FstrEPROTO [15]uint8 + FstrEBADMSG [12]uint8 + FstrEBADFD [29]uint8 + FstrENOTSOCK [13]uint8 + FstrEDESTADDRREQ [29]uint8 + FstrEMSGSIZE [18]uint8 + FstrEPROTOTYPE [31]uint8 + FstrENOPROTOOPT [23]uint8 + FstrEPROTONOSUPPORT [23]uint8 + FstrESOCKTNOSUPPORT [26]uint8 + FstrENOTSUP [14]uint8 + FstrEPFNOSUPPORT [30]uint8 + FstrEAFNOSUPPORT [41]uint8 + FstrEADDRNOTAVAIL [22]uint8 + FstrENETDOWN [16]uint8 + FstrENETUNREACH [20]uint8 + FstrENETRESET [28]uint8 + FstrECONNABORTED [19]uint8 + FstrENOBUFS [26]uint8 + FstrEISCONN [20]uint8 + FstrENOTCONN [21]uint8 + FstrESHUTDOWN [34]uint8 + FstrEALREADY [30]uint8 + FstrEINPROGRESS [22]uint8 + FstrESTALE [18]uint8 + FstrEREMOTEIO [17]uint8 + FstrEDQUOT [15]uint8 + FstrENOMEDIUM [16]uint8 + FstrEMEDIUMTYPE [18]uint8 + FstrEMULTIHOP [19]uint8 + FstrENOKEY [27]uint8 + FstrEKEYEXPIRED [16]uint8 + FstrEKEYREVOKED [21]uint8 + FstrEKEYREJECTED [28]uint8 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +var _errmsgstr = Terrmsgstr_t{ + Fstr0: [21]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', ' ', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n'}, + FstrEILSEQ: [22]uint8{'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'b', 'y', 't', 'e', ' ', 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e'}, + FstrEDOM: [13]uint8{'D', 'o', 'm', 'a', 'i', 'n', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrERANGE: [25]uint8{'R', 'e', 's', 'u', 'l', 't', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a', 'b', 'l', 'e'}, + FstrENOTTY: [10]uint8{'N', 'o', 't', ' ', 'a', ' ', 't', 't', 'y'}, + FstrEACCES: [18]uint8{'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', ' ', 'd', 'e', 'n', 'i', 'e', 'd'}, + FstrEPERM: [24]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'e', 'r', 'm', 'i', 't', 't', 'e', 'd'}, + FstrENOENT: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'f', 'i', 'l', 'e', ' ', 'o', 'r', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrESRCH: [16]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEEXIST: [12]uint8{'F', 'i', 'l', 'e', ' ', 'e', 'x', 'i', 's', 't', 's'}, + FstrEOVERFLOW: [30]uint8{'V', 'a', 'l', 'u', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'a', 't', 'a', ' ', 't', 'y', 'p', 'e'}, + FstrENOSPC: [24]uint8{'N', 'o', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'l', 'e', 'f', 't', ' ', 'o', 'n', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOMEM: [14]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y'}, + FstrEBUSY: [14]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrEINTR: [24]uint8{'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 'e', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l'}, + FstrEAGAIN: [33]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 't', 'e', 'm', 'p', 'o', 'r', 'a', 'r', 'i', 'l', 'y', ' ', 'u', 'n', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrESPIPE: [13]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 's', 'e', 'e', 'k'}, + FstrEXDEV: [18]uint8{'C', 'r', 'o', 's', 's', '-', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'l', 'i', 'n', 'k'}, + FstrEROFS: [22]uint8{'R', 'e', 'a', 'd', '-', 'o', 'n', 'l', 'y', ' ', 'f', 'i', 'l', 'e', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrENOTEMPTY: [20]uint8{'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'n', 'o', 't', ' ', 'e', 'm', 'p', 't', 'y'}, + FstrECONNRESET: [25]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'p', 'e', 'e', 'r'}, + FstrETIMEDOUT: [20]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 't', 'i', 'm', 'e', 'd', ' ', 'o', 'u', 't'}, + FstrECONNREFUSED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 'f', 'u', 's', 'e', 'd'}, + FstrEHOSTDOWN: [13]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrEHOSTUNREACH: [20]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrEADDRINUSE: [15]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'i', 'n', ' ', 'u', 's', 'e'}, + FstrEPIPE: [12]uint8{'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e'}, + FstrEIO: [10]uint8{'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrENXIO: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'o', 'r', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrENOTBLK: [22]uint8{'B', 'l', 'o', 'c', 'k', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrENODEV: [15]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOTDIR: [16]uint8{'N', 'o', 't', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrEISDIR: [15]uint8{'I', 's', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrETXTBSY: [15]uint8{'T', 'e', 'x', 't', ' ', 'f', 'i', 'l', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrENOEXEC: [18]uint8{'E', 'x', 'e', 'c', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEINVAL: [17]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'a', 'r', 'g', 'u', 'm', 'e', 'n', 't'}, + FstrE2BIG: [23]uint8{'A', 'r', 'g', 'u', 'm', 'e', 'n', 't', ' ', 'l', 'i', 's', 't', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrELOOP: [19]uint8{'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', ' ', 'l', 'i', 'n', 'k', ' ', 'l', 'o', 'o', 'p'}, + FstrENAMETOOLONG: [18]uint8{'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrENFILE: [30]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'o', 'p', 'e', 'n', ' ', 'f', 'i', 'l', 'e', 's', ' ', 'i', 'n', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrEMFILE: [30]uint8{'N', 'o', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEBADF: [20]uint8{'B', 'a', 'd', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r'}, + FstrECHILD: [17]uint8{'N', 'o', ' ', 'c', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEFAULT: [12]uint8{'B', 'a', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrEFBIG: [15]uint8{'F', 'i', 'l', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEMLINK: [15]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'l', 'i', 'n', 'k', 's'}, + FstrENOLCK: [19]uint8{'N', 'o', ' ', 'l', 'o', 'c', 'k', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEDEADLK: [30]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'd', 'e', 'a', 'd', 'l', 'o', 'c', 'k', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'o', 'c', 'c', 'u', 'r'}, + FstrENOTRECOVERABLE: [22]uint8{'S', 't', 'a', 't', 'e', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e'}, + FstrEOWNERDEAD: [20]uint8{'P', 'r', 'e', 'v', 'i', 'o', 'u', 's', ' ', 'o', 'w', 'n', 'e', 'r', ' ', 'd', 'i', 'e', 'd'}, + FstrECANCELED: [19]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'c', 'a', 'n', 'c', 'e', 'l', 'e', 'd'}, + FstrENOSYS: [25]uint8{'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'i', 'm', 'p', 'l', 'e', 'm', 'e', 'n', 't', 'e', 'd'}, + FstrENOMSG: [27]uint8{'N', 'o', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 'o', 'f', ' ', 'd', 'e', 's', 'i', 'r', 'e', 'd', ' ', 't', 'y', 'p', 'e'}, + FstrEIDRM: [19]uint8{'I', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd'}, + FstrENOSTR: [20]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 'n', 'o', 't', ' ', 'a', ' ', 's', 't', 'r', 'e', 'a', 'm'}, + FstrENODATA: [18]uint8{'N', 'o', ' ', 'd', 'a', 't', 'a', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrETIME: [15]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 't', 'i', 'm', 'e', 'o', 'u', 't'}, + FstrENOSR: [25]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 's', 't', 'r', 'e', 'a', 'm', 's', ' ', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's'}, + FstrENOLINK: [22]uint8{'L', 'i', 'n', 'k', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 's', 'e', 'v', 'e', 'r', 'e', 'd'}, + FstrEPROTO: [15]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEBADMSG: [12]uint8{'B', 'a', 'd', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'}, + FstrEBADFD: [29]uint8{'F', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', ' ', 'i', 'n', ' ', 'b', 'a', 'd', ' ', 's', 't', 'a', 't', 'e'}, + FstrENOTSOCK: [13]uint8{'N', 'o', 't', ' ', 'a', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrEDESTADDRREQ: [29]uint8{'D', 'e', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrEMSGSIZE: [18]uint8{'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEPROTOTYPE: [31]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'w', 'r', 'o', 'n', 'g', ' ', 't', 'y', 'p', 'e', ' ', 'f', 'o', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrENOPROTOOPT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEPROTONOSUPPORT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrESOCKTNOSUPPORT: [26]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrENOTSUP: [14]uint8{'N', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEPFNOSUPPORT: [30]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEAFNOSUPPORT: [41]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'b', 'y', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'}, + FstrEADDRNOTAVAIL: [22]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrENETDOWN: [16]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrENETUNREACH: [20]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrENETRESET: [28]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'n', 'e', 't', 'w', 'o', 'r', 'k'}, + FstrECONNABORTED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'a', 'b', 'o', 'r', 't', 'e', 'd'}, + FstrENOBUFS: [26]uint8{'N', 'o', ' ', 'b', 'u', 'f', 'f', 'e', 'r', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEISCONN: [20]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'i', 's', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrENOTCONN: [21]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'n', 'o', 't', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrESHUTDOWN: [34]uint8{'C', 'a', 'n', 'n', 'o', 't', ' ', 's', 'e', 'n', 'd', ' ', 'a', 'f', 't', 'e', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 's', 'h', 'u', 't', 'd', 'o', 'w', 'n'}, + FstrEALREADY: [30]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrEINPROGRESS: [22]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrESTALE: [18]uint8{'S', 't', 'a', 'l', 'e', ' ', 'f', 'i', 'l', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e'}, + FstrEREMOTEIO: [17]uint8{'R', 'e', 'm', 'o', 't', 'e', ' ', 'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEDQUOT: [15]uint8{'Q', 'u', 'o', 't', 'a', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd'}, + FstrENOMEDIUM: [16]uint8{'N', 'o', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 'f', 'o', 'u', 'n', 'd'}, + FstrEMEDIUMTYPE: [18]uint8{'W', 'r', 'o', 'n', 'g', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 't', 'y', 'p', 'e'}, + FstrEMULTIHOP: [19]uint8{'M', 'u', 'l', 't', 'i', 'h', 'o', 'p', ' ', 'a', 't', 't', 'e', 'm', 'p', 't', 'e', 'd'}, + FstrENOKEY: [27]uint8{'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd', ' ', 'k', 'e', 'y', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEKEYEXPIRED: [16]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd'}, + FstrEKEYREVOKED: [21]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 'r', 'e', 'v', 'o', 'k', 'e', 'd'}, + FstrEKEYREJECTED: [28]uint8{'K', 'e', 'y', ' ', 'w', 'a', 's', ' ', 'r', 'e', 'j', 'e', 'c', 't', 'e', 'd', ' ', 'b', 'y', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e'}, +} + +var _errmsgidx = [132]uint16{ + 1: uint16(uint64(UintptrFromInt32(0) + 109)), + 2: uint16(uint64(UintptrFromInt32(0) + 133)), + 3: uint16(uint64(UintptrFromInt32(0) + 159)), + 4: uint16(uint64(UintptrFromInt32(0) + 269)), + 5: uint16(uint64(UintptrFromInt32(0) + 523)), + 6: uint16(uint64(UintptrFromInt32(0) + 533)), + 7: uint16(uint64(UintptrFromInt32(0) + 677)), + 8: uint16(uint64(UintptrFromInt32(0) + 642)), + 9: uint16(uint64(UintptrFromInt32(0) + 797)), + 10: uint16(uint64(UintptrFromInt32(0) + 817)), + 11: uint16(uint64(UintptrFromInt32(0) + 293)), + 12: uint16(uint64(UintptrFromInt32(0) + 241)), + 13: uint16(uint64(UintptrFromInt32(0) + 91)), + 14: uint16(uint64(UintptrFromInt32(0) + 834)), + 15: uint16(uint64(UintptrFromInt32(0) + 559)), + 16: uint16(uint64(UintptrFromInt32(0) + 255)), + 17: uint16(uint64(UintptrFromInt32(0) + 175)), + 18: uint16(uint64(UintptrFromInt32(0) + 339)), + 19: uint16(uint64(UintptrFromInt32(0) + 581)), + 20: uint16(uint64(UintptrFromInt32(0) + 596)), + 21: uint16(uint64(UintptrFromInt32(0) + 612)), + 22: uint16(uint64(UintptrFromInt32(0) + 660)), + 23: uint16(uint64(UintptrFromInt32(0) + 737)), + 24: uint16(uint64(UintptrFromInt32(0) + 767)), + 25: uint16(uint64(UintptrFromInt32(0) + 81)), + 26: uint16(uint64(UintptrFromInt32(0) + 627)), + 27: uint16(uint64(UintptrFromInt32(0) + 846)), + 28: uint16(uint64(UintptrFromInt32(0) + 217)), + 29: uint16(uint64(UintptrFromInt32(0) + 326)), + 30: uint16(uint64(UintptrFromInt32(0) + 357)), + 31: uint16(uint64(UintptrFromInt32(0) + 861)), + 32: uint16(uint64(UintptrFromInt32(0) + 511)), + 33: uint16(uint64(UintptrFromInt32(0) + 43)), + 34: uint16(uint64(UintptrFromInt32(0) + 56)), + 35: uint16(uint64(UintptrFromInt32(0) + 895)), + 36: uint16(uint64(UintptrFromInt32(0) + 719)), + 37: uint16(uint64(UintptrFromInt32(0) + 876)), + 38: uint16(uint64(UintptrFromInt32(0) + 986)), + 39: uint16(uint64(UintptrFromInt32(0) + 379)), + 40: uint16(uint64(UintptrFromInt32(0) + 700)), + 42: uint16(uint64(UintptrFromInt32(0) + 1011)), + 43: uint16(uint64(UintptrFromInt32(0) + 1038)), + 60: uint16(uint64(UintptrFromInt32(0) + 1057)), + 61: uint16(uint64(UintptrFromInt32(0) + 1077)), + 62: uint16(uint64(UintptrFromInt32(0) + 1095)), + 63: uint16(uint64(UintptrFromInt32(0) + 1110)), + 67: uint16(uint64(UintptrFromInt32(0) + 1135)), + 71: uint16(uint64(UintptrFromInt32(0) + 1157)), + 72: uint16(uint64(UintptrFromInt32(0) + 1803)), + 74: uint16(uint64(UintptrFromInt32(0) + 1172)), + 75: uint16(uint64(UintptrFromInt32(0) + 187)), + 77: uint16(uint64(UintptrFromInt32(0) + 1184)), + 84: uint16(uint64(UintptrFromInt32(0) + 21)), + 88: uint16(uint64(UintptrFromInt32(0) + 1213)), + 89: uint16(uint64(UintptrFromInt32(0) + 1226)), + 90: uint16(uint64(UintptrFromInt32(0) + 1255)), + 91: uint16(uint64(UintptrFromInt32(0) + 1273)), + 92: uint16(uint64(UintptrFromInt32(0) + 1304)), + 93: uint16(uint64(UintptrFromInt32(0) + 1327)), + 94: uint16(uint64(UintptrFromInt32(0) + 1350)), + 95: uint16(uint64(UintptrFromInt32(0) + 1376)), + 96: uint16(uint64(UintptrFromInt32(0) + 1390)), + 97: uint16(uint64(UintptrFromInt32(0) + 1420)), + 98: uint16(uint64(UintptrFromInt32(0) + 496)), + 99: uint16(uint64(UintptrFromInt32(0) + 1461)), + 100: uint16(uint64(UintptrFromInt32(0) + 1483)), + 101: uint16(uint64(UintptrFromInt32(0) + 1499)), + 102: uint16(uint64(UintptrFromInt32(0) + 1519)), + 103: uint16(uint64(UintptrFromInt32(0) + 1547)), + 104: uint16(uint64(UintptrFromInt32(0) + 399)), + 105: uint16(uint64(UintptrFromInt32(0) + 1566)), + 106: uint16(uint64(UintptrFromInt32(0) + 1592)), + 107: uint16(uint64(UintptrFromInt32(0) + 1612)), + 108: uint16(uint64(UintptrFromInt32(0) + 1633)), + 110: uint16(uint64(UintptrFromInt32(0) + 424)), + 111: uint16(uint64(UintptrFromInt32(0) + 444)), + 112: uint16(uint64(UintptrFromInt32(0) + 463)), + 113: uint16(uint64(UintptrFromInt32(0) + 476)), + 114: uint16(uint64(UintptrFromInt32(0) + 1667)), + 115: uint16(uint64(UintptrFromInt32(0) + 1697)), + 116: uint16(uint64(UintptrFromInt32(0) + 1719)), + 121: uint16(uint64(UintptrFromInt32(0) + 1737)), + 122: uint16(uint64(UintptrFromInt32(0) + 1754)), + 123: uint16(uint64(UintptrFromInt32(0) + 1769)), + 124: uint16(uint64(UintptrFromInt32(0) + 1785)), + 125: uint16(uint64(UintptrFromInt32(0) + 967)), + 126: uint16(uint64(UintptrFromInt32(0) + 1822)), + 127: uint16(uint64(UintptrFromInt32(0) + 1849)), + 128: uint16(uint64(UintptrFromInt32(0) + 1865)), + 129: uint16(uint64(UintptrFromInt32(0) + 1886)), + 130: uint16(uint64(UintptrFromInt32(0) + 947)), + 131: uint16(uint64(UintptrFromInt32(0) + 925)), +} + +func X__strerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + if uint64(e) >= Uint64FromInt64(264)/Uint64FromInt64(2) { + e = 0 + } + s = uintptr(unsafe.Pointer(&_errmsgstr)) + uintptr(_errmsgidx[e]) + return X__lctrans(tls, s, *(*uintptr)(unsafe.Pointer(loc + 5*8))) +} + +func Xstrerror(tls *TLS, e int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v, (%v:)", tls, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, loc) +} + +func X_Exit(tls *TLS, ec int32) { + if __ccgo_strace { + trc("tls=%v ec=%v, (%v:)", tls, ec, origin(2)) + } + X__syscall1(tls, int64(SYS_exit_group), int64(ec)) + for { + X__syscall1(tls, int64(SYS_exit), int64(ec)) + goto _1 + _1: + } +} + +func X__assert_fail(tls *TLS, expr uintptr, file uintptr, line int32, func1 uintptr) { + if __ccgo_strace { + trc("tls=%v expr=%v file=%v line=%v func1=%v, (%v:)", tls, expr, file, line, func1, origin(2)) + } + bp := tls.Alloc(48) + defer tls.Free(48) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+278, VaList(bp+8, expr, file, func1, line)) + Xabort(tls) +} + +const COUNT = 32 + +var _funcs [32]uintptr +var _count int32 +var _lock [1]int32 + +func X__funcs_on_quick_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var func1 uintptr + var v1 int32 + _, _ = func1, v1 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + for _count > 0 { + _count-- + v1 = _count + func1 = _funcs[v1] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + (*(*func(*TLS))(unsafe.Pointer(&struct{ uintptr }{func1})))(tls) + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + } +} + +func Xat_quick_exit(tls *TLS, func1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v func1=%v, (%v:)", tls, func1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + r = 0 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + if _count == int32(32) { + r = -int32(1) + } else { + v1 = _count + _count++ + _funcs[v1] = func1 + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + return r +} + +func _dummy3(tls *TLS) { +} + +func Xquick_exit(tls *TLS, code int32) { + if __ccgo_strace { + trc("tls=%v code=%v, (%v:)", tls, code, origin(2)) + } + X__funcs_on_quick_exit(tls) + X_Exit(tls, code) +} + +func Xcreat(tls *TLS, filename uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xopen(tls, filename, Int32FromInt32(O_CREAT)|Int32FromInt32(O_WRONLY)|Int32FromInt32(O_TRUNC), VaList(bp+8, mode)) +} + +func Xfcntl(tls *TLS, fd int32, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cmd=%v va=%v, (%v:)", tls, fd, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var arg uint64 + var ret, ret1, v1 int32 + var _ /* ex at bp+0 */ Tf_owner_ex + _, _, _, _, _ = ap, arg, ret, ret1, v1 + ap = va + arg = VaUint64(&ap) + _ = ap + if cmd == int32(F_SETFL) { + arg |= uint64(O_LARGEFILE) + } + if cmd == int32(F_SETLKW) { + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)), 0, 0, 0)))) + } + if cmd == int32(F_GETOWN) { + ret = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETOWN_EX)), int64(bp))) + if ret == -int32(EINVAL) { + return int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))) + } + if ret != 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Ftype1 == int32(F_OWNER_PGRP) { + v1 = -(*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } else { + v1 = (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } + return v1 + } + if cmd == int32(F_DUPFD_CLOEXEC) { + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(arg))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(Int32FromInt32(0)))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall1(tls, int64(SYS_close), int64(ret1)) + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD)), int64(arg))) + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + switch cmd { + case int32(F_SETLK): + fallthrough + case int32(F_GETLK): + fallthrough + case int32(F_GETOWN_EX): + fallthrough + case int32(F_SETOWN_EX): + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))))) + default: + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(arg))))) + } + return r +} + +func Xopen(tls *TLS, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v flags=%v va=%v, (%v:)", tls, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var fd int32 + var mode Tmode_t + _, _, _ = ap, fd, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + fd = int32(___syscall_cp(tls, int64(SYS_open), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0, 0)) + if fd >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(fd))) +} + +func Xopenat(tls *TLS, fd int32, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v flags=%v va=%v, (%v:)", tls, fd, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var mode Tmode_t + _, _ = ap, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_openat), int64(fd), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0)))) +} + +func Xposix_fadvise(tls *TLS, fd int32, base Toff_t, len1 Toff_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v advice=%v, (%v:)", tls, fd, base, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fadvise64), int64(fd), base, len1, int64(advice))) +} + +func Xposix_fallocate(tls *TLS, fd int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v, (%v:)", tls, fd, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(Int32FromInt32(0)), base, len1)) +} + +const FE_ALL_EXCEPT = 1040187392 +const FE_ALL_INVALID = 33031936 +const FE_DIVBYZERO = 67108864 +const FE_DOWNWARD = 3 +const FE_INEXACT = 33554432 +const FE_INVALID = 536870912 +const FE_INVALID_COMPARE = 524288 +const FE_INVALID_IDI = 4194304 +const FE_INVALID_IMZ = 1048576 +const FE_INVALID_INTEGER_CONVERSION = 256 +const FE_INVALID_ISI = 8388608 +const FE_INVALID_SNAN = 16777216 +const FE_INVALID_SOFTWARE = 1024 +const FE_INVALID_SQRT = 512 +const FE_INVALID_ZDZ = 2097152 +const FE_OVERFLOW = 268435456 +const FE_TONEAREST = 0 +const FE_TOWARDZERO = 1 +const FE_UNDERFLOW = 134217728 +const FE_UPWARD = 2 + +type Tfexcept_t = uint32 + +type Tfenv_t = float64 + +func _get_fpscr_f(tls *TLS) (r float64) { + var d float64 + _ = d + // __asm__ __volatile__("mffs %0" : "=d"(d)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+313, 8, __ccgo_ts+320) + return d +} + +func _get_fpscr(tls *TLS) (r int64) { + var v1 float64 + _ = v1 + v1 = _get_fpscr_f(tls) + return *(*int64)(unsafe.Pointer(&v1)) +} + +func _set_fpscr_f(tls *TLS, fpscr float64) { + // __asm__ __volatile__("mtfsf 255, %0" : : "d"(fpscr)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+313, 19, __ccgo_ts+332) +} + +func _set_fpscr(tls *TLS, fpscr int64) { + _set_fpscr_f(tls, *(*float64)(unsafe.Pointer(&fpscr))) +} + +func Xfeclearexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + mask &= int32(FE_ALL_EXCEPT) + if mask&int32(FE_INVALID) != 0 { + mask |= int32(FE_ALL_INVALID) + } + _set_fpscr(tls, _get_fpscr(tls)&int64(^mask)) + return 0 +} + +func Xferaiseexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + mask &= int32(FE_ALL_EXCEPT) + if mask&int32(FE_INVALID) != 0 { + mask |= int32(FE_INVALID_SOFTWARE) + } + _set_fpscr(tls, _get_fpscr(tls)|int64(mask)) + return 0 +} + +func Xfetestexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_get_fpscr(tls) & int64(mask) & int64(FE_ALL_EXCEPT)) +} + +func Xfegetround(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_get_fpscr(tls) & int64(3)) +} + +func X__fesetround(tls *TLS, r int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + _set_fpscr(tls, _get_fpscr(tls) & ^Int64FromInt64(3) | int64(r)) + return 0 +} + +func Xfegetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tfenv_t)(unsafe.Pointer(envp)) = _get_fpscr_f(tls) + return 0 +} + +func Xfesetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 Tfenv_t + _ = v1 + if envp != uintptr(-Int32FromInt32(1)) { + v1 = *(*Tfenv_t)(unsafe.Pointer(envp)) + } else { + v1 = Float64FromInt32(0) + } + _set_fpscr_f(tls, v1) + return 0 +} + +const WCONTINUED = 8 +const WEXITED = 4 +const WNOWAIT = 16777216 +const WSTOPPED = 2 +const __WALL = 1073741824 +const __WCLONE = 2147483648 +const __WNOTHREAD = 536870912 + +type Tidtype_t = int32 + +const _P_ALL = 0 +const _P_PID = 1 +const _P_PGID = 2 +const _P_PIDFD = 3 +const F_APP = 128 +const F_EOF = 16 +const F_ERR = 32 +const F_NORD = 4 +const F_NOWR = 8 +const F_PERM = 1 +const F_SVB = 64 +const KMAX = 128 +const LDBL_EPSILON1 = 2.22044604925031308085e-16 +const LDBL_MAX1 = 1.79769313486231570815e+308 +const LDBL_MIN1 = 2.22507385850720138309e-308 +const LD_B1B_DIG = 2 +const LD_B1B_MAX = 254740991 +const MASK = 127 +const MAYBE_WAITERS = 1073741824 +const UNGET = 8 + +type TFILE = struct { + Fflags uint32 + Frpos uintptr + Frend uintptr + Fclose1 uintptr + Fwend uintptr + Fwpos uintptr + Fmustbezero_1 uintptr + Fwbase uintptr + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fbuf uintptr + Fbuf_size Tsize_t + Fprev uintptr + Fnext uintptr + Ffd int32 + Fpipe_pid int32 + Flockcount int64 + Fmode int32 + Flock int32 + Flbf int32 + Fcookie uintptr + Foff Toff_t + Fgetln_buf uintptr + Fmustbezero_2 uintptr + Fshend uintptr + Fshlim Toff_t + Fshcnt Toff_t + Fprev_locked uintptr + Fnext_locked uintptr + Flocale uintptr +} + +type T_IO_FILE = TFILE + +func _scanexp(tls *TLS, f uintptr, pok int32) (r int64) { + var c, neg, x, v1, v10, v14, v18, v4 int32 + var y, v22 int64 + var v11, v12, v15, v16, v19, v2, v20, v3, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, neg, x, y, v1, v10, v11, v12, v14, v15, v16, v18, v19, v2, v20, v22, v3, v4, v5, v6 + neg = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + if c == int32('+') || c == int32('-') { + neg = BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__shgetc(tls, f) + } + c = v4 + if uint32(c-int32('0')) >= uint32(10) && pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if uint32(c-int32('0')) >= uint32(10) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return -Int64FromInt64(0x7fffffffffffffff) - Int64FromInt32(1) + } + x = 0 + for { + if !(uint32(c-int32('0')) < uint32(10) && x < Int32FromInt32(INT_MAX)/Int32FromInt32(10)) { + break + } + x = int32(10)*x + c - int32('0') + goto _9 + _9: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v12 = f + 8 + v11 = *(*uintptr)(unsafe.Pointer(v12)) + *(*uintptr)(unsafe.Pointer(v12))++ + v10 = int32(*(*uint8)(unsafe.Pointer(v11))) + } else { + v10 = X__shgetc(tls, f) + } + c = v10 + } + y = int64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y < Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(100)) { + break + } + y = int64(10)*y + int64(c) - int64('0') + goto _13 + _13: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + for { + if !(uint32(c-int32('0')) < uint32(10)) { + break + } + goto _17 + _17: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v20 = f + 8 + v19 = *(*uintptr)(unsafe.Pointer(v20)) + *(*uintptr)(unsafe.Pointer(v20))++ + v18 = int32(*(*uint8)(unsafe.Pointer(v19))) + } else { + v18 = X__shgetc(tls, f) + } + c = v18 + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if neg != 0 { + v22 = -y + } else { + v22 = y + } + return v22 +} + +func _decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) (r float64) { + bp := tls.Alloc(512) + defer tls.Free(512) + var a, bitlim, denormal, e2, emax, gotdig, gotrad, i, j, k, lnz, p10, rp, rpm9, sh, z, v13, v14, v2, v21, v23, v29, v30, v6, v9 int32 + var bias, frac, y float64 + var carry, carry1, carry2, t, tmp, tmp2 Tuint32_t + var dc, e10, lrp int64 + var tmp1 Tuint64_t + var v10, v11, v15, v16, v3, v4, v7, v8 uintptr + var _ /* x at bp+0 */ [128]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, bias, bitlim, carry, carry1, carry2, dc, denormal, e10, e2, emax, frac, gotdig, gotrad, i, j, k, lnz, lrp, p10, rp, rpm9, sh, t, tmp, tmp1, tmp2, y, z, v10, v11, v13, v14, v15, v16, v2, v21, v23, v29, v3, v30, v4, v6, v7, v8, v9 + lrp = 0 + dc = 0 + e10 = 0 + lnz = 0 + gotdig = 0 + gotrad = 0 + emax = -emin - bits + int32(3) + denormal = 0 + frac = Float64FromInt32(0) + bias = Float64FromInt32(0) + j = 0 + k = 0 + /* Don't let leading zeros consume buffer space */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _1 + _1: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + c = v2 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v8 = f + 8 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + v6 = int32(*(*uint8)(unsafe.Pointer(v7))) + } else { + v6 = X__shgetc(tls, f) + } + c = v6 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + lrp-- + goto _5 + _5: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + c = v9 + } + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + gotrad = int32(1) + lrp = dc + } else { + if k < Int32FromInt32(KMAX)-Int32FromInt32(3) { + dc++ + if c != int32('0') { + lnz = int32(dc) + } + if j != 0 { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]*uint32(10) + uint32(c) - uint32('0') + } else { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(c - int32('0')) + } + j++ + v13 = j + if v13 == int32(9) { + k++ + j = 0 + } + gotdig = int32(1) + } else { + dc++ + if c != int32('0') { + lnz = (Int32FromInt32(KMAX) - Int32FromInt32(4)) * Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(Int32FromInt32(KMAX)-Int32FromInt32(4))*4)) |= uint32(1) + } + } + } + goto _12 + _12: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + if !(gotrad != 0) { + lrp = dc + } + if gotdig != 0 && c|int32(32) == int32('e') { + e10 = _scanexp(tls, f, pok) + if e10 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e10 = 0 + } + lrp += e10 + } else { + if c >= 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if !(gotdig != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + /* Handle zero specially to avoid nasty special cases later */ + if !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] != 0) { + return float64(sign) * float64(0) + } + /* Optimize small integers (w/no exponent) and over/under-flow */ + if lrp == dc && dc < int64(10) && (bits > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bits == uint32(0)) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if lrp > int64(-emin/int32(2)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if lrp < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + /* Align incomplete final B1B digit */ + if j != 0 { + for { + if !(j < int32(9)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32(10) + goto _19 + _19: + ; + j++ + } + k++ + j = 0 + } + a = 0 + z = k + e2 = 0 + rp = int32(lrp) + /* Optimize small to mid-size integers (even in exp. notation) */ + if lnz < int32(9) && lnz <= rp && rp < int32(18) { + if rp == int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if rp < int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) / float64(_p10s[int32(8)-rp]) + } + bitlim = bits - int32(3)*(rp-Int32FromInt32(9)) + if bitlim > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bitlim == uint32(0) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) * float64(_p10s[rp-int32(10)]) + } + } + /* Drop trailing zeros */ + for { + if !!((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z-int32(1)] != 0) { + break + } + goto _20 + _20: + ; + z-- + } + /* Align radix point to B1B digit boundary */ + if rp%int32(9) != 0 { + if rp >= 0 { + v21 = rp % int32(9) + } else { + v21 = rp%int32(9) + int32(9) + } + rpm9 = v21 + p10 = _p10s[int32(8)-rpm9] + carry = uint32(0) + k = a + for { + if !(k != z) { + break + } + tmp = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] % uint32(p10) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]/uint32(p10) + carry + carry = uint32(int32(1000000000)/p10) * tmp + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + rp -= int32(9) + } + goto _22 + _22: + ; + k++ + } + if carry != 0 { + v23 = z + z++ + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v23] = carry + } + rp += int32(9) - rpm9 + } + /* Upscale until desired number of bits are left of radix point */ + for rp < Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) || rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) && (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] < _th[0] { + carry1 = uint32(0) + e2 -= int32(29) + k = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + for { + tmp1 = uint64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k])< uint64(1000000000) { + carry1 = uint32(tmp1 / uint64(1000000000)) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1 % uint64(1000000000)) + } else { + carry1 = uint32(0) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1) + } + if k == (z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) && k != a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + z = k + } + if k == a { + break + } + goto _24 + _24: + ; + k = (k - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry1 != 0 { + rp += int32(9) + a = (a - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if a == z { + z = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] = carry1 + } + } + /* Downscale until exactly number of bits are left of radix point */ + for { + carry2 = uint32(0) + sh = int32(1) + i = 0 + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + k = (a + i) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if k == z || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] < _th[i] { + i = int32(LD_B1B_DIG) + break + } + if (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] > _th[i] { + break + } + goto _26 + _26: + ; + i++ + } + if i == int32(LD_B1B_DIG) && rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + break + } + /* FIXME: find a way to compute optimal sh */ + if rp > Int32FromInt32(9)+Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + sh = int32(9) + } + e2 += sh + k = a + for { + if !(k != z) { + break + } + tmp2 = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] & uint32(int32(1)<>sh + carry2 + carry2 = uint32(Int32FromInt32(1000000000)>>sh) * tmp2 + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + i-- + rp -= int32(9) + } + goto _27 + _27: + ; + k = (k + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry2 != 0 { + if (z+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != a { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] = carry2 + z = (z + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= uint32(1) + } + } + goto _25 + _25: + } + /* Assemble desired bits into floating point variable */ + v29 = Int32FromInt32(0) + i = v29 + y = float64(v29) + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + v30 = (z + Int32FromInt32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + z = v30 + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v30-int32(1)] = uint32(0) + } + y = Float64FromFloat64(1e+09)*y + float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))]) + goto _28 + _28: + ; + i++ + } + y *= float64(sign) + /* Limit precision for denormal results */ + if bits > int32(LDBL_MANT_DIG)+e2-emin { + bits = int32(LDBL_MANT_DIG) + e2 - emin + if bits < 0 { + bits = 0 + } + denormal = int32(1) + } + /* Calculate bias term to force rounding, move out lower bits */ + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), y) + frac = Xfmodl(tls, y, Xscalbn(tls, Float64FromInt32(1), int32(LDBL_MANT_DIG)-bits)) + y -= frac + y += bias + } + /* Process tail of decimal input so it can affect rounding */ + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z { + t = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] + if t < uint32(500000000) && (t != 0 || (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z) { + frac += float64(0.25) * float64(sign) + } else { + if t > uint32(500000000) { + frac += float64(0.75) * float64(sign) + } else { + if t == uint32(500000000) { + if (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + frac += float64(0.5) * float64(sign) + } else { + frac += float64(0.75) * float64(sign) + } + } + } + } + if int32(LDBL_MANT_DIG)-bits >= int32(2) && !(Xfmodl(tls, frac, Float64FromInt32(1)) != 0) { + frac++ + } + } + y += frac + y -= bias + if (e2+int32(LDBL_MANT_DIG))&int32(INT_MAX) > emax-int32(5) { + if Xfabsl(tls, y) >= Float64FromInt32(2)/Float64FromFloat64(2.22044604925031308085e-16) { + if denormal != 0 && bits == int32(LDBL_MANT_DIG)+e2-emin { + denormal = 0 + } + y *= Float64FromFloat64(0.5) + e2++ + } + if e2+int32(LDBL_MANT_DIG) > emax || denormal != 0 && frac != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + } + return Xscalbnl(tls, y, e2) +} + +var _th = [2]Tuint32_t{ + 0: uint32(9007199), + 1: uint32(254740991), +} + +var _p10s = [8]int32{ + 0: int32(10), + 1: int32(100), + 2: int32(1000), + 3: int32(10000), + 4: int32(100000), + 5: int32(1000000), + 6: int32(10000000), + 7: int32(100000000), +} + +func _hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) (r float64) { + var bias, scale, y float64 + var c, d, gotdig, gotrad, gottail, v1, v12, v16, v5, v8 int32 + var dc, e2, rp int64 + var x Tuint32_t + var v10, v13, v14, v17, v18, v2, v3, v6, v7, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bias, c, d, dc, e2, gotdig, gotrad, gottail, rp, scale, x, y, v1, v10, v12, v13, v14, v16, v17, v18, v2, v3, v5, v6, v7, v8, v9 + x = uint32(0) + y = Float64FromInt32(0) + scale = Float64FromInt32(1) + bias = Float64FromInt32(0) + gottail = 0 + gotrad = 0 + gotdig = 0 + rp = 0 + dc = 0 + e2 = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + /* Skip leading zeros */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _4 + _4: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__shgetc(tls, f) + } + c = v5 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + /* Count zeros after the radix point before significand */ + rp = 0 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _11 + _11: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + rp-- + } + } + for { + if !(uint32(c-int32('0')) < uint32(10) || uint32(c|int32(32)-int32('a')) < uint32(6) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + rp = dc + gotrad = int32(1) + } else { + gotdig = int32(1) + if c > int32('9') { + d = c | int32(32) + int32(10) - int32('a') + } else { + d = c - int32('0') + } + if dc < int64(8) { + x = x*uint32(16) + uint32(d) + } else { + if dc < int64(Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)+Int32FromInt32(1)) { + scale /= Float64FromInt32(16) + y += float64(d) * scale + } else { + if d != 0 && !(gottail != 0) { + y += Float64FromFloat64(0.5) * scale + gottail = int32(1) + } + } + } + dc++ + } + goto _15 + _15: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v18 = f + 8 + v17 = *(*uintptr)(unsafe.Pointer(v18)) + *(*uintptr)(unsafe.Pointer(v18))++ + v16 = int32(*(*uint8)(unsafe.Pointer(v17))) + } else { + v16 = X__shgetc(tls, f) + } + c = v16 + } + if !(gotdig != 0) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if gotrad != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return float64(sign) * float64(0) + } + if !(gotrad != 0) { + rp = dc + } + for dc < int64(8) { + x *= uint32(16) + dc++ + } + if c|int32(32) == int32('p') { + e2 = _scanexp(tls, f, pok) + if e2 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e2 = 0 + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + e2 += int64(4)*rp - int64(32) + if !(x != 0) { + return float64(sign) * float64(0) + } + if e2 > int64(-emin) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if e2 < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + for x < uint32(0x80000000) { + if y >= Float64FromFloat64(0.5) { + x += x + uint32(1) + y += y - Float64FromInt32(1) + } else { + x += x + y += y + } + e2-- + } + if int64(bits) > int64(32)+e2-int64(emin) { + bits = int32(int64(32) + e2 - int64(emin)) + if bits < 0 { + bits = 0 + } + } + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(32)+Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), float64(sign)) + } + if bits < int32(32) && y != 0 && !(x&Uint32FromInt32(1) != 0) { + x++ + y = Float64FromInt32(0) + } + y = bias + float64(sign)*float64(x) + float64(sign)*y + y -= bias + if !(y != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + return Xscalbnl(tls, y, int32(e2)) +} + +func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) (r float64) { + if __ccgo_strace { + trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bits, c, emin, sign, v1, v12, v19, v2, v22, v27, v34, v5, v6, v8 int32 + var i, v31 Tsize_t + var v10, v13, v14, v20, v21, v23, v24, v28, v29, v3, v35, v36, v4, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bits, c, emin, i, sign, v1, v10, v12, v13, v14, v19, v2, v20, v21, v22, v23, v24, v27, v28, v29, v3, v31, v34, v35, v36, v4, v5, v6, v8, v9 + sign = int32(1) + switch prec { + case 0: + bits = int32(FLT_MANT_DIG) + emin = -int32(125) - bits + case int32(1): + bits = int32(DBL_MANT_DIG) + emin = -int32(1021) - bits + case int32(2): + bits = int32(LDBL_MANT_DIG) + emin = -int32(1021) - bits + default: + return Float64FromInt32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + sign -= int32(2) * BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + i = uint64(0) + for { + if !(i < uint64(8) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 344 + uintptr(i))))) { + break + } + if i < uint64(7) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + } + goto _11 + _11: + ; + i++ + } + if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { + if i != uint64(8) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + for { + if !(i > uint64(3)) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + goto _16 + _16: + ; + i-- + } + } + } + return float64(float32(sign) * X__builtin_inff(tls)) + } + if !(i != 0) { + i = uint64(0) + for { + if !(i < uint64(3) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 353 + uintptr(i))))) { + break + } + if i < uint64(2) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v21 = f + 8 + v20 = *(*uintptr)(unsafe.Pointer(v21)) + *(*uintptr)(unsafe.Pointer(v21))++ + v19 = int32(*(*uint8)(unsafe.Pointer(v20))) + } else { + v19 = X__shgetc(tls, f) + } + c = v19 + } + goto _18 + _18: + ; + i++ + } + } + if i == uint64(3) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v24 = f + 8 + v23 = *(*uintptr)(unsafe.Pointer(v24)) + *(*uintptr)(unsafe.Pointer(v24))++ + v22 = int32(*(*uint8)(unsafe.Pointer(v23))) + } else { + v22 = X__shgetc(tls, f) + } + if v22 != int32('(') { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + i = uint64(1) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v29 = f + 8 + v28 = *(*uintptr)(unsafe.Pointer(v29)) + *(*uintptr)(unsafe.Pointer(v29))++ + v27 = int32(*(*uint8)(unsafe.Pointer(v28))) + } else { + v27 = X__shgetc(tls, f) + } + c = v27 + if uint32(c-int32('0')) < uint32(10) || uint32(c-int32('A')) < uint32(26) || uint32(c-int32('a')) < uint32(26) || c == int32('_') { + goto _26 + } + if c == int32(')') { + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !(pok != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + for { + v31 = i + i-- + if !(v31 != 0) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + goto _26 + _26: + ; + i++ + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if i != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + if c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v36 = f + 8 + v35 = *(*uintptr)(unsafe.Pointer(v36)) + *(*uintptr)(unsafe.Pointer(v36))++ + v34 = int32(*(*uint8)(unsafe.Pointer(v35))) + } else { + v34 = X__shgetc(tls, f) + } + c = v34 + if c|int32(32) == int32('x') { + return _hexfloat(tls, f, bits, emin, sign, pok) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + c = int32('0') + } + return _decfloat(tls, f, c, bits, emin, sign, pok) +} + +// C documentation +// +// /* Lookup table for digit values. -1==255>=36 -> invalid */ +var _table6 = [257]uint8{ + 0: uint8(-Int32FromInt32(1)), + 1: uint8(-Int32FromInt32(1)), + 2: uint8(-Int32FromInt32(1)), + 3: uint8(-Int32FromInt32(1)), + 4: uint8(-Int32FromInt32(1)), + 5: uint8(-Int32FromInt32(1)), + 6: uint8(-Int32FromInt32(1)), + 7: uint8(-Int32FromInt32(1)), + 8: uint8(-Int32FromInt32(1)), + 9: uint8(-Int32FromInt32(1)), + 10: uint8(-Int32FromInt32(1)), + 11: uint8(-Int32FromInt32(1)), + 12: uint8(-Int32FromInt32(1)), + 13: uint8(-Int32FromInt32(1)), + 14: uint8(-Int32FromInt32(1)), + 15: uint8(-Int32FromInt32(1)), + 16: uint8(-Int32FromInt32(1)), + 17: uint8(-Int32FromInt32(1)), + 18: uint8(-Int32FromInt32(1)), + 19: uint8(-Int32FromInt32(1)), + 20: uint8(-Int32FromInt32(1)), + 21: uint8(-Int32FromInt32(1)), + 22: uint8(-Int32FromInt32(1)), + 23: uint8(-Int32FromInt32(1)), + 24: uint8(-Int32FromInt32(1)), + 25: uint8(-Int32FromInt32(1)), + 26: uint8(-Int32FromInt32(1)), + 27: uint8(-Int32FromInt32(1)), + 28: uint8(-Int32FromInt32(1)), + 29: uint8(-Int32FromInt32(1)), + 30: uint8(-Int32FromInt32(1)), + 31: uint8(-Int32FromInt32(1)), + 32: uint8(-Int32FromInt32(1)), + 33: uint8(-Int32FromInt32(1)), + 34: uint8(-Int32FromInt32(1)), + 35: uint8(-Int32FromInt32(1)), + 36: uint8(-Int32FromInt32(1)), + 37: uint8(-Int32FromInt32(1)), + 38: uint8(-Int32FromInt32(1)), + 39: uint8(-Int32FromInt32(1)), + 40: uint8(-Int32FromInt32(1)), + 41: uint8(-Int32FromInt32(1)), + 42: uint8(-Int32FromInt32(1)), + 43: uint8(-Int32FromInt32(1)), + 44: uint8(-Int32FromInt32(1)), + 45: uint8(-Int32FromInt32(1)), + 46: uint8(-Int32FromInt32(1)), + 47: uint8(-Int32FromInt32(1)), + 48: uint8(-Int32FromInt32(1)), + 50: uint8(1), + 51: uint8(2), + 52: uint8(3), + 53: uint8(4), + 54: uint8(5), + 55: uint8(6), + 56: uint8(7), + 57: uint8(8), + 58: uint8(9), + 59: uint8(-Int32FromInt32(1)), + 60: uint8(-Int32FromInt32(1)), + 61: uint8(-Int32FromInt32(1)), + 62: uint8(-Int32FromInt32(1)), + 63: uint8(-Int32FromInt32(1)), + 64: uint8(-Int32FromInt32(1)), + 65: uint8(-Int32FromInt32(1)), + 66: uint8(10), + 67: uint8(11), + 68: uint8(12), + 69: uint8(13), + 70: uint8(14), + 71: uint8(15), + 72: uint8(16), + 73: uint8(17), + 74: uint8(18), + 75: uint8(19), + 76: uint8(20), + 77: uint8(21), + 78: uint8(22), + 79: uint8(23), + 80: uint8(24), + 81: uint8(25), + 82: uint8(26), + 83: uint8(27), + 84: uint8(28), + 85: uint8(29), + 86: uint8(30), + 87: uint8(31), + 88: uint8(32), + 89: uint8(33), + 90: uint8(34), + 91: uint8(35), + 92: uint8(-Int32FromInt32(1)), + 93: uint8(-Int32FromInt32(1)), + 94: uint8(-Int32FromInt32(1)), + 95: uint8(-Int32FromInt32(1)), + 96: uint8(-Int32FromInt32(1)), + 97: uint8(-Int32FromInt32(1)), + 98: uint8(10), + 99: uint8(11), + 100: uint8(12), + 101: uint8(13), + 102: uint8(14), + 103: uint8(15), + 104: uint8(16), + 105: uint8(17), + 106: uint8(18), + 107: uint8(19), + 108: uint8(20), + 109: uint8(21), + 110: uint8(22), + 111: uint8(23), + 112: uint8(24), + 113: uint8(25), + 114: uint8(26), + 115: uint8(27), + 116: uint8(28), + 117: uint8(29), + 118: uint8(30), + 119: uint8(31), + 120: uint8(32), + 121: uint8(33), + 122: uint8(34), + 123: uint8(35), + 124: uint8(-Int32FromInt32(1)), + 125: uint8(-Int32FromInt32(1)), + 126: uint8(-Int32FromInt32(1)), + 127: uint8(-Int32FromInt32(1)), + 128: uint8(-Int32FromInt32(1)), + 129: uint8(-Int32FromInt32(1)), + 130: uint8(-Int32FromInt32(1)), + 131: uint8(-Int32FromInt32(1)), + 132: uint8(-Int32FromInt32(1)), + 133: uint8(-Int32FromInt32(1)), + 134: uint8(-Int32FromInt32(1)), + 135: uint8(-Int32FromInt32(1)), + 136: uint8(-Int32FromInt32(1)), + 137: uint8(-Int32FromInt32(1)), + 138: uint8(-Int32FromInt32(1)), + 139: uint8(-Int32FromInt32(1)), + 140: uint8(-Int32FromInt32(1)), + 141: uint8(-Int32FromInt32(1)), + 142: uint8(-Int32FromInt32(1)), + 143: uint8(-Int32FromInt32(1)), + 144: uint8(-Int32FromInt32(1)), + 145: uint8(-Int32FromInt32(1)), + 146: uint8(-Int32FromInt32(1)), + 147: uint8(-Int32FromInt32(1)), + 148: uint8(-Int32FromInt32(1)), + 149: uint8(-Int32FromInt32(1)), + 150: uint8(-Int32FromInt32(1)), + 151: uint8(-Int32FromInt32(1)), + 152: uint8(-Int32FromInt32(1)), + 153: uint8(-Int32FromInt32(1)), + 154: uint8(-Int32FromInt32(1)), + 155: uint8(-Int32FromInt32(1)), + 156: uint8(-Int32FromInt32(1)), + 157: uint8(-Int32FromInt32(1)), + 158: uint8(-Int32FromInt32(1)), + 159: uint8(-Int32FromInt32(1)), + 160: uint8(-Int32FromInt32(1)), + 161: uint8(-Int32FromInt32(1)), + 162: uint8(-Int32FromInt32(1)), + 163: uint8(-Int32FromInt32(1)), + 164: uint8(-Int32FromInt32(1)), + 165: uint8(-Int32FromInt32(1)), + 166: uint8(-Int32FromInt32(1)), + 167: uint8(-Int32FromInt32(1)), + 168: uint8(-Int32FromInt32(1)), + 169: uint8(-Int32FromInt32(1)), + 170: uint8(-Int32FromInt32(1)), + 171: uint8(-Int32FromInt32(1)), + 172: uint8(-Int32FromInt32(1)), + 173: uint8(-Int32FromInt32(1)), + 174: uint8(-Int32FromInt32(1)), + 175: uint8(-Int32FromInt32(1)), + 176: uint8(-Int32FromInt32(1)), + 177: uint8(-Int32FromInt32(1)), + 178: uint8(-Int32FromInt32(1)), + 179: uint8(-Int32FromInt32(1)), + 180: uint8(-Int32FromInt32(1)), + 181: uint8(-Int32FromInt32(1)), + 182: uint8(-Int32FromInt32(1)), + 183: uint8(-Int32FromInt32(1)), + 184: uint8(-Int32FromInt32(1)), + 185: uint8(-Int32FromInt32(1)), + 186: uint8(-Int32FromInt32(1)), + 187: uint8(-Int32FromInt32(1)), + 188: uint8(-Int32FromInt32(1)), + 189: uint8(-Int32FromInt32(1)), + 190: uint8(-Int32FromInt32(1)), + 191: uint8(-Int32FromInt32(1)), + 192: uint8(-Int32FromInt32(1)), + 193: uint8(-Int32FromInt32(1)), + 194: uint8(-Int32FromInt32(1)), + 195: uint8(-Int32FromInt32(1)), + 196: uint8(-Int32FromInt32(1)), + 197: uint8(-Int32FromInt32(1)), + 198: uint8(-Int32FromInt32(1)), + 199: uint8(-Int32FromInt32(1)), + 200: uint8(-Int32FromInt32(1)), + 201: uint8(-Int32FromInt32(1)), + 202: uint8(-Int32FromInt32(1)), + 203: uint8(-Int32FromInt32(1)), + 204: uint8(-Int32FromInt32(1)), + 205: uint8(-Int32FromInt32(1)), + 206: uint8(-Int32FromInt32(1)), + 207: uint8(-Int32FromInt32(1)), + 208: uint8(-Int32FromInt32(1)), + 209: uint8(-Int32FromInt32(1)), + 210: uint8(-Int32FromInt32(1)), + 211: uint8(-Int32FromInt32(1)), + 212: uint8(-Int32FromInt32(1)), + 213: uint8(-Int32FromInt32(1)), + 214: uint8(-Int32FromInt32(1)), + 215: uint8(-Int32FromInt32(1)), + 216: uint8(-Int32FromInt32(1)), + 217: uint8(-Int32FromInt32(1)), + 218: uint8(-Int32FromInt32(1)), + 219: uint8(-Int32FromInt32(1)), + 220: uint8(-Int32FromInt32(1)), + 221: uint8(-Int32FromInt32(1)), + 222: uint8(-Int32FromInt32(1)), + 223: uint8(-Int32FromInt32(1)), + 224: uint8(-Int32FromInt32(1)), + 225: uint8(-Int32FromInt32(1)), + 226: uint8(-Int32FromInt32(1)), + 227: uint8(-Int32FromInt32(1)), + 228: uint8(-Int32FromInt32(1)), + 229: uint8(-Int32FromInt32(1)), + 230: uint8(-Int32FromInt32(1)), + 231: uint8(-Int32FromInt32(1)), + 232: uint8(-Int32FromInt32(1)), + 233: uint8(-Int32FromInt32(1)), + 234: uint8(-Int32FromInt32(1)), + 235: uint8(-Int32FromInt32(1)), + 236: uint8(-Int32FromInt32(1)), + 237: uint8(-Int32FromInt32(1)), + 238: uint8(-Int32FromInt32(1)), + 239: uint8(-Int32FromInt32(1)), + 240: uint8(-Int32FromInt32(1)), + 241: uint8(-Int32FromInt32(1)), + 242: uint8(-Int32FromInt32(1)), + 243: uint8(-Int32FromInt32(1)), + 244: uint8(-Int32FromInt32(1)), + 245: uint8(-Int32FromInt32(1)), + 246: uint8(-Int32FromInt32(1)), + 247: uint8(-Int32FromInt32(1)), + 248: uint8(-Int32FromInt32(1)), + 249: uint8(-Int32FromInt32(1)), + 250: uint8(-Int32FromInt32(1)), + 251: uint8(-Int32FromInt32(1)), + 252: uint8(-Int32FromInt32(1)), + 253: uint8(-Int32FromInt32(1)), + 254: uint8(-Int32FromInt32(1)), + 255: uint8(-Int32FromInt32(1)), + 256: uint8(-Int32FromInt32(1)), +} + +func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bs, c, neg, v1, v11, v14, v2, v21, v25, v29, v33, v37, v41, v45, v5, v6, v8 int32 + var val, v10, v12, v13, v15, v16, v22, v23, v26, v27, v3, v30, v31, v34, v35, v38, v39, v4, v42, v43, v46, v47, v9 uintptr + var x uint32 + var y uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bs, c, neg, val, x, y, v1, v10, v11, v12, v13, v14, v15, v16, v2, v21, v22, v23, v25, v26, v27, v29, v3, v30, v31, v33, v34, v35, v37, v38, v39, v4, v41, v42, v43, v45, v46, v47, v5, v6, v8, v9 + val = uintptr(unsafe.Pointer(&_table6)) + uintptr(1) + neg = 0 + if base > uint32(36) || base == uint32(1) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + neg = -BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + if (base == uint32(0) || base == uint32(16)) && c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = int32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = X__shgetc(tls, f) + } + c = v11 + if c|int32(32) == int32('x') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + if int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= int32(16) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return uint64(0) + } + base = uint32(16) + } else { + if base == uint32(0) { + base = uint32(8) + } + } + } else { + if base == uint32(0) { + base = uint32(10) + } + if uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + if base == uint32(10) { + x = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(10)-Uint32FromInt32(1)) { + break + } + x = x*uint32(10) + uint32(c-Int32FromUint8('0')) + goto _20 + _20: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v23 = f + 8 + v22 = *(*uintptr)(unsafe.Pointer(v23)) + *(*uintptr)(unsafe.Pointer(v23))++ + v21 = int32(*(*uint8)(unsafe.Pointer(v22))) + } else { + v21 = X__shgetc(tls, f) + } + c = v21 + } + y = uint64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y <= (Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))/Uint64FromInt32(10) && uint64(10)*y <= Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)-uint64(c-Int32FromUint8('0'))) { + break + } + y = y*uint64(10) + uint64(c-Int32FromUint8('0')) + goto _24 + _24: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v27 = f + 8 + v26 = *(*uintptr)(unsafe.Pointer(v27)) + *(*uintptr)(unsafe.Pointer(v27))++ + v25 = int32(*(*uint8)(unsafe.Pointer(v26))) + } else { + v25 = X__shgetc(tls, f) + } + c = v25 + } + if uint32(c-int32('0')) >= uint32(10) { + goto done + } + } else { + if !(base&(base-Uint32FromInt32(1)) != 0) { + bs = int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 357 + uintptr(uint32(0x17)*base>>int32(5)&uint32(7))))) + x = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(32)) { + break + } + x = x<>bs) { + break + } + y = y<= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if y >= lim { + if !(lim&Uint64FromInt32(1) != 0) && !(neg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim - uint64(1) + } else { + if y > lim { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim + } + } + } + return y ^ uint64(neg) - uint64(neg) +} + +func X__procfdname(tls *TLS, buf uintptr, fd uint32) { + if __ccgo_strace { + trc("tls=%v buf=%v fd=%v, (%v:)", tls, buf, fd, origin(2)) + } + var i, j, v5 uint32 + var v2 uint8 + _, _, _, _ = i, j, v2, v5 + i = uint32(0) + for { + v2 = *(*uint8)(unsafe.Pointer(__ccgo_ts + 366 + uintptr(i))) + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v2 + if !(v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if !(fd != 0) { + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8('0') + *(*uint8)(unsafe.Pointer(buf + uintptr(i+uint32(1)))) = uint8(0) + return + } + j = fd + for { + if !(j != 0) { + break + } + goto _3 + _3: + ; + j /= uint32(10) + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8(0) + for { + if !(fd != 0) { + break + } + i-- + v5 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v5))) = uint8(uint32('0') + fd%uint32(10)) + goto _4 + _4: + ; + fd /= uint32(10) + } +} + +/* The shcnt field stores the number of bytes read so far, offset by + * the value of buf-rpos at the last function call (__shlim or __shgetc), + * so that between calls the inline shcnt macro can add rpos-buf to get + * the actual count. */ + +func X__shlim(tls *TLS, f uintptr, lim Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Fshlim = lim + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + /* If lim is nonzero, rend must be a valid pointer. */ + if lim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > lim { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } +} + +func X__shgetc(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 int32 + var cnt Toff_t + var v2 bool + _, _, _, _ = c, cnt, v1, v2 + cnt = (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if v2 = (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*TFILE)(unsafe.Pointer(f)).Fshlim; !v2 { + v1 = X__uflow(tls, f) + c = v1 + } + if v2 || v1 < 0 { + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + (*TFILE)(unsafe.Pointer(f)).Fshlim = int64(-int32(1)) + return -int32(1) + } + cnt++ + if (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > (*TFILE)(unsafe.Pointer(f)).Fshlim-cnt { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr((*TFILE)(unsafe.Pointer(f)).Fshlim-cnt) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + if (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf { + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(-Int32FromInt32(1)))) = uint8(c) + } + return c +} + +func X__syscall_ret(tls *TLS, r uint64) (r1 int64) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + if r > -Uint64FromUint64(4096) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(-r) + return int64(-int32(1)) + } + return int64(r) +} + +type TElf_Symndx = uint32 + +type Tdl_phdr_info = struct { + Fdlpi_addr TElf64_Addr + Fdlpi_name uintptr + Fdlpi_phdr uintptr + Fdlpi_phnum TElf64_Half + Fdlpi_adds uint64 + Fdlpi_subs uint64 + Fdlpi_tls_modid Tsize_t + Fdlpi_tls_data uintptr +} + +type Tlink_map = struct { + Fl_addr TElf64_Addr + Fl_name uintptr + Fl_ld uintptr + Fl_next uintptr + Fl_prev uintptr +} + +type Tr_debug = struct { + Fr_version int32 + Fr_map uintptr + Fr_brk TElf64_Addr + Fr_state int32 + Fr_ldbase TElf64_Addr +} + +const _RT_CONSISTENT = 0 +const _RT_ADD = 1 +const _RT_DELETE = 2 +const VERSION = "1.2.5" + +const IPC_CREAT = 512 +const IPC_EXCL = 1024 +const IPC_INFO = 3 +const IPC_NOWAIT = 2048 +const IPC_RMID = 0 +const IPC_SET = 1 +const IPC_STAT = 2 +const __ipc_perm_key = 0 +const __ipc_perm_seq = 0 + +type Tkey_t = int32 + +type Tipc_perm = struct { + F__key Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + F__seq int32 + F__pad1 int32 + F__pad2 int64 + F__pad3 int64 +} + +func Xftok(tls *TLS, path uintptr, id int32) (r Tkey_t) { + if __ccgo_strace { + trc("tls=%v path=%v id=%v, (%v:)", tls, path, id, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* st at bp+0 */ Tstat + if Xstat(tls, path, bp) < 0 { + return -int32(1) + } + return int32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ino&Uint64FromInt32(0xffff) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0xff)< %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgctl)), int64(q), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(Int32FromInt32(0)), int64(buf), int64(Int32FromInt32(0)))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xmsgget(tls *TLS, k Tkey_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v k=%v flag=%v, (%v:)", tls, k, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgget)), int64(k), int64(flag))))) +} + +func Xmsgrcv(tls *TLS, q int32, m uintptr, len1 Tsize_t, type1 int64, flag int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v type1=%v flag=%v, (%v:)", tls, q, m, len1, type1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: int64(m), + 1: type1, + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgrcv)), int64(q), int64(len1), int64(flag), int64(bp), 0))) +} + +func Xmsgsnd(tls *TLS, q int32, m uintptr, len1 Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v flag=%v, (%v:)", tls, q, m, len1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgsnd)), int64(q), int64(len1), int64(flag), int64(m), 0)))) +} + +const GETALL = 13 +const GETNCNT = 14 +const GETPID = 11 +const GETVAL = 12 +const GETZCNT = 15 +const SEM_INFO = 19 +const SEM_STAT = 18 +const SEM_STAT_ANY = 20 +const SEM_UNDO = 4096 +const SETALL = 17 +const SETVAL = 16 +const _SEM_SEMUN_UNDEFINED = 1 + +type Tsemid_ds = struct { + Fsem_perm Tipc_perm + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + Fsem_nsems uint16 + F__sem_nsems_pad [6]uint8 + F__unused3 int64 + F__unused4 int64 +} + +type Tseminfo = struct { + Fsemmap int32 + Fsemmni int32 + Fsemmns int32 + Fsemmnu int32 + Fsemmsl int32 + Fsemopm int32 + Fsemume int32 + Fsemusz int32 + Fsemvmx int32 + Fsemaem int32 +} + +type Tsembuf = struct { + Fsem_num uint16 + Fsem_op int16 + Fsem_flg int16 +} + +type Tsemun = struct { + Fbuf [0]uintptr + Farray [0]uintptr + Fval int32 + F__ccgo_pad3 [4]byte +} + +func Xsemctl(tls *TLS, id int32, num int32, cmd int32, va uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v num=%v cmd=%v va=%v, (%v:)", tls, id, num, cmd, va, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var r int32 + var _ /* arg at bp+0 */ Tsemun + _, _ = ap, r + *(*Tsemun)(unsafe.Pointer(bp)) = Tsemun{} + *(*int32)(unsafe.Pointer(bp)) = 0 + switch cmd & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)) { + case int32(SETVAL): + fallthrough + case int32(GETALL): + fallthrough + case int32(SETALL): + fallthrough + case int32(IPC_SET): + fallthrough + case int32(IPC_INFO): + fallthrough + case int32(SEM_INFO): + fallthrough + case Int32FromInt32(IPC_STAT) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(18) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(20) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + ap = va + *(*Tsemun)(unsafe.Pointer(bp)) = *(*Tsemun)(unsafe.Pointer(VaOther(&ap, 8))) + _ = ap + } + r = int32(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semctl)), int64(id), int64(num), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(bp))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xsemget(tls *TLS, key Tkey_t, n int32, fl int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v n=%v fl=%v, (%v:)", tls, key, n, fl, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if n > int32(USHRT_MAX) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semget)), int64(key), int64(n), int64(fl))))) +} + +func Xsemop(tls *TLS, id int32, buf uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v, (%v:)", tls, id, buf, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semop)), int64(id), int64(n), int64(Int32FromInt32(0)), int64(buf))))) +} + +const NO_TIME32 = 0 +const __key = 0 +const __seq = 0 + +type Tipc_perm1 = struct { + Fkey Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + Fseq int32 + F__pad1 int32 + F__pad2 int64 + F__pad3 int64 +} + +type Tsemid_ds1 = struct { + Fsem_perm Tipc_perm1 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + Fsem_nsems uint16 + F__sem_nsems_pad [6]uint8 + F__unused3 int64 + F__unused4 int64 +} + +func Xsemtimedop(tls *TLS, id int32, buf uintptr, n Tsize_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts=%v, (%v:)", tls, id, buf, n, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semtimedop)), int64(id), int64(n), int64(Int32FromInt32(0)), int64(buf), int64(ts))))) +} + +const SHMLBA = 4096 +const SHM_DEST = 512 +const SHM_EXEC = 32768 +const SHM_HUGETLB = 2048 +const SHM_HUGE_16GB = 2281701376 +const SHM_HUGE_16MB = 1610612736 +const SHM_HUGE_1GB = 2013265920 +const SHM_HUGE_1MB = 1342177280 +const SHM_HUGE_256MB = 1879048192 +const SHM_HUGE_2GB = 2080374784 +const SHM_HUGE_2MB = 1409286144 +const SHM_HUGE_32MB = 1677721600 +const SHM_HUGE_512KB = 1275068416 +const SHM_HUGE_512MB = 1946157056 +const SHM_HUGE_64KB = 1073741824 +const SHM_HUGE_8MB = 1543503872 +const SHM_HUGE_MASK = 63 +const SHM_HUGE_SHIFT = 26 +const SHM_INFO = 14 +const SHM_LOCK = 11 +const SHM_LOCKED = 1024 +const SHM_NORESERVE = 4096 +const SHM_R = 256 +const SHM_RDONLY = 4096 +const SHM_REMAP = 16384 +const SHM_RND = 8192 +const SHM_STAT = 13 +const SHM_STAT_ANY = 15 +const SHM_UNLOCK = 12 +const SHM_W = 128 + +type Tshmid_ds = struct { + Fshm_perm Tipc_perm + Fshm_atime Ttime_t + Fshm_dtime Ttime_t + Fshm_ctime Ttime_t + Fshm_segsz Tsize_t + Fshm_cpid Tpid_t + Fshm_lpid Tpid_t + Fshm_nattch uint64 + F__unused [2]uint64 +} + +type Tshminfo = struct { + Fshmmax uint64 + Fshmmin uint64 + Fshmmni uint64 + Fshmseg uint64 + Fshmall uint64 + F__unused [4]uint64 +} + +type Tshm_info = struct { + F__used_ids int32 + Fshm_tot uint64 + Fshm_rss uint64 + Fshm_swp uint64 + F__swap_attempts uint64 + F__swap_successes uint64 +} + +type Tshmatt_t = uint64 + +func Xshmat(tls *TLS, id int32, _addr uintptr, flag int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v id=%v _addr=%v flag=%v, (%v:)", tls, id, _addr, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _addr + var ret uint64 + var v1 uintptr + _, _ = ret, v1 + ret = uint64(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmat)), int64(id), int64(flag), int64(bp), int64(*(*uintptr)(unsafe.Pointer(bp))))))) + if ret > -Uint64FromInt32(SHMLBA) { + v1 = uintptr(ret) + } else { + v1 = *(*uintptr)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xshmctl(tls *TLS, id int32, cmd int32, buf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v cmd=%v buf=%v, (%v:)", tls, id, cmd, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmctl)), int64(id), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(Int32FromInt32(0)), int64(buf), int64(Int32FromInt32(0)))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xshmdt(tls *TLS, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v, (%v:)", tls, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmdt)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(addr))))) +} + +func Xshmget(tls *TLS, key Tkey_t, size Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v size=%v flag=%v, (%v:)", tls, key, size, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size > uint64(Int64FromInt64(INT64_MAX)) { + size = Uint64FromUint64(0xffffffffffffffff) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmget)), int64(key), int64(size), int64(flag))))) +} + +type Tpasswd = struct { + Fpw_name uintptr + Fpw_passwd uintptr + Fpw_uid Tuid_t + Fpw_gid Tgid_t + Fpw_gecos uintptr + Fpw_dir uintptr + Fpw_shell uintptr +} + +func Xcuserid(tls *TLS, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(2112) + defer tls.Free(2112) + var len1 Tsize_t + var _ /* ppw at bp+48 */ uintptr + var _ /* pw at bp+0 */ Tpasswd + var _ /* pwb at bp+56 */ [256]int64 + _ = len1 + if buf != 0 { + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + } + Xgetpwuid_r(tls, Xgeteuid(tls), bp, bp+56, uint64(2048), bp+48) + if !(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + return buf + } + len1 = Xstrnlen(tls, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, uint64(L_cuserid)) + if len1 == uint64(L_cuserid) { + return buf + } + if !(buf != 0) { + buf = uintptr(unsafe.Pointer(&_usridbuf)) + } + Xmemcpy(tls, buf, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, len1+uint64(1)) + return buf +} + +var _usridbuf [20]uint8 + +func Xvwarn(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+381, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + Xfputs(tls, __ccgo_ts+386, uintptr(unsafe.Pointer(&X__stderr_FILE))) + } + Xperror(tls, uintptr(0)) +} + +func Xvwarnx(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+381, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + } + Xputc(tls, int32('\n'), uintptr(unsafe.Pointer(&X__stderr_FILE))) +} + +func Xverr(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarn(tls, fmt, ap) + _exit(tls, status) +} + +func Xverrx(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarnx(tls, fmt, ap) + _exit(tls, status) +} + +func Xwarn(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarn(tls, fmt, ap) + _ = ap +} + +func Xwarnx(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarnx(tls, fmt, ap) + _ = ap +} + +func Xerr(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverr(tls, status, fmt, ap) + _ = ap +} + +func Xerrx(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverrx(tls, status, fmt, ap) + _ = ap +} + +func Xeuidaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfaccessat(tls, -int32(100), filename, amode, int32(AT_EACCESS)) +} + +func Xeaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xeuidaccess(tls, filename, amode) +} + +const FTW_CHDIR = 4 +const FTW_D = 2 +const FTW_DEPTH = 8 +const FTW_DNR = 3 +const FTW_DP = 6 +const FTW_F = 1 +const FTW_MOUNT = 2 +const FTW_NS = 4 +const FTW_PHYS = 1 +const FTW_SL = 5 +const FTW_SLN = 7 + +type TFTW = struct { + Fbase int32 + Flevel int32 +} + +func Xftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v, (%v:)", tls, path, fn, fd_limit, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The following cast assumes that calling a function with one + * argument more than it needs behaves as expected. This is + * actually undefined, but works on all real-world machines. */ + return Xnftw(tls, path, fn, fd_limit, int32(FTW_PHYS)) +} + +const STATX_ALL = 4095 +const STATX_ATIME = 32 +const STATX_BASIC_STATS = 2047 +const STATX_BLOCKS = 1024 +const STATX_BTIME = 2048 +const STATX_CTIME = 128 +const STATX_GID = 16 +const STATX_INO = 256 +const STATX_MODE = 2 +const STATX_MTIME = 64 +const STATX_NLINK = 4 +const STATX_SIZE = 512 +const STATX_TYPE = 1 +const STATX_UID = 8 +const S_IEXEC = 64 +const S_IREAD = 256 +const S_IWRITE = 128 + +type Tstatx_timestamp = struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + F__pad Tuint32_t +} + +type Tstatx = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + F__pad0 [1]Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime Tstatx_timestamp + Fstx_btime Tstatx_timestamp + Fstx_ctime Tstatx_timestamp + Fstx_mtime Tstatx_timestamp + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + F__pad1 [14]Tuint64_t +} + +type Ttimezone = struct { + Ftz_minuteswest int32 + Ftz_dsttime int32 +} + +func Xfutimes(tls *TLS, fd int32, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tv=%v, (%v:)", tls, fd, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* times at bp+0 */ [2]Ttimespec + if !(tv != 0) { + return Xfutimens(tls, fd, uintptr(0)) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + return Xfutimens(tls, fd, bp) +} + +const prlimit64 = 0 + +func Xgetdtablesize(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* rl at bp+0 */ Trlimit + _ = v1 + Xgetrlimit(tls, int32(RLIMIT_NOFILE), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur < uint64(INT_MAX) { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } else { + v1 = uint64(INT_MAX) + } + return int32(v1) +} + +func Xgetloadavg(tls *TLS, a uintptr, n int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v n=%v, (%v:)", tls, a, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(368) + defer tls.Free(368) + var i, v1 int32 + var _ /* si at bp+0 */ Tsysinfo + _, _ = i, v1 + if n <= 0 { + if n != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 + } + Xsysinfo(tls, bp) + if n > int32(3) { + n = int32(3) + } + i = 0 + for { + if !(i < n) { + break + } + *(*float64)(unsafe.Pointer(a + uintptr(i)*8)) = Float64FromFloat64(1) / float64(Int32FromInt32(1)< %v", r) }() + } + return int32(X__libc.Fpage_size) +} + +const B0 = 0 +const B1000000 = 23 +const B110 = 3 +const B115200 = 17 +const B1152000 = 24 +const B1200 = 9 +const B134 = 4 +const B150 = 5 +const B1500000 = 25 +const B1800 = 10 +const B19200 = 14 +const B200 = 6 +const B2000000 = 26 +const B230400 = 18 +const B2400 = 11 +const B2500000 = 27 +const B300 = 7 +const B3000000 = 28 +const B3500000 = 29 +const B38400 = 15 +const B4000000 = 30 +const B460800 = 19 +const B4800 = 12 +const B50 = 1 +const B500000 = 20 +const B57600 = 16 +const B576000 = 21 +const B600 = 8 +const B75 = 2 +const B921600 = 22 +const B9600 = 13 +const BRKINT = 2 +const BS0 = 0 +const BS1 = 32768 +const BSDLY = 32768 +const CBAUD = 255 +const CBAUDEX = 16 +const CIBAUD = 16711680 +const CLOCAL = 32768 +const CMSPAR = 1073741824 +const CR0 = 0 +const CR1 = 4096 +const CR2 = 8192 +const CR3 = 12288 +const CRDLY = 12288 +const CREAD = 2048 +const CRTSCTS = 2147483648 +const CS5 = 0 +const CS6 = 256 +const CS7 = 512 +const CS8 = 768 +const CSIZE = 768 +const CSTOPB = 1024 +const ECHO = 8 +const ECHOCTL = 64 +const ECHOE = 2 +const ECHOK = 4 +const ECHOKE = 1 +const ECHONL = 16 +const ECHOPRT = 32 +const EXTA = 14 +const EXTB = 15 +const EXTPROC = 268435456 +const FF0 = 0 +const FF1 = 16384 +const FFDLY = 16384 +const FLUSHO = 8388608 +const HUPCL = 16384 +const ICANON = 256 +const ICRNL = 256 +const IEXTEN = 1024 +const IGNBRK = 1 +const IGNCR = 128 +const IGNPAR = 4 +const IMAXBEL = 8192 +const INLCR = 64 +const INPCK = 16 +const ISIG = 128 +const ISTRIP = 32 +const IUCLC = 4096 +const IUTF8 = 16384 +const IXANY = 2048 +const IXOFF = 1024 +const IXON = 512 +const NL0 = 0 +const NL1 = 256 +const NL2 = 512 +const NL3 = 768 +const NLDLY = 768 +const NOFLSH = 2147483648 +const OCRNL = 8 +const OFDEL = 128 +const OFILL = 64 +const OLCUC = 4 +const ONLCR = 2 +const ONLRET = 32 +const ONOCR = 16 +const OPOST = 1 +const PARENB = 4096 +const PARMRK = 8 +const PARODD = 8192 +const PENDIN = 536870912 +const TAB0 = 0 +const TAB1 = 1024 +const TAB2 = 2048 +const TAB3 = 3072 +const TABDLY = 3072 +const TCIFLUSH = 0 +const TCIOFF = 2 +const TCIOFLUSH = 2 +const TCION = 3 +const TCOFLUSH = 1 +const TCOOFF = 0 +const TCOON = 1 +const TCSADRAIN = 1 +const TCSAFLUSH = 2 +const TCSANOW = 0 +const TIOCSER_TEMT = 1 +const TOSTOP = 4194304 +const VDISCARD = 16 +const VEOF = 4 +const VEOL = 6 +const VEOL2 = 8 +const VERASE = 2 +const VINTR = 0 +const VKILL = 3 +const VLNEXT = 15 +const VMIN = 5 +const VQUIT = 1 +const VREPRINT = 11 +const VSTART = 13 +const VSTOP = 14 +const VSUSP = 12 +const VSWTC = 9 +const VT0 = 0 +const VT1 = 65536 +const VTDLY = 65536 +const VTIME = 7 +const VWERASE = 10 +const XCASE = 16384 +const XTABS = 3072 + +type Twinsize = struct { + Fws_row uint16 + Fws_col uint16 + Fws_xpixel uint16 + Fws_ypixel uint16 +} + +type Tcc_t = uint8 + +type Tspeed_t = uint32 + +type Ttcflag_t = uint32 + +type Ttermios = struct { + Fc_iflag Ttcflag_t + Fc_oflag Ttcflag_t + Fc_cflag Ttcflag_t + Fc_lflag Ttcflag_t + Fc_cc [19]Tcc_t + Fc_line Tcc_t + F__c_ispeed Tspeed_t + F__c_ospeed Tspeed_t +} + +func Xgetpass(tls *TLS, prompt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v prompt=%v, (%v:)", tls, prompt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var fd, v1 int32 + var l Tssize_t + var v2 uintptr + var _ /* s at bp+0 */ Ttermios + var _ /* t at bp+44 */ Ttermios + _, _, _, _ = fd, l, v1, v2 + v1 = Xopen(tls, __ccgo_ts+389, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + Xtcgetattr(tls, fd, bp+44) + *(*Ttermios)(unsafe.Pointer(bp)) = *(*Ttermios)(unsafe.Pointer(bp + 44)) + (*(*Ttermios)(unsafe.Pointer(bp + 44))).Fc_lflag &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ISIG))) + (*(*Ttermios)(unsafe.Pointer(bp + 44))).Fc_lflag |= uint32(ICANON) + (*(*Ttermios)(unsafe.Pointer(bp + 44))).Fc_iflag &= uint32(^(Int32FromInt32(INLCR) | Int32FromInt32(IGNCR))) + (*(*Ttermios)(unsafe.Pointer(bp + 44))).Fc_iflag |= uint32(ICRNL) + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp+44) + Xtcdrain(tls, fd) + Xdprintf(tls, fd, __ccgo_ts+15, VaList(bp+96, prompt)) + l = Xread(tls, fd, uintptr(unsafe.Pointer(&_password)), uint64(128)) + if l >= 0 { + if l > 0 && int32(_password[l-int64(1)]) == int32('\n') || uint64(l) == uint64(128) { + l-- + } + _password[l] = uint8(0) + } + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp) + Xdprintf(tls, fd, __ccgo_ts+398, 0) + Xclose(tls, fd) + if l < 0 { + v2 = uintptr(0) + } else { + v2 = uintptr(unsafe.Pointer(&_password)) + } + return v2 +} + +var _password [128]uint8 + +var _defshells = [18]uint8{'/', 'b', 'i', 'n', '/', 's', 'h', 10, '/', 'b', 'i', 'n', '/', 'c', 's', 'h', 10} + +var _line uintptr +var _linesize Tsize_t +var _f uintptr + +func Xendusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f != 0 { + Xfclose(tls, _f) + } + _f = uintptr(0) +} + +func Xsetusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if !(_f != 0) { + _f = Xfopen(tls, __ccgo_ts+400, __ccgo_ts+412) + } + if !(_f != 0) { + _f = Xfmemopen(tls, uintptr(unsafe.Pointer(&_defshells)), Uint64FromInt64(18)-Uint64FromInt32(1), __ccgo_ts+416) + } +} + +func Xgetusershell(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tssize_t + _ = l + if !(_f != 0) { + Xsetusershell(tls) + } + if !(_f != 0) { + return uintptr(0) + } + l = Xgetline(tls, uintptr(unsafe.Pointer(&_line)), uintptr(unsafe.Pointer(&_linesize)), _f) + if l <= 0 { + return uintptr(0) + } + if int32(*(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1))))) == int32('\n') { + *(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1)))) = uint8(0) + } + return _line +} + +const ANYMARK = 1 +const FLUSHBAND = 4 +const FLUSHR = 1 +const FLUSHRW = 3 +const FLUSHW = 2 +const FMNAMESZ = 8 +const I_ATMARK = 21279 +const I_CANPUT = 21282 +const I_CKBAND = 21277 +const I_FDINSERT = 21264 +const I_FIND = 21259 +const I_FLUSH = 21253 +const I_FLUSHBAND = 21276 +const I_GETBAND = 21278 +const I_GETCLTIME = 21281 +const I_GETSIG = 21258 +const I_GRDOPT = 21255 +const I_GWROPT = 21268 +const I_LINK = 21260 +const I_LIST = 21269 +const I_LOOK = 21252 +const I_NREAD = 21249 +const I_PEEK = 21263 +const I_PLINK = 21270 +const I_POP = 21251 +const I_PUNLINK = 21271 +const I_PUSH = 21250 +const I_RECVFD = 21262 +const I_SENDFD = 21265 +const I_SETCLTIME = 21280 +const I_SETSIG = 21257 +const I_SRDOPT = 21254 +const I_STR = 21256 +const I_SWROPT = 21267 +const I_UNLINK = 21261 +const LASTMARK = 2 +const MORECTL = 1 +const MOREDATA = 2 +const MSG_ANY = 2 +const MSG_BAND = 4 +const MSG_HIPRI = 1 +const MUXID_ALL = -1 +const RMSGD = 1 +const RMSGN = 2 +const RNORM = 0 +const RPROTDAT = 4 +const RPROTDIS = 8 +const RPROTMASK = 28 +const RPROTNORM = 16 +const RS_HIPRI = 1 +const SNDPIPE = 2 +const SNDZERO = 1 +const S_BANDURG = 512 +const S_ERROR = 16 +const S_HANGUP = 32 +const S_HIPRI = 2 +const S_INPUT = 1 +const S_MSG = 8 +const S_OUTPUT = 4 +const S_RDBAND = 128 +const S_RDNORM = 64 +const S_WRBAND = 256 +const S_WRNORM = 4 +const __SID = 21248 + +type Tbandinfo = struct { + Fbi_pri uint8 + Fbi_flag int32 +} + +type Tstrbuf = struct { + Fmaxlen int32 + Flen1 int32 + Fbuf uintptr +} + +type Tstrpeek = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 +} + +type Tstrfdinsert = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 + Ffildes int32 + Foffset int32 +} + +type Tstrioctl = struct { + Fic_cmd int32 + Fic_timout int32 + Fic_len int32 + Fic_dp uintptr +} + +type Tstrrecvfd = struct { + Ffd int32 + Fuid int32 + Fgid int32 + F__fill [8]uint8 +} + +type Tstr_mlist = struct { + Fl_name [9]uint8 +} + +type Tstr_list = struct { + Fsl_nmods int32 + Fsl_modlist uintptr +} + +func Xisastream(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if Xfcntl(tls, fd, int32(F_GETFD), 0) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xlutimes(tls *TLS, filename uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v tv=%v, (%v:)", tls, filename, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + var _ /* times at bp+0 */ [2]Ttimespec + _ = v1 + if tv != 0 { + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + } + if tv != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), filename, v1, int32(AT_SYMLINK_NOFOLLOW)) +} + +const UL_GETFSIZE = 1 +const UL_SETFSIZE = 2 + +func Xulimit(tls *TLS, cmd int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v cmd=%v va=%v, (%v:)", tls, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var val int64 + var _ /* rl at bp+0 */ Trlimit + _, _ = ap, val + Xgetrlimit(tls, int32(RLIMIT_FSIZE), bp) + if cmd == int32(UL_SETFSIZE) { + ap = va + val = VaInt64(&ap) + _ = ap + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = uint64(512) * uint64(val) + if Xsetrlimit(tls, int32(RLIMIT_FSIZE), bp) != 0 { + return int64(-int32(1)) + } + } + return int64((*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur / uint64(512)) +} + +const BOOT_TIME = 2 +const DEAD_PROCESS = 8 +const EMPTY = 0 +const INIT_PROCESS = 5 +const LOGIN_PROCESS = 6 +const NEW_TIME = 3 +const OLD_TIME = 4 +const RUN_LVL = 1 +const USER_PROCESS = 7 +const e_exit = 0 +const e_termination = 0 + +type Tutmpx = struct { + Fut_type int16 + F__ut_pad1 int16 + Fut_pid Tpid_t + Fut_line [32]uint8 + Fut_id [4]uint8 + Fut_user [32]uint8 + Fut_host [256]uint8 + Fut_exit struct { + F__e_termination int16 + F__e_exit int16 + } + Fut_session int32 + F__ut_pad2 int32 + Fut_tv Ttimeval + Fut_addr_v6 [4]uint32 + F__unused [20]uint8 +} + +func Xendutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetutxent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xpututxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xupdwtmpx(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } +} + +func ___utmpxname(tls *TLS, f uintptr) (r int32) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return -int32(1) +} + +func Xendutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendutxent(tls) +} + +func Xgetutent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxent(tls) +} + +func Xgetutid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxid(tls, ut) +} + +func Xgetutline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxline(tls, ut) +} + +func Xpututline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xpututxline(tls, ut) +} + +func Xsetutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetutxent(tls) +} + +func Xupdwtmp(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } + Xupdwtmpx(tls, f, u) +} + +const ADJ_ESTERROR = 8 +const ADJ_FREQUENCY = 2 +const ADJ_MAXERROR = 4 +const ADJ_MICRO = 4096 +const ADJ_NANO = 8192 +const ADJ_OFFSET = 1 +const ADJ_OFFSET_SINGLESHOT = 32769 +const ADJ_OFFSET_SS_READ = 40961 +const ADJ_SETOFFSET = 256 +const ADJ_STATUS = 16 +const ADJ_TAI = 128 +const ADJ_TICK = 16384 +const ADJ_TIMECONST = 32 +const MAXTC = 6 +const MOD_CLKA = 32769 +const MOD_CLKB = 16384 +const MOD_ESTERROR = 8 +const MOD_FREQUENCY = 2 +const MOD_MAXERROR = 4 +const MOD_MICRO = 4096 +const MOD_NANO = 8192 +const MOD_OFFSET = 1 +const MOD_STATUS = 16 +const MOD_TAI = 128 +const MOD_TIMECONST = 32 +const STA_CLK = 32768 +const STA_CLOCKERR = 4096 +const STA_DEL = 32 +const STA_FLL = 8 +const STA_FREQHOLD = 128 +const STA_INS = 16 +const STA_MODE = 16384 +const STA_NANO = 8192 +const STA_PLL = 1 +const STA_PPSERROR = 2048 +const STA_PPSFREQ = 2 +const STA_PPSJITTER = 512 +const STA_PPSSIGNAL = 256 +const STA_PPSTIME = 4 +const STA_PPSWANDER = 1024 +const STA_RONLY = 65280 +const STA_UNSYNC = 64 +const TIME_BAD = 5 +const TIME_DEL = 2 +const TIME_ERROR = 5 +const TIME_INS = 1 +const TIME_OK = 0 +const TIME_OOP = 3 +const TIME_WAIT = 4 + +type Tntptimeval = struct { + Ftime Ttimeval + Fmaxerror int64 + Festerror int64 +} + +type Ttimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime Ttimeval + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xadjtime(tls *TLS, in uintptr, out uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v in=%v out=%v, (%v:)", tls, in, out, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var v1 Tsuseconds_t + var _ /* tx at bp+0 */ Ttimex + _ = v1 + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{} + if in != 0 { + if (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec > int64(1000) || (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec > int64(1000000000) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + (*(*Ttimex)(unsafe.Pointer(bp))).Foffset = (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec*int64(1000000) + (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec + (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes = uint32(ADJ_OFFSET_SINGLESHOT) + } + if Xadjtimex(tls, bp) < 0 { + return -int32(1) + } + if out != 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset / int64(1000000) + v1 = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset % Int64FromInt32(1000000) + (*Ttimeval)(unsafe.Pointer(out)).Ftv_usec = v1 + if v1 < 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec-- + *(*Tsuseconds_t)(unsafe.Pointer(out + 8)) += int64(1000000) + } + } + return 0 +} + +func Xadjtimex(tls *TLS, tx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx=%v, (%v:)", tls, tx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclock_adjtime(tls, CLOCK_REALTIME, tx) +} + +func Xbrk(tls *TLS, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v end=%v, (%v:)", tls, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) +} + +func Xcapset(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capset), int64(a), int64(b))))) +} + +func Xcapget(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capget), int64(a), int64(b))))) +} + +func Xchroot(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chroot), int64(path))))) +} + +type Tktimex64 = struct { + Fmodes uint32 + F__ccgo4 uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + F__ccgo44 uint32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + F__ccgo116 uint32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +type Tktimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xclock_adjtime(tls *TLS, clock_id Tclockid_t, utx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v utx=%v, (%v:)", tls, clock_id, utx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var r int32 + var _ /* ktx at bp+0 */ Tktimex + _ = r + r = -int32(ENOSYS) + if uint64(8) > uint64(8) { + *(*Tktimex)(unsafe.Pointer(bp)) = Tktimex{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: (*Ttimex)(unsafe.Pointer(utx)).Foffset, + Ffreq: (*Ttimex)(unsafe.Pointer(utx)).Ffreq, + Fmaxerror: (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror, + Festerror: (*Ttimex)(unsafe.Pointer(utx)).Festerror, + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: (*Ttimex)(unsafe.Pointer(utx)).Fconstant, + Fprecision: (*Ttimex)(unsafe.Pointer(utx)).Fprecision, + Ftolerance: (*Ttimex)(unsafe.Pointer(utx)).Ftolerance, + Ftime_sec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec, + Ftime_usec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec, + Ftick: (*Ttimex)(unsafe.Pointer(utx)).Ftick, + Fppsfreq: (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq, + Fjitter: (*Ttimex)(unsafe.Pointer(utx)).Fjitter, + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: (*Ttimex)(unsafe.Pointer(utx)).Fstabil, + Fjitcnt: (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt, + Fcalcnt: (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt, + Ferrcnt: (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt, + Fstbcnt: (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt, + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + if clock_id == CLOCK_REALTIME { + r = int32(X__syscall1(tls, int64(SYS_adjtimex), int64(bp))) + } else { + r = int32(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(bp))) + } + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex)(unsafe.Pointer(bp))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = (*(*Tktimex)(unsafe.Pointer(bp))).Foffset + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = (*(*Tktimex)(unsafe.Pointer(bp))).Ffreq + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = (*(*Tktimex)(unsafe.Pointer(bp))).Fmaxerror + (*Ttimex)(unsafe.Pointer(utx)).Festerror = (*(*Tktimex)(unsafe.Pointer(bp))).Festerror + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex)(unsafe.Pointer(bp))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = (*(*Tktimex)(unsafe.Pointer(bp))).Fconstant + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = (*(*Tktimex)(unsafe.Pointer(bp))).Fprecision + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = (*(*Tktimex)(unsafe.Pointer(bp))).Ftolerance + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_sec + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_usec + (*Ttimex)(unsafe.Pointer(utx)).Ftick = (*(*Tktimex)(unsafe.Pointer(bp))).Ftick + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = (*(*Tktimex)(unsafe.Pointer(bp))).Fppsfreq + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitter + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex)(unsafe.Pointer(bp))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = (*(*Tktimex)(unsafe.Pointer(bp))).Fstabil + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitcnt + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fcalcnt + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Ferrcnt + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fstbcnt + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex)(unsafe.Pointer(bp))).Ftai + } + return int32(X__syscall_ret(tls, uint64(r))) + } + if clock_id == CLOCK_REALTIME { + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_adjtimex), int64(utx))))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(utx))))) +} + +func Xcopy_file_range(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_copy_file_range), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +const EPOLLERR = 8 +const EPOLLET = 2147483648 +const EPOLLEXCLUSIVE = 268435456 +const EPOLLHUP = 16 +const EPOLLIN = 1 +const EPOLLMSG = 1024 +const EPOLLNVAL = 32 +const EPOLLONESHOT = 1073741824 +const EPOLLOUT = 4 +const EPOLLPRI = 2 +const EPOLLRDBAND = 128 +const EPOLLRDHUP = 8192 +const EPOLLRDNORM = 64 +const EPOLLWAKEUP = 536870912 +const EPOLLWRBAND = 512 +const EPOLLWRNORM = 256 +const EPOLL_CLOEXEC = 524288 +const EPOLL_CTL_ADD = 1 +const EPOLL_CTL_DEL = 2 +const EPOLL_CTL_MOD = 3 +const EPOLL_NONBLOCK = 2048 + +type Tfsblkcnt_t = uint64 + +type Tfsfilcnt_t = uint64 + +type _EPOLL_EVENTS = int32 + +const ___EPOLL_DUMMY = 0 + +type Tepoll_data_t = struct { + Ffd [0]int32 + Fu32 [0]Tuint32_t + Fu64 [0]Tuint64_t + Fptr uintptr +} + +type Tepoll_data = Tepoll_data_t + +type Tepoll_event = struct { + Fevents Tuint32_t + Fdata Tepoll_data_t +} + +func Xepoll_create(tls *TLS, size int32) (r int32) { + if __ccgo_strace { + trc("tls=%v size=%v, (%v:)", tls, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size <= 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return Xepoll_create1(tls, 0) +} + +func Xepoll_create1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_epoll_create1), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int64(SYS_epoll_create), int64(Int32FromInt32(1)))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_ctl(tls *TLS, fd int32, op int32, fd2 int32, ev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v fd2=%v ev=%v, (%v:)", tls, fd, op, fd2, ev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_epoll_ctl), int64(fd), int64(op), int64(fd2), int64(ev))))) +} + +func Xepoll_pwait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32, sigs uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v sigs=%v, (%v:)", tls, fd, ev, cnt, to, sigs, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(___syscall_cp(tls, int64(SYS_epoll_pwait), int64(fd), int64(ev), int64(cnt), int64(to), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if r == -int32(ENOSYS) && !(sigs != 0) { + r = int32(___syscall_cp(tls, int64(SYS_epoll_wait), int64(fd), int64(ev), int64(cnt), int64(to), 0, 0)) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_wait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v, (%v:)", tls, fd, ev, cnt, to, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xepoll_pwait(tls, fd, ev, cnt, to, uintptr(0)) +} + +const EFD_CLOEXEC = 524288 +const EFD_NONBLOCK = 2048 +const EFD_SEMAPHORE = 1 + +type Teventfd_t = uint64 + +func Xeventfd(tls *TLS, count uint32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v count=%v flags=%v, (%v:)", tls, count, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_eventfd2), int64(count), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int64(SYS_eventfd), int64(count))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xeventfd_read(tls *TLS, fd int32, value uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v value=%v, (%v:)", tls, fd, value, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xread(tls, fd, value, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xeventfd_write(tls *TLS, fd int32, _value Teventfd_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v _value=%v, (%v:)", tls, fd, _value, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Teventfd_t)(unsafe.Pointer(bp)) = _value + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xwrite(tls, fd, bp, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xfallocate(tls *TLS, fd int32, mode int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v base=%v len1=%v, (%v:)", tls, fd, mode, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(mode), base, len1)))) +} + +const FANOTIFY_METADATA_VERSION = 3 +const FAN_ACCESS = 1 +const FAN_ACCESS_PERM = 131072 +const FAN_ALLOW = 1 +const FAN_ALL_CLASS_BITS = 12 +const FAN_ALL_EVENTS = 59 +const FAN_ALL_INIT_FLAGS = 63 +const FAN_ALL_MARK_FLAGS = 255 +const FAN_ALL_OUTGOING_EVENTS = 213051 +const FAN_ALL_PERM_EVENTS = 196608 +const FAN_ATTRIB = 4 +const FAN_AUDIT = 16 +const FAN_CLASS_CONTENT = 4 +const FAN_CLASS_NOTIF = 0 +const FAN_CLASS_PRE_CONTENT = 8 +const FAN_CLOEXEC = 1 +const FAN_CLOSE = 24 +const FAN_CLOSE_NOWRITE = 16 +const FAN_CLOSE_WRITE = 8 +const FAN_CREATE = 256 +const FAN_DELETE = 512 +const FAN_DELETE_SELF = 1024 +const FAN_DENY = 2 +const FAN_DIR_MODIFY = 524288 +const FAN_ENABLE_AUDIT = 64 +const FAN_EVENT_INFO_TYPE_DFID = 3 +const FAN_EVENT_INFO_TYPE_DFID_NAME = 2 +const FAN_EVENT_INFO_TYPE_FID = 1 +const FAN_EVENT_METADATA_LEN = 0 +const FAN_EVENT_ON_CHILD = 134217728 +const FAN_MARK_ADD = 1 +const FAN_MARK_DONT_FOLLOW = 4 +const FAN_MARK_FILESYSTEM = 256 +const FAN_MARK_FLUSH = 128 +const FAN_MARK_IGNORED_MASK = 32 +const FAN_MARK_IGNORED_SURV_MODIFY = 64 +const FAN_MARK_INODE = 0 +const FAN_MARK_MOUNT = 16 +const FAN_MARK_ONLYDIR = 8 +const FAN_MARK_REMOVE = 2 +const FAN_MARK_TYPE_MASK = 272 +const FAN_MODIFY = 2 +const FAN_MOVE = 192 +const FAN_MOVED_FROM = 64 +const FAN_MOVED_TO = 128 +const FAN_MOVE_SELF = 2048 +const FAN_NOFD = -1 +const FAN_NONBLOCK = 2 +const FAN_ONDIR = 1073741824 +const FAN_OPEN = 32 +const FAN_OPEN_EXEC = 4096 +const FAN_OPEN_EXEC_PERM = 262144 +const FAN_OPEN_PERM = 65536 +const FAN_Q_OVERFLOW = 16384 +const FAN_REPORT_DFID_NAME = 3072 +const FAN_REPORT_DIR_FID = 1024 +const FAN_REPORT_FID = 512 +const FAN_REPORT_NAME = 2048 +const FAN_REPORT_TID = 256 +const FAN_UNLIMITED_MARKS = 32 +const FAN_UNLIMITED_QUEUE = 16 +const ST_APPEND = 256 +const ST_IMMUTABLE = 512 +const ST_MANDLOCK = 64 +const ST_NOATIME = 1024 +const ST_NODEV = 4 +const ST_NODIRATIME = 2048 +const ST_NOEXEC = 8 +const ST_NOSUID = 2 +const ST_RDONLY = 1 +const ST_RELATIME = 4096 +const ST_SYNCHRONOUS = 16 +const ST_WRITE = 128 + +type Tstatvfs = struct { + Ff_bsize uint64 + Ff_frsize uint64 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_favail Tfsfilcnt_t + Ff_fsid uint64 + Ff_flag uint64 + Ff_namemax uint64 + Ff_type uint32 + F__reserved [5]int32 +} + +type Tfsid_t = struct { + F__val [2]int32 +} + +type t__fsid_t = Tfsid_t + +type Tstatfs = struct { + Ff_type uint64 + Ff_bsize uint64 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_fsid Tfsid_t + Ff_namelen uint64 + Ff_frsize uint64 + Ff_flags uint64 + Ff_spare [4]uint64 +} + +type Tfanotify_event_metadata = struct { + Fevent_len uint32 + Fvers uint8 + Freserved uint8 + Fmetadata_len uint16 + Fmask uint64 + Ffd int32 + Fpid int32 +} + +type Tfanotify_event_info_header = struct { + Finfo_type uint8 + Fpad uint8 + Flen1 uint16 +} + +type Tfanotify_event_info_fid = struct { + Fhdr Tfanotify_event_info_header + Ffsid Tfsid_t +} + +type Tfanotify_response = struct { + Ffd int32 + Fresponse uint32 +} + +func Xfanotify_init(tls *TLS, flags uint32, event_f_flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v event_f_flags=%v, (%v:)", tls, flags, event_f_flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fanotify_init), int64(flags), int64(event_f_flags))))) +} + +func Xfanotify_mark(tls *TLS, fanotify_fd int32, flags uint32, mask uint64, dfd int32, pathname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fanotify_fd=%v flags=%v mask=%v dfd=%v pathname=%v, (%v:)", tls, fanotify_fd, flags, mask, dfd, pathname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fanotify_mark), int64(fanotify_fd), int64(flags), int64(mask), int64(dfd), int64(pathname))))) +} + +const LOCK_EX = 2 +const LOCK_NB = 4 +const LOCK_SH = 1 +const LOCK_UN = 8 + +func Xflock(tls *TLS, fd int32, op int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v, (%v:)", tls, fd, op, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_flock), int64(fd), int64(op))))) +} + +func Xgetdents(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + if len1 > uint64(INT_MAX) { + len1 = uint64(INT_MAX) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getdents64), int64(fd), int64(buf), int64(len1))))) +} + +const GRND_INSECURE = 4 +const GRND_NONBLOCK = 1 +const GRND_RANDOM = 2 + +func Xgetrandom(tls *TLS, buf uintptr, buflen Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v buf=%v buflen=%v flags=%v, (%v:)", tls, buf, buflen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_getrandom), int64(buf), int64(buflen), int64(flags), 0, 0, 0))) +} + +const IN_ACCESS = 1 +const IN_ALL_EVENTS = 4095 +const IN_ATTRIB = 4 +const IN_CLOEXEC = 524288 +const IN_CLOSE = 24 +const IN_CLOSE_NOWRITE = 16 +const IN_CLOSE_WRITE = 8 +const IN_CREATE = 256 +const IN_DELETE = 512 +const IN_DELETE_SELF = 1024 +const IN_DONT_FOLLOW = 33554432 +const IN_EXCL_UNLINK = 67108864 +const IN_IGNORED = 32768 +const IN_ISDIR = 1073741824 +const IN_MASK_ADD = 536870912 +const IN_MASK_CREATE = 268435456 +const IN_MODIFY = 2 +const IN_MOVE = 192 +const IN_MOVED_FROM = 64 +const IN_MOVED_TO = 128 +const IN_MOVE_SELF = 2048 +const IN_NONBLOCK = 2048 +const IN_ONESHOT = 2147483648 +const IN_ONLYDIR = 16777216 +const IN_OPEN = 32 +const IN_Q_OVERFLOW = 16384 +const IN_UNMOUNT = 8192 + +type Tinotify_event = struct { + Fwd int32 + Fmask Tuint32_t + Fcookie Tuint32_t + Flen1 Tuint32_t +} + +func Xinotify_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xinotify_init1(tls, 0) +} + +func Xinotify_init1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_inotify_init1), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall0(tls, int64(SYS_inotify_init))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xinotify_add_watch(tls *TLS, fd int32, pathname uintptr, mask Tuint32_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pathname=%v mask=%v, (%v:)", tls, fd, pathname, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_inotify_add_watch), int64(fd), int64(pathname), int64(mask))))) +} + +func Xinotify_rm_watch(tls *TLS, fd int32, wd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wd=%v, (%v:)", tls, fd, wd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_inotify_rm_watch), int64(fd), int64(wd))))) +} + +func Xioperm(tls *TLS, from uint64, num uint64, turn_on int32) (r int32) { + if __ccgo_strace { + trc("tls=%v from=%v num=%v turn_on=%v, (%v:)", tls, from, num, turn_on, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioperm), int64(from), int64(num), int64(turn_on))))) +} + +func Xiopl(tls *TLS, level int32) (r int32) { + if __ccgo_strace { + trc("tls=%v level=%v, (%v:)", tls, level, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_iopl), int64(level))))) +} + +func Xklogctl(tls *TLS, type1 int32, buf uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v buf=%v len1=%v, (%v:)", tls, type1, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_syslog), int64(type1), int64(buf), int64(len1))))) +} + +const MADV_COLD = 20 +const MADV_DODUMP = 17 +const MADV_DOFORK = 11 +const MADV_DONTDUMP = 16 +const MADV_DONTFORK = 10 +const MADV_DONTNEED = 4 +const MADV_FREE = 8 +const MADV_HUGEPAGE = 14 +const MADV_HWPOISON = 100 +const MADV_KEEPONFORK = 19 +const MADV_MERGEABLE = 12 +const MADV_NOHUGEPAGE = 15 +const MADV_NORMAL = 0 +const MADV_PAGEOUT = 21 +const MADV_RANDOM = 1 +const MADV_REMOVE = 9 +const MADV_SEQUENTIAL = 2 +const MADV_SOFT_OFFLINE = 101 +const MADV_UNMERGEABLE = 13 +const MADV_WILLNEED = 3 +const MADV_WIPEONFORK = 18 +const MFD_ALLOW_SEALING = 2 +const MFD_CLOEXEC = 1 +const MFD_HUGETLB = 4 +const MLOCK_ONFAULT = 1 +const MREMAP_DONTUNMAP = 4 +const MREMAP_FIXED = 2 +const MREMAP_MAYMOVE = 1 +const _GNU_SOURCE = 1 + +func Xmemfd_create(tls *TLS, name uintptr, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flags=%v, (%v:)", tls, name, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_memfd_create), int64(name), int64(flags))))) +} + +func Xmlock2(tls *TLS, addr uintptr, len1 Tsize_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v flags=%v, (%v:)", tls, addr, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if flags == uint32(0) { + return Xmlock(tls, addr, len1) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mlock2), int64(addr), int64(len1), int64(flags))))) +} + +func Xinit_module(tls *TLS, a uintptr, b uint64, c uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v, (%v:)", tls, a, b, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_init_module), int64(a), int64(b), int64(c))))) +} + +func Xdelete_module(tls *TLS, a uintptr, b uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_delete_module), int64(a), int64(b))))) +} + +const BLKBSZGET = 1073746544 +const BLKBSZSET = 2147488369 +const BLKFLSBUF = 536875617 +const BLKFRAGET = 536875621 +const BLKFRASET = 536875620 +const BLKGETSIZE = 536875616 +const BLKGETSIZE64 = 1073746546 +const BLKRAGET = 536875619 +const BLKRASET = 536875618 +const BLKROGET = 536875614 +const BLKROSET = 536875613 +const BLKRRPART = 536875615 +const BLKSECTGET = 536875623 +const BLKSECTSET = 536875622 +const BLKSSZGET = 536875624 +const FIOASYNC = 2147509885 +const FIOCLEX = 536897025 +const FIOGETOWN = 35075 +const FIONBIO = 2147509886 +const FIONCLEX = 536897026 +const FIONREAD = 1073768063 +const FIOQSIZE = 1073768064 +const FIOSETOWN = 35073 +const MNT_DETACH = 2 +const MNT_EXPIRE = 4 +const MNT_FORCE = 1 +const MS_ACTIVE = 1073741824 +const MS_BIND = 4096 +const MS_BORN = 536870912 +const MS_DIRSYNC = 128 +const MS_I_VERSION = 8388608 +const MS_KERNMOUNT = 4194304 +const MS_LAZYTIME = 33554432 +const MS_MANDLOCK = 64 +const MS_MGC_MSK = 4294901760 +const MS_MGC_VAL = 3236757504 +const MS_MOVE = 8192 +const MS_NOATIME = 1024 +const MS_NODEV = 4 +const MS_NODIRATIME = 2048 +const MS_NOEXEC = 8 +const MS_NOREMOTELOCK = 134217728 +const MS_NOSEC = 268435456 +const MS_NOSUID = 2 +const MS_NOSYMFOLLOW = 256 +const MS_NOUSER = 2147483648 +const MS_POSIXACL = 65536 +const MS_PRIVATE = 262144 +const MS_RDONLY = 1 +const MS_REC = 16384 +const MS_RELATIME = 2097152 +const MS_REMOUNT = 32 +const MS_RMT_MASK = 41943121 +const MS_SHARED = 1048576 +const MS_SILENT = 32768 +const MS_SLAVE = 524288 +const MS_STRICTATIME = 16777216 +const MS_SYNCHRONOUS = 16 +const MS_UNBINDABLE = 131072 +const N_6PACK = 7 +const N_AX25 = 5 +const N_CAIF = 20 +const N_GIGASET_M101 = 16 +const N_GSM0710 = 21 +const N_HCI = 15 +const N_HDLC = 13 +const N_IRDA = 11 +const N_MASC = 8 +const N_MOUSE = 2 +const N_NCI = 25 +const N_NULL = 27 +const N_PPP = 3 +const N_PPS = 18 +const N_PROFIBUS_FDL = 10 +const N_R3964 = 9 +const N_SLCAN = 17 +const N_SLIP = 1 +const N_SMSBLOCK = 12 +const N_SPEAKUP = 26 +const N_STRIP = 4 +const N_SYNC_PPP = 14 +const N_TI_WL = 22 +const N_TRACEROUTER = 24 +const N_TRACESINK = 23 +const N_TTY = 0 +const N_V253 = 19 +const N_X25 = 6 +const SIOCADDDLCI = 35200 +const SIOCADDMULTI = 35121 +const SIOCADDRT = 35083 +const SIOCATMARK = 35077 +const SIOCDARP = 35155 +const SIOCDELDLCI = 35201 +const SIOCDELMULTI = 35122 +const SIOCDELRT = 35084 +const SIOCDEVPRIVATE = 35312 +const SIOCDIFADDR = 35126 +const SIOCDRARP = 35168 +const SIOCGARP = 35156 +const SIOCGIFADDR = 35093 +const SIOCGIFBR = 35136 +const SIOCGIFBRDADDR = 35097 +const SIOCGIFCONF = 35090 +const SIOCGIFCOUNT = 35128 +const SIOCGIFDSTADDR = 35095 +const SIOCGIFENCAP = 35109 +const SIOCGIFFLAGS = 35091 +const SIOCGIFHWADDR = 35111 +const SIOCGIFINDEX = 35123 +const SIOCGIFMAP = 35184 +const SIOCGIFMEM = 35103 +const SIOCGIFMETRIC = 35101 +const SIOCGIFMTU = 35105 +const SIOCGIFNAME = 35088 +const SIOCGIFNETMASK = 35099 +const SIOCGIFPFLAGS = 35125 +const SIOCGIFSLAVE = 35113 +const SIOCGIFTXQLEN = 35138 +const SIOCGPGRP = 35076 +const SIOCGRARP = 35169 +const SIOCGSTAMP = 35078 +const SIOCGSTAMPNS = 35079 +const SIOCPROTOPRIVATE = 35296 +const SIOCRTMSG = 35085 +const SIOCSARP = 35157 +const SIOCSIFADDR = 35094 +const SIOCSIFBR = 35137 +const SIOCSIFBRDADDR = 35098 +const SIOCSIFDSTADDR = 35096 +const SIOCSIFENCAP = 35110 +const SIOCSIFFLAGS = 35092 +const SIOCSIFHWADDR = 35108 +const SIOCSIFHWBROADCAST = 35127 +const SIOCSIFLINK = 35089 +const SIOCSIFMAP = 35185 +const SIOCSIFMEM = 35104 +const SIOCSIFMETRIC = 35102 +const SIOCSIFMTU = 35106 +const SIOCSIFNAME = 35107 +const SIOCSIFNETMASK = 35100 +const SIOCSIFPFLAGS = 35124 +const SIOCSIFSLAVE = 35120 +const SIOCSIFTXQLEN = 35139 +const SIOCSPGRP = 35074 +const SIOCSRARP = 35170 +const SIOGIFINDEX = 35123 +const TCFLSH = 536900639 +const TCGETA = 1073771543 +const TCGETS = 1073771539 +const TCSBRK = 536900637 +const TCSBRKP = 21541 +const TCSETA = 2147513368 +const TCSETAF = 2147513372 +const TCSETAW = 2147513369 +const TCSETS = 2147513364 +const TCSETSF = 2147513366 +const TCSETSW = 2147513365 +const TCXONC = 536900638 +const TIOCCBRK = 21544 +const TIOCCONS = 21533 +const TIOCEXCL = 21516 +const TIOCGDEV = 1073763378 +const TIOCGETC = 1073771538 +const TIOCGETD = 21540 +const TIOCGETP = 1073771528 +const TIOCGEXCL = 1073763392 +const TIOCGICOUNT = 21597 +const TIOCGLCKTRMIOS = 21590 +const TIOCGLTC = 1073771636 +const TIOCGPGRP = 1073771639 +const TIOCGPKT = 1073763384 +const TIOCGPTLCK = 1073763385 +const TIOCGPTN = 1073763376 +const TIOCGPTPEER = 536892481 +const TIOCGRS485 = 21550 +const TIOCGSERIAL = 21534 +const TIOCGSID = 21545 +const TIOCGSOFTCAR = 21529 +const TIOCGWINSZ = 1073771624 +const TIOCINQ = 1073768063 +const TIOCLINUX = 21532 +const TIOCMBIC = 21527 +const TIOCMBIS = 21526 +const TIOCMGET = 21525 +const TIOCMIWAIT = 21596 +const TIOCMSET = 21528 +const TIOCM_CAR = 64 +const TIOCM_CD = 64 +const TIOCM_CTS = 32 +const TIOCM_DSR = 256 +const TIOCM_DTR = 2 +const TIOCM_LE = 1 +const TIOCM_LOOP = 32768 +const TIOCM_OUT1 = 8192 +const TIOCM_OUT2 = 16384 +const TIOCM_RI = 128 +const TIOCM_RNG = 128 +const TIOCM_RTS = 4 +const TIOCM_SR = 16 +const TIOCM_ST = 8 +const TIOCNOTTY = 21538 +const TIOCNXCL = 21517 +const TIOCOUTQ = 1073771635 +const TIOCPKT = 21536 +const TIOCPKT_DATA = 0 +const TIOCPKT_DOSTOP = 32 +const TIOCPKT_FLUSHREAD = 1 +const TIOCPKT_FLUSHWRITE = 2 +const TIOCPKT_IOCTL = 64 +const TIOCPKT_NOSTOP = 16 +const TIOCPKT_START = 8 +const TIOCPKT_STOP = 4 +const TIOCSBRK = 21543 +const TIOCSCTTY = 21518 +const TIOCSERCONFIG = 21587 +const TIOCSERGETLSR = 21593 +const TIOCSERGETMULTI = 21594 +const TIOCSERGSTRUCT = 21592 +const TIOCSERGWILD = 21588 +const TIOCSERSETMULTI = 21595 +const TIOCSERSWILD = 21589 +const TIOCSETC = 2147513361 +const TIOCSETD = 21539 +const TIOCSETN = 2147513354 +const TIOCSETP = 2147513353 +const TIOCSIG = 2147505206 +const TIOCSLCKTRMIOS = 21591 +const TIOCSLTC = 2147513461 +const TIOCSPGRP = 2147513462 +const TIOCSPTLCK = 2147505201 +const TIOCSRS485 = 21551 +const TIOCSSERIAL = 21535 +const TIOCSSOFTCAR = 21530 +const TIOCSTART = 536900718 +const TIOCSTI = 21522 +const TIOCSTOP = 536900719 +const TIOCSWINSZ = 2147513447 +const TIOCVHANGUP = 21559 +const UMOUNT_NOFOLLOW = 8 +const _IOC_NONE = 1 +const _IOC_READ = 2 +const _IOC_WRITE = 4 + +func Xmount(tls *TLS, special uintptr, dir uintptr, fstype uintptr, flags uint64, data uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v dir=%v fstype=%v flags=%v data=%v, (%v:)", tls, special, dir, fstype, flags, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mount), int64(special), int64(dir), int64(fstype), int64(flags), int64(data))))) +} + +func Xumount(tls *TLS, special uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v, (%v:)", tls, special, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(Int32FromInt32(0)))))) +} + +func Xumount2(tls *TLS, special uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v flags=%v, (%v:)", tls, special, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(flags))))) +} + +func Xname_to_handle_at(tls *TLS, dirfd int32, pathname uintptr, handle uintptr, mount_id uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v handle=%v mount_id=%v flags=%v, (%v:)", tls, dirfd, pathname, handle, mount_id, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_name_to_handle_at), int64(dirfd), int64(pathname), int64(handle), int64(mount_id), int64(flags))))) +} + +func Xopen_by_handle_at(tls *TLS, mount_fd int32, handle uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mount_fd=%v handle=%v flags=%v, (%v:)", tls, mount_fd, handle, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open_by_handle_at), int64(mount_fd), int64(handle), int64(flags))))) +} + +const ADDR_COMPAT_LAYOUT = 2097152 +const ADDR_LIMIT_32BIT = 8388608 +const ADDR_LIMIT_3GB = 134217728 +const ADDR_NO_RANDOMIZE = 262144 +const FDPIC_FUNCPTRS = 524288 +const MMAP_PAGE_ZERO = 1048576 +const PER_BSD = 6 +const PER_HPUX = 16 +const PER_IRIX32 = 67108873 +const PER_IRIX64 = 67108875 +const PER_IRIXN32 = 67108874 +const PER_ISCR4 = 67108869 +const PER_LINUX = 0 +const PER_LINUX32 = 8 +const PER_LINUX32_3GB = 134217736 +const PER_LINUX_32BIT = 8388608 +const PER_LINUX_FDPIC = 524288 +const PER_MASK = 255 +const PER_OSF4 = 15 +const PER_OSR5 = 100663299 +const PER_RISCOS = 12 +const PER_SCOSVR3 = 117440515 +const PER_SOLARIS = 67108877 +const PER_SUNOS = 67108870 +const PER_SVR3 = 83886082 +const PER_SVR4 = 68157441 +const PER_UW7 = 68157454 +const PER_WYSEV386 = 83886084 +const PER_XENIX = 83886087 +const READ_IMPLIES_EXEC = 4194304 +const SHORT_INODE = 16777216 +const STICKY_TIMEOUTS = 67108864 +const UNAME26 = 131072 +const WHOLE_SECONDS = 33554432 + +func Xpersonality(tls *TLS, persona uint64) (r int32) { + if __ccgo_strace { + trc("tls=%v persona=%v, (%v:)", tls, persona, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_personality), int64(persona))))) +} + +func Xpivot_root(tls *TLS, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v new1=%v old=%v, (%v:)", tls, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_pivot_root), int64(new1), int64(old))))) +} + +const PR_CAPBSET_DROP = 24 +const PR_CAPBSET_READ = 23 +const PR_CAP_AMBIENT = 47 +const PR_CAP_AMBIENT_CLEAR_ALL = 4 +const PR_CAP_AMBIENT_IS_SET = 1 +const PR_CAP_AMBIENT_LOWER = 3 +const PR_CAP_AMBIENT_RAISE = 2 +const PR_ENDIAN_BIG = 0 +const PR_ENDIAN_LITTLE = 1 +const PR_ENDIAN_PPC_LITTLE = 2 +const PR_FPEMU_NOPRINT = 1 +const PR_FPEMU_SIGFPE = 2 +const PR_FP_EXC_ASYNC = 2 +const PR_FP_EXC_DISABLED = 0 +const PR_FP_EXC_DIV = 65536 +const PR_FP_EXC_INV = 1048576 +const PR_FP_EXC_NONRECOV = 1 +const PR_FP_EXC_OVF = 131072 +const PR_FP_EXC_PRECISE = 3 +const PR_FP_EXC_RES = 524288 +const PR_FP_EXC_SW_ENABLE = 128 +const PR_FP_EXC_UND = 262144 +const PR_FP_MODE_FR = 1 +const PR_FP_MODE_FRE = 2 +const PR_GET_CHILD_SUBREAPER = 37 +const PR_GET_DUMPABLE = 3 +const PR_GET_ENDIAN = 19 +const PR_GET_FPEMU = 9 +const PR_GET_FPEXC = 11 +const PR_GET_FP_MODE = 46 +const PR_GET_IO_FLUSHER = 58 +const PR_GET_KEEPCAPS = 7 +const PR_GET_NAME = 16 +const PR_GET_NO_NEW_PRIVS = 39 +const PR_GET_PDEATHSIG = 2 +const PR_GET_SECCOMP = 21 +const PR_GET_SECUREBITS = 27 +const PR_GET_SPECULATION_CTRL = 52 +const PR_GET_TAGGED_ADDR_CTRL = 56 +const PR_GET_THP_DISABLE = 42 +const PR_GET_TID_ADDRESS = 40 +const PR_GET_TIMERSLACK = 30 +const PR_GET_TIMING = 13 +const PR_GET_TSC = 25 +const PR_GET_UNALIGN = 5 +const PR_MCE_KILL = 33 +const PR_MCE_KILL_CLEAR = 0 +const PR_MCE_KILL_DEFAULT = 2 +const PR_MCE_KILL_EARLY = 1 +const PR_MCE_KILL_GET = 34 +const PR_MCE_KILL_LATE = 0 +const PR_MCE_KILL_SET = 1 +const PR_MPX_DISABLE_MANAGEMENT = 44 +const PR_MPX_ENABLE_MANAGEMENT = 43 +const PR_MTE_TAG_MASK = 524280 +const PR_MTE_TAG_SHIFT = 3 +const PR_MTE_TCF_ASYNC = 4 +const PR_MTE_TCF_MASK = 6 +const PR_MTE_TCF_NONE = 0 +const PR_MTE_TCF_SHIFT = 1 +const PR_MTE_TCF_SYNC = 2 +const PR_PAC_APDAKEY = 4 +const PR_PAC_APDBKEY = 8 +const PR_PAC_APGAKEY = 16 +const PR_PAC_APIAKEY = 1 +const PR_PAC_APIBKEY = 2 +const PR_PAC_GET_ENABLED_KEYS = 61 +const PR_PAC_RESET_KEYS = 54 +const PR_PAC_SET_ENABLED_KEYS = 60 +const PR_SET_CHILD_SUBREAPER = 36 +const PR_SET_DUMPABLE = 4 +const PR_SET_ENDIAN = 20 +const PR_SET_FPEMU = 10 +const PR_SET_FPEXC = 12 +const PR_SET_FP_MODE = 45 +const PR_SET_IO_FLUSHER = 57 +const PR_SET_KEEPCAPS = 8 +const PR_SET_MM = 35 +const PR_SET_MM_ARG_END = 9 +const PR_SET_MM_ARG_START = 8 +const PR_SET_MM_AUXV = 12 +const PR_SET_MM_BRK = 7 +const PR_SET_MM_END_CODE = 2 +const PR_SET_MM_END_DATA = 4 +const PR_SET_MM_ENV_END = 11 +const PR_SET_MM_ENV_START = 10 +const PR_SET_MM_EXE_FILE = 13 +const PR_SET_MM_MAP = 14 +const PR_SET_MM_MAP_SIZE = 15 +const PR_SET_MM_START_BRK = 6 +const PR_SET_MM_START_CODE = 1 +const PR_SET_MM_START_DATA = 3 +const PR_SET_MM_START_STACK = 5 +const PR_SET_NAME = 15 +const PR_SET_NO_NEW_PRIVS = 38 +const PR_SET_PDEATHSIG = 1 +const PR_SET_PTRACER = 1499557217 +const PR_SET_PTRACER_ANY = 18446744073709551615 +const PR_SET_SECCOMP = 22 +const PR_SET_SECUREBITS = 28 +const PR_SET_SPECULATION_CTRL = 53 +const PR_SET_SYSCALL_USER_DISPATCH = 59 +const PR_SET_TAGGED_ADDR_CTRL = 55 +const PR_SET_THP_DISABLE = 41 +const PR_SET_TIMERSLACK = 29 +const PR_SET_TIMING = 14 +const PR_SET_TSC = 26 +const PR_SET_UNALIGN = 6 +const PR_SPEC_DISABLE = 4 +const PR_SPEC_DISABLE_NOEXEC = 16 +const PR_SPEC_ENABLE = 2 +const PR_SPEC_FORCE_DISABLE = 8 +const PR_SPEC_INDIRECT_BRANCH = 1 +const PR_SPEC_NOT_AFFECTED = 0 +const PR_SPEC_PRCTL = 1 +const PR_SPEC_STORE_BYPASS = 0 +const PR_SVE_GET_VL = 51 +const PR_SVE_SET_VL = 50 +const PR_SVE_SET_VL_ONEXEC = 262144 +const PR_SVE_VL_INHERIT = 131072 +const PR_SVE_VL_LEN_MASK = 65535 +const PR_SYS_DISPATCH_OFF = 0 +const PR_SYS_DISPATCH_ON = 1 +const PR_TAGGED_ADDR_ENABLE = 1 +const PR_TASK_PERF_EVENTS_DISABLE = 31 +const PR_TASK_PERF_EVENTS_ENABLE = 32 +const PR_TIMING_STATISTICAL = 0 +const PR_TIMING_TIMESTAMP = 1 +const PR_TSC_ENABLE = 1 +const PR_TSC_SIGSEGV = 2 +const PR_UNALIGN_NOPRINT = 1 +const PR_UNALIGN_SIGBUS = 2 +const SYSCALL_DISPATCH_FILTER_ALLOW = 0 +const SYSCALL_DISPATCH_FILTER_BLOCK = 1 + +type Tprctl_mm_map = struct { + Fstart_code Tuint64_t + Fend_code Tuint64_t + Fstart_data Tuint64_t + Fend_data Tuint64_t + Fstart_brk Tuint64_t + Fbrk Tuint64_t + Fstart_stack Tuint64_t + Farg_start Tuint64_t + Farg_end Tuint64_t + Fenv_start Tuint64_t + Fenv_end Tuint64_t + Fauxv uintptr + Fauxv_size Tuint32_t + Fexe_fd Tuint32_t +} + +func Xprctl(tls *TLS, op int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v va=%v, (%v:)", tls, op, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var i int32 + var x [4]uint64 + _, _, _ = ap, i, x + ap = va + i = 0 + for { + if !(i < int32(4)) { + break + } + x[i] = VaUint64(&ap) + goto _1 + _1: + ; + i++ + } + _ = ap + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_prctl), int64(op), int64(x[0]), int64(x[int32(1)]), int64(x[int32(2)]), int64(x[int32(3)]))))) +} + +const RWF_APPEND = 16 +const RWF_DSYNC = 2 +const RWF_HIPRI = 1 +const RWF_NOWAIT = 8 +const RWF_SYNC = 4 +const UIO_MAXIOV = 1024 + +func Xpreadv2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xreadv(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +func Xprlimit(tls *TLS, pid Tpid_t, resource int32, new_limit uintptr, old_limit uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v resource=%v new_limit=%v old_limit=%v, (%v:)", tls, pid, resource, new_limit, old_limit, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tmp at bp+0 */ Trlimit + _ = r + if new_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(new_limit)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + new_limit = bp + } + r = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(pid), int64(resource), int64(new_limit), int64(old_limit))))) + if !(r != 0) && old_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max = ^Uint64FromUint64(0) + } + } + return r +} + +func Xprocess_vm_writev(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_writev), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +func Xprocess_vm_readv(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_readv), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +const PTRACE_ATTACH = 16 +const PTRACE_CONT = 7 +const PTRACE_DETACH = 17 +const PTRACE_EVENT_CLONE = 3 +const PTRACE_EVENT_EXEC = 4 +const PTRACE_EVENT_EXIT = 6 +const PTRACE_EVENT_FORK = 1 +const PTRACE_EVENT_SECCOMP = 7 +const PTRACE_EVENT_STOP = 128 +const PTRACE_EVENT_VFORK = 2 +const PTRACE_EVENT_VFORK_DONE = 5 +const PTRACE_GETEVENTMSG = 16897 +const PTRACE_GETEVRREGS = 20 +const PTRACE_GETFPREGS = 14 +const PTRACE_GETFPXREGS = 18 +const PTRACE_GETREGS = 12 +const PTRACE_GETREGS64 = 22 +const PTRACE_GETREGSET = 16900 +const PTRACE_GETSIGINFO = 16898 +const PTRACE_GETSIGMASK = 16906 +const PTRACE_GETVRREGS = 18 +const PTRACE_GETVSRREGS = 27 +const PTRACE_GET_DEBUGREG = 25 +const PTRACE_GET_RSEQ_CONFIGURATION = 16911 +const PTRACE_GET_SYSCALL_INFO = 16910 +const PTRACE_INTERRUPT = 16903 +const PTRACE_KILL = 8 +const PTRACE_LISTEN = 16904 +const PTRACE_O_EXITKILL = 1048576 +const PTRACE_O_MASK = 3145983 +const PTRACE_O_SUSPEND_SECCOMP = 2097152 +const PTRACE_O_TRACECLONE = 8 +const PTRACE_O_TRACEEXEC = 16 +const PTRACE_O_TRACEEXIT = 64 +const PTRACE_O_TRACEFORK = 2 +const PTRACE_O_TRACESECCOMP = 128 +const PTRACE_O_TRACESYSGOOD = 1 +const PTRACE_O_TRACEVFORK = 4 +const PTRACE_O_TRACEVFORKDONE = 32 +const PTRACE_PEEKDATA = 2 +const PTRACE_PEEKSIGINFO = 16905 +const PTRACE_PEEKSIGINFO_SHARED = 1 +const PTRACE_PEEKTEXT = 1 +const PTRACE_PEEKUSER = 3 +const PTRACE_POKEDATA = 5 +const PTRACE_POKETEXT = 4 +const PTRACE_POKEUSER = 6 +const PTRACE_SECCOMP_GET_FILTER = 16908 +const PTRACE_SECCOMP_GET_METADATA = 16909 +const PTRACE_SEIZE = 16902 +const PTRACE_SETEVRREGS = 21 +const PTRACE_SETFPREGS = 15 +const PTRACE_SETFPXREGS = 19 +const PTRACE_SETOPTIONS = 16896 +const PTRACE_SETREGS = 13 +const PTRACE_SETREGS64 = 23 +const PTRACE_SETREGSET = 16901 +const PTRACE_SETSIGINFO = 16899 +const PTRACE_SETSIGMASK = 16907 +const PTRACE_SETVRREGS = 19 +const PTRACE_SETVSRREGS = 28 +const PTRACE_SET_DEBUGREG = 26 +const PTRACE_SINGLEBLOCK = 256 +const PTRACE_SINGLESTEP = 9 +const PTRACE_SYSCALL = 24 +const PTRACE_SYSCALL_INFO_ENTRY = 1 +const PTRACE_SYSCALL_INFO_EXIT = 2 +const PTRACE_SYSCALL_INFO_NONE = 0 +const PTRACE_SYSCALL_INFO_SECCOMP = 3 +const PTRACE_SYSEMU = 29 +const PTRACE_SYSEMU_SINGLESTEP = 30 +const PTRACE_TRACEME = 0 +const PT_ATTACH = 16 +const PT_CONTINUE = 7 +const PT_DETACH = 17 +const PT_GETEVENTMSG = 16897 +const PT_GETEVRREGS = 20 +const PT_GETFPREGS = 14 +const PT_GETFPXREGS = 18 +const PT_GETREGS = 12 +const PT_GETREGS64 = 22 +const PT_GETSIGINFO = 16898 +const PT_GETVRREGS = 18 +const PT_GETVSRREGS = 27 +const PT_GET_DEBUGREG = 25 +const PT_KILL = 8 +const PT_READ_D = 2 +const PT_READ_I = 1 +const PT_READ_U = 3 +const PT_SETEVRREGS = 21 +const PT_SETFPREGS = 15 +const PT_SETFPXREGS = 19 +const PT_SETOPTIONS = 16896 +const PT_SETREGS = 13 +const PT_SETREGS64 = 23 +const PT_SETSIGINFO = 16899 +const PT_SETVRREGS = 19 +const PT_SETVSRREGS = 28 +const PT_SET_DEBUGREG = 26 +const PT_STEP = 9 +const PT_STEPBLOCK = 256 +const PT_SYSCALL = 24 +const PT_TRACE_ME = 0 +const PT_WRITE_D = 5 +const PT_WRITE_I = 4 +const PT_WRITE_U = 6 + +type t__ptrace_peeksiginfo_args = struct { + Foff Tuint64_t + Fflags Tuint32_t + Fnr Tint32_t +} + +type t__ptrace_seccomp_metadata = struct { + Ffilter_off Tuint64_t + Fflags Tuint64_t +} + +type t__ptrace_syscall_info = struct { + Fop Tuint8_t + F__pad [3]Tuint8_t + Farch Tuint32_t + Finstruction_pointer Tuint64_t + Fstack_pointer Tuint64_t + F__ccgo5_24 struct { + Fexit [0]struct { + Frval Tint64_t + Fis_error Tuint8_t + } + Fseccomp [0]struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + Fret_data Tuint32_t + } + Fentry struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + } + F__ccgo_pad3 [8]byte + } +} + +type t__ptrace_rseq_configuration = struct { + Frseq_abi_pointer Tuint64_t + Frseq_abi_size Tuint32_t + Fsignature Tuint32_t + Fflags Tuint32_t + Fpad Tuint32_t +} + +func Xptrace(tls *TLS, req int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v req=%v va=%v, (%v:)", tls, req, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var addr, addr2, data uintptr + var ap Tva_list + var pid Tpid_t + var ret int64 + var _ /* result at bp+0 */ int64 + _, _, _, _, _, _ = addr, addr2, ap, data, pid, ret + addr2 = uintptr(0) + ap = va + pid = VaInt32(&ap) + addr = VaUintptr(&ap) + data = VaUintptr(&ap) + /* PTRACE_{READ,WRITE}{DATA,TEXT} (16...19) are specific to SPARC. */ + _ = ap + if uint32(req)-uint32(1) < uint32(3) { + data = bp + } + ret = X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ptrace), int64(req), int64(pid), int64(addr), int64(data), int64(addr2)))) + if ret < 0 || uint32(req)-uint32(1) >= uint32(3) { + return ret + } + return *(*int64)(unsafe.Pointer(bp)) +} + +func Xpwritev2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xwritev(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +const GRPQUOTA = 1 +const IIF_ALL = 7 +const IIF_BGRACE = 1 +const IIF_FLAGS = 4 +const IIF_IGRACE = 2 +const MAXQUOTAS = 2 +const MAX_DQ_TIME = 604800 +const MAX_IQ_TIME = 604800 +const NR_DQHASH = 43 +const NR_DQUOTS = 256 +const QFMT_OCFS2 = 3 +const QFMT_VFS_OLD = 1 +const QFMT_VFS_V0 = 2 +const QFMT_VFS_V1 = 4 +const QIF_ALL = 63 +const QIF_BLIMITS = 1 +const QIF_BTIME = 16 +const QIF_ILIMITS = 4 +const QIF_INODES = 8 +const QIF_ITIME = 32 +const QIF_LIMITS = 5 +const QIF_SPACE = 2 +const QIF_TIMES = 48 +const QIF_USAGE = 10 +const QUOTAFILENAME = "quota" +const QUOTAGROUP = "staff" +const Q_GETFMT = 8388612 +const Q_GETINFO = 8388613 +const Q_GETQUOTA = 8388615 +const Q_QUOTAOFF = 8388611 +const Q_QUOTAON = 8388610 +const Q_SETINFO = 8388614 +const Q_SETQUOTA = 8388616 +const Q_SYNC = 8388609 +const SUBCMDMASK = 255 +const SUBCMDSHIFT = 8 +const USRQUOTA = 0 +const _LINUX_QUOTA_VERSION = 2 + +type Tdqblk = struct { + Fdqb_bhardlimit Tuint64_t + Fdqb_bsoftlimit Tuint64_t + Fdqb_curspace Tuint64_t + Fdqb_ihardlimit Tuint64_t + Fdqb_isoftlimit Tuint64_t + Fdqb_curinodes Tuint64_t + Fdqb_btime Tuint64_t + Fdqb_itime Tuint64_t + Fdqb_valid Tuint32_t +} + +type Tdqinfo = struct { + Fdqi_bgrace Tuint64_t + Fdqi_igrace Tuint64_t + Fdqi_flags Tuint32_t + Fdqi_valid Tuint32_t +} + +func Xquotactl(tls *TLS, cmd int32, special uintptr, id int32, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v special=%v id=%v addr=%v, (%v:)", tls, cmd, special, id, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_quotactl), int64(cmd), int64(special), int64(id), int64(addr))))) +} + +func Xreadahead(tls *TLS, fd int32, pos Toff_t, len1 Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v, (%v:)", tls, fd, pos, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readahead), int64(fd), pos, int64(len1)))) +} + +const RB_AUTOBOOT = 19088743 +const RB_DISABLE_CAD = 0 +const RB_ENABLE_CAD = 2309737967 +const RB_HALT_SYSTEM = 3454992675 +const RB_KEXEC = 1163412803 +const RB_POWER_OFF = 1126301404 +const RB_SW_SUSPEND = 3489725666 + +func Xreboot(tls *TLS, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v, (%v:)", tls, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_reboot), int64(Uint32FromUint32(0xfee1dead)), int64(Int32FromInt32(672274793)), int64(type1))))) +} + +func Xremap_file_pages(tls *TLS, addr uintptr, size Tsize_t, prot int32, pgoff Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v size=%v prot=%v pgoff=%v flags=%v, (%v:)", tls, addr, size, prot, pgoff, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_remap_file_pages), int64(addr), int64(size), int64(prot), int64(pgoff), int64(flags))))) +} + +func Xsbrk(tls *TLS, inc Tintptr_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if inc != 0 { + return uintptr(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) + } + return uintptr(X__syscall1(tls, int64(SYS_brk), int64(Int32FromInt32(0)))) +} + +func Xsendfile(tls *TLS, out_fd int32, in_fd int32, ofs uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v out_fd=%v in_fd=%v ofs=%v count=%v, (%v:)", tls, out_fd, in_fd, ofs, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sendfile), int64(out_fd), int64(in_fd), int64(ofs), int64(count)))) +} + +func Xsetfsgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsgid), int64(gid))))) +} + +func Xsetfsuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsuid), int64(uid))))) +} + +func Xsethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sethostname), int64(name), int64(len1))))) +} + +const CLONE_CHILD_CLEARTID = 2097152 +const CLONE_CHILD_SETTID = 16777216 +const CLONE_DETACHED = 4194304 +const CLONE_FILES = 1024 +const CLONE_FS = 512 +const CLONE_IO = 2147483648 +const CLONE_NEWCGROUP = 33554432 +const CLONE_NEWIPC = 134217728 +const CLONE_NEWNET = 1073741824 +const CLONE_NEWNS = 131072 +const CLONE_NEWPID = 536870912 +const CLONE_NEWTIME = 128 +const CLONE_NEWUSER = 268435456 +const CLONE_NEWUTS = 67108864 +const CLONE_PARENT = 32768 +const CLONE_PARENT_SETTID = 1048576 +const CLONE_PIDFD = 4096 +const CLONE_PTRACE = 8192 +const CLONE_SETTLS = 524288 +const CLONE_SIGHAND = 2048 +const CLONE_SYSVSEM = 262144 +const CLONE_THREAD = 65536 +const CLONE_UNTRACED = 8388608 +const CLONE_VFORK = 16384 +const CLONE_VM = 256 +const CPU_SETSIZE = 1024 +const CSIGNAL = 255 + +type Tcpu_set_t = struct { + F__bits [16]uint64 +} + +func Xsetns(tls *TLS, fd int32, nstype int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v nstype=%v, (%v:)", tls, fd, nstype, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setns), int64(fd), int64(nstype))))) +} + +const __tm_gmtoff = 0 +const __tm_zone = 0 + +type Ttm1 = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + Ftm_gmtoff int64 + Ftm_zone uintptr +} + +func Xsettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if !(tv != 0) { + return 0 + } + if uint64((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec, + Ftv_nsec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec * int64(1000), + } + return Xclock_settime(tls, CLOCK_REALTIME, bp) +} + +const SFD_CLOEXEC = 524288 +const SFD_NONBLOCK = 2048 + +type Tsignalfd_siginfo = struct { + Fssi_signo Tuint32_t + Fssi_errno Tint32_t + Fssi_code Tint32_t + Fssi_pid Tuint32_t + Fssi_uid Tuint32_t + Fssi_fd Tint32_t + Fssi_tid Tuint32_t + Fssi_band Tuint32_t + Fssi_overrun Tuint32_t + Fssi_trapno Tuint32_t + Fssi_status Tint32_t + Fssi_int Tint32_t + Fssi_ptr Tuint64_t + Fssi_utime Tuint64_t + Fssi_stime Tuint64_t + Fssi_addr Tuint64_t + Fssi_addr_lsb Tuint16_t + F__pad2 Tuint16_t + Fssi_syscall Tint32_t + Fssi_call_addr Tuint64_t + Fssi_arch Tuint32_t + F__pad [28]Tuint8_t +} + +func Xsignalfd(tls *TLS, fd int32, sigs uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v sigs=%v flags=%v, (%v:)", tls, fd, sigs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall4(tls, int64(SYS_signalfd4), int64(fd), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), int64(flags))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + ret = int32(X__syscall3(tls, int64(SYS_signalfd), int64(fd), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if ret >= 0 { + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flags&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsplice(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_splice), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +func Xstatx(tls *TLS, dirfd int32, path uintptr, flags int32, mask uint32, stx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v path=%v flags=%v mask=%v stx=%v, (%v:)", tls, dirfd, path, flags, mask, stx, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var ret int32 + var _ /* st at bp+0 */ Tstat + _ = ret + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(dirfd), int64(path), int64(flags), int64(mask), int64(stx))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + ret = Xfstatat(tls, dirfd, path, bp, flags) + if ret != 0 { + return ret + } + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_major = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(31)>>Int32FromInt32(1)&Uint64FromUint32(0xfffff000) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(8)&Uint64FromInt32(0x00000fff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_minor = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(12)&Uint64FromUint32(0xffffff00) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0x000000ff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mode = uint16((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_nlink = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_nlink) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_uid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_uid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_gid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_gid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_size = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blksize = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_blksize) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blocks = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_blocks) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_btime = Tstatx_timestamp{} + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mask = uint32(0x7ff) + return 0 +} + +func Xstime(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimeval + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: *(*Ttime_t)(unsafe.Pointer(t)), + } + return Xsettimeofday(tls, bp, UintptrFromInt32(0)) +} + +const SWAP_FLAG_DISCARD = 65536 +const SWAP_FLAG_PREFER = 32768 +const SWAP_FLAG_PRIO_MASK = 32767 +const SWAP_FLAG_PRIO_SHIFT = 0 + +func Xswapon(tls *TLS, path uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v flags=%v, (%v:)", tls, path, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_swapon), int64(path), int64(flags))))) +} + +func Xswapoff(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_swapoff), int64(path))))) +} + +func Xsync_file_range(tls *TLS, fd int32, pos Toff_t, len1 Toff_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v flags=%v, (%v:)", tls, fd, pos, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sync_file_range2), int64(fd), int64(flags), pos, len1)))) +} + +func Xsyncfs(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_syncfs), int64(fd))))) +} + +func X__lsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_sysinfo), int64(info))))) +} + +func Xsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lsysinfo(tls, info) +} + +func Xtee(tls *TLS, src int32, dest int32, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v src=%v dest=%v len1=%v flags=%v, (%v:)", tls, src, dest, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_tee), int64(src), int64(dest), int64(len1), int64(flags)))) +} + +const TFD_CLOEXEC = 524288 +const TFD_NONBLOCK = 2048 +const TFD_TIMER_ABSTIME = 1 +const TFD_TIMER_CANCEL_ON_SET = 2 + +func Xtimerfd_create(tls *TLS, clockid int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v clockid=%v flags=%v, (%v:)", tls, clockid, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_create), int64(clockid), int64(flags))))) +} + +func Xtimerfd_settime(tls *TLS, fd int32, flags int32, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v new1=%v old=%v, (%v:)", tls, fd, flags, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timerfd_settime), int64(fd), int64(flags), int64(new1), int64(old))))) +} + +func Xtimerfd_gettime(tls *TLS, fd int32, cur uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cur=%v, (%v:)", tls, fd, cur, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_gettime), int64(fd), int64(cur))))) +} + +func Xunshare(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_unshare), int64(flags))))) +} + +func Xutimes(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, -int32(100), path, times) +} + +func Xvhangup(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_vhangup))))) +} + +func Xvmsplice(tls *TLS, fd int32, iov uintptr, cnt Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v cnt=%v flags=%v, (%v:)", tls, fd, iov, cnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_vmsplice), int64(fd), int64(iov), int64(cnt), int64(flags)))) +} + +const NSIG = 65 +const SA_NOMASK = 1073741824 +const SA_ONESHOT = 2147483648 +const SYS_SECCOMP = 1 +const SYS_USER_DISPATCH = 2 +const __ucontext = 0 + +type Tgreg_t = uint64 + +type Tgregset_t = [48]uint64 + +type Tfpregset_t = [33]float64 + +type Tmcontext_t1 = struct { + F_unused [4]uint64 + Fsignal int32 + F_pad0 int32 + Fhandler uint64 + Foldmask uint64 + Fregs uintptr + Fgp_regs Tgregset_t + Ffp_regs Tfpregset_t + Fv_regs uintptr + Fvmx_reserve [101]int64 +} + +type Tsigcontext = Tmcontext_t1 + +type Tucontext_t1 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t1 +} + +type Tucontext = Tucontext_t1 + +type Tsig_t = uintptr + +type Tsighandler_t = uintptr + +func Xwait3(tls *TLS, status uintptr, options int32, usage uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwait4(tls, -int32(1), status, options, usage) +} + +func Xwait4(tls *TLS, pid Tpid_t, status uintptr, options int32, ru uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v ru=%v, (%v:)", tls, pid, status, options, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest, v1 uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _, _ = dest, r, v1 + if ru != 0 { + v1 = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + } else { + v1 = uintptr(0) + } + dest = v1 + r = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(dest))) + if r > 0 && ru != 0 && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +const XATTR_CREATE = 1 +const XATTR_REPLACE = 2 +const __UAPI_DEF_XATTR = 0 + +func Xgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_getxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xlgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_lgetxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xfgetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v, (%v:)", tls, filedes, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fgetxattr), int64(filedes), int64(name), int64(value), int64(size)))) +} + +func Xlistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_listxattr), int64(path), int64(list), int64(size)))) +} + +func Xllistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_llistxattr), int64(path), int64(list), int64(size)))) +} + +func Xflistxattr(tls *TLS, filedes int32, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v list=%v size=%v, (%v:)", tls, filedes, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_flistxattr), int64(filedes), int64(list), int64(size)))) +} + +func Xsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_setxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xlsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_lsetxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xfsetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, filedes, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fsetxattr), int64(filedes), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_removexattr), int64(path), int64(name))))) +} + +func Xlremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_lremovexattr), int64(path), int64(name))))) +} + +func Xfremovexattr(tls *TLS, fd int32, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fremovexattr), int64(fd), int64(name))))) +} + +type Tucontext_t2 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t +} + +func _dummy4(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + return msg +} + +func X__lctrans(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, lm) +} + +func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale + 5*8))) +} + +func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { + var v1 uint32 + _ = v1 + if c != 0 { + v1 = x>>int32(24) | x>>int32(8)&uint32(0xff00) | x< %v", r) }() + } + var b, n, o, ol, os, t, tl, ts Tuint32_t + var mo uintptr + var sign, sw int32 + _, _, _, _, _, _, _, _, _, _, _ = b, mo, n, o, ol, os, sign, sw, t, tl, ts + mo = p + sw = int32(*(*Tuint32_t)(unsafe.Pointer(mo)) - uint32(0x950412de)) + b = uint32(0) + n = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 2*4)), sw) + o = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 3*4)), sw) + t = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 4*4)), sw) + if uint64(n) >= size/uint64(4) || uint64(o) >= size-uint64(uint32(4)*n) || uint64(t) >= size-uint64(uint32(4)*n) || (o|t)%uint32(4) != 0 { + return uintptr(0) + } + o /= uint32(4) + t /= uint32(4) + for { + ol = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2)))*4)), sw) + os = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(os) >= size || uint64(ol) >= size-uint64(os) || *(*uint8)(unsafe.Pointer(p + uintptr(os+ol))) != 0 { + return uintptr(0) + } + sign = Xstrcmp(tls, s, p+uintptr(os)) + if !(sign != 0) { + tl = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2)))*4)), sw) + ts = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(ts) >= size || uint64(tl) >= size-uint64(ts) || *(*uint8)(unsafe.Pointer(p + uintptr(ts+tl))) != 0 { + return uintptr(0) + } + return p + uintptr(ts) + } else { + if n == uint32(1) { + return uintptr(0) + } else { + if sign < 0 { + n /= uint32(2) + } else { + b += n / uint32(2) + n -= n / uint32(2) + } + } + } + goto _1 + _1: + } + return uintptr(0) +} + +const __USE_GNU_GETTEXT = 1 + +func Xbind_textdomain_codeset(tls *TLS, domainname uintptr, codeset uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v codeset=%v, (%v:)", tls, domainname, codeset, origin(2)) + defer func() { trc("-> %v", r) }() + } + if codeset != 0 && Xstrcasecmp(tls, codeset, __ccgo_ts+419) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + } + return UintptrFromInt32(0) +} + +var _empty_mo = [5]Tuint32_t{ + 0: uint32(0x950412de), + 2: uint32(-Int32FromInt32(1)), + 3: uint32(-Int32FromInt32(1)), + 4: uint32(-Int32FromInt32(1)), +} + +const NL_CAT_LOCALE = 1 +const NL_SETD = 1 + +type Tnl_item = int32 + +type Tnl_catd = uintptr + +func Xcatclose(tls *TLS, catd Tnl_catd) (r int32) { + if __ccgo_strace { + trc("tls=%v catd=%v, (%v:)", tls, catd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var map1 uintptr + var v1, v2 Tuint32_t + _, _, _ = map1, v1, v2 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4< y { + v8 = int32(1) + } else { + v8 = 0 + } + v7 = v8 + } + return v7 +} + +func Xcatgets(tls *TLS, catd Tnl_catd, set_id int32, msg_id int32, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v catd=%v set_id=%v msg_id=%v s=%v, (%v:)", tls, catd, set_id, msg_id, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var map1, msg, msgs, set, sets, strings uintptr + var nmsgs, nsets, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 Tuint32_t + var _ /* msg_id_be at bp+4 */ Tuint32_t + var _ /* set_id_be at bp+0 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = map1, msg, msgs, nmsgs, nsets, set, sets, strings, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(4))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7<>int32(24) | v10>>int32(8)&uint32(0xff00) | v10<>int32(24) | v13>>int32(8)&uint32(0xff00) | v13<>int32(24) | v16>>int32(8)&uint32(0xff00) | v16<>int32(24) | v19>>int32(8)&uint32(0xff00) | v19<>int32(24) | v22>>int32(8)&uint32(0xff00) | v22<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< %v", r) }() + } + bp := tls.Alloc(4096) + defer tls.Free(4096) + var catd Tnl_catd + var i, l Tsize_t + var lang, p, path, v, z, v1, v3, v6, v7 uintptr + var v2 bool + var _ /* buf at bp+0 */ [4096]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = catd, i, l, lang, p, path, v, z, v1, v2, v3, v6, v7 + if Xstrchr(tls, name, int32('/')) != 0 { + return _do_catopen(tls, name) + } + if v2 = X__libc.Fsecure != 0; !v2 { + v1 = Xgetenv(tls, __ccgo_ts+425) + path = v1 + } + if v2 || !(v1 != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + if oflag != 0 { + v3 = Xnl_langinfo(tls, Int32FromInt32(LC_MESSAGES)<= uint64(4096)-i { + break + } + Xmemcpy(tls, bp+uintptr(i), v, l) + i += l + goto _5 + _5: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(z)) != 0) && (p < z || !(i != 0)) { + break + } + if p < z { + goto _4 + } + if *(*uint8)(unsafe.Pointer(z)) != 0 { + z++ + } + (*(*[4096]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + /* Leading : or :: in NLSPATH is same as %N */ + if i != 0 { + v7 = bp + } else { + v7 = name + } + catd = _do_catopen(tls, v7) + if catd != uintptr(-Int32FromInt32(1)) { + return catd + } + goto _4 + _4: + ; + p = z + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) +} + +const calloc = 0 +const free = 0 +const malloc = 0 +const realloc = 0 + +type Tbinding = struct { + Fnext uintptr + Fdirlen int32 + Factive int32 + Fdomainname uintptr + Fdirname uintptr +} + +var _bindings uintptr + +func _gettextdir(tls *TLS, domainname uintptr, dirlen uintptr) (r uintptr) { + var p uintptr + _ = p + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(p+12) != 0 { + *(*Tsize_t)(unsafe.Pointer(dirlen)) = uint64((*Tbinding)(unsafe.Pointer(p)).Fdirlen) + return (*Tbinding)(unsafe.Pointer(p)).Fdirname + } + goto _1 + _1: + ; + p = (*Tbinding)(unsafe.Pointer(p)).Fnext + } + return uintptr(0) +} + +var _lock1 [1]int32 + +func Xbindtextdomain(tls *TLS, domainname uintptr, dirname uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v dirname=%v, (%v:)", tls, domainname, dirname, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dirlen, domlen Tsize_t + var old, p4, q, v, v2, v3, v8, v9 uintptr + var r, v4 int32 + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _, _ = dirlen, domlen, old, p4, q, r, v, v2, v3, v4, v6, v8, v9 + if !(domainname != 0) { + return uintptr(0) + } + if !(dirname != 0) { + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + return _gettextdir(tls, domainname, bp) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + dirlen = Xstrnlen(tls, dirname, uint64(PATH_MAX)) + if domlen > uint64(NAME_MAX) || dirlen >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock1))) + p4 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p4 != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p4)).Fdomainname, domainname) != 0) && !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p4)).Fdirname, dirname) != 0) { + break + } + goto _1 + _1: + ; + p4 = (*Tbinding)(unsafe.Pointer(p4)).Fnext + } + if !(p4 != 0) { + p4 = Xcalloc(tls, uint64(32)+domlen+dirlen+uint64(2), uint64(1)) + if !(p4 != 0) { + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return uintptr(0) + } + (*Tbinding)(unsafe.Pointer(p4)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + (*Tbinding)(unsafe.Pointer(p4)).Fdirlen = int32(dirlen) + (*Tbinding)(unsafe.Pointer(p4)).Fdomainname = p4 + 32 + (*Tbinding)(unsafe.Pointer(p4)).Fdirname = p4 + 32 + uintptr(domlen) + uintptr(1) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p4)).Fdomainname, domainname, domlen+uint64(1)) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p4)).Fdirname, dirname, dirlen+uint64(1)) + v2 = uintptr(unsafe.Pointer(&_bindings)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+447) + for { + v8 = v2 + // __asm__ __volatile__ ("ldarx %0, 0, %2" : "=r"(v) : "m"(*(void *volatile *)p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+447) + v9 = v + goto _10 + _10: + old = v9 + goto _7 + _7: + ; + if v6 = old == AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))); v6 { + v3 = v2 + // __asm__ __volatile__ ( + // + // "stdcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*(void *volatile *)p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 31, __ccgo_ts+447) + v4 = r & int32(0x20000000) + goto _5 + _5: + } + if !(v6 && !(v4 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+447) + _ = old + goto _11 + _11: + } + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+447) + AtomicStorePInt32(p4+12, int32(1)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+447) + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && q != p4 { + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+447) + AtomicStorePInt32(q+12, 0) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+447) + } + goto _12 + _12: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return (*Tbinding)(unsafe.Pointer(p4)).Fdirname +} + +var _catnames = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +var _catlens = [6]uint8{ + 0: uint8(8), + 1: uint8(10), + 2: uint8(7), + 3: uint8(10), + 4: uint8(11), + 5: uint8(11), +} + +type Tmsgcat = struct { + Fnext uintptr + Fmap1 uintptr + Fmap_size Tsize_t + Fplural_rule uintptr + Fnplurals int32 + Fbinding uintptr + Flm uintptr + Fcat int32 +} + +func _dummy_gettextdomain(tls *TLS) (r uintptr) { + return __ccgo_ts + 462 +} + +func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64, category int32) (r2 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v category=%v, (%v:)", tls, domainname, msgid1, msgid2, n, category, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var alt_modlen, catlen, dirlen, domlen, l, loclen, modlen, rem, v5 Tsize_t + var catname, csp, dirname, lm, loc, locname, locp, map1, modname, name, old, old_cats, p3, q, r1, rule, trans, v, v10, v17, v18, v23, v24, v26, v3, v8, v9 uintptr + var np, plural, v29 uint64 + var old_errno, r, v11, v12, v14, v15, v19 int32 + var v21 bool + var v6 t__predefined_size_t + var _ /* map_size at bp+0 */ Tsize_t + var _ /* z at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old, old_cats, old_errno, p3, plural, q, r, r1, rem, rule, trans, v, v10, v11, v12, v14, v15, v17, v18, v19, v21, v23, v24, v26, v29, v3, v5, v6, v8, v9 + defer func() { Xrealloc(tls, name, 0) }() + loc = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + /* match gnu gettext behaviour */ + if !(msgid1 != 0) { + goto notrans + } + if uint32(category) >= uint32(LC_ALL) { + goto notrans + } + if !(domainname != 0) { + domainname = X__gettextdomain(tls) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if domlen > uint64(NAME_MAX) { + goto notrans + } + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(q+12) != 0 { + break + } + goto _1 + _1: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + if !(q != 0) { + goto notrans + } + lm = *(*uintptr)(unsafe.Pointer(loc + uintptr(category)*8)) + if !!(lm != 0) { + goto _2 + } + goto notrans +notrans: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if n == uint64(1) { + v3 = msgid1 + } else { + v3 = msgid2 + } + return v3 +_2: + ; + p3 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + for { + if !(p3 != 0) { + break + } + if (*Tmsgcat)(unsafe.Pointer(p3)).Fbinding == q && (*Tmsgcat)(unsafe.Pointer(p3)).Flm == lm && (*Tmsgcat)(unsafe.Pointer(p3)).Fcat == category { + break + } + goto _4 + _4: + ; + p3 = (*Tmsgcat)(unsafe.Pointer(p3)).Fnext + } + if !(p3 != 0) { + dirname = (*Tbinding)(unsafe.Pointer(q)).Fdirname + locname = lm + 16 + catname = uintptr(unsafe.Pointer(&_catnames)) + uintptr(category)*12 + dirlen = uint64((*Tbinding)(unsafe.Pointer(q)).Fdirlen) + loclen = Xstrlen(tls, locname) + catlen = uint64(_catlens[category]) + /* Logically split @mod suffix from locale name. */ + modname = Xmemchr(tls, locname, int32('@'), loclen) + if !(modname != 0) { + modname = locname + uintptr(loclen) + } + v5 = loclen - uint64(int64(modname)-int64(locname)) + modlen = v5 + alt_modlen = v5 + loclen = uint64(int64(modname) - int64(locname)) + /* Drop .charset identifier; it is not used. */ + csp = Xmemchr(tls, locname, int32('.'), loclen) + if csp != 0 { + loclen = uint64(int64(csp) - int64(locname)) + } + v6 = dirlen + uint64(1) + loclen + modlen + uint64(1) + catlen + uint64(1) + domlen + uint64(3) + uint64(1) + name = Xrealloc(tls, name, v6) + for { + Xsnprintf(tls, name, v6, __ccgo_ts+471, VaList(bp+24, dirname, int32(loclen), locname, int32(alt_modlen), modname, catname, domainname)) + v8 = X__map_file(tls, name, bp) + map1 = v8 + if v8 != 0 { + break + } + /* Try dropping @mod, _YY, then both. */ + if alt_modlen != 0 { + alt_modlen = uint64(0) + } else { + v9 = Xmemchr(tls, locname, int32('_'), loclen) + locp = v9 + if v9 != 0 { + loclen = uint64(int64(locp) - int64(locname)) + alt_modlen = modlen + } else { + break + } + } + goto _7 + _7: + } + if !(map1 != 0) { + goto notrans + } + p3 = Xcalloc(tls, uint64(64), uint64(1)) + if !(p3 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + goto notrans + } + (*Tmsgcat)(unsafe.Pointer(p3)).Fcat = category + (*Tmsgcat)(unsafe.Pointer(p3)).Fbinding = q + (*Tmsgcat)(unsafe.Pointer(p3)).Flm = lm + (*Tmsgcat)(unsafe.Pointer(p3)).Fmap1 = map1 + (*Tmsgcat)(unsafe.Pointer(p3)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp)) + rule = __ccgo_ts + 493 + np = uint64(2) + r1 = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p3)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p3)).Fmap_size, __ccgo_ts) + for r1 != 0 && Xstrncmp(tls, r1, __ccgo_ts+499, uint64(13)) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = Xstrchr(tls, r1, int32('\n')) + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v10 = *(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(1) + } else { + v10 = uintptr(0) + } + r1 = v10 + } + if r1 != 0 { + r1 += uintptr(13) + for { + v11 = int32(*(*uint8)(unsafe.Pointer(r1))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + if !(v12 != 0) { + break + } + r1++ + } + if !(Xstrncmp(tls, r1, __ccgo_ts+513, uint64(9)) != 0) { + np = Xstrtoul(tls, r1+uintptr(9), bp+8, int32(10)) + r1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } + for *(*uint8)(unsafe.Pointer(r1)) != 0 && int32(*(*uint8)(unsafe.Pointer(r1))) != int32(';') { + r1++ + } + if *(*uint8)(unsafe.Pointer(r1)) != 0 { + r1++ + for { + v14 = int32(*(*uint8)(unsafe.Pointer(r1))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + if !(v15 != 0) { + break + } + r1++ + } + if !(Xstrncmp(tls, r1, __ccgo_ts+523, uint64(7)) != 0) { + rule = r1 + uintptr(7) + } + } + } + (*Tmsgcat)(unsafe.Pointer(p3)).Fnplurals = int32(np) + (*Tmsgcat)(unsafe.Pointer(p3)).Fplural_rule = rule + for { + old_cats = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + (*Tmsgcat)(unsafe.Pointer(p3)).Fnext = old_cats + goto _28 + _28: + ; + v17 = uintptr(unsafe.Pointer(&_cats)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+531) + for { + v23 = v17 + // __asm__ __volatile__ ("ldarx %0, 0, %2" : "=r"(v) : "m"(*(void *volatile *)p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+531) + v24 = v + goto _25 + _25: + old = v24 + goto _22 + _22: + ; + if v21 = old == old_cats; v21 { + v18 = v17 + // __asm__ __volatile__ ( + // + // "stdcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*(void *volatile *)p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 31, __ccgo_ts+531) + v19 = r & int32(0x20000000) + goto _20 + _20: + } + if !(v21 && !(v19 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+531) + v26 = old + goto _27 + _27: + ; + if !(v26 != old_cats) { + break + } + } + } + trans = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p3)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p3)).Fmap_size, msgid1) + if !(trans != 0) { + goto notrans + } + /* Non-plural-processing gettext forms pass a null pointer as + * msgid2 to request that dcngettext suppress plural processing. */ + if msgid2 != 0 && (*Tmsgcat)(unsafe.Pointer(p3)).Fnplurals != 0 { + plural = X__pleval(tls, (*Tmsgcat)(unsafe.Pointer(p3)).Fplural_rule, n) + if plural > uint64((*Tmsgcat)(unsafe.Pointer(p3)).Fnplurals) { + goto notrans + } + for { + v29 = plural + plural-- + if !(v29 != 0) { + break + } + rem = (*Tmsgcat)(unsafe.Pointer(p3)).Fmap_size - uint64(int64(trans)-int64((*Tmsgcat)(unsafe.Pointer(p3)).Fmap1)) + l = Xstrnlen(tls, trans, rem) + if l+uint64(1) >= rem { + goto notrans + } + trans += uintptr(l + uint64(1)) + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return trans +} + +var _cats uintptr + +func Xdcgettext(tls *TLS, domainname uintptr, msgid uintptr, category int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v category=%v, (%v:)", tls, domainname, msgid, category, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), category) +} + +func Xdngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, domainname, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid1, msgid2, n, int32(LC_MESSAGES)) +} + +func Xdgettext(tls *TLS, domainname uintptr, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v, (%v:)", tls, domainname, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), int32(LC_MESSAGES)) +} + +func X__duplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var new1 Tlocale_t + _ = new1 + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + return uintptr(0) + } + if old == uintptr(-Int32FromInt32(1)) { + old = uintptr(unsafe.Pointer(&X__libc)) + 56 + } + *(*t__locale_struct)(unsafe.Pointer(new1)) = *(*t__locale_struct)(unsafe.Pointer(old)) + return new1 +} + +func Xduplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__duplocale(tls, old) +} + +func Xfreelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + if X__loc_is_allocated(tls, l) != 0 { + Xfree(tls, l) + } +} + +func X__freelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + Xfreelocale(tls, l) +} + +const BIG5 = 224 +const EUC_JP = 208 +const EUC_KR = 232 +const GB18030 = 216 +const GB2312 = 218 +const GBK = 217 +const ISO2022_JP = 210 +const SHIFT_JIS = 209 +const UCS2 = 204 +const UCS2BE = 196 +const UCS2LE = 197 +const US_ASCII = 199 +const UTF_16 = 202 +const UTF_16BE = 194 +const UTF_16LE = 193 +const UTF_32 = 203 +const UTF_32BE = 192 +const UTF_32LE = 195 +const UTF_8 = 200 +const WCHAR_T = 198 +const mbrtowc_utf8 = 0 +const wctomb_utf8 = 0 + +type Ticonv_t = uintptr + +/* Definitions of charmaps. Each charmap consists of: + * 1. Empty-string-terminated list of null-terminated aliases. + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ + +var _charmaps = [4907]uint8{'u', 't', 'f', '8', 0, 'c', 'h', 'a', 'r', 0, 0, 200, 'w', 'c', 'h', 'a', 'r', 't', 0, 0, 198, 'u', 'c', 's', '2', 'b', 'e', 0, 0, 196, 'u', 'c', 's', '2', 'l', 'e', 0, 0, 197, 'u', 't', 'f', '1', '6', 'b', 'e', 0, 0, 194, 'u', 't', 'f', '1', '6', 'l', 'e', 0, 0, 193, 'u', 'c', 's', '4', 'b', 'e', 0, 'u', 't', 'f', '3', '2', 'b', 'e', 0, 0, 192, 'u', 'c', 's', '4', 'l', 'e', 0, 'u', 't', 'f', '3', '2', 'l', 'e', 0, 0, 195, 'a', 's', 'c', 'i', 'i', 0, 'u', 's', 'a', 's', 'c', 'i', 'i', 0, 'i', 's', 'o', '6', '4', '6', 0, 'i', 's', 'o', '6', '4', '6', 'u', 's', 0, 0, 199, 'u', 't', 'f', '1', '6', 0, 0, 202, 'u', 'c', 's', '4', 0, 'u', 't', 'f', '3', '2', 0, 0, 203, 'u', 'c', 's', '2', 0, 0, 204, 'e', 'u', 'c', 'j', 'p', 0, 0, 208, 's', 'h', 'i', 'f', 't', 'j', 'i', 's', 0, 's', 'j', 'i', 's', 0, 'c', 'p', '9', '3', '2', 0, 0, 209, 'i', 's', 'o', '2', '0', '2', '2', 'j', 'p', 0, 0, 210, 'g', 'b', '1', '8', '0', '3', '0', 0, 0, 216, 'g', 'b', 'k', 0, 'c', 'p', '9', '3', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '9', '3', '6', 0, 0, 217, 'g', 'b', '2', '3', '1', '2', 0, 0, 218, 'b', 'i', 'g', '5', 0, 'b', 'i', 'g', 'f', 'i', 'v', 'e', 0, 'c', 'p', '9', '5', '0', 0, 'b', 'i', 'g', '5', 'h', 'k', 's', 'c', 's', 0, 0, 224, 'e', 'u', 'c', 'k', 'r', 0, 'k', 's', 'c', '5', '6', '0', '1', 0, 'k', 's', 'x', '1', '0', '0', '1', 0, 'c', 'p', '9', '4', '9', 0, 0, 232, 'i', 's', 'o', '8', '8', '5', '9', '1', 0, 'l', 'a', 't', 'i', 'n', '1', 0, 0, '@', 'i', 's', 'o', '8', '8', '5', '9', '2', 0, 0, '(', 160, 16, 244, 'W', 'N', 164, 220, 244, 212, ')', 168, 'T', '5', 'U', 'V', 'n', 181, '"', 23, '\\', 176, 20, 20, 152, 'N', 180, 224, 4, 149, '_', 184, 'X', 'E', 149, 'V', 'o', 13, '6', 'W', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '3', 0, 0, '(', 160, 144, 244, 215, '(', 164, 0, ' ', 210, ')', 168, 176, '4', 21, 'G', '.', 181, 2, 0, '\\', 176, 148, '$', 203, ',', 180, 212, '2', 210, '-', 184, 180, 'D', 'U', 'G', '/', 245, 2, '@', '\\', 192, 4, '#', 12, 0, 196, '(', 132, 208, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 0, 'D', '#', 205, '4', 212, 'x', 'd', 205, '5', 26, 'e', 163, 205, '6', 220, 132, 21, 213, '7', 224, 132, '#', 14, 0, 228, ',', 148, 208, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 0, 196, '#', 207, '<', 244, '|', 'd', 207, '=', 27, 229, 163, 207, '>', 252, 136, '%', 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '4', 0, 0, '(', 160, 16, '$', 211, 'R', 164, 152, 'T', 211, ')', 168, 'T', '%', 17, 'H', '[', 181, '"', 215, '+', 176, 20, 20, 24, 'S', 180, 156, 'd', 147, '_', 184, 'X', '5', 'Q', 'H', '\\', 5, '5', 151, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 12, 'J', 16, 245, '4', 20, 'L', 212, 'T', 'c', 205, '5', 216, 156, 165, 205, '6', 220, 't', 245, 213, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 'N', 'J', 17, 249, 'D', 'T', 'L', 244, 212, 'c', 207, '=', 248, 160, 165, 207, '>', 252, 'x', 5, 22, '`', 'i', 's', 'o', '8', '8', '5', '9', '5', 0, 0, '(', 160, 'D', '\'', 221, 't', 212, 'U', 'g', 221, 'u', 216, 'e', 167, 221, 'v', 220, 181, 210, 157, 'w', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, '&', 127, 8, 'b', 136, '"', 142, 'H', 'b', 137, '&', 158, 136, 'b', 138, '*', 158, 178, '"', 139, 'i', 's', 'o', '8', '8', '5', '9', '6', 0, 0, '(', 160, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'b', 182, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 152, 0, 0, 0, 0, 153, 0, 148, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, 158, '|', 246, 233, '\'', 0, 0, 0, 0, 0, 0, 127, 2, 26, 168, 160, 131, 18, 'Z', 168, 161, 135, '"', 154, 168, 162, 139, '2', 218, 168, 163, 143, 'B', 26, ')', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '7', 0, 0, '(', 160, 'L', 'L', 241, '(', '$', 151, 'l', 202, ')', 168, 164, 146, 216, '*', 172, 180, 2, '@', 196, 176, 196, '"', 203, ',', 138, '-', 198, 216, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'i', 's', 'o', '8', '8', '5', '9', '8', 0, 0, '(', 160, 0, ' ', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 196, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'i', 's', 'o', '8', '8', '5', '9', '9', 0, 0, '4', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '0', 0, 0, '(', 160, 16, '$', 17, 'H', '(', 153, 4, 211, ')', '5', 'A', 'T', 213, 'V', 'r', 181, 242, 'U', 'P', 176, 20, '4', 'Q', 'H', ')', 157, 20, 211, '-', '6', 'E', 'd', 21, 'W', 's', 'E', 12, 150, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 204, '3', 208, 244, '4', 212, '4', 212, 'T', 'c', 'M', 'W', 216, 156, 165, 205, '6', 220, 't', 227, 205, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 206, ';', 240, 248, 'D', 212, '<', 244, 212, 'c', 143, 'W', 248, 160, 165, 207, '>', 252, 244, 227, 143, 'L', 'i', 's', 'o', '8', '8', '5', '9', '1', '1', 0, 't', 'i', 's', '6', '2', '0', 0, 0, '(', 160, 'x', 250, ')', 168, 161, 138, ':', '*', 169, 165, 154, 'z', '*', 170, 169, 170, 186, '*', 171, 173, 186, 250, '*', 172, 177, 202, ':', '+', 173, 181, 218, 'z', '+', 174, 185, 234, 186, '+', 175, 189, 250, 250, '+', 176, 193, 10, ';', ',', 177, 197, 26, '{', ',', 178, 201, '*', 187, ',', 179, 205, ':', 251, ',', 180, 209, 'J', ';', '-', 181, 213, 'Z', '{', '-', 0, 0, 0, 0, 0, 182, 217, 'j', 187, '-', 183, 221, 'z', 251, '-', 184, 225, 138, ';', '.', 185, 229, 154, '{', '.', 186, 233, 170, 187, '.', 187, 237, 186, 251, '.', 188, 241, 202, ';', '/', 189, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '1', '3', 0, 0, '(', 160, '\\', ',', 202, '(', 164, '`', 'l', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 22, 215, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, 197, 'i', 's', 'o', '8', '8', '5', '9', '1', '4', 0, 0, '(', 160, 212, 'k', 239, '(', 10, '-', 't', 239, ')', 3, 167, 'R', '0', 190, 9, 183, 226, 'J', '[', 249, 234, 235, 209, 'G', 251, 242, 'k', 'K', 191, 4, 251, 'k', 240, 191, 10, 31, 140, '0', 192, 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 'i', 'E', '#', 205, '4', 212, 'T', 'c', 'M', 192, 216, 'd', 163, 205, '6', 220, 't', 179, 214, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 'j', 197, '#', 207, '<', 244, 212, 'c', 143, 192, 248, 228, 163, 207, '>', 252, 244, 195, 214, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '5', 0, 'l', 'a', 't', 'i', 'n', '9', 0, 0, ')', '$', 151, 'R', 213, ')', 'V', 165, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 'r', 213, 'b', 203, '-', 's', 229, 162, 203, '.', 'G', '!', 213, 214, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '6', 0, 0, '(', 160, 16, 'T', 'P', 'N', '$', 'c', '\\', 213, ')', 'V', 165, 146, 215, '*', 'n', 181, 242, 22, '\\', 176, 196, 194, 144, 'N', 'r', ']', 'l', 203, '-', 's', '5', 164, 215, '.', 'G', '!', 213, 'V', '\\', 192, 4, '#', 140, '@', 196, 24, 'd', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 16, 237, '$', 205, '4', 212, 20, 'e', 205, 'S', 'e', 'e', 163, 205, '6', 220, 'X', 180, 215, '7', 224, 132, '#', 206, '@', 228, 28, 'd', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 17, 241, '$', 207, '<', 244, 24, 'e', 15, 'T', 'f', 229, 163, 207, '>', 252, '\\', 196, 215, '?', 'c', 'p', '1', '2', '5', '0', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '0', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', '\\', 149, 199, 'O', 'e', '%', 151, '[', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 'l', 213, 199, 'P', 'i', '5', 215, '[', 160, 248, 245, 'W', 'N', 164, 16, 'd', 202, ')', 168, 164, '2', 213, '*', 172, 180, 226, 10, '\\', 176, 196, 18, 152, 'N', 180, 212, 'b', 203, '-', 184, 20, 'D', 213, '.', '7', 13, 134, 'S', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'c', 'p', '1', '2', '5', '1', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '1', 0, 0, ' ', 210, 'M', 'W', 'q', 136, 24, 's', 156, 177, 198, '$', 'w', 156, 157, 199, 218, 'q', 183, 157, 'w', ' ', 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, '|', 226, 199, '(', 170, 152, '"', 139, 160, 't', 183, '"', 'v', 164, 180, 'h', 202, ')', 209, 165, 'B', 221, '*', 172, 180, 226, 202, 'u', 176, 196, 'b', 29, 137, '.', 214, 'b', 203, '-', 31, 154, ',', 226, '.', '&', 'V', '7', 'b', 137, 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 'c', 'p', '1', '2', '5', '2', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '2', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, ' ', 23, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, '0', 'W', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'c', 'p', '1', '2', '5', '3', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '3', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 0, 0, 0, 0, 160, ',', 198, 216, '(', 164, 148, 'b', 202, ')', 168, 164, 2, 192, '*', 172, 180, 226, 'J', 196, 176, 196, '"', 203, ',', 138, 213, 'b', 203, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'c', 'p', '1', '2', '5', '4', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '4', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'c', 'p', '1', '2', '5', '5', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '5', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 0, 0, 0, 0, 0, 160, 132, '"', 202, '(', '"', 151, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 203, '/', '/', 194, 24, 163, 140, '3', 210, 'X', 163, 141, '7', 226, 8, '@', 142, ':', 238, 200, 'c', 143, '>', 254, 8, 'd', 144, ']', 'z', 249, '%', 152, 'a', 2, 0, 0, 0, 0, 0, 0, 0, 0, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'c', 'p', '1', '2', '5', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '6', 0, 0, ' ', '$', 'O', 'Z', '1', ']', 24, 's', 156, 177, 198, '}', 'u', ',', 169, 199, 'G', 'Q', 'z', 'i', 165, 153, 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 152, 158, 'l', 233, 199, 'H', '-', 204, 176, 166, 160, 136, ')', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 178, 233, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, '2', 230, '.', 188, 244, 226, 11, 153, 156, 150, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, '5', '{', 242, 217, 167, 159, 127, 2, 26, 168, 160, 224, 12, '*', 14, 161, 133, 26, 'z', 232, '9', 232, 164, 163, 206, ':', 136, '&', 234, 206, ';', 138, '.', 202, 'h', 163, 244, '8', 250, 232, '=', 144, 230, 19, 233, '>', 252, '4', 236, 'p', 167, 'c', 'p', '1', '2', '5', '7', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '7', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 160, 226, 23, '.', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 188, 18, 24, 0, 160, 0, ' ', 202, '(', 164, 0, '`', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, '`', 'c', 'p', '1', '2', '5', '8', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '8', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 140, '@', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 132, '5', 227, 204, '3', 16, 'E', 's', 216, '4', 212, 212, 'e', 205, '5', 216, 'd', 163, 205, '6', 220, 220, 'e', 216, '7', 224, 132, '#', 206, '@', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 133, 181, 227, 206, ';', 17, 197, 131, 216, '<', 244, 216, 'e', 207, '=', 248, 228, 163, 207, '>', 252, 224, '5', 242, '?', 'k', 'o', 'i', '8', 'r', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, 'A', 11, '=', '4', 209, 'E', 27, '}', '4', 210, 'I', '+', 189, '4', 211, 'M', ';', 253, 't', 't', 'P', 'G', '-', 245, 212, 'T', 'W', 'm', 245, 213, 'X', 'g', 173, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'k', 'o', 'i', '8', 'u', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, '"', 10, 'M', 'b', 137, 'E', 27, '}', '4', 210, 'I', 187, 184, '4', 211, 'M', ';', 253, 't', 't', 212, 'E', 'm', 221, 'u', 'T', 'W', 'm', 245, 213, 'X', 183, 168, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'c', 'p', '4', '3', '7', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 141, '(', 163, 148, 18, '2', ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 192, 204, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 179, '}', 'c', 153, 'p', 165, 21, 'W', 139, 'q', 168, 'm', 182, 154, 'm', '*', '#', 'w', 219, 202, '-', 199, 242, 178, 203, '1', 203, '|', 15, 203, 176, 160, '|', 'K', 202, ' ', 203, '2', '6', '(', 'c', 'p', '8', '5', '0', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 13, '>', 163, '`', 's', 13, ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 184, 194, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', 7, '#', 12, '0', 169, 'D', 253, 's', 209, 'K', 139, 'R', 138, 205, '7', 243, 188, 's', 206, '3', 247, '<', 206, '0', 'H', 11, '}', '5', 213, 'N', 251, 172, '5', ')', 240, '@', 163, 204, '2', 200, 180, 212, 140, '3', 207, 224, '\\', 's', 215, '\\', 155, 194, 204, 214, 211, '|', 'C', 141, '4', 245, 'T', 'S', 139, '?', 222, 'h', 179, 'M', '6', 253, 't', 243, 10, '-', 173, 196, '"', 177, '/', 182, 156, 'r', 15, '.', 176, 160, 'r', 'K', '.', 179, 200, '2', '6', '(', 'c', 'p', '8', '6', '6', 0, 0, ' ', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 209, '}', 'H', 157, 136, 215, 149, 216, 221, 138, 176, 160, '|', 'K', 202, '&', 147, '2', '6', '(', 'i', 'b', 'm', '1', '0', '4', '7', 0, 'c', 'p', '1', '0', '4', '7', 0, 0, 1, 156, '$', '`', 200, 31, 151, '4', 226, 200, 2, 12, '4', 224, 192, 3, 16, 'D', ' ', 193, 4, 157, 20, 130, 192, '!', 24, 'd', ' ', 201, '#', 28, 't', 224, 193, 7, 128, 4, '"', 200, ' ', 132, '(', 'p', 193, 6, 136, '$', 162, 200, '"', 140, 20, '`', 192, 1, 144, 'D', 'b', 193, '$', 148, 'T', 'b', 9, 1, 152, 'd', 162, 201, '&', 20, 'T', 224, 137, 6, ' ', 128, '"', 14, '9', 224, 132, '3', 'N', '9', 231, 196, '#', 138, 11, '<', 160, 176, 2, 31, '&', 164, 163, 206, ':', 232, 180, 227, 206, ';', 236, '|', 19, 2, 9, '*', 164, 176, 131, 23, '-', 188, ' ', 12, '1', 192, 4, '3', 'L', '1', 199, 'D', 'c', 10, 11, '%', '|', 225, 195, 15, 248, '$', 163, 204, '2', 200, '4', 227, 204, '3', 204, 128, 161, 195, 8, '@', 156, 208, 131, 8, 216, 132, '!', 198, 24, 'd', 148, 'a', 198, 25, 'h', 164, 177, 202, '.', 240, 244, 227, 'O', ',', 176, 168, 177, 6, 27, 'm', 184, 241, 6, 28, 'q', 200, 161, 138, '.', 230, 224, 'b', 12, ')', 181, 248, '1', 7, 29, 'u', 216, 'q', 7, 30, 'y', 232, 17, 202, '/', 208, 'l', 225, 141, '+', 172, 140, 'R', 202, '-', 169, 156, 'b', 11, '/', 189, 248, 210, 13, '*', 175, 't', 'A', 203, '5', '{', 4, '!', 196, 16, 'D', 20, 'a', 196, 17, 'H', '$', 209, 10, '=', 246, 200, '3', 'O', '=', '}', '(', 177, 4, 19, 'M', '8', 241, 4, 20, 'Q', 'H', 145, 203, '>', 252, 228, 163, 207, '?', '\\', 220, '3', 5, 21, 'U', 'X', 'q', 5, 22, 'Y', 'h', '!', 11, '5', 214, 'H', '3', 'M', '5', '0', 196, ' ', 195, 12, '4', 212, '`', 195, 13, '8', 228, '0', 203, '6', 220, 'd', 163, 205, '\''} + +// C documentation +// +// /* Table of characters that appear in legacy 8-bit codepages, +// * limited to 1024 slots (10 bit indices). The first 256 entries +// * are elided since those characters are obviously all included. */ +var _legacy_chars = [612]uint16{ + 0: uint16(256), + 1: uint16(257), + 2: uint16(258), + 3: uint16(259), + 4: uint16(260), + 5: uint16(261), + 6: uint16(262), + 7: uint16(263), + 8: uint16(264), + 9: uint16(265), + 10: uint16(266), + 11: uint16(267), + 12: uint16(268), + 13: uint16(269), + 14: uint16(270), + 15: uint16(271), + 16: uint16(272), + 17: uint16(273), + 18: uint16(274), + 19: uint16(275), + 20: uint16(278), + 21: uint16(279), + 22: uint16(280), + 23: uint16(281), + 24: uint16(282), + 25: uint16(283), + 26: uint16(284), + 27: uint16(285), + 28: uint16(286), + 29: uint16(287), + 30: uint16(288), + 31: uint16(289), + 32: uint16(290), + 33: uint16(291), + 34: uint16(292), + 35: uint16(293), + 36: uint16(294), + 37: uint16(295), + 38: uint16(296), + 39: uint16(297), + 40: uint16(298), + 41: uint16(299), + 42: uint16(302), + 43: uint16(303), + 44: uint16(304), + 45: uint16(305), + 46: uint16(308), + 47: uint16(309), + 48: uint16(310), + 49: uint16(311), + 50: uint16(312), + 51: uint16(313), + 52: uint16(314), + 53: uint16(315), + 54: uint16(316), + 55: uint16(317), + 56: uint16(318), + 57: uint16(321), + 58: uint16(322), + 59: uint16(323), + 60: uint16(324), + 61: uint16(325), + 62: uint16(326), + 63: uint16(327), + 64: uint16(328), + 65: uint16(330), + 66: uint16(331), + 67: uint16(332), + 68: uint16(333), + 69: uint16(336), + 70: uint16(337), + 71: uint16(338), + 72: uint16(339), + 73: uint16(340), + 74: uint16(341), + 75: uint16(342), + 76: uint16(343), + 77: uint16(344), + 78: uint16(345), + 79: uint16(346), + 80: uint16(347), + 81: uint16(348), + 82: uint16(349), + 83: uint16(350), + 84: uint16(351), + 85: uint16(352), + 86: uint16(353), + 87: uint16(354), + 88: uint16(355), + 89: uint16(356), + 90: uint16(357), + 91: uint16(358), + 92: uint16(359), + 93: uint16(360), + 94: uint16(361), + 95: uint16(362), + 96: uint16(363), + 97: uint16(364), + 98: uint16(365), + 99: uint16(366), + 100: uint16(367), + 101: uint16(368), + 102: uint16(369), + 103: uint16(370), + 104: uint16(371), + 105: uint16(372), + 106: uint16(373), + 107: uint16(374), + 108: uint16(375), + 109: uint16(376), + 110: uint16(377), + 111: uint16(378), + 112: uint16(379), + 113: uint16(380), + 114: uint16(381), + 115: uint16(382), + 116: uint16(402), + 117: uint16(416), + 118: uint16(417), + 119: uint16(431), + 120: uint16(432), + 121: uint16(536), + 122: uint16(537), + 123: uint16(538), + 124: uint16(539), + 125: uint16(710), + 126: uint16(711), + 127: uint16(728), + 128: uint16(729), + 129: uint16(731), + 130: uint16(732), + 131: uint16(733), + 132: uint16(768), + 133: uint16(769), + 134: uint16(771), + 135: uint16(777), + 136: uint16(803), + 137: uint16(890), + 138: uint16(900), + 139: uint16(901), + 140: uint16(902), + 141: uint16(904), + 142: uint16(905), + 143: uint16(906), + 144: uint16(908), + 145: uint16(910), + 146: uint16(911), + 147: uint16(912), + 148: uint16(913), + 149: uint16(914), + 150: uint16(915), + 151: uint16(916), + 152: uint16(917), + 153: uint16(918), + 154: uint16(919), + 155: uint16(920), + 156: uint16(921), + 157: uint16(922), + 158: uint16(923), + 159: uint16(924), + 160: uint16(925), + 161: uint16(926), + 162: uint16(927), + 163: uint16(928), + 164: uint16(929), + 165: uint16(931), + 166: uint16(932), + 167: uint16(933), + 168: uint16(934), + 169: uint16(935), + 170: uint16(936), + 171: uint16(937), + 172: uint16(938), + 173: uint16(939), + 174: uint16(940), + 175: uint16(941), + 176: uint16(942), + 177: uint16(943), + 178: uint16(944), + 179: uint16(945), + 180: uint16(946), + 181: uint16(947), + 182: uint16(948), + 183: uint16(949), + 184: uint16(950), + 185: uint16(951), + 186: uint16(952), + 187: uint16(953), + 188: uint16(954), + 189: uint16(955), + 190: uint16(956), + 191: uint16(957), + 192: uint16(958), + 193: uint16(959), + 194: uint16(960), + 195: uint16(961), + 196: uint16(962), + 197: uint16(963), + 198: uint16(964), + 199: uint16(965), + 200: uint16(966), + 201: uint16(967), + 202: uint16(968), + 203: uint16(969), + 204: uint16(970), + 205: uint16(971), + 206: uint16(972), + 207: uint16(973), + 208: uint16(974), + 209: uint16(1025), + 210: uint16(1026), + 211: uint16(1027), + 212: uint16(1028), + 213: uint16(1029), + 214: uint16(1030), + 215: uint16(1031), + 216: uint16(1032), + 217: uint16(1033), + 218: uint16(1034), + 219: uint16(1035), + 220: uint16(1036), + 221: uint16(1038), + 222: uint16(1039), + 223: uint16(1040), + 224: uint16(1041), + 225: uint16(1042), + 226: uint16(1043), + 227: uint16(1044), + 228: uint16(1045), + 229: uint16(1046), + 230: uint16(1047), + 231: uint16(1048), + 232: uint16(1049), + 233: uint16(1050), + 234: uint16(1051), + 235: uint16(1052), + 236: uint16(1053), + 237: uint16(1054), + 238: uint16(1055), + 239: uint16(1056), + 240: uint16(1057), + 241: uint16(1058), + 242: uint16(1059), + 243: uint16(1060), + 244: uint16(1061), + 245: uint16(1062), + 246: uint16(1063), + 247: uint16(1064), + 248: uint16(1065), + 249: uint16(1066), + 250: uint16(1067), + 251: uint16(1068), + 252: uint16(1069), + 253: uint16(1070), + 254: uint16(1071), + 255: uint16(1072), + 256: uint16(1073), + 257: uint16(1074), + 258: uint16(1075), + 259: uint16(1076), + 260: uint16(1077), + 261: uint16(1078), + 262: uint16(1079), + 263: uint16(1080), + 264: uint16(1081), + 265: uint16(1082), + 266: uint16(1083), + 267: uint16(1084), + 268: uint16(1085), + 269: uint16(1086), + 270: uint16(1087), + 271: uint16(1088), + 272: uint16(1089), + 273: uint16(1090), + 274: uint16(1091), + 275: uint16(1092), + 276: uint16(1093), + 277: uint16(1094), + 278: uint16(1095), + 279: uint16(1096), + 280: uint16(1097), + 281: uint16(1098), + 282: uint16(1099), + 283: uint16(1100), + 284: uint16(1101), + 285: uint16(1102), + 286: uint16(1103), + 287: uint16(1105), + 288: uint16(1106), + 289: uint16(1107), + 290: uint16(1108), + 291: uint16(1109), + 292: uint16(1110), + 293: uint16(1111), + 294: uint16(1112), + 295: uint16(1113), + 296: uint16(1114), + 297: uint16(1115), + 298: uint16(1116), + 299: uint16(1118), + 300: uint16(1119), + 301: uint16(1168), + 302: uint16(1169), + 303: uint16(1456), + 304: uint16(1457), + 305: uint16(1458), + 306: uint16(1459), + 307: uint16(1460), + 308: uint16(1461), + 309: uint16(1462), + 310: uint16(1463), + 311: uint16(1464), + 312: uint16(1465), + 313: uint16(1467), + 314: uint16(1468), + 315: uint16(1469), + 316: uint16(1470), + 317: uint16(1471), + 318: uint16(1472), + 319: uint16(1473), + 320: uint16(1474), + 321: uint16(1475), + 322: uint16(1488), + 323: uint16(1489), + 324: uint16(1490), + 325: uint16(1491), + 326: uint16(1492), + 327: uint16(1493), + 328: uint16(1494), + 329: uint16(1495), + 330: uint16(1496), + 331: uint16(1497), + 332: uint16(1498), + 333: uint16(1499), + 334: uint16(1500), + 335: uint16(1501), + 336: uint16(1502), + 337: uint16(1503), + 338: uint16(1504), + 339: uint16(1505), + 340: uint16(1506), + 341: uint16(1507), + 342: uint16(1508), + 343: uint16(1509), + 344: uint16(1510), + 345: uint16(1511), + 346: uint16(1512), + 347: uint16(1513), + 348: uint16(1514), + 349: uint16(1520), + 350: uint16(1521), + 351: uint16(1522), + 352: uint16(1523), + 353: uint16(1524), + 354: uint16(1548), + 355: uint16(1563), + 356: uint16(1567), + 357: uint16(1569), + 358: uint16(1570), + 359: uint16(1571), + 360: uint16(1572), + 361: uint16(1573), + 362: uint16(1574), + 363: uint16(1575), + 364: uint16(1576), + 365: uint16(1577), + 366: uint16(1578), + 367: uint16(1579), + 368: uint16(1580), + 369: uint16(1581), + 370: uint16(1582), + 371: uint16(1583), + 372: uint16(1584), + 373: uint16(1585), + 374: uint16(1586), + 375: uint16(1587), + 376: uint16(1588), + 377: uint16(1589), + 378: uint16(1590), + 379: uint16(1591), + 380: uint16(1592), + 381: uint16(1593), + 382: uint16(1594), + 383: uint16(1600), + 384: uint16(1601), + 385: uint16(1602), + 386: uint16(1603), + 387: uint16(1604), + 388: uint16(1605), + 389: uint16(1606), + 390: uint16(1607), + 391: uint16(1608), + 392: uint16(1609), + 393: uint16(1610), + 394: uint16(1611), + 395: uint16(1612), + 396: uint16(1613), + 397: uint16(1614), + 398: uint16(1615), + 399: uint16(1616), + 400: uint16(1617), + 401: uint16(1618), + 402: uint16(1657), + 403: uint16(1662), + 404: uint16(1670), + 405: uint16(1672), + 406: uint16(1681), + 407: uint16(1688), + 408: uint16(1705), + 409: uint16(1711), + 410: uint16(1722), + 411: uint16(1726), + 412: uint16(1729), + 413: uint16(1746), + 414: uint16(3585), + 415: uint16(3586), + 416: uint16(3587), + 417: uint16(3588), + 418: uint16(3589), + 419: uint16(3590), + 420: uint16(3591), + 421: uint16(3592), + 422: uint16(3593), + 423: uint16(3594), + 424: uint16(3595), + 425: uint16(3596), + 426: uint16(3597), + 427: uint16(3598), + 428: uint16(3599), + 429: uint16(3600), + 430: uint16(3601), + 431: uint16(3602), + 432: uint16(3603), + 433: uint16(3604), + 434: uint16(3605), + 435: uint16(3606), + 436: uint16(3607), + 437: uint16(3608), + 438: uint16(3609), + 439: uint16(3610), + 440: uint16(3611), + 441: uint16(3612), + 442: uint16(3613), + 443: uint16(3614), + 444: uint16(3615), + 445: uint16(3616), + 446: uint16(3617), + 447: uint16(3618), + 448: uint16(3619), + 449: uint16(3620), + 450: uint16(3621), + 451: uint16(3622), + 452: uint16(3623), + 453: uint16(3624), + 454: uint16(3625), + 455: uint16(3626), + 456: uint16(3627), + 457: uint16(3628), + 458: uint16(3629), + 459: uint16(3630), + 460: uint16(3631), + 461: uint16(3632), + 462: uint16(3633), + 463: uint16(3634), + 464: uint16(3635), + 465: uint16(3636), + 466: uint16(3637), + 467: uint16(3638), + 468: uint16(3639), + 469: uint16(3640), + 470: uint16(3641), + 471: uint16(3642), + 472: uint16(3647), + 473: uint16(3648), + 474: uint16(3649), + 475: uint16(3650), + 476: uint16(3651), + 477: uint16(3652), + 478: uint16(3653), + 479: uint16(3654), + 480: uint16(3655), + 481: uint16(3656), + 482: uint16(3657), + 483: uint16(3658), + 484: uint16(3659), + 485: uint16(3660), + 486: uint16(3661), + 487: uint16(3662), + 488: uint16(3663), + 489: uint16(3664), + 490: uint16(3665), + 491: uint16(3666), + 492: uint16(3667), + 493: uint16(3668), + 494: uint16(3669), + 495: uint16(3670), + 496: uint16(3671), + 497: uint16(3672), + 498: uint16(3673), + 499: uint16(3674), + 500: uint16(3675), + 501: uint16(7682), + 502: uint16(7683), + 503: uint16(7690), + 504: uint16(7691), + 505: uint16(7710), + 506: uint16(7711), + 507: uint16(7744), + 508: uint16(7745), + 509: uint16(7766), + 510: uint16(7767), + 511: uint16(7776), + 512: uint16(7777), + 513: uint16(7786), + 514: uint16(7787), + 515: uint16(7808), + 516: uint16(7809), + 517: uint16(7810), + 518: uint16(7811), + 519: uint16(7812), + 520: uint16(7813), + 521: uint16(7922), + 522: uint16(7923), + 523: uint16(8204), + 524: uint16(8205), + 525: uint16(8206), + 526: uint16(8207), + 527: uint16(8211), + 528: uint16(8212), + 529: uint16(8213), + 530: uint16(8215), + 531: uint16(8216), + 532: uint16(8217), + 533: uint16(8218), + 534: uint16(8220), + 535: uint16(8221), + 536: uint16(8222), + 537: uint16(8224), + 538: uint16(8225), + 539: uint16(8226), + 540: uint16(8230), + 541: uint16(8240), + 542: uint16(8249), + 543: uint16(8250), + 544: uint16(8319), + 545: uint16(8359), + 546: uint16(8362), + 547: uint16(8363), + 548: uint16(8364), + 549: uint16(8367), + 550: uint16(8470), + 551: uint16(8482), + 552: uint16(8729), + 553: uint16(8730), + 554: uint16(8734), + 555: uint16(8745), + 556: uint16(8776), + 557: uint16(8801), + 558: uint16(8804), + 559: uint16(8805), + 560: uint16(8976), + 561: uint16(8992), + 562: uint16(8993), + 563: uint16(9472), + 564: uint16(9474), + 565: uint16(9484), + 566: uint16(9488), + 567: uint16(9492), + 568: uint16(9496), + 569: uint16(9500), + 570: uint16(9508), + 571: uint16(9516), + 572: uint16(9524), + 573: uint16(9532), + 574: uint16(9552), + 575: uint16(9553), + 576: uint16(9554), + 577: uint16(9555), + 578: uint16(9556), + 579: uint16(9557), + 580: uint16(9558), + 581: uint16(9559), + 582: uint16(9560), + 583: uint16(9561), + 584: uint16(9562), + 585: uint16(9563), + 586: uint16(9564), + 587: uint16(9565), + 588: uint16(9566), + 589: uint16(9567), + 590: uint16(9568), + 591: uint16(9569), + 592: uint16(9570), + 593: uint16(9571), + 594: uint16(9572), + 595: uint16(9573), + 596: uint16(9574), + 597: uint16(9575), + 598: uint16(9576), + 599: uint16(9577), + 600: uint16(9578), + 601: uint16(9579), + 602: uint16(9580), + 603: uint16(9600), + 604: uint16(9604), + 605: uint16(9608), + 606: uint16(9612), + 607: uint16(9616), + 608: uint16(9617), + 609: uint16(9618), + 610: uint16(9619), + 611: uint16(9632), +} + +var _jis0208 = [84][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(65292), + 4: uint16(65294), + 5: uint16(12539), + 6: uint16(65306), + 7: uint16(65307), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(12443), + 11: uint16(12444), + 12: uint16(180), + 13: uint16(65344), + 14: uint16(168), + 15: uint16(65342), + 16: uint16(65507), + 17: uint16(65343), + 18: uint16(12541), + 19: uint16(12542), + 20: uint16(12445), + 21: uint16(12446), + 22: uint16(12291), + 23: uint16(20189), + 24: uint16(12293), + 25: uint16(12294), + 26: uint16(12295), + 27: uint16(12540), + 28: uint16(8213), + 29: uint16(8208), + 30: uint16(65295), + 31: uint16(92), + 32: uint16(12316), + 33: uint16(8214), + 34: uint16(65372), + 35: uint16(8230), + 36: uint16(8229), + 37: uint16(8216), + 38: uint16(8217), + 39: uint16(8220), + 40: uint16(8221), + 41: uint16(65288), + 42: uint16(65289), + 43: uint16(12308), + 44: uint16(12309), + 45: uint16(65339), + 46: uint16(65341), + 47: uint16(65371), + 48: uint16(65373), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(12298), + 52: uint16(12299), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(12302), + 56: uint16(12303), + 57: uint16(12304), + 58: uint16(12305), + 59: uint16(65291), + 60: uint16(8722), + 61: uint16(177), + 62: uint16(215), + 63: uint16(247), + 64: uint16(65309), + 65: uint16(8800), + 66: uint16(65308), + 67: uint16(65310), + 68: uint16(8806), + 69: uint16(8807), + 70: uint16(8734), + 71: uint16(8756), + 72: uint16(9794), + 73: uint16(9792), + 74: uint16(176), + 75: uint16(8242), + 76: uint16(8243), + 77: uint16(8451), + 78: uint16(65509), + 79: uint16(65284), + 80: uint16(162), + 81: uint16(163), + 82: uint16(65285), + 83: uint16(65283), + 84: uint16(65286), + 85: uint16(65290), + 86: uint16(65312), + 87: uint16(167), + 88: uint16(9734), + 89: uint16(9733), + 90: uint16(9675), + 91: uint16(9679), + 92: uint16(9678), + 93: uint16(9671), + }, + 1: { + 0: uint16(9670), + 1: uint16(9633), + 2: uint16(9632), + 3: uint16(9651), + 4: uint16(9650), + 5: uint16(9661), + 6: uint16(9660), + 7: uint16(8251), + 8: uint16(12306), + 9: uint16(8594), + 10: uint16(8592), + 11: uint16(8593), + 12: uint16(8595), + 13: uint16(12307), + 25: uint16(8712), + 26: uint16(8715), + 27: uint16(8838), + 28: uint16(8839), + 29: uint16(8834), + 30: uint16(8835), + 31: uint16(8746), + 32: uint16(8745), + 41: uint16(8743), + 42: uint16(8744), + 43: uint16(172), + 44: uint16(8658), + 45: uint16(8660), + 46: uint16(8704), + 47: uint16(8707), + 59: uint16(8736), + 60: uint16(8869), + 61: uint16(8978), + 62: uint16(8706), + 63: uint16(8711), + 64: uint16(8801), + 65: uint16(8786), + 66: uint16(8810), + 67: uint16(8811), + 68: uint16(8730), + 69: uint16(8765), + 70: uint16(8733), + 71: uint16(8757), + 72: uint16(8747), + 73: uint16(8748), + 81: uint16(8491), + 82: uint16(8240), + 83: uint16(9839), + 84: uint16(9837), + 85: uint16(9834), + 86: uint16(8224), + 87: uint16(8225), + 88: uint16(182), + 93: uint16(9711), + }, + 2: { + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + }, + 3: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 4: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 5: { + 0: uint16(913), + 1: uint16(914), + 2: uint16(915), + 3: uint16(916), + 4: uint16(917), + 5: uint16(918), + 6: uint16(919), + 7: uint16(920), + 8: uint16(921), + 9: uint16(922), + 10: uint16(923), + 11: uint16(924), + 12: uint16(925), + 13: uint16(926), + 14: uint16(927), + 15: uint16(928), + 16: uint16(929), + 17: uint16(931), + 18: uint16(932), + 19: uint16(933), + 20: uint16(934), + 21: uint16(935), + 22: uint16(936), + 23: uint16(937), + 32: uint16(945), + 33: uint16(946), + 34: uint16(947), + 35: uint16(948), + 36: uint16(949), + 37: uint16(950), + 38: uint16(951), + 39: uint16(952), + 40: uint16(953), + 41: uint16(954), + 42: uint16(955), + 43: uint16(956), + 44: uint16(957), + 45: uint16(958), + 46: uint16(959), + 47: uint16(960), + 48: uint16(961), + 49: uint16(963), + 50: uint16(964), + 51: uint16(965), + 52: uint16(966), + 53: uint16(967), + 54: uint16(968), + 55: uint16(969), + }, + 6: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 7: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + }, + 8: {}, + 9: {}, + 10: {}, + 11: {}, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(20124), + 1: uint16(21782), + 2: uint16(23043), + 3: uint16(38463), + 4: uint16(21696), + 5: uint16(24859), + 6: uint16(25384), + 7: uint16(23030), + 8: uint16(36898), + 9: uint16(33909), + 10: uint16(33564), + 11: uint16(31312), + 12: uint16(24746), + 13: uint16(25569), + 14: uint16(28197), + 15: uint16(26093), + 16: uint16(33894), + 17: uint16(33446), + 18: uint16(39925), + 19: uint16(26771), + 20: uint16(22311), + 21: uint16(26017), + 22: uint16(25201), + 23: uint16(23451), + 24: uint16(22992), + 25: uint16(34427), + 26: uint16(39156), + 27: uint16(32098), + 28: uint16(32190), + 29: uint16(39822), + 30: uint16(25110), + 31: uint16(31903), + 32: uint16(34999), + 33: uint16(23433), + 34: uint16(24245), + 35: uint16(25353), + 36: uint16(26263), + 37: uint16(26696), + 38: uint16(38343), + 39: uint16(38797), + 40: uint16(26447), + 41: uint16(20197), + 42: uint16(20234), + 43: uint16(20301), + 44: uint16(20381), + 45: uint16(20553), + 46: uint16(22258), + 47: uint16(22839), + 48: uint16(22996), + 49: uint16(23041), + 50: uint16(23561), + 51: uint16(24799), + 52: uint16(24847), + 53: uint16(24944), + 54: uint16(26131), + 55: uint16(26885), + 56: uint16(28858), + 57: uint16(30031), + 58: uint16(30064), + 59: uint16(31227), + 60: uint16(32173), + 61: uint16(32239), + 62: uint16(32963), + 63: uint16(33806), + 64: uint16(34915), + 65: uint16(35586), + 66: uint16(36949), + 67: uint16(36986), + 68: uint16(21307), + 69: uint16(20117), + 70: uint16(20133), + 71: uint16(22495), + 72: uint16(32946), + 73: uint16(37057), + 74: uint16(30959), + 75: uint16(19968), + 76: uint16(22769), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(31282), + 80: uint16(33576), + 81: uint16(33419), + 82: uint16(39983), + 83: uint16(20801), + 84: uint16(21360), + 85: uint16(21693), + 86: uint16(21729), + 87: uint16(22240), + 88: uint16(23035), + 89: uint16(24341), + 90: uint16(39154), + 91: uint16(28139), + 92: uint16(32996), + 93: uint16(34093), + }, + 16: { + 0: uint16(38498), + 1: uint16(38512), + 2: uint16(38560), + 3: uint16(38907), + 4: uint16(21515), + 5: uint16(21491), + 6: uint16(23431), + 7: uint16(28879), + 8: uint16(32701), + 9: uint16(36802), + 10: uint16(38632), + 11: uint16(21359), + 12: uint16(40284), + 13: uint16(31418), + 14: uint16(19985), + 15: uint16(30867), + 16: uint16(33276), + 17: uint16(28198), + 18: uint16(22040), + 19: uint16(21764), + 20: uint16(27421), + 21: uint16(34074), + 22: uint16(39995), + 23: uint16(23013), + 24: uint16(21417), + 25: uint16(28006), + 26: uint16(29916), + 27: uint16(38287), + 28: uint16(22082), + 29: uint16(20113), + 30: uint16(36939), + 31: uint16(38642), + 32: uint16(33615), + 33: uint16(39180), + 34: uint16(21473), + 35: uint16(21942), + 36: uint16(23344), + 37: uint16(24433), + 38: uint16(26144), + 39: uint16(26355), + 40: uint16(26628), + 41: uint16(27704), + 42: uint16(27891), + 43: uint16(27945), + 44: uint16(29787), + 45: uint16(30408), + 46: uint16(31310), + 47: uint16(38964), + 48: uint16(33521), + 49: uint16(34907), + 50: uint16(35424), + 51: uint16(37613), + 52: uint16(28082), + 53: uint16(30123), + 54: uint16(30410), + 55: uint16(39365), + 56: uint16(24742), + 57: uint16(35585), + 58: uint16(36234), + 59: uint16(38322), + 60: uint16(27022), + 61: uint16(21421), + 62: uint16(20870), + 63: uint16(22290), + 64: uint16(22576), + 65: uint16(22852), + 66: uint16(23476), + 67: uint16(24310), + 68: uint16(24616), + 69: uint16(25513), + 70: uint16(25588), + 71: uint16(27839), + 72: uint16(28436), + 73: uint16(28814), + 74: uint16(28948), + 75: uint16(29017), + 76: uint16(29141), + 77: uint16(29503), + 78: uint16(32257), + 79: uint16(33398), + 80: uint16(33489), + 81: uint16(34199), + 82: uint16(36960), + 83: uint16(37467), + 84: uint16(40219), + 85: uint16(22633), + 86: uint16(26044), + 87: uint16(27738), + 88: uint16(29989), + 89: uint16(20985), + 90: uint16(22830), + 91: uint16(22885), + 92: uint16(24448), + 93: uint16(24540), + }, + 17: { + 0: uint16(25276), + 1: uint16(26106), + 2: uint16(27178), + 3: uint16(27431), + 4: uint16(27572), + 5: uint16(29579), + 6: uint16(32705), + 7: uint16(35158), + 8: uint16(40236), + 9: uint16(40206), + 10: uint16(40644), + 11: uint16(23713), + 12: uint16(27798), + 13: uint16(33659), + 14: uint16(20740), + 15: uint16(23627), + 16: uint16(25014), + 17: uint16(33222), + 18: uint16(26742), + 19: uint16(29281), + 20: uint16(20057), + 21: uint16(20474), + 22: uint16(21368), + 23: uint16(24681), + 24: uint16(28201), + 25: uint16(31311), + 26: uint16(38899), + 27: uint16(19979), + 28: uint16(21270), + 29: uint16(20206), + 30: uint16(20309), + 31: uint16(20285), + 32: uint16(20385), + 33: uint16(20339), + 34: uint16(21152), + 35: uint16(21487), + 36: uint16(22025), + 37: uint16(22799), + 38: uint16(23233), + 39: uint16(23478), + 40: uint16(23521), + 41: uint16(31185), + 42: uint16(26247), + 43: uint16(26524), + 44: uint16(26550), + 45: uint16(27468), + 46: uint16(27827), + 47: uint16(28779), + 48: uint16(29634), + 49: uint16(31117), + 50: uint16(31166), + 51: uint16(31292), + 52: uint16(31623), + 53: uint16(33457), + 54: uint16(33499), + 55: uint16(33540), + 56: uint16(33655), + 57: uint16(33775), + 58: uint16(33747), + 59: uint16(34662), + 60: uint16(35506), + 61: uint16(22057), + 62: uint16(36008), + 63: uint16(36838), + 64: uint16(36942), + 65: uint16(38686), + 66: uint16(34442), + 67: uint16(20420), + 68: uint16(23784), + 69: uint16(25105), + 70: uint16(29273), + 71: uint16(30011), + 72: uint16(33253), + 73: uint16(33469), + 74: uint16(34558), + 75: uint16(36032), + 76: uint16(38597), + 77: uint16(39187), + 78: uint16(39381), + 79: uint16(20171), + 80: uint16(20250), + 81: uint16(35299), + 82: uint16(22238), + 83: uint16(22602), + 84: uint16(22730), + 85: uint16(24315), + 86: uint16(24555), + 87: uint16(24618), + 88: uint16(24724), + 89: uint16(24674), + 90: uint16(25040), + 91: uint16(25106), + 92: uint16(25296), + 93: uint16(25913), + }, + 18: { + 0: uint16(39745), + 1: uint16(26214), + 2: uint16(26800), + 3: uint16(28023), + 4: uint16(28784), + 5: uint16(30028), + 6: uint16(30342), + 7: uint16(32117), + 8: uint16(33445), + 9: uint16(34809), + 10: uint16(38283), + 11: uint16(38542), + 12: uint16(35997), + 13: uint16(20977), + 14: uint16(21182), + 15: uint16(22806), + 16: uint16(21683), + 17: uint16(23475), + 18: uint16(23830), + 19: uint16(24936), + 20: uint16(27010), + 21: uint16(28079), + 22: uint16(30861), + 23: uint16(33995), + 24: uint16(34903), + 25: uint16(35442), + 26: uint16(37799), + 27: uint16(39608), + 28: uint16(28012), + 29: uint16(39336), + 30: uint16(34521), + 31: uint16(22435), + 32: uint16(26623), + 33: uint16(34510), + 34: uint16(37390), + 35: uint16(21123), + 36: uint16(22151), + 37: uint16(21508), + 38: uint16(24275), + 39: uint16(25313), + 40: uint16(25785), + 41: uint16(26684), + 42: uint16(26680), + 43: uint16(27579), + 44: uint16(29554), + 45: uint16(30906), + 46: uint16(31339), + 47: uint16(35226), + 48: uint16(35282), + 49: uint16(36203), + 50: uint16(36611), + 51: uint16(37101), + 52: uint16(38307), + 53: uint16(38548), + 54: uint16(38761), + 55: uint16(23398), + 56: uint16(23731), + 57: uint16(27005), + 58: uint16(38989), + 59: uint16(38990), + 60: uint16(25499), + 61: uint16(31520), + 62: uint16(27179), + 63: uint16(27263), + 64: uint16(26806), + 65: uint16(39949), + 66: uint16(28511), + 67: uint16(21106), + 68: uint16(21917), + 69: uint16(24688), + 70: uint16(25324), + 71: uint16(27963), + 72: uint16(28167), + 73: uint16(28369), + 74: uint16(33883), + 75: uint16(35088), + 76: uint16(36676), + 77: uint16(19988), + 78: uint16(39993), + 79: uint16(21494), + 80: uint16(26907), + 81: uint16(27194), + 82: uint16(38788), + 83: uint16(26666), + 84: uint16(20828), + 85: uint16(31427), + 86: uint16(33970), + 87: uint16(37340), + 88: uint16(37772), + 89: uint16(22107), + 90: uint16(40232), + 91: uint16(26658), + 92: uint16(33541), + 93: uint16(33841), + }, + 19: { + 0: uint16(31909), + 1: uint16(21000), + 2: uint16(33477), + 3: uint16(29926), + 4: uint16(20094), + 5: uint16(20355), + 6: uint16(20896), + 7: uint16(23506), + 8: uint16(21002), + 9: uint16(21208), + 10: uint16(21223), + 11: uint16(24059), + 12: uint16(21914), + 13: uint16(22570), + 14: uint16(23014), + 15: uint16(23436), + 16: uint16(23448), + 17: uint16(23515), + 18: uint16(24178), + 19: uint16(24185), + 20: uint16(24739), + 21: uint16(24863), + 22: uint16(24931), + 23: uint16(25022), + 24: uint16(25563), + 25: uint16(25954), + 26: uint16(26577), + 27: uint16(26707), + 28: uint16(26874), + 29: uint16(27454), + 30: uint16(27475), + 31: uint16(27735), + 32: uint16(28450), + 33: uint16(28567), + 34: uint16(28485), + 35: uint16(29872), + 36: uint16(29976), + 37: uint16(30435), + 38: uint16(30475), + 39: uint16(31487), + 40: uint16(31649), + 41: uint16(31777), + 42: uint16(32233), + 43: uint16(32566), + 44: uint16(32752), + 45: uint16(32925), + 46: uint16(33382), + 47: uint16(33694), + 48: uint16(35251), + 49: uint16(35532), + 50: uint16(36011), + 51: uint16(36996), + 52: uint16(37969), + 53: uint16(38291), + 54: uint16(38289), + 55: uint16(38306), + 56: uint16(38501), + 57: uint16(38867), + 58: uint16(39208), + 59: uint16(33304), + 60: uint16(20024), + 61: uint16(21547), + 62: uint16(23736), + 63: uint16(24012), + 64: uint16(29609), + 65: uint16(30284), + 66: uint16(30524), + 67: uint16(23721), + 68: uint16(32747), + 69: uint16(36107), + 70: uint16(38593), + 71: uint16(38929), + 72: uint16(38996), + 73: uint16(39000), + 74: uint16(20225), + 75: uint16(20238), + 76: uint16(21361), + 77: uint16(21916), + 78: uint16(22120), + 79: uint16(22522), + 80: uint16(22855), + 81: uint16(23305), + 82: uint16(23492), + 83: uint16(23696), + 84: uint16(24076), + 85: uint16(24190), + 86: uint16(24524), + 87: uint16(25582), + 88: uint16(26426), + 89: uint16(26071), + 90: uint16(26082), + 91: uint16(26399), + 92: uint16(26827), + 93: uint16(26820), + }, + 20: { + 0: uint16(27231), + 1: uint16(24112), + 2: uint16(27589), + 3: uint16(27671), + 4: uint16(27773), + 5: uint16(30079), + 6: uint16(31048), + 7: uint16(23395), + 8: uint16(31232), + 9: uint16(32000), + 10: uint16(24509), + 11: uint16(35215), + 12: uint16(35352), + 13: uint16(36020), + 14: uint16(36215), + 15: uint16(36556), + 16: uint16(36637), + 17: uint16(39138), + 18: uint16(39438), + 19: uint16(39740), + 20: uint16(20096), + 21: uint16(20605), + 22: uint16(20736), + 23: uint16(22931), + 24: uint16(23452), + 25: uint16(25135), + 26: uint16(25216), + 27: uint16(25836), + 28: uint16(27450), + 29: uint16(29344), + 30: uint16(30097), + 31: uint16(31047), + 32: uint16(32681), + 33: uint16(34811), + 34: uint16(35516), + 35: uint16(35696), + 36: uint16(25516), + 37: uint16(33738), + 38: uint16(38816), + 39: uint16(21513), + 40: uint16(21507), + 41: uint16(21931), + 42: uint16(26708), + 43: uint16(27224), + 44: uint16(35440), + 45: uint16(30759), + 46: uint16(26485), + 47: uint16(40653), + 48: uint16(21364), + 49: uint16(23458), + 50: uint16(33050), + 51: uint16(34384), + 52: uint16(36870), + 53: uint16(19992), + 54: uint16(20037), + 55: uint16(20167), + 56: uint16(20241), + 57: uint16(21450), + 58: uint16(21560), + 59: uint16(23470), + 60: uint16(24339), + 61: uint16(24613), + 62: uint16(25937), + 63: uint16(26429), + 64: uint16(27714), + 65: uint16(27762), + 66: uint16(27875), + 67: uint16(28792), + 68: uint16(29699), + 69: uint16(31350), + 70: uint16(31406), + 71: uint16(31496), + 72: uint16(32026), + 73: uint16(31998), + 74: uint16(32102), + 75: uint16(26087), + 76: uint16(29275), + 77: uint16(21435), + 78: uint16(23621), + 79: uint16(24040), + 80: uint16(25298), + 81: uint16(25312), + 82: uint16(25369), + 83: uint16(28192), + 84: uint16(34394), + 85: uint16(35377), + 86: uint16(36317), + 87: uint16(37624), + 88: uint16(28417), + 89: uint16(31142), + 90: uint16(39770), + 91: uint16(20136), + 92: uint16(20139), + 93: uint16(20140), + }, + 21: { + 0: uint16(20379), + 1: uint16(20384), + 2: uint16(20689), + 3: uint16(20807), + 4: uint16(31478), + 5: uint16(20849), + 6: uint16(20982), + 7: uint16(21332), + 8: uint16(21281), + 9: uint16(21375), + 10: uint16(21483), + 11: uint16(21932), + 12: uint16(22659), + 13: uint16(23777), + 14: uint16(24375), + 15: uint16(24394), + 16: uint16(24623), + 17: uint16(24656), + 18: uint16(24685), + 19: uint16(25375), + 20: uint16(25945), + 21: uint16(27211), + 22: uint16(27841), + 23: uint16(29378), + 24: uint16(29421), + 25: uint16(30703), + 26: uint16(33016), + 27: uint16(33029), + 28: uint16(33288), + 29: uint16(34126), + 30: uint16(37111), + 31: uint16(37857), + 32: uint16(38911), + 33: uint16(39255), + 34: uint16(39514), + 35: uint16(20208), + 36: uint16(20957), + 37: uint16(23597), + 38: uint16(26241), + 39: uint16(26989), + 40: uint16(23616), + 41: uint16(26354), + 42: uint16(26997), + 43: uint16(29577), + 44: uint16(26704), + 45: uint16(31873), + 46: uint16(20677), + 47: uint16(21220), + 48: uint16(22343), + 49: uint16(24062), + 50: uint16(37670), + 51: uint16(26020), + 52: uint16(27427), + 53: uint16(27453), + 54: uint16(29748), + 55: uint16(31105), + 56: uint16(31165), + 57: uint16(31563), + 58: uint16(32202), + 59: uint16(33465), + 60: uint16(33740), + 61: uint16(34943), + 62: uint16(35167), + 63: uint16(35641), + 64: uint16(36817), + 65: uint16(37329), + 66: uint16(21535), + 67: uint16(37504), + 68: uint16(20061), + 69: uint16(20534), + 70: uint16(21477), + 71: uint16(21306), + 72: uint16(29399), + 73: uint16(29590), + 74: uint16(30697), + 75: uint16(33510), + 76: uint16(36527), + 77: uint16(39366), + 78: uint16(39368), + 79: uint16(39378), + 80: uint16(20855), + 81: uint16(24858), + 82: uint16(34398), + 83: uint16(21936), + 84: uint16(31354), + 85: uint16(20598), + 86: uint16(23507), + 87: uint16(36935), + 88: uint16(38533), + 89: uint16(20018), + 90: uint16(27355), + 91: uint16(37351), + 92: uint16(23633), + 93: uint16(23624), + }, + 22: { + 0: uint16(25496), + 1: uint16(31391), + 2: uint16(27795), + 3: uint16(38772), + 4: uint16(36705), + 5: uint16(31402), + 6: uint16(29066), + 7: uint16(38536), + 8: uint16(31874), + 9: uint16(26647), + 10: uint16(32368), + 11: uint16(26705), + 12: uint16(37740), + 13: uint16(21234), + 14: uint16(21531), + 15: uint16(34219), + 16: uint16(35347), + 17: uint16(32676), + 18: uint16(36557), + 19: uint16(37089), + 20: uint16(21350), + 21: uint16(34952), + 22: uint16(31041), + 23: uint16(20418), + 24: uint16(20670), + 25: uint16(21009), + 26: uint16(20804), + 27: uint16(21843), + 28: uint16(22317), + 29: uint16(29674), + 30: uint16(22411), + 31: uint16(22865), + 32: uint16(24418), + 33: uint16(24452), + 34: uint16(24693), + 35: uint16(24950), + 36: uint16(24935), + 37: uint16(25001), + 38: uint16(25522), + 39: uint16(25658), + 40: uint16(25964), + 41: uint16(26223), + 42: uint16(26690), + 43: uint16(28179), + 44: uint16(30054), + 45: uint16(31293), + 46: uint16(31995), + 47: uint16(32076), + 48: uint16(32153), + 49: uint16(32331), + 50: uint16(32619), + 51: uint16(33550), + 52: uint16(33610), + 53: uint16(34509), + 54: uint16(35336), + 55: uint16(35427), + 56: uint16(35686), + 57: uint16(36605), + 58: uint16(38938), + 59: uint16(40335), + 60: uint16(33464), + 61: uint16(36814), + 62: uint16(39912), + 63: uint16(21127), + 64: uint16(25119), + 65: uint16(25731), + 66: uint16(28608), + 67: uint16(38553), + 68: uint16(26689), + 69: uint16(20625), + 70: uint16(27424), + 71: uint16(27770), + 72: uint16(28500), + 73: uint16(31348), + 74: uint16(32080), + 75: uint16(34880), + 76: uint16(35363), + 77: uint16(26376), + 78: uint16(20214), + 79: uint16(20537), + 80: uint16(20518), + 81: uint16(20581), + 82: uint16(20860), + 83: uint16(21048), + 84: uint16(21091), + 85: uint16(21927), + 86: uint16(22287), + 87: uint16(22533), + 88: uint16(23244), + 89: uint16(24314), + 90: uint16(25010), + 91: uint16(25080), + 92: uint16(25331), + 93: uint16(25458), + }, + 23: { + 0: uint16(26908), + 1: uint16(27177), + 2: uint16(29309), + 3: uint16(29356), + 4: uint16(29486), + 5: uint16(30740), + 6: uint16(30831), + 7: uint16(32121), + 8: uint16(30476), + 9: uint16(32937), + 10: uint16(35211), + 11: uint16(35609), + 12: uint16(36066), + 13: uint16(36562), + 14: uint16(36963), + 15: uint16(37749), + 16: uint16(38522), + 17: uint16(38997), + 18: uint16(39443), + 19: uint16(40568), + 20: uint16(20803), + 21: uint16(21407), + 22: uint16(21427), + 23: uint16(24187), + 24: uint16(24358), + 25: uint16(28187), + 26: uint16(28304), + 27: uint16(29572), + 28: uint16(29694), + 29: uint16(32067), + 30: uint16(33335), + 31: uint16(35328), + 32: uint16(35578), + 33: uint16(38480), + 34: uint16(20046), + 35: uint16(20491), + 36: uint16(21476), + 37: uint16(21628), + 38: uint16(22266), + 39: uint16(22993), + 40: uint16(23396), + 41: uint16(24049), + 42: uint16(24235), + 43: uint16(24359), + 44: uint16(25144), + 45: uint16(25925), + 46: uint16(26543), + 47: uint16(28246), + 48: uint16(29392), + 49: uint16(31946), + 50: uint16(34996), + 51: uint16(32929), + 52: uint16(32993), + 53: uint16(33776), + 54: uint16(34382), + 55: uint16(35463), + 56: uint16(36328), + 57: uint16(37431), + 58: uint16(38599), + 59: uint16(39015), + 60: uint16(40723), + 61: uint16(20116), + 62: uint16(20114), + 63: uint16(20237), + 64: uint16(21320), + 65: uint16(21577), + 66: uint16(21566), + 67: uint16(23087), + 68: uint16(24460), + 69: uint16(24481), + 70: uint16(24735), + 71: uint16(26791), + 72: uint16(27278), + 73: uint16(29786), + 74: uint16(30849), + 75: uint16(35486), + 76: uint16(35492), + 77: uint16(35703), + 78: uint16(37264), + 79: uint16(20062), + 80: uint16(39881), + 81: uint16(20132), + 82: uint16(20348), + 83: uint16(20399), + 84: uint16(20505), + 85: uint16(20502), + 86: uint16(20809), + 87: uint16(20844), + 88: uint16(21151), + 89: uint16(21177), + 90: uint16(21246), + 91: uint16(21402), + 92: uint16(21475), + 93: uint16(21521), + }, + 24: { + 0: uint16(21518), + 1: uint16(21897), + 2: uint16(22353), + 3: uint16(22434), + 4: uint16(22909), + 5: uint16(23380), + 6: uint16(23389), + 7: uint16(23439), + 8: uint16(24037), + 9: uint16(24039), + 10: uint16(24055), + 11: uint16(24184), + 12: uint16(24195), + 13: uint16(24218), + 14: uint16(24247), + 15: uint16(24344), + 16: uint16(24658), + 17: uint16(24908), + 18: uint16(25239), + 19: uint16(25304), + 20: uint16(25511), + 21: uint16(25915), + 22: uint16(26114), + 23: uint16(26179), + 24: uint16(26356), + 25: uint16(26477), + 26: uint16(26657), + 27: uint16(26775), + 28: uint16(27083), + 29: uint16(27743), + 30: uint16(27946), + 31: uint16(28009), + 32: uint16(28207), + 33: uint16(28317), + 34: uint16(30002), + 35: uint16(30343), + 36: uint16(30828), + 37: uint16(31295), + 38: uint16(31968), + 39: uint16(32005), + 40: uint16(32024), + 41: uint16(32094), + 42: uint16(32177), + 43: uint16(32789), + 44: uint16(32771), + 45: uint16(32943), + 46: uint16(32945), + 47: uint16(33108), + 48: uint16(33167), + 49: uint16(33322), + 50: uint16(33618), + 51: uint16(34892), + 52: uint16(34913), + 53: uint16(35611), + 54: uint16(36002), + 55: uint16(36092), + 56: uint16(37066), + 57: uint16(37237), + 58: uint16(37489), + 59: uint16(30783), + 60: uint16(37628), + 61: uint16(38308), + 62: uint16(38477), + 63: uint16(38917), + 64: uint16(39321), + 65: uint16(39640), + 66: uint16(40251), + 67: uint16(21083), + 68: uint16(21163), + 69: uint16(21495), + 70: uint16(21512), + 71: uint16(22741), + 72: uint16(25335), + 73: uint16(28640), + 74: uint16(35946), + 75: uint16(36703), + 76: uint16(40633), + 77: uint16(20811), + 78: uint16(21051), + 79: uint16(21578), + 80: uint16(22269), + 81: uint16(31296), + 82: uint16(37239), + 83: uint16(40288), + 84: uint16(40658), + 85: uint16(29508), + 86: uint16(28425), + 87: uint16(33136), + 88: uint16(29969), + 89: uint16(24573), + 90: uint16(24794), + 91: uint16(39592), + 92: uint16(29403), + 93: uint16(36796), + }, + 25: { + 0: uint16(27492), + 1: uint16(38915), + 2: uint16(20170), + 3: uint16(22256), + 4: uint16(22372), + 5: uint16(22718), + 6: uint16(23130), + 7: uint16(24680), + 8: uint16(25031), + 9: uint16(26127), + 10: uint16(26118), + 11: uint16(26681), + 12: uint16(26801), + 13: uint16(28151), + 14: uint16(30165), + 15: uint16(32058), + 16: uint16(33390), + 17: uint16(39746), + 18: uint16(20123), + 19: uint16(20304), + 20: uint16(21449), + 21: uint16(21766), + 22: uint16(23919), + 23: uint16(24038), + 24: uint16(24046), + 25: uint16(26619), + 26: uint16(27801), + 27: uint16(29811), + 28: uint16(30722), + 29: uint16(35408), + 30: uint16(37782), + 31: uint16(35039), + 32: uint16(22352), + 33: uint16(24231), + 34: uint16(25387), + 35: uint16(20661), + 36: uint16(20652), + 37: uint16(20877), + 38: uint16(26368), + 39: uint16(21705), + 40: uint16(22622), + 41: uint16(22971), + 42: uint16(23472), + 43: uint16(24425), + 44: uint16(25165), + 45: uint16(25505), + 46: uint16(26685), + 47: uint16(27507), + 48: uint16(28168), + 49: uint16(28797), + 50: uint16(37319), + 51: uint16(29312), + 52: uint16(30741), + 53: uint16(30758), + 54: uint16(31085), + 55: uint16(25998), + 56: uint16(32048), + 57: uint16(33756), + 58: uint16(35009), + 59: uint16(36617), + 60: uint16(38555), + 61: uint16(21092), + 62: uint16(22312), + 63: uint16(26448), + 64: uint16(32618), + 65: uint16(36001), + 66: uint16(20916), + 67: uint16(22338), + 68: uint16(38442), + 69: uint16(22586), + 70: uint16(27018), + 71: uint16(32948), + 72: uint16(21682), + 73: uint16(23822), + 74: uint16(22524), + 75: uint16(30869), + 76: uint16(40442), + 77: uint16(20316), + 78: uint16(21066), + 79: uint16(21643), + 80: uint16(25662), + 81: uint16(26152), + 82: uint16(26388), + 83: uint16(26613), + 84: uint16(31364), + 85: uint16(31574), + 86: uint16(32034), + 87: uint16(37679), + 88: uint16(26716), + 89: uint16(39853), + 90: uint16(31545), + 91: uint16(21273), + 92: uint16(20874), + 93: uint16(21047), + }, + 26: { + 0: uint16(23519), + 1: uint16(25334), + 2: uint16(25774), + 3: uint16(25830), + 4: uint16(26413), + 5: uint16(27578), + 6: uint16(34217), + 7: uint16(38609), + 8: uint16(30352), + 9: uint16(39894), + 10: uint16(25420), + 11: uint16(37638), + 12: uint16(39851), + 13: uint16(30399), + 14: uint16(26194), + 15: uint16(19977), + 16: uint16(20632), + 17: uint16(21442), + 18: uint16(23665), + 19: uint16(24808), + 20: uint16(25746), + 21: uint16(25955), + 22: uint16(26719), + 23: uint16(29158), + 24: uint16(29642), + 25: uint16(29987), + 26: uint16(31639), + 27: uint16(32386), + 28: uint16(34453), + 29: uint16(35715), + 30: uint16(36059), + 31: uint16(37240), + 32: uint16(39184), + 33: uint16(26028), + 34: uint16(26283), + 35: uint16(27531), + 36: uint16(20181), + 37: uint16(20180), + 38: uint16(20282), + 39: uint16(20351), + 40: uint16(21050), + 41: uint16(21496), + 42: uint16(21490), + 43: uint16(21987), + 44: uint16(22235), + 45: uint16(22763), + 46: uint16(22987), + 47: uint16(22985), + 48: uint16(23039), + 49: uint16(23376), + 50: uint16(23629), + 51: uint16(24066), + 52: uint16(24107), + 53: uint16(24535), + 54: uint16(24605), + 55: uint16(25351), + 56: uint16(25903), + 57: uint16(23388), + 58: uint16(26031), + 59: uint16(26045), + 60: uint16(26088), + 61: uint16(26525), + 62: uint16(27490), + 63: uint16(27515), + 64: uint16(27663), + 65: uint16(29509), + 66: uint16(31049), + 67: uint16(31169), + 68: uint16(31992), + 69: uint16(32025), + 70: uint16(32043), + 71: uint16(32930), + 72: uint16(33026), + 73: uint16(33267), + 74: uint16(35222), + 75: uint16(35422), + 76: uint16(35433), + 77: uint16(35430), + 78: uint16(35468), + 79: uint16(35566), + 80: uint16(36039), + 81: uint16(36060), + 82: uint16(38604), + 83: uint16(39164), + 84: uint16(27503), + 85: uint16(20107), + 86: uint16(20284), + 87: uint16(20365), + 88: uint16(20816), + 89: uint16(23383), + 90: uint16(23546), + 91: uint16(24904), + 92: uint16(25345), + 93: uint16(26178), + }, + 27: { + 0: uint16(27425), + 1: uint16(28363), + 2: uint16(27835), + 3: uint16(29246), + 4: uint16(29885), + 5: uint16(30164), + 6: uint16(30913), + 7: uint16(31034), + 8: uint16(32780), + 9: uint16(32819), + 10: uint16(33258), + 11: uint16(33940), + 12: uint16(36766), + 13: uint16(27728), + 14: uint16(40575), + 15: uint16(24335), + 16: uint16(35672), + 17: uint16(40235), + 18: uint16(31482), + 19: uint16(36600), + 20: uint16(23437), + 21: uint16(38635), + 22: uint16(19971), + 23: uint16(21489), + 24: uint16(22519), + 25: uint16(22833), + 26: uint16(23241), + 27: uint16(23460), + 28: uint16(24713), + 29: uint16(28287), + 30: uint16(28422), + 31: uint16(30142), + 32: uint16(36074), + 33: uint16(23455), + 34: uint16(34048), + 35: uint16(31712), + 36: uint16(20594), + 37: uint16(26612), + 38: uint16(33437), + 39: uint16(23649), + 40: uint16(34122), + 41: uint16(32286), + 42: uint16(33294), + 43: uint16(20889), + 44: uint16(23556), + 45: uint16(25448), + 46: uint16(36198), + 47: uint16(26012), + 48: uint16(29038), + 49: uint16(31038), + 50: uint16(32023), + 51: uint16(32773), + 52: uint16(35613), + 53: uint16(36554), + 54: uint16(36974), + 55: uint16(34503), + 56: uint16(37034), + 57: uint16(20511), + 58: uint16(21242), + 59: uint16(23610), + 60: uint16(26451), + 61: uint16(28796), + 62: uint16(29237), + 63: uint16(37196), + 64: uint16(37320), + 65: uint16(37675), + 66: uint16(33509), + 67: uint16(23490), + 68: uint16(24369), + 69: uint16(24825), + 70: uint16(20027), + 71: uint16(21462), + 72: uint16(23432), + 73: uint16(25163), + 74: uint16(26417), + 75: uint16(27530), + 76: uint16(29417), + 77: uint16(29664), + 78: uint16(31278), + 79: uint16(33131), + 80: uint16(36259), + 81: uint16(37202), + 82: uint16(39318), + 83: uint16(20754), + 84: uint16(21463), + 85: uint16(21610), + 86: uint16(23551), + 87: uint16(25480), + 88: uint16(27193), + 89: uint16(32172), + 90: uint16(38656), + 91: uint16(22234), + 92: uint16(21454), + 93: uint16(21608), + }, + 28: { + 0: uint16(23447), + 1: uint16(23601), + 2: uint16(24030), + 3: uint16(20462), + 4: uint16(24833), + 5: uint16(25342), + 6: uint16(27954), + 7: uint16(31168), + 8: uint16(31179), + 9: uint16(32066), + 10: uint16(32333), + 11: uint16(32722), + 12: uint16(33261), + 13: uint16(33311), + 14: uint16(33936), + 15: uint16(34886), + 16: uint16(35186), + 17: uint16(35728), + 18: uint16(36468), + 19: uint16(36655), + 20: uint16(36913), + 21: uint16(37195), + 22: uint16(37228), + 23: uint16(38598), + 24: uint16(37276), + 25: uint16(20160), + 26: uint16(20303), + 27: uint16(20805), + 28: uint16(21313), + 29: uint16(24467), + 30: uint16(25102), + 31: uint16(26580), + 32: uint16(27713), + 33: uint16(28171), + 34: uint16(29539), + 35: uint16(32294), + 36: uint16(37325), + 37: uint16(37507), + 38: uint16(21460), + 39: uint16(22809), + 40: uint16(23487), + 41: uint16(28113), + 42: uint16(31069), + 43: uint16(32302), + 44: uint16(31899), + 45: uint16(22654), + 46: uint16(29087), + 47: uint16(20986), + 48: uint16(34899), + 49: uint16(36848), + 50: uint16(20426), + 51: uint16(23803), + 52: uint16(26149), + 53: uint16(30636), + 54: uint16(31459), + 55: uint16(33308), + 56: uint16(39423), + 57: uint16(20934), + 58: uint16(24490), + 59: uint16(26092), + 60: uint16(26991), + 61: uint16(27529), + 62: uint16(28147), + 63: uint16(28310), + 64: uint16(28516), + 65: uint16(30462), + 66: uint16(32020), + 67: uint16(24033), + 68: uint16(36981), + 69: uint16(37255), + 70: uint16(38918), + 71: uint16(20966), + 72: uint16(21021), + 73: uint16(25152), + 74: uint16(26257), + 75: uint16(26329), + 76: uint16(28186), + 77: uint16(24246), + 78: uint16(32210), + 79: uint16(32626), + 80: uint16(26360), + 81: uint16(34223), + 82: uint16(34295), + 83: uint16(35576), + 84: uint16(21161), + 85: uint16(21465), + 86: uint16(22899), + 87: uint16(24207), + 88: uint16(24464), + 89: uint16(24661), + 90: uint16(37604), + 91: uint16(38500), + 92: uint16(20663), + 93: uint16(20767), + }, + 29: { + 0: uint16(21213), + 1: uint16(21280), + 2: uint16(21319), + 3: uint16(21484), + 4: uint16(21736), + 5: uint16(21830), + 6: uint16(21809), + 7: uint16(22039), + 8: uint16(22888), + 9: uint16(22974), + 10: uint16(23100), + 11: uint16(23477), + 12: uint16(23558), + 13: uint16(23567), + 14: uint16(23569), + 15: uint16(23578), + 16: uint16(24196), + 17: uint16(24202), + 18: uint16(24288), + 19: uint16(24432), + 20: uint16(25215), + 21: uint16(25220), + 22: uint16(25307), + 23: uint16(25484), + 24: uint16(25463), + 25: uint16(26119), + 26: uint16(26124), + 27: uint16(26157), + 28: uint16(26230), + 29: uint16(26494), + 30: uint16(26786), + 31: uint16(27167), + 32: uint16(27189), + 33: uint16(27836), + 34: uint16(28040), + 35: uint16(28169), + 36: uint16(28248), + 37: uint16(28988), + 38: uint16(28966), + 39: uint16(29031), + 40: uint16(30151), + 41: uint16(30465), + 42: uint16(30813), + 43: uint16(30977), + 44: uint16(31077), + 45: uint16(31216), + 46: uint16(31456), + 47: uint16(31505), + 48: uint16(31911), + 49: uint16(32057), + 50: uint16(32918), + 51: uint16(33750), + 52: uint16(33931), + 53: uint16(34121), + 54: uint16(34909), + 55: uint16(35059), + 56: uint16(35359), + 57: uint16(35388), + 58: uint16(35412), + 59: uint16(35443), + 60: uint16(35937), + 61: uint16(36062), + 62: uint16(37284), + 63: uint16(37478), + 64: uint16(37758), + 65: uint16(37912), + 66: uint16(38556), + 67: uint16(38808), + 68: uint16(19978), + 69: uint16(19976), + 70: uint16(19998), + 71: uint16(20055), + 72: uint16(20887), + 73: uint16(21104), + 74: uint16(22478), + 75: uint16(22580), + 76: uint16(22732), + 77: uint16(23330), + 78: uint16(24120), + 79: uint16(24773), + 80: uint16(25854), + 81: uint16(26465), + 82: uint16(26454), + 83: uint16(27972), + 84: uint16(29366), + 85: uint16(30067), + 86: uint16(31331), + 87: uint16(33976), + 88: uint16(35698), + 89: uint16(37304), + 90: uint16(37664), + 91: uint16(22065), + 92: uint16(22516), + 93: uint16(39166), + }, + 30: { + 0: uint16(25325), + 1: uint16(26893), + 2: uint16(27542), + 3: uint16(29165), + 4: uint16(32340), + 5: uint16(32887), + 6: uint16(33394), + 7: uint16(35302), + 8: uint16(39135), + 9: uint16(34645), + 10: uint16(36785), + 11: uint16(23611), + 12: uint16(20280), + 13: uint16(20449), + 14: uint16(20405), + 15: uint16(21767), + 16: uint16(23072), + 17: uint16(23517), + 18: uint16(23529), + 19: uint16(24515), + 20: uint16(24910), + 21: uint16(25391), + 22: uint16(26032), + 23: uint16(26187), + 24: uint16(26862), + 25: uint16(27035), + 26: uint16(28024), + 27: uint16(28145), + 28: uint16(30003), + 29: uint16(30137), + 30: uint16(30495), + 31: uint16(31070), + 32: uint16(31206), + 33: uint16(32051), + 34: uint16(33251), + 35: uint16(33455), + 36: uint16(34218), + 37: uint16(35242), + 38: uint16(35386), + 39: uint16(36523), + 40: uint16(36763), + 41: uint16(36914), + 42: uint16(37341), + 43: uint16(38663), + 44: uint16(20154), + 45: uint16(20161), + 46: uint16(20995), + 47: uint16(22645), + 48: uint16(22764), + 49: uint16(23563), + 50: uint16(29978), + 51: uint16(23613), + 52: uint16(33102), + 53: uint16(35338), + 54: uint16(36805), + 55: uint16(38499), + 56: uint16(38765), + 57: uint16(31525), + 58: uint16(35535), + 59: uint16(38920), + 60: uint16(37218), + 61: uint16(22259), + 62: uint16(21416), + 63: uint16(36887), + 64: uint16(21561), + 65: uint16(22402), + 66: uint16(24101), + 67: uint16(25512), + 68: uint16(27700), + 69: uint16(28810), + 70: uint16(30561), + 71: uint16(31883), + 72: uint16(32736), + 73: uint16(34928), + 74: uint16(36930), + 75: uint16(37204), + 76: uint16(37648), + 77: uint16(37656), + 78: uint16(38543), + 79: uint16(29790), + 80: uint16(39620), + 81: uint16(23815), + 82: uint16(23913), + 83: uint16(25968), + 84: uint16(26530), + 85: uint16(36264), + 86: uint16(38619), + 87: uint16(25454), + 88: uint16(26441), + 89: uint16(26905), + 90: uint16(33733), + 91: uint16(38935), + 92: uint16(38592), + 93: uint16(35070), + }, + 31: { + 0: uint16(28548), + 1: uint16(25722), + 2: uint16(23544), + 3: uint16(19990), + 4: uint16(28716), + 5: uint16(30045), + 6: uint16(26159), + 7: uint16(20932), + 8: uint16(21046), + 9: uint16(21218), + 10: uint16(22995), + 11: uint16(24449), + 12: uint16(24615), + 13: uint16(25104), + 14: uint16(25919), + 15: uint16(25972), + 16: uint16(26143), + 17: uint16(26228), + 18: uint16(26866), + 19: uint16(26646), + 20: uint16(27491), + 21: uint16(28165), + 22: uint16(29298), + 23: uint16(29983), + 24: uint16(30427), + 25: uint16(31934), + 26: uint16(32854), + 27: uint16(22768), + 28: uint16(35069), + 29: uint16(35199), + 30: uint16(35488), + 31: uint16(35475), + 32: uint16(35531), + 33: uint16(36893), + 34: uint16(37266), + 35: uint16(38738), + 36: uint16(38745), + 37: uint16(25993), + 38: uint16(31246), + 39: uint16(33030), + 40: uint16(38587), + 41: uint16(24109), + 42: uint16(24796), + 43: uint16(25114), + 44: uint16(26021), + 45: uint16(26132), + 46: uint16(26512), + 47: uint16(30707), + 48: uint16(31309), + 49: uint16(31821), + 50: uint16(32318), + 51: uint16(33034), + 52: uint16(36012), + 53: uint16(36196), + 54: uint16(36321), + 55: uint16(36447), + 56: uint16(30889), + 57: uint16(20999), + 58: uint16(25305), + 59: uint16(25509), + 60: uint16(25666), + 61: uint16(25240), + 62: uint16(35373), + 63: uint16(31363), + 64: uint16(31680), + 65: uint16(35500), + 66: uint16(38634), + 67: uint16(32118), + 68: uint16(33292), + 69: uint16(34633), + 70: uint16(20185), + 71: uint16(20808), + 72: uint16(21315), + 73: uint16(21344), + 74: uint16(23459), + 75: uint16(23554), + 76: uint16(23574), + 77: uint16(24029), + 78: uint16(25126), + 79: uint16(25159), + 80: uint16(25776), + 81: uint16(26643), + 82: uint16(26676), + 83: uint16(27849), + 84: uint16(27973), + 85: uint16(27927), + 86: uint16(26579), + 87: uint16(28508), + 88: uint16(29006), + 89: uint16(29053), + 90: uint16(26059), + 91: uint16(31359), + 92: uint16(31661), + 93: uint16(32218), + }, + 32: { + 0: uint16(32330), + 1: uint16(32680), + 2: uint16(33146), + 3: uint16(33307), + 4: uint16(33337), + 5: uint16(34214), + 6: uint16(35438), + 7: uint16(36046), + 8: uint16(36341), + 9: uint16(36984), + 10: uint16(36983), + 11: uint16(37549), + 12: uint16(37521), + 13: uint16(38275), + 14: uint16(39854), + 15: uint16(21069), + 16: uint16(21892), + 17: uint16(28472), + 18: uint16(28982), + 19: uint16(20840), + 20: uint16(31109), + 21: uint16(32341), + 22: uint16(33203), + 23: uint16(31950), + 24: uint16(22092), + 25: uint16(22609), + 26: uint16(23720), + 27: uint16(25514), + 28: uint16(26366), + 29: uint16(26365), + 30: uint16(26970), + 31: uint16(29401), + 32: uint16(30095), + 33: uint16(30094), + 34: uint16(30990), + 35: uint16(31062), + 36: uint16(31199), + 37: uint16(31895), + 38: uint16(32032), + 39: uint16(32068), + 40: uint16(34311), + 41: uint16(35380), + 42: uint16(38459), + 43: uint16(36961), + 44: uint16(40736), + 45: uint16(20711), + 46: uint16(21109), + 47: uint16(21452), + 48: uint16(21474), + 49: uint16(20489), + 50: uint16(21930), + 51: uint16(22766), + 52: uint16(22863), + 53: uint16(29245), + 54: uint16(23435), + 55: uint16(23652), + 56: uint16(21277), + 57: uint16(24803), + 58: uint16(24819), + 59: uint16(25436), + 60: uint16(25475), + 61: uint16(25407), + 62: uint16(25531), + 63: uint16(25805), + 64: uint16(26089), + 65: uint16(26361), + 66: uint16(24035), + 67: uint16(27085), + 68: uint16(27133), + 69: uint16(28437), + 70: uint16(29157), + 71: uint16(20105), + 72: uint16(30185), + 73: uint16(30456), + 74: uint16(31379), + 75: uint16(31967), + 76: uint16(32207), + 77: uint16(32156), + 78: uint16(32865), + 79: uint16(33609), + 80: uint16(33624), + 81: uint16(33900), + 82: uint16(33980), + 83: uint16(34299), + 84: uint16(35013), + 85: uint16(36208), + 86: uint16(36865), + 87: uint16(36973), + 88: uint16(37783), + 89: uint16(38684), + 90: uint16(39442), + 91: uint16(20687), + 92: uint16(22679), + 93: uint16(24974), + }, + 33: { + 0: uint16(33235), + 1: uint16(34101), + 2: uint16(36104), + 3: uint16(36896), + 4: uint16(20419), + 5: uint16(20596), + 6: uint16(21063), + 7: uint16(21363), + 8: uint16(24687), + 9: uint16(25417), + 10: uint16(26463), + 11: uint16(28204), + 12: uint16(36275), + 13: uint16(36895), + 14: uint16(20439), + 15: uint16(23646), + 16: uint16(36042), + 17: uint16(26063), + 18: uint16(32154), + 19: uint16(21330), + 20: uint16(34966), + 21: uint16(20854), + 22: uint16(25539), + 23: uint16(23384), + 24: uint16(23403), + 25: uint16(23562), + 26: uint16(25613), + 27: uint16(26449), + 28: uint16(36956), + 29: uint16(20182), + 30: uint16(22810), + 31: uint16(22826), + 32: uint16(27760), + 33: uint16(35409), + 34: uint16(21822), + 35: uint16(22549), + 36: uint16(22949), + 37: uint16(24816), + 38: uint16(25171), + 39: uint16(26561), + 40: uint16(33333), + 41: uint16(26965), + 42: uint16(38464), + 43: uint16(39364), + 44: uint16(39464), + 45: uint16(20307), + 46: uint16(22534), + 47: uint16(23550), + 48: uint16(32784), + 49: uint16(23729), + 50: uint16(24111), + 51: uint16(24453), + 52: uint16(24608), + 53: uint16(24907), + 54: uint16(25140), + 55: uint16(26367), + 56: uint16(27888), + 57: uint16(28382), + 58: uint16(32974), + 59: uint16(33151), + 60: uint16(33492), + 61: uint16(34955), + 62: uint16(36024), + 63: uint16(36864), + 64: uint16(36910), + 65: uint16(38538), + 66: uint16(40667), + 67: uint16(39899), + 68: uint16(20195), + 69: uint16(21488), + 70: uint16(22823), + 71: uint16(31532), + 72: uint16(37261), + 73: uint16(38988), + 74: uint16(40441), + 75: uint16(28381), + 76: uint16(28711), + 77: uint16(21331), + 78: uint16(21828), + 79: uint16(23429), + 80: uint16(25176), + 81: uint16(25246), + 82: uint16(25299), + 83: uint16(27810), + 84: uint16(28655), + 85: uint16(29730), + 86: uint16(35351), + 87: uint16(37944), + 88: uint16(28609), + 89: uint16(35582), + 90: uint16(33592), + 91: uint16(20967), + 92: uint16(34552), + 93: uint16(21482), + }, + 34: { + 0: uint16(21481), + 1: uint16(20294), + 2: uint16(36948), + 3: uint16(36784), + 4: uint16(22890), + 5: uint16(33073), + 6: uint16(24061), + 7: uint16(31466), + 8: uint16(36799), + 9: uint16(26842), + 10: uint16(35895), + 11: uint16(29432), + 12: uint16(40008), + 13: uint16(27197), + 14: uint16(35504), + 15: uint16(20025), + 16: uint16(21336), + 17: uint16(22022), + 18: uint16(22374), + 19: uint16(25285), + 20: uint16(25506), + 21: uint16(26086), + 22: uint16(27470), + 23: uint16(28129), + 24: uint16(28251), + 25: uint16(28845), + 26: uint16(30701), + 27: uint16(31471), + 28: uint16(31658), + 29: uint16(32187), + 30: uint16(32829), + 31: uint16(32966), + 32: uint16(34507), + 33: uint16(35477), + 34: uint16(37723), + 35: uint16(22243), + 36: uint16(22727), + 37: uint16(24382), + 38: uint16(26029), + 39: uint16(26262), + 40: uint16(27264), + 41: uint16(27573), + 42: uint16(30007), + 43: uint16(35527), + 44: uint16(20516), + 45: uint16(30693), + 46: uint16(22320), + 47: uint16(24347), + 48: uint16(24677), + 49: uint16(26234), + 50: uint16(27744), + 51: uint16(30196), + 52: uint16(31258), + 53: uint16(32622), + 54: uint16(33268), + 55: uint16(34584), + 56: uint16(36933), + 57: uint16(39347), + 58: uint16(31689), + 59: uint16(30044), + 60: uint16(31481), + 61: uint16(31569), + 62: uint16(33988), + 63: uint16(36880), + 64: uint16(31209), + 65: uint16(31378), + 66: uint16(33590), + 67: uint16(23265), + 68: uint16(30528), + 69: uint16(20013), + 70: uint16(20210), + 71: uint16(23449), + 72: uint16(24544), + 73: uint16(25277), + 74: uint16(26172), + 75: uint16(26609), + 76: uint16(27880), + 77: uint16(34411), + 78: uint16(34935), + 79: uint16(35387), + 80: uint16(37198), + 81: uint16(37619), + 82: uint16(39376), + 83: uint16(27159), + 84: uint16(28710), + 85: uint16(29482), + 86: uint16(33511), + 87: uint16(33879), + 88: uint16(36015), + 89: uint16(19969), + 90: uint16(20806), + 91: uint16(20939), + 92: uint16(21899), + 93: uint16(23541), + }, + 35: { + 0: uint16(24086), + 1: uint16(24115), + 2: uint16(24193), + 3: uint16(24340), + 4: uint16(24373), + 5: uint16(24427), + 6: uint16(24500), + 7: uint16(25074), + 8: uint16(25361), + 9: uint16(26274), + 10: uint16(26397), + 11: uint16(28526), + 12: uint16(29266), + 13: uint16(30010), + 14: uint16(30522), + 15: uint16(32884), + 16: uint16(33081), + 17: uint16(33144), + 18: uint16(34678), + 19: uint16(35519), + 20: uint16(35548), + 21: uint16(36229), + 22: uint16(36339), + 23: uint16(37530), + 24: uint16(38263), + 25: uint16(38914), + 26: uint16(40165), + 27: uint16(21189), + 28: uint16(25431), + 29: uint16(30452), + 30: uint16(26389), + 31: uint16(27784), + 32: uint16(29645), + 33: uint16(36035), + 34: uint16(37806), + 35: uint16(38515), + 36: uint16(27941), + 37: uint16(22684), + 38: uint16(26894), + 39: uint16(27084), + 40: uint16(36861), + 41: uint16(37786), + 42: uint16(30171), + 43: uint16(36890), + 44: uint16(22618), + 45: uint16(26626), + 46: uint16(25524), + 47: uint16(27131), + 48: uint16(20291), + 49: uint16(28460), + 50: uint16(26584), + 51: uint16(36795), + 52: uint16(34086), + 53: uint16(32180), + 54: uint16(37716), + 55: uint16(26943), + 56: uint16(28528), + 57: uint16(22378), + 58: uint16(22775), + 59: uint16(23340), + 60: uint16(32044), + 61: uint16(29226), + 62: uint16(21514), + 63: uint16(37347), + 64: uint16(40372), + 65: uint16(20141), + 66: uint16(20302), + 67: uint16(20572), + 68: uint16(20597), + 69: uint16(21059), + 70: uint16(35998), + 71: uint16(21576), + 72: uint16(22564), + 73: uint16(23450), + 74: uint16(24093), + 75: uint16(24213), + 76: uint16(24237), + 77: uint16(24311), + 78: uint16(24351), + 79: uint16(24716), + 80: uint16(25269), + 81: uint16(25402), + 82: uint16(25552), + 83: uint16(26799), + 84: uint16(27712), + 85: uint16(30855), + 86: uint16(31118), + 87: uint16(31243), + 88: uint16(32224), + 89: uint16(33351), + 90: uint16(35330), + 91: uint16(35558), + 92: uint16(36420), + 93: uint16(36883), + }, + 36: { + 0: uint16(37048), + 1: uint16(37165), + 2: uint16(37336), + 3: uint16(40718), + 4: uint16(27877), + 5: uint16(25688), + 6: uint16(25826), + 7: uint16(25973), + 8: uint16(28404), + 9: uint16(30340), + 10: uint16(31515), + 11: uint16(36969), + 12: uint16(37841), + 13: uint16(28346), + 14: uint16(21746), + 15: uint16(24505), + 16: uint16(25764), + 17: uint16(36685), + 18: uint16(36845), + 19: uint16(37444), + 20: uint16(20856), + 21: uint16(22635), + 22: uint16(22825), + 23: uint16(23637), + 24: uint16(24215), + 25: uint16(28155), + 26: uint16(32399), + 27: uint16(29980), + 28: uint16(36028), + 29: uint16(36578), + 30: uint16(39003), + 31: uint16(28857), + 32: uint16(20253), + 33: uint16(27583), + 34: uint16(28593), + 35: uint16(30000), + 36: uint16(38651), + 37: uint16(20814), + 38: uint16(21520), + 39: uint16(22581), + 40: uint16(22615), + 41: uint16(22956), + 42: uint16(23648), + 43: uint16(24466), + 44: uint16(26007), + 45: uint16(26460), + 46: uint16(28193), + 47: uint16(30331), + 48: uint16(33759), + 49: uint16(36077), + 50: uint16(36884), + 51: uint16(37117), + 52: uint16(37709), + 53: uint16(30757), + 54: uint16(30778), + 55: uint16(21162), + 56: uint16(24230), + 57: uint16(22303), + 58: uint16(22900), + 59: uint16(24594), + 60: uint16(20498), + 61: uint16(20826), + 62: uint16(20908), + 63: uint16(20941), + 64: uint16(20992), + 65: uint16(21776), + 66: uint16(22612), + 67: uint16(22616), + 68: uint16(22871), + 69: uint16(23445), + 70: uint16(23798), + 71: uint16(23947), + 72: uint16(24764), + 73: uint16(25237), + 74: uint16(25645), + 75: uint16(26481), + 76: uint16(26691), + 77: uint16(26812), + 78: uint16(26847), + 79: uint16(30423), + 80: uint16(28120), + 81: uint16(28271), + 82: uint16(28059), + 83: uint16(28783), + 84: uint16(29128), + 85: uint16(24403), + 86: uint16(30168), + 87: uint16(31095), + 88: uint16(31561), + 89: uint16(31572), + 90: uint16(31570), + 91: uint16(31958), + 92: uint16(32113), + 93: uint16(21040), + }, + 37: { + 0: uint16(33891), + 1: uint16(34153), + 2: uint16(34276), + 3: uint16(35342), + 4: uint16(35588), + 5: uint16(35910), + 6: uint16(36367), + 7: uint16(36867), + 8: uint16(36879), + 9: uint16(37913), + 10: uint16(38518), + 11: uint16(38957), + 12: uint16(39472), + 13: uint16(38360), + 14: uint16(20685), + 15: uint16(21205), + 16: uint16(21516), + 17: uint16(22530), + 18: uint16(23566), + 19: uint16(24999), + 20: uint16(25758), + 21: uint16(27934), + 22: uint16(30643), + 23: uint16(31461), + 24: uint16(33012), + 25: uint16(33796), + 26: uint16(36947), + 27: uint16(37509), + 28: uint16(23776), + 29: uint16(40199), + 30: uint16(21311), + 31: uint16(24471), + 32: uint16(24499), + 33: uint16(28060), + 34: uint16(29305), + 35: uint16(30563), + 36: uint16(31167), + 37: uint16(31716), + 38: uint16(27602), + 39: uint16(29420), + 40: uint16(35501), + 41: uint16(26627), + 42: uint16(27233), + 43: uint16(20984), + 44: uint16(31361), + 45: uint16(26932), + 46: uint16(23626), + 47: uint16(40182), + 48: uint16(33515), + 49: uint16(23493), + 50: uint16(37193), + 51: uint16(28702), + 52: uint16(22136), + 53: uint16(23663), + 54: uint16(24775), + 55: uint16(25958), + 56: uint16(27788), + 57: uint16(35930), + 58: uint16(36929), + 59: uint16(38931), + 60: uint16(21585), + 61: uint16(26311), + 62: uint16(37389), + 63: uint16(22856), + 64: uint16(37027), + 65: uint16(20869), + 66: uint16(20045), + 67: uint16(20970), + 68: uint16(34201), + 69: uint16(35598), + 70: uint16(28760), + 71: uint16(25466), + 72: uint16(37707), + 73: uint16(26978), + 74: uint16(39348), + 75: uint16(32260), + 76: uint16(30071), + 77: uint16(21335), + 78: uint16(26976), + 79: uint16(36575), + 80: uint16(38627), + 81: uint16(27741), + 82: uint16(20108), + 83: uint16(23612), + 84: uint16(24336), + 85: uint16(36841), + 86: uint16(21250), + 87: uint16(36049), + 88: uint16(32905), + 89: uint16(34425), + 90: uint16(24319), + 91: uint16(26085), + 92: uint16(20083), + 93: uint16(20837), + }, + 38: { + 0: uint16(22914), + 1: uint16(23615), + 2: uint16(38894), + 3: uint16(20219), + 4: uint16(22922), + 5: uint16(24525), + 6: uint16(35469), + 7: uint16(28641), + 8: uint16(31152), + 9: uint16(31074), + 10: uint16(23527), + 11: uint16(33905), + 12: uint16(29483), + 13: uint16(29105), + 14: uint16(24180), + 15: uint16(24565), + 16: uint16(25467), + 17: uint16(25754), + 18: uint16(29123), + 19: uint16(31896), + 20: uint16(20035), + 21: uint16(24316), + 22: uint16(20043), + 23: uint16(22492), + 24: uint16(22178), + 25: uint16(24745), + 26: uint16(28611), + 27: uint16(32013), + 28: uint16(33021), + 29: uint16(33075), + 30: uint16(33215), + 31: uint16(36786), + 32: uint16(35223), + 33: uint16(34468), + 34: uint16(24052), + 35: uint16(25226), + 36: uint16(25773), + 37: uint16(35207), + 38: uint16(26487), + 39: uint16(27874), + 40: uint16(27966), + 41: uint16(29750), + 42: uint16(30772), + 43: uint16(23110), + 44: uint16(32629), + 45: uint16(33453), + 46: uint16(39340), + 47: uint16(20467), + 48: uint16(24259), + 49: uint16(25309), + 50: uint16(25490), + 51: uint16(25943), + 52: uint16(26479), + 53: uint16(30403), + 54: uint16(29260), + 55: uint16(32972), + 56: uint16(32954), + 57: uint16(36649), + 58: uint16(37197), + 59: uint16(20493), + 60: uint16(22521), + 61: uint16(23186), + 62: uint16(26757), + 63: uint16(26995), + 64: uint16(29028), + 65: uint16(29437), + 66: uint16(36023), + 67: uint16(22770), + 68: uint16(36064), + 69: uint16(38506), + 70: uint16(36889), + 71: uint16(34687), + 72: uint16(31204), + 73: uint16(30695), + 74: uint16(33833), + 75: uint16(20271), + 76: uint16(21093), + 77: uint16(21338), + 78: uint16(25293), + 79: uint16(26575), + 80: uint16(27850), + 81: uint16(30333), + 82: uint16(31636), + 83: uint16(31893), + 84: uint16(33334), + 85: uint16(34180), + 86: uint16(36843), + 87: uint16(26333), + 88: uint16(28448), + 89: uint16(29190), + 90: uint16(32283), + 91: uint16(33707), + 92: uint16(39361), + 93: uint16(40614), + }, + 39: { + 0: uint16(20989), + 1: uint16(31665), + 2: uint16(30834), + 3: uint16(31672), + 4: uint16(32903), + 5: uint16(31560), + 6: uint16(27368), + 7: uint16(24161), + 8: uint16(32908), + 9: uint16(30033), + 10: uint16(30048), + 11: uint16(20843), + 12: uint16(37474), + 13: uint16(28300), + 14: uint16(30330), + 15: uint16(37271), + 16: uint16(39658), + 17: uint16(20240), + 18: uint16(32624), + 19: uint16(25244), + 20: uint16(31567), + 21: uint16(38309), + 22: uint16(40169), + 23: uint16(22138), + 24: uint16(22617), + 25: uint16(34532), + 26: uint16(38588), + 27: uint16(20276), + 28: uint16(21028), + 29: uint16(21322), + 30: uint16(21453), + 31: uint16(21467), + 32: uint16(24070), + 33: uint16(25644), + 34: uint16(26001), + 35: uint16(26495), + 36: uint16(27710), + 37: uint16(27726), + 38: uint16(29256), + 39: uint16(29359), + 40: uint16(29677), + 41: uint16(30036), + 42: uint16(32321), + 43: uint16(33324), + 44: uint16(34281), + 45: uint16(36009), + 46: uint16(31684), + 47: uint16(37318), + 48: uint16(29033), + 49: uint16(38930), + 50: uint16(39151), + 51: uint16(25405), + 52: uint16(26217), + 53: uint16(30058), + 54: uint16(30436), + 55: uint16(30928), + 56: uint16(34115), + 57: uint16(34542), + 58: uint16(21290), + 59: uint16(21329), + 60: uint16(21542), + 61: uint16(22915), + 62: uint16(24199), + 63: uint16(24444), + 64: uint16(24754), + 65: uint16(25161), + 66: uint16(25209), + 67: uint16(25259), + 68: uint16(26000), + 69: uint16(27604), + 70: uint16(27852), + 71: uint16(30130), + 72: uint16(30382), + 73: uint16(30865), + 74: uint16(31192), + 75: uint16(32203), + 76: uint16(32631), + 77: uint16(32933), + 78: uint16(34987), + 79: uint16(35513), + 80: uint16(36027), + 81: uint16(36991), + 82: uint16(38750), + 83: uint16(39131), + 84: uint16(27147), + 85: uint16(31800), + 86: uint16(20633), + 87: uint16(23614), + 88: uint16(24494), + 89: uint16(26503), + 90: uint16(27608), + 91: uint16(29749), + 92: uint16(30473), + 93: uint16(32654), + }, + 40: { + 0: uint16(40763), + 1: uint16(26570), + 2: uint16(31255), + 3: uint16(21305), + 4: uint16(30091), + 5: uint16(39661), + 6: uint16(24422), + 7: uint16(33181), + 8: uint16(33777), + 9: uint16(32920), + 10: uint16(24380), + 11: uint16(24517), + 12: uint16(30050), + 13: uint16(31558), + 14: uint16(36924), + 15: uint16(26727), + 16: uint16(23019), + 17: uint16(23195), + 18: uint16(32016), + 19: uint16(30334), + 20: uint16(35628), + 21: uint16(20469), + 22: uint16(24426), + 23: uint16(27161), + 24: uint16(27703), + 25: uint16(28418), + 26: uint16(29922), + 27: uint16(31080), + 28: uint16(34920), + 29: uint16(35413), + 30: uint16(35961), + 31: uint16(24287), + 32: uint16(25551), + 33: uint16(30149), + 34: uint16(31186), + 35: uint16(33495), + 36: uint16(37672), + 37: uint16(37618), + 38: uint16(33948), + 39: uint16(34541), + 40: uint16(39981), + 41: uint16(21697), + 42: uint16(24428), + 43: uint16(25996), + 44: uint16(27996), + 45: uint16(28693), + 46: uint16(36007), + 47: uint16(36051), + 48: uint16(38971), + 49: uint16(25935), + 50: uint16(29942), + 51: uint16(19981), + 52: uint16(20184), + 53: uint16(22496), + 54: uint16(22827), + 55: uint16(23142), + 56: uint16(23500), + 57: uint16(20904), + 58: uint16(24067), + 59: uint16(24220), + 60: uint16(24598), + 61: uint16(25206), + 62: uint16(25975), + 63: uint16(26023), + 64: uint16(26222), + 65: uint16(28014), + 66: uint16(29238), + 67: uint16(31526), + 68: uint16(33104), + 69: uint16(33178), + 70: uint16(33433), + 71: uint16(35676), + 72: uint16(36000), + 73: uint16(36070), + 74: uint16(36212), + 75: uint16(38428), + 76: uint16(38468), + 77: uint16(20398), + 78: uint16(25771), + 79: uint16(27494), + 80: uint16(33310), + 81: uint16(33889), + 82: uint16(34154), + 83: uint16(37096), + 84: uint16(23553), + 85: uint16(26963), + 86: uint16(39080), + 87: uint16(33914), + 88: uint16(34135), + 89: uint16(20239), + 90: uint16(21103), + 91: uint16(24489), + 92: uint16(24133), + 93: uint16(26381), + }, + 41: { + 0: uint16(31119), + 1: uint16(33145), + 2: uint16(35079), + 3: uint16(35206), + 4: uint16(28149), + 5: uint16(24343), + 6: uint16(25173), + 7: uint16(27832), + 8: uint16(20175), + 9: uint16(29289), + 10: uint16(39826), + 11: uint16(20998), + 12: uint16(21563), + 13: uint16(22132), + 14: uint16(22707), + 15: uint16(24996), + 16: uint16(25198), + 17: uint16(28954), + 18: uint16(22894), + 19: uint16(31881), + 20: uint16(31966), + 21: uint16(32027), + 22: uint16(38640), + 23: uint16(25991), + 24: uint16(32862), + 25: uint16(19993), + 26: uint16(20341), + 27: uint16(20853), + 28: uint16(22592), + 29: uint16(24163), + 30: uint16(24179), + 31: uint16(24330), + 32: uint16(26564), + 33: uint16(20006), + 34: uint16(34109), + 35: uint16(38281), + 36: uint16(38491), + 37: uint16(31859), + 38: uint16(38913), + 39: uint16(20731), + 40: uint16(22721), + 41: uint16(30294), + 42: uint16(30887), + 43: uint16(21029), + 44: uint16(30629), + 45: uint16(34065), + 46: uint16(31622), + 47: uint16(20559), + 48: uint16(22793), + 49: uint16(29255), + 50: uint16(31687), + 51: uint16(32232), + 52: uint16(36794), + 53: uint16(36820), + 54: uint16(36941), + 55: uint16(20415), + 56: uint16(21193), + 57: uint16(23081), + 58: uint16(24321), + 59: uint16(38829), + 60: uint16(20445), + 61: uint16(33303), + 62: uint16(37610), + 63: uint16(22275), + 64: uint16(25429), + 65: uint16(27497), + 66: uint16(29995), + 67: uint16(35036), + 68: uint16(36628), + 69: uint16(31298), + 70: uint16(21215), + 71: uint16(22675), + 72: uint16(24917), + 73: uint16(25098), + 74: uint16(26286), + 75: uint16(27597), + 76: uint16(31807), + 77: uint16(33769), + 78: uint16(20515), + 79: uint16(20472), + 80: uint16(21253), + 81: uint16(21574), + 82: uint16(22577), + 83: uint16(22857), + 84: uint16(23453), + 85: uint16(23792), + 86: uint16(23791), + 87: uint16(23849), + 88: uint16(24214), + 89: uint16(25265), + 90: uint16(25447), + 91: uint16(25918), + 92: uint16(26041), + 93: uint16(26379), + }, + 42: { + 0: uint16(27861), + 1: uint16(27873), + 2: uint16(28921), + 3: uint16(30770), + 4: uint16(32299), + 5: uint16(32990), + 6: uint16(33459), + 7: uint16(33804), + 8: uint16(34028), + 9: uint16(34562), + 10: uint16(35090), + 11: uint16(35370), + 12: uint16(35914), + 13: uint16(37030), + 14: uint16(37586), + 15: uint16(39165), + 16: uint16(40179), + 17: uint16(40300), + 18: uint16(20047), + 19: uint16(20129), + 20: uint16(20621), + 21: uint16(21078), + 22: uint16(22346), + 23: uint16(22952), + 24: uint16(24125), + 25: uint16(24536), + 26: uint16(24537), + 27: uint16(25151), + 28: uint16(26292), + 29: uint16(26395), + 30: uint16(26576), + 31: uint16(26834), + 32: uint16(20882), + 33: uint16(32033), + 34: uint16(32938), + 35: uint16(33192), + 36: uint16(35584), + 37: uint16(35980), + 38: uint16(36031), + 39: uint16(37502), + 40: uint16(38450), + 41: uint16(21536), + 42: uint16(38956), + 43: uint16(21271), + 44: uint16(20693), + 45: uint16(21340), + 46: uint16(22696), + 47: uint16(25778), + 48: uint16(26420), + 49: uint16(29287), + 50: uint16(30566), + 51: uint16(31302), + 52: uint16(37350), + 53: uint16(21187), + 54: uint16(27809), + 55: uint16(27526), + 56: uint16(22528), + 57: uint16(24140), + 58: uint16(22868), + 59: uint16(26412), + 60: uint16(32763), + 61: uint16(20961), + 62: uint16(30406), + 63: uint16(25705), + 64: uint16(30952), + 65: uint16(39764), + 66: uint16(40635), + 67: uint16(22475), + 68: uint16(22969), + 69: uint16(26151), + 70: uint16(26522), + 71: uint16(27598), + 72: uint16(21737), + 73: uint16(27097), + 74: uint16(24149), + 75: uint16(33180), + 76: uint16(26517), + 77: uint16(39850), + 78: uint16(26622), + 79: uint16(40018), + 80: uint16(26717), + 81: uint16(20134), + 82: uint16(20451), + 83: uint16(21448), + 84: uint16(25273), + 85: uint16(26411), + 86: uint16(27819), + 87: uint16(36804), + 88: uint16(20397), + 89: uint16(32365), + 90: uint16(40639), + 91: uint16(19975), + 92: uint16(24930), + 93: uint16(28288), + }, + 43: { + 0: uint16(28459), + 1: uint16(34067), + 2: uint16(21619), + 3: uint16(26410), + 4: uint16(39749), + 5: uint16(24051), + 6: uint16(31637), + 7: uint16(23724), + 8: uint16(23494), + 9: uint16(34588), + 10: uint16(28234), + 11: uint16(34001), + 12: uint16(31252), + 13: uint16(33032), + 14: uint16(22937), + 15: uint16(31885), + 16: uint16(27665), + 17: uint16(30496), + 18: uint16(21209), + 19: uint16(22818), + 20: uint16(28961), + 21: uint16(29279), + 22: uint16(30683), + 23: uint16(38695), + 24: uint16(40289), + 25: uint16(26891), + 26: uint16(23167), + 27: uint16(23064), + 28: uint16(20901), + 29: uint16(21517), + 30: uint16(21629), + 31: uint16(26126), + 32: uint16(30431), + 33: uint16(36855), + 34: uint16(37528), + 35: uint16(40180), + 36: uint16(23018), + 37: uint16(29277), + 38: uint16(28357), + 39: uint16(20813), + 40: uint16(26825), + 41: uint16(32191), + 42: uint16(32236), + 43: uint16(38754), + 44: uint16(40634), + 45: uint16(25720), + 46: uint16(27169), + 47: uint16(33538), + 48: uint16(22916), + 49: uint16(23391), + 50: uint16(27611), + 51: uint16(29467), + 52: uint16(30450), + 53: uint16(32178), + 54: uint16(32791), + 55: uint16(33945), + 56: uint16(20786), + 57: uint16(26408), + 58: uint16(40665), + 59: uint16(30446), + 60: uint16(26466), + 61: uint16(21247), + 62: uint16(39173), + 63: uint16(23588), + 64: uint16(25147), + 65: uint16(31870), + 66: uint16(36016), + 67: uint16(21839), + 68: uint16(24758), + 69: uint16(32011), + 70: uint16(38272), + 71: uint16(21249), + 72: uint16(20063), + 73: uint16(20918), + 74: uint16(22812), + 75: uint16(29242), + 76: uint16(32822), + 77: uint16(37326), + 78: uint16(24357), + 79: uint16(30690), + 80: uint16(21380), + 81: uint16(24441), + 82: uint16(32004), + 83: uint16(34220), + 84: uint16(35379), + 85: uint16(36493), + 86: uint16(38742), + 87: uint16(26611), + 88: uint16(34222), + 89: uint16(37971), + 90: uint16(24841), + 91: uint16(24840), + 92: uint16(27833), + 93: uint16(30290), + }, + 44: { + 0: uint16(35565), + 1: uint16(36664), + 2: uint16(21807), + 3: uint16(20305), + 4: uint16(20778), + 5: uint16(21191), + 6: uint16(21451), + 7: uint16(23461), + 8: uint16(24189), + 9: uint16(24736), + 10: uint16(24962), + 11: uint16(25558), + 12: uint16(26377), + 13: uint16(26586), + 14: uint16(28263), + 15: uint16(28044), + 16: uint16(29494), + 17: uint16(29495), + 18: uint16(30001), + 19: uint16(31056), + 20: uint16(35029), + 21: uint16(35480), + 22: uint16(36938), + 23: uint16(37009), + 24: uint16(37109), + 25: uint16(38596), + 26: uint16(34701), + 27: uint16(22805), + 28: uint16(20104), + 29: uint16(20313), + 30: uint16(19982), + 31: uint16(35465), + 32: uint16(36671), + 33: uint16(38928), + 34: uint16(20653), + 35: uint16(24188), + 36: uint16(22934), + 37: uint16(23481), + 38: uint16(24248), + 39: uint16(25562), + 40: uint16(25594), + 41: uint16(25793), + 42: uint16(26332), + 43: uint16(26954), + 44: uint16(27096), + 45: uint16(27915), + 46: uint16(28342), + 47: uint16(29076), + 48: uint16(29992), + 49: uint16(31407), + 50: uint16(32650), + 51: uint16(32768), + 52: uint16(33865), + 53: uint16(33993), + 54: uint16(35201), + 55: uint16(35617), + 56: uint16(36362), + 57: uint16(36965), + 58: uint16(38525), + 59: uint16(39178), + 60: uint16(24958), + 61: uint16(25233), + 62: uint16(27442), + 63: uint16(27779), + 64: uint16(28020), + 65: uint16(32716), + 66: uint16(32764), + 67: uint16(28096), + 68: uint16(32645), + 69: uint16(34746), + 70: uint16(35064), + 71: uint16(26469), + 72: uint16(33713), + 73: uint16(38972), + 74: uint16(38647), + 75: uint16(27931), + 76: uint16(32097), + 77: uint16(33853), + 78: uint16(37226), + 79: uint16(20081), + 80: uint16(21365), + 81: uint16(23888), + 82: uint16(27396), + 83: uint16(28651), + 84: uint16(34253), + 85: uint16(34349), + 86: uint16(35239), + 87: uint16(21033), + 88: uint16(21519), + 89: uint16(23653), + 90: uint16(26446), + 91: uint16(26792), + 92: uint16(29702), + 93: uint16(29827), + }, + 45: { + 0: uint16(30178), + 1: uint16(35023), + 2: uint16(35041), + 3: uint16(37324), + 4: uint16(38626), + 5: uint16(38520), + 6: uint16(24459), + 7: uint16(29575), + 8: uint16(31435), + 9: uint16(33870), + 10: uint16(25504), + 11: uint16(30053), + 12: uint16(21129), + 13: uint16(27969), + 14: uint16(28316), + 15: uint16(29705), + 16: uint16(30041), + 17: uint16(30827), + 18: uint16(31890), + 19: uint16(38534), + 20: uint16(31452), + 21: uint16(40845), + 22: uint16(20406), + 23: uint16(24942), + 24: uint16(26053), + 25: uint16(34396), + 26: uint16(20102), + 27: uint16(20142), + 28: uint16(20698), + 29: uint16(20001), + 30: uint16(20940), + 31: uint16(23534), + 32: uint16(26009), + 33: uint16(26753), + 34: uint16(28092), + 35: uint16(29471), + 36: uint16(30274), + 37: uint16(30637), + 38: uint16(31260), + 39: uint16(31975), + 40: uint16(33391), + 41: uint16(35538), + 42: uint16(36988), + 43: uint16(37327), + 44: uint16(38517), + 45: uint16(38936), + 46: uint16(21147), + 47: uint16(32209), + 48: uint16(20523), + 49: uint16(21400), + 50: uint16(26519), + 51: uint16(28107), + 52: uint16(29136), + 53: uint16(29747), + 54: uint16(33256), + 55: uint16(36650), + 56: uint16(38563), + 57: uint16(40023), + 58: uint16(40607), + 59: uint16(29792), + 60: uint16(22593), + 61: uint16(28057), + 62: uint16(32047), + 63: uint16(39006), + 64: uint16(20196), + 65: uint16(20278), + 66: uint16(20363), + 67: uint16(20919), + 68: uint16(21169), + 69: uint16(23994), + 70: uint16(24604), + 71: uint16(29618), + 72: uint16(31036), + 73: uint16(33491), + 74: uint16(37428), + 75: uint16(38583), + 76: uint16(38646), + 77: uint16(38666), + 78: uint16(40599), + 79: uint16(40802), + 80: uint16(26278), + 81: uint16(27508), + 82: uint16(21015), + 83: uint16(21155), + 84: uint16(28872), + 85: uint16(35010), + 86: uint16(24265), + 87: uint16(24651), + 88: uint16(24976), + 89: uint16(28451), + 90: uint16(29001), + 91: uint16(31806), + 92: uint16(32244), + 93: uint16(32879), + }, + 46: { + 0: uint16(34030), + 1: uint16(36899), + 2: uint16(37676), + 3: uint16(21570), + 4: uint16(39791), + 5: uint16(27347), + 6: uint16(28809), + 7: uint16(36034), + 8: uint16(36335), + 9: uint16(38706), + 10: uint16(21172), + 11: uint16(23105), + 12: uint16(24266), + 13: uint16(24324), + 14: uint16(26391), + 15: uint16(27004), + 16: uint16(27028), + 17: uint16(28010), + 18: uint16(28431), + 19: uint16(29282), + 20: uint16(29436), + 21: uint16(31725), + 22: uint16(32769), + 23: uint16(32894), + 24: uint16(34635), + 25: uint16(37070), + 26: uint16(20845), + 27: uint16(40595), + 28: uint16(31108), + 29: uint16(32907), + 30: uint16(37682), + 31: uint16(35542), + 32: uint16(20525), + 33: uint16(21644), + 34: uint16(35441), + 35: uint16(27498), + 36: uint16(36036), + 37: uint16(33031), + 38: uint16(24785), + 39: uint16(26528), + 40: uint16(40434), + 41: uint16(20121), + 42: uint16(20120), + 43: uint16(39952), + 44: uint16(35435), + 45: uint16(34241), + 46: uint16(34152), + 47: uint16(26880), + 48: uint16(28286), + 49: uint16(30871), + 50: uint16(33109), + }, + 47: { + 0: uint16(24332), + 1: uint16(19984), + 2: uint16(19989), + 3: uint16(20010), + 4: uint16(20017), + 5: uint16(20022), + 6: uint16(20028), + 7: uint16(20031), + 8: uint16(20034), + 9: uint16(20054), + 10: uint16(20056), + 11: uint16(20098), + 12: uint16(20101), + 13: uint16(35947), + 14: uint16(20106), + 15: uint16(33298), + 16: uint16(24333), + 17: uint16(20110), + 18: uint16(20126), + 19: uint16(20127), + 20: uint16(20128), + 21: uint16(20130), + 22: uint16(20144), + 23: uint16(20147), + 24: uint16(20150), + 25: uint16(20174), + 26: uint16(20173), + 27: uint16(20164), + 28: uint16(20166), + 29: uint16(20162), + 30: uint16(20183), + 31: uint16(20190), + 32: uint16(20205), + 33: uint16(20191), + 34: uint16(20215), + 35: uint16(20233), + 36: uint16(20314), + 37: uint16(20272), + 38: uint16(20315), + 39: uint16(20317), + 40: uint16(20311), + 41: uint16(20295), + 42: uint16(20342), + 43: uint16(20360), + 44: uint16(20367), + 45: uint16(20376), + 46: uint16(20347), + 47: uint16(20329), + 48: uint16(20336), + 49: uint16(20369), + 50: uint16(20335), + 51: uint16(20358), + 52: uint16(20374), + 53: uint16(20760), + 54: uint16(20436), + 55: uint16(20447), + 56: uint16(20430), + 57: uint16(20440), + 58: uint16(20443), + 59: uint16(20433), + 60: uint16(20442), + 61: uint16(20432), + 62: uint16(20452), + 63: uint16(20453), + 64: uint16(20506), + 65: uint16(20520), + 66: uint16(20500), + 67: uint16(20522), + 68: uint16(20517), + 69: uint16(20485), + 70: uint16(20252), + 71: uint16(20470), + 72: uint16(20513), + 73: uint16(20521), + 74: uint16(20524), + 75: uint16(20478), + 76: uint16(20463), + 77: uint16(20497), + 78: uint16(20486), + 79: uint16(20547), + 80: uint16(20551), + 81: uint16(26371), + 82: uint16(20565), + 83: uint16(20560), + 84: uint16(20552), + 85: uint16(20570), + 86: uint16(20566), + 87: uint16(20588), + 88: uint16(20600), + 89: uint16(20608), + 90: uint16(20634), + 91: uint16(20613), + 92: uint16(20660), + 93: uint16(20658), + }, + 48: { + 0: uint16(20681), + 1: uint16(20682), + 2: uint16(20659), + 3: uint16(20674), + 4: uint16(20694), + 5: uint16(20702), + 6: uint16(20709), + 7: uint16(20717), + 8: uint16(20707), + 9: uint16(20718), + 10: uint16(20729), + 11: uint16(20725), + 12: uint16(20745), + 13: uint16(20737), + 14: uint16(20738), + 15: uint16(20758), + 16: uint16(20757), + 17: uint16(20756), + 18: uint16(20762), + 19: uint16(20769), + 20: uint16(20794), + 21: uint16(20791), + 22: uint16(20796), + 23: uint16(20795), + 24: uint16(20799), + 25: uint16(20800), + 26: uint16(20818), + 27: uint16(20812), + 28: uint16(20820), + 29: uint16(20834), + 30: uint16(31480), + 31: uint16(20841), + 32: uint16(20842), + 33: uint16(20846), + 34: uint16(20864), + 35: uint16(20866), + 36: uint16(22232), + 37: uint16(20876), + 38: uint16(20873), + 39: uint16(20879), + 40: uint16(20881), + 41: uint16(20883), + 42: uint16(20885), + 43: uint16(20886), + 44: uint16(20900), + 45: uint16(20902), + 46: uint16(20898), + 47: uint16(20905), + 48: uint16(20906), + 49: uint16(20907), + 50: uint16(20915), + 51: uint16(20913), + 52: uint16(20914), + 53: uint16(20912), + 54: uint16(20917), + 55: uint16(20925), + 56: uint16(20933), + 57: uint16(20937), + 58: uint16(20955), + 59: uint16(20960), + 60: uint16(34389), + 61: uint16(20969), + 62: uint16(20973), + 63: uint16(20976), + 64: uint16(20981), + 65: uint16(20990), + 66: uint16(20996), + 67: uint16(21003), + 68: uint16(21012), + 69: uint16(21006), + 70: uint16(21031), + 71: uint16(21034), + 72: uint16(21038), + 73: uint16(21043), + 74: uint16(21049), + 75: uint16(21071), + 76: uint16(21060), + 77: uint16(21067), + 78: uint16(21068), + 79: uint16(21086), + 80: uint16(21076), + 81: uint16(21098), + 82: uint16(21108), + 83: uint16(21097), + 84: uint16(21107), + 85: uint16(21119), + 86: uint16(21117), + 87: uint16(21133), + 88: uint16(21140), + 89: uint16(21138), + 90: uint16(21105), + 91: uint16(21128), + 92: uint16(21137), + 93: uint16(36776), + }, + 49: { + 0: uint16(36775), + 1: uint16(21164), + 2: uint16(21165), + 3: uint16(21180), + 4: uint16(21173), + 5: uint16(21185), + 6: uint16(21197), + 7: uint16(21207), + 8: uint16(21214), + 9: uint16(21219), + 10: uint16(21222), + 11: uint16(39149), + 12: uint16(21216), + 13: uint16(21235), + 14: uint16(21237), + 15: uint16(21240), + 16: uint16(21241), + 17: uint16(21254), + 18: uint16(21256), + 19: uint16(30008), + 20: uint16(21261), + 21: uint16(21264), + 22: uint16(21263), + 23: uint16(21269), + 24: uint16(21274), + 25: uint16(21283), + 26: uint16(21295), + 27: uint16(21297), + 28: uint16(21299), + 29: uint16(21304), + 30: uint16(21312), + 31: uint16(21318), + 32: uint16(21317), + 33: uint16(19991), + 34: uint16(21321), + 35: uint16(21325), + 36: uint16(20950), + 37: uint16(21342), + 38: uint16(21353), + 39: uint16(21358), + 40: uint16(22808), + 41: uint16(21371), + 42: uint16(21367), + 43: uint16(21378), + 44: uint16(21398), + 45: uint16(21408), + 46: uint16(21414), + 47: uint16(21413), + 48: uint16(21422), + 49: uint16(21424), + 50: uint16(21430), + 51: uint16(21443), + 52: uint16(31762), + 53: uint16(38617), + 54: uint16(21471), + 55: uint16(26364), + 56: uint16(29166), + 57: uint16(21486), + 58: uint16(21480), + 59: uint16(21485), + 60: uint16(21498), + 61: uint16(21505), + 62: uint16(21565), + 63: uint16(21568), + 64: uint16(21548), + 65: uint16(21549), + 66: uint16(21564), + 67: uint16(21550), + 68: uint16(21558), + 69: uint16(21545), + 70: uint16(21533), + 71: uint16(21582), + 72: uint16(21647), + 73: uint16(21621), + 74: uint16(21646), + 75: uint16(21599), + 76: uint16(21617), + 77: uint16(21623), + 78: uint16(21616), + 79: uint16(21650), + 80: uint16(21627), + 81: uint16(21632), + 82: uint16(21622), + 83: uint16(21636), + 84: uint16(21648), + 85: uint16(21638), + 86: uint16(21703), + 87: uint16(21666), + 88: uint16(21688), + 89: uint16(21669), + 90: uint16(21676), + 91: uint16(21700), + 92: uint16(21704), + 93: uint16(21672), + }, + 50: { + 0: uint16(21675), + 1: uint16(21698), + 2: uint16(21668), + 3: uint16(21694), + 4: uint16(21692), + 5: uint16(21720), + 6: uint16(21733), + 7: uint16(21734), + 8: uint16(21775), + 9: uint16(21780), + 10: uint16(21757), + 11: uint16(21742), + 12: uint16(21741), + 13: uint16(21754), + 14: uint16(21730), + 15: uint16(21817), + 16: uint16(21824), + 17: uint16(21859), + 18: uint16(21836), + 19: uint16(21806), + 20: uint16(21852), + 21: uint16(21829), + 22: uint16(21846), + 23: uint16(21847), + 24: uint16(21816), + 25: uint16(21811), + 26: uint16(21853), + 27: uint16(21913), + 28: uint16(21888), + 29: uint16(21679), + 30: uint16(21898), + 31: uint16(21919), + 32: uint16(21883), + 33: uint16(21886), + 34: uint16(21912), + 35: uint16(21918), + 36: uint16(21934), + 37: uint16(21884), + 38: uint16(21891), + 39: uint16(21929), + 40: uint16(21895), + 41: uint16(21928), + 42: uint16(21978), + 43: uint16(21957), + 44: uint16(21983), + 45: uint16(21956), + 46: uint16(21980), + 47: uint16(21988), + 48: uint16(21972), + 49: uint16(22036), + 50: uint16(22007), + 51: uint16(22038), + 52: uint16(22014), + 53: uint16(22013), + 54: uint16(22043), + 55: uint16(22009), + 56: uint16(22094), + 57: uint16(22096), + 58: uint16(29151), + 59: uint16(22068), + 60: uint16(22070), + 61: uint16(22066), + 62: uint16(22072), + 63: uint16(22123), + 64: uint16(22116), + 65: uint16(22063), + 66: uint16(22124), + 67: uint16(22122), + 68: uint16(22150), + 69: uint16(22144), + 70: uint16(22154), + 71: uint16(22176), + 72: uint16(22164), + 73: uint16(22159), + 74: uint16(22181), + 75: uint16(22190), + 76: uint16(22198), + 77: uint16(22196), + 78: uint16(22210), + 79: uint16(22204), + 80: uint16(22209), + 81: uint16(22211), + 82: uint16(22208), + 83: uint16(22216), + 84: uint16(22222), + 85: uint16(22225), + 86: uint16(22227), + 87: uint16(22231), + 88: uint16(22254), + 89: uint16(22265), + 90: uint16(22272), + 91: uint16(22271), + 92: uint16(22276), + 93: uint16(22281), + }, + 51: { + 0: uint16(22280), + 1: uint16(22283), + 2: uint16(22285), + 3: uint16(22291), + 4: uint16(22296), + 5: uint16(22294), + 6: uint16(21959), + 7: uint16(22300), + 8: uint16(22310), + 9: uint16(22327), + 10: uint16(22328), + 11: uint16(22350), + 12: uint16(22331), + 13: uint16(22336), + 14: uint16(22351), + 15: uint16(22377), + 16: uint16(22464), + 17: uint16(22408), + 18: uint16(22369), + 19: uint16(22399), + 20: uint16(22409), + 21: uint16(22419), + 22: uint16(22432), + 23: uint16(22451), + 24: uint16(22436), + 25: uint16(22442), + 26: uint16(22448), + 27: uint16(22467), + 28: uint16(22470), + 29: uint16(22484), + 30: uint16(22482), + 31: uint16(22483), + 32: uint16(22538), + 33: uint16(22486), + 34: uint16(22499), + 35: uint16(22539), + 36: uint16(22553), + 37: uint16(22557), + 38: uint16(22642), + 39: uint16(22561), + 40: uint16(22626), + 41: uint16(22603), + 42: uint16(22640), + 43: uint16(27584), + 44: uint16(22610), + 45: uint16(22589), + 46: uint16(22649), + 47: uint16(22661), + 48: uint16(22713), + 49: uint16(22687), + 50: uint16(22699), + 51: uint16(22714), + 52: uint16(22750), + 53: uint16(22715), + 54: uint16(22712), + 55: uint16(22702), + 56: uint16(22725), + 57: uint16(22739), + 58: uint16(22737), + 59: uint16(22743), + 60: uint16(22745), + 61: uint16(22744), + 62: uint16(22757), + 63: uint16(22748), + 64: uint16(22756), + 65: uint16(22751), + 66: uint16(22767), + 67: uint16(22778), + 68: uint16(22777), + 69: uint16(22779), + 70: uint16(22780), + 71: uint16(22781), + 72: uint16(22786), + 73: uint16(22794), + 74: uint16(22800), + 75: uint16(22811), + 76: uint16(26790), + 77: uint16(22821), + 78: uint16(22828), + 79: uint16(22829), + 80: uint16(22834), + 81: uint16(22840), + 82: uint16(22846), + 83: uint16(31442), + 84: uint16(22869), + 85: uint16(22864), + 86: uint16(22862), + 87: uint16(22874), + 88: uint16(22872), + 89: uint16(22882), + 90: uint16(22880), + 91: uint16(22887), + 92: uint16(22892), + 93: uint16(22889), + }, + 52: { + 0: uint16(22904), + 1: uint16(22913), + 2: uint16(22941), + 3: uint16(20318), + 4: uint16(20395), + 5: uint16(22947), + 6: uint16(22962), + 7: uint16(22982), + 8: uint16(23016), + 9: uint16(23004), + 10: uint16(22925), + 11: uint16(23001), + 12: uint16(23002), + 13: uint16(23077), + 14: uint16(23071), + 15: uint16(23057), + 16: uint16(23068), + 17: uint16(23049), + 18: uint16(23066), + 19: uint16(23104), + 20: uint16(23148), + 21: uint16(23113), + 22: uint16(23093), + 23: uint16(23094), + 24: uint16(23138), + 25: uint16(23146), + 26: uint16(23194), + 27: uint16(23228), + 28: uint16(23230), + 29: uint16(23243), + 30: uint16(23234), + 31: uint16(23229), + 32: uint16(23267), + 33: uint16(23255), + 34: uint16(23270), + 35: uint16(23273), + 36: uint16(23254), + 37: uint16(23290), + 38: uint16(23291), + 39: uint16(23308), + 40: uint16(23307), + 41: uint16(23318), + 42: uint16(23346), + 43: uint16(23248), + 44: uint16(23338), + 45: uint16(23350), + 46: uint16(23358), + 47: uint16(23363), + 48: uint16(23365), + 49: uint16(23360), + 50: uint16(23377), + 51: uint16(23381), + 52: uint16(23386), + 53: uint16(23387), + 54: uint16(23397), + 55: uint16(23401), + 56: uint16(23408), + 57: uint16(23411), + 58: uint16(23413), + 59: uint16(23416), + 60: uint16(25992), + 61: uint16(23418), + 62: uint16(23424), + 63: uint16(23427), + 64: uint16(23462), + 65: uint16(23480), + 66: uint16(23491), + 67: uint16(23495), + 68: uint16(23497), + 69: uint16(23508), + 70: uint16(23504), + 71: uint16(23524), + 72: uint16(23526), + 73: uint16(23522), + 74: uint16(23518), + 75: uint16(23525), + 76: uint16(23531), + 77: uint16(23536), + 78: uint16(23542), + 79: uint16(23539), + 80: uint16(23557), + 81: uint16(23559), + 82: uint16(23560), + 83: uint16(23565), + 84: uint16(23571), + 85: uint16(23584), + 86: uint16(23586), + 87: uint16(23592), + 88: uint16(23608), + 89: uint16(23609), + 90: uint16(23617), + 91: uint16(23622), + 92: uint16(23630), + 93: uint16(23635), + }, + 53: { + 0: uint16(23632), + 1: uint16(23631), + 2: uint16(23409), + 3: uint16(23660), + 4: uint16(23662), + 5: uint16(20066), + 6: uint16(23670), + 7: uint16(23673), + 8: uint16(23692), + 9: uint16(23697), + 10: uint16(23700), + 11: uint16(22939), + 12: uint16(23723), + 13: uint16(23739), + 14: uint16(23734), + 15: uint16(23740), + 16: uint16(23735), + 17: uint16(23749), + 18: uint16(23742), + 19: uint16(23751), + 20: uint16(23769), + 21: uint16(23785), + 22: uint16(23805), + 23: uint16(23802), + 24: uint16(23789), + 25: uint16(23948), + 26: uint16(23786), + 27: uint16(23819), + 28: uint16(23829), + 29: uint16(23831), + 30: uint16(23900), + 31: uint16(23839), + 32: uint16(23835), + 33: uint16(23825), + 34: uint16(23828), + 35: uint16(23842), + 36: uint16(23834), + 37: uint16(23833), + 38: uint16(23832), + 39: uint16(23884), + 40: uint16(23890), + 41: uint16(23886), + 42: uint16(23883), + 43: uint16(23916), + 44: uint16(23923), + 45: uint16(23926), + 46: uint16(23943), + 47: uint16(23940), + 48: uint16(23938), + 49: uint16(23970), + 50: uint16(23965), + 51: uint16(23980), + 52: uint16(23982), + 53: uint16(23997), + 54: uint16(23952), + 55: uint16(23991), + 56: uint16(23996), + 57: uint16(24009), + 58: uint16(24013), + 59: uint16(24019), + 60: uint16(24018), + 61: uint16(24022), + 62: uint16(24027), + 63: uint16(24043), + 64: uint16(24050), + 65: uint16(24053), + 66: uint16(24075), + 67: uint16(24090), + 68: uint16(24089), + 69: uint16(24081), + 70: uint16(24091), + 71: uint16(24118), + 72: uint16(24119), + 73: uint16(24132), + 74: uint16(24131), + 75: uint16(24128), + 76: uint16(24142), + 77: uint16(24151), + 78: uint16(24148), + 79: uint16(24159), + 80: uint16(24162), + 81: uint16(24164), + 82: uint16(24135), + 83: uint16(24181), + 84: uint16(24182), + 85: uint16(24186), + 86: uint16(40636), + 87: uint16(24191), + 88: uint16(24224), + 89: uint16(24257), + 90: uint16(24258), + 91: uint16(24264), + 92: uint16(24272), + 93: uint16(24271), + }, + 54: { + 0: uint16(24278), + 1: uint16(24291), + 2: uint16(24285), + 3: uint16(24282), + 4: uint16(24283), + 5: uint16(24290), + 6: uint16(24289), + 7: uint16(24296), + 8: uint16(24297), + 9: uint16(24300), + 10: uint16(24305), + 11: uint16(24307), + 12: uint16(24304), + 13: uint16(24308), + 14: uint16(24312), + 15: uint16(24318), + 16: uint16(24323), + 17: uint16(24329), + 18: uint16(24413), + 19: uint16(24412), + 20: uint16(24331), + 21: uint16(24337), + 22: uint16(24342), + 23: uint16(24361), + 24: uint16(24365), + 25: uint16(24376), + 26: uint16(24385), + 27: uint16(24392), + 28: uint16(24396), + 29: uint16(24398), + 30: uint16(24367), + 31: uint16(24401), + 32: uint16(24406), + 33: uint16(24407), + 34: uint16(24409), + 35: uint16(24417), + 36: uint16(24429), + 37: uint16(24435), + 38: uint16(24439), + 39: uint16(24451), + 40: uint16(24450), + 41: uint16(24447), + 42: uint16(24458), + 43: uint16(24456), + 44: uint16(24465), + 45: uint16(24455), + 46: uint16(24478), + 47: uint16(24473), + 48: uint16(24472), + 49: uint16(24480), + 50: uint16(24488), + 51: uint16(24493), + 52: uint16(24508), + 53: uint16(24534), + 54: uint16(24571), + 55: uint16(24548), + 56: uint16(24568), + 57: uint16(24561), + 58: uint16(24541), + 59: uint16(24755), + 60: uint16(24575), + 61: uint16(24609), + 62: uint16(24672), + 63: uint16(24601), + 64: uint16(24592), + 65: uint16(24617), + 66: uint16(24590), + 67: uint16(24625), + 68: uint16(24603), + 69: uint16(24597), + 70: uint16(24619), + 71: uint16(24614), + 72: uint16(24591), + 73: uint16(24634), + 74: uint16(24666), + 75: uint16(24641), + 76: uint16(24682), + 77: uint16(24695), + 78: uint16(24671), + 79: uint16(24650), + 80: uint16(24646), + 81: uint16(24653), + 82: uint16(24675), + 83: uint16(24643), + 84: uint16(24676), + 85: uint16(24642), + 86: uint16(24684), + 87: uint16(24683), + 88: uint16(24665), + 89: uint16(24705), + 90: uint16(24717), + 91: uint16(24807), + 92: uint16(24707), + 93: uint16(24730), + }, + 55: { + 0: uint16(24708), + 1: uint16(24731), + 2: uint16(24726), + 3: uint16(24727), + 4: uint16(24722), + 5: uint16(24743), + 6: uint16(24715), + 7: uint16(24801), + 8: uint16(24760), + 9: uint16(24800), + 10: uint16(24787), + 11: uint16(24756), + 12: uint16(24560), + 13: uint16(24765), + 14: uint16(24774), + 15: uint16(24757), + 16: uint16(24792), + 17: uint16(24909), + 18: uint16(24853), + 19: uint16(24838), + 20: uint16(24822), + 21: uint16(24823), + 22: uint16(24832), + 23: uint16(24820), + 24: uint16(24826), + 25: uint16(24835), + 26: uint16(24865), + 27: uint16(24827), + 28: uint16(24817), + 29: uint16(24845), + 30: uint16(24846), + 31: uint16(24903), + 32: uint16(24894), + 33: uint16(24872), + 34: uint16(24871), + 35: uint16(24906), + 36: uint16(24895), + 37: uint16(24892), + 38: uint16(24876), + 39: uint16(24884), + 40: uint16(24893), + 41: uint16(24898), + 42: uint16(24900), + 43: uint16(24947), + 44: uint16(24951), + 45: uint16(24920), + 46: uint16(24921), + 47: uint16(24922), + 48: uint16(24939), + 49: uint16(24948), + 50: uint16(24943), + 51: uint16(24933), + 52: uint16(24945), + 53: uint16(24927), + 54: uint16(24925), + 55: uint16(24915), + 56: uint16(24949), + 57: uint16(24985), + 58: uint16(24982), + 59: uint16(24967), + 60: uint16(25004), + 61: uint16(24980), + 62: uint16(24986), + 63: uint16(24970), + 64: uint16(24977), + 65: uint16(25003), + 66: uint16(25006), + 67: uint16(25036), + 68: uint16(25034), + 69: uint16(25033), + 70: uint16(25079), + 71: uint16(25032), + 72: uint16(25027), + 73: uint16(25030), + 74: uint16(25018), + 75: uint16(25035), + 76: uint16(32633), + 77: uint16(25037), + 78: uint16(25062), + 79: uint16(25059), + 80: uint16(25078), + 81: uint16(25082), + 82: uint16(25076), + 83: uint16(25087), + 84: uint16(25085), + 85: uint16(25084), + 86: uint16(25086), + 87: uint16(25088), + 88: uint16(25096), + 89: uint16(25097), + 90: uint16(25101), + 91: uint16(25100), + 92: uint16(25108), + 93: uint16(25115), + }, + 56: { + 0: uint16(25118), + 1: uint16(25121), + 2: uint16(25130), + 3: uint16(25134), + 4: uint16(25136), + 5: uint16(25138), + 6: uint16(25139), + 7: uint16(25153), + 8: uint16(25166), + 9: uint16(25182), + 10: uint16(25187), + 11: uint16(25179), + 12: uint16(25184), + 13: uint16(25192), + 14: uint16(25212), + 15: uint16(25218), + 16: uint16(25225), + 17: uint16(25214), + 18: uint16(25234), + 19: uint16(25235), + 20: uint16(25238), + 21: uint16(25300), + 22: uint16(25219), + 23: uint16(25236), + 24: uint16(25303), + 25: uint16(25297), + 26: uint16(25275), + 27: uint16(25295), + 28: uint16(25343), + 29: uint16(25286), + 30: uint16(25812), + 31: uint16(25288), + 32: uint16(25308), + 33: uint16(25292), + 34: uint16(25290), + 35: uint16(25282), + 36: uint16(25287), + 37: uint16(25243), + 38: uint16(25289), + 39: uint16(25356), + 40: uint16(25326), + 41: uint16(25329), + 42: uint16(25383), + 43: uint16(25346), + 44: uint16(25352), + 45: uint16(25327), + 46: uint16(25333), + 47: uint16(25424), + 48: uint16(25406), + 49: uint16(25421), + 50: uint16(25628), + 51: uint16(25423), + 52: uint16(25494), + 53: uint16(25486), + 54: uint16(25472), + 55: uint16(25515), + 56: uint16(25462), + 57: uint16(25507), + 58: uint16(25487), + 59: uint16(25481), + 60: uint16(25503), + 61: uint16(25525), + 62: uint16(25451), + 63: uint16(25449), + 64: uint16(25534), + 65: uint16(25577), + 66: uint16(25536), + 67: uint16(25542), + 68: uint16(25571), + 69: uint16(25545), + 70: uint16(25554), + 71: uint16(25590), + 72: uint16(25540), + 73: uint16(25622), + 74: uint16(25652), + 75: uint16(25606), + 76: uint16(25619), + 77: uint16(25638), + 78: uint16(25654), + 79: uint16(25885), + 80: uint16(25623), + 81: uint16(25640), + 82: uint16(25615), + 83: uint16(25703), + 84: uint16(25711), + 85: uint16(25718), + 86: uint16(25678), + 87: uint16(25898), + 88: uint16(25749), + 89: uint16(25747), + 90: uint16(25765), + 91: uint16(25769), + 92: uint16(25736), + 93: uint16(25788), + }, + 57: { + 0: uint16(25818), + 1: uint16(25810), + 2: uint16(25797), + 3: uint16(25799), + 4: uint16(25787), + 5: uint16(25816), + 6: uint16(25794), + 7: uint16(25841), + 8: uint16(25831), + 9: uint16(33289), + 10: uint16(25824), + 11: uint16(25825), + 12: uint16(25260), + 13: uint16(25827), + 14: uint16(25839), + 15: uint16(25900), + 16: uint16(25846), + 17: uint16(25844), + 18: uint16(25842), + 19: uint16(25850), + 20: uint16(25856), + 21: uint16(25853), + 22: uint16(25880), + 23: uint16(25884), + 24: uint16(25861), + 25: uint16(25892), + 26: uint16(25891), + 27: uint16(25899), + 28: uint16(25908), + 29: uint16(25909), + 30: uint16(25911), + 31: uint16(25910), + 32: uint16(25912), + 33: uint16(30027), + 34: uint16(25928), + 35: uint16(25942), + 36: uint16(25941), + 37: uint16(25933), + 38: uint16(25944), + 39: uint16(25950), + 40: uint16(25949), + 41: uint16(25970), + 42: uint16(25976), + 43: uint16(25986), + 44: uint16(25987), + 45: uint16(35722), + 46: uint16(26011), + 47: uint16(26015), + 48: uint16(26027), + 49: uint16(26039), + 50: uint16(26051), + 51: uint16(26054), + 52: uint16(26049), + 53: uint16(26052), + 54: uint16(26060), + 55: uint16(26066), + 56: uint16(26075), + 57: uint16(26073), + 58: uint16(26080), + 59: uint16(26081), + 60: uint16(26097), + 61: uint16(26482), + 62: uint16(26122), + 63: uint16(26115), + 64: uint16(26107), + 65: uint16(26483), + 66: uint16(26165), + 67: uint16(26166), + 68: uint16(26164), + 69: uint16(26140), + 70: uint16(26191), + 71: uint16(26180), + 72: uint16(26185), + 73: uint16(26177), + 74: uint16(26206), + 75: uint16(26205), + 76: uint16(26212), + 77: uint16(26215), + 78: uint16(26216), + 79: uint16(26207), + 80: uint16(26210), + 81: uint16(26224), + 82: uint16(26243), + 83: uint16(26248), + 84: uint16(26254), + 85: uint16(26249), + 86: uint16(26244), + 87: uint16(26264), + 88: uint16(26269), + 89: uint16(26305), + 90: uint16(26297), + 91: uint16(26313), + 92: uint16(26302), + 93: uint16(26300), + }, + 58: { + 0: uint16(26308), + 1: uint16(26296), + 2: uint16(26326), + 3: uint16(26330), + 4: uint16(26336), + 5: uint16(26175), + 6: uint16(26342), + 7: uint16(26345), + 8: uint16(26352), + 9: uint16(26357), + 10: uint16(26359), + 11: uint16(26383), + 12: uint16(26390), + 13: uint16(26398), + 14: uint16(26406), + 15: uint16(26407), + 16: uint16(38712), + 17: uint16(26414), + 18: uint16(26431), + 19: uint16(26422), + 20: uint16(26433), + 21: uint16(26424), + 22: uint16(26423), + 23: uint16(26438), + 24: uint16(26462), + 25: uint16(26464), + 26: uint16(26457), + 27: uint16(26467), + 28: uint16(26468), + 29: uint16(26505), + 30: uint16(26480), + 31: uint16(26537), + 32: uint16(26492), + 33: uint16(26474), + 34: uint16(26508), + 35: uint16(26507), + 36: uint16(26534), + 37: uint16(26529), + 38: uint16(26501), + 39: uint16(26551), + 40: uint16(26607), + 41: uint16(26548), + 42: uint16(26604), + 43: uint16(26547), + 44: uint16(26601), + 45: uint16(26552), + 46: uint16(26596), + 47: uint16(26590), + 48: uint16(26589), + 49: uint16(26594), + 50: uint16(26606), + 51: uint16(26553), + 52: uint16(26574), + 53: uint16(26566), + 54: uint16(26599), + 55: uint16(27292), + 56: uint16(26654), + 57: uint16(26694), + 58: uint16(26665), + 59: uint16(26688), + 60: uint16(26701), + 61: uint16(26674), + 62: uint16(26702), + 63: uint16(26803), + 64: uint16(26667), + 65: uint16(26713), + 66: uint16(26723), + 67: uint16(26743), + 68: uint16(26751), + 69: uint16(26783), + 70: uint16(26767), + 71: uint16(26797), + 72: uint16(26772), + 73: uint16(26781), + 74: uint16(26779), + 75: uint16(26755), + 76: uint16(27310), + 77: uint16(26809), + 78: uint16(26740), + 79: uint16(26805), + 80: uint16(26784), + 81: uint16(26810), + 82: uint16(26895), + 83: uint16(26765), + 84: uint16(26750), + 85: uint16(26881), + 86: uint16(26826), + 87: uint16(26888), + 88: uint16(26840), + 89: uint16(26914), + 90: uint16(26918), + 91: uint16(26849), + 92: uint16(26892), + 93: uint16(26829), + }, + 59: { + 0: uint16(26836), + 1: uint16(26855), + 2: uint16(26837), + 3: uint16(26934), + 4: uint16(26898), + 5: uint16(26884), + 6: uint16(26839), + 7: uint16(26851), + 8: uint16(26917), + 9: uint16(26873), + 10: uint16(26848), + 11: uint16(26863), + 12: uint16(26920), + 13: uint16(26922), + 14: uint16(26906), + 15: uint16(26915), + 16: uint16(26913), + 17: uint16(26822), + 18: uint16(27001), + 19: uint16(26999), + 20: uint16(26972), + 21: uint16(27000), + 22: uint16(26987), + 23: uint16(26964), + 24: uint16(27006), + 25: uint16(26990), + 26: uint16(26937), + 27: uint16(26996), + 28: uint16(26941), + 29: uint16(26969), + 30: uint16(26928), + 31: uint16(26977), + 32: uint16(26974), + 33: uint16(26973), + 34: uint16(27009), + 35: uint16(26986), + 36: uint16(27058), + 37: uint16(27054), + 38: uint16(27088), + 39: uint16(27071), + 40: uint16(27073), + 41: uint16(27091), + 42: uint16(27070), + 43: uint16(27086), + 44: uint16(23528), + 45: uint16(27082), + 46: uint16(27101), + 47: uint16(27067), + 48: uint16(27075), + 49: uint16(27047), + 50: uint16(27182), + 51: uint16(27025), + 52: uint16(27040), + 53: uint16(27036), + 54: uint16(27029), + 55: uint16(27060), + 56: uint16(27102), + 57: uint16(27112), + 58: uint16(27138), + 59: uint16(27163), + 60: uint16(27135), + 61: uint16(27402), + 62: uint16(27129), + 63: uint16(27122), + 64: uint16(27111), + 65: uint16(27141), + 66: uint16(27057), + 67: uint16(27166), + 68: uint16(27117), + 69: uint16(27156), + 70: uint16(27115), + 71: uint16(27146), + 72: uint16(27154), + 73: uint16(27329), + 74: uint16(27171), + 75: uint16(27155), + 76: uint16(27204), + 77: uint16(27148), + 78: uint16(27250), + 79: uint16(27190), + 80: uint16(27256), + 81: uint16(27207), + 82: uint16(27234), + 83: uint16(27225), + 84: uint16(27238), + 85: uint16(27208), + 86: uint16(27192), + 87: uint16(27170), + 88: uint16(27280), + 89: uint16(27277), + 90: uint16(27296), + 91: uint16(27268), + 92: uint16(27298), + 93: uint16(27299), + }, + 60: { + 0: uint16(27287), + 1: uint16(34327), + 2: uint16(27323), + 3: uint16(27331), + 4: uint16(27330), + 5: uint16(27320), + 6: uint16(27315), + 7: uint16(27308), + 8: uint16(27358), + 9: uint16(27345), + 10: uint16(27359), + 11: uint16(27306), + 12: uint16(27354), + 13: uint16(27370), + 14: uint16(27387), + 15: uint16(27397), + 16: uint16(34326), + 17: uint16(27386), + 18: uint16(27410), + 19: uint16(27414), + 20: uint16(39729), + 21: uint16(27423), + 22: uint16(27448), + 23: uint16(27447), + 24: uint16(30428), + 25: uint16(27449), + 26: uint16(39150), + 27: uint16(27463), + 28: uint16(27459), + 29: uint16(27465), + 30: uint16(27472), + 31: uint16(27481), + 32: uint16(27476), + 33: uint16(27483), + 34: uint16(27487), + 35: uint16(27489), + 36: uint16(27512), + 37: uint16(27513), + 38: uint16(27519), + 39: uint16(27520), + 40: uint16(27524), + 41: uint16(27523), + 42: uint16(27533), + 43: uint16(27544), + 44: uint16(27541), + 45: uint16(27550), + 46: uint16(27556), + 47: uint16(27562), + 48: uint16(27563), + 49: uint16(27567), + 50: uint16(27570), + 51: uint16(27569), + 52: uint16(27571), + 53: uint16(27575), + 54: uint16(27580), + 55: uint16(27590), + 56: uint16(27595), + 57: uint16(27603), + 58: uint16(27615), + 59: uint16(27628), + 60: uint16(27627), + 61: uint16(27635), + 62: uint16(27631), + 63: uint16(40638), + 64: uint16(27656), + 65: uint16(27667), + 66: uint16(27668), + 67: uint16(27675), + 68: uint16(27684), + 69: uint16(27683), + 70: uint16(27742), + 71: uint16(27733), + 72: uint16(27746), + 73: uint16(27754), + 74: uint16(27778), + 75: uint16(27789), + 76: uint16(27802), + 77: uint16(27777), + 78: uint16(27803), + 79: uint16(27774), + 80: uint16(27752), + 81: uint16(27763), + 82: uint16(27794), + 83: uint16(27792), + 84: uint16(27844), + 85: uint16(27889), + 86: uint16(27859), + 87: uint16(27837), + 88: uint16(27863), + 89: uint16(27845), + 90: uint16(27869), + 91: uint16(27822), + 92: uint16(27825), + 93: uint16(27838), + }, + 61: { + 0: uint16(27834), + 1: uint16(27867), + 2: uint16(27887), + 3: uint16(27865), + 4: uint16(27882), + 5: uint16(27935), + 6: uint16(34893), + 7: uint16(27958), + 8: uint16(27947), + 9: uint16(27965), + 10: uint16(27960), + 11: uint16(27929), + 12: uint16(27957), + 13: uint16(27955), + 14: uint16(27922), + 15: uint16(27916), + 16: uint16(28003), + 17: uint16(28051), + 18: uint16(28004), + 19: uint16(27994), + 20: uint16(28025), + 21: uint16(27993), + 22: uint16(28046), + 23: uint16(28053), + 24: uint16(28644), + 25: uint16(28037), + 26: uint16(28153), + 27: uint16(28181), + 28: uint16(28170), + 29: uint16(28085), + 30: uint16(28103), + 31: uint16(28134), + 32: uint16(28088), + 33: uint16(28102), + 34: uint16(28140), + 35: uint16(28126), + 36: uint16(28108), + 37: uint16(28136), + 38: uint16(28114), + 39: uint16(28101), + 40: uint16(28154), + 41: uint16(28121), + 42: uint16(28132), + 43: uint16(28117), + 44: uint16(28138), + 45: uint16(28142), + 46: uint16(28205), + 47: uint16(28270), + 48: uint16(28206), + 49: uint16(28185), + 50: uint16(28274), + 51: uint16(28255), + 52: uint16(28222), + 53: uint16(28195), + 54: uint16(28267), + 55: uint16(28203), + 56: uint16(28278), + 57: uint16(28237), + 58: uint16(28191), + 59: uint16(28227), + 60: uint16(28218), + 61: uint16(28238), + 62: uint16(28196), + 63: uint16(28415), + 64: uint16(28189), + 65: uint16(28216), + 66: uint16(28290), + 67: uint16(28330), + 68: uint16(28312), + 69: uint16(28361), + 70: uint16(28343), + 71: uint16(28371), + 72: uint16(28349), + 73: uint16(28335), + 74: uint16(28356), + 75: uint16(28338), + 76: uint16(28372), + 77: uint16(28373), + 78: uint16(28303), + 79: uint16(28325), + 80: uint16(28354), + 81: uint16(28319), + 82: uint16(28481), + 83: uint16(28433), + 84: uint16(28748), + 85: uint16(28396), + 86: uint16(28408), + 87: uint16(28414), + 88: uint16(28479), + 89: uint16(28402), + 90: uint16(28465), + 91: uint16(28399), + 92: uint16(28466), + 93: uint16(28364), + }, + 62: { + 0: uint16(28478), + 1: uint16(28435), + 2: uint16(28407), + 3: uint16(28550), + 4: uint16(28538), + 5: uint16(28536), + 6: uint16(28545), + 7: uint16(28544), + 8: uint16(28527), + 9: uint16(28507), + 10: uint16(28659), + 11: uint16(28525), + 12: uint16(28546), + 13: uint16(28540), + 14: uint16(28504), + 15: uint16(28558), + 16: uint16(28561), + 17: uint16(28610), + 18: uint16(28518), + 19: uint16(28595), + 20: uint16(28579), + 21: uint16(28577), + 22: uint16(28580), + 23: uint16(28601), + 24: uint16(28614), + 25: uint16(28586), + 26: uint16(28639), + 27: uint16(28629), + 28: uint16(28652), + 29: uint16(28628), + 30: uint16(28632), + 31: uint16(28657), + 32: uint16(28654), + 33: uint16(28635), + 34: uint16(28681), + 35: uint16(28683), + 36: uint16(28666), + 37: uint16(28689), + 38: uint16(28673), + 39: uint16(28687), + 40: uint16(28670), + 41: uint16(28699), + 42: uint16(28698), + 43: uint16(28532), + 44: uint16(28701), + 45: uint16(28696), + 46: uint16(28703), + 47: uint16(28720), + 48: uint16(28734), + 49: uint16(28722), + 50: uint16(28753), + 51: uint16(28771), + 52: uint16(28825), + 53: uint16(28818), + 54: uint16(28847), + 55: uint16(28913), + 56: uint16(28844), + 57: uint16(28856), + 58: uint16(28851), + 59: uint16(28846), + 60: uint16(28895), + 61: uint16(28875), + 62: uint16(28893), + 63: uint16(28889), + 64: uint16(28937), + 65: uint16(28925), + 66: uint16(28956), + 67: uint16(28953), + 68: uint16(29029), + 69: uint16(29013), + 70: uint16(29064), + 71: uint16(29030), + 72: uint16(29026), + 73: uint16(29004), + 74: uint16(29014), + 75: uint16(29036), + 76: uint16(29071), + 77: uint16(29179), + 78: uint16(29060), + 79: uint16(29077), + 80: uint16(29096), + 81: uint16(29100), + 82: uint16(29143), + 83: uint16(29113), + 84: uint16(29118), + 85: uint16(29138), + 86: uint16(29129), + 87: uint16(29140), + 88: uint16(29134), + 89: uint16(29152), + 90: uint16(29164), + 91: uint16(29159), + 92: uint16(29173), + 93: uint16(29180), + }, + 63: { + 0: uint16(29177), + 1: uint16(29183), + 2: uint16(29197), + 3: uint16(29200), + 4: uint16(29211), + 5: uint16(29224), + 6: uint16(29229), + 7: uint16(29228), + 8: uint16(29232), + 9: uint16(29234), + 10: uint16(29243), + 11: uint16(29244), + 12: uint16(29247), + 13: uint16(29248), + 14: uint16(29254), + 15: uint16(29259), + 16: uint16(29272), + 17: uint16(29300), + 18: uint16(29310), + 19: uint16(29314), + 20: uint16(29313), + 21: uint16(29319), + 22: uint16(29330), + 23: uint16(29334), + 24: uint16(29346), + 25: uint16(29351), + 26: uint16(29369), + 27: uint16(29362), + 28: uint16(29379), + 29: uint16(29382), + 30: uint16(29380), + 31: uint16(29390), + 32: uint16(29394), + 33: uint16(29410), + 34: uint16(29408), + 35: uint16(29409), + 36: uint16(29433), + 37: uint16(29431), + 38: uint16(20495), + 39: uint16(29463), + 40: uint16(29450), + 41: uint16(29468), + 42: uint16(29462), + 43: uint16(29469), + 44: uint16(29492), + 45: uint16(29487), + 46: uint16(29481), + 47: uint16(29477), + 48: uint16(29502), + 49: uint16(29518), + 50: uint16(29519), + 51: uint16(40664), + 52: uint16(29527), + 53: uint16(29546), + 54: uint16(29544), + 55: uint16(29552), + 56: uint16(29560), + 57: uint16(29557), + 58: uint16(29563), + 59: uint16(29562), + 60: uint16(29640), + 61: uint16(29619), + 62: uint16(29646), + 63: uint16(29627), + 64: uint16(29632), + 65: uint16(29669), + 66: uint16(29678), + 67: uint16(29662), + 68: uint16(29858), + 69: uint16(29701), + 70: uint16(29807), + 71: uint16(29733), + 72: uint16(29688), + 73: uint16(29746), + 74: uint16(29754), + 75: uint16(29781), + 76: uint16(29759), + 77: uint16(29791), + 78: uint16(29785), + 79: uint16(29761), + 80: uint16(29788), + 81: uint16(29801), + 82: uint16(29808), + 83: uint16(29795), + 84: uint16(29802), + 85: uint16(29814), + 86: uint16(29822), + 87: uint16(29835), + 88: uint16(29854), + 89: uint16(29863), + 90: uint16(29898), + 91: uint16(29903), + 92: uint16(29908), + 93: uint16(29681), + }, + 64: { + 0: uint16(29920), + 1: uint16(29923), + 2: uint16(29927), + 3: uint16(29929), + 4: uint16(29934), + 5: uint16(29938), + 6: uint16(29936), + 7: uint16(29937), + 8: uint16(29944), + 9: uint16(29943), + 10: uint16(29956), + 11: uint16(29955), + 12: uint16(29957), + 13: uint16(29964), + 14: uint16(29966), + 15: uint16(29965), + 16: uint16(29973), + 17: uint16(29971), + 18: uint16(29982), + 19: uint16(29990), + 20: uint16(29996), + 21: uint16(30012), + 22: uint16(30020), + 23: uint16(30029), + 24: uint16(30026), + 25: uint16(30025), + 26: uint16(30043), + 27: uint16(30022), + 28: uint16(30042), + 29: uint16(30057), + 30: uint16(30052), + 31: uint16(30055), + 32: uint16(30059), + 33: uint16(30061), + 34: uint16(30072), + 35: uint16(30070), + 36: uint16(30086), + 37: uint16(30087), + 38: uint16(30068), + 39: uint16(30090), + 40: uint16(30089), + 41: uint16(30082), + 42: uint16(30100), + 43: uint16(30106), + 44: uint16(30109), + 45: uint16(30117), + 46: uint16(30115), + 47: uint16(30146), + 48: uint16(30131), + 49: uint16(30147), + 50: uint16(30133), + 51: uint16(30141), + 52: uint16(30136), + 53: uint16(30140), + 54: uint16(30129), + 55: uint16(30157), + 56: uint16(30154), + 57: uint16(30162), + 58: uint16(30169), + 59: uint16(30179), + 60: uint16(30174), + 61: uint16(30206), + 62: uint16(30207), + 63: uint16(30204), + 64: uint16(30209), + 65: uint16(30192), + 66: uint16(30202), + 67: uint16(30194), + 68: uint16(30195), + 69: uint16(30219), + 70: uint16(30221), + 71: uint16(30217), + 72: uint16(30239), + 73: uint16(30247), + 74: uint16(30240), + 75: uint16(30241), + 76: uint16(30242), + 77: uint16(30244), + 78: uint16(30260), + 79: uint16(30256), + 80: uint16(30267), + 81: uint16(30279), + 82: uint16(30280), + 83: uint16(30278), + 84: uint16(30300), + 85: uint16(30296), + 86: uint16(30305), + 87: uint16(30306), + 88: uint16(30312), + 89: uint16(30313), + 90: uint16(30314), + 91: uint16(30311), + 92: uint16(30316), + 93: uint16(30320), + }, + 65: { + 0: uint16(30322), + 1: uint16(30326), + 2: uint16(30328), + 3: uint16(30332), + 4: uint16(30336), + 5: uint16(30339), + 6: uint16(30344), + 7: uint16(30347), + 8: uint16(30350), + 9: uint16(30358), + 10: uint16(30355), + 11: uint16(30361), + 12: uint16(30362), + 13: uint16(30384), + 14: uint16(30388), + 15: uint16(30392), + 16: uint16(30393), + 17: uint16(30394), + 18: uint16(30402), + 19: uint16(30413), + 20: uint16(30422), + 21: uint16(30418), + 22: uint16(30430), + 23: uint16(30433), + 24: uint16(30437), + 25: uint16(30439), + 26: uint16(30442), + 27: uint16(34351), + 28: uint16(30459), + 29: uint16(30472), + 30: uint16(30471), + 31: uint16(30468), + 32: uint16(30505), + 33: uint16(30500), + 34: uint16(30494), + 35: uint16(30501), + 36: uint16(30502), + 37: uint16(30491), + 38: uint16(30519), + 39: uint16(30520), + 40: uint16(30535), + 41: uint16(30554), + 42: uint16(30568), + 43: uint16(30571), + 44: uint16(30555), + 45: uint16(30565), + 46: uint16(30591), + 47: uint16(30590), + 48: uint16(30585), + 49: uint16(30606), + 50: uint16(30603), + 51: uint16(30609), + 52: uint16(30624), + 53: uint16(30622), + 54: uint16(30640), + 55: uint16(30646), + 56: uint16(30649), + 57: uint16(30655), + 58: uint16(30652), + 59: uint16(30653), + 60: uint16(30651), + 61: uint16(30663), + 62: uint16(30669), + 63: uint16(30679), + 64: uint16(30682), + 65: uint16(30684), + 66: uint16(30691), + 67: uint16(30702), + 68: uint16(30716), + 69: uint16(30732), + 70: uint16(30738), + 71: uint16(31014), + 72: uint16(30752), + 73: uint16(31018), + 74: uint16(30789), + 75: uint16(30862), + 76: uint16(30836), + 77: uint16(30854), + 78: uint16(30844), + 79: uint16(30874), + 80: uint16(30860), + 81: uint16(30883), + 82: uint16(30901), + 83: uint16(30890), + 84: uint16(30895), + 85: uint16(30929), + 86: uint16(30918), + 87: uint16(30923), + 88: uint16(30932), + 89: uint16(30910), + 90: uint16(30908), + 91: uint16(30917), + 92: uint16(30922), + 93: uint16(30956), + }, + 66: { + 0: uint16(30951), + 1: uint16(30938), + 2: uint16(30973), + 3: uint16(30964), + 4: uint16(30983), + 5: uint16(30994), + 6: uint16(30993), + 7: uint16(31001), + 8: uint16(31020), + 9: uint16(31019), + 10: uint16(31040), + 11: uint16(31072), + 12: uint16(31063), + 13: uint16(31071), + 14: uint16(31066), + 15: uint16(31061), + 16: uint16(31059), + 17: uint16(31098), + 18: uint16(31103), + 19: uint16(31114), + 20: uint16(31133), + 21: uint16(31143), + 22: uint16(40779), + 23: uint16(31146), + 24: uint16(31150), + 25: uint16(31155), + 26: uint16(31161), + 27: uint16(31162), + 28: uint16(31177), + 29: uint16(31189), + 30: uint16(31207), + 31: uint16(31212), + 32: uint16(31201), + 33: uint16(31203), + 34: uint16(31240), + 35: uint16(31245), + 36: uint16(31256), + 37: uint16(31257), + 38: uint16(31264), + 39: uint16(31263), + 40: uint16(31104), + 41: uint16(31281), + 42: uint16(31291), + 43: uint16(31294), + 44: uint16(31287), + 45: uint16(31299), + 46: uint16(31319), + 47: uint16(31305), + 48: uint16(31329), + 49: uint16(31330), + 50: uint16(31337), + 51: uint16(40861), + 52: uint16(31344), + 53: uint16(31353), + 54: uint16(31357), + 55: uint16(31368), + 56: uint16(31383), + 57: uint16(31381), + 58: uint16(31384), + 59: uint16(31382), + 60: uint16(31401), + 61: uint16(31432), + 62: uint16(31408), + 63: uint16(31414), + 64: uint16(31429), + 65: uint16(31428), + 66: uint16(31423), + 67: uint16(36995), + 68: uint16(31431), + 69: uint16(31434), + 70: uint16(31437), + 71: uint16(31439), + 72: uint16(31445), + 73: uint16(31443), + 74: uint16(31449), + 75: uint16(31450), + 76: uint16(31453), + 77: uint16(31457), + 78: uint16(31458), + 79: uint16(31462), + 80: uint16(31469), + 81: uint16(31472), + 82: uint16(31490), + 83: uint16(31503), + 84: uint16(31498), + 85: uint16(31494), + 86: uint16(31539), + 87: uint16(31512), + 88: uint16(31513), + 89: uint16(31518), + 90: uint16(31541), + 91: uint16(31528), + 92: uint16(31542), + 93: uint16(31568), + }, + 67: { + 0: uint16(31610), + 1: uint16(31492), + 2: uint16(31565), + 3: uint16(31499), + 4: uint16(31564), + 5: uint16(31557), + 6: uint16(31605), + 7: uint16(31589), + 8: uint16(31604), + 9: uint16(31591), + 10: uint16(31600), + 11: uint16(31601), + 12: uint16(31596), + 13: uint16(31598), + 14: uint16(31645), + 15: uint16(31640), + 16: uint16(31647), + 17: uint16(31629), + 18: uint16(31644), + 19: uint16(31642), + 20: uint16(31627), + 21: uint16(31634), + 22: uint16(31631), + 23: uint16(31581), + 24: uint16(31641), + 25: uint16(31691), + 26: uint16(31681), + 27: uint16(31692), + 28: uint16(31695), + 29: uint16(31668), + 30: uint16(31686), + 31: uint16(31709), + 32: uint16(31721), + 33: uint16(31761), + 34: uint16(31764), + 35: uint16(31718), + 36: uint16(31717), + 37: uint16(31840), + 38: uint16(31744), + 39: uint16(31751), + 40: uint16(31763), + 41: uint16(31731), + 42: uint16(31735), + 43: uint16(31767), + 44: uint16(31757), + 45: uint16(31734), + 46: uint16(31779), + 47: uint16(31783), + 48: uint16(31786), + 49: uint16(31775), + 50: uint16(31799), + 51: uint16(31787), + 52: uint16(31805), + 53: uint16(31820), + 54: uint16(31811), + 55: uint16(31828), + 56: uint16(31823), + 57: uint16(31808), + 58: uint16(31824), + 59: uint16(31832), + 60: uint16(31839), + 61: uint16(31844), + 62: uint16(31830), + 63: uint16(31845), + 64: uint16(31852), + 65: uint16(31861), + 66: uint16(31875), + 67: uint16(31888), + 68: uint16(31908), + 69: uint16(31917), + 70: uint16(31906), + 71: uint16(31915), + 72: uint16(31905), + 73: uint16(31912), + 74: uint16(31923), + 75: uint16(31922), + 76: uint16(31921), + 77: uint16(31918), + 78: uint16(31929), + 79: uint16(31933), + 80: uint16(31936), + 81: uint16(31941), + 82: uint16(31938), + 83: uint16(31960), + 84: uint16(31954), + 85: uint16(31964), + 86: uint16(31970), + 87: uint16(39739), + 88: uint16(31983), + 89: uint16(31986), + 90: uint16(31988), + 91: uint16(31990), + 92: uint16(31994), + 93: uint16(32006), + }, + 68: { + 0: uint16(32002), + 1: uint16(32028), + 2: uint16(32021), + 3: uint16(32010), + 4: uint16(32069), + 5: uint16(32075), + 6: uint16(32046), + 7: uint16(32050), + 8: uint16(32063), + 9: uint16(32053), + 10: uint16(32070), + 11: uint16(32115), + 12: uint16(32086), + 13: uint16(32078), + 14: uint16(32114), + 15: uint16(32104), + 16: uint16(32110), + 17: uint16(32079), + 18: uint16(32099), + 19: uint16(32147), + 20: uint16(32137), + 21: uint16(32091), + 22: uint16(32143), + 23: uint16(32125), + 24: uint16(32155), + 25: uint16(32186), + 26: uint16(32174), + 27: uint16(32163), + 28: uint16(32181), + 29: uint16(32199), + 30: uint16(32189), + 31: uint16(32171), + 32: uint16(32317), + 33: uint16(32162), + 34: uint16(32175), + 35: uint16(32220), + 36: uint16(32184), + 37: uint16(32159), + 38: uint16(32176), + 39: uint16(32216), + 40: uint16(32221), + 41: uint16(32228), + 42: uint16(32222), + 43: uint16(32251), + 44: uint16(32242), + 45: uint16(32225), + 46: uint16(32261), + 47: uint16(32266), + 48: uint16(32291), + 49: uint16(32289), + 50: uint16(32274), + 51: uint16(32305), + 52: uint16(32287), + 53: uint16(32265), + 54: uint16(32267), + 55: uint16(32290), + 56: uint16(32326), + 57: uint16(32358), + 58: uint16(32315), + 59: uint16(32309), + 60: uint16(32313), + 61: uint16(32323), + 62: uint16(32311), + 63: uint16(32306), + 64: uint16(32314), + 65: uint16(32359), + 66: uint16(32349), + 67: uint16(32342), + 68: uint16(32350), + 69: uint16(32345), + 70: uint16(32346), + 71: uint16(32377), + 72: uint16(32362), + 73: uint16(32361), + 74: uint16(32380), + 75: uint16(32379), + 76: uint16(32387), + 77: uint16(32213), + 78: uint16(32381), + 79: uint16(36782), + 80: uint16(32383), + 81: uint16(32392), + 82: uint16(32393), + 83: uint16(32396), + 84: uint16(32402), + 85: uint16(32400), + 86: uint16(32403), + 87: uint16(32404), + 88: uint16(32406), + 89: uint16(32398), + 90: uint16(32411), + 91: uint16(32412), + 92: uint16(32568), + 93: uint16(32570), + }, + 69: { + 0: uint16(32581), + 1: uint16(32588), + 2: uint16(32589), + 3: uint16(32590), + 4: uint16(32592), + 5: uint16(32593), + 6: uint16(32597), + 7: uint16(32596), + 8: uint16(32600), + 9: uint16(32607), + 10: uint16(32608), + 11: uint16(32616), + 12: uint16(32617), + 13: uint16(32615), + 14: uint16(32632), + 15: uint16(32642), + 16: uint16(32646), + 17: uint16(32643), + 18: uint16(32648), + 19: uint16(32647), + 20: uint16(32652), + 21: uint16(32660), + 22: uint16(32670), + 23: uint16(32669), + 24: uint16(32666), + 25: uint16(32675), + 26: uint16(32687), + 27: uint16(32690), + 28: uint16(32697), + 29: uint16(32686), + 30: uint16(32694), + 31: uint16(32696), + 32: uint16(35697), + 33: uint16(32709), + 34: uint16(32710), + 35: uint16(32714), + 36: uint16(32725), + 37: uint16(32724), + 38: uint16(32737), + 39: uint16(32742), + 40: uint16(32745), + 41: uint16(32755), + 42: uint16(32761), + 43: uint16(39132), + 44: uint16(32774), + 45: uint16(32772), + 46: uint16(32779), + 47: uint16(32786), + 48: uint16(32792), + 49: uint16(32793), + 50: uint16(32796), + 51: uint16(32801), + 52: uint16(32808), + 53: uint16(32831), + 54: uint16(32827), + 55: uint16(32842), + 56: uint16(32838), + 57: uint16(32850), + 58: uint16(32856), + 59: uint16(32858), + 60: uint16(32863), + 61: uint16(32866), + 62: uint16(32872), + 63: uint16(32883), + 64: uint16(32882), + 65: uint16(32880), + 66: uint16(32886), + 67: uint16(32889), + 68: uint16(32893), + 69: uint16(32895), + 70: uint16(32900), + 71: uint16(32902), + 72: uint16(32901), + 73: uint16(32923), + 74: uint16(32915), + 75: uint16(32922), + 76: uint16(32941), + 77: uint16(20880), + 78: uint16(32940), + 79: uint16(32987), + 80: uint16(32997), + 81: uint16(32985), + 82: uint16(32989), + 83: uint16(32964), + 84: uint16(32986), + 85: uint16(32982), + 86: uint16(33033), + 87: uint16(33007), + 88: uint16(33009), + 89: uint16(33051), + 90: uint16(33065), + 91: uint16(33059), + 92: uint16(33071), + 93: uint16(33099), + }, + 70: { + 0: uint16(38539), + 1: uint16(33094), + 2: uint16(33086), + 3: uint16(33107), + 4: uint16(33105), + 5: uint16(33020), + 6: uint16(33137), + 7: uint16(33134), + 8: uint16(33125), + 9: uint16(33126), + 10: uint16(33140), + 11: uint16(33155), + 12: uint16(33160), + 13: uint16(33162), + 14: uint16(33152), + 15: uint16(33154), + 16: uint16(33184), + 17: uint16(33173), + 18: uint16(33188), + 19: uint16(33187), + 20: uint16(33119), + 21: uint16(33171), + 22: uint16(33193), + 23: uint16(33200), + 24: uint16(33205), + 25: uint16(33214), + 26: uint16(33208), + 27: uint16(33213), + 28: uint16(33216), + 29: uint16(33218), + 30: uint16(33210), + 31: uint16(33225), + 32: uint16(33229), + 33: uint16(33233), + 34: uint16(33241), + 35: uint16(33240), + 36: uint16(33224), + 37: uint16(33242), + 38: uint16(33247), + 39: uint16(33248), + 40: uint16(33255), + 41: uint16(33274), + 42: uint16(33275), + 43: uint16(33278), + 44: uint16(33281), + 45: uint16(33282), + 46: uint16(33285), + 47: uint16(33287), + 48: uint16(33290), + 49: uint16(33293), + 50: uint16(33296), + 51: uint16(33302), + 52: uint16(33321), + 53: uint16(33323), + 54: uint16(33336), + 55: uint16(33331), + 56: uint16(33344), + 57: uint16(33369), + 58: uint16(33368), + 59: uint16(33373), + 60: uint16(33370), + 61: uint16(33375), + 62: uint16(33380), + 63: uint16(33378), + 64: uint16(33384), + 65: uint16(33386), + 66: uint16(33387), + 67: uint16(33326), + 68: uint16(33393), + 69: uint16(33399), + 70: uint16(33400), + 71: uint16(33406), + 72: uint16(33421), + 73: uint16(33426), + 74: uint16(33451), + 75: uint16(33439), + 76: uint16(33467), + 77: uint16(33452), + 78: uint16(33505), + 79: uint16(33507), + 80: uint16(33503), + 81: uint16(33490), + 82: uint16(33524), + 83: uint16(33523), + 84: uint16(33530), + 85: uint16(33683), + 86: uint16(33539), + 87: uint16(33531), + 88: uint16(33529), + 89: uint16(33502), + 90: uint16(33542), + 91: uint16(33500), + 92: uint16(33545), + 93: uint16(33497), + }, + 71: { + 0: uint16(33589), + 1: uint16(33588), + 2: uint16(33558), + 3: uint16(33586), + 4: uint16(33585), + 5: uint16(33600), + 6: uint16(33593), + 7: uint16(33616), + 8: uint16(33605), + 9: uint16(33583), + 10: uint16(33579), + 11: uint16(33559), + 12: uint16(33560), + 13: uint16(33669), + 14: uint16(33690), + 15: uint16(33706), + 16: uint16(33695), + 17: uint16(33698), + 18: uint16(33686), + 19: uint16(33571), + 20: uint16(33678), + 21: uint16(33671), + 22: uint16(33674), + 23: uint16(33660), + 24: uint16(33717), + 25: uint16(33651), + 26: uint16(33653), + 27: uint16(33696), + 28: uint16(33673), + 29: uint16(33704), + 30: uint16(33780), + 31: uint16(33811), + 32: uint16(33771), + 33: uint16(33742), + 34: uint16(33789), + 35: uint16(33795), + 36: uint16(33752), + 37: uint16(33803), + 38: uint16(33729), + 39: uint16(33783), + 40: uint16(33799), + 41: uint16(33760), + 42: uint16(33778), + 43: uint16(33805), + 44: uint16(33826), + 45: uint16(33824), + 46: uint16(33725), + 47: uint16(33848), + 48: uint16(34054), + 49: uint16(33787), + 50: uint16(33901), + 51: uint16(33834), + 52: uint16(33852), + 53: uint16(34138), + 54: uint16(33924), + 55: uint16(33911), + 56: uint16(33899), + 57: uint16(33965), + 58: uint16(33902), + 59: uint16(33922), + 60: uint16(33897), + 61: uint16(33862), + 62: uint16(33836), + 63: uint16(33903), + 64: uint16(33913), + 65: uint16(33845), + 66: uint16(33994), + 67: uint16(33890), + 68: uint16(33977), + 69: uint16(33983), + 70: uint16(33951), + 71: uint16(34009), + 72: uint16(33997), + 73: uint16(33979), + 74: uint16(34010), + 75: uint16(34000), + 76: uint16(33985), + 77: uint16(33990), + 78: uint16(34006), + 79: uint16(33953), + 80: uint16(34081), + 81: uint16(34047), + 82: uint16(34036), + 83: uint16(34071), + 84: uint16(34072), + 85: uint16(34092), + 86: uint16(34079), + 87: uint16(34069), + 88: uint16(34068), + 89: uint16(34044), + 90: uint16(34112), + 91: uint16(34147), + 92: uint16(34136), + 93: uint16(34120), + }, + 72: { + 0: uint16(34113), + 1: uint16(34306), + 2: uint16(34123), + 3: uint16(34133), + 4: uint16(34176), + 5: uint16(34212), + 6: uint16(34184), + 7: uint16(34193), + 8: uint16(34186), + 9: uint16(34216), + 10: uint16(34157), + 11: uint16(34196), + 12: uint16(34203), + 13: uint16(34282), + 14: uint16(34183), + 15: uint16(34204), + 16: uint16(34167), + 17: uint16(34174), + 18: uint16(34192), + 19: uint16(34249), + 20: uint16(34234), + 21: uint16(34255), + 22: uint16(34233), + 23: uint16(34256), + 24: uint16(34261), + 25: uint16(34269), + 26: uint16(34277), + 27: uint16(34268), + 28: uint16(34297), + 29: uint16(34314), + 30: uint16(34323), + 31: uint16(34315), + 32: uint16(34302), + 33: uint16(34298), + 34: uint16(34310), + 35: uint16(34338), + 36: uint16(34330), + 37: uint16(34352), + 38: uint16(34367), + 39: uint16(34381), + 40: uint16(20053), + 41: uint16(34388), + 42: uint16(34399), + 43: uint16(34407), + 44: uint16(34417), + 45: uint16(34451), + 46: uint16(34467), + 47: uint16(34473), + 48: uint16(34474), + 49: uint16(34443), + 50: uint16(34444), + 51: uint16(34486), + 52: uint16(34479), + 53: uint16(34500), + 54: uint16(34502), + 55: uint16(34480), + 56: uint16(34505), + 57: uint16(34851), + 58: uint16(34475), + 59: uint16(34516), + 60: uint16(34526), + 61: uint16(34537), + 62: uint16(34540), + 63: uint16(34527), + 64: uint16(34523), + 65: uint16(34543), + 66: uint16(34578), + 67: uint16(34566), + 68: uint16(34568), + 69: uint16(34560), + 70: uint16(34563), + 71: uint16(34555), + 72: uint16(34577), + 73: uint16(34569), + 74: uint16(34573), + 75: uint16(34553), + 76: uint16(34570), + 77: uint16(34612), + 78: uint16(34623), + 79: uint16(34615), + 80: uint16(34619), + 81: uint16(34597), + 82: uint16(34601), + 83: uint16(34586), + 84: uint16(34656), + 85: uint16(34655), + 86: uint16(34680), + 87: uint16(34636), + 88: uint16(34638), + 89: uint16(34676), + 90: uint16(34647), + 91: uint16(34664), + 92: uint16(34670), + 93: uint16(34649), + }, + 73: { + 0: uint16(34643), + 1: uint16(34659), + 2: uint16(34666), + 3: uint16(34821), + 4: uint16(34722), + 5: uint16(34719), + 6: uint16(34690), + 7: uint16(34735), + 8: uint16(34763), + 9: uint16(34749), + 10: uint16(34752), + 11: uint16(34768), + 12: uint16(38614), + 13: uint16(34731), + 14: uint16(34756), + 15: uint16(34739), + 16: uint16(34759), + 17: uint16(34758), + 18: uint16(34747), + 19: uint16(34799), + 20: uint16(34802), + 21: uint16(34784), + 22: uint16(34831), + 23: uint16(34829), + 24: uint16(34814), + 25: uint16(34806), + 26: uint16(34807), + 27: uint16(34830), + 28: uint16(34770), + 29: uint16(34833), + 30: uint16(34838), + 31: uint16(34837), + 32: uint16(34850), + 33: uint16(34849), + 34: uint16(34865), + 35: uint16(34870), + 36: uint16(34873), + 37: uint16(34855), + 38: uint16(34875), + 39: uint16(34884), + 40: uint16(34882), + 41: uint16(34898), + 42: uint16(34905), + 43: uint16(34910), + 44: uint16(34914), + 45: uint16(34923), + 46: uint16(34945), + 47: uint16(34942), + 48: uint16(34974), + 49: uint16(34933), + 50: uint16(34941), + 51: uint16(34997), + 52: uint16(34930), + 53: uint16(34946), + 54: uint16(34967), + 55: uint16(34962), + 56: uint16(34990), + 57: uint16(34969), + 58: uint16(34978), + 59: uint16(34957), + 60: uint16(34980), + 61: uint16(34992), + 62: uint16(35007), + 63: uint16(34993), + 64: uint16(35011), + 65: uint16(35012), + 66: uint16(35028), + 67: uint16(35032), + 68: uint16(35033), + 69: uint16(35037), + 70: uint16(35065), + 71: uint16(35074), + 72: uint16(35068), + 73: uint16(35060), + 74: uint16(35048), + 75: uint16(35058), + 76: uint16(35076), + 77: uint16(35084), + 78: uint16(35082), + 79: uint16(35091), + 80: uint16(35139), + 81: uint16(35102), + 82: uint16(35109), + 83: uint16(35114), + 84: uint16(35115), + 85: uint16(35137), + 86: uint16(35140), + 87: uint16(35131), + 88: uint16(35126), + 89: uint16(35128), + 90: uint16(35148), + 91: uint16(35101), + 92: uint16(35168), + 93: uint16(35166), + }, + 74: { + 0: uint16(35174), + 1: uint16(35172), + 2: uint16(35181), + 3: uint16(35178), + 4: uint16(35183), + 5: uint16(35188), + 6: uint16(35191), + 7: uint16(35198), + 8: uint16(35203), + 9: uint16(35208), + 10: uint16(35210), + 11: uint16(35219), + 12: uint16(35224), + 13: uint16(35233), + 14: uint16(35241), + 15: uint16(35238), + 16: uint16(35244), + 17: uint16(35247), + 18: uint16(35250), + 19: uint16(35258), + 20: uint16(35261), + 21: uint16(35263), + 22: uint16(35264), + 23: uint16(35290), + 24: uint16(35292), + 25: uint16(35293), + 26: uint16(35303), + 27: uint16(35316), + 28: uint16(35320), + 29: uint16(35331), + 30: uint16(35350), + 31: uint16(35344), + 32: uint16(35340), + 33: uint16(35355), + 34: uint16(35357), + 35: uint16(35365), + 36: uint16(35382), + 37: uint16(35393), + 38: uint16(35419), + 39: uint16(35410), + 40: uint16(35398), + 41: uint16(35400), + 42: uint16(35452), + 43: uint16(35437), + 44: uint16(35436), + 45: uint16(35426), + 46: uint16(35461), + 47: uint16(35458), + 48: uint16(35460), + 49: uint16(35496), + 50: uint16(35489), + 51: uint16(35473), + 52: uint16(35493), + 53: uint16(35494), + 54: uint16(35482), + 55: uint16(35491), + 56: uint16(35524), + 57: uint16(35533), + 58: uint16(35522), + 59: uint16(35546), + 60: uint16(35563), + 61: uint16(35571), + 62: uint16(35559), + 63: uint16(35556), + 64: uint16(35569), + 65: uint16(35604), + 66: uint16(35552), + 67: uint16(35554), + 68: uint16(35575), + 69: uint16(35550), + 70: uint16(35547), + 71: uint16(35596), + 72: uint16(35591), + 73: uint16(35610), + 74: uint16(35553), + 75: uint16(35606), + 76: uint16(35600), + 77: uint16(35607), + 78: uint16(35616), + 79: uint16(35635), + 80: uint16(38827), + 81: uint16(35622), + 82: uint16(35627), + 83: uint16(35646), + 84: uint16(35624), + 85: uint16(35649), + 86: uint16(35660), + 87: uint16(35663), + 88: uint16(35662), + 89: uint16(35657), + 90: uint16(35670), + 91: uint16(35675), + 92: uint16(35674), + 93: uint16(35691), + }, + 75: { + 0: uint16(35679), + 1: uint16(35692), + 2: uint16(35695), + 3: uint16(35700), + 4: uint16(35709), + 5: uint16(35712), + 6: uint16(35724), + 7: uint16(35726), + 8: uint16(35730), + 9: uint16(35731), + 10: uint16(35734), + 11: uint16(35737), + 12: uint16(35738), + 13: uint16(35898), + 14: uint16(35905), + 15: uint16(35903), + 16: uint16(35912), + 17: uint16(35916), + 18: uint16(35918), + 19: uint16(35920), + 20: uint16(35925), + 21: uint16(35938), + 22: uint16(35948), + 23: uint16(35960), + 24: uint16(35962), + 25: uint16(35970), + 26: uint16(35977), + 27: uint16(35973), + 28: uint16(35978), + 29: uint16(35981), + 30: uint16(35982), + 31: uint16(35988), + 32: uint16(35964), + 33: uint16(35992), + 34: uint16(25117), + 35: uint16(36013), + 36: uint16(36010), + 37: uint16(36029), + 38: uint16(36018), + 39: uint16(36019), + 40: uint16(36014), + 41: uint16(36022), + 42: uint16(36040), + 43: uint16(36033), + 44: uint16(36068), + 45: uint16(36067), + 46: uint16(36058), + 47: uint16(36093), + 48: uint16(36090), + 49: uint16(36091), + 50: uint16(36100), + 51: uint16(36101), + 52: uint16(36106), + 53: uint16(36103), + 54: uint16(36111), + 55: uint16(36109), + 56: uint16(36112), + 57: uint16(40782), + 58: uint16(36115), + 59: uint16(36045), + 60: uint16(36116), + 61: uint16(36118), + 62: uint16(36199), + 63: uint16(36205), + 64: uint16(36209), + 65: uint16(36211), + 66: uint16(36225), + 67: uint16(36249), + 68: uint16(36290), + 69: uint16(36286), + 70: uint16(36282), + 71: uint16(36303), + 72: uint16(36314), + 73: uint16(36310), + 74: uint16(36300), + 75: uint16(36315), + 76: uint16(36299), + 77: uint16(36330), + 78: uint16(36331), + 79: uint16(36319), + 80: uint16(36323), + 81: uint16(36348), + 82: uint16(36360), + 83: uint16(36361), + 84: uint16(36351), + 85: uint16(36381), + 86: uint16(36382), + 87: uint16(36368), + 88: uint16(36383), + 89: uint16(36418), + 90: uint16(36405), + 91: uint16(36400), + 92: uint16(36404), + 93: uint16(36426), + }, + 76: { + 0: uint16(36423), + 1: uint16(36425), + 2: uint16(36428), + 3: uint16(36432), + 4: uint16(36424), + 5: uint16(36441), + 6: uint16(36452), + 7: uint16(36448), + 8: uint16(36394), + 9: uint16(36451), + 10: uint16(36437), + 11: uint16(36470), + 12: uint16(36466), + 13: uint16(36476), + 14: uint16(36481), + 15: uint16(36487), + 16: uint16(36485), + 17: uint16(36484), + 18: uint16(36491), + 19: uint16(36490), + 20: uint16(36499), + 21: uint16(36497), + 22: uint16(36500), + 23: uint16(36505), + 24: uint16(36522), + 25: uint16(36513), + 26: uint16(36524), + 27: uint16(36528), + 28: uint16(36550), + 29: uint16(36529), + 30: uint16(36542), + 31: uint16(36549), + 32: uint16(36552), + 33: uint16(36555), + 34: uint16(36571), + 35: uint16(36579), + 36: uint16(36604), + 37: uint16(36603), + 38: uint16(36587), + 39: uint16(36606), + 40: uint16(36618), + 41: uint16(36613), + 42: uint16(36629), + 43: uint16(36626), + 44: uint16(36633), + 45: uint16(36627), + 46: uint16(36636), + 47: uint16(36639), + 48: uint16(36635), + 49: uint16(36620), + 50: uint16(36646), + 51: uint16(36659), + 52: uint16(36667), + 53: uint16(36665), + 54: uint16(36677), + 55: uint16(36674), + 56: uint16(36670), + 57: uint16(36684), + 58: uint16(36681), + 59: uint16(36678), + 60: uint16(36686), + 61: uint16(36695), + 62: uint16(36700), + 63: uint16(36706), + 64: uint16(36707), + 65: uint16(36708), + 66: uint16(36764), + 67: uint16(36767), + 68: uint16(36771), + 69: uint16(36781), + 70: uint16(36783), + 71: uint16(36791), + 72: uint16(36826), + 73: uint16(36837), + 74: uint16(36834), + 75: uint16(36842), + 76: uint16(36847), + 77: uint16(36999), + 78: uint16(36852), + 79: uint16(36869), + 80: uint16(36857), + 81: uint16(36858), + 82: uint16(36881), + 83: uint16(36885), + 84: uint16(36897), + 85: uint16(36877), + 86: uint16(36894), + 87: uint16(36886), + 88: uint16(36875), + 89: uint16(36903), + 90: uint16(36918), + 91: uint16(36917), + 92: uint16(36921), + 93: uint16(36856), + }, + 77: { + 0: uint16(36943), + 1: uint16(36944), + 2: uint16(36945), + 3: uint16(36946), + 4: uint16(36878), + 5: uint16(36937), + 6: uint16(36926), + 7: uint16(36950), + 8: uint16(36952), + 9: uint16(36958), + 10: uint16(36968), + 11: uint16(36975), + 12: uint16(36982), + 13: uint16(38568), + 14: uint16(36978), + 15: uint16(36994), + 16: uint16(36989), + 17: uint16(36993), + 18: uint16(36992), + 19: uint16(37002), + 20: uint16(37001), + 21: uint16(37007), + 22: uint16(37032), + 23: uint16(37039), + 24: uint16(37041), + 25: uint16(37045), + 26: uint16(37090), + 27: uint16(37092), + 28: uint16(25160), + 29: uint16(37083), + 30: uint16(37122), + 31: uint16(37138), + 32: uint16(37145), + 33: uint16(37170), + 34: uint16(37168), + 35: uint16(37194), + 36: uint16(37206), + 37: uint16(37208), + 38: uint16(37219), + 39: uint16(37221), + 40: uint16(37225), + 41: uint16(37235), + 42: uint16(37234), + 43: uint16(37259), + 44: uint16(37257), + 45: uint16(37250), + 46: uint16(37282), + 47: uint16(37291), + 48: uint16(37295), + 49: uint16(37290), + 50: uint16(37301), + 51: uint16(37300), + 52: uint16(37306), + 53: uint16(37312), + 54: uint16(37313), + 55: uint16(37321), + 56: uint16(37323), + 57: uint16(37328), + 58: uint16(37334), + 59: uint16(37343), + 60: uint16(37345), + 61: uint16(37339), + 62: uint16(37372), + 63: uint16(37365), + 64: uint16(37366), + 65: uint16(37406), + 66: uint16(37375), + 67: uint16(37396), + 68: uint16(37420), + 69: uint16(37397), + 70: uint16(37393), + 71: uint16(37470), + 72: uint16(37463), + 73: uint16(37445), + 74: uint16(37449), + 75: uint16(37476), + 76: uint16(37448), + 77: uint16(37525), + 78: uint16(37439), + 79: uint16(37451), + 80: uint16(37456), + 81: uint16(37532), + 82: uint16(37526), + 83: uint16(37523), + 84: uint16(37531), + 85: uint16(37466), + 86: uint16(37583), + 87: uint16(37561), + 88: uint16(37559), + 89: uint16(37609), + 90: uint16(37647), + 91: uint16(37626), + 92: uint16(37700), + 93: uint16(37678), + }, + 78: { + 0: uint16(37657), + 1: uint16(37666), + 2: uint16(37658), + 3: uint16(37667), + 4: uint16(37690), + 5: uint16(37685), + 6: uint16(37691), + 7: uint16(37724), + 8: uint16(37728), + 9: uint16(37756), + 10: uint16(37742), + 11: uint16(37718), + 12: uint16(37808), + 13: uint16(37804), + 14: uint16(37805), + 15: uint16(37780), + 16: uint16(37817), + 17: uint16(37846), + 18: uint16(37847), + 19: uint16(37864), + 20: uint16(37861), + 21: uint16(37848), + 22: uint16(37827), + 23: uint16(37853), + 24: uint16(37840), + 25: uint16(37832), + 26: uint16(37860), + 27: uint16(37914), + 28: uint16(37908), + 29: uint16(37907), + 30: uint16(37891), + 31: uint16(37895), + 32: uint16(37904), + 33: uint16(37942), + 34: uint16(37931), + 35: uint16(37941), + 36: uint16(37921), + 37: uint16(37946), + 38: uint16(37953), + 39: uint16(37970), + 40: uint16(37956), + 41: uint16(37979), + 42: uint16(37984), + 43: uint16(37986), + 44: uint16(37982), + 45: uint16(37994), + 46: uint16(37417), + 47: uint16(38000), + 48: uint16(38005), + 49: uint16(38007), + 50: uint16(38013), + 51: uint16(37978), + 52: uint16(38012), + 53: uint16(38014), + 54: uint16(38017), + 55: uint16(38015), + 56: uint16(38274), + 57: uint16(38279), + 58: uint16(38282), + 59: uint16(38292), + 60: uint16(38294), + 61: uint16(38296), + 62: uint16(38297), + 63: uint16(38304), + 64: uint16(38312), + 65: uint16(38311), + 66: uint16(38317), + 67: uint16(38332), + 68: uint16(38331), + 69: uint16(38329), + 70: uint16(38334), + 71: uint16(38346), + 72: uint16(28662), + 73: uint16(38339), + 74: uint16(38349), + 75: uint16(38348), + 76: uint16(38357), + 77: uint16(38356), + 78: uint16(38358), + 79: uint16(38364), + 80: uint16(38369), + 81: uint16(38373), + 82: uint16(38370), + 83: uint16(38433), + 84: uint16(38440), + 85: uint16(38446), + 86: uint16(38447), + 87: uint16(38466), + 88: uint16(38476), + 89: uint16(38479), + 90: uint16(38475), + 91: uint16(38519), + 92: uint16(38492), + 93: uint16(38494), + }, + 79: { + 0: uint16(38493), + 1: uint16(38495), + 2: uint16(38502), + 3: uint16(38514), + 4: uint16(38508), + 5: uint16(38541), + 6: uint16(38552), + 7: uint16(38549), + 8: uint16(38551), + 9: uint16(38570), + 10: uint16(38567), + 11: uint16(38577), + 12: uint16(38578), + 13: uint16(38576), + 14: uint16(38580), + 15: uint16(38582), + 16: uint16(38584), + 17: uint16(38585), + 18: uint16(38606), + 19: uint16(38603), + 20: uint16(38601), + 21: uint16(38605), + 22: uint16(35149), + 23: uint16(38620), + 24: uint16(38669), + 25: uint16(38613), + 26: uint16(38649), + 27: uint16(38660), + 28: uint16(38662), + 29: uint16(38664), + 30: uint16(38675), + 31: uint16(38670), + 32: uint16(38673), + 33: uint16(38671), + 34: uint16(38678), + 35: uint16(38681), + 36: uint16(38692), + 37: uint16(38698), + 38: uint16(38704), + 39: uint16(38713), + 40: uint16(38717), + 41: uint16(38718), + 42: uint16(38724), + 43: uint16(38726), + 44: uint16(38728), + 45: uint16(38722), + 46: uint16(38729), + 47: uint16(38748), + 48: uint16(38752), + 49: uint16(38756), + 50: uint16(38758), + 51: uint16(38760), + 52: uint16(21202), + 53: uint16(38763), + 54: uint16(38769), + 55: uint16(38777), + 56: uint16(38789), + 57: uint16(38780), + 58: uint16(38785), + 59: uint16(38778), + 60: uint16(38790), + 61: uint16(38795), + 62: uint16(38799), + 63: uint16(38800), + 64: uint16(38812), + 65: uint16(38824), + 66: uint16(38822), + 67: uint16(38819), + 68: uint16(38835), + 69: uint16(38836), + 70: uint16(38851), + 71: uint16(38854), + 72: uint16(38856), + 73: uint16(38859), + 74: uint16(38876), + 75: uint16(38893), + 76: uint16(40783), + 77: uint16(38898), + 78: uint16(31455), + 79: uint16(38902), + 80: uint16(38901), + 81: uint16(38927), + 82: uint16(38924), + 83: uint16(38968), + 84: uint16(38948), + 85: uint16(38945), + 86: uint16(38967), + 87: uint16(38973), + 88: uint16(38982), + 89: uint16(38991), + 90: uint16(38987), + 91: uint16(39019), + 92: uint16(39023), + 93: uint16(39024), + }, + 80: { + 0: uint16(39025), + 1: uint16(39028), + 2: uint16(39027), + 3: uint16(39082), + 4: uint16(39087), + 5: uint16(39089), + 6: uint16(39094), + 7: uint16(39108), + 8: uint16(39107), + 9: uint16(39110), + 10: uint16(39145), + 11: uint16(39147), + 12: uint16(39171), + 13: uint16(39177), + 14: uint16(39186), + 15: uint16(39188), + 16: uint16(39192), + 17: uint16(39201), + 18: uint16(39197), + 19: uint16(39198), + 20: uint16(39204), + 21: uint16(39200), + 22: uint16(39212), + 23: uint16(39214), + 24: uint16(39229), + 25: uint16(39230), + 26: uint16(39234), + 27: uint16(39241), + 28: uint16(39237), + 29: uint16(39248), + 30: uint16(39243), + 31: uint16(39249), + 32: uint16(39250), + 33: uint16(39244), + 34: uint16(39253), + 35: uint16(39319), + 36: uint16(39320), + 37: uint16(39333), + 38: uint16(39341), + 39: uint16(39342), + 40: uint16(39356), + 41: uint16(39391), + 42: uint16(39387), + 43: uint16(39389), + 44: uint16(39384), + 45: uint16(39377), + 46: uint16(39405), + 47: uint16(39406), + 48: uint16(39409), + 49: uint16(39410), + 50: uint16(39419), + 51: uint16(39416), + 52: uint16(39425), + 53: uint16(39439), + 54: uint16(39429), + 55: uint16(39394), + 56: uint16(39449), + 57: uint16(39467), + 58: uint16(39479), + 59: uint16(39493), + 60: uint16(39490), + 61: uint16(39488), + 62: uint16(39491), + 63: uint16(39486), + 64: uint16(39509), + 65: uint16(39501), + 66: uint16(39515), + 67: uint16(39511), + 68: uint16(39519), + 69: uint16(39522), + 70: uint16(39525), + 71: uint16(39524), + 72: uint16(39529), + 73: uint16(39531), + 74: uint16(39530), + 75: uint16(39597), + 76: uint16(39600), + 77: uint16(39612), + 78: uint16(39616), + 79: uint16(39631), + 80: uint16(39633), + 81: uint16(39635), + 82: uint16(39636), + 83: uint16(39646), + 84: uint16(39647), + 85: uint16(39650), + 86: uint16(39651), + 87: uint16(39654), + 88: uint16(39663), + 89: uint16(39659), + 90: uint16(39662), + 91: uint16(39668), + 92: uint16(39665), + 93: uint16(39671), + }, + 81: { + 0: uint16(39675), + 1: uint16(39686), + 2: uint16(39704), + 3: uint16(39706), + 4: uint16(39711), + 5: uint16(39714), + 6: uint16(39715), + 7: uint16(39717), + 8: uint16(39719), + 9: uint16(39720), + 10: uint16(39721), + 11: uint16(39722), + 12: uint16(39726), + 13: uint16(39727), + 14: uint16(39730), + 15: uint16(39748), + 16: uint16(39747), + 17: uint16(39759), + 18: uint16(39757), + 19: uint16(39758), + 20: uint16(39761), + 21: uint16(39768), + 22: uint16(39796), + 23: uint16(39827), + 24: uint16(39811), + 25: uint16(39825), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39839), + 29: uint16(39840), + 30: uint16(39848), + 31: uint16(39860), + 32: uint16(39872), + 33: uint16(39882), + 34: uint16(39865), + 35: uint16(39878), + 36: uint16(39887), + 37: uint16(39889), + 38: uint16(39890), + 39: uint16(39907), + 40: uint16(39906), + 41: uint16(39908), + 42: uint16(39892), + 43: uint16(39905), + 44: uint16(39994), + 45: uint16(39922), + 46: uint16(39921), + 47: uint16(39920), + 48: uint16(39957), + 49: uint16(39956), + 50: uint16(39945), + 51: uint16(39955), + 52: uint16(39948), + 53: uint16(39942), + 54: uint16(39944), + 55: uint16(39954), + 56: uint16(39946), + 57: uint16(39940), + 58: uint16(39982), + 59: uint16(39963), + 60: uint16(39973), + 61: uint16(39972), + 62: uint16(39969), + 63: uint16(39984), + 64: uint16(40007), + 65: uint16(39986), + 66: uint16(40006), + 67: uint16(39998), + 68: uint16(40026), + 69: uint16(40032), + 70: uint16(40039), + 71: uint16(40054), + 72: uint16(40056), + 73: uint16(40167), + 74: uint16(40172), + 75: uint16(40176), + 76: uint16(40201), + 77: uint16(40200), + 78: uint16(40171), + 79: uint16(40195), + 80: uint16(40198), + 81: uint16(40234), + 82: uint16(40230), + 83: uint16(40367), + 84: uint16(40227), + 85: uint16(40223), + 86: uint16(40260), + 87: uint16(40213), + 88: uint16(40210), + 89: uint16(40257), + 90: uint16(40255), + 91: uint16(40254), + 92: uint16(40262), + 93: uint16(40264), + }, + 82: { + 0: uint16(40285), + 1: uint16(40286), + 2: uint16(40292), + 3: uint16(40273), + 4: uint16(40272), + 5: uint16(40281), + 6: uint16(40306), + 7: uint16(40329), + 8: uint16(40327), + 9: uint16(40363), + 10: uint16(40303), + 11: uint16(40314), + 12: uint16(40346), + 13: uint16(40356), + 14: uint16(40361), + 15: uint16(40370), + 16: uint16(40388), + 17: uint16(40385), + 18: uint16(40379), + 19: uint16(40376), + 20: uint16(40378), + 21: uint16(40390), + 22: uint16(40399), + 23: uint16(40386), + 24: uint16(40409), + 25: uint16(40403), + 26: uint16(40440), + 27: uint16(40422), + 28: uint16(40429), + 29: uint16(40431), + 30: uint16(40445), + 31: uint16(40474), + 32: uint16(40475), + 33: uint16(40478), + 34: uint16(40565), + 35: uint16(40569), + 36: uint16(40573), + 37: uint16(40577), + 38: uint16(40584), + 39: uint16(40587), + 40: uint16(40588), + 41: uint16(40594), + 42: uint16(40597), + 43: uint16(40593), + 44: uint16(40605), + 45: uint16(40613), + 46: uint16(40617), + 47: uint16(40632), + 48: uint16(40618), + 49: uint16(40621), + 50: uint16(38753), + 51: uint16(40652), + 52: uint16(40654), + 53: uint16(40655), + 54: uint16(40656), + 55: uint16(40660), + 56: uint16(40668), + 57: uint16(40670), + 58: uint16(40669), + 59: uint16(40672), + 60: uint16(40677), + 61: uint16(40680), + 62: uint16(40687), + 63: uint16(40692), + 64: uint16(40694), + 65: uint16(40695), + 66: uint16(40697), + 67: uint16(40699), + 68: uint16(40700), + 69: uint16(40701), + 70: uint16(40711), + 71: uint16(40712), + 72: uint16(30391), + 73: uint16(40725), + 74: uint16(40737), + 75: uint16(40748), + 76: uint16(40766), + 77: uint16(40778), + 78: uint16(40786), + 79: uint16(40788), + 80: uint16(40803), + 81: uint16(40799), + 82: uint16(40800), + 83: uint16(40801), + 84: uint16(40806), + 85: uint16(40807), + 86: uint16(40812), + 87: uint16(40810), + 88: uint16(40823), + 89: uint16(40818), + 90: uint16(40822), + 91: uint16(40853), + 92: uint16(40860), + 93: uint16(40864), + }, + 83: { + 0: uint16(22575), + 1: uint16(27079), + 2: uint16(36953), + 3: uint16(29796), + 4: uint16(20956), + 5: uint16(29081), + }, +} + +var _gb18030 = [126][190]uint16{ + 0: { + 0: uint16(19970), + 1: uint16(19972), + 2: uint16(19973), + 3: uint16(19974), + 4: uint16(19983), + 5: uint16(19986), + 6: uint16(19991), + 7: uint16(19999), + 8: uint16(20000), + 9: uint16(20001), + 10: uint16(20003), + 11: uint16(20006), + 12: uint16(20009), + 13: uint16(20014), + 14: uint16(20015), + 15: uint16(20017), + 16: uint16(20019), + 17: uint16(20021), + 18: uint16(20023), + 19: uint16(20028), + 20: uint16(20032), + 21: uint16(20033), + 22: uint16(20034), + 23: uint16(20036), + 24: uint16(20038), + 25: uint16(20042), + 26: uint16(20049), + 27: uint16(20053), + 28: uint16(20055), + 29: uint16(20058), + 30: uint16(20059), + 31: uint16(20066), + 32: uint16(20067), + 33: uint16(20068), + 34: uint16(20069), + 35: uint16(20071), + 36: uint16(20072), + 37: uint16(20074), + 38: uint16(20075), + 39: uint16(20076), + 40: uint16(20077), + 41: uint16(20078), + 42: uint16(20079), + 43: uint16(20082), + 44: uint16(20084), + 45: uint16(20085), + 46: uint16(20086), + 47: uint16(20087), + 48: uint16(20088), + 49: uint16(20089), + 50: uint16(20090), + 51: uint16(20091), + 52: uint16(20092), + 53: uint16(20093), + 54: uint16(20095), + 55: uint16(20096), + 56: uint16(20097), + 57: uint16(20098), + 58: uint16(20099), + 59: uint16(20100), + 60: uint16(20101), + 61: uint16(20103), + 62: uint16(20106), + 63: uint16(20112), + 64: uint16(20118), + 65: uint16(20119), + 66: uint16(20121), + 67: uint16(20124), + 68: uint16(20125), + 69: uint16(20126), + 70: uint16(20131), + 71: uint16(20138), + 72: uint16(20143), + 73: uint16(20144), + 74: uint16(20145), + 75: uint16(20148), + 76: uint16(20150), + 77: uint16(20151), + 78: uint16(20152), + 79: uint16(20153), + 80: uint16(20156), + 81: uint16(20157), + 82: uint16(20158), + 83: uint16(20168), + 84: uint16(20172), + 85: uint16(20175), + 86: uint16(20176), + 87: uint16(20178), + 88: uint16(20186), + 89: uint16(20187), + 90: uint16(20188), + 91: uint16(20192), + 92: uint16(20194), + 93: uint16(20198), + 94: uint16(20199), + 95: uint16(20201), + 96: uint16(20205), + 97: uint16(20206), + 98: uint16(20207), + 99: uint16(20209), + 100: uint16(20212), + 101: uint16(20216), + 102: uint16(20217), + 103: uint16(20218), + 104: uint16(20220), + 105: uint16(20222), + 106: uint16(20224), + 107: uint16(20226), + 108: uint16(20227), + 109: uint16(20228), + 110: uint16(20229), + 111: uint16(20230), + 112: uint16(20231), + 113: uint16(20232), + 114: uint16(20235), + 115: uint16(20236), + 116: uint16(20242), + 117: uint16(20243), + 118: uint16(20244), + 119: uint16(20245), + 120: uint16(20246), + 121: uint16(20252), + 122: uint16(20253), + 123: uint16(20257), + 124: uint16(20259), + 125: uint16(20264), + 126: uint16(20265), + 127: uint16(20268), + 128: uint16(20269), + 129: uint16(20270), + 130: uint16(20273), + 131: uint16(20275), + 132: uint16(20277), + 133: uint16(20279), + 134: uint16(20281), + 135: uint16(20283), + 136: uint16(20286), + 137: uint16(20287), + 138: uint16(20288), + 139: uint16(20289), + 140: uint16(20290), + 141: uint16(20292), + 142: uint16(20293), + 143: uint16(20295), + 144: uint16(20296), + 145: uint16(20297), + 146: uint16(20298), + 147: uint16(20299), + 148: uint16(20300), + 149: uint16(20306), + 150: uint16(20308), + 151: uint16(20310), + 152: uint16(20321), + 153: uint16(20322), + 154: uint16(20326), + 155: uint16(20328), + 156: uint16(20330), + 157: uint16(20331), + 158: uint16(20333), + 159: uint16(20334), + 160: uint16(20337), + 161: uint16(20338), + 162: uint16(20341), + 163: uint16(20343), + 164: uint16(20344), + 165: uint16(20345), + 166: uint16(20346), + 167: uint16(20349), + 168: uint16(20352), + 169: uint16(20353), + 170: uint16(20354), + 171: uint16(20357), + 172: uint16(20358), + 173: uint16(20359), + 174: uint16(20362), + 175: uint16(20364), + 176: uint16(20366), + 177: uint16(20368), + 178: uint16(20370), + 179: uint16(20371), + 180: uint16(20373), + 181: uint16(20374), + 182: uint16(20376), + 183: uint16(20377), + 184: uint16(20378), + 185: uint16(20380), + 186: uint16(20382), + 187: uint16(20383), + 188: uint16(20385), + 189: uint16(20386), + }, + 1: { + 0: uint16(20388), + 1: uint16(20395), + 2: uint16(20397), + 3: uint16(20400), + 4: uint16(20401), + 5: uint16(20402), + 6: uint16(20403), + 7: uint16(20404), + 8: uint16(20406), + 9: uint16(20407), + 10: uint16(20408), + 11: uint16(20409), + 12: uint16(20410), + 13: uint16(20411), + 14: uint16(20412), + 15: uint16(20413), + 16: uint16(20414), + 17: uint16(20416), + 18: uint16(20417), + 19: uint16(20418), + 20: uint16(20422), + 21: uint16(20423), + 22: uint16(20424), + 23: uint16(20425), + 24: uint16(20427), + 25: uint16(20428), + 26: uint16(20429), + 27: uint16(20434), + 28: uint16(20435), + 29: uint16(20436), + 30: uint16(20437), + 31: uint16(20438), + 32: uint16(20441), + 33: uint16(20443), + 34: uint16(20448), + 35: uint16(20450), + 36: uint16(20452), + 37: uint16(20453), + 38: uint16(20455), + 39: uint16(20459), + 40: uint16(20460), + 41: uint16(20464), + 42: uint16(20466), + 43: uint16(20468), + 44: uint16(20469), + 45: uint16(20470), + 46: uint16(20471), + 47: uint16(20473), + 48: uint16(20475), + 49: uint16(20476), + 50: uint16(20477), + 51: uint16(20479), + 52: uint16(20480), + 53: uint16(20481), + 54: uint16(20482), + 55: uint16(20483), + 56: uint16(20484), + 57: uint16(20485), + 58: uint16(20486), + 59: uint16(20487), + 60: uint16(20488), + 61: uint16(20489), + 62: uint16(20490), + 63: uint16(20491), + 64: uint16(20494), + 65: uint16(20496), + 66: uint16(20497), + 67: uint16(20499), + 68: uint16(20501), + 69: uint16(20502), + 70: uint16(20503), + 71: uint16(20507), + 72: uint16(20509), + 73: uint16(20510), + 74: uint16(20512), + 75: uint16(20514), + 76: uint16(20515), + 77: uint16(20516), + 78: uint16(20519), + 79: uint16(20523), + 80: uint16(20527), + 81: uint16(20528), + 82: uint16(20529), + 83: uint16(20530), + 84: uint16(20531), + 85: uint16(20532), + 86: uint16(20533), + 87: uint16(20534), + 88: uint16(20535), + 89: uint16(20536), + 90: uint16(20537), + 91: uint16(20539), + 92: uint16(20541), + 93: uint16(20543), + 94: uint16(20544), + 95: uint16(20545), + 96: uint16(20546), + 97: uint16(20548), + 98: uint16(20549), + 99: uint16(20550), + 100: uint16(20553), + 101: uint16(20554), + 102: uint16(20555), + 103: uint16(20557), + 104: uint16(20560), + 105: uint16(20561), + 106: uint16(20562), + 107: uint16(20563), + 108: uint16(20564), + 109: uint16(20566), + 110: uint16(20567), + 111: uint16(20568), + 112: uint16(20569), + 113: uint16(20571), + 114: uint16(20573), + 115: uint16(20574), + 116: uint16(20575), + 117: uint16(20576), + 118: uint16(20577), + 119: uint16(20578), + 120: uint16(20579), + 121: uint16(20580), + 122: uint16(20582), + 123: uint16(20583), + 124: uint16(20584), + 125: uint16(20585), + 126: uint16(20586), + 127: uint16(20587), + 128: uint16(20589), + 129: uint16(20590), + 130: uint16(20591), + 131: uint16(20592), + 132: uint16(20593), + 133: uint16(20594), + 134: uint16(20595), + 135: uint16(20596), + 136: uint16(20597), + 137: uint16(20600), + 138: uint16(20601), + 139: uint16(20602), + 140: uint16(20604), + 141: uint16(20605), + 142: uint16(20609), + 143: uint16(20610), + 144: uint16(20611), + 145: uint16(20612), + 146: uint16(20614), + 147: uint16(20615), + 148: uint16(20617), + 149: uint16(20618), + 150: uint16(20619), + 151: uint16(20620), + 152: uint16(20622), + 153: uint16(20623), + 154: uint16(20624), + 155: uint16(20625), + 156: uint16(20626), + 157: uint16(20627), + 158: uint16(20628), + 159: uint16(20629), + 160: uint16(20630), + 161: uint16(20631), + 162: uint16(20632), + 163: uint16(20633), + 164: uint16(20634), + 165: uint16(20635), + 166: uint16(20636), + 167: uint16(20637), + 168: uint16(20638), + 169: uint16(20639), + 170: uint16(20640), + 171: uint16(20641), + 172: uint16(20642), + 173: uint16(20644), + 174: uint16(20646), + 175: uint16(20650), + 176: uint16(20651), + 177: uint16(20653), + 178: uint16(20654), + 179: uint16(20655), + 180: uint16(20656), + 181: uint16(20657), + 182: uint16(20659), + 183: uint16(20660), + 184: uint16(20661), + 185: uint16(20662), + 186: uint16(20663), + 187: uint16(20664), + 188: uint16(20665), + 189: uint16(20668), + }, + 2: { + 0: uint16(20669), + 1: uint16(20670), + 2: uint16(20671), + 3: uint16(20672), + 4: uint16(20673), + 5: uint16(20674), + 6: uint16(20675), + 7: uint16(20676), + 8: uint16(20677), + 9: uint16(20678), + 10: uint16(20679), + 11: uint16(20680), + 12: uint16(20681), + 13: uint16(20682), + 14: uint16(20683), + 15: uint16(20684), + 16: uint16(20685), + 17: uint16(20686), + 18: uint16(20688), + 19: uint16(20689), + 20: uint16(20690), + 21: uint16(20691), + 22: uint16(20692), + 23: uint16(20693), + 24: uint16(20695), + 25: uint16(20696), + 26: uint16(20697), + 27: uint16(20699), + 28: uint16(20700), + 29: uint16(20701), + 30: uint16(20702), + 31: uint16(20703), + 32: uint16(20704), + 33: uint16(20705), + 34: uint16(20706), + 35: uint16(20707), + 36: uint16(20708), + 37: uint16(20709), + 38: uint16(20712), + 39: uint16(20713), + 40: uint16(20714), + 41: uint16(20715), + 42: uint16(20719), + 43: uint16(20720), + 44: uint16(20721), + 45: uint16(20722), + 46: uint16(20724), + 47: uint16(20726), + 48: uint16(20727), + 49: uint16(20728), + 50: uint16(20729), + 51: uint16(20730), + 52: uint16(20732), + 53: uint16(20733), + 54: uint16(20734), + 55: uint16(20735), + 56: uint16(20736), + 57: uint16(20737), + 58: uint16(20738), + 59: uint16(20739), + 60: uint16(20740), + 61: uint16(20741), + 62: uint16(20744), + 63: uint16(20745), + 64: uint16(20746), + 65: uint16(20748), + 66: uint16(20749), + 67: uint16(20750), + 68: uint16(20751), + 69: uint16(20752), + 70: uint16(20753), + 71: uint16(20755), + 72: uint16(20756), + 73: uint16(20757), + 74: uint16(20758), + 75: uint16(20759), + 76: uint16(20760), + 77: uint16(20761), + 78: uint16(20762), + 79: uint16(20763), + 80: uint16(20764), + 81: uint16(20765), + 82: uint16(20766), + 83: uint16(20767), + 84: uint16(20768), + 85: uint16(20770), + 86: uint16(20771), + 87: uint16(20772), + 88: uint16(20773), + 89: uint16(20774), + 90: uint16(20775), + 91: uint16(20776), + 92: uint16(20777), + 93: uint16(20778), + 94: uint16(20779), + 95: uint16(20780), + 96: uint16(20781), + 97: uint16(20782), + 98: uint16(20783), + 99: uint16(20784), + 100: uint16(20785), + 101: uint16(20786), + 102: uint16(20787), + 103: uint16(20788), + 104: uint16(20789), + 105: uint16(20790), + 106: uint16(20791), + 107: uint16(20792), + 108: uint16(20793), + 109: uint16(20794), + 110: uint16(20795), + 111: uint16(20796), + 112: uint16(20797), + 113: uint16(20798), + 114: uint16(20802), + 115: uint16(20807), + 116: uint16(20810), + 117: uint16(20812), + 118: uint16(20814), + 119: uint16(20815), + 120: uint16(20816), + 121: uint16(20818), + 122: uint16(20819), + 123: uint16(20823), + 124: uint16(20824), + 125: uint16(20825), + 126: uint16(20827), + 127: uint16(20829), + 128: uint16(20830), + 129: uint16(20831), + 130: uint16(20832), + 131: uint16(20833), + 132: uint16(20835), + 133: uint16(20836), + 134: uint16(20838), + 135: uint16(20839), + 136: uint16(20841), + 137: uint16(20842), + 138: uint16(20847), + 139: uint16(20850), + 140: uint16(20858), + 141: uint16(20862), + 142: uint16(20863), + 143: uint16(20867), + 144: uint16(20868), + 145: uint16(20870), + 146: uint16(20871), + 147: uint16(20874), + 148: uint16(20875), + 149: uint16(20878), + 150: uint16(20879), + 151: uint16(20880), + 152: uint16(20881), + 153: uint16(20883), + 154: uint16(20884), + 155: uint16(20888), + 156: uint16(20890), + 157: uint16(20893), + 158: uint16(20894), + 159: uint16(20895), + 160: uint16(20897), + 161: uint16(20899), + 162: uint16(20902), + 163: uint16(20903), + 164: uint16(20904), + 165: uint16(20905), + 166: uint16(20906), + 167: uint16(20909), + 168: uint16(20910), + 169: uint16(20916), + 170: uint16(20920), + 171: uint16(20921), + 172: uint16(20922), + 173: uint16(20926), + 174: uint16(20927), + 175: uint16(20929), + 176: uint16(20930), + 177: uint16(20931), + 178: uint16(20933), + 179: uint16(20936), + 180: uint16(20938), + 181: uint16(20941), + 182: uint16(20942), + 183: uint16(20944), + 184: uint16(20946), + 185: uint16(20947), + 186: uint16(20948), + 187: uint16(20949), + 188: uint16(20950), + 189: uint16(20951), + }, + 3: { + 0: uint16(20952), + 1: uint16(20953), + 2: uint16(20954), + 3: uint16(20956), + 4: uint16(20958), + 5: uint16(20959), + 6: uint16(20962), + 7: uint16(20963), + 8: uint16(20965), + 9: uint16(20966), + 10: uint16(20967), + 11: uint16(20968), + 12: uint16(20969), + 13: uint16(20970), + 14: uint16(20972), + 15: uint16(20974), + 16: uint16(20977), + 17: uint16(20978), + 18: uint16(20980), + 19: uint16(20983), + 20: uint16(20990), + 21: uint16(20996), + 22: uint16(20997), + 23: uint16(21001), + 24: uint16(21003), + 25: uint16(21004), + 26: uint16(21007), + 27: uint16(21008), + 28: uint16(21011), + 29: uint16(21012), + 30: uint16(21013), + 31: uint16(21020), + 32: uint16(21022), + 33: uint16(21023), + 34: uint16(21025), + 35: uint16(21026), + 36: uint16(21027), + 37: uint16(21029), + 38: uint16(21030), + 39: uint16(21031), + 40: uint16(21034), + 41: uint16(21036), + 42: uint16(21039), + 43: uint16(21041), + 44: uint16(21042), + 45: uint16(21044), + 46: uint16(21045), + 47: uint16(21052), + 48: uint16(21054), + 49: uint16(21060), + 50: uint16(21061), + 51: uint16(21062), + 52: uint16(21063), + 53: uint16(21064), + 54: uint16(21065), + 55: uint16(21067), + 56: uint16(21070), + 57: uint16(21071), + 58: uint16(21074), + 59: uint16(21075), + 60: uint16(21077), + 61: uint16(21079), + 62: uint16(21080), + 63: uint16(21081), + 64: uint16(21082), + 65: uint16(21083), + 66: uint16(21085), + 67: uint16(21087), + 68: uint16(21088), + 69: uint16(21090), + 70: uint16(21091), + 71: uint16(21092), + 72: uint16(21094), + 73: uint16(21096), + 74: uint16(21099), + 75: uint16(21100), + 76: uint16(21101), + 77: uint16(21102), + 78: uint16(21104), + 79: uint16(21105), + 80: uint16(21107), + 81: uint16(21108), + 82: uint16(21109), + 83: uint16(21110), + 84: uint16(21111), + 85: uint16(21112), + 86: uint16(21113), + 87: uint16(21114), + 88: uint16(21115), + 89: uint16(21116), + 90: uint16(21118), + 91: uint16(21120), + 92: uint16(21123), + 93: uint16(21124), + 94: uint16(21125), + 95: uint16(21126), + 96: uint16(21127), + 97: uint16(21129), + 98: uint16(21130), + 99: uint16(21131), + 100: uint16(21132), + 101: uint16(21133), + 102: uint16(21134), + 103: uint16(21135), + 104: uint16(21137), + 105: uint16(21138), + 106: uint16(21140), + 107: uint16(21141), + 108: uint16(21142), + 109: uint16(21143), + 110: uint16(21144), + 111: uint16(21145), + 112: uint16(21146), + 113: uint16(21148), + 114: uint16(21156), + 115: uint16(21157), + 116: uint16(21158), + 117: uint16(21159), + 118: uint16(21166), + 119: uint16(21167), + 120: uint16(21168), + 121: uint16(21172), + 122: uint16(21173), + 123: uint16(21174), + 124: uint16(21175), + 125: uint16(21176), + 126: uint16(21177), + 127: uint16(21178), + 128: uint16(21179), + 129: uint16(21180), + 130: uint16(21181), + 131: uint16(21184), + 132: uint16(21185), + 133: uint16(21186), + 134: uint16(21188), + 135: uint16(21189), + 136: uint16(21190), + 137: uint16(21192), + 138: uint16(21194), + 139: uint16(21196), + 140: uint16(21197), + 141: uint16(21198), + 142: uint16(21199), + 143: uint16(21201), + 144: uint16(21203), + 145: uint16(21204), + 146: uint16(21205), + 147: uint16(21207), + 148: uint16(21209), + 149: uint16(21210), + 150: uint16(21211), + 151: uint16(21212), + 152: uint16(21213), + 153: uint16(21214), + 154: uint16(21216), + 155: uint16(21217), + 156: uint16(21218), + 157: uint16(21219), + 158: uint16(21221), + 159: uint16(21222), + 160: uint16(21223), + 161: uint16(21224), + 162: uint16(21225), + 163: uint16(21226), + 164: uint16(21227), + 165: uint16(21228), + 166: uint16(21229), + 167: uint16(21230), + 168: uint16(21231), + 169: uint16(21233), + 170: uint16(21234), + 171: uint16(21235), + 172: uint16(21236), + 173: uint16(21237), + 174: uint16(21238), + 175: uint16(21239), + 176: uint16(21240), + 177: uint16(21243), + 178: uint16(21244), + 179: uint16(21245), + 180: uint16(21249), + 181: uint16(21250), + 182: uint16(21251), + 183: uint16(21252), + 184: uint16(21255), + 185: uint16(21257), + 186: uint16(21258), + 187: uint16(21259), + 188: uint16(21260), + 189: uint16(21262), + }, + 4: { + 0: uint16(21265), + 1: uint16(21266), + 2: uint16(21267), + 3: uint16(21268), + 4: uint16(21272), + 5: uint16(21275), + 6: uint16(21276), + 7: uint16(21278), + 8: uint16(21279), + 9: uint16(21282), + 10: uint16(21284), + 11: uint16(21285), + 12: uint16(21287), + 13: uint16(21288), + 14: uint16(21289), + 15: uint16(21291), + 16: uint16(21292), + 17: uint16(21293), + 18: uint16(21295), + 19: uint16(21296), + 20: uint16(21297), + 21: uint16(21298), + 22: uint16(21299), + 23: uint16(21300), + 24: uint16(21301), + 25: uint16(21302), + 26: uint16(21303), + 27: uint16(21304), + 28: uint16(21308), + 29: uint16(21309), + 30: uint16(21312), + 31: uint16(21314), + 32: uint16(21316), + 33: uint16(21318), + 34: uint16(21323), + 35: uint16(21324), + 36: uint16(21325), + 37: uint16(21328), + 38: uint16(21332), + 39: uint16(21336), + 40: uint16(21337), + 41: uint16(21339), + 42: uint16(21341), + 43: uint16(21349), + 44: uint16(21352), + 45: uint16(21354), + 46: uint16(21356), + 47: uint16(21357), + 48: uint16(21362), + 49: uint16(21366), + 50: uint16(21369), + 51: uint16(21371), + 52: uint16(21372), + 53: uint16(21373), + 54: uint16(21374), + 55: uint16(21376), + 56: uint16(21377), + 57: uint16(21379), + 58: uint16(21383), + 59: uint16(21384), + 60: uint16(21386), + 61: uint16(21390), + 62: uint16(21391), + 63: uint16(21392), + 64: uint16(21393), + 65: uint16(21394), + 66: uint16(21395), + 67: uint16(21396), + 68: uint16(21398), + 69: uint16(21399), + 70: uint16(21401), + 71: uint16(21403), + 72: uint16(21404), + 73: uint16(21406), + 74: uint16(21408), + 75: uint16(21409), + 76: uint16(21412), + 77: uint16(21415), + 78: uint16(21418), + 79: uint16(21419), + 80: uint16(21420), + 81: uint16(21421), + 82: uint16(21423), + 83: uint16(21424), + 84: uint16(21425), + 85: uint16(21426), + 86: uint16(21427), + 87: uint16(21428), + 88: uint16(21429), + 89: uint16(21431), + 90: uint16(21432), + 91: uint16(21433), + 92: uint16(21434), + 93: uint16(21436), + 94: uint16(21437), + 95: uint16(21438), + 96: uint16(21440), + 97: uint16(21443), + 98: uint16(21444), + 99: uint16(21445), + 100: uint16(21446), + 101: uint16(21447), + 102: uint16(21454), + 103: uint16(21455), + 104: uint16(21456), + 105: uint16(21458), + 106: uint16(21459), + 107: uint16(21461), + 108: uint16(21466), + 109: uint16(21468), + 110: uint16(21469), + 111: uint16(21470), + 112: uint16(21473), + 113: uint16(21474), + 114: uint16(21479), + 115: uint16(21492), + 116: uint16(21498), + 117: uint16(21502), + 118: uint16(21503), + 119: uint16(21504), + 120: uint16(21506), + 121: uint16(21509), + 122: uint16(21511), + 123: uint16(21515), + 124: uint16(21524), + 125: uint16(21528), + 126: uint16(21529), + 127: uint16(21530), + 128: uint16(21532), + 129: uint16(21538), + 130: uint16(21540), + 131: uint16(21541), + 132: uint16(21546), + 133: uint16(21552), + 134: uint16(21555), + 135: uint16(21558), + 136: uint16(21559), + 137: uint16(21562), + 138: uint16(21565), + 139: uint16(21567), + 140: uint16(21569), + 141: uint16(21570), + 142: uint16(21572), + 143: uint16(21573), + 144: uint16(21575), + 145: uint16(21577), + 146: uint16(21580), + 147: uint16(21581), + 148: uint16(21582), + 149: uint16(21583), + 150: uint16(21585), + 151: uint16(21594), + 152: uint16(21597), + 153: uint16(21598), + 154: uint16(21599), + 155: uint16(21600), + 156: uint16(21601), + 157: uint16(21603), + 158: uint16(21605), + 159: uint16(21607), + 160: uint16(21609), + 161: uint16(21610), + 162: uint16(21611), + 163: uint16(21612), + 164: uint16(21613), + 165: uint16(21614), + 166: uint16(21615), + 167: uint16(21616), + 168: uint16(21620), + 169: uint16(21625), + 170: uint16(21626), + 171: uint16(21630), + 172: uint16(21631), + 173: uint16(21633), + 174: uint16(21635), + 175: uint16(21637), + 176: uint16(21639), + 177: uint16(21640), + 178: uint16(21641), + 179: uint16(21642), + 180: uint16(21645), + 181: uint16(21649), + 182: uint16(21651), + 183: uint16(21655), + 184: uint16(21656), + 185: uint16(21660), + 186: uint16(21662), + 187: uint16(21663), + 188: uint16(21664), + 189: uint16(21665), + }, + 5: { + 0: uint16(21666), + 1: uint16(21669), + 2: uint16(21678), + 3: uint16(21680), + 4: uint16(21682), + 5: uint16(21685), + 6: uint16(21686), + 7: uint16(21687), + 8: uint16(21689), + 9: uint16(21690), + 10: uint16(21692), + 11: uint16(21694), + 12: uint16(21699), + 13: uint16(21701), + 14: uint16(21706), + 15: uint16(21707), + 16: uint16(21718), + 17: uint16(21720), + 18: uint16(21723), + 19: uint16(21728), + 20: uint16(21729), + 21: uint16(21730), + 22: uint16(21731), + 23: uint16(21732), + 24: uint16(21739), + 25: uint16(21740), + 26: uint16(21743), + 27: uint16(21744), + 28: uint16(21745), + 29: uint16(21748), + 30: uint16(21749), + 31: uint16(21750), + 32: uint16(21751), + 33: uint16(21752), + 34: uint16(21753), + 35: uint16(21755), + 36: uint16(21758), + 37: uint16(21760), + 38: uint16(21762), + 39: uint16(21763), + 40: uint16(21764), + 41: uint16(21765), + 42: uint16(21768), + 43: uint16(21770), + 44: uint16(21771), + 45: uint16(21772), + 46: uint16(21773), + 47: uint16(21774), + 48: uint16(21778), + 49: uint16(21779), + 50: uint16(21781), + 51: uint16(21782), + 52: uint16(21783), + 53: uint16(21784), + 54: uint16(21785), + 55: uint16(21786), + 56: uint16(21788), + 57: uint16(21789), + 58: uint16(21790), + 59: uint16(21791), + 60: uint16(21793), + 61: uint16(21797), + 62: uint16(21798), + 63: uint16(21800), + 64: uint16(21801), + 65: uint16(21803), + 66: uint16(21805), + 67: uint16(21810), + 68: uint16(21812), + 69: uint16(21813), + 70: uint16(21814), + 71: uint16(21816), + 72: uint16(21817), + 73: uint16(21818), + 74: uint16(21819), + 75: uint16(21821), + 76: uint16(21824), + 77: uint16(21826), + 78: uint16(21829), + 79: uint16(21831), + 80: uint16(21832), + 81: uint16(21835), + 82: uint16(21836), + 83: uint16(21837), + 84: uint16(21838), + 85: uint16(21839), + 86: uint16(21841), + 87: uint16(21842), + 88: uint16(21843), + 89: uint16(21844), + 90: uint16(21847), + 91: uint16(21848), + 92: uint16(21849), + 93: uint16(21850), + 94: uint16(21851), + 95: uint16(21853), + 96: uint16(21854), + 97: uint16(21855), + 98: uint16(21856), + 99: uint16(21858), + 100: uint16(21859), + 101: uint16(21864), + 102: uint16(21865), + 103: uint16(21867), + 104: uint16(21871), + 105: uint16(21872), + 106: uint16(21873), + 107: uint16(21874), + 108: uint16(21875), + 109: uint16(21876), + 110: uint16(21881), + 111: uint16(21882), + 112: uint16(21885), + 113: uint16(21887), + 114: uint16(21893), + 115: uint16(21894), + 116: uint16(21900), + 117: uint16(21901), + 118: uint16(21902), + 119: uint16(21904), + 120: uint16(21906), + 121: uint16(21907), + 122: uint16(21909), + 123: uint16(21910), + 124: uint16(21911), + 125: uint16(21914), + 126: uint16(21915), + 127: uint16(21918), + 128: uint16(21920), + 129: uint16(21921), + 130: uint16(21922), + 131: uint16(21923), + 132: uint16(21924), + 133: uint16(21925), + 134: uint16(21926), + 135: uint16(21928), + 136: uint16(21929), + 137: uint16(21930), + 138: uint16(21931), + 139: uint16(21932), + 140: uint16(21933), + 141: uint16(21934), + 142: uint16(21935), + 143: uint16(21936), + 144: uint16(21938), + 145: uint16(21940), + 146: uint16(21942), + 147: uint16(21944), + 148: uint16(21946), + 149: uint16(21948), + 150: uint16(21951), + 151: uint16(21952), + 152: uint16(21953), + 153: uint16(21954), + 154: uint16(21955), + 155: uint16(21958), + 156: uint16(21959), + 157: uint16(21960), + 158: uint16(21962), + 159: uint16(21963), + 160: uint16(21966), + 161: uint16(21967), + 162: uint16(21968), + 163: uint16(21973), + 164: uint16(21975), + 165: uint16(21976), + 166: uint16(21977), + 167: uint16(21978), + 168: uint16(21979), + 169: uint16(21982), + 170: uint16(21984), + 171: uint16(21986), + 172: uint16(21991), + 173: uint16(21993), + 174: uint16(21997), + 175: uint16(21998), + 176: uint16(22000), + 177: uint16(22001), + 178: uint16(22004), + 179: uint16(22006), + 180: uint16(22008), + 181: uint16(22009), + 182: uint16(22010), + 183: uint16(22011), + 184: uint16(22012), + 185: uint16(22015), + 186: uint16(22018), + 187: uint16(22019), + 188: uint16(22020), + 189: uint16(22021), + }, + 6: { + 0: uint16(22022), + 1: uint16(22023), + 2: uint16(22026), + 3: uint16(22027), + 4: uint16(22029), + 5: uint16(22032), + 6: uint16(22033), + 7: uint16(22034), + 8: uint16(22035), + 9: uint16(22036), + 10: uint16(22037), + 11: uint16(22038), + 12: uint16(22039), + 13: uint16(22041), + 14: uint16(22042), + 15: uint16(22044), + 16: uint16(22045), + 17: uint16(22048), + 18: uint16(22049), + 19: uint16(22050), + 20: uint16(22053), + 21: uint16(22054), + 22: uint16(22056), + 23: uint16(22057), + 24: uint16(22058), + 25: uint16(22059), + 26: uint16(22062), + 27: uint16(22063), + 28: uint16(22064), + 29: uint16(22067), + 30: uint16(22069), + 31: uint16(22071), + 32: uint16(22072), + 33: uint16(22074), + 34: uint16(22076), + 35: uint16(22077), + 36: uint16(22078), + 37: uint16(22080), + 38: uint16(22081), + 39: uint16(22082), + 40: uint16(22083), + 41: uint16(22084), + 42: uint16(22085), + 43: uint16(22086), + 44: uint16(22087), + 45: uint16(22088), + 46: uint16(22089), + 47: uint16(22090), + 48: uint16(22091), + 49: uint16(22095), + 50: uint16(22096), + 51: uint16(22097), + 52: uint16(22098), + 53: uint16(22099), + 54: uint16(22101), + 55: uint16(22102), + 56: uint16(22106), + 57: uint16(22107), + 58: uint16(22109), + 59: uint16(22110), + 60: uint16(22111), + 61: uint16(22112), + 62: uint16(22113), + 63: uint16(22115), + 64: uint16(22117), + 65: uint16(22118), + 66: uint16(22119), + 67: uint16(22125), + 68: uint16(22126), + 69: uint16(22127), + 70: uint16(22128), + 71: uint16(22130), + 72: uint16(22131), + 73: uint16(22132), + 74: uint16(22133), + 75: uint16(22135), + 76: uint16(22136), + 77: uint16(22137), + 78: uint16(22138), + 79: uint16(22141), + 80: uint16(22142), + 81: uint16(22143), + 82: uint16(22144), + 83: uint16(22145), + 84: uint16(22146), + 85: uint16(22147), + 86: uint16(22148), + 87: uint16(22151), + 88: uint16(22152), + 89: uint16(22153), + 90: uint16(22154), + 91: uint16(22155), + 92: uint16(22156), + 93: uint16(22157), + 94: uint16(22160), + 95: uint16(22161), + 96: uint16(22162), + 97: uint16(22164), + 98: uint16(22165), + 99: uint16(22166), + 100: uint16(22167), + 101: uint16(22168), + 102: uint16(22169), + 103: uint16(22170), + 104: uint16(22171), + 105: uint16(22172), + 106: uint16(22173), + 107: uint16(22174), + 108: uint16(22175), + 109: uint16(22176), + 110: uint16(22177), + 111: uint16(22178), + 112: uint16(22180), + 113: uint16(22181), + 114: uint16(22182), + 115: uint16(22183), + 116: uint16(22184), + 117: uint16(22185), + 118: uint16(22186), + 119: uint16(22187), + 120: uint16(22188), + 121: uint16(22189), + 122: uint16(22190), + 123: uint16(22192), + 124: uint16(22193), + 125: uint16(22194), + 126: uint16(22195), + 127: uint16(22196), + 128: uint16(22197), + 129: uint16(22198), + 130: uint16(22200), + 131: uint16(22201), + 132: uint16(22202), + 133: uint16(22203), + 134: uint16(22205), + 135: uint16(22206), + 136: uint16(22207), + 137: uint16(22208), + 138: uint16(22209), + 139: uint16(22210), + 140: uint16(22211), + 141: uint16(22212), + 142: uint16(22213), + 143: uint16(22214), + 144: uint16(22215), + 145: uint16(22216), + 146: uint16(22217), + 147: uint16(22219), + 148: uint16(22220), + 149: uint16(22221), + 150: uint16(22222), + 151: uint16(22223), + 152: uint16(22224), + 153: uint16(22225), + 154: uint16(22226), + 155: uint16(22227), + 156: uint16(22229), + 157: uint16(22230), + 158: uint16(22232), + 159: uint16(22233), + 160: uint16(22236), + 161: uint16(22243), + 162: uint16(22245), + 163: uint16(22246), + 164: uint16(22247), + 165: uint16(22248), + 166: uint16(22249), + 167: uint16(22250), + 168: uint16(22252), + 169: uint16(22254), + 170: uint16(22255), + 171: uint16(22258), + 172: uint16(22259), + 173: uint16(22262), + 174: uint16(22263), + 175: uint16(22264), + 176: uint16(22267), + 177: uint16(22268), + 178: uint16(22272), + 179: uint16(22273), + 180: uint16(22274), + 181: uint16(22277), + 182: uint16(22279), + 183: uint16(22283), + 184: uint16(22284), + 185: uint16(22285), + 186: uint16(22286), + 187: uint16(22287), + 188: uint16(22288), + 189: uint16(22289), + }, + 7: { + 0: uint16(22290), + 1: uint16(22291), + 2: uint16(22292), + 3: uint16(22293), + 4: uint16(22294), + 5: uint16(22295), + 6: uint16(22296), + 7: uint16(22297), + 8: uint16(22298), + 9: uint16(22299), + 10: uint16(22301), + 11: uint16(22302), + 12: uint16(22304), + 13: uint16(22305), + 14: uint16(22306), + 15: uint16(22308), + 16: uint16(22309), + 17: uint16(22310), + 18: uint16(22311), + 19: uint16(22315), + 20: uint16(22321), + 21: uint16(22322), + 22: uint16(22324), + 23: uint16(22325), + 24: uint16(22326), + 25: uint16(22327), + 26: uint16(22328), + 27: uint16(22332), + 28: uint16(22333), + 29: uint16(22335), + 30: uint16(22337), + 31: uint16(22339), + 32: uint16(22340), + 33: uint16(22341), + 34: uint16(22342), + 35: uint16(22344), + 36: uint16(22345), + 37: uint16(22347), + 38: uint16(22354), + 39: uint16(22355), + 40: uint16(22356), + 41: uint16(22357), + 42: uint16(22358), + 43: uint16(22360), + 44: uint16(22361), + 45: uint16(22370), + 46: uint16(22371), + 47: uint16(22373), + 48: uint16(22375), + 49: uint16(22380), + 50: uint16(22382), + 51: uint16(22384), + 52: uint16(22385), + 53: uint16(22386), + 54: uint16(22388), + 55: uint16(22389), + 56: uint16(22392), + 57: uint16(22393), + 58: uint16(22394), + 59: uint16(22397), + 60: uint16(22398), + 61: uint16(22399), + 62: uint16(22400), + 63: uint16(22401), + 64: uint16(22407), + 65: uint16(22408), + 66: uint16(22409), + 67: uint16(22410), + 68: uint16(22413), + 69: uint16(22414), + 70: uint16(22415), + 71: uint16(22416), + 72: uint16(22417), + 73: uint16(22420), + 74: uint16(22421), + 75: uint16(22422), + 76: uint16(22423), + 77: uint16(22424), + 78: uint16(22425), + 79: uint16(22426), + 80: uint16(22428), + 81: uint16(22429), + 82: uint16(22430), + 83: uint16(22431), + 84: uint16(22437), + 85: uint16(22440), + 86: uint16(22442), + 87: uint16(22444), + 88: uint16(22447), + 89: uint16(22448), + 90: uint16(22449), + 91: uint16(22451), + 92: uint16(22453), + 93: uint16(22454), + 94: uint16(22455), + 95: uint16(22457), + 96: uint16(22458), + 97: uint16(22459), + 98: uint16(22460), + 99: uint16(22461), + 100: uint16(22462), + 101: uint16(22463), + 102: uint16(22464), + 103: uint16(22465), + 104: uint16(22468), + 105: uint16(22469), + 106: uint16(22470), + 107: uint16(22471), + 108: uint16(22472), + 109: uint16(22473), + 110: uint16(22474), + 111: uint16(22476), + 112: uint16(22477), + 113: uint16(22480), + 114: uint16(22481), + 115: uint16(22483), + 116: uint16(22486), + 117: uint16(22487), + 118: uint16(22491), + 119: uint16(22492), + 120: uint16(22494), + 121: uint16(22497), + 122: uint16(22498), + 123: uint16(22499), + 124: uint16(22501), + 125: uint16(22502), + 126: uint16(22503), + 127: uint16(22504), + 128: uint16(22505), + 129: uint16(22506), + 130: uint16(22507), + 131: uint16(22508), + 132: uint16(22510), + 133: uint16(22512), + 134: uint16(22513), + 135: uint16(22514), + 136: uint16(22515), + 137: uint16(22517), + 138: uint16(22518), + 139: uint16(22519), + 140: uint16(22523), + 141: uint16(22524), + 142: uint16(22526), + 143: uint16(22527), + 144: uint16(22529), + 145: uint16(22531), + 146: uint16(22532), + 147: uint16(22533), + 148: uint16(22536), + 149: uint16(22537), + 150: uint16(22538), + 151: uint16(22540), + 152: uint16(22542), + 153: uint16(22543), + 154: uint16(22544), + 155: uint16(22546), + 156: uint16(22547), + 157: uint16(22548), + 158: uint16(22550), + 159: uint16(22551), + 160: uint16(22552), + 161: uint16(22554), + 162: uint16(22555), + 163: uint16(22556), + 164: uint16(22557), + 165: uint16(22559), + 166: uint16(22562), + 167: uint16(22563), + 168: uint16(22565), + 169: uint16(22566), + 170: uint16(22567), + 171: uint16(22568), + 172: uint16(22569), + 173: uint16(22571), + 174: uint16(22572), + 175: uint16(22573), + 176: uint16(22574), + 177: uint16(22575), + 178: uint16(22577), + 179: uint16(22578), + 180: uint16(22579), + 181: uint16(22580), + 182: uint16(22582), + 183: uint16(22583), + 184: uint16(22584), + 185: uint16(22585), + 186: uint16(22586), + 187: uint16(22587), + 188: uint16(22588), + 189: uint16(22589), + }, + 8: { + 0: uint16(22590), + 1: uint16(22591), + 2: uint16(22592), + 3: uint16(22593), + 4: uint16(22594), + 5: uint16(22595), + 6: uint16(22597), + 7: uint16(22598), + 8: uint16(22599), + 9: uint16(22600), + 10: uint16(22601), + 11: uint16(22602), + 12: uint16(22603), + 13: uint16(22606), + 14: uint16(22607), + 15: uint16(22608), + 16: uint16(22610), + 17: uint16(22611), + 18: uint16(22613), + 19: uint16(22614), + 20: uint16(22615), + 21: uint16(22617), + 22: uint16(22618), + 23: uint16(22619), + 24: uint16(22620), + 25: uint16(22621), + 26: uint16(22623), + 27: uint16(22624), + 28: uint16(22625), + 29: uint16(22626), + 30: uint16(22627), + 31: uint16(22628), + 32: uint16(22630), + 33: uint16(22631), + 34: uint16(22632), + 35: uint16(22633), + 36: uint16(22634), + 37: uint16(22637), + 38: uint16(22638), + 39: uint16(22639), + 40: uint16(22640), + 41: uint16(22641), + 42: uint16(22642), + 43: uint16(22643), + 44: uint16(22644), + 45: uint16(22645), + 46: uint16(22646), + 47: uint16(22647), + 48: uint16(22648), + 49: uint16(22649), + 50: uint16(22650), + 51: uint16(22651), + 52: uint16(22652), + 53: uint16(22653), + 54: uint16(22655), + 55: uint16(22658), + 56: uint16(22660), + 57: uint16(22662), + 58: uint16(22663), + 59: uint16(22664), + 60: uint16(22666), + 61: uint16(22667), + 62: uint16(22668), + 63: uint16(22669), + 64: uint16(22670), + 65: uint16(22671), + 66: uint16(22672), + 67: uint16(22673), + 68: uint16(22676), + 69: uint16(22677), + 70: uint16(22678), + 71: uint16(22679), + 72: uint16(22680), + 73: uint16(22683), + 74: uint16(22684), + 75: uint16(22685), + 76: uint16(22688), + 77: uint16(22689), + 78: uint16(22690), + 79: uint16(22691), + 80: uint16(22692), + 81: uint16(22693), + 82: uint16(22694), + 83: uint16(22695), + 84: uint16(22698), + 85: uint16(22699), + 86: uint16(22700), + 87: uint16(22701), + 88: uint16(22702), + 89: uint16(22703), + 90: uint16(22704), + 91: uint16(22705), + 92: uint16(22706), + 93: uint16(22707), + 94: uint16(22708), + 95: uint16(22709), + 96: uint16(22710), + 97: uint16(22711), + 98: uint16(22712), + 99: uint16(22713), + 100: uint16(22714), + 101: uint16(22715), + 102: uint16(22717), + 103: uint16(22718), + 104: uint16(22719), + 105: uint16(22720), + 106: uint16(22722), + 107: uint16(22723), + 108: uint16(22724), + 109: uint16(22726), + 110: uint16(22727), + 111: uint16(22728), + 112: uint16(22729), + 113: uint16(22730), + 114: uint16(22731), + 115: uint16(22732), + 116: uint16(22733), + 117: uint16(22734), + 118: uint16(22735), + 119: uint16(22736), + 120: uint16(22738), + 121: uint16(22739), + 122: uint16(22740), + 123: uint16(22742), + 124: uint16(22743), + 125: uint16(22744), + 126: uint16(22745), + 127: uint16(22746), + 128: uint16(22747), + 129: uint16(22748), + 130: uint16(22749), + 131: uint16(22750), + 132: uint16(22751), + 133: uint16(22752), + 134: uint16(22753), + 135: uint16(22754), + 136: uint16(22755), + 137: uint16(22757), + 138: uint16(22758), + 139: uint16(22759), + 140: uint16(22760), + 141: uint16(22761), + 142: uint16(22762), + 143: uint16(22765), + 144: uint16(22767), + 145: uint16(22769), + 146: uint16(22770), + 147: uint16(22772), + 148: uint16(22773), + 149: uint16(22775), + 150: uint16(22776), + 151: uint16(22778), + 152: uint16(22779), + 153: uint16(22780), + 154: uint16(22781), + 155: uint16(22782), + 156: uint16(22783), + 157: uint16(22784), + 158: uint16(22785), + 159: uint16(22787), + 160: uint16(22789), + 161: uint16(22790), + 162: uint16(22792), + 163: uint16(22793), + 164: uint16(22794), + 165: uint16(22795), + 166: uint16(22796), + 167: uint16(22798), + 168: uint16(22800), + 169: uint16(22801), + 170: uint16(22802), + 171: uint16(22803), + 172: uint16(22807), + 173: uint16(22808), + 174: uint16(22811), + 175: uint16(22813), + 176: uint16(22814), + 177: uint16(22816), + 178: uint16(22817), + 179: uint16(22818), + 180: uint16(22819), + 181: uint16(22822), + 182: uint16(22824), + 183: uint16(22828), + 184: uint16(22832), + 185: uint16(22834), + 186: uint16(22835), + 187: uint16(22837), + 188: uint16(22838), + 189: uint16(22843), + }, + 9: { + 0: uint16(22845), + 1: uint16(22846), + 2: uint16(22847), + 3: uint16(22848), + 4: uint16(22851), + 5: uint16(22853), + 6: uint16(22854), + 7: uint16(22858), + 8: uint16(22860), + 9: uint16(22861), + 10: uint16(22864), + 11: uint16(22866), + 12: uint16(22867), + 13: uint16(22873), + 14: uint16(22875), + 15: uint16(22876), + 16: uint16(22877), + 17: uint16(22878), + 18: uint16(22879), + 19: uint16(22881), + 20: uint16(22883), + 21: uint16(22884), + 22: uint16(22886), + 23: uint16(22887), + 24: uint16(22888), + 25: uint16(22889), + 26: uint16(22890), + 27: uint16(22891), + 28: uint16(22892), + 29: uint16(22893), + 30: uint16(22894), + 31: uint16(22895), + 32: uint16(22896), + 33: uint16(22897), + 34: uint16(22898), + 35: uint16(22901), + 36: uint16(22903), + 37: uint16(22906), + 38: uint16(22907), + 39: uint16(22908), + 40: uint16(22910), + 41: uint16(22911), + 42: uint16(22912), + 43: uint16(22917), + 44: uint16(22921), + 45: uint16(22923), + 46: uint16(22924), + 47: uint16(22926), + 48: uint16(22927), + 49: uint16(22928), + 50: uint16(22929), + 51: uint16(22932), + 52: uint16(22933), + 53: uint16(22936), + 54: uint16(22938), + 55: uint16(22939), + 56: uint16(22940), + 57: uint16(22941), + 58: uint16(22943), + 59: uint16(22944), + 60: uint16(22945), + 61: uint16(22946), + 62: uint16(22950), + 63: uint16(22951), + 64: uint16(22956), + 65: uint16(22957), + 66: uint16(22960), + 67: uint16(22961), + 68: uint16(22963), + 69: uint16(22964), + 70: uint16(22965), + 71: uint16(22966), + 72: uint16(22967), + 73: uint16(22968), + 74: uint16(22970), + 75: uint16(22972), + 76: uint16(22973), + 77: uint16(22975), + 78: uint16(22976), + 79: uint16(22977), + 80: uint16(22978), + 81: uint16(22979), + 82: uint16(22980), + 83: uint16(22981), + 84: uint16(22983), + 85: uint16(22984), + 86: uint16(22985), + 87: uint16(22988), + 88: uint16(22989), + 89: uint16(22990), + 90: uint16(22991), + 91: uint16(22997), + 92: uint16(22998), + 93: uint16(23001), + 94: uint16(23003), + 95: uint16(23006), + 96: uint16(23007), + 97: uint16(23008), + 98: uint16(23009), + 99: uint16(23010), + 100: uint16(23012), + 101: uint16(23014), + 102: uint16(23015), + 103: uint16(23017), + 104: uint16(23018), + 105: uint16(23019), + 106: uint16(23021), + 107: uint16(23022), + 108: uint16(23023), + 109: uint16(23024), + 110: uint16(23025), + 111: uint16(23026), + 112: uint16(23027), + 113: uint16(23028), + 114: uint16(23029), + 115: uint16(23030), + 116: uint16(23031), + 117: uint16(23032), + 118: uint16(23034), + 119: uint16(23036), + 120: uint16(23037), + 121: uint16(23038), + 122: uint16(23040), + 123: uint16(23042), + 124: uint16(23050), + 125: uint16(23051), + 126: uint16(23053), + 127: uint16(23054), + 128: uint16(23055), + 129: uint16(23056), + 130: uint16(23058), + 131: uint16(23060), + 132: uint16(23061), + 133: uint16(23062), + 134: uint16(23063), + 135: uint16(23065), + 136: uint16(23066), + 137: uint16(23067), + 138: uint16(23069), + 139: uint16(23070), + 140: uint16(23073), + 141: uint16(23074), + 142: uint16(23076), + 143: uint16(23078), + 144: uint16(23079), + 145: uint16(23080), + 146: uint16(23082), + 147: uint16(23083), + 148: uint16(23084), + 149: uint16(23085), + 150: uint16(23086), + 151: uint16(23087), + 152: uint16(23088), + 153: uint16(23091), + 154: uint16(23093), + 155: uint16(23095), + 156: uint16(23096), + 157: uint16(23097), + 158: uint16(23098), + 159: uint16(23099), + 160: uint16(23101), + 161: uint16(23102), + 162: uint16(23103), + 163: uint16(23105), + 164: uint16(23106), + 165: uint16(23107), + 166: uint16(23108), + 167: uint16(23109), + 168: uint16(23111), + 169: uint16(23112), + 170: uint16(23115), + 171: uint16(23116), + 172: uint16(23117), + 173: uint16(23118), + 174: uint16(23119), + 175: uint16(23120), + 176: uint16(23121), + 177: uint16(23122), + 178: uint16(23123), + 179: uint16(23124), + 180: uint16(23126), + 181: uint16(23127), + 182: uint16(23128), + 183: uint16(23129), + 184: uint16(23131), + 185: uint16(23132), + 186: uint16(23133), + 187: uint16(23134), + 188: uint16(23135), + 189: uint16(23136), + }, + 10: { + 0: uint16(23137), + 1: uint16(23139), + 2: uint16(23140), + 3: uint16(23141), + 4: uint16(23142), + 5: uint16(23144), + 6: uint16(23145), + 7: uint16(23147), + 8: uint16(23148), + 9: uint16(23149), + 10: uint16(23150), + 11: uint16(23151), + 12: uint16(23152), + 13: uint16(23153), + 14: uint16(23154), + 15: uint16(23155), + 16: uint16(23160), + 17: uint16(23161), + 18: uint16(23163), + 19: uint16(23164), + 20: uint16(23165), + 21: uint16(23166), + 22: uint16(23168), + 23: uint16(23169), + 24: uint16(23170), + 25: uint16(23171), + 26: uint16(23172), + 27: uint16(23173), + 28: uint16(23174), + 29: uint16(23175), + 30: uint16(23176), + 31: uint16(23177), + 32: uint16(23178), + 33: uint16(23179), + 34: uint16(23180), + 35: uint16(23181), + 36: uint16(23182), + 37: uint16(23183), + 38: uint16(23184), + 39: uint16(23185), + 40: uint16(23187), + 41: uint16(23188), + 42: uint16(23189), + 43: uint16(23190), + 44: uint16(23191), + 45: uint16(23192), + 46: uint16(23193), + 47: uint16(23196), + 48: uint16(23197), + 49: uint16(23198), + 50: uint16(23199), + 51: uint16(23200), + 52: uint16(23201), + 53: uint16(23202), + 54: uint16(23203), + 55: uint16(23204), + 56: uint16(23205), + 57: uint16(23206), + 58: uint16(23207), + 59: uint16(23208), + 60: uint16(23209), + 61: uint16(23211), + 62: uint16(23212), + 63: uint16(23213), + 64: uint16(23214), + 65: uint16(23215), + 66: uint16(23216), + 67: uint16(23217), + 68: uint16(23220), + 69: uint16(23222), + 70: uint16(23223), + 71: uint16(23225), + 72: uint16(23226), + 73: uint16(23227), + 74: uint16(23228), + 75: uint16(23229), + 76: uint16(23231), + 77: uint16(23232), + 78: uint16(23235), + 79: uint16(23236), + 80: uint16(23237), + 81: uint16(23238), + 82: uint16(23239), + 83: uint16(23240), + 84: uint16(23242), + 85: uint16(23243), + 86: uint16(23245), + 87: uint16(23246), + 88: uint16(23247), + 89: uint16(23248), + 90: uint16(23249), + 91: uint16(23251), + 92: uint16(23253), + 93: uint16(23255), + 94: uint16(23257), + 95: uint16(23258), + 96: uint16(23259), + 97: uint16(23261), + 98: uint16(23262), + 99: uint16(23263), + 100: uint16(23266), + 101: uint16(23268), + 102: uint16(23269), + 103: uint16(23271), + 104: uint16(23272), + 105: uint16(23274), + 106: uint16(23276), + 107: uint16(23277), + 108: uint16(23278), + 109: uint16(23279), + 110: uint16(23280), + 111: uint16(23282), + 112: uint16(23283), + 113: uint16(23284), + 114: uint16(23285), + 115: uint16(23286), + 116: uint16(23287), + 117: uint16(23288), + 118: uint16(23289), + 119: uint16(23290), + 120: uint16(23291), + 121: uint16(23292), + 122: uint16(23293), + 123: uint16(23294), + 124: uint16(23295), + 125: uint16(23296), + 126: uint16(23297), + 127: uint16(23298), + 128: uint16(23299), + 129: uint16(23300), + 130: uint16(23301), + 131: uint16(23302), + 132: uint16(23303), + 133: uint16(23304), + 134: uint16(23306), + 135: uint16(23307), + 136: uint16(23308), + 137: uint16(23309), + 138: uint16(23310), + 139: uint16(23311), + 140: uint16(23312), + 141: uint16(23313), + 142: uint16(23314), + 143: uint16(23315), + 144: uint16(23316), + 145: uint16(23317), + 146: uint16(23320), + 147: uint16(23321), + 148: uint16(23322), + 149: uint16(23323), + 150: uint16(23324), + 151: uint16(23325), + 152: uint16(23326), + 153: uint16(23327), + 154: uint16(23328), + 155: uint16(23329), + 156: uint16(23330), + 157: uint16(23331), + 158: uint16(23332), + 159: uint16(23333), + 160: uint16(23334), + 161: uint16(23335), + 162: uint16(23336), + 163: uint16(23337), + 164: uint16(23338), + 165: uint16(23339), + 166: uint16(23340), + 167: uint16(23341), + 168: uint16(23342), + 169: uint16(23343), + 170: uint16(23344), + 171: uint16(23345), + 172: uint16(23347), + 173: uint16(23349), + 174: uint16(23350), + 175: uint16(23352), + 176: uint16(23353), + 177: uint16(23354), + 178: uint16(23355), + 179: uint16(23356), + 180: uint16(23357), + 181: uint16(23358), + 182: uint16(23359), + 183: uint16(23361), + 184: uint16(23362), + 185: uint16(23363), + 186: uint16(23364), + 187: uint16(23365), + 188: uint16(23366), + 189: uint16(23367), + }, + 11: { + 0: uint16(23368), + 1: uint16(23369), + 2: uint16(23370), + 3: uint16(23371), + 4: uint16(23372), + 5: uint16(23373), + 6: uint16(23374), + 7: uint16(23375), + 8: uint16(23378), + 9: uint16(23382), + 10: uint16(23390), + 11: uint16(23392), + 12: uint16(23393), + 13: uint16(23399), + 14: uint16(23400), + 15: uint16(23403), + 16: uint16(23405), + 17: uint16(23406), + 18: uint16(23407), + 19: uint16(23410), + 20: uint16(23412), + 21: uint16(23414), + 22: uint16(23415), + 23: uint16(23416), + 24: uint16(23417), + 25: uint16(23419), + 26: uint16(23420), + 27: uint16(23422), + 28: uint16(23423), + 29: uint16(23426), + 30: uint16(23430), + 31: uint16(23434), + 32: uint16(23437), + 33: uint16(23438), + 34: uint16(23440), + 35: uint16(23441), + 36: uint16(23442), + 37: uint16(23444), + 38: uint16(23446), + 39: uint16(23455), + 40: uint16(23463), + 41: uint16(23464), + 42: uint16(23465), + 43: uint16(23468), + 44: uint16(23469), + 45: uint16(23470), + 46: uint16(23471), + 47: uint16(23473), + 48: uint16(23474), + 49: uint16(23479), + 50: uint16(23482), + 51: uint16(23483), + 52: uint16(23484), + 53: uint16(23488), + 54: uint16(23489), + 55: uint16(23491), + 56: uint16(23496), + 57: uint16(23497), + 58: uint16(23498), + 59: uint16(23499), + 60: uint16(23501), + 61: uint16(23502), + 62: uint16(23503), + 63: uint16(23505), + 64: uint16(23508), + 65: uint16(23509), + 66: uint16(23510), + 67: uint16(23511), + 68: uint16(23512), + 69: uint16(23513), + 70: uint16(23514), + 71: uint16(23515), + 72: uint16(23516), + 73: uint16(23520), + 74: uint16(23522), + 75: uint16(23523), + 76: uint16(23526), + 77: uint16(23527), + 78: uint16(23529), + 79: uint16(23530), + 80: uint16(23531), + 81: uint16(23532), + 82: uint16(23533), + 83: uint16(23535), + 84: uint16(23537), + 85: uint16(23538), + 86: uint16(23539), + 87: uint16(23540), + 88: uint16(23541), + 89: uint16(23542), + 90: uint16(23543), + 91: uint16(23549), + 92: uint16(23550), + 93: uint16(23552), + 94: uint16(23554), + 95: uint16(23555), + 96: uint16(23557), + 97: uint16(23559), + 98: uint16(23560), + 99: uint16(23563), + 100: uint16(23564), + 101: uint16(23565), + 102: uint16(23566), + 103: uint16(23568), + 104: uint16(23570), + 105: uint16(23571), + 106: uint16(23575), + 107: uint16(23577), + 108: uint16(23579), + 109: uint16(23582), + 110: uint16(23583), + 111: uint16(23584), + 112: uint16(23585), + 113: uint16(23587), + 114: uint16(23590), + 115: uint16(23592), + 116: uint16(23593), + 117: uint16(23594), + 118: uint16(23595), + 119: uint16(23597), + 120: uint16(23598), + 121: uint16(23599), + 122: uint16(23600), + 123: uint16(23602), + 124: uint16(23603), + 125: uint16(23605), + 126: uint16(23606), + 127: uint16(23607), + 128: uint16(23619), + 129: uint16(23620), + 130: uint16(23622), + 131: uint16(23623), + 132: uint16(23628), + 133: uint16(23629), + 134: uint16(23634), + 135: uint16(23635), + 136: uint16(23636), + 137: uint16(23638), + 138: uint16(23639), + 139: uint16(23640), + 140: uint16(23642), + 141: uint16(23643), + 142: uint16(23644), + 143: uint16(23645), + 144: uint16(23647), + 145: uint16(23650), + 146: uint16(23652), + 147: uint16(23655), + 148: uint16(23656), + 149: uint16(23657), + 150: uint16(23658), + 151: uint16(23659), + 152: uint16(23660), + 153: uint16(23661), + 154: uint16(23664), + 155: uint16(23666), + 156: uint16(23667), + 157: uint16(23668), + 158: uint16(23669), + 159: uint16(23670), + 160: uint16(23671), + 161: uint16(23672), + 162: uint16(23675), + 163: uint16(23676), + 164: uint16(23677), + 165: uint16(23678), + 166: uint16(23680), + 167: uint16(23683), + 168: uint16(23684), + 169: uint16(23685), + 170: uint16(23686), + 171: uint16(23687), + 172: uint16(23689), + 173: uint16(23690), + 174: uint16(23691), + 175: uint16(23694), + 176: uint16(23695), + 177: uint16(23698), + 178: uint16(23699), + 179: uint16(23701), + 180: uint16(23709), + 181: uint16(23710), + 182: uint16(23711), + 183: uint16(23712), + 184: uint16(23713), + 185: uint16(23716), + 186: uint16(23717), + 187: uint16(23718), + 188: uint16(23719), + 189: uint16(23720), + }, + 12: { + 0: uint16(23722), + 1: uint16(23726), + 2: uint16(23727), + 3: uint16(23728), + 4: uint16(23730), + 5: uint16(23732), + 6: uint16(23734), + 7: uint16(23737), + 8: uint16(23738), + 9: uint16(23739), + 10: uint16(23740), + 11: uint16(23742), + 12: uint16(23744), + 13: uint16(23746), + 14: uint16(23747), + 15: uint16(23749), + 16: uint16(23750), + 17: uint16(23751), + 18: uint16(23752), + 19: uint16(23753), + 20: uint16(23754), + 21: uint16(23756), + 22: uint16(23757), + 23: uint16(23758), + 24: uint16(23759), + 25: uint16(23760), + 26: uint16(23761), + 27: uint16(23763), + 28: uint16(23764), + 29: uint16(23765), + 30: uint16(23766), + 31: uint16(23767), + 32: uint16(23768), + 33: uint16(23770), + 34: uint16(23771), + 35: uint16(23772), + 36: uint16(23773), + 37: uint16(23774), + 38: uint16(23775), + 39: uint16(23776), + 40: uint16(23778), + 41: uint16(23779), + 42: uint16(23783), + 43: uint16(23785), + 44: uint16(23787), + 45: uint16(23788), + 46: uint16(23790), + 47: uint16(23791), + 48: uint16(23793), + 49: uint16(23794), + 50: uint16(23795), + 51: uint16(23796), + 52: uint16(23797), + 53: uint16(23798), + 54: uint16(23799), + 55: uint16(23800), + 56: uint16(23801), + 57: uint16(23802), + 58: uint16(23804), + 59: uint16(23805), + 60: uint16(23806), + 61: uint16(23807), + 62: uint16(23808), + 63: uint16(23809), + 64: uint16(23812), + 65: uint16(23813), + 66: uint16(23816), + 67: uint16(23817), + 68: uint16(23818), + 69: uint16(23819), + 70: uint16(23820), + 71: uint16(23821), + 72: uint16(23823), + 73: uint16(23824), + 74: uint16(23825), + 75: uint16(23826), + 76: uint16(23827), + 77: uint16(23829), + 78: uint16(23831), + 79: uint16(23832), + 80: uint16(23833), + 81: uint16(23834), + 82: uint16(23836), + 83: uint16(23837), + 84: uint16(23839), + 85: uint16(23840), + 86: uint16(23841), + 87: uint16(23842), + 88: uint16(23843), + 89: uint16(23845), + 90: uint16(23848), + 91: uint16(23850), + 92: uint16(23851), + 93: uint16(23852), + 94: uint16(23855), + 95: uint16(23856), + 96: uint16(23857), + 97: uint16(23858), + 98: uint16(23859), + 99: uint16(23861), + 100: uint16(23862), + 101: uint16(23863), + 102: uint16(23864), + 103: uint16(23865), + 104: uint16(23866), + 105: uint16(23867), + 106: uint16(23868), + 107: uint16(23871), + 108: uint16(23872), + 109: uint16(23873), + 110: uint16(23874), + 111: uint16(23875), + 112: uint16(23876), + 113: uint16(23877), + 114: uint16(23878), + 115: uint16(23880), + 116: uint16(23881), + 117: uint16(23885), + 118: uint16(23886), + 119: uint16(23887), + 120: uint16(23888), + 121: uint16(23889), + 122: uint16(23890), + 123: uint16(23891), + 124: uint16(23892), + 125: uint16(23893), + 126: uint16(23894), + 127: uint16(23895), + 128: uint16(23897), + 129: uint16(23898), + 130: uint16(23900), + 131: uint16(23902), + 132: uint16(23903), + 133: uint16(23904), + 134: uint16(23905), + 135: uint16(23906), + 136: uint16(23907), + 137: uint16(23908), + 138: uint16(23909), + 139: uint16(23910), + 140: uint16(23911), + 141: uint16(23912), + 142: uint16(23914), + 143: uint16(23917), + 144: uint16(23918), + 145: uint16(23920), + 146: uint16(23921), + 147: uint16(23922), + 148: uint16(23923), + 149: uint16(23925), + 150: uint16(23926), + 151: uint16(23927), + 152: uint16(23928), + 153: uint16(23929), + 154: uint16(23930), + 155: uint16(23931), + 156: uint16(23932), + 157: uint16(23933), + 158: uint16(23934), + 159: uint16(23935), + 160: uint16(23936), + 161: uint16(23937), + 162: uint16(23939), + 163: uint16(23940), + 164: uint16(23941), + 165: uint16(23942), + 166: uint16(23943), + 167: uint16(23944), + 168: uint16(23945), + 169: uint16(23946), + 170: uint16(23947), + 171: uint16(23948), + 172: uint16(23949), + 173: uint16(23950), + 174: uint16(23951), + 175: uint16(23952), + 176: uint16(23953), + 177: uint16(23954), + 178: uint16(23955), + 179: uint16(23956), + 180: uint16(23957), + 181: uint16(23958), + 182: uint16(23959), + 183: uint16(23960), + 184: uint16(23962), + 185: uint16(23963), + 186: uint16(23964), + 187: uint16(23966), + 188: uint16(23967), + 189: uint16(23968), + }, + 13: { + 0: uint16(23969), + 1: uint16(23970), + 2: uint16(23971), + 3: uint16(23972), + 4: uint16(23973), + 5: uint16(23974), + 6: uint16(23975), + 7: uint16(23976), + 8: uint16(23977), + 9: uint16(23978), + 10: uint16(23979), + 11: uint16(23980), + 12: uint16(23981), + 13: uint16(23982), + 14: uint16(23983), + 15: uint16(23984), + 16: uint16(23985), + 17: uint16(23986), + 18: uint16(23987), + 19: uint16(23988), + 20: uint16(23989), + 21: uint16(23990), + 22: uint16(23992), + 23: uint16(23993), + 24: uint16(23994), + 25: uint16(23995), + 26: uint16(23996), + 27: uint16(23997), + 28: uint16(23998), + 29: uint16(23999), + 30: uint16(24000), + 31: uint16(24001), + 32: uint16(24002), + 33: uint16(24003), + 34: uint16(24004), + 35: uint16(24006), + 36: uint16(24007), + 37: uint16(24008), + 38: uint16(24009), + 39: uint16(24010), + 40: uint16(24011), + 41: uint16(24012), + 42: uint16(24014), + 43: uint16(24015), + 44: uint16(24016), + 45: uint16(24017), + 46: uint16(24018), + 47: uint16(24019), + 48: uint16(24020), + 49: uint16(24021), + 50: uint16(24022), + 51: uint16(24023), + 52: uint16(24024), + 53: uint16(24025), + 54: uint16(24026), + 55: uint16(24028), + 56: uint16(24031), + 57: uint16(24032), + 58: uint16(24035), + 59: uint16(24036), + 60: uint16(24042), + 61: uint16(24044), + 62: uint16(24045), + 63: uint16(24048), + 64: uint16(24053), + 65: uint16(24054), + 66: uint16(24056), + 67: uint16(24057), + 68: uint16(24058), + 69: uint16(24059), + 70: uint16(24060), + 71: uint16(24063), + 72: uint16(24064), + 73: uint16(24068), + 74: uint16(24071), + 75: uint16(24073), + 76: uint16(24074), + 77: uint16(24075), + 78: uint16(24077), + 79: uint16(24078), + 80: uint16(24082), + 81: uint16(24083), + 82: uint16(24087), + 83: uint16(24094), + 84: uint16(24095), + 85: uint16(24096), + 86: uint16(24097), + 87: uint16(24098), + 88: uint16(24099), + 89: uint16(24100), + 90: uint16(24101), + 91: uint16(24104), + 92: uint16(24105), + 93: uint16(24106), + 94: uint16(24107), + 95: uint16(24108), + 96: uint16(24111), + 97: uint16(24112), + 98: uint16(24114), + 99: uint16(24115), + 100: uint16(24116), + 101: uint16(24117), + 102: uint16(24118), + 103: uint16(24121), + 104: uint16(24122), + 105: uint16(24126), + 106: uint16(24127), + 107: uint16(24128), + 108: uint16(24129), + 109: uint16(24131), + 110: uint16(24134), + 111: uint16(24135), + 112: uint16(24136), + 113: uint16(24137), + 114: uint16(24138), + 115: uint16(24139), + 116: uint16(24141), + 117: uint16(24142), + 118: uint16(24143), + 119: uint16(24144), + 120: uint16(24145), + 121: uint16(24146), + 122: uint16(24147), + 123: uint16(24150), + 124: uint16(24151), + 125: uint16(24152), + 126: uint16(24153), + 127: uint16(24154), + 128: uint16(24156), + 129: uint16(24157), + 130: uint16(24159), + 131: uint16(24160), + 132: uint16(24163), + 133: uint16(24164), + 134: uint16(24165), + 135: uint16(24166), + 136: uint16(24167), + 137: uint16(24168), + 138: uint16(24169), + 139: uint16(24170), + 140: uint16(24171), + 141: uint16(24172), + 142: uint16(24173), + 143: uint16(24174), + 144: uint16(24175), + 145: uint16(24176), + 146: uint16(24177), + 147: uint16(24181), + 148: uint16(24183), + 149: uint16(24185), + 150: uint16(24190), + 151: uint16(24193), + 152: uint16(24194), + 153: uint16(24195), + 154: uint16(24197), + 155: uint16(24200), + 156: uint16(24201), + 157: uint16(24204), + 158: uint16(24205), + 159: uint16(24206), + 160: uint16(24210), + 161: uint16(24216), + 162: uint16(24219), + 163: uint16(24221), + 164: uint16(24225), + 165: uint16(24226), + 166: uint16(24227), + 167: uint16(24228), + 168: uint16(24232), + 169: uint16(24233), + 170: uint16(24234), + 171: uint16(24235), + 172: uint16(24236), + 173: uint16(24238), + 174: uint16(24239), + 175: uint16(24240), + 176: uint16(24241), + 177: uint16(24242), + 178: uint16(24244), + 179: uint16(24250), + 180: uint16(24251), + 181: uint16(24252), + 182: uint16(24253), + 183: uint16(24255), + 184: uint16(24256), + 185: uint16(24257), + 186: uint16(24258), + 187: uint16(24259), + 188: uint16(24260), + 189: uint16(24261), + }, + 14: { + 0: uint16(24262), + 1: uint16(24263), + 2: uint16(24264), + 3: uint16(24267), + 4: uint16(24268), + 5: uint16(24269), + 6: uint16(24270), + 7: uint16(24271), + 8: uint16(24272), + 9: uint16(24276), + 10: uint16(24277), + 11: uint16(24279), + 12: uint16(24280), + 13: uint16(24281), + 14: uint16(24282), + 15: uint16(24284), + 16: uint16(24285), + 17: uint16(24286), + 18: uint16(24287), + 19: uint16(24288), + 20: uint16(24289), + 21: uint16(24290), + 22: uint16(24291), + 23: uint16(24292), + 24: uint16(24293), + 25: uint16(24294), + 26: uint16(24295), + 27: uint16(24297), + 28: uint16(24299), + 29: uint16(24300), + 30: uint16(24301), + 31: uint16(24302), + 32: uint16(24303), + 33: uint16(24304), + 34: uint16(24305), + 35: uint16(24306), + 36: uint16(24307), + 37: uint16(24309), + 38: uint16(24312), + 39: uint16(24313), + 40: uint16(24315), + 41: uint16(24316), + 42: uint16(24317), + 43: uint16(24325), + 44: uint16(24326), + 45: uint16(24327), + 46: uint16(24329), + 47: uint16(24332), + 48: uint16(24333), + 49: uint16(24334), + 50: uint16(24336), + 51: uint16(24338), + 52: uint16(24340), + 53: uint16(24342), + 54: uint16(24345), + 55: uint16(24346), + 56: uint16(24348), + 57: uint16(24349), + 58: uint16(24350), + 59: uint16(24353), + 60: uint16(24354), + 61: uint16(24355), + 62: uint16(24356), + 63: uint16(24360), + 64: uint16(24363), + 65: uint16(24364), + 66: uint16(24366), + 67: uint16(24368), + 68: uint16(24370), + 69: uint16(24371), + 70: uint16(24372), + 71: uint16(24373), + 72: uint16(24374), + 73: uint16(24375), + 74: uint16(24376), + 75: uint16(24379), + 76: uint16(24381), + 77: uint16(24382), + 78: uint16(24383), + 79: uint16(24385), + 80: uint16(24386), + 81: uint16(24387), + 82: uint16(24388), + 83: uint16(24389), + 84: uint16(24390), + 85: uint16(24391), + 86: uint16(24392), + 87: uint16(24393), + 88: uint16(24394), + 89: uint16(24395), + 90: uint16(24396), + 91: uint16(24397), + 92: uint16(24398), + 93: uint16(24399), + 94: uint16(24401), + 95: uint16(24404), + 96: uint16(24409), + 97: uint16(24410), + 98: uint16(24411), + 99: uint16(24412), + 100: uint16(24414), + 101: uint16(24415), + 102: uint16(24416), + 103: uint16(24419), + 104: uint16(24421), + 105: uint16(24423), + 106: uint16(24424), + 107: uint16(24427), + 108: uint16(24430), + 109: uint16(24431), + 110: uint16(24434), + 111: uint16(24436), + 112: uint16(24437), + 113: uint16(24438), + 114: uint16(24440), + 115: uint16(24442), + 116: uint16(24445), + 117: uint16(24446), + 118: uint16(24447), + 119: uint16(24451), + 120: uint16(24454), + 121: uint16(24461), + 122: uint16(24462), + 123: uint16(24463), + 124: uint16(24465), + 125: uint16(24467), + 126: uint16(24468), + 127: uint16(24470), + 128: uint16(24474), + 129: uint16(24475), + 130: uint16(24477), + 131: uint16(24478), + 132: uint16(24479), + 133: uint16(24480), + 134: uint16(24482), + 135: uint16(24483), + 136: uint16(24484), + 137: uint16(24485), + 138: uint16(24486), + 139: uint16(24487), + 140: uint16(24489), + 141: uint16(24491), + 142: uint16(24492), + 143: uint16(24495), + 144: uint16(24496), + 145: uint16(24497), + 146: uint16(24498), + 147: uint16(24499), + 148: uint16(24500), + 149: uint16(24502), + 150: uint16(24504), + 151: uint16(24505), + 152: uint16(24506), + 153: uint16(24507), + 154: uint16(24510), + 155: uint16(24511), + 156: uint16(24512), + 157: uint16(24513), + 158: uint16(24514), + 159: uint16(24519), + 160: uint16(24520), + 161: uint16(24522), + 162: uint16(24523), + 163: uint16(24526), + 164: uint16(24531), + 165: uint16(24532), + 166: uint16(24533), + 167: uint16(24538), + 168: uint16(24539), + 169: uint16(24540), + 170: uint16(24542), + 171: uint16(24543), + 172: uint16(24546), + 173: uint16(24547), + 174: uint16(24549), + 175: uint16(24550), + 176: uint16(24552), + 177: uint16(24553), + 178: uint16(24556), + 179: uint16(24559), + 180: uint16(24560), + 181: uint16(24562), + 182: uint16(24563), + 183: uint16(24564), + 184: uint16(24566), + 185: uint16(24567), + 186: uint16(24569), + 187: uint16(24570), + 188: uint16(24572), + 189: uint16(24583), + }, + 15: { + 0: uint16(24584), + 1: uint16(24585), + 2: uint16(24587), + 3: uint16(24588), + 4: uint16(24592), + 5: uint16(24593), + 6: uint16(24595), + 7: uint16(24599), + 8: uint16(24600), + 9: uint16(24602), + 10: uint16(24606), + 11: uint16(24607), + 12: uint16(24610), + 13: uint16(24611), + 14: uint16(24612), + 15: uint16(24620), + 16: uint16(24621), + 17: uint16(24622), + 18: uint16(24624), + 19: uint16(24625), + 20: uint16(24626), + 21: uint16(24627), + 22: uint16(24628), + 23: uint16(24630), + 24: uint16(24631), + 25: uint16(24632), + 26: uint16(24633), + 27: uint16(24634), + 28: uint16(24637), + 29: uint16(24638), + 30: uint16(24640), + 31: uint16(24644), + 32: uint16(24645), + 33: uint16(24646), + 34: uint16(24647), + 35: uint16(24648), + 36: uint16(24649), + 37: uint16(24650), + 38: uint16(24652), + 39: uint16(24654), + 40: uint16(24655), + 41: uint16(24657), + 42: uint16(24659), + 43: uint16(24660), + 44: uint16(24662), + 45: uint16(24663), + 46: uint16(24664), + 47: uint16(24667), + 48: uint16(24668), + 49: uint16(24670), + 50: uint16(24671), + 51: uint16(24672), + 52: uint16(24673), + 53: uint16(24677), + 54: uint16(24678), + 55: uint16(24686), + 56: uint16(24689), + 57: uint16(24690), + 58: uint16(24692), + 59: uint16(24693), + 60: uint16(24695), + 61: uint16(24702), + 62: uint16(24704), + 63: uint16(24705), + 64: uint16(24706), + 65: uint16(24709), + 66: uint16(24710), + 67: uint16(24711), + 68: uint16(24712), + 69: uint16(24714), + 70: uint16(24715), + 71: uint16(24718), + 72: uint16(24719), + 73: uint16(24720), + 74: uint16(24721), + 75: uint16(24723), + 76: uint16(24725), + 77: uint16(24727), + 78: uint16(24728), + 79: uint16(24729), + 80: uint16(24732), + 81: uint16(24734), + 82: uint16(24737), + 83: uint16(24738), + 84: uint16(24740), + 85: uint16(24741), + 86: uint16(24743), + 87: uint16(24745), + 88: uint16(24746), + 89: uint16(24750), + 90: uint16(24752), + 91: uint16(24755), + 92: uint16(24757), + 93: uint16(24758), + 94: uint16(24759), + 95: uint16(24761), + 96: uint16(24762), + 97: uint16(24765), + 98: uint16(24766), + 99: uint16(24767), + 100: uint16(24768), + 101: uint16(24769), + 102: uint16(24770), + 103: uint16(24771), + 104: uint16(24772), + 105: uint16(24775), + 106: uint16(24776), + 107: uint16(24777), + 108: uint16(24780), + 109: uint16(24781), + 110: uint16(24782), + 111: uint16(24783), + 112: uint16(24784), + 113: uint16(24786), + 114: uint16(24787), + 115: uint16(24788), + 116: uint16(24790), + 117: uint16(24791), + 118: uint16(24793), + 119: uint16(24795), + 120: uint16(24798), + 121: uint16(24801), + 122: uint16(24802), + 123: uint16(24803), + 124: uint16(24804), + 125: uint16(24805), + 126: uint16(24810), + 127: uint16(24817), + 128: uint16(24818), + 129: uint16(24821), + 130: uint16(24823), + 131: uint16(24824), + 132: uint16(24827), + 133: uint16(24828), + 134: uint16(24829), + 135: uint16(24830), + 136: uint16(24831), + 137: uint16(24834), + 138: uint16(24835), + 139: uint16(24836), + 140: uint16(24837), + 141: uint16(24839), + 142: uint16(24842), + 143: uint16(24843), + 144: uint16(24844), + 145: uint16(24848), + 146: uint16(24849), + 147: uint16(24850), + 148: uint16(24851), + 149: uint16(24852), + 150: uint16(24854), + 151: uint16(24855), + 152: uint16(24856), + 153: uint16(24857), + 154: uint16(24859), + 155: uint16(24860), + 156: uint16(24861), + 157: uint16(24862), + 158: uint16(24865), + 159: uint16(24866), + 160: uint16(24869), + 161: uint16(24872), + 162: uint16(24873), + 163: uint16(24874), + 164: uint16(24876), + 165: uint16(24877), + 166: uint16(24878), + 167: uint16(24879), + 168: uint16(24880), + 169: uint16(24881), + 170: uint16(24882), + 171: uint16(24883), + 172: uint16(24884), + 173: uint16(24885), + 174: uint16(24886), + 175: uint16(24887), + 176: uint16(24888), + 177: uint16(24889), + 178: uint16(24890), + 179: uint16(24891), + 180: uint16(24892), + 181: uint16(24893), + 182: uint16(24894), + 183: uint16(24896), + 184: uint16(24897), + 185: uint16(24898), + 186: uint16(24899), + 187: uint16(24900), + 188: uint16(24901), + 189: uint16(24902), + }, + 16: { + 0: uint16(24903), + 1: uint16(24905), + 2: uint16(24907), + 3: uint16(24909), + 4: uint16(24911), + 5: uint16(24912), + 6: uint16(24914), + 7: uint16(24915), + 8: uint16(24916), + 9: uint16(24918), + 10: uint16(24919), + 11: uint16(24920), + 12: uint16(24921), + 13: uint16(24922), + 14: uint16(24923), + 15: uint16(24924), + 16: uint16(24926), + 17: uint16(24927), + 18: uint16(24928), + 19: uint16(24929), + 20: uint16(24931), + 21: uint16(24932), + 22: uint16(24933), + 23: uint16(24934), + 24: uint16(24937), + 25: uint16(24938), + 26: uint16(24939), + 27: uint16(24940), + 28: uint16(24941), + 29: uint16(24942), + 30: uint16(24943), + 31: uint16(24945), + 32: uint16(24946), + 33: uint16(24947), + 34: uint16(24948), + 35: uint16(24950), + 36: uint16(24952), + 37: uint16(24953), + 38: uint16(24954), + 39: uint16(24955), + 40: uint16(24956), + 41: uint16(24957), + 42: uint16(24958), + 43: uint16(24959), + 44: uint16(24960), + 45: uint16(24961), + 46: uint16(24962), + 47: uint16(24963), + 48: uint16(24964), + 49: uint16(24965), + 50: uint16(24966), + 51: uint16(24967), + 52: uint16(24968), + 53: uint16(24969), + 54: uint16(24970), + 55: uint16(24972), + 56: uint16(24973), + 57: uint16(24975), + 58: uint16(24976), + 59: uint16(24977), + 60: uint16(24978), + 61: uint16(24979), + 62: uint16(24981), + 63: uint16(24982), + 64: uint16(24983), + 65: uint16(24984), + 66: uint16(24985), + 67: uint16(24986), + 68: uint16(24987), + 69: uint16(24988), + 70: uint16(24990), + 71: uint16(24991), + 72: uint16(24992), + 73: uint16(24993), + 74: uint16(24994), + 75: uint16(24995), + 76: uint16(24996), + 77: uint16(24997), + 78: uint16(24998), + 79: uint16(25002), + 80: uint16(25003), + 81: uint16(25005), + 82: uint16(25006), + 83: uint16(25007), + 84: uint16(25008), + 85: uint16(25009), + 86: uint16(25010), + 87: uint16(25011), + 88: uint16(25012), + 89: uint16(25013), + 90: uint16(25014), + 91: uint16(25016), + 92: uint16(25017), + 93: uint16(25018), + 94: uint16(25019), + 95: uint16(25020), + 96: uint16(25021), + 97: uint16(25023), + 98: uint16(25024), + 99: uint16(25025), + 100: uint16(25027), + 101: uint16(25028), + 102: uint16(25029), + 103: uint16(25030), + 104: uint16(25031), + 105: uint16(25033), + 106: uint16(25036), + 107: uint16(25037), + 108: uint16(25038), + 109: uint16(25039), + 110: uint16(25040), + 111: uint16(25043), + 112: uint16(25045), + 113: uint16(25046), + 114: uint16(25047), + 115: uint16(25048), + 116: uint16(25049), + 117: uint16(25050), + 118: uint16(25051), + 119: uint16(25052), + 120: uint16(25053), + 121: uint16(25054), + 122: uint16(25055), + 123: uint16(25056), + 124: uint16(25057), + 125: uint16(25058), + 126: uint16(25059), + 127: uint16(25060), + 128: uint16(25061), + 129: uint16(25063), + 130: uint16(25064), + 131: uint16(25065), + 132: uint16(25066), + 133: uint16(25067), + 134: uint16(25068), + 135: uint16(25069), + 136: uint16(25070), + 137: uint16(25071), + 138: uint16(25072), + 139: uint16(25073), + 140: uint16(25074), + 141: uint16(25075), + 142: uint16(25076), + 143: uint16(25078), + 144: uint16(25079), + 145: uint16(25080), + 146: uint16(25081), + 147: uint16(25082), + 148: uint16(25083), + 149: uint16(25084), + 150: uint16(25085), + 151: uint16(25086), + 152: uint16(25088), + 153: uint16(25089), + 154: uint16(25090), + 155: uint16(25091), + 156: uint16(25092), + 157: uint16(25093), + 158: uint16(25095), + 159: uint16(25097), + 160: uint16(25107), + 161: uint16(25108), + 162: uint16(25113), + 163: uint16(25116), + 164: uint16(25117), + 165: uint16(25118), + 166: uint16(25120), + 167: uint16(25123), + 168: uint16(25126), + 169: uint16(25127), + 170: uint16(25128), + 171: uint16(25129), + 172: uint16(25131), + 173: uint16(25133), + 174: uint16(25135), + 175: uint16(25136), + 176: uint16(25137), + 177: uint16(25138), + 178: uint16(25141), + 179: uint16(25142), + 180: uint16(25144), + 181: uint16(25145), + 182: uint16(25146), + 183: uint16(25147), + 184: uint16(25148), + 185: uint16(25154), + 186: uint16(25156), + 187: uint16(25157), + 188: uint16(25158), + 189: uint16(25162), + }, + 17: { + 0: uint16(25167), + 1: uint16(25168), + 2: uint16(25173), + 3: uint16(25174), + 4: uint16(25175), + 5: uint16(25177), + 6: uint16(25178), + 7: uint16(25180), + 8: uint16(25181), + 9: uint16(25182), + 10: uint16(25183), + 11: uint16(25184), + 12: uint16(25185), + 13: uint16(25186), + 14: uint16(25188), + 15: uint16(25189), + 16: uint16(25192), + 17: uint16(25201), + 18: uint16(25202), + 19: uint16(25204), + 20: uint16(25205), + 21: uint16(25207), + 22: uint16(25208), + 23: uint16(25210), + 24: uint16(25211), + 25: uint16(25213), + 26: uint16(25217), + 27: uint16(25218), + 28: uint16(25219), + 29: uint16(25221), + 30: uint16(25222), + 31: uint16(25223), + 32: uint16(25224), + 33: uint16(25227), + 34: uint16(25228), + 35: uint16(25229), + 36: uint16(25230), + 37: uint16(25231), + 38: uint16(25232), + 39: uint16(25236), + 40: uint16(25241), + 41: uint16(25244), + 42: uint16(25245), + 43: uint16(25246), + 44: uint16(25251), + 45: uint16(25254), + 46: uint16(25255), + 47: uint16(25257), + 48: uint16(25258), + 49: uint16(25261), + 50: uint16(25262), + 51: uint16(25263), + 52: uint16(25264), + 53: uint16(25266), + 54: uint16(25267), + 55: uint16(25268), + 56: uint16(25270), + 57: uint16(25271), + 58: uint16(25272), + 59: uint16(25274), + 60: uint16(25278), + 61: uint16(25280), + 62: uint16(25281), + 63: uint16(25283), + 64: uint16(25291), + 65: uint16(25295), + 66: uint16(25297), + 67: uint16(25301), + 68: uint16(25309), + 69: uint16(25310), + 70: uint16(25312), + 71: uint16(25313), + 72: uint16(25316), + 73: uint16(25322), + 74: uint16(25323), + 75: uint16(25328), + 76: uint16(25330), + 77: uint16(25333), + 78: uint16(25336), + 79: uint16(25337), + 80: uint16(25338), + 81: uint16(25339), + 82: uint16(25344), + 83: uint16(25347), + 84: uint16(25348), + 85: uint16(25349), + 86: uint16(25350), + 87: uint16(25354), + 88: uint16(25355), + 89: uint16(25356), + 90: uint16(25357), + 91: uint16(25359), + 92: uint16(25360), + 93: uint16(25362), + 94: uint16(25363), + 95: uint16(25364), + 96: uint16(25365), + 97: uint16(25367), + 98: uint16(25368), + 99: uint16(25369), + 100: uint16(25372), + 101: uint16(25382), + 102: uint16(25383), + 103: uint16(25385), + 104: uint16(25388), + 105: uint16(25389), + 106: uint16(25390), + 107: uint16(25392), + 108: uint16(25393), + 109: uint16(25395), + 110: uint16(25396), + 111: uint16(25397), + 112: uint16(25398), + 113: uint16(25399), + 114: uint16(25400), + 115: uint16(25403), + 116: uint16(25404), + 117: uint16(25406), + 118: uint16(25407), + 119: uint16(25408), + 120: uint16(25409), + 121: uint16(25412), + 122: uint16(25415), + 123: uint16(25416), + 124: uint16(25418), + 125: uint16(25425), + 126: uint16(25426), + 127: uint16(25427), + 128: uint16(25428), + 129: uint16(25430), + 130: uint16(25431), + 131: uint16(25432), + 132: uint16(25433), + 133: uint16(25434), + 134: uint16(25435), + 135: uint16(25436), + 136: uint16(25437), + 137: uint16(25440), + 138: uint16(25444), + 139: uint16(25445), + 140: uint16(25446), + 141: uint16(25448), + 142: uint16(25450), + 143: uint16(25451), + 144: uint16(25452), + 145: uint16(25455), + 146: uint16(25456), + 147: uint16(25458), + 148: uint16(25459), + 149: uint16(25460), + 150: uint16(25461), + 151: uint16(25464), + 152: uint16(25465), + 153: uint16(25468), + 154: uint16(25469), + 155: uint16(25470), + 156: uint16(25471), + 157: uint16(25473), + 158: uint16(25475), + 159: uint16(25476), + 160: uint16(25477), + 161: uint16(25478), + 162: uint16(25483), + 163: uint16(25485), + 164: uint16(25489), + 165: uint16(25491), + 166: uint16(25492), + 167: uint16(25493), + 168: uint16(25495), + 169: uint16(25497), + 170: uint16(25498), + 171: uint16(25499), + 172: uint16(25500), + 173: uint16(25501), + 174: uint16(25502), + 175: uint16(25503), + 176: uint16(25505), + 177: uint16(25508), + 178: uint16(25510), + 179: uint16(25515), + 180: uint16(25519), + 181: uint16(25521), + 182: uint16(25522), + 183: uint16(25525), + 184: uint16(25526), + 185: uint16(25529), + 186: uint16(25531), + 187: uint16(25533), + 188: uint16(25535), + 189: uint16(25536), + }, + 18: { + 0: uint16(25537), + 1: uint16(25538), + 2: uint16(25539), + 3: uint16(25541), + 4: uint16(25543), + 5: uint16(25544), + 6: uint16(25546), + 7: uint16(25547), + 8: uint16(25548), + 9: uint16(25553), + 10: uint16(25555), + 11: uint16(25556), + 12: uint16(25557), + 13: uint16(25559), + 14: uint16(25560), + 15: uint16(25561), + 16: uint16(25562), + 17: uint16(25563), + 18: uint16(25564), + 19: uint16(25565), + 20: uint16(25567), + 21: uint16(25570), + 22: uint16(25572), + 23: uint16(25573), + 24: uint16(25574), + 25: uint16(25575), + 26: uint16(25576), + 27: uint16(25579), + 28: uint16(25580), + 29: uint16(25582), + 30: uint16(25583), + 31: uint16(25584), + 32: uint16(25585), + 33: uint16(25587), + 34: uint16(25589), + 35: uint16(25591), + 36: uint16(25593), + 37: uint16(25594), + 38: uint16(25595), + 39: uint16(25596), + 40: uint16(25598), + 41: uint16(25603), + 42: uint16(25604), + 43: uint16(25606), + 44: uint16(25607), + 45: uint16(25608), + 46: uint16(25609), + 47: uint16(25610), + 48: uint16(25613), + 49: uint16(25614), + 50: uint16(25617), + 51: uint16(25618), + 52: uint16(25621), + 53: uint16(25622), + 54: uint16(25623), + 55: uint16(25624), + 56: uint16(25625), + 57: uint16(25626), + 58: uint16(25629), + 59: uint16(25631), + 60: uint16(25634), + 61: uint16(25635), + 62: uint16(25636), + 63: uint16(25637), + 64: uint16(25639), + 65: uint16(25640), + 66: uint16(25641), + 67: uint16(25643), + 68: uint16(25646), + 69: uint16(25647), + 70: uint16(25648), + 71: uint16(25649), + 72: uint16(25650), + 73: uint16(25651), + 74: uint16(25653), + 75: uint16(25654), + 76: uint16(25655), + 77: uint16(25656), + 78: uint16(25657), + 79: uint16(25659), + 80: uint16(25660), + 81: uint16(25662), + 82: uint16(25664), + 83: uint16(25666), + 84: uint16(25667), + 85: uint16(25673), + 86: uint16(25675), + 87: uint16(25676), + 88: uint16(25677), + 89: uint16(25678), + 90: uint16(25679), + 91: uint16(25680), + 92: uint16(25681), + 93: uint16(25683), + 94: uint16(25685), + 95: uint16(25686), + 96: uint16(25687), + 97: uint16(25689), + 98: uint16(25690), + 99: uint16(25691), + 100: uint16(25692), + 101: uint16(25693), + 102: uint16(25695), + 103: uint16(25696), + 104: uint16(25697), + 105: uint16(25698), + 106: uint16(25699), + 107: uint16(25700), + 108: uint16(25701), + 109: uint16(25702), + 110: uint16(25704), + 111: uint16(25706), + 112: uint16(25707), + 113: uint16(25708), + 114: uint16(25710), + 115: uint16(25711), + 116: uint16(25712), + 117: uint16(25713), + 118: uint16(25714), + 119: uint16(25715), + 120: uint16(25716), + 121: uint16(25717), + 122: uint16(25718), + 123: uint16(25719), + 124: uint16(25723), + 125: uint16(25724), + 126: uint16(25725), + 127: uint16(25726), + 128: uint16(25727), + 129: uint16(25728), + 130: uint16(25729), + 131: uint16(25731), + 132: uint16(25734), + 133: uint16(25736), + 134: uint16(25737), + 135: uint16(25738), + 136: uint16(25739), + 137: uint16(25740), + 138: uint16(25741), + 139: uint16(25742), + 140: uint16(25743), + 141: uint16(25744), + 142: uint16(25747), + 143: uint16(25748), + 144: uint16(25751), + 145: uint16(25752), + 146: uint16(25754), + 147: uint16(25755), + 148: uint16(25756), + 149: uint16(25757), + 150: uint16(25759), + 151: uint16(25760), + 152: uint16(25761), + 153: uint16(25762), + 154: uint16(25763), + 155: uint16(25765), + 156: uint16(25766), + 157: uint16(25767), + 158: uint16(25768), + 159: uint16(25770), + 160: uint16(25771), + 161: uint16(25775), + 162: uint16(25777), + 163: uint16(25778), + 164: uint16(25779), + 165: uint16(25780), + 166: uint16(25782), + 167: uint16(25785), + 168: uint16(25787), + 169: uint16(25789), + 170: uint16(25790), + 171: uint16(25791), + 172: uint16(25793), + 173: uint16(25795), + 174: uint16(25796), + 175: uint16(25798), + 176: uint16(25799), + 177: uint16(25800), + 178: uint16(25801), + 179: uint16(25802), + 180: uint16(25803), + 181: uint16(25804), + 182: uint16(25807), + 183: uint16(25809), + 184: uint16(25811), + 185: uint16(25812), + 186: uint16(25813), + 187: uint16(25814), + 188: uint16(25817), + 189: uint16(25818), + }, + 19: { + 0: uint16(25819), + 1: uint16(25820), + 2: uint16(25821), + 3: uint16(25823), + 4: uint16(25824), + 5: uint16(25825), + 6: uint16(25827), + 7: uint16(25829), + 8: uint16(25831), + 9: uint16(25832), + 10: uint16(25833), + 11: uint16(25834), + 12: uint16(25835), + 13: uint16(25836), + 14: uint16(25837), + 15: uint16(25838), + 16: uint16(25839), + 17: uint16(25840), + 18: uint16(25841), + 19: uint16(25842), + 20: uint16(25843), + 21: uint16(25844), + 22: uint16(25845), + 23: uint16(25846), + 24: uint16(25847), + 25: uint16(25848), + 26: uint16(25849), + 27: uint16(25850), + 28: uint16(25851), + 29: uint16(25852), + 30: uint16(25853), + 31: uint16(25854), + 32: uint16(25855), + 33: uint16(25857), + 34: uint16(25858), + 35: uint16(25859), + 36: uint16(25860), + 37: uint16(25861), + 38: uint16(25862), + 39: uint16(25863), + 40: uint16(25864), + 41: uint16(25866), + 42: uint16(25867), + 43: uint16(25868), + 44: uint16(25869), + 45: uint16(25870), + 46: uint16(25871), + 47: uint16(25872), + 48: uint16(25873), + 49: uint16(25875), + 50: uint16(25876), + 51: uint16(25877), + 52: uint16(25878), + 53: uint16(25879), + 54: uint16(25881), + 55: uint16(25882), + 56: uint16(25883), + 57: uint16(25884), + 58: uint16(25885), + 59: uint16(25886), + 60: uint16(25887), + 61: uint16(25888), + 62: uint16(25889), + 63: uint16(25890), + 64: uint16(25891), + 65: uint16(25892), + 66: uint16(25894), + 67: uint16(25895), + 68: uint16(25896), + 69: uint16(25897), + 70: uint16(25898), + 71: uint16(25900), + 72: uint16(25901), + 73: uint16(25904), + 74: uint16(25905), + 75: uint16(25906), + 76: uint16(25907), + 77: uint16(25911), + 78: uint16(25914), + 79: uint16(25916), + 80: uint16(25917), + 81: uint16(25920), + 82: uint16(25921), + 83: uint16(25922), + 84: uint16(25923), + 85: uint16(25924), + 86: uint16(25926), + 87: uint16(25927), + 88: uint16(25930), + 89: uint16(25931), + 90: uint16(25933), + 91: uint16(25934), + 92: uint16(25936), + 93: uint16(25938), + 94: uint16(25939), + 95: uint16(25940), + 96: uint16(25943), + 97: uint16(25944), + 98: uint16(25946), + 99: uint16(25948), + 100: uint16(25951), + 101: uint16(25952), + 102: uint16(25953), + 103: uint16(25956), + 104: uint16(25957), + 105: uint16(25959), + 106: uint16(25960), + 107: uint16(25961), + 108: uint16(25962), + 109: uint16(25965), + 110: uint16(25966), + 111: uint16(25967), + 112: uint16(25969), + 113: uint16(25971), + 114: uint16(25973), + 115: uint16(25974), + 116: uint16(25976), + 117: uint16(25977), + 118: uint16(25978), + 119: uint16(25979), + 120: uint16(25980), + 121: uint16(25981), + 122: uint16(25982), + 123: uint16(25983), + 124: uint16(25984), + 125: uint16(25985), + 126: uint16(25986), + 127: uint16(25987), + 128: uint16(25988), + 129: uint16(25989), + 130: uint16(25990), + 131: uint16(25992), + 132: uint16(25993), + 133: uint16(25994), + 134: uint16(25997), + 135: uint16(25998), + 136: uint16(25999), + 137: uint16(26002), + 138: uint16(26004), + 139: uint16(26005), + 140: uint16(26006), + 141: uint16(26008), + 142: uint16(26010), + 143: uint16(26013), + 144: uint16(26014), + 145: uint16(26016), + 146: uint16(26018), + 147: uint16(26019), + 148: uint16(26022), + 149: uint16(26024), + 150: uint16(26026), + 151: uint16(26028), + 152: uint16(26030), + 153: uint16(26033), + 154: uint16(26034), + 155: uint16(26035), + 156: uint16(26036), + 157: uint16(26037), + 158: uint16(26038), + 159: uint16(26039), + 160: uint16(26040), + 161: uint16(26042), + 162: uint16(26043), + 163: uint16(26046), + 164: uint16(26047), + 165: uint16(26048), + 166: uint16(26050), + 167: uint16(26055), + 168: uint16(26056), + 169: uint16(26057), + 170: uint16(26058), + 171: uint16(26061), + 172: uint16(26064), + 173: uint16(26065), + 174: uint16(26067), + 175: uint16(26068), + 176: uint16(26069), + 177: uint16(26072), + 178: uint16(26073), + 179: uint16(26074), + 180: uint16(26075), + 181: uint16(26076), + 182: uint16(26077), + 183: uint16(26078), + 184: uint16(26079), + 185: uint16(26081), + 186: uint16(26083), + 187: uint16(26084), + 188: uint16(26090), + 189: uint16(26091), + }, + 20: { + 0: uint16(26098), + 1: uint16(26099), + 2: uint16(26100), + 3: uint16(26101), + 4: uint16(26104), + 5: uint16(26105), + 6: uint16(26107), + 7: uint16(26108), + 8: uint16(26109), + 9: uint16(26110), + 10: uint16(26111), + 11: uint16(26113), + 12: uint16(26116), + 13: uint16(26117), + 14: uint16(26119), + 15: uint16(26120), + 16: uint16(26121), + 17: uint16(26123), + 18: uint16(26125), + 19: uint16(26128), + 20: uint16(26129), + 21: uint16(26130), + 22: uint16(26134), + 23: uint16(26135), + 24: uint16(26136), + 25: uint16(26138), + 26: uint16(26139), + 27: uint16(26140), + 28: uint16(26142), + 29: uint16(26145), + 30: uint16(26146), + 31: uint16(26147), + 32: uint16(26148), + 33: uint16(26150), + 34: uint16(26153), + 35: uint16(26154), + 36: uint16(26155), + 37: uint16(26156), + 38: uint16(26158), + 39: uint16(26160), + 40: uint16(26162), + 41: uint16(26163), + 42: uint16(26167), + 43: uint16(26168), + 44: uint16(26169), + 45: uint16(26170), + 46: uint16(26171), + 47: uint16(26173), + 48: uint16(26175), + 49: uint16(26176), + 50: uint16(26178), + 51: uint16(26180), + 52: uint16(26181), + 53: uint16(26182), + 54: uint16(26183), + 55: uint16(26184), + 56: uint16(26185), + 57: uint16(26186), + 58: uint16(26189), + 59: uint16(26190), + 60: uint16(26192), + 61: uint16(26193), + 62: uint16(26200), + 63: uint16(26201), + 64: uint16(26203), + 65: uint16(26204), + 66: uint16(26205), + 67: uint16(26206), + 68: uint16(26208), + 69: uint16(26210), + 70: uint16(26211), + 71: uint16(26213), + 72: uint16(26215), + 73: uint16(26217), + 74: uint16(26218), + 75: uint16(26219), + 76: uint16(26220), + 77: uint16(26221), + 78: uint16(26225), + 79: uint16(26226), + 80: uint16(26227), + 81: uint16(26229), + 82: uint16(26232), + 83: uint16(26233), + 84: uint16(26235), + 85: uint16(26236), + 86: uint16(26237), + 87: uint16(26239), + 88: uint16(26240), + 89: uint16(26241), + 90: uint16(26243), + 91: uint16(26245), + 92: uint16(26246), + 93: uint16(26248), + 94: uint16(26249), + 95: uint16(26250), + 96: uint16(26251), + 97: uint16(26253), + 98: uint16(26254), + 99: uint16(26255), + 100: uint16(26256), + 101: uint16(26258), + 102: uint16(26259), + 103: uint16(26260), + 104: uint16(26261), + 105: uint16(26264), + 106: uint16(26265), + 107: uint16(26266), + 108: uint16(26267), + 109: uint16(26268), + 110: uint16(26270), + 111: uint16(26271), + 112: uint16(26272), + 113: uint16(26273), + 114: uint16(26274), + 115: uint16(26275), + 116: uint16(26276), + 117: uint16(26277), + 118: uint16(26278), + 119: uint16(26281), + 120: uint16(26282), + 121: uint16(26283), + 122: uint16(26284), + 123: uint16(26285), + 124: uint16(26287), + 125: uint16(26288), + 126: uint16(26289), + 127: uint16(26290), + 128: uint16(26291), + 129: uint16(26293), + 130: uint16(26294), + 131: uint16(26295), + 132: uint16(26296), + 133: uint16(26298), + 134: uint16(26299), + 135: uint16(26300), + 136: uint16(26301), + 137: uint16(26303), + 138: uint16(26304), + 139: uint16(26305), + 140: uint16(26306), + 141: uint16(26307), + 142: uint16(26308), + 143: uint16(26309), + 144: uint16(26310), + 145: uint16(26311), + 146: uint16(26312), + 147: uint16(26313), + 148: uint16(26314), + 149: uint16(26315), + 150: uint16(26316), + 151: uint16(26317), + 152: uint16(26318), + 153: uint16(26319), + 154: uint16(26320), + 155: uint16(26321), + 156: uint16(26322), + 157: uint16(26323), + 158: uint16(26324), + 159: uint16(26325), + 160: uint16(26326), + 161: uint16(26327), + 162: uint16(26328), + 163: uint16(26330), + 164: uint16(26334), + 165: uint16(26335), + 166: uint16(26336), + 167: uint16(26337), + 168: uint16(26338), + 169: uint16(26339), + 170: uint16(26340), + 171: uint16(26341), + 172: uint16(26343), + 173: uint16(26344), + 174: uint16(26346), + 175: uint16(26347), + 176: uint16(26348), + 177: uint16(26349), + 178: uint16(26350), + 179: uint16(26351), + 180: uint16(26353), + 181: uint16(26357), + 182: uint16(26358), + 183: uint16(26360), + 184: uint16(26362), + 185: uint16(26363), + 186: uint16(26365), + 187: uint16(26369), + 188: uint16(26370), + 189: uint16(26371), + }, + 21: { + 0: uint16(26372), + 1: uint16(26373), + 2: uint16(26374), + 3: uint16(26375), + 4: uint16(26380), + 5: uint16(26382), + 6: uint16(26383), + 7: uint16(26385), + 8: uint16(26386), + 9: uint16(26387), + 10: uint16(26390), + 11: uint16(26392), + 12: uint16(26393), + 13: uint16(26394), + 14: uint16(26396), + 15: uint16(26398), + 16: uint16(26400), + 17: uint16(26401), + 18: uint16(26402), + 19: uint16(26403), + 20: uint16(26404), + 21: uint16(26405), + 22: uint16(26407), + 23: uint16(26409), + 24: uint16(26414), + 25: uint16(26416), + 26: uint16(26418), + 27: uint16(26419), + 28: uint16(26422), + 29: uint16(26423), + 30: uint16(26424), + 31: uint16(26425), + 32: uint16(26427), + 33: uint16(26428), + 34: uint16(26430), + 35: uint16(26431), + 36: uint16(26433), + 37: uint16(26436), + 38: uint16(26437), + 39: uint16(26439), + 40: uint16(26442), + 41: uint16(26443), + 42: uint16(26445), + 43: uint16(26450), + 44: uint16(26452), + 45: uint16(26453), + 46: uint16(26455), + 47: uint16(26456), + 48: uint16(26457), + 49: uint16(26458), + 50: uint16(26459), + 51: uint16(26461), + 52: uint16(26466), + 53: uint16(26467), + 54: uint16(26468), + 55: uint16(26470), + 56: uint16(26471), + 57: uint16(26475), + 58: uint16(26476), + 59: uint16(26478), + 60: uint16(26481), + 61: uint16(26484), + 62: uint16(26486), + 63: uint16(26488), + 64: uint16(26489), + 65: uint16(26490), + 66: uint16(26491), + 67: uint16(26493), + 68: uint16(26496), + 69: uint16(26498), + 70: uint16(26499), + 71: uint16(26501), + 72: uint16(26502), + 73: uint16(26504), + 74: uint16(26506), + 75: uint16(26508), + 76: uint16(26509), + 77: uint16(26510), + 78: uint16(26511), + 79: uint16(26513), + 80: uint16(26514), + 81: uint16(26515), + 82: uint16(26516), + 83: uint16(26518), + 84: uint16(26521), + 85: uint16(26523), + 86: uint16(26527), + 87: uint16(26528), + 88: uint16(26529), + 89: uint16(26532), + 90: uint16(26534), + 91: uint16(26537), + 92: uint16(26540), + 93: uint16(26542), + 94: uint16(26545), + 95: uint16(26546), + 96: uint16(26548), + 97: uint16(26553), + 98: uint16(26554), + 99: uint16(26555), + 100: uint16(26556), + 101: uint16(26557), + 102: uint16(26558), + 103: uint16(26559), + 104: uint16(26560), + 105: uint16(26562), + 106: uint16(26565), + 107: uint16(26566), + 108: uint16(26567), + 109: uint16(26568), + 110: uint16(26569), + 111: uint16(26570), + 112: uint16(26571), + 113: uint16(26572), + 114: uint16(26573), + 115: uint16(26574), + 116: uint16(26581), + 117: uint16(26582), + 118: uint16(26583), + 119: uint16(26587), + 120: uint16(26591), + 121: uint16(26593), + 122: uint16(26595), + 123: uint16(26596), + 124: uint16(26598), + 125: uint16(26599), + 126: uint16(26600), + 127: uint16(26602), + 128: uint16(26603), + 129: uint16(26605), + 130: uint16(26606), + 131: uint16(26610), + 132: uint16(26613), + 133: uint16(26614), + 134: uint16(26615), + 135: uint16(26616), + 136: uint16(26617), + 137: uint16(26618), + 138: uint16(26619), + 139: uint16(26620), + 140: uint16(26622), + 141: uint16(26625), + 142: uint16(26626), + 143: uint16(26627), + 144: uint16(26628), + 145: uint16(26630), + 146: uint16(26637), + 147: uint16(26640), + 148: uint16(26642), + 149: uint16(26644), + 150: uint16(26645), + 151: uint16(26648), + 152: uint16(26649), + 153: uint16(26650), + 154: uint16(26651), + 155: uint16(26652), + 156: uint16(26654), + 157: uint16(26655), + 158: uint16(26656), + 159: uint16(26658), + 160: uint16(26659), + 161: uint16(26660), + 162: uint16(26661), + 163: uint16(26662), + 164: uint16(26663), + 165: uint16(26664), + 166: uint16(26667), + 167: uint16(26668), + 168: uint16(26669), + 169: uint16(26670), + 170: uint16(26671), + 171: uint16(26672), + 172: uint16(26673), + 173: uint16(26676), + 174: uint16(26677), + 175: uint16(26678), + 176: uint16(26682), + 177: uint16(26683), + 178: uint16(26687), + 179: uint16(26695), + 180: uint16(26699), + 181: uint16(26701), + 182: uint16(26703), + 183: uint16(26706), + 184: uint16(26710), + 185: uint16(26711), + 186: uint16(26712), + 187: uint16(26713), + 188: uint16(26714), + 189: uint16(26715), + }, + 22: { + 0: uint16(26716), + 1: uint16(26717), + 2: uint16(26718), + 3: uint16(26719), + 4: uint16(26730), + 5: uint16(26732), + 6: uint16(26733), + 7: uint16(26734), + 8: uint16(26735), + 9: uint16(26736), + 10: uint16(26737), + 11: uint16(26738), + 12: uint16(26739), + 13: uint16(26741), + 14: uint16(26744), + 15: uint16(26745), + 16: uint16(26746), + 17: uint16(26747), + 18: uint16(26748), + 19: uint16(26749), + 20: uint16(26750), + 21: uint16(26751), + 22: uint16(26752), + 23: uint16(26754), + 24: uint16(26756), + 25: uint16(26759), + 26: uint16(26760), + 27: uint16(26761), + 28: uint16(26762), + 29: uint16(26763), + 30: uint16(26764), + 31: uint16(26765), + 32: uint16(26766), + 33: uint16(26768), + 34: uint16(26769), + 35: uint16(26770), + 36: uint16(26772), + 37: uint16(26773), + 38: uint16(26774), + 39: uint16(26776), + 40: uint16(26777), + 41: uint16(26778), + 42: uint16(26779), + 43: uint16(26780), + 44: uint16(26781), + 45: uint16(26782), + 46: uint16(26783), + 47: uint16(26784), + 48: uint16(26785), + 49: uint16(26787), + 50: uint16(26788), + 51: uint16(26789), + 52: uint16(26793), + 53: uint16(26794), + 54: uint16(26795), + 55: uint16(26796), + 56: uint16(26798), + 57: uint16(26801), + 58: uint16(26802), + 59: uint16(26804), + 60: uint16(26806), + 61: uint16(26807), + 62: uint16(26808), + 63: uint16(26809), + 64: uint16(26810), + 65: uint16(26811), + 66: uint16(26812), + 67: uint16(26813), + 68: uint16(26814), + 69: uint16(26815), + 70: uint16(26817), + 71: uint16(26819), + 72: uint16(26820), + 73: uint16(26821), + 74: uint16(26822), + 75: uint16(26823), + 76: uint16(26824), + 77: uint16(26826), + 78: uint16(26828), + 79: uint16(26830), + 80: uint16(26831), + 81: uint16(26832), + 82: uint16(26833), + 83: uint16(26835), + 84: uint16(26836), + 85: uint16(26838), + 86: uint16(26839), + 87: uint16(26841), + 88: uint16(26843), + 89: uint16(26844), + 90: uint16(26845), + 91: uint16(26846), + 92: uint16(26847), + 93: uint16(26849), + 94: uint16(26850), + 95: uint16(26852), + 96: uint16(26853), + 97: uint16(26854), + 98: uint16(26855), + 99: uint16(26856), + 100: uint16(26857), + 101: uint16(26858), + 102: uint16(26859), + 103: uint16(26860), + 104: uint16(26861), + 105: uint16(26863), + 106: uint16(26866), + 107: uint16(26867), + 108: uint16(26868), + 109: uint16(26870), + 110: uint16(26871), + 111: uint16(26872), + 112: uint16(26875), + 113: uint16(26877), + 114: uint16(26878), + 115: uint16(26879), + 116: uint16(26880), + 117: uint16(26882), + 118: uint16(26883), + 119: uint16(26884), + 120: uint16(26886), + 121: uint16(26887), + 122: uint16(26888), + 123: uint16(26889), + 124: uint16(26890), + 125: uint16(26892), + 126: uint16(26895), + 127: uint16(26897), + 128: uint16(26899), + 129: uint16(26900), + 130: uint16(26901), + 131: uint16(26902), + 132: uint16(26903), + 133: uint16(26904), + 134: uint16(26905), + 135: uint16(26906), + 136: uint16(26907), + 137: uint16(26908), + 138: uint16(26909), + 139: uint16(26910), + 140: uint16(26913), + 141: uint16(26914), + 142: uint16(26915), + 143: uint16(26917), + 144: uint16(26918), + 145: uint16(26919), + 146: uint16(26920), + 147: uint16(26921), + 148: uint16(26922), + 149: uint16(26923), + 150: uint16(26924), + 151: uint16(26926), + 152: uint16(26927), + 153: uint16(26929), + 154: uint16(26930), + 155: uint16(26931), + 156: uint16(26933), + 157: uint16(26934), + 158: uint16(26935), + 159: uint16(26936), + 160: uint16(26938), + 161: uint16(26939), + 162: uint16(26940), + 163: uint16(26942), + 164: uint16(26944), + 165: uint16(26945), + 166: uint16(26947), + 167: uint16(26948), + 168: uint16(26949), + 169: uint16(26950), + 170: uint16(26951), + 171: uint16(26952), + 172: uint16(26953), + 173: uint16(26954), + 174: uint16(26955), + 175: uint16(26956), + 176: uint16(26957), + 177: uint16(26958), + 178: uint16(26959), + 179: uint16(26960), + 180: uint16(26961), + 181: uint16(26962), + 182: uint16(26963), + 183: uint16(26965), + 184: uint16(26966), + 185: uint16(26968), + 186: uint16(26969), + 187: uint16(26971), + 188: uint16(26972), + 189: uint16(26975), + }, + 23: { + 0: uint16(26977), + 1: uint16(26978), + 2: uint16(26980), + 3: uint16(26981), + 4: uint16(26983), + 5: uint16(26984), + 6: uint16(26985), + 7: uint16(26986), + 8: uint16(26988), + 9: uint16(26989), + 10: uint16(26991), + 11: uint16(26992), + 12: uint16(26994), + 13: uint16(26995), + 14: uint16(26996), + 15: uint16(26997), + 16: uint16(26998), + 17: uint16(27002), + 18: uint16(27003), + 19: uint16(27005), + 20: uint16(27006), + 21: uint16(27007), + 22: uint16(27009), + 23: uint16(27011), + 24: uint16(27013), + 25: uint16(27018), + 26: uint16(27019), + 27: uint16(27020), + 28: uint16(27022), + 29: uint16(27023), + 30: uint16(27024), + 31: uint16(27025), + 32: uint16(27026), + 33: uint16(27027), + 34: uint16(27030), + 35: uint16(27031), + 36: uint16(27033), + 37: uint16(27034), + 38: uint16(27037), + 39: uint16(27038), + 40: uint16(27039), + 41: uint16(27040), + 42: uint16(27041), + 43: uint16(27042), + 44: uint16(27043), + 45: uint16(27044), + 46: uint16(27045), + 47: uint16(27046), + 48: uint16(27049), + 49: uint16(27050), + 50: uint16(27052), + 51: uint16(27054), + 52: uint16(27055), + 53: uint16(27056), + 54: uint16(27058), + 55: uint16(27059), + 56: uint16(27061), + 57: uint16(27062), + 58: uint16(27064), + 59: uint16(27065), + 60: uint16(27066), + 61: uint16(27068), + 62: uint16(27069), + 63: uint16(27070), + 64: uint16(27071), + 65: uint16(27072), + 66: uint16(27074), + 67: uint16(27075), + 68: uint16(27076), + 69: uint16(27077), + 70: uint16(27078), + 71: uint16(27079), + 72: uint16(27080), + 73: uint16(27081), + 74: uint16(27083), + 75: uint16(27085), + 76: uint16(27087), + 77: uint16(27089), + 78: uint16(27090), + 79: uint16(27091), + 80: uint16(27093), + 81: uint16(27094), + 82: uint16(27095), + 83: uint16(27096), + 84: uint16(27097), + 85: uint16(27098), + 86: uint16(27100), + 87: uint16(27101), + 88: uint16(27102), + 89: uint16(27105), + 90: uint16(27106), + 91: uint16(27107), + 92: uint16(27108), + 93: uint16(27109), + 94: uint16(27110), + 95: uint16(27111), + 96: uint16(27112), + 97: uint16(27113), + 98: uint16(27114), + 99: uint16(27115), + 100: uint16(27116), + 101: uint16(27118), + 102: uint16(27119), + 103: uint16(27120), + 104: uint16(27121), + 105: uint16(27123), + 106: uint16(27124), + 107: uint16(27125), + 108: uint16(27126), + 109: uint16(27127), + 110: uint16(27128), + 111: uint16(27129), + 112: uint16(27130), + 113: uint16(27131), + 114: uint16(27132), + 115: uint16(27134), + 116: uint16(27136), + 117: uint16(27137), + 118: uint16(27138), + 119: uint16(27139), + 120: uint16(27140), + 121: uint16(27141), + 122: uint16(27142), + 123: uint16(27143), + 124: uint16(27144), + 125: uint16(27145), + 126: uint16(27147), + 127: uint16(27148), + 128: uint16(27149), + 129: uint16(27150), + 130: uint16(27151), + 131: uint16(27152), + 132: uint16(27153), + 133: uint16(27154), + 134: uint16(27155), + 135: uint16(27156), + 136: uint16(27157), + 137: uint16(27158), + 138: uint16(27161), + 139: uint16(27162), + 140: uint16(27163), + 141: uint16(27164), + 142: uint16(27165), + 143: uint16(27166), + 144: uint16(27168), + 145: uint16(27170), + 146: uint16(27171), + 147: uint16(27172), + 148: uint16(27173), + 149: uint16(27174), + 150: uint16(27175), + 151: uint16(27177), + 152: uint16(27179), + 153: uint16(27180), + 154: uint16(27181), + 155: uint16(27182), + 156: uint16(27184), + 157: uint16(27186), + 158: uint16(27187), + 159: uint16(27188), + 160: uint16(27190), + 161: uint16(27191), + 162: uint16(27192), + 163: uint16(27193), + 164: uint16(27194), + 165: uint16(27195), + 166: uint16(27196), + 167: uint16(27199), + 168: uint16(27200), + 169: uint16(27201), + 170: uint16(27202), + 171: uint16(27203), + 172: uint16(27205), + 173: uint16(27206), + 174: uint16(27208), + 175: uint16(27209), + 176: uint16(27210), + 177: uint16(27211), + 178: uint16(27212), + 179: uint16(27213), + 180: uint16(27214), + 181: uint16(27215), + 182: uint16(27217), + 183: uint16(27218), + 184: uint16(27219), + 185: uint16(27220), + 186: uint16(27221), + 187: uint16(27222), + 188: uint16(27223), + 189: uint16(27226), + }, + 24: { + 0: uint16(27228), + 1: uint16(27229), + 2: uint16(27230), + 3: uint16(27231), + 4: uint16(27232), + 5: uint16(27234), + 6: uint16(27235), + 7: uint16(27236), + 8: uint16(27238), + 9: uint16(27239), + 10: uint16(27240), + 11: uint16(27241), + 12: uint16(27242), + 13: uint16(27243), + 14: uint16(27244), + 15: uint16(27245), + 16: uint16(27246), + 17: uint16(27247), + 18: uint16(27248), + 19: uint16(27250), + 20: uint16(27251), + 21: uint16(27252), + 22: uint16(27253), + 23: uint16(27254), + 24: uint16(27255), + 25: uint16(27256), + 26: uint16(27258), + 27: uint16(27259), + 28: uint16(27261), + 29: uint16(27262), + 30: uint16(27263), + 31: uint16(27265), + 32: uint16(27266), + 33: uint16(27267), + 34: uint16(27269), + 35: uint16(27270), + 36: uint16(27271), + 37: uint16(27272), + 38: uint16(27273), + 39: uint16(27274), + 40: uint16(27275), + 41: uint16(27276), + 42: uint16(27277), + 43: uint16(27279), + 44: uint16(27282), + 45: uint16(27283), + 46: uint16(27284), + 47: uint16(27285), + 48: uint16(27286), + 49: uint16(27288), + 50: uint16(27289), + 51: uint16(27290), + 52: uint16(27291), + 53: uint16(27292), + 54: uint16(27293), + 55: uint16(27294), + 56: uint16(27295), + 57: uint16(27297), + 58: uint16(27298), + 59: uint16(27299), + 60: uint16(27300), + 61: uint16(27301), + 62: uint16(27302), + 63: uint16(27303), + 64: uint16(27304), + 65: uint16(27306), + 66: uint16(27309), + 67: uint16(27310), + 68: uint16(27311), + 69: uint16(27312), + 70: uint16(27313), + 71: uint16(27314), + 72: uint16(27315), + 73: uint16(27316), + 74: uint16(27317), + 75: uint16(27318), + 76: uint16(27319), + 77: uint16(27320), + 78: uint16(27321), + 79: uint16(27322), + 80: uint16(27323), + 81: uint16(27324), + 82: uint16(27325), + 83: uint16(27326), + 84: uint16(27327), + 85: uint16(27328), + 86: uint16(27329), + 87: uint16(27330), + 88: uint16(27331), + 89: uint16(27332), + 90: uint16(27333), + 91: uint16(27334), + 92: uint16(27335), + 93: uint16(27336), + 94: uint16(27337), + 95: uint16(27338), + 96: uint16(27339), + 97: uint16(27340), + 98: uint16(27341), + 99: uint16(27342), + 100: uint16(27343), + 101: uint16(27344), + 102: uint16(27345), + 103: uint16(27346), + 104: uint16(27347), + 105: uint16(27348), + 106: uint16(27349), + 107: uint16(27350), + 108: uint16(27351), + 109: uint16(27352), + 110: uint16(27353), + 111: uint16(27354), + 112: uint16(27355), + 113: uint16(27356), + 114: uint16(27357), + 115: uint16(27358), + 116: uint16(27359), + 117: uint16(27360), + 118: uint16(27361), + 119: uint16(27362), + 120: uint16(27363), + 121: uint16(27364), + 122: uint16(27365), + 123: uint16(27366), + 124: uint16(27367), + 125: uint16(27368), + 126: uint16(27369), + 127: uint16(27370), + 128: uint16(27371), + 129: uint16(27372), + 130: uint16(27373), + 131: uint16(27374), + 132: uint16(27375), + 133: uint16(27376), + 134: uint16(27377), + 135: uint16(27378), + 136: uint16(27379), + 137: uint16(27380), + 138: uint16(27381), + 139: uint16(27382), + 140: uint16(27383), + 141: uint16(27384), + 142: uint16(27385), + 143: uint16(27386), + 144: uint16(27387), + 145: uint16(27388), + 146: uint16(27389), + 147: uint16(27390), + 148: uint16(27391), + 149: uint16(27392), + 150: uint16(27393), + 151: uint16(27394), + 152: uint16(27395), + 153: uint16(27396), + 154: uint16(27397), + 155: uint16(27398), + 156: uint16(27399), + 157: uint16(27400), + 158: uint16(27401), + 159: uint16(27402), + 160: uint16(27403), + 161: uint16(27404), + 162: uint16(27405), + 163: uint16(27406), + 164: uint16(27407), + 165: uint16(27408), + 166: uint16(27409), + 167: uint16(27410), + 168: uint16(27411), + 169: uint16(27412), + 170: uint16(27413), + 171: uint16(27414), + 172: uint16(27415), + 173: uint16(27416), + 174: uint16(27417), + 175: uint16(27418), + 176: uint16(27419), + 177: uint16(27420), + 178: uint16(27421), + 179: uint16(27422), + 180: uint16(27423), + 181: uint16(27429), + 182: uint16(27430), + 183: uint16(27432), + 184: uint16(27433), + 185: uint16(27434), + 186: uint16(27435), + 187: uint16(27436), + 188: uint16(27437), + 189: uint16(27438), + }, + 25: { + 0: uint16(27439), + 1: uint16(27440), + 2: uint16(27441), + 3: uint16(27443), + 4: uint16(27444), + 5: uint16(27445), + 6: uint16(27446), + 7: uint16(27448), + 8: uint16(27451), + 9: uint16(27452), + 10: uint16(27453), + 11: uint16(27455), + 12: uint16(27456), + 13: uint16(27457), + 14: uint16(27458), + 15: uint16(27460), + 16: uint16(27461), + 17: uint16(27464), + 18: uint16(27466), + 19: uint16(27467), + 20: uint16(27469), + 21: uint16(27470), + 22: uint16(27471), + 23: uint16(27472), + 24: uint16(27473), + 25: uint16(27474), + 26: uint16(27475), + 27: uint16(27476), + 28: uint16(27477), + 29: uint16(27478), + 30: uint16(27479), + 31: uint16(27480), + 32: uint16(27482), + 33: uint16(27483), + 34: uint16(27484), + 35: uint16(27485), + 36: uint16(27486), + 37: uint16(27487), + 38: uint16(27488), + 39: uint16(27489), + 40: uint16(27496), + 41: uint16(27497), + 42: uint16(27499), + 43: uint16(27500), + 44: uint16(27501), + 45: uint16(27502), + 46: uint16(27503), + 47: uint16(27504), + 48: uint16(27505), + 49: uint16(27506), + 50: uint16(27507), + 51: uint16(27508), + 52: uint16(27509), + 53: uint16(27510), + 54: uint16(27511), + 55: uint16(27512), + 56: uint16(27514), + 57: uint16(27517), + 58: uint16(27518), + 59: uint16(27519), + 60: uint16(27520), + 61: uint16(27525), + 62: uint16(27528), + 63: uint16(27532), + 64: uint16(27534), + 65: uint16(27535), + 66: uint16(27536), + 67: uint16(27537), + 68: uint16(27540), + 69: uint16(27541), + 70: uint16(27543), + 71: uint16(27544), + 72: uint16(27545), + 73: uint16(27548), + 74: uint16(27549), + 75: uint16(27550), + 76: uint16(27551), + 77: uint16(27552), + 78: uint16(27554), + 79: uint16(27555), + 80: uint16(27556), + 81: uint16(27557), + 82: uint16(27558), + 83: uint16(27559), + 84: uint16(27560), + 85: uint16(27561), + 86: uint16(27563), + 87: uint16(27564), + 88: uint16(27565), + 89: uint16(27566), + 90: uint16(27567), + 91: uint16(27568), + 92: uint16(27569), + 93: uint16(27570), + 94: uint16(27574), + 95: uint16(27576), + 96: uint16(27577), + 97: uint16(27578), + 98: uint16(27579), + 99: uint16(27580), + 100: uint16(27581), + 101: uint16(27582), + 102: uint16(27584), + 103: uint16(27587), + 104: uint16(27588), + 105: uint16(27590), + 106: uint16(27591), + 107: uint16(27592), + 108: uint16(27593), + 109: uint16(27594), + 110: uint16(27596), + 111: uint16(27598), + 112: uint16(27600), + 113: uint16(27601), + 114: uint16(27608), + 115: uint16(27610), + 116: uint16(27612), + 117: uint16(27613), + 118: uint16(27614), + 119: uint16(27615), + 120: uint16(27616), + 121: uint16(27618), + 122: uint16(27619), + 123: uint16(27620), + 124: uint16(27621), + 125: uint16(27622), + 126: uint16(27623), + 127: uint16(27624), + 128: uint16(27625), + 129: uint16(27628), + 130: uint16(27629), + 131: uint16(27630), + 132: uint16(27632), + 133: uint16(27633), + 134: uint16(27634), + 135: uint16(27636), + 136: uint16(27638), + 137: uint16(27639), + 138: uint16(27640), + 139: uint16(27642), + 140: uint16(27643), + 141: uint16(27644), + 142: uint16(27646), + 143: uint16(27647), + 144: uint16(27648), + 145: uint16(27649), + 146: uint16(27650), + 147: uint16(27651), + 148: uint16(27652), + 149: uint16(27656), + 150: uint16(27657), + 151: uint16(27658), + 152: uint16(27659), + 153: uint16(27660), + 154: uint16(27662), + 155: uint16(27666), + 156: uint16(27671), + 157: uint16(27676), + 158: uint16(27677), + 159: uint16(27678), + 160: uint16(27680), + 161: uint16(27683), + 162: uint16(27685), + 163: uint16(27691), + 164: uint16(27692), + 165: uint16(27693), + 166: uint16(27697), + 167: uint16(27699), + 168: uint16(27702), + 169: uint16(27703), + 170: uint16(27705), + 171: uint16(27706), + 172: uint16(27707), + 173: uint16(27708), + 174: uint16(27710), + 175: uint16(27711), + 176: uint16(27715), + 177: uint16(27716), + 178: uint16(27717), + 179: uint16(27720), + 180: uint16(27723), + 181: uint16(27724), + 182: uint16(27725), + 183: uint16(27726), + 184: uint16(27727), + 185: uint16(27729), + 186: uint16(27730), + 187: uint16(27731), + 188: uint16(27734), + 189: uint16(27736), + }, + 26: { + 0: uint16(27737), + 1: uint16(27738), + 2: uint16(27746), + 3: uint16(27747), + 4: uint16(27749), + 5: uint16(27750), + 6: uint16(27751), + 7: uint16(27755), + 8: uint16(27756), + 9: uint16(27757), + 10: uint16(27758), + 11: uint16(27759), + 12: uint16(27761), + 13: uint16(27763), + 14: uint16(27765), + 15: uint16(27767), + 16: uint16(27768), + 17: uint16(27770), + 18: uint16(27771), + 19: uint16(27772), + 20: uint16(27775), + 21: uint16(27776), + 22: uint16(27780), + 23: uint16(27783), + 24: uint16(27786), + 25: uint16(27787), + 26: uint16(27789), + 27: uint16(27790), + 28: uint16(27793), + 29: uint16(27794), + 30: uint16(27797), + 31: uint16(27798), + 32: uint16(27799), + 33: uint16(27800), + 34: uint16(27802), + 35: uint16(27804), + 36: uint16(27805), + 37: uint16(27806), + 38: uint16(27808), + 39: uint16(27810), + 40: uint16(27816), + 41: uint16(27820), + 42: uint16(27823), + 43: uint16(27824), + 44: uint16(27828), + 45: uint16(27829), + 46: uint16(27830), + 47: uint16(27831), + 48: uint16(27834), + 49: uint16(27840), + 50: uint16(27841), + 51: uint16(27842), + 52: uint16(27843), + 53: uint16(27846), + 54: uint16(27847), + 55: uint16(27848), + 56: uint16(27851), + 57: uint16(27853), + 58: uint16(27854), + 59: uint16(27855), + 60: uint16(27857), + 61: uint16(27858), + 62: uint16(27864), + 63: uint16(27865), + 64: uint16(27866), + 65: uint16(27868), + 66: uint16(27869), + 67: uint16(27871), + 68: uint16(27876), + 69: uint16(27878), + 70: uint16(27879), + 71: uint16(27881), + 72: uint16(27884), + 73: uint16(27885), + 74: uint16(27890), + 75: uint16(27892), + 76: uint16(27897), + 77: uint16(27903), + 78: uint16(27904), + 79: uint16(27906), + 80: uint16(27907), + 81: uint16(27909), + 82: uint16(27910), + 83: uint16(27912), + 84: uint16(27913), + 85: uint16(27914), + 86: uint16(27917), + 87: uint16(27919), + 88: uint16(27920), + 89: uint16(27921), + 90: uint16(27923), + 91: uint16(27924), + 92: uint16(27925), + 93: uint16(27926), + 94: uint16(27928), + 95: uint16(27932), + 96: uint16(27933), + 97: uint16(27935), + 98: uint16(27936), + 99: uint16(27937), + 100: uint16(27938), + 101: uint16(27939), + 102: uint16(27940), + 103: uint16(27942), + 104: uint16(27944), + 105: uint16(27945), + 106: uint16(27948), + 107: uint16(27949), + 108: uint16(27951), + 109: uint16(27952), + 110: uint16(27956), + 111: uint16(27958), + 112: uint16(27959), + 113: uint16(27960), + 114: uint16(27962), + 115: uint16(27967), + 116: uint16(27968), + 117: uint16(27970), + 118: uint16(27972), + 119: uint16(27977), + 120: uint16(27980), + 121: uint16(27984), + 122: uint16(27989), + 123: uint16(27990), + 124: uint16(27991), + 125: uint16(27992), + 126: uint16(27995), + 127: uint16(27997), + 128: uint16(27999), + 129: uint16(28001), + 130: uint16(28002), + 131: uint16(28004), + 132: uint16(28005), + 133: uint16(28007), + 134: uint16(28008), + 135: uint16(28011), + 136: uint16(28012), + 137: uint16(28013), + 138: uint16(28016), + 139: uint16(28017), + 140: uint16(28018), + 141: uint16(28019), + 142: uint16(28021), + 143: uint16(28022), + 144: uint16(28025), + 145: uint16(28026), + 146: uint16(28027), + 147: uint16(28029), + 148: uint16(28030), + 149: uint16(28031), + 150: uint16(28032), + 151: uint16(28033), + 152: uint16(28035), + 153: uint16(28036), + 154: uint16(28038), + 155: uint16(28039), + 156: uint16(28042), + 157: uint16(28043), + 158: uint16(28045), + 159: uint16(28047), + 160: uint16(28048), + 161: uint16(28050), + 162: uint16(28054), + 163: uint16(28055), + 164: uint16(28056), + 165: uint16(28057), + 166: uint16(28058), + 167: uint16(28060), + 168: uint16(28066), + 169: uint16(28069), + 170: uint16(28076), + 171: uint16(28077), + 172: uint16(28080), + 173: uint16(28081), + 174: uint16(28083), + 175: uint16(28084), + 176: uint16(28086), + 177: uint16(28087), + 178: uint16(28089), + 179: uint16(28090), + 180: uint16(28091), + 181: uint16(28092), + 182: uint16(28093), + 183: uint16(28094), + 184: uint16(28097), + 185: uint16(28098), + 186: uint16(28099), + 187: uint16(28104), + 188: uint16(28105), + 189: uint16(28106), + }, + 27: { + 0: uint16(28109), + 1: uint16(28110), + 2: uint16(28111), + 3: uint16(28112), + 4: uint16(28114), + 5: uint16(28115), + 6: uint16(28116), + 7: uint16(28117), + 8: uint16(28119), + 9: uint16(28122), + 10: uint16(28123), + 11: uint16(28124), + 12: uint16(28127), + 13: uint16(28130), + 14: uint16(28131), + 15: uint16(28133), + 16: uint16(28135), + 17: uint16(28136), + 18: uint16(28137), + 19: uint16(28138), + 20: uint16(28141), + 21: uint16(28143), + 22: uint16(28144), + 23: uint16(28146), + 24: uint16(28148), + 25: uint16(28149), + 26: uint16(28150), + 27: uint16(28152), + 28: uint16(28154), + 29: uint16(28157), + 30: uint16(28158), + 31: uint16(28159), + 32: uint16(28160), + 33: uint16(28161), + 34: uint16(28162), + 35: uint16(28163), + 36: uint16(28164), + 37: uint16(28166), + 38: uint16(28167), + 39: uint16(28168), + 40: uint16(28169), + 41: uint16(28171), + 42: uint16(28175), + 43: uint16(28178), + 44: uint16(28179), + 45: uint16(28181), + 46: uint16(28184), + 47: uint16(28185), + 48: uint16(28187), + 49: uint16(28188), + 50: uint16(28190), + 51: uint16(28191), + 52: uint16(28194), + 53: uint16(28198), + 54: uint16(28199), + 55: uint16(28200), + 56: uint16(28202), + 57: uint16(28204), + 58: uint16(28206), + 59: uint16(28208), + 60: uint16(28209), + 61: uint16(28211), + 62: uint16(28213), + 63: uint16(28214), + 64: uint16(28215), + 65: uint16(28217), + 66: uint16(28219), + 67: uint16(28220), + 68: uint16(28221), + 69: uint16(28222), + 70: uint16(28223), + 71: uint16(28224), + 72: uint16(28225), + 73: uint16(28226), + 74: uint16(28229), + 75: uint16(28230), + 76: uint16(28231), + 77: uint16(28232), + 78: uint16(28233), + 79: uint16(28234), + 80: uint16(28235), + 81: uint16(28236), + 82: uint16(28239), + 83: uint16(28240), + 84: uint16(28241), + 85: uint16(28242), + 86: uint16(28245), + 87: uint16(28247), + 88: uint16(28249), + 89: uint16(28250), + 90: uint16(28252), + 91: uint16(28253), + 92: uint16(28254), + 93: uint16(28256), + 94: uint16(28257), + 95: uint16(28258), + 96: uint16(28259), + 97: uint16(28260), + 98: uint16(28261), + 99: uint16(28262), + 100: uint16(28263), + 101: uint16(28264), + 102: uint16(28265), + 103: uint16(28266), + 104: uint16(28268), + 105: uint16(28269), + 106: uint16(28271), + 107: uint16(28272), + 108: uint16(28273), + 109: uint16(28274), + 110: uint16(28275), + 111: uint16(28276), + 112: uint16(28277), + 113: uint16(28278), + 114: uint16(28279), + 115: uint16(28280), + 116: uint16(28281), + 117: uint16(28282), + 118: uint16(28283), + 119: uint16(28284), + 120: uint16(28285), + 121: uint16(28288), + 122: uint16(28289), + 123: uint16(28290), + 124: uint16(28292), + 125: uint16(28295), + 126: uint16(28296), + 127: uint16(28298), + 128: uint16(28299), + 129: uint16(28300), + 130: uint16(28301), + 131: uint16(28302), + 132: uint16(28305), + 133: uint16(28306), + 134: uint16(28307), + 135: uint16(28308), + 136: uint16(28309), + 137: uint16(28310), + 138: uint16(28311), + 139: uint16(28313), + 140: uint16(28314), + 141: uint16(28315), + 142: uint16(28317), + 143: uint16(28318), + 144: uint16(28320), + 145: uint16(28321), + 146: uint16(28323), + 147: uint16(28324), + 148: uint16(28326), + 149: uint16(28328), + 150: uint16(28329), + 151: uint16(28331), + 152: uint16(28332), + 153: uint16(28333), + 154: uint16(28334), + 155: uint16(28336), + 156: uint16(28339), + 157: uint16(28341), + 158: uint16(28344), + 159: uint16(28345), + 160: uint16(28348), + 161: uint16(28350), + 162: uint16(28351), + 163: uint16(28352), + 164: uint16(28355), + 165: uint16(28356), + 166: uint16(28357), + 167: uint16(28358), + 168: uint16(28360), + 169: uint16(28361), + 170: uint16(28362), + 171: uint16(28364), + 172: uint16(28365), + 173: uint16(28366), + 174: uint16(28368), + 175: uint16(28370), + 176: uint16(28374), + 177: uint16(28376), + 178: uint16(28377), + 179: uint16(28379), + 180: uint16(28380), + 181: uint16(28381), + 182: uint16(28387), + 183: uint16(28391), + 184: uint16(28394), + 185: uint16(28395), + 186: uint16(28396), + 187: uint16(28397), + 188: uint16(28398), + 189: uint16(28399), + }, + 28: { + 0: uint16(28400), + 1: uint16(28401), + 2: uint16(28402), + 3: uint16(28403), + 4: uint16(28405), + 5: uint16(28406), + 6: uint16(28407), + 7: uint16(28408), + 8: uint16(28410), + 9: uint16(28411), + 10: uint16(28412), + 11: uint16(28413), + 12: uint16(28414), + 13: uint16(28415), + 14: uint16(28416), + 15: uint16(28417), + 16: uint16(28419), + 17: uint16(28420), + 18: uint16(28421), + 19: uint16(28423), + 20: uint16(28424), + 21: uint16(28426), + 22: uint16(28427), + 23: uint16(28428), + 24: uint16(28429), + 25: uint16(28430), + 26: uint16(28432), + 27: uint16(28433), + 28: uint16(28434), + 29: uint16(28438), + 30: uint16(28439), + 31: uint16(28440), + 32: uint16(28441), + 33: uint16(28442), + 34: uint16(28443), + 35: uint16(28444), + 36: uint16(28445), + 37: uint16(28446), + 38: uint16(28447), + 39: uint16(28449), + 40: uint16(28450), + 41: uint16(28451), + 42: uint16(28453), + 43: uint16(28454), + 44: uint16(28455), + 45: uint16(28456), + 46: uint16(28460), + 47: uint16(28462), + 48: uint16(28464), + 49: uint16(28466), + 50: uint16(28468), + 51: uint16(28469), + 52: uint16(28471), + 53: uint16(28472), + 54: uint16(28473), + 55: uint16(28474), + 56: uint16(28475), + 57: uint16(28476), + 58: uint16(28477), + 59: uint16(28479), + 60: uint16(28480), + 61: uint16(28481), + 62: uint16(28482), + 63: uint16(28483), + 64: uint16(28484), + 65: uint16(28485), + 66: uint16(28488), + 67: uint16(28489), + 68: uint16(28490), + 69: uint16(28492), + 70: uint16(28494), + 71: uint16(28495), + 72: uint16(28496), + 73: uint16(28497), + 74: uint16(28498), + 75: uint16(28499), + 76: uint16(28500), + 77: uint16(28501), + 78: uint16(28502), + 79: uint16(28503), + 80: uint16(28505), + 81: uint16(28506), + 82: uint16(28507), + 83: uint16(28509), + 84: uint16(28511), + 85: uint16(28512), + 86: uint16(28513), + 87: uint16(28515), + 88: uint16(28516), + 89: uint16(28517), + 90: uint16(28519), + 91: uint16(28520), + 92: uint16(28521), + 93: uint16(28522), + 94: uint16(28523), + 95: uint16(28524), + 96: uint16(28527), + 97: uint16(28528), + 98: uint16(28529), + 99: uint16(28531), + 100: uint16(28533), + 101: uint16(28534), + 102: uint16(28535), + 103: uint16(28537), + 104: uint16(28539), + 105: uint16(28541), + 106: uint16(28542), + 107: uint16(28543), + 108: uint16(28544), + 109: uint16(28545), + 110: uint16(28546), + 111: uint16(28547), + 112: uint16(28549), + 113: uint16(28550), + 114: uint16(28551), + 115: uint16(28554), + 116: uint16(28555), + 117: uint16(28559), + 118: uint16(28560), + 119: uint16(28561), + 120: uint16(28562), + 121: uint16(28563), + 122: uint16(28564), + 123: uint16(28565), + 124: uint16(28566), + 125: uint16(28567), + 126: uint16(28568), + 127: uint16(28569), + 128: uint16(28570), + 129: uint16(28571), + 130: uint16(28573), + 131: uint16(28574), + 132: uint16(28575), + 133: uint16(28576), + 134: uint16(28578), + 135: uint16(28579), + 136: uint16(28580), + 137: uint16(28581), + 138: uint16(28582), + 139: uint16(28584), + 140: uint16(28585), + 141: uint16(28586), + 142: uint16(28587), + 143: uint16(28588), + 144: uint16(28589), + 145: uint16(28590), + 146: uint16(28591), + 147: uint16(28592), + 148: uint16(28593), + 149: uint16(28594), + 150: uint16(28596), + 151: uint16(28597), + 152: uint16(28599), + 153: uint16(28600), + 154: uint16(28602), + 155: uint16(28603), + 156: uint16(28604), + 157: uint16(28605), + 158: uint16(28606), + 159: uint16(28607), + 160: uint16(28609), + 161: uint16(28611), + 162: uint16(28612), + 163: uint16(28613), + 164: uint16(28614), + 165: uint16(28615), + 166: uint16(28616), + 167: uint16(28618), + 168: uint16(28619), + 169: uint16(28620), + 170: uint16(28621), + 171: uint16(28622), + 172: uint16(28623), + 173: uint16(28624), + 174: uint16(28627), + 175: uint16(28628), + 176: uint16(28629), + 177: uint16(28630), + 178: uint16(28631), + 179: uint16(28632), + 180: uint16(28633), + 181: uint16(28634), + 182: uint16(28635), + 183: uint16(28636), + 184: uint16(28637), + 185: uint16(28639), + 186: uint16(28642), + 187: uint16(28643), + 188: uint16(28644), + 189: uint16(28645), + }, + 29: { + 0: uint16(28646), + 1: uint16(28647), + 2: uint16(28648), + 3: uint16(28649), + 4: uint16(28650), + 5: uint16(28651), + 6: uint16(28652), + 7: uint16(28653), + 8: uint16(28656), + 9: uint16(28657), + 10: uint16(28658), + 11: uint16(28659), + 12: uint16(28660), + 13: uint16(28661), + 14: uint16(28662), + 15: uint16(28663), + 16: uint16(28664), + 17: uint16(28665), + 18: uint16(28666), + 19: uint16(28667), + 20: uint16(28668), + 21: uint16(28669), + 22: uint16(28670), + 23: uint16(28671), + 24: uint16(28672), + 25: uint16(28673), + 26: uint16(28674), + 27: uint16(28675), + 28: uint16(28676), + 29: uint16(28677), + 30: uint16(28678), + 31: uint16(28679), + 32: uint16(28680), + 33: uint16(28681), + 34: uint16(28682), + 35: uint16(28683), + 36: uint16(28684), + 37: uint16(28685), + 38: uint16(28686), + 39: uint16(28687), + 40: uint16(28688), + 41: uint16(28690), + 42: uint16(28691), + 43: uint16(28692), + 44: uint16(28693), + 45: uint16(28694), + 46: uint16(28695), + 47: uint16(28696), + 48: uint16(28697), + 49: uint16(28700), + 50: uint16(28701), + 51: uint16(28702), + 52: uint16(28703), + 53: uint16(28704), + 54: uint16(28705), + 55: uint16(28706), + 56: uint16(28708), + 57: uint16(28709), + 58: uint16(28710), + 59: uint16(28711), + 60: uint16(28712), + 61: uint16(28713), + 62: uint16(28714), + 63: uint16(28715), + 64: uint16(28716), + 65: uint16(28717), + 66: uint16(28718), + 67: uint16(28719), + 68: uint16(28720), + 69: uint16(28721), + 70: uint16(28722), + 71: uint16(28723), + 72: uint16(28724), + 73: uint16(28726), + 74: uint16(28727), + 75: uint16(28728), + 76: uint16(28730), + 77: uint16(28731), + 78: uint16(28732), + 79: uint16(28733), + 80: uint16(28734), + 81: uint16(28735), + 82: uint16(28736), + 83: uint16(28737), + 84: uint16(28738), + 85: uint16(28739), + 86: uint16(28740), + 87: uint16(28741), + 88: uint16(28742), + 89: uint16(28743), + 90: uint16(28744), + 91: uint16(28745), + 92: uint16(28746), + 93: uint16(28747), + 94: uint16(28749), + 95: uint16(28750), + 96: uint16(28752), + 97: uint16(28753), + 98: uint16(28754), + 99: uint16(28755), + 100: uint16(28756), + 101: uint16(28757), + 102: uint16(28758), + 103: uint16(28759), + 104: uint16(28760), + 105: uint16(28761), + 106: uint16(28762), + 107: uint16(28763), + 108: uint16(28764), + 109: uint16(28765), + 110: uint16(28767), + 111: uint16(28768), + 112: uint16(28769), + 113: uint16(28770), + 114: uint16(28771), + 115: uint16(28772), + 116: uint16(28773), + 117: uint16(28774), + 118: uint16(28775), + 119: uint16(28776), + 120: uint16(28777), + 121: uint16(28778), + 122: uint16(28782), + 123: uint16(28785), + 124: uint16(28786), + 125: uint16(28787), + 126: uint16(28788), + 127: uint16(28791), + 128: uint16(28793), + 129: uint16(28794), + 130: uint16(28795), + 131: uint16(28797), + 132: uint16(28801), + 133: uint16(28802), + 134: uint16(28803), + 135: uint16(28804), + 136: uint16(28806), + 137: uint16(28807), + 138: uint16(28808), + 139: uint16(28811), + 140: uint16(28812), + 141: uint16(28813), + 142: uint16(28815), + 143: uint16(28816), + 144: uint16(28817), + 145: uint16(28819), + 146: uint16(28823), + 147: uint16(28824), + 148: uint16(28826), + 149: uint16(28827), + 150: uint16(28830), + 151: uint16(28831), + 152: uint16(28832), + 153: uint16(28833), + 154: uint16(28834), + 155: uint16(28835), + 156: uint16(28836), + 157: uint16(28837), + 158: uint16(28838), + 159: uint16(28839), + 160: uint16(28840), + 161: uint16(28841), + 162: uint16(28842), + 163: uint16(28848), + 164: uint16(28850), + 165: uint16(28852), + 166: uint16(28853), + 167: uint16(28854), + 168: uint16(28858), + 169: uint16(28862), + 170: uint16(28863), + 171: uint16(28868), + 172: uint16(28869), + 173: uint16(28870), + 174: uint16(28871), + 175: uint16(28873), + 176: uint16(28875), + 177: uint16(28876), + 178: uint16(28877), + 179: uint16(28878), + 180: uint16(28879), + 181: uint16(28880), + 182: uint16(28881), + 183: uint16(28882), + 184: uint16(28883), + 185: uint16(28884), + 186: uint16(28885), + 187: uint16(28886), + 188: uint16(28887), + 189: uint16(28890), + }, + 30: { + 0: uint16(28892), + 1: uint16(28893), + 2: uint16(28894), + 3: uint16(28896), + 4: uint16(28897), + 5: uint16(28898), + 6: uint16(28899), + 7: uint16(28901), + 8: uint16(28906), + 9: uint16(28910), + 10: uint16(28912), + 11: uint16(28913), + 12: uint16(28914), + 13: uint16(28915), + 14: uint16(28916), + 15: uint16(28917), + 16: uint16(28918), + 17: uint16(28920), + 18: uint16(28922), + 19: uint16(28923), + 20: uint16(28924), + 21: uint16(28926), + 22: uint16(28927), + 23: uint16(28928), + 24: uint16(28929), + 25: uint16(28930), + 26: uint16(28931), + 27: uint16(28932), + 28: uint16(28933), + 29: uint16(28934), + 30: uint16(28935), + 31: uint16(28936), + 32: uint16(28939), + 33: uint16(28940), + 34: uint16(28941), + 35: uint16(28942), + 36: uint16(28943), + 37: uint16(28945), + 38: uint16(28946), + 39: uint16(28948), + 40: uint16(28951), + 41: uint16(28955), + 42: uint16(28956), + 43: uint16(28957), + 44: uint16(28958), + 45: uint16(28959), + 46: uint16(28960), + 47: uint16(28961), + 48: uint16(28962), + 49: uint16(28963), + 50: uint16(28964), + 51: uint16(28965), + 52: uint16(28967), + 53: uint16(28968), + 54: uint16(28969), + 55: uint16(28970), + 56: uint16(28971), + 57: uint16(28972), + 58: uint16(28973), + 59: uint16(28974), + 60: uint16(28978), + 61: uint16(28979), + 62: uint16(28980), + 63: uint16(28981), + 64: uint16(28983), + 65: uint16(28984), + 66: uint16(28985), + 67: uint16(28986), + 68: uint16(28987), + 69: uint16(28988), + 70: uint16(28989), + 71: uint16(28990), + 72: uint16(28991), + 73: uint16(28992), + 74: uint16(28993), + 75: uint16(28994), + 76: uint16(28995), + 77: uint16(28996), + 78: uint16(28998), + 79: uint16(28999), + 80: uint16(29000), + 81: uint16(29001), + 82: uint16(29003), + 83: uint16(29005), + 84: uint16(29007), + 85: uint16(29008), + 86: uint16(29009), + 87: uint16(29010), + 88: uint16(29011), + 89: uint16(29012), + 90: uint16(29013), + 91: uint16(29014), + 92: uint16(29015), + 93: uint16(29016), + 94: uint16(29017), + 95: uint16(29018), + 96: uint16(29019), + 97: uint16(29021), + 98: uint16(29023), + 99: uint16(29024), + 100: uint16(29025), + 101: uint16(29026), + 102: uint16(29027), + 103: uint16(29029), + 104: uint16(29033), + 105: uint16(29034), + 106: uint16(29035), + 107: uint16(29036), + 108: uint16(29037), + 109: uint16(29039), + 110: uint16(29040), + 111: uint16(29041), + 112: uint16(29044), + 113: uint16(29045), + 114: uint16(29046), + 115: uint16(29047), + 116: uint16(29049), + 117: uint16(29051), + 118: uint16(29052), + 119: uint16(29054), + 120: uint16(29055), + 121: uint16(29056), + 122: uint16(29057), + 123: uint16(29058), + 124: uint16(29059), + 125: uint16(29061), + 126: uint16(29062), + 127: uint16(29063), + 128: uint16(29064), + 129: uint16(29065), + 130: uint16(29067), + 131: uint16(29068), + 132: uint16(29069), + 133: uint16(29070), + 134: uint16(29072), + 135: uint16(29073), + 136: uint16(29074), + 137: uint16(29075), + 138: uint16(29077), + 139: uint16(29078), + 140: uint16(29079), + 141: uint16(29082), + 142: uint16(29083), + 143: uint16(29084), + 144: uint16(29085), + 145: uint16(29086), + 146: uint16(29089), + 147: uint16(29090), + 148: uint16(29091), + 149: uint16(29092), + 150: uint16(29093), + 151: uint16(29094), + 152: uint16(29095), + 153: uint16(29097), + 154: uint16(29098), + 155: uint16(29099), + 156: uint16(29101), + 157: uint16(29102), + 158: uint16(29103), + 159: uint16(29104), + 160: uint16(29105), + 161: uint16(29106), + 162: uint16(29108), + 163: uint16(29110), + 164: uint16(29111), + 165: uint16(29112), + 166: uint16(29114), + 167: uint16(29115), + 168: uint16(29116), + 169: uint16(29117), + 170: uint16(29118), + 171: uint16(29119), + 172: uint16(29120), + 173: uint16(29121), + 174: uint16(29122), + 175: uint16(29124), + 176: uint16(29125), + 177: uint16(29126), + 178: uint16(29127), + 179: uint16(29128), + 180: uint16(29129), + 181: uint16(29130), + 182: uint16(29131), + 183: uint16(29132), + 184: uint16(29133), + 185: uint16(29135), + 186: uint16(29136), + 187: uint16(29137), + 188: uint16(29138), + 189: uint16(29139), + }, + 31: { + 0: uint16(29142), + 1: uint16(29143), + 2: uint16(29144), + 3: uint16(29145), + 4: uint16(29146), + 5: uint16(29147), + 6: uint16(29148), + 7: uint16(29149), + 8: uint16(29150), + 9: uint16(29151), + 10: uint16(29153), + 11: uint16(29154), + 12: uint16(29155), + 13: uint16(29156), + 14: uint16(29158), + 15: uint16(29160), + 16: uint16(29161), + 17: uint16(29162), + 18: uint16(29163), + 19: uint16(29164), + 20: uint16(29165), + 21: uint16(29167), + 22: uint16(29168), + 23: uint16(29169), + 24: uint16(29170), + 25: uint16(29171), + 26: uint16(29172), + 27: uint16(29173), + 28: uint16(29174), + 29: uint16(29175), + 30: uint16(29176), + 31: uint16(29178), + 32: uint16(29179), + 33: uint16(29180), + 34: uint16(29181), + 35: uint16(29182), + 36: uint16(29183), + 37: uint16(29184), + 38: uint16(29185), + 39: uint16(29186), + 40: uint16(29187), + 41: uint16(29188), + 42: uint16(29189), + 43: uint16(29191), + 44: uint16(29192), + 45: uint16(29193), + 46: uint16(29194), + 47: uint16(29195), + 48: uint16(29196), + 49: uint16(29197), + 50: uint16(29198), + 51: uint16(29199), + 52: uint16(29200), + 53: uint16(29201), + 54: uint16(29202), + 55: uint16(29203), + 56: uint16(29204), + 57: uint16(29205), + 58: uint16(29206), + 59: uint16(29207), + 60: uint16(29208), + 61: uint16(29209), + 62: uint16(29210), + 63: uint16(29211), + 64: uint16(29212), + 65: uint16(29214), + 66: uint16(29215), + 67: uint16(29216), + 68: uint16(29217), + 69: uint16(29218), + 70: uint16(29219), + 71: uint16(29220), + 72: uint16(29221), + 73: uint16(29222), + 74: uint16(29223), + 75: uint16(29225), + 76: uint16(29227), + 77: uint16(29229), + 78: uint16(29230), + 79: uint16(29231), + 80: uint16(29234), + 81: uint16(29235), + 82: uint16(29236), + 83: uint16(29242), + 84: uint16(29244), + 85: uint16(29246), + 86: uint16(29248), + 87: uint16(29249), + 88: uint16(29250), + 89: uint16(29251), + 90: uint16(29252), + 91: uint16(29253), + 92: uint16(29254), + 93: uint16(29257), + 94: uint16(29258), + 95: uint16(29259), + 96: uint16(29262), + 97: uint16(29263), + 98: uint16(29264), + 99: uint16(29265), + 100: uint16(29267), + 101: uint16(29268), + 102: uint16(29269), + 103: uint16(29271), + 104: uint16(29272), + 105: uint16(29274), + 106: uint16(29276), + 107: uint16(29278), + 108: uint16(29280), + 109: uint16(29283), + 110: uint16(29284), + 111: uint16(29285), + 112: uint16(29288), + 113: uint16(29290), + 114: uint16(29291), + 115: uint16(29292), + 116: uint16(29293), + 117: uint16(29296), + 118: uint16(29297), + 119: uint16(29299), + 120: uint16(29300), + 121: uint16(29302), + 122: uint16(29303), + 123: uint16(29304), + 124: uint16(29307), + 125: uint16(29308), + 126: uint16(29309), + 127: uint16(29314), + 128: uint16(29315), + 129: uint16(29317), + 130: uint16(29318), + 131: uint16(29319), + 132: uint16(29320), + 133: uint16(29321), + 134: uint16(29324), + 135: uint16(29326), + 136: uint16(29328), + 137: uint16(29329), + 138: uint16(29331), + 139: uint16(29332), + 140: uint16(29333), + 141: uint16(29334), + 142: uint16(29335), + 143: uint16(29336), + 144: uint16(29337), + 145: uint16(29338), + 146: uint16(29339), + 147: uint16(29340), + 148: uint16(29341), + 149: uint16(29342), + 150: uint16(29344), + 151: uint16(29345), + 152: uint16(29346), + 153: uint16(29347), + 154: uint16(29348), + 155: uint16(29349), + 156: uint16(29350), + 157: uint16(29351), + 158: uint16(29352), + 159: uint16(29353), + 160: uint16(29354), + 161: uint16(29355), + 162: uint16(29358), + 163: uint16(29361), + 164: uint16(29362), + 165: uint16(29363), + 166: uint16(29365), + 167: uint16(29370), + 168: uint16(29371), + 169: uint16(29372), + 170: uint16(29373), + 171: uint16(29374), + 172: uint16(29375), + 173: uint16(29376), + 174: uint16(29381), + 175: uint16(29382), + 176: uint16(29383), + 177: uint16(29385), + 178: uint16(29386), + 179: uint16(29387), + 180: uint16(29388), + 181: uint16(29391), + 182: uint16(29393), + 183: uint16(29395), + 184: uint16(29396), + 185: uint16(29397), + 186: uint16(29398), + 187: uint16(29400), + 188: uint16(29402), + 189: uint16(29403), + }, + 32: { + 0: uint16(58566), + 1: uint16(58567), + 2: uint16(58568), + 3: uint16(58569), + 4: uint16(58570), + 5: uint16(58571), + 6: uint16(58572), + 7: uint16(58573), + 8: uint16(58574), + 9: uint16(58575), + 10: uint16(58576), + 11: uint16(58577), + 12: uint16(58578), + 13: uint16(58579), + 14: uint16(58580), + 15: uint16(58581), + 16: uint16(58582), + 17: uint16(58583), + 18: uint16(58584), + 19: uint16(58585), + 20: uint16(58586), + 21: uint16(58587), + 22: uint16(58588), + 23: uint16(58589), + 24: uint16(58590), + 25: uint16(58591), + 26: uint16(58592), + 27: uint16(58593), + 28: uint16(58594), + 29: uint16(58595), + 30: uint16(58596), + 31: uint16(58597), + 32: uint16(58598), + 33: uint16(58599), + 34: uint16(58600), + 35: uint16(58601), + 36: uint16(58602), + 37: uint16(58603), + 38: uint16(58604), + 39: uint16(58605), + 40: uint16(58606), + 41: uint16(58607), + 42: uint16(58608), + 43: uint16(58609), + 44: uint16(58610), + 45: uint16(58611), + 46: uint16(58612), + 47: uint16(58613), + 48: uint16(58614), + 49: uint16(58615), + 50: uint16(58616), + 51: uint16(58617), + 52: uint16(58618), + 53: uint16(58619), + 54: uint16(58620), + 55: uint16(58621), + 56: uint16(58622), + 57: uint16(58623), + 58: uint16(58624), + 59: uint16(58625), + 60: uint16(58626), + 61: uint16(58627), + 62: uint16(58628), + 63: uint16(58629), + 64: uint16(58630), + 65: uint16(58631), + 66: uint16(58632), + 67: uint16(58633), + 68: uint16(58634), + 69: uint16(58635), + 70: uint16(58636), + 71: uint16(58637), + 72: uint16(58638), + 73: uint16(58639), + 74: uint16(58640), + 75: uint16(58641), + 76: uint16(58642), + 77: uint16(58643), + 78: uint16(58644), + 79: uint16(58645), + 80: uint16(58646), + 81: uint16(58647), + 82: uint16(58648), + 83: uint16(58649), + 84: uint16(58650), + 85: uint16(58651), + 86: uint16(58652), + 87: uint16(58653), + 88: uint16(58654), + 89: uint16(58655), + 90: uint16(58656), + 91: uint16(58657), + 92: uint16(58658), + 93: uint16(58659), + 94: uint16(58660), + 95: uint16(58661), + 96: uint16(12288), + 97: uint16(12289), + 98: uint16(12290), + 99: uint16(183), + 100: uint16(713), + 101: uint16(711), + 102: uint16(168), + 103: uint16(12291), + 104: uint16(12293), + 105: uint16(8212), + 106: uint16(65374), + 107: uint16(8214), + 108: uint16(8230), + 109: uint16(8216), + 110: uint16(8217), + 111: uint16(8220), + 112: uint16(8221), + 113: uint16(12308), + 114: uint16(12309), + 115: uint16(12296), + 116: uint16(12297), + 117: uint16(12298), + 118: uint16(12299), + 119: uint16(12300), + 120: uint16(12301), + 121: uint16(12302), + 122: uint16(12303), + 123: uint16(12310), + 124: uint16(12311), + 125: uint16(12304), + 126: uint16(12305), + 127: uint16(177), + 128: uint16(215), + 129: uint16(247), + 130: uint16(8758), + 131: uint16(8743), + 132: uint16(8744), + 133: uint16(8721), + 134: uint16(8719), + 135: uint16(8746), + 136: uint16(8745), + 137: uint16(8712), + 138: uint16(8759), + 139: uint16(8730), + 140: uint16(8869), + 141: uint16(8741), + 142: uint16(8736), + 143: uint16(8978), + 144: uint16(8857), + 145: uint16(8747), + 146: uint16(8750), + 147: uint16(8801), + 148: uint16(8780), + 149: uint16(8776), + 150: uint16(8765), + 151: uint16(8733), + 152: uint16(8800), + 153: uint16(8814), + 154: uint16(8815), + 155: uint16(8804), + 156: uint16(8805), + 157: uint16(8734), + 158: uint16(8757), + 159: uint16(8756), + 160: uint16(9794), + 161: uint16(9792), + 162: uint16(176), + 163: uint16(8242), + 164: uint16(8243), + 165: uint16(8451), + 166: uint16(65284), + 167: uint16(164), + 168: uint16(65504), + 169: uint16(65505), + 170: uint16(8240), + 171: uint16(167), + 172: uint16(8470), + 173: uint16(9734), + 174: uint16(9733), + 175: uint16(9675), + 176: uint16(9679), + 177: uint16(9678), + 178: uint16(9671), + 179: uint16(9670), + 180: uint16(9633), + 181: uint16(9632), + 182: uint16(9651), + 183: uint16(9650), + 184: uint16(8251), + 185: uint16(8594), + 186: uint16(8592), + 187: uint16(8593), + 188: uint16(8595), + 189: uint16(12307), + }, + 33: { + 0: uint16(58662), + 1: uint16(58663), + 2: uint16(58664), + 3: uint16(58665), + 4: uint16(58666), + 5: uint16(58667), + 6: uint16(58668), + 7: uint16(58669), + 8: uint16(58670), + 9: uint16(58671), + 10: uint16(58672), + 11: uint16(58673), + 12: uint16(58674), + 13: uint16(58675), + 14: uint16(58676), + 15: uint16(58677), + 16: uint16(58678), + 17: uint16(58679), + 18: uint16(58680), + 19: uint16(58681), + 20: uint16(58682), + 21: uint16(58683), + 22: uint16(58684), + 23: uint16(58685), + 24: uint16(58686), + 25: uint16(58687), + 26: uint16(58688), + 27: uint16(58689), + 28: uint16(58690), + 29: uint16(58691), + 30: uint16(58692), + 31: uint16(58693), + 32: uint16(58694), + 33: uint16(58695), + 34: uint16(58696), + 35: uint16(58697), + 36: uint16(58698), + 37: uint16(58699), + 38: uint16(58700), + 39: uint16(58701), + 40: uint16(58702), + 41: uint16(58703), + 42: uint16(58704), + 43: uint16(58705), + 44: uint16(58706), + 45: uint16(58707), + 46: uint16(58708), + 47: uint16(58709), + 48: uint16(58710), + 49: uint16(58711), + 50: uint16(58712), + 51: uint16(58713), + 52: uint16(58714), + 53: uint16(58715), + 54: uint16(58716), + 55: uint16(58717), + 56: uint16(58718), + 57: uint16(58719), + 58: uint16(58720), + 59: uint16(58721), + 60: uint16(58722), + 61: uint16(58723), + 62: uint16(58724), + 63: uint16(58725), + 64: uint16(58726), + 65: uint16(58727), + 66: uint16(58728), + 67: uint16(58729), + 68: uint16(58730), + 69: uint16(58731), + 70: uint16(58732), + 71: uint16(58733), + 72: uint16(58734), + 73: uint16(58735), + 74: uint16(58736), + 75: uint16(58737), + 76: uint16(58738), + 77: uint16(58739), + 78: uint16(58740), + 79: uint16(58741), + 80: uint16(58742), + 81: uint16(58743), + 82: uint16(58744), + 83: uint16(58745), + 84: uint16(58746), + 85: uint16(58747), + 86: uint16(58748), + 87: uint16(58749), + 88: uint16(58750), + 89: uint16(58751), + 90: uint16(58752), + 91: uint16(58753), + 92: uint16(58754), + 93: uint16(58755), + 94: uint16(58756), + 95: uint16(58757), + 96: uint16(8560), + 97: uint16(8561), + 98: uint16(8562), + 99: uint16(8563), + 100: uint16(8564), + 101: uint16(8565), + 102: uint16(8566), + 103: uint16(8567), + 104: uint16(8568), + 105: uint16(8569), + 106: uint16(59238), + 107: uint16(59239), + 108: uint16(59240), + 109: uint16(59241), + 110: uint16(59242), + 111: uint16(59243), + 112: uint16(9352), + 113: uint16(9353), + 114: uint16(9354), + 115: uint16(9355), + 116: uint16(9356), + 117: uint16(9357), + 118: uint16(9358), + 119: uint16(9359), + 120: uint16(9360), + 121: uint16(9361), + 122: uint16(9362), + 123: uint16(9363), + 124: uint16(9364), + 125: uint16(9365), + 126: uint16(9366), + 127: uint16(9367), + 128: uint16(9368), + 129: uint16(9369), + 130: uint16(9370), + 131: uint16(9371), + 132: uint16(9332), + 133: uint16(9333), + 134: uint16(9334), + 135: uint16(9335), + 136: uint16(9336), + 137: uint16(9337), + 138: uint16(9338), + 139: uint16(9339), + 140: uint16(9340), + 141: uint16(9341), + 142: uint16(9342), + 143: uint16(9343), + 144: uint16(9344), + 145: uint16(9345), + 146: uint16(9346), + 147: uint16(9347), + 148: uint16(9348), + 149: uint16(9349), + 150: uint16(9350), + 151: uint16(9351), + 152: uint16(9312), + 153: uint16(9313), + 154: uint16(9314), + 155: uint16(9315), + 156: uint16(9316), + 157: uint16(9317), + 158: uint16(9318), + 159: uint16(9319), + 160: uint16(9320), + 161: uint16(9321), + 162: uint16(8364), + 163: uint16(59245), + 164: uint16(12832), + 165: uint16(12833), + 166: uint16(12834), + 167: uint16(12835), + 168: uint16(12836), + 169: uint16(12837), + 170: uint16(12838), + 171: uint16(12839), + 172: uint16(12840), + 173: uint16(12841), + 174: uint16(59246), + 175: uint16(59247), + 176: uint16(8544), + 177: uint16(8545), + 178: uint16(8546), + 179: uint16(8547), + 180: uint16(8548), + 181: uint16(8549), + 182: uint16(8550), + 183: uint16(8551), + 184: uint16(8552), + 185: uint16(8553), + 186: uint16(8554), + 187: uint16(8555), + 188: uint16(59248), + 189: uint16(59249), + }, + 34: { + 0: uint16(58758), + 1: uint16(58759), + 2: uint16(58760), + 3: uint16(58761), + 4: uint16(58762), + 5: uint16(58763), + 6: uint16(58764), + 7: uint16(58765), + 8: uint16(58766), + 9: uint16(58767), + 10: uint16(58768), + 11: uint16(58769), + 12: uint16(58770), + 13: uint16(58771), + 14: uint16(58772), + 15: uint16(58773), + 16: uint16(58774), + 17: uint16(58775), + 18: uint16(58776), + 19: uint16(58777), + 20: uint16(58778), + 21: uint16(58779), + 22: uint16(58780), + 23: uint16(58781), + 24: uint16(58782), + 25: uint16(58783), + 26: uint16(58784), + 27: uint16(58785), + 28: uint16(58786), + 29: uint16(58787), + 30: uint16(58788), + 31: uint16(58789), + 32: uint16(58790), + 33: uint16(58791), + 34: uint16(58792), + 35: uint16(58793), + 36: uint16(58794), + 37: uint16(58795), + 38: uint16(58796), + 39: uint16(58797), + 40: uint16(58798), + 41: uint16(58799), + 42: uint16(58800), + 43: uint16(58801), + 44: uint16(58802), + 45: uint16(58803), + 46: uint16(58804), + 47: uint16(58805), + 48: uint16(58806), + 49: uint16(58807), + 50: uint16(58808), + 51: uint16(58809), + 52: uint16(58810), + 53: uint16(58811), + 54: uint16(58812), + 55: uint16(58813), + 56: uint16(58814), + 57: uint16(58815), + 58: uint16(58816), + 59: uint16(58817), + 60: uint16(58818), + 61: uint16(58819), + 62: uint16(58820), + 63: uint16(58821), + 64: uint16(58822), + 65: uint16(58823), + 66: uint16(58824), + 67: uint16(58825), + 68: uint16(58826), + 69: uint16(58827), + 70: uint16(58828), + 71: uint16(58829), + 72: uint16(58830), + 73: uint16(58831), + 74: uint16(58832), + 75: uint16(58833), + 76: uint16(58834), + 77: uint16(58835), + 78: uint16(58836), + 79: uint16(58837), + 80: uint16(58838), + 81: uint16(58839), + 82: uint16(58840), + 83: uint16(58841), + 84: uint16(58842), + 85: uint16(58843), + 86: uint16(58844), + 87: uint16(58845), + 88: uint16(58846), + 89: uint16(58847), + 90: uint16(58848), + 91: uint16(58849), + 92: uint16(58850), + 93: uint16(58851), + 94: uint16(58852), + 95: uint16(58853), + 96: uint16(65281), + 97: uint16(65282), + 98: uint16(65283), + 99: uint16(65509), + 100: uint16(65285), + 101: uint16(65286), + 102: uint16(65287), + 103: uint16(65288), + 104: uint16(65289), + 105: uint16(65290), + 106: uint16(65291), + 107: uint16(65292), + 108: uint16(65293), + 109: uint16(65294), + 110: uint16(65295), + 111: uint16(65296), + 112: uint16(65297), + 113: uint16(65298), + 114: uint16(65299), + 115: uint16(65300), + 116: uint16(65301), + 117: uint16(65302), + 118: uint16(65303), + 119: uint16(65304), + 120: uint16(65305), + 121: uint16(65306), + 122: uint16(65307), + 123: uint16(65308), + 124: uint16(65309), + 125: uint16(65310), + 126: uint16(65311), + 127: uint16(65312), + 128: uint16(65313), + 129: uint16(65314), + 130: uint16(65315), + 131: uint16(65316), + 132: uint16(65317), + 133: uint16(65318), + 134: uint16(65319), + 135: uint16(65320), + 136: uint16(65321), + 137: uint16(65322), + 138: uint16(65323), + 139: uint16(65324), + 140: uint16(65325), + 141: uint16(65326), + 142: uint16(65327), + 143: uint16(65328), + 144: uint16(65329), + 145: uint16(65330), + 146: uint16(65331), + 147: uint16(65332), + 148: uint16(65333), + 149: uint16(65334), + 150: uint16(65335), + 151: uint16(65336), + 152: uint16(65337), + 153: uint16(65338), + 154: uint16(65339), + 155: uint16(65340), + 156: uint16(65341), + 157: uint16(65342), + 158: uint16(65343), + 159: uint16(65344), + 160: uint16(65345), + 161: uint16(65346), + 162: uint16(65347), + 163: uint16(65348), + 164: uint16(65349), + 165: uint16(65350), + 166: uint16(65351), + 167: uint16(65352), + 168: uint16(65353), + 169: uint16(65354), + 170: uint16(65355), + 171: uint16(65356), + 172: uint16(65357), + 173: uint16(65358), + 174: uint16(65359), + 175: uint16(65360), + 176: uint16(65361), + 177: uint16(65362), + 178: uint16(65363), + 179: uint16(65364), + 180: uint16(65365), + 181: uint16(65366), + 182: uint16(65367), + 183: uint16(65368), + 184: uint16(65369), + 185: uint16(65370), + 186: uint16(65371), + 187: uint16(65372), + 188: uint16(65373), + 189: uint16(65507), + }, + 35: { + 0: uint16(58854), + 1: uint16(58855), + 2: uint16(58856), + 3: uint16(58857), + 4: uint16(58858), + 5: uint16(58859), + 6: uint16(58860), + 7: uint16(58861), + 8: uint16(58862), + 9: uint16(58863), + 10: uint16(58864), + 11: uint16(58865), + 12: uint16(58866), + 13: uint16(58867), + 14: uint16(58868), + 15: uint16(58869), + 16: uint16(58870), + 17: uint16(58871), + 18: uint16(58872), + 19: uint16(58873), + 20: uint16(58874), + 21: uint16(58875), + 22: uint16(58876), + 23: uint16(58877), + 24: uint16(58878), + 25: uint16(58879), + 26: uint16(58880), + 27: uint16(58881), + 28: uint16(58882), + 29: uint16(58883), + 30: uint16(58884), + 31: uint16(58885), + 32: uint16(58886), + 33: uint16(58887), + 34: uint16(58888), + 35: uint16(58889), + 36: uint16(58890), + 37: uint16(58891), + 38: uint16(58892), + 39: uint16(58893), + 40: uint16(58894), + 41: uint16(58895), + 42: uint16(58896), + 43: uint16(58897), + 44: uint16(58898), + 45: uint16(58899), + 46: uint16(58900), + 47: uint16(58901), + 48: uint16(58902), + 49: uint16(58903), + 50: uint16(58904), + 51: uint16(58905), + 52: uint16(58906), + 53: uint16(58907), + 54: uint16(58908), + 55: uint16(58909), + 56: uint16(58910), + 57: uint16(58911), + 58: uint16(58912), + 59: uint16(58913), + 60: uint16(58914), + 61: uint16(58915), + 62: uint16(58916), + 63: uint16(58917), + 64: uint16(58918), + 65: uint16(58919), + 66: uint16(58920), + 67: uint16(58921), + 68: uint16(58922), + 69: uint16(58923), + 70: uint16(58924), + 71: uint16(58925), + 72: uint16(58926), + 73: uint16(58927), + 74: uint16(58928), + 75: uint16(58929), + 76: uint16(58930), + 77: uint16(58931), + 78: uint16(58932), + 79: uint16(58933), + 80: uint16(58934), + 81: uint16(58935), + 82: uint16(58936), + 83: uint16(58937), + 84: uint16(58938), + 85: uint16(58939), + 86: uint16(58940), + 87: uint16(58941), + 88: uint16(58942), + 89: uint16(58943), + 90: uint16(58944), + 91: uint16(58945), + 92: uint16(58946), + 93: uint16(58947), + 94: uint16(58948), + 95: uint16(58949), + 96: uint16(12353), + 97: uint16(12354), + 98: uint16(12355), + 99: uint16(12356), + 100: uint16(12357), + 101: uint16(12358), + 102: uint16(12359), + 103: uint16(12360), + 104: uint16(12361), + 105: uint16(12362), + 106: uint16(12363), + 107: uint16(12364), + 108: uint16(12365), + 109: uint16(12366), + 110: uint16(12367), + 111: uint16(12368), + 112: uint16(12369), + 113: uint16(12370), + 114: uint16(12371), + 115: uint16(12372), + 116: uint16(12373), + 117: uint16(12374), + 118: uint16(12375), + 119: uint16(12376), + 120: uint16(12377), + 121: uint16(12378), + 122: uint16(12379), + 123: uint16(12380), + 124: uint16(12381), + 125: uint16(12382), + 126: uint16(12383), + 127: uint16(12384), + 128: uint16(12385), + 129: uint16(12386), + 130: uint16(12387), + 131: uint16(12388), + 132: uint16(12389), + 133: uint16(12390), + 134: uint16(12391), + 135: uint16(12392), + 136: uint16(12393), + 137: uint16(12394), + 138: uint16(12395), + 139: uint16(12396), + 140: uint16(12397), + 141: uint16(12398), + 142: uint16(12399), + 143: uint16(12400), + 144: uint16(12401), + 145: uint16(12402), + 146: uint16(12403), + 147: uint16(12404), + 148: uint16(12405), + 149: uint16(12406), + 150: uint16(12407), + 151: uint16(12408), + 152: uint16(12409), + 153: uint16(12410), + 154: uint16(12411), + 155: uint16(12412), + 156: uint16(12413), + 157: uint16(12414), + 158: uint16(12415), + 159: uint16(12416), + 160: uint16(12417), + 161: uint16(12418), + 162: uint16(12419), + 163: uint16(12420), + 164: uint16(12421), + 165: uint16(12422), + 166: uint16(12423), + 167: uint16(12424), + 168: uint16(12425), + 169: uint16(12426), + 170: uint16(12427), + 171: uint16(12428), + 172: uint16(12429), + 173: uint16(12430), + 174: uint16(12431), + 175: uint16(12432), + 176: uint16(12433), + 177: uint16(12434), + 178: uint16(12435), + 179: uint16(59250), + 180: uint16(59251), + 181: uint16(59252), + 182: uint16(59253), + 183: uint16(59254), + 184: uint16(59255), + 185: uint16(59256), + 186: uint16(59257), + 187: uint16(59258), + 188: uint16(59259), + 189: uint16(59260), + }, + 36: { + 0: uint16(58950), + 1: uint16(58951), + 2: uint16(58952), + 3: uint16(58953), + 4: uint16(58954), + 5: uint16(58955), + 6: uint16(58956), + 7: uint16(58957), + 8: uint16(58958), + 9: uint16(58959), + 10: uint16(58960), + 11: uint16(58961), + 12: uint16(58962), + 13: uint16(58963), + 14: uint16(58964), + 15: uint16(58965), + 16: uint16(58966), + 17: uint16(58967), + 18: uint16(58968), + 19: uint16(58969), + 20: uint16(58970), + 21: uint16(58971), + 22: uint16(58972), + 23: uint16(58973), + 24: uint16(58974), + 25: uint16(58975), + 26: uint16(58976), + 27: uint16(58977), + 28: uint16(58978), + 29: uint16(58979), + 30: uint16(58980), + 31: uint16(58981), + 32: uint16(58982), + 33: uint16(58983), + 34: uint16(58984), + 35: uint16(58985), + 36: uint16(58986), + 37: uint16(58987), + 38: uint16(58988), + 39: uint16(58989), + 40: uint16(58990), + 41: uint16(58991), + 42: uint16(58992), + 43: uint16(58993), + 44: uint16(58994), + 45: uint16(58995), + 46: uint16(58996), + 47: uint16(58997), + 48: uint16(58998), + 49: uint16(58999), + 50: uint16(59000), + 51: uint16(59001), + 52: uint16(59002), + 53: uint16(59003), + 54: uint16(59004), + 55: uint16(59005), + 56: uint16(59006), + 57: uint16(59007), + 58: uint16(59008), + 59: uint16(59009), + 60: uint16(59010), + 61: uint16(59011), + 62: uint16(59012), + 63: uint16(59013), + 64: uint16(59014), + 65: uint16(59015), + 66: uint16(59016), + 67: uint16(59017), + 68: uint16(59018), + 69: uint16(59019), + 70: uint16(59020), + 71: uint16(59021), + 72: uint16(59022), + 73: uint16(59023), + 74: uint16(59024), + 75: uint16(59025), + 76: uint16(59026), + 77: uint16(59027), + 78: uint16(59028), + 79: uint16(59029), + 80: uint16(59030), + 81: uint16(59031), + 82: uint16(59032), + 83: uint16(59033), + 84: uint16(59034), + 85: uint16(59035), + 86: uint16(59036), + 87: uint16(59037), + 88: uint16(59038), + 89: uint16(59039), + 90: uint16(59040), + 91: uint16(59041), + 92: uint16(59042), + 93: uint16(59043), + 94: uint16(59044), + 95: uint16(59045), + 96: uint16(12449), + 97: uint16(12450), + 98: uint16(12451), + 99: uint16(12452), + 100: uint16(12453), + 101: uint16(12454), + 102: uint16(12455), + 103: uint16(12456), + 104: uint16(12457), + 105: uint16(12458), + 106: uint16(12459), + 107: uint16(12460), + 108: uint16(12461), + 109: uint16(12462), + 110: uint16(12463), + 111: uint16(12464), + 112: uint16(12465), + 113: uint16(12466), + 114: uint16(12467), + 115: uint16(12468), + 116: uint16(12469), + 117: uint16(12470), + 118: uint16(12471), + 119: uint16(12472), + 120: uint16(12473), + 121: uint16(12474), + 122: uint16(12475), + 123: uint16(12476), + 124: uint16(12477), + 125: uint16(12478), + 126: uint16(12479), + 127: uint16(12480), + 128: uint16(12481), + 129: uint16(12482), + 130: uint16(12483), + 131: uint16(12484), + 132: uint16(12485), + 133: uint16(12486), + 134: uint16(12487), + 135: uint16(12488), + 136: uint16(12489), + 137: uint16(12490), + 138: uint16(12491), + 139: uint16(12492), + 140: uint16(12493), + 141: uint16(12494), + 142: uint16(12495), + 143: uint16(12496), + 144: uint16(12497), + 145: uint16(12498), + 146: uint16(12499), + 147: uint16(12500), + 148: uint16(12501), + 149: uint16(12502), + 150: uint16(12503), + 151: uint16(12504), + 152: uint16(12505), + 153: uint16(12506), + 154: uint16(12507), + 155: uint16(12508), + 156: uint16(12509), + 157: uint16(12510), + 158: uint16(12511), + 159: uint16(12512), + 160: uint16(12513), + 161: uint16(12514), + 162: uint16(12515), + 163: uint16(12516), + 164: uint16(12517), + 165: uint16(12518), + 166: uint16(12519), + 167: uint16(12520), + 168: uint16(12521), + 169: uint16(12522), + 170: uint16(12523), + 171: uint16(12524), + 172: uint16(12525), + 173: uint16(12526), + 174: uint16(12527), + 175: uint16(12528), + 176: uint16(12529), + 177: uint16(12530), + 178: uint16(12531), + 179: uint16(12532), + 180: uint16(12533), + 181: uint16(12534), + 182: uint16(59261), + 183: uint16(59262), + 184: uint16(59263), + 185: uint16(59264), + 186: uint16(59265), + 187: uint16(59266), + 188: uint16(59267), + 189: uint16(59268), + }, + 37: { + 0: uint16(59046), + 1: uint16(59047), + 2: uint16(59048), + 3: uint16(59049), + 4: uint16(59050), + 5: uint16(59051), + 6: uint16(59052), + 7: uint16(59053), + 8: uint16(59054), + 9: uint16(59055), + 10: uint16(59056), + 11: uint16(59057), + 12: uint16(59058), + 13: uint16(59059), + 14: uint16(59060), + 15: uint16(59061), + 16: uint16(59062), + 17: uint16(59063), + 18: uint16(59064), + 19: uint16(59065), + 20: uint16(59066), + 21: uint16(59067), + 22: uint16(59068), + 23: uint16(59069), + 24: uint16(59070), + 25: uint16(59071), + 26: uint16(59072), + 27: uint16(59073), + 28: uint16(59074), + 29: uint16(59075), + 30: uint16(59076), + 31: uint16(59077), + 32: uint16(59078), + 33: uint16(59079), + 34: uint16(59080), + 35: uint16(59081), + 36: uint16(59082), + 37: uint16(59083), + 38: uint16(59084), + 39: uint16(59085), + 40: uint16(59086), + 41: uint16(59087), + 42: uint16(59088), + 43: uint16(59089), + 44: uint16(59090), + 45: uint16(59091), + 46: uint16(59092), + 47: uint16(59093), + 48: uint16(59094), + 49: uint16(59095), + 50: uint16(59096), + 51: uint16(59097), + 52: uint16(59098), + 53: uint16(59099), + 54: uint16(59100), + 55: uint16(59101), + 56: uint16(59102), + 57: uint16(59103), + 58: uint16(59104), + 59: uint16(59105), + 60: uint16(59106), + 61: uint16(59107), + 62: uint16(59108), + 63: uint16(59109), + 64: uint16(59110), + 65: uint16(59111), + 66: uint16(59112), + 67: uint16(59113), + 68: uint16(59114), + 69: uint16(59115), + 70: uint16(59116), + 71: uint16(59117), + 72: uint16(59118), + 73: uint16(59119), + 74: uint16(59120), + 75: uint16(59121), + 76: uint16(59122), + 77: uint16(59123), + 78: uint16(59124), + 79: uint16(59125), + 80: uint16(59126), + 81: uint16(59127), + 82: uint16(59128), + 83: uint16(59129), + 84: uint16(59130), + 85: uint16(59131), + 86: uint16(59132), + 87: uint16(59133), + 88: uint16(59134), + 89: uint16(59135), + 90: uint16(59136), + 91: uint16(59137), + 92: uint16(59138), + 93: uint16(59139), + 94: uint16(59140), + 95: uint16(59141), + 96: uint16(913), + 97: uint16(914), + 98: uint16(915), + 99: uint16(916), + 100: uint16(917), + 101: uint16(918), + 102: uint16(919), + 103: uint16(920), + 104: uint16(921), + 105: uint16(922), + 106: uint16(923), + 107: uint16(924), + 108: uint16(925), + 109: uint16(926), + 110: uint16(927), + 111: uint16(928), + 112: uint16(929), + 113: uint16(931), + 114: uint16(932), + 115: uint16(933), + 116: uint16(934), + 117: uint16(935), + 118: uint16(936), + 119: uint16(937), + 120: uint16(59269), + 121: uint16(59270), + 122: uint16(59271), + 123: uint16(59272), + 124: uint16(59273), + 125: uint16(59274), + 126: uint16(59275), + 127: uint16(59276), + 128: uint16(945), + 129: uint16(946), + 130: uint16(947), + 131: uint16(948), + 132: uint16(949), + 133: uint16(950), + 134: uint16(951), + 135: uint16(952), + 136: uint16(953), + 137: uint16(954), + 138: uint16(955), + 139: uint16(956), + 140: uint16(957), + 141: uint16(958), + 142: uint16(959), + 143: uint16(960), + 144: uint16(961), + 145: uint16(963), + 146: uint16(964), + 147: uint16(965), + 148: uint16(966), + 149: uint16(967), + 150: uint16(968), + 151: uint16(969), + 152: uint16(59277), + 153: uint16(59278), + 154: uint16(59279), + 155: uint16(59280), + 156: uint16(59281), + 157: uint16(59282), + 158: uint16(59283), + 159: uint16(65077), + 160: uint16(65078), + 161: uint16(65081), + 162: uint16(65082), + 163: uint16(65087), + 164: uint16(65088), + 165: uint16(65085), + 166: uint16(65086), + 167: uint16(65089), + 168: uint16(65090), + 169: uint16(65091), + 170: uint16(65092), + 171: uint16(59284), + 172: uint16(59285), + 173: uint16(65083), + 174: uint16(65084), + 175: uint16(65079), + 176: uint16(65080), + 177: uint16(65073), + 178: uint16(59286), + 179: uint16(65075), + 180: uint16(65076), + 181: uint16(59287), + 182: uint16(59288), + 183: uint16(59289), + 184: uint16(59290), + 185: uint16(59291), + 186: uint16(59292), + 187: uint16(59293), + 188: uint16(59294), + 189: uint16(59295), + }, + 38: { + 0: uint16(59142), + 1: uint16(59143), + 2: uint16(59144), + 3: uint16(59145), + 4: uint16(59146), + 5: uint16(59147), + 6: uint16(59148), + 7: uint16(59149), + 8: uint16(59150), + 9: uint16(59151), + 10: uint16(59152), + 11: uint16(59153), + 12: uint16(59154), + 13: uint16(59155), + 14: uint16(59156), + 15: uint16(59157), + 16: uint16(59158), + 17: uint16(59159), + 18: uint16(59160), + 19: uint16(59161), + 20: uint16(59162), + 21: uint16(59163), + 22: uint16(59164), + 23: uint16(59165), + 24: uint16(59166), + 25: uint16(59167), + 26: uint16(59168), + 27: uint16(59169), + 28: uint16(59170), + 29: uint16(59171), + 30: uint16(59172), + 31: uint16(59173), + 32: uint16(59174), + 33: uint16(59175), + 34: uint16(59176), + 35: uint16(59177), + 36: uint16(59178), + 37: uint16(59179), + 38: uint16(59180), + 39: uint16(59181), + 40: uint16(59182), + 41: uint16(59183), + 42: uint16(59184), + 43: uint16(59185), + 44: uint16(59186), + 45: uint16(59187), + 46: uint16(59188), + 47: uint16(59189), + 48: uint16(59190), + 49: uint16(59191), + 50: uint16(59192), + 51: uint16(59193), + 52: uint16(59194), + 53: uint16(59195), + 54: uint16(59196), + 55: uint16(59197), + 56: uint16(59198), + 57: uint16(59199), + 58: uint16(59200), + 59: uint16(59201), + 60: uint16(59202), + 61: uint16(59203), + 62: uint16(59204), + 63: uint16(59205), + 64: uint16(59206), + 65: uint16(59207), + 66: uint16(59208), + 67: uint16(59209), + 68: uint16(59210), + 69: uint16(59211), + 70: uint16(59212), + 71: uint16(59213), + 72: uint16(59214), + 73: uint16(59215), + 74: uint16(59216), + 75: uint16(59217), + 76: uint16(59218), + 77: uint16(59219), + 78: uint16(59220), + 79: uint16(59221), + 80: uint16(59222), + 81: uint16(59223), + 82: uint16(59224), + 83: uint16(59225), + 84: uint16(59226), + 85: uint16(59227), + 86: uint16(59228), + 87: uint16(59229), + 88: uint16(59230), + 89: uint16(59231), + 90: uint16(59232), + 91: uint16(59233), + 92: uint16(59234), + 93: uint16(59235), + 94: uint16(59236), + 95: uint16(59237), + 96: uint16(1040), + 97: uint16(1041), + 98: uint16(1042), + 99: uint16(1043), + 100: uint16(1044), + 101: uint16(1045), + 102: uint16(1025), + 103: uint16(1046), + 104: uint16(1047), + 105: uint16(1048), + 106: uint16(1049), + 107: uint16(1050), + 108: uint16(1051), + 109: uint16(1052), + 110: uint16(1053), + 111: uint16(1054), + 112: uint16(1055), + 113: uint16(1056), + 114: uint16(1057), + 115: uint16(1058), + 116: uint16(1059), + 117: uint16(1060), + 118: uint16(1061), + 119: uint16(1062), + 120: uint16(1063), + 121: uint16(1064), + 122: uint16(1065), + 123: uint16(1066), + 124: uint16(1067), + 125: uint16(1068), + 126: uint16(1069), + 127: uint16(1070), + 128: uint16(1071), + 129: uint16(59296), + 130: uint16(59297), + 131: uint16(59298), + 132: uint16(59299), + 133: uint16(59300), + 134: uint16(59301), + 135: uint16(59302), + 136: uint16(59303), + 137: uint16(59304), + 138: uint16(59305), + 139: uint16(59306), + 140: uint16(59307), + 141: uint16(59308), + 142: uint16(59309), + 143: uint16(59310), + 144: uint16(1072), + 145: uint16(1073), + 146: uint16(1074), + 147: uint16(1075), + 148: uint16(1076), + 149: uint16(1077), + 150: uint16(1105), + 151: uint16(1078), + 152: uint16(1079), + 153: uint16(1080), + 154: uint16(1081), + 155: uint16(1082), + 156: uint16(1083), + 157: uint16(1084), + 158: uint16(1085), + 159: uint16(1086), + 160: uint16(1087), + 161: uint16(1088), + 162: uint16(1089), + 163: uint16(1090), + 164: uint16(1091), + 165: uint16(1092), + 166: uint16(1093), + 167: uint16(1094), + 168: uint16(1095), + 169: uint16(1096), + 170: uint16(1097), + 171: uint16(1098), + 172: uint16(1099), + 173: uint16(1100), + 174: uint16(1101), + 175: uint16(1102), + 176: uint16(1103), + 177: uint16(59311), + 178: uint16(59312), + 179: uint16(59313), + 180: uint16(59314), + 181: uint16(59315), + 182: uint16(59316), + 183: uint16(59317), + 184: uint16(59318), + 185: uint16(59319), + 186: uint16(59320), + 187: uint16(59321), + 188: uint16(59322), + 189: uint16(59323), + }, + 39: { + 0: uint16(714), + 1: uint16(715), + 2: uint16(729), + 3: uint16(8211), + 4: uint16(8213), + 5: uint16(8229), + 6: uint16(8245), + 7: uint16(8453), + 8: uint16(8457), + 9: uint16(8598), + 10: uint16(8599), + 11: uint16(8600), + 12: uint16(8601), + 13: uint16(8725), + 14: uint16(8735), + 15: uint16(8739), + 16: uint16(8786), + 17: uint16(8806), + 18: uint16(8807), + 19: uint16(8895), + 20: uint16(9552), + 21: uint16(9553), + 22: uint16(9554), + 23: uint16(9555), + 24: uint16(9556), + 25: uint16(9557), + 26: uint16(9558), + 27: uint16(9559), + 28: uint16(9560), + 29: uint16(9561), + 30: uint16(9562), + 31: uint16(9563), + 32: uint16(9564), + 33: uint16(9565), + 34: uint16(9566), + 35: uint16(9567), + 36: uint16(9568), + 37: uint16(9569), + 38: uint16(9570), + 39: uint16(9571), + 40: uint16(9572), + 41: uint16(9573), + 42: uint16(9574), + 43: uint16(9575), + 44: uint16(9576), + 45: uint16(9577), + 46: uint16(9578), + 47: uint16(9579), + 48: uint16(9580), + 49: uint16(9581), + 50: uint16(9582), + 51: uint16(9583), + 52: uint16(9584), + 53: uint16(9585), + 54: uint16(9586), + 55: uint16(9587), + 56: uint16(9601), + 57: uint16(9602), + 58: uint16(9603), + 59: uint16(9604), + 60: uint16(9605), + 61: uint16(9606), + 62: uint16(9607), + 63: uint16(9608), + 64: uint16(9609), + 65: uint16(9610), + 66: uint16(9611), + 67: uint16(9612), + 68: uint16(9613), + 69: uint16(9614), + 70: uint16(9615), + 71: uint16(9619), + 72: uint16(9620), + 73: uint16(9621), + 74: uint16(9660), + 75: uint16(9661), + 76: uint16(9698), + 77: uint16(9699), + 78: uint16(9700), + 79: uint16(9701), + 80: uint16(9737), + 81: uint16(8853), + 82: uint16(12306), + 83: uint16(12317), + 84: uint16(12318), + 85: uint16(59324), + 86: uint16(59325), + 87: uint16(59326), + 88: uint16(59327), + 89: uint16(59328), + 90: uint16(59329), + 91: uint16(59330), + 92: uint16(59331), + 93: uint16(59332), + 94: uint16(59333), + 95: uint16(59334), + 96: uint16(257), + 97: uint16(225), + 98: uint16(462), + 99: uint16(224), + 100: uint16(275), + 101: uint16(233), + 102: uint16(283), + 103: uint16(232), + 104: uint16(299), + 105: uint16(237), + 106: uint16(464), + 107: uint16(236), + 108: uint16(333), + 109: uint16(243), + 110: uint16(466), + 111: uint16(242), + 112: uint16(363), + 113: uint16(250), + 114: uint16(468), + 115: uint16(249), + 116: uint16(470), + 117: uint16(472), + 118: uint16(474), + 119: uint16(476), + 120: uint16(252), + 121: uint16(234), + 122: uint16(593), + 123: uint16(59335), + 124: uint16(324), + 125: uint16(328), + 126: uint16(505), + 127: uint16(609), + 128: uint16(59337), + 129: uint16(59338), + 130: uint16(59339), + 131: uint16(59340), + 132: uint16(12549), + 133: uint16(12550), + 134: uint16(12551), + 135: uint16(12552), + 136: uint16(12553), + 137: uint16(12554), + 138: uint16(12555), + 139: uint16(12556), + 140: uint16(12557), + 141: uint16(12558), + 142: uint16(12559), + 143: uint16(12560), + 144: uint16(12561), + 145: uint16(12562), + 146: uint16(12563), + 147: uint16(12564), + 148: uint16(12565), + 149: uint16(12566), + 150: uint16(12567), + 151: uint16(12568), + 152: uint16(12569), + 153: uint16(12570), + 154: uint16(12571), + 155: uint16(12572), + 156: uint16(12573), + 157: uint16(12574), + 158: uint16(12575), + 159: uint16(12576), + 160: uint16(12577), + 161: uint16(12578), + 162: uint16(12579), + 163: uint16(12580), + 164: uint16(12581), + 165: uint16(12582), + 166: uint16(12583), + 167: uint16(12584), + 168: uint16(12585), + 169: uint16(59341), + 170: uint16(59342), + 171: uint16(59343), + 172: uint16(59344), + 173: uint16(59345), + 174: uint16(59346), + 175: uint16(59347), + 176: uint16(59348), + 177: uint16(59349), + 178: uint16(59350), + 179: uint16(59351), + 180: uint16(59352), + 181: uint16(59353), + 182: uint16(59354), + 183: uint16(59355), + 184: uint16(59356), + 185: uint16(59357), + 186: uint16(59358), + 187: uint16(59359), + 188: uint16(59360), + 189: uint16(59361), + }, + 40: { + 0: uint16(12321), + 1: uint16(12322), + 2: uint16(12323), + 3: uint16(12324), + 4: uint16(12325), + 5: uint16(12326), + 6: uint16(12327), + 7: uint16(12328), + 8: uint16(12329), + 9: uint16(12963), + 10: uint16(13198), + 11: uint16(13199), + 12: uint16(13212), + 13: uint16(13213), + 14: uint16(13214), + 15: uint16(13217), + 16: uint16(13252), + 17: uint16(13262), + 18: uint16(13265), + 19: uint16(13266), + 20: uint16(13269), + 21: uint16(65072), + 22: uint16(65506), + 23: uint16(65508), + 24: uint16(59362), + 25: uint16(8481), + 26: uint16(12849), + 27: uint16(59363), + 28: uint16(8208), + 29: uint16(59364), + 30: uint16(59365), + 31: uint16(59366), + 32: uint16(12540), + 33: uint16(12443), + 34: uint16(12444), + 35: uint16(12541), + 36: uint16(12542), + 37: uint16(12294), + 38: uint16(12445), + 39: uint16(12446), + 40: uint16(65097), + 41: uint16(65098), + 42: uint16(65099), + 43: uint16(65100), + 44: uint16(65101), + 45: uint16(65102), + 46: uint16(65103), + 47: uint16(65104), + 48: uint16(65105), + 49: uint16(65106), + 50: uint16(65108), + 51: uint16(65109), + 52: uint16(65110), + 53: uint16(65111), + 54: uint16(65113), + 55: uint16(65114), + 56: uint16(65115), + 57: uint16(65116), + 58: uint16(65117), + 59: uint16(65118), + 60: uint16(65119), + 61: uint16(65120), + 62: uint16(65121), + 63: uint16(65122), + 64: uint16(65123), + 65: uint16(65124), + 66: uint16(65125), + 67: uint16(65126), + 68: uint16(65128), + 69: uint16(65129), + 70: uint16(65130), + 71: uint16(65131), + 72: uint16(12350), + 73: uint16(12272), + 74: uint16(12273), + 75: uint16(12274), + 76: uint16(12275), + 77: uint16(12276), + 78: uint16(12277), + 79: uint16(12278), + 80: uint16(12279), + 81: uint16(12280), + 82: uint16(12281), + 83: uint16(12282), + 84: uint16(12283), + 85: uint16(12295), + 86: uint16(59380), + 87: uint16(59381), + 88: uint16(59382), + 89: uint16(59383), + 90: uint16(59384), + 91: uint16(59385), + 92: uint16(59386), + 93: uint16(59387), + 94: uint16(59388), + 95: uint16(59389), + 96: uint16(59390), + 97: uint16(59391), + 98: uint16(59392), + 99: uint16(9472), + 100: uint16(9473), + 101: uint16(9474), + 102: uint16(9475), + 103: uint16(9476), + 104: uint16(9477), + 105: uint16(9478), + 106: uint16(9479), + 107: uint16(9480), + 108: uint16(9481), + 109: uint16(9482), + 110: uint16(9483), + 111: uint16(9484), + 112: uint16(9485), + 113: uint16(9486), + 114: uint16(9487), + 115: uint16(9488), + 116: uint16(9489), + 117: uint16(9490), + 118: uint16(9491), + 119: uint16(9492), + 120: uint16(9493), + 121: uint16(9494), + 122: uint16(9495), + 123: uint16(9496), + 124: uint16(9497), + 125: uint16(9498), + 126: uint16(9499), + 127: uint16(9500), + 128: uint16(9501), + 129: uint16(9502), + 130: uint16(9503), + 131: uint16(9504), + 132: uint16(9505), + 133: uint16(9506), + 134: uint16(9507), + 135: uint16(9508), + 136: uint16(9509), + 137: uint16(9510), + 138: uint16(9511), + 139: uint16(9512), + 140: uint16(9513), + 141: uint16(9514), + 142: uint16(9515), + 143: uint16(9516), + 144: uint16(9517), + 145: uint16(9518), + 146: uint16(9519), + 147: uint16(9520), + 148: uint16(9521), + 149: uint16(9522), + 150: uint16(9523), + 151: uint16(9524), + 152: uint16(9525), + 153: uint16(9526), + 154: uint16(9527), + 155: uint16(9528), + 156: uint16(9529), + 157: uint16(9530), + 158: uint16(9531), + 159: uint16(9532), + 160: uint16(9533), + 161: uint16(9534), + 162: uint16(9535), + 163: uint16(9536), + 164: uint16(9537), + 165: uint16(9538), + 166: uint16(9539), + 167: uint16(9540), + 168: uint16(9541), + 169: uint16(9542), + 170: uint16(9543), + 171: uint16(9544), + 172: uint16(9545), + 173: uint16(9546), + 174: uint16(9547), + 175: uint16(59393), + 176: uint16(59394), + 177: uint16(59395), + 178: uint16(59396), + 179: uint16(59397), + 180: uint16(59398), + 181: uint16(59399), + 182: uint16(59400), + 183: uint16(59401), + 184: uint16(59402), + 185: uint16(59403), + 186: uint16(59404), + 187: uint16(59405), + 188: uint16(59406), + 189: uint16(59407), + }, + 41: { + 0: uint16(29404), + 1: uint16(29405), + 2: uint16(29407), + 3: uint16(29410), + 4: uint16(29411), + 5: uint16(29412), + 6: uint16(29413), + 7: uint16(29414), + 8: uint16(29415), + 9: uint16(29418), + 10: uint16(29419), + 11: uint16(29429), + 12: uint16(29430), + 13: uint16(29433), + 14: uint16(29437), + 15: uint16(29438), + 16: uint16(29439), + 17: uint16(29440), + 18: uint16(29442), + 19: uint16(29444), + 20: uint16(29445), + 21: uint16(29446), + 22: uint16(29447), + 23: uint16(29448), + 24: uint16(29449), + 25: uint16(29451), + 26: uint16(29452), + 27: uint16(29453), + 28: uint16(29455), + 29: uint16(29456), + 30: uint16(29457), + 31: uint16(29458), + 32: uint16(29460), + 33: uint16(29464), + 34: uint16(29465), + 35: uint16(29466), + 36: uint16(29471), + 37: uint16(29472), + 38: uint16(29475), + 39: uint16(29476), + 40: uint16(29478), + 41: uint16(29479), + 42: uint16(29480), + 43: uint16(29485), + 44: uint16(29487), + 45: uint16(29488), + 46: uint16(29490), + 47: uint16(29491), + 48: uint16(29493), + 49: uint16(29494), + 50: uint16(29498), + 51: uint16(29499), + 52: uint16(29500), + 53: uint16(29501), + 54: uint16(29504), + 55: uint16(29505), + 56: uint16(29506), + 57: uint16(29507), + 58: uint16(29508), + 59: uint16(29509), + 60: uint16(29510), + 61: uint16(29511), + 62: uint16(29512), + 63: uint16(29513), + 64: uint16(29514), + 65: uint16(29515), + 66: uint16(29516), + 67: uint16(29518), + 68: uint16(29519), + 69: uint16(29521), + 70: uint16(29523), + 71: uint16(29524), + 72: uint16(29525), + 73: uint16(29526), + 74: uint16(29528), + 75: uint16(29529), + 76: uint16(29530), + 77: uint16(29531), + 78: uint16(29532), + 79: uint16(29533), + 80: uint16(29534), + 81: uint16(29535), + 82: uint16(29537), + 83: uint16(29538), + 84: uint16(29539), + 85: uint16(29540), + 86: uint16(29541), + 87: uint16(29542), + 88: uint16(29543), + 89: uint16(29544), + 90: uint16(29545), + 91: uint16(29546), + 92: uint16(29547), + 93: uint16(29550), + 94: uint16(29552), + 95: uint16(29553), + 96: uint16(57344), + 97: uint16(57345), + 98: uint16(57346), + 99: uint16(57347), + 100: uint16(57348), + 101: uint16(57349), + 102: uint16(57350), + 103: uint16(57351), + 104: uint16(57352), + 105: uint16(57353), + 106: uint16(57354), + 107: uint16(57355), + 108: uint16(57356), + 109: uint16(57357), + 110: uint16(57358), + 111: uint16(57359), + 112: uint16(57360), + 113: uint16(57361), + 114: uint16(57362), + 115: uint16(57363), + 116: uint16(57364), + 117: uint16(57365), + 118: uint16(57366), + 119: uint16(57367), + 120: uint16(57368), + 121: uint16(57369), + 122: uint16(57370), + 123: uint16(57371), + 124: uint16(57372), + 125: uint16(57373), + 126: uint16(57374), + 127: uint16(57375), + 128: uint16(57376), + 129: uint16(57377), + 130: uint16(57378), + 131: uint16(57379), + 132: uint16(57380), + 133: uint16(57381), + 134: uint16(57382), + 135: uint16(57383), + 136: uint16(57384), + 137: uint16(57385), + 138: uint16(57386), + 139: uint16(57387), + 140: uint16(57388), + 141: uint16(57389), + 142: uint16(57390), + 143: uint16(57391), + 144: uint16(57392), + 145: uint16(57393), + 146: uint16(57394), + 147: uint16(57395), + 148: uint16(57396), + 149: uint16(57397), + 150: uint16(57398), + 151: uint16(57399), + 152: uint16(57400), + 153: uint16(57401), + 154: uint16(57402), + 155: uint16(57403), + 156: uint16(57404), + 157: uint16(57405), + 158: uint16(57406), + 159: uint16(57407), + 160: uint16(57408), + 161: uint16(57409), + 162: uint16(57410), + 163: uint16(57411), + 164: uint16(57412), + 165: uint16(57413), + 166: uint16(57414), + 167: uint16(57415), + 168: uint16(57416), + 169: uint16(57417), + 170: uint16(57418), + 171: uint16(57419), + 172: uint16(57420), + 173: uint16(57421), + 174: uint16(57422), + 175: uint16(57423), + 176: uint16(57424), + 177: uint16(57425), + 178: uint16(57426), + 179: uint16(57427), + 180: uint16(57428), + 181: uint16(57429), + 182: uint16(57430), + 183: uint16(57431), + 184: uint16(57432), + 185: uint16(57433), + 186: uint16(57434), + 187: uint16(57435), + 188: uint16(57436), + 189: uint16(57437), + }, + 42: { + 0: uint16(29554), + 1: uint16(29555), + 2: uint16(29556), + 3: uint16(29557), + 4: uint16(29558), + 5: uint16(29559), + 6: uint16(29560), + 7: uint16(29561), + 8: uint16(29562), + 9: uint16(29563), + 10: uint16(29564), + 11: uint16(29565), + 12: uint16(29567), + 13: uint16(29568), + 14: uint16(29569), + 15: uint16(29570), + 16: uint16(29571), + 17: uint16(29573), + 18: uint16(29574), + 19: uint16(29576), + 20: uint16(29578), + 21: uint16(29580), + 22: uint16(29581), + 23: uint16(29583), + 24: uint16(29584), + 25: uint16(29586), + 26: uint16(29587), + 27: uint16(29588), + 28: uint16(29589), + 29: uint16(29591), + 30: uint16(29592), + 31: uint16(29593), + 32: uint16(29594), + 33: uint16(29596), + 34: uint16(29597), + 35: uint16(29598), + 36: uint16(29600), + 37: uint16(29601), + 38: uint16(29603), + 39: uint16(29604), + 40: uint16(29605), + 41: uint16(29606), + 42: uint16(29607), + 43: uint16(29608), + 44: uint16(29610), + 45: uint16(29612), + 46: uint16(29613), + 47: uint16(29617), + 48: uint16(29620), + 49: uint16(29621), + 50: uint16(29622), + 51: uint16(29624), + 52: uint16(29625), + 53: uint16(29628), + 54: uint16(29629), + 55: uint16(29630), + 56: uint16(29631), + 57: uint16(29633), + 58: uint16(29635), + 59: uint16(29636), + 60: uint16(29637), + 61: uint16(29638), + 62: uint16(29639), + 63: uint16(29643), + 64: uint16(29644), + 65: uint16(29646), + 66: uint16(29650), + 67: uint16(29651), + 68: uint16(29652), + 69: uint16(29653), + 70: uint16(29654), + 71: uint16(29655), + 72: uint16(29656), + 73: uint16(29658), + 74: uint16(29659), + 75: uint16(29660), + 76: uint16(29661), + 77: uint16(29663), + 78: uint16(29665), + 79: uint16(29666), + 80: uint16(29667), + 81: uint16(29668), + 82: uint16(29670), + 83: uint16(29672), + 84: uint16(29674), + 85: uint16(29675), + 86: uint16(29676), + 87: uint16(29678), + 88: uint16(29679), + 89: uint16(29680), + 90: uint16(29681), + 91: uint16(29683), + 92: uint16(29684), + 93: uint16(29685), + 94: uint16(29686), + 95: uint16(29687), + 96: uint16(57438), + 97: uint16(57439), + 98: uint16(57440), + 99: uint16(57441), + 100: uint16(57442), + 101: uint16(57443), + 102: uint16(57444), + 103: uint16(57445), + 104: uint16(57446), + 105: uint16(57447), + 106: uint16(57448), + 107: uint16(57449), + 108: uint16(57450), + 109: uint16(57451), + 110: uint16(57452), + 111: uint16(57453), + 112: uint16(57454), + 113: uint16(57455), + 114: uint16(57456), + 115: uint16(57457), + 116: uint16(57458), + 117: uint16(57459), + 118: uint16(57460), + 119: uint16(57461), + 120: uint16(57462), + 121: uint16(57463), + 122: uint16(57464), + 123: uint16(57465), + 124: uint16(57466), + 125: uint16(57467), + 126: uint16(57468), + 127: uint16(57469), + 128: uint16(57470), + 129: uint16(57471), + 130: uint16(57472), + 131: uint16(57473), + 132: uint16(57474), + 133: uint16(57475), + 134: uint16(57476), + 135: uint16(57477), + 136: uint16(57478), + 137: uint16(57479), + 138: uint16(57480), + 139: uint16(57481), + 140: uint16(57482), + 141: uint16(57483), + 142: uint16(57484), + 143: uint16(57485), + 144: uint16(57486), + 145: uint16(57487), + 146: uint16(57488), + 147: uint16(57489), + 148: uint16(57490), + 149: uint16(57491), + 150: uint16(57492), + 151: uint16(57493), + 152: uint16(57494), + 153: uint16(57495), + 154: uint16(57496), + 155: uint16(57497), + 156: uint16(57498), + 157: uint16(57499), + 158: uint16(57500), + 159: uint16(57501), + 160: uint16(57502), + 161: uint16(57503), + 162: uint16(57504), + 163: uint16(57505), + 164: uint16(57506), + 165: uint16(57507), + 166: uint16(57508), + 167: uint16(57509), + 168: uint16(57510), + 169: uint16(57511), + 170: uint16(57512), + 171: uint16(57513), + 172: uint16(57514), + 173: uint16(57515), + 174: uint16(57516), + 175: uint16(57517), + 176: uint16(57518), + 177: uint16(57519), + 178: uint16(57520), + 179: uint16(57521), + 180: uint16(57522), + 181: uint16(57523), + 182: uint16(57524), + 183: uint16(57525), + 184: uint16(57526), + 185: uint16(57527), + 186: uint16(57528), + 187: uint16(57529), + 188: uint16(57530), + 189: uint16(57531), + }, + 43: { + 0: uint16(29688), + 1: uint16(29689), + 2: uint16(29690), + 3: uint16(29691), + 4: uint16(29692), + 5: uint16(29693), + 6: uint16(29694), + 7: uint16(29695), + 8: uint16(29696), + 9: uint16(29697), + 10: uint16(29698), + 11: uint16(29700), + 12: uint16(29703), + 13: uint16(29704), + 14: uint16(29707), + 15: uint16(29708), + 16: uint16(29709), + 17: uint16(29710), + 18: uint16(29713), + 19: uint16(29714), + 20: uint16(29715), + 21: uint16(29716), + 22: uint16(29717), + 23: uint16(29718), + 24: uint16(29719), + 25: uint16(29720), + 26: uint16(29721), + 27: uint16(29724), + 28: uint16(29725), + 29: uint16(29726), + 30: uint16(29727), + 31: uint16(29728), + 32: uint16(29729), + 33: uint16(29731), + 34: uint16(29732), + 35: uint16(29735), + 36: uint16(29737), + 37: uint16(29739), + 38: uint16(29741), + 39: uint16(29743), + 40: uint16(29745), + 41: uint16(29746), + 42: uint16(29751), + 43: uint16(29752), + 44: uint16(29753), + 45: uint16(29754), + 46: uint16(29755), + 47: uint16(29757), + 48: uint16(29758), + 49: uint16(29759), + 50: uint16(29760), + 51: uint16(29762), + 52: uint16(29763), + 53: uint16(29764), + 54: uint16(29765), + 55: uint16(29766), + 56: uint16(29767), + 57: uint16(29768), + 58: uint16(29769), + 59: uint16(29770), + 60: uint16(29771), + 61: uint16(29772), + 62: uint16(29773), + 63: uint16(29774), + 64: uint16(29775), + 65: uint16(29776), + 66: uint16(29777), + 67: uint16(29778), + 68: uint16(29779), + 69: uint16(29780), + 70: uint16(29782), + 71: uint16(29784), + 72: uint16(29789), + 73: uint16(29792), + 74: uint16(29793), + 75: uint16(29794), + 76: uint16(29795), + 77: uint16(29796), + 78: uint16(29797), + 79: uint16(29798), + 80: uint16(29799), + 81: uint16(29800), + 82: uint16(29801), + 83: uint16(29802), + 84: uint16(29803), + 85: uint16(29804), + 86: uint16(29806), + 87: uint16(29807), + 88: uint16(29809), + 89: uint16(29810), + 90: uint16(29811), + 91: uint16(29812), + 92: uint16(29813), + 93: uint16(29816), + 94: uint16(29817), + 95: uint16(29818), + 96: uint16(57532), + 97: uint16(57533), + 98: uint16(57534), + 99: uint16(57535), + 100: uint16(57536), + 101: uint16(57537), + 102: uint16(57538), + 103: uint16(57539), + 104: uint16(57540), + 105: uint16(57541), + 106: uint16(57542), + 107: uint16(57543), + 108: uint16(57544), + 109: uint16(57545), + 110: uint16(57546), + 111: uint16(57547), + 112: uint16(57548), + 113: uint16(57549), + 114: uint16(57550), + 115: uint16(57551), + 116: uint16(57552), + 117: uint16(57553), + 118: uint16(57554), + 119: uint16(57555), + 120: uint16(57556), + 121: uint16(57557), + 122: uint16(57558), + 123: uint16(57559), + 124: uint16(57560), + 125: uint16(57561), + 126: uint16(57562), + 127: uint16(57563), + 128: uint16(57564), + 129: uint16(57565), + 130: uint16(57566), + 131: uint16(57567), + 132: uint16(57568), + 133: uint16(57569), + 134: uint16(57570), + 135: uint16(57571), + 136: uint16(57572), + 137: uint16(57573), + 138: uint16(57574), + 139: uint16(57575), + 140: uint16(57576), + 141: uint16(57577), + 142: uint16(57578), + 143: uint16(57579), + 144: uint16(57580), + 145: uint16(57581), + 146: uint16(57582), + 147: uint16(57583), + 148: uint16(57584), + 149: uint16(57585), + 150: uint16(57586), + 151: uint16(57587), + 152: uint16(57588), + 153: uint16(57589), + 154: uint16(57590), + 155: uint16(57591), + 156: uint16(57592), + 157: uint16(57593), + 158: uint16(57594), + 159: uint16(57595), + 160: uint16(57596), + 161: uint16(57597), + 162: uint16(57598), + 163: uint16(57599), + 164: uint16(57600), + 165: uint16(57601), + 166: uint16(57602), + 167: uint16(57603), + 168: uint16(57604), + 169: uint16(57605), + 170: uint16(57606), + 171: uint16(57607), + 172: uint16(57608), + 173: uint16(57609), + 174: uint16(57610), + 175: uint16(57611), + 176: uint16(57612), + 177: uint16(57613), + 178: uint16(57614), + 179: uint16(57615), + 180: uint16(57616), + 181: uint16(57617), + 182: uint16(57618), + 183: uint16(57619), + 184: uint16(57620), + 185: uint16(57621), + 186: uint16(57622), + 187: uint16(57623), + 188: uint16(57624), + 189: uint16(57625), + }, + 44: { + 0: uint16(29819), + 1: uint16(29820), + 2: uint16(29821), + 3: uint16(29823), + 4: uint16(29826), + 5: uint16(29828), + 6: uint16(29829), + 7: uint16(29830), + 8: uint16(29832), + 9: uint16(29833), + 10: uint16(29834), + 11: uint16(29836), + 12: uint16(29837), + 13: uint16(29839), + 14: uint16(29841), + 15: uint16(29842), + 16: uint16(29843), + 17: uint16(29844), + 18: uint16(29845), + 19: uint16(29846), + 20: uint16(29847), + 21: uint16(29848), + 22: uint16(29849), + 23: uint16(29850), + 24: uint16(29851), + 25: uint16(29853), + 26: uint16(29855), + 27: uint16(29856), + 28: uint16(29857), + 29: uint16(29858), + 30: uint16(29859), + 31: uint16(29860), + 32: uint16(29861), + 33: uint16(29862), + 34: uint16(29866), + 35: uint16(29867), + 36: uint16(29868), + 37: uint16(29869), + 38: uint16(29870), + 39: uint16(29871), + 40: uint16(29872), + 41: uint16(29873), + 42: uint16(29874), + 43: uint16(29875), + 44: uint16(29876), + 45: uint16(29877), + 46: uint16(29878), + 47: uint16(29879), + 48: uint16(29880), + 49: uint16(29881), + 50: uint16(29883), + 51: uint16(29884), + 52: uint16(29885), + 53: uint16(29886), + 54: uint16(29887), + 55: uint16(29888), + 56: uint16(29889), + 57: uint16(29890), + 58: uint16(29891), + 59: uint16(29892), + 60: uint16(29893), + 61: uint16(29894), + 62: uint16(29895), + 63: uint16(29896), + 64: uint16(29897), + 65: uint16(29898), + 66: uint16(29899), + 67: uint16(29900), + 68: uint16(29901), + 69: uint16(29902), + 70: uint16(29903), + 71: uint16(29904), + 72: uint16(29905), + 73: uint16(29907), + 74: uint16(29908), + 75: uint16(29909), + 76: uint16(29910), + 77: uint16(29911), + 78: uint16(29912), + 79: uint16(29913), + 80: uint16(29914), + 81: uint16(29915), + 82: uint16(29917), + 83: uint16(29919), + 84: uint16(29921), + 85: uint16(29925), + 86: uint16(29927), + 87: uint16(29928), + 88: uint16(29929), + 89: uint16(29930), + 90: uint16(29931), + 91: uint16(29932), + 92: uint16(29933), + 93: uint16(29936), + 94: uint16(29937), + 95: uint16(29938), + 96: uint16(57626), + 97: uint16(57627), + 98: uint16(57628), + 99: uint16(57629), + 100: uint16(57630), + 101: uint16(57631), + 102: uint16(57632), + 103: uint16(57633), + 104: uint16(57634), + 105: uint16(57635), + 106: uint16(57636), + 107: uint16(57637), + 108: uint16(57638), + 109: uint16(57639), + 110: uint16(57640), + 111: uint16(57641), + 112: uint16(57642), + 113: uint16(57643), + 114: uint16(57644), + 115: uint16(57645), + 116: uint16(57646), + 117: uint16(57647), + 118: uint16(57648), + 119: uint16(57649), + 120: uint16(57650), + 121: uint16(57651), + 122: uint16(57652), + 123: uint16(57653), + 124: uint16(57654), + 125: uint16(57655), + 126: uint16(57656), + 127: uint16(57657), + 128: uint16(57658), + 129: uint16(57659), + 130: uint16(57660), + 131: uint16(57661), + 132: uint16(57662), + 133: uint16(57663), + 134: uint16(57664), + 135: uint16(57665), + 136: uint16(57666), + 137: uint16(57667), + 138: uint16(57668), + 139: uint16(57669), + 140: uint16(57670), + 141: uint16(57671), + 142: uint16(57672), + 143: uint16(57673), + 144: uint16(57674), + 145: uint16(57675), + 146: uint16(57676), + 147: uint16(57677), + 148: uint16(57678), + 149: uint16(57679), + 150: uint16(57680), + 151: uint16(57681), + 152: uint16(57682), + 153: uint16(57683), + 154: uint16(57684), + 155: uint16(57685), + 156: uint16(57686), + 157: uint16(57687), + 158: uint16(57688), + 159: uint16(57689), + 160: uint16(57690), + 161: uint16(57691), + 162: uint16(57692), + 163: uint16(57693), + 164: uint16(57694), + 165: uint16(57695), + 166: uint16(57696), + 167: uint16(57697), + 168: uint16(57698), + 169: uint16(57699), + 170: uint16(57700), + 171: uint16(57701), + 172: uint16(57702), + 173: uint16(57703), + 174: uint16(57704), + 175: uint16(57705), + 176: uint16(57706), + 177: uint16(57707), + 178: uint16(57708), + 179: uint16(57709), + 180: uint16(57710), + 181: uint16(57711), + 182: uint16(57712), + 183: uint16(57713), + 184: uint16(57714), + 185: uint16(57715), + 186: uint16(57716), + 187: uint16(57717), + 188: uint16(57718), + 189: uint16(57719), + }, + 45: { + 0: uint16(29939), + 1: uint16(29941), + 2: uint16(29944), + 3: uint16(29945), + 4: uint16(29946), + 5: uint16(29947), + 6: uint16(29948), + 7: uint16(29949), + 8: uint16(29950), + 9: uint16(29952), + 10: uint16(29953), + 11: uint16(29954), + 12: uint16(29955), + 13: uint16(29957), + 14: uint16(29958), + 15: uint16(29959), + 16: uint16(29960), + 17: uint16(29961), + 18: uint16(29962), + 19: uint16(29963), + 20: uint16(29964), + 21: uint16(29966), + 22: uint16(29968), + 23: uint16(29970), + 24: uint16(29972), + 25: uint16(29973), + 26: uint16(29974), + 27: uint16(29975), + 28: uint16(29979), + 29: uint16(29981), + 30: uint16(29982), + 31: uint16(29984), + 32: uint16(29985), + 33: uint16(29986), + 34: uint16(29987), + 35: uint16(29988), + 36: uint16(29990), + 37: uint16(29991), + 38: uint16(29994), + 39: uint16(29998), + 40: uint16(30004), + 41: uint16(30006), + 42: uint16(30009), + 43: uint16(30012), + 44: uint16(30013), + 45: uint16(30015), + 46: uint16(30017), + 47: uint16(30018), + 48: uint16(30019), + 49: uint16(30020), + 50: uint16(30022), + 51: uint16(30023), + 52: uint16(30025), + 53: uint16(30026), + 54: uint16(30029), + 55: uint16(30032), + 56: uint16(30033), + 57: uint16(30034), + 58: uint16(30035), + 59: uint16(30037), + 60: uint16(30038), + 61: uint16(30039), + 62: uint16(30040), + 63: uint16(30045), + 64: uint16(30046), + 65: uint16(30047), + 66: uint16(30048), + 67: uint16(30049), + 68: uint16(30050), + 69: uint16(30051), + 70: uint16(30052), + 71: uint16(30055), + 72: uint16(30056), + 73: uint16(30057), + 74: uint16(30059), + 75: uint16(30060), + 76: uint16(30061), + 77: uint16(30062), + 78: uint16(30063), + 79: uint16(30064), + 80: uint16(30065), + 81: uint16(30067), + 82: uint16(30069), + 83: uint16(30070), + 84: uint16(30071), + 85: uint16(30074), + 86: uint16(30075), + 87: uint16(30076), + 88: uint16(30077), + 89: uint16(30078), + 90: uint16(30080), + 91: uint16(30081), + 92: uint16(30082), + 93: uint16(30084), + 94: uint16(30085), + 95: uint16(30087), + 96: uint16(57720), + 97: uint16(57721), + 98: uint16(57722), + 99: uint16(57723), + 100: uint16(57724), + 101: uint16(57725), + 102: uint16(57726), + 103: uint16(57727), + 104: uint16(57728), + 105: uint16(57729), + 106: uint16(57730), + 107: uint16(57731), + 108: uint16(57732), + 109: uint16(57733), + 110: uint16(57734), + 111: uint16(57735), + 112: uint16(57736), + 113: uint16(57737), + 114: uint16(57738), + 115: uint16(57739), + 116: uint16(57740), + 117: uint16(57741), + 118: uint16(57742), + 119: uint16(57743), + 120: uint16(57744), + 121: uint16(57745), + 122: uint16(57746), + 123: uint16(57747), + 124: uint16(57748), + 125: uint16(57749), + 126: uint16(57750), + 127: uint16(57751), + 128: uint16(57752), + 129: uint16(57753), + 130: uint16(57754), + 131: uint16(57755), + 132: uint16(57756), + 133: uint16(57757), + 134: uint16(57758), + 135: uint16(57759), + 136: uint16(57760), + 137: uint16(57761), + 138: uint16(57762), + 139: uint16(57763), + 140: uint16(57764), + 141: uint16(57765), + 142: uint16(57766), + 143: uint16(57767), + 144: uint16(57768), + 145: uint16(57769), + 146: uint16(57770), + 147: uint16(57771), + 148: uint16(57772), + 149: uint16(57773), + 150: uint16(57774), + 151: uint16(57775), + 152: uint16(57776), + 153: uint16(57777), + 154: uint16(57778), + 155: uint16(57779), + 156: uint16(57780), + 157: uint16(57781), + 158: uint16(57782), + 159: uint16(57783), + 160: uint16(57784), + 161: uint16(57785), + 162: uint16(57786), + 163: uint16(57787), + 164: uint16(57788), + 165: uint16(57789), + 166: uint16(57790), + 167: uint16(57791), + 168: uint16(57792), + 169: uint16(57793), + 170: uint16(57794), + 171: uint16(57795), + 172: uint16(57796), + 173: uint16(57797), + 174: uint16(57798), + 175: uint16(57799), + 176: uint16(57800), + 177: uint16(57801), + 178: uint16(57802), + 179: uint16(57803), + 180: uint16(57804), + 181: uint16(57805), + 182: uint16(57806), + 183: uint16(57807), + 184: uint16(57808), + 185: uint16(57809), + 186: uint16(57810), + 187: uint16(57811), + 188: uint16(57812), + 189: uint16(57813), + }, + 46: { + 0: uint16(30088), + 1: uint16(30089), + 2: uint16(30090), + 3: uint16(30092), + 4: uint16(30093), + 5: uint16(30094), + 6: uint16(30096), + 7: uint16(30099), + 8: uint16(30101), + 9: uint16(30104), + 10: uint16(30107), + 11: uint16(30108), + 12: uint16(30110), + 13: uint16(30114), + 14: uint16(30118), + 15: uint16(30119), + 16: uint16(30120), + 17: uint16(30121), + 18: uint16(30122), + 19: uint16(30125), + 20: uint16(30134), + 21: uint16(30135), + 22: uint16(30138), + 23: uint16(30139), + 24: uint16(30143), + 25: uint16(30144), + 26: uint16(30145), + 27: uint16(30150), + 28: uint16(30155), + 29: uint16(30156), + 30: uint16(30158), + 31: uint16(30159), + 32: uint16(30160), + 33: uint16(30161), + 34: uint16(30163), + 35: uint16(30167), + 36: uint16(30169), + 37: uint16(30170), + 38: uint16(30172), + 39: uint16(30173), + 40: uint16(30175), + 41: uint16(30176), + 42: uint16(30177), + 43: uint16(30181), + 44: uint16(30185), + 45: uint16(30188), + 46: uint16(30189), + 47: uint16(30190), + 48: uint16(30191), + 49: uint16(30194), + 50: uint16(30195), + 51: uint16(30197), + 52: uint16(30198), + 53: uint16(30199), + 54: uint16(30200), + 55: uint16(30202), + 56: uint16(30203), + 57: uint16(30205), + 58: uint16(30206), + 59: uint16(30210), + 60: uint16(30212), + 61: uint16(30214), + 62: uint16(30215), + 63: uint16(30216), + 64: uint16(30217), + 65: uint16(30219), + 66: uint16(30221), + 67: uint16(30222), + 68: uint16(30223), + 69: uint16(30225), + 70: uint16(30226), + 71: uint16(30227), + 72: uint16(30228), + 73: uint16(30230), + 74: uint16(30234), + 75: uint16(30236), + 76: uint16(30237), + 77: uint16(30238), + 78: uint16(30241), + 79: uint16(30243), + 80: uint16(30247), + 81: uint16(30248), + 82: uint16(30252), + 83: uint16(30254), + 84: uint16(30255), + 85: uint16(30257), + 86: uint16(30258), + 87: uint16(30262), + 88: uint16(30263), + 89: uint16(30265), + 90: uint16(30266), + 91: uint16(30267), + 92: uint16(30269), + 93: uint16(30273), + 94: uint16(30274), + 95: uint16(30276), + 96: uint16(57814), + 97: uint16(57815), + 98: uint16(57816), + 99: uint16(57817), + 100: uint16(57818), + 101: uint16(57819), + 102: uint16(57820), + 103: uint16(57821), + 104: uint16(57822), + 105: uint16(57823), + 106: uint16(57824), + 107: uint16(57825), + 108: uint16(57826), + 109: uint16(57827), + 110: uint16(57828), + 111: uint16(57829), + 112: uint16(57830), + 113: uint16(57831), + 114: uint16(57832), + 115: uint16(57833), + 116: uint16(57834), + 117: uint16(57835), + 118: uint16(57836), + 119: uint16(57837), + 120: uint16(57838), + 121: uint16(57839), + 122: uint16(57840), + 123: uint16(57841), + 124: uint16(57842), + 125: uint16(57843), + 126: uint16(57844), + 127: uint16(57845), + 128: uint16(57846), + 129: uint16(57847), + 130: uint16(57848), + 131: uint16(57849), + 132: uint16(57850), + 133: uint16(57851), + 134: uint16(57852), + 135: uint16(57853), + 136: uint16(57854), + 137: uint16(57855), + 138: uint16(57856), + 139: uint16(57857), + 140: uint16(57858), + 141: uint16(57859), + 142: uint16(57860), + 143: uint16(57861), + 144: uint16(57862), + 145: uint16(57863), + 146: uint16(57864), + 147: uint16(57865), + 148: uint16(57866), + 149: uint16(57867), + 150: uint16(57868), + 151: uint16(57869), + 152: uint16(57870), + 153: uint16(57871), + 154: uint16(57872), + 155: uint16(57873), + 156: uint16(57874), + 157: uint16(57875), + 158: uint16(57876), + 159: uint16(57877), + 160: uint16(57878), + 161: uint16(57879), + 162: uint16(57880), + 163: uint16(57881), + 164: uint16(57882), + 165: uint16(57883), + 166: uint16(57884), + 167: uint16(57885), + 168: uint16(57886), + 169: uint16(57887), + 170: uint16(57888), + 171: uint16(57889), + 172: uint16(57890), + 173: uint16(57891), + 174: uint16(57892), + 175: uint16(57893), + 176: uint16(57894), + 177: uint16(57895), + 178: uint16(57896), + 179: uint16(57897), + 180: uint16(57898), + 181: uint16(57899), + 182: uint16(57900), + 183: uint16(57901), + 184: uint16(57902), + 185: uint16(57903), + 186: uint16(57904), + 187: uint16(57905), + 188: uint16(57906), + 189: uint16(57907), + }, + 47: { + 0: uint16(30277), + 1: uint16(30278), + 2: uint16(30279), + 3: uint16(30280), + 4: uint16(30281), + 5: uint16(30282), + 6: uint16(30283), + 7: uint16(30286), + 8: uint16(30287), + 9: uint16(30288), + 10: uint16(30289), + 11: uint16(30290), + 12: uint16(30291), + 13: uint16(30293), + 14: uint16(30295), + 15: uint16(30296), + 16: uint16(30297), + 17: uint16(30298), + 18: uint16(30299), + 19: uint16(30301), + 20: uint16(30303), + 21: uint16(30304), + 22: uint16(30305), + 23: uint16(30306), + 24: uint16(30308), + 25: uint16(30309), + 26: uint16(30310), + 27: uint16(30311), + 28: uint16(30312), + 29: uint16(30313), + 30: uint16(30314), + 31: uint16(30316), + 32: uint16(30317), + 33: uint16(30318), + 34: uint16(30320), + 35: uint16(30321), + 36: uint16(30322), + 37: uint16(30323), + 38: uint16(30324), + 39: uint16(30325), + 40: uint16(30326), + 41: uint16(30327), + 42: uint16(30329), + 43: uint16(30330), + 44: uint16(30332), + 45: uint16(30335), + 46: uint16(30336), + 47: uint16(30337), + 48: uint16(30339), + 49: uint16(30341), + 50: uint16(30345), + 51: uint16(30346), + 52: uint16(30348), + 53: uint16(30349), + 54: uint16(30351), + 55: uint16(30352), + 56: uint16(30354), + 57: uint16(30356), + 58: uint16(30357), + 59: uint16(30359), + 60: uint16(30360), + 61: uint16(30362), + 62: uint16(30363), + 63: uint16(30364), + 64: uint16(30365), + 65: uint16(30366), + 66: uint16(30367), + 67: uint16(30368), + 68: uint16(30369), + 69: uint16(30370), + 70: uint16(30371), + 71: uint16(30373), + 72: uint16(30374), + 73: uint16(30375), + 74: uint16(30376), + 75: uint16(30377), + 76: uint16(30378), + 77: uint16(30379), + 78: uint16(30380), + 79: uint16(30381), + 80: uint16(30383), + 81: uint16(30384), + 82: uint16(30387), + 83: uint16(30389), + 84: uint16(30390), + 85: uint16(30391), + 86: uint16(30392), + 87: uint16(30393), + 88: uint16(30394), + 89: uint16(30395), + 90: uint16(30396), + 91: uint16(30397), + 92: uint16(30398), + 93: uint16(30400), + 94: uint16(30401), + 95: uint16(30403), + 96: uint16(21834), + 97: uint16(38463), + 98: uint16(22467), + 99: uint16(25384), + 100: uint16(21710), + 101: uint16(21769), + 102: uint16(21696), + 103: uint16(30353), + 104: uint16(30284), + 105: uint16(34108), + 106: uint16(30702), + 107: uint16(33406), + 108: uint16(30861), + 109: uint16(29233), + 110: uint16(38552), + 111: uint16(38797), + 112: uint16(27688), + 113: uint16(23433), + 114: uint16(20474), + 115: uint16(25353), + 116: uint16(26263), + 117: uint16(23736), + 118: uint16(33018), + 119: uint16(26696), + 120: uint16(32942), + 121: uint16(26114), + 122: uint16(30414), + 123: uint16(20985), + 124: uint16(25942), + 125: uint16(29100), + 126: uint16(32753), + 127: uint16(34948), + 128: uint16(20658), + 129: uint16(22885), + 130: uint16(25034), + 131: uint16(28595), + 132: uint16(33453), + 133: uint16(25420), + 134: uint16(25170), + 135: uint16(21485), + 136: uint16(21543), + 137: uint16(31494), + 138: uint16(20843), + 139: uint16(30116), + 140: uint16(24052), + 141: uint16(25300), + 142: uint16(36299), + 143: uint16(38774), + 144: uint16(25226), + 145: uint16(32793), + 146: uint16(22365), + 147: uint16(38712), + 148: uint16(32610), + 149: uint16(29240), + 150: uint16(30333), + 151: uint16(26575), + 152: uint16(30334), + 153: uint16(25670), + 154: uint16(20336), + 155: uint16(36133), + 156: uint16(25308), + 157: uint16(31255), + 158: uint16(26001), + 159: uint16(29677), + 160: uint16(25644), + 161: uint16(25203), + 162: uint16(33324), + 163: uint16(39041), + 164: uint16(26495), + 165: uint16(29256), + 166: uint16(25198), + 167: uint16(25292), + 168: uint16(20276), + 169: uint16(29923), + 170: uint16(21322), + 171: uint16(21150), + 172: uint16(32458), + 173: uint16(37030), + 174: uint16(24110), + 175: uint16(26758), + 176: uint16(27036), + 177: uint16(33152), + 178: uint16(32465), + 179: uint16(26834), + 180: uint16(30917), + 181: uint16(34444), + 182: uint16(38225), + 183: uint16(20621), + 184: uint16(35876), + 185: uint16(33502), + 186: uint16(32990), + 187: uint16(21253), + 188: uint16(35090), + 189: uint16(21093), + }, + 48: { + 0: uint16(30404), + 1: uint16(30407), + 2: uint16(30409), + 3: uint16(30411), + 4: uint16(30412), + 5: uint16(30419), + 6: uint16(30421), + 7: uint16(30425), + 8: uint16(30426), + 9: uint16(30428), + 10: uint16(30429), + 11: uint16(30430), + 12: uint16(30432), + 13: uint16(30433), + 14: uint16(30434), + 15: uint16(30435), + 16: uint16(30436), + 17: uint16(30438), + 18: uint16(30439), + 19: uint16(30440), + 20: uint16(30441), + 21: uint16(30442), + 22: uint16(30443), + 23: uint16(30444), + 24: uint16(30445), + 25: uint16(30448), + 26: uint16(30451), + 27: uint16(30453), + 28: uint16(30454), + 29: uint16(30455), + 30: uint16(30458), + 31: uint16(30459), + 32: uint16(30461), + 33: uint16(30463), + 34: uint16(30464), + 35: uint16(30466), + 36: uint16(30467), + 37: uint16(30469), + 38: uint16(30470), + 39: uint16(30474), + 40: uint16(30476), + 41: uint16(30478), + 42: uint16(30479), + 43: uint16(30480), + 44: uint16(30481), + 45: uint16(30482), + 46: uint16(30483), + 47: uint16(30484), + 48: uint16(30485), + 49: uint16(30486), + 50: uint16(30487), + 51: uint16(30488), + 52: uint16(30491), + 53: uint16(30492), + 54: uint16(30493), + 55: uint16(30494), + 56: uint16(30497), + 57: uint16(30499), + 58: uint16(30500), + 59: uint16(30501), + 60: uint16(30503), + 61: uint16(30506), + 62: uint16(30507), + 63: uint16(30508), + 64: uint16(30510), + 65: uint16(30512), + 66: uint16(30513), + 67: uint16(30514), + 68: uint16(30515), + 69: uint16(30516), + 70: uint16(30521), + 71: uint16(30523), + 72: uint16(30525), + 73: uint16(30526), + 74: uint16(30527), + 75: uint16(30530), + 76: uint16(30532), + 77: uint16(30533), + 78: uint16(30534), + 79: uint16(30536), + 80: uint16(30537), + 81: uint16(30538), + 82: uint16(30539), + 83: uint16(30540), + 84: uint16(30541), + 85: uint16(30542), + 86: uint16(30543), + 87: uint16(30546), + 88: uint16(30547), + 89: uint16(30548), + 90: uint16(30549), + 91: uint16(30550), + 92: uint16(30551), + 93: uint16(30552), + 94: uint16(30553), + 95: uint16(30556), + 96: uint16(34180), + 97: uint16(38649), + 98: uint16(20445), + 99: uint16(22561), + 100: uint16(39281), + 101: uint16(23453), + 102: uint16(25265), + 103: uint16(25253), + 104: uint16(26292), + 105: uint16(35961), + 106: uint16(40077), + 107: uint16(29190), + 108: uint16(26479), + 109: uint16(30865), + 110: uint16(24754), + 111: uint16(21329), + 112: uint16(21271), + 113: uint16(36744), + 114: uint16(32972), + 115: uint16(36125), + 116: uint16(38049), + 117: uint16(20493), + 118: uint16(29384), + 119: uint16(22791), + 120: uint16(24811), + 121: uint16(28953), + 122: uint16(34987), + 123: uint16(22868), + 124: uint16(33519), + 125: uint16(26412), + 126: uint16(31528), + 127: uint16(23849), + 128: uint16(32503), + 129: uint16(29997), + 130: uint16(27893), + 131: uint16(36454), + 132: uint16(36856), + 133: uint16(36924), + 134: uint16(40763), + 135: uint16(27604), + 136: uint16(37145), + 137: uint16(31508), + 138: uint16(24444), + 139: uint16(30887), + 140: uint16(34006), + 141: uint16(34109), + 142: uint16(27605), + 143: uint16(27609), + 144: uint16(27606), + 145: uint16(24065), + 146: uint16(24199), + 147: uint16(30201), + 148: uint16(38381), + 149: uint16(25949), + 150: uint16(24330), + 151: uint16(24517), + 152: uint16(36767), + 153: uint16(22721), + 154: uint16(33218), + 155: uint16(36991), + 156: uint16(38491), + 157: uint16(38829), + 158: uint16(36793), + 159: uint16(32534), + 160: uint16(36140), + 161: uint16(25153), + 162: uint16(20415), + 163: uint16(21464), + 164: uint16(21342), + 165: uint16(36776), + 166: uint16(36777), + 167: uint16(36779), + 168: uint16(36941), + 169: uint16(26631), + 170: uint16(24426), + 171: uint16(33176), + 172: uint16(34920), + 173: uint16(40150), + 174: uint16(24971), + 175: uint16(21035), + 176: uint16(30250), + 177: uint16(24428), + 178: uint16(25996), + 179: uint16(28626), + 180: uint16(28392), + 181: uint16(23486), + 182: uint16(25672), + 183: uint16(20853), + 184: uint16(20912), + 185: uint16(26564), + 186: uint16(19993), + 187: uint16(31177), + 188: uint16(39292), + 189: uint16(28851), + }, + 49: { + 0: uint16(30557), + 1: uint16(30558), + 2: uint16(30559), + 3: uint16(30560), + 4: uint16(30564), + 5: uint16(30567), + 6: uint16(30569), + 7: uint16(30570), + 8: uint16(30573), + 9: uint16(30574), + 10: uint16(30575), + 11: uint16(30576), + 12: uint16(30577), + 13: uint16(30578), + 14: uint16(30579), + 15: uint16(30580), + 16: uint16(30581), + 17: uint16(30582), + 18: uint16(30583), + 19: uint16(30584), + 20: uint16(30586), + 21: uint16(30587), + 22: uint16(30588), + 23: uint16(30593), + 24: uint16(30594), + 25: uint16(30595), + 26: uint16(30598), + 27: uint16(30599), + 28: uint16(30600), + 29: uint16(30601), + 30: uint16(30602), + 31: uint16(30603), + 32: uint16(30607), + 33: uint16(30608), + 34: uint16(30611), + 35: uint16(30612), + 36: uint16(30613), + 37: uint16(30614), + 38: uint16(30615), + 39: uint16(30616), + 40: uint16(30617), + 41: uint16(30618), + 42: uint16(30619), + 43: uint16(30620), + 44: uint16(30621), + 45: uint16(30622), + 46: uint16(30625), + 47: uint16(30627), + 48: uint16(30628), + 49: uint16(30630), + 50: uint16(30632), + 51: uint16(30635), + 52: uint16(30637), + 53: uint16(30638), + 54: uint16(30639), + 55: uint16(30641), + 56: uint16(30642), + 57: uint16(30644), + 58: uint16(30646), + 59: uint16(30647), + 60: uint16(30648), + 61: uint16(30649), + 62: uint16(30650), + 63: uint16(30652), + 64: uint16(30654), + 65: uint16(30656), + 66: uint16(30657), + 67: uint16(30658), + 68: uint16(30659), + 69: uint16(30660), + 70: uint16(30661), + 71: uint16(30662), + 72: uint16(30663), + 73: uint16(30664), + 74: uint16(30665), + 75: uint16(30666), + 76: uint16(30667), + 77: uint16(30668), + 78: uint16(30670), + 79: uint16(30671), + 80: uint16(30672), + 81: uint16(30673), + 82: uint16(30674), + 83: uint16(30675), + 84: uint16(30676), + 85: uint16(30677), + 86: uint16(30678), + 87: uint16(30680), + 88: uint16(30681), + 89: uint16(30682), + 90: uint16(30685), + 91: uint16(30686), + 92: uint16(30687), + 93: uint16(30688), + 94: uint16(30689), + 95: uint16(30692), + 96: uint16(30149), + 97: uint16(24182), + 98: uint16(29627), + 99: uint16(33760), + 100: uint16(25773), + 101: uint16(25320), + 102: uint16(38069), + 103: uint16(27874), + 104: uint16(21338), + 105: uint16(21187), + 106: uint16(25615), + 107: uint16(38082), + 108: uint16(31636), + 109: uint16(20271), + 110: uint16(24091), + 111: uint16(33334), + 112: uint16(33046), + 113: uint16(33162), + 114: uint16(28196), + 115: uint16(27850), + 116: uint16(39539), + 117: uint16(25429), + 118: uint16(21340), + 119: uint16(21754), + 120: uint16(34917), + 121: uint16(22496), + 122: uint16(19981), + 123: uint16(24067), + 124: uint16(27493), + 125: uint16(31807), + 126: uint16(37096), + 127: uint16(24598), + 128: uint16(25830), + 129: uint16(29468), + 130: uint16(35009), + 131: uint16(26448), + 132: uint16(25165), + 133: uint16(36130), + 134: uint16(30572), + 135: uint16(36393), + 136: uint16(37319), + 137: uint16(24425), + 138: uint16(33756), + 139: uint16(34081), + 140: uint16(39184), + 141: uint16(21442), + 142: uint16(34453), + 143: uint16(27531), + 144: uint16(24813), + 145: uint16(24808), + 146: uint16(28799), + 147: uint16(33485), + 148: uint16(33329), + 149: uint16(20179), + 150: uint16(27815), + 151: uint16(34255), + 152: uint16(25805), + 153: uint16(31961), + 154: uint16(27133), + 155: uint16(26361), + 156: uint16(33609), + 157: uint16(21397), + 158: uint16(31574), + 159: uint16(20391), + 160: uint16(20876), + 161: uint16(27979), + 162: uint16(23618), + 163: uint16(36461), + 164: uint16(25554), + 165: uint16(21449), + 166: uint16(33580), + 167: uint16(33590), + 168: uint16(26597), + 169: uint16(30900), + 170: uint16(25661), + 171: uint16(23519), + 172: uint16(23700), + 173: uint16(24046), + 174: uint16(35815), + 175: uint16(25286), + 176: uint16(26612), + 177: uint16(35962), + 178: uint16(25600), + 179: uint16(25530), + 180: uint16(34633), + 181: uint16(39307), + 182: uint16(35863), + 183: uint16(32544), + 184: uint16(38130), + 185: uint16(20135), + 186: uint16(38416), + 187: uint16(39076), + 188: uint16(26124), + 189: uint16(29462), + }, + 50: { + 0: uint16(30694), + 1: uint16(30696), + 2: uint16(30698), + 3: uint16(30703), + 4: uint16(30704), + 5: uint16(30705), + 6: uint16(30706), + 7: uint16(30708), + 8: uint16(30709), + 9: uint16(30711), + 10: uint16(30713), + 11: uint16(30714), + 12: uint16(30715), + 13: uint16(30716), + 14: uint16(30723), + 15: uint16(30724), + 16: uint16(30725), + 17: uint16(30726), + 18: uint16(30727), + 19: uint16(30728), + 20: uint16(30730), + 21: uint16(30731), + 22: uint16(30734), + 23: uint16(30735), + 24: uint16(30736), + 25: uint16(30739), + 26: uint16(30741), + 27: uint16(30745), + 28: uint16(30747), + 29: uint16(30750), + 30: uint16(30752), + 31: uint16(30753), + 32: uint16(30754), + 33: uint16(30756), + 34: uint16(30760), + 35: uint16(30762), + 36: uint16(30763), + 37: uint16(30766), + 38: uint16(30767), + 39: uint16(30769), + 40: uint16(30770), + 41: uint16(30771), + 42: uint16(30773), + 43: uint16(30774), + 44: uint16(30781), + 45: uint16(30783), + 46: uint16(30785), + 47: uint16(30786), + 48: uint16(30787), + 49: uint16(30788), + 50: uint16(30790), + 51: uint16(30792), + 52: uint16(30793), + 53: uint16(30794), + 54: uint16(30795), + 55: uint16(30797), + 56: uint16(30799), + 57: uint16(30801), + 58: uint16(30803), + 59: uint16(30804), + 60: uint16(30808), + 61: uint16(30809), + 62: uint16(30810), + 63: uint16(30811), + 64: uint16(30812), + 65: uint16(30814), + 66: uint16(30815), + 67: uint16(30816), + 68: uint16(30817), + 69: uint16(30818), + 70: uint16(30819), + 71: uint16(30820), + 72: uint16(30821), + 73: uint16(30822), + 74: uint16(30823), + 75: uint16(30824), + 76: uint16(30825), + 77: uint16(30831), + 78: uint16(30832), + 79: uint16(30833), + 80: uint16(30834), + 81: uint16(30835), + 82: uint16(30836), + 83: uint16(30837), + 84: uint16(30838), + 85: uint16(30840), + 86: uint16(30841), + 87: uint16(30842), + 88: uint16(30843), + 89: uint16(30845), + 90: uint16(30846), + 91: uint16(30847), + 92: uint16(30848), + 93: uint16(30849), + 94: uint16(30850), + 95: uint16(30851), + 96: uint16(22330), + 97: uint16(23581), + 98: uint16(24120), + 99: uint16(38271), + 100: uint16(20607), + 101: uint16(32928), + 102: uint16(21378), + 103: uint16(25950), + 104: uint16(30021), + 105: uint16(21809), + 106: uint16(20513), + 107: uint16(36229), + 108: uint16(25220), + 109: uint16(38046), + 110: uint16(26397), + 111: uint16(22066), + 112: uint16(28526), + 113: uint16(24034), + 114: uint16(21557), + 115: uint16(28818), + 116: uint16(36710), + 117: uint16(25199), + 118: uint16(25764), + 119: uint16(25507), + 120: uint16(24443), + 121: uint16(28552), + 122: uint16(37108), + 123: uint16(33251), + 124: uint16(36784), + 125: uint16(23576), + 126: uint16(26216), + 127: uint16(24561), + 128: uint16(27785), + 129: uint16(38472), + 130: uint16(36225), + 131: uint16(34924), + 132: uint16(25745), + 133: uint16(31216), + 134: uint16(22478), + 135: uint16(27225), + 136: uint16(25104), + 137: uint16(21576), + 138: uint16(20056), + 139: uint16(31243), + 140: uint16(24809), + 141: uint16(28548), + 142: uint16(35802), + 143: uint16(25215), + 144: uint16(36894), + 145: uint16(39563), + 146: uint16(31204), + 147: uint16(21507), + 148: uint16(30196), + 149: uint16(25345), + 150: uint16(21273), + 151: uint16(27744), + 152: uint16(36831), + 153: uint16(24347), + 154: uint16(39536), + 155: uint16(32827), + 156: uint16(40831), + 157: uint16(20360), + 158: uint16(23610), + 159: uint16(36196), + 160: uint16(32709), + 161: uint16(26021), + 162: uint16(28861), + 163: uint16(20805), + 164: uint16(20914), + 165: uint16(34411), + 166: uint16(23815), + 167: uint16(23456), + 168: uint16(25277), + 169: uint16(37228), + 170: uint16(30068), + 171: uint16(36364), + 172: uint16(31264), + 173: uint16(24833), + 174: uint16(31609), + 175: uint16(20167), + 176: uint16(32504), + 177: uint16(30597), + 178: uint16(19985), + 179: uint16(33261), + 180: uint16(21021), + 181: uint16(20986), + 182: uint16(27249), + 183: uint16(21416), + 184: uint16(36487), + 185: uint16(38148), + 186: uint16(38607), + 187: uint16(28353), + 188: uint16(38500), + 189: uint16(26970), + }, + 51: { + 0: uint16(30852), + 1: uint16(30853), + 2: uint16(30854), + 3: uint16(30856), + 4: uint16(30858), + 5: uint16(30859), + 6: uint16(30863), + 7: uint16(30864), + 8: uint16(30866), + 9: uint16(30868), + 10: uint16(30869), + 11: uint16(30870), + 12: uint16(30873), + 13: uint16(30877), + 14: uint16(30878), + 15: uint16(30880), + 16: uint16(30882), + 17: uint16(30884), + 18: uint16(30886), + 19: uint16(30888), + 20: uint16(30889), + 21: uint16(30890), + 22: uint16(30891), + 23: uint16(30892), + 24: uint16(30893), + 25: uint16(30894), + 26: uint16(30895), + 27: uint16(30901), + 28: uint16(30902), + 29: uint16(30903), + 30: uint16(30904), + 31: uint16(30906), + 32: uint16(30907), + 33: uint16(30908), + 34: uint16(30909), + 35: uint16(30911), + 36: uint16(30912), + 37: uint16(30914), + 38: uint16(30915), + 39: uint16(30916), + 40: uint16(30918), + 41: uint16(30919), + 42: uint16(30920), + 43: uint16(30924), + 44: uint16(30925), + 45: uint16(30926), + 46: uint16(30927), + 47: uint16(30929), + 48: uint16(30930), + 49: uint16(30931), + 50: uint16(30934), + 51: uint16(30935), + 52: uint16(30936), + 53: uint16(30938), + 54: uint16(30939), + 55: uint16(30940), + 56: uint16(30941), + 57: uint16(30942), + 58: uint16(30943), + 59: uint16(30944), + 60: uint16(30945), + 61: uint16(30946), + 62: uint16(30947), + 63: uint16(30948), + 64: uint16(30949), + 65: uint16(30950), + 66: uint16(30951), + 67: uint16(30953), + 68: uint16(30954), + 69: uint16(30955), + 70: uint16(30957), + 71: uint16(30958), + 72: uint16(30959), + 73: uint16(30960), + 74: uint16(30961), + 75: uint16(30963), + 76: uint16(30965), + 77: uint16(30966), + 78: uint16(30968), + 79: uint16(30969), + 80: uint16(30971), + 81: uint16(30972), + 82: uint16(30973), + 83: uint16(30974), + 84: uint16(30975), + 85: uint16(30976), + 86: uint16(30978), + 87: uint16(30979), + 88: uint16(30980), + 89: uint16(30982), + 90: uint16(30983), + 91: uint16(30984), + 92: uint16(30985), + 93: uint16(30986), + 94: uint16(30987), + 95: uint16(30988), + 96: uint16(30784), + 97: uint16(20648), + 98: uint16(30679), + 99: uint16(25616), + 100: uint16(35302), + 101: uint16(22788), + 102: uint16(25571), + 103: uint16(24029), + 104: uint16(31359), + 105: uint16(26941), + 106: uint16(20256), + 107: uint16(33337), + 108: uint16(21912), + 109: uint16(20018), + 110: uint16(30126), + 111: uint16(31383), + 112: uint16(24162), + 113: uint16(24202), + 114: uint16(38383), + 115: uint16(21019), + 116: uint16(21561), + 117: uint16(28810), + 118: uint16(25462), + 119: uint16(38180), + 120: uint16(22402), + 121: uint16(26149), + 122: uint16(26943), + 123: uint16(37255), + 124: uint16(21767), + 125: uint16(28147), + 126: uint16(32431), + 127: uint16(34850), + 128: uint16(25139), + 129: uint16(32496), + 130: uint16(30133), + 131: uint16(33576), + 132: uint16(30913), + 133: uint16(38604), + 134: uint16(36766), + 135: uint16(24904), + 136: uint16(29943), + 137: uint16(35789), + 138: uint16(27492), + 139: uint16(21050), + 140: uint16(36176), + 141: uint16(27425), + 142: uint16(32874), + 143: uint16(33905), + 144: uint16(22257), + 145: uint16(21254), + 146: uint16(20174), + 147: uint16(19995), + 148: uint16(20945), + 149: uint16(31895), + 150: uint16(37259), + 151: uint16(31751), + 152: uint16(20419), + 153: uint16(36479), + 154: uint16(31713), + 155: uint16(31388), + 156: uint16(25703), + 157: uint16(23828), + 158: uint16(20652), + 159: uint16(33030), + 160: uint16(30209), + 161: uint16(31929), + 162: uint16(28140), + 163: uint16(32736), + 164: uint16(26449), + 165: uint16(23384), + 166: uint16(23544), + 167: uint16(30923), + 168: uint16(25774), + 169: uint16(25619), + 170: uint16(25514), + 171: uint16(25387), + 172: uint16(38169), + 173: uint16(25645), + 174: uint16(36798), + 175: uint16(31572), + 176: uint16(30249), + 177: uint16(25171), + 178: uint16(22823), + 179: uint16(21574), + 180: uint16(27513), + 181: uint16(20643), + 182: uint16(25140), + 183: uint16(24102), + 184: uint16(27526), + 185: uint16(20195), + 186: uint16(36151), + 187: uint16(34955), + 188: uint16(24453), + 189: uint16(36910), + }, + 52: { + 0: uint16(30989), + 1: uint16(30990), + 2: uint16(30991), + 3: uint16(30992), + 4: uint16(30993), + 5: uint16(30994), + 6: uint16(30996), + 7: uint16(30997), + 8: uint16(30998), + 9: uint16(30999), + 10: uint16(31000), + 11: uint16(31001), + 12: uint16(31002), + 13: uint16(31003), + 14: uint16(31004), + 15: uint16(31005), + 16: uint16(31007), + 17: uint16(31008), + 18: uint16(31009), + 19: uint16(31010), + 20: uint16(31011), + 21: uint16(31013), + 22: uint16(31014), + 23: uint16(31015), + 24: uint16(31016), + 25: uint16(31017), + 26: uint16(31018), + 27: uint16(31019), + 28: uint16(31020), + 29: uint16(31021), + 30: uint16(31022), + 31: uint16(31023), + 32: uint16(31024), + 33: uint16(31025), + 34: uint16(31026), + 35: uint16(31027), + 36: uint16(31029), + 37: uint16(31030), + 38: uint16(31031), + 39: uint16(31032), + 40: uint16(31033), + 41: uint16(31037), + 42: uint16(31039), + 43: uint16(31042), + 44: uint16(31043), + 45: uint16(31044), + 46: uint16(31045), + 47: uint16(31047), + 48: uint16(31050), + 49: uint16(31051), + 50: uint16(31052), + 51: uint16(31053), + 52: uint16(31054), + 53: uint16(31055), + 54: uint16(31056), + 55: uint16(31057), + 56: uint16(31058), + 57: uint16(31060), + 58: uint16(31061), + 59: uint16(31064), + 60: uint16(31065), + 61: uint16(31073), + 62: uint16(31075), + 63: uint16(31076), + 64: uint16(31078), + 65: uint16(31081), + 66: uint16(31082), + 67: uint16(31083), + 68: uint16(31084), + 69: uint16(31086), + 70: uint16(31088), + 71: uint16(31089), + 72: uint16(31090), + 73: uint16(31091), + 74: uint16(31092), + 75: uint16(31093), + 76: uint16(31094), + 77: uint16(31097), + 78: uint16(31099), + 79: uint16(31100), + 80: uint16(31101), + 81: uint16(31102), + 82: uint16(31103), + 83: uint16(31106), + 84: uint16(31107), + 85: uint16(31110), + 86: uint16(31111), + 87: uint16(31112), + 88: uint16(31113), + 89: uint16(31115), + 90: uint16(31116), + 91: uint16(31117), + 92: uint16(31118), + 93: uint16(31120), + 94: uint16(31121), + 95: uint16(31122), + 96: uint16(24608), + 97: uint16(32829), + 98: uint16(25285), + 99: uint16(20025), + 100: uint16(21333), + 101: uint16(37112), + 102: uint16(25528), + 103: uint16(32966), + 104: uint16(26086), + 105: uint16(27694), + 106: uint16(20294), + 107: uint16(24814), + 108: uint16(28129), + 109: uint16(35806), + 110: uint16(24377), + 111: uint16(34507), + 112: uint16(24403), + 113: uint16(25377), + 114: uint16(20826), + 115: uint16(33633), + 116: uint16(26723), + 117: uint16(20992), + 118: uint16(25443), + 119: uint16(36424), + 120: uint16(20498), + 121: uint16(23707), + 122: uint16(31095), + 123: uint16(23548), + 124: uint16(21040), + 125: uint16(31291), + 126: uint16(24764), + 127: uint16(36947), + 128: uint16(30423), + 129: uint16(24503), + 130: uint16(24471), + 131: uint16(30340), + 132: uint16(36460), + 133: uint16(28783), + 134: uint16(30331), + 135: uint16(31561), + 136: uint16(30634), + 137: uint16(20979), + 138: uint16(37011), + 139: uint16(22564), + 140: uint16(20302), + 141: uint16(28404), + 142: uint16(36842), + 143: uint16(25932), + 144: uint16(31515), + 145: uint16(29380), + 146: uint16(28068), + 147: uint16(32735), + 148: uint16(23265), + 149: uint16(25269), + 150: uint16(24213), + 151: uint16(22320), + 152: uint16(33922), + 153: uint16(31532), + 154: uint16(24093), + 155: uint16(24351), + 156: uint16(36882), + 157: uint16(32532), + 158: uint16(39072), + 159: uint16(25474), + 160: uint16(28359), + 161: uint16(30872), + 162: uint16(28857), + 163: uint16(20856), + 164: uint16(38747), + 165: uint16(22443), + 166: uint16(30005), + 167: uint16(20291), + 168: uint16(30008), + 169: uint16(24215), + 170: uint16(24806), + 171: uint16(22880), + 172: uint16(28096), + 173: uint16(27583), + 174: uint16(30857), + 175: uint16(21500), + 176: uint16(38613), + 177: uint16(20939), + 178: uint16(20993), + 179: uint16(25481), + 180: uint16(21514), + 181: uint16(38035), + 182: uint16(35843), + 183: uint16(36300), + 184: uint16(29241), + 185: uint16(30879), + 186: uint16(34678), + 187: uint16(36845), + 188: uint16(35853), + 189: uint16(21472), + }, + 53: { + 0: uint16(31123), + 1: uint16(31124), + 2: uint16(31125), + 3: uint16(31126), + 4: uint16(31127), + 5: uint16(31128), + 6: uint16(31129), + 7: uint16(31131), + 8: uint16(31132), + 9: uint16(31133), + 10: uint16(31134), + 11: uint16(31135), + 12: uint16(31136), + 13: uint16(31137), + 14: uint16(31138), + 15: uint16(31139), + 16: uint16(31140), + 17: uint16(31141), + 18: uint16(31142), + 19: uint16(31144), + 20: uint16(31145), + 21: uint16(31146), + 22: uint16(31147), + 23: uint16(31148), + 24: uint16(31149), + 25: uint16(31150), + 26: uint16(31151), + 27: uint16(31152), + 28: uint16(31153), + 29: uint16(31154), + 30: uint16(31156), + 31: uint16(31157), + 32: uint16(31158), + 33: uint16(31159), + 34: uint16(31160), + 35: uint16(31164), + 36: uint16(31167), + 37: uint16(31170), + 38: uint16(31172), + 39: uint16(31173), + 40: uint16(31175), + 41: uint16(31176), + 42: uint16(31178), + 43: uint16(31180), + 44: uint16(31182), + 45: uint16(31183), + 46: uint16(31184), + 47: uint16(31187), + 48: uint16(31188), + 49: uint16(31190), + 50: uint16(31191), + 51: uint16(31193), + 52: uint16(31194), + 53: uint16(31195), + 54: uint16(31196), + 55: uint16(31197), + 56: uint16(31198), + 57: uint16(31200), + 58: uint16(31201), + 59: uint16(31202), + 60: uint16(31205), + 61: uint16(31208), + 62: uint16(31210), + 63: uint16(31212), + 64: uint16(31214), + 65: uint16(31217), + 66: uint16(31218), + 67: uint16(31219), + 68: uint16(31220), + 69: uint16(31221), + 70: uint16(31222), + 71: uint16(31223), + 72: uint16(31225), + 73: uint16(31226), + 74: uint16(31228), + 75: uint16(31230), + 76: uint16(31231), + 77: uint16(31233), + 78: uint16(31236), + 79: uint16(31237), + 80: uint16(31239), + 81: uint16(31240), + 82: uint16(31241), + 83: uint16(31242), + 84: uint16(31244), + 85: uint16(31247), + 86: uint16(31248), + 87: uint16(31249), + 88: uint16(31250), + 89: uint16(31251), + 90: uint16(31253), + 91: uint16(31254), + 92: uint16(31256), + 93: uint16(31257), + 94: uint16(31259), + 95: uint16(31260), + 96: uint16(19969), + 97: uint16(30447), + 98: uint16(21486), + 99: uint16(38025), + 100: uint16(39030), + 101: uint16(40718), + 102: uint16(38189), + 103: uint16(23450), + 104: uint16(35746), + 105: uint16(20002), + 106: uint16(19996), + 107: uint16(20908), + 108: uint16(33891), + 109: uint16(25026), + 110: uint16(21160), + 111: uint16(26635), + 112: uint16(20375), + 113: uint16(24683), + 114: uint16(20923), + 115: uint16(27934), + 116: uint16(20828), + 117: uint16(25238), + 118: uint16(26007), + 119: uint16(38497), + 120: uint16(35910), + 121: uint16(36887), + 122: uint16(30168), + 123: uint16(37117), + 124: uint16(30563), + 125: uint16(27602), + 126: uint16(29322), + 127: uint16(29420), + 128: uint16(35835), + 129: uint16(22581), + 130: uint16(30585), + 131: uint16(36172), + 132: uint16(26460), + 133: uint16(38208), + 134: uint16(32922), + 135: uint16(24230), + 136: uint16(28193), + 137: uint16(22930), + 138: uint16(31471), + 139: uint16(30701), + 140: uint16(38203), + 141: uint16(27573), + 142: uint16(26029), + 143: uint16(32526), + 144: uint16(22534), + 145: uint16(20817), + 146: uint16(38431), + 147: uint16(23545), + 148: uint16(22697), + 149: uint16(21544), + 150: uint16(36466), + 151: uint16(25958), + 152: uint16(39039), + 153: uint16(22244), + 154: uint16(38045), + 155: uint16(30462), + 156: uint16(36929), + 157: uint16(25479), + 158: uint16(21702), + 159: uint16(22810), + 160: uint16(22842), + 161: uint16(22427), + 162: uint16(36530), + 163: uint16(26421), + 164: uint16(36346), + 165: uint16(33333), + 166: uint16(21057), + 167: uint16(24816), + 168: uint16(22549), + 169: uint16(34558), + 170: uint16(23784), + 171: uint16(40517), + 172: uint16(20420), + 173: uint16(39069), + 174: uint16(35769), + 175: uint16(23077), + 176: uint16(24694), + 177: uint16(21380), + 178: uint16(25212), + 179: uint16(36943), + 180: uint16(37122), + 181: uint16(39295), + 182: uint16(24681), + 183: uint16(32780), + 184: uint16(20799), + 185: uint16(32819), + 186: uint16(23572), + 187: uint16(39285), + 188: uint16(27953), + 189: uint16(20108), + }, + 54: { + 0: uint16(31261), + 1: uint16(31263), + 2: uint16(31265), + 3: uint16(31266), + 4: uint16(31268), + 5: uint16(31269), + 6: uint16(31270), + 7: uint16(31271), + 8: uint16(31272), + 9: uint16(31273), + 10: uint16(31274), + 11: uint16(31275), + 12: uint16(31276), + 13: uint16(31277), + 14: uint16(31278), + 15: uint16(31279), + 16: uint16(31280), + 17: uint16(31281), + 18: uint16(31282), + 19: uint16(31284), + 20: uint16(31285), + 21: uint16(31286), + 22: uint16(31288), + 23: uint16(31290), + 24: uint16(31294), + 25: uint16(31296), + 26: uint16(31297), + 27: uint16(31298), + 28: uint16(31299), + 29: uint16(31300), + 30: uint16(31301), + 31: uint16(31303), + 32: uint16(31304), + 33: uint16(31305), + 34: uint16(31306), + 35: uint16(31307), + 36: uint16(31308), + 37: uint16(31309), + 38: uint16(31310), + 39: uint16(31311), + 40: uint16(31312), + 41: uint16(31314), + 42: uint16(31315), + 43: uint16(31316), + 44: uint16(31317), + 45: uint16(31318), + 46: uint16(31320), + 47: uint16(31321), + 48: uint16(31322), + 49: uint16(31323), + 50: uint16(31324), + 51: uint16(31325), + 52: uint16(31326), + 53: uint16(31327), + 54: uint16(31328), + 55: uint16(31329), + 56: uint16(31330), + 57: uint16(31331), + 58: uint16(31332), + 59: uint16(31333), + 60: uint16(31334), + 61: uint16(31335), + 62: uint16(31336), + 63: uint16(31337), + 64: uint16(31338), + 65: uint16(31339), + 66: uint16(31340), + 67: uint16(31341), + 68: uint16(31342), + 69: uint16(31343), + 70: uint16(31345), + 71: uint16(31346), + 72: uint16(31347), + 73: uint16(31349), + 74: uint16(31355), + 75: uint16(31356), + 76: uint16(31357), + 77: uint16(31358), + 78: uint16(31362), + 79: uint16(31365), + 80: uint16(31367), + 81: uint16(31369), + 82: uint16(31370), + 83: uint16(31371), + 84: uint16(31372), + 85: uint16(31374), + 86: uint16(31375), + 87: uint16(31376), + 88: uint16(31379), + 89: uint16(31380), + 90: uint16(31385), + 91: uint16(31386), + 92: uint16(31387), + 93: uint16(31390), + 94: uint16(31393), + 95: uint16(31394), + 96: uint16(36144), + 97: uint16(21457), + 98: uint16(32602), + 99: uint16(31567), + 100: uint16(20240), + 101: uint16(20047), + 102: uint16(38400), + 103: uint16(27861), + 104: uint16(29648), + 105: uint16(34281), + 106: uint16(24070), + 107: uint16(30058), + 108: uint16(32763), + 109: uint16(27146), + 110: uint16(30718), + 111: uint16(38034), + 112: uint16(32321), + 113: uint16(20961), + 114: uint16(28902), + 115: uint16(21453), + 116: uint16(36820), + 117: uint16(33539), + 118: uint16(36137), + 119: uint16(29359), + 120: uint16(39277), + 121: uint16(27867), + 122: uint16(22346), + 123: uint16(33459), + 124: uint16(26041), + 125: uint16(32938), + 126: uint16(25151), + 127: uint16(38450), + 128: uint16(22952), + 129: uint16(20223), + 130: uint16(35775), + 131: uint16(32442), + 132: uint16(25918), + 133: uint16(33778), + 134: uint16(38750), + 135: uint16(21857), + 136: uint16(39134), + 137: uint16(32933), + 138: uint16(21290), + 139: uint16(35837), + 140: uint16(21536), + 141: uint16(32954), + 142: uint16(24223), + 143: uint16(27832), + 144: uint16(36153), + 145: uint16(33452), + 146: uint16(37210), + 147: uint16(21545), + 148: uint16(27675), + 149: uint16(20998), + 150: uint16(32439), + 151: uint16(22367), + 152: uint16(28954), + 153: uint16(27774), + 154: uint16(31881), + 155: uint16(22859), + 156: uint16(20221), + 157: uint16(24575), + 158: uint16(24868), + 159: uint16(31914), + 160: uint16(20016), + 161: uint16(23553), + 162: uint16(26539), + 163: uint16(34562), + 164: uint16(23792), + 165: uint16(38155), + 166: uint16(39118), + 167: uint16(30127), + 168: uint16(28925), + 169: uint16(36898), + 170: uint16(20911), + 171: uint16(32541), + 172: uint16(35773), + 173: uint16(22857), + 174: uint16(20964), + 175: uint16(20315), + 176: uint16(21542), + 177: uint16(22827), + 178: uint16(25975), + 179: uint16(32932), + 180: uint16(23413), + 181: uint16(25206), + 182: uint16(25282), + 183: uint16(36752), + 184: uint16(24133), + 185: uint16(27679), + 186: uint16(31526), + 187: uint16(20239), + 188: uint16(20440), + 189: uint16(26381), + }, + 55: { + 0: uint16(31395), + 1: uint16(31396), + 2: uint16(31399), + 3: uint16(31401), + 4: uint16(31402), + 5: uint16(31403), + 6: uint16(31406), + 7: uint16(31407), + 8: uint16(31408), + 9: uint16(31409), + 10: uint16(31410), + 11: uint16(31412), + 12: uint16(31413), + 13: uint16(31414), + 14: uint16(31415), + 15: uint16(31416), + 16: uint16(31417), + 17: uint16(31418), + 18: uint16(31419), + 19: uint16(31420), + 20: uint16(31421), + 21: uint16(31422), + 22: uint16(31424), + 23: uint16(31425), + 24: uint16(31426), + 25: uint16(31427), + 26: uint16(31428), + 27: uint16(31429), + 28: uint16(31430), + 29: uint16(31431), + 30: uint16(31432), + 31: uint16(31433), + 32: uint16(31434), + 33: uint16(31436), + 34: uint16(31437), + 35: uint16(31438), + 36: uint16(31439), + 37: uint16(31440), + 38: uint16(31441), + 39: uint16(31442), + 40: uint16(31443), + 41: uint16(31444), + 42: uint16(31445), + 43: uint16(31447), + 44: uint16(31448), + 45: uint16(31450), + 46: uint16(31451), + 47: uint16(31452), + 48: uint16(31453), + 49: uint16(31457), + 50: uint16(31458), + 51: uint16(31460), + 52: uint16(31463), + 53: uint16(31464), + 54: uint16(31465), + 55: uint16(31466), + 56: uint16(31467), + 57: uint16(31468), + 58: uint16(31470), + 59: uint16(31472), + 60: uint16(31473), + 61: uint16(31474), + 62: uint16(31475), + 63: uint16(31476), + 64: uint16(31477), + 65: uint16(31478), + 66: uint16(31479), + 67: uint16(31480), + 68: uint16(31483), + 69: uint16(31484), + 70: uint16(31486), + 71: uint16(31488), + 72: uint16(31489), + 73: uint16(31490), + 74: uint16(31493), + 75: uint16(31495), + 76: uint16(31497), + 77: uint16(31500), + 78: uint16(31501), + 79: uint16(31502), + 80: uint16(31504), + 81: uint16(31506), + 82: uint16(31507), + 83: uint16(31510), + 84: uint16(31511), + 85: uint16(31512), + 86: uint16(31514), + 87: uint16(31516), + 88: uint16(31517), + 89: uint16(31519), + 90: uint16(31521), + 91: uint16(31522), + 92: uint16(31523), + 93: uint16(31527), + 94: uint16(31529), + 95: uint16(31533), + 96: uint16(28014), + 97: uint16(28074), + 98: uint16(31119), + 99: uint16(34993), + 100: uint16(24343), + 101: uint16(29995), + 102: uint16(25242), + 103: uint16(36741), + 104: uint16(20463), + 105: uint16(37340), + 106: uint16(26023), + 107: uint16(33071), + 108: uint16(33105), + 109: uint16(24220), + 110: uint16(33104), + 111: uint16(36212), + 112: uint16(21103), + 113: uint16(35206), + 114: uint16(36171), + 115: uint16(22797), + 116: uint16(20613), + 117: uint16(20184), + 118: uint16(38428), + 119: uint16(29238), + 120: uint16(33145), + 121: uint16(36127), + 122: uint16(23500), + 123: uint16(35747), + 124: uint16(38468), + 125: uint16(22919), + 126: uint16(32538), + 127: uint16(21648), + 128: uint16(22134), + 129: uint16(22030), + 130: uint16(35813), + 131: uint16(25913), + 132: uint16(27010), + 133: uint16(38041), + 134: uint16(30422), + 135: uint16(28297), + 136: uint16(24178), + 137: uint16(29976), + 138: uint16(26438), + 139: uint16(26577), + 140: uint16(31487), + 141: uint16(32925), + 142: uint16(36214), + 143: uint16(24863), + 144: uint16(31174), + 145: uint16(25954), + 146: uint16(36195), + 147: uint16(20872), + 148: uint16(21018), + 149: uint16(38050), + 150: uint16(32568), + 151: uint16(32923), + 152: uint16(32434), + 153: uint16(23703), + 154: uint16(28207), + 155: uint16(26464), + 156: uint16(31705), + 157: uint16(30347), + 158: uint16(39640), + 159: uint16(33167), + 160: uint16(32660), + 161: uint16(31957), + 162: uint16(25630), + 163: uint16(38224), + 164: uint16(31295), + 165: uint16(21578), + 166: uint16(21733), + 167: uint16(27468), + 168: uint16(25601), + 169: uint16(25096), + 170: uint16(40509), + 171: uint16(33011), + 172: uint16(30105), + 173: uint16(21106), + 174: uint16(38761), + 175: uint16(33883), + 176: uint16(26684), + 177: uint16(34532), + 178: uint16(38401), + 179: uint16(38548), + 180: uint16(38124), + 181: uint16(20010), + 182: uint16(21508), + 183: uint16(32473), + 184: uint16(26681), + 185: uint16(36319), + 186: uint16(32789), + 187: uint16(26356), + 188: uint16(24218), + 189: uint16(32697), + }, + 56: { + 0: uint16(31535), + 1: uint16(31536), + 2: uint16(31538), + 3: uint16(31540), + 4: uint16(31541), + 5: uint16(31542), + 6: uint16(31543), + 7: uint16(31545), + 8: uint16(31547), + 9: uint16(31549), + 10: uint16(31551), + 11: uint16(31552), + 12: uint16(31553), + 13: uint16(31554), + 14: uint16(31555), + 15: uint16(31556), + 16: uint16(31558), + 17: uint16(31560), + 18: uint16(31562), + 19: uint16(31565), + 20: uint16(31566), + 21: uint16(31571), + 22: uint16(31573), + 23: uint16(31575), + 24: uint16(31577), + 25: uint16(31580), + 26: uint16(31582), + 27: uint16(31583), + 28: uint16(31585), + 29: uint16(31587), + 30: uint16(31588), + 31: uint16(31589), + 32: uint16(31590), + 33: uint16(31591), + 34: uint16(31592), + 35: uint16(31593), + 36: uint16(31594), + 37: uint16(31595), + 38: uint16(31596), + 39: uint16(31597), + 40: uint16(31599), + 41: uint16(31600), + 42: uint16(31603), + 43: uint16(31604), + 44: uint16(31606), + 45: uint16(31608), + 46: uint16(31610), + 47: uint16(31612), + 48: uint16(31613), + 49: uint16(31615), + 50: uint16(31617), + 51: uint16(31618), + 52: uint16(31619), + 53: uint16(31620), + 54: uint16(31622), + 55: uint16(31623), + 56: uint16(31624), + 57: uint16(31625), + 58: uint16(31626), + 59: uint16(31627), + 60: uint16(31628), + 61: uint16(31630), + 62: uint16(31631), + 63: uint16(31633), + 64: uint16(31634), + 65: uint16(31635), + 66: uint16(31638), + 67: uint16(31640), + 68: uint16(31641), + 69: uint16(31642), + 70: uint16(31643), + 71: uint16(31646), + 72: uint16(31647), + 73: uint16(31648), + 74: uint16(31651), + 75: uint16(31652), + 76: uint16(31653), + 77: uint16(31662), + 78: uint16(31663), + 79: uint16(31664), + 80: uint16(31666), + 81: uint16(31667), + 82: uint16(31669), + 83: uint16(31670), + 84: uint16(31671), + 85: uint16(31673), + 86: uint16(31674), + 87: uint16(31675), + 88: uint16(31676), + 89: uint16(31677), + 90: uint16(31678), + 91: uint16(31679), + 92: uint16(31680), + 93: uint16(31682), + 94: uint16(31683), + 95: uint16(31684), + 96: uint16(22466), + 97: uint16(32831), + 98: uint16(26775), + 99: uint16(24037), + 100: uint16(25915), + 101: uint16(21151), + 102: uint16(24685), + 103: uint16(40858), + 104: uint16(20379), + 105: uint16(36524), + 106: uint16(20844), + 107: uint16(23467), + 108: uint16(24339), + 109: uint16(24041), + 110: uint16(27742), + 111: uint16(25329), + 112: uint16(36129), + 113: uint16(20849), + 114: uint16(38057), + 115: uint16(21246), + 116: uint16(27807), + 117: uint16(33503), + 118: uint16(29399), + 119: uint16(22434), + 120: uint16(26500), + 121: uint16(36141), + 122: uint16(22815), + 123: uint16(36764), + 124: uint16(33735), + 125: uint16(21653), + 126: uint16(31629), + 127: uint16(20272), + 128: uint16(27837), + 129: uint16(23396), + 130: uint16(22993), + 131: uint16(40723), + 132: uint16(21476), + 133: uint16(34506), + 134: uint16(39592), + 135: uint16(35895), + 136: uint16(32929), + 137: uint16(25925), + 138: uint16(39038), + 139: uint16(22266), + 140: uint16(38599), + 141: uint16(21038), + 142: uint16(29916), + 143: uint16(21072), + 144: uint16(23521), + 145: uint16(25346), + 146: uint16(35074), + 147: uint16(20054), + 148: uint16(25296), + 149: uint16(24618), + 150: uint16(26874), + 151: uint16(20851), + 152: uint16(23448), + 153: uint16(20896), + 154: uint16(35266), + 155: uint16(31649), + 156: uint16(39302), + 157: uint16(32592), + 158: uint16(24815), + 159: uint16(28748), + 160: uint16(36143), + 161: uint16(20809), + 162: uint16(24191), + 163: uint16(36891), + 164: uint16(29808), + 165: uint16(35268), + 166: uint16(22317), + 167: uint16(30789), + 168: uint16(24402), + 169: uint16(40863), + 170: uint16(38394), + 171: uint16(36712), + 172: uint16(39740), + 173: uint16(35809), + 174: uint16(30328), + 175: uint16(26690), + 176: uint16(26588), + 177: uint16(36330), + 178: uint16(36149), + 179: uint16(21053), + 180: uint16(36746), + 181: uint16(28378), + 182: uint16(26829), + 183: uint16(38149), + 184: uint16(37101), + 185: uint16(22269), + 186: uint16(26524), + 187: uint16(35065), + 188: uint16(36807), + 189: uint16(21704), + }, + 57: { + 0: uint16(31685), + 1: uint16(31688), + 2: uint16(31689), + 3: uint16(31690), + 4: uint16(31691), + 5: uint16(31693), + 6: uint16(31694), + 7: uint16(31695), + 8: uint16(31696), + 9: uint16(31698), + 10: uint16(31700), + 11: uint16(31701), + 12: uint16(31702), + 13: uint16(31703), + 14: uint16(31704), + 15: uint16(31707), + 16: uint16(31708), + 17: uint16(31710), + 18: uint16(31711), + 19: uint16(31712), + 20: uint16(31714), + 21: uint16(31715), + 22: uint16(31716), + 23: uint16(31719), + 24: uint16(31720), + 25: uint16(31721), + 26: uint16(31723), + 27: uint16(31724), + 28: uint16(31725), + 29: uint16(31727), + 30: uint16(31728), + 31: uint16(31730), + 32: uint16(31731), + 33: uint16(31732), + 34: uint16(31733), + 35: uint16(31734), + 36: uint16(31736), + 37: uint16(31737), + 38: uint16(31738), + 39: uint16(31739), + 40: uint16(31741), + 41: uint16(31743), + 42: uint16(31744), + 43: uint16(31745), + 44: uint16(31746), + 45: uint16(31747), + 46: uint16(31748), + 47: uint16(31749), + 48: uint16(31750), + 49: uint16(31752), + 50: uint16(31753), + 51: uint16(31754), + 52: uint16(31757), + 53: uint16(31758), + 54: uint16(31760), + 55: uint16(31761), + 56: uint16(31762), + 57: uint16(31763), + 58: uint16(31764), + 59: uint16(31765), + 60: uint16(31767), + 61: uint16(31768), + 62: uint16(31769), + 63: uint16(31770), + 64: uint16(31771), + 65: uint16(31772), + 66: uint16(31773), + 67: uint16(31774), + 68: uint16(31776), + 69: uint16(31777), + 70: uint16(31778), + 71: uint16(31779), + 72: uint16(31780), + 73: uint16(31781), + 74: uint16(31784), + 75: uint16(31785), + 76: uint16(31787), + 77: uint16(31788), + 78: uint16(31789), + 79: uint16(31790), + 80: uint16(31791), + 81: uint16(31792), + 82: uint16(31793), + 83: uint16(31794), + 84: uint16(31795), + 85: uint16(31796), + 86: uint16(31797), + 87: uint16(31798), + 88: uint16(31799), + 89: uint16(31801), + 90: uint16(31802), + 91: uint16(31803), + 92: uint16(31804), + 93: uint16(31805), + 94: uint16(31806), + 95: uint16(31810), + 96: uint16(39608), + 97: uint16(23401), + 98: uint16(28023), + 99: uint16(27686), + 100: uint16(20133), + 101: uint16(23475), + 102: uint16(39559), + 103: uint16(37219), + 104: uint16(25000), + 105: uint16(37039), + 106: uint16(38889), + 107: uint16(21547), + 108: uint16(28085), + 109: uint16(23506), + 110: uint16(20989), + 111: uint16(21898), + 112: uint16(32597), + 113: uint16(32752), + 114: uint16(25788), + 115: uint16(25421), + 116: uint16(26097), + 117: uint16(25022), + 118: uint16(24717), + 119: uint16(28938), + 120: uint16(27735), + 121: uint16(27721), + 122: uint16(22831), + 123: uint16(26477), + 124: uint16(33322), + 125: uint16(22741), + 126: uint16(22158), + 127: uint16(35946), + 128: uint16(27627), + 129: uint16(37085), + 130: uint16(22909), + 131: uint16(32791), + 132: uint16(21495), + 133: uint16(28009), + 134: uint16(21621), + 135: uint16(21917), + 136: uint16(33655), + 137: uint16(33743), + 138: uint16(26680), + 139: uint16(31166), + 140: uint16(21644), + 141: uint16(20309), + 142: uint16(21512), + 143: uint16(30418), + 144: uint16(35977), + 145: uint16(38402), + 146: uint16(27827), + 147: uint16(28088), + 148: uint16(36203), + 149: uint16(35088), + 150: uint16(40548), + 151: uint16(36154), + 152: uint16(22079), + 153: uint16(40657), + 154: uint16(30165), + 155: uint16(24456), + 156: uint16(29408), + 157: uint16(24680), + 158: uint16(21756), + 159: uint16(20136), + 160: uint16(27178), + 161: uint16(34913), + 162: uint16(24658), + 163: uint16(36720), + 164: uint16(21700), + 165: uint16(28888), + 166: uint16(34425), + 167: uint16(40511), + 168: uint16(27946), + 169: uint16(23439), + 170: uint16(24344), + 171: uint16(32418), + 172: uint16(21897), + 173: uint16(20399), + 174: uint16(29492), + 175: uint16(21564), + 176: uint16(21402), + 177: uint16(20505), + 178: uint16(21518), + 179: uint16(21628), + 180: uint16(20046), + 181: uint16(24573), + 182: uint16(29786), + 183: uint16(22774), + 184: uint16(33899), + 185: uint16(32993), + 186: uint16(34676), + 187: uint16(29392), + 188: uint16(31946), + 189: uint16(28246), + }, + 58: { + 0: uint16(31811), + 1: uint16(31812), + 2: uint16(31813), + 3: uint16(31814), + 4: uint16(31815), + 5: uint16(31816), + 6: uint16(31817), + 7: uint16(31818), + 8: uint16(31819), + 9: uint16(31820), + 10: uint16(31822), + 11: uint16(31823), + 12: uint16(31824), + 13: uint16(31825), + 14: uint16(31826), + 15: uint16(31827), + 16: uint16(31828), + 17: uint16(31829), + 18: uint16(31830), + 19: uint16(31831), + 20: uint16(31832), + 21: uint16(31833), + 22: uint16(31834), + 23: uint16(31835), + 24: uint16(31836), + 25: uint16(31837), + 26: uint16(31838), + 27: uint16(31839), + 28: uint16(31840), + 29: uint16(31841), + 30: uint16(31842), + 31: uint16(31843), + 32: uint16(31844), + 33: uint16(31845), + 34: uint16(31846), + 35: uint16(31847), + 36: uint16(31848), + 37: uint16(31849), + 38: uint16(31850), + 39: uint16(31851), + 40: uint16(31852), + 41: uint16(31853), + 42: uint16(31854), + 43: uint16(31855), + 44: uint16(31856), + 45: uint16(31857), + 46: uint16(31858), + 47: uint16(31861), + 48: uint16(31862), + 49: uint16(31863), + 50: uint16(31864), + 51: uint16(31865), + 52: uint16(31866), + 53: uint16(31870), + 54: uint16(31871), + 55: uint16(31872), + 56: uint16(31873), + 57: uint16(31874), + 58: uint16(31875), + 59: uint16(31876), + 60: uint16(31877), + 61: uint16(31878), + 62: uint16(31879), + 63: uint16(31880), + 64: uint16(31882), + 65: uint16(31883), + 66: uint16(31884), + 67: uint16(31885), + 68: uint16(31886), + 69: uint16(31887), + 70: uint16(31888), + 71: uint16(31891), + 72: uint16(31892), + 73: uint16(31894), + 74: uint16(31897), + 75: uint16(31898), + 76: uint16(31899), + 77: uint16(31904), + 78: uint16(31905), + 79: uint16(31907), + 80: uint16(31910), + 81: uint16(31911), + 82: uint16(31912), + 83: uint16(31913), + 84: uint16(31915), + 85: uint16(31916), + 86: uint16(31917), + 87: uint16(31919), + 88: uint16(31920), + 89: uint16(31924), + 90: uint16(31925), + 91: uint16(31926), + 92: uint16(31927), + 93: uint16(31928), + 94: uint16(31930), + 95: uint16(31931), + 96: uint16(24359), + 97: uint16(34382), + 98: uint16(21804), + 99: uint16(25252), + 100: uint16(20114), + 101: uint16(27818), + 102: uint16(25143), + 103: uint16(33457), + 104: uint16(21719), + 105: uint16(21326), + 106: uint16(29502), + 107: uint16(28369), + 108: uint16(30011), + 109: uint16(21010), + 110: uint16(21270), + 111: uint16(35805), + 112: uint16(27088), + 113: uint16(24458), + 114: uint16(24576), + 115: uint16(28142), + 116: uint16(22351), + 117: uint16(27426), + 118: uint16(29615), + 119: uint16(26707), + 120: uint16(36824), + 121: uint16(32531), + 122: uint16(25442), + 123: uint16(24739), + 124: uint16(21796), + 125: uint16(30186), + 126: uint16(35938), + 127: uint16(28949), + 128: uint16(28067), + 129: uint16(23462), + 130: uint16(24187), + 131: uint16(33618), + 132: uint16(24908), + 133: uint16(40644), + 134: uint16(30970), + 135: uint16(34647), + 136: uint16(31783), + 137: uint16(30343), + 138: uint16(20976), + 139: uint16(24822), + 140: uint16(29004), + 141: uint16(26179), + 142: uint16(24140), + 143: uint16(24653), + 144: uint16(35854), + 145: uint16(28784), + 146: uint16(25381), + 147: uint16(36745), + 148: uint16(24509), + 149: uint16(24674), + 150: uint16(34516), + 151: uint16(22238), + 152: uint16(27585), + 153: uint16(24724), + 154: uint16(24935), + 155: uint16(21321), + 156: uint16(24800), + 157: uint16(26214), + 158: uint16(36159), + 159: uint16(31229), + 160: uint16(20250), + 161: uint16(28905), + 162: uint16(27719), + 163: uint16(35763), + 164: uint16(35826), + 165: uint16(32472), + 166: uint16(33636), + 167: uint16(26127), + 168: uint16(23130), + 169: uint16(39746), + 170: uint16(27985), + 171: uint16(28151), + 172: uint16(35905), + 173: uint16(27963), + 174: uint16(20249), + 175: uint16(28779), + 176: uint16(33719), + 177: uint16(25110), + 178: uint16(24785), + 179: uint16(38669), + 180: uint16(36135), + 181: uint16(31096), + 182: uint16(20987), + 183: uint16(22334), + 184: uint16(22522), + 185: uint16(26426), + 186: uint16(30072), + 187: uint16(31293), + 188: uint16(31215), + 189: uint16(31637), + }, + 59: { + 0: uint16(31935), + 1: uint16(31936), + 2: uint16(31938), + 3: uint16(31939), + 4: uint16(31940), + 5: uint16(31942), + 6: uint16(31945), + 7: uint16(31947), + 8: uint16(31950), + 9: uint16(31951), + 10: uint16(31952), + 11: uint16(31953), + 12: uint16(31954), + 13: uint16(31955), + 14: uint16(31956), + 15: uint16(31960), + 16: uint16(31962), + 17: uint16(31963), + 18: uint16(31965), + 19: uint16(31966), + 20: uint16(31969), + 21: uint16(31970), + 22: uint16(31971), + 23: uint16(31972), + 24: uint16(31973), + 25: uint16(31974), + 26: uint16(31975), + 27: uint16(31977), + 28: uint16(31978), + 29: uint16(31979), + 30: uint16(31980), + 31: uint16(31981), + 32: uint16(31982), + 33: uint16(31984), + 34: uint16(31985), + 35: uint16(31986), + 36: uint16(31987), + 37: uint16(31988), + 38: uint16(31989), + 39: uint16(31990), + 40: uint16(31991), + 41: uint16(31993), + 42: uint16(31994), + 43: uint16(31996), + 44: uint16(31997), + 45: uint16(31998), + 46: uint16(31999), + 47: uint16(32000), + 48: uint16(32001), + 49: uint16(32002), + 50: uint16(32003), + 51: uint16(32004), + 52: uint16(32005), + 53: uint16(32006), + 54: uint16(32007), + 55: uint16(32008), + 56: uint16(32009), + 57: uint16(32011), + 58: uint16(32012), + 59: uint16(32013), + 60: uint16(32014), + 61: uint16(32015), + 62: uint16(32016), + 63: uint16(32017), + 64: uint16(32018), + 65: uint16(32019), + 66: uint16(32020), + 67: uint16(32021), + 68: uint16(32022), + 69: uint16(32023), + 70: uint16(32024), + 71: uint16(32025), + 72: uint16(32026), + 73: uint16(32027), + 74: uint16(32028), + 75: uint16(32029), + 76: uint16(32030), + 77: uint16(32031), + 78: uint16(32033), + 79: uint16(32035), + 80: uint16(32036), + 81: uint16(32037), + 82: uint16(32038), + 83: uint16(32040), + 84: uint16(32041), + 85: uint16(32042), + 86: uint16(32044), + 87: uint16(32045), + 88: uint16(32046), + 89: uint16(32048), + 90: uint16(32049), + 91: uint16(32050), + 92: uint16(32051), + 93: uint16(32052), + 94: uint16(32053), + 95: uint16(32054), + 96: uint16(32908), + 97: uint16(39269), + 98: uint16(36857), + 99: uint16(28608), + 100: uint16(35749), + 101: uint16(40481), + 102: uint16(23020), + 103: uint16(32489), + 104: uint16(32521), + 105: uint16(21513), + 106: uint16(26497), + 107: uint16(26840), + 108: uint16(36753), + 109: uint16(31821), + 110: uint16(38598), + 111: uint16(21450), + 112: uint16(24613), + 113: uint16(30142), + 114: uint16(27762), + 115: uint16(21363), + 116: uint16(23241), + 117: uint16(32423), + 118: uint16(25380), + 119: uint16(20960), + 120: uint16(33034), + 121: uint16(24049), + 122: uint16(34015), + 123: uint16(25216), + 124: uint16(20864), + 125: uint16(23395), + 126: uint16(20238), + 127: uint16(31085), + 128: uint16(21058), + 129: uint16(24760), + 130: uint16(27982), + 131: uint16(23492), + 132: uint16(23490), + 133: uint16(35745), + 134: uint16(35760), + 135: uint16(26082), + 136: uint16(24524), + 137: uint16(38469), + 138: uint16(22931), + 139: uint16(32487), + 140: uint16(32426), + 141: uint16(22025), + 142: uint16(26551), + 143: uint16(22841), + 144: uint16(20339), + 145: uint16(23478), + 146: uint16(21152), + 147: uint16(33626), + 148: uint16(39050), + 149: uint16(36158), + 150: uint16(30002), + 151: uint16(38078), + 152: uint16(20551), + 153: uint16(31292), + 154: uint16(20215), + 155: uint16(26550), + 156: uint16(39550), + 157: uint16(23233), + 158: uint16(27516), + 159: uint16(30417), + 160: uint16(22362), + 161: uint16(23574), + 162: uint16(31546), + 163: uint16(38388), + 164: uint16(29006), + 165: uint16(20860), + 166: uint16(32937), + 167: uint16(33392), + 168: uint16(22904), + 169: uint16(32516), + 170: uint16(33575), + 171: uint16(26816), + 172: uint16(26604), + 173: uint16(30897), + 174: uint16(30839), + 175: uint16(25315), + 176: uint16(25441), + 177: uint16(31616), + 178: uint16(20461), + 179: uint16(21098), + 180: uint16(20943), + 181: uint16(33616), + 182: uint16(27099), + 183: uint16(37492), + 184: uint16(36341), + 185: uint16(36145), + 186: uint16(35265), + 187: uint16(38190), + 188: uint16(31661), + 189: uint16(20214), + }, + 60: { + 0: uint16(32055), + 1: uint16(32056), + 2: uint16(32057), + 3: uint16(32058), + 4: uint16(32059), + 5: uint16(32060), + 6: uint16(32061), + 7: uint16(32062), + 8: uint16(32063), + 9: uint16(32064), + 10: uint16(32065), + 11: uint16(32066), + 12: uint16(32067), + 13: uint16(32068), + 14: uint16(32069), + 15: uint16(32070), + 16: uint16(32071), + 17: uint16(32072), + 18: uint16(32073), + 19: uint16(32074), + 20: uint16(32075), + 21: uint16(32076), + 22: uint16(32077), + 23: uint16(32078), + 24: uint16(32079), + 25: uint16(32080), + 26: uint16(32081), + 27: uint16(32082), + 28: uint16(32083), + 29: uint16(32084), + 30: uint16(32085), + 31: uint16(32086), + 32: uint16(32087), + 33: uint16(32088), + 34: uint16(32089), + 35: uint16(32090), + 36: uint16(32091), + 37: uint16(32092), + 38: uint16(32093), + 39: uint16(32094), + 40: uint16(32095), + 41: uint16(32096), + 42: uint16(32097), + 43: uint16(32098), + 44: uint16(32099), + 45: uint16(32100), + 46: uint16(32101), + 47: uint16(32102), + 48: uint16(32103), + 49: uint16(32104), + 50: uint16(32105), + 51: uint16(32106), + 52: uint16(32107), + 53: uint16(32108), + 54: uint16(32109), + 55: uint16(32111), + 56: uint16(32112), + 57: uint16(32113), + 58: uint16(32114), + 59: uint16(32115), + 60: uint16(32116), + 61: uint16(32117), + 62: uint16(32118), + 63: uint16(32120), + 64: uint16(32121), + 65: uint16(32122), + 66: uint16(32123), + 67: uint16(32124), + 68: uint16(32125), + 69: uint16(32126), + 70: uint16(32127), + 71: uint16(32128), + 72: uint16(32129), + 73: uint16(32130), + 74: uint16(32131), + 75: uint16(32132), + 76: uint16(32133), + 77: uint16(32134), + 78: uint16(32135), + 79: uint16(32136), + 80: uint16(32137), + 81: uint16(32138), + 82: uint16(32139), + 83: uint16(32140), + 84: uint16(32141), + 85: uint16(32142), + 86: uint16(32143), + 87: uint16(32144), + 88: uint16(32145), + 89: uint16(32146), + 90: uint16(32147), + 91: uint16(32148), + 92: uint16(32149), + 93: uint16(32150), + 94: uint16(32151), + 95: uint16(32152), + 96: uint16(20581), + 97: uint16(33328), + 98: uint16(21073), + 99: uint16(39279), + 100: uint16(28176), + 101: uint16(28293), + 102: uint16(28071), + 103: uint16(24314), + 104: uint16(20725), + 105: uint16(23004), + 106: uint16(23558), + 107: uint16(27974), + 108: uint16(27743), + 109: uint16(30086), + 110: uint16(33931), + 111: uint16(26728), + 112: uint16(22870), + 113: uint16(35762), + 114: uint16(21280), + 115: uint16(37233), + 116: uint16(38477), + 117: uint16(34121), + 118: uint16(26898), + 119: uint16(30977), + 120: uint16(28966), + 121: uint16(33014), + 122: uint16(20132), + 123: uint16(37066), + 124: uint16(27975), + 125: uint16(39556), + 126: uint16(23047), + 127: uint16(22204), + 128: uint16(25605), + 129: uint16(38128), + 130: uint16(30699), + 131: uint16(20389), + 132: uint16(33050), + 133: uint16(29409), + 134: uint16(35282), + 135: uint16(39290), + 136: uint16(32564), + 137: uint16(32478), + 138: uint16(21119), + 139: uint16(25945), + 140: uint16(37237), + 141: uint16(36735), + 142: uint16(36739), + 143: uint16(21483), + 144: uint16(31382), + 145: uint16(25581), + 146: uint16(25509), + 147: uint16(30342), + 148: uint16(31224), + 149: uint16(34903), + 150: uint16(38454), + 151: uint16(25130), + 152: uint16(21163), + 153: uint16(33410), + 154: uint16(26708), + 155: uint16(26480), + 156: uint16(25463), + 157: uint16(30571), + 158: uint16(31469), + 159: uint16(27905), + 160: uint16(32467), + 161: uint16(35299), + 162: uint16(22992), + 163: uint16(25106), + 164: uint16(34249), + 165: uint16(33445), + 166: uint16(30028), + 167: uint16(20511), + 168: uint16(20171), + 169: uint16(30117), + 170: uint16(35819), + 171: uint16(23626), + 172: uint16(24062), + 173: uint16(31563), + 174: uint16(26020), + 175: uint16(37329), + 176: uint16(20170), + 177: uint16(27941), + 178: uint16(35167), + 179: uint16(32039), + 180: uint16(38182), + 181: uint16(20165), + 182: uint16(35880), + 183: uint16(36827), + 184: uint16(38771), + 185: uint16(26187), + 186: uint16(31105), + 187: uint16(36817), + 188: uint16(28908), + 189: uint16(28024), + }, + 61: { + 0: uint16(32153), + 1: uint16(32154), + 2: uint16(32155), + 3: uint16(32156), + 4: uint16(32157), + 5: uint16(32158), + 6: uint16(32159), + 7: uint16(32160), + 8: uint16(32161), + 9: uint16(32162), + 10: uint16(32163), + 11: uint16(32164), + 12: uint16(32165), + 13: uint16(32167), + 14: uint16(32168), + 15: uint16(32169), + 16: uint16(32170), + 17: uint16(32171), + 18: uint16(32172), + 19: uint16(32173), + 20: uint16(32175), + 21: uint16(32176), + 22: uint16(32177), + 23: uint16(32178), + 24: uint16(32179), + 25: uint16(32180), + 26: uint16(32181), + 27: uint16(32182), + 28: uint16(32183), + 29: uint16(32184), + 30: uint16(32185), + 31: uint16(32186), + 32: uint16(32187), + 33: uint16(32188), + 34: uint16(32189), + 35: uint16(32190), + 36: uint16(32191), + 37: uint16(32192), + 38: uint16(32193), + 39: uint16(32194), + 40: uint16(32195), + 41: uint16(32196), + 42: uint16(32197), + 43: uint16(32198), + 44: uint16(32199), + 45: uint16(32200), + 46: uint16(32201), + 47: uint16(32202), + 48: uint16(32203), + 49: uint16(32204), + 50: uint16(32205), + 51: uint16(32206), + 52: uint16(32207), + 53: uint16(32208), + 54: uint16(32209), + 55: uint16(32210), + 56: uint16(32211), + 57: uint16(32212), + 58: uint16(32213), + 59: uint16(32214), + 60: uint16(32215), + 61: uint16(32216), + 62: uint16(32217), + 63: uint16(32218), + 64: uint16(32219), + 65: uint16(32220), + 66: uint16(32221), + 67: uint16(32222), + 68: uint16(32223), + 69: uint16(32224), + 70: uint16(32225), + 71: uint16(32226), + 72: uint16(32227), + 73: uint16(32228), + 74: uint16(32229), + 75: uint16(32230), + 76: uint16(32231), + 77: uint16(32232), + 78: uint16(32233), + 79: uint16(32234), + 80: uint16(32235), + 81: uint16(32236), + 82: uint16(32237), + 83: uint16(32238), + 84: uint16(32239), + 85: uint16(32240), + 86: uint16(32241), + 87: uint16(32242), + 88: uint16(32243), + 89: uint16(32244), + 90: uint16(32245), + 91: uint16(32246), + 92: uint16(32247), + 93: uint16(32248), + 94: uint16(32249), + 95: uint16(32250), + 96: uint16(23613), + 97: uint16(21170), + 98: uint16(33606), + 99: uint16(20834), + 100: uint16(33550), + 101: uint16(30555), + 102: uint16(26230), + 103: uint16(40120), + 104: uint16(20140), + 105: uint16(24778), + 106: uint16(31934), + 107: uint16(31923), + 108: uint16(32463), + 109: uint16(20117), + 110: uint16(35686), + 111: uint16(26223), + 112: uint16(39048), + 113: uint16(38745), + 114: uint16(22659), + 115: uint16(25964), + 116: uint16(38236), + 117: uint16(24452), + 118: uint16(30153), + 119: uint16(38742), + 120: uint16(31455), + 121: uint16(31454), + 122: uint16(20928), + 123: uint16(28847), + 124: uint16(31384), + 125: uint16(25578), + 126: uint16(31350), + 127: uint16(32416), + 128: uint16(29590), + 129: uint16(38893), + 130: uint16(20037), + 131: uint16(28792), + 132: uint16(20061), + 133: uint16(37202), + 134: uint16(21417), + 135: uint16(25937), + 136: uint16(26087), + 137: uint16(33276), + 138: uint16(33285), + 139: uint16(21646), + 140: uint16(23601), + 141: uint16(30106), + 142: uint16(38816), + 143: uint16(25304), + 144: uint16(29401), + 145: uint16(30141), + 146: uint16(23621), + 147: uint16(39545), + 148: uint16(33738), + 149: uint16(23616), + 150: uint16(21632), + 151: uint16(30697), + 152: uint16(20030), + 153: uint16(27822), + 154: uint16(32858), + 155: uint16(25298), + 156: uint16(25454), + 157: uint16(24040), + 158: uint16(20855), + 159: uint16(36317), + 160: uint16(36382), + 161: uint16(38191), + 162: uint16(20465), + 163: uint16(21477), + 164: uint16(24807), + 165: uint16(28844), + 166: uint16(21095), + 167: uint16(25424), + 168: uint16(40515), + 169: uint16(23071), + 170: uint16(20518), + 171: uint16(30519), + 172: uint16(21367), + 173: uint16(32482), + 174: uint16(25733), + 175: uint16(25899), + 176: uint16(25225), + 177: uint16(25496), + 178: uint16(20500), + 179: uint16(29237), + 180: uint16(35273), + 181: uint16(20915), + 182: uint16(35776), + 183: uint16(32477), + 184: uint16(22343), + 185: uint16(33740), + 186: uint16(38055), + 187: uint16(20891), + 188: uint16(21531), + 189: uint16(23803), + }, + 62: { + 0: uint16(32251), + 1: uint16(32252), + 2: uint16(32253), + 3: uint16(32254), + 4: uint16(32255), + 5: uint16(32256), + 6: uint16(32257), + 7: uint16(32258), + 8: uint16(32259), + 9: uint16(32260), + 10: uint16(32261), + 11: uint16(32262), + 12: uint16(32263), + 13: uint16(32264), + 14: uint16(32265), + 15: uint16(32266), + 16: uint16(32267), + 17: uint16(32268), + 18: uint16(32269), + 19: uint16(32270), + 20: uint16(32271), + 21: uint16(32272), + 22: uint16(32273), + 23: uint16(32274), + 24: uint16(32275), + 25: uint16(32276), + 26: uint16(32277), + 27: uint16(32278), + 28: uint16(32279), + 29: uint16(32280), + 30: uint16(32281), + 31: uint16(32282), + 32: uint16(32283), + 33: uint16(32284), + 34: uint16(32285), + 35: uint16(32286), + 36: uint16(32287), + 37: uint16(32288), + 38: uint16(32289), + 39: uint16(32290), + 40: uint16(32291), + 41: uint16(32292), + 42: uint16(32293), + 43: uint16(32294), + 44: uint16(32295), + 45: uint16(32296), + 46: uint16(32297), + 47: uint16(32298), + 48: uint16(32299), + 49: uint16(32300), + 50: uint16(32301), + 51: uint16(32302), + 52: uint16(32303), + 53: uint16(32304), + 54: uint16(32305), + 55: uint16(32306), + 56: uint16(32307), + 57: uint16(32308), + 58: uint16(32309), + 59: uint16(32310), + 60: uint16(32311), + 61: uint16(32312), + 62: uint16(32313), + 63: uint16(32314), + 64: uint16(32316), + 65: uint16(32317), + 66: uint16(32318), + 67: uint16(32319), + 68: uint16(32320), + 69: uint16(32322), + 70: uint16(32323), + 71: uint16(32324), + 72: uint16(32325), + 73: uint16(32326), + 74: uint16(32328), + 75: uint16(32329), + 76: uint16(32330), + 77: uint16(32331), + 78: uint16(32332), + 79: uint16(32333), + 80: uint16(32334), + 81: uint16(32335), + 82: uint16(32336), + 83: uint16(32337), + 84: uint16(32338), + 85: uint16(32339), + 86: uint16(32340), + 87: uint16(32341), + 88: uint16(32342), + 89: uint16(32343), + 90: uint16(32344), + 91: uint16(32345), + 92: uint16(32346), + 93: uint16(32347), + 94: uint16(32348), + 95: uint16(32349), + 96: uint16(20426), + 97: uint16(31459), + 98: uint16(27994), + 99: uint16(37089), + 100: uint16(39567), + 101: uint16(21888), + 102: uint16(21654), + 103: uint16(21345), + 104: uint16(21679), + 105: uint16(24320), + 106: uint16(25577), + 107: uint16(26999), + 108: uint16(20975), + 109: uint16(24936), + 110: uint16(21002), + 111: uint16(22570), + 112: uint16(21208), + 113: uint16(22350), + 114: uint16(30733), + 115: uint16(30475), + 116: uint16(24247), + 117: uint16(24951), + 118: uint16(31968), + 119: uint16(25179), + 120: uint16(25239), + 121: uint16(20130), + 122: uint16(28821), + 123: uint16(32771), + 124: uint16(25335), + 125: uint16(28900), + 126: uint16(38752), + 127: uint16(22391), + 128: uint16(33499), + 129: uint16(26607), + 130: uint16(26869), + 131: uint16(30933), + 132: uint16(39063), + 133: uint16(31185), + 134: uint16(22771), + 135: uint16(21683), + 136: uint16(21487), + 137: uint16(28212), + 138: uint16(20811), + 139: uint16(21051), + 140: uint16(23458), + 141: uint16(35838), + 142: uint16(32943), + 143: uint16(21827), + 144: uint16(22438), + 145: uint16(24691), + 146: uint16(22353), + 147: uint16(21549), + 148: uint16(31354), + 149: uint16(24656), + 150: uint16(23380), + 151: uint16(25511), + 152: uint16(25248), + 153: uint16(21475), + 154: uint16(25187), + 155: uint16(23495), + 156: uint16(26543), + 157: uint16(21741), + 158: uint16(31391), + 159: uint16(33510), + 160: uint16(37239), + 161: uint16(24211), + 162: uint16(35044), + 163: uint16(22840), + 164: uint16(22446), + 165: uint16(25358), + 166: uint16(36328), + 167: uint16(33007), + 168: uint16(22359), + 169: uint16(31607), + 170: uint16(20393), + 171: uint16(24555), + 172: uint16(23485), + 173: uint16(27454), + 174: uint16(21281), + 175: uint16(31568), + 176: uint16(29378), + 177: uint16(26694), + 178: uint16(30719), + 179: uint16(30518), + 180: uint16(26103), + 181: uint16(20917), + 182: uint16(20111), + 183: uint16(30420), + 184: uint16(23743), + 185: uint16(31397), + 186: uint16(33909), + 187: uint16(22862), + 188: uint16(39745), + 189: uint16(20608), + }, + 63: { + 0: uint16(32350), + 1: uint16(32351), + 2: uint16(32352), + 3: uint16(32353), + 4: uint16(32354), + 5: uint16(32355), + 6: uint16(32356), + 7: uint16(32357), + 8: uint16(32358), + 9: uint16(32359), + 10: uint16(32360), + 11: uint16(32361), + 12: uint16(32362), + 13: uint16(32363), + 14: uint16(32364), + 15: uint16(32365), + 16: uint16(32366), + 17: uint16(32367), + 18: uint16(32368), + 19: uint16(32369), + 20: uint16(32370), + 21: uint16(32371), + 22: uint16(32372), + 23: uint16(32373), + 24: uint16(32374), + 25: uint16(32375), + 26: uint16(32376), + 27: uint16(32377), + 28: uint16(32378), + 29: uint16(32379), + 30: uint16(32380), + 31: uint16(32381), + 32: uint16(32382), + 33: uint16(32383), + 34: uint16(32384), + 35: uint16(32385), + 36: uint16(32387), + 37: uint16(32388), + 38: uint16(32389), + 39: uint16(32390), + 40: uint16(32391), + 41: uint16(32392), + 42: uint16(32393), + 43: uint16(32394), + 44: uint16(32395), + 45: uint16(32396), + 46: uint16(32397), + 47: uint16(32398), + 48: uint16(32399), + 49: uint16(32400), + 50: uint16(32401), + 51: uint16(32402), + 52: uint16(32403), + 53: uint16(32404), + 54: uint16(32405), + 55: uint16(32406), + 56: uint16(32407), + 57: uint16(32408), + 58: uint16(32409), + 59: uint16(32410), + 60: uint16(32412), + 61: uint16(32413), + 62: uint16(32414), + 63: uint16(32430), + 64: uint16(32436), + 65: uint16(32443), + 66: uint16(32444), + 67: uint16(32470), + 68: uint16(32484), + 69: uint16(32492), + 70: uint16(32505), + 71: uint16(32522), + 72: uint16(32528), + 73: uint16(32542), + 74: uint16(32567), + 75: uint16(32569), + 76: uint16(32571), + 77: uint16(32572), + 78: uint16(32573), + 79: uint16(32574), + 80: uint16(32575), + 81: uint16(32576), + 82: uint16(32577), + 83: uint16(32579), + 84: uint16(32582), + 85: uint16(32583), + 86: uint16(32584), + 87: uint16(32585), + 88: uint16(32586), + 89: uint16(32587), + 90: uint16(32588), + 91: uint16(32589), + 92: uint16(32590), + 93: uint16(32591), + 94: uint16(32594), + 95: uint16(32595), + 96: uint16(39304), + 97: uint16(24871), + 98: uint16(28291), + 99: uint16(22372), + 100: uint16(26118), + 101: uint16(25414), + 102: uint16(22256), + 103: uint16(25324), + 104: uint16(25193), + 105: uint16(24275), + 106: uint16(38420), + 107: uint16(22403), + 108: uint16(25289), + 109: uint16(21895), + 110: uint16(34593), + 111: uint16(33098), + 112: uint16(36771), + 113: uint16(21862), + 114: uint16(33713), + 115: uint16(26469), + 116: uint16(36182), + 117: uint16(34013), + 118: uint16(23146), + 119: uint16(26639), + 120: uint16(25318), + 121: uint16(31726), + 122: uint16(38417), + 123: uint16(20848), + 124: uint16(28572), + 125: uint16(35888), + 126: uint16(25597), + 127: uint16(35272), + 128: uint16(25042), + 129: uint16(32518), + 130: uint16(28866), + 131: uint16(28389), + 132: uint16(29701), + 133: uint16(27028), + 134: uint16(29436), + 135: uint16(24266), + 136: uint16(37070), + 137: uint16(26391), + 138: uint16(28010), + 139: uint16(25438), + 140: uint16(21171), + 141: uint16(29282), + 142: uint16(32769), + 143: uint16(20332), + 144: uint16(23013), + 145: uint16(37226), + 146: uint16(28889), + 147: uint16(28061), + 148: uint16(21202), + 149: uint16(20048), + 150: uint16(38647), + 151: uint16(38253), + 152: uint16(34174), + 153: uint16(30922), + 154: uint16(32047), + 155: uint16(20769), + 156: uint16(22418), + 157: uint16(25794), + 158: uint16(32907), + 159: uint16(31867), + 160: uint16(27882), + 161: uint16(26865), + 162: uint16(26974), + 163: uint16(20919), + 164: uint16(21400), + 165: uint16(26792), + 166: uint16(29313), + 167: uint16(40654), + 168: uint16(31729), + 169: uint16(29432), + 170: uint16(31163), + 171: uint16(28435), + 172: uint16(29702), + 173: uint16(26446), + 174: uint16(37324), + 175: uint16(40100), + 176: uint16(31036), + 177: uint16(33673), + 178: uint16(33620), + 179: uint16(21519), + 180: uint16(26647), + 181: uint16(20029), + 182: uint16(21385), + 183: uint16(21169), + 184: uint16(30782), + 185: uint16(21382), + 186: uint16(21033), + 187: uint16(20616), + 188: uint16(20363), + 189: uint16(20432), + }, + 64: { + 0: uint16(32598), + 1: uint16(32601), + 2: uint16(32603), + 3: uint16(32604), + 4: uint16(32605), + 5: uint16(32606), + 6: uint16(32608), + 7: uint16(32611), + 8: uint16(32612), + 9: uint16(32613), + 10: uint16(32614), + 11: uint16(32615), + 12: uint16(32619), + 13: uint16(32620), + 14: uint16(32621), + 15: uint16(32623), + 16: uint16(32624), + 17: uint16(32627), + 18: uint16(32629), + 19: uint16(32630), + 20: uint16(32631), + 21: uint16(32632), + 22: uint16(32634), + 23: uint16(32635), + 24: uint16(32636), + 25: uint16(32637), + 26: uint16(32639), + 27: uint16(32640), + 28: uint16(32642), + 29: uint16(32643), + 30: uint16(32644), + 31: uint16(32645), + 32: uint16(32646), + 33: uint16(32647), + 34: uint16(32648), + 35: uint16(32649), + 36: uint16(32651), + 37: uint16(32653), + 38: uint16(32655), + 39: uint16(32656), + 40: uint16(32657), + 41: uint16(32658), + 42: uint16(32659), + 43: uint16(32661), + 44: uint16(32662), + 45: uint16(32663), + 46: uint16(32664), + 47: uint16(32665), + 48: uint16(32667), + 49: uint16(32668), + 50: uint16(32672), + 51: uint16(32674), + 52: uint16(32675), + 53: uint16(32677), + 54: uint16(32678), + 55: uint16(32680), + 56: uint16(32681), + 57: uint16(32682), + 58: uint16(32683), + 59: uint16(32684), + 60: uint16(32685), + 61: uint16(32686), + 62: uint16(32689), + 63: uint16(32691), + 64: uint16(32692), + 65: uint16(32693), + 66: uint16(32694), + 67: uint16(32695), + 68: uint16(32698), + 69: uint16(32699), + 70: uint16(32702), + 71: uint16(32704), + 72: uint16(32706), + 73: uint16(32707), + 74: uint16(32708), + 75: uint16(32710), + 76: uint16(32711), + 77: uint16(32712), + 78: uint16(32713), + 79: uint16(32715), + 80: uint16(32717), + 81: uint16(32719), + 82: uint16(32720), + 83: uint16(32721), + 84: uint16(32722), + 85: uint16(32723), + 86: uint16(32726), + 87: uint16(32727), + 88: uint16(32729), + 89: uint16(32730), + 90: uint16(32731), + 91: uint16(32732), + 92: uint16(32733), + 93: uint16(32734), + 94: uint16(32738), + 95: uint16(32739), + 96: uint16(30178), + 97: uint16(31435), + 98: uint16(31890), + 99: uint16(27813), + 100: uint16(38582), + 101: uint16(21147), + 102: uint16(29827), + 103: uint16(21737), + 104: uint16(20457), + 105: uint16(32852), + 106: uint16(33714), + 107: uint16(36830), + 108: uint16(38256), + 109: uint16(24265), + 110: uint16(24604), + 111: uint16(28063), + 112: uint16(24088), + 113: uint16(25947), + 114: uint16(33080), + 115: uint16(38142), + 116: uint16(24651), + 117: uint16(28860), + 118: uint16(32451), + 119: uint16(31918), + 120: uint16(20937), + 121: uint16(26753), + 122: uint16(31921), + 123: uint16(33391), + 124: uint16(20004), + 125: uint16(36742), + 126: uint16(37327), + 127: uint16(26238), + 128: uint16(20142), + 129: uint16(35845), + 130: uint16(25769), + 131: uint16(32842), + 132: uint16(20698), + 133: uint16(30103), + 134: uint16(29134), + 135: uint16(23525), + 136: uint16(36797), + 137: uint16(28518), + 138: uint16(20102), + 139: uint16(25730), + 140: uint16(38243), + 141: uint16(24278), + 142: uint16(26009), + 143: uint16(21015), + 144: uint16(35010), + 145: uint16(28872), + 146: uint16(21155), + 147: uint16(29454), + 148: uint16(29747), + 149: uint16(26519), + 150: uint16(30967), + 151: uint16(38678), + 152: uint16(20020), + 153: uint16(37051), + 154: uint16(40158), + 155: uint16(28107), + 156: uint16(20955), + 157: uint16(36161), + 158: uint16(21533), + 159: uint16(25294), + 160: uint16(29618), + 161: uint16(33777), + 162: uint16(38646), + 163: uint16(40836), + 164: uint16(38083), + 165: uint16(20278), + 166: uint16(32666), + 167: uint16(20940), + 168: uint16(28789), + 169: uint16(38517), + 170: uint16(23725), + 171: uint16(39046), + 172: uint16(21478), + 173: uint16(20196), + 174: uint16(28316), + 175: uint16(29705), + 176: uint16(27060), + 177: uint16(30827), + 178: uint16(39311), + 179: uint16(30041), + 180: uint16(21016), + 181: uint16(30244), + 182: uint16(27969), + 183: uint16(26611), + 184: uint16(20845), + 185: uint16(40857), + 186: uint16(32843), + 187: uint16(21657), + 188: uint16(31548), + 189: uint16(31423), + }, + 65: { + 0: uint16(32740), + 1: uint16(32743), + 2: uint16(32744), + 3: uint16(32746), + 4: uint16(32747), + 5: uint16(32748), + 6: uint16(32749), + 7: uint16(32751), + 8: uint16(32754), + 9: uint16(32756), + 10: uint16(32757), + 11: uint16(32758), + 12: uint16(32759), + 13: uint16(32760), + 14: uint16(32761), + 15: uint16(32762), + 16: uint16(32765), + 17: uint16(32766), + 18: uint16(32767), + 19: uint16(32770), + 20: uint16(32775), + 21: uint16(32776), + 22: uint16(32777), + 23: uint16(32778), + 24: uint16(32782), + 25: uint16(32783), + 26: uint16(32785), + 27: uint16(32787), + 28: uint16(32794), + 29: uint16(32795), + 30: uint16(32797), + 31: uint16(32798), + 32: uint16(32799), + 33: uint16(32801), + 34: uint16(32803), + 35: uint16(32804), + 36: uint16(32811), + 37: uint16(32812), + 38: uint16(32813), + 39: uint16(32814), + 40: uint16(32815), + 41: uint16(32816), + 42: uint16(32818), + 43: uint16(32820), + 44: uint16(32825), + 45: uint16(32826), + 46: uint16(32828), + 47: uint16(32830), + 48: uint16(32832), + 49: uint16(32833), + 50: uint16(32836), + 51: uint16(32837), + 52: uint16(32839), + 53: uint16(32840), + 54: uint16(32841), + 55: uint16(32846), + 56: uint16(32847), + 57: uint16(32848), + 58: uint16(32849), + 59: uint16(32851), + 60: uint16(32853), + 61: uint16(32854), + 62: uint16(32855), + 63: uint16(32857), + 64: uint16(32859), + 65: uint16(32860), + 66: uint16(32861), + 67: uint16(32862), + 68: uint16(32863), + 69: uint16(32864), + 70: uint16(32865), + 71: uint16(32866), + 72: uint16(32867), + 73: uint16(32868), + 74: uint16(32869), + 75: uint16(32870), + 76: uint16(32871), + 77: uint16(32872), + 78: uint16(32875), + 79: uint16(32876), + 80: uint16(32877), + 81: uint16(32878), + 82: uint16(32879), + 83: uint16(32880), + 84: uint16(32882), + 85: uint16(32883), + 86: uint16(32884), + 87: uint16(32885), + 88: uint16(32886), + 89: uint16(32887), + 90: uint16(32888), + 91: uint16(32889), + 92: uint16(32890), + 93: uint16(32891), + 94: uint16(32892), + 95: uint16(32893), + 96: uint16(38534), + 97: uint16(22404), + 98: uint16(25314), + 99: uint16(38471), + 100: uint16(27004), + 101: uint16(23044), + 102: uint16(25602), + 103: uint16(31699), + 104: uint16(28431), + 105: uint16(38475), + 106: uint16(33446), + 107: uint16(21346), + 108: uint16(39045), + 109: uint16(24208), + 110: uint16(28809), + 111: uint16(25523), + 112: uint16(21348), + 113: uint16(34383), + 114: uint16(40065), + 115: uint16(40595), + 116: uint16(30860), + 117: uint16(38706), + 118: uint16(36335), + 119: uint16(36162), + 120: uint16(40575), + 121: uint16(28510), + 122: uint16(31108), + 123: uint16(24405), + 124: uint16(38470), + 125: uint16(25134), + 126: uint16(39540), + 127: uint16(21525), + 128: uint16(38109), + 129: uint16(20387), + 130: uint16(26053), + 131: uint16(23653), + 132: uint16(23649), + 133: uint16(32533), + 134: uint16(34385), + 135: uint16(27695), + 136: uint16(24459), + 137: uint16(29575), + 138: uint16(28388), + 139: uint16(32511), + 140: uint16(23782), + 141: uint16(25371), + 142: uint16(23402), + 143: uint16(28390), + 144: uint16(21365), + 145: uint16(20081), + 146: uint16(25504), + 147: uint16(30053), + 148: uint16(25249), + 149: uint16(36718), + 150: uint16(20262), + 151: uint16(20177), + 152: uint16(27814), + 153: uint16(32438), + 154: uint16(35770), + 155: uint16(33821), + 156: uint16(34746), + 157: uint16(32599), + 158: uint16(36923), + 159: uint16(38179), + 160: uint16(31657), + 161: uint16(39585), + 162: uint16(35064), + 163: uint16(33853), + 164: uint16(27931), + 165: uint16(39558), + 166: uint16(32476), + 167: uint16(22920), + 168: uint16(40635), + 169: uint16(29595), + 170: uint16(30721), + 171: uint16(34434), + 172: uint16(39532), + 173: uint16(39554), + 174: uint16(22043), + 175: uint16(21527), + 176: uint16(22475), + 177: uint16(20080), + 178: uint16(40614), + 179: uint16(21334), + 180: uint16(36808), + 181: uint16(33033), + 182: uint16(30610), + 183: uint16(39314), + 184: uint16(34542), + 185: uint16(28385), + 186: uint16(34067), + 187: uint16(26364), + 188: uint16(24930), + 189: uint16(28459), + }, + 66: { + 0: uint16(32894), + 1: uint16(32897), + 2: uint16(32898), + 3: uint16(32901), + 4: uint16(32904), + 5: uint16(32906), + 6: uint16(32909), + 7: uint16(32910), + 8: uint16(32911), + 9: uint16(32912), + 10: uint16(32913), + 11: uint16(32914), + 12: uint16(32916), + 13: uint16(32917), + 14: uint16(32919), + 15: uint16(32921), + 16: uint16(32926), + 17: uint16(32931), + 18: uint16(32934), + 19: uint16(32935), + 20: uint16(32936), + 21: uint16(32940), + 22: uint16(32944), + 23: uint16(32947), + 24: uint16(32949), + 25: uint16(32950), + 26: uint16(32952), + 27: uint16(32953), + 28: uint16(32955), + 29: uint16(32965), + 30: uint16(32967), + 31: uint16(32968), + 32: uint16(32969), + 33: uint16(32970), + 34: uint16(32971), + 35: uint16(32975), + 36: uint16(32976), + 37: uint16(32977), + 38: uint16(32978), + 39: uint16(32979), + 40: uint16(32980), + 41: uint16(32981), + 42: uint16(32984), + 43: uint16(32991), + 44: uint16(32992), + 45: uint16(32994), + 46: uint16(32995), + 47: uint16(32998), + 48: uint16(33006), + 49: uint16(33013), + 50: uint16(33015), + 51: uint16(33017), + 52: uint16(33019), + 53: uint16(33022), + 54: uint16(33023), + 55: uint16(33024), + 56: uint16(33025), + 57: uint16(33027), + 58: uint16(33028), + 59: uint16(33029), + 60: uint16(33031), + 61: uint16(33032), + 62: uint16(33035), + 63: uint16(33036), + 64: uint16(33045), + 65: uint16(33047), + 66: uint16(33049), + 67: uint16(33051), + 68: uint16(33052), + 69: uint16(33053), + 70: uint16(33055), + 71: uint16(33056), + 72: uint16(33057), + 73: uint16(33058), + 74: uint16(33059), + 75: uint16(33060), + 76: uint16(33061), + 77: uint16(33062), + 78: uint16(33063), + 79: uint16(33064), + 80: uint16(33065), + 81: uint16(33066), + 82: uint16(33067), + 83: uint16(33069), + 84: uint16(33070), + 85: uint16(33072), + 86: uint16(33075), + 87: uint16(33076), + 88: uint16(33077), + 89: uint16(33079), + 90: uint16(33081), + 91: uint16(33082), + 92: uint16(33083), + 93: uint16(33084), + 94: uint16(33085), + 95: uint16(33087), + 96: uint16(35881), + 97: uint16(33426), + 98: uint16(33579), + 99: uint16(30450), + 100: uint16(27667), + 101: uint16(24537), + 102: uint16(33725), + 103: uint16(29483), + 104: uint16(33541), + 105: uint16(38170), + 106: uint16(27611), + 107: uint16(30683), + 108: uint16(38086), + 109: uint16(21359), + 110: uint16(33538), + 111: uint16(20882), + 112: uint16(24125), + 113: uint16(35980), + 114: uint16(36152), + 115: uint16(20040), + 116: uint16(29611), + 117: uint16(26522), + 118: uint16(26757), + 119: uint16(37238), + 120: uint16(38665), + 121: uint16(29028), + 122: uint16(27809), + 123: uint16(30473), + 124: uint16(23186), + 125: uint16(38209), + 126: uint16(27599), + 127: uint16(32654), + 128: uint16(26151), + 129: uint16(23504), + 130: uint16(22969), + 131: uint16(23194), + 132: uint16(38376), + 133: uint16(38391), + 134: uint16(20204), + 135: uint16(33804), + 136: uint16(33945), + 137: uint16(27308), + 138: uint16(30431), + 139: uint16(38192), + 140: uint16(29467), + 141: uint16(26790), + 142: uint16(23391), + 143: uint16(30511), + 144: uint16(37274), + 145: uint16(38753), + 146: uint16(31964), + 147: uint16(36855), + 148: uint16(35868), + 149: uint16(24357), + 150: uint16(31859), + 151: uint16(31192), + 152: uint16(35269), + 153: uint16(27852), + 154: uint16(34588), + 155: uint16(23494), + 156: uint16(24130), + 157: uint16(26825), + 158: uint16(30496), + 159: uint16(32501), + 160: uint16(20885), + 161: uint16(20813), + 162: uint16(21193), + 163: uint16(23081), + 164: uint16(32517), + 165: uint16(38754), + 166: uint16(33495), + 167: uint16(25551), + 168: uint16(30596), + 169: uint16(34256), + 170: uint16(31186), + 171: uint16(28218), + 172: uint16(24217), + 173: uint16(22937), + 174: uint16(34065), + 175: uint16(28781), + 176: uint16(27665), + 177: uint16(25279), + 178: uint16(30399), + 179: uint16(25935), + 180: uint16(24751), + 181: uint16(38397), + 182: uint16(26126), + 183: uint16(34719), + 184: uint16(40483), + 185: uint16(38125), + 186: uint16(21517), + 187: uint16(21629), + 188: uint16(35884), + 189: uint16(25720), + }, + 67: { + 0: uint16(33088), + 1: uint16(33089), + 2: uint16(33090), + 3: uint16(33091), + 4: uint16(33092), + 5: uint16(33093), + 6: uint16(33095), + 7: uint16(33097), + 8: uint16(33101), + 9: uint16(33102), + 10: uint16(33103), + 11: uint16(33106), + 12: uint16(33110), + 13: uint16(33111), + 14: uint16(33112), + 15: uint16(33115), + 16: uint16(33116), + 17: uint16(33117), + 18: uint16(33118), + 19: uint16(33119), + 20: uint16(33121), + 21: uint16(33122), + 22: uint16(33123), + 23: uint16(33124), + 24: uint16(33126), + 25: uint16(33128), + 26: uint16(33130), + 27: uint16(33131), + 28: uint16(33132), + 29: uint16(33135), + 30: uint16(33138), + 31: uint16(33139), + 32: uint16(33141), + 33: uint16(33142), + 34: uint16(33143), + 35: uint16(33144), + 36: uint16(33153), + 37: uint16(33155), + 38: uint16(33156), + 39: uint16(33157), + 40: uint16(33158), + 41: uint16(33159), + 42: uint16(33161), + 43: uint16(33163), + 44: uint16(33164), + 45: uint16(33165), + 46: uint16(33166), + 47: uint16(33168), + 48: uint16(33170), + 49: uint16(33171), + 50: uint16(33172), + 51: uint16(33173), + 52: uint16(33174), + 53: uint16(33175), + 54: uint16(33177), + 55: uint16(33178), + 56: uint16(33182), + 57: uint16(33183), + 58: uint16(33184), + 59: uint16(33185), + 60: uint16(33186), + 61: uint16(33188), + 62: uint16(33189), + 63: uint16(33191), + 64: uint16(33193), + 65: uint16(33195), + 66: uint16(33196), + 67: uint16(33197), + 68: uint16(33198), + 69: uint16(33199), + 70: uint16(33200), + 71: uint16(33201), + 72: uint16(33202), + 73: uint16(33204), + 74: uint16(33205), + 75: uint16(33206), + 76: uint16(33207), + 77: uint16(33208), + 78: uint16(33209), + 79: uint16(33212), + 80: uint16(33213), + 81: uint16(33214), + 82: uint16(33215), + 83: uint16(33220), + 84: uint16(33221), + 85: uint16(33223), + 86: uint16(33224), + 87: uint16(33225), + 88: uint16(33227), + 89: uint16(33229), + 90: uint16(33230), + 91: uint16(33231), + 92: uint16(33232), + 93: uint16(33233), + 94: uint16(33234), + 95: uint16(33235), + 96: uint16(25721), + 97: uint16(34321), + 98: uint16(27169), + 99: uint16(33180), + 100: uint16(30952), + 101: uint16(25705), + 102: uint16(39764), + 103: uint16(25273), + 104: uint16(26411), + 105: uint16(33707), + 106: uint16(22696), + 107: uint16(40664), + 108: uint16(27819), + 109: uint16(28448), + 110: uint16(23518), + 111: uint16(38476), + 112: uint16(35851), + 113: uint16(29279), + 114: uint16(26576), + 115: uint16(25287), + 116: uint16(29281), + 117: uint16(20137), + 118: uint16(22982), + 119: uint16(27597), + 120: uint16(22675), + 121: uint16(26286), + 122: uint16(24149), + 123: uint16(21215), + 124: uint16(24917), + 125: uint16(26408), + 126: uint16(30446), + 127: uint16(30566), + 128: uint16(29287), + 129: uint16(31302), + 130: uint16(25343), + 131: uint16(21738), + 132: uint16(21584), + 133: uint16(38048), + 134: uint16(37027), + 135: uint16(23068), + 136: uint16(32435), + 137: uint16(27670), + 138: uint16(20035), + 139: uint16(22902), + 140: uint16(32784), + 141: uint16(22856), + 142: uint16(21335), + 143: uint16(30007), + 144: uint16(38590), + 145: uint16(22218), + 146: uint16(25376), + 147: uint16(33041), + 148: uint16(24700), + 149: uint16(38393), + 150: uint16(28118), + 151: uint16(21602), + 152: uint16(39297), + 153: uint16(20869), + 154: uint16(23273), + 155: uint16(33021), + 156: uint16(22958), + 157: uint16(38675), + 158: uint16(20522), + 159: uint16(27877), + 160: uint16(23612), + 161: uint16(25311), + 162: uint16(20320), + 163: uint16(21311), + 164: uint16(33147), + 165: uint16(36870), + 166: uint16(28346), + 167: uint16(34091), + 168: uint16(25288), + 169: uint16(24180), + 170: uint16(30910), + 171: uint16(25781), + 172: uint16(25467), + 173: uint16(24565), + 174: uint16(23064), + 175: uint16(37247), + 176: uint16(40479), + 177: uint16(23615), + 178: uint16(25423), + 179: uint16(32834), + 180: uint16(23421), + 181: uint16(21870), + 182: uint16(38218), + 183: uint16(38221), + 184: uint16(28037), + 185: uint16(24744), + 186: uint16(26592), + 187: uint16(29406), + 188: uint16(20957), + 189: uint16(23425), + }, + 68: { + 0: uint16(33236), + 1: uint16(33237), + 2: uint16(33238), + 3: uint16(33239), + 4: uint16(33240), + 5: uint16(33241), + 6: uint16(33242), + 7: uint16(33243), + 8: uint16(33244), + 9: uint16(33245), + 10: uint16(33246), + 11: uint16(33247), + 12: uint16(33248), + 13: uint16(33249), + 14: uint16(33250), + 15: uint16(33252), + 16: uint16(33253), + 17: uint16(33254), + 18: uint16(33256), + 19: uint16(33257), + 20: uint16(33259), + 21: uint16(33262), + 22: uint16(33263), + 23: uint16(33264), + 24: uint16(33265), + 25: uint16(33266), + 26: uint16(33269), + 27: uint16(33270), + 28: uint16(33271), + 29: uint16(33272), + 30: uint16(33273), + 31: uint16(33274), + 32: uint16(33277), + 33: uint16(33279), + 34: uint16(33283), + 35: uint16(33287), + 36: uint16(33288), + 37: uint16(33289), + 38: uint16(33290), + 39: uint16(33291), + 40: uint16(33294), + 41: uint16(33295), + 42: uint16(33297), + 43: uint16(33299), + 44: uint16(33301), + 45: uint16(33302), + 46: uint16(33303), + 47: uint16(33304), + 48: uint16(33305), + 49: uint16(33306), + 50: uint16(33309), + 51: uint16(33312), + 52: uint16(33316), + 53: uint16(33317), + 54: uint16(33318), + 55: uint16(33319), + 56: uint16(33321), + 57: uint16(33326), + 58: uint16(33330), + 59: uint16(33338), + 60: uint16(33340), + 61: uint16(33341), + 62: uint16(33343), + 63: uint16(33344), + 64: uint16(33345), + 65: uint16(33346), + 66: uint16(33347), + 67: uint16(33349), + 68: uint16(33350), + 69: uint16(33352), + 70: uint16(33354), + 71: uint16(33356), + 72: uint16(33357), + 73: uint16(33358), + 74: uint16(33360), + 75: uint16(33361), + 76: uint16(33362), + 77: uint16(33363), + 78: uint16(33364), + 79: uint16(33365), + 80: uint16(33366), + 81: uint16(33367), + 82: uint16(33369), + 83: uint16(33371), + 84: uint16(33372), + 85: uint16(33373), + 86: uint16(33374), + 87: uint16(33376), + 88: uint16(33377), + 89: uint16(33378), + 90: uint16(33379), + 91: uint16(33380), + 92: uint16(33381), + 93: uint16(33382), + 94: uint16(33383), + 95: uint16(33385), + 96: uint16(25319), + 97: uint16(27870), + 98: uint16(29275), + 99: uint16(25197), + 100: uint16(38062), + 101: uint16(32445), + 102: uint16(33043), + 103: uint16(27987), + 104: uint16(20892), + 105: uint16(24324), + 106: uint16(22900), + 107: uint16(21162), + 108: uint16(24594), + 109: uint16(22899), + 110: uint16(26262), + 111: uint16(34384), + 112: uint16(30111), + 113: uint16(25386), + 114: uint16(25062), + 115: uint16(31983), + 116: uint16(35834), + 117: uint16(21734), + 118: uint16(27431), + 119: uint16(40485), + 120: uint16(27572), + 121: uint16(34261), + 122: uint16(21589), + 123: uint16(20598), + 124: uint16(27812), + 125: uint16(21866), + 126: uint16(36276), + 127: uint16(29228), + 128: uint16(24085), + 129: uint16(24597), + 130: uint16(29750), + 131: uint16(25293), + 132: uint16(25490), + 133: uint16(29260), + 134: uint16(24472), + 135: uint16(28227), + 136: uint16(27966), + 137: uint16(25856), + 138: uint16(28504), + 139: uint16(30424), + 140: uint16(30928), + 141: uint16(30460), + 142: uint16(30036), + 143: uint16(21028), + 144: uint16(21467), + 145: uint16(20051), + 146: uint16(24222), + 147: uint16(26049), + 148: uint16(32810), + 149: uint16(32982), + 150: uint16(25243), + 151: uint16(21638), + 152: uint16(21032), + 153: uint16(28846), + 154: uint16(34957), + 155: uint16(36305), + 156: uint16(27873), + 157: uint16(21624), + 158: uint16(32986), + 159: uint16(22521), + 160: uint16(35060), + 161: uint16(36180), + 162: uint16(38506), + 163: uint16(37197), + 164: uint16(20329), + 165: uint16(27803), + 166: uint16(21943), + 167: uint16(30406), + 168: uint16(30768), + 169: uint16(25256), + 170: uint16(28921), + 171: uint16(28558), + 172: uint16(24429), + 173: uint16(34028), + 174: uint16(26842), + 175: uint16(30844), + 176: uint16(31735), + 177: uint16(33192), + 178: uint16(26379), + 179: uint16(40527), + 180: uint16(25447), + 181: uint16(30896), + 182: uint16(22383), + 183: uint16(30738), + 184: uint16(38713), + 185: uint16(25209), + 186: uint16(25259), + 187: uint16(21128), + 188: uint16(29749), + 189: uint16(27607), + }, + 69: { + 0: uint16(33386), + 1: uint16(33387), + 2: uint16(33388), + 3: uint16(33389), + 4: uint16(33393), + 5: uint16(33397), + 6: uint16(33398), + 7: uint16(33399), + 8: uint16(33400), + 9: uint16(33403), + 10: uint16(33404), + 11: uint16(33408), + 12: uint16(33409), + 13: uint16(33411), + 14: uint16(33413), + 15: uint16(33414), + 16: uint16(33415), + 17: uint16(33417), + 18: uint16(33420), + 19: uint16(33424), + 20: uint16(33427), + 21: uint16(33428), + 22: uint16(33429), + 23: uint16(33430), + 24: uint16(33434), + 25: uint16(33435), + 26: uint16(33438), + 27: uint16(33440), + 28: uint16(33442), + 29: uint16(33443), + 30: uint16(33447), + 31: uint16(33458), + 32: uint16(33461), + 33: uint16(33462), + 34: uint16(33466), + 35: uint16(33467), + 36: uint16(33468), + 37: uint16(33471), + 38: uint16(33472), + 39: uint16(33474), + 40: uint16(33475), + 41: uint16(33477), + 42: uint16(33478), + 43: uint16(33481), + 44: uint16(33488), + 45: uint16(33494), + 46: uint16(33497), + 47: uint16(33498), + 48: uint16(33501), + 49: uint16(33506), + 50: uint16(33511), + 51: uint16(33512), + 52: uint16(33513), + 53: uint16(33514), + 54: uint16(33516), + 55: uint16(33517), + 56: uint16(33518), + 57: uint16(33520), + 58: uint16(33522), + 59: uint16(33523), + 60: uint16(33525), + 61: uint16(33526), + 62: uint16(33528), + 63: uint16(33530), + 64: uint16(33532), + 65: uint16(33533), + 66: uint16(33534), + 67: uint16(33535), + 68: uint16(33536), + 69: uint16(33546), + 70: uint16(33547), + 71: uint16(33549), + 72: uint16(33552), + 73: uint16(33554), + 74: uint16(33555), + 75: uint16(33558), + 76: uint16(33560), + 77: uint16(33561), + 78: uint16(33565), + 79: uint16(33566), + 80: uint16(33567), + 81: uint16(33568), + 82: uint16(33569), + 83: uint16(33570), + 84: uint16(33571), + 85: uint16(33572), + 86: uint16(33573), + 87: uint16(33574), + 88: uint16(33577), + 89: uint16(33578), + 90: uint16(33582), + 91: uint16(33584), + 92: uint16(33586), + 93: uint16(33591), + 94: uint16(33595), + 95: uint16(33597), + 96: uint16(21860), + 97: uint16(33086), + 98: uint16(30130), + 99: uint16(30382), + 100: uint16(21305), + 101: uint16(30174), + 102: uint16(20731), + 103: uint16(23617), + 104: uint16(35692), + 105: uint16(31687), + 106: uint16(20559), + 107: uint16(29255), + 108: uint16(39575), + 109: uint16(39128), + 110: uint16(28418), + 111: uint16(29922), + 112: uint16(31080), + 113: uint16(25735), + 114: uint16(30629), + 115: uint16(25340), + 116: uint16(39057), + 117: uint16(36139), + 118: uint16(21697), + 119: uint16(32856), + 120: uint16(20050), + 121: uint16(22378), + 122: uint16(33529), + 123: uint16(33805), + 124: uint16(24179), + 125: uint16(20973), + 126: uint16(29942), + 127: uint16(35780), + 128: uint16(23631), + 129: uint16(22369), + 130: uint16(27900), + 131: uint16(39047), + 132: uint16(23110), + 133: uint16(30772), + 134: uint16(39748), + 135: uint16(36843), + 136: uint16(31893), + 137: uint16(21078), + 138: uint16(25169), + 139: uint16(38138), + 140: uint16(20166), + 141: uint16(33670), + 142: uint16(33889), + 143: uint16(33769), + 144: uint16(33970), + 145: uint16(22484), + 146: uint16(26420), + 147: uint16(22275), + 148: uint16(26222), + 149: uint16(28006), + 150: uint16(35889), + 151: uint16(26333), + 152: uint16(28689), + 153: uint16(26399), + 154: uint16(27450), + 155: uint16(26646), + 156: uint16(25114), + 157: uint16(22971), + 158: uint16(19971), + 159: uint16(20932), + 160: uint16(28422), + 161: uint16(26578), + 162: uint16(27791), + 163: uint16(20854), + 164: uint16(26827), + 165: uint16(22855), + 166: uint16(27495), + 167: uint16(30054), + 168: uint16(23822), + 169: uint16(33040), + 170: uint16(40784), + 171: uint16(26071), + 172: uint16(31048), + 173: uint16(31041), + 174: uint16(39569), + 175: uint16(36215), + 176: uint16(23682), + 177: uint16(20062), + 178: uint16(20225), + 179: uint16(21551), + 180: uint16(22865), + 181: uint16(30732), + 182: uint16(22120), + 183: uint16(27668), + 184: uint16(36804), + 185: uint16(24323), + 186: uint16(27773), + 187: uint16(27875), + 188: uint16(35755), + 189: uint16(25488), + }, + 70: { + 0: uint16(33598), + 1: uint16(33599), + 2: uint16(33601), + 3: uint16(33602), + 4: uint16(33604), + 5: uint16(33605), + 6: uint16(33608), + 7: uint16(33610), + 8: uint16(33611), + 9: uint16(33612), + 10: uint16(33613), + 11: uint16(33614), + 12: uint16(33619), + 13: uint16(33621), + 14: uint16(33622), + 15: uint16(33623), + 16: uint16(33624), + 17: uint16(33625), + 18: uint16(33629), + 19: uint16(33634), + 20: uint16(33648), + 21: uint16(33649), + 22: uint16(33650), + 23: uint16(33651), + 24: uint16(33652), + 25: uint16(33653), + 26: uint16(33654), + 27: uint16(33657), + 28: uint16(33658), + 29: uint16(33662), + 30: uint16(33663), + 31: uint16(33664), + 32: uint16(33665), + 33: uint16(33666), + 34: uint16(33667), + 35: uint16(33668), + 36: uint16(33671), + 37: uint16(33672), + 38: uint16(33674), + 39: uint16(33675), + 40: uint16(33676), + 41: uint16(33677), + 42: uint16(33679), + 43: uint16(33680), + 44: uint16(33681), + 45: uint16(33684), + 46: uint16(33685), + 47: uint16(33686), + 48: uint16(33687), + 49: uint16(33689), + 50: uint16(33690), + 51: uint16(33693), + 52: uint16(33695), + 53: uint16(33697), + 54: uint16(33698), + 55: uint16(33699), + 56: uint16(33700), + 57: uint16(33701), + 58: uint16(33702), + 59: uint16(33703), + 60: uint16(33708), + 61: uint16(33709), + 62: uint16(33710), + 63: uint16(33711), + 64: uint16(33717), + 65: uint16(33723), + 66: uint16(33726), + 67: uint16(33727), + 68: uint16(33730), + 69: uint16(33731), + 70: uint16(33732), + 71: uint16(33734), + 72: uint16(33736), + 73: uint16(33737), + 74: uint16(33739), + 75: uint16(33741), + 76: uint16(33742), + 77: uint16(33744), + 78: uint16(33745), + 79: uint16(33746), + 80: uint16(33747), + 81: uint16(33749), + 82: uint16(33751), + 83: uint16(33753), + 84: uint16(33754), + 85: uint16(33755), + 86: uint16(33758), + 87: uint16(33762), + 88: uint16(33763), + 89: uint16(33764), + 90: uint16(33766), + 91: uint16(33767), + 92: uint16(33768), + 93: uint16(33771), + 94: uint16(33772), + 95: uint16(33773), + 96: uint16(24688), + 97: uint16(27965), + 98: uint16(29301), + 99: uint16(25190), + 100: uint16(38030), + 101: uint16(38085), + 102: uint16(21315), + 103: uint16(36801), + 104: uint16(31614), + 105: uint16(20191), + 106: uint16(35878), + 107: uint16(20094), + 108: uint16(40660), + 109: uint16(38065), + 110: uint16(38067), + 111: uint16(21069), + 112: uint16(28508), + 113: uint16(36963), + 114: uint16(27973), + 115: uint16(35892), + 116: uint16(22545), + 117: uint16(23884), + 118: uint16(27424), + 119: uint16(27465), + 120: uint16(26538), + 121: uint16(21595), + 122: uint16(33108), + 123: uint16(32652), + 124: uint16(22681), + 125: uint16(34103), + 126: uint16(24378), + 127: uint16(25250), + 128: uint16(27207), + 129: uint16(38201), + 130: uint16(25970), + 131: uint16(24708), + 132: uint16(26725), + 133: uint16(30631), + 134: uint16(20052), + 135: uint16(20392), + 136: uint16(24039), + 137: uint16(38808), + 138: uint16(25772), + 139: uint16(32728), + 140: uint16(23789), + 141: uint16(20431), + 142: uint16(31373), + 143: uint16(20999), + 144: uint16(33540), + 145: uint16(19988), + 146: uint16(24623), + 147: uint16(31363), + 148: uint16(38054), + 149: uint16(20405), + 150: uint16(20146), + 151: uint16(31206), + 152: uint16(29748), + 153: uint16(21220), + 154: uint16(33465), + 155: uint16(25810), + 156: uint16(31165), + 157: uint16(23517), + 158: uint16(27777), + 159: uint16(38738), + 160: uint16(36731), + 161: uint16(27682), + 162: uint16(20542), + 163: uint16(21375), + 164: uint16(28165), + 165: uint16(25806), + 166: uint16(26228), + 167: uint16(27696), + 168: uint16(24773), + 169: uint16(39031), + 170: uint16(35831), + 171: uint16(24198), + 172: uint16(29756), + 173: uint16(31351), + 174: uint16(31179), + 175: uint16(19992), + 176: uint16(37041), + 177: uint16(29699), + 178: uint16(27714), + 179: uint16(22234), + 180: uint16(37195), + 181: uint16(27845), + 182: uint16(36235), + 183: uint16(21306), + 184: uint16(34502), + 185: uint16(26354), + 186: uint16(36527), + 187: uint16(23624), + 188: uint16(39537), + 189: uint16(28192), + }, + 71: { + 0: uint16(33774), + 1: uint16(33775), + 2: uint16(33779), + 3: uint16(33780), + 4: uint16(33781), + 5: uint16(33782), + 6: uint16(33783), + 7: uint16(33786), + 8: uint16(33787), + 9: uint16(33788), + 10: uint16(33790), + 11: uint16(33791), + 12: uint16(33792), + 13: uint16(33794), + 14: uint16(33797), + 15: uint16(33799), + 16: uint16(33800), + 17: uint16(33801), + 18: uint16(33802), + 19: uint16(33808), + 20: uint16(33810), + 21: uint16(33811), + 22: uint16(33812), + 23: uint16(33813), + 24: uint16(33814), + 25: uint16(33815), + 26: uint16(33817), + 27: uint16(33818), + 28: uint16(33819), + 29: uint16(33822), + 30: uint16(33823), + 31: uint16(33824), + 32: uint16(33825), + 33: uint16(33826), + 34: uint16(33827), + 35: uint16(33833), + 36: uint16(33834), + 37: uint16(33835), + 38: uint16(33836), + 39: uint16(33837), + 40: uint16(33838), + 41: uint16(33839), + 42: uint16(33840), + 43: uint16(33842), + 44: uint16(33843), + 45: uint16(33844), + 46: uint16(33845), + 47: uint16(33846), + 48: uint16(33847), + 49: uint16(33849), + 50: uint16(33850), + 51: uint16(33851), + 52: uint16(33854), + 53: uint16(33855), + 54: uint16(33856), + 55: uint16(33857), + 56: uint16(33858), + 57: uint16(33859), + 58: uint16(33860), + 59: uint16(33861), + 60: uint16(33863), + 61: uint16(33864), + 62: uint16(33865), + 63: uint16(33866), + 64: uint16(33867), + 65: uint16(33868), + 66: uint16(33869), + 67: uint16(33870), + 68: uint16(33871), + 69: uint16(33872), + 70: uint16(33874), + 71: uint16(33875), + 72: uint16(33876), + 73: uint16(33877), + 74: uint16(33878), + 75: uint16(33880), + 76: uint16(33885), + 77: uint16(33886), + 78: uint16(33887), + 79: uint16(33888), + 80: uint16(33890), + 81: uint16(33892), + 82: uint16(33893), + 83: uint16(33894), + 84: uint16(33895), + 85: uint16(33896), + 86: uint16(33898), + 87: uint16(33902), + 88: uint16(33903), + 89: uint16(33904), + 90: uint16(33906), + 91: uint16(33908), + 92: uint16(33911), + 93: uint16(33913), + 94: uint16(33915), + 95: uint16(33916), + 96: uint16(21462), + 97: uint16(23094), + 98: uint16(40843), + 99: uint16(36259), + 100: uint16(21435), + 101: uint16(22280), + 102: uint16(39079), + 103: uint16(26435), + 104: uint16(37275), + 105: uint16(27849), + 106: uint16(20840), + 107: uint16(30154), + 108: uint16(25331), + 109: uint16(29356), + 110: uint16(21048), + 111: uint16(21149), + 112: uint16(32570), + 113: uint16(28820), + 114: uint16(30264), + 115: uint16(21364), + 116: uint16(40522), + 117: uint16(27063), + 118: uint16(30830), + 119: uint16(38592), + 120: uint16(35033), + 121: uint16(32676), + 122: uint16(28982), + 123: uint16(29123), + 124: uint16(20873), + 125: uint16(26579), + 126: uint16(29924), + 127: uint16(22756), + 128: uint16(25880), + 129: uint16(22199), + 130: uint16(35753), + 131: uint16(39286), + 132: uint16(25200), + 133: uint16(32469), + 134: uint16(24825), + 135: uint16(28909), + 136: uint16(22764), + 137: uint16(20161), + 138: uint16(20154), + 139: uint16(24525), + 140: uint16(38887), + 141: uint16(20219), + 142: uint16(35748), + 143: uint16(20995), + 144: uint16(22922), + 145: uint16(32427), + 146: uint16(25172), + 147: uint16(20173), + 148: uint16(26085), + 149: uint16(25102), + 150: uint16(33592), + 151: uint16(33993), + 152: uint16(33635), + 153: uint16(34701), + 154: uint16(29076), + 155: uint16(28342), + 156: uint16(23481), + 157: uint16(32466), + 158: uint16(20887), + 159: uint16(25545), + 160: uint16(26580), + 161: uint16(32905), + 162: uint16(33593), + 163: uint16(34837), + 164: uint16(20754), + 165: uint16(23418), + 166: uint16(22914), + 167: uint16(36785), + 168: uint16(20083), + 169: uint16(27741), + 170: uint16(20837), + 171: uint16(35109), + 172: uint16(36719), + 173: uint16(38446), + 174: uint16(34122), + 175: uint16(29790), + 176: uint16(38160), + 177: uint16(38384), + 178: uint16(28070), + 179: uint16(33509), + 180: uint16(24369), + 181: uint16(25746), + 182: uint16(27922), + 183: uint16(33832), + 184: uint16(33134), + 185: uint16(40131), + 186: uint16(22622), + 187: uint16(36187), + 188: uint16(19977), + 189: uint16(21441), + }, + 72: { + 0: uint16(33917), + 1: uint16(33918), + 2: uint16(33919), + 3: uint16(33920), + 4: uint16(33921), + 5: uint16(33923), + 6: uint16(33924), + 7: uint16(33925), + 8: uint16(33926), + 9: uint16(33930), + 10: uint16(33933), + 11: uint16(33935), + 12: uint16(33936), + 13: uint16(33937), + 14: uint16(33938), + 15: uint16(33939), + 16: uint16(33940), + 17: uint16(33941), + 18: uint16(33942), + 19: uint16(33944), + 20: uint16(33946), + 21: uint16(33947), + 22: uint16(33949), + 23: uint16(33950), + 24: uint16(33951), + 25: uint16(33952), + 26: uint16(33954), + 27: uint16(33955), + 28: uint16(33956), + 29: uint16(33957), + 30: uint16(33958), + 31: uint16(33959), + 32: uint16(33960), + 33: uint16(33961), + 34: uint16(33962), + 35: uint16(33963), + 36: uint16(33964), + 37: uint16(33965), + 38: uint16(33966), + 39: uint16(33968), + 40: uint16(33969), + 41: uint16(33971), + 42: uint16(33973), + 43: uint16(33974), + 44: uint16(33975), + 45: uint16(33979), + 46: uint16(33980), + 47: uint16(33982), + 48: uint16(33984), + 49: uint16(33986), + 50: uint16(33987), + 51: uint16(33989), + 52: uint16(33990), + 53: uint16(33991), + 54: uint16(33992), + 55: uint16(33995), + 56: uint16(33996), + 57: uint16(33998), + 58: uint16(33999), + 59: uint16(34002), + 60: uint16(34004), + 61: uint16(34005), + 62: uint16(34007), + 63: uint16(34008), + 64: uint16(34009), + 65: uint16(34010), + 66: uint16(34011), + 67: uint16(34012), + 68: uint16(34014), + 69: uint16(34017), + 70: uint16(34018), + 71: uint16(34020), + 72: uint16(34023), + 73: uint16(34024), + 74: uint16(34025), + 75: uint16(34026), + 76: uint16(34027), + 77: uint16(34029), + 78: uint16(34030), + 79: uint16(34031), + 80: uint16(34033), + 81: uint16(34034), + 82: uint16(34035), + 83: uint16(34036), + 84: uint16(34037), + 85: uint16(34038), + 86: uint16(34039), + 87: uint16(34040), + 88: uint16(34041), + 89: uint16(34042), + 90: uint16(34043), + 91: uint16(34045), + 92: uint16(34046), + 93: uint16(34048), + 94: uint16(34049), + 95: uint16(34050), + 96: uint16(20254), + 97: uint16(25955), + 98: uint16(26705), + 99: uint16(21971), + 100: uint16(20007), + 101: uint16(25620), + 102: uint16(39578), + 103: uint16(25195), + 104: uint16(23234), + 105: uint16(29791), + 106: uint16(33394), + 107: uint16(28073), + 108: uint16(26862), + 109: uint16(20711), + 110: uint16(33678), + 111: uint16(30722), + 112: uint16(26432), + 113: uint16(21049), + 114: uint16(27801), + 115: uint16(32433), + 116: uint16(20667), + 117: uint16(21861), + 118: uint16(29022), + 119: uint16(31579), + 120: uint16(26194), + 121: uint16(29642), + 122: uint16(33515), + 123: uint16(26441), + 124: uint16(23665), + 125: uint16(21024), + 126: uint16(29053), + 127: uint16(34923), + 128: uint16(38378), + 129: uint16(38485), + 130: uint16(25797), + 131: uint16(36193), + 132: uint16(33203), + 133: uint16(21892), + 134: uint16(27733), + 135: uint16(25159), + 136: uint16(32558), + 137: uint16(22674), + 138: uint16(20260), + 139: uint16(21830), + 140: uint16(36175), + 141: uint16(26188), + 142: uint16(19978), + 143: uint16(23578), + 144: uint16(35059), + 145: uint16(26786), + 146: uint16(25422), + 147: uint16(31245), + 148: uint16(28903), + 149: uint16(33421), + 150: uint16(21242), + 151: uint16(38902), + 152: uint16(23569), + 153: uint16(21736), + 154: uint16(37045), + 155: uint16(32461), + 156: uint16(22882), + 157: uint16(36170), + 158: uint16(34503), + 159: uint16(33292), + 160: uint16(33293), + 161: uint16(36198), + 162: uint16(25668), + 163: uint16(23556), + 164: uint16(24913), + 165: uint16(28041), + 166: uint16(31038), + 167: uint16(35774), + 168: uint16(30775), + 169: uint16(30003), + 170: uint16(21627), + 171: uint16(20280), + 172: uint16(36523), + 173: uint16(28145), + 174: uint16(23072), + 175: uint16(32453), + 176: uint16(31070), + 177: uint16(27784), + 178: uint16(23457), + 179: uint16(23158), + 180: uint16(29978), + 181: uint16(32958), + 182: uint16(24910), + 183: uint16(28183), + 184: uint16(22768), + 185: uint16(29983), + 186: uint16(29989), + 187: uint16(29298), + 188: uint16(21319), + 189: uint16(32499), + }, + 73: { + 0: uint16(34051), + 1: uint16(34052), + 2: uint16(34053), + 3: uint16(34054), + 4: uint16(34055), + 5: uint16(34056), + 6: uint16(34057), + 7: uint16(34058), + 8: uint16(34059), + 9: uint16(34061), + 10: uint16(34062), + 11: uint16(34063), + 12: uint16(34064), + 13: uint16(34066), + 14: uint16(34068), + 15: uint16(34069), + 16: uint16(34070), + 17: uint16(34072), + 18: uint16(34073), + 19: uint16(34075), + 20: uint16(34076), + 21: uint16(34077), + 22: uint16(34078), + 23: uint16(34080), + 24: uint16(34082), + 25: uint16(34083), + 26: uint16(34084), + 27: uint16(34085), + 28: uint16(34086), + 29: uint16(34087), + 30: uint16(34088), + 31: uint16(34089), + 32: uint16(34090), + 33: uint16(34093), + 34: uint16(34094), + 35: uint16(34095), + 36: uint16(34096), + 37: uint16(34097), + 38: uint16(34098), + 39: uint16(34099), + 40: uint16(34100), + 41: uint16(34101), + 42: uint16(34102), + 43: uint16(34110), + 44: uint16(34111), + 45: uint16(34112), + 46: uint16(34113), + 47: uint16(34114), + 48: uint16(34116), + 49: uint16(34117), + 50: uint16(34118), + 51: uint16(34119), + 52: uint16(34123), + 53: uint16(34124), + 54: uint16(34125), + 55: uint16(34126), + 56: uint16(34127), + 57: uint16(34128), + 58: uint16(34129), + 59: uint16(34130), + 60: uint16(34131), + 61: uint16(34132), + 62: uint16(34133), + 63: uint16(34135), + 64: uint16(34136), + 65: uint16(34138), + 66: uint16(34139), + 67: uint16(34140), + 68: uint16(34141), + 69: uint16(34143), + 70: uint16(34144), + 71: uint16(34145), + 72: uint16(34146), + 73: uint16(34147), + 74: uint16(34149), + 75: uint16(34150), + 76: uint16(34151), + 77: uint16(34153), + 78: uint16(34154), + 79: uint16(34155), + 80: uint16(34156), + 81: uint16(34157), + 82: uint16(34158), + 83: uint16(34159), + 84: uint16(34160), + 85: uint16(34161), + 86: uint16(34163), + 87: uint16(34165), + 88: uint16(34166), + 89: uint16(34167), + 90: uint16(34168), + 91: uint16(34172), + 92: uint16(34173), + 93: uint16(34175), + 94: uint16(34176), + 95: uint16(34177), + 96: uint16(30465), + 97: uint16(30427), + 98: uint16(21097), + 99: uint16(32988), + 100: uint16(22307), + 101: uint16(24072), + 102: uint16(22833), + 103: uint16(29422), + 104: uint16(26045), + 105: uint16(28287), + 106: uint16(35799), + 107: uint16(23608), + 108: uint16(34417), + 109: uint16(21313), + 110: uint16(30707), + 111: uint16(25342), + 112: uint16(26102), + 113: uint16(20160), + 114: uint16(39135), + 115: uint16(34432), + 116: uint16(23454), + 117: uint16(35782), + 118: uint16(21490), + 119: uint16(30690), + 120: uint16(20351), + 121: uint16(23630), + 122: uint16(39542), + 123: uint16(22987), + 124: uint16(24335), + 125: uint16(31034), + 126: uint16(22763), + 127: uint16(19990), + 128: uint16(26623), + 129: uint16(20107), + 130: uint16(25325), + 131: uint16(35475), + 132: uint16(36893), + 133: uint16(21183), + 134: uint16(26159), + 135: uint16(21980), + 136: uint16(22124), + 137: uint16(36866), + 138: uint16(20181), + 139: uint16(20365), + 140: uint16(37322), + 141: uint16(39280), + 142: uint16(27663), + 143: uint16(24066), + 144: uint16(24643), + 145: uint16(23460), + 146: uint16(35270), + 147: uint16(35797), + 148: uint16(25910), + 149: uint16(25163), + 150: uint16(39318), + 151: uint16(23432), + 152: uint16(23551), + 153: uint16(25480), + 154: uint16(21806), + 155: uint16(21463), + 156: uint16(30246), + 157: uint16(20861), + 158: uint16(34092), + 159: uint16(26530), + 160: uint16(26803), + 161: uint16(27530), + 162: uint16(25234), + 163: uint16(36755), + 164: uint16(21460), + 165: uint16(33298), + 166: uint16(28113), + 167: uint16(30095), + 168: uint16(20070), + 169: uint16(36174), + 170: uint16(23408), + 171: uint16(29087), + 172: uint16(34223), + 173: uint16(26257), + 174: uint16(26329), + 175: uint16(32626), + 176: uint16(34560), + 177: uint16(40653), + 178: uint16(40736), + 179: uint16(23646), + 180: uint16(26415), + 181: uint16(36848), + 182: uint16(26641), + 183: uint16(26463), + 184: uint16(25101), + 185: uint16(31446), + 186: uint16(22661), + 187: uint16(24246), + 188: uint16(25968), + 189: uint16(28465), + }, + 74: { + 0: uint16(34178), + 1: uint16(34179), + 2: uint16(34182), + 3: uint16(34184), + 4: uint16(34185), + 5: uint16(34186), + 6: uint16(34187), + 7: uint16(34188), + 8: uint16(34189), + 9: uint16(34190), + 10: uint16(34192), + 11: uint16(34193), + 12: uint16(34194), + 13: uint16(34195), + 14: uint16(34196), + 15: uint16(34197), + 16: uint16(34198), + 17: uint16(34199), + 18: uint16(34200), + 19: uint16(34201), + 20: uint16(34202), + 21: uint16(34205), + 22: uint16(34206), + 23: uint16(34207), + 24: uint16(34208), + 25: uint16(34209), + 26: uint16(34210), + 27: uint16(34211), + 28: uint16(34213), + 29: uint16(34214), + 30: uint16(34215), + 31: uint16(34217), + 32: uint16(34219), + 33: uint16(34220), + 34: uint16(34221), + 35: uint16(34225), + 36: uint16(34226), + 37: uint16(34227), + 38: uint16(34228), + 39: uint16(34229), + 40: uint16(34230), + 41: uint16(34232), + 42: uint16(34234), + 43: uint16(34235), + 44: uint16(34236), + 45: uint16(34237), + 46: uint16(34238), + 47: uint16(34239), + 48: uint16(34240), + 49: uint16(34242), + 50: uint16(34243), + 51: uint16(34244), + 52: uint16(34245), + 53: uint16(34246), + 54: uint16(34247), + 55: uint16(34248), + 56: uint16(34250), + 57: uint16(34251), + 58: uint16(34252), + 59: uint16(34253), + 60: uint16(34254), + 61: uint16(34257), + 62: uint16(34258), + 63: uint16(34260), + 64: uint16(34262), + 65: uint16(34263), + 66: uint16(34264), + 67: uint16(34265), + 68: uint16(34266), + 69: uint16(34267), + 70: uint16(34269), + 71: uint16(34270), + 72: uint16(34271), + 73: uint16(34272), + 74: uint16(34273), + 75: uint16(34274), + 76: uint16(34275), + 77: uint16(34277), + 78: uint16(34278), + 79: uint16(34279), + 80: uint16(34280), + 81: uint16(34282), + 82: uint16(34283), + 83: uint16(34284), + 84: uint16(34285), + 85: uint16(34286), + 86: uint16(34287), + 87: uint16(34288), + 88: uint16(34289), + 89: uint16(34290), + 90: uint16(34291), + 91: uint16(34292), + 92: uint16(34293), + 93: uint16(34294), + 94: uint16(34295), + 95: uint16(34296), + 96: uint16(24661), + 97: uint16(21047), + 98: uint16(32781), + 99: uint16(25684), + 100: uint16(34928), + 101: uint16(29993), + 102: uint16(24069), + 103: uint16(26643), + 104: uint16(25332), + 105: uint16(38684), + 106: uint16(21452), + 107: uint16(29245), + 108: uint16(35841), + 109: uint16(27700), + 110: uint16(30561), + 111: uint16(31246), + 112: uint16(21550), + 113: uint16(30636), + 114: uint16(39034), + 115: uint16(33308), + 116: uint16(35828), + 117: uint16(30805), + 118: uint16(26388), + 119: uint16(28865), + 120: uint16(26031), + 121: uint16(25749), + 122: uint16(22070), + 123: uint16(24605), + 124: uint16(31169), + 125: uint16(21496), + 126: uint16(19997), + 127: uint16(27515), + 128: uint16(32902), + 129: uint16(23546), + 130: uint16(21987), + 131: uint16(22235), + 132: uint16(20282), + 133: uint16(20284), + 134: uint16(39282), + 135: uint16(24051), + 136: uint16(26494), + 137: uint16(32824), + 138: uint16(24578), + 139: uint16(39042), + 140: uint16(36865), + 141: uint16(23435), + 142: uint16(35772), + 143: uint16(35829), + 144: uint16(25628), + 145: uint16(33368), + 146: uint16(25822), + 147: uint16(22013), + 148: uint16(33487), + 149: uint16(37221), + 150: uint16(20439), + 151: uint16(32032), + 152: uint16(36895), + 153: uint16(31903), + 154: uint16(20723), + 155: uint16(22609), + 156: uint16(28335), + 157: uint16(23487), + 158: uint16(35785), + 159: uint16(32899), + 160: uint16(37240), + 161: uint16(33948), + 162: uint16(31639), + 163: uint16(34429), + 164: uint16(38539), + 165: uint16(38543), + 166: uint16(32485), + 167: uint16(39635), + 168: uint16(30862), + 169: uint16(23681), + 170: uint16(31319), + 171: uint16(36930), + 172: uint16(38567), + 173: uint16(31071), + 174: uint16(23385), + 175: uint16(25439), + 176: uint16(31499), + 177: uint16(34001), + 178: uint16(26797), + 179: uint16(21766), + 180: uint16(32553), + 181: uint16(29712), + 182: uint16(32034), + 183: uint16(38145), + 184: uint16(25152), + 185: uint16(22604), + 186: uint16(20182), + 187: uint16(23427), + 188: uint16(22905), + 189: uint16(22612), + }, + 75: { + 0: uint16(34297), + 1: uint16(34298), + 2: uint16(34300), + 3: uint16(34301), + 4: uint16(34302), + 5: uint16(34304), + 6: uint16(34305), + 7: uint16(34306), + 8: uint16(34307), + 9: uint16(34308), + 10: uint16(34310), + 11: uint16(34311), + 12: uint16(34312), + 13: uint16(34313), + 14: uint16(34314), + 15: uint16(34315), + 16: uint16(34316), + 17: uint16(34317), + 18: uint16(34318), + 19: uint16(34319), + 20: uint16(34320), + 21: uint16(34322), + 22: uint16(34323), + 23: uint16(34324), + 24: uint16(34325), + 25: uint16(34327), + 26: uint16(34328), + 27: uint16(34329), + 28: uint16(34330), + 29: uint16(34331), + 30: uint16(34332), + 31: uint16(34333), + 32: uint16(34334), + 33: uint16(34335), + 34: uint16(34336), + 35: uint16(34337), + 36: uint16(34338), + 37: uint16(34339), + 38: uint16(34340), + 39: uint16(34341), + 40: uint16(34342), + 41: uint16(34344), + 42: uint16(34346), + 43: uint16(34347), + 44: uint16(34348), + 45: uint16(34349), + 46: uint16(34350), + 47: uint16(34351), + 48: uint16(34352), + 49: uint16(34353), + 50: uint16(34354), + 51: uint16(34355), + 52: uint16(34356), + 53: uint16(34357), + 54: uint16(34358), + 55: uint16(34359), + 56: uint16(34361), + 57: uint16(34362), + 58: uint16(34363), + 59: uint16(34365), + 60: uint16(34366), + 61: uint16(34367), + 62: uint16(34368), + 63: uint16(34369), + 64: uint16(34370), + 65: uint16(34371), + 66: uint16(34372), + 67: uint16(34373), + 68: uint16(34374), + 69: uint16(34375), + 70: uint16(34376), + 71: uint16(34377), + 72: uint16(34378), + 73: uint16(34379), + 74: uint16(34380), + 75: uint16(34386), + 76: uint16(34387), + 77: uint16(34389), + 78: uint16(34390), + 79: uint16(34391), + 80: uint16(34392), + 81: uint16(34393), + 82: uint16(34395), + 83: uint16(34396), + 84: uint16(34397), + 85: uint16(34399), + 86: uint16(34400), + 87: uint16(34401), + 88: uint16(34403), + 89: uint16(34404), + 90: uint16(34405), + 91: uint16(34406), + 92: uint16(34407), + 93: uint16(34408), + 94: uint16(34409), + 95: uint16(34410), + 96: uint16(29549), + 97: uint16(25374), + 98: uint16(36427), + 99: uint16(36367), + 100: uint16(32974), + 101: uint16(33492), + 102: uint16(25260), + 103: uint16(21488), + 104: uint16(27888), + 105: uint16(37214), + 106: uint16(22826), + 107: uint16(24577), + 108: uint16(27760), + 109: uint16(22349), + 110: uint16(25674), + 111: uint16(36138), + 112: uint16(30251), + 113: uint16(28393), + 114: uint16(22363), + 115: uint16(27264), + 116: uint16(30192), + 117: uint16(28525), + 118: uint16(35885), + 119: uint16(35848), + 120: uint16(22374), + 121: uint16(27631), + 122: uint16(34962), + 123: uint16(30899), + 124: uint16(25506), + 125: uint16(21497), + 126: uint16(28845), + 127: uint16(27748), + 128: uint16(22616), + 129: uint16(25642), + 130: uint16(22530), + 131: uint16(26848), + 132: uint16(33179), + 133: uint16(21776), + 134: uint16(31958), + 135: uint16(20504), + 136: uint16(36538), + 137: uint16(28108), + 138: uint16(36255), + 139: uint16(28907), + 140: uint16(25487), + 141: uint16(28059), + 142: uint16(28372), + 143: uint16(32486), + 144: uint16(33796), + 145: uint16(26691), + 146: uint16(36867), + 147: uint16(28120), + 148: uint16(38518), + 149: uint16(35752), + 150: uint16(22871), + 151: uint16(29305), + 152: uint16(34276), + 153: uint16(33150), + 154: uint16(30140), + 155: uint16(35466), + 156: uint16(26799), + 157: uint16(21076), + 158: uint16(36386), + 159: uint16(38161), + 160: uint16(25552), + 161: uint16(39064), + 162: uint16(36420), + 163: uint16(21884), + 164: uint16(20307), + 165: uint16(26367), + 166: uint16(22159), + 167: uint16(24789), + 168: uint16(28053), + 169: uint16(21059), + 170: uint16(23625), + 171: uint16(22825), + 172: uint16(28155), + 173: uint16(22635), + 174: uint16(30000), + 175: uint16(29980), + 176: uint16(24684), + 177: uint16(33300), + 178: uint16(33094), + 179: uint16(25361), + 180: uint16(26465), + 181: uint16(36834), + 182: uint16(30522), + 183: uint16(36339), + 184: uint16(36148), + 185: uint16(38081), + 186: uint16(24086), + 187: uint16(21381), + 188: uint16(21548), + 189: uint16(28867), + }, + 76: { + 0: uint16(34413), + 1: uint16(34415), + 2: uint16(34416), + 3: uint16(34418), + 4: uint16(34419), + 5: uint16(34420), + 6: uint16(34421), + 7: uint16(34422), + 8: uint16(34423), + 9: uint16(34424), + 10: uint16(34435), + 11: uint16(34436), + 12: uint16(34437), + 13: uint16(34438), + 14: uint16(34439), + 15: uint16(34440), + 16: uint16(34441), + 17: uint16(34446), + 18: uint16(34447), + 19: uint16(34448), + 20: uint16(34449), + 21: uint16(34450), + 22: uint16(34452), + 23: uint16(34454), + 24: uint16(34455), + 25: uint16(34456), + 26: uint16(34457), + 27: uint16(34458), + 28: uint16(34459), + 29: uint16(34462), + 30: uint16(34463), + 31: uint16(34464), + 32: uint16(34465), + 33: uint16(34466), + 34: uint16(34469), + 35: uint16(34470), + 36: uint16(34475), + 37: uint16(34477), + 38: uint16(34478), + 39: uint16(34482), + 40: uint16(34483), + 41: uint16(34487), + 42: uint16(34488), + 43: uint16(34489), + 44: uint16(34491), + 45: uint16(34492), + 46: uint16(34493), + 47: uint16(34494), + 48: uint16(34495), + 49: uint16(34497), + 50: uint16(34498), + 51: uint16(34499), + 52: uint16(34501), + 53: uint16(34504), + 54: uint16(34508), + 55: uint16(34509), + 56: uint16(34514), + 57: uint16(34515), + 58: uint16(34517), + 59: uint16(34518), + 60: uint16(34519), + 61: uint16(34522), + 62: uint16(34524), + 63: uint16(34525), + 64: uint16(34528), + 65: uint16(34529), + 66: uint16(34530), + 67: uint16(34531), + 68: uint16(34533), + 69: uint16(34534), + 70: uint16(34535), + 71: uint16(34536), + 72: uint16(34538), + 73: uint16(34539), + 74: uint16(34540), + 75: uint16(34543), + 76: uint16(34549), + 77: uint16(34550), + 78: uint16(34551), + 79: uint16(34554), + 80: uint16(34555), + 81: uint16(34556), + 82: uint16(34557), + 83: uint16(34559), + 84: uint16(34561), + 85: uint16(34564), + 86: uint16(34565), + 87: uint16(34566), + 88: uint16(34571), + 89: uint16(34572), + 90: uint16(34574), + 91: uint16(34575), + 92: uint16(34576), + 93: uint16(34577), + 94: uint16(34580), + 95: uint16(34582), + 96: uint16(27712), + 97: uint16(24311), + 98: uint16(20572), + 99: uint16(20141), + 100: uint16(24237), + 101: uint16(25402), + 102: uint16(33351), + 103: uint16(36890), + 104: uint16(26704), + 105: uint16(37230), + 106: uint16(30643), + 107: uint16(21516), + 108: uint16(38108), + 109: uint16(24420), + 110: uint16(31461), + 111: uint16(26742), + 112: uint16(25413), + 113: uint16(31570), + 114: uint16(32479), + 115: uint16(30171), + 116: uint16(20599), + 117: uint16(25237), + 118: uint16(22836), + 119: uint16(36879), + 120: uint16(20984), + 121: uint16(31171), + 122: uint16(31361), + 123: uint16(22270), + 124: uint16(24466), + 125: uint16(36884), + 126: uint16(28034), + 127: uint16(23648), + 128: uint16(22303), + 129: uint16(21520), + 130: uint16(20820), + 131: uint16(28237), + 132: uint16(22242), + 133: uint16(25512), + 134: uint16(39059), + 135: uint16(33151), + 136: uint16(34581), + 137: uint16(35114), + 138: uint16(36864), + 139: uint16(21534), + 140: uint16(23663), + 141: uint16(33216), + 142: uint16(25302), + 143: uint16(25176), + 144: uint16(33073), + 145: uint16(40501), + 146: uint16(38464), + 147: uint16(39534), + 148: uint16(39548), + 149: uint16(26925), + 150: uint16(22949), + 151: uint16(25299), + 152: uint16(21822), + 153: uint16(25366), + 154: uint16(21703), + 155: uint16(34521), + 156: uint16(27964), + 157: uint16(23043), + 158: uint16(29926), + 159: uint16(34972), + 160: uint16(27498), + 161: uint16(22806), + 162: uint16(35916), + 163: uint16(24367), + 164: uint16(28286), + 165: uint16(29609), + 166: uint16(39037), + 167: uint16(20024), + 168: uint16(28919), + 169: uint16(23436), + 170: uint16(30871), + 171: uint16(25405), + 172: uint16(26202), + 173: uint16(30358), + 174: uint16(24779), + 175: uint16(23451), + 176: uint16(23113), + 177: uint16(19975), + 178: uint16(33109), + 179: uint16(27754), + 180: uint16(29579), + 181: uint16(20129), + 182: uint16(26505), + 183: uint16(32593), + 184: uint16(24448), + 185: uint16(26106), + 186: uint16(26395), + 187: uint16(24536), + 188: uint16(22916), + 189: uint16(23041), + }, + 77: { + 0: uint16(34585), + 1: uint16(34587), + 2: uint16(34589), + 3: uint16(34591), + 4: uint16(34592), + 5: uint16(34596), + 6: uint16(34598), + 7: uint16(34599), + 8: uint16(34600), + 9: uint16(34602), + 10: uint16(34603), + 11: uint16(34604), + 12: uint16(34605), + 13: uint16(34607), + 14: uint16(34608), + 15: uint16(34610), + 16: uint16(34611), + 17: uint16(34613), + 18: uint16(34614), + 19: uint16(34616), + 20: uint16(34617), + 21: uint16(34618), + 22: uint16(34620), + 23: uint16(34621), + 24: uint16(34624), + 25: uint16(34625), + 26: uint16(34626), + 27: uint16(34627), + 28: uint16(34628), + 29: uint16(34629), + 30: uint16(34630), + 31: uint16(34634), + 32: uint16(34635), + 33: uint16(34637), + 34: uint16(34639), + 35: uint16(34640), + 36: uint16(34641), + 37: uint16(34642), + 38: uint16(34644), + 39: uint16(34645), + 40: uint16(34646), + 41: uint16(34648), + 42: uint16(34650), + 43: uint16(34651), + 44: uint16(34652), + 45: uint16(34653), + 46: uint16(34654), + 47: uint16(34655), + 48: uint16(34657), + 49: uint16(34658), + 50: uint16(34662), + 51: uint16(34663), + 52: uint16(34664), + 53: uint16(34665), + 54: uint16(34666), + 55: uint16(34667), + 56: uint16(34668), + 57: uint16(34669), + 58: uint16(34671), + 59: uint16(34673), + 60: uint16(34674), + 61: uint16(34675), + 62: uint16(34677), + 63: uint16(34679), + 64: uint16(34680), + 65: uint16(34681), + 66: uint16(34682), + 67: uint16(34687), + 68: uint16(34688), + 69: uint16(34689), + 70: uint16(34692), + 71: uint16(34694), + 72: uint16(34695), + 73: uint16(34697), + 74: uint16(34698), + 75: uint16(34700), + 76: uint16(34702), + 77: uint16(34703), + 78: uint16(34704), + 79: uint16(34705), + 80: uint16(34706), + 81: uint16(34708), + 82: uint16(34709), + 83: uint16(34710), + 84: uint16(34712), + 85: uint16(34713), + 86: uint16(34714), + 87: uint16(34715), + 88: uint16(34716), + 89: uint16(34717), + 90: uint16(34718), + 91: uint16(34720), + 92: uint16(34721), + 93: uint16(34722), + 94: uint16(34723), + 95: uint16(34724), + 96: uint16(24013), + 97: uint16(24494), + 98: uint16(21361), + 99: uint16(38886), + 100: uint16(36829), + 101: uint16(26693), + 102: uint16(22260), + 103: uint16(21807), + 104: uint16(24799), + 105: uint16(20026), + 106: uint16(28493), + 107: uint16(32500), + 108: uint16(33479), + 109: uint16(33806), + 110: uint16(22996), + 111: uint16(20255), + 112: uint16(20266), + 113: uint16(23614), + 114: uint16(32428), + 115: uint16(26410), + 116: uint16(34074), + 117: uint16(21619), + 118: uint16(30031), + 119: uint16(32963), + 120: uint16(21890), + 121: uint16(39759), + 122: uint16(20301), + 123: uint16(28205), + 124: uint16(35859), + 125: uint16(23561), + 126: uint16(24944), + 127: uint16(21355), + 128: uint16(30239), + 129: uint16(28201), + 130: uint16(34442), + 131: uint16(25991), + 132: uint16(38395), + 133: uint16(32441), + 134: uint16(21563), + 135: uint16(31283), + 136: uint16(32010), + 137: uint16(38382), + 138: uint16(21985), + 139: uint16(32705), + 140: uint16(29934), + 141: uint16(25373), + 142: uint16(34583), + 143: uint16(28065), + 144: uint16(31389), + 145: uint16(25105), + 146: uint16(26017), + 147: uint16(21351), + 148: uint16(25569), + 149: uint16(27779), + 150: uint16(24043), + 151: uint16(21596), + 152: uint16(38056), + 153: uint16(20044), + 154: uint16(27745), + 155: uint16(35820), + 156: uint16(23627), + 157: uint16(26080), + 158: uint16(33436), + 159: uint16(26791), + 160: uint16(21566), + 161: uint16(21556), + 162: uint16(27595), + 163: uint16(27494), + 164: uint16(20116), + 165: uint16(25410), + 166: uint16(21320), + 167: uint16(33310), + 168: uint16(20237), + 169: uint16(20398), + 170: uint16(22366), + 171: uint16(25098), + 172: uint16(38654), + 173: uint16(26212), + 174: uint16(29289), + 175: uint16(21247), + 176: uint16(21153), + 177: uint16(24735), + 178: uint16(35823), + 179: uint16(26132), + 180: uint16(29081), + 181: uint16(26512), + 182: uint16(35199), + 183: uint16(30802), + 184: uint16(30717), + 185: uint16(26224), + 186: uint16(22075), + 187: uint16(21560), + 188: uint16(38177), + 189: uint16(29306), + }, + 78: { + 0: uint16(34725), + 1: uint16(34726), + 2: uint16(34727), + 3: uint16(34729), + 4: uint16(34730), + 5: uint16(34734), + 6: uint16(34736), + 7: uint16(34737), + 8: uint16(34738), + 9: uint16(34740), + 10: uint16(34742), + 11: uint16(34743), + 12: uint16(34744), + 13: uint16(34745), + 14: uint16(34747), + 15: uint16(34748), + 16: uint16(34750), + 17: uint16(34751), + 18: uint16(34753), + 19: uint16(34754), + 20: uint16(34755), + 21: uint16(34756), + 22: uint16(34757), + 23: uint16(34759), + 24: uint16(34760), + 25: uint16(34761), + 26: uint16(34764), + 27: uint16(34765), + 28: uint16(34766), + 29: uint16(34767), + 30: uint16(34768), + 31: uint16(34772), + 32: uint16(34773), + 33: uint16(34774), + 34: uint16(34775), + 35: uint16(34776), + 36: uint16(34777), + 37: uint16(34778), + 38: uint16(34780), + 39: uint16(34781), + 40: uint16(34782), + 41: uint16(34783), + 42: uint16(34785), + 43: uint16(34786), + 44: uint16(34787), + 45: uint16(34788), + 46: uint16(34790), + 47: uint16(34791), + 48: uint16(34792), + 49: uint16(34793), + 50: uint16(34795), + 51: uint16(34796), + 52: uint16(34797), + 53: uint16(34799), + 54: uint16(34800), + 55: uint16(34801), + 56: uint16(34802), + 57: uint16(34803), + 58: uint16(34804), + 59: uint16(34805), + 60: uint16(34806), + 61: uint16(34807), + 62: uint16(34808), + 63: uint16(34810), + 64: uint16(34811), + 65: uint16(34812), + 66: uint16(34813), + 67: uint16(34815), + 68: uint16(34816), + 69: uint16(34817), + 70: uint16(34818), + 71: uint16(34820), + 72: uint16(34821), + 73: uint16(34822), + 74: uint16(34823), + 75: uint16(34824), + 76: uint16(34825), + 77: uint16(34827), + 78: uint16(34828), + 79: uint16(34829), + 80: uint16(34830), + 81: uint16(34831), + 82: uint16(34832), + 83: uint16(34833), + 84: uint16(34834), + 85: uint16(34836), + 86: uint16(34839), + 87: uint16(34840), + 88: uint16(34841), + 89: uint16(34842), + 90: uint16(34844), + 91: uint16(34845), + 92: uint16(34846), + 93: uint16(34847), + 94: uint16(34848), + 95: uint16(34851), + 96: uint16(31232), + 97: uint16(24687), + 98: uint16(24076), + 99: uint16(24713), + 100: uint16(33181), + 101: uint16(22805), + 102: uint16(24796), + 103: uint16(29060), + 104: uint16(28911), + 105: uint16(28330), + 106: uint16(27728), + 107: uint16(29312), + 108: uint16(27268), + 109: uint16(34989), + 110: uint16(24109), + 111: uint16(20064), + 112: uint16(23219), + 113: uint16(21916), + 114: uint16(38115), + 115: uint16(27927), + 116: uint16(31995), + 117: uint16(38553), + 118: uint16(25103), + 119: uint16(32454), + 120: uint16(30606), + 121: uint16(34430), + 122: uint16(21283), + 123: uint16(38686), + 124: uint16(36758), + 125: uint16(26247), + 126: uint16(23777), + 127: uint16(20384), + 128: uint16(29421), + 129: uint16(19979), + 130: uint16(21414), + 131: uint16(22799), + 132: uint16(21523), + 133: uint16(25472), + 134: uint16(38184), + 135: uint16(20808), + 136: uint16(20185), + 137: uint16(40092), + 138: uint16(32420), + 139: uint16(21688), + 140: uint16(36132), + 141: uint16(34900), + 142: uint16(33335), + 143: uint16(38386), + 144: uint16(28046), + 145: uint16(24358), + 146: uint16(23244), + 147: uint16(26174), + 148: uint16(38505), + 149: uint16(29616), + 150: uint16(29486), + 151: uint16(21439), + 152: uint16(33146), + 153: uint16(39301), + 154: uint16(32673), + 155: uint16(23466), + 156: uint16(38519), + 157: uint16(38480), + 158: uint16(32447), + 159: uint16(30456), + 160: uint16(21410), + 161: uint16(38262), + 162: uint16(39321), + 163: uint16(31665), + 164: uint16(35140), + 165: uint16(28248), + 166: uint16(20065), + 167: uint16(32724), + 168: uint16(31077), + 169: uint16(35814), + 170: uint16(24819), + 171: uint16(21709), + 172: uint16(20139), + 173: uint16(39033), + 174: uint16(24055), + 175: uint16(27233), + 176: uint16(20687), + 177: uint16(21521), + 178: uint16(35937), + 179: uint16(33831), + 180: uint16(30813), + 181: uint16(38660), + 182: uint16(21066), + 183: uint16(21742), + 184: uint16(22179), + 185: uint16(38144), + 186: uint16(28040), + 187: uint16(23477), + 188: uint16(28102), + 189: uint16(26195), + }, + 79: { + 0: uint16(34852), + 1: uint16(34853), + 2: uint16(34854), + 3: uint16(34855), + 4: uint16(34856), + 5: uint16(34857), + 6: uint16(34858), + 7: uint16(34859), + 8: uint16(34860), + 9: uint16(34861), + 10: uint16(34862), + 11: uint16(34863), + 12: uint16(34864), + 13: uint16(34865), + 14: uint16(34867), + 15: uint16(34868), + 16: uint16(34869), + 17: uint16(34870), + 18: uint16(34871), + 19: uint16(34872), + 20: uint16(34874), + 21: uint16(34875), + 22: uint16(34877), + 23: uint16(34878), + 24: uint16(34879), + 25: uint16(34881), + 26: uint16(34882), + 27: uint16(34883), + 28: uint16(34886), + 29: uint16(34887), + 30: uint16(34888), + 31: uint16(34889), + 32: uint16(34890), + 33: uint16(34891), + 34: uint16(34894), + 35: uint16(34895), + 36: uint16(34896), + 37: uint16(34897), + 38: uint16(34898), + 39: uint16(34899), + 40: uint16(34901), + 41: uint16(34902), + 42: uint16(34904), + 43: uint16(34906), + 44: uint16(34907), + 45: uint16(34908), + 46: uint16(34909), + 47: uint16(34910), + 48: uint16(34911), + 49: uint16(34912), + 50: uint16(34918), + 51: uint16(34919), + 52: uint16(34922), + 53: uint16(34925), + 54: uint16(34927), + 55: uint16(34929), + 56: uint16(34931), + 57: uint16(34932), + 58: uint16(34933), + 59: uint16(34934), + 60: uint16(34936), + 61: uint16(34937), + 62: uint16(34938), + 63: uint16(34939), + 64: uint16(34940), + 65: uint16(34944), + 66: uint16(34947), + 67: uint16(34950), + 68: uint16(34951), + 69: uint16(34953), + 70: uint16(34954), + 71: uint16(34956), + 72: uint16(34958), + 73: uint16(34959), + 74: uint16(34960), + 75: uint16(34961), + 76: uint16(34963), + 77: uint16(34964), + 78: uint16(34965), + 79: uint16(34967), + 80: uint16(34968), + 81: uint16(34969), + 82: uint16(34970), + 83: uint16(34971), + 84: uint16(34973), + 85: uint16(34974), + 86: uint16(34975), + 87: uint16(34976), + 88: uint16(34977), + 89: uint16(34979), + 90: uint16(34981), + 91: uint16(34982), + 92: uint16(34983), + 93: uint16(34984), + 94: uint16(34985), + 95: uint16(34986), + 96: uint16(23567), + 97: uint16(23389), + 98: uint16(26657), + 99: uint16(32918), + 100: uint16(21880), + 101: uint16(31505), + 102: uint16(25928), + 103: uint16(26964), + 104: uint16(20123), + 105: uint16(27463), + 106: uint16(34638), + 107: uint16(38795), + 108: uint16(21327), + 109: uint16(25375), + 110: uint16(25658), + 111: uint16(37034), + 112: uint16(26012), + 113: uint16(32961), + 114: uint16(35856), + 115: uint16(20889), + 116: uint16(26800), + 117: uint16(21368), + 118: uint16(34809), + 119: uint16(25032), + 120: uint16(27844), + 121: uint16(27899), + 122: uint16(35874), + 123: uint16(23633), + 124: uint16(34218), + 125: uint16(33455), + 126: uint16(38156), + 127: uint16(27427), + 128: uint16(36763), + 129: uint16(26032), + 130: uint16(24571), + 131: uint16(24515), + 132: uint16(20449), + 133: uint16(34885), + 134: uint16(26143), + 135: uint16(33125), + 136: uint16(29481), + 137: uint16(24826), + 138: uint16(20852), + 139: uint16(21009), + 140: uint16(22411), + 141: uint16(24418), + 142: uint16(37026), + 143: uint16(34892), + 144: uint16(37266), + 145: uint16(24184), + 146: uint16(26447), + 147: uint16(24615), + 148: uint16(22995), + 149: uint16(20804), + 150: uint16(20982), + 151: uint16(33016), + 152: uint16(21256), + 153: uint16(27769), + 154: uint16(38596), + 155: uint16(29066), + 156: uint16(20241), + 157: uint16(20462), + 158: uint16(32670), + 159: uint16(26429), + 160: uint16(21957), + 161: uint16(38152), + 162: uint16(31168), + 163: uint16(34966), + 164: uint16(32483), + 165: uint16(22687), + 166: uint16(25100), + 167: uint16(38656), + 168: uint16(34394), + 169: uint16(22040), + 170: uint16(39035), + 171: uint16(24464), + 172: uint16(35768), + 173: uint16(33988), + 174: uint16(37207), + 175: uint16(21465), + 176: uint16(26093), + 177: uint16(24207), + 178: uint16(30044), + 179: uint16(24676), + 180: uint16(32110), + 181: uint16(23167), + 182: uint16(32490), + 183: uint16(32493), + 184: uint16(36713), + 185: uint16(21927), + 186: uint16(23459), + 187: uint16(24748), + 188: uint16(26059), + 189: uint16(29572), + }, + 80: { + 0: uint16(34988), + 1: uint16(34990), + 2: uint16(34991), + 3: uint16(34992), + 4: uint16(34994), + 5: uint16(34995), + 6: uint16(34996), + 7: uint16(34997), + 8: uint16(34998), + 9: uint16(35000), + 10: uint16(35001), + 11: uint16(35002), + 12: uint16(35003), + 13: uint16(35005), + 14: uint16(35006), + 15: uint16(35007), + 16: uint16(35008), + 17: uint16(35011), + 18: uint16(35012), + 19: uint16(35015), + 20: uint16(35016), + 21: uint16(35018), + 22: uint16(35019), + 23: uint16(35020), + 24: uint16(35021), + 25: uint16(35023), + 26: uint16(35024), + 27: uint16(35025), + 28: uint16(35027), + 29: uint16(35030), + 30: uint16(35031), + 31: uint16(35034), + 32: uint16(35035), + 33: uint16(35036), + 34: uint16(35037), + 35: uint16(35038), + 36: uint16(35040), + 37: uint16(35041), + 38: uint16(35046), + 39: uint16(35047), + 40: uint16(35049), + 41: uint16(35050), + 42: uint16(35051), + 43: uint16(35052), + 44: uint16(35053), + 45: uint16(35054), + 46: uint16(35055), + 47: uint16(35058), + 48: uint16(35061), + 49: uint16(35062), + 50: uint16(35063), + 51: uint16(35066), + 52: uint16(35067), + 53: uint16(35069), + 54: uint16(35071), + 55: uint16(35072), + 56: uint16(35073), + 57: uint16(35075), + 58: uint16(35076), + 59: uint16(35077), + 60: uint16(35078), + 61: uint16(35079), + 62: uint16(35080), + 63: uint16(35081), + 64: uint16(35083), + 65: uint16(35084), + 66: uint16(35085), + 67: uint16(35086), + 68: uint16(35087), + 69: uint16(35089), + 70: uint16(35092), + 71: uint16(35093), + 72: uint16(35094), + 73: uint16(35095), + 74: uint16(35096), + 75: uint16(35100), + 76: uint16(35101), + 77: uint16(35102), + 78: uint16(35103), + 79: uint16(35104), + 80: uint16(35106), + 81: uint16(35107), + 82: uint16(35108), + 83: uint16(35110), + 84: uint16(35111), + 85: uint16(35112), + 86: uint16(35113), + 87: uint16(35116), + 88: uint16(35117), + 89: uint16(35118), + 90: uint16(35119), + 91: uint16(35121), + 92: uint16(35122), + 93: uint16(35123), + 94: uint16(35125), + 95: uint16(35127), + 96: uint16(36873), + 97: uint16(30307), + 98: uint16(30505), + 99: uint16(32474), + 100: uint16(38772), + 101: uint16(34203), + 102: uint16(23398), + 103: uint16(31348), + 104: uint16(38634), + 105: uint16(34880), + 106: uint16(21195), + 107: uint16(29071), + 108: uint16(24490), + 109: uint16(26092), + 110: uint16(35810), + 111: uint16(23547), + 112: uint16(39535), + 113: uint16(24033), + 114: uint16(27529), + 115: uint16(27739), + 116: uint16(35757), + 117: uint16(35759), + 118: uint16(36874), + 119: uint16(36805), + 120: uint16(21387), + 121: uint16(25276), + 122: uint16(40486), + 123: uint16(40493), + 124: uint16(21568), + 125: uint16(20011), + 126: uint16(33469), + 127: uint16(29273), + 128: uint16(34460), + 129: uint16(23830), + 130: uint16(34905), + 131: uint16(28079), + 132: uint16(38597), + 133: uint16(21713), + 134: uint16(20122), + 135: uint16(35766), + 136: uint16(28937), + 137: uint16(21693), + 138: uint16(38409), + 139: uint16(28895), + 140: uint16(28153), + 141: uint16(30416), + 142: uint16(20005), + 143: uint16(30740), + 144: uint16(34578), + 145: uint16(23721), + 146: uint16(24310), + 147: uint16(35328), + 148: uint16(39068), + 149: uint16(38414), + 150: uint16(28814), + 151: uint16(27839), + 152: uint16(22852), + 153: uint16(25513), + 154: uint16(30524), + 155: uint16(34893), + 156: uint16(28436), + 157: uint16(33395), + 158: uint16(22576), + 159: uint16(29141), + 160: uint16(21388), + 161: uint16(30746), + 162: uint16(38593), + 163: uint16(21761), + 164: uint16(24422), + 165: uint16(28976), + 166: uint16(23476), + 167: uint16(35866), + 168: uint16(39564), + 169: uint16(27523), + 170: uint16(22830), + 171: uint16(40495), + 172: uint16(31207), + 173: uint16(26472), + 174: uint16(25196), + 175: uint16(20335), + 176: uint16(30113), + 177: uint16(32650), + 178: uint16(27915), + 179: uint16(38451), + 180: uint16(27687), + 181: uint16(20208), + 182: uint16(30162), + 183: uint16(20859), + 184: uint16(26679), + 185: uint16(28478), + 186: uint16(36992), + 187: uint16(33136), + 188: uint16(22934), + 189: uint16(29814), + }, + 81: { + 0: uint16(35128), + 1: uint16(35129), + 2: uint16(35130), + 3: uint16(35131), + 4: uint16(35132), + 5: uint16(35133), + 6: uint16(35134), + 7: uint16(35135), + 8: uint16(35136), + 9: uint16(35138), + 10: uint16(35139), + 11: uint16(35141), + 12: uint16(35142), + 13: uint16(35143), + 14: uint16(35144), + 15: uint16(35145), + 16: uint16(35146), + 17: uint16(35147), + 18: uint16(35148), + 19: uint16(35149), + 20: uint16(35150), + 21: uint16(35151), + 22: uint16(35152), + 23: uint16(35153), + 24: uint16(35154), + 25: uint16(35155), + 26: uint16(35156), + 27: uint16(35157), + 28: uint16(35158), + 29: uint16(35159), + 30: uint16(35160), + 31: uint16(35161), + 32: uint16(35162), + 33: uint16(35163), + 34: uint16(35164), + 35: uint16(35165), + 36: uint16(35168), + 37: uint16(35169), + 38: uint16(35170), + 39: uint16(35171), + 40: uint16(35172), + 41: uint16(35173), + 42: uint16(35175), + 43: uint16(35176), + 44: uint16(35177), + 45: uint16(35178), + 46: uint16(35179), + 47: uint16(35180), + 48: uint16(35181), + 49: uint16(35182), + 50: uint16(35183), + 51: uint16(35184), + 52: uint16(35185), + 53: uint16(35186), + 54: uint16(35187), + 55: uint16(35188), + 56: uint16(35189), + 57: uint16(35190), + 58: uint16(35191), + 59: uint16(35192), + 60: uint16(35193), + 61: uint16(35194), + 62: uint16(35196), + 63: uint16(35197), + 64: uint16(35198), + 65: uint16(35200), + 66: uint16(35202), + 67: uint16(35204), + 68: uint16(35205), + 69: uint16(35207), + 70: uint16(35208), + 71: uint16(35209), + 72: uint16(35210), + 73: uint16(35211), + 74: uint16(35212), + 75: uint16(35213), + 76: uint16(35214), + 77: uint16(35215), + 78: uint16(35216), + 79: uint16(35217), + 80: uint16(35218), + 81: uint16(35219), + 82: uint16(35220), + 83: uint16(35221), + 84: uint16(35222), + 85: uint16(35223), + 86: uint16(35224), + 87: uint16(35225), + 88: uint16(35226), + 89: uint16(35227), + 90: uint16(35228), + 91: uint16(35229), + 92: uint16(35230), + 93: uint16(35231), + 94: uint16(35232), + 95: uint16(35233), + 96: uint16(25671), + 97: uint16(23591), + 98: uint16(36965), + 99: uint16(31377), + 100: uint16(35875), + 101: uint16(23002), + 102: uint16(21676), + 103: uint16(33280), + 104: uint16(33647), + 105: uint16(35201), + 106: uint16(32768), + 107: uint16(26928), + 108: uint16(22094), + 109: uint16(32822), + 110: uint16(29239), + 111: uint16(37326), + 112: uint16(20918), + 113: uint16(20063), + 114: uint16(39029), + 115: uint16(25494), + 116: uint16(19994), + 117: uint16(21494), + 118: uint16(26355), + 119: uint16(33099), + 120: uint16(22812), + 121: uint16(28082), + 122: uint16(19968), + 123: uint16(22777), + 124: uint16(21307), + 125: uint16(25558), + 126: uint16(38129), + 127: uint16(20381), + 128: uint16(20234), + 129: uint16(34915), + 130: uint16(39056), + 131: uint16(22839), + 132: uint16(36951), + 133: uint16(31227), + 134: uint16(20202), + 135: uint16(33008), + 136: uint16(30097), + 137: uint16(27778), + 138: uint16(23452), + 139: uint16(23016), + 140: uint16(24413), + 141: uint16(26885), + 142: uint16(34433), + 143: uint16(20506), + 144: uint16(24050), + 145: uint16(20057), + 146: uint16(30691), + 147: uint16(20197), + 148: uint16(33402), + 149: uint16(25233), + 150: uint16(26131), + 151: uint16(37009), + 152: uint16(23673), + 153: uint16(20159), + 154: uint16(24441), + 155: uint16(33222), + 156: uint16(36920), + 157: uint16(32900), + 158: uint16(30123), + 159: uint16(20134), + 160: uint16(35028), + 161: uint16(24847), + 162: uint16(27589), + 163: uint16(24518), + 164: uint16(20041), + 165: uint16(30410), + 166: uint16(28322), + 167: uint16(35811), + 168: uint16(35758), + 169: uint16(35850), + 170: uint16(35793), + 171: uint16(24322), + 172: uint16(32764), + 173: uint16(32716), + 174: uint16(32462), + 175: uint16(33589), + 176: uint16(33643), + 177: uint16(22240), + 178: uint16(27575), + 179: uint16(38899), + 180: uint16(38452), + 181: uint16(23035), + 182: uint16(21535), + 183: uint16(38134), + 184: uint16(28139), + 185: uint16(23493), + 186: uint16(39278), + 187: uint16(23609), + 188: uint16(24341), + 189: uint16(38544), + }, + 82: { + 0: uint16(35234), + 1: uint16(35235), + 2: uint16(35236), + 3: uint16(35237), + 4: uint16(35238), + 5: uint16(35239), + 6: uint16(35240), + 7: uint16(35241), + 8: uint16(35242), + 9: uint16(35243), + 10: uint16(35244), + 11: uint16(35245), + 12: uint16(35246), + 13: uint16(35247), + 14: uint16(35248), + 15: uint16(35249), + 16: uint16(35250), + 17: uint16(35251), + 18: uint16(35252), + 19: uint16(35253), + 20: uint16(35254), + 21: uint16(35255), + 22: uint16(35256), + 23: uint16(35257), + 24: uint16(35258), + 25: uint16(35259), + 26: uint16(35260), + 27: uint16(35261), + 28: uint16(35262), + 29: uint16(35263), + 30: uint16(35264), + 31: uint16(35267), + 32: uint16(35277), + 33: uint16(35283), + 34: uint16(35284), + 35: uint16(35285), + 36: uint16(35287), + 37: uint16(35288), + 38: uint16(35289), + 39: uint16(35291), + 40: uint16(35293), + 41: uint16(35295), + 42: uint16(35296), + 43: uint16(35297), + 44: uint16(35298), + 45: uint16(35300), + 46: uint16(35303), + 47: uint16(35304), + 48: uint16(35305), + 49: uint16(35306), + 50: uint16(35308), + 51: uint16(35309), + 52: uint16(35310), + 53: uint16(35312), + 54: uint16(35313), + 55: uint16(35314), + 56: uint16(35316), + 57: uint16(35317), + 58: uint16(35318), + 59: uint16(35319), + 60: uint16(35320), + 61: uint16(35321), + 62: uint16(35322), + 63: uint16(35323), + 64: uint16(35324), + 65: uint16(35325), + 66: uint16(35326), + 67: uint16(35327), + 68: uint16(35329), + 69: uint16(35330), + 70: uint16(35331), + 71: uint16(35332), + 72: uint16(35333), + 73: uint16(35334), + 74: uint16(35336), + 75: uint16(35337), + 76: uint16(35338), + 77: uint16(35339), + 78: uint16(35340), + 79: uint16(35341), + 80: uint16(35342), + 81: uint16(35343), + 82: uint16(35344), + 83: uint16(35345), + 84: uint16(35346), + 85: uint16(35347), + 86: uint16(35348), + 87: uint16(35349), + 88: uint16(35350), + 89: uint16(35351), + 90: uint16(35352), + 91: uint16(35353), + 92: uint16(35354), + 93: uint16(35355), + 94: uint16(35356), + 95: uint16(35357), + 96: uint16(21360), + 97: uint16(33521), + 98: uint16(27185), + 99: uint16(23156), + 100: uint16(40560), + 101: uint16(24212), + 102: uint16(32552), + 103: uint16(33721), + 104: uint16(33828), + 105: uint16(33829), + 106: uint16(33639), + 107: uint16(34631), + 108: uint16(36814), + 109: uint16(36194), + 110: uint16(30408), + 111: uint16(24433), + 112: uint16(39062), + 113: uint16(30828), + 114: uint16(26144), + 115: uint16(21727), + 116: uint16(25317), + 117: uint16(20323), + 118: uint16(33219), + 119: uint16(30152), + 120: uint16(24248), + 121: uint16(38605), + 122: uint16(36362), + 123: uint16(34553), + 124: uint16(21647), + 125: uint16(27891), + 126: uint16(28044), + 127: uint16(27704), + 128: uint16(24703), + 129: uint16(21191), + 130: uint16(29992), + 131: uint16(24189), + 132: uint16(20248), + 133: uint16(24736), + 134: uint16(24551), + 135: uint16(23588), + 136: uint16(30001), + 137: uint16(37038), + 138: uint16(38080), + 139: uint16(29369), + 140: uint16(27833), + 141: uint16(28216), + 142: uint16(37193), + 143: uint16(26377), + 144: uint16(21451), + 145: uint16(21491), + 146: uint16(20305), + 147: uint16(37321), + 148: uint16(35825), + 149: uint16(21448), + 150: uint16(24188), + 151: uint16(36802), + 152: uint16(28132), + 153: uint16(20110), + 154: uint16(30402), + 155: uint16(27014), + 156: uint16(34398), + 157: uint16(24858), + 158: uint16(33286), + 159: uint16(20313), + 160: uint16(20446), + 161: uint16(36926), + 162: uint16(40060), + 163: uint16(24841), + 164: uint16(28189), + 165: uint16(28180), + 166: uint16(38533), + 167: uint16(20104), + 168: uint16(23089), + 169: uint16(38632), + 170: uint16(19982), + 171: uint16(23679), + 172: uint16(31161), + 173: uint16(23431), + 174: uint16(35821), + 175: uint16(32701), + 176: uint16(29577), + 177: uint16(22495), + 178: uint16(33419), + 179: uint16(37057), + 180: uint16(21505), + 181: uint16(36935), + 182: uint16(21947), + 183: uint16(23786), + 184: uint16(24481), + 185: uint16(24840), + 186: uint16(27442), + 187: uint16(29425), + 188: uint16(32946), + 189: uint16(35465), + }, + 83: { + 0: uint16(35358), + 1: uint16(35359), + 2: uint16(35360), + 3: uint16(35361), + 4: uint16(35362), + 5: uint16(35363), + 6: uint16(35364), + 7: uint16(35365), + 8: uint16(35366), + 9: uint16(35367), + 10: uint16(35368), + 11: uint16(35369), + 12: uint16(35370), + 13: uint16(35371), + 14: uint16(35372), + 15: uint16(35373), + 16: uint16(35374), + 17: uint16(35375), + 18: uint16(35376), + 19: uint16(35377), + 20: uint16(35378), + 21: uint16(35379), + 22: uint16(35380), + 23: uint16(35381), + 24: uint16(35382), + 25: uint16(35383), + 26: uint16(35384), + 27: uint16(35385), + 28: uint16(35386), + 29: uint16(35387), + 30: uint16(35388), + 31: uint16(35389), + 32: uint16(35391), + 33: uint16(35392), + 34: uint16(35393), + 35: uint16(35394), + 36: uint16(35395), + 37: uint16(35396), + 38: uint16(35397), + 39: uint16(35398), + 40: uint16(35399), + 41: uint16(35401), + 42: uint16(35402), + 43: uint16(35403), + 44: uint16(35404), + 45: uint16(35405), + 46: uint16(35406), + 47: uint16(35407), + 48: uint16(35408), + 49: uint16(35409), + 50: uint16(35410), + 51: uint16(35411), + 52: uint16(35412), + 53: uint16(35413), + 54: uint16(35414), + 55: uint16(35415), + 56: uint16(35416), + 57: uint16(35417), + 58: uint16(35418), + 59: uint16(35419), + 60: uint16(35420), + 61: uint16(35421), + 62: uint16(35422), + 63: uint16(35423), + 64: uint16(35424), + 65: uint16(35425), + 66: uint16(35426), + 67: uint16(35427), + 68: uint16(35428), + 69: uint16(35429), + 70: uint16(35430), + 71: uint16(35431), + 72: uint16(35432), + 73: uint16(35433), + 74: uint16(35434), + 75: uint16(35435), + 76: uint16(35436), + 77: uint16(35437), + 78: uint16(35438), + 79: uint16(35439), + 80: uint16(35440), + 81: uint16(35441), + 82: uint16(35442), + 83: uint16(35443), + 84: uint16(35444), + 85: uint16(35445), + 86: uint16(35446), + 87: uint16(35447), + 88: uint16(35448), + 89: uint16(35450), + 90: uint16(35451), + 91: uint16(35452), + 92: uint16(35453), + 93: uint16(35454), + 94: uint16(35455), + 95: uint16(35456), + 96: uint16(28020), + 97: uint16(23507), + 98: uint16(35029), + 99: uint16(39044), + 100: uint16(35947), + 101: uint16(39533), + 102: uint16(40499), + 103: uint16(28170), + 104: uint16(20900), + 105: uint16(20803), + 106: uint16(22435), + 107: uint16(34945), + 108: uint16(21407), + 109: uint16(25588), + 110: uint16(36757), + 111: uint16(22253), + 112: uint16(21592), + 113: uint16(22278), + 114: uint16(29503), + 115: uint16(28304), + 116: uint16(32536), + 117: uint16(36828), + 118: uint16(33489), + 119: uint16(24895), + 120: uint16(24616), + 121: uint16(38498), + 122: uint16(26352), + 123: uint16(32422), + 124: uint16(36234), + 125: uint16(36291), + 126: uint16(38053), + 127: uint16(23731), + 128: uint16(31908), + 129: uint16(26376), + 130: uint16(24742), + 131: uint16(38405), + 132: uint16(32792), + 133: uint16(20113), + 134: uint16(37095), + 135: uint16(21248), + 136: uint16(38504), + 137: uint16(20801), + 138: uint16(36816), + 139: uint16(34164), + 140: uint16(37213), + 141: uint16(26197), + 142: uint16(38901), + 143: uint16(23381), + 144: uint16(21277), + 145: uint16(30776), + 146: uint16(26434), + 147: uint16(26685), + 148: uint16(21705), + 149: uint16(28798), + 150: uint16(23472), + 151: uint16(36733), + 152: uint16(20877), + 153: uint16(22312), + 154: uint16(21681), + 155: uint16(25874), + 156: uint16(26242), + 157: uint16(36190), + 158: uint16(36163), + 159: uint16(33039), + 160: uint16(33900), + 161: uint16(36973), + 162: uint16(31967), + 163: uint16(20991), + 164: uint16(34299), + 165: uint16(26531), + 166: uint16(26089), + 167: uint16(28577), + 168: uint16(34468), + 169: uint16(36481), + 170: uint16(22122), + 171: uint16(36896), + 172: uint16(30338), + 173: uint16(28790), + 174: uint16(29157), + 175: uint16(36131), + 176: uint16(25321), + 177: uint16(21017), + 178: uint16(27901), + 179: uint16(36156), + 180: uint16(24590), + 181: uint16(22686), + 182: uint16(24974), + 183: uint16(26366), + 184: uint16(36192), + 185: uint16(25166), + 186: uint16(21939), + 187: uint16(28195), + 188: uint16(26413), + 189: uint16(36711), + }, + 84: { + 0: uint16(35457), + 1: uint16(35458), + 2: uint16(35459), + 3: uint16(35460), + 4: uint16(35461), + 5: uint16(35462), + 6: uint16(35463), + 7: uint16(35464), + 8: uint16(35467), + 9: uint16(35468), + 10: uint16(35469), + 11: uint16(35470), + 12: uint16(35471), + 13: uint16(35472), + 14: uint16(35473), + 15: uint16(35474), + 16: uint16(35476), + 17: uint16(35477), + 18: uint16(35478), + 19: uint16(35479), + 20: uint16(35480), + 21: uint16(35481), + 22: uint16(35482), + 23: uint16(35483), + 24: uint16(35484), + 25: uint16(35485), + 26: uint16(35486), + 27: uint16(35487), + 28: uint16(35488), + 29: uint16(35489), + 30: uint16(35490), + 31: uint16(35491), + 32: uint16(35492), + 33: uint16(35493), + 34: uint16(35494), + 35: uint16(35495), + 36: uint16(35496), + 37: uint16(35497), + 38: uint16(35498), + 39: uint16(35499), + 40: uint16(35500), + 41: uint16(35501), + 42: uint16(35502), + 43: uint16(35503), + 44: uint16(35504), + 45: uint16(35505), + 46: uint16(35506), + 47: uint16(35507), + 48: uint16(35508), + 49: uint16(35509), + 50: uint16(35510), + 51: uint16(35511), + 52: uint16(35512), + 53: uint16(35513), + 54: uint16(35514), + 55: uint16(35515), + 56: uint16(35516), + 57: uint16(35517), + 58: uint16(35518), + 59: uint16(35519), + 60: uint16(35520), + 61: uint16(35521), + 62: uint16(35522), + 63: uint16(35523), + 64: uint16(35524), + 65: uint16(35525), + 66: uint16(35526), + 67: uint16(35527), + 68: uint16(35528), + 69: uint16(35529), + 70: uint16(35530), + 71: uint16(35531), + 72: uint16(35532), + 73: uint16(35533), + 74: uint16(35534), + 75: uint16(35535), + 76: uint16(35536), + 77: uint16(35537), + 78: uint16(35538), + 79: uint16(35539), + 80: uint16(35540), + 81: uint16(35541), + 82: uint16(35542), + 83: uint16(35543), + 84: uint16(35544), + 85: uint16(35545), + 86: uint16(35546), + 87: uint16(35547), + 88: uint16(35548), + 89: uint16(35549), + 90: uint16(35550), + 91: uint16(35551), + 92: uint16(35552), + 93: uint16(35553), + 94: uint16(35554), + 95: uint16(35555), + 96: uint16(38113), + 97: uint16(38392), + 98: uint16(30504), + 99: uint16(26629), + 100: uint16(27048), + 101: uint16(21643), + 102: uint16(20045), + 103: uint16(28856), + 104: uint16(35784), + 105: uint16(25688), + 106: uint16(25995), + 107: uint16(23429), + 108: uint16(31364), + 109: uint16(20538), + 110: uint16(23528), + 111: uint16(30651), + 112: uint16(27617), + 113: uint16(35449), + 114: uint16(31896), + 115: uint16(27838), + 116: uint16(30415), + 117: uint16(26025), + 118: uint16(36759), + 119: uint16(23853), + 120: uint16(23637), + 121: uint16(34360), + 122: uint16(26632), + 123: uint16(21344), + 124: uint16(25112), + 125: uint16(31449), + 126: uint16(28251), + 127: uint16(32509), + 128: uint16(27167), + 129: uint16(31456), + 130: uint16(24432), + 131: uint16(28467), + 132: uint16(24352), + 133: uint16(25484), + 134: uint16(28072), + 135: uint16(26454), + 136: uint16(19976), + 137: uint16(24080), + 138: uint16(36134), + 139: uint16(20183), + 140: uint16(32960), + 141: uint16(30260), + 142: uint16(38556), + 143: uint16(25307), + 144: uint16(26157), + 145: uint16(25214), + 146: uint16(27836), + 147: uint16(36213), + 148: uint16(29031), + 149: uint16(32617), + 150: uint16(20806), + 151: uint16(32903), + 152: uint16(21484), + 153: uint16(36974), + 154: uint16(25240), + 155: uint16(21746), + 156: uint16(34544), + 157: uint16(36761), + 158: uint16(32773), + 159: uint16(38167), + 160: uint16(34071), + 161: uint16(36825), + 162: uint16(27993), + 163: uint16(29645), + 164: uint16(26015), + 165: uint16(30495), + 166: uint16(29956), + 167: uint16(30759), + 168: uint16(33275), + 169: uint16(36126), + 170: uint16(38024), + 171: uint16(20390), + 172: uint16(26517), + 173: uint16(30137), + 174: uint16(35786), + 175: uint16(38663), + 176: uint16(25391), + 177: uint16(38215), + 178: uint16(38453), + 179: uint16(33976), + 180: uint16(25379), + 181: uint16(30529), + 182: uint16(24449), + 183: uint16(29424), + 184: uint16(20105), + 185: uint16(24596), + 186: uint16(25972), + 187: uint16(25327), + 188: uint16(27491), + 189: uint16(25919), + }, + 85: { + 0: uint16(35556), + 1: uint16(35557), + 2: uint16(35558), + 3: uint16(35559), + 4: uint16(35560), + 5: uint16(35561), + 6: uint16(35562), + 7: uint16(35563), + 8: uint16(35564), + 9: uint16(35565), + 10: uint16(35566), + 11: uint16(35567), + 12: uint16(35568), + 13: uint16(35569), + 14: uint16(35570), + 15: uint16(35571), + 16: uint16(35572), + 17: uint16(35573), + 18: uint16(35574), + 19: uint16(35575), + 20: uint16(35576), + 21: uint16(35577), + 22: uint16(35578), + 23: uint16(35579), + 24: uint16(35580), + 25: uint16(35581), + 26: uint16(35582), + 27: uint16(35583), + 28: uint16(35584), + 29: uint16(35585), + 30: uint16(35586), + 31: uint16(35587), + 32: uint16(35588), + 33: uint16(35589), + 34: uint16(35590), + 35: uint16(35592), + 36: uint16(35593), + 37: uint16(35594), + 38: uint16(35595), + 39: uint16(35596), + 40: uint16(35597), + 41: uint16(35598), + 42: uint16(35599), + 43: uint16(35600), + 44: uint16(35601), + 45: uint16(35602), + 46: uint16(35603), + 47: uint16(35604), + 48: uint16(35605), + 49: uint16(35606), + 50: uint16(35607), + 51: uint16(35608), + 52: uint16(35609), + 53: uint16(35610), + 54: uint16(35611), + 55: uint16(35612), + 56: uint16(35613), + 57: uint16(35614), + 58: uint16(35615), + 59: uint16(35616), + 60: uint16(35617), + 61: uint16(35618), + 62: uint16(35619), + 63: uint16(35620), + 64: uint16(35621), + 65: uint16(35623), + 66: uint16(35624), + 67: uint16(35625), + 68: uint16(35626), + 69: uint16(35627), + 70: uint16(35628), + 71: uint16(35629), + 72: uint16(35630), + 73: uint16(35631), + 74: uint16(35632), + 75: uint16(35633), + 76: uint16(35634), + 77: uint16(35635), + 78: uint16(35636), + 79: uint16(35637), + 80: uint16(35638), + 81: uint16(35639), + 82: uint16(35640), + 83: uint16(35641), + 84: uint16(35642), + 85: uint16(35643), + 86: uint16(35644), + 87: uint16(35645), + 88: uint16(35646), + 89: uint16(35647), + 90: uint16(35648), + 91: uint16(35649), + 92: uint16(35650), + 93: uint16(35651), + 94: uint16(35652), + 95: uint16(35653), + 96: uint16(24103), + 97: uint16(30151), + 98: uint16(37073), + 99: uint16(35777), + 100: uint16(33437), + 101: uint16(26525), + 102: uint16(25903), + 103: uint16(21553), + 104: uint16(34584), + 105: uint16(30693), + 106: uint16(32930), + 107: uint16(33026), + 108: uint16(27713), + 109: uint16(20043), + 110: uint16(32455), + 111: uint16(32844), + 112: uint16(30452), + 113: uint16(26893), + 114: uint16(27542), + 115: uint16(25191), + 116: uint16(20540), + 117: uint16(20356), + 118: uint16(22336), + 119: uint16(25351), + 120: uint16(27490), + 121: uint16(36286), + 122: uint16(21482), + 123: uint16(26088), + 124: uint16(32440), + 125: uint16(24535), + 126: uint16(25370), + 127: uint16(25527), + 128: uint16(33267), + 129: uint16(33268), + 130: uint16(32622), + 131: uint16(24092), + 132: uint16(23769), + 133: uint16(21046), + 134: uint16(26234), + 135: uint16(31209), + 136: uint16(31258), + 137: uint16(36136), + 138: uint16(28825), + 139: uint16(30164), + 140: uint16(28382), + 141: uint16(27835), + 142: uint16(31378), + 143: uint16(20013), + 144: uint16(30405), + 145: uint16(24544), + 146: uint16(38047), + 147: uint16(34935), + 148: uint16(32456), + 149: uint16(31181), + 150: uint16(32959), + 151: uint16(37325), + 152: uint16(20210), + 153: uint16(20247), + 154: uint16(33311), + 155: uint16(21608), + 156: uint16(24030), + 157: uint16(27954), + 158: uint16(35788), + 159: uint16(31909), + 160: uint16(36724), + 161: uint16(32920), + 162: uint16(24090), + 163: uint16(21650), + 164: uint16(30385), + 165: uint16(23449), + 166: uint16(26172), + 167: uint16(39588), + 168: uint16(29664), + 169: uint16(26666), + 170: uint16(34523), + 171: uint16(26417), + 172: uint16(29482), + 173: uint16(35832), + 174: uint16(35803), + 175: uint16(36880), + 176: uint16(31481), + 177: uint16(28891), + 178: uint16(29038), + 179: uint16(25284), + 180: uint16(30633), + 181: uint16(22065), + 182: uint16(20027), + 183: uint16(33879), + 184: uint16(26609), + 185: uint16(21161), + 186: uint16(34496), + 187: uint16(36142), + 188: uint16(38136), + 189: uint16(31569), + }, + 86: { + 0: uint16(35654), + 1: uint16(35655), + 2: uint16(35656), + 3: uint16(35657), + 4: uint16(35658), + 5: uint16(35659), + 6: uint16(35660), + 7: uint16(35661), + 8: uint16(35662), + 9: uint16(35663), + 10: uint16(35664), + 11: uint16(35665), + 12: uint16(35666), + 13: uint16(35667), + 14: uint16(35668), + 15: uint16(35669), + 16: uint16(35670), + 17: uint16(35671), + 18: uint16(35672), + 19: uint16(35673), + 20: uint16(35674), + 21: uint16(35675), + 22: uint16(35676), + 23: uint16(35677), + 24: uint16(35678), + 25: uint16(35679), + 26: uint16(35680), + 27: uint16(35681), + 28: uint16(35682), + 29: uint16(35683), + 30: uint16(35684), + 31: uint16(35685), + 32: uint16(35687), + 33: uint16(35688), + 34: uint16(35689), + 35: uint16(35690), + 36: uint16(35691), + 37: uint16(35693), + 38: uint16(35694), + 39: uint16(35695), + 40: uint16(35696), + 41: uint16(35697), + 42: uint16(35698), + 43: uint16(35699), + 44: uint16(35700), + 45: uint16(35701), + 46: uint16(35702), + 47: uint16(35703), + 48: uint16(35704), + 49: uint16(35705), + 50: uint16(35706), + 51: uint16(35707), + 52: uint16(35708), + 53: uint16(35709), + 54: uint16(35710), + 55: uint16(35711), + 56: uint16(35712), + 57: uint16(35713), + 58: uint16(35714), + 59: uint16(35715), + 60: uint16(35716), + 61: uint16(35717), + 62: uint16(35718), + 63: uint16(35719), + 64: uint16(35720), + 65: uint16(35721), + 66: uint16(35722), + 67: uint16(35723), + 68: uint16(35724), + 69: uint16(35725), + 70: uint16(35726), + 71: uint16(35727), + 72: uint16(35728), + 73: uint16(35729), + 74: uint16(35730), + 75: uint16(35731), + 76: uint16(35732), + 77: uint16(35733), + 78: uint16(35734), + 79: uint16(35735), + 80: uint16(35736), + 81: uint16(35737), + 82: uint16(35738), + 83: uint16(35739), + 84: uint16(35740), + 85: uint16(35741), + 86: uint16(35742), + 87: uint16(35743), + 88: uint16(35756), + 89: uint16(35761), + 90: uint16(35771), + 91: uint16(35783), + 92: uint16(35792), + 93: uint16(35818), + 94: uint16(35849), + 95: uint16(35870), + 96: uint16(20303), + 97: uint16(27880), + 98: uint16(31069), + 99: uint16(39547), + 100: uint16(25235), + 101: uint16(29226), + 102: uint16(25341), + 103: uint16(19987), + 104: uint16(30742), + 105: uint16(36716), + 106: uint16(25776), + 107: uint16(36186), + 108: uint16(31686), + 109: uint16(26729), + 110: uint16(24196), + 111: uint16(35013), + 112: uint16(22918), + 113: uint16(25758), + 114: uint16(22766), + 115: uint16(29366), + 116: uint16(26894), + 117: uint16(38181), + 118: uint16(36861), + 119: uint16(36184), + 120: uint16(22368), + 121: uint16(32512), + 122: uint16(35846), + 123: uint16(20934), + 124: uint16(25417), + 125: uint16(25305), + 126: uint16(21331), + 127: uint16(26700), + 128: uint16(29730), + 129: uint16(33537), + 130: uint16(37196), + 131: uint16(21828), + 132: uint16(30528), + 133: uint16(28796), + 134: uint16(27978), + 135: uint16(20857), + 136: uint16(21672), + 137: uint16(36164), + 138: uint16(23039), + 139: uint16(28363), + 140: uint16(28100), + 141: uint16(23388), + 142: uint16(32043), + 143: uint16(20180), + 144: uint16(31869), + 145: uint16(28371), + 146: uint16(23376), + 147: uint16(33258), + 148: uint16(28173), + 149: uint16(23383), + 150: uint16(39683), + 151: uint16(26837), + 152: uint16(36394), + 153: uint16(23447), + 154: uint16(32508), + 155: uint16(24635), + 156: uint16(32437), + 157: uint16(37049), + 158: uint16(36208), + 159: uint16(22863), + 160: uint16(25549), + 161: uint16(31199), + 162: uint16(36275), + 163: uint16(21330), + 164: uint16(26063), + 165: uint16(31062), + 166: uint16(35781), + 167: uint16(38459), + 168: uint16(32452), + 169: uint16(38075), + 170: uint16(32386), + 171: uint16(22068), + 172: uint16(37257), + 173: uint16(26368), + 174: uint16(32618), + 175: uint16(23562), + 176: uint16(36981), + 177: uint16(26152), + 178: uint16(24038), + 179: uint16(20304), + 180: uint16(26590), + 181: uint16(20570), + 182: uint16(20316), + 183: uint16(22352), + 184: uint16(24231), + 185: uint16(59408), + 186: uint16(59409), + 187: uint16(59410), + 188: uint16(59411), + 189: uint16(59412), + }, + 87: { + 0: uint16(35896), + 1: uint16(35897), + 2: uint16(35898), + 3: uint16(35899), + 4: uint16(35900), + 5: uint16(35901), + 6: uint16(35902), + 7: uint16(35903), + 8: uint16(35904), + 9: uint16(35906), + 10: uint16(35907), + 11: uint16(35908), + 12: uint16(35909), + 13: uint16(35912), + 14: uint16(35914), + 15: uint16(35915), + 16: uint16(35917), + 17: uint16(35918), + 18: uint16(35919), + 19: uint16(35920), + 20: uint16(35921), + 21: uint16(35922), + 22: uint16(35923), + 23: uint16(35924), + 24: uint16(35926), + 25: uint16(35927), + 26: uint16(35928), + 27: uint16(35929), + 28: uint16(35931), + 29: uint16(35932), + 30: uint16(35933), + 31: uint16(35934), + 32: uint16(35935), + 33: uint16(35936), + 34: uint16(35939), + 35: uint16(35940), + 36: uint16(35941), + 37: uint16(35942), + 38: uint16(35943), + 39: uint16(35944), + 40: uint16(35945), + 41: uint16(35948), + 42: uint16(35949), + 43: uint16(35950), + 44: uint16(35951), + 45: uint16(35952), + 46: uint16(35953), + 47: uint16(35954), + 48: uint16(35956), + 49: uint16(35957), + 50: uint16(35958), + 51: uint16(35959), + 52: uint16(35963), + 53: uint16(35964), + 54: uint16(35965), + 55: uint16(35966), + 56: uint16(35967), + 57: uint16(35968), + 58: uint16(35969), + 59: uint16(35971), + 60: uint16(35972), + 61: uint16(35974), + 62: uint16(35975), + 63: uint16(35976), + 64: uint16(35979), + 65: uint16(35981), + 66: uint16(35982), + 67: uint16(35983), + 68: uint16(35984), + 69: uint16(35985), + 70: uint16(35986), + 71: uint16(35987), + 72: uint16(35989), + 73: uint16(35990), + 74: uint16(35991), + 75: uint16(35993), + 76: uint16(35994), + 77: uint16(35995), + 78: uint16(35996), + 79: uint16(35997), + 80: uint16(35998), + 81: uint16(35999), + 82: uint16(36000), + 83: uint16(36001), + 84: uint16(36002), + 85: uint16(36003), + 86: uint16(36004), + 87: uint16(36005), + 88: uint16(36006), + 89: uint16(36007), + 90: uint16(36008), + 91: uint16(36009), + 92: uint16(36010), + 93: uint16(36011), + 94: uint16(36012), + 95: uint16(36013), + 96: uint16(20109), + 97: uint16(19980), + 98: uint16(20800), + 99: uint16(19984), + 100: uint16(24319), + 101: uint16(21317), + 102: uint16(19989), + 103: uint16(20120), + 104: uint16(19998), + 105: uint16(39730), + 106: uint16(23404), + 107: uint16(22121), + 108: uint16(20008), + 109: uint16(31162), + 110: uint16(20031), + 111: uint16(21269), + 112: uint16(20039), + 113: uint16(22829), + 114: uint16(29243), + 115: uint16(21358), + 116: uint16(27664), + 117: uint16(22239), + 118: uint16(32996), + 119: uint16(39319), + 120: uint16(27603), + 121: uint16(30590), + 122: uint16(40727), + 123: uint16(20022), + 124: uint16(20127), + 125: uint16(40720), + 126: uint16(20060), + 127: uint16(20073), + 128: uint16(20115), + 129: uint16(33416), + 130: uint16(23387), + 131: uint16(21868), + 132: uint16(22031), + 133: uint16(20164), + 134: uint16(21389), + 135: uint16(21405), + 136: uint16(21411), + 137: uint16(21413), + 138: uint16(21422), + 139: uint16(38757), + 140: uint16(36189), + 141: uint16(21274), + 142: uint16(21493), + 143: uint16(21286), + 144: uint16(21294), + 145: uint16(21310), + 146: uint16(36188), + 147: uint16(21350), + 148: uint16(21347), + 149: uint16(20994), + 150: uint16(21000), + 151: uint16(21006), + 152: uint16(21037), + 153: uint16(21043), + 154: uint16(21055), + 155: uint16(21056), + 156: uint16(21068), + 157: uint16(21086), + 158: uint16(21089), + 159: uint16(21084), + 160: uint16(33967), + 161: uint16(21117), + 162: uint16(21122), + 163: uint16(21121), + 164: uint16(21136), + 165: uint16(21139), + 166: uint16(20866), + 167: uint16(32596), + 168: uint16(20155), + 169: uint16(20163), + 170: uint16(20169), + 171: uint16(20162), + 172: uint16(20200), + 173: uint16(20193), + 174: uint16(20203), + 175: uint16(20190), + 176: uint16(20251), + 177: uint16(20211), + 178: uint16(20258), + 179: uint16(20324), + 180: uint16(20213), + 181: uint16(20261), + 182: uint16(20263), + 183: uint16(20233), + 184: uint16(20267), + 185: uint16(20318), + 186: uint16(20327), + 187: uint16(25912), + 188: uint16(20314), + 189: uint16(20317), + }, + 88: { + 0: uint16(36014), + 1: uint16(36015), + 2: uint16(36016), + 3: uint16(36017), + 4: uint16(36018), + 5: uint16(36019), + 6: uint16(36020), + 7: uint16(36021), + 8: uint16(36022), + 9: uint16(36023), + 10: uint16(36024), + 11: uint16(36025), + 12: uint16(36026), + 13: uint16(36027), + 14: uint16(36028), + 15: uint16(36029), + 16: uint16(36030), + 17: uint16(36031), + 18: uint16(36032), + 19: uint16(36033), + 20: uint16(36034), + 21: uint16(36035), + 22: uint16(36036), + 23: uint16(36037), + 24: uint16(36038), + 25: uint16(36039), + 26: uint16(36040), + 27: uint16(36041), + 28: uint16(36042), + 29: uint16(36043), + 30: uint16(36044), + 31: uint16(36045), + 32: uint16(36046), + 33: uint16(36047), + 34: uint16(36048), + 35: uint16(36049), + 36: uint16(36050), + 37: uint16(36051), + 38: uint16(36052), + 39: uint16(36053), + 40: uint16(36054), + 41: uint16(36055), + 42: uint16(36056), + 43: uint16(36057), + 44: uint16(36058), + 45: uint16(36059), + 46: uint16(36060), + 47: uint16(36061), + 48: uint16(36062), + 49: uint16(36063), + 50: uint16(36064), + 51: uint16(36065), + 52: uint16(36066), + 53: uint16(36067), + 54: uint16(36068), + 55: uint16(36069), + 56: uint16(36070), + 57: uint16(36071), + 58: uint16(36072), + 59: uint16(36073), + 60: uint16(36074), + 61: uint16(36075), + 62: uint16(36076), + 63: uint16(36077), + 64: uint16(36078), + 65: uint16(36079), + 66: uint16(36080), + 67: uint16(36081), + 68: uint16(36082), + 69: uint16(36083), + 70: uint16(36084), + 71: uint16(36085), + 72: uint16(36086), + 73: uint16(36087), + 74: uint16(36088), + 75: uint16(36089), + 76: uint16(36090), + 77: uint16(36091), + 78: uint16(36092), + 79: uint16(36093), + 80: uint16(36094), + 81: uint16(36095), + 82: uint16(36096), + 83: uint16(36097), + 84: uint16(36098), + 85: uint16(36099), + 86: uint16(36100), + 87: uint16(36101), + 88: uint16(36102), + 89: uint16(36103), + 90: uint16(36104), + 91: uint16(36105), + 92: uint16(36106), + 93: uint16(36107), + 94: uint16(36108), + 95: uint16(36109), + 96: uint16(20319), + 97: uint16(20311), + 98: uint16(20274), + 99: uint16(20285), + 100: uint16(20342), + 101: uint16(20340), + 102: uint16(20369), + 103: uint16(20361), + 104: uint16(20355), + 105: uint16(20367), + 106: uint16(20350), + 107: uint16(20347), + 108: uint16(20394), + 109: uint16(20348), + 110: uint16(20396), + 111: uint16(20372), + 112: uint16(20454), + 113: uint16(20456), + 114: uint16(20458), + 115: uint16(20421), + 116: uint16(20442), + 117: uint16(20451), + 118: uint16(20444), + 119: uint16(20433), + 120: uint16(20447), + 121: uint16(20472), + 122: uint16(20521), + 123: uint16(20556), + 124: uint16(20467), + 125: uint16(20524), + 126: uint16(20495), + 127: uint16(20526), + 128: uint16(20525), + 129: uint16(20478), + 130: uint16(20508), + 131: uint16(20492), + 132: uint16(20517), + 133: uint16(20520), + 134: uint16(20606), + 135: uint16(20547), + 136: uint16(20565), + 137: uint16(20552), + 138: uint16(20558), + 139: uint16(20588), + 140: uint16(20603), + 141: uint16(20645), + 142: uint16(20647), + 143: uint16(20649), + 144: uint16(20666), + 145: uint16(20694), + 146: uint16(20742), + 147: uint16(20717), + 148: uint16(20716), + 149: uint16(20710), + 150: uint16(20718), + 151: uint16(20743), + 152: uint16(20747), + 153: uint16(20189), + 154: uint16(27709), + 155: uint16(20312), + 156: uint16(20325), + 157: uint16(20430), + 158: uint16(40864), + 159: uint16(27718), + 160: uint16(31860), + 161: uint16(20846), + 162: uint16(24061), + 163: uint16(40649), + 164: uint16(39320), + 165: uint16(20865), + 166: uint16(22804), + 167: uint16(21241), + 168: uint16(21261), + 169: uint16(35335), + 170: uint16(21264), + 171: uint16(20971), + 172: uint16(22809), + 173: uint16(20821), + 174: uint16(20128), + 175: uint16(20822), + 176: uint16(20147), + 177: uint16(34926), + 178: uint16(34980), + 179: uint16(20149), + 180: uint16(33044), + 181: uint16(35026), + 182: uint16(31104), + 183: uint16(23348), + 184: uint16(34819), + 185: uint16(32696), + 186: uint16(20907), + 187: uint16(20913), + 188: uint16(20925), + 189: uint16(20924), + }, + 89: { + 0: uint16(36110), + 1: uint16(36111), + 2: uint16(36112), + 3: uint16(36113), + 4: uint16(36114), + 5: uint16(36115), + 6: uint16(36116), + 7: uint16(36117), + 8: uint16(36118), + 9: uint16(36119), + 10: uint16(36120), + 11: uint16(36121), + 12: uint16(36122), + 13: uint16(36123), + 14: uint16(36124), + 15: uint16(36128), + 16: uint16(36177), + 17: uint16(36178), + 18: uint16(36183), + 19: uint16(36191), + 20: uint16(36197), + 21: uint16(36200), + 22: uint16(36201), + 23: uint16(36202), + 24: uint16(36204), + 25: uint16(36206), + 26: uint16(36207), + 27: uint16(36209), + 28: uint16(36210), + 29: uint16(36216), + 30: uint16(36217), + 31: uint16(36218), + 32: uint16(36219), + 33: uint16(36220), + 34: uint16(36221), + 35: uint16(36222), + 36: uint16(36223), + 37: uint16(36224), + 38: uint16(36226), + 39: uint16(36227), + 40: uint16(36230), + 41: uint16(36231), + 42: uint16(36232), + 43: uint16(36233), + 44: uint16(36236), + 45: uint16(36237), + 46: uint16(36238), + 47: uint16(36239), + 48: uint16(36240), + 49: uint16(36242), + 50: uint16(36243), + 51: uint16(36245), + 52: uint16(36246), + 53: uint16(36247), + 54: uint16(36248), + 55: uint16(36249), + 56: uint16(36250), + 57: uint16(36251), + 58: uint16(36252), + 59: uint16(36253), + 60: uint16(36254), + 61: uint16(36256), + 62: uint16(36257), + 63: uint16(36258), + 64: uint16(36260), + 65: uint16(36261), + 66: uint16(36262), + 67: uint16(36263), + 68: uint16(36264), + 69: uint16(36265), + 70: uint16(36266), + 71: uint16(36267), + 72: uint16(36268), + 73: uint16(36269), + 74: uint16(36270), + 75: uint16(36271), + 76: uint16(36272), + 77: uint16(36274), + 78: uint16(36278), + 79: uint16(36279), + 80: uint16(36281), + 81: uint16(36283), + 82: uint16(36285), + 83: uint16(36288), + 84: uint16(36289), + 85: uint16(36290), + 86: uint16(36293), + 87: uint16(36295), + 88: uint16(36296), + 89: uint16(36297), + 90: uint16(36298), + 91: uint16(36301), + 92: uint16(36304), + 93: uint16(36306), + 94: uint16(36307), + 95: uint16(36308), + 96: uint16(20935), + 97: uint16(20886), + 98: uint16(20898), + 99: uint16(20901), + 100: uint16(35744), + 101: uint16(35750), + 102: uint16(35751), + 103: uint16(35754), + 104: uint16(35764), + 105: uint16(35765), + 106: uint16(35767), + 107: uint16(35778), + 108: uint16(35779), + 109: uint16(35787), + 110: uint16(35791), + 111: uint16(35790), + 112: uint16(35794), + 113: uint16(35795), + 114: uint16(35796), + 115: uint16(35798), + 116: uint16(35800), + 117: uint16(35801), + 118: uint16(35804), + 119: uint16(35807), + 120: uint16(35808), + 121: uint16(35812), + 122: uint16(35816), + 123: uint16(35817), + 124: uint16(35822), + 125: uint16(35824), + 126: uint16(35827), + 127: uint16(35830), + 128: uint16(35833), + 129: uint16(35836), + 130: uint16(35839), + 131: uint16(35840), + 132: uint16(35842), + 133: uint16(35844), + 134: uint16(35847), + 135: uint16(35852), + 136: uint16(35855), + 137: uint16(35857), + 138: uint16(35858), + 139: uint16(35860), + 140: uint16(35861), + 141: uint16(35862), + 142: uint16(35865), + 143: uint16(35867), + 144: uint16(35864), + 145: uint16(35869), + 146: uint16(35871), + 147: uint16(35872), + 148: uint16(35873), + 149: uint16(35877), + 150: uint16(35879), + 151: uint16(35882), + 152: uint16(35883), + 153: uint16(35886), + 154: uint16(35887), + 155: uint16(35890), + 156: uint16(35891), + 157: uint16(35893), + 158: uint16(35894), + 159: uint16(21353), + 160: uint16(21370), + 161: uint16(38429), + 162: uint16(38434), + 163: uint16(38433), + 164: uint16(38449), + 165: uint16(38442), + 166: uint16(38461), + 167: uint16(38460), + 168: uint16(38466), + 169: uint16(38473), + 170: uint16(38484), + 171: uint16(38495), + 172: uint16(38503), + 173: uint16(38508), + 174: uint16(38514), + 175: uint16(38516), + 176: uint16(38536), + 177: uint16(38541), + 178: uint16(38551), + 179: uint16(38576), + 180: uint16(37015), + 181: uint16(37019), + 182: uint16(37021), + 183: uint16(37017), + 184: uint16(37036), + 185: uint16(37025), + 186: uint16(37044), + 187: uint16(37043), + 188: uint16(37046), + 189: uint16(37050), + }, + 90: { + 0: uint16(36309), + 1: uint16(36312), + 2: uint16(36313), + 3: uint16(36316), + 4: uint16(36320), + 5: uint16(36321), + 6: uint16(36322), + 7: uint16(36325), + 8: uint16(36326), + 9: uint16(36327), + 10: uint16(36329), + 11: uint16(36333), + 12: uint16(36334), + 13: uint16(36336), + 14: uint16(36337), + 15: uint16(36338), + 16: uint16(36340), + 17: uint16(36342), + 18: uint16(36348), + 19: uint16(36350), + 20: uint16(36351), + 21: uint16(36352), + 22: uint16(36353), + 23: uint16(36354), + 24: uint16(36355), + 25: uint16(36356), + 26: uint16(36358), + 27: uint16(36359), + 28: uint16(36360), + 29: uint16(36363), + 30: uint16(36365), + 31: uint16(36366), + 32: uint16(36368), + 33: uint16(36369), + 34: uint16(36370), + 35: uint16(36371), + 36: uint16(36373), + 37: uint16(36374), + 38: uint16(36375), + 39: uint16(36376), + 40: uint16(36377), + 41: uint16(36378), + 42: uint16(36379), + 43: uint16(36380), + 44: uint16(36384), + 45: uint16(36385), + 46: uint16(36388), + 47: uint16(36389), + 48: uint16(36390), + 49: uint16(36391), + 50: uint16(36392), + 51: uint16(36395), + 52: uint16(36397), + 53: uint16(36400), + 54: uint16(36402), + 55: uint16(36403), + 56: uint16(36404), + 57: uint16(36406), + 58: uint16(36407), + 59: uint16(36408), + 60: uint16(36411), + 61: uint16(36412), + 62: uint16(36414), + 63: uint16(36415), + 64: uint16(36419), + 65: uint16(36421), + 66: uint16(36422), + 67: uint16(36428), + 68: uint16(36429), + 69: uint16(36430), + 70: uint16(36431), + 71: uint16(36432), + 72: uint16(36435), + 73: uint16(36436), + 74: uint16(36437), + 75: uint16(36438), + 76: uint16(36439), + 77: uint16(36440), + 78: uint16(36442), + 79: uint16(36443), + 80: uint16(36444), + 81: uint16(36445), + 82: uint16(36446), + 83: uint16(36447), + 84: uint16(36448), + 85: uint16(36449), + 86: uint16(36450), + 87: uint16(36451), + 88: uint16(36452), + 89: uint16(36453), + 90: uint16(36455), + 91: uint16(36456), + 92: uint16(36458), + 93: uint16(36459), + 94: uint16(36462), + 95: uint16(36465), + 96: uint16(37048), + 97: uint16(37040), + 98: uint16(37071), + 99: uint16(37061), + 100: uint16(37054), + 101: uint16(37072), + 102: uint16(37060), + 103: uint16(37063), + 104: uint16(37075), + 105: uint16(37094), + 106: uint16(37090), + 107: uint16(37084), + 108: uint16(37079), + 109: uint16(37083), + 110: uint16(37099), + 111: uint16(37103), + 112: uint16(37118), + 113: uint16(37124), + 114: uint16(37154), + 115: uint16(37150), + 116: uint16(37155), + 117: uint16(37169), + 118: uint16(37167), + 119: uint16(37177), + 120: uint16(37187), + 121: uint16(37190), + 122: uint16(21005), + 123: uint16(22850), + 124: uint16(21154), + 125: uint16(21164), + 126: uint16(21165), + 127: uint16(21182), + 128: uint16(21759), + 129: uint16(21200), + 130: uint16(21206), + 131: uint16(21232), + 132: uint16(21471), + 133: uint16(29166), + 134: uint16(30669), + 135: uint16(24308), + 136: uint16(20981), + 137: uint16(20988), + 138: uint16(39727), + 139: uint16(21430), + 140: uint16(24321), + 141: uint16(30042), + 142: uint16(24047), + 143: uint16(22348), + 144: uint16(22441), + 145: uint16(22433), + 146: uint16(22654), + 147: uint16(22716), + 148: uint16(22725), + 149: uint16(22737), + 150: uint16(22313), + 151: uint16(22316), + 152: uint16(22314), + 153: uint16(22323), + 154: uint16(22329), + 155: uint16(22318), + 156: uint16(22319), + 157: uint16(22364), + 158: uint16(22331), + 159: uint16(22338), + 160: uint16(22377), + 161: uint16(22405), + 162: uint16(22379), + 163: uint16(22406), + 164: uint16(22396), + 165: uint16(22395), + 166: uint16(22376), + 167: uint16(22381), + 168: uint16(22390), + 169: uint16(22387), + 170: uint16(22445), + 171: uint16(22436), + 172: uint16(22412), + 173: uint16(22450), + 174: uint16(22479), + 175: uint16(22439), + 176: uint16(22452), + 177: uint16(22419), + 178: uint16(22432), + 179: uint16(22485), + 180: uint16(22488), + 181: uint16(22490), + 182: uint16(22489), + 183: uint16(22482), + 184: uint16(22456), + 185: uint16(22516), + 186: uint16(22511), + 187: uint16(22520), + 188: uint16(22500), + 189: uint16(22493), + }, + 91: { + 0: uint16(36467), + 1: uint16(36469), + 2: uint16(36471), + 3: uint16(36472), + 4: uint16(36473), + 5: uint16(36474), + 6: uint16(36475), + 7: uint16(36477), + 8: uint16(36478), + 9: uint16(36480), + 10: uint16(36482), + 11: uint16(36483), + 12: uint16(36484), + 13: uint16(36486), + 14: uint16(36488), + 15: uint16(36489), + 16: uint16(36490), + 17: uint16(36491), + 18: uint16(36492), + 19: uint16(36493), + 20: uint16(36494), + 21: uint16(36497), + 22: uint16(36498), + 23: uint16(36499), + 24: uint16(36501), + 25: uint16(36502), + 26: uint16(36503), + 27: uint16(36504), + 28: uint16(36505), + 29: uint16(36506), + 30: uint16(36507), + 31: uint16(36509), + 32: uint16(36511), + 33: uint16(36512), + 34: uint16(36513), + 35: uint16(36514), + 36: uint16(36515), + 37: uint16(36516), + 38: uint16(36517), + 39: uint16(36518), + 40: uint16(36519), + 41: uint16(36520), + 42: uint16(36521), + 43: uint16(36522), + 44: uint16(36525), + 45: uint16(36526), + 46: uint16(36528), + 47: uint16(36529), + 48: uint16(36531), + 49: uint16(36532), + 50: uint16(36533), + 51: uint16(36534), + 52: uint16(36535), + 53: uint16(36536), + 54: uint16(36537), + 55: uint16(36539), + 56: uint16(36540), + 57: uint16(36541), + 58: uint16(36542), + 59: uint16(36543), + 60: uint16(36544), + 61: uint16(36545), + 62: uint16(36546), + 63: uint16(36547), + 64: uint16(36548), + 65: uint16(36549), + 66: uint16(36550), + 67: uint16(36551), + 68: uint16(36552), + 69: uint16(36553), + 70: uint16(36554), + 71: uint16(36555), + 72: uint16(36556), + 73: uint16(36557), + 74: uint16(36559), + 75: uint16(36560), + 76: uint16(36561), + 77: uint16(36562), + 78: uint16(36563), + 79: uint16(36564), + 80: uint16(36565), + 81: uint16(36566), + 82: uint16(36567), + 83: uint16(36568), + 84: uint16(36569), + 85: uint16(36570), + 86: uint16(36571), + 87: uint16(36572), + 88: uint16(36573), + 89: uint16(36574), + 90: uint16(36575), + 91: uint16(36576), + 92: uint16(36577), + 93: uint16(36578), + 94: uint16(36579), + 95: uint16(36580), + 96: uint16(22539), + 97: uint16(22541), + 98: uint16(22525), + 99: uint16(22509), + 100: uint16(22528), + 101: uint16(22558), + 102: uint16(22553), + 103: uint16(22596), + 104: uint16(22560), + 105: uint16(22629), + 106: uint16(22636), + 107: uint16(22657), + 108: uint16(22665), + 109: uint16(22682), + 110: uint16(22656), + 111: uint16(39336), + 112: uint16(40729), + 113: uint16(25087), + 114: uint16(33401), + 115: uint16(33405), + 116: uint16(33407), + 117: uint16(33423), + 118: uint16(33418), + 119: uint16(33448), + 120: uint16(33412), + 121: uint16(33422), + 122: uint16(33425), + 123: uint16(33431), + 124: uint16(33433), + 125: uint16(33451), + 126: uint16(33464), + 127: uint16(33470), + 128: uint16(33456), + 129: uint16(33480), + 130: uint16(33482), + 131: uint16(33507), + 132: uint16(33432), + 133: uint16(33463), + 134: uint16(33454), + 135: uint16(33483), + 136: uint16(33484), + 137: uint16(33473), + 138: uint16(33449), + 139: uint16(33460), + 140: uint16(33441), + 141: uint16(33450), + 142: uint16(33439), + 143: uint16(33476), + 144: uint16(33486), + 145: uint16(33444), + 146: uint16(33505), + 147: uint16(33545), + 148: uint16(33527), + 149: uint16(33508), + 150: uint16(33551), + 151: uint16(33543), + 152: uint16(33500), + 153: uint16(33524), + 154: uint16(33490), + 155: uint16(33496), + 156: uint16(33548), + 157: uint16(33531), + 158: uint16(33491), + 159: uint16(33553), + 160: uint16(33562), + 161: uint16(33542), + 162: uint16(33556), + 163: uint16(33557), + 164: uint16(33504), + 165: uint16(33493), + 166: uint16(33564), + 167: uint16(33617), + 168: uint16(33627), + 169: uint16(33628), + 170: uint16(33544), + 171: uint16(33682), + 172: uint16(33596), + 173: uint16(33588), + 174: uint16(33585), + 175: uint16(33691), + 176: uint16(33630), + 177: uint16(33583), + 178: uint16(33615), + 179: uint16(33607), + 180: uint16(33603), + 181: uint16(33631), + 182: uint16(33600), + 183: uint16(33559), + 184: uint16(33632), + 185: uint16(33581), + 186: uint16(33594), + 187: uint16(33587), + 188: uint16(33638), + 189: uint16(33637), + }, + 92: { + 0: uint16(36581), + 1: uint16(36582), + 2: uint16(36583), + 3: uint16(36584), + 4: uint16(36585), + 5: uint16(36586), + 6: uint16(36587), + 7: uint16(36588), + 8: uint16(36589), + 9: uint16(36590), + 10: uint16(36591), + 11: uint16(36592), + 12: uint16(36593), + 13: uint16(36594), + 14: uint16(36595), + 15: uint16(36596), + 16: uint16(36597), + 17: uint16(36598), + 18: uint16(36599), + 19: uint16(36600), + 20: uint16(36601), + 21: uint16(36602), + 22: uint16(36603), + 23: uint16(36604), + 24: uint16(36605), + 25: uint16(36606), + 26: uint16(36607), + 27: uint16(36608), + 28: uint16(36609), + 29: uint16(36610), + 30: uint16(36611), + 31: uint16(36612), + 32: uint16(36613), + 33: uint16(36614), + 34: uint16(36615), + 35: uint16(36616), + 36: uint16(36617), + 37: uint16(36618), + 38: uint16(36619), + 39: uint16(36620), + 40: uint16(36621), + 41: uint16(36622), + 42: uint16(36623), + 43: uint16(36624), + 44: uint16(36625), + 45: uint16(36626), + 46: uint16(36627), + 47: uint16(36628), + 48: uint16(36629), + 49: uint16(36630), + 50: uint16(36631), + 51: uint16(36632), + 52: uint16(36633), + 53: uint16(36634), + 54: uint16(36635), + 55: uint16(36636), + 56: uint16(36637), + 57: uint16(36638), + 58: uint16(36639), + 59: uint16(36640), + 60: uint16(36641), + 61: uint16(36642), + 62: uint16(36643), + 63: uint16(36644), + 64: uint16(36645), + 65: uint16(36646), + 66: uint16(36647), + 67: uint16(36648), + 68: uint16(36649), + 69: uint16(36650), + 70: uint16(36651), + 71: uint16(36652), + 72: uint16(36653), + 73: uint16(36654), + 74: uint16(36655), + 75: uint16(36656), + 76: uint16(36657), + 77: uint16(36658), + 78: uint16(36659), + 79: uint16(36660), + 80: uint16(36661), + 81: uint16(36662), + 82: uint16(36663), + 83: uint16(36664), + 84: uint16(36665), + 85: uint16(36666), + 86: uint16(36667), + 87: uint16(36668), + 88: uint16(36669), + 89: uint16(36670), + 90: uint16(36671), + 91: uint16(36672), + 92: uint16(36673), + 93: uint16(36674), + 94: uint16(36675), + 95: uint16(36676), + 96: uint16(33640), + 97: uint16(33563), + 98: uint16(33641), + 99: uint16(33644), + 100: uint16(33642), + 101: uint16(33645), + 102: uint16(33646), + 103: uint16(33712), + 104: uint16(33656), + 105: uint16(33715), + 106: uint16(33716), + 107: uint16(33696), + 108: uint16(33706), + 109: uint16(33683), + 110: uint16(33692), + 111: uint16(33669), + 112: uint16(33660), + 113: uint16(33718), + 114: uint16(33705), + 115: uint16(33661), + 116: uint16(33720), + 117: uint16(33659), + 118: uint16(33688), + 119: uint16(33694), + 120: uint16(33704), + 121: uint16(33722), + 122: uint16(33724), + 123: uint16(33729), + 124: uint16(33793), + 125: uint16(33765), + 126: uint16(33752), + 127: uint16(22535), + 128: uint16(33816), + 129: uint16(33803), + 130: uint16(33757), + 131: uint16(33789), + 132: uint16(33750), + 133: uint16(33820), + 134: uint16(33848), + 135: uint16(33809), + 136: uint16(33798), + 137: uint16(33748), + 138: uint16(33759), + 139: uint16(33807), + 140: uint16(33795), + 141: uint16(33784), + 142: uint16(33785), + 143: uint16(33770), + 144: uint16(33733), + 145: uint16(33728), + 146: uint16(33830), + 147: uint16(33776), + 148: uint16(33761), + 149: uint16(33884), + 150: uint16(33873), + 151: uint16(33882), + 152: uint16(33881), + 153: uint16(33907), + 154: uint16(33927), + 155: uint16(33928), + 156: uint16(33914), + 157: uint16(33929), + 158: uint16(33912), + 159: uint16(33852), + 160: uint16(33862), + 161: uint16(33897), + 162: uint16(33910), + 163: uint16(33932), + 164: uint16(33934), + 165: uint16(33841), + 166: uint16(33901), + 167: uint16(33985), + 168: uint16(33997), + 169: uint16(34000), + 170: uint16(34022), + 171: uint16(33981), + 172: uint16(34003), + 173: uint16(33994), + 174: uint16(33983), + 175: uint16(33978), + 176: uint16(34016), + 177: uint16(33953), + 178: uint16(33977), + 179: uint16(33972), + 180: uint16(33943), + 181: uint16(34021), + 182: uint16(34019), + 183: uint16(34060), + 184: uint16(29965), + 185: uint16(34104), + 186: uint16(34032), + 187: uint16(34105), + 188: uint16(34079), + 189: uint16(34106), + }, + 93: { + 0: uint16(36677), + 1: uint16(36678), + 2: uint16(36679), + 3: uint16(36680), + 4: uint16(36681), + 5: uint16(36682), + 6: uint16(36683), + 7: uint16(36684), + 8: uint16(36685), + 9: uint16(36686), + 10: uint16(36687), + 11: uint16(36688), + 12: uint16(36689), + 13: uint16(36690), + 14: uint16(36691), + 15: uint16(36692), + 16: uint16(36693), + 17: uint16(36694), + 18: uint16(36695), + 19: uint16(36696), + 20: uint16(36697), + 21: uint16(36698), + 22: uint16(36699), + 23: uint16(36700), + 24: uint16(36701), + 25: uint16(36702), + 26: uint16(36703), + 27: uint16(36704), + 28: uint16(36705), + 29: uint16(36706), + 30: uint16(36707), + 31: uint16(36708), + 32: uint16(36709), + 33: uint16(36714), + 34: uint16(36736), + 35: uint16(36748), + 36: uint16(36754), + 37: uint16(36765), + 38: uint16(36768), + 39: uint16(36769), + 40: uint16(36770), + 41: uint16(36772), + 42: uint16(36773), + 43: uint16(36774), + 44: uint16(36775), + 45: uint16(36778), + 46: uint16(36780), + 47: uint16(36781), + 48: uint16(36782), + 49: uint16(36783), + 50: uint16(36786), + 51: uint16(36787), + 52: uint16(36788), + 53: uint16(36789), + 54: uint16(36791), + 55: uint16(36792), + 56: uint16(36794), + 57: uint16(36795), + 58: uint16(36796), + 59: uint16(36799), + 60: uint16(36800), + 61: uint16(36803), + 62: uint16(36806), + 63: uint16(36809), + 64: uint16(36810), + 65: uint16(36811), + 66: uint16(36812), + 67: uint16(36813), + 68: uint16(36815), + 69: uint16(36818), + 70: uint16(36822), + 71: uint16(36823), + 72: uint16(36826), + 73: uint16(36832), + 74: uint16(36833), + 75: uint16(36835), + 76: uint16(36839), + 77: uint16(36844), + 78: uint16(36847), + 79: uint16(36849), + 80: uint16(36850), + 81: uint16(36852), + 82: uint16(36853), + 83: uint16(36854), + 84: uint16(36858), + 85: uint16(36859), + 86: uint16(36860), + 87: uint16(36862), + 88: uint16(36863), + 89: uint16(36871), + 90: uint16(36872), + 91: uint16(36876), + 92: uint16(36878), + 93: uint16(36883), + 94: uint16(36885), + 95: uint16(36888), + 96: uint16(34134), + 97: uint16(34107), + 98: uint16(34047), + 99: uint16(34044), + 100: uint16(34137), + 101: uint16(34120), + 102: uint16(34152), + 103: uint16(34148), + 104: uint16(34142), + 105: uint16(34170), + 106: uint16(30626), + 107: uint16(34115), + 108: uint16(34162), + 109: uint16(34171), + 110: uint16(34212), + 111: uint16(34216), + 112: uint16(34183), + 113: uint16(34191), + 114: uint16(34169), + 115: uint16(34222), + 116: uint16(34204), + 117: uint16(34181), + 118: uint16(34233), + 119: uint16(34231), + 120: uint16(34224), + 121: uint16(34259), + 122: uint16(34241), + 123: uint16(34268), + 124: uint16(34303), + 125: uint16(34343), + 126: uint16(34309), + 127: uint16(34345), + 128: uint16(34326), + 129: uint16(34364), + 130: uint16(24318), + 131: uint16(24328), + 132: uint16(22844), + 133: uint16(22849), + 134: uint16(32823), + 135: uint16(22869), + 136: uint16(22874), + 137: uint16(22872), + 138: uint16(21263), + 139: uint16(23586), + 140: uint16(23589), + 141: uint16(23596), + 142: uint16(23604), + 143: uint16(25164), + 144: uint16(25194), + 145: uint16(25247), + 146: uint16(25275), + 147: uint16(25290), + 148: uint16(25306), + 149: uint16(25303), + 150: uint16(25326), + 151: uint16(25378), + 152: uint16(25334), + 153: uint16(25401), + 154: uint16(25419), + 155: uint16(25411), + 156: uint16(25517), + 157: uint16(25590), + 158: uint16(25457), + 159: uint16(25466), + 160: uint16(25486), + 161: uint16(25524), + 162: uint16(25453), + 163: uint16(25516), + 164: uint16(25482), + 165: uint16(25449), + 166: uint16(25518), + 167: uint16(25532), + 168: uint16(25586), + 169: uint16(25592), + 170: uint16(25568), + 171: uint16(25599), + 172: uint16(25540), + 173: uint16(25566), + 174: uint16(25550), + 175: uint16(25682), + 176: uint16(25542), + 177: uint16(25534), + 178: uint16(25669), + 179: uint16(25665), + 180: uint16(25611), + 181: uint16(25627), + 182: uint16(25632), + 183: uint16(25612), + 184: uint16(25638), + 185: uint16(25633), + 186: uint16(25694), + 187: uint16(25732), + 188: uint16(25709), + 189: uint16(25750), + }, + 94: { + 0: uint16(36889), + 1: uint16(36892), + 2: uint16(36899), + 3: uint16(36900), + 4: uint16(36901), + 5: uint16(36903), + 6: uint16(36904), + 7: uint16(36905), + 8: uint16(36906), + 9: uint16(36907), + 10: uint16(36908), + 11: uint16(36912), + 12: uint16(36913), + 13: uint16(36914), + 14: uint16(36915), + 15: uint16(36916), + 16: uint16(36919), + 17: uint16(36921), + 18: uint16(36922), + 19: uint16(36925), + 20: uint16(36927), + 21: uint16(36928), + 22: uint16(36931), + 23: uint16(36933), + 24: uint16(36934), + 25: uint16(36936), + 26: uint16(36937), + 27: uint16(36938), + 28: uint16(36939), + 29: uint16(36940), + 30: uint16(36942), + 31: uint16(36948), + 32: uint16(36949), + 33: uint16(36950), + 34: uint16(36953), + 35: uint16(36954), + 36: uint16(36956), + 37: uint16(36957), + 38: uint16(36958), + 39: uint16(36959), + 40: uint16(36960), + 41: uint16(36961), + 42: uint16(36964), + 43: uint16(36966), + 44: uint16(36967), + 45: uint16(36969), + 46: uint16(36970), + 47: uint16(36971), + 48: uint16(36972), + 49: uint16(36975), + 50: uint16(36976), + 51: uint16(36977), + 52: uint16(36978), + 53: uint16(36979), + 54: uint16(36982), + 55: uint16(36983), + 56: uint16(36984), + 57: uint16(36985), + 58: uint16(36986), + 59: uint16(36987), + 60: uint16(36988), + 61: uint16(36990), + 62: uint16(36993), + 63: uint16(36996), + 64: uint16(36997), + 65: uint16(36998), + 66: uint16(36999), + 67: uint16(37001), + 68: uint16(37002), + 69: uint16(37004), + 70: uint16(37005), + 71: uint16(37006), + 72: uint16(37007), + 73: uint16(37008), + 74: uint16(37010), + 75: uint16(37012), + 76: uint16(37014), + 77: uint16(37016), + 78: uint16(37018), + 79: uint16(37020), + 80: uint16(37022), + 81: uint16(37023), + 82: uint16(37024), + 83: uint16(37028), + 84: uint16(37029), + 85: uint16(37031), + 86: uint16(37032), + 87: uint16(37033), + 88: uint16(37035), + 89: uint16(37037), + 90: uint16(37042), + 91: uint16(37047), + 92: uint16(37052), + 93: uint16(37053), + 94: uint16(37055), + 95: uint16(37056), + 96: uint16(25722), + 97: uint16(25783), + 98: uint16(25784), + 99: uint16(25753), + 100: uint16(25786), + 101: uint16(25792), + 102: uint16(25808), + 103: uint16(25815), + 104: uint16(25828), + 105: uint16(25826), + 106: uint16(25865), + 107: uint16(25893), + 108: uint16(25902), + 109: uint16(24331), + 110: uint16(24530), + 111: uint16(29977), + 112: uint16(24337), + 113: uint16(21343), + 114: uint16(21489), + 115: uint16(21501), + 116: uint16(21481), + 117: uint16(21480), + 118: uint16(21499), + 119: uint16(21522), + 120: uint16(21526), + 121: uint16(21510), + 122: uint16(21579), + 123: uint16(21586), + 124: uint16(21587), + 125: uint16(21588), + 126: uint16(21590), + 127: uint16(21571), + 128: uint16(21537), + 129: uint16(21591), + 130: uint16(21593), + 131: uint16(21539), + 132: uint16(21554), + 133: uint16(21634), + 134: uint16(21652), + 135: uint16(21623), + 136: uint16(21617), + 137: uint16(21604), + 138: uint16(21658), + 139: uint16(21659), + 140: uint16(21636), + 141: uint16(21622), + 142: uint16(21606), + 143: uint16(21661), + 144: uint16(21712), + 145: uint16(21677), + 146: uint16(21698), + 147: uint16(21684), + 148: uint16(21714), + 149: uint16(21671), + 150: uint16(21670), + 151: uint16(21715), + 152: uint16(21716), + 153: uint16(21618), + 154: uint16(21667), + 155: uint16(21717), + 156: uint16(21691), + 157: uint16(21695), + 158: uint16(21708), + 159: uint16(21721), + 160: uint16(21722), + 161: uint16(21724), + 162: uint16(21673), + 163: uint16(21674), + 164: uint16(21668), + 165: uint16(21725), + 166: uint16(21711), + 167: uint16(21726), + 168: uint16(21787), + 169: uint16(21735), + 170: uint16(21792), + 171: uint16(21757), + 172: uint16(21780), + 173: uint16(21747), + 174: uint16(21794), + 175: uint16(21795), + 176: uint16(21775), + 177: uint16(21777), + 178: uint16(21799), + 179: uint16(21802), + 180: uint16(21863), + 181: uint16(21903), + 182: uint16(21941), + 183: uint16(21833), + 184: uint16(21869), + 185: uint16(21825), + 186: uint16(21845), + 187: uint16(21823), + 188: uint16(21840), + 189: uint16(21820), + }, + 95: { + 0: uint16(37058), + 1: uint16(37059), + 2: uint16(37062), + 3: uint16(37064), + 4: uint16(37065), + 5: uint16(37067), + 6: uint16(37068), + 7: uint16(37069), + 8: uint16(37074), + 9: uint16(37076), + 10: uint16(37077), + 11: uint16(37078), + 12: uint16(37080), + 13: uint16(37081), + 14: uint16(37082), + 15: uint16(37086), + 16: uint16(37087), + 17: uint16(37088), + 18: uint16(37091), + 19: uint16(37092), + 20: uint16(37093), + 21: uint16(37097), + 22: uint16(37098), + 23: uint16(37100), + 24: uint16(37102), + 25: uint16(37104), + 26: uint16(37105), + 27: uint16(37106), + 28: uint16(37107), + 29: uint16(37109), + 30: uint16(37110), + 31: uint16(37111), + 32: uint16(37113), + 33: uint16(37114), + 34: uint16(37115), + 35: uint16(37116), + 36: uint16(37119), + 37: uint16(37120), + 38: uint16(37121), + 39: uint16(37123), + 40: uint16(37125), + 41: uint16(37126), + 42: uint16(37127), + 43: uint16(37128), + 44: uint16(37129), + 45: uint16(37130), + 46: uint16(37131), + 47: uint16(37132), + 48: uint16(37133), + 49: uint16(37134), + 50: uint16(37135), + 51: uint16(37136), + 52: uint16(37137), + 53: uint16(37138), + 54: uint16(37139), + 55: uint16(37140), + 56: uint16(37141), + 57: uint16(37142), + 58: uint16(37143), + 59: uint16(37144), + 60: uint16(37146), + 61: uint16(37147), + 62: uint16(37148), + 63: uint16(37149), + 64: uint16(37151), + 65: uint16(37152), + 66: uint16(37153), + 67: uint16(37156), + 68: uint16(37157), + 69: uint16(37158), + 70: uint16(37159), + 71: uint16(37160), + 72: uint16(37161), + 73: uint16(37162), + 74: uint16(37163), + 75: uint16(37164), + 76: uint16(37165), + 77: uint16(37166), + 78: uint16(37168), + 79: uint16(37170), + 80: uint16(37171), + 81: uint16(37172), + 82: uint16(37173), + 83: uint16(37174), + 84: uint16(37175), + 85: uint16(37176), + 86: uint16(37178), + 87: uint16(37179), + 88: uint16(37180), + 89: uint16(37181), + 90: uint16(37182), + 91: uint16(37183), + 92: uint16(37184), + 93: uint16(37185), + 94: uint16(37186), + 95: uint16(37188), + 96: uint16(21815), + 97: uint16(21846), + 98: uint16(21877), + 99: uint16(21878), + 100: uint16(21879), + 101: uint16(21811), + 102: uint16(21808), + 103: uint16(21852), + 104: uint16(21899), + 105: uint16(21970), + 106: uint16(21891), + 107: uint16(21937), + 108: uint16(21945), + 109: uint16(21896), + 110: uint16(21889), + 111: uint16(21919), + 112: uint16(21886), + 113: uint16(21974), + 114: uint16(21905), + 115: uint16(21883), + 116: uint16(21983), + 117: uint16(21949), + 118: uint16(21950), + 119: uint16(21908), + 120: uint16(21913), + 121: uint16(21994), + 122: uint16(22007), + 123: uint16(21961), + 124: uint16(22047), + 125: uint16(21969), + 126: uint16(21995), + 127: uint16(21996), + 128: uint16(21972), + 129: uint16(21990), + 130: uint16(21981), + 131: uint16(21956), + 132: uint16(21999), + 133: uint16(21989), + 134: uint16(22002), + 135: uint16(22003), + 136: uint16(21964), + 137: uint16(21965), + 138: uint16(21992), + 139: uint16(22005), + 140: uint16(21988), + 141: uint16(36756), + 142: uint16(22046), + 143: uint16(22024), + 144: uint16(22028), + 145: uint16(22017), + 146: uint16(22052), + 147: uint16(22051), + 148: uint16(22014), + 149: uint16(22016), + 150: uint16(22055), + 151: uint16(22061), + 152: uint16(22104), + 153: uint16(22073), + 154: uint16(22103), + 155: uint16(22060), + 156: uint16(22093), + 157: uint16(22114), + 158: uint16(22105), + 159: uint16(22108), + 160: uint16(22092), + 161: uint16(22100), + 162: uint16(22150), + 163: uint16(22116), + 164: uint16(22129), + 165: uint16(22123), + 166: uint16(22139), + 167: uint16(22140), + 168: uint16(22149), + 169: uint16(22163), + 170: uint16(22191), + 171: uint16(22228), + 172: uint16(22231), + 173: uint16(22237), + 174: uint16(22241), + 175: uint16(22261), + 176: uint16(22251), + 177: uint16(22265), + 178: uint16(22271), + 179: uint16(22276), + 180: uint16(22282), + 181: uint16(22281), + 182: uint16(22300), + 183: uint16(24079), + 184: uint16(24089), + 185: uint16(24084), + 186: uint16(24081), + 187: uint16(24113), + 188: uint16(24123), + 189: uint16(24124), + }, + 96: { + 0: uint16(37189), + 1: uint16(37191), + 2: uint16(37192), + 3: uint16(37201), + 4: uint16(37203), + 5: uint16(37204), + 6: uint16(37205), + 7: uint16(37206), + 8: uint16(37208), + 9: uint16(37209), + 10: uint16(37211), + 11: uint16(37212), + 12: uint16(37215), + 13: uint16(37216), + 14: uint16(37222), + 15: uint16(37223), + 16: uint16(37224), + 17: uint16(37227), + 18: uint16(37229), + 19: uint16(37235), + 20: uint16(37242), + 21: uint16(37243), + 22: uint16(37244), + 23: uint16(37248), + 24: uint16(37249), + 25: uint16(37250), + 26: uint16(37251), + 27: uint16(37252), + 28: uint16(37254), + 29: uint16(37256), + 30: uint16(37258), + 31: uint16(37262), + 32: uint16(37263), + 33: uint16(37267), + 34: uint16(37268), + 35: uint16(37269), + 36: uint16(37270), + 37: uint16(37271), + 38: uint16(37272), + 39: uint16(37273), + 40: uint16(37276), + 41: uint16(37277), + 42: uint16(37278), + 43: uint16(37279), + 44: uint16(37280), + 45: uint16(37281), + 46: uint16(37284), + 47: uint16(37285), + 48: uint16(37286), + 49: uint16(37287), + 50: uint16(37288), + 51: uint16(37289), + 52: uint16(37291), + 53: uint16(37292), + 54: uint16(37296), + 55: uint16(37297), + 56: uint16(37298), + 57: uint16(37299), + 58: uint16(37302), + 59: uint16(37303), + 60: uint16(37304), + 61: uint16(37305), + 62: uint16(37307), + 63: uint16(37308), + 64: uint16(37309), + 65: uint16(37310), + 66: uint16(37311), + 67: uint16(37312), + 68: uint16(37313), + 69: uint16(37314), + 70: uint16(37315), + 71: uint16(37316), + 72: uint16(37317), + 73: uint16(37318), + 74: uint16(37320), + 75: uint16(37323), + 76: uint16(37328), + 77: uint16(37330), + 78: uint16(37331), + 79: uint16(37332), + 80: uint16(37333), + 81: uint16(37334), + 82: uint16(37335), + 83: uint16(37336), + 84: uint16(37337), + 85: uint16(37338), + 86: uint16(37339), + 87: uint16(37341), + 88: uint16(37342), + 89: uint16(37343), + 90: uint16(37344), + 91: uint16(37345), + 92: uint16(37346), + 93: uint16(37347), + 94: uint16(37348), + 95: uint16(37349), + 96: uint16(24119), + 97: uint16(24132), + 98: uint16(24148), + 99: uint16(24155), + 100: uint16(24158), + 101: uint16(24161), + 102: uint16(23692), + 103: uint16(23674), + 104: uint16(23693), + 105: uint16(23696), + 106: uint16(23702), + 107: uint16(23688), + 108: uint16(23704), + 109: uint16(23705), + 110: uint16(23697), + 111: uint16(23706), + 112: uint16(23708), + 113: uint16(23733), + 114: uint16(23714), + 115: uint16(23741), + 116: uint16(23724), + 117: uint16(23723), + 118: uint16(23729), + 119: uint16(23715), + 120: uint16(23745), + 121: uint16(23735), + 122: uint16(23748), + 123: uint16(23762), + 124: uint16(23780), + 125: uint16(23755), + 126: uint16(23781), + 127: uint16(23810), + 128: uint16(23811), + 129: uint16(23847), + 130: uint16(23846), + 131: uint16(23854), + 132: uint16(23844), + 133: uint16(23838), + 134: uint16(23814), + 135: uint16(23835), + 136: uint16(23896), + 137: uint16(23870), + 138: uint16(23860), + 139: uint16(23869), + 140: uint16(23916), + 141: uint16(23899), + 142: uint16(23919), + 143: uint16(23901), + 144: uint16(23915), + 145: uint16(23883), + 146: uint16(23882), + 147: uint16(23913), + 148: uint16(23924), + 149: uint16(23938), + 150: uint16(23961), + 151: uint16(23965), + 152: uint16(35955), + 153: uint16(23991), + 154: uint16(24005), + 155: uint16(24435), + 156: uint16(24439), + 157: uint16(24450), + 158: uint16(24455), + 159: uint16(24457), + 160: uint16(24460), + 161: uint16(24469), + 162: uint16(24473), + 163: uint16(24476), + 164: uint16(24488), + 165: uint16(24493), + 166: uint16(24501), + 167: uint16(24508), + 168: uint16(34914), + 169: uint16(24417), + 170: uint16(29357), + 171: uint16(29360), + 172: uint16(29364), + 173: uint16(29367), + 174: uint16(29368), + 175: uint16(29379), + 176: uint16(29377), + 177: uint16(29390), + 178: uint16(29389), + 179: uint16(29394), + 180: uint16(29416), + 181: uint16(29423), + 182: uint16(29417), + 183: uint16(29426), + 184: uint16(29428), + 185: uint16(29431), + 186: uint16(29441), + 187: uint16(29427), + 188: uint16(29443), + 189: uint16(29434), + }, + 97: { + 0: uint16(37350), + 1: uint16(37351), + 2: uint16(37352), + 3: uint16(37353), + 4: uint16(37354), + 5: uint16(37355), + 6: uint16(37356), + 7: uint16(37357), + 8: uint16(37358), + 9: uint16(37359), + 10: uint16(37360), + 11: uint16(37361), + 12: uint16(37362), + 13: uint16(37363), + 14: uint16(37364), + 15: uint16(37365), + 16: uint16(37366), + 17: uint16(37367), + 18: uint16(37368), + 19: uint16(37369), + 20: uint16(37370), + 21: uint16(37371), + 22: uint16(37372), + 23: uint16(37373), + 24: uint16(37374), + 25: uint16(37375), + 26: uint16(37376), + 27: uint16(37377), + 28: uint16(37378), + 29: uint16(37379), + 30: uint16(37380), + 31: uint16(37381), + 32: uint16(37382), + 33: uint16(37383), + 34: uint16(37384), + 35: uint16(37385), + 36: uint16(37386), + 37: uint16(37387), + 38: uint16(37388), + 39: uint16(37389), + 40: uint16(37390), + 41: uint16(37391), + 42: uint16(37392), + 43: uint16(37393), + 44: uint16(37394), + 45: uint16(37395), + 46: uint16(37396), + 47: uint16(37397), + 48: uint16(37398), + 49: uint16(37399), + 50: uint16(37400), + 51: uint16(37401), + 52: uint16(37402), + 53: uint16(37403), + 54: uint16(37404), + 55: uint16(37405), + 56: uint16(37406), + 57: uint16(37407), + 58: uint16(37408), + 59: uint16(37409), + 60: uint16(37410), + 61: uint16(37411), + 62: uint16(37412), + 63: uint16(37413), + 64: uint16(37414), + 65: uint16(37415), + 66: uint16(37416), + 67: uint16(37417), + 68: uint16(37418), + 69: uint16(37419), + 70: uint16(37420), + 71: uint16(37421), + 72: uint16(37422), + 73: uint16(37423), + 74: uint16(37424), + 75: uint16(37425), + 76: uint16(37426), + 77: uint16(37427), + 78: uint16(37428), + 79: uint16(37429), + 80: uint16(37430), + 81: uint16(37431), + 82: uint16(37432), + 83: uint16(37433), + 84: uint16(37434), + 85: uint16(37435), + 86: uint16(37436), + 87: uint16(37437), + 88: uint16(37438), + 89: uint16(37439), + 90: uint16(37440), + 91: uint16(37441), + 92: uint16(37442), + 93: uint16(37443), + 94: uint16(37444), + 95: uint16(37445), + 96: uint16(29435), + 97: uint16(29463), + 98: uint16(29459), + 99: uint16(29473), + 100: uint16(29450), + 101: uint16(29470), + 102: uint16(29469), + 103: uint16(29461), + 104: uint16(29474), + 105: uint16(29497), + 106: uint16(29477), + 107: uint16(29484), + 108: uint16(29496), + 109: uint16(29489), + 110: uint16(29520), + 111: uint16(29517), + 112: uint16(29527), + 113: uint16(29536), + 114: uint16(29548), + 115: uint16(29551), + 116: uint16(29566), + 117: uint16(33307), + 118: uint16(22821), + 119: uint16(39143), + 120: uint16(22820), + 121: uint16(22786), + 122: uint16(39267), + 123: uint16(39271), + 124: uint16(39272), + 125: uint16(39273), + 126: uint16(39274), + 127: uint16(39275), + 128: uint16(39276), + 129: uint16(39284), + 130: uint16(39287), + 131: uint16(39293), + 132: uint16(39296), + 133: uint16(39300), + 134: uint16(39303), + 135: uint16(39306), + 136: uint16(39309), + 137: uint16(39312), + 138: uint16(39313), + 139: uint16(39315), + 140: uint16(39316), + 141: uint16(39317), + 142: uint16(24192), + 143: uint16(24209), + 144: uint16(24203), + 145: uint16(24214), + 146: uint16(24229), + 147: uint16(24224), + 148: uint16(24249), + 149: uint16(24245), + 150: uint16(24254), + 151: uint16(24243), + 152: uint16(36179), + 153: uint16(24274), + 154: uint16(24273), + 155: uint16(24283), + 156: uint16(24296), + 157: uint16(24298), + 158: uint16(33210), + 159: uint16(24516), + 160: uint16(24521), + 161: uint16(24534), + 162: uint16(24527), + 163: uint16(24579), + 164: uint16(24558), + 165: uint16(24580), + 166: uint16(24545), + 167: uint16(24548), + 168: uint16(24574), + 169: uint16(24581), + 170: uint16(24582), + 171: uint16(24554), + 172: uint16(24557), + 173: uint16(24568), + 174: uint16(24601), + 175: uint16(24629), + 176: uint16(24614), + 177: uint16(24603), + 178: uint16(24591), + 179: uint16(24589), + 180: uint16(24617), + 181: uint16(24619), + 182: uint16(24586), + 183: uint16(24639), + 184: uint16(24609), + 185: uint16(24696), + 186: uint16(24697), + 187: uint16(24699), + 188: uint16(24698), + 189: uint16(24642), + }, + 98: { + 0: uint16(37446), + 1: uint16(37447), + 2: uint16(37448), + 3: uint16(37449), + 4: uint16(37450), + 5: uint16(37451), + 6: uint16(37452), + 7: uint16(37453), + 8: uint16(37454), + 9: uint16(37455), + 10: uint16(37456), + 11: uint16(37457), + 12: uint16(37458), + 13: uint16(37459), + 14: uint16(37460), + 15: uint16(37461), + 16: uint16(37462), + 17: uint16(37463), + 18: uint16(37464), + 19: uint16(37465), + 20: uint16(37466), + 21: uint16(37467), + 22: uint16(37468), + 23: uint16(37469), + 24: uint16(37470), + 25: uint16(37471), + 26: uint16(37472), + 27: uint16(37473), + 28: uint16(37474), + 29: uint16(37475), + 30: uint16(37476), + 31: uint16(37477), + 32: uint16(37478), + 33: uint16(37479), + 34: uint16(37480), + 35: uint16(37481), + 36: uint16(37482), + 37: uint16(37483), + 38: uint16(37484), + 39: uint16(37485), + 40: uint16(37486), + 41: uint16(37487), + 42: uint16(37488), + 43: uint16(37489), + 44: uint16(37490), + 45: uint16(37491), + 46: uint16(37493), + 47: uint16(37494), + 48: uint16(37495), + 49: uint16(37496), + 50: uint16(37497), + 51: uint16(37498), + 52: uint16(37499), + 53: uint16(37500), + 54: uint16(37501), + 55: uint16(37502), + 56: uint16(37503), + 57: uint16(37504), + 58: uint16(37505), + 59: uint16(37506), + 60: uint16(37507), + 61: uint16(37508), + 62: uint16(37509), + 63: uint16(37510), + 64: uint16(37511), + 65: uint16(37512), + 66: uint16(37513), + 67: uint16(37514), + 68: uint16(37515), + 69: uint16(37516), + 70: uint16(37517), + 71: uint16(37519), + 72: uint16(37520), + 73: uint16(37521), + 74: uint16(37522), + 75: uint16(37523), + 76: uint16(37524), + 77: uint16(37525), + 78: uint16(37526), + 79: uint16(37527), + 80: uint16(37528), + 81: uint16(37529), + 82: uint16(37530), + 83: uint16(37531), + 84: uint16(37532), + 85: uint16(37533), + 86: uint16(37534), + 87: uint16(37535), + 88: uint16(37536), + 89: uint16(37537), + 90: uint16(37538), + 91: uint16(37539), + 92: uint16(37540), + 93: uint16(37541), + 94: uint16(37542), + 95: uint16(37543), + 96: uint16(24682), + 97: uint16(24701), + 98: uint16(24726), + 99: uint16(24730), + 100: uint16(24749), + 101: uint16(24733), + 102: uint16(24707), + 103: uint16(24722), + 104: uint16(24716), + 105: uint16(24731), + 106: uint16(24812), + 107: uint16(24763), + 108: uint16(24753), + 109: uint16(24797), + 110: uint16(24792), + 111: uint16(24774), + 112: uint16(24794), + 113: uint16(24756), + 114: uint16(24864), + 115: uint16(24870), + 116: uint16(24853), + 117: uint16(24867), + 118: uint16(24820), + 119: uint16(24832), + 120: uint16(24846), + 121: uint16(24875), + 122: uint16(24906), + 123: uint16(24949), + 124: uint16(25004), + 125: uint16(24980), + 126: uint16(24999), + 127: uint16(25015), + 128: uint16(25044), + 129: uint16(25077), + 130: uint16(24541), + 131: uint16(38579), + 132: uint16(38377), + 133: uint16(38379), + 134: uint16(38385), + 135: uint16(38387), + 136: uint16(38389), + 137: uint16(38390), + 138: uint16(38396), + 139: uint16(38398), + 140: uint16(38403), + 141: uint16(38404), + 142: uint16(38406), + 143: uint16(38408), + 144: uint16(38410), + 145: uint16(38411), + 146: uint16(38412), + 147: uint16(38413), + 148: uint16(38415), + 149: uint16(38418), + 150: uint16(38421), + 151: uint16(38422), + 152: uint16(38423), + 153: uint16(38425), + 154: uint16(38426), + 155: uint16(20012), + 156: uint16(29247), + 157: uint16(25109), + 158: uint16(27701), + 159: uint16(27732), + 160: uint16(27740), + 161: uint16(27722), + 162: uint16(27811), + 163: uint16(27781), + 164: uint16(27792), + 165: uint16(27796), + 166: uint16(27788), + 167: uint16(27752), + 168: uint16(27753), + 169: uint16(27764), + 170: uint16(27766), + 171: uint16(27782), + 172: uint16(27817), + 173: uint16(27856), + 174: uint16(27860), + 175: uint16(27821), + 176: uint16(27895), + 177: uint16(27896), + 178: uint16(27889), + 179: uint16(27863), + 180: uint16(27826), + 181: uint16(27872), + 182: uint16(27862), + 183: uint16(27898), + 184: uint16(27883), + 185: uint16(27886), + 186: uint16(27825), + 187: uint16(27859), + 188: uint16(27887), + 189: uint16(27902), + }, + 99: { + 0: uint16(37544), + 1: uint16(37545), + 2: uint16(37546), + 3: uint16(37547), + 4: uint16(37548), + 5: uint16(37549), + 6: uint16(37551), + 7: uint16(37552), + 8: uint16(37553), + 9: uint16(37554), + 10: uint16(37555), + 11: uint16(37556), + 12: uint16(37557), + 13: uint16(37558), + 14: uint16(37559), + 15: uint16(37560), + 16: uint16(37561), + 17: uint16(37562), + 18: uint16(37563), + 19: uint16(37564), + 20: uint16(37565), + 21: uint16(37566), + 22: uint16(37567), + 23: uint16(37568), + 24: uint16(37569), + 25: uint16(37570), + 26: uint16(37571), + 27: uint16(37572), + 28: uint16(37573), + 29: uint16(37574), + 30: uint16(37575), + 31: uint16(37577), + 32: uint16(37578), + 33: uint16(37579), + 34: uint16(37580), + 35: uint16(37581), + 36: uint16(37582), + 37: uint16(37583), + 38: uint16(37584), + 39: uint16(37585), + 40: uint16(37586), + 41: uint16(37587), + 42: uint16(37588), + 43: uint16(37589), + 44: uint16(37590), + 45: uint16(37591), + 46: uint16(37592), + 47: uint16(37593), + 48: uint16(37594), + 49: uint16(37595), + 50: uint16(37596), + 51: uint16(37597), + 52: uint16(37598), + 53: uint16(37599), + 54: uint16(37600), + 55: uint16(37601), + 56: uint16(37602), + 57: uint16(37603), + 58: uint16(37604), + 59: uint16(37605), + 60: uint16(37606), + 61: uint16(37607), + 62: uint16(37608), + 63: uint16(37609), + 64: uint16(37610), + 65: uint16(37611), + 66: uint16(37612), + 67: uint16(37613), + 68: uint16(37614), + 69: uint16(37615), + 70: uint16(37616), + 71: uint16(37617), + 72: uint16(37618), + 73: uint16(37619), + 74: uint16(37620), + 75: uint16(37621), + 76: uint16(37622), + 77: uint16(37623), + 78: uint16(37624), + 79: uint16(37625), + 80: uint16(37626), + 81: uint16(37627), + 82: uint16(37628), + 83: uint16(37629), + 84: uint16(37630), + 85: uint16(37631), + 86: uint16(37632), + 87: uint16(37633), + 88: uint16(37634), + 89: uint16(37635), + 90: uint16(37636), + 91: uint16(37637), + 92: uint16(37638), + 93: uint16(37639), + 94: uint16(37640), + 95: uint16(37641), + 96: uint16(27961), + 97: uint16(27943), + 98: uint16(27916), + 99: uint16(27971), + 100: uint16(27976), + 101: uint16(27911), + 102: uint16(27908), + 103: uint16(27929), + 104: uint16(27918), + 105: uint16(27947), + 106: uint16(27981), + 107: uint16(27950), + 108: uint16(27957), + 109: uint16(27930), + 110: uint16(27983), + 111: uint16(27986), + 112: uint16(27988), + 113: uint16(27955), + 114: uint16(28049), + 115: uint16(28015), + 116: uint16(28062), + 117: uint16(28064), + 118: uint16(27998), + 119: uint16(28051), + 120: uint16(28052), + 121: uint16(27996), + 122: uint16(28000), + 123: uint16(28028), + 124: uint16(28003), + 125: uint16(28186), + 126: uint16(28103), + 127: uint16(28101), + 128: uint16(28126), + 129: uint16(28174), + 130: uint16(28095), + 131: uint16(28128), + 132: uint16(28177), + 133: uint16(28134), + 134: uint16(28125), + 135: uint16(28121), + 136: uint16(28182), + 137: uint16(28075), + 138: uint16(28172), + 139: uint16(28078), + 140: uint16(28203), + 141: uint16(28270), + 142: uint16(28238), + 143: uint16(28267), + 144: uint16(28338), + 145: uint16(28255), + 146: uint16(28294), + 147: uint16(28243), + 148: uint16(28244), + 149: uint16(28210), + 150: uint16(28197), + 151: uint16(28228), + 152: uint16(28383), + 153: uint16(28337), + 154: uint16(28312), + 155: uint16(28384), + 156: uint16(28461), + 157: uint16(28386), + 158: uint16(28325), + 159: uint16(28327), + 160: uint16(28349), + 161: uint16(28347), + 162: uint16(28343), + 163: uint16(28375), + 164: uint16(28340), + 165: uint16(28367), + 166: uint16(28303), + 167: uint16(28354), + 168: uint16(28319), + 169: uint16(28514), + 170: uint16(28486), + 171: uint16(28487), + 172: uint16(28452), + 173: uint16(28437), + 174: uint16(28409), + 175: uint16(28463), + 176: uint16(28470), + 177: uint16(28491), + 178: uint16(28532), + 179: uint16(28458), + 180: uint16(28425), + 181: uint16(28457), + 182: uint16(28553), + 183: uint16(28557), + 184: uint16(28556), + 185: uint16(28536), + 186: uint16(28530), + 187: uint16(28540), + 188: uint16(28538), + 189: uint16(28625), + }, + 100: { + 0: uint16(37642), + 1: uint16(37643), + 2: uint16(37644), + 3: uint16(37645), + 4: uint16(37646), + 5: uint16(37647), + 6: uint16(37648), + 7: uint16(37649), + 8: uint16(37650), + 9: uint16(37651), + 10: uint16(37652), + 11: uint16(37653), + 12: uint16(37654), + 13: uint16(37655), + 14: uint16(37656), + 15: uint16(37657), + 16: uint16(37658), + 17: uint16(37659), + 18: uint16(37660), + 19: uint16(37661), + 20: uint16(37662), + 21: uint16(37663), + 22: uint16(37664), + 23: uint16(37665), + 24: uint16(37666), + 25: uint16(37667), + 26: uint16(37668), + 27: uint16(37669), + 28: uint16(37670), + 29: uint16(37671), + 30: uint16(37672), + 31: uint16(37673), + 32: uint16(37674), + 33: uint16(37675), + 34: uint16(37676), + 35: uint16(37677), + 36: uint16(37678), + 37: uint16(37679), + 38: uint16(37680), + 39: uint16(37681), + 40: uint16(37682), + 41: uint16(37683), + 42: uint16(37684), + 43: uint16(37685), + 44: uint16(37686), + 45: uint16(37687), + 46: uint16(37688), + 47: uint16(37689), + 48: uint16(37690), + 49: uint16(37691), + 50: uint16(37692), + 51: uint16(37693), + 52: uint16(37695), + 53: uint16(37696), + 54: uint16(37697), + 55: uint16(37698), + 56: uint16(37699), + 57: uint16(37700), + 58: uint16(37701), + 59: uint16(37702), + 60: uint16(37703), + 61: uint16(37704), + 62: uint16(37705), + 63: uint16(37706), + 64: uint16(37707), + 65: uint16(37708), + 66: uint16(37709), + 67: uint16(37710), + 68: uint16(37711), + 69: uint16(37712), + 70: uint16(37713), + 71: uint16(37714), + 72: uint16(37715), + 73: uint16(37716), + 74: uint16(37717), + 75: uint16(37718), + 76: uint16(37719), + 77: uint16(37720), + 78: uint16(37721), + 79: uint16(37722), + 80: uint16(37723), + 81: uint16(37724), + 82: uint16(37725), + 83: uint16(37726), + 84: uint16(37727), + 85: uint16(37728), + 86: uint16(37729), + 87: uint16(37730), + 88: uint16(37731), + 89: uint16(37732), + 90: uint16(37733), + 91: uint16(37734), + 92: uint16(37735), + 93: uint16(37736), + 94: uint16(37737), + 95: uint16(37739), + 96: uint16(28617), + 97: uint16(28583), + 98: uint16(28601), + 99: uint16(28598), + 100: uint16(28610), + 101: uint16(28641), + 102: uint16(28654), + 103: uint16(28638), + 104: uint16(28640), + 105: uint16(28655), + 106: uint16(28698), + 107: uint16(28707), + 108: uint16(28699), + 109: uint16(28729), + 110: uint16(28725), + 111: uint16(28751), + 112: uint16(28766), + 113: uint16(23424), + 114: uint16(23428), + 115: uint16(23445), + 116: uint16(23443), + 117: uint16(23461), + 118: uint16(23480), + 119: uint16(29999), + 120: uint16(39582), + 121: uint16(25652), + 122: uint16(23524), + 123: uint16(23534), + 124: uint16(35120), + 125: uint16(23536), + 126: uint16(36423), + 127: uint16(35591), + 128: uint16(36790), + 129: uint16(36819), + 130: uint16(36821), + 131: uint16(36837), + 132: uint16(36846), + 133: uint16(36836), + 134: uint16(36841), + 135: uint16(36838), + 136: uint16(36851), + 137: uint16(36840), + 138: uint16(36869), + 139: uint16(36868), + 140: uint16(36875), + 141: uint16(36902), + 142: uint16(36881), + 143: uint16(36877), + 144: uint16(36886), + 145: uint16(36897), + 146: uint16(36917), + 147: uint16(36918), + 148: uint16(36909), + 149: uint16(36911), + 150: uint16(36932), + 151: uint16(36945), + 152: uint16(36946), + 153: uint16(36944), + 154: uint16(36968), + 155: uint16(36952), + 156: uint16(36962), + 157: uint16(36955), + 158: uint16(26297), + 159: uint16(36980), + 160: uint16(36989), + 161: uint16(36994), + 162: uint16(37000), + 163: uint16(36995), + 164: uint16(37003), + 165: uint16(24400), + 166: uint16(24407), + 167: uint16(24406), + 168: uint16(24408), + 169: uint16(23611), + 170: uint16(21675), + 171: uint16(23632), + 172: uint16(23641), + 173: uint16(23409), + 174: uint16(23651), + 175: uint16(23654), + 176: uint16(32700), + 177: uint16(24362), + 178: uint16(24361), + 179: uint16(24365), + 180: uint16(33396), + 181: uint16(24380), + 182: uint16(39739), + 183: uint16(23662), + 184: uint16(22913), + 185: uint16(22915), + 186: uint16(22925), + 187: uint16(22953), + 188: uint16(22954), + 189: uint16(22947), + }, + 101: { + 0: uint16(37740), + 1: uint16(37741), + 2: uint16(37742), + 3: uint16(37743), + 4: uint16(37744), + 5: uint16(37745), + 6: uint16(37746), + 7: uint16(37747), + 8: uint16(37748), + 9: uint16(37749), + 10: uint16(37750), + 11: uint16(37751), + 12: uint16(37752), + 13: uint16(37753), + 14: uint16(37754), + 15: uint16(37755), + 16: uint16(37756), + 17: uint16(37757), + 18: uint16(37758), + 19: uint16(37759), + 20: uint16(37760), + 21: uint16(37761), + 22: uint16(37762), + 23: uint16(37763), + 24: uint16(37764), + 25: uint16(37765), + 26: uint16(37766), + 27: uint16(37767), + 28: uint16(37768), + 29: uint16(37769), + 30: uint16(37770), + 31: uint16(37771), + 32: uint16(37772), + 33: uint16(37773), + 34: uint16(37774), + 35: uint16(37776), + 36: uint16(37777), + 37: uint16(37778), + 38: uint16(37779), + 39: uint16(37780), + 40: uint16(37781), + 41: uint16(37782), + 42: uint16(37783), + 43: uint16(37784), + 44: uint16(37785), + 45: uint16(37786), + 46: uint16(37787), + 47: uint16(37788), + 48: uint16(37789), + 49: uint16(37790), + 50: uint16(37791), + 51: uint16(37792), + 52: uint16(37793), + 53: uint16(37794), + 54: uint16(37795), + 55: uint16(37796), + 56: uint16(37797), + 57: uint16(37798), + 58: uint16(37799), + 59: uint16(37800), + 60: uint16(37801), + 61: uint16(37802), + 62: uint16(37803), + 63: uint16(37804), + 64: uint16(37805), + 65: uint16(37806), + 66: uint16(37807), + 67: uint16(37808), + 68: uint16(37809), + 69: uint16(37810), + 70: uint16(37811), + 71: uint16(37812), + 72: uint16(37813), + 73: uint16(37814), + 74: uint16(37815), + 75: uint16(37816), + 76: uint16(37817), + 77: uint16(37818), + 78: uint16(37819), + 79: uint16(37820), + 80: uint16(37821), + 81: uint16(37822), + 82: uint16(37823), + 83: uint16(37824), + 84: uint16(37825), + 85: uint16(37826), + 86: uint16(37827), + 87: uint16(37828), + 88: uint16(37829), + 89: uint16(37830), + 90: uint16(37831), + 91: uint16(37832), + 92: uint16(37833), + 93: uint16(37835), + 94: uint16(37836), + 95: uint16(37837), + 96: uint16(22935), + 97: uint16(22986), + 98: uint16(22955), + 99: uint16(22942), + 100: uint16(22948), + 101: uint16(22994), + 102: uint16(22962), + 103: uint16(22959), + 104: uint16(22999), + 105: uint16(22974), + 106: uint16(23045), + 107: uint16(23046), + 108: uint16(23005), + 109: uint16(23048), + 110: uint16(23011), + 111: uint16(23000), + 112: uint16(23033), + 113: uint16(23052), + 114: uint16(23049), + 115: uint16(23090), + 116: uint16(23092), + 117: uint16(23057), + 118: uint16(23075), + 119: uint16(23059), + 120: uint16(23104), + 121: uint16(23143), + 122: uint16(23114), + 123: uint16(23125), + 124: uint16(23100), + 125: uint16(23138), + 126: uint16(23157), + 127: uint16(33004), + 128: uint16(23210), + 129: uint16(23195), + 130: uint16(23159), + 131: uint16(23162), + 132: uint16(23230), + 133: uint16(23275), + 134: uint16(23218), + 135: uint16(23250), + 136: uint16(23252), + 137: uint16(23224), + 138: uint16(23264), + 139: uint16(23267), + 140: uint16(23281), + 141: uint16(23254), + 142: uint16(23270), + 143: uint16(23256), + 144: uint16(23260), + 145: uint16(23305), + 146: uint16(23319), + 147: uint16(23318), + 148: uint16(23346), + 149: uint16(23351), + 150: uint16(23360), + 151: uint16(23573), + 152: uint16(23580), + 153: uint16(23386), + 154: uint16(23397), + 155: uint16(23411), + 156: uint16(23377), + 157: uint16(23379), + 158: uint16(23394), + 159: uint16(39541), + 160: uint16(39543), + 161: uint16(39544), + 162: uint16(39546), + 163: uint16(39551), + 164: uint16(39549), + 165: uint16(39552), + 166: uint16(39553), + 167: uint16(39557), + 168: uint16(39560), + 169: uint16(39562), + 170: uint16(39568), + 171: uint16(39570), + 172: uint16(39571), + 173: uint16(39574), + 174: uint16(39576), + 175: uint16(39579), + 176: uint16(39580), + 177: uint16(39581), + 178: uint16(39583), + 179: uint16(39584), + 180: uint16(39586), + 181: uint16(39587), + 182: uint16(39589), + 183: uint16(39591), + 184: uint16(32415), + 185: uint16(32417), + 186: uint16(32419), + 187: uint16(32421), + 188: uint16(32424), + 189: uint16(32425), + }, + 102: { + 0: uint16(37838), + 1: uint16(37839), + 2: uint16(37840), + 3: uint16(37841), + 4: uint16(37842), + 5: uint16(37843), + 6: uint16(37844), + 7: uint16(37845), + 8: uint16(37847), + 9: uint16(37848), + 10: uint16(37849), + 11: uint16(37850), + 12: uint16(37851), + 13: uint16(37852), + 14: uint16(37853), + 15: uint16(37854), + 16: uint16(37855), + 17: uint16(37856), + 18: uint16(37857), + 19: uint16(37858), + 20: uint16(37859), + 21: uint16(37860), + 22: uint16(37861), + 23: uint16(37862), + 24: uint16(37863), + 25: uint16(37864), + 26: uint16(37865), + 27: uint16(37866), + 28: uint16(37867), + 29: uint16(37868), + 30: uint16(37869), + 31: uint16(37870), + 32: uint16(37871), + 33: uint16(37872), + 34: uint16(37873), + 35: uint16(37874), + 36: uint16(37875), + 37: uint16(37876), + 38: uint16(37877), + 39: uint16(37878), + 40: uint16(37879), + 41: uint16(37880), + 42: uint16(37881), + 43: uint16(37882), + 44: uint16(37883), + 45: uint16(37884), + 46: uint16(37885), + 47: uint16(37886), + 48: uint16(37887), + 49: uint16(37888), + 50: uint16(37889), + 51: uint16(37890), + 52: uint16(37891), + 53: uint16(37892), + 54: uint16(37893), + 55: uint16(37894), + 56: uint16(37895), + 57: uint16(37896), + 58: uint16(37897), + 59: uint16(37898), + 60: uint16(37899), + 61: uint16(37900), + 62: uint16(37901), + 63: uint16(37902), + 64: uint16(37903), + 65: uint16(37904), + 66: uint16(37905), + 67: uint16(37906), + 68: uint16(37907), + 69: uint16(37908), + 70: uint16(37909), + 71: uint16(37910), + 72: uint16(37911), + 73: uint16(37912), + 74: uint16(37913), + 75: uint16(37914), + 76: uint16(37915), + 77: uint16(37916), + 78: uint16(37917), + 79: uint16(37918), + 80: uint16(37919), + 81: uint16(37920), + 82: uint16(37921), + 83: uint16(37922), + 84: uint16(37923), + 85: uint16(37924), + 86: uint16(37925), + 87: uint16(37926), + 88: uint16(37927), + 89: uint16(37928), + 90: uint16(37929), + 91: uint16(37930), + 92: uint16(37931), + 93: uint16(37932), + 94: uint16(37933), + 95: uint16(37934), + 96: uint16(32429), + 97: uint16(32432), + 98: uint16(32446), + 99: uint16(32448), + 100: uint16(32449), + 101: uint16(32450), + 102: uint16(32457), + 103: uint16(32459), + 104: uint16(32460), + 105: uint16(32464), + 106: uint16(32468), + 107: uint16(32471), + 108: uint16(32475), + 109: uint16(32480), + 110: uint16(32481), + 111: uint16(32488), + 112: uint16(32491), + 113: uint16(32494), + 114: uint16(32495), + 115: uint16(32497), + 116: uint16(32498), + 117: uint16(32525), + 118: uint16(32502), + 119: uint16(32506), + 120: uint16(32507), + 121: uint16(32510), + 122: uint16(32513), + 123: uint16(32514), + 124: uint16(32515), + 125: uint16(32519), + 126: uint16(32520), + 127: uint16(32523), + 128: uint16(32524), + 129: uint16(32527), + 130: uint16(32529), + 131: uint16(32530), + 132: uint16(32535), + 133: uint16(32537), + 134: uint16(32540), + 135: uint16(32539), + 136: uint16(32543), + 137: uint16(32545), + 138: uint16(32546), + 139: uint16(32547), + 140: uint16(32548), + 141: uint16(32549), + 142: uint16(32550), + 143: uint16(32551), + 144: uint16(32554), + 145: uint16(32555), + 146: uint16(32556), + 147: uint16(32557), + 148: uint16(32559), + 149: uint16(32560), + 150: uint16(32561), + 151: uint16(32562), + 152: uint16(32563), + 153: uint16(32565), + 154: uint16(24186), + 155: uint16(30079), + 156: uint16(24027), + 157: uint16(30014), + 158: uint16(37013), + 159: uint16(29582), + 160: uint16(29585), + 161: uint16(29614), + 162: uint16(29602), + 163: uint16(29599), + 164: uint16(29647), + 165: uint16(29634), + 166: uint16(29649), + 167: uint16(29623), + 168: uint16(29619), + 169: uint16(29632), + 170: uint16(29641), + 171: uint16(29640), + 172: uint16(29669), + 173: uint16(29657), + 174: uint16(39036), + 175: uint16(29706), + 176: uint16(29673), + 177: uint16(29671), + 178: uint16(29662), + 179: uint16(29626), + 180: uint16(29682), + 181: uint16(29711), + 182: uint16(29738), + 183: uint16(29787), + 184: uint16(29734), + 185: uint16(29733), + 186: uint16(29736), + 187: uint16(29744), + 188: uint16(29742), + 189: uint16(29740), + }, + 103: { + 0: uint16(37935), + 1: uint16(37936), + 2: uint16(37937), + 3: uint16(37938), + 4: uint16(37939), + 5: uint16(37940), + 6: uint16(37941), + 7: uint16(37942), + 8: uint16(37943), + 9: uint16(37944), + 10: uint16(37945), + 11: uint16(37946), + 12: uint16(37947), + 13: uint16(37948), + 14: uint16(37949), + 15: uint16(37951), + 16: uint16(37952), + 17: uint16(37953), + 18: uint16(37954), + 19: uint16(37955), + 20: uint16(37956), + 21: uint16(37957), + 22: uint16(37958), + 23: uint16(37959), + 24: uint16(37960), + 25: uint16(37961), + 26: uint16(37962), + 27: uint16(37963), + 28: uint16(37964), + 29: uint16(37965), + 30: uint16(37966), + 31: uint16(37967), + 32: uint16(37968), + 33: uint16(37969), + 34: uint16(37970), + 35: uint16(37971), + 36: uint16(37972), + 37: uint16(37973), + 38: uint16(37974), + 39: uint16(37975), + 40: uint16(37976), + 41: uint16(37977), + 42: uint16(37978), + 43: uint16(37979), + 44: uint16(37980), + 45: uint16(37981), + 46: uint16(37982), + 47: uint16(37983), + 48: uint16(37984), + 49: uint16(37985), + 50: uint16(37986), + 51: uint16(37987), + 52: uint16(37988), + 53: uint16(37989), + 54: uint16(37990), + 55: uint16(37991), + 56: uint16(37992), + 57: uint16(37993), + 58: uint16(37994), + 59: uint16(37996), + 60: uint16(37997), + 61: uint16(37998), + 62: uint16(37999), + 63: uint16(38000), + 64: uint16(38001), + 65: uint16(38002), + 66: uint16(38003), + 67: uint16(38004), + 68: uint16(38005), + 69: uint16(38006), + 70: uint16(38007), + 71: uint16(38008), + 72: uint16(38009), + 73: uint16(38010), + 74: uint16(38011), + 75: uint16(38012), + 76: uint16(38013), + 77: uint16(38014), + 78: uint16(38015), + 79: uint16(38016), + 80: uint16(38017), + 81: uint16(38018), + 82: uint16(38019), + 83: uint16(38020), + 84: uint16(38033), + 85: uint16(38038), + 86: uint16(38040), + 87: uint16(38087), + 88: uint16(38095), + 89: uint16(38099), + 90: uint16(38100), + 91: uint16(38106), + 92: uint16(38118), + 93: uint16(38139), + 94: uint16(38172), + 95: uint16(38176), + 96: uint16(29723), + 97: uint16(29722), + 98: uint16(29761), + 99: uint16(29788), + 100: uint16(29783), + 101: uint16(29781), + 102: uint16(29785), + 103: uint16(29815), + 104: uint16(29805), + 105: uint16(29822), + 106: uint16(29852), + 107: uint16(29838), + 108: uint16(29824), + 109: uint16(29825), + 110: uint16(29831), + 111: uint16(29835), + 112: uint16(29854), + 113: uint16(29864), + 114: uint16(29865), + 115: uint16(29840), + 116: uint16(29863), + 117: uint16(29906), + 118: uint16(29882), + 119: uint16(38890), + 120: uint16(38891), + 121: uint16(38892), + 122: uint16(26444), + 123: uint16(26451), + 124: uint16(26462), + 125: uint16(26440), + 126: uint16(26473), + 127: uint16(26533), + 128: uint16(26503), + 129: uint16(26474), + 130: uint16(26483), + 131: uint16(26520), + 132: uint16(26535), + 133: uint16(26485), + 134: uint16(26536), + 135: uint16(26526), + 136: uint16(26541), + 137: uint16(26507), + 138: uint16(26487), + 139: uint16(26492), + 140: uint16(26608), + 141: uint16(26633), + 142: uint16(26584), + 143: uint16(26634), + 144: uint16(26601), + 145: uint16(26544), + 146: uint16(26636), + 147: uint16(26585), + 148: uint16(26549), + 149: uint16(26586), + 150: uint16(26547), + 151: uint16(26589), + 152: uint16(26624), + 153: uint16(26563), + 154: uint16(26552), + 155: uint16(26594), + 156: uint16(26638), + 157: uint16(26561), + 158: uint16(26621), + 159: uint16(26674), + 160: uint16(26675), + 161: uint16(26720), + 162: uint16(26721), + 163: uint16(26702), + 164: uint16(26722), + 165: uint16(26692), + 166: uint16(26724), + 167: uint16(26755), + 168: uint16(26653), + 169: uint16(26709), + 170: uint16(26726), + 171: uint16(26689), + 172: uint16(26727), + 173: uint16(26688), + 174: uint16(26686), + 175: uint16(26698), + 176: uint16(26697), + 177: uint16(26665), + 178: uint16(26805), + 179: uint16(26767), + 180: uint16(26740), + 181: uint16(26743), + 182: uint16(26771), + 183: uint16(26731), + 184: uint16(26818), + 185: uint16(26990), + 186: uint16(26876), + 187: uint16(26911), + 188: uint16(26912), + 189: uint16(26873), + }, + 104: { + 0: uint16(38183), + 1: uint16(38195), + 2: uint16(38205), + 3: uint16(38211), + 4: uint16(38216), + 5: uint16(38219), + 6: uint16(38229), + 7: uint16(38234), + 8: uint16(38240), + 9: uint16(38254), + 10: uint16(38260), + 11: uint16(38261), + 12: uint16(38263), + 13: uint16(38264), + 14: uint16(38265), + 15: uint16(38266), + 16: uint16(38267), + 17: uint16(38268), + 18: uint16(38269), + 19: uint16(38270), + 20: uint16(38272), + 21: uint16(38273), + 22: uint16(38274), + 23: uint16(38275), + 24: uint16(38276), + 25: uint16(38277), + 26: uint16(38278), + 27: uint16(38279), + 28: uint16(38280), + 29: uint16(38281), + 30: uint16(38282), + 31: uint16(38283), + 32: uint16(38284), + 33: uint16(38285), + 34: uint16(38286), + 35: uint16(38287), + 36: uint16(38288), + 37: uint16(38289), + 38: uint16(38290), + 39: uint16(38291), + 40: uint16(38292), + 41: uint16(38293), + 42: uint16(38294), + 43: uint16(38295), + 44: uint16(38296), + 45: uint16(38297), + 46: uint16(38298), + 47: uint16(38299), + 48: uint16(38300), + 49: uint16(38301), + 50: uint16(38302), + 51: uint16(38303), + 52: uint16(38304), + 53: uint16(38305), + 54: uint16(38306), + 55: uint16(38307), + 56: uint16(38308), + 57: uint16(38309), + 58: uint16(38310), + 59: uint16(38311), + 60: uint16(38312), + 61: uint16(38313), + 62: uint16(38314), + 63: uint16(38315), + 64: uint16(38316), + 65: uint16(38317), + 66: uint16(38318), + 67: uint16(38319), + 68: uint16(38320), + 69: uint16(38321), + 70: uint16(38322), + 71: uint16(38323), + 72: uint16(38324), + 73: uint16(38325), + 74: uint16(38326), + 75: uint16(38327), + 76: uint16(38328), + 77: uint16(38329), + 78: uint16(38330), + 79: uint16(38331), + 80: uint16(38332), + 81: uint16(38333), + 82: uint16(38334), + 83: uint16(38335), + 84: uint16(38336), + 85: uint16(38337), + 86: uint16(38338), + 87: uint16(38339), + 88: uint16(38340), + 89: uint16(38341), + 90: uint16(38342), + 91: uint16(38343), + 92: uint16(38344), + 93: uint16(38345), + 94: uint16(38346), + 95: uint16(38347), + 96: uint16(26916), + 97: uint16(26864), + 98: uint16(26891), + 99: uint16(26881), + 100: uint16(26967), + 101: uint16(26851), + 102: uint16(26896), + 103: uint16(26993), + 104: uint16(26937), + 105: uint16(26976), + 106: uint16(26946), + 107: uint16(26973), + 108: uint16(27012), + 109: uint16(26987), + 110: uint16(27008), + 111: uint16(27032), + 112: uint16(27000), + 113: uint16(26932), + 114: uint16(27084), + 115: uint16(27015), + 116: uint16(27016), + 117: uint16(27086), + 118: uint16(27017), + 119: uint16(26982), + 120: uint16(26979), + 121: uint16(27001), + 122: uint16(27035), + 123: uint16(27047), + 124: uint16(27067), + 125: uint16(27051), + 126: uint16(27053), + 127: uint16(27092), + 128: uint16(27057), + 129: uint16(27073), + 130: uint16(27082), + 131: uint16(27103), + 132: uint16(27029), + 133: uint16(27104), + 134: uint16(27021), + 135: uint16(27135), + 136: uint16(27183), + 137: uint16(27117), + 138: uint16(27159), + 139: uint16(27160), + 140: uint16(27237), + 141: uint16(27122), + 142: uint16(27204), + 143: uint16(27198), + 144: uint16(27296), + 145: uint16(27216), + 146: uint16(27227), + 147: uint16(27189), + 148: uint16(27278), + 149: uint16(27257), + 150: uint16(27197), + 151: uint16(27176), + 152: uint16(27224), + 153: uint16(27260), + 154: uint16(27281), + 155: uint16(27280), + 156: uint16(27305), + 157: uint16(27287), + 158: uint16(27307), + 159: uint16(29495), + 160: uint16(29522), + 161: uint16(27521), + 162: uint16(27522), + 163: uint16(27527), + 164: uint16(27524), + 165: uint16(27538), + 166: uint16(27539), + 167: uint16(27533), + 168: uint16(27546), + 169: uint16(27547), + 170: uint16(27553), + 171: uint16(27562), + 172: uint16(36715), + 173: uint16(36717), + 174: uint16(36721), + 175: uint16(36722), + 176: uint16(36723), + 177: uint16(36725), + 178: uint16(36726), + 179: uint16(36728), + 180: uint16(36727), + 181: uint16(36729), + 182: uint16(36730), + 183: uint16(36732), + 184: uint16(36734), + 185: uint16(36737), + 186: uint16(36738), + 187: uint16(36740), + 188: uint16(36743), + 189: uint16(36747), + }, + 105: { + 0: uint16(38348), + 1: uint16(38349), + 2: uint16(38350), + 3: uint16(38351), + 4: uint16(38352), + 5: uint16(38353), + 6: uint16(38354), + 7: uint16(38355), + 8: uint16(38356), + 9: uint16(38357), + 10: uint16(38358), + 11: uint16(38359), + 12: uint16(38360), + 13: uint16(38361), + 14: uint16(38362), + 15: uint16(38363), + 16: uint16(38364), + 17: uint16(38365), + 18: uint16(38366), + 19: uint16(38367), + 20: uint16(38368), + 21: uint16(38369), + 22: uint16(38370), + 23: uint16(38371), + 24: uint16(38372), + 25: uint16(38373), + 26: uint16(38374), + 27: uint16(38375), + 28: uint16(38380), + 29: uint16(38399), + 30: uint16(38407), + 31: uint16(38419), + 32: uint16(38424), + 33: uint16(38427), + 34: uint16(38430), + 35: uint16(38432), + 36: uint16(38435), + 37: uint16(38436), + 38: uint16(38437), + 39: uint16(38438), + 40: uint16(38439), + 41: uint16(38440), + 42: uint16(38441), + 43: uint16(38443), + 44: uint16(38444), + 45: uint16(38445), + 46: uint16(38447), + 47: uint16(38448), + 48: uint16(38455), + 49: uint16(38456), + 50: uint16(38457), + 51: uint16(38458), + 52: uint16(38462), + 53: uint16(38465), + 54: uint16(38467), + 55: uint16(38474), + 56: uint16(38478), + 57: uint16(38479), + 58: uint16(38481), + 59: uint16(38482), + 60: uint16(38483), + 61: uint16(38486), + 62: uint16(38487), + 63: uint16(38488), + 64: uint16(38489), + 65: uint16(38490), + 66: uint16(38492), + 67: uint16(38493), + 68: uint16(38494), + 69: uint16(38496), + 70: uint16(38499), + 71: uint16(38501), + 72: uint16(38502), + 73: uint16(38507), + 74: uint16(38509), + 75: uint16(38510), + 76: uint16(38511), + 77: uint16(38512), + 78: uint16(38513), + 79: uint16(38515), + 80: uint16(38520), + 81: uint16(38521), + 82: uint16(38522), + 83: uint16(38523), + 84: uint16(38524), + 85: uint16(38525), + 86: uint16(38526), + 87: uint16(38527), + 88: uint16(38528), + 89: uint16(38529), + 90: uint16(38530), + 91: uint16(38531), + 92: uint16(38532), + 93: uint16(38535), + 94: uint16(38537), + 95: uint16(38538), + 96: uint16(36749), + 97: uint16(36750), + 98: uint16(36751), + 99: uint16(36760), + 100: uint16(36762), + 101: uint16(36558), + 102: uint16(25099), + 103: uint16(25111), + 104: uint16(25115), + 105: uint16(25119), + 106: uint16(25122), + 107: uint16(25121), + 108: uint16(25125), + 109: uint16(25124), + 110: uint16(25132), + 111: uint16(33255), + 112: uint16(29935), + 113: uint16(29940), + 114: uint16(29951), + 115: uint16(29967), + 116: uint16(29969), + 117: uint16(29971), + 118: uint16(25908), + 119: uint16(26094), + 120: uint16(26095), + 121: uint16(26096), + 122: uint16(26122), + 123: uint16(26137), + 124: uint16(26482), + 125: uint16(26115), + 126: uint16(26133), + 127: uint16(26112), + 128: uint16(28805), + 129: uint16(26359), + 130: uint16(26141), + 131: uint16(26164), + 132: uint16(26161), + 133: uint16(26166), + 134: uint16(26165), + 135: uint16(32774), + 136: uint16(26207), + 137: uint16(26196), + 138: uint16(26177), + 139: uint16(26191), + 140: uint16(26198), + 141: uint16(26209), + 142: uint16(26199), + 143: uint16(26231), + 144: uint16(26244), + 145: uint16(26252), + 146: uint16(26279), + 147: uint16(26269), + 148: uint16(26302), + 149: uint16(26331), + 150: uint16(26332), + 151: uint16(26342), + 152: uint16(26345), + 153: uint16(36146), + 154: uint16(36147), + 155: uint16(36150), + 156: uint16(36155), + 157: uint16(36157), + 158: uint16(36160), + 159: uint16(36165), + 160: uint16(36166), + 161: uint16(36168), + 162: uint16(36169), + 163: uint16(36167), + 164: uint16(36173), + 165: uint16(36181), + 166: uint16(36185), + 167: uint16(35271), + 168: uint16(35274), + 169: uint16(35275), + 170: uint16(35276), + 171: uint16(35278), + 172: uint16(35279), + 173: uint16(35280), + 174: uint16(35281), + 175: uint16(29294), + 176: uint16(29343), + 177: uint16(29277), + 178: uint16(29286), + 179: uint16(29295), + 180: uint16(29310), + 181: uint16(29311), + 182: uint16(29316), + 183: uint16(29323), + 184: uint16(29325), + 185: uint16(29327), + 186: uint16(29330), + 187: uint16(25352), + 188: uint16(25394), + 189: uint16(25520), + }, + 106: { + 0: uint16(38540), + 1: uint16(38542), + 2: uint16(38545), + 3: uint16(38546), + 4: uint16(38547), + 5: uint16(38549), + 6: uint16(38550), + 7: uint16(38554), + 8: uint16(38555), + 9: uint16(38557), + 10: uint16(38558), + 11: uint16(38559), + 12: uint16(38560), + 13: uint16(38561), + 14: uint16(38562), + 15: uint16(38563), + 16: uint16(38564), + 17: uint16(38565), + 18: uint16(38566), + 19: uint16(38568), + 20: uint16(38569), + 21: uint16(38570), + 22: uint16(38571), + 23: uint16(38572), + 24: uint16(38573), + 25: uint16(38574), + 26: uint16(38575), + 27: uint16(38577), + 28: uint16(38578), + 29: uint16(38580), + 30: uint16(38581), + 31: uint16(38583), + 32: uint16(38584), + 33: uint16(38586), + 34: uint16(38587), + 35: uint16(38591), + 36: uint16(38594), + 37: uint16(38595), + 38: uint16(38600), + 39: uint16(38602), + 40: uint16(38603), + 41: uint16(38608), + 42: uint16(38609), + 43: uint16(38611), + 44: uint16(38612), + 45: uint16(38614), + 46: uint16(38615), + 47: uint16(38616), + 48: uint16(38617), + 49: uint16(38618), + 50: uint16(38619), + 51: uint16(38620), + 52: uint16(38621), + 53: uint16(38622), + 54: uint16(38623), + 55: uint16(38625), + 56: uint16(38626), + 57: uint16(38627), + 58: uint16(38628), + 59: uint16(38629), + 60: uint16(38630), + 61: uint16(38631), + 62: uint16(38635), + 63: uint16(38636), + 64: uint16(38637), + 65: uint16(38638), + 66: uint16(38640), + 67: uint16(38641), + 68: uint16(38642), + 69: uint16(38644), + 70: uint16(38645), + 71: uint16(38648), + 72: uint16(38650), + 73: uint16(38651), + 74: uint16(38652), + 75: uint16(38653), + 76: uint16(38655), + 77: uint16(38658), + 78: uint16(38659), + 79: uint16(38661), + 80: uint16(38666), + 81: uint16(38667), + 82: uint16(38668), + 83: uint16(38672), + 84: uint16(38673), + 85: uint16(38674), + 86: uint16(38676), + 87: uint16(38677), + 88: uint16(38679), + 89: uint16(38680), + 90: uint16(38681), + 91: uint16(38682), + 92: uint16(38683), + 93: uint16(38685), + 94: uint16(38687), + 95: uint16(38688), + 96: uint16(25663), + 97: uint16(25816), + 98: uint16(32772), + 99: uint16(27626), + 100: uint16(27635), + 101: uint16(27645), + 102: uint16(27637), + 103: uint16(27641), + 104: uint16(27653), + 105: uint16(27655), + 106: uint16(27654), + 107: uint16(27661), + 108: uint16(27669), + 109: uint16(27672), + 110: uint16(27673), + 111: uint16(27674), + 112: uint16(27681), + 113: uint16(27689), + 114: uint16(27684), + 115: uint16(27690), + 116: uint16(27698), + 117: uint16(25909), + 118: uint16(25941), + 119: uint16(25963), + 120: uint16(29261), + 121: uint16(29266), + 122: uint16(29270), + 123: uint16(29232), + 124: uint16(34402), + 125: uint16(21014), + 126: uint16(32927), + 127: uint16(32924), + 128: uint16(32915), + 129: uint16(32956), + 130: uint16(26378), + 131: uint16(32957), + 132: uint16(32945), + 133: uint16(32939), + 134: uint16(32941), + 135: uint16(32948), + 136: uint16(32951), + 137: uint16(32999), + 138: uint16(33000), + 139: uint16(33001), + 140: uint16(33002), + 141: uint16(32987), + 142: uint16(32962), + 143: uint16(32964), + 144: uint16(32985), + 145: uint16(32973), + 146: uint16(32983), + 147: uint16(26384), + 148: uint16(32989), + 149: uint16(33003), + 150: uint16(33009), + 151: uint16(33012), + 152: uint16(33005), + 153: uint16(33037), + 154: uint16(33038), + 155: uint16(33010), + 156: uint16(33020), + 157: uint16(26389), + 158: uint16(33042), + 159: uint16(35930), + 160: uint16(33078), + 161: uint16(33054), + 162: uint16(33068), + 163: uint16(33048), + 164: uint16(33074), + 165: uint16(33096), + 166: uint16(33100), + 167: uint16(33107), + 168: uint16(33140), + 169: uint16(33113), + 170: uint16(33114), + 171: uint16(33137), + 172: uint16(33120), + 173: uint16(33129), + 174: uint16(33148), + 175: uint16(33149), + 176: uint16(33133), + 177: uint16(33127), + 178: uint16(22605), + 179: uint16(23221), + 180: uint16(33160), + 181: uint16(33154), + 182: uint16(33169), + 183: uint16(28373), + 184: uint16(33187), + 185: uint16(33194), + 186: uint16(33228), + 187: uint16(26406), + 188: uint16(33226), + 189: uint16(33211), + }, + 107: { + 0: uint16(38689), + 1: uint16(38690), + 2: uint16(38691), + 3: uint16(38692), + 4: uint16(38693), + 5: uint16(38694), + 6: uint16(38695), + 7: uint16(38696), + 8: uint16(38697), + 9: uint16(38699), + 10: uint16(38700), + 11: uint16(38702), + 12: uint16(38703), + 13: uint16(38705), + 14: uint16(38707), + 15: uint16(38708), + 16: uint16(38709), + 17: uint16(38710), + 18: uint16(38711), + 19: uint16(38714), + 20: uint16(38715), + 21: uint16(38716), + 22: uint16(38717), + 23: uint16(38719), + 24: uint16(38720), + 25: uint16(38721), + 26: uint16(38722), + 27: uint16(38723), + 28: uint16(38724), + 29: uint16(38725), + 30: uint16(38726), + 31: uint16(38727), + 32: uint16(38728), + 33: uint16(38729), + 34: uint16(38730), + 35: uint16(38731), + 36: uint16(38732), + 37: uint16(38733), + 38: uint16(38734), + 39: uint16(38735), + 40: uint16(38736), + 41: uint16(38737), + 42: uint16(38740), + 43: uint16(38741), + 44: uint16(38743), + 45: uint16(38744), + 46: uint16(38746), + 47: uint16(38748), + 48: uint16(38749), + 49: uint16(38751), + 50: uint16(38755), + 51: uint16(38756), + 52: uint16(38758), + 53: uint16(38759), + 54: uint16(38760), + 55: uint16(38762), + 56: uint16(38763), + 57: uint16(38764), + 58: uint16(38765), + 59: uint16(38766), + 60: uint16(38767), + 61: uint16(38768), + 62: uint16(38769), + 63: uint16(38770), + 64: uint16(38773), + 65: uint16(38775), + 66: uint16(38776), + 67: uint16(38777), + 68: uint16(38778), + 69: uint16(38779), + 70: uint16(38781), + 71: uint16(38782), + 72: uint16(38783), + 73: uint16(38784), + 74: uint16(38785), + 75: uint16(38786), + 76: uint16(38787), + 77: uint16(38788), + 78: uint16(38790), + 79: uint16(38791), + 80: uint16(38792), + 81: uint16(38793), + 82: uint16(38794), + 83: uint16(38796), + 84: uint16(38798), + 85: uint16(38799), + 86: uint16(38800), + 87: uint16(38803), + 88: uint16(38805), + 89: uint16(38806), + 90: uint16(38807), + 91: uint16(38809), + 92: uint16(38810), + 93: uint16(38811), + 94: uint16(38812), + 95: uint16(38813), + 96: uint16(33217), + 97: uint16(33190), + 98: uint16(27428), + 99: uint16(27447), + 100: uint16(27449), + 101: uint16(27459), + 102: uint16(27462), + 103: uint16(27481), + 104: uint16(39121), + 105: uint16(39122), + 106: uint16(39123), + 107: uint16(39125), + 108: uint16(39129), + 109: uint16(39130), + 110: uint16(27571), + 111: uint16(24384), + 112: uint16(27586), + 113: uint16(35315), + 114: uint16(26000), + 115: uint16(40785), + 116: uint16(26003), + 117: uint16(26044), + 118: uint16(26054), + 119: uint16(26052), + 120: uint16(26051), + 121: uint16(26060), + 122: uint16(26062), + 123: uint16(26066), + 124: uint16(26070), + 125: uint16(28800), + 126: uint16(28828), + 127: uint16(28822), + 128: uint16(28829), + 129: uint16(28859), + 130: uint16(28864), + 131: uint16(28855), + 132: uint16(28843), + 133: uint16(28849), + 134: uint16(28904), + 135: uint16(28874), + 136: uint16(28944), + 137: uint16(28947), + 138: uint16(28950), + 139: uint16(28975), + 140: uint16(28977), + 141: uint16(29043), + 142: uint16(29020), + 143: uint16(29032), + 144: uint16(28997), + 145: uint16(29042), + 146: uint16(29002), + 147: uint16(29048), + 148: uint16(29050), + 149: uint16(29080), + 150: uint16(29107), + 151: uint16(29109), + 152: uint16(29096), + 153: uint16(29088), + 154: uint16(29152), + 155: uint16(29140), + 156: uint16(29159), + 157: uint16(29177), + 158: uint16(29213), + 159: uint16(29224), + 160: uint16(28780), + 161: uint16(28952), + 162: uint16(29030), + 163: uint16(29113), + 164: uint16(25150), + 165: uint16(25149), + 166: uint16(25155), + 167: uint16(25160), + 168: uint16(25161), + 169: uint16(31035), + 170: uint16(31040), + 171: uint16(31046), + 172: uint16(31049), + 173: uint16(31067), + 174: uint16(31068), + 175: uint16(31059), + 176: uint16(31066), + 177: uint16(31074), + 178: uint16(31063), + 179: uint16(31072), + 180: uint16(31087), + 181: uint16(31079), + 182: uint16(31098), + 183: uint16(31109), + 184: uint16(31114), + 185: uint16(31130), + 186: uint16(31143), + 187: uint16(31155), + 188: uint16(24529), + 189: uint16(24528), + }, + 108: { + 0: uint16(38814), + 1: uint16(38815), + 2: uint16(38817), + 3: uint16(38818), + 4: uint16(38820), + 5: uint16(38821), + 6: uint16(38822), + 7: uint16(38823), + 8: uint16(38824), + 9: uint16(38825), + 10: uint16(38826), + 11: uint16(38828), + 12: uint16(38830), + 13: uint16(38832), + 14: uint16(38833), + 15: uint16(38835), + 16: uint16(38837), + 17: uint16(38838), + 18: uint16(38839), + 19: uint16(38840), + 20: uint16(38841), + 21: uint16(38842), + 22: uint16(38843), + 23: uint16(38844), + 24: uint16(38845), + 25: uint16(38846), + 26: uint16(38847), + 27: uint16(38848), + 28: uint16(38849), + 29: uint16(38850), + 30: uint16(38851), + 31: uint16(38852), + 32: uint16(38853), + 33: uint16(38854), + 34: uint16(38855), + 35: uint16(38856), + 36: uint16(38857), + 37: uint16(38858), + 38: uint16(38859), + 39: uint16(38860), + 40: uint16(38861), + 41: uint16(38862), + 42: uint16(38863), + 43: uint16(38864), + 44: uint16(38865), + 45: uint16(38866), + 46: uint16(38867), + 47: uint16(38868), + 48: uint16(38869), + 49: uint16(38870), + 50: uint16(38871), + 51: uint16(38872), + 52: uint16(38873), + 53: uint16(38874), + 54: uint16(38875), + 55: uint16(38876), + 56: uint16(38877), + 57: uint16(38878), + 58: uint16(38879), + 59: uint16(38880), + 60: uint16(38881), + 61: uint16(38882), + 62: uint16(38883), + 63: uint16(38884), + 64: uint16(38885), + 65: uint16(38888), + 66: uint16(38894), + 67: uint16(38895), + 68: uint16(38896), + 69: uint16(38897), + 70: uint16(38898), + 71: uint16(38900), + 72: uint16(38903), + 73: uint16(38904), + 74: uint16(38905), + 75: uint16(38906), + 76: uint16(38907), + 77: uint16(38908), + 78: uint16(38909), + 79: uint16(38910), + 80: uint16(38911), + 81: uint16(38912), + 82: uint16(38913), + 83: uint16(38914), + 84: uint16(38915), + 85: uint16(38916), + 86: uint16(38917), + 87: uint16(38918), + 88: uint16(38919), + 89: uint16(38920), + 90: uint16(38921), + 91: uint16(38922), + 92: uint16(38923), + 93: uint16(38924), + 94: uint16(38925), + 95: uint16(38926), + 96: uint16(24636), + 97: uint16(24669), + 98: uint16(24666), + 99: uint16(24679), + 100: uint16(24641), + 101: uint16(24665), + 102: uint16(24675), + 103: uint16(24747), + 104: uint16(24838), + 105: uint16(24845), + 106: uint16(24925), + 107: uint16(25001), + 108: uint16(24989), + 109: uint16(25035), + 110: uint16(25041), + 111: uint16(25094), + 112: uint16(32896), + 113: uint16(32895), + 114: uint16(27795), + 115: uint16(27894), + 116: uint16(28156), + 117: uint16(30710), + 118: uint16(30712), + 119: uint16(30720), + 120: uint16(30729), + 121: uint16(30743), + 122: uint16(30744), + 123: uint16(30737), + 124: uint16(26027), + 125: uint16(30765), + 126: uint16(30748), + 127: uint16(30749), + 128: uint16(30777), + 129: uint16(30778), + 130: uint16(30779), + 131: uint16(30751), + 132: uint16(30780), + 133: uint16(30757), + 134: uint16(30764), + 135: uint16(30755), + 136: uint16(30761), + 137: uint16(30798), + 138: uint16(30829), + 139: uint16(30806), + 140: uint16(30807), + 141: uint16(30758), + 142: uint16(30800), + 143: uint16(30791), + 144: uint16(30796), + 145: uint16(30826), + 146: uint16(30875), + 147: uint16(30867), + 148: uint16(30874), + 149: uint16(30855), + 150: uint16(30876), + 151: uint16(30881), + 152: uint16(30883), + 153: uint16(30898), + 154: uint16(30905), + 155: uint16(30885), + 156: uint16(30932), + 157: uint16(30937), + 158: uint16(30921), + 159: uint16(30956), + 160: uint16(30962), + 161: uint16(30981), + 162: uint16(30964), + 163: uint16(30995), + 164: uint16(31012), + 165: uint16(31006), + 166: uint16(31028), + 167: uint16(40859), + 168: uint16(40697), + 169: uint16(40699), + 170: uint16(40700), + 171: uint16(30449), + 172: uint16(30468), + 173: uint16(30477), + 174: uint16(30457), + 175: uint16(30471), + 176: uint16(30472), + 177: uint16(30490), + 178: uint16(30498), + 179: uint16(30489), + 180: uint16(30509), + 181: uint16(30502), + 182: uint16(30517), + 183: uint16(30520), + 184: uint16(30544), + 185: uint16(30545), + 186: uint16(30535), + 187: uint16(30531), + 188: uint16(30554), + 189: uint16(30568), + }, + 109: { + 0: uint16(38927), + 1: uint16(38928), + 2: uint16(38929), + 3: uint16(38930), + 4: uint16(38931), + 5: uint16(38932), + 6: uint16(38933), + 7: uint16(38934), + 8: uint16(38935), + 9: uint16(38936), + 10: uint16(38937), + 11: uint16(38938), + 12: uint16(38939), + 13: uint16(38940), + 14: uint16(38941), + 15: uint16(38942), + 16: uint16(38943), + 17: uint16(38944), + 18: uint16(38945), + 19: uint16(38946), + 20: uint16(38947), + 21: uint16(38948), + 22: uint16(38949), + 23: uint16(38950), + 24: uint16(38951), + 25: uint16(38952), + 26: uint16(38953), + 27: uint16(38954), + 28: uint16(38955), + 29: uint16(38956), + 30: uint16(38957), + 31: uint16(38958), + 32: uint16(38959), + 33: uint16(38960), + 34: uint16(38961), + 35: uint16(38962), + 36: uint16(38963), + 37: uint16(38964), + 38: uint16(38965), + 39: uint16(38966), + 40: uint16(38967), + 41: uint16(38968), + 42: uint16(38969), + 43: uint16(38970), + 44: uint16(38971), + 45: uint16(38972), + 46: uint16(38973), + 47: uint16(38974), + 48: uint16(38975), + 49: uint16(38976), + 50: uint16(38977), + 51: uint16(38978), + 52: uint16(38979), + 53: uint16(38980), + 54: uint16(38981), + 55: uint16(38982), + 56: uint16(38983), + 57: uint16(38984), + 58: uint16(38985), + 59: uint16(38986), + 60: uint16(38987), + 61: uint16(38988), + 62: uint16(38989), + 63: uint16(38990), + 64: uint16(38991), + 65: uint16(38992), + 66: uint16(38993), + 67: uint16(38994), + 68: uint16(38995), + 69: uint16(38996), + 70: uint16(38997), + 71: uint16(38998), + 72: uint16(38999), + 73: uint16(39000), + 74: uint16(39001), + 75: uint16(39002), + 76: uint16(39003), + 77: uint16(39004), + 78: uint16(39005), + 79: uint16(39006), + 80: uint16(39007), + 81: uint16(39008), + 82: uint16(39009), + 83: uint16(39010), + 84: uint16(39011), + 85: uint16(39012), + 86: uint16(39013), + 87: uint16(39014), + 88: uint16(39015), + 89: uint16(39016), + 90: uint16(39017), + 91: uint16(39018), + 92: uint16(39019), + 93: uint16(39020), + 94: uint16(39021), + 95: uint16(39022), + 96: uint16(30562), + 97: uint16(30565), + 98: uint16(30591), + 99: uint16(30605), + 100: uint16(30589), + 101: uint16(30592), + 102: uint16(30604), + 103: uint16(30609), + 104: uint16(30623), + 105: uint16(30624), + 106: uint16(30640), + 107: uint16(30645), + 108: uint16(30653), + 109: uint16(30010), + 110: uint16(30016), + 111: uint16(30030), + 112: uint16(30027), + 113: uint16(30024), + 114: uint16(30043), + 115: uint16(30066), + 116: uint16(30073), + 117: uint16(30083), + 118: uint16(32600), + 119: uint16(32609), + 120: uint16(32607), + 121: uint16(35400), + 122: uint16(32616), + 123: uint16(32628), + 124: uint16(32625), + 125: uint16(32633), + 126: uint16(32641), + 127: uint16(32638), + 128: uint16(30413), + 129: uint16(30437), + 130: uint16(34866), + 131: uint16(38021), + 132: uint16(38022), + 133: uint16(38023), + 134: uint16(38027), + 135: uint16(38026), + 136: uint16(38028), + 137: uint16(38029), + 138: uint16(38031), + 139: uint16(38032), + 140: uint16(38036), + 141: uint16(38039), + 142: uint16(38037), + 143: uint16(38042), + 144: uint16(38043), + 145: uint16(38044), + 146: uint16(38051), + 147: uint16(38052), + 148: uint16(38059), + 149: uint16(38058), + 150: uint16(38061), + 151: uint16(38060), + 152: uint16(38063), + 153: uint16(38064), + 154: uint16(38066), + 155: uint16(38068), + 156: uint16(38070), + 157: uint16(38071), + 158: uint16(38072), + 159: uint16(38073), + 160: uint16(38074), + 161: uint16(38076), + 162: uint16(38077), + 163: uint16(38079), + 164: uint16(38084), + 165: uint16(38088), + 166: uint16(38089), + 167: uint16(38090), + 168: uint16(38091), + 169: uint16(38092), + 170: uint16(38093), + 171: uint16(38094), + 172: uint16(38096), + 173: uint16(38097), + 174: uint16(38098), + 175: uint16(38101), + 176: uint16(38102), + 177: uint16(38103), + 178: uint16(38105), + 179: uint16(38104), + 180: uint16(38107), + 181: uint16(38110), + 182: uint16(38111), + 183: uint16(38112), + 184: uint16(38114), + 185: uint16(38116), + 186: uint16(38117), + 187: uint16(38119), + 188: uint16(38120), + 189: uint16(38122), + }, + 110: { + 0: uint16(39023), + 1: uint16(39024), + 2: uint16(39025), + 3: uint16(39026), + 4: uint16(39027), + 5: uint16(39028), + 6: uint16(39051), + 7: uint16(39054), + 8: uint16(39058), + 9: uint16(39061), + 10: uint16(39065), + 11: uint16(39075), + 12: uint16(39080), + 13: uint16(39081), + 14: uint16(39082), + 15: uint16(39083), + 16: uint16(39084), + 17: uint16(39085), + 18: uint16(39086), + 19: uint16(39087), + 20: uint16(39088), + 21: uint16(39089), + 22: uint16(39090), + 23: uint16(39091), + 24: uint16(39092), + 25: uint16(39093), + 26: uint16(39094), + 27: uint16(39095), + 28: uint16(39096), + 29: uint16(39097), + 30: uint16(39098), + 31: uint16(39099), + 32: uint16(39100), + 33: uint16(39101), + 34: uint16(39102), + 35: uint16(39103), + 36: uint16(39104), + 37: uint16(39105), + 38: uint16(39106), + 39: uint16(39107), + 40: uint16(39108), + 41: uint16(39109), + 42: uint16(39110), + 43: uint16(39111), + 44: uint16(39112), + 45: uint16(39113), + 46: uint16(39114), + 47: uint16(39115), + 48: uint16(39116), + 49: uint16(39117), + 50: uint16(39119), + 51: uint16(39120), + 52: uint16(39124), + 53: uint16(39126), + 54: uint16(39127), + 55: uint16(39131), + 56: uint16(39132), + 57: uint16(39133), + 58: uint16(39136), + 59: uint16(39137), + 60: uint16(39138), + 61: uint16(39139), + 62: uint16(39140), + 63: uint16(39141), + 64: uint16(39142), + 65: uint16(39145), + 66: uint16(39146), + 67: uint16(39147), + 68: uint16(39148), + 69: uint16(39149), + 70: uint16(39150), + 71: uint16(39151), + 72: uint16(39152), + 73: uint16(39153), + 74: uint16(39154), + 75: uint16(39155), + 76: uint16(39156), + 77: uint16(39157), + 78: uint16(39158), + 79: uint16(39159), + 80: uint16(39160), + 81: uint16(39161), + 82: uint16(39162), + 83: uint16(39163), + 84: uint16(39164), + 85: uint16(39165), + 86: uint16(39166), + 87: uint16(39167), + 88: uint16(39168), + 89: uint16(39169), + 90: uint16(39170), + 91: uint16(39171), + 92: uint16(39172), + 93: uint16(39173), + 94: uint16(39174), + 95: uint16(39175), + 96: uint16(38121), + 97: uint16(38123), + 98: uint16(38126), + 99: uint16(38127), + 100: uint16(38131), + 101: uint16(38132), + 102: uint16(38133), + 103: uint16(38135), + 104: uint16(38137), + 105: uint16(38140), + 106: uint16(38141), + 107: uint16(38143), + 108: uint16(38147), + 109: uint16(38146), + 110: uint16(38150), + 111: uint16(38151), + 112: uint16(38153), + 113: uint16(38154), + 114: uint16(38157), + 115: uint16(38158), + 116: uint16(38159), + 117: uint16(38162), + 118: uint16(38163), + 119: uint16(38164), + 120: uint16(38165), + 121: uint16(38166), + 122: uint16(38168), + 123: uint16(38171), + 124: uint16(38173), + 125: uint16(38174), + 126: uint16(38175), + 127: uint16(38178), + 128: uint16(38186), + 129: uint16(38187), + 130: uint16(38185), + 131: uint16(38188), + 132: uint16(38193), + 133: uint16(38194), + 134: uint16(38196), + 135: uint16(38198), + 136: uint16(38199), + 137: uint16(38200), + 138: uint16(38204), + 139: uint16(38206), + 140: uint16(38207), + 141: uint16(38210), + 142: uint16(38197), + 143: uint16(38212), + 144: uint16(38213), + 145: uint16(38214), + 146: uint16(38217), + 147: uint16(38220), + 148: uint16(38222), + 149: uint16(38223), + 150: uint16(38226), + 151: uint16(38227), + 152: uint16(38228), + 153: uint16(38230), + 154: uint16(38231), + 155: uint16(38232), + 156: uint16(38233), + 157: uint16(38235), + 158: uint16(38238), + 159: uint16(38239), + 160: uint16(38237), + 161: uint16(38241), + 162: uint16(38242), + 163: uint16(38244), + 164: uint16(38245), + 165: uint16(38246), + 166: uint16(38247), + 167: uint16(38248), + 168: uint16(38249), + 169: uint16(38250), + 170: uint16(38251), + 171: uint16(38252), + 172: uint16(38255), + 173: uint16(38257), + 174: uint16(38258), + 175: uint16(38259), + 176: uint16(38202), + 177: uint16(30695), + 178: uint16(30700), + 179: uint16(38601), + 180: uint16(31189), + 181: uint16(31213), + 182: uint16(31203), + 183: uint16(31211), + 184: uint16(31238), + 185: uint16(23879), + 186: uint16(31235), + 187: uint16(31234), + 188: uint16(31262), + 189: uint16(31252), + }, + 111: { + 0: uint16(39176), + 1: uint16(39177), + 2: uint16(39178), + 3: uint16(39179), + 4: uint16(39180), + 5: uint16(39182), + 6: uint16(39183), + 7: uint16(39185), + 8: uint16(39186), + 9: uint16(39187), + 10: uint16(39188), + 11: uint16(39189), + 12: uint16(39190), + 13: uint16(39191), + 14: uint16(39192), + 15: uint16(39193), + 16: uint16(39194), + 17: uint16(39195), + 18: uint16(39196), + 19: uint16(39197), + 20: uint16(39198), + 21: uint16(39199), + 22: uint16(39200), + 23: uint16(39201), + 24: uint16(39202), + 25: uint16(39203), + 26: uint16(39204), + 27: uint16(39205), + 28: uint16(39206), + 29: uint16(39207), + 30: uint16(39208), + 31: uint16(39209), + 32: uint16(39210), + 33: uint16(39211), + 34: uint16(39212), + 35: uint16(39213), + 36: uint16(39215), + 37: uint16(39216), + 38: uint16(39217), + 39: uint16(39218), + 40: uint16(39219), + 41: uint16(39220), + 42: uint16(39221), + 43: uint16(39222), + 44: uint16(39223), + 45: uint16(39224), + 46: uint16(39225), + 47: uint16(39226), + 48: uint16(39227), + 49: uint16(39228), + 50: uint16(39229), + 51: uint16(39230), + 52: uint16(39231), + 53: uint16(39232), + 54: uint16(39233), + 55: uint16(39234), + 56: uint16(39235), + 57: uint16(39236), + 58: uint16(39237), + 59: uint16(39238), + 60: uint16(39239), + 61: uint16(39240), + 62: uint16(39241), + 63: uint16(39242), + 64: uint16(39243), + 65: uint16(39244), + 66: uint16(39245), + 67: uint16(39246), + 68: uint16(39247), + 69: uint16(39248), + 70: uint16(39249), + 71: uint16(39250), + 72: uint16(39251), + 73: uint16(39254), + 74: uint16(39255), + 75: uint16(39256), + 76: uint16(39257), + 77: uint16(39258), + 78: uint16(39259), + 79: uint16(39260), + 80: uint16(39261), + 81: uint16(39262), + 82: uint16(39263), + 83: uint16(39264), + 84: uint16(39265), + 85: uint16(39266), + 86: uint16(39268), + 87: uint16(39270), + 88: uint16(39283), + 89: uint16(39288), + 90: uint16(39289), + 91: uint16(39291), + 92: uint16(39294), + 93: uint16(39298), + 94: uint16(39299), + 95: uint16(39305), + 96: uint16(31289), + 97: uint16(31287), + 98: uint16(31313), + 99: uint16(40655), + 100: uint16(39333), + 101: uint16(31344), + 102: uint16(30344), + 103: uint16(30350), + 104: uint16(30355), + 105: uint16(30361), + 106: uint16(30372), + 107: uint16(29918), + 108: uint16(29920), + 109: uint16(29996), + 110: uint16(40480), + 111: uint16(40482), + 112: uint16(40488), + 113: uint16(40489), + 114: uint16(40490), + 115: uint16(40491), + 116: uint16(40492), + 117: uint16(40498), + 118: uint16(40497), + 119: uint16(40502), + 120: uint16(40504), + 121: uint16(40503), + 122: uint16(40505), + 123: uint16(40506), + 124: uint16(40510), + 125: uint16(40513), + 126: uint16(40514), + 127: uint16(40516), + 128: uint16(40518), + 129: uint16(40519), + 130: uint16(40520), + 131: uint16(40521), + 132: uint16(40523), + 133: uint16(40524), + 134: uint16(40526), + 135: uint16(40529), + 136: uint16(40533), + 137: uint16(40535), + 138: uint16(40538), + 139: uint16(40539), + 140: uint16(40540), + 141: uint16(40542), + 142: uint16(40547), + 143: uint16(40550), + 144: uint16(40551), + 145: uint16(40552), + 146: uint16(40553), + 147: uint16(40554), + 148: uint16(40555), + 149: uint16(40556), + 150: uint16(40561), + 151: uint16(40557), + 152: uint16(40563), + 153: uint16(30098), + 154: uint16(30100), + 155: uint16(30102), + 156: uint16(30112), + 157: uint16(30109), + 158: uint16(30124), + 159: uint16(30115), + 160: uint16(30131), + 161: uint16(30132), + 162: uint16(30136), + 163: uint16(30148), + 164: uint16(30129), + 165: uint16(30128), + 166: uint16(30147), + 167: uint16(30146), + 168: uint16(30166), + 169: uint16(30157), + 170: uint16(30179), + 171: uint16(30184), + 172: uint16(30182), + 173: uint16(30180), + 174: uint16(30187), + 175: uint16(30183), + 176: uint16(30211), + 177: uint16(30193), + 178: uint16(30204), + 179: uint16(30207), + 180: uint16(30224), + 181: uint16(30208), + 182: uint16(30213), + 183: uint16(30220), + 184: uint16(30231), + 185: uint16(30218), + 186: uint16(30245), + 187: uint16(30232), + 188: uint16(30229), + 189: uint16(30233), + }, + 112: { + 0: uint16(39308), + 1: uint16(39310), + 2: uint16(39322), + 3: uint16(39323), + 4: uint16(39324), + 5: uint16(39325), + 6: uint16(39326), + 7: uint16(39327), + 8: uint16(39328), + 9: uint16(39329), + 10: uint16(39330), + 11: uint16(39331), + 12: uint16(39332), + 13: uint16(39334), + 14: uint16(39335), + 15: uint16(39337), + 16: uint16(39338), + 17: uint16(39339), + 18: uint16(39340), + 19: uint16(39341), + 20: uint16(39342), + 21: uint16(39343), + 22: uint16(39344), + 23: uint16(39345), + 24: uint16(39346), + 25: uint16(39347), + 26: uint16(39348), + 27: uint16(39349), + 28: uint16(39350), + 29: uint16(39351), + 30: uint16(39352), + 31: uint16(39353), + 32: uint16(39354), + 33: uint16(39355), + 34: uint16(39356), + 35: uint16(39357), + 36: uint16(39358), + 37: uint16(39359), + 38: uint16(39360), + 39: uint16(39361), + 40: uint16(39362), + 41: uint16(39363), + 42: uint16(39364), + 43: uint16(39365), + 44: uint16(39366), + 45: uint16(39367), + 46: uint16(39368), + 47: uint16(39369), + 48: uint16(39370), + 49: uint16(39371), + 50: uint16(39372), + 51: uint16(39373), + 52: uint16(39374), + 53: uint16(39375), + 54: uint16(39376), + 55: uint16(39377), + 56: uint16(39378), + 57: uint16(39379), + 58: uint16(39380), + 59: uint16(39381), + 60: uint16(39382), + 61: uint16(39383), + 62: uint16(39384), + 63: uint16(39385), + 64: uint16(39386), + 65: uint16(39387), + 66: uint16(39388), + 67: uint16(39389), + 68: uint16(39390), + 69: uint16(39391), + 70: uint16(39392), + 71: uint16(39393), + 72: uint16(39394), + 73: uint16(39395), + 74: uint16(39396), + 75: uint16(39397), + 76: uint16(39398), + 77: uint16(39399), + 78: uint16(39400), + 79: uint16(39401), + 80: uint16(39402), + 81: uint16(39403), + 82: uint16(39404), + 83: uint16(39405), + 84: uint16(39406), + 85: uint16(39407), + 86: uint16(39408), + 87: uint16(39409), + 88: uint16(39410), + 89: uint16(39411), + 90: uint16(39412), + 91: uint16(39413), + 92: uint16(39414), + 93: uint16(39415), + 94: uint16(39416), + 95: uint16(39417), + 96: uint16(30235), + 97: uint16(30268), + 98: uint16(30242), + 99: uint16(30240), + 100: uint16(30272), + 101: uint16(30253), + 102: uint16(30256), + 103: uint16(30271), + 104: uint16(30261), + 105: uint16(30275), + 106: uint16(30270), + 107: uint16(30259), + 108: uint16(30285), + 109: uint16(30302), + 110: uint16(30292), + 111: uint16(30300), + 112: uint16(30294), + 113: uint16(30315), + 114: uint16(30319), + 115: uint16(32714), + 116: uint16(31462), + 117: uint16(31352), + 118: uint16(31353), + 119: uint16(31360), + 120: uint16(31366), + 121: uint16(31368), + 122: uint16(31381), + 123: uint16(31398), + 124: uint16(31392), + 125: uint16(31404), + 126: uint16(31400), + 127: uint16(31405), + 128: uint16(31411), + 129: uint16(34916), + 130: uint16(34921), + 131: uint16(34930), + 132: uint16(34941), + 133: uint16(34943), + 134: uint16(34946), + 135: uint16(34978), + 136: uint16(35014), + 137: uint16(34999), + 138: uint16(35004), + 139: uint16(35017), + 140: uint16(35042), + 141: uint16(35022), + 142: uint16(35043), + 143: uint16(35045), + 144: uint16(35057), + 145: uint16(35098), + 146: uint16(35068), + 147: uint16(35048), + 148: uint16(35070), + 149: uint16(35056), + 150: uint16(35105), + 151: uint16(35097), + 152: uint16(35091), + 153: uint16(35099), + 154: uint16(35082), + 155: uint16(35124), + 156: uint16(35115), + 157: uint16(35126), + 158: uint16(35137), + 159: uint16(35174), + 160: uint16(35195), + 161: uint16(30091), + 162: uint16(32997), + 163: uint16(30386), + 164: uint16(30388), + 165: uint16(30684), + 166: uint16(32786), + 167: uint16(32788), + 168: uint16(32790), + 169: uint16(32796), + 170: uint16(32800), + 171: uint16(32802), + 172: uint16(32805), + 173: uint16(32806), + 174: uint16(32807), + 175: uint16(32809), + 176: uint16(32808), + 177: uint16(32817), + 178: uint16(32779), + 179: uint16(32821), + 180: uint16(32835), + 181: uint16(32838), + 182: uint16(32845), + 183: uint16(32850), + 184: uint16(32873), + 185: uint16(32881), + 186: uint16(35203), + 187: uint16(39032), + 188: uint16(39040), + 189: uint16(39043), + }, + 113: { + 0: uint16(39418), + 1: uint16(39419), + 2: uint16(39420), + 3: uint16(39421), + 4: uint16(39422), + 5: uint16(39423), + 6: uint16(39424), + 7: uint16(39425), + 8: uint16(39426), + 9: uint16(39427), + 10: uint16(39428), + 11: uint16(39429), + 12: uint16(39430), + 13: uint16(39431), + 14: uint16(39432), + 15: uint16(39433), + 16: uint16(39434), + 17: uint16(39435), + 18: uint16(39436), + 19: uint16(39437), + 20: uint16(39438), + 21: uint16(39439), + 22: uint16(39440), + 23: uint16(39441), + 24: uint16(39442), + 25: uint16(39443), + 26: uint16(39444), + 27: uint16(39445), + 28: uint16(39446), + 29: uint16(39447), + 30: uint16(39448), + 31: uint16(39449), + 32: uint16(39450), + 33: uint16(39451), + 34: uint16(39452), + 35: uint16(39453), + 36: uint16(39454), + 37: uint16(39455), + 38: uint16(39456), + 39: uint16(39457), + 40: uint16(39458), + 41: uint16(39459), + 42: uint16(39460), + 43: uint16(39461), + 44: uint16(39462), + 45: uint16(39463), + 46: uint16(39464), + 47: uint16(39465), + 48: uint16(39466), + 49: uint16(39467), + 50: uint16(39468), + 51: uint16(39469), + 52: uint16(39470), + 53: uint16(39471), + 54: uint16(39472), + 55: uint16(39473), + 56: uint16(39474), + 57: uint16(39475), + 58: uint16(39476), + 59: uint16(39477), + 60: uint16(39478), + 61: uint16(39479), + 62: uint16(39480), + 63: uint16(39481), + 64: uint16(39482), + 65: uint16(39483), + 66: uint16(39484), + 67: uint16(39485), + 68: uint16(39486), + 69: uint16(39487), + 70: uint16(39488), + 71: uint16(39489), + 72: uint16(39490), + 73: uint16(39491), + 74: uint16(39492), + 75: uint16(39493), + 76: uint16(39494), + 77: uint16(39495), + 78: uint16(39496), + 79: uint16(39497), + 80: uint16(39498), + 81: uint16(39499), + 82: uint16(39500), + 83: uint16(39501), + 84: uint16(39502), + 85: uint16(39503), + 86: uint16(39504), + 87: uint16(39505), + 88: uint16(39506), + 89: uint16(39507), + 90: uint16(39508), + 91: uint16(39509), + 92: uint16(39510), + 93: uint16(39511), + 94: uint16(39512), + 95: uint16(39513), + 96: uint16(39049), + 97: uint16(39052), + 98: uint16(39053), + 99: uint16(39055), + 100: uint16(39060), + 101: uint16(39066), + 102: uint16(39067), + 103: uint16(39070), + 104: uint16(39071), + 105: uint16(39073), + 106: uint16(39074), + 107: uint16(39077), + 108: uint16(39078), + 109: uint16(34381), + 110: uint16(34388), + 111: uint16(34412), + 112: uint16(34414), + 113: uint16(34431), + 114: uint16(34426), + 115: uint16(34428), + 116: uint16(34427), + 117: uint16(34472), + 118: uint16(34445), + 119: uint16(34443), + 120: uint16(34476), + 121: uint16(34461), + 122: uint16(34471), + 123: uint16(34467), + 124: uint16(34474), + 125: uint16(34451), + 126: uint16(34473), + 127: uint16(34486), + 128: uint16(34500), + 129: uint16(34485), + 130: uint16(34510), + 131: uint16(34480), + 132: uint16(34490), + 133: uint16(34481), + 134: uint16(34479), + 135: uint16(34505), + 136: uint16(34511), + 137: uint16(34484), + 138: uint16(34537), + 139: uint16(34545), + 140: uint16(34546), + 141: uint16(34541), + 142: uint16(34547), + 143: uint16(34512), + 144: uint16(34579), + 145: uint16(34526), + 146: uint16(34548), + 147: uint16(34527), + 148: uint16(34520), + 149: uint16(34513), + 150: uint16(34563), + 151: uint16(34567), + 152: uint16(34552), + 153: uint16(34568), + 154: uint16(34570), + 155: uint16(34573), + 156: uint16(34569), + 157: uint16(34595), + 158: uint16(34619), + 159: uint16(34590), + 160: uint16(34597), + 161: uint16(34606), + 162: uint16(34586), + 163: uint16(34622), + 164: uint16(34632), + 165: uint16(34612), + 166: uint16(34609), + 167: uint16(34601), + 168: uint16(34615), + 169: uint16(34623), + 170: uint16(34690), + 171: uint16(34594), + 172: uint16(34685), + 173: uint16(34686), + 174: uint16(34683), + 175: uint16(34656), + 176: uint16(34672), + 177: uint16(34636), + 178: uint16(34670), + 179: uint16(34699), + 180: uint16(34643), + 181: uint16(34659), + 182: uint16(34684), + 183: uint16(34660), + 184: uint16(34649), + 185: uint16(34661), + 186: uint16(34707), + 187: uint16(34735), + 188: uint16(34728), + 189: uint16(34770), + }, + 114: { + 0: uint16(39514), + 1: uint16(39515), + 2: uint16(39516), + 3: uint16(39517), + 4: uint16(39518), + 5: uint16(39519), + 6: uint16(39520), + 7: uint16(39521), + 8: uint16(39522), + 9: uint16(39523), + 10: uint16(39524), + 11: uint16(39525), + 12: uint16(39526), + 13: uint16(39527), + 14: uint16(39528), + 15: uint16(39529), + 16: uint16(39530), + 17: uint16(39531), + 18: uint16(39538), + 19: uint16(39555), + 20: uint16(39561), + 21: uint16(39565), + 22: uint16(39566), + 23: uint16(39572), + 24: uint16(39573), + 25: uint16(39577), + 26: uint16(39590), + 27: uint16(39593), + 28: uint16(39594), + 29: uint16(39595), + 30: uint16(39596), + 31: uint16(39597), + 32: uint16(39598), + 33: uint16(39599), + 34: uint16(39602), + 35: uint16(39603), + 36: uint16(39604), + 37: uint16(39605), + 38: uint16(39609), + 39: uint16(39611), + 40: uint16(39613), + 41: uint16(39614), + 42: uint16(39615), + 43: uint16(39619), + 44: uint16(39620), + 45: uint16(39622), + 46: uint16(39623), + 47: uint16(39624), + 48: uint16(39625), + 49: uint16(39626), + 50: uint16(39629), + 51: uint16(39630), + 52: uint16(39631), + 53: uint16(39632), + 54: uint16(39634), + 55: uint16(39636), + 56: uint16(39637), + 57: uint16(39638), + 58: uint16(39639), + 59: uint16(39641), + 60: uint16(39642), + 61: uint16(39643), + 62: uint16(39644), + 63: uint16(39645), + 64: uint16(39646), + 65: uint16(39648), + 66: uint16(39650), + 67: uint16(39651), + 68: uint16(39652), + 69: uint16(39653), + 70: uint16(39655), + 71: uint16(39656), + 72: uint16(39657), + 73: uint16(39658), + 74: uint16(39660), + 75: uint16(39662), + 76: uint16(39664), + 77: uint16(39665), + 78: uint16(39666), + 79: uint16(39667), + 80: uint16(39668), + 81: uint16(39669), + 82: uint16(39670), + 83: uint16(39671), + 84: uint16(39672), + 85: uint16(39674), + 86: uint16(39676), + 87: uint16(39677), + 88: uint16(39678), + 89: uint16(39679), + 90: uint16(39680), + 91: uint16(39681), + 92: uint16(39682), + 93: uint16(39684), + 94: uint16(39685), + 95: uint16(39686), + 96: uint16(34758), + 97: uint16(34696), + 98: uint16(34693), + 99: uint16(34733), + 100: uint16(34711), + 101: uint16(34691), + 102: uint16(34731), + 103: uint16(34789), + 104: uint16(34732), + 105: uint16(34741), + 106: uint16(34739), + 107: uint16(34763), + 108: uint16(34771), + 109: uint16(34749), + 110: uint16(34769), + 111: uint16(34752), + 112: uint16(34762), + 113: uint16(34779), + 114: uint16(34794), + 115: uint16(34784), + 116: uint16(34798), + 117: uint16(34838), + 118: uint16(34835), + 119: uint16(34814), + 120: uint16(34826), + 121: uint16(34843), + 122: uint16(34849), + 123: uint16(34873), + 124: uint16(34876), + 125: uint16(32566), + 126: uint16(32578), + 127: uint16(32580), + 128: uint16(32581), + 129: uint16(33296), + 130: uint16(31482), + 131: uint16(31485), + 132: uint16(31496), + 133: uint16(31491), + 134: uint16(31492), + 135: uint16(31509), + 136: uint16(31498), + 137: uint16(31531), + 138: uint16(31503), + 139: uint16(31559), + 140: uint16(31544), + 141: uint16(31530), + 142: uint16(31513), + 143: uint16(31534), + 144: uint16(31537), + 145: uint16(31520), + 146: uint16(31525), + 147: uint16(31524), + 148: uint16(31539), + 149: uint16(31550), + 150: uint16(31518), + 151: uint16(31576), + 152: uint16(31578), + 153: uint16(31557), + 154: uint16(31605), + 155: uint16(31564), + 156: uint16(31581), + 157: uint16(31584), + 158: uint16(31598), + 159: uint16(31611), + 160: uint16(31586), + 161: uint16(31602), + 162: uint16(31601), + 163: uint16(31632), + 164: uint16(31654), + 165: uint16(31655), + 166: uint16(31672), + 167: uint16(31660), + 168: uint16(31645), + 169: uint16(31656), + 170: uint16(31621), + 171: uint16(31658), + 172: uint16(31644), + 173: uint16(31650), + 174: uint16(31659), + 175: uint16(31668), + 176: uint16(31697), + 177: uint16(31681), + 178: uint16(31692), + 179: uint16(31709), + 180: uint16(31706), + 181: uint16(31717), + 182: uint16(31718), + 183: uint16(31722), + 184: uint16(31756), + 185: uint16(31742), + 186: uint16(31740), + 187: uint16(31759), + 188: uint16(31766), + 189: uint16(31755), + }, + 115: { + 0: uint16(39687), + 1: uint16(39689), + 2: uint16(39690), + 3: uint16(39691), + 4: uint16(39692), + 5: uint16(39693), + 6: uint16(39694), + 7: uint16(39696), + 8: uint16(39697), + 9: uint16(39698), + 10: uint16(39700), + 11: uint16(39701), + 12: uint16(39702), + 13: uint16(39703), + 14: uint16(39704), + 15: uint16(39705), + 16: uint16(39706), + 17: uint16(39707), + 18: uint16(39708), + 19: uint16(39709), + 20: uint16(39710), + 21: uint16(39712), + 22: uint16(39713), + 23: uint16(39714), + 24: uint16(39716), + 25: uint16(39717), + 26: uint16(39718), + 27: uint16(39719), + 28: uint16(39720), + 29: uint16(39721), + 30: uint16(39722), + 31: uint16(39723), + 32: uint16(39724), + 33: uint16(39725), + 34: uint16(39726), + 35: uint16(39728), + 36: uint16(39729), + 37: uint16(39731), + 38: uint16(39732), + 39: uint16(39733), + 40: uint16(39734), + 41: uint16(39735), + 42: uint16(39736), + 43: uint16(39737), + 44: uint16(39738), + 45: uint16(39741), + 46: uint16(39742), + 47: uint16(39743), + 48: uint16(39744), + 49: uint16(39750), + 50: uint16(39754), + 51: uint16(39755), + 52: uint16(39756), + 53: uint16(39758), + 54: uint16(39760), + 55: uint16(39762), + 56: uint16(39763), + 57: uint16(39765), + 58: uint16(39766), + 59: uint16(39767), + 60: uint16(39768), + 61: uint16(39769), + 62: uint16(39770), + 63: uint16(39771), + 64: uint16(39772), + 65: uint16(39773), + 66: uint16(39774), + 67: uint16(39775), + 68: uint16(39776), + 69: uint16(39777), + 70: uint16(39778), + 71: uint16(39779), + 72: uint16(39780), + 73: uint16(39781), + 74: uint16(39782), + 75: uint16(39783), + 76: uint16(39784), + 77: uint16(39785), + 78: uint16(39786), + 79: uint16(39787), + 80: uint16(39788), + 81: uint16(39789), + 82: uint16(39790), + 83: uint16(39791), + 84: uint16(39792), + 85: uint16(39793), + 86: uint16(39794), + 87: uint16(39795), + 88: uint16(39796), + 89: uint16(39797), + 90: uint16(39798), + 91: uint16(39799), + 92: uint16(39800), + 93: uint16(39801), + 94: uint16(39802), + 95: uint16(39803), + 96: uint16(31775), + 97: uint16(31786), + 98: uint16(31782), + 99: uint16(31800), + 100: uint16(31809), + 101: uint16(31808), + 102: uint16(33278), + 103: uint16(33281), + 104: uint16(33282), + 105: uint16(33284), + 106: uint16(33260), + 107: uint16(34884), + 108: uint16(33313), + 109: uint16(33314), + 110: uint16(33315), + 111: uint16(33325), + 112: uint16(33327), + 113: uint16(33320), + 114: uint16(33323), + 115: uint16(33336), + 116: uint16(33339), + 117: uint16(33331), + 118: uint16(33332), + 119: uint16(33342), + 120: uint16(33348), + 121: uint16(33353), + 122: uint16(33355), + 123: uint16(33359), + 124: uint16(33370), + 125: uint16(33375), + 126: uint16(33384), + 127: uint16(34942), + 128: uint16(34949), + 129: uint16(34952), + 130: uint16(35032), + 131: uint16(35039), + 132: uint16(35166), + 133: uint16(32669), + 134: uint16(32671), + 135: uint16(32679), + 136: uint16(32687), + 137: uint16(32688), + 138: uint16(32690), + 139: uint16(31868), + 140: uint16(25929), + 141: uint16(31889), + 142: uint16(31901), + 143: uint16(31900), + 144: uint16(31902), + 145: uint16(31906), + 146: uint16(31922), + 147: uint16(31932), + 148: uint16(31933), + 149: uint16(31937), + 150: uint16(31943), + 151: uint16(31948), + 152: uint16(31949), + 153: uint16(31944), + 154: uint16(31941), + 155: uint16(31959), + 156: uint16(31976), + 157: uint16(33390), + 158: uint16(26280), + 159: uint16(32703), + 160: uint16(32718), + 161: uint16(32725), + 162: uint16(32741), + 163: uint16(32737), + 164: uint16(32742), + 165: uint16(32745), + 166: uint16(32750), + 167: uint16(32755), + 168: uint16(31992), + 169: uint16(32119), + 170: uint16(32166), + 171: uint16(32174), + 172: uint16(32327), + 173: uint16(32411), + 174: uint16(40632), + 175: uint16(40628), + 176: uint16(36211), + 177: uint16(36228), + 178: uint16(36244), + 179: uint16(36241), + 180: uint16(36273), + 181: uint16(36199), + 182: uint16(36205), + 183: uint16(35911), + 184: uint16(35913), + 185: uint16(37194), + 186: uint16(37200), + 187: uint16(37198), + 188: uint16(37199), + 189: uint16(37220), + }, + 116: { + 0: uint16(39804), + 1: uint16(39805), + 2: uint16(39806), + 3: uint16(39807), + 4: uint16(39808), + 5: uint16(39809), + 6: uint16(39810), + 7: uint16(39811), + 8: uint16(39812), + 9: uint16(39813), + 10: uint16(39814), + 11: uint16(39815), + 12: uint16(39816), + 13: uint16(39817), + 14: uint16(39818), + 15: uint16(39819), + 16: uint16(39820), + 17: uint16(39821), + 18: uint16(39822), + 19: uint16(39823), + 20: uint16(39824), + 21: uint16(39825), + 22: uint16(39826), + 23: uint16(39827), + 24: uint16(39828), + 25: uint16(39829), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39832), + 29: uint16(39833), + 30: uint16(39834), + 31: uint16(39835), + 32: uint16(39836), + 33: uint16(39837), + 34: uint16(39838), + 35: uint16(39839), + 36: uint16(39840), + 37: uint16(39841), + 38: uint16(39842), + 39: uint16(39843), + 40: uint16(39844), + 41: uint16(39845), + 42: uint16(39846), + 43: uint16(39847), + 44: uint16(39848), + 45: uint16(39849), + 46: uint16(39850), + 47: uint16(39851), + 48: uint16(39852), + 49: uint16(39853), + 50: uint16(39854), + 51: uint16(39855), + 52: uint16(39856), + 53: uint16(39857), + 54: uint16(39858), + 55: uint16(39859), + 56: uint16(39860), + 57: uint16(39861), + 58: uint16(39862), + 59: uint16(39863), + 60: uint16(39864), + 61: uint16(39865), + 62: uint16(39866), + 63: uint16(39867), + 64: uint16(39868), + 65: uint16(39869), + 66: uint16(39870), + 67: uint16(39871), + 68: uint16(39872), + 69: uint16(39873), + 70: uint16(39874), + 71: uint16(39875), + 72: uint16(39876), + 73: uint16(39877), + 74: uint16(39878), + 75: uint16(39879), + 76: uint16(39880), + 77: uint16(39881), + 78: uint16(39882), + 79: uint16(39883), + 80: uint16(39884), + 81: uint16(39885), + 82: uint16(39886), + 83: uint16(39887), + 84: uint16(39888), + 85: uint16(39889), + 86: uint16(39890), + 87: uint16(39891), + 88: uint16(39892), + 89: uint16(39893), + 90: uint16(39894), + 91: uint16(39895), + 92: uint16(39896), + 93: uint16(39897), + 94: uint16(39898), + 95: uint16(39899), + 96: uint16(37218), + 97: uint16(37217), + 98: uint16(37232), + 99: uint16(37225), + 100: uint16(37231), + 101: uint16(37245), + 102: uint16(37246), + 103: uint16(37234), + 104: uint16(37236), + 105: uint16(37241), + 106: uint16(37260), + 107: uint16(37253), + 108: uint16(37264), + 109: uint16(37261), + 110: uint16(37265), + 111: uint16(37282), + 112: uint16(37283), + 113: uint16(37290), + 114: uint16(37293), + 115: uint16(37294), + 116: uint16(37295), + 117: uint16(37301), + 118: uint16(37300), + 119: uint16(37306), + 120: uint16(35925), + 121: uint16(40574), + 122: uint16(36280), + 123: uint16(36331), + 124: uint16(36357), + 125: uint16(36441), + 126: uint16(36457), + 127: uint16(36277), + 128: uint16(36287), + 129: uint16(36284), + 130: uint16(36282), + 131: uint16(36292), + 132: uint16(36310), + 133: uint16(36311), + 134: uint16(36314), + 135: uint16(36318), + 136: uint16(36302), + 137: uint16(36303), + 138: uint16(36315), + 139: uint16(36294), + 140: uint16(36332), + 141: uint16(36343), + 142: uint16(36344), + 143: uint16(36323), + 144: uint16(36345), + 145: uint16(36347), + 146: uint16(36324), + 147: uint16(36361), + 148: uint16(36349), + 149: uint16(36372), + 150: uint16(36381), + 151: uint16(36383), + 152: uint16(36396), + 153: uint16(36398), + 154: uint16(36387), + 155: uint16(36399), + 156: uint16(36410), + 157: uint16(36416), + 158: uint16(36409), + 159: uint16(36405), + 160: uint16(36413), + 161: uint16(36401), + 162: uint16(36425), + 163: uint16(36417), + 164: uint16(36418), + 165: uint16(36433), + 166: uint16(36434), + 167: uint16(36426), + 168: uint16(36464), + 169: uint16(36470), + 170: uint16(36476), + 171: uint16(36463), + 172: uint16(36468), + 173: uint16(36485), + 174: uint16(36495), + 175: uint16(36500), + 176: uint16(36496), + 177: uint16(36508), + 178: uint16(36510), + 179: uint16(35960), + 180: uint16(35970), + 181: uint16(35978), + 182: uint16(35973), + 183: uint16(35992), + 184: uint16(35988), + 185: uint16(26011), + 186: uint16(35286), + 187: uint16(35294), + 188: uint16(35290), + 189: uint16(35292), + }, + 117: { + 0: uint16(39900), + 1: uint16(39901), + 2: uint16(39902), + 3: uint16(39903), + 4: uint16(39904), + 5: uint16(39905), + 6: uint16(39906), + 7: uint16(39907), + 8: uint16(39908), + 9: uint16(39909), + 10: uint16(39910), + 11: uint16(39911), + 12: uint16(39912), + 13: uint16(39913), + 14: uint16(39914), + 15: uint16(39915), + 16: uint16(39916), + 17: uint16(39917), + 18: uint16(39918), + 19: uint16(39919), + 20: uint16(39920), + 21: uint16(39921), + 22: uint16(39922), + 23: uint16(39923), + 24: uint16(39924), + 25: uint16(39925), + 26: uint16(39926), + 27: uint16(39927), + 28: uint16(39928), + 29: uint16(39929), + 30: uint16(39930), + 31: uint16(39931), + 32: uint16(39932), + 33: uint16(39933), + 34: uint16(39934), + 35: uint16(39935), + 36: uint16(39936), + 37: uint16(39937), + 38: uint16(39938), + 39: uint16(39939), + 40: uint16(39940), + 41: uint16(39941), + 42: uint16(39942), + 43: uint16(39943), + 44: uint16(39944), + 45: uint16(39945), + 46: uint16(39946), + 47: uint16(39947), + 48: uint16(39948), + 49: uint16(39949), + 50: uint16(39950), + 51: uint16(39951), + 52: uint16(39952), + 53: uint16(39953), + 54: uint16(39954), + 55: uint16(39955), + 56: uint16(39956), + 57: uint16(39957), + 58: uint16(39958), + 59: uint16(39959), + 60: uint16(39960), + 61: uint16(39961), + 62: uint16(39962), + 63: uint16(39963), + 64: uint16(39964), + 65: uint16(39965), + 66: uint16(39966), + 67: uint16(39967), + 68: uint16(39968), + 69: uint16(39969), + 70: uint16(39970), + 71: uint16(39971), + 72: uint16(39972), + 73: uint16(39973), + 74: uint16(39974), + 75: uint16(39975), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39978), + 79: uint16(39979), + 80: uint16(39980), + 81: uint16(39981), + 82: uint16(39982), + 83: uint16(39983), + 84: uint16(39984), + 85: uint16(39985), + 86: uint16(39986), + 87: uint16(39987), + 88: uint16(39988), + 89: uint16(39989), + 90: uint16(39990), + 91: uint16(39991), + 92: uint16(39992), + 93: uint16(39993), + 94: uint16(39994), + 95: uint16(39995), + 96: uint16(35301), + 97: uint16(35307), + 98: uint16(35311), + 99: uint16(35390), + 100: uint16(35622), + 101: uint16(38739), + 102: uint16(38633), + 103: uint16(38643), + 104: uint16(38639), + 105: uint16(38662), + 106: uint16(38657), + 107: uint16(38664), + 108: uint16(38671), + 109: uint16(38670), + 110: uint16(38698), + 111: uint16(38701), + 112: uint16(38704), + 113: uint16(38718), + 114: uint16(40832), + 115: uint16(40835), + 116: uint16(40837), + 117: uint16(40838), + 118: uint16(40839), + 119: uint16(40840), + 120: uint16(40841), + 121: uint16(40842), + 122: uint16(40844), + 123: uint16(40702), + 124: uint16(40715), + 125: uint16(40717), + 126: uint16(38585), + 127: uint16(38588), + 128: uint16(38589), + 129: uint16(38606), + 130: uint16(38610), + 131: uint16(30655), + 132: uint16(38624), + 133: uint16(37518), + 134: uint16(37550), + 135: uint16(37576), + 136: uint16(37694), + 137: uint16(37738), + 138: uint16(37834), + 139: uint16(37775), + 140: uint16(37950), + 141: uint16(37995), + 142: uint16(40063), + 143: uint16(40066), + 144: uint16(40069), + 145: uint16(40070), + 146: uint16(40071), + 147: uint16(40072), + 148: uint16(31267), + 149: uint16(40075), + 150: uint16(40078), + 151: uint16(40080), + 152: uint16(40081), + 153: uint16(40082), + 154: uint16(40084), + 155: uint16(40085), + 156: uint16(40090), + 157: uint16(40091), + 158: uint16(40094), + 159: uint16(40095), + 160: uint16(40096), + 161: uint16(40097), + 162: uint16(40098), + 163: uint16(40099), + 164: uint16(40101), + 165: uint16(40102), + 166: uint16(40103), + 167: uint16(40104), + 168: uint16(40105), + 169: uint16(40107), + 170: uint16(40109), + 171: uint16(40110), + 172: uint16(40112), + 173: uint16(40113), + 174: uint16(40114), + 175: uint16(40115), + 176: uint16(40116), + 177: uint16(40117), + 178: uint16(40118), + 179: uint16(40119), + 180: uint16(40122), + 181: uint16(40123), + 182: uint16(40124), + 183: uint16(40125), + 184: uint16(40132), + 185: uint16(40133), + 186: uint16(40134), + 187: uint16(40135), + 188: uint16(40138), + 189: uint16(40139), + }, + 118: { + 0: uint16(39996), + 1: uint16(39997), + 2: uint16(39998), + 3: uint16(39999), + 4: uint16(40000), + 5: uint16(40001), + 6: uint16(40002), + 7: uint16(40003), + 8: uint16(40004), + 9: uint16(40005), + 10: uint16(40006), + 11: uint16(40007), + 12: uint16(40008), + 13: uint16(40009), + 14: uint16(40010), + 15: uint16(40011), + 16: uint16(40012), + 17: uint16(40013), + 18: uint16(40014), + 19: uint16(40015), + 20: uint16(40016), + 21: uint16(40017), + 22: uint16(40018), + 23: uint16(40019), + 24: uint16(40020), + 25: uint16(40021), + 26: uint16(40022), + 27: uint16(40023), + 28: uint16(40024), + 29: uint16(40025), + 30: uint16(40026), + 31: uint16(40027), + 32: uint16(40028), + 33: uint16(40029), + 34: uint16(40030), + 35: uint16(40031), + 36: uint16(40032), + 37: uint16(40033), + 38: uint16(40034), + 39: uint16(40035), + 40: uint16(40036), + 41: uint16(40037), + 42: uint16(40038), + 43: uint16(40039), + 44: uint16(40040), + 45: uint16(40041), + 46: uint16(40042), + 47: uint16(40043), + 48: uint16(40044), + 49: uint16(40045), + 50: uint16(40046), + 51: uint16(40047), + 52: uint16(40048), + 53: uint16(40049), + 54: uint16(40050), + 55: uint16(40051), + 56: uint16(40052), + 57: uint16(40053), + 58: uint16(40054), + 59: uint16(40055), + 60: uint16(40056), + 61: uint16(40057), + 62: uint16(40058), + 63: uint16(40059), + 64: uint16(40061), + 65: uint16(40062), + 66: uint16(40064), + 67: uint16(40067), + 68: uint16(40068), + 69: uint16(40073), + 70: uint16(40074), + 71: uint16(40076), + 72: uint16(40079), + 73: uint16(40083), + 74: uint16(40086), + 75: uint16(40087), + 76: uint16(40088), + 77: uint16(40089), + 78: uint16(40093), + 79: uint16(40106), + 80: uint16(40108), + 81: uint16(40111), + 82: uint16(40121), + 83: uint16(40126), + 84: uint16(40127), + 85: uint16(40128), + 86: uint16(40129), + 87: uint16(40130), + 88: uint16(40136), + 89: uint16(40137), + 90: uint16(40145), + 91: uint16(40146), + 92: uint16(40154), + 93: uint16(40155), + 94: uint16(40160), + 95: uint16(40161), + 96: uint16(40140), + 97: uint16(40141), + 98: uint16(40142), + 99: uint16(40143), + 100: uint16(40144), + 101: uint16(40147), + 102: uint16(40148), + 103: uint16(40149), + 104: uint16(40151), + 105: uint16(40152), + 106: uint16(40153), + 107: uint16(40156), + 108: uint16(40157), + 109: uint16(40159), + 110: uint16(40162), + 111: uint16(38780), + 112: uint16(38789), + 113: uint16(38801), + 114: uint16(38802), + 115: uint16(38804), + 116: uint16(38831), + 117: uint16(38827), + 118: uint16(38819), + 119: uint16(38834), + 120: uint16(38836), + 121: uint16(39601), + 122: uint16(39600), + 123: uint16(39607), + 124: uint16(40536), + 125: uint16(39606), + 126: uint16(39610), + 127: uint16(39612), + 128: uint16(39617), + 129: uint16(39616), + 130: uint16(39621), + 131: uint16(39618), + 132: uint16(39627), + 133: uint16(39628), + 134: uint16(39633), + 135: uint16(39749), + 136: uint16(39747), + 137: uint16(39751), + 138: uint16(39753), + 139: uint16(39752), + 140: uint16(39757), + 141: uint16(39761), + 142: uint16(39144), + 143: uint16(39181), + 144: uint16(39214), + 145: uint16(39253), + 146: uint16(39252), + 147: uint16(39647), + 148: uint16(39649), + 149: uint16(39654), + 150: uint16(39663), + 151: uint16(39659), + 152: uint16(39675), + 153: uint16(39661), + 154: uint16(39673), + 155: uint16(39688), + 156: uint16(39695), + 157: uint16(39699), + 158: uint16(39711), + 159: uint16(39715), + 160: uint16(40637), + 161: uint16(40638), + 162: uint16(32315), + 163: uint16(40578), + 164: uint16(40583), + 165: uint16(40584), + 166: uint16(40587), + 167: uint16(40594), + 168: uint16(37846), + 169: uint16(40605), + 170: uint16(40607), + 171: uint16(40667), + 172: uint16(40668), + 173: uint16(40669), + 174: uint16(40672), + 175: uint16(40671), + 176: uint16(40674), + 177: uint16(40681), + 178: uint16(40679), + 179: uint16(40677), + 180: uint16(40682), + 181: uint16(40687), + 182: uint16(40738), + 183: uint16(40748), + 184: uint16(40751), + 185: uint16(40761), + 186: uint16(40759), + 187: uint16(40765), + 188: uint16(40766), + 189: uint16(40772), + }, + 119: { + 0: uint16(40163), + 1: uint16(40164), + 2: uint16(40165), + 3: uint16(40166), + 4: uint16(40167), + 5: uint16(40168), + 6: uint16(40169), + 7: uint16(40170), + 8: uint16(40171), + 9: uint16(40172), + 10: uint16(40173), + 11: uint16(40174), + 12: uint16(40175), + 13: uint16(40176), + 14: uint16(40177), + 15: uint16(40178), + 16: uint16(40179), + 17: uint16(40180), + 18: uint16(40181), + 19: uint16(40182), + 20: uint16(40183), + 21: uint16(40184), + 22: uint16(40185), + 23: uint16(40186), + 24: uint16(40187), + 25: uint16(40188), + 26: uint16(40189), + 27: uint16(40190), + 28: uint16(40191), + 29: uint16(40192), + 30: uint16(40193), + 31: uint16(40194), + 32: uint16(40195), + 33: uint16(40196), + 34: uint16(40197), + 35: uint16(40198), + 36: uint16(40199), + 37: uint16(40200), + 38: uint16(40201), + 39: uint16(40202), + 40: uint16(40203), + 41: uint16(40204), + 42: uint16(40205), + 43: uint16(40206), + 44: uint16(40207), + 45: uint16(40208), + 46: uint16(40209), + 47: uint16(40210), + 48: uint16(40211), + 49: uint16(40212), + 50: uint16(40213), + 51: uint16(40214), + 52: uint16(40215), + 53: uint16(40216), + 54: uint16(40217), + 55: uint16(40218), + 56: uint16(40219), + 57: uint16(40220), + 58: uint16(40221), + 59: uint16(40222), + 60: uint16(40223), + 61: uint16(40224), + 62: uint16(40225), + 63: uint16(40226), + 64: uint16(40227), + 65: uint16(40228), + 66: uint16(40229), + 67: uint16(40230), + 68: uint16(40231), + 69: uint16(40232), + 70: uint16(40233), + 71: uint16(40234), + 72: uint16(40235), + 73: uint16(40236), + 74: uint16(40237), + 75: uint16(40238), + 76: uint16(40239), + 77: uint16(40240), + 78: uint16(40241), + 79: uint16(40242), + 80: uint16(40243), + 81: uint16(40244), + 82: uint16(40245), + 83: uint16(40246), + 84: uint16(40247), + 85: uint16(40248), + 86: uint16(40249), + 87: uint16(40250), + 88: uint16(40251), + 89: uint16(40252), + 90: uint16(40253), + 91: uint16(40254), + 92: uint16(40255), + 93: uint16(40256), + 94: uint16(40257), + 95: uint16(40258), + 96: uint16(57908), + 97: uint16(57909), + 98: uint16(57910), + 99: uint16(57911), + 100: uint16(57912), + 101: uint16(57913), + 102: uint16(57914), + 103: uint16(57915), + 104: uint16(57916), + 105: uint16(57917), + 106: uint16(57918), + 107: uint16(57919), + 108: uint16(57920), + 109: uint16(57921), + 110: uint16(57922), + 111: uint16(57923), + 112: uint16(57924), + 113: uint16(57925), + 114: uint16(57926), + 115: uint16(57927), + 116: uint16(57928), + 117: uint16(57929), + 118: uint16(57930), + 119: uint16(57931), + 120: uint16(57932), + 121: uint16(57933), + 122: uint16(57934), + 123: uint16(57935), + 124: uint16(57936), + 125: uint16(57937), + 126: uint16(57938), + 127: uint16(57939), + 128: uint16(57940), + 129: uint16(57941), + 130: uint16(57942), + 131: uint16(57943), + 132: uint16(57944), + 133: uint16(57945), + 134: uint16(57946), + 135: uint16(57947), + 136: uint16(57948), + 137: uint16(57949), + 138: uint16(57950), + 139: uint16(57951), + 140: uint16(57952), + 141: uint16(57953), + 142: uint16(57954), + 143: uint16(57955), + 144: uint16(57956), + 145: uint16(57957), + 146: uint16(57958), + 147: uint16(57959), + 148: uint16(57960), + 149: uint16(57961), + 150: uint16(57962), + 151: uint16(57963), + 152: uint16(57964), + 153: uint16(57965), + 154: uint16(57966), + 155: uint16(57967), + 156: uint16(57968), + 157: uint16(57969), + 158: uint16(57970), + 159: uint16(57971), + 160: uint16(57972), + 161: uint16(57973), + 162: uint16(57974), + 163: uint16(57975), + 164: uint16(57976), + 165: uint16(57977), + 166: uint16(57978), + 167: uint16(57979), + 168: uint16(57980), + 169: uint16(57981), + 170: uint16(57982), + 171: uint16(57983), + 172: uint16(57984), + 173: uint16(57985), + 174: uint16(57986), + 175: uint16(57987), + 176: uint16(57988), + 177: uint16(57989), + 178: uint16(57990), + 179: uint16(57991), + 180: uint16(57992), + 181: uint16(57993), + 182: uint16(57994), + 183: uint16(57995), + 184: uint16(57996), + 185: uint16(57997), + 186: uint16(57998), + 187: uint16(57999), + 188: uint16(58000), + 189: uint16(58001), + }, + 120: { + 0: uint16(40259), + 1: uint16(40260), + 2: uint16(40261), + 3: uint16(40262), + 4: uint16(40263), + 5: uint16(40264), + 6: uint16(40265), + 7: uint16(40266), + 8: uint16(40267), + 9: uint16(40268), + 10: uint16(40269), + 11: uint16(40270), + 12: uint16(40271), + 13: uint16(40272), + 14: uint16(40273), + 15: uint16(40274), + 16: uint16(40275), + 17: uint16(40276), + 18: uint16(40277), + 19: uint16(40278), + 20: uint16(40279), + 21: uint16(40280), + 22: uint16(40281), + 23: uint16(40282), + 24: uint16(40283), + 25: uint16(40284), + 26: uint16(40285), + 27: uint16(40286), + 28: uint16(40287), + 29: uint16(40288), + 30: uint16(40289), + 31: uint16(40290), + 32: uint16(40291), + 33: uint16(40292), + 34: uint16(40293), + 35: uint16(40294), + 36: uint16(40295), + 37: uint16(40296), + 38: uint16(40297), + 39: uint16(40298), + 40: uint16(40299), + 41: uint16(40300), + 42: uint16(40301), + 43: uint16(40302), + 44: uint16(40303), + 45: uint16(40304), + 46: uint16(40305), + 47: uint16(40306), + 48: uint16(40307), + 49: uint16(40308), + 50: uint16(40309), + 51: uint16(40310), + 52: uint16(40311), + 53: uint16(40312), + 54: uint16(40313), + 55: uint16(40314), + 56: uint16(40315), + 57: uint16(40316), + 58: uint16(40317), + 59: uint16(40318), + 60: uint16(40319), + 61: uint16(40320), + 62: uint16(40321), + 63: uint16(40322), + 64: uint16(40323), + 65: uint16(40324), + 66: uint16(40325), + 67: uint16(40326), + 68: uint16(40327), + 69: uint16(40328), + 70: uint16(40329), + 71: uint16(40330), + 72: uint16(40331), + 73: uint16(40332), + 74: uint16(40333), + 75: uint16(40334), + 76: uint16(40335), + 77: uint16(40336), + 78: uint16(40337), + 79: uint16(40338), + 80: uint16(40339), + 81: uint16(40340), + 82: uint16(40341), + 83: uint16(40342), + 84: uint16(40343), + 85: uint16(40344), + 86: uint16(40345), + 87: uint16(40346), + 88: uint16(40347), + 89: uint16(40348), + 90: uint16(40349), + 91: uint16(40350), + 92: uint16(40351), + 93: uint16(40352), + 94: uint16(40353), + 95: uint16(40354), + 96: uint16(58002), + 97: uint16(58003), + 98: uint16(58004), + 99: uint16(58005), + 100: uint16(58006), + 101: uint16(58007), + 102: uint16(58008), + 103: uint16(58009), + 104: uint16(58010), + 105: uint16(58011), + 106: uint16(58012), + 107: uint16(58013), + 108: uint16(58014), + 109: uint16(58015), + 110: uint16(58016), + 111: uint16(58017), + 112: uint16(58018), + 113: uint16(58019), + 114: uint16(58020), + 115: uint16(58021), + 116: uint16(58022), + 117: uint16(58023), + 118: uint16(58024), + 119: uint16(58025), + 120: uint16(58026), + 121: uint16(58027), + 122: uint16(58028), + 123: uint16(58029), + 124: uint16(58030), + 125: uint16(58031), + 126: uint16(58032), + 127: uint16(58033), + 128: uint16(58034), + 129: uint16(58035), + 130: uint16(58036), + 131: uint16(58037), + 132: uint16(58038), + 133: uint16(58039), + 134: uint16(58040), + 135: uint16(58041), + 136: uint16(58042), + 137: uint16(58043), + 138: uint16(58044), + 139: uint16(58045), + 140: uint16(58046), + 141: uint16(58047), + 142: uint16(58048), + 143: uint16(58049), + 144: uint16(58050), + 145: uint16(58051), + 146: uint16(58052), + 147: uint16(58053), + 148: uint16(58054), + 149: uint16(58055), + 150: uint16(58056), + 151: uint16(58057), + 152: uint16(58058), + 153: uint16(58059), + 154: uint16(58060), + 155: uint16(58061), + 156: uint16(58062), + 157: uint16(58063), + 158: uint16(58064), + 159: uint16(58065), + 160: uint16(58066), + 161: uint16(58067), + 162: uint16(58068), + 163: uint16(58069), + 164: uint16(58070), + 165: uint16(58071), + 166: uint16(58072), + 167: uint16(58073), + 168: uint16(58074), + 169: uint16(58075), + 170: uint16(58076), + 171: uint16(58077), + 172: uint16(58078), + 173: uint16(58079), + 174: uint16(58080), + 175: uint16(58081), + 176: uint16(58082), + 177: uint16(58083), + 178: uint16(58084), + 179: uint16(58085), + 180: uint16(58086), + 181: uint16(58087), + 182: uint16(58088), + 183: uint16(58089), + 184: uint16(58090), + 185: uint16(58091), + 186: uint16(58092), + 187: uint16(58093), + 188: uint16(58094), + 189: uint16(58095), + }, + 121: { + 0: uint16(40355), + 1: uint16(40356), + 2: uint16(40357), + 3: uint16(40358), + 4: uint16(40359), + 5: uint16(40360), + 6: uint16(40361), + 7: uint16(40362), + 8: uint16(40363), + 9: uint16(40364), + 10: uint16(40365), + 11: uint16(40366), + 12: uint16(40367), + 13: uint16(40368), + 14: uint16(40369), + 15: uint16(40370), + 16: uint16(40371), + 17: uint16(40372), + 18: uint16(40373), + 19: uint16(40374), + 20: uint16(40375), + 21: uint16(40376), + 22: uint16(40377), + 23: uint16(40378), + 24: uint16(40379), + 25: uint16(40380), + 26: uint16(40381), + 27: uint16(40382), + 28: uint16(40383), + 29: uint16(40384), + 30: uint16(40385), + 31: uint16(40386), + 32: uint16(40387), + 33: uint16(40388), + 34: uint16(40389), + 35: uint16(40390), + 36: uint16(40391), + 37: uint16(40392), + 38: uint16(40393), + 39: uint16(40394), + 40: uint16(40395), + 41: uint16(40396), + 42: uint16(40397), + 43: uint16(40398), + 44: uint16(40399), + 45: uint16(40400), + 46: uint16(40401), + 47: uint16(40402), + 48: uint16(40403), + 49: uint16(40404), + 50: uint16(40405), + 51: uint16(40406), + 52: uint16(40407), + 53: uint16(40408), + 54: uint16(40409), + 55: uint16(40410), + 56: uint16(40411), + 57: uint16(40412), + 58: uint16(40413), + 59: uint16(40414), + 60: uint16(40415), + 61: uint16(40416), + 62: uint16(40417), + 63: uint16(40418), + 64: uint16(40419), + 65: uint16(40420), + 66: uint16(40421), + 67: uint16(40422), + 68: uint16(40423), + 69: uint16(40424), + 70: uint16(40425), + 71: uint16(40426), + 72: uint16(40427), + 73: uint16(40428), + 74: uint16(40429), + 75: uint16(40430), + 76: uint16(40431), + 77: uint16(40432), + 78: uint16(40433), + 79: uint16(40434), + 80: uint16(40435), + 81: uint16(40436), + 82: uint16(40437), + 83: uint16(40438), + 84: uint16(40439), + 85: uint16(40440), + 86: uint16(40441), + 87: uint16(40442), + 88: uint16(40443), + 89: uint16(40444), + 90: uint16(40445), + 91: uint16(40446), + 92: uint16(40447), + 93: uint16(40448), + 94: uint16(40449), + 95: uint16(40450), + 96: uint16(58096), + 97: uint16(58097), + 98: uint16(58098), + 99: uint16(58099), + 100: uint16(58100), + 101: uint16(58101), + 102: uint16(58102), + 103: uint16(58103), + 104: uint16(58104), + 105: uint16(58105), + 106: uint16(58106), + 107: uint16(58107), + 108: uint16(58108), + 109: uint16(58109), + 110: uint16(58110), + 111: uint16(58111), + 112: uint16(58112), + 113: uint16(58113), + 114: uint16(58114), + 115: uint16(58115), + 116: uint16(58116), + 117: uint16(58117), + 118: uint16(58118), + 119: uint16(58119), + 120: uint16(58120), + 121: uint16(58121), + 122: uint16(58122), + 123: uint16(58123), + 124: uint16(58124), + 125: uint16(58125), + 126: uint16(58126), + 127: uint16(58127), + 128: uint16(58128), + 129: uint16(58129), + 130: uint16(58130), + 131: uint16(58131), + 132: uint16(58132), + 133: uint16(58133), + 134: uint16(58134), + 135: uint16(58135), + 136: uint16(58136), + 137: uint16(58137), + 138: uint16(58138), + 139: uint16(58139), + 140: uint16(58140), + 141: uint16(58141), + 142: uint16(58142), + 143: uint16(58143), + 144: uint16(58144), + 145: uint16(58145), + 146: uint16(58146), + 147: uint16(58147), + 148: uint16(58148), + 149: uint16(58149), + 150: uint16(58150), + 151: uint16(58151), + 152: uint16(58152), + 153: uint16(58153), + 154: uint16(58154), + 155: uint16(58155), + 156: uint16(58156), + 157: uint16(58157), + 158: uint16(58158), + 159: uint16(58159), + 160: uint16(58160), + 161: uint16(58161), + 162: uint16(58162), + 163: uint16(58163), + 164: uint16(58164), + 165: uint16(58165), + 166: uint16(58166), + 167: uint16(58167), + 168: uint16(58168), + 169: uint16(58169), + 170: uint16(58170), + 171: uint16(58171), + 172: uint16(58172), + 173: uint16(58173), + 174: uint16(58174), + 175: uint16(58175), + 176: uint16(58176), + 177: uint16(58177), + 178: uint16(58178), + 179: uint16(58179), + 180: uint16(58180), + 181: uint16(58181), + 182: uint16(58182), + 183: uint16(58183), + 184: uint16(58184), + 185: uint16(58185), + 186: uint16(58186), + 187: uint16(58187), + 188: uint16(58188), + 189: uint16(58189), + }, + 122: { + 0: uint16(40451), + 1: uint16(40452), + 2: uint16(40453), + 3: uint16(40454), + 4: uint16(40455), + 5: uint16(40456), + 6: uint16(40457), + 7: uint16(40458), + 8: uint16(40459), + 9: uint16(40460), + 10: uint16(40461), + 11: uint16(40462), + 12: uint16(40463), + 13: uint16(40464), + 14: uint16(40465), + 15: uint16(40466), + 16: uint16(40467), + 17: uint16(40468), + 18: uint16(40469), + 19: uint16(40470), + 20: uint16(40471), + 21: uint16(40472), + 22: uint16(40473), + 23: uint16(40474), + 24: uint16(40475), + 25: uint16(40476), + 26: uint16(40477), + 27: uint16(40478), + 28: uint16(40484), + 29: uint16(40487), + 30: uint16(40494), + 31: uint16(40496), + 32: uint16(40500), + 33: uint16(40507), + 34: uint16(40508), + 35: uint16(40512), + 36: uint16(40525), + 37: uint16(40528), + 38: uint16(40530), + 39: uint16(40531), + 40: uint16(40532), + 41: uint16(40534), + 42: uint16(40537), + 43: uint16(40541), + 44: uint16(40543), + 45: uint16(40544), + 46: uint16(40545), + 47: uint16(40546), + 48: uint16(40549), + 49: uint16(40558), + 50: uint16(40559), + 51: uint16(40562), + 52: uint16(40564), + 53: uint16(40565), + 54: uint16(40566), + 55: uint16(40567), + 56: uint16(40568), + 57: uint16(40569), + 58: uint16(40570), + 59: uint16(40571), + 60: uint16(40572), + 61: uint16(40573), + 62: uint16(40576), + 63: uint16(40577), + 64: uint16(40579), + 65: uint16(40580), + 66: uint16(40581), + 67: uint16(40582), + 68: uint16(40585), + 69: uint16(40586), + 70: uint16(40588), + 71: uint16(40589), + 72: uint16(40590), + 73: uint16(40591), + 74: uint16(40592), + 75: uint16(40593), + 76: uint16(40596), + 77: uint16(40597), + 78: uint16(40598), + 79: uint16(40599), + 80: uint16(40600), + 81: uint16(40601), + 82: uint16(40602), + 83: uint16(40603), + 84: uint16(40604), + 85: uint16(40606), + 86: uint16(40608), + 87: uint16(40609), + 88: uint16(40610), + 89: uint16(40611), + 90: uint16(40612), + 91: uint16(40613), + 92: uint16(40615), + 93: uint16(40616), + 94: uint16(40617), + 95: uint16(40618), + 96: uint16(58190), + 97: uint16(58191), + 98: uint16(58192), + 99: uint16(58193), + 100: uint16(58194), + 101: uint16(58195), + 102: uint16(58196), + 103: uint16(58197), + 104: uint16(58198), + 105: uint16(58199), + 106: uint16(58200), + 107: uint16(58201), + 108: uint16(58202), + 109: uint16(58203), + 110: uint16(58204), + 111: uint16(58205), + 112: uint16(58206), + 113: uint16(58207), + 114: uint16(58208), + 115: uint16(58209), + 116: uint16(58210), + 117: uint16(58211), + 118: uint16(58212), + 119: uint16(58213), + 120: uint16(58214), + 121: uint16(58215), + 122: uint16(58216), + 123: uint16(58217), + 124: uint16(58218), + 125: uint16(58219), + 126: uint16(58220), + 127: uint16(58221), + 128: uint16(58222), + 129: uint16(58223), + 130: uint16(58224), + 131: uint16(58225), + 132: uint16(58226), + 133: uint16(58227), + 134: uint16(58228), + 135: uint16(58229), + 136: uint16(58230), + 137: uint16(58231), + 138: uint16(58232), + 139: uint16(58233), + 140: uint16(58234), + 141: uint16(58235), + 142: uint16(58236), + 143: uint16(58237), + 144: uint16(58238), + 145: uint16(58239), + 146: uint16(58240), + 147: uint16(58241), + 148: uint16(58242), + 149: uint16(58243), + 150: uint16(58244), + 151: uint16(58245), + 152: uint16(58246), + 153: uint16(58247), + 154: uint16(58248), + 155: uint16(58249), + 156: uint16(58250), + 157: uint16(58251), + 158: uint16(58252), + 159: uint16(58253), + 160: uint16(58254), + 161: uint16(58255), + 162: uint16(58256), + 163: uint16(58257), + 164: uint16(58258), + 165: uint16(58259), + 166: uint16(58260), + 167: uint16(58261), + 168: uint16(58262), + 169: uint16(58263), + 170: uint16(58264), + 171: uint16(58265), + 172: uint16(58266), + 173: uint16(58267), + 174: uint16(58268), + 175: uint16(58269), + 176: uint16(58270), + 177: uint16(58271), + 178: uint16(58272), + 179: uint16(58273), + 180: uint16(58274), + 181: uint16(58275), + 182: uint16(58276), + 183: uint16(58277), + 184: uint16(58278), + 185: uint16(58279), + 186: uint16(58280), + 187: uint16(58281), + 188: uint16(58282), + 189: uint16(58283), + }, + 123: { + 0: uint16(40619), + 1: uint16(40620), + 2: uint16(40621), + 3: uint16(40622), + 4: uint16(40623), + 5: uint16(40624), + 6: uint16(40625), + 7: uint16(40626), + 8: uint16(40627), + 9: uint16(40629), + 10: uint16(40630), + 11: uint16(40631), + 12: uint16(40633), + 13: uint16(40634), + 14: uint16(40636), + 15: uint16(40639), + 16: uint16(40640), + 17: uint16(40641), + 18: uint16(40642), + 19: uint16(40643), + 20: uint16(40645), + 21: uint16(40646), + 22: uint16(40647), + 23: uint16(40648), + 24: uint16(40650), + 25: uint16(40651), + 26: uint16(40652), + 27: uint16(40656), + 28: uint16(40658), + 29: uint16(40659), + 30: uint16(40661), + 31: uint16(40662), + 32: uint16(40663), + 33: uint16(40665), + 34: uint16(40666), + 35: uint16(40670), + 36: uint16(40673), + 37: uint16(40675), + 38: uint16(40676), + 39: uint16(40678), + 40: uint16(40680), + 41: uint16(40683), + 42: uint16(40684), + 43: uint16(40685), + 44: uint16(40686), + 45: uint16(40688), + 46: uint16(40689), + 47: uint16(40690), + 48: uint16(40691), + 49: uint16(40692), + 50: uint16(40693), + 51: uint16(40694), + 52: uint16(40695), + 53: uint16(40696), + 54: uint16(40698), + 55: uint16(40701), + 56: uint16(40703), + 57: uint16(40704), + 58: uint16(40705), + 59: uint16(40706), + 60: uint16(40707), + 61: uint16(40708), + 62: uint16(40709), + 63: uint16(40710), + 64: uint16(40711), + 65: uint16(40712), + 66: uint16(40713), + 67: uint16(40714), + 68: uint16(40716), + 69: uint16(40719), + 70: uint16(40721), + 71: uint16(40722), + 72: uint16(40724), + 73: uint16(40725), + 74: uint16(40726), + 75: uint16(40728), + 76: uint16(40730), + 77: uint16(40731), + 78: uint16(40732), + 79: uint16(40733), + 80: uint16(40734), + 81: uint16(40735), + 82: uint16(40737), + 83: uint16(40739), + 84: uint16(40740), + 85: uint16(40741), + 86: uint16(40742), + 87: uint16(40743), + 88: uint16(40744), + 89: uint16(40745), + 90: uint16(40746), + 91: uint16(40747), + 92: uint16(40749), + 93: uint16(40750), + 94: uint16(40752), + 95: uint16(40753), + 96: uint16(58284), + 97: uint16(58285), + 98: uint16(58286), + 99: uint16(58287), + 100: uint16(58288), + 101: uint16(58289), + 102: uint16(58290), + 103: uint16(58291), + 104: uint16(58292), + 105: uint16(58293), + 106: uint16(58294), + 107: uint16(58295), + 108: uint16(58296), + 109: uint16(58297), + 110: uint16(58298), + 111: uint16(58299), + 112: uint16(58300), + 113: uint16(58301), + 114: uint16(58302), + 115: uint16(58303), + 116: uint16(58304), + 117: uint16(58305), + 118: uint16(58306), + 119: uint16(58307), + 120: uint16(58308), + 121: uint16(58309), + 122: uint16(58310), + 123: uint16(58311), + 124: uint16(58312), + 125: uint16(58313), + 126: uint16(58314), + 127: uint16(58315), + 128: uint16(58316), + 129: uint16(58317), + 130: uint16(58318), + 131: uint16(58319), + 132: uint16(58320), + 133: uint16(58321), + 134: uint16(58322), + 135: uint16(58323), + 136: uint16(58324), + 137: uint16(58325), + 138: uint16(58326), + 139: uint16(58327), + 140: uint16(58328), + 141: uint16(58329), + 142: uint16(58330), + 143: uint16(58331), + 144: uint16(58332), + 145: uint16(58333), + 146: uint16(58334), + 147: uint16(58335), + 148: uint16(58336), + 149: uint16(58337), + 150: uint16(58338), + 151: uint16(58339), + 152: uint16(58340), + 153: uint16(58341), + 154: uint16(58342), + 155: uint16(58343), + 156: uint16(58344), + 157: uint16(58345), + 158: uint16(58346), + 159: uint16(58347), + 160: uint16(58348), + 161: uint16(58349), + 162: uint16(58350), + 163: uint16(58351), + 164: uint16(58352), + 165: uint16(58353), + 166: uint16(58354), + 167: uint16(58355), + 168: uint16(58356), + 169: uint16(58357), + 170: uint16(58358), + 171: uint16(58359), + 172: uint16(58360), + 173: uint16(58361), + 174: uint16(58362), + 175: uint16(58363), + 176: uint16(58364), + 177: uint16(58365), + 178: uint16(58366), + 179: uint16(58367), + 180: uint16(58368), + 181: uint16(58369), + 182: uint16(58370), + 183: uint16(58371), + 184: uint16(58372), + 185: uint16(58373), + 186: uint16(58374), + 187: uint16(58375), + 188: uint16(58376), + 189: uint16(58377), + }, + 124: { + 0: uint16(40754), + 1: uint16(40755), + 2: uint16(40756), + 3: uint16(40757), + 4: uint16(40758), + 5: uint16(40760), + 6: uint16(40762), + 7: uint16(40764), + 8: uint16(40767), + 9: uint16(40768), + 10: uint16(40769), + 11: uint16(40770), + 12: uint16(40771), + 13: uint16(40773), + 14: uint16(40774), + 15: uint16(40775), + 16: uint16(40776), + 17: uint16(40777), + 18: uint16(40778), + 19: uint16(40779), + 20: uint16(40780), + 21: uint16(40781), + 22: uint16(40782), + 23: uint16(40783), + 24: uint16(40786), + 25: uint16(40787), + 26: uint16(40788), + 27: uint16(40789), + 28: uint16(40790), + 29: uint16(40791), + 30: uint16(40792), + 31: uint16(40793), + 32: uint16(40794), + 33: uint16(40795), + 34: uint16(40796), + 35: uint16(40797), + 36: uint16(40798), + 37: uint16(40799), + 38: uint16(40800), + 39: uint16(40801), + 40: uint16(40802), + 41: uint16(40803), + 42: uint16(40804), + 43: uint16(40805), + 44: uint16(40806), + 45: uint16(40807), + 46: uint16(40808), + 47: uint16(40809), + 48: uint16(40810), + 49: uint16(40811), + 50: uint16(40812), + 51: uint16(40813), + 52: uint16(40814), + 53: uint16(40815), + 54: uint16(40816), + 55: uint16(40817), + 56: uint16(40818), + 57: uint16(40819), + 58: uint16(40820), + 59: uint16(40821), + 60: uint16(40822), + 61: uint16(40823), + 62: uint16(40824), + 63: uint16(40825), + 64: uint16(40826), + 65: uint16(40827), + 66: uint16(40828), + 67: uint16(40829), + 68: uint16(40830), + 69: uint16(40833), + 70: uint16(40834), + 71: uint16(40845), + 72: uint16(40846), + 73: uint16(40847), + 74: uint16(40848), + 75: uint16(40849), + 76: uint16(40850), + 77: uint16(40851), + 78: uint16(40852), + 79: uint16(40853), + 80: uint16(40854), + 81: uint16(40855), + 82: uint16(40856), + 83: uint16(40860), + 84: uint16(40861), + 85: uint16(40862), + 86: uint16(40865), + 87: uint16(40866), + 88: uint16(40867), + 89: uint16(40868), + 90: uint16(40869), + 91: uint16(63788), + 92: uint16(63865), + 93: uint16(63893), + 94: uint16(63975), + 95: uint16(63985), + 96: uint16(58378), + 97: uint16(58379), + 98: uint16(58380), + 99: uint16(58381), + 100: uint16(58382), + 101: uint16(58383), + 102: uint16(58384), + 103: uint16(58385), + 104: uint16(58386), + 105: uint16(58387), + 106: uint16(58388), + 107: uint16(58389), + 108: uint16(58390), + 109: uint16(58391), + 110: uint16(58392), + 111: uint16(58393), + 112: uint16(58394), + 113: uint16(58395), + 114: uint16(58396), + 115: uint16(58397), + 116: uint16(58398), + 117: uint16(58399), + 118: uint16(58400), + 119: uint16(58401), + 120: uint16(58402), + 121: uint16(58403), + 122: uint16(58404), + 123: uint16(58405), + 124: uint16(58406), + 125: uint16(58407), + 126: uint16(58408), + 127: uint16(58409), + 128: uint16(58410), + 129: uint16(58411), + 130: uint16(58412), + 131: uint16(58413), + 132: uint16(58414), + 133: uint16(58415), + 134: uint16(58416), + 135: uint16(58417), + 136: uint16(58418), + 137: uint16(58419), + 138: uint16(58420), + 139: uint16(58421), + 140: uint16(58422), + 141: uint16(58423), + 142: uint16(58424), + 143: uint16(58425), + 144: uint16(58426), + 145: uint16(58427), + 146: uint16(58428), + 147: uint16(58429), + 148: uint16(58430), + 149: uint16(58431), + 150: uint16(58432), + 151: uint16(58433), + 152: uint16(58434), + 153: uint16(58435), + 154: uint16(58436), + 155: uint16(58437), + 156: uint16(58438), + 157: uint16(58439), + 158: uint16(58440), + 159: uint16(58441), + 160: uint16(58442), + 161: uint16(58443), + 162: uint16(58444), + 163: uint16(58445), + 164: uint16(58446), + 165: uint16(58447), + 166: uint16(58448), + 167: uint16(58449), + 168: uint16(58450), + 169: uint16(58451), + 170: uint16(58452), + 171: uint16(58453), + 172: uint16(58454), + 173: uint16(58455), + 174: uint16(58456), + 175: uint16(58457), + 176: uint16(58458), + 177: uint16(58459), + 178: uint16(58460), + 179: uint16(58461), + 180: uint16(58462), + 181: uint16(58463), + 182: uint16(58464), + 183: uint16(58465), + 184: uint16(58466), + 185: uint16(58467), + 186: uint16(58468), + 187: uint16(58469), + 188: uint16(58470), + 189: uint16(58471), + }, + 125: { + 0: uint16(64012), + 1: uint16(64013), + 2: uint16(64014), + 3: uint16(64015), + 4: uint16(64017), + 5: uint16(64019), + 6: uint16(64020), + 7: uint16(64024), + 8: uint16(64031), + 9: uint16(64032), + 10: uint16(64033), + 11: uint16(64035), + 12: uint16(64036), + 13: uint16(64039), + 14: uint16(64040), + 15: uint16(64041), + 16: uint16(11905), + 17: uint16(59414), + 18: uint16(59415), + 19: uint16(59416), + 20: uint16(11908), + 21: uint16(13427), + 22: uint16(13383), + 23: uint16(11912), + 24: uint16(11915), + 25: uint16(59422), + 26: uint16(13726), + 27: uint16(13850), + 28: uint16(13838), + 29: uint16(11916), + 30: uint16(11927), + 31: uint16(14702), + 32: uint16(14616), + 33: uint16(59430), + 34: uint16(14799), + 35: uint16(14815), + 36: uint16(14963), + 37: uint16(14800), + 38: uint16(59435), + 39: uint16(59436), + 40: uint16(15182), + 41: uint16(15470), + 42: uint16(15584), + 43: uint16(11943), + 44: uint16(59441), + 45: uint16(59442), + 46: uint16(11946), + 47: uint16(16470), + 48: uint16(16735), + 49: uint16(11950), + 50: uint16(17207), + 51: uint16(11955), + 52: uint16(11958), + 53: uint16(11959), + 54: uint16(59451), + 55: uint16(17329), + 56: uint16(17324), + 57: uint16(11963), + 58: uint16(17373), + 59: uint16(17622), + 60: uint16(18017), + 61: uint16(17996), + 62: uint16(59459), + 63: uint16(18211), + 64: uint16(18217), + 65: uint16(18300), + 66: uint16(18317), + 67: uint16(11978), + 68: uint16(18759), + 69: uint16(18810), + 70: uint16(18813), + 71: uint16(18818), + 72: uint16(18819), + 73: uint16(18821), + 74: uint16(18822), + 75: uint16(18847), + 76: uint16(18843), + 77: uint16(18871), + 78: uint16(18870), + 79: uint16(59476), + 80: uint16(59477), + 81: uint16(19619), + 82: uint16(19615), + 83: uint16(19616), + 84: uint16(19617), + 85: uint16(19575), + 86: uint16(19618), + 87: uint16(19731), + 88: uint16(19732), + 89: uint16(19733), + 90: uint16(19734), + 91: uint16(19735), + 92: uint16(19736), + 93: uint16(19737), + 94: uint16(19886), + 95: uint16(59492), + 96: uint16(58472), + 97: uint16(58473), + 98: uint16(58474), + 99: uint16(58475), + 100: uint16(58476), + 101: uint16(58477), + 102: uint16(58478), + 103: uint16(58479), + 104: uint16(58480), + 105: uint16(58481), + 106: uint16(58482), + 107: uint16(58483), + 108: uint16(58484), + 109: uint16(58485), + 110: uint16(58486), + 111: uint16(58487), + 112: uint16(58488), + 113: uint16(58489), + 114: uint16(58490), + 115: uint16(58491), + 116: uint16(58492), + 117: uint16(58493), + 118: uint16(58494), + 119: uint16(58495), + 120: uint16(58496), + 121: uint16(58497), + 122: uint16(58498), + 123: uint16(58499), + 124: uint16(58500), + 125: uint16(58501), + 126: uint16(58502), + 127: uint16(58503), + 128: uint16(58504), + 129: uint16(58505), + 130: uint16(58506), + 131: uint16(58507), + 132: uint16(58508), + 133: uint16(58509), + 134: uint16(58510), + 135: uint16(58511), + 136: uint16(58512), + 137: uint16(58513), + 138: uint16(58514), + 139: uint16(58515), + 140: uint16(58516), + 141: uint16(58517), + 142: uint16(58518), + 143: uint16(58519), + 144: uint16(58520), + 145: uint16(58521), + 146: uint16(58522), + 147: uint16(58523), + 148: uint16(58524), + 149: uint16(58525), + 150: uint16(58526), + 151: uint16(58527), + 152: uint16(58528), + 153: uint16(58529), + 154: uint16(58530), + 155: uint16(58531), + 156: uint16(58532), + 157: uint16(58533), + 158: uint16(58534), + 159: uint16(58535), + 160: uint16(58536), + 161: uint16(58537), + 162: uint16(58538), + 163: uint16(58539), + 164: uint16(58540), + 165: uint16(58541), + 166: uint16(58542), + 167: uint16(58543), + 168: uint16(58544), + 169: uint16(58545), + 170: uint16(58546), + 171: uint16(58547), + 172: uint16(58548), + 173: uint16(58549), + 174: uint16(58550), + 175: uint16(58551), + 176: uint16(58552), + 177: uint16(58553), + 178: uint16(58554), + 179: uint16(58555), + 180: uint16(58556), + 181: uint16(58557), + 182: uint16(58558), + 183: uint16(58559), + 184: uint16(58560), + 185: uint16(58561), + 186: uint16(58562), + 187: uint16(58563), + 188: uint16(58564), + 189: uint16(58565), + }, +} + +var _big5 = [89][157]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(65292), + 2: uint16(12289), + 3: uint16(12290), + 4: uint16(65294), + 5: uint16(8231), + 6: uint16(65307), + 7: uint16(65306), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(65072), + 11: uint16(8230), + 12: uint16(8229), + 13: uint16(65104), + 14: uint16(65105), + 15: uint16(65106), + 16: uint16(183), + 17: uint16(65108), + 18: uint16(65109), + 19: uint16(65110), + 20: uint16(65111), + 21: uint16(65372), + 22: uint16(8211), + 23: uint16(65073), + 24: uint16(8212), + 25: uint16(65075), + 26: uint16(9588), + 27: uint16(65076), + 28: uint16(65103), + 29: uint16(65288), + 30: uint16(65289), + 31: uint16(65077), + 32: uint16(65078), + 33: uint16(65371), + 34: uint16(65373), + 35: uint16(65079), + 36: uint16(65080), + 37: uint16(12308), + 38: uint16(12309), + 39: uint16(65081), + 40: uint16(65082), + 41: uint16(12304), + 42: uint16(12305), + 43: uint16(65083), + 44: uint16(65084), + 45: uint16(12298), + 46: uint16(12299), + 47: uint16(65085), + 48: uint16(65086), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(65087), + 52: uint16(65088), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(65089), + 56: uint16(65090), + 57: uint16(12302), + 58: uint16(12303), + 59: uint16(65091), + 60: uint16(65092), + 61: uint16(65113), + 62: uint16(65114), + 63: uint16(65115), + 64: uint16(65116), + 65: uint16(65117), + 66: uint16(65118), + 67: uint16(8216), + 68: uint16(8217), + 69: uint16(8220), + 70: uint16(8221), + 71: uint16(12317), + 72: uint16(12318), + 73: uint16(8245), + 74: uint16(8242), + 75: uint16(65283), + 76: uint16(65286), + 77: uint16(65290), + 78: uint16(8251), + 79: uint16(167), + 80: uint16(12291), + 81: uint16(9675), + 82: uint16(9679), + 83: uint16(9651), + 84: uint16(9650), + 85: uint16(9678), + 86: uint16(9734), + 87: uint16(9733), + 88: uint16(9671), + 89: uint16(9670), + 90: uint16(9633), + 91: uint16(9632), + 92: uint16(9661), + 93: uint16(9660), + 94: uint16(12963), + 95: uint16(8453), + 96: uint16(175), + 97: uint16(65507), + 98: uint16(65343), + 99: uint16(717), + 100: uint16(65097), + 101: uint16(65098), + 102: uint16(65101), + 103: uint16(65102), + 104: uint16(65099), + 105: uint16(65100), + 106: uint16(65119), + 107: uint16(65120), + 108: uint16(65121), + 109: uint16(65291), + 110: uint16(65293), + 111: uint16(215), + 112: uint16(247), + 113: uint16(177), + 114: uint16(8730), + 115: uint16(65308), + 116: uint16(65310), + 117: uint16(65309), + 118: uint16(8806), + 119: uint16(8807), + 120: uint16(8800), + 121: uint16(8734), + 122: uint16(8786), + 123: uint16(8801), + 124: uint16(65122), + 125: uint16(65123), + 126: uint16(65124), + 127: uint16(65125), + 128: uint16(65126), + 129: uint16(65374), + 130: uint16(8745), + 131: uint16(8746), + 132: uint16(8869), + 133: uint16(8736), + 134: uint16(8735), + 135: uint16(8895), + 136: uint16(13266), + 137: uint16(13265), + 138: uint16(8747), + 139: uint16(8750), + 140: uint16(8757), + 141: uint16(8756), + 142: uint16(9792), + 143: uint16(9794), + 144: uint16(8853), + 145: uint16(8857), + 146: uint16(8593), + 147: uint16(8595), + 148: uint16(8592), + 149: uint16(8594), + 150: uint16(8598), + 151: uint16(8599), + 152: uint16(8601), + 153: uint16(8600), + 154: uint16(8741), + 155: uint16(8739), + 156: uint16(65295), + }, + 1: { + 0: uint16(65340), + 1: uint16(8725), + 2: uint16(65128), + 3: uint16(65284), + 4: uint16(65509), + 5: uint16(12306), + 6: uint16(65504), + 7: uint16(65505), + 8: uint16(65285), + 9: uint16(65312), + 10: uint16(8451), + 11: uint16(8457), + 12: uint16(65129), + 13: uint16(65130), + 14: uint16(65131), + 15: uint16(13269), + 16: uint16(13212), + 17: uint16(13213), + 18: uint16(13214), + 19: uint16(13262), + 20: uint16(13217), + 21: uint16(13198), + 22: uint16(13199), + 23: uint16(13252), + 24: uint16(176), + 25: uint16(20825), + 26: uint16(20827), + 27: uint16(20830), + 28: uint16(20829), + 29: uint16(20833), + 30: uint16(20835), + 31: uint16(21991), + 32: uint16(29929), + 33: uint16(31950), + 34: uint16(9601), + 35: uint16(9602), + 36: uint16(9603), + 37: uint16(9604), + 38: uint16(9605), + 39: uint16(9606), + 40: uint16(9607), + 41: uint16(9608), + 42: uint16(9615), + 43: uint16(9614), + 44: uint16(9613), + 45: uint16(9612), + 46: uint16(9611), + 47: uint16(9610), + 48: uint16(9609), + 49: uint16(9532), + 50: uint16(9524), + 51: uint16(9516), + 52: uint16(9508), + 53: uint16(9500), + 54: uint16(9620), + 55: uint16(9472), + 56: uint16(9474), + 57: uint16(9621), + 58: uint16(9484), + 59: uint16(9488), + 60: uint16(9492), + 61: uint16(9496), + 62: uint16(9581), + 63: uint16(9582), + 64: uint16(9584), + 65: uint16(9583), + 66: uint16(9552), + 67: uint16(9566), + 68: uint16(9578), + 69: uint16(9569), + 70: uint16(9698), + 71: uint16(9699), + 72: uint16(9701), + 73: uint16(9700), + 74: uint16(9585), + 75: uint16(9586), + 76: uint16(9587), + 77: uint16(65296), + 78: uint16(65297), + 79: uint16(65298), + 80: uint16(65299), + 81: uint16(65300), + 82: uint16(65301), + 83: uint16(65302), + 84: uint16(65303), + 85: uint16(65304), + 86: uint16(65305), + 87: uint16(8544), + 88: uint16(8545), + 89: uint16(8546), + 90: uint16(8547), + 91: uint16(8548), + 92: uint16(8549), + 93: uint16(8550), + 94: uint16(8551), + 95: uint16(8552), + 96: uint16(8553), + 97: uint16(12321), + 98: uint16(12322), + 99: uint16(12323), + 100: uint16(12324), + 101: uint16(12325), + 102: uint16(12326), + 103: uint16(12327), + 104: uint16(12328), + 105: uint16(12329), + 106: uint16(21313), + 107: uint16(21316), + 108: uint16(21317), + 109: uint16(65313), + 110: uint16(65314), + 111: uint16(65315), + 112: uint16(65316), + 113: uint16(65317), + 114: uint16(65318), + 115: uint16(65319), + 116: uint16(65320), + 117: uint16(65321), + 118: uint16(65322), + 119: uint16(65323), + 120: uint16(65324), + 121: uint16(65325), + 122: uint16(65326), + 123: uint16(65327), + 124: uint16(65328), + 125: uint16(65329), + 126: uint16(65330), + 127: uint16(65331), + 128: uint16(65332), + 129: uint16(65333), + 130: uint16(65334), + 131: uint16(65335), + 132: uint16(65336), + 133: uint16(65337), + 134: uint16(65338), + 135: uint16(65345), + 136: uint16(65346), + 137: uint16(65347), + 138: uint16(65348), + 139: uint16(65349), + 140: uint16(65350), + 141: uint16(65351), + 142: uint16(65352), + 143: uint16(65353), + 144: uint16(65354), + 145: uint16(65355), + 146: uint16(65356), + 147: uint16(65357), + 148: uint16(65358), + 149: uint16(65359), + 150: uint16(65360), + 151: uint16(65361), + 152: uint16(65362), + 153: uint16(65363), + 154: uint16(65364), + 155: uint16(65365), + 156: uint16(65366), + }, + 2: { + 0: uint16(65367), + 1: uint16(65368), + 2: uint16(65369), + 3: uint16(65370), + 4: uint16(913), + 5: uint16(914), + 6: uint16(915), + 7: uint16(916), + 8: uint16(917), + 9: uint16(918), + 10: uint16(919), + 11: uint16(920), + 12: uint16(921), + 13: uint16(922), + 14: uint16(923), + 15: uint16(924), + 16: uint16(925), + 17: uint16(926), + 18: uint16(927), + 19: uint16(928), + 20: uint16(929), + 21: uint16(931), + 22: uint16(932), + 23: uint16(933), + 24: uint16(934), + 25: uint16(935), + 26: uint16(936), + 27: uint16(937), + 28: uint16(945), + 29: uint16(946), + 30: uint16(947), + 31: uint16(948), + 32: uint16(949), + 33: uint16(950), + 34: uint16(951), + 35: uint16(952), + 36: uint16(953), + 37: uint16(954), + 38: uint16(955), + 39: uint16(956), + 40: uint16(957), + 41: uint16(958), + 42: uint16(959), + 43: uint16(960), + 44: uint16(961), + 45: uint16(963), + 46: uint16(964), + 47: uint16(965), + 48: uint16(966), + 49: uint16(967), + 50: uint16(968), + 51: uint16(969), + 52: uint16(12549), + 53: uint16(12550), + 54: uint16(12551), + 55: uint16(12552), + 56: uint16(12553), + 57: uint16(12554), + 58: uint16(12555), + 59: uint16(12556), + 60: uint16(12557), + 61: uint16(12558), + 62: uint16(12559), + 63: uint16(12560), + 64: uint16(12561), + 65: uint16(12562), + 66: uint16(12563), + 67: uint16(12564), + 68: uint16(12565), + 69: uint16(12566), + 70: uint16(12567), + 71: uint16(12568), + 72: uint16(12569), + 73: uint16(12570), + 74: uint16(12571), + 75: uint16(12572), + 76: uint16(12573), + 77: uint16(12574), + 78: uint16(12575), + 79: uint16(12576), + 80: uint16(12577), + 81: uint16(12578), + 82: uint16(12579), + 83: uint16(12580), + 84: uint16(12581), + 85: uint16(12582), + 86: uint16(12583), + 87: uint16(12584), + 88: uint16(12585), + 89: uint16(729), + 90: uint16(713), + 91: uint16(714), + 92: uint16(711), + 93: uint16(715), + 94: uint16(9216), + 95: uint16(9217), + 96: uint16(9218), + 97: uint16(9219), + 98: uint16(9220), + 99: uint16(9221), + 100: uint16(9222), + 101: uint16(9223), + 102: uint16(9224), + 103: uint16(9225), + 104: uint16(9226), + 105: uint16(9227), + 106: uint16(9228), + 107: uint16(9229), + 108: uint16(9230), + 109: uint16(9231), + 110: uint16(9232), + 111: uint16(9233), + 112: uint16(9234), + 113: uint16(9235), + 114: uint16(9236), + 115: uint16(9237), + 116: uint16(9238), + 117: uint16(9239), + 118: uint16(9240), + 119: uint16(9241), + 120: uint16(9242), + 121: uint16(9243), + 122: uint16(9244), + 123: uint16(9245), + 124: uint16(9246), + 125: uint16(9247), + 126: uint16(9249), + 127: uint16(8364), + }, + 3: { + 0: uint16(19968), + 1: uint16(20057), + 2: uint16(19969), + 3: uint16(19971), + 4: uint16(20035), + 5: uint16(20061), + 6: uint16(20102), + 7: uint16(20108), + 8: uint16(20154), + 9: uint16(20799), + 10: uint16(20837), + 11: uint16(20843), + 12: uint16(20960), + 13: uint16(20992), + 14: uint16(20993), + 15: uint16(21147), + 16: uint16(21269), + 17: uint16(21313), + 18: uint16(21340), + 19: uint16(21448), + 20: uint16(19977), + 21: uint16(19979), + 22: uint16(19976), + 23: uint16(19978), + 24: uint16(20011), + 25: uint16(20024), + 26: uint16(20961), + 27: uint16(20037), + 28: uint16(20040), + 29: uint16(20063), + 30: uint16(20062), + 31: uint16(20110), + 32: uint16(20129), + 33: uint16(20800), + 34: uint16(20995), + 35: uint16(21242), + 36: uint16(21315), + 37: uint16(21449), + 38: uint16(21475), + 39: uint16(22303), + 40: uint16(22763), + 41: uint16(22805), + 42: uint16(22823), + 43: uint16(22899), + 44: uint16(23376), + 45: uint16(23377), + 46: uint16(23379), + 47: uint16(23544), + 48: uint16(23567), + 49: uint16(23586), + 50: uint16(23608), + 51: uint16(23665), + 52: uint16(24029), + 53: uint16(24037), + 54: uint16(24049), + 55: uint16(24050), + 56: uint16(24051), + 57: uint16(24062), + 58: uint16(24178), + 59: uint16(24318), + 60: uint16(24331), + 61: uint16(24339), + 62: uint16(25165), + 63: uint16(19985), + 64: uint16(19984), + 65: uint16(19981), + 66: uint16(20013), + 67: uint16(20016), + 68: uint16(20025), + 69: uint16(20043), + 70: uint16(23609), + 71: uint16(20104), + 72: uint16(20113), + 73: uint16(20117), + 74: uint16(20114), + 75: uint16(20116), + 76: uint16(20130), + 77: uint16(20161), + 78: uint16(20160), + 79: uint16(20163), + 80: uint16(20166), + 81: uint16(20167), + 82: uint16(20173), + 83: uint16(20170), + 84: uint16(20171), + 85: uint16(20164), + 86: uint16(20803), + 87: uint16(20801), + 88: uint16(20839), + 89: uint16(20845), + 90: uint16(20846), + 91: uint16(20844), + 92: uint16(20887), + 93: uint16(20982), + 94: uint16(20998), + 95: uint16(20999), + 96: uint16(21000), + 97: uint16(21243), + 98: uint16(21246), + 99: uint16(21247), + 100: uint16(21270), + 101: uint16(21305), + 102: uint16(21320), + 103: uint16(21319), + 104: uint16(21317), + 105: uint16(21342), + 106: uint16(21380), + 107: uint16(21451), + 108: uint16(21450), + 109: uint16(21453), + 110: uint16(22764), + 111: uint16(22825), + 112: uint16(22827), + 113: uint16(22826), + 114: uint16(22829), + 115: uint16(23380), + 116: uint16(23569), + 117: uint16(23588), + 118: uint16(23610), + 119: uint16(23663), + 120: uint16(24052), + 121: uint16(24187), + 122: uint16(24319), + 123: uint16(24340), + 124: uint16(24341), + 125: uint16(24515), + 126: uint16(25096), + 127: uint16(25142), + 128: uint16(25163), + 129: uint16(25166), + 130: uint16(25903), + 131: uint16(25991), + 132: uint16(26007), + 133: uint16(26020), + 134: uint16(26041), + 135: uint16(26085), + 136: uint16(26352), + 137: uint16(26376), + 138: uint16(26408), + 139: uint16(27424), + 140: uint16(27490), + 141: uint16(27513), + 142: uint16(27595), + 143: uint16(27604), + 144: uint16(27611), + 145: uint16(27663), + 146: uint16(27700), + 147: uint16(28779), + 148: uint16(29226), + 149: uint16(29238), + 150: uint16(29243), + 151: uint16(29255), + 152: uint16(29273), + 153: uint16(29275), + 154: uint16(29356), + 155: uint16(29579), + 156: uint16(19993), + }, + 4: { + 0: uint16(19990), + 1: uint16(19989), + 2: uint16(19988), + 3: uint16(19992), + 4: uint16(20027), + 5: uint16(20045), + 6: uint16(20047), + 7: uint16(20046), + 8: uint16(20197), + 9: uint16(20184), + 10: uint16(20180), + 11: uint16(20181), + 12: uint16(20182), + 13: uint16(20183), + 14: uint16(20195), + 15: uint16(20196), + 16: uint16(20185), + 17: uint16(20190), + 18: uint16(20805), + 19: uint16(20804), + 20: uint16(20873), + 21: uint16(20874), + 22: uint16(20908), + 23: uint16(20985), + 24: uint16(20986), + 25: uint16(20984), + 26: uint16(21002), + 27: uint16(21152), + 28: uint16(21151), + 29: uint16(21253), + 30: uint16(21254), + 31: uint16(21271), + 32: uint16(21277), + 33: uint16(20191), + 34: uint16(21322), + 35: uint16(21321), + 36: uint16(21345), + 37: uint16(21344), + 38: uint16(21359), + 39: uint16(21358), + 40: uint16(21435), + 41: uint16(21487), + 42: uint16(21476), + 43: uint16(21491), + 44: uint16(21484), + 45: uint16(21486), + 46: uint16(21481), + 47: uint16(21480), + 48: uint16(21500), + 49: uint16(21496), + 50: uint16(21493), + 51: uint16(21483), + 52: uint16(21478), + 53: uint16(21482), + 54: uint16(21490), + 55: uint16(21489), + 56: uint16(21488), + 57: uint16(21477), + 58: uint16(21485), + 59: uint16(21499), + 60: uint16(22235), + 61: uint16(22234), + 62: uint16(22806), + 63: uint16(22830), + 64: uint16(22833), + 65: uint16(22900), + 66: uint16(22902), + 67: uint16(23381), + 68: uint16(23427), + 69: uint16(23612), + 70: uint16(24040), + 71: uint16(24039), + 72: uint16(24038), + 73: uint16(24066), + 74: uint16(24067), + 75: uint16(24179), + 76: uint16(24188), + 77: uint16(24321), + 78: uint16(24344), + 79: uint16(24343), + 80: uint16(24517), + 81: uint16(25098), + 82: uint16(25171), + 83: uint16(25172), + 84: uint16(25170), + 85: uint16(25169), + 86: uint16(26021), + 87: uint16(26086), + 88: uint16(26414), + 89: uint16(26412), + 90: uint16(26410), + 91: uint16(26411), + 92: uint16(26413), + 93: uint16(27491), + 94: uint16(27597), + 95: uint16(27665), + 96: uint16(27664), + 97: uint16(27704), + 98: uint16(27713), + 99: uint16(27712), + 100: uint16(27710), + 101: uint16(29359), + 102: uint16(29572), + 103: uint16(29577), + 104: uint16(29916), + 105: uint16(29926), + 106: uint16(29976), + 107: uint16(29983), + 108: uint16(29992), + 109: uint16(29993), + 110: uint16(30000), + 111: uint16(30001), + 112: uint16(30002), + 113: uint16(30003), + 114: uint16(30091), + 115: uint16(30333), + 116: uint16(30382), + 117: uint16(30399), + 118: uint16(30446), + 119: uint16(30683), + 120: uint16(30690), + 121: uint16(30707), + 122: uint16(31034), + 123: uint16(31166), + 124: uint16(31348), + 125: uint16(31435), + 126: uint16(19998), + 127: uint16(19999), + 128: uint16(20050), + 129: uint16(20051), + 130: uint16(20073), + 131: uint16(20121), + 132: uint16(20132), + 133: uint16(20134), + 134: uint16(20133), + 135: uint16(20223), + 136: uint16(20233), + 137: uint16(20249), + 138: uint16(20234), + 139: uint16(20245), + 140: uint16(20237), + 141: uint16(20240), + 142: uint16(20241), + 143: uint16(20239), + 144: uint16(20210), + 145: uint16(20214), + 146: uint16(20219), + 147: uint16(20208), + 148: uint16(20211), + 149: uint16(20221), + 150: uint16(20225), + 151: uint16(20235), + 152: uint16(20809), + 153: uint16(20807), + 154: uint16(20806), + 155: uint16(20808), + 156: uint16(20840), + }, + 5: { + 0: uint16(20849), + 1: uint16(20877), + 2: uint16(20912), + 3: uint16(21015), + 4: uint16(21009), + 5: uint16(21010), + 6: uint16(21006), + 7: uint16(21014), + 8: uint16(21155), + 9: uint16(21256), + 10: uint16(21281), + 11: uint16(21280), + 12: uint16(21360), + 13: uint16(21361), + 14: uint16(21513), + 15: uint16(21519), + 16: uint16(21516), + 17: uint16(21514), + 18: uint16(21520), + 19: uint16(21505), + 20: uint16(21515), + 21: uint16(21508), + 22: uint16(21521), + 23: uint16(21517), + 24: uint16(21512), + 25: uint16(21507), + 26: uint16(21518), + 27: uint16(21510), + 28: uint16(21522), + 29: uint16(22240), + 30: uint16(22238), + 31: uint16(22237), + 32: uint16(22323), + 33: uint16(22320), + 34: uint16(22312), + 35: uint16(22317), + 36: uint16(22316), + 37: uint16(22319), + 38: uint16(22313), + 39: uint16(22809), + 40: uint16(22810), + 41: uint16(22839), + 42: uint16(22840), + 43: uint16(22916), + 44: uint16(22904), + 45: uint16(22915), + 46: uint16(22909), + 47: uint16(22905), + 48: uint16(22914), + 49: uint16(22913), + 50: uint16(23383), + 51: uint16(23384), + 52: uint16(23431), + 53: uint16(23432), + 54: uint16(23429), + 55: uint16(23433), + 56: uint16(23546), + 57: uint16(23574), + 58: uint16(23673), + 59: uint16(24030), + 60: uint16(24070), + 61: uint16(24182), + 62: uint16(24180), + 63: uint16(24335), + 64: uint16(24347), + 65: uint16(24537), + 66: uint16(24534), + 67: uint16(25102), + 68: uint16(25100), + 69: uint16(25101), + 70: uint16(25104), + 71: uint16(25187), + 72: uint16(25179), + 73: uint16(25176), + 74: uint16(25910), + 75: uint16(26089), + 76: uint16(26088), + 77: uint16(26092), + 78: uint16(26093), + 79: uint16(26354), + 80: uint16(26355), + 81: uint16(26377), + 82: uint16(26429), + 83: uint16(26420), + 84: uint16(26417), + 85: uint16(26421), + 86: uint16(27425), + 87: uint16(27492), + 88: uint16(27515), + 89: uint16(27670), + 90: uint16(27741), + 91: uint16(27735), + 92: uint16(27737), + 93: uint16(27743), + 94: uint16(27744), + 95: uint16(27728), + 96: uint16(27733), + 97: uint16(27745), + 98: uint16(27739), + 99: uint16(27725), + 100: uint16(27726), + 101: uint16(28784), + 102: uint16(29279), + 103: uint16(29277), + 104: uint16(30334), + 105: uint16(31481), + 106: uint16(31859), + 107: uint16(31992), + 108: uint16(32566), + 109: uint16(32650), + 110: uint16(32701), + 111: uint16(32769), + 112: uint16(32771), + 113: uint16(32780), + 114: uint16(32786), + 115: uint16(32819), + 116: uint16(32895), + 117: uint16(32905), + 118: uint16(32907), + 119: uint16(32908), + 120: uint16(33251), + 121: uint16(33258), + 122: uint16(33267), + 123: uint16(33276), + 124: uint16(33292), + 125: uint16(33307), + 126: uint16(33311), + 127: uint16(33390), + 128: uint16(33394), + 129: uint16(33406), + 130: uint16(34411), + 131: uint16(34880), + 132: uint16(34892), + 133: uint16(34915), + 134: uint16(35199), + 135: uint16(38433), + 136: uint16(20018), + 137: uint16(20136), + 138: uint16(20301), + 139: uint16(20303), + 140: uint16(20295), + 141: uint16(20311), + 142: uint16(20318), + 143: uint16(20276), + 144: uint16(20315), + 145: uint16(20309), + 146: uint16(20272), + 147: uint16(20304), + 148: uint16(20305), + 149: uint16(20285), + 150: uint16(20282), + 151: uint16(20280), + 152: uint16(20291), + 153: uint16(20308), + 154: uint16(20284), + 155: uint16(20294), + 156: uint16(20323), + }, + 6: { + 0: uint16(20316), + 1: uint16(20320), + 2: uint16(20271), + 3: uint16(20302), + 4: uint16(20278), + 5: uint16(20313), + 6: uint16(20317), + 7: uint16(20296), + 8: uint16(20314), + 9: uint16(20812), + 10: uint16(20811), + 11: uint16(20813), + 12: uint16(20853), + 13: uint16(20918), + 14: uint16(20919), + 15: uint16(21029), + 16: uint16(21028), + 17: uint16(21033), + 18: uint16(21034), + 19: uint16(21032), + 20: uint16(21163), + 21: uint16(21161), + 22: uint16(21162), + 23: uint16(21164), + 24: uint16(21283), + 25: uint16(21363), + 26: uint16(21365), + 27: uint16(21533), + 28: uint16(21549), + 29: uint16(21534), + 30: uint16(21566), + 31: uint16(21542), + 32: uint16(21582), + 33: uint16(21543), + 34: uint16(21574), + 35: uint16(21571), + 36: uint16(21555), + 37: uint16(21576), + 38: uint16(21570), + 39: uint16(21531), + 40: uint16(21545), + 41: uint16(21578), + 42: uint16(21561), + 43: uint16(21563), + 44: uint16(21560), + 45: uint16(21550), + 46: uint16(21557), + 47: uint16(21558), + 48: uint16(21536), + 49: uint16(21564), + 50: uint16(21568), + 51: uint16(21553), + 52: uint16(21547), + 53: uint16(21535), + 54: uint16(21548), + 55: uint16(22250), + 56: uint16(22256), + 57: uint16(22244), + 58: uint16(22251), + 59: uint16(22346), + 60: uint16(22353), + 61: uint16(22336), + 62: uint16(22349), + 63: uint16(22343), + 64: uint16(22350), + 65: uint16(22334), + 66: uint16(22352), + 67: uint16(22351), + 68: uint16(22331), + 69: uint16(22767), + 70: uint16(22846), + 71: uint16(22941), + 72: uint16(22930), + 73: uint16(22952), + 74: uint16(22942), + 75: uint16(22947), + 76: uint16(22937), + 77: uint16(22934), + 78: uint16(22925), + 79: uint16(22948), + 80: uint16(22931), + 81: uint16(22922), + 82: uint16(22949), + 83: uint16(23389), + 84: uint16(23388), + 85: uint16(23386), + 86: uint16(23387), + 87: uint16(23436), + 88: uint16(23435), + 89: uint16(23439), + 90: uint16(23596), + 91: uint16(23616), + 92: uint16(23617), + 93: uint16(23615), + 94: uint16(23614), + 95: uint16(23696), + 96: uint16(23697), + 97: uint16(23700), + 98: uint16(23692), + 99: uint16(24043), + 100: uint16(24076), + 101: uint16(24207), + 102: uint16(24199), + 103: uint16(24202), + 104: uint16(24311), + 105: uint16(24324), + 106: uint16(24351), + 107: uint16(24420), + 108: uint16(24418), + 109: uint16(24439), + 110: uint16(24441), + 111: uint16(24536), + 112: uint16(24524), + 113: uint16(24535), + 114: uint16(24525), + 115: uint16(24561), + 116: uint16(24555), + 117: uint16(24568), + 118: uint16(24554), + 119: uint16(25106), + 120: uint16(25105), + 121: uint16(25220), + 122: uint16(25239), + 123: uint16(25238), + 124: uint16(25216), + 125: uint16(25206), + 126: uint16(25225), + 127: uint16(25197), + 128: uint16(25226), + 129: uint16(25212), + 130: uint16(25214), + 131: uint16(25209), + 132: uint16(25203), + 133: uint16(25234), + 134: uint16(25199), + 135: uint16(25240), + 136: uint16(25198), + 137: uint16(25237), + 138: uint16(25235), + 139: uint16(25233), + 140: uint16(25222), + 141: uint16(25913), + 142: uint16(25915), + 143: uint16(25912), + 144: uint16(26097), + 145: uint16(26356), + 146: uint16(26463), + 147: uint16(26446), + 148: uint16(26447), + 149: uint16(26448), + 150: uint16(26449), + 151: uint16(26460), + 152: uint16(26454), + 153: uint16(26462), + 154: uint16(26441), + 155: uint16(26438), + 156: uint16(26464), + }, + 7: { + 0: uint16(26451), + 1: uint16(26455), + 2: uint16(27493), + 3: uint16(27599), + 4: uint16(27714), + 5: uint16(27742), + 6: uint16(27801), + 7: uint16(27777), + 8: uint16(27784), + 9: uint16(27785), + 10: uint16(27781), + 11: uint16(27803), + 12: uint16(27754), + 13: uint16(27770), + 14: uint16(27792), + 15: uint16(27760), + 16: uint16(27788), + 17: uint16(27752), + 18: uint16(27798), + 19: uint16(27794), + 20: uint16(27773), + 21: uint16(27779), + 22: uint16(27762), + 23: uint16(27774), + 24: uint16(27764), + 25: uint16(27782), + 26: uint16(27766), + 27: uint16(27789), + 28: uint16(27796), + 29: uint16(27800), + 30: uint16(27778), + 31: uint16(28790), + 32: uint16(28796), + 33: uint16(28797), + 34: uint16(28792), + 35: uint16(29282), + 36: uint16(29281), + 37: uint16(29280), + 38: uint16(29380), + 39: uint16(29378), + 40: uint16(29590), + 41: uint16(29996), + 42: uint16(29995), + 43: uint16(30007), + 44: uint16(30008), + 45: uint16(30338), + 46: uint16(30447), + 47: uint16(30691), + 48: uint16(31169), + 49: uint16(31168), + 50: uint16(31167), + 51: uint16(31350), + 52: uint16(31995), + 53: uint16(32597), + 54: uint16(32918), + 55: uint16(32915), + 56: uint16(32925), + 57: uint16(32920), + 58: uint16(32923), + 59: uint16(32922), + 60: uint16(32946), + 61: uint16(33391), + 62: uint16(33426), + 63: uint16(33419), + 64: uint16(33421), + 65: uint16(35211), + 66: uint16(35282), + 67: uint16(35328), + 68: uint16(35895), + 69: uint16(35910), + 70: uint16(35925), + 71: uint16(35997), + 72: uint16(36196), + 73: uint16(36208), + 74: uint16(36275), + 75: uint16(36523), + 76: uint16(36554), + 77: uint16(36763), + 78: uint16(36784), + 79: uint16(36802), + 80: uint16(36806), + 81: uint16(36805), + 82: uint16(36804), + 83: uint16(24033), + 84: uint16(37009), + 85: uint16(37026), + 86: uint16(37034), + 87: uint16(37030), + 88: uint16(37027), + 89: uint16(37193), + 90: uint16(37318), + 91: uint16(37324), + 92: uint16(38450), + 93: uint16(38446), + 94: uint16(38449), + 95: uint16(38442), + 96: uint16(38444), + 97: uint16(20006), + 98: uint16(20054), + 99: uint16(20083), + 100: uint16(20107), + 101: uint16(20123), + 102: uint16(20126), + 103: uint16(20139), + 104: uint16(20140), + 105: uint16(20335), + 106: uint16(20381), + 107: uint16(20365), + 108: uint16(20339), + 109: uint16(20351), + 110: uint16(20332), + 111: uint16(20379), + 112: uint16(20363), + 113: uint16(20358), + 114: uint16(20355), + 115: uint16(20336), + 116: uint16(20341), + 117: uint16(20360), + 118: uint16(20329), + 119: uint16(20347), + 120: uint16(20374), + 121: uint16(20350), + 122: uint16(20367), + 123: uint16(20369), + 124: uint16(20346), + 125: uint16(20820), + 126: uint16(20818), + 127: uint16(20821), + 128: uint16(20841), + 129: uint16(20855), + 130: uint16(20854), + 131: uint16(20856), + 132: uint16(20925), + 133: uint16(20989), + 134: uint16(21051), + 135: uint16(21048), + 136: uint16(21047), + 137: uint16(21050), + 138: uint16(21040), + 139: uint16(21038), + 140: uint16(21046), + 141: uint16(21057), + 142: uint16(21182), + 143: uint16(21179), + 144: uint16(21330), + 145: uint16(21332), + 146: uint16(21331), + 147: uint16(21329), + 148: uint16(21350), + 149: uint16(21367), + 150: uint16(21368), + 151: uint16(21369), + 152: uint16(21462), + 153: uint16(21460), + 154: uint16(21463), + 155: uint16(21619), + 156: uint16(21621), + }, + 8: { + 0: uint16(21654), + 1: uint16(21624), + 2: uint16(21653), + 3: uint16(21632), + 4: uint16(21627), + 5: uint16(21623), + 6: uint16(21636), + 7: uint16(21650), + 8: uint16(21638), + 9: uint16(21628), + 10: uint16(21648), + 11: uint16(21617), + 12: uint16(21622), + 13: uint16(21644), + 14: uint16(21658), + 15: uint16(21602), + 16: uint16(21608), + 17: uint16(21643), + 18: uint16(21629), + 19: uint16(21646), + 20: uint16(22266), + 21: uint16(22403), + 22: uint16(22391), + 23: uint16(22378), + 24: uint16(22377), + 25: uint16(22369), + 26: uint16(22374), + 27: uint16(22372), + 28: uint16(22396), + 29: uint16(22812), + 30: uint16(22857), + 31: uint16(22855), + 32: uint16(22856), + 33: uint16(22852), + 34: uint16(22868), + 35: uint16(22974), + 36: uint16(22971), + 37: uint16(22996), + 38: uint16(22969), + 39: uint16(22958), + 40: uint16(22993), + 41: uint16(22982), + 42: uint16(22992), + 43: uint16(22989), + 44: uint16(22987), + 45: uint16(22995), + 46: uint16(22986), + 47: uint16(22959), + 48: uint16(22963), + 49: uint16(22994), + 50: uint16(22981), + 51: uint16(23391), + 52: uint16(23396), + 53: uint16(23395), + 54: uint16(23447), + 55: uint16(23450), + 56: uint16(23448), + 57: uint16(23452), + 58: uint16(23449), + 59: uint16(23451), + 60: uint16(23578), + 61: uint16(23624), + 62: uint16(23621), + 63: uint16(23622), + 64: uint16(23735), + 65: uint16(23713), + 66: uint16(23736), + 67: uint16(23721), + 68: uint16(23723), + 69: uint16(23729), + 70: uint16(23731), + 71: uint16(24088), + 72: uint16(24090), + 73: uint16(24086), + 74: uint16(24085), + 75: uint16(24091), + 76: uint16(24081), + 77: uint16(24184), + 78: uint16(24218), + 79: uint16(24215), + 80: uint16(24220), + 81: uint16(24213), + 82: uint16(24214), + 83: uint16(24310), + 84: uint16(24358), + 85: uint16(24359), + 86: uint16(24361), + 87: uint16(24448), + 88: uint16(24449), + 89: uint16(24447), + 90: uint16(24444), + 91: uint16(24541), + 92: uint16(24544), + 93: uint16(24573), + 94: uint16(24565), + 95: uint16(24575), + 96: uint16(24591), + 97: uint16(24596), + 98: uint16(24623), + 99: uint16(24629), + 100: uint16(24598), + 101: uint16(24618), + 102: uint16(24597), + 103: uint16(24609), + 104: uint16(24615), + 105: uint16(24617), + 106: uint16(24619), + 107: uint16(24603), + 108: uint16(25110), + 109: uint16(25109), + 110: uint16(25151), + 111: uint16(25150), + 112: uint16(25152), + 113: uint16(25215), + 114: uint16(25289), + 115: uint16(25292), + 116: uint16(25284), + 117: uint16(25279), + 118: uint16(25282), + 119: uint16(25273), + 120: uint16(25298), + 121: uint16(25307), + 122: uint16(25259), + 123: uint16(25299), + 124: uint16(25300), + 125: uint16(25291), + 126: uint16(25288), + 127: uint16(25256), + 128: uint16(25277), + 129: uint16(25276), + 130: uint16(25296), + 131: uint16(25305), + 132: uint16(25287), + 133: uint16(25293), + 134: uint16(25269), + 135: uint16(25306), + 136: uint16(25265), + 137: uint16(25304), + 138: uint16(25302), + 139: uint16(25303), + 140: uint16(25286), + 141: uint16(25260), + 142: uint16(25294), + 143: uint16(25918), + 144: uint16(26023), + 145: uint16(26044), + 146: uint16(26106), + 147: uint16(26132), + 148: uint16(26131), + 149: uint16(26124), + 150: uint16(26118), + 151: uint16(26114), + 152: uint16(26126), + 153: uint16(26112), + 154: uint16(26127), + 155: uint16(26133), + 156: uint16(26122), + }, + 9: { + 0: uint16(26119), + 1: uint16(26381), + 2: uint16(26379), + 3: uint16(26477), + 4: uint16(26507), + 5: uint16(26517), + 6: uint16(26481), + 7: uint16(26524), + 8: uint16(26483), + 9: uint16(26487), + 10: uint16(26503), + 11: uint16(26525), + 12: uint16(26519), + 13: uint16(26479), + 14: uint16(26480), + 15: uint16(26495), + 16: uint16(26505), + 17: uint16(26494), + 18: uint16(26512), + 19: uint16(26485), + 20: uint16(26522), + 21: uint16(26515), + 22: uint16(26492), + 23: uint16(26474), + 24: uint16(26482), + 25: uint16(27427), + 26: uint16(27494), + 27: uint16(27495), + 28: uint16(27519), + 29: uint16(27667), + 30: uint16(27675), + 31: uint16(27875), + 32: uint16(27880), + 33: uint16(27891), + 34: uint16(27825), + 35: uint16(27852), + 36: uint16(27877), + 37: uint16(27827), + 38: uint16(27837), + 39: uint16(27838), + 40: uint16(27836), + 41: uint16(27874), + 42: uint16(27819), + 43: uint16(27861), + 44: uint16(27859), + 45: uint16(27832), + 46: uint16(27844), + 47: uint16(27833), + 48: uint16(27841), + 49: uint16(27822), + 50: uint16(27863), + 51: uint16(27845), + 52: uint16(27889), + 53: uint16(27839), + 54: uint16(27835), + 55: uint16(27873), + 56: uint16(27867), + 57: uint16(27850), + 58: uint16(27820), + 59: uint16(27887), + 60: uint16(27868), + 61: uint16(27862), + 62: uint16(27872), + 63: uint16(28821), + 64: uint16(28814), + 65: uint16(28818), + 66: uint16(28810), + 67: uint16(28825), + 68: uint16(29228), + 69: uint16(29229), + 70: uint16(29240), + 71: uint16(29256), + 72: uint16(29287), + 73: uint16(29289), + 74: uint16(29376), + 75: uint16(29390), + 76: uint16(29401), + 77: uint16(29399), + 78: uint16(29392), + 79: uint16(29609), + 80: uint16(29608), + 81: uint16(29599), + 82: uint16(29611), + 83: uint16(29605), + 84: uint16(30013), + 85: uint16(30109), + 86: uint16(30105), + 87: uint16(30106), + 88: uint16(30340), + 89: uint16(30402), + 90: uint16(30450), + 91: uint16(30452), + 92: uint16(30693), + 93: uint16(30717), + 94: uint16(31038), + 95: uint16(31040), + 96: uint16(31041), + 97: uint16(31177), + 98: uint16(31176), + 99: uint16(31354), + 100: uint16(31353), + 101: uint16(31482), + 102: uint16(31998), + 103: uint16(32596), + 104: uint16(32652), + 105: uint16(32651), + 106: uint16(32773), + 107: uint16(32954), + 108: uint16(32933), + 109: uint16(32930), + 110: uint16(32945), + 111: uint16(32929), + 112: uint16(32939), + 113: uint16(32937), + 114: uint16(32948), + 115: uint16(32938), + 116: uint16(32943), + 117: uint16(33253), + 118: uint16(33278), + 119: uint16(33293), + 120: uint16(33459), + 121: uint16(33437), + 122: uint16(33433), + 123: uint16(33453), + 124: uint16(33469), + 125: uint16(33439), + 126: uint16(33465), + 127: uint16(33457), + 128: uint16(33452), + 129: uint16(33445), + 130: uint16(33455), + 131: uint16(33464), + 132: uint16(33443), + 133: uint16(33456), + 134: uint16(33470), + 135: uint16(33463), + 136: uint16(34382), + 137: uint16(34417), + 138: uint16(21021), + 139: uint16(34920), + 140: uint16(36555), + 141: uint16(36814), + 142: uint16(36820), + 143: uint16(36817), + 144: uint16(37045), + 145: uint16(37048), + 146: uint16(37041), + 147: uint16(37046), + 148: uint16(37319), + 149: uint16(37329), + 150: uint16(38263), + 151: uint16(38272), + 152: uint16(38428), + 153: uint16(38464), + 154: uint16(38463), + 155: uint16(38459), + 156: uint16(38468), + }, + 10: { + 0: uint16(38466), + 1: uint16(38585), + 2: uint16(38632), + 3: uint16(38738), + 4: uint16(38750), + 5: uint16(20127), + 6: uint16(20141), + 7: uint16(20142), + 8: uint16(20449), + 9: uint16(20405), + 10: uint16(20399), + 11: uint16(20415), + 12: uint16(20448), + 13: uint16(20433), + 14: uint16(20431), + 15: uint16(20445), + 16: uint16(20419), + 17: uint16(20406), + 18: uint16(20440), + 19: uint16(20447), + 20: uint16(20426), + 21: uint16(20439), + 22: uint16(20398), + 23: uint16(20432), + 24: uint16(20420), + 25: uint16(20418), + 26: uint16(20442), + 27: uint16(20430), + 28: uint16(20446), + 29: uint16(20407), + 30: uint16(20823), + 31: uint16(20882), + 32: uint16(20881), + 33: uint16(20896), + 34: uint16(21070), + 35: uint16(21059), + 36: uint16(21066), + 37: uint16(21069), + 38: uint16(21068), + 39: uint16(21067), + 40: uint16(21063), + 41: uint16(21191), + 42: uint16(21193), + 43: uint16(21187), + 44: uint16(21185), + 45: uint16(21261), + 46: uint16(21335), + 47: uint16(21371), + 48: uint16(21402), + 49: uint16(21467), + 50: uint16(21676), + 51: uint16(21696), + 52: uint16(21672), + 53: uint16(21710), + 54: uint16(21705), + 55: uint16(21688), + 56: uint16(21670), + 57: uint16(21683), + 58: uint16(21703), + 59: uint16(21698), + 60: uint16(21693), + 61: uint16(21674), + 62: uint16(21697), + 63: uint16(21700), + 64: uint16(21704), + 65: uint16(21679), + 66: uint16(21675), + 67: uint16(21681), + 68: uint16(21691), + 69: uint16(21673), + 70: uint16(21671), + 71: uint16(21695), + 72: uint16(22271), + 73: uint16(22402), + 74: uint16(22411), + 75: uint16(22432), + 76: uint16(22435), + 77: uint16(22434), + 78: uint16(22478), + 79: uint16(22446), + 80: uint16(22419), + 81: uint16(22869), + 82: uint16(22865), + 83: uint16(22863), + 84: uint16(22862), + 85: uint16(22864), + 86: uint16(23004), + 87: uint16(23000), + 88: uint16(23039), + 89: uint16(23011), + 90: uint16(23016), + 91: uint16(23043), + 92: uint16(23013), + 93: uint16(23018), + 94: uint16(23002), + 95: uint16(23014), + 96: uint16(23041), + 97: uint16(23035), + 98: uint16(23401), + 99: uint16(23459), + 100: uint16(23462), + 101: uint16(23460), + 102: uint16(23458), + 103: uint16(23461), + 104: uint16(23553), + 105: uint16(23630), + 106: uint16(23631), + 107: uint16(23629), + 108: uint16(23627), + 109: uint16(23769), + 110: uint16(23762), + 111: uint16(24055), + 112: uint16(24093), + 113: uint16(24101), + 114: uint16(24095), + 115: uint16(24189), + 116: uint16(24224), + 117: uint16(24230), + 118: uint16(24314), + 119: uint16(24328), + 120: uint16(24365), + 121: uint16(24421), + 122: uint16(24456), + 123: uint16(24453), + 124: uint16(24458), + 125: uint16(24459), + 126: uint16(24455), + 127: uint16(24460), + 128: uint16(24457), + 129: uint16(24594), + 130: uint16(24605), + 131: uint16(24608), + 132: uint16(24613), + 133: uint16(24590), + 134: uint16(24616), + 135: uint16(24653), + 136: uint16(24688), + 137: uint16(24680), + 138: uint16(24674), + 139: uint16(24646), + 140: uint16(24643), + 141: uint16(24684), + 142: uint16(24683), + 143: uint16(24682), + 144: uint16(24676), + 145: uint16(25153), + 146: uint16(25308), + 147: uint16(25366), + 148: uint16(25353), + 149: uint16(25340), + 150: uint16(25325), + 151: uint16(25345), + 152: uint16(25326), + 153: uint16(25341), + 154: uint16(25351), + 155: uint16(25329), + 156: uint16(25335), + }, + 11: { + 0: uint16(25327), + 1: uint16(25324), + 2: uint16(25342), + 3: uint16(25332), + 4: uint16(25361), + 5: uint16(25346), + 6: uint16(25919), + 7: uint16(25925), + 8: uint16(26027), + 9: uint16(26045), + 10: uint16(26082), + 11: uint16(26149), + 12: uint16(26157), + 13: uint16(26144), + 14: uint16(26151), + 15: uint16(26159), + 16: uint16(26143), + 17: uint16(26152), + 18: uint16(26161), + 19: uint16(26148), + 20: uint16(26359), + 21: uint16(26623), + 22: uint16(26579), + 23: uint16(26609), + 24: uint16(26580), + 25: uint16(26576), + 26: uint16(26604), + 27: uint16(26550), + 28: uint16(26543), + 29: uint16(26613), + 30: uint16(26601), + 31: uint16(26607), + 32: uint16(26564), + 33: uint16(26577), + 34: uint16(26548), + 35: uint16(26586), + 36: uint16(26597), + 37: uint16(26552), + 38: uint16(26575), + 39: uint16(26590), + 40: uint16(26611), + 41: uint16(26544), + 42: uint16(26585), + 43: uint16(26594), + 44: uint16(26589), + 45: uint16(26578), + 46: uint16(27498), + 47: uint16(27523), + 48: uint16(27526), + 49: uint16(27573), + 50: uint16(27602), + 51: uint16(27607), + 52: uint16(27679), + 53: uint16(27849), + 54: uint16(27915), + 55: uint16(27954), + 56: uint16(27946), + 57: uint16(27969), + 58: uint16(27941), + 59: uint16(27916), + 60: uint16(27953), + 61: uint16(27934), + 62: uint16(27927), + 63: uint16(27963), + 64: uint16(27965), + 65: uint16(27966), + 66: uint16(27958), + 67: uint16(27931), + 68: uint16(27893), + 69: uint16(27961), + 70: uint16(27943), + 71: uint16(27960), + 72: uint16(27945), + 73: uint16(27950), + 74: uint16(27957), + 75: uint16(27918), + 76: uint16(27947), + 77: uint16(28843), + 78: uint16(28858), + 79: uint16(28851), + 80: uint16(28844), + 81: uint16(28847), + 82: uint16(28845), + 83: uint16(28856), + 84: uint16(28846), + 85: uint16(28836), + 86: uint16(29232), + 87: uint16(29298), + 88: uint16(29295), + 89: uint16(29300), + 90: uint16(29417), + 91: uint16(29408), + 92: uint16(29409), + 93: uint16(29623), + 94: uint16(29642), + 95: uint16(29627), + 96: uint16(29618), + 97: uint16(29645), + 98: uint16(29632), + 99: uint16(29619), + 100: uint16(29978), + 101: uint16(29997), + 102: uint16(30031), + 103: uint16(30028), + 104: uint16(30030), + 105: uint16(30027), + 106: uint16(30123), + 107: uint16(30116), + 108: uint16(30117), + 109: uint16(30114), + 110: uint16(30115), + 111: uint16(30328), + 112: uint16(30342), + 113: uint16(30343), + 114: uint16(30344), + 115: uint16(30408), + 116: uint16(30406), + 117: uint16(30403), + 118: uint16(30405), + 119: uint16(30465), + 120: uint16(30457), + 121: uint16(30456), + 122: uint16(30473), + 123: uint16(30475), + 124: uint16(30462), + 125: uint16(30460), + 126: uint16(30471), + 127: uint16(30684), + 128: uint16(30722), + 129: uint16(30740), + 130: uint16(30732), + 131: uint16(30733), + 132: uint16(31046), + 133: uint16(31049), + 134: uint16(31048), + 135: uint16(31047), + 136: uint16(31161), + 137: uint16(31162), + 138: uint16(31185), + 139: uint16(31186), + 140: uint16(31179), + 141: uint16(31359), + 142: uint16(31361), + 143: uint16(31487), + 144: uint16(31485), + 145: uint16(31869), + 146: uint16(32002), + 147: uint16(32005), + 148: uint16(32000), + 149: uint16(32009), + 150: uint16(32007), + 151: uint16(32004), + 152: uint16(32006), + 153: uint16(32568), + 154: uint16(32654), + 155: uint16(32703), + 156: uint16(32772), + }, + 12: { + 0: uint16(32784), + 1: uint16(32781), + 2: uint16(32785), + 3: uint16(32822), + 4: uint16(32982), + 5: uint16(32997), + 6: uint16(32986), + 7: uint16(32963), + 8: uint16(32964), + 9: uint16(32972), + 10: uint16(32993), + 11: uint16(32987), + 12: uint16(32974), + 13: uint16(32990), + 14: uint16(32996), + 15: uint16(32989), + 16: uint16(33268), + 17: uint16(33314), + 18: uint16(33511), + 19: uint16(33539), + 20: uint16(33541), + 21: uint16(33507), + 22: uint16(33499), + 23: uint16(33510), + 24: uint16(33540), + 25: uint16(33509), + 26: uint16(33538), + 27: uint16(33545), + 28: uint16(33490), + 29: uint16(33495), + 30: uint16(33521), + 31: uint16(33537), + 32: uint16(33500), + 33: uint16(33492), + 34: uint16(33489), + 35: uint16(33502), + 36: uint16(33491), + 37: uint16(33503), + 38: uint16(33519), + 39: uint16(33542), + 40: uint16(34384), + 41: uint16(34425), + 42: uint16(34427), + 43: uint16(34426), + 44: uint16(34893), + 45: uint16(34923), + 46: uint16(35201), + 47: uint16(35284), + 48: uint16(35336), + 49: uint16(35330), + 50: uint16(35331), + 51: uint16(35998), + 52: uint16(36000), + 53: uint16(36212), + 54: uint16(36211), + 55: uint16(36276), + 56: uint16(36557), + 57: uint16(36556), + 58: uint16(36848), + 59: uint16(36838), + 60: uint16(36834), + 61: uint16(36842), + 62: uint16(36837), + 63: uint16(36845), + 64: uint16(36843), + 65: uint16(36836), + 66: uint16(36840), + 67: uint16(37066), + 68: uint16(37070), + 69: uint16(37057), + 70: uint16(37059), + 71: uint16(37195), + 72: uint16(37194), + 73: uint16(37325), + 74: uint16(38274), + 75: uint16(38480), + 76: uint16(38475), + 77: uint16(38476), + 78: uint16(38477), + 79: uint16(38754), + 80: uint16(38761), + 81: uint16(38859), + 82: uint16(38893), + 83: uint16(38899), + 84: uint16(38913), + 85: uint16(39080), + 86: uint16(39131), + 87: uint16(39135), + 88: uint16(39318), + 89: uint16(39321), + 90: uint16(20056), + 91: uint16(20147), + 92: uint16(20492), + 93: uint16(20493), + 94: uint16(20515), + 95: uint16(20463), + 96: uint16(20518), + 97: uint16(20517), + 98: uint16(20472), + 99: uint16(20521), + 100: uint16(20502), + 101: uint16(20486), + 102: uint16(20540), + 103: uint16(20511), + 104: uint16(20506), + 105: uint16(20498), + 106: uint16(20497), + 107: uint16(20474), + 108: uint16(20480), + 109: uint16(20500), + 110: uint16(20520), + 111: uint16(20465), + 112: uint16(20513), + 113: uint16(20491), + 114: uint16(20505), + 115: uint16(20504), + 116: uint16(20467), + 117: uint16(20462), + 118: uint16(20525), + 119: uint16(20522), + 120: uint16(20478), + 121: uint16(20523), + 122: uint16(20489), + 123: uint16(20860), + 124: uint16(20900), + 125: uint16(20901), + 126: uint16(20898), + 127: uint16(20941), + 128: uint16(20940), + 129: uint16(20934), + 130: uint16(20939), + 131: uint16(21078), + 132: uint16(21084), + 133: uint16(21076), + 134: uint16(21083), + 135: uint16(21085), + 136: uint16(21290), + 137: uint16(21375), + 138: uint16(21407), + 139: uint16(21405), + 140: uint16(21471), + 141: uint16(21736), + 142: uint16(21776), + 143: uint16(21761), + 144: uint16(21815), + 145: uint16(21756), + 146: uint16(21733), + 147: uint16(21746), + 148: uint16(21766), + 149: uint16(21754), + 150: uint16(21780), + 151: uint16(21737), + 152: uint16(21741), + 153: uint16(21729), + 154: uint16(21769), + 155: uint16(21742), + 156: uint16(21738), + }, + 13: { + 0: uint16(21734), + 1: uint16(21799), + 2: uint16(21767), + 3: uint16(21757), + 4: uint16(21775), + 5: uint16(22275), + 6: uint16(22276), + 7: uint16(22466), + 8: uint16(22484), + 9: uint16(22475), + 10: uint16(22467), + 11: uint16(22537), + 12: uint16(22799), + 13: uint16(22871), + 14: uint16(22872), + 15: uint16(22874), + 16: uint16(23057), + 17: uint16(23064), + 18: uint16(23068), + 19: uint16(23071), + 20: uint16(23067), + 21: uint16(23059), + 22: uint16(23020), + 23: uint16(23072), + 24: uint16(23075), + 25: uint16(23081), + 26: uint16(23077), + 27: uint16(23052), + 28: uint16(23049), + 29: uint16(23403), + 30: uint16(23640), + 31: uint16(23472), + 32: uint16(23475), + 33: uint16(23478), + 34: uint16(23476), + 35: uint16(23470), + 36: uint16(23477), + 37: uint16(23481), + 38: uint16(23480), + 39: uint16(23556), + 40: uint16(23633), + 41: uint16(23637), + 42: uint16(23632), + 43: uint16(23789), + 44: uint16(23805), + 45: uint16(23803), + 46: uint16(23786), + 47: uint16(23784), + 48: uint16(23792), + 49: uint16(23798), + 50: uint16(23809), + 51: uint16(23796), + 52: uint16(24046), + 53: uint16(24109), + 54: uint16(24107), + 55: uint16(24235), + 56: uint16(24237), + 57: uint16(24231), + 58: uint16(24369), + 59: uint16(24466), + 60: uint16(24465), + 61: uint16(24464), + 62: uint16(24665), + 63: uint16(24675), + 64: uint16(24677), + 65: uint16(24656), + 66: uint16(24661), + 67: uint16(24685), + 68: uint16(24681), + 69: uint16(24687), + 70: uint16(24708), + 71: uint16(24735), + 72: uint16(24730), + 73: uint16(24717), + 74: uint16(24724), + 75: uint16(24716), + 76: uint16(24709), + 77: uint16(24726), + 78: uint16(25159), + 79: uint16(25331), + 80: uint16(25352), + 81: uint16(25343), + 82: uint16(25422), + 83: uint16(25406), + 84: uint16(25391), + 85: uint16(25429), + 86: uint16(25410), + 87: uint16(25414), + 88: uint16(25423), + 89: uint16(25417), + 90: uint16(25402), + 91: uint16(25424), + 92: uint16(25405), + 93: uint16(25386), + 94: uint16(25387), + 95: uint16(25384), + 96: uint16(25421), + 97: uint16(25420), + 98: uint16(25928), + 99: uint16(25929), + 100: uint16(26009), + 101: uint16(26049), + 102: uint16(26053), + 103: uint16(26178), + 104: uint16(26185), + 105: uint16(26191), + 106: uint16(26179), + 107: uint16(26194), + 108: uint16(26188), + 109: uint16(26181), + 110: uint16(26177), + 111: uint16(26360), + 112: uint16(26388), + 113: uint16(26389), + 114: uint16(26391), + 115: uint16(26657), + 116: uint16(26680), + 117: uint16(26696), + 118: uint16(26694), + 119: uint16(26707), + 120: uint16(26681), + 121: uint16(26690), + 122: uint16(26708), + 123: uint16(26665), + 124: uint16(26803), + 125: uint16(26647), + 126: uint16(26700), + 127: uint16(26705), + 128: uint16(26685), + 129: uint16(26612), + 130: uint16(26704), + 131: uint16(26688), + 132: uint16(26684), + 133: uint16(26691), + 134: uint16(26666), + 135: uint16(26693), + 136: uint16(26643), + 137: uint16(26648), + 138: uint16(26689), + 139: uint16(27530), + 140: uint16(27529), + 141: uint16(27575), + 142: uint16(27683), + 143: uint16(27687), + 144: uint16(27688), + 145: uint16(27686), + 146: uint16(27684), + 147: uint16(27888), + 148: uint16(28010), + 149: uint16(28053), + 150: uint16(28040), + 151: uint16(28039), + 152: uint16(28006), + 153: uint16(28024), + 154: uint16(28023), + 155: uint16(27993), + 156: uint16(28051), + }, + 14: { + 0: uint16(28012), + 1: uint16(28041), + 2: uint16(28014), + 3: uint16(27994), + 4: uint16(28020), + 5: uint16(28009), + 6: uint16(28044), + 7: uint16(28042), + 8: uint16(28025), + 9: uint16(28037), + 10: uint16(28005), + 11: uint16(28052), + 12: uint16(28874), + 13: uint16(28888), + 14: uint16(28900), + 15: uint16(28889), + 16: uint16(28872), + 17: uint16(28879), + 18: uint16(29241), + 19: uint16(29305), + 20: uint16(29436), + 21: uint16(29433), + 22: uint16(29437), + 23: uint16(29432), + 24: uint16(29431), + 25: uint16(29574), + 26: uint16(29677), + 27: uint16(29705), + 28: uint16(29678), + 29: uint16(29664), + 30: uint16(29674), + 31: uint16(29662), + 32: uint16(30036), + 33: uint16(30045), + 34: uint16(30044), + 35: uint16(30042), + 36: uint16(30041), + 37: uint16(30142), + 38: uint16(30149), + 39: uint16(30151), + 40: uint16(30130), + 41: uint16(30131), + 42: uint16(30141), + 43: uint16(30140), + 44: uint16(30137), + 45: uint16(30146), + 46: uint16(30136), + 47: uint16(30347), + 48: uint16(30384), + 49: uint16(30410), + 50: uint16(30413), + 51: uint16(30414), + 52: uint16(30505), + 53: uint16(30495), + 54: uint16(30496), + 55: uint16(30504), + 56: uint16(30697), + 57: uint16(30768), + 58: uint16(30759), + 59: uint16(30776), + 60: uint16(30749), + 61: uint16(30772), + 62: uint16(30775), + 63: uint16(30757), + 64: uint16(30765), + 65: uint16(30752), + 66: uint16(30751), + 67: uint16(30770), + 68: uint16(31061), + 69: uint16(31056), + 70: uint16(31072), + 71: uint16(31071), + 72: uint16(31062), + 73: uint16(31070), + 74: uint16(31069), + 75: uint16(31063), + 76: uint16(31066), + 77: uint16(31204), + 78: uint16(31203), + 79: uint16(31207), + 80: uint16(31199), + 81: uint16(31206), + 82: uint16(31209), + 83: uint16(31192), + 84: uint16(31364), + 85: uint16(31368), + 86: uint16(31449), + 87: uint16(31494), + 88: uint16(31505), + 89: uint16(31881), + 90: uint16(32033), + 91: uint16(32023), + 92: uint16(32011), + 93: uint16(32010), + 94: uint16(32032), + 95: uint16(32034), + 96: uint16(32020), + 97: uint16(32016), + 98: uint16(32021), + 99: uint16(32026), + 100: uint16(32028), + 101: uint16(32013), + 102: uint16(32025), + 103: uint16(32027), + 104: uint16(32570), + 105: uint16(32607), + 106: uint16(32660), + 107: uint16(32709), + 108: uint16(32705), + 109: uint16(32774), + 110: uint16(32792), + 111: uint16(32789), + 112: uint16(32793), + 113: uint16(32791), + 114: uint16(32829), + 115: uint16(32831), + 116: uint16(33009), + 117: uint16(33026), + 118: uint16(33008), + 119: uint16(33029), + 120: uint16(33005), + 121: uint16(33012), + 122: uint16(33030), + 123: uint16(33016), + 124: uint16(33011), + 125: uint16(33032), + 126: uint16(33021), + 127: uint16(33034), + 128: uint16(33020), + 129: uint16(33007), + 130: uint16(33261), + 131: uint16(33260), + 132: uint16(33280), + 133: uint16(33296), + 134: uint16(33322), + 135: uint16(33323), + 136: uint16(33320), + 137: uint16(33324), + 138: uint16(33467), + 139: uint16(33579), + 140: uint16(33618), + 141: uint16(33620), + 142: uint16(33610), + 143: uint16(33592), + 144: uint16(33616), + 145: uint16(33609), + 146: uint16(33589), + 147: uint16(33588), + 148: uint16(33615), + 149: uint16(33586), + 150: uint16(33593), + 151: uint16(33590), + 152: uint16(33559), + 153: uint16(33600), + 154: uint16(33585), + 155: uint16(33576), + 156: uint16(33603), + }, + 15: { + 0: uint16(34388), + 1: uint16(34442), + 2: uint16(34474), + 3: uint16(34451), + 4: uint16(34468), + 5: uint16(34473), + 6: uint16(34444), + 7: uint16(34467), + 8: uint16(34460), + 9: uint16(34928), + 10: uint16(34935), + 11: uint16(34945), + 12: uint16(34946), + 13: uint16(34941), + 14: uint16(34937), + 15: uint16(35352), + 16: uint16(35344), + 17: uint16(35342), + 18: uint16(35340), + 19: uint16(35349), + 20: uint16(35338), + 21: uint16(35351), + 22: uint16(35347), + 23: uint16(35350), + 24: uint16(35343), + 25: uint16(35345), + 26: uint16(35912), + 27: uint16(35962), + 28: uint16(35961), + 29: uint16(36001), + 30: uint16(36002), + 31: uint16(36215), + 32: uint16(36524), + 33: uint16(36562), + 34: uint16(36564), + 35: uint16(36559), + 36: uint16(36785), + 37: uint16(36865), + 38: uint16(36870), + 39: uint16(36855), + 40: uint16(36864), + 41: uint16(36858), + 42: uint16(36852), + 43: uint16(36867), + 44: uint16(36861), + 45: uint16(36869), + 46: uint16(36856), + 47: uint16(37013), + 48: uint16(37089), + 49: uint16(37085), + 50: uint16(37090), + 51: uint16(37202), + 52: uint16(37197), + 53: uint16(37196), + 54: uint16(37336), + 55: uint16(37341), + 56: uint16(37335), + 57: uint16(37340), + 58: uint16(37337), + 59: uint16(38275), + 60: uint16(38498), + 61: uint16(38499), + 62: uint16(38497), + 63: uint16(38491), + 64: uint16(38493), + 65: uint16(38500), + 66: uint16(38488), + 67: uint16(38494), + 68: uint16(38587), + 69: uint16(39138), + 70: uint16(39340), + 71: uint16(39592), + 72: uint16(39640), + 73: uint16(39717), + 74: uint16(39730), + 75: uint16(39740), + 76: uint16(20094), + 77: uint16(20602), + 78: uint16(20605), + 79: uint16(20572), + 80: uint16(20551), + 81: uint16(20547), + 82: uint16(20556), + 83: uint16(20570), + 84: uint16(20553), + 85: uint16(20581), + 86: uint16(20598), + 87: uint16(20558), + 88: uint16(20565), + 89: uint16(20597), + 90: uint16(20596), + 91: uint16(20599), + 92: uint16(20559), + 93: uint16(20495), + 94: uint16(20591), + 95: uint16(20589), + 96: uint16(20828), + 97: uint16(20885), + 98: uint16(20976), + 99: uint16(21098), + 100: uint16(21103), + 101: uint16(21202), + 102: uint16(21209), + 103: uint16(21208), + 104: uint16(21205), + 105: uint16(21264), + 106: uint16(21263), + 107: uint16(21273), + 108: uint16(21311), + 109: uint16(21312), + 110: uint16(21310), + 111: uint16(21443), + 112: uint16(26364), + 113: uint16(21830), + 114: uint16(21866), + 115: uint16(21862), + 116: uint16(21828), + 117: uint16(21854), + 118: uint16(21857), + 119: uint16(21827), + 120: uint16(21834), + 121: uint16(21809), + 122: uint16(21846), + 123: uint16(21839), + 124: uint16(21845), + 125: uint16(21807), + 126: uint16(21860), + 127: uint16(21816), + 128: uint16(21806), + 129: uint16(21852), + 130: uint16(21804), + 131: uint16(21859), + 132: uint16(21811), + 133: uint16(21825), + 134: uint16(21847), + 135: uint16(22280), + 136: uint16(22283), + 137: uint16(22281), + 138: uint16(22495), + 139: uint16(22533), + 140: uint16(22538), + 141: uint16(22534), + 142: uint16(22496), + 143: uint16(22500), + 144: uint16(22522), + 145: uint16(22530), + 146: uint16(22581), + 147: uint16(22519), + 148: uint16(22521), + 149: uint16(22816), + 150: uint16(22882), + 151: uint16(23094), + 152: uint16(23105), + 153: uint16(23113), + 154: uint16(23142), + 155: uint16(23146), + 156: uint16(23104), + }, + 16: { + 0: uint16(23100), + 1: uint16(23138), + 2: uint16(23130), + 3: uint16(23110), + 4: uint16(23114), + 5: uint16(23408), + 6: uint16(23495), + 7: uint16(23493), + 8: uint16(23492), + 9: uint16(23490), + 10: uint16(23487), + 11: uint16(23494), + 12: uint16(23561), + 13: uint16(23560), + 14: uint16(23559), + 15: uint16(23648), + 16: uint16(23644), + 17: uint16(23645), + 18: uint16(23815), + 19: uint16(23814), + 20: uint16(23822), + 21: uint16(23835), + 22: uint16(23830), + 23: uint16(23842), + 24: uint16(23825), + 25: uint16(23849), + 26: uint16(23828), + 27: uint16(23833), + 28: uint16(23844), + 29: uint16(23847), + 30: uint16(23831), + 31: uint16(24034), + 32: uint16(24120), + 33: uint16(24118), + 34: uint16(24115), + 35: uint16(24119), + 36: uint16(24247), + 37: uint16(24248), + 38: uint16(24246), + 39: uint16(24245), + 40: uint16(24254), + 41: uint16(24373), + 42: uint16(24375), + 43: uint16(24407), + 44: uint16(24428), + 45: uint16(24425), + 46: uint16(24427), + 47: uint16(24471), + 48: uint16(24473), + 49: uint16(24478), + 50: uint16(24472), + 51: uint16(24481), + 52: uint16(24480), + 53: uint16(24476), + 54: uint16(24703), + 55: uint16(24739), + 56: uint16(24713), + 57: uint16(24736), + 58: uint16(24744), + 59: uint16(24779), + 60: uint16(24756), + 61: uint16(24806), + 62: uint16(24765), + 63: uint16(24773), + 64: uint16(24763), + 65: uint16(24757), + 66: uint16(24796), + 67: uint16(24764), + 68: uint16(24792), + 69: uint16(24789), + 70: uint16(24774), + 71: uint16(24799), + 72: uint16(24760), + 73: uint16(24794), + 74: uint16(24775), + 75: uint16(25114), + 76: uint16(25115), + 77: uint16(25160), + 78: uint16(25504), + 79: uint16(25511), + 80: uint16(25458), + 81: uint16(25494), + 82: uint16(25506), + 83: uint16(25509), + 84: uint16(25463), + 85: uint16(25447), + 86: uint16(25496), + 87: uint16(25514), + 88: uint16(25457), + 89: uint16(25513), + 90: uint16(25481), + 91: uint16(25475), + 92: uint16(25499), + 93: uint16(25451), + 94: uint16(25512), + 95: uint16(25476), + 96: uint16(25480), + 97: uint16(25497), + 98: uint16(25505), + 99: uint16(25516), + 100: uint16(25490), + 101: uint16(25487), + 102: uint16(25472), + 103: uint16(25467), + 104: uint16(25449), + 105: uint16(25448), + 106: uint16(25466), + 107: uint16(25949), + 108: uint16(25942), + 109: uint16(25937), + 110: uint16(25945), + 111: uint16(25943), + 112: uint16(21855), + 113: uint16(25935), + 114: uint16(25944), + 115: uint16(25941), + 116: uint16(25940), + 117: uint16(26012), + 118: uint16(26011), + 119: uint16(26028), + 120: uint16(26063), + 121: uint16(26059), + 122: uint16(26060), + 123: uint16(26062), + 124: uint16(26205), + 125: uint16(26202), + 126: uint16(26212), + 127: uint16(26216), + 128: uint16(26214), + 129: uint16(26206), + 130: uint16(26361), + 131: uint16(21207), + 132: uint16(26395), + 133: uint16(26753), + 134: uint16(26799), + 135: uint16(26786), + 136: uint16(26771), + 137: uint16(26805), + 138: uint16(26751), + 139: uint16(26742), + 140: uint16(26801), + 141: uint16(26791), + 142: uint16(26775), + 143: uint16(26800), + 144: uint16(26755), + 145: uint16(26820), + 146: uint16(26797), + 147: uint16(26758), + 148: uint16(26757), + 149: uint16(26772), + 150: uint16(26781), + 151: uint16(26792), + 152: uint16(26783), + 153: uint16(26785), + 154: uint16(26754), + 155: uint16(27442), + 156: uint16(27578), + }, + 17: { + 0: uint16(27627), + 1: uint16(27628), + 2: uint16(27691), + 3: uint16(28046), + 4: uint16(28092), + 5: uint16(28147), + 6: uint16(28121), + 7: uint16(28082), + 8: uint16(28129), + 9: uint16(28108), + 10: uint16(28132), + 11: uint16(28155), + 12: uint16(28154), + 13: uint16(28165), + 14: uint16(28103), + 15: uint16(28107), + 16: uint16(28079), + 17: uint16(28113), + 18: uint16(28078), + 19: uint16(28126), + 20: uint16(28153), + 21: uint16(28088), + 22: uint16(28151), + 23: uint16(28149), + 24: uint16(28101), + 25: uint16(28114), + 26: uint16(28186), + 27: uint16(28085), + 28: uint16(28122), + 29: uint16(28139), + 30: uint16(28120), + 31: uint16(28138), + 32: uint16(28145), + 33: uint16(28142), + 34: uint16(28136), + 35: uint16(28102), + 36: uint16(28100), + 37: uint16(28074), + 38: uint16(28140), + 39: uint16(28095), + 40: uint16(28134), + 41: uint16(28921), + 42: uint16(28937), + 43: uint16(28938), + 44: uint16(28925), + 45: uint16(28911), + 46: uint16(29245), + 47: uint16(29309), + 48: uint16(29313), + 49: uint16(29468), + 50: uint16(29467), + 51: uint16(29462), + 52: uint16(29459), + 53: uint16(29465), + 54: uint16(29575), + 55: uint16(29701), + 56: uint16(29706), + 57: uint16(29699), + 58: uint16(29702), + 59: uint16(29694), + 60: uint16(29709), + 61: uint16(29920), + 62: uint16(29942), + 63: uint16(29943), + 64: uint16(29980), + 65: uint16(29986), + 66: uint16(30053), + 67: uint16(30054), + 68: uint16(30050), + 69: uint16(30064), + 70: uint16(30095), + 71: uint16(30164), + 72: uint16(30165), + 73: uint16(30133), + 74: uint16(30154), + 75: uint16(30157), + 76: uint16(30350), + 77: uint16(30420), + 78: uint16(30418), + 79: uint16(30427), + 80: uint16(30519), + 81: uint16(30526), + 82: uint16(30524), + 83: uint16(30518), + 84: uint16(30520), + 85: uint16(30522), + 86: uint16(30827), + 87: uint16(30787), + 88: uint16(30798), + 89: uint16(31077), + 90: uint16(31080), + 91: uint16(31085), + 92: uint16(31227), + 93: uint16(31378), + 94: uint16(31381), + 95: uint16(31520), + 96: uint16(31528), + 97: uint16(31515), + 98: uint16(31532), + 99: uint16(31526), + 100: uint16(31513), + 101: uint16(31518), + 102: uint16(31534), + 103: uint16(31890), + 104: uint16(31895), + 105: uint16(31893), + 106: uint16(32070), + 107: uint16(32067), + 108: uint16(32113), + 109: uint16(32046), + 110: uint16(32057), + 111: uint16(32060), + 112: uint16(32064), + 113: uint16(32048), + 114: uint16(32051), + 115: uint16(32068), + 116: uint16(32047), + 117: uint16(32066), + 118: uint16(32050), + 119: uint16(32049), + 120: uint16(32573), + 121: uint16(32670), + 122: uint16(32666), + 123: uint16(32716), + 124: uint16(32718), + 125: uint16(32722), + 126: uint16(32796), + 127: uint16(32842), + 128: uint16(32838), + 129: uint16(33071), + 130: uint16(33046), + 131: uint16(33059), + 132: uint16(33067), + 133: uint16(33065), + 134: uint16(33072), + 135: uint16(33060), + 136: uint16(33282), + 137: uint16(33333), + 138: uint16(33335), + 139: uint16(33334), + 140: uint16(33337), + 141: uint16(33678), + 142: uint16(33694), + 143: uint16(33688), + 144: uint16(33656), + 145: uint16(33698), + 146: uint16(33686), + 147: uint16(33725), + 148: uint16(33707), + 149: uint16(33682), + 150: uint16(33674), + 151: uint16(33683), + 152: uint16(33673), + 153: uint16(33696), + 154: uint16(33655), + 155: uint16(33659), + 156: uint16(33660), + }, + 18: { + 0: uint16(33670), + 1: uint16(33703), + 2: uint16(34389), + 3: uint16(24426), + 4: uint16(34503), + 5: uint16(34496), + 6: uint16(34486), + 7: uint16(34500), + 8: uint16(34485), + 9: uint16(34502), + 10: uint16(34507), + 11: uint16(34481), + 12: uint16(34479), + 13: uint16(34505), + 14: uint16(34899), + 15: uint16(34974), + 16: uint16(34952), + 17: uint16(34987), + 18: uint16(34962), + 19: uint16(34966), + 20: uint16(34957), + 21: uint16(34955), + 22: uint16(35219), + 23: uint16(35215), + 24: uint16(35370), + 25: uint16(35357), + 26: uint16(35363), + 27: uint16(35365), + 28: uint16(35377), + 29: uint16(35373), + 30: uint16(35359), + 31: uint16(35355), + 32: uint16(35362), + 33: uint16(35913), + 34: uint16(35930), + 35: uint16(36009), + 36: uint16(36012), + 37: uint16(36011), + 38: uint16(36008), + 39: uint16(36010), + 40: uint16(36007), + 41: uint16(36199), + 42: uint16(36198), + 43: uint16(36286), + 44: uint16(36282), + 45: uint16(36571), + 46: uint16(36575), + 47: uint16(36889), + 48: uint16(36877), + 49: uint16(36890), + 50: uint16(36887), + 51: uint16(36899), + 52: uint16(36895), + 53: uint16(36893), + 54: uint16(36880), + 55: uint16(36885), + 56: uint16(36894), + 57: uint16(36896), + 58: uint16(36879), + 59: uint16(36898), + 60: uint16(36886), + 61: uint16(36891), + 62: uint16(36884), + 63: uint16(37096), + 64: uint16(37101), + 65: uint16(37117), + 66: uint16(37207), + 67: uint16(37326), + 68: uint16(37365), + 69: uint16(37350), + 70: uint16(37347), + 71: uint16(37351), + 72: uint16(37357), + 73: uint16(37353), + 74: uint16(38281), + 75: uint16(38506), + 76: uint16(38517), + 77: uint16(38515), + 78: uint16(38520), + 79: uint16(38512), + 80: uint16(38516), + 81: uint16(38518), + 82: uint16(38519), + 83: uint16(38508), + 84: uint16(38592), + 85: uint16(38634), + 86: uint16(38633), + 87: uint16(31456), + 88: uint16(31455), + 89: uint16(38914), + 90: uint16(38915), + 91: uint16(39770), + 92: uint16(40165), + 93: uint16(40565), + 94: uint16(40575), + 95: uint16(40613), + 96: uint16(40635), + 97: uint16(20642), + 98: uint16(20621), + 99: uint16(20613), + 100: uint16(20633), + 101: uint16(20625), + 102: uint16(20608), + 103: uint16(20630), + 104: uint16(20632), + 105: uint16(20634), + 106: uint16(26368), + 107: uint16(20977), + 108: uint16(21106), + 109: uint16(21108), + 110: uint16(21109), + 111: uint16(21097), + 112: uint16(21214), + 113: uint16(21213), + 114: uint16(21211), + 115: uint16(21338), + 116: uint16(21413), + 117: uint16(21883), + 118: uint16(21888), + 119: uint16(21927), + 120: uint16(21884), + 121: uint16(21898), + 122: uint16(21917), + 123: uint16(21912), + 124: uint16(21890), + 125: uint16(21916), + 126: uint16(21930), + 127: uint16(21908), + 128: uint16(21895), + 129: uint16(21899), + 130: uint16(21891), + 131: uint16(21939), + 132: uint16(21934), + 133: uint16(21919), + 134: uint16(21822), + 135: uint16(21938), + 136: uint16(21914), + 137: uint16(21947), + 138: uint16(21932), + 139: uint16(21937), + 140: uint16(21886), + 141: uint16(21897), + 142: uint16(21931), + 143: uint16(21913), + 144: uint16(22285), + 145: uint16(22575), + 146: uint16(22570), + 147: uint16(22580), + 148: uint16(22564), + 149: uint16(22576), + 150: uint16(22577), + 151: uint16(22561), + 152: uint16(22557), + 153: uint16(22560), + 154: uint16(22777), + 155: uint16(22778), + 156: uint16(22880), + }, + 19: { + 0: uint16(23159), + 1: uint16(23194), + 2: uint16(23167), + 3: uint16(23186), + 4: uint16(23195), + 5: uint16(23207), + 6: uint16(23411), + 7: uint16(23409), + 8: uint16(23506), + 9: uint16(23500), + 10: uint16(23507), + 11: uint16(23504), + 12: uint16(23562), + 13: uint16(23563), + 14: uint16(23601), + 15: uint16(23884), + 16: uint16(23888), + 17: uint16(23860), + 18: uint16(23879), + 19: uint16(24061), + 20: uint16(24133), + 21: uint16(24125), + 22: uint16(24128), + 23: uint16(24131), + 24: uint16(24190), + 25: uint16(24266), + 26: uint16(24257), + 27: uint16(24258), + 28: uint16(24260), + 29: uint16(24380), + 30: uint16(24429), + 31: uint16(24489), + 32: uint16(24490), + 33: uint16(24488), + 34: uint16(24785), + 35: uint16(24801), + 36: uint16(24754), + 37: uint16(24758), + 38: uint16(24800), + 39: uint16(24860), + 40: uint16(24867), + 41: uint16(24826), + 42: uint16(24853), + 43: uint16(24816), + 44: uint16(24827), + 45: uint16(24820), + 46: uint16(24936), + 47: uint16(24817), + 48: uint16(24846), + 49: uint16(24822), + 50: uint16(24841), + 51: uint16(24832), + 52: uint16(24850), + 53: uint16(25119), + 54: uint16(25161), + 55: uint16(25507), + 56: uint16(25484), + 57: uint16(25551), + 58: uint16(25536), + 59: uint16(25577), + 60: uint16(25545), + 61: uint16(25542), + 62: uint16(25549), + 63: uint16(25554), + 64: uint16(25571), + 65: uint16(25552), + 66: uint16(25569), + 67: uint16(25558), + 68: uint16(25581), + 69: uint16(25582), + 70: uint16(25462), + 71: uint16(25588), + 72: uint16(25578), + 73: uint16(25563), + 74: uint16(25682), + 75: uint16(25562), + 76: uint16(25593), + 77: uint16(25950), + 78: uint16(25958), + 79: uint16(25954), + 80: uint16(25955), + 81: uint16(26001), + 82: uint16(26000), + 83: uint16(26031), + 84: uint16(26222), + 85: uint16(26224), + 86: uint16(26228), + 87: uint16(26230), + 88: uint16(26223), + 89: uint16(26257), + 90: uint16(26234), + 91: uint16(26238), + 92: uint16(26231), + 93: uint16(26366), + 94: uint16(26367), + 95: uint16(26399), + 96: uint16(26397), + 97: uint16(26874), + 98: uint16(26837), + 99: uint16(26848), + 100: uint16(26840), + 101: uint16(26839), + 102: uint16(26885), + 103: uint16(26847), + 104: uint16(26869), + 105: uint16(26862), + 106: uint16(26855), + 107: uint16(26873), + 108: uint16(26834), + 109: uint16(26866), + 110: uint16(26851), + 111: uint16(26827), + 112: uint16(26829), + 113: uint16(26893), + 114: uint16(26898), + 115: uint16(26894), + 116: uint16(26825), + 117: uint16(26842), + 118: uint16(26990), + 119: uint16(26875), + 120: uint16(27454), + 121: uint16(27450), + 122: uint16(27453), + 123: uint16(27544), + 124: uint16(27542), + 125: uint16(27580), + 126: uint16(27631), + 127: uint16(27694), + 128: uint16(27695), + 129: uint16(27692), + 130: uint16(28207), + 131: uint16(28216), + 132: uint16(28244), + 133: uint16(28193), + 134: uint16(28210), + 135: uint16(28263), + 136: uint16(28234), + 137: uint16(28192), + 138: uint16(28197), + 139: uint16(28195), + 140: uint16(28187), + 141: uint16(28251), + 142: uint16(28248), + 143: uint16(28196), + 144: uint16(28246), + 145: uint16(28270), + 146: uint16(28205), + 147: uint16(28198), + 148: uint16(28271), + 149: uint16(28212), + 150: uint16(28237), + 151: uint16(28218), + 152: uint16(28204), + 153: uint16(28227), + 154: uint16(28189), + 155: uint16(28222), + 156: uint16(28363), + }, + 20: { + 0: uint16(28297), + 1: uint16(28185), + 2: uint16(28238), + 3: uint16(28259), + 4: uint16(28228), + 5: uint16(28274), + 6: uint16(28265), + 7: uint16(28255), + 8: uint16(28953), + 9: uint16(28954), + 10: uint16(28966), + 11: uint16(28976), + 12: uint16(28961), + 13: uint16(28982), + 14: uint16(29038), + 15: uint16(28956), + 16: uint16(29260), + 17: uint16(29316), + 18: uint16(29312), + 19: uint16(29494), + 20: uint16(29477), + 21: uint16(29492), + 22: uint16(29481), + 23: uint16(29754), + 24: uint16(29738), + 25: uint16(29747), + 26: uint16(29730), + 27: uint16(29733), + 28: uint16(29749), + 29: uint16(29750), + 30: uint16(29748), + 31: uint16(29743), + 32: uint16(29723), + 33: uint16(29734), + 34: uint16(29736), + 35: uint16(29989), + 36: uint16(29990), + 37: uint16(30059), + 38: uint16(30058), + 39: uint16(30178), + 40: uint16(30171), + 41: uint16(30179), + 42: uint16(30169), + 43: uint16(30168), + 44: uint16(30174), + 45: uint16(30176), + 46: uint16(30331), + 47: uint16(30332), + 48: uint16(30358), + 49: uint16(30355), + 50: uint16(30388), + 51: uint16(30428), + 52: uint16(30543), + 53: uint16(30701), + 54: uint16(30813), + 55: uint16(30828), + 56: uint16(30831), + 57: uint16(31245), + 58: uint16(31240), + 59: uint16(31243), + 60: uint16(31237), + 61: uint16(31232), + 62: uint16(31384), + 63: uint16(31383), + 64: uint16(31382), + 65: uint16(31461), + 66: uint16(31459), + 67: uint16(31561), + 68: uint16(31574), + 69: uint16(31558), + 70: uint16(31568), + 71: uint16(31570), + 72: uint16(31572), + 73: uint16(31565), + 74: uint16(31563), + 75: uint16(31567), + 76: uint16(31569), + 77: uint16(31903), + 78: uint16(31909), + 79: uint16(32094), + 80: uint16(32080), + 81: uint16(32104), + 82: uint16(32085), + 83: uint16(32043), + 84: uint16(32110), + 85: uint16(32114), + 86: uint16(32097), + 87: uint16(32102), + 88: uint16(32098), + 89: uint16(32112), + 90: uint16(32115), + 91: uint16(21892), + 92: uint16(32724), + 93: uint16(32725), + 94: uint16(32779), + 95: uint16(32850), + 96: uint16(32901), + 97: uint16(33109), + 98: uint16(33108), + 99: uint16(33099), + 100: uint16(33105), + 101: uint16(33102), + 102: uint16(33081), + 103: uint16(33094), + 104: uint16(33086), + 105: uint16(33100), + 106: uint16(33107), + 107: uint16(33140), + 108: uint16(33298), + 109: uint16(33308), + 110: uint16(33769), + 111: uint16(33795), + 112: uint16(33784), + 113: uint16(33805), + 114: uint16(33760), + 115: uint16(33733), + 116: uint16(33803), + 117: uint16(33729), + 118: uint16(33775), + 119: uint16(33777), + 120: uint16(33780), + 121: uint16(33879), + 122: uint16(33802), + 123: uint16(33776), + 124: uint16(33804), + 125: uint16(33740), + 126: uint16(33789), + 127: uint16(33778), + 128: uint16(33738), + 129: uint16(33848), + 130: uint16(33806), + 131: uint16(33796), + 132: uint16(33756), + 133: uint16(33799), + 134: uint16(33748), + 135: uint16(33759), + 136: uint16(34395), + 137: uint16(34527), + 138: uint16(34521), + 139: uint16(34541), + 140: uint16(34516), + 141: uint16(34523), + 142: uint16(34532), + 143: uint16(34512), + 144: uint16(34526), + 145: uint16(34903), + 146: uint16(35009), + 147: uint16(35010), + 148: uint16(34993), + 149: uint16(35203), + 150: uint16(35222), + 151: uint16(35387), + 152: uint16(35424), + 153: uint16(35413), + 154: uint16(35422), + 155: uint16(35388), + 156: uint16(35393), + }, + 21: { + 0: uint16(35412), + 1: uint16(35419), + 2: uint16(35408), + 3: uint16(35398), + 4: uint16(35380), + 5: uint16(35386), + 6: uint16(35382), + 7: uint16(35414), + 8: uint16(35937), + 9: uint16(35970), + 10: uint16(36015), + 11: uint16(36028), + 12: uint16(36019), + 13: uint16(36029), + 14: uint16(36033), + 15: uint16(36027), + 16: uint16(36032), + 17: uint16(36020), + 18: uint16(36023), + 19: uint16(36022), + 20: uint16(36031), + 21: uint16(36024), + 22: uint16(36234), + 23: uint16(36229), + 24: uint16(36225), + 25: uint16(36302), + 26: uint16(36317), + 27: uint16(36299), + 28: uint16(36314), + 29: uint16(36305), + 30: uint16(36300), + 31: uint16(36315), + 32: uint16(36294), + 33: uint16(36603), + 34: uint16(36600), + 35: uint16(36604), + 36: uint16(36764), + 37: uint16(36910), + 38: uint16(36917), + 39: uint16(36913), + 40: uint16(36920), + 41: uint16(36914), + 42: uint16(36918), + 43: uint16(37122), + 44: uint16(37109), + 45: uint16(37129), + 46: uint16(37118), + 47: uint16(37219), + 48: uint16(37221), + 49: uint16(37327), + 50: uint16(37396), + 51: uint16(37397), + 52: uint16(37411), + 53: uint16(37385), + 54: uint16(37406), + 55: uint16(37389), + 56: uint16(37392), + 57: uint16(37383), + 58: uint16(37393), + 59: uint16(38292), + 60: uint16(38287), + 61: uint16(38283), + 62: uint16(38289), + 63: uint16(38291), + 64: uint16(38290), + 65: uint16(38286), + 66: uint16(38538), + 67: uint16(38542), + 68: uint16(38539), + 69: uint16(38525), + 70: uint16(38533), + 71: uint16(38534), + 72: uint16(38541), + 73: uint16(38514), + 74: uint16(38532), + 75: uint16(38593), + 76: uint16(38597), + 77: uint16(38596), + 78: uint16(38598), + 79: uint16(38599), + 80: uint16(38639), + 81: uint16(38642), + 82: uint16(38860), + 83: uint16(38917), + 84: uint16(38918), + 85: uint16(38920), + 86: uint16(39143), + 87: uint16(39146), + 88: uint16(39151), + 89: uint16(39145), + 90: uint16(39154), + 91: uint16(39149), + 92: uint16(39342), + 93: uint16(39341), + 94: uint16(40643), + 95: uint16(40653), + 96: uint16(40657), + 97: uint16(20098), + 98: uint16(20653), + 99: uint16(20661), + 100: uint16(20658), + 101: uint16(20659), + 102: uint16(20677), + 103: uint16(20670), + 104: uint16(20652), + 105: uint16(20663), + 106: uint16(20667), + 107: uint16(20655), + 108: uint16(20679), + 109: uint16(21119), + 110: uint16(21111), + 111: uint16(21117), + 112: uint16(21215), + 113: uint16(21222), + 114: uint16(21220), + 115: uint16(21218), + 116: uint16(21219), + 117: uint16(21295), + 118: uint16(21983), + 119: uint16(21992), + 120: uint16(21971), + 121: uint16(21990), + 122: uint16(21966), + 123: uint16(21980), + 124: uint16(21959), + 125: uint16(21969), + 126: uint16(21987), + 127: uint16(21988), + 128: uint16(21999), + 129: uint16(21978), + 130: uint16(21985), + 131: uint16(21957), + 132: uint16(21958), + 133: uint16(21989), + 134: uint16(21961), + 135: uint16(22290), + 136: uint16(22291), + 137: uint16(22622), + 138: uint16(22609), + 139: uint16(22616), + 140: uint16(22615), + 141: uint16(22618), + 142: uint16(22612), + 143: uint16(22635), + 144: uint16(22604), + 145: uint16(22637), + 146: uint16(22602), + 147: uint16(22626), + 148: uint16(22610), + 149: uint16(22603), + 150: uint16(22887), + 151: uint16(23233), + 152: uint16(23241), + 153: uint16(23244), + 154: uint16(23230), + 155: uint16(23229), + 156: uint16(23228), + }, + 22: { + 0: uint16(23219), + 1: uint16(23234), + 2: uint16(23218), + 3: uint16(23913), + 4: uint16(23919), + 5: uint16(24140), + 6: uint16(24185), + 7: uint16(24265), + 8: uint16(24264), + 9: uint16(24338), + 10: uint16(24409), + 11: uint16(24492), + 12: uint16(24494), + 13: uint16(24858), + 14: uint16(24847), + 15: uint16(24904), + 16: uint16(24863), + 17: uint16(24819), + 18: uint16(24859), + 19: uint16(24825), + 20: uint16(24833), + 21: uint16(24840), + 22: uint16(24910), + 23: uint16(24908), + 24: uint16(24900), + 25: uint16(24909), + 26: uint16(24894), + 27: uint16(24884), + 28: uint16(24871), + 29: uint16(24845), + 30: uint16(24838), + 31: uint16(24887), + 32: uint16(25121), + 33: uint16(25122), + 34: uint16(25619), + 35: uint16(25662), + 36: uint16(25630), + 37: uint16(25642), + 38: uint16(25645), + 39: uint16(25661), + 40: uint16(25644), + 41: uint16(25615), + 42: uint16(25628), + 43: uint16(25620), + 44: uint16(25613), + 45: uint16(25654), + 46: uint16(25622), + 47: uint16(25623), + 48: uint16(25606), + 49: uint16(25964), + 50: uint16(26015), + 51: uint16(26032), + 52: uint16(26263), + 53: uint16(26249), + 54: uint16(26247), + 55: uint16(26248), + 56: uint16(26262), + 57: uint16(26244), + 58: uint16(26264), + 59: uint16(26253), + 60: uint16(26371), + 61: uint16(27028), + 62: uint16(26989), + 63: uint16(26970), + 64: uint16(26999), + 65: uint16(26976), + 66: uint16(26964), + 67: uint16(26997), + 68: uint16(26928), + 69: uint16(27010), + 70: uint16(26954), + 71: uint16(26984), + 72: uint16(26987), + 73: uint16(26974), + 74: uint16(26963), + 75: uint16(27001), + 76: uint16(27014), + 77: uint16(26973), + 78: uint16(26979), + 79: uint16(26971), + 80: uint16(27463), + 81: uint16(27506), + 82: uint16(27584), + 83: uint16(27583), + 84: uint16(27603), + 85: uint16(27645), + 86: uint16(28322), + 87: uint16(28335), + 88: uint16(28371), + 89: uint16(28342), + 90: uint16(28354), + 91: uint16(28304), + 92: uint16(28317), + 93: uint16(28359), + 94: uint16(28357), + 95: uint16(28325), + 96: uint16(28312), + 97: uint16(28348), + 98: uint16(28346), + 99: uint16(28331), + 100: uint16(28369), + 101: uint16(28310), + 102: uint16(28316), + 103: uint16(28356), + 104: uint16(28372), + 105: uint16(28330), + 106: uint16(28327), + 107: uint16(28340), + 108: uint16(29006), + 109: uint16(29017), + 110: uint16(29033), + 111: uint16(29028), + 112: uint16(29001), + 113: uint16(29031), + 114: uint16(29020), + 115: uint16(29036), + 116: uint16(29030), + 117: uint16(29004), + 118: uint16(29029), + 119: uint16(29022), + 120: uint16(28998), + 121: uint16(29032), + 122: uint16(29014), + 123: uint16(29242), + 124: uint16(29266), + 125: uint16(29495), + 126: uint16(29509), + 127: uint16(29503), + 128: uint16(29502), + 129: uint16(29807), + 130: uint16(29786), + 131: uint16(29781), + 132: uint16(29791), + 133: uint16(29790), + 134: uint16(29761), + 135: uint16(29759), + 136: uint16(29785), + 137: uint16(29787), + 138: uint16(29788), + 139: uint16(30070), + 140: uint16(30072), + 141: uint16(30208), + 142: uint16(30192), + 143: uint16(30209), + 144: uint16(30194), + 145: uint16(30193), + 146: uint16(30202), + 147: uint16(30207), + 148: uint16(30196), + 149: uint16(30195), + 150: uint16(30430), + 151: uint16(30431), + 152: uint16(30555), + 153: uint16(30571), + 154: uint16(30566), + 155: uint16(30558), + 156: uint16(30563), + }, + 23: { + 0: uint16(30585), + 1: uint16(30570), + 2: uint16(30572), + 3: uint16(30556), + 4: uint16(30565), + 5: uint16(30568), + 6: uint16(30562), + 7: uint16(30702), + 8: uint16(30862), + 9: uint16(30896), + 10: uint16(30871), + 11: uint16(30872), + 12: uint16(30860), + 13: uint16(30857), + 14: uint16(30844), + 15: uint16(30865), + 16: uint16(30867), + 17: uint16(30847), + 18: uint16(31098), + 19: uint16(31103), + 20: uint16(31105), + 21: uint16(33836), + 22: uint16(31165), + 23: uint16(31260), + 24: uint16(31258), + 25: uint16(31264), + 26: uint16(31252), + 27: uint16(31263), + 28: uint16(31262), + 29: uint16(31391), + 30: uint16(31392), + 31: uint16(31607), + 32: uint16(31680), + 33: uint16(31584), + 34: uint16(31598), + 35: uint16(31591), + 36: uint16(31921), + 37: uint16(31923), + 38: uint16(31925), + 39: uint16(32147), + 40: uint16(32121), + 41: uint16(32145), + 42: uint16(32129), + 43: uint16(32143), + 44: uint16(32091), + 45: uint16(32622), + 46: uint16(32617), + 47: uint16(32618), + 48: uint16(32626), + 49: uint16(32681), + 50: uint16(32680), + 51: uint16(32676), + 52: uint16(32854), + 53: uint16(32856), + 54: uint16(32902), + 55: uint16(32900), + 56: uint16(33137), + 57: uint16(33136), + 58: uint16(33144), + 59: uint16(33125), + 60: uint16(33134), + 61: uint16(33139), + 62: uint16(33131), + 63: uint16(33145), + 64: uint16(33146), + 65: uint16(33126), + 66: uint16(33285), + 67: uint16(33351), + 68: uint16(33922), + 69: uint16(33911), + 70: uint16(33853), + 71: uint16(33841), + 72: uint16(33909), + 73: uint16(33894), + 74: uint16(33899), + 75: uint16(33865), + 76: uint16(33900), + 77: uint16(33883), + 78: uint16(33852), + 79: uint16(33845), + 80: uint16(33889), + 81: uint16(33891), + 82: uint16(33897), + 83: uint16(33901), + 84: uint16(33862), + 85: uint16(34398), + 86: uint16(34396), + 87: uint16(34399), + 88: uint16(34553), + 89: uint16(34579), + 90: uint16(34568), + 91: uint16(34567), + 92: uint16(34560), + 93: uint16(34558), + 94: uint16(34555), + 95: uint16(34562), + 96: uint16(34563), + 97: uint16(34566), + 98: uint16(34570), + 99: uint16(34905), + 100: uint16(35039), + 101: uint16(35028), + 102: uint16(35033), + 103: uint16(35036), + 104: uint16(35032), + 105: uint16(35037), + 106: uint16(35041), + 107: uint16(35018), + 108: uint16(35029), + 109: uint16(35026), + 110: uint16(35228), + 111: uint16(35299), + 112: uint16(35435), + 113: uint16(35442), + 114: uint16(35443), + 115: uint16(35430), + 116: uint16(35433), + 117: uint16(35440), + 118: uint16(35463), + 119: uint16(35452), + 120: uint16(35427), + 121: uint16(35488), + 122: uint16(35441), + 123: uint16(35461), + 124: uint16(35437), + 125: uint16(35426), + 126: uint16(35438), + 127: uint16(35436), + 128: uint16(35449), + 129: uint16(35451), + 130: uint16(35390), + 131: uint16(35432), + 132: uint16(35938), + 133: uint16(35978), + 134: uint16(35977), + 135: uint16(36042), + 136: uint16(36039), + 137: uint16(36040), + 138: uint16(36036), + 139: uint16(36018), + 140: uint16(36035), + 141: uint16(36034), + 142: uint16(36037), + 143: uint16(36321), + 144: uint16(36319), + 145: uint16(36328), + 146: uint16(36335), + 147: uint16(36339), + 148: uint16(36346), + 149: uint16(36330), + 150: uint16(36324), + 151: uint16(36326), + 152: uint16(36530), + 153: uint16(36611), + 154: uint16(36617), + 155: uint16(36606), + 156: uint16(36618), + }, + 24: { + 0: uint16(36767), + 1: uint16(36786), + 2: uint16(36939), + 3: uint16(36938), + 4: uint16(36947), + 5: uint16(36930), + 6: uint16(36948), + 7: uint16(36924), + 8: uint16(36949), + 9: uint16(36944), + 10: uint16(36935), + 11: uint16(36943), + 12: uint16(36942), + 13: uint16(36941), + 14: uint16(36945), + 15: uint16(36926), + 16: uint16(36929), + 17: uint16(37138), + 18: uint16(37143), + 19: uint16(37228), + 20: uint16(37226), + 21: uint16(37225), + 22: uint16(37321), + 23: uint16(37431), + 24: uint16(37463), + 25: uint16(37432), + 26: uint16(37437), + 27: uint16(37440), + 28: uint16(37438), + 29: uint16(37467), + 30: uint16(37451), + 31: uint16(37476), + 32: uint16(37457), + 33: uint16(37428), + 34: uint16(37449), + 35: uint16(37453), + 36: uint16(37445), + 37: uint16(37433), + 38: uint16(37439), + 39: uint16(37466), + 40: uint16(38296), + 41: uint16(38552), + 42: uint16(38548), + 43: uint16(38549), + 44: uint16(38605), + 45: uint16(38603), + 46: uint16(38601), + 47: uint16(38602), + 48: uint16(38647), + 49: uint16(38651), + 50: uint16(38649), + 51: uint16(38646), + 52: uint16(38742), + 53: uint16(38772), + 54: uint16(38774), + 55: uint16(38928), + 56: uint16(38929), + 57: uint16(38931), + 58: uint16(38922), + 59: uint16(38930), + 60: uint16(38924), + 61: uint16(39164), + 62: uint16(39156), + 63: uint16(39165), + 64: uint16(39166), + 65: uint16(39347), + 66: uint16(39345), + 67: uint16(39348), + 68: uint16(39649), + 69: uint16(40169), + 70: uint16(40578), + 71: uint16(40718), + 72: uint16(40723), + 73: uint16(40736), + 74: uint16(20711), + 75: uint16(20718), + 76: uint16(20709), + 77: uint16(20694), + 78: uint16(20717), + 79: uint16(20698), + 80: uint16(20693), + 81: uint16(20687), + 82: uint16(20689), + 83: uint16(20721), + 84: uint16(20686), + 85: uint16(20713), + 86: uint16(20834), + 87: uint16(20979), + 88: uint16(21123), + 89: uint16(21122), + 90: uint16(21297), + 91: uint16(21421), + 92: uint16(22014), + 93: uint16(22016), + 94: uint16(22043), + 95: uint16(22039), + 96: uint16(22013), + 97: uint16(22036), + 98: uint16(22022), + 99: uint16(22025), + 100: uint16(22029), + 101: uint16(22030), + 102: uint16(22007), + 103: uint16(22038), + 104: uint16(22047), + 105: uint16(22024), + 106: uint16(22032), + 107: uint16(22006), + 108: uint16(22296), + 109: uint16(22294), + 110: uint16(22645), + 111: uint16(22654), + 112: uint16(22659), + 113: uint16(22675), + 114: uint16(22666), + 115: uint16(22649), + 116: uint16(22661), + 117: uint16(22653), + 118: uint16(22781), + 119: uint16(22821), + 120: uint16(22818), + 121: uint16(22820), + 122: uint16(22890), + 123: uint16(22889), + 124: uint16(23265), + 125: uint16(23270), + 126: uint16(23273), + 127: uint16(23255), + 128: uint16(23254), + 129: uint16(23256), + 130: uint16(23267), + 131: uint16(23413), + 132: uint16(23518), + 133: uint16(23527), + 134: uint16(23521), + 135: uint16(23525), + 136: uint16(23526), + 137: uint16(23528), + 138: uint16(23522), + 139: uint16(23524), + 140: uint16(23519), + 141: uint16(23565), + 142: uint16(23650), + 143: uint16(23940), + 144: uint16(23943), + 145: uint16(24155), + 146: uint16(24163), + 147: uint16(24149), + 148: uint16(24151), + 149: uint16(24148), + 150: uint16(24275), + 151: uint16(24278), + 152: uint16(24330), + 153: uint16(24390), + 154: uint16(24432), + 155: uint16(24505), + 156: uint16(24903), + }, + 25: { + 0: uint16(24895), + 1: uint16(24907), + 2: uint16(24951), + 3: uint16(24930), + 4: uint16(24931), + 5: uint16(24927), + 6: uint16(24922), + 7: uint16(24920), + 8: uint16(24949), + 9: uint16(25130), + 10: uint16(25735), + 11: uint16(25688), + 12: uint16(25684), + 13: uint16(25764), + 14: uint16(25720), + 15: uint16(25695), + 16: uint16(25722), + 17: uint16(25681), + 18: uint16(25703), + 19: uint16(25652), + 20: uint16(25709), + 21: uint16(25723), + 22: uint16(25970), + 23: uint16(26017), + 24: uint16(26071), + 25: uint16(26070), + 26: uint16(26274), + 27: uint16(26280), + 28: uint16(26269), + 29: uint16(27036), + 30: uint16(27048), + 31: uint16(27029), + 32: uint16(27073), + 33: uint16(27054), + 34: uint16(27091), + 35: uint16(27083), + 36: uint16(27035), + 37: uint16(27063), + 38: uint16(27067), + 39: uint16(27051), + 40: uint16(27060), + 41: uint16(27088), + 42: uint16(27085), + 43: uint16(27053), + 44: uint16(27084), + 45: uint16(27046), + 46: uint16(27075), + 47: uint16(27043), + 48: uint16(27465), + 49: uint16(27468), + 50: uint16(27699), + 51: uint16(28467), + 52: uint16(28436), + 53: uint16(28414), + 54: uint16(28435), + 55: uint16(28404), + 56: uint16(28457), + 57: uint16(28478), + 58: uint16(28448), + 59: uint16(28460), + 60: uint16(28431), + 61: uint16(28418), + 62: uint16(28450), + 63: uint16(28415), + 64: uint16(28399), + 65: uint16(28422), + 66: uint16(28465), + 67: uint16(28472), + 68: uint16(28466), + 69: uint16(28451), + 70: uint16(28437), + 71: uint16(28459), + 72: uint16(28463), + 73: uint16(28552), + 74: uint16(28458), + 75: uint16(28396), + 76: uint16(28417), + 77: uint16(28402), + 78: uint16(28364), + 79: uint16(28407), + 80: uint16(29076), + 81: uint16(29081), + 82: uint16(29053), + 83: uint16(29066), + 84: uint16(29060), + 85: uint16(29074), + 86: uint16(29246), + 87: uint16(29330), + 88: uint16(29334), + 89: uint16(29508), + 90: uint16(29520), + 91: uint16(29796), + 92: uint16(29795), + 93: uint16(29802), + 94: uint16(29808), + 95: uint16(29805), + 96: uint16(29956), + 97: uint16(30097), + 98: uint16(30247), + 99: uint16(30221), + 100: uint16(30219), + 101: uint16(30217), + 102: uint16(30227), + 103: uint16(30433), + 104: uint16(30435), + 105: uint16(30596), + 106: uint16(30589), + 107: uint16(30591), + 108: uint16(30561), + 109: uint16(30913), + 110: uint16(30879), + 111: uint16(30887), + 112: uint16(30899), + 113: uint16(30889), + 114: uint16(30883), + 115: uint16(31118), + 116: uint16(31119), + 117: uint16(31117), + 118: uint16(31278), + 119: uint16(31281), + 120: uint16(31402), + 121: uint16(31401), + 122: uint16(31469), + 123: uint16(31471), + 124: uint16(31649), + 125: uint16(31637), + 126: uint16(31627), + 127: uint16(31605), + 128: uint16(31639), + 129: uint16(31645), + 130: uint16(31636), + 131: uint16(31631), + 132: uint16(31672), + 133: uint16(31623), + 134: uint16(31620), + 135: uint16(31929), + 136: uint16(31933), + 137: uint16(31934), + 138: uint16(32187), + 139: uint16(32176), + 140: uint16(32156), + 141: uint16(32189), + 142: uint16(32190), + 143: uint16(32160), + 144: uint16(32202), + 145: uint16(32180), + 146: uint16(32178), + 147: uint16(32177), + 148: uint16(32186), + 149: uint16(32162), + 150: uint16(32191), + 151: uint16(32181), + 152: uint16(32184), + 153: uint16(32173), + 154: uint16(32210), + 155: uint16(32199), + 156: uint16(32172), + }, + 26: { + 0: uint16(32624), + 1: uint16(32736), + 2: uint16(32737), + 3: uint16(32735), + 4: uint16(32862), + 5: uint16(32858), + 6: uint16(32903), + 7: uint16(33104), + 8: uint16(33152), + 9: uint16(33167), + 10: uint16(33160), + 11: uint16(33162), + 12: uint16(33151), + 13: uint16(33154), + 14: uint16(33255), + 15: uint16(33274), + 16: uint16(33287), + 17: uint16(33300), + 18: uint16(33310), + 19: uint16(33355), + 20: uint16(33993), + 21: uint16(33983), + 22: uint16(33990), + 23: uint16(33988), + 24: uint16(33945), + 25: uint16(33950), + 26: uint16(33970), + 27: uint16(33948), + 28: uint16(33995), + 29: uint16(33976), + 30: uint16(33984), + 31: uint16(34003), + 32: uint16(33936), + 33: uint16(33980), + 34: uint16(34001), + 35: uint16(33994), + 36: uint16(34623), + 37: uint16(34588), + 38: uint16(34619), + 39: uint16(34594), + 40: uint16(34597), + 41: uint16(34612), + 42: uint16(34584), + 43: uint16(34645), + 44: uint16(34615), + 45: uint16(34601), + 46: uint16(35059), + 47: uint16(35074), + 48: uint16(35060), + 49: uint16(35065), + 50: uint16(35064), + 51: uint16(35069), + 52: uint16(35048), + 53: uint16(35098), + 54: uint16(35055), + 55: uint16(35494), + 56: uint16(35468), + 57: uint16(35486), + 58: uint16(35491), + 59: uint16(35469), + 60: uint16(35489), + 61: uint16(35475), + 62: uint16(35492), + 63: uint16(35498), + 64: uint16(35493), + 65: uint16(35496), + 66: uint16(35480), + 67: uint16(35473), + 68: uint16(35482), + 69: uint16(35495), + 70: uint16(35946), + 71: uint16(35981), + 72: uint16(35980), + 73: uint16(36051), + 74: uint16(36049), + 75: uint16(36050), + 76: uint16(36203), + 77: uint16(36249), + 78: uint16(36245), + 79: uint16(36348), + 80: uint16(36628), + 81: uint16(36626), + 82: uint16(36629), + 83: uint16(36627), + 84: uint16(36771), + 85: uint16(36960), + 86: uint16(36952), + 87: uint16(36956), + 88: uint16(36963), + 89: uint16(36953), + 90: uint16(36958), + 91: uint16(36962), + 92: uint16(36957), + 93: uint16(36955), + 94: uint16(37145), + 95: uint16(37144), + 96: uint16(37150), + 97: uint16(37237), + 98: uint16(37240), + 99: uint16(37239), + 100: uint16(37236), + 101: uint16(37496), + 102: uint16(37504), + 103: uint16(37509), + 104: uint16(37528), + 105: uint16(37526), + 106: uint16(37499), + 107: uint16(37523), + 108: uint16(37532), + 109: uint16(37544), + 110: uint16(37500), + 111: uint16(37521), + 112: uint16(38305), + 113: uint16(38312), + 114: uint16(38313), + 115: uint16(38307), + 116: uint16(38309), + 117: uint16(38308), + 118: uint16(38553), + 119: uint16(38556), + 120: uint16(38555), + 121: uint16(38604), + 122: uint16(38610), + 123: uint16(38656), + 124: uint16(38780), + 125: uint16(38789), + 126: uint16(38902), + 127: uint16(38935), + 128: uint16(38936), + 129: uint16(39087), + 130: uint16(39089), + 131: uint16(39171), + 132: uint16(39173), + 133: uint16(39180), + 134: uint16(39177), + 135: uint16(39361), + 136: uint16(39599), + 137: uint16(39600), + 138: uint16(39654), + 139: uint16(39745), + 140: uint16(39746), + 141: uint16(40180), + 142: uint16(40182), + 143: uint16(40179), + 144: uint16(40636), + 145: uint16(40763), + 146: uint16(40778), + 147: uint16(20740), + 148: uint16(20736), + 149: uint16(20731), + 150: uint16(20725), + 151: uint16(20729), + 152: uint16(20738), + 153: uint16(20744), + 154: uint16(20745), + 155: uint16(20741), + 156: uint16(20956), + }, + 27: { + 0: uint16(21127), + 1: uint16(21128), + 2: uint16(21129), + 3: uint16(21133), + 4: uint16(21130), + 5: uint16(21232), + 6: uint16(21426), + 7: uint16(22062), + 8: uint16(22075), + 9: uint16(22073), + 10: uint16(22066), + 11: uint16(22079), + 12: uint16(22068), + 13: uint16(22057), + 14: uint16(22099), + 15: uint16(22094), + 16: uint16(22103), + 17: uint16(22132), + 18: uint16(22070), + 19: uint16(22063), + 20: uint16(22064), + 21: uint16(22656), + 22: uint16(22687), + 23: uint16(22686), + 24: uint16(22707), + 25: uint16(22684), + 26: uint16(22702), + 27: uint16(22697), + 28: uint16(22694), + 29: uint16(22893), + 30: uint16(23305), + 31: uint16(23291), + 32: uint16(23307), + 33: uint16(23285), + 34: uint16(23308), + 35: uint16(23304), + 36: uint16(23534), + 37: uint16(23532), + 38: uint16(23529), + 39: uint16(23531), + 40: uint16(23652), + 41: uint16(23653), + 42: uint16(23965), + 43: uint16(23956), + 44: uint16(24162), + 45: uint16(24159), + 46: uint16(24161), + 47: uint16(24290), + 48: uint16(24282), + 49: uint16(24287), + 50: uint16(24285), + 51: uint16(24291), + 52: uint16(24288), + 53: uint16(24392), + 54: uint16(24433), + 55: uint16(24503), + 56: uint16(24501), + 57: uint16(24950), + 58: uint16(24935), + 59: uint16(24942), + 60: uint16(24925), + 61: uint16(24917), + 62: uint16(24962), + 63: uint16(24956), + 64: uint16(24944), + 65: uint16(24939), + 66: uint16(24958), + 67: uint16(24999), + 68: uint16(24976), + 69: uint16(25003), + 70: uint16(24974), + 71: uint16(25004), + 72: uint16(24986), + 73: uint16(24996), + 74: uint16(24980), + 75: uint16(25006), + 76: uint16(25134), + 77: uint16(25705), + 78: uint16(25711), + 79: uint16(25721), + 80: uint16(25758), + 81: uint16(25778), + 82: uint16(25736), + 83: uint16(25744), + 84: uint16(25776), + 85: uint16(25765), + 86: uint16(25747), + 87: uint16(25749), + 88: uint16(25769), + 89: uint16(25746), + 90: uint16(25774), + 91: uint16(25773), + 92: uint16(25771), + 93: uint16(25754), + 94: uint16(25772), + 95: uint16(25753), + 96: uint16(25762), + 97: uint16(25779), + 98: uint16(25973), + 99: uint16(25975), + 100: uint16(25976), + 101: uint16(26286), + 102: uint16(26283), + 103: uint16(26292), + 104: uint16(26289), + 105: uint16(27171), + 106: uint16(27167), + 107: uint16(27112), + 108: uint16(27137), + 109: uint16(27166), + 110: uint16(27161), + 111: uint16(27133), + 112: uint16(27169), + 113: uint16(27155), + 114: uint16(27146), + 115: uint16(27123), + 116: uint16(27138), + 117: uint16(27141), + 118: uint16(27117), + 119: uint16(27153), + 120: uint16(27472), + 121: uint16(27470), + 122: uint16(27556), + 123: uint16(27589), + 124: uint16(27590), + 125: uint16(28479), + 126: uint16(28540), + 127: uint16(28548), + 128: uint16(28497), + 129: uint16(28518), + 130: uint16(28500), + 131: uint16(28550), + 132: uint16(28525), + 133: uint16(28507), + 134: uint16(28536), + 135: uint16(28526), + 136: uint16(28558), + 137: uint16(28538), + 138: uint16(28528), + 139: uint16(28516), + 140: uint16(28567), + 141: uint16(28504), + 142: uint16(28373), + 143: uint16(28527), + 144: uint16(28512), + 145: uint16(28511), + 146: uint16(29087), + 147: uint16(29100), + 148: uint16(29105), + 149: uint16(29096), + 150: uint16(29270), + 151: uint16(29339), + 152: uint16(29518), + 153: uint16(29527), + 154: uint16(29801), + 155: uint16(29835), + 156: uint16(29827), + }, + 28: { + 0: uint16(29822), + 1: uint16(29824), + 2: uint16(30079), + 3: uint16(30240), + 4: uint16(30249), + 5: uint16(30239), + 6: uint16(30244), + 7: uint16(30246), + 8: uint16(30241), + 9: uint16(30242), + 10: uint16(30362), + 11: uint16(30394), + 12: uint16(30436), + 13: uint16(30606), + 14: uint16(30599), + 15: uint16(30604), + 16: uint16(30609), + 17: uint16(30603), + 18: uint16(30923), + 19: uint16(30917), + 20: uint16(30906), + 21: uint16(30922), + 22: uint16(30910), + 23: uint16(30933), + 24: uint16(30908), + 25: uint16(30928), + 26: uint16(31295), + 27: uint16(31292), + 28: uint16(31296), + 29: uint16(31293), + 30: uint16(31287), + 31: uint16(31291), + 32: uint16(31407), + 33: uint16(31406), + 34: uint16(31661), + 35: uint16(31665), + 36: uint16(31684), + 37: uint16(31668), + 38: uint16(31686), + 39: uint16(31687), + 40: uint16(31681), + 41: uint16(31648), + 42: uint16(31692), + 43: uint16(31946), + 44: uint16(32224), + 45: uint16(32244), + 46: uint16(32239), + 47: uint16(32251), + 48: uint16(32216), + 49: uint16(32236), + 50: uint16(32221), + 51: uint16(32232), + 52: uint16(32227), + 53: uint16(32218), + 54: uint16(32222), + 55: uint16(32233), + 56: uint16(32158), + 57: uint16(32217), + 58: uint16(32242), + 59: uint16(32249), + 60: uint16(32629), + 61: uint16(32631), + 62: uint16(32687), + 63: uint16(32745), + 64: uint16(32806), + 65: uint16(33179), + 66: uint16(33180), + 67: uint16(33181), + 68: uint16(33184), + 69: uint16(33178), + 70: uint16(33176), + 71: uint16(34071), + 72: uint16(34109), + 73: uint16(34074), + 74: uint16(34030), + 75: uint16(34092), + 76: uint16(34093), + 77: uint16(34067), + 78: uint16(34065), + 79: uint16(34083), + 80: uint16(34081), + 81: uint16(34068), + 82: uint16(34028), + 83: uint16(34085), + 84: uint16(34047), + 85: uint16(34054), + 86: uint16(34690), + 87: uint16(34676), + 88: uint16(34678), + 89: uint16(34656), + 90: uint16(34662), + 91: uint16(34680), + 92: uint16(34664), + 93: uint16(34649), + 94: uint16(34647), + 95: uint16(34636), + 96: uint16(34643), + 97: uint16(34907), + 98: uint16(34909), + 99: uint16(35088), + 100: uint16(35079), + 101: uint16(35090), + 102: uint16(35091), + 103: uint16(35093), + 104: uint16(35082), + 105: uint16(35516), + 106: uint16(35538), + 107: uint16(35527), + 108: uint16(35524), + 109: uint16(35477), + 110: uint16(35531), + 111: uint16(35576), + 112: uint16(35506), + 113: uint16(35529), + 114: uint16(35522), + 115: uint16(35519), + 116: uint16(35504), + 117: uint16(35542), + 118: uint16(35533), + 119: uint16(35510), + 120: uint16(35513), + 121: uint16(35547), + 122: uint16(35916), + 123: uint16(35918), + 124: uint16(35948), + 125: uint16(36064), + 126: uint16(36062), + 127: uint16(36070), + 128: uint16(36068), + 129: uint16(36076), + 130: uint16(36077), + 131: uint16(36066), + 132: uint16(36067), + 133: uint16(36060), + 134: uint16(36074), + 135: uint16(36065), + 136: uint16(36205), + 137: uint16(36255), + 138: uint16(36259), + 139: uint16(36395), + 140: uint16(36368), + 141: uint16(36381), + 142: uint16(36386), + 143: uint16(36367), + 144: uint16(36393), + 145: uint16(36383), + 146: uint16(36385), + 147: uint16(36382), + 148: uint16(36538), + 149: uint16(36637), + 150: uint16(36635), + 151: uint16(36639), + 152: uint16(36649), + 153: uint16(36646), + 154: uint16(36650), + 155: uint16(36636), + 156: uint16(36638), + }, + 29: { + 0: uint16(36645), + 1: uint16(36969), + 2: uint16(36974), + 3: uint16(36968), + 4: uint16(36973), + 5: uint16(36983), + 6: uint16(37168), + 7: uint16(37165), + 8: uint16(37159), + 9: uint16(37169), + 10: uint16(37255), + 11: uint16(37257), + 12: uint16(37259), + 13: uint16(37251), + 14: uint16(37573), + 15: uint16(37563), + 16: uint16(37559), + 17: uint16(37610), + 18: uint16(37548), + 19: uint16(37604), + 20: uint16(37569), + 21: uint16(37555), + 22: uint16(37564), + 23: uint16(37586), + 24: uint16(37575), + 25: uint16(37616), + 26: uint16(37554), + 27: uint16(38317), + 28: uint16(38321), + 29: uint16(38660), + 30: uint16(38662), + 31: uint16(38663), + 32: uint16(38665), + 33: uint16(38752), + 34: uint16(38797), + 35: uint16(38795), + 36: uint16(38799), + 37: uint16(38945), + 38: uint16(38955), + 39: uint16(38940), + 40: uint16(39091), + 41: uint16(39178), + 42: uint16(39187), + 43: uint16(39186), + 44: uint16(39192), + 45: uint16(39389), + 46: uint16(39376), + 47: uint16(39391), + 48: uint16(39387), + 49: uint16(39377), + 50: uint16(39381), + 51: uint16(39378), + 52: uint16(39385), + 53: uint16(39607), + 54: uint16(39662), + 55: uint16(39663), + 56: uint16(39719), + 57: uint16(39749), + 58: uint16(39748), + 59: uint16(39799), + 60: uint16(39791), + 61: uint16(40198), + 62: uint16(40201), + 63: uint16(40195), + 64: uint16(40617), + 65: uint16(40638), + 66: uint16(40654), + 67: uint16(22696), + 68: uint16(40786), + 69: uint16(20754), + 70: uint16(20760), + 71: uint16(20756), + 72: uint16(20752), + 73: uint16(20757), + 74: uint16(20864), + 75: uint16(20906), + 76: uint16(20957), + 77: uint16(21137), + 78: uint16(21139), + 79: uint16(21235), + 80: uint16(22105), + 81: uint16(22123), + 82: uint16(22137), + 83: uint16(22121), + 84: uint16(22116), + 85: uint16(22136), + 86: uint16(22122), + 87: uint16(22120), + 88: uint16(22117), + 89: uint16(22129), + 90: uint16(22127), + 91: uint16(22124), + 92: uint16(22114), + 93: uint16(22134), + 94: uint16(22721), + 95: uint16(22718), + 96: uint16(22727), + 97: uint16(22725), + 98: uint16(22894), + 99: uint16(23325), + 100: uint16(23348), + 101: uint16(23416), + 102: uint16(23536), + 103: uint16(23566), + 104: uint16(24394), + 105: uint16(25010), + 106: uint16(24977), + 107: uint16(25001), + 108: uint16(24970), + 109: uint16(25037), + 110: uint16(25014), + 111: uint16(25022), + 112: uint16(25034), + 113: uint16(25032), + 114: uint16(25136), + 115: uint16(25797), + 116: uint16(25793), + 117: uint16(25803), + 118: uint16(25787), + 119: uint16(25788), + 120: uint16(25818), + 121: uint16(25796), + 122: uint16(25799), + 123: uint16(25794), + 124: uint16(25805), + 125: uint16(25791), + 126: uint16(25810), + 127: uint16(25812), + 128: uint16(25790), + 129: uint16(25972), + 130: uint16(26310), + 131: uint16(26313), + 132: uint16(26297), + 133: uint16(26308), + 134: uint16(26311), + 135: uint16(26296), + 136: uint16(27197), + 137: uint16(27192), + 138: uint16(27194), + 139: uint16(27225), + 140: uint16(27243), + 141: uint16(27224), + 142: uint16(27193), + 143: uint16(27204), + 144: uint16(27234), + 145: uint16(27233), + 146: uint16(27211), + 147: uint16(27207), + 148: uint16(27189), + 149: uint16(27231), + 150: uint16(27208), + 151: uint16(27481), + 152: uint16(27511), + 153: uint16(27653), + 154: uint16(28610), + 155: uint16(28593), + 156: uint16(28577), + }, + 30: { + 0: uint16(28611), + 1: uint16(28580), + 2: uint16(28609), + 3: uint16(28583), + 4: uint16(28595), + 5: uint16(28608), + 6: uint16(28601), + 7: uint16(28598), + 8: uint16(28582), + 9: uint16(28576), + 10: uint16(28596), + 11: uint16(29118), + 12: uint16(29129), + 13: uint16(29136), + 14: uint16(29138), + 15: uint16(29128), + 16: uint16(29141), + 17: uint16(29113), + 18: uint16(29134), + 19: uint16(29145), + 20: uint16(29148), + 21: uint16(29123), + 22: uint16(29124), + 23: uint16(29544), + 24: uint16(29852), + 25: uint16(29859), + 26: uint16(29848), + 27: uint16(29855), + 28: uint16(29854), + 29: uint16(29922), + 30: uint16(29964), + 31: uint16(29965), + 32: uint16(30260), + 33: uint16(30264), + 34: uint16(30266), + 35: uint16(30439), + 36: uint16(30437), + 37: uint16(30624), + 38: uint16(30622), + 39: uint16(30623), + 40: uint16(30629), + 41: uint16(30952), + 42: uint16(30938), + 43: uint16(30956), + 44: uint16(30951), + 45: uint16(31142), + 46: uint16(31309), + 47: uint16(31310), + 48: uint16(31302), + 49: uint16(31308), + 50: uint16(31307), + 51: uint16(31418), + 52: uint16(31705), + 53: uint16(31761), + 54: uint16(31689), + 55: uint16(31716), + 56: uint16(31707), + 57: uint16(31713), + 58: uint16(31721), + 59: uint16(31718), + 60: uint16(31957), + 61: uint16(31958), + 62: uint16(32266), + 63: uint16(32273), + 64: uint16(32264), + 65: uint16(32283), + 66: uint16(32291), + 67: uint16(32286), + 68: uint16(32285), + 69: uint16(32265), + 70: uint16(32272), + 71: uint16(32633), + 72: uint16(32690), + 73: uint16(32752), + 74: uint16(32753), + 75: uint16(32750), + 76: uint16(32808), + 77: uint16(33203), + 78: uint16(33193), + 79: uint16(33192), + 80: uint16(33275), + 81: uint16(33288), + 82: uint16(33368), + 83: uint16(33369), + 84: uint16(34122), + 85: uint16(34137), + 86: uint16(34120), + 87: uint16(34152), + 88: uint16(34153), + 89: uint16(34115), + 90: uint16(34121), + 91: uint16(34157), + 92: uint16(34154), + 93: uint16(34142), + 94: uint16(34691), + 95: uint16(34719), + 96: uint16(34718), + 97: uint16(34722), + 98: uint16(34701), + 99: uint16(34913), + 100: uint16(35114), + 101: uint16(35122), + 102: uint16(35109), + 103: uint16(35115), + 104: uint16(35105), + 105: uint16(35242), + 106: uint16(35238), + 107: uint16(35558), + 108: uint16(35578), + 109: uint16(35563), + 110: uint16(35569), + 111: uint16(35584), + 112: uint16(35548), + 113: uint16(35559), + 114: uint16(35566), + 115: uint16(35582), + 116: uint16(35585), + 117: uint16(35586), + 118: uint16(35575), + 119: uint16(35565), + 120: uint16(35571), + 121: uint16(35574), + 122: uint16(35580), + 123: uint16(35947), + 124: uint16(35949), + 125: uint16(35987), + 126: uint16(36084), + 127: uint16(36420), + 128: uint16(36401), + 129: uint16(36404), + 130: uint16(36418), + 131: uint16(36409), + 132: uint16(36405), + 133: uint16(36667), + 134: uint16(36655), + 135: uint16(36664), + 136: uint16(36659), + 137: uint16(36776), + 138: uint16(36774), + 139: uint16(36981), + 140: uint16(36980), + 141: uint16(36984), + 142: uint16(36978), + 143: uint16(36988), + 144: uint16(36986), + 145: uint16(37172), + 146: uint16(37266), + 147: uint16(37664), + 148: uint16(37686), + 149: uint16(37624), + 150: uint16(37683), + 151: uint16(37679), + 152: uint16(37666), + 153: uint16(37628), + 154: uint16(37675), + 155: uint16(37636), + 156: uint16(37658), + }, + 31: { + 0: uint16(37648), + 1: uint16(37670), + 2: uint16(37665), + 3: uint16(37653), + 4: uint16(37678), + 5: uint16(37657), + 6: uint16(38331), + 7: uint16(38567), + 8: uint16(38568), + 9: uint16(38570), + 10: uint16(38613), + 11: uint16(38670), + 12: uint16(38673), + 13: uint16(38678), + 14: uint16(38669), + 15: uint16(38675), + 16: uint16(38671), + 17: uint16(38747), + 18: uint16(38748), + 19: uint16(38758), + 20: uint16(38808), + 21: uint16(38960), + 22: uint16(38968), + 23: uint16(38971), + 24: uint16(38967), + 25: uint16(38957), + 26: uint16(38969), + 27: uint16(38948), + 28: uint16(39184), + 29: uint16(39208), + 30: uint16(39198), + 31: uint16(39195), + 32: uint16(39201), + 33: uint16(39194), + 34: uint16(39405), + 35: uint16(39394), + 36: uint16(39409), + 37: uint16(39608), + 38: uint16(39612), + 39: uint16(39675), + 40: uint16(39661), + 41: uint16(39720), + 42: uint16(39825), + 43: uint16(40213), + 44: uint16(40227), + 45: uint16(40230), + 46: uint16(40232), + 47: uint16(40210), + 48: uint16(40219), + 49: uint16(40664), + 50: uint16(40660), + 51: uint16(40845), + 52: uint16(40860), + 53: uint16(20778), + 54: uint16(20767), + 55: uint16(20769), + 56: uint16(20786), + 57: uint16(21237), + 58: uint16(22158), + 59: uint16(22144), + 60: uint16(22160), + 61: uint16(22149), + 62: uint16(22151), + 63: uint16(22159), + 64: uint16(22741), + 65: uint16(22739), + 66: uint16(22737), + 67: uint16(22734), + 68: uint16(23344), + 69: uint16(23338), + 70: uint16(23332), + 71: uint16(23418), + 72: uint16(23607), + 73: uint16(23656), + 74: uint16(23996), + 75: uint16(23994), + 76: uint16(23997), + 77: uint16(23992), + 78: uint16(24171), + 79: uint16(24396), + 80: uint16(24509), + 81: uint16(25033), + 82: uint16(25026), + 83: uint16(25031), + 84: uint16(25062), + 85: uint16(25035), + 86: uint16(25138), + 87: uint16(25140), + 88: uint16(25806), + 89: uint16(25802), + 90: uint16(25816), + 91: uint16(25824), + 92: uint16(25840), + 93: uint16(25830), + 94: uint16(25836), + 95: uint16(25841), + 96: uint16(25826), + 97: uint16(25837), + 98: uint16(25986), + 99: uint16(25987), + 100: uint16(26329), + 101: uint16(26326), + 102: uint16(27264), + 103: uint16(27284), + 104: uint16(27268), + 105: uint16(27298), + 106: uint16(27292), + 107: uint16(27355), + 108: uint16(27299), + 109: uint16(27262), + 110: uint16(27287), + 111: uint16(27280), + 112: uint16(27296), + 113: uint16(27484), + 114: uint16(27566), + 115: uint16(27610), + 116: uint16(27656), + 117: uint16(28632), + 118: uint16(28657), + 119: uint16(28639), + 120: uint16(28640), + 121: uint16(28635), + 122: uint16(28644), + 123: uint16(28651), + 124: uint16(28655), + 125: uint16(28544), + 126: uint16(28652), + 127: uint16(28641), + 128: uint16(28649), + 129: uint16(28629), + 130: uint16(28654), + 131: uint16(28656), + 132: uint16(29159), + 133: uint16(29151), + 134: uint16(29166), + 135: uint16(29158), + 136: uint16(29157), + 137: uint16(29165), + 138: uint16(29164), + 139: uint16(29172), + 140: uint16(29152), + 141: uint16(29237), + 142: uint16(29254), + 143: uint16(29552), + 144: uint16(29554), + 145: uint16(29865), + 146: uint16(29872), + 147: uint16(29862), + 148: uint16(29864), + 149: uint16(30278), + 150: uint16(30274), + 151: uint16(30284), + 152: uint16(30442), + 153: uint16(30643), + 154: uint16(30634), + 155: uint16(30640), + 156: uint16(30636), + }, + 32: { + 0: uint16(30631), + 1: uint16(30637), + 2: uint16(30703), + 3: uint16(30967), + 4: uint16(30970), + 5: uint16(30964), + 6: uint16(30959), + 7: uint16(30977), + 8: uint16(31143), + 9: uint16(31146), + 10: uint16(31319), + 11: uint16(31423), + 12: uint16(31751), + 13: uint16(31757), + 14: uint16(31742), + 15: uint16(31735), + 16: uint16(31756), + 17: uint16(31712), + 18: uint16(31968), + 19: uint16(31964), + 20: uint16(31966), + 21: uint16(31970), + 22: uint16(31967), + 23: uint16(31961), + 24: uint16(31965), + 25: uint16(32302), + 26: uint16(32318), + 27: uint16(32326), + 28: uint16(32311), + 29: uint16(32306), + 30: uint16(32323), + 31: uint16(32299), + 32: uint16(32317), + 33: uint16(32305), + 34: uint16(32325), + 35: uint16(32321), + 36: uint16(32308), + 37: uint16(32313), + 38: uint16(32328), + 39: uint16(32309), + 40: uint16(32319), + 41: uint16(32303), + 42: uint16(32580), + 43: uint16(32755), + 44: uint16(32764), + 45: uint16(32881), + 46: uint16(32882), + 47: uint16(32880), + 48: uint16(32879), + 49: uint16(32883), + 50: uint16(33222), + 51: uint16(33219), + 52: uint16(33210), + 53: uint16(33218), + 54: uint16(33216), + 55: uint16(33215), + 56: uint16(33213), + 57: uint16(33225), + 58: uint16(33214), + 59: uint16(33256), + 60: uint16(33289), + 61: uint16(33393), + 62: uint16(34218), + 63: uint16(34180), + 64: uint16(34174), + 65: uint16(34204), + 66: uint16(34193), + 67: uint16(34196), + 68: uint16(34223), + 69: uint16(34203), + 70: uint16(34183), + 71: uint16(34216), + 72: uint16(34186), + 73: uint16(34407), + 74: uint16(34752), + 75: uint16(34769), + 76: uint16(34739), + 77: uint16(34770), + 78: uint16(34758), + 79: uint16(34731), + 80: uint16(34747), + 81: uint16(34746), + 82: uint16(34760), + 83: uint16(34763), + 84: uint16(35131), + 85: uint16(35126), + 86: uint16(35140), + 87: uint16(35128), + 88: uint16(35133), + 89: uint16(35244), + 90: uint16(35598), + 91: uint16(35607), + 92: uint16(35609), + 93: uint16(35611), + 94: uint16(35594), + 95: uint16(35616), + 96: uint16(35613), + 97: uint16(35588), + 98: uint16(35600), + 99: uint16(35905), + 100: uint16(35903), + 101: uint16(35955), + 102: uint16(36090), + 103: uint16(36093), + 104: uint16(36092), + 105: uint16(36088), + 106: uint16(36091), + 107: uint16(36264), + 108: uint16(36425), + 109: uint16(36427), + 110: uint16(36424), + 111: uint16(36426), + 112: uint16(36676), + 113: uint16(36670), + 114: uint16(36674), + 115: uint16(36677), + 116: uint16(36671), + 117: uint16(36991), + 118: uint16(36989), + 119: uint16(36996), + 120: uint16(36993), + 121: uint16(36994), + 122: uint16(36992), + 123: uint16(37177), + 124: uint16(37283), + 125: uint16(37278), + 126: uint16(37276), + 127: uint16(37709), + 128: uint16(37762), + 129: uint16(37672), + 130: uint16(37749), + 131: uint16(37706), + 132: uint16(37733), + 133: uint16(37707), + 134: uint16(37656), + 135: uint16(37758), + 136: uint16(37740), + 137: uint16(37723), + 138: uint16(37744), + 139: uint16(37722), + 140: uint16(37716), + 141: uint16(38346), + 142: uint16(38347), + 143: uint16(38348), + 144: uint16(38344), + 145: uint16(38342), + 146: uint16(38577), + 147: uint16(38584), + 148: uint16(38614), + 149: uint16(38684), + 150: uint16(38686), + 151: uint16(38816), + 152: uint16(38867), + 153: uint16(38982), + 154: uint16(39094), + 155: uint16(39221), + 156: uint16(39425), + }, + 33: { + 0: uint16(39423), + 1: uint16(39854), + 2: uint16(39851), + 3: uint16(39850), + 4: uint16(39853), + 5: uint16(40251), + 6: uint16(40255), + 7: uint16(40587), + 8: uint16(40655), + 9: uint16(40670), + 10: uint16(40668), + 11: uint16(40669), + 12: uint16(40667), + 13: uint16(40766), + 14: uint16(40779), + 15: uint16(21474), + 16: uint16(22165), + 17: uint16(22190), + 18: uint16(22745), + 19: uint16(22744), + 20: uint16(23352), + 21: uint16(24413), + 22: uint16(25059), + 23: uint16(25139), + 24: uint16(25844), + 25: uint16(25842), + 26: uint16(25854), + 27: uint16(25862), + 28: uint16(25850), + 29: uint16(25851), + 30: uint16(25847), + 31: uint16(26039), + 32: uint16(26332), + 33: uint16(26406), + 34: uint16(27315), + 35: uint16(27308), + 36: uint16(27331), + 37: uint16(27323), + 38: uint16(27320), + 39: uint16(27330), + 40: uint16(27310), + 41: uint16(27311), + 42: uint16(27487), + 43: uint16(27512), + 44: uint16(27567), + 45: uint16(28681), + 46: uint16(28683), + 47: uint16(28670), + 48: uint16(28678), + 49: uint16(28666), + 50: uint16(28689), + 51: uint16(28687), + 52: uint16(29179), + 53: uint16(29180), + 54: uint16(29182), + 55: uint16(29176), + 56: uint16(29559), + 57: uint16(29557), + 58: uint16(29863), + 59: uint16(29887), + 60: uint16(29973), + 61: uint16(30294), + 62: uint16(30296), + 63: uint16(30290), + 64: uint16(30653), + 65: uint16(30655), + 66: uint16(30651), + 67: uint16(30652), + 68: uint16(30990), + 69: uint16(31150), + 70: uint16(31329), + 71: uint16(31330), + 72: uint16(31328), + 73: uint16(31428), + 74: uint16(31429), + 75: uint16(31787), + 76: uint16(31783), + 77: uint16(31786), + 78: uint16(31774), + 79: uint16(31779), + 80: uint16(31777), + 81: uint16(31975), + 82: uint16(32340), + 83: uint16(32341), + 84: uint16(32350), + 85: uint16(32346), + 86: uint16(32353), + 87: uint16(32338), + 88: uint16(32345), + 89: uint16(32584), + 90: uint16(32761), + 91: uint16(32763), + 92: uint16(32887), + 93: uint16(32886), + 94: uint16(33229), + 95: uint16(33231), + 96: uint16(33290), + 97: uint16(34255), + 98: uint16(34217), + 99: uint16(34253), + 100: uint16(34256), + 101: uint16(34249), + 102: uint16(34224), + 103: uint16(34234), + 104: uint16(34233), + 105: uint16(34214), + 106: uint16(34799), + 107: uint16(34796), + 108: uint16(34802), + 109: uint16(34784), + 110: uint16(35206), + 111: uint16(35250), + 112: uint16(35316), + 113: uint16(35624), + 114: uint16(35641), + 115: uint16(35628), + 116: uint16(35627), + 117: uint16(35920), + 118: uint16(36101), + 119: uint16(36441), + 120: uint16(36451), + 121: uint16(36454), + 122: uint16(36452), + 123: uint16(36447), + 124: uint16(36437), + 125: uint16(36544), + 126: uint16(36681), + 127: uint16(36685), + 128: uint16(36999), + 129: uint16(36995), + 130: uint16(37000), + 131: uint16(37291), + 132: uint16(37292), + 133: uint16(37328), + 134: uint16(37780), + 135: uint16(37770), + 136: uint16(37782), + 137: uint16(37794), + 138: uint16(37811), + 139: uint16(37806), + 140: uint16(37804), + 141: uint16(37808), + 142: uint16(37784), + 143: uint16(37786), + 144: uint16(37783), + 145: uint16(38356), + 146: uint16(38358), + 147: uint16(38352), + 148: uint16(38357), + 149: uint16(38626), + 150: uint16(38620), + 151: uint16(38617), + 152: uint16(38619), + 153: uint16(38622), + 154: uint16(38692), + 155: uint16(38819), + 156: uint16(38822), + }, + 34: { + 0: uint16(38829), + 1: uint16(38905), + 2: uint16(38989), + 3: uint16(38991), + 4: uint16(38988), + 5: uint16(38990), + 6: uint16(38995), + 7: uint16(39098), + 8: uint16(39230), + 9: uint16(39231), + 10: uint16(39229), + 11: uint16(39214), + 12: uint16(39333), + 13: uint16(39438), + 14: uint16(39617), + 15: uint16(39683), + 16: uint16(39686), + 17: uint16(39759), + 18: uint16(39758), + 19: uint16(39757), + 20: uint16(39882), + 21: uint16(39881), + 22: uint16(39933), + 23: uint16(39880), + 24: uint16(39872), + 25: uint16(40273), + 26: uint16(40285), + 27: uint16(40288), + 28: uint16(40672), + 29: uint16(40725), + 30: uint16(40748), + 31: uint16(20787), + 32: uint16(22181), + 33: uint16(22750), + 34: uint16(22751), + 35: uint16(22754), + 36: uint16(23541), + 37: uint16(40848), + 38: uint16(24300), + 39: uint16(25074), + 40: uint16(25079), + 41: uint16(25078), + 42: uint16(25077), + 43: uint16(25856), + 44: uint16(25871), + 45: uint16(26336), + 46: uint16(26333), + 47: uint16(27365), + 48: uint16(27357), + 49: uint16(27354), + 50: uint16(27347), + 51: uint16(28699), + 52: uint16(28703), + 53: uint16(28712), + 54: uint16(28698), + 55: uint16(28701), + 56: uint16(28693), + 57: uint16(28696), + 58: uint16(29190), + 59: uint16(29197), + 60: uint16(29272), + 61: uint16(29346), + 62: uint16(29560), + 63: uint16(29562), + 64: uint16(29885), + 65: uint16(29898), + 66: uint16(29923), + 67: uint16(30087), + 68: uint16(30086), + 69: uint16(30303), + 70: uint16(30305), + 71: uint16(30663), + 72: uint16(31001), + 73: uint16(31153), + 74: uint16(31339), + 75: uint16(31337), + 76: uint16(31806), + 77: uint16(31807), + 78: uint16(31800), + 79: uint16(31805), + 80: uint16(31799), + 81: uint16(31808), + 82: uint16(32363), + 83: uint16(32365), + 84: uint16(32377), + 85: uint16(32361), + 86: uint16(32362), + 87: uint16(32645), + 88: uint16(32371), + 89: uint16(32694), + 90: uint16(32697), + 91: uint16(32696), + 92: uint16(33240), + 93: uint16(34281), + 94: uint16(34269), + 95: uint16(34282), + 96: uint16(34261), + 97: uint16(34276), + 98: uint16(34277), + 99: uint16(34295), + 100: uint16(34811), + 101: uint16(34821), + 102: uint16(34829), + 103: uint16(34809), + 104: uint16(34814), + 105: uint16(35168), + 106: uint16(35167), + 107: uint16(35158), + 108: uint16(35166), + 109: uint16(35649), + 110: uint16(35676), + 111: uint16(35672), + 112: uint16(35657), + 113: uint16(35674), + 114: uint16(35662), + 115: uint16(35663), + 116: uint16(35654), + 117: uint16(35673), + 118: uint16(36104), + 119: uint16(36106), + 120: uint16(36476), + 121: uint16(36466), + 122: uint16(36487), + 123: uint16(36470), + 124: uint16(36460), + 125: uint16(36474), + 126: uint16(36468), + 127: uint16(36692), + 128: uint16(36686), + 129: uint16(36781), + 130: uint16(37002), + 131: uint16(37003), + 132: uint16(37297), + 133: uint16(37294), + 134: uint16(37857), + 135: uint16(37841), + 136: uint16(37855), + 137: uint16(37827), + 138: uint16(37832), + 139: uint16(37852), + 140: uint16(37853), + 141: uint16(37846), + 142: uint16(37858), + 143: uint16(37837), + 144: uint16(37848), + 145: uint16(37860), + 146: uint16(37847), + 147: uint16(37864), + 148: uint16(38364), + 149: uint16(38580), + 150: uint16(38627), + 151: uint16(38698), + 152: uint16(38695), + 153: uint16(38753), + 154: uint16(38876), + 155: uint16(38907), + 156: uint16(39006), + }, + 35: { + 0: uint16(39000), + 1: uint16(39003), + 2: uint16(39100), + 3: uint16(39237), + 4: uint16(39241), + 5: uint16(39446), + 6: uint16(39449), + 7: uint16(39693), + 8: uint16(39912), + 9: uint16(39911), + 10: uint16(39894), + 11: uint16(39899), + 12: uint16(40329), + 13: uint16(40289), + 14: uint16(40306), + 15: uint16(40298), + 16: uint16(40300), + 17: uint16(40594), + 18: uint16(40599), + 19: uint16(40595), + 20: uint16(40628), + 21: uint16(21240), + 22: uint16(22184), + 23: uint16(22199), + 24: uint16(22198), + 25: uint16(22196), + 26: uint16(22204), + 27: uint16(22756), + 28: uint16(23360), + 29: uint16(23363), + 30: uint16(23421), + 31: uint16(23542), + 32: uint16(24009), + 33: uint16(25080), + 34: uint16(25082), + 35: uint16(25880), + 36: uint16(25876), + 37: uint16(25881), + 38: uint16(26342), + 39: uint16(26407), + 40: uint16(27372), + 41: uint16(28734), + 42: uint16(28720), + 43: uint16(28722), + 44: uint16(29200), + 45: uint16(29563), + 46: uint16(29903), + 47: uint16(30306), + 48: uint16(30309), + 49: uint16(31014), + 50: uint16(31018), + 51: uint16(31020), + 52: uint16(31019), + 53: uint16(31431), + 54: uint16(31478), + 55: uint16(31820), + 56: uint16(31811), + 57: uint16(31821), + 58: uint16(31983), + 59: uint16(31984), + 60: uint16(36782), + 61: uint16(32381), + 62: uint16(32380), + 63: uint16(32386), + 64: uint16(32588), + 65: uint16(32768), + 66: uint16(33242), + 67: uint16(33382), + 68: uint16(34299), + 69: uint16(34297), + 70: uint16(34321), + 71: uint16(34298), + 72: uint16(34310), + 73: uint16(34315), + 74: uint16(34311), + 75: uint16(34314), + 76: uint16(34836), + 77: uint16(34837), + 78: uint16(35172), + 79: uint16(35258), + 80: uint16(35320), + 81: uint16(35696), + 82: uint16(35692), + 83: uint16(35686), + 84: uint16(35695), + 85: uint16(35679), + 86: uint16(35691), + 87: uint16(36111), + 88: uint16(36109), + 89: uint16(36489), + 90: uint16(36481), + 91: uint16(36485), + 92: uint16(36482), + 93: uint16(37300), + 94: uint16(37323), + 95: uint16(37912), + 96: uint16(37891), + 97: uint16(37885), + 98: uint16(38369), + 99: uint16(38704), + 100: uint16(39108), + 101: uint16(39250), + 102: uint16(39249), + 103: uint16(39336), + 104: uint16(39467), + 105: uint16(39472), + 106: uint16(39479), + 107: uint16(39477), + 108: uint16(39955), + 109: uint16(39949), + 110: uint16(40569), + 111: uint16(40629), + 112: uint16(40680), + 113: uint16(40751), + 114: uint16(40799), + 115: uint16(40803), + 116: uint16(40801), + 117: uint16(20791), + 118: uint16(20792), + 119: uint16(22209), + 120: uint16(22208), + 121: uint16(22210), + 122: uint16(22804), + 123: uint16(23660), + 124: uint16(24013), + 125: uint16(25084), + 126: uint16(25086), + 127: uint16(25885), + 128: uint16(25884), + 129: uint16(26005), + 130: uint16(26345), + 131: uint16(27387), + 132: uint16(27396), + 133: uint16(27386), + 134: uint16(27570), + 135: uint16(28748), + 136: uint16(29211), + 137: uint16(29351), + 138: uint16(29910), + 139: uint16(29908), + 140: uint16(30313), + 141: uint16(30675), + 142: uint16(31824), + 143: uint16(32399), + 144: uint16(32396), + 145: uint16(32700), + 146: uint16(34327), + 147: uint16(34349), + 148: uint16(34330), + 149: uint16(34851), + 150: uint16(34850), + 151: uint16(34849), + 152: uint16(34847), + 153: uint16(35178), + 154: uint16(35180), + 155: uint16(35261), + 156: uint16(35700), + }, + 36: { + 0: uint16(35703), + 1: uint16(35709), + 2: uint16(36115), + 3: uint16(36490), + 4: uint16(36493), + 5: uint16(36491), + 6: uint16(36703), + 7: uint16(36783), + 8: uint16(37306), + 9: uint16(37934), + 10: uint16(37939), + 11: uint16(37941), + 12: uint16(37946), + 13: uint16(37944), + 14: uint16(37938), + 15: uint16(37931), + 16: uint16(38370), + 17: uint16(38712), + 18: uint16(38713), + 19: uint16(38706), + 20: uint16(38911), + 21: uint16(39015), + 22: uint16(39013), + 23: uint16(39255), + 24: uint16(39493), + 25: uint16(39491), + 26: uint16(39488), + 27: uint16(39486), + 28: uint16(39631), + 29: uint16(39764), + 30: uint16(39761), + 31: uint16(39981), + 32: uint16(39973), + 33: uint16(40367), + 34: uint16(40372), + 35: uint16(40386), + 36: uint16(40376), + 37: uint16(40605), + 38: uint16(40687), + 39: uint16(40729), + 40: uint16(40796), + 41: uint16(40806), + 42: uint16(40807), + 43: uint16(20796), + 44: uint16(20795), + 45: uint16(22216), + 46: uint16(22218), + 47: uint16(22217), + 48: uint16(23423), + 49: uint16(24020), + 50: uint16(24018), + 51: uint16(24398), + 52: uint16(25087), + 53: uint16(25892), + 54: uint16(27402), + 55: uint16(27489), + 56: uint16(28753), + 57: uint16(28760), + 58: uint16(29568), + 59: uint16(29924), + 60: uint16(30090), + 61: uint16(30318), + 62: uint16(30316), + 63: uint16(31155), + 64: uint16(31840), + 65: uint16(31839), + 66: uint16(32894), + 67: uint16(32893), + 68: uint16(33247), + 69: uint16(35186), + 70: uint16(35183), + 71: uint16(35324), + 72: uint16(35712), + 73: uint16(36118), + 74: uint16(36119), + 75: uint16(36497), + 76: uint16(36499), + 77: uint16(36705), + 78: uint16(37192), + 79: uint16(37956), + 80: uint16(37969), + 81: uint16(37970), + 82: uint16(38717), + 83: uint16(38718), + 84: uint16(38851), + 85: uint16(38849), + 86: uint16(39019), + 87: uint16(39253), + 88: uint16(39509), + 89: uint16(39501), + 90: uint16(39634), + 91: uint16(39706), + 92: uint16(40009), + 93: uint16(39985), + 94: uint16(39998), + 95: uint16(39995), + 96: uint16(40403), + 97: uint16(40407), + 98: uint16(40756), + 99: uint16(40812), + 100: uint16(40810), + 101: uint16(40852), + 102: uint16(22220), + 103: uint16(24022), + 104: uint16(25088), + 105: uint16(25891), + 106: uint16(25899), + 107: uint16(25898), + 108: uint16(26348), + 109: uint16(27408), + 110: uint16(29914), + 111: uint16(31434), + 112: uint16(31844), + 113: uint16(31843), + 114: uint16(31845), + 115: uint16(32403), + 116: uint16(32406), + 117: uint16(32404), + 118: uint16(33250), + 119: uint16(34360), + 120: uint16(34367), + 121: uint16(34865), + 122: uint16(35722), + 123: uint16(37008), + 124: uint16(37007), + 125: uint16(37987), + 126: uint16(37984), + 127: uint16(37988), + 128: uint16(38760), + 129: uint16(39023), + 130: uint16(39260), + 131: uint16(39514), + 132: uint16(39515), + 133: uint16(39511), + 134: uint16(39635), + 135: uint16(39636), + 136: uint16(39633), + 137: uint16(40020), + 138: uint16(40023), + 139: uint16(40022), + 140: uint16(40421), + 141: uint16(40607), + 142: uint16(40692), + 143: uint16(22225), + 144: uint16(22761), + 145: uint16(25900), + 146: uint16(28766), + 147: uint16(30321), + 148: uint16(30322), + 149: uint16(30679), + 150: uint16(32592), + 151: uint16(32648), + 152: uint16(34870), + 153: uint16(34873), + 154: uint16(34914), + 155: uint16(35731), + 156: uint16(35730), + }, + 37: { + 0: uint16(35734), + 1: uint16(33399), + 2: uint16(36123), + 3: uint16(37312), + 4: uint16(37994), + 5: uint16(38722), + 6: uint16(38728), + 7: uint16(38724), + 8: uint16(38854), + 9: uint16(39024), + 10: uint16(39519), + 11: uint16(39714), + 12: uint16(39768), + 13: uint16(40031), + 14: uint16(40441), + 15: uint16(40442), + 16: uint16(40572), + 17: uint16(40573), + 18: uint16(40711), + 19: uint16(40823), + 20: uint16(40818), + 21: uint16(24307), + 22: uint16(27414), + 23: uint16(28771), + 24: uint16(31852), + 25: uint16(31854), + 26: uint16(34875), + 27: uint16(35264), + 28: uint16(36513), + 29: uint16(37313), + 30: uint16(38002), + 31: uint16(38000), + 32: uint16(39025), + 33: uint16(39262), + 34: uint16(39638), + 35: uint16(39715), + 36: uint16(40652), + 37: uint16(28772), + 38: uint16(30682), + 39: uint16(35738), + 40: uint16(38007), + 41: uint16(38857), + 42: uint16(39522), + 43: uint16(39525), + 44: uint16(32412), + 45: uint16(35740), + 46: uint16(36522), + 47: uint16(37317), + 48: uint16(38013), + 49: uint16(38014), + 50: uint16(38012), + 51: uint16(40055), + 52: uint16(40056), + 53: uint16(40695), + 54: uint16(35924), + 55: uint16(38015), + 56: uint16(40474), + 57: uint16(29224), + 58: uint16(39530), + 59: uint16(39729), + 60: uint16(40475), + 61: uint16(40478), + 62: uint16(31858), + 63: uint16(9312), + 64: uint16(9313), + 65: uint16(9314), + 66: uint16(9315), + 67: uint16(9316), + 68: uint16(9317), + 69: uint16(9318), + 70: uint16(9319), + 71: uint16(9320), + 72: uint16(9321), + 73: uint16(9332), + 74: uint16(9333), + 75: uint16(9334), + 76: uint16(9335), + 77: uint16(9336), + 78: uint16(9337), + 79: uint16(9338), + 80: uint16(9339), + 81: uint16(9340), + 82: uint16(9341), + 83: uint16(8560), + 84: uint16(8561), + 85: uint16(8562), + 86: uint16(8563), + 87: uint16(8564), + 88: uint16(8565), + 89: uint16(8566), + 90: uint16(8567), + 91: uint16(8568), + 92: uint16(8569), + 93: uint16(20022), + 94: uint16(20031), + 95: uint16(20101), + 96: uint16(20128), + 97: uint16(20866), + 98: uint16(20886), + 99: uint16(20907), + 100: uint16(21241), + 101: uint16(21304), + 102: uint16(21353), + 103: uint16(21430), + 104: uint16(22794), + 105: uint16(23424), + 106: uint16(24027), + 107: uint16(24186), + 108: uint16(24191), + 109: uint16(24308), + 110: uint16(24400), + 111: uint16(24417), + 112: uint16(25908), + 113: uint16(26080), + 114: uint16(30098), + 115: uint16(30326), + 116: uint16(36789), + 117: uint16(38582), + 118: uint16(168), + 119: uint16(710), + 120: uint16(12541), + 121: uint16(12542), + 122: uint16(12445), + 123: uint16(12446), + 126: uint16(12293), + 127: uint16(12294), + 128: uint16(12295), + 129: uint16(12540), + 130: uint16(65339), + 131: uint16(65341), + 132: uint16(10045), + 133: uint16(12353), + 134: uint16(12354), + 135: uint16(12355), + 136: uint16(12356), + 137: uint16(12357), + 138: uint16(12358), + 139: uint16(12359), + 140: uint16(12360), + 141: uint16(12361), + 142: uint16(12362), + 143: uint16(12363), + 144: uint16(12364), + 145: uint16(12365), + 146: uint16(12366), + 147: uint16(12367), + 148: uint16(12368), + 149: uint16(12369), + 150: uint16(12370), + 151: uint16(12371), + 152: uint16(12372), + 153: uint16(12373), + 154: uint16(12374), + 155: uint16(12375), + 156: uint16(12376), + }, + 38: { + 0: uint16(12377), + 1: uint16(12378), + 2: uint16(12379), + 3: uint16(12380), + 4: uint16(12381), + 5: uint16(12382), + 6: uint16(12383), + 7: uint16(12384), + 8: uint16(12385), + 9: uint16(12386), + 10: uint16(12387), + 11: uint16(12388), + 12: uint16(12389), + 13: uint16(12390), + 14: uint16(12391), + 15: uint16(12392), + 16: uint16(12393), + 17: uint16(12394), + 18: uint16(12395), + 19: uint16(12396), + 20: uint16(12397), + 21: uint16(12398), + 22: uint16(12399), + 23: uint16(12400), + 24: uint16(12401), + 25: uint16(12402), + 26: uint16(12403), + 27: uint16(12404), + 28: uint16(12405), + 29: uint16(12406), + 30: uint16(12407), + 31: uint16(12408), + 32: uint16(12409), + 33: uint16(12410), + 34: uint16(12411), + 35: uint16(12412), + 36: uint16(12413), + 37: uint16(12414), + 38: uint16(12415), + 39: uint16(12416), + 40: uint16(12417), + 41: uint16(12418), + 42: uint16(12419), + 43: uint16(12420), + 44: uint16(12421), + 45: uint16(12422), + 46: uint16(12423), + 47: uint16(12424), + 48: uint16(12425), + 49: uint16(12426), + 50: uint16(12427), + 51: uint16(12428), + 52: uint16(12429), + 53: uint16(12430), + 54: uint16(12431), + 55: uint16(12432), + 56: uint16(12433), + 57: uint16(12434), + 58: uint16(12435), + 59: uint16(12449), + 60: uint16(12450), + 61: uint16(12451), + 62: uint16(12452), + 63: uint16(12453), + 64: uint16(12454), + 65: uint16(12455), + 66: uint16(12456), + 67: uint16(12457), + 68: uint16(12458), + 69: uint16(12459), + 70: uint16(12460), + 71: uint16(12461), + 72: uint16(12462), + 73: uint16(12463), + 74: uint16(12464), + 75: uint16(12465), + 76: uint16(12466), + 77: uint16(12467), + 78: uint16(12468), + 79: uint16(12469), + 80: uint16(12470), + 81: uint16(12471), + 82: uint16(12472), + 83: uint16(12473), + 84: uint16(12474), + 85: uint16(12475), + 86: uint16(12476), + 87: uint16(12477), + 88: uint16(12478), + 89: uint16(12479), + 90: uint16(12480), + 91: uint16(12481), + 92: uint16(12482), + 93: uint16(12483), + 94: uint16(12484), + 95: uint16(12485), + 96: uint16(12486), + 97: uint16(12487), + 98: uint16(12488), + 99: uint16(12489), + 100: uint16(12490), + 101: uint16(12491), + 102: uint16(12492), + 103: uint16(12493), + 104: uint16(12494), + 105: uint16(12495), + 106: uint16(12496), + 107: uint16(12497), + 108: uint16(12498), + 109: uint16(12499), + 110: uint16(12500), + 111: uint16(12501), + 112: uint16(12502), + 113: uint16(12503), + 114: uint16(12504), + 115: uint16(12505), + 116: uint16(12506), + 117: uint16(12507), + 118: uint16(12508), + 119: uint16(12509), + 120: uint16(12510), + 121: uint16(12511), + 122: uint16(12512), + 123: uint16(12513), + 124: uint16(12514), + 125: uint16(12515), + 126: uint16(12516), + 127: uint16(12517), + 128: uint16(12518), + 129: uint16(12519), + 130: uint16(12520), + 131: uint16(12521), + 132: uint16(12522), + 133: uint16(12523), + 134: uint16(12524), + 135: uint16(12525), + 136: uint16(12526), + 137: uint16(12527), + 138: uint16(12528), + 139: uint16(12529), + 140: uint16(12530), + 141: uint16(12531), + 142: uint16(12532), + 143: uint16(12533), + 144: uint16(12534), + 145: uint16(1040), + 146: uint16(1041), + 147: uint16(1042), + 148: uint16(1043), + 149: uint16(1044), + 150: uint16(1045), + 151: uint16(1025), + 152: uint16(1046), + 153: uint16(1047), + 154: uint16(1048), + 155: uint16(1049), + 156: uint16(1050), + }, + 39: { + 0: uint16(1051), + 1: uint16(1052), + 2: uint16(1053), + 3: uint16(1054), + 4: uint16(1055), + 5: uint16(1056), + 6: uint16(1057), + 7: uint16(1058), + 8: uint16(1059), + 9: uint16(1060), + 10: uint16(1061), + 11: uint16(1062), + 12: uint16(1063), + 13: uint16(1064), + 14: uint16(1065), + 15: uint16(1066), + 16: uint16(1067), + 17: uint16(1068), + 18: uint16(1069), + 19: uint16(1070), + 20: uint16(1071), + 21: uint16(1072), + 22: uint16(1073), + 23: uint16(1074), + 24: uint16(1075), + 25: uint16(1076), + 26: uint16(1077), + 27: uint16(1105), + 28: uint16(1078), + 29: uint16(1079), + 30: uint16(1080), + 31: uint16(1081), + 32: uint16(1082), + 33: uint16(1083), + 34: uint16(1084), + 35: uint16(1085), + 36: uint16(1086), + 37: uint16(1087), + 38: uint16(1088), + 39: uint16(1089), + 40: uint16(1090), + 41: uint16(1091), + 42: uint16(1092), + 43: uint16(1093), + 44: uint16(1094), + 45: uint16(1095), + 46: uint16(1096), + 47: uint16(1097), + 48: uint16(1098), + 49: uint16(1099), + 50: uint16(1100), + 51: uint16(1101), + 52: uint16(1102), + 53: uint16(1103), + 54: uint16(8679), + 55: uint16(8632), + 56: uint16(8633), + 57: uint16(12751), + 58: uint16(204), + 59: uint16(20058), + 60: uint16(138), + 61: uint16(20994), + 62: uint16(17553), + 63: uint16(40880), + 64: uint16(20872), + 65: uint16(40881), + 66: uint16(30215), + 107: uint16(65506), + 108: uint16(65508), + 109: uint16(65287), + 110: uint16(65282), + 111: uint16(12849), + 112: uint16(8470), + 113: uint16(8481), + 114: uint16(12443), + 115: uint16(12444), + 116: uint16(11904), + 117: uint16(11908), + 118: uint16(11910), + 119: uint16(11911), + 120: uint16(11912), + 121: uint16(11914), + 122: uint16(11916), + 123: uint16(11917), + 124: uint16(11925), + 125: uint16(11932), + 126: uint16(11933), + 127: uint16(11941), + 128: uint16(11943), + 129: uint16(11946), + 130: uint16(11948), + 131: uint16(11950), + 132: uint16(11958), + 133: uint16(11964), + 134: uint16(11966), + 135: uint16(11974), + 136: uint16(11978), + 137: uint16(11980), + 138: uint16(11981), + 139: uint16(11983), + 140: uint16(11990), + 141: uint16(11991), + 142: uint16(11998), + 143: uint16(12003), + 147: uint16(643), + 148: uint16(592), + 149: uint16(603), + 150: uint16(596), + 151: uint16(629), + 152: uint16(339), + 153: uint16(248), + 154: uint16(331), + 155: uint16(650), + 156: uint16(618), + }, + 40: { + 0: uint16(20034), + 1: uint16(20060), + 2: uint16(20981), + 3: uint16(21274), + 4: uint16(21378), + 5: uint16(19975), + 6: uint16(19980), + 7: uint16(20039), + 8: uint16(20109), + 9: uint16(22231), + 10: uint16(64012), + 11: uint16(23662), + 12: uint16(24435), + 13: uint16(19983), + 14: uint16(20871), + 15: uint16(19982), + 16: uint16(20014), + 17: uint16(20115), + 18: uint16(20162), + 19: uint16(20169), + 20: uint16(20168), + 21: uint16(20888), + 22: uint16(21244), + 23: uint16(21356), + 24: uint16(21433), + 25: uint16(22304), + 26: uint16(22787), + 27: uint16(22828), + 28: uint16(23568), + 29: uint16(24063), + 30: uint16(26081), + 31: uint16(27571), + 32: uint16(27596), + 33: uint16(27668), + 34: uint16(29247), + 35: uint16(20017), + 36: uint16(20028), + 37: uint16(20200), + 38: uint16(20188), + 39: uint16(20201), + 40: uint16(20193), + 41: uint16(20189), + 42: uint16(20186), + 43: uint16(21004), + 44: uint16(21276), + 45: uint16(21324), + 46: uint16(22306), + 47: uint16(22307), + 48: uint16(22807), + 49: uint16(22831), + 50: uint16(23425), + 51: uint16(23428), + 52: uint16(23570), + 53: uint16(23611), + 54: uint16(23668), + 55: uint16(23667), + 56: uint16(24068), + 57: uint16(24192), + 58: uint16(24194), + 59: uint16(24521), + 60: uint16(25097), + 61: uint16(25168), + 62: uint16(27669), + 63: uint16(27702), + 64: uint16(27715), + 65: uint16(27711), + 66: uint16(27707), + 67: uint16(29358), + 68: uint16(29360), + 69: uint16(29578), + 70: uint16(31160), + 71: uint16(32906), + 72: uint16(38430), + 73: uint16(20238), + 74: uint16(20248), + 75: uint16(20268), + 76: uint16(20213), + 77: uint16(20244), + 78: uint16(20209), + 79: uint16(20224), + 80: uint16(20215), + 81: uint16(20232), + 82: uint16(20253), + 83: uint16(20226), + 84: uint16(20229), + 85: uint16(20258), + 86: uint16(20243), + 87: uint16(20228), + 88: uint16(20212), + 89: uint16(20242), + 90: uint16(20913), + 91: uint16(21011), + 92: uint16(21001), + 93: uint16(21008), + 94: uint16(21158), + 95: uint16(21282), + 96: uint16(21279), + 97: uint16(21325), + 98: uint16(21386), + 99: uint16(21511), + 100: uint16(22241), + 101: uint16(22239), + 102: uint16(22318), + 103: uint16(22314), + 104: uint16(22324), + 105: uint16(22844), + 106: uint16(22912), + 107: uint16(22908), + 108: uint16(22917), + 109: uint16(22907), + 110: uint16(22910), + 111: uint16(22903), + 112: uint16(22911), + 113: uint16(23382), + 114: uint16(23573), + 115: uint16(23589), + 116: uint16(23676), + 117: uint16(23674), + 118: uint16(23675), + 119: uint16(23678), + 120: uint16(24031), + 121: uint16(24181), + 122: uint16(24196), + 123: uint16(24322), + 124: uint16(24346), + 125: uint16(24436), + 126: uint16(24533), + 127: uint16(24532), + 128: uint16(24527), + 129: uint16(25180), + 130: uint16(25182), + 131: uint16(25188), + 132: uint16(25185), + 133: uint16(25190), + 134: uint16(25186), + 135: uint16(25177), + 136: uint16(25184), + 137: uint16(25178), + 138: uint16(25189), + 139: uint16(26095), + 140: uint16(26094), + 141: uint16(26430), + 142: uint16(26425), + 143: uint16(26424), + 144: uint16(26427), + 145: uint16(26426), + 146: uint16(26431), + 147: uint16(26428), + 148: uint16(26419), + 149: uint16(27672), + 150: uint16(27718), + 151: uint16(27730), + 152: uint16(27740), + 153: uint16(27727), + 154: uint16(27722), + 155: uint16(27732), + 156: uint16(27723), + }, + 41: { + 0: uint16(27724), + 1: uint16(28785), + 2: uint16(29278), + 3: uint16(29364), + 4: uint16(29365), + 5: uint16(29582), + 6: uint16(29994), + 7: uint16(30335), + 8: uint16(31349), + 9: uint16(32593), + 10: uint16(33400), + 11: uint16(33404), + 12: uint16(33408), + 13: uint16(33405), + 14: uint16(33407), + 15: uint16(34381), + 16: uint16(35198), + 17: uint16(37017), + 18: uint16(37015), + 19: uint16(37016), + 20: uint16(37019), + 21: uint16(37012), + 22: uint16(38434), + 23: uint16(38436), + 24: uint16(38432), + 25: uint16(38435), + 26: uint16(20310), + 27: uint16(20283), + 28: uint16(20322), + 29: uint16(20297), + 30: uint16(20307), + 31: uint16(20324), + 32: uint16(20286), + 33: uint16(20327), + 34: uint16(20306), + 35: uint16(20319), + 36: uint16(20289), + 37: uint16(20312), + 38: uint16(20269), + 39: uint16(20275), + 40: uint16(20287), + 41: uint16(20321), + 42: uint16(20879), + 43: uint16(20921), + 44: uint16(21020), + 45: uint16(21022), + 46: uint16(21025), + 47: uint16(21165), + 48: uint16(21166), + 49: uint16(21257), + 50: uint16(21347), + 51: uint16(21362), + 52: uint16(21390), + 53: uint16(21391), + 54: uint16(21552), + 55: uint16(21559), + 56: uint16(21546), + 57: uint16(21588), + 58: uint16(21573), + 59: uint16(21529), + 60: uint16(21532), + 61: uint16(21541), + 62: uint16(21528), + 63: uint16(21565), + 64: uint16(21583), + 65: uint16(21569), + 66: uint16(21544), + 67: uint16(21540), + 68: uint16(21575), + 69: uint16(22254), + 70: uint16(22247), + 71: uint16(22245), + 72: uint16(22337), + 73: uint16(22341), + 74: uint16(22348), + 75: uint16(22345), + 76: uint16(22347), + 77: uint16(22354), + 78: uint16(22790), + 79: uint16(22848), + 80: uint16(22950), + 81: uint16(22936), + 82: uint16(22944), + 83: uint16(22935), + 84: uint16(22926), + 85: uint16(22946), + 86: uint16(22928), + 87: uint16(22927), + 88: uint16(22951), + 89: uint16(22945), + 90: uint16(23438), + 91: uint16(23442), + 92: uint16(23592), + 93: uint16(23594), + 94: uint16(23693), + 95: uint16(23695), + 96: uint16(23688), + 97: uint16(23691), + 98: uint16(23689), + 99: uint16(23698), + 100: uint16(23690), + 101: uint16(23686), + 102: uint16(23699), + 103: uint16(23701), + 104: uint16(24032), + 105: uint16(24074), + 106: uint16(24078), + 107: uint16(24203), + 108: uint16(24201), + 109: uint16(24204), + 110: uint16(24200), + 111: uint16(24205), + 112: uint16(24325), + 113: uint16(24349), + 114: uint16(24440), + 115: uint16(24438), + 116: uint16(24530), + 117: uint16(24529), + 118: uint16(24528), + 119: uint16(24557), + 120: uint16(24552), + 121: uint16(24558), + 122: uint16(24563), + 123: uint16(24545), + 124: uint16(24548), + 125: uint16(24547), + 126: uint16(24570), + 127: uint16(24559), + 128: uint16(24567), + 129: uint16(24571), + 130: uint16(24576), + 131: uint16(24564), + 132: uint16(25146), + 133: uint16(25219), + 134: uint16(25228), + 135: uint16(25230), + 136: uint16(25231), + 137: uint16(25236), + 138: uint16(25223), + 139: uint16(25201), + 140: uint16(25211), + 141: uint16(25210), + 142: uint16(25200), + 143: uint16(25217), + 144: uint16(25224), + 145: uint16(25207), + 146: uint16(25213), + 147: uint16(25202), + 148: uint16(25204), + 149: uint16(25911), + 150: uint16(26096), + 151: uint16(26100), + 152: uint16(26099), + 153: uint16(26098), + 154: uint16(26101), + 155: uint16(26437), + 156: uint16(26439), + }, + 42: { + 0: uint16(26457), + 1: uint16(26453), + 2: uint16(26444), + 3: uint16(26440), + 4: uint16(26461), + 5: uint16(26445), + 6: uint16(26458), + 7: uint16(26443), + 8: uint16(27600), + 9: uint16(27673), + 10: uint16(27674), + 11: uint16(27768), + 12: uint16(27751), + 13: uint16(27755), + 14: uint16(27780), + 15: uint16(27787), + 16: uint16(27791), + 17: uint16(27761), + 18: uint16(27759), + 19: uint16(27753), + 20: uint16(27802), + 21: uint16(27757), + 22: uint16(27783), + 23: uint16(27797), + 24: uint16(27804), + 25: uint16(27750), + 26: uint16(27763), + 27: uint16(27749), + 28: uint16(27771), + 29: uint16(27790), + 30: uint16(28788), + 31: uint16(28794), + 32: uint16(29283), + 33: uint16(29375), + 34: uint16(29373), + 35: uint16(29379), + 36: uint16(29382), + 37: uint16(29377), + 38: uint16(29370), + 39: uint16(29381), + 40: uint16(29589), + 41: uint16(29591), + 42: uint16(29587), + 43: uint16(29588), + 44: uint16(29586), + 45: uint16(30010), + 46: uint16(30009), + 47: uint16(30100), + 48: uint16(30101), + 49: uint16(30337), + 50: uint16(31037), + 51: uint16(32820), + 52: uint16(32917), + 53: uint16(32921), + 54: uint16(32912), + 55: uint16(32914), + 56: uint16(32924), + 57: uint16(33424), + 58: uint16(33423), + 59: uint16(33413), + 60: uint16(33422), + 61: uint16(33425), + 62: uint16(33427), + 63: uint16(33418), + 64: uint16(33411), + 65: uint16(33412), + 66: uint16(35960), + 67: uint16(36809), + 68: uint16(36799), + 69: uint16(37023), + 70: uint16(37025), + 71: uint16(37029), + 72: uint16(37022), + 73: uint16(37031), + 74: uint16(37024), + 75: uint16(38448), + 76: uint16(38440), + 77: uint16(38447), + 78: uint16(38445), + 79: uint16(20019), + 80: uint16(20376), + 81: uint16(20348), + 82: uint16(20357), + 83: uint16(20349), + 84: uint16(20352), + 85: uint16(20359), + 86: uint16(20342), + 87: uint16(20340), + 88: uint16(20361), + 89: uint16(20356), + 90: uint16(20343), + 91: uint16(20300), + 92: uint16(20375), + 93: uint16(20330), + 94: uint16(20378), + 95: uint16(20345), + 96: uint16(20353), + 97: uint16(20344), + 98: uint16(20368), + 99: uint16(20380), + 100: uint16(20372), + 101: uint16(20382), + 102: uint16(20370), + 103: uint16(20354), + 104: uint16(20373), + 105: uint16(20331), + 106: uint16(20334), + 107: uint16(20894), + 108: uint16(20924), + 109: uint16(20926), + 110: uint16(21045), + 111: uint16(21042), + 112: uint16(21043), + 113: uint16(21062), + 114: uint16(21041), + 115: uint16(21180), + 116: uint16(21258), + 117: uint16(21259), + 118: uint16(21308), + 119: uint16(21394), + 120: uint16(21396), + 121: uint16(21639), + 122: uint16(21631), + 123: uint16(21633), + 124: uint16(21649), + 125: uint16(21634), + 126: uint16(21640), + 127: uint16(21611), + 128: uint16(21626), + 129: uint16(21630), + 130: uint16(21605), + 131: uint16(21612), + 132: uint16(21620), + 133: uint16(21606), + 134: uint16(21645), + 135: uint16(21615), + 136: uint16(21601), + 137: uint16(21600), + 138: uint16(21656), + 139: uint16(21603), + 140: uint16(21607), + 141: uint16(21604), + 142: uint16(22263), + 143: uint16(22265), + 144: uint16(22383), + 145: uint16(22386), + 146: uint16(22381), + 147: uint16(22379), + 148: uint16(22385), + 149: uint16(22384), + 150: uint16(22390), + 151: uint16(22400), + 152: uint16(22389), + 153: uint16(22395), + 154: uint16(22387), + 155: uint16(22388), + 156: uint16(22370), + }, + 43: { + 0: uint16(22376), + 1: uint16(22397), + 2: uint16(22796), + 3: uint16(22853), + 4: uint16(22965), + 5: uint16(22970), + 6: uint16(22991), + 7: uint16(22990), + 8: uint16(22962), + 9: uint16(22988), + 10: uint16(22977), + 11: uint16(22966), + 12: uint16(22972), + 13: uint16(22979), + 14: uint16(22998), + 15: uint16(22961), + 16: uint16(22973), + 17: uint16(22976), + 18: uint16(22984), + 19: uint16(22964), + 20: uint16(22983), + 21: uint16(23394), + 22: uint16(23397), + 23: uint16(23443), + 24: uint16(23445), + 25: uint16(23620), + 26: uint16(23623), + 27: uint16(23726), + 28: uint16(23716), + 29: uint16(23712), + 30: uint16(23733), + 31: uint16(23727), + 32: uint16(23720), + 33: uint16(23724), + 34: uint16(23711), + 35: uint16(23715), + 36: uint16(23725), + 37: uint16(23714), + 38: uint16(23722), + 39: uint16(23719), + 40: uint16(23709), + 41: uint16(23717), + 42: uint16(23734), + 43: uint16(23728), + 44: uint16(23718), + 45: uint16(24087), + 46: uint16(24084), + 47: uint16(24089), + 48: uint16(24360), + 49: uint16(24354), + 50: uint16(24355), + 51: uint16(24356), + 52: uint16(24404), + 53: uint16(24450), + 54: uint16(24446), + 55: uint16(24445), + 56: uint16(24542), + 57: uint16(24549), + 58: uint16(24621), + 59: uint16(24614), + 60: uint16(24601), + 61: uint16(24626), + 62: uint16(24587), + 63: uint16(24628), + 64: uint16(24586), + 65: uint16(24599), + 66: uint16(24627), + 67: uint16(24602), + 68: uint16(24606), + 69: uint16(24620), + 70: uint16(24610), + 71: uint16(24589), + 72: uint16(24592), + 73: uint16(24622), + 74: uint16(24595), + 75: uint16(24593), + 76: uint16(24588), + 77: uint16(24585), + 78: uint16(24604), + 79: uint16(25108), + 80: uint16(25149), + 81: uint16(25261), + 82: uint16(25268), + 83: uint16(25297), + 84: uint16(25278), + 85: uint16(25258), + 86: uint16(25270), + 87: uint16(25290), + 88: uint16(25262), + 89: uint16(25267), + 90: uint16(25263), + 91: uint16(25275), + 92: uint16(25257), + 93: uint16(25264), + 94: uint16(25272), + 95: uint16(25917), + 96: uint16(26024), + 97: uint16(26043), + 98: uint16(26121), + 99: uint16(26108), + 100: uint16(26116), + 101: uint16(26130), + 102: uint16(26120), + 103: uint16(26107), + 104: uint16(26115), + 105: uint16(26123), + 106: uint16(26125), + 107: uint16(26117), + 108: uint16(26109), + 109: uint16(26129), + 110: uint16(26128), + 111: uint16(26358), + 112: uint16(26378), + 113: uint16(26501), + 114: uint16(26476), + 115: uint16(26510), + 116: uint16(26514), + 117: uint16(26486), + 118: uint16(26491), + 119: uint16(26520), + 120: uint16(26502), + 121: uint16(26500), + 122: uint16(26484), + 123: uint16(26509), + 124: uint16(26508), + 125: uint16(26490), + 126: uint16(26527), + 127: uint16(26513), + 128: uint16(26521), + 129: uint16(26499), + 130: uint16(26493), + 131: uint16(26497), + 132: uint16(26488), + 133: uint16(26489), + 134: uint16(26516), + 135: uint16(27429), + 136: uint16(27520), + 137: uint16(27518), + 138: uint16(27614), + 139: uint16(27677), + 140: uint16(27795), + 141: uint16(27884), + 142: uint16(27883), + 143: uint16(27886), + 144: uint16(27865), + 145: uint16(27830), + 146: uint16(27860), + 147: uint16(27821), + 148: uint16(27879), + 149: uint16(27831), + 150: uint16(27856), + 151: uint16(27842), + 152: uint16(27834), + 153: uint16(27843), + 154: uint16(27846), + 155: uint16(27885), + 156: uint16(27890), + }, + 44: { + 0: uint16(27858), + 1: uint16(27869), + 2: uint16(27828), + 3: uint16(27786), + 4: uint16(27805), + 5: uint16(27776), + 6: uint16(27870), + 7: uint16(27840), + 8: uint16(27952), + 9: uint16(27853), + 10: uint16(27847), + 11: uint16(27824), + 12: uint16(27897), + 13: uint16(27855), + 14: uint16(27881), + 15: uint16(27857), + 16: uint16(28820), + 17: uint16(28824), + 18: uint16(28805), + 19: uint16(28819), + 20: uint16(28806), + 21: uint16(28804), + 22: uint16(28817), + 23: uint16(28822), + 24: uint16(28802), + 25: uint16(28826), + 26: uint16(28803), + 27: uint16(29290), + 28: uint16(29398), + 29: uint16(29387), + 30: uint16(29400), + 31: uint16(29385), + 32: uint16(29404), + 33: uint16(29394), + 34: uint16(29396), + 35: uint16(29402), + 36: uint16(29388), + 37: uint16(29393), + 38: uint16(29604), + 39: uint16(29601), + 40: uint16(29613), + 41: uint16(29606), + 42: uint16(29602), + 43: uint16(29600), + 44: uint16(29612), + 45: uint16(29597), + 46: uint16(29917), + 47: uint16(29928), + 48: uint16(30015), + 49: uint16(30016), + 50: uint16(30014), + 51: uint16(30092), + 52: uint16(30104), + 53: uint16(30383), + 54: uint16(30451), + 55: uint16(30449), + 56: uint16(30448), + 57: uint16(30453), + 58: uint16(30712), + 59: uint16(30716), + 60: uint16(30713), + 61: uint16(30715), + 62: uint16(30714), + 63: uint16(30711), + 64: uint16(31042), + 65: uint16(31039), + 66: uint16(31173), + 67: uint16(31352), + 68: uint16(31355), + 69: uint16(31483), + 70: uint16(31861), + 71: uint16(31997), + 72: uint16(32821), + 73: uint16(32911), + 74: uint16(32942), + 75: uint16(32931), + 76: uint16(32952), + 77: uint16(32949), + 78: uint16(32941), + 79: uint16(33312), + 80: uint16(33440), + 81: uint16(33472), + 82: uint16(33451), + 83: uint16(33434), + 84: uint16(33432), + 85: uint16(33435), + 86: uint16(33461), + 87: uint16(33447), + 88: uint16(33454), + 89: uint16(33468), + 90: uint16(33438), + 91: uint16(33466), + 92: uint16(33460), + 93: uint16(33448), + 94: uint16(33441), + 95: uint16(33449), + 96: uint16(33474), + 97: uint16(33444), + 98: uint16(33475), + 99: uint16(33462), + 100: uint16(33442), + 101: uint16(34416), + 102: uint16(34415), + 103: uint16(34413), + 104: uint16(34414), + 105: uint16(35926), + 106: uint16(36818), + 107: uint16(36811), + 108: uint16(36819), + 109: uint16(36813), + 110: uint16(36822), + 111: uint16(36821), + 112: uint16(36823), + 113: uint16(37042), + 114: uint16(37044), + 115: uint16(37039), + 116: uint16(37043), + 117: uint16(37040), + 118: uint16(38457), + 119: uint16(38461), + 120: uint16(38460), + 121: uint16(38458), + 122: uint16(38467), + 123: uint16(20429), + 124: uint16(20421), + 125: uint16(20435), + 126: uint16(20402), + 127: uint16(20425), + 128: uint16(20427), + 129: uint16(20417), + 130: uint16(20436), + 131: uint16(20444), + 132: uint16(20441), + 133: uint16(20411), + 134: uint16(20403), + 135: uint16(20443), + 136: uint16(20423), + 137: uint16(20438), + 138: uint16(20410), + 139: uint16(20416), + 140: uint16(20409), + 141: uint16(20460), + 142: uint16(21060), + 143: uint16(21065), + 144: uint16(21184), + 145: uint16(21186), + 146: uint16(21309), + 147: uint16(21372), + 148: uint16(21399), + 149: uint16(21398), + 150: uint16(21401), + 151: uint16(21400), + 152: uint16(21690), + 153: uint16(21665), + 154: uint16(21677), + 155: uint16(21669), + 156: uint16(21711), + }, + 45: { + 0: uint16(21699), + 1: uint16(33549), + 2: uint16(21687), + 3: uint16(21678), + 4: uint16(21718), + 5: uint16(21686), + 6: uint16(21701), + 7: uint16(21702), + 8: uint16(21664), + 9: uint16(21616), + 10: uint16(21692), + 11: uint16(21666), + 12: uint16(21694), + 13: uint16(21618), + 14: uint16(21726), + 15: uint16(21680), + 16: uint16(22453), + 17: uint16(22430), + 18: uint16(22431), + 19: uint16(22436), + 20: uint16(22412), + 21: uint16(22423), + 22: uint16(22429), + 23: uint16(22427), + 24: uint16(22420), + 25: uint16(22424), + 26: uint16(22415), + 27: uint16(22425), + 28: uint16(22437), + 29: uint16(22426), + 30: uint16(22421), + 31: uint16(22772), + 32: uint16(22797), + 33: uint16(22867), + 34: uint16(23009), + 35: uint16(23006), + 36: uint16(23022), + 37: uint16(23040), + 38: uint16(23025), + 39: uint16(23005), + 40: uint16(23034), + 41: uint16(23037), + 42: uint16(23036), + 43: uint16(23030), + 44: uint16(23012), + 45: uint16(23026), + 46: uint16(23031), + 47: uint16(23003), + 48: uint16(23017), + 49: uint16(23027), + 50: uint16(23029), + 51: uint16(23008), + 52: uint16(23038), + 53: uint16(23028), + 54: uint16(23021), + 55: uint16(23464), + 56: uint16(23628), + 57: uint16(23760), + 58: uint16(23768), + 59: uint16(23756), + 60: uint16(23767), + 61: uint16(23755), + 62: uint16(23771), + 63: uint16(23774), + 64: uint16(23770), + 65: uint16(23753), + 66: uint16(23751), + 67: uint16(23754), + 68: uint16(23766), + 69: uint16(23763), + 70: uint16(23764), + 71: uint16(23759), + 72: uint16(23752), + 73: uint16(23750), + 74: uint16(23758), + 75: uint16(23775), + 76: uint16(23800), + 77: uint16(24057), + 78: uint16(24097), + 79: uint16(24098), + 80: uint16(24099), + 81: uint16(24096), + 82: uint16(24100), + 83: uint16(24240), + 84: uint16(24228), + 85: uint16(24226), + 86: uint16(24219), + 87: uint16(24227), + 88: uint16(24229), + 89: uint16(24327), + 90: uint16(24366), + 91: uint16(24406), + 92: uint16(24454), + 93: uint16(24631), + 94: uint16(24633), + 95: uint16(24660), + 96: uint16(24690), + 97: uint16(24670), + 98: uint16(24645), + 99: uint16(24659), + 100: uint16(24647), + 101: uint16(24649), + 102: uint16(24667), + 103: uint16(24652), + 104: uint16(24640), + 105: uint16(24642), + 106: uint16(24671), + 107: uint16(24612), + 108: uint16(24644), + 109: uint16(24664), + 110: uint16(24678), + 111: uint16(24686), + 112: uint16(25154), + 113: uint16(25155), + 114: uint16(25295), + 115: uint16(25357), + 116: uint16(25355), + 117: uint16(25333), + 118: uint16(25358), + 119: uint16(25347), + 120: uint16(25323), + 121: uint16(25337), + 122: uint16(25359), + 123: uint16(25356), + 124: uint16(25336), + 125: uint16(25334), + 126: uint16(25344), + 127: uint16(25363), + 128: uint16(25364), + 129: uint16(25338), + 130: uint16(25365), + 131: uint16(25339), + 132: uint16(25328), + 133: uint16(25921), + 134: uint16(25923), + 135: uint16(26026), + 136: uint16(26047), + 137: uint16(26166), + 138: uint16(26145), + 139: uint16(26162), + 140: uint16(26165), + 141: uint16(26140), + 142: uint16(26150), + 143: uint16(26146), + 144: uint16(26163), + 145: uint16(26155), + 146: uint16(26170), + 147: uint16(26141), + 148: uint16(26164), + 149: uint16(26169), + 150: uint16(26158), + 151: uint16(26383), + 152: uint16(26384), + 153: uint16(26561), + 154: uint16(26610), + 155: uint16(26568), + 156: uint16(26554), + }, + 46: { + 0: uint16(26588), + 1: uint16(26555), + 2: uint16(26616), + 3: uint16(26584), + 4: uint16(26560), + 5: uint16(26551), + 6: uint16(26565), + 7: uint16(26603), + 8: uint16(26596), + 9: uint16(26591), + 10: uint16(26549), + 11: uint16(26573), + 12: uint16(26547), + 13: uint16(26615), + 14: uint16(26614), + 15: uint16(26606), + 16: uint16(26595), + 17: uint16(26562), + 18: uint16(26553), + 19: uint16(26574), + 20: uint16(26599), + 21: uint16(26608), + 22: uint16(26546), + 23: uint16(26620), + 24: uint16(26566), + 25: uint16(26605), + 26: uint16(26572), + 27: uint16(26542), + 28: uint16(26598), + 29: uint16(26587), + 30: uint16(26618), + 31: uint16(26569), + 32: uint16(26570), + 33: uint16(26563), + 34: uint16(26602), + 35: uint16(26571), + 36: uint16(27432), + 37: uint16(27522), + 38: uint16(27524), + 39: uint16(27574), + 40: uint16(27606), + 41: uint16(27608), + 42: uint16(27616), + 43: uint16(27680), + 44: uint16(27681), + 45: uint16(27944), + 46: uint16(27956), + 47: uint16(27949), + 48: uint16(27935), + 49: uint16(27964), + 50: uint16(27967), + 51: uint16(27922), + 52: uint16(27914), + 53: uint16(27866), + 54: uint16(27955), + 55: uint16(27908), + 56: uint16(27929), + 57: uint16(27962), + 58: uint16(27930), + 59: uint16(27921), + 60: uint16(27904), + 61: uint16(27933), + 62: uint16(27970), + 63: uint16(27905), + 64: uint16(27928), + 65: uint16(27959), + 66: uint16(27907), + 67: uint16(27919), + 68: uint16(27968), + 69: uint16(27911), + 70: uint16(27936), + 71: uint16(27948), + 72: uint16(27912), + 73: uint16(27938), + 74: uint16(27913), + 75: uint16(27920), + 76: uint16(28855), + 77: uint16(28831), + 78: uint16(28862), + 79: uint16(28849), + 80: uint16(28848), + 81: uint16(28833), + 82: uint16(28852), + 83: uint16(28853), + 84: uint16(28841), + 85: uint16(29249), + 86: uint16(29257), + 87: uint16(29258), + 88: uint16(29292), + 89: uint16(29296), + 90: uint16(29299), + 91: uint16(29294), + 92: uint16(29386), + 93: uint16(29412), + 94: uint16(29416), + 95: uint16(29419), + 96: uint16(29407), + 97: uint16(29418), + 98: uint16(29414), + 99: uint16(29411), + 100: uint16(29573), + 101: uint16(29644), + 102: uint16(29634), + 103: uint16(29640), + 104: uint16(29637), + 105: uint16(29625), + 106: uint16(29622), + 107: uint16(29621), + 108: uint16(29620), + 109: uint16(29675), + 110: uint16(29631), + 111: uint16(29639), + 112: uint16(29630), + 113: uint16(29635), + 114: uint16(29638), + 115: uint16(29624), + 116: uint16(29643), + 117: uint16(29932), + 118: uint16(29934), + 119: uint16(29998), + 120: uint16(30023), + 121: uint16(30024), + 122: uint16(30119), + 123: uint16(30122), + 124: uint16(30329), + 125: uint16(30404), + 126: uint16(30472), + 127: uint16(30467), + 128: uint16(30468), + 129: uint16(30469), + 130: uint16(30474), + 131: uint16(30455), + 132: uint16(30459), + 133: uint16(30458), + 134: uint16(30695), + 135: uint16(30696), + 136: uint16(30726), + 137: uint16(30737), + 138: uint16(30738), + 139: uint16(30725), + 140: uint16(30736), + 141: uint16(30735), + 142: uint16(30734), + 143: uint16(30729), + 144: uint16(30723), + 145: uint16(30739), + 146: uint16(31050), + 147: uint16(31052), + 148: uint16(31051), + 149: uint16(31045), + 150: uint16(31044), + 151: uint16(31189), + 152: uint16(31181), + 153: uint16(31183), + 154: uint16(31190), + 155: uint16(31182), + 156: uint16(31360), + }, + 47: { + 0: uint16(31358), + 1: uint16(31441), + 2: uint16(31488), + 3: uint16(31489), + 4: uint16(31866), + 5: uint16(31864), + 6: uint16(31865), + 7: uint16(31871), + 8: uint16(31872), + 9: uint16(31873), + 10: uint16(32003), + 11: uint16(32008), + 12: uint16(32001), + 13: uint16(32600), + 14: uint16(32657), + 15: uint16(32653), + 16: uint16(32702), + 17: uint16(32775), + 18: uint16(32782), + 19: uint16(32783), + 20: uint16(32788), + 21: uint16(32823), + 22: uint16(32984), + 23: uint16(32967), + 24: uint16(32992), + 25: uint16(32977), + 26: uint16(32968), + 27: uint16(32962), + 28: uint16(32976), + 29: uint16(32965), + 30: uint16(32995), + 31: uint16(32985), + 32: uint16(32988), + 33: uint16(32970), + 34: uint16(32981), + 35: uint16(32969), + 36: uint16(32975), + 37: uint16(32983), + 38: uint16(32998), + 39: uint16(32973), + 40: uint16(33279), + 41: uint16(33313), + 42: uint16(33428), + 43: uint16(33497), + 44: uint16(33534), + 45: uint16(33529), + 46: uint16(33543), + 47: uint16(33512), + 48: uint16(33536), + 49: uint16(33493), + 50: uint16(33594), + 51: uint16(33515), + 52: uint16(33494), + 53: uint16(33524), + 54: uint16(33516), + 55: uint16(33505), + 56: uint16(33522), + 57: uint16(33525), + 58: uint16(33548), + 59: uint16(33531), + 60: uint16(33526), + 61: uint16(33520), + 62: uint16(33514), + 63: uint16(33508), + 64: uint16(33504), + 65: uint16(33530), + 66: uint16(33523), + 67: uint16(33517), + 68: uint16(34423), + 69: uint16(34420), + 70: uint16(34428), + 71: uint16(34419), + 72: uint16(34881), + 73: uint16(34894), + 74: uint16(34919), + 75: uint16(34922), + 76: uint16(34921), + 77: uint16(35283), + 78: uint16(35332), + 79: uint16(35335), + 80: uint16(36210), + 81: uint16(36835), + 82: uint16(36833), + 83: uint16(36846), + 84: uint16(36832), + 85: uint16(37105), + 86: uint16(37053), + 87: uint16(37055), + 88: uint16(37077), + 89: uint16(37061), + 90: uint16(37054), + 91: uint16(37063), + 92: uint16(37067), + 93: uint16(37064), + 94: uint16(37332), + 95: uint16(37331), + 96: uint16(38484), + 97: uint16(38479), + 98: uint16(38481), + 99: uint16(38483), + 100: uint16(38474), + 101: uint16(38478), + 102: uint16(20510), + 103: uint16(20485), + 104: uint16(20487), + 105: uint16(20499), + 106: uint16(20514), + 107: uint16(20528), + 108: uint16(20507), + 109: uint16(20469), + 110: uint16(20468), + 111: uint16(20531), + 112: uint16(20535), + 113: uint16(20524), + 114: uint16(20470), + 115: uint16(20471), + 116: uint16(20503), + 117: uint16(20508), + 118: uint16(20512), + 119: uint16(20519), + 120: uint16(20533), + 121: uint16(20527), + 122: uint16(20529), + 123: uint16(20494), + 124: uint16(20826), + 125: uint16(20884), + 126: uint16(20883), + 127: uint16(20938), + 128: uint16(20932), + 129: uint16(20933), + 130: uint16(20936), + 131: uint16(20942), + 132: uint16(21089), + 133: uint16(21082), + 134: uint16(21074), + 135: uint16(21086), + 136: uint16(21087), + 137: uint16(21077), + 138: uint16(21090), + 139: uint16(21197), + 140: uint16(21262), + 141: uint16(21406), + 142: uint16(21798), + 143: uint16(21730), + 144: uint16(21783), + 145: uint16(21778), + 146: uint16(21735), + 147: uint16(21747), + 148: uint16(21732), + 149: uint16(21786), + 150: uint16(21759), + 151: uint16(21764), + 152: uint16(21768), + 153: uint16(21739), + 154: uint16(21777), + 155: uint16(21765), + 156: uint16(21745), + }, + 48: { + 0: uint16(21770), + 1: uint16(21755), + 2: uint16(21751), + 3: uint16(21752), + 4: uint16(21728), + 5: uint16(21774), + 6: uint16(21763), + 7: uint16(21771), + 8: uint16(22273), + 9: uint16(22274), + 10: uint16(22476), + 11: uint16(22578), + 12: uint16(22485), + 13: uint16(22482), + 14: uint16(22458), + 15: uint16(22470), + 16: uint16(22461), + 17: uint16(22460), + 18: uint16(22456), + 19: uint16(22454), + 20: uint16(22463), + 21: uint16(22471), + 22: uint16(22480), + 23: uint16(22457), + 24: uint16(22465), + 25: uint16(22798), + 26: uint16(22858), + 27: uint16(23065), + 28: uint16(23062), + 29: uint16(23085), + 30: uint16(23086), + 31: uint16(23061), + 32: uint16(23055), + 33: uint16(23063), + 34: uint16(23050), + 35: uint16(23070), + 36: uint16(23091), + 37: uint16(23404), + 38: uint16(23463), + 39: uint16(23469), + 40: uint16(23468), + 41: uint16(23555), + 42: uint16(23638), + 43: uint16(23636), + 44: uint16(23788), + 45: uint16(23807), + 46: uint16(23790), + 47: uint16(23793), + 48: uint16(23799), + 49: uint16(23808), + 50: uint16(23801), + 51: uint16(24105), + 52: uint16(24104), + 53: uint16(24232), + 54: uint16(24238), + 55: uint16(24234), + 56: uint16(24236), + 57: uint16(24371), + 58: uint16(24368), + 59: uint16(24423), + 60: uint16(24669), + 61: uint16(24666), + 62: uint16(24679), + 63: uint16(24641), + 64: uint16(24738), + 65: uint16(24712), + 66: uint16(24704), + 67: uint16(24722), + 68: uint16(24705), + 69: uint16(24733), + 70: uint16(24707), + 71: uint16(24725), + 72: uint16(24731), + 73: uint16(24727), + 74: uint16(24711), + 75: uint16(24732), + 76: uint16(24718), + 77: uint16(25113), + 78: uint16(25158), + 79: uint16(25330), + 80: uint16(25360), + 81: uint16(25430), + 82: uint16(25388), + 83: uint16(25412), + 84: uint16(25413), + 85: uint16(25398), + 86: uint16(25411), + 87: uint16(25572), + 88: uint16(25401), + 89: uint16(25419), + 90: uint16(25418), + 91: uint16(25404), + 92: uint16(25385), + 93: uint16(25409), + 94: uint16(25396), + 95: uint16(25432), + 96: uint16(25428), + 97: uint16(25433), + 98: uint16(25389), + 99: uint16(25415), + 100: uint16(25395), + 101: uint16(25434), + 102: uint16(25425), + 103: uint16(25400), + 104: uint16(25431), + 105: uint16(25408), + 106: uint16(25416), + 107: uint16(25930), + 108: uint16(25926), + 109: uint16(26054), + 110: uint16(26051), + 111: uint16(26052), + 112: uint16(26050), + 113: uint16(26186), + 114: uint16(26207), + 115: uint16(26183), + 116: uint16(26193), + 117: uint16(26386), + 118: uint16(26387), + 119: uint16(26655), + 120: uint16(26650), + 121: uint16(26697), + 122: uint16(26674), + 123: uint16(26675), + 124: uint16(26683), + 125: uint16(26699), + 126: uint16(26703), + 127: uint16(26646), + 128: uint16(26673), + 129: uint16(26652), + 130: uint16(26677), + 131: uint16(26667), + 132: uint16(26669), + 133: uint16(26671), + 134: uint16(26702), + 135: uint16(26692), + 136: uint16(26676), + 137: uint16(26653), + 138: uint16(26642), + 139: uint16(26644), + 140: uint16(26662), + 141: uint16(26664), + 142: uint16(26670), + 143: uint16(26701), + 144: uint16(26682), + 145: uint16(26661), + 146: uint16(26656), + 147: uint16(27436), + 148: uint16(27439), + 149: uint16(27437), + 150: uint16(27441), + 151: uint16(27444), + 152: uint16(27501), + 153: uint16(32898), + 154: uint16(27528), + 155: uint16(27622), + 156: uint16(27620), + }, + 49: { + 0: uint16(27624), + 1: uint16(27619), + 2: uint16(27618), + 3: uint16(27623), + 4: uint16(27685), + 5: uint16(28026), + 6: uint16(28003), + 7: uint16(28004), + 8: uint16(28022), + 9: uint16(27917), + 10: uint16(28001), + 11: uint16(28050), + 12: uint16(27992), + 13: uint16(28002), + 14: uint16(28013), + 15: uint16(28015), + 16: uint16(28049), + 17: uint16(28045), + 18: uint16(28143), + 19: uint16(28031), + 20: uint16(28038), + 21: uint16(27998), + 22: uint16(28007), + 23: uint16(28000), + 24: uint16(28055), + 25: uint16(28016), + 26: uint16(28028), + 27: uint16(27999), + 28: uint16(28034), + 29: uint16(28056), + 30: uint16(27951), + 31: uint16(28008), + 32: uint16(28043), + 33: uint16(28030), + 34: uint16(28032), + 35: uint16(28036), + 36: uint16(27926), + 37: uint16(28035), + 38: uint16(28027), + 39: uint16(28029), + 40: uint16(28021), + 41: uint16(28048), + 42: uint16(28892), + 43: uint16(28883), + 44: uint16(28881), + 45: uint16(28893), + 46: uint16(28875), + 47: uint16(32569), + 48: uint16(28898), + 49: uint16(28887), + 50: uint16(28882), + 51: uint16(28894), + 52: uint16(28896), + 53: uint16(28884), + 54: uint16(28877), + 55: uint16(28869), + 56: uint16(28870), + 57: uint16(28871), + 58: uint16(28890), + 59: uint16(28878), + 60: uint16(28897), + 61: uint16(29250), + 62: uint16(29304), + 63: uint16(29303), + 64: uint16(29302), + 65: uint16(29440), + 66: uint16(29434), + 67: uint16(29428), + 68: uint16(29438), + 69: uint16(29430), + 70: uint16(29427), + 71: uint16(29435), + 72: uint16(29441), + 73: uint16(29651), + 74: uint16(29657), + 75: uint16(29669), + 76: uint16(29654), + 77: uint16(29628), + 78: uint16(29671), + 79: uint16(29667), + 80: uint16(29673), + 81: uint16(29660), + 82: uint16(29650), + 83: uint16(29659), + 84: uint16(29652), + 85: uint16(29661), + 86: uint16(29658), + 87: uint16(29655), + 88: uint16(29656), + 89: uint16(29672), + 90: uint16(29918), + 91: uint16(29919), + 92: uint16(29940), + 93: uint16(29941), + 94: uint16(29985), + 95: uint16(30043), + 96: uint16(30047), + 97: uint16(30128), + 98: uint16(30145), + 99: uint16(30139), + 100: uint16(30148), + 101: uint16(30144), + 102: uint16(30143), + 103: uint16(30134), + 104: uint16(30138), + 105: uint16(30346), + 106: uint16(30409), + 107: uint16(30493), + 108: uint16(30491), + 109: uint16(30480), + 110: uint16(30483), + 111: uint16(30482), + 112: uint16(30499), + 113: uint16(30481), + 114: uint16(30485), + 115: uint16(30489), + 116: uint16(30490), + 117: uint16(30498), + 118: uint16(30503), + 119: uint16(30755), + 120: uint16(30764), + 121: uint16(30754), + 122: uint16(30773), + 123: uint16(30767), + 124: uint16(30760), + 125: uint16(30766), + 126: uint16(30763), + 127: uint16(30753), + 128: uint16(30761), + 129: uint16(30771), + 130: uint16(30762), + 131: uint16(30769), + 132: uint16(31060), + 133: uint16(31067), + 134: uint16(31055), + 135: uint16(31068), + 136: uint16(31059), + 137: uint16(31058), + 138: uint16(31057), + 139: uint16(31211), + 140: uint16(31212), + 141: uint16(31200), + 142: uint16(31214), + 143: uint16(31213), + 144: uint16(31210), + 145: uint16(31196), + 146: uint16(31198), + 147: uint16(31197), + 148: uint16(31366), + 149: uint16(31369), + 150: uint16(31365), + 151: uint16(31371), + 152: uint16(31372), + 153: uint16(31370), + 154: uint16(31367), + 155: uint16(31448), + 156: uint16(31504), + }, + 50: { + 0: uint16(31492), + 1: uint16(31507), + 2: uint16(31493), + 3: uint16(31503), + 4: uint16(31496), + 5: uint16(31498), + 6: uint16(31502), + 7: uint16(31497), + 8: uint16(31506), + 9: uint16(31876), + 10: uint16(31889), + 11: uint16(31882), + 12: uint16(31884), + 13: uint16(31880), + 14: uint16(31885), + 15: uint16(31877), + 16: uint16(32030), + 17: uint16(32029), + 18: uint16(32017), + 19: uint16(32014), + 20: uint16(32024), + 21: uint16(32022), + 22: uint16(32019), + 23: uint16(32031), + 24: uint16(32018), + 25: uint16(32015), + 26: uint16(32012), + 27: uint16(32604), + 28: uint16(32609), + 29: uint16(32606), + 30: uint16(32608), + 31: uint16(32605), + 32: uint16(32603), + 33: uint16(32662), + 34: uint16(32658), + 35: uint16(32707), + 36: uint16(32706), + 37: uint16(32704), + 38: uint16(32790), + 39: uint16(32830), + 40: uint16(32825), + 41: uint16(33018), + 42: uint16(33010), + 43: uint16(33017), + 44: uint16(33013), + 45: uint16(33025), + 46: uint16(33019), + 47: uint16(33024), + 48: uint16(33281), + 49: uint16(33327), + 50: uint16(33317), + 51: uint16(33587), + 52: uint16(33581), + 53: uint16(33604), + 54: uint16(33561), + 55: uint16(33617), + 56: uint16(33573), + 57: uint16(33622), + 58: uint16(33599), + 59: uint16(33601), + 60: uint16(33574), + 61: uint16(33564), + 62: uint16(33570), + 63: uint16(33602), + 64: uint16(33614), + 65: uint16(33563), + 66: uint16(33578), + 67: uint16(33544), + 68: uint16(33596), + 69: uint16(33613), + 70: uint16(33558), + 71: uint16(33572), + 72: uint16(33568), + 73: uint16(33591), + 74: uint16(33583), + 75: uint16(33577), + 76: uint16(33607), + 77: uint16(33605), + 78: uint16(33612), + 79: uint16(33619), + 80: uint16(33566), + 81: uint16(33580), + 82: uint16(33611), + 83: uint16(33575), + 84: uint16(33608), + 85: uint16(34387), + 86: uint16(34386), + 87: uint16(34466), + 88: uint16(34472), + 89: uint16(34454), + 90: uint16(34445), + 91: uint16(34449), + 92: uint16(34462), + 93: uint16(34439), + 94: uint16(34455), + 95: uint16(34438), + 96: uint16(34443), + 97: uint16(34458), + 98: uint16(34437), + 99: uint16(34469), + 100: uint16(34457), + 101: uint16(34465), + 102: uint16(34471), + 103: uint16(34453), + 104: uint16(34456), + 105: uint16(34446), + 106: uint16(34461), + 107: uint16(34448), + 108: uint16(34452), + 109: uint16(34883), + 110: uint16(34884), + 111: uint16(34925), + 112: uint16(34933), + 113: uint16(34934), + 114: uint16(34930), + 115: uint16(34944), + 116: uint16(34929), + 117: uint16(34943), + 118: uint16(34927), + 119: uint16(34947), + 120: uint16(34942), + 121: uint16(34932), + 122: uint16(34940), + 123: uint16(35346), + 124: uint16(35911), + 125: uint16(35927), + 126: uint16(35963), + 127: uint16(36004), + 128: uint16(36003), + 129: uint16(36214), + 130: uint16(36216), + 131: uint16(36277), + 132: uint16(36279), + 133: uint16(36278), + 134: uint16(36561), + 135: uint16(36563), + 136: uint16(36862), + 137: uint16(36853), + 138: uint16(36866), + 139: uint16(36863), + 140: uint16(36859), + 141: uint16(36868), + 142: uint16(36860), + 143: uint16(36854), + 144: uint16(37078), + 145: uint16(37088), + 146: uint16(37081), + 147: uint16(37082), + 148: uint16(37091), + 149: uint16(37087), + 150: uint16(37093), + 151: uint16(37080), + 152: uint16(37083), + 153: uint16(37079), + 154: uint16(37084), + 155: uint16(37092), + 156: uint16(37200), + }, + 51: { + 0: uint16(37198), + 1: uint16(37199), + 2: uint16(37333), + 3: uint16(37346), + 4: uint16(37338), + 5: uint16(38492), + 6: uint16(38495), + 7: uint16(38588), + 8: uint16(39139), + 9: uint16(39647), + 10: uint16(39727), + 11: uint16(20095), + 12: uint16(20592), + 13: uint16(20586), + 14: uint16(20577), + 15: uint16(20574), + 16: uint16(20576), + 17: uint16(20563), + 18: uint16(20555), + 19: uint16(20573), + 20: uint16(20594), + 21: uint16(20552), + 22: uint16(20557), + 23: uint16(20545), + 24: uint16(20571), + 25: uint16(20554), + 26: uint16(20578), + 27: uint16(20501), + 28: uint16(20549), + 29: uint16(20575), + 30: uint16(20585), + 31: uint16(20587), + 32: uint16(20579), + 33: uint16(20580), + 34: uint16(20550), + 35: uint16(20544), + 36: uint16(20590), + 37: uint16(20595), + 38: uint16(20567), + 39: uint16(20561), + 40: uint16(20944), + 41: uint16(21099), + 42: uint16(21101), + 43: uint16(21100), + 44: uint16(21102), + 45: uint16(21206), + 46: uint16(21203), + 47: uint16(21293), + 48: uint16(21404), + 49: uint16(21877), + 50: uint16(21878), + 51: uint16(21820), + 52: uint16(21837), + 53: uint16(21840), + 54: uint16(21812), + 55: uint16(21802), + 56: uint16(21841), + 57: uint16(21858), + 58: uint16(21814), + 59: uint16(21813), + 60: uint16(21808), + 61: uint16(21842), + 62: uint16(21829), + 63: uint16(21772), + 64: uint16(21810), + 65: uint16(21861), + 66: uint16(21838), + 67: uint16(21817), + 68: uint16(21832), + 69: uint16(21805), + 70: uint16(21819), + 71: uint16(21824), + 72: uint16(21835), + 73: uint16(22282), + 74: uint16(22279), + 75: uint16(22523), + 76: uint16(22548), + 77: uint16(22498), + 78: uint16(22518), + 79: uint16(22492), + 80: uint16(22516), + 81: uint16(22528), + 82: uint16(22509), + 83: uint16(22525), + 84: uint16(22536), + 85: uint16(22520), + 86: uint16(22539), + 87: uint16(22515), + 88: uint16(22479), + 89: uint16(22535), + 90: uint16(22510), + 91: uint16(22499), + 92: uint16(22514), + 93: uint16(22501), + 94: uint16(22508), + 95: uint16(22497), + 96: uint16(22542), + 97: uint16(22524), + 98: uint16(22544), + 99: uint16(22503), + 100: uint16(22529), + 101: uint16(22540), + 102: uint16(22513), + 103: uint16(22505), + 104: uint16(22512), + 105: uint16(22541), + 106: uint16(22532), + 107: uint16(22876), + 108: uint16(23136), + 109: uint16(23128), + 110: uint16(23125), + 111: uint16(23143), + 112: uint16(23134), + 113: uint16(23096), + 114: uint16(23093), + 115: uint16(23149), + 116: uint16(23120), + 117: uint16(23135), + 118: uint16(23141), + 119: uint16(23148), + 120: uint16(23123), + 121: uint16(23140), + 122: uint16(23127), + 123: uint16(23107), + 124: uint16(23133), + 125: uint16(23122), + 126: uint16(23108), + 127: uint16(23131), + 128: uint16(23112), + 129: uint16(23182), + 130: uint16(23102), + 131: uint16(23117), + 132: uint16(23097), + 133: uint16(23116), + 134: uint16(23152), + 135: uint16(23145), + 136: uint16(23111), + 137: uint16(23121), + 138: uint16(23126), + 139: uint16(23106), + 140: uint16(23132), + 141: uint16(23410), + 142: uint16(23406), + 143: uint16(23489), + 144: uint16(23488), + 145: uint16(23641), + 146: uint16(23838), + 147: uint16(23819), + 148: uint16(23837), + 149: uint16(23834), + 150: uint16(23840), + 151: uint16(23820), + 152: uint16(23848), + 153: uint16(23821), + 154: uint16(23846), + 155: uint16(23845), + 156: uint16(23823), + }, + 52: { + 0: uint16(23856), + 1: uint16(23826), + 2: uint16(23843), + 3: uint16(23839), + 4: uint16(23854), + 5: uint16(24126), + 6: uint16(24116), + 7: uint16(24241), + 8: uint16(24244), + 9: uint16(24249), + 10: uint16(24242), + 11: uint16(24243), + 12: uint16(24374), + 13: uint16(24376), + 14: uint16(24475), + 15: uint16(24470), + 16: uint16(24479), + 17: uint16(24714), + 18: uint16(24720), + 19: uint16(24710), + 20: uint16(24766), + 21: uint16(24752), + 22: uint16(24762), + 23: uint16(24787), + 24: uint16(24788), + 25: uint16(24783), + 26: uint16(24804), + 27: uint16(24793), + 28: uint16(24797), + 29: uint16(24776), + 30: uint16(24753), + 31: uint16(24795), + 32: uint16(24759), + 33: uint16(24778), + 34: uint16(24767), + 35: uint16(24771), + 36: uint16(24781), + 37: uint16(24768), + 38: uint16(25394), + 39: uint16(25445), + 40: uint16(25482), + 41: uint16(25474), + 42: uint16(25469), + 43: uint16(25533), + 44: uint16(25502), + 45: uint16(25517), + 46: uint16(25501), + 47: uint16(25495), + 48: uint16(25515), + 49: uint16(25486), + 50: uint16(25455), + 51: uint16(25479), + 52: uint16(25488), + 53: uint16(25454), + 54: uint16(25519), + 55: uint16(25461), + 56: uint16(25500), + 57: uint16(25453), + 58: uint16(25518), + 59: uint16(25468), + 60: uint16(25508), + 61: uint16(25403), + 62: uint16(25503), + 63: uint16(25464), + 64: uint16(25477), + 65: uint16(25473), + 66: uint16(25489), + 67: uint16(25485), + 68: uint16(25456), + 69: uint16(25939), + 70: uint16(26061), + 71: uint16(26213), + 72: uint16(26209), + 73: uint16(26203), + 74: uint16(26201), + 75: uint16(26204), + 76: uint16(26210), + 77: uint16(26392), + 78: uint16(26745), + 79: uint16(26759), + 80: uint16(26768), + 81: uint16(26780), + 82: uint16(26733), + 83: uint16(26734), + 84: uint16(26798), + 85: uint16(26795), + 86: uint16(26966), + 87: uint16(26735), + 88: uint16(26787), + 89: uint16(26796), + 90: uint16(26793), + 91: uint16(26741), + 92: uint16(26740), + 93: uint16(26802), + 94: uint16(26767), + 95: uint16(26743), + 96: uint16(26770), + 97: uint16(26748), + 98: uint16(26731), + 99: uint16(26738), + 100: uint16(26794), + 101: uint16(26752), + 102: uint16(26737), + 103: uint16(26750), + 104: uint16(26779), + 105: uint16(26774), + 106: uint16(26763), + 107: uint16(26784), + 108: uint16(26761), + 109: uint16(26788), + 110: uint16(26744), + 111: uint16(26747), + 112: uint16(26769), + 113: uint16(26764), + 114: uint16(26762), + 115: uint16(26749), + 116: uint16(27446), + 117: uint16(27443), + 118: uint16(27447), + 119: uint16(27448), + 120: uint16(27537), + 121: uint16(27535), + 122: uint16(27533), + 123: uint16(27534), + 124: uint16(27532), + 125: uint16(27690), + 126: uint16(28096), + 127: uint16(28075), + 128: uint16(28084), + 129: uint16(28083), + 130: uint16(28276), + 131: uint16(28076), + 132: uint16(28137), + 133: uint16(28130), + 134: uint16(28087), + 135: uint16(28150), + 136: uint16(28116), + 137: uint16(28160), + 138: uint16(28104), + 139: uint16(28128), + 140: uint16(28127), + 141: uint16(28118), + 142: uint16(28094), + 143: uint16(28133), + 144: uint16(28124), + 145: uint16(28125), + 146: uint16(28123), + 147: uint16(28148), + 148: uint16(28106), + 149: uint16(28093), + 150: uint16(28141), + 151: uint16(28144), + 152: uint16(28090), + 153: uint16(28117), + 154: uint16(28098), + 155: uint16(28111), + 156: uint16(28105), + }, + 53: { + 0: uint16(28112), + 1: uint16(28146), + 2: uint16(28115), + 3: uint16(28157), + 4: uint16(28119), + 5: uint16(28109), + 6: uint16(28131), + 7: uint16(28091), + 8: uint16(28922), + 9: uint16(28941), + 10: uint16(28919), + 11: uint16(28951), + 12: uint16(28916), + 13: uint16(28940), + 14: uint16(28912), + 15: uint16(28932), + 16: uint16(28915), + 17: uint16(28944), + 18: uint16(28924), + 19: uint16(28927), + 20: uint16(28934), + 21: uint16(28947), + 22: uint16(28928), + 23: uint16(28920), + 24: uint16(28918), + 25: uint16(28939), + 26: uint16(28930), + 27: uint16(28942), + 28: uint16(29310), + 29: uint16(29307), + 30: uint16(29308), + 31: uint16(29311), + 32: uint16(29469), + 33: uint16(29463), + 34: uint16(29447), + 35: uint16(29457), + 36: uint16(29464), + 37: uint16(29450), + 38: uint16(29448), + 39: uint16(29439), + 40: uint16(29455), + 41: uint16(29470), + 42: uint16(29576), + 43: uint16(29686), + 44: uint16(29688), + 45: uint16(29685), + 46: uint16(29700), + 47: uint16(29697), + 48: uint16(29693), + 49: uint16(29703), + 50: uint16(29696), + 51: uint16(29690), + 52: uint16(29692), + 53: uint16(29695), + 54: uint16(29708), + 55: uint16(29707), + 56: uint16(29684), + 57: uint16(29704), + 58: uint16(30052), + 59: uint16(30051), + 60: uint16(30158), + 61: uint16(30162), + 62: uint16(30159), + 63: uint16(30155), + 64: uint16(30156), + 65: uint16(30161), + 66: uint16(30160), + 67: uint16(30351), + 68: uint16(30345), + 69: uint16(30419), + 70: uint16(30521), + 71: uint16(30511), + 72: uint16(30509), + 73: uint16(30513), + 74: uint16(30514), + 75: uint16(30516), + 76: uint16(30515), + 77: uint16(30525), + 78: uint16(30501), + 79: uint16(30523), + 80: uint16(30517), + 81: uint16(30792), + 82: uint16(30802), + 83: uint16(30793), + 84: uint16(30797), + 85: uint16(30794), + 86: uint16(30796), + 87: uint16(30758), + 88: uint16(30789), + 89: uint16(30800), + 90: uint16(31076), + 91: uint16(31079), + 92: uint16(31081), + 93: uint16(31082), + 94: uint16(31075), + 95: uint16(31083), + 96: uint16(31073), + 97: uint16(31163), + 98: uint16(31226), + 99: uint16(31224), + 100: uint16(31222), + 101: uint16(31223), + 102: uint16(31375), + 103: uint16(31380), + 104: uint16(31376), + 105: uint16(31541), + 106: uint16(31559), + 107: uint16(31540), + 108: uint16(31525), + 109: uint16(31536), + 110: uint16(31522), + 111: uint16(31524), + 112: uint16(31539), + 113: uint16(31512), + 114: uint16(31530), + 115: uint16(31517), + 116: uint16(31537), + 117: uint16(31531), + 118: uint16(31533), + 119: uint16(31535), + 120: uint16(31538), + 121: uint16(31544), + 122: uint16(31514), + 123: uint16(31523), + 124: uint16(31892), + 125: uint16(31896), + 126: uint16(31894), + 127: uint16(31907), + 128: uint16(32053), + 129: uint16(32061), + 130: uint16(32056), + 131: uint16(32054), + 132: uint16(32058), + 133: uint16(32069), + 134: uint16(32044), + 135: uint16(32041), + 136: uint16(32065), + 137: uint16(32071), + 138: uint16(32062), + 139: uint16(32063), + 140: uint16(32074), + 141: uint16(32059), + 142: uint16(32040), + 143: uint16(32611), + 144: uint16(32661), + 145: uint16(32668), + 146: uint16(32669), + 147: uint16(32667), + 148: uint16(32714), + 149: uint16(32715), + 150: uint16(32717), + 151: uint16(32720), + 152: uint16(32721), + 153: uint16(32711), + 154: uint16(32719), + 155: uint16(32713), + 156: uint16(32799), + }, + 54: { + 0: uint16(32798), + 1: uint16(32795), + 2: uint16(32839), + 3: uint16(32835), + 4: uint16(32840), + 5: uint16(33048), + 6: uint16(33061), + 7: uint16(33049), + 8: uint16(33051), + 9: uint16(33069), + 10: uint16(33055), + 11: uint16(33068), + 12: uint16(33054), + 13: uint16(33057), + 14: uint16(33045), + 15: uint16(33063), + 16: uint16(33053), + 17: uint16(33058), + 18: uint16(33297), + 19: uint16(33336), + 20: uint16(33331), + 21: uint16(33338), + 22: uint16(33332), + 23: uint16(33330), + 24: uint16(33396), + 25: uint16(33680), + 26: uint16(33699), + 27: uint16(33704), + 28: uint16(33677), + 29: uint16(33658), + 30: uint16(33651), + 31: uint16(33700), + 32: uint16(33652), + 33: uint16(33679), + 34: uint16(33665), + 35: uint16(33685), + 36: uint16(33689), + 37: uint16(33653), + 38: uint16(33684), + 39: uint16(33705), + 40: uint16(33661), + 41: uint16(33667), + 42: uint16(33676), + 43: uint16(33693), + 44: uint16(33691), + 45: uint16(33706), + 46: uint16(33675), + 47: uint16(33662), + 48: uint16(33701), + 49: uint16(33711), + 50: uint16(33672), + 51: uint16(33687), + 52: uint16(33712), + 53: uint16(33663), + 54: uint16(33702), + 55: uint16(33671), + 56: uint16(33710), + 57: uint16(33654), + 58: uint16(33690), + 59: uint16(34393), + 60: uint16(34390), + 61: uint16(34495), + 62: uint16(34487), + 63: uint16(34498), + 64: uint16(34497), + 65: uint16(34501), + 66: uint16(34490), + 67: uint16(34480), + 68: uint16(34504), + 69: uint16(34489), + 70: uint16(34483), + 71: uint16(34488), + 72: uint16(34508), + 73: uint16(34484), + 74: uint16(34491), + 75: uint16(34492), + 76: uint16(34499), + 77: uint16(34493), + 78: uint16(34494), + 79: uint16(34898), + 80: uint16(34953), + 81: uint16(34965), + 82: uint16(34984), + 83: uint16(34978), + 84: uint16(34986), + 85: uint16(34970), + 86: uint16(34961), + 87: uint16(34977), + 88: uint16(34975), + 89: uint16(34968), + 90: uint16(34983), + 91: uint16(34969), + 92: uint16(34971), + 93: uint16(34967), + 94: uint16(34980), + 95: uint16(34988), + 96: uint16(34956), + 97: uint16(34963), + 98: uint16(34958), + 99: uint16(35202), + 100: uint16(35286), + 101: uint16(35289), + 102: uint16(35285), + 103: uint16(35376), + 104: uint16(35367), + 105: uint16(35372), + 106: uint16(35358), + 107: uint16(35897), + 108: uint16(35899), + 109: uint16(35932), + 110: uint16(35933), + 111: uint16(35965), + 112: uint16(36005), + 113: uint16(36221), + 114: uint16(36219), + 115: uint16(36217), + 116: uint16(36284), + 117: uint16(36290), + 118: uint16(36281), + 119: uint16(36287), + 120: uint16(36289), + 121: uint16(36568), + 122: uint16(36574), + 123: uint16(36573), + 124: uint16(36572), + 125: uint16(36567), + 126: uint16(36576), + 127: uint16(36577), + 128: uint16(36900), + 129: uint16(36875), + 130: uint16(36881), + 131: uint16(36892), + 132: uint16(36876), + 133: uint16(36897), + 134: uint16(37103), + 135: uint16(37098), + 136: uint16(37104), + 137: uint16(37108), + 138: uint16(37106), + 139: uint16(37107), + 140: uint16(37076), + 141: uint16(37099), + 142: uint16(37100), + 143: uint16(37097), + 144: uint16(37206), + 145: uint16(37208), + 146: uint16(37210), + 147: uint16(37203), + 148: uint16(37205), + 149: uint16(37356), + 150: uint16(37364), + 151: uint16(37361), + 152: uint16(37363), + 153: uint16(37368), + 154: uint16(37348), + 155: uint16(37369), + 156: uint16(37354), + }, + 55: { + 0: uint16(37355), + 1: uint16(37367), + 2: uint16(37352), + 3: uint16(37358), + 4: uint16(38266), + 5: uint16(38278), + 6: uint16(38280), + 7: uint16(38524), + 8: uint16(38509), + 9: uint16(38507), + 10: uint16(38513), + 11: uint16(38511), + 12: uint16(38591), + 13: uint16(38762), + 14: uint16(38916), + 15: uint16(39141), + 16: uint16(39319), + 17: uint16(20635), + 18: uint16(20629), + 19: uint16(20628), + 20: uint16(20638), + 21: uint16(20619), + 22: uint16(20643), + 23: uint16(20611), + 24: uint16(20620), + 25: uint16(20622), + 26: uint16(20637), + 27: uint16(20584), + 28: uint16(20636), + 29: uint16(20626), + 30: uint16(20610), + 31: uint16(20615), + 32: uint16(20831), + 33: uint16(20948), + 34: uint16(21266), + 35: uint16(21265), + 36: uint16(21412), + 37: uint16(21415), + 38: uint16(21905), + 39: uint16(21928), + 40: uint16(21925), + 41: uint16(21933), + 42: uint16(21879), + 43: uint16(22085), + 44: uint16(21922), + 45: uint16(21907), + 46: uint16(21896), + 47: uint16(21903), + 48: uint16(21941), + 49: uint16(21889), + 50: uint16(21923), + 51: uint16(21906), + 52: uint16(21924), + 53: uint16(21885), + 54: uint16(21900), + 55: uint16(21926), + 56: uint16(21887), + 57: uint16(21909), + 58: uint16(21921), + 59: uint16(21902), + 60: uint16(22284), + 61: uint16(22569), + 62: uint16(22583), + 63: uint16(22553), + 64: uint16(22558), + 65: uint16(22567), + 66: uint16(22563), + 67: uint16(22568), + 68: uint16(22517), + 69: uint16(22600), + 70: uint16(22565), + 71: uint16(22556), + 72: uint16(22555), + 73: uint16(22579), + 74: uint16(22591), + 75: uint16(22582), + 76: uint16(22574), + 77: uint16(22585), + 78: uint16(22584), + 79: uint16(22573), + 80: uint16(22572), + 81: uint16(22587), + 82: uint16(22881), + 83: uint16(23215), + 84: uint16(23188), + 85: uint16(23199), + 86: uint16(23162), + 87: uint16(23202), + 88: uint16(23198), + 89: uint16(23160), + 90: uint16(23206), + 91: uint16(23164), + 92: uint16(23205), + 93: uint16(23212), + 94: uint16(23189), + 95: uint16(23214), + 96: uint16(23095), + 97: uint16(23172), + 98: uint16(23178), + 99: uint16(23191), + 100: uint16(23171), + 101: uint16(23179), + 102: uint16(23209), + 103: uint16(23163), + 104: uint16(23165), + 105: uint16(23180), + 106: uint16(23196), + 107: uint16(23183), + 108: uint16(23187), + 109: uint16(23197), + 110: uint16(23530), + 111: uint16(23501), + 112: uint16(23499), + 113: uint16(23508), + 114: uint16(23505), + 115: uint16(23498), + 116: uint16(23502), + 117: uint16(23564), + 118: uint16(23600), + 119: uint16(23863), + 120: uint16(23875), + 121: uint16(23915), + 122: uint16(23873), + 123: uint16(23883), + 124: uint16(23871), + 125: uint16(23861), + 126: uint16(23889), + 127: uint16(23886), + 128: uint16(23893), + 129: uint16(23859), + 130: uint16(23866), + 131: uint16(23890), + 132: uint16(23869), + 133: uint16(23857), + 134: uint16(23897), + 135: uint16(23874), + 136: uint16(23865), + 137: uint16(23881), + 138: uint16(23864), + 139: uint16(23868), + 140: uint16(23858), + 141: uint16(23862), + 142: uint16(23872), + 143: uint16(23877), + 144: uint16(24132), + 145: uint16(24129), + 146: uint16(24408), + 147: uint16(24486), + 148: uint16(24485), + 149: uint16(24491), + 150: uint16(24777), + 151: uint16(24761), + 152: uint16(24780), + 153: uint16(24802), + 154: uint16(24782), + 155: uint16(24772), + 156: uint16(24852), + }, + 56: { + 0: uint16(24818), + 1: uint16(24842), + 2: uint16(24854), + 3: uint16(24837), + 4: uint16(24821), + 5: uint16(24851), + 6: uint16(24824), + 7: uint16(24828), + 8: uint16(24830), + 9: uint16(24769), + 10: uint16(24835), + 11: uint16(24856), + 12: uint16(24861), + 13: uint16(24848), + 14: uint16(24831), + 15: uint16(24836), + 16: uint16(24843), + 17: uint16(25162), + 18: uint16(25492), + 19: uint16(25521), + 20: uint16(25520), + 21: uint16(25550), + 22: uint16(25573), + 23: uint16(25576), + 24: uint16(25583), + 25: uint16(25539), + 26: uint16(25757), + 27: uint16(25587), + 28: uint16(25546), + 29: uint16(25568), + 30: uint16(25590), + 31: uint16(25557), + 32: uint16(25586), + 33: uint16(25589), + 34: uint16(25697), + 35: uint16(25567), + 36: uint16(25534), + 37: uint16(25565), + 38: uint16(25564), + 39: uint16(25540), + 40: uint16(25560), + 41: uint16(25555), + 42: uint16(25538), + 43: uint16(25543), + 44: uint16(25548), + 45: uint16(25547), + 46: uint16(25544), + 47: uint16(25584), + 48: uint16(25559), + 49: uint16(25561), + 50: uint16(25906), + 51: uint16(25959), + 52: uint16(25962), + 53: uint16(25956), + 54: uint16(25948), + 55: uint16(25960), + 56: uint16(25957), + 57: uint16(25996), + 58: uint16(26013), + 59: uint16(26014), + 60: uint16(26030), + 61: uint16(26064), + 62: uint16(26066), + 63: uint16(26236), + 64: uint16(26220), + 65: uint16(26235), + 66: uint16(26240), + 67: uint16(26225), + 68: uint16(26233), + 69: uint16(26218), + 70: uint16(26226), + 71: uint16(26369), + 72: uint16(26892), + 73: uint16(26835), + 74: uint16(26884), + 75: uint16(26844), + 76: uint16(26922), + 77: uint16(26860), + 78: uint16(26858), + 79: uint16(26865), + 80: uint16(26895), + 81: uint16(26838), + 82: uint16(26871), + 83: uint16(26859), + 84: uint16(26852), + 85: uint16(26870), + 86: uint16(26899), + 87: uint16(26896), + 88: uint16(26867), + 89: uint16(26849), + 90: uint16(26887), + 91: uint16(26828), + 92: uint16(26888), + 93: uint16(26992), + 94: uint16(26804), + 95: uint16(26897), + 96: uint16(26863), + 97: uint16(26822), + 98: uint16(26900), + 99: uint16(26872), + 100: uint16(26832), + 101: uint16(26877), + 102: uint16(26876), + 103: uint16(26856), + 104: uint16(26891), + 105: uint16(26890), + 106: uint16(26903), + 107: uint16(26830), + 108: uint16(26824), + 109: uint16(26845), + 110: uint16(26846), + 111: uint16(26854), + 112: uint16(26868), + 113: uint16(26833), + 114: uint16(26886), + 115: uint16(26836), + 116: uint16(26857), + 117: uint16(26901), + 118: uint16(26917), + 119: uint16(26823), + 120: uint16(27449), + 121: uint16(27451), + 122: uint16(27455), + 123: uint16(27452), + 124: uint16(27540), + 125: uint16(27543), + 126: uint16(27545), + 127: uint16(27541), + 128: uint16(27581), + 129: uint16(27632), + 130: uint16(27634), + 131: uint16(27635), + 132: uint16(27696), + 133: uint16(28156), + 134: uint16(28230), + 135: uint16(28231), + 136: uint16(28191), + 137: uint16(28233), + 138: uint16(28296), + 139: uint16(28220), + 140: uint16(28221), + 141: uint16(28229), + 142: uint16(28258), + 143: uint16(28203), + 144: uint16(28223), + 145: uint16(28225), + 146: uint16(28253), + 147: uint16(28275), + 148: uint16(28188), + 149: uint16(28211), + 150: uint16(28235), + 151: uint16(28224), + 152: uint16(28241), + 153: uint16(28219), + 154: uint16(28163), + 155: uint16(28206), + 156: uint16(28254), + }, + 57: { + 0: uint16(28264), + 1: uint16(28252), + 2: uint16(28257), + 3: uint16(28209), + 4: uint16(28200), + 5: uint16(28256), + 6: uint16(28273), + 7: uint16(28267), + 8: uint16(28217), + 9: uint16(28194), + 10: uint16(28208), + 11: uint16(28243), + 12: uint16(28261), + 13: uint16(28199), + 14: uint16(28280), + 15: uint16(28260), + 16: uint16(28279), + 17: uint16(28245), + 18: uint16(28281), + 19: uint16(28242), + 20: uint16(28262), + 21: uint16(28213), + 22: uint16(28214), + 23: uint16(28250), + 24: uint16(28960), + 25: uint16(28958), + 26: uint16(28975), + 27: uint16(28923), + 28: uint16(28974), + 29: uint16(28977), + 30: uint16(28963), + 31: uint16(28965), + 32: uint16(28962), + 33: uint16(28978), + 34: uint16(28959), + 35: uint16(28968), + 36: uint16(28986), + 37: uint16(28955), + 38: uint16(29259), + 39: uint16(29274), + 40: uint16(29320), + 41: uint16(29321), + 42: uint16(29318), + 43: uint16(29317), + 44: uint16(29323), + 45: uint16(29458), + 46: uint16(29451), + 47: uint16(29488), + 48: uint16(29474), + 49: uint16(29489), + 50: uint16(29491), + 51: uint16(29479), + 52: uint16(29490), + 53: uint16(29485), + 54: uint16(29478), + 55: uint16(29475), + 56: uint16(29493), + 57: uint16(29452), + 58: uint16(29742), + 59: uint16(29740), + 60: uint16(29744), + 61: uint16(29739), + 62: uint16(29718), + 63: uint16(29722), + 64: uint16(29729), + 65: uint16(29741), + 66: uint16(29745), + 67: uint16(29732), + 68: uint16(29731), + 69: uint16(29725), + 70: uint16(29737), + 71: uint16(29728), + 72: uint16(29746), + 73: uint16(29947), + 74: uint16(29999), + 75: uint16(30063), + 76: uint16(30060), + 77: uint16(30183), + 78: uint16(30170), + 79: uint16(30177), + 80: uint16(30182), + 81: uint16(30173), + 82: uint16(30175), + 83: uint16(30180), + 84: uint16(30167), + 85: uint16(30357), + 86: uint16(30354), + 87: uint16(30426), + 88: uint16(30534), + 89: uint16(30535), + 90: uint16(30532), + 91: uint16(30541), + 92: uint16(30533), + 93: uint16(30538), + 94: uint16(30542), + 95: uint16(30539), + 96: uint16(30540), + 97: uint16(30686), + 98: uint16(30700), + 99: uint16(30816), + 100: uint16(30820), + 101: uint16(30821), + 102: uint16(30812), + 103: uint16(30829), + 104: uint16(30833), + 105: uint16(30826), + 106: uint16(30830), + 107: uint16(30832), + 108: uint16(30825), + 109: uint16(30824), + 110: uint16(30814), + 111: uint16(30818), + 112: uint16(31092), + 113: uint16(31091), + 114: uint16(31090), + 115: uint16(31088), + 116: uint16(31234), + 117: uint16(31242), + 118: uint16(31235), + 119: uint16(31244), + 120: uint16(31236), + 121: uint16(31385), + 122: uint16(31462), + 123: uint16(31460), + 124: uint16(31562), + 125: uint16(31547), + 126: uint16(31556), + 127: uint16(31560), + 128: uint16(31564), + 129: uint16(31566), + 130: uint16(31552), + 131: uint16(31576), + 132: uint16(31557), + 133: uint16(31906), + 134: uint16(31902), + 135: uint16(31912), + 136: uint16(31905), + 137: uint16(32088), + 138: uint16(32111), + 139: uint16(32099), + 140: uint16(32083), + 141: uint16(32086), + 142: uint16(32103), + 143: uint16(32106), + 144: uint16(32079), + 145: uint16(32109), + 146: uint16(32092), + 147: uint16(32107), + 148: uint16(32082), + 149: uint16(32084), + 150: uint16(32105), + 151: uint16(32081), + 152: uint16(32095), + 153: uint16(32078), + 154: uint16(32574), + 155: uint16(32575), + 156: uint16(32613), + }, + 58: { + 0: uint16(32614), + 1: uint16(32674), + 2: uint16(32672), + 3: uint16(32673), + 4: uint16(32727), + 5: uint16(32849), + 6: uint16(32847), + 7: uint16(32848), + 8: uint16(33022), + 9: uint16(32980), + 10: uint16(33091), + 11: uint16(33098), + 12: uint16(33106), + 13: uint16(33103), + 14: uint16(33095), + 15: uint16(33085), + 16: uint16(33101), + 17: uint16(33082), + 18: uint16(33254), + 19: uint16(33262), + 20: uint16(33271), + 21: uint16(33272), + 22: uint16(33273), + 23: uint16(33284), + 24: uint16(33340), + 25: uint16(33341), + 26: uint16(33343), + 27: uint16(33397), + 28: uint16(33595), + 29: uint16(33743), + 30: uint16(33785), + 31: uint16(33827), + 32: uint16(33728), + 33: uint16(33768), + 34: uint16(33810), + 35: uint16(33767), + 36: uint16(33764), + 37: uint16(33788), + 38: uint16(33782), + 39: uint16(33808), + 40: uint16(33734), + 41: uint16(33736), + 42: uint16(33771), + 43: uint16(33763), + 44: uint16(33727), + 45: uint16(33793), + 46: uint16(33757), + 47: uint16(33765), + 48: uint16(33752), + 49: uint16(33791), + 50: uint16(33761), + 51: uint16(33739), + 52: uint16(33742), + 53: uint16(33750), + 54: uint16(33781), + 55: uint16(33737), + 56: uint16(33801), + 57: uint16(33807), + 58: uint16(33758), + 59: uint16(33809), + 60: uint16(33798), + 61: uint16(33730), + 62: uint16(33779), + 63: uint16(33749), + 64: uint16(33786), + 65: uint16(33735), + 66: uint16(33745), + 67: uint16(33770), + 68: uint16(33811), + 69: uint16(33731), + 70: uint16(33772), + 71: uint16(33774), + 72: uint16(33732), + 73: uint16(33787), + 74: uint16(33751), + 75: uint16(33762), + 76: uint16(33819), + 77: uint16(33755), + 78: uint16(33790), + 79: uint16(34520), + 80: uint16(34530), + 81: uint16(34534), + 82: uint16(34515), + 83: uint16(34531), + 84: uint16(34522), + 85: uint16(34538), + 86: uint16(34525), + 87: uint16(34539), + 88: uint16(34524), + 89: uint16(34540), + 90: uint16(34537), + 91: uint16(34519), + 92: uint16(34536), + 93: uint16(34513), + 94: uint16(34888), + 95: uint16(34902), + 96: uint16(34901), + 97: uint16(35002), + 98: uint16(35031), + 99: uint16(35001), + 100: uint16(35000), + 101: uint16(35008), + 102: uint16(35006), + 103: uint16(34998), + 104: uint16(35004), + 105: uint16(34999), + 106: uint16(35005), + 107: uint16(34994), + 108: uint16(35073), + 109: uint16(35017), + 110: uint16(35221), + 111: uint16(35224), + 112: uint16(35223), + 113: uint16(35293), + 114: uint16(35290), + 115: uint16(35291), + 116: uint16(35406), + 117: uint16(35405), + 118: uint16(35385), + 119: uint16(35417), + 120: uint16(35392), + 121: uint16(35415), + 122: uint16(35416), + 123: uint16(35396), + 124: uint16(35397), + 125: uint16(35410), + 126: uint16(35400), + 127: uint16(35409), + 128: uint16(35402), + 129: uint16(35404), + 130: uint16(35407), + 131: uint16(35935), + 132: uint16(35969), + 133: uint16(35968), + 134: uint16(36026), + 135: uint16(36030), + 136: uint16(36016), + 137: uint16(36025), + 138: uint16(36021), + 139: uint16(36228), + 140: uint16(36224), + 141: uint16(36233), + 142: uint16(36312), + 143: uint16(36307), + 144: uint16(36301), + 145: uint16(36295), + 146: uint16(36310), + 147: uint16(36316), + 148: uint16(36303), + 149: uint16(36309), + 150: uint16(36313), + 151: uint16(36296), + 152: uint16(36311), + 153: uint16(36293), + 154: uint16(36591), + 155: uint16(36599), + 156: uint16(36602), + }, + 59: { + 0: uint16(36601), + 1: uint16(36582), + 2: uint16(36590), + 3: uint16(36581), + 4: uint16(36597), + 5: uint16(36583), + 6: uint16(36584), + 7: uint16(36598), + 8: uint16(36587), + 9: uint16(36593), + 10: uint16(36588), + 11: uint16(36596), + 12: uint16(36585), + 13: uint16(36909), + 14: uint16(36916), + 15: uint16(36911), + 16: uint16(37126), + 17: uint16(37164), + 18: uint16(37124), + 19: uint16(37119), + 20: uint16(37116), + 21: uint16(37128), + 22: uint16(37113), + 23: uint16(37115), + 24: uint16(37121), + 25: uint16(37120), + 26: uint16(37127), + 27: uint16(37125), + 28: uint16(37123), + 29: uint16(37217), + 30: uint16(37220), + 31: uint16(37215), + 32: uint16(37218), + 33: uint16(37216), + 34: uint16(37377), + 35: uint16(37386), + 36: uint16(37413), + 37: uint16(37379), + 38: uint16(37402), + 39: uint16(37414), + 40: uint16(37391), + 41: uint16(37388), + 42: uint16(37376), + 43: uint16(37394), + 44: uint16(37375), + 45: uint16(37373), + 46: uint16(37382), + 47: uint16(37380), + 48: uint16(37415), + 49: uint16(37378), + 50: uint16(37404), + 51: uint16(37412), + 52: uint16(37401), + 53: uint16(37399), + 54: uint16(37381), + 55: uint16(37398), + 56: uint16(38267), + 57: uint16(38285), + 58: uint16(38284), + 59: uint16(38288), + 60: uint16(38535), + 61: uint16(38526), + 62: uint16(38536), + 63: uint16(38537), + 64: uint16(38531), + 65: uint16(38528), + 66: uint16(38594), + 67: uint16(38600), + 68: uint16(38595), + 69: uint16(38641), + 70: uint16(38640), + 71: uint16(38764), + 72: uint16(38768), + 73: uint16(38766), + 74: uint16(38919), + 75: uint16(39081), + 76: uint16(39147), + 77: uint16(40166), + 78: uint16(40697), + 79: uint16(20099), + 80: uint16(20100), + 81: uint16(20150), + 82: uint16(20669), + 83: uint16(20671), + 84: uint16(20678), + 85: uint16(20654), + 86: uint16(20676), + 87: uint16(20682), + 88: uint16(20660), + 89: uint16(20680), + 90: uint16(20674), + 91: uint16(20656), + 92: uint16(20673), + 93: uint16(20666), + 94: uint16(20657), + 95: uint16(20683), + 96: uint16(20681), + 97: uint16(20662), + 98: uint16(20664), + 99: uint16(20951), + 100: uint16(21114), + 101: uint16(21112), + 102: uint16(21115), + 103: uint16(21116), + 104: uint16(21955), + 105: uint16(21979), + 106: uint16(21964), + 107: uint16(21968), + 108: uint16(21963), + 109: uint16(21962), + 110: uint16(21981), + 111: uint16(21952), + 112: uint16(21972), + 113: uint16(21956), + 114: uint16(21993), + 115: uint16(21951), + 116: uint16(21970), + 117: uint16(21901), + 118: uint16(21967), + 119: uint16(21973), + 120: uint16(21986), + 121: uint16(21974), + 122: uint16(21960), + 123: uint16(22002), + 124: uint16(21965), + 125: uint16(21977), + 126: uint16(21954), + 127: uint16(22292), + 128: uint16(22611), + 129: uint16(22632), + 130: uint16(22628), + 131: uint16(22607), + 132: uint16(22605), + 133: uint16(22601), + 134: uint16(22639), + 135: uint16(22613), + 136: uint16(22606), + 137: uint16(22621), + 138: uint16(22617), + 139: uint16(22629), + 140: uint16(22619), + 141: uint16(22589), + 142: uint16(22627), + 143: uint16(22641), + 144: uint16(22780), + 145: uint16(23239), + 146: uint16(23236), + 147: uint16(23243), + 148: uint16(23226), + 149: uint16(23224), + 150: uint16(23217), + 151: uint16(23221), + 152: uint16(23216), + 153: uint16(23231), + 154: uint16(23240), + 155: uint16(23227), + 156: uint16(23238), + }, + 60: { + 0: uint16(23223), + 1: uint16(23232), + 2: uint16(23242), + 3: uint16(23220), + 4: uint16(23222), + 5: uint16(23245), + 6: uint16(23225), + 7: uint16(23184), + 8: uint16(23510), + 9: uint16(23512), + 10: uint16(23513), + 11: uint16(23583), + 12: uint16(23603), + 13: uint16(23921), + 14: uint16(23907), + 15: uint16(23882), + 16: uint16(23909), + 17: uint16(23922), + 18: uint16(23916), + 19: uint16(23902), + 20: uint16(23912), + 21: uint16(23911), + 22: uint16(23906), + 23: uint16(24048), + 24: uint16(24143), + 25: uint16(24142), + 26: uint16(24138), + 27: uint16(24141), + 28: uint16(24139), + 29: uint16(24261), + 30: uint16(24268), + 31: uint16(24262), + 32: uint16(24267), + 33: uint16(24263), + 34: uint16(24384), + 35: uint16(24495), + 36: uint16(24493), + 37: uint16(24823), + 38: uint16(24905), + 39: uint16(24906), + 40: uint16(24875), + 41: uint16(24901), + 42: uint16(24886), + 43: uint16(24882), + 44: uint16(24878), + 45: uint16(24902), + 46: uint16(24879), + 47: uint16(24911), + 48: uint16(24873), + 49: uint16(24896), + 50: uint16(25120), + 51: uint16(37224), + 52: uint16(25123), + 53: uint16(25125), + 54: uint16(25124), + 55: uint16(25541), + 56: uint16(25585), + 57: uint16(25579), + 58: uint16(25616), + 59: uint16(25618), + 60: uint16(25609), + 61: uint16(25632), + 62: uint16(25636), + 63: uint16(25651), + 64: uint16(25667), + 65: uint16(25631), + 66: uint16(25621), + 67: uint16(25624), + 68: uint16(25657), + 69: uint16(25655), + 70: uint16(25634), + 71: uint16(25635), + 72: uint16(25612), + 73: uint16(25638), + 74: uint16(25648), + 75: uint16(25640), + 76: uint16(25665), + 77: uint16(25653), + 78: uint16(25647), + 79: uint16(25610), + 80: uint16(25626), + 81: uint16(25664), + 82: uint16(25637), + 83: uint16(25639), + 84: uint16(25611), + 85: uint16(25575), + 86: uint16(25627), + 87: uint16(25646), + 88: uint16(25633), + 89: uint16(25614), + 90: uint16(25967), + 91: uint16(26002), + 92: uint16(26067), + 93: uint16(26246), + 94: uint16(26252), + 95: uint16(26261), + 96: uint16(26256), + 97: uint16(26251), + 98: uint16(26250), + 99: uint16(26265), + 100: uint16(26260), + 101: uint16(26232), + 102: uint16(26400), + 103: uint16(26982), + 104: uint16(26975), + 105: uint16(26936), + 106: uint16(26958), + 107: uint16(26978), + 108: uint16(26993), + 109: uint16(26943), + 110: uint16(26949), + 111: uint16(26986), + 112: uint16(26937), + 113: uint16(26946), + 114: uint16(26967), + 115: uint16(26969), + 116: uint16(27002), + 117: uint16(26952), + 118: uint16(26953), + 119: uint16(26933), + 120: uint16(26988), + 121: uint16(26931), + 122: uint16(26941), + 123: uint16(26981), + 124: uint16(26864), + 125: uint16(27000), + 126: uint16(26932), + 127: uint16(26985), + 128: uint16(26944), + 129: uint16(26991), + 130: uint16(26948), + 131: uint16(26998), + 132: uint16(26968), + 133: uint16(26945), + 134: uint16(26996), + 135: uint16(26956), + 136: uint16(26939), + 137: uint16(26955), + 138: uint16(26935), + 139: uint16(26972), + 140: uint16(26959), + 141: uint16(26961), + 142: uint16(26930), + 143: uint16(26962), + 144: uint16(26927), + 145: uint16(27003), + 146: uint16(26940), + 147: uint16(27462), + 148: uint16(27461), + 149: uint16(27459), + 150: uint16(27458), + 151: uint16(27464), + 152: uint16(27457), + 153: uint16(27547), + 154: uint16(64013), + 155: uint16(27643), + 156: uint16(27644), + }, + 61: { + 0: uint16(27641), + 1: uint16(27639), + 2: uint16(27640), + 3: uint16(28315), + 4: uint16(28374), + 5: uint16(28360), + 6: uint16(28303), + 7: uint16(28352), + 8: uint16(28319), + 9: uint16(28307), + 10: uint16(28308), + 11: uint16(28320), + 12: uint16(28337), + 13: uint16(28345), + 14: uint16(28358), + 15: uint16(28370), + 16: uint16(28349), + 17: uint16(28353), + 18: uint16(28318), + 19: uint16(28361), + 20: uint16(28343), + 21: uint16(28336), + 22: uint16(28365), + 23: uint16(28326), + 24: uint16(28367), + 25: uint16(28338), + 26: uint16(28350), + 27: uint16(28355), + 28: uint16(28380), + 29: uint16(28376), + 30: uint16(28313), + 31: uint16(28306), + 32: uint16(28302), + 33: uint16(28301), + 34: uint16(28324), + 35: uint16(28321), + 36: uint16(28351), + 37: uint16(28339), + 38: uint16(28368), + 39: uint16(28362), + 40: uint16(28311), + 41: uint16(28334), + 42: uint16(28323), + 43: uint16(28999), + 44: uint16(29012), + 45: uint16(29010), + 46: uint16(29027), + 47: uint16(29024), + 48: uint16(28993), + 49: uint16(29021), + 50: uint16(29026), + 51: uint16(29042), + 52: uint16(29048), + 53: uint16(29034), + 54: uint16(29025), + 55: uint16(28994), + 56: uint16(29016), + 57: uint16(28995), + 58: uint16(29003), + 59: uint16(29040), + 60: uint16(29023), + 61: uint16(29008), + 62: uint16(29011), + 63: uint16(28996), + 64: uint16(29005), + 65: uint16(29018), + 66: uint16(29263), + 67: uint16(29325), + 68: uint16(29324), + 69: uint16(29329), + 70: uint16(29328), + 71: uint16(29326), + 72: uint16(29500), + 73: uint16(29506), + 74: uint16(29499), + 75: uint16(29498), + 76: uint16(29504), + 77: uint16(29514), + 78: uint16(29513), + 79: uint16(29764), + 80: uint16(29770), + 81: uint16(29771), + 82: uint16(29778), + 83: uint16(29777), + 84: uint16(29783), + 85: uint16(29760), + 86: uint16(29775), + 87: uint16(29776), + 88: uint16(29774), + 89: uint16(29762), + 90: uint16(29766), + 91: uint16(29773), + 92: uint16(29780), + 93: uint16(29921), + 94: uint16(29951), + 95: uint16(29950), + 96: uint16(29949), + 97: uint16(29981), + 98: uint16(30073), + 99: uint16(30071), + 100: uint16(27011), + 101: uint16(30191), + 102: uint16(30223), + 103: uint16(30211), + 104: uint16(30199), + 105: uint16(30206), + 106: uint16(30204), + 107: uint16(30201), + 108: uint16(30200), + 109: uint16(30224), + 110: uint16(30203), + 111: uint16(30198), + 112: uint16(30189), + 113: uint16(30197), + 114: uint16(30205), + 115: uint16(30361), + 116: uint16(30389), + 117: uint16(30429), + 118: uint16(30549), + 119: uint16(30559), + 120: uint16(30560), + 121: uint16(30546), + 122: uint16(30550), + 123: uint16(30554), + 124: uint16(30569), + 125: uint16(30567), + 126: uint16(30548), + 127: uint16(30553), + 128: uint16(30573), + 129: uint16(30688), + 130: uint16(30855), + 131: uint16(30874), + 132: uint16(30868), + 133: uint16(30863), + 134: uint16(30852), + 135: uint16(30869), + 136: uint16(30853), + 137: uint16(30854), + 138: uint16(30881), + 139: uint16(30851), + 140: uint16(30841), + 141: uint16(30873), + 142: uint16(30848), + 143: uint16(30870), + 144: uint16(30843), + 145: uint16(31100), + 146: uint16(31106), + 147: uint16(31101), + 148: uint16(31097), + 149: uint16(31249), + 150: uint16(31256), + 151: uint16(31257), + 152: uint16(31250), + 153: uint16(31255), + 154: uint16(31253), + 155: uint16(31266), + 156: uint16(31251), + }, + 62: { + 0: uint16(31259), + 1: uint16(31248), + 2: uint16(31395), + 3: uint16(31394), + 4: uint16(31390), + 5: uint16(31467), + 6: uint16(31590), + 7: uint16(31588), + 8: uint16(31597), + 9: uint16(31604), + 10: uint16(31593), + 11: uint16(31602), + 12: uint16(31589), + 13: uint16(31603), + 14: uint16(31601), + 15: uint16(31600), + 16: uint16(31585), + 17: uint16(31608), + 18: uint16(31606), + 19: uint16(31587), + 20: uint16(31922), + 21: uint16(31924), + 22: uint16(31919), + 23: uint16(32136), + 24: uint16(32134), + 25: uint16(32128), + 26: uint16(32141), + 27: uint16(32127), + 28: uint16(32133), + 29: uint16(32122), + 30: uint16(32142), + 31: uint16(32123), + 32: uint16(32131), + 33: uint16(32124), + 34: uint16(32140), + 35: uint16(32148), + 36: uint16(32132), + 37: uint16(32125), + 38: uint16(32146), + 39: uint16(32621), + 40: uint16(32619), + 41: uint16(32615), + 42: uint16(32616), + 43: uint16(32620), + 44: uint16(32678), + 45: uint16(32677), + 46: uint16(32679), + 47: uint16(32731), + 48: uint16(32732), + 49: uint16(32801), + 50: uint16(33124), + 51: uint16(33120), + 52: uint16(33143), + 53: uint16(33116), + 54: uint16(33129), + 55: uint16(33115), + 56: uint16(33122), + 57: uint16(33138), + 58: uint16(26401), + 59: uint16(33118), + 60: uint16(33142), + 61: uint16(33127), + 62: uint16(33135), + 63: uint16(33092), + 64: uint16(33121), + 65: uint16(33309), + 66: uint16(33353), + 67: uint16(33348), + 68: uint16(33344), + 69: uint16(33346), + 70: uint16(33349), + 71: uint16(34033), + 72: uint16(33855), + 73: uint16(33878), + 74: uint16(33910), + 75: uint16(33913), + 76: uint16(33935), + 77: uint16(33933), + 78: uint16(33893), + 79: uint16(33873), + 80: uint16(33856), + 81: uint16(33926), + 82: uint16(33895), + 83: uint16(33840), + 84: uint16(33869), + 85: uint16(33917), + 86: uint16(33882), + 87: uint16(33881), + 88: uint16(33908), + 89: uint16(33907), + 90: uint16(33885), + 91: uint16(34055), + 92: uint16(33886), + 93: uint16(33847), + 94: uint16(33850), + 95: uint16(33844), + 96: uint16(33914), + 97: uint16(33859), + 98: uint16(33912), + 99: uint16(33842), + 100: uint16(33861), + 101: uint16(33833), + 102: uint16(33753), + 103: uint16(33867), + 104: uint16(33839), + 105: uint16(33858), + 106: uint16(33837), + 107: uint16(33887), + 108: uint16(33904), + 109: uint16(33849), + 110: uint16(33870), + 111: uint16(33868), + 112: uint16(33874), + 113: uint16(33903), + 114: uint16(33989), + 115: uint16(33934), + 116: uint16(33851), + 117: uint16(33863), + 118: uint16(33846), + 119: uint16(33843), + 120: uint16(33896), + 121: uint16(33918), + 122: uint16(33860), + 123: uint16(33835), + 124: uint16(33888), + 125: uint16(33876), + 126: uint16(33902), + 127: uint16(33872), + 128: uint16(34571), + 129: uint16(34564), + 130: uint16(34551), + 131: uint16(34572), + 132: uint16(34554), + 133: uint16(34518), + 134: uint16(34549), + 135: uint16(34637), + 136: uint16(34552), + 137: uint16(34574), + 138: uint16(34569), + 139: uint16(34561), + 140: uint16(34550), + 141: uint16(34573), + 142: uint16(34565), + 143: uint16(35030), + 144: uint16(35019), + 145: uint16(35021), + 146: uint16(35022), + 147: uint16(35038), + 148: uint16(35035), + 149: uint16(35034), + 150: uint16(35020), + 151: uint16(35024), + 152: uint16(35205), + 153: uint16(35227), + 154: uint16(35295), + 155: uint16(35301), + 156: uint16(35300), + }, + 63: { + 0: uint16(35297), + 1: uint16(35296), + 2: uint16(35298), + 3: uint16(35292), + 4: uint16(35302), + 5: uint16(35446), + 6: uint16(35462), + 7: uint16(35455), + 8: uint16(35425), + 9: uint16(35391), + 10: uint16(35447), + 11: uint16(35458), + 12: uint16(35460), + 13: uint16(35445), + 14: uint16(35459), + 15: uint16(35457), + 16: uint16(35444), + 17: uint16(35450), + 18: uint16(35900), + 19: uint16(35915), + 20: uint16(35914), + 21: uint16(35941), + 22: uint16(35940), + 23: uint16(35942), + 24: uint16(35974), + 25: uint16(35972), + 26: uint16(35973), + 27: uint16(36044), + 28: uint16(36200), + 29: uint16(36201), + 30: uint16(36241), + 31: uint16(36236), + 32: uint16(36238), + 33: uint16(36239), + 34: uint16(36237), + 35: uint16(36243), + 36: uint16(36244), + 37: uint16(36240), + 38: uint16(36242), + 39: uint16(36336), + 40: uint16(36320), + 41: uint16(36332), + 42: uint16(36337), + 43: uint16(36334), + 44: uint16(36304), + 45: uint16(36329), + 46: uint16(36323), + 47: uint16(36322), + 48: uint16(36327), + 49: uint16(36338), + 50: uint16(36331), + 51: uint16(36340), + 52: uint16(36614), + 53: uint16(36607), + 54: uint16(36609), + 55: uint16(36608), + 56: uint16(36613), + 57: uint16(36615), + 58: uint16(36616), + 59: uint16(36610), + 60: uint16(36619), + 61: uint16(36946), + 62: uint16(36927), + 63: uint16(36932), + 64: uint16(36937), + 65: uint16(36925), + 66: uint16(37136), + 67: uint16(37133), + 68: uint16(37135), + 69: uint16(37137), + 70: uint16(37142), + 71: uint16(37140), + 72: uint16(37131), + 73: uint16(37134), + 74: uint16(37230), + 75: uint16(37231), + 76: uint16(37448), + 77: uint16(37458), + 78: uint16(37424), + 79: uint16(37434), + 80: uint16(37478), + 81: uint16(37427), + 82: uint16(37477), + 83: uint16(37470), + 84: uint16(37507), + 85: uint16(37422), + 86: uint16(37450), + 87: uint16(37446), + 88: uint16(37485), + 89: uint16(37484), + 90: uint16(37455), + 91: uint16(37472), + 92: uint16(37479), + 93: uint16(37487), + 94: uint16(37430), + 95: uint16(37473), + 96: uint16(37488), + 97: uint16(37425), + 98: uint16(37460), + 99: uint16(37475), + 100: uint16(37456), + 101: uint16(37490), + 102: uint16(37454), + 103: uint16(37459), + 104: uint16(37452), + 105: uint16(37462), + 106: uint16(37426), + 107: uint16(38303), + 108: uint16(38300), + 109: uint16(38302), + 110: uint16(38299), + 111: uint16(38546), + 112: uint16(38547), + 113: uint16(38545), + 114: uint16(38551), + 115: uint16(38606), + 116: uint16(38650), + 117: uint16(38653), + 118: uint16(38648), + 119: uint16(38645), + 120: uint16(38771), + 121: uint16(38775), + 122: uint16(38776), + 123: uint16(38770), + 124: uint16(38927), + 125: uint16(38925), + 126: uint16(38926), + 127: uint16(39084), + 128: uint16(39158), + 129: uint16(39161), + 130: uint16(39343), + 131: uint16(39346), + 132: uint16(39344), + 133: uint16(39349), + 134: uint16(39597), + 135: uint16(39595), + 136: uint16(39771), + 137: uint16(40170), + 138: uint16(40173), + 139: uint16(40167), + 140: uint16(40576), + 141: uint16(40701), + 142: uint16(20710), + 143: uint16(20692), + 144: uint16(20695), + 145: uint16(20712), + 146: uint16(20723), + 147: uint16(20699), + 148: uint16(20714), + 149: uint16(20701), + 150: uint16(20708), + 151: uint16(20691), + 152: uint16(20716), + 153: uint16(20720), + 154: uint16(20719), + 155: uint16(20707), + 156: uint16(20704), + }, + 64: { + 0: uint16(20952), + 1: uint16(21120), + 2: uint16(21121), + 3: uint16(21225), + 4: uint16(21227), + 5: uint16(21296), + 6: uint16(21420), + 7: uint16(22055), + 8: uint16(22037), + 9: uint16(22028), + 10: uint16(22034), + 11: uint16(22012), + 12: uint16(22031), + 13: uint16(22044), + 14: uint16(22017), + 15: uint16(22035), + 16: uint16(22018), + 17: uint16(22010), + 18: uint16(22045), + 19: uint16(22020), + 20: uint16(22015), + 21: uint16(22009), + 22: uint16(22665), + 23: uint16(22652), + 24: uint16(22672), + 25: uint16(22680), + 26: uint16(22662), + 27: uint16(22657), + 28: uint16(22655), + 29: uint16(22644), + 30: uint16(22667), + 31: uint16(22650), + 32: uint16(22663), + 33: uint16(22673), + 34: uint16(22670), + 35: uint16(22646), + 36: uint16(22658), + 37: uint16(22664), + 38: uint16(22651), + 39: uint16(22676), + 40: uint16(22671), + 41: uint16(22782), + 42: uint16(22891), + 43: uint16(23260), + 44: uint16(23278), + 45: uint16(23269), + 46: uint16(23253), + 47: uint16(23274), + 48: uint16(23258), + 49: uint16(23277), + 50: uint16(23275), + 51: uint16(23283), + 52: uint16(23266), + 53: uint16(23264), + 54: uint16(23259), + 55: uint16(23276), + 56: uint16(23262), + 57: uint16(23261), + 58: uint16(23257), + 59: uint16(23272), + 60: uint16(23263), + 61: uint16(23415), + 62: uint16(23520), + 63: uint16(23523), + 64: uint16(23651), + 65: uint16(23938), + 66: uint16(23936), + 67: uint16(23933), + 68: uint16(23942), + 69: uint16(23930), + 70: uint16(23937), + 71: uint16(23927), + 72: uint16(23946), + 73: uint16(23945), + 74: uint16(23944), + 75: uint16(23934), + 76: uint16(23932), + 77: uint16(23949), + 78: uint16(23929), + 79: uint16(23935), + 80: uint16(24152), + 81: uint16(24153), + 82: uint16(24147), + 83: uint16(24280), + 84: uint16(24273), + 85: uint16(24279), + 86: uint16(24270), + 87: uint16(24284), + 88: uint16(24277), + 89: uint16(24281), + 90: uint16(24274), + 91: uint16(24276), + 92: uint16(24388), + 93: uint16(24387), + 94: uint16(24431), + 95: uint16(24502), + 96: uint16(24876), + 97: uint16(24872), + 98: uint16(24897), + 99: uint16(24926), + 100: uint16(24945), + 101: uint16(24947), + 102: uint16(24914), + 103: uint16(24915), + 104: uint16(24946), + 105: uint16(24940), + 106: uint16(24960), + 107: uint16(24948), + 108: uint16(24916), + 109: uint16(24954), + 110: uint16(24923), + 111: uint16(24933), + 112: uint16(24891), + 113: uint16(24938), + 114: uint16(24929), + 115: uint16(24918), + 116: uint16(25129), + 117: uint16(25127), + 118: uint16(25131), + 119: uint16(25643), + 120: uint16(25677), + 121: uint16(25691), + 122: uint16(25693), + 123: uint16(25716), + 124: uint16(25718), + 125: uint16(25714), + 126: uint16(25715), + 127: uint16(25725), + 128: uint16(25717), + 129: uint16(25702), + 130: uint16(25766), + 131: uint16(25678), + 132: uint16(25730), + 133: uint16(25694), + 134: uint16(25692), + 135: uint16(25675), + 136: uint16(25683), + 137: uint16(25696), + 138: uint16(25680), + 139: uint16(25727), + 140: uint16(25663), + 141: uint16(25708), + 142: uint16(25707), + 143: uint16(25689), + 144: uint16(25701), + 145: uint16(25719), + 146: uint16(25971), + 147: uint16(26016), + 148: uint16(26273), + 149: uint16(26272), + 150: uint16(26271), + 151: uint16(26373), + 152: uint16(26372), + 153: uint16(26402), + 154: uint16(27057), + 155: uint16(27062), + 156: uint16(27081), + }, + 65: { + 0: uint16(27040), + 1: uint16(27086), + 2: uint16(27030), + 3: uint16(27056), + 4: uint16(27052), + 5: uint16(27068), + 6: uint16(27025), + 7: uint16(27033), + 8: uint16(27022), + 9: uint16(27047), + 10: uint16(27021), + 11: uint16(27049), + 12: uint16(27070), + 13: uint16(27055), + 14: uint16(27071), + 15: uint16(27076), + 16: uint16(27069), + 17: uint16(27044), + 18: uint16(27092), + 19: uint16(27065), + 20: uint16(27082), + 21: uint16(27034), + 22: uint16(27087), + 23: uint16(27059), + 24: uint16(27027), + 25: uint16(27050), + 26: uint16(27041), + 27: uint16(27038), + 28: uint16(27097), + 29: uint16(27031), + 30: uint16(27024), + 31: uint16(27074), + 32: uint16(27061), + 33: uint16(27045), + 34: uint16(27078), + 35: uint16(27466), + 36: uint16(27469), + 37: uint16(27467), + 38: uint16(27550), + 39: uint16(27551), + 40: uint16(27552), + 41: uint16(27587), + 42: uint16(27588), + 43: uint16(27646), + 44: uint16(28366), + 45: uint16(28405), + 46: uint16(28401), + 47: uint16(28419), + 48: uint16(28453), + 49: uint16(28408), + 50: uint16(28471), + 51: uint16(28411), + 52: uint16(28462), + 53: uint16(28425), + 54: uint16(28494), + 55: uint16(28441), + 56: uint16(28442), + 57: uint16(28455), + 58: uint16(28440), + 59: uint16(28475), + 60: uint16(28434), + 61: uint16(28397), + 62: uint16(28426), + 63: uint16(28470), + 64: uint16(28531), + 65: uint16(28409), + 66: uint16(28398), + 67: uint16(28461), + 68: uint16(28480), + 69: uint16(28464), + 70: uint16(28476), + 71: uint16(28469), + 72: uint16(28395), + 73: uint16(28423), + 74: uint16(28430), + 75: uint16(28483), + 76: uint16(28421), + 77: uint16(28413), + 78: uint16(28406), + 79: uint16(28473), + 80: uint16(28444), + 81: uint16(28412), + 82: uint16(28474), + 83: uint16(28447), + 84: uint16(28429), + 85: uint16(28446), + 86: uint16(28424), + 87: uint16(28449), + 88: uint16(29063), + 89: uint16(29072), + 90: uint16(29065), + 91: uint16(29056), + 92: uint16(29061), + 93: uint16(29058), + 94: uint16(29071), + 95: uint16(29051), + 96: uint16(29062), + 97: uint16(29057), + 98: uint16(29079), + 99: uint16(29252), + 100: uint16(29267), + 101: uint16(29335), + 102: uint16(29333), + 103: uint16(29331), + 104: uint16(29507), + 105: uint16(29517), + 106: uint16(29521), + 107: uint16(29516), + 108: uint16(29794), + 109: uint16(29811), + 110: uint16(29809), + 111: uint16(29813), + 112: uint16(29810), + 113: uint16(29799), + 114: uint16(29806), + 115: uint16(29952), + 116: uint16(29954), + 117: uint16(29955), + 118: uint16(30077), + 119: uint16(30096), + 120: uint16(30230), + 121: uint16(30216), + 122: uint16(30220), + 123: uint16(30229), + 124: uint16(30225), + 125: uint16(30218), + 126: uint16(30228), + 127: uint16(30392), + 128: uint16(30593), + 129: uint16(30588), + 130: uint16(30597), + 131: uint16(30594), + 132: uint16(30574), + 133: uint16(30592), + 134: uint16(30575), + 135: uint16(30590), + 136: uint16(30595), + 137: uint16(30898), + 138: uint16(30890), + 139: uint16(30900), + 140: uint16(30893), + 141: uint16(30888), + 142: uint16(30846), + 143: uint16(30891), + 144: uint16(30878), + 145: uint16(30885), + 146: uint16(30880), + 147: uint16(30892), + 148: uint16(30882), + 149: uint16(30884), + 150: uint16(31128), + 151: uint16(31114), + 152: uint16(31115), + 153: uint16(31126), + 154: uint16(31125), + 155: uint16(31124), + 156: uint16(31123), + }, + 66: { + 0: uint16(31127), + 1: uint16(31112), + 2: uint16(31122), + 3: uint16(31120), + 4: uint16(31275), + 5: uint16(31306), + 6: uint16(31280), + 7: uint16(31279), + 8: uint16(31272), + 9: uint16(31270), + 10: uint16(31400), + 11: uint16(31403), + 12: uint16(31404), + 13: uint16(31470), + 14: uint16(31624), + 15: uint16(31644), + 16: uint16(31626), + 17: uint16(31633), + 18: uint16(31632), + 19: uint16(31638), + 20: uint16(31629), + 21: uint16(31628), + 22: uint16(31643), + 23: uint16(31630), + 24: uint16(31621), + 25: uint16(31640), + 26: uint16(21124), + 27: uint16(31641), + 28: uint16(31652), + 29: uint16(31618), + 30: uint16(31931), + 31: uint16(31935), + 32: uint16(31932), + 33: uint16(31930), + 34: uint16(32167), + 35: uint16(32183), + 36: uint16(32194), + 37: uint16(32163), + 38: uint16(32170), + 39: uint16(32193), + 40: uint16(32192), + 41: uint16(32197), + 42: uint16(32157), + 43: uint16(32206), + 44: uint16(32196), + 45: uint16(32198), + 46: uint16(32203), + 47: uint16(32204), + 48: uint16(32175), + 49: uint16(32185), + 50: uint16(32150), + 51: uint16(32188), + 52: uint16(32159), + 53: uint16(32166), + 54: uint16(32174), + 55: uint16(32169), + 56: uint16(32161), + 57: uint16(32201), + 58: uint16(32627), + 59: uint16(32738), + 60: uint16(32739), + 61: uint16(32741), + 62: uint16(32734), + 63: uint16(32804), + 64: uint16(32861), + 65: uint16(32860), + 66: uint16(33161), + 67: uint16(33158), + 68: uint16(33155), + 69: uint16(33159), + 70: uint16(33165), + 71: uint16(33164), + 72: uint16(33163), + 73: uint16(33301), + 74: uint16(33943), + 75: uint16(33956), + 76: uint16(33953), + 77: uint16(33951), + 78: uint16(33978), + 79: uint16(33998), + 80: uint16(33986), + 81: uint16(33964), + 82: uint16(33966), + 83: uint16(33963), + 84: uint16(33977), + 85: uint16(33972), + 86: uint16(33985), + 87: uint16(33997), + 88: uint16(33962), + 89: uint16(33946), + 90: uint16(33969), + 91: uint16(34000), + 92: uint16(33949), + 93: uint16(33959), + 94: uint16(33979), + 95: uint16(33954), + 96: uint16(33940), + 97: uint16(33991), + 98: uint16(33996), + 99: uint16(33947), + 100: uint16(33961), + 101: uint16(33967), + 102: uint16(33960), + 103: uint16(34006), + 104: uint16(33944), + 105: uint16(33974), + 106: uint16(33999), + 107: uint16(33952), + 108: uint16(34007), + 109: uint16(34004), + 110: uint16(34002), + 111: uint16(34011), + 112: uint16(33968), + 113: uint16(33937), + 114: uint16(34401), + 115: uint16(34611), + 116: uint16(34595), + 117: uint16(34600), + 118: uint16(34667), + 119: uint16(34624), + 120: uint16(34606), + 121: uint16(34590), + 122: uint16(34593), + 123: uint16(34585), + 124: uint16(34587), + 125: uint16(34627), + 126: uint16(34604), + 127: uint16(34625), + 128: uint16(34622), + 129: uint16(34630), + 130: uint16(34592), + 131: uint16(34610), + 132: uint16(34602), + 133: uint16(34605), + 134: uint16(34620), + 135: uint16(34578), + 136: uint16(34618), + 137: uint16(34609), + 138: uint16(34613), + 139: uint16(34626), + 140: uint16(34598), + 141: uint16(34599), + 142: uint16(34616), + 143: uint16(34596), + 144: uint16(34586), + 145: uint16(34608), + 146: uint16(34577), + 147: uint16(35063), + 148: uint16(35047), + 149: uint16(35057), + 150: uint16(35058), + 151: uint16(35066), + 152: uint16(35070), + 153: uint16(35054), + 154: uint16(35068), + 155: uint16(35062), + 156: uint16(35067), + }, + 67: { + 0: uint16(35056), + 1: uint16(35052), + 2: uint16(35051), + 3: uint16(35229), + 4: uint16(35233), + 5: uint16(35231), + 6: uint16(35230), + 7: uint16(35305), + 8: uint16(35307), + 9: uint16(35304), + 10: uint16(35499), + 11: uint16(35481), + 12: uint16(35467), + 13: uint16(35474), + 14: uint16(35471), + 15: uint16(35478), + 16: uint16(35901), + 17: uint16(35944), + 18: uint16(35945), + 19: uint16(36053), + 20: uint16(36047), + 21: uint16(36055), + 22: uint16(36246), + 23: uint16(36361), + 24: uint16(36354), + 25: uint16(36351), + 26: uint16(36365), + 27: uint16(36349), + 28: uint16(36362), + 29: uint16(36355), + 30: uint16(36359), + 31: uint16(36358), + 32: uint16(36357), + 33: uint16(36350), + 34: uint16(36352), + 35: uint16(36356), + 36: uint16(36624), + 37: uint16(36625), + 38: uint16(36622), + 39: uint16(36621), + 40: uint16(37155), + 41: uint16(37148), + 42: uint16(37152), + 43: uint16(37154), + 44: uint16(37151), + 45: uint16(37149), + 46: uint16(37146), + 47: uint16(37156), + 48: uint16(37153), + 49: uint16(37147), + 50: uint16(37242), + 51: uint16(37234), + 52: uint16(37241), + 53: uint16(37235), + 54: uint16(37541), + 55: uint16(37540), + 56: uint16(37494), + 57: uint16(37531), + 58: uint16(37498), + 59: uint16(37536), + 60: uint16(37524), + 61: uint16(37546), + 62: uint16(37517), + 63: uint16(37542), + 64: uint16(37530), + 65: uint16(37547), + 66: uint16(37497), + 67: uint16(37527), + 68: uint16(37503), + 69: uint16(37539), + 70: uint16(37614), + 71: uint16(37518), + 72: uint16(37506), + 73: uint16(37525), + 74: uint16(37538), + 75: uint16(37501), + 76: uint16(37512), + 77: uint16(37537), + 78: uint16(37514), + 79: uint16(37510), + 80: uint16(37516), + 81: uint16(37529), + 82: uint16(37543), + 83: uint16(37502), + 84: uint16(37511), + 85: uint16(37545), + 86: uint16(37533), + 87: uint16(37515), + 88: uint16(37421), + 89: uint16(38558), + 90: uint16(38561), + 91: uint16(38655), + 92: uint16(38744), + 93: uint16(38781), + 94: uint16(38778), + 95: uint16(38782), + 96: uint16(38787), + 97: uint16(38784), + 98: uint16(38786), + 99: uint16(38779), + 100: uint16(38788), + 101: uint16(38785), + 102: uint16(38783), + 103: uint16(38862), + 104: uint16(38861), + 105: uint16(38934), + 106: uint16(39085), + 107: uint16(39086), + 108: uint16(39170), + 109: uint16(39168), + 110: uint16(39175), + 111: uint16(39325), + 112: uint16(39324), + 113: uint16(39363), + 114: uint16(39353), + 115: uint16(39355), + 116: uint16(39354), + 117: uint16(39362), + 118: uint16(39357), + 119: uint16(39367), + 120: uint16(39601), + 121: uint16(39651), + 122: uint16(39655), + 123: uint16(39742), + 124: uint16(39743), + 125: uint16(39776), + 126: uint16(39777), + 127: uint16(39775), + 128: uint16(40177), + 129: uint16(40178), + 130: uint16(40181), + 131: uint16(40615), + 132: uint16(20735), + 133: uint16(20739), + 134: uint16(20784), + 135: uint16(20728), + 136: uint16(20742), + 137: uint16(20743), + 138: uint16(20726), + 139: uint16(20734), + 140: uint16(20747), + 141: uint16(20748), + 142: uint16(20733), + 143: uint16(20746), + 144: uint16(21131), + 145: uint16(21132), + 146: uint16(21233), + 147: uint16(21231), + 148: uint16(22088), + 149: uint16(22082), + 150: uint16(22092), + 151: uint16(22069), + 152: uint16(22081), + 153: uint16(22090), + 154: uint16(22089), + 155: uint16(22086), + 156: uint16(22104), + }, + 68: { + 0: uint16(22106), + 1: uint16(22080), + 2: uint16(22067), + 3: uint16(22077), + 4: uint16(22060), + 5: uint16(22078), + 6: uint16(22072), + 7: uint16(22058), + 8: uint16(22074), + 9: uint16(22298), + 10: uint16(22699), + 11: uint16(22685), + 12: uint16(22705), + 13: uint16(22688), + 14: uint16(22691), + 15: uint16(22703), + 16: uint16(22700), + 17: uint16(22693), + 18: uint16(22689), + 19: uint16(22783), + 20: uint16(23295), + 21: uint16(23284), + 22: uint16(23293), + 23: uint16(23287), + 24: uint16(23286), + 25: uint16(23299), + 26: uint16(23288), + 27: uint16(23298), + 28: uint16(23289), + 29: uint16(23297), + 30: uint16(23303), + 31: uint16(23301), + 32: uint16(23311), + 33: uint16(23655), + 34: uint16(23961), + 35: uint16(23959), + 36: uint16(23967), + 37: uint16(23954), + 38: uint16(23970), + 39: uint16(23955), + 40: uint16(23957), + 41: uint16(23968), + 42: uint16(23964), + 43: uint16(23969), + 44: uint16(23962), + 45: uint16(23966), + 46: uint16(24169), + 47: uint16(24157), + 48: uint16(24160), + 49: uint16(24156), + 50: uint16(32243), + 51: uint16(24283), + 52: uint16(24286), + 53: uint16(24289), + 54: uint16(24393), + 55: uint16(24498), + 56: uint16(24971), + 57: uint16(24963), + 58: uint16(24953), + 59: uint16(25009), + 60: uint16(25008), + 61: uint16(24994), + 62: uint16(24969), + 63: uint16(24987), + 64: uint16(24979), + 65: uint16(25007), + 66: uint16(25005), + 67: uint16(24991), + 68: uint16(24978), + 69: uint16(25002), + 70: uint16(24993), + 71: uint16(24973), + 72: uint16(24934), + 73: uint16(25011), + 74: uint16(25133), + 75: uint16(25710), + 76: uint16(25712), + 77: uint16(25750), + 78: uint16(25760), + 79: uint16(25733), + 80: uint16(25751), + 81: uint16(25756), + 82: uint16(25743), + 83: uint16(25739), + 84: uint16(25738), + 85: uint16(25740), + 86: uint16(25763), + 87: uint16(25759), + 88: uint16(25704), + 89: uint16(25777), + 90: uint16(25752), + 91: uint16(25974), + 92: uint16(25978), + 93: uint16(25977), + 94: uint16(25979), + 95: uint16(26034), + 96: uint16(26035), + 97: uint16(26293), + 98: uint16(26288), + 99: uint16(26281), + 100: uint16(26290), + 101: uint16(26295), + 102: uint16(26282), + 103: uint16(26287), + 104: uint16(27136), + 105: uint16(27142), + 106: uint16(27159), + 107: uint16(27109), + 108: uint16(27128), + 109: uint16(27157), + 110: uint16(27121), + 111: uint16(27108), + 112: uint16(27168), + 113: uint16(27135), + 114: uint16(27116), + 115: uint16(27106), + 116: uint16(27163), + 117: uint16(27165), + 118: uint16(27134), + 119: uint16(27175), + 120: uint16(27122), + 121: uint16(27118), + 122: uint16(27156), + 123: uint16(27127), + 124: uint16(27111), + 125: uint16(27200), + 126: uint16(27144), + 127: uint16(27110), + 128: uint16(27131), + 129: uint16(27149), + 130: uint16(27132), + 131: uint16(27115), + 132: uint16(27145), + 133: uint16(27140), + 134: uint16(27160), + 135: uint16(27173), + 136: uint16(27151), + 137: uint16(27126), + 138: uint16(27174), + 139: uint16(27143), + 140: uint16(27124), + 141: uint16(27158), + 142: uint16(27473), + 143: uint16(27557), + 144: uint16(27555), + 145: uint16(27554), + 146: uint16(27558), + 147: uint16(27649), + 148: uint16(27648), + 149: uint16(27647), + 150: uint16(27650), + 151: uint16(28481), + 152: uint16(28454), + 153: uint16(28542), + 154: uint16(28551), + 155: uint16(28614), + 156: uint16(28562), + }, + 69: { + 0: uint16(28557), + 1: uint16(28553), + 2: uint16(28556), + 3: uint16(28514), + 4: uint16(28495), + 5: uint16(28549), + 6: uint16(28506), + 7: uint16(28566), + 8: uint16(28534), + 9: uint16(28524), + 10: uint16(28546), + 11: uint16(28501), + 12: uint16(28530), + 13: uint16(28498), + 14: uint16(28496), + 15: uint16(28503), + 16: uint16(28564), + 17: uint16(28563), + 18: uint16(28509), + 19: uint16(28416), + 20: uint16(28513), + 21: uint16(28523), + 22: uint16(28541), + 23: uint16(28519), + 24: uint16(28560), + 25: uint16(28499), + 26: uint16(28555), + 27: uint16(28521), + 28: uint16(28543), + 29: uint16(28565), + 30: uint16(28515), + 31: uint16(28535), + 32: uint16(28522), + 33: uint16(28539), + 34: uint16(29106), + 35: uint16(29103), + 36: uint16(29083), + 37: uint16(29104), + 38: uint16(29088), + 39: uint16(29082), + 40: uint16(29097), + 41: uint16(29109), + 42: uint16(29085), + 43: uint16(29093), + 44: uint16(29086), + 45: uint16(29092), + 46: uint16(29089), + 47: uint16(29098), + 48: uint16(29084), + 49: uint16(29095), + 50: uint16(29107), + 51: uint16(29336), + 52: uint16(29338), + 53: uint16(29528), + 54: uint16(29522), + 55: uint16(29534), + 56: uint16(29535), + 57: uint16(29536), + 58: uint16(29533), + 59: uint16(29531), + 60: uint16(29537), + 61: uint16(29530), + 62: uint16(29529), + 63: uint16(29538), + 64: uint16(29831), + 65: uint16(29833), + 66: uint16(29834), + 67: uint16(29830), + 68: uint16(29825), + 69: uint16(29821), + 70: uint16(29829), + 71: uint16(29832), + 72: uint16(29820), + 73: uint16(29817), + 74: uint16(29960), + 75: uint16(29959), + 76: uint16(30078), + 77: uint16(30245), + 78: uint16(30238), + 79: uint16(30233), + 80: uint16(30237), + 81: uint16(30236), + 82: uint16(30243), + 83: uint16(30234), + 84: uint16(30248), + 85: uint16(30235), + 86: uint16(30364), + 87: uint16(30365), + 88: uint16(30366), + 89: uint16(30363), + 90: uint16(30605), + 91: uint16(30607), + 92: uint16(30601), + 93: uint16(30600), + 94: uint16(30925), + 95: uint16(30907), + 96: uint16(30927), + 97: uint16(30924), + 98: uint16(30929), + 99: uint16(30926), + 100: uint16(30932), + 101: uint16(30920), + 102: uint16(30915), + 103: uint16(30916), + 104: uint16(30921), + 105: uint16(31130), + 106: uint16(31137), + 107: uint16(31136), + 108: uint16(31132), + 109: uint16(31138), + 110: uint16(31131), + 111: uint16(27510), + 112: uint16(31289), + 113: uint16(31410), + 114: uint16(31412), + 115: uint16(31411), + 116: uint16(31671), + 117: uint16(31691), + 118: uint16(31678), + 119: uint16(31660), + 120: uint16(31694), + 121: uint16(31663), + 122: uint16(31673), + 123: uint16(31690), + 124: uint16(31669), + 125: uint16(31941), + 126: uint16(31944), + 127: uint16(31948), + 128: uint16(31947), + 129: uint16(32247), + 130: uint16(32219), + 131: uint16(32234), + 132: uint16(32231), + 133: uint16(32215), + 134: uint16(32225), + 135: uint16(32259), + 136: uint16(32250), + 137: uint16(32230), + 138: uint16(32246), + 139: uint16(32241), + 140: uint16(32240), + 141: uint16(32238), + 142: uint16(32223), + 143: uint16(32630), + 144: uint16(32684), + 145: uint16(32688), + 146: uint16(32685), + 147: uint16(32749), + 148: uint16(32747), + 149: uint16(32746), + 150: uint16(32748), + 151: uint16(32742), + 152: uint16(32744), + 153: uint16(32868), + 154: uint16(32871), + 155: uint16(33187), + 156: uint16(33183), + }, + 70: { + 0: uint16(33182), + 1: uint16(33173), + 2: uint16(33186), + 3: uint16(33177), + 4: uint16(33175), + 5: uint16(33302), + 6: uint16(33359), + 7: uint16(33363), + 8: uint16(33362), + 9: uint16(33360), + 10: uint16(33358), + 11: uint16(33361), + 12: uint16(34084), + 13: uint16(34107), + 14: uint16(34063), + 15: uint16(34048), + 16: uint16(34089), + 17: uint16(34062), + 18: uint16(34057), + 19: uint16(34061), + 20: uint16(34079), + 21: uint16(34058), + 22: uint16(34087), + 23: uint16(34076), + 24: uint16(34043), + 25: uint16(34091), + 26: uint16(34042), + 27: uint16(34056), + 28: uint16(34060), + 29: uint16(34036), + 30: uint16(34090), + 31: uint16(34034), + 32: uint16(34069), + 33: uint16(34039), + 34: uint16(34027), + 35: uint16(34035), + 36: uint16(34044), + 37: uint16(34066), + 38: uint16(34026), + 39: uint16(34025), + 40: uint16(34070), + 41: uint16(34046), + 42: uint16(34088), + 43: uint16(34077), + 44: uint16(34094), + 45: uint16(34050), + 46: uint16(34045), + 47: uint16(34078), + 48: uint16(34038), + 49: uint16(34097), + 50: uint16(34086), + 51: uint16(34023), + 52: uint16(34024), + 53: uint16(34032), + 54: uint16(34031), + 55: uint16(34041), + 56: uint16(34072), + 57: uint16(34080), + 58: uint16(34096), + 59: uint16(34059), + 60: uint16(34073), + 61: uint16(34095), + 62: uint16(34402), + 63: uint16(34646), + 64: uint16(34659), + 65: uint16(34660), + 66: uint16(34679), + 67: uint16(34785), + 68: uint16(34675), + 69: uint16(34648), + 70: uint16(34644), + 71: uint16(34651), + 72: uint16(34642), + 73: uint16(34657), + 74: uint16(34650), + 75: uint16(34641), + 76: uint16(34654), + 77: uint16(34669), + 78: uint16(34666), + 79: uint16(34640), + 80: uint16(34638), + 81: uint16(34655), + 82: uint16(34653), + 83: uint16(34671), + 84: uint16(34668), + 85: uint16(34682), + 86: uint16(34670), + 87: uint16(34652), + 88: uint16(34661), + 89: uint16(34639), + 90: uint16(34683), + 91: uint16(34677), + 92: uint16(34658), + 93: uint16(34663), + 94: uint16(34665), + 95: uint16(34906), + 96: uint16(35077), + 97: uint16(35084), + 98: uint16(35092), + 99: uint16(35083), + 100: uint16(35095), + 101: uint16(35096), + 102: uint16(35097), + 103: uint16(35078), + 104: uint16(35094), + 105: uint16(35089), + 106: uint16(35086), + 107: uint16(35081), + 108: uint16(35234), + 109: uint16(35236), + 110: uint16(35235), + 111: uint16(35309), + 112: uint16(35312), + 113: uint16(35308), + 114: uint16(35535), + 115: uint16(35526), + 116: uint16(35512), + 117: uint16(35539), + 118: uint16(35537), + 119: uint16(35540), + 120: uint16(35541), + 121: uint16(35515), + 122: uint16(35543), + 123: uint16(35518), + 124: uint16(35520), + 125: uint16(35525), + 126: uint16(35544), + 127: uint16(35523), + 128: uint16(35514), + 129: uint16(35517), + 130: uint16(35545), + 131: uint16(35902), + 132: uint16(35917), + 133: uint16(35983), + 134: uint16(36069), + 135: uint16(36063), + 136: uint16(36057), + 137: uint16(36072), + 138: uint16(36058), + 139: uint16(36061), + 140: uint16(36071), + 141: uint16(36256), + 142: uint16(36252), + 143: uint16(36257), + 144: uint16(36251), + 145: uint16(36384), + 146: uint16(36387), + 147: uint16(36389), + 148: uint16(36388), + 149: uint16(36398), + 150: uint16(36373), + 151: uint16(36379), + 152: uint16(36374), + 153: uint16(36369), + 154: uint16(36377), + 155: uint16(36390), + 156: uint16(36391), + }, + 71: { + 0: uint16(36372), + 1: uint16(36370), + 2: uint16(36376), + 3: uint16(36371), + 4: uint16(36380), + 5: uint16(36375), + 6: uint16(36378), + 7: uint16(36652), + 8: uint16(36644), + 9: uint16(36632), + 10: uint16(36634), + 11: uint16(36640), + 12: uint16(36643), + 13: uint16(36630), + 14: uint16(36631), + 15: uint16(36979), + 16: uint16(36976), + 17: uint16(36975), + 18: uint16(36967), + 19: uint16(36971), + 20: uint16(37167), + 21: uint16(37163), + 22: uint16(37161), + 23: uint16(37162), + 24: uint16(37170), + 25: uint16(37158), + 26: uint16(37166), + 27: uint16(37253), + 28: uint16(37254), + 29: uint16(37258), + 30: uint16(37249), + 31: uint16(37250), + 32: uint16(37252), + 33: uint16(37248), + 34: uint16(37584), + 35: uint16(37571), + 36: uint16(37572), + 37: uint16(37568), + 38: uint16(37593), + 39: uint16(37558), + 40: uint16(37583), + 41: uint16(37617), + 42: uint16(37599), + 43: uint16(37592), + 44: uint16(37609), + 45: uint16(37591), + 46: uint16(37597), + 47: uint16(37580), + 48: uint16(37615), + 49: uint16(37570), + 50: uint16(37608), + 51: uint16(37578), + 52: uint16(37576), + 53: uint16(37582), + 54: uint16(37606), + 55: uint16(37581), + 56: uint16(37589), + 57: uint16(37577), + 58: uint16(37600), + 59: uint16(37598), + 60: uint16(37607), + 61: uint16(37585), + 62: uint16(37587), + 63: uint16(37557), + 64: uint16(37601), + 65: uint16(37574), + 66: uint16(37556), + 67: uint16(38268), + 68: uint16(38316), + 69: uint16(38315), + 70: uint16(38318), + 71: uint16(38320), + 72: uint16(38564), + 73: uint16(38562), + 74: uint16(38611), + 75: uint16(38661), + 76: uint16(38664), + 77: uint16(38658), + 78: uint16(38746), + 79: uint16(38794), + 80: uint16(38798), + 81: uint16(38792), + 82: uint16(38864), + 83: uint16(38863), + 84: uint16(38942), + 85: uint16(38941), + 86: uint16(38950), + 87: uint16(38953), + 88: uint16(38952), + 89: uint16(38944), + 90: uint16(38939), + 91: uint16(38951), + 92: uint16(39090), + 93: uint16(39176), + 94: uint16(39162), + 95: uint16(39185), + 96: uint16(39188), + 97: uint16(39190), + 98: uint16(39191), + 99: uint16(39189), + 100: uint16(39388), + 101: uint16(39373), + 102: uint16(39375), + 103: uint16(39379), + 104: uint16(39380), + 105: uint16(39374), + 106: uint16(39369), + 107: uint16(39382), + 108: uint16(39384), + 109: uint16(39371), + 110: uint16(39383), + 111: uint16(39372), + 112: uint16(39603), + 113: uint16(39660), + 114: uint16(39659), + 115: uint16(39667), + 116: uint16(39666), + 117: uint16(39665), + 118: uint16(39750), + 119: uint16(39747), + 120: uint16(39783), + 121: uint16(39796), + 122: uint16(39793), + 123: uint16(39782), + 124: uint16(39798), + 125: uint16(39797), + 126: uint16(39792), + 127: uint16(39784), + 128: uint16(39780), + 129: uint16(39788), + 130: uint16(40188), + 131: uint16(40186), + 132: uint16(40189), + 133: uint16(40191), + 134: uint16(40183), + 135: uint16(40199), + 136: uint16(40192), + 137: uint16(40185), + 138: uint16(40187), + 139: uint16(40200), + 140: uint16(40197), + 141: uint16(40196), + 142: uint16(40579), + 143: uint16(40659), + 144: uint16(40719), + 145: uint16(40720), + 146: uint16(20764), + 147: uint16(20755), + 148: uint16(20759), + 149: uint16(20762), + 150: uint16(20753), + 151: uint16(20958), + 152: uint16(21300), + 153: uint16(21473), + 154: uint16(22128), + 155: uint16(22112), + 156: uint16(22126), + }, + 72: { + 0: uint16(22131), + 1: uint16(22118), + 2: uint16(22115), + 3: uint16(22125), + 4: uint16(22130), + 5: uint16(22110), + 6: uint16(22135), + 7: uint16(22300), + 8: uint16(22299), + 9: uint16(22728), + 10: uint16(22717), + 11: uint16(22729), + 12: uint16(22719), + 13: uint16(22714), + 14: uint16(22722), + 15: uint16(22716), + 16: uint16(22726), + 17: uint16(23319), + 18: uint16(23321), + 19: uint16(23323), + 20: uint16(23329), + 21: uint16(23316), + 22: uint16(23315), + 23: uint16(23312), + 24: uint16(23318), + 25: uint16(23336), + 26: uint16(23322), + 27: uint16(23328), + 28: uint16(23326), + 29: uint16(23535), + 30: uint16(23980), + 31: uint16(23985), + 32: uint16(23977), + 33: uint16(23975), + 34: uint16(23989), + 35: uint16(23984), + 36: uint16(23982), + 37: uint16(23978), + 38: uint16(23976), + 39: uint16(23986), + 40: uint16(23981), + 41: uint16(23983), + 42: uint16(23988), + 43: uint16(24167), + 44: uint16(24168), + 45: uint16(24166), + 46: uint16(24175), + 47: uint16(24297), + 48: uint16(24295), + 49: uint16(24294), + 50: uint16(24296), + 51: uint16(24293), + 52: uint16(24395), + 53: uint16(24508), + 54: uint16(24989), + 55: uint16(25000), + 56: uint16(24982), + 57: uint16(25029), + 58: uint16(25012), + 59: uint16(25030), + 60: uint16(25025), + 61: uint16(25036), + 62: uint16(25018), + 63: uint16(25023), + 64: uint16(25016), + 65: uint16(24972), + 66: uint16(25815), + 67: uint16(25814), + 68: uint16(25808), + 69: uint16(25807), + 70: uint16(25801), + 71: uint16(25789), + 72: uint16(25737), + 73: uint16(25795), + 74: uint16(25819), + 75: uint16(25843), + 76: uint16(25817), + 77: uint16(25907), + 78: uint16(25983), + 79: uint16(25980), + 80: uint16(26018), + 81: uint16(26312), + 82: uint16(26302), + 83: uint16(26304), + 84: uint16(26314), + 85: uint16(26315), + 86: uint16(26319), + 87: uint16(26301), + 88: uint16(26299), + 89: uint16(26298), + 90: uint16(26316), + 91: uint16(26403), + 92: uint16(27188), + 93: uint16(27238), + 94: uint16(27209), + 95: uint16(27239), + 96: uint16(27186), + 97: uint16(27240), + 98: uint16(27198), + 99: uint16(27229), + 100: uint16(27245), + 101: uint16(27254), + 102: uint16(27227), + 103: uint16(27217), + 104: uint16(27176), + 105: uint16(27226), + 106: uint16(27195), + 107: uint16(27199), + 108: uint16(27201), + 109: uint16(27242), + 110: uint16(27236), + 111: uint16(27216), + 112: uint16(27215), + 113: uint16(27220), + 114: uint16(27247), + 115: uint16(27241), + 116: uint16(27232), + 117: uint16(27196), + 118: uint16(27230), + 119: uint16(27222), + 120: uint16(27221), + 121: uint16(27213), + 122: uint16(27214), + 123: uint16(27206), + 124: uint16(27477), + 125: uint16(27476), + 126: uint16(27478), + 127: uint16(27559), + 128: uint16(27562), + 129: uint16(27563), + 130: uint16(27592), + 131: uint16(27591), + 132: uint16(27652), + 133: uint16(27651), + 134: uint16(27654), + 135: uint16(28589), + 136: uint16(28619), + 137: uint16(28579), + 138: uint16(28615), + 139: uint16(28604), + 140: uint16(28622), + 141: uint16(28616), + 142: uint16(28510), + 143: uint16(28612), + 144: uint16(28605), + 145: uint16(28574), + 146: uint16(28618), + 147: uint16(28584), + 148: uint16(28676), + 149: uint16(28581), + 150: uint16(28590), + 151: uint16(28602), + 152: uint16(28588), + 153: uint16(28586), + 154: uint16(28623), + 155: uint16(28607), + 156: uint16(28600), + }, + 73: { + 0: uint16(28578), + 1: uint16(28617), + 2: uint16(28587), + 3: uint16(28621), + 4: uint16(28591), + 5: uint16(28594), + 6: uint16(28592), + 7: uint16(29125), + 8: uint16(29122), + 9: uint16(29119), + 10: uint16(29112), + 11: uint16(29142), + 12: uint16(29120), + 13: uint16(29121), + 14: uint16(29131), + 15: uint16(29140), + 16: uint16(29130), + 17: uint16(29127), + 18: uint16(29135), + 19: uint16(29117), + 20: uint16(29144), + 21: uint16(29116), + 22: uint16(29126), + 23: uint16(29146), + 24: uint16(29147), + 25: uint16(29341), + 26: uint16(29342), + 27: uint16(29545), + 28: uint16(29542), + 29: uint16(29543), + 30: uint16(29548), + 31: uint16(29541), + 32: uint16(29547), + 33: uint16(29546), + 34: uint16(29823), + 35: uint16(29850), + 36: uint16(29856), + 37: uint16(29844), + 38: uint16(29842), + 39: uint16(29845), + 40: uint16(29857), + 41: uint16(29963), + 42: uint16(30080), + 43: uint16(30255), + 44: uint16(30253), + 45: uint16(30257), + 46: uint16(30269), + 47: uint16(30259), + 48: uint16(30268), + 49: uint16(30261), + 50: uint16(30258), + 51: uint16(30256), + 52: uint16(30395), + 53: uint16(30438), + 54: uint16(30618), + 55: uint16(30621), + 56: uint16(30625), + 57: uint16(30620), + 58: uint16(30619), + 59: uint16(30626), + 60: uint16(30627), + 61: uint16(30613), + 62: uint16(30617), + 63: uint16(30615), + 64: uint16(30941), + 65: uint16(30953), + 66: uint16(30949), + 67: uint16(30954), + 68: uint16(30942), + 69: uint16(30947), + 70: uint16(30939), + 71: uint16(30945), + 72: uint16(30946), + 73: uint16(30957), + 74: uint16(30943), + 75: uint16(30944), + 76: uint16(31140), + 77: uint16(31300), + 78: uint16(31304), + 79: uint16(31303), + 80: uint16(31414), + 81: uint16(31416), + 82: uint16(31413), + 83: uint16(31409), + 84: uint16(31415), + 85: uint16(31710), + 86: uint16(31715), + 87: uint16(31719), + 88: uint16(31709), + 89: uint16(31701), + 90: uint16(31717), + 91: uint16(31706), + 92: uint16(31720), + 93: uint16(31737), + 94: uint16(31700), + 95: uint16(31722), + 96: uint16(31714), + 97: uint16(31708), + 98: uint16(31723), + 99: uint16(31704), + 100: uint16(31711), + 101: uint16(31954), + 102: uint16(31956), + 103: uint16(31959), + 104: uint16(31952), + 105: uint16(31953), + 106: uint16(32274), + 107: uint16(32289), + 108: uint16(32279), + 109: uint16(32268), + 110: uint16(32287), + 111: uint16(32288), + 112: uint16(32275), + 113: uint16(32270), + 114: uint16(32284), + 115: uint16(32277), + 116: uint16(32282), + 117: uint16(32290), + 118: uint16(32267), + 119: uint16(32271), + 120: uint16(32278), + 121: uint16(32269), + 122: uint16(32276), + 123: uint16(32293), + 124: uint16(32292), + 125: uint16(32579), + 126: uint16(32635), + 127: uint16(32636), + 128: uint16(32634), + 129: uint16(32689), + 130: uint16(32751), + 131: uint16(32810), + 132: uint16(32809), + 133: uint16(32876), + 134: uint16(33201), + 135: uint16(33190), + 136: uint16(33198), + 137: uint16(33209), + 138: uint16(33205), + 139: uint16(33195), + 140: uint16(33200), + 141: uint16(33196), + 142: uint16(33204), + 143: uint16(33202), + 144: uint16(33207), + 145: uint16(33191), + 146: uint16(33266), + 147: uint16(33365), + 148: uint16(33366), + 149: uint16(33367), + 150: uint16(34134), + 151: uint16(34117), + 152: uint16(34155), + 153: uint16(34125), + 154: uint16(34131), + 155: uint16(34145), + 156: uint16(34136), + }, + 74: { + 0: uint16(34112), + 1: uint16(34118), + 2: uint16(34148), + 3: uint16(34113), + 4: uint16(34146), + 5: uint16(34116), + 6: uint16(34129), + 7: uint16(34119), + 8: uint16(34147), + 9: uint16(34110), + 10: uint16(34139), + 11: uint16(34161), + 12: uint16(34126), + 13: uint16(34158), + 14: uint16(34165), + 15: uint16(34133), + 16: uint16(34151), + 17: uint16(34144), + 18: uint16(34188), + 19: uint16(34150), + 20: uint16(34141), + 21: uint16(34132), + 22: uint16(34149), + 23: uint16(34156), + 24: uint16(34403), + 25: uint16(34405), + 26: uint16(34404), + 27: uint16(34715), + 28: uint16(34703), + 29: uint16(34711), + 30: uint16(34707), + 31: uint16(34706), + 32: uint16(34696), + 33: uint16(34689), + 34: uint16(34710), + 35: uint16(34712), + 36: uint16(34681), + 37: uint16(34695), + 38: uint16(34723), + 39: uint16(34693), + 40: uint16(34704), + 41: uint16(34705), + 42: uint16(34717), + 43: uint16(34692), + 44: uint16(34708), + 45: uint16(34716), + 46: uint16(34714), + 47: uint16(34697), + 48: uint16(35102), + 49: uint16(35110), + 50: uint16(35120), + 51: uint16(35117), + 52: uint16(35118), + 53: uint16(35111), + 54: uint16(35121), + 55: uint16(35106), + 56: uint16(35113), + 57: uint16(35107), + 58: uint16(35119), + 59: uint16(35116), + 60: uint16(35103), + 61: uint16(35313), + 62: uint16(35552), + 63: uint16(35554), + 64: uint16(35570), + 65: uint16(35572), + 66: uint16(35573), + 67: uint16(35549), + 68: uint16(35604), + 69: uint16(35556), + 70: uint16(35551), + 71: uint16(35568), + 72: uint16(35528), + 73: uint16(35550), + 74: uint16(35553), + 75: uint16(35560), + 76: uint16(35583), + 77: uint16(35567), + 78: uint16(35579), + 79: uint16(35985), + 80: uint16(35986), + 81: uint16(35984), + 82: uint16(36085), + 83: uint16(36078), + 84: uint16(36081), + 85: uint16(36080), + 86: uint16(36083), + 87: uint16(36204), + 88: uint16(36206), + 89: uint16(36261), + 90: uint16(36263), + 91: uint16(36403), + 92: uint16(36414), + 93: uint16(36408), + 94: uint16(36416), + 95: uint16(36421), + 96: uint16(36406), + 97: uint16(36412), + 98: uint16(36413), + 99: uint16(36417), + 100: uint16(36400), + 101: uint16(36415), + 102: uint16(36541), + 103: uint16(36662), + 104: uint16(36654), + 105: uint16(36661), + 106: uint16(36658), + 107: uint16(36665), + 108: uint16(36663), + 109: uint16(36660), + 110: uint16(36982), + 111: uint16(36985), + 112: uint16(36987), + 113: uint16(36998), + 114: uint16(37114), + 115: uint16(37171), + 116: uint16(37173), + 117: uint16(37174), + 118: uint16(37267), + 119: uint16(37264), + 120: uint16(37265), + 121: uint16(37261), + 122: uint16(37263), + 123: uint16(37671), + 124: uint16(37662), + 125: uint16(37640), + 126: uint16(37663), + 127: uint16(37638), + 128: uint16(37647), + 129: uint16(37754), + 130: uint16(37688), + 131: uint16(37692), + 132: uint16(37659), + 133: uint16(37667), + 134: uint16(37650), + 135: uint16(37633), + 136: uint16(37702), + 137: uint16(37677), + 138: uint16(37646), + 139: uint16(37645), + 140: uint16(37579), + 141: uint16(37661), + 142: uint16(37626), + 143: uint16(37669), + 144: uint16(37651), + 145: uint16(37625), + 146: uint16(37623), + 147: uint16(37684), + 148: uint16(37634), + 149: uint16(37668), + 150: uint16(37631), + 151: uint16(37673), + 152: uint16(37689), + 153: uint16(37685), + 154: uint16(37674), + 155: uint16(37652), + 156: uint16(37644), + }, + 75: { + 0: uint16(37643), + 1: uint16(37630), + 2: uint16(37641), + 3: uint16(37632), + 4: uint16(37627), + 5: uint16(37654), + 6: uint16(38332), + 7: uint16(38349), + 8: uint16(38334), + 9: uint16(38329), + 10: uint16(38330), + 11: uint16(38326), + 12: uint16(38335), + 13: uint16(38325), + 14: uint16(38333), + 15: uint16(38569), + 16: uint16(38612), + 17: uint16(38667), + 18: uint16(38674), + 19: uint16(38672), + 20: uint16(38809), + 21: uint16(38807), + 22: uint16(38804), + 23: uint16(38896), + 24: uint16(38904), + 25: uint16(38965), + 26: uint16(38959), + 27: uint16(38962), + 28: uint16(39204), + 29: uint16(39199), + 30: uint16(39207), + 31: uint16(39209), + 32: uint16(39326), + 33: uint16(39406), + 34: uint16(39404), + 35: uint16(39397), + 36: uint16(39396), + 37: uint16(39408), + 38: uint16(39395), + 39: uint16(39402), + 40: uint16(39401), + 41: uint16(39399), + 42: uint16(39609), + 43: uint16(39615), + 44: uint16(39604), + 45: uint16(39611), + 46: uint16(39670), + 47: uint16(39674), + 48: uint16(39673), + 49: uint16(39671), + 50: uint16(39731), + 51: uint16(39808), + 52: uint16(39813), + 53: uint16(39815), + 54: uint16(39804), + 55: uint16(39806), + 56: uint16(39803), + 57: uint16(39810), + 58: uint16(39827), + 59: uint16(39826), + 60: uint16(39824), + 61: uint16(39802), + 62: uint16(39829), + 63: uint16(39805), + 64: uint16(39816), + 65: uint16(40229), + 66: uint16(40215), + 67: uint16(40224), + 68: uint16(40222), + 69: uint16(40212), + 70: uint16(40233), + 71: uint16(40221), + 72: uint16(40216), + 73: uint16(40226), + 74: uint16(40208), + 75: uint16(40217), + 76: uint16(40223), + 77: uint16(40584), + 78: uint16(40582), + 79: uint16(40583), + 80: uint16(40622), + 81: uint16(40621), + 82: uint16(40661), + 83: uint16(40662), + 84: uint16(40698), + 85: uint16(40722), + 86: uint16(40765), + 87: uint16(20774), + 88: uint16(20773), + 89: uint16(20770), + 90: uint16(20772), + 91: uint16(20768), + 92: uint16(20777), + 93: uint16(21236), + 94: uint16(22163), + 95: uint16(22156), + 96: uint16(22157), + 97: uint16(22150), + 98: uint16(22148), + 99: uint16(22147), + 100: uint16(22142), + 101: uint16(22146), + 102: uint16(22143), + 103: uint16(22145), + 104: uint16(22742), + 105: uint16(22740), + 106: uint16(22735), + 107: uint16(22738), + 108: uint16(23341), + 109: uint16(23333), + 110: uint16(23346), + 111: uint16(23331), + 112: uint16(23340), + 113: uint16(23335), + 114: uint16(23334), + 115: uint16(23343), + 116: uint16(23342), + 117: uint16(23419), + 118: uint16(23537), + 119: uint16(23538), + 120: uint16(23991), + 121: uint16(24172), + 122: uint16(24170), + 123: uint16(24510), + 124: uint16(24507), + 125: uint16(25027), + 126: uint16(25013), + 127: uint16(25020), + 128: uint16(25063), + 129: uint16(25056), + 130: uint16(25061), + 131: uint16(25060), + 132: uint16(25064), + 133: uint16(25054), + 134: uint16(25839), + 135: uint16(25833), + 136: uint16(25827), + 137: uint16(25835), + 138: uint16(25828), + 139: uint16(25832), + 140: uint16(25985), + 141: uint16(25984), + 142: uint16(26038), + 143: uint16(26074), + 144: uint16(26322), + 145: uint16(27277), + 146: uint16(27286), + 147: uint16(27265), + 148: uint16(27301), + 149: uint16(27273), + 150: uint16(27295), + 151: uint16(27291), + 152: uint16(27297), + 153: uint16(27294), + 154: uint16(27271), + 155: uint16(27283), + 156: uint16(27278), + }, + 76: { + 0: uint16(27285), + 1: uint16(27267), + 2: uint16(27304), + 3: uint16(27300), + 4: uint16(27281), + 5: uint16(27263), + 6: uint16(27302), + 7: uint16(27290), + 8: uint16(27269), + 9: uint16(27276), + 10: uint16(27282), + 11: uint16(27483), + 12: uint16(27565), + 13: uint16(27657), + 14: uint16(28620), + 15: uint16(28585), + 16: uint16(28660), + 17: uint16(28628), + 18: uint16(28643), + 19: uint16(28636), + 20: uint16(28653), + 21: uint16(28647), + 22: uint16(28646), + 23: uint16(28638), + 24: uint16(28658), + 25: uint16(28637), + 26: uint16(28642), + 27: uint16(28648), + 28: uint16(29153), + 29: uint16(29169), + 30: uint16(29160), + 31: uint16(29170), + 32: uint16(29156), + 33: uint16(29168), + 34: uint16(29154), + 35: uint16(29555), + 36: uint16(29550), + 37: uint16(29551), + 38: uint16(29847), + 39: uint16(29874), + 40: uint16(29867), + 41: uint16(29840), + 42: uint16(29866), + 43: uint16(29869), + 44: uint16(29873), + 45: uint16(29861), + 46: uint16(29871), + 47: uint16(29968), + 48: uint16(29969), + 49: uint16(29970), + 50: uint16(29967), + 51: uint16(30084), + 52: uint16(30275), + 53: uint16(30280), + 54: uint16(30281), + 55: uint16(30279), + 56: uint16(30372), + 57: uint16(30441), + 58: uint16(30645), + 59: uint16(30635), + 60: uint16(30642), + 61: uint16(30647), + 62: uint16(30646), + 63: uint16(30644), + 64: uint16(30641), + 65: uint16(30632), + 66: uint16(30704), + 67: uint16(30963), + 68: uint16(30973), + 69: uint16(30978), + 70: uint16(30971), + 71: uint16(30972), + 72: uint16(30962), + 73: uint16(30981), + 74: uint16(30969), + 75: uint16(30974), + 76: uint16(30980), + 77: uint16(31147), + 78: uint16(31144), + 79: uint16(31324), + 80: uint16(31323), + 81: uint16(31318), + 82: uint16(31320), + 83: uint16(31316), + 84: uint16(31322), + 85: uint16(31422), + 86: uint16(31424), + 87: uint16(31425), + 88: uint16(31749), + 89: uint16(31759), + 90: uint16(31730), + 91: uint16(31744), + 92: uint16(31743), + 93: uint16(31739), + 94: uint16(31758), + 95: uint16(31732), + 96: uint16(31755), + 97: uint16(31731), + 98: uint16(31746), + 99: uint16(31753), + 100: uint16(31747), + 101: uint16(31745), + 102: uint16(31736), + 103: uint16(31741), + 104: uint16(31750), + 105: uint16(31728), + 106: uint16(31729), + 107: uint16(31760), + 108: uint16(31754), + 109: uint16(31976), + 110: uint16(32301), + 111: uint16(32316), + 112: uint16(32322), + 113: uint16(32307), + 114: uint16(38984), + 115: uint16(32312), + 116: uint16(32298), + 117: uint16(32329), + 118: uint16(32320), + 119: uint16(32327), + 120: uint16(32297), + 121: uint16(32332), + 122: uint16(32304), + 123: uint16(32315), + 124: uint16(32310), + 125: uint16(32324), + 126: uint16(32314), + 127: uint16(32581), + 128: uint16(32639), + 129: uint16(32638), + 130: uint16(32637), + 131: uint16(32756), + 132: uint16(32754), + 133: uint16(32812), + 134: uint16(33211), + 135: uint16(33220), + 136: uint16(33228), + 137: uint16(33226), + 138: uint16(33221), + 139: uint16(33223), + 140: uint16(33212), + 141: uint16(33257), + 142: uint16(33371), + 143: uint16(33370), + 144: uint16(33372), + 145: uint16(34179), + 146: uint16(34176), + 147: uint16(34191), + 148: uint16(34215), + 149: uint16(34197), + 150: uint16(34208), + 151: uint16(34187), + 152: uint16(34211), + 153: uint16(34171), + 154: uint16(34212), + 155: uint16(34202), + 156: uint16(34206), + }, + 77: { + 0: uint16(34167), + 1: uint16(34172), + 2: uint16(34185), + 3: uint16(34209), + 4: uint16(34170), + 5: uint16(34168), + 6: uint16(34135), + 7: uint16(34190), + 8: uint16(34198), + 9: uint16(34182), + 10: uint16(34189), + 11: uint16(34201), + 12: uint16(34205), + 13: uint16(34177), + 14: uint16(34210), + 15: uint16(34178), + 16: uint16(34184), + 17: uint16(34181), + 18: uint16(34169), + 19: uint16(34166), + 20: uint16(34200), + 21: uint16(34192), + 22: uint16(34207), + 23: uint16(34408), + 24: uint16(34750), + 25: uint16(34730), + 26: uint16(34733), + 27: uint16(34757), + 28: uint16(34736), + 29: uint16(34732), + 30: uint16(34745), + 31: uint16(34741), + 32: uint16(34748), + 33: uint16(34734), + 34: uint16(34761), + 35: uint16(34755), + 36: uint16(34754), + 37: uint16(34764), + 38: uint16(34743), + 39: uint16(34735), + 40: uint16(34756), + 41: uint16(34762), + 42: uint16(34740), + 43: uint16(34742), + 44: uint16(34751), + 45: uint16(34744), + 46: uint16(34749), + 47: uint16(34782), + 48: uint16(34738), + 49: uint16(35125), + 50: uint16(35123), + 51: uint16(35132), + 52: uint16(35134), + 53: uint16(35137), + 54: uint16(35154), + 55: uint16(35127), + 56: uint16(35138), + 57: uint16(35245), + 58: uint16(35247), + 59: uint16(35246), + 60: uint16(35314), + 61: uint16(35315), + 62: uint16(35614), + 63: uint16(35608), + 64: uint16(35606), + 65: uint16(35601), + 66: uint16(35589), + 67: uint16(35595), + 68: uint16(35618), + 69: uint16(35599), + 70: uint16(35602), + 71: uint16(35605), + 72: uint16(35591), + 73: uint16(35597), + 74: uint16(35592), + 75: uint16(35590), + 76: uint16(35612), + 77: uint16(35603), + 78: uint16(35610), + 79: uint16(35919), + 80: uint16(35952), + 81: uint16(35954), + 82: uint16(35953), + 83: uint16(35951), + 84: uint16(35989), + 85: uint16(35988), + 86: uint16(36089), + 87: uint16(36207), + 88: uint16(36430), + 89: uint16(36429), + 90: uint16(36435), + 91: uint16(36432), + 92: uint16(36428), + 93: uint16(36423), + 94: uint16(36675), + 95: uint16(36672), + 96: uint16(36997), + 97: uint16(36990), + 98: uint16(37176), + 99: uint16(37274), + 100: uint16(37282), + 101: uint16(37275), + 102: uint16(37273), + 103: uint16(37279), + 104: uint16(37281), + 105: uint16(37277), + 106: uint16(37280), + 107: uint16(37793), + 108: uint16(37763), + 109: uint16(37807), + 110: uint16(37732), + 111: uint16(37718), + 112: uint16(37703), + 113: uint16(37756), + 114: uint16(37720), + 115: uint16(37724), + 116: uint16(37750), + 117: uint16(37705), + 118: uint16(37712), + 119: uint16(37713), + 120: uint16(37728), + 121: uint16(37741), + 122: uint16(37775), + 123: uint16(37708), + 124: uint16(37738), + 125: uint16(37753), + 126: uint16(37719), + 127: uint16(37717), + 128: uint16(37714), + 129: uint16(37711), + 130: uint16(37745), + 131: uint16(37751), + 132: uint16(37755), + 133: uint16(37729), + 134: uint16(37726), + 135: uint16(37731), + 136: uint16(37735), + 137: uint16(37760), + 138: uint16(37710), + 139: uint16(37721), + 140: uint16(38343), + 141: uint16(38336), + 142: uint16(38345), + 143: uint16(38339), + 144: uint16(38341), + 145: uint16(38327), + 146: uint16(38574), + 147: uint16(38576), + 148: uint16(38572), + 149: uint16(38688), + 150: uint16(38687), + 151: uint16(38680), + 152: uint16(38685), + 153: uint16(38681), + 154: uint16(38810), + 155: uint16(38817), + 156: uint16(38812), + }, + 78: { + 0: uint16(38814), + 1: uint16(38813), + 2: uint16(38869), + 3: uint16(38868), + 4: uint16(38897), + 5: uint16(38977), + 6: uint16(38980), + 7: uint16(38986), + 8: uint16(38985), + 9: uint16(38981), + 10: uint16(38979), + 11: uint16(39205), + 12: uint16(39211), + 13: uint16(39212), + 14: uint16(39210), + 15: uint16(39219), + 16: uint16(39218), + 17: uint16(39215), + 18: uint16(39213), + 19: uint16(39217), + 20: uint16(39216), + 21: uint16(39320), + 22: uint16(39331), + 23: uint16(39329), + 24: uint16(39426), + 25: uint16(39418), + 26: uint16(39412), + 27: uint16(39415), + 28: uint16(39417), + 29: uint16(39416), + 30: uint16(39414), + 31: uint16(39419), + 32: uint16(39421), + 33: uint16(39422), + 34: uint16(39420), + 35: uint16(39427), + 36: uint16(39614), + 37: uint16(39678), + 38: uint16(39677), + 39: uint16(39681), + 40: uint16(39676), + 41: uint16(39752), + 42: uint16(39834), + 43: uint16(39848), + 44: uint16(39838), + 45: uint16(39835), + 46: uint16(39846), + 47: uint16(39841), + 48: uint16(39845), + 49: uint16(39844), + 50: uint16(39814), + 51: uint16(39842), + 52: uint16(39840), + 53: uint16(39855), + 54: uint16(40243), + 55: uint16(40257), + 56: uint16(40295), + 57: uint16(40246), + 58: uint16(40238), + 59: uint16(40239), + 60: uint16(40241), + 61: uint16(40248), + 62: uint16(40240), + 63: uint16(40261), + 64: uint16(40258), + 65: uint16(40259), + 66: uint16(40254), + 67: uint16(40247), + 68: uint16(40256), + 69: uint16(40253), + 70: uint16(32757), + 71: uint16(40237), + 72: uint16(40586), + 73: uint16(40585), + 74: uint16(40589), + 75: uint16(40624), + 76: uint16(40648), + 77: uint16(40666), + 78: uint16(40699), + 79: uint16(40703), + 80: uint16(40740), + 81: uint16(40739), + 82: uint16(40738), + 83: uint16(40788), + 84: uint16(40864), + 85: uint16(20785), + 86: uint16(20781), + 87: uint16(20782), + 88: uint16(22168), + 89: uint16(22172), + 90: uint16(22167), + 91: uint16(22170), + 92: uint16(22173), + 93: uint16(22169), + 94: uint16(22896), + 95: uint16(23356), + 96: uint16(23657), + 97: uint16(23658), + 98: uint16(24000), + 99: uint16(24173), + 100: uint16(24174), + 101: uint16(25048), + 102: uint16(25055), + 103: uint16(25069), + 104: uint16(25070), + 105: uint16(25073), + 106: uint16(25066), + 107: uint16(25072), + 108: uint16(25067), + 109: uint16(25046), + 110: uint16(25065), + 111: uint16(25855), + 112: uint16(25860), + 113: uint16(25853), + 114: uint16(25848), + 115: uint16(25857), + 116: uint16(25859), + 117: uint16(25852), + 118: uint16(26004), + 119: uint16(26075), + 120: uint16(26330), + 121: uint16(26331), + 122: uint16(26328), + 123: uint16(27333), + 124: uint16(27321), + 125: uint16(27325), + 126: uint16(27361), + 127: uint16(27334), + 128: uint16(27322), + 129: uint16(27318), + 130: uint16(27319), + 131: uint16(27335), + 132: uint16(27316), + 133: uint16(27309), + 134: uint16(27486), + 135: uint16(27593), + 136: uint16(27659), + 137: uint16(28679), + 138: uint16(28684), + 139: uint16(28685), + 140: uint16(28673), + 141: uint16(28677), + 142: uint16(28692), + 143: uint16(28686), + 144: uint16(28671), + 145: uint16(28672), + 146: uint16(28667), + 147: uint16(28710), + 148: uint16(28668), + 149: uint16(28663), + 150: uint16(28682), + 151: uint16(29185), + 152: uint16(29183), + 153: uint16(29177), + 154: uint16(29187), + 155: uint16(29181), + 156: uint16(29558), + }, + 79: { + 0: uint16(29880), + 1: uint16(29888), + 2: uint16(29877), + 3: uint16(29889), + 4: uint16(29886), + 5: uint16(29878), + 6: uint16(29883), + 7: uint16(29890), + 8: uint16(29972), + 9: uint16(29971), + 10: uint16(30300), + 11: uint16(30308), + 12: uint16(30297), + 13: uint16(30288), + 14: uint16(30291), + 15: uint16(30295), + 16: uint16(30298), + 17: uint16(30374), + 18: uint16(30397), + 19: uint16(30444), + 20: uint16(30658), + 21: uint16(30650), + 22: uint16(30975), + 23: uint16(30988), + 24: uint16(30995), + 25: uint16(30996), + 26: uint16(30985), + 27: uint16(30992), + 28: uint16(30994), + 29: uint16(30993), + 30: uint16(31149), + 31: uint16(31148), + 32: uint16(31327), + 33: uint16(31772), + 34: uint16(31785), + 35: uint16(31769), + 36: uint16(31776), + 37: uint16(31775), + 38: uint16(31789), + 39: uint16(31773), + 40: uint16(31782), + 41: uint16(31784), + 42: uint16(31778), + 43: uint16(31781), + 44: uint16(31792), + 45: uint16(32348), + 46: uint16(32336), + 47: uint16(32342), + 48: uint16(32355), + 49: uint16(32344), + 50: uint16(32354), + 51: uint16(32351), + 52: uint16(32337), + 53: uint16(32352), + 54: uint16(32343), + 55: uint16(32339), + 56: uint16(32693), + 57: uint16(32691), + 58: uint16(32759), + 59: uint16(32760), + 60: uint16(32885), + 61: uint16(33233), + 62: uint16(33234), + 63: uint16(33232), + 64: uint16(33375), + 65: uint16(33374), + 66: uint16(34228), + 67: uint16(34246), + 68: uint16(34240), + 69: uint16(34243), + 70: uint16(34242), + 71: uint16(34227), + 72: uint16(34229), + 73: uint16(34237), + 74: uint16(34247), + 75: uint16(34244), + 76: uint16(34239), + 77: uint16(34251), + 78: uint16(34254), + 79: uint16(34248), + 80: uint16(34245), + 81: uint16(34225), + 82: uint16(34230), + 83: uint16(34258), + 84: uint16(34340), + 85: uint16(34232), + 86: uint16(34231), + 87: uint16(34238), + 88: uint16(34409), + 89: uint16(34791), + 90: uint16(34790), + 91: uint16(34786), + 92: uint16(34779), + 93: uint16(34795), + 94: uint16(34794), + 95: uint16(34789), + 96: uint16(34783), + 97: uint16(34803), + 98: uint16(34788), + 99: uint16(34772), + 100: uint16(34780), + 101: uint16(34771), + 102: uint16(34797), + 103: uint16(34776), + 104: uint16(34787), + 105: uint16(34724), + 106: uint16(34775), + 107: uint16(34777), + 108: uint16(34817), + 109: uint16(34804), + 110: uint16(34792), + 111: uint16(34781), + 112: uint16(35155), + 113: uint16(35147), + 114: uint16(35151), + 115: uint16(35148), + 116: uint16(35142), + 117: uint16(35152), + 118: uint16(35153), + 119: uint16(35145), + 120: uint16(35626), + 121: uint16(35623), + 122: uint16(35619), + 123: uint16(35635), + 124: uint16(35632), + 125: uint16(35637), + 126: uint16(35655), + 127: uint16(35631), + 128: uint16(35644), + 129: uint16(35646), + 130: uint16(35633), + 131: uint16(35621), + 132: uint16(35639), + 133: uint16(35622), + 134: uint16(35638), + 135: uint16(35630), + 136: uint16(35620), + 137: uint16(35643), + 138: uint16(35645), + 139: uint16(35642), + 140: uint16(35906), + 141: uint16(35957), + 142: uint16(35993), + 143: uint16(35992), + 144: uint16(35991), + 145: uint16(36094), + 146: uint16(36100), + 147: uint16(36098), + 148: uint16(36096), + 149: uint16(36444), + 150: uint16(36450), + 151: uint16(36448), + 152: uint16(36439), + 153: uint16(36438), + 154: uint16(36446), + 155: uint16(36453), + 156: uint16(36455), + }, + 80: { + 0: uint16(36443), + 1: uint16(36442), + 2: uint16(36449), + 3: uint16(36445), + 4: uint16(36457), + 5: uint16(36436), + 6: uint16(36678), + 7: uint16(36679), + 8: uint16(36680), + 9: uint16(36683), + 10: uint16(37160), + 11: uint16(37178), + 12: uint16(37179), + 13: uint16(37182), + 14: uint16(37288), + 15: uint16(37285), + 16: uint16(37287), + 17: uint16(37295), + 18: uint16(37290), + 19: uint16(37813), + 20: uint16(37772), + 21: uint16(37778), + 22: uint16(37815), + 23: uint16(37787), + 24: uint16(37789), + 25: uint16(37769), + 26: uint16(37799), + 27: uint16(37774), + 28: uint16(37802), + 29: uint16(37790), + 30: uint16(37798), + 31: uint16(37781), + 32: uint16(37768), + 33: uint16(37785), + 34: uint16(37791), + 35: uint16(37773), + 36: uint16(37809), + 37: uint16(37777), + 38: uint16(37810), + 39: uint16(37796), + 40: uint16(37800), + 41: uint16(37812), + 42: uint16(37795), + 43: uint16(37797), + 44: uint16(38354), + 45: uint16(38355), + 46: uint16(38353), + 47: uint16(38579), + 48: uint16(38615), + 49: uint16(38618), + 50: uint16(24002), + 51: uint16(38623), + 52: uint16(38616), + 53: uint16(38621), + 54: uint16(38691), + 55: uint16(38690), + 56: uint16(38693), + 57: uint16(38828), + 58: uint16(38830), + 59: uint16(38824), + 60: uint16(38827), + 61: uint16(38820), + 62: uint16(38826), + 63: uint16(38818), + 64: uint16(38821), + 65: uint16(38871), + 66: uint16(38873), + 67: uint16(38870), + 68: uint16(38872), + 69: uint16(38906), + 70: uint16(38992), + 71: uint16(38993), + 72: uint16(38994), + 73: uint16(39096), + 74: uint16(39233), + 75: uint16(39228), + 76: uint16(39226), + 77: uint16(39439), + 78: uint16(39435), + 79: uint16(39433), + 80: uint16(39437), + 81: uint16(39428), + 82: uint16(39441), + 83: uint16(39434), + 84: uint16(39429), + 85: uint16(39431), + 86: uint16(39430), + 87: uint16(39616), + 88: uint16(39644), + 89: uint16(39688), + 90: uint16(39684), + 91: uint16(39685), + 92: uint16(39721), + 93: uint16(39733), + 94: uint16(39754), + 95: uint16(39756), + 96: uint16(39755), + 97: uint16(39879), + 98: uint16(39878), + 99: uint16(39875), + 100: uint16(39871), + 101: uint16(39873), + 102: uint16(39861), + 103: uint16(39864), + 104: uint16(39891), + 105: uint16(39862), + 106: uint16(39876), + 107: uint16(39865), + 108: uint16(39869), + 109: uint16(40284), + 110: uint16(40275), + 111: uint16(40271), + 112: uint16(40266), + 113: uint16(40283), + 114: uint16(40267), + 115: uint16(40281), + 116: uint16(40278), + 117: uint16(40268), + 118: uint16(40279), + 119: uint16(40274), + 120: uint16(40276), + 121: uint16(40287), + 122: uint16(40280), + 123: uint16(40282), + 124: uint16(40590), + 125: uint16(40588), + 126: uint16(40671), + 127: uint16(40705), + 128: uint16(40704), + 129: uint16(40726), + 130: uint16(40741), + 131: uint16(40747), + 132: uint16(40746), + 133: uint16(40745), + 134: uint16(40744), + 135: uint16(40780), + 136: uint16(40789), + 137: uint16(20788), + 138: uint16(20789), + 139: uint16(21142), + 140: uint16(21239), + 141: uint16(21428), + 142: uint16(22187), + 143: uint16(22189), + 144: uint16(22182), + 145: uint16(22183), + 146: uint16(22186), + 147: uint16(22188), + 148: uint16(22746), + 149: uint16(22749), + 150: uint16(22747), + 151: uint16(22802), + 152: uint16(23357), + 153: uint16(23358), + 154: uint16(23359), + 155: uint16(24003), + 156: uint16(24176), + }, + 81: { + 0: uint16(24511), + 1: uint16(25083), + 2: uint16(25863), + 3: uint16(25872), + 4: uint16(25869), + 5: uint16(25865), + 6: uint16(25868), + 7: uint16(25870), + 8: uint16(25988), + 9: uint16(26078), + 10: uint16(26077), + 11: uint16(26334), + 12: uint16(27367), + 13: uint16(27360), + 14: uint16(27340), + 15: uint16(27345), + 16: uint16(27353), + 17: uint16(27339), + 18: uint16(27359), + 19: uint16(27356), + 20: uint16(27344), + 21: uint16(27371), + 22: uint16(27343), + 23: uint16(27341), + 24: uint16(27358), + 25: uint16(27488), + 26: uint16(27568), + 27: uint16(27660), + 28: uint16(28697), + 29: uint16(28711), + 30: uint16(28704), + 31: uint16(28694), + 32: uint16(28715), + 33: uint16(28705), + 34: uint16(28706), + 35: uint16(28707), + 36: uint16(28713), + 37: uint16(28695), + 38: uint16(28708), + 39: uint16(28700), + 40: uint16(28714), + 41: uint16(29196), + 42: uint16(29194), + 43: uint16(29191), + 44: uint16(29186), + 45: uint16(29189), + 46: uint16(29349), + 47: uint16(29350), + 48: uint16(29348), + 49: uint16(29347), + 50: uint16(29345), + 51: uint16(29899), + 52: uint16(29893), + 53: uint16(29879), + 54: uint16(29891), + 55: uint16(29974), + 56: uint16(30304), + 57: uint16(30665), + 58: uint16(30666), + 59: uint16(30660), + 60: uint16(30705), + 61: uint16(31005), + 62: uint16(31003), + 63: uint16(31009), + 64: uint16(31004), + 65: uint16(30999), + 66: uint16(31006), + 67: uint16(31152), + 68: uint16(31335), + 69: uint16(31336), + 70: uint16(31795), + 71: uint16(31804), + 72: uint16(31801), + 73: uint16(31788), + 74: uint16(31803), + 75: uint16(31980), + 76: uint16(31978), + 77: uint16(32374), + 78: uint16(32373), + 79: uint16(32376), + 80: uint16(32368), + 81: uint16(32375), + 82: uint16(32367), + 83: uint16(32378), + 84: uint16(32370), + 85: uint16(32372), + 86: uint16(32360), + 87: uint16(32587), + 88: uint16(32586), + 89: uint16(32643), + 90: uint16(32646), + 91: uint16(32695), + 92: uint16(32765), + 93: uint16(32766), + 94: uint16(32888), + 95: uint16(33239), + 96: uint16(33237), + 97: uint16(33380), + 98: uint16(33377), + 99: uint16(33379), + 100: uint16(34283), + 101: uint16(34289), + 102: uint16(34285), + 103: uint16(34265), + 104: uint16(34273), + 105: uint16(34280), + 106: uint16(34266), + 107: uint16(34263), + 108: uint16(34284), + 109: uint16(34290), + 110: uint16(34296), + 111: uint16(34264), + 112: uint16(34271), + 113: uint16(34275), + 114: uint16(34268), + 115: uint16(34257), + 116: uint16(34288), + 117: uint16(34278), + 118: uint16(34287), + 119: uint16(34270), + 120: uint16(34274), + 121: uint16(34816), + 122: uint16(34810), + 123: uint16(34819), + 124: uint16(34806), + 125: uint16(34807), + 126: uint16(34825), + 127: uint16(34828), + 128: uint16(34827), + 129: uint16(34822), + 130: uint16(34812), + 131: uint16(34824), + 132: uint16(34815), + 133: uint16(34826), + 134: uint16(34818), + 135: uint16(35170), + 136: uint16(35162), + 137: uint16(35163), + 138: uint16(35159), + 139: uint16(35169), + 140: uint16(35164), + 141: uint16(35160), + 142: uint16(35165), + 143: uint16(35161), + 144: uint16(35208), + 145: uint16(35255), + 146: uint16(35254), + 147: uint16(35318), + 148: uint16(35664), + 149: uint16(35656), + 150: uint16(35658), + 151: uint16(35648), + 152: uint16(35667), + 153: uint16(35670), + 154: uint16(35668), + 155: uint16(35659), + 156: uint16(35669), + }, + 82: { + 0: uint16(35665), + 1: uint16(35650), + 2: uint16(35666), + 3: uint16(35671), + 4: uint16(35907), + 5: uint16(35959), + 6: uint16(35958), + 7: uint16(35994), + 8: uint16(36102), + 9: uint16(36103), + 10: uint16(36105), + 11: uint16(36268), + 12: uint16(36266), + 13: uint16(36269), + 14: uint16(36267), + 15: uint16(36461), + 16: uint16(36472), + 17: uint16(36467), + 18: uint16(36458), + 19: uint16(36463), + 20: uint16(36475), + 21: uint16(36546), + 22: uint16(36690), + 23: uint16(36689), + 24: uint16(36687), + 25: uint16(36688), + 26: uint16(36691), + 27: uint16(36788), + 28: uint16(37184), + 29: uint16(37183), + 30: uint16(37296), + 31: uint16(37293), + 32: uint16(37854), + 33: uint16(37831), + 34: uint16(37839), + 35: uint16(37826), + 36: uint16(37850), + 37: uint16(37840), + 38: uint16(37881), + 39: uint16(37868), + 40: uint16(37836), + 41: uint16(37849), + 42: uint16(37801), + 43: uint16(37862), + 44: uint16(37834), + 45: uint16(37844), + 46: uint16(37870), + 47: uint16(37859), + 48: uint16(37845), + 49: uint16(37828), + 50: uint16(37838), + 51: uint16(37824), + 52: uint16(37842), + 53: uint16(37863), + 54: uint16(38269), + 55: uint16(38362), + 56: uint16(38363), + 57: uint16(38625), + 58: uint16(38697), + 59: uint16(38699), + 60: uint16(38700), + 61: uint16(38696), + 62: uint16(38694), + 63: uint16(38835), + 64: uint16(38839), + 65: uint16(38838), + 66: uint16(38877), + 67: uint16(38878), + 68: uint16(38879), + 69: uint16(39004), + 70: uint16(39001), + 71: uint16(39005), + 72: uint16(38999), + 73: uint16(39103), + 74: uint16(39101), + 75: uint16(39099), + 76: uint16(39102), + 77: uint16(39240), + 78: uint16(39239), + 79: uint16(39235), + 80: uint16(39334), + 81: uint16(39335), + 82: uint16(39450), + 83: uint16(39445), + 84: uint16(39461), + 85: uint16(39453), + 86: uint16(39460), + 87: uint16(39451), + 88: uint16(39458), + 89: uint16(39456), + 90: uint16(39463), + 91: uint16(39459), + 92: uint16(39454), + 93: uint16(39452), + 94: uint16(39444), + 95: uint16(39618), + 96: uint16(39691), + 97: uint16(39690), + 98: uint16(39694), + 99: uint16(39692), + 100: uint16(39735), + 101: uint16(39914), + 102: uint16(39915), + 103: uint16(39904), + 104: uint16(39902), + 105: uint16(39908), + 106: uint16(39910), + 107: uint16(39906), + 108: uint16(39920), + 109: uint16(39892), + 110: uint16(39895), + 111: uint16(39916), + 112: uint16(39900), + 113: uint16(39897), + 114: uint16(39909), + 115: uint16(39893), + 116: uint16(39905), + 117: uint16(39898), + 118: uint16(40311), + 119: uint16(40321), + 120: uint16(40330), + 121: uint16(40324), + 122: uint16(40328), + 123: uint16(40305), + 124: uint16(40320), + 125: uint16(40312), + 126: uint16(40326), + 127: uint16(40331), + 128: uint16(40332), + 129: uint16(40317), + 130: uint16(40299), + 131: uint16(40308), + 132: uint16(40309), + 133: uint16(40304), + 134: uint16(40297), + 135: uint16(40325), + 136: uint16(40307), + 137: uint16(40315), + 138: uint16(40322), + 139: uint16(40303), + 140: uint16(40313), + 141: uint16(40319), + 142: uint16(40327), + 143: uint16(40296), + 144: uint16(40596), + 145: uint16(40593), + 146: uint16(40640), + 147: uint16(40700), + 148: uint16(40749), + 149: uint16(40768), + 150: uint16(40769), + 151: uint16(40781), + 152: uint16(40790), + 153: uint16(40791), + 154: uint16(40792), + 155: uint16(21303), + 156: uint16(22194), + }, + 83: { + 0: uint16(22197), + 1: uint16(22195), + 2: uint16(22755), + 3: uint16(23365), + 4: uint16(24006), + 5: uint16(24007), + 6: uint16(24302), + 7: uint16(24303), + 8: uint16(24512), + 9: uint16(24513), + 10: uint16(25081), + 11: uint16(25879), + 12: uint16(25878), + 13: uint16(25877), + 14: uint16(25875), + 15: uint16(26079), + 16: uint16(26344), + 17: uint16(26339), + 18: uint16(26340), + 19: uint16(27379), + 20: uint16(27376), + 21: uint16(27370), + 22: uint16(27368), + 23: uint16(27385), + 24: uint16(27377), + 25: uint16(27374), + 26: uint16(27375), + 27: uint16(28732), + 28: uint16(28725), + 29: uint16(28719), + 30: uint16(28727), + 31: uint16(28724), + 32: uint16(28721), + 33: uint16(28738), + 34: uint16(28728), + 35: uint16(28735), + 36: uint16(28730), + 37: uint16(28729), + 38: uint16(28736), + 39: uint16(28731), + 40: uint16(28723), + 41: uint16(28737), + 42: uint16(29203), + 43: uint16(29204), + 44: uint16(29352), + 45: uint16(29565), + 46: uint16(29564), + 47: uint16(29882), + 48: uint16(30379), + 49: uint16(30378), + 50: uint16(30398), + 51: uint16(30445), + 52: uint16(30668), + 53: uint16(30670), + 54: uint16(30671), + 55: uint16(30669), + 56: uint16(30706), + 57: uint16(31013), + 58: uint16(31011), + 59: uint16(31015), + 60: uint16(31016), + 61: uint16(31012), + 62: uint16(31017), + 63: uint16(31154), + 64: uint16(31342), + 65: uint16(31340), + 66: uint16(31341), + 67: uint16(31479), + 68: uint16(31817), + 69: uint16(31816), + 70: uint16(31818), + 71: uint16(31815), + 72: uint16(31813), + 73: uint16(31982), + 74: uint16(32379), + 75: uint16(32382), + 76: uint16(32385), + 77: uint16(32384), + 78: uint16(32698), + 79: uint16(32767), + 80: uint16(32889), + 81: uint16(33243), + 82: uint16(33241), + 83: uint16(33291), + 84: uint16(33384), + 85: uint16(33385), + 86: uint16(34338), + 87: uint16(34303), + 88: uint16(34305), + 89: uint16(34302), + 90: uint16(34331), + 91: uint16(34304), + 92: uint16(34294), + 93: uint16(34308), + 94: uint16(34313), + 95: uint16(34309), + 96: uint16(34316), + 97: uint16(34301), + 98: uint16(34841), + 99: uint16(34832), + 100: uint16(34833), + 101: uint16(34839), + 102: uint16(34835), + 103: uint16(34838), + 104: uint16(35171), + 105: uint16(35174), + 106: uint16(35257), + 107: uint16(35319), + 108: uint16(35680), + 109: uint16(35690), + 110: uint16(35677), + 111: uint16(35688), + 112: uint16(35683), + 113: uint16(35685), + 114: uint16(35687), + 115: uint16(35693), + 116: uint16(36270), + 117: uint16(36486), + 118: uint16(36488), + 119: uint16(36484), + 120: uint16(36697), + 121: uint16(36694), + 122: uint16(36695), + 123: uint16(36693), + 124: uint16(36696), + 125: uint16(36698), + 126: uint16(37005), + 127: uint16(37187), + 128: uint16(37185), + 129: uint16(37303), + 130: uint16(37301), + 131: uint16(37298), + 132: uint16(37299), + 133: uint16(37899), + 134: uint16(37907), + 135: uint16(37883), + 136: uint16(37920), + 137: uint16(37903), + 138: uint16(37908), + 139: uint16(37886), + 140: uint16(37909), + 141: uint16(37904), + 142: uint16(37928), + 143: uint16(37913), + 144: uint16(37901), + 145: uint16(37877), + 146: uint16(37888), + 147: uint16(37879), + 148: uint16(37895), + 149: uint16(37902), + 150: uint16(37910), + 151: uint16(37906), + 152: uint16(37882), + 153: uint16(37897), + 154: uint16(37880), + 155: uint16(37898), + 156: uint16(37887), + }, + 84: { + 0: uint16(37884), + 1: uint16(37900), + 2: uint16(37878), + 3: uint16(37905), + 4: uint16(37894), + 5: uint16(38366), + 6: uint16(38368), + 7: uint16(38367), + 8: uint16(38702), + 9: uint16(38703), + 10: uint16(38841), + 11: uint16(38843), + 12: uint16(38909), + 13: uint16(38910), + 14: uint16(39008), + 15: uint16(39010), + 16: uint16(39011), + 17: uint16(39007), + 18: uint16(39105), + 19: uint16(39106), + 20: uint16(39248), + 21: uint16(39246), + 22: uint16(39257), + 23: uint16(39244), + 24: uint16(39243), + 25: uint16(39251), + 26: uint16(39474), + 27: uint16(39476), + 28: uint16(39473), + 29: uint16(39468), + 30: uint16(39466), + 31: uint16(39478), + 32: uint16(39465), + 33: uint16(39470), + 34: uint16(39480), + 35: uint16(39469), + 36: uint16(39623), + 37: uint16(39626), + 38: uint16(39622), + 39: uint16(39696), + 40: uint16(39698), + 41: uint16(39697), + 42: uint16(39947), + 43: uint16(39944), + 44: uint16(39927), + 45: uint16(39941), + 46: uint16(39954), + 47: uint16(39928), + 48: uint16(40000), + 49: uint16(39943), + 50: uint16(39950), + 51: uint16(39942), + 52: uint16(39959), + 53: uint16(39956), + 54: uint16(39945), + 55: uint16(40351), + 56: uint16(40345), + 57: uint16(40356), + 58: uint16(40349), + 59: uint16(40338), + 60: uint16(40344), + 61: uint16(40336), + 62: uint16(40347), + 63: uint16(40352), + 64: uint16(40340), + 65: uint16(40348), + 66: uint16(40362), + 67: uint16(40343), + 68: uint16(40353), + 69: uint16(40346), + 70: uint16(40354), + 71: uint16(40360), + 72: uint16(40350), + 73: uint16(40355), + 74: uint16(40383), + 75: uint16(40361), + 76: uint16(40342), + 77: uint16(40358), + 78: uint16(40359), + 79: uint16(40601), + 80: uint16(40603), + 81: uint16(40602), + 82: uint16(40677), + 83: uint16(40676), + 84: uint16(40679), + 85: uint16(40678), + 86: uint16(40752), + 87: uint16(40750), + 88: uint16(40795), + 89: uint16(40800), + 90: uint16(40798), + 91: uint16(40797), + 92: uint16(40793), + 93: uint16(40849), + 94: uint16(20794), + 95: uint16(20793), + 96: uint16(21144), + 97: uint16(21143), + 98: uint16(22211), + 99: uint16(22205), + 100: uint16(22206), + 101: uint16(23368), + 102: uint16(23367), + 103: uint16(24011), + 104: uint16(24015), + 105: uint16(24305), + 106: uint16(25085), + 107: uint16(25883), + 108: uint16(27394), + 109: uint16(27388), + 110: uint16(27395), + 111: uint16(27384), + 112: uint16(27392), + 113: uint16(28739), + 114: uint16(28740), + 115: uint16(28746), + 116: uint16(28744), + 117: uint16(28745), + 118: uint16(28741), + 119: uint16(28742), + 120: uint16(29213), + 121: uint16(29210), + 122: uint16(29209), + 123: uint16(29566), + 124: uint16(29975), + 125: uint16(30314), + 126: uint16(30672), + 127: uint16(31021), + 128: uint16(31025), + 129: uint16(31023), + 130: uint16(31828), + 131: uint16(31827), + 132: uint16(31986), + 133: uint16(32394), + 134: uint16(32391), + 135: uint16(32392), + 136: uint16(32395), + 137: uint16(32390), + 138: uint16(32397), + 139: uint16(32589), + 140: uint16(32699), + 141: uint16(32816), + 142: uint16(33245), + 143: uint16(34328), + 144: uint16(34346), + 145: uint16(34342), + 146: uint16(34335), + 147: uint16(34339), + 148: uint16(34332), + 149: uint16(34329), + 150: uint16(34343), + 151: uint16(34350), + 152: uint16(34337), + 153: uint16(34336), + 154: uint16(34345), + 155: uint16(34334), + 156: uint16(34341), + }, + 85: { + 0: uint16(34857), + 1: uint16(34845), + 2: uint16(34843), + 3: uint16(34848), + 4: uint16(34852), + 5: uint16(34844), + 6: uint16(34859), + 7: uint16(34890), + 8: uint16(35181), + 9: uint16(35177), + 10: uint16(35182), + 11: uint16(35179), + 12: uint16(35322), + 13: uint16(35705), + 14: uint16(35704), + 15: uint16(35653), + 16: uint16(35706), + 17: uint16(35707), + 18: uint16(36112), + 19: uint16(36116), + 20: uint16(36271), + 21: uint16(36494), + 22: uint16(36492), + 23: uint16(36702), + 24: uint16(36699), + 25: uint16(36701), + 26: uint16(37190), + 27: uint16(37188), + 28: uint16(37189), + 29: uint16(37305), + 30: uint16(37951), + 31: uint16(37947), + 32: uint16(37942), + 33: uint16(37929), + 34: uint16(37949), + 35: uint16(37948), + 36: uint16(37936), + 37: uint16(37945), + 38: uint16(37930), + 39: uint16(37943), + 40: uint16(37932), + 41: uint16(37952), + 42: uint16(37937), + 43: uint16(38373), + 44: uint16(38372), + 45: uint16(38371), + 46: uint16(38709), + 47: uint16(38714), + 48: uint16(38847), + 49: uint16(38881), + 50: uint16(39012), + 51: uint16(39113), + 52: uint16(39110), + 53: uint16(39104), + 54: uint16(39256), + 55: uint16(39254), + 56: uint16(39481), + 57: uint16(39485), + 58: uint16(39494), + 59: uint16(39492), + 60: uint16(39490), + 61: uint16(39489), + 62: uint16(39482), + 63: uint16(39487), + 64: uint16(39629), + 65: uint16(39701), + 66: uint16(39703), + 67: uint16(39704), + 68: uint16(39702), + 69: uint16(39738), + 70: uint16(39762), + 71: uint16(39979), + 72: uint16(39965), + 73: uint16(39964), + 74: uint16(39980), + 75: uint16(39971), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39972), + 79: uint16(39969), + 80: uint16(40375), + 81: uint16(40374), + 82: uint16(40380), + 83: uint16(40385), + 84: uint16(40391), + 85: uint16(40394), + 86: uint16(40399), + 87: uint16(40382), + 88: uint16(40389), + 89: uint16(40387), + 90: uint16(40379), + 91: uint16(40373), + 92: uint16(40398), + 93: uint16(40377), + 94: uint16(40378), + 95: uint16(40364), + 96: uint16(40392), + 97: uint16(40369), + 98: uint16(40365), + 99: uint16(40396), + 100: uint16(40371), + 101: uint16(40397), + 102: uint16(40370), + 103: uint16(40570), + 104: uint16(40604), + 105: uint16(40683), + 106: uint16(40686), + 107: uint16(40685), + 108: uint16(40731), + 109: uint16(40728), + 110: uint16(40730), + 111: uint16(40753), + 112: uint16(40782), + 113: uint16(40805), + 114: uint16(40804), + 115: uint16(40850), + 116: uint16(20153), + 117: uint16(22214), + 118: uint16(22213), + 119: uint16(22219), + 120: uint16(22897), + 121: uint16(23371), + 122: uint16(23372), + 123: uint16(24021), + 124: uint16(24017), + 125: uint16(24306), + 126: uint16(25889), + 127: uint16(25888), + 128: uint16(25894), + 129: uint16(25890), + 130: uint16(27403), + 131: uint16(27400), + 132: uint16(27401), + 133: uint16(27661), + 134: uint16(28757), + 135: uint16(28758), + 136: uint16(28759), + 137: uint16(28754), + 138: uint16(29214), + 139: uint16(29215), + 140: uint16(29353), + 141: uint16(29567), + 142: uint16(29912), + 143: uint16(29909), + 144: uint16(29913), + 145: uint16(29911), + 146: uint16(30317), + 147: uint16(30381), + 148: uint16(31029), + 149: uint16(31156), + 150: uint16(31344), + 151: uint16(31345), + 152: uint16(31831), + 153: uint16(31836), + 154: uint16(31833), + 155: uint16(31835), + 156: uint16(31834), + }, + 86: { + 0: uint16(31988), + 1: uint16(31985), + 2: uint16(32401), + 3: uint16(32591), + 4: uint16(32647), + 5: uint16(33246), + 6: uint16(33387), + 7: uint16(34356), + 8: uint16(34357), + 9: uint16(34355), + 10: uint16(34348), + 11: uint16(34354), + 12: uint16(34358), + 13: uint16(34860), + 14: uint16(34856), + 15: uint16(34854), + 16: uint16(34858), + 17: uint16(34853), + 18: uint16(35185), + 19: uint16(35263), + 20: uint16(35262), + 21: uint16(35323), + 22: uint16(35710), + 23: uint16(35716), + 24: uint16(35714), + 25: uint16(35718), + 26: uint16(35717), + 27: uint16(35711), + 28: uint16(36117), + 29: uint16(36501), + 30: uint16(36500), + 31: uint16(36506), + 32: uint16(36498), + 33: uint16(36496), + 34: uint16(36502), + 35: uint16(36503), + 36: uint16(36704), + 37: uint16(36706), + 38: uint16(37191), + 39: uint16(37964), + 40: uint16(37968), + 41: uint16(37962), + 42: uint16(37963), + 43: uint16(37967), + 44: uint16(37959), + 45: uint16(37957), + 46: uint16(37960), + 47: uint16(37961), + 48: uint16(37958), + 49: uint16(38719), + 50: uint16(38883), + 51: uint16(39018), + 52: uint16(39017), + 53: uint16(39115), + 54: uint16(39252), + 55: uint16(39259), + 56: uint16(39502), + 57: uint16(39507), + 58: uint16(39508), + 59: uint16(39500), + 60: uint16(39503), + 61: uint16(39496), + 62: uint16(39498), + 63: uint16(39497), + 64: uint16(39506), + 65: uint16(39504), + 66: uint16(39632), + 67: uint16(39705), + 68: uint16(39723), + 69: uint16(39739), + 70: uint16(39766), + 71: uint16(39765), + 72: uint16(40006), + 73: uint16(40008), + 74: uint16(39999), + 75: uint16(40004), + 76: uint16(39993), + 77: uint16(39987), + 78: uint16(40001), + 79: uint16(39996), + 80: uint16(39991), + 81: uint16(39988), + 82: uint16(39986), + 83: uint16(39997), + 84: uint16(39990), + 85: uint16(40411), + 86: uint16(40402), + 87: uint16(40414), + 88: uint16(40410), + 89: uint16(40395), + 90: uint16(40400), + 91: uint16(40412), + 92: uint16(40401), + 93: uint16(40415), + 94: uint16(40425), + 95: uint16(40409), + 96: uint16(40408), + 97: uint16(40406), + 98: uint16(40437), + 99: uint16(40405), + 100: uint16(40413), + 101: uint16(40630), + 102: uint16(40688), + 103: uint16(40757), + 104: uint16(40755), + 105: uint16(40754), + 106: uint16(40770), + 107: uint16(40811), + 108: uint16(40853), + 109: uint16(40866), + 110: uint16(20797), + 111: uint16(21145), + 112: uint16(22760), + 113: uint16(22759), + 114: uint16(22898), + 115: uint16(23373), + 116: uint16(24024), + 117: uint16(34863), + 118: uint16(24399), + 119: uint16(25089), + 120: uint16(25091), + 121: uint16(25092), + 122: uint16(25897), + 123: uint16(25893), + 124: uint16(26006), + 125: uint16(26347), + 126: uint16(27409), + 127: uint16(27410), + 128: uint16(27407), + 129: uint16(27594), + 130: uint16(28763), + 131: uint16(28762), + 132: uint16(29218), + 133: uint16(29570), + 134: uint16(29569), + 135: uint16(29571), + 136: uint16(30320), + 137: uint16(30676), + 138: uint16(31847), + 139: uint16(31846), + 140: uint16(32405), + 141: uint16(33388), + 142: uint16(34362), + 143: uint16(34368), + 144: uint16(34361), + 145: uint16(34364), + 146: uint16(34353), + 147: uint16(34363), + 148: uint16(34366), + 149: uint16(34864), + 150: uint16(34866), + 151: uint16(34862), + 152: uint16(34867), + 153: uint16(35190), + 154: uint16(35188), + 155: uint16(35187), + 156: uint16(35326), + }, + 87: { + 0: uint16(35724), + 1: uint16(35726), + 2: uint16(35723), + 3: uint16(35720), + 4: uint16(35909), + 5: uint16(36121), + 6: uint16(36504), + 7: uint16(36708), + 8: uint16(36707), + 9: uint16(37308), + 10: uint16(37986), + 11: uint16(37973), + 12: uint16(37981), + 13: uint16(37975), + 14: uint16(37982), + 15: uint16(38852), + 16: uint16(38853), + 17: uint16(38912), + 18: uint16(39510), + 19: uint16(39513), + 20: uint16(39710), + 21: uint16(39711), + 22: uint16(39712), + 23: uint16(40018), + 24: uint16(40024), + 25: uint16(40016), + 26: uint16(40010), + 27: uint16(40013), + 28: uint16(40011), + 29: uint16(40021), + 30: uint16(40025), + 31: uint16(40012), + 32: uint16(40014), + 33: uint16(40443), + 34: uint16(40439), + 35: uint16(40431), + 36: uint16(40419), + 37: uint16(40427), + 38: uint16(40440), + 39: uint16(40420), + 40: uint16(40438), + 41: uint16(40417), + 42: uint16(40430), + 43: uint16(40422), + 44: uint16(40434), + 45: uint16(40432), + 46: uint16(40418), + 47: uint16(40428), + 48: uint16(40436), + 49: uint16(40435), + 50: uint16(40424), + 51: uint16(40429), + 52: uint16(40642), + 53: uint16(40656), + 54: uint16(40690), + 55: uint16(40691), + 56: uint16(40710), + 57: uint16(40732), + 58: uint16(40760), + 59: uint16(40759), + 60: uint16(40758), + 61: uint16(40771), + 62: uint16(40783), + 63: uint16(40817), + 64: uint16(40816), + 65: uint16(40814), + 66: uint16(40815), + 67: uint16(22227), + 68: uint16(22221), + 69: uint16(23374), + 70: uint16(23661), + 71: uint16(25901), + 72: uint16(26349), + 73: uint16(26350), + 74: uint16(27411), + 75: uint16(28767), + 76: uint16(28769), + 77: uint16(28765), + 78: uint16(28768), + 79: uint16(29219), + 80: uint16(29915), + 81: uint16(29925), + 82: uint16(30677), + 83: uint16(31032), + 84: uint16(31159), + 85: uint16(31158), + 86: uint16(31850), + 87: uint16(32407), + 88: uint16(32649), + 89: uint16(33389), + 90: uint16(34371), + 91: uint16(34872), + 92: uint16(34871), + 93: uint16(34869), + 94: uint16(34891), + 95: uint16(35732), + 96: uint16(35733), + 97: uint16(36510), + 98: uint16(36511), + 99: uint16(36512), + 100: uint16(36509), + 101: uint16(37310), + 102: uint16(37309), + 103: uint16(37314), + 104: uint16(37995), + 105: uint16(37992), + 106: uint16(37993), + 107: uint16(38629), + 108: uint16(38726), + 109: uint16(38723), + 110: uint16(38727), + 111: uint16(38855), + 112: uint16(38885), + 113: uint16(39518), + 114: uint16(39637), + 115: uint16(39769), + 116: uint16(40035), + 117: uint16(40039), + 118: uint16(40038), + 119: uint16(40034), + 120: uint16(40030), + 121: uint16(40032), + 122: uint16(40450), + 123: uint16(40446), + 124: uint16(40455), + 125: uint16(40451), + 126: uint16(40454), + 127: uint16(40453), + 128: uint16(40448), + 129: uint16(40449), + 130: uint16(40457), + 131: uint16(40447), + 132: uint16(40445), + 133: uint16(40452), + 134: uint16(40608), + 135: uint16(40734), + 136: uint16(40774), + 137: uint16(40820), + 138: uint16(40821), + 139: uint16(40822), + 140: uint16(22228), + 141: uint16(25902), + 142: uint16(26040), + 143: uint16(27416), + 144: uint16(27417), + 145: uint16(27415), + 146: uint16(27418), + 147: uint16(28770), + 148: uint16(29222), + 149: uint16(29354), + 150: uint16(30680), + 151: uint16(30681), + 152: uint16(31033), + 153: uint16(31849), + 154: uint16(31851), + 155: uint16(31990), + 156: uint16(32410), + }, + 88: { + 0: uint16(32408), + 1: uint16(32411), + 2: uint16(32409), + 3: uint16(33248), + 4: uint16(33249), + 5: uint16(34374), + 6: uint16(34375), + 7: uint16(34376), + 8: uint16(35193), + 9: uint16(35194), + 10: uint16(35196), + 11: uint16(35195), + 12: uint16(35327), + 13: uint16(35736), + 14: uint16(35737), + 15: uint16(36517), + 16: uint16(36516), + 17: uint16(36515), + 18: uint16(37998), + 19: uint16(37997), + 20: uint16(37999), + 21: uint16(38001), + 22: uint16(38003), + 23: uint16(38729), + 24: uint16(39026), + 25: uint16(39263), + 26: uint16(40040), + 27: uint16(40046), + 28: uint16(40045), + 29: uint16(40459), + 30: uint16(40461), + 31: uint16(40464), + 32: uint16(40463), + 33: uint16(40466), + 34: uint16(40465), + 35: uint16(40609), + 36: uint16(40693), + 37: uint16(40713), + 38: uint16(40775), + 39: uint16(40824), + 40: uint16(40827), + 41: uint16(40826), + 42: uint16(40825), + 43: uint16(22302), + 44: uint16(28774), + 45: uint16(31855), + 46: uint16(34876), + 47: uint16(36274), + 48: uint16(36518), + 49: uint16(37315), + 50: uint16(38004), + 51: uint16(38008), + 52: uint16(38006), + 53: uint16(38005), + 54: uint16(39520), + 55: uint16(40052), + 56: uint16(40051), + 57: uint16(40049), + 58: uint16(40053), + 59: uint16(40468), + 60: uint16(40467), + 61: uint16(40694), + 62: uint16(40714), + 63: uint16(40868), + 64: uint16(28776), + 65: uint16(28773), + 66: uint16(31991), + 67: uint16(34410), + 68: uint16(34878), + 69: uint16(34877), + 70: uint16(34879), + 71: uint16(35742), + 72: uint16(35996), + 73: uint16(36521), + 74: uint16(36553), + 75: uint16(38731), + 76: uint16(39027), + 77: uint16(39028), + 78: uint16(39116), + 79: uint16(39265), + 80: uint16(39339), + 81: uint16(39524), + 82: uint16(39526), + 83: uint16(39527), + 84: uint16(39716), + 85: uint16(40469), + 86: uint16(40471), + 87: uint16(40776), + 88: uint16(25095), + 89: uint16(27422), + 90: uint16(29223), + 91: uint16(34380), + 92: uint16(36520), + 93: uint16(38018), + 94: uint16(38016), + 95: uint16(38017), + 96: uint16(39529), + 97: uint16(39528), + 98: uint16(39726), + 99: uint16(40473), + 100: uint16(29225), + 101: uint16(34379), + 102: uint16(35743), + 103: uint16(38019), + 104: uint16(40057), + 105: uint16(40631), + 106: uint16(30325), + 107: uint16(39531), + 108: uint16(40058), + 109: uint16(40477), + 110: uint16(28777), + 111: uint16(28778), + 112: uint16(40612), + 113: uint16(40830), + 114: uint16(40777), + 115: uint16(40856), + 116: uint16(30849), + 117: uint16(37561), + 118: uint16(35023), + 119: uint16(22715), + 120: uint16(24658), + 121: uint16(31911), + 122: uint16(23290), + 123: uint16(9556), + 124: uint16(9574), + 125: uint16(9559), + 126: uint16(9568), + 127: uint16(9580), + 128: uint16(9571), + 129: uint16(9562), + 130: uint16(9577), + 131: uint16(9565), + 132: uint16(9554), + 133: uint16(9572), + 134: uint16(9557), + 135: uint16(9566), + 136: uint16(9578), + 137: uint16(9569), + 138: uint16(9560), + 139: uint16(9575), + 140: uint16(9563), + 141: uint16(9555), + 142: uint16(9573), + 143: uint16(9558), + 144: uint16(9567), + 145: uint16(9579), + 146: uint16(9570), + 147: uint16(9561), + 148: uint16(9576), + 149: uint16(9564), + 150: uint16(9553), + 151: uint16(9552), + 152: uint16(9581), + 153: uint16(9582), + 154: uint16(9584), + 155: uint16(9583), + 156: uint16(9619), + }, +} + +var _hkscs = [5172]uint16{ + 0: uint16(17392), + 1: uint16(19506), + 2: uint16(17923), + 3: uint16(17830), + 4: uint16(17784), + 5: uint16(29287), + 6: uint16(19831), + 7: uint16(17843), + 8: uint16(31921), + 9: uint16(19682), + 10: uint16(31941), + 11: uint16(15253), + 12: uint16(18230), + 13: uint16(18244), + 14: uint16(19527), + 15: uint16(19520), + 16: uint16(17087), + 17: uint16(13847), + 18: uint16(29522), + 19: uint16(28299), + 20: uint16(28882), + 21: uint16(19543), + 22: uint16(41809), + 23: uint16(18255), + 24: uint16(17882), + 25: uint16(19589), + 26: uint16(31852), + 27: uint16(19719), + 28: uint16(19108), + 29: uint16(18081), + 30: uint16(27427), + 31: uint16(29221), + 32: uint16(23124), + 33: uint16(6755), + 34: uint16(15878), + 35: uint16(16225), + 36: uint16(26189), + 37: uint16(22267), + 39: uint16(32149), + 40: uint16(22813), + 41: uint16(35769), + 42: uint16(15860), + 43: uint16(38708), + 44: uint16(31727), + 45: uint16(23515), + 46: uint16(7518), + 47: uint16(23204), + 48: uint16(13861), + 49: uint16(40624), + 50: uint16(23249), + 51: uint16(23479), + 52: uint16(23804), + 53: uint16(26478), + 54: uint16(34195), + 55: uint16(39237), + 56: uint16(29793), + 57: uint16(29853), + 58: uint16(14453), + 59: uint16(7507), + 60: uint16(13982), + 61: uint16(24609), + 62: uint16(16108), + 63: uint16(22750), + 64: uint16(15093), + 65: uint16(31484), + 66: uint16(40855), + 67: uint16(16737), + 68: uint16(35085), + 69: uint16(12778), + 70: uint16(2698), + 71: uint16(12894), + 72: uint16(17162), + 73: uint16(33924), + 74: uint16(40854), + 75: uint16(37935), + 76: uint16(18736), + 77: uint16(34323), + 78: uint16(22678), + 79: uint16(38730), + 80: uint16(37400), + 81: uint16(31184), + 82: uint16(31282), + 83: uint16(26208), + 84: uint16(27177), + 85: uint16(34973), + 86: uint16(29772), + 87: uint16(31685), + 88: uint16(26498), + 89: uint16(31276), + 90: uint16(21071), + 91: uint16(36934), + 92: uint16(13542), + 93: uint16(29636), + 94: uint16(23993), + 95: uint16(29894), + 96: uint16(40903), + 97: uint16(22451), + 98: uint16(18735), + 99: uint16(21580), + 100: uint16(16689), + 101: uint16(13966), + 102: uint16(22552), + 103: uint16(31346), + 104: uint16(31589), + 105: uint16(35727), + 106: uint16(18094), + 107: uint16(28296), + 108: uint16(16769), + 109: uint16(23961), + 110: uint16(31662), + 111: uint16(9404), + 112: uint16(40904), + 113: uint16(9409), + 114: uint16(9417), + 115: uint16(9420), + 116: uint16(40905), + 117: uint16(34052), + 118: uint16(13755), + 119: uint16(16564), + 120: uint16(40906), + 121: uint16(17633), + 122: uint16(44543), + 123: uint16(25281), + 124: uint16(28782), + 125: uint16(40907), + 157: uint16(12736), + 158: uint16(12737), + 159: uint16(12738), + 160: uint16(12739), + 161: uint16(12740), + 162: uint16(268), + 163: uint16(12741), + 164: uint16(209), + 165: uint16(205), + 166: uint16(12742), + 167: uint16(12743), + 168: uint16(203), + 169: uint16(8168), + 170: uint16(12744), + 171: uint16(202), + 172: uint16(12745), + 173: uint16(12746), + 174: uint16(12747), + 175: uint16(12748), + 176: uint16(270), + 177: uint16(12749), + 178: uint16(12750), + 179: uint16(256), + 180: uint16(193), + 181: uint16(461), + 182: uint16(192), + 183: uint16(274), + 184: uint16(201), + 185: uint16(282), + 186: uint16(200), + 187: uint16(332), + 188: uint16(211), + 189: uint16(465), + 190: uint16(210), + 191: uint16(56320), + 192: uint16(7870), + 193: uint16(56324), + 194: uint16(7872), + 195: uint16(202), + 196: uint16(257), + 197: uint16(225), + 198: uint16(462), + 199: uint16(224), + 200: uint16(593), + 201: uint16(275), + 202: uint16(233), + 203: uint16(283), + 204: uint16(232), + 205: uint16(299), + 206: uint16(237), + 207: uint16(464), + 208: uint16(236), + 209: uint16(333), + 210: uint16(243), + 211: uint16(466), + 212: uint16(242), + 213: uint16(363), + 214: uint16(250), + 215: uint16(468), + 216: uint16(249), + 217: uint16(470), + 218: uint16(472), + 219: uint16(474), + 220: uint16(476), + 221: uint16(252), + 222: uint16(56328), + 223: uint16(7871), + 224: uint16(56332), + 225: uint16(7873), + 226: uint16(234), + 227: uint16(609), + 228: uint16(9178), + 229: uint16(9179), + 314: uint16(41897), + 315: uint16(4421), + 317: uint16(25866), + 320: uint16(20029), + 321: uint16(28381), + 322: uint16(40270), + 323: uint16(37343), + 326: uint16(30517), + 327: uint16(25745), + 328: uint16(20250), + 329: uint16(20264), + 330: uint16(20392), + 331: uint16(20822), + 332: uint16(20852), + 333: uint16(20892), + 334: uint16(20964), + 335: uint16(21153), + 336: uint16(21160), + 337: uint16(21307), + 338: uint16(21326), + 339: uint16(21457), + 340: uint16(21464), + 341: uint16(22242), + 342: uint16(22768), + 343: uint16(22788), + 344: uint16(22791), + 345: uint16(22834), + 346: uint16(22836), + 347: uint16(23398), + 348: uint16(23454), + 349: uint16(23455), + 350: uint16(23706), + 351: uint16(24198), + 352: uint16(24635), + 353: uint16(25993), + 354: uint16(26622), + 355: uint16(26628), + 356: uint16(26725), + 357: uint16(27982), + 358: uint16(28860), + 359: uint16(30005), + 360: uint16(32420), + 361: uint16(32428), + 362: uint16(32442), + 363: uint16(32455), + 364: uint16(32463), + 365: uint16(32479), + 366: uint16(32518), + 367: uint16(32567), + 368: uint16(33402), + 369: uint16(33487), + 370: uint16(33647), + 371: uint16(35270), + 372: uint16(35774), + 373: uint16(35810), + 374: uint16(36710), + 375: uint16(36711), + 376: uint16(36718), + 377: uint16(29713), + 378: uint16(31996), + 379: uint16(32205), + 380: uint16(26950), + 381: uint16(31433), + 382: uint16(21031), + 387: uint16(37260), + 388: uint16(30904), + 389: uint16(37214), + 390: uint16(32956), + 392: uint16(36107), + 393: uint16(33014), + 394: uint16(2535), + 397: uint16(32927), + 398: uint16(40647), + 399: uint16(19661), + 400: uint16(40393), + 401: uint16(40460), + 402: uint16(19518), + 403: uint16(40438), + 404: uint16(28686), + 405: uint16(40458), + 406: uint16(41267), + 407: uint16(13761), + 409: uint16(28314), + 410: uint16(33342), + 411: uint16(29977), + 413: uint16(18705), + 414: uint16(39532), + 415: uint16(39567), + 416: uint16(40857), + 417: uint16(31111), + 418: uint16(33900), + 419: uint16(7626), + 420: uint16(1488), + 421: uint16(10982), + 422: uint16(20004), + 423: uint16(20097), + 424: uint16(20096), + 425: uint16(20103), + 426: uint16(20159), + 427: uint16(20203), + 428: uint16(20279), + 429: uint16(13388), + 430: uint16(20413), + 431: uint16(15944), + 432: uint16(20483), + 433: uint16(20616), + 434: uint16(13437), + 435: uint16(13459), + 436: uint16(13477), + 437: uint16(20870), + 438: uint16(22789), + 439: uint16(20955), + 440: uint16(20988), + 441: uint16(20997), + 442: uint16(20105), + 443: uint16(21113), + 444: uint16(21136), + 445: uint16(21287), + 446: uint16(13767), + 447: uint16(21417), + 448: uint16(13649), + 449: uint16(21424), + 450: uint16(13651), + 451: uint16(21442), + 452: uint16(21539), + 453: uint16(13677), + 454: uint16(13682), + 455: uint16(13953), + 456: uint16(21651), + 457: uint16(21667), + 458: uint16(21684), + 459: uint16(21689), + 460: uint16(21712), + 461: uint16(21743), + 462: uint16(21784), + 463: uint16(21795), + 464: uint16(21800), + 465: uint16(13720), + 466: uint16(21823), + 467: uint16(13733), + 468: uint16(13759), + 469: uint16(21975), + 470: uint16(13765), + 471: uint16(32132), + 472: uint16(21797), + 474: uint16(3138), + 475: uint16(3349), + 476: uint16(20779), + 477: uint16(21904), + 478: uint16(11462), + 479: uint16(14828), + 480: uint16(833), + 481: uint16(36422), + 482: uint16(19896), + 483: uint16(38117), + 484: uint16(16467), + 485: uint16(32958), + 486: uint16(30586), + 487: uint16(11320), + 488: uint16(14900), + 489: uint16(18389), + 490: uint16(33117), + 491: uint16(27122), + 492: uint16(19946), + 493: uint16(25821), + 494: uint16(3452), + 495: uint16(4020), + 496: uint16(3285), + 497: uint16(4340), + 498: uint16(25741), + 499: uint16(36478), + 500: uint16(3734), + 501: uint16(3083), + 502: uint16(3940), + 503: uint16(11433), + 504: uint16(33366), + 505: uint16(17619), + 507: uint16(3398), + 508: uint16(39501), + 509: uint16(33001), + 510: uint16(18420), + 511: uint16(20135), + 512: uint16(11458), + 513: uint16(39602), + 514: uint16(14951), + 515: uint16(38388), + 516: uint16(16365), + 517: uint16(13574), + 518: uint16(21191), + 519: uint16(38868), + 520: uint16(30920), + 521: uint16(11588), + 522: uint16(40302), + 523: uint16(38933), + 525: uint16(17369), + 526: uint16(24741), + 527: uint16(25780), + 528: uint16(21731), + 529: uint16(11596), + 530: uint16(11210), + 531: uint16(4215), + 532: uint16(14843), + 533: uint16(4207), + 534: uint16(26330), + 535: uint16(26390), + 536: uint16(31136), + 537: uint16(25834), + 538: uint16(20562), + 539: uint16(3139), + 540: uint16(36456), + 541: uint16(8609), + 542: uint16(35660), + 543: uint16(1841), + 545: uint16(18443), + 546: uint16(425), + 547: uint16(16378), + 548: uint16(22643), + 549: uint16(11661), + 551: uint16(17864), + 552: uint16(1276), + 553: uint16(24727), + 554: uint16(3916), + 555: uint16(3478), + 556: uint16(21881), + 557: uint16(16571), + 558: uint16(17338), + 560: uint16(19124), + 561: uint16(10854), + 562: uint16(4253), + 563: uint16(33194), + 564: uint16(39157), + 565: uint16(3484), + 566: uint16(25465), + 567: uint16(14846), + 568: uint16(10101), + 569: uint16(36288), + 570: uint16(22177), + 571: uint16(25724), + 572: uint16(15939), + 574: uint16(42497), + 575: uint16(3593), + 576: uint16(10959), + 577: uint16(11465), + 579: uint16(4296), + 580: uint16(14786), + 581: uint16(14738), + 582: uint16(14854), + 583: uint16(33435), + 584: uint16(13688), + 585: uint16(24137), + 586: uint16(8391), + 587: uint16(22098), + 588: uint16(3889), + 589: uint16(11442), + 590: uint16(38688), + 591: uint16(13500), + 592: uint16(27709), + 593: uint16(20027), + 596: uint16(30068), + 597: uint16(11915), + 598: uint16(8712), + 599: uint16(42587), + 600: uint16(36045), + 601: uint16(3706), + 602: uint16(3124), + 603: uint16(26652), + 604: uint16(32659), + 605: uint16(4303), + 606: uint16(10243), + 607: uint16(10553), + 608: uint16(13819), + 609: uint16(20963), + 610: uint16(3724), + 611: uint16(3981), + 612: uint16(3754), + 613: uint16(16275), + 614: uint16(3888), + 615: uint16(3399), + 616: uint16(4431), + 617: uint16(3660), + 619: uint16(3755), + 620: uint16(2985), + 621: uint16(3400), + 622: uint16(4288), + 623: uint16(4413), + 624: uint16(16377), + 625: uint16(9878), + 626: uint16(25650), + 627: uint16(4013), + 628: uint16(13300), + 629: uint16(30265), + 630: uint16(11214), + 631: uint16(3454), + 632: uint16(3455), + 633: uint16(11345), + 634: uint16(11349), + 635: uint16(14872), + 636: uint16(3736), + 637: uint16(4295), + 638: uint16(3886), + 639: uint16(42546), + 640: uint16(27472), + 641: uint16(36050), + 642: uint16(36249), + 643: uint16(36042), + 644: uint16(38314), + 645: uint16(21708), + 646: uint16(33476), + 647: uint16(21945), + 649: uint16(40643), + 650: uint16(39974), + 651: uint16(39606), + 652: uint16(30558), + 653: uint16(11758), + 654: uint16(28992), + 655: uint16(33133), + 656: uint16(33004), + 657: uint16(23580), + 658: uint16(25970), + 659: uint16(33076), + 660: uint16(14231), + 661: uint16(21343), + 662: uint16(32957), + 663: uint16(37302), + 664: uint16(3834), + 665: uint16(3599), + 666: uint16(3703), + 667: uint16(3835), + 668: uint16(13789), + 669: uint16(19947), + 670: uint16(13833), + 671: uint16(3286), + 672: uint16(22191), + 673: uint16(10165), + 674: uint16(4297), + 675: uint16(3600), + 676: uint16(3704), + 677: uint16(4216), + 678: uint16(4424), + 679: uint16(33287), + 680: uint16(5205), + 681: uint16(3705), + 682: uint16(20048), + 683: uint16(11684), + 684: uint16(23124), + 685: uint16(4125), + 686: uint16(4126), + 687: uint16(4341), + 688: uint16(4342), + 689: uint16(22428), + 690: uint16(3601), + 691: uint16(30356), + 692: uint16(33485), + 693: uint16(4021), + 694: uint16(3707), + 695: uint16(20862), + 696: uint16(14083), + 697: uint16(4022), + 698: uint16(4480), + 699: uint16(21208), + 700: uint16(41661), + 701: uint16(18906), + 702: uint16(6202), + 703: uint16(16759), + 704: uint16(33404), + 705: uint16(22681), + 706: uint16(21096), + 707: uint16(13850), + 708: uint16(22333), + 709: uint16(31666), + 710: uint16(23400), + 711: uint16(18432), + 712: uint16(19244), + 713: uint16(40743), + 714: uint16(18919), + 715: uint16(39967), + 716: uint16(39821), + 717: uint16(23412), + 718: uint16(12605), + 719: uint16(22011), + 720: uint16(13810), + 721: uint16(22153), + 722: uint16(20008), + 723: uint16(22786), + 724: uint16(7105), + 725: uint16(63608), + 726: uint16(38737), + 727: uint16(134), + 728: uint16(20059), + 729: uint16(20155), + 730: uint16(13630), + 731: uint16(23587), + 732: uint16(24401), + 733: uint16(24516), + 734: uint16(14586), + 735: uint16(25164), + 736: uint16(25909), + 737: uint16(27514), + 738: uint16(27701), + 739: uint16(27706), + 740: uint16(28780), + 741: uint16(29227), + 742: uint16(20012), + 743: uint16(29357), + 744: uint16(18665), + 745: uint16(32594), + 746: uint16(31035), + 747: uint16(31993), + 748: uint16(32595), + 749: uint16(25194), + 750: uint16(13505), + 752: uint16(25419), + 753: uint16(32770), + 754: uint16(32896), + 755: uint16(26130), + 756: uint16(26961), + 757: uint16(21341), + 758: uint16(34916), + 759: uint16(35265), + 760: uint16(30898), + 761: uint16(35744), + 762: uint16(36125), + 763: uint16(38021), + 764: uint16(38264), + 765: uint16(38271), + 766: uint16(38376), + 767: uint16(36367), + 768: uint16(38886), + 769: uint16(39029), + 770: uint16(39118), + 771: uint16(39134), + 772: uint16(39267), + 773: uint16(38928), + 774: uint16(40060), + 775: uint16(40479), + 776: uint16(40644), + 777: uint16(27503), + 778: uint16(63751), + 779: uint16(20023), + 780: uint16(135), + 781: uint16(38429), + 782: uint16(25143), + 783: uint16(38050), + 785: uint16(20539), + 786: uint16(28158), + 787: uint16(40051), + 788: uint16(40870), + 789: uint16(15817), + 790: uint16(34959), + 791: uint16(16718), + 792: uint16(28791), + 793: uint16(23797), + 794: uint16(19232), + 795: uint16(20941), + 796: uint16(13657), + 797: uint16(23856), + 798: uint16(24866), + 799: uint16(35378), + 800: uint16(36775), + 801: uint16(37366), + 802: uint16(29073), + 803: uint16(26393), + 804: uint16(29626), + 805: uint16(12929), + 806: uint16(41223), + 807: uint16(15499), + 808: uint16(6528), + 809: uint16(19216), + 810: uint16(30948), + 811: uint16(29698), + 812: uint16(20910), + 813: uint16(34575), + 814: uint16(16393), + 815: uint16(27235), + 816: uint16(41658), + 817: uint16(16931), + 818: uint16(34319), + 819: uint16(2671), + 820: uint16(31274), + 821: uint16(39239), + 822: uint16(35562), + 823: uint16(38741), + 824: uint16(28749), + 825: uint16(21284), + 826: uint16(8318), + 827: uint16(37876), + 828: uint16(30425), + 829: uint16(35299), + 830: uint16(40871), + 831: uint16(30685), + 832: uint16(20131), + 833: uint16(20464), + 834: uint16(20668), + 835: uint16(20015), + 836: uint16(20247), + 837: uint16(40872), + 838: uint16(21556), + 839: uint16(32139), + 840: uint16(22674), + 841: uint16(22736), + 842: uint16(7606), + 843: uint16(24210), + 844: uint16(24217), + 845: uint16(24514), + 846: uint16(10002), + 847: uint16(25995), + 848: uint16(13305), + 849: uint16(26905), + 850: uint16(27203), + 851: uint16(15459), + 852: uint16(27903), + 854: uint16(29184), + 855: uint16(17669), + 856: uint16(29580), + 857: uint16(16091), + 858: uint16(18963), + 859: uint16(23317), + 860: uint16(29881), + 861: uint16(35715), + 862: uint16(23716), + 863: uint16(22165), + 864: uint16(31379), + 865: uint16(31724), + 866: uint16(31939), + 867: uint16(32364), + 868: uint16(33528), + 869: uint16(34199), + 870: uint16(40873), + 871: uint16(34960), + 872: uint16(40874), + 873: uint16(36537), + 874: uint16(40875), + 875: uint16(36815), + 876: uint16(34143), + 877: uint16(39392), + 878: uint16(37409), + 879: uint16(40876), + 880: uint16(36281), + 881: uint16(5183), + 882: uint16(16497), + 883: uint16(17058), + 884: uint16(23066), + 888: uint16(39016), + 889: uint16(26475), + 890: uint16(17014), + 891: uint16(22333), + 893: uint16(34262), + 894: uint16(18811), + 895: uint16(33471), + 896: uint16(28941), + 897: uint16(19585), + 898: uint16(28020), + 899: uint16(23931), + 900: uint16(27413), + 901: uint16(28606), + 902: uint16(40877), + 903: uint16(40878), + 904: uint16(23446), + 905: uint16(40879), + 906: uint16(26343), + 907: uint16(32347), + 908: uint16(28247), + 909: uint16(31178), + 910: uint16(15752), + 911: uint16(17603), + 912: uint16(12886), + 913: uint16(10134), + 914: uint16(17306), + 915: uint16(17718), + 917: uint16(23765), + 918: uint16(15130), + 919: uint16(35577), + 920: uint16(23672), + 921: uint16(15634), + 922: uint16(13649), + 923: uint16(23928), + 924: uint16(40882), + 925: uint16(29015), + 926: uint16(17752), + 927: uint16(16620), + 928: uint16(7715), + 929: uint16(19575), + 930: uint16(14712), + 931: uint16(13386), + 932: uint16(420), + 933: uint16(27713), + 934: uint16(35532), + 935: uint16(20404), + 936: uint16(569), + 937: uint16(22975), + 938: uint16(33132), + 939: uint16(38998), + 940: uint16(39162), + 941: uint16(24379), + 942: uint16(2975), + 944: uint16(8641), + 945: uint16(35181), + 946: uint16(16642), + 947: uint16(18107), + 948: uint16(36985), + 949: uint16(16135), + 950: uint16(40883), + 951: uint16(41397), + 952: uint16(16632), + 953: uint16(14294), + 954: uint16(18167), + 955: uint16(27718), + 956: uint16(16764), + 957: uint16(34482), + 958: uint16(29695), + 959: uint16(17773), + 960: uint16(14548), + 961: uint16(21658), + 962: uint16(17761), + 963: uint16(17691), + 964: uint16(19849), + 965: uint16(19579), + 966: uint16(19830), + 967: uint16(17898), + 968: uint16(16328), + 969: uint16(19215), + 970: uint16(13921), + 971: uint16(17630), + 972: uint16(17597), + 973: uint16(16877), + 974: uint16(23870), + 975: uint16(23880), + 976: uint16(23894), + 977: uint16(15868), + 978: uint16(14351), + 979: uint16(23972), + 980: uint16(23993), + 981: uint16(14368), + 982: uint16(14392), + 983: uint16(24130), + 984: uint16(24253), + 985: uint16(24357), + 986: uint16(24451), + 987: uint16(14600), + 988: uint16(14612), + 989: uint16(14655), + 990: uint16(14669), + 991: uint16(24791), + 992: uint16(24893), + 993: uint16(23781), + 994: uint16(14729), + 995: uint16(25015), + 996: uint16(25017), + 997: uint16(25039), + 998: uint16(14776), + 999: uint16(25132), + 1000: uint16(25232), + 1001: uint16(25317), + 1002: uint16(25368), + 1003: uint16(14840), + 1004: uint16(22193), + 1005: uint16(14851), + 1006: uint16(25570), + 1007: uint16(25595), + 1008: uint16(25607), + 1009: uint16(25690), + 1010: uint16(14923), + 1011: uint16(25792), + 1012: uint16(23829), + 1013: uint16(22049), + 1014: uint16(40863), + 1015: uint16(14999), + 1016: uint16(25990), + 1017: uint16(15037), + 1018: uint16(26111), + 1019: uint16(26195), + 1020: uint16(15090), + 1021: uint16(26258), + 1022: uint16(15138), + 1023: uint16(26390), + 1024: uint16(15170), + 1025: uint16(26532), + 1026: uint16(26624), + 1027: uint16(15192), + 1028: uint16(26698), + 1029: uint16(26756), + 1030: uint16(15218), + 1031: uint16(15217), + 1032: uint16(15227), + 1033: uint16(26889), + 1034: uint16(26947), + 1035: uint16(29276), + 1036: uint16(26980), + 1037: uint16(27039), + 1038: uint16(27013), + 1039: uint16(15292), + 1040: uint16(27094), + 1041: uint16(15325), + 1042: uint16(27237), + 1043: uint16(27252), + 1044: uint16(27249), + 1045: uint16(27266), + 1046: uint16(15340), + 1047: uint16(27289), + 1048: uint16(15346), + 1049: uint16(27307), + 1050: uint16(27317), + 1051: uint16(27348), + 1052: uint16(27382), + 1053: uint16(27521), + 1054: uint16(27585), + 1055: uint16(27626), + 1056: uint16(27765), + 1057: uint16(27818), + 1058: uint16(15563), + 1059: uint16(27906), + 1060: uint16(27910), + 1061: uint16(27942), + 1062: uint16(28033), + 1063: uint16(15599), + 1064: uint16(28068), + 1065: uint16(28081), + 1066: uint16(28181), + 1067: uint16(28184), + 1068: uint16(28201), + 1069: uint16(28294), + 1070: uint16(35264), + 1071: uint16(28347), + 1072: uint16(28386), + 1073: uint16(28378), + 1074: uint16(40831), + 1075: uint16(28392), + 1076: uint16(28393), + 1077: uint16(28452), + 1078: uint16(28468), + 1079: uint16(15686), + 1080: uint16(16193), + 1081: uint16(28545), + 1082: uint16(28606), + 1083: uint16(15722), + 1084: uint16(15733), + 1085: uint16(29111), + 1086: uint16(23705), + 1087: uint16(15754), + 1088: uint16(28716), + 1089: uint16(15761), + 1090: uint16(28752), + 1091: uint16(28756), + 1092: uint16(28783), + 1093: uint16(28799), + 1094: uint16(28809), + 1095: uint16(805), + 1096: uint16(17345), + 1097: uint16(13809), + 1098: uint16(3800), + 1099: uint16(16087), + 1100: uint16(22462), + 1101: uint16(28371), + 1102: uint16(28990), + 1103: uint16(22496), + 1104: uint16(13902), + 1105: uint16(27042), + 1106: uint16(35817), + 1107: uint16(23412), + 1108: uint16(31305), + 1109: uint16(22753), + 1110: uint16(38105), + 1111: uint16(31333), + 1112: uint16(31357), + 1113: uint16(22956), + 1114: uint16(31419), + 1115: uint16(31408), + 1116: uint16(31426), + 1117: uint16(31427), + 1118: uint16(29137), + 1119: uint16(25741), + 1120: uint16(16842), + 1121: uint16(31450), + 1122: uint16(31453), + 1123: uint16(31466), + 1124: uint16(16879), + 1125: uint16(21682), + 1126: uint16(23553), + 1127: uint16(31499), + 1128: uint16(31573), + 1129: uint16(31529), + 1130: uint16(21262), + 1131: uint16(23806), + 1132: uint16(31650), + 1133: uint16(31599), + 1134: uint16(33692), + 1135: uint16(23476), + 1136: uint16(27775), + 1137: uint16(31696), + 1138: uint16(33825), + 1139: uint16(31634), + 1141: uint16(23840), + 1142: uint16(15789), + 1143: uint16(23653), + 1144: uint16(33938), + 1145: uint16(31738), + 1147: uint16(31797), + 1148: uint16(23745), + 1149: uint16(31812), + 1150: uint16(31875), + 1151: uint16(18562), + 1152: uint16(31910), + 1153: uint16(26237), + 1154: uint16(17784), + 1155: uint16(31945), + 1156: uint16(31943), + 1157: uint16(31974), + 1158: uint16(31860), + 1159: uint16(31987), + 1160: uint16(31989), + 1162: uint16(32359), + 1163: uint16(17693), + 1164: uint16(28228), + 1165: uint16(32093), + 1166: uint16(28374), + 1167: uint16(29837), + 1168: uint16(32137), + 1169: uint16(32171), + 1170: uint16(28981), + 1171: uint16(32179), + 1173: uint16(16471), + 1174: uint16(24617), + 1175: uint16(32228), + 1176: uint16(15635), + 1177: uint16(32245), + 1178: uint16(6137), + 1179: uint16(32229), + 1180: uint16(33645), + 1182: uint16(24865), + 1183: uint16(24922), + 1184: uint16(32366), + 1185: uint16(32402), + 1186: uint16(17195), + 1187: uint16(37996), + 1188: uint16(32295), + 1189: uint16(32576), + 1190: uint16(32577), + 1191: uint16(32583), + 1192: uint16(31030), + 1193: uint16(25296), + 1194: uint16(39393), + 1195: uint16(32663), + 1196: uint16(25425), + 1197: uint16(32675), + 1198: uint16(5729), + 1199: uint16(104), + 1200: uint16(17756), + 1201: uint16(14182), + 1202: uint16(17667), + 1203: uint16(33594), + 1204: uint16(32762), + 1205: uint16(25737), + 1207: uint16(32776), + 1208: uint16(32797), + 1210: uint16(32815), + 1211: uint16(41095), + 1212: uint16(27843), + 1213: uint16(32827), + 1214: uint16(32828), + 1215: uint16(32865), + 1216: uint16(10004), + 1217: uint16(18825), + 1218: uint16(26150), + 1219: uint16(15843), + 1220: uint16(26344), + 1221: uint16(26405), + 1222: uint16(32935), + 1223: uint16(35400), + 1224: uint16(33031), + 1225: uint16(33050), + 1226: uint16(22704), + 1227: uint16(9974), + 1228: uint16(27775), + 1229: uint16(25752), + 1230: uint16(20408), + 1231: uint16(25831), + 1232: uint16(5258), + 1233: uint16(33304), + 1234: uint16(6238), + 1235: uint16(27219), + 1236: uint16(19045), + 1237: uint16(19093), + 1238: uint16(17530), + 1239: uint16(33321), + 1240: uint16(2829), + 1241: uint16(27218), + 1242: uint16(15742), + 1243: uint16(20473), + 1244: uint16(5373), + 1245: uint16(34018), + 1246: uint16(33634), + 1247: uint16(27402), + 1248: uint16(18855), + 1249: uint16(13616), + 1250: uint16(6003), + 1251: uint16(15864), + 1252: uint16(33450), + 1253: uint16(26907), + 1254: uint16(63892), + 1255: uint16(16859), + 1256: uint16(34123), + 1257: uint16(33488), + 1258: uint16(33562), + 1259: uint16(3606), + 1260: uint16(6068), + 1261: uint16(14017), + 1262: uint16(12669), + 1263: uint16(13658), + 1264: uint16(33403), + 1265: uint16(33506), + 1266: uint16(33560), + 1267: uint16(16011), + 1268: uint16(28067), + 1269: uint16(27397), + 1270: uint16(27543), + 1271: uint16(13774), + 1272: uint16(15807), + 1273: uint16(33565), + 1274: uint16(21996), + 1275: uint16(33669), + 1276: uint16(17675), + 1277: uint16(28069), + 1278: uint16(33708), + 1280: uint16(33747), + 1281: uint16(13438), + 1282: uint16(28372), + 1283: uint16(27223), + 1284: uint16(34138), + 1285: uint16(13462), + 1286: uint16(28226), + 1287: uint16(12015), + 1288: uint16(33880), + 1289: uint16(23524), + 1290: uint16(33905), + 1291: uint16(15827), + 1292: uint16(17636), + 1293: uint16(27303), + 1294: uint16(33866), + 1295: uint16(15541), + 1296: uint16(31064), + 1298: uint16(27542), + 1299: uint16(28279), + 1300: uint16(28227), + 1301: uint16(34014), + 1303: uint16(33681), + 1304: uint16(17568), + 1305: uint16(33939), + 1306: uint16(34020), + 1307: uint16(23697), + 1308: uint16(16960), + 1309: uint16(23744), + 1310: uint16(17731), + 1311: uint16(34100), + 1312: uint16(23282), + 1313: uint16(28313), + 1314: uint16(17703), + 1315: uint16(34163), + 1316: uint16(17686), + 1317: uint16(26559), + 1318: uint16(34326), + 1319: uint16(34341), + 1320: uint16(34363), + 1321: uint16(34241), + 1322: uint16(28808), + 1323: uint16(34306), + 1324: uint16(5506), + 1325: uint16(28877), + 1326: uint16(63922), + 1327: uint16(17770), + 1328: uint16(34344), + 1329: uint16(13896), + 1330: uint16(6306), + 1331: uint16(21495), + 1332: uint16(29594), + 1333: uint16(34430), + 1334: uint16(34673), + 1335: uint16(41208), + 1336: uint16(34798), + 1337: uint16(11303), + 1338: uint16(34737), + 1339: uint16(34778), + 1340: uint16(34831), + 1341: uint16(22113), + 1342: uint16(34412), + 1343: uint16(26710), + 1344: uint16(17935), + 1345: uint16(34885), + 1346: uint16(34886), + 1347: uint16(30176), + 1348: uint16(15801), + 1349: uint16(30180), + 1350: uint16(34910), + 1351: uint16(34972), + 1352: uint16(18011), + 1353: uint16(34996), + 1354: uint16(34997), + 1355: uint16(25537), + 1356: uint16(35013), + 1357: uint16(30583), + 1358: uint16(30479), + 1359: uint16(35207), + 1360: uint16(35210), + 1363: uint16(35239), + 1364: uint16(35260), + 1365: uint16(35365), + 1366: uint16(35303), + 1367: uint16(31012), + 1368: uint16(31421), + 1369: uint16(35484), + 1370: uint16(30611), + 1371: uint16(37374), + 1372: uint16(35472), + 1373: uint16(31321), + 1374: uint16(31465), + 1375: uint16(31546), + 1376: uint16(16271), + 1377: uint16(18195), + 1378: uint16(31544), + 1379: uint16(29052), + 1380: uint16(35596), + 1381: uint16(35615), + 1382: uint16(21552), + 1383: uint16(21861), + 1384: uint16(35647), + 1385: uint16(35660), + 1386: uint16(35661), + 1387: uint16(35497), + 1388: uint16(19066), + 1389: uint16(35728), + 1390: uint16(35739), + 1391: uint16(35503), + 1392: uint16(5855), + 1393: uint16(17941), + 1394: uint16(34895), + 1395: uint16(35995), + 1396: uint16(32084), + 1397: uint16(32143), + 1398: uint16(63956), + 1399: uint16(14117), + 1400: uint16(32083), + 1401: uint16(36054), + 1402: uint16(32152), + 1403: uint16(32189), + 1404: uint16(36114), + 1405: uint16(36099), + 1406: uint16(6416), + 1407: uint16(36059), + 1408: uint16(28764), + 1409: uint16(36113), + 1410: uint16(19657), + 1411: uint16(16080), + 1413: uint16(36265), + 1414: uint16(32770), + 1415: uint16(4116), + 1416: uint16(18826), + 1417: uint16(15228), + 1418: uint16(33212), + 1419: uint16(28940), + 1420: uint16(31463), + 1421: uint16(36525), + 1422: uint16(36534), + 1423: uint16(36547), + 1424: uint16(37588), + 1425: uint16(36633), + 1426: uint16(36653), + 1427: uint16(33637), + 1428: uint16(33810), + 1429: uint16(36773), + 1430: uint16(37635), + 1431: uint16(41631), + 1432: uint16(2640), + 1433: uint16(36787), + 1434: uint16(18730), + 1435: uint16(35294), + 1436: uint16(34109), + 1437: uint16(15803), + 1438: uint16(24312), + 1439: uint16(12898), + 1440: uint16(36857), + 1441: uint16(40980), + 1442: uint16(34492), + 1443: uint16(34049), + 1444: uint16(8997), + 1445: uint16(14720), + 1446: uint16(28375), + 1447: uint16(36919), + 1448: uint16(34108), + 1449: uint16(31422), + 1450: uint16(36961), + 1451: uint16(34156), + 1452: uint16(34315), + 1453: uint16(37032), + 1454: uint16(34579), + 1455: uint16(37060), + 1456: uint16(34534), + 1457: uint16(37038), + 1459: uint16(37223), + 1460: uint16(15088), + 1461: uint16(37289), + 1462: uint16(37316), + 1463: uint16(31916), + 1464: uint16(35123), + 1465: uint16(7817), + 1466: uint16(37390), + 1467: uint16(27807), + 1468: uint16(37441), + 1469: uint16(37474), + 1470: uint16(21945), + 1472: uint16(35526), + 1473: uint16(15515), + 1474: uint16(35596), + 1475: uint16(21979), + 1476: uint16(3377), + 1477: uint16(37676), + 1478: uint16(37739), + 1479: uint16(35553), + 1480: uint16(35819), + 1481: uint16(28815), + 1482: uint16(23235), + 1483: uint16(35554), + 1484: uint16(35557), + 1485: uint16(18789), + 1486: uint16(37444), + 1487: uint16(35820), + 1488: uint16(35897), + 1489: uint16(35839), + 1490: uint16(37747), + 1491: uint16(37979), + 1492: uint16(36540), + 1493: uint16(38277), + 1494: uint16(38310), + 1495: uint16(37926), + 1496: uint16(38304), + 1497: uint16(28662), + 1498: uint16(17081), + 1499: uint16(9850), + 1500: uint16(34520), + 1501: uint16(4732), + 1502: uint16(15918), + 1503: uint16(18911), + 1504: uint16(27676), + 1505: uint16(38523), + 1506: uint16(38550), + 1507: uint16(16748), + 1508: uint16(38563), + 1509: uint16(28373), + 1510: uint16(25050), + 1511: uint16(38582), + 1512: uint16(30965), + 1513: uint16(35552), + 1514: uint16(38589), + 1515: uint16(21452), + 1516: uint16(18849), + 1517: uint16(27832), + 1518: uint16(628), + 1519: uint16(25616), + 1520: uint16(37039), + 1521: uint16(37093), + 1522: uint16(19153), + 1523: uint16(6421), + 1524: uint16(13066), + 1525: uint16(38705), + 1526: uint16(34370), + 1527: uint16(38710), + 1528: uint16(18959), + 1529: uint16(17725), + 1530: uint16(17797), + 1531: uint16(19177), + 1532: uint16(28789), + 1533: uint16(23361), + 1534: uint16(38683), + 1536: uint16(37333), + 1537: uint16(38743), + 1538: uint16(23370), + 1539: uint16(37355), + 1540: uint16(38751), + 1541: uint16(37925), + 1542: uint16(20688), + 1543: uint16(12471), + 1544: uint16(12476), + 1545: uint16(38793), + 1546: uint16(38815), + 1547: uint16(38833), + 1548: uint16(38846), + 1549: uint16(38848), + 1550: uint16(38866), + 1551: uint16(38880), + 1552: uint16(21612), + 1553: uint16(38894), + 1554: uint16(29724), + 1555: uint16(37939), + 1557: uint16(38901), + 1558: uint16(37917), + 1559: uint16(31098), + 1560: uint16(19153), + 1561: uint16(38964), + 1562: uint16(38963), + 1563: uint16(38987), + 1564: uint16(39014), + 1565: uint16(15118), + 1566: uint16(29045), + 1567: uint16(15697), + 1568: uint16(1584), + 1569: uint16(16732), + 1570: uint16(22278), + 1571: uint16(39114), + 1572: uint16(39095), + 1573: uint16(39112), + 1574: uint16(39111), + 1575: uint16(19199), + 1576: uint16(27943), + 1577: uint16(5843), + 1578: uint16(21936), + 1579: uint16(39137), + 1580: uint16(39142), + 1581: uint16(39148), + 1582: uint16(37752), + 1583: uint16(39225), + 1584: uint16(18985), + 1585: uint16(19314), + 1586: uint16(38999), + 1587: uint16(39173), + 1588: uint16(39413), + 1589: uint16(39436), + 1590: uint16(39483), + 1591: uint16(39440), + 1592: uint16(39512), + 1593: uint16(22309), + 1594: uint16(14020), + 1595: uint16(37041), + 1596: uint16(39893), + 1597: uint16(39648), + 1598: uint16(39650), + 1599: uint16(39685), + 1600: uint16(39668), + 1601: uint16(19470), + 1602: uint16(39700), + 1603: uint16(39725), + 1604: uint16(34304), + 1605: uint16(20532), + 1606: uint16(39732), + 1607: uint16(27048), + 1608: uint16(14531), + 1609: uint16(12413), + 1610: uint16(39760), + 1611: uint16(39744), + 1612: uint16(40254), + 1613: uint16(23109), + 1614: uint16(6243), + 1615: uint16(39822), + 1616: uint16(16971), + 1617: uint16(39938), + 1618: uint16(39935), + 1619: uint16(39948), + 1620: uint16(40552), + 1621: uint16(40404), + 1622: uint16(40887), + 1623: uint16(41362), + 1624: uint16(41387), + 1625: uint16(41185), + 1626: uint16(41251), + 1627: uint16(41439), + 1628: uint16(40318), + 1629: uint16(40323), + 1630: uint16(41268), + 1631: uint16(40462), + 1632: uint16(26760), + 1633: uint16(40388), + 1634: uint16(8539), + 1635: uint16(41363), + 1636: uint16(41504), + 1637: uint16(6459), + 1638: uint16(41523), + 1639: uint16(40249), + 1640: uint16(41145), + 1641: uint16(41652), + 1642: uint16(40592), + 1643: uint16(40597), + 1644: uint16(40606), + 1645: uint16(40610), + 1646: uint16(19764), + 1647: uint16(40618), + 1648: uint16(40623), + 1649: uint16(17252), + 1650: uint16(40641), + 1651: uint16(15200), + 1652: uint16(14821), + 1653: uint16(15645), + 1654: uint16(20274), + 1655: uint16(14270), + 1656: uint16(35883), + 1657: uint16(40706), + 1658: uint16(40712), + 1659: uint16(19350), + 1660: uint16(37924), + 1661: uint16(28066), + 1662: uint16(40727), + 1664: uint16(40761), + 1665: uint16(22175), + 1666: uint16(22154), + 1667: uint16(40773), + 1668: uint16(39352), + 1669: uint16(37003), + 1670: uint16(38898), + 1671: uint16(33919), + 1672: uint16(40802), + 1673: uint16(40809), + 1674: uint16(31452), + 1675: uint16(40846), + 1676: uint16(29206), + 1677: uint16(19390), + 1678: uint16(18805), + 1679: uint16(18875), + 1680: uint16(29047), + 1681: uint16(18936), + 1682: uint16(17224), + 1683: uint16(19025), + 1684: uint16(29598), + 1685: uint16(35802), + 1686: uint16(6394), + 1687: uint16(31135), + 1688: uint16(35198), + 1689: uint16(36406), + 1690: uint16(37737), + 1691: uint16(37875), + 1692: uint16(35396), + 1693: uint16(37612), + 1694: uint16(37761), + 1695: uint16(37835), + 1696: uint16(35180), + 1697: uint16(17593), + 1698: uint16(29207), + 1699: uint16(16107), + 1700: uint16(30578), + 1701: uint16(31299), + 1702: uint16(28880), + 1703: uint16(17523), + 1704: uint16(17400), + 1705: uint16(29054), + 1706: uint16(6127), + 1707: uint16(28835), + 1708: uint16(6334), + 1709: uint16(13721), + 1710: uint16(16071), + 1711: uint16(6277), + 1712: uint16(21551), + 1713: uint16(6136), + 1714: uint16(14114), + 1715: uint16(5883), + 1716: uint16(6201), + 1717: uint16(14049), + 1718: uint16(6004), + 1719: uint16(6353), + 1720: uint16(24395), + 1721: uint16(14115), + 1722: uint16(5824), + 1723: uint16(22363), + 1724: uint16(18981), + 1725: uint16(5118), + 1726: uint16(4776), + 1727: uint16(5062), + 1728: uint16(5302), + 1729: uint16(34051), + 1730: uint16(13990), + 1732: uint16(33877), + 1733: uint16(18836), + 1734: uint16(29029), + 1735: uint16(15921), + 1736: uint16(21852), + 1737: uint16(16123), + 1738: uint16(28754), + 1739: uint16(17652), + 1740: uint16(14062), + 1741: uint16(39325), + 1742: uint16(28454), + 1743: uint16(26617), + 1744: uint16(14131), + 1745: uint16(15381), + 1746: uint16(15847), + 1747: uint16(22636), + 1748: uint16(6434), + 1749: uint16(26640), + 1750: uint16(16471), + 1751: uint16(14143), + 1752: uint16(16609), + 1753: uint16(16523), + 1754: uint16(16655), + 1755: uint16(27681), + 1756: uint16(21707), + 1757: uint16(22174), + 1758: uint16(26289), + 1759: uint16(22162), + 1760: uint16(4063), + 1761: uint16(2984), + 1762: uint16(3597), + 1763: uint16(37830), + 1764: uint16(35603), + 1765: uint16(37788), + 1766: uint16(20216), + 1767: uint16(20779), + 1768: uint16(14361), + 1769: uint16(17462), + 1770: uint16(20156), + 1771: uint16(1125), + 1772: uint16(895), + 1773: uint16(20299), + 1774: uint16(20362), + 1775: uint16(22097), + 1776: uint16(23144), + 1777: uint16(427), + 1778: uint16(971), + 1779: uint16(14745), + 1780: uint16(778), + 1781: uint16(1044), + 1782: uint16(13365), + 1783: uint16(20265), + 1784: uint16(704), + 1785: uint16(36531), + 1786: uint16(629), + 1787: uint16(35546), + 1788: uint16(524), + 1789: uint16(20120), + 1790: uint16(20685), + 1791: uint16(20749), + 1792: uint16(20386), + 1793: uint16(20227), + 1794: uint16(18958), + 1795: uint16(16010), + 1796: uint16(20290), + 1797: uint16(20526), + 1798: uint16(20588), + 1799: uint16(20609), + 1800: uint16(20428), + 1801: uint16(20453), + 1802: uint16(20568), + 1803: uint16(20732), + 1808: uint16(28278), + 1809: uint16(13717), + 1810: uint16(15929), + 1811: uint16(16063), + 1812: uint16(28018), + 1813: uint16(6276), + 1814: uint16(16009), + 1815: uint16(20904), + 1816: uint16(20931), + 1817: uint16(1504), + 1818: uint16(17629), + 1819: uint16(1187), + 1820: uint16(1170), + 1821: uint16(1169), + 1822: uint16(36218), + 1823: uint16(35484), + 1824: uint16(1806), + 1825: uint16(21081), + 1826: uint16(21156), + 1827: uint16(2163), + 1828: uint16(21217), + 1830: uint16(18042), + 1831: uint16(29068), + 1832: uint16(17292), + 1833: uint16(3104), + 1834: uint16(18860), + 1835: uint16(4324), + 1836: uint16(27089), + 1837: uint16(3613), + 1839: uint16(16094), + 1840: uint16(29849), + 1841: uint16(29716), + 1842: uint16(29782), + 1843: uint16(29592), + 1844: uint16(19342), + 1845: uint16(19132), + 1846: uint16(16525), + 1847: uint16(21456), + 1848: uint16(13700), + 1849: uint16(29199), + 1850: uint16(16585), + 1851: uint16(21940), + 1852: uint16(837), + 1853: uint16(21709), + 1854: uint16(3014), + 1855: uint16(22301), + 1856: uint16(37469), + 1857: uint16(38644), + 1858: uint16(37734), + 1859: uint16(22493), + 1860: uint16(22413), + 1861: uint16(22399), + 1862: uint16(13886), + 1863: uint16(22731), + 1864: uint16(23193), + 1865: uint16(35398), + 1866: uint16(5882), + 1867: uint16(5999), + 1868: uint16(5904), + 1869: uint16(23084), + 1870: uint16(22968), + 1871: uint16(37519), + 1872: uint16(23166), + 1873: uint16(23247), + 1874: uint16(23058), + 1875: uint16(22854), + 1876: uint16(6643), + 1877: uint16(6241), + 1878: uint16(17045), + 1879: uint16(14069), + 1880: uint16(27909), + 1881: uint16(29763), + 1882: uint16(23073), + 1883: uint16(24195), + 1884: uint16(23169), + 1885: uint16(35799), + 1886: uint16(1043), + 1887: uint16(37856), + 1888: uint16(29836), + 1889: uint16(4867), + 1890: uint16(28933), + 1891: uint16(18802), + 1892: uint16(37896), + 1893: uint16(35323), + 1894: uint16(37821), + 1895: uint16(14240), + 1896: uint16(23582), + 1897: uint16(23710), + 1898: uint16(24158), + 1899: uint16(24136), + 1900: uint16(6550), + 1901: uint16(6524), + 1902: uint16(15086), + 1903: uint16(24269), + 1904: uint16(23375), + 1905: uint16(6403), + 1906: uint16(6404), + 1907: uint16(14081), + 1908: uint16(6304), + 1909: uint16(14045), + 1910: uint16(5886), + 1911: uint16(14035), + 1912: uint16(33066), + 1913: uint16(35399), + 1914: uint16(7610), + 1915: uint16(13426), + 1916: uint16(35240), + 1917: uint16(24332), + 1918: uint16(24334), + 1919: uint16(6439), + 1920: uint16(6059), + 1921: uint16(23147), + 1922: uint16(5947), + 1923: uint16(23364), + 1924: uint16(34324), + 1925: uint16(30205), + 1926: uint16(34912), + 1927: uint16(24702), + 1928: uint16(10336), + 1929: uint16(9771), + 1930: uint16(24539), + 1931: uint16(16056), + 1932: uint16(9647), + 1933: uint16(9662), + 1934: uint16(37000), + 1935: uint16(28531), + 1936: uint16(25024), + 1937: uint16(62), + 1938: uint16(70), + 1939: uint16(9755), + 1940: uint16(24985), + 1941: uint16(24984), + 1942: uint16(24693), + 1943: uint16(11419), + 1944: uint16(11527), + 1945: uint16(18132), + 1946: uint16(37197), + 1947: uint16(25713), + 1948: uint16(18021), + 1949: uint16(11114), + 1950: uint16(14889), + 1951: uint16(11042), + 1952: uint16(13392), + 1953: uint16(39146), + 1954: uint16(11896), + 1955: uint16(25399), + 1956: uint16(42075), + 1957: uint16(25782), + 1958: uint16(25393), + 1959: uint16(25553), + 1960: uint16(18915), + 1961: uint16(11623), + 1962: uint16(25252), + 1963: uint16(11425), + 1964: uint16(25659), + 1965: uint16(25963), + 1966: uint16(26994), + 1967: uint16(15348), + 1968: uint16(12430), + 1969: uint16(12973), + 1970: uint16(18825), + 1971: uint16(12971), + 1972: uint16(21773), + 1973: uint16(13024), + 1974: uint16(6361), + 1975: uint16(37951), + 1976: uint16(26318), + 1977: uint16(12937), + 1978: uint16(12723), + 1979: uint16(15072), + 1980: uint16(16784), + 1981: uint16(21892), + 1982: uint16(35618), + 1983: uint16(21903), + 1984: uint16(5884), + 1985: uint16(21851), + 1986: uint16(21541), + 1987: uint16(30958), + 1988: uint16(12547), + 1989: uint16(6186), + 1990: uint16(12852), + 1991: uint16(13412), + 1992: uint16(12815), + 1993: uint16(12674), + 1994: uint16(17097), + 1995: uint16(26254), + 1996: uint16(27940), + 1997: uint16(26219), + 1998: uint16(19347), + 1999: uint16(26160), + 2000: uint16(30832), + 2001: uint16(7659), + 2002: uint16(26211), + 2003: uint16(13010), + 2004: uint16(13025), + 2005: uint16(26142), + 2006: uint16(22642), + 2007: uint16(14545), + 2008: uint16(14394), + 2009: uint16(14268), + 2010: uint16(15257), + 2011: uint16(14242), + 2012: uint16(13310), + 2013: uint16(29904), + 2014: uint16(15254), + 2015: uint16(26511), + 2016: uint16(17962), + 2017: uint16(26806), + 2018: uint16(26654), + 2019: uint16(15300), + 2020: uint16(27326), + 2021: uint16(14435), + 2022: uint16(14293), + 2023: uint16(17543), + 2024: uint16(27187), + 2025: uint16(27218), + 2026: uint16(27337), + 2027: uint16(27397), + 2028: uint16(6418), + 2029: uint16(25873), + 2030: uint16(26776), + 2031: uint16(27212), + 2032: uint16(15319), + 2033: uint16(27258), + 2034: uint16(27479), + 2035: uint16(16320), + 2036: uint16(15514), + 2037: uint16(37792), + 2038: uint16(37618), + 2039: uint16(35818), + 2040: uint16(35531), + 2041: uint16(37513), + 2042: uint16(32798), + 2043: uint16(35292), + 2044: uint16(37991), + 2045: uint16(28069), + 2046: uint16(28427), + 2047: uint16(18924), + 2049: uint16(16255), + 2050: uint16(15759), + 2051: uint16(28164), + 2052: uint16(16444), + 2053: uint16(23101), + 2054: uint16(28170), + 2055: uint16(22599), + 2056: uint16(27940), + 2057: uint16(30786), + 2058: uint16(28987), + 2059: uint16(17178), + 2060: uint16(17014), + 2061: uint16(28913), + 2062: uint16(29264), + 2063: uint16(29319), + 2064: uint16(29332), + 2065: uint16(18319), + 2066: uint16(18213), + 2067: uint16(20857), + 2068: uint16(19108), + 2069: uint16(1515), + 2070: uint16(29818), + 2071: uint16(16120), + 2072: uint16(13919), + 2073: uint16(19018), + 2074: uint16(18711), + 2075: uint16(24545), + 2076: uint16(16134), + 2077: uint16(16049), + 2078: uint16(19167), + 2079: uint16(35875), + 2080: uint16(16181), + 2081: uint16(24743), + 2082: uint16(16115), + 2083: uint16(29900), + 2084: uint16(29756), + 2085: uint16(37767), + 2086: uint16(29751), + 2087: uint16(17567), + 2088: uint16(28138), + 2089: uint16(17745), + 2090: uint16(30083), + 2091: uint16(16227), + 2092: uint16(19673), + 2093: uint16(19718), + 2094: uint16(16216), + 2095: uint16(30037), + 2096: uint16(30323), + 2097: uint16(42438), + 2098: uint16(15129), + 2099: uint16(29800), + 2100: uint16(35532), + 2101: uint16(18859), + 2102: uint16(18830), + 2103: uint16(15099), + 2104: uint16(15821), + 2105: uint16(19022), + 2106: uint16(16127), + 2107: uint16(18885), + 2108: uint16(18675), + 2109: uint16(37370), + 2110: uint16(22322), + 2111: uint16(37698), + 2112: uint16(35555), + 2113: uint16(6244), + 2114: uint16(20703), + 2115: uint16(21025), + 2116: uint16(20967), + 2117: uint16(30584), + 2118: uint16(12850), + 2119: uint16(30478), + 2120: uint16(30479), + 2121: uint16(30587), + 2122: uint16(18071), + 2123: uint16(14209), + 2124: uint16(14942), + 2125: uint16(18672), + 2126: uint16(29752), + 2127: uint16(29851), + 2128: uint16(16063), + 2129: uint16(19130), + 2130: uint16(19143), + 2131: uint16(16584), + 2132: uint16(19094), + 2133: uint16(25006), + 2134: uint16(37639), + 2135: uint16(21889), + 2136: uint16(30750), + 2137: uint16(30861), + 2138: uint16(30856), + 2139: uint16(30930), + 2140: uint16(29648), + 2141: uint16(31065), + 2142: uint16(30529), + 2143: uint16(22243), + 2144: uint16(16654), + 2146: uint16(33942), + 2147: uint16(31141), + 2148: uint16(27181), + 2149: uint16(16122), + 2150: uint16(31290), + 2151: uint16(31220), + 2152: uint16(16750), + 2153: uint16(5862), + 2154: uint16(16690), + 2155: uint16(37429), + 2156: uint16(31217), + 2157: uint16(3404), + 2158: uint16(18828), + 2159: uint16(665), + 2160: uint16(15802), + 2161: uint16(5998), + 2162: uint16(13719), + 2163: uint16(21867), + 2164: uint16(13680), + 2165: uint16(13994), + 2166: uint16(468), + 2167: uint16(3085), + 2168: uint16(31458), + 2169: uint16(23129), + 2170: uint16(9973), + 2171: uint16(23215), + 2172: uint16(23196), + 2173: uint16(23053), + 2174: uint16(603), + 2175: uint16(30960), + 2176: uint16(23082), + 2177: uint16(23494), + 2178: uint16(31486), + 2179: uint16(16889), + 2180: uint16(31837), + 2181: uint16(31853), + 2182: uint16(16913), + 2183: uint16(23475), + 2184: uint16(24252), + 2185: uint16(24230), + 2186: uint16(31949), + 2187: uint16(18937), + 2188: uint16(6064), + 2189: uint16(31886), + 2190: uint16(31868), + 2191: uint16(31918), + 2192: uint16(27314), + 2193: uint16(32220), + 2194: uint16(32263), + 2195: uint16(32211), + 2196: uint16(32590), + 2197: uint16(25185), + 2198: uint16(24924), + 2199: uint16(31560), + 2200: uint16(32151), + 2201: uint16(24194), + 2202: uint16(17002), + 2203: uint16(27509), + 2204: uint16(2326), + 2205: uint16(26582), + 2206: uint16(78), + 2207: uint16(13775), + 2208: uint16(22468), + 2209: uint16(25618), + 2210: uint16(25592), + 2211: uint16(18786), + 2212: uint16(32733), + 2213: uint16(31527), + 2214: uint16(2092), + 2215: uint16(23273), + 2216: uint16(23875), + 2217: uint16(31500), + 2218: uint16(24078), + 2219: uint16(39398), + 2220: uint16(34373), + 2221: uint16(39523), + 2222: uint16(27164), + 2223: uint16(13375), + 2224: uint16(14818), + 2225: uint16(18935), + 2226: uint16(26029), + 2227: uint16(39455), + 2228: uint16(26016), + 2229: uint16(33920), + 2230: uint16(28967), + 2231: uint16(27857), + 2232: uint16(17642), + 2233: uint16(33079), + 2234: uint16(17410), + 2235: uint16(32966), + 2236: uint16(33033), + 2237: uint16(33090), + 2238: uint16(26548), + 2239: uint16(39107), + 2240: uint16(27202), + 2241: uint16(33378), + 2242: uint16(33381), + 2243: uint16(27217), + 2244: uint16(33875), + 2245: uint16(28071), + 2246: uint16(34320), + 2247: uint16(29211), + 2248: uint16(23174), + 2249: uint16(16767), + 2250: uint16(6208), + 2251: uint16(23339), + 2252: uint16(6305), + 2253: uint16(23268), + 2254: uint16(6360), + 2255: uint16(34464), + 2256: uint16(63932), + 2257: uint16(15759), + 2258: uint16(34861), + 2259: uint16(29730), + 2260: uint16(23042), + 2261: uint16(34926), + 2262: uint16(20293), + 2263: uint16(34951), + 2264: uint16(35007), + 2265: uint16(35046), + 2266: uint16(35173), + 2267: uint16(35149), + 2268: uint16(22147), + 2269: uint16(35156), + 2270: uint16(30597), + 2271: uint16(30596), + 2272: uint16(35829), + 2273: uint16(35801), + 2274: uint16(35740), + 2275: uint16(35321), + 2276: uint16(16045), + 2277: uint16(33955), + 2278: uint16(18165), + 2279: uint16(18127), + 2280: uint16(14322), + 2281: uint16(35389), + 2282: uint16(35356), + 2283: uint16(37960), + 2284: uint16(24397), + 2285: uint16(37419), + 2286: uint16(17028), + 2287: uint16(26068), + 2288: uint16(28969), + 2289: uint16(28868), + 2290: uint16(6213), + 2291: uint16(40301), + 2292: uint16(35999), + 2293: uint16(36073), + 2294: uint16(32220), + 2295: uint16(22938), + 2296: uint16(30659), + 2297: uint16(23024), + 2298: uint16(17262), + 2299: uint16(14036), + 2300: uint16(36394), + 2301: uint16(36519), + 2302: uint16(19465), + 2303: uint16(36656), + 2304: uint16(36682), + 2305: uint16(17140), + 2306: uint16(27736), + 2307: uint16(28603), + 2308: uint16(8993), + 2309: uint16(18587), + 2310: uint16(28537), + 2311: uint16(28299), + 2312: uint16(6106), + 2313: uint16(39913), + 2314: uint16(14005), + 2315: uint16(18735), + 2316: uint16(37051), + 2318: uint16(21873), + 2319: uint16(18694), + 2320: uint16(37307), + 2321: uint16(37892), + 2322: uint16(35403), + 2323: uint16(16482), + 2324: uint16(35580), + 2325: uint16(37927), + 2326: uint16(35869), + 2327: uint16(35899), + 2328: uint16(34021), + 2329: uint16(35371), + 2330: uint16(38297), + 2331: uint16(38311), + 2332: uint16(38295), + 2333: uint16(38294), + 2334: uint16(36148), + 2335: uint16(29765), + 2336: uint16(16066), + 2337: uint16(18687), + 2338: uint16(19010), + 2339: uint16(17386), + 2340: uint16(16103), + 2341: uint16(12837), + 2342: uint16(38543), + 2343: uint16(36583), + 2344: uint16(36454), + 2345: uint16(36453), + 2346: uint16(16076), + 2347: uint16(18925), + 2348: uint16(19064), + 2349: uint16(16366), + 2350: uint16(29714), + 2351: uint16(29803), + 2352: uint16(16124), + 2353: uint16(38721), + 2354: uint16(37040), + 2355: uint16(26695), + 2356: uint16(18973), + 2357: uint16(37011), + 2358: uint16(22495), + 2360: uint16(37736), + 2361: uint16(35209), + 2362: uint16(35878), + 2363: uint16(35631), + 2364: uint16(25534), + 2365: uint16(37562), + 2366: uint16(23313), + 2367: uint16(35689), + 2368: uint16(18748), + 2369: uint16(29689), + 2370: uint16(16923), + 2371: uint16(38811), + 2372: uint16(38769), + 2373: uint16(39224), + 2374: uint16(3878), + 2375: uint16(24001), + 2376: uint16(35781), + 2377: uint16(19122), + 2378: uint16(38943), + 2379: uint16(38106), + 2380: uint16(37622), + 2381: uint16(38359), + 2382: uint16(37349), + 2383: uint16(17600), + 2384: uint16(35664), + 2385: uint16(19047), + 2386: uint16(35684), + 2387: uint16(39132), + 2388: uint16(35397), + 2389: uint16(16128), + 2390: uint16(37418), + 2391: uint16(18725), + 2392: uint16(33812), + 2393: uint16(39227), + 2394: uint16(39245), + 2395: uint16(31494), + 2396: uint16(15869), + 2397: uint16(39323), + 2398: uint16(19311), + 2399: uint16(39338), + 2400: uint16(39516), + 2401: uint16(35685), + 2402: uint16(22728), + 2403: uint16(27279), + 2404: uint16(39457), + 2405: uint16(23294), + 2406: uint16(39471), + 2407: uint16(39153), + 2408: uint16(19344), + 2409: uint16(39240), + 2410: uint16(39356), + 2411: uint16(19389), + 2412: uint16(19351), + 2413: uint16(37757), + 2414: uint16(22642), + 2415: uint16(4866), + 2416: uint16(22562), + 2417: uint16(18872), + 2418: uint16(5352), + 2419: uint16(30788), + 2420: uint16(10015), + 2421: uint16(15800), + 2422: uint16(26821), + 2423: uint16(15741), + 2424: uint16(37976), + 2425: uint16(14631), + 2426: uint16(24912), + 2427: uint16(10113), + 2428: uint16(10603), + 2429: uint16(24839), + 2430: uint16(40015), + 2431: uint16(40019), + 2432: uint16(40059), + 2433: uint16(39989), + 2434: uint16(39952), + 2435: uint16(39807), + 2436: uint16(39887), + 2437: uint16(40493), + 2438: uint16(39839), + 2439: uint16(41461), + 2440: uint16(41214), + 2441: uint16(40225), + 2442: uint16(19630), + 2443: uint16(16644), + 2444: uint16(40472), + 2445: uint16(19632), + 2446: uint16(40204), + 2447: uint16(41396), + 2448: uint16(41197), + 2449: uint16(41203), + 2450: uint16(39215), + 2451: uint16(40357), + 2452: uint16(33981), + 2453: uint16(28178), + 2454: uint16(28639), + 2455: uint16(27522), + 2456: uint16(34300), + 2457: uint16(17715), + 2458: uint16(28068), + 2459: uint16(28292), + 2460: uint16(28144), + 2461: uint16(33824), + 2462: uint16(34286), + 2463: uint16(28160), + 2464: uint16(14295), + 2465: uint16(24676), + 2466: uint16(31202), + 2467: uint16(13724), + 2468: uint16(13888), + 2469: uint16(18733), + 2470: uint16(18910), + 2471: uint16(15714), + 2472: uint16(37851), + 2473: uint16(37566), + 2474: uint16(37704), + 2475: uint16(703), + 2476: uint16(30905), + 2477: uint16(37495), + 2478: uint16(37965), + 2479: uint16(20452), + 2480: uint16(13376), + 2481: uint16(36964), + 2482: uint16(21853), + 2483: uint16(30781), + 2484: uint16(30804), + 2485: uint16(30902), + 2486: uint16(30795), + 2487: uint16(5975), + 2488: uint16(12745), + 2489: uint16(18753), + 2490: uint16(13978), + 2491: uint16(20338), + 2492: uint16(28634), + 2493: uint16(28633), + 2495: uint16(28702), + 2496: uint16(21524), + 2497: uint16(16821), + 2498: uint16(22459), + 2499: uint16(22771), + 2500: uint16(22410), + 2501: uint16(40214), + 2502: uint16(22487), + 2503: uint16(28980), + 2504: uint16(13487), + 2505: uint16(16812), + 2506: uint16(29163), + 2507: uint16(27712), + 2508: uint16(20375), + 2510: uint16(6069), + 2511: uint16(35401), + 2512: uint16(24844), + 2513: uint16(23246), + 2514: uint16(23051), + 2515: uint16(17084), + 2516: uint16(17544), + 2517: uint16(14124), + 2518: uint16(19323), + 2519: uint16(35324), + 2520: uint16(37819), + 2521: uint16(37816), + 2522: uint16(6358), + 2523: uint16(3869), + 2524: uint16(33906), + 2525: uint16(27840), + 2526: uint16(5139), + 2527: uint16(17146), + 2528: uint16(11302), + 2529: uint16(17345), + 2530: uint16(22932), + 2531: uint16(15799), + 2532: uint16(26433), + 2533: uint16(32168), + 2534: uint16(24923), + 2535: uint16(24740), + 2536: uint16(18873), + 2537: uint16(18827), + 2538: uint16(35322), + 2539: uint16(37605), + 2540: uint16(29666), + 2541: uint16(16105), + 2542: uint16(29876), + 2543: uint16(35683), + 2544: uint16(6303), + 2545: uint16(16097), + 2546: uint16(19123), + 2547: uint16(27352), + 2548: uint16(29683), + 2549: uint16(29691), + 2550: uint16(16086), + 2551: uint16(19006), + 2552: uint16(19092), + 2553: uint16(6105), + 2554: uint16(19046), + 2555: uint16(935), + 2556: uint16(5156), + 2557: uint16(18917), + 2558: uint16(29768), + 2559: uint16(18710), + 2560: uint16(28837), + 2561: uint16(18806), + 2562: uint16(37508), + 2563: uint16(29670), + 2564: uint16(37727), + 2565: uint16(1278), + 2566: uint16(37681), + 2567: uint16(35534), + 2568: uint16(35350), + 2569: uint16(37766), + 2570: uint16(35815), + 2571: uint16(21973), + 2572: uint16(18741), + 2573: uint16(35458), + 2574: uint16(29035), + 2575: uint16(18755), + 2576: uint16(3327), + 2577: uint16(22180), + 2578: uint16(1562), + 2579: uint16(3051), + 2580: uint16(3256), + 2581: uint16(21762), + 2582: uint16(31172), + 2583: uint16(6138), + 2584: uint16(32254), + 2585: uint16(5826), + 2586: uint16(19024), + 2587: uint16(6226), + 2588: uint16(17710), + 2589: uint16(37889), + 2590: uint16(14090), + 2591: uint16(35520), + 2592: uint16(18861), + 2593: uint16(22960), + 2594: uint16(6335), + 2595: uint16(6275), + 2596: uint16(29828), + 2597: uint16(23201), + 2598: uint16(14050), + 2599: uint16(15707), + 2600: uint16(14000), + 2601: uint16(37471), + 2602: uint16(23161), + 2603: uint16(35457), + 2604: uint16(6242), + 2605: uint16(37748), + 2606: uint16(15565), + 2607: uint16(2740), + 2608: uint16(19094), + 2609: uint16(14730), + 2610: uint16(20724), + 2611: uint16(15721), + 2612: uint16(15692), + 2613: uint16(5020), + 2614: uint16(29045), + 2615: uint16(17147), + 2616: uint16(33304), + 2617: uint16(28175), + 2618: uint16(37092), + 2619: uint16(17643), + 2620: uint16(27991), + 2621: uint16(32335), + 2622: uint16(28775), + 2623: uint16(27823), + 2624: uint16(15574), + 2625: uint16(16365), + 2626: uint16(15917), + 2627: uint16(28162), + 2628: uint16(28428), + 2629: uint16(15727), + 2630: uint16(1013), + 2631: uint16(30033), + 2632: uint16(14012), + 2633: uint16(13512), + 2634: uint16(18048), + 2635: uint16(16090), + 2636: uint16(18545), + 2637: uint16(22980), + 2638: uint16(37486), + 2639: uint16(18750), + 2640: uint16(36673), + 2641: uint16(35868), + 2642: uint16(27584), + 2643: uint16(22546), + 2644: uint16(22472), + 2645: uint16(14038), + 2646: uint16(5202), + 2647: uint16(28926), + 2648: uint16(17250), + 2649: uint16(19057), + 2650: uint16(12259), + 2651: uint16(4784), + 2652: uint16(9149), + 2653: uint16(26809), + 2654: uint16(26983), + 2655: uint16(5016), + 2656: uint16(13541), + 2657: uint16(31732), + 2658: uint16(14047), + 2659: uint16(35459), + 2660: uint16(14294), + 2661: uint16(13306), + 2662: uint16(19615), + 2663: uint16(27162), + 2664: uint16(13997), + 2665: uint16(27831), + 2666: uint16(33854), + 2667: uint16(17631), + 2668: uint16(17614), + 2669: uint16(27942), + 2670: uint16(27985), + 2671: uint16(27778), + 2672: uint16(28638), + 2673: uint16(28439), + 2674: uint16(28937), + 2675: uint16(33597), + 2676: uint16(5946), + 2677: uint16(33773), + 2678: uint16(27776), + 2679: uint16(28755), + 2680: uint16(6107), + 2681: uint16(22921), + 2682: uint16(23170), + 2683: uint16(6067), + 2684: uint16(23137), + 2685: uint16(23153), + 2686: uint16(6405), + 2687: uint16(16892), + 2688: uint16(14125), + 2689: uint16(23023), + 2690: uint16(5948), + 2691: uint16(14023), + 2692: uint16(29070), + 2693: uint16(37776), + 2694: uint16(26266), + 2695: uint16(17061), + 2696: uint16(23150), + 2697: uint16(23083), + 2698: uint16(17043), + 2699: uint16(27179), + 2700: uint16(16121), + 2701: uint16(30518), + 2702: uint16(17499), + 2703: uint16(17098), + 2704: uint16(28957), + 2705: uint16(16985), + 2706: uint16(35297), + 2707: uint16(20400), + 2708: uint16(27944), + 2709: uint16(23746), + 2710: uint16(17614), + 2711: uint16(32333), + 2712: uint16(17341), + 2713: uint16(27148), + 2714: uint16(16982), + 2715: uint16(4868), + 2716: uint16(28838), + 2717: uint16(28979), + 2718: uint16(17385), + 2719: uint16(15781), + 2720: uint16(27871), + 2721: uint16(63525), + 2722: uint16(19023), + 2723: uint16(32357), + 2724: uint16(23019), + 2725: uint16(23855), + 2726: uint16(15859), + 2727: uint16(24412), + 2728: uint16(19037), + 2729: uint16(6111), + 2730: uint16(32164), + 2731: uint16(33830), + 2732: uint16(21637), + 2733: uint16(15098), + 2734: uint16(13056), + 2735: uint16(532), + 2736: uint16(22398), + 2737: uint16(2261), + 2738: uint16(1561), + 2739: uint16(16357), + 2740: uint16(8094), + 2741: uint16(41654), + 2742: uint16(28675), + 2743: uint16(37211), + 2744: uint16(23920), + 2745: uint16(29583), + 2746: uint16(31955), + 2747: uint16(35417), + 2748: uint16(37920), + 2749: uint16(20424), + 2750: uint16(32743), + 2751: uint16(29389), + 2752: uint16(29456), + 2753: uint16(31476), + 2754: uint16(29496), + 2755: uint16(29497), + 2756: uint16(22262), + 2757: uint16(29505), + 2758: uint16(29512), + 2759: uint16(16041), + 2760: uint16(31512), + 2761: uint16(36972), + 2762: uint16(29173), + 2763: uint16(18674), + 2764: uint16(29665), + 2765: uint16(33270), + 2766: uint16(16074), + 2767: uint16(30476), + 2768: uint16(16081), + 2769: uint16(27810), + 2770: uint16(22269), + 2771: uint16(29721), + 2772: uint16(29726), + 2773: uint16(29727), + 2774: uint16(16098), + 2775: uint16(16112), + 2776: uint16(16116), + 2777: uint16(16122), + 2778: uint16(29907), + 2779: uint16(16142), + 2780: uint16(16211), + 2781: uint16(30018), + 2782: uint16(30061), + 2783: uint16(30066), + 2784: uint16(30093), + 2785: uint16(16252), + 2786: uint16(30152), + 2787: uint16(30172), + 2788: uint16(16320), + 2789: uint16(30285), + 2790: uint16(16343), + 2791: uint16(30324), + 2792: uint16(16348), + 2793: uint16(30330), + 2794: uint16(20316), + 2795: uint16(29064), + 2796: uint16(22051), + 2797: uint16(35200), + 2798: uint16(22633), + 2799: uint16(16413), + 2800: uint16(30531), + 2801: uint16(16441), + 2802: uint16(26465), + 2803: uint16(16453), + 2804: uint16(13787), + 2805: uint16(30616), + 2806: uint16(16490), + 2807: uint16(16495), + 2808: uint16(23646), + 2809: uint16(30654), + 2810: uint16(30667), + 2811: uint16(22770), + 2812: uint16(30744), + 2813: uint16(28857), + 2814: uint16(30748), + 2815: uint16(16552), + 2816: uint16(30777), + 2817: uint16(30791), + 2818: uint16(30801), + 2819: uint16(30822), + 2820: uint16(33864), + 2821: uint16(21813), + 2822: uint16(31027), + 2823: uint16(26627), + 2824: uint16(31026), + 2825: uint16(16643), + 2826: uint16(16649), + 2827: uint16(31121), + 2828: uint16(31129), + 2829: uint16(36795), + 2830: uint16(31238), + 2831: uint16(36796), + 2832: uint16(16743), + 2833: uint16(31377), + 2834: uint16(16818), + 2835: uint16(31420), + 2836: uint16(33401), + 2837: uint16(16836), + 2838: uint16(31439), + 2839: uint16(31451), + 2840: uint16(16847), + 2841: uint16(20001), + 2842: uint16(31586), + 2843: uint16(31596), + 2844: uint16(31611), + 2845: uint16(31762), + 2846: uint16(31771), + 2847: uint16(16992), + 2848: uint16(17018), + 2849: uint16(31867), + 2850: uint16(31900), + 2851: uint16(17036), + 2852: uint16(31928), + 2853: uint16(17044), + 2854: uint16(31981), + 2855: uint16(36755), + 2856: uint16(28864), + 2857: uint16(3279), + 2858: uint16(32207), + 2859: uint16(32212), + 2860: uint16(32208), + 2861: uint16(32253), + 2862: uint16(32686), + 2863: uint16(32692), + 2864: uint16(29343), + 2865: uint16(17303), + 2866: uint16(32800), + 2867: uint16(32805), + 2868: uint16(31545), + 2869: uint16(32814), + 2870: uint16(32817), + 2871: uint16(32852), + 2872: uint16(15820), + 2873: uint16(22452), + 2874: uint16(28832), + 2875: uint16(32951), + 2876: uint16(33001), + 2877: uint16(17389), + 2878: uint16(33036), + 2879: uint16(29482), + 2880: uint16(33038), + 2881: uint16(33042), + 2882: uint16(30048), + 2883: uint16(33044), + 2884: uint16(17409), + 2885: uint16(15161), + 2886: uint16(33110), + 2887: uint16(33113), + 2888: uint16(33114), + 2889: uint16(17427), + 2890: uint16(22586), + 2891: uint16(33148), + 2892: uint16(33156), + 2893: uint16(17445), + 2894: uint16(33171), + 2895: uint16(17453), + 2896: uint16(33189), + 2897: uint16(22511), + 2898: uint16(33217), + 2899: uint16(33252), + 2900: uint16(33364), + 2901: uint16(17551), + 2902: uint16(33446), + 2903: uint16(33398), + 2904: uint16(33482), + 2905: uint16(33496), + 2906: uint16(33535), + 2907: uint16(17584), + 2908: uint16(33623), + 2909: uint16(38505), + 2910: uint16(27018), + 2911: uint16(33797), + 2912: uint16(28917), + 2913: uint16(33892), + 2914: uint16(24803), + 2915: uint16(33928), + 2916: uint16(17668), + 2917: uint16(33982), + 2918: uint16(34017), + 2919: uint16(34040), + 2920: uint16(34064), + 2921: uint16(34104), + 2922: uint16(34130), + 2923: uint16(17723), + 2924: uint16(34159), + 2925: uint16(34160), + 2926: uint16(34272), + 2927: uint16(17783), + 2928: uint16(34418), + 2929: uint16(34450), + 2930: uint16(34482), + 2931: uint16(34543), + 2932: uint16(38469), + 2933: uint16(34699), + 2934: uint16(17926), + 2935: uint16(17943), + 2936: uint16(34990), + 2937: uint16(35071), + 2938: uint16(35108), + 2939: uint16(35143), + 2940: uint16(35217), + 2941: uint16(31079), + 2942: uint16(35369), + 2943: uint16(35384), + 2944: uint16(35476), + 2945: uint16(35508), + 2946: uint16(35921), + 2947: uint16(36052), + 2948: uint16(36082), + 2949: uint16(36124), + 2950: uint16(18328), + 2951: uint16(22623), + 2952: uint16(36291), + 2953: uint16(18413), + 2954: uint16(20206), + 2955: uint16(36410), + 2956: uint16(21976), + 2957: uint16(22356), + 2958: uint16(36465), + 2959: uint16(22005), + 2960: uint16(36528), + 2961: uint16(18487), + 2962: uint16(36558), + 2963: uint16(36578), + 2964: uint16(36580), + 2965: uint16(36589), + 2966: uint16(36594), + 2967: uint16(36791), + 2968: uint16(36801), + 2969: uint16(36810), + 2970: uint16(36812), + 2971: uint16(36915), + 2972: uint16(39364), + 2973: uint16(18605), + 2974: uint16(39136), + 2975: uint16(37395), + 2976: uint16(18718), + 2977: uint16(37416), + 2978: uint16(37464), + 2979: uint16(37483), + 2980: uint16(37553), + 2981: uint16(37550), + 2982: uint16(37567), + 2983: uint16(37603), + 2984: uint16(37611), + 2985: uint16(37619), + 2986: uint16(37620), + 2987: uint16(37629), + 2988: uint16(37699), + 2989: uint16(37764), + 2990: uint16(37805), + 2991: uint16(18757), + 2992: uint16(18769), + 2993: uint16(40639), + 2994: uint16(37911), + 2995: uint16(21249), + 2996: uint16(37917), + 2997: uint16(37933), + 2998: uint16(37950), + 2999: uint16(18794), + 3000: uint16(37972), + 3001: uint16(38009), + 3002: uint16(38189), + 3003: uint16(38306), + 3004: uint16(18855), + 3005: uint16(38388), + 3006: uint16(38451), + 3007: uint16(18917), + 3008: uint16(26528), + 3009: uint16(18980), + 3010: uint16(38720), + 3011: uint16(18997), + 3012: uint16(38834), + 3013: uint16(38850), + 3014: uint16(22100), + 3015: uint16(19172), + 3016: uint16(24808), + 3017: uint16(39097), + 3018: uint16(19225), + 3019: uint16(39153), + 3020: uint16(22596), + 3021: uint16(39182), + 3022: uint16(39193), + 3023: uint16(20916), + 3024: uint16(39196), + 3025: uint16(39223), + 3026: uint16(39234), + 3027: uint16(39261), + 3028: uint16(39266), + 3029: uint16(19312), + 3030: uint16(39365), + 3031: uint16(19357), + 3032: uint16(39484), + 3033: uint16(39695), + 3034: uint16(31363), + 3035: uint16(39785), + 3036: uint16(39809), + 3037: uint16(39901), + 3038: uint16(39921), + 3039: uint16(39924), + 3040: uint16(19565), + 3041: uint16(39968), + 3042: uint16(14191), + 3043: uint16(7106), + 3044: uint16(40265), + 3045: uint16(39994), + 3046: uint16(40702), + 3047: uint16(22096), + 3048: uint16(40339), + 3049: uint16(40381), + 3050: uint16(40384), + 3051: uint16(40444), + 3052: uint16(38134), + 3053: uint16(36790), + 3054: uint16(40571), + 3055: uint16(40620), + 3056: uint16(40625), + 3057: uint16(40637), + 3058: uint16(40646), + 3059: uint16(38108), + 3060: uint16(40674), + 3061: uint16(40689), + 3062: uint16(40696), + 3063: uint16(31432), + 3064: uint16(40772), + 3065: uint16(148), + 3066: uint16(695), + 3067: uint16(928), + 3068: uint16(26906), + 3069: uint16(38083), + 3070: uint16(22956), + 3071: uint16(1239), + 3072: uint16(22592), + 3073: uint16(38081), + 3074: uint16(14265), + 3075: uint16(1493), + 3076: uint16(1557), + 3077: uint16(1654), + 3078: uint16(5818), + 3079: uint16(22359), + 3080: uint16(29043), + 3081: uint16(2754), + 3082: uint16(2765), + 3083: uint16(3007), + 3084: uint16(21610), + 3085: uint16(63547), + 3086: uint16(3019), + 3087: uint16(21662), + 3088: uint16(3067), + 3089: uint16(3131), + 3090: uint16(3155), + 3091: uint16(3173), + 3092: uint16(3196), + 3093: uint16(24807), + 3094: uint16(3213), + 3095: uint16(22138), + 3096: uint16(3253), + 3097: uint16(3293), + 3098: uint16(3309), + 3099: uint16(3439), + 3100: uint16(3506), + 3101: uint16(3528), + 3102: uint16(26965), + 3103: uint16(39983), + 3104: uint16(34725), + 3105: uint16(3588), + 3106: uint16(3598), + 3107: uint16(3799), + 3108: uint16(3984), + 3109: uint16(3885), + 3110: uint16(3699), + 3111: uint16(23584), + 3112: uint16(4028), + 3113: uint16(24075), + 3114: uint16(4188), + 3115: uint16(4175), + 3116: uint16(4214), + 3117: uint16(26398), + 3118: uint16(4219), + 3119: uint16(4232), + 3120: uint16(4246), + 3121: uint16(13895), + 3122: uint16(4287), + 3123: uint16(4307), + 3124: uint16(4399), + 3125: uint16(4411), + 3126: uint16(21348), + 3127: uint16(33965), + 3128: uint16(4835), + 3129: uint16(4981), + 3130: uint16(4918), + 3131: uint16(35713), + 3132: uint16(5495), + 3133: uint16(5657), + 3134: uint16(6083), + 3135: uint16(6087), + 3136: uint16(20088), + 3137: uint16(28859), + 3138: uint16(6189), + 3139: uint16(6506), + 3140: uint16(6701), + 3141: uint16(6725), + 3142: uint16(7210), + 3143: uint16(7280), + 3144: uint16(7340), + 3145: uint16(7880), + 3146: uint16(25283), + 3147: uint16(7893), + 3148: uint16(7957), + 3149: uint16(29080), + 3150: uint16(26709), + 3151: uint16(8261), + 3152: uint16(27113), + 3153: uint16(14024), + 3154: uint16(8828), + 3155: uint16(9175), + 3156: uint16(9210), + 3157: uint16(10026), + 3158: uint16(10353), + 3159: uint16(10575), + 3160: uint16(33533), + 3161: uint16(10599), + 3162: uint16(10643), + 3163: uint16(10965), + 3164: uint16(35237), + 3165: uint16(10984), + 3166: uint16(36768), + 3167: uint16(11022), + 3168: uint16(38840), + 3169: uint16(11071), + 3170: uint16(38983), + 3171: uint16(39613), + 3172: uint16(11340), + 3174: uint16(11400), + 3175: uint16(11447), + 3176: uint16(23528), + 3177: uint16(11528), + 3178: uint16(11538), + 3179: uint16(11703), + 3180: uint16(11669), + 3181: uint16(11842), + 3182: uint16(12148), + 3183: uint16(12236), + 3184: uint16(12339), + 3185: uint16(12390), + 3186: uint16(13087), + 3187: uint16(13278), + 3188: uint16(24497), + 3189: uint16(26184), + 3190: uint16(26303), + 3191: uint16(31353), + 3192: uint16(13671), + 3193: uint16(13811), + 3195: uint16(18874), + 3197: uint16(13850), + 3198: uint16(14102), + 3200: uint16(838), + 3201: uint16(22709), + 3202: uint16(26382), + 3203: uint16(26904), + 3204: uint16(15015), + 3205: uint16(30295), + 3206: uint16(24546), + 3207: uint16(15889), + 3208: uint16(16057), + 3209: uint16(30206), + 3210: uint16(8346), + 3211: uint16(18640), + 3212: uint16(19128), + 3213: uint16(16665), + 3214: uint16(35482), + 3215: uint16(17134), + 3216: uint16(17165), + 3217: uint16(16443), + 3218: uint16(17204), + 3219: uint16(17302), + 3220: uint16(19013), + 3221: uint16(1482), + 3222: uint16(20946), + 3223: uint16(1553), + 3224: uint16(22943), + 3225: uint16(7848), + 3226: uint16(15294), + 3227: uint16(15615), + 3228: uint16(17412), + 3229: uint16(17622), + 3230: uint16(22408), + 3231: uint16(18036), + 3232: uint16(14747), + 3233: uint16(18223), + 3234: uint16(34280), + 3235: uint16(39369), + 3236: uint16(14178), + 3237: uint16(8643), + 3238: uint16(35678), + 3239: uint16(35662), + 3241: uint16(18450), + 3242: uint16(18683), + 3243: uint16(18965), + 3244: uint16(29193), + 3245: uint16(19136), + 3246: uint16(3192), + 3247: uint16(22885), + 3248: uint16(20133), + 3249: uint16(20358), + 3250: uint16(1913), + 3251: uint16(36570), + 3252: uint16(20524), + 3253: uint16(21135), + 3254: uint16(22335), + 3255: uint16(29041), + 3256: uint16(21145), + 3257: uint16(21529), + 3258: uint16(16202), + 3259: uint16(19111), + 3260: uint16(21948), + 3261: uint16(21574), + 3262: uint16(21614), + 3263: uint16(27474), + 3265: uint16(13427), + 3266: uint16(21823), + 3267: uint16(30258), + 3268: uint16(21854), + 3269: uint16(18200), + 3270: uint16(21858), + 3271: uint16(21862), + 3272: uint16(22471), + 3273: uint16(18751), + 3274: uint16(22621), + 3275: uint16(20582), + 3276: uint16(13563), + 3277: uint16(13260), + 3279: uint16(22787), + 3280: uint16(18300), + 3281: uint16(35144), + 3282: uint16(23214), + 3283: uint16(23433), + 3284: uint16(23558), + 3285: uint16(7568), + 3286: uint16(22433), + 3287: uint16(29009), + 3289: uint16(24834), + 3290: uint16(31762), + 3291: uint16(36950), + 3292: uint16(25010), + 3293: uint16(20378), + 3294: uint16(35682), + 3295: uint16(25602), + 3296: uint16(25674), + 3297: uint16(23899), + 3298: uint16(27639), + 3300: uint16(25732), + 3301: uint16(6428), + 3302: uint16(35562), + 3303: uint16(18934), + 3304: uint16(25736), + 3305: uint16(16367), + 3306: uint16(25874), + 3307: uint16(19392), + 3308: uint16(26047), + 3309: uint16(26293), + 3310: uint16(10011), + 3311: uint16(37989), + 3312: uint16(22497), + 3313: uint16(24981), + 3314: uint16(23079), + 3315: uint16(63693), + 3317: uint16(22201), + 3318: uint16(17697), + 3319: uint16(26364), + 3320: uint16(20074), + 3321: uint16(18740), + 3322: uint16(38486), + 3323: uint16(28047), + 3324: uint16(27837), + 3325: uint16(13848), + 3326: uint16(35191), + 3327: uint16(26521), + 3328: uint16(26734), + 3329: uint16(25617), + 3330: uint16(26718), + 3332: uint16(26823), + 3333: uint16(31554), + 3334: uint16(37056), + 3335: uint16(2577), + 3336: uint16(26918), + 3338: uint16(26937), + 3339: uint16(31301), + 3341: uint16(27130), + 3342: uint16(39462), + 3343: uint16(27181), + 3344: uint16(13919), + 3345: uint16(25705), + 3346: uint16(33), + 3347: uint16(31107), + 3348: uint16(27188), + 3349: uint16(27483), + 3350: uint16(23852), + 3351: uint16(13593), + 3353: uint16(27549), + 3354: uint16(18128), + 3355: uint16(27812), + 3356: uint16(30011), + 3357: uint16(34917), + 3358: uint16(28078), + 3359: uint16(22710), + 3360: uint16(14108), + 3361: uint16(9613), + 3362: uint16(28747), + 3363: uint16(29133), + 3364: uint16(15444), + 3365: uint16(29312), + 3366: uint16(29317), + 3367: uint16(37505), + 3368: uint16(8570), + 3369: uint16(29323), + 3370: uint16(37680), + 3371: uint16(29414), + 3372: uint16(18896), + 3373: uint16(27705), + 3374: uint16(38047), + 3375: uint16(29776), + 3376: uint16(3832), + 3377: uint16(34855), + 3378: uint16(35061), + 3379: uint16(10534), + 3380: uint16(33907), + 3381: uint16(6065), + 3382: uint16(28344), + 3383: uint16(18986), + 3384: uint16(6176), + 3385: uint16(14756), + 3386: uint16(14009), + 3389: uint16(17727), + 3390: uint16(26294), + 3391: uint16(40109), + 3392: uint16(39076), + 3393: uint16(35139), + 3394: uint16(30668), + 3395: uint16(30808), + 3396: uint16(22230), + 3397: uint16(16607), + 3398: uint16(5642), + 3399: uint16(14753), + 3400: uint16(14127), + 3401: uint16(33000), + 3402: uint16(5061), + 3403: uint16(29101), + 3404: uint16(33638), + 3405: uint16(31197), + 3406: uint16(37288), + 3408: uint16(19639), + 3409: uint16(28847), + 3410: uint16(35243), + 3411: uint16(31229), + 3412: uint16(31242), + 3413: uint16(31499), + 3414: uint16(32102), + 3415: uint16(16762), + 3416: uint16(31555), + 3417: uint16(31102), + 3418: uint16(32777), + 3419: uint16(28597), + 3420: uint16(41695), + 3421: uint16(27139), + 3422: uint16(33560), + 3423: uint16(21410), + 3424: uint16(28167), + 3425: uint16(37823), + 3426: uint16(26678), + 3427: uint16(38749), + 3428: uint16(33135), + 3429: uint16(32803), + 3430: uint16(27061), + 3431: uint16(5101), + 3432: uint16(12847), + 3433: uint16(32840), + 3434: uint16(23941), + 3435: uint16(35888), + 3436: uint16(32899), + 3437: uint16(22293), + 3438: uint16(38947), + 3439: uint16(35145), + 3440: uint16(23979), + 3441: uint16(18824), + 3442: uint16(26046), + 3443: uint16(27093), + 3444: uint16(21458), + 3445: uint16(19109), + 3446: uint16(16257), + 3447: uint16(15377), + 3448: uint16(26422), + 3449: uint16(32912), + 3450: uint16(33012), + 3451: uint16(33070), + 3452: uint16(8097), + 3453: uint16(33103), + 3454: uint16(33161), + 3455: uint16(33199), + 3456: uint16(33306), + 3457: uint16(33542), + 3458: uint16(33583), + 3459: uint16(33674), + 3460: uint16(13770), + 3461: uint16(33896), + 3462: uint16(34474), + 3463: uint16(18682), + 3464: uint16(25574), + 3465: uint16(35158), + 3466: uint16(30728), + 3467: uint16(37461), + 3468: uint16(35256), + 3469: uint16(17394), + 3470: uint16(35303), + 3471: uint16(17375), + 3472: uint16(35304), + 3473: uint16(35654), + 3474: uint16(35796), + 3475: uint16(23032), + 3476: uint16(35849), + 3478: uint16(36805), + 3479: uint16(37100), + 3481: uint16(37136), + 3482: uint16(37180), + 3483: uint16(15863), + 3484: uint16(37214), + 3485: uint16(19146), + 3486: uint16(36816), + 3487: uint16(29327), + 3488: uint16(22155), + 3489: uint16(38119), + 3490: uint16(38377), + 3491: uint16(38320), + 3492: uint16(38328), + 3493: uint16(38706), + 3494: uint16(39121), + 3495: uint16(39241), + 3496: uint16(39274), + 3497: uint16(39363), + 3498: uint16(39464), + 3499: uint16(39694), + 3500: uint16(40282), + 3501: uint16(40347), + 3502: uint16(32415), + 3503: uint16(40696), + 3504: uint16(40739), + 3505: uint16(19620), + 3506: uint16(38215), + 3507: uint16(41619), + 3508: uint16(29090), + 3509: uint16(41727), + 3510: uint16(19857), + 3511: uint16(36882), + 3512: uint16(42443), + 3513: uint16(19868), + 3514: uint16(3228), + 3515: uint16(36798), + 3516: uint16(21953), + 3517: uint16(36794), + 3518: uint16(9392), + 3519: uint16(36793), + 3520: uint16(19091), + 3521: uint16(17673), + 3522: uint16(32383), + 3523: uint16(28502), + 3524: uint16(27313), + 3525: uint16(20202), + 3526: uint16(13540), + 3527: uint16(35628), + 3528: uint16(30877), + 3529: uint16(14138), + 3530: uint16(36480), + 3531: uint16(6133), + 3532: uint16(32804), + 3533: uint16(35692), + 3534: uint16(35737), + 3535: uint16(31294), + 3536: uint16(26287), + 3537: uint16(15851), + 3538: uint16(30293), + 3539: uint16(15543), + 3540: uint16(22069), + 3541: uint16(22870), + 3542: uint16(20122), + 3543: uint16(24193), + 3544: uint16(25176), + 3545: uint16(22207), + 3546: uint16(3693), + 3547: uint16(36366), + 3548: uint16(23405), + 3549: uint16(16008), + 3550: uint16(19614), + 3551: uint16(25566), + 3553: uint16(6134), + 3554: uint16(6267), + 3555: uint16(25904), + 3556: uint16(22061), + 3557: uint16(23626), + 3558: uint16(21530), + 3559: uint16(21265), + 3560: uint16(15814), + 3561: uint16(40344), + 3562: uint16(19581), + 3563: uint16(22050), + 3564: uint16(22046), + 3565: uint16(32585), + 3566: uint16(24280), + 3567: uint16(22901), + 3568: uint16(15680), + 3569: uint16(34672), + 3570: uint16(19996), + 3571: uint16(4074), + 3572: uint16(3401), + 3573: uint16(14010), + 3574: uint16(33047), + 3575: uint16(40286), + 3576: uint16(36120), + 3577: uint16(30267), + 3578: uint16(40005), + 3579: uint16(30286), + 3580: uint16(30649), + 3581: uint16(37701), + 3582: uint16(21554), + 3583: uint16(33096), + 3584: uint16(33527), + 3585: uint16(22053), + 3586: uint16(33074), + 3587: uint16(33816), + 3588: uint16(32957), + 3589: uint16(21994), + 3590: uint16(31074), + 3591: uint16(22083), + 3592: uint16(21526), + 3593: uint16(3741), + 3594: uint16(13774), + 3595: uint16(22021), + 3596: uint16(22001), + 3597: uint16(26353), + 3598: uint16(33506), + 3599: uint16(13869), + 3600: uint16(30004), + 3601: uint16(22000), + 3602: uint16(21946), + 3603: uint16(21655), + 3604: uint16(21874), + 3605: uint16(3137), + 3606: uint16(3222), + 3607: uint16(24272), + 3608: uint16(20808), + 3609: uint16(3702), + 3610: uint16(11362), + 3611: uint16(3746), + 3612: uint16(40619), + 3613: uint16(32090), + 3614: uint16(21982), + 3615: uint16(4213), + 3616: uint16(25245), + 3617: uint16(38765), + 3618: uint16(21652), + 3619: uint16(36045), + 3620: uint16(29174), + 3621: uint16(37238), + 3622: uint16(25596), + 3623: uint16(25529), + 3624: uint16(25598), + 3625: uint16(21865), + 3626: uint16(11075), + 3627: uint16(40050), + 3628: uint16(11955), + 3629: uint16(20890), + 3630: uint16(13535), + 3631: uint16(3495), + 3632: uint16(20903), + 3633: uint16(21581), + 3634: uint16(21790), + 3635: uint16(21779), + 3636: uint16(30310), + 3637: uint16(36397), + 3638: uint16(26762), + 3639: uint16(30129), + 3640: uint16(32950), + 3641: uint16(34820), + 3642: uint16(34694), + 3643: uint16(35015), + 3644: uint16(33206), + 3645: uint16(33820), + 3646: uint16(4289), + 3647: uint16(17644), + 3648: uint16(29444), + 3649: uint16(18182), + 3650: uint16(23440), + 3651: uint16(33547), + 3652: uint16(26771), + 3653: uint16(22139), + 3654: uint16(9972), + 3655: uint16(32047), + 3656: uint16(16803), + 3657: uint16(32115), + 3658: uint16(28368), + 3659: uint16(29366), + 3660: uint16(37232), + 3661: uint16(4569), + 3662: uint16(37384), + 3663: uint16(15612), + 3664: uint16(42665), + 3665: uint16(3756), + 3666: uint16(3833), + 3667: uint16(29286), + 3668: uint16(7330), + 3669: uint16(18254), + 3670: uint16(20418), + 3671: uint16(32761), + 3672: uint16(4075), + 3673: uint16(16634), + 3674: uint16(40029), + 3675: uint16(25887), + 3676: uint16(11680), + 3677: uint16(18675), + 3678: uint16(18400), + 3679: uint16(40316), + 3680: uint16(4076), + 3681: uint16(3594), + 3683: uint16(30115), + 3684: uint16(4077), + 3686: uint16(24648), + 3687: uint16(4487), + 3688: uint16(29091), + 3689: uint16(32398), + 3690: uint16(40272), + 3691: uint16(19994), + 3692: uint16(19972), + 3693: uint16(13687), + 3694: uint16(23309), + 3695: uint16(27826), + 3696: uint16(21351), + 3697: uint16(13996), + 3698: uint16(14812), + 3699: uint16(21373), + 3700: uint16(13989), + 3701: uint16(17944), + 3702: uint16(22682), + 3703: uint16(19310), + 3704: uint16(33325), + 3705: uint16(21579), + 3706: uint16(22442), + 3707: uint16(23189), + 3708: uint16(2425), + 3710: uint16(14930), + 3711: uint16(9317), + 3712: uint16(29556), + 3713: uint16(40620), + 3714: uint16(19721), + 3715: uint16(39917), + 3716: uint16(15614), + 3717: uint16(40752), + 3718: uint16(19547), + 3719: uint16(20393), + 3720: uint16(38302), + 3721: uint16(40926), + 3722: uint16(33884), + 3723: uint16(15798), + 3724: uint16(29362), + 3725: uint16(26547), + 3726: uint16(14112), + 3727: uint16(25390), + 3728: uint16(32037), + 3729: uint16(16119), + 3730: uint16(15916), + 3731: uint16(14890), + 3732: uint16(36872), + 3733: uint16(21196), + 3734: uint16(15988), + 3735: uint16(13946), + 3736: uint16(17897), + 3737: uint16(1166), + 3738: uint16(30272), + 3739: uint16(23280), + 3740: uint16(3766), + 3741: uint16(30842), + 3742: uint16(32558), + 3743: uint16(22695), + 3744: uint16(16575), + 3745: uint16(22140), + 3746: uint16(39819), + 3747: uint16(23924), + 3748: uint16(30292), + 3749: uint16(42036), + 3750: uint16(40581), + 3751: uint16(19681), + 3753: uint16(14331), + 3754: uint16(24857), + 3755: uint16(12506), + 3756: uint16(17394), + 3758: uint16(22109), + 3759: uint16(4777), + 3760: uint16(22439), + 3761: uint16(18787), + 3762: uint16(40454), + 3763: uint16(21044), + 3764: uint16(28846), + 3765: uint16(13741), + 3767: uint16(40316), + 3768: uint16(31830), + 3769: uint16(39737), + 3770: uint16(22494), + 3771: uint16(5996), + 3772: uint16(23635), + 3773: uint16(25811), + 3774: uint16(38096), + 3775: uint16(25397), + 3776: uint16(29028), + 3777: uint16(34477), + 3778: uint16(3368), + 3779: uint16(27938), + 3780: uint16(19170), + 3781: uint16(3441), + 3783: uint16(20990), + 3784: uint16(7951), + 3785: uint16(23950), + 3786: uint16(38659), + 3787: uint16(7633), + 3788: uint16(40577), + 3789: uint16(36940), + 3790: uint16(31519), + 3791: uint16(39682), + 3792: uint16(23761), + 3793: uint16(31651), + 3794: uint16(25192), + 3795: uint16(25397), + 3796: uint16(39679), + 3797: uint16(31695), + 3798: uint16(39722), + 3799: uint16(31870), + 3801: uint16(31810), + 3802: uint16(31878), + 3803: uint16(39957), + 3804: uint16(31740), + 3805: uint16(39689), + 3807: uint16(39963), + 3808: uint16(18750), + 3809: uint16(40794), + 3810: uint16(21875), + 3811: uint16(23491), + 3812: uint16(20477), + 3813: uint16(40600), + 3814: uint16(20466), + 3815: uint16(21088), + 3816: uint16(15878), + 3817: uint16(21201), + 3818: uint16(22375), + 3819: uint16(20566), + 3820: uint16(22967), + 3821: uint16(24082), + 3822: uint16(38856), + 3823: uint16(40363), + 3824: uint16(36700), + 3825: uint16(21609), + 3826: uint16(38836), + 3827: uint16(39232), + 3828: uint16(38842), + 3829: uint16(21292), + 3830: uint16(24880), + 3831: uint16(26924), + 3832: uint16(21466), + 3833: uint16(39946), + 3834: uint16(40194), + 3835: uint16(19515), + 3836: uint16(38465), + 3837: uint16(27008), + 3838: uint16(20646), + 3839: uint16(30022), + 3840: uint16(5997), + 3841: uint16(39386), + 3842: uint16(21107), + 3844: uint16(37209), + 3845: uint16(38529), + 3846: uint16(37212), + 3848: uint16(37201), + 3849: uint16(36503), + 3850: uint16(25471), + 3851: uint16(27939), + 3852: uint16(27338), + 3853: uint16(22033), + 3854: uint16(37262), + 3855: uint16(30074), + 3856: uint16(25221), + 3857: uint16(1020), + 3858: uint16(29519), + 3859: uint16(31856), + 3860: uint16(23585), + 3861: uint16(15613), + 3863: uint16(18713), + 3864: uint16(30422), + 3865: uint16(39837), + 3866: uint16(20010), + 3867: uint16(3284), + 3868: uint16(33726), + 3869: uint16(34882), + 3871: uint16(23626), + 3872: uint16(27072), + 3874: uint16(22394), + 3875: uint16(21023), + 3876: uint16(24053), + 3877: uint16(20174), + 3878: uint16(27697), + 3879: uint16(498), + 3880: uint16(20281), + 3881: uint16(21660), + 3882: uint16(21722), + 3883: uint16(21146), + 3884: uint16(36226), + 3885: uint16(13822), + 3887: uint16(13811), + 3889: uint16(27474), + 3890: uint16(37244), + 3891: uint16(40869), + 3892: uint16(39831), + 3893: uint16(38958), + 3894: uint16(39092), + 3895: uint16(39610), + 3896: uint16(40616), + 3897: uint16(40580), + 3898: uint16(29050), + 3899: uint16(31508), + 3901: uint16(27642), + 3902: uint16(34840), + 3903: uint16(32632), + 3905: uint16(22048), + 3906: uint16(42570), + 3907: uint16(36471), + 3908: uint16(40787), + 3910: uint16(36308), + 3911: uint16(36431), + 3912: uint16(40476), + 3913: uint16(36353), + 3914: uint16(25218), + 3915: uint16(33661), + 3916: uint16(36392), + 3917: uint16(36469), + 3918: uint16(31443), + 3919: uint16(19063), + 3920: uint16(31294), + 3921: uint16(30936), + 3922: uint16(27882), + 3923: uint16(35431), + 3924: uint16(30215), + 3925: uint16(35418), + 3926: uint16(40742), + 3927: uint16(27854), + 3928: uint16(34774), + 3929: uint16(30147), + 3930: uint16(41650), + 3931: uint16(30803), + 3932: uint16(63552), + 3933: uint16(36108), + 3934: uint16(29410), + 3935: uint16(29553), + 3936: uint16(35629), + 3937: uint16(29442), + 3938: uint16(29937), + 3939: uint16(36075), + 3940: uint16(19131), + 3941: uint16(34351), + 3942: uint16(24506), + 3943: uint16(34976), + 3944: uint16(17591), + 3946: uint16(6203), + 3947: uint16(28165), + 3949: uint16(35454), + 3950: uint16(9499), + 3952: uint16(24829), + 3953: uint16(30311), + 3954: uint16(39639), + 3955: uint16(40260), + 3956: uint16(37742), + 3957: uint16(39823), + 3958: uint16(34805), + 3961: uint16(36087), + 3962: uint16(29484), + 3963: uint16(38689), + 3964: uint16(39856), + 3965: uint16(13782), + 3966: uint16(29362), + 3967: uint16(19463), + 3968: uint16(31825), + 3969: uint16(39242), + 3970: uint16(24921), + 3971: uint16(24921), + 3972: uint16(19460), + 3973: uint16(40598), + 3974: uint16(24957), + 3976: uint16(22367), + 3977: uint16(24943), + 3978: uint16(25254), + 3979: uint16(25145), + 3981: uint16(14940), + 3982: uint16(25058), + 3983: uint16(21418), + 3984: uint16(13301), + 3985: uint16(25444), + 3986: uint16(26626), + 3987: uint16(13778), + 3988: uint16(23895), + 3989: uint16(35778), + 3990: uint16(36826), + 3991: uint16(36409), + 3993: uint16(20697), + 3994: uint16(7494), + 3995: uint16(30982), + 3996: uint16(21298), + 3997: uint16(38456), + 3998: uint16(3899), + 3999: uint16(16485), + 4001: uint16(30718), + 4003: uint16(31938), + 4004: uint16(24346), + 4005: uint16(31962), + 4006: uint16(31277), + 4007: uint16(32870), + 4008: uint16(32867), + 4009: uint16(32077), + 4010: uint16(29957), + 4011: uint16(29938), + 4012: uint16(35220), + 4013: uint16(33306), + 4014: uint16(26380), + 4015: uint16(32866), + 4016: uint16(29830), + 4017: uint16(32859), + 4018: uint16(29936), + 4019: uint16(33027), + 4020: uint16(30500), + 4021: uint16(35209), + 4022: uint16(26572), + 4023: uint16(30035), + 4024: uint16(28369), + 4025: uint16(34729), + 4026: uint16(34766), + 4027: uint16(33224), + 4028: uint16(34700), + 4029: uint16(35401), + 4030: uint16(36013), + 4031: uint16(35651), + 4032: uint16(30507), + 4033: uint16(29944), + 4034: uint16(34010), + 4035: uint16(13877), + 4036: uint16(27058), + 4037: uint16(36262), + 4039: uint16(35241), + 4041: uint16(28089), + 4042: uint16(34753), + 4043: uint16(16401), + 4044: uint16(29927), + 4045: uint16(15835), + 4046: uint16(29046), + 4047: uint16(24740), + 4048: uint16(24988), + 4049: uint16(15569), + 4051: uint16(24695), + 4053: uint16(32625), + 4054: uint16(35629), + 4056: uint16(24809), + 4057: uint16(19326), + 4058: uint16(21024), + 4059: uint16(15384), + 4060: uint16(15559), + 4061: uint16(24279), + 4062: uint16(30294), + 4063: uint16(21809), + 4064: uint16(6468), + 4065: uint16(4862), + 4066: uint16(39171), + 4067: uint16(28124), + 4068: uint16(28845), + 4069: uint16(23745), + 4070: uint16(25005), + 4071: uint16(35343), + 4072: uint16(13943), + 4073: uint16(238), + 4074: uint16(26694), + 4075: uint16(20238), + 4076: uint16(17762), + 4077: uint16(23327), + 4078: uint16(25420), + 4079: uint16(40784), + 4080: uint16(40614), + 4081: uint16(25195), + 4082: uint16(1351), + 4083: uint16(37595), + 4084: uint16(1503), + 4085: uint16(16325), + 4086: uint16(34124), + 4087: uint16(17077), + 4088: uint16(29679), + 4089: uint16(20917), + 4090: uint16(13897), + 4091: uint16(18754), + 4092: uint16(35300), + 4093: uint16(37700), + 4094: uint16(6619), + 4095: uint16(33518), + 4096: uint16(15560), + 4097: uint16(30780), + 4098: uint16(26436), + 4099: uint16(25311), + 4100: uint16(18739), + 4101: uint16(35242), + 4102: uint16(672), + 4103: uint16(27571), + 4104: uint16(4869), + 4105: uint16(20395), + 4106: uint16(9453), + 4107: uint16(20488), + 4108: uint16(27945), + 4109: uint16(31364), + 4110: uint16(13824), + 4111: uint16(19121), + 4112: uint16(9491), + 4114: uint16(894), + 4115: uint16(24484), + 4116: uint16(896), + 4117: uint16(839), + 4118: uint16(28379), + 4119: uint16(1055), + 4121: uint16(20737), + 4122: uint16(13434), + 4123: uint16(20750), + 4124: uint16(39020), + 4125: uint16(14147), + 4126: uint16(33814), + 4127: uint16(18852), + 4128: uint16(1159), + 4129: uint16(20832), + 4130: uint16(13236), + 4131: uint16(20842), + 4132: uint16(3071), + 4133: uint16(8444), + 4134: uint16(741), + 4135: uint16(9520), + 4136: uint16(1422), + 4137: uint16(12851), + 4138: uint16(6531), + 4139: uint16(23426), + 4140: uint16(34685), + 4141: uint16(1459), + 4142: uint16(15513), + 4143: uint16(20914), + 4144: uint16(20920), + 4145: uint16(40244), + 4146: uint16(20937), + 4147: uint16(20943), + 4148: uint16(20945), + 4149: uint16(15580), + 4150: uint16(20947), + 4151: uint16(19110), + 4152: uint16(20915), + 4153: uint16(20962), + 4154: uint16(21314), + 4155: uint16(20973), + 4156: uint16(33741), + 4157: uint16(26942), + 4158: uint16(14125), + 4159: uint16(24443), + 4160: uint16(21003), + 4161: uint16(21030), + 4162: uint16(21052), + 4163: uint16(21173), + 4164: uint16(21079), + 4165: uint16(21140), + 4166: uint16(21177), + 4167: uint16(21189), + 4168: uint16(31765), + 4169: uint16(34114), + 4170: uint16(21216), + 4171: uint16(34317), + 4172: uint16(27411), + 4174: uint16(35550), + 4175: uint16(21833), + 4176: uint16(28377), + 4177: uint16(16256), + 4178: uint16(2388), + 4179: uint16(16364), + 4180: uint16(21299), + 4182: uint16(3042), + 4183: uint16(27851), + 4184: uint16(5926), + 4185: uint16(26651), + 4186: uint16(29653), + 4187: uint16(24650), + 4188: uint16(16042), + 4189: uint16(14540), + 4190: uint16(5864), + 4191: uint16(29149), + 4192: uint16(17570), + 4193: uint16(21357), + 4194: uint16(21364), + 4195: uint16(34475), + 4196: uint16(21374), + 4198: uint16(5526), + 4199: uint16(5651), + 4200: uint16(30694), + 4201: uint16(21395), + 4202: uint16(35483), + 4203: uint16(21408), + 4204: uint16(21419), + 4205: uint16(21422), + 4206: uint16(29607), + 4207: uint16(22386), + 4208: uint16(16217), + 4209: uint16(29596), + 4210: uint16(21441), + 4211: uint16(21445), + 4212: uint16(27721), + 4213: uint16(20041), + 4214: uint16(22526), + 4215: uint16(21465), + 4216: uint16(15019), + 4217: uint16(2959), + 4218: uint16(21472), + 4219: uint16(16363), + 4220: uint16(11683), + 4221: uint16(21494), + 4222: uint16(3191), + 4223: uint16(21523), + 4224: uint16(28793), + 4225: uint16(21803), + 4226: uint16(26199), + 4227: uint16(27995), + 4228: uint16(21613), + 4229: uint16(27475), + 4230: uint16(3444), + 4231: uint16(21853), + 4232: uint16(21647), + 4233: uint16(21668), + 4234: uint16(18342), + 4235: uint16(5901), + 4236: uint16(3805), + 4237: uint16(15796), + 4238: uint16(3405), + 4239: uint16(35260), + 4240: uint16(9880), + 4241: uint16(21831), + 4242: uint16(19693), + 4243: uint16(21551), + 4244: uint16(29719), + 4245: uint16(21894), + 4246: uint16(21929), + 4248: uint16(6359), + 4249: uint16(16442), + 4250: uint16(17746), + 4251: uint16(17461), + 4252: uint16(26291), + 4253: uint16(4276), + 4254: uint16(22071), + 4255: uint16(26317), + 4256: uint16(12938), + 4257: uint16(26276), + 4258: uint16(26285), + 4259: uint16(22093), + 4260: uint16(22095), + 4261: uint16(30961), + 4262: uint16(22257), + 4263: uint16(38791), + 4264: uint16(21502), + 4265: uint16(22272), + 4266: uint16(22255), + 4267: uint16(22253), + 4268: uint16(35686), + 4269: uint16(13859), + 4270: uint16(4687), + 4271: uint16(22342), + 4272: uint16(16805), + 4273: uint16(27758), + 4274: uint16(28811), + 4275: uint16(22338), + 4276: uint16(14001), + 4277: uint16(27774), + 4278: uint16(22502), + 4279: uint16(5142), + 4280: uint16(22531), + 4281: uint16(5204), + 4282: uint16(17251), + 4283: uint16(22566), + 4284: uint16(19445), + 4285: uint16(22620), + 4286: uint16(22698), + 4287: uint16(13665), + 4288: uint16(22752), + 4289: uint16(22748), + 4290: uint16(4668), + 4291: uint16(22779), + 4292: uint16(23551), + 4293: uint16(22339), + 4294: uint16(41296), + 4295: uint16(17016), + 4296: uint16(37843), + 4297: uint16(13729), + 4298: uint16(22815), + 4299: uint16(26790), + 4300: uint16(14019), + 4301: uint16(28249), + 4302: uint16(5694), + 4303: uint16(23076), + 4304: uint16(21843), + 4305: uint16(5778), + 4306: uint16(34053), + 4307: uint16(22985), + 4308: uint16(3406), + 4309: uint16(27777), + 4310: uint16(27946), + 4311: uint16(6108), + 4312: uint16(23001), + 4313: uint16(6139), + 4314: uint16(6066), + 4315: uint16(28070), + 4316: uint16(28017), + 4317: uint16(6184), + 4318: uint16(5845), + 4319: uint16(23033), + 4320: uint16(28229), + 4321: uint16(23211), + 4322: uint16(23139), + 4323: uint16(14054), + 4324: uint16(18857), + 4326: uint16(14088), + 4327: uint16(23190), + 4328: uint16(29797), + 4329: uint16(23251), + 4330: uint16(28577), + 4331: uint16(9556), + 4332: uint16(15749), + 4333: uint16(6417), + 4334: uint16(14130), + 4335: uint16(5816), + 4336: uint16(24195), + 4337: uint16(21200), + 4338: uint16(23414), + 4339: uint16(25992), + 4340: uint16(23420), + 4341: uint16(31246), + 4342: uint16(16388), + 4343: uint16(18525), + 4344: uint16(516), + 4345: uint16(23509), + 4346: uint16(24928), + 4347: uint16(6708), + 4348: uint16(22988), + 4349: uint16(1445), + 4350: uint16(23539), + 4351: uint16(23453), + 4352: uint16(19728), + 4353: uint16(23557), + 4354: uint16(6980), + 4355: uint16(23571), + 4356: uint16(29646), + 4357: uint16(23572), + 4358: uint16(7333), + 4359: uint16(27432), + 4360: uint16(23625), + 4361: uint16(18653), + 4362: uint16(23685), + 4363: uint16(23785), + 4364: uint16(23791), + 4365: uint16(23947), + 4366: uint16(7673), + 4367: uint16(7735), + 4368: uint16(23824), + 4369: uint16(23832), + 4370: uint16(23878), + 4371: uint16(7844), + 4372: uint16(23738), + 4373: uint16(24023), + 4374: uint16(33532), + 4375: uint16(14381), + 4376: uint16(18689), + 4377: uint16(8265), + 4378: uint16(8563), + 4379: uint16(33415), + 4380: uint16(14390), + 4381: uint16(15298), + 4382: uint16(24110), + 4383: uint16(27274), + 4385: uint16(24186), + 4386: uint16(17596), + 4387: uint16(3283), + 4388: uint16(21414), + 4389: uint16(20151), + 4391: uint16(21416), + 4392: uint16(6001), + 4393: uint16(24073), + 4394: uint16(24308), + 4395: uint16(33922), + 4396: uint16(24313), + 4397: uint16(24315), + 4398: uint16(14496), + 4399: uint16(24316), + 4400: uint16(26686), + 4401: uint16(37915), + 4402: uint16(24333), + 4403: uint16(449), + 4404: uint16(63636), + 4405: uint16(15070), + 4406: uint16(18606), + 4407: uint16(4922), + 4408: uint16(24378), + 4409: uint16(26760), + 4410: uint16(9168), + 4412: uint16(9329), + 4413: uint16(24419), + 4414: uint16(38845), + 4415: uint16(28270), + 4416: uint16(24434), + 4417: uint16(37696), + 4418: uint16(35382), + 4419: uint16(24487), + 4420: uint16(23990), + 4421: uint16(15711), + 4422: uint16(21072), + 4423: uint16(8042), + 4424: uint16(28920), + 4425: uint16(9832), + 4426: uint16(37334), + 4427: uint16(670), + 4428: uint16(35369), + 4429: uint16(24625), + 4430: uint16(26245), + 4431: uint16(6263), + 4432: uint16(14691), + 4433: uint16(15815), + 4434: uint16(13881), + 4435: uint16(22416), + 4436: uint16(10164), + 4437: uint16(31089), + 4438: uint16(15936), + 4439: uint16(24734), + 4441: uint16(24755), + 4442: uint16(18818), + 4443: uint16(18831), + 4444: uint16(31315), + 4445: uint16(29860), + 4446: uint16(20705), + 4447: uint16(23200), + 4448: uint16(24932), + 4449: uint16(33828), + 4450: uint16(24898), + 4451: uint16(63654), + 4452: uint16(28370), + 4453: uint16(24961), + 4454: uint16(20980), + 4455: uint16(1622), + 4456: uint16(24967), + 4457: uint16(23466), + 4458: uint16(16311), + 4459: uint16(10335), + 4460: uint16(25043), + 4461: uint16(35741), + 4462: uint16(39261), + 4463: uint16(25040), + 4464: uint16(14642), + 4465: uint16(10624), + 4466: uint16(10433), + 4467: uint16(24611), + 4468: uint16(24924), + 4469: uint16(25886), + 4470: uint16(25483), + 4471: uint16(280), + 4472: uint16(25285), + 4473: uint16(6000), + 4474: uint16(25301), + 4475: uint16(11789), + 4476: uint16(25452), + 4477: uint16(18911), + 4478: uint16(14871), + 4479: uint16(25656), + 4480: uint16(25592), + 4481: uint16(5006), + 4482: uint16(6140), + 4484: uint16(28554), + 4485: uint16(11830), + 4486: uint16(38932), + 4487: uint16(16524), + 4488: uint16(22301), + 4489: uint16(25825), + 4490: uint16(25829), + 4491: uint16(38011), + 4492: uint16(14950), + 4493: uint16(25658), + 4494: uint16(14935), + 4495: uint16(25933), + 4496: uint16(28438), + 4497: uint16(18984), + 4498: uint16(18979), + 4499: uint16(25989), + 4500: uint16(25965), + 4501: uint16(25951), + 4502: uint16(12414), + 4503: uint16(26037), + 4504: uint16(18752), + 4505: uint16(19255), + 4506: uint16(26065), + 4507: uint16(16600), + 4508: uint16(6185), + 4509: uint16(26080), + 4510: uint16(26083), + 4511: uint16(24543), + 4512: uint16(13312), + 4513: uint16(26136), + 4514: uint16(12791), + 4515: uint16(12792), + 4516: uint16(26180), + 4517: uint16(12708), + 4518: uint16(12709), + 4519: uint16(26187), + 4520: uint16(3701), + 4521: uint16(26215), + 4522: uint16(20966), + 4523: uint16(26227), + 4525: uint16(7741), + 4526: uint16(12849), + 4527: uint16(34292), + 4528: uint16(12744), + 4529: uint16(21267), + 4530: uint16(30661), + 4531: uint16(10487), + 4532: uint16(39332), + 4533: uint16(26370), + 4534: uint16(17308), + 4535: uint16(18977), + 4536: uint16(15147), + 4537: uint16(27130), + 4538: uint16(14274), + 4540: uint16(26471), + 4541: uint16(26466), + 4542: uint16(16845), + 4543: uint16(37101), + 4544: uint16(26583), + 4545: uint16(17641), + 4546: uint16(26658), + 4547: uint16(28240), + 4548: uint16(37436), + 4549: uint16(26625), + 4550: uint16(13286), + 4551: uint16(28064), + 4552: uint16(26717), + 4553: uint16(13423), + 4554: uint16(27105), + 4555: uint16(27147), + 4556: uint16(35551), + 4557: uint16(26995), + 4558: uint16(26819), + 4559: uint16(13773), + 4560: uint16(26881), + 4561: uint16(26880), + 4562: uint16(15666), + 4563: uint16(14849), + 4564: uint16(13884), + 4565: uint16(15232), + 4566: uint16(26540), + 4567: uint16(26977), + 4568: uint16(35402), + 4569: uint16(17148), + 4570: uint16(26934), + 4571: uint16(27032), + 4572: uint16(15265), + 4573: uint16(969), + 4574: uint16(33635), + 4575: uint16(20624), + 4576: uint16(27129), + 4577: uint16(13913), + 4578: uint16(8490), + 4579: uint16(27205), + 4580: uint16(14083), + 4581: uint16(27293), + 4582: uint16(15347), + 4583: uint16(26545), + 4584: uint16(27336), + 4585: uint16(37276), + 4586: uint16(15373), + 4587: uint16(27421), + 4588: uint16(2339), + 4589: uint16(24798), + 4590: uint16(27445), + 4591: uint16(27508), + 4592: uint16(10189), + 4593: uint16(28341), + 4594: uint16(15067), + 4595: uint16(949), + 4596: uint16(6488), + 4597: uint16(14144), + 4598: uint16(21537), + 4599: uint16(15194), + 4600: uint16(27617), + 4601: uint16(16124), + 4602: uint16(27612), + 4603: uint16(27703), + 4604: uint16(9355), + 4605: uint16(18673), + 4606: uint16(27473), + 4607: uint16(27738), + 4608: uint16(33318), + 4609: uint16(27769), + 4610: uint16(15804), + 4611: uint16(17605), + 4612: uint16(15805), + 4613: uint16(16804), + 4614: uint16(18700), + 4615: uint16(18688), + 4616: uint16(15561), + 4617: uint16(14053), + 4618: uint16(15595), + 4619: uint16(3378), + 4620: uint16(39811), + 4621: uint16(12793), + 4622: uint16(9361), + 4623: uint16(32655), + 4624: uint16(26679), + 4625: uint16(27941), + 4626: uint16(28065), + 4627: uint16(28139), + 4628: uint16(28054), + 4629: uint16(27996), + 4630: uint16(28284), + 4631: uint16(28420), + 4632: uint16(18815), + 4633: uint16(16517), + 4634: uint16(28274), + 4635: uint16(34099), + 4636: uint16(28532), + 4637: uint16(20935), + 4640: uint16(33838), + 4641: uint16(35617), + 4643: uint16(15919), + 4644: uint16(29779), + 4645: uint16(16258), + 4646: uint16(31180), + 4647: uint16(28239), + 4648: uint16(23185), + 4649: uint16(12363), + 4650: uint16(28664), + 4651: uint16(14093), + 4652: uint16(28573), + 4653: uint16(15920), + 4654: uint16(28410), + 4655: uint16(5271), + 4656: uint16(16445), + 4657: uint16(17749), + 4658: uint16(37872), + 4659: uint16(28484), + 4660: uint16(28508), + 4661: uint16(15694), + 4662: uint16(28532), + 4663: uint16(37232), + 4664: uint16(15675), + 4665: uint16(28575), + 4666: uint16(16708), + 4667: uint16(28627), + 4668: uint16(16529), + 4669: uint16(16725), + 4670: uint16(16441), + 4671: uint16(16368), + 4672: uint16(16308), + 4673: uint16(16703), + 4674: uint16(20959), + 4675: uint16(16726), + 4676: uint16(16727), + 4677: uint16(16704), + 4678: uint16(25053), + 4679: uint16(28747), + 4680: uint16(28798), + 4681: uint16(28839), + 4682: uint16(28801), + 4683: uint16(28876), + 4684: uint16(28885), + 4685: uint16(28886), + 4686: uint16(28895), + 4687: uint16(16644), + 4688: uint16(15848), + 4689: uint16(29108), + 4690: uint16(29078), + 4691: uint16(17015), + 4692: uint16(28971), + 4693: uint16(28997), + 4694: uint16(23176), + 4695: uint16(29002), + 4697: uint16(23708), + 4698: uint16(17253), + 4699: uint16(29007), + 4700: uint16(37730), + 4701: uint16(17089), + 4702: uint16(28972), + 4703: uint16(17498), + 4704: uint16(18983), + 4705: uint16(18978), + 4706: uint16(29114), + 4707: uint16(35816), + 4708: uint16(28861), + 4709: uint16(29198), + 4710: uint16(37954), + 4711: uint16(29205), + 4712: uint16(22801), + 4713: uint16(37955), + 4714: uint16(29220), + 4715: uint16(37697), + 4716: uint16(22021), + 4717: uint16(29230), + 4718: uint16(29248), + 4719: uint16(18804), + 4720: uint16(26813), + 4721: uint16(29269), + 4722: uint16(29271), + 4723: uint16(15957), + 4724: uint16(12356), + 4725: uint16(26637), + 4726: uint16(28477), + 4727: uint16(29314), + 4729: uint16(29483), + 4730: uint16(18467), + 4731: uint16(34859), + 4732: uint16(18669), + 4733: uint16(34820), + 4734: uint16(29480), + 4735: uint16(29486), + 4736: uint16(29647), + 4737: uint16(29610), + 4738: uint16(3130), + 4739: uint16(27182), + 4740: uint16(29641), + 4741: uint16(29769), + 4742: uint16(16866), + 4743: uint16(5863), + 4744: uint16(18980), + 4745: uint16(26147), + 4746: uint16(14021), + 4747: uint16(18871), + 4748: uint16(18829), + 4749: uint16(18939), + 4750: uint16(29687), + 4751: uint16(29717), + 4752: uint16(26883), + 4753: uint16(18982), + 4754: uint16(29753), + 4755: uint16(1475), + 4756: uint16(16087), + 4758: uint16(10413), + 4759: uint16(29792), + 4760: uint16(36530), + 4761: uint16(29767), + 4762: uint16(29668), + 4763: uint16(29814), + 4764: uint16(33721), + 4765: uint16(29804), + 4766: uint16(14128), + 4767: uint16(29812), + 4768: uint16(37873), + 4769: uint16(27180), + 4770: uint16(29826), + 4771: uint16(18771), + 4772: uint16(19084), + 4773: uint16(16735), + 4774: uint16(19065), + 4775: uint16(35727), + 4776: uint16(23366), + 4777: uint16(35843), + 4778: uint16(6302), + 4779: uint16(29896), + 4780: uint16(6536), + 4781: uint16(29966), + 4783: uint16(29982), + 4784: uint16(36569), + 4785: uint16(6731), + 4786: uint16(23511), + 4787: uint16(36524), + 4788: uint16(37765), + 4789: uint16(30029), + 4790: uint16(30026), + 4791: uint16(30055), + 4792: uint16(30062), + 4793: uint16(20354), + 4794: uint16(16132), + 4795: uint16(19731), + 4796: uint16(30094), + 4797: uint16(29789), + 4798: uint16(30110), + 4799: uint16(30132), + 4800: uint16(30210), + 4801: uint16(30252), + 4802: uint16(30289), + 4803: uint16(30287), + 4804: uint16(30319), + 4805: uint16(30326), + 4806: uint16(25589), + 4807: uint16(30352), + 4808: uint16(33263), + 4809: uint16(14328), + 4810: uint16(26897), + 4811: uint16(26894), + 4812: uint16(30369), + 4813: uint16(30373), + 4814: uint16(30391), + 4815: uint16(30412), + 4816: uint16(28575), + 4817: uint16(33890), + 4818: uint16(20637), + 4819: uint16(20861), + 4820: uint16(7708), + 4821: uint16(30494), + 4822: uint16(30502), + 4823: uint16(30528), + 4824: uint16(25775), + 4825: uint16(21024), + 4826: uint16(30552), + 4827: uint16(12972), + 4828: uint16(30639), + 4829: uint16(35172), + 4830: uint16(35176), + 4831: uint16(5825), + 4832: uint16(30708), + 4834: uint16(4982), + 4835: uint16(18962), + 4836: uint16(26826), + 4837: uint16(30895), + 4838: uint16(30919), + 4839: uint16(30931), + 4840: uint16(38565), + 4841: uint16(31022), + 4842: uint16(21984), + 4843: uint16(30935), + 4844: uint16(31028), + 4845: uint16(30897), + 4846: uint16(30220), + 4847: uint16(36792), + 4848: uint16(34948), + 4849: uint16(35627), + 4850: uint16(24707), + 4851: uint16(9756), + 4852: uint16(31110), + 4853: uint16(35072), + 4854: uint16(26882), + 4855: uint16(31104), + 4856: uint16(22615), + 4857: uint16(31133), + 4858: uint16(31545), + 4859: uint16(31036), + 4860: uint16(31145), + 4861: uint16(28202), + 4862: uint16(28966), + 4863: uint16(16040), + 4864: uint16(31174), + 4865: uint16(37133), + 4866: uint16(31188), + 4867: uint16(1312), + 4868: uint16(17503), + 4869: uint16(21007), + 4870: uint16(47234), + 4871: uint16(248), + 4872: uint16(16384), + 4873: uint16(43296), + 4874: uint16(1102), + 4877: uint16(2868), + 4878: uint16(1), + 4886: uint16(3072), + 4887: uint16(64), + 4891: uint16(1024), + 4892: uint16(88), + 4893: uint16(60), + 4896: uint16(23680), + 4897: uint16(56493), + 4898: uint16(48115), + 4899: uint16(17353), + 4900: uint16(60910), + 4901: uint16(4004), + 4902: uint16(49446), + 4903: uint16(30363), + 4904: uint16(61426), + 4905: uint16(64478), + 4906: uint16(63482), + 4907: uint16(12815), + 4908: uint16(44868), + 4909: uint16(61438), + 4910: uint16(65277), + 4911: uint16(24593), + 4912: uint16(176), + 4913: uint16(8448), + 4914: uint16(33049), + 4915: uint16(4128), + 4916: uint16(43144), + 4917: uint16(8544), + 4918: uint16(9321), + 4919: uint16(17408), + 4920: uint16(50313), + 4922: uint16(16387), + 4923: uint16(53), + 4924: uint16(33859), + 4925: uint16(20785), + 4926: uint16(26771), + 4927: uint16(514), + 4933: uint16(16384), + 4934: uint16(256), + 4935: uint16(44160), + 4936: uint16(33380), + 4937: uint16(35904), + 4938: uint16(37025), + 4939: uint16(20484), + 4940: uint16(54368), + 4941: uint16(53760), + 4942: uint16(6186), + 4943: uint16(26781), + 4944: uint16(38709), + 4945: uint16(55375), + 4946: uint16(8440), + 4947: uint16(33476), + 4948: uint16(10268), + 4949: uint16(30082), + 4950: uint16(660), + 4951: uint16(16440), + 4952: uint16(41376), + 4953: uint16(4293), + 4954: uint16(19825), + 4955: uint16(3524), + 4956: uint16(47512), + 4957: uint16(23390), + 4958: uint16(17153), + 4959: uint16(39327), + 4960: uint16(30723), + 4961: uint16(57888), + 4962: uint16(2079), + 4963: uint16(393), + 4964: uint16(16585), + 4965: uint16(775), + 4966: uint16(39437), + 4967: uint16(21136), + 4968: uint16(20433), + 4969: uint16(892), + 4970: uint16(8450), + 4971: uint16(49184), + 4972: uint16(4974), + 4973: uint16(46467), + 4974: uint16(62939), + 4975: uint16(30693), + 4976: uint16(20368), + 4977: uint16(39447), + 4978: uint16(5942), + 4979: uint16(12), + 4980: uint16(47726), + 4981: uint16(12041), + 4982: uint16(21600), + 4983: uint16(7680), + 4984: uint16(26744), + 4985: uint16(28706), + 4986: uint16(40534), + 4987: uint16(62245), + 4988: uint16(46990), + 4989: uint16(2839), + 4990: uint16(59119), + 4991: uint16(6007), + 4992: uint16(7003), + 4993: uint16(4289), + 4994: uint16(36248), + 4995: uint16(6162), + 4996: uint16(53174), + 4997: uint16(12545), + 4998: uint16(6770), + 4999: uint16(11355), + 5000: uint16(49334), + 5001: uint16(57888), + 5002: uint16(23747), + 5003: uint16(7042), + 5004: uint16(56032), + 5005: uint16(34254), + 5006: uint16(16598), + 5007: uint16(21673), + 5008: uint16(53259), + 5009: uint16(18447), + 5010: uint16(16452), + 5011: uint16(2320), + 5012: uint16(16596), + 5013: uint16(15278), + 5014: uint16(7780), + 5015: uint16(11076), + 5016: uint16(2071), + 5017: uint16(33414), + 5018: uint16(6198), + 5019: uint16(35232), + 5020: uint16(40167), + 5021: uint16(2139), + 5022: uint16(900), + 5023: uint16(55810), + 5024: uint16(60560), + 5025: uint16(34779), + 5026: uint16(49029), + 5027: uint16(44450), + 5028: uint16(36509), + 5029: uint16(39069), + 5030: uint16(9504), + 5031: uint16(70), + 5032: uint16(40774), + 5033: uint16(58239), + 5034: uint16(51669), + 5035: uint16(62596), + 5036: uint16(19926), + 5037: uint16(58118), + 5038: uint16(6326), + 5039: uint16(2322), + 5041: uint16(1024), + 5043: uint16(32), + 5045: uint16(512), + 5050: uint16(8192), + 5057: uint16(8), + 5058: uint16(36352), + 5059: uint16(28280), + 5060: uint16(16223), + 5061: uint16(56702), + 5062: uint16(63293), + 5063: uint16(39932), + 5064: uint16(44796), + 5065: uint16(65490), + 5066: uint16(27535), + 5067: uint16(59377), + 5068: uint16(47807), + 5069: uint16(28334), + 5070: uint16(61207), + 5071: uint16(42972), + 5072: uint16(46654), + 5073: uint16(30645), + 5074: uint16(37577), + 5075: uint16(42455), + 5076: uint16(19126), + 5077: uint16(39790), + 5078: uint16(33209), + 5079: uint16(26445), + 5080: uint16(21758), + 5081: uint16(39921), + 5082: uint16(65122), + 5083: uint16(21103), + 5084: uint16(14039), + 5085: uint16(49150), + 5086: uint16(17705), + 5087: uint16(63873), + 5088: uint16(26045), + 5089: uint16(17062), + 5090: uint16(57), + 5091: uint16(16896), + 5092: uint16(36704), + 5093: uint16(37888), + 5094: uint16(16448), + 5095: uint16(45010), + 5096: uint16(53719), + 5097: uint16(219), + 5098: uint16(39072), + 5099: uint16(31666), + 5100: uint16(20998), + 5101: uint16(38944), + 5102: uint16(51222), + 5103: uint16(2365), + 5105: uint16(1), + 5107: uint16(2561), + 5108: uint16(2226), + 5109: uint16(128), + 5111: uint16(34820), + 5112: uint16(5152), + 5113: uint16(19472), + 5115: uint16(4), + 5116: uint16(17569), + 5117: uint16(16), + 5118: uint16(321), + 5119: uint16(2048), + 5120: uint16(61504), + 5121: uint16(20447), + 5122: uint16(22582), + 5123: uint16(62961), + 5124: uint16(32949), + 5125: uint16(26613), + 5126: uint16(16512), + 5127: uint16(20480), + 5128: uint16(16718), + 5129: uint16(33992), + 5130: uint16(23040), + 5131: uint16(55392), + 5132: uint16(11009), + 5133: uint16(20481), + 5134: uint16(5793), + 5135: uint16(16580), + 5136: uint16(28402), + 5137: uint16(44049), + 5138: uint16(14624), + 5139: uint16(49348), + 5140: uint16(1800), + 5141: uint16(2316), + 5142: uint16(38552), + 5143: uint16(39876), + 5144: uint16(7184), + 5145: uint16(27800), + 5146: uint16(10886), + 5147: uint16(422), + 5148: uint16(4422), + 5149: uint16(58733), + 5150: uint16(50379), + 5151: uint16(37568), + 5152: uint16(8464), + 5153: uint16(4630), + 5154: uint16(29341), + 5155: uint16(27124), + 5156: uint16(5902), + 5157: uint16(41514), + 5158: uint16(62593), + 5159: uint16(123), + 5160: uint16(41992), + 5161: uint16(36875), + 5162: uint16(11280), + 5163: uint16(14796), + 5164: uint16(330), + 5165: uint16(5872), + 5166: uint16(2571), + 5167: uint16(3136), + 5168: uint16(59933), + 5169: uint16(17420), + 5170: uint16(17678), + 5171: uint16(2), +} + +var _ksc = [93][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(183), + 4: uint16(8229), + 5: uint16(8230), + 6: uint16(168), + 7: uint16(12291), + 8: uint16(173), + 9: uint16(8213), + 10: uint16(8741), + 11: uint16(65340), + 12: uint16(8764), + 13: uint16(8216), + 14: uint16(8217), + 15: uint16(8220), + 16: uint16(8221), + 17: uint16(12308), + 18: uint16(12309), + 19: uint16(12296), + 20: uint16(12297), + 21: uint16(12298), + 22: uint16(12299), + 23: uint16(12300), + 24: uint16(12301), + 25: uint16(12302), + 26: uint16(12303), + 27: uint16(12304), + 28: uint16(12305), + 29: uint16(177), + 30: uint16(215), + 31: uint16(247), + 32: uint16(8800), + 33: uint16(8804), + 34: uint16(8805), + 35: uint16(8734), + 36: uint16(8756), + 37: uint16(176), + 38: uint16(8242), + 39: uint16(8243), + 40: uint16(8451), + 41: uint16(8491), + 42: uint16(65504), + 43: uint16(65505), + 44: uint16(65509), + 45: uint16(9794), + 46: uint16(9792), + 47: uint16(8736), + 48: uint16(8869), + 49: uint16(8978), + 50: uint16(8706), + 51: uint16(8711), + 52: uint16(8801), + 53: uint16(8786), + 54: uint16(167), + 55: uint16(8251), + 56: uint16(9734), + 57: uint16(9733), + 58: uint16(9675), + 59: uint16(9679), + 60: uint16(9678), + 61: uint16(9671), + 62: uint16(9670), + 63: uint16(9633), + 64: uint16(9632), + 65: uint16(9651), + 66: uint16(9650), + 67: uint16(9661), + 68: uint16(9660), + 69: uint16(8594), + 70: uint16(8592), + 71: uint16(8593), + 72: uint16(8595), + 73: uint16(8596), + 74: uint16(12307), + 75: uint16(8810), + 76: uint16(8811), + 77: uint16(8730), + 78: uint16(8765), + 79: uint16(8733), + 80: uint16(8757), + 81: uint16(8747), + 82: uint16(8748), + 83: uint16(8712), + 84: uint16(8715), + 85: uint16(8838), + 86: uint16(8839), + 87: uint16(8834), + 88: uint16(8835), + 89: uint16(8746), + 90: uint16(8745), + 91: uint16(8743), + 92: uint16(8744), + 93: uint16(65506), + }, + 1: { + 0: uint16(8658), + 1: uint16(8660), + 2: uint16(8704), + 3: uint16(8707), + 4: uint16(180), + 5: uint16(65374), + 6: uint16(711), + 7: uint16(728), + 8: uint16(733), + 9: uint16(730), + 10: uint16(729), + 11: uint16(184), + 12: uint16(731), + 13: uint16(161), + 14: uint16(191), + 15: uint16(720), + 16: uint16(8750), + 17: uint16(8721), + 18: uint16(8719), + 19: uint16(164), + 20: uint16(8457), + 21: uint16(8240), + 22: uint16(9665), + 23: uint16(9664), + 24: uint16(9655), + 25: uint16(9654), + 26: uint16(9828), + 27: uint16(9824), + 28: uint16(9825), + 29: uint16(9829), + 30: uint16(9831), + 31: uint16(9827), + 32: uint16(8857), + 33: uint16(9672), + 34: uint16(9635), + 35: uint16(9680), + 36: uint16(9681), + 37: uint16(9618), + 38: uint16(9636), + 39: uint16(9637), + 40: uint16(9640), + 41: uint16(9639), + 42: uint16(9638), + 43: uint16(9641), + 44: uint16(9832), + 45: uint16(9743), + 46: uint16(9742), + 47: uint16(9756), + 48: uint16(9758), + 49: uint16(182), + 50: uint16(8224), + 51: uint16(8225), + 52: uint16(8597), + 53: uint16(8599), + 54: uint16(8601), + 55: uint16(8598), + 56: uint16(8600), + 57: uint16(9837), + 58: uint16(9833), + 59: uint16(9834), + 60: uint16(9836), + 61: uint16(12927), + 62: uint16(12828), + 63: uint16(8470), + 64: uint16(13255), + 65: uint16(8482), + 66: uint16(13250), + 67: uint16(13272), + 68: uint16(8481), + 69: uint16(8364), + 70: uint16(174), + }, + 2: { + 0: uint16(65281), + 1: uint16(65282), + 2: uint16(65283), + 3: uint16(65284), + 4: uint16(65285), + 5: uint16(65286), + 6: uint16(65287), + 7: uint16(65288), + 8: uint16(65289), + 9: uint16(65290), + 10: uint16(65291), + 11: uint16(65292), + 12: uint16(65293), + 13: uint16(65294), + 14: uint16(65295), + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 25: uint16(65306), + 26: uint16(65307), + 27: uint16(65308), + 28: uint16(65309), + 29: uint16(65310), + 30: uint16(65311), + 31: uint16(65312), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 58: uint16(65339), + 59: uint16(65510), + 60: uint16(65341), + 61: uint16(65342), + 62: uint16(65343), + 63: uint16(65344), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + 90: uint16(65371), + 91: uint16(65372), + 92: uint16(65373), + 93: uint16(65507), + }, + 3: { + 0: uint16(12593), + 1: uint16(12594), + 2: uint16(12595), + 3: uint16(12596), + 4: uint16(12597), + 5: uint16(12598), + 6: uint16(12599), + 7: uint16(12600), + 8: uint16(12601), + 9: uint16(12602), + 10: uint16(12603), + 11: uint16(12604), + 12: uint16(12605), + 13: uint16(12606), + 14: uint16(12607), + 15: uint16(12608), + 16: uint16(12609), + 17: uint16(12610), + 18: uint16(12611), + 19: uint16(12612), + 20: uint16(12613), + 21: uint16(12614), + 22: uint16(12615), + 23: uint16(12616), + 24: uint16(12617), + 25: uint16(12618), + 26: uint16(12619), + 27: uint16(12620), + 28: uint16(12621), + 29: uint16(12622), + 30: uint16(12623), + 31: uint16(12624), + 32: uint16(12625), + 33: uint16(12626), + 34: uint16(12627), + 35: uint16(12628), + 36: uint16(12629), + 37: uint16(12630), + 38: uint16(12631), + 39: uint16(12632), + 40: uint16(12633), + 41: uint16(12634), + 42: uint16(12635), + 43: uint16(12636), + 44: uint16(12637), + 45: uint16(12638), + 46: uint16(12639), + 47: uint16(12640), + 48: uint16(12641), + 49: uint16(12642), + 50: uint16(12643), + 51: uint16(12644), + 52: uint16(12645), + 53: uint16(12646), + 54: uint16(12647), + 55: uint16(12648), + 56: uint16(12649), + 57: uint16(12650), + 58: uint16(12651), + 59: uint16(12652), + 60: uint16(12653), + 61: uint16(12654), + 62: uint16(12655), + 63: uint16(12656), + 64: uint16(12657), + 65: uint16(12658), + 66: uint16(12659), + 67: uint16(12660), + 68: uint16(12661), + 69: uint16(12662), + 70: uint16(12663), + 71: uint16(12664), + 72: uint16(12665), + 73: uint16(12666), + 74: uint16(12667), + 75: uint16(12668), + 76: uint16(12669), + 77: uint16(12670), + 78: uint16(12671), + 79: uint16(12672), + 80: uint16(12673), + 81: uint16(12674), + 82: uint16(12675), + 83: uint16(12676), + 84: uint16(12677), + 85: uint16(12678), + 86: uint16(12679), + 87: uint16(12680), + 88: uint16(12681), + 89: uint16(12682), + 90: uint16(12683), + 91: uint16(12684), + 92: uint16(12685), + 93: uint16(12686), + }, + 4: { + 0: uint16(8560), + 1: uint16(8561), + 2: uint16(8562), + 3: uint16(8563), + 4: uint16(8564), + 5: uint16(8565), + 6: uint16(8566), + 7: uint16(8567), + 8: uint16(8568), + 9: uint16(8569), + 15: uint16(8544), + 16: uint16(8545), + 17: uint16(8546), + 18: uint16(8547), + 19: uint16(8548), + 20: uint16(8549), + 21: uint16(8550), + 22: uint16(8551), + 23: uint16(8552), + 24: uint16(8553), + 32: uint16(913), + 33: uint16(914), + 34: uint16(915), + 35: uint16(916), + 36: uint16(917), + 37: uint16(918), + 38: uint16(919), + 39: uint16(920), + 40: uint16(921), + 41: uint16(922), + 42: uint16(923), + 43: uint16(924), + 44: uint16(925), + 45: uint16(926), + 46: uint16(927), + 47: uint16(928), + 48: uint16(929), + 49: uint16(931), + 50: uint16(932), + 51: uint16(933), + 52: uint16(934), + 53: uint16(935), + 54: uint16(936), + 55: uint16(937), + 64: uint16(945), + 65: uint16(946), + 66: uint16(947), + 67: uint16(948), + 68: uint16(949), + 69: uint16(950), + 70: uint16(951), + 71: uint16(952), + 72: uint16(953), + 73: uint16(954), + 74: uint16(955), + 75: uint16(956), + 76: uint16(957), + 77: uint16(958), + 78: uint16(959), + 79: uint16(960), + 80: uint16(961), + 81: uint16(963), + 82: uint16(964), + 83: uint16(965), + 84: uint16(966), + 85: uint16(967), + 86: uint16(968), + 87: uint16(969), + }, + 5: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + 32: uint16(9490), + 33: uint16(9489), + 34: uint16(9498), + 35: uint16(9497), + 36: uint16(9494), + 37: uint16(9493), + 38: uint16(9486), + 39: uint16(9485), + 40: uint16(9502), + 41: uint16(9503), + 42: uint16(9505), + 43: uint16(9506), + 44: uint16(9510), + 45: uint16(9511), + 46: uint16(9513), + 47: uint16(9514), + 48: uint16(9517), + 49: uint16(9518), + 50: uint16(9521), + 51: uint16(9522), + 52: uint16(9525), + 53: uint16(9526), + 54: uint16(9529), + 55: uint16(9530), + 56: uint16(9533), + 57: uint16(9534), + 58: uint16(9536), + 59: uint16(9537), + 60: uint16(9539), + 61: uint16(9540), + 62: uint16(9541), + 63: uint16(9542), + 64: uint16(9543), + 65: uint16(9544), + 66: uint16(9545), + 67: uint16(9546), + }, + 6: { + 0: uint16(13205), + 1: uint16(13206), + 2: uint16(13207), + 3: uint16(8467), + 4: uint16(13208), + 5: uint16(13252), + 6: uint16(13219), + 7: uint16(13220), + 8: uint16(13221), + 9: uint16(13222), + 10: uint16(13209), + 11: uint16(13210), + 12: uint16(13211), + 13: uint16(13212), + 14: uint16(13213), + 15: uint16(13214), + 16: uint16(13215), + 17: uint16(13216), + 18: uint16(13217), + 19: uint16(13218), + 20: uint16(13258), + 21: uint16(13197), + 22: uint16(13198), + 23: uint16(13199), + 24: uint16(13263), + 25: uint16(13192), + 26: uint16(13193), + 27: uint16(13256), + 28: uint16(13223), + 29: uint16(13224), + 30: uint16(13232), + 31: uint16(13233), + 32: uint16(13234), + 33: uint16(13235), + 34: uint16(13236), + 35: uint16(13237), + 36: uint16(13238), + 37: uint16(13239), + 38: uint16(13240), + 39: uint16(13241), + 40: uint16(13184), + 41: uint16(13185), + 42: uint16(13186), + 43: uint16(13187), + 44: uint16(13188), + 45: uint16(13242), + 46: uint16(13243), + 47: uint16(13244), + 48: uint16(13245), + 49: uint16(13246), + 50: uint16(13247), + 51: uint16(13200), + 52: uint16(13201), + 53: uint16(13202), + 54: uint16(13203), + 55: uint16(13204), + 56: uint16(8486), + 57: uint16(13248), + 58: uint16(13249), + 59: uint16(13194), + 60: uint16(13195), + 61: uint16(13196), + 62: uint16(13270), + 63: uint16(13253), + 64: uint16(13229), + 65: uint16(13230), + 66: uint16(13231), + 67: uint16(13275), + 68: uint16(13225), + 69: uint16(13226), + 70: uint16(13227), + 71: uint16(13228), + 72: uint16(13277), + 73: uint16(13264), + 74: uint16(13267), + 75: uint16(13251), + 76: uint16(13257), + 77: uint16(13276), + 78: uint16(13254), + }, + 7: { + 0: uint16(198), + 1: uint16(208), + 2: uint16(170), + 3: uint16(294), + 5: uint16(306), + 7: uint16(319), + 8: uint16(321), + 9: uint16(216), + 10: uint16(338), + 11: uint16(186), + 12: uint16(222), + 13: uint16(358), + 14: uint16(330), + 16: uint16(12896), + 17: uint16(12897), + 18: uint16(12898), + 19: uint16(12899), + 20: uint16(12900), + 21: uint16(12901), + 22: uint16(12902), + 23: uint16(12903), + 24: uint16(12904), + 25: uint16(12905), + 26: uint16(12906), + 27: uint16(12907), + 28: uint16(12908), + 29: uint16(12909), + 30: uint16(12910), + 31: uint16(12911), + 32: uint16(12912), + 33: uint16(12913), + 34: uint16(12914), + 35: uint16(12915), + 36: uint16(12916), + 37: uint16(12917), + 38: uint16(12918), + 39: uint16(12919), + 40: uint16(12920), + 41: uint16(12921), + 42: uint16(12922), + 43: uint16(12923), + 44: uint16(9424), + 45: uint16(9425), + 46: uint16(9426), + 47: uint16(9427), + 48: uint16(9428), + 49: uint16(9429), + 50: uint16(9430), + 51: uint16(9431), + 52: uint16(9432), + 53: uint16(9433), + 54: uint16(9434), + 55: uint16(9435), + 56: uint16(9436), + 57: uint16(9437), + 58: uint16(9438), + 59: uint16(9439), + 60: uint16(9440), + 61: uint16(9441), + 62: uint16(9442), + 63: uint16(9443), + 64: uint16(9444), + 65: uint16(9445), + 66: uint16(9446), + 67: uint16(9447), + 68: uint16(9448), + 69: uint16(9449), + 70: uint16(9312), + 71: uint16(9313), + 72: uint16(9314), + 73: uint16(9315), + 74: uint16(9316), + 75: uint16(9317), + 76: uint16(9318), + 77: uint16(9319), + 78: uint16(9320), + 79: uint16(9321), + 80: uint16(9322), + 81: uint16(9323), + 82: uint16(9324), + 83: uint16(9325), + 84: uint16(9326), + 85: uint16(189), + 86: uint16(8531), + 87: uint16(8532), + 88: uint16(188), + 89: uint16(190), + 90: uint16(8539), + 91: uint16(8540), + 92: uint16(8541), + 93: uint16(8542), + }, + 8: { + 0: uint16(230), + 1: uint16(273), + 2: uint16(240), + 3: uint16(295), + 4: uint16(305), + 5: uint16(307), + 6: uint16(312), + 7: uint16(320), + 8: uint16(322), + 9: uint16(248), + 10: uint16(339), + 11: uint16(223), + 12: uint16(254), + 13: uint16(359), + 14: uint16(331), + 15: uint16(329), + 16: uint16(12800), + 17: uint16(12801), + 18: uint16(12802), + 19: uint16(12803), + 20: uint16(12804), + 21: uint16(12805), + 22: uint16(12806), + 23: uint16(12807), + 24: uint16(12808), + 25: uint16(12809), + 26: uint16(12810), + 27: uint16(12811), + 28: uint16(12812), + 29: uint16(12813), + 30: uint16(12814), + 31: uint16(12815), + 32: uint16(12816), + 33: uint16(12817), + 34: uint16(12818), + 35: uint16(12819), + 36: uint16(12820), + 37: uint16(12821), + 38: uint16(12822), + 39: uint16(12823), + 40: uint16(12824), + 41: uint16(12825), + 42: uint16(12826), + 43: uint16(12827), + 44: uint16(9372), + 45: uint16(9373), + 46: uint16(9374), + 47: uint16(9375), + 48: uint16(9376), + 49: uint16(9377), + 50: uint16(9378), + 51: uint16(9379), + 52: uint16(9380), + 53: uint16(9381), + 54: uint16(9382), + 55: uint16(9383), + 56: uint16(9384), + 57: uint16(9385), + 58: uint16(9386), + 59: uint16(9387), + 60: uint16(9388), + 61: uint16(9389), + 62: uint16(9390), + 63: uint16(9391), + 64: uint16(9392), + 65: uint16(9393), + 66: uint16(9394), + 67: uint16(9395), + 68: uint16(9396), + 69: uint16(9397), + 70: uint16(9332), + 71: uint16(9333), + 72: uint16(9334), + 73: uint16(9335), + 74: uint16(9336), + 75: uint16(9337), + 76: uint16(9338), + 77: uint16(9339), + 78: uint16(9340), + 79: uint16(9341), + 80: uint16(9342), + 81: uint16(9343), + 82: uint16(9344), + 83: uint16(9345), + 84: uint16(9346), + 85: uint16(185), + 86: uint16(178), + 87: uint16(179), + 88: uint16(8308), + 89: uint16(8319), + 90: uint16(8321), + 91: uint16(8322), + 92: uint16(8323), + 93: uint16(8324), + }, + 9: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 10: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 11: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(44032), + 1: uint16(44033), + 2: uint16(44036), + 3: uint16(44039), + 4: uint16(44040), + 5: uint16(44041), + 6: uint16(44042), + 7: uint16(44048), + 8: uint16(44049), + 9: uint16(44050), + 10: uint16(44051), + 11: uint16(44052), + 12: uint16(44053), + 13: uint16(44054), + 14: uint16(44055), + 15: uint16(44057), + 16: uint16(44058), + 17: uint16(44059), + 18: uint16(44060), + 19: uint16(44061), + 20: uint16(44064), + 21: uint16(44068), + 22: uint16(44076), + 23: uint16(44077), + 24: uint16(44079), + 25: uint16(44080), + 26: uint16(44081), + 27: uint16(44088), + 28: uint16(44089), + 29: uint16(44092), + 30: uint16(44096), + 31: uint16(44107), + 32: uint16(44109), + 33: uint16(44116), + 34: uint16(44120), + 35: uint16(44124), + 36: uint16(44144), + 37: uint16(44145), + 38: uint16(44148), + 39: uint16(44151), + 40: uint16(44152), + 41: uint16(44154), + 42: uint16(44160), + 43: uint16(44161), + 44: uint16(44163), + 45: uint16(44164), + 46: uint16(44165), + 47: uint16(44166), + 48: uint16(44169), + 49: uint16(44170), + 50: uint16(44171), + 51: uint16(44172), + 52: uint16(44176), + 53: uint16(44180), + 54: uint16(44188), + 55: uint16(44189), + 56: uint16(44191), + 57: uint16(44192), + 58: uint16(44193), + 59: uint16(44200), + 60: uint16(44201), + 61: uint16(44202), + 62: uint16(44204), + 63: uint16(44207), + 64: uint16(44208), + 65: uint16(44216), + 66: uint16(44217), + 67: uint16(44219), + 68: uint16(44220), + 69: uint16(44221), + 70: uint16(44225), + 71: uint16(44228), + 72: uint16(44232), + 73: uint16(44236), + 74: uint16(44245), + 75: uint16(44247), + 76: uint16(44256), + 77: uint16(44257), + 78: uint16(44260), + 79: uint16(44263), + 80: uint16(44264), + 81: uint16(44266), + 82: uint16(44268), + 83: uint16(44271), + 84: uint16(44272), + 85: uint16(44273), + 86: uint16(44275), + 87: uint16(44277), + 88: uint16(44278), + 89: uint16(44284), + 90: uint16(44285), + 91: uint16(44288), + 92: uint16(44292), + 93: uint16(44294), + }, + 16: { + 0: uint16(44300), + 1: uint16(44301), + 2: uint16(44303), + 3: uint16(44305), + 4: uint16(44312), + 5: uint16(44316), + 6: uint16(44320), + 7: uint16(44329), + 8: uint16(44332), + 9: uint16(44333), + 10: uint16(44340), + 11: uint16(44341), + 12: uint16(44344), + 13: uint16(44348), + 14: uint16(44356), + 15: uint16(44357), + 16: uint16(44359), + 17: uint16(44361), + 18: uint16(44368), + 19: uint16(44372), + 20: uint16(44376), + 21: uint16(44385), + 22: uint16(44387), + 23: uint16(44396), + 24: uint16(44397), + 25: uint16(44400), + 26: uint16(44403), + 27: uint16(44404), + 28: uint16(44405), + 29: uint16(44406), + 30: uint16(44411), + 31: uint16(44412), + 32: uint16(44413), + 33: uint16(44415), + 34: uint16(44417), + 35: uint16(44418), + 36: uint16(44424), + 37: uint16(44425), + 38: uint16(44428), + 39: uint16(44432), + 40: uint16(44444), + 41: uint16(44445), + 42: uint16(44452), + 43: uint16(44471), + 44: uint16(44480), + 45: uint16(44481), + 46: uint16(44484), + 47: uint16(44488), + 48: uint16(44496), + 49: uint16(44497), + 50: uint16(44499), + 51: uint16(44508), + 52: uint16(44512), + 53: uint16(44516), + 54: uint16(44536), + 55: uint16(44537), + 56: uint16(44540), + 57: uint16(44543), + 58: uint16(44544), + 59: uint16(44545), + 60: uint16(44552), + 61: uint16(44553), + 62: uint16(44555), + 63: uint16(44557), + 64: uint16(44564), + 65: uint16(44592), + 66: uint16(44593), + 67: uint16(44596), + 68: uint16(44599), + 69: uint16(44600), + 70: uint16(44602), + 71: uint16(44608), + 72: uint16(44609), + 73: uint16(44611), + 74: uint16(44613), + 75: uint16(44614), + 76: uint16(44618), + 77: uint16(44620), + 78: uint16(44621), + 79: uint16(44622), + 80: uint16(44624), + 81: uint16(44628), + 82: uint16(44630), + 83: uint16(44636), + 84: uint16(44637), + 85: uint16(44639), + 86: uint16(44640), + 87: uint16(44641), + 88: uint16(44645), + 89: uint16(44648), + 90: uint16(44649), + 91: uint16(44652), + 92: uint16(44656), + 93: uint16(44664), + }, + 17: { + 0: uint16(44665), + 1: uint16(44667), + 2: uint16(44668), + 3: uint16(44669), + 4: uint16(44676), + 5: uint16(44677), + 6: uint16(44684), + 7: uint16(44732), + 8: uint16(44733), + 9: uint16(44734), + 10: uint16(44736), + 11: uint16(44740), + 12: uint16(44748), + 13: uint16(44749), + 14: uint16(44751), + 15: uint16(44752), + 16: uint16(44753), + 17: uint16(44760), + 18: uint16(44761), + 19: uint16(44764), + 20: uint16(44776), + 21: uint16(44779), + 22: uint16(44781), + 23: uint16(44788), + 24: uint16(44792), + 25: uint16(44796), + 26: uint16(44807), + 27: uint16(44808), + 28: uint16(44813), + 29: uint16(44816), + 30: uint16(44844), + 31: uint16(44845), + 32: uint16(44848), + 33: uint16(44850), + 34: uint16(44852), + 35: uint16(44860), + 36: uint16(44861), + 37: uint16(44863), + 38: uint16(44865), + 39: uint16(44866), + 40: uint16(44867), + 41: uint16(44872), + 42: uint16(44873), + 43: uint16(44880), + 44: uint16(44892), + 45: uint16(44893), + 46: uint16(44900), + 47: uint16(44901), + 48: uint16(44921), + 49: uint16(44928), + 50: uint16(44932), + 51: uint16(44936), + 52: uint16(44944), + 53: uint16(44945), + 54: uint16(44949), + 55: uint16(44956), + 56: uint16(44984), + 57: uint16(44985), + 58: uint16(44988), + 59: uint16(44992), + 60: uint16(44999), + 61: uint16(45000), + 62: uint16(45001), + 63: uint16(45003), + 64: uint16(45005), + 65: uint16(45006), + 66: uint16(45012), + 67: uint16(45020), + 68: uint16(45032), + 69: uint16(45033), + 70: uint16(45040), + 71: uint16(45041), + 72: uint16(45044), + 73: uint16(45048), + 74: uint16(45056), + 75: uint16(45057), + 76: uint16(45060), + 77: uint16(45068), + 78: uint16(45072), + 79: uint16(45076), + 80: uint16(45084), + 81: uint16(45085), + 82: uint16(45096), + 83: uint16(45124), + 84: uint16(45125), + 85: uint16(45128), + 86: uint16(45130), + 87: uint16(45132), + 88: uint16(45134), + 89: uint16(45139), + 90: uint16(45140), + 91: uint16(45141), + 92: uint16(45143), + 93: uint16(45145), + }, + 18: { + 0: uint16(45149), + 1: uint16(45180), + 2: uint16(45181), + 3: uint16(45184), + 4: uint16(45188), + 5: uint16(45196), + 6: uint16(45197), + 7: uint16(45199), + 8: uint16(45201), + 9: uint16(45208), + 10: uint16(45209), + 11: uint16(45210), + 12: uint16(45212), + 13: uint16(45215), + 14: uint16(45216), + 15: uint16(45217), + 16: uint16(45218), + 17: uint16(45224), + 18: uint16(45225), + 19: uint16(45227), + 20: uint16(45228), + 21: uint16(45229), + 22: uint16(45230), + 23: uint16(45231), + 24: uint16(45233), + 25: uint16(45235), + 26: uint16(45236), + 27: uint16(45237), + 28: uint16(45240), + 29: uint16(45244), + 30: uint16(45252), + 31: uint16(45253), + 32: uint16(45255), + 33: uint16(45256), + 34: uint16(45257), + 35: uint16(45264), + 36: uint16(45265), + 37: uint16(45268), + 38: uint16(45272), + 39: uint16(45280), + 40: uint16(45285), + 41: uint16(45320), + 42: uint16(45321), + 43: uint16(45323), + 44: uint16(45324), + 45: uint16(45328), + 46: uint16(45330), + 47: uint16(45331), + 48: uint16(45336), + 49: uint16(45337), + 50: uint16(45339), + 51: uint16(45340), + 52: uint16(45341), + 53: uint16(45347), + 54: uint16(45348), + 55: uint16(45349), + 56: uint16(45352), + 57: uint16(45356), + 58: uint16(45364), + 59: uint16(45365), + 60: uint16(45367), + 61: uint16(45368), + 62: uint16(45369), + 63: uint16(45376), + 64: uint16(45377), + 65: uint16(45380), + 66: uint16(45384), + 67: uint16(45392), + 68: uint16(45393), + 69: uint16(45396), + 70: uint16(45397), + 71: uint16(45400), + 72: uint16(45404), + 73: uint16(45408), + 74: uint16(45432), + 75: uint16(45433), + 76: uint16(45436), + 77: uint16(45440), + 78: uint16(45442), + 79: uint16(45448), + 80: uint16(45449), + 81: uint16(45451), + 82: uint16(45453), + 83: uint16(45458), + 84: uint16(45459), + 85: uint16(45460), + 86: uint16(45464), + 87: uint16(45468), + 88: uint16(45480), + 89: uint16(45516), + 90: uint16(45520), + 91: uint16(45524), + 92: uint16(45532), + 93: uint16(45533), + }, + 19: { + 0: uint16(45535), + 1: uint16(45544), + 2: uint16(45545), + 3: uint16(45548), + 4: uint16(45552), + 5: uint16(45561), + 6: uint16(45563), + 7: uint16(45565), + 8: uint16(45572), + 9: uint16(45573), + 10: uint16(45576), + 11: uint16(45579), + 12: uint16(45580), + 13: uint16(45588), + 14: uint16(45589), + 15: uint16(45591), + 16: uint16(45593), + 17: uint16(45600), + 18: uint16(45620), + 19: uint16(45628), + 20: uint16(45656), + 21: uint16(45660), + 22: uint16(45664), + 23: uint16(45672), + 24: uint16(45673), + 25: uint16(45684), + 26: uint16(45685), + 27: uint16(45692), + 28: uint16(45700), + 29: uint16(45701), + 30: uint16(45705), + 31: uint16(45712), + 32: uint16(45713), + 33: uint16(45716), + 34: uint16(45720), + 35: uint16(45721), + 36: uint16(45722), + 37: uint16(45728), + 38: uint16(45729), + 39: uint16(45731), + 40: uint16(45733), + 41: uint16(45734), + 42: uint16(45738), + 43: uint16(45740), + 44: uint16(45744), + 45: uint16(45748), + 46: uint16(45768), + 47: uint16(45769), + 48: uint16(45772), + 49: uint16(45776), + 50: uint16(45778), + 51: uint16(45784), + 52: uint16(45785), + 53: uint16(45787), + 54: uint16(45789), + 55: uint16(45794), + 56: uint16(45796), + 57: uint16(45797), + 58: uint16(45798), + 59: uint16(45800), + 60: uint16(45803), + 61: uint16(45804), + 62: uint16(45805), + 63: uint16(45806), + 64: uint16(45807), + 65: uint16(45811), + 66: uint16(45812), + 67: uint16(45813), + 68: uint16(45815), + 69: uint16(45816), + 70: uint16(45817), + 71: uint16(45818), + 72: uint16(45819), + 73: uint16(45823), + 74: uint16(45824), + 75: uint16(45825), + 76: uint16(45828), + 77: uint16(45832), + 78: uint16(45840), + 79: uint16(45841), + 80: uint16(45843), + 81: uint16(45844), + 82: uint16(45845), + 83: uint16(45852), + 84: uint16(45908), + 85: uint16(45909), + 86: uint16(45910), + 87: uint16(45912), + 88: uint16(45915), + 89: uint16(45916), + 90: uint16(45918), + 91: uint16(45919), + 92: uint16(45924), + 93: uint16(45925), + }, + 20: { + 0: uint16(45927), + 1: uint16(45929), + 2: uint16(45931), + 3: uint16(45934), + 4: uint16(45936), + 5: uint16(45937), + 6: uint16(45940), + 7: uint16(45944), + 8: uint16(45952), + 9: uint16(45953), + 10: uint16(45955), + 11: uint16(45956), + 12: uint16(45957), + 13: uint16(45964), + 14: uint16(45968), + 15: uint16(45972), + 16: uint16(45984), + 17: uint16(45985), + 18: uint16(45992), + 19: uint16(45996), + 20: uint16(46020), + 21: uint16(46021), + 22: uint16(46024), + 23: uint16(46027), + 24: uint16(46028), + 25: uint16(46030), + 26: uint16(46032), + 27: uint16(46036), + 28: uint16(46037), + 29: uint16(46039), + 30: uint16(46041), + 31: uint16(46043), + 32: uint16(46045), + 33: uint16(46048), + 34: uint16(46052), + 35: uint16(46056), + 36: uint16(46076), + 37: uint16(46096), + 38: uint16(46104), + 39: uint16(46108), + 40: uint16(46112), + 41: uint16(46120), + 42: uint16(46121), + 43: uint16(46123), + 44: uint16(46132), + 45: uint16(46160), + 46: uint16(46161), + 47: uint16(46164), + 48: uint16(46168), + 49: uint16(46176), + 50: uint16(46177), + 51: uint16(46179), + 52: uint16(46181), + 53: uint16(46188), + 54: uint16(46208), + 55: uint16(46216), + 56: uint16(46237), + 57: uint16(46244), + 58: uint16(46248), + 59: uint16(46252), + 60: uint16(46261), + 61: uint16(46263), + 62: uint16(46265), + 63: uint16(46272), + 64: uint16(46276), + 65: uint16(46280), + 66: uint16(46288), + 67: uint16(46293), + 68: uint16(46300), + 69: uint16(46301), + 70: uint16(46304), + 71: uint16(46307), + 72: uint16(46308), + 73: uint16(46310), + 74: uint16(46316), + 75: uint16(46317), + 76: uint16(46319), + 77: uint16(46321), + 78: uint16(46328), + 79: uint16(46356), + 80: uint16(46357), + 81: uint16(46360), + 82: uint16(46363), + 83: uint16(46364), + 84: uint16(46372), + 85: uint16(46373), + 86: uint16(46375), + 87: uint16(46376), + 88: uint16(46377), + 89: uint16(46378), + 90: uint16(46384), + 91: uint16(46385), + 92: uint16(46388), + 93: uint16(46392), + }, + 21: { + 0: uint16(46400), + 1: uint16(46401), + 2: uint16(46403), + 3: uint16(46404), + 4: uint16(46405), + 5: uint16(46411), + 6: uint16(46412), + 7: uint16(46413), + 8: uint16(46416), + 9: uint16(46420), + 10: uint16(46428), + 11: uint16(46429), + 12: uint16(46431), + 13: uint16(46432), + 14: uint16(46433), + 15: uint16(46496), + 16: uint16(46497), + 17: uint16(46500), + 18: uint16(46504), + 19: uint16(46506), + 20: uint16(46507), + 21: uint16(46512), + 22: uint16(46513), + 23: uint16(46515), + 24: uint16(46516), + 25: uint16(46517), + 26: uint16(46523), + 27: uint16(46524), + 28: uint16(46525), + 29: uint16(46528), + 30: uint16(46532), + 31: uint16(46540), + 32: uint16(46541), + 33: uint16(46543), + 34: uint16(46544), + 35: uint16(46545), + 36: uint16(46552), + 37: uint16(46572), + 38: uint16(46608), + 39: uint16(46609), + 40: uint16(46612), + 41: uint16(46616), + 42: uint16(46629), + 43: uint16(46636), + 44: uint16(46644), + 45: uint16(46664), + 46: uint16(46692), + 47: uint16(46696), + 48: uint16(46748), + 49: uint16(46749), + 50: uint16(46752), + 51: uint16(46756), + 52: uint16(46763), + 53: uint16(46764), + 54: uint16(46769), + 55: uint16(46804), + 56: uint16(46832), + 57: uint16(46836), + 58: uint16(46840), + 59: uint16(46848), + 60: uint16(46849), + 61: uint16(46853), + 62: uint16(46888), + 63: uint16(46889), + 64: uint16(46892), + 65: uint16(46895), + 66: uint16(46896), + 67: uint16(46904), + 68: uint16(46905), + 69: uint16(46907), + 70: uint16(46916), + 71: uint16(46920), + 72: uint16(46924), + 73: uint16(46932), + 74: uint16(46933), + 75: uint16(46944), + 76: uint16(46948), + 77: uint16(46952), + 78: uint16(46960), + 79: uint16(46961), + 80: uint16(46963), + 81: uint16(46965), + 82: uint16(46972), + 83: uint16(46973), + 84: uint16(46976), + 85: uint16(46980), + 86: uint16(46988), + 87: uint16(46989), + 88: uint16(46991), + 89: uint16(46992), + 90: uint16(46993), + 91: uint16(46994), + 92: uint16(46998), + 93: uint16(46999), + }, + 22: { + 0: uint16(47000), + 1: uint16(47001), + 2: uint16(47004), + 3: uint16(47008), + 4: uint16(47016), + 5: uint16(47017), + 6: uint16(47019), + 7: uint16(47020), + 8: uint16(47021), + 9: uint16(47028), + 10: uint16(47029), + 11: uint16(47032), + 12: uint16(47047), + 13: uint16(47049), + 14: uint16(47084), + 15: uint16(47085), + 16: uint16(47088), + 17: uint16(47092), + 18: uint16(47100), + 19: uint16(47101), + 20: uint16(47103), + 21: uint16(47104), + 22: uint16(47105), + 23: uint16(47111), + 24: uint16(47112), + 25: uint16(47113), + 26: uint16(47116), + 27: uint16(47120), + 28: uint16(47128), + 29: uint16(47129), + 30: uint16(47131), + 31: uint16(47133), + 32: uint16(47140), + 33: uint16(47141), + 34: uint16(47144), + 35: uint16(47148), + 36: uint16(47156), + 37: uint16(47157), + 38: uint16(47159), + 39: uint16(47160), + 40: uint16(47161), + 41: uint16(47168), + 42: uint16(47172), + 43: uint16(47185), + 44: uint16(47187), + 45: uint16(47196), + 46: uint16(47197), + 47: uint16(47200), + 48: uint16(47204), + 49: uint16(47212), + 50: uint16(47213), + 51: uint16(47215), + 52: uint16(47217), + 53: uint16(47224), + 54: uint16(47228), + 55: uint16(47245), + 56: uint16(47272), + 57: uint16(47280), + 58: uint16(47284), + 59: uint16(47288), + 60: uint16(47296), + 61: uint16(47297), + 62: uint16(47299), + 63: uint16(47301), + 64: uint16(47308), + 65: uint16(47312), + 66: uint16(47316), + 67: uint16(47325), + 68: uint16(47327), + 69: uint16(47329), + 70: uint16(47336), + 71: uint16(47337), + 72: uint16(47340), + 73: uint16(47344), + 74: uint16(47352), + 75: uint16(47353), + 76: uint16(47355), + 77: uint16(47357), + 78: uint16(47364), + 79: uint16(47384), + 80: uint16(47392), + 81: uint16(47420), + 82: uint16(47421), + 83: uint16(47424), + 84: uint16(47428), + 85: uint16(47436), + 86: uint16(47439), + 87: uint16(47441), + 88: uint16(47448), + 89: uint16(47449), + 90: uint16(47452), + 91: uint16(47456), + 92: uint16(47464), + 93: uint16(47465), + }, + 23: { + 0: uint16(47467), + 1: uint16(47469), + 2: uint16(47476), + 3: uint16(47477), + 4: uint16(47480), + 5: uint16(47484), + 6: uint16(47492), + 7: uint16(47493), + 8: uint16(47495), + 9: uint16(47497), + 10: uint16(47498), + 11: uint16(47501), + 12: uint16(47502), + 13: uint16(47532), + 14: uint16(47533), + 15: uint16(47536), + 16: uint16(47540), + 17: uint16(47548), + 18: uint16(47549), + 19: uint16(47551), + 20: uint16(47553), + 21: uint16(47560), + 22: uint16(47561), + 23: uint16(47564), + 24: uint16(47566), + 25: uint16(47567), + 26: uint16(47568), + 27: uint16(47569), + 28: uint16(47570), + 29: uint16(47576), + 30: uint16(47577), + 31: uint16(47579), + 32: uint16(47581), + 33: uint16(47582), + 34: uint16(47585), + 35: uint16(47587), + 36: uint16(47588), + 37: uint16(47589), + 38: uint16(47592), + 39: uint16(47596), + 40: uint16(47604), + 41: uint16(47605), + 42: uint16(47607), + 43: uint16(47608), + 44: uint16(47609), + 45: uint16(47610), + 46: uint16(47616), + 47: uint16(47617), + 48: uint16(47624), + 49: uint16(47637), + 50: uint16(47672), + 51: uint16(47673), + 52: uint16(47676), + 53: uint16(47680), + 54: uint16(47682), + 55: uint16(47688), + 56: uint16(47689), + 57: uint16(47691), + 58: uint16(47693), + 59: uint16(47694), + 60: uint16(47699), + 61: uint16(47700), + 62: uint16(47701), + 63: uint16(47704), + 64: uint16(47708), + 65: uint16(47716), + 66: uint16(47717), + 67: uint16(47719), + 68: uint16(47720), + 69: uint16(47721), + 70: uint16(47728), + 71: uint16(47729), + 72: uint16(47732), + 73: uint16(47736), + 74: uint16(47747), + 75: uint16(47748), + 76: uint16(47749), + 77: uint16(47751), + 78: uint16(47756), + 79: uint16(47784), + 80: uint16(47785), + 81: uint16(47787), + 82: uint16(47788), + 83: uint16(47792), + 84: uint16(47794), + 85: uint16(47800), + 86: uint16(47801), + 87: uint16(47803), + 88: uint16(47805), + 89: uint16(47812), + 90: uint16(47816), + 91: uint16(47832), + 92: uint16(47833), + 93: uint16(47868), + }, + 24: { + 0: uint16(47872), + 1: uint16(47876), + 2: uint16(47885), + 3: uint16(47887), + 4: uint16(47889), + 5: uint16(47896), + 6: uint16(47900), + 7: uint16(47904), + 8: uint16(47913), + 9: uint16(47915), + 10: uint16(47924), + 11: uint16(47925), + 12: uint16(47926), + 13: uint16(47928), + 14: uint16(47931), + 15: uint16(47932), + 16: uint16(47933), + 17: uint16(47934), + 18: uint16(47940), + 19: uint16(47941), + 20: uint16(47943), + 21: uint16(47945), + 22: uint16(47949), + 23: uint16(47951), + 24: uint16(47952), + 25: uint16(47956), + 26: uint16(47960), + 27: uint16(47969), + 28: uint16(47971), + 29: uint16(47980), + 30: uint16(48008), + 31: uint16(48012), + 32: uint16(48016), + 33: uint16(48036), + 34: uint16(48040), + 35: uint16(48044), + 36: uint16(48052), + 37: uint16(48055), + 38: uint16(48064), + 39: uint16(48068), + 40: uint16(48072), + 41: uint16(48080), + 42: uint16(48083), + 43: uint16(48120), + 44: uint16(48121), + 45: uint16(48124), + 46: uint16(48127), + 47: uint16(48128), + 48: uint16(48130), + 49: uint16(48136), + 50: uint16(48137), + 51: uint16(48139), + 52: uint16(48140), + 53: uint16(48141), + 54: uint16(48143), + 55: uint16(48145), + 56: uint16(48148), + 57: uint16(48149), + 58: uint16(48150), + 59: uint16(48151), + 60: uint16(48152), + 61: uint16(48155), + 62: uint16(48156), + 63: uint16(48157), + 64: uint16(48158), + 65: uint16(48159), + 66: uint16(48164), + 67: uint16(48165), + 68: uint16(48167), + 69: uint16(48169), + 70: uint16(48173), + 71: uint16(48176), + 72: uint16(48177), + 73: uint16(48180), + 74: uint16(48184), + 75: uint16(48192), + 76: uint16(48193), + 77: uint16(48195), + 78: uint16(48196), + 79: uint16(48197), + 80: uint16(48201), + 81: uint16(48204), + 82: uint16(48205), + 83: uint16(48208), + 84: uint16(48221), + 85: uint16(48260), + 86: uint16(48261), + 87: uint16(48264), + 88: uint16(48267), + 89: uint16(48268), + 90: uint16(48270), + 91: uint16(48276), + 92: uint16(48277), + 93: uint16(48279), + }, + 25: { + 0: uint16(48281), + 1: uint16(48282), + 2: uint16(48288), + 3: uint16(48289), + 4: uint16(48292), + 5: uint16(48295), + 6: uint16(48296), + 7: uint16(48304), + 8: uint16(48305), + 9: uint16(48307), + 10: uint16(48308), + 11: uint16(48309), + 12: uint16(48316), + 13: uint16(48317), + 14: uint16(48320), + 15: uint16(48324), + 16: uint16(48333), + 17: uint16(48335), + 18: uint16(48336), + 19: uint16(48337), + 20: uint16(48341), + 21: uint16(48344), + 22: uint16(48348), + 23: uint16(48372), + 24: uint16(48373), + 25: uint16(48374), + 26: uint16(48376), + 27: uint16(48380), + 28: uint16(48388), + 29: uint16(48389), + 30: uint16(48391), + 31: uint16(48393), + 32: uint16(48400), + 33: uint16(48404), + 34: uint16(48420), + 35: uint16(48428), + 36: uint16(48448), + 37: uint16(48456), + 38: uint16(48457), + 39: uint16(48460), + 40: uint16(48464), + 41: uint16(48472), + 42: uint16(48473), + 43: uint16(48484), + 44: uint16(48488), + 45: uint16(48512), + 46: uint16(48513), + 47: uint16(48516), + 48: uint16(48519), + 49: uint16(48520), + 50: uint16(48521), + 51: uint16(48522), + 52: uint16(48528), + 53: uint16(48529), + 54: uint16(48531), + 55: uint16(48533), + 56: uint16(48537), + 57: uint16(48538), + 58: uint16(48540), + 59: uint16(48548), + 60: uint16(48560), + 61: uint16(48568), + 62: uint16(48596), + 63: uint16(48597), + 64: uint16(48600), + 65: uint16(48604), + 66: uint16(48617), + 67: uint16(48624), + 68: uint16(48628), + 69: uint16(48632), + 70: uint16(48640), + 71: uint16(48643), + 72: uint16(48645), + 73: uint16(48652), + 74: uint16(48653), + 75: uint16(48656), + 76: uint16(48660), + 77: uint16(48668), + 78: uint16(48669), + 79: uint16(48671), + 80: uint16(48708), + 81: uint16(48709), + 82: uint16(48712), + 83: uint16(48716), + 84: uint16(48718), + 85: uint16(48724), + 86: uint16(48725), + 87: uint16(48727), + 88: uint16(48729), + 89: uint16(48730), + 90: uint16(48731), + 91: uint16(48736), + 92: uint16(48737), + 93: uint16(48740), + }, + 26: { + 0: uint16(48744), + 1: uint16(48746), + 2: uint16(48752), + 3: uint16(48753), + 4: uint16(48755), + 5: uint16(48756), + 6: uint16(48757), + 7: uint16(48763), + 8: uint16(48764), + 9: uint16(48765), + 10: uint16(48768), + 11: uint16(48772), + 12: uint16(48780), + 13: uint16(48781), + 14: uint16(48783), + 15: uint16(48784), + 16: uint16(48785), + 17: uint16(48792), + 18: uint16(48793), + 19: uint16(48808), + 20: uint16(48848), + 21: uint16(48849), + 22: uint16(48852), + 23: uint16(48855), + 24: uint16(48856), + 25: uint16(48864), + 26: uint16(48867), + 27: uint16(48868), + 28: uint16(48869), + 29: uint16(48876), + 30: uint16(48897), + 31: uint16(48904), + 32: uint16(48905), + 33: uint16(48920), + 34: uint16(48921), + 35: uint16(48923), + 36: uint16(48924), + 37: uint16(48925), + 38: uint16(48960), + 39: uint16(48961), + 40: uint16(48964), + 41: uint16(48968), + 42: uint16(48976), + 43: uint16(48977), + 44: uint16(48981), + 45: uint16(49044), + 46: uint16(49072), + 47: uint16(49093), + 48: uint16(49100), + 49: uint16(49101), + 50: uint16(49104), + 51: uint16(49108), + 52: uint16(49116), + 53: uint16(49119), + 54: uint16(49121), + 55: uint16(49212), + 56: uint16(49233), + 57: uint16(49240), + 58: uint16(49244), + 59: uint16(49248), + 60: uint16(49256), + 61: uint16(49257), + 62: uint16(49296), + 63: uint16(49297), + 64: uint16(49300), + 65: uint16(49304), + 66: uint16(49312), + 67: uint16(49313), + 68: uint16(49315), + 69: uint16(49317), + 70: uint16(49324), + 71: uint16(49325), + 72: uint16(49327), + 73: uint16(49328), + 74: uint16(49331), + 75: uint16(49332), + 76: uint16(49333), + 77: uint16(49334), + 78: uint16(49340), + 79: uint16(49341), + 80: uint16(49343), + 81: uint16(49344), + 82: uint16(49345), + 83: uint16(49349), + 84: uint16(49352), + 85: uint16(49353), + 86: uint16(49356), + 87: uint16(49360), + 88: uint16(49368), + 89: uint16(49369), + 90: uint16(49371), + 91: uint16(49372), + 92: uint16(49373), + 93: uint16(49380), + }, + 27: { + 0: uint16(49381), + 1: uint16(49384), + 2: uint16(49388), + 3: uint16(49396), + 4: uint16(49397), + 5: uint16(49399), + 6: uint16(49401), + 7: uint16(49408), + 8: uint16(49412), + 9: uint16(49416), + 10: uint16(49424), + 11: uint16(49429), + 12: uint16(49436), + 13: uint16(49437), + 14: uint16(49438), + 15: uint16(49439), + 16: uint16(49440), + 17: uint16(49443), + 18: uint16(49444), + 19: uint16(49446), + 20: uint16(49447), + 21: uint16(49452), + 22: uint16(49453), + 23: uint16(49455), + 24: uint16(49456), + 25: uint16(49457), + 26: uint16(49462), + 27: uint16(49464), + 28: uint16(49465), + 29: uint16(49468), + 30: uint16(49472), + 31: uint16(49480), + 32: uint16(49481), + 33: uint16(49483), + 34: uint16(49484), + 35: uint16(49485), + 36: uint16(49492), + 37: uint16(49493), + 38: uint16(49496), + 39: uint16(49500), + 40: uint16(49508), + 41: uint16(49509), + 42: uint16(49511), + 43: uint16(49512), + 44: uint16(49513), + 45: uint16(49520), + 46: uint16(49524), + 47: uint16(49528), + 48: uint16(49541), + 49: uint16(49548), + 50: uint16(49549), + 51: uint16(49550), + 52: uint16(49552), + 53: uint16(49556), + 54: uint16(49558), + 55: uint16(49564), + 56: uint16(49565), + 57: uint16(49567), + 58: uint16(49569), + 59: uint16(49573), + 60: uint16(49576), + 61: uint16(49577), + 62: uint16(49580), + 63: uint16(49584), + 64: uint16(49597), + 65: uint16(49604), + 66: uint16(49608), + 67: uint16(49612), + 68: uint16(49620), + 69: uint16(49623), + 70: uint16(49624), + 71: uint16(49632), + 72: uint16(49636), + 73: uint16(49640), + 74: uint16(49648), + 75: uint16(49649), + 76: uint16(49651), + 77: uint16(49660), + 78: uint16(49661), + 79: uint16(49664), + 80: uint16(49668), + 81: uint16(49676), + 82: uint16(49677), + 83: uint16(49679), + 84: uint16(49681), + 85: uint16(49688), + 86: uint16(49689), + 87: uint16(49692), + 88: uint16(49695), + 89: uint16(49696), + 90: uint16(49704), + 91: uint16(49705), + 92: uint16(49707), + 93: uint16(49709), + }, + 28: { + 0: uint16(49711), + 1: uint16(49713), + 2: uint16(49714), + 3: uint16(49716), + 4: uint16(49736), + 5: uint16(49744), + 6: uint16(49745), + 7: uint16(49748), + 8: uint16(49752), + 9: uint16(49760), + 10: uint16(49765), + 11: uint16(49772), + 12: uint16(49773), + 13: uint16(49776), + 14: uint16(49780), + 15: uint16(49788), + 16: uint16(49789), + 17: uint16(49791), + 18: uint16(49793), + 19: uint16(49800), + 20: uint16(49801), + 21: uint16(49808), + 22: uint16(49816), + 23: uint16(49819), + 24: uint16(49821), + 25: uint16(49828), + 26: uint16(49829), + 27: uint16(49832), + 28: uint16(49836), + 29: uint16(49837), + 30: uint16(49844), + 31: uint16(49845), + 32: uint16(49847), + 33: uint16(49849), + 34: uint16(49884), + 35: uint16(49885), + 36: uint16(49888), + 37: uint16(49891), + 38: uint16(49892), + 39: uint16(49899), + 40: uint16(49900), + 41: uint16(49901), + 42: uint16(49903), + 43: uint16(49905), + 44: uint16(49910), + 45: uint16(49912), + 46: uint16(49913), + 47: uint16(49915), + 48: uint16(49916), + 49: uint16(49920), + 50: uint16(49928), + 51: uint16(49929), + 52: uint16(49932), + 53: uint16(49933), + 54: uint16(49939), + 55: uint16(49940), + 56: uint16(49941), + 57: uint16(49944), + 58: uint16(49948), + 59: uint16(49956), + 60: uint16(49957), + 61: uint16(49960), + 62: uint16(49961), + 63: uint16(49989), + 64: uint16(50024), + 65: uint16(50025), + 66: uint16(50028), + 67: uint16(50032), + 68: uint16(50034), + 69: uint16(50040), + 70: uint16(50041), + 71: uint16(50044), + 72: uint16(50045), + 73: uint16(50052), + 74: uint16(50056), + 75: uint16(50060), + 76: uint16(50112), + 77: uint16(50136), + 78: uint16(50137), + 79: uint16(50140), + 80: uint16(50143), + 81: uint16(50144), + 82: uint16(50146), + 83: uint16(50152), + 84: uint16(50153), + 85: uint16(50157), + 86: uint16(50164), + 87: uint16(50165), + 88: uint16(50168), + 89: uint16(50184), + 90: uint16(50192), + 91: uint16(50212), + 92: uint16(50220), + 93: uint16(50224), + }, + 29: { + 0: uint16(50228), + 1: uint16(50236), + 2: uint16(50237), + 3: uint16(50248), + 4: uint16(50276), + 5: uint16(50277), + 6: uint16(50280), + 7: uint16(50284), + 8: uint16(50292), + 9: uint16(50293), + 10: uint16(50297), + 11: uint16(50304), + 12: uint16(50324), + 13: uint16(50332), + 14: uint16(50360), + 15: uint16(50364), + 16: uint16(50409), + 17: uint16(50416), + 18: uint16(50417), + 19: uint16(50420), + 20: uint16(50424), + 21: uint16(50426), + 22: uint16(50431), + 23: uint16(50432), + 24: uint16(50433), + 25: uint16(50444), + 26: uint16(50448), + 27: uint16(50452), + 28: uint16(50460), + 29: uint16(50472), + 30: uint16(50473), + 31: uint16(50476), + 32: uint16(50480), + 33: uint16(50488), + 34: uint16(50489), + 35: uint16(50491), + 36: uint16(50493), + 37: uint16(50500), + 38: uint16(50501), + 39: uint16(50504), + 40: uint16(50505), + 41: uint16(50506), + 42: uint16(50508), + 43: uint16(50509), + 44: uint16(50510), + 45: uint16(50515), + 46: uint16(50516), + 47: uint16(50517), + 48: uint16(50519), + 49: uint16(50520), + 50: uint16(50521), + 51: uint16(50525), + 52: uint16(50526), + 53: uint16(50528), + 54: uint16(50529), + 55: uint16(50532), + 56: uint16(50536), + 57: uint16(50544), + 58: uint16(50545), + 59: uint16(50547), + 60: uint16(50548), + 61: uint16(50549), + 62: uint16(50556), + 63: uint16(50557), + 64: uint16(50560), + 65: uint16(50564), + 66: uint16(50567), + 67: uint16(50572), + 68: uint16(50573), + 69: uint16(50575), + 70: uint16(50577), + 71: uint16(50581), + 72: uint16(50583), + 73: uint16(50584), + 74: uint16(50588), + 75: uint16(50592), + 76: uint16(50601), + 77: uint16(50612), + 78: uint16(50613), + 79: uint16(50616), + 80: uint16(50617), + 81: uint16(50619), + 82: uint16(50620), + 83: uint16(50621), + 84: uint16(50622), + 85: uint16(50628), + 86: uint16(50629), + 87: uint16(50630), + 88: uint16(50631), + 89: uint16(50632), + 90: uint16(50633), + 91: uint16(50634), + 92: uint16(50636), + 93: uint16(50638), + }, + 30: { + 0: uint16(50640), + 1: uint16(50641), + 2: uint16(50644), + 3: uint16(50648), + 4: uint16(50656), + 5: uint16(50657), + 6: uint16(50659), + 7: uint16(50661), + 8: uint16(50668), + 9: uint16(50669), + 10: uint16(50670), + 11: uint16(50672), + 12: uint16(50676), + 13: uint16(50678), + 14: uint16(50679), + 15: uint16(50684), + 16: uint16(50685), + 17: uint16(50686), + 18: uint16(50687), + 19: uint16(50688), + 20: uint16(50689), + 21: uint16(50693), + 22: uint16(50694), + 23: uint16(50695), + 24: uint16(50696), + 25: uint16(50700), + 26: uint16(50704), + 27: uint16(50712), + 28: uint16(50713), + 29: uint16(50715), + 30: uint16(50716), + 31: uint16(50724), + 32: uint16(50725), + 33: uint16(50728), + 34: uint16(50732), + 35: uint16(50733), + 36: uint16(50734), + 37: uint16(50736), + 38: uint16(50739), + 39: uint16(50740), + 40: uint16(50741), + 41: uint16(50743), + 42: uint16(50745), + 43: uint16(50747), + 44: uint16(50752), + 45: uint16(50753), + 46: uint16(50756), + 47: uint16(50760), + 48: uint16(50768), + 49: uint16(50769), + 50: uint16(50771), + 51: uint16(50772), + 52: uint16(50773), + 53: uint16(50780), + 54: uint16(50781), + 55: uint16(50784), + 56: uint16(50796), + 57: uint16(50799), + 58: uint16(50801), + 59: uint16(50808), + 60: uint16(50809), + 61: uint16(50812), + 62: uint16(50816), + 63: uint16(50824), + 64: uint16(50825), + 65: uint16(50827), + 66: uint16(50829), + 67: uint16(50836), + 68: uint16(50837), + 69: uint16(50840), + 70: uint16(50844), + 71: uint16(50852), + 72: uint16(50853), + 73: uint16(50855), + 74: uint16(50857), + 75: uint16(50864), + 76: uint16(50865), + 77: uint16(50868), + 78: uint16(50872), + 79: uint16(50873), + 80: uint16(50874), + 81: uint16(50880), + 82: uint16(50881), + 83: uint16(50883), + 84: uint16(50885), + 85: uint16(50892), + 86: uint16(50893), + 87: uint16(50896), + 88: uint16(50900), + 89: uint16(50908), + 90: uint16(50909), + 91: uint16(50912), + 92: uint16(50913), + 93: uint16(50920), + }, + 31: { + 0: uint16(50921), + 1: uint16(50924), + 2: uint16(50928), + 3: uint16(50936), + 4: uint16(50937), + 5: uint16(50941), + 6: uint16(50948), + 7: uint16(50949), + 8: uint16(50952), + 9: uint16(50956), + 10: uint16(50964), + 11: uint16(50965), + 12: uint16(50967), + 13: uint16(50969), + 14: uint16(50976), + 15: uint16(50977), + 16: uint16(50980), + 17: uint16(50984), + 18: uint16(50992), + 19: uint16(50993), + 20: uint16(50995), + 21: uint16(50997), + 22: uint16(50999), + 23: uint16(51004), + 24: uint16(51005), + 25: uint16(51008), + 26: uint16(51012), + 27: uint16(51018), + 28: uint16(51020), + 29: uint16(51021), + 30: uint16(51023), + 31: uint16(51025), + 32: uint16(51026), + 33: uint16(51027), + 34: uint16(51028), + 35: uint16(51029), + 36: uint16(51030), + 37: uint16(51031), + 38: uint16(51032), + 39: uint16(51036), + 40: uint16(51040), + 41: uint16(51048), + 42: uint16(51051), + 43: uint16(51060), + 44: uint16(51061), + 45: uint16(51064), + 46: uint16(51068), + 47: uint16(51069), + 48: uint16(51070), + 49: uint16(51075), + 50: uint16(51076), + 51: uint16(51077), + 52: uint16(51079), + 53: uint16(51080), + 54: uint16(51081), + 55: uint16(51082), + 56: uint16(51086), + 57: uint16(51088), + 58: uint16(51089), + 59: uint16(51092), + 60: uint16(51094), + 61: uint16(51095), + 62: uint16(51096), + 63: uint16(51098), + 64: uint16(51104), + 65: uint16(51105), + 66: uint16(51107), + 67: uint16(51108), + 68: uint16(51109), + 69: uint16(51110), + 70: uint16(51116), + 71: uint16(51117), + 72: uint16(51120), + 73: uint16(51124), + 74: uint16(51132), + 75: uint16(51133), + 76: uint16(51135), + 77: uint16(51136), + 78: uint16(51137), + 79: uint16(51144), + 80: uint16(51145), + 81: uint16(51148), + 82: uint16(51150), + 83: uint16(51152), + 84: uint16(51160), + 85: uint16(51165), + 86: uint16(51172), + 87: uint16(51176), + 88: uint16(51180), + 89: uint16(51200), + 90: uint16(51201), + 91: uint16(51204), + 92: uint16(51208), + 93: uint16(51210), + }, + 32: { + 0: uint16(51216), + 1: uint16(51217), + 2: uint16(51219), + 3: uint16(51221), + 4: uint16(51222), + 5: uint16(51228), + 6: uint16(51229), + 7: uint16(51232), + 8: uint16(51236), + 9: uint16(51244), + 10: uint16(51245), + 11: uint16(51247), + 12: uint16(51249), + 13: uint16(51256), + 14: uint16(51260), + 15: uint16(51264), + 16: uint16(51272), + 17: uint16(51273), + 18: uint16(51276), + 19: uint16(51277), + 20: uint16(51284), + 21: uint16(51312), + 22: uint16(51313), + 23: uint16(51316), + 24: uint16(51320), + 25: uint16(51322), + 26: uint16(51328), + 27: uint16(51329), + 28: uint16(51331), + 29: uint16(51333), + 30: uint16(51334), + 31: uint16(51335), + 32: uint16(51339), + 33: uint16(51340), + 34: uint16(51341), + 35: uint16(51348), + 36: uint16(51357), + 37: uint16(51359), + 38: uint16(51361), + 39: uint16(51368), + 40: uint16(51388), + 41: uint16(51389), + 42: uint16(51396), + 43: uint16(51400), + 44: uint16(51404), + 45: uint16(51412), + 46: uint16(51413), + 47: uint16(51415), + 48: uint16(51417), + 49: uint16(51424), + 50: uint16(51425), + 51: uint16(51428), + 52: uint16(51445), + 53: uint16(51452), + 54: uint16(51453), + 55: uint16(51456), + 56: uint16(51460), + 57: uint16(51461), + 58: uint16(51462), + 59: uint16(51468), + 60: uint16(51469), + 61: uint16(51471), + 62: uint16(51473), + 63: uint16(51480), + 64: uint16(51500), + 65: uint16(51508), + 66: uint16(51536), + 67: uint16(51537), + 68: uint16(51540), + 69: uint16(51544), + 70: uint16(51552), + 71: uint16(51553), + 72: uint16(51555), + 73: uint16(51564), + 74: uint16(51568), + 75: uint16(51572), + 76: uint16(51580), + 77: uint16(51592), + 78: uint16(51593), + 79: uint16(51596), + 80: uint16(51600), + 81: uint16(51608), + 82: uint16(51609), + 83: uint16(51611), + 84: uint16(51613), + 85: uint16(51648), + 86: uint16(51649), + 87: uint16(51652), + 88: uint16(51655), + 89: uint16(51656), + 90: uint16(51658), + 91: uint16(51664), + 92: uint16(51665), + 93: uint16(51667), + }, + 33: { + 0: uint16(51669), + 1: uint16(51670), + 2: uint16(51673), + 3: uint16(51674), + 4: uint16(51676), + 5: uint16(51677), + 6: uint16(51680), + 7: uint16(51682), + 8: uint16(51684), + 9: uint16(51687), + 10: uint16(51692), + 11: uint16(51693), + 12: uint16(51695), + 13: uint16(51696), + 14: uint16(51697), + 15: uint16(51704), + 16: uint16(51705), + 17: uint16(51708), + 18: uint16(51712), + 19: uint16(51720), + 20: uint16(51721), + 21: uint16(51723), + 22: uint16(51724), + 23: uint16(51725), + 24: uint16(51732), + 25: uint16(51736), + 26: uint16(51753), + 27: uint16(51788), + 28: uint16(51789), + 29: uint16(51792), + 30: uint16(51796), + 31: uint16(51804), + 32: uint16(51805), + 33: uint16(51807), + 34: uint16(51808), + 35: uint16(51809), + 36: uint16(51816), + 37: uint16(51837), + 38: uint16(51844), + 39: uint16(51864), + 40: uint16(51900), + 41: uint16(51901), + 42: uint16(51904), + 43: uint16(51908), + 44: uint16(51916), + 45: uint16(51917), + 46: uint16(51919), + 47: uint16(51921), + 48: uint16(51923), + 49: uint16(51928), + 50: uint16(51929), + 51: uint16(51936), + 52: uint16(51948), + 53: uint16(51956), + 54: uint16(51976), + 55: uint16(51984), + 56: uint16(51988), + 57: uint16(51992), + 58: uint16(52000), + 59: uint16(52001), + 60: uint16(52033), + 61: uint16(52040), + 62: uint16(52041), + 63: uint16(52044), + 64: uint16(52048), + 65: uint16(52056), + 66: uint16(52057), + 67: uint16(52061), + 68: uint16(52068), + 69: uint16(52088), + 70: uint16(52089), + 71: uint16(52124), + 72: uint16(52152), + 73: uint16(52180), + 74: uint16(52196), + 75: uint16(52199), + 76: uint16(52201), + 77: uint16(52236), + 78: uint16(52237), + 79: uint16(52240), + 80: uint16(52244), + 81: uint16(52252), + 82: uint16(52253), + 83: uint16(52257), + 84: uint16(52258), + 85: uint16(52263), + 86: uint16(52264), + 87: uint16(52265), + 88: uint16(52268), + 89: uint16(52270), + 90: uint16(52272), + 91: uint16(52280), + 92: uint16(52281), + 93: uint16(52283), + }, + 34: { + 0: uint16(52284), + 1: uint16(52285), + 2: uint16(52286), + 3: uint16(52292), + 4: uint16(52293), + 5: uint16(52296), + 6: uint16(52300), + 7: uint16(52308), + 8: uint16(52309), + 9: uint16(52311), + 10: uint16(52312), + 11: uint16(52313), + 12: uint16(52320), + 13: uint16(52324), + 14: uint16(52326), + 15: uint16(52328), + 16: uint16(52336), + 17: uint16(52341), + 18: uint16(52376), + 19: uint16(52377), + 20: uint16(52380), + 21: uint16(52384), + 22: uint16(52392), + 23: uint16(52393), + 24: uint16(52395), + 25: uint16(52396), + 26: uint16(52397), + 27: uint16(52404), + 28: uint16(52405), + 29: uint16(52408), + 30: uint16(52412), + 31: uint16(52420), + 32: uint16(52421), + 33: uint16(52423), + 34: uint16(52425), + 35: uint16(52432), + 36: uint16(52436), + 37: uint16(52452), + 38: uint16(52460), + 39: uint16(52464), + 40: uint16(52481), + 41: uint16(52488), + 42: uint16(52489), + 43: uint16(52492), + 44: uint16(52496), + 45: uint16(52504), + 46: uint16(52505), + 47: uint16(52507), + 48: uint16(52509), + 49: uint16(52516), + 50: uint16(52520), + 51: uint16(52524), + 52: uint16(52537), + 53: uint16(52572), + 54: uint16(52576), + 55: uint16(52580), + 56: uint16(52588), + 57: uint16(52589), + 58: uint16(52591), + 59: uint16(52593), + 60: uint16(52600), + 61: uint16(52616), + 62: uint16(52628), + 63: uint16(52629), + 64: uint16(52632), + 65: uint16(52636), + 66: uint16(52644), + 67: uint16(52645), + 68: uint16(52647), + 69: uint16(52649), + 70: uint16(52656), + 71: uint16(52676), + 72: uint16(52684), + 73: uint16(52688), + 74: uint16(52712), + 75: uint16(52716), + 76: uint16(52720), + 77: uint16(52728), + 78: uint16(52729), + 79: uint16(52731), + 80: uint16(52733), + 81: uint16(52740), + 82: uint16(52744), + 83: uint16(52748), + 84: uint16(52756), + 85: uint16(52761), + 86: uint16(52768), + 87: uint16(52769), + 88: uint16(52772), + 89: uint16(52776), + 90: uint16(52784), + 91: uint16(52785), + 92: uint16(52787), + 93: uint16(52789), + }, + 35: { + 0: uint16(52824), + 1: uint16(52825), + 2: uint16(52828), + 3: uint16(52831), + 4: uint16(52832), + 5: uint16(52833), + 6: uint16(52840), + 7: uint16(52841), + 8: uint16(52843), + 9: uint16(52845), + 10: uint16(52852), + 11: uint16(52853), + 12: uint16(52856), + 13: uint16(52860), + 14: uint16(52868), + 15: uint16(52869), + 16: uint16(52871), + 17: uint16(52873), + 18: uint16(52880), + 19: uint16(52881), + 20: uint16(52884), + 21: uint16(52888), + 22: uint16(52896), + 23: uint16(52897), + 24: uint16(52899), + 25: uint16(52900), + 26: uint16(52901), + 27: uint16(52908), + 28: uint16(52909), + 29: uint16(52929), + 30: uint16(52964), + 31: uint16(52965), + 32: uint16(52968), + 33: uint16(52971), + 34: uint16(52972), + 35: uint16(52980), + 36: uint16(52981), + 37: uint16(52983), + 38: uint16(52984), + 39: uint16(52985), + 40: uint16(52992), + 41: uint16(52993), + 42: uint16(52996), + 43: uint16(53000), + 44: uint16(53008), + 45: uint16(53009), + 46: uint16(53011), + 47: uint16(53013), + 48: uint16(53020), + 49: uint16(53024), + 50: uint16(53028), + 51: uint16(53036), + 52: uint16(53037), + 53: uint16(53039), + 54: uint16(53040), + 55: uint16(53041), + 56: uint16(53048), + 57: uint16(53076), + 58: uint16(53077), + 59: uint16(53080), + 60: uint16(53084), + 61: uint16(53092), + 62: uint16(53093), + 63: uint16(53095), + 64: uint16(53097), + 65: uint16(53104), + 66: uint16(53105), + 67: uint16(53108), + 68: uint16(53112), + 69: uint16(53120), + 70: uint16(53125), + 71: uint16(53132), + 72: uint16(53153), + 73: uint16(53160), + 74: uint16(53168), + 75: uint16(53188), + 76: uint16(53216), + 77: uint16(53217), + 78: uint16(53220), + 79: uint16(53224), + 80: uint16(53232), + 81: uint16(53233), + 82: uint16(53235), + 83: uint16(53237), + 84: uint16(53244), + 85: uint16(53248), + 86: uint16(53252), + 87: uint16(53265), + 88: uint16(53272), + 89: uint16(53293), + 90: uint16(53300), + 91: uint16(53301), + 92: uint16(53304), + 93: uint16(53308), + }, + 36: { + 0: uint16(53316), + 1: uint16(53317), + 2: uint16(53319), + 3: uint16(53321), + 4: uint16(53328), + 5: uint16(53332), + 6: uint16(53336), + 7: uint16(53344), + 8: uint16(53356), + 9: uint16(53357), + 10: uint16(53360), + 11: uint16(53364), + 12: uint16(53372), + 13: uint16(53373), + 14: uint16(53377), + 15: uint16(53412), + 16: uint16(53413), + 17: uint16(53416), + 18: uint16(53420), + 19: uint16(53428), + 20: uint16(53429), + 21: uint16(53431), + 22: uint16(53433), + 23: uint16(53440), + 24: uint16(53441), + 25: uint16(53444), + 26: uint16(53448), + 27: uint16(53449), + 28: uint16(53456), + 29: uint16(53457), + 30: uint16(53459), + 31: uint16(53460), + 32: uint16(53461), + 33: uint16(53468), + 34: uint16(53469), + 35: uint16(53472), + 36: uint16(53476), + 37: uint16(53484), + 38: uint16(53485), + 39: uint16(53487), + 40: uint16(53488), + 41: uint16(53489), + 42: uint16(53496), + 43: uint16(53517), + 44: uint16(53552), + 45: uint16(53553), + 46: uint16(53556), + 47: uint16(53560), + 48: uint16(53562), + 49: uint16(53568), + 50: uint16(53569), + 51: uint16(53571), + 52: uint16(53572), + 53: uint16(53573), + 54: uint16(53580), + 55: uint16(53581), + 56: uint16(53584), + 57: uint16(53588), + 58: uint16(53596), + 59: uint16(53597), + 60: uint16(53599), + 61: uint16(53601), + 62: uint16(53608), + 63: uint16(53612), + 64: uint16(53628), + 65: uint16(53636), + 66: uint16(53640), + 67: uint16(53664), + 68: uint16(53665), + 69: uint16(53668), + 70: uint16(53672), + 71: uint16(53680), + 72: uint16(53681), + 73: uint16(53683), + 74: uint16(53685), + 75: uint16(53690), + 76: uint16(53692), + 77: uint16(53696), + 78: uint16(53720), + 79: uint16(53748), + 80: uint16(53752), + 81: uint16(53767), + 82: uint16(53769), + 83: uint16(53776), + 84: uint16(53804), + 85: uint16(53805), + 86: uint16(53808), + 87: uint16(53812), + 88: uint16(53820), + 89: uint16(53821), + 90: uint16(53823), + 91: uint16(53825), + 92: uint16(53832), + 93: uint16(53852), + }, + 37: { + 0: uint16(53860), + 1: uint16(53888), + 2: uint16(53889), + 3: uint16(53892), + 4: uint16(53896), + 5: uint16(53904), + 6: uint16(53905), + 7: uint16(53909), + 8: uint16(53916), + 9: uint16(53920), + 10: uint16(53924), + 11: uint16(53932), + 12: uint16(53937), + 13: uint16(53944), + 14: uint16(53945), + 15: uint16(53948), + 16: uint16(53951), + 17: uint16(53952), + 18: uint16(53954), + 19: uint16(53960), + 20: uint16(53961), + 21: uint16(53963), + 22: uint16(53972), + 23: uint16(53976), + 24: uint16(53980), + 25: uint16(53988), + 26: uint16(53989), + 27: uint16(54000), + 28: uint16(54001), + 29: uint16(54004), + 30: uint16(54008), + 31: uint16(54016), + 32: uint16(54017), + 33: uint16(54019), + 34: uint16(54021), + 35: uint16(54028), + 36: uint16(54029), + 37: uint16(54030), + 38: uint16(54032), + 39: uint16(54036), + 40: uint16(54038), + 41: uint16(54044), + 42: uint16(54045), + 43: uint16(54047), + 44: uint16(54048), + 45: uint16(54049), + 46: uint16(54053), + 47: uint16(54056), + 48: uint16(54057), + 49: uint16(54060), + 50: uint16(54064), + 51: uint16(54072), + 52: uint16(54073), + 53: uint16(54075), + 54: uint16(54076), + 55: uint16(54077), + 56: uint16(54084), + 57: uint16(54085), + 58: uint16(54140), + 59: uint16(54141), + 60: uint16(54144), + 61: uint16(54148), + 62: uint16(54156), + 63: uint16(54157), + 64: uint16(54159), + 65: uint16(54160), + 66: uint16(54161), + 67: uint16(54168), + 68: uint16(54169), + 69: uint16(54172), + 70: uint16(54176), + 71: uint16(54184), + 72: uint16(54185), + 73: uint16(54187), + 74: uint16(54189), + 75: uint16(54196), + 76: uint16(54200), + 77: uint16(54204), + 78: uint16(54212), + 79: uint16(54213), + 80: uint16(54216), + 81: uint16(54217), + 82: uint16(54224), + 83: uint16(54232), + 84: uint16(54241), + 85: uint16(54243), + 86: uint16(54252), + 87: uint16(54253), + 88: uint16(54256), + 89: uint16(54260), + 90: uint16(54268), + 91: uint16(54269), + 92: uint16(54271), + 93: uint16(54273), + }, + 38: { + 0: uint16(54280), + 1: uint16(54301), + 2: uint16(54336), + 3: uint16(54340), + 4: uint16(54364), + 5: uint16(54368), + 6: uint16(54372), + 7: uint16(54381), + 8: uint16(54383), + 9: uint16(54392), + 10: uint16(54393), + 11: uint16(54396), + 12: uint16(54399), + 13: uint16(54400), + 14: uint16(54402), + 15: uint16(54408), + 16: uint16(54409), + 17: uint16(54411), + 18: uint16(54413), + 19: uint16(54420), + 20: uint16(54441), + 21: uint16(54476), + 22: uint16(54480), + 23: uint16(54484), + 24: uint16(54492), + 25: uint16(54495), + 26: uint16(54504), + 27: uint16(54508), + 28: uint16(54512), + 29: uint16(54520), + 30: uint16(54523), + 31: uint16(54525), + 32: uint16(54532), + 33: uint16(54536), + 34: uint16(54540), + 35: uint16(54548), + 36: uint16(54549), + 37: uint16(54551), + 38: uint16(54588), + 39: uint16(54589), + 40: uint16(54592), + 41: uint16(54596), + 42: uint16(54604), + 43: uint16(54605), + 44: uint16(54607), + 45: uint16(54609), + 46: uint16(54616), + 47: uint16(54617), + 48: uint16(54620), + 49: uint16(54624), + 50: uint16(54629), + 51: uint16(54632), + 52: uint16(54633), + 53: uint16(54635), + 54: uint16(54637), + 55: uint16(54644), + 56: uint16(54645), + 57: uint16(54648), + 58: uint16(54652), + 59: uint16(54660), + 60: uint16(54661), + 61: uint16(54663), + 62: uint16(54664), + 63: uint16(54665), + 64: uint16(54672), + 65: uint16(54693), + 66: uint16(54728), + 67: uint16(54729), + 68: uint16(54732), + 69: uint16(54736), + 70: uint16(54738), + 71: uint16(54744), + 72: uint16(54745), + 73: uint16(54747), + 74: uint16(54749), + 75: uint16(54756), + 76: uint16(54757), + 77: uint16(54760), + 78: uint16(54764), + 79: uint16(54772), + 80: uint16(54773), + 81: uint16(54775), + 82: uint16(54777), + 83: uint16(54784), + 84: uint16(54785), + 85: uint16(54788), + 86: uint16(54792), + 87: uint16(54800), + 88: uint16(54801), + 89: uint16(54803), + 90: uint16(54804), + 91: uint16(54805), + 92: uint16(54812), + 93: uint16(54816), + }, + 39: { + 0: uint16(54820), + 1: uint16(54829), + 2: uint16(54840), + 3: uint16(54841), + 4: uint16(54844), + 5: uint16(54848), + 6: uint16(54853), + 7: uint16(54856), + 8: uint16(54857), + 9: uint16(54859), + 10: uint16(54861), + 11: uint16(54865), + 12: uint16(54868), + 13: uint16(54869), + 14: uint16(54872), + 15: uint16(54876), + 16: uint16(54887), + 17: uint16(54889), + 18: uint16(54896), + 19: uint16(54897), + 20: uint16(54900), + 21: uint16(54915), + 22: uint16(54917), + 23: uint16(54924), + 24: uint16(54925), + 25: uint16(54928), + 26: uint16(54932), + 27: uint16(54941), + 28: uint16(54943), + 29: uint16(54945), + 30: uint16(54952), + 31: uint16(54956), + 32: uint16(54960), + 33: uint16(54969), + 34: uint16(54971), + 35: uint16(54980), + 36: uint16(54981), + 37: uint16(54984), + 38: uint16(54988), + 39: uint16(54993), + 40: uint16(54996), + 41: uint16(54999), + 42: uint16(55001), + 43: uint16(55008), + 44: uint16(55012), + 45: uint16(55016), + 46: uint16(55024), + 47: uint16(55029), + 48: uint16(55036), + 49: uint16(55037), + 50: uint16(55040), + 51: uint16(55044), + 52: uint16(55057), + 53: uint16(55064), + 54: uint16(55065), + 55: uint16(55068), + 56: uint16(55072), + 57: uint16(55080), + 58: uint16(55081), + 59: uint16(55083), + 60: uint16(55085), + 61: uint16(55092), + 62: uint16(55093), + 63: uint16(55096), + 64: uint16(55100), + 65: uint16(55108), + 66: uint16(55111), + 67: uint16(55113), + 68: uint16(55120), + 69: uint16(55121), + 70: uint16(55124), + 71: uint16(55126), + 72: uint16(55127), + 73: uint16(55128), + 74: uint16(55129), + 75: uint16(55136), + 76: uint16(55137), + 77: uint16(55139), + 78: uint16(55141), + 79: uint16(55145), + 80: uint16(55148), + 81: uint16(55152), + 82: uint16(55156), + 83: uint16(55164), + 84: uint16(55165), + 85: uint16(55169), + 86: uint16(55176), + 87: uint16(55177), + 88: uint16(55180), + 89: uint16(55184), + 90: uint16(55192), + 91: uint16(55193), + 92: uint16(55195), + 93: uint16(55197), + }, + 40: {}, + 41: { + 0: uint16(20285), + 1: uint16(20339), + 2: uint16(20551), + 3: uint16(20729), + 4: uint16(21152), + 5: uint16(21487), + 6: uint16(21621), + 7: uint16(21733), + 8: uint16(22025), + 9: uint16(23233), + 10: uint16(23478), + 11: uint16(26247), + 12: uint16(26550), + 13: uint16(26551), + 14: uint16(26607), + 15: uint16(27468), + 16: uint16(29634), + 17: uint16(30146), + 18: uint16(31292), + 19: uint16(33499), + 20: uint16(33540), + 21: uint16(34903), + 22: uint16(34952), + 23: uint16(35382), + 24: uint16(36040), + 25: uint16(36303), + 26: uint16(36603), + 27: uint16(36838), + 28: uint16(39381), + 29: uint16(21051), + 30: uint16(21364), + 31: uint16(21508), + 32: uint16(24682), + 33: uint16(24932), + 34: uint16(27580), + 35: uint16(29647), + 36: uint16(33050), + 37: uint16(35258), + 38: uint16(35282), + 39: uint16(38307), + 40: uint16(20355), + 41: uint16(21002), + 42: uint16(22718), + 43: uint16(22904), + 44: uint16(23014), + 45: uint16(24178), + 46: uint16(24185), + 47: uint16(25031), + 48: uint16(25536), + 49: uint16(26438), + 50: uint16(26604), + 51: uint16(26751), + 52: uint16(28567), + 53: uint16(30286), + 54: uint16(30475), + 55: uint16(30965), + 56: uint16(31240), + 57: uint16(31487), + 58: uint16(31777), + 59: uint16(32925), + 60: uint16(33390), + 61: uint16(33393), + 62: uint16(35563), + 63: uint16(38291), + 64: uint16(20075), + 65: uint16(21917), + 66: uint16(26359), + 67: uint16(28212), + 68: uint16(30883), + 69: uint16(31469), + 70: uint16(33883), + 71: uint16(35088), + 72: uint16(34638), + 73: uint16(38824), + 74: uint16(21208), + 75: uint16(22350), + 76: uint16(22570), + 77: uint16(23884), + 78: uint16(24863), + 79: uint16(25022), + 80: uint16(25121), + 81: uint16(25954), + 82: uint16(26577), + 83: uint16(27204), + 84: uint16(28187), + 85: uint16(29976), + 86: uint16(30131), + 87: uint16(30435), + 88: uint16(30640), + 89: uint16(32058), + 90: uint16(37039), + 91: uint16(37969), + 92: uint16(37970), + 93: uint16(40853), + }, + 42: { + 0: uint16(21283), + 1: uint16(23724), + 2: uint16(30002), + 3: uint16(32987), + 4: uint16(37440), + 5: uint16(38296), + 6: uint16(21083), + 7: uint16(22536), + 8: uint16(23004), + 9: uint16(23713), + 10: uint16(23831), + 11: uint16(24247), + 12: uint16(24378), + 13: uint16(24394), + 14: uint16(24951), + 15: uint16(27743), + 16: uint16(30074), + 17: uint16(30086), + 18: uint16(31968), + 19: uint16(32115), + 20: uint16(32177), + 21: uint16(32652), + 22: uint16(33108), + 23: uint16(33313), + 24: uint16(34193), + 25: uint16(35137), + 26: uint16(35611), + 27: uint16(37628), + 28: uint16(38477), + 29: uint16(40007), + 30: uint16(20171), + 31: uint16(20215), + 32: uint16(20491), + 33: uint16(20977), + 34: uint16(22607), + 35: uint16(24887), + 36: uint16(24894), + 37: uint16(24936), + 38: uint16(25913), + 39: uint16(27114), + 40: uint16(28433), + 41: uint16(30117), + 42: uint16(30342), + 43: uint16(30422), + 44: uint16(31623), + 45: uint16(33445), + 46: uint16(33995), + 47: uint16(63744), + 48: uint16(37799), + 49: uint16(38283), + 50: uint16(21888), + 51: uint16(23458), + 52: uint16(22353), + 53: uint16(63745), + 54: uint16(31923), + 55: uint16(32697), + 56: uint16(37301), + 57: uint16(20520), + 58: uint16(21435), + 59: uint16(23621), + 60: uint16(24040), + 61: uint16(25298), + 62: uint16(25454), + 63: uint16(25818), + 64: uint16(25831), + 65: uint16(28192), + 66: uint16(28844), + 67: uint16(31067), + 68: uint16(36317), + 69: uint16(36382), + 70: uint16(63746), + 71: uint16(36989), + 72: uint16(37445), + 73: uint16(37624), + 74: uint16(20094), + 75: uint16(20214), + 76: uint16(20581), + 77: uint16(24062), + 78: uint16(24314), + 79: uint16(24838), + 80: uint16(26967), + 81: uint16(33137), + 82: uint16(34388), + 83: uint16(36423), + 84: uint16(37749), + 85: uint16(39467), + 86: uint16(20062), + 87: uint16(20625), + 88: uint16(26480), + 89: uint16(26688), + 90: uint16(20745), + 91: uint16(21133), + 92: uint16(21138), + 93: uint16(27298), + }, + 43: { + 0: uint16(30652), + 1: uint16(37392), + 2: uint16(40660), + 3: uint16(21163), + 4: uint16(24623), + 5: uint16(36850), + 6: uint16(20552), + 7: uint16(25001), + 8: uint16(25581), + 9: uint16(25802), + 10: uint16(26684), + 11: uint16(27268), + 12: uint16(28608), + 13: uint16(33160), + 14: uint16(35233), + 15: uint16(38548), + 16: uint16(22533), + 17: uint16(29309), + 18: uint16(29356), + 19: uint16(29956), + 20: uint16(32121), + 21: uint16(32365), + 22: uint16(32937), + 23: uint16(35211), + 24: uint16(35700), + 25: uint16(36963), + 26: uint16(40273), + 27: uint16(25225), + 28: uint16(27770), + 29: uint16(28500), + 30: uint16(32080), + 31: uint16(32570), + 32: uint16(35363), + 33: uint16(20860), + 34: uint16(24906), + 35: uint16(31645), + 36: uint16(35609), + 37: uint16(37463), + 38: uint16(37772), + 39: uint16(20140), + 40: uint16(20435), + 41: uint16(20510), + 42: uint16(20670), + 43: uint16(20742), + 44: uint16(21185), + 45: uint16(21197), + 46: uint16(21375), + 47: uint16(22384), + 48: uint16(22659), + 49: uint16(24218), + 50: uint16(24465), + 51: uint16(24950), + 52: uint16(25004), + 53: uint16(25806), + 54: uint16(25964), + 55: uint16(26223), + 56: uint16(26299), + 57: uint16(26356), + 58: uint16(26775), + 59: uint16(28039), + 60: uint16(28805), + 61: uint16(28913), + 62: uint16(29855), + 63: uint16(29861), + 64: uint16(29898), + 65: uint16(30169), + 66: uint16(30828), + 67: uint16(30956), + 68: uint16(31455), + 69: uint16(31478), + 70: uint16(32069), + 71: uint16(32147), + 72: uint16(32789), + 73: uint16(32831), + 74: uint16(33051), + 75: uint16(33686), + 76: uint16(35686), + 77: uint16(36629), + 78: uint16(36885), + 79: uint16(37857), + 80: uint16(38915), + 81: uint16(38968), + 82: uint16(39514), + 83: uint16(39912), + 84: uint16(20418), + 85: uint16(21843), + 86: uint16(22586), + 87: uint16(22865), + 88: uint16(23395), + 89: uint16(23622), + 90: uint16(24760), + 91: uint16(25106), + 92: uint16(26690), + 93: uint16(26800), + }, + 44: { + 0: uint16(26856), + 1: uint16(28330), + 2: uint16(30028), + 3: uint16(30328), + 4: uint16(30926), + 5: uint16(31293), + 6: uint16(31995), + 7: uint16(32363), + 8: uint16(32380), + 9: uint16(35336), + 10: uint16(35489), + 11: uint16(35903), + 12: uint16(38542), + 13: uint16(40388), + 14: uint16(21476), + 15: uint16(21481), + 16: uint16(21578), + 17: uint16(21617), + 18: uint16(22266), + 19: uint16(22993), + 20: uint16(23396), + 21: uint16(23611), + 22: uint16(24235), + 23: uint16(25335), + 24: uint16(25911), + 25: uint16(25925), + 26: uint16(25970), + 27: uint16(26272), + 28: uint16(26543), + 29: uint16(27073), + 30: uint16(27837), + 31: uint16(30204), + 32: uint16(30352), + 33: uint16(30590), + 34: uint16(31295), + 35: uint16(32660), + 36: uint16(32771), + 37: uint16(32929), + 38: uint16(33167), + 39: uint16(33510), + 40: uint16(33533), + 41: uint16(33776), + 42: uint16(34241), + 43: uint16(34865), + 44: uint16(34996), + 45: uint16(35493), + 46: uint16(63747), + 47: uint16(36764), + 48: uint16(37678), + 49: uint16(38599), + 50: uint16(39015), + 51: uint16(39640), + 52: uint16(40723), + 53: uint16(21741), + 54: uint16(26011), + 55: uint16(26354), + 56: uint16(26767), + 57: uint16(31296), + 58: uint16(35895), + 59: uint16(40288), + 60: uint16(22256), + 61: uint16(22372), + 62: uint16(23825), + 63: uint16(26118), + 64: uint16(26801), + 65: uint16(26829), + 66: uint16(28414), + 67: uint16(29736), + 68: uint16(34974), + 69: uint16(39908), + 70: uint16(27752), + 71: uint16(63748), + 72: uint16(39592), + 73: uint16(20379), + 74: uint16(20844), + 75: uint16(20849), + 76: uint16(21151), + 77: uint16(23380), + 78: uint16(24037), + 79: uint16(24656), + 80: uint16(24685), + 81: uint16(25329), + 82: uint16(25511), + 83: uint16(25915), + 84: uint16(29657), + 85: uint16(31354), + 86: uint16(34467), + 87: uint16(36002), + 88: uint16(38799), + 89: uint16(20018), + 90: uint16(23521), + 91: uint16(25096), + 92: uint16(26524), + 93: uint16(29916), + }, + 45: { + 0: uint16(31185), + 1: uint16(33747), + 2: uint16(35463), + 3: uint16(35506), + 4: uint16(36328), + 5: uint16(36942), + 6: uint16(37707), + 7: uint16(38982), + 8: uint16(24275), + 9: uint16(27112), + 10: uint16(34303), + 11: uint16(37101), + 12: uint16(63749), + 13: uint16(20896), + 14: uint16(23448), + 15: uint16(23532), + 16: uint16(24931), + 17: uint16(26874), + 18: uint16(27454), + 19: uint16(28748), + 20: uint16(29743), + 21: uint16(29912), + 22: uint16(31649), + 23: uint16(32592), + 24: uint16(33733), + 25: uint16(35264), + 26: uint16(36011), + 27: uint16(38364), + 28: uint16(39208), + 29: uint16(21038), + 30: uint16(24669), + 31: uint16(25324), + 32: uint16(36866), + 33: uint16(20362), + 34: uint16(20809), + 35: uint16(21281), + 36: uint16(22745), + 37: uint16(24291), + 38: uint16(26336), + 39: uint16(27960), + 40: uint16(28826), + 41: uint16(29378), + 42: uint16(29654), + 43: uint16(31568), + 44: uint16(33009), + 45: uint16(37979), + 46: uint16(21350), + 47: uint16(25499), + 48: uint16(32619), + 49: uint16(20054), + 50: uint16(20608), + 51: uint16(22602), + 52: uint16(22750), + 53: uint16(24618), + 54: uint16(24871), + 55: uint16(25296), + 56: uint16(27088), + 57: uint16(39745), + 58: uint16(23439), + 59: uint16(32024), + 60: uint16(32945), + 61: uint16(36703), + 62: uint16(20132), + 63: uint16(20689), + 64: uint16(21676), + 65: uint16(21932), + 66: uint16(23308), + 67: uint16(23968), + 68: uint16(24039), + 69: uint16(25898), + 70: uint16(25934), + 71: uint16(26657), + 72: uint16(27211), + 73: uint16(29409), + 74: uint16(30350), + 75: uint16(30703), + 76: uint16(32094), + 77: uint16(32761), + 78: uint16(33184), + 79: uint16(34126), + 80: uint16(34527), + 81: uint16(36611), + 82: uint16(36686), + 83: uint16(37066), + 84: uint16(39171), + 85: uint16(39509), + 86: uint16(39851), + 87: uint16(19992), + 88: uint16(20037), + 89: uint16(20061), + 90: uint16(20167), + 91: uint16(20465), + 92: uint16(20855), + 93: uint16(21246), + }, + 46: { + 0: uint16(21312), + 1: uint16(21475), + 2: uint16(21477), + 3: uint16(21646), + 4: uint16(22036), + 5: uint16(22389), + 6: uint16(22434), + 7: uint16(23495), + 8: uint16(23943), + 9: uint16(24272), + 10: uint16(25084), + 11: uint16(25304), + 12: uint16(25937), + 13: uint16(26552), + 14: uint16(26601), + 15: uint16(27083), + 16: uint16(27472), + 17: uint16(27590), + 18: uint16(27628), + 19: uint16(27714), + 20: uint16(28317), + 21: uint16(28792), + 22: uint16(29399), + 23: uint16(29590), + 24: uint16(29699), + 25: uint16(30655), + 26: uint16(30697), + 27: uint16(31350), + 28: uint16(32127), + 29: uint16(32777), + 30: uint16(33276), + 31: uint16(33285), + 32: uint16(33290), + 33: uint16(33503), + 34: uint16(34914), + 35: uint16(35635), + 36: uint16(36092), + 37: uint16(36544), + 38: uint16(36881), + 39: uint16(37041), + 40: uint16(37476), + 41: uint16(37558), + 42: uint16(39378), + 43: uint16(39493), + 44: uint16(40169), + 45: uint16(40407), + 46: uint16(40860), + 47: uint16(22283), + 48: uint16(23616), + 49: uint16(33738), + 50: uint16(38816), + 51: uint16(38827), + 52: uint16(40628), + 53: uint16(21531), + 54: uint16(31384), + 55: uint16(32676), + 56: uint16(35033), + 57: uint16(36557), + 58: uint16(37089), + 59: uint16(22528), + 60: uint16(23624), + 61: uint16(25496), + 62: uint16(31391), + 63: uint16(23470), + 64: uint16(24339), + 65: uint16(31353), + 66: uint16(31406), + 67: uint16(33422), + 68: uint16(36524), + 69: uint16(20518), + 70: uint16(21048), + 71: uint16(21240), + 72: uint16(21367), + 73: uint16(22280), + 74: uint16(25331), + 75: uint16(25458), + 76: uint16(27402), + 77: uint16(28099), + 78: uint16(30519), + 79: uint16(21413), + 80: uint16(29527), + 81: uint16(34152), + 82: uint16(36470), + 83: uint16(38357), + 84: uint16(26426), + 85: uint16(27331), + 86: uint16(28528), + 87: uint16(35437), + 88: uint16(36556), + 89: uint16(39243), + 90: uint16(63750), + 91: uint16(26231), + 92: uint16(27512), + 93: uint16(36020), + }, + 47: { + 0: uint16(39740), + 1: uint16(63751), + 2: uint16(21483), + 3: uint16(22317), + 4: uint16(22862), + 5: uint16(25542), + 6: uint16(27131), + 7: uint16(29674), + 8: uint16(30789), + 9: uint16(31418), + 10: uint16(31429), + 11: uint16(31998), + 12: uint16(33909), + 13: uint16(35215), + 14: uint16(36211), + 15: uint16(36917), + 16: uint16(38312), + 17: uint16(21243), + 18: uint16(22343), + 19: uint16(30023), + 20: uint16(31584), + 21: uint16(33740), + 22: uint16(37406), + 23: uint16(63752), + 24: uint16(27224), + 25: uint16(20811), + 26: uint16(21067), + 27: uint16(21127), + 28: uint16(25119), + 29: uint16(26840), + 30: uint16(26997), + 31: uint16(38553), + 32: uint16(20677), + 33: uint16(21156), + 34: uint16(21220), + 35: uint16(25027), + 36: uint16(26020), + 37: uint16(26681), + 38: uint16(27135), + 39: uint16(29822), + 40: uint16(31563), + 41: uint16(33465), + 42: uint16(33771), + 43: uint16(35250), + 44: uint16(35641), + 45: uint16(36817), + 46: uint16(39241), + 47: uint16(63753), + 48: uint16(20170), + 49: uint16(22935), + 50: uint16(25810), + 51: uint16(26129), + 52: uint16(27278), + 53: uint16(29748), + 54: uint16(31105), + 55: uint16(31165), + 56: uint16(33449), + 57: uint16(34942), + 58: uint16(34943), + 59: uint16(35167), + 60: uint16(63754), + 61: uint16(37670), + 62: uint16(20235), + 63: uint16(21450), + 64: uint16(24613), + 65: uint16(25201), + 66: uint16(27762), + 67: uint16(32026), + 68: uint16(32102), + 69: uint16(20120), + 70: uint16(20834), + 71: uint16(30684), + 72: uint16(32943), + 73: uint16(20225), + 74: uint16(20238), + 75: uint16(20854), + 76: uint16(20864), + 77: uint16(21980), + 78: uint16(22120), + 79: uint16(22331), + 80: uint16(22522), + 81: uint16(22524), + 82: uint16(22804), + 83: uint16(22855), + 84: uint16(22931), + 85: uint16(23492), + 86: uint16(23696), + 87: uint16(23822), + 88: uint16(24049), + 89: uint16(24190), + 90: uint16(24524), + 91: uint16(25216), + 92: uint16(26071), + 93: uint16(26083), + }, + 48: { + 0: uint16(26398), + 1: uint16(26399), + 2: uint16(26462), + 3: uint16(26827), + 4: uint16(26820), + 5: uint16(27231), + 6: uint16(27450), + 7: uint16(27683), + 8: uint16(27773), + 9: uint16(27778), + 10: uint16(28103), + 11: uint16(29592), + 12: uint16(29734), + 13: uint16(29738), + 14: uint16(29826), + 15: uint16(29859), + 16: uint16(30072), + 17: uint16(30079), + 18: uint16(30849), + 19: uint16(30959), + 20: uint16(31041), + 21: uint16(31047), + 22: uint16(31048), + 23: uint16(31098), + 24: uint16(31637), + 25: uint16(32000), + 26: uint16(32186), + 27: uint16(32648), + 28: uint16(32774), + 29: uint16(32813), + 30: uint16(32908), + 31: uint16(35352), + 32: uint16(35663), + 33: uint16(35912), + 34: uint16(36215), + 35: uint16(37665), + 36: uint16(37668), + 37: uint16(39138), + 38: uint16(39249), + 39: uint16(39438), + 40: uint16(39439), + 41: uint16(39525), + 42: uint16(40594), + 43: uint16(32202), + 44: uint16(20342), + 45: uint16(21513), + 46: uint16(25326), + 47: uint16(26708), + 48: uint16(37329), + 49: uint16(21931), + 50: uint16(20794), + 51: uint16(63755), + 52: uint16(63756), + 53: uint16(23068), + 54: uint16(25062), + 55: uint16(63757), + 56: uint16(25295), + 57: uint16(25343), + 58: uint16(63758), + 59: uint16(63759), + 60: uint16(63760), + 61: uint16(63761), + 62: uint16(63762), + 63: uint16(63763), + 64: uint16(37027), + 65: uint16(63764), + 66: uint16(63765), + 67: uint16(63766), + 68: uint16(63767), + 69: uint16(63768), + 70: uint16(35582), + 71: uint16(63769), + 72: uint16(63770), + 73: uint16(63771), + 74: uint16(63772), + 75: uint16(26262), + 76: uint16(63773), + 77: uint16(29014), + 78: uint16(63774), + 79: uint16(63775), + 80: uint16(38627), + 81: uint16(63776), + 82: uint16(25423), + 83: uint16(25466), + 84: uint16(21335), + 85: uint16(63777), + 86: uint16(26511), + 87: uint16(26976), + 88: uint16(28275), + 89: uint16(63778), + 90: uint16(30007), + 91: uint16(63779), + 92: uint16(63780), + 93: uint16(63781), + }, + 49: { + 0: uint16(32013), + 1: uint16(63782), + 2: uint16(63783), + 3: uint16(34930), + 4: uint16(22218), + 5: uint16(23064), + 6: uint16(63784), + 7: uint16(63785), + 8: uint16(63786), + 9: uint16(63787), + 10: uint16(63788), + 11: uint16(20035), + 12: uint16(63789), + 13: uint16(20839), + 14: uint16(22856), + 15: uint16(26608), + 16: uint16(32784), + 17: uint16(63790), + 18: uint16(22899), + 19: uint16(24180), + 20: uint16(25754), + 21: uint16(31178), + 22: uint16(24565), + 23: uint16(24684), + 24: uint16(25288), + 25: uint16(25467), + 26: uint16(23527), + 27: uint16(23511), + 28: uint16(21162), + 29: uint16(63791), + 30: uint16(22900), + 31: uint16(24361), + 32: uint16(24594), + 33: uint16(63792), + 34: uint16(63793), + 35: uint16(63794), + 36: uint16(29785), + 37: uint16(63795), + 38: uint16(63796), + 39: uint16(63797), + 40: uint16(63798), + 41: uint16(63799), + 42: uint16(63800), + 43: uint16(39377), + 44: uint16(63801), + 45: uint16(63802), + 46: uint16(63803), + 47: uint16(63804), + 48: uint16(63805), + 49: uint16(63806), + 50: uint16(63807), + 51: uint16(63808), + 52: uint16(63809), + 53: uint16(63810), + 54: uint16(63811), + 55: uint16(28611), + 56: uint16(63812), + 57: uint16(63813), + 58: uint16(33215), + 59: uint16(36786), + 60: uint16(24817), + 61: uint16(63814), + 62: uint16(63815), + 63: uint16(33126), + 64: uint16(63816), + 65: uint16(63817), + 66: uint16(23615), + 67: uint16(63818), + 68: uint16(63819), + 69: uint16(63820), + 70: uint16(63821), + 71: uint16(63822), + 72: uint16(63823), + 73: uint16(63824), + 74: uint16(63825), + 75: uint16(23273), + 76: uint16(35365), + 77: uint16(26491), + 78: uint16(32016), + 79: uint16(63826), + 80: uint16(63827), + 81: uint16(63828), + 82: uint16(63829), + 83: uint16(63830), + 84: uint16(63831), + 85: uint16(33021), + 86: uint16(63832), + 87: uint16(63833), + 88: uint16(23612), + 89: uint16(27877), + 90: uint16(21311), + 91: uint16(28346), + 92: uint16(22810), + 93: uint16(33590), + }, + 50: { + 0: uint16(20025), + 1: uint16(20150), + 2: uint16(20294), + 3: uint16(21934), + 4: uint16(22296), + 5: uint16(22727), + 6: uint16(24406), + 7: uint16(26039), + 8: uint16(26086), + 9: uint16(27264), + 10: uint16(27573), + 11: uint16(28237), + 12: uint16(30701), + 13: uint16(31471), + 14: uint16(31774), + 15: uint16(32222), + 16: uint16(34507), + 17: uint16(34962), + 18: uint16(37170), + 19: uint16(37723), + 20: uint16(25787), + 21: uint16(28606), + 22: uint16(29562), + 23: uint16(30136), + 24: uint16(36948), + 25: uint16(21846), + 26: uint16(22349), + 27: uint16(25018), + 28: uint16(25812), + 29: uint16(26311), + 30: uint16(28129), + 31: uint16(28251), + 32: uint16(28525), + 33: uint16(28601), + 34: uint16(30192), + 35: uint16(32835), + 36: uint16(33213), + 37: uint16(34113), + 38: uint16(35203), + 39: uint16(35527), + 40: uint16(35674), + 41: uint16(37663), + 42: uint16(27795), + 43: uint16(30035), + 44: uint16(31572), + 45: uint16(36367), + 46: uint16(36957), + 47: uint16(21776), + 48: uint16(22530), + 49: uint16(22616), + 50: uint16(24162), + 51: uint16(25095), + 52: uint16(25758), + 53: uint16(26848), + 54: uint16(30070), + 55: uint16(31958), + 56: uint16(34739), + 57: uint16(40680), + 58: uint16(20195), + 59: uint16(22408), + 60: uint16(22382), + 61: uint16(22823), + 62: uint16(23565), + 63: uint16(23729), + 64: uint16(24118), + 65: uint16(24453), + 66: uint16(25140), + 67: uint16(25825), + 68: uint16(29619), + 69: uint16(33274), + 70: uint16(34955), + 71: uint16(36024), + 72: uint16(38538), + 73: uint16(40667), + 74: uint16(23429), + 75: uint16(24503), + 76: uint16(24755), + 77: uint16(20498), + 78: uint16(20992), + 79: uint16(21040), + 80: uint16(22294), + 81: uint16(22581), + 82: uint16(22615), + 83: uint16(23566), + 84: uint16(23648), + 85: uint16(23798), + 86: uint16(23947), + 87: uint16(24230), + 88: uint16(24466), + 89: uint16(24764), + 90: uint16(25361), + 91: uint16(25481), + 92: uint16(25623), + 93: uint16(26691), + }, + 51: { + 0: uint16(26873), + 1: uint16(27330), + 2: uint16(28120), + 3: uint16(28193), + 4: uint16(28372), + 5: uint16(28644), + 6: uint16(29182), + 7: uint16(30428), + 8: uint16(30585), + 9: uint16(31153), + 10: uint16(31291), + 11: uint16(33796), + 12: uint16(35241), + 13: uint16(36077), + 14: uint16(36339), + 15: uint16(36424), + 16: uint16(36867), + 17: uint16(36884), + 18: uint16(36947), + 19: uint16(37117), + 20: uint16(37709), + 21: uint16(38518), + 22: uint16(38876), + 23: uint16(27602), + 24: uint16(28678), + 25: uint16(29272), + 26: uint16(29346), + 27: uint16(29544), + 28: uint16(30563), + 29: uint16(31167), + 30: uint16(31716), + 31: uint16(32411), + 32: uint16(35712), + 33: uint16(22697), + 34: uint16(24775), + 35: uint16(25958), + 36: uint16(26109), + 37: uint16(26302), + 38: uint16(27788), + 39: uint16(28958), + 40: uint16(29129), + 41: uint16(35930), + 42: uint16(38931), + 43: uint16(20077), + 44: uint16(31361), + 45: uint16(20189), + 46: uint16(20908), + 47: uint16(20941), + 48: uint16(21205), + 49: uint16(21516), + 50: uint16(24999), + 51: uint16(26481), + 52: uint16(26704), + 53: uint16(26847), + 54: uint16(27934), + 55: uint16(28540), + 56: uint16(30140), + 57: uint16(30643), + 58: uint16(31461), + 59: uint16(33012), + 60: uint16(33891), + 61: uint16(37509), + 62: uint16(20828), + 63: uint16(26007), + 64: uint16(26460), + 65: uint16(26515), + 66: uint16(30168), + 67: uint16(31431), + 68: uint16(33651), + 69: uint16(63834), + 70: uint16(35910), + 71: uint16(36887), + 72: uint16(38957), + 73: uint16(23663), + 74: uint16(33216), + 75: uint16(33434), + 76: uint16(36929), + 77: uint16(36975), + 78: uint16(37389), + 79: uint16(24471), + 80: uint16(23965), + 81: uint16(27225), + 82: uint16(29128), + 83: uint16(30331), + 84: uint16(31561), + 85: uint16(34276), + 86: uint16(35588), + 87: uint16(37159), + 88: uint16(39472), + 89: uint16(21895), + 90: uint16(25078), + 91: uint16(63835), + 92: uint16(30313), + 93: uint16(32645), + }, + 52: { + 0: uint16(34367), + 1: uint16(34746), + 2: uint16(35064), + 3: uint16(37007), + 4: uint16(63836), + 5: uint16(27931), + 6: uint16(28889), + 7: uint16(29662), + 8: uint16(32097), + 9: uint16(33853), + 10: uint16(63837), + 11: uint16(37226), + 12: uint16(39409), + 13: uint16(63838), + 14: uint16(20098), + 15: uint16(21365), + 16: uint16(27396), + 17: uint16(27410), + 18: uint16(28734), + 19: uint16(29211), + 20: uint16(34349), + 21: uint16(40478), + 22: uint16(21068), + 23: uint16(36771), + 24: uint16(23888), + 25: uint16(25829), + 26: uint16(25900), + 27: uint16(27414), + 28: uint16(28651), + 29: uint16(31811), + 30: uint16(32412), + 31: uint16(34253), + 32: uint16(35172), + 33: uint16(35261), + 34: uint16(25289), + 35: uint16(33240), + 36: uint16(34847), + 37: uint16(24266), + 38: uint16(26391), + 39: uint16(28010), + 40: uint16(29436), + 41: uint16(29701), + 42: uint16(29807), + 43: uint16(34690), + 44: uint16(37086), + 45: uint16(20358), + 46: uint16(23821), + 47: uint16(24480), + 48: uint16(33802), + 49: uint16(20919), + 50: uint16(25504), + 51: uint16(30053), + 52: uint16(20142), + 53: uint16(20486), + 54: uint16(20841), + 55: uint16(20937), + 56: uint16(26753), + 57: uint16(27153), + 58: uint16(31918), + 59: uint16(31921), + 60: uint16(31975), + 61: uint16(33391), + 62: uint16(35538), + 63: uint16(36635), + 64: uint16(37327), + 65: uint16(20406), + 66: uint16(20791), + 67: uint16(21237), + 68: uint16(21570), + 69: uint16(24300), + 70: uint16(24942), + 71: uint16(25150), + 72: uint16(26053), + 73: uint16(27354), + 74: uint16(28670), + 75: uint16(31018), + 76: uint16(34268), + 77: uint16(34851), + 78: uint16(38317), + 79: uint16(39522), + 80: uint16(39530), + 81: uint16(40599), + 82: uint16(40654), + 83: uint16(21147), + 84: uint16(26310), + 85: uint16(27511), + 86: uint16(28701), + 87: uint16(31019), + 88: uint16(36706), + 89: uint16(38722), + 90: uint16(24976), + 91: uint16(25088), + 92: uint16(25891), + 93: uint16(28451), + }, + 53: { + 0: uint16(29001), + 1: uint16(29833), + 2: uint16(32244), + 3: uint16(32879), + 4: uint16(34030), + 5: uint16(36646), + 6: uint16(36899), + 7: uint16(37706), + 8: uint16(20925), + 9: uint16(21015), + 10: uint16(21155), + 11: uint16(27916), + 12: uint16(28872), + 13: uint16(35010), + 14: uint16(24265), + 15: uint16(25986), + 16: uint16(27566), + 17: uint16(28610), + 18: uint16(31806), + 19: uint16(29557), + 20: uint16(20196), + 21: uint16(20278), + 22: uint16(22265), + 23: uint16(63839), + 24: uint16(23738), + 25: uint16(23994), + 26: uint16(24604), + 27: uint16(29618), + 28: uint16(31533), + 29: uint16(32666), + 30: uint16(32718), + 31: uint16(32838), + 32: uint16(36894), + 33: uint16(37428), + 34: uint16(38646), + 35: uint16(38728), + 36: uint16(38936), + 37: uint16(40801), + 38: uint16(20363), + 39: uint16(28583), + 40: uint16(31150), + 41: uint16(37300), + 42: uint16(38583), + 43: uint16(21214), + 44: uint16(63840), + 45: uint16(25736), + 46: uint16(25796), + 47: uint16(27347), + 48: uint16(28510), + 49: uint16(28696), + 50: uint16(29200), + 51: uint16(30439), + 52: uint16(32769), + 53: uint16(34310), + 54: uint16(34396), + 55: uint16(36335), + 56: uint16(36613), + 57: uint16(38706), + 58: uint16(39791), + 59: uint16(40442), + 60: uint16(40565), + 61: uint16(30860), + 62: uint16(31103), + 63: uint16(32160), + 64: uint16(33737), + 65: uint16(37636), + 66: uint16(40575), + 67: uint16(40595), + 68: uint16(35542), + 69: uint16(22751), + 70: uint16(24324), + 71: uint16(26407), + 72: uint16(28711), + 73: uint16(29903), + 74: uint16(31840), + 75: uint16(32894), + 76: uint16(20769), + 77: uint16(28712), + 78: uint16(29282), + 79: uint16(30922), + 80: uint16(36034), + 81: uint16(36058), + 82: uint16(36084), + 83: uint16(38647), + 84: uint16(20102), + 85: uint16(20698), + 86: uint16(23534), + 87: uint16(24278), + 88: uint16(26009), + 89: uint16(29134), + 90: uint16(30274), + 91: uint16(30637), + 92: uint16(32842), + 93: uint16(34044), + }, + 54: { + 0: uint16(36988), + 1: uint16(39719), + 2: uint16(40845), + 3: uint16(22744), + 4: uint16(23105), + 5: uint16(23650), + 6: uint16(27155), + 7: uint16(28122), + 8: uint16(28431), + 9: uint16(30267), + 10: uint16(32047), + 11: uint16(32311), + 12: uint16(34078), + 13: uint16(35128), + 14: uint16(37860), + 15: uint16(38475), + 16: uint16(21129), + 17: uint16(26066), + 18: uint16(26611), + 19: uint16(27060), + 20: uint16(27969), + 21: uint16(28316), + 22: uint16(28687), + 23: uint16(29705), + 24: uint16(29792), + 25: uint16(30041), + 26: uint16(30244), + 27: uint16(30827), + 28: uint16(35628), + 29: uint16(39006), + 30: uint16(20845), + 31: uint16(25134), + 32: uint16(38520), + 33: uint16(20374), + 34: uint16(20523), + 35: uint16(23833), + 36: uint16(28138), + 37: uint16(32184), + 38: uint16(36650), + 39: uint16(24459), + 40: uint16(24900), + 41: uint16(26647), + 42: uint16(63841), + 43: uint16(38534), + 44: uint16(21202), + 45: uint16(32907), + 46: uint16(20956), + 47: uint16(20940), + 48: uint16(26974), + 49: uint16(31260), + 50: uint16(32190), + 51: uint16(33777), + 52: uint16(38517), + 53: uint16(20442), + 54: uint16(21033), + 55: uint16(21400), + 56: uint16(21519), + 57: uint16(21774), + 58: uint16(23653), + 59: uint16(24743), + 60: uint16(26446), + 61: uint16(26792), + 62: uint16(28012), + 63: uint16(29313), + 64: uint16(29432), + 65: uint16(29702), + 66: uint16(29827), + 67: uint16(63842), + 68: uint16(30178), + 69: uint16(31852), + 70: uint16(32633), + 71: uint16(32696), + 72: uint16(33673), + 73: uint16(35023), + 74: uint16(35041), + 75: uint16(37324), + 76: uint16(37328), + 77: uint16(38626), + 78: uint16(39881), + 79: uint16(21533), + 80: uint16(28542), + 81: uint16(29136), + 82: uint16(29848), + 83: uint16(34298), + 84: uint16(36522), + 85: uint16(38563), + 86: uint16(40023), + 87: uint16(40607), + 88: uint16(26519), + 89: uint16(28107), + 90: uint16(29747), + 91: uint16(33256), + 92: uint16(38678), + 93: uint16(30764), + }, + 55: { + 0: uint16(31435), + 1: uint16(31520), + 2: uint16(31890), + 3: uint16(25705), + 4: uint16(29802), + 5: uint16(30194), + 6: uint16(30908), + 7: uint16(30952), + 8: uint16(39340), + 9: uint16(39764), + 10: uint16(40635), + 11: uint16(23518), + 12: uint16(24149), + 13: uint16(28448), + 14: uint16(33180), + 15: uint16(33707), + 16: uint16(37000), + 17: uint16(19975), + 18: uint16(21325), + 19: uint16(23081), + 20: uint16(24018), + 21: uint16(24398), + 22: uint16(24930), + 23: uint16(25405), + 24: uint16(26217), + 25: uint16(26364), + 26: uint16(28415), + 27: uint16(28459), + 28: uint16(28771), + 29: uint16(30622), + 30: uint16(33836), + 31: uint16(34067), + 32: uint16(34875), + 33: uint16(36627), + 34: uint16(39237), + 35: uint16(39995), + 36: uint16(21788), + 37: uint16(25273), + 38: uint16(26411), + 39: uint16(27819), + 40: uint16(33545), + 41: uint16(35178), + 42: uint16(38778), + 43: uint16(20129), + 44: uint16(22916), + 45: uint16(24536), + 46: uint16(24537), + 47: uint16(26395), + 48: uint16(32178), + 49: uint16(32596), + 50: uint16(33426), + 51: uint16(33579), + 52: uint16(33725), + 53: uint16(36638), + 54: uint16(37017), + 55: uint16(22475), + 56: uint16(22969), + 57: uint16(23186), + 58: uint16(23504), + 59: uint16(26151), + 60: uint16(26522), + 61: uint16(26757), + 62: uint16(27599), + 63: uint16(29028), + 64: uint16(32629), + 65: uint16(36023), + 66: uint16(36067), + 67: uint16(36993), + 68: uint16(39749), + 69: uint16(33032), + 70: uint16(35978), + 71: uint16(38476), + 72: uint16(39488), + 73: uint16(40613), + 74: uint16(23391), + 75: uint16(27667), + 76: uint16(29467), + 77: uint16(30450), + 78: uint16(30431), + 79: uint16(33804), + 80: uint16(20906), + 81: uint16(35219), + 82: uint16(20813), + 83: uint16(20885), + 84: uint16(21193), + 85: uint16(26825), + 86: uint16(27796), + 87: uint16(30468), + 88: uint16(30496), + 89: uint16(32191), + 90: uint16(32236), + 91: uint16(38754), + 92: uint16(40629), + 93: uint16(28357), + }, + 56: { + 0: uint16(34065), + 1: uint16(20901), + 2: uint16(21517), + 3: uint16(21629), + 4: uint16(26126), + 5: uint16(26269), + 6: uint16(26919), + 7: uint16(28319), + 8: uint16(30399), + 9: uint16(30609), + 10: uint16(33559), + 11: uint16(33986), + 12: uint16(34719), + 13: uint16(37225), + 14: uint16(37528), + 15: uint16(40180), + 16: uint16(34946), + 17: uint16(20398), + 18: uint16(20882), + 19: uint16(21215), + 20: uint16(22982), + 21: uint16(24125), + 22: uint16(24917), + 23: uint16(25720), + 24: uint16(25721), + 25: uint16(26286), + 26: uint16(26576), + 27: uint16(27169), + 28: uint16(27597), + 29: uint16(27611), + 30: uint16(29279), + 31: uint16(29281), + 32: uint16(29761), + 33: uint16(30520), + 34: uint16(30683), + 35: uint16(32791), + 36: uint16(33468), + 37: uint16(33541), + 38: uint16(35584), + 39: uint16(35624), + 40: uint16(35980), + 41: uint16(26408), + 42: uint16(27792), + 43: uint16(29287), + 44: uint16(30446), + 45: uint16(30566), + 46: uint16(31302), + 47: uint16(40361), + 48: uint16(27519), + 49: uint16(27794), + 50: uint16(22818), + 51: uint16(26406), + 52: uint16(33945), + 53: uint16(21359), + 54: uint16(22675), + 55: uint16(22937), + 56: uint16(24287), + 57: uint16(25551), + 58: uint16(26164), + 59: uint16(26483), + 60: uint16(28218), + 61: uint16(29483), + 62: uint16(31447), + 63: uint16(33495), + 64: uint16(37672), + 65: uint16(21209), + 66: uint16(24043), + 67: uint16(25006), + 68: uint16(25035), + 69: uint16(25098), + 70: uint16(25287), + 71: uint16(25771), + 72: uint16(26080), + 73: uint16(26969), + 74: uint16(27494), + 75: uint16(27595), + 76: uint16(28961), + 77: uint16(29687), + 78: uint16(30045), + 79: uint16(32326), + 80: uint16(33310), + 81: uint16(33538), + 82: uint16(34154), + 83: uint16(35491), + 84: uint16(36031), + 85: uint16(38695), + 86: uint16(40289), + 87: uint16(22696), + 88: uint16(40664), + 89: uint16(20497), + 90: uint16(21006), + 91: uint16(21563), + 92: uint16(21839), + 93: uint16(25991), + }, + 57: { + 0: uint16(27766), + 1: uint16(32010), + 2: uint16(32011), + 3: uint16(32862), + 4: uint16(34442), + 5: uint16(38272), + 6: uint16(38639), + 7: uint16(21247), + 8: uint16(27797), + 9: uint16(29289), + 10: uint16(21619), + 11: uint16(23194), + 12: uint16(23614), + 13: uint16(23883), + 14: uint16(24396), + 15: uint16(24494), + 16: uint16(26410), + 17: uint16(26806), + 18: uint16(26979), + 19: uint16(28220), + 20: uint16(28228), + 21: uint16(30473), + 22: uint16(31859), + 23: uint16(32654), + 24: uint16(34183), + 25: uint16(35598), + 26: uint16(36855), + 27: uint16(38753), + 28: uint16(40692), + 29: uint16(23735), + 30: uint16(24758), + 31: uint16(24845), + 32: uint16(25003), + 33: uint16(25935), + 34: uint16(26107), + 35: uint16(26108), + 36: uint16(27665), + 37: uint16(27887), + 38: uint16(29599), + 39: uint16(29641), + 40: uint16(32225), + 41: uint16(38292), + 42: uint16(23494), + 43: uint16(34588), + 44: uint16(35600), + 45: uint16(21085), + 46: uint16(21338), + 47: uint16(25293), + 48: uint16(25615), + 49: uint16(25778), + 50: uint16(26420), + 51: uint16(27192), + 52: uint16(27850), + 53: uint16(29632), + 54: uint16(29854), + 55: uint16(31636), + 56: uint16(31893), + 57: uint16(32283), + 58: uint16(33162), + 59: uint16(33334), + 60: uint16(34180), + 61: uint16(36843), + 62: uint16(38649), + 63: uint16(39361), + 64: uint16(20276), + 65: uint16(21322), + 66: uint16(21453), + 67: uint16(21467), + 68: uint16(25292), + 69: uint16(25644), + 70: uint16(25856), + 71: uint16(26001), + 72: uint16(27075), + 73: uint16(27886), + 74: uint16(28504), + 75: uint16(29677), + 76: uint16(30036), + 77: uint16(30242), + 78: uint16(30436), + 79: uint16(30460), + 80: uint16(30928), + 81: uint16(30971), + 82: uint16(31020), + 83: uint16(32070), + 84: uint16(33324), + 85: uint16(34784), + 86: uint16(36820), + 87: uint16(38930), + 88: uint16(39151), + 89: uint16(21187), + 90: uint16(25300), + 91: uint16(25765), + 92: uint16(28196), + 93: uint16(28497), + }, + 58: { + 0: uint16(30332), + 1: uint16(36299), + 2: uint16(37297), + 3: uint16(37474), + 4: uint16(39662), + 5: uint16(39747), + 6: uint16(20515), + 7: uint16(20621), + 8: uint16(22346), + 9: uint16(22952), + 10: uint16(23592), + 11: uint16(24135), + 12: uint16(24439), + 13: uint16(25151), + 14: uint16(25918), + 15: uint16(26041), + 16: uint16(26049), + 17: uint16(26121), + 18: uint16(26507), + 19: uint16(27036), + 20: uint16(28354), + 21: uint16(30917), + 22: uint16(32033), + 23: uint16(32938), + 24: uint16(33152), + 25: uint16(33323), + 26: uint16(33459), + 27: uint16(33953), + 28: uint16(34444), + 29: uint16(35370), + 30: uint16(35607), + 31: uint16(37030), + 32: uint16(38450), + 33: uint16(40848), + 34: uint16(20493), + 35: uint16(20467), + 36: uint16(63843), + 37: uint16(22521), + 38: uint16(24472), + 39: uint16(25308), + 40: uint16(25490), + 41: uint16(26479), + 42: uint16(28227), + 43: uint16(28953), + 44: uint16(30403), + 45: uint16(32972), + 46: uint16(32986), + 47: uint16(35060), + 48: uint16(35061), + 49: uint16(35097), + 50: uint16(36064), + 51: uint16(36649), + 52: uint16(37197), + 53: uint16(38506), + 54: uint16(20271), + 55: uint16(20336), + 56: uint16(24091), + 57: uint16(26575), + 58: uint16(26658), + 59: uint16(30333), + 60: uint16(30334), + 61: uint16(39748), + 62: uint16(24161), + 63: uint16(27146), + 64: uint16(29033), + 65: uint16(29140), + 66: uint16(30058), + 67: uint16(63844), + 68: uint16(32321), + 69: uint16(34115), + 70: uint16(34281), + 71: uint16(39132), + 72: uint16(20240), + 73: uint16(31567), + 74: uint16(32624), + 75: uint16(38309), + 76: uint16(20961), + 77: uint16(24070), + 78: uint16(26805), + 79: uint16(27710), + 80: uint16(27726), + 81: uint16(27867), + 82: uint16(29359), + 83: uint16(31684), + 84: uint16(33539), + 85: uint16(27861), + 86: uint16(29754), + 87: uint16(20731), + 88: uint16(21128), + 89: uint16(22721), + 90: uint16(25816), + 91: uint16(27287), + 92: uint16(29863), + 93: uint16(30294), + }, + 59: { + 0: uint16(30887), + 1: uint16(34327), + 2: uint16(38370), + 3: uint16(38713), + 4: uint16(63845), + 5: uint16(21342), + 6: uint16(24321), + 7: uint16(35722), + 8: uint16(36776), + 9: uint16(36783), + 10: uint16(37002), + 11: uint16(21029), + 12: uint16(30629), + 13: uint16(40009), + 14: uint16(40712), + 15: uint16(19993), + 16: uint16(20482), + 17: uint16(20853), + 18: uint16(23643), + 19: uint16(24183), + 20: uint16(26142), + 21: uint16(26170), + 22: uint16(26564), + 23: uint16(26821), + 24: uint16(28851), + 25: uint16(29953), + 26: uint16(30149), + 27: uint16(31177), + 28: uint16(31453), + 29: uint16(36647), + 30: uint16(39200), + 31: uint16(39432), + 32: uint16(20445), + 33: uint16(22561), + 34: uint16(22577), + 35: uint16(23542), + 36: uint16(26222), + 37: uint16(27493), + 38: uint16(27921), + 39: uint16(28282), + 40: uint16(28541), + 41: uint16(29668), + 42: uint16(29995), + 43: uint16(33769), + 44: uint16(35036), + 45: uint16(35091), + 46: uint16(35676), + 47: uint16(36628), + 48: uint16(20239), + 49: uint16(20693), + 50: uint16(21264), + 51: uint16(21340), + 52: uint16(23443), + 53: uint16(24489), + 54: uint16(26381), + 55: uint16(31119), + 56: uint16(33145), + 57: uint16(33583), + 58: uint16(34068), + 59: uint16(35079), + 60: uint16(35206), + 61: uint16(36665), + 62: uint16(36667), + 63: uint16(39333), + 64: uint16(39954), + 65: uint16(26412), + 66: uint16(20086), + 67: uint16(20472), + 68: uint16(22857), + 69: uint16(23553), + 70: uint16(23791), + 71: uint16(23792), + 72: uint16(25447), + 73: uint16(26834), + 74: uint16(28925), + 75: uint16(29090), + 76: uint16(29739), + 77: uint16(32299), + 78: uint16(34028), + 79: uint16(34562), + 80: uint16(36898), + 81: uint16(37586), + 82: uint16(40179), + 83: uint16(19981), + 84: uint16(20184), + 85: uint16(20463), + 86: uint16(20613), + 87: uint16(21078), + 88: uint16(21103), + 89: uint16(21542), + 90: uint16(21648), + 91: uint16(22496), + 92: uint16(22827), + 93: uint16(23142), + }, + 60: { + 0: uint16(23386), + 1: uint16(23413), + 2: uint16(23500), + 3: uint16(24220), + 4: uint16(63846), + 5: uint16(25206), + 6: uint16(25975), + 7: uint16(26023), + 8: uint16(28014), + 9: uint16(28325), + 10: uint16(29238), + 11: uint16(31526), + 12: uint16(31807), + 13: uint16(32566), + 14: uint16(33104), + 15: uint16(33105), + 16: uint16(33178), + 17: uint16(33344), + 18: uint16(33433), + 19: uint16(33705), + 20: uint16(35331), + 21: uint16(36000), + 22: uint16(36070), + 23: uint16(36091), + 24: uint16(36212), + 25: uint16(36282), + 26: uint16(37096), + 27: uint16(37340), + 28: uint16(38428), + 29: uint16(38468), + 30: uint16(39385), + 31: uint16(40167), + 32: uint16(21271), + 33: uint16(20998), + 34: uint16(21545), + 35: uint16(22132), + 36: uint16(22707), + 37: uint16(22868), + 38: uint16(22894), + 39: uint16(24575), + 40: uint16(24996), + 41: uint16(25198), + 42: uint16(26128), + 43: uint16(27774), + 44: uint16(28954), + 45: uint16(30406), + 46: uint16(31881), + 47: uint16(31966), + 48: uint16(32027), + 49: uint16(33452), + 50: uint16(36033), + 51: uint16(38640), + 52: uint16(63847), + 53: uint16(20315), + 54: uint16(24343), + 55: uint16(24447), + 56: uint16(25282), + 57: uint16(23849), + 58: uint16(26379), + 59: uint16(26842), + 60: uint16(30844), + 61: uint16(32323), + 62: uint16(40300), + 63: uint16(19989), + 64: uint16(20633), + 65: uint16(21269), + 66: uint16(21290), + 67: uint16(21329), + 68: uint16(22915), + 69: uint16(23138), + 70: uint16(24199), + 71: uint16(24754), + 72: uint16(24970), + 73: uint16(25161), + 74: uint16(25209), + 75: uint16(26000), + 76: uint16(26503), + 77: uint16(27047), + 78: uint16(27604), + 79: uint16(27606), + 80: uint16(27607), + 81: uint16(27608), + 82: uint16(27832), + 83: uint16(63848), + 84: uint16(29749), + 85: uint16(30202), + 86: uint16(30738), + 87: uint16(30865), + 88: uint16(31189), + 89: uint16(31192), + 90: uint16(31875), + 91: uint16(32203), + 92: uint16(32737), + 93: uint16(32933), + }, + 61: { + 0: uint16(33086), + 1: uint16(33218), + 2: uint16(33778), + 3: uint16(34586), + 4: uint16(35048), + 5: uint16(35513), + 6: uint16(35692), + 7: uint16(36027), + 8: uint16(37145), + 9: uint16(38750), + 10: uint16(39131), + 11: uint16(40763), + 12: uint16(22188), + 13: uint16(23338), + 14: uint16(24428), + 15: uint16(25996), + 16: uint16(27315), + 17: uint16(27567), + 18: uint16(27996), + 19: uint16(28657), + 20: uint16(28693), + 21: uint16(29277), + 22: uint16(29613), + 23: uint16(36007), + 24: uint16(36051), + 25: uint16(38971), + 26: uint16(24977), + 27: uint16(27703), + 28: uint16(32856), + 29: uint16(39425), + 30: uint16(20045), + 31: uint16(20107), + 32: uint16(20123), + 33: uint16(20181), + 34: uint16(20282), + 35: uint16(20284), + 36: uint16(20351), + 37: uint16(20447), + 38: uint16(20735), + 39: uint16(21490), + 40: uint16(21496), + 41: uint16(21766), + 42: uint16(21987), + 43: uint16(22235), + 44: uint16(22763), + 45: uint16(22882), + 46: uint16(23057), + 47: uint16(23531), + 48: uint16(23546), + 49: uint16(23556), + 50: uint16(24051), + 51: uint16(24107), + 52: uint16(24473), + 53: uint16(24605), + 54: uint16(25448), + 55: uint16(26012), + 56: uint16(26031), + 57: uint16(26614), + 58: uint16(26619), + 59: uint16(26797), + 60: uint16(27515), + 61: uint16(27801), + 62: uint16(27863), + 63: uint16(28195), + 64: uint16(28681), + 65: uint16(29509), + 66: uint16(30722), + 67: uint16(31038), + 68: uint16(31040), + 69: uint16(31072), + 70: uint16(31169), + 71: uint16(31721), + 72: uint16(32023), + 73: uint16(32114), + 74: uint16(32902), + 75: uint16(33293), + 76: uint16(33678), + 77: uint16(34001), + 78: uint16(34503), + 79: uint16(35039), + 80: uint16(35408), + 81: uint16(35422), + 82: uint16(35613), + 83: uint16(36060), + 84: uint16(36198), + 85: uint16(36781), + 86: uint16(37034), + 87: uint16(39164), + 88: uint16(39391), + 89: uint16(40605), + 90: uint16(21066), + 91: uint16(63849), + 92: uint16(26388), + 93: uint16(63850), + }, + 62: { + 0: uint16(20632), + 1: uint16(21034), + 2: uint16(23665), + 3: uint16(25955), + 4: uint16(27733), + 5: uint16(29642), + 6: uint16(29987), + 7: uint16(30109), + 8: uint16(31639), + 9: uint16(33948), + 10: uint16(37240), + 11: uint16(38704), + 12: uint16(20087), + 13: uint16(25746), + 14: uint16(27578), + 15: uint16(29022), + 16: uint16(34217), + 17: uint16(19977), + 18: uint16(63851), + 19: uint16(26441), + 20: uint16(26862), + 21: uint16(28183), + 22: uint16(33439), + 23: uint16(34072), + 24: uint16(34923), + 25: uint16(25591), + 26: uint16(28545), + 27: uint16(37394), + 28: uint16(39087), + 29: uint16(19978), + 30: uint16(20663), + 31: uint16(20687), + 32: uint16(20767), + 33: uint16(21830), + 34: uint16(21930), + 35: uint16(22039), + 36: uint16(23360), + 37: uint16(23577), + 38: uint16(23776), + 39: uint16(24120), + 40: uint16(24202), + 41: uint16(24224), + 42: uint16(24258), + 43: uint16(24819), + 44: uint16(26705), + 45: uint16(27233), + 46: uint16(28248), + 47: uint16(29245), + 48: uint16(29248), + 49: uint16(29376), + 50: uint16(30456), + 51: uint16(31077), + 52: uint16(31665), + 53: uint16(32724), + 54: uint16(35059), + 55: uint16(35316), + 56: uint16(35443), + 57: uint16(35937), + 58: uint16(36062), + 59: uint16(38684), + 60: uint16(22622), + 61: uint16(29885), + 62: uint16(36093), + 63: uint16(21959), + 64: uint16(63852), + 65: uint16(31329), + 66: uint16(32034), + 67: uint16(33394), + 68: uint16(29298), + 69: uint16(29983), + 70: uint16(29989), + 71: uint16(63853), + 72: uint16(31513), + 73: uint16(22661), + 74: uint16(22779), + 75: uint16(23996), + 76: uint16(24207), + 77: uint16(24246), + 78: uint16(24464), + 79: uint16(24661), + 80: uint16(25234), + 81: uint16(25471), + 82: uint16(25933), + 83: uint16(26257), + 84: uint16(26329), + 85: uint16(26360), + 86: uint16(26646), + 87: uint16(26866), + 88: uint16(29312), + 89: uint16(29790), + 90: uint16(31598), + 91: uint16(32110), + 92: uint16(32214), + 93: uint16(32626), + }, + 63: { + 0: uint16(32997), + 1: uint16(33298), + 2: uint16(34223), + 3: uint16(35199), + 4: uint16(35475), + 5: uint16(36893), + 6: uint16(37604), + 7: uint16(40653), + 8: uint16(40736), + 9: uint16(22805), + 10: uint16(22893), + 11: uint16(24109), + 12: uint16(24796), + 13: uint16(26132), + 14: uint16(26227), + 15: uint16(26512), + 16: uint16(27728), + 17: uint16(28101), + 18: uint16(28511), + 19: uint16(30707), + 20: uint16(30889), + 21: uint16(33990), + 22: uint16(37323), + 23: uint16(37675), + 24: uint16(20185), + 25: uint16(20682), + 26: uint16(20808), + 27: uint16(21892), + 28: uint16(23307), + 29: uint16(23459), + 30: uint16(25159), + 31: uint16(25982), + 32: uint16(26059), + 33: uint16(28210), + 34: uint16(29053), + 35: uint16(29697), + 36: uint16(29764), + 37: uint16(29831), + 38: uint16(29887), + 39: uint16(30316), + 40: uint16(31146), + 41: uint16(32218), + 42: uint16(32341), + 43: uint16(32680), + 44: uint16(33146), + 45: uint16(33203), + 46: uint16(33337), + 47: uint16(34330), + 48: uint16(34796), + 49: uint16(35445), + 50: uint16(36323), + 51: uint16(36984), + 52: uint16(37521), + 53: uint16(37925), + 54: uint16(39245), + 55: uint16(39854), + 56: uint16(21352), + 57: uint16(23633), + 58: uint16(26964), + 59: uint16(27844), + 60: uint16(27945), + 61: uint16(28203), + 62: uint16(33292), + 63: uint16(34203), + 64: uint16(35131), + 65: uint16(35373), + 66: uint16(35498), + 67: uint16(38634), + 68: uint16(40807), + 69: uint16(21089), + 70: uint16(26297), + 71: uint16(27570), + 72: uint16(32406), + 73: uint16(34814), + 74: uint16(36109), + 75: uint16(38275), + 76: uint16(38493), + 77: uint16(25885), + 78: uint16(28041), + 79: uint16(29166), + 80: uint16(63854), + 81: uint16(22478), + 82: uint16(22995), + 83: uint16(23468), + 84: uint16(24615), + 85: uint16(24826), + 86: uint16(25104), + 87: uint16(26143), + 88: uint16(26207), + 89: uint16(29481), + 90: uint16(29689), + 91: uint16(30427), + 92: uint16(30465), + 93: uint16(31596), + }, + 64: { + 0: uint16(32854), + 1: uint16(32882), + 2: uint16(33125), + 3: uint16(35488), + 4: uint16(37266), + 5: uint16(19990), + 6: uint16(21218), + 7: uint16(27506), + 8: uint16(27927), + 9: uint16(31237), + 10: uint16(31545), + 11: uint16(32048), + 12: uint16(63855), + 13: uint16(36016), + 14: uint16(21484), + 15: uint16(22063), + 16: uint16(22609), + 17: uint16(23477), + 18: uint16(23567), + 19: uint16(23569), + 20: uint16(24034), + 21: uint16(25152), + 22: uint16(25475), + 23: uint16(25620), + 24: uint16(26157), + 25: uint16(26803), + 26: uint16(27836), + 27: uint16(28040), + 28: uint16(28335), + 29: uint16(28703), + 30: uint16(28836), + 31: uint16(29138), + 32: uint16(29990), + 33: uint16(30095), + 34: uint16(30094), + 35: uint16(30233), + 36: uint16(31505), + 37: uint16(31712), + 38: uint16(31787), + 39: uint16(32032), + 40: uint16(32057), + 41: uint16(34092), + 42: uint16(34157), + 43: uint16(34311), + 44: uint16(35380), + 45: uint16(36877), + 46: uint16(36961), + 47: uint16(37045), + 48: uint16(37559), + 49: uint16(38902), + 50: uint16(39479), + 51: uint16(20439), + 52: uint16(23660), + 53: uint16(26463), + 54: uint16(28049), + 55: uint16(31903), + 56: uint16(32396), + 57: uint16(35606), + 58: uint16(36118), + 59: uint16(36895), + 60: uint16(23403), + 61: uint16(24061), + 62: uint16(25613), + 63: uint16(33984), + 64: uint16(36956), + 65: uint16(39137), + 66: uint16(29575), + 67: uint16(23435), + 68: uint16(24730), + 69: uint16(26494), + 70: uint16(28126), + 71: uint16(35359), + 72: uint16(35494), + 73: uint16(36865), + 74: uint16(38924), + 75: uint16(21047), + 76: uint16(63856), + 77: uint16(28753), + 78: uint16(30862), + 79: uint16(37782), + 80: uint16(34928), + 81: uint16(37335), + 82: uint16(20462), + 83: uint16(21463), + 84: uint16(22013), + 85: uint16(22234), + 86: uint16(22402), + 87: uint16(22781), + 88: uint16(23234), + 89: uint16(23432), + 90: uint16(23723), + 91: uint16(23744), + 92: uint16(24101), + 93: uint16(24833), + }, + 65: { + 0: uint16(25101), + 1: uint16(25163), + 2: uint16(25480), + 3: uint16(25628), + 4: uint16(25910), + 5: uint16(25976), + 6: uint16(27193), + 7: uint16(27530), + 8: uint16(27700), + 9: uint16(27929), + 10: uint16(28465), + 11: uint16(29159), + 12: uint16(29417), + 13: uint16(29560), + 14: uint16(29703), + 15: uint16(29874), + 16: uint16(30246), + 17: uint16(30561), + 18: uint16(31168), + 19: uint16(31319), + 20: uint16(31466), + 21: uint16(31929), + 22: uint16(32143), + 23: uint16(32172), + 24: uint16(32353), + 25: uint16(32670), + 26: uint16(33065), + 27: uint16(33585), + 28: uint16(33936), + 29: uint16(34010), + 30: uint16(34282), + 31: uint16(34966), + 32: uint16(35504), + 33: uint16(35728), + 34: uint16(36664), + 35: uint16(36930), + 36: uint16(36995), + 37: uint16(37228), + 38: uint16(37526), + 39: uint16(37561), + 40: uint16(38539), + 41: uint16(38567), + 42: uint16(38568), + 43: uint16(38614), + 44: uint16(38656), + 45: uint16(38920), + 46: uint16(39318), + 47: uint16(39635), + 48: uint16(39706), + 49: uint16(21460), + 50: uint16(22654), + 51: uint16(22809), + 52: uint16(23408), + 53: uint16(23487), + 54: uint16(28113), + 55: uint16(28506), + 56: uint16(29087), + 57: uint16(29729), + 58: uint16(29881), + 59: uint16(32901), + 60: uint16(33789), + 61: uint16(24033), + 62: uint16(24455), + 63: uint16(24490), + 64: uint16(24642), + 65: uint16(26092), + 66: uint16(26642), + 67: uint16(26991), + 68: uint16(27219), + 69: uint16(27529), + 70: uint16(27957), + 71: uint16(28147), + 72: uint16(29667), + 73: uint16(30462), + 74: uint16(30636), + 75: uint16(31565), + 76: uint16(32020), + 77: uint16(33059), + 78: uint16(33308), + 79: uint16(33600), + 80: uint16(34036), + 81: uint16(34147), + 82: uint16(35426), + 83: uint16(35524), + 84: uint16(37255), + 85: uint16(37662), + 86: uint16(38918), + 87: uint16(39348), + 88: uint16(25100), + 89: uint16(34899), + 90: uint16(36848), + 91: uint16(37477), + 92: uint16(23815), + 93: uint16(23847), + }, + 66: { + 0: uint16(23913), + 1: uint16(29791), + 2: uint16(33181), + 3: uint16(34664), + 4: uint16(28629), + 5: uint16(25342), + 6: uint16(32722), + 7: uint16(35126), + 8: uint16(35186), + 9: uint16(19998), + 10: uint16(20056), + 11: uint16(20711), + 12: uint16(21213), + 13: uint16(21319), + 14: uint16(25215), + 15: uint16(26119), + 16: uint16(32361), + 17: uint16(34821), + 18: uint16(38494), + 19: uint16(20365), + 20: uint16(21273), + 21: uint16(22070), + 22: uint16(22987), + 23: uint16(23204), + 24: uint16(23608), + 25: uint16(23630), + 26: uint16(23629), + 27: uint16(24066), + 28: uint16(24337), + 29: uint16(24643), + 30: uint16(26045), + 31: uint16(26159), + 32: uint16(26178), + 33: uint16(26558), + 34: uint16(26612), + 35: uint16(29468), + 36: uint16(30690), + 37: uint16(31034), + 38: uint16(32709), + 39: uint16(33940), + 40: uint16(33997), + 41: uint16(35222), + 42: uint16(35430), + 43: uint16(35433), + 44: uint16(35553), + 45: uint16(35925), + 46: uint16(35962), + 47: uint16(22516), + 48: uint16(23508), + 49: uint16(24335), + 50: uint16(24687), + 51: uint16(25325), + 52: uint16(26893), + 53: uint16(27542), + 54: uint16(28252), + 55: uint16(29060), + 56: uint16(31698), + 57: uint16(34645), + 58: uint16(35672), + 59: uint16(36606), + 60: uint16(39135), + 61: uint16(39166), + 62: uint16(20280), + 63: uint16(20353), + 64: uint16(20449), + 65: uint16(21627), + 66: uint16(23072), + 67: uint16(23480), + 68: uint16(24892), + 69: uint16(26032), + 70: uint16(26216), + 71: uint16(29180), + 72: uint16(30003), + 73: uint16(31070), + 74: uint16(32051), + 75: uint16(33102), + 76: uint16(33251), + 77: uint16(33688), + 78: uint16(34218), + 79: uint16(34254), + 80: uint16(34563), + 81: uint16(35338), + 82: uint16(36523), + 83: uint16(36763), + 84: uint16(63857), + 85: uint16(36805), + 86: uint16(22833), + 87: uint16(23460), + 88: uint16(23526), + 89: uint16(24713), + 90: uint16(23529), + 91: uint16(23563), + 92: uint16(24515), + 93: uint16(27777), + }, + 67: { + 0: uint16(63858), + 1: uint16(28145), + 2: uint16(28683), + 3: uint16(29978), + 4: uint16(33455), + 5: uint16(35574), + 6: uint16(20160), + 7: uint16(21313), + 8: uint16(63859), + 9: uint16(38617), + 10: uint16(27663), + 11: uint16(20126), + 12: uint16(20420), + 13: uint16(20818), + 14: uint16(21854), + 15: uint16(23077), + 16: uint16(23784), + 17: uint16(25105), + 18: uint16(29273), + 19: uint16(33469), + 20: uint16(33706), + 21: uint16(34558), + 22: uint16(34905), + 23: uint16(35357), + 24: uint16(38463), + 25: uint16(38597), + 26: uint16(39187), + 27: uint16(40201), + 28: uint16(40285), + 29: uint16(22538), + 30: uint16(23731), + 31: uint16(23997), + 32: uint16(24132), + 33: uint16(24801), + 34: uint16(24853), + 35: uint16(25569), + 36: uint16(27138), + 37: uint16(28197), + 38: uint16(37122), + 39: uint16(37716), + 40: uint16(38990), + 41: uint16(39952), + 42: uint16(40823), + 43: uint16(23433), + 44: uint16(23736), + 45: uint16(25353), + 46: uint16(26191), + 47: uint16(26696), + 48: uint16(30524), + 49: uint16(38593), + 50: uint16(38797), + 51: uint16(38996), + 52: uint16(39839), + 53: uint16(26017), + 54: uint16(35585), + 55: uint16(36555), + 56: uint16(38332), + 57: uint16(21813), + 58: uint16(23721), + 59: uint16(24022), + 60: uint16(24245), + 61: uint16(26263), + 62: uint16(30284), + 63: uint16(33780), + 64: uint16(38343), + 65: uint16(22739), + 66: uint16(25276), + 67: uint16(29390), + 68: uint16(40232), + 69: uint16(20208), + 70: uint16(22830), + 71: uint16(24591), + 72: uint16(26171), + 73: uint16(27523), + 74: uint16(31207), + 75: uint16(40230), + 76: uint16(21395), + 77: uint16(21696), + 78: uint16(22467), + 79: uint16(23830), + 80: uint16(24859), + 81: uint16(26326), + 82: uint16(28079), + 83: uint16(30861), + 84: uint16(33406), + 85: uint16(38552), + 86: uint16(38724), + 87: uint16(21380), + 88: uint16(25212), + 89: uint16(25494), + 90: uint16(28082), + 91: uint16(32266), + 92: uint16(33099), + 93: uint16(38989), + }, + 68: { + 0: uint16(27387), + 1: uint16(32588), + 2: uint16(40367), + 3: uint16(40474), + 4: uint16(20063), + 5: uint16(20539), + 6: uint16(20918), + 7: uint16(22812), + 8: uint16(24825), + 9: uint16(25590), + 10: uint16(26928), + 11: uint16(29242), + 12: uint16(32822), + 13: uint16(63860), + 14: uint16(37326), + 15: uint16(24369), + 16: uint16(63861), + 17: uint16(63862), + 18: uint16(32004), + 19: uint16(33509), + 20: uint16(33903), + 21: uint16(33979), + 22: uint16(34277), + 23: uint16(36493), + 24: uint16(63863), + 25: uint16(20335), + 26: uint16(63864), + 27: uint16(63865), + 28: uint16(22756), + 29: uint16(23363), + 30: uint16(24665), + 31: uint16(25562), + 32: uint16(25880), + 33: uint16(25965), + 34: uint16(26264), + 35: uint16(63866), + 36: uint16(26954), + 37: uint16(27171), + 38: uint16(27915), + 39: uint16(28673), + 40: uint16(29036), + 41: uint16(30162), + 42: uint16(30221), + 43: uint16(31155), + 44: uint16(31344), + 45: uint16(63867), + 46: uint16(32650), + 47: uint16(63868), + 48: uint16(35140), + 49: uint16(63869), + 50: uint16(35731), + 51: uint16(37312), + 52: uint16(38525), + 53: uint16(63870), + 54: uint16(39178), + 55: uint16(22276), + 56: uint16(24481), + 57: uint16(26044), + 58: uint16(28417), + 59: uint16(30208), + 60: uint16(31142), + 61: uint16(35486), + 62: uint16(39341), + 63: uint16(39770), + 64: uint16(40812), + 65: uint16(20740), + 66: uint16(25014), + 67: uint16(25233), + 68: uint16(27277), + 69: uint16(33222), + 70: uint16(20547), + 71: uint16(22576), + 72: uint16(24422), + 73: uint16(28937), + 74: uint16(35328), + 75: uint16(35578), + 76: uint16(23420), + 77: uint16(34326), + 78: uint16(20474), + 79: uint16(20796), + 80: uint16(22196), + 81: uint16(22852), + 82: uint16(25513), + 83: uint16(28153), + 84: uint16(23978), + 85: uint16(26989), + 86: uint16(20870), + 87: uint16(20104), + 88: uint16(20313), + 89: uint16(63871), + 90: uint16(63872), + 91: uint16(63873), + 92: uint16(22914), + 93: uint16(63874), + }, + 69: { + 0: uint16(63875), + 1: uint16(27487), + 2: uint16(27741), + 3: uint16(63876), + 4: uint16(29877), + 5: uint16(30998), + 6: uint16(63877), + 7: uint16(33287), + 8: uint16(33349), + 9: uint16(33593), + 10: uint16(36671), + 11: uint16(36701), + 12: uint16(63878), + 13: uint16(39192), + 14: uint16(63879), + 15: uint16(63880), + 16: uint16(63881), + 17: uint16(20134), + 18: uint16(63882), + 19: uint16(22495), + 20: uint16(24441), + 21: uint16(26131), + 22: uint16(63883), + 23: uint16(63884), + 24: uint16(30123), + 25: uint16(32377), + 26: uint16(35695), + 27: uint16(63885), + 28: uint16(36870), + 29: uint16(39515), + 30: uint16(22181), + 31: uint16(22567), + 32: uint16(23032), + 33: uint16(23071), + 34: uint16(23476), + 35: uint16(63886), + 36: uint16(24310), + 37: uint16(63887), + 38: uint16(63888), + 39: uint16(25424), + 40: uint16(25403), + 41: uint16(63889), + 42: uint16(26941), + 43: uint16(27783), + 44: uint16(27839), + 45: uint16(28046), + 46: uint16(28051), + 47: uint16(28149), + 48: uint16(28436), + 49: uint16(63890), + 50: uint16(28895), + 51: uint16(28982), + 52: uint16(29017), + 53: uint16(63891), + 54: uint16(29123), + 55: uint16(29141), + 56: uint16(63892), + 57: uint16(30799), + 58: uint16(30831), + 59: uint16(63893), + 60: uint16(31605), + 61: uint16(32227), + 62: uint16(63894), + 63: uint16(32303), + 64: uint16(63895), + 65: uint16(34893), + 66: uint16(36575), + 67: uint16(63896), + 68: uint16(63897), + 69: uint16(63898), + 70: uint16(37467), + 71: uint16(63899), + 72: uint16(40182), + 73: uint16(63900), + 74: uint16(63901), + 75: uint16(63902), + 76: uint16(24709), + 77: uint16(28037), + 78: uint16(63903), + 79: uint16(29105), + 80: uint16(63904), + 81: uint16(63905), + 82: uint16(38321), + 83: uint16(21421), + 84: uint16(63906), + 85: uint16(63907), + 86: uint16(63908), + 87: uint16(26579), + 88: uint16(63909), + 89: uint16(28814), + 90: uint16(28976), + 91: uint16(29744), + 92: uint16(33398), + 93: uint16(33490), + }, + 70: { + 0: uint16(63910), + 1: uint16(38331), + 2: uint16(39653), + 3: uint16(40573), + 4: uint16(26308), + 5: uint16(63911), + 6: uint16(29121), + 7: uint16(33865), + 8: uint16(63912), + 9: uint16(63913), + 10: uint16(22603), + 11: uint16(63914), + 12: uint16(63915), + 13: uint16(23992), + 14: uint16(24433), + 15: uint16(63916), + 16: uint16(26144), + 17: uint16(26254), + 18: uint16(27001), + 19: uint16(27054), + 20: uint16(27704), + 21: uint16(27891), + 22: uint16(28214), + 23: uint16(28481), + 24: uint16(28634), + 25: uint16(28699), + 26: uint16(28719), + 27: uint16(29008), + 28: uint16(29151), + 29: uint16(29552), + 30: uint16(63917), + 31: uint16(29787), + 32: uint16(63918), + 33: uint16(29908), + 34: uint16(30408), + 35: uint16(31310), + 36: uint16(32403), + 37: uint16(63919), + 38: uint16(63920), + 39: uint16(33521), + 40: uint16(35424), + 41: uint16(36814), + 42: uint16(63921), + 43: uint16(37704), + 44: uint16(63922), + 45: uint16(38681), + 46: uint16(63923), + 47: uint16(63924), + 48: uint16(20034), + 49: uint16(20522), + 50: uint16(63925), + 51: uint16(21000), + 52: uint16(21473), + 53: uint16(26355), + 54: uint16(27757), + 55: uint16(28618), + 56: uint16(29450), + 57: uint16(30591), + 58: uint16(31330), + 59: uint16(33454), + 60: uint16(34269), + 61: uint16(34306), + 62: uint16(63926), + 63: uint16(35028), + 64: uint16(35427), + 65: uint16(35709), + 66: uint16(35947), + 67: uint16(63927), + 68: uint16(37555), + 69: uint16(63928), + 70: uint16(38675), + 71: uint16(38928), + 72: uint16(20116), + 73: uint16(20237), + 74: uint16(20425), + 75: uint16(20658), + 76: uint16(21320), + 77: uint16(21566), + 78: uint16(21555), + 79: uint16(21978), + 80: uint16(22626), + 81: uint16(22714), + 82: uint16(22887), + 83: uint16(23067), + 84: uint16(23524), + 85: uint16(24735), + 86: uint16(63929), + 87: uint16(25034), + 88: uint16(25942), + 89: uint16(26111), + 90: uint16(26212), + 91: uint16(26791), + 92: uint16(27738), + 93: uint16(28595), + }, + 71: { + 0: uint16(28879), + 1: uint16(29100), + 2: uint16(29522), + 3: uint16(31613), + 4: uint16(34568), + 5: uint16(35492), + 6: uint16(39986), + 7: uint16(40711), + 8: uint16(23627), + 9: uint16(27779), + 10: uint16(29508), + 11: uint16(29577), + 12: uint16(37434), + 13: uint16(28331), + 14: uint16(29797), + 15: uint16(30239), + 16: uint16(31337), + 17: uint16(32277), + 18: uint16(34314), + 19: uint16(20800), + 20: uint16(22725), + 21: uint16(25793), + 22: uint16(29934), + 23: uint16(29973), + 24: uint16(30320), + 25: uint16(32705), + 26: uint16(37013), + 27: uint16(38605), + 28: uint16(39252), + 29: uint16(28198), + 30: uint16(29926), + 31: uint16(31401), + 32: uint16(31402), + 33: uint16(33253), + 34: uint16(34521), + 35: uint16(34680), + 36: uint16(35355), + 37: uint16(23113), + 38: uint16(23436), + 39: uint16(23451), + 40: uint16(26785), + 41: uint16(26880), + 42: uint16(28003), + 43: uint16(29609), + 44: uint16(29715), + 45: uint16(29740), + 46: uint16(30871), + 47: uint16(32233), + 48: uint16(32747), + 49: uint16(33048), + 50: uint16(33109), + 51: uint16(33694), + 52: uint16(35916), + 53: uint16(38446), + 54: uint16(38929), + 55: uint16(26352), + 56: uint16(24448), + 57: uint16(26106), + 58: uint16(26505), + 59: uint16(27754), + 60: uint16(29579), + 61: uint16(20525), + 62: uint16(23043), + 63: uint16(27498), + 64: uint16(30702), + 65: uint16(22806), + 66: uint16(23916), + 67: uint16(24013), + 68: uint16(29477), + 69: uint16(30031), + 70: uint16(63930), + 71: uint16(63931), + 72: uint16(20709), + 73: uint16(20985), + 74: uint16(22575), + 75: uint16(22829), + 76: uint16(22934), + 77: uint16(23002), + 78: uint16(23525), + 79: uint16(63932), + 80: uint16(63933), + 81: uint16(23970), + 82: uint16(25303), + 83: uint16(25622), + 84: uint16(25747), + 85: uint16(25854), + 86: uint16(63934), + 87: uint16(26332), + 88: uint16(63935), + 89: uint16(27208), + 90: uint16(63936), + 91: uint16(29183), + 92: uint16(29796), + 93: uint16(63937), + }, + 72: { + 0: uint16(31368), + 1: uint16(31407), + 2: uint16(32327), + 3: uint16(32350), + 4: uint16(32768), + 5: uint16(33136), + 6: uint16(63938), + 7: uint16(34799), + 8: uint16(35201), + 9: uint16(35616), + 10: uint16(36953), + 11: uint16(63939), + 12: uint16(36992), + 13: uint16(39250), + 14: uint16(24958), + 15: uint16(27442), + 16: uint16(28020), + 17: uint16(32287), + 18: uint16(35109), + 19: uint16(36785), + 20: uint16(20433), + 21: uint16(20653), + 22: uint16(20887), + 23: uint16(21191), + 24: uint16(22471), + 25: uint16(22665), + 26: uint16(23481), + 27: uint16(24248), + 28: uint16(24898), + 29: uint16(27029), + 30: uint16(28044), + 31: uint16(28263), + 32: uint16(28342), + 33: uint16(29076), + 34: uint16(29794), + 35: uint16(29992), + 36: uint16(29996), + 37: uint16(32883), + 38: uint16(33592), + 39: uint16(33993), + 40: uint16(36362), + 41: uint16(37780), + 42: uint16(37854), + 43: uint16(63940), + 44: uint16(20110), + 45: uint16(20305), + 46: uint16(20598), + 47: uint16(20778), + 48: uint16(21448), + 49: uint16(21451), + 50: uint16(21491), + 51: uint16(23431), + 52: uint16(23507), + 53: uint16(23588), + 54: uint16(24858), + 55: uint16(24962), + 56: uint16(26100), + 57: uint16(29275), + 58: uint16(29591), + 59: uint16(29760), + 60: uint16(30402), + 61: uint16(31056), + 62: uint16(31121), + 63: uint16(31161), + 64: uint16(32006), + 65: uint16(32701), + 66: uint16(33419), + 67: uint16(34261), + 68: uint16(34398), + 69: uint16(36802), + 70: uint16(36935), + 71: uint16(37109), + 72: uint16(37354), + 73: uint16(38533), + 74: uint16(38632), + 75: uint16(38633), + 76: uint16(21206), + 77: uint16(24423), + 78: uint16(26093), + 79: uint16(26161), + 80: uint16(26671), + 81: uint16(29020), + 82: uint16(31286), + 83: uint16(37057), + 84: uint16(38922), + 85: uint16(20113), + 86: uint16(63941), + 87: uint16(27218), + 88: uint16(27550), + 89: uint16(28560), + 90: uint16(29065), + 91: uint16(32792), + 92: uint16(33464), + 93: uint16(34131), + }, + 73: { + 0: uint16(36939), + 1: uint16(38549), + 2: uint16(38642), + 3: uint16(38907), + 4: uint16(34074), + 5: uint16(39729), + 6: uint16(20112), + 7: uint16(29066), + 8: uint16(38596), + 9: uint16(20803), + 10: uint16(21407), + 11: uint16(21729), + 12: uint16(22291), + 13: uint16(22290), + 14: uint16(22435), + 15: uint16(23195), + 16: uint16(23236), + 17: uint16(23491), + 18: uint16(24616), + 19: uint16(24895), + 20: uint16(25588), + 21: uint16(27781), + 22: uint16(27961), + 23: uint16(28274), + 24: uint16(28304), + 25: uint16(29232), + 26: uint16(29503), + 27: uint16(29783), + 28: uint16(33489), + 29: uint16(34945), + 30: uint16(36677), + 31: uint16(36960), + 32: uint16(63942), + 33: uint16(38498), + 34: uint16(39000), + 35: uint16(40219), + 36: uint16(26376), + 37: uint16(36234), + 38: uint16(37470), + 39: uint16(20301), + 40: uint16(20553), + 41: uint16(20702), + 42: uint16(21361), + 43: uint16(22285), + 44: uint16(22996), + 45: uint16(23041), + 46: uint16(23561), + 47: uint16(24944), + 48: uint16(26256), + 49: uint16(28205), + 50: uint16(29234), + 51: uint16(29771), + 52: uint16(32239), + 53: uint16(32963), + 54: uint16(33806), + 55: uint16(33894), + 56: uint16(34111), + 57: uint16(34655), + 58: uint16(34907), + 59: uint16(35096), + 60: uint16(35586), + 61: uint16(36949), + 62: uint16(38859), + 63: uint16(39759), + 64: uint16(20083), + 65: uint16(20369), + 66: uint16(20754), + 67: uint16(20842), + 68: uint16(63943), + 69: uint16(21807), + 70: uint16(21929), + 71: uint16(23418), + 72: uint16(23461), + 73: uint16(24188), + 74: uint16(24189), + 75: uint16(24254), + 76: uint16(24736), + 77: uint16(24799), + 78: uint16(24840), + 79: uint16(24841), + 80: uint16(25540), + 81: uint16(25912), + 82: uint16(26377), + 83: uint16(63944), + 84: uint16(26580), + 85: uint16(26586), + 86: uint16(63945), + 87: uint16(26977), + 88: uint16(26978), + 89: uint16(27833), + 90: uint16(27943), + 91: uint16(63946), + 92: uint16(28216), + 93: uint16(63947), + }, + 74: { + 0: uint16(28641), + 1: uint16(29494), + 2: uint16(29495), + 3: uint16(63948), + 4: uint16(29788), + 5: uint16(30001), + 6: uint16(63949), + 7: uint16(30290), + 8: uint16(63950), + 9: uint16(63951), + 10: uint16(32173), + 11: uint16(33278), + 12: uint16(33848), + 13: uint16(35029), + 14: uint16(35480), + 15: uint16(35547), + 16: uint16(35565), + 17: uint16(36400), + 18: uint16(36418), + 19: uint16(36938), + 20: uint16(36926), + 21: uint16(36986), + 22: uint16(37193), + 23: uint16(37321), + 24: uint16(37742), + 25: uint16(63952), + 26: uint16(63953), + 27: uint16(22537), + 28: uint16(63954), + 29: uint16(27603), + 30: uint16(32905), + 31: uint16(32946), + 32: uint16(63955), + 33: uint16(63956), + 34: uint16(20801), + 35: uint16(22891), + 36: uint16(23609), + 37: uint16(63957), + 38: uint16(63958), + 39: uint16(28516), + 40: uint16(29607), + 41: uint16(32996), + 42: uint16(36103), + 43: uint16(63959), + 44: uint16(37399), + 45: uint16(38287), + 46: uint16(63960), + 47: uint16(63961), + 48: uint16(63962), + 49: uint16(63963), + 50: uint16(32895), + 51: uint16(25102), + 52: uint16(28700), + 53: uint16(32104), + 54: uint16(34701), + 55: uint16(63964), + 56: uint16(22432), + 57: uint16(24681), + 58: uint16(24903), + 59: uint16(27575), + 60: uint16(35518), + 61: uint16(37504), + 62: uint16(38577), + 63: uint16(20057), + 64: uint16(21535), + 65: uint16(28139), + 66: uint16(34093), + 67: uint16(38512), + 68: uint16(38899), + 69: uint16(39150), + 70: uint16(25558), + 71: uint16(27875), + 72: uint16(37009), + 73: uint16(20957), + 74: uint16(25033), + 75: uint16(33210), + 76: uint16(40441), + 77: uint16(20381), + 78: uint16(20506), + 79: uint16(20736), + 80: uint16(23452), + 81: uint16(24847), + 82: uint16(25087), + 83: uint16(25836), + 84: uint16(26885), + 85: uint16(27589), + 86: uint16(30097), + 87: uint16(30691), + 88: uint16(32681), + 89: uint16(33380), + 90: uint16(34191), + 91: uint16(34811), + 92: uint16(34915), + 93: uint16(35516), + }, + 75: { + 0: uint16(35696), + 1: uint16(37291), + 2: uint16(20108), + 3: uint16(20197), + 4: uint16(20234), + 5: uint16(63965), + 6: uint16(63966), + 7: uint16(22839), + 8: uint16(23016), + 9: uint16(63967), + 10: uint16(24050), + 11: uint16(24347), + 12: uint16(24411), + 13: uint16(24609), + 14: uint16(63968), + 15: uint16(63969), + 16: uint16(63970), + 17: uint16(63971), + 18: uint16(29246), + 19: uint16(29669), + 20: uint16(63972), + 21: uint16(30064), + 22: uint16(30157), + 23: uint16(63973), + 24: uint16(31227), + 25: uint16(63974), + 26: uint16(32780), + 27: uint16(32819), + 28: uint16(32900), + 29: uint16(33505), + 30: uint16(33617), + 31: uint16(63975), + 32: uint16(63976), + 33: uint16(36029), + 34: uint16(36019), + 35: uint16(36999), + 36: uint16(63977), + 37: uint16(63978), + 38: uint16(39156), + 39: uint16(39180), + 40: uint16(63979), + 41: uint16(63980), + 42: uint16(28727), + 43: uint16(30410), + 44: uint16(32714), + 45: uint16(32716), + 46: uint16(32764), + 47: uint16(35610), + 48: uint16(20154), + 49: uint16(20161), + 50: uint16(20995), + 51: uint16(21360), + 52: uint16(63981), + 53: uint16(21693), + 54: uint16(22240), + 55: uint16(23035), + 56: uint16(23493), + 57: uint16(24341), + 58: uint16(24525), + 59: uint16(28270), + 60: uint16(63982), + 61: uint16(63983), + 62: uint16(32106), + 63: uint16(33589), + 64: uint16(63984), + 65: uint16(34451), + 66: uint16(35469), + 67: uint16(63985), + 68: uint16(38765), + 69: uint16(38775), + 70: uint16(63986), + 71: uint16(63987), + 72: uint16(19968), + 73: uint16(20314), + 74: uint16(20350), + 75: uint16(22777), + 76: uint16(26085), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(37808), + 80: uint16(39353), + 81: uint16(20219), + 82: uint16(22764), + 83: uint16(22922), + 84: uint16(23001), + 85: uint16(24641), + 86: uint16(63988), + 87: uint16(63989), + 88: uint16(31252), + 89: uint16(63990), + 90: uint16(33615), + 91: uint16(36035), + 92: uint16(20837), + 93: uint16(21316), + }, + 76: { + 0: uint16(63991), + 1: uint16(63992), + 2: uint16(63993), + 3: uint16(20173), + 4: uint16(21097), + 5: uint16(23381), + 6: uint16(33471), + 7: uint16(20180), + 8: uint16(21050), + 9: uint16(21672), + 10: uint16(22985), + 11: uint16(23039), + 12: uint16(23376), + 13: uint16(23383), + 14: uint16(23388), + 15: uint16(24675), + 16: uint16(24904), + 17: uint16(28363), + 18: uint16(28825), + 19: uint16(29038), + 20: uint16(29574), + 21: uint16(29943), + 22: uint16(30133), + 23: uint16(30913), + 24: uint16(32043), + 25: uint16(32773), + 26: uint16(33258), + 27: uint16(33576), + 28: uint16(34071), + 29: uint16(34249), + 30: uint16(35566), + 31: uint16(36039), + 32: uint16(38604), + 33: uint16(20316), + 34: uint16(21242), + 35: uint16(22204), + 36: uint16(26027), + 37: uint16(26152), + 38: uint16(28796), + 39: uint16(28856), + 40: uint16(29237), + 41: uint16(32189), + 42: uint16(33421), + 43: uint16(37196), + 44: uint16(38592), + 45: uint16(40306), + 46: uint16(23409), + 47: uint16(26855), + 48: uint16(27544), + 49: uint16(28538), + 50: uint16(30430), + 51: uint16(23697), + 52: uint16(26283), + 53: uint16(28507), + 54: uint16(31668), + 55: uint16(31786), + 56: uint16(34870), + 57: uint16(38620), + 58: uint16(19976), + 59: uint16(20183), + 60: uint16(21280), + 61: uint16(22580), + 62: uint16(22715), + 63: uint16(22767), + 64: uint16(22892), + 65: uint16(23559), + 66: uint16(24115), + 67: uint16(24196), + 68: uint16(24373), + 69: uint16(25484), + 70: uint16(26290), + 71: uint16(26454), + 72: uint16(27167), + 73: uint16(27299), + 74: uint16(27404), + 75: uint16(28479), + 76: uint16(29254), + 77: uint16(63994), + 78: uint16(29520), + 79: uint16(29835), + 80: uint16(31456), + 81: uint16(31911), + 82: uint16(33144), + 83: uint16(33247), + 84: uint16(33255), + 85: uint16(33674), + 86: uint16(33900), + 87: uint16(34083), + 88: uint16(34196), + 89: uint16(34255), + 90: uint16(35037), + 91: uint16(36115), + 92: uint16(37292), + 93: uint16(38263), + }, + 77: { + 0: uint16(38556), + 1: uint16(20877), + 2: uint16(21705), + 3: uint16(22312), + 4: uint16(23472), + 5: uint16(25165), + 6: uint16(26448), + 7: uint16(26685), + 8: uint16(26771), + 9: uint16(28221), + 10: uint16(28371), + 11: uint16(28797), + 12: uint16(32289), + 13: uint16(35009), + 14: uint16(36001), + 15: uint16(36617), + 16: uint16(40779), + 17: uint16(40782), + 18: uint16(29229), + 19: uint16(31631), + 20: uint16(35533), + 21: uint16(37658), + 22: uint16(20295), + 23: uint16(20302), + 24: uint16(20786), + 25: uint16(21632), + 26: uint16(22992), + 27: uint16(24213), + 28: uint16(25269), + 29: uint16(26485), + 30: uint16(26990), + 31: uint16(27159), + 32: uint16(27822), + 33: uint16(28186), + 34: uint16(29401), + 35: uint16(29482), + 36: uint16(30141), + 37: uint16(31672), + 38: uint16(32053), + 39: uint16(33511), + 40: uint16(33785), + 41: uint16(33879), + 42: uint16(34295), + 43: uint16(35419), + 44: uint16(36015), + 45: uint16(36487), + 46: uint16(36889), + 47: uint16(37048), + 48: uint16(38606), + 49: uint16(40799), + 50: uint16(21219), + 51: uint16(21514), + 52: uint16(23265), + 53: uint16(23490), + 54: uint16(25688), + 55: uint16(25973), + 56: uint16(28404), + 57: uint16(29380), + 58: uint16(63995), + 59: uint16(30340), + 60: uint16(31309), + 61: uint16(31515), + 62: uint16(31821), + 63: uint16(32318), + 64: uint16(32735), + 65: uint16(33659), + 66: uint16(35627), + 67: uint16(36042), + 68: uint16(36196), + 69: uint16(36321), + 70: uint16(36447), + 71: uint16(36842), + 72: uint16(36857), + 73: uint16(36969), + 74: uint16(37841), + 75: uint16(20291), + 76: uint16(20346), + 77: uint16(20659), + 78: uint16(20840), + 79: uint16(20856), + 80: uint16(21069), + 81: uint16(21098), + 82: uint16(22625), + 83: uint16(22652), + 84: uint16(22880), + 85: uint16(23560), + 86: uint16(23637), + 87: uint16(24283), + 88: uint16(24731), + 89: uint16(25136), + 90: uint16(26643), + 91: uint16(27583), + 92: uint16(27656), + 93: uint16(28593), + }, + 78: { + 0: uint16(29006), + 1: uint16(29728), + 2: uint16(30000), + 3: uint16(30008), + 4: uint16(30033), + 5: uint16(30322), + 6: uint16(31564), + 7: uint16(31627), + 8: uint16(31661), + 9: uint16(31686), + 10: uint16(32399), + 11: uint16(35438), + 12: uint16(36670), + 13: uint16(36681), + 14: uint16(37439), + 15: uint16(37523), + 16: uint16(37666), + 17: uint16(37931), + 18: uint16(38651), + 19: uint16(39002), + 20: uint16(39019), + 21: uint16(39198), + 22: uint16(20999), + 23: uint16(25130), + 24: uint16(25240), + 25: uint16(27993), + 26: uint16(30308), + 27: uint16(31434), + 28: uint16(31680), + 29: uint16(32118), + 30: uint16(21344), + 31: uint16(23742), + 32: uint16(24215), + 33: uint16(28472), + 34: uint16(28857), + 35: uint16(31896), + 36: uint16(38673), + 37: uint16(39822), + 38: uint16(40670), + 39: uint16(25509), + 40: uint16(25722), + 41: uint16(34678), + 42: uint16(19969), + 43: uint16(20117), + 44: uint16(20141), + 45: uint16(20572), + 46: uint16(20597), + 47: uint16(21576), + 48: uint16(22979), + 49: uint16(23450), + 50: uint16(24128), + 51: uint16(24237), + 52: uint16(24311), + 53: uint16(24449), + 54: uint16(24773), + 55: uint16(25402), + 56: uint16(25919), + 57: uint16(25972), + 58: uint16(26060), + 59: uint16(26230), + 60: uint16(26232), + 61: uint16(26622), + 62: uint16(26984), + 63: uint16(27273), + 64: uint16(27491), + 65: uint16(27712), + 66: uint16(28096), + 67: uint16(28136), + 68: uint16(28191), + 69: uint16(28254), + 70: uint16(28702), + 71: uint16(28833), + 72: uint16(29582), + 73: uint16(29693), + 74: uint16(30010), + 75: uint16(30555), + 76: uint16(30855), + 77: uint16(31118), + 78: uint16(31243), + 79: uint16(31357), + 80: uint16(31934), + 81: uint16(32142), + 82: uint16(33351), + 83: uint16(35330), + 84: uint16(35562), + 85: uint16(35998), + 86: uint16(37165), + 87: uint16(37194), + 88: uint16(37336), + 89: uint16(37478), + 90: uint16(37580), + 91: uint16(37664), + 92: uint16(38662), + 93: uint16(38742), + }, + 79: { + 0: uint16(38748), + 1: uint16(38914), + 2: uint16(40718), + 3: uint16(21046), + 4: uint16(21137), + 5: uint16(21884), + 6: uint16(22564), + 7: uint16(24093), + 8: uint16(24351), + 9: uint16(24716), + 10: uint16(25552), + 11: uint16(26799), + 12: uint16(28639), + 13: uint16(31085), + 14: uint16(31532), + 15: uint16(33229), + 16: uint16(34234), + 17: uint16(35069), + 18: uint16(35576), + 19: uint16(36420), + 20: uint16(37261), + 21: uint16(38500), + 22: uint16(38555), + 23: uint16(38717), + 24: uint16(38988), + 25: uint16(40778), + 26: uint16(20430), + 27: uint16(20806), + 28: uint16(20939), + 29: uint16(21161), + 30: uint16(22066), + 31: uint16(24340), + 32: uint16(24427), + 33: uint16(25514), + 34: uint16(25805), + 35: uint16(26089), + 36: uint16(26177), + 37: uint16(26362), + 38: uint16(26361), + 39: uint16(26397), + 40: uint16(26781), + 41: uint16(26839), + 42: uint16(27133), + 43: uint16(28437), + 44: uint16(28526), + 45: uint16(29031), + 46: uint16(29157), + 47: uint16(29226), + 48: uint16(29866), + 49: uint16(30522), + 50: uint16(31062), + 51: uint16(31066), + 52: uint16(31199), + 53: uint16(31264), + 54: uint16(31381), + 55: uint16(31895), + 56: uint16(31967), + 57: uint16(32068), + 58: uint16(32368), + 59: uint16(32903), + 60: uint16(34299), + 61: uint16(34468), + 62: uint16(35412), + 63: uint16(35519), + 64: uint16(36249), + 65: uint16(36481), + 66: uint16(36896), + 67: uint16(36973), + 68: uint16(37347), + 69: uint16(38459), + 70: uint16(38613), + 71: uint16(40165), + 72: uint16(26063), + 73: uint16(31751), + 74: uint16(36275), + 75: uint16(37827), + 76: uint16(23384), + 77: uint16(23562), + 78: uint16(21330), + 79: uint16(25305), + 80: uint16(29469), + 81: uint16(20519), + 82: uint16(23447), + 83: uint16(24478), + 84: uint16(24752), + 85: uint16(24939), + 86: uint16(26837), + 87: uint16(28121), + 88: uint16(29742), + 89: uint16(31278), + 90: uint16(32066), + 91: uint16(32156), + 92: uint16(32305), + 93: uint16(33131), + }, + 80: { + 0: uint16(36394), + 1: uint16(36405), + 2: uint16(37758), + 3: uint16(37912), + 4: uint16(20304), + 5: uint16(22352), + 6: uint16(24038), + 7: uint16(24231), + 8: uint16(25387), + 9: uint16(32618), + 10: uint16(20027), + 11: uint16(20303), + 12: uint16(20367), + 13: uint16(20570), + 14: uint16(23005), + 15: uint16(32964), + 16: uint16(21610), + 17: uint16(21608), + 18: uint16(22014), + 19: uint16(22863), + 20: uint16(23449), + 21: uint16(24030), + 22: uint16(24282), + 23: uint16(26205), + 24: uint16(26417), + 25: uint16(26609), + 26: uint16(26666), + 27: uint16(27880), + 28: uint16(27954), + 29: uint16(28234), + 30: uint16(28557), + 31: uint16(28855), + 32: uint16(29664), + 33: uint16(30087), + 34: uint16(31820), + 35: uint16(32002), + 36: uint16(32044), + 37: uint16(32162), + 38: uint16(33311), + 39: uint16(34523), + 40: uint16(35387), + 41: uint16(35461), + 42: uint16(36208), + 43: uint16(36490), + 44: uint16(36659), + 45: uint16(36913), + 46: uint16(37198), + 47: uint16(37202), + 48: uint16(37956), + 49: uint16(39376), + 50: uint16(31481), + 51: uint16(31909), + 52: uint16(20426), + 53: uint16(20737), + 54: uint16(20934), + 55: uint16(22472), + 56: uint16(23535), + 57: uint16(23803), + 58: uint16(26201), + 59: uint16(27197), + 60: uint16(27994), + 61: uint16(28310), + 62: uint16(28652), + 63: uint16(28940), + 64: uint16(30063), + 65: uint16(31459), + 66: uint16(34850), + 67: uint16(36897), + 68: uint16(36981), + 69: uint16(38603), + 70: uint16(39423), + 71: uint16(33537), + 72: uint16(20013), + 73: uint16(20210), + 74: uint16(34886), + 75: uint16(37325), + 76: uint16(21373), + 77: uint16(27355), + 78: uint16(26987), + 79: uint16(27713), + 80: uint16(33914), + 81: uint16(22686), + 82: uint16(24974), + 83: uint16(26366), + 84: uint16(25327), + 85: uint16(28893), + 86: uint16(29969), + 87: uint16(30151), + 88: uint16(32338), + 89: uint16(33976), + 90: uint16(35657), + 91: uint16(36104), + 92: uint16(20043), + 93: uint16(21482), + }, + 81: { + 0: uint16(21675), + 1: uint16(22320), + 2: uint16(22336), + 3: uint16(24535), + 4: uint16(25345), + 5: uint16(25351), + 6: uint16(25711), + 7: uint16(25903), + 8: uint16(26088), + 9: uint16(26234), + 10: uint16(26525), + 11: uint16(26547), + 12: uint16(27490), + 13: uint16(27744), + 14: uint16(27802), + 15: uint16(28460), + 16: uint16(30693), + 17: uint16(30757), + 18: uint16(31049), + 19: uint16(31063), + 20: uint16(32025), + 21: uint16(32930), + 22: uint16(33026), + 23: uint16(33267), + 24: uint16(33437), + 25: uint16(33463), + 26: uint16(34584), + 27: uint16(35468), + 28: uint16(63996), + 29: uint16(36100), + 30: uint16(36286), + 31: uint16(36978), + 32: uint16(30452), + 33: uint16(31257), + 34: uint16(31287), + 35: uint16(32340), + 36: uint16(32887), + 37: uint16(21767), + 38: uint16(21972), + 39: uint16(22645), + 40: uint16(25391), + 41: uint16(25634), + 42: uint16(26185), + 43: uint16(26187), + 44: uint16(26733), + 45: uint16(27035), + 46: uint16(27524), + 47: uint16(27941), + 48: uint16(28337), + 49: uint16(29645), + 50: uint16(29800), + 51: uint16(29857), + 52: uint16(30043), + 53: uint16(30137), + 54: uint16(30433), + 55: uint16(30494), + 56: uint16(30603), + 57: uint16(31206), + 58: uint16(32265), + 59: uint16(32285), + 60: uint16(33275), + 61: uint16(34095), + 62: uint16(34967), + 63: uint16(35386), + 64: uint16(36049), + 65: uint16(36587), + 66: uint16(36784), + 67: uint16(36914), + 68: uint16(37805), + 69: uint16(38499), + 70: uint16(38515), + 71: uint16(38663), + 72: uint16(20356), + 73: uint16(21489), + 74: uint16(23018), + 75: uint16(23241), + 76: uint16(24089), + 77: uint16(26702), + 78: uint16(29894), + 79: uint16(30142), + 80: uint16(31209), + 81: uint16(31378), + 82: uint16(33187), + 83: uint16(34541), + 84: uint16(36074), + 85: uint16(36300), + 86: uint16(36845), + 87: uint16(26015), + 88: uint16(26389), + 89: uint16(63997), + 90: uint16(22519), + 91: uint16(28503), + 92: uint16(32221), + 93: uint16(36655), + }, + 82: { + 0: uint16(37878), + 1: uint16(38598), + 2: uint16(24501), + 3: uint16(25074), + 4: uint16(28548), + 5: uint16(19988), + 6: uint16(20376), + 7: uint16(20511), + 8: uint16(21449), + 9: uint16(21983), + 10: uint16(23919), + 11: uint16(24046), + 12: uint16(27425), + 13: uint16(27492), + 14: uint16(30923), + 15: uint16(31642), + 16: uint16(63998), + 17: uint16(36425), + 18: uint16(36554), + 19: uint16(36974), + 20: uint16(25417), + 21: uint16(25662), + 22: uint16(30528), + 23: uint16(31364), + 24: uint16(37679), + 25: uint16(38015), + 26: uint16(40810), + 27: uint16(25776), + 28: uint16(28591), + 29: uint16(29158), + 30: uint16(29864), + 31: uint16(29914), + 32: uint16(31428), + 33: uint16(31762), + 34: uint16(32386), + 35: uint16(31922), + 36: uint16(32408), + 37: uint16(35738), + 38: uint16(36106), + 39: uint16(38013), + 40: uint16(39184), + 41: uint16(39244), + 42: uint16(21049), + 43: uint16(23519), + 44: uint16(25830), + 45: uint16(26413), + 46: uint16(32046), + 47: uint16(20717), + 48: uint16(21443), + 49: uint16(22649), + 50: uint16(24920), + 51: uint16(24921), + 52: uint16(25082), + 53: uint16(26028), + 54: uint16(31449), + 55: uint16(35730), + 56: uint16(35734), + 57: uint16(20489), + 58: uint16(20513), + 59: uint16(21109), + 60: uint16(21809), + 61: uint16(23100), + 62: uint16(24288), + 63: uint16(24432), + 64: uint16(24884), + 65: uint16(25950), + 66: uint16(26124), + 67: uint16(26166), + 68: uint16(26274), + 69: uint16(27085), + 70: uint16(28356), + 71: uint16(28466), + 72: uint16(29462), + 73: uint16(30241), + 74: uint16(31379), + 75: uint16(33081), + 76: uint16(33369), + 77: uint16(33750), + 78: uint16(33980), + 79: uint16(20661), + 80: uint16(22512), + 81: uint16(23488), + 82: uint16(23528), + 83: uint16(24425), + 84: uint16(25505), + 85: uint16(30758), + 86: uint16(32181), + 87: uint16(33756), + 88: uint16(34081), + 89: uint16(37319), + 90: uint16(37365), + 91: uint16(20874), + 92: uint16(26613), + 93: uint16(31574), + }, + 83: { + 0: uint16(36012), + 1: uint16(20932), + 2: uint16(22971), + 3: uint16(24765), + 4: uint16(34389), + 5: uint16(20508), + 6: uint16(63999), + 7: uint16(21076), + 8: uint16(23610), + 9: uint16(24957), + 10: uint16(25114), + 11: uint16(25299), + 12: uint16(25842), + 13: uint16(26021), + 14: uint16(28364), + 15: uint16(30240), + 16: uint16(33034), + 17: uint16(36448), + 18: uint16(38495), + 19: uint16(38587), + 20: uint16(20191), + 21: uint16(21315), + 22: uint16(21912), + 23: uint16(22825), + 24: uint16(24029), + 25: uint16(25797), + 26: uint16(27849), + 27: uint16(28154), + 28: uint16(29588), + 29: uint16(31359), + 30: uint16(33307), + 31: uint16(34214), + 32: uint16(36068), + 33: uint16(36368), + 34: uint16(36983), + 35: uint16(37351), + 36: uint16(38369), + 37: uint16(38433), + 38: uint16(38854), + 39: uint16(20984), + 40: uint16(21746), + 41: uint16(21894), + 42: uint16(24505), + 43: uint16(25764), + 44: uint16(28552), + 45: uint16(32180), + 46: uint16(36639), + 47: uint16(36685), + 48: uint16(37941), + 49: uint16(20681), + 50: uint16(23574), + 51: uint16(27838), + 52: uint16(28155), + 53: uint16(29979), + 54: uint16(30651), + 55: uint16(31805), + 56: uint16(31844), + 57: uint16(35449), + 58: uint16(35522), + 59: uint16(22558), + 60: uint16(22974), + 61: uint16(24086), + 62: uint16(25463), + 63: uint16(29266), + 64: uint16(30090), + 65: uint16(30571), + 66: uint16(35548), + 67: uint16(36028), + 68: uint16(36626), + 69: uint16(24307), + 70: uint16(26228), + 71: uint16(28152), + 72: uint16(32893), + 73: uint16(33729), + 74: uint16(35531), + 75: uint16(38737), + 76: uint16(39894), + 77: uint16(64000), + 78: uint16(21059), + 79: uint16(26367), + 80: uint16(28053), + 81: uint16(28399), + 82: uint16(32224), + 83: uint16(35558), + 84: uint16(36910), + 85: uint16(36958), + 86: uint16(39636), + 87: uint16(21021), + 88: uint16(21119), + 89: uint16(21736), + 90: uint16(24980), + 91: uint16(25220), + 92: uint16(25307), + 93: uint16(26786), + }, + 84: { + 0: uint16(26898), + 1: uint16(26970), + 2: uint16(27189), + 3: uint16(28818), + 4: uint16(28966), + 5: uint16(30813), + 6: uint16(30977), + 7: uint16(30990), + 8: uint16(31186), + 9: uint16(31245), + 10: uint16(32918), + 11: uint16(33400), + 12: uint16(33493), + 13: uint16(33609), + 14: uint16(34121), + 15: uint16(35970), + 16: uint16(36229), + 17: uint16(37218), + 18: uint16(37259), + 19: uint16(37294), + 20: uint16(20419), + 21: uint16(22225), + 22: uint16(29165), + 23: uint16(30679), + 24: uint16(34560), + 25: uint16(35320), + 26: uint16(23544), + 27: uint16(24534), + 28: uint16(26449), + 29: uint16(37032), + 30: uint16(21474), + 31: uint16(22618), + 32: uint16(23541), + 33: uint16(24740), + 34: uint16(24961), + 35: uint16(25696), + 36: uint16(32317), + 37: uint16(32880), + 38: uint16(34085), + 39: uint16(37507), + 40: uint16(25774), + 41: uint16(20652), + 42: uint16(23828), + 43: uint16(26368), + 44: uint16(22684), + 45: uint16(25277), + 46: uint16(25512), + 47: uint16(26894), + 48: uint16(27000), + 49: uint16(27166), + 50: uint16(28267), + 51: uint16(30394), + 52: uint16(31179), + 53: uint16(33467), + 54: uint16(33833), + 55: uint16(35535), + 56: uint16(36264), + 57: uint16(36861), + 58: uint16(37138), + 59: uint16(37195), + 60: uint16(37276), + 61: uint16(37648), + 62: uint16(37656), + 63: uint16(37786), + 64: uint16(38619), + 65: uint16(39478), + 66: uint16(39949), + 67: uint16(19985), + 68: uint16(30044), + 69: uint16(31069), + 70: uint16(31482), + 71: uint16(31569), + 72: uint16(31689), + 73: uint16(32302), + 74: uint16(33988), + 75: uint16(36441), + 76: uint16(36468), + 77: uint16(36600), + 78: uint16(36880), + 79: uint16(26149), + 80: uint16(26943), + 81: uint16(29763), + 82: uint16(20986), + 83: uint16(26414), + 84: uint16(40668), + 85: uint16(20805), + 86: uint16(24544), + 87: uint16(27798), + 88: uint16(34802), + 89: uint16(34909), + 90: uint16(34935), + 91: uint16(24756), + 92: uint16(33205), + 93: uint16(33795), + }, + 85: { + 0: uint16(36101), + 1: uint16(21462), + 2: uint16(21561), + 3: uint16(22068), + 4: uint16(23094), + 5: uint16(23601), + 6: uint16(28810), + 7: uint16(32736), + 8: uint16(32858), + 9: uint16(33030), + 10: uint16(33261), + 11: uint16(36259), + 12: uint16(37257), + 13: uint16(39519), + 14: uint16(40434), + 15: uint16(20596), + 16: uint16(20164), + 17: uint16(21408), + 18: uint16(24827), + 19: uint16(28204), + 20: uint16(23652), + 21: uint16(20360), + 22: uint16(20516), + 23: uint16(21988), + 24: uint16(23769), + 25: uint16(24159), + 26: uint16(24677), + 27: uint16(26772), + 28: uint16(27835), + 29: uint16(28100), + 30: uint16(29118), + 31: uint16(30164), + 32: uint16(30196), + 33: uint16(30305), + 34: uint16(31258), + 35: uint16(31305), + 36: uint16(32199), + 37: uint16(32251), + 38: uint16(32622), + 39: uint16(33268), + 40: uint16(34473), + 41: uint16(36636), + 42: uint16(38601), + 43: uint16(39347), + 44: uint16(40786), + 45: uint16(21063), + 46: uint16(21189), + 47: uint16(39149), + 48: uint16(35242), + 49: uint16(19971), + 50: uint16(26578), + 51: uint16(28422), + 52: uint16(20405), + 53: uint16(23522), + 54: uint16(26517), + 55: uint16(27784), + 56: uint16(28024), + 57: uint16(29723), + 58: uint16(30759), + 59: uint16(37341), + 60: uint16(37756), + 61: uint16(34756), + 62: uint16(31204), + 63: uint16(31281), + 64: uint16(24555), + 65: uint16(20182), + 66: uint16(21668), + 67: uint16(21822), + 68: uint16(22702), + 69: uint16(22949), + 70: uint16(24816), + 71: uint16(25171), + 72: uint16(25302), + 73: uint16(26422), + 74: uint16(26965), + 75: uint16(33333), + 76: uint16(38464), + 77: uint16(39345), + 78: uint16(39389), + 79: uint16(20524), + 80: uint16(21331), + 81: uint16(21828), + 82: uint16(22396), + 83: uint16(64001), + 84: uint16(25176), + 85: uint16(64002), + 86: uint16(25826), + 87: uint16(26219), + 88: uint16(26589), + 89: uint16(28609), + 90: uint16(28655), + 91: uint16(29730), + 92: uint16(29752), + 93: uint16(35351), + }, + 86: { + 0: uint16(37944), + 1: uint16(21585), + 2: uint16(22022), + 3: uint16(22374), + 4: uint16(24392), + 5: uint16(24986), + 6: uint16(27470), + 7: uint16(28760), + 8: uint16(28845), + 9: uint16(32187), + 10: uint16(35477), + 11: uint16(22890), + 12: uint16(33067), + 13: uint16(25506), + 14: uint16(30472), + 15: uint16(32829), + 16: uint16(36010), + 17: uint16(22612), + 18: uint16(25645), + 19: uint16(27067), + 20: uint16(23445), + 21: uint16(24081), + 22: uint16(28271), + 23: uint16(64003), + 24: uint16(34153), + 25: uint16(20812), + 26: uint16(21488), + 27: uint16(22826), + 28: uint16(24608), + 29: uint16(24907), + 30: uint16(27526), + 31: uint16(27760), + 32: uint16(27888), + 33: uint16(31518), + 34: uint16(32974), + 35: uint16(33492), + 36: uint16(36294), + 37: uint16(37040), + 38: uint16(39089), + 39: uint16(64004), + 40: uint16(25799), + 41: uint16(28580), + 42: uint16(25745), + 43: uint16(25860), + 44: uint16(20814), + 45: uint16(21520), + 46: uint16(22303), + 47: uint16(35342), + 48: uint16(24927), + 49: uint16(26742), + 50: uint16(64005), + 51: uint16(30171), + 52: uint16(31570), + 53: uint16(32113), + 54: uint16(36890), + 55: uint16(22534), + 56: uint16(27084), + 57: uint16(33151), + 58: uint16(35114), + 59: uint16(36864), + 60: uint16(38969), + 61: uint16(20600), + 62: uint16(22871), + 63: uint16(22956), + 64: uint16(25237), + 65: uint16(36879), + 66: uint16(39722), + 67: uint16(24925), + 68: uint16(29305), + 69: uint16(38358), + 70: uint16(22369), + 71: uint16(23110), + 72: uint16(24052), + 73: uint16(25226), + 74: uint16(25773), + 75: uint16(25850), + 76: uint16(26487), + 77: uint16(27874), + 78: uint16(27966), + 79: uint16(29228), + 80: uint16(29750), + 81: uint16(30772), + 82: uint16(32631), + 83: uint16(33453), + 84: uint16(36315), + 85: uint16(38935), + 86: uint16(21028), + 87: uint16(22338), + 88: uint16(26495), + 89: uint16(29256), + 90: uint16(29923), + 91: uint16(36009), + 92: uint16(36774), + 93: uint16(37393), + }, + 87: { + 0: uint16(38442), + 1: uint16(20843), + 2: uint16(21485), + 3: uint16(25420), + 4: uint16(20329), + 5: uint16(21764), + 6: uint16(24726), + 7: uint16(25943), + 8: uint16(27803), + 9: uint16(28031), + 10: uint16(29260), + 11: uint16(29437), + 12: uint16(31255), + 13: uint16(35207), + 14: uint16(35997), + 15: uint16(24429), + 16: uint16(28558), + 17: uint16(28921), + 18: uint16(33192), + 19: uint16(24846), + 20: uint16(20415), + 21: uint16(20559), + 22: uint16(25153), + 23: uint16(29255), + 24: uint16(31687), + 25: uint16(32232), + 26: uint16(32745), + 27: uint16(36941), + 28: uint16(38829), + 29: uint16(39449), + 30: uint16(36022), + 31: uint16(22378), + 32: uint16(24179), + 33: uint16(26544), + 34: uint16(33805), + 35: uint16(35413), + 36: uint16(21536), + 37: uint16(23318), + 38: uint16(24163), + 39: uint16(24290), + 40: uint16(24330), + 41: uint16(25987), + 42: uint16(32954), + 43: uint16(34109), + 44: uint16(38281), + 45: uint16(38491), + 46: uint16(20296), + 47: uint16(21253), + 48: uint16(21261), + 49: uint16(21263), + 50: uint16(21638), + 51: uint16(21754), + 52: uint16(22275), + 53: uint16(24067), + 54: uint16(24598), + 55: uint16(25243), + 56: uint16(25265), + 57: uint16(25429), + 58: uint16(64006), + 59: uint16(27873), + 60: uint16(28006), + 61: uint16(30129), + 62: uint16(30770), + 63: uint16(32990), + 64: uint16(33071), + 65: uint16(33502), + 66: uint16(33889), + 67: uint16(33970), + 68: uint16(34957), + 69: uint16(35090), + 70: uint16(36875), + 71: uint16(37610), + 72: uint16(39165), + 73: uint16(39825), + 74: uint16(24133), + 75: uint16(26292), + 76: uint16(26333), + 77: uint16(28689), + 78: uint16(29190), + 79: uint16(64007), + 80: uint16(20469), + 81: uint16(21117), + 82: uint16(24426), + 83: uint16(24915), + 84: uint16(26451), + 85: uint16(27161), + 86: uint16(28418), + 87: uint16(29922), + 88: uint16(31080), + 89: uint16(34920), + 90: uint16(35961), + 91: uint16(39111), + 92: uint16(39108), + 93: uint16(39491), + }, + 88: { + 0: uint16(21697), + 1: uint16(31263), + 2: uint16(26963), + 3: uint16(35575), + 4: uint16(35914), + 5: uint16(39080), + 6: uint16(39342), + 7: uint16(24444), + 8: uint16(25259), + 9: uint16(30130), + 10: uint16(30382), + 11: uint16(34987), + 12: uint16(36991), + 13: uint16(38466), + 14: uint16(21305), + 15: uint16(24380), + 16: uint16(24517), + 17: uint16(27852), + 18: uint16(29644), + 19: uint16(30050), + 20: uint16(30091), + 21: uint16(31558), + 22: uint16(33534), + 23: uint16(39325), + 24: uint16(20047), + 25: uint16(36924), + 26: uint16(19979), + 27: uint16(20309), + 28: uint16(21414), + 29: uint16(22799), + 30: uint16(24264), + 31: uint16(26160), + 32: uint16(27827), + 33: uint16(29781), + 34: uint16(33655), + 35: uint16(34662), + 36: uint16(36032), + 37: uint16(36944), + 38: uint16(38686), + 39: uint16(39957), + 40: uint16(22737), + 41: uint16(23416), + 42: uint16(34384), + 43: uint16(35604), + 44: uint16(40372), + 45: uint16(23506), + 46: uint16(24680), + 47: uint16(24717), + 48: uint16(26097), + 49: uint16(27735), + 50: uint16(28450), + 51: uint16(28579), + 52: uint16(28698), + 53: uint16(32597), + 54: uint16(32752), + 55: uint16(38289), + 56: uint16(38290), + 57: uint16(38480), + 58: uint16(38867), + 59: uint16(21106), + 60: uint16(36676), + 61: uint16(20989), + 62: uint16(21547), + 63: uint16(21688), + 64: uint16(21859), + 65: uint16(21898), + 66: uint16(27323), + 67: uint16(28085), + 68: uint16(32216), + 69: uint16(33382), + 70: uint16(37532), + 71: uint16(38519), + 72: uint16(40569), + 73: uint16(21512), + 74: uint16(21704), + 75: uint16(30418), + 76: uint16(34532), + 77: uint16(38308), + 78: uint16(38356), + 79: uint16(38492), + 80: uint16(20130), + 81: uint16(20233), + 82: uint16(23022), + 83: uint16(23270), + 84: uint16(24055), + 85: uint16(24658), + 86: uint16(25239), + 87: uint16(26477), + 88: uint16(26689), + 89: uint16(27782), + 90: uint16(28207), + 91: uint16(32568), + 92: uint16(32923), + 93: uint16(33322), + }, + 89: { + 0: uint16(64008), + 1: uint16(64009), + 2: uint16(38917), + 3: uint16(20133), + 4: uint16(20565), + 5: uint16(21683), + 6: uint16(22419), + 7: uint16(22874), + 8: uint16(23401), + 9: uint16(23475), + 10: uint16(25032), + 11: uint16(26999), + 12: uint16(28023), + 13: uint16(28707), + 14: uint16(34809), + 15: uint16(35299), + 16: uint16(35442), + 17: uint16(35559), + 18: uint16(36994), + 19: uint16(39405), + 20: uint16(39608), + 21: uint16(21182), + 22: uint16(26680), + 23: uint16(20502), + 24: uint16(24184), + 25: uint16(26447), + 26: uint16(33607), + 27: uint16(34892), + 28: uint16(20139), + 29: uint16(21521), + 30: uint16(22190), + 31: uint16(29670), + 32: uint16(37141), + 33: uint16(38911), + 34: uint16(39177), + 35: uint16(39255), + 36: uint16(39321), + 37: uint16(22099), + 38: uint16(22687), + 39: uint16(34395), + 40: uint16(35377), + 41: uint16(25010), + 42: uint16(27382), + 43: uint16(29563), + 44: uint16(36562), + 45: uint16(27463), + 46: uint16(38570), + 47: uint16(39511), + 48: uint16(22869), + 49: uint16(29184), + 50: uint16(36203), + 51: uint16(38761), + 52: uint16(20436), + 53: uint16(23796), + 54: uint16(24358), + 55: uint16(25080), + 56: uint16(26203), + 57: uint16(27883), + 58: uint16(28843), + 59: uint16(29572), + 60: uint16(29625), + 61: uint16(29694), + 62: uint16(30505), + 63: uint16(30541), + 64: uint16(32067), + 65: uint16(32098), + 66: uint16(32291), + 67: uint16(33335), + 68: uint16(34898), + 69: uint16(64010), + 70: uint16(36066), + 71: uint16(37449), + 72: uint16(39023), + 73: uint16(23377), + 74: uint16(31348), + 75: uint16(34880), + 76: uint16(38913), + 77: uint16(23244), + 78: uint16(20448), + 79: uint16(21332), + 80: uint16(22846), + 81: uint16(23805), + 82: uint16(25406), + 83: uint16(28025), + 84: uint16(29433), + 85: uint16(33029), + 86: uint16(33031), + 87: uint16(33698), + 88: uint16(37583), + 89: uint16(38960), + 90: uint16(20136), + 91: uint16(20804), + 92: uint16(21009), + 93: uint16(22411), + }, + 90: { + 0: uint16(24418), + 1: uint16(27842), + 2: uint16(28366), + 3: uint16(28677), + 4: uint16(28752), + 5: uint16(28847), + 6: uint16(29074), + 7: uint16(29673), + 8: uint16(29801), + 9: uint16(33610), + 10: uint16(34722), + 11: uint16(34913), + 12: uint16(36872), + 13: uint16(37026), + 14: uint16(37795), + 15: uint16(39336), + 16: uint16(20846), + 17: uint16(24407), + 18: uint16(24800), + 19: uint16(24935), + 20: uint16(26291), + 21: uint16(34137), + 22: uint16(36426), + 23: uint16(37295), + 24: uint16(38795), + 25: uint16(20046), + 26: uint16(20114), + 27: uint16(21628), + 28: uint16(22741), + 29: uint16(22778), + 30: uint16(22909), + 31: uint16(23733), + 32: uint16(24359), + 33: uint16(25142), + 34: uint16(25160), + 35: uint16(26122), + 36: uint16(26215), + 37: uint16(27627), + 38: uint16(28009), + 39: uint16(28111), + 40: uint16(28246), + 41: uint16(28408), + 42: uint16(28564), + 43: uint16(28640), + 44: uint16(28649), + 45: uint16(28765), + 46: uint16(29392), + 47: uint16(29733), + 48: uint16(29786), + 49: uint16(29920), + 50: uint16(30355), + 51: uint16(31068), + 52: uint16(31946), + 53: uint16(32286), + 54: uint16(32993), + 55: uint16(33446), + 56: uint16(33899), + 57: uint16(33983), + 58: uint16(34382), + 59: uint16(34399), + 60: uint16(34676), + 61: uint16(35703), + 62: uint16(35946), + 63: uint16(37804), + 64: uint16(38912), + 65: uint16(39013), + 66: uint16(24785), + 67: uint16(25110), + 68: uint16(37239), + 69: uint16(23130), + 70: uint16(26127), + 71: uint16(28151), + 72: uint16(28222), + 73: uint16(29759), + 74: uint16(39746), + 75: uint16(24573), + 76: uint16(24794), + 77: uint16(31503), + 78: uint16(21700), + 79: uint16(24344), + 80: uint16(27742), + 81: uint16(27859), + 82: uint16(27946), + 83: uint16(28888), + 84: uint16(32005), + 85: uint16(34425), + 86: uint16(35340), + 87: uint16(40251), + 88: uint16(21270), + 89: uint16(21644), + 90: uint16(23301), + 91: uint16(27194), + 92: uint16(28779), + 93: uint16(30069), + }, + 91: { + 0: uint16(31117), + 1: uint16(31166), + 2: uint16(33457), + 3: uint16(33775), + 4: uint16(35441), + 5: uint16(35649), + 6: uint16(36008), + 7: uint16(38772), + 8: uint16(64011), + 9: uint16(25844), + 10: uint16(25899), + 11: uint16(30906), + 12: uint16(30907), + 13: uint16(31339), + 14: uint16(20024), + 15: uint16(21914), + 16: uint16(22864), + 17: uint16(23462), + 18: uint16(24187), + 19: uint16(24739), + 20: uint16(25563), + 21: uint16(27489), + 22: uint16(26213), + 23: uint16(26707), + 24: uint16(28185), + 25: uint16(29029), + 26: uint16(29872), + 27: uint16(32008), + 28: uint16(36996), + 29: uint16(39529), + 30: uint16(39973), + 31: uint16(27963), + 32: uint16(28369), + 33: uint16(29502), + 34: uint16(35905), + 35: uint16(38346), + 36: uint16(20976), + 37: uint16(24140), + 38: uint16(24488), + 39: uint16(24653), + 40: uint16(24822), + 41: uint16(24880), + 42: uint16(24908), + 43: uint16(26179), + 44: uint16(26180), + 45: uint16(27045), + 46: uint16(27841), + 47: uint16(28255), + 48: uint16(28361), + 49: uint16(28514), + 50: uint16(29004), + 51: uint16(29852), + 52: uint16(30343), + 53: uint16(31681), + 54: uint16(31783), + 55: uint16(33618), + 56: uint16(34647), + 57: uint16(36945), + 58: uint16(38541), + 59: uint16(40643), + 60: uint16(21295), + 61: uint16(22238), + 62: uint16(24315), + 63: uint16(24458), + 64: uint16(24674), + 65: uint16(24724), + 66: uint16(25079), + 67: uint16(26214), + 68: uint16(26371), + 69: uint16(27292), + 70: uint16(28142), + 71: uint16(28590), + 72: uint16(28784), + 73: uint16(29546), + 74: uint16(32362), + 75: uint16(33214), + 76: uint16(33588), + 77: uint16(34516), + 78: uint16(35496), + 79: uint16(36036), + 80: uint16(21123), + 81: uint16(29554), + 82: uint16(23446), + 83: uint16(27243), + 84: uint16(37892), + 85: uint16(21742), + 86: uint16(22150), + 87: uint16(23389), + 88: uint16(25928), + 89: uint16(25989), + 90: uint16(26313), + 91: uint16(26783), + 92: uint16(28045), + 93: uint16(28102), + }, + 92: { + 0: uint16(29243), + 1: uint16(32948), + 2: uint16(37237), + 3: uint16(39501), + 4: uint16(20399), + 5: uint16(20505), + 6: uint16(21402), + 7: uint16(21518), + 8: uint16(21564), + 9: uint16(21897), + 10: uint16(21957), + 11: uint16(24127), + 12: uint16(24460), + 13: uint16(26429), + 14: uint16(29030), + 15: uint16(29661), + 16: uint16(36869), + 17: uint16(21211), + 18: uint16(21235), + 19: uint16(22628), + 20: uint16(22734), + 21: uint16(28932), + 22: uint16(29071), + 23: uint16(29179), + 24: uint16(34224), + 25: uint16(35347), + 26: uint16(26248), + 27: uint16(34216), + 28: uint16(21927), + 29: uint16(26244), + 30: uint16(29002), + 31: uint16(33841), + 32: uint16(21321), + 33: uint16(21913), + 34: uint16(27585), + 35: uint16(24409), + 36: uint16(24509), + 37: uint16(25582), + 38: uint16(26249), + 39: uint16(28999), + 40: uint16(35569), + 41: uint16(36637), + 42: uint16(40638), + 43: uint16(20241), + 44: uint16(25658), + 45: uint16(28875), + 46: uint16(30054), + 47: uint16(34407), + 48: uint16(24676), + 49: uint16(35662), + 50: uint16(40440), + 51: uint16(20807), + 52: uint16(20982), + 53: uint16(21256), + 54: uint16(27958), + 55: uint16(33016), + 56: uint16(40657), + 57: uint16(26133), + 58: uint16(27427), + 59: uint16(28824), + 60: uint16(30165), + 61: uint16(21507), + 62: uint16(23673), + 63: uint16(32007), + 64: uint16(35350), + 65: uint16(27424), + 66: uint16(27453), + 67: uint16(27462), + 68: uint16(21560), + 69: uint16(24688), + 70: uint16(27965), + 71: uint16(32725), + 72: uint16(33288), + 73: uint16(20694), + 74: uint16(20958), + 75: uint16(21916), + 76: uint16(22123), + 77: uint16(22221), + 78: uint16(23020), + 79: uint16(23305), + 80: uint16(24076), + 81: uint16(24985), + 82: uint16(24984), + 83: uint16(25137), + 84: uint16(26206), + 85: uint16(26342), + 86: uint16(29081), + 87: uint16(29113), + 88: uint16(29114), + 89: uint16(29351), + 90: uint16(31143), + 91: uint16(31232), + 92: uint16(32690), + 93: uint16(35440), + }, +} + +var _rev_jis = [6879]uint16{ + 0: uint16(31), + 1: uint16(80), + 2: uint16(81), + 3: uint16(87), + 4: uint16(14), + 5: uint16(299), + 6: uint16(74), + 7: uint16(61), + 8: uint16(12), + 9: uint16(344), + 10: uint16(62), + 11: uint16(63), + 12: uint16(1280), + 13: uint16(1281), + 14: uint16(1282), + 15: uint16(1283), + 16: uint16(1284), + 17: uint16(1285), + 18: uint16(1286), + 19: uint16(1287), + 20: uint16(1288), + 21: uint16(1289), + 22: uint16(1290), + 23: uint16(1291), + 24: uint16(1292), + 25: uint16(1293), + 26: uint16(1294), + 27: uint16(1295), + 28: uint16(1296), + 29: uint16(1297), + 30: uint16(1298), + 31: uint16(1299), + 32: uint16(1300), + 33: uint16(1301), + 34: uint16(1302), + 35: uint16(1303), + 36: uint16(1312), + 37: uint16(1313), + 38: uint16(1314), + 39: uint16(1315), + 40: uint16(1316), + 41: uint16(1317), + 42: uint16(1318), + 43: uint16(1319), + 44: uint16(1320), + 45: uint16(1321), + 46: uint16(1322), + 47: uint16(1323), + 48: uint16(1324), + 49: uint16(1325), + 50: uint16(1326), + 51: uint16(1327), + 52: uint16(1328), + 53: uint16(1329), + 54: uint16(1330), + 55: uint16(1331), + 56: uint16(1332), + 57: uint16(1333), + 58: uint16(1334), + 59: uint16(1335), + 60: uint16(1542), + 61: uint16(1536), + 62: uint16(1537), + 63: uint16(1538), + 64: uint16(1539), + 65: uint16(1540), + 66: uint16(1541), + 67: uint16(1543), + 68: uint16(1544), + 69: uint16(1545), + 70: uint16(1546), + 71: uint16(1547), + 72: uint16(1548), + 73: uint16(1549), + 74: uint16(1550), + 75: uint16(1551), + 76: uint16(1552), + 77: uint16(1553), + 78: uint16(1554), + 79: uint16(1555), + 80: uint16(1556), + 81: uint16(1557), + 82: uint16(1558), + 83: uint16(1559), + 84: uint16(1560), + 85: uint16(1561), + 86: uint16(1562), + 87: uint16(1563), + 88: uint16(1564), + 89: uint16(1565), + 90: uint16(1566), + 91: uint16(1567), + 92: uint16(1568), + 93: uint16(1584), + 94: uint16(1585), + 95: uint16(1586), + 96: uint16(1587), + 97: uint16(1588), + 98: uint16(1589), + 99: uint16(1591), + 100: uint16(1592), + 101: uint16(1593), + 102: uint16(1594), + 103: uint16(1595), + 104: uint16(1596), + 105: uint16(1597), + 106: uint16(1598), + 107: uint16(1599), + 108: uint16(1600), + 109: uint16(1601), + 110: uint16(1602), + 111: uint16(1603), + 112: uint16(1604), + 113: uint16(1605), + 114: uint16(1606), + 115: uint16(1607), + 116: uint16(1608), + 117: uint16(1609), + 118: uint16(1610), + 119: uint16(1611), + 120: uint16(1612), + 121: uint16(1613), + 122: uint16(1614), + 123: uint16(1615), + 124: uint16(1616), + 125: uint16(1590), + 126: uint16(29), + 127: uint16(28), + 128: uint16(33), + 129: uint16(37), + 130: uint16(38), + 131: uint16(39), + 132: uint16(40), + 133: uint16(342), + 134: uint16(343), + 135: uint16(36), + 136: uint16(35), + 137: uint16(338), + 138: uint16(75), + 139: uint16(76), + 140: uint16(263), + 141: uint16(77), + 142: uint16(337), + 143: uint16(266), + 144: uint16(267), + 145: uint16(265), + 146: uint16(268), + 147: uint16(300), + 148: uint16(301), + 149: uint16(302), + 150: uint16(318), + 151: uint16(303), + 152: uint16(319), + 153: uint16(281), + 154: uint16(282), + 155: uint16(60), + 156: uint16(324), + 157: uint16(326), + 158: uint16(70), + 159: uint16(315), + 160: uint16(297), + 161: uint16(298), + 162: uint16(288), + 163: uint16(287), + 164: uint16(328), + 165: uint16(329), + 166: uint16(71), + 167: uint16(327), + 168: uint16(325), + 169: uint16(321), + 170: uint16(65), + 171: uint16(320), + 172: uint16(68), + 173: uint16(69), + 174: uint16(322), + 175: uint16(323), + 176: uint16(285), + 177: uint16(286), + 178: uint16(283), + 179: uint16(284), + 180: uint16(316), + 181: uint16(317), + 182: uint16(1792), + 183: uint16(1803), + 184: uint16(1793), + 185: uint16(1804), + 186: uint16(1794), + 187: uint16(1805), + 188: uint16(1795), + 189: uint16(1806), + 190: uint16(1797), + 191: uint16(1808), + 192: uint16(1796), + 193: uint16(1807), + 194: uint16(1798), + 195: uint16(1819), + 196: uint16(1814), + 197: uint16(1809), + 198: uint16(1800), + 199: uint16(1821), + 200: uint16(1816), + 201: uint16(1811), + 202: uint16(1799), + 203: uint16(1815), + 204: uint16(1820), + 205: uint16(1810), + 206: uint16(1801), + 207: uint16(1817), + 208: uint16(1822), + 209: uint16(1812), + 210: uint16(1802), + 211: uint16(1818), + 212: uint16(1823), + 213: uint16(1813), + 214: uint16(258), + 215: uint16(257), + 216: uint16(260), + 217: uint16(259), + 218: uint16(262), + 219: uint16(261), + 220: uint16(256), + 221: uint16(93), + 222: uint16(90), + 223: uint16(92), + 224: uint16(91), + 225: uint16(349), + 226: uint16(89), + 227: uint16(88), + 228: uint16(73), + 229: uint16(72), + 230: uint16(341), + 231: uint16(340), + 232: uint16(339), + 234: uint16(1), + 235: uint16(2), + 236: uint16(22), + 237: uint16(24), + 238: uint16(25), + 239: uint16(26), + 240: uint16(49), + 241: uint16(50), + 242: uint16(51), + 243: uint16(52), + 244: uint16(53), + 245: uint16(54), + 246: uint16(55), + 247: uint16(56), + 248: uint16(57), + 249: uint16(58), + 250: uint16(264), + 251: uint16(269), + 252: uint16(43), + 253: uint16(44), + 254: uint16(32), + 255: uint16(768), + 256: uint16(769), + 257: uint16(770), + 258: uint16(771), + 259: uint16(772), + 260: uint16(773), + 261: uint16(774), + 262: uint16(775), + 263: uint16(776), + 264: uint16(777), + 265: uint16(778), + 266: uint16(779), + 267: uint16(780), + 268: uint16(781), + 269: uint16(782), + 270: uint16(783), + 271: uint16(784), + 272: uint16(785), + 273: uint16(786), + 274: uint16(787), + 275: uint16(788), + 276: uint16(789), + 277: uint16(790), + 278: uint16(791), + 279: uint16(792), + 280: uint16(793), + 281: uint16(794), + 282: uint16(795), + 283: uint16(796), + 284: uint16(797), + 285: uint16(798), + 286: uint16(799), + 287: uint16(800), + 288: uint16(801), + 289: uint16(802), + 290: uint16(803), + 291: uint16(804), + 292: uint16(805), + 293: uint16(806), + 294: uint16(807), + 295: uint16(808), + 296: uint16(809), + 297: uint16(810), + 298: uint16(811), + 299: uint16(812), + 300: uint16(813), + 301: uint16(814), + 302: uint16(815), + 303: uint16(816), + 304: uint16(817), + 305: uint16(818), + 306: uint16(819), + 307: uint16(820), + 308: uint16(821), + 309: uint16(822), + 310: uint16(823), + 311: uint16(824), + 312: uint16(825), + 313: uint16(826), + 314: uint16(827), + 315: uint16(828), + 316: uint16(829), + 317: uint16(830), + 318: uint16(831), + 319: uint16(832), + 320: uint16(833), + 321: uint16(834), + 322: uint16(835), + 323: uint16(836), + 324: uint16(837), + 325: uint16(838), + 326: uint16(839), + 327: uint16(840), + 328: uint16(841), + 329: uint16(842), + 330: uint16(843), + 331: uint16(844), + 332: uint16(845), + 333: uint16(846), + 334: uint16(847), + 335: uint16(848), + 336: uint16(849), + 337: uint16(850), + 338: uint16(10), + 339: uint16(11), + 340: uint16(20), + 341: uint16(21), + 342: uint16(1024), + 343: uint16(1025), + 344: uint16(1026), + 345: uint16(1027), + 346: uint16(1028), + 347: uint16(1029), + 348: uint16(1030), + 349: uint16(1031), + 350: uint16(1032), + 351: uint16(1033), + 352: uint16(1034), + 353: uint16(1035), + 354: uint16(1036), + 355: uint16(1037), + 356: uint16(1038), + 357: uint16(1039), + 358: uint16(1040), + 359: uint16(1041), + 360: uint16(1042), + 361: uint16(1043), + 362: uint16(1044), + 363: uint16(1045), + 364: uint16(1046), + 365: uint16(1047), + 366: uint16(1048), + 367: uint16(1049), + 368: uint16(1050), + 369: uint16(1051), + 370: uint16(1052), + 371: uint16(1053), + 372: uint16(1054), + 373: uint16(1055), + 374: uint16(1056), + 375: uint16(1057), + 376: uint16(1058), + 377: uint16(1059), + 378: uint16(1060), + 379: uint16(1061), + 380: uint16(1062), + 381: uint16(1063), + 382: uint16(1064), + 383: uint16(1065), + 384: uint16(1066), + 385: uint16(1067), + 386: uint16(1068), + 387: uint16(1069), + 388: uint16(1070), + 389: uint16(1071), + 390: uint16(1072), + 391: uint16(1073), + 392: uint16(1074), + 393: uint16(1075), + 394: uint16(1076), + 395: uint16(1077), + 396: uint16(1078), + 397: uint16(1079), + 398: uint16(1080), + 399: uint16(1081), + 400: uint16(1082), + 401: uint16(1083), + 402: uint16(1084), + 403: uint16(1085), + 404: uint16(1086), + 405: uint16(1087), + 406: uint16(1088), + 407: uint16(1089), + 408: uint16(1090), + 409: uint16(1091), + 410: uint16(1092), + 411: uint16(1093), + 412: uint16(1094), + 413: uint16(1095), + 414: uint16(1096), + 415: uint16(1097), + 416: uint16(1098), + 417: uint16(1099), + 418: uint16(1100), + 419: uint16(1101), + 420: uint16(1102), + 421: uint16(1103), + 422: uint16(1104), + 423: uint16(1105), + 424: uint16(1106), + 425: uint16(1107), + 426: uint16(1108), + 427: uint16(1109), + 428: uint16(5), + 429: uint16(27), + 430: uint16(18), + 431: uint16(19), + 432: uint16(3915), + 433: uint16(8793), + 434: uint16(6934), + 435: uint16(10843), + 436: uint16(7493), + 437: uint16(6671), + 438: uint16(7492), + 439: uint16(4379), + 440: uint16(10291), + 441: uint16(11294), + 442: uint16(12033), + 443: uint16(4110), + 444: uint16(4685), + 445: uint16(12034), + 446: uint16(7939), + 447: uint16(12577), + 448: uint16(5173), + 449: uint16(10521), + 450: uint16(7494), + 451: uint16(11549), + 452: uint16(10529), + 453: uint16(12035), + 454: uint16(8773), + 455: uint16(12036), + 456: uint16(5465), + 457: uint16(12037), + 458: uint16(4924), + 459: uint16(8719), + 460: uint16(6982), + 461: uint16(12038), + 462: uint16(12039), + 463: uint16(12040), + 464: uint16(9748), + 465: uint16(5174), + 466: uint16(9750), + 467: uint16(9538), + 468: uint16(5922), + 469: uint16(10770), + 470: uint16(18472), + 471: uint16(12041), + 472: uint16(7495), + 473: uint16(12042), + 474: uint16(4372), + 475: uint16(5444), + 476: uint16(5967), + 477: uint16(11080), + 478: uint16(13573), + 479: uint16(11343), + 480: uint16(9564), + 481: uint16(4868), + 482: uint16(5140), + 483: uint16(12043), + 484: uint16(12044), + 485: uint16(11546), + 486: uint16(11292), + 487: uint16(8263), + 488: uint16(12046), + 489: uint16(6741), + 490: uint16(9554), + 491: uint16(12049), + 492: uint16(4125), + 493: uint16(5950), + 494: uint16(5949), + 495: uint16(3909), + 496: uint16(11818), + 497: uint16(11817), + 498: uint16(6418), + 499: uint16(3840), + 500: uint16(12050), + 501: uint16(12051), + 502: uint16(12052), + 503: uint16(10771), + 504: uint16(12053), + 505: uint16(5969), + 506: uint16(3910), + 507: uint16(10833), + 508: uint16(5211), + 509: uint16(5212), + 510: uint16(5213), + 511: uint16(9025), + 512: uint16(11547), + 513: uint16(12054), + 514: uint16(12055), + 515: uint16(12056), + 516: uint16(7724), + 517: uint16(7193), + 518: uint16(7725), + 519: uint16(12061), + 520: uint16(12059), + 521: uint16(12060), + 522: uint16(5175), + 523: uint16(6402), + 524: uint16(4431), + 525: uint16(12058), + 526: uint16(12057), + 527: uint16(10504), + 528: uint16(6693), + 529: uint16(6692), + 530: uint16(8477), + 531: uint16(12062), + 532: uint16(10292), + 533: uint16(8006), + 534: uint16(23), + 535: uint16(12063), + 536: uint16(12065), + 537: uint16(8516), + 538: uint16(11584), + 539: uint16(3881), + 540: uint16(12064), + 541: uint16(4381), + 542: uint16(5411), + 543: uint16(8774), + 544: uint16(5710), + 545: uint16(12066), + 546: uint16(9731), + 547: uint16(4938), + 548: uint16(12067), + 549: uint16(3882), + 550: uint16(5951), + 551: uint16(4939), + 552: uint16(10329), + 553: uint16(10001), + 554: uint16(5176), + 555: uint16(4432), + 556: uint16(12102), + 557: uint16(9248), + 558: uint16(9803), + 559: uint16(12069), + 560: uint16(10011), + 561: uint16(11585), + 562: uint16(7692), + 563: uint16(6694), + 564: uint16(6742), + 565: uint16(4383), + 566: uint16(9008), + 567: uint16(8705), + 568: uint16(12073), + 569: uint16(3883), + 570: uint16(9026), + 571: uint16(7194), + 572: uint16(6419), + 573: uint16(11267), + 574: uint16(8493), + 575: uint16(4382), + 576: uint16(12072), + 577: uint16(11293), + 578: uint16(12068), + 579: uint16(12070), + 580: uint16(6477), + 581: uint16(12071), + 582: uint16(13315), + 583: uint16(12079), + 584: uint16(12082), + 585: uint16(12080), + 586: uint16(4385), + 587: uint16(10522), + 588: uint16(12074), + 589: uint16(12078), + 590: uint16(5970), + 591: uint16(6695), + 592: uint16(4869), + 593: uint16(12083), + 594: uint16(12075), + 595: uint16(11586), + 596: uint16(6743), + 597: uint16(12076), + 598: uint16(12081), + 599: uint16(12084), + 600: uint16(12077), + 601: uint16(5376), + 602: uint16(3884), + 603: uint16(5377), + 604: uint16(4384), + 605: uint16(13316), + 606: uint16(10840), + 607: uint16(10317), + 608: uint16(5971), + 609: uint16(7694), + 610: uint16(11542), + 611: uint16(10551), + 612: uint16(5655), + 613: uint16(8452), + 614: uint16(4419), + 615: uint16(7218), + 616: uint16(12088), + 617: uint16(12093), + 618: uint16(12091), + 619: uint16(12086), + 620: uint16(8462), + 621: uint16(12089), + 622: uint16(12092), + 623: uint16(12090), + 624: uint16(10556), + 625: uint16(12087), + 626: uint16(7693), + 627: uint16(10834), + 628: uint16(12094), + 629: uint16(12095), + 630: uint16(7171), + 631: uint16(12108), + 632: uint16(9775), + 633: uint16(10261), + 634: uint16(12103), + 635: uint16(10575), + 636: uint16(4373), + 637: uint16(12107), + 638: uint16(12101), + 639: uint16(12110), + 640: uint16(8241), + 641: uint16(5923), + 642: uint16(9787), + 643: uint16(16166), + 644: uint16(12109), + 645: uint16(9276), + 646: uint16(12098), + 647: uint16(5973), + 648: uint16(5972), + 649: uint16(12096), + 650: uint16(6969), + 651: uint16(12104), + 652: uint16(10574), + 653: uint16(8748), + 654: uint16(12100), + 655: uint16(5712), + 656: uint16(12097), + 657: uint16(12105), + 658: uint16(12099), + 659: uint16(11568), + 660: uint16(12106), + 661: uint16(11808), + 662: uint16(5445), + 663: uint16(5711), + 664: uint16(12111), + 665: uint16(12112), + 666: uint16(12116), + 667: uint16(3885), + 668: uint16(10543), + 669: uint16(12115), + 670: uint16(12114), + 671: uint16(12118), + 672: uint16(12117), + 673: uint16(9027), + 674: uint16(5713), + 675: uint16(12119), + 676: uint16(6948), + 677: uint16(8453), + 678: uint16(9028), + 679: uint16(5461), + 680: uint16(12120), + 681: uint16(5141), + 682: uint16(12121), + 683: uint16(12123), + 684: uint16(10772), + 685: uint16(5701), + 686: uint16(6672), + 687: uint16(10070), + 688: uint16(12122), + 689: uint16(6436), + 690: uint16(11298), + 691: uint16(12125), + 692: uint16(12290), + 693: uint16(12124), + 694: uint16(6435), + 695: uint16(7260), + 696: uint16(5656), + 697: uint16(12291), + 698: uint16(5422), + 699: uint16(12288), + 700: uint16(12289), + 701: uint16(9486), + 702: uint16(8283), + 703: uint16(5378), + 704: uint16(10796), + 705: uint16(12292), + 706: uint16(11548), + 707: uint16(12293), + 708: uint16(12296), + 709: uint16(12294), + 710: uint16(8237), + 711: uint16(12295), + 712: uint16(12297), + 713: uint16(12299), + 714: uint16(12298), + 715: uint16(10535), + 716: uint16(5142), + 717: uint16(12301), + 718: uint16(12302), + 719: uint16(4366), + 720: uint16(12300), + 721: uint16(6995), + 722: uint16(12305), + 723: uint16(12304), + 724: uint16(12303), + 725: uint16(12085), + 726: uint16(12306), + 727: uint16(7261), + 728: uint16(12307), + 729: uint16(11268), + 730: uint16(11064), + 731: uint16(12309), + 732: uint16(12308), + 733: uint16(12311), + 734: uint16(12310), + 735: uint16(12312), + 736: uint16(12313), + 737: uint16(3923), + 738: uint16(5908), + 739: uint16(5658), + 740: uint16(7195), + 741: uint16(8794), + 742: uint16(5379), + 743: uint16(8007), + 744: uint16(5974), + 745: uint16(6221), + 746: uint16(12315), + 747: uint16(11047), + 748: uint16(9253), + 749: uint16(6744), + 750: uint16(12314), + 751: uint16(12316), + 752: uint16(9277), + 753: uint16(4692), + 754: uint16(12317), + 755: uint16(9565), + 756: uint16(8211), + 757: uint16(12319), + 758: uint16(12320), + 759: uint16(9995), + 760: uint16(5975), + 761: uint16(11802), + 762: uint16(12321), + 763: uint16(5381), + 764: uint16(10523), + 765: uint16(8469), + 766: uint16(5456), + 767: uint16(9236), + 768: uint16(5714), + 769: uint16(12322), + 770: uint16(12323), + 771: uint16(9537), + 772: uint16(4158), + 773: uint16(12326), + 774: uint16(6492), + 775: uint16(12325), + 776: uint16(6437), + 777: uint16(12327), + 778: uint16(17741), + 779: uint16(12328), + 780: uint16(10784), + 781: uint16(12329), + 782: uint16(12330), + 783: uint16(12331), + 784: uint16(7496), + 785: uint16(6955), + 786: uint16(4870), + 787: uint16(12334), + 788: uint16(12332), + 789: uint16(11036), + 790: uint16(12333), + 791: uint16(10297), + 792: uint16(12335), + 793: uint16(12336), + 794: uint16(12337), + 795: uint16(9278), + 796: uint16(12341), + 797: uint16(12339), + 798: uint16(12340), + 799: uint16(12338), + 800: uint16(6466), + 801: uint16(12342), + 802: uint16(11081), + 803: uint16(11587), + 804: uint16(12343), + 805: uint16(7943), + 806: uint16(12344), + 807: uint16(7225), + 808: uint16(12345), + 809: uint16(8795), + 810: uint16(11550), + 811: uint16(9279), + 812: uint16(12580), + 813: uint16(12346), + 814: uint16(21252), + 815: uint16(5412), + 816: uint16(12347), + 817: uint16(10813), + 818: uint16(7239), + 819: uint16(8539), + 820: uint16(12349), + 821: uint16(9539), + 822: uint16(12350), + 823: uint16(12351), + 824: uint16(4621), + 825: uint16(12352), + 826: uint16(5382), + 827: uint16(9515), + 828: uint16(4185), + 829: uint16(7215), + 830: uint16(9984), + 831: uint16(12353), + 832: uint16(9280), + 833: uint16(7726), + 834: uint16(12354), + 835: uint16(10507), + 836: uint16(7993), + 837: uint16(4865), + 838: uint16(4872), + 839: uint16(12355), + 840: uint16(12357), + 841: uint16(5657), + 842: uint16(12356), + 843: uint16(11602), + 844: uint16(7240), + 845: uint16(10012), + 846: uint16(10539), + 847: uint16(12358), + 848: uint16(11351), + 849: uint16(12359), + 850: uint16(12360), + 851: uint16(9309), + 852: uint16(12361), + 853: uint16(7944), + 854: uint16(6493), + 855: uint16(5715), + 856: uint16(12362), + 857: uint16(6696), + 858: uint16(6222), + 859: uint16(9029), + 860: uint16(12364), + 861: uint16(8454), + 862: uint16(6478), + 863: uint16(12365), + 864: uint16(12366), + 865: uint16(8207), + 866: uint16(12363), + 867: uint16(12368), + 868: uint16(10773), + 869: uint16(6211), + 870: uint16(12367), + 871: uint16(5716), + 872: uint16(6461), + 873: uint16(9804), + 874: uint16(12371), + 875: uint16(12369), + 876: uint16(10330), + 877: uint16(7497), + 878: uint16(12378), + 879: uint16(4675), + 880: uint16(12372), + 881: uint16(12370), + 882: uint16(8238), + 883: uint16(12374), + 884: uint16(12373), + 885: uint16(4643), + 886: uint16(5695), + 887: uint16(12379), + 888: uint16(11532), + 889: uint16(12375), + 890: uint16(12380), + 891: uint16(12377), + 892: uint16(12376), + 893: uint16(11566), + 894: uint16(5976), + 895: uint16(4386), + 896: uint16(11603), + 897: uint16(7252), + 898: uint16(9271), + 899: uint16(6212), + 900: uint16(12545), + 901: uint16(12546), + 902: uint16(11588), + 903: uint16(11786), + 904: uint16(12548), + 905: uint16(5977), + 906: uint16(12547), + 907: uint16(4622), + 908: uint16(12549), + 909: uint16(10805), + 910: uint16(8987), + 911: uint16(11269), + 912: uint16(10552), + 913: uint16(12550), + 914: uint16(20276), + 915: uint16(9487), + 916: uint16(12551), + 917: uint16(4873), + 918: uint16(11026), + 919: uint16(7424), + 920: uint16(12552), + 921: uint16(10566), + 922: uint16(12556), + 923: uint16(7945), + 924: uint16(12553), + 925: uint16(5423), + 926: uint16(12554), + 927: uint16(4874), + 928: uint16(5645), + 929: uint16(12557), + 930: uint16(12558), + 931: uint16(12559), + 932: uint16(12560), + 933: uint16(6970), + 934: uint16(5978), + 935: uint16(11069), + 936: uint16(11079), + 937: uint16(9558), + 938: uint16(10576), + 939: uint16(12561), + 940: uint16(12562), + 941: uint16(12564), + 942: uint16(12566), + 943: uint16(12565), + 944: uint16(12567), + 945: uint16(4380), + 946: uint16(10795), + 947: uint16(6491), + 948: uint16(12568), + 949: uint16(8248), + 950: uint16(7425), + 951: uint16(5384), + 952: uint16(12569), + 953: uint16(10042), + 954: uint16(12570), + 955: uint16(12571), + 956: uint16(12572), + 957: uint16(12573), + 958: uint16(10243), + 959: uint16(5447), + 960: uint16(3908), + 961: uint16(9502), + 962: uint16(12574), + 963: uint16(7196), + 964: uint16(8008), + 965: uint16(12576), + 966: uint16(12575), + 967: uint16(7426), + 968: uint16(5952), + 969: uint16(12578), + 970: uint16(10013), + 971: uint16(12579), + 972: uint16(10043), + 973: uint16(8467), + 974: uint16(8525), + 975: uint16(5383), + 976: uint16(9549), + 977: uint16(8720), + 978: uint16(9805), + 979: uint16(10797), + 980: uint16(12581), + 981: uint16(8009), + 982: uint16(5652), + 983: uint16(12582), + 984: uint16(12583), + 985: uint16(4107), + 986: uint16(3924), + 987: uint16(4940), + 988: uint16(8455), + 989: uint16(5168), + 990: uint16(11344), + 991: uint16(12586), + 992: uint16(4374), + 993: uint16(12585), + 994: uint16(5385), + 995: uint16(12587), + 996: uint16(11088), + 997: uint16(12588), + 998: uint16(11569), + 999: uint16(5979), + 1000: uint16(5909), + 1001: uint16(12589), + 1002: uint16(12591), + 1003: uint16(12590), + 1004: uint16(7742), + 1005: uint16(4120), + 1006: uint16(4157), + 1007: uint16(12592), + 1008: uint16(12593), + 1009: uint16(5910), + 1010: uint16(12594), + 1011: uint16(5197), + 1012: uint16(6673), + 1013: uint16(12595), + 1014: uint16(10835), + 1015: uint16(6420), + 1016: uint16(5177), + 1017: uint16(11270), + 1018: uint16(8239), + 1019: uint16(10014), + 1020: uint16(7004), + 1021: uint16(7206), + 1022: uint16(6983), + 1023: uint16(6996), + 1024: uint16(7253), + 1025: uint16(10015), + 1026: uint16(12598), + 1027: uint16(4130), + 1028: uint16(8240), + 1029: uint16(5980), + 1030: uint16(5924), + 1031: uint16(5446), + 1032: uint16(12602), + 1033: uint16(8704), + 1034: uint16(8541), + 1035: uint16(5386), + 1036: uint16(7427), + 1037: uint16(12603), + 1038: uint16(12601), + 1039: uint16(4387), + 1040: uint16(8517), + 1041: uint16(6935), + 1042: uint16(6698), + 1043: uint16(4101), + 1044: uint16(4687), + 1045: uint16(6213), + 1046: uint16(6697), + 1047: uint16(12604), + 1048: uint16(12605), + 1049: uint16(5160), + 1050: uint16(4645), + 1051: uint16(6214), + 1052: uint16(5159), + 1053: uint16(9022), + 1054: uint16(4100), + 1055: uint16(9488), + 1056: uint16(11037), + 1057: uint16(6144), + 1058: uint16(11352), + 1059: uint16(9254), + 1060: uint16(5981), + 1061: uint16(5646), + 1062: uint16(12614), + 1063: uint16(5442), + 1064: uint16(10793), + 1065: uint16(10044), + 1066: uint16(12613), + 1067: uint16(4925), + 1068: uint16(12608), + 1069: uint16(12609), + 1070: uint16(12611), + 1071: uint16(12612), + 1072: uint16(5178), + 1073: uint16(7744), + 1074: uint16(10508), + 1075: uint16(12610), + 1076: uint16(12606), + 1077: uint16(5954), + 1078: uint16(12607), + 1079: uint16(11779), + 1080: uint16(10577), + 1081: uint16(9031), + 1082: uint16(5953), + 1083: uint16(6223), + 1084: uint16(12615), + 1085: uint16(9532), + 1086: uint16(12619), + 1087: uint16(7005), + 1088: uint16(6997), + 1089: uint16(12622), + 1090: uint16(12620), + 1091: uint16(11010), + 1092: uint16(12617), + 1093: uint16(12626), + 1094: uint16(12621), + 1095: uint16(12624), + 1096: uint16(5925), + 1097: uint16(11038), + 1098: uint16(12625), + 1099: uint16(12627), + 1100: uint16(12629), + 1101: uint16(6479), + 1102: uint16(11809), + 1103: uint16(12618), + 1104: uint16(12616), + 1105: uint16(12628), + 1106: uint16(12623), + 1107: uint16(12631), + 1108: uint16(12802), + 1109: uint16(12633), + 1110: uint16(12637), + 1111: uint16(12800), + 1112: uint16(12634), + 1113: uint16(12829), + 1114: uint16(6472), + 1115: uint16(4624), + 1116: uint16(12632), + 1117: uint16(12804), + 1118: uint16(3925), + 1119: uint16(12803), + 1120: uint16(3844), + 1121: uint16(10281), + 1122: uint16(12801), + 1123: uint16(12635), + 1124: uint16(12630), + 1125: uint16(12636), + 1126: uint16(6439), + 1127: uint16(12805), + 1128: uint16(3926), + 1129: uint16(12814), + 1130: uint16(12806), + 1131: uint16(12807), + 1132: uint16(7428), + 1133: uint16(10824), + 1134: uint16(12812), + 1135: uint16(12811), + 1136: uint16(9230), + 1137: uint16(12813), + 1138: uint16(12810), + 1139: uint16(4115), + 1140: uint16(6421), + 1141: uint16(7695), + 1142: uint16(12808), + 1143: uint16(9281), + 1144: uint16(12809), + 1145: uint16(3841), + 1146: uint16(12819), + 1147: uint16(11266), + 1148: uint16(7430), + 1149: uint16(12825), + 1150: uint16(12824), + 1151: uint16(12815), + 1152: uint16(8482), + 1153: uint16(12816), + 1154: uint16(8526), + 1155: uint16(12821), + 1156: uint16(7429), + 1157: uint16(12818), + 1158: uint16(11075), + 1159: uint16(5659), + 1160: uint16(12822), + 1161: uint16(12823), + 1162: uint16(12820), + 1163: uint16(12826), + 1164: uint16(12817), + 1165: uint16(12832), + 1166: uint16(12837), + 1167: uint16(12833), + 1168: uint16(12828), + 1169: uint16(12838), + 1170: uint16(8208), + 1171: uint16(12840), + 1172: uint16(6145), + 1173: uint16(12830), + 1174: uint16(8796), + 1175: uint16(12834), + 1176: uint16(12827), + 1177: uint16(4876), + 1178: uint16(4941), + 1179: uint16(4676), + 1180: uint16(12835), + 1181: uint16(12831), + 1182: uint16(5717), + 1183: uint16(12841), + 1184: uint16(12839), + 1185: uint16(8242), + 1186: uint16(5161), + 1187: uint16(5387), + 1188: uint16(12836), + 1189: uint16(5459), + 1190: uint16(4131), + 1191: uint16(12845), + 1192: uint16(12843), + 1193: uint16(13062), + 1194: uint16(12848), + 1195: uint16(12842), + 1196: uint16(12846), + 1197: uint16(12844), + 1198: uint16(6699), + 1199: uint16(12847), + 1200: uint16(12850), + 1201: uint16(12855), + 1202: uint16(12853), + 1203: uint16(12852), + 1204: uint16(8721), + 1205: uint16(4388), + 1206: uint16(12849), + 1207: uint16(12851), + 1208: uint16(7431), + 1209: uint16(4114), + 1210: uint16(12854), + 1211: uint16(4413), + 1212: uint16(12865), + 1213: uint16(7515), + 1214: uint16(12861), + 1215: uint16(12859), + 1216: uint16(12860), + 1217: uint16(12862), + 1218: uint16(4124), + 1219: uint16(8216), + 1220: uint16(12856), + 1221: uint16(12857), + 1222: uint16(4697), + 1223: uint16(12864), + 1224: uint16(4942), + 1225: uint16(12867), + 1226: uint16(12863), + 1227: uint16(12866), + 1228: uint16(10509), + 1229: uint16(9524), + 1230: uint16(10007), + 1231: uint16(12869), + 1232: uint16(12868), + 1233: uint16(4644), + 1234: uint16(12870), + 1235: uint16(12873), + 1236: uint16(12872), + 1237: uint16(12871), + 1238: uint16(9752), + 1239: uint16(12874), + 1240: uint16(12875), + 1241: uint16(12877), + 1242: uint16(12876), + 1243: uint16(12879), + 1244: uint16(12882), + 1245: uint16(12880), + 1246: uint16(12878), + 1247: uint16(12881), + 1248: uint16(12883), + 1249: uint16(12884), + 1250: uint16(12885), + 1251: uint16(12886), + 1252: uint16(12887), + 1253: uint16(12324), + 1254: uint16(7003), + 1255: uint16(6700), + 1256: uint16(4434), + 1257: uint16(3927), + 1258: uint16(8739), + 1259: uint16(12888), + 1260: uint16(6403), + 1261: uint16(3886), + 1262: uint16(7741), + 1263: uint16(12889), + 1264: uint16(5926), + 1265: uint16(6224), + 1266: uint16(12891), + 1267: uint16(12890), + 1268: uint16(10559), + 1269: uint16(12892), + 1270: uint16(13056), + 1271: uint16(12893), + 1272: uint16(13057), + 1273: uint16(13058), + 1274: uint16(5718), + 1275: uint16(4159), + 1276: uint16(13059), + 1277: uint16(13061), + 1278: uint16(13060), + 1279: uint16(13063), + 1280: uint16(9273), + 1281: uint16(13064), + 1282: uint16(3860), + 1283: uint16(6462), + 1284: uint16(5660), + 1285: uint16(8750), + 1286: uint16(13065), + 1287: uint16(13066), + 1288: uint16(13068), + 1289: uint16(13069), + 1290: uint16(6467), + 1291: uint16(5424), + 1292: uint16(10774), + 1293: uint16(13067), + 1294: uint16(13070), + 1295: uint16(6432), + 1296: uint16(6146), + 1297: uint16(13074), + 1298: uint16(6404), + 1299: uint16(8722), + 1300: uint16(13071), + 1301: uint16(9017), + 1302: uint16(13075), + 1303: uint16(7745), + 1304: uint16(13073), + 1305: uint16(13076), + 1306: uint16(5662), + 1307: uint16(13077), + 1308: uint16(13078), + 1309: uint16(6147), + 1310: uint16(4639), + 1311: uint16(13080), + 1312: uint16(13081), + 1313: uint16(13082), + 1314: uint16(13079), + 1315: uint16(13072), + 1316: uint16(13083), + 1317: uint16(13084), + 1318: uint16(10819), + 1319: uint16(7498), + 1320: uint16(13086), + 1321: uint16(13087), + 1322: uint16(13085), + 1323: uint16(13089), + 1324: uint16(9751), + 1325: uint16(3911), + 1326: uint16(10293), + 1327: uint16(13090), + 1328: uint16(7516), + 1329: uint16(6936), + 1330: uint16(9788), + 1331: uint16(4943), + 1332: uint16(6474), + 1333: uint16(10808), + 1334: uint16(9489), + 1335: uint16(5719), + 1336: uint16(8494), + 1337: uint16(13088), + 1338: uint16(13091), + 1339: uint16(8483), + 1340: uint16(13092), + 1341: uint16(13093), + 1342: uint16(13095), + 1343: uint16(9032), + 1344: uint16(4877), + 1345: uint16(21248), + 1346: uint16(4160), + 1347: uint16(10578), + 1348: uint16(7499), + 1349: uint16(9255), + 1350: uint16(6469), + 1351: uint16(13101), + 1352: uint16(10524), + 1353: uint16(11580), + 1354: uint16(4435), + 1355: uint16(13097), + 1356: uint16(8217), + 1357: uint16(13100), + 1358: uint16(9282), + 1359: uint16(9256), + 1360: uint16(9283), + 1361: uint16(10008), + 1362: uint16(9004), + 1363: uint16(6440), + 1364: uint16(13096), + 1365: uint16(4181), + 1366: uint16(9237), + 1367: uint16(13098), + 1368: uint16(13094), + 1369: uint16(7727), + 1370: uint16(13102), + 1371: uint16(7213), + 1372: uint16(5388), + 1373: uint16(13103), + 1374: uint16(10567), + 1375: uint16(8284), + 1376: uint16(8997), + 1377: uint16(13105), + 1378: uint16(10798), + 1379: uint16(13106), + 1380: uint16(13111), + 1381: uint16(10510), + 1382: uint16(13110), + 1383: uint16(13104), + 1384: uint16(13107), + 1385: uint16(13109), + 1386: uint16(6405), + 1387: uint16(10536), + 1388: uint16(13112), + 1389: uint16(8740), + 1390: uint16(4436), + 1391: uint16(7500), + 1392: uint16(13114), + 1393: uint16(13113), + 1394: uint16(6215), + 1395: uint16(13115), + 1396: uint16(13117), + 1397: uint16(13116), + 1398: uint16(13119), + 1399: uint16(13108), + 1400: uint16(13121), + 1401: uint16(13120), + 1402: uint16(13118), + 1403: uint16(6701), + 1404: uint16(7728), + 1405: uint16(8243), + 1406: uint16(13122), + 1407: uint16(7963), + 1408: uint16(3916), + 1409: uint16(9795), + 1410: uint16(9018), + 1411: uint16(13124), + 1412: uint16(13123), + 1413: uint16(13125), + 1414: uint16(13126), + 1415: uint16(13127), + 1416: uint16(13128), + 1417: uint16(10544), + 1418: uint16(13129), + 1419: uint16(4389), + 1420: uint16(13130), + 1421: uint16(11291), + 1422: uint16(4623), + 1423: uint16(12584), + 1424: uint16(7207), + 1425: uint16(8478), + 1426: uint16(13131), + 1427: uint16(11082), + 1428: uint16(11027), + 1429: uint16(13133), + 1430: uint16(8518), + 1431: uint16(9238), + 1432: uint16(8479), + 1433: uint16(10294), + 1434: uint16(13134), + 1435: uint16(13135), + 1436: uint16(4186), + 1437: uint16(6937), + 1438: uint16(13136), + 1439: uint16(3887), + 1440: uint16(13137), + 1441: uint16(13138), + 1442: uint16(4161), + 1443: uint16(4944), + 1444: uint16(9535), + 1445: uint16(10579), + 1446: uint16(13142), + 1447: uint16(8244), + 1448: uint16(13141), + 1449: uint16(5663), + 1450: uint16(10810), + 1451: uint16(13140), + 1452: uint16(9284), + 1453: uint16(13144), + 1454: uint16(13143), + 1455: uint16(13146), + 1456: uint16(13145), + 1457: uint16(4187), + 1458: uint16(13147), + 1459: uint16(7432), + 1460: uint16(13149), + 1461: uint16(8708), + 1462: uint16(13148), + 1463: uint16(10514), + 1464: uint16(7254), + 1465: uint16(9274), + 1466: uint16(13312), + 1467: uint16(6148), + 1468: uint16(13313), + 1469: uint16(9728), + 1470: uint16(10045), + 1471: uint16(11056), + 1472: uint16(9732), + 1473: uint16(13322), + 1474: uint16(5143), + 1475: uint16(11300), + 1476: uint16(11022), + 1477: uint16(13579), + 1478: uint16(13314), + 1479: uint16(13317), + 1480: uint16(8484), + 1481: uint16(10775), + 1482: uint16(9257), + 1483: uint16(13318), + 1484: uint16(10820), + 1485: uint16(6441), + 1486: uint16(7433), + 1487: uint16(13319), + 1488: uint16(6703), + 1489: uint16(6702), + 1490: uint16(3864), + 1491: uint16(5927), + 1492: uint16(7946), + 1493: uint16(3888), + 1494: uint16(13323), + 1495: uint16(13324), + 1496: uint16(13321), + 1497: uint16(4119), + 1498: uint16(4878), + 1499: uint16(13320), + 1500: uint16(11044), + 1501: uint16(10256), + 1502: uint16(3847), + 1503: uint16(3928), + 1504: uint16(6704), + 1505: uint16(3889), + 1506: uint16(3842), + 1507: uint16(13329), + 1508: uint16(13327), + 1509: uint16(11035), + 1510: uint16(13330), + 1511: uint16(13328), + 1512: uint16(13326), + 1513: uint16(7696), + 1514: uint16(13325), + 1515: uint16(10553), + 1516: uint16(5955), + 1517: uint16(13334), + 1518: uint16(13335), + 1519: uint16(7434), + 1520: uint16(13331), + 1521: uint16(11787), + 1522: uint16(9771), + 1523: uint16(13333), + 1524: uint16(6406), + 1525: uint16(13336), + 1526: uint16(10295), + 1527: uint16(13337), + 1528: uint16(13332), + 1529: uint16(11034), + 1530: uint16(9789), + 1531: uint16(13338), + 1532: uint16(10257), + 1533: uint16(13339), + 1534: uint16(13343), + 1535: uint16(13340), + 1536: uint16(4390), + 1537: uint16(13342), + 1538: uint16(6938), + 1539: uint16(13341), + 1540: uint16(5720), + 1541: uint16(13355), + 1542: uint16(13348), + 1543: uint16(13345), + 1544: uint16(8771), + 1545: uint16(13344), + 1546: uint16(13346), + 1547: uint16(13347), + 1548: uint16(13349), + 1549: uint16(13350), + 1550: uint16(4945), + 1551: uint16(13352), + 1552: uint16(13351), + 1553: uint16(13353), + 1554: uint16(7501), + 1555: uint16(13356), + 1556: uint16(9019), + 1557: uint16(4132), + 1558: uint16(13354), + 1559: uint16(13357), + 1560: uint16(13358), + 1561: uint16(13361), + 1562: uint16(13359), + 1563: uint16(13360), + 1564: uint16(6705), + 1565: uint16(13362), + 1566: uint16(6149), + 1567: uint16(13363), + 1568: uint16(6745), + 1569: uint16(8471), + 1570: uint16(13364), + 1571: uint16(13365), + 1572: uint16(6713), + 1573: uint16(6150), + 1574: uint16(11057), + 1575: uint16(5127), + 1576: uint16(5928), + 1577: uint16(13366), + 1578: uint16(4663), + 1579: uint16(13367), + 1580: uint16(8472), + 1581: uint16(13368), + 1582: uint16(13570), + 1583: uint16(13369), + 1584: uint16(13370), + 1585: uint16(13371), + 1586: uint16(13373), + 1587: uint16(13374), + 1588: uint16(13375), + 1589: uint16(8527), + 1590: uint16(4102), + 1591: uint16(6984), + 1592: uint16(3873), + 1593: uint16(8246), + 1594: uint16(4879), + 1595: uint16(6932), + 1596: uint16(6151), + 1597: uint16(9285), + 1598: uint16(7168), + 1599: uint16(4880), + 1600: uint16(8775), + 1601: uint16(9033), + 1602: uint16(3863), + 1603: uint16(5144), + 1604: uint16(10580), + 1605: uint16(6945), + 1606: uint16(5169), + 1607: uint16(8010), + 1608: uint16(6939), + 1609: uint16(11271), + 1610: uint16(13376), + 1611: uint16(5179), + 1612: uint16(6442), + 1613: uint16(4625), + 1614: uint16(4162), + 1615: uint16(7435), + 1616: uint16(4391), + 1617: uint16(13377), + 1618: uint16(11301), + 1619: uint16(7208), + 1620: uint16(6979), + 1621: uint16(13378), + 1622: uint16(4946), + 1623: uint16(9521), + 1624: uint16(11016), + 1625: uint16(13379), + 1626: uint16(13380), + 1627: uint16(10296), + 1628: uint16(13382), + 1629: uint16(4871), + 1630: uint16(5462), + 1631: uint16(13381), + 1632: uint16(4881), + 1633: uint16(7697), + 1634: uint16(13386), + 1635: uint16(6656), + 1636: uint16(4392), + 1637: uint16(13385), + 1638: uint16(13383), + 1639: uint16(13387), + 1640: uint16(13384), + 1641: uint16(9738), + 1642: uint16(15148), + 1643: uint16(7698), + 1644: uint16(13388), + 1645: uint16(11551), + 1646: uint16(13389), + 1647: uint16(13391), + 1648: uint16(8797), + 1649: uint16(13390), + 1650: uint16(7938), + 1651: uint16(6746), + 1652: uint16(8495), + 1653: uint16(6998), + 1654: uint16(10324), + 1655: uint16(8011), + 1656: uint16(6956), + 1657: uint16(13392), + 1658: uint16(7436), + 1659: uint16(13393), + 1660: uint16(13394), + 1661: uint16(3890), + 1662: uint16(8473), + 1663: uint16(7729), + 1664: uint16(13395), + 1665: uint16(9490), + 1666: uint16(7437), + 1667: uint16(7438), + 1668: uint16(13396), + 1669: uint16(8012), + 1670: uint16(7439), + 1671: uint16(13397), + 1672: uint16(13398), + 1673: uint16(11071), + 1674: uint16(13399), + 1675: uint16(5413), + 1676: uint16(7169), + 1677: uint16(13400), + 1678: uint16(13401), + 1679: uint16(6971), + 1680: uint16(7691), + 1681: uint16(9555), + 1682: uint16(7731), + 1683: uint16(10071), + 1684: uint16(9729), + 1685: uint16(5416), + 1686: uint16(13402), + 1687: uint16(5198), + 1688: uint16(13403), + 1689: uint16(5469), + 1690: uint16(9518), + 1691: uint16(4367), + 1692: uint16(6706), + 1693: uint16(13404), + 1694: uint16(13569), + 1695: uint16(13568), + 1696: uint16(5468), + 1697: uint16(13405), + 1698: uint16(9239), + 1699: uint16(8463), + 1700: uint16(9258), + 1701: uint16(6951), + 1702: uint16(8247), + 1703: uint16(11353), + 1704: uint16(13571), + 1705: uint16(13572), + 1706: uint16(9525), + 1707: uint16(6674), + 1708: uint16(13574), + 1709: uint16(13575), + 1710: uint16(13576), + 1711: uint16(4947), + 1712: uint16(13577), + 1713: uint16(13578), + 1714: uint16(4363), + 1715: uint16(8218), + 1716: uint16(4931), + 1717: uint16(13580), + 1718: uint16(11015), + 1719: uint16(8497), + 1720: uint16(4664), + 1721: uint16(13582), + 1722: uint16(13584), + 1723: uint16(4926), + 1724: uint16(13581), + 1725: uint16(13583), + 1726: uint16(13586), + 1727: uint16(13585), + 1728: uint16(13587), + 1729: uint16(13588), + 1730: uint16(9500), + 1731: uint16(5389), + 1732: uint16(4420), + 1733: uint16(13589), + 1734: uint16(13594), + 1735: uint16(13592), + 1736: uint16(10582), + 1737: uint16(10581), + 1738: uint16(9286), + 1739: uint16(13591), + 1740: uint16(7219), + 1741: uint16(13590), + 1742: uint16(7761), + 1743: uint16(13595), + 1744: uint16(6473), + 1745: uint16(13601), + 1746: uint16(13602), + 1747: uint16(13596), + 1748: uint16(4626), + 1749: uint16(13597), + 1750: uint16(13606), + 1751: uint16(13605), + 1752: uint16(13604), + 1753: uint16(13600), + 1754: uint16(13599), + 1755: uint16(13603), + 1756: uint16(10583), + 1757: uint16(13610), + 1758: uint16(13607), + 1759: uint16(13609), + 1760: uint16(11345), + 1761: uint16(13608), + 1762: uint16(13598), + 1763: uint16(7762), + 1764: uint16(13611), + 1765: uint16(6422), + 1766: uint16(13612), + 1767: uint16(13613), + 1768: uint16(13616), + 1769: uint16(13615), + 1770: uint16(13614), + 1771: uint16(9287), + 1772: uint16(13593), + 1773: uint16(13622), + 1774: uint16(13618), + 1775: uint16(13617), + 1776: uint16(13619), + 1777: uint16(13620), + 1778: uint16(13623), + 1779: uint16(11589), + 1780: uint16(13624), + 1781: uint16(13621), + 1782: uint16(13625), + 1783: uint16(4927), + 1784: uint16(13626), + 1785: uint16(13628), + 1786: uint16(13627), + 1787: uint16(13629), + 1788: uint16(13630), + 1789: uint16(8013), + 1790: uint16(7170), + 1791: uint16(7235), + 1792: uint16(8258), + 1793: uint16(6152), + 1794: uint16(6423), + 1795: uint16(6153), + 1796: uint16(5199), + 1797: uint16(13631), + 1798: uint16(6424), + 1799: uint16(5929), + 1800: uint16(13632), + 1801: uint16(11013), + 1802: uint16(9762), + 1803: uint16(13633), + 1804: uint16(6154), + 1805: uint16(4875), + 1806: uint16(8710), + 1807: uint16(5425), + 1808: uint16(6707), + 1809: uint16(10298), + 1810: uint16(10016), + 1811: uint16(13634), + 1812: uint16(4948), + 1813: uint16(13637), + 1814: uint16(8960), + 1815: uint16(13636), + 1816: uint16(13635), + 1817: uint16(13638), + 1818: uint16(9034), + 1819: uint16(7746), + 1820: uint16(6708), + 1821: uint16(7977), + 1822: uint16(8498), + 1823: uint16(5121), + 1824: uint16(8961), + 1825: uint16(13639), + 1826: uint16(13640), + 1827: uint16(7502), + 1828: uint16(10776), + 1829: uint16(13643), + 1830: uint16(13642), + 1831: uint16(13641), + 1832: uint16(10332), + 1833: uint16(13650), + 1834: uint16(10809), + 1835: uint16(13644), + 1836: uint16(13646), + 1837: uint16(10826), + 1838: uint16(13645), + 1839: uint16(13647), + 1840: uint16(9991), + 1841: uint16(13648), + 1842: uint16(10525), + 1843: uint16(13649), + 1844: uint16(4882), + 1845: uint16(10526), + 1846: uint16(9742), + 1847: uint16(13651), + 1848: uint16(13652), + 1849: uint16(6155), + 1850: uint16(4883), + 1851: uint16(13653), + 1852: uint16(5911), + 1853: uint16(11299), + 1854: uint16(11272), + 1855: uint16(4949), + 1856: uint16(13655), + 1857: uint16(8962), + 1858: uint16(6156), + 1859: uint16(7440), + 1860: uint16(10046), + 1861: uint16(7441), + 1862: uint16(7255), + 1863: uint16(9035), + 1864: uint16(10584), + 1865: uint16(9240), + 1866: uint16(6157), + 1867: uint16(10299), + 1868: uint16(13656), + 1869: uint16(9272), + 1870: uint16(6433), + 1871: uint16(5930), + 1872: uint16(9036), + 1873: uint16(3874), + 1874: uint16(7245), + 1875: uint16(6158), + 1876: uint16(11302), + 1877: uint16(13657), + 1878: uint16(13658), + 1879: uint16(9776), + 1880: uint16(13659), + 1881: uint16(11606), + 1882: uint16(11788), + 1883: uint16(13661), + 1884: uint16(13660), + 1885: uint16(4646), + 1886: uint16(13824), + 1887: uint16(13827), + 1888: uint16(13828), + 1889: uint16(13826), + 1890: uint16(10271), + 1891: uint16(7442), + 1892: uint16(13830), + 1893: uint16(13829), + 1894: uint16(13825), + 1895: uint16(13831), + 1896: uint16(13832), + 1897: uint16(13833), + 1898: uint16(13836), + 1899: uint16(13834), + 1900: uint16(13835), + 1901: uint16(13837), + 1902: uint16(4163), + 1903: uint16(9037), + 1904: uint16(13838), + 1905: uint16(5721), + 1906: uint16(4437), + 1907: uint16(9749), + 1908: uint16(13839), + 1909: uint16(9562), + 1910: uint16(10554), + 1911: uint16(13840), + 1912: uint16(11789), + 1913: uint16(13841), + 1914: uint16(10527), + 1915: uint16(13844), + 1916: uint16(12032), + 1917: uint16(12048), + 1918: uint16(6927), + 1919: uint16(9556), + 1920: uint16(13845), + 1921: uint16(5180), + 1922: uint16(8963), + 1923: uint16(3929), + 1924: uint16(13846), + 1925: uint16(10501), + 1926: uint16(6159), + 1927: uint16(8751), + 1928: uint16(9038), + 1929: uint16(11086), + 1930: uint16(5912), + 1931: uint16(5931), + 1932: uint16(13847), + 1933: uint16(13848), + 1934: uint16(13854), + 1935: uint16(6980), + 1936: uint16(8964), + 1937: uint16(5390), + 1938: uint16(13849), + 1939: uint16(10250), + 1940: uint16(8741), + 1941: uint16(13850), + 1942: uint16(13851), + 1943: uint16(5391), + 1944: uint16(13852), + 1945: uint16(13853), + 1946: uint16(13855), + 1947: uint16(9301), + 1948: uint16(13856), + 1949: uint16(13857), + 1950: uint16(13858), + 1951: uint16(13843), + 1952: uint16(13842), + 1953: uint16(13859), + 1954: uint16(5664), + 1955: uint16(10246), + 1956: uint16(6443), + 1957: uint16(10262), + 1958: uint16(8965), + 1959: uint16(10282), + 1960: uint16(13860), + 1961: uint16(7443), + 1962: uint16(4133), + 1963: uint16(13861), + 1964: uint16(13862), + 1965: uint16(11089), + 1966: uint16(10047), + 1967: uint16(13865), + 1968: uint16(4188), + 1969: uint16(7947), + 1970: uint16(13864), + 1971: uint16(13863), + 1972: uint16(5665), + 1973: uint16(8499), + 1974: uint16(13869), + 1975: uint16(13867), + 1976: uint16(13866), + 1977: uint16(11526), + 1978: uint16(5956), + 1979: uint16(7256), + 1980: uint16(13868), + 1981: uint16(9259), + 1982: uint16(7197), + 1983: uint16(9503), + 1984: uint16(13872), + 1985: uint16(13871), + 1986: uint16(13870), + 1987: uint16(13873), + 1988: uint16(5957), + 1989: uint16(13874), + 1990: uint16(10331), + 1991: uint16(7226), + 1992: uint16(13875), + 1993: uint16(10072), + 1994: uint16(9504), + 1995: uint16(8966), + 1996: uint16(9231), + 1997: uint16(13876), + 1998: uint16(5130), + 1999: uint16(7699), + 2000: uint16(10251), + 2001: uint16(4950), + 2002: uint16(9733), + 2003: uint16(13877), + 2004: uint16(6709), + 2005: uint16(10777), + 2006: uint16(10778), + 2007: uint16(4189), + 2008: uint16(13882), + 2009: uint16(8776), + 2010: uint16(13879), + 2011: uint16(4438), + 2012: uint16(14092), + 2013: uint16(13881), + 2014: uint16(9743), + 2015: uint16(13880), + 2016: uint16(13878), + 2017: uint16(6233), + 2018: uint16(13884), + 2019: uint16(13890), + 2020: uint16(13896), + 2021: uint16(13888), + 2022: uint16(9275), + 2023: uint16(13893), + 2024: uint16(10300), + 2025: uint16(13887), + 2026: uint16(13892), + 2027: uint16(11590), + 2028: uint16(6710), + 2029: uint16(8500), + 2030: uint16(13885), + 2031: uint16(5181), + 2032: uint16(13895), + 2033: uint16(7948), + 2034: uint16(4164), + 2035: uint16(13889), + 2036: uint16(4439), + 2037: uint16(13894), + 2038: uint16(5392), + 2039: uint16(13891), + 2040: uint16(13897), + 2041: uint16(13899), + 2042: uint16(13909), + 2043: uint16(13907), + 2044: uint16(13904), + 2045: uint16(13903), + 2046: uint16(11607), + 2047: uint16(13905), + 2048: uint16(5393), + 2049: uint16(6160), + 2050: uint16(7257), + 2051: uint16(13912), + 2052: uint16(13898), + 2053: uint16(13902), + 2054: uint16(13886), + 2055: uint16(4441), + 2056: uint16(13906), + 2057: uint16(13908), + 2058: uint16(8752), + 2059: uint16(6407), + 2060: uint16(4375), + 2061: uint16(13900), + 2062: uint16(13911), + 2063: uint16(13910), + 2064: uint16(5394), + 2065: uint16(8456), + 2066: uint16(4677), + 2067: uint16(5666), + 2068: uint16(13901), + 2069: uint16(13913), + 2070: uint16(13916), + 2071: uint16(14080), + 2072: uint16(6940), + 2073: uint16(14086), + 2074: uint16(9039), + 2075: uint16(13914), + 2076: uint16(14084), + 2077: uint16(4440), + 2078: uint16(14082), + 2079: uint16(14083), + 2080: uint16(13917), + 2081: uint16(14081), + 2082: uint16(5958), + 2083: uint16(11273), + 2084: uint16(4884), + 2085: uint16(4152), + 2086: uint16(14085), + 2087: uint16(9753), + 2088: uint16(3852), + 2089: uint16(10048), + 2090: uint16(13883), + 2091: uint16(14091), + 2092: uint16(14095), + 2093: uint16(11076), + 2094: uint16(14088), + 2095: uint16(9288), + 2096: uint16(14093), + 2097: uint16(7503), + 2098: uint16(14094), + 2099: uint16(9526), + 2100: uint16(11814), + 2101: uint16(14090), + 2102: uint16(14096), + 2103: uint16(6234), + 2104: uint16(7978), + 2105: uint16(3891), + 2106: uint16(14089), + 2107: uint16(14087), + 2108: uint16(8249), + 2109: uint16(13915), + 2110: uint16(6675), + 2111: uint16(8485), + 2112: uint16(14108), + 2113: uint16(8250), + 2114: uint16(14103), + 2115: uint16(14100), + 2116: uint16(14101), + 2117: uint16(6981), + 2118: uint16(14104), + 2119: uint16(14107), + 2120: uint16(14102), + 2121: uint16(7172), + 2122: uint16(14105), + 2123: uint16(14099), + 2124: uint16(11099), + 2125: uint16(11098), + 2126: uint16(14109), + 2127: uint16(14110), + 2128: uint16(3892), + 2129: uint16(14098), + 2130: uint16(5457), + 2131: uint16(3845), + 2132: uint16(4885), + 2133: uint16(14106), + 2134: uint16(14114), + 2135: uint16(14113), + 2136: uint16(14118), + 2137: uint16(14119), + 2138: uint16(14117), + 2139: uint16(14120), + 2140: uint16(14112), + 2141: uint16(14116), + 2142: uint16(14121), + 2143: uint16(14122), + 2144: uint16(14111), + 2145: uint16(6747), + 2146: uint16(14115), + 2147: uint16(8501), + 2148: uint16(6161), + 2149: uint16(14097), + 2150: uint16(7700), + 2151: uint16(14135), + 2152: uint16(10568), + 2153: uint16(14125), + 2154: uint16(14126), + 2155: uint16(14127), + 2156: uint16(14134), + 2157: uint16(14133), + 2158: uint16(10844), + 2159: uint16(4886), + 2160: uint16(14131), + 2161: uint16(5668), + 2162: uint16(4627), + 2163: uint16(14128), + 2164: uint16(11543), + 2165: uint16(14130), + 2166: uint16(3893), + 2167: uint16(14132), + 2168: uint16(14123), + 2169: uint16(14129), + 2170: uint16(14136), + 2171: uint16(5667), + 2172: uint16(14124), + 2173: uint16(11324), + 2174: uint16(11274), + 2175: uint16(14139), + 2176: uint16(14143), + 2177: uint16(8285), + 2178: uint16(11608), + 2179: uint16(14144), + 2180: uint16(14141), + 2181: uint16(14138), + 2182: uint16(14137), + 2183: uint16(14142), + 2184: uint16(10511), + 2185: uint16(9491), + 2186: uint16(5669), + 2187: uint16(14145), + 2188: uint16(14140), + 2189: uint16(14146), + 2190: uint16(5722), + 2191: uint16(4368), + 2192: uint16(14154), + 2193: uint16(4887), + 2194: uint16(14152), + 2195: uint16(14153), + 2196: uint16(6408), + 2197: uint16(14151), + 2198: uint16(14149), + 2199: uint16(14148), + 2200: uint16(14155), + 2201: uint16(14147), + 2202: uint16(14157), + 2203: uint16(4442), + 2204: uint16(14159), + 2205: uint16(14158), + 2206: uint16(8967), + 2207: uint16(14162), + 2208: uint16(14160), + 2209: uint16(14150), + 2210: uint16(5723), + 2211: uint16(14161), + 2212: uint16(14165), + 2213: uint16(14164), + 2214: uint16(14166), + 2215: uint16(14163), + 2216: uint16(14167), + 2217: uint16(14168), + 2218: uint16(14169), + 2219: uint16(10569), + 2220: uint16(14171), + 2221: uint16(14170), + 2222: uint16(7198), + 2223: uint16(7949), + 2224: uint16(4421), + 2225: uint16(4443), + 2226: uint16(14172), + 2227: uint16(3870), + 2228: uint16(7979), + 2229: uint16(14173), + 2230: uint16(19234), + 2231: uint16(14336), + 2232: uint16(5696), + 2233: uint16(14337), + 2234: uint16(8014), + 2235: uint16(14338), + 2236: uint16(14339), + 2237: uint16(5145), + 2238: uint16(14340), + 2239: uint16(14341), + 2240: uint16(14342), + 2241: uint16(8502), + 2242: uint16(5932), + 2243: uint16(11072), + 2244: uint16(10779), + 2245: uint16(7241), + 2246: uint16(14343), + 2247: uint16(8015), + 2248: uint16(19740), + 2249: uint16(10049), + 2250: uint16(6985), + 2251: uint16(6444), + 2252: uint16(14344), + 2253: uint16(8486), + 2254: uint16(10502), + 2255: uint16(8528), + 2256: uint16(14347), + 2257: uint16(14345), + 2258: uint16(14348), + 2259: uint16(14346), + 2260: uint16(14349), + 2261: uint16(10512), + 2262: uint16(3862), + 2263: uint16(10301), + 2264: uint16(10050), + 2265: uint16(14350), + 2266: uint16(14353), + 2267: uint16(7444), + 2268: uint16(5146), + 2269: uint16(14351), + 2270: uint16(14358), + 2271: uint16(7445), + 2272: uint16(14352), + 2273: uint16(9763), + 2274: uint16(11325), + 2275: uint16(14354), + 2276: uint16(14355), + 2277: uint16(14359), + 2278: uint16(9289), + 2279: uint16(14356), + 2280: uint16(6162), + 2281: uint16(7997), + 2282: uint16(14373), + 2283: uint16(10003), + 2284: uint16(8529), + 2285: uint16(10051), + 2286: uint16(14604), + 2287: uint16(10585), + 2288: uint16(9040), + 2289: uint16(10836), + 2290: uint16(14362), + 2291: uint16(4352), + 2292: uint16(8777), + 2293: uint16(14371), + 2294: uint16(8723), + 2295: uint16(14365), + 2296: uint16(14372), + 2297: uint16(14367), + 2298: uint16(14374), + 2299: uint16(14370), + 2300: uint16(14369), + 2301: uint16(9806), + 2302: uint16(14363), + 2303: uint16(4444), + 2304: uint16(14361), + 2305: uint16(5200), + 2306: uint16(8530), + 2307: uint16(14357), + 2308: uint16(14360), + 2309: uint16(6163), + 2310: uint16(7994), + 2311: uint16(7446), + 2312: uint16(14368), + 2313: uint16(9777), + 2314: uint16(5201), + 2315: uint16(4647), + 2316: uint16(4678), + 2317: uint16(7680), + 2318: uint16(14376), + 2319: uint16(14381), + 2320: uint16(14377), + 2321: uint16(5724), + 2322: uint16(14382), + 2323: uint16(6657), + 2324: uint16(6216), + 2325: uint16(7173), + 2326: uint16(14364), + 2327: uint16(6748), + 2328: uint16(14379), + 2329: uint16(6711), + 2330: uint16(14380), + 2331: uint16(3875), + 2332: uint16(14375), + 2333: uint16(8968), + 2334: uint16(5202), + 2335: uint16(5395), + 2336: uint16(14378), + 2337: uint16(3846), + 2338: uint16(6434), + 2339: uint16(7701), + 2340: uint16(9041), + 2341: uint16(10035), + 2342: uint16(14384), + 2343: uint16(8253), + 2344: uint16(8457), + 2345: uint16(6666), + 2346: uint16(14385), + 2347: uint16(14387), + 2348: uint16(14383), + 2349: uint16(10560), + 2350: uint16(8988), + 2351: uint16(8251), + 2352: uint16(10586), + 2353: uint16(6957), + 2354: uint16(14399), + 2355: uint16(14398), + 2356: uint16(7767), + 2357: uint16(5725), + 2358: uint16(14392), + 2359: uint16(7448), + 2360: uint16(9543), + 2361: uint16(9744), + 2362: uint16(14390), + 2363: uint16(8252), + 2364: uint16(6999), + 2365: uint16(14395), + 2366: uint16(7447), + 2367: uint16(14389), + 2368: uint16(14394), + 2369: uint16(9778), + 2370: uint16(14388), + 2371: uint16(5632), + 2372: uint16(4668), + 2373: uint16(14396), + 2374: uint16(11530), + 2375: uint16(6445), + 2376: uint16(8724), + 2377: uint16(14393), + 2378: uint16(7995), + 2379: uint16(6164), + 2380: uint16(7747), + 2381: uint16(4165), + 2382: uint16(8219), + 2383: uint16(14391), + 2384: uint16(5156), + 2385: uint16(5670), + 2386: uint16(9006), + 2387: uint16(14397), + 2388: uint16(8254), + 2389: uint16(14400), + 2390: uint16(14402), + 2391: uint16(8470), + 2392: uint16(14408), + 2393: uint16(14403), + 2394: uint16(14405), + 2395: uint16(10272), + 2396: uint16(9042), + 2397: uint16(14406), + 2398: uint16(11275), + 2399: uint16(11303), + 2400: uint16(4888), + 2401: uint16(3853), + 2402: uint16(14404), + 2403: uint16(14401), + 2404: uint16(4951), + 2405: uint16(4166), + 2406: uint16(14407), + 2407: uint16(11304), + 2408: uint16(14411), + 2409: uint16(8474), + 2410: uint16(14418), + 2411: uint16(14412), + 2412: uint16(14409), + 2413: uint16(14416), + 2414: uint16(14386), + 2415: uint16(14413), + 2416: uint16(14417), + 2417: uint16(10017), + 2418: uint16(9290), + 2419: uint16(14410), + 2420: uint16(14414), + 2421: uint16(5671), + 2422: uint16(6480), + 2423: uint16(7996), + 2424: uint16(14422), + 2425: uint16(9221), + 2426: uint16(14419), + 2427: uint16(10815), + 2428: uint16(14420), + 2429: uint16(14421), + 2430: uint16(11053), + 2431: uint16(7937), + 2432: uint16(5697), + 2433: uint16(14428), + 2434: uint16(6676), + 2435: uint16(14425), + 2436: uint16(14424), + 2437: uint16(9745), + 2438: uint16(9492), + 2439: uint16(9232), + 2440: uint16(14426), + 2441: uint16(14427), + 2442: uint16(10318), + 2443: uint16(9764), + 2444: uint16(6658), + 2445: uint16(8016), + 2446: uint16(10799), + 2447: uint16(4648), + 2448: uint16(14596), + 2449: uint16(14429), + 2450: uint16(11305), + 2451: uint16(14598), + 2452: uint16(14594), + 2453: uint16(14595), + 2454: uint16(8255), + 2455: uint16(14593), + 2456: uint16(14366), + 2457: uint16(14597), + 2458: uint16(14592), + 2459: uint16(14602), + 2460: uint16(14603), + 2461: uint16(9222), + 2462: uint16(14605), + 2463: uint16(6659), + 2464: uint16(14600), + 2465: uint16(5147), + 2466: uint16(14606), + 2467: uint16(14599), + 2468: uint16(14610), + 2469: uint16(14609), + 2470: uint16(14608), + 2471: uint16(14611), + 2472: uint16(14613), + 2473: uint16(7504), + 2474: uint16(14612), + 2475: uint16(14616), + 2476: uint16(14614), + 2477: uint16(14615), + 2478: uint16(14415), + 2479: uint16(14618), + 2480: uint16(14617), + 2481: uint16(14423), + 2482: uint16(14619), + 2483: uint16(14607), + 2484: uint16(6712), + 2485: uint16(14620), + 2486: uint16(14621), + 2487: uint16(14623), + 2488: uint16(14622), + 2489: uint16(14624), + 2490: uint16(4445), + 2491: uint16(6165), + 2492: uint16(10587), + 2493: uint16(7950), + 2494: uint16(5933), + 2495: uint16(14626), + 2496: uint16(14629), + 2497: uint16(10289), + 2498: uint16(5182), + 2499: uint16(14628), + 2500: uint16(14627), + 2501: uint16(9779), + 2502: uint16(14630), + 2503: uint16(5396), + 2504: uint16(14632), + 2505: uint16(14631), + 2506: uint16(4889), + 2507: uint16(6677), + 2508: uint16(9527), + 2509: uint16(5672), + 2510: uint16(7763), + 2511: uint16(14633), + 2512: uint16(7951), + 2513: uint16(9223), + 2514: uint16(10302), + 2515: uint16(14634), + 2516: uint16(14635), + 2517: uint16(14636), + 2518: uint16(10519), + 2519: uint16(13372), + 2520: uint16(7973), + 2521: uint16(10283), + 2522: uint16(6455), + 2523: uint16(10052), + 2524: uint16(10018), + 2525: uint16(9260), + 2526: uint16(11552), + 2527: uint16(14638), + 2528: uint16(6959), + 2529: uint16(14639), + 2530: uint16(3861), + 2531: uint16(5427), + 2532: uint16(7980), + 2533: uint16(10303), + 2534: uint16(14640), + 2535: uint16(6689), + 2536: uint16(8742), + 2537: uint16(6714), + 2538: uint16(7702), + 2539: uint16(14641), + 2540: uint16(10588), + 2541: uint16(4182), + 2542: uint16(6715), + 2543: uint16(14644), + 2544: uint16(14642), + 2545: uint16(14645), + 2546: uint16(11544), + 2547: uint16(14643), + 2548: uint16(8026), + 2549: uint16(14646), + 2550: uint16(8465), + 2551: uint16(14647), + 2552: uint16(4953), + 2553: uint16(14649), + 2554: uint16(14648), + 2555: uint16(14650), + 2556: uint16(14651), + 2557: uint16(4954), + 2558: uint16(9563), + 2559: uint16(8725), + 2560: uint16(5195), + 2561: uint16(6716), + 2562: uint16(8256), + 2563: uint16(7227), + 2564: uint16(3855), + 2565: uint16(14652), + 2566: uint16(4353), + 2567: uint16(14656), + 2568: uint16(6166), + 2569: uint16(14655), + 2570: uint16(6410), + 2571: uint16(7449), + 2572: uint16(14654), + 2573: uint16(7450), + 2574: uint16(11039), + 2575: uint16(6409), + 2576: uint16(3894), + 2577: uint16(7981), + 2578: uint16(14661), + 2579: uint16(7952), + 2580: uint16(4134), + 2581: uint16(7220), + 2582: uint16(10821), + 2583: uint16(6481), + 2584: uint16(7451), + 2585: uint16(7942), + 2586: uint16(14660), + 2587: uint16(14658), + 2588: uint16(14659), + 2589: uint16(8778), + 2590: uint16(14853), + 2591: uint16(14665), + 2592: uint16(6749), + 2593: uint16(6167), + 2594: uint16(14663), + 2595: uint16(14664), + 2596: uint16(7703), + 2597: uint16(14662), + 2598: uint16(6670), + 2599: uint16(14667), + 2600: uint16(14666), + 2601: uint16(14671), + 2602: uint16(14672), + 2603: uint16(14668), + 2604: uint16(4609), + 2605: uint16(14669), + 2606: uint16(14670), + 2607: uint16(10036), + 2608: uint16(10304), + 2609: uint16(5673), + 2610: uint16(14673), + 2611: uint16(7953), + 2612: uint16(7452), + 2613: uint16(8753), + 2614: uint16(5414), + 2615: uint16(14674), + 2616: uint16(14678), + 2617: uint16(4394), + 2618: uint16(14675), + 2619: uint16(14677), + 2620: uint16(14676), + 2621: uint16(7242), + 2622: uint16(8743), + 2623: uint16(3876), + 2624: uint16(14679), + 2625: uint16(14680), + 2626: uint16(8969), + 2627: uint16(11600), + 2628: uint16(6690), + 2629: uint16(10570), + 2630: uint16(10780), + 2631: uint16(14849), + 2632: uint16(14682), + 2633: uint16(14685), + 2634: uint16(14684), + 2635: uint16(14681), + 2636: uint16(14848), + 2637: uint16(9533), + 2638: uint16(14683), + 2639: uint16(14850), + 2640: uint16(7243), + 2641: uint16(14851), + 2642: uint16(11306), + 2643: uint16(9815), + 2644: uint16(14852), + 2645: uint16(14854), + 2646: uint16(14855), + 2647: uint16(14856), + 2648: uint16(5417), + 2649: uint16(4135), + 2650: uint16(6168), + 2651: uint16(14857), + 2652: uint16(14858), + 2653: uint16(7248), + 2654: uint16(8257), + 2655: uint16(12599), + 2656: uint16(8221), + 2657: uint16(8220), + 2658: uint16(8503), + 2659: uint16(6438), + 2660: uint16(12113), + 2661: uint16(5709), + 2662: uint16(11276), + 2663: uint16(10589), + 2664: uint16(10333), + 2665: uint16(14859), + 2666: uint16(6482), + 2667: uint16(8990), + 2668: uint16(14860), + 2669: uint16(11790), + 2670: uint16(10781), + 2671: uint16(8970), + 2672: uint16(14861), + 2673: uint16(4955), + 2674: uint16(14862), + 2675: uint16(14863), + 2676: uint16(11065), + 2677: uint16(11011), + 2678: uint16(10837), + 2679: uint16(10811), + 2680: uint16(6660), + 2681: uint16(14865), + 2682: uint16(6986), + 2683: uint16(10800), + 2684: uint16(14867), + 2685: uint16(14870), + 2686: uint16(14869), + 2687: uint16(4952), + 2688: uint16(5183), + 2689: uint16(14866), + 2690: uint16(14868), + 2691: uint16(14871), + 2692: uint16(7768), + 2693: uint16(11354), + 2694: uint16(3880), + 2695: uint16(6463), + 2696: uint16(8475), + 2697: uint16(6972), + 2698: uint16(7506), + 2699: uint16(14874), + 2700: uint16(9261), + 2701: uint16(14872), + 2702: uint16(8458), + 2703: uint16(14873), + 2704: uint16(7505), + 2705: uint16(11068), + 2706: uint16(14875), + 2707: uint16(14876), + 2708: uint16(11335), + 2709: uint16(14881), + 2710: uint16(6169), + 2711: uint16(9780), + 2712: uint16(14878), + 2713: uint16(9291), + 2714: uint16(14653), + 2715: uint16(14657), + 2716: uint16(5166), + 2717: uint16(9766), + 2718: uint16(14880), + 2719: uint16(7453), + 2720: uint16(10019), + 2721: uint16(14886), + 2722: uint16(10073), + 2723: uint16(14877), + 2724: uint16(14883), + 2725: uint16(14882), + 2726: uint16(7982), + 2727: uint16(10828), + 2728: uint16(11570), + 2729: uint16(10822), + 2730: uint16(4395), + 2731: uint16(6717), + 2732: uint16(11815), + 2733: uint16(14885), + 2734: uint16(7764), + 2735: uint16(14884), + 2736: uint16(14879), + 2737: uint16(5934), + 2738: uint16(14891), + 2739: uint16(14889), + 2740: uint16(4396), + 2741: uint16(14887), + 2742: uint16(14893), + 2743: uint16(14899), + 2744: uint16(8487), + 2745: uint16(10528), + 2746: uint16(14901), + 2747: uint16(10241), + 2748: uint16(14900), + 2749: uint16(9807), + 2750: uint16(10782), + 2751: uint16(4890), + 2752: uint16(8022), + 2753: uint16(7199), + 2754: uint16(9010), + 2755: uint16(11277), + 2756: uint16(14896), + 2757: uint16(14895), + 2758: uint16(14897), + 2759: uint16(14894), + 2760: uint16(14902), + 2761: uint16(14892), + 2762: uint16(14890), + 2763: uint16(14898), + 2764: uint16(14888), + 2765: uint16(8779), + 2766: uint16(11095), + 2767: uint16(6949), + 2768: uint16(6483), + 2769: uint16(6425), + 2770: uint16(10830), + 2771: uint16(4640), + 2772: uint16(9005), + 2773: uint16(9513), + 2774: uint16(4136), + 2775: uint16(8017), + 2776: uint16(7955), + 2777: uint16(5641), + 2778: uint16(14904), + 2779: uint16(6170), + 2780: uint16(4699), + 2781: uint16(14906), + 2782: uint16(4691), + 2783: uint16(14912), + 2784: uint16(14909), + 2785: uint16(8018), + 2786: uint16(4650), + 2787: uint16(6411), + 2788: uint16(4649), + 2789: uint16(6446), + 2790: uint16(14907), + 2791: uint16(5700), + 2792: uint16(5674), + 2793: uint16(9292), + 2794: uint16(14905), + 2795: uint16(3877), + 2796: uint16(14908), + 2797: uint16(14910), + 2798: uint16(5420), + 2799: uint16(5643), + 2800: uint16(4891), + 2801: uint16(5162), + 2802: uint16(14913), + 2803: uint16(6488), + 2804: uint16(10832), + 2805: uint16(6678), + 2806: uint16(14914), + 2807: uint16(10255), + 2808: uint16(14926), + 2809: uint16(4370), + 2810: uint16(14915), + 2811: uint16(14932), + 2812: uint16(14916), + 2813: uint16(11553), + 2814: uint16(14923), + 2815: uint16(9790), + 2816: uint16(14931), + 2817: uint16(14918), + 2818: uint16(3859), + 2819: uint16(14920), + 2820: uint16(6171), + 2821: uint16(14922), + 2822: uint16(14921), + 2823: uint16(14917), + 2824: uint16(14928), + 2825: uint16(7454), + 2826: uint16(13132), + 2827: uint16(5959), + 2828: uint16(11355), + 2829: uint16(14919), + 2830: uint16(9043), + 2831: uint16(4610), + 2832: uint16(6412), + 2833: uint16(14911), + 2834: uint16(14927), + 2835: uint16(4672), + 2836: uint16(14925), + 2837: uint16(14929), + 2838: uint16(9293), + 2839: uint16(4957), + 2840: uint16(15121), + 2841: uint16(11048), + 2842: uint16(14934), + 2843: uint16(4956), + 2844: uint16(14941), + 2845: uint16(10783), + 2846: uint16(15104), + 2847: uint16(15106), + 2848: uint16(15110), + 2849: uint16(14936), + 2850: uint16(8713), + 2851: uint16(9294), + 2852: uint16(15114), + 2853: uint16(14939), + 2854: uint16(15111), + 2855: uint16(15105), + 2856: uint16(7704), + 2857: uint16(15115), + 2858: uint16(7954), + 2859: uint16(15113), + 2860: uint16(4892), + 2861: uint16(11823), + 2862: uint16(14933), + 2863: uint16(15109), + 2864: uint16(3895), + 2865: uint16(14935), + 2866: uint16(11033), + 2867: uint16(14940), + 2868: uint16(7681), + 2869: uint16(8998), + 2870: uint16(14930), + 2871: uint16(15108), + 2872: uint16(7769), + 2873: uint16(15118), + 2874: uint16(4688), + 2875: uint16(5888), + 2876: uint16(15120), + 2877: uint16(14937), + 2878: uint16(15119), + 2879: uint16(15112), + 2880: uint16(14938), + 2881: uint16(15116), + 2882: uint16(15117), + 2883: uint16(15134), + 2884: uint16(9517), + 2885: uint16(15107), + 2886: uint16(15130), + 2887: uint16(15132), + 2888: uint16(9015), + 2889: uint16(11307), + 2890: uint16(10325), + 2891: uint16(15127), + 2892: uint16(8489), + 2893: uint16(15133), + 2894: uint16(8222), + 2895: uint16(15124), + 2896: uint16(15137), + 2897: uint16(15136), + 2898: uint16(9550), + 2899: uint16(15135), + 2900: uint16(9545), + 2901: uint16(15139), + 2902: uint16(15126), + 2903: uint16(5415), + 2904: uint16(15129), + 2905: uint16(7228), + 2906: uint16(9791), + 2907: uint16(15131), + 2908: uint16(5418), + 2909: uint16(15123), + 2910: uint16(15125), + 2911: uint16(15122), + 2912: uint16(11791), + 2913: uint16(4665), + 2914: uint16(15128), + 2915: uint16(15138), + 2916: uint16(4628), + 2917: uint16(6470), + 2918: uint16(4156), + 2919: uint16(15155), + 2920: uint16(11792), + 2921: uint16(15158), + 2922: uint16(7705), + 2923: uint16(15157), + 2924: uint16(15156), + 2925: uint16(15153), + 2926: uint16(15141), + 2927: uint16(15170), + 2928: uint16(15140), + 2929: uint16(15159), + 2930: uint16(15151), + 2931: uint16(15146), + 2932: uint16(15143), + 2933: uint16(15144), + 2934: uint16(15152), + 2935: uint16(21249), + 2936: uint16(15149), + 2937: uint16(6172), + 2938: uint16(8999), + 2939: uint16(8259), + 2940: uint16(15147), + 2941: uint16(15142), + 2942: uint16(15145), + 2943: uint16(11308), + 2944: uint16(10825), + 2945: uint16(15150), + 2946: uint16(15160), + 2947: uint16(15168), + 2948: uint16(15161), + 2949: uint16(15174), + 2950: uint16(15172), + 2951: uint16(15167), + 2952: uint16(15166), + 2953: uint16(9007), + 2954: uint16(8260), + 2955: uint16(15164), + 2956: uint16(15162), + 2957: uint16(15169), + 2958: uint16(15175), + 2959: uint16(10068), + 2960: uint16(15181), + 2961: uint16(15176), + 2962: uint16(15179), + 2963: uint16(15173), + 2964: uint16(8787), + 2965: uint16(10263), + 2966: uint16(15163), + 2967: uint16(15171), + 2968: uint16(7455), + 2969: uint16(11054), + 2970: uint16(15191), + 2971: uint16(15178), + 2972: uint16(5889), + 2973: uint16(4354), + 2974: uint16(4670), + 2975: uint16(15154), + 2976: uint16(7456), + 2977: uint16(15183), + 2978: uint16(15190), + 2979: uint16(7000), + 2980: uint16(4689), + 2981: uint16(8717), + 2982: uint16(15180), + 2983: uint16(15185), + 2984: uint16(15189), + 2985: uint16(5397), + 2986: uint16(5163), + 2987: uint16(15187), + 2988: uint16(5120), + 2989: uint16(9514), + 2990: uint16(15186), + 2991: uint16(15188), + 2992: uint16(15182), + 2993: uint16(15184), + 2994: uint16(4671), + 2995: uint16(8744), + 2996: uint16(15195), + 2997: uint16(15193), + 2998: uint16(5960), + 2999: uint16(15192), + 3000: uint16(15360), + 3001: uint16(14903), + 3002: uint16(15194), + 3003: uint16(15196), + 3004: uint16(15197), + 3005: uint16(15371), + 3006: uint16(15367), + 3007: uint16(14924), + 3008: uint16(15366), + 3009: uint16(15365), + 3010: uint16(15362), + 3011: uint16(15177), + 3012: uint16(15364), + 3013: uint16(15363), + 3014: uint16(15369), + 3015: uint16(11781), + 3016: uint16(15372), + 3017: uint16(5466), + 3018: uint16(15368), + 3019: uint16(15370), + 3020: uint16(9990), + 3021: uint16(15373), + 3022: uint16(15377), + 3023: uint16(15374), + 3024: uint16(11346), + 3025: uint16(15375), + 3026: uint16(15165), + 3027: uint16(15378), + 3028: uint16(15379), + 3029: uint16(4116), + 3030: uint16(15381), + 3031: uint16(5702), + 3032: uint16(6912), + 3033: uint16(5428), + 3034: uint16(4355), + 3035: uint16(11326), + 3036: uint16(15383), + 3037: uint16(15382), + 3038: uint16(15385), + 3039: uint16(5148), + 3040: uint16(5429), + 3041: uint16(4893), + 3042: uint16(15388), + 3043: uint16(15387), + 3044: uint16(15389), + 3045: uint16(4397), + 3046: uint16(8726), + 3047: uint16(15390), + 3048: uint16(4894), + 3049: uint16(15392), + 3050: uint16(15391), + 3051: uint16(15393), + 3052: uint16(15394), + 3053: uint16(15395), + 3054: uint16(6718), + 3055: uint16(7956), + 3056: uint16(6400), + 3057: uint16(10319), + 3058: uint16(10561), + 3059: uint16(11811), + 3060: uint16(6740), + 3061: uint16(6447), + 3062: uint16(11601), + 3063: uint16(15396), + 3064: uint16(15397), + 3065: uint16(6719), + 3066: uint16(15398), + 3067: uint16(15399), + 3068: uint16(15401), + 3069: uint16(15400), + 3070: uint16(10807), + 3071: uint16(7229), + 3072: uint16(6987), + 3073: uint16(6691), + 3074: uint16(15402), + 3075: uint16(15404), + 3076: uint16(7682), + 3077: uint16(15403), + 3078: uint16(15405), + 3079: uint16(15406), + 3080: uint16(15407), + 3081: uint16(15408), + 3082: uint16(15409), + 3083: uint16(15411), + 3084: uint16(15410), + 3085: uint16(15412), + 3086: uint16(4356), + 3087: uint16(8745), + 3088: uint16(15413), + 3089: uint16(6661), + 3090: uint16(4651), + 3091: uint16(15414), + 3092: uint16(9249), + 3093: uint16(13099), + 3094: uint16(5122), + 3095: uint16(15415), + 3096: uint16(15416), + 3097: uint16(10571), + 3098: uint16(10823), + 3099: uint16(9510), + 3100: uint16(15417), + 3101: uint16(10053), + 3102: uint16(10074), + 3103: uint16(11058), + 3104: uint16(15418), + 3105: uint16(15420), + 3106: uint16(15419), + 3107: uint16(15422), + 3108: uint16(15421), + 3109: uint16(15424), + 3110: uint16(6720), + 3111: uint16(11024), + 3112: uint16(15425), + 3113: uint16(15426), + 3114: uint16(5123), + 3115: uint16(15427), + 3116: uint16(15429), + 3117: uint16(15428), + 3118: uint16(7748), + 3119: uint16(10264), + 3120: uint16(4137), + 3121: uint16(10020), + 3122: uint16(9044), + 3123: uint16(7200), + 3124: uint16(5184), + 3125: uint16(10021), + 3126: uint16(6925), + 3127: uint16(15431), + 3128: uint16(4895), + 3129: uint16(4183), + 3130: uint16(9553), + 3131: uint16(15430), + 3132: uint16(6173), + 3133: uint16(8754), + 3134: uint16(15432), + 3135: uint16(15440), + 3136: uint16(15433), + 3137: uint16(8480), + 3138: uint16(5185), + 3139: uint16(15441), + 3140: uint16(5703), + 3141: uint16(5124), + 3142: uint16(15439), + 3143: uint16(15437), + 3144: uint16(15434), + 3145: uint16(11327), + 3146: uint16(8991), + 3147: uint16(9528), + 3148: uint16(15435), + 3149: uint16(15443), + 3150: uint16(15442), + 3151: uint16(5634), + 3152: uint16(4364), + 3153: uint16(6426), + 3154: uint16(15436), + 3155: uint16(15438), + 3156: uint16(10806), + 3157: uint16(8531), + 3158: uint16(10838), + 3159: uint16(15451), + 3160: uint16(15452), + 3161: uint16(4398), + 3162: uint16(10503), + 3163: uint16(11100), + 3164: uint16(15616), + 3165: uint16(6914), + 3166: uint16(7457), + 3167: uint16(15447), + 3168: uint16(15453), + 3169: uint16(4167), + 3170: uint16(5398), + 3171: uint16(15444), + 3172: uint16(15449), + 3173: uint16(8019), + 3174: uint16(9808), + 3175: uint16(10054), + 3176: uint16(15446), + 3177: uint16(10752), + 3178: uint16(15448), + 3179: uint16(15619), + 3180: uint16(15617), + 3181: uint16(15450), + 3182: uint16(10753), + 3183: uint16(9767), + 3184: uint16(5186), + 3185: uint16(9220), + 3186: uint16(8780), + 3187: uint16(15620), + 3188: uint16(15618), + 3189: uint16(8504), + 3190: uint16(15445), + 3191: uint16(4138), + 3192: uint16(11309), + 3193: uint16(15631), + 3194: uint16(15630), + 3195: uint16(8021), + 3196: uint16(15627), + 3197: uint16(11339), + 3198: uint16(9493), + 3199: uint16(15621), + 3200: uint16(8996), + 3201: uint16(4139), + 3202: uint16(6174), + 3203: uint16(15624), + 3204: uint16(7174), + 3205: uint16(15629), + 3206: uint16(15628), + 3207: uint16(15623), + 3208: uint16(15626), + 3209: uint16(4679), + 3210: uint16(15625), + 3211: uint16(9768), + 3212: uint16(11533), + 3213: uint16(7507), + 3214: uint16(8020), + 3215: uint16(15637), + 3216: uint16(15635), + 3217: uint16(10284), + 3218: uint16(15632), + 3219: uint16(15634), + 3220: uint16(4121), + 3221: uint16(6175), + 3222: uint16(11793), + 3223: uint16(4636), + 3224: uint16(10305), + 3225: uint16(11328), + 3226: uint16(4611), + 3227: uint16(7706), + 3228: uint16(15636), + 3229: uint16(15641), + 3230: uint16(7458), + 3231: uint16(11279), + 3232: uint16(15638), + 3233: uint16(15633), + 3234: uint16(15639), + 3235: uint16(11581), + 3236: uint16(9298), + 3237: uint16(9505), + 3238: uint16(4629), + 3239: uint16(4148), + 3240: uint16(15645), + 3241: uint16(15648), + 3242: uint16(11554), + 3243: uint16(11331), + 3244: uint16(15655), + 3245: uint16(15649), + 3246: uint16(15646), + 3247: uint16(11571), + 3248: uint16(15652), + 3249: uint16(7209), + 3250: uint16(15654), + 3251: uint16(15659), + 3252: uint16(9296), + 3253: uint16(15657), + 3254: uint16(15651), + 3255: uint16(8727), + 3256: uint16(15658), + 3257: uint16(15647), + 3258: uint16(15653), + 3259: uint16(15660), + 3260: uint16(3931), + 3261: uint16(15650), + 3262: uint16(15661), + 3263: uint16(7707), + 3264: uint16(7230), + 3265: uint16(10500), + 3266: uint16(6413), + 3267: uint16(15642), + 3268: uint16(15656), + 3269: uint16(9241), + 3270: uint16(7957), + 3271: uint16(4680), + 3272: uint16(6448), + 3273: uint16(7459), + 3274: uint16(15644), + 3275: uint16(7201), + 3276: uint16(5675), + 3277: uint16(15643), + 3278: uint16(15665), + 3279: uint16(7244), + 3280: uint16(5913), + 3281: uint16(15680), + 3282: uint16(15674), + 3283: uint16(5203), + 3284: uint16(9262), + 3285: uint16(15669), + 3286: uint16(15678), + 3287: uint16(3854), + 3288: uint16(4113), + 3289: uint16(4376), + 3290: uint16(15671), + 3291: uint16(8459), + 3292: uint16(15662), + 3293: uint16(15664), + 3294: uint16(6176), + 3295: uint16(15681), + 3296: uint16(15676), + 3297: uint16(15668), + 3298: uint16(15675), + 3299: uint16(11018), + 3300: uint16(15673), + 3301: uint16(15677), + 3302: uint16(5935), + 3303: uint16(7460), + 3304: uint16(8728), + 3305: uint16(15667), + 3306: uint16(11278), + 3307: uint16(15670), + 3308: uint16(15663), + 3309: uint16(9297), + 3310: uint16(15666), + 3311: uint16(15672), + 3312: uint16(11824), + 3313: uint16(6941), + 3314: uint16(10845), + 3315: uint16(15682), + 3316: uint16(9997), + 3317: uint16(15694), + 3318: uint16(5914), + 3319: uint16(7231), + 3320: uint16(15684), + 3321: uint16(11534), + 3322: uint16(6177), + 3323: uint16(15697), + 3324: uint16(3917), + 3325: uint16(15695), + 3326: uint16(15683), + 3327: uint16(15689), + 3328: uint16(15691), + 3329: uint16(11310), + 3330: uint16(15686), + 3331: uint16(9229), + 3332: uint16(15688), + 3333: uint16(15696), + 3334: uint16(15690), + 3335: uint16(11046), + 3336: uint16(15685), + 3337: uint16(6913), + 3338: uint16(15709), + 3339: uint16(4681), + 3340: uint16(15687), + 3341: uint16(15692), + 3342: uint16(15693), + 3343: uint16(8523), + 3344: uint16(8505), + 3345: uint16(15701), + 3346: uint16(15707), + 3347: uint16(15705), + 3348: uint16(9224), + 3349: uint16(15874), + 3350: uint16(15702), + 3351: uint16(15703), + 3352: uint16(15679), + 3353: uint16(5208), + 3354: uint16(10265), + 3355: uint16(6942), + 3356: uint16(6230), + 3357: uint16(11794), + 3358: uint16(15699), + 3359: uint16(15873), + 3360: uint16(4168), + 3361: uint16(8261), + 3362: uint16(9816), + 3363: uint16(4896), + 3364: uint16(11609), + 3365: uint16(11008), + 3366: uint16(9009), + 3367: uint16(15706), + 3368: uint16(15708), + 3369: uint16(8209), + 3370: uint16(15872), + 3371: uint16(15704), + 3372: uint16(15698), + 3373: uint16(4898), + 3374: uint16(5704), + 3375: uint16(15886), + 3376: uint16(15881), + 3377: uint16(8023), + 3378: uint16(4674), + 3379: uint16(7232), + 3380: uint16(15890), + 3381: uint16(15883), + 3382: uint16(8971), + 3383: uint16(15880), + 3384: uint16(9016), + 3385: uint16(15915), + 3386: uint16(15877), + 3387: uint16(15876), + 3388: uint16(15885), + 3389: uint16(15879), + 3390: uint16(15878), + 3391: uint16(15884), + 3392: uint16(7936), + 3393: uint16(15875), + 3394: uint16(15887), + 3395: uint16(15888), + 3396: uint16(4897), + 3397: uint16(15893), + 3398: uint16(15892), + 3399: uint16(15894), + 3400: uint16(15897), + 3401: uint16(9250), + 3402: uint16(15891), + 3403: uint16(15895), + 3404: uint16(5698), + 3405: uint16(8536), + 3406: uint16(15889), + 3407: uint16(9754), + 3408: uint16(15896), + 3409: uint16(15901), + 3410: uint16(15899), + 3411: uint16(15902), + 3412: uint16(15905), + 3413: uint16(15898), + 3414: uint16(6217), + 3415: uint16(9735), + 3416: uint16(15640), + 3417: uint16(11347), + 3418: uint16(15900), + 3419: uint16(15904), + 3420: uint16(8532), + 3421: uint16(15903), + 3422: uint16(15882), + 3423: uint16(20040), + 3424: uint16(15908), + 3425: uint16(15912), + 3426: uint16(15910), + 3427: uint16(15906), + 3428: uint16(15907), + 3429: uint16(15911), + 3430: uint16(15909), + 3431: uint16(10285), + 3432: uint16(15917), + 3433: uint16(15914), + 3434: uint16(15913), + 3435: uint16(15916), + 3436: uint16(9523), + 3437: uint16(15918), + 3438: uint16(8788), + 3439: uint16(8524), + 3440: uint16(7940), + 3441: uint16(15919), + 3442: uint16(15921), + 3443: uint16(15920), + 3444: uint16(15700), + 3445: uint16(15922), + 3446: uint16(9542), + 3447: uint16(15923), + 3448: uint16(4399), + 3449: uint16(9299), + 3450: uint16(4612), + 3451: uint16(5187), + 3452: uint16(6973), + 3453: uint16(6449), + 3454: uint16(11782), + 3455: uint16(7749), + 3456: uint16(4169), + 3457: uint16(15925), + 3458: uint16(15924), + 3459: uint16(15928), + 3460: uint16(8729), + 3461: uint16(15931), + 3462: uint16(15926), + 3463: uint16(15930), + 3464: uint16(15929), + 3465: uint16(9247), + 3466: uint16(3896), + 3467: uint16(11604), + 3468: uint16(15933), + 3469: uint16(4103), + 3470: uint16(15935), + 3471: uint16(15934), + 3472: uint16(15932), + 3473: uint16(15927), + 3474: uint16(10754), + 3475: uint16(15937), + 3476: uint16(15936), + 3477: uint16(4170), + 3478: uint16(15939), + 3479: uint16(10513), + 3480: uint16(15938), + 3481: uint16(11028), + 3482: uint16(7462), + 3483: uint16(8210), + 3484: uint16(7461), + 3485: uint16(11610), + 3486: uint16(15945), + 3487: uint16(8024), + 3488: uint16(15941), + 3489: uint16(15946), + 3490: uint16(4171), + 3491: uint16(15944), + 3492: uint16(9792), + 3493: uint16(15940), + 3494: uint16(15943), + 3495: uint16(7463), + 3496: uint16(10032), + 3497: uint16(15947), + 3498: uint16(6960), + 3499: uint16(8025), + 3500: uint16(15950), + 3501: uint16(15942), + 3502: uint16(5638), + 3503: uint16(15948), + 3504: uint16(11311), + 3505: uint16(15951), + 3506: uint16(21253), + 3507: uint16(7214), + 3508: uint16(15952), + 3509: uint16(15953), + 3510: uint16(9741), + 3511: uint16(15955), + 3512: uint16(15956), + 3513: uint16(9746), + 3514: uint16(9300), + 3515: uint16(15958), + 3516: uint16(15960), + 3517: uint16(11572), + 3518: uint16(15957), + 3519: uint16(15959), + 3520: uint16(4172), + 3521: uint16(15954), + 3522: uint16(12858), + 3523: uint16(15961), + 3524: uint16(8262), + 3525: uint16(6679), + 3526: uint16(15963), + 3527: uint16(15962), + 3528: uint16(7683), + 3529: uint16(12600), + 3530: uint16(15964), + 3531: uint16(16128), + 3532: uint16(15949), + 3533: uint16(15965), + 3534: uint16(16129), + 3535: uint16(9817), + 3536: uint16(16130), + 3537: uint16(16131), + 3538: uint16(16132), + 3539: uint16(16133), + 3540: uint16(9021), + 3541: uint16(16135), + 3542: uint16(16134), + 3543: uint16(16136), + 3544: uint16(16137), + 3545: uint16(6974), + 3546: uint16(10306), + 3547: uint16(11083), + 3548: uint16(16138), + 3549: uint16(16139), + 3550: uint16(8245), + 3551: uint16(6915), + 3552: uint16(16140), + 3553: uint16(16141), + 3554: uint16(16142), + 3555: uint16(10545), + 3556: uint16(10022), + 3557: uint16(16143), + 3558: uint16(9782), + 3559: uint16(8972), + 3560: uint16(16144), + 3561: uint16(4422), + 3562: uint16(5196), + 3563: uint16(11045), + 3564: uint16(11029), + 3565: uint16(4371), + 3566: uint16(11795), + 3567: uint16(10801), + 3568: uint16(10505), + 3569: uint16(7958), + 3570: uint16(16145), + 3571: uint16(9506), + 3572: uint16(5890), + 3573: uint16(16146), + 3574: uint16(6451), + 3575: uint16(16148), + 3576: uint16(16147), + 3577: uint16(16149), + 3578: uint16(16150), + 3579: uint16(16151), + 3580: uint16(5149), + 3581: uint16(16152), + 3582: uint16(16153), + 3583: uint16(5891), + 3584: uint16(10023), + 3585: uint16(16155), + 3586: uint16(7508), + 3587: uint16(16154), + 3588: uint16(5399), + 3589: uint16(16156), + 3590: uint16(16158), + 3591: uint16(16157), + 3592: uint16(16159), + 3593: uint16(5936), + 3594: uint16(16160), + 3595: uint16(5448), + 3596: uint16(8223), + 3597: uint16(6236), + 3598: uint16(16162), + 3599: uint16(16163), + 3600: uint16(16161), + 3601: uint16(6988), + 3602: uint16(9511), + 3603: uint16(5400), + 3604: uint16(16165), + 3605: uint16(8715), + 3606: uint16(16164), + 3607: uint16(11796), + 3608: uint16(9793), + 3609: uint16(16168), + 3610: uint16(16170), + 3611: uint16(16167), + 3612: uint16(11059), + 3613: uint16(16169), + 3614: uint16(16171), + 3615: uint16(11555), + 3616: uint16(16175), + 3617: uint16(16174), + 3618: uint16(8789), + 3619: uint16(9740), + 3620: uint16(5892), + 3621: uint16(16173), + 3622: uint16(16172), + 3623: uint16(11280), + 3624: uint16(11281), + 3625: uint16(16176), + 3626: uint16(4173), + 3627: uint16(6229), + 3628: uint16(6721), + 3629: uint16(16177), + 3630: uint16(16178), + 3631: uint16(16180), + 3632: uint16(7202), + 3633: uint16(16182), + 3634: uint16(16181), + 3635: uint16(16183), + 3636: uint16(4652), + 3637: uint16(16185), + 3638: uint16(16184), + 3639: uint16(16187), + 3640: uint16(16186), + 3641: uint16(5915), + 3642: uint16(11527), + 3643: uint16(5419), + 3644: uint16(4357), + 3645: uint16(5449), + 3646: uint16(4928), + 3647: uint16(11591), + 3648: uint16(16189), + 3649: uint16(16191), + 3650: uint16(16192), + 3651: uint16(4400), + 3652: uint16(16188), + 3653: uint16(6680), + 3654: uint16(8992), + 3655: uint16(16190), + 3656: uint16(16195), + 3657: uint16(6989), + 3658: uint16(16193), + 3659: uint16(5661), + 3660: uint16(10024), + 3661: uint16(16194), + 3662: uint16(16221), + 3663: uint16(16200), + 3664: uint16(5916), + 3665: uint16(5188), + 3666: uint16(16197), + 3667: uint16(11356), + 3668: uint16(11535), + 3669: uint16(8533), + 3670: uint16(16199), + 3671: uint16(16201), + 3672: uint16(11573), + 3673: uint16(5430), + 3674: uint16(10075), + 3675: uint16(9769), + 3676: uint16(16202), + 3677: uint16(16204), + 3678: uint16(16207), + 3679: uint16(16203), + 3680: uint16(16206), + 3681: uint16(5961), + 3682: uint16(4140), + 3683: uint16(16208), + 3684: uint16(7759), + 3685: uint16(16205), + 3686: uint16(11579), + 3687: uint16(16211), + 3688: uint16(21251), + 3689: uint16(16209), + 3690: uint16(16212), + 3691: uint16(16198), + 3692: uint16(16210), + 3693: uint16(6427), + 3694: uint16(16213), + 3695: uint16(16214), + 3696: uint16(11357), + 3697: uint16(16215), + 3698: uint16(16216), + 3699: uint16(16196), + 3700: uint16(16217), + 3701: uint16(4899), + 3702: uint16(6916), + 3703: uint16(16218), + 3704: uint16(16219), + 3705: uint16(16220), + 3706: uint16(4122), + 3707: uint16(16384), + 3708: uint16(10266), + 3709: uint16(16385), + 3710: uint16(4867), + 3711: uint16(16386), + 3712: uint16(16387), + 3713: uint16(16388), + 3714: uint16(16390), + 3715: uint16(16391), + 3716: uint16(16389), + 3717: uint16(10290), + 3718: uint16(16393), + 3719: uint16(16392), + 3720: uint16(16395), + 3721: uint16(16394), + 3722: uint16(16396), + 3723: uint16(16397), + 3724: uint16(16399), + 3725: uint16(16398), + 3726: uint16(6232), + 3727: uint16(16401), + 3728: uint16(16400), + 3729: uint16(4900), + 3730: uint16(7730), + 3731: uint16(9243), + 3732: uint16(16402), + 3733: uint16(7959), + 3734: uint16(6681), + 3735: uint16(4184), + 3736: uint16(16403), + 3737: uint16(11312), + 3738: uint16(10562), + 3739: uint16(16404), + 3740: uint16(9251), + 3741: uint16(11282), + 3742: uint16(6178), + 3743: uint16(7708), + 3744: uint16(8746), + 3745: uint16(12563), + 3746: uint16(8973), + 3747: uint16(4423), + 3748: uint16(16405), + 3749: uint16(16406), + 3750: uint16(16411), + 3751: uint16(16409), + 3752: uint16(16408), + 3753: uint16(14625), + 3754: uint16(4613), + 3755: uint16(16407), + 3756: uint16(3897), + 3757: uint16(9993), + 3758: uint16(10025), + 3759: uint16(11536), + 3760: uint16(16412), + 3761: uint16(16410), + 3762: uint16(8763), + 3763: uint16(7941), + 3764: uint16(9994), + 3765: uint16(10252), + 3766: uint16(16414), + 3767: uint16(11531), + 3768: uint16(5676), + 3769: uint16(16415), + 3770: uint16(16413), + 3771: uint16(10037), + 3772: uint16(16416), + 3773: uint16(16417), + 3774: uint16(3898), + 3775: uint16(7509), + 3776: uint16(16422), + 3777: uint16(16419), + 3778: uint16(9548), + 3779: uint16(16418), + 3780: uint16(5125), + 3781: uint16(16425), + 3782: uint16(16420), + 3783: uint16(16421), + 3784: uint16(16424), + 3785: uint16(16423), + 3786: uint16(10244), + 3787: uint16(8225), + 3788: uint16(8224), + 3789: uint16(5150), + 3790: uint16(16426), + 3791: uint16(16427), + 3792: uint16(16428), + 3793: uint16(16430), + 3794: uint16(16429), + 3795: uint16(4149), + 3796: uint16(16438), + 3797: uint16(10055), + 3798: uint16(16432), + 3799: uint16(16434), + 3800: uint16(16436), + 3801: uint16(7709), + 3802: uint16(16437), + 3803: uint16(16435), + 3804: uint16(6943), + 3805: uint16(16431), + 3806: uint16(16433), + 3807: uint16(10273), + 3808: uint16(7464), + 3809: uint16(16440), + 3810: uint16(16439), + 3811: uint16(16441), + 3812: uint16(6917), + 3813: uint16(6414), + 3814: uint16(9302), + 3815: uint16(16442), + 3816: uint16(9002), + 3817: uint16(16444), + 3818: uint16(11520), + 3819: uint16(16443), + 3820: uint16(8264), + 3821: uint16(16449), + 3822: uint16(16451), + 3823: uint16(16452), + 3824: uint16(8755), + 3825: uint16(16450), + 3826: uint16(16447), + 3827: uint16(16445), + 3828: uint16(16446), + 3829: uint16(16448), + 3830: uint16(16455), + 3831: uint16(16453), + 3832: uint16(16454), + 3833: uint16(16456), + 3834: uint16(16458), + 3835: uint16(16459), + 3836: uint16(16460), + 3837: uint16(16461), + 3838: uint16(16457), + 3839: uint16(16463), + 3840: uint16(16462), + 3841: uint16(16464), + 3842: uint16(11556), + 3843: uint16(16467), + 3844: uint16(16465), + 3845: uint16(16466), + 3846: uint16(4929), + 3847: uint16(11101), + 3848: uint16(10537), + 3849: uint16(16469), + 3850: uint16(16468), + 3851: uint16(16470), + 3852: uint16(16471), + 3853: uint16(16475), + 3854: uint16(16472), + 3855: uint16(16473), + 3856: uint16(16474), + 3857: uint16(16476), + 3858: uint16(16477), + 3859: uint16(16640), + 3860: uint16(16641), + 3861: uint16(16642), + 3862: uint16(9998), + 3863: uint16(9263), + 3864: uint16(16643), + 3865: uint16(9809), + 3866: uint16(10259), + 3867: uint16(16644), + 3868: uint16(16645), + 3869: uint16(9225), + 3870: uint16(4614), + 3871: uint16(6179), + 3872: uint16(16646), + 3873: uint16(16647), + 3874: uint16(16648), + 3875: uint16(6664), + 3876: uint16(16650), + 3877: uint16(16649), + 3878: uint16(16651), + 3879: uint16(16652), + 3880: uint16(10056), + 3881: uint16(16653), + 3882: uint16(16654), + 3883: uint16(21064), + 3884: uint16(16655), + 3885: uint16(16656), + 3886: uint16(16657), + 3887: uint16(6669), + 3888: uint16(16658), + 3889: uint16(9781), + 3890: uint16(10814), + 3891: uint16(4141), + 3892: uint16(4150), + 3893: uint16(16659), + 3894: uint16(16661), + 3895: uint16(16660), + 3896: uint16(9295), + 3897: uint16(7960), + 3898: uint16(15384), + 3899: uint16(16662), + 3900: uint16(11040), + 3901: uint16(16663), + 3902: uint16(4901), + 3903: uint16(10038), + 3904: uint16(16664), + 3905: uint16(16665), + 3906: uint16(16666), + 3907: uint16(11067), + 3908: uint16(11060), + 3909: uint16(8989), + 3910: uint16(8265), + 3911: uint16(16668), + 3912: uint16(7233), + 3913: uint16(7465), + 3914: uint16(16671), + 3915: uint16(16670), + 3916: uint16(16669), + 3917: uint16(10076), + 3918: uint16(4902), + 3919: uint16(5896), + 3920: uint16(16677), + 3921: uint16(16674), + 3922: uint16(7710), + 3923: uint16(11025), + 3924: uint16(16673), + 3925: uint16(16675), + 3926: uint16(16676), + 3927: uint16(16672), + 3928: uint16(16678), + 3929: uint16(16679), + 3930: uint16(8974), + 3931: uint16(4930), + 3932: uint16(8772), + 3933: uint16(16680), + 3934: uint16(16681), + 3935: uint16(16684), + 3936: uint16(7750), + 3937: uint16(9507), + 3938: uint16(16685), + 3939: uint16(10802), + 3940: uint16(16682), + 3941: uint16(16683), + 3942: uint16(16688), + 3943: uint16(16687), + 3944: uint16(16686), + 3945: uint16(16690), + 3946: uint16(16689), + 3947: uint16(16691), + 3948: uint16(16693), + 3949: uint16(16692), + 3950: uint16(10540), + 3951: uint16(7221), + 3952: uint16(11557), + 3953: uint16(16694), + 3954: uint16(9494), + 3955: uint16(16695), + 3956: uint16(16696), + 3957: uint16(16700), + 3958: uint16(16698), + 3959: uint16(16699), + 3960: uint16(16697), + 3961: uint16(16701), + 3962: uint16(16702), + 3963: uint16(16703), + 3964: uint16(16704), + 3965: uint16(11030), + 3966: uint16(16705), + 3967: uint16(11087), + 3968: uint16(16706), + 3969: uint16(8749), + 3970: uint16(9801), + 3971: uint16(5450), + 3972: uint16(8730), + 3973: uint16(16707), + 3974: uint16(5401), + 3975: uint16(7983), + 3976: uint16(16708), + 3977: uint16(6428), + 3978: uint16(16709), + 3979: uint16(16710), + 3980: uint16(5893), + 3981: uint16(6452), + 3982: uint16(16712), + 3983: uint16(9269), + 3984: uint16(6453), + 3985: uint16(5165), + 3986: uint16(10755), + 3987: uint16(9770), + 3988: uint16(9270), + 3989: uint16(6203), + 3990: uint16(16714), + 3991: uint16(7466), + 3992: uint16(11537), + 3993: uint16(6180), + 3994: uint16(5894), + 3995: uint16(9986), + 3996: uint16(16716), + 3997: uint16(16718), + 3998: uint16(5962), + 3999: uint16(16717), + 4000: uint16(9045), + 4001: uint16(16720), + 4002: uint16(4630), + 4003: uint16(16715), + 4004: uint16(10057), + 4005: uint16(4111), + 4006: uint16(6475), + 4007: uint16(11825), + 4008: uint16(16719), + 4009: uint16(16721), + 4010: uint16(10538), + 4011: uint16(7992), + 4012: uint16(16723), + 4013: uint16(16724), + 4014: uint16(16722), + 4015: uint16(4653), + 4016: uint16(16730), + 4017: uint16(16729), + 4018: uint16(6918), + 4019: uint16(16731), + 4020: uint16(16726), + 4021: uint16(16732), + 4022: uint16(16727), + 4023: uint16(10039), + 4024: uint16(16725), + 4025: uint16(16728), + 4026: uint16(16897), + 4027: uint16(16896), + 4028: uint16(10816), + 4029: uint16(16733), + 4030: uint16(3914), + 4031: uint16(16899), + 4032: uint16(16898), + 4033: uint16(7467), + 4034: uint16(16900), + 4035: uint16(8226), + 4036: uint16(16902), + 4037: uint16(16901), + 4038: uint16(16903), + 4039: uint16(16711), + 4040: uint16(16713), + 4041: uint16(16905), + 4042: uint16(16904), + 4043: uint16(6919), + 4044: uint16(11592), + 4045: uint16(6961), + 4046: uint16(16906), + 4047: uint16(5654), + 4048: uint16(5151), + 4049: uint16(5126), + 4050: uint16(6722), + 4051: uint16(11283), + 4052: uint16(16912), + 4053: uint16(16911), + 4054: uint16(8227), + 4055: uint16(16908), + 4056: uint16(16910), + 4057: uint16(7210), + 4058: uint16(7711), + 4059: uint16(16909), + 4060: uint16(16907), + 4061: uint16(9737), + 4062: uint16(7468), + 4063: uint16(10267), + 4064: uint16(6454), + 4065: uint16(9303), + 4066: uint16(16913), + 4067: uint16(16914), + 4068: uint16(16936), + 4069: uint16(5431), + 4070: uint16(11804), + 4071: uint16(8212), + 4072: uint16(16915), + 4073: uint16(4401), + 4074: uint16(9046), + 4075: uint16(10496), + 4076: uint16(16916), + 4077: uint16(5209), + 4078: uint16(16917), + 4079: uint16(16919), + 4080: uint16(16920), + 4081: uint16(9736), + 4082: uint16(16921), + 4083: uint16(16922), + 4084: uint16(16923), + 4085: uint16(5432), + 4086: uint16(4402), + 4087: uint16(9508), + 4088: uint16(7175), + 4089: uint16(6723), + 4090: uint16(16924), + 4091: uint16(7176), + 4092: uint16(4393), + 4093: uint16(10274), + 4094: uint16(16925), + 4095: uint16(10058), + 4096: uint16(8228), + 4097: uint16(16928), + 4098: uint16(16929), + 4099: uint16(9800), + 4100: uint16(7712), + 4101: uint16(16926), + 4102: uint16(8768), + 4103: uint16(16927), + 4104: uint16(7469), + 4105: uint16(3899), + 4106: uint16(5128), + 4107: uint16(16930), + 4108: uint16(9047), + 4109: uint16(16931), + 4110: uint16(7974), + 4111: uint16(11020), + 4112: uint16(10242), + 4113: uint16(16932), + 4114: uint16(16933), + 4115: uint16(8756), + 4116: uint16(11558), + 4117: uint16(16935), + 4118: uint16(16934), + 4119: uint16(6990), + 4120: uint16(16937), + 4121: uint16(3919), + 4122: uint16(16940), + 4123: uint16(16938), + 4124: uint16(4403), + 4125: uint16(5677), + 4126: uint16(16939), + 4127: uint16(6181), + 4128: uint16(6225), + 4129: uint16(10565), + 4130: uint16(16941), + 4131: uint16(10803), + 4132: uint16(16943), + 4133: uint16(7984), + 4134: uint16(4142), + 4135: uint16(4377), + 4136: uint16(3851), + 4137: uint16(16942), + 4138: uint16(16944), + 4139: uint16(16945), + 4140: uint16(7510), + 4141: uint16(16946), + 4142: uint16(4654), + 4143: uint16(16948), + 4144: uint16(5705), + 4145: uint16(5189), + 4146: uint16(16949), + 4147: uint16(5460), + 4148: uint16(16950), + 4149: uint16(8027), + 4150: uint16(9516), + 4151: uint16(7999), + 4152: uint16(6484), + 4153: uint16(16951), + 4154: uint16(8769), + 4155: uint16(8266), + 4156: uint16(16953), + 4157: uint16(16955), + 4158: uint16(16952), + 4159: uint16(16954), + 4160: uint16(5633), + 4161: uint16(16956), + 4162: uint16(5637), + 4163: uint16(5190), + 4164: uint16(11313), + 4165: uint16(16958), + 4166: uint16(16959), + 4167: uint16(4109), + 4168: uint16(16962), + 4169: uint16(4693), + 4170: uint16(16961), + 4171: uint16(16960), + 4172: uint16(16964), + 4173: uint16(16957), + 4174: uint16(16965), + 4175: uint16(11528), + 4176: uint16(16966), + 4177: uint16(16967), + 4178: uint16(13139), + 4179: uint16(16969), + 4180: uint16(16968), + 4181: uint16(16970), + 4182: uint16(16971), + 4183: uint16(11540), + 4184: uint16(16972), + 4185: uint16(20302), + 4186: uint16(7470), + 4187: uint16(16973), + 4188: uint16(16974), + 4189: uint16(7222), + 4190: uint16(9495), + 4191: uint16(16975), + 4192: uint16(8711), + 4193: uint16(16976), + 4194: uint16(8731), + 4195: uint16(16977), + 4196: uint16(5380), + 4197: uint16(12318), + 4198: uint16(8764), + 4199: uint16(6930), + 4200: uint16(4903), + 4201: uint16(16978), + 4202: uint16(17153), + 4203: uint16(16981), + 4204: uint16(5191), + 4205: uint16(16980), + 4206: uint16(17155), + 4207: uint16(16979), + 4208: uint16(7471), + 4209: uint16(16983), + 4210: uint16(16984), + 4211: uint16(9226), + 4212: uint16(16985), + 4213: uint16(4669), + 4214: uint16(7737), + 4215: uint16(10307), + 4216: uint16(16987), + 4217: uint16(8519), + 4218: uint16(16982), + 4219: uint16(16986), + 4220: uint16(16988), + 4221: uint16(6490), + 4222: uint16(17157), + 4223: uint16(10253), + 4224: uint16(9989), + 4225: uint16(9304), + 4226: uint16(5433), + 4227: uint16(17156), + 4228: uint16(17154), + 4229: uint16(10004), + 4230: uint16(16989), + 4231: uint16(8765), + 4232: uint16(9306), + 4233: uint16(9305), + 4234: uint16(6485), + 4235: uint16(17175), + 4236: uint16(17159), + 4237: uint16(17161), + 4238: uint16(17164), + 4239: uint16(17165), + 4240: uint16(17162), + 4241: uint16(17163), + 4242: uint16(17160), + 4243: uint16(17158), + 4244: uint16(17152), + 4245: uint16(10542), + 4246: uint16(4404), + 4247: uint16(17172), + 4248: uint16(17169), + 4249: uint16(17174), + 4250: uint16(17173), + 4251: uint16(9810), + 4252: uint16(11014), + 4253: uint16(6682), + 4254: uint16(17167), + 4255: uint16(17176), + 4256: uint16(17171), + 4257: uint16(17170), + 4258: uint16(17166), + 4259: uint16(17168), + 4260: uint16(4904), + 4261: uint16(8732), + 4262: uint16(8028), + 4263: uint16(9985), + 4264: uint16(17181), + 4265: uint16(9987), + 4266: uint16(8000), + 4267: uint16(17178), + 4268: uint16(10030), + 4269: uint16(17182), + 4270: uint16(10546), + 4271: uint16(8762), + 4272: uint16(17177), + 4273: uint16(17179), + 4274: uint16(17180), + 4275: uint16(17183), + 4276: uint16(6947), + 4277: uint16(9509), + 4278: uint16(17188), + 4279: uint16(17187), + 4280: uint16(17184), + 4281: uint16(11797), + 4282: uint16(17193), + 4283: uint16(17197), + 4284: uint16(17194), + 4285: uint16(17190), + 4286: uint16(17191), + 4287: uint16(17196), + 4288: uint16(17185), + 4289: uint16(12596), + 4290: uint16(17192), + 4291: uint16(17186), + 4292: uint16(17195), + 4293: uint16(17201), + 4294: uint16(4905), + 4295: uint16(17198), + 4296: uint16(17199), + 4297: uint16(17200), + 4298: uint16(17203), + 4299: uint16(17202), + 4300: uint16(10069), + 4301: uint16(17204), + 4302: uint16(11611), + 4303: uint16(10572), + 4304: uint16(17209), + 4305: uint16(17206), + 4306: uint16(17205), + 4307: uint16(7985), + 4308: uint16(17208), + 4309: uint16(17210), + 4310: uint16(17207), + 4311: uint16(17214), + 4312: uint16(17211), + 4313: uint16(17212), + 4314: uint16(17189), + 4315: uint16(17213), + 4316: uint16(17215), + 4317: uint16(17216), + 4318: uint16(10533), + 4319: uint16(17217), + 4320: uint16(11073), + 4321: uint16(5421), + 4322: uint16(5640), + 4323: uint16(17218), + 4324: uint16(10515), + 4325: uint16(7751), + 4326: uint16(11023), + 4327: uint16(17219), + 4328: uint16(11538), + 4329: uint16(9811), + 4330: uint16(8229), + 4331: uint16(9747), + 4332: uint16(7212), + 4333: uint16(3871), + 4334: uint16(17224), + 4335: uint16(17222), + 4336: uint16(17220), + 4337: uint16(4864), + 4338: uint16(7472), + 4339: uint16(17225), + 4340: uint16(17223), + 4341: uint16(17221), + 4342: uint16(17229), + 4343: uint16(17228), + 4344: uint16(17227), + 4345: uint16(17226), + 4346: uint16(17230), + 4347: uint16(17231), + 4348: uint16(7961), + 4349: uint16(17232), + 4350: uint16(17234), + 4351: uint16(17233), + 4352: uint16(5937), + 4353: uint16(8215), + 4354: uint16(17236), + 4355: uint16(9307), + 4356: uint16(17235), + 4357: uint16(17237), + 4358: uint16(10516), + 4359: uint16(8267), + 4360: uint16(6182), + 4361: uint16(17238), + 4362: uint16(11559), + 4363: uint16(17240), + 4364: uint16(17241), + 4365: uint16(17242), + 4366: uint16(17243), + 4367: uint16(6724), + 4368: uint16(17244), + 4369: uint16(5678), + 4370: uint16(5193), + 4371: uint16(5129), + 4372: uint16(17408), + 4373: uint16(11090), + 4374: uint16(6183), + 4375: uint16(17245), + 4376: uint16(17411), + 4377: uint16(11077), + 4378: uint16(9755), + 4379: uint16(10258), + 4380: uint16(7234), + 4381: uint16(17410), + 4382: uint16(6962), + 4383: uint16(6184), + 4384: uint16(6725), + 4385: uint16(5192), + 4386: uint16(10517), + 4387: uint16(17409), + 4388: uint16(8230), + 4389: uint16(10785), + 4390: uint16(6486), + 4391: uint16(6726), + 4392: uint16(9020), + 4393: uint16(17414), + 4394: uint16(11582), + 4395: uint16(6456), + 4396: uint16(17415), + 4397: uint16(7713), + 4398: uint16(17417), + 4399: uint16(7473), + 4400: uint16(6415), + 4401: uint16(17416), + 4402: uint16(7177), + 4403: uint16(5917), + 4404: uint16(8231), + 4405: uint16(17412), + 4406: uint16(17418), + 4407: uint16(17413), + 4408: uint16(5679), + 4409: uint16(17421), + 4410: uint16(17425), + 4411: uint16(5706), + 4412: uint16(17420), + 4413: uint16(17429), + 4414: uint16(6185), + 4415: uint16(11340), + 4416: uint16(3867), + 4417: uint16(17426), + 4418: uint16(5194), + 4419: uint16(17423), + 4420: uint16(17424), + 4421: uint16(9308), + 4422: uint16(17422), + 4423: uint16(17419), + 4424: uint16(4615), + 4425: uint16(8003), + 4426: uint16(5895), + 4427: uint16(17431), + 4428: uint16(17428), + 4429: uint16(17430), + 4430: uint16(17427), + 4431: uint16(5680), + 4432: uint16(8466), + 4433: uint16(17432), + 4434: uint16(8269), + 4435: uint16(17445), + 4436: uint16(17441), + 4437: uint16(17435), + 4438: uint16(17439), + 4439: uint16(7001), + 4440: uint16(3900), + 4441: uint16(17434), + 4442: uint16(17442), + 4443: uint16(17446), + 4444: uint16(6186), + 4445: uint16(11061), + 4446: uint16(9013), + 4447: uint16(17436), + 4448: uint16(17444), + 4449: uint16(17433), + 4450: uint16(8733), + 4451: uint16(17438), + 4452: uint16(3868), + 4453: uint16(11049), + 4454: uint16(17437), + 4455: uint16(5434), + 4456: uint16(10059), + 4457: uint16(8268), + 4458: uint16(11567), + 4459: uint16(7246), + 4460: uint16(17485), + 4461: uint16(17447), + 4462: uint16(8029), + 4463: uint16(17443), + 4464: uint16(17448), + 4465: uint16(17450), + 4466: uint16(9048), + 4467: uint16(17453), + 4468: uint16(17449), + 4469: uint16(10547), + 4470: uint16(4906), + 4471: uint16(11050), + 4472: uint16(3901), + 4473: uint16(17452), + 4474: uint16(11612), + 4475: uint16(17451), + 4476: uint16(4174), + 4477: uint16(9547), + 4478: uint16(17454), + 4479: uint16(17461), + 4480: uint16(17455), + 4481: uint16(17462), + 4482: uint16(17458), + 4483: uint16(9818), + 4484: uint16(6953), + 4485: uint16(17460), + 4486: uint16(17457), + 4487: uint16(17463), + 4488: uint16(17456), + 4489: uint16(7203), + 4490: uint16(10756), + 4491: uint16(7211), + 4492: uint16(17459), + 4493: uint16(17471), + 4494: uint16(17467), + 4495: uint16(17470), + 4496: uint16(17468), + 4497: uint16(17472), + 4498: uint16(17466), + 4499: uint16(17440), + 4500: uint16(7986), + 4501: uint16(10026), + 4502: uint16(17469), + 4503: uint16(17464), + 4504: uint16(8192), + 4505: uint16(5681), + 4506: uint16(7178), + 4507: uint16(7684), + 4508: uint16(8213), + 4509: uint16(17475), + 4510: uint16(17477), + 4511: uint16(17478), + 4512: uint16(17474), + 4513: uint16(17476), + 4514: uint16(17465), + 4515: uint16(17473), + 4516: uint16(17481), + 4517: uint16(17480), + 4518: uint16(10841), + 4519: uint16(5642), + 4520: uint16(17479), + 4521: uint16(17483), + 4522: uint16(17482), + 4523: uint16(17486), + 4524: uint16(17488), + 4525: uint16(6683), + 4526: uint16(17484), + 4527: uint16(17489), + 4528: uint16(17490), + 4529: uint16(17491), + 4530: uint16(17497), + 4531: uint16(9242), + 4532: uint16(17493), + 4533: uint16(17492), + 4534: uint16(17494), + 4535: uint16(17495), + 4536: uint16(17496), + 4537: uint16(17498), + 4538: uint16(17499), + 4539: uint16(4907), + 4540: uint16(17500), + 4541: uint16(17501), + 4542: uint16(17664), + 4543: uint16(17665), + 4544: uint16(17666), + 4545: uint16(17667), + 4546: uint16(17668), + 4547: uint16(17669), + 4548: uint16(17671), + 4549: uint16(17670), + 4550: uint16(17672), + 4551: uint16(17673), + 4552: uint16(17674), + 4553: uint16(17677), + 4554: uint16(17675), + 4555: uint16(17676), + 4556: uint16(6464), + 4557: uint16(5682), + 4558: uint16(8757), + 4559: uint16(10002), + 4560: uint16(7247), + 4561: uint16(9772), + 4562: uint16(10060), + 4563: uint16(17678), + 4564: uint16(14156), + 4565: uint16(17679), + 4566: uint16(17681), + 4567: uint16(11332), + 4568: uint16(17680), + 4569: uint16(17683), + 4570: uint16(17682), + 4571: uint16(11314), + 4572: uint16(17684), + 4573: uint16(10077), + 4574: uint16(17685), + 4575: uint16(17688), + 4576: uint16(17687), + 4577: uint16(17686), + 4578: uint16(17689), + 4579: uint16(5649), + 4580: uint16(8193), + 4581: uint16(5152), + 4582: uint16(17693), + 4583: uint16(17690), + 4584: uint16(17691), + 4585: uint16(17694), + 4586: uint16(17695), + 4587: uint16(17692), + 4588: uint16(4104), + 4589: uint16(4358), + 4590: uint16(17697), + 4591: uint16(17698), + 4592: uint16(17699), + 4593: uint16(11329), + 4594: uint16(7179), + 4595: uint16(17701), + 4596: uint16(17700), + 4597: uint16(7752), + 4598: uint16(17702), + 4599: uint16(17703), + 4600: uint16(17704), + 4601: uint16(4932), + 4602: uint16(4908), + 4603: uint16(17705), + 4604: uint16(17706), + 4605: uint16(10812), + 4606: uint16(11330), + 4607: uint16(11315), + 4608: uint16(11798), + 4609: uint16(6188), + 4610: uint16(17709), + 4611: uint16(6963), + 4612: uint16(17708), + 4613: uint16(17710), + 4614: uint16(6920), + 4615: uint16(8496), + 4616: uint16(17711), + 4617: uint16(6187), + 4618: uint16(11062), + 4619: uint16(17712), + 4620: uint16(17713), + 4621: uint16(17714), + 4622: uint16(17715), + 4623: uint16(17716), + 4624: uint16(6921), + 4625: uint16(11084), + 4626: uint16(17718), + 4627: uint16(8734), + 4628: uint16(17717), + 4629: uint16(17720), + 4630: uint16(17719), + 4631: uint16(17721), + 4632: uint16(7962), + 4633: uint16(17722), + 4634: uint16(17723), + 4635: uint16(10520), + 4636: uint16(17724), + 4637: uint16(8270), + 4638: uint16(17725), + 4639: uint16(17726), + 4640: uint16(11613), + 4641: uint16(17729), + 4642: uint16(17728), + 4643: uint16(17727), + 4644: uint16(8975), + 4645: uint16(17730), + 4646: uint16(7685), + 4647: uint16(17731), + 4648: uint16(17732), + 4649: uint16(11799), + 4650: uint16(17733), + 4651: uint16(17734), + 4652: uint16(17736), + 4653: uint16(17735), + 4654: uint16(9988), + 4655: uint16(9560), + 4656: uint16(11805), + 4657: uint16(9992), + 4658: uint16(17738), + 4659: uint16(7474), + 4660: uint16(10249), + 4661: uint16(17739), + 4662: uint16(17737), + 4663: uint16(4909), + 4664: uint16(5939), + 4665: uint16(6727), + 4666: uint16(10061), + 4667: uint16(5897), + 4668: uint16(10786), + 4669: uint16(17742), + 4670: uint16(17740), + 4671: uint16(6189), + 4672: uint16(6190), + 4673: uint16(3912), + 4674: uint16(6471), + 4675: uint16(9784), + 4676: uint16(3902), + 4677: uint16(17747), + 4678: uint16(8735), + 4679: uint16(9783), + 4680: uint16(8506), + 4681: uint16(17749), + 4682: uint16(17745), + 4683: uint16(17748), + 4684: uint16(17743), + 4685: uint16(17746), + 4686: uint16(10757), + 4687: uint16(5940), + 4688: uint16(3932), + 4689: uint16(17744), + 4690: uint16(17751), + 4691: uint16(17752), + 4692: uint16(9496), + 4693: uint16(5402), + 4694: uint16(17925), + 4695: uint16(9756), + 4696: uint16(6728), + 4697: uint16(5403), + 4698: uint16(7975), + 4699: uint16(11813), + 4700: uint16(11021), + 4701: uint16(17750), + 4702: uint16(7987), + 4703: uint16(5170), + 4704: uint16(17753), + 4705: uint16(17755), + 4706: uint16(17754), + 4707: uint16(17756), + 4708: uint16(8709), + 4709: uint16(9757), + 4710: uint16(8976), + 4711: uint16(17922), + 4712: uint16(17921), + 4713: uint16(17757), + 4714: uint16(7732), + 4715: uint16(10308), + 4716: uint16(17924), + 4717: uint16(17923), + 4718: uint16(6191), + 4719: uint16(11826), + 4720: uint16(17940), + 4721: uint16(17928), + 4722: uint16(17929), + 4723: uint16(6991), + 4724: uint16(17927), + 4725: uint16(6231), + 4726: uint16(17926), + 4727: uint16(17930), + 4728: uint16(8977), + 4729: uint16(10497), + 4730: uint16(8194), + 4731: uint16(8507), + 4732: uint16(17934), + 4733: uint16(17935), + 4734: uint16(17931), + 4735: uint16(17932), + 4736: uint16(17933), + 4737: uint16(6192), + 4738: uint16(17941), + 4739: uint16(17937), + 4740: uint16(10309), + 4741: uint16(10827), + 4742: uint16(10247), + 4743: uint16(17936), + 4744: uint16(17939), + 4745: uint16(17938), + 4746: uint16(10787), + 4747: uint16(17942), + 4748: uint16(17943), + 4749: uint16(8214), + 4750: uint16(17944), + 4751: uint16(17946), + 4752: uint16(17950), + 4753: uint16(17947), + 4754: uint16(17945), + 4755: uint16(9758), + 4756: uint16(17948), + 4757: uint16(17949), + 4758: uint16(4369), + 4759: uint16(17956), + 4760: uint16(17951), + 4761: uint16(17952), + 4762: uint16(17953), + 4763: uint16(8448), + 4764: uint16(17955), + 4765: uint16(17954), + 4766: uint16(17957), + 4767: uint16(17958), + 4768: uint16(17959), + 4769: uint16(7714), + 4770: uint16(4424), + 4771: uint16(17960), + 4772: uint16(11574), + 4773: uint16(6922), + 4774: uint16(7180), + 4775: uint16(6729), + 4776: uint16(8758), + 4777: uint16(17961), + 4778: uint16(17962), + 4779: uint16(4112), + 4780: uint16(17963), + 4781: uint16(17964), + 4782: uint16(17965), + 4783: uint16(17966), + 4784: uint16(17967), + 4785: uint16(5404), + 4786: uint16(14601), + 4787: uint16(17968), + 4788: uint16(8004), + 4789: uint16(17969), + 4790: uint16(6954), + 4791: uint16(17970), + 4792: uint16(12047), + 4793: uint16(17971), + 4794: uint16(10557), + 4795: uint16(4923), + 4796: uint16(8195), + 4797: uint16(7223), + 4798: uint16(10320), + 4799: uint16(7181), + 4800: uint16(17972), + 4801: uint16(6193), + 4802: uint16(17973), + 4803: uint16(10027), + 4804: uint16(17987), + 4805: uint16(17975), + 4806: uint16(8488), + 4807: uint16(9812), + 4808: uint16(5918), + 4809: uint16(17974), + 4810: uint16(8196), + 4811: uint16(17976), + 4812: uint16(9049), + 4813: uint16(17978), + 4814: uint16(17977), + 4815: uint16(17980), + 4816: uint16(17979), + 4817: uint16(17981), + 4818: uint16(17983), + 4819: uint16(17982), + 4820: uint16(4910), + 4821: uint16(17984), + 4822: uint16(17985), + 4823: uint16(17986), + 4824: uint16(6416), + 4825: uint16(11560), + 4826: uint16(17988), + 4827: uint16(7686), + 4828: uint16(4175), + 4829: uint16(17989), + 4830: uint16(17990), + 4831: uint16(17991), + 4832: uint16(3921), + 4833: uint16(17992), + 4834: uint16(17993), + 4835: uint16(10310), + 4836: uint16(6950), + 4837: uint16(17995), + 4838: uint16(4616), + 4839: uint16(3857), + 4840: uint16(17994), + 4841: uint16(17997), + 4842: uint16(9773), + 4843: uint16(7715), + 4844: uint16(4405), + 4845: uint16(10758), + 4846: uint16(5692), + 4847: uint16(5435), + 4848: uint16(17996), + 4849: uint16(4425), + 4850: uint16(4866), + 4851: uint16(4176), + 4852: uint16(18001), + 4853: uint16(11593), + 4854: uint16(8508), + 4855: uint16(10275), + 4856: uint16(18013), + 4857: uint16(4406), + 4858: uint16(18011), + 4859: uint16(18009), + 4860: uint16(18000), + 4861: uint16(17998), + 4862: uint16(17999), + 4863: uint16(6978), + 4864: uint16(5451), + 4865: uint16(8790), + 4866: uint16(9520), + 4867: uint16(4144), + 4868: uint16(18003), + 4869: uint16(18002), + 4870: uint16(18008), + 4871: uint16(18004), + 4872: uint16(18007), + 4873: uint16(11055), + 4874: uint16(18006), + 4875: uint16(4407), + 4876: uint16(4700), + 4877: uint16(18010), + 4878: uint16(18012), + 4879: uint16(5683), + 4880: uint16(18178), + 4881: uint16(18187), + 4882: uint16(18188), + 4883: uint16(3850), + 4884: uint16(18195), + 4885: uint16(3920), + 4886: uint16(18186), + 4887: uint16(18185), + 4888: uint16(18180), + 4889: uint16(18179), + 4890: uint16(18177), + 4891: uint16(18176), + 4892: uint16(8770), + 4893: uint16(8538), + 4894: uint16(18182), + 4895: uint16(18181), + 4896: uint16(18184), + 4897: uint16(8271), + 4898: uint16(5684), + 4899: uint16(4128), + 4900: uint16(18183), + 4901: uint16(6194), + 4902: uint16(8272), + 4903: uint16(18201), + 4904: uint16(18202), + 4905: uint16(4408), + 4906: uint16(4365), + 4907: uint16(18199), + 4908: uint16(18189), + 4909: uint16(18197), + 4910: uint16(18204), + 4911: uint16(18198), + 4912: uint16(18196), + 4913: uint16(18005), + 4914: uint16(18194), + 4915: uint16(18190), + 4916: uint16(4911), + 4917: uint16(18192), + 4918: uint16(18203), + 4919: uint16(18193), + 4920: uint16(18205), + 4921: uint16(18191), + 4922: uint16(9819), + 4923: uint16(11336), + 4924: uint16(18200), + 4925: uint16(18222), + 4926: uint16(18214), + 4927: uint16(7770), + 4928: uint16(5157), + 4929: uint16(5436), + 4930: uint16(18209), + 4931: uint16(4410), + 4932: uint16(7475), + 4933: uint16(18212), + 4934: uint16(6457), + 4935: uint16(9264), + 4936: uint16(18217), + 4937: uint16(10573), + 4938: uint16(18208), + 4939: uint16(4409), + 4940: uint16(5941), + 4941: uint16(10248), + 4942: uint16(18218), + 4943: uint16(18206), + 4944: uint16(18215), + 4945: uint16(18225), + 4946: uint16(18210), + 4947: uint16(18211), + 4948: uint16(9497), + 4949: uint16(18216), + 4950: uint16(18213), + 4951: uint16(10759), + 4952: uint16(18219), + 4953: uint16(3903), + 4954: uint16(18207), + 4955: uint16(18221), + 4956: uint16(18220), + 4957: uint16(9802), + 4958: uint16(18227), + 4959: uint16(18238), + 4960: uint16(4701), + 4961: uint16(18241), + 4962: uint16(18223), + 4963: uint16(18228), + 4964: uint16(11341), + 4965: uint16(18237), + 4966: uint16(11316), + 4967: uint16(11529), + 4968: uint16(8791), + 4969: uint16(4682), + 4970: uint16(10321), + 4971: uint16(18243), + 4972: uint16(9472), + 4973: uint16(3856), + 4974: uint16(18236), + 4975: uint16(18232), + 4976: uint16(8273), + 4977: uint16(18226), + 4978: uint16(18234), + 4979: uint16(18239), + 4980: uint16(9739), + 4981: uint16(3849), + 4982: uint16(18231), + 4983: uint16(18240), + 4984: uint16(10327), + 4985: uint16(18235), + 4986: uint16(18230), + 4987: uint16(7476), + 4988: uint16(7182), + 4989: uint16(6923), + 4990: uint16(11063), + 4991: uint16(10278), + 4992: uint16(18246), + 4993: uint16(18255), + 4994: uint16(18233), + 4995: uint16(4694), + 4996: uint16(7511), + 4997: uint16(18244), + 4998: uint16(18249), + 4999: uint16(8274), + 5000: uint16(18245), + 5001: uint16(18252), + 5002: uint16(8766), + 5003: uint16(18253), + 5004: uint16(11317), + 5005: uint16(18242), + 5006: uint16(4631), + 5007: uint16(18248), + 5008: uint16(18251), + 5009: uint16(11019), + 5010: uint16(18254), + 5011: uint16(18247), + 5012: uint16(18250), + 5013: uint16(10760), + 5014: uint16(11776), + 5015: uint16(18258), + 5016: uint16(18265), + 5017: uint16(18257), + 5018: uint16(6946), + 5019: uint16(18224), + 5020: uint16(10541), + 5021: uint16(11009), + 5022: uint16(18264), + 5023: uint16(18263), + 5024: uint16(18259), + 5025: uint16(18260), + 5026: uint16(4117), + 5027: uint16(18262), + 5028: uint16(18256), + 5029: uint16(9012), + 5030: uint16(18261), + 5031: uint16(3933), + 5032: uint16(8449), + 5033: uint16(10530), + 5034: uint16(18266), + 5035: uint16(18432), + 5036: uint16(10040), + 5037: uint16(18269), + 5038: uint16(7477), + 5039: uint16(6952), + 5040: uint16(18434), + 5041: uint16(5405), + 5042: uint16(18435), + 5043: uint16(10328), + 5044: uint16(18268), + 5045: uint16(18229), + 5046: uint16(18267), + 5047: uint16(11822), + 5048: uint16(9473), + 5049: uint16(10322), + 5050: uint16(18442), + 5051: uint16(18448), + 5052: uint16(18449), + 5053: uint16(18436), + 5054: uint16(9813), + 5055: uint16(18446), + 5056: uint16(18438), + 5057: uint16(18440), + 5058: uint16(18450), + 5059: uint16(18439), + 5060: uint16(18443), + 5061: uint16(4177), + 5062: uint16(9540), + 5063: uint16(18444), + 5064: uint16(18447), + 5065: uint16(18437), + 5066: uint16(8197), + 5067: uint16(18441), + 5068: uint16(6662), + 5069: uint16(7716), + 5070: uint16(5647), + 5071: uint16(11091), + 5072: uint16(11096), + 5073: uint16(7249), + 5074: uint16(18454), + 5075: uint16(18452), + 5076: uint16(11821), + 5077: uint16(18451), + 5078: uint16(11348), + 5079: uint16(18453), + 5080: uint16(18455), + 5081: uint16(18456), + 5082: uint16(18459), + 5083: uint16(18457), + 5084: uint16(9474), + 5085: uint16(18458), + 5086: uint16(10028), + 5087: uint16(18445), + 5088: uint16(7250), + 5089: uint16(18460), + 5090: uint16(18465), + 5091: uint16(8275), + 5092: uint16(18464), + 5093: uint16(18433), + 5094: uint16(18466), + 5095: uint16(8232), + 5096: uint16(18461), + 5097: uint16(18463), + 5098: uint16(18462), + 5099: uint16(15376), + 5100: uint16(15361), + 5101: uint16(18468), + 5102: uint16(18467), + 5103: uint16(11349), + 5104: uint16(16667), + 5105: uint16(18469), + 5106: uint16(18470), + 5107: uint16(18471), + 5108: uint16(5942), + 5109: uint16(5171), + 5110: uint16(18473), + 5111: uint16(12348), + 5112: uint16(5204), + 5113: uint16(11545), + 5114: uint16(5458), + 5115: uint16(18474), + 5116: uint16(18475), + 5117: uint16(8781), + 5118: uint16(18476), + 5119: uint16(9561), + 5120: uint16(3865), + 5121: uint16(4418), + 5122: uint16(18481), + 5123: uint16(18482), + 5124: uint16(18477), + 5125: uint16(6684), + 5126: uint16(18478), + 5127: uint16(9761), + 5128: uint16(18479), + 5129: uint16(18480), + 5130: uint16(18490), + 5131: uint16(18484), + 5132: uint16(18487), + 5133: uint16(18483), + 5134: uint16(18485), + 5135: uint16(18486), + 5136: uint16(6967), + 5137: uint16(18488), + 5138: uint16(8736), + 5139: uint16(5685), + 5140: uint16(4641), + 5141: uint16(18491), + 5142: uint16(4638), + 5143: uint16(18496), + 5144: uint16(18492), + 5145: uint16(18495), + 5146: uint16(10009), + 5147: uint16(18493), + 5148: uint16(18494), + 5149: uint16(10279), + 5150: uint16(10041), + 5151: uint16(18497), + 5152: uint16(8540), + 5153: uint16(18507), + 5154: uint16(18503), + 5155: uint16(4426), + 5156: uint16(18501), + 5157: uint16(10761), + 5158: uint16(18502), + 5159: uint16(18499), + 5160: uint16(18500), + 5161: uint16(18505), + 5162: uint16(18508), + 5163: uint16(18506), + 5164: uint16(18504), + 5165: uint16(18498), + 5166: uint16(8759), + 5167: uint16(18515), + 5168: uint16(11017), + 5169: uint16(18513), + 5170: uint16(18514), + 5171: uint16(18509), + 5172: uint16(18511), + 5173: uint16(18512), + 5174: uint16(18510), + 5175: uint16(8005), + 5176: uint16(11800), + 5177: uint16(18519), + 5178: uint16(18520), + 5179: uint16(18688), + 5180: uint16(7689), + 5181: uint16(18522), + 5182: uint16(18525), + 5183: uint16(18517), + 5184: uint16(18516), + 5185: uint16(18689), + 5186: uint16(4411), + 5187: uint16(18523), + 5188: uint16(18690), + 5189: uint16(18524), + 5190: uint16(18521), + 5191: uint16(8978), + 5192: uint16(18518), + 5193: uint16(9799), + 5194: uint16(18694), + 5195: uint16(11290), + 5196: uint16(18693), + 5197: uint16(18692), + 5198: uint16(18701), + 5199: uint16(18695), + 5200: uint16(18703), + 5201: uint16(11333), + 5202: uint16(18706), + 5203: uint16(18697), + 5204: uint16(18698), + 5205: uint16(18702), + 5206: uint16(18705), + 5207: uint16(18704), + 5208: uint16(18696), + 5209: uint16(18699), + 5210: uint16(18716), + 5211: uint16(18709), + 5212: uint16(18707), + 5213: uint16(18708), + 5214: uint16(18713), + 5215: uint16(18714), + 5216: uint16(4617), + 5217: uint16(5153), + 5218: uint16(18712), + 5219: uint16(18691), + 5220: uint16(18711), + 5221: uint16(18715), + 5222: uint16(18710), + 5223: uint16(18717), + 5224: uint16(18719), + 5225: uint16(18718), + 5226: uint16(18721), + 5227: uint16(18720), + 5228: uint16(18489), + 5229: uint16(18725), + 5230: uint16(18722), + 5231: uint16(18723), + 5232: uint16(18724), + 5233: uint16(18726), + 5234: uint16(5707), + 5235: uint16(18728), + 5236: uint16(18727), + 5237: uint16(7183), + 5238: uint16(6195), + 5239: uint16(15622), + 5240: uint16(18729), + 5241: uint16(7216), + 5242: uint16(4632), + 5243: uint16(18730), + 5244: uint16(4145), + 5245: uint16(7478), + 5246: uint16(18731), + 5247: uint16(6196), + 5248: uint16(18732), + 5249: uint16(3904), + 5250: uint16(10268), + 5251: uint16(18733), + 5252: uint16(7753), + 5253: uint16(18740), + 5254: uint16(18737), + 5255: uint16(8782), + 5256: uint16(18738), + 5257: uint16(18735), + 5258: uint16(5437), + 5259: uint16(18734), + 5260: uint16(18741), + 5261: uint16(5653), + 5262: uint16(8509), + 5263: uint16(18747), + 5264: uint16(18743), + 5265: uint16(8468), + 5266: uint16(18742), + 5267: uint16(18745), + 5268: uint16(18736), + 5269: uint16(18746), + 5270: uint16(18748), + 5271: uint16(10062), + 5272: uint16(18744), + 5273: uint16(18749), + 5274: uint16(18751), + 5275: uint16(5938), + 5276: uint16(18739), + 5277: uint16(3872), + 5278: uint16(18750), + 5279: uint16(6458), + 5280: uint16(11605), + 5281: uint16(18752), + 5282: uint16(18753), + 5283: uint16(8276), + 5284: uint16(11521), + 5285: uint16(18754), + 5286: uint16(11284), + 5287: uint16(18755), + 5288: uint16(18756), + 5289: uint16(10563), + 5290: uint16(18757), + 5291: uint16(6431), + 5292: uint16(11522), + 5293: uint16(18762), + 5294: uint16(18763), + 5295: uint16(7479), + 5296: uint16(18761), + 5297: uint16(11334), + 5298: uint16(18758), + 5299: uint16(18760), + 5300: uint16(7964), + 5301: uint16(7773), + 5302: uint16(18759), + 5303: uint16(18764), + 5304: uint16(10498), + 5305: uint16(18766), + 5306: uint16(18765), + 5307: uint16(4683), + 5308: uint16(10762), + 5309: uint16(18767), + 5310: uint16(18779), + 5311: uint16(18769), + 5312: uint16(18770), + 5313: uint16(18771), + 5314: uint16(18772), + 5315: uint16(18776), + 5316: uint16(18777), + 5317: uint16(18775), + 5318: uint16(18773), + 5319: uint16(18768), + 5320: uint16(18774), + 5321: uint16(18778), + 5322: uint16(20246), + 5323: uint16(4359), + 5324: uint16(18781), + 5325: uint16(5438), + 5326: uint16(18780), + 5327: uint16(18945), + 5328: uint16(18944), + 5329: uint16(18947), + 5330: uint16(18946), + 5331: uint16(18948), + 5332: uint16(7184), + 5333: uint16(18949), + 5334: uint16(18950), + 5335: uint16(18951), + 5336: uint16(7965), + 5337: uint16(11318), + 5338: uint16(18952), + 5339: uint16(10499), + 5340: uint16(9765), + 5341: uint16(18953), + 5342: uint16(18954), + 5343: uint16(5898), + 5344: uint16(5131), + 5345: uint16(18955), + 5346: uint16(6730), + 5347: uint16(9760), + 5348: uint16(18956), + 5349: uint16(4655), + 5350: uint16(18957), + 5351: uint16(18959), + 5352: uint16(11350), + 5353: uint16(18958), + 5354: uint16(7717), + 5355: uint16(18960), + 5356: uint16(18961), + 5357: uint16(18962), + 5358: uint16(4912), + 5359: uint16(18963), + 5360: uint16(18964), + 5361: uint16(18965), + 5362: uint16(18966), + 5363: uint16(4656), + 5364: uint16(18967), + 5365: uint16(18968), + 5366: uint16(18969), + 5367: uint16(4433), + 5368: uint16(7687), + 5369: uint16(18970), + 5370: uint16(18971), + 5371: uint16(18972), + 5372: uint16(5919), + 5373: uint16(9050), + 5374: uint16(18973), + 5375: uint16(5686), + 5376: uint16(7733), + 5377: uint16(18976), + 5378: uint16(9475), + 5379: uint16(18975), + 5380: uint16(5648), + 5381: uint16(18974), + 5382: uint16(8534), + 5383: uint16(5132), + 5384: uint16(18977), + 5385: uint16(18978), + 5386: uint16(7480), + 5387: uint16(5708), + 5388: uint16(18979), + 5389: uint16(10763), + 5390: uint16(7998), + 5391: uint16(5205), + 5392: uint16(11092), + 5393: uint16(8233), + 5394: uint16(18980), + 5395: uint16(7718), + 5396: uint16(8783), + 5397: uint16(7481), + 5398: uint16(18981), + 5399: uint16(18984), + 5400: uint16(18985), + 5401: uint16(6429), + 5402: uint16(8481), + 5403: uint16(18983), + 5404: uint16(7482), + 5405: uint16(10269), + 5406: uint16(18982), + 5407: uint16(6731), + 5408: uint16(4146), + 5409: uint16(18989), + 5410: uint16(5687), + 5411: uint16(6733), + 5412: uint16(6732), + 5413: uint16(11820), + 5414: uint16(18988), + 5415: uint16(18987), + 5416: uint16(8198), + 5417: uint16(5164), + 5418: uint16(11810), + 5419: uint16(4633), + 5420: uint16(7483), + 5421: uint16(18986), + 5422: uint16(18991), + 5423: uint16(18992), + 5424: uint16(18990), + 5425: uint16(5943), + 5426: uint16(11295), + 5427: uint16(6734), + 5428: uint16(9734), + 5429: uint16(18995), + 5430: uint16(7967), + 5431: uint16(8737), + 5432: uint16(11285), + 5433: uint16(18998), + 5434: uint16(5963), + 5435: uint16(7966), + 5436: uint16(18994), + 5437: uint16(18999), + 5438: uint16(5964), + 5439: uint16(18996), + 5440: uint16(18997), + 5441: uint16(18993), + 5442: uint16(8001), + 5443: uint16(9512), + 5444: uint16(8718), + 5445: uint16(4412), + 5446: uint16(10063), + 5447: uint16(5154), + 5448: uint16(8979), + 5449: uint16(19002), + 5450: uint16(19000), + 5451: uint16(8747), + 5452: uint16(7968), + 5453: uint16(4913), + 5454: uint16(19001), + 5455: uint16(7738), + 5456: uint16(11561), + 5457: uint16(11807), + 5458: uint16(19003), + 5459: uint16(19014), + 5460: uint16(8980), + 5461: uint16(19013), + 5462: uint16(19010), + 5463: uint16(19018), + 5464: uint16(19011), + 5465: uint16(19007), + 5466: uint16(9051), + 5467: uint16(19006), + 5468: uint16(19004), + 5469: uint16(11264), + 5470: uint16(6735), + 5471: uint16(19008), + 5472: uint16(19005), + 5473: uint16(19012), + 5474: uint16(7251), + 5475: uint16(5920), + 5476: uint16(8537), + 5477: uint16(10788), + 5478: uint16(4153), + 5479: uint16(3905), + 5480: uint16(9476), + 5481: uint16(19016), + 5482: uint16(19015), + 5483: uint16(9541), + 5484: uint16(19020), + 5485: uint16(19009), + 5486: uint16(19019), + 5487: uint16(19021), + 5488: uint16(5899), + 5489: uint16(19017), + 5490: uint16(6197), + 5491: uint16(6964), + 5492: uint16(19022), + 5493: uint16(11319), + 5494: uint16(19025), + 5495: uint16(19028), + 5496: uint16(19026), + 5497: uint16(10260), + 5498: uint16(19023), + 5499: uint16(5439), + 5500: uint16(19027), + 5501: uint16(19029), + 5502: uint16(19033), + 5503: uint16(19030), + 5504: uint16(19032), + 5505: uint16(19031), + 5506: uint16(19034), + 5507: uint16(6928), + 5508: uint16(19036), + 5509: uint16(19035), + 5510: uint16(10311), + 5511: uint16(19200), + 5512: uint16(5688), + 5513: uint16(19037), + 5514: uint16(19201), + 5515: uint16(19202), + 5516: uint16(5155), + 5517: uint16(17696), + 5518: uint16(7512), + 5519: uint16(19203), + 5520: uint16(5965), + 5521: uint16(19204), + 5522: uint16(19205), + 5523: uint16(6685), + 5524: uint16(14637), + 5525: uint16(19206), + 5526: uint16(19207), + 5527: uint16(7185), + 5528: uint16(19208), + 5529: uint16(19209), + 5530: uint16(19210), + 5531: uint16(19211), + 5532: uint16(19212), + 5533: uint16(8714), + 5534: uint16(19213), + 5535: uint16(19215), + 5536: uint16(19214), + 5537: uint16(9477), + 5538: uint16(19216), + 5539: uint16(10764), + 5540: uint16(19217), + 5541: uint16(19218), + 5542: uint16(19219), + 5543: uint16(19220), + 5544: uint16(9529), + 5545: uint16(7484), + 5546: uint16(19221), + 5547: uint16(6218), + 5548: uint16(12045), + 5549: uint16(19222), + 5550: uint16(19223), + 5551: uint16(10270), + 5552: uint16(19224), + 5553: uint16(19232), + 5554: uint16(19225), + 5555: uint16(19227), + 5556: uint16(19226), + 5557: uint16(19228), + 5558: uint16(10789), + 5559: uint16(19229), + 5560: uint16(19230), + 5561: uint16(19231), + 5562: uint16(19233), + 5563: uint16(4620), + 5564: uint16(9030), + 5565: uint16(10312), + 5566: uint16(6465), + 5567: uint16(6198), + 5568: uint16(10286), + 5569: uint16(4414), + 5570: uint16(10029), + 5571: uint16(19236), + 5572: uint16(4914), + 5573: uint16(7988), + 5574: uint16(19235), + 5575: uint16(19240), + 5576: uint16(8792), + 5577: uint16(11074), + 5578: uint16(19238), + 5579: uint16(19239), + 5580: uint16(5133), + 5581: uint16(19241), + 5582: uint16(9794), + 5583: uint16(8510), + 5584: uint16(10064), + 5585: uint16(9244), + 5586: uint16(19237), + 5587: uint16(10790), + 5588: uint16(4427), + 5589: uint16(19243), + 5590: uint16(11783), + 5591: uint16(8993), + 5592: uint16(11812), + 5593: uint16(6736), + 5594: uint16(19242), + 5595: uint16(8464), + 5596: uint16(19259), + 5597: uint16(8199), + 5598: uint16(9559), + 5599: uint16(10287), + 5600: uint16(19246), + 5601: uint16(6686), + 5602: uint16(6737), + 5603: uint16(7485), + 5604: uint16(9796), + 5605: uint16(5900), + 5606: uint16(19245), + 5607: uint16(19244), + 5608: uint16(10313), + 5609: uint16(6944), + 5610: uint16(9265), + 5611: uint16(19248), + 5612: uint16(19249), + 5613: uint16(6199), + 5614: uint16(19247), + 5615: uint16(19250), + 5616: uint16(19251), + 5617: uint16(19253), + 5618: uint16(8450), + 5619: uint16(19252), + 5620: uint16(4933), + 5621: uint16(19255), + 5622: uint16(19254), + 5623: uint16(19256), + 5624: uint16(19258), + 5625: uint16(19260), + 5626: uint16(19261), + 5627: uint16(7989), + 5628: uint16(6958), + 5629: uint16(19262), + 5630: uint16(4657), + 5631: uint16(19263), + 5632: uint16(8277), + 5633: uint16(19264), + 5634: uint16(19265), + 5635: uint16(10314), + 5636: uint16(5134), + 5637: uint16(19266), + 5638: uint16(8981), + 5639: uint16(4154), + 5640: uint16(19267), + 5641: uint16(6992), + 5642: uint16(7765), + 5643: uint16(8460), + 5644: uint16(19270), + 5645: uint16(19269), + 5646: uint16(19268), + 5647: uint16(19276), + 5648: uint16(19274), + 5649: uint16(19271), + 5650: uint16(19273), + 5651: uint16(19272), + 5652: uint16(19275), + 5653: uint16(5206), + 5654: uint16(19279), + 5655: uint16(7990), + 5656: uint16(19280), + 5657: uint16(5944), + 5658: uint16(19277), + 5659: uint16(19278), + 5660: uint16(11784), + 5661: uint16(8982), + 5662: uint16(8200), + 5663: uint16(19281), + 5664: uint16(19284), + 5665: uint16(19282), + 5666: uint16(19283), + 5667: uint16(11320), + 5668: uint16(9478), + 5669: uint16(19287), + 5670: uint16(19285), + 5671: uint16(19286), + 5672: uint16(19288), + 5673: uint16(19464), + 5674: uint16(19291), + 5675: uint16(19292), + 5676: uint16(19290), + 5677: uint16(19289), + 5678: uint16(9052), + 5679: uint16(19456), + 5680: uint16(19460), + 5681: uint16(19457), + 5682: uint16(19293), + 5683: uint16(19458), + 5684: uint16(19459), + 5685: uint16(19466), + 5686: uint16(19461), + 5687: uint16(7991), + 5688: uint16(19463), + 5689: uint16(19465), + 5690: uint16(19462), + 5691: uint16(19468), + 5692: uint16(7186), + 5693: uint16(19467), + 5694: uint16(19469), + 5695: uint16(19470), + 5696: uint16(19473), + 5697: uint16(19472), + 5698: uint16(19471), + 5699: uint16(19475), + 5700: uint16(19474), + 5701: uint16(11093), + 5702: uint16(19477), + 5703: uint16(19476), + 5704: uint16(19478), + 5705: uint16(19479), + 5706: uint16(19481), + 5707: uint16(19480), + 5708: uint16(7719), + 5709: uint16(19482), + 5710: uint16(5452), + 5711: uint16(19483), + 5712: uint16(19485), + 5713: uint16(19486), + 5714: uint16(19487), + 5715: uint16(19484), + 5716: uint16(19488), + 5717: uint16(6965), + 5718: uint16(19489), + 5719: uint16(5135), + 5720: uint16(5650), + 5721: uint16(5901), + 5722: uint16(19490), + 5723: uint16(9551), + 5724: uint16(9245), + 5725: uint16(19491), + 5726: uint16(19494), + 5727: uint16(6931), + 5728: uint16(19493), + 5729: uint16(19492), + 5730: uint16(5689), + 5731: uint16(19495), + 5732: uint16(4658), + 5733: uint16(19497), + 5734: uint16(6459), + 5735: uint16(19496), + 5736: uint16(19505), + 5737: uint16(19499), + 5738: uint16(19501), + 5739: uint16(10564), + 5740: uint16(19498), + 5741: uint16(19500), + 5742: uint16(19504), + 5743: uint16(19502), + 5744: uint16(5136), + 5745: uint16(19503), + 5746: uint16(19506), + 5747: uint16(9785), + 5748: uint16(11575), + 5749: uint16(7187), + 5750: uint16(19507), + 5751: uint16(11265), + 5752: uint16(19509), + 5753: uint16(19508), + 5754: uint16(19512), + 5755: uint16(11296), + 5756: uint16(19511), + 5757: uint16(4684), + 5758: uint16(19510), + 5759: uint16(19515), + 5760: uint16(19514), + 5761: uint16(19513), + 5762: uint16(9233), + 5763: uint16(19516), + 5764: uint16(19517), + 5765: uint16(19518), + 5766: uint16(6219), + 5767: uint16(5636), + 5768: uint16(19519), + 5769: uint16(19520), + 5770: uint16(19521), + 5771: uint16(7720), + 5772: uint16(19522), + 5773: uint16(6924), + 5774: uint16(19523), + 5775: uint16(19524), + 5776: uint16(12544), + 5777: uint16(12381), + 5778: uint16(19525), + 5779: uint16(17487), + 5780: uint16(19526), + 5781: uint16(8707), + 5782: uint16(7690), + 5783: uint16(9759), + 5784: uint16(19527), + 5785: uint16(10548), + 5786: uint16(9011), + 5787: uint16(6237), + 5788: uint16(8712), + 5789: uint16(4105), + 5790: uint16(10839), + 5791: uint16(7734), + 5792: uint16(5693), + 5793: uint16(5440), + 5794: uint16(10549), + 5795: uint16(19528), + 5796: uint16(19530), + 5797: uint16(19529), + 5798: uint16(4415), + 5799: uint16(9557), + 5800: uint16(19531), + 5801: uint16(9814), + 5802: uint16(9234), + 5803: uint16(19532), + 5804: uint16(7217), + 5805: uint16(19534), + 5806: uint16(11041), + 5807: uint16(19549), + 5808: uint16(19536), + 5809: uint16(19537), + 5810: uint16(9000), + 5811: uint16(8511), + 5812: uint16(8278), + 5813: uint16(9479), + 5814: uint16(19535), + 5815: uint16(5172), + 5816: uint16(19544), + 5817: uint16(19541), + 5818: uint16(19716), + 5819: uint16(9480), + 5820: uint16(8767), + 5821: uint16(19538), + 5822: uint16(9053), + 5823: uint16(9266), + 5824: uint16(19539), + 5825: uint16(19543), + 5826: uint16(7743), + 5827: uint16(9798), + 5828: uint16(9003), + 5829: uint16(7969), + 5830: uint16(19542), + 5831: uint16(8461), + 5832: uint16(8451), + 5833: uint16(19540), + 5834: uint16(3848), + 5835: uint16(11777), + 5836: uint16(19545), + 5837: uint16(8512), + 5838: uint16(7188), + 5839: uint16(7721), + 5840: uint16(19547), + 5841: uint16(19546), + 5842: uint16(3918), + 5843: uint16(19548), + 5844: uint16(10254), + 5845: uint16(19718), + 5846: uint16(9530), + 5847: uint16(7754), + 5848: uint16(8760), + 5849: uint16(5463), + 5850: uint16(19717), + 5851: uint16(11286), + 5852: uint16(4126), + 5853: uint16(10550), + 5854: uint16(4416), + 5855: uint16(19712), + 5856: uint16(19713), + 5857: uint16(19714), + 5858: uint16(19715), + 5859: uint16(9498), + 5860: uint16(8706), + 5861: uint16(3906), + 5862: uint16(19719), + 5863: uint16(19720), + 5864: uint16(21250), + 5865: uint16(8476), + 5866: uint16(19721), + 5867: uint16(4178), + 5868: uint16(8235), + 5869: uint16(5902), + 5870: uint16(11321), + 5871: uint16(19722), + 5872: uint16(9227), + 5873: uint16(8279), + 5874: uint16(6966), + 5875: uint16(19723), + 5876: uint16(19726), + 5877: uint16(7236), + 5878: uint16(19724), + 5879: uint16(8202), + 5880: uint16(8201), + 5881: uint16(3907), + 5882: uint16(11562), + 5883: uint16(19728), + 5884: uint16(10065), + 5885: uint16(19730), + 5886: uint16(19729), + 5887: uint16(19727), + 5888: uint16(16963), + 5889: uint16(4915), + 5890: uint16(19533), + 5891: uint16(19732), + 5892: uint16(19731), + 5893: uint16(19733), + 5894: uint16(11287), + 5895: uint16(9536), + 5896: uint16(10765), + 5897: uint16(19734), + 5898: uint16(6968), + 5899: uint16(19735), + 5900: uint16(19736), + 5901: uint16(19737), + 5902: uint16(9216), + 5903: uint16(3913), + 5904: uint16(6200), + 5905: uint16(11801), + 5906: uint16(19741), + 5907: uint16(5651), + 5908: uint16(19738), + 5909: uint16(19739), + 5910: uint16(10323), + 5911: uint16(4659), + 5912: uint16(11288), + 5913: uint16(5406), + 5914: uint16(9267), + 5915: uint16(19742), + 5916: uint16(19743), + 5917: uint16(19744), + 5918: uint16(9217), + 5919: uint16(19746), + 5920: uint16(19745), + 5921: uint16(9522), + 5922: uint16(19747), + 5923: uint16(7189), + 5924: uint16(6975), + 5925: uint16(9786), + 5926: uint16(8784), + 5927: uint16(6993), + 5928: uint16(7755), + 5929: uint16(19748), + 5930: uint16(19749), + 5931: uint16(7740), + 5932: uint16(19750), + 5933: uint16(19751), + 5934: uint16(19752), + 5935: uint16(11342), + 5936: uint16(7190), + 5937: uint16(19754), + 5938: uint16(19753), + 5939: uint16(6201), + 5940: uint16(6226), + 5941: uint16(6687), + 5942: uint16(19757), + 5943: uint16(7237), + 5944: uint16(19756), + 5945: uint16(19755), + 5946: uint16(8520), + 5947: uint16(5966), + 5948: uint16(7970), + 5949: uint16(9999), + 5950: uint16(7192), + 5951: uint16(19758), + 5952: uint16(7486), + 5953: uint16(19761), + 5954: uint16(19759), + 5955: uint16(19760), + 5956: uint16(19763), + 5957: uint16(19762), + 5958: uint16(7513), + 5959: uint16(19764), + 5960: uint16(19765), + 5961: uint16(19766), + 5962: uint16(10031), + 5963: uint16(6450), + 5964: uint16(6976), + 5965: uint16(19767), + 5966: uint16(19768), + 5967: uint16(11523), + 5968: uint16(7204), + 5969: uint16(11085), + 5970: uint16(11563), + 5971: uint16(19769), + 5972: uint16(5441), + 5973: uint16(19770), + 5974: uint16(9218), + 5975: uint16(19773), + 5976: uint16(4695), + 5977: uint16(7722), + 5978: uint16(19771), + 5979: uint16(19772), + 5980: uint16(9023), + 5981: uint16(10804), + 5982: uint16(5467), + 5983: uint16(19775), + 5984: uint16(19776), + 5985: uint16(19774), + 5986: uint16(19778), + 5987: uint16(9534), + 5988: uint16(4642), + 5989: uint16(19782), + 5990: uint16(19779), + 5991: uint16(19781), + 5992: uint16(19777), + 5993: uint16(20014), + 5994: uint16(19780), + 5995: uint16(11594), + 5996: uint16(5945), + 5997: uint16(19790), + 5998: uint16(9235), + 5999: uint16(19785), + 6000: uint16(19788), + 6001: uint16(19786), + 6002: uint16(19791), + 6003: uint16(19792), + 6004: uint16(19784), + 6005: uint16(19797), + 6006: uint16(4179), + 6007: uint16(19783), + 6008: uint16(9996), + 6009: uint16(19787), + 6010: uint16(7487), + 6011: uint16(6202), + 6012: uint16(10791), + 6013: uint16(5443), + 6014: uint16(7205), + 6015: uint16(9499), + 6016: uint16(8204), + 6017: uint16(19795), + 6018: uint16(19789), + 6019: uint16(19794), + 6020: uint16(11042), + 6021: uint16(8983), + 6022: uint16(19796), + 6023: uint16(19793), + 6024: uint16(8203), + 6025: uint16(19800), + 6026: uint16(19799), + 6027: uint16(19798), + 6028: uint16(10766), + 6029: uint16(7258), + 6030: uint16(19801), + 6031: uint16(10558), + 6032: uint16(4147), + 6033: uint16(10277), + 6034: uint16(8785), + 6035: uint16(5207), + 6036: uint16(19803), + 6037: uint16(6204), + 6038: uint16(6667), + 6039: uint16(19802), + 6040: uint16(7756), + 6041: uint16(7757), + 6042: uint16(19968), + 6043: uint16(19970), + 6044: uint16(7514), + 6045: uint16(19969), + 6046: uint16(19971), + 6047: uint16(5426), + 6048: uint16(10276), + 6049: uint16(6977), + 6050: uint16(11778), + 6051: uint16(19805), + 6052: uint16(6487), + 6053: uint16(11806), + 6054: uint16(19973), + 6055: uint16(19972), + 6056: uint16(19974), + 6057: uint16(19804), + 6058: uint16(9544), + 6059: uint16(9268), + 6060: uint16(9014), + 6061: uint16(19979), + 6062: uint16(8738), + 6063: uint16(19975), + 6064: uint16(19976), + 6065: uint16(5644), + 6066: uint16(19978), + 6067: uint16(5903), + 6068: uint16(19977), + 6069: uint16(7488), + 6070: uint16(4696), + 6071: uint16(19983), + 6072: uint16(6430), + 6073: uint16(8280), + 6074: uint16(9001), + 6075: uint16(4634), + 6076: uint16(19981), + 6077: uint16(19982), + 6078: uint16(8994), + 6079: uint16(19980), + 6080: uint16(19984), + 6081: uint16(19990), + 6082: uint16(19993), + 6083: uint16(19992), + 6084: uint16(9228), + 6085: uint16(19985), + 6086: uint16(19986), + 6087: uint16(19989), + 6088: uint16(19991), + 6089: uint16(5407), + 6090: uint16(19994), + 6091: uint16(19988), + 6092: uint16(19987), + 6093: uint16(19998), + 6094: uint16(19999), + 6095: uint16(20000), + 6096: uint16(19997), + 6097: uint16(19996), + 6098: uint16(7489), + 6099: uint16(9481), + 6100: uint16(19995), + 6101: uint16(20004), + 6102: uint16(20002), + 6103: uint16(20003), + 6104: uint16(20001), + 6105: uint16(8535), + 6106: uint16(20005), + 6107: uint16(20006), + 6108: uint16(20008), + 6109: uint16(4916), + 6110: uint16(20007), + 6111: uint16(11097), + 6112: uint16(20019), + 6113: uint16(20009), + 6114: uint16(20012), + 6115: uint16(20010), + 6116: uint16(20011), + 6117: uint16(20013), + 6118: uint16(20015), + 6119: uint16(20016), + 6120: uint16(20017), + 6121: uint16(20020), + 6122: uint16(20018), + 6123: uint16(20021), + 6124: uint16(20023), + 6125: uint16(20022), + 6126: uint16(8984), + 6127: uint16(11078), + 6128: uint16(20024), + 6129: uint16(8205), + 6130: uint16(20025), + 6131: uint16(10531), + 6132: uint16(20026), + 6133: uint16(4618), + 6134: uint16(4123), + 6135: uint16(4918), + 6136: uint16(4917), + 6137: uint16(20027), + 6138: uint16(20028), + 6139: uint16(20029), + 6140: uint16(20030), + 6141: uint16(20031), + 6142: uint16(4919), + 6143: uint16(4660), + 6144: uint16(6205), + 6145: uint16(10005), + 6146: uint16(20033), + 6147: uint16(20032), + 6148: uint16(20034), + 6149: uint16(4155), + 6150: uint16(20037), + 6151: uint16(20036), + 6152: uint16(20035), + 6153: uint16(20038), + 6154: uint16(20041), + 6155: uint16(3878), + 6156: uint16(20039), + 6157: uint16(20043), + 6158: uint16(20042), + 6159: uint16(20045), + 6160: uint16(20044), + 6161: uint16(20046), + 6162: uint16(9485), + 6163: uint16(20047), + 6164: uint16(20048), + 6165: uint16(20050), + 6166: uint16(20049), + 6167: uint16(10315), + 6168: uint16(20051), + 6169: uint16(20052), + 6170: uint16(6468), + 6171: uint16(20053), + 6172: uint16(20054), + 6173: uint16(10792), + 6174: uint16(8234), + 6175: uint16(3843), + 6176: uint16(8490), + 6177: uint16(20055), + 6178: uint16(10316), + 6179: uint16(20058), + 6180: uint16(20056), + 6181: uint16(6206), + 6182: uint16(20057), + 6183: uint16(5921), + 6184: uint16(10532), + 6185: uint16(20060), + 6186: uint16(20224), + 6187: uint16(20061), + 6188: uint16(20225), + 6189: uint16(4096), + 6190: uint16(7735), + 6191: uint16(7259), + 6192: uint16(4920), + 6193: uint16(20226), + 6194: uint16(9797), + 6195: uint16(20228), + 6196: uint16(4097), + 6197: uint16(20227), + 6198: uint16(8995), + 6199: uint16(11564), + 6200: uint16(9482), + 6201: uint16(20059), + 6202: uint16(11525), + 6203: uint16(5904), + 6204: uint16(11322), + 6205: uint16(5464), + 6206: uint16(11539), + 6207: uint16(5639), + 6208: uint16(8513), + 6209: uint16(17920), + 6210: uint16(20229), + 6211: uint16(4619), + 6212: uint16(7758), + 6213: uint16(4661), + 6214: uint16(20231), + 6215: uint16(20232), + 6216: uint16(20230), + 6217: uint16(5699), + 6218: uint16(6460), + 6219: uint16(7490), + 6220: uint16(4098), + 6221: uint16(11576), + 6222: uint16(20234), + 6223: uint16(19725), + 6224: uint16(20233), + 6225: uint16(20237), + 6226: uint16(20235), + 6227: uint16(20236), + 6228: uint16(20238), + 6229: uint16(20239), + 6230: uint16(11595), + 6231: uint16(20240), + 6232: uint16(20241), + 6233: uint16(7976), + 6234: uint16(10010), + 6235: uint16(7772), + 6236: uint16(4934), + 6237: uint16(11289), + 6238: uint16(4428), + 6239: uint16(7191), + 6240: uint16(5946), + 6241: uint16(20244), + 6242: uint16(20243), + 6243: uint16(6738), + 6244: uint16(20245), + 6245: uint16(20242), + 6246: uint16(6663), + 6247: uint16(20249), + 6248: uint16(18700), + 6249: uint16(12597), + 6250: uint16(7766), + 6251: uint16(20247), + 6252: uint16(11524), + 6253: uint16(9552), + 6254: uint16(4106), + 6255: uint16(8002), + 6256: uint16(6933), + 6257: uint16(10518), + 6258: uint16(4127), + 6259: uint16(11596), + 6260: uint16(11338), + 6261: uint16(20250), + 6262: uint16(9252), + 6263: uint16(7002), + 6264: uint16(20251), + 6265: uint16(20252), + 6266: uint16(7723), + 6267: uint16(20253), + 6268: uint16(11597), + 6269: uint16(20248), + 6270: uint16(20255), + 6271: uint16(20257), + 6272: uint16(20256), + 6273: uint16(20254), + 6274: uint16(20258), + 6275: uint16(20259), + 6276: uint16(8281), + 6277: uint16(4417), + 6278: uint16(20260), + 6279: uint16(11031), + 6280: uint16(20261), + 6281: uint16(20262), + 6282: uint16(11785), + 6283: uint16(14864), + 6284: uint16(20263), + 6285: uint16(20264), + 6286: uint16(20265), + 6287: uint16(20269), + 6288: uint16(20266), + 6289: uint16(20267), + 6290: uint16(20268), + 6291: uint16(20270), + 6292: uint16(7971), + 6293: uint16(11094), + 6294: uint16(7972), + 6295: uint16(20271), + 6296: uint16(10066), + 6297: uint16(20272), + 6298: uint16(21042), + 6299: uint16(11051), + 6300: uint16(20273), + 6301: uint16(20274), + 6302: uint16(20275), + 6303: uint16(4662), + 6304: uint16(20277), + 6305: uint16(7736), + 6306: uint16(20278), + 6307: uint16(5635), + 6308: uint16(20279), + 6309: uint16(20283), + 6310: uint16(20281), + 6311: uint16(20282), + 6312: uint16(4690), + 6313: uint16(20280), + 6314: uint16(20284), + 6315: uint16(20285), + 6316: uint16(3879), + 6317: uint16(20286), + 6318: uint16(20287), + 6319: uint16(7491), + 6320: uint16(20288), + 6321: uint16(5158), + 6322: uint16(20291), + 6323: uint16(20290), + 6324: uint16(20289), + 6325: uint16(19024), + 6326: uint16(10555), + 6327: uint16(20292), + 6328: uint16(20293), + 6329: uint16(20294), + 6330: uint16(20295), + 6331: uint16(20296), + 6332: uint16(20297), + 6333: uint16(4921), + 6334: uint16(20298), + 6335: uint16(20299), + 6336: uint16(9730), + 6337: uint16(20301), + 6338: uint16(4378), + 6339: uint16(20304), + 6340: uint16(20303), + 6341: uint16(4099), + 6342: uint16(5408), + 6343: uint16(10534), + 6344: uint16(8985), + 6345: uint16(6401), + 6346: uint16(6207), + 6347: uint16(7238), + 6348: uint16(7739), + 6349: uint16(20306), + 6350: uint16(20305), + 6351: uint16(11297), + 6352: uint16(4935), + 6353: uint16(10033), + 6354: uint16(9531), + 6355: uint16(7771), + 6356: uint16(11565), + 6357: uint16(5690), + 6358: uint16(20309), + 6359: uint16(20308), + 6360: uint16(10794), + 6361: uint16(9483), + 6362: uint16(4143), + 6363: uint16(20310), + 6364: uint16(20307), + 6365: uint16(10288), + 6366: uint16(11337), + 6367: uint16(20311), + 6368: uint16(20312), + 6369: uint16(20314), + 6370: uint16(8521), + 6371: uint16(4666), + 6372: uint16(4667), + 6373: uint16(20313), + 6374: uint16(4936), + 6375: uint16(5905), + 6376: uint16(4937), + 6377: uint16(9246), + 6378: uint16(11583), + 6379: uint16(5947), + 6380: uint16(20315), + 6381: uint16(20316), + 6382: uint16(20317), + 6383: uint16(20480), + 6384: uint16(20482), + 6385: uint16(20481), + 6386: uint16(10326), + 6387: uint16(20483), + 6388: uint16(20484), + 6389: uint16(20485), + 6390: uint16(20486), + 6391: uint16(20488), + 6392: uint16(20487), + 6393: uint16(20489), + 6394: uint16(10067), + 6395: uint16(17707), + 6396: uint16(7688), + 6397: uint16(5137), + 6398: uint16(20490), + 6399: uint16(20491), + 6400: uint16(12555), + 6401: uint16(15386), + 6402: uint16(10034), + 6403: uint16(3930), + 6404: uint16(3866), + 6405: uint16(6739), + 6406: uint16(10767), + 6407: uint16(7517), + 6408: uint16(20492), + 6409: uint16(11070), + 6410: uint16(20493), + 6411: uint16(11323), + 6412: uint16(4129), + 6413: uint16(6688), + 6414: uint16(20494), + 6415: uint16(4429), + 6416: uint16(20495), + 6417: uint16(20496), + 6418: uint16(20498), + 6419: uint16(20499), + 6420: uint16(20501), + 6421: uint16(20497), + 6422: uint16(20500), + 6423: uint16(4922), + 6424: uint16(20502), + 6425: uint16(20503), + 6426: uint16(20504), + 6427: uint16(20505), + 6428: uint16(20506), + 6429: uint16(20508), + 6430: uint16(20507), + 6431: uint16(20510), + 6432: uint16(20513), + 6433: uint16(20509), + 6434: uint16(20511), + 6435: uint16(20512), + 6436: uint16(20514), + 6437: uint16(5409), + 6438: uint16(6994), + 6439: uint16(20515), + 6440: uint16(20516), + 6441: uint16(6208), + 6442: uint16(20517), + 6443: uint16(4637), + 6444: uint16(9774), + 6445: uint16(20518), + 6446: uint16(20519), + 6447: uint16(8761), + 6448: uint16(9546), + 6449: uint16(20520), + 6450: uint16(9820), + 6451: uint16(8491), + 6452: uint16(4151), + 6453: uint16(5453), + 6454: uint16(5454), + 6455: uint16(8786), + 6456: uint16(20525), + 6457: uint16(5455), + 6458: uint16(4430), + 6459: uint16(20524), + 6460: uint16(20522), + 6461: uint16(20523), + 6462: uint16(20521), + 6463: uint16(20535), + 6464: uint16(20526), + 6465: uint16(20527), + 6466: uint16(20528), + 6467: uint16(20529), + 6468: uint16(20531), + 6469: uint16(20530), + 6470: uint16(7224), + 6471: uint16(20532), + 6472: uint16(20534), + 6473: uint16(5138), + 6474: uint16(20533), + 6475: uint16(8282), + 6476: uint16(5906), + 6477: uint16(20536), + 6478: uint16(8492), + 6479: uint16(20537), + 6480: uint16(9484), + 6481: uint16(20538), + 6482: uint16(20543), + 6483: uint16(20541), + 6484: uint16(20540), + 6485: uint16(20542), + 6486: uint16(20539), + 6487: uint16(20545), + 6488: uint16(20544), + 6489: uint16(20547), + 6490: uint16(5410), + 6491: uint16(20546), + 6492: uint16(20548), + 6493: uint16(20549), + 6494: uint16(20551), + 6495: uint16(20550), + 6496: uint16(20552), + 6497: uint16(20554), + 6498: uint16(20553), + 6499: uint16(6235), + 6500: uint16(20555), + 6501: uint16(20556), + 6502: uint16(4635), + 6503: uint16(20557), + 6504: uint16(20558), + 6505: uint16(7760), + 6506: uint16(20559), + 6507: uint16(20560), + 6508: uint16(20561), + 6509: uint16(20562), + 6510: uint16(6209), + 6511: uint16(20563), + 6512: uint16(20564), + 6513: uint16(20565), + 6514: uint16(20566), + 6515: uint16(20567), + 6516: uint16(10000), + 6517: uint16(20569), + 6518: uint16(10245), + 6519: uint16(20570), + 6520: uint16(20568), + 6521: uint16(20572), + 6522: uint16(20571), + 6523: uint16(20573), + 6524: uint16(20736), + 6525: uint16(20737), + 6526: uint16(20738), + 6527: uint16(20739), + 6528: uint16(20740), + 6529: uint16(20741), + 6530: uint16(20742), + 6531: uint16(20743), + 6532: uint16(20744), + 6533: uint16(20745), + 6534: uint16(20746), + 6535: uint16(20747), + 6536: uint16(20748), + 6537: uint16(20749), + 6538: uint16(15380), + 6539: uint16(20750), + 6540: uint16(17239), + 6541: uint16(5139), + 6542: uint16(4608), + 6543: uint16(6417), + 6544: uint16(20752), + 6545: uint16(20751), + 6546: uint16(11012), + 6547: uint16(20754), + 6548: uint16(20755), + 6549: uint16(20753), + 6550: uint16(20756), + 6551: uint16(10817), + 6552: uint16(20757), + 6553: uint16(5210), + 6554: uint16(11780), + 6555: uint16(20758), + 6556: uint16(20760), + 6557: uint16(3869), + 6558: uint16(20761), + 6559: uint16(10506), + 6560: uint16(20759), + 6561: uint16(20762), + 6562: uint16(20763), + 6563: uint16(20764), + 6564: uint16(20765), + 6565: uint16(20766), + 6566: uint16(10829), + 6567: uint16(6668), + 6568: uint16(6489), + 6569: uint16(8206), + 6570: uint16(20767), + 6571: uint16(20770), + 6572: uint16(20768), + 6573: uint16(20771), + 6574: uint16(5968), + 6575: uint16(20769), + 6576: uint16(20772), + 6577: uint16(20773), + 6578: uint16(20774), + 6579: uint16(20778), + 6580: uint16(6665), + 6581: uint16(8515), + 6582: uint16(20779), + 6583: uint16(20776), + 6584: uint16(20775), + 6585: uint16(20777), + 6586: uint16(5694), + 6587: uint16(20783), + 6588: uint16(20782), + 6589: uint16(20781), + 6590: uint16(3858), + 6591: uint16(20793), + 6592: uint16(20789), + 6593: uint16(20790), + 6594: uint16(20786), + 6595: uint16(20792), + 6596: uint16(20788), + 6597: uint16(4673), + 6598: uint16(11819), + 6599: uint16(20791), + 6600: uint16(20787), + 6601: uint16(20785), + 6602: uint16(20784), + 6603: uint16(20795), + 6604: uint16(20798), + 6605: uint16(20797), + 6606: uint16(20796), + 6607: uint16(10280), + 6608: uint16(20794), + 6609: uint16(3922), + 6610: uint16(20799), + 6611: uint16(20801), + 6612: uint16(4686), + 6613: uint16(20780), + 6614: uint16(4118), + 6615: uint16(20803), + 6616: uint16(20802), + 6617: uint16(20800), + 6618: uint16(8716), + 6619: uint16(10831), + 6620: uint16(11577), + 6621: uint16(20804), + 6622: uint16(20805), + 6623: uint16(20806), + 6624: uint16(20807), + 6625: uint16(20808), + 6626: uint16(8986), + 6627: uint16(20809), + 6628: uint16(10006), + 6629: uint16(20814), + 6630: uint16(20810), + 6631: uint16(20811), + 6632: uint16(10768), + 6633: uint16(11043), + 6634: uint16(9519), + 6635: uint16(20815), + 6636: uint16(20816), + 6637: uint16(9501), + 6638: uint16(20813), + 6639: uint16(20812), + 6640: uint16(4361), + 6641: uint16(20824), + 6642: uint16(20823), + 6643: uint16(4180), + 6644: uint16(20821), + 6645: uint16(20820), + 6646: uint16(20818), + 6647: uint16(4698), + 6648: uint16(20817), + 6649: uint16(6929), + 6650: uint16(4360), + 6651: uint16(6210), + 6652: uint16(20827), + 6653: uint16(20826), + 6654: uint16(20825), + 6655: uint16(20822), + 6656: uint16(20828), + 6657: uint16(20829), + 6658: uint16(20996), + 6659: uint16(20995), + 6660: uint16(20997), + 6661: uint16(4108), + 6662: uint16(20992), + 6663: uint16(20993), + 6664: uint16(6227), + 6665: uint16(11032), + 6666: uint16(20994), + 6667: uint16(10769), + 6668: uint16(21002), + 6669: uint16(20998), + 6670: uint16(21003), + 6671: uint16(21000), + 6672: uint16(20999), + 6673: uint16(5691), + 6674: uint16(21004), + 6675: uint16(21005), + 6676: uint16(21006), + 6677: uint16(21001), + 6678: uint16(20819), + 6679: uint16(21007), + 6680: uint16(9024), + 6681: uint16(21011), + 6682: uint16(21012), + 6683: uint16(21010), + 6684: uint16(21009), + 6685: uint16(21015), + 6686: uint16(21008), + 6687: uint16(21013), + 6688: uint16(21014), + 6689: uint16(21017), + 6690: uint16(21016), + 6691: uint16(21019), + 6692: uint16(21020), + 6693: uint16(21021), + 6694: uint16(11816), + 6695: uint16(21018), + 6696: uint16(8522), + 6697: uint16(6476), + 6698: uint16(21022), + 6699: uint16(21023), + 6700: uint16(21024), + 6701: uint16(21025), + 6702: uint16(21026), + 6703: uint16(5907), + 6704: uint16(21027), + 6705: uint16(21028), + 6706: uint16(6926), + 6707: uint16(21029), + 6708: uint16(21030), + 6709: uint16(21031), + 6710: uint16(21032), + 6711: uint16(21035), + 6712: uint16(21033), + 6713: uint16(11803), + 6714: uint16(21034), + 6715: uint16(11598), + 6716: uint16(21036), + 6717: uint16(11578), + 6718: uint16(21037), + 6719: uint16(9821), + 6720: uint16(21038), + 6721: uint16(21040), + 6722: uint16(21041), + 6723: uint16(21039), + 6724: uint16(6220), + 6725: uint16(11052), + 6726: uint16(10818), + 6727: uint16(13654), + 6728: uint16(15423), + 6729: uint16(10842), + 6730: uint16(4362), + 6731: uint16(21043), + 6732: uint16(5167), + 6733: uint16(21044), + 6734: uint16(21045), + 6735: uint16(21046), + 6736: uint16(6228), + 6737: uint16(21047), + 6738: uint16(16179), + 6739: uint16(11066), + 6740: uint16(8514), + 6741: uint16(21048), + 6742: uint16(21050), + 6743: uint16(21049), + 6744: uint16(21051), + 6745: uint16(21052), + 6746: uint16(21053), + 6747: uint16(21054), + 6748: uint16(21055), + 6749: uint16(21056), + 6750: uint16(21057), + 6751: uint16(21058), + 6752: uint16(21059), + 6753: uint16(21060), + 6754: uint16(21061), + 6755: uint16(21062), + 6756: uint16(21063), + 6757: uint16(9219), + 6758: uint16(5948), + 6759: uint16(21065), + 6760: uint16(8236), + 6761: uint16(21066), + 6762: uint16(21067), + 6763: uint16(10240), + 6764: uint16(21068), + 6765: uint16(21069), + 6766: uint16(16918), + 6767: uint16(19257), + 6768: uint16(20300), + 6769: uint16(21070), + 6770: uint16(21071), + 6771: uint16(21073), + 6772: uint16(21074), + 6773: uint16(21075), + 6774: uint16(11599), + 6775: uint16(21072), + 6776: uint16(21076), + 6777: uint16(21077), + 6778: uint16(21079), + 6779: uint16(21078), + 6780: uint16(21081), + 6781: uint16(21082), + 6782: uint16(21080), + 6783: uint16(11541), + 6784: uint16(21083), + 6785: uint16(21084), + 6786: uint16(16947), + 6787: uint16(21085), + 6788: uint16(9), + 6789: uint16(83), + 6790: uint16(79), + 6791: uint16(82), + 6792: uint16(84), + 6793: uint16(41), + 6794: uint16(42), + 6795: uint16(85), + 6796: uint16(59), + 6797: uint16(3), + 6798: uint16(4), + 6799: uint16(30), + 6800: uint16(527), + 6801: uint16(528), + 6802: uint16(529), + 6803: uint16(530), + 6804: uint16(531), + 6805: uint16(532), + 6806: uint16(533), + 6807: uint16(534), + 6808: uint16(535), + 6809: uint16(536), + 6810: uint16(6), + 6811: uint16(7), + 6812: uint16(66), + 6813: uint16(64), + 6814: uint16(67), + 6815: uint16(8), + 6816: uint16(86), + 6817: uint16(544), + 6818: uint16(545), + 6819: uint16(546), + 6820: uint16(547), + 6821: uint16(548), + 6822: uint16(549), + 6823: uint16(550), + 6824: uint16(551), + 6825: uint16(552), + 6826: uint16(553), + 6827: uint16(554), + 6828: uint16(555), + 6829: uint16(556), + 6830: uint16(557), + 6831: uint16(558), + 6832: uint16(559), + 6833: uint16(560), + 6834: uint16(561), + 6835: uint16(562), + 6836: uint16(563), + 6837: uint16(564), + 6838: uint16(565), + 6839: uint16(566), + 6840: uint16(567), + 6841: uint16(568), + 6842: uint16(569), + 6843: uint16(45), + 6844: uint16(46), + 6845: uint16(15), + 6846: uint16(17), + 6847: uint16(13), + 6848: uint16(576), + 6849: uint16(577), + 6850: uint16(578), + 6851: uint16(579), + 6852: uint16(580), + 6853: uint16(581), + 6854: uint16(582), + 6855: uint16(583), + 6856: uint16(584), + 6857: uint16(585), + 6858: uint16(586), + 6859: uint16(587), + 6860: uint16(588), + 6861: uint16(589), + 6862: uint16(590), + 6863: uint16(591), + 6864: uint16(592), + 6865: uint16(593), + 6866: uint16(594), + 6867: uint16(595), + 6868: uint16(596), + 6869: uint16(597), + 6870: uint16(598), + 6871: uint16(599), + 6872: uint16(600), + 6873: uint16(601), + 6874: uint16(47), + 6875: uint16(34), + 6876: uint16(48), + 6877: uint16(16), + 6878: uint16(78), +} + +func _fuzzycmp(tls *TLS, a uintptr, b uintptr) (r int32) { + for { + if !(*(*uint8)(unsafe.Pointer(a)) != 0 && *(*uint8)(unsafe.Pointer(b)) != 0) { + break + } + for *(*uint8)(unsafe.Pointer(a)) != 0 && uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32)-uint32('a') > uint32(26) && uint32(int32(*(*uint8)(unsafe.Pointer(a)))-int32('0')) > uint32(10) { + a++ + } + if uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32) != uint32(*(*uint8)(unsafe.Pointer(b))) { + return int32(1) + } + goto _1 + _1: + ; + a++ + b++ + } + return BoolInt32(int32(*(*uint8)(unsafe.Pointer(a))) != int32(*(*uint8)(unsafe.Pointer(b)))) +} + +func _find_charmap(tls *TLS, name uintptr) (r Tsize_t) { + var s uintptr + _ = s + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + name = uintptr(unsafe.Pointer(&_charmaps)) + } /* "utf8" */ + s = uintptr(unsafe.Pointer(&_charmaps)) + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if !(_fuzzycmp(tls, name, s) != 0) { + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + return uint64(int64(s+uintptr(1)) - t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_charmaps)))) + } + s += uintptr(Xstrlen(tls, s) + uint64(1)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + if int32(*(*uint8)(unsafe.Pointer(s + 1))) > int32(0200) { + s += uintptr(2) + } else { + s += uintptr(uint32(2) + (uint32(64)-uint32(*(*uint8)(unsafe.Pointer(s + 1))))*uint32(5)) + } + } + goto _1 + _1: + } + return uint64(-Int32FromInt32(1)) +} + +type Tstateful_cd = struct { + Fbase_cd Ticonv_t + Fstate uint32 +} + +func _combine_to_from(tls *TLS, t Tsize_t, f Tsize_t) (r Ticonv_t) { + return uintptr(f<> int32(16) +} + +func _extract_to(tls *TLS, cd Ticonv_t) (r Tsize_t) { + return uint64(cd) >> int32(1) & uint64(0x7fff) +} + +func Xiconv_open(tls *TLS, to uintptr, from uintptr) (r Ticonv_t) { + if __ccgo_strace { + trc("tls=%v to=%v from=%v, (%v:)", tls, to, from, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cd Ticonv_t + var f, t, v1, v2 Tsize_t + var scd uintptr + var v3 bool + _, _, _, _, _, _, _ = cd, f, scd, t, v1, v2, v3 + v1 = _find_charmap(tls, to) + t = v1 + if v3 = v1 == uint64(-Int32FromInt32(1)); !v3 { + v2 = _find_charmap(tls, from) + f = v2 + } + if v3 || v2 == uint64(-Int32FromInt32(1)) || int32(_charmaps[t]) >= int32(0330) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + cd = _combine_to_from(tls, t, f) + switch int32(_charmaps[f]) { + case int32(UTF_16): + fallthrough + case int32(UTF_32): + fallthrough + case int32(UCS2): + fallthrough + case int32(ISO2022_JP): + scd = Xmalloc(tls, uint64(16)) + if !(scd != 0) { + return uintptr(-Int32FromInt32(1)) + } + (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd = cd + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + cd = scd + } + return cd +} + +func _get_16(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(1) + return uint32(int32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))<> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(int32(1)-e))) = uint8(c) +} + +func _get_32(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(3) + return (uint32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))+0)<> int32(24)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(1)))) = uint8(c >> int32(16)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(2)))) = uint8(c >> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(3)))) = uint8(c) +} + +/* Adapt as needed */ + +func _legacy_map(tls *TLS, map1 uintptr, c uint32) (r uint32) { + var x, v1 uint32 + _, _ = x, v1 + if c < uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) { + return c + } + x = c - uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) + x = uint32(int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)))))>>(uint32(2)*x%uint32(8)) | int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)+uint32(1)))))<<(uint32(8)-uint32(2)*x%uint32(8))&int32(1023)) + if x < uint32(256) { + v1 = x + } else { + v1 = uint32(_legacy_chars[x-uint32(256)]) + } + return v1 +} + +func _uni_to_jis(tls *TLS, c uint32) (r uint32) { + var b, d, i, j, nel uint32 + _, _, _, _, _ = b, d, i, j, nel + nel = uint32(Uint64FromInt64(13758) / Uint64FromInt64(2)) + b = uint32(0) + for { + i = nel / uint32(2) + j = uint32(_rev_jis[b+i]) + d = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(j/uint32(256))*188 + uintptr(j%uint32(256))*2))) + if d == c { + return j + uint32(0x2121) + } else { + if nel == uint32(1) { + return uint32(0) + } else { + if c < d { + nel /= uint32(2) + } else { + b += i + nel -= nel / uint32(2) + } + } + } + goto _1 + _1: + } + return r +} + +func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v cd=%v in=%v inb=%v out=%v outb=%v, (%v:)", tls, cd, in, inb, out, outb, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var c, d, from, to, v62 uint32 + var err, i, i1, j, j1, v25, v26, v27, v28, v59 int32 + var k, l, tmplen, tmpx, x Tsize_t + var loc Tlocale_t + var map1, ploc, scd, tomap, v100, v101, v102, v103, v104, v54, v55, v57, v58, v60, v61, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 uintptr + var totype, type1 uint8 + var _ /* ptmp at bp+48 */ uintptr + var _ /* st at bp+24 */ Tmbstate_t + var _ /* tmp at bp+40 */ struct { + Fwc [0][2]Twchar_t + Fc [8]uint8 + } + var _ /* tmp at bp+56 */ [4]uint8 + var _ /* wc at bp+32 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, err, from, i, i1, j, j1, k, l, loc, map1, ploc, scd, tmplen, tmpx, to, tomap, totype, type1, x, v100, v101, v102, v103, v104, v25, v26, v27, v28, v54, v55, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 + x = uint64(0) + scd = uintptr(0) + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + scd = cd + cd = (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd + } + to = uint32(_extract_to(tls, cd)) + from = uint32(_extract_from(tls, cd)) + map1 = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(from) + uintptr(1) + tomap = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(to) + uintptr(1) + *(*Tmbstate_t)(unsafe.Pointer(bp + 24)) = Tmbstate_t{} + type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) + totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + return uint64(0) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + for { + if !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + break + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + l = uint64(1) + switch int32(type1) { + case int32(UTF_8): + goto _2 + case int32(US_ASCII): + goto _3 + case int32(WCHAR_T): + goto _4 + case int32(UTF_32LE): + goto _5 + case int32(UTF_32BE): + goto _6 + case int32(UTF_16LE): + goto _7 + case int32(UTF_16BE): + goto _8 + case int32(UCS2LE): + goto _9 + case int32(UCS2BE): + goto _10 + case int32(UTF_16): + goto _11 + case int32(UCS2): + goto _12 + case int32(UTF_32): + goto _13 + case int32(SHIFT_JIS): + goto _14 + case int32(EUC_JP): + goto _15 + case int32(ISO2022_JP): + goto _16 + case int32(GB2312): + goto _17 + case int32(GBK): + goto _18 + case int32(GB18030): + goto _19 + case int32(BIG5): + goto _20 + case int32(EUC_KR): + goto _21 + default: + goto _22 + } + goto _23 + _2: + ; + if c < uint32(128) { + goto _23 + } + l = Xmbrtowc(tls, bp+32, *(*uintptr)(unsafe.Pointer(in)), *(*Tsize_t)(unsafe.Pointer(inb)), bp+24) + if l == uint64(-Int32FromInt32(1)) { + goto ilseq + } + if l == uint64(-Int32FromInt32(2)) { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(bp + 32))) + goto _23 + _3: + ; + if c >= uint32(128) { + goto ilseq + } + goto _23 + _4: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < l { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + if !(0 != 0) { + goto _24 + } + _6: + ; + _5: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = _get_32(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + _24: + ; + if c-uint32(0xd800) < uint32(0x800) || c >= uint32(0x110000) { + goto ilseq + } + goto _23 + _10: + ; + _9: + ; + _8: + ; + _7: + ; + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + c = _get_16(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + if c-Uint32FromInt32(0xdc00) < uint32(0x400) { + goto ilseq + } + if c-Uint32FromInt32(0xd800) < uint32(0x400) { + if uint32(int32(type1)-int32(UCS2BE)) < uint32(2) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + d = _get_16(tls, *(*uintptr)(unsafe.Pointer(in))+UintptrFromInt32(2), int32(type1)) + if d-Uint32FromInt32(0xdc00) >= uint32(0x400) { + goto ilseq + } + c = (c-uint32(0xd7c0))< uint32(127) { + d-- + } + d -= uint32(64) + } else { + if d-uint32(159) <= uint32(Int32FromInt32(252)-Int32FromInt32(159)) { + c++ + d -= uint32(159) + } + } + if c >= uint32(84) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _15: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if c == uint32(0x8e) { + c = d + if c-uint32(0xa1) > uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + goto ilseq + } + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0xa1)) + goto _23 + } + c -= uint32(0xa1) + d -= uint32(0xa1) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _16: + ; + if c >= uint32(128) { + goto ilseq + } + if c == uint32('\033') { + l = uint64(3) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(3) { + goto starved + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if c != uint32('(') && c != uint32('$') { + goto ilseq + } + switch uint32(Int32FromInt32(128)*BoolInt32(c == Uint32FromUint8('$'))) + d { + case uint32('B'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + goto _1 + case uint32('J'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(1) + goto _1 + case uint32('I'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(4) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('@')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(2) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('B')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(3) + goto _1 + } + goto ilseq + } + switch (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate { + case uint32(1): + if c == uint32('\\') { + c = uint32(0xa5) + } + if c == uint32('~') { + c = uint32(0x203e) + } + case uint32(2): + fallthrough + case uint32(3): + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + c -= uint32(0x21) + d -= uint32(0x21) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + case uint32(4): + if c-uint32(0x60) < uint32(0x1f) { + goto ilseq + } + if c-uint32(0x21) < uint32(0x5e) { + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0x21)) + } + break + } + goto _23 + _17: + ; + if c < uint32(128) { + goto _23 + } + if c < uint32(0xa1) { + goto ilseq + } + _18: + ; + if c == uint32(128) { + c = uint32(0x20ac) + goto _23 + } + _19: + ; + if c < uint32(128) { + goto _23 + } + c -= uint32(0x81) + if c >= uint32(126) { + goto ilseq + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d < uint32(0xa1) && int32(type1) == int32(GB2312) { + goto ilseq + } + if d-uint32(0x40) >= uint32(191) || d == uint32(127) { + if d-uint32('0') > uint32(9) || int32(type1) != int32(GB18030) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = (uint32(10)*c + d - uint32('0')) * uint32(1260) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if d-uint32(0x81) > uint32(126) { + goto ilseq + } + c += uint32(10) * (d - uint32(0x81)) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(3)))) + if d-uint32('0') > uint32(9) { + goto ilseq + } + c += d - uint32('0') + c += uint32(128) + d = uint32(0) + for { + if !(d <= c) { + break + } + k = uint64(0) + i = 0 + for { + if !(i < int32(126)) { + break + } + j = 0 + for { + if !(j < int32(190)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(i)*380 + uintptr(j)*2)))-d <= c-d { + k++ + } + goto _31 + _31: + ; + j++ + } + goto _30 + _30: + ; + i++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _29 + _29: + } + goto _23 + } + d -= uint32(0x40) + if d > uint32(63) { + d-- + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(c)*380 + uintptr(d)*2))) + goto _23 + _20: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d-uint32(0x40) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x40)) || d-uint32(0x7f) < uint32(Int32FromInt32(0xa1)-Int32FromInt32(0x7f)) { + goto ilseq + } + d -= uint32(0x40) + if d > uint32(0x3e) { + d -= uint32(0x22) + } + if c-uint32(0xa1) >= uint32(Int32FromInt32(0xfa)-Int32FromInt32(0xa1)) { + if c-uint32(0x87) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x87)) { + goto ilseq + } + if c < uint32(0xa1) { + c -= uint32(0x87) + } else { + c -= uint32(Int32FromInt32(0x87) + (Int32FromInt32(0xfa) - Int32FromInt32(0xa1))) + } + c = uint32(int32(_hkscs[uint32(4867)+(c*uint32(157)+d)/uint32(16)])>>((c*uint32(157)+d)%uint32(16))%int32(2)< *(*Tsize_t)(unsafe.Pointer(outb)) { + goto toobig + } + if tmpx != 0 { + x++ + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+40, tmplen) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(tmplen) + *(*Tsize_t)(unsafe.Pointer(outb)) -= tmplen + goto _1 + } + if !(c != 0) { + goto ilseq + } + goto _23 + } + c -= uint32(0xa1) + c = uint32(int32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_big5)) + uintptr(c)*314 + uintptr(d)*2))) | BoolInt32(c == uint32(0x27) && (d == uint32(0x3a) || d == uint32(0x3c) || d == uint32(0x42)))<= uint32(93) || d >= uint32(94) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0x81)) + d += uint32(0xa1) + if c >= uint32(93) || c >= uint32(Int32FromInt32(0xc6)-Int32FromInt32(0x81)) && d > uint32(0x52) { + goto ilseq + } + if d-uint32('A') < uint32(26) { + d = d - uint32('A') + } else { + if d-uint32('a') < uint32(26) { + d = d - uint32('a') + uint32(26) + } else { + if d-uint32(0x81) < uint32(Int32FromInt32(0xff)-Int32FromInt32(0x81)) { + d = d - uint32(0x81) + uint32(52) + } else { + goto ilseq + } + } + } + if c < uint32(0x20) { + c = uint32(178)*c + d + } else { + c = uint32(Int32FromInt32(178)*Int32FromInt32(0x20)) + uint32(84)*(c-uint32(0x20)) + d + } + c += uint32(0xac00) + d = uint32(0xac00) + for { + if !(d <= c) { + break + } + k = uint64(0) + i1 = 0 + for { + if !(i1 < int32(93)) { + break + } + j1 = 0 + for { + if !(j1 < int32(94)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(i1)*188 + uintptr(j1)*2)))-d <= c-d { + k++ + } + goto _34 + _34: + ; + j1++ + } + goto _33 + _33: + ; + i1++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _32 + _32: + } + goto _23 + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _22: + ; + if !(c != 0) { + goto _23 + } + c = _legacy_map(tls, map1, c) + if !(c != 0) { + goto ilseq + } + _23: + ; + switch int32(totype) { + case int32(WCHAR_T): + goto _35 + case int32(UTF_8): + goto _36 + case int32(US_ASCII): + goto _37 + default: + goto _38 + case int32(SHIFT_JIS): + goto _39 + case int32(EUC_JP): + goto _40 + case int32(ISO2022_JP): + goto _41 + case int32(UCS2): + goto _42 + case int32(UTF_16LE): + goto _43 + case int32(UTF_16BE): + goto _44 + case int32(UTF_16): + goto _45 + case int32(UCS2LE): + goto _46 + case int32(UCS2BE): + goto _47 + case int32(UTF_32): + goto _48 + case int32(UTF_32LE): + goto _49 + case int32(UTF_32BE): + goto _50 + } + goto _51 + _35: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(out)))) = int32(c) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _36: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + k = uint64(Xwctomb(tls, bp+56, int32(c))) + if *(*Tsize_t)(unsafe.Pointer(outb)) < k { + goto toobig + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+56, k) + } else { + k = uint64(Xwctomb(tls, *(*uintptr)(unsafe.Pointer(out)), int32(c))) + } + *(*uintptr)(unsafe.Pointer(out)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(outb)) -= k + goto _51 + _37: + ; + if !(c > uint32(0x7f)) { + goto _52 + } + goto subst + subst: + ; + x++ + c = Uint32FromUint8('*') + _52: + ; + _38: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + if !(c < uint32(256) && c == _legacy_map(tls, tomap, c)) { + goto _53 + } + goto revout + revout: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + v55 = out + v54 = *(*uintptr)(unsafe.Pointer(v55)) + *(*uintptr)(unsafe.Pointer(v55))++ + *(*uint8)(unsafe.Pointer(v54)) = uint8(c) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(1) + goto _51 + _53: + ; + d = c + c = uint32(int32(4) * int32(totype)) + for { + if !(c < uint32(256)) { + break + } + if d == _legacy_map(tls, tomap, c) { + goto revout + } + goto _56 + _56: + ; + c++ + } + goto subst + _39: + ; + if c < uint32(128) { + goto revout + } + if c == uint32(0xa5) { + x++ + c = uint32('\\') + goto revout + } + if c == uint32(0x203e) { + x++ + c = uint32('~') + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0xff61)) + goto revout + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + d = c % uint32(256) + c = c / uint32(256) + v58 = out + v57 = *(*uintptr)(unsafe.Pointer(v58)) + *(*uintptr)(unsafe.Pointer(v58))++ + if c < uint32(95) { + v59 = int32(112) + } else { + v59 = int32(176) + } + *(*uint8)(unsafe.Pointer(v57)) = uint8((c+uint32(1))/uint32(2) + uint32(v59)) + v61 = out + v60 = *(*uintptr)(unsafe.Pointer(v61)) + *(*uintptr)(unsafe.Pointer(v61))++ + if c%uint32(2) != 0 { + v62 = d + uint32(31) + d/uint32(96) + } else { + v62 = d + uint32(126) + } + *(*uint8)(unsafe.Pointer(v60)) = uint8(v62) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _40: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0x0e00) + Int32FromInt32(0x21) - Int32FromInt32(0xff61)) + } else { + c = _uni_to_jis(tls, c) + } + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + v64 = out + v63 = *(*uintptr)(unsafe.Pointer(v64)) + *(*uintptr)(unsafe.Pointer(v64))++ + *(*uint8)(unsafe.Pointer(v63)) = uint8(c/uint32(256) + uint32(0x80)) + v66 = out + v65 = *(*uintptr)(unsafe.Pointer(v66)) + *(*uintptr)(unsafe.Pointer(v66))++ + *(*uint8)(unsafe.Pointer(v65)) = uint8(c%uint32(256) + uint32(0x80)) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _41: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) || c == uint32(0xa5) || c == uint32(0x203e) { + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(7) { + goto toobig + } + v68 = out + v67 = *(*uintptr)(unsafe.Pointer(v68)) + *(*uintptr)(unsafe.Pointer(v68))++ + *(*uint8)(unsafe.Pointer(v67)) = uint8('\033') + v70 = out + v69 = *(*uintptr)(unsafe.Pointer(v70)) + *(*uintptr)(unsafe.Pointer(v70))++ + *(*uint8)(unsafe.Pointer(v69)) = uint8('(') + if c == uint32(0xa5) { + v72 = out + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + *(*uint8)(unsafe.Pointer(v71)) = uint8('J') + v74 = out + v73 = *(*uintptr)(unsafe.Pointer(v74)) + *(*uintptr)(unsafe.Pointer(v74))++ + *(*uint8)(unsafe.Pointer(v73)) = uint8('\\') + } else { + if c == uint32(0x203e) { + v76 = out + v75 = *(*uintptr)(unsafe.Pointer(v76)) + *(*uintptr)(unsafe.Pointer(v76))++ + *(*uint8)(unsafe.Pointer(v75)) = uint8('J') + v78 = out + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + *(*uint8)(unsafe.Pointer(v77)) = uint8('~') + } else { + v80 = out + v79 = *(*uintptr)(unsafe.Pointer(v80)) + *(*uintptr)(unsafe.Pointer(v80))++ + *(*uint8)(unsafe.Pointer(v79)) = uint8('I') + v82 = out + v81 = *(*uintptr)(unsafe.Pointer(v82)) + *(*uintptr)(unsafe.Pointer(v82))++ + *(*uint8)(unsafe.Pointer(v81)) = uint8(c - uint32(0xff61) + uint32(0x21)) + } + } + v84 = out + v83 = *(*uintptr)(unsafe.Pointer(v84)) + *(*uintptr)(unsafe.Pointer(v84))++ + *(*uint8)(unsafe.Pointer(v83)) = uint8('\033') + v86 = out + v85 = *(*uintptr)(unsafe.Pointer(v86)) + *(*uintptr)(unsafe.Pointer(v86))++ + *(*uint8)(unsafe.Pointer(v85)) = uint8('(') + v88 = out + v87 = *(*uintptr)(unsafe.Pointer(v88)) + *(*uintptr)(unsafe.Pointer(v88))++ + *(*uint8)(unsafe.Pointer(v87)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(7) + goto _51 + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(8) { + goto toobig + } + v90 = out + v89 = *(*uintptr)(unsafe.Pointer(v90)) + *(*uintptr)(unsafe.Pointer(v90))++ + *(*uint8)(unsafe.Pointer(v89)) = uint8('\033') + v92 = out + v91 = *(*uintptr)(unsafe.Pointer(v92)) + *(*uintptr)(unsafe.Pointer(v92))++ + *(*uint8)(unsafe.Pointer(v91)) = uint8('$') + v94 = out + v93 = *(*uintptr)(unsafe.Pointer(v94)) + *(*uintptr)(unsafe.Pointer(v94))++ + *(*uint8)(unsafe.Pointer(v93)) = uint8('B') + v96 = out + v95 = *(*uintptr)(unsafe.Pointer(v96)) + *(*uintptr)(unsafe.Pointer(v96))++ + *(*uint8)(unsafe.Pointer(v95)) = uint8(c / uint32(256)) + v98 = out + v97 = *(*uintptr)(unsafe.Pointer(v98)) + *(*uintptr)(unsafe.Pointer(v98))++ + *(*uint8)(unsafe.Pointer(v97)) = uint8(c % uint32(256)) + v100 = out + v99 = *(*uintptr)(unsafe.Pointer(v100)) + *(*uintptr)(unsafe.Pointer(v100))++ + *(*uint8)(unsafe.Pointer(v99)) = uint8('\033') + v102 = out + v101 = *(*uintptr)(unsafe.Pointer(v102)) + *(*uintptr)(unsafe.Pointer(v102))++ + *(*uint8)(unsafe.Pointer(v101)) = uint8('(') + v104 = out + v103 = *(*uintptr)(unsafe.Pointer(v104)) + *(*uintptr)(unsafe.Pointer(v104))++ + *(*uint8)(unsafe.Pointer(v103)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(8) + goto _51 + _42: + ; + totype = uint8(UCS2BE) + _47: + ; + _46: + ; + _45: + ; + _44: + ; + _43: + ; + if c < uint32(0x10000) || uint32(int32(totype)-int32(UCS2BE)) < uint32(2) { + if c >= uint32(0x10000) { + c = uint32(0xFFFD) + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(2) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + c -= uint32(0x10000) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c>>int32(10)|uint32(0xd800), int32(totype)) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out))+UintptrFromInt32(2), c&uint32(0x3ff)|uint32(0xdc00), int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _48: + ; + totype = uint8(UTF_32BE) + _50: + ; + _49: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + _put_32(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _51: + ; + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(in)) += uintptr(l) + *(*Tsize_t)(unsafe.Pointer(inb)) -= l + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x + goto ilseq +ilseq: + ; + err = int32(EILSEQ) + x = uint64(-Int32FromInt32(1)) + goto end + goto toobig +toobig: + ; + err = int32(E2BIG) + x = uint64(-Int32FromInt32(1)) + goto end + goto starved +starved: + ; + err = int32(EINVAL) + x = uint64(-Int32FromInt32(1)) + goto end +end: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x +} + +func Xiconv_close(tls *TLS, cd Ticonv_t) (r int32) { + if __ccgo_strace { + trc("tls=%v cd=%v, (%v:)", tls, cd, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + Xfree(tls, cd) + } + return 0 +} + +var _c_time = [316]uint8{'S', 'u', 'n', 0, 'M', 'o', 'n', 0, 'T', 'u', 'e', 0, 'W', 'e', 'd', 0, 'T', 'h', 'u', 0, 'F', 'r', 'i', 0, 'S', 'a', 't', 0, 'S', 'u', 'n', 'd', 'a', 'y', 0, 'M', 'o', 'n', 'd', 'a', 'y', 0, 'T', 'u', 'e', 's', 'd', 'a', 'y', 0, 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 0, 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 0, 'F', 'r', 'i', 'd', 'a', 'y', 0, 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 0, 'J', 'a', 'n', 0, 'F', 'e', 'b', 0, 'M', 'a', 'r', 0, 'A', 'p', 'r', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 0, 'J', 'u', 'l', 0, 'A', 'u', 'g', 0, 'S', 'e', 'p', 0, 'O', 'c', 't', 0, 'N', 'o', 'v', 0, 'D', 'e', 'c', 0, 'J', 'a', 'n', 'u', 'a', 'r', 'y', 0, 'F', 'e', 'b', 'r', 'u', 'a', 'r', 'y', 0, 'M', 'a', 'r', 'c', 'h', 0, 'A', 'p', 'r', 'i', 'l', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 'e', 0, 'J', 'u', 'l', 'y', 0, 'A', 'u', 'g', 'u', 's', 't', 0, 'S', 'e', 'p', 't', 'e', 'm', 'b', 'e', 'r', 0, 'O', 'c', 't', 'o', 'b', 'e', 'r', 0, 'N', 'o', 'v', 'e', 'm', 'b', 'e', 'r', 0, 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 0, 'A', 'M', 0, 'P', 'M', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S', 0, '%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p', 0, 0, 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S'} + +var _c_messages = [19]uint8{'^', '[', 'y', 'Y', ']', 0, '^', '[', 'n', 'N', ']', 0, 'y', 'e', 's', 0, 'n', 'o'} +var _c_numeric = [3]uint8{'.'} + +func X__nl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cat, idx int32 + var str, v1, v2 uintptr + _, _, _, _, _ = cat, idx, str, v1, v2 + cat = item >> int32(16) + idx = item & int32(65535) + if item == int32(CODESET) { + if *(*uintptr)(unsafe.Pointer(loc)) != 0 { + v1 = __ccgo_ts + 419 + } else { + v1 = __ccgo_ts + 564 + } + return v1 + } + /* _NL_LOCALE_NAME extension */ + if idx == int32(65535) && cat < int32(LC_ALL) { + if *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) != 0 { + v2 = *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) + 16 + } else { + v2 = __ccgo_ts + 570 + } + return v2 + } + switch cat { + case int32(LC_NUMERIC): + if idx > int32(1) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_numeric)) + case int32(LC_TIME): + if idx > int32(0x31) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_time)) + case int32(LC_MONETARY): + if idx > 0 { + return __ccgo_ts + } + str = __ccgo_ts + case int32(LC_MESSAGES): + if idx > int32(3) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_messages)) + default: + return __ccgo_ts + } + for { + if !(idx != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(str)) != 0) { + break + } + goto _4 + _4: + ; + str++ + } + goto _3 + _3: + ; + idx-- + str++ + } + if cat != int32(LC_NUMERIC) && *(*uint8)(unsafe.Pointer(str)) != 0 { + str = X__lctrans(tls, str, *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8))) + } + return str +} + +func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo(tls, item) +} + +func Xnl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, loc) +} + +func X__lctrans_impl(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var trans, v1 uintptr + _, _ = trans, v1 + trans = uintptr(0) + if lm != 0 { + trans = X__mo_lookup(tls, (*t__locale_map)(unsafe.Pointer(lm)).Fmap1, (*t__locale_map)(unsafe.Pointer(lm)).Fmap_size, msg) + } + if trans != 0 { + v1 = trans + } else { + v1 = msg + } + return v1 +} + +var _envvars = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +func X__get_locale(tls *TLS, cat int32, val uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v val=%v, (%v:)", tls, cat, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var builtin int32 + var l, n Tsize_t + var map1, new1, p, path, z, v1, v11, v2, v4, v6 uintptr + var v12, v3, v5, v7 bool + var _ /* buf at bp+0 */ [256]uint8 + var _ /* map_size at bp+256 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = builtin, l, map1, n, new1, p, path, z, v1, v11, v12, v2, v3, v4, v5, v6, v7 + new1 = uintptr(0) + path = uintptr(0) + if !(*(*uint8)(unsafe.Pointer(val)) != 0) { + v1 = Xgetenv(tls, __ccgo_ts+572) + val = v1 + if v3 = v1 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v3 { + v2 = Xgetenv(tls, uintptr(unsafe.Pointer(&_envvars))+uintptr(cat)*12) + val = v2 + } + if v5 = v3 || v2 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v5 { + v4 = Xgetenv(tls, __ccgo_ts+433) + val = v4 + } + if v7 = v5 || v4 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v7 { + v6 = __ccgo_ts + 579 + val = v6 + } + _ = v7 || v6 != 0 + } + /* Limit name length and forbid leading dot or any slashes. */ + n = uint64(0) + for { + if !(n < uint64(LOCALE_NAME_MAX) && *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 && int32(*(*uint8)(unsafe.Pointer(val + uintptr(n)))) != int32('/')) { + break + } + goto _8 + _8: + ; + n++ + } + if int32(*(*uint8)(unsafe.Pointer(val))) == int32('.') || *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 { + val = __ccgo_ts + 579 + } + builtin = BoolInt32(int32(*(*uint8)(unsafe.Pointer(val))) == int32('C') && !(*(*uint8)(unsafe.Pointer(val + 1)) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+579) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+587) != 0)) + if builtin != 0 { + if cat == LC_CTYPE && int32(*(*uint8)(unsafe.Pointer(val + 1))) == int32('.') { + return uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return uintptr(0) + } + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, val, p+16) != 0) { + return p + } + goto _9 + _9: + ; + p = (*t__locale_map)(unsafe.Pointer(p)).Fnext + } + if !(X__libc.Fsecure != 0) { + path = Xgetenv(tls, __ccgo_ts+593) + } + /* FIXME: add a default path? */ + if path != 0 { + for { + if !(*(*uint8)(unsafe.Pointer(path)) != 0) { + break + } + z = X__strchrnul(tls, path, int32(':')) + l = uint64(int64(z) - int64(path)) + if l >= uint64(256)-n-uint64(2) { + goto _10 + } + Xmemcpy(tls, bp, path, l) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l] = uint8('/') + Xmemcpy(tls, bp+uintptr(l)+uintptr(1), val, n) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l+uint64(1)+n] = uint8(0) + map1 = X__map_file(tls, bp, bp+256) + if map1 != 0 { + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp + 256))) + break + } + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = map1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp + 256)) + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + break + } + goto _10 + _10: + ; + path = z + BoolUintptr(!!(*(*uint8)(unsafe.Pointer(z)) != 0)) + } + } + /* If no locale definition was found, make a locale map + * object anyway to store the name, which is kept for the + * sake of being able to do message translations at the + * application level. */ + if v12 = !(new1 != 0); v12 { + v11 = Xmalloc(tls, uint64(48)) + new1 = v11 + } + if v12 && v11 != 0 { + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = X__c_dot_utf8.Fmap1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = X__c_dot_utf8.Fmap_size + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + } + /* For LC_CTYPE, never return a null pointer unless the + * requested name was "C" or "POSIX". */ + if !(new1 != 0) && cat == LC_CTYPE { + new1 = uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return new1 +} + +var _loc_head uintptr + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _posix_lconv = Tlconv{ + Fdecimal_point: __ccgo_ts + 606, + Fthousands_sep: __ccgo_ts, + Fgrouping: __ccgo_ts, + Fint_curr_symbol: __ccgo_ts, + Fcurrency_symbol: __ccgo_ts, + Fmon_decimal_point: __ccgo_ts, + Fmon_thousands_sep: __ccgo_ts, + Fmon_grouping: __ccgo_ts, + Fpositive_sign: __ccgo_ts, + Fnegative_sign: __ccgo_ts, + Fint_frac_digits: uint8(CHAR_MAX), + Ffrac_digits: uint8(CHAR_MAX), + Fp_cs_precedes: uint8(CHAR_MAX), + Fp_sep_by_space: uint8(CHAR_MAX), + Fn_cs_precedes: uint8(CHAR_MAX), + Fn_sep_by_space: uint8(CHAR_MAX), + Fp_sign_posn: uint8(CHAR_MAX), + Fn_sign_posn: uint8(CHAR_MAX), + Fint_p_cs_precedes: uint8(CHAR_MAX), + Fint_p_sep_by_space: uint8(CHAR_MAX), + Fint_n_cs_precedes: uint8(CHAR_MAX), + Fint_n_sep_by_space: uint8(CHAR_MAX), + Fint_p_sign_posn: uint8(CHAR_MAX), + Fint_n_sign_posn: uint8(CHAR_MAX), +} + +func Xlocaleconv(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_posix_lconv)) +} + +var _default_locale_init_done int32 +var _default_locale t__locale_struct +var _default_ctype_locale t__locale_struct + +func X__loc_is_allocated(tls *TLS, loc Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v loc=%v, (%v:)", tls, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(loc != 0 && loc != uintptr(unsafe.Pointer(&X__c_locale)) && loc != uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) && loc != uintptr(unsafe.Pointer(&_default_locale)) && loc != uintptr(unsafe.Pointer(&_default_ctype_locale))) +} + +func _do_newlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i, i1 int32 + var v2, v3 uintptr + var v5 Tlocale_t + var _ /* tmp at bp+0 */ t__locale_struct + _, _, _, _, _ = i, i1, v2, v3, v5 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + if !(mask&(Int32FromInt32(1)< %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + loc = _do_newlocale(tls, mask, name, loc) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return loc +} + +func Xnewlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v mask=%v name=%v loc=%v, (%v:)", tls, mask, name, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__newlocale(tls, mask, name, loc) +} + +/* +grammar: + +Start = Expr ';' +Expr = Or | Or '?' Expr ':' Expr +Or = And | Or '||' And +And = Eq | And '&&' Eq +Eq = Rel | Eq '==' Rel | Eq '!=' Rel +Rel = Add | Rel '<=' Add | Rel '>=' Add | Rel '<' Add | Rel '>' Add +Add = Mul | Add '+' Mul | Add '-' Mul +Mul = Prim | Mul '*' Prim | Mul '/' Prim | Mul '%' Prim +Prim = '(' Expr ')' | '!' Prim | decimal | 'n' + +internals: + +recursive descent expression evaluator with stack depth limit. +for binary operators an operator-precedence parser is used. +eval* functions store the result of the parsed subexpression +and return a pointer to the next non-space character. +*/ + +type Tst = struct { + Fr uint64 + Fn uint64 + Fop int32 +} + +func _skipspace(tls *TLS, s uintptr) (r uintptr) { + var v1, v2 int32 + _, _ = v1, v2 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + return s +} + +func _evalprim(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* e at bp+0 */ uintptr + _ = v1 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _skipspace(tls, s) + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = Xstrtoul(tls, s, bp, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp)) == s || (*Tst)(unsafe.Pointer(st)).Fr == uint64(-Int32FromInt32(1)) { + return __ccgo_ts + } + return _skipspace(tls, *(*uintptr)(unsafe.Pointer(bp))) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('n') { + (*Tst)(unsafe.Pointer(st)).Fr = (*Tst)(unsafe.Pointer(st)).Fn + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(')') { + return __ccgo_ts + } + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('!') { + s = _evalprim(tls, st, s+uintptr(1), d) + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(!((*Tst)(unsafe.Pointer(st)).Fr != 0)) + return s + } + return __ccgo_ts +} + +func _binop(tls *TLS, st uintptr, op int32, left uint64) (r int32) { + var a, b uint64 + _, _ = a, b + a = left + b = (*Tst)(unsafe.Pointer(st)).Fr + switch op { + case 0: + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 || b != 0) + return 0 + case int32(1): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 && b != 0) + return 0 + case int32(2): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a == b) + return 0 + case int32(3): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != b) + return 0 + case int32(4): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a >= b) + return 0 + case int32(5): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a <= b) + return 0 + case int32(6): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a > b) + return 0 + case int32(7): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a < b) + return 0 + case int32(8): + (*Tst)(unsafe.Pointer(st)).Fr = a + b + return 0 + case int32(9): + (*Tst)(unsafe.Pointer(st)).Fr = a - b + return 0 + case int32(10): + (*Tst)(unsafe.Pointer(st)).Fr = a * b + return 0 + case int32(11): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a % b + return 0 + } + return int32(1) + case int32(12): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a / b + return 0 + } + return int32(1) + } + return int32(1) +} + +func _parseop(tls *TLS, st uintptr, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(i < int32(11)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(_opch[i]) { + /* note: >,< are accepted with or without = */ + if i < int32(6) && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(_opch2[i]) { + (*Tst)(unsafe.Pointer(st)).Fop = i + return s + uintptr(2) + } + if i >= int32(4) { + (*Tst)(unsafe.Pointer(st)).Fop = i + int32(2) + return s + uintptr(1) + } + break + } + goto _1 + _1: + ; + i++ + } + (*Tst)(unsafe.Pointer(st)).Fop = int32(13) + return s +} + +var _opch = [11]uint8{'|', '&', '=', '!', '>', '<', '+', '-', '*', '%', '/'} + +var _opch2 = [6]uint8{'|', '&', '=', '=', '=', '='} + +func _evalbinop(tls *TLS, st uintptr, s uintptr, minprec int32, d int32) (r uintptr) { + var left uint64 + var op int32 + _, _ = left, op + d-- + s = _evalprim(tls, st, s, d) + s = _parseop(tls, st, s) + for { + /* + st->r (left hand side value) and st->op are now set, + get the right hand side or back out if op has low prec, + if op was missing then prec[op]==0 + */ + op = (*Tst)(unsafe.Pointer(st)).Fop + if int32(_prec[op]) <= minprec { + return s + } + left = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalbinop(tls, st, s, int32(_prec[op]), d) + if _binop(tls, st, op, left) != 0 { + return __ccgo_ts + } + goto _1 + _1: + } + return r +} + +var _prec = [14]uint8{ + 0: uint8(1), + 1: uint8(2), + 2: uint8(3), + 3: uint8(3), + 4: uint8(4), + 5: uint8(4), + 6: uint8(4), + 7: uint8(4), + 8: uint8(5), + 9: uint8(5), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), +} + +func _evalexpr(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + var a, b, v2 uint64 + var v1 int32 + _, _, _, _ = a, b, v1, v2 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _evalbinop(tls, st, s, 0, d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') { + return s + } + a = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(':') { + return __ccgo_ts + } + b = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if a != 0 { + v2 = b + } else { + v2 = (*Tst)(unsafe.Pointer(st)).Fr + } + (*Tst)(unsafe.Pointer(st)).Fr = v2 + return s +} + +func X__pleval(tls *TLS, s uintptr, n uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uint64 + var _ /* st at bp+0 */ Tst + _ = v1 + (*(*Tst)(unsafe.Pointer(bp))).Fn = n + s = _evalexpr(tls, bp, s, int32(100)) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(';') { + v1 = (*(*Tst)(unsafe.Pointer(bp))).Fr + } else { + v1 = uint64(-Int32FromInt32(1)) + } + return v1 +} + +var _buf1 [144]uint8 + +func Xsetlocale(tls *TLS, cat int32, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v name=%v, (%v:)", tls, cat, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var i, same int32 + var l Tsize_t + var lm, lm1, p, part1, ret, s, z, v3, v4, v5, v6 uintptr + var _ /* part at bp+48 */ [24]uint8 + var _ /* tmp_locale at bp+0 */ t__locale_struct + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, lm, lm1, p, part1, ret, s, same, z, v3, v4, v5, v6 + if uint32(cat) > uint32(LC_ALL) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + /* For LC_ALL, setlocale is required to return a string which + * encodes the current setting for all categories. The format of + * this string is unspecified, and only the following code, which + * performs both the serialization and deserialization, depends + * on the format, so it can easily be changed if needed. */ + if cat == int32(LC_ALL) { + if name != 0 { + *(*[24]uint8)(unsafe.Pointer(bp + 48)) = [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'} + p = name + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + z = X__strchrnul(tls, p, int32(';')) + if int64(z)-int64(p) <= int64(LOCALE_NAME_MAX) { + Xmemcpy(tls, bp+48, p, uint64(int64(z)-int64(p))) + (*(*[24]uint8)(unsafe.Pointer(bp + 48)))[int64(z)-int64(p)] = uint8(0) + if *(*uint8)(unsafe.Pointer(z)) != 0 { + p = z + uintptr(1) + } + } + lm = X__get_locale(tls, i, bp+48) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = lm + goto _1 + _1: + ; + i++ + } + X__libc.Fglobal_locale = *(*t__locale_struct)(unsafe.Pointer(bp)) + } + s = uintptr(unsafe.Pointer(&_buf1)) + same = 0 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + lm1 = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(i)*8)) + if lm1 == *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56)) { + same++ + } + if lm1 != 0 { + v3 = lm1 + 16 + } else { + v3 = __ccgo_ts + 570 + } + part1 = v3 + l = Xstrlen(tls, part1) + Xmemcpy(tls, s, part1, l) + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(';') + s += uintptr(l + uint64(1)) + goto _2 + _2: + ; + i++ + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + if same == int32(LC_ALL) { + v5 = part1 + } else { + v5 = uintptr(unsafe.Pointer(&_buf1)) + } + return v5 + } + if name != 0 { + lm = X__get_locale(tls, cat, name) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) = lm + } else { + lm = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) + } + if lm != 0 { + v6 = lm + 16 + } else { + v6 = __ccgo_ts + 570 + } + ret = v6 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return ret +} + +func X__strcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcmp(tls, l, r) +} + +func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, loc) +} + +func _vstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, ap Tva_list) (r Tssize_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var fill, fw, intl, left, lp, negpar, nogrp, nosym, rp, w int32 + var l Tsize_t + var s0, v12, v5, v6, v8 uintptr + var x float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = fill, fw, intl, l, left, lp, negpar, nogrp, nosym, rp, s0, w, x, v12, v5, v6, v8 + s0 = s +_3: + ; + if !(n != 0 && *(*uint8)(unsafe.Pointer(fmt)) != 0) { + goto _1 + } + if !(int32(*(*uint8)(unsafe.Pointer(fmt))) != int32('%')) { + goto _4 + } + goto literal +literal: + ; + v5 = s + s++ + v6 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + n-- + goto _2 +_4: + ; + fmt++ + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('%') { + goto literal + } + fill = int32(' ') + nogrp = 0 + negpar = 0 + nosym = 0 + left = 0 + for { + switch int32(*(*uint8)(unsafe.Pointer(fmt))) { + case int32('='): + fmt++ + v8 = fmt + fill = int32(*(*uint8)(unsafe.Pointer(v8))) + goto _7 + case int32('^'): + nogrp = int32(1) + goto _7 + case int32('('): + negpar = int32(1) + fallthrough + case int32('+'): + goto _7 + case int32('!'): + nosym = int32(1) + goto _7 + case int32('-'): + left = int32(1) + goto _7 + } + break + goto _7 + _7: + ; + fmt++ + } + fw = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + fw = int32(10)*fw + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _9 + _9: + ; + fmt++ + } + lp = 0 + rp = int32(2) + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('#') { + lp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + lp = int32(10)*lp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _10 + _10: + ; + fmt++ + } + } + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('.') { + rp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + rp = int32(10)*rp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _11 + _11: + ; + fmt++ + } + } + v12 = fmt + fmt++ + intl = BoolInt32(int32(*(*uint8)(unsafe.Pointer(v12))) == int32('i')) + w = lp + int32(1) + rp + if !(left != 0) && fw > w { + w = fw + } + x = VaFloat64(&ap) + l = uint64(Xsnprintf(tls, s, n, __ccgo_ts+608, VaList(bp+8, w, rp, x))) + if l >= n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(E2BIG) + return int64(-int32(1)) + } + s += uintptr(l) + n -= l + goto _2 +_2: + ; + goto _3 + goto _1 +_1: + ; + return int64(s) - int64(s0) +} + +func Xstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v loc=%v fmt=%v va=%v, (%v:)", tls, s, n, loc, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, loc, fmt, ap) + _ = ap + return ret +} + +func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale, fmt, ap) + _ = ap + return ret +} + +func Xstrtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof(tls, s, p) +} + +func Xstrtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, p) +} + +func Xstrtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold(tls, s, p) +} + +func X__strtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod_l(tls, s, p, l) +} + +func X__strtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof_l(tls, s, p, l) +} + +func X__strtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold_l(tls, s, p, l) +} + +// C documentation +// +// /* collate only by code points */ +func X__strxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, src) + if n > l { + Xstrcpy(tls, dest, src) + } + return l +} + +func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xstrxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, loc) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _current_domain uintptr + +func X__gettextdomain(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if _current_domain != 0 { + v1 = _current_domain + } else { + v1 = __ccgo_ts + 462 + } + return v1 +} + +func Xtextdomain(tls *TLS, domainname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v, (%v:)", tls, domainname, origin(2)) + defer func() { trc("-> %v", r) }() + } + var domlen Tsize_t + _ = domlen + if !(domainname != 0) { + return X__gettextdomain(tls) + } + domlen = Xstrlen(tls, domainname) + if domlen > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(_current_domain != 0) { + _current_domain = Xmalloc(tls, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if !(_current_domain != 0) { + return uintptr(0) + } + } + Xmemcpy(tls, _current_domain, domainname, domlen+uint64(1)) + return _current_domain +} + +func Xgettext(tls *TLS, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid=%v, (%v:)", tls, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdgettext(tls, uintptr(0), msgid) +} + +func Xngettext(tls *TLS, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdngettext(tls, uintptr(0), msgid1, msgid2, n) +} + +func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var global, old, v1, v2 Tlocale_t + var self Tpthread_t + _, _, _, _, _ = global, old, self, v1, v2 + self = ___get_tp(tls) + old = (*t__pthread)(unsafe.Pointer(self)).Flocale + global = uintptr(unsafe.Pointer(&X__libc)) + 56 + if new1 != 0 { + if new1 == uintptr(-Int32FromInt32(1)) { + v1 = global + } else { + v1 = new1 + } + (*t__pthread)(unsafe.Pointer(self)).Flocale = v1 + } + if old == global { + v2 = uintptr(-Int32FromInt32(1)) + } else { + v2 = old + } + return v2 +} + +func Xuselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__uselocale(tls, new1) +} + +// C documentation +// +// /* FIXME: stub */ +func X__wcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscmp(tls, l, r) +} + +func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* FIXME: stub */ +func Xwcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, locale) +} + +// C documentation +// +// /* collate only by code points */ +func X__wcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xwcslen(tls, src) + if l < n { + Xwmemcpy(tls, dest, src, l+uint64(1)) + } else { + if n != 0 { + Xwmemcpy(tls, dest, src, n-uint64(1)) + *(*Twchar_t)(unsafe.Pointer(dest + uintptr(n-uint64(1))*4)) = 0 + } + } + return l +} + +func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xwcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, loc) +} + +func Xreallocarray(tls *TLS, ptr uintptr, m Tsize_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ptr=%v m=%v n=%v, (%v:)", tls, ptr, m, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n != 0 && m > uint64(-Int32FromInt32(1))/n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + return Xrealloc(tls, ptr, m*n) +} + +const LDBL_EPSILON2 = 0 +const LDBL_MAX2 = 0 +const LDBL_MIN2 = 0 + +var _C1 = float64(0.0416666666666666) /* 0x3FA55555, 0x5555554C */ +var _C2 = -Float64FromFloat64(0.001388888888887411) /* 0xBF56C16C, 0x16C15177 */ +var _C3 = float64(2.480158728947673e-05) /* 0x3EFA01A0, 0x19CB1590 */ +var _C4 = -Float64FromFloat64(2.7557314351390663e-07) /* 0xBE927E4F, 0x809C52AD */ +var _C5 = float64(2.087572321298175e-09) /* 0x3E21EE9E, 0xBDB4B1C4 */ +var _C6 = -Float64FromFloat64(1.1359647557788195e-11) /* 0xBDA8FAE9, 0xBE8838D4 */ + +func X__cos(tls *TLS, x float64, y float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hz, r, w, z Tdouble_t + _, _, _, _ = hz, r, w, z + z = x * x + w = z * z + r = z*(_C1+z*(_C2+z*_C3)) + w*w*(_C4+z*(_C5+z*_C6)) + hz = float64(0.5) * z + w = float64(1) - hz + return w + (Float64FromFloat64(1) - w - hz + (z*r - x*y)) +} + +// C documentation +// +// /* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ + +var _C0 = -Float64FromFloat64(0.499999997251031) /* -0.499999997251031003120 */ +var _C11 = float64(0.04166662332373906) /* 0.0416666233237390631894 */ +var _C21 = -Float64FromFloat64(0.001388676377460993) /* -0.00138867637746099294692 */ +var _C31 = float64(2.439044879627741e-05) /* 0.0000243904487962774090654 */ + +func X__cosdf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w, z Tdouble_t + _, _, _ = r, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _C21 + z*_C31 + return float32(float64(1) + z*_C0 + w*_C11 + w*z*r) +} + +// C documentation +// +// /* k is such that k*ln2 has minimal relative error and x - kln2 > log(DBL_MIN) */ +var _k2 = int32(2043) +var _kln22 = float64(1416.0996898839683) + +// C documentation +// +// /* exp(x)/2 for x >= log(DBL_MAX), slightly better than 0.5*exp(x/2)*exp(x/2) */ +func X__expo2(tls *TLS, x float64, sign float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float64 + var v1 Tuint64_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint64(uint32(Int32FromInt32(0x3ff)+_k2/Int32FromInt32(2))< log(FLT_MIN) */ +var _k3 = int32(235) +var _kln23 = Float32FromFloat32(162.88958740234375) + +// C documentation +// +// /* expf(x)/2 for x >= log(FLT_MAX), slightly better than 0.5f*expf(x/2)*expf(x/2) */ +func X__expo2f(tls *TLS, x float32, sign float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float32 + var v1 Tuint32_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint32(Int32FromInt32(0x7f)+_k3/Int32FromInt32(2)) << int32(23) + scale = *(*float32)(unsafe.Pointer(&v1)) + /* exp(x - k ln2) * 2**(k-1) */ + /* in directed rounding correct sign before rounding or overflow is important */ + return Xexpf(tls, x-_kln23) * (sign * scale) * scale +} + +func X__fpclassify(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + if *(*Tuint64_t)(unsafe.Pointer(bp))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(e != 0) { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return X__fpclassify(tls, x) +} + +const pio2_hi = 0 +const pio2_lo = 0 + +func X__math_divzero(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float64 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float64FromFloat64(1) + } else { + v1 = float64(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / float64(0) +} + +func X__math_divzerof(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float32 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float32FromFloat32(1) + } else { + v1 = Float32FromFloat32(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / Float32FromFloat32(0) +} + +func X__math_invalid(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_invalidf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_oflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(3.105036184601418e+231)) +} + +func X__math_oflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(1.5845632502852868e+29)) +} + +func X__math_uflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(1.2882297539194267e-231)) +} + +func X__math_uflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(2.524354896707238e-29)) +} + +func X__math_xflow(tls *TLS, sign Tuint32_t, y2 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float64 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +func X__math_xflowf(tls *TLS, sign Tuint32_t, y2 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float32 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +const DBL_EPSILON1 = 2.220446049250313e-16 +const EPS = 0 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 33 bit of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// * pio2_2: second 33 bit of pi/2 +// * pio2_2t: pi/2 - (pio2_1+pio2_2) +// * pio2_3: third 33 bit of pi/2 +// * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +// */ + +var _toint = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio4 = float64(0.7853981633974483) +var _invpio2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_1 = float64(1.5707963267341256) /* 0x3FF921FB, 0x54400000 */ +var _pio2_1t = float64(6.077100506506192e-11) /* 0x3DD0B461, 0x1A626331 */ +var _pio2_2 = float64(6.077100506303966e-11) /* 0x3DD0B461, 0x1A600000 */ +var _pio2_2t = float64(2.0222662487959506e-21) /* 0x3BA3198A, 0x2E037073 */ +var _pio2_3 = float64(2.0222662487111665e-21) /* 0x3BA3198A, 0x2E000000 */ +var _pio2_3t = float64(8.4784276603689e-32) /* 0x397B839A, 0x252049C1 */ + +// C documentation +// +// /* caller must handle the case when reduction is not needed: |x| ~<= pi/4 */ +func X__rem_pio2(tls *TLS, x float64, y uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey, i, n, sign int32 + var fn, r, t, w, z Tdouble_t + var ix Tuint32_t + var v2 float64 + var _ /* tx at bp+8 */ [3]float64 + var _ /* ty at bp+32 */ [2]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, fn, i, ix, n, r, sign, t, w, z, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix <= uint32(0x400f6a7a) { /* |x| ~<= 5pi/4 */ + if ix&uint32(0xfffff) == uint32(0x921fb) { /* |x| ~= pi/2 or 2pi/2 */ + goto medium + } /* cancellation -- use medium case */ + if ix <= uint32(0x4002d97c) { /* |x| ~<= 3pi/4 */ + if !(sign != 0) { + z = x - _pio2_1 /* one round good to 85 bits */ + *(*float64)(unsafe.Pointer(y)) = z - _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - _pio2_1t + return int32(1) + } else { + z = x + _pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + _pio2_1t + return -int32(1) + } + } else { + if !(sign != 0) { + z = x - Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(2)*_pio2_1t + return int32(2) + } else { + z = x + Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(2)*_pio2_1t + return -int32(2) + } + } + } + if ix <= uint32(0x401c463b) { /* |x| ~<= 9pi/4 */ + if ix <= uint32(0x4015fdbc) { /* |x| ~<= 7pi/4 */ + if ix == uint32(0x4012d97c) { /* |x| ~= 3pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(3)*_pio2_1t + return int32(3) + } else { + z = x + Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(3)*_pio2_1t + return -int32(3) + } + } else { + if ix == uint32(0x401921fb) { /* |x| ~= 4pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(4)*_pio2_1t + return int32(4) + } else { + z = x + Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(4)*_pio2_1t + return -int32(4) + } + } + } + if !(ix < uint32(0x413921fb)) { + goto _1 + } /* |x| ~< 2^20*(pi/2), medium size */ + goto medium +medium: + ; + /* rint(x/(pi/2)) */ + fn = x*_invpio2 + _toint - _toint + n = int32(fn) + r = x - fn*_pio2_1 + w = fn * _pio2_1t /* 1st round, good to 85 bits */ + /* Matters with directed rounding. */ + if r-w < -_pio4 { + n-- + fn-- + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } else { + if r-w > _pio4 { + n++ + fn++ + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } + } + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + ex = int32(ix >> int32(20)) + if ex-ey > int32(16) { /* 2nd round, good to 118 bits */ + t = r + w = fn * _pio2_2 + r = t - w + w = fn*_pio2_2t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if ex-ey > int32(49) { /* 3rd round, good to 151 bits, covers all cases */ + t = r + w = fn * _pio2_3 + r = t - w + w = fn*_pio2_3t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + } + } + *(*float64)(unsafe.Pointer(y + 1*8)) = r - *(*float64)(unsafe.Pointer(y)) - w + return n +_1: + ; + /* + * all other (large) arguments + */ + if ix >= uint32(0x7ff00000) { /* x is inf or NaN */ + v2 = x - x + *(*float64)(unsafe.Pointer(y + 1*8)) = v2 + *(*float64)(unsafe.Pointer(y)) = v2 + return 0 + } + /* set z = scalbn(|x|,-ilogb(x)+23) */ + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(Int32FromInt32(0x3ff)+Int32FromInt32(23)) << Int32FromInt32(52) + z = *(*float64)(unsafe.Pointer(bp)) + i = 0 + for { + if !(i < int32(2)) { + break + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = float64(int32(z)) + z = (z - (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i]) * float64(1.6777216e+07) + goto _3 + _3: + ; + i++ + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = z + /* skip zero terms, first term is non-zero */ + for (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] == float64(0) { + i-- + } + n = X__rem_pio2_large(tls, bp+8, bp+32, int32(ix>>Int32FromInt32(20))-(Int32FromInt32(0x3ff)+Int32FromInt32(23)), i+int32(1), int32(1)) + if sign != 0 { + *(*float64)(unsafe.Pointer(y)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return -n + } + *(*float64)(unsafe.Pointer(y)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return n +} + +const DBL_EPSILON2 = 0 + +var _init_jk = [4]int32{ + 0: int32(3), + 1: int32(4), + 2: int32(4), + 3: int32(6), +} /* initial value for jk */ + +// C documentation +// +// /* +// * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi +// * +// * integer array, contains the (24*i)-th to (24*i+23)-th +// * bit of 2/pi after binary point. The corresponding +// * floating value is +// * +// * ipio2[i] * 2^(-24(i+1)). +// * +// * NB: This table must have at least (e0-3)/24 + jk terms. +// * For quad precision (e0 <= 16360, jk = 6), this is 686. +// */ +var _ipio2 = [66]Tint32_t{ + 0: int32(0xA2F983), + 1: int32(0x6E4E44), + 2: int32(0x1529FC), + 3: int32(0x2757D1), + 4: int32(0xF534DD), + 5: int32(0xC0DB62), + 6: int32(0x95993C), + 7: int32(0x439041), + 8: int32(0xFE5163), + 9: int32(0xABDEBB), + 10: int32(0xC561B7), + 11: int32(0x246E3A), + 12: int32(0x424DD2), + 13: int32(0xE00649), + 14: int32(0x2EEA09), + 15: int32(0xD1921C), + 16: int32(0xFE1DEB), + 17: int32(0x1CB129), + 18: int32(0xA73EE8), + 19: int32(0x8235F5), + 20: int32(0x2EBB44), + 21: int32(0x84E99C), + 22: int32(0x7026B4), + 23: int32(0x5F7E41), + 24: int32(0x3991D6), + 25: int32(0x398353), + 26: int32(0x39F49C), + 27: int32(0x845F8B), + 28: int32(0xBDF928), + 29: int32(0x3B1FF8), + 30: int32(0x97FFDE), + 31: int32(0x05980F), + 32: int32(0xEF2F11), + 33: int32(0x8B5A0A), + 34: int32(0x6D1F6D), + 35: int32(0x367ECF), + 36: int32(0x27CB09), + 37: int32(0xB74F46), + 38: int32(0x3F669E), + 39: int32(0x5FEA2D), + 40: int32(0x7527BA), + 41: int32(0xC7EBE5), + 42: int32(0xF17B3D), + 43: int32(0x0739F7), + 44: int32(0x8A5292), + 45: int32(0xEA6BFB), + 46: int32(0x5FB11F), + 47: int32(0x8D5D08), + 48: int32(0x560330), + 49: int32(0x46FC7B), + 50: int32(0x6BABF0), + 51: int32(0xCFBC20), + 52: int32(0x9AF436), + 53: int32(0x1DA9E3), + 54: int32(0x91615E), + 55: int32(0xE61B08), + 56: int32(0x659985), + 57: int32(0x5F14A0), + 58: int32(0x68408D), + 59: int32(0xFFD880), + 60: int32(0x4D7327), + 61: int32(0x310606), + 62: int32(0x1556CA), + 63: int32(0x73A8C9), + 64: int32(0x60E27B), + 65: int32(0xC08C6B), +} + +var _PIo2 = [8]float64{ + 0: float64(1.570796251296997), + 1: float64(7.549789415861596e-08), + 2: float64(5.390302529957765e-15), + 3: float64(3.282003415807913e-22), + 4: float64(1.270655753080676e-29), + 5: float64(1.2293330898111133e-36), + 6: float64(2.7337005381646456e-44), + 7: float64(2.1674168387780482e-51), +} + +func X__rem_pio2_large(tls *TLS, x uintptr, y uintptr, e0 int32, nx int32, prec int32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v e0=%v nx=%v prec=%v, (%v:)", tls, x, y, e0, nx, prec, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var carry, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q0 Tint32_t + var f, q [20]float64 + var fw, z, v2, v20, v22, v24 float64 + var _ /* fq at bp+80 */ [20]float64 + var _ /* iq at bp+0 */ [20]Tint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = carry, f, fw, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q, q0, z, v2, v20, v22, v24 + /* initialize jk*/ + jk = _init_jk[prec] + jp = jk + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx - int32(1) + jv = (e0 - int32(3)) / int32(24) + if jv < 0 { + jv = 0 + } + q0 = e0 - int32(24)*(jv+int32(1)) + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv - jx + m = jx + jk + i = 0 + for { + if !(i <= m) { + break + } + if j < 0 { + v2 = float64(0) + } else { + v2 = float64(_ipio2[j]) + } + f[i] = v2 + goto _1 + _1: + ; + i++ + j++ + } + /* compute q[0],q[1],...q[jk] */ + i = 0 + for { + if !(i <= jk) { + break + } + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _4 + _4: + ; + j++ + } + q[i] = fw + goto _3 + _3: + ; + i++ + } + jz = jk + goto recompute +recompute: + ; + /* distill q[] into iq[] reversingly */ + i = 0 + j = jz + z = q[jz] + for { + if !(j > 0) { + break + } + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + z = q[j-int32(1)] + fw + goto _5 + _5: + ; + i++ + j-- + } + /* compute n */ + z = Xscalbn(tls, z, q0) /* actual value of z */ + z -= float64(8) * Xfloor(tls, z*float64(0.125)) /* trim off integer >= 8 */ + n = int32(z) + z -= float64(n) + ih = 0 + if q0 > 0 { /* need iq[jz-1] to determine n */ + i = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(24) - q0) + n += i + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) -= i << (int32(24) - q0) + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(23) - q0) + } else { + if q0 == 0 { + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> int32(23) + } else { + if z >= float64(0.5) { + ih = int32(2) + } + } + } + if ih > 0 { /* q > 0.5 */ + n += int32(1) + carry = 0 + i = 0 + for { + if !(i < jz) { + break + } /* compute 1-q */ + j = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + if carry == 0 { + if j != 0 { + carry = int32(1) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0x1000000) - j + } + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0xffffff) - j + } + goto _6 + _6: + ; + i++ + } + if q0 > 0 { /* rare case: chance is 1 in 12 */ + switch q0 { + case int32(1): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x7fffff) + case int32(2): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x3fffff) + break + } + } + if ih == int32(2) { + z = float64(1) - z + if carry != 0 { + z -= Xscalbn(tls, float64(1), q0) + } + } + } + /* check if recomputation is needed */ + if z == float64(0) { + j = 0 + i = jz - int32(1) + for { + if !(i >= jk) { + break + } + j |= (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + goto _7 + _7: + ; + i-- + } + if j == 0 { /* need recomputation */ + k = int32(1) + for { + if !((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jk-k] == 0) { + break + } + goto _8 + _8: + ; + k++ + } /* k = no. of terms needed */ + i = jz + int32(1) + for { + if !(i <= jz+k) { + break + } /* add q[jz+1] to q[jz+k] */ + f[jx+i] = float64(_ipio2[jv+i]) + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _10 + _10: + ; + j++ + } + q[i] = fw + goto _9 + _9: + ; + i++ + } + jz += k + goto recompute + } + } + /* chop off zero terms */ + if z == float64(0) { + jz -= int32(1) + q0 -= int32(24) + for (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] == 0 { + jz-- + q0 -= int32(24) + } + } else { /* break z into 24-bit if necessary */ + z = Xscalbn(tls, z, -q0) + if z >= float64(1.6777216e+07) { + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + jz += int32(1) + q0 += int32(24) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(fw) + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z) + } + } + /* convert integer "bit" chunk to floating-point value */ + fw = Xscalbn(tls, float64(1), q0) + i = jz + for { + if !(i >= 0) { + break + } + q[i] = fw * float64((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i]) + fw *= float64(5.960464477539063e-08) + goto _11 + _11: + ; + i-- + } + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + i = jz + for { + if !(i >= 0) { + break + } + fw = float64(0) + k = Int32FromInt32(0) + for { + if !(k <= jp && k <= jz-i) { + break + } + fw += _PIo2[k] * q[i+k] + goto _13 + _13: + ; + k++ + } + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[jz-i] = fw + goto _12 + _12: + ; + i-- + } + /* compress fq[] into y[] */ + switch prec { + case 0: + goto _14 + case int32(2): + goto _15 + case int32(1): + goto _16 + case int32(3): + goto _17 + } + goto _18 +_14: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _19 + _19: + ; + i-- + } + if ih == 0 { + v20 = fw + } else { + v20 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v20 + goto _18 +_16: + ; +_15: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _21 + _21: + ; + i-- + } + // TODO: drop excess precision here once double_t is used + fw = fw + if ih == 0 { + v22 = fw + } else { + v22 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v22 + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] - fw + i = int32(1) + for { + if !(i <= jz) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _23 + _23: + ; + i++ + } + if ih == 0 { + v24 = fw + } else { + v24 = -fw + } + *(*float64)(unsafe.Pointer(y + 1*8)) = v24 + goto _18 +_17: + ; /* painful */ + i = jz +_27: + ; + if !(i > 0) { + goto _25 + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _26 +_26: + ; + i-- + goto _27 + goto _25 +_25: + ; + i = jz + for { + if !(i > int32(1)) { + break + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _28 + _28: + ; + i-- + } + fw = float64(0) + i = jz + for { + if !(i >= int32(2)) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _29 + _29: + ; + i-- + } + if ih == 0 { + *(*float64)(unsafe.Pointer(y)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = fw + } else { + *(*float64)(unsafe.Pointer(y)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = -fw + } +_18: + ; + return n & int32(7) +} + +const DBL_EPSILON3 = 2.220446049250313e-16 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 25 bits of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// */ + +var _toint1 = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio41 = float64(0.7853981852531433) +var _invpio21 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_11 = float64(1.5707963109016418) /* 0x3FF921FB, 0x50000000 */ +var _pio2_1t1 = float64(1.5893254773528196e-08) /* 0x3E5110b4, 0x611A6263 */ + +func X__rem_pio2f(tls *TLS, x float32, y uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e0, n, sign int32 + var fn Tdouble_t + var ix Tuint32_t + var _ /* tx at bp+8 */ [1]float64 + var _ /* ty at bp+16 */ [1]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e0, fn, ix, n, sign + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + /* 25+53 bit pi is good enough for medium size */ + if ix < uint32(0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */ + /* Use a specialized rint() to get fn. */ + fn = float64(x)*_invpio21 + _toint1 - _toint1 + n = int32(fn) + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + /* Matters with directed rounding. */ + if *(*float64)(unsafe.Pointer(y)) < -_pio41 { + n-- + fn-- + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } else { + if *(*float64)(unsafe.Pointer(y)) > _pio41 { + n++ + fn++ + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } + } + return n + } + if ix >= uint32(0x7f800000) { /* x is inf or NaN */ + *(*float64)(unsafe.Pointer(y)) = float64(x - x) + return 0 + } + /* scale x into [2^23, 2^24-1] */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + e0 = int32(ix>>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(23))) /* e0 = ilogb(|x|)-23, positive */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix - uint32(e0< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) +} + +// C documentation +// +// // FIXME: macro in math.h +func X__signbitf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) +} + +func X__signbitl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__signbit(tls, x) +} + +var _S1 = -Float64FromFloat64(0.16666666666666632) /* 0xBFC55555, 0x55555549 */ +var _S2 = float64(0.00833333333332249) /* 0x3F811111, 0x1110F8A6 */ +var _S3 = -Float64FromFloat64(0.0001984126982985795) /* 0xBF2A01A0, 0x19C161D5 */ +var _S4 = float64(2.7557313707070068e-06) /* 0x3EC71DE3, 0x57B1FE7D */ +var _S5 = -Float64FromFloat64(2.5050760253406863e-08) /* 0xBE5AE5E6, 0x8A2B9CEB */ +var _S6 = float64(1.58969099521155e-10) /* 0x3DE5D93A, 0x5ACFD57C */ + +func X__sin(tls *TLS, x float64, y float64, iy int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v iy=%v, (%v:)", tls, x, y, iy, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v, w, z Tdouble_t + _, _, _, _ = r, v, w, z + z = x * x + w = z * z + r = _S2 + z*(_S3+z*_S4) + z*w*(_S5+z*_S6) + v = z * x + if iy == 0 { + return x + v*(_S1+z*r) + } else { + return x - (z*(Float64FromFloat64(0.5)*y-v*r) - y - v*_S1) + } + return r1 +} + +// C documentation +// +// /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ + +var _S11 = -Float64FromFloat64(0.16666666641626524) /* -0.166666666416265235595 */ +var _S21 = float64(0.008333329385889463) /* 0.0083333293858894631756 */ +var _S31 = -Float64FromFloat64(0.00019839334836096632) /* -0.000198393348360966317347 */ +var _S41 = float64(2.718311493989822e-06) /* 0.0000027183114939898219064 */ + +func X__sindf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, w, z Tdouble_t + _, _, _, _ = r, s, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _S31 + z*_S41 + s = z * x + return float32(x + s*(_S11+z*_S21) + s*w*r) +} + +var _T = [13]float64{ + 0: float64(0.3333333333333341), + 1: float64(0.13333333333320124), + 2: float64(0.05396825397622605), + 3: float64(0.021869488294859542), + 4: float64(0.0088632398235993), + 5: float64(0.0035920791075913124), + 6: float64(0.0014562094543252903), + 7: float64(0.0005880412408202641), + 8: float64(0.0002464631348184699), + 9: float64(7.817944429395571e-05), + 10: float64(7.140724913826082e-05), + 11: -Float64FromFloat64(1.8558637485527546e-05), + 12: float64(2.590730518636337e-05), +} +var _pio42 = float64(0.7853981633974483) /* 3FE921FB, 54442D18 */ +var _pio4lo = float64(3.061616997868383e-17) /* 3C81A626, 33145C07 */ + +func X__tan(tls *TLS, x float64, y float64, odd int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v odd=%v, (%v:)", tls, x, y, odd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a, r, s, v, w, z, v1, v3 Tdouble_t + var a0, w0 float64 + var big, sign int32 + var hx Tuint32_t + var v2, v4 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, a0, big, hx, r, s, sign, v, w, w0, z, v1, v2, v3, v4 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + big = BoolInt32(hx&uint32(0x7fffffff) >= uint32(0x3FE59428)) /* |x| >= 0.6744 */ + if big != 0 { + sign = int32(hx >> int32(31)) + if sign != 0 { + x = -x + y = -y + } + x = _pio42 - x + (_pio4lo - y) + y = float64(0) + } + z = x * x + w = z * z + /* + * Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = _T[int32(1)] + w*(_T[int32(3)]+w*(_T[int32(5)]+w*(_T[int32(7)]+w*(_T[int32(9)]+w*_T[int32(11)])))) + v = z * (_T[int32(2)] + w*(_T[int32(4)]+w*(_T[int32(6)]+w*(_T[int32(8)]+w*(_T[int32(10)]+w*_T[int32(12)]))))) + s = z * x + r = y + z*(s*(r+v)+y) + s*_T[0] + w = x + r + if big != 0 { + s = float64(int32(1) - int32(2)*odd) + v = s - float64(2)*(x+(r-w*w/(w+s))) + if sign != 0 { + v1 = -v + } else { + v1 = v + } + return v1 + } + if !(odd != 0) { + return w + } + /* -1.0/(x+r) has up to 2ulp error, so compute it accurately */ + w0 = w + v2 = *(*Tuint64_t)(unsafe.Pointer(&w0))>>Int32FromInt32(32)<>Int32FromInt32(32)< %v", r1) }() + } + var r, s, t, u, w, z Tdouble_t + var v1 float64 + _, _, _, _, _, _, _ = r, s, t, u, w, z, v1 + z = x * x + /* + * Split up the polynomial into small independent terms to give + * opportunities for parallel evaluation. The chosen splitting is + * micro-optimized for Athlons (XP, X64). It costs 2 multiplications + * relative to Horner's method on sequential machines. + * + * We add the small terms from lowest degree up for efficiency on + * non-sequential machines (the lowest degree terms tend to be ready + * earlier). Apart from this, we don't care about order of + * operations, and don't need to to care since we have precision to + * spare. However, the chosen splitting is good for accuracy too, + * and would give results as accurate as Horner's method if the + * small terms were added from highest degree down. + */ + r = _T1[int32(4)] + z*_T1[int32(5)] + t = _T1[int32(2)] + z*_T1[int32(3)] + w = z * z + s = z * x + u = _T1[0] + z*_T1[int32(1)] + r = x + s*u + s*w*(t+w*r) + if odd != 0 { + v1 = -Float64FromFloat64(1) / r + } else { + v1 = r + } + return float32(v1) +} + +var _pio2_hi = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +var _pS0 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS1 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS2 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS3 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS4 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS5 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS1 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS2 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS3 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS4 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS0 + z*(_pS1+z*(_pS2+z*(_pS3+z*(_pS4+z*_pS5))))) + q = float64(1) + z*(_qS1+z*(_qS2+z*(_qS3+z*_qS4))) + return p / q +} + +func Xacos(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, df, s, w, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, df, hx, ix, lx, s, w, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* acos(1)=0, acos(-1)=pi */ + if hx>>int32(31) != 0 { + return Float64FromInt32(2)*_pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + if ix <= uint32(0x3c600000) { /* |x| < 2**-57 */ + return _pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return _pio2_hi - (x - (_pio2_lo - x*_R(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (float64(1) + x) * float64(0.5) + s = Xsqrt(tls, z) + w = _R(tls, z)*s - _pio2_lo + return Float64FromInt32(2) * (_pio2_hi - (s + w)) + } + /* x > 0.5 */ + z = (float64(1) - x) * float64(0.5) + s = Xsqrt(tls, z) + df = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&df))>>Int32FromInt32(32)< %v", r) }() + } + var c, df, s, w, z float32 + var hx, ix, v1 Tuint32_t + _, _, _, _, _, _, _, _ = c, df, hx, ix, s, w, z, v1 + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3f800000) { + if ix == uint32(0x3f800000) { + if hx>>int32(31) != 0 { + return Float32FromInt32(2)*_pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return Float32FromInt32(0) + } + return Float32FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3f000000) { + if ix <= uint32(0x32800000) { /* |x| < 2**-26 */ + return _pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return _pio2_hi1 - (x - (_pio2_lo1 - x*_R1(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (Float32FromInt32(1) + x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + w = _R1(tls, z)*s - _pio2_lo1 + return Float32FromInt32(2) * (_pio2_hi1 - (s + w)) + } + /* x > 0.5 */ + z = (Float32FromInt32(1) - x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + hx = *(*Tuint32_t)(unsafe.Pointer(&s)) + v1 = hx & uint32(0xfffff000) + df = *(*float32)(unsafe.Pointer(&v1)) + c = (z - df*df) / (s + df) + w = _R1(tls, z)*s + c + return Float32FromInt32(2) * (df + w) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacosh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e uint32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = e + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + /* x < 1 domain error is handled in the called functions */ + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| < 2, up to 2ulp error in [1,1.125] */ + return Xlog1p(tls, x-Float64FromInt32(1)+Xsqrt(tls, (x-Float64FromInt32(1))*(x-Float64FromInt32(1))+Float64FromInt32(2)*(x-Float64FromInt32(1)))) + } + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| < 0x1p26 */ + return Xlog(tls, Float64FromInt32(2)*x-Float64FromInt32(1)/(x+Xsqrt(tls, x*x-Float64FromInt32(1)))) + } + /* |x| >= 0x1p26 or nan */ + return Xlog(tls, x) + float64(0.6931471805599453) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacoshf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = a + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + a = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if a < uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 0x1p12 or x <= -2 or nan */ + return Xlogf(tls, x) + Float32FromFloat32(0.6931471805599453) +} + +func Xacoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacosh(tls, x) +} + +func Xacosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacos(tls, x) +} + +var _pio2_hi2 = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo2 = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +/* coefficients for R(x^2) */ +var _pS02 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS12 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS22 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS31 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS41 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS51 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS12 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS21 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS31 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS41 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R2(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS02 + z*(_pS12+z*(_pS22+z*(_pS31+z*(_pS41+z*_pS51))))) + q = float64(1) + z*(_qS12+z*(_qS21+z*(_qS31+z*_qS41))) + return p / q +} + +func Xasin(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, f, r, s, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, f, hx, ix, lx, r, s, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* asin(1) = +-pi/2 with inexact */ + return x*_pio2_hi2 + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + /* if 0x1p-1022 <= |x| < 0x1p-26, avoid raising underflow */ + if ix < uint32(0x3e500000) && ix >= uint32(0x00100000) { + return x + } + return x + x*_R2(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float64FromInt32(1) - Xfabs(tls, x)) * float64(0.5) + s = Xsqrt(tls, z) + r = _R2(tls, z) + if ix >= uint32(0x3fef3333) { /* if |x| > 0.975 */ + x = _pio2_hi2 - (Float64FromInt32(2)*(s+s*r) - _pio2_lo2) + } else { + /* f+c = sqrt(z) */ + f = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&f))>>Int32FromInt32(32)<>int32(31) != 0 { + return -x + } + return x +} + +var _pio2 = float64(1.5707963267948966) + +/* coefficients for R(x^2) */ +var _pS03 = float32(0.16666586697) +var _pS13 = float32(-Float64FromFloat64(0.042743422091)) +var _pS23 = float32(-Float64FromFloat64(0.008656363003)) +var _qS13 = float32(-Float64FromFloat64(0.7066296339)) + +func _R3(tls *TLS, z float32) (r float32) { + var p, q Tfloat_t + _, _ = p, q + p = z * (_pS03 + z*(_pS13+z*_pS23)) + q = Float32FromFloat32(1) + z*_qS13 + return p / q +} + +func Xasinf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var hx, ix Tuint32_t + var s float64 + var z float32 + _, _, _, _ = hx, ix, s, z + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x3f800000) { /* |x| >= 1 */ + if ix == uint32(0x3f800000) { /* |x| == 1 */ + return float32(float64(x)*_pio2 + Float64FromFloat32(7.52316384526264e-37)) + } /* asin(+-1) = +-pi/2 with inexact */ + return Float32FromInt32(0) / (x - x) /* asin(|x|>1) is NaN */ + } + if ix < uint32(0x3f000000) { /* |x| < 0.5 */ + /* if 0x1p-126 <= |x| < 0x1p-12, avoid raising underflow */ + if ix < uint32(0x39800000) && ix >= uint32(0x00800000) { + return x + } + return x + x*_R3(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float32FromInt32(1) - Xfabsf(tls, x)) * Float32FromFloat32(0.5) + s = Xsqrt(tls, float64(z)) + x = float32(_pio2 - Float64FromInt32(2)*(s+s*float64(_R3(tls, z)))) + if hx>>int32(31) != 0 { + return -x + } + return x +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| >= 0x1p26 or inf or nan */ + x3 = Xlog(tls, x3) + float64(0.6931471805599453) + } else { + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| >= 2 */ + x3 = Xlog(tls, Float64FromInt32(2)*x3+Float64FromInt32(1)/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+x3)) + } else { + if e >= uint32(Int32FromInt32(0x3ff)-Int32FromInt32(26)) { + /* |x| >= 0x1p-26, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1p(tls, x3+x3*x3/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+Float64FromInt32(1))) + } else { + /* |x| < 0x1p-26, raise inexact if x != 0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tuint32_t + var s uint32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = i, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = i + x3 = *(*float32)(unsafe.Pointer(bp)) + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(12)<= 0x1p12 or inf or nan */ + x3 = Xlogf(tls, x3) + Float32FromFloat32(0.6931471805599453) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 2 */ + x3 = Xlogf(tls, Float32FromInt32(2)*x3+Float32FromInt32(1)/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+x3)) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)<= 0x1p-12, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1pf(tls, x3+x3*x3/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+Float32FromInt32(1))) + } else { + /* |x| < 0x1p-12, raise inexact if x!=0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +func Xasinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasinh(tls, x) +} + +func Xasinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasin(tls, x) +} + +var _atanhi = [4]float64{ + 0: float64(0.4636476090008061), + 1: float64(0.7853981633974483), + 2: float64(0.982793723247329), + 3: float64(1.5707963267948966), +} + +var _atanlo = [4]float64{ + 0: float64(2.2698777452961687e-17), + 1: float64(3.061616997868383e-17), + 2: float64(1.3903311031230998e-17), + 3: float64(6.123233995736766e-17), +} + +var _aT = [11]float64{ + 0: float64(0.3333333333333293), + 1: -Float64FromFloat64(0.19999999999876483), + 2: float64(0.14285714272503466), + 3: -Float64FromFloat64(0.11111110405462356), + 4: float64(0.09090887133436507), + 5: -Float64FromFloat64(0.0769187620504483), + 6: float64(0.06661073137387531), + 7: -Float64FromFloat64(0.058335701337905735), + 8: float64(0.049768779946159324), + 9: -Float64FromFloat64(0.036531572744216916), + 10: float64(0.016285820115365782), +} + +func Xatan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tdouble_t + var y float32 + var y1, y2 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x44100000) { /* if |x| >= 2^66 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, __u2 Tuint64_t + var ix, iy, lx, ly, m Tuint32_t + var z, v6, v7 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, __u2, ix, iy, lx, ly, m, z, v1, v3, v5, v6, v7 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<> int32(32)) + lx = uint32(__u1) + __u2 = *(*Tuint64_t)(unsafe.Pointer(&y)) + iy = uint32(__u2 >> int32(32)) + ly = uint32(__u2) + if ix-uint32(0x3ff00000)|lx == uint32(0) { /* x = 1.0 */ + return Xatan(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix = ix & uint32(0x7fffffff) + iy = iy & uint32(0x7fffffff) + /* when y = 0 */ + if iy|ly == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix|lx == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi / Float64FromInt32(2) + } else { + v6 = _pi / Float64FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7ff00000) { + if iy == uint32(0x7ff00000) { + switch m { + case uint32(0): + return _pi / Float64FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi / Float64FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float64FromInt32(3) * _pi / Float64FromInt32(4) /* atan(+INF,-INF) */ + case uint32(3): + return float64(-Int32FromInt32(3)) * _pi / Float64FromInt32(4) /* atan(-INF,-INF) */ + } + } else { + switch m { + case uint32(0): + return float64(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float64FromFloat64(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi /* atan(+...,-INF) */ + case uint32(3): + return -_pi /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p64 */ + if ix+uint32(Int32FromInt32(64)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix, iy, m Tuint32_t + var z, v6, v7 float32 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _ = ix, iy, m, z, v1, v3, v5, v6, v7 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + y + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y)) + if ix == uint32(0x3f800000) { /* x=1.0 */ + return Xatanf(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix &= uint32(0x7fffffff) + iy &= uint32(0x7fffffff) + /* when y = 0 */ + if iy == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi1 /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi1 /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi1 / Float32FromInt32(2) + } else { + v6 = _pi1 / Float32FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7f800000) { + if iy == uint32(0x7f800000) { + switch m { + case uint32(0): + return _pi1 / Float32FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi1 / Float32FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float32FromInt32(3) * _pi1 / Float32FromInt32(4) /*atan(+INF,-INF)*/ + case uint32(3): + return float32(-Int32FromInt32(3)) * _pi1 / Float32FromInt32(4) /*atan(-INF,-INF)*/ + } + } else { + switch m { + case uint32(0): + return Float32FromFloat32(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float32FromFloat32(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi1 /* atan(+...,-INF) */ + case uint32(3): + return -_pi1 /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p26 */ + if ix+uint32(Int32FromInt32(26)< %v", r) }() + } + return Xatan2(tls, y, x) +} + +var _atanhi1 = [4]float32{ + 0: float32(0.46364760399), + 1: float32(0.78539812565), + 2: float32(0.98279368877), + 3: float32(1.5707962513), +} + +var _atanlo1 = [4]float32{ + 0: float32(5.012158244e-09), + 1: float32(3.7748947079e-08), + 2: float32(3.447321717e-08), + 3: float32(7.5497894159e-08), +} + +var _aT1 = [5]float32{ + 0: float32(0.33333328366), + 1: float32(-Float64FromFloat64(0.19999158382)), + 2: float32(0.14253635705), + 3: float32(-Float64FromFloat64(0.10648017377)), + 4: float32(0.061687607318), +} + +func Xatanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tfloat_t + var y float32 + var y1, y2 float64 + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x4c800000) { /* if |x| >= 2**26 */ + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + } + z = _atanhi1[int32(3)] + Float32FromFloat32(7.52316384526264e-37) + if sign != 0 { + v3 = -z + } else { + v3 = z + } + return v3 + } + if ix < uint32(0x3ee00000) { /* |x| < 0.4375 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + if ix < uint32(0x00800000) { + /* raise underflow for subnormal x */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } + id = -int32(1) + } else { + x3 = Xfabsf(tls, x3) + if ix < uint32(0x3f980000) { /* |x| < 1.1875 */ + if ix < uint32(0x3f300000) { /* 7/16 <= |x| < 11/16 */ + id = 0 + x3 = (Float32FromFloat32(2)*x3 - Float32FromFloat32(1)) / (Float32FromFloat32(2) + x3) + } else { /* 11/16 <= |x| < 19/16 */ + id = int32(1) + x3 = (x3 - Float32FromFloat32(1)) / (x3 + Float32FromFloat32(1)) + } + } else { + if ix < uint32(0x401c0000) { /* |x| < 2.4375 */ + id = int32(2) + x3 = (x3 - Float32FromFloat32(1.5)) / (Float32FromFloat32(1) + Float32FromFloat32(1.5)*x3) + } else { /* 2.4375 <= |x| < 2**26 */ + id = int32(3) + x3 = -Float32FromFloat32(1) / x3 + } + } + } + /* end of argument reduction */ + z = x3 * x3 + w = z * z + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z * (_aT1[0] + w*(_aT1[int32(2)]+w*_aT1[int32(4)])) + s2 = w * (_aT1[int32(1)] + w*_aT1[int32(3)]) + if id < 0 { + return x3 - x3*(s1+s2) + } + z = _atanhi1[id] - (x3*(s1+s2) - _atanlo1[id] - x3) + if sign != 0 { + v4 = -z + } else { + v4 = z + } + return v4 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = e, s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + y3 = *(*float64)(unsafe.Pointer(bp)) + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(1)) { + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(32)) { + /* handle underflow */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = float32(y3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(y3)) + } else { + y2 = float64(float32(y3)) + } + } + } + } else { + /* |x| < 0.5, up to 1.7ulp error */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*y3+Float64FromInt32(2)*y3*y3/(Float64FromInt32(1)-y3)) + } + } else { + /* avoid overflow */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*(y3/(Float64FromInt32(1)-y3))) + } + if s != 0 { + v1 = -y3 + } else { + v1 = y3 + } + return v1 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + y3 = *(*float32)(unsafe.Pointer(bp)) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(1)< %v", r) }() + } + return Xatanh(tls, x) +} + +func Xatanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan(tls, x) +} + +var _B1 = uint32(715094163) /* B1 = (1023-1023/3-0.03306235651)*2**20 */ +var _B2 = uint32(696219795) /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */ + +// C documentation +// +// /* |1/cbrt(x) - p(x)| < 2**-23.5 (~[-7.93e-8, 7.929e-8]). */ + +var _P0 = float64(1.87595182427177) /* 0x3ffe03e6, 0x0f61e692 */ +var _P1 = -Float64FromFloat64(1.8849797954337717) /* 0xbffe28e0, 0x92f02420 */ +var _P2 = float64(1.6214297201053545) /* 0x3ff9f160, 0x4a49d6c2 */ +var _P3 = -Float64FromFloat64(0.758397934778766) /* 0xbfe844cb, 0xbee751d9 */ +var _P4 = float64(0.14599619288661245) /* 0x3fc2b000, 0xd4e4edd7 */ + +func Xcbrt(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var hx Tuint32_t + var r, s, t, w Tdouble_t + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = hx, r, s, t, w, p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx >= uint32(0x7ff00000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* + * Rough cbrt to 5 bits: + * cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3) + * where e is integral and >= 0, m is real and in [0, 1), and "/" and + * "%" are integer division and modulus with rounding towards minus + * infinity. The RHS is always >= the LHS and has a maximum relative + * error of about 1 in 16. Adding a bias of -0.03306235651 to the + * (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE + * floating point representation, for finite positive normal values, + * ordinary integer divison of the value in bits magically gives + * almost exactly the RHS of the above provided we first subtract the + * exponent bias (1023 for doubles) and later add it back. We do the + * subtraction virtually to keep e >= 0 so that ordinary integer + * division rounds towards minus infinity; this is also efficient. + */ + if hx < uint32(0x00100000) { /* zero or subnormal? */ + *(*float64)(unsafe.Pointer(bp)) = x * float64(1.8014398509481984e+16) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx == uint32(0) { + return x + } /* cbrt(0) is itself */ + hx = hx/uint32(3) + _B2 + } else { + hx = hx/uint32(3) + _B1 + } + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) + t = *(*float64)(unsafe.Pointer(bp)) + /* + * New cbrt to 23 bits: + * cbrt(x) = t*cbrt(x/t**3) ~= t*P(t**3/x) + * where P(r) is a polynomial of degree 4 that approximates 1/cbrt(r) + * to within 2**-23.5 when |r - 1| < 1/10. The rough approximation + * has produced t such than |t/cbrt(x) - 1| ~< 1/32, and cubing this + * gives us bounds for r = t**3/x. + * + * Try to optimize for parallel evaluation as in __tanf.c. + */ + r = t * t * (t / x) + t = t * (_P0 + r*(_P1+r*_P2) + r*r*r*(_P3+r*_P4)) + /* + * Round t away from zero to 23 bits (sloppily except for ensuring that + * the result is larger in magnitude than cbrt(x) but not much more than + * 2 23-bit ulps larger). With rounding towards zero, the error bound + * would be ~5/6 instead of ~4/6. With a maximum error of 2 23-bit ulps + * in the rounded t, the infinite-precision error in the Newton + * approximation barely affects third digit in the final error + * 0.667; the error in the rounded t can be up to about 3 23-bit ulps + * before the final error is larger than 0.667 ulps. + */ + *(*float64)(unsafe.Pointer(bp)) = t + *(*Tuint64_t)(unsafe.Pointer(bp)) = (*(*Tuint64_t)(unsafe.Pointer(bp)) + Uint64FromUint32(0x80000000)) & uint64(0xffffffffc0000000) + t = *(*float64)(unsafe.Pointer(bp)) + /* one step Newton iteration to 53 bits with error < 0.667 ulps */ + s = t * t /* t*t is exact */ + r = x / s /* error <= 0.5 ulps; |r| < |t| */ + w = t + t /* t+t is exact */ + r = (r - t) / (w + r) /* r-t is exact; w+r ~= 3*t */ + t = t + t*r /* error <= 0.5 + 0.5/3 + epsilon */ + return t +} + +var _B11 = uint32(709958130) /* B1 = (127-127.0/3-0.03306235651)*2**23 */ +var _B21 = uint32(642849266) /* B2 = (127-127.0/3-24/3-0.03306235651)*2**23 */ + +func Xcbrtf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var T, r Tdouble_t + var hx Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = T, hx, r + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if hx >= uint32(0x7f800000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* rough cbrt to 5 bits */ + if hx < uint32(0x00800000) { /* zero or subnormal? */ + if hx == uint32(0) { + return x + } /* cbrt(+-0) is itself */ + *(*float32)(unsafe.Pointer(bp)) = x * Float32FromFloat32(1.6777216e+07) + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + hx = hx/uint32(3) + _B21 + } else { + hx = hx/uint32(3) + _B11 + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= hx + /* + * First step Newton iteration (solving t*t-x/t == 0) to 16 bits. In + * double precision so that its terms can be arranged for efficiency + * without causing overflow or underflow. + */ + T = float64(*(*float32)(unsafe.Pointer(bp))) + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* + * Second step Newton iteration to 47 bits. In double precision for + * efficiency and accuracy. + */ + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* rounding to 24 bits is perfect in round-to-nearest mode */ + return float32(T) +} + +func Xcbrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcbrt(tls, x) +} + +const DBL_EPSILON5 = 2.220446049250313e-16 + +var _toint2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xceil(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2, v1 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint2 + _toint2 - x3 + } else { + y3 = x3 + _toint2 - _toint2 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(1) + } + return v1 + } + if y3 < Float64FromInt32(0) { + return x3 + y3 + Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON6 = 0 + +func Xceilf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*float32)(unsafe.Pointer(bp)) = float32(-Float64FromFloat64(0)) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xceil(tls, x) +} + +func Xcopysign(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1, p2 uintptr + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _ = p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&(Uint64FromUint64(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xcopysignl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcopysign(tls, x, y) +} + +func Xcos(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _ = ix, n, y, y1, y2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) */ + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + return float64(1) + } + return X__cos(tls, x3, Float64FromInt32(0)) + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(1): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(2): + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + default: + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + } + return r +} + +const M_PI_23 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _c1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _c2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _c3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _c4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xcosf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y float32 + var y1, y2, v1, v2 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x != 0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + return Float32FromFloat32(1) + } + return X__cosdf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix > uint32(0x4016cbe3) { /* |x| ~> 3*pi/4 */ + if sign != 0 { + v1 = float64(x3) + _c2pio2 + } else { + v1 = float64(x3) - _c2pio2 + } + return -X__cosdf(tls, v1) + } else { + if sign != 0 { + return X__sindf(tls, float64(x3)+_c1pio2) + } else { + return X__sindf(tls, _c1pio2-float64(x3)) + } + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix > uint32(0x40afeddf) { /* |x| ~> 7*pi/4 */ + if sign != 0 { + v2 = float64(x3) + _c4pio2 + } else { + v2 = float64(x3) - _c4pio2 + } + return X__cosdf(tls, v2) + } else { + if sign != 0 { + return X__sindf(tls, float64(-x3)-_c3pio2) + } else { + return X__sindf(tls, float64(x3)-_c3pio2) + } + } + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case uint32(1): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + case uint32(2): + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + default: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_24 = 0 + +// C documentation +// +// /* cosh(x) = (exp(x) + 1/exp(x))/2 +// * = 1 + 0.5*(exp(x)-1)*(exp(x)-1)/exp(x) +// * = 1 + x*x/2 + o(x^4) +// */ +func Xcosh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y1, y2 float64 + var w Tuint32_t + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(2) */ + if w < uint32(0x3fe62e42) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26) then the 1/t is not needed */ + return float64(0.5) * (t + Float64FromInt32(1)/t) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, x3, float64(1)) + return t +} + +func Xcoshf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(2) */ + if w < uint32(0x3f317217) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< log(FLT_MAX) or nan */ + t = X__expo2f(tls, x3, Float32FromFloat32(1)) + return t +} + +func Xcoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcosh(tls, x) +} + +func Xcosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcos(tls, x) +} + +var _erx = float64(0.8450629115104675) /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx8 = float64(1.0270333367641007) /* 0x3FF06EBA, 0x8214DB69 */ +var _pp0 = float64(0.12837916709551256) /* 0x3FC06EBA, 0x8214DB68 */ +var _pp1 = -Float64FromFloat64(0.3250421072470015) /* 0xBFD4CD7D, 0x691CB913 */ +var _pp2 = -Float64FromFloat64(0.02848174957559851) /* 0xBF9D2A51, 0xDBD7194F */ +var _pp3 = -Float64FromFloat64(0.005770270296489442) /* 0xBF77A291, 0x236668E4 */ +var _pp4 = -Float64FromFloat64(2.3763016656650163e-05) /* 0xBEF8EAD6, 0x120016AC */ +var _qq1 = float64(0.39791722395915535) /* 0x3FD97779, 0xCDDADC09 */ +var _qq2 = float64(0.0650222499887673) /* 0x3FB0A54C, 0x5536CEBA */ +var _qq3 = float64(0.005081306281875766) /* 0x3F74D022, 0xC4D36B0F */ +var _qq4 = float64(0.00013249473800432164) /* 0x3F215DC9, 0x221C1A10 */ +var _qq5 = -Float64FromFloat64(3.960228278775368e-06) /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa0 = -Float64FromFloat64(0.0023621185607526594) /* 0xBF6359B8, 0xBEF77538 */ +var _pa1 = float64(0.41485611868374833) /* 0x3FDA8D00, 0xAD92B34D */ +var _pa2 = -Float64FromFloat64(0.3722078760357013) /* 0xBFD7D240, 0xFBB8C3F1 */ +var _pa3 = float64(0.31834661990116175) /* 0x3FD45FCA, 0x805120E4 */ +var _pa4 = -Float64FromFloat64(0.11089469428239668) /* 0xBFBC6398, 0x3D3E28EC */ +var _pa5 = float64(0.035478304325618236) /* 0x3FA22A36, 0x599795EB */ +var _pa6 = -Float64FromFloat64(0.002166375594868791) /* 0xBF61BF38, 0x0A96073F */ +var _qa1 = float64(0.10642088040084423) /* 0x3FBB3E66, 0x18EEE323 */ +var _qa2 = float64(0.540397917702171) /* 0x3FE14AF0, 0x92EB6F33 */ +var _qa3 = float64(0.07182865441419627) /* 0x3FB2635C, 0xD99FE9A7 */ +var _qa4 = float64(0.12617121980876164) /* 0x3FC02660, 0xE763351F */ +var _qa5 = float64(0.01363708391202905) /* 0x3F8BEDC2, 0x6B51DD1C */ +var _qa6 = float64(0.011984499846799107) /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra0 = -Float64FromFloat64(0.009864944034847148) /* 0xBF843412, 0x600D6435 */ +var _ra1 = -Float64FromFloat64(0.6938585727071818) /* 0xBFE63416, 0xE4BA7360 */ +var _ra2 = -Float64FromFloat64(10.558626225323291) /* 0xC0251E04, 0x41B0E726 */ +var _ra3 = -Float64FromFloat64(62.375332450326006) /* 0xC04F300A, 0xE4CBA38D */ +var _ra4 = -Float64FromFloat64(162.39666946257347) /* 0xC0644CB1, 0x84282266 */ +var _ra5 = -Float64FromFloat64(184.60509290671104) /* 0xC067135C, 0xEBCCABB2 */ +var _ra6 = -Float64FromFloat64(81.2874355063066) /* 0xC0545265, 0x57E4D2F2 */ +var _ra7 = -Float64FromFloat64(9.814329344169145) /* 0xC023A0EF, 0xC69AC25C */ +var _sa1 = float64(19.651271667439257) /* 0x4033A6B9, 0xBD707687 */ +var _sa2 = float64(137.65775414351904) /* 0x4061350C, 0x526AE721 */ +var _sa3 = float64(434.56587747522923) /* 0x407B290D, 0xD58A1A71 */ +var _sa4 = float64(645.3872717332679) /* 0x40842B19, 0x21EC2868 */ +var _sa5 = float64(429.00814002756783) /* 0x407AD021, 0x57700314 */ +var _sa6 = float64(108.63500554177944) /* 0x405B28A3, 0xEE48AE2C */ +var _sa7 = float64(6.570249770319282) /* 0x401A47EF, 0x8E484A93 */ +var _sa8 = -Float64FromFloat64(0.0604244152148581) /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb0 = -Float64FromFloat64(0.0098649429247001) /* 0xBF843412, 0x39E86F4A */ +var _rb1 = -Float64FromFloat64(0.799283237680523) /* 0xBFE993BA, 0x70C285DE */ +var _rb2 = -Float64FromFloat64(17.757954917754752) /* 0xC031C209, 0x555F995A */ +var _rb3 = -Float64FromFloat64(160.63638485582192) /* 0xC064145D, 0x43C5ED98 */ +var _rb4 = -Float64FromFloat64(637.5664433683896) /* 0xC083EC88, 0x1375F228 */ +var _rb5 = -Float64FromFloat64(1025.0951316110772) /* 0xC0900461, 0x6A2E5992 */ +var _rb6 = -Float64FromFloat64(483.5191916086514) /* 0xC07E384E, 0x9BDC383F */ +var _sb1 = float64(30.33806074348246) /* 0x403E568B, 0x261D5190 */ +var _sb2 = float64(325.7925129965739) /* 0x40745CAE, 0x221B9F0A */ +var _sb3 = float64(1536.729586084437) /* 0x409802EB, 0x189D5118 */ +var _sb4 = float64(3199.8582195085955) /* 0x40A8FFB7, 0x688C246A */ +var _sb5 = float64(2553.0504064331644) /* 0x40A3F219, 0xCEDF3BE6 */ +var _sb6 = float64(474.52854120695537) /* 0x407DA874, 0xE79FE763 */ +var _sb7 = -Float64FromFloat64(22.44095244658582) /* 0xC03670E2, 0x42712D62 */ + +func _erfc1(tls *TLS, x float64) (r float64) { + var P, Q, s Tdouble_t + _, _, _ = P, Q, s + s = Xfabs(tls, x) - Float64FromInt32(1) + P = _pa0 + s*(_pa1+s*(_pa2+s*(_pa3+s*(_pa4+s*(_pa5+s*_pa6))))) + Q = Float64FromInt32(1) + s*(_qa1+s*(_qa2+s*(_qa3+s*(_qa4+s*(_qa5+s*_qa6))))) + return Float64FromInt32(1) - _erx - P/Q +} + +func _erfc2(tls *TLS, ix Tuint32_t, x float64) (r float64) { + var R, S, s Tdouble_t + var z float64 + var v1 Tuint64_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3ff40000) { /* |x| < 1.25 */ + return _erfc1(tls, x) + } + x = Xfabs(tls, x) + s = Float64FromInt32(1) / (x * x) + if ix < uint32(0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */ + R = _ra0 + s*(_ra1+s*(_ra2+s*(_ra3+s*(_ra4+s*(_ra5+s*(_ra6+s*_ra7)))))) + S = float64(1) + s*(_sa1+s*(_sa2+s*(_sa3+s*(_sa4+s*(_sa5+s*(_sa6+s*(_sa7+s*_sa8))))))) + } else { /* |x| > 1/.35 */ + R = _rb0 + s*(_rb1+s*(_rb2+s*(_rb3+s*(_rb4+s*(_rb5+s*_rb6))))) + S = float64(1) + s*(_sb1+s*(_sb2+s*(_sb3+s*(_sb4+s*(_sb5+s*(_sb6+s*_sb7)))))) + } + z = x + v1 = *(*Tuint64_t)(unsafe.Pointer(&z))>>Int32FromInt32(32)< %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float64 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float64(int32(1)-int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3e300000) { /* |x| < 2**-28 */ + /* avoid underflow */ + return float64(0.125) * (Float64FromInt32(8)*x + _efx8*x) + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40180000) { /* 0.84375 <= |x| < 6 */ + y = Float64FromInt32(1) - _erfc2(tls, ix, x) + } else { + y = Float64FromInt32(1) - Float64FromFloat64(2.2250738585072014e-308) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfc(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float64 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float64(int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3c700000) { /* |x| < 2**-56 */ + return float64(1) - x + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + if sign != 0 || ix < uint32(0x3fd00000) { /* x < 1/4 */ + return float64(1) - (x + x*y) + } + return float64(0.5) - (x - float64(0.5) + x*y) + } + if ix < uint32(0x403c0000) { /* 0.84375 <= |x| < 28 */ + if sign != 0 { + v1 = Float64FromInt32(2) - _erfc2(tls, ix, x) + } else { + v1 = _erfc2(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float64FromInt32(2) - Float64FromFloat64(2.2250738585072014e-308) + } else { + v2 = Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(2.2250738585072014e-308) + } + return v2 +} + +var _erx1 = float32(0.84506291151) /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx81 = float32(1.027033329) /* 0x3f8375d4 */ +var _pp01 = float32(0.12837916613) /* 0x3e0375d4 */ +var _pp11 = float32(-Float64FromFloat64(0.32504209876)) /* 0xbea66beb */ +var _pp21 = float32(-Float64FromFloat64(0.028481749818)) /* 0xbce9528f */ +var _pp31 = float32(-Float64FromFloat64(0.005770270247)) /* 0xbbbd1489 */ +var _pp41 = float32(-Float64FromFloat64(2.3763017452e-05)) /* 0xb7c756b1 */ +var _qq11 = float32(0.39791721106) /* 0x3ecbbbce */ +var _qq21 = float32(0.0650222525) /* 0x3d852a63 */ +var _qq31 = float32(0.0050813062117) /* 0x3ba68116 */ +var _qq41 = float32(0.00013249473704) /* 0x390aee49 */ +var _qq51 = float32(-Float64FromFloat64(3.9602282413e-06)) /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa01 = float32(-Float64FromFloat64(0.0023621185683)) /* 0xbb1acdc6 */ +var _pa11 = float32(0.41485610604) /* 0x3ed46805 */ +var _pa21 = float32(-Float64FromFloat64(0.37220788002)) /* 0xbebe9208 */ +var _pa31 = float32(0.31834661961) /* 0x3ea2fe54 */ +var _pa41 = float32(-Float64FromFloat64(0.11089469492)) /* 0xbde31cc2 */ +var _pa51 = float32(0.035478305072) /* 0x3d1151b3 */ +var _pa61 = float32(-Float64FromFloat64(0.0021663755178)) /* 0xbb0df9c0 */ +var _qa11 = float32(0.10642088205) /* 0x3dd9f331 */ +var _qa21 = float32(0.54039794207) /* 0x3f0a5785 */ +var _qa31 = float32(0.071828655899) /* 0x3d931ae7 */ +var _qa41 = float32(0.12617121637) /* 0x3e013307 */ +var _qa51 = float32(0.013637083583) /* 0x3c5f6e13 */ +var _qa61 = float32(0.011984500103) /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra01 = float32(-Float64FromFloat64(0.0098649440333)) /* 0xbc21a093 */ +var _ra11 = float32(-Float64FromFloat64(0.6938585639)) /* 0xbf31a0b7 */ +var _ra21 = float32(-Float64FromFloat64(10.558626175)) /* 0xc128f022 */ +var _ra31 = float32(-Float64FromFloat64(62.375331879)) /* 0xc2798057 */ +var _ra41 = float32(-Float64FromFloat64(162.39666748)) /* 0xc322658c */ +var _ra51 = float32(-Float64FromFloat64(184.60508728)) /* 0xc3389ae7 */ +var _ra61 = float32(-Float64FromFloat64(81.287437439)) /* 0xc2a2932b */ +var _ra71 = float32(-Float64FromFloat64(9.8143291473)) /* 0xc11d077e */ +var _sa11 = float32(19.65127182) /* 0x419d35ce */ +var _sa21 = float32(137.65776062) /* 0x4309a863 */ +var _sa31 = float32(434.56588745) /* 0x43d9486f */ +var _sa41 = float32(645.38726807) /* 0x442158c9 */ +var _sa51 = float32(429.00814819) /* 0x43d6810b */ +var _sa61 = float32(108.63500214) /* 0x42d9451f */ +var _sa71 = float32(6.5702495575) /* 0x40d23f7c */ +var _sa81 = float32(-Float64FromFloat64(0.060424413532)) /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb01 = float32(-Float64FromFloat64(0.009864943102)) /* 0xbc21a092 */ +var _rb11 = float32(-Float64FromFloat64(0.79928326607)) /* 0xbf4c9dd4 */ +var _rb21 = float32(-Float64FromFloat64(17.757955551)) /* 0xc18e104b */ +var _rb31 = float32(-Float64FromFloat64(160.63638306)) /* 0xc320a2ea */ +var _rb41 = float32(-Float64FromFloat64(637.56646729)) /* 0xc41f6441 */ +var _rb51 = float32(-Float64FromFloat64(1025.0950928)) /* 0xc480230b */ +var _rb61 = float32(-Float64FromFloat64(483.51919556)) /* 0xc3f1c275 */ +var _sb11 = float32(30.338060379) /* 0x41f2b459 */ +var _sb21 = float32(325.79251099) /* 0x43a2e571 */ +var _sb31 = float32(1536.7296143) /* 0x44c01759 */ +var _sb41 = float32(3199.8581543) /* 0x4547fdbb */ +var _sb51 = float32(2553.050293) /* 0x451f90ce */ +var _sb61 = float32(474.52853394) /* 0x43ed43a7 */ +var _sb71 = float32(-Float64FromFloat64(22.440952301)) /* 0xc1b38712 */ + +func _erfc11(tls *TLS, x float32) (r float32) { + var P, Q, s Tfloat_t + _, _, _ = P, Q, s + s = Xfabsf(tls, x) - Float32FromInt32(1) + P = _pa01 + s*(_pa11+s*(_pa21+s*(_pa31+s*(_pa41+s*(_pa51+s*_pa61))))) + Q = Float32FromInt32(1) + s*(_qa11+s*(_qa21+s*(_qa31+s*(_qa41+s*(_qa51+s*_qa61))))) + return Float32FromInt32(1) - _erx1 - P/Q +} + +func _erfc21(tls *TLS, ix Tuint32_t, x float32) (r float32) { + var R, S, s Tfloat_t + var z float32 + var v1 Tuint32_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3fa00000) { /* |x| < 1.25 */ + return _erfc11(tls, x) + } + x = Xfabsf(tls, x) + s = Float32FromInt32(1) / (x * x) + if ix < uint32(0x4036db6d) { /* |x| < 1/0.35 */ + R = _ra01 + s*(_ra11+s*(_ra21+s*(_ra31+s*(_ra41+s*(_ra51+s*(_ra61+s*_ra71)))))) + S = Float32FromFloat32(1) + s*(_sa11+s*(_sa21+s*(_sa31+s*(_sa41+s*(_sa51+s*(_sa61+s*(_sa71+s*_sa81))))))) + } else { /* |x| >= 1/0.35 */ + R = _rb01 + s*(_rb11+s*(_rb21+s*(_rb31+s*(_rb41+s*(_rb51+s*_rb61))))) + S = Float32FromFloat32(1) + s*(_sb11+s*(_sb21+s*(_sb31+s*(_sb41+s*(_sb51+s*(_sb61+s*_sb71)))))) + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + v1 = ix & uint32(0xffffe000) + z = *(*float32)(unsafe.Pointer(&v1)) + return Xexpf(tls, -z*z-Float32FromFloat32(0.5625)) * Xexpf(tls, (z-x)*(z+x)+R/S) / x +} + +func Xerff(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float32 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float32(int32(1)-int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x31800000) { /* |x| < 2**-28 */ + /*avoid underflow */ + return Float32FromFloat32(0.125) * (Float32FromInt32(8)*x + _efx81*x) + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromInt32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40c00000) { /* |x| < 6 */ + y = Float32FromInt32(1) - _erfc21(tls, ix, x) + } else { + y = Float32FromInt32(1) - Float32FromFloat32(7.52316384526264e-37) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfcf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float32 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float32(int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x23800000) { /* |x| < 2**-56 */ + return Float32FromFloat32(1) - x + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromFloat32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + if sign != 0 || ix < uint32(0x3e800000) { /* x < 1/4 */ + return Float32FromFloat32(1) - (x + x*y) + } + return Float32FromFloat32(0.5) - (x - Float32FromFloat32(0.5) + x*y) + } + if ix < uint32(0x41e00000) { /* |x| < 28 */ + if sign != 0 { + v1 = Float32FromInt32(2) - _erfc21(tls, ix, x) + } else { + v1 = _erfc21(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float32FromInt32(2) - Float32FromFloat32(7.52316384526264e-37) + } else { + v2 = Float32FromFloat32(7.52316384526264e-37) * Float32FromFloat32(7.52316384526264e-37) + } + return v2 +} + +func Xerfl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerf(tls, x) +} + +func Xerfcl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerfc(tls, x) +} + +const EXP2_POLY_ORDER = 5 +const EXP_POLY_ORDER = 5 +const EXP_TABLE_BITS = 7 +const EXP_USE_TOINT_NARROW = 0 +const N = 128 + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by <= 460. */ + sbits = sbits - Uint64FromUint64(1009)<> int32(52)) +} + +func Xexp(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v5 Tuint64_t + var kd, r, r2, scale, tail, tmp, z Tdouble_t + var y, v1, v2, v4, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v4, v5, v6 + abstop = _top12(tls, x1) & uint32(0x7ff) + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= _top12(tls, float64(512))-_top12(tls, float64(5.551115123125783e-17)) { + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top12(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top12(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if *(*Tuint64_t)(unsafe.Pointer(&x1))>>int32(63) != 0 { + return X__math_uflow(tls, uint32(0)) + } else { + return X__math_oflow(tls, uint32(0)) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v2 = y + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v6 = y + goto _7 +_7: + return v6 +} + +const HUGE = 0 + +func Xexp10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float64 + var _ /* n at bp+0 */ float64 + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = Xmodf(tls, x, bp) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = *(*float64)(unsafe.Pointer(bp)) + /* fabs(n) < 16 without raising invalid on nan */ + if *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(52)&uint64(0x7ff) < uint64(Int32FromInt32(0x3ff)+Int32FromInt32(4)) { + if !(y != 0) { + return _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + y = Xexp2(tls, float64(3.321928094887362)*y) + return y * _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + return Xpow(tls, float64(10), x) +} + +var _p10 = [31]float64{ + 0: float64(1e-15), + 1: float64(1e-14), + 2: float64(1e-13), + 3: float64(1e-12), + 4: float64(1e-11), + 5: float64(1e-10), + 6: float64(1e-09), + 7: float64(1e-08), + 8: float64(1e-07), + 9: float64(1e-06), + 10: float64(1e-05), + 11: float64(0.0001), + 12: float64(0.001), + 13: float64(0.01), + 14: float64(0.1), + 15: Float64FromInt32(1), + 16: float64(10), + 17: float64(100), + 18: float64(1000), + 19: float64(10000), + 20: float64(100000), + 21: float64(1e+06), + 22: float64(1e+07), + 23: float64(1e+08), + 24: float64(1e+09), + 25: float64(1e+10), + 26: float64(1e+11), + 27: float64(1e+12), + 28: float64(1e+13), + 29: float64(1e+14), + 30: float64(1e+15), +} + +func Xpow10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xexp10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float32 + var _ /* n at bp+0 */ float32 + var _ /* u at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = Xmodff(tls, x, bp) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = *(*float32)(unsafe.Pointer(bp)) + /* fabsf(n) < 8 without raising invalid on nan */ + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))>>int32(23)&uint32(0xff) < uint32(Int32FromInt32(0x7f)+Int32FromInt32(3)) { + if !(y != 0) { + return _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + y = Xexp2f(tls, Float32FromFloat32(3.321928094887362)*y) + return y * _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + return float32(Xexp2(tls, float64(3.321928094887362)*float64(x))) +} + +var _p101 = [15]float32{ + 0: Float32FromFloat32(1e-07), + 1: Float32FromFloat32(1e-06), + 2: Float32FromFloat32(1e-05), + 3: Float32FromFloat32(0.0001), + 4: Float32FromFloat32(0.001), + 5: Float32FromFloat32(0.01), + 6: Float32FromFloat32(0.1), + 7: Float32FromInt32(1), + 8: float32(10), + 9: float32(100), + 10: float32(1000), + 11: float32(10000), + 12: float32(100000), + 13: float32(1e+06), + 14: float32(1e+07), +} + +func Xpow10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10f(tls, x) +} + +func Xexp10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xpow10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10l(tls, x) +} + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase1(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by 1. */ + sbits = sbits - Uint64FromUint64(1)<> int32(52)) +} + +func Xexp2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v7 Tuint64_t + var kd, r, r2, scale, tail, tmp Tdouble_t + var y, v1, v2, v3, v4, v6, v8 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, v1, v2, v3, v4, v6, v7, v8 + abstop = _top121(tls, x1) & uint32(0x7ff) + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= _top121(tls, float64(512))-_top121(tls, float64(5.551115123125783e-17)) { + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top121(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top121(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if !(*(*Tuint64_t)(unsafe.Pointer(&x1))>>Int32FromInt32(63) != 0) { + return X__math_oflow(tls, uint32(0)) + } else { + v2 = -Float64FromFloat64(1075) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) >= *(*Tuint64_t)(unsafe.Pointer(&v2)) { + return X__math_uflow(tls, uint32(0)) + } + } + } + v3 = float64(928) + if uint64(2)**(*Tuint64_t)(unsafe.Pointer(&x1)) > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Large x is special cased below. */ + abstop = uint32(0) + } + } + /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */ + /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */ + y = x1 + X__exp_data.Fexp2_shift + v4 = y + goto _5 +_5: + kd = v4 + v6 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v6)) /* k. */ + kd -= X__exp_data.Fexp2_shift /* k/N for int k. */ + r = x1 - kd + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-65 and scale > 2^-928, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v8 = y + goto _9 +_9: + return v8 +} + +const EXP2F_POLY_ORDER = 3 +const EXP2F_TABLE_BITS = 5 +const N1 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.) +Wrong count: 168353 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top122(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexp2f(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top122(tls, x2) & uint32(0x7ff) + if abstop >= _top122(tls, Float32FromFloat32(128)) { + /* |x| >= 128 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top122(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(0) { + return X__math_oflowf(tls, uint32(0)) + } + if x2 <= -Float32FromFloat32(150) { + return X__math_uflowf(tls, uint32(0)) + } + } + /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ + y1 = xd + X__exp2f_data.Fshift_scaled + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift_scaled /* k/N for int k. */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp2(tls, x) +} + +const N2 = 128 + +type Texp_data = struct { + Finvln2N float64 + Fshift float64 + Fnegln2hiN float64 + Fnegln2loN float64 + Fpoly [4]float64 + Fexp2_shift float64 + Fexp2_poly [5]float64 + Ftab [256]Tuint64_t +} + +const N3 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.) +Wrong count: 170635 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top123(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexpf(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top123(tls, x2) & uint32(0x7ff) + if abstop >= _top123(tls, Float32FromFloat32(88)) { + /* |x| >= 88 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top123(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(88.72283172607422) { /* x > log(0x1p128) ~= 88.72 */ + return X__math_oflowf(tls, uint32(0)) + } + if x2 < -Float32FromFloat32(103.97207641601562) { /* x < log(0x1p-150) ~= -103.97 */ + return X__math_uflowf(tls, uint32(0)) + } + } + /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */ + z = X__exp2f_data.Finvln2_scaled * xd + /* Round and convert z to int, the result is in [-150*N, 128*N] and + ideally ties-to-even rule is used, otherwise the magnitude of r + can be bigger which gives larger approximation error. */ + y1 = z + X__exp2f_data.Fshift + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift + r = z - kd + /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp(tls, x) +} + +var _o_threshold = float64(709.782712893384) /* 0x40862E42, 0xFEFA39EF */ +var _ln2_hi = float64(0.6931471803691238) /* 0x3fe62e42, 0xfee00000 */ +var _ln2_lo = float64(1.9082149292705877e-10) /* 0x3dea39ef, 0x35793c76 */ +var _invln2 = float64(1.4426950408889634) /* 0x3ff71547, 0x652b82fe */ +/* Scaled Q's: Qn_here = 2**n * Qn_above, for R(2*z) where z = hxs = x*x/2: */ +var _Q1 = -Float64FromFloat64(0.03333333333333313) /* BFA11111 111110F4 */ +var _Q2 = float64(0.0015873015872548146) /* 3F5A01A0 19FE5585 */ +var _Q3 = -Float64FromFloat64(7.93650757867488e-05) /* BF14CE19 9EAADBB7 */ +var _Q4 = float64(4.008217827329362e-06) /* 3ED0CFCA 86E65239 */ +var _Q5 = -Float64FromFloat64(2.0109921818362437e-07) /* BE8AFDB7 6E09C32D */ + +func Xexpm1(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tdouble_t + var hx Tuint32_t + var k, sign int32 + var y float32 + var y1, y2, v3 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1, v3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4043687A) { /* if |x|>=56*ln2 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< _o_threshold { + x3 *= float64(8.98846567431158e+307) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi + lo = _ln2_lo + k = int32(1) + } else { + hi = x3 + _ln2_hi + lo = -_ln2_lo + k = -int32(1) + } + } else { + if sign != 0 { + v3 = -Float64FromFloat64(0.5) + } else { + v3 = float64(0.5) + } + k = int32(_invln2*x3 + v3) + t = float64(k) + hi = x3 - t*_ln2_hi /* t*ln2_hi is exact here */ + lo = t * _ln2_lo + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x3c900000) { /* |x| < 2**-54, return x */ + if hx < uint32(0x00100000) { + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(0.5) * x3 + hxs = x3 * hfx + r1 = float64(1) + hxs*(_Q1+hxs*(_Q2+hxs*(_Q3+hxs*(_Q4+hxs*_Q5)))) + t = float64(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat64(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float64(0.5)*(x3-e) - float64(0.5) + } + if k == int32(1) { + if x3 < -Float64FromFloat64(0.25) { + return -Float64FromFloat64(2) * (e - (x3 + Float64FromFloat64(0.5))) + } + return float64(1) + float64(2)*(x3-e) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)+k) << int32(52) /* 2^k */ + twopk = *(*float64)(unsafe.Pointer(bp + 8)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + float64(1) + if k == int32(1024) { + y3 = y3 * float64(2) * float64(8.98846567431158e+307) + } else { + y3 = y3 * twopk + } + return y3 - float64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)-k) << int32(52) /* 2^-k */ + if k < int32(20) { + y3 = (x3 - e + (Float64FromInt32(1) - *(*float64)(unsafe.Pointer(bp + 8)))) * twopk + } else { + y3 = (x3 - (e + *(*float64)(unsafe.Pointer(bp + 8))) + Float64FromInt32(1)) * twopk + } + return y3 +} + +var _ln2_hi1 = float32(0.69313812256) /* 0x3f317180 */ +var _ln2_lo1 = float32(9.0580006145e-06) /* 0x3717f7d1 */ +var _invln21 = float32(1.4426950216) /* 0x3fb8aa3b */ +/* + * Domain [-0.34568, 0.34568], range ~[-6.694e-10, 6.696e-10]: + * |6 / x * (1 + 2 * (1 / (exp(x) - 1) - 1 / x)) - q(x)| < 2**-30.04 + * Scaled coefficients: Qn_here = 2**n * Qn_for_q (see s_expm1.c): + */ +var _Q11 = float32(-Float64FromFloat64(0.033333212137)) /* -0x888868.0p-28 */ +var _Q21 = float32(0.0015807170421) /* 0xcf3010.0p-33 */ + +func Xexpm1f(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tfloat_t + var hx Tuint32_t + var k, sign int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4195b844) { /* if |x|>=27*ln2 */ + if hx > uint32(0x7f800000) { /* NaN */ + return x3 + } + if sign != 0 { + return float32(-Int32FromInt32(1)) + } + if hx > uint32(0x42b17217) { /* x > log(FLT_MAX) */ + x3 *= Float32FromFloat32(1.7014118346046923e+38) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3eb17218) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3F851592) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi1 + lo = _ln2_lo1 + k = int32(1) + } else { + hi = x3 + _ln2_hi1 + lo = -_ln2_lo1 + k = -int32(1) + } + } else { + if sign != 0 { + v1 = -Float32FromFloat32(0.5) + } else { + v1 = Float32FromFloat32(0.5) + } + k = int32(_invln21*x3 + v1) + t = float32(k) + hi = x3 - t*_ln2_hi1 /* t*ln2_hi is exact here */ + lo = t * _ln2_lo1 + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x33000000) { /* when |x|<2**-25, return x */ + if hx < uint32(0x00800000) { + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = Float32FromFloat32(0.5) * x3 + hxs = x3 * hfx + r1 = Float32FromFloat32(1) + hxs*(_Q11+hxs*_Q21) + t = Float32FromFloat32(3) - r1*hfx + e = hxs * ((r1 - t) / (Float32FromFloat32(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return Float32FromFloat32(0.5)*(x3-e) - Float32FromFloat32(0.5) + } + if k == int32(1) { + if x3 < -Float32FromFloat32(0.25) { + return -Float32FromFloat32(2) * (e - (x3 + Float32FromFloat32(0.5))) + } + return Float32FromFloat32(1) + Float32FromFloat32(2)*(x3-e) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) + k) << int32(23)) /* 2^k */ + twopk = *(*float32)(unsafe.Pointer(bp)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + Float32FromFloat32(1) + if k == int32(128) { + y3 = y3 * Float32FromFloat32(2) * Float32FromFloat32(1.7014118346046923e+38) + } else { + y3 = y3 * twopk + } + return y3 - Float32FromFloat32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) - k) << int32(23)) /* 2^-k */ + if k < int32(23) { + y3 = (x3 - e + (Float32FromInt32(1) - *(*float32)(unsafe.Pointer(bp)))) * twopk + } else { + y3 = (x3 - (e + *(*float32)(unsafe.Pointer(bp))) + Float32FromInt32(1)) * twopk + } + return y3 +} + +func Xexpm1l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexpm1(tls, x) +} + +func Xfabs(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfabsf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfabsl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfabs(tls, x) +} + +func Xfdim(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _ = v1, v3, v5 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< y { + v5 = x - y + } else { + v5 = Float64FromInt32(0) + } + return v5 +} + +func Xfdimf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _ = v1, v3, v5 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + if x > y { + v5 = x - y + } else { + v5 = Float32FromInt32(0) + } + return v5 +} + +func Xfdiml(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfdim(tls, x, y) +} + +func Xfinite(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&uint32(0x7fffffff) < uint32(0x7f800000)) +} + +const DBL_EPSILON7 = 2.220446049250313e-16 + +var _toint3 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xfloor(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1 int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint3 + _toint3 - x3 + } else { + y3 = x3 + _toint3 - _toint3 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return float64(v1) + } + if y3 > Float64FromInt32(0) { + return x3 + y3 - Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON8 = 0 + +func Xfloorf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(0) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xfloor(tls, x) +} + +const DBL_MIN1 = 2.2250738585072014e-308 +const FLT_MIN1 = 1.1754943508222875e-38 +const ZEROINFNAN = 971 + +type Tnum = struct { + Fm Tuint64_t + Fe int32 + Fsign int32 +} + +func _normalize(tls *TLS, x float64) (r Tnum) { + var e, sign, v2 int32 + var ix Tuint64_t + var v1 float64 + _, _, _, _, _ = e, ix, sign, v1, v2 + ix = *(*Tuint64_t)(unsafe.Pointer(&x)) + e = int32(ix >> int32(52)) + sign = e & int32(0x800) + e &= int32(0x7ff) + if !(e != 0) { + v1 = x * float64(9.223372036854776e+18) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + e = int32(ix >> int32(52) & uint64(0x7ff)) + if e != 0 { + v2 = e - int32(63) + } else { + v2 = int32(0x800) + } + e = v2 + } + ix = ix & (Uint64FromUint64(1)<> int32(32) + ylo = uint64(uint32(y)) + yhi = y >> int32(32) + t1 = xlo * ylo + t2 = xlo*yhi + xhi*ylo + t3 = xhi * yhi + *(*Tuint64_t)(unsafe.Pointer(lo)) = t1 + t2<>Int32FromInt32(32) + BoolUint64(t1 > *(*Tuint64_t)(unsafe.Pointer(lo))) +} + +func Xfma(tls *TLS, x1 float64, y float64, z float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y=%v z=%v, (%v:)", tls, x1, y, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, r float64 + var d, e, nonzero, samesign, sign, v2, v5 int32 + var fltmin float32 + var i Tint64_t + var nx, ny, nz Tnum + var t, zhi, zlo, v1, v4 Tuint64_t + var tiny Tdouble_t + var _ /* rhi at bp+0 */ Tuint64_t + var _ /* rlo at bp+8 */ Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, e, fltmin, i, nonzero, nx, ny, nz, r, samesign, sign, t, tiny, zhi, zlo, v1, v2, v4, v5 + nx = _normalize(tls, x1) + ny = _normalize(tls, y) + nz = _normalize(tls, z) + if nx.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) || ny.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + return x1*y + z + } + if nz.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + if nz.Fe > Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { /* z==0 */ + return x1*y + z + } + return z + } + _mul(tls, bp, bp+8, nx.Fm, ny.Fm) + /* either top 20 or 21 bits of rhi and last 2 bits of rlo are 0 */ + /* align exponents */ + e = nx.Fe + ny.Fe + d = nz.Fe - e + /* shift bits z<<=kz, r>>=kr, so kz+kr == d, set e = e+kr (== ez-kz) */ + if d > 0 { + if d < int32(64) { + zlo = nz.Fm << d + zhi = nz.Fm >> (int32(64) - d) + } else { + zlo = uint64(0) + zhi = nz.Fm + e = nz.Fe - int32(64) + d -= int32(64) + if d == 0 { + } else { + if d < int32(64) { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = *(*Tuint64_t)(unsafe.Pointer(bp))<<(int32(64)-d) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<<(Int32FromInt32(64)-d) != 0)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) >> d + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(1) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(0) + } + } + } + } else { + zhi = uint64(0) + d = -d + if d == 0 { + zlo = nz.Fm + } else { + if d < int32(64) { + zlo = nz.Fm>>d | BoolUint64(!!(nz.Fm<<(Int32FromInt32(64)-d) != 0)) + } else { + zlo = uint64(1) + } + } + } + /* add */ + sign = nx.Fsign ^ ny.Fsign + samesign = BoolInt32(!(sign^nz.Fsign != 0)) + nonzero = int32(1) + if samesign != 0 { + /* r += z */ + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) += zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) += zhi + BoolUint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) < zlo) + } else { + /* r -= z */ + t = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) -= zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) - zhi - BoolUint64(t < *(*Tuint64_t)(unsafe.Pointer(bp + 8))) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = -*(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = -*(*Tuint64_t)(unsafe.Pointer(bp)) - BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) != 0)) + sign = BoolInt32(!(sign != 0)) + } + nonzero = BoolInt32(!!(*(*Tuint64_t)(unsafe.Pointer(bp)) != 0)) + } + /* set rhi to top 63bit of the result (last bit is sticky) */ + if nonzero != 0 { + e += int32(64) + v1 = *(*Tuint64_t)(unsafe.Pointer(bp)) + // __asm__ ("cntlzd %0, %1" : "=r"(x) : "r"(x)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 60, __ccgo_ts+614) + v2 = int32(v1) + goto _3 + _3: + d = v2 - int32(1) + /* note: d > 0 */ + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp))<>(int32(64)-d) | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&uint64(1) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) << d + } + } else { + /* exact +-0 */ + return x1*y + z + } + } + e -= d + /* convert to double */ + i = int64(*(*Tuint64_t)(unsafe.Pointer(bp))) /* i is in [1<<62,(1<<63)-1] */ + if sign != 0 { + i = -i + } + r = float64(i) /* |r| is in [0x1p62,0x1p63] */ + if e < -Int32FromInt32(1022)-Int32FromInt32(62) { + /* result is subnormal before rounding */ + if e == -Int32FromInt32(1022)-Int32FromInt32(63) { + c = float64(9.223372036854776e+18) + if sign != 0 { + c = -c + } + if r == c { + /* min normal after rounding, underflow depends + on arch behaviour which can be imitated by + a double to float conversion */ + fltmin = float32(Float64FromFloat64(1.0842021401737618e-19) * Float64FromFloat32(1.1754943508222875e-38) * r) + return Float64FromFloat64(2.2250738585072014e-308) / Float64FromFloat32(1.1754943508222875e-38) * float64(fltmin) + } + /* one bit is lost when scaled, add another top bit to + only round once at conversion if it is inexact */ + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp))&uint64(1) | Uint64FromUint64(1)<>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp))<<(Int32FromInt32(64)-d) != 0))) << d) + if sign != 0 { + i = -i + } + r = float64(i) + } + } + return Xscalbn(tls, r, e) +} + +const DBL_MIN2 = 0 +const FLT_MIN2 = 0 + +func Xfmal(tls *TLS, x float64, y float64, z float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v z=%v, (%v:)", tls, x, y, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfma(tls, x, y, z) +} + +func Xfmax(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeroes, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmax(tls, x, y) +} + +func Xfmin(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeros, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmin(tls, x, y) +} + +func Xfmod(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx int32 + var i, uxi Tuint64_t + var v1 uint64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* in the followings uxi should be ux.i, but then gcc wrongly adds */ + /* float load/store to inner loops ruining performance and code size */ + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = *(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + uxi <<= uint64(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + /* scale result */ + if ex > 0 { + uxi = uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + uxi |= uint64(sx) << int32(63) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xfmodf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey int32 + var i, sx, uxi Tuint32_t + var v1 uint32 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if uxi<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + uxi <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + /* scale result up */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + uxi |= sx + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xfmodl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmod(tls, x, y) +} + +func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexp(tls, x*float64(1.8446744073709552e+19), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0x7ff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & Uint64FromUint64(0x800fffffffffffff) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) | Uint64FromUint64(0x3fe0000000000000) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfrexpf(tls *TLS, x float32, e uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexpf(tls, float32(float64(x)*float64(1.8446744073709552e+19)), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0xff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x7e) + p1 = bp + *(*Tuint32_t)(unsafe.Pointer(p1)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p1))) & Uint64FromUint64(0x807fffff)) + p2 = bp + *(*Tuint32_t)(unsafe.Pointer(p2)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p2))) | Uint64FromUint64(0x3f000000)) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfrexpl(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfrexp(tls, x, e) +} + +const SPLIT = 1 + +func _sq(tls *TLS, hi uintptr, lo uintptr, x float64) { + var xc, xh, xl Tdouble_t + _, _, _ = xc, xh, xl + xc = x * (Float64FromFloat64(1.34217728e+08) + Float64FromInt32(1)) + xh = x - xc + xc + xl = x - xh + *(*Tdouble_t)(unsafe.Pointer(hi)) = x * x + *(*Tdouble_t)(unsafe.Pointer(lo)) = xh*xh - *(*Tdouble_t)(unsafe.Pointer(hi)) + Float64FromInt32(2)*xh*xl + xl*xl +} + +func Xhypot(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey int32 + var ut struct { + Fi [0]Tuint64_t + Ff float64 + } + var z Tdouble_t + var p1, p2 uintptr + var _ /* hx at bp+16 */ Tdouble_t + var _ /* hy at bp+32 */ Tdouble_t + var _ /* lx at bp+24 */ Tdouble_t + var _ /* ly at bp+40 */ Tdouble_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = ex, ey, ut, z, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + /* arrange |x| >= |y| */ + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) + p2 = bp + 8 + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) + if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { + ut = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = ut + } + /* special cases */ + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52)) + x = *(*float64)(unsafe.Pointer(bp)) + y = *(*float64)(unsafe.Pointer(bp + 8)) + /* note: hypot(inf,nan) == inf */ + if ey == int32(0x7ff) { + return y + } + if ex == int32(0x7ff) || *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == uint64(0) { + return x + } + /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ + /* 64 difference is enough for ld80 double_t */ + if ex-ey > int32(64) { + return x + y + } + /* precise sqrt argument in nearest rounding mode without overflow */ + /* xh*xh must not overflow and xl*xl must not underflow in sq */ + z = Float64FromInt32(1) + if ex > Int32FromInt32(0x3ff)+Int32FromInt32(510) { + z = float64(5.260135901548374e+210) + x *= float64(1.90109156629516e-211) + y *= float64(1.90109156629516e-211) + } else { + if ey < Int32FromInt32(0x3ff)-Int32FromInt32(450) { + z = float64(1.90109156629516e-211) + x *= float64(5.260135901548374e+210) + y *= float64(5.260135901548374e+210) + } + } + _sq(tls, bp+16, bp+24, x) + _sq(tls, bp+32, bp+40, y) + return z * Xsqrt(tls, *(*Tdouble_t)(unsafe.Pointer(bp + 40))+*(*Tdouble_t)(unsafe.Pointer(bp + 24))+*(*Tdouble_t)(unsafe.Pointer(bp + 32))+*(*Tdouble_t)(unsafe.Pointer(bp + 16))) +} + +func Xhypotf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ut struct { + Fi [0]Tuint32_t + Ff float32 + } + var z Tfloat_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = ut, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < *(*Tuint32_t)(unsafe.Pointer(bp + 4)) { + ut = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = ut + } + x = *(*float32)(unsafe.Pointer(bp)) + y = *(*float32)(unsafe.Pointer(bp + 4)) + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(25)<= uint32((Int32FromInt32(0x7f)+Int32FromInt32(60))< %v", r) }() + } + return Xhypot(tls, x, y) +} + +func Xilogb(tls *TLS, x3 float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint64_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + i <<= uint64(12) + if i == uint64(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x3ff) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint64(1) + } + return e + } + if e == int32(0x7ff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(23) & uint32(0xff)) + if !(e != 0) { + i <<= uint32(9) + if i == uint32(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x7f) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint32(1) + } + return e + } + if e == int32(0xff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + return Xilogb(tls, x) +} + +var _invsqrtpi = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +// C documentation +// +// /* common method when |x|>=2 */ +func _common(tls *TLS, ix Tuint32_t, x float64, y0 int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x-pi/4)-q0(x)*sin(x-pi/4)) + * y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x-pi/4)+q0(x)*cos(x-pi/4)) + * + * sin(x-pi/4) = (sin(x) - cos(x))/sqrt(2) + * cos(x-pi/4) = (sin(x) + cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + c = Xcos(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + /* avoid overflow in 2*x, big ulp error when x>=0x1p1023 */ + if ix < uint32(0x7fe00000) { + ss = s - c + z = -Xcos(tls, Float64FromInt32(2)*x) + if s*c < Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y0 != 0 { + ss = -ss + } + cc = _pzero(tls, x)*cc - _qzero(tls, x)*ss + } + } + return _invsqrtpi * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R02 = float64(0.015624999999999995) /* 0x3F8FFFFF, 0xFFFFFFFD */ +var _R03 = -Float64FromFloat64(0.00018997929423885472) /* 0xBF28E6A5, 0xB61AC6E9 */ +var _R04 = float64(1.8295404953270067e-06) /* 0x3EBEB1D1, 0x0C503919 */ +var _R05 = -Float64FromFloat64(4.618326885321032e-09) /* 0xBE33D5E7, 0x73D63FCE */ +var _S01 = float64(0.015619102946489001) /* 0x3F8FFCE8, 0x82C8C2A4 */ +var _S02 = float64(0.00011692678466333745) /* 0x3F1EA6D2, 0xDD57DBF4 */ +var _S03 = float64(5.135465502073181e-07) /* 0x3EA13B54, 0xCE84D5A9 */ +var _S04 = float64(1.1661400333379e-09) /* 0x3E1408BC, 0xF4745D8F */ + +func Xj0(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + _, _, _, _ = ix, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* j0(+-inf)=0, j0(nan)=nan */ + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + x = Xfabs(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros: 2.4, 5.52, 8.6537,.. */ + return _common(tls, ix, x, 0) + } + /* 1 - x*x/4 + x*x*R(x^2)/S(x^2) */ + if ix >= uint32(0x3f200000) { /* |x| >= 2**-13 */ + /* up to 4ulp error close to 2 */ + z = x * x + r = z * (_R02 + z*(_R03+z*(_R04+z*_R05))) + s = Float64FromInt32(1) + z*(_S01+z*(_S02+z*(_S03+z*_S04))) + return (Float64FromInt32(1)+x/Float64FromInt32(2))*(Float64FromInt32(1)-x/Float64FromInt32(2)) + z*(r/s) + } + /* 1 - x*x/4 */ + /* prevent underflow */ + /* inexact should be raised when x!=0, this is not done correctly */ + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + x = float64(0.25) * x * x + } + return Float64FromInt32(1) - x +} + +var _u00 = -Float64FromFloat64(0.07380429510868723) /* 0xBFB2E4D6, 0x99CBD01F */ +var _u01 = float64(0.17666645250918112) /* 0x3FC69D01, 0x9DE9E3FC */ +var _u02 = -Float64FromFloat64(0.01381856719455969) /* 0xBF8C4CE8, 0xB16CFA97 */ +var _u03 = float64(0.00034745343209368365) /* 0x3F36C54D, 0x20B29B6B */ +var _u04 = -Float64FromFloat64(3.8140705372436416e-06) /* 0xBECFFEA7, 0x73D25CAD */ +var _u05 = float64(1.9559013703502292e-08) /* 0x3E550057, 0x3B4EABD4 */ +var _u06 = -Float64FromFloat64(3.982051941321034e-11) /* 0xBDC5E43D, 0x693FB3C8 */ +var _v01 = float64(0.01273048348341237) /* 0x3F8A1270, 0x91C9C71A */ +var _v02 = float64(7.600686273503533e-05) /* 0x3F13ECBB, 0xF578C6C1 */ +var _v03 = float64(2.591508518404578e-07) /* 0x3E91642D, 0x7FF202FD */ +var _v04 = float64(4.4111031133267547e-10) /* 0x3DFE5018, 0x3BD6D9EF */ + +func Xy0(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y0(nan)=nan, y0(<0)=nan, y0(0)=-inf, y0(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + /* large ulp errors near zeros: 3.958, 7.086,.. */ + return _common(tls, ix, x, int32(1)) + } + /* U(x^2)/V(x^2) + (2/pi)*j0(x)*log(x) */ + if ix >= uint32(0x3e400000) { /* x >= 2**-27 */ + /* large ulp error near the first zero, x ~= 0.89 */ + z = x * x + u = _u00 + z*(_u01+z*(_u02+z*(_u03+z*(_u04+z*(_u05+z*_u06))))) + v = float64(1) + z*(_v01+z*(_v02+z*(_v03+z*_v04))) + return u/v + _tpi*(Xj0(tls, x)*Xlog(tls, x)) + } + return _u00 + _tpi*Xlog(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR8 = [6]float64{ + 1: -Float64FromFloat64(0.07031249999999004), + 2: -Float64FromFloat64(8.081670412753498), + 3: -Float64FromFloat64(257.06310567970485), + 4: -Float64FromFloat64(2485.216410094288), + 5: -Float64FromFloat64(5253.043804907295), +} +var _pS8 = [5]float64{ + 0: float64(116.53436461966818), + 1: float64(3833.7447536412183), + 2: float64(40597.857264847255), + 3: float64(116752.97256437592), + 4: float64(47627.728414673096), +} + +var _pR5 = [6]float64{ + 0: -Float64FromFloat64(1.141254646918945e-11), + 1: -Float64FromFloat64(0.07031249408735993), + 2: -Float64FromFloat64(4.159610644705878), + 3: -Float64FromFloat64(67.67476522651673), + 4: -Float64FromFloat64(331.23129964917297), + 5: -Float64FromFloat64(346.4333883656049), +} +var _pS52 = [5]float64{ + 0: float64(60.753938269230034), + 1: float64(1051.2523059570458), + 2: float64(5978.970943338558), + 3: float64(9625.445143577745), + 4: float64(2406.058159229391), +} + +var _pR3 = [6]float64{ + 0: -Float64FromFloat64(2.547046017719519e-09), + 1: -Float64FromFloat64(0.07031196163814817), + 2: -Float64FromFloat64(2.409032215495296), + 3: -Float64FromFloat64(21.96597747348831), + 4: -Float64FromFloat64(58.07917047017376), + 5: -Float64FromFloat64(31.44794705948885), +} +var _pS32 = [5]float64{ + 0: float64(35.85603380552097), + 1: float64(361.51398305030386), + 2: float64(1193.6078379211153), + 3: float64(1127.9967985690741), + 4: float64(173.58093081333575), +} + +var _pR2 = [6]float64{ + 0: -Float64FromFloat64(8.875343330325264e-08), + 1: -Float64FromFloat64(0.07030309954836247), + 2: -Float64FromFloat64(1.4507384678095299), + 3: -Float64FromFloat64(7.635696138235278), + 4: -Float64FromFloat64(11.193166886035675), + 5: -Float64FromFloat64(3.2336457935133534), +} +var _pS24 = [5]float64{ + 0: float64(22.22029975320888), + 1: float64(136.2067942182152), + 2: float64(270.4702786580835), + 3: float64(153.87539420832033), + 4: float64(14.65761769482562), +} + +func _pzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pR8)) + q = uintptr(unsafe.Pointer(&_pS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pR5)) + q = uintptr(unsafe.Pointer(&_pS52)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pR3)) + q = uintptr(unsafe.Pointer(&_pS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR2)) + q = uintptr(unsafe.Pointer(&_pS24)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR8 = [6]float64{ + 1: float64(0.0732421874999935), + 2: float64(11.76820646822527), + 3: float64(557.6733802564019), + 4: float64(8859.197207564686), + 5: float64(37014.62677768878), +} +var _qS8 = [6]float64{ + 0: float64(163.77602689568982), + 1: float64(8098.344946564498), + 2: float64(142538.29141912048), + 3: float64(803309.2571195144), + 4: float64(840501.5798190605), + 5: -Float64FromFloat64(343899.2935378666), +} + +var _qR5 = [6]float64{ + 0: float64(1.8408596359451553e-11), + 1: float64(0.07324217666126848), + 2: float64(5.8356350896205695), + 3: float64(135.11157728644983), + 4: float64(1027.243765961641), + 5: float64(1989.9778586460538), +} +var _qS5 = [6]float64{ + 0: float64(82.77661022365378), + 1: float64(2077.81416421393), + 2: float64(18847.28877857181), + 3: float64(56751.11228949473), + 4: float64(35976.75384251145), + 5: -Float64FromFloat64(5354.342756019448), +} + +var _qR3 = [6]float64{ + 0: float64(4.377410140897386e-09), + 1: float64(0.07324111800429114), + 2: float64(3.344231375161707), + 3: float64(42.621844074541265), + 4: float64(170.8080913405656), + 5: float64(166.73394869665117), +} +var _qS32 = [6]float64{ + 0: float64(48.75887297245872), + 1: float64(709.689221056606), + 2: float64(3704.1482262011136), + 3: float64(6460.425167525689), + 4: float64(2516.3336892036896), + 5: -Float64FromFloat64(149.2474518361564), +} + +var _qR2 = [6]float64{ + 0: float64(1.5044444488698327e-07), + 1: float64(0.07322342659630793), + 2: float64(1.99819174093816), + 3: float64(14.495602934788574), + 4: float64(31.666231750478154), + 5: float64(16.252707571092927), +} +var _qS22 = [6]float64{ + 0: float64(30.36558483552192), + 1: float64(269.34811860804984), + 2: float64(844.7837575953201), + 3: float64(882.9358451124886), + 4: float64(212.66638851179883), + 5: -Float64FromFloat64(5.3109549388266695), +} + +func _qzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qR8)) + q = uintptr(unsafe.Pointer(&_qS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qR5)) + q = uintptr(unsafe.Pointer(&_qS5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qR3)) + q = uintptr(unsafe.Pointer(&_qS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR2)) + q = uintptr(unsafe.Pointer(&_qS22)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (-Float64FromFloat64(0.125) + r/s) / x +} + +var _invsqrtpi1 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi1 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common1(tls *TLS, ix Tuint32_t, x float32, y0 int32) (r float32) { + var c, cc, s, ss, z float32 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + s = Xsinf(tls, x) + c = Xcosf(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + if ix < uint32(0x7f000000) { + ss = s - c + z = -Xcosf(tls, Float32FromInt32(2)*x) + if s*c < Float32FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y0 != 0 { + ss = -ss + } + cc = _pzerof(tls, x)*cc - _qzerof(tls, x)*ss + } + } + return _invsqrtpi1 * cc / Xsqrtf(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R021 = float32(0.015625) /* 0x3c800000 */ +var _R031 = float32(-Float64FromFloat64(0.00018997929874)) /* 0xb947352e */ +var _R041 = float32(1.8295404516e-06) /* 0x35f58e88 */ +var _R051 = float32(-Float64FromFloat64(4.6183270541e-09)) /* 0xb19eaf3c */ +var _S011 = float32(0.015619102865) /* 0x3c7fe744 */ +var _S021 = float32(0.00011692678527) /* 0x38f53697 */ +var _S031 = float32(5.1354652442e-07) /* 0x3509daa6 */ +var _S041 = float32(1.1661400734e-09) /* 0x30a045e8 */ + +func Xj0f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + _, _, _, _ = ix, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + x = Xfabsf(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, 0) + } + if ix >= uint32(0x3a000000) { /* |x| >= 2**-11 */ + /* up to 4ulp error near 2 */ + z = x * x + r = z * (_R021 + z*(_R031+z*(_R041+z*_R051))) + s = Float32FromInt32(1) + z*(_S011+z*(_S021+z*(_S031+z*_S041))) + return (Float32FromInt32(1)+x/Float32FromInt32(2))*(Float32FromInt32(1)-x/Float32FromInt32(2)) + z*(r/s) + } + if ix >= uint32(0x21800000) { /* |x| >= 2**-60 */ + x = Float32FromFloat32(0.25) * x * x + } + return Float32FromInt32(1) - x +} + +var _u001 = float32(-Float64FromFloat64(0.073804296553)) /* 0xbd9726b5 */ +var _u011 = float32(0.17666645348) /* 0x3e34e80d */ +var _u021 = float32(-Float64FromFloat64(0.013818567619)) /* 0xbc626746 */ +var _u031 = float32(0.00034745343146) /* 0x39b62a69 */ +var _u041 = float32(-Float64FromFloat64(3.8140706238e-06)) /* 0xb67ff53c */ +var _u051 = float32(1.9559013964e-08) /* 0x32a802ba */ +var _u061 = float32(-Float64FromFloat64(3.982051841e-11)) /* 0xae2f21eb */ +var _v011 = float32(0.012730483897) /* 0x3c509385 */ +var _v021 = float32(7.6006865129e-05) /* 0x389f65e0 */ +var _v031 = float32(2.5915085189e-07) /* 0x348b216c */ +var _v041 = float32(4.4111031494e-10) /* 0x2ff280c2 */ + +func Xy0f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, int32(1)) + } + if ix >= uint32(0x39000000) { /* x >= 2**-13 */ + /* large ulp error at x ~= 0.89 */ + z = x * x + u = _u001 + z*(_u011+z*(_u021+z*(_u031+z*(_u041+z*(_u051+z*_u061))))) + v = Float32FromInt32(1) + z*(_v011+z*(_v021+z*(_v031+z*_v041))) + return u/v + _tpi1*(Xj0f(tls, x)*Xlogf(tls, x)) + } + return _u001 + _tpi1*Xlogf(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.0703125)), + 2: float32(-Float64FromFloat64(8.0816707611)), + 3: float32(-Float64FromFloat64(257.06311035)), + 4: float32(-Float64FromFloat64(2485.2163086)), + 5: float32(-Float64FromFloat64(5253.0439453)), +} +var _pS81 = [5]float32{ + 0: float32(116.53436279), + 1: float32(3833.744873), + 2: float32(40597.855469), + 3: float32(116752.96875), + 4: float32(47627.726562), +} +var _pR51 = [6]float32{ + 0: float32(-Float64FromFloat64(1.1412546255e-11)), + 1: float32(-Float64FromFloat64(0.070312492549)), + 2: float32(-Float64FromFloat64(4.1596107483)), + 3: float32(-Float64FromFloat64(67.674766541)), + 4: float32(-Float64FromFloat64(331.23129272)), + 5: float32(-Float64FromFloat64(346.43338013)), +} +var _pS53 = [5]float32{ + 0: float32(60.753936768), + 1: float32(1051.2523193), + 2: float32(5978.9707031), + 3: float32(9625.4453125), + 4: float32(2406.0581055), +} + +var _pR31 = [6]float32{ + 0: float32(-Float64FromFloat64(2.5470459075e-09)), + 1: float32(-Float64FromFloat64(0.070311963558)), + 2: float32(-Float64FromFloat64(2.4090321064)), + 3: float32(-Float64FromFloat64(21.965976715)), + 4: float32(-Float64FromFloat64(58.079170227)), + 5: float32(-Float64FromFloat64(31.447946548)), +} +var _pS33 = [5]float32{ + 0: float32(35.856033325), + 1: float32(361.51397705), + 2: float32(1193.6077881), + 3: float32(1127.9968262), + 4: float32(173.58093262), +} + +var _pR21 = [6]float32{ + 0: float32(-Float64FromFloat64(8.8753431271e-08)), + 1: float32(-Float64FromFloat64(0.070303097367)), + 2: float32(-Float64FromFloat64(1.45073843)), + 3: float32(-Float64FromFloat64(7.6356959343)), + 4: float32(-Float64FromFloat64(11.193166733)), + 5: float32(-Float64FromFloat64(3.2336456776)), +} +var _pS25 = [5]float32{ + 0: float32(22.220300674), + 1: float32(136.20678711), + 2: float32(270.47027588), + 3: float32(153.87539673), + 4: float32(14.657617569), +} + +func _pzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pR81)) + q = uintptr(unsafe.Pointer(&_pS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pR51)) + q = uintptr(unsafe.Pointer(&_pS53)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pR31)) + q = uintptr(unsafe.Pointer(&_pS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR21)) + q = uintptr(unsafe.Pointer(&_pS25)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR81 = [6]float32{ + 1: float32(0.0732421875), + 2: float32(11.768206596), + 3: float32(557.67340088), + 4: float32(8859.1972656), + 5: float32(37014.625), +} +var _qS81 = [6]float32{ + 0: float32(163.77603149), + 1: float32(8098.3447266), + 2: float32(142538.29688), + 3: float32(803309.25), + 4: float32(840501.5625), + 5: float32(-Float64FromFloat64(343899.28125)), +} + +var _qR51 = [6]float32{ + 0: float32(1.8408595828e-11), + 1: float32(0.073242180049), + 2: float32(5.8356351852), + 3: float32(135.11157227), + 4: float32(1027.2437744), + 5: float32(1989.9779053), +} +var _qS51 = [6]float32{ + 0: float32(82.776611328), + 1: float32(2077.814209), + 2: float32(18847.289062), + 3: float32(56751.113281), + 4: float32(35976.753906), + 5: float32(-Float64FromFloat64(5354.3427734)), +} + +var _qR31 = [6]float32{ + 0: float32(4.37740999e-09), + 1: float32(0.073241114616), + 2: float32(3.3442313671), + 3: float32(42.621845245), + 4: float32(170.80809021), + 5: float32(166.73394775), +} +var _qS33 = [6]float32{ + 0: float32(48.758872986), + 1: float32(709.68920898), + 2: float32(3704.1481934), + 3: float32(6460.425293), + 4: float32(2516.3337402), + 5: float32(-Float64FromFloat64(149.24745178)), +} + +var _qR21 = [6]float32{ + 0: float32(1.5044444979e-07), + 1: float32(0.073223426938), + 2: float32(1.9981917143), + 3: float32(14.495602608), + 4: float32(31.666231155), + 5: float32(16.252708435), +} +var _qS23 = [6]float32{ + 0: float32(30.365585327), + 1: float32(269.34811401), + 2: float32(844.78375244), + 3: float32(882.93585205), + 4: float32(212.66638184), + 5: float32(-Float64FromFloat64(5.3109550476)), +} + +func _qzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qR81)) + q = uintptr(unsafe.Pointer(&_qS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qR51)) + q = uintptr(unsafe.Pointer(&_qS51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qR31)) + q = uintptr(unsafe.Pointer(&_qS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR21)) + q = uintptr(unsafe.Pointer(&_qS23)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (-Float32FromFloat32(0.125) + r/s) / x +} + +var _invsqrtpi2 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +func _common2(tls *TLS, ix Tuint32_t, x float64, y1 int32, sign int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x-3pi/4)-q1(x)*sin(x-3pi/4)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x-3pi/4)+q1(x)*cos(x-3pi/4)) + * + * sin(x-3pi/4) = -(sin(x) + cos(x))/sqrt(2) + * cos(x-3pi/4) = (sin(x) - cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + if y1 != 0 { + s = -s + } + c = Xcos(tls, x) + cc = s - c + if ix < uint32(0x7fe00000) { + /* avoid overflow in 2*x */ + ss = -s - c + z = Xcos(tls, Float64FromInt32(2)*x) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y1 != 0 { + ss = -ss + } + cc = _pone(tls, x)*cc - _qone(tls, x)*ss + } + } + if sign != 0 { + cc = -cc + } + return _invsqrtpi2 * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r00 = -Float64FromFloat64(0.0625) /* 0xBFB00000, 0x00000000 */ +var _r01 = float64(0.001407056669551897) /* 0x3F570D9F, 0x98472C61 */ +var _r02 = -Float64FromFloat64(1.599556310840356e-05) /* 0xBEF0C5C6, 0xBA169668 */ +var _r03 = float64(4.9672799960958445e-08) /* 0x3E6AAAFA, 0x46CA0BD9 */ +var _s01 = float64(0.019153759953836346) /* 0x3F939D0B, 0x12637E53 */ +var _s02 = float64(0.00018594678558863092) /* 0x3F285F56, 0xB9CDF664 */ +var _s03 = float64(1.1771846404262368e-06) /* 0x3EB3BFF8, 0x333F8498 */ +var _s04 = float64(5.0463625707621704e-09) /* 0x3E35AC88, 0xC97DFF2C */ +var _s05 = float64(1.2354227442613791e-11) /* 0x3DAB2ACF, 0xCFB97ED8 */ + +func Xj1(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common2(tls, ix, Xfabs(tls, x), 0, sign) + } + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + z = x * x + r = z * (_r00 + z*(_r01+z*(_r02+z*_r03))) + s = Float64FromInt32(1) + z*(_s01+z*(_s02+z*(_s03+z*(_s04+z*_s05)))) + z = r / s + } else { + /* avoid underflow, raise inexact if x!=0 */ + z = x + } + return (float64(0.5) + z) * x +} + +var _U0 = [5]float64{ + 0: -Float64FromFloat64(0.19605709064623894), + 1: float64(0.05044387166398113), + 2: -Float64FromFloat64(0.0019125689587576355), + 3: float64(2.352526005616105e-05), + 4: -Float64FromFloat64(9.190991580398789e-08), +} +var _V0 = [5]float64{ + 0: float64(0.01991673182366499), + 1: float64(0.00020255258102513517), + 2: float64(1.3560880109751623e-06), + 3: float64(6.227414523646215e-09), + 4: float64(1.6655924620799208e-11), +} + +func Xy1(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + return _common2(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x3c900000) { /* x < 2**-54 */ + return -_tpi2 / x + } + z = x * x + u = _U0[0] + z*(_U0[int32(1)]+z*(_U0[int32(2)]+z*(_U0[int32(3)]+z*_U0[int32(4)]))) + v = Float64FromInt32(1) + z*(_V0[0]+z*(_V0[int32(1)]+z*(_V0[int32(2)]+z*(_V0[int32(3)]+z*_V0[int32(4)])))) + return x*(u/v) + _tpi2*(Xj1(tls, x)*Xlog(tls, x)-Float64FromInt32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr8 = [6]float64{ + 1: float64(0.11718749999998865), + 2: float64(13.239480659307358), + 3: float64(412.05185430737856), + 4: float64(3874.7453891396053), + 5: float64(7914.479540318917), +} +var _ps8 = [5]float64{ + 0: float64(114.20737037567841), + 1: float64(3650.9308342085346), + 2: float64(36956.206026903346), + 3: float64(97602.79359349508), + 4: float64(30804.27206278888), +} + +var _pr5 = [6]float64{ + 0: float64(1.3199051955624352e-11), + 1: float64(0.1171874931906141), + 2: float64(6.802751278684329), + 3: float64(108.30818299018911), + 4: float64(517.6361395331998), + 5: float64(528.7152013633375), +} +var _ps5 = [5]float64{ + 0: float64(59.28059872211313), + 1: float64(991.4014187336144), + 2: float64(5353.26695291488), + 3: float64(7844.690317495512), + 4: float64(1504.0468881036106), +} + +var _pr3 = [6]float64{ + 0: float64(3.025039161373736e-09), + 1: float64(0.11718686556725359), + 2: float64(3.9329775003331564), + 3: float64(35.11940355916369), + 4: float64(91.05501107507813), + 5: float64(48.55906851973649), +} +var _ps3 = [5]float64{ + 0: float64(34.79130950012515), + 1: float64(336.76245874782575), + 2: float64(1046.8713997577513), + 3: float64(890.8113463982564), + 4: float64(103.78793243963928), +} + +var _pr2 = [6]float64{ + 0: float64(1.0771083010687374e-07), + 1: float64(0.11717621946268335), + 2: float64(2.368514966676088), + 3: float64(12.242610914826123), + 4: float64(17.693971127168773), + 5: float64(5.073523125888185), +} +var _ps2 = [5]float64{ + 0: float64(21.43648593638214), + 1: float64(125.29022716840275), + 2: float64(232.2764690571628), + 3: float64(117.6793732871471), + 4: float64(8.364638933716183), +} + +func _pone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pr8)) + q = uintptr(unsafe.Pointer(&_ps8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pr5)) + q = uintptr(unsafe.Pointer(&_ps5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pr3)) + q = uintptr(unsafe.Pointer(&_ps3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr2)) + q = uintptr(unsafe.Pointer(&_ps2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr8 = [6]float64{ + 1: -Float64FromFloat64(0.10253906249999271), + 2: -Float64FromFloat64(16.271753454459), + 3: -Float64FromFloat64(759.6017225139501), + 4: -Float64FromFloat64(11849.806670242959), + 5: -Float64FromFloat64(48438.512428575035), +} +var _qs8 = [6]float64{ + 0: float64(161.3953697007229), + 1: float64(7825.385999233485), + 2: float64(133875.33628724958), + 3: float64(719657.7236832409), + 4: float64(666601.2326177764), + 5: -Float64FromFloat64(294490.26430383464), +} + +var _qr5 = [6]float64{ + 0: -Float64FromFloat64(2.089799311417641e-11), + 1: -Float64FromFloat64(0.10253905024137543), + 2: -Float64FromFloat64(8.05644828123936), + 3: -Float64FromFloat64(183.66960747488838), + 4: -Float64FromFloat64(1373.1937606550816), + 5: -Float64FromFloat64(2612.4444045321566), +} +var _qs5 = [6]float64{ + 0: float64(81.27655013843358), + 1: float64(1991.7987346048596), + 2: float64(17468.48519249089), + 3: float64(49851.42709103523), + 4: float64(27948.075163891812), + 5: -Float64FromFloat64(4719.183547951285), +} + +var _qr3 = [6]float64{ + 0: -Float64FromFloat64(5.078312264617666e-09), + 1: -Float64FromFloat64(0.10253782982083709), + 2: -Float64FromFloat64(4.610115811394734), + 3: -Float64FromFloat64(57.847221656278364), + 4: -Float64FromFloat64(228.2445407376317), + 5: -Float64FromFloat64(219.21012847890933), +} +var _qs3 = [6]float64{ + 0: float64(47.66515503237295), + 1: float64(673.8651126766997), + 2: float64(3380.1528667952634), + 3: float64(5547.729097207228), + 4: float64(1903.119193388108), + 5: -Float64FromFloat64(135.20119144430734), +} + +var _qr2 = [6]float64{ + 0: -Float64FromFloat64(1.7838172751095887e-07), + 1: -Float64FromFloat64(0.10251704260798555), + 2: -Float64FromFloat64(2.7522056827818746), + 3: -Float64FromFloat64(19.663616264370372), + 4: -Float64FromFloat64(42.32531333728305), + 5: -Float64FromFloat64(21.371921170370406), +} +var _qs2 = [6]float64{ + 0: float64(29.533362906052385), + 1: float64(252.98154998219053), + 2: float64(757.5028348686454), + 3: float64(739.3932053204672), + 4: float64(155.94900333666612), + 5: -Float64FromFloat64(4.959498988226282), +} + +func _qone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qr8)) + q = uintptr(unsafe.Pointer(&_qs8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qr5)) + q = uintptr(unsafe.Pointer(&_qs5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qr3)) + q = uintptr(unsafe.Pointer(&_qs3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr2)) + q = uintptr(unsafe.Pointer(&_qs2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (float64(0.375) + r/s) / x +} + +var _invsqrtpi3 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi3 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common3(tls *TLS, ix Tuint32_t, x float32, y1 int32, sign int32) (r float32) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + s = float64(Xsinf(tls, x)) + if y1 != 0 { + s = -s + } + c = float64(Xcosf(tls, x)) + cc = s - c + if ix < uint32(0x7f000000) { + ss = -s - c + z = float64(Xcosf(tls, Float32FromInt32(2)*x)) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y1 != 0 { + ss = -ss + } + cc = float64(_ponef(tls, x))*cc - float64(_qonef(tls, x))*ss + } + } + if sign != 0 { + cc = -cc + } + return float32(float64(_invsqrtpi3) * cc / float64(Xsqrtf(tls, x))) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r001 = float32(-Float64FromFloat64(0.0625)) /* 0xbd800000 */ +var _r011 = float32(0.0014070566976) /* 0x3ab86cfd */ +var _r021 = float32(-Float64FromFloat64(1.5995563444e-05)) /* 0xb7862e36 */ +var _r031 = float32(4.9672799207e-08) /* 0x335557d2 */ +var _s011 = float32(0.019153760746) /* 0x3c9ce859 */ +var _s021 = float32(0.00018594678841) /* 0x3942fab6 */ +var _s031 = float32(1.1771846857e-06) /* 0x359dffc2 */ +var _s041 = float32(5.046362439e-09) /* 0x31ad6446 */ +var _s051 = float32(1.2354227016e-11) /* 0x2d59567e */ + +func Xj1f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common3(tls, ix, Xfabsf(tls, x), 0, sign) + } + if ix >= uint32(0x39000000) { /* |x| >= 2**-13 */ + z = x * x + r = z * (_r001 + z*(_r011+z*(_r021+z*_r031))) + s = Float32FromInt32(1) + z*(_s011+z*(_s021+z*(_s031+z*(_s041+z*_s051)))) + z = Float32FromFloat32(0.5) + r/s + } else { + z = Float32FromFloat32(0.5) + } + return z * x +} + +var _U01 = [5]float32{ + 0: float32(-Float64FromFloat64(0.19605709612)), + 1: float32(0.050443872809), + 2: float32(-Float64FromFloat64(0.0019125689287)), + 3: float32(2.3525259166e-05), + 4: float32(-Float64FromFloat64(9.1909917899e-08)), +} +var _V01 = [5]float32{ + 0: float32(0.019916731864), + 1: float32(0.0002025525755), + 2: float32(1.3560879779e-06), + 3: float32(6.227414584e-09), + 4: float32(1.6655924903e-11), +} + +func Xy1f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + return _common3(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x33000000) { /* x < 2**-25 */ + return -_tpi3 / x + } + z = x * x + u = _U01[0] + z*(_U01[int32(1)]+z*(_U01[int32(2)]+z*(_U01[int32(3)]+z*_U01[int32(4)]))) + v = Float32FromFloat32(1) + z*(_V01[0]+z*(_V01[int32(1)]+z*(_V01[int32(2)]+z*(_V01[int32(3)]+z*_V01[int32(4)])))) + return x*(u/v) + _tpi3*(Xj1f(tls, x)*Xlogf(tls, x)-Float32FromFloat32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr81 = [6]float32{ + 1: float32(0.1171875), + 2: float32(13.239480972), + 3: float32(412.05184937), + 4: float32(3874.7453613), + 5: float32(7914.4794922), +} +var _ps81 = [5]float32{ + 0: float32(114.20736694), + 1: float32(3650.9309082), + 2: float32(36956.207031), + 3: float32(97602.796875), + 4: float32(30804.271484), +} + +var _pr51 = [6]float32{ + 0: float32(1.3199052094e-11), + 1: float32(0.11718749255), + 2: float32(6.8027510643), + 3: float32(108.30818176), + 4: float32(517.63616943), + 5: float32(528.71520996), +} +var _ps51 = [5]float32{ + 0: float32(59.280597687), + 1: float32(991.40142822), + 2: float32(5353.2670898), + 3: float32(7844.6904297), + 4: float32(1504.046875), +} + +var _pr31 = [6]float32{ + 0: float32(3.0250391081e-09), + 1: float32(0.1171868667), + 2: float32(3.932977438), + 3: float32(35.119403839), + 4: float32(91.055007935), + 5: float32(48.559066772), +} +var _ps31 = [5]float32{ + 0: float32(34.791309357), + 1: float32(336.76245117), + 2: float32(1046.87146), + 3: float32(890.81134033), + 4: float32(103.78793335), +} + +var _pr21 = [6]float32{ + 0: float32(1.0771083225e-07), + 1: float32(0.11717621982), + 2: float32(2.3685150146), + 3: float32(12.242610931), + 4: float32(17.693971634), + 5: float32(5.0735230446), +} +var _ps21 = [5]float32{ + 0: float32(21.436485291), + 1: float32(125.2902298), + 2: float32(232.276474), + 3: float32(117.67937469), + 4: float32(8.3646392822), +} + +func _ponef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pr81)) + q = uintptr(unsafe.Pointer(&_ps81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pr51)) + q = uintptr(unsafe.Pointer(&_ps51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pr31)) + q = uintptr(unsafe.Pointer(&_ps31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr21)) + q = uintptr(unsafe.Pointer(&_ps21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.1025390625)), + 2: float32(-Float64FromFloat64(16.271753311)), + 3: float32(-Float64FromFloat64(759.60174561)), + 4: float32(-Float64FromFloat64(11849.806641)), + 5: float32(-Float64FromFloat64(48438.511719)), +} +var _qs81 = [6]float32{ + 0: float32(161.39537048), + 1: float32(7825.3862305), + 2: float32(133875.34375), + 3: float32(719657.75), + 4: float32(666601.25), + 5: float32(-Float64FromFloat64(294490.25)), +} + +var _qr51 = [6]float32{ + 0: float32(-Float64FromFloat64(2.0897993405e-11)), + 1: float32(-Float64FromFloat64(0.1025390476)), + 2: float32(-Float64FromFloat64(8.0564479828)), + 3: float32(-Float64FromFloat64(183.66960144)), + 4: float32(-Float64FromFloat64(1373.1937256)), + 5: float32(-Float64FromFloat64(2612.4443359)), +} +var _qs51 = [6]float32{ + 0: float32(81.276550293), + 1: float32(1991.7987061), + 2: float32(17468.484375), + 3: float32(49851.425781), + 4: float32(27948.074219), + 5: float32(-Float64FromFloat64(4719.1835938)), +} + +var _qr31 = [6]float32{ + 0: float32(-Float64FromFloat64(5.0783124372e-09)), + 1: float32(-Float64FromFloat64(0.10253783315)), + 2: float32(-Float64FromFloat64(4.6101160049)), + 3: float32(-Float64FromFloat64(57.847221375)), + 4: float32(-Float64FromFloat64(228.24453735)), + 5: float32(-Float64FromFloat64(219.21012878)), +} +var _qs31 = [6]float32{ + 0: float32(47.665153503), + 1: float32(673.8651123), + 2: float32(3380.152832), + 3: float32(5547.7290039), + 4: float32(1903.1191406), + 5: float32(-Float64FromFloat64(135.20118713)), +} + +var _qr21 = [6]float32{ + 0: float32(-Float64FromFloat64(1.7838172539e-07)), + 1: float32(-Float64FromFloat64(0.10251704603)), + 2: float32(-Float64FromFloat64(2.7522056103)), + 3: float32(-Float64FromFloat64(19.66361618)), + 4: float32(-Float64FromFloat64(42.325313568)), + 5: float32(-Float64FromFloat64(21.371921539)), +} +var _qs21 = [6]float32{ + 0: float32(29.533363342), + 1: float32(252.98155212), + 2: float32(757.50280762), + 3: float32(739.39318848), + 4: float32(155.94900513), + 5: float32(-Float64FromFloat64(4.9594988823)), +} + +func _qonef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qr81)) + q = uintptr(unsafe.Pointer(&_qs81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qr51)) + q = uintptr(unsafe.Pointer(&_qs51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qr31)) + q = uintptr(unsafe.Pointer(&_qs31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr21)) + q = uintptr(unsafe.Pointer(&_qs21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (Float32FromFloat32(0.375) + r/s) / x +} + +var _invsqrtpi4 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ + +func Xjn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float64 + var i, k, nm1, sign int32 + var ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, h, i, ix, k, lx, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + /* nm1 = |n|-1 is used instead of |n| to handle n==INT_MIN */ + if n == 0 { + return Xj0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabs(tls, x) + if ix|lx == uint32(0) || ix == uint32(0x7ff00000) { /* if x is 0 or inf */ + b = float64(0) + } else { + if float64(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xcos(tls, x) + Xsin(tls, x) + case int32(1): + temp = -Xcos(tls, x) - Xsin(tls, x) + case int32(2): + temp = Xcos(tls, x) - Xsin(tls, x) + default: + fallthrough + case int32(3): + temp = Xcos(tls, x) + Xsin(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xj0(tls, x) + b = Xj1(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(float64(2)*float64(i)/x) - a /* avoid underflow */ + a = temp + goto _1 + _1: + } + } + } else { + if ix < uint32(0x3e100000) { /* x < 2**-29 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(32) { /* underflow */ + b = float64(0) + } else { + temp = x * float64(0.5) + b = temp + a = float64(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float64(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } + } else { + nf = float64(nm1) + float64(1) + w = Float64FromInt32(2) * nf / x + h = Float64FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - float64(1) + k = int32(1) + for q1 < float64(1e+09) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = float64(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float64FromInt32(1) / (Float64FromInt32(2)*(float64(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = float64(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlog(tls, Xfabs(tls, w)) + if tmp < float64(709.782712893384) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > float64(3.273390607896142e+150) { + a /= b + t /= b + b = float64(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0(tls, x) + w = Xj1(tls, x) + if Xfabs(tls, z) >= Xfabs(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xyn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, temp, v1, v3 float64 + var i, nm1, sign int32 + var ib, ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, i, ib, ix, lx, nm1, sign, temp, v1, v3 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + if sign != 0 && ix|lx != uint32(0) { /* x < 0 */ + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix == uint32(0x7ff00000) { + return float64(0) + } + if n == 0 { + return Xy0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1(tls, x) + } else { + v1 = Xy1(tls, x) + } + return v1 + } + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xsin(tls, x) - Xcos(tls, x) + case int32(1): + temp = -Xsin(tls, x) + Xcos(tls, x) + case int32(2): + temp = Xsin(tls, x) + Xcos(tls, x) + default: + fallthrough + case int32(3): + temp = Xsin(tls, x) - Xcos(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xy0(tls, x) + b = Xy1(tls, x) + /* quit if b is -inf */ + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xfff00000)) { + break + } + i++ + temp = b + b = float64(2)*float64(i)/x*b - a + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + a = temp + goto _2 + _2: + } + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xjnf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float32 + var i, k, nm1, sign int32 + var ix Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, h, i, ix, k, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + /* J(-n,x) = J(n,-x), use |n|-1 to avoid overflow in -n */ + if n == 0 { + return Xj0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1f(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabsf(tls, x) + if ix == uint32(0) || ix == uint32(0x7f800000) { /* if x is 0 or inf */ + b = Float32FromFloat32(0) + } else { + if float32(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = Xj0f(tls, x) + b = Xj1f(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(Float32FromFloat32(2)*float32(i)/x) - a + a = temp + goto _1 + _1: + } + } else { + if ix < uint32(0x35800000) { /* x < 2**-20 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(8) { /* underflow */ + nm1 = int32(8) + } + temp = Float32FromFloat32(0.5) * x + b = temp + a = Float32FromFloat32(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float32(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } else { + nf = float32(nm1) + Float32FromFloat32(1) + w = Float32FromInt32(2) * nf / x + h = Float32FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - Float32FromFloat32(1) + k = int32(1) + for q1 < Float32FromFloat32(10000) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = Float32FromFloat32(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float32FromFloat32(1) / (Float32FromInt32(2)*(float32(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = Float32FromFloat32(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlogf(tls, Xfabsf(tls, w)) + if tmp < Float32FromFloat32(88.721679688) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > Float32FromFloat32(1.152921504606847e+18) { + a /= b + t /= b + b = Float32FromFloat32(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0f(tls, x) + w = Xj1f(tls, x) + if Xfabsf(tls, z) >= Xfabsf(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xynf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, temp, v1, v3 float32 + var i, nm1, sign int32 + var ib, ix Tuint32_t + _, _, _, _, _, _, _, _, _, _ = a, b, i, ib, ix, nm1, sign, temp, v1, v3 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + if sign != 0 && ix != uint32(0) { /* x < 0 */ + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix == uint32(0x7f800000) { + return Float32FromFloat32(0) + } + if n == 0 { + return Xy0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1f(tls, x) + } else { + v1 = Xy1f(tls, x) + } + return v1 + } + a = Xy0f(tls, x) + b = Xy1f(tls, x) + /* quit if b is -inf */ + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xff800000)) { + break + } + i++ + temp = b + b = Float32FromFloat32(2)*float32(i)/x*b - a + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + a = temp + goto _2 + _2: + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xldexp(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xldexpf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, n) +} + +func Xldexpl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnl(tls, x, n) +} + +func Xlgamma(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi2 = float64(3.141592653589793) /* 0x400921FB, 0x54442D18 */ +var _a0 = float64(0.07721566490153287) /* 0x3FB3C467, 0xE37DB0C8 */ +var _a1 = float64(0.3224670334241136) /* 0x3FD4A34C, 0xC4A60FAD */ +var _a2 = float64(0.06735230105312927) /* 0x3FB13E00, 0x1A5562A7 */ +var _a3 = float64(0.020580808432516733) /* 0x3F951322, 0xAC92547B */ +var _a4 = float64(0.007385550860814029) /* 0x3F7E404F, 0xB68FEFE8 */ +var _a5 = float64(0.0028905138367341563) /* 0x3F67ADD8, 0xCCB7926B */ +var _a6 = float64(0.0011927076318336207) /* 0x3F538A94, 0x116F3F5D */ +var _a7 = float64(0.0005100697921535113) /* 0x3F40B6C6, 0x89B99C00 */ +var _a8 = float64(0.00022086279071390839) /* 0x3F2CF2EC, 0xED10E54D */ +var _a9 = float64(0.00010801156724758394) /* 0x3F1C5088, 0x987DFB07 */ +var _a10 = float64(2.5214456545125733e-05) /* 0x3EFA7074, 0x428CFA52 */ +var _a11 = float64(4.4864094961891516e-05) /* 0x3F07858E, 0x90A45837 */ +var _tc = float64(1.4616321449683622) /* 0x3FF762D8, 0x6356BE3F */ +var _tf = -Float64FromFloat64(0.12148629053584961) /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +var _tt = -Float64FromFloat64(3.638676997039505e-18) /* 0xBC50C7CA, 0xA48A971F */ +var _t0 = float64(0.48383612272381005) /* 0x3FDEF72B, 0xC8EE38A2 */ +var _t1 = -Float64FromFloat64(0.1475877229945939) /* 0xBFC2E427, 0x8DC6C509 */ +var _t2 = float64(0.06462494023913339) /* 0x3FB08B42, 0x94D5419B */ +var _t3 = -Float64FromFloat64(0.032788541075985965) /* 0xBFA0C9A8, 0xDF35B713 */ +var _t4 = float64(0.01797067508118204) /* 0x3F9266E7, 0x970AF9EC */ +var _t5 = -Float64FromFloat64(0.010314224129834144) /* 0xBF851F9F, 0xBA91EC6A */ +var _t6 = float64(0.006100538702462913) /* 0x3F78FCE0, 0xE370E344 */ +var _t7 = -Float64FromFloat64(0.0036845201678113826) /* 0xBF6E2EFF, 0xB3E914D7 */ +var _t8 = float64(0.0022596478090061247) /* 0x3F6282D3, 0x2E15C915 */ +var _t9 = -Float64FromFloat64(0.0014034646998923284) /* 0xBF56FE8E, 0xBF2D1AF1 */ +var _t10 = float64(0.000881081882437654) /* 0x3F4CDF0C, 0xEF61A8E9 */ +var _t11 = -Float64FromFloat64(0.0005385953053567405) /* 0xBF41A610, 0x9C73E0EC */ +var _t12 = float64(0.00031563207090362595) /* 0x3F34AF6D, 0x6C0EBBF7 */ +var _t13 = -Float64FromFloat64(0.00031275416837512086) /* 0xBF347F24, 0xECC38C38 */ +var _t14 = float64(0.0003355291926355191) /* 0x3F35FD3E, 0xE8C2D3F4 */ +var _u0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _u1 = float64(0.6328270640250934) /* 0x3FE4401E, 0x8B005DFF */ +var _u2 = float64(1.4549225013723477) /* 0x3FF7475C, 0xD119BD6F */ +var _u3 = float64(0.9777175279633727) /* 0x3FEF4976, 0x44EA8450 */ +var _u4 = float64(0.22896372806469245) /* 0x3FCD4EAE, 0xF6010924 */ +var _u5 = float64(0.013381091853678766) /* 0x3F8B678B, 0xBF2BAB09 */ +var _v1 = float64(2.4559779371304113) /* 0x4003A5D7, 0xC2BD619C */ +var _v2 = float64(2.128489763798934) /* 0x40010725, 0xA42B18F5 */ +var _v3 = float64(0.7692851504566728) /* 0x3FE89DFB, 0xE45050AF */ +var _v4 = float64(0.10422264559336913) /* 0x3FBAAE55, 0xD6537C88 */ +var _v5 = float64(0.003217092422824239) /* 0x3F6A5ABB, 0x57D0CF61 */ +var _s0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _s1 = float64(0.21498241596060885) /* 0x3FCB848B, 0x36E20878 */ +var _s2 = float64(0.325778796408931) /* 0x3FD4D98F, 0x4F139F59 */ +var _s3 = float64(0.14635047265246445) /* 0x3FC2BB9C, 0xBEE5F2F7 */ +var _s4 = float64(0.02664227030336386) /* 0x3F9B481C, 0x7E939961 */ +var _s5 = float64(0.0018402845140733772) /* 0x3F5E26B6, 0x7368F239 */ +var _s6 = float64(3.194753265841009e-05) /* 0x3F00BFEC, 0xDD17E945 */ +var _r1 = float64(1.3920053346762105) /* 0x3FF645A7, 0x62C4AB74 */ +var _r2 = float64(0.7219355475671381) /* 0x3FE71A18, 0x93D3DCDC */ +var _r3 = float64(0.17193386563280308) /* 0x3FC601ED, 0xCCFBDF27 */ +var _r4 = float64(0.01864591917156529) /* 0x3F9317EA, 0x742ED475 */ +var _r5 = float64(0.0007779424963818936) /* 0x3F497DDA, 0xCA41A95B */ +var _r6 = float64(7.326684307446256e-06) /* 0x3EDEBAF7, 0xA5B38140 */ +var _w0 = float64(0.4189385332046727) /* 0x3FDACFE3, 0x90C97D69 */ +var _w1 = float64(0.08333333333333297) /* 0x3FB55555, 0x5555553B */ +var _w2 = -Float64FromFloat64(0.0027777777772877554) /* 0xBF66C16C, 0x16B02E5C */ +var _w3 = float64(0.0007936505586430196) /* 0x3F4A019F, 0x98CF38B6 */ +var _w4 = -Float64FromFloat64(0.00059518755745034) /* 0xBF4380CB, 0x8C0FE741 */ +var _w5 = float64(0.0008363399189962821) /* 0x3F4B67BA, 0x4CDAD5D1 */ +var _w6 = -Float64FromFloat64(0.0016309293409657527) /* 0xBF5AB89D, 0x0B9E43E4 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* spurious inexact if odd int */ + x = float64(2) * (x*float64(0.5) - Xfloor(tls, x*float64(0.5))) /* x mod 2.0 */ + n = int32(x * Float64FromFloat64(4)) + n = (n + int32(1)) / int32(2) + x -= float64(float32(n) * Float32FromFloat32(0.5)) + x *= _pi2 + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sin(tls, x, float64(0), 0) + case int32(1): + return X__cos(tls, x, float64(0)) + case int32(2): + return X__sin(tls, -x, float64(0), 0) + case int32(3): + return -X__cos(tls, x, float64(0)) + } + return r +} + +func X__lgamma_r(tls *TLS, x float64, signgamp uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix >= uint32(0x7ff00000) { + return x * x + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(70))< float64(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlog(tls, _pi2/(t*x)) + } + /* purge off 1 and 2 */ + if (ix == uint32(0x3ff00000) || ix == uint32(0x40000000)) && uint32(*(*Tuint64_t)(unsafe.Pointer(bp))) == uint32(0) { + r = Float64FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlog(tls, x) + if ix >= uint32(0x3FE76944) { + y = float64(1) - x + i = 0 + } else { + if ix >= uint32(0x3FCDA661) { + y = x - (_tc - Float64FromFloat64(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = float64(0) + if ix >= uint32(0x3FFBB4C3) { /* [1.7316,2] */ + y = float64(2) - x + i = 0 + } else { + if ix >= uint32(0x3FF3B4C4) { /* [1.23,1.73] */ + y = x - _tc + i = int32(1) + } else { + y = x - float64(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a0 + z*(_a2+z*(_a4+z*(_a6+z*(_a8+z*_a10)))) + p2 = z * (_a1 + z*(_a3+z*(_a5+z*(_a7+z*(_a9+z*_a11))))) + p = y*p1 + p2 + r += p - float64(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t0 + w*(_t3+w*(_t6+w*(_t9+w*_t12))) /* parallel comp */ + p2 = _t1 + w*(_t4+w*(_t7+w*(_t10+w*_t13))) + p3 = _t2 + w*(_t5+w*(_t8+w*(_t11+w*_t14))) + p = z*p1 - (_tt - w*(p2+y*p3)) + r += _tf + p + case int32(2): + p1 = y * (_u0 + y*(_u1+y*(_u2+y*(_u3+y*(_u4+y*_u5))))) + p2 = float64(1) + y*(_v1+y*(_v2+y*(_v3+y*(_v4+y*_v5)))) + r += -Float64FromFloat64(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x40200000) { /* x < 8.0 */ + i = int32(x) + y = x - float64(i) + p = y * (_s0 + y*(_s1+y*(_s2+y*(_s3+y*(_s4+y*(_s5+y*_s6)))))) + q = float64(1) + y*(_r1+y*(_r2+y*(_r3+y*(_r4+y*(_r5+y*_r6))))) + r = float64(0.5)*y + p/q + z = float64(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + float64(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + float64(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + float64(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + float64(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + float64(2) /* FALLTHRU */ + r += Xlog(tls, z) + break + } + } else { + if ix < uint32(0x43900000) { /* 8.0 <= x < 2**58 */ + t = Xlog(tls, x) + z = float64(1) / x + y = z * z + w = _w0 + z*(_w1+y*(_w2+y*(_w3+y*(_w4+y*(_w5+y*_w6))))) + r = (x-float64(0.5))*(t-Float64FromFloat64(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlog(tls, x) - float64(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgamma_r(tls *TLS, x float64, signgamp uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, signgamp) +} + +func Xlgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi3 = float32(3.141592741) /* 0x40490fdb */ +var _a01 = float32(0.077215664089) /* 0x3d9e233f */ +var _a12 = float32(0.32246702909) /* 0x3ea51a66 */ +var _a21 = float32(0.067352302372) /* 0x3d89f001 */ +var _a31 = float32(0.020580807701) /* 0x3ca89915 */ +var _a41 = float32(0.0073855509982) /* 0x3bf2027e */ +var _a51 = float32(0.0028905137442) /* 0x3b3d6ec6 */ +var _a61 = float32(0.0011927076848) /* 0x3a9c54a1 */ +var _a71 = float32(0.00051006977446) /* 0x3a05b634 */ +var _a81 = float32(0.00022086278477) /* 0x39679767 */ +var _a91 = float32(0.00010801156895) /* 0x38e28445 */ +var _a101 = float32(2.52144564e-05) /* 0x37d383a2 */ +var _a111 = float32(4.4864096708e-05) /* 0x383c2c75 */ +var _tc1 = float32(1.4616321325) /* 0x3fbb16c3 */ +var _tf1 = float32(-Float64FromFloat64(0.12148628384)) /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +var _tt1 = float32(6.6971006518e-09) /* 0x31e61c52 */ +var _t01 = float32(0.48383611441) /* 0x3ef7b95e */ +var _t15 = float32(-Float64FromFloat64(0.14758771658)) /* 0xbe17213c */ +var _t21 = float32(0.064624942839) /* 0x3d845a15 */ +var _t31 = float32(-Float64FromFloat64(0.032788541168)) /* 0xbd064d47 */ +var _t41 = float32(0.017970675603) /* 0x3c93373d */ +var _t51 = float32(-Float64FromFloat64(0.010314224288)) /* 0xbc28fcfe */ +var _t61 = float32(0.0061005386524) /* 0x3bc7e707 */ +var _t71 = float32(-Float64FromFloat64(0.0036845202558)) /* 0xbb7177fe */ +var _t81 = float32(0.0022596477065) /* 0x3b141699 */ +var _t91 = float32(-Float64FromFloat64(0.0014034647029)) /* 0xbab7f476 */ +var _t101 = float32(0.00088108185446) /* 0x3a66f867 */ +var _t111 = float32(-Float64FromFloat64(0.00053859531181)) /* 0xba0d3085 */ +var _t121 = float32(0.00031563205994) /* 0x39a57b6b */ +var _t131 = float32(-Float64FromFloat64(0.00031275415677)) /* 0xb9a3f927 */ +var _t141 = float32(0.00033552918467) /* 0x39afe9f7 */ +var _u07 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _u11 = float32(0.63282704353) /* 0x3f2200f4 */ +var _u21 = float32(1.4549225569) /* 0x3fba3ae7 */ +var _u31 = float32(0.97771751881) /* 0x3f7a4bb2 */ +var _u41 = float32(0.22896373272) /* 0x3e6a7578 */ +var _u51 = float32(0.013381091878) /* 0x3c5b3c5e */ +var _v11 = float32(2.4559779167) /* 0x401d2ebe */ +var _v21 = float32(2.1284897327) /* 0x4008392d */ +var _v31 = float32(0.76928514242) /* 0x3f44efdf */ +var _v41 = float32(0.10422264785) /* 0x3dd572af */ +var _v51 = float32(0.0032170924824) /* 0x3b52d5db */ +var _s06 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _s11 = float32(0.21498242021) /* 0x3e5c245a */ +var _s21 = float32(0.32577878237) /* 0x3ea6cc7a */ +var _s31 = float32(0.14635047317) /* 0x3e15dce6 */ +var _s41 = float32(0.026642270386) /* 0x3cda40e4 */ +var _s51 = float32(0.0018402845599) /* 0x3af135b4 */ +var _s61 = float32(3.1947532989e-05) /* 0x3805ff67 */ +var _r11 = float32(1.3920053244) /* 0x3fb22d3b */ +var _r21 = float32(0.72193557024) /* 0x3f38d0c5 */ +var _r31 = float32(0.17193385959) /* 0x3e300f6e */ +var _r41 = float32(0.018645919859) /* 0x3c98bf54 */ +var _r51 = float32(0.00077794247773) /* 0x3a4beed6 */ +var _r61 = float32(7.3266842264e-06) /* 0x36f5d7bd */ +var _w01 = float32(0.41893854737) /* 0x3ed67f1d */ +var _w11 = float32(0.083333335817) /* 0x3daaaaab */ +var _w21 = float32(-Float64FromFloat64(0.002777777845)) /* 0xbb360b61 */ +var _w31 = float32(0.00079365057172) /* 0x3a500cfd */ +var _w41 = float32(-Float64FromFloat64(0.00059518753551)) /* 0xba1c065c */ +var _w51 = float32(0.00083633989561) /* 0x3a5b3dd2 */ +var _w61 = float32(-Float64FromFloat64(0.0016309292987)) /* 0xbad5c4e8 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi1(tls *TLS, x float32) (r float32) { + var n int32 + var y Tdouble_t + _, _ = n, y + /* spurious inexact if odd int */ + x = Float32FromInt32(2) * (x*Float32FromFloat32(0.5) - Xfloorf(tls, x*Float32FromFloat32(0.5))) /* x mod 2.0 */ + n = int32(x * Float32FromInt32(4)) + n = (n + int32(1)) / int32(2) + y = float64(x - float32(n)*Float32FromFloat32(0.5)) + y *= float64(3.141592653589793) + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sindf(tls, y) + case int32(1): + return X__cosdf(tls, y) + case int32(2): + return X__sindf(tls, -y) + case int32(3): + return -X__cosdf(tls, y) + } + return r +} + +func X__lgammaf_r(tls *TLS, x float32, signgamp uintptr) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return x * x + } + if ix < uint32(0x35000000) { /* |x| < 2**-21, return -log(|x|) */ + if sign != 0 { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + x = -x + } + return -Xlogf(tls, x) + } + if sign != 0 { + x = -x + t = _sin_pi1(tls, x) + if t == Float32FromFloat32(0) { /* -integer */ + return Float32FromFloat32(1) / (x - x) + } + if t > Float32FromFloat32(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlogf(tls, _pi3/(t*x)) + } + /* purge off 1 and 2 */ + if ix == uint32(0x3f800000) || ix == uint32(0x40000000) { + r = Float32FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3f666666) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlogf(tls, x) + if ix >= uint32(0x3f3b4a20) { + y = Float32FromFloat32(1) - x + i = 0 + } else { + if ix >= uint32(0x3e6d3308) { + y = x - (_tc1 - Float32FromFloat32(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float32FromFloat32(0) + if ix >= uint32(0x3fdda618) { /* [1.7316,2] */ + y = Float32FromFloat32(2) - x + i = 0 + } else { + if ix >= uint32(0x3F9da620) { /* [1.23,1.73] */ + y = x - _tc1 + i = int32(1) + } else { + y = x - Float32FromFloat32(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a01 + z*(_a21+z*(_a41+z*(_a61+z*(_a81+z*_a101)))) + p2 = z * (_a12 + z*(_a31+z*(_a51+z*(_a71+z*(_a91+z*_a111))))) + p = y*p1 + p2 + r += p - Float32FromFloat32(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t01 + w*(_t31+w*(_t61+w*(_t91+w*_t121))) /* parallel comp */ + p2 = _t15 + w*(_t41+w*(_t71+w*(_t101+w*_t131))) + p3 = _t21 + w*(_t51+w*(_t81+w*(_t111+w*_t141))) + p = z*p1 - (_tt1 - w*(p2+y*p3)) + r += _tf1 + p + case int32(2): + p1 = y * (_u07 + y*(_u11+y*(_u21+y*(_u31+y*(_u41+y*_u51))))) + p2 = Float32FromFloat32(1) + y*(_v11+y*(_v21+y*(_v31+y*(_v41+y*_v51)))) + r += -Float32FromFloat32(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x41000000) { /* x < 8.0 */ + i = int32(x) + y = x - float32(i) + p = y * (_s06 + y*(_s11+y*(_s21+y*(_s31+y*(_s41+y*(_s51+y*_s61)))))) + q = Float32FromFloat32(1) + y*(_r11+y*(_r21+y*(_r31+y*(_r41+y*(_r51+y*_r61))))) + r = Float32FromFloat32(0.5)*y + p/q + z = Float32FromFloat32(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float32FromFloat32(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float32FromFloat32(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float32FromFloat32(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float32FromFloat32(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float32FromFloat32(2) /* FALLTHRU */ + r += Xlogf(tls, z) + break + } + } else { + if ix < uint32(0x5c800000) { /* 8.0 <= x < 2**58 */ + t = Xlogf(tls, x) + z = Float32FromFloat32(1) / x + y = z * z + w = _w01 + z*(_w11+y*(_w21+y*(_w31+y*(_w41+y*(_w51+y*_w61))))) + r = (x-Float32FromFloat32(0.5))*(t-Float32FromFloat32(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlogf(tls, x) - Float32FromFloat32(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgammaf_r(tls *TLS, x float32, signgamp uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, signgamp) +} + +func X__lgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, sg) +} + +func Xlgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +func Xlgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, sg) +} + +/* uses LLONG_MAX > 2^53, see comments in lrint.c */ + +func Xllrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LLONG_MAX > 2^24, see comments in lrint.c */ + +func Xllrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xllrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xllrint(tls, x) +} + +func Xllround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xllroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xllroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +const LOG_POLY1_ORDER = 12 +const LOG_POLY_ORDER = 6 +const LOG_TABLE_BITS = 7 +const N4 = 128 +const OFF = 4604367669032910848 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top16(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, r, r2, r3, rhi, rlo, w, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, r, r2, r3, rhi, rlo, tmp, top, w, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top16(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.064697265625) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + r2 = r * r + r3 = r * r2 + y1 = r3 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 1*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 2*8)) + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 3*8)) + r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 5*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 6*8))+r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 7*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 8*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 9*8))+r3**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 10*8))))) + /* Worst-case error is around 0.507 ULP. */ + w = r * float64(1.34217728e+08) + rhi = r + w - w + rlo = r - rhi + w = rhi * rhi * *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) /* B[0] == -0.5. */ + hi = r + w + lo = r - hi + w + lo += *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) * rlo * (rhi + r) + y1 += lo + y1 += hi + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-5: + 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma) + Worst case error if |y| > 0x1p-4: + 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */ + y1 = lo + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16)) + r*r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 1*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 2*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 3*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 4*8)))) + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +var _ivln10hi = float64(0.4342944818781689) /* 0x3fdbcb7b, 0x15200000 */ +var _ivln10lo = float64(2.5082946711645275e-11) /* 0x3dbb9438, 0xca9aadd5 */ +var _log10_2hi = float64(0.30102999566361177) /* 0x3FD34413, 0x509F6000 */ +var _log10_2lo = float64(3.694239077158931e-13) /* 0x3D59FEF3, 0x11F12B36 */ +var _Lg1 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg2 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg3 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg4 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg5 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg6 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg7 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, val_hi, val_lo, w, y, z Tdouble_t + var hx Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, hx, k, lo, s, t1, t2, val_hi, val_lo, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = 0 + if hx < uint32(0x00100000) || hx>>int32(31) != 0 { + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(31) != 0 { + return (x - x) / float64(0) + } /* log(-#) = NaN */ + /* subnormal number, scale x up */ + k -= int32(54) + x *= float64(1.8014398509481984e+16) + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + } else { + if hx >= uint32(0x7ff00000) { + return x + } else { + if hx == uint32(0x3ff00000) && *(*Tuint64_t)(unsafe.Pointer(bp))<>Int32FromInt32(20)) - int32(0x3ff) + hx = hx&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hx)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, w, z Tfloat_t + var ix Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, ix, k, lo, s, t1, t2, w, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = 0 + if ix < uint32(0x00800000) || ix>>int32(31) != 0 { /* x < 2**-126 */ + if ix<>int32(31) != 0 { + return (x - x) / Float32FromFloat32(0) + } /* log(-#) = NaN */ + /* subnormal number, scale up x */ + k -= int32(25) + x *= Float32FromFloat32(3.3554432e+07) + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + } else { + if ix >= uint32(0x7f800000) { + return x + } else { + if ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + } + } + /* reduce x into [sqrt(2)/2, sqrt(2)] */ + ix += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k += int32(ix>>Int32FromInt32(23)) - int32(0x7f) + ix = ix&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix + x = *(*float32)(unsafe.Pointer(bp)) + f = x - Float32FromFloat32(1) + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg21 + w*_Lg41) + t2 = z * (_Lg11 + w*_Lg31) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + hi = f - hfsq + *(*float32)(unsafe.Pointer(bp)) = hi + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0xfffff000) + hi = *(*float32)(unsafe.Pointer(bp)) + lo = f - hi - hfsq + s*(hfsq+R) + dk = float32(k) + return dk*_log10_2lo1 + (lo+hi)*_ivln10lo1 + lo*_ivln10hi1 + hi*_ivln10hi1 + dk*_log10_2hi1 +} + +func Xlog10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog10(tls, x) +} + +var _ln2_hi2 = float64(0.6931471803691238) /* 3fe62e42 fee00000 */ +var _ln2_lo2 = float64(1.9082149292705877e-10) /* 3dea39ef 35793c76 */ +var _Lg12 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg22 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg32 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg42 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg51 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg61 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg71 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog1p(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tdouble_t + var hu, hx Tuint32_t + var k int32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, hu, hx, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = int32(1) + if hx < uint32(0x3fda827a) || hx>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if hx >= uint32(0xbff00000) { /* x <= -1.0 */ + if x3 == float64(-Int32FromInt32(1)) { + return x3 / float64(0) + } /* log1p(-1) = -inf */ + return (x3 - x3) / float64(0) /* log1p(x<-1) = NaN */ + } + if hx<= uint32(0x7ff00000) { + return x3 + } + } + if k != 0 { + *(*float64)(unsafe.Pointer(bp)) = Float64FromInt32(1) + x3 + hu = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + hu += uint32(Int32FromInt32(0x3ff00000) - Int32FromInt32(0x3fe6a09e)) + k = int32(hu>>Int32FromInt32(20)) - int32(0x3ff) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(54) { + if k >= int32(2) { + v1 = Float64FromInt32(1) - (*(*float64)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float64)(unsafe.Pointer(bp)) - Float64FromInt32(1)) + } + c = v1 + c /= *(*float64)(unsafe.Pointer(bp)) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + hu = hu&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hu)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tfloat_t + var iu, ix Tuint32_t + var k int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, iu, ix, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = int32(1) + if ix < uint32(0x3ed413d0) || ix>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if ix >= uint32(0xbf800000) { /* x <= -1.0 */ + if x3 == float32(-Int32FromInt32(1)) { + return x3 / Float32FromFloat32(0) + } /* log1p(-1)=+inf */ + return (x3 - x3) / Float32FromFloat32(0) /* log1p(x<-1)=NaN */ + } + if ix<= uint32(0x7f800000) { + return x3 + } + } + if k != 0 { + *(*float32)(unsafe.Pointer(bp)) = Float32FromInt32(1) + x3 + iu = *(*Tuint32_t)(unsafe.Pointer(bp)) + iu += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k = int32(iu>>Int32FromInt32(23)) - int32(0x7f) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(25) { + if k >= int32(2) { + v1 = Float32FromInt32(1) - (*(*float32)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + c = v1 + c /= *(*float32)(unsafe.Pointer(bp)) + } else { + c = Float32FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + iu = iu&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = iu + f = *(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1) + } + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg23 + w*_Lg43) + t2 = z * (_Lg13 + w*_Lg33) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + dk = float32(k) + return s*(hfsq+R) + (dk*_ln2_lo3 + c) - hfsq + f + dk*_ln2_hi3 +} + +func Xlog1pl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog1p(tls, x) +} + +const LOG2_POLY1_ORDER = 11 +const LOG2_POLY_ORDER = 7 +const LOG2_TABLE_BITS = 6 +const N5 = 64 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top161(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, p, r, r2, r4, t1, t2, t3, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, p, r, r2, r4, t1, t2, t3, tmp, top, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top161(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.044274330139160156) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + hi = r * X__log2_data.Finvln2hi + lo = r*X__log2_data.Finvln2lo + X__builtin_fma(tls, r, X__log2_data.Finvln2hi, -hi) + r2 = r * r /* rounding error: 0x1p-62. */ + r4 = r2 * r2 + /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */ + p = r2 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 1*8))) + y1 = hi + p + lo += hi - y1 + p + lo += r4 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 2*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 3*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 5*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 6*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 7*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 8*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 9*8))))) + y1 += lo + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-4: 0.547 ULP (0.550 ULP without fma). + ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */ + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 1*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 2*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 3*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 5*8))) + y1 = lo + r2*p + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +type Tlog2_data = struct { + Finvln2hi float64 + Finvln2lo float64 + Fpoly [6]float64 + Fpoly1 [10]float64 + Ftab [64]struct { + Finvc float64 + Flogc float64 + } +} + +const LOG2F_POLY_ORDER = 4 +const LOG2F_TABLE_BITS = 4 +const N6 = 16 +const OFF1 = 1060306944 + +/* +LOG2F_TABLE_BITS = 4 +LOG2F_POLY_ORDER = 4 + +ULP error: 0.752 (nearest rounding.) +Relative error: 1.9 * 2^-26 (before rounding.) +*/ + +func Xlog2f(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, k int32 + var invc, logc, p, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp, top Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, p, r, r2, tmp, top, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log2(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOG2F_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256))*r2 + y1 + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 3*8))*r + y0 + y1 = y1*r2 + p + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlog2f_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fpoly [4]float64 +} + +func Xlog2l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog2(tls, x) +} + +const N7 = 128 + +type Tlog_data = struct { + Fln2hi float64 + Fln2lo float64 + Fpoly [5]float64 + Fpoly1 [11]float64 + Ftab [128]struct { + Finvc float64 + Flogc float64 + } +} + +/* +special cases: + logb(+-0) = -inf, and raise divbyzero + logb(+-inf) = +inf + logb(nan) = nan +*/ + +func Xlogb(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + return x * x + } + if x == Float32FromInt32(0) { + return float32(-Int32FromInt32(1)) / (x * x) + } + return float32(Xilogbf(tls, x)) +} + +func Xlogbl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r1) }() + } + var i, k int32 + var invc, logc, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, r, r2, tmp, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOGF_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + iz = ix - tmp&uint32(0xff800000) + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k)*X__logf_data.Fln2 + /* Pipelined polynomial evaluation to approximate log1p(r). */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264))*r2 + y1 + y1 = y1*r2 + (y0 + r) + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlogf_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fln2 float64 + Fpoly [3]float64 +} + +func Xlogl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog(tls, x) +} + +/* +If the result cannot be represented (overflow, nan), then +lrint raises the invalid exception. + +Otherwise if the input was not an integer then the inexact +exception is raised. + +C99 is a bit vague about whether inexact exception is +allowed to be raised when invalid is raised. +(F.9 explicitly allows spurious inexact exceptions, F.9.6.5 +does not make it clear if that rule applies to lrint, but +IEEE 754r 7.8 seems to forbid spurious inexact exception in +the ineger conversion functions) + +So we try to make sure that no spurious inexact exception is +raised in case of an overflow. + +If the bit size of long > precision of double, then there +cannot be inexact rounding in case the result overflows, +otherwise LONG_MAX and LONG_MIN can be represented exactly +as a double. +*/ + +func Xlrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LONG_MAX > 2^24, see comments in lrint.c */ + +func Xlrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xlrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlrint(tls, x) +} + +func Xlround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xlroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xlroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +func Xmodf(tls *TLS, x float64, iptr uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint64_t + var p1, p2, p3 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, mask, p1, p2, p3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + /* no fractional part */ + if e >= int32(52) { + *(*float64)(unsafe.Pointer(iptr)) = x + if e == int32(0x400) && *(*Tuint64_t)(unsafe.Pointer(bp))<> Int32FromInt32(12) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { + *(*float64)(unsafe.Pointer(iptr)) = x + p3 = bp + *(*Tuint64_t)(unsafe.Pointer(p3)) = *(*Tuint64_t)(unsafe.Pointer(p3)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + return *(*float64)(unsafe.Pointer(bp)) + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return x - *(*float64)(unsafe.Pointer(bp)) +} + +func Xmodff(tls *TLS, x float32, iptr uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + /* no fractional part */ + if e >= int32(23) { + *(*float32)(unsafe.Pointer(iptr)) = x + if e == int32(0x80) && *(*Tuint32_t)(unsafe.Pointer(bp))<> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&mask == uint32(0) { + *(*float32)(unsafe.Pointer(iptr)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^mask + *(*float32)(unsafe.Pointer(iptr)) = *(*float32)(unsafe.Pointer(bp)) + return x - *(*float32)(unsafe.Pointer(bp)) +} + +func Xmodfl(tls *TLS, x float64, iptr uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r float64 + var _ /* d at bp+0 */ float64 + _ = r + r = Xmodf(tls, x, bp) + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return r +} + +func Xnan(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnanf(tls *TLS, s uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__builtin_nanf(tls, __ccgo_ts) +} + +func Xnanl(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnextafter(tls *TLS, x3 float64, y3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ax, ay Tuint64_t + var e int32 + var y float32 + var y1, y2 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y3 + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> int32(52) & uint64(0x7ff)) + /* raise overflow if ux.f is infinite and x is finite */ + if e == int32(0x7ff) { + if uint64(8) == uint64(4) { + y = float32(x3 + x3) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + x3 + } else { + y2 = x3 + x3 + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == 0 { + if uint64(8) == uint64(4) { + y = float32(x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8))) + } else { + if uint64(8) == uint64(8) { + y1 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } else { + y2 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } + } + } + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xnextafterf(tls *TLS, x3 float32, y3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ax, ay, e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y3 + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + y3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == *(*Tuint32_t)(unsafe.Pointer(bp + 8)) { + return y3 + } + ax = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7fffffff) + ay = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) & uint32(0x7fffffff) + if ax == uint32(0) { + if ay == uint32(0) { + return y3 + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = *(*Tuint32_t)(unsafe.Pointer(bp + 8))&uint32(0x80000000) | uint32(1) + } else { + if ax > ay || (*(*Tuint32_t)(unsafe.Pointer(bp + 4))^*(*Tuint32_t)(unsafe.Pointer(bp + 8)))&uint32(0x80000000) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))++ + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xnextafterl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttoward(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttowardf(tls *TLS, x3 float32, y3 float64) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v10, v8 uint32 + var v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* __u at bp+8 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+16 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _ = e, y, y1, y2, v1, v10, v3, v5, v6, v8 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 16)) = x3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float64)(unsafe.Pointer(bp + 8)) = y3 + v3 = *(*uint64)(unsafe.Pointer(bp + 8)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16)) |= uint32(0x80000000) + } + } else { + if float64(x3) < y3 { + *(*float32)(unsafe.Pointer(bp)) = x3 + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 + _9: + if int32(v8>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } + } else { + *(*float32)(unsafe.Pointer(bp)) = x3 + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 16)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 16)) +} + +func Xnexttowardl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafterl(tls, x, y) +} + +const OFF2 = 4604531861337669632 +const POW_LOG_POLY_ORDER = 8 +const POW_LOG_TABLE_BITS = 7 +const SIGN_BIAS = 262144 + +/* +Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53) +relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma) +ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma) +*/ + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top124(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +// C documentation +// +// /* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about +// additional 15 bits precision. IX is the bit representation of x, but +// normalized in the subnormal range using the sign bit for the exponent. */ +func _log_inline(tls *TLS, ix Tuint64_t, tail uintptr) (r1 Tdouble_t) { + var ar, ar2, ar3, hi, invc, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, y, z Tdouble_t + var i, k int32 + var iz, tmp Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ar, ar2, ar3, hi, i, invc, iz, k, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, tmp, y, z + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF2) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ + sbits = sbits - Uint64FromUint64(1009)<= _top124(tls, float64(512))-_top124(tls, float64(5.551115123125783e-17)) { + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + one = float64(1) + x1 + if sign_bias != 0 { + v1 = -one + } else { + v1 = one + } + return v1 + } + if abstop >= _top124(tls, float64(1024)) { + /* Note: inf and nan are already handled. */ + v2 = x1 + if *(*Tuint64_t)(unsafe.Pointer(&v2))>>int32(63) != 0 { + return X__math_uflow(tls, sign_bias) + } else { + return X__math_oflow(tls, sign_bias) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v3 = y + goto _4 +_4: + kd = v3 + v5 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v5)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* The code assumes 2^-200 < |xtail| < 2^-8/N. */ + r += xtail + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is +// the bit representation of a non-zero finite floating-point value. */ +func _checkint(tls *TLS, iy Tuint64_t) (r int32) { + var e int32 + _ = e + e = int32(iy >> int32(52) & uint64(0x7ff)) + if e < int32(0x3ff) { + return 0 + } + if e > Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return int32(2) + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)-uint64(1)) != 0 { + return 0 + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +// C documentation +// +// /* Returns 1 if input is the bit representation of 0, infinity or nan. */ +func _zeroinfnan(tls *TLS, i Tuint64_t) (r int32) { + var v1 float64 + _ = v1 + v1 = float64(X__builtin_inff(tls)) + return BoolInt32(uint64(2)*i-uint64(1) >= uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v1))-uint64(1)) +} + +func Xpow(tls *TLS, x1 float64, y1 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ehi, elo, hi, x2 Tdouble_t + var ix, iy Tuint64_t + var sign_bias, topx, topy Tuint32_t + var y, v1, v10, v11, v12, v13, v14, v15, v2, v3, v5, v6, v7, v8 float64 + var yint int32 + var v4 bool + var _ /* lo at bp+0 */ Tdouble_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ehi, elo, hi, ix, iy, sign_bias, topx, topy, x2, y, yint, v1, v10, v11, v12, v13, v14, v15, v2, v3, v4, v5, v6, v7, v8 + sign_bias = uint32(0) + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint64_t)(unsafe.Pointer(&y1)) + topx = _top124(tls, x1) + topy = _top124(tls, y1) + if topx-uint32(0x001) >= uint32(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) || topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0 + and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */ + /* Special cases: (x < 0x1p-126 or inf or nan) or + (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */ + if _zeroinfnan(tls, iy) != 0 { + if uint64(2)*iy == uint64(0) { + return float64(1) + } + v1 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(1) + } + v2 = float64(X__builtin_inff(tls)) + if v4 = uint64(2)*ix > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v2)); !v4 { + v3 = float64(X__builtin_inff(tls)) + } + if v4 || uint64(2)*iy > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + return x1 + y1 + } + v5 = float64(1) + if uint64(2)*ix == uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v5)) { + return float64(1) + } + v6 = float64(1) + if BoolInt32(uint64(2)*ix < uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v6))) == BoolInt32(!(iy>>Int32FromInt32(63) != 0)) { + return float64(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan(tls, ix) != 0 { + x2 = x1 * x1 + if ix>>int32(63) != 0 && _checkint(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy>>int32(63) != 0 { + y = Float64FromInt32(1) / x2 + v8 = y + goto _9 + _9: + v7 = v8 + } else { + v7 = x2 + } + return v7 + } + /* Here x and y are non-zero finite. */ + if ix>>int32(63) != 0 { + /* Finite x < 0. */ + yint = _checkint(tls, iy) + if yint == 0 { + return X__math_invalid(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(0x800) << Int32FromInt32(EXP_TABLE_BITS)) + } + ix &= uint64(0x7fffffffffffffff) + topx &= uint32(0x7ff) + } + if topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: sign_bias == 0 here because y is not odd. */ + v10 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { + return float64(1) + } + if topy&uint32(0x7ff) < uint32(0x3be) { + /* |y| < 2^-65, x^y ~= 1 + y*log(x). */ + if int32(WANT_ROUNDING) != 0 { + v12 = float64(1) + if ix > *(*Tuint64_t)(unsafe.Pointer(&v12)) { + v11 = float64(1) + y1 + } else { + v11 = float64(1) - y1 + } + return v11 + } else { + return float64(1) + } + } + v14 = float64(1) + if BoolInt32(ix > *(*Tuint64_t)(unsafe.Pointer(&v14))) == BoolInt32(topy < uint32(0x800)) { + v13 = X__math_oflow(tls, uint32(0)) + } else { + v13 = X__math_uflow(tls, uint32(0)) + } + return v13 + } + if topx == uint32(0) { + /* Normalize subnormal x so exponent becomes negative. */ + v15 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v15)) + ix &= uint64(0x7fffffffffffffff) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(23) - Int32FromInt32(POWF_LOG2_TABLE_BITS)) % uint32(Int32FromInt32(1)<> (Int32FromInt32(23) - Int32FromInt32(POWF_SCALE_BITS)) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 1*8)) + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 2*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 3*8)) + r4 = r2 * r2 + q = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 4*8))*r + y0 + q = p*r2 + q + y = y*r4 + q + return y +} + +// C documentation +// +// /* The output of log2 and thus the input of exp2 is either scaled by N +// (in case of fast toint intrinsics) or not. The unscaled xd must be +// in [-1021,1023], sign_bias sets the sign of the result. */ +func _exp2_inline(tls *TLS, xd Tdouble_t, sign_bias Tuint32_t) (r1 float32) { + var kd, r, r2, s, y2, z Tdouble_t + var ki, ski, t Tuint64_t + var y, v4 float32 + var y1, v1, v3 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = kd, ki, r, r2, s, ski, t, y, y1, y2, z, v1, v3, v4 + /* x = k/N + r with r in [-1/(2N), 1/(2N)] */ + y1 = xd + X__exp2f_data.Fshift_scaled + v1 = y1 + goto _2 +_2: + kd = v1 + v3 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v3)) + kd -= X__exp2f_data.Fshift_scaled /* k/N */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)<> int32(23) & uint32(0xff)) + if e < int32(0x7f) { + return 0 + } + if e > Int32FromInt32(0x7f)+Int32FromInt32(23) { + return int32(2) + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)-Int32FromInt32(1)) != 0 { + return 0 + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +func _zeroinfnan1(tls *TLS, ix Tuint32_t) (r int32) { + return BoolInt32(uint32(2)*ix-uint32(1) >= Uint32FromUint32(2)*Uint32FromInt32(0x7f800000)-Uint32FromInt32(1)) +} + +func Xpowf(tls *TLS, x1 float32, y1 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix, iy, sign_bias Tuint32_t + var logx, ylogx Tdouble_t + var x2 Tfloat_t + var y, v1, v2, v4 float32 + var yint int32 + var v5, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, iy, logx, sign_bias, x2, y, yint, ylogx, v1, v2, v4, v5, v6 + sign_bias = uint32(0) + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) || _zeroinfnan1(tls, iy) != 0 { + /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */ + if _zeroinfnan1(tls, iy) != 0 { + if uint32(2)*iy == uint32(0) { + return Float32FromFloat32(1) + } + if ix == uint32(0x3f800000) { + return Float32FromFloat32(1) + } + if uint32(2)*ix > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) || uint32(2)*iy > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) { + return x1 + y1 + } + if uint32(2)*ix == uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000)) { + return Float32FromFloat32(1) + } + if BoolInt32(uint32(2)*ix < uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000))) == BoolInt32(!(iy&Uint32FromUint32(0x80000000) != 0)) { + return Float32FromFloat32(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan1(tls, ix) != 0 { + x2 = x1 * x1 + if ix&uint32(0x80000000) != 0 && _checkint1(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy&uint32(0x80000000) != 0 { + y = Float32FromInt32(1) / x2 + v2 = y + goto _3 + _3: + v1 = v2 + } else { + v1 = x2 + } + return v1 + } + /* x and y are non-zero finite. */ + if ix&uint32(0x80000000) != 0 { + /* Finite x < 0. */ + yint = _checkint1(tls, iy) + if yint == 0 { + return X__math_invalidf(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(1) << (Int32FromInt32(EXP2F_TABLE_BITS) + Int32FromInt32(11))) + } + ix &= uint32(0x7fffffff) + } + if ix < uint32(0x00800000) { + /* Normalize subnormal x so exponent becomes negative. */ + v4 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v4)) + ix &= uint32(0x7fffffff) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + } + logx = _log2_inline(tls, ix) + ylogx = float64(y1) * logx /* cannot overflow, y is single prec. */ + v5 = ylogx + v6 = float64(126) * float64(Int32FromInt32(1)<>int32(47)&uint64(0xffff) >= *(*Tuint64_t)(unsafe.Pointer(&v6))>>int32(47) { + /* |y*log(x)| >= 126. */ + if ylogx > float64(127.99999995700433)*float64(Int32FromInt32(1)< %v", r) }() + } + return Xpow(tls, x, y) +} + +func Xremainder(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquo(tls, x, y, bp) +} + +func Xdrem(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremainderf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquof(tls, x, y, bp) +} + +func Xdremf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainderf(tls, x, y) +} + +func Xremainderl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremquo(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx, sy, v10 int32 + var i, uxi Tuint64_t + var q Tuint32_t + var v1 uint64 + var v11 float64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v10, v11, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + sy = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(63)) + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = *(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + uxi <<= uint64(1) + q <<= uint32(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + if uxi == uint64(0) { + ex = -int32(60) + } else { + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi = uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + x = *(*float64)(unsafe.Pointer(bp + 8)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float64FromInt32(2)*x > y || Float64FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v10 = -int32(q) + } else { + v10 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v10 + if sx != 0 { + v11 = -x + } else { + v11 = x + } + return v11 +} + +func Xremquof(tls *TLS, x float32, y float32, quo uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey, sx, sy, v8 int32 + var i, q, uxi Tuint32_t + var v1 uint32 + var v3 bool + var v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(31)) + sy = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(31)) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + uxi <<= uint32(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + if uxi == uint32(0) { + ex = -int32(30) + } else { + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + x = *(*float32)(unsafe.Pointer(bp + 4)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float32FromInt32(2)*x > y || Float32FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquol(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremquo(tls, x, y, quo) +} + +const DBL_EPSILON9 = 2.220446049250313e-16 + +var _toint4 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xrint(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tdouble_t + var v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x + } + if s != 0 { + y = x - _toint4 + _toint4 + } else { + y = x + _toint4 - _toint4 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(0) + } + return v1 + } + return y +} + +const DBL_EPSILON10 = 0 +const FLT_EPSILON1 = 1.1920928955078125e-07 + +var _toint5 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xrintf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tfloat_t + var v1 float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + s = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x + } + if s != 0 { + y = x - _toint5 + _toint5 + } else { + y = x + _toint5 - _toint5 + } + if y == Float32FromInt32(0) { + if s != 0 { + v1 = -Float32FromFloat32(0) + } else { + v1 = Float32FromFloat32(0) + } + return v1 + } + return y +} + +const FLT_EPSILON2 = 0 + +func Xrintl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrint(tls, x) +} + +const DBL_EPSILON11 = 2.220446049250313e-16 + +var _toint6 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xround(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x3 + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x3ff)-Int32FromInt32(1) { + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + _toint6) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + _toint6 + } else { + y2 = x3 + _toint6 + } + } + return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint6 - _toint6 - x3 + if y3 > float64(0.5) { + y3 = y3 + x3 - Float64FromInt32(1) + } else { + if y3 <= -Float64FromFloat64(0.5) { + y3 = y3 + x3 + Float64FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = -y3 + } + return y3 +} + +const DBL_EPSILON12 = 0 +const FLT_EPSILON3 = 1.1920928955078125e-07 + +var _toint7 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xroundf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x7f)-Int32FromInt32(1) { + if uint64(4) == uint64(4) { + y = x3 + _toint7 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + _toint7) + } else { + y2 = float64(x3 + _toint7) + } + } + return Float32FromInt32(0) * *(*float32)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint7 - _toint7 - x3 + if y3 > Float32FromFloat32(0.5) { + y3 = y3 + x3 - Float32FromInt32(1) + } else { + if y3 <= -Float32FromFloat32(0.5) { + y3 = y3 + x3 + Float32FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + y3 = -y3 + } + return y3 +} + +const FLT_EPSILON4 = 0 + +func Xroundl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xround(tls, x) +} + +func Xscalb(tls *TLS, x float64, fn float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< float64(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrint(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > float64(65000) { + return Xscalbn(tls, x, int32(65000)) + } + if -fn > float64(65000) { + return Xscalbn(tls, x, -int32(65000)) + } + return Xscalbn(tls, x, int32(fn)) +} + +func Xscalbf(tls *TLS, x float32, fn float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = fn + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x * fn + } + *(*float32)(unsafe.Pointer(bp)) = fn + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 +_7: + if !(BoolInt32(v6&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if fn > Float32FromFloat32(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrintf(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, int32(65000)) + } + if -fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, -int32(65000)) + } + return Xscalbnf(tls, x, int32(fn)) +} + +func Xscalbln(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbn(tls, x, int32(n)) +} + +func Xscalblnf(tls *TLS, x float32, n int64) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbnf(tls, x, int32(n)) +} + +func Xscalblnl(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbln(tls, x, n) +} + +func Xscalbn(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = x + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + n = int32(1023) + } + } + } else { + if n < -int32(1022) { + /* make sure final n < -53 to avoid double + rounding in the subnormal range */ + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + n = -int32(1022) + } + } + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(Int32FromInt32(0x3ff)+n) << int32(52) + x = y * *(*float64)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = x + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + n = int32(127) + } + } + } else { + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + n = -int32(126) + } + } + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(Int32FromInt32(0x7f)+n) << int32(23) + x = y * *(*float32)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xsignificand(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, -Xilogb(tls, x)) +} + +func Xsignificandf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, -Xilogbf(tls, x)) +} + +func Xsin(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + /* High word of x. */ + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e500000) { /* |x| < 2**-26 */ + /* raise inexact if x != 0 and underflow if subnormal*/ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__sin(tls, x3, float64(0), 0) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(1): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(2): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + default: + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + } + return r +} + +func Xsincos(tls *TLS, x3 float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s, y1, y2, v1, v2, v3, v4 float64 + var ix Tuint32_t + var n uint32 + var y float32 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, y, y1, y2, v1, v2, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + /* if |x| < 2**-27 * sqrt(2) */ + if ix < uint32(0x3e46a09e) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + *(*float64)(unsafe.Pointer(sin)) = x3 + *(*float64)(unsafe.Pointer(cos)) = float64(1) + return + } + *(*float64)(unsafe.Pointer(sin)) = X__sin(tls, x3, float64(0), 0) + *(*float64)(unsafe.Pointer(cos)) = X__cos(tls, x3, float64(0)) + return + } + /* sincos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + v4 = x3 - x3 + *(*float64)(unsafe.Pointer(cos)) = v4 + *(*float64)(unsafe.Pointer(sin)) = v4 + return + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + s = X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + c = X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float64)(unsafe.Pointer(sin)) = s + *(*float64)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float64)(unsafe.Pointer(sin)) = c + *(*float64)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float64)(unsafe.Pointer(sin)) = -s + *(*float64)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float64)(unsafe.Pointer(sin)) = -c + *(*float64)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_25 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsincosf(tls *TLS, x3 float32, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s Tfloat_t + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3, v8 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + /* |x| ~<= pi/4 */ + if ix <= uint32(0x3f490fda) { + /* |x| < 2**-12 */ + if ix < uint32(0x39800000) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + *(*float32)(unsafe.Pointer(sin)) = x3 + *(*float32)(unsafe.Pointer(cos)) = Float32FromFloat32(1) + return + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, float64(x3)) + return + } + /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x407b53d1) { + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)+_s1pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)+_s1pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, _s1pio2-float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, _s1pio2-float64(x3)) + } + return + } + /* -sin(x+c) is not correct if x+c could be 0: -0 vs +0 */ + if sign != 0 { + v4 = float64(x3) + _s2pio2 + } else { + v4 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(sin)) = -X__sindf(tls, v4) + if sign != 0 { + v5 = float64(x3) + _s2pio2 + } else { + v5 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(cos)) = -X__cosdf(tls, v5) + return + } + /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40e231d5) { + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, float64(x3)+_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = -X__sindf(tls, float64(x3)+_s3pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)-_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)-_s3pio2) + } + return + } + if sign != 0 { + v6 = float64(x3) + _s4pio2 + } else { + v6 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, v6) + if sign != 0 { + v7 = float64(x3) + _s4pio2 + } else { + v7 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, v7) + return + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + v8 = x3 - x3 + *(*float32)(unsafe.Pointer(cos)) = v8 + *(*float32)(unsafe.Pointer(sin)) = v8 + return + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + s = X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + c = X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float32)(unsafe.Pointer(sin)) = s + *(*float32)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float32)(unsafe.Pointer(sin)) = c + *(*float32)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float32)(unsafe.Pointer(sin)) = -s + *(*float32)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float32)(unsafe.Pointer(sin)) = -c + *(*float32)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_26 = 0 + +func Xsincosl(tls *TLS, x float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v sin=%v cos=%v, (%v:)", tls, x, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cosd at bp+8 */ float64 + var _ /* sind at bp+0 */ float64 + Xsincos(tls, x, bp, bp+8) + *(*float64)(unsafe.Pointer(sin)) = *(*float64)(unsafe.Pointer(bp)) + *(*float64)(unsafe.Pointer(cos)) = *(*float64)(unsafe.Pointer(bp + 8)) +} + +const M_PI_27 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio21 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio21 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio21 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio21 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsinf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign int32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__sindf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + return -X__cosdf(tls, float64(x3)+_s1pio21) + } else { + return X__cosdf(tls, float64(x3)-_s1pio21) + } + } + if sign != 0 { + v4 = -(float64(x3) + _s2pio21) + } else { + v4 = -(float64(x3) - _s2pio21) + } + return X__sindf(tls, v4) + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + return X__cosdf(tls, float64(x3)+_s3pio21) + } else { + return -X__cosdf(tls, float64(x3)-_s3pio21) + } + } + if sign != 0 { + v5 = float64(x3) + _s4pio21 + } else { + v5 = float64(x3) - _s4pio21 + } + return X__sindf(tls, v5) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = X__rem_pio2f(tls, x3, bp) + switch n & Int32FromInt32(3) { + case 0: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(1): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(2): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + default: + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_28 = 0 + +// C documentation +// +// /* sinh(x) = (exp(x) - 1/exp(x))/2 +// * = (exp(x)-1 + (exp(x)-1)/exp(x))/2 +// * = x + x^3/6 + o(x^5) +// */ +func Xsinh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float64 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + h = float64(0.5) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + h = -h + } + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + absx = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(DBL_MAX) */ + if w < uint32(0x40862e42) { + t = Xexpm1(tls, absx) + if w < uint32(0x3ff00000) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26)+eps could be just h*exp(x) */ + return h * (t + t/(t+Float64FromInt32(1))) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, absx, Float64FromInt32(2)*h) + return t +} + +func Xsinhf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float32 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + h = float32(0.5) + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + h = -h + } + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + absx = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(FLT_MAX) */ + if w < uint32(0x42b17217) { + t = Xexpm1f(tls, absx) + if w < uint32(0x3f800000) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< logf(FLT_MAX) or nan */ + t = X__expo2f(tls, absx, Float32FromInt32(2)*h) + return t +} + +func Xsinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsinh(tls, x) +} + +func Xsinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsin(tls, x) +} + +const FENV_SUPPORT = 1 + +// C documentation +// +// /* returns a*b*2^-32 - e, with error 0 <= e < 1. */ +func _mul32(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +// C documentation +// +// /* returns a*b*2^-64 - e, with error 0 <= e < 3. */ +func _mul64(tls *TLS, a Tuint64_t, b Tuint64_t) (r Tuint64_t) { + var ahi, alo, bhi, blo Tuint64_t + _, _, _, _ = ahi, alo, bhi, blo + ahi = a >> int32(32) + alo = a & uint64(0xffffffff) + bhi = b >> int32(32) + blo = b & uint64(0xffffffff) + return ahi*bhi + ahi*blo>>int32(32) + alo*bhi>>int32(32) +} + +func Xsqrt(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, i, ix, m, r, s, tiny, top, u Tuint64_t + var even int32 + var t, y, y1, v1, v3 float64 + var v2 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, i, ix, m, r, s, t, tiny, top, u, y, y1, v1, v2, v3 + /* special case handling. */ + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = ix >> int32(52) + if top-uint64(0x001) >= uint64(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return x1 + } + if ix == uint64(0x7ff0000000000000) { + return x1 + } + if ix > uint64(0x7ff0000000000000) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + top = ix >> int32(52) + top -= uint64(52) + } + /* argument reduction: + x = 4^e m; with integer e, and m in [1, 4) + m: fixed point representation [2.62] + 2^e is the exponent part of the result. */ + even = int32(top & uint64(1)) + m = ix<>= uint64(1) + } + top = (top + uint64(0x3ff)) >> int32(1) + i = ix >> Int32FromInt32(46) % uint64(128) + r = uint64(uint32(X__rsqrt_tab[i]) << int32(16)) + /* |r sqrt(m) - 1| < 0x1.fdp-9 */ + s = uint64(_mul32(tls, uint32(m>>int32(32)), uint32(r))) + /* |s/sqrt(m) - 1| < 0x1.fdp-9 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.7bp-16 */ + s = uint64(_mul32(tls, uint32(s), uint32(u)) << int32(1)) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.3704p-29 (measured worst-case) */ + r = r << int32(32) + s = _mul64(tls, m, r) + d = _mul64(tls, s, r) + u = _three<> int32(9) + d0 = m<> int32(63) + s &= uint64(0x000fffffffffffff) + s |= top << int32(52) + y1 = *(*float64)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint64(0) { + v2 = 0 + } else { + v2 = int64(0x0010000000000000) + } + /* handle rounding modes and inexact exception: + only (s+1)^2 == 2^42 m case is exact otherwise + add a tiny value to cause the fenv effects. */ + tiny = uint64(v2) + tiny |= (d1 ^ d2) & uint64(0x8000000000000000) + t = *(*float64)(unsafe.Pointer(&tiny)) + y = y1 + t + v3 = y + goto _4 + _4: + y1 = v3 + } + return y1 +} + +/* approximate r ~ 1/sqrt(m) and s ~ sqrt(m) when m in [1,4) + + initial estimate: + 7bit table lookup (1bit exponent and 6bit significand). + + iterative approximation: + using 2 goldschmidt iterations with 32bit int arithmetics + and a final iteration with 64bit int arithmetics. + + details: + + the relative error (e = r0 sqrt(m)-1) of a linear estimate + (r0 = a m + b) is |e| < 0.085955 ~ 0x1.6p-4 at best, + a table lookup is faster and needs one less iteration + 6 bit lookup table (128b) gives |e| < 0x1.f9p-8 + 7 bit lookup table (256b) gives |e| < 0x1.fdp-9 + for single and double prec 6bit is enough but for quad + prec 7bit is needed (or modified iterations). to avoid + one more iteration >=13bit table would be needed (16k). + + a newton-raphson iteration for r is + w = r*r + u = 3 - m*w + r = r*u/2 + can use a goldschmidt iteration for s at the end or + s = m*r + + first goldschmidt iteration is + s = m*r + u = 3 - s*r + r = r*u/2 + s = s*u/2 + next goldschmidt iteration is + u = 3 - s*r + r = r*u/2 + s = s*u/2 + and at the end r is not computed only s. + + they use the same amount of operations and converge at the + same quadratic rate, i.e. if + r1 sqrt(m) - 1 = e, then + r2 sqrt(m) - 1 = -3/2 e^2 - 1/2 e^3 + the advantage of goldschmidt is that the mul for s and r + are independent (computed in parallel), however it is not + "self synchronizing": it only uses the input m in the + first iteration so rounding errors accumulate. at the end + or when switching to larger precision arithmetics rounding + errors dominate so the first iteration should be used. + + the fixed point representations are + m: 2.30 r: 0.32, s: 2.30, d: 2.30, u: 2.30, three: 2.30 + and after switching to 64 bit + m: 2.62 r: 0.64, s: 2.62, d: 2.62, u: 2.62, three: 2.62 */ + +var _three = uint64(0xc0000000) + +func _mul321(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +/* see sqrt.c for more detailed comments. */ + +func Xsqrtf(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, tiny, u Tuint32_t + var t, y, y1, v1, v4 float32 + var v2 uint32 + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, t, tiny, u, y, y1, v1, v2, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return x1 + } + if ix == uint32(0x7f800000) { + return x1 + } + if ix > uint32(0x7f800000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 4^e m; with int e and m in [1, 4). */ + even = ix & uint32(0x00800000) + m1 = ix<> int32(1) + ey += uint32(Int32FromInt32(0x3f800000) >> Int32FromInt32(1)) + ey &= uint32(0x7f800000) + i = ix >> Int32FromInt32(17) % uint32(128) + r = uint32(X__rsqrt_tab[i]) << int32(16) + /* |r*sqrt(m) - 1| < 0x1p-8 */ + s = _mul321(tls, m, r) + /* |s/sqrt(m) - 1| < 0x1p-8 */ + d = _mul321(tls, s, r) + u = _three1 - d + r = _mul321(tls, r, u) << int32(1) + /* |r*sqrt(m) - 1| < 0x1.7bp-16 */ + s = _mul321(tls, s, u) << int32(1) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = _mul321(tls, s, r) + u = _three1 - d + s = _mul321(tls, s, u) + /* -0x1.03p-28 < s/sqrt(m) - 1 < 0x1.fp-31 */ + s = (s - uint32(1)) >> int32(6) + d0 = m<> int32(31) + s &= uint32(0x007fffff) + s |= ey + y1 = *(*float32)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint32(0) { + v3 = 0 + } else { + v3 = int32(0x01000000) + } + /* handle rounding and inexact exception. */ + tiny = uint32(v3) + tiny |= (d1 ^ d2) & uint32(0x80000000) + t = *(*float32)(unsafe.Pointer(&tiny)) + y = y1 + t + v4 = y + goto _5 + _5: + y1 = v4 + } + return y1 +} + +/* compute r ~ 1/sqrt(m), s ~ sqrt(m) with 2 goldschmidt iterations. */ +var _three1 = uint32(0xc0000000) + +func Xsqrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsqrt(tls, x) +} + +func Xtan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e400000) { /* |x| < 2**-27 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__tan(tls, x3, float64(0), 0) + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + return X__tan(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(n&uint32(1))) +} + +const M_PI_29 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _t1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _t2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _t3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _t4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xtanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__tandf(tls, float64(x3), 0) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + v4 = float64(x3) + _t1pio2 + } else { + v4 = float64(x3) - _t1pio2 + } + return X__tandf(tls, v4, int32(1)) + } else { + if sign != 0 { + v5 = float64(x3) + _t2pio2 + } else { + v5 = float64(x3) - _t2pio2 + } + return X__tandf(tls, v5, 0) + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + v6 = float64(x3) + _t3pio2 + } else { + v6 = float64(x3) - _t3pio2 + } + return X__tandf(tls, v6, int32(1)) + } else { + if sign != 0 { + v7 = float64(x3) + _t4pio2 + } else { + v7 = float64(x3) - _t4pio2 + } + return X__tandf(tls, v7, 0) + } + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + return X__tandf(tls, *(*float64)(unsafe.Pointer(bp)), int32(n&uint32(1))) +} + +const M_PI_210 = 0 + +// C documentation +// +// /* tanh(x) = (exp(x) - exp(-x))/(exp(x) + exp(-x)) +// * = (exp(2*x) - 1)/(exp(2*x) - 1 + 2) +// * = (1 - exp(-2*x))/(exp(-2*x) - 1 + 2) +// */ +func Xtanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, v1 Tdouble_t + var w Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + if w > uint32(0x3fe193ea) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x40340000) { + /* |x| > 20 or nan */ + /* note: this branch avoids raising overflow */ + t = Float64FromInt32(1) - Float64FromInt32(0)/x3 + } else { + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = Float64FromInt32(1) - Float64FromInt32(2)/(t+Float64FromInt32(2)) + } + } else { + if w > uint32(0x3fd058ae) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = t / (t + Float64FromInt32(2)) + } else { + if w >= uint32(0x00100000) { + /* |x| >= 0x1p-1022, up to 2ulp error in [0.1,0.2554] */ + t = Xexpm1(tls, float64(-Int32FromInt32(2))*x3) + t = -t / (t + Float64FromInt32(2)) + } else { + /* |x| is subnormal */ + /* note: the branch above would not raise underflow in [0x1p-1023,0x1p-1022) */ + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, y, v1 float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + if w > uint32(0x3f0c9f54) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x41200000) { + /* |x| > 10 */ + t = Float32FromInt32(1) + Float32FromInt32(0)/x3 + } else { + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = Float32FromInt32(1) - Float32FromInt32(2)/(t+Float32FromInt32(2)) + } + } else { + if w > uint32(0x3e82c578) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = t / (t + Float32FromInt32(2)) + } else { + if w >= uint32(0x00800000) { + /* |x| >= 0x1p-126 */ + t = Xexpm1f(tls, float32(-Int32FromInt32(2))*x3) + t = -t / (t + Float32FromInt32(2)) + } else { + /* |x| is subnormal */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtanh(tls, x) +} + +func Xtanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtan(tls, x) +} + +const N10 = 12 + +var _pi4 = float64(3.141592653589793) + +// C documentation +// +// /* sin(pi x) with x > 0x1p-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sinpi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* argument reduction: x = |x| mod 2 */ + /* spurious inexact when x is odd int */ + x = x * float64(0.5) + x = Float64FromInt32(2) * (x - Xfloor(tls, x)) + /* reduce x into [-.25,.25] */ + n = int32(Float64FromInt32(4) * x) + n = (n + int32(1)) / int32(2) + x -= float64(n) * float64(0.5) + x *= _pi4 + switch n { + default: /* case 4 */ + fallthrough + case 0: + return X__sin(tls, x, Float64FromInt32(0), 0) + case int32(1): + return X__cos(tls, x, Float64FromInt32(0)) + case int32(2): + return X__sin(tls, -x, Float64FromInt32(0), 0) + case int32(3): + return -X__cos(tls, x, Float64FromInt32(0)) + } + return r +} + +// C documentation +// +// //static const double g = 6.024680040776729583740234375; +var _gmhalf = float64(5.52468004077673) +var _Snum = [13]float64{ + 0: float64(2.353137688041076e+10), + 1: float64(4.29198036426491e+10), + 2: float64(3.571195923735567e+10), + 3: float64(1.792103442603721e+10), + 4: float64(6.039542586352028e+09), + 5: float64(1.4397204073117216e+09), + 6: float64(2.4887455786205417e+08), + 7: float64(3.1426415585400194e+07), + 8: float64(2.8763706289353725e+06), + 9: float64(186056.26539522348), + 10: float64(8071.672002365816), + 11: float64(210.82427775157936), + 12: float64(2.5066282746310002), +} +var _Sden = [13]float64{ + 1: Float64FromInt32(39916800), + 2: Float64FromInt32(120543840), + 3: Float64FromInt32(150917976), + 4: Float64FromInt32(105258076), + 5: Float64FromInt32(45995730), + 6: Float64FromInt32(13339535), + 7: Float64FromInt32(2637558), + 8: Float64FromInt32(357423), + 9: Float64FromInt32(32670), + 10: Float64FromInt32(1925), + 11: Float64FromInt32(66), + 12: Float64FromInt32(1), +} + +// C documentation +// +// /* n! for small integer n */ +var _fact = [23]float64{ + 0: Float64FromInt32(1), + 1: Float64FromInt32(1), + 2: Float64FromInt32(2), + 3: Float64FromInt32(6), + 4: Float64FromInt32(24), + 5: Float64FromInt32(120), + 6: Float64FromInt32(720), + 7: float64(5040), + 8: float64(40320), + 9: float64(362880), + 10: float64(3.6288e+06), + 11: float64(3.99168e+07), + 12: float64(4.790016e+08), + 13: float64(6.2270208e+09), + 14: float64(8.71782912e+10), + 15: float64(1.307674368e+12), + 16: float64(2.0922789888e+13), + 17: float64(3.55687428096e+14), + 18: float64(6.402373705728e+15), + 19: float64(1.21645100408832e+17), + 20: float64(2.43290200817664e+18), + 21: float64(5.109094217170944e+19), + 22: float64(1.1240007277776077e+21), +} + +// C documentation +// +// /* S(x) rational function for positive x */ +func _S(tls *TLS, x float64) (r float64) { + var den, num Tdouble_t + var i int32 + _, _, _ = den, i, num + num = Float64FromInt32(0) + den = Float64FromInt32(0) + /* to avoid overflow handle large x differently */ + if x < Float64FromInt32(8) { + i = int32(N10) + for { + if !(i >= 0) { + break + } + num = num*x + _Snum[i] + den = den*x + _Sden[i] + goto _1 + _1: + ; + i-- + } + } else { + i = 0 + for { + if !(i <= int32(N10)) { + break + } + num = num/x + _Snum[i] + den = den/x + _Sden[i] + goto _2 + _2: + ; + i++ + } + } + return num / den +} + +func Xtgamma(tls *TLS, x3 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, y1, y2, y3, v1 float64 + var dy, r, z Tdouble_t + var ix Tuint32_t + var sign int32 + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = absx, dy, ix, r, sign, y, y1, y2, y3, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* special cases */ + if ix >= uint32(0x7ff00000) { + /* tgamma(nan)=nan, tgamma(inf)=inf, tgamma(-inf)=nan with invalid */ + return x3 + float64(X__builtin_inff(tls)) + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(54))<= 172: tgamma(x)=inf with overflow */ + /* x =< -184: tgamma(x)=+-0 with underflow */ + if ix >= uint32(0x40670000) { /* |x| >= 184 */ + if sign != 0 { + if uint64(4) == uint64(4) { + y = float32(Float64FromFloat64(1.1754943508222875e-38) / x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } else { + y2 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } + } + if Xfloor(tls, x3)*float64(0.5) == Xfloor(tls, x3*float64(0.5)) { + return Float64FromInt32(0) + } + return -Float64FromFloat64(0) + } + x3 *= float64(8.98846567431158e+307) + return x3 + } + if sign != 0 { + v1 = -x3 + } else { + v1 = x3 + } + absx = v1 + /* handle the error of x + g - 0.5 */ + y3 = absx + _gmhalf + if absx > _gmhalf { + dy = y3 - absx + dy -= _gmhalf + } else { + dy = y3 - _gmhalf + dy -= absx + } + z = absx - float64(0.5) + r = _S(tls, absx) * Xexp(tls, -y3) + if x3 < Float64FromInt32(0) { + /* reflection formula for negative x */ + /* sinpi(absx) is not 0, integers are already handled */ + r = -_pi4 / (_sinpi(tls, absx) * absx * r) + dy = -dy + z = -z + } + r += dy * (_gmhalf + Float64FromFloat64(0.5)) * r / y3 + z = Xpow(tls, y3, float64(0.5)*z) + y3 = r * z * z + return y3 +} + +func Xtgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(Xtgamma(tls, float64(x))) +} + +func Xtgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtgamma(tls, x) +} + +func Xtrunc(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + int32(12) + if e >= Int32FromInt32(52)+Int32FromInt32(12) { + return x3 + } + if e < int32(12) { + e = int32(1) + } + m = -Uint64FromUint64(1) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { + return x3 + } + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xtruncf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + int32(9) + if e >= Int32FromInt32(23)+Int32FromInt32(9) { + return x3 + } + if e < int32(9) { + e = int32(1) + } + m = -Uint32FromUint32(1) >> e + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xtruncl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtrunc(tls, x) +} + +var _digits = [65]uint8{'.', '/', '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', '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'} + +func Xa64l(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var e int32 + var x Tuint32_t + _, _, _ = d, e, x + x = uint32(0) + e = 0 + for { + if !(e < int32(36) && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + d = Xstrchr(tls, uintptr(unsafe.Pointer(&_digits)), int32(*(*uint8)(unsafe.Pointer(s)))) + if !(d != 0) { + break + } + x |= uint32(int64(d)-t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_digits)))) << e + goto _1 + _1: + ; + e += int32(6) + s++ + } + return int64(int32(x)) +} + +func Xl64a(tls *TLS, x0 int64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x0=%v, (%v:)", tls, x0, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var x Tuint32_t + _, _ = p, x + x = uint32(x0) + p = uintptr(unsafe.Pointer(&_s)) + for { + if !(x != 0) { + break + } + *(*uint8)(unsafe.Pointer(p)) = _digits[x&uint32(63)] + goto _1 + _1: + ; + p++ + x >>= uint32(6) + } + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return uintptr(unsafe.Pointer(&_s)) +} + +var _s [7]uint8 + +func Xbasename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 606 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + goto _1 + _1: + ; + i-- + } + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('/')) { + break + } + goto _2 + _2: + ; + i-- + } + return s + uintptr(i) +} + +func X__xpg_basename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xbasename(tls, s) +} + +func Xdirname(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 606 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 618 + } + goto _1 + _1: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) != int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 606 + } + goto _2 + _2: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 618 + } + goto _3 + _3: + ; + i-- + } + *(*uint8)(unsafe.Pointer(s + uintptr(i+uint64(1)))) = uint8(0) + return s +} + +func Xffs(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint64 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint64(i) + v3 = _a_ctz_64(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsl(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint64 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint64(i) + v3 = _a_ctz_64(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsll(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_64(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +const MM_APPL = 8 +const MM_CONSOLE = 512 +const MM_ERROR = 2 +const MM_FIRM = 4 +const MM_HALT = 1 +const MM_HARD = 1 +const MM_INFO = 4 +const MM_NOCON = 4 +const MM_NOMSG = 1 +const MM_NOSEV = 0 +const MM_NOTOK = -1 +const MM_NRECOV = 128 +const MM_NULLMC = 0 +const MM_NULLSEV = 0 +const MM_OK = 0 +const MM_OPSYS = 32 +const MM_PRINT = 256 +const MM_RECOVER = 64 +const MM_SOFT = 2 +const MM_UTIL = 16 +const MM_WARNING = 3 + +// C documentation +// +// /* +// * If lstr is the first part of bstr, check that the next char in bstr +// * is either \0 or : +// */ +func __strcolcmp(tls *TLS, lstr uintptr, bstr uintptr) (r int32) { + var i Tsize_t + _ = i + i = uint64(0) + for *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 && *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(lstr + uintptr(i)))) { + i++ + } + if *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 || *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) != int32(':') { + return int32(1) + } + return 0 +} + +func Xfmtmsg(tls *TLS, classification int64, label uintptr, severity int32, text uintptr, action uintptr, tag uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v classification=%v label=%v severity=%v text=%v action=%v tag=%v, (%v:)", tls, classification, label, severity, text, action, tag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var cmsg, errstring, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 uintptr + var consolefd, i, ret, verb int32 + var msgs [6]uintptr + var _ /* cs at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cmsg, consolefd, errstring, i, msgs, ret, verb, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + ret = 0 + verb = 0 + errstring = uintptr(MM_NULLSEV) + cmsg = Xgetenv(tls, __ccgo_ts+620) + msgs = [6]uintptr{ + 0: __ccgo_ts + 628, + 1: __ccgo_ts + 634, + 2: __ccgo_ts + 643, + 3: __ccgo_ts + 648, + 4: __ccgo_ts + 655, + 5: UintptrFromInt32(0), + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + if severity == int32(MM_HALT) { + errstring = __ccgo_ts + 659 + } else { + if severity == int32(MM_ERROR) { + errstring = __ccgo_ts + 666 + } else { + if severity == int32(MM_WARNING) { + errstring = __ccgo_ts + 674 + } else { + if severity == int32(MM_INFO) { + errstring = __ccgo_ts + 684 + } + } + } + } + if classification&int64(MM_CONSOLE) != 0 { + consolefd = Xopen(tls, __ccgo_ts+691, int32(O_WRONLY), 0) + if consolefd < 0 { + ret = int32(MM_NOCON) + } else { + if label != 0 { + v1 = label + } else { + v1 = __ccgo_ts + } + if label != 0 { + v2 = __ccgo_ts + 386 + } else { + v2 = __ccgo_ts + } + if severity != 0 { + v3 = errstring + } else { + v3 = __ccgo_ts + } + if text != 0 { + v4 = text + } else { + v4 = __ccgo_ts + } + if action != 0 { + v5 = __ccgo_ts + 704 + } else { + v5 = __ccgo_ts + } + if action != 0 { + v6 = action + } else { + v6 = __ccgo_ts + } + if action != 0 { + v7 = __ccgo_ts + 714 + } else { + v7 = __ccgo_ts + } + if tag != 0 { + v8 = tag + } else { + v8 = __ccgo_ts + } + if Xdprintf(tls, consolefd, __ccgo_ts+716, VaList(bp+16, v1, v2, v3, v4, v5, v6, v7, v8)) < int32(1) { + ret = int32(MM_NOCON) + } + Xclose(tls, consolefd) + } + } + if classification&int64(MM_PRINT) != 0 { + for cmsg != 0 && *(*uint8)(unsafe.Pointer(cmsg)) != 0 { + i = 0 + for { + if !(msgs[i] != 0) { + break + } + if !(__strcolcmp(tls, msgs[i], cmsg) != 0) { + break + } + goto _9 + _9: + ; + i++ + } + if msgs[i] == UintptrFromInt32(0) { + //ignore MSGVERB-unrecognized component + verb = int32(0xFF) + break + } else { + verb |= int32(1) << i + cmsg = Xstrchr(tls, cmsg, int32(':')) + if cmsg != 0 { + cmsg++ + } + } + } + if !(verb != 0) { + verb = int32(0xFF) + } + if verb&int32(1) != 0 && label != 0 { + v10 = label + } else { + v10 = __ccgo_ts + } + if verb&int32(1) != 0 && label != 0 { + v11 = __ccgo_ts + 386 + } else { + v11 = __ccgo_ts + } + if verb&int32(2) != 0 && severity != 0 { + v12 = errstring + } else { + v12 = __ccgo_ts + } + if verb&int32(4) != 0 && text != 0 { + v13 = text + } else { + v13 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v14 = __ccgo_ts + 704 + } else { + v14 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v15 = action + } else { + v15 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v16 = __ccgo_ts + 714 + } else { + v16 = __ccgo_ts + } + if verb&int32(16) != 0 && tag != 0 { + v17 = tag + } else { + v17 = __ccgo_ts + } + if Xdprintf(tls, int32(2), __ccgo_ts+716, VaList(bp+16, v10, v11, v12, v13, v14, v15, v16, v17)) < int32(1) { + ret |= int32(MM_NOMSG) + } + } + if ret&(Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG)) == Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG) { + ret = -int32(1) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xget_current_dir_name(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var res uintptr + var _ /* a at bp+0 */ Tstat + var _ /* b at bp+144 */ Tstat + _ = res + res = Xgetenv(tls, __ccgo_ts+734) + if res != 0 && *(*uint8)(unsafe.Pointer(res)) != 0 && !(Xstat(tls, res, bp) != 0) && !(Xstat(tls, __ccgo_ts+606, bp+144) != 0) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev && (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return Xstrdup(tls, res) + } + return Xgetcwd(tls, uintptr(0), uint64(0)) +} + +func X__getauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + var auxv uintptr + _ = auxv + auxv = X__libc.Fauxv + if item == uint64(AT_SECURE) { + return uint64(X__libc.Fsecure) + } + for { + if !(*(*Tsize_t)(unsafe.Pointer(auxv)) != 0) { + break + } + if *(*Tsize_t)(unsafe.Pointer(auxv)) == item { + return *(*Tsize_t)(unsafe.Pointer(auxv + 1*8)) + } + goto _1 + _1: + ; + auxv += uintptr(2) * 8 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uint64(0) +} + +func Xgetauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__getauxval(tls, item) +} + +type Tutsname = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + Fdomainname [65]uint8 +} + +func Xgetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* temp at bp+0 */ Tutsname + Xuname(tls, bp) + if !(len1 != 0) || Xstrlen(tls, bp+325) >= len1 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + Xstrcpy(tls, name, bp+325) + return 0 +} + +func Xgetentropy(tls *TLS, buffer uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v buffer=%v len1=%v, (%v:)", tls, buffer, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pos uintptr + var ret int32 + var _ /* cs at bp+0 */ int32 + _, _ = pos, ret + ret = 0 + pos = buffer + if len1 > uint64(256) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + for len1 != 0 { + ret = int32(Xgetrandom(tls, pos, len1, uint32(0))) + if ret < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) { + continue + } else { + break + } + } + pos += uintptr(ret) + len1 -= uint64(ret) + ret = 0 + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xgethostid(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const optpos = 0 + +type Tucontext_t3 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t1 +} + +type t__ucontext1 = Tucontext_t3 + +func X__getopt_msg(tls *TLS, a uintptr, b uintptr, c uintptr, l Tsize_t) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v l=%v, (%v:)", tls, a, b, c, l, origin(2)) + } + var __need_unlock, v1 int32 + var f uintptr + _, _, _ = __need_unlock, f, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + b = X__lctrans_cur(tls, b) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + _ = Xfputs(tls, a, f) >= 0 && Xfwrite(tls, b, Xstrlen(tls, b), uint64(1), f) != 0 && Xfwrite(tls, c, uint64(1), l, f) == l && Xputc(tls, int32('\n'), f) != 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xgetopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, k, l, v1, v2, v3 int32 + var optchar uintptr + var _ /* c at bp+0 */ Twchar_t + var _ /* d at bp+4 */ Twchar_t + _, _, _, _, _, _, _ = i, k, l, optchar, v1, v2, v3 + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) != int32('-') { + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') { + v1 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v1)*8)) + return int32(1) + } + return -int32(1) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + Xoptind++ + return -Int32FromInt32(1) + } + if !(X__optpos != 0) { + X__optpos++ + } + v2 = Xmbtowc(tls, bp, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(X__optpos), uint64(MB_LEN_MAX)) + k = v2 + if v2 < 0 { + k = int32(1) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xfffd) /* replacement char */ + } + optchar = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos) + X__optpos += k + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos))) != 0) { + Xoptind++ + X__optpos = 0 + } + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') { + optstring++ + } + i = 0 + *(*Twchar_t)(unsafe.Pointer(bp + 4)) = 0 + for cond := true; cond; cond = l != 0 && *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) { + l = Xmbtowc(tls, bp+4, optstring+uintptr(i), uint64(MB_LEN_MAX)) + if l > 0 { + i += l + } else { + i++ + } + } + if *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) || *(*Twchar_t)(unsafe.Pointer(bp)) == int32(':') { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32(':') && Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+738, optchar, uint64(k)) + } + return int32('?') + } + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i)))) == int32(':') { + Xoptarg = uintptr(0) + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+int32(1))))) != int32(':') || X__optpos != 0 { + v3 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v3)*8)) + if X__optpos != 0 { + Xoptarg += uintptr(X__optpos) + } + X__optpos = 0 + } + if Xoptind > argc { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32(':') { + return int32(':') + } + if Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+762, optchar, uint64(k)) + } + return int32('?') + } + } + return *(*Twchar_t)(unsafe.Pointer(bp)) +} + +func X__posix_getopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetopt(tls, argc, argv, optstring) +} + +const no_argument = 0 +const optional_argument = 2 +const required_argument = 1 + +type Toption = struct { + Fname uintptr + Fhas_arg int32 + Fflag uintptr + Fval int32 +} + +func _permute(tls *TLS, argv uintptr, dest int32, src int32) { + var av, tmp uintptr + var i int32 + _, _, _ = av, i, tmp + av = argv + tmp = *(*uintptr)(unsafe.Pointer(av + uintptr(src)*8)) + i = src + for { + if !(i > dest) { + break + } + *(*uintptr)(unsafe.Pointer(av + uintptr(i)*8)) = *(*uintptr)(unsafe.Pointer(av + uintptr(i-int32(1))*8)) + goto _1 + _1: + ; + i-- + } + *(*uintptr)(unsafe.Pointer(av + uintptr(dest)*8)) = tmp +} + +func ___getopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var cnt, i, i1, resumed, ret, skipped int32 + _, _, _, _, _, _ = cnt, i, i1, resumed, ret, skipped + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + skipped = Xoptind + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('-') { + i = Xoptind + for { + if i >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) + 1)) != 0 { + break + } + goto _1 + _1: + ; + i++ + } + Xoptind = i + } + resumed = Xoptind + ret = ___getopt_long_core(tls, argc, argv, optstring, longopts, idx, longonly) + if resumed > skipped { + cnt = Xoptind - resumed + i1 = 0 + for { + if !(i1 < cnt) { + break + } + _permute(tls, argv, skipped, Xoptind-int32(1)) + goto _2 + _2: + ; + i1++ + } + Xoptind = skipped + cnt + } + return ret +} + +func ___getopt_long_core(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var arg, name, opt, start, v5, v6 uintptr + var cnt, colon, i, j, l, match, v2 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = arg, cnt, colon, i, j, l, match, name, opt, start, v2, v5, v6 + Xoptarg = uintptr(0) + if longopts != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) == int32('-') && (longonly != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) != int32('-') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + colon = BoolInt32(int32(*(*uint8)(unsafe.Pointer(optstring + BoolUintptr(int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-'))))) == int32(':')) + start = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(1) + v2 = Int32FromInt32(0) + i = v2 + cnt = v2 + for { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname != 0) { + break + } + name = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname + opt = start + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('-') { + opt++ + } + for *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') && int32(*(*uint8)(unsafe.Pointer(opt))) == int32(*(*uint8)(unsafe.Pointer(name))) { + name++ + opt++ + } + if *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') { + goto _1 + } + arg = opt + match = i + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + cnt = int32(1) + break + } + cnt++ + goto _1 + _1: + ; + i++ + } + if cnt == int32(1) && longonly != 0 && int64(arg)-int64(start) == int64(Xmblen(tls, start, uint64(MB_LEN_MAX))) { + l = int32(int64(arg) - int64(start)) + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(optstring + uintptr(i))) != 0) { + break + } + j = 0 + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(start + uintptr(j)))) == int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+j))))) { + break + } + goto _4 + _4: + ; + j++ + } + if j == l { + cnt++ + break + } + goto _3 + _3: + ; + i++ + } + } + if cnt == int32(1) { + i = match + opt = arg + Xoptind++ + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('=') { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 || !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+794, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptarg = opt + uintptr(1) + } else { + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg == int32(required_argument) { + v5 = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + Xoptarg = v5 + if !(v5 != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 { + return int32(':') + } + if !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+762, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptind++ + } + } + if idx != 0 { + *(*int32)(unsafe.Pointer(idx)) = i + } + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag != 0 { + *(*int32)(unsafe.Pointer((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag)) = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + return 0 + } + return (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') { + Xoptopt = 0 + if !(colon != 0) && Xopterr != 0 { + if cnt != 0 { + v6 = __ccgo_ts + 831 + } else { + v6 = __ccgo_ts + 738 + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), v6, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2), Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2))) + } + Xoptind++ + return int32('?') + } + } + return Xgetopt(tls, argc, argv, optstring) +} + +func Xgetopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, 0) +} + +func Xgetopt_long_only(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, int32(1)) +} + +func Xgetpriority(tls *TLS, which int32, who Tid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v, (%v:)", tls, which, who, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getpriority), int64(which), int64(who))))) + if ret < 0 { + return ret + } + return int32(20) - ret +} + +func Xgetresgid(tls *TLS, rgid uintptr, egid uintptr, sgid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v rgid=%v egid=%v sgid=%v, (%v:)", tls, rgid, egid, sgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresgid), int64(rgid), int64(egid), int64(sgid))))) +} + +func Xgetresuid(tls *TLS, ruid uintptr, euid uintptr, suid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ruid=%v euid=%v suid=%v, (%v:)", tls, ruid, euid, suid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresuid), int64(ruid), int64(euid), int64(suid))))) +} + +func Xgetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret int32 + var v1, v2 uint64 + var _ /* k_rlim at bp+0 */ [2]uint64 + _, _, _ = ret, v1, v2 + ret = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(Int32FromInt32(0)), int64(rlim))))) + if !(ret != 0) { + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + } + if !(ret != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) { + return ret + } + if X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_ugetrlimit), int64(resource), int64(bp)))) < 0 { + return -int32(1) + } + if (*(*[2]uint64)(unsafe.Pointer(bp)))[0] == -Uint64FromUint64(1) { + v1 = ^Uint64FromUint64(0) + } else { + v1 = (*(*[2]uint64)(unsafe.Pointer(bp)))[0] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = v1 + if (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] == -Uint64FromUint64(1) { + v2 = ^Uint64FromUint64(0) + } else { + v2 = (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = v2 + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + return 0 +} + +func Xgetrusage(tls *TLS, who int32, ru uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v ru=%v, (%v:)", tls, who, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _ = dest, r + dest = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + r = int32(X__syscall2(tls, int64(SYS_getrusage), int64(who), int64(dest))) + if !(r != 0) && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xgetsubopt(tls *TLS, opt uintptr, keys uintptr, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v opt=%v keys=%v val=%v, (%v:)", tls, opt, keys, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var l Tsize_t + var s, v1, v2 uintptr + _, _, _, _, _ = i, l, s, v1, v2 + s = *(*uintptr)(unsafe.Pointer(opt)) + *(*uintptr)(unsafe.Pointer(val)) = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(opt)) = Xstrchr(tls, s, int32(',')) + if *(*uintptr)(unsafe.Pointer(opt)) != 0 { + v2 = opt + v1 = *(*uintptr)(unsafe.Pointer(v2)) + *(*uintptr)(unsafe.Pointer(v2))++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(opt)) = s + uintptr(Xstrlen(tls, s)) + } + i = 0 + for { + if !(*(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)) != 0) { + break + } + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8))) + if Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)), s, l) != 0 { + goto _3 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(l)))) == int32('=') { + *(*uintptr)(unsafe.Pointer(val)) = s + uintptr(l) + uintptr(1) + } else { + if *(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0 { + goto _3 + } + } + return i + goto _3 + _3: + ; + i++ + } + return -int32(1) +} + +const R = 2 +const W = 1 +const WR = 3 + +type Tioctl_compat_map = struct { + Fnew_req int32 + Fold_req int32 + Fold_size uint8 + Fdir uint8 + Fforce_align uint8 + Fnoffs uint8 + Foffsets [8]uint8 +} + +/* yields a type for a struct with original size n, with a misaligned + * timeval/timespec expanded from 32- to 64-bit. for use with ioctl + * number producing macros; only size of result is meaningful. */ + +type Tv4l2_event = struct { + Fa Tuint32_t + Fb [8]Tuint64_t + Fc [2]Tuint32_t + Fts [2]Tuint32_t + Fd [9]Tuint32_t +} + +var _compat_map = [20]Tioctl_compat_map{ + 0: { + Fnew_req: int32(SIOCGSTAMP), + Fold_req: int32(SIOCGSTAMP_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 1: { + Fnew_req: int32(SIOCGSTAMPNS), + Fold_req: int32(SIOCGSTAMPNS_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 2: { + Fnew_req: int32(uint64(Uint32FromUint32(2)< %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var ap Tva_list + var arg uintptr + var i, r int32 + var _ /* u at bp+0 */ struct { + Fbuf [0][256]uint8 + Falign int64 + F__ccgo_pad2 [248]byte + } + _, _, _, _ = ap, arg, i, r + ap = va + arg = VaUintptr(&ap) + _ = ap + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(req), int64(arg))) + if Bool(Bool(int32(SIOCGSTAMP) != int32(SIOCGSTAMP_OLD)) && req != 0) && r == -int32(ENOTTY) { + i = 0 + for { + if !(uint64(i) < Uint64FromInt64(400)/Uint64FromInt64(20)) { + break + } + if _compat_map[i].Fnew_req != req { + goto _1 + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(W)) + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(_compat_map[i].Fold_req), int64(bp))) + if r < 0 { + break + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(R)) + break + goto _1 + _1: + ; + i++ + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xissetugid(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__libc.Fsecure) +} + +func Xlockf(tls *TLS, fd int32, op int32, size Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v size=%v, (%v:)", tls, fd, op, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var _ /* l at bp+0 */ Tflock + *(*Tflock)(unsafe.Pointer(bp)) = Tflock{ + Fl_type: int16(F_WRLCK), + Fl_whence: int16(1), + Fl_len: size, + } + switch op { + case int32(F_TEST): + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = F_RDLCK + if Xfcntl(tls, fd, int32(F_GETLK), VaList(bp+40, bp)) < 0 { + return -int32(1) + } + if int32((*(*Tflock)(unsafe.Pointer(bp))).Fl_type) == int32(F_UNLCK) || (*(*Tflock)(unsafe.Pointer(bp))).Fl_pid == Xgetpid(tls) { + return 0 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + return -int32(1) + case F_ULOCK: + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = int16(F_UNLCK) + fallthrough + case int32(F_TLOCK): + return Xfcntl(tls, fd, int32(F_SETLK), VaList(bp+40, bp)) + case int32(F_LOCK): + return Xfcntl(tls, fd, int32(F_SETLKW), VaList(bp+40, bp)) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) +} + +const ACCOUNTING = 9 +const UTMP_FILE = "_PATH_UTMP" +const UTMP_FILENAME = "_PATH_UTMP" +const UT_HOSTSIZE = 256 +const UT_LINESIZE = 32 +const UT_NAMESIZE = 32 +const WTMP_FILE = "_PATH_WTMP" +const WTMP_FILENAME = "_PATH_WTMP" +const _PATH_UTMP = "/dev/null/utmp" +const _PATH_WTMP = "/dev/null/wtmp" +const ut_name = 0 +const utmp = 0 + +type Tlastlog = struct { + Fll_time Ttime_t + Fll_line [32]uint8 + Fll_host [256]uint8 +} + +func Xlogin_tty(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xsetsid(tls) + if Xioctl(tls, fd, int32(TIOCSCTTY), VaList(bp+8, UintptrFromInt32(0))) != 0 { + return -int32(1) + } + Xdup2(tls, fd, 0) + Xdup2(tls, fd, int32(1)) + Xdup2(tls, fd, int32(2)) + if fd > int32(2) { + Xclose(tls, fd) + } + return 0 +} + +const MNTOPT_DEFAULTS = "defaults" +const MNTOPT_NOAUTO = "noauto" +const MNTOPT_NOSUID = "nosuid" +const MNTOPT_RO = "ro" +const MNTOPT_RW = "rw" +const MNTOPT_SUID = "suid" +const MNTTYPE_IGNORE = "ignore" +const MNTTYPE_NFS = "nfs" +const MNTTYPE_SWAP = "swap" +const MOUNTED = "/etc/mtab" +const SENTINEL = 0 + +type Tmntent = struct { + Fmnt_fsname uintptr + Fmnt_dir uintptr + Fmnt_type uintptr + Fmnt_opts uintptr + Fmnt_freq int32 + Fmnt_passno int32 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _internal_buf uintptr +var _internal_bufsize Tsize_t + +func Xsetmntent(tls *TLS, name uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v mode=%v, (%v:)", tls, name, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfopen(tls, name, mode) +} + +func Xendmntent(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + if f != 0 { + Xfclose(tls, f) + } + return int32(1) +} + +func _unescape_ent(tls *TLS, beg uintptr) (r uintptr) { + var cval uint8 + var dest, src, val, v1, v2, v3, v4, v6, v7, v8, v9 uintptr + var i int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = cval, dest, i, src, val, v1, v2, v3, v4, v6, v7, v8, v9 + dest = beg + src = beg + for *(*uint8)(unsafe.Pointer(src)) != 0 { + cval = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(src))) != int32('\\') { + v1 = dest + dest++ + v2 = src + src++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + continue + } + if int32(*(*uint8)(unsafe.Pointer(src + 1))) == int32('\\') { + src++ + v3 = dest + dest++ + v4 = src + src++ + *(*uint8)(unsafe.Pointer(v3)) = *(*uint8)(unsafe.Pointer(v4)) + continue + } + val = src + uintptr(1) + i = 0 + for { + if !(i < int32(3)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(val))) >= int32('0') && int32(*(*uint8)(unsafe.Pointer(val))) <= int32('7') { + cval = uint8(int32(cval) << Int32FromInt32(3)) + v6 = val + val++ + cval = uint8(int32(cval) + (int32(*(*uint8)(unsafe.Pointer(v6))) - Int32FromUint8('0'))) + } else { + break + } + goto _5 + _5: + ; + i++ + } + if cval != 0 { + v7 = dest + dest++ + *(*uint8)(unsafe.Pointer(v7)) = cval + src = val + } else { + v8 = dest + dest++ + v9 = src + src++ + *(*uint8)(unsafe.Pointer(v8)) = *(*uint8)(unsafe.Pointer(v9)) + } + } + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + return beg +} + +func Xgetmntent_r(tls *TLS, f uintptr, mnt uintptr, linebuf uintptr, buflen int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v linebuf=%v buflen=%v, (%v:)", tls, f, mnt, linebuf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var i, len1 Tsize_t + var use_internal int32 + var _ /* n at bp+0 */ [8]int32 + _, _, _ = i, len1, use_internal + use_internal = BoolInt32(linebuf == uintptr(unsafe.Pointer(&_internal_buf))) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno = 0 + for cond := true; cond; cond = int32(*(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])))) == int32('#') || uint64((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]) == len1 { + if use_internal != 0 { + Xgetline(tls, uintptr(unsafe.Pointer(&_internal_buf)), uintptr(unsafe.Pointer(&_internal_bufsize)), f) + linebuf = _internal_buf + } else { + Xfgets(tls, linebuf, buflen, f) + } + if Xfeof(tls, f) != 0 || Xferror(tls, f) != 0 { + return uintptr(0) + } + if !(Xstrchr(tls, linebuf, int32('\n')) != 0) { + Xfscanf(tls, f, __ccgo_ts+855, 0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return uintptr(0) + } + len1 = Xstrlen(tls, linebuf) + if len1 > uint64(INT_MAX) { + continue + } + i = uint64(0) + for { + if !(i < Uint64FromInt64(32)/Uint64FromInt64(4)) { + break + } + (*(*[8]int32)(unsafe.Pointer(bp)))[i] = int32(len1) + goto _1 + _1: + ; + i++ + } + Xsscanf(tls, linebuf, __ccgo_ts+867, VaList(bp+40, bp, bp+uintptr(1)*4, bp+uintptr(2)*4, bp+uintptr(3)*4, bp+uintptr(4)*4, bp+uintptr(5)*4, bp+uintptr(6)*4, bp+uintptr(7)*4, mnt+32, mnt+36)) + } + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(3)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(5)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(7)]))) = uint8(0) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(2)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(4)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(6)])) + return mnt +} + +func Xgetmntent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetmntent_r(tls, f, uintptr(unsafe.Pointer(&_mnt)), uintptr(unsafe.Pointer(&_internal_buf)), 0) +} + +var _mnt Tmntent + +func Xaddmntent(tls *TLS, f uintptr, mnt uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v, (%v:)", tls, f, mnt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xfseek(tls, f, 0, int32(2)) != 0 { + return int32(1) + } + return BoolInt32(Xfprintf(tls, f, __ccgo_ts+922, VaList(bp+8, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno)) < 0) +} + +func Xhasmntopt(tls *TLS, mnt uintptr, opt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mnt=%v opt=%v, (%v:)", tls, mnt, opt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrstr(tls, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, opt) +} + +type Thistory = struct { + Fchain uintptr + Fdev Tdev_t + Fino Tino_t + Flevel int32 + Fbase int32 +} + +func _do_nftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32, h uintptr) (r1 int32) { + bp := tls.Alloc(192) + defer tls.Free(192) + var d, de, v10 uintptr + var dfd, err, r, type1, v11, v12, v3, v4, v7 int32 + var j, k, l Tsize_t + var v1 uint64 + var v13, v8 bool + var v2 Tino_t + var _ /* lev at bp+176 */ TFTW + var _ /* new at bp+144 */ Thistory + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, de, dfd, err, j, k, l, r, type1, v1, v10, v11, v12, v13, v2, v3, v4, v7, v8 + l = Xstrlen(tls, path) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(l-uint64(1))))) == int32('/') { + v1 = l - uint64(1) + } else { + v1 = l + } + j = v1 + v2 = Uint64FromInt32(0) + (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino = v2 + (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev = v2 + if flags&int32(FTW_PHYS) != 0 { + v3 = Xlstat(tls, path, bp) + } else { + v3 = BoolInt32(Xstat(tls, path, bp) < 0) + } + if v3 != 0 { + if !(flags&Int32FromInt32(FTW_PHYS) != 0) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) && !(Xlstat(tls, path, bp) != 0) { + type1 = int32(FTW_SLN) + } else { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EACCES) { + return -int32(1) + } else { + type1 = int32(FTW_NS) + } + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + if flags&int32(FTW_DEPTH) != 0 { + type1 = int32(FTW_DP) + } else { + type1 = int32(FTW_D) + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + if flags&int32(FTW_PHYS) != 0 { + type1 = int32(FTW_SL) + } else { + type1 = int32(FTW_SLN) + } + } else { + type1 = int32(FTW_F) + } + } + } + if flags&int32(FTW_MOUNT) != 0 && h != 0 && type1 != int32(FTW_NS) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*Thistory)(unsafe.Pointer(h)).Fdev { + return 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fchain = h + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fdev = (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + if h != 0 { + v4 = (*Thistory)(unsafe.Pointer(h)).Flevel + int32(1) + } else { + v4 = 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel = v4 + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fbase = int32(j + uint64(1)) + (*(*TFTW)(unsafe.Pointer(bp + 176))).Flevel = (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel + if h != 0 { + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = (*Thistory)(unsafe.Pointer(h)).Fbase + } else { + k = j + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k)))) == int32('/')) { + break + } + goto _5 + _5: + ; + k-- + } + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k-uint64(1))))) != int32('/')) { + break + } + goto _6 + _6: + ; + k-- + } + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = int32(k) + } + if type1 == int32(FTW_D) || type1 == int32(FTW_DP) { + dfd = Xopen(tls, path, O_RDONLY, 0) + err = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if dfd < 0 && err == int32(EACCES) { + type1 = int32(FTW_DNR) + } + if !(fd_limit != 0) { + Xclose(tls, dfd) + } + } + if v8 = !(flags&Int32FromInt32(FTW_DEPTH) != 0); v8 { + v7 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v7 + } + if v8 && v7 != 0 { + return r + } + for { + if !(h != 0) { + break + } + if (*Thistory)(unsafe.Pointer(h)).Fdev == (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev && (*Thistory)(unsafe.Pointer(h)).Fino == (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino { + return 0 + } + goto _9 + _9: + ; + h = (*Thistory)(unsafe.Pointer(h)).Fchain + } + if (type1 == int32(FTW_D) || type1 == int32(FTW_DP)) && fd_limit != 0 { + if dfd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return -int32(1) + } + d = Xfdopendir(tls, dfd) + if d != 0 { + for { + v10 = Xreaddir(tls, d) + de = v10 + if !(v10 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) { + continue + } + if Xstrlen(tls, de+19) >= uint64(PATH_MAX)-l { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + Xclosedir(tls, d) + return -int32(1) + } + *(*uint8)(unsafe.Pointer(path + uintptr(j))) = uint8('/') + Xstrcpy(tls, path+uintptr(j)+uintptr(1), de+19) + v11 = _do_nftw(tls, path, fn, fd_limit-int32(1), flags, bp+144) + r = v11 + if v11 != 0 { + Xclosedir(tls, d) + return r + } + } + Xclosedir(tls, d) + } else { + Xclose(tls, dfd) + return -int32(1) + } + } + *(*uint8)(unsafe.Pointer(path + uintptr(l))) = uint8(0) + if v13 = flags&int32(FTW_DEPTH) != 0; v13 { + v12 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v12 + } + if v13 && v12 != 0 { + return r + } + return 0 +} + +func Xnftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v flags=%v, (%v:)", tls, path, fn, fd_limit, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var l Tsize_t + var r int32 + var _ /* cs at bp+0 */ int32 + var _ /* pathbuf at bp+4 */ [4097]uint8 + _, _ = l, r + if fd_limit <= 0 { + return 0 + } + l = Xstrlen(tls, path) + if l > uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + Xmemcpy(tls, bp+4, path, l+uint64(1)) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + r = _do_nftw(tls, bp+4, fn, fd_limit, flags, UintptrFromInt32(0)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return r +} + +/* Nonstandard, but vastly superior to the standard functions */ + +func Xopenpty(tls *TLS, pm uintptr, ps uintptr, name uintptr, tio uintptr, ws uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pm=%v ps=%v name=%v tio=%v ws=%v, (%v:)", tls, pm, ps, name, tio, ws, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var m, s, v1 int32 + var _ /* buf at bp+8 */ [20]uint8 + var _ /* cs at bp+4 */ int32 + var _ /* n at bp+0 */ int32 + _, _, _ = m, s, v1 + *(*int32)(unsafe.Pointer(bp)) = 0 + m = Xopen(tls, __ccgo_ts+941, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + if m < 0 { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + if Xioctl(tls, m, int32(uint64(Uint32FromUint32(4)< %v", r) }() + } + var err int32 + _ = err + err = X__ptsname_r(tls, fd, uintptr(unsafe.Pointer(&_buf2)), uint64(22)) + if err != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_buf2)) +} + +var _buf2 [22]uint8 + +func Xposix_openpt(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xopen(tls, __ccgo_ts+941, flags, 0) + if r < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSPC) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAGAIN) + } + return r +} + +func Xgrantpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xunlockpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* unlock at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = 0 + return Xioctl(tls, fd, int32(uint64(Uint32FromUint32(4)< %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var err, v1 int32 + var _ /* pty at bp+0 */ int32 + _, _ = err, v1 + if !(buf != 0) { + len1 = uint64(0) + } + v1 = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(uint64(Uint32FromUint32(2)<= len1 { + return int32(ERANGE) + } + return 0 +} + +func Xptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ptsname_r(tls, fd, buf, len1) +} + +func _slash_len(tls *TLS, s uintptr) (r Tsize_t) { + var s0 uintptr + _ = s0 + s0 = s + for int32(*(*uint8)(unsafe.Pointer(s))) == int32('/') { + s++ + } + return uint64(int64(s) - int64(s0)) +} + +func Xrealpath(tls *TLS, filename uintptr, resolved uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v resolved=%v, (%v:)", tls, filename, resolved, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(8208) + defer tls.Free(8208) + var check_dir, up int32 + var cnt, l, l0, nup, p, q, v10, v11, v4, v5, v6, v7, v9 Tsize_t + var k Tssize_t + var z uintptr + var _ /* output at bp+4097 */ [4096]uint8 + var _ /* stack at bp+0 */ [4097]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = check_dir, cnt, k, l, l0, nup, p, q, up, z, v10, v11, v4, v5, v6, v7, v9 + cnt = uint64(0) + nup = uint64(0) + check_dir = 0 + if !(filename != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + l = Xstrnlen(tls, filename, uint64(4097)) + if !(l != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if l >= uint64(PATH_MAX) { + goto toolong + } + p = uint64(4097) - l - uint64(1) + q = uint64(0) + Xmemcpy(tls, bp+uintptr(p), filename, l+uint64(1)) + /* Main loop. Each iteration pops the next part from stack of + * remaining path components and consumes any slashes that follow. + * If not a link, it's moved to output; if a link, contents are + * pushed to the stack. */ + goto restart +restart: + ; +_3: + ; + /* If stack starts with /, the whole component is / or // + * and the output state must be reset. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + check_dir = 0 + nup = uint64(0) + q = uint64(0) + v4 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v4] = uint8('/') + p++ + /* Initial // is special. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p+uint64(1)]) != int32('/') { + v5 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v5] = uint8('/') + } + goto _2 + } + z = X__strchrnul(tls, bp+uintptr(p), int32('/')) + v6 = uint64(int64(z) - int64(bp+uintptr(p))) + l = v6 + l0 = v6 + if !(l != 0) && !(check_dir != 0) { + goto _1 + } + /* Skip any . component but preserve check_dir status. */ + if l == uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('.') { + p += l + goto _2 + } + /* Copy next component onto output at least temporarily, to + * call readlink, but wait to advance output position until + * determining it's not a link. */ + if q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + if !(p != 0) { + goto toolong + } + p-- + v7 = p + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v7] = uint8('/') + l++ + } + if q+l >= uint64(PATH_MAX) { + goto toolong + } + Xmemcpy(tls, bp+4097+uintptr(q), bp+uintptr(p), l) + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q+l] = uint8(0) + p += l + up = 0 + if l0 == uint64(2) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(2)]) == int32('.') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(1)]) == int32('.') { + up = int32(1) + /* Any non-.. path components we could cancel start + * after nup repetitions of the 3-byte string "../"; + * if there are none, accumulate .. components to + * later apply to cwd, if needed. */ + if q <= uint64(3)*nup { + nup++ + q += l + goto _2 + } + /* When previous components are already known to be + * directories, processing .. can skip readlink. */ + if !(check_dir != 0) { + goto skip_readlink + } + } + k = Xreadlink(tls, bp+4097, bp, p) + if uint64(k) == p { + goto toolong + } + if !(k != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if !(k < 0) { + goto _8 + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return uintptr(0) + } + goto skip_readlink +skip_readlink: + ; + check_dir = 0 + if up != 0 { + for q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + q-- + } + if q > uint64(1) && (q > uint64(2) || int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/')) { + q-- + } + goto _2 + } + if l0 != 0 { + q += l + } + check_dir = int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) + goto _2 +_8: + ; + cnt++ + v9 = cnt + if v9 == uint64(SYMLOOP_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ELOOP) + return uintptr(0) + } + /* If link contents end in /, strip any slashes already on + * stack to avoid /->// or //->/// or spurious toolong. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[k-int64(1)]) == int32('/') { + for int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + p++ + } + } + p -= uint64(k) + Xmemmove(tls, bp+uintptr(p), bp, uint64(k)) + /* Skip the stack advancement in case we have a new + * absolute base path. */ + goto restart + goto _2 +_2: + ; + p += _slash_len(tls, bp+uintptr(p)) + goto _3 + goto _1 +_1: + ; + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q] = uint8(0) + if int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/') { + if !(Xgetcwd(tls, bp, uint64(4097)) != 0) { + return uintptr(0) + } + l = Xstrlen(tls, bp) + /* Cancel any initial .. components. */ + p = uint64(0) + for { + v10 = nup + nup-- + if !(v10 != 0) { + break + } + for l > uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + l-- + } + if l > uint64(1) { + l-- + } + p += uint64(2) + if p < q { + p++ + } + } + if q-p != 0 && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + v11 = l + l++ + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v11] = uint8('/') + } + if l+(q-p)+uint64(1) >= uint64(PATH_MAX) { + goto toolong + } + Xmemmove(tls, bp+4097+uintptr(l), bp+4097+uintptr(p), q-p+uint64(1)) + Xmemcpy(tls, bp+4097, bp, l) + q = l + q - p + } + if resolved != 0 { + return Xmemcpy(tls, resolved, bp+4097, q+uint64(1)) + } else { + return Xstrdup(tls, bp+4097) + } + goto toolong +toolong: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) +} + +func Xsetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setdomainname), int64(name), int64(len1))))) +} + +func Xsetpriority(tls *TLS, which int32, who Tid_t, prio int32) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v prio=%v, (%v:)", tls, which, who, prio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setpriority), int64(which), int64(who), int64(prio))))) +} + +type Tctx = struct { + Flim [2]uint64 + Fres int32 + Ferr int32 +} + +func _do_setrlimit(tls *TLS, p uintptr) { + var c uintptr + _ = c + c = p + if (*Tctx)(unsafe.Pointer(c)).Ferr > 0 { + return + } + (*Tctx)(unsafe.Pointer(c)).Ferr = int32(-X__syscall2(tls, int64(SYS_setrlimit), int64((*Tctx)(unsafe.Pointer(c)).Fres), int64(c))) +} + +func Xsetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ret int32 + var v1, v2 uint64 + var _ /* c at bp+16 */ Tctx + var _ /* tmp at bp+0 */ Trlimit + _, _, _ = ret, v1, v2 + if ^Uint64FromUint64(0) != ^Uint64FromUint64(0) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(rlim)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + rlim = bp + } + ret = int32(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(rlim), int64(Int32FromInt32(0)))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur < ^Uint64FromUint64(0) { + v1 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur + } else { + v1 = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max < ^Uint64FromUint64(0) { + v2 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max + } else { + v2 = ^Uint64FromUint64(0) + } + *(*Tctx)(unsafe.Pointer(bp + 16)) = Tctx{ + Flim: [2]uint64{ + 0: v1, + 1: v2, + }, + Fres: resource, + Ferr: -int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setrlimit), bp+16) + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr != 0 { + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr > 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr + } + return -int32(1) + } + return 0 +} + +func Xsyscall(tls *TLS, n int64, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v n=%v va=%v, (%v:)", tls, n, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, c, d, e, f Tsyscall_arg_t + var ap Tva_list + _, _, _, _, _, _, _ = a, ap, b, c, d, e, f + ap = va + a = VaInt64(&ap) + b = VaInt64(&ap) + c = VaInt64(&ap) + d = VaInt64(&ap) + e = VaInt64(&ap) + f = VaInt64(&ap) + _ = ap + return X__syscall_ret(tls, uint64(X__syscall6(tls, n, a, b, c, d, e, f))) +} + +const AF_ALG = 38 +const AF_APPLETALK = 5 +const AF_ASH = 18 +const AF_ATMPVC = 8 +const AF_ATMSVC = 20 +const AF_AX25 = 3 +const AF_BLUETOOTH = 31 +const AF_BRIDGE = 7 +const AF_CAIF = 37 +const AF_CAN = 29 +const AF_DECnet = 12 +const AF_ECONET = 19 +const AF_FILE = 1 +const AF_IB = 27 +const AF_IEEE802154 = 36 +const AF_INET = 2 +const AF_INET6 = 10 +const AF_IPX = 4 +const AF_IRDA = 23 +const AF_ISDN = 34 +const AF_IUCV = 32 +const AF_KCM = 41 +const AF_KEY = 15 +const AF_LLC = 26 +const AF_LOCAL = 1 +const AF_MAX = 45 +const AF_MPLS = 28 +const AF_NETBEUI = 13 +const AF_NETLINK = 16 +const AF_NETROM = 6 +const AF_NFC = 39 +const AF_PACKET = 17 +const AF_PHONET = 35 +const AF_PPPOX = 24 +const AF_QIPCRTR = 42 +const AF_RDS = 21 +const AF_ROSE = 11 +const AF_ROUTE = 16 +const AF_RXRPC = 33 +const AF_SECURITY = 14 +const AF_SMC = 43 +const AF_SNA = 22 +const AF_TIPC = 30 +const AF_UNIX = 1 +const AF_UNSPEC = 0 +const AF_VSOCK = 40 +const AF_WANPIPE = 25 +const AF_X25 = 9 +const AF_XDP = 44 +const LOG_ALERT = 1 +const LOG_AUTH = 32 +const LOG_AUTHPRIV = 80 +const LOG_CONS = 2 +const LOG_CRIT = 2 +const LOG_CRON = 72 +const LOG_DAEMON = 24 +const LOG_DEBUG = 7 +const LOG_EMERG = 0 +const LOG_ERR = 3 +const LOG_FACMASK = 1016 +const LOG_FTP = 88 +const LOG_INFO = 6 +const LOG_KERN = 0 +const LOG_LOCAL0 = 128 +const LOG_LOCAL1 = 136 +const LOG_LOCAL2 = 144 +const LOG_LOCAL3 = 152 +const LOG_LOCAL4 = 160 +const LOG_LOCAL5 = 168 +const LOG_LOCAL6 = 176 +const LOG_LOCAL7 = 184 +const LOG_LPR = 48 +const LOG_MAIL = 16 +const LOG_NDELAY = 8 +const LOG_NEWS = 56 +const LOG_NFACILITIES = 24 +const LOG_NOTICE = 5 +const LOG_NOWAIT = 16 +const LOG_ODELAY = 4 +const LOG_PERROR = 32 +const LOG_PID = 1 +const LOG_PRIMASK = 7 +const LOG_SYSLOG = 40 +const LOG_USER = 8 +const LOG_UUCP = 64 +const LOG_WARNING = 4 +const MSG_BATCH = 262144 +const MSG_CMSG_CLOEXEC = 1073741824 +const MSG_CONFIRM = 2048 +const MSG_CTRUNC = 8 +const MSG_DONTROUTE = 4 +const MSG_DONTWAIT = 64 +const MSG_EOR = 128 +const MSG_ERRQUEUE = 8192 +const MSG_FASTOPEN = 536870912 +const MSG_FIN = 512 +const MSG_MORE = 32768 +const MSG_NOSIGNAL = 16384 +const MSG_OOB = 1 +const MSG_PEEK = 2 +const MSG_PROXY = 16 +const MSG_RST = 4096 +const MSG_SYN = 1024 +const MSG_TRUNC = 32 +const MSG_WAITALL = 256 +const MSG_WAITFORONE = 65536 +const MSG_ZEROCOPY = 67108864 +const PF_ALG = 38 +const PF_APPLETALK = 5 +const PF_ASH = 18 +const PF_ATMPVC = 8 +const PF_ATMSVC = 20 +const PF_AX25 = 3 +const PF_BLUETOOTH = 31 +const PF_BRIDGE = 7 +const PF_CAIF = 37 +const PF_CAN = 29 +const PF_DECnet = 12 +const PF_ECONET = 19 +const PF_FILE = 1 +const PF_IB = 27 +const PF_IEEE802154 = 36 +const PF_INET = 2 +const PF_INET6 = 10 +const PF_IPX = 4 +const PF_IRDA = 23 +const PF_ISDN = 34 +const PF_IUCV = 32 +const PF_KCM = 41 +const PF_KEY = 15 +const PF_LLC = 26 +const PF_LOCAL = 1 +const PF_MAX = 45 +const PF_MPLS = 28 +const PF_NETBEUI = 13 +const PF_NETLINK = 16 +const PF_NETROM = 6 +const PF_NFC = 39 +const PF_PACKET = 17 +const PF_PHONET = 35 +const PF_PPPOX = 24 +const PF_QIPCRTR = 42 +const PF_RDS = 21 +const PF_ROSE = 11 +const PF_ROUTE = 16 +const PF_RXRPC = 33 +const PF_SECURITY = 14 +const PF_SMC = 43 +const PF_SNA = 22 +const PF_TIPC = 30 +const PF_UNIX = 1 +const PF_UNSPEC = 0 +const PF_VSOCK = 40 +const PF_WANPIPE = 25 +const PF_X25 = 9 +const PF_XDP = 44 +const SCM_CREDENTIALS = 2 +const SCM_RIGHTS = 1 +const SCM_TIMESTAMP = 29 +const SCM_TIMESTAMPING = 37 +const SCM_TIMESTAMPING_OPT_STATS = 54 +const SCM_TIMESTAMPING_PKTINFO = 58 +const SCM_TIMESTAMPNS = 35 +const SCM_TXTIME = 61 +const SCM_WIFI_STATUS = 41 +const SHUT_RD = 0 +const SHUT_RDWR = 2 +const SHUT_WR = 1 +const SOCK_CLOEXEC = 524288 +const SOCK_DCCP = 6 +const SOCK_DGRAM = 2 +const SOCK_NONBLOCK = 2048 +const SOCK_PACKET = 10 +const SOCK_RAW = 3 +const SOCK_RDM = 4 +const SOCK_SEQPACKET = 5 +const SOCK_STREAM = 1 +const SOL_AAL = 265 +const SOL_ALG = 279 +const SOL_ATM = 264 +const SOL_BLUETOOTH = 274 +const SOL_CAIF = 278 +const SOL_DCCP = 269 +const SOL_DECNET = 261 +const SOL_ICMPV6 = 58 +const SOL_IP = 0 +const SOL_IPV6 = 41 +const SOL_IRDA = 266 +const SOL_IUCV = 277 +const SOL_KCM = 281 +const SOL_LLC = 268 +const SOL_NETBEUI = 267 +const SOL_NETLINK = 270 +const SOL_NFC = 280 +const SOL_PACKET = 263 +const SOL_PNPIPE = 275 +const SOL_PPPOL2TP = 273 +const SOL_RAW = 255 +const SOL_RDS = 276 +const SOL_RXRPC = 272 +const SOL_SOCKET = 1 +const SOL_TIPC = 271 +const SOL_TLS = 282 +const SOL_X25 = 262 +const SOL_XDP = 283 +const SOMAXCONN = 128 +const SO_ACCEPTCONN = 30 +const SO_ATTACH_BPF = 50 +const SO_ATTACH_FILTER = 26 +const SO_ATTACH_REUSEPORT_CBPF = 51 +const SO_ATTACH_REUSEPORT_EBPF = 52 +const SO_BINDTODEVICE = 25 +const SO_BINDTOIFINDEX = 62 +const SO_BPF_EXTENSIONS = 48 +const SO_BROADCAST = 6 +const SO_BSDCOMPAT = 14 +const SO_BUSY_POLL = 46 +const SO_BUSY_POLL_BUDGET = 70 +const SO_CNX_ADVICE = 53 +const SO_COOKIE = 57 +const SO_DEBUG = 1 +const SO_DETACH_BPF = 27 +const SO_DETACH_FILTER = 27 +const SO_DETACH_REUSEPORT_BPF = 68 +const SO_DOMAIN = 39 +const SO_DONTROUTE = 5 +const SO_ERROR = 4 +const SO_GET_FILTER = 26 +const SO_INCOMING_CPU = 49 +const SO_INCOMING_NAPI_ID = 56 +const SO_KEEPALIVE = 9 +const SO_LINGER = 13 +const SO_LOCK_FILTER = 44 +const SO_MARK = 36 +const SO_MAX_PACING_RATE = 47 +const SO_MEMINFO = 55 +const SO_NOFCS = 43 +const SO_NO_CHECK = 11 +const SO_OOBINLINE = 10 +const SO_PASSCRED = 20 +const SO_PASSSEC = 34 +const SO_PEEK_OFF = 42 +const SO_PEERCRED = 21 +const SO_PEERGROUPS = 59 +const SO_PEERNAME = 28 +const SO_PEERSEC = 31 +const SO_PREFER_BUSY_POLL = 69 +const SO_PRIORITY = 12 +const SO_PROTOCOL = 38 +const SO_RCVBUF = 8 +const SO_RCVBUFFORCE = 33 +const SO_RCVLOWAT = 16 +const SO_RCVTIMEO = 18 +const SO_REUSEADDR = 2 +const SO_REUSEPORT = 15 +const SO_RXQ_OVFL = 40 +const SO_SECURITY_AUTHENTICATION = 22 +const SO_SECURITY_ENCRYPTION_NETWORK = 24 +const SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +const SO_SELECT_ERR_QUEUE = 45 +const SO_SNDBUF = 7 +const SO_SNDBUFFORCE = 32 +const SO_SNDLOWAT = 17 +const SO_SNDTIMEO = 19 +const SO_TIMESTAMP = 29 +const SO_TIMESTAMPING = 37 +const SO_TIMESTAMPNS = 35 +const SO_TXTIME = 61 +const SO_TYPE = 3 +const SO_WIFI_STATUS = 41 +const SO_ZEROCOPY = 60 + +type Tsocklen_t = uint32 + +type Tsa_family_t = uint16 + +type Tmsghdr = struct { + Fmsg_name uintptr + Fmsg_namelen Tsocklen_t + Fmsg_iov uintptr + Fmsg_iovlen int32 + F__pad1 int32 + Fmsg_control uintptr + Fmsg_controllen Tsocklen_t + F__pad2 int32 + Fmsg_flags int32 +} + +type Tcmsghdr = struct { + Fcmsg_len Tsocklen_t + F__pad1 int32 + Fcmsg_level int32 + Fcmsg_type int32 +} + +type Tlinger = struct { + Fl_onoff int32 + Fl_linger int32 +} + +type Tsockaddr = struct { + Fsa_family Tsa_family_t + Fsa_data [14]uint8 +} + +type Tsockaddr_storage = struct { + Fss_family Tsa_family_t + F__ss_padding [118]uint8 + F__ss_align uint64 +} + +type t__ucontext2 = Tucontext_t2 + +var _lock2 [1]int32 +var _log_ident [32]uint8 +var _log_opt int32 +var _log_facility = Int32FromInt32(1) << Int32FromInt32(3) +var _log_mask = int32(0xff) +var _log_fd = -int32(1) + +func Xsetlogmask(tls *TLS, maskpri int32) (r int32) { + if __ccgo_strace { + trc("tls=%v maskpri=%v, (%v:)", tls, maskpri, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + ret = _log_mask + if maskpri != 0 { + _log_mask = maskpri + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + return ret +} + +var _log_addr = struct { + Fsun_family int16 + Fsun_path [9]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [9]uint8{'/', 'd', 'e', 'v', '/', 'l', 'o', 'g'}, +} + +func Xcloselog(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + Xclose(tls, _log_fd) + _log_fd = -int32(1) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func ___openlog(tls *TLS) { + _log_fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if _log_fd >= 0 { + Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) + } +} + +func Xopenlog(tls *TLS, ident uintptr, opt int32, facility int32) { + if __ccgo_strace { + trc("tls=%v ident=%v opt=%v facility=%v, (%v:)", tls, ident, opt, facility, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var n Tsize_t + var _ /* cs at bp+0 */ int32 + _ = n + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + if ident != 0 { + n = Xstrnlen(tls, ident, Uint64FromInt64(32)-Uint64FromInt32(1)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&_log_ident)), ident, n) + _log_ident[n] = uint8(0) + } else { + _log_ident[0] = uint8(0) + } + _log_opt = opt + _log_facility = facility + if opt&int32(LOG_NDELAY) != 0 && _log_fd < 0 { + ___openlog(tls) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func _is_lost_conn(tls *TLS, e int32) (r int32) { + return BoolInt32(e == int32(ECONNREFUSED) || e == int32(ECONNRESET) || e == int32(ENOTCONN) || e == int32(EPIPE)) +} + +func __vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(1184) + defer tls.Free(1184) + var errno_save, fd, l, l2, pid, v1, v2 int32 + var _ /* buf at bp+80 */ [1024]uint8 + var _ /* hlen at bp+1104 */ int32 + var _ /* now at bp+16 */ Ttime_t + var _ /* timebuf at bp+0 */ [16]uint8 + var _ /* tm at bp+24 */ Ttm + _, _, _, _, _, _, _ = errno_save, fd, l, l2, pid, v1, v2 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if _log_fd < 0 { + ___openlog(tls) + } + if !(priority&Int32FromInt32(LOG_FACMASK) != 0) { + priority |= _log_facility + } + *(*Ttime_t)(unsafe.Pointer(bp + 16)) = Xtime(tls, UintptrFromInt32(0)) + Xgmtime_r(tls, bp+16, bp+24) + Xstrftime_l(tls, bp, uint64(16), __ccgo_ts+963, bp+24, uintptr(unsafe.Pointer(&X__c_locale))) + if _log_opt&int32(LOG_PID) != 0 { + v1 = Xgetpid(tls) + } else { + v1 = 0 + } + pid = v1 + l = Xsnprintf(tls, bp+80, uint64(1024), __ccgo_ts+972, VaList(bp+1120, priority, bp, bp+1104, uintptr(unsafe.Pointer(&_log_ident)), __ccgo_ts+994+BoolUintptr(!(pid != 0)), pid, __ccgo_ts+996+BoolUintptr(!(pid != 0)))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + l2 = Xvsnprintf(tls, bp+80+uintptr(l), uint64(1024)-uint64(l), message, ap) + if l2 >= 0 { + if uint64(l2) >= uint64(1024)-uint64(l) { + l = int32(Uint64FromInt64(1024) - Uint64FromInt32(1)) + } else { + l += l2 + } + if int32((*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[l-int32(1)]) != int32('\n') { + v2 = l + l++ + (*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[v2] = uint8('\n') + } + if Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0 && (!(_is_lost_conn(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0) || Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) < 0 || Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0) && _log_opt&int32(LOG_CONS) != 0 { + fd = Xopen(tls, __ccgo_ts+691, Int32FromInt32(O_WRONLY)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + if fd >= 0 { + Xdprintf(tls, fd, __ccgo_ts+998, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + Xclose(tls, fd) + } + } + if _log_opt&int32(LOG_PERROR) != 0 { + Xdprintf(tls, int32(2), __ccgo_ts+998, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + } + } +} + +func ___vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + if !(_log_mask&(Int32FromInt32(1)<<(priority&Int32FromInt32(7))) != 0) || priority & ^Int32FromInt32(0x3ff) != 0 { + return + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + __vsyslog(tls, priority, message, ap) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func Xsyslog(tls *TLS, priority int32, message uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v priority=%v message=%v va=%v, (%v:)", tls, priority, message, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + ___vsyslog(tls, priority, message, ap) + _ = ap +} + +type Tutsname1 = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + F__domainname [65]uint8 +} + +func Xuname(tls *TLS, uts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uts=%v, (%v:)", tls, uts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_uname), int64(uts))))) +} + +func X__madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))))) +} + +func Xmadvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__madvise(tls, addr, len1, advice) +} + +func Xmincore(tls *TLS, addr uintptr, len1 Tsize_t, vec uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v vec=%v, (%v:)", tls, addr, len1, vec, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mincore), int64(addr), int64(len1), int64(vec))))) +} + +func Xmlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_mlock), int64(addr), int64(len1))))) +} + +func Xmlockall(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_mlockall), int64(flags))))) +} + +const OFF_MASK = 4095 +const UNIT = 4096 + +func _dummy5(tls *TLS) { +} + +func X__mmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int64 + _ = ret + if uint64(off)&(-Uint64FromUint64(0x2000)<<(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1))|(Uint64FromUint64(4096)-Uint64FromInt32(1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + if len1 >= uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MAP_FIXED) != 0 { + _dummy5(tls) + } + ret = X__syscall6(tls, int64(SYS_mmap), int64(start), int64(len1), int64(prot), int64(flags), int64(fd), off) + /* Fixup incorrect EPERM from kernel. */ + if ret == int64(-int32(EPERM)) && !(start != 0) && flags&int32(MAP_ANON) != 0 && !(flags&Int32FromInt32(MAP_FIXED) != 0) { + ret = int64(-int32(ENOMEM)) + } + return uintptr(X__syscall_ret(tls, uint64(ret))) +} + +func Xmmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mmap(tls, start, len1, prot, flags, fd, off) +} + +func X__mprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, start Tsize_t + _, _ = end, start + start = uint64(addr) & -X__libc.Fpage_size + end = uint64(addr+uintptr(len1)+uintptr(X__libc.Fpage_size)-UintptrFromInt32(1)) & -X__libc.Fpage_size + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mprotect), int64(start), int64(end-start), int64(prot))))) +} + +func Xmprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mprotect(tls, addr, len1, prot) +} + +func _dummy6(tls *TLS) { +} + +func X__mremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var new_addr uintptr + _, _ = ap, new_addr + new_addr = uintptr(0) + if new_len >= uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MREMAP_FIXED) != 0 { + _dummy6(tls) + ap = va + new_addr = VaUintptr(&ap) + _ = ap + } + return uintptr(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mremap), int64(old_addr), int64(old_len), int64(new_len), int64(flags), int64(new_addr))))) +} + +func Xmremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mremap(tls, old_addr, old_len, new_len, flags, va) +} + +func Xmsync(tls *TLS, start uintptr, len1 Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v flags=%v, (%v:)", tls, start, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_msync), int64(start), int64(len1), int64(flags), 0, 0, 0)))) +} + +func Xmunlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munlock), int64(addr), int64(len1))))) +} + +func Xmunlockall(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_munlockall))))) +} + +func _dummy7(tls *TLS) { +} + +func X__munmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + _dummy7(tls) + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munmap), int64(start), int64(len1))))) +} + +func Xmunmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__munmap(tls, start, len1) +} + +func Xposix_madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + if advice == int32(MADV_DONTNEED) { + return 0 + } + return int32(-X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))) +} + +func X__shm_mapname(tls *TLS, name uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v, (%v:)", tls, name, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1 uintptr + _, _ = p, v1 + for int32(*(*uint8)(unsafe.Pointer(name))) == int32('/') { + name++ + } + v1 = X__strchrnul(tls, name, int32('/')) + p = v1 + if *(*uint8)(unsafe.Pointer(v1)) != 0 || p == name || int64(p)-int64(name) <= int64(2) && int32(*(*uint8)(unsafe.Pointer(name))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('.') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if int64(p)-int64(name) > int64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, buf, __ccgo_ts+1003, uint64(9)) + Xmemcpy(tls, buf+uintptr(9), name, uint64(int64(p)-int64(name)+int64(1))) + return buf +} + +func Xshm_open(tls *TLS, name uintptr, flag int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flag=%v mode=%v, (%v:)", tls, name, flag, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var fd int32 + var v1 uintptr + var _ /* buf at bp+4 */ [265]uint8 + var _ /* cs at bp+0 */ int32 + _, _ = fd, v1 + v1 = X__shm_mapname(tls, name, bp+4) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + fd = Xopen(tls, name, flag|int32(O_NOFOLLOW)|int32(O_CLOEXEC)|int32(O_NONBLOCK), VaList(bp+280, mode)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return fd +} + +func Xshm_unlink(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var v1 uintptr + var _ /* buf at bp+0 */ [265]uint8 + _ = v1 + v1 = X__shm_mapname(tls, name, bp) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + return Xunlink(tls, name) +} + +const SA = 194 +const SB = 244 +const bittab = 0 + +type Tucontext_t4 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t +} + +func Xbtowc(tls *TLS, c int32) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, v3 int32 + var v1, v2 uint32 + _, _, _, _ = b, v1, v2, v3 + b = int32(uint8(c)) + if uint32(b) < uint32(128) { + v1 = uint32(b) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) && c != -int32(1) { + v2 = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + } else { + v2 = uint32(0xffffffff) + } + v1 = v2 + } + return v1 +} + +type Tchar16_t = uint16 + +type Tchar32_t = uint32 + +func Xc16rtomb(tls *TLS, s uintptr, c16 Tchar16_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c16=%v ps=%v, (%v:)", tls, s, c16, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wc Twchar_t + var x uintptr + _, _ = wc, x + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state)) + } + x = ps + if !(s != 0) { + if *(*uint32)(unsafe.Pointer(x)) != 0 { + goto ilseq + } + return uint64(1) + } + if !(*(*uint32)(unsafe.Pointer(x)) != 0) && uint32(c16)-uint32(0xd800) < uint32(0x400) { + *(*uint32)(unsafe.Pointer(x)) = uint32((int32(c16) - int32(0xd7c0)) << int32(10)) + return uint64(0) + } + if *(*uint32)(unsafe.Pointer(x)) != 0 { + if uint32(c16)-uint32(0xdc00) >= uint32(0x400) { + goto ilseq + } else { + wc = int32(*(*uint32)(unsafe.Pointer(x)) + uint32(c16) - uint32(0xdc00)) + } + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + } else { + wc = int32(c16) + } + return Xwcrtomb(tls, s, wc, uintptr(0)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state uint32 + +func Xc32rtomb(tls *TLS, s uintptr, c32 Tchar32_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c32=%v ps=%v, (%v:)", tls, s, c32, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcrtomb(tls, s, int32(c32), ps) +} + +func Xmblen(tls *TLS, s uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmbtowc(tls, uintptr(0), s, n) +} + +func Xmbrlen(tls *TLS, s uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v st=%v, (%v:)", tls, s, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if st != 0 { + v1 = st + } else { + v1 = uintptr(unsafe.Pointer(&_internal)) + } + return Xmbrtowc(tls, uintptr(0), s, n, v1) +} + +var _internal uint32 + +func Xmbrtoc16(tls *TLS, pc16 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc16=%v s=%v n=%v ps=%v, (%v:)", tls, pc16, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pending uintptr + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _ = pending, ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state1)) + } + pending = ps + if !(s != 0) { + return Xmbrtoc16(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + /* mbrtowc states for partial UTF-8 characters have the high bit set; + * we use nonzero states without high bit for pending surrogates. */ + if int32(*(*uint32)(unsafe.Pointer(pending))) > 0 { + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*uint32)(unsafe.Pointer(pending))) + } + *(*uint32)(unsafe.Pointer(pending)) = uint32(0) + return uint64(-Int32FromInt32(3)) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) { + if *(*Twchar_t)(unsafe.Pointer(bp)) >= int32(0x10000) { + *(*uint32)(unsafe.Pointer(pending)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))&int32(0x3ff) + int32(0xdc00)) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xd7c0) + *(*Twchar_t)(unsafe.Pointer(bp))>>Int32FromInt32(10) + } + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + return ret +} + +var _internal_state1 uint32 + +func Xmbrtoc32(tls *TLS, pc32 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc32=%v s=%v n=%v ps=%v, (%v:)", tls, pc32, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _ = ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state2)) + } + if !(s != 0) { + return Xmbrtoc32(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) && pc32 != 0 { + *(*Tchar32_t)(unsafe.Pointer(pc32)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + return ret +} + +var _internal_state2 uint32 + +func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N Tsize_t + var c uint32 + var s, v3, v4 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = N, c, s, v1, v2, v3, v4 + s = src + N = n + if !(st != 0) { + st = uintptr(unsafe.Pointer(&_internal_state3)) + } + c = *(*uint32)(unsafe.Pointer(st)) + if !(s != 0) { + if c != 0 { + goto ilseq + } + return uint64(0) + } else { + if !(wc != 0) { + wc = bp + } + } + if !(n != 0) { + return uint64(-Int32FromInt32(2)) + } + if !(c != 0) { + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolUint64(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Uint64FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + n-- + } + if n != 0 { + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + goto loop + loop: + ; + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + goto loop + } + } + *(*uint32)(unsafe.Pointer(st)) = c + return uint64(-Int32FromInt32(2)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state3 uint32 + +func Xmbsinit(tls *TLS, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(st != 0) || !(*(*uint32)(unsafe.Pointer(st)) != 0)) +} + +func Xmbsnrtowcs(tls *TLS, wcs uintptr, src uintptr, n Tsize_t, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v src=%v n=%v wn=%v st=%v, (%v:)", tls, wcs, src, n, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + var cnt, l, n2, v1 Tsize_t + var tmp_s, ws uintptr + var v2 bool + var v3 uint64 + var _ /* s at bp+1024 */ uintptr + var _ /* wbuf at bp+0 */ [256]Twchar_t + _, _, _, _, _, _, _, _ = cnt, l, n2, tmp_s, ws, v1, v2, v3 + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 1024)) = *(*uintptr)(unsafe.Pointer(src)) + if !(wcs != 0) { + ws = bp + wn = Uint64FromInt64(1024) / Uint64FromInt64(4) + } else { + ws = wcs + } + /* making sure output buffer size is at most n/4 will ensure + * that mbsrtowcs never reads more than n input bytes. thus + * we can use mbsrtowcs as long as it's practical.. */ + for { + if v2 = *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 && wn != 0; v2 { + v1 = n / Uint64FromInt32(4) + n2 = v1 + } + if !(v2 && (v1 >= wn || n2 > uint64(32))) { + break + } + if n2 >= wn { + n2 = wn + } + tmp_s = *(*uintptr)(unsafe.Pointer(bp + 1024)) + l = Xmbsrtowcs(tls, ws, bp+1024, n2, st) + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + wn = uint64(0) + break + } + if ws != bp { + ws += uintptr(l) * 4 + wn -= l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + v3 = n - uint64(int64(*(*uintptr)(unsafe.Pointer(bp + 1024)))-int64(tmp_s)) + } else { + v3 = uint64(0) + } + n = v3 + cnt += l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + for wn != 0 && n != 0 { + l = Xmbrtowc(tls, ws, *(*uintptr)(unsafe.Pointer(bp + 1024)), n, st) + if l+uint64(2) <= uint64(2) { + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + break + } + if !(l != 0) { + *(*uintptr)(unsafe.Pointer(bp + 1024)) = uintptr(0) + break + } + /* have to roll back partial character */ + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + break + } + *(*uintptr)(unsafe.Pointer(bp + 1024)) += uintptr(l) + n -= l + /* safe - this loop runs fewer than sizeof(wbuf)/8 times */ + ws += 4 + wn-- + cnt++ + } + } + if wcs != 0 { + *(*uintptr)(unsafe.Pointer(src)) = *(*uintptr)(unsafe.Pointer(bp + 1024)) + } + return cnt +} + +func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v ws=%v src=%v wn=%v st=%v, (%v:)", tls, ws, src, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 uint32 + var s, v12, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v5, v6 uintptr + var wn0 Tsize_t + var v2 bool + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, s, wn0, v1, v12, v16, v17, v18, v19, v2, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v3, v30, v5, v6 + s = *(*uintptr)(unsafe.Pointer(src)) + wn0 = wn + c = uint32(0) + if v2 = st != 0; v2 { + v1 = *(*uint32)(unsafe.Pointer(st)) + c = v1 + } + if v2 && v1 != 0 { + if ws != 0 { + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + goto resume + } else { + goto resume0 + } + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + if !(ws != 0) { + return Xstrlen(tls, s) + } + for { + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + v5 = s + s++ + c = uint32(*(*uint8)(unsafe.Pointer(v5))) + v6 = ws + ws += 4 + *(*Twchar_t)(unsafe.Pointer(v6)) = Int32FromInt32(0xdfff) & int32(int8(c)) + wn-- + goto _4 + _4: + } + *(*Twchar_t)(unsafe.Pointer(ws)) = 0 + *(*uintptr)(unsafe.Pointer(src)) = uintptr(0) + return wn0 - wn + } + if !!(ws != 0) { + goto _7 + } +_11: + ; + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + s += uintptr(4) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + s++ + wn-- + goto _10 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _9 + } + v12 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v12)))-uint32(0xc2)] + goto resume0 +resume0: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(2) + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(3) + goto _9 + } + s++ + } + } + wn-- + c = uint32(0) + goto _10 +_10: + ; + goto _11 + goto _9 +_9: + ; + goto _8 +_7: + ; +_15: + ; + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for wn >= uint64(5) && !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + v16 = ws + ws += 4 + v17 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v16)) = int32(*(*uint8)(unsafe.Pointer(v17))) + v18 = ws + ws += 4 + v19 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v18)) = int32(*(*uint8)(unsafe.Pointer(v19))) + v20 = ws + ws += 4 + v21 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v20)) = int32(*(*uint8)(unsafe.Pointer(v21))) + v22 = ws + ws += 4 + v23 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v22)) = int32(*(*uint8)(unsafe.Pointer(v23))) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + v24 = ws + ws += 4 + v25 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v24)) = int32(*(*uint8)(unsafe.Pointer(v25))) + wn-- + goto _14 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _13 + } + v26 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v26)))-uint32(0xc2)] + goto resume +resume: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _13 + } + v27 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(2) + goto _13 + } + v28 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(3) + goto _13 + } + v29 = s + s++ + c = c< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _s + return Xmbsrtowcs(tls, ws, bp, wn, uintptr(0)) +} + +func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v, (%v:)", tls, wc, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c uint32 + var s, v3, v4, v5, v6 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _ = c, s, v1, v2, v3, v4, v5, v6 + s = src + if !(s != 0) { + return 0 + } + if !(n != 0) { + goto ilseq + } + if !(wc != 0) { + wc = bp + } + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolInt32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Int32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + /* Avoid excessive checks against n: If shifting the state n-1 + * times does not clear the high bit, then the value of n is + * insufficient to read a character */ + if n < uint64(4) && c<<(uint64(6)*n-uint64(6))&(Uint32FromUint32(1)<>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v5 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v6 = s + s++ + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(c< %v", r) }() + } + var v1 int32 + var v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if !(s != 0) { + return uint64(1) + } + if uint32(wc) < uint32(0x80) { + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) { + if !(uint32(wc)-Uint32FromInt32(0xdf80) < Uint32FromInt32(0x80)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if uint32(wc) < uint32(0x800) { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(0xc0) | wc>>Int32FromInt32(6)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(2) + } else { + if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(int32(0xe0) | wc>>Int32FromInt32(12)) + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(3) + } else { + if uint32(wc)-uint32(0x10000) < uint32(0x100000) { + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(int32(0xf0) | wc>>Int32FromInt32(18)) + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(int32(0x80) | wc>>Int32FromInt32(12)&int32(0x3f)) + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(4) + } + } + } + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +func Xwcsnrtombs(tls *TLS, dst uintptr, wcs uintptr, wn Tsize_t, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dst=%v wcs=%v wn=%v n=%v st=%v, (%v:)", tls, dst, wcs, wn, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt, l Tsize_t + var ws, v1 uintptr + var _ /* tmp at bp+0 */ [4]uint8 + _, _, _, _ = cnt, l, ws, v1 + ws = *(*uintptr)(unsafe.Pointer(wcs)) + cnt = uint64(0) + if !(dst != 0) { + n = uint64(0) + } + for ws != 0 && wn != 0 { + if n < uint64(MB_LEN_MAX) { + v1 = bp + } else { + v1 = dst + } + l = Xwcrtomb(tls, v1, *(*Twchar_t)(unsafe.Pointer(ws)), uintptr(0)) + if l == uint64(-Int32FromInt32(1)) { + cnt = uint64(-Int32FromInt32(1)) + break + } + if dst != 0 { + if n < uint64(MB_LEN_MAX) { + if l > n { + break + } + Xmemcpy(tls, dst, bp, l) + } + dst += uintptr(l) + n -= l + } + if !(*(*Twchar_t)(unsafe.Pointer(ws)) != 0) { + ws = uintptr(0) + break + } + ws += 4 + wn-- + cnt += l + } + if dst != 0 { + *(*uintptr)(unsafe.Pointer(wcs)) = ws + } + return cnt +} + +func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N, l Tsize_t + var ws2, v2, v3 uintptr + var _ /* buf at bp+0 */ [4]uint8 + _, _, _, _, _ = N, l, ws2, v2, v3 + N = n + if !(s != 0) { + n = uint64(0) + ws2 = *(*uintptr)(unsafe.Pointer(ws)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(ws2)) != 0) { + break + } + if uint32(*(*Twchar_t)(unsafe.Pointer(ws2))) >= uint32(0x80) { + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(ws2)), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + n += l + } else { + n++ + } + goto _1 + _1: + ; + ws2 += 4 + } + return n + } + for n >= uint64(4) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + s += uintptr(l) + n -= l + } else { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + for n != 0 { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + if l > n { + return N - n + } + Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + s += uintptr(l) + n -= l + } else { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + return N +} + +func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = ws + return Xwcsrtombs(tls, s, bp, n, uintptr(0)) +} + +func Xwctob(tls *TLS, c Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if c < uint32(128) { + return int32(c) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) && c-uint32(0xdf80) < uint32(0x80) { + return int32(uint8(c)) + } + return -int32(1) +} + +func Xwctomb(tls *TLS, s uintptr, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v wc=%v, (%v:)", tls, s, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(s != 0) { + return 0 + } + return int32(Xwcrtomb(tls, s, wc, uintptr(0))) +} + +func Xaccept(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_accept) + v2 = int32(__SC_accept) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +type Tucred = struct { + Fpid Tpid_t + Fuid Tuid_t + Fgid Tgid_t +} + +type Tmmsghdr = struct { + Fmsg_hdr Tmsghdr + Fmsg_len uint32 +} + +func Xaccept4(tls *TLS, fd int32, addr uintptr, len1 uintptr, flg int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v flg=%v, (%v:)", tls, fd, addr, len1, flg, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var ret, v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _ = r, ret, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + if !(flg != 0) { + return Xaccept(tls, fd, addr, len1) + } + v1 = int32(SYS_accept4) + v2 = int32(__SC_accept4) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(flg) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + ret = int32(X__syscall_ret(tls, uint64(v10))) + if ret >= 0 || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return ret + } + if flg & ^(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + ret = Xaccept(tls, fd, addr, len1) + if ret < 0 { + return ret + } + if flg&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flg&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return ret +} + +func Xbind(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_bind) + v2 = int32(__SC_bind) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xconnect(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_connect) + v2 = int32(__SC_connect) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +const ADD = 0 +const C_ANY = 0 +const C_CHAOS = 0 +const C_HS = 0 +const C_IN = 0 +const C_NONE = 0 +const DELETE = 0 +const FORMERR = 0 +const GETLONG = 0 +const GETSHORT = 0 +const HFIXEDSZ = 12 +const IN6ADDRSZ = 16 +const INADDRSZ = 4 +const INDIR_MASK = 192 +const INET6_ADDRSTRLEN = 46 +const INET_ADDRSTRLEN = 16 +const INT16SZ = 2 +const INT32SZ = 4 +const INT8SZ = 1 +const IN_CLASSA_HOST = 16777215 +const IN_CLASSA_MAX = 128 +const IN_CLASSA_NET = 4278190080 +const IN_CLASSA_NSHIFT = 24 +const IN_CLASSB_HOST = 65535 +const IN_CLASSB_MAX = 65536 +const IN_CLASSB_NET = 4294901760 +const IN_CLASSB_NSHIFT = 16 +const IN_CLASSC_HOST = 255 +const IN_CLASSC_NET = 4294967040 +const IN_CLASSC_NSHIFT = 8 +const IN_LOOPBACKNET = 127 +const IPPORT_RESERVED = 1024 +const IPPROTO_AH = 51 +const IPPROTO_BEETPH = 94 +const IPPROTO_COMP = 108 +const IPPROTO_DCCP = 33 +const IPPROTO_DSTOPTS = 60 +const IPPROTO_EGP = 8 +const IPPROTO_ENCAP = 98 +const IPPROTO_ESP = 50 +const IPPROTO_ETHERNET = 143 +const IPPROTO_FRAGMENT = 44 +const IPPROTO_GRE = 47 +const IPPROTO_HOPOPTS = 0 +const IPPROTO_ICMP = 1 +const IPPROTO_ICMPV6 = 58 +const IPPROTO_IDP = 22 +const IPPROTO_IGMP = 2 +const IPPROTO_IP = 0 +const IPPROTO_IPIP = 4 +const IPPROTO_IPV6 = 41 +const IPPROTO_MAX = 263 +const IPPROTO_MH = 135 +const IPPROTO_MPLS = 137 +const IPPROTO_MPTCP = 262 +const IPPROTO_MTP = 92 +const IPPROTO_NONE = 59 +const IPPROTO_PIM = 103 +const IPPROTO_PUP = 12 +const IPPROTO_RAW = 255 +const IPPROTO_ROUTING = 43 +const IPPROTO_RSVP = 46 +const IPPROTO_SCTP = 132 +const IPPROTO_TCP = 6 +const IPPROTO_TP = 29 +const IPPROTO_UDP = 17 +const IPPROTO_UDPLITE = 136 +const IPV6_2292DSTOPTS = 4 +const IPV6_2292HOPLIMIT = 8 +const IPV6_2292HOPOPTS = 3 +const IPV6_2292PKTINFO = 2 +const IPV6_2292PKTOPTIONS = 6 +const IPV6_2292RTHDR = 5 +const IPV6_ADDRFORM = 1 +const IPV6_ADDR_PREFERENCES = 72 +const IPV6_ADD_MEMBERSHIP = 20 +const IPV6_AUTHHDR = 10 +const IPV6_AUTOFLOWLABEL = 70 +const IPV6_CHECKSUM = 7 +const IPV6_DONTFRAG = 62 +const IPV6_DROP_MEMBERSHIP = 21 +const IPV6_DSTOPTS = 59 +const IPV6_FREEBIND = 78 +const IPV6_HDRINCL = 36 +const IPV6_HOPLIMIT = 52 +const IPV6_HOPOPTS = 54 +const IPV6_IPSEC_POLICY = 34 +const IPV6_JOIN_ANYCAST = 27 +const IPV6_JOIN_GROUP = 20 +const IPV6_LEAVE_ANYCAST = 28 +const IPV6_LEAVE_GROUP = 21 +const IPV6_MINHOPCOUNT = 73 +const IPV6_MTU = 24 +const IPV6_MTU_DISCOVER = 23 +const IPV6_MULTICAST_ALL = 29 +const IPV6_MULTICAST_HOPS = 18 +const IPV6_MULTICAST_IF = 17 +const IPV6_MULTICAST_LOOP = 19 +const IPV6_NEXTHOP = 9 +const IPV6_ORIGDSTADDR = 74 +const IPV6_PATHMTU = 61 +const IPV6_PKTINFO = 50 +const IPV6_PMTUDISC_DO = 2 +const IPV6_PMTUDISC_DONT = 0 +const IPV6_PMTUDISC_INTERFACE = 4 +const IPV6_PMTUDISC_OMIT = 5 +const IPV6_PMTUDISC_PROBE = 3 +const IPV6_PMTUDISC_WANT = 1 +const IPV6_PREFER_SRC_CGA = 8 +const IPV6_PREFER_SRC_COA = 4 +const IPV6_PREFER_SRC_HOME = 1024 +const IPV6_PREFER_SRC_NONCGA = 2048 +const IPV6_PREFER_SRC_PUBLIC = 2 +const IPV6_PREFER_SRC_PUBTMP_DEFAULT = 256 +const IPV6_PREFER_SRC_TMP = 1 +const IPV6_RECVDSTOPTS = 58 +const IPV6_RECVERR = 25 +const IPV6_RECVFRAGSIZE = 77 +const IPV6_RECVHOPLIMIT = 51 +const IPV6_RECVHOPOPTS = 53 +const IPV6_RECVORIGDSTADDR = 74 +const IPV6_RECVPATHMTU = 60 +const IPV6_RECVPKTINFO = 49 +const IPV6_RECVRTHDR = 56 +const IPV6_RECVTCLASS = 66 +const IPV6_ROUTER_ALERT = 22 +const IPV6_ROUTER_ALERT_ISOLATE = 30 +const IPV6_RTHDR = 57 +const IPV6_RTHDRDSTOPTS = 55 +const IPV6_RTHDR_LOOSE = 0 +const IPV6_RTHDR_STRICT = 1 +const IPV6_RTHDR_TYPE_0 = 0 +const IPV6_RXDSTOPTS = 59 +const IPV6_RXHOPOPTS = 54 +const IPV6_TCLASS = 67 +const IPV6_TRANSPARENT = 75 +const IPV6_UNICAST_HOPS = 16 +const IPV6_UNICAST_IF = 76 +const IPV6_V6ONLY = 26 +const IPV6_XFRM_POLICY = 35 +const IP_ADD_MEMBERSHIP = 35 +const IP_ADD_SOURCE_MEMBERSHIP = 39 +const IP_BIND_ADDRESS_NO_PORT = 24 +const IP_BLOCK_SOURCE = 38 +const IP_CHECKSUM = 23 +const IP_DEFAULT_MULTICAST_LOOP = 1 +const IP_DEFAULT_MULTICAST_TTL = 1 +const IP_DROP_MEMBERSHIP = 36 +const IP_DROP_SOURCE_MEMBERSHIP = 40 +const IP_FREEBIND = 15 +const IP_HDRINCL = 3 +const IP_IPSEC_POLICY = 16 +const IP_MAX_MEMBERSHIPS = 20 +const IP_MINTTL = 21 +const IP_MSFILTER = 41 +const IP_MTU = 14 +const IP_MTU_DISCOVER = 10 +const IP_MULTICAST_ALL = 49 +const IP_MULTICAST_IF = 32 +const IP_MULTICAST_LOOP = 34 +const IP_MULTICAST_TTL = 33 +const IP_NODEFRAG = 22 +const IP_OPTIONS = 4 +const IP_ORIGDSTADDR = 20 +const IP_PASSSEC = 18 +const IP_PKTINFO = 8 +const IP_PKTOPTIONS = 9 +const IP_PMTUDISC = 10 +const IP_PMTUDISC_DO = 2 +const IP_PMTUDISC_DONT = 0 +const IP_PMTUDISC_INTERFACE = 4 +const IP_PMTUDISC_OMIT = 5 +const IP_PMTUDISC_PROBE = 3 +const IP_PMTUDISC_WANT = 1 +const IP_RECVERR = 11 +const IP_RECVERR_RFC4884 = 26 +const IP_RECVFRAGSIZE = 25 +const IP_RECVOPTS = 6 +const IP_RECVORIGDSTADDR = 20 +const IP_RECVRETOPTS = 7 +const IP_RECVTOS = 13 +const IP_RECVTTL = 12 +const IP_RETOPTS = 7 +const IP_ROUTER_ALERT = 5 +const IP_TOS = 1 +const IP_TRANSPARENT = 19 +const IP_TTL = 2 +const IP_UNBLOCK_SOURCE = 37 +const IP_UNICAST_IF = 50 +const IP_XFRM_POLICY = 17 +const IQUERY = 0 +const LOCALDOMAINPARTS = 2 +const MAXCDNAME = 255 +const MAXDFLSRCH = 3 +const MAXDNAME = 1025 +const MAXDNSRCH = 6 +const MAXLABEL = 63 +const MAXNS = 3 +const MAXRESOLVSORT = 10 +const NAMESERVER_PORT = 53 +const NOERROR = 0 +const NOTAUTH = 0 +const NOTIMP = 0 +const NOTZONE = 0 +const NS_ALG_DH = 2 +const NS_ALG_DSA = 3 +const NS_ALG_DSS = 3 +const NS_ALG_EXPIRE_ONLY = 253 +const NS_ALG_MD5RSA = 1 +const NS_ALG_PRIVATE_OID = 254 +const NS_CMPRSFLGS = 192 +const NS_DEFAULTPORT = 53 +const NS_DSA_MAX_BYTES = 405 +const NS_DSA_MIN_SIZE = 213 +const NS_DSA_SIG_SIZE = 41 +const NS_HFIXEDSZ = 12 +const NS_IN6ADDRSZ = 16 +const NS_INADDRSZ = 4 +const NS_INT16SZ = 2 +const NS_INT32SZ = 4 +const NS_INT8SZ = 1 +const NS_KEY_EXTENDED_FLAGS = 4096 +const NS_KEY_NAME_ENTITY = 512 +const NS_KEY_NAME_RESERVED = 768 +const NS_KEY_NAME_TYPE = 768 +const NS_KEY_NAME_USER = 0 +const NS_KEY_NAME_ZONE = 256 +const NS_KEY_NO_AUTH = 32768 +const NS_KEY_NO_CONF = 16384 +const NS_KEY_PROT_ANY = 255 +const NS_KEY_PROT_DNSSEC = 3 +const NS_KEY_PROT_EMAIL = 2 +const NS_KEY_PROT_IPSEC = 4 +const NS_KEY_PROT_TLS = 1 +const NS_KEY_RESERVED10 = 32 +const NS_KEY_RESERVED11 = 16 +const NS_KEY_RESERVED2 = 8192 +const NS_KEY_RESERVED4 = 2048 +const NS_KEY_RESERVED5 = 1024 +const NS_KEY_RESERVED8 = 128 +const NS_KEY_RESERVED9 = 64 +const NS_KEY_RESERVED_BITMASK = 11504 +const NS_KEY_RESERVED_BITMASK2 = 65535 +const NS_KEY_SIGNATORYMASK = 15 +const NS_KEY_TYPEMASK = 49152 +const NS_KEY_TYPE_AUTH_CONF = 0 +const NS_KEY_TYPE_AUTH_ONLY = 16384 +const NS_KEY_TYPE_CONF_ONLY = 32768 +const NS_KEY_TYPE_NO_KEY = 49152 +const NS_MAXCDNAME = 255 +const NS_MAXDNAME = 1025 +const NS_MAXLABEL = 63 +const NS_MAXMSG = 65535 +const NS_MD5RSA_MAX_BASE64 = 10928 +const NS_MD5RSA_MAX_BITS = 4096 +const NS_MD5RSA_MAX_BYTES = 8195 +const NS_MD5RSA_MAX_SIZE = 512 +const NS_MD5RSA_MIN_BITS = 512 +const NS_MD5RSA_MIN_SIZE = 64 +const NS_NOTIFY_OP = 0 +const NS_NXT_BITS = 8 +const NS_NXT_MAX = 127 +const NS_OPT_DNSSEC_OK = 32768 +const NS_OPT_NSID = 3 +const NS_PACKETSZ = 512 +const NS_QFIXEDSZ = 4 +const NS_RRFIXEDSZ = 10 +const NS_SIG_ALG = 2 +const NS_SIG_EXPIR = 8 +const NS_SIG_FOOT = 16 +const NS_SIG_LABELS = 3 +const NS_SIG_OTTL = 4 +const NS_SIG_SIGNED = 12 +const NS_SIG_SIGNER = 18 +const NS_SIG_TYPE = 0 +const NS_TSIG_ALG_HMAC_MD5 = "HMAC-MD5.SIG-ALG.REG.INT" +const NS_TSIG_ERROR_FORMERR = -12 +const NS_TSIG_ERROR_NO_SPACE = -11 +const NS_TSIG_ERROR_NO_TSIG = -10 +const NS_TSIG_FUDGE = 300 +const NS_TSIG_TCP_COUNT = 100 +const NS_UPDATE_OP = 0 +const NXDOMAIN = 0 +const NXRRSET = 0 +const PACKETSZ = 512 +const PRIX16 = "X" +const PRIX32 = "X" +const PRIX8 = "X" +const PRIXFAST16 = "X" +const PRIXFAST32 = "X" +const PRIXFAST8 = "X" +const PRIXLEAST16 = "X" +const PRIXLEAST32 = "X" +const PRIXLEAST8 = "X" +const PRId16 = "d" +const PRId32 = "d" +const PRId8 = "d" +const PRIdFAST16 = "d" +const PRIdFAST32 = "d" +const PRIdFAST8 = "d" +const PRIdLEAST16 = "d" +const PRIdLEAST32 = "d" +const PRIdLEAST8 = "d" +const PRIi16 = "i" +const PRIi32 = "i" +const PRIi8 = "i" +const PRIiFAST16 = "i" +const PRIiFAST32 = "i" +const PRIiFAST8 = "i" +const PRIiLEAST16 = "i" +const PRIiLEAST32 = "i" +const PRIiLEAST8 = "i" +const PRIo16 = "o" +const PRIo32 = "o" +const PRIo8 = "o" +const PRIoFAST16 = "o" +const PRIoFAST32 = "o" +const PRIoFAST8 = "o" +const PRIoLEAST16 = "o" +const PRIoLEAST32 = "o" +const PRIoLEAST8 = "o" +const PRIu16 = "u" +const PRIu32 = "u" +const PRIu8 = "u" +const PRIuFAST16 = "u" +const PRIuFAST32 = "u" +const PRIuFAST8 = "u" +const PRIuLEAST16 = "u" +const PRIuLEAST32 = "u" +const PRIuLEAST8 = "u" +const PRIx16 = "x" +const PRIx32 = "x" +const PRIx8 = "x" +const PRIxFAST16 = "x" +const PRIxFAST32 = "x" +const PRIxFAST8 = "x" +const PRIxLEAST16 = "x" +const PRIxLEAST32 = "x" +const PRIxLEAST8 = "x" +const PUTLONG = 0 +const PUTSHORT = 0 +const QFIXEDSZ = 4 +const QUERY = 0 +const REFUSED = 0 +const RES_AAONLY = 4 +const RES_BLAST = 131072 +const RES_DEBUG = 2 +const RES_DEFAULT = 524992 +const RES_DEFNAMES = 128 +const RES_DFLRETRY = 2 +const RES_DNSRCH = 512 +const RES_EXHAUSTIVE = 1 +const RES_F_CONN = 2 +const RES_F_EDNS0ERR = 4 +const RES_F_VC = 1 +const RES_IGNTC = 32 +const RES_INIT = 1 +const RES_INSECURE1 = 1024 +const RES_INSECURE2 = 2048 +const RES_KEEPTSIG = 65536 +const RES_MAXNDOTS = 15 +const RES_MAXRETRANS = 30 +const RES_MAXRETRY = 5 +const RES_MAXTIME = 65535 +const RES_NOALIASES = 4096 +const RES_NOCHECKNAME = 32768 +const RES_NOIP6DOTINT = 524288 +const RES_PRF_ADD = 128 +const RES_PRF_ANS = 32 +const RES_PRF_AUTH = 64 +const RES_PRF_CLASS = 4 +const RES_PRF_CMD = 8 +const RES_PRF_HEAD1 = 256 +const RES_PRF_HEAD2 = 512 +const RES_PRF_HEADX = 2048 +const RES_PRF_INIT = 16384 +const RES_PRF_QUERY = 4096 +const RES_PRF_QUES = 16 +const RES_PRF_REPLY = 8192 +const RES_PRF_STATS = 1 +const RES_PRF_TTLID = 1024 +const RES_PRF_UPDATE = 2 +const RES_PRIMARY = 16 +const RES_RECURSE = 64 +const RES_ROTATE = 16384 +const RES_SNGLKUP = 2097152 +const RES_SNGLKUPREOP = 4194304 +const RES_STAYOPEN = 256 +const RES_TIMEOUT = 5 +const RES_USEBSTRING = 262144 +const RES_USEVC = 8 +const RES_USE_DNSSEC = 8388608 +const RES_USE_EDNS0 = 1048576 +const RES_USE_INET6 = 8192 +const RRFIXEDSZ = 10 +const SCNd16 = "hd" +const SCNd32 = "d" +const SCNd8 = "hhd" +const SCNdFAST16 = "d" +const SCNdFAST32 = "d" +const SCNdFAST8 = "hhd" +const SCNdLEAST16 = "hd" +const SCNdLEAST32 = "d" +const SCNdLEAST8 = "hhd" +const SCNi16 = "hi" +const SCNi32 = "i" +const SCNi8 = "hhi" +const SCNiFAST16 = "i" +const SCNiFAST32 = "i" +const SCNiFAST8 = "hhi" +const SCNiLEAST16 = "hi" +const SCNiLEAST32 = "i" +const SCNiLEAST8 = "hhi" +const SCNo16 = "ho" +const SCNo32 = "o" +const SCNo8 = "hho" +const SCNoFAST16 = "o" +const SCNoFAST32 = "o" +const SCNoFAST8 = "hho" +const SCNoLEAST16 = "ho" +const SCNoLEAST32 = "o" +const SCNoLEAST8 = "hho" +const SCNu16 = "hu" +const SCNu32 = "u" +const SCNu8 = "hhu" +const SCNuFAST16 = "u" +const SCNuFAST32 = "u" +const SCNuFAST8 = "hhu" +const SCNuLEAST16 = "hu" +const SCNuLEAST32 = "u" +const SCNuLEAST8 = "hhu" +const SCNx16 = "hx" +const SCNx32 = "x" +const SCNx8 = "hhx" +const SCNxFAST16 = "x" +const SCNxFAST32 = "x" +const SCNxFAST8 = "hhx" +const SCNxLEAST16 = "hx" +const SCNxLEAST32 = "x" +const SCNxLEAST8 = "hhx" +const SERVFAIL = 0 +const STATUS = 0 +const S_ADDT = 0 +const S_PREREQ = 0 +const S_UPDATE = 0 +const S_ZONE = 0 +const T_A = 0 +const T_A6 = 0 +const T_AAAA = 0 +const T_AFSDB = 0 +const T_ANY = 0 +const T_ATMA = 0 +const T_AVC = 0 +const T_AXFR = 0 +const T_CAA = 0 +const T_CDNSKEY = 0 +const T_CDS = 0 +const T_CNAME = 0 +const T_CSYNC = 0 +const T_DHCID = 0 +const T_DLV = 0 +const T_DNAME = 0 +const T_DNSKEY = 0 +const T_DS = 0 +const T_EID = 0 +const T_EUI48 = 0 +const T_EUI64 = 0 +const T_GID = 0 +const T_GPOS = 0 +const T_HINFO = 0 +const T_HIP = 0 +const T_IPSECKEY = 0 +const T_ISDN = 0 +const T_IXFR = 0 +const T_KEY = 0 +const T_L32 = 0 +const T_L64 = 0 +const T_LOC = 0 +const T_LP = 0 +const T_MAILA = 0 +const T_MAILB = 0 +const T_MB = 0 +const T_MD = 0 +const T_MF = 0 +const T_MG = 0 +const T_MINFO = 0 +const T_MR = 0 +const T_MX = 0 +const T_NAPTR = 0 +const T_NID = 0 +const T_NIMLOC = 0 +const T_NINFO = 0 +const T_NS = 0 +const T_NSAP = 0 +const T_NSAP_PTR = 0 +const T_NSEC = 0 +const T_NSEC3 = 0 +const T_NSEC3PARAM = 0 +const T_NULL = 0 +const T_NXT = 0 +const T_OPENPGPKEY = 0 +const T_PTR = 0 +const T_PX = 0 +const T_RKEY = 0 +const T_RP = 0 +const T_RRSIG = 0 +const T_RT = 0 +const T_SIG = 0 +const T_SMIMEA = 0 +const T_SOA = 0 +const T_SPF = 0 +const T_SRV = 0 +const T_SSHFP = 0 +const T_TA = 0 +const T_TALINK = 0 +const T_TKEY = 0 +const T_TLSA = 0 +const T_TSIG = 0 +const T_TXT = 0 +const T_UID = 0 +const T_UINFO = 0 +const T_UNSPEC = 0 +const T_URI = 0 +const T_WKS = 0 +const T_X25 = 0 +const YXDOMAIN = 0 +const YXRRSET = 0 +const _PATH_RESCONF = "/etc/resolv.conf" +const __BIND = 19950621 +const __NAMESER = 19991006 +const __PRI64 = "l" +const __PRIPTR = "l" +const __RES = 19960801 +const __UAPI_DEF_IN6_ADDR = 0 +const __UAPI_DEF_IN6_ADDR_ALT = 0 +const __UAPI_DEF_IN6_PKTINFO = 0 +const __UAPI_DEF_IN_ADDR = 0 +const __UAPI_DEF_IN_CLASS = 0 +const __UAPI_DEF_IN_IPPROTO = 0 +const __UAPI_DEF_IN_PKTINFO = 0 +const __UAPI_DEF_IP6_MTUINFO = 0 +const __UAPI_DEF_IPPROTO_V6 = 0 +const __UAPI_DEF_IPV6_MREQ = 0 +const __UAPI_DEF_IPV6_OPTIONS = 0 +const __UAPI_DEF_IP_MREQ = 0 +const __UAPI_DEF_SOCKADDR_IN = 0 +const __UAPI_DEF_SOCKADDR_IN6 = 0 +const _res = 0 + +type Tns_sect = int32 + +type ___ns_sect = int32 + +const _ns_s_qd = 0 +const _ns_s_zn = 0 +const _ns_s_an = 1 +const _ns_s_pr = 1 +const _ns_s_ns = 2 +const _ns_s_ud = 2 +const _ns_s_ar = 3 +const _ns_s_max = 4 + +type Tns_msg = struct { + F_msg uintptr + F_eom uintptr + F_id Tuint16_t + F_flags Tuint16_t + F_counts [4]Tuint16_t + F_sections [4]uintptr + F_sect Tns_sect + F_rrnum int32 + F_msg_ptr uintptr +} + +type t__ns_msg = Tns_msg + +type T_ns_flagdata = struct { + Fmask int32 + Fshift int32 +} + +type Tns_rr = struct { + Fname [1025]uint8 + Ftype1 Tuint16_t + Frr_class Tuint16_t + Fttl Tuint32_t + Frdlength Tuint16_t + Frdata uintptr +} + +type t__ns_rr = Tns_rr + +type Tns_flag = int32 + +type ___ns_flag = int32 + +const _ns_f_qr = 0 +const _ns_f_opcode = 1 +const _ns_f_aa = 2 +const _ns_f_tc = 3 +const _ns_f_rd = 4 +const _ns_f_ra = 5 +const _ns_f_z = 6 +const _ns_f_ad = 7 +const _ns_f_cd = 8 +const _ns_f_rcode = 9 +const _ns_f_max = 10 + +type Tns_opcode = int32 + +type ___ns_opcode = int32 + +const _ns_o_query = 0 +const _ns_o_iquery = 1 +const _ns_o_status = 2 +const _ns_o_notify = 4 +const _ns_o_update = 5 +const _ns_o_max = 6 + +type Tns_rcode = int32 + +type ___ns_rcode = int32 + +const _ns_r_noerror = 0 +const _ns_r_formerr = 1 +const _ns_r_servfail = 2 +const _ns_r_nxdomain = 3 +const _ns_r_notimpl = 4 +const _ns_r_refused = 5 +const _ns_r_yxdomain = 6 +const _ns_r_yxrrset = 7 +const _ns_r_nxrrset = 8 +const _ns_r_notauth = 9 +const _ns_r_notzone = 10 +const _ns_r_max = 11 +const _ns_r_badvers = 16 +const _ns_r_badsig = 16 +const _ns_r_badkey = 17 +const _ns_r_badtime = 18 + +type Tns_update_operation = int32 + +type ___ns_update_operation = int32 + +const _ns_uop_delete = 0 +const _ns_uop_add = 1 +const _ns_uop_max = 2 + +type Tns_tsig_key1 = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tsig_key = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tcp_tsig_state1 = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_tcp_tsig_state = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_type = int32 + +type ___ns_type = int32 + +const _ns_t_invalid = 0 +const _ns_t_a = 1 +const _ns_t_ns = 2 +const _ns_t_md = 3 +const _ns_t_mf = 4 +const _ns_t_cname = 5 +const _ns_t_soa = 6 +const _ns_t_mb = 7 +const _ns_t_mg = 8 +const _ns_t_mr = 9 +const _ns_t_null = 10 +const _ns_t_wks = 11 +const _ns_t_ptr = 12 +const _ns_t_hinfo = 13 +const _ns_t_minfo = 14 +const _ns_t_mx = 15 +const _ns_t_txt = 16 +const _ns_t_rp = 17 +const _ns_t_afsdb = 18 +const _ns_t_x25 = 19 +const _ns_t_isdn = 20 +const _ns_t_rt = 21 +const _ns_t_nsap = 22 +const _ns_t_nsap_ptr = 23 +const _ns_t_sig = 24 +const _ns_t_key = 25 +const _ns_t_px = 26 +const _ns_t_gpos = 27 +const _ns_t_aaaa = 28 +const _ns_t_loc = 29 +const _ns_t_nxt = 30 +const _ns_t_eid = 31 +const _ns_t_nimloc = 32 +const _ns_t_srv = 33 +const _ns_t_atma = 34 +const _ns_t_naptr = 35 +const _ns_t_kx = 36 +const _ns_t_cert = 37 +const _ns_t_a6 = 38 +const _ns_t_dname = 39 +const _ns_t_sink = 40 +const _ns_t_opt = 41 +const _ns_t_apl = 42 +const _ns_t_ds = 43 +const _ns_t_sshfp = 44 +const _ns_t_ipseckey = 45 +const _ns_t_rrsig = 46 +const _ns_t_nsec = 47 +const _ns_t_dnskey = 48 +const _ns_t_dhcid = 49 +const _ns_t_nsec3 = 50 +const _ns_t_nsec3param = 51 +const _ns_t_tlsa = 52 +const _ns_t_smimea = 53 +const _ns_t_hip = 55 +const _ns_t_ninfo = 56 +const _ns_t_rkey = 57 +const _ns_t_talink = 58 +const _ns_t_cds = 59 +const _ns_t_cdnskey = 60 +const _ns_t_openpgpkey = 61 +const _ns_t_csync = 62 +const _ns_t_spf = 99 +const _ns_t_uinfo = 100 +const _ns_t_uid = 101 +const _ns_t_gid = 102 +const _ns_t_unspec = 103 +const _ns_t_nid = 104 +const _ns_t_l32 = 105 +const _ns_t_l64 = 106 +const _ns_t_lp = 107 +const _ns_t_eui48 = 108 +const _ns_t_eui64 = 109 +const _ns_t_tkey = 249 +const _ns_t_tsig = 250 +const _ns_t_ixfr = 251 +const _ns_t_axfr = 252 +const _ns_t_mailb = 253 +const _ns_t_maila = 254 +const _ns_t_any = 255 +const _ns_t_zxfr = 256 +const _ns_t_uri = 256 +const _ns_t_caa = 257 +const _ns_t_avc = 258 +const _ns_t_ta = 32768 +const _ns_t_dlv = 32769 +const _ns_t_max = 65536 + +type Tns_class = int32 + +type ___ns_class = int32 + +const _ns_c_invalid = 0 +const _ns_c_in = 1 +const _ns_c_2 = 2 +const _ns_c_chaos = 3 +const _ns_c_hs = 4 +const _ns_c_none = 254 +const _ns_c_any = 255 +const _ns_c_max = 65536 + +type Tns_key_types = int32 + +type ___ns_key_types = int32 + +const _ns_kt_rsa = 1 +const _ns_kt_dh = 2 +const _ns_kt_dsa = 3 +const _ns_kt_private = 254 + +type Tns_cert_types = int32 + +type ___ns_cert_types = int32 + +const _cert_t_pkix = 1 +const _cert_t_spki = 2 +const _cert_t_pgp = 3 +const _cert_t_url = 253 +const _cert_t_oid = 254 + +type THEADER = struct { + F__ccgo0 uint32 + F__ccgo4 uint32 + F__ccgo8 uint32 +} + +type Timaxdiv_t = struct { + Fquot Tintmax_t + Frem Tintmax_t +} + +type Tin_port_t = uint16 + +type Tin_addr_t = uint32 + +type Tin_addr = struct { + Fs_addr Tin_addr_t +} + +type Tsockaddr_in = struct { + Fsin_family Tsa_family_t + Fsin_port Tin_port_t + Fsin_addr Tin_addr + Fsin_zero [8]Tuint8_t +} + +type Tin6_addr = struct { + F__in6_union struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + } +} + +type Tsockaddr_in6 = struct { + Fsin6_family Tsa_family_t + Fsin6_port Tin_port_t + Fsin6_flowinfo Tuint32_t + Fsin6_addr Tin6_addr + Fsin6_scope_id Tuint32_t +} + +type Tipv6_mreq = struct { + Fipv6mr_multiaddr Tin6_addr + Fipv6mr_interface uint32 +} + +type Tip_opts = struct { + Fip_dst Tin_addr + Fip_opts [40]uint8 +} + +type Tres_state = uintptr + +type t__res_state = struct { + Fretrans int32 + Fretry int32 + Foptions uint64 + Fnscount int32 + Fnsaddr_list [3]Tsockaddr_in + Fid uint16 + Fdnsrch [7]uintptr + Fdefdname [256]uint8 + Fpfcode uint64 + F__ccgo392 uint32 + Fsort_list [10]struct { + Faddr Tin_addr + Fmask Tuint32_t + } + Fqhook uintptr + Frhook uintptr + Fres_h_errno int32 + F_vcsock int32 + F_flags uint32 + F_u struct { + F_ext [0]struct { + Fnscount Tuint16_t + Fnsmap [3]Tuint16_t + Fnssocks [3]int32 + Fnscount6 Tuint16_t + Fnsinit Tuint16_t + Fnsaddrs [3]uintptr + F_initstamp [2]uint32 + } + Fpad [52]uint8 + F__ccgo_pad2 [4]byte + } +} + +type Tres_sym = struct { + Fnumber int32 + Fname uintptr + Fhumanname uintptr +} + +/* RFC 1035 message compression */ + +// C documentation +// +// /* label start offsets of a compressed domain name s */ +func _getoffs(tls *TLS, offs uintptr, base uintptr, s uintptr) (r int32) { + var i, v2 int32 + _, _ = i, v2 + i = 0 + for { + for int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != 0 { + if int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != int32(0xc0) { + return 0 + } + s = base + uintptr(int32(*(*uint8)(unsafe.Pointer(s)))&Int32FromInt32(0x3f)<= int64(0x4000) { + return 0 + } + v2 = i + i++ + *(*int16)(unsafe.Pointer(offs + uintptr(v2)*2)) = int16(int64(s) - int64(base)) + s += uintptr(int32(*(*uint8)(unsafe.Pointer(s))) + int32(1)) + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* label lengths of an ascii domain name s */ +func _getlens(tls *TLS, lens uintptr, s uintptr, l int32) (r int32) { + var i, j, k, v3, v4 int32 + _, _, _, _, _ = i, j, k, v3, v4 + i = 0 + j = 0 + k = 0 + for { + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-k)-uint32(1) > uint32(62) { + return 0 + } + v3 = i + i++ + *(*uint8)(unsafe.Pointer(lens + uintptr(v3))) = uint8(j - k) + if j == l { + return i + } + j++ + v4 = j + k = v4 + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* longest suffix match of an ascii domain with a compressed domain name dn */ +func _match(tls *TLS, offset uintptr, base uintptr, dn uintptr, end uintptr, lens uintptr, nlen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var l, m, noff, o, v2, v3 int32 + var _ /* offs at bp+0 */ [128]int16 + _, _, _, _, _, _ = l, m, noff, o, v2, v3 + m = 0 + noff = _getoffs(tls, bp, base, dn) + if !(noff != 0) { + return 0 + } + for { + nlen-- + v2 = nlen + l = int32(*(*uint8)(unsafe.Pointer(lens + uintptr(v2)))) + noff-- + v3 = noff + o = int32((*(*[128]int16)(unsafe.Pointer(bp)))[v3]) + end -= uintptr(l) + if l != int32(*(*uint8)(unsafe.Pointer(base + uintptr(o)))) || Xmemcmp(tls, base+uintptr(o)+uintptr(1), end, uint64(l)) != 0 { + return m + } + *(*int32)(unsafe.Pointer(offset)) = o + m += l + if nlen != 0 { + m++ + } + if !(nlen != 0) || !(noff != 0) { + return m + } + end-- + goto _1 + _1: + } + return r +} + +func Xdn_comp(tls *TLS, src uintptr, dst uintptr, space int32, dnptrs uintptr, lastdnptr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v src=%v dst=%v space=%v dnptrs=%v lastdnptr=%v, (%v:)", tls, src, dst, space, dnptrs, lastdnptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var bestlen, bestoff, i, j, m, n, v3, v4, v5, v6, v7 int32 + var end, p, v8 uintptr + var l Tsize_t + var _ /* lens at bp+4 */ [127]uint8 + var _ /* offset at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bestlen, bestoff, end, i, j, l, m, n, p, v3, v4, v5, v6, v7, v8 + m = 0 + bestlen = 0 + l = Xstrnlen(tls, src, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(src + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l > uint64(253) || space <= 0 { + return -int32(1) + } + if !(l != 0) { + *(*uint8)(unsafe.Pointer(dst)) = uint8(0) + return int32(1) + } + end = src + uintptr(l) + n = _getlens(tls, bp+4, src, int32(l)) + if !(n != 0) { + return -int32(1) + } + p = dnptrs + if p != 0 && *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + for { + if !(*(*uintptr)(unsafe.Pointer(p)) != 0) { + break + } + m = _match(tls, bp, *(*uintptr)(unsafe.Pointer(dnptrs)), *(*uintptr)(unsafe.Pointer(p)), end, bp+4, n) + if m > bestlen { + bestlen = m + bestoff = *(*int32)(unsafe.Pointer(bp)) + if uint64(m) == l { + break + } + } + goto _1 + _1: + ; + p += 8 + } + } + /* encode unmatched part */ + if uint64(space) < l-uint64(bestlen)+uint64(2)+BoolUint64(uint64(bestlen-Int32FromInt32(1)) < l-Uint64FromInt32(1)) { + return -int32(1) + } + Xmemcpy(tls, dst+uintptr(1), src, l-uint64(bestlen)) + v3 = Int32FromInt32(0) + j = v3 + i = v3 + for { + if !(uint64(i) < l-uint64(bestlen)) { + break + } + *(*uint8)(unsafe.Pointer(dst + uintptr(i))) = (*(*[127]uint8)(unsafe.Pointer(bp + 4)))[j] + goto _2 + _2: + ; + v4 = j + j++ + i += int32((*(*[127]uint8)(unsafe.Pointer(bp + 4)))[v4]) + int32(1) + } + /* add tail */ + if bestlen != 0 { + v5 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v5))) = uint8(int32(0xc0) | bestoff>>int32(8)) + v6 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v6))) = uint8(bestoff) + } else { + v7 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v7))) = uint8(0) + } + /* save dst pointer */ + if i > int32(2) && lastdnptr != 0 && dnptrs != 0 && *(*uintptr)(unsafe.Pointer(dnptrs)) != 0 { + for *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + } + if p+uintptr(1)*8 < lastdnptr { + v8 = p + p += 8 + *(*uintptr)(unsafe.Pointer(v8)) = dst + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + } + return i +} + +func X__dn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dbegin, dend, p, v3, v4, v6, v7 uintptr + var i, j, len1, v1, v5 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = dbegin, dend, i, j, len1, p, v1, v3, v4, v5, v6, v7 + p = src + dbegin = dest + len1 = -int32(1) + if p == end || space <= 0 { + return -int32(1) + } + if space > int32(254) { + v1 = int32(254) + } else { + v1 = space + } + dend = dest + uintptr(v1) + /* detect reference loop using an iteration counter */ + i = 0 + for { + if !(int64(i) < int64(end)-int64(base)) { + break + } + /* loop invariants: p= int64(end)-int64(base) { + return -int32(1) + } + p = base + uintptr(j) + } else { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + if dest != dbegin { + v3 = dest + dest++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + } + v4 = p + p++ + j = int32(*(*uint8)(unsafe.Pointer(v4))) + if int64(j) >= int64(end)-int64(p) || int64(j) >= int64(dend)-int64(dest) { + return -int32(1) + } + for { + v5 = j + j-- + if !(v5 != 0) { + break + } + v6 = dest + dest++ + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + } + } else { + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + if len1 < 0 { + len1 = int32(int64(p+uintptr(1)) - int64(src)) + } + return len1 + } + } + goto _2 + _2: + ; + i += int32(2) + } + return -int32(1) +} + +func Xdn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dn_expand(tls, base, end, src, dest, space) +} + +func Xdn_skipname(tls *TLS, s uintptr, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v end=%v, (%v:)", tls, s, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = s + for p < end { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + return int32(int64(p) - int64(s) + int64(1)) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) >= int32(192) { + if p+uintptr(1) < end { + return int32(int64(p) - int64(s) + int64(2)) + } else { + break + } + } else { + if int64(end)-int64(p) < int64(int32(*(*uint8)(unsafe.Pointer(p)))+int32(1)) { + break + } else { + p += uintptr(int32(*(*uint8)(unsafe.Pointer(p))) + int32(1)) + } + } + } + } + return -int32(1) +} + +const AI_ADDRCONFIG = 32 +const AI_ALL = 16 +const AI_CANONNAME = 2 +const AI_NUMERICHOST = 4 +const AI_NUMERICSERV = 1024 +const AI_PASSIVE = 1 +const AI_V4MAPPED = 8 +const EAI_AGAIN = -3 +const EAI_BADFLAGS = -1 +const EAI_FAIL = -4 +const EAI_FAMILY = -6 +const EAI_MEMORY = -10 +const EAI_NODATA = -5 +const EAI_NONAME = -2 +const EAI_OVERFLOW = -12 +const EAI_SERVICE = -8 +const EAI_SOCKTYPE = -7 +const EAI_SYSTEM = -11 +const MAXADDRS = 48 +const MAXSERVS = 2 +const NI_DGRAM = 16 +const NI_NAMEREQD = 8 +const NI_NOFQDN = 4 +const NI_NUMERICHOST = 1 +const NI_NUMERICSCOPE = 256 +const NI_NUMERICSERV = 2 + +type Taddrinfo = struct { + Fai_flags int32 + Fai_family int32 + Fai_socktype int32 + Fai_protocol int32 + Fai_addrlen Tsocklen_t + Fai_addr uintptr + Fai_canonname uintptr + Fai_next uintptr +} + +type Tnetent = struct { + Fn_name uintptr + Fn_aliases uintptr + Fn_addrtype int32 + Fn_net Tuint32_t +} + +type Thostent = struct { + Fh_name uintptr + Fh_aliases uintptr + Fh_addrtype int32 + Fh_length int32 + Fh_addr_list uintptr +} + +type Tservent = struct { + Fs_name uintptr + Fs_aliases uintptr + Fs_port int32 + Fs_proto uintptr +} + +type Tprotoent = struct { + Fp_name uintptr + Fp_aliases uintptr + Fp_proto int32 +} + +type Taibuf = struct { + Fai Taddrinfo + Fsa Tsa + Flock [1]int32 + Fslot int16 + Fref int16 +} + +type Taddress = struct { + Ffamily int32 + Fscopeid uint32 + Faddr [16]Tuint8_t + Fsortkey int32 +} + +type Tservice = struct { + Fport Tuint16_t + Fproto uint8 + Fsocktype uint8 +} + +type Tresolvconf = struct { + Fns [3]Taddress + Fnns uint32 + Fattempts uint32 + Fndots uint32 + Ftimeout uint32 +} + +func X__dns_parse(tls *TLS, r uintptr, rlen int32, callback uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v rlen=%v callback=%v ctx=%v, (%v:)", tls, r, rlen, callback, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ancount, len1, qdcount, v1, v2 int32 + var p uintptr + _, _, _, _, _, _ = ancount, len1, p, qdcount, v1, v2 + if rlen < int32(12) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(r + 3)))&int32(15) != 0 { + return 0 + } + p = r + uintptr(12) + qdcount = int32(*(*uint8)(unsafe.Pointer(r + 4)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 5))) + ancount = int32(*(*uint8)(unsafe.Pointer(r + 6)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 7))) + for { + v1 = qdcount + qdcount-- + if !(v1 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(6) { + return -int32(1) + } + p += uintptr(int32(5) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + } + for { + v2 = ancount + ancount-- + if !(v2 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(12) { + return -int32(1) + } + p += uintptr(int32(1) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + len1 = int32(*(*uint8)(unsafe.Pointer(p + 8)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(p + 9))) + if int64(len1+int32(10)) > int64(r+uintptr(rlen))-int64(p) { + return -int32(1) + } + if (*(*func(*TLS, uintptr, int32, uintptr, int32, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{callback})))(tls, ctx, int32(*(*uint8)(unsafe.Pointer(p + 1))), p+uintptr(10), len1, r, rlen) < 0 { + return -int32(1) + } + p += uintptr(int32(10) + len1) + } + return 0 +} + +type Tsa = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte +} + +func Xsethostent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } +} + +func Xgethostent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xendhostent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendnetent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendhostent(tls) +} + +func Xsetnetent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } + Xsethostent(tls, x) +} + +const ARPD_FLUSH = 3 +const ARPD_LOOKUP = 2 +const ARPD_UPDATE = 1 +const ARPHRD_6LOWPAN = 825 +const ARPHRD_ADAPT = 264 +const ARPHRD_APPLETLK = 8 +const ARPHRD_ARCNET = 7 +const ARPHRD_ASH = 781 +const ARPHRD_ATM = 19 +const ARPHRD_AX25 = 3 +const ARPHRD_BIF = 775 +const ARPHRD_CAIF = 822 +const ARPHRD_CAN = 280 +const ARPHRD_CHAOS = 5 +const ARPHRD_CISCO = 513 +const ARPHRD_CSLIP = 257 +const ARPHRD_CSLIP6 = 259 +const ARPHRD_DDCMP = 517 +const ARPHRD_DLCI = 15 +const ARPHRD_ECONET = 782 +const ARPHRD_EETHER = 2 +const ARPHRD_ETHER = 1 +const ARPHRD_EUI64 = 27 +const ARPHRD_FCAL = 785 +const ARPHRD_FCFABRIC = 787 +const ARPHRD_FCPL = 786 +const ARPHRD_FCPP = 784 +const ARPHRD_FDDI = 774 +const ARPHRD_FRAD = 770 +const ARPHRD_HDLC = 513 +const ARPHRD_HIPPI = 780 +const ARPHRD_HWX25 = 272 +const ARPHRD_IEEE1394 = 24 +const ARPHRD_IEEE802 = 6 +const ARPHRD_IEEE80211 = 801 +const ARPHRD_IEEE80211_PRISM = 802 +const ARPHRD_IEEE80211_RADIOTAP = 803 +const ARPHRD_IEEE802154 = 804 +const ARPHRD_IEEE802154_MONITOR = 805 +const ARPHRD_IEEE802_TR = 800 +const ARPHRD_INFINIBAND = 32 +const ARPHRD_IP6GRE = 823 +const ARPHRD_IPDDP = 777 +const ARPHRD_IPGRE = 778 +const ARPHRD_IRDA = 783 +const ARPHRD_LAPB = 516 +const ARPHRD_LOCALTLK = 773 +const ARPHRD_LOOPBACK = 772 +const ARPHRD_METRICOM = 23 +const ARPHRD_NETLINK = 824 +const ARPHRD_NETROM = 0 +const ARPHRD_NONE = 65534 +const ARPHRD_PHONET = 820 +const ARPHRD_PHONET_PIPE = 821 +const ARPHRD_PIMREG = 779 +const ARPHRD_PPP = 512 +const ARPHRD_PRONET = 4 +const ARPHRD_RAWHDLC = 518 +const ARPHRD_RAWIP = 519 +const ARPHRD_ROSE = 270 +const ARPHRD_RSRVD = 260 +const ARPHRD_SIT = 776 +const ARPHRD_SKIP = 771 +const ARPHRD_SLIP = 256 +const ARPHRD_SLIP6 = 258 +const ARPHRD_TUNNEL = 768 +const ARPHRD_TUNNEL6 = 769 +const ARPHRD_VOID = 65535 +const ARPHRD_VSOCKMON = 826 +const ARPHRD_X25 = 271 +const ARPOP_InREPLY = 9 +const ARPOP_InREQUEST = 8 +const ARPOP_NAK = 10 +const ARPOP_REPLY = 2 +const ARPOP_REQUEST = 1 +const ARPOP_RREPLY = 4 +const ARPOP_RREQUEST = 3 +const ATF_COM = 2 +const ATF_DONTPUB = 64 +const ATF_MAGIC = 128 +const ATF_NETMASK = 32 +const ATF_PERM = 4 +const ATF_PUBL = 8 +const ATF_USETRAILERS = 16 +const ETHERMIN = 46 +const ETHERMTU = 1500 +const ETHERTYPE_AARP = 33011 +const ETHERTYPE_ARP = 2054 +const ETHERTYPE_AT = 32923 +const ETHERTYPE_IP = 2048 +const ETHERTYPE_IPV6 = 34525 +const ETHERTYPE_IPX = 33079 +const ETHERTYPE_LOOPBACK = 36864 +const ETHERTYPE_NTRAILER = 16 +const ETHERTYPE_PUP = 512 +const ETHERTYPE_REVARP = 32821 +const ETHERTYPE_SPRITE = 1280 +const ETHERTYPE_TRAIL = 4096 +const ETHERTYPE_VLAN = 33024 +const ETHER_ADDR_LEN = 6 +const ETHER_CRC_LEN = 4 +const ETHER_HDR_LEN = 14 +const ETHER_MAX_LEN = 1518 +const ETHER_MIN_LEN = 64 +const ETHER_TYPE_LEN = 2 +const ETH_ALEN = 6 +const ETH_DATA_LEN = 1500 +const ETH_FCS_LEN = 4 +const ETH_FRAME_LEN = 1514 +const ETH_HLEN = 14 +const ETH_MAX_MTU = 65535 +const ETH_MIN_MTU = 68 +const ETH_P_1588 = 35063 +const ETH_P_8021AD = 34984 +const ETH_P_8021AH = 35047 +const ETH_P_8021Q = 33024 +const ETH_P_80221 = 35095 +const ETH_P_802_2 = 4 +const ETH_P_802_3 = 1 +const ETH_P_802_3_MIN = 1536 +const ETH_P_802_EX1 = 34997 +const ETH_P_AARP = 33011 +const ETH_P_AF_IUCV = 64507 +const ETH_P_ALL = 3 +const ETH_P_AOE = 34978 +const ETH_P_ARCNET = 26 +const ETH_P_ARP = 2054 +const ETH_P_ATALK = 32923 +const ETH_P_ATMFATE = 34948 +const ETH_P_ATMMPOA = 34892 +const ETH_P_AX25 = 2 +const ETH_P_BATMAN = 17157 +const ETH_P_BPQ = 2303 +const ETH_P_CAIF = 247 +const ETH_P_CAN = 12 +const ETH_P_CANFD = 13 +const ETH_P_CFM = 35074 +const ETH_P_CONTROL = 22 +const ETH_P_CUST = 24582 +const ETH_P_DDCMP = 6 +const ETH_P_DEC = 24576 +const ETH_P_DIAG = 24581 +const ETH_P_DNA_DL = 24577 +const ETH_P_DNA_RC = 24578 +const ETH_P_DNA_RT = 24579 +const ETH_P_DSA = 27 +const ETH_P_DSA_8021Q = 56027 +const ETH_P_ECONET = 24 +const ETH_P_EDSA = 56026 +const ETH_P_ERSPAN = 35006 +const ETH_P_ERSPAN2 = 8939 +const ETH_P_FCOE = 35078 +const ETH_P_FIP = 35092 +const ETH_P_HDLC = 25 +const ETH_P_HSR = 35119 +const ETH_P_IBOE = 35093 +const ETH_P_IEEE802154 = 246 +const ETH_P_IEEEPUP = 2560 +const ETH_P_IEEEPUPAT = 2561 +const ETH_P_IFE = 60734 +const ETH_P_IP = 2048 +const ETH_P_IPV6 = 34525 +const ETH_P_IPX = 33079 +const ETH_P_IRDA = 23 +const ETH_P_LAT = 24580 +const ETH_P_LINK_CTL = 34924 +const ETH_P_LLDP = 35020 +const ETH_P_LOCALTALK = 9 +const ETH_P_LOOP = 96 +const ETH_P_LOOPBACK = 36864 +const ETH_P_MACSEC = 35045 +const ETH_P_MAP = 249 +const ETH_P_MOBITEX = 21 +const ETH_P_MPLS_MC = 34888 +const ETH_P_MPLS_UC = 34887 +const ETH_P_MRP = 35043 +const ETH_P_MVRP = 35061 +const ETH_P_NCSI = 35064 +const ETH_P_NSH = 35151 +const ETH_P_PAE = 34958 +const ETH_P_PAUSE = 34824 +const ETH_P_PHONET = 245 +const ETH_P_PPPTALK = 16 +const ETH_P_PPP_DISC = 34915 +const ETH_P_PPP_MP = 8 +const ETH_P_PPP_SES = 34916 +const ETH_P_PREAUTH = 35015 +const ETH_P_PRP = 35067 +const ETH_P_PUP = 512 +const ETH_P_PUPAT = 513 +const ETH_P_QINQ1 = 37120 +const ETH_P_QINQ2 = 37376 +const ETH_P_QINQ3 = 37632 +const ETH_P_RARP = 32821 +const ETH_P_SCA = 24583 +const ETH_P_SLOW = 34825 +const ETH_P_SNAP = 5 +const ETH_P_TDLS = 35085 +const ETH_P_TEB = 25944 +const ETH_P_TIPC = 35018 +const ETH_P_TRAILER = 28 +const ETH_P_TR_802_2 = 17 +const ETH_P_TSN = 8944 +const ETH_P_WAN_PPP = 7 +const ETH_P_WCCP = 34878 +const ETH_P_X25 = 2053 +const ETH_P_XDSA = 248 +const ETH_TLEN = 2 +const ETH_ZLEN = 60 +const MAX_ADDR_LEN = 7 +const __UAPI_DEF_ETHHDR = 0 + +type Tethhdr = struct { + Fh_dest [6]Tuint8_t + Fh_source [6]Tuint8_t + Fh_proto Tuint16_t +} + +type Tether_addr = struct { + Fether_addr_octet [6]Tuint8_t +} + +type Tether_header = struct { + Fether_dhost [6]Tuint8_t + Fether_shost [6]Tuint8_t + Fether_type Tuint16_t +} + +type Tarphdr = struct { + Far_hrd Tuint16_t + Far_pro Tuint16_t + Far_hln Tuint8_t + Far_pln Tuint8_t + Far_op Tuint16_t +} + +type Tarpreq = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr + Farp_dev [16]uint8 +} + +type Tarpreq_old = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr +} + +type Tarpd_request = struct { + Freq uint16 + Fip Tuint32_t + Fdev uint64 + Fstamp uint64 + Fupdated uint64 + Fha [7]uint8 +} + +type Tether_arp = struct { + Fea_hdr Tarphdr + Farp_sha [6]Tuint8_t + Farp_spa [4]Tuint8_t + Farp_tha [6]Tuint8_t + Farp_tpa [4]Tuint8_t +} + +func Xether_aton_r(tls *TLS, x uintptr, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v p_a=%v, (%v:)", tls, x, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var n uint64 + var _ /* a at bp+0 */ Tether_addr + var _ /* y at bp+8 */ uintptr + _, _ = ii, n + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii != 0 { + if int32(*(*uint8)(unsafe.Pointer(x))) != int32(':') { + return uintptr(0) + } else { + x++ + } + } + n = Xstrtoul(tls, x, bp+8, int32(16)) + x = *(*uintptr)(unsafe.Pointer(bp + 8)) + if n > uint64(0xFF) { + return uintptr(0) + } /* bad byte */ + *(*Tuint8_t)(unsafe.Pointer(bp + uintptr(ii))) = uint8(n) + goto _1 + _1: + ; + ii++ + } + if int32(*(*uint8)(unsafe.Pointer(x))) != 0 { + return uintptr(0) + } /* bad format */ + *(*Tether_addr)(unsafe.Pointer(p_a)) = *(*Tether_addr)(unsafe.Pointer(bp)) + return p_a +} + +func Xether_aton(tls *TLS, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_aton_r(tls, x, uintptr(unsafe.Pointer(&_a))) +} + +var _a Tether_addr + +func Xether_ntoa_r(tls *TLS, p_a uintptr, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v x=%v, (%v:)", tls, p_a, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var y, v2 uintptr + _, _, _ = ii, y, v2 + y = x + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii == 0 { + v2 = __ccgo_ts + 1013 + } else { + v2 = __ccgo_ts + 1018 + } + x += uintptr(Xsprintf(tls, x, v2, VaList(bp+8, int32(*(*Tuint8_t)(unsafe.Pointer(p_a + uintptr(ii))))))) + goto _1 + _1: + ; + ii++ + } + return y +} + +func Xether_ntoa(tls *TLS, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v, (%v:)", tls, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_ntoa_r(tls, p_a, uintptr(unsafe.Pointer(&_x))) +} + +var _x [18]uint8 + +func Xether_line(tls *TLS, l uintptr, e uintptr, hostname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v l=%v e=%v hostname=%v, (%v:)", tls, l, e, hostname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_ntohost(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_hostton(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xfreeaddrinfo(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + var b, p2 uintptr + var cnt Tsize_t + _, _, _ = b, cnt, p2 + cnt = uint64(1) + for { + if !((*Taddrinfo)(unsafe.Pointer(p)).Fai_next != 0) { + break + } + goto _1 + _1: + ; + cnt++ + p = (*Taddrinfo)(unsafe.Pointer(p)).Fai_next + } + b = p - uintptr(uint64(UintptrFromInt32(0))) + b -= uintptr((*Taibuf)(unsafe.Pointer(b)).Fslot) * 88 + ___lock(tls, b+76) + p2 = b + 82 + *(*int16)(unsafe.Pointer(p2)) = int16(uint64(*(*int16)(unsafe.Pointer(p2))) - cnt) + if !(*(*int16)(unsafe.Pointer(p2)) != 0) { + Xfree(tls, b) + } else { + ___unlock(tls, b+76) + } +} + +var _msgs = [252]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'f', 'l', 'a', 'g', 's', 0, 'N', 'a', 'm', 'e', ' ', 'd', 'o', 'e', 's', ' ', 'n', 'o', 't', ' ', 'r', 'e', 's', 'o', 'l', 'v', 'e', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'a', 'm', 'e', ' ', 'h', 'a', 's', ' ', 'n', 'o', ' ', 'u', 's', 'a', 'b', 'l', 'e', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'o', 'r', ' ', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'l', 'e', 'n', 'g', 't', 'h', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'S', 'y', 's', 't', 'e', 'm', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xgai_strerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs)) + ecode++ + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode++ + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1616) + defer tls.Free(1616) + var canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, proto, r, s, saved_errno, socktype, v3 int32 + var out, outcanon uintptr + var ta [2]uintptr + var tf [2]int32 + var tl [2]Tsocklen_t + var v5 uint64 + var _ /* addrs at bp+8 */ [48]Taddress + var _ /* canon at bp+1352 */ [256]uint8 + var _ /* cs at bp+1608 */ int32 + var _ /* ports at bp+0 */ [2]Tservice + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, out, outcanon, proto, r, s, saved_errno, socktype, ta, tf, tl, v3, v5 + family = PF_UNSPEC + flags = 0 + proto = 0 + socktype = 0 + no_family = 0 + if !(host != 0) && !(serv != 0) { + return -int32(2) + } + if hint != 0 { + family = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_family + flags = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_flags + proto = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_protocol + socktype = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_socktype + mask = Int32FromInt32(AI_PASSIVE) | Int32FromInt32(AI_CANONNAME) | Int32FromInt32(AI_NUMERICHOST) | Int32FromInt32(AI_V4MAPPED) | Int32FromInt32(AI_ALL) | Int32FromInt32(AI_ADDRCONFIG) | Int32FromInt32(AI_NUMERICSERV) + if flags&mask != flags { + return -int32(1) + } + switch family { + case int32(PF_INET): + fallthrough + case int32(PF_INET6): + fallthrough + case PF_UNSPEC: + default: + return -int32(6) + } + } + if flags&int32(AI_ADDRCONFIG) != 0 { + tf = [2]int32{ + 0: int32(PF_INET), + 1: int32(PF_INET6), + } + ta = [2]uintptr{ + 0: uintptr(unsafe.Pointer(&_lo4)), + 1: uintptr(unsafe.Pointer(&_lo6)), + } + tl = [2]Tsocklen_t{ + 0: uint32(16), + 1: uint32(28), + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family == tf[int32(1)-i] { + goto _1 + } + s = Xsocket(tls, tf[i], Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_DGRAM), int32(IPPROTO_UDP)) + if s >= 0 { + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+1608) + r = Xconnect(tls, s, ta[i], tl[i]) + saved_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 1608)), uintptr(0)) + Xclose(tls, s) + if !(r != 0) { + goto _1 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = saved_errno + } + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EADDRNOTAVAIL): + fallthrough + case int32(EAFNOSUPPORT): + fallthrough + case int32(EHOSTUNREACH): + fallthrough + case int32(ENETDOWN): + fallthrough + case int32(ENETUNREACH): + default: + return -int32(11) + } + if family == tf[i] { + no_family = int32(1) + } + family = tf[int32(1)-i] + goto _1 + _1: + ; + i++ + } + } + nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) + if nservs < 0 { + return nservs + } + naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) + if naddrs < 0 { + return naddrs + } + if no_family != 0 { + return -int32(5) + } + nais = nservs * naddrs + canon_len = int32(Xstrlen(tls, bp+1352)) + out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(88)+uint64(canon_len)+uint64(1)) + if !(out != 0) { + return -int32(10) + } + if canon_len != 0 { + outcanon = out + uintptr(nais)*88 + Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+int32(1))) + } else { + outcanon = uintptr(0) + } + v3 = Int32FromInt32(0) + i = v3 + k = v3 + for { + if !(i < naddrs) { + break + } + j = 0 + for { + if !(j < nservs) { + break + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fslot = int16(k) + if (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily == int32(PF_INET) { + v5 = uint64(16) + } else { + v5 = uint64(28) + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fai = Taddrinfo{ + Fai_family: (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily, + Fai_socktype: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fsocktype), + Fai_protocol: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fproto), + Fai_addrlen: uint32(v5), + Fai_addr: out + uintptr(k)*88 + 48, + Fai_canonname: outcanon, + } + if k != 0 { + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k-int32(1))*88))).Fai.Fai_next = out + uintptr(k)*88 + } + switch (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily { + case int32(PF_INET): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) + case int32(PF_INET6): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET6) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + *(*Tuint32_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 24)) = (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Fscopeid + Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) + break + } + goto _4 + _4: + ; + j++ + k++ + } + goto _2 + _2: + ; + i++ + } + (*(*Taibuf)(unsafe.Pointer(out))).Fref = int16(nais) + *(*uintptr)(unsafe.Pointer(res)) = out + return 0 +} + +/* Define the "an address is configured" condition for address + * families via ability to create a socket for the family plus + * routability of the loopback address for the family. */ +var _lo4 = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + Fsin_addr: Tin_addr{ + Fs_addr: uint32(0x0100007f), + }, +} + +var _lo6 = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_addr: Tin6_addr{ + F__in6_union: *(*struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + })(unsafe.Pointer(&[16]Tuint8_t{ + 15: uint8(1), + })), + }, +} + +const EAI_ADDRFAMILY = -9 +const EAI_ALLDONE = -103 +const EAI_CANCELED = -101 +const EAI_IDN_ENCODE = -105 +const EAI_INPROGRESS = -100 +const EAI_INTR = -104 +const EAI_NOTCANCELED = -102 +const HOST_NOT_FOUND = 1 +const MCAST_BLOCK_SOURCE = 43 +const MCAST_EXCLUDE = 0 +const MCAST_INCLUDE = 1 +const MCAST_JOIN_GROUP = 42 +const MCAST_JOIN_SOURCE_GROUP = 46 +const MCAST_LEAVE_GROUP = 45 +const MCAST_LEAVE_SOURCE_GROUP = 47 +const MCAST_MSFILTER = 48 +const MCAST_UNBLOCK_SOURCE = 44 +const NI_MAXHOST = 255 +const NI_MAXSERV = 32 +const NO_ADDRESS = 4 +const NO_DATA = 4 +const NO_RECOVERY = 3 +const TRY_AGAIN = 2 +const h_errno = 0 + +type Tip_mreq = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr +} + +type Tip_mreqn = struct { + Fimr_multiaddr Tin_addr + Fimr_address Tin_addr + Fimr_ifindex int32 +} + +type Tip_mreq_source = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr + Fimr_sourceaddr Tin_addr +} + +type Tip_msfilter = struct { + Fimsf_multiaddr Tin_addr + Fimsf_interface Tin_addr + Fimsf_fmode Tuint32_t + Fimsf_numsrc Tuint32_t + Fimsf_slist [1]Tin_addr +} + +type Tgroup_req = struct { + Fgr_interface Tuint32_t + Fgr_group Tsockaddr_storage +} + +type Tgroup_source_req = struct { + Fgsr_interface Tuint32_t + Fgsr_group Tsockaddr_storage + Fgsr_source Tsockaddr_storage +} + +type Tgroup_filter = struct { + Fgf_interface Tuint32_t + Fgf_group Tsockaddr_storage + Fgf_fmode Tuint32_t + Fgf_numsrc Tuint32_t + Fgf_slist [1]Tsockaddr_storage +} + +type Tin_pktinfo = struct { + Fipi_ifindex int32 + Fipi_spec_dst Tin_addr + Fipi_addr Tin_addr +} + +type Tin6_pktinfo = struct { + Fipi6_addr Tin6_addr + Fipi6_ifindex uint32 +} + +type Tip6_mtuinfo = struct { + Fip6m_addr Tsockaddr_in6 + Fip6m_mtu Tuint32_t +} + +func Xgethostbyaddr(tls *TLS, a uintptr, l Tsocklen_t, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h) + size += size + uint64(1) + _h = Xmalloc(tls, size) + if !(_h != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyaddr_r(tls, a, l, af, _h, _h+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h uintptr + +func Xgethostbyaddr_r(tls *TLS, a uintptr, l Tsocklen_t, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var sl Tsocklen_t + var v1 uint64 + var _ /* sa at bp+0 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _ = i, sl, v1 + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp)) = uint16(af) + if af == int32(PF_INET6) { + v1 = uint64(28) + } else { + v1 = uint64(16) + } + sl = uint32(v1) + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Load address argument into sockaddr structure */ + if af == int32(PF_INET6) && l == uint32(16) { + Xmemcpy(tls, bp+8, a, uint64(16)) + } else { + if af == int32(PF_INET) && l == uint32(4) { + Xmemcpy(tls, bp+4, a, uint64(4)) + } else { + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EINVAL) + } + } + /* Align buffer and check for space for pointers and ip address */ + i = int32(uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1))) + if !(i != 0) { + i = int32(8) + } + if buflen <= Uint64FromInt32(5)*Uint64FromInt64(8)-uint64(i)+uint64(l) { + return int32(ERANGE) + } + buf += uintptr(uint64(8) - uint64(i)) + buflen -= Uint64FromInt32(5)*Uint64FromInt64(8) - uint64(i) + uint64(l) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)), a, uint64(l)) + buf += uintptr(l) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + 1*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + case -int32(12): + return int32(ERANGE) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + case 0: + break + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + (*Thostent)(unsafe.Pointer(h)).Fh_length = int32(l) + (*Thostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2(tls, name, int32(PF_INET)) +} + +func Xgethostbyname2(tls *TLS, name uintptr, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h1) + size += size + uint64(1) + _h1 = Xmalloc(tls, size) + if !(_h1 != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyname2_r(tls, name, af, _h1, _h1+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h1 uintptr + +func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1600) + defer tls.Free(1600) + var align, need Tsize_t + var cnt, i, v1 int32 + var v3 uintptr + var _ /* addrs at bp+0 */ [48]Taddress + var _ /* canon at bp+1344 */ [256]uint8 + _, _, _, _, _, _ = align, cnt, i, need, v1, v3 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + cnt = X__lookup_name(tls, bp, bp+1344, name, af, int32(AI_CANONNAME)) + if cnt < 0 { + switch cnt { + case -int32(2): + *(*int32)(unsafe.Pointer(err)) = int32(HOST_NOT_FOUND) + return 0 + case -int32(5): + *(*int32)(unsafe.Pointer(err)) = int32(NO_DATA) + return 0 + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + if af == int32(PF_INET6) { + v1 = int32(16) + } else { + v1 = int32(4) + } + (*Thostent)(unsafe.Pointer(h)).Fh_length = v1 + /* Align buffer */ + align = -uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1)) + need = Uint64FromInt32(4) * Uint64FromInt64(8) + need += uint64(cnt+Int32FromInt32(1)) * (uint64(8) + uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + need += Xstrlen(tls, name) + uint64(1) + need += Xstrlen(tls, bp+1344) + uint64(1) + need += align + if need > buflen { + return int32(ERANGE) + } + buf += uintptr(align) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(3) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(uint64(cnt+Int32FromInt32(1)) * uint64(8)) + i = 0 + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = buf + buf += uintptr((*Thostent)(unsafe.Pointer(h)).Fh_length) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + goto _2 + _2: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = uintptr(0) + v3 = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = v3 + (*Thostent)(unsafe.Pointer(h)).Fh_name = v3 + Xstrcpy(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, bp+1344) + buf += uintptr(Xstrlen(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name) + uint64(1)) + if Xstrcmp(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = buf + Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)), name) + buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8))) + uint64(1)) + } else { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 2*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2_r(tls, name, int32(PF_INET), h, buf, buflen, res, err) +} + +const IFADDRS_HASH_SIZE = 64 +const IFA_ADDRESS = 1 +const IFA_BROADCAST = 4 +const IFA_LABEL = 3 +const IFA_LOCAL = 2 +const IFF_ALLMULTI = 512 +const IFF_AUTOMEDIA = 16384 +const IFF_BROADCAST = 2 +const IFF_DEBUG = 4 +const IFF_DORMANT = 131072 +const IFF_DYNAMIC = 32768 +const IFF_ECHO = 262144 +const IFF_LOOPBACK = 8 +const IFF_LOWER_UP = 65536 +const IFF_MASTER = 1024 +const IFF_MULTICAST = 4096 +const IFF_NOARP = 128 +const IFF_NOTRAILERS = 32 +const IFF_POINTOPOINT = 16 +const IFF_PORTSEL = 8192 +const IFF_PROMISC = 256 +const IFF_RUNNING = 64 +const IFF_SLAVE = 2048 +const IFF_UP = 1 +const IFF_VOLATILE = 461914 +const IFHWADDRLEN = 6 +const IFLA_ADDRESS = 1 +const IFLA_BROADCAST = 2 +const IFLA_IFNAME = 3 +const IFLA_STATS = 7 +const IFNAMSIZ = 16 +const IF_NAMESIZE = 16 +const NETLINK_ROUTE = 0 +const NLMSG_DONE = 3 +const NLMSG_ERROR = 2 +const NLMSG_NOOP = 1 +const NLMSG_OVERRUN = 4 +const NLM_F_ACK = 4 +const NLM_F_ATOMIC = 1024 +const NLM_F_DUMP = 768 +const NLM_F_MATCH = 512 +const NLM_F_MULTI = 2 +const NLM_F_REQUEST = 1 +const NLM_F_ROOT = 256 +const RTM_GETADDR = 22 +const RTM_GETLINK = 18 +const RTM_NEWADDR = 20 +const RTM_NEWLINK = 16 +const __UAPI_DEF_IF_IFCONF = 0 +const __UAPI_DEF_IF_IFMAP = 0 +const __UAPI_DEF_IF_IFNAMSIZ = 0 +const __UAPI_DEF_IF_IFREQ = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO = 0 + +type Tifaddrs = struct { + Fifa_next uintptr + Fifa_name uintptr + Fifa_flags uint32 + Fifa_addr uintptr + Fifa_netmask uintptr + Fifa_ifu struct { + Fifu_dstaddr [0]uintptr + Fifu_broadaddr uintptr + } + Fifa_data uintptr +} + +type Tif_nameindex = struct { + Fif_index uint32 + Fif_name uintptr +} + +type Tifaddr = struct { + Fifa_addr Tsockaddr + Fifa_ifu struct { + Fifu_dstaddr [0]Tsockaddr + Fifu_broadaddr Tsockaddr + } + Fifa_ifp uintptr + Fifa_next uintptr +} + +type Tifmap = struct { + Fmem_start uint64 + Fmem_end uint64 + Fbase_addr uint16 + Firq uint8 + Fdma uint8 + Fport uint8 +} + +type Tifreq = struct { + Fifr_ifrn struct { + Fifrn_name [16]uint8 + } + Fifr_ifru struct { + Fifru_dstaddr [0]Tsockaddr + Fifru_broadaddr [0]Tsockaddr + Fifru_netmask [0]Tsockaddr + Fifru_hwaddr [0]Tsockaddr + Fifru_flags [0]int16 + Fifru_ivalue [0]int32 + Fifru_mtu [0]int32 + Fifru_map [0]Tifmap + Fifru_slave [0][16]uint8 + Fifru_newname [0][16]uint8 + Fifru_data [0]uintptr + Fifru_addr Tsockaddr + F__ccgo_pad12 [8]byte + } +} + +type Tifconf = struct { + Fifc_len int32 + Fifc_ifcu struct { + Fifcu_req [0]uintptr + Fifcu_buf uintptr + } +} + +type Tnlmsghdr = struct { + Fnlmsg_len Tuint32_t + Fnlmsg_type Tuint16_t + Fnlmsg_flags Tuint16_t + Fnlmsg_seq Tuint32_t + Fnlmsg_pid Tuint32_t +} + +type Trtattr = struct { + Frta_len uint16 + Frta_type uint16 +} + +type Trtgenmsg = struct { + Frtgen_family uint8 +} + +type Tifinfomsg = struct { + Fifi_family uint8 + F__ifi_pad uint8 + Fifi_type uint16 + Fifi_index int32 + Fifi_flags uint32 + Fifi_change uint32 +} + +type Tifaddrmsg = struct { + Fifa_family Tuint8_t + Fifa_prefixlen Tuint8_t + Fifa_flags Tuint8_t + Fifa_scope Tuint8_t + Fifa_index Tuint32_t +} + +/* getifaddrs() reports hardware addresses with PF_PACKET that implies + * struct sockaddr_ll. But e.g. Infiniband socket address length is + * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct + * to extend ssl_addr - callers should be able to still use it. */ +type Tsockaddr_ll_hack = struct { + Fsll_family uint16 + Fsll_protocol uint16 + Fsll_ifindex int32 + Fsll_hatype uint16 + Fsll_pkttype uint8 + Fsll_halen uint8 + Fsll_addr [24]uint8 +} + +type Tsockany = struct { + Fll [0]Tsockaddr_ll_hack + Fv4 [0]Tsockaddr_in + Fv6 [0]Tsockaddr_in6 + Fsa Tsockaddr + F__ccgo_pad4 [20]byte +} + +type Tifaddrs_storage = struct { + Fifa Tifaddrs + Fhash_next uintptr + Faddr Tsockany + Fnetmask Tsockany + Fifu Tsockany + Findex uint32 + Fname [17]uint8 +} + +type Tifaddrs_ctx = struct { + Ffirst uintptr + Flast uintptr + Fhash [64]uintptr +} + +func Xfreeifaddrs(tls *TLS, ifp uintptr) { + if __ccgo_strace { + trc("tls=%v ifp=%v, (%v:)", tls, ifp, origin(2)) + } + var n uintptr + _ = n + for ifp != 0 { + n = (*Tifaddrs)(unsafe.Pointer(ifp)).Fifa_next + Xfree(tls, ifp) + ifp = n + } +} + +func _copy_addr(tls *TLS, r uintptr, af int32, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32) { + var dst uintptr + var len1 int32 + _, _ = dst, len1 + switch af { + case int32(PF_INET): + dst = sa + 4 + len1 = int32(4) + case int32(PF_INET6): + dst = sa + 8 + len1 = int32(16) + if int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xf) == int32(0x2) { + (*(*Tsockaddr_in6)(unsafe.Pointer(sa))).Fsin6_scope_id = uint32(ifindex) + } + default: + return + } + if addrlen < uint64(len1) { + return + } + (*Tsockany)(unsafe.Pointer(sa)).Fsa.Fsa_family = uint16(af) + Xmemcpy(tls, dst, addr, uint64(len1)) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _gen_netmask(tls *TLS, r uintptr, af int32, sa uintptr, prefixlen int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v1 int32 + var _ /* addr at bp+0 */ [16]Tuint8_t + _, _ = i, v1 + *(*[16]Tuint8_t)(unsafe.Pointer(bp)) = [16]Tuint8_t{} + if uint64(prefixlen) > Uint64FromInt32(8)*Uint64FromInt64(16) { + prefixlen = int32(Uint64FromInt32(8) * Uint64FromInt64(16)) + } + i = prefixlen / int32(8) + Xmemset(tls, bp, int32(0xff), uint64(i)) + if uint64(i) < uint64(16) { + v1 = i + i++ + (*(*[16]Tuint8_t)(unsafe.Pointer(bp)))[v1] = uint8(int32(0xff) << (int32(8) - prefixlen%int32(8))) + } + _copy_addr(tls, r, af, sa, bp, uint64(16), 0) +} + +func _copy_lladdr(tls *TLS, r uintptr, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32, hatype uint16) { + if addrlen > uint64(24) { + return + } + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_family = uint16(PF_PACKET) + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_ifindex = ifindex + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_hatype = hatype + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_halen = uint8(addrlen) + Xmemcpy(tls, sa+12, addr, addrlen) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _netlink_msg_to_ifaddr(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var bucket uint32 + var ctx, ifa, ifi, ifs, ifs0, rta uintptr + var stats_len int32 + _, _, _, _, _, _, _, _ = bucket, ctx, ifa, ifi, ifs, ifs0, rta, stats_len + ctx = pctx + ifi = h + UintptrFromInt64(16) + ifa = h + UintptrFromInt64(16) + stats_len = 0 + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != int32(IFLA_STATS) { + goto _1 + } + stats_len = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - Uint64FromInt64(4)) + break + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + } else { + ifs0 = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index%uint32(IFADDRS_HASH_SIZE))*8)) + for { + if !(ifs0 != 0) { + break + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Findex == (*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index { + break + } + goto _2 + _2: + ; + ifs0 = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fhash_next + } + if !(ifs0 != 0) { + return 0 + } + } + ifs = Xcalloc(tls, uint64(1), uint64(200)+uint64(stats_len)) + if ifs == uintptr(0) { + return -int32(1) + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex = uint32((*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFLA_IFNAME): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + case int32(IFLA_ADDRESS): + _copy_lladdr(tls, ifs+24, ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_BROADCAST): + _copy_lladdr(tls, ifs+40, ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_STATS): + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data = ifs + UintptrFromInt32(1)*200 + Xmemcpy(tls, (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + break + } + goto _3 + _3: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + bucket = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex % uint32(IFADDRS_HASH_SIZE) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fhash_next = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) + *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) = ifs + } + } else { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_name + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFA_ADDRESS): + /* If ifa_addr is already set we, received an IFA_LOCAL before + * so treat this as destination address */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } else { + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } + case int32(IFA_BROADCAST): + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LOCAL): + /* If ifa_addr is set and we get IFA_LOCAL, assume we have + * a point-to-point network. Move address to correct field. */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifu = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Faddr + *(*uintptr)(unsafe.Pointer(ifs + 40)) = ifs + 136 + Xmemset(tls, ifs+64, 0, uint64(36)) + } + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LABEL): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + break + } + goto _4 + _4: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _gen_netmask(tls, ifs+32, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+100, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_prefixlen)) + } + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + if !((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst != 0) { + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst = ifs + } + if (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast != 0 { + (*Tifaddrs)(unsafe.Pointer((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast)).Fifa_next = ifs + } + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast = ifs + } else { + Xfree(tls, ifs) + } + return 0 +} + +func Xgetifaddrs(tls *TLS, ifap uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ifap=%v, (%v:)", tls, ifap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var ctx uintptr + var r int32 + var _ /* _ctx at bp+0 */ Tifaddrs_ctx + _, _ = ctx, r + ctx = bp + Xmemset(tls, ctx, 0, uint64(528)) + r = X__rtnetlink_enumerate(tls, PF_UNSPEC, PF_UNSPEC, __ccgo_fp(_netlink_msg_to_ifaddr), ctx) + if r == 0 { + *(*uintptr)(unsafe.Pointer(ifap)) = (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst + } else { + Xfreeifaddrs(tls, (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst) + } + return r +} + +const RR_PTR = 12 + +func _itoa(tls *TLS, p uintptr, x uint32) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + p += uintptr(Uint64FromInt32(3) * Uint64FromInt64(4)) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func _mkptr4(tls *TLS, s uintptr, ip uintptr) { + bp := tls.Alloc(48) + defer tls.Free(48) + Xsprintf(tls, s, __ccgo_ts+1024, VaList(bp+8, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) +} + +func _mkptr6(tls *TLS, s uintptr, ip uintptr) { + var i int32 + var v2, v3, v4, v5 uintptr + _, _, _, _, _ = i, v2, v3, v4, v5 + i = int32(15) + for { + if !(i >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&int32(15)] + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>int32(4)] + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('.') + goto _1 + _1: + ; + i-- + } + Xstrcpy(tls, s, __ccgo_ts+1049) +} + +var _xdigits = [17]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + +func _reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { + bp := tls.Alloc(1824) + defer tls.Free(1824) + var f, p, z, v1, v2, v8 uintptr + var v10, v11, v15, v16, v4, v5 int32 + var v13, v18, v7 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1592 */ TFILE + var _ /* atmp at bp+1544 */ [16]uint8 + var _ /* iplit at bp+1560 */ Taddress + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, p, z, v1, v10, v11, v13, v15, v16, v18, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1058, bp+1592, bp+512, uint64(1032)) + if !(f != 0) { + return + } + if family == int32(PF_INET) { + Xmemcpy(tls, bp+1544+uintptr(12), a, uint64(4)) + Xmemcpy(tls, bp+1544, __ccgo_ts+1069, uint64(12)) + a = bp + 1544 + } + for Xfgets(tls, bp, int32(512), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + if X__lookup_ipliteral(tls, bp+1560, bp, PF_UNSPEC) <= 0 { + continue + } + if (*(*Taddress)(unsafe.Pointer(bp + 1560))).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+1560+8+uintptr(12), bp+1560+8, uint64(4)) + Xmemcpy(tls, bp+1560+8, __ccgo_ts+1069, uint64(12)) + (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid = uint32(0) + } + if Xmemcmp(tls, a, bp+1560+8, uint64(16)) != 0 || (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid != scopeid { + continue + } + for { + if v13 = *(*uint8)(unsafe.Pointer(p)) != 0; v13 { + v10 = int32(*(*uint8)(unsafe.Pointer(p))) + v11 = BoolInt32(v10 == int32(' ') || uint32(v10)-uint32('\t') < uint32(5)) + goto _12 + _12: + } + if !(v13 && v11 != 0) { + break + } + goto _9 + _9: + ; + p++ + } + z = p + for { + if v18 = *(*uint8)(unsafe.Pointer(z)) != 0; v18 { + v15 = int32(*(*uint8)(unsafe.Pointer(z))) + v16 = BoolInt32(v15 == int32(' ') || uint32(v15)-uint32('\t') < uint32(5)) + goto _17 + _17: + } + if !(v18 && !(v16 != 0)) { + break + } + goto _14 + _14: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if int64(z)-int64(p) < int64(256) { + Xmemcpy(tls, buf, p, uint64(int64(z)-int64(p)+int64(1))) + break + } + } + X__fclose_ca(tls, f) +} + +func _reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { + bp := tls.Alloc(1408) + defer tls.Free(1408) + var f, p, v1, v2, v8 uintptr + var svport uint64 + var v4, v5 int32 + var v7 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _ = f, p, svport, v1, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1082, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + return + } + for Xfgets(tls, bp, int32(128), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + svport = Xstrtoul(tls, p, bp+128, int32(10)) + if svport != uint64(port) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if dgram != 0 && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1096, uint64(4)) != 0 { + continue + } + if !(dgram != 0) && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1101, uint64(4)) != 0 { + continue + } + if int64(p)-t__predefined_ptrdiff_t(bp) > int64(32) { + continue + } + Xmemcpy(tls, buf, bp, uint64(int64(p)-t__predefined_ptrdiff_t(bp))) + break + } + X__fclose_ca(tls, f) +} + +func _dns_parse_callback(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + if rr != int32(RR_PTR) { + return 0 + } + if X__dn_expand(tls, packet, packet+uintptr(plen), data, c, int32(256)) <= 0 { + *(*uint8)(unsafe.Pointer(c)) = uint8(0) + } + return 0 +} + +func Xgetnameinfo(tls *TLS, sa uintptr, sl Tsocklen_t, node uintptr, nodelen Tsocklen_t, serv uintptr, servlen Tsocklen_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sa=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa, sl, node, nodelen, serv, servlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(976) + defer tls.Free(976) + var a, p, p1, v1 uintptr + var af, port, qlen, rlen int32 + var scopeid uint32 + var _ /* buf at bp+78 */ [256]uint8 + var _ /* num at bp+334 */ [13]uint8 + var _ /* ptr at bp+0 */ [78]uint8 + var _ /* query at bp+347 */ [96]uint8 + var _ /* reply at bp+443 */ [512]uint8 + var _ /* tmp at bp+955 */ [17]uint8 + _, _, _, _, _, _, _, _, _ = a, af, p, p1, port, qlen, rlen, scopeid, v1 + af = int32((*Tsockaddr)(unsafe.Pointer(sa)).Fsa_family) + switch af { + case int32(PF_INET): + a = sa + 4 + if uint64(sl) < uint64(16) { + return -int32(6) + } + _mkptr4(tls, bp, a) + scopeid = uint32(0) + case int32(PF_INET6): + a = sa + 8 + if uint64(sl) < uint64(28) { + return -int32(6) + } + if Xmemcmp(tls, a, __ccgo_ts+1069, uint64(12)) != 0 { + _mkptr6(tls, bp, a) + } else { + _mkptr4(tls, bp, a+uintptr(12)) + } + scopeid = (*Tsockaddr_in6)(unsafe.Pointer(sa)).Fsin6_scope_id + default: + return -int32(6) + } + if node != 0 && nodelen != 0 { + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + _reverse_hosts(tls, bp+78, a, scopeid, af) + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) && !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + qlen = X__res_mkquery(tls, 0, bp, int32(1), int32(RR_PTR), uintptr(0), 0, uintptr(0), bp+347, int32(96)) + (*(*[96]uint8)(unsafe.Pointer(bp + 347)))[int32(3)] = uint8(0) /* don't need AD flag */ + rlen = X__res_send(tls, bp+347, qlen, bp+443, int32(512)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if rlen > 0 { + if uint64(rlen) > uint64(512) { + rlen = int32(512) + } + X__dns_parse(tls, bp+443, rlen, __ccgo_fp(_dns_parse_callback), bp+78) + } + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) { + if flags&int32(NI_NAMEREQD) != 0 { + return -int32(2) + } + Xinet_ntop(tls, af, a, bp+78, uint32(256)) + if scopeid != 0 { + p = uintptr(0) + if !(flags&Int32FromInt32(NI_NUMERICSCOPE) != 0) && (int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xf) == int32(0x2)) { + p = Xif_indextoname(tls, scopeid, bp+955+uintptr(1)) + } + if !(p != 0) { + p = _itoa(tls, bp+334, scopeid) + } + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8('%') + Xstrcat(tls, bp+78, p) + } + } + if Xstrlen(tls, bp+78) >= uint64(nodelen) { + return -int32(12) + } + Xstrcpy(tls, node, bp+78) + } + if serv != 0 && servlen != 0 { + p1 = bp + 78 + port = int32(Xntohs(tls, (*Tsockaddr_in)(unsafe.Pointer(sa)).Fsin_port)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICSERV) != 0) { + _reverse_services(tls, bp+78, port, flags&int32(NI_DGRAM)) + } + if !(*(*uint8)(unsafe.Pointer(p1)) != 0) { + p1 = _itoa(tls, bp+334, uint32(port)) + } + if Xstrlen(tls, p1) >= uint64(servlen) { + return -int32(12) + } + Xstrcpy(tls, serv, p1) + } + return 0 +} + +func Xgetpeername(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getpeername) + v2 = int32(__SC_getpeername) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xgetservbyname(tls *TLS, name uintptr, prots uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v, (%v:)", tls, name, prots, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if Xgetservbyname_r(tls, name, prots, uintptr(unsafe.Pointer(&_se)), uintptr(unsafe.Pointer(&_buf3)), uint64(16), bp) != 0 { + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_se)) +} + +var _se Tservent + +var _buf3 [2]uintptr + +const ALIGN = 0 + +func Xgetservbyname_r(tls *TLS, name uintptr, prots uintptr, se uintptr, buf uintptr, buflen Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v se=%v buf=%v buflen=%v res=%v, (%v:)", tls, name, prots, se, buf, buflen, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var align, cnt, proto int32 + var v1 uintptr + var _ /* end at bp+8 */ uintptr + var _ /* servs at bp+0 */ [2]Tservice + _, _, _, _ = align, cnt, proto, v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Don't treat numeric port number strings as service records. */ + *(*uintptr)(unsafe.Pointer(bp + 8)) = __ccgo_ts + Xstrtoul(tls, name, bp+8, int32(10)) + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + return int32(ENOENT) + } + /* Align buffer */ + align = int32(-uint64(buf) & (Uint64FromInt64(16) - Uint64FromInt64(8) - Uint64FromInt32(1))) + if buflen < Uint64FromInt32(2)*Uint64FromInt64(8)+uint64(align) { + return int32(ERANGE) + } + buf += uintptr(align) + if !(prots != 0) { + proto = 0 + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1106) != 0) { + proto = int32(IPPROTO_TCP) + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1110) != 0) { + proto = int32(IPPROTO_UDP) + } else { + return int32(EINVAL) + } + } + } + cnt = X__lookup_serv(tls, bp, name, proto, 0, 0) + if cnt < 0 { + switch cnt { + case -int32(10): + fallthrough + case -int32(11): + return int32(ENOMEM) + default: + return int32(ENOENT) + } + } + (*Tservent)(unsafe.Pointer(se)).Fs_name = name + (*Tservent)(unsafe.Pointer(se)).Fs_aliases = buf + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases)) = (*Tservent)(unsafe.Pointer(se)).Fs_name + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases + 1*8)) = uintptr(0) + (*Tservent)(unsafe.Pointer(se)).Fs_port = int32(Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fport)) + if int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fproto) == int32(IPPROTO_TCP) { + v1 = __ccgo_ts + 1106 + } else { + v1 = __ccgo_ts + 1110 + } + (*Tservent)(unsafe.Pointer(se)).Fs_proto = v1 + *(*uintptr)(unsafe.Pointer(res)) = se + return 0 +} + +func Xgetsockname(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockname) + v2 = int32(__SC_getsockname) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xgetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var r, v10, v21, v32 int64 + var r1, v1, v12, v13, v14, v2, v23, v24, v25, v3 int32 + var tv uintptr + var v15, v16, v17, v18, v19, v20, v26, v27, v28, v29, v30, v31, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* tv32 at bp+296 */ [2]int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, tv, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v23, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockopt) + v2 = int32(__SC_getsockopt) + v3 = 0 + v4 = int64(fd) + v5 = int64(level) + v6 = int64(optname) + v7 = int64(optval) + v8 = int64(optlen) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+248)) + } + v10 = r + goto _11 +_11: + r1 = int32(v10) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if uint64(*(*Tsocklen_t)(unsafe.Pointer(optlen))) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + *(*[1]Tsocklen_t)(unsafe.Pointer(bp + 96)) = [1]Tsocklen_t{ + 0: uint32(16), + } + v12 = int32(SYS_getsockopt) + v13 = int32(__SC_getsockopt) + v14 = 0 + v15 = int64(fd) + v16 = int64(level) + v17 = int64(optname) + v18 = int64(bp + 296) + v19 = int64(bp + 96) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+248)) + } + v21 = r + goto _22 + _22: + r1 = int32(v21) + if r1 < 0 { + break + } + tv = optval + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*[2]int64)(unsafe.Pointer(bp + 296)))[0] + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = (*(*[2]int64)(unsafe.Pointer(bp + 296)))[int32(1)] + *(*Tsocklen_t)(unsafe.Pointer(optlen)) = uint32(16) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v23 = int32(SYS_getsockopt) + v24 = int32(__SC_getsockopt) + v25 = 0 + v26 = int64(fd) + v27 = int64(level) + v28 = int64(optname) + v29 = int64(optval) + v30 = int64(optlen) + v31 = int64(Int32FromInt32(0)) + if v25 != 0 { + r = ___syscall_cp(tls, int64(v23), v26, v27, v28, v29, v30, v31) + } else { + r = X__syscall6(tls, int64(v23), v26, v27, v28, v29, v30, v31) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v32 = r + goto _33 + } + if v25 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v24), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v24), int64(bp+248)) + } + v32 = r + goto _33 + _33: + r1 = int32(v32) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func X__h_errno_location(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstack != 0) { + return uintptr(unsafe.Pointer(&Xh_errno)) + } + return ___get_tp(tls) + 144 +} + +func Xherror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1, v2 uintptr + _, _ = v1, v2 + if msg != 0 { + v1 = msg + } else { + v1 = __ccgo_ts + } + if msg != 0 { + v2 = __ccgo_ts + 386 + } else { + v2 = __ccgo_ts + } + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+1114, VaList(bp+8, v1, v2, Xhstrerror(tls, *(*int32)(unsafe.Pointer(X__h_errno_location(tls)))))) +} + +type Tcpu_set_t1 = struct { + F__bits [16]uint64 +} + +type Tucontext_t5 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t1 +} + +var _msgs1 = [84]uint8{'H', 'o', 's', 't', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xhstrerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs1)) + ecode-- + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode-- + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xhtonl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +func Xif_freenameindex(tls *TLS, idx uintptr) { + if __ccgo_strace { + trc("tls=%v idx=%v, (%v:)", tls, idx, origin(2)) + } + Xfree(tls, idx) +} + +func Xif_indextoname(tls *TLS, index uint32, name uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v index=%v name=%v, (%v:)", tls, index, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _ = fd, r, v1 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(bp + 16)) = int32(index) + r = Xioctl(tls, fd, int32(SIOCGIFNAME), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENODEV) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENXIO) + } + return uintptr(0) + } + return Xstrncpy(tls, name, bp, uint64(IF_NAMESIZE)) +} + +type Tifnamemap = struct { + Fhash_next uint32 + Findex uint32 + Fnamelen uint8 + Fname [16]uint8 +} + +type Tifnameindexctx = struct { + Fnum uint32 + Fallocated uint32 + Fstr_bytes uint32 + Flist uintptr + Fhash [64]uint32 +} + +func _netlink_msg_to_nameindex(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var a Tsize_t + var bucket, index, namelen, type1 int32 + var ctx, ifa, ifi, map1, rta uintptr + var i, v2 uint32 + _, _, _, _, _, _, _, _, _, _, _, _ = a, bucket, ctx, i, ifa, ifi, index, map1, namelen, rta, type1, v2 + ctx = pctx + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + ifi = h + UintptrFromInt64(16) + index = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index + type1 = int32(IFLA_IFNAME) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } else { + ifa = h + UintptrFromInt64(16) + index = int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index) + type1 = int32(IFA_LABEL) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != type1 { + goto _1 + } + namelen = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - uint64(4) - uint64(1)) + if namelen > int32(IF_NAMESIZE) { + return 0 + } + /* suppress duplicates */ + bucket = index % int32(IFADDRS_HASH_SIZE) + i = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + for i != 0 { + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr(i-uint32(1))*28 + if (*Tifnamemap)(unsafe.Pointer(map1)).Findex == uint32(index) && int32((*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen) == namelen && Xmemcmp(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) == 0 { + return 0 + } + i = (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next + } + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum >= (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated { + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated != 0 { + v2 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated*uint32(2) + uint32(1) + } else { + v2 = uint32(8) + } + a = uint64(v2) + if a > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(28) { + return -int32(1) + } + map1 = Xrealloc(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist, a*uint64(28)) + if !(map1 != 0) { + return -int32(1) + } + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist = map1 + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated = uint32(a) + } + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*28 + (*Tifnamemap)(unsafe.Pointer(map1)).Findex = uint32(index) + (*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen = uint8(namelen) + Xmemcpy(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) + *(*uint32)(unsafe.Pointer(ctx + 8)) += uint32(namelen + int32(1)) + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum++ + (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum + return 0 + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + return 0 +} + +func Xif_nameindex(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var ctx, d, ifs, p, s, v2 uintptr + var i int32 + var _ /* _ctx at bp+0 */ Tifnameindexctx + var _ /* cs at bp+280 */ int32 + _, _, _, _, _, _, _ = ctx, d, i, ifs, p, s, v2 + ctx = bp + ifs = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+280) + Xmemset(tls, ctx, 0, uint64(280)) + if X__rtnetlink_enumerate(tls, PF_UNSPEC, int32(PF_INET), __ccgo_fp(_netlink_msg_to_nameindex), ctx) < 0 { + goto err + } + ifs = Xmalloc(tls, uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum+Uint32FromInt32(1))*16+uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fstr_bytes)) + if !(ifs != 0) { + goto err + } + p = ifs + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*16 + UintptrFromInt32(1)*16 + i = int32((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum) + d = ifs + s = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + for { + if !(i != 0) { + break + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = (*Tifnamemap)(unsafe.Pointer(s)).Findex + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = p + Xmemcpy(tls, p, s+9, uint64((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen)) + p += uintptr((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen) + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + goto _1 + _1: + ; + i-- + s += 28 + d += 16 + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = uint32(0) + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = uintptr(0) + goto err +err: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 280)), uintptr(0)) + Xfree(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOBUFS) + return ifs +} + +func Xif_nametoindex(tls *TLS, name uintptr) (r1 uint32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1, v2 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _, _ = fd, r, v1, v2 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uint32(0) + } + Xstrncpy(tls, bp, name, uint64(16)) + r = Xioctl(tls, fd, int32(SIOCGIFINDEX), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + v2 = 0 + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 16)) + } + return uint32(v2) +} + +func Xinet_addr(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* a at bp+0 */ Tin_addr + if !(X__inet_aton(tls, p, bp) != 0) { + return uint32(-Int32FromInt32(1)) + } + return (*(*Tin_addr)(unsafe.Pointer(bp))).Fs_addr +} + +func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var d, s uintptr + var i int32 + var _ /* a at bp+0 */ [4]uint64 + var _ /* z at bp+32 */ uintptr + _, _, _ = d, i, s + s = s0 + d = dest + *(*[4]uint64)(unsafe.Pointer(bp)) = [4]uint64{} + i = 0 + for { + if !(i < int32(4)) { + break + } + (*(*[4]uint64)(unsafe.Pointer(bp)))[i] = Xstrtoul(tls, s, bp+32, 0) + if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != int32('.') || !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return 0 + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0) { + break + } + s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) + goto _1 + _1: + ; + i++ + } + if i == int32(4) { + return 0 + } + switch i { + case 0: + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[0] & uint64(0xffffff) + *(*uint64)(unsafe.Pointer(bp)) >>= uint64(24) + fallthrough + case int32(1): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] & uint64(0xffff) + *(*uint64)(unsafe.Pointer(bp + 1*8)) >>= uint64(16) + fallthrough + case int32(2): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(3)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] & uint64(0xff) + *(*uint64)(unsafe.Pointer(bp + 2*8)) >>= uint64(8) + } + i = 0 + for { + if !(i < int32(4)) { + break + } + if (*(*[4]uint64)(unsafe.Pointer(bp)))[i] > uint64(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8((*(*[4]uint64)(unsafe.Pointer(bp)))[i]) + goto _2 + _2: + ; + i++ + } + return int32(1) +} + +func Xinet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__inet_aton(tls, s0, dest) +} + +func Xinet_network(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xntohl(tls, Xinet_addr(tls, p)) +} + +func Xinet_makeaddr(tls *TLS, n Tin_addr_t, h Tin_addr_t) (r Tin_addr) { + if __ccgo_strace { + trc("tls=%v n=%v h=%v, (%v:)", tls, n, h, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n < uint32(256) { + h |= n << int32(24) + } else { + if n < uint32(65536) { + h |= n << int32(16) + } else { + h |= n << int32(8) + } + } + return Tin_addr{ + Fs_addr: h, + } +} + +func Xinet_lnaof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h & uint32(0xffffff) + } + if h>>int32(24) < uint32(192) { + return h & uint32(0xffff) + } + return h & uint32(0xff) +} + +func Xinet_netof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h >> int32(24) + } + if h>>int32(24) < uint32(192) { + return h >> int32(16) + } + return h >> int32(8) +} + +func Xinet_ntoa(tls *TLS, _in Tin_addr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v _in=%v, (%v:)", tls, _in, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + *(*Tin_addr)(unsafe.Pointer(bp)) = _in + var a uintptr + _ = a + a = bp + Xsnprintf(tls, uintptr(unsafe.Pointer(&_buf4)), uint64(16), __ccgo_ts+1122, VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3))))) + return uintptr(unsafe.Pointer(&_buf4)) +} + +var _buf4 [16]uint8 + +func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l Tsocklen_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var a uintptr + var best, i, j, max, v2 int32 + var v3 uint8 + var _ /* buf at bp+0 */ [100]uint8 + _, _, _, _, _, _, _ = a, best, i, j, max, v2, v3 + a = a0 + switch af { + case int32(PF_INET): + if uint32(Xsnprintf(tls, s, uint64(l), __ccgo_ts+1122, VaList(bp+112, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { + return s + } + case int32(PF_INET6): + if Xmemcmp(tls, a, __ccgo_ts+1069, uint64(12)) != 0 { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1134, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } else { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1158, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } + /* Replace longest /(^0|:)[:0]{2,}/ with "::" */ + v2 = Int32FromInt32(0) + best = v2 + i = v2 + max = Int32FromInt32(2) + for { + if !((*(*[100]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + if i != 0 && int32((*(*[100]uint8)(unsafe.Pointer(bp)))[i]) != int32(':') { + goto _1 + } + j = int32(Xstrspn(tls, bp+uintptr(i), __ccgo_ts+1188)) + if j > max { + best = i + max = j + } + goto _1 + _1: + ; + i++ + } + if max > int32(3) { + v3 = Uint8FromUint8(':') + (*(*[100]uint8)(unsafe.Pointer(bp)))[best+int32(1)] = v3 + (*(*[100]uint8)(unsafe.Pointer(bp)))[best] = v3 + Xmemmove(tls, bp+uintptr(best)+uintptr(2), bp+uintptr(best)+uintptr(max), uint64(i-best-max+int32(1))) + } + if Xstrlen(tls, bp) < uint64(l) { + Xstrcpy(tls, s, bp) + return s + } + default: + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return uintptr(0) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOSPC) + return uintptr(0) +} + +func _hexval(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, v14, v15, v4, v7 uintptr + var brk, d, i, j, need_v4, v, v10, v3, v9 int32 + var v11, v5 bool + var _ /* ip at bp+0 */ [8]Tuint16_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, brk, d, i, j, need_v4, v, v10, v11, v14, v15, v3, v4, v5, v7, v9 + a = a0 + brk = -int32(1) + need_v4 = 0 + if af == int32(PF_INET) { + i = 0 + for { + if !(i < int32(4)) { + break + } + v3 = Int32FromInt32(0) + j = v3 + v = v3 + for { + if !(j < int32(3) && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + v = int32(10)*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - int32('0') + goto _2 + _2: + ; + j++ + } + if j == 0 || j > int32(1) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('0') || v > int32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == int32(3) { + return int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') { + return 0 + } + s += uintptr(j + int32(1)) + goto _1 + _1: + ; + i++ + } + return 0 + } else { + if af != int32(PF_INET6) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return -int32(1) + } + } + if v5 = int32(*(*uint8)(unsafe.Pointer(s))) == int32(':'); v5 { + s++ + v4 = s + } + if v5 && int32(*(*uint8)(unsafe.Pointer(v4))) != int32(':') { + return 0 + } + i = 0 + for { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(':') && brk < 0 { + brk = i + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + s++ + v7 = s + if !(*(*uint8)(unsafe.Pointer(v7)) != 0) { + break + } + if i == int32(7) { + return 0 + } + goto _6 + } + v9 = Int32FromInt32(0) + j = v9 + v = v9 + for { + if v11 = j < int32(4); v11 { + v10 = _hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) + d = v10 + } + if !(v11 && v10 >= 0) { + break + } + v = int32(16)*v + d + goto _8 + _8: + ; + j++ + } + if j == 0 { + return 0 + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(v) + if !(*(*uint8)(unsafe.Pointer(s + uintptr(j))) != 0) && (brk >= 0 || i == int32(7)) { + break + } + if i == int32(7) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32(':') { + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') || i < int32(6) && brk < 0 { + return 0 + } + need_v4 = int32(1) + i++ + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + break + } + s += uintptr(j + int32(1)) + goto _6 + _6: + ; + i++ + } + if brk >= 0 { + Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(int32(2)*(i+int32(1)-brk))) + j = 0 + for { + if !(j < int32(7)-i) { + break + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[brk+j] = uint16(0) + goto _12 + _12: + ; + j++ + } + } + j = 0 + for { + if !(j < int32(8)) { + break + } + v14 = a + a++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) >> int32(8)) + v15 = a + a++ + *(*uint8)(unsafe.Pointer(v15)) = uint8((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) + goto _13 + _13: + ; + j++ + } + if need_v4 != 0 && Xinet_pton(tls, int32(PF_INET), s, a-uintptr(4)) <= 0 { + return 0 + } + return int32(1) +} + +func Xlisten(tls *TLS, fd int32, backlog int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v backlog=%v, (%v:)", tls, fd, backlog, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_listen) + v2 = int32(__SC_listen) + v3 = 0 + v4 = int64(fd) + v5 = int64(backlog) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var p, v1 uintptr + var scopeid uint64 + var _ /* a4 at bp+0 */ Tin_addr + var _ /* a6 at bp+4 */ Tin6_addr + var _ /* tmp at bp+20 */ [64]uint8 + var _ /* z at bp+88 */ uintptr + _, _, _ = p, scopeid, v1 + if X__inet_aton(tls, name, bp) > 0 { + if family == int32(PF_INET6) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp, uint64(4)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET) + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(0) + return int32(1) + } + p = Xstrchr(tls, name, int32('%')) + scopeid = uint64(0) + if p != 0 && int64(p)-int64(name) < int64(64) { + Xmemcpy(tls, bp+20, name, uint64(int64(p)-int64(name))) + (*(*[64]uint8)(unsafe.Pointer(bp + 20)))[int64(p)-int64(name)] = uint8(0) + name = bp + 20 + } + if Xinet_pton(tls, int32(PF_INET6), name, bp+4) <= 0 { + return 0 + } + if family == int32(PF_INET) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp+4, uint64(16)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET6) + if p != 0 { + p++ + v1 = p + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(v1)))-uint32('0') < uint32(10)) != 0 { + scopeid = Xstrtoull(tls, p, bp+88, int32(10)) + } else { + *(*uintptr)(unsafe.Pointer(bp + 88)) = p - uintptr(1) + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { + if !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xc0) == int32(0x80)) && !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xf) == int32(0x2)) { + return -int32(2) + } + scopeid = uint64(Xif_nametoindex(tls, p)) + if !(scopeid != 0) { + return -int32(2) + } + } + if scopeid > uint64(0xffffffff) { + return -int32(2) + } + } + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(scopeid) + return int32(1) +} + +const ABUF_SIZE = 4800 +const DAS_MATCHINGLABEL = 268435456 +const DAS_MATCHINGSCOPE = 536870912 +const DAS_ORDER_SHIFT = 0 +const DAS_PREC_SHIFT = 20 +const DAS_PREFIX_SHIFT = 8 +const DAS_SCOPE_SHIFT = 16 +const DAS_USABLE = 1073741824 +const RR_A = 1 +const RR_AAAA = 28 +const RR_CNAME = 5 + +func _is_valid_hostname(tls *TLS, host uintptr) (r int32) { + var s uintptr + _ = s + if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) || Xmbstowcs(tls, uintptr(0), host, uint64(0)) == uint64(-Int32FromInt32(1)) { + return 0 + } + s = host + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) >= int32(0x80) || int32(*(*uint8)(unsafe.Pointer(s))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0) { + break + } + goto _1 + _1: + ; + s++ + } + return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) +} + +func _name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) (r int32) { + var cnt, v1, v2, v3, v4 int32 + _, _, _, _, _ = cnt, v1, v2, v3, v4 + cnt = 0 + if name != 0 { + return 0 + } + if flags&int32(AI_PASSIVE) != 0 { + if family != int32(PF_INET6) { + v1 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v1)*28)) = Taddress{ + Ffamily: int32(PF_INET), + } + } + if family != int32(PF_INET) { + v2 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v2)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + } + } + } else { + if family != int32(PF_INET6) { + v3 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v3)*28)) = Taddress{ + Ffamily: int32(PF_INET), + Faddr: [16]Tuint8_t{ + 0: uint8(127), + 3: uint8(1), + }, + } + } + if family != int32(PF_INET) { + v4 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + Faddr: [16]Tuint8_t{ + 15: uint8(1), + }, + } + } + } + return cnt +} + +func _name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + return X__lookup_ipliteral(tls, buf, name, family) +} + +func _name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(1776) + defer tls.Free(1776) + var badfam, cnt, have_canon, v14, v15, v20, v21, v25, v26, v29, v5, v6, v8, v9 int32 + var f, p, z, v1, v18, v2, v4 uintptr + var l Tsize_t + var v11, v12, v17, v23, v28 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1544 */ TFILE + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = badfam, cnt, f, have_canon, l, p, z, v1, v11, v12, v14, v15, v17, v18, v2, v20, v21, v23, v25, v26, v28, v29, v4, v5, v6, v8, v9 + l = Xstrlen(tls, name) + cnt = 0 + badfam = 0 + have_canon = 0 + f = X__fopen_rb_ca(tls, __ccgo_ts+1058, bp+1544, bp+512, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return 0 + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(512), f) != 0 && cnt < int32(MAXADDRS) { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + uintptr(1) + for { + v4 = Xstrstr(tls, p, name) + p = v4 + if v12 = v4 != 0; v12 { + v5 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + ; + if v11 = !(v6 != 0); !v11 { + v8 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + } + if !(v12 && (v11 || !(v9 != 0))) { + break + } + goto _3 + _3: + ; + p++ + } + if !(p != 0) { + continue + } + /* Isolate IP address to parse */ + p = bp + for { + if v17 = *(*uint8)(unsafe.Pointer(p)) != 0; v17 { + v14 = int32(*(*uint8)(unsafe.Pointer(p))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + } + if !(v17 && !(v15 != 0)) { + break + } + goto _13 + _13: + ; + p++ + } + v18 = p + p++ + *(*uint8)(unsafe.Pointer(v18)) = uint8(0) + switch _name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { + case int32(1): + cnt++ + case 0: + continue + default: + badfam = -int32(5) + break + } + if have_canon != 0 { + continue + } + /* Extract first name as canonical name */ + for { + if v23 = *(*uint8)(unsafe.Pointer(p)) != 0; v23 { + v20 = int32(*(*uint8)(unsafe.Pointer(p))) + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + } + if !(v23 && v21 != 0) { + break + } + goto _19 + _19: + ; + p++ + } + z = p + for { + if v28 = *(*uint8)(unsafe.Pointer(z)) != 0; v28 { + v25 = int32(*(*uint8)(unsafe.Pointer(z))) + v26 = BoolInt32(v25 == int32(' ') || uint32(v25)-uint32('\t') < uint32(5)) + goto _27 + _27: + } + if !(v28 && !(v26 != 0)) { + break + } + goto _24 + _24: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if _is_valid_hostname(tls, p) != 0 { + have_canon = int32(1) + Xmemcpy(tls, canon, p, uint64(int64(z)-int64(p)+int64(1))) + } + } + X__fclose_ca(tls, f) + if cnt != 0 { + v29 = cnt + } else { + v29 = badfam + } + return v29 +} + +type Tdpc_ctx = struct { + Faddrs uintptr + Fcanon uintptr + Fcnt int32 + Frrtype int32 +} + +func _dns_parse_callback1(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ctx, v2 uintptr + var family, v1 int32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _, _ = ctx, family, v1, v2 + ctx = c + if rr == int32(RR_CNAME) { + if X__dn_expand(tls, packet, packet+uintptr(plen), data, bp, int32(256)) > 0 && _is_valid_hostname(tls, bp) != 0 { + Xstrcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcanon, bp) + } + return 0 + } + if (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt >= int32(MAXADDRS) { + return 0 + } + if rr != (*Tdpc_ctx)(unsafe.Pointer(ctx)).Frrtype { + return 0 + } + switch rr { + case int32(RR_A): + if len1 != int32(4) { + return -int32(1) + } + family = int32(PF_INET) + case int32(RR_AAAA): + if len1 != int32(16) { + return -int32(1) + } + family = int32(PF_INET6) + break + } + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Ffamily = family + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Fscopeid = uint32(0) + v2 = ctx + 16 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + Xmemcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs+uintptr(v1)*28+8, data, uint64(len1)) + return 0 +} + +func _name_from_dns(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, conf uintptr) (r int32) { + bp := tls.Alloc(10240) + defer tls.Free(10240) + var i, nq int32 + var qtypes [2]int32 + var _ /* abuf at bp+560 */ [2][4800]uint8 + var _ /* alens at bp+10200 */ [2]int32 + var _ /* ap at bp+10176 */ [2]uintptr + var _ /* ctx at bp+10208 */ Tdpc_ctx + var _ /* qbuf at bp+0 */ [2][280]uint8 + var _ /* qlens at bp+10192 */ [2]int32 + var _ /* qp at bp+10160 */ [2]uintptr + _, _, _ = i, nq, qtypes + *(*[2]uintptr)(unsafe.Pointer(bp + 10160)) = [2]uintptr{ + 0: bp, + 1: bp + 1*280, + } + *(*[2]uintptr)(unsafe.Pointer(bp + 10176)) = [2]uintptr{ + 0: bp + 560, + 1: bp + 560 + 1*4800, + } + nq = 0 + *(*Tdpc_ctx)(unsafe.Pointer(bp + 10208)) = Tdpc_ctx{ + Faddrs: buf, + Fcanon: canon, + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family != _afrr[i].Faf { + (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] = X__res_mkquery(tls, 0, name, int32(1), _afrr[i].Frr, uintptr(0), 0, uintptr(0), bp+uintptr(nq)*280, int32(280)) + if (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] == -int32(1) { + return 0 + } + qtypes[nq] = _afrr[i].Frr + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280 + 3)) = uint8(0) /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if nq != 0 && int32(*(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))) == int32(*(*uint8)(unsafe.Pointer(bp))) { + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))++ + } + nq++ + } + goto _1 + _1: + ; + i++ + } + if X__res_msend_rc(tls, nq, bp+10160, bp+10192, bp+10176, bp+10200, int32(4800), conf) < 0 { + return -int32(11) + } + i = 0 + for { + if !(i < nq) { + break + } + if (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] < int32(4) || int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(2) { + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(3) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) != 0 { + return -int32(4) + } + goto _2 + _2: + ; + i++ + } + i = nq - int32(1) + for { + if !(i >= 0) { + break + } + (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Frrtype = qtypes[i] + if uint64((*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i]) > uint64(4800) { + (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] = int32(4800) + } + X__dns_parse(tls, bp+560+uintptr(i)*4800, (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i], __ccgo_fp(_dns_parse_callback1), bp+10208) + goto _3 + _3: + ; + i-- + } + if (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt != 0 { + return (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt + } + return -int32(5) +} + +var _afrr = [2]struct { + Faf int32 + Frr int32 +}{ + 0: { + Faf: int32(PF_INET6), + Frr: int32(RR_A), + }, + 1: { + Faf: int32(PF_INET), + Frr: int32(RR_AAAA), + }, +} + +func _name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(368) + defer tls.Free(368) + var cnt, v10, v5, v6, v9 int32 + var dots, l, v2 Tsize_t + var p, z uintptr + var v12 bool + var _ /* conf at bp+256 */ Tresolvconf + var _ /* search at bp+0 */ [256]uint8 + _, _, _, _, _, _, _, _, _, _, _ = cnt, dots, l, p, z, v10, v12, v2, v5, v6, v9 + if X__get_resolv_conf(tls, bp+256, bp, uint64(256)) < 0 { + return -int32(1) + } + /* Count dots, suppress search when >=ndots or name ends in + * a dot, which is an explicit request for global scope. */ + v2 = Uint64FromInt32(0) + l = v2 + dots = v2 + for { + if !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l)))) == int32('.') { + dots++ + } + goto _1 + _1: + ; + l++ + } + if dots >= uint64((*(*Tresolvconf)(unsafe.Pointer(bp + 256))).Fndots) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + *(*uint8)(unsafe.Pointer(bp)) = uint8(0) + } + /* Strip final dot for canon, fail if multiple trailing dots. */ + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if !(l != 0) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + return -int32(2) + } + /* This can never happen; the caller already checked length. */ + if l >= uint64(256) { + return -int32(2) + } + /* Name with search domain appended is setup in canon[]. This both + * provides the desired default canonical name (if the requested + * name is not a CNAME record) and serves as a buffer for passing + * the full requested name to name_from_dns. */ + Xmemcpy(tls, canon, name, l) + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8('.') + p = bp + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + for { + v5 = int32(*(*uint8)(unsafe.Pointer(p))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + goto _4 + _4: + ; + p++ + } + z = p + for { + if v12 = *(*uint8)(unsafe.Pointer(z)) != 0; v12 { + v9 = int32(*(*uint8)(unsafe.Pointer(z))) + v10 = BoolInt32(v9 == int32(' ') || uint32(v9)-uint32('\t') < uint32(5)) + goto _11 + _11: + } + if !(v12 && !(v10 != 0)) { + break + } + goto _8 + _8: + ; + z++ + } + if z == p { + break + } + if uint64(int64(z)-int64(p)) < uint64(256)-l-uint64(1) { + Xmemcpy(tls, canon+uintptr(l)+uintptr(1), p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Pointer(canon + uintptr(uint64(int64(z)-int64(p)+int64(1))+l))) = uint8(0) + cnt = _name_from_dns(tls, buf, canon, canon, family, bp+256) + if cnt != 0 { + return cnt + } + } + goto _3 + _3: + ; + p = z + } + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8(0) + return _name_from_dns(tls, buf, canon, name, family, bp+256) +} + +type Tpolicy = struct { + Faddr [16]uint8 + Flen1 uint8 + Fmask uint8 + Fprec uint8 + Flabel uint8 +} + +var _defpolicy = [6]Tpolicy{ + 0: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + Flen1: uint8(15), + Fmask: uint8(0xff), + Fprec: uint8(50), + }, + 1: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}, + Flen1: uint8(11), + Fmask: uint8(0xff), + Fprec: uint8(35), + Flabel: uint8(4), + }, + 2: { + Faddr: [16]uint8{' ', 2}, + Flen1: uint8(1), + Fmask: uint8(0xff), + Fprec: uint8(30), + Flabel: uint8(2), + }, + 3: { + Faddr: [16]uint8{' ', 1}, + Flen1: uint8(3), + Fmask: uint8(0xff), + Fprec: uint8(5), + Flabel: uint8(5), + }, + 4: { + Faddr: [16]uint8{252}, + Fmask: uint8(0xfe), + Fprec: uint8(3), + Flabel: uint8(13), + }, + 5: { + Faddr: [16]uint8{}, + Fprec: uint8(40), + Flabel: uint8(1), + }, +} + +func _policyof(tls *TLS, a uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&_defpolicy))+uintptr(i)*20, uint64(_defpolicy[i].Flen1)) != 0 { + goto _1 + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a + uintptr(_defpolicy[i].Flen1))))&int32(_defpolicy[i].Fmask) != int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + uintptr(_defpolicy[i].Flen1)))) { + goto _1 + } + return uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + goto _1 + _1: + ; + i++ + } + return r +} + +func _labelof(tls *TLS, a uintptr) (r int32) { + return int32((*Tpolicy)(unsafe.Pointer(_policyof(tls, a))).Flabel) +} + +func _scopeof(tls *TLS, a uintptr) (r int32) { + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) { + return int32(*(*Tuint8_t)(unsafe.Pointer(a + 1))) & int32(15) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) { + return int32(2) + } + if *(*Tuint32_t)(unsafe.Pointer(a)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 1*4)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 2*4)) == uint32(0) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 15))) == int32(1) { + return int32(2) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0xc0) { + return int32(5) + } + return int32(14) +} + +func _prefixmatch(tls *TLS, s uintptr, d uintptr) (r int32) { + var i uint32 + _ = i + i = uint32(0) + for { + if !(i < uint32(128) && !((int32(*(*Tuint8_t)(unsafe.Pointer(s + uintptr(i/uint32(8)))))^int32(*(*Tuint8_t)(unsafe.Pointer(d + uintptr(i/uint32(8))))))&(Int32FromInt32(128)>>(i%Uint32FromInt32(8))) != 0)) { + break + } + goto _1 + _1: + ; + i++ + } + return int32(i) +} + +func _addrcmp(tls *TLS, _a uintptr, _b uintptr) (r int32) { + var a, b uintptr + _, _ = a, b + a = _a + b = _b + return (*Taddress)(unsafe.Pointer(b)).Fsortkey - (*Taddress)(unsafe.Pointer(a)).Fsortkey +} + +func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var cnt, dlabel, dprec, dscope, family1, fd, i, j, key, prefixlen, v1, v4, v5 int32 + var da, dpolicy, sa uintptr + var dalen Tsocklen_t + var l Tsize_t + var _ /* cs at bp+0 */ int32 + var _ /* da4 at bp+76 */ Tsockaddr_in + var _ /* da6 at bp+32 */ Tsockaddr_in6 + var _ /* sa4 at bp+60 */ Tsockaddr_in + var _ /* sa6 at bp+4 */ Tsockaddr_in6 + var _ /* salen at bp+92 */ Tsocklen_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, da, dalen, dlabel, dpolicy, dprec, dscope, family1, fd, i, j, key, l, prefixlen, sa, v1, v4, v5 + cnt = 0 + *(*uint8)(unsafe.Pointer(canon)) = uint8(0) + if name != 0 { + /* reject empty name and check len so it fits into temp bufs */ + l = Xstrnlen(tls, name, uint64(255)) + if l-uint64(1) >= uint64(254) { + return -int32(2) + } + Xmemcpy(tls, canon, name, l+uint64(1)) + } + /* Procedurally, a request for v6 addresses with the v4-mapped + * flag set is like a request for unspecified family, followed + * by filtering of the results. */ + if flags&int32(AI_V4MAPPED) != 0 { + if family == int32(PF_INET6) { + family = PF_UNSPEC + } else { + flags -= int32(AI_V4MAPPED) + } + } + /* Try each backend until there's at least one result. */ + cnt = _name_from_null(tls, buf, name, family, flags) + if !(cnt != 0) { + cnt = _name_from_numeric(tls, buf, name, family) + } + if !(cnt != 0) && !(flags&Int32FromInt32(AI_NUMERICHOST) != 0) { + cnt = _name_from_hosts(tls, buf, canon, name, family) + if !(cnt != 0) { + cnt = _name_from_dns_search(tls, buf, canon, name, family) + } + } + if cnt <= 0 { + if cnt != 0 { + v1 = cnt + } else { + v1 = -int32(2) + } + return v1 + } + /* Filter/transform results for v4-mapped lookup, if requested. */ + if flags&int32(AI_V4MAPPED) != 0 { + if !(flags&Int32FromInt32(AI_ALL) != 0) { + /* If any v6 results exist, remove v4 results. */ + i = 0 + for { + if !(i < cnt && (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET6)) { + break + } + goto _2 + _2: + ; + i++ + } + if i < cnt { + j = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily == int32(PF_INET6) { + v4 = j + j++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = *(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28)) + } + goto _3 + _3: + ; + i++ + } + v5 = j + i = v5 + cnt = v5 + } + } + /* Translate any remaining v4 results to v6 */ + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + goto _6 + } + Xmemcpy(tls, buf+uintptr(i)*28+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, buf+uintptr(i)*28+8, __ccgo_ts+1069, uint64(12)) + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily = int32(PF_INET6) + goto _6 + _6: + ; + i++ + } + } + /* No further processing is needed if there are fewer than 2 + * results or if there are only IPv4 results. */ + if cnt < int32(2) || family == int32(PF_INET) { + return cnt + } + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + break + } + goto _7 + _7: + ; + i++ + } + if i == cnt { + return cnt + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + /* The following implements a subset of RFC 3484/6724 destination + * address selection by generating a single 31-bit sort key for + * each address. Rules 3, 4, and 7 are omitted for having + * excessive runtime and code size cost and dubious benefit. + * So far the label/precedence table cannot be customized. */ + i = 0 + for { + if !(i < cnt) { + break + } + family1 = (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily + key = 0 + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 4)) = Tsockaddr_in6{} + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 32)) = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_scope_id: (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fscopeid, + } + *(*Tsockaddr_in)(unsafe.Pointer(bp + 60)) = Tsockaddr_in{} + *(*Tsockaddr_in)(unsafe.Pointer(bp + 76)) = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + } + if family1 == int32(PF_INET6) { + Xmemcpy(tls, bp+32+8, buf+uintptr(i)*28+8, uint64(16)) + da = bp + 32 + dalen = uint32(28) + sa = bp + 4 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(28) + } else { + Xmemcpy(tls, bp+4+8, __ccgo_ts+1069, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+32+8, __ccgo_ts+1069, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+76+4, buf+uintptr(i)*28+8, uint64(4)) + da = bp + 76 + dalen = uint32(16) + sa = bp + 60 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(16) + } + dpolicy = _policyof(tls, bp+32+8) + dscope = _scopeof(tls, bp+32+8) + dlabel = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Flabel) + dprec = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Fprec) + prefixlen = 0 + fd = Xsocket(tls, family1, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), int32(IPPROTO_UDP)) + if fd >= 0 { + if !(Xconnect(tls, fd, da, dalen) != 0) { + key |= int32(DAS_USABLE) + if !(Xgetsockname(tls, fd, sa, bp+92) != 0) { + if family1 == int32(PF_INET) { + Xmemcpy(tls, bp+4+8+uintptr(12), bp+60+4, uint64(4)) + } + if dscope == _scopeof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGSCOPE) + } + if dlabel == _labelof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGLABEL) + } + prefixlen = _prefixmatch(tls, bp+4+8, bp+32+8) + } + } + Xclose(tls, fd) + } + key |= dprec << int32(DAS_PREC_SHIFT) + key |= (int32(15) - dscope) << int32(DAS_SCOPE_SHIFT) + key |= prefixlen << int32(DAS_PREFIX_SHIFT) + key |= (int32(MAXADDRS) - i) << DAS_ORDER_SHIFT + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fsortkey = key + goto _8 + _8: + ; + i++ + } + Xqsort(tls, buf, uint64(cnt), uint64(28), __ccgo_fp(_addrcmp)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return cnt +} + +func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1408) + defer tls.Free(1408) + var cnt, v1, v11, v12, v16, v17, v2, v20, v21, v22, v7, v8 int32 + var f, p, v3, v4, v6 uintptr + var l Tsize_t + var port uint64 + var v10, v14, v19 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, f, l, p, port, v1, v10, v11, v12, v14, v16, v17, v19, v2, v20, v21, v22, v3, v4, v6, v7, v8 + cnt = 0 + *(*uintptr)(unsafe.Pointer(bp + 128)) = __ccgo_ts + port = uint64(0) + switch socktype { + case int32(SOCK_STREAM): + switch proto { + case 0: + proto = int32(IPPROTO_TCP) + fallthrough + case int32(IPPROTO_TCP): + default: + return -int32(8) + } + case int32(SOCK_DGRAM): + switch proto { + case 0: + proto = int32(IPPROTO_UDP) + fallthrough + case int32(IPPROTO_UDP): + default: + return -int32(8) + } + fallthrough + case 0: + default: + if name != 0 { + return -int32(8) + } + (*(*Tservice)(unsafe.Pointer(buf))).Fport = uint16(0) + (*(*Tservice)(unsafe.Pointer(buf))).Fproto = uint8(proto) + (*(*Tservice)(unsafe.Pointer(buf))).Fsocktype = uint8(socktype) + return int32(1) + } + if name != 0 { + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + return -int32(8) + } + port = Xstrtoul(tls, name, bp+128, int32(10)) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 128)))) != 0) { + if port > uint64(65535) { + return -int32(8) + } + if proto != int32(IPPROTO_UDP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v1 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v1)*4))).Fproto = uint8(IPPROTO_TCP) + } + if proto != int32(IPPROTO_TCP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v2 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v2)*4))).Fproto = uint8(IPPROTO_UDP) + } + return cnt + } + if flags&int32(AI_NUMERICSERV) != 0 { + return -int32(2) + } + l = Xstrlen(tls, name) + f = X__fopen_rb_ca(tls, __ccgo_ts+1082, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return -int32(8) + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(128), f) != 0 && cnt < int32(MAXSERVS) { + v3 = Xstrchr(tls, bp, int32('#')) + p = v3 + if v3 != 0 { + v4 = p + p++ + *(*uint8)(unsafe.Pointer(v4)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + /* Find service name */ + p = bp + for { + v6 = Xstrstr(tls, p, name) + p = v6 + if !(v6 != 0) { + break + } + if v10 = p > bp; v10 { + v7 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v8 = BoolInt32(v7 == int32(' ') || uint32(v7)-uint32('\t') < uint32(5)) + goto _9 + _9: + } + if v10 && !(v8 != 0) { + goto _5 + } + if v14 = *(*uint8)(unsafe.Pointer(p + uintptr(l))) != 0; v14 { + v11 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + } + if v14 && !(v12 != 0) { + goto _5 + } + break + goto _5 + _5: + ; + p++ + } + if !(p != 0) { + continue + } + /* Skip past canonical name at beginning of line */ + p = bp + for { + if v19 = *(*uint8)(unsafe.Pointer(p)) != 0; v19 { + v16 = int32(*(*uint8)(unsafe.Pointer(p))) + v17 = BoolInt32(v16 == int32(' ') || uint32(v16)-uint32('\t') < uint32(5)) + goto _18 + _18: + } + if !(v19 && !(v17 != 0)) { + break + } + goto _15 + _15: + ; + p++ + } + port = Xstrtoul(tls, p, bp+128, int32(10)) + if port > uint64(65535) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1096, uint64(4)) != 0) { + if proto == int32(IPPROTO_TCP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v20 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v20)*4))).Fproto = uint8(IPPROTO_UDP) + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1101, uint64(4)) != 0) { + if proto == int32(IPPROTO_UDP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v21 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v21)*4))).Fproto = uint8(IPPROTO_TCP) + } + } + X__fclose_ca(tls, f) + if cnt > 0 { + v22 = cnt + } else { + v22 = -int32(8) + } + return v22 +} + +func ___netlink_enumerate(tls *TLS, fd int32, seq uint32, type1 int32, af int32, cb uintptr, ctx uintptr) (r1 int32) { + bp := tls.Alloc(8192) + defer tls.Free(8192) + var h uintptr + var r, ret int32 + var _ /* u at bp+0 */ struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + } + _, _, _ = h, r, ret + Xmemset(tls, bp, 0, uint64(20)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_len = uint32(20) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_type = uint16(type1) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_flags = uint16(Int32FromInt32(NLM_F_ROOT) | Int32FromInt32(NLM_F_MATCH) | Int32FromInt32(NLM_F_REQUEST)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_seq = seq + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fg.Frtgen_family = uint8(af) + r = int32(Xsend(tls, fd, bp, uint64(20), 0)) + if r < 0 { + return r + } + for int32(1) != 0 { + r = int32(Xrecv(tls, fd, bp, uint64(8192), int32(MSG_DONTWAIT))) + if r <= 0 { + return -int32(1) + } + h = bp + for { + if !(uint64(int64(bp+uintptr(r))-int64(h)) >= uint64(16)) { + break + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_DONE) { + return 0 + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_ERROR) { + return -int32(1) + } + ret = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cb})))(tls, ctx, h) + if ret != 0 { + return ret + } + goto _1 + _1: + ; + h = h + uintptr(((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + } + return r1 +} + +func X__rtnetlink_enumerate(tls *TLS, link_af int32, addr_af int32, cb uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v link_af=%v addr_af=%v cb=%v ctx=%v, (%v:)", tls, link_af, addr_af, cb, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var fd, r int32 + _, _ = fd, r + fd = Xsocket(tls, int32(PF_NETLINK), Int32FromInt32(SOCK_RAW)|Int32FromInt32(SOCK_CLOEXEC), NETLINK_ROUTE) + if fd < 0 { + return -int32(1) + } + r = ___netlink_enumerate(tls, fd, uint32(1), int32(RTM_GETLINK), link_af, cb, ctx) + if !(r != 0) { + r = ___netlink_enumerate(tls, fd, uint32(2), int32(RTM_GETADDR), addr_af, cb, ctx) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return r +} + +func Xgetnetbyaddr(tls *TLS, net Tuint32_t, type1 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v net=%v type1=%v, (%v:)", tls, net, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xns_get16(tls *TLS, cp uintptr) (r uint32) { + if __ccgo_strace { + trc("tls=%v cp=%v, (%v:)", tls, cp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(int32(*(*uint8)(unsafe.Pointer(cp)))< %v", r) }() + } + return uint64(uint32(*(*uint8)(unsafe.Pointer(cp)))<> int32(8)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(s) +} + +func Xns_put32(tls *TLS, l uint64, cp uintptr) { + if __ccgo_strace { + trc("tls=%v l=%v cp=%v, (%v:)", tls, l, cp, origin(2)) + } + var v1, v2, v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + v1 = cp + cp++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(l >> int32(24)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(l >> int32(16)) + v3 = cp + cp++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(l >> int32(8)) + v4 = cp + cp++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(l) +} + +func Xns_initparse(tls *TLS, msg uintptr, msglen int32, handle uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v msglen=%v handle=%v, (%v:)", tls, msg, msglen, handle, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, r int32 + _, _ = i, r + (*Tns_msg)(unsafe.Pointer(handle)).F_msg = msg + (*Tns_msg)(unsafe.Pointer(handle)).F_eom = msg + uintptr(msglen) + if msglen < (Int32FromInt32(2)+int32(_ns_s_max))*Int32FromInt32(NS_INT16SZ) { + goto bad + } + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_id = uint16(Xns_get16(tls, msg-uintptr(2))) + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_flags = uint16(Xns_get16(tls, msg-uintptr(2))) + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + msg += uintptr(2) + *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) = uint16(Xns_get16(tls, msg-uintptr(2))) + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + if *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) != 0 { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = msg + r = Xns_skiprr(tls, msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, i, int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)))) + if r < 0 { + return -int32(1) + } + msg += uintptr(r) + } else { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = UintptrFromInt32(0) + } + goto _2 + _2: + ; + i++ + } + if msg != (*Tns_msg)(unsafe.Pointer(handle)).F_eom { + goto bad + } + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = int32(_ns_s_max) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_skiprr(tls *TLS, ptr uintptr, eom uintptr, section Tns_sect, count int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ptr=%v eom=%v section=%v count=%v, (%v:)", tls, ptr, eom, section, count, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var p uintptr + var r, v1 int32 + _, _, _ = p, r, v1 + p = ptr + for { + v1 = count + count-- + if !(v1 != 0) { + break + } + r = Xdn_skipname(tls, p, eom) + if r < 0 { + goto bad + } + if int64(r+Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r + Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(NS_INT32SZ) + p += uintptr(2) + r = int32(Xns_get16(tls, p-uintptr(2))) + if int64(r) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r) + } + } + return int32(int64(p) - int64(ptr)) + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_parserr(tls *TLS, handle uintptr, section Tns_sect, rrnum int32, rr uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v handle=%v section=%v rrnum=%v rr=%v, (%v:)", tls, handle, section, rrnum, rr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + var p1, p2, p3, p4 uintptr + _, _, _, _, _ = r, p1, p2, p3, p4 + if section < 0 || section >= int32(_ns_s_max) { + goto bad + } + if section != (*Tns_msg)(unsafe.Pointer(handle)).F_sect { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum == -int32(1) { + rrnum = (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum + } + if rrnum < 0 || rrnum >= int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + goto bad + } + if rrnum < (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum > (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + r = Xns_skiprr(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, section, rrnum-(*Tns_msg)(unsafe.Pointer(handle)).F_rrnum) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = rrnum + } + r = Xns_name_uncompress(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, rr, uint64(NS_MAXDNAME)) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + if int64(Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p1 = handle + 72 + *(*uintptr)(unsafe.Pointer(p1)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Ftype1 = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p1))-uintptr(2))) + p2 = handle + 72 + *(*uintptr)(unsafe.Pointer(p2)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frr_class = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p2))-uintptr(2))) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p3 = handle + 72 + *(*uintptr)(unsafe.Pointer(p3)) += uintptr(4) + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(Xns_get32(tls, *(*uintptr)(unsafe.Pointer(p3))-uintptr(4))) + p4 = handle + 72 + *(*uintptr)(unsafe.Pointer(p4)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p4))-uintptr(2))) + if int64((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) + } else { + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = UintptrFromInt32(0) + } + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum++ + if (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum > int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + int32(1) + if (*Tns_msg)(unsafe.Pointer(handle)).F_sect == int32(_ns_s_max) { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + } else { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + } + } + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENODEV) + return -int32(1) + goto size +size: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_name_uncompress(tls *TLS, msg uintptr, eom uintptr, src uintptr, dst uintptr, dstsiz Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v eom=%v src=%v dst=%v dstsiz=%v, (%v:)", tls, msg, eom, src, dst, dstsiz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xdn_expand(tls, msg, eom, src, dst, int32(dstsiz)) + if r < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + } + return r +} + +func Xntohl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +/* do we really need all these?? */ + +var _idx int32 +var _protos = [239]uint8{0, 'i', 'p', 0, 1, 'i', 'c', 'm', 'p', 0, 2, 'i', 'g', 'm', 'p', 0, 3, 'g', 'g', 'p', 0, 4, 'i', 'p', 'e', 'n', 'c', 'a', 'p', 0, 5, 's', 't', 0, 6, 't', 'c', 'p', 0, 8, 'e', 'g', 'p', 0, 12, 'p', 'u', 'p', 0, 17, 'u', 'd', 'p', 0, 20, 'h', 'm', 'p', 0, 22, 'x', 'n', 's', '-', 'i', 'd', 'p', 0, 27, 'r', 'd', 'p', 0, 29, 'i', 's', 'o', '-', 't', 'p', '4', 0, '$', 'x', 't', 'p', 0, '%', 'd', 'd', 'p', 0, '&', 'i', 'd', 'p', 'r', '-', 'c', 'm', 't', 'p', 0, ')', 'i', 'p', 'v', '6', 0, '+', 'i', 'p', 'v', '6', '-', 'r', 'o', 'u', 't', 'e', 0, ',', 'i', 'p', 'v', '6', '-', 'f', 'r', 'a', 'g', 0, '-', 'i', 'd', 'r', 'p', 0, '.', 'r', 's', 'v', 'p', 0, '/', 'g', 'r', 'e', 0, '2', 'e', 's', 'p', 0, '3', 'a', 'h', 0, '9', 's', 'k', 'i', 'p', 0, ':', 'i', 'p', 'v', '6', '-', 'i', 'c', 'm', 'p', 0, ';', 'i', 'p', 'v', '6', '-', 'n', 'o', 'n', 'x', 't', 0, '<', 'i', 'p', 'v', '6', '-', 'o', 'p', 't', 's', 0, 'I', 'r', 's', 'p', 'f', 0, 'Q', 'v', 'm', 't', 'p', 0, 'Y', 'o', 's', 'p', 'f', 0, '^', 'i', 'p', 'i', 'p', 0, 'b', 'e', 'n', 'c', 'a', 'p', 0, 'g', 'p', 'i', 'm', 0, 255, 'r', 'a', 'w'} + +func Xendprotoent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _idx = 0 +} + +func Xsetprotoent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } + _idx = 0 +} + +func Xgetprotoent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(_idx) >= uint64(239) { + return UintptrFromInt32(0) + } + _p.Fp_proto = int32(_protos[_idx]) + _p.Fp_name = uintptr(unsafe.Pointer(&_protos)) + uintptr(_idx+int32(1)) + _p.Fp_aliases = uintptr(unsafe.Pointer(&_aliases)) + _idx = int32(uint64(_idx) + (Xstrlen(tls, _p.Fp_name) + Uint64FromInt32(2))) + return uintptr(unsafe.Pointer(&_p)) +} + +var _p Tprotoent + +var _aliases uintptr + +func Xgetprotobyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && Xstrcmp(tls, name, (*Tprotoent)(unsafe.Pointer(p)).Fp_name) != 0 { + p = Xgetprotoent(tls) + } + return p +} + +func Xgetprotobynumber(tls *TLS, num int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v num=%v, (%v:)", tls, num, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && (*Tprotoent)(unsafe.Pointer(p)).Fp_proto != num { + p = Xgetprotoent(tls) + } + return p +} + +func Xrecv(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrecvfrom(tls, fd, buf, len1, flags, uintptr(0), uintptr(0)) +} + +func Xrecvfrom(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen uintptr) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_recvfrom) + v2 = int32(__SC_recvfrom) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(buf) + v6 = int64(len1) + v7 = int64(flags) + v8 = int64(addr) + v9 = int64(alen) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint64(v10)) +} + +func Xrecvmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v timeout=%v, (%v:)", tls, fd, msgvec, vlen, flags, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i uint32 + var mh uintptr + var v2 int32 + _, _, _ = i, mh, v2 + mh = msgvec + i = vlen + for { + if !(i != 0) { + break + } + v2 = Int32FromInt32(0) + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad2 = v2 + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad1 = v2 + goto _1 + _1: + ; + i-- + mh += 64 + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_recvmmsg), int64(fd), int64(msgvec), int64(vlen), int64(flags), int64(timeout), 0)))) +} + +func X__convert_scm_timestamps(tls *TLS, msg uintptr, csize Tsocklen_t) { + if __ccgo_strace { + trc("tls=%v msg=%v csize=%v, (%v:)", tls, msg, csize, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cmsg, last, v2, v6, v8, p7 uintptr + var type1 int32 + var _ /* tmp at bp+0 */ int64 + var _ /* tvts at bp+8 */ [2]int64 + _, _, _, _, _, _, _ = cmsg, last, type1, v2, v6, v8, p7 + if true { + return + } + if !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control != 0) || !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen != 0) { + return + } + last = uintptr(0) + type1 = 0 + if uint64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) >= uint64(16) { + v2 = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control + } else { + v2 = UintptrFromInt32(0) + } + cmsg = v2 + for { + if !(cmsg != 0) { + break + } + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level == int32(SOL_SOCKET) { + switch (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type { + case int32(SO_TIMESTAMP_OLD): + goto _3 + case int32(SO_TIMESTAMPNS_OLD): + goto _4 + } + goto _5 + _3: + ; + if type1 != 0 { + goto _5 + } + type1 = int32(SO_TIMESTAMP) + goto common + _4: + ; + type1 = int32(SO_TIMESTAMPNS) + goto common + common: + ; + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16, uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[0] = *(*int64)(unsafe.Pointer(bp)) + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16+uintptr(8), uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[int32(1)] = *(*int64)(unsafe.Pointer(bp)) + goto _5 + _5: + } + last = cmsg + goto _1 + _1: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(cmsg)) { + v6 = uintptr(0) + } else { + v6 = cmsg + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v6 + } + if !(last != 0) || !(type1 != 0) { + return + } + if (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) > uint64(csize-(*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) { + *(*int32)(unsafe.Pointer(msg + 48)) |= int32(MSG_CTRUNC) + return + } + p7 = msg + 40 + *(*Tsocklen_t)(unsafe.Pointer(p7)) = Tsocklen_t(uint64(*(*Tsocklen_t)(unsafe.Pointer(p7))) + ((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)))) + if uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(last)) { + v8 = uintptr(0) + } else { + v8 = last + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v8 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level = int32(SOL_SOCKET) + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type = type1 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len = uint32((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + Uint64FromInt64(16)) + Xmemcpy(tls, cmsg+UintptrFromInt32(1)*16, bp+8, uint64(16)) +} + +func Xrecvmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r2 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var orig uintptr + var orig_controllen Tsocklen_t + var r, v11 int64 + var r1 Tssize_t + var v1, v2, v3, v4 int32 + var v10, v5, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* h at bp+96 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = orig, orig_controllen, r, r1, v1, v10, v11, v2, v3, v4, v5, v6, v7, v8, v9 + orig_controllen = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen + orig = msg + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp + 96)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad1 = v1 + msg = bp + 96 + } + v2 = int32(SYS_recvmsg) + v3 = int32(__SC_recvmsg) + v4 = int32(1) + v5 = int64(fd) + v6 = int64(msg) + v7 = int64(flags) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + v10 = int64(Int32FromInt32(0)) + if v4 != 0 { + r = ___syscall_cp(tls, int64(v2), v5, v6, v7, v8, v9, v10) + } else { + r = X__syscall6(tls, int64(v2), v5, v6, v7, v8, v9, v10) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v11 = r + goto _12 + } + if v4 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v5, + 1: v6, + 2: v7, + 3: v8, + 4: v9, + 5: v10, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v3), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v5, + 1: v6, + 2: v7, + 3: v8, + 4: v9, + 5: v10, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v3), int64(bp+48)) + } + v11 = r + goto _12 +_12: + r1 = X__syscall_ret(tls, uint64(v11)) + if r1 >= 0 { + X__convert_scm_timestamps(tls, msg, orig_controllen) + } + if orig != 0 { + *(*Tmsghdr)(unsafe.Pointer(orig)) = *(*Tmsghdr)(unsafe.Pointer(bp + 96)) + } + return r1 +} + +func Xres_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__res_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var i, id, j, n int32 + var l Tsize_t + var _ /* q at bp+0 */ [280]uint8 + var _ /* ts at bp+280 */ Ttimespec + _, _, _, _, _ = i, id, j, l, n + l = Xstrnlen(tls, dname, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + return -int32(1) + } + n = int32(uint64(17) + l + BoolUint64(!!(l != 0))) + if l > uint64(253) || buflen < n || uint32(op) > uint32(15) || uint32(class) > uint32(255) || uint32(type1) > uint32(255) { + return -int32(1) + } + /* Construct query template - ID will be filled later */ + Xmemset(tls, bp, 0, uint64(n)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(2)] = uint8(op*int32(8) + int32(1)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(3)] = uint8(32) /* AD */ + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(5)] = uint8(1) + Xmemcpy(tls, bp+uintptr(13), dname, l) + i = int32(13) + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + j = i + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[j] != 0 && int32((*(*[280]uint8)(unsafe.Pointer(bp)))[j]) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-i)-uint32(1) > uint32(62) { + return -int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i-int32(1)] = uint8(j - i) + goto _1 + _1: + ; + i = j + int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(1)] = uint8(type1) + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(3)] = uint8(class) + /* Make a reasonably unpredictable id */ + Xclock_gettime(tls, CLOCK_REALTIME, bp+280) + id = int32((uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec) + uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec)/uint64(65536)) & uint64(0xffff)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[0] = uint8(id / int32(256)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(1)] = uint8(id) + Xmemcpy(tls, buf, bp, uint64(n)) + return n +} + +func Xres_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_mkquery(tls, op, dname, class, type1, data, datalen, newrr, buf, buflen) +} + +const POLLERR = 8 +const POLLHUP = 16 +const POLLIN = 1 +const POLLMSG = 1024 +const POLLNVAL = 32 +const POLLOUT = 4 +const POLLPRI = 2 +const POLLRDBAND = 128 +const POLLRDHUP = 8192 +const POLLRDNORM = 64 +const POLLWRBAND = 512 +const POLLWRNORM = 256 +const TCP_CC_INFO = 26 +const TCP_CLOSE = 7 +const TCP_CLOSE_WAIT = 8 +const TCP_CLOSING = 11 +const TCP_CM_INQ = 36 +const TCP_CONGESTION = 13 +const TCP_CORK = 3 +const TCP_DEFER_ACCEPT = 9 +const TCP_ESTABLISHED = 1 +const TCP_FASTOPEN = 23 +const TCP_FASTOPEN_CONNECT = 30 +const TCP_FASTOPEN_KEY = 33 +const TCP_FASTOPEN_NO_COOKIE = 34 +const TCP_FIN_WAIT1 = 4 +const TCP_FIN_WAIT2 = 5 +const TCP_INFO = 11 +const TCP_INQ = 36 +const TCP_KEEPCNT = 6 +const TCP_KEEPIDLE = 4 +const TCP_KEEPINTVL = 5 +const TCP_LAST_ACK = 9 +const TCP_LINGER2 = 8 +const TCP_LISTEN = 10 +const TCP_MAXSEG = 2 +const TCP_MD5SIG = 14 +const TCP_MD5SIG_EXT = 32 +const TCP_NODELAY = 1 +const TCP_NOTSENT_LOWAT = 25 +const TCP_QUEUE_SEQ = 21 +const TCP_QUICKACK = 12 +const TCP_REPAIR = 19 +const TCP_REPAIR_OPTIONS = 22 +const TCP_REPAIR_QUEUE = 20 +const TCP_REPAIR_WINDOW = 29 +const TCP_SAVED_SYN = 28 +const TCP_SAVE_SYN = 27 +const TCP_SYNCNT = 7 +const TCP_SYN_RECV = 3 +const TCP_SYN_SENT = 2 +const TCP_THIN_DUPACK = 17 +const TCP_THIN_LINEAR_TIMEOUTS = 16 +const TCP_TIMESTAMP = 24 +const TCP_TIME_WAIT = 6 +const TCP_TX_DELAY = 37 +const TCP_ULP = 31 +const TCP_USER_TIMEOUT = 18 +const TCP_WINDOW_CLAMP = 10 +const TCP_ZEROCOPY_RECEIVE = 35 + +const _TCP_NLA_PAD = 0 +const _TCP_NLA_BUSY = 1 +const _TCP_NLA_RWND_LIMITED = 2 +const _TCP_NLA_SNDBUF_LIMITED = 3 +const _TCP_NLA_DATA_SEGS_OUT = 4 +const _TCP_NLA_TOTAL_RETRANS = 5 +const _TCP_NLA_PACING_RATE = 6 +const _TCP_NLA_DELIVERY_RATE = 7 +const _TCP_NLA_SND_CWND = 8 +const _TCP_NLA_REORDERING = 9 +const _TCP_NLA_MIN_RTT = 10 +const _TCP_NLA_RECUR_RETRANS = 11 +const _TCP_NLA_DELIVERY_RATE_APP_LMT = 12 +const _TCP_NLA_SNDQ_SIZE = 13 +const _TCP_NLA_CA_STATE = 14 +const _TCP_NLA_SND_SSTHRESH = 15 +const _TCP_NLA_DELIVERED = 16 +const _TCP_NLA_DELIVERED_CE = 17 +const _TCP_NLA_BYTES_SENT = 18 +const _TCP_NLA_BYTES_RETRANS = 19 +const _TCP_NLA_DSACK_DUPS = 20 +const _TCP_NLA_REORD_SEEN = 21 +const _TCP_NLA_SRTT = 22 +const _TCP_NLA_TIMEOUT_REHASH = 23 +const _TCP_NLA_BYTES_NOTSENT = 24 +const _TCP_NLA_EDT = 25 +const _TCP_NLA_TTL = 26 + +type Tnfds_t = uint64 + +type Tpollfd = struct { + Ffd int32 + Fevents int16 + Frevents int16 +} + +func _cleanup(tls *TLS, p uintptr) { + var i int32 + var pfd uintptr + _, _ = i, pfd + pfd = p + i = 0 + for { + if !((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= -int32(1)) { + break + } + if (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= 0 { + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd)) + } + goto _1 + _1: + ; + i++ + } +} + +func _mtime(tls *TLS) (r uint64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if Xclock_gettime(tls, int32(CLOCK_MONOTONIC), bp) < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSYS) { + Xclock_gettime(tls, CLOCK_REALTIME, bp) + } + return uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec)*uint64(1000) + uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000000)) +} + +func _start_tcp(tls *TLS, pfd uintptr, family int32, sa uintptr, sl Tsocklen_t, q uintptr, ql int32) (r1 int32) { + bp := tls.Alloc(96) + defer tls.Free(96) + var fd, r int32 + var _ /* mh at bp+40 */ Tmsghdr + _, _ = fd, r + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 32)) = [2]Tuint8_t{ + 0: uint8(ql >> int32(8)), + 1: uint8(ql), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: q, + Fiov_len: uint64(ql), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 40)) = Tmsghdr{ + Fmsg_name: sa, + Fmsg_namelen: sl, + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + fd = Xsocket(tls, family, Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = fd + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLOUT) + *(*int32)(unsafe.Pointer(bp + 36)) = int32(1) + if !(Xsetsockopt(tls, fd, int32(IPPROTO_TCP), int32(TCP_FASTOPEN_CONNECT), bp+36, uint32(4)) != 0) { + r = int32(Xsendmsg(tls, fd, bp+40, Int32FromInt32(MSG_FASTOPEN)|Int32FromInt32(MSG_NOSIGNAL))) + if r == ql+int32(2) { + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLIN) + } + if r >= 0 { + return r + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + } + r = Xconnect(tls, fd, sa, sl) + if !(r != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + Xclose(tls, fd) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = -int32(1) + return -int32(1) +} + +func _step_mh(tls *TLS, mh uintptr, n Tsize_t) { + /* Adjust iovec in msghdr to skip first n bytes. */ + for (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0 && n >= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len { + n -= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov += 16 + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen-- + } + if !((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0) { + return + } + (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base = (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base + uintptr(n) + *(*Tsize_t)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov + 8)) -= n +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + +func X__res_msend_rc(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32, conf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v conf=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, conf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var alen, attempts, family, fd, i, j, next, nns, r, rcode, retry_interval, rlen, servfail_retry, timeout, v17, v6 int32 + var alen_buf, apos, iplit, pfd, qpos uintptr + var sl Tsocklen_t + var t0, t1, t2, v10 uint64 + var v1, v2, v3, v4 t__predefined_size_t + var v18 bool + var _ /* __cb at bp+208 */ t__ptcb + var _ /* cs at bp+200 */ int32 + var _ /* mh at bp+232 */ Tmsghdr + var _ /* mh at bp+288 */ Tmsghdr + var _ /* mh at bp+344 */ Tmsghdr + var _ /* ns at bp+116 */ [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + var _ /* sa at bp+88 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alen, alen_buf, apos, attempts, family, fd, i, iplit, j, next, nns, pfd, qpos, r, rcode, retry_interval, rlen, servfail_retry, sl, t0, t1, t2, timeout, v1, v10, v17, v18, v2, v3, v4, v6 + defer func() { + Xrealloc(tls, alen_buf, 0) + Xrealloc(tls, apos, 0) + Xrealloc(tls, pfd, 0) + Xrealloc(tls, qpos, 0) + }() + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp + 88)) = uint16(0) + *(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)) = [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + sl = uint32(16) + nns = 0 + family = int32(PF_INET) + v1 = uint64(nqueries+int32(2)) * 8 + pfd = Xrealloc(tls, pfd, v1) + v2 = uint64(nqueries) * 4 + qpos = Xrealloc(tls, qpos, v2) + v3 = uint64(nqueries) * 4 + apos = Xrealloc(tls, apos, v3) + v4 = uint64(nqueries) * 2 + alen_buf = Xrealloc(tls, alen_buf, v4) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+200) + timeout = int32(uint32(1000) * (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout) + attempts = int32((*Tresolvconf)(unsafe.Pointer(conf)).Fattempts) + nns = 0 + for { + if !(uint32(nns) < (*Tresolvconf)(unsafe.Pointer(conf)).Fnns) { + break + } + iplit = conf + uintptr(nns)*28 + if (*Taddress)(unsafe.Pointer(iplit)).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+116+uintptr(nns)*28+4, iplit+8, uint64(4)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_port = Xhtons(tls, uint16(53)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_family = uint16(PF_INET) + } else { + sl = uint32(28) + Xmemcpy(tls, bp+116+uintptr(nns)*28+8, iplit+8, uint64(16)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_port = Xhtons(tls, uint16(53)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_scope_id = (*Taddress)(unsafe.Pointer(iplit)).Fscopeid + v6 = Int32FromInt32(PF_INET6) + family = v6 + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_family = uint16(v6) + } + goto _5 + _5: + ; + nns++ + } + /* Get local address and open/bind a socket */ + fd = Xsocket(tls, family, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + /* Handle case where system lacks IPv6 support */ + if fd < 0 && family == int32(PF_INET6) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + i = 0 + for { + if !(i < nns && (*(*Taddress)(unsafe.Pointer(conf + uintptr(nns)*28))).Ffamily == int32(PF_INET6)) { + break + } + goto _7 + _7: + ; + i++ + } + if i == nns { + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + fd = Xsocket(tls, int32(PF_INET), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + family = int32(PF_INET) + sl = uint32(16) + } + /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ + if fd >= 0 && family == int32(PF_INET6) { + *(*int32)(unsafe.Pointer(bp)) = 0 + Xsetsockopt(tls, fd, int32(IPPROTO_IPV6), int32(IPV6_V6ONLY), bp, uint32(4)) + i = 0 + for { + if !(i < nns) { + break + } + if int32((*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[i].Fsin.Fsin_family) != int32(PF_INET) { + goto _8 + } + Xmemcpy(tls, bp+116+uintptr(i)*28+8+uintptr(12), bp+116+uintptr(i)*28+4, uint64(4)) + Xmemcpy(tls, bp+116+uintptr(i)*28+8, __ccgo_ts+1069, uint64(12)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_family = uint16(PF_INET6) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_flowinfo = uint32(0) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_scope_id = uint32(0) + goto _8 + _8: + ; + i++ + } + } + (*(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88))).Fsin.Fsin_family = uint16(family) + if fd < 0 || Xbind(tls, fd, bp+88, sl) < 0 { + if fd >= 0 { + Xclose(tls, fd) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + i = 0 + for { + if !(i < nqueries) { + break + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + goto _9 + _9: + ; + i++ + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Ffd = fd + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = int16(POLLIN) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), (nqueries+int32(1))*8))).Ffd = -int32(2) + __pthread_cleanup_push(tls, bp+208, __ccgo_fp(_cleanup), pfd) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + Xmemset(tls, alens, 0, uint64(4)*uint64(nqueries)) + retry_interval = timeout / attempts + next = 0 + v10 = _mtime(tls) + t2 = v10 + t0 = v10 + t1 = t2 - uint64(retry_interval) + for { + if !(t2-t0 < uint64(timeout)) { + break + } + /* This is the loop exit condition: that all queries + * have an accepted answer. */ + i = 0 + for { + if !(i < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) > 0) { + break + } + goto _12 + _12: + ; + i++ + } + if i == nqueries { + break + } + if t2-t1 >= uint64(retry_interval) { + /* Query all configured namservers in parallel */ + i = 0 + for { + if !(i < nqueries) { + break + } + if !(*(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0) { + j = 0 + for { + if !(j < nns) { + break + } + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + goto _14 + _14: + ; + j++ + } + } + goto _13 + _13: + ; + i++ + } + t1 = t2 + servfail_retry = int32(2) * nqueries + } + /* Wait for a response, or until time to retry */ + if Xpoll(tls, pfd, uint64(nqueries+int32(1)), int32(t1+uint64(retry_interval)-t2)) <= 0 { + goto _11 + } + for next < nqueries { + *(*[1]Tiovec)(unsafe.Pointer(bp + 8)) = [1]Tiovec{ + 0: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 232)) = Tmsghdr{ + Fmsg_name: bp + 88, + Fmsg_namelen: sl, + Fmsg_iov: bp + 8, + Fmsg_iovlen: int32(1), + } + rlen = int32(Xrecvmsg(tls, fd, bp+232, 0)) + if rlen < 0 { + break + } + /* Ignore non-identifiable packets */ + if rlen < int32(4) { + continue + } + /* Ignore replies from addresses we didn't send to */ + j = 0 + for { + if !(j < nns && Xmemcmp(tls, bp+116+uintptr(j)*28, bp+88, uint64(sl)) != 0) { + break + } + goto _15 + _15: + ; + j++ + } + if j == nns { + continue + } + /* Find which query this answer goes with, if any */ + i = next + for { + if !(i < nqueries && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8))))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8))))) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 1))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)) + 1))))) { + break + } + goto _16 + _16: + ; + i++ + } + if i == nqueries { + continue + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0 { + continue + } + /* Only accept positive or negative responses; + * retry immediately on server failure, and ignore + * all other codes such as refusal. */ + switch int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 3))) & Int32FromInt32(15) { + case 0: + fallthrough + case int32(3): + case int32(2): + if v18 = servfail_retry != 0; v18 { + v17 = servfail_retry + servfail_retry-- + } + if v18 && v17 != 0 { + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + } + fallthrough + default: + continue + } + /* Store answer in the right slot, or update next + * available temp slot if it's already in place. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = rlen + if i == next { + for { + if !(next < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(next)*4)) != 0) { + break + } + goto _19 + _19: + ; + next++ + } + } else { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), uint64(rlen)) + } + /* Ignore further UDP if all slots full or TCP-mode */ + if next == nqueries { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = 0 + } + /* If answer is truncated (TC bit), fallback to TCP */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 2)))&int32(2) != 0 || (*(*Tmsghdr)(unsafe.Pointer(bp + 232))).Fmsg_flags&int32(MSG_TRUNC) != 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = -int32(1) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), uintptr(0)) + r = _start_tcp(tls, pfd+uintptr(i)*8, family, bp+116+uintptr(j)*28, sl, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + if r >= 0 { + *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) = r + *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) = 0 + } + continue + } + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLOUT) != 0 { + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 52)) = [2]Tuint8_t{ + 0: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4)) >> int32(8)), + 1: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + } + *(*[2]Tiovec)(unsafe.Pointer(bp + 24)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 52, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), + Fiov_len: uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 288)) = Tmsghdr{ + Fmsg_iov: bp + 24, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+288, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)))) + r = int32(Xsendmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+288, int32(MSG_NOSIGNAL))) + if r < 0 { + goto out + } + *(*int32)(unsafe.Pointer(qpos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) == *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))+int32(2) { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Fevents = int16(POLLIN) + } + } + goto _20 + _20: + ; + i++ + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLIN) != 0 { + *(*[2]Tiovec)(unsafe.Pointer(bp + 56)) = [2]Tiovec{ + 0: { + Fiov_base: alen_buf + uintptr(i)*2, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 344)) = Tmsghdr{ + Fmsg_iov: bp + 56, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+344, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)))) + r = int32(Xrecvmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+344, 0)) + if r <= 0 { + goto out + } + *(*int32)(unsafe.Pointer(apos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < int32(2) { + goto _21 + } + alen = int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2 + 1))) + if alen < int32(13) { + goto out + } + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < alen+int32(2) && *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < asize+int32(2) { + goto _21 + } + rcode = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 3))) & int32(15) + if rcode != 0 && rcode != int32(3) { + goto out + } + /* Storing the length here commits the accepted answer. + * Immediately close TCP socket so as not to consume + * resources we no longer need. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = alen + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd)) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + } + goto _21 + _21: + ; + i++ + } + goto _11 + _11: + ; + t2 = _mtime(tls) + } + goto out +out: + ; + __pthread_cleanup_pop(tls, bp+208, int32(1)) + /* Disregard any incomplete TCP results */ + i = 0 + for { + if !(i < nqueries) { + break + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = 0 + } + goto _22 + _22: + ; + i++ + } + return 0 +} + +func X__res_msend(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var _ /* conf at bp+0 */ Tresolvconf + if X__get_resolv_conf(tls, bp, uintptr(0), uint64(0)) < 0 { + return -int32(1) + } + return X__res_msend_rc(tls, nqueries, queries, qlens, answers, alens, asize, bp) +} + +func X__res_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(544) + defer tls.Free(544) + *(*uintptr)(unsafe.Pointer(bp)) = _msg + *(*int32)(unsafe.Pointer(bp + 8)) = _msglen + *(*uintptr)(unsafe.Pointer(bp + 16)) = _answer + *(*int32)(unsafe.Pointer(bp + 24)) = _anslen + var r, v1, v2 int32 + var _ /* buf at bp+28 */ [512]uint8 + _, _, _ = r, v1, v2 + if *(*int32)(unsafe.Pointer(bp + 24)) < int32(512) { + r = X__res_send(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+28, int32(512)) + if r >= 0 { + if r < *(*int32)(unsafe.Pointer(bp + 24)) { + v1 = r + } else { + v1 = *(*int32)(unsafe.Pointer(bp + 24)) + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), bp+28, uint64(v1)) + } + return r + } + r = X__res_msend(tls, int32(1), bp, bp+8, bp+16, bp+24, *(*int32)(unsafe.Pointer(bp + 24))) + if r < 0 || !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { + v2 = -int32(1) + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 24)) + } + return v2 +} + +func Xres_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_send(tls, _msg, _msglen, _answer, _anslen) +} + +/* This is completely unused, and exists purely to satisfy broken apps. */ + +func X__res_state(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_res1)) +} + +var _res1 t__res_state + +func X__get_resolv_conf(tls *TLS, conf uintptr, search uintptr, search_sz Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v conf=%v search=%v search_sz=%v, (%v:)", tls, conf, search, search_sz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(752) + defer tls.Free(752) + var c, nns, v1, v13, v14, v17, v18, v2, v21, v22, v26, v27, v8, v9 int32 + var f, p uintptr + var l Tsize_t + var x, x1, x2, v5, v6, v7 uint64 + var v11, v20, v24, v4 bool + var _ /* _buf at bp+256 */ [256]uint8 + var _ /* _f at bp+512 */ TFILE + var _ /* line at bp+0 */ [256]uint8 + var _ /* z at bp+744 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, f, l, nns, p, x, x1, x2, v1, v11, v13, v14, v17, v18, v2, v20, v21, v22, v24, v26, v27, v4, v5, v6, v7, v8, v9 + nns = 0 + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(1) + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(5) + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(2) + if search != 0 { + *(*uint8)(unsafe.Pointer(search)) = uint8(0) + } + f = X__fopen_rb_ca(tls, __ccgo_ts+1191, bp+512, bp+256, uint64(256)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + goto no_resolv_conf + default: + return -int32(1) + } + } + for Xfgets(tls, bp, int32(256), f) != 0 { + if !(Xstrchr(tls, bp, int32('\n')) != 0) && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + for cond := true; cond; cond = c != int32('\n') && c != -int32(1) { + c = Xgetc(tls, f) + } + continue + } + if v4 = !(Xstrncmp(tls, bp, __ccgo_ts+1208, uint64(7)) != 0); v4 { + v1 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(7)]) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + } + if v4 && v2 != 0 { + p = Xstrstr(tls, bp, __ccgo_ts+1216) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 6)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(6) + x = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x > uint64(15) { + v5 = uint64(15) + } else { + v5 = x + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(v5) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1223) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 9)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(9) + x1 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x1 > uint64(10) { + v6 = uint64(10) + } else { + v6 = x1 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(v6) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1233) + if p != 0 && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 8)))-uint32('0') < uint32(10)) != 0 || int32(*(*uint8)(unsafe.Pointer(p + 8))) == int32('.')) { + p += uintptr(8) + x2 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x2 > uint64(60) { + v7 = uint64(60) + } else { + v7 = x2 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(v7) + } + } + continue + } + if v11 = !(Xstrncmp(tls, bp, __ccgo_ts+1242, uint64(10)) != 0); v11 { + v8 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(10)]) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + if v11 && v9 != 0 { + if nns >= int32(MAXNS) { + continue + } + p = bp + uintptr(11) + for { + v13 = int32(*(*uint8)(unsafe.Pointer(p))) + v14 = BoolInt32(v13 == int32(' ') || uint32(v13)-uint32('\t') < uint32(5)) + goto _15 + _15: + if !(v14 != 0) { + break + } + goto _12 + _12: + ; + p++ + } + *(*uintptr)(unsafe.Pointer(bp + 744)) = p + for { + if v20 = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) != 0; v20 { + v17 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744))))) + v18 = BoolInt32(v17 == int32(' ') || uint32(v17)-uint32('\t') < uint32(5)) + goto _19 + _19: + } + if !(v20 && !(v18 != 0)) { + break + } + goto _16 + _16: + ; + *(*uintptr)(unsafe.Pointer(bp + 744))++ + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) = uint8(0) + if X__lookup_ipliteral(tls, conf+uintptr(nns)*28, p, PF_UNSPEC) > 0 { + nns++ + } + continue + } + if !(search != 0) { + continue + } + if v24 = Xstrncmp(tls, bp, __ccgo_ts+1253, uint64(6)) != 0 && Xstrncmp(tls, bp, __ccgo_ts+1260, uint64(6)) != 0; !v24 { + v21 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(6)]) + v22 = BoolInt32(v21 == int32(' ') || uint32(v21)-uint32('\t') < uint32(5)) + goto _23 + _23: + } + if v24 || !(v22 != 0) { + continue + } + p = bp + uintptr(7) + for { + v26 = int32(*(*uint8)(unsafe.Pointer(p))) + v27 = BoolInt32(v26 == int32(' ') || uint32(v26)-uint32('\t') < uint32(5)) + goto _28 + _28: + if !(v27 != 0) { + break + } + goto _25 + _25: + ; + p++ + } + l = Xstrlen(tls, p) + /* This can never happen anyway with chosen buffer sizes. */ + if l >= search_sz { + continue + } + Xmemcpy(tls, search, p, l+uint64(1)) + } + X__fclose_ca(tls, f) + goto no_resolv_conf +no_resolv_conf: + ; + if !(nns != 0) { + X__lookup_ipliteral(tls, conf, __ccgo_ts+1267, PF_UNSPEC) + nns = int32(1) + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fnns = uint32(nns) + return 0 +} + +func Xsend(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsendto(tls, fd, buf, len1, flags, uintptr(0), uint32(0)) +} + +func Xsendmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v, (%v:)", tls, fd, msgvec, vlen, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, v2 int32 + var r Tssize_t + _, _, _ = i, r, v2 + if vlen > uint32(IOV_MAX) { + vlen = uint32(IOV_MAX) + } /* This matches the kernel. */ + if !(vlen != 0) { + return 0 + } + i = 0 + for { + if !(uint32(i) < vlen) { + break + } + /* As an unfortunate inconsistency, the sendmmsg API uses + * unsigned int for the resulting msg_len, despite sendmsg + * returning ssize_t. However Linux limits the total bytes + * sent by sendmsg to INT_MAX, so the assignment is safe. */ + r = Xsendmsg(tls, fd, msgvec+uintptr(i)*64, int32(flags)) + if r < 0 { + goto error + } + (*(*Tmmsghdr)(unsafe.Pointer(msgvec + uintptr(i)*64))).Fmsg_len = uint32(r) + goto _1 + _1: + ; + i++ + } + goto error +error: + ; + if i != 0 { + v2 = i + } else { + v2 = -int32(1) + } + return v2 + return r1 +} + +func Xsendmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1216) + defer tls.Free(1216) + var c1, v3, v4 uintptr + var r, v14 int64 + var v1, v5, v6, v7 int32 + var v10, v11, v12, v13, v8, v9 Tsyscall_arg_t + var _ /* chbuf at bp+152 */ [66]Tcmsghdr + var _ /* h at bp+96 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, r, v1, v10, v11, v12, v13, v14, v3, v4, v5, v6, v7, v8, v9 + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp + 96)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad1 = v1 + msg = bp + 96 + if (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen != 0 { + if uint64((*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen) > uint64(1056) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + Xmemcpy(tls, bp+152, (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_control, uint64((*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen)) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_control = bp + 152 + if uint64((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_controllen) >= uint64(16) { + v3 = (*Tmsghdr)(unsafe.Pointer(bp + 96)).Fmsg_control + } else { + v3 = UintptrFromInt32(0) + } + c1 = v3 + for { + if !(c1 != 0) { + break + } + (*Tcmsghdr)(unsafe.Pointer(c1)).F__pad1 = 0 + goto _2 + _2: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_controllen))-int64(c1)) { + v4 = uintptr(0) + } else { + v4 = c1 + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + c1 = v4 + } + } + } + v5 = int32(SYS_sendmsg) + v6 = int32(__SC_sendmsg) + v7 = int32(1) + v8 = int64(fd) + v9 = int64(msg) + v10 = int64(flags) + v11 = int64(Int32FromInt32(0)) + v12 = int64(Int32FromInt32(0)) + v13 = int64(Int32FromInt32(0)) + if v7 != 0 { + r = ___syscall_cp(tls, int64(v5), v8, v9, v10, v11, v12, v13) + } else { + r = X__syscall6(tls, int64(v5), v8, v9, v10, v11, v12, v13) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v14 = r + goto _15 + } + if v7 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v8, + 1: v9, + 2: v10, + 3: v11, + 4: v12, + 5: v13, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v6), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v8, + 1: v9, + 2: v10, + 3: v11, + 4: v12, + 5: v13, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v6), int64(bp+48)) + } + v14 = r + goto _15 +_15: + return X__syscall_ret(tls, uint64(v14)) +} + +func Xsendto(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen Tsocklen_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_sendto) + v2 = int32(__SC_sendto) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(buf) + v6 = int64(len1) + v7 = int64(flags) + v8 = int64(addr) + v9 = int64(alen) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint64(v10)) +} + +func Xendservent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetservent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } +} + +func Xgetservent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xsetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen Tsocklen_t) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var r, v10, v22, v33 int64 + var r1, v1, v13, v14, v15, v2, v24, v25, v26, v3 int32 + var s Ttime_t + var tv uintptr + var us Tsuseconds_t + var v12 uint64 + var v16, v17, v18, v19, v20, v21, v27, v28, v29, v30, v31, v32, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, s, tv, us, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_setsockopt) + v2 = int32(__SC_setsockopt) + v3 = 0 + v4 = int64(fd) + v5 = int64(level) + v6 = int64(optname) + v7 = int64(optval) + v8 = int64(optlen) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+256)) + } + v10 = r + goto _11 +_11: + r1 = int32(v10) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if false { + break + } + if uint64(optlen) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + tv = optval + s = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + us = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + if !((uint64(us)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v12 = uint64(us) + } else { + v12 = uint64(0x7fffffff) + (0+uint64(us))>>int32(63) + } + *(*[2]int64)(unsafe.Pointer(bp + 96)) = [2]int64{ + 0: s, + 1: int64(int32(v12)), + } + v13 = int32(SYS_setsockopt) + v14 = int32(__SC_setsockopt) + v15 = 0 + v16 = int64(fd) + v17 = int64(level) + v18 = int64(optname) + v19 = int64(bp + 96) + v20 = int64(Uint64FromInt32(2) * Uint64FromInt64(8)) + v21 = int64(Int32FromInt32(0)) + if v15 != 0 { + r = ___syscall_cp(tls, int64(v13), v16, v17, v18, v19, v20, v21) + } else { + r = X__syscall6(tls, int64(v13), v16, v17, v18, v19, v20, v21) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v22 = r + goto _23 + } + if v15 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v14), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v14), int64(bp+256)) + } + v22 = r + goto _23 + _23: + r1 = int32(v22) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v24 = int32(SYS_setsockopt) + v25 = int32(__SC_setsockopt) + v26 = 0 + v27 = int64(fd) + v28 = int64(level) + v29 = int64(optname) + v30 = int64(optval) + v31 = int64(optlen) + v32 = int64(Int32FromInt32(0)) + if v26 != 0 { + r = ___syscall_cp(tls, int64(v24), v27, v28, v29, v30, v31, v32) + } else { + r = X__syscall6(tls, int64(v24), v27, v28, v29, v30, v31, v32) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v33 = r + goto _34 + } + if v26 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v25), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v25), int64(bp+256)) + } + v33 = r + goto _34 + _34: + r1 = int32(v33) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func Xshutdown(tls *TLS, fd int32, how int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v how=%v, (%v:)", tls, fd, how, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_shutdown) + v2 = int32(__SC_shutdown) + v3 = 0 + v4 = int64(fd) + v5 = int64(how) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xsockatmark(tls *TLS, s int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* ret at bp+0 */ int32 + if Xioctl(tls, s, int32(SIOCATMARK), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xsocket(tls *TLS, domain int32, type1 int32, protocol int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v, (%v:)", tls, domain, type1, protocol, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var r, v10, v21 int64 + var s, v1, v12, v13, v14, v2, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, s, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socket) + v2 = int32(__SC_socket) + v3 = 0 + v4 = int64(domain) + v5 = int64(type1) + v6 = int64(protocol) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+144)) + } + v10 = r + goto _11 +_11: + s = int32(v10) + if (s == -int32(EINVAL) || s == -int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socket) + v13 = int32(__SC_socket) + v14 = 0 + v15 = int64(domain) + v16 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = int64(protocol) + v18 = int64(Int32FromInt32(0)) + v19 = int64(Int32FromInt32(0)) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+144)) + } + v21 = r + goto _22 + _22: + s = int32(v21) + if s < 0 { + return int32(X__syscall_ret(tls, uint64(s))) + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return int32(X__syscall_ret(tls, uint64(s))) +} + +func Xsocketpair(tls *TLS, domain int32, type1 int32, protocol int32, fd uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v fd=%v, (%v:)", tls, domain, type1, protocol, fd, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var r, v10, v21 int64 + var r1, v1, v12, v13, v14, v2, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socketpair) + v2 = int32(__SC_socketpair) + v3 = 0 + v4 = int64(domain) + v5 = int64(type1) + v6 = int64(protocol) + v7 = int64(fd) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+144)) + } + v10 = r + goto _11 +_11: + r1 = int32(X__syscall_ret(tls, uint64(v10))) + if r1 < 0 && (*(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINVAL) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socketpair) + v13 = int32(__SC_socketpair) + v14 = 0 + v15 = int64(domain) + v16 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = int64(protocol) + v18 = int64(fd) + v19 = int64(Int32FromInt32(0)) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+144)) + } + v21 = r + goto _22 + _22: + r1 = int32(X__syscall_ret(tls, uint64(v21))) + if r1 < 0 { + return r1 + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return r1 +} + +const SHADOW = "/etc/shadow" + +type Tgroup = struct { + Fgr_name uintptr + Fgr_passwd uintptr + Fgr_gid Tgid_t + Fgr_mem uintptr +} + +type Tspwd = struct { + Fsp_namp uintptr + Fsp_pwdp uintptr + Fsp_lstchg int64 + Fsp_min int64 + Fsp_max int64 + Fsp_warn int64 + Fsp_inact int64 + Fsp_expire int64 + Fsp_flag uint64 +} + +func Xfgetgrent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgrent_a(tls, f, uintptr(unsafe.Pointer(&_gr)), uintptr(unsafe.Pointer(&_line1)), bp+8, uintptr(unsafe.Pointer(&_mem)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _line1 uintptr + +var _mem uintptr + +var _gr Tgroup + +func Xfgetpwent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+8 */ uintptr + var _ /* size at bp+0 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + X__getpwent_a(tls, f, uintptr(unsafe.Pointer(&_pw)), uintptr(unsafe.Pointer(&_line2)), bp, bp+8) + return *(*uintptr)(unsafe.Pointer(bp + 8)) +} + +var _line2 uintptr + +var _pw Tpasswd + +const GETGRBYGID = 3 +const GETGRBYNAME = 2 +const GETINITGR = 15 +const GETPWBYNAME = 0 +const GETPWBYUID = 1 +const GRFOUND = 1 +const GRGID = 4 +const GRMEMCNT = 5 +const GRNAMELEN = 2 +const GRPASSWDLEN = 3 +const GRVERSION = 0 +const GR_LEN = 6 +const INITGRFOUND = 1 +const INITGRNGRPS = 2 +const INITGRVERSION = 0 +const INITGR_LEN = 3 +const NSCDVERSION = 2 +const PWDIRLEN = 7 +const PWFOUND = 1 +const PWGECOSLEN = 6 +const PWGID = 5 +const PWNAMELEN = 2 +const PWPASSWDLEN = 3 +const PWSHELLLEN = 8 +const PWUID = 4 +const PWVERSION = 0 +const PW_LEN = 9 +const REQKEYLEN = 2 +const REQTYPE = 1 +const REQVERSION = 0 +const REQ_LEN = 3 + +func _itoa1(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getgr_a(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gid=%v gr=%v buf=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, name, gid, gr, buf, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var f, key, ptr, tmp, tmp1 uintptr + var grlist_len, len1 Tsize_t + var i, req, v10 Tint32_t + var rv, v1, v2, v4, v8 int32 + var v5, v6 Tuint32_t + var _ /* cs at bp+0 */ int32 + var _ /* gidbuf at bp+28 */ [11]uint8 + var _ /* groupbuf at bp+4 */ [6]Tint32_t + var _ /* name_len at bp+44 */ Tuint32_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, grlist_len, i, key, len1, ptr, req, rv, tmp, tmp1, v1, v10, v2, v4, v5, v6, v8 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + f = Xfopen(tls, __ccgo_ts+1277, __ccgo_ts+412) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getgrent_a(tls, f, gr, buf, size, mem, nmem, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_name) != 0) || !(name != 0) && (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_gid == gid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = int32(GETGRBYNAME) + } else { + v2 = int32(GETGRBYGID) + } + req = v2 + *(*[6]Tint32_t)(unsafe.Pointer(bp + 4)) = [6]Tint32_t{} + len1 = uint64(0) + grlist_len = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 28)) = [11]uint8{} + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + if name != 0 { + key = name + } else { + if gid < uint32(0) || gid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa1(tls, bp+28, gid) + } + f = X__nscd_query(tls, req, key, bp+4, uint64(24), bp+40) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] != 0) || !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) > uint64(0xffffffffffffffff)-uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] + (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + i = 0 + for { + if !(i < (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]) { + break + } + if Xfread(tls, bp+44, uint64(4), uint64(1), f) < uint64(1) { + if Xferror(tls, f) != 0 { + v4 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v4 = int32(EIO) + } + rv = v4 + goto cleanup_f + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + v5 = *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + v6 = v5>>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< uint64(0xffffffffffffffff)-grlist_len || uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) > uint64(0xffffffffffffffff)-len1 { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + grlist_len += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + goto _3 + _3: + ; + i++ + } + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v8 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v8 = int32(EIO) + } + rv = v8 + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > *(*Tsize_t)(unsafe.Pointer(nmem)) { + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + tmp1 = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(mem)), uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+Int32FromInt32(1))*uint64(8)) + if !(tmp1 != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(mem)) = tmp1 + *(*Tsize_t)(unsafe.Pointer(nmem)) = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] + int32(1)) + } + if (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = *(*uintptr)(unsafe.Pointer(buf)) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + ptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) + i = Int32FromInt32(0) + for { + if !(ptr != *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem))))+uintptr(grlist_len)) { + break + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + i++ + v10 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v10)*8)) = ptr + uintptr(1) + } + goto _9 + _9: + ; + ptr++ + } + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(i)*8)) = uintptr(0) + if i != (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] { + rv = int32(EIO) + goto cleanup_f + } + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = (*Tgroup)(unsafe.Pointer(gr)).Fgr_name + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRGID)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + if *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name) != 0 || !(name != 0) && gid != (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = gr + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getgr_r(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i Tsize_t + var rv int32 + var _ /* cs at bp+32 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + var _ /* mem at bp+16 */ uintptr + var _ /* nmem at bp+24 */ Tsize_t + _, _ = i, rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 24)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+32) + rv = X__getgr_a(tls, name, gid, gr, bp, bp+8, bp+16, bp+24, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8))+(*(*Tsize_t)(unsafe.Pointer(bp + 24))+uint64(1))*uint64(8)+uint64(32) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + buf += uintptr((uint64(16) - uint64(buf)) % uint64(16)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = buf + buf += uintptr((*(*Tsize_t)(unsafe.Pointer(bp + 24)) + uint64(1)) * uint64(8)) + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)) != 0) { + break + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(int64(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)))-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + goto _1 + _1: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(0) + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 32)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrnam_r(tls *TLS, name uintptr, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, name, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, name, uint32(0), gr, buf, size, res) +} + +func Xgetgrgid_r(tls *TLS, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, gid, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, uintptr(0), gid, gr, buf, size, res) +} + +var _f1 uintptr +var _line3 uintptr +var _mem1 uintptr +var _gr1 Tgroup + +func Xsetgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f1 != 0 { + Xfclose(tls, _f1) + } + _f1 = uintptr(0) +} + +func Xgetgrent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + if !(_f1 != 0) { + _f1 = Xfopen(tls, __ccgo_ts+1277, __ccgo_ts+412) + } + if !(_f1 != 0) { + return uintptr(0) + } + X__getgrent_a(tls, _f1, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrgid(tls *TLS, gid Tgid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, uintptr(0), gid, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetgrent(tls) +} + +func _atou(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getgrent_a(tls *TLS, f uintptr, gr uintptr, line uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v gr=%v line=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, f, gr, line, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v13, v14 Tsize_t + var l, v2 Tssize_t + var mems, v12, v4, v5, v6, v7, v8, v9 uintptr + var rv, v3 int32 + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, mems, rv, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = _atou(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + mems = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + *(*Tsize_t)(unsafe.Pointer(nmem)) = BoolUint64(!!(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + *(*Tsize_t)(unsafe.Pointer(nmem))++ + } + goto _10 + _10: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(mem))) + *(*uintptr)(unsafe.Pointer(mem)) = Xcalloc(tls, uint64(8), *(*Tsize_t)(unsafe.Pointer(nmem))+uint64(1)) + if !(*(*uintptr)(unsafe.Pointer(mem)) != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + if *(*uint8)(unsafe.Pointer(mems)) != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = mems + *(*uintptr)(unsafe.Pointer(bp)) = mems + i = Uint64FromInt32(0) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + i++ + v13 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v13)*8)) = *(*uintptr)(unsafe.Pointer(bp)) + } + goto _11 + _11: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + i++ + v14 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v14)*8)) = uintptr(0) + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + goto end +end: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = gr + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrouplist(tls *TLS, user uintptr, gid Tgid_t, groups uintptr, ngroups uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v user=%v gid=%v groups=%v ngroups=%v, (%v:)", tls, user, gid, groups, ngroups, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var f, nscdbuf, v1, v10, v13 uintptr + var i, n, v12, v9 Tssize_t + var nbytes Tsize_t + var nlim, ret, rv, v6 int32 + var v14 int64 + var v3, v4 Tuint32_t + var _ /* buf at bp+56 */ uintptr + var _ /* gr at bp+0 */ Tgroup + var _ /* mem at bp+64 */ uintptr + var _ /* nmem at bp+72 */ Tsize_t + var _ /* res at bp+32 */ uintptr + var _ /* resp at bp+44 */ [3]Tint32_t + var _ /* size at bp+80 */ Tsize_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, n, nbytes, nlim, nscdbuf, ret, rv, v1, v10, v12, v13, v14, v3, v4, v6, v9 + ret = -int32(1) + n = int64(1) + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + nscdbuf = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 72)) = uint64(0) + nlim = *(*int32)(unsafe.Pointer(ngroups)) + if nlim >= int32(1) { + v1 = groups + groups += 4 + *(*Tgid_t)(unsafe.Pointer(v1)) = gid + } + f = X__nscd_query(tls, int32(GETINITGR), user, bp+44, uint64(12), bp+40) + if !(f != 0) { + goto cleanup + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRFOUND)] != 0 { + nscdbuf = Xcalloc(tls, uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]), uint64(4)) + if !(nscdbuf != 0) { + goto cleanup + } + nbytes = uint64(4) * uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]) + if nbytes != 0 && !(Xfread(tls, nscdbuf, nbytes, uint64(1), f) != 0) { + if !(Xferror(tls, f) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + } + goto cleanup + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + i = 0 + for { + if !(i < int64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)])) { + break + } + v3 = *(*Tuint32_t)(unsafe.Pointer(nscdbuf + uintptr(i)*4)) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3< int64(nlim) { + v14 = int64(-int32(1)) + } else { + v14 = n + } + ret = int32(v14) + *(*int32)(unsafe.Pointer(ngroups)) = int32(n) + goto cleanup +cleanup: + ; + if f != 0 { + Xfclose(tls, f) + } + Xfree(tls, nscdbuf) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) + return ret +} + +func _itoa2(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getpw_a(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, key, tmp uintptr + var len1 Tsize_t + var req Tint32_t + var rv, v1, v2, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* passwdbuf at bp+8 */ [9]Tint32_t + var _ /* uidbuf at bp+44 */ [11]uint8 + _, _, _, _, _, _, _, _, _ = f, key, len1, req, rv, tmp, v1, v2, v3 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + f = Xfopen(tls, __ccgo_ts+1288, __ccgo_ts+412) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getpwent_a(tls, f, pw, buf, size, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_name) != 0) || !(name != 0) && (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_uid == uid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = GETPWBYNAME + } else { + v2 = int32(GETPWBYUID) + } + req = v2 + *(*[9]Tint32_t)(unsafe.Pointer(bp + 8)) = [9]Tint32_t{} + len1 = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 44)) = [11]uint8{} + if name != 0 { + key = name + } else { + /* uid outside of this range can't be queried with the + * nscd interface, but might happen if uid_t ever + * happens to be a larger type (this is not true as of + * now) + */ + if uid < uint32(0) || uid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa2(tls, bp+44, uid) + } + *(*[1]int32)(unsafe.Pointer(bp)) = [1]int32{} + f = X__nscd_query(tls, req, key, bp+8, uint64(36), bp) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + /* A zero length response from nscd is invalid. We ignore + * invalid responses and just report an error, rather than + * trying to do something with them. + */ + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) >= Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = int32(EIO) + } + rv = v3 + goto cleanup_f + } + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWUID)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGID)]) + /* Don't assume that nscd made sure to null terminate strings. + * It's supposed to, but malicious nscd should be ignored + * rather than causing a crash. + */ + if *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name) != 0 || !(name != 0) && uid != (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = pw + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getpw_r(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var rv int32 + var _ /* cs at bp+16 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + _ = rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+16) + rv = X__getpw_a(tls, name, uid, pw, bp, bp+8, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8)) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 16)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetpwnam_r(tls *TLS, name uintptr, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, name, uint32(0), pw, buf, size, res) +} + +func Xgetpwuid_r(tls *TLS, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, uintptr(0), uid, pw, buf, size, res) +} + +var _f2 uintptr +var _line4 uintptr +var _pw1 Tpasswd +var _size Tsize_t + +func Xsetpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f2 != 0 { + Xfclose(tls, _f2) + } + _f2 = uintptr(0) +} + +func Xgetpwent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if !(_f2 != 0) { + _f2 = Xfopen(tls, __ccgo_ts+1288, __ccgo_ts+412) + } + if !(_f2 != 0) { + return uintptr(0) + } + X__getpwent_a(tls, _f2, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwuid(tls *TLS, uid Tuid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, uintptr(0), uid, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetpwent(tls) +} + +func _atou1(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getpwent_a(tls *TLS, f uintptr, pw uintptr, line uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pw=%v line=%v size=%v res=%v, (%v:)", tls, f, pw, line, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v2 Tssize_t + var rv, v3 int32 + var v10, v11, v12, v13, v14, v4, v5, v6, v7, v8, v9 uintptr + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = l, rv, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + pw = uintptr(0) + break + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v10 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v10)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = *(*uintptr)(unsafe.Pointer(bp)) + v11 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v11 + if !(v11 != 0) { + goto _1 + } + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = *(*uintptr)(unsafe.Pointer(bp)) + v13 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v13 + if !(v13 != 0) { + goto _1 + } + v14 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = pw + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xsetspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetspent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xlckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xulckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +var _addr = struct { + Fsun_family int16 + Fsun_path [21]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [21]uint8{'/', 'v', 'a', 'r', '/', 'r', 'u', 'n', '/', 'n', 's', 'c', 'd', '/', 's', 'o', 'c', 'k', 'e', 't'}, +} + +func X__nscd_query(tls *TLS, req Tint32_t, key uintptr, buf uintptr, len1 Tsize_t, swap uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v req=%v key=%v buf=%v len1=%v swap=%v, (%v:)", tls, req, key, buf, len1, swap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var errno_save, fd int32 + var f, v1 uintptr + var i Tsize_t + var v3, v4, v7, v8 Tuint32_t + var _ /* msg at bp+48 */ Tmsghdr + var _ /* req_buf at bp+32 */ [3]Tint32_t + _, _, _, _, _, _, _, _, _ = errno_save, f, fd, i, v1, v3, v4, v7, v8 + f = uintptr(0) + *(*[3]Tint32_t)(unsafe.Pointer(bp + 32)) = [3]Tint32_t{ + 0: int32(NSCDVERSION), + 1: req, + 2: int32(Xstrnlen(tls, key, uint64(LOGIN_NAME_MAX)) + uint64(1)), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(12), + }, + 1: { + Fiov_base: key, + Fiov_len: Xstrlen(tls, key) + uint64(1), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 48)) = Tmsghdr{ + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + *(*int32)(unsafe.Pointer(swap)) = 0 + goto retry +retry: + ; + Xmemset(tls, buf, 0, len1) + *(*Tint32_t)(unsafe.Pointer(buf)) = int32(NSCDVERSION) + fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if fd < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + f = Xfopen(tls, __ccgo_ts+1300, __ccgo_ts+1310) + if f != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + } + return f + } + return uintptr(0) + } + v1 = Xfdopen(tls, fd, __ccgo_ts+1313) + f = v1 + if !(v1 != 0) { + Xclose(tls, fd) + return uintptr(0) + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[int32(2)] > int32(LOGIN_NAME_MAX) { + return f + } + if Xconnect(tls, fd, uintptr(unsafe.Pointer(&_addr)), uint32(24)) < 0 { + /* If there isn't a running nscd we simulate a "not found" + * result and the caller is responsible for calling + * fclose on the (unconnected) socket. The value of + * errno must be left unchanged in this case. */ + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ECONNREFUSED) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + return f + } + goto error + } + if Xsendmsg(tls, fd, bp+48, int32(MSG_NOSIGNAL)) < 0 { + goto error + } + if !(Xfread(tls, buf, len1, uint64(1), f) != 0) { + /* If the VERSION entry mismatches nscd will disconnect. The + * most likely cause is that the endianness mismatched. So, we + * byteswap and try once more. (if we already swapped, just + * fail out) + */ + if Xferror(tls, f) != 0 { + goto error + } + if !(*(*int32)(unsafe.Pointer(swap)) != 0) { + Xfclose(tls, f) + i = uint64(0) + for { + if !(i < Uint64FromInt64(12)/Uint64FromInt64(4)) { + break + } + v3 = uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[i]) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7< %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var r, v1, v3, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = i, r, v1, v3, v4, v5 + Xflockfile(tls, f) + v1 = Xfprintf(tls, f, __ccgo_ts+1315, VaList(bp+8, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd, (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid)) + r = v1 + if v1 < 0 { + goto done + } + if (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem != 0 { + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) != 0) { + break + } + if i != 0 { + v4 = __ccgo_ts + 1325 + } else { + v4 = __ccgo_ts + } + v3 = Xfprintf(tls, f, __ccgo_ts+1327, VaList(bp+8, v4, *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)))) + r = v3 + if v3 < 0 { + goto done + } + goto _2 + _2: + ; + i++ + } + } + r = Xfputc(tls, int32('\n'), f) + goto done +done: + ; + Xfunlockfile(tls, f) + if r < 0 { + v5 = -int32(1) + } else { + v5 = 0 + } + return v5 +} + +func Xputpwent(tls *TLS, pw uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pw=%v f=%v, (%v:)", tls, pw, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var v1 int32 + _ = v1 + if Xfprintf(tls, f, __ccgo_ts+1332, VaList(bp+8, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xputspent(tls *TLS, sp uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sp=%v f=%v, (%v:)", tls, sp, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1, v10, v12, v14, v16, v4, v6, v8 int32 + var v11, v13, v15, v5, v7, v9 int64 + var v17 uint64 + var v2, v3 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8, v9 + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp != 0 { + v2 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp + } else { + v2 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp != 0 { + v3 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp + } else { + v3 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v4 = 0 + } else { + v4 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v5 = 0 + } else { + v5 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v6 = 0 + } else { + v6 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v7 = 0 + } else { + v7 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_min + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v8 = 0 + } else { + v8 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v9 = 0 + } else { + v9 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_max + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v10 = 0 + } else { + v10 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v11 = 0 + } else { + v11 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v12 = 0 + } else { + v12 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v13 = 0 + } else { + v13 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v14 = 0 + } else { + v14 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v15 = 0 + } else { + v15 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v16 = 0 + } else { + v16 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v17 = uint64(0) + } else { + v17 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag + } + if Xfprintf(tls, f, __ccgo_ts+1354, VaList(bp+8, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func X__rand48_step(tls *TLS, xi uintptr, lc uintptr) (r Tuint64_t) { + if __ccgo_strace { + trc("tls=%v xi=%v lc=%v, (%v:)", tls, xi, lc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, x Tuint64_t + _, _ = a, x + x = uint64(uint32(*(*uint16)(unsafe.Pointer(xi)))|(uint32(*(*uint16)(unsafe.Pointer(xi + 1*2)))+0)<> int32(16)) + *(*uint16)(unsafe.Pointer(xi + 2*2)) = uint16(x >> int32(32)) + return x & uint64(0xffffffffffff) +} + +func Xerand48(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* x at bp+0 */ struct { + Ff [0]float64 + Fu Tuint64_t + } + *(*struct { + Ff [0]float64 + Fu Tuint64_t + })(unsafe.Pointer(bp)) = struct { + Ff [0]float64 + Fu Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp)) = uint64(0x3ff0000000000000) | X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2)< %v", r) }() + } + return Xerand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xlcong48(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), p, uint64(14)) +} + +func Xnrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> int32(17)) +} + +func Xlrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xjrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> Int32FromInt32(16))) +} + +func Xmrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xjrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +var _seed Tuint64_t + +func Xsrand(tls *TLS, s uint32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + } + _seed = uint64(s - uint32(1)) +} + +func Xrand(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + _seed = uint64(6364136223846793005)*_seed + uint64(1) + return int32(_seed >> int32(33)) +} + +func _temper(tls *TLS, x uint32) (r uint32) { + x ^= x >> int32(11) + x ^= x << int32(7) & uint32(0x9D2C5680) + x ^= x << int32(15) & uint32(0xEFC60000) + x ^= x >> int32(18) + return x +} + +func Xrand_r(tls *TLS, seed uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + v1 = *(*uint32)(unsafe.Pointer(seed))*Uint32FromInt32(1103515245) + Uint32FromInt32(12345) + *(*uint32)(unsafe.Pointer(seed)) = v1 + return int32(_temper(tls, v1) / uint32(2)) +} + +/* +this code uses the same lagged fibonacci generator as the +original bsd random implementation except for the seeding +which was broken in the original +*/ + +var _init = [32]Tuint32_t{ + 1: uint32(0x5851f42d), + 2: uint32(0xc0b18ccf), + 3: uint32(0xcbb5f646), + 4: uint32(0xc7033129), + 5: uint32(0x30705b04), + 6: uint32(0x20fd5db4), + 7: uint32(0x9a8b7f78), + 8: uint32(0x502959d8), + 9: uint32(0xab894868), + 10: uint32(0x6c0356a7), + 11: uint32(0x88cdb7ff), + 12: uint32(0xb477d43f), + 13: uint32(0x70a3a52b), + 14: uint32(0xa8e4baf1), + 15: uint32(0xfd8341fc), + 16: uint32(0x8ae16fd9), + 17: uint32(0x742d2f7a), + 18: uint32(0x0d1f0796), + 19: uint32(0x76035e09), + 20: uint32(0x40f7702c), + 21: uint32(0x6fa72ca5), + 22: uint32(0xaaa84157), + 23: uint32(0x58a0df74), + 24: uint32(0xc74a0364), + 25: uint32(0xae533cc4), + 26: uint32(0x04185faf), + 27: uint32(0x6de3b115), + 28: uint32(0x0cab8628), + 29: uint32(0xf043bfa4), + 30: uint32(0x398150e9), + 31: uint32(0x37521657), +} + +var _n = int32(31) +var _i = int32(3) +var _j = int32(0) +var _x1 = uintptr(unsafe.Pointer(&_init)) + uintptr(1)*4 +var _lock3 [1]int32 + +func _lcg31(tls *TLS, x Tuint32_t) (r Tuint32_t) { + return (uint32(1103515245)*x + uint32(12345)) & uint32(0x7fffffff) +} + +func _lcg64(tls *TLS, x Tuint64_t) (r Tuint64_t) { + return uint64(6364136223846793005)*x + uint64(1) +} + +func _savestate(tls *TLS) (r uintptr) { + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) = uint32(_n<> int32(16)) + _i = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) >> Int32FromInt32(8) & uint32(0xff)) + _j = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) & uint32(0xff)) +} + +func ___srandom(tls *TLS, seed uint32) { + var k, v1 int32 + var s Tuint64_t + _, _, _ = k, s, v1 + s = uint64(seed) + if _n == 0 { + *(*Tuint32_t)(unsafe.Pointer(_x1)) = uint32(s) + return + } + if _n == int32(31) || _n == int32(7) { + v1 = int32(3) + } else { + v1 = int32(1) + } + _i = v1 + _j = 0 + k = 0 + for { + if !(k < _n) { + break + } + s = _lcg64(tls, s) + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(k)*4)) = uint32(s >> int32(32)) + goto _2 + _2: + ; + k++ + } + /* make sure x contains at least one odd number */ + *(*Tuint32_t)(unsafe.Pointer(_x1)) |= uint32(1) +} + +func Xsrandom(tls *TLS, seed uint32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + ___srandom(tls, seed) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) +} + +func Xinitstate(tls *TLS, seed uint32, state uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v seed=%v state=%v size=%v, (%v:)", tls, seed, state, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + if size < uint64(8) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + if size < uint64(32) { + _n = 0 + } else { + if size < uint64(64) { + _n = int32(7) + } else { + if size < uint64(128) { + _n = int32(15) + } else { + if size < uint64(256) { + _n = int32(31) + } else { + _n = int32(63) + } + } + } + } + _x1 = state + uintptr(1)*4 + ___srandom(tls, seed) + _savestate(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xsetstate(tls *TLS, state uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v state=%v, (%v:)", tls, state, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + _loadstate(tls, state) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xrandom(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k int64 + var v1 Tuint32_t + var v2, v3 int32 + _, _, _, _ = k, v1, v2, v3 + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + if _n == 0 { + v1 = _lcg31(tls, *(*Tuint32_t)(unsafe.Pointer(_x1))) + *(*Tuint32_t)(unsafe.Pointer(_x1)) = v1 + k = int64(v1) + goto end + } + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) += *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_j)*4)) + k = int64(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) >> int32(1)) + _i++ + v2 = _i + if v2 == _n { + _i = 0 + } + _j++ + v3 = _j + if v3 == _n { + _j = 0 + } + goto end +end: + ; + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return k +} + +func Xseed48(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&_p1)), uintptr(unsafe.Pointer(&X__seed48)), uint64(6)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), s, uint64(6)) + return uintptr(unsafe.Pointer(&_p1)) +} + +var _p1 [3]uint16 + +func Xsrand48(tls *TLS, seed int64) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[3]uint16)(unsafe.Pointer(bp)) = [3]uint16{ + 0: uint16(0x330e), + 1: uint16(seed), + 2: uint16(seed >> int32(16)), + } + Xseed48(tls, bp) +} + +func Xexecl(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecv(tls, path, argv) + return r +} + +func Xexecle(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv, envp uintptr + var v2 t__predefined_size_t + _, _, _, _, _, _ = ap, argc, argv, envp, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i <= argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + envp = VaUintptr(&ap) + _ = ap + return Xexecve(tls, path, argv, envp) + return r +} + +func Xexeclp(tls *TLS, file uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv0=%v va=%v, (%v:)", tls, file, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecvp(tls, file, argv) + return r +} + +func Xexecv(tls *TLS, path uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v, (%v:)", tls, path, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexecve(tls, path, argv, Xenviron) +} + +func Xexecve(tls *TLS, path uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v envp=%v, (%v:)", tls, path, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* do we need to use environ if envp is null? */ + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_execve), int64(path), int64(argv), int64(envp))))) +} + +func X__execvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, p, path, z, v3, v4 uintptr + var k, l Tsize_t + var seen_eacces int32 + var v2 t__predefined_size_t + _, _, _, _, _, _, _, _, _, _ = b, k, l, p, path, seen_eacces, z, v2, v3, v4 + defer func() { Xrealloc(tls, b, 0) }() + path = Xgetenv(tls, __ccgo_ts+1403) + seen_eacces = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + if !(*(*uint8)(unsafe.Pointer(file)) != 0) { + return -int32(1) + } + if Xstrchr(tls, file, int32('/')) != 0 { + return Xexecve(tls, file, argv, envp) + } + if !(path != 0) { + path = __ccgo_ts + 1408 + } + k = Xstrnlen(tls, file, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if k > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + l = Xstrnlen(tls, path, uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(1))) + uint64(1) + p = path + for { + v2 = l + k + uint64(1) + b = Xrealloc(tls, b, v2) + z = X__strchrnul(tls, p, int32(':')) + if uint64(int64(z)-int64(p)) >= l { + v3 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v3)) != 0) { + break + } + goto _1 + } + Xmemcpy(tls, b, p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Add(unsafe.Pointer(b), int64(z)-int64(p))) = uint8('/') + Xmemcpy(tls, b+uintptr(int64(z)-int64(p))+BoolUintptr(z > p), file, k+uint64(1)) + Xexecve(tls, b, argv, envp) + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EACCES): + seen_eacces = int32(1) + fallthrough + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + default: + return -int32(1) + } + v4 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v4)) != 0) { + break + } + goto _1 + _1: + ; + p = z + } + if seen_eacces != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + } + return -int32(1) +} + +func Xexecvp(tls *TLS, file uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v, (%v:)", tls, file, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, Xenviron) +} + +func Xexecvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, envp) +} + +func Xfexecve(tls *TLS, fd int32, argv uintptr, envp uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v argv=%v envp=%v, (%v:)", tls, fd, argv, envp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = r + r = int32(X__syscall5(tls, int64(SYS_execveat), int64(fd), int64(__ccgo_ts), int64(argv), int64(envp), int64(Int32FromInt32(AT_EMPTY_PATH)))) + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + X__procfdname(tls, bp, uint32(fd)) + Xexecve(tls, bp, argv, envp) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + } + return -int32(1) +} + +var _dummy_lockptr = uintptr(0) + +var _atfork_locks = [10]uintptr{ + 0: uintptr(unsafe.Pointer(&X__at_quick_exit_lockptr)), + 1: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 2: uintptr(unsafe.Pointer(&X__gettext_lockptr)), + 3: uintptr(unsafe.Pointer(&X__locale_lockptr)), + 4: uintptr(unsafe.Pointer(&X__random_lockptr)), + 5: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 6: uintptr(unsafe.Pointer(&X__stdio_ofl_lockptr)), + 7: uintptr(unsafe.Pointer(&X__syslog_lockptr)), + 8: uintptr(unsafe.Pointer(&X__timezone_lockptr)), + 9: uintptr(unsafe.Pointer(&_dummy_lockptr)), +} + +func _dummy8(tls *TLS, x int32) { +} + +func _dummy_0(tls *TLS) { +} + +const FDOP_CHDIR = 4 +const FDOP_CLOSE = 1 +const FDOP_DUP2 = 2 +const FDOP_FCHDIR = 5 +const FDOP_OPEN = 3 +const POSIX_SPAWN_RESETIDS = 1 +const POSIX_SPAWN_SETPGROUP = 2 +const POSIX_SPAWN_SETSCHEDPARAM = 16 +const POSIX_SPAWN_SETSCHEDULER = 32 +const POSIX_SPAWN_SETSID = 128 +const POSIX_SPAWN_SETSIGDEF = 4 +const POSIX_SPAWN_SETSIGMASK = 8 +const POSIX_SPAWN_USEVFORK = 64 + +type Tposix_spawnattr_t = struct { + F__flags int32 + F__pgrp Tpid_t + F__def Tsigset_t + F__mask Tsigset_t + F__prio int32 + F__pol int32 + F__fn uintptr + F__pad [56]uint8 +} + +type Tposix_spawn_file_actions_t = struct { + F__pad0 [2]int32 + F__actions uintptr + F__pad [16]int32 +} + +type Tfdop = struct { + Fnext uintptr + Fprev uintptr + Fcmd int32 + Ffd int32 + Fsrcfd int32 + Foflag int32 + Fmode Tmode_t +} + +func Xposix_spawn_file_actions_addchdir_np(tls *TLS, fa uintptr, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v path=%v, (%v:)", tls, fa, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = -int32(1) + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addclose(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CLOSE) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_adddup2(tls *TLS, fa uintptr, srcfd int32, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v srcfd=%v fd=%v, (%v:)", tls, fa, srcfd, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if srcfd < 0 || fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_DUP2) + (*Tfdop)(unsafe.Pointer(op)).Fsrcfd = srcfd + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addfchdir_np(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_FCHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addopen(tls *TLS, fa uintptr, fd int32, path uintptr, flags int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v path=%v flags=%v mode=%v, (%v:)", tls, fa, fd, path, flags, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_OPEN) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + (*Tfdop)(unsafe.Pointer(op)).Foflag = flags + (*Tfdop)(unsafe.Pointer(op)).Fmode = mode + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_destroy(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + var next, op uintptr + _, _ = next, op + op = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + for op != 0 { + next = (*Tfdop)(unsafe.Pointer(op)).Fnext + Xfree(tls, op) + op = next + } + return 0 +} + +func Xposix_spawn_file_actions_init(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = uintptr(0) + return 0 +} + +func Xposix_spawnattr_destroy(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xposix_spawnattr_getflags(tls *TLS, attr uintptr, flags uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*int16)(unsafe.Pointer(flags)) = int16((*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags) + return 0 +} + +func Xposix_spawnattr_getpgroup(tls *TLS, attr uintptr, pgrp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tpid_t)(unsafe.Pointer(pgrp)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp + return 0 +} + +func Xposix_spawnattr_getsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(def)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def + return 0 +} + +func Xposix_spawnattr_getsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(mask)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask + return 0 +} + +func Xposix_spawnattr_init(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tposix_spawnattr_t)(unsafe.Pointer(attr)) = Tposix_spawnattr_t{} + return 0 +} + +func Xposix_spawnattr_getschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_getschedpolicy(tls *TLS, attr uintptr, policy uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedpolicy(tls *TLS, attr uintptr, policy int32) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setflags(tls *TLS, attr uintptr, flags int16) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var all_flags uint32 + _ = all_flags + all_flags = uint32(Int32FromInt32(POSIX_SPAWN_RESETIDS) | Int32FromInt32(POSIX_SPAWN_SETPGROUP) | Int32FromInt32(POSIX_SPAWN_SETSIGDEF) | Int32FromInt32(POSIX_SPAWN_SETSIGMASK) | Int32FromInt32(POSIX_SPAWN_SETSCHEDPARAM) | Int32FromInt32(POSIX_SPAWN_SETSCHEDULER) | Int32FromInt32(POSIX_SPAWN_USEVFORK) | Int32FromInt32(POSIX_SPAWN_SETSID)) + if uint32(flags) & ^all_flags != 0 { + return int32(EINVAL) + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags = int32(flags) + return 0 +} + +func Xposix_spawnattr_setpgroup(tls *TLS, attr uintptr, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp = pgrp + return 0 +} + +func Xposix_spawnattr_setsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def = *(*Tsigset_t)(unsafe.Pointer(def)) + return 0 +} + +func Xposix_spawnattr_setsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask = *(*Tsigset_t)(unsafe.Pointer(mask)) + return 0 +} + +func Xvfork(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* vfork syscall cannot be made from C code */ + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_fork))))) +} + +func Xwait(tls *TLS, status uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwaitpid(tls, -Int32FromInt32(1), status, 0) +} + +func Xwaitid(tls *TLS, type1 Tidtype_t, id Tid_t, info uintptr, options int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v id=%v info=%v options=%v, (%v:)", tls, type1, id, info, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_waitid), int64(type1), int64(id), int64(info), int64(options), int64(Int32FromInt32(0)), 0)))) +} + +func Xwaitpid(tls *TLS, pid Tpid_t, status uintptr, options int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v, (%v:)", tls, pid, status, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(Int32FromInt32(0)), 0, 0)))) +} + +const BRACKET = -3 +const END = 0 +const FNM_CASEFOLD = 16 +const FNM_FILE_NAME = 1 +const FNM_LEADING_DIR = 8 +const FNM_NOESCAPE = 2 +const FNM_NOMATCH = 1 +const FNM_NOSYS = -1 +const FNM_PATHNAME = 1 +const FNM_PERIOD = 4 +const QUESTION = -4 +const STAR = -5 +const UNMATCHABLE = -2 + +func _str_next(tls *TLS, str uintptr, n Tsize_t, step uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k int32 + var _ /* wc at bp+0 */ Twchar_t + _ = k + if !(n != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return 0 + } + if uint32(*(*uint8)(unsafe.Pointer(str))) >= uint32(128) { + k = Xmbtowc(tls, bp, str, n) + if k < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return -int32(1) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32(*(*uint8)(unsafe.Pointer(str))) +} + +func _pat_next(tls *TLS, pat uintptr, m Tsize_t, step uintptr, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var esc, k1, z int32 + var k Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _ = esc, k, k1, z + esc = 0 + if !(m != 0) || !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return END + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('\\') && *(*uint8)(unsafe.Pointer(pat + 1)) != 0 && !(flags&Int32FromInt32(FNM_NOESCAPE) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(2) + pat++ + esc = int32(1) + goto escaped + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('[') { + k = uint64(1) + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('!') { + k++ + } + } + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32(']') { + k++ + } + } + for { + if !(k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + break + } + if k+uint64(1) < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1)))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('=')) { + z = int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) + k += uint64(2) + if k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 { + k++ + } + for k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k-uint64(1))))) != z || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + break + } + } + goto _1 + _1: + ; + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32('[') + } + *(*Tsize_t)(unsafe.Pointer(step)) = k + uint64(1) + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('*') { + return -int32(5) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('?') { + return -int32(4) + } + goto escaped +escaped: + ; + if uint32(*(*uint8)(unsafe.Pointer(pat))) >= uint32(128) { + k1 = Xmbtowc(tls, bp, pat, m) + if k1 < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return -int32(2) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k1 + esc) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + return int32(*(*uint8)(unsafe.Pointer(pat))) +} + +func _casefold(tls *TLS, k int32) (r int32) { + var c int32 + var v1 uint32 + _, _ = c, v1 + c = int32(Xtowupper(tls, uint32(k))) + if c == k { + v1 = Xtowlower(tls, uint32(k)) + } else { + v1 = uint32(c) + } + return int32(v1) +} + +func _match_bracket(tls *TLS, p uintptr, k int32, kfold int32) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var inv, l, l1, z int32 + var p0 uintptr + var _ /* buf at bp+8 */ [16]uint8 + var _ /* wc at bp+0 */ Twchar_t + var _ /* wc2 at bp+4 */ Twchar_t + _, _, _, _, _ = inv, l, l1, p0, z + inv = 0 + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(p))) == int32('!') { + inv = int32(1) + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + if k == int32(']') { + return BoolInt32(!(inv != 0)) + } + p++ + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + if k == int32('-') { + return BoolInt32(!(inv != 0)) + } + p++ + } + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + l = Xmbtowc(tls, bp+4, p+uintptr(1), uint64(4)) + if l < 0 { + return 0 + } + if *(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4)) { + if uint32(k)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) || uint32(kfold)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) { + return BoolInt32(!(inv != 0)) + } + } + p += uintptr(l - int32(1)) + goto _1 + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('=')) { + p0 = p + uintptr(2) + z = int32(*(*uint8)(unsafe.Pointer(p + 1))) + p += uintptr(3) + for int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) != z || int32(*(*uint8)(unsafe.Pointer(p))) != int32(']') { + p++ + } + if z == int32(':') && int64(p-uintptr(1))-int64(p0) < int64(16) { + Xmemcpy(tls, bp+8, p0, uint64(int64(p-uintptr(1))-int64(p0))) + (*(*[16]uint8)(unsafe.Pointer(bp + 8)))[int64(p-uintptr(1))-int64(p0)] = uint8(0) + if Xiswctype(tls, uint32(k), Xwctype(tls, bp+8)) != 0 || Xiswctype(tls, uint32(kfold), Xwctype(tls, bp+8)) != 0 { + return BoolInt32(!(inv != 0)) + } + } + goto _1 + } + if uint32(*(*uint8)(unsafe.Pointer(p))) < uint32(128) { + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p))) + } else { + l1 = Xmbtowc(tls, bp, p, uint64(4)) + if l1 < 0 { + return 0 + } + p += uintptr(l1 - int32(1)) + } + if *(*Twchar_t)(unsafe.Pointer(bp)) == k || *(*Twchar_t)(unsafe.Pointer(bp)) == kfold { + return BoolInt32(!(inv != 0)) + } + goto _1 + _1: + ; + p++ + } + return inv +} + +func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, k, kfold, v12, v13, v15, v2, v3, v4, v8 int32 + var endpat, endstr, p, ptail, s, stail, v10, v6 uintptr + var tailcnt Tsize_t + var v9 bool + var _ /* pinc at bp+0 */ Tsize_t + var _ /* sinc at bp+8 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, endpat, endstr, k, kfold, p, ptail, s, stail, tailcnt, v10, v12, v13, v15, v2, v3, v4, v6, v8, v9 + tailcnt = uint64(0) + if flags&int32(FNM_PERIOD) != 0 { + if int32(*(*uint8)(unsafe.Pointer(str))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(pat))) != int32('.') { + return int32(FNM_NOMATCH) + } + } + for { + v2 = _pat_next(tls, pat, m, bp, flags) + c = v2 + switch v2 { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + pat++ + m-- + default: + k = _str_next(tls, str, n, bp+8) + if k <= 0 { + if c == END { + v3 = 0 + } else { + v3 = int32(FNM_NOMATCH) + } + return v3 + } + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + n -= *(*Tsize_t)(unsafe.Pointer(bp + 8)) + if flags&int32(FNM_CASEFOLD) != 0 { + v4 = _casefold(tls, k) + } else { + v4 = k + } + kfold = v4 + if c == -int32(3) { + if !(_match_bracket(tls, pat, k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + pat += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + m -= *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + } + break + goto _1 + _1: + } + /* Compute real pat length if it was initially unknown/-1 */ + m = Xstrnlen(tls, pat, m) + endpat = pat + uintptr(m) + /* Find the last * in pat and count chars needed after it */ + v6 = pat + ptail = v6 + p = v6 + for { + if !(p < endpat) { + break + } + switch _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + tailcnt = uint64(0) + ptail = p + uintptr(1) + default: + tailcnt++ + break + } + goto _5 + _5: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + /* Past this point we need not check for UNMATCHABLE in pat, + * because all of pat has already been parsed once. */ + /* Compute real str length if it was initially unknown/-1 */ + n = Xstrnlen(tls, str, n) + endstr = str + uintptr(n) + if n < tailcnt { + return int32(FNM_NOMATCH) + } + /* Find the final tailcnt chars of str, accounting for UTF-8. + * On illegal sequences we may get it wrong, but in that case + * we necessarily have a matching failure anyway. */ + s = endstr + for { + if !(s > str && tailcnt != 0) { + break + } + if v9 = uint32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v8 = int32(4) + } else { + v8 = int32(1) + } + } + if v9 || v8 == int32(1) { + s-- + } else { + for { + s-- + v10 = s + if !(uint32(*(*uint8)(unsafe.Pointer(v10)))-uint32(0x80) < uint32(0x40) && s > str) { + break + } + } + } + goto _7 + _7: + ; + tailcnt-- + } + if tailcnt != 0 { + return int32(FNM_NOMATCH) + } + stail = s + /* Check that the pat and str tails match */ + p = ptail + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + v12 = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + k = v12 + if v12 <= 0 { + if c != END { + return int32(FNM_NOMATCH) + } + break + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + if flags&int32(FNM_CASEFOLD) != 0 { + v13 = _casefold(tls, k) + } else { + v13 = k + } + kfold = v13 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + goto _11 + _11: + } + /* We're all done with the tails now, so throw them out */ + endstr = stail + endpat = ptail + /* Match pattern components until there are none left */ + for pat < endpat { + p = pat + s = str + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + /* Encountering * completes/commits a component */ + if c == -int32(5) { + pat = p + str = s + break + } + k = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + if !(k != 0) { + return int32(FNM_NOMATCH) + } + if flags&int32(FNM_CASEFOLD) != 0 { + v15 = _casefold(tls, k) + } else { + v15 = k + } + kfold = v15 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + break + } + } else { + if c != -int32(4) && k != c && kfold != c { + break + } + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + goto _14 + _14: + } + if c == -int32(5) { + continue + } + /* If we failed, advance str, by 1 char if it's a valid + * char, or past all invalid bytes otherwise. */ + k = _str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) + if k > 0 { + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + } else { + str++ + for { + if !(_str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) < 0) { + break + } + goto _16 + _16: + ; + str++ + } + } + } + return 0 +} + +func Xfnmatch(tls *TLS, pat uintptr, str uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v str=%v flags=%v, (%v:)", tls, pat, str, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, v4 int32 + var p, s uintptr + var _ /* inc at bp+0 */ Tsize_t + _, _, _, _ = c, p, s, v4 + if flags&int32(FNM_PATHNAME) != 0 { + for { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != int32('/')) { + break + } + goto _2 + _2: + ; + s++ + } + p = pat + for { + v4 = _pat_next(tls, p, uint64(-Int32FromInt32(1)), bp, flags) + c = v4 + if !(v4 != END && c != int32('/')) { + break + } + goto _3 + _3: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + if c != int32(*(*uint8)(unsafe.Pointer(s))) && (!(*(*uint8)(unsafe.Pointer(s)) != 0) || !(flags&Int32FromInt32(FNM_LEADING_DIR) != 0)) { + return int32(FNM_NOMATCH) + } + if _fnmatch_internal(tls, pat, uint64(int64(p)-int64(pat)), str, uint64(int64(s)-int64(str)), flags) != 0 { + return int32(FNM_NOMATCH) + } + if !(c != 0) { + return 0 + } + str = s + uintptr(1) + pat = p + uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + goto _1 + _1: + } + } else { + if flags&int32(FNM_LEADING_DIR) != 0 { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('/') { + goto _5 + } + if !(_fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(int64(s)-int64(str)), flags) != 0) { + return 0 + } + goto _5 + _5: + ; + s++ + } + } + } + return _fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(-Int32FromInt32(1)), flags) +} + +const GLOB_ABORTED = 2 +const GLOB_APPEND = 32 +const GLOB_DOOFFS = 8 +const GLOB_ERR = 1 +const GLOB_MARK = 2 +const GLOB_NOCHECK = 16 +const GLOB_NOESCAPE = 64 +const GLOB_NOMATCH = 3 +const GLOB_NOSORT = 4 +const GLOB_NOSPACE = 1 +const GLOB_NOSYS = 4 +const GLOB_PERIOD = 128 +const GLOB_TILDE = 4096 +const GLOB_TILDE_CHECK = 16384 + +type Tglob_t = struct { + Fgl_pathc Tsize_t + Fgl_pathv uintptr + Fgl_offs Tsize_t + F__dummy1 int32 + F__dummy2 [5]uintptr +} + +type Tmatch = struct { + Fnext uintptr +} + +func _append(tls *TLS, tail uintptr, name uintptr, len1 Tsize_t, mark int32) (r int32) { + var new1 uintptr + _ = new1 + new1 = Xmalloc(tls, uint64(8)+len1+uint64(2)) + if !(new1 != 0) { + return -int32(1) + } + (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(tail)))).Fnext = new1 + (*Tmatch)(unsafe.Pointer(new1)).Fnext = UintptrFromInt32(0) + Xmemcpy(tls, new1+8, name, len1+uint64(1)) + if mark != 0 && len1 != 0 && int32(*(*uint8)(unsafe.Pointer(name + uintptr(len1-uint64(1))))) != int32('/') { + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1))) = uint8('/') + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1+uint64(1)))) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(tail)) = new1 + return 0 +} + +func _do_glob(tls *TLS, buf uintptr, pos Tsize_t, type1 int32, pat uintptr, flags int32, errfunc uintptr, tail uintptr) (r1 int32) { + bp := tls.Alloc(144) + defer tls.Free(144) + var de, dir, p, p2, v11, v2, v7, v8 uintptr + var fnm_flags, in_bracket, old_errno, overflow, r, readerr, v10, v9 int32 + var i, j, v4, v5 Tptrdiff_t + var l, v1 Tsize_t + var saved_sep uint8 + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = de, dir, fnm_flags, i, in_bracket, j, l, old_errno, overflow, p, p2, r, readerr, saved_sep, v1, v10, v11, v2, v4, v5, v7, v8, v9 + /* If GLOB_MARK is unused, we don't care about type. */ + if !(type1 != 0) && !(flags&Int32FromInt32(GLOB_MARK) != 0) { + type1 = int32(DT_REG) + } + /* Special-case the remaining pattern being all slashes, in + * which case we can use caller-passed type if it's a dir. */ + if *(*uint8)(unsafe.Pointer(pat)) != 0 && type1 != int32(DT_DIR) { + type1 = 0 + } + for pos+uint64(1) < uint64(PATH_MAX) && int32(*(*uint8)(unsafe.Pointer(pat))) == int32('/') { + v1 = pos + pos++ + v2 = pat + pat++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + } + /* Consume maximal [escaped-]literal prefix of pattern, copying + * and un-escaping it to the running buffer as we go. */ + i = 0 + j = 0 + in_bracket = 0 + overflow = 0 + for { + if !(int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('*') && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('?') && (!(in_bracket != 0) || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32(']'))) { + break + } + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i))) != 0) { + if overflow != 0 { + return 0 + } + pat += uintptr(i) + pos += uint64(j) + v4 = Int64FromInt32(0) + j = v4 + i = v4 + break + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('[') { + in_bracket = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('\\') && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + /* Backslashes inside a bracket are (at least by + * our interpretation) non-special, so if next + * char is ']' we have a complete expression. */ + if in_bracket != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1))))) == int32(']') { + break + } + /* Unpaired final backslash never matches. */ + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1)))) != 0) { + return 0 + } + i++ + } + } + } + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('/') { + if overflow != 0 { + return 0 + } + in_bracket = 0 + pat += uintptr(i + int64(1)) + i = int64(-int32(1)) + pos += uint64(j + int64(1)) + j = int64(-int32(1)) + } + /* Only store a character if it fits in the buffer, but if + * a potential bracket expression is open, the overflow + * must be remembered and handled later only if the bracket + * is unterminated (and thereby a literal), so as not to + * disallow long bracket expressions with short matches. */ + if pos+uint64(j+Int64FromInt32(1)) < uint64(PATH_MAX) { + v5 = j + j++ + *(*uint8)(unsafe.Pointer(buf + uintptr(pos+uint64(v5)))) = *(*uint8)(unsafe.Pointer(pat + uintptr(i))) + } else { + if in_bracket != 0 { + overflow = int32(1) + } else { + return 0 + } + } + /* If we consume any new components, the caller-passed type + * or dummy type from above is no longer valid. */ + type1 = 0 + goto _3 + _3: + ; + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(pos))) = uint8(0) + if !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + if flags&int32(GLOB_MARK) != 0 && (!(type1 != 0) || type1 == int32(DT_LNK)) && !(Xstat(tls, buf, bp) != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + type1 = int32(DT_DIR) + } else { + type1 = int32(DT_REG) + } + } + if !(type1 != 0) && Xlstat(tls, buf, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + return 0 + } + if _append(tls, tail, buf, pos, BoolInt32(flags&int32(GLOB_MARK) != 0 && type1 == int32(DT_DIR))) != 0 { + return int32(GLOB_NOSPACE) + } + return 0 + } + p2 = Xstrchr(tls, pat, int32('/')) + saved_sep = uint8('/') + /* Check if the '/' was escaped and, if so, remove the escape char + * so that it will not be unpaired when passed to fnmatch. */ + if p2 != 0 && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + p = p2 + for { + if !(p > pat && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('\\')) { + break + } + goto _6 + _6: + ; + p-- + } + if (int64(p2)-int64(p))%int64(2) != 0 { + p2-- + saved_sep = uint8('\\') + } + } + if pos != 0 { + v7 = buf + } else { + v7 = __ccgo_ts + 606 + } + dir = Xopendir(tls, v7) + if !(dir != 0) { + if (*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0 { + return int32(GLOB_ABORTED) + } + return 0 + } + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v8 = Xreaddir(tls, dir) + de = v8 + if !(v8 != 0) { + break + } + /* Quickly skip non-directories when there's pattern left. */ + if p2 != 0 && (*Tdirent)(unsafe.Pointer(de)).Fd_type != 0 && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_DIR) && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_LNK) { + continue + } + l = Xstrlen(tls, de+19) + if l >= uint64(PATH_MAX)-pos { + continue + } + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = uint8(0) + } + if flags&int32(GLOB_NOESCAPE) != 0 { + v9 = int32(FNM_NOESCAPE) + } else { + v9 = 0 + } + if !(flags&Int32FromInt32(GLOB_PERIOD) != 0) { + v10 = int32(FNM_PERIOD) + } else { + v10 = 0 + } + fnm_flags = v9 | v10 + if Xfnmatch(tls, pat, de+19, fnm_flags) != 0 { + continue + } + /* With GLOB_PERIOD, don't allow matching . or .. unless + * fnmatch would match them with FNM_PERIOD rules in effect. */ + if p2 != 0 && flags&int32(GLOB_PERIOD) != 0 && int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) && Xfnmatch(tls, pat, de+19, fnm_flags|int32(FNM_PERIOD)) != 0 { + continue + } + Xmemcpy(tls, buf+uintptr(pos), de+19, l+uint64(1)) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + if p2 != 0 { + v11 = p2 + } else { + v11 = __ccgo_ts + } + r = _do_glob(tls, buf, pos+l, int32((*Tdirent)(unsafe.Pointer(de)).Fd_type), v11, flags, errfunc, tail) + if r != 0 { + Xclosedir(tls, dir) + return r + } + } + readerr = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + Xclosedir(tls, dir) + if readerr != 0 && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return 0 +} + +func _ignore_err(tls *TLS, path uintptr, err int32) (r int32) { + return 0 +} + +func _freelist(tls *TLS, head uintptr) { + var match, next uintptr + _, _ = match, next + match = (*Tmatch)(unsafe.Pointer(head)).Fnext + for { + if !(match != 0) { + break + } + next = (*Tmatch)(unsafe.Pointer(match)).Fnext + Xfree(tls, match) + goto _1 + _1: + ; + match = next + } +} + +func _sort(tls *TLS, a uintptr, b uintptr) (r int32) { + return Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(a)), *(*uintptr)(unsafe.Pointer(b))) +} + +func _expand_tilde(tls *TLS, pat uintptr, buf uintptr, pos uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var delim, v1, v12 uint8 + var home, name_end, p, v11, v2, v3 uintptr + var i, v10, v13 Tsize_t + var v4 int32 + var _ /* pw at bp+0 */ Tpasswd + var _ /* res at bp+48 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = delim, home, i, name_end, p, v1, v10, v11, v12, v13, v2, v3, v4 + p = *(*uintptr)(unsafe.Pointer(pat)) + uintptr(1) + i = uint64(0) + name_end = X__strchrnul(tls, p, int32('/')) + v1 = *(*uint8)(unsafe.Pointer(name_end)) + delim = v1 + if v1 != 0 { + v2 = name_end + name_end++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(pat)) = name_end + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v3 = UintptrFromInt32(0) + } else { + v3 = Xgetenv(tls, __ccgo_ts+1437) + } + home = v3 + if !(home != 0) { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v4 = Xgetpwnam_r(tls, p, bp, buf, uint64(PATH_MAX), bp+48) + } else { + v4 = Xgetpwuid_r(tls, Xgetuid(tls), bp, buf, uint64(PATH_MAX), bp+48) + } + switch v4 { + case int32(ENOMEM): + goto _5 + default: + goto _6 + case 0: + goto _7 + } + goto _8 + _5: + ; + return int32(GLOB_NOSPACE) + _7: + ; + if !!(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + goto _9 + } + _6: + ; + return int32(GLOB_NOMATCH) + _9: + ; + _8: + ; + home = (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_dir + } + for i < uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(2)) && *(*uint8)(unsafe.Pointer(home)) != 0 { + v10 = i + i++ + v11 = home + home++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v10))) = *(*uint8)(unsafe.Pointer(v11)) + } + if *(*uint8)(unsafe.Pointer(home)) != 0 { + return int32(GLOB_NOMATCH) + } + v12 = delim + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v12 + if v12 != 0 { + i++ + v13 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v13))) = uint8(0) + } + *(*Tsize_t)(unsafe.Pointer(pos)) = i + return 0 +} + +func Xglob(tls *TLS, pat uintptr, flags int32, errfunc uintptr, g uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v flags=%v errfunc=%v g=%v, (%v:)", tls, pat, flags, errfunc, g, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4128) + defer tls.Free(4128) + var cnt, i, offs Tsize_t + var error1 int32 + var p, pathv uintptr + var v1 uint64 + var _ /* buf at bp+16 */ [4096]uint8 + var _ /* head at bp+0 */ Tmatch + var _ /* pos at bp+4112 */ Tsize_t + var _ /* s at bp+4120 */ uintptr + var _ /* tail at bp+8 */ uintptr + _, _, _, _, _, _, _ = cnt, error1, i, offs, p, pathv, v1 + *(*Tmatch)(unsafe.Pointer(bp)) = struct { + Fnext uintptr + }{} + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if flags&int32(GLOB_DOOFFS) != 0 { + v1 = (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs + } else { + v1 = uint64(0) + } + offs = v1 + error1 = 0 + if !(errfunc != 0) { + errfunc = __ccgo_fp(_ignore_err) + } + if !(flags&Int32FromInt32(GLOB_APPEND) != 0) { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs = offs + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) + } + if *(*uint8)(unsafe.Pointer(pat)) != 0 { + p = Xstrdup(tls, pat) + if !(p != 0) { + return int32(GLOB_NOSPACE) + } + (*(*[4096]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4112)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 4120)) = p + if flags&(Int32FromInt32(GLOB_TILDE)|Int32FromInt32(GLOB_TILDE_CHECK)) != 0 && int32(*(*uint8)(unsafe.Pointer(p))) == int32('~') { + error1 = _expand_tilde(tls, bp+4120, bp+16, bp+4112) + } + if !(error1 != 0) { + error1 = _do_glob(tls, bp+16, *(*Tsize_t)(unsafe.Pointer(bp + 4112)), 0, *(*uintptr)(unsafe.Pointer(bp + 4120)), flags, errfunc, bp+8) + } + Xfree(tls, p) + } + if error1 == int32(GLOB_NOSPACE) { + _freelist(tls, bp) + return error1 + } + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(*(*uintptr)(unsafe.Pointer(bp + 8)) != 0) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + cnt++ + } + if !(cnt != 0) { + if flags&int32(GLOB_NOCHECK) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if _append(tls, bp+8, pat, Xstrlen(tls, pat), 0) != 0 { + return int32(GLOB_NOSPACE) + } + cnt++ + } else { + if !(error1 != 0) { + return int32(GLOB_NOMATCH) + } + } + } + if flags&int32(GLOB_APPEND) != 0 { + pathv = Xrealloc(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv, (offs+(*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc+cnt+uint64(1))*uint64(8)) + if !(pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = pathv + offs += (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc + } else { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = Xmalloc(tls, (offs+cnt+uint64(1))*uint64(8)) + if !((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + i = uint64(0) + for { + if !(i < offs) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(i)*8)) = UintptrFromInt32(0) + goto _3 + _3: + ; + i++ + } + } + i = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = *(*uintptr)(unsafe.Pointer(bp + 8)) + 8 + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + i++ + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = UintptrFromInt32(0) + *(*Tsize_t)(unsafe.Pointer(g)) += cnt + if !(flags&Int32FromInt32(GLOB_NOSORT) != 0) { + Xqsort(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv+uintptr(offs)*8, cnt, uint64(8), __ccgo_fp(_sort)) + } + return error1 +} + +func Xglobfree(tls *TLS, g uintptr) { + if __ccgo_strace { + trc("tls=%v g=%v, (%v:)", tls, g, origin(2)) + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr((*Tglob_t)(unsafe.Pointer(g)).Fgl_offs+i)*8))-uintptr(uint64(UintptrFromInt32(0)+8))) + goto _1 + _1: + ; + i++ + } + Xfree(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) +} + +const ASSERTION = -2 +const ASSERT_AT_BOL = 1 +const ASSERT_AT_BOW = 16 +const ASSERT_AT_EOL = 2 +const ASSERT_AT_EOW = 32 +const ASSERT_AT_WB = 64 +const ASSERT_AT_WB_NEG = 128 +const ASSERT_BACKREF = 256 +const ASSERT_CHAR_CLASS = 4 +const ASSERT_CHAR_CLASS_NEG = 8 +const ASSERT_LAST = 256 +const BACKREF = -4 +const COPY_MAXIMIZE_FIRST_TAG = 2 +const COPY_REMOVE_TAGS = 1 +const EMPTY1 = -1 +const MAX_NEG_CLASSES = 64 +const REG_BADBR = 10 +const REG_BADPAT = 2 +const REG_BADRPT = 13 +const REG_EBRACE = 9 +const REG_EBRACK = 7 +const REG_ECOLLATE = 3 +const REG_ECTYPE = 4 +const REG_EESCAPE = 5 +const REG_ENOSYS = -1 +const REG_EPAREN = 8 +const REG_ERANGE = 11 +const REG_ESPACE = 12 +const REG_ESUBREG = 6 +const REG_EXTENDED = 1 +const REG_ICASE = 2 +const REG_NEWLINE = 4 +const REG_NOMATCH = 1 +const REG_NOSUB = 8 +const REG_NOTBOL = 1 +const REG_NOTEOL = 2 +const REG_OK = 0 +const TAG = -3 +const TRE_CHAR_MAX = 1114111 +const TRE_MEM_BLOCK_SIZE = 1024 +const TRE_REGEX_T_FIELD = 0 +const tre_ctype = 0 +const tre_isalnum = 0 +const tre_isalpha = 0 +const tre_isblank = 0 +const tre_iscntrl = 0 +const tre_isctype = 0 +const tre_isdigit = 0 +const tre_isgraph = 0 +const tre_islower = 0 +const tre_isprint = 0 +const tre_ispunct = 0 +const tre_isspace = 0 +const tre_isupper = 0 +const tre_isxdigit = 0 +const tre_mem_alloc_impl = 0 +const tre_mem_destroy = 0 +const tre_mem_new_impl = 0 +const tre_strlen = 0 +const tre_tolower = 0 +const tre_toupper = 0 +const xcalloc = 0 +const xfree = 0 +const xmalloc = 0 +const xrealloc = 0 + +type Tregoff_t = int64 + +type Tregex_t = struct { + Fre_nsub Tsize_t + F__opaque uintptr + F__padding [4]uintptr + F__nsub2 Tsize_t + F__padding2 uint8 +} + +type Tre_pattern_buffer = Tregex_t + +type Tregmatch_t = struct { + Frm_so Tregoff_t + Frm_eo Tregoff_t +} + +type Treg_errcode_t = int32 + +type Ttre_char_t = int32 + +type Ttre_cint_t = uint32 + +type Ttre_ctype_t = uint64 + +type Ttre_tnfa_transition_t = struct { + Fcode_min Ttre_cint_t + Fcode_max Ttre_cint_t + Fstate uintptr + Fstate_id int32 + Ftags uintptr + Fassertions int32 + Fu struct { + Fbackref [0]int32 + Fclass Ttre_ctype_t + } + Fneg_classes uintptr +} + +type Ttnfa_transition = Ttre_tnfa_transition_t + +type Ttre_tag_direction_t = int32 + +const _TRE_TAG_MINIMIZE = 0 +const _TRE_TAG_MAXIMIZE = 1 + +type Ttre_submatch_data = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_submatch_data_t = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_tnfa_t = struct { + Ftransitions uintptr + Fnum_transitions uint32 + Finitial uintptr + Ffinal uintptr + Fsubmatch_data uintptr + Ffirstpos_chars uintptr + Ffirst_char int32 + Fnum_submatches uint32 + Ftag_directions uintptr + Fminimal_tags uintptr + Fnum_tags int32 + Fnum_minimals int32 + Fend_tag int32 + Fnum_states int32 + Fcflags int32 + Fhave_backrefs int32 + Fhave_approx int32 +} + +type Ttnfa = Ttre_tnfa_t + +type Ttre_list_t = struct { + Fdata uintptr + Fnext uintptr +} + +type Ttre_list = Ttre_list_t + +type Ttre_mem_t = uintptr + +type Ttre_mem_struct = struct { + Fblocks uintptr + Fcurrent uintptr + Fptr uintptr + Fn Tsize_t + Ffailed int32 + Fprovided uintptr +} + +/*********************************************************************** + from tre-compile.h +***********************************************************************/ + +type Ttre_pos_and_tags_t = struct { + Fposition int32 + Fcode_min int32 + Fcode_max int32 + Ftags uintptr + Fassertions int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr + Fbackref int32 +} + +/*********************************************************************** + from tre-ast.c and tre-ast.h +***********************************************************************/ + +// C documentation +// +// /* The different AST node types. */ +type Ttre_ast_type_t = int32 + +const _LITERAL = 0 +const _CATENATION = 1 +const _ITERATION = 2 +const _UNION = 3 + +/* Special subtypes of TRE_LITERAL. */ + +// C documentation +// +// /* A generic AST node. All AST nodes consist of this node on the top +// level with `obj' pointing to the actual content. */ +type Ttre_ast_node_t = struct { + Ftype1 Ttre_ast_type_t + Fobj uintptr + Fnullable int32 + Fsubmatch_id int32 + Fnum_submatches int32 + Fnum_tags int32 + Ffirstpos uintptr + Flastpos uintptr +} + +// C documentation +// +// /* A "literal" node. These are created for assertions, back references, +// tags, matching parameter settings, and all expressions that match one +// character. */ +type Ttre_literal_t = struct { + Fcode_min int64 + Fcode_max int64 + Fposition int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr +} + +// C documentation +// +// /* A "catenation" node. These are created when two regexps are concatenated. +// If there are more than one subexpressions in sequence, the `left' part +// holds all but the last, and `right' part holds the last subexpression +// (catenation is left associative). */ +type Ttre_catenation_t = struct { + Fleft uintptr + Fright uintptr +} + +// C documentation +// +// /* An "iteration" node. These are created for the "*", "+", "?", and "{m,n}" +// operators. */ +type Ttre_iteration_t = struct { + Farg uintptr + Fmin int32 + Fmax int32 + F__ccgo16 uint8 +} + +// C documentation +// +// /* An "union" node. These are created for the "|" operator. */ +type Ttre_union_t = struct { + Fleft uintptr + Fright uintptr +} + +func _tre_ast_new_node(tls *TLS, mem Ttre_mem_t, type1 int32, obj uintptr) (r uintptr) { + var node uintptr + _ = node + node = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(48)) + if !(node != 0) || !(obj != 0) { + return uintptr(0) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = obj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = type1 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = -int32(1) + return node +} + +func _tre_ast_new_literal(tls *TLS, mem Ttre_mem_t, code_min int32, code_max int32, position int32) (r uintptr) { + var lit, node uintptr + _, _ = lit, node + lit = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(40)) + node = _tre_ast_new_node(tls, mem, int32(_LITERAL), lit) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(code_min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(code_max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = position + return node +} + +func _tre_ast_new_iter(tls *TLS, mem Ttre_mem_t, arg uintptr, min int32, max int32, minimal int32) (r uintptr) { + var iter, node uintptr + _, _ = iter, node + iter = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(24)) + node = _tre_ast_new_node(tls, mem, int32(_ITERATION), iter) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg = arg + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin = min + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax = max + SetBitFieldPtr8Uint32(iter+16, uint32(minimal), 0, 0x1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(arg)).Fnum_submatches + return node +} + +func _tre_ast_new_union(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var node, un uintptr + _, _ = node, un + if !(left != 0) { + return right + } + un = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_UNION), un) + if !(node != 0) || !(right != 0) { + return uintptr(0) + } + (*Ttre_union_t)(unsafe.Pointer(un)).Fleft = left + (*Ttre_union_t)(unsafe.Pointer(un)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +func _tre_ast_new_catenation(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var cat, node uintptr + _, _ = cat, node + if !(left != 0) { + return right + } + cat = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_CATENATION), cat) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft = left + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_t = struct { + Fsize int32 + Fmax_size int32 + Fincrement int32 + Fptr int32 + Fstack uintptr +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_rec = Ttre_stack_t + +/* Just to save some typing. */ + +type Ttre_stack_item = struct { + Fint_value [0]int32 + Fvoidptr_value uintptr +} + +func _tre_stack_new(tls *TLS, size int32, max_size int32, increment int32) (r uintptr) { + var s uintptr + _ = s + s = Xmalloc(tls, uint64(24)) + if s != UintptrFromInt32(0) { + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = Xmalloc(tls, uint64(8)*uint64(size)) + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack == UintptrFromInt32(0) { + Xfree(tls, s) + return UintptrFromInt32(0) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size = max_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement = increment + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr = 0 + } + return s +} + +func _tre_stack_destroy(tls *TLS, s uintptr) { + Xfree(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack) + Xfree(tls, s) +} + +func _tre_stack_num_objects(tls *TLS, s uintptr) (r int32) { + return (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr +} + +func _tre_stack_push(tls *TLS, s uintptr, value Ttre_stack_item) (r Treg_errcode_t) { + var new_buffer uintptr + var new_size int32 + _, _ = new_buffer, new_size + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr < (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize { + *(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr((*Ttre_stack_t)(unsafe.Pointer(s)).Fptr)*8)) = value + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr++ + } else { + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize >= (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + return int32(REG_ESPACE) + } else { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement + if new_size > (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size + } + new_buffer = Xrealloc(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack, uint64(8)*uint64(new_size)) + if new_buffer == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = new_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = new_buffer + _tre_stack_push(tls, s, value) + } + } + return REG_OK +} + +func _tre_stack_push_int(tls *TLS, s uintptr, value int32) (r Treg_errcode_t) { + var item Ttre_stack_item + _ = item + *(*int32)(unsafe.Pointer(&item)) = value + return _tre_stack_push(tls, s, item) +} + +func _tre_stack_push_voidptr(tls *TLS, s uintptr, value uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*uintptr)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_pop_int(tls *TLS, s uintptr) (r int32) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*int32)(unsafe.Pointer(&*(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)))) +} + +func _tre_stack_pop_voidptr(tls *TLS, s uintptr) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*uintptr)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)) +} + +/*********************************************************************** + from tre-parse.c and tre-parse.h +***********************************************************************/ + +// C documentation +// +// /* Parse context. */ +type Ttre_parse_ctx_t = struct { + Fmem Ttre_mem_t + Fstack uintptr + Fn uintptr + Fs uintptr + Fstart uintptr + Fsubmatch_id int32 + Fposition int32 + Fmax_backref int32 + Fcflags int32 +} + +// C documentation +// +// /* Some macros for expanding \w, \s, etc. */ +var _tre_macros = [13]struct { + Fc uint8 + Fexpansion uintptr +}{ + 0: { + Fc: uint8('t'), + Fexpansion: __ccgo_ts + 1442, + }, + 1: { + Fc: uint8('n'), + Fexpansion: __ccgo_ts + 398, + }, + 2: { + Fc: uint8('r'), + Fexpansion: __ccgo_ts + 1444, + }, + 3: { + Fc: uint8('f'), + Fexpansion: __ccgo_ts + 1446, + }, + 4: { + Fc: uint8('a'), + Fexpansion: __ccgo_ts + 1448, + }, + 5: { + Fc: uint8('e'), + Fexpansion: __ccgo_ts + 1450, + }, + 6: { + Fc: uint8('w'), + Fexpansion: __ccgo_ts + 1452, + }, + 7: { + Fc: uint8('W'), + Fexpansion: __ccgo_ts + 1465, + }, + 8: { + Fc: uint8('s'), + Fexpansion: __ccgo_ts + 1479, + }, + 9: { + Fc: uint8('S'), + Fexpansion: __ccgo_ts + 1491, + }, + 10: { + Fc: uint8('d'), + Fexpansion: __ccgo_ts + 1504, + }, + 11: { + Fc: uint8('D'), + Fexpansion: __ccgo_ts + 1516, + }, + 12: {}, +} + +// C documentation +// +// /* Expands a macro delimited by `regex' and `regex_end' to `buf', which +// must have at least `len' items. Sets buf[0] to zero if the there +// is no match in `tre_macros'. */ +func _tre_expand_macro(tls *TLS, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(_tre_macros[i].Fc != 0 && int32(_tre_macros[i].Fc) != int32(*(*uint8)(unsafe.Pointer(s)))) { + break + } + goto _1 + _1: + ; + i++ + } + return _tre_macros[i].Fexpansion +} + +func _tre_compare_lit(tls *TLS, a uintptr, b uintptr) (r int32) { + var la, lb uintptr + _, _ = la, lb + la = a + lb = b + /* assumes the range of valid code_min is < INT_MAX */ + return int32((*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(la)))).Fcode_min - (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(lb)))).Fcode_min) +} + +type Tliterals = struct { + Fmem Ttre_mem_t + Fa uintptr + Flen1 int32 + Fcap1 int32 +} + +func _tre_new_lit(tls *TLS, p uintptr) (r uintptr) { + var a, v2 uintptr + var v1 int32 + _, _, _ = a, v1, v2 + if (*Tliterals)(unsafe.Pointer(p)).Flen1 >= (*Tliterals)(unsafe.Pointer(p)).Fcap1 { + if (*Tliterals)(unsafe.Pointer(p)).Fcap1 >= Int32FromInt32(1)< max { + return int32(REG_ERANGE) + } + s += uintptr(len1) + } + } + if class != 0 && (*Tneg)(unsafe.Pointer(neg)).Fnegate != 0 { + if (*Tneg)(unsafe.Pointer(neg)).Flen1 >= int32(MAX_NEG_CLASSES) { + return int32(REG_ESPACE) + } + v6 = neg + 4 + v5 = *(*int32)(unsafe.Pointer(v6)) + *(*int32)(unsafe.Pointer(v6))++ + *(*Ttre_ctype_t)(unsafe.Pointer(neg + 8 + uintptr(v5)*8)) = class + } else { + lit = _tre_new_lit(tls, ls) + if !(lit != 0) { + return int32(REG_ESPACE) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass = class + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* Add opposite-case codepoints if REG_ICASE is present. + It seems that POSIX requires that bracket negation + should happen before case-folding, but most practical + implementations do it the other way around. Changing + the order would need efficient representation of + case-fold ranges and bracket range sets even with + simple patterns so this is ok for now. */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && !(class != 0) { + if _add_icase_literals(tls, ls, min, max) != 0 { + return int32(REG_ESPACE) + } + } + } + goto _1 + _1: + } + return r +} + +func _parse_bracket(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(544) + defer tls.Free(544) + var err Treg_errcode_t + var i, max, min, negmax, negmin, v1, v3 int32 + var lit, n, nc, node uintptr + var _ /* ls at bp+0 */ Tliterals + var _ /* neg at bp+24 */ Tneg + _, _, _, _, _, _, _, _, _, _, _, _ = err, i, lit, max, min, n, nc, negmax, negmin, node, v1, v3 + node = uintptr(0) + nc = uintptr(0) + (*(*Tliterals)(unsafe.Pointer(bp))).Fmem = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem + (*(*Tliterals)(unsafe.Pointer(bp))).Flen1 = 0 + (*(*Tliterals)(unsafe.Pointer(bp))).Fcap1 = int32(32) + (*(*Tliterals)(unsafe.Pointer(bp))).Fa = Xmalloc(tls, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Fcap1)*uint64(8)) + if !((*(*Tliterals)(unsafe.Pointer(bp))).Fa != 0) { + return int32(REG_ESPACE) + } + (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 = 0 + (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate = BoolInt32(int32(*(*uint8)(unsafe.Pointer(s))) == int32('^')) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + s++ + } + err = _parse_bracket_terms(tls, ctx, s, bp, bp+24) + if err != REG_OK { + goto parse_bracket_done + } + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + /* + * With REG_NEWLINE, POSIX requires that newlines are not matched by + * any form of a non-matching list. + */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + } + /* Sort the array if we need to negate it. */ + Xqsort(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Flen1), uint64(8), __ccgo_fp(_tre_compare_lit)) + /* extra lit for the last negated range */ + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* negated classes */ + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 != 0 { + nc = X__tre_mem_alloc_impl(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, UintptrFromInt32(0), 0, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1+Int32FromInt32(1))*uint64(8)) + if !(nc != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + Xmemcpy(tls, nc, bp+24+8, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*uint64(8)) + *(*Ttre_ctype_t)(unsafe.Pointer(nc + uintptr((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*8)) = uint64(0) + } + } + /* Build a union of the items in the array, negated if necessary. */ + v1 = Int32FromInt32(0) + negmin = v1 + negmax = v1 + i = 0 + for { + if !(i < (*(*Tliterals)(unsafe.Pointer(bp))).Flen1) { + break + } + lit = *(*uintptr)(unsafe.Pointer((*(*Tliterals)(unsafe.Pointer(bp))).Fa + uintptr(i)*8)) + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + if min <= negmin { + /* Overlap. */ + if max+int32(1) >= negmin { + v3 = max + int32(1) + } else { + v3 = negmin + } + negmin = v3 + goto _2 + } + negmax = min - int32(1) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(negmin) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(negmax) + negmin = max + int32(1) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes = nc + n = _tre_ast_new_node(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(_LITERAL), lit) + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, node, n) + if !(node != 0) { + err = int32(REG_ESPACE) + break + } + goto _2 + _2: + ; + i++ + } + goto parse_bracket_done +parse_bracket_done: + ; + Xfree(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return err +} + +func _parse_dup_count(tls *TLS, s uintptr, n uintptr) (r uintptr) { + *(*int32)(unsafe.Pointer(n)) = -int32(1) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return s + } + *(*int32)(unsafe.Pointer(n)) = 0 + for { + *(*int32)(unsafe.Pointer(n)) = int32(10)**(*int32)(unsafe.Pointer(n)) + (int32(*(*uint8)(unsafe.Pointer(s))) - int32('0')) + s++ + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) || *(*int32)(unsafe.Pointer(n)) > int32(RE_DUP_MAX) { + break + } + goto _1 + _1: + } + return s +} + +func _parse_dup(tls *TLS, s uintptr, ere int32, pmin uintptr, pmax uintptr) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v4 uintptr + var v2, v3, v5 bool + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _ = v1, v2, v3, v4, v5 + s = _parse_dup_count(tls, s, bp) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(',') { + s = _parse_dup_count(tls, s+uintptr(1), bp+4) + } else { + *(*int32)(unsafe.Pointer(bp + 4)) = *(*int32)(unsafe.Pointer(bp)) + } + if v3 = *(*int32)(unsafe.Pointer(bp + 4)) < *(*int32)(unsafe.Pointer(bp)) && *(*int32)(unsafe.Pointer(bp + 4)) >= 0 || *(*int32)(unsafe.Pointer(bp + 4)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) < 0; !v3 { + if v2 = !(ere != 0); v2 { + v1 = s + s++ + } + } + if v5 = v3 || v2 && int32(*(*uint8)(unsafe.Pointer(v1))) != int32('\\'); !v5 { + v4 = s + s++ + } + if v5 || int32(*(*uint8)(unsafe.Pointer(v4))) != int32('}') { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(pmin)) = *(*int32)(unsafe.Pointer(bp)) + *(*int32)(unsafe.Pointer(pmax)) = *(*int32)(unsafe.Pointer(bp + 4)) + return s +} + +func _hexval1(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func _marksub(tls *TLS, ctx uintptr, node uintptr, subid int32) (r Treg_errcode_t) { + var n uintptr + _ = n + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + n = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !(n != 0) { + return int32(REG_ESPACE) + } + n = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, n, node) + if !(n != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(n)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches + node = n + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = subid + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return REG_OK +} + +/* +BRE grammar: +Regex = Branch | '^' | '$' | '^$' | '^' Branch | Branch '$' | '^' Branch '$' +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '\(' Branch '\)' | back_ref +Dup = '*' | '\{' Count '\}' | '\{' Count ',\}' | '\{' Count ',' Count '\}' + +(leading ^ and trailing $ in a sub expr may be an anchor or literal as well) + +ERE grammar: +Regex = Branch | Regex '|' Branch +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '(' Regex ')' | '^' | '$' +Dup = '*' | '+' | '?' | '{' Count '}' | '{' Count ',}' | '{' Count ',' Count '}' + +(a*+?, ^*, $+, \X, {, (|a) are unspecified) +*/ + +func _parse_atom(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, ere, i, len1, v, val, v16, v18, v20, v21, v23, v25 int32 + var err Treg_errcode_t + var node, p, tmp1, tmp11, tmp2, tmp21, v14, v17, v19, v22, v24, v26 uintptr + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ere, err, i, len1, node, p, tmp1, tmp11, tmp2, tmp21, v, val, v14, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26 + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('['): + goto _1 + case int32('\\'): + goto _2 + case int32('.'): + goto _3 + case int32('^'): + goto _4 + case int32('$'): + goto _5 + case int32('?'): + goto _6 + case int32('+'): + goto _7 + case int32('{'): + goto _8 + case int32('*'): + goto _9 + case int32('|'): + goto _10 + case 0: + goto _11 + default: + goto _12 + } + goto _13 +_1: + ; + return _parse_bracket(tls, ctx, s+uintptr(1)) +_2: + ; + p = _tre_expand_macro(tls, s+uintptr(1)) + if p != 0 { + /* assume \X expansion is a single atom */ + err = _parse_atom(tls, ctx, p) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + uintptr(2) + return err + } + /* extensions: \b, \B, \<, \>, \xHH \x{HHHH} */ + s++ + v14 = s + switch int32(*(*uint8)(unsafe.Pointer(v14))) { + case 0: + return int32(REG_EESCAPE) + case int32('b'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB), -int32(1)) + case int32('B'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB_NEG), -int32(1)) + case int32('<'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOW), -int32(1)) + case int32('>'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOW), -int32(1)) + case int32('x'): + s++ + v = 0 + len1 = int32(2) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + len1 = int32(8) + s++ + } + i = 0 + for { + if !(i < len1 && v < int32(0x110000)) { + break + } + c = _hexval1(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(i))))) + if c < 0 { + break + } + v = int32(16)*v + c + goto _15 + _15: + ; + i++ + } + s += uintptr(i) + if len1 == int32(8) { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('}') { + return int32(REG_EBRACE) + } + s++ + } + v17 = ctx + 44 + v16 = *(*int32)(unsafe.Pointer(v17)) + *(*int32)(unsafe.Pointer(v17))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, v, v, v16) + s-- + case int32('{'): + fallthrough + case int32('+'): + fallthrough + case int32('?'): + /* extension: treat \+, \? as repetitions in BRE */ + /* reject repetitions after empty expression in BRE */ + if !(ere != 0) { + return int32(REG_BADRPT) + } + fallthrough + case int32('|'): + /* extension: treat \| as alternation in BRE */ + if !(ere != 0) { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + s-- + goto end + } + /* fallthrough */ + fallthrough + default: + if !(ere != 0) && uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('1') < uint32(9) { + /* back reference */ + val = int32(*(*uint8)(unsafe.Pointer(s))) - int32('0') + v19 = ctx + 44 + v18 = *(*int32)(unsafe.Pointer(v19)) + *(*int32)(unsafe.Pointer(v19))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(4), val, v18) + if val >= (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref { + v20 = val + } else { + v20 = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref = v20 + } else { + /* extension: accept unknown escaped char + as a literal */ + goto parse_literal + } + } + s++ + goto _13 +_3: + ; + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + v22 = ctx + 44 + v21 = *(*int32)(unsafe.Pointer(v22)) + *(*int32)(unsafe.Pointer(v22))++ + tmp1 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, Int32FromUint8('\n')-Int32FromInt32(1), v21) + v24 = ctx + 44 + v23 = *(*int32)(unsafe.Pointer(v24)) + *(*int32)(unsafe.Pointer(v24))++ + tmp2 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, Int32FromUint8('\n')+Int32FromInt32(1), int32(TRE_CHAR_MAX), v23) + if tmp1 != 0 && tmp2 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp1, tmp2) + } else { + node = uintptr(0) + } + } else { + v26 = ctx + 44 + v25 = *(*int32)(unsafe.Pointer(v26)) + *(*int32)(unsafe.Pointer(v26))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, int32(TRE_CHAR_MAX), v25) + } + s++ + goto _13 +_4: + ; + /* '^' has a special meaning everywhere in EREs, and at beginning of BRE. */ + if !(ere != 0) && s != (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOL), -int32(1)) + s++ + goto _13 +_5: + ; + /* '$' is special everywhere in EREs, and at the end of a BRE subexpression. */ + if !(ere != 0) && *(*uint8)(unsafe.Pointer(s + 1)) != 0 && (int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('\\') || int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32(')') && int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32('|')) { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOL), -int32(1)) + s++ + goto _13 +_9: + ; +_8: + ; +_7: + ; +_6: + ; + /* reject repetitions after empty expression in ERE */ + if ere != 0 { + return int32(REG_BADRPT) + } +_10: + ; + if !(ere != 0) { + goto parse_literal + } +_11: + ; + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + goto _13 +_12: + ; + goto parse_literal +parse_literal: + ; + len1 = Xmbtowc(tls, bp, s, uint64(-Int32FromInt32(1))) + if len1 < 0 { + return int32(REG_BADPAT) + } + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && (Xiswupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0 || Xiswlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0) { + /* multiple opposite case characters are not supported */ + tmp11 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + tmp21 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + if tmp11 != 0 && tmp21 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp11, tmp21) + } else { + node = uintptr(0) + } + } else { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, *(*Twchar_t)(unsafe.Pointer(bp)), *(*Twchar_t)(unsafe.Pointer(bp)), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + s += uintptr(len1) + goto _13 +_13: + ; + goto end +end: + ; + if !(node != 0) { + return int32(REG_ESPACE) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + return REG_OK +} + +func _tre_parse(tls *TLS, ctx uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, depth, ere, subid, v2, v7 int32 + var err, v1, v4, v5, v6 Treg_errcode_t + var nbranch, nunion, s, stack, v8 uintptr + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, depth, ere, err, nbranch, nunion, s, stack, subid, v1, v2, v4, v5, v6, v7, v8 + nbranch = uintptr(0) + nunion = uintptr(0) + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart + subid = 0 + depth = 0 + stack = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstack + v2 = subid + subid++ + v1 = _tre_stack_push_int(tls, stack, v2) + err = v1 + if v1 != REG_OK { + return err + } + for { + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('(') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + v4 = _tre_stack_push_voidptr(tls, stack, nunion) + err = v4 + if v4 != REG_OK { + return err + } + v5 = _tre_stack_push_voidptr(tls, stack, nbranch) + err = v5 + if v5 != REG_OK { + return err + } + v7 = subid + subid++ + v6 = _tre_stack_push_int(tls, stack, v7) + err = v6 + if v6 != REG_OK { + return err + } + s++ + if !(ere != 0) { + s++ + } + depth++ + v8 = UintptrFromInt32(0) + nunion = v8 + nbranch = v8 + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + goto _3 + } + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + } else { + err = _parse_atom(tls, ctx, s) + if err != REG_OK { + return err + } + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs + } + goto parse_iter + parse_iter: + ; + for { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('\\') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('*') { + if !(ere != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('{') { + break + } + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && ere != 0 { + break + } + /* extension: treat \+, \? as repetitions in BRE */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('{') { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') { + s++ + } + /* handle ^* at the start of a BRE. */ + if !(ere != 0) && s == (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart+uintptr(1) && int32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) == int32('^') { + break + } + /* extension: multiple consecutive *+?{,} is unspecified, + but (a+)+ has to be supported so accepting a++ makes + sense, note however that the RE_DUP_MAX limit can be + circumvented: (a{255}){255} uses a lot of memory.. */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + s = _parse_dup(tls, s+uintptr(1), ere, bp, bp+4) + if !(s != 0) { + return int32(REG_BADBR) + } + } else { + *(*int32)(unsafe.Pointer(bp)) = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = -int32(1) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + *(*int32)(unsafe.Pointer(bp)) = int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('?') { + *(*int32)(unsafe.Pointer(bp + 4)) = int32(1) + } + s++ + } + if *(*int32)(unsafe.Pointer(bp + 4)) == 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + } else { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_iter(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), 0) + } + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + goto _9 + _9: + } + nbranch = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nbranch, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn) + if ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('|') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + /* extension: empty branch is unspecified (), (|a), (a|) + here they are not rejected but match on empty string */ + c = int32(*(*uint8)(unsafe.Pointer(s))) + nunion = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nunion, nbranch) + nbranch = uintptr(0) + if c == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') { + s += uintptr(2) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('|') { + s++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('\\') { + if !(depth != 0) { + return int32(REG_EPAREN) + } + s += uintptr(2) + } else { + if c == int32(')') { + s++ + } + } + depth-- + err = _marksub(tls, ctx, nunion, _tre_stack_pop_int(tls, stack)) + if err != REG_OK { + return err + } + if !(c != 0) && depth < 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fsubmatch_id = subid + return REG_OK + } + if !(c != 0) || depth < 0 { + return int32(REG_EPAREN) + } + nbranch = _tre_stack_pop_voidptr(tls, stack) + nunion = _tre_stack_pop_voidptr(tls, stack) + goto parse_iter + } + } + } + goto _3 + _3: + } + return r +} + +/*********************************************************************** + from tre-compile.c +***********************************************************************/ + +/* + TODO: + - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive + function calls. +*/ + +/* + Algorithms to setup tags so that submatch addressing can be done. +*/ + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the left child a new tag with number `tag_id' to `node' is added, +// and the right child is the old root. */ +func _tre_add_tag_left(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the right child a new tag with number `tag_id' to `node' is added, +// and the left child is the old root. */ +func _tre_add_tag_right(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +type Ttre_addtags_symbol_t = int32 + +const _ADDTAGS_RECURSE = 0 +const _ADDTAGS_AFTER_ITERATION = 1 +const _ADDTAGS_AFTER_UNION_LEFT = 2 +const _ADDTAGS_AFTER_UNION_RIGHT = 3 +const _ADDTAGS_AFTER_CAT_LEFT = 4 +const _ADDTAGS_AFTER_CAT_RIGHT = 5 +const _ADDTAGS_SET_SUBMATCH_END = 6 + +type Ttre_tag_states_t = struct { + Ftag int32 + Fnext_tag int32 +} + +// C documentation +// +// /* Go through `regset' and set submatch data for submatches that are +// using this tag. */ +func _tre_purge_regset(tls *TLS, regset uintptr, tnfa uintptr, tag int32) { + var i, id, start int32 + _, _, _ = i, id, start + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) >= 0) { + break + } + id = *(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) / int32(2) + start = BoolInt32(!(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4))%Int32FromInt32(2) != 0)) + if start != 0 { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Fso_tag = tag + } else { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Feo_tag = tag + } + goto _1 + _1: + ; + i++ + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) +} + +// C documentation +// +// /* Adds tags to appropriate locations in the parse tree in `tree', so that +// subexpressions marked for submatch addressing can be traced. */ +func _tre_add_tags(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr, tnfa uintptr) (r Treg_errcode_t) { + var added_tags, bottom, enter_tag, first_pass, i1, i2, i3, i4, i5, i6, i7, id, id1, left_tag, minimal, minimal_tag, new_tag, next_tag, num_minimals, num_tags, reserved_tag, right_tag, tag, tag_left, tag_right, v22 int32 + var cat, iter, left, left1, left2, lit, node, orig_regset, p, parents, regset, right, right1, right2, saved_states, uni uintptr + var direction Ttre_tag_direction_t + var i uint32 + var status Treg_errcode_t + var symbol Ttre_addtags_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = added_tags, bottom, cat, direction, enter_tag, first_pass, i, i1, i2, i3, i4, i5, i6, i7, id, id1, iter, left, left1, left2, left_tag, lit, minimal, minimal_tag, new_tag, next_tag, node, num_minimals, num_tags, orig_regset, p, parents, regset, reserved_tag, right, right1, right2, right_tag, saved_states, status, symbol, tag, tag_left, tag_right, uni, v22 + status = REG_OK + node = tree /* Tree node we are currently looking at. */ + bottom = _tre_stack_num_objects(tls, stack) + /* True for first pass (counting number of needed tags) */ + first_pass = BoolInt32(mem == UintptrFromInt32(0) || tnfa == UintptrFromInt32(0)) + num_tags = 0 /* Total number of tags. */ + num_minimals = 0 /* Number of special minimal tags. */ + tag = 0 /* The tag that is to be added next. */ + next_tag = int32(1) /* Stack of submatches the current submatch is + contained in. */ + minimal_tag = -int32(1) + direction = int32(_TRE_TAG_MINIMIZE) + if !(first_pass != 0) { + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = 0 + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags)) = -int32(1) + } + regset = Xmalloc(tls, uint64(4)*uint64(((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))*Uint32FromInt32(2))) + if regset == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + orig_regset = regset + parents = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if parents == UintptrFromInt32(0) { + Xfree(tls, regset) + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(parents)) = -int32(1) + saved_states = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if saved_states == UintptrFromInt32(0) { + Xfree(tls, regset) + Xfree(tls, parents) + return int32(REG_ESPACE) + } else { + i = uint32(0) + for { + if !(i <= (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + (*(*Ttre_tag_states_t)(unsafe.Pointer(saved_states + uintptr(i)*8))).Ftag = -int32(1) + goto _1 + _1: + ; + i++ + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + for _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_ADDTAGS_SET_SUBMATCH_END): + goto _2 + case int32(_ADDTAGS_RECURSE): + goto _3 + case int32(_ADDTAGS_AFTER_ITERATION): + goto _4 + case int32(_ADDTAGS_AFTER_CAT_LEFT): + goto _5 + case int32(_ADDTAGS_AFTER_CAT_RIGHT): + goto _6 + case int32(_ADDTAGS_AFTER_UNION_LEFT): + goto _7 + case int32(_ADDTAGS_AFTER_UNION_RIGHT): + goto _8 + default: + goto _9 + } + goto _10 + _2: + ; + id = _tre_stack_pop_int(tls, stack) + /* Add end of this submatch to regset. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) >= 0) { + break + } + goto _11 + _11: + ; + i1++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) = id*int32(2) + int32(1) + *(*int32)(unsafe.Pointer(regset + uintptr(i1+int32(1))*4)) = -int32(1) + /* Pop this submatch from the parents stack. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i1)*4)) >= 0) { + break + } + goto _12 + _12: + ; + i1++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i1-int32(1))*4)) = -int32(1) + goto _10 + _3: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + id1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + /* Add start of this submatch to regset. */ + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) >= 0) { + break + } + goto _13 + _13: + ; + i2++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) = id1 * int32(2) + *(*int32)(unsafe.Pointer(regset + uintptr(i2+int32(1))*4)) = -int32(1) + if !(first_pass != 0) { + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + goto _14 + _14: + ; + i2++ + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = UintptrFromInt32(0) + if i2 > 0 { + p = Xmalloc(tls, uint64(4)*uint64(i2+Int32FromInt32(1))) + if p == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + goto _10 + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = p + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = *(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) + goto _15 + _15: + ; + i2++ + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = -int32(1) + } + } + /* Add end of this submatch to regset after processing this + node. */ + status = _tre_stack_push_int(tls, stack, (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id) + if status != REG_OK { + goto _10 + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_SET_SUBMATCH_END)) + if status != REG_OK { + goto _10 + } + } + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + /* Regset is not empty, so add a tag before the + literal or backref. */ + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i3 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) >= 0) { + break + } + goto _16 + _16: + ; + i3++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = int32(1) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + } else { + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft + right = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright + reserved_tag = -int32(1) + /* After processing right child. */ + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, next_tag+(*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags) + if status != REG_OK { + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags > 0 && (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_tags > 0 { + /* Reserve the next tag to the right child. */ + reserved_tag = next_tag + next_tag++ + } + status = _tre_stack_push_int(tls, stack, reserved_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if first_pass != 0 { + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0)) + if status != REG_OK { + break + } + } else { + status = _tre_stack_push_int(tls, stack, tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if status != REG_OK { + break + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_ITERATION)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + if int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = int32(_TRE_TAG_MAXIMIZE) + } else { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + } + if minimal_tag >= 0 { + i4 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) >= 0) { + break + } + goto _17 + _17: + ; + i4++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + direction = int32(_TRE_TAG_MINIMIZE) + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft + right1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fright + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + left_tag = next_tag + right_tag = next_tag + int32(1) + } else { + left_tag = tag + right_tag = next_tag + } + /* After processing right child. */ + status = _tre_stack_push_int(tls, stack, right_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, left_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, regset) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i5 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) >= 0) { + break + } + goto _18 + _18: + ; + i5++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + /* The next two tags are reserved for markers. */ + next_tag++ + tag = next_tag + next_tag++ + } + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + /* Push this submatch on the parents stack. */ + i6 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) >= 0) { + break + } + goto _19 + _19: + ; + i6++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + *(*int32)(unsafe.Pointer(parents + uintptr(i6+int32(1))*4)) = -int32(1) + } + goto _10 /* end case: ADDTAGS_RECURSE */ + _4: + ; + minimal = 0 + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg)).Fnum_tags + _tre_stack_pop_int(tls, stack) + minimal_tag = -int32(1) + } else { + minimal = _tre_stack_pop_int(tls, stack) + enter_tag = _tre_stack_pop_int(tls, stack) + if minimal != 0 { + minimal_tag = enter_tag + } + } + if !(first_pass != 0) { + if minimal != 0 { + direction = int32(_TRE_TAG_MINIMIZE) + } else { + direction = int32(_TRE_TAG_MAXIMIZE) + } + } + goto _10 + _5: + ; + new_tag = _tre_stack_pop_int(tls, stack) + next_tag = _tre_stack_pop_int(tls, stack) + if new_tag >= 0 { + tag = new_tag + } + goto _10 + _6: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + } + goto _10 + _7: + ; + /* Lift the bottom of the `regset' array so that when processing + the right operand the items currently in the array are + invisible. The original bottom was saved at ADDTAGS_UNION and + will be restored at ADDTAGS_AFTER_UNION_RIGHT below. */ + _21: + ; + if !(*(*int32)(unsafe.Pointer(regset)) >= 0) { + goto _20 + } + regset += 4 + goto _21 + _20: + ; + goto _10 + _8: + ; + left2 = _tre_stack_pop_voidptr(tls, stack) + right2 = _tre_stack_pop_voidptr(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + added_tags = _tre_stack_pop_int(tls, stack) + if first_pass != 0 { + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + v22 = int32(2) + } else { + v22 = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + added_tags + v22 + } + regset = _tre_stack_pop_voidptr(tls, stack) + tag_left = _tre_stack_pop_int(tls, stack) + tag_right = _tre_stack_pop_int(tls, stack) + /* Add tags after both children, the left child gets a smaller + tag than the right child. This guarantees that we prefer + the left child over the right child. */ + /* XXX - This is not always necessary (if the children have + tags which must be seen for every match of that child). */ + /* XXX - Check if this is the only place where tre_add_tag_right + is used. If so, use tre_add_tag_left (putting the tag before + the child as opposed after the child) and throw away + tre_add_tag_right. */ + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + if !(first_pass != 0) { + status = _tre_add_tag_right(tls, mem, left2, tag_left) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_left)*4)) = int32(_TRE_TAG_MAXIMIZE) + if status == REG_OK { + status = _tre_add_tag_right(tls, mem, right2, tag_right) + } + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_right)*4)) = int32(_TRE_TAG_MAXIMIZE) + } + num_tags += int32(2) + } + direction = int32(_TRE_TAG_MAXIMIZE) + goto _10 + _9: + ; + goto _10 + _10: + /* end switch(symbol) */ + } /* end while(tre_stack_num_objects(stack) > bottom) */ + if !(first_pass != 0) { + _tre_purge_regset(tls, regset, tnfa, tag) + } + if !(first_pass != 0) && minimal_tag >= 0 { + i7 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) >= 0) { + break + } + goto _23 + _23: + ; + i7++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals = num_minimals + Xfree(tls, orig_regset) + Xfree(tls, parents) + Xfree(tls, saved_states) + return status +} + +/* + AST to TNFA compilation routines. +*/ + +type Ttre_copyast_symbol_t = int32 + +const _COPY_RECURSE = 0 +const _COPY_SET_RESULT_PTR = 1 + +/* Flags for tre_copy_ast(). */ + +func _tre_copy_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, flags int32, pos_add uintptr, tag_directions uintptr, copy1 uintptr, max_pos uintptr) (r Treg_errcode_t) { + var bottom, first_tag, max, min, num_copied, pos, v1 int32 + var cat, iter, lit, node, p, result, tmp, tmp1, uni uintptr + var status Treg_errcode_t + var symbol Ttre_copyast_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bottom, cat, first_tag, iter, lit, max, min, node, num_copied, p, pos, result, status, symbol, tmp, tmp1, uni, v1 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + num_copied = 0 + first_tag = int32(1) + result = copy1 + status = _tre_stack_push_voidptr(tls, stack, ast) + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_COPY_SET_RESULT_PTR): + result = _tre_stack_pop_voidptr(tls, stack) + case int32(_COPY_RECURSE): + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + pos = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* XXX - e.g. [ab] has only one position but two + nodes, so we are creating holes in the state space + here. Not fatal, just wastes memory. */ + pos += *(*int32)(unsafe.Pointer(pos_add)) + num_copied++ + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_REMOVE_TAGS) != 0 { + /* Change this tag to empty. */ + min = -int32(1) + v1 = -Int32FromInt32(1) + pos = v1 + max = v1 + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_MAXIMIZE_FIRST_TAG) != 0 && first_tag != 0 { + /* Maximize the first tag. */ + *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(max)*4)) = int32(_TRE_TAG_MAXIMIZE) + first_tag = 0 + } + } + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_literal(tls, mem, min, max, pos) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + } else { + p = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_literal_t)(unsafe.Pointer(p)).Fclass = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass + (*Ttre_literal_t)(unsafe.Pointer(p)).Fneg_classes = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes + } + if pos > *(*int32)(unsafe.Pointer(max_pos)) { + *(*int32)(unsafe.Pointer(max_pos)) = pos + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_union(tls, mem, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = tmp + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_catenation(tls, mem, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp1 = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fleft = UintptrFromInt32(0) + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fright = UintptrFromInt32(0) + result = tmp1 + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp1+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_iter(tls, mem, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + iter = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = iter + default: + break + } + break + } + } + *(*int32)(unsafe.Pointer(pos_add)) += num_copied + return status +} + +type Ttre_expand_ast_symbol_t = int32 + +const _EXPAND_RECURSE = 0 +const _EXPAND_AFTER_ITER = 1 + +// C documentation +// +// /* Expands each iteration node that has a finite nonzero minimum or maximum +// iteration count to a catenated sequence of copies of the node. */ +func _tre_expand_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, position uintptr, tag_directions uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var _status, _status1, status Treg_errcode_t + var bottom, flags, iter_depth, j, pos_add_last, pos_add_save, pos_add_total, v2 int32 + var cat, iter, iter1, lit, node, seq1, tmp, uni uintptr + var symbol Ttre_expand_ast_symbol_t + var _ /* copy at bp+16 */ uintptr + var _ /* copy at bp+24 */ uintptr + var _ /* max_pos at bp+4 */ int32 + var _ /* pos_add at bp+0 */ int32 + var _ /* seq2 at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, bottom, cat, flags, iter, iter1, iter_depth, j, lit, node, pos_add_last, pos_add_save, pos_add_total, seq1, status, symbol, tmp, uni, v2 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + *(*int32)(unsafe.Pointer(bp)) = 0 + pos_add_total = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + iter_depth = 0 + _status = _tre_stack_push_voidptr(tls, stack, ast) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_EXPAND_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + *(*int32)(unsafe.Pointer(lit + 16)) += *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition > *(*int32)(unsafe.Pointer(bp + 4)) { + *(*int32)(unsafe.Pointer(bp + 4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + } + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_int(tls, stack, *(*int32)(unsafe.Pointer(bp))) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_AFTER_ITER)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + /* If we are going to expand this node at EXPAND_AFTER_ITER + then don't increase the `pos' fields of the nodes now, it + will get done when expanding. */ + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax > int32(1) { + *(*int32)(unsafe.Pointer(bp)) = 0 + } + iter_depth++ + default: + break + } + case int32(_EXPAND_AFTER_ITER): + iter1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*int32)(unsafe.Pointer(bp)) = _tre_stack_pop_int(tls, stack) + pos_add_last = *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax > int32(1) { + seq1 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = UintptrFromInt32(0) + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + /* Create a catenated sequence of copies of the node. */ + j = 0 + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin) { + break + } + if j+int32(1) < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin { + v2 = int32(COPY_REMOVE_TAGS) + } else { + v2 = int32(COPY_MAXIMIZE_FIRST_TAG) + } + /* Remove tags from all but the last copy. */ + flags = v2 + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, flags, bp, tag_directions, bp+16, bp+4) + if status != REG_OK { + return status + } + if seq1 != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 16))) + } else { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 16)) + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _1 + _1: + ; + j++ + } + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax == -int32(1) { + /* No upper limit. */ + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+8, bp+4) + if status != REG_OK { + return status + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_iter(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, -int32(1), 0) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } else { + j = (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax) { + break + } + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+24, bp+4) + if status != REG_OK { + return status + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_catenation(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*uintptr)(unsafe.Pointer(bp + 8))) + } else { + *(*uintptr)(unsafe.Pointer(bp + 8)) = *(*uintptr)(unsafe.Pointer(bp + 24)) + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + tmp = _tre_ast_new_literal(tls, mem, -int32(1), -int32(1), -int32(1)) + if tmp == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_union(tls, mem, tmp, *(*uintptr)(unsafe.Pointer(bp + 8))) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _3 + _3: + ; + j++ + } + } + *(*int32)(unsafe.Pointer(bp)) = pos_add_save + if seq1 == UintptrFromInt32(0) { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 8))) + } + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Ftype1 + } + iter_depth-- + pos_add_total += *(*int32)(unsafe.Pointer(bp)) - pos_add_last + if iter_depth == 0 { + *(*int32)(unsafe.Pointer(bp)) = pos_add_total + } + default: + break + } + } + *(*int32)(unsafe.Pointer(position)) += pos_add_total + /* `max_pos' should never be larger than `*position' if the above + code works, but just an extra safeguard let's make sure + `*position' is set large enough so enough memory will be + allocated for the transition table. */ + if *(*int32)(unsafe.Pointer(bp + 4)) > *(*int32)(unsafe.Pointer(position)) { + *(*int32)(unsafe.Pointer(position)) = *(*int32)(unsafe.Pointer(bp + 4)) + } + return status +} + +func _tre_set_empty(tls *TLS, mem Ttre_mem_t) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_one(tls *TLS, mem Ttre_mem_t, position int32, code_min int32, code_max int32, class Ttre_ctype_t, neg_classes uintptr, backref int32) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), Uint64FromInt64(56)*Uint64FromInt32(2)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = position + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = code_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = code_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fclass = class + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fneg_classes = neg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fbackref = backref + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_union(tls *TLS, mem Ttre_mem_t, set1 uintptr, set2 uintptr, tags uintptr, assertions int32) (r uintptr) { + var i, j, num_tags, s1, s2 int32 + var new_set, new_tags uintptr + _, _, _, _, _, _, _ = i, j, new_set, new_tags, num_tags, s1, s2 + num_tags = 0 + for { + if !(tags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer(tags + uintptr(num_tags)*4)) >= 0) { + break + } + goto _1 + _1: + ; + num_tags++ + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + goto _2 + _2: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + goto _3 + _3: + ; + s2++ + } + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)*uint64(s1+s2+Int32FromInt32(1))) + if !(new_set != 0) { + return UintptrFromInt32(0) + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fassertions | assertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags == UintptrFromInt32(0) && tags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _5 + _5: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, Uint64FromInt64(4)*uint64(i+num_tags+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(j)*4)) + goto _6 + _6: + ; + j++ + } + i = 0 + for { + if !(i < num_tags) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) + goto _7 + _7: + ; + i++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = new_tags + } + goto _4 + _4: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_max + /* XXX - why not | assertions here as well? */ + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fassertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _9 + _9: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(4)*uint64(i+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(j)*4)) + goto _10 + _10: + ; + j++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = new_tags + } + goto _8 + _8: + ; + s2++ + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = -int32(1) + return new_set +} + +// C documentation +// +// /* Finds the empty path through `node' which is the one that should be +// taken according to POSIX.2 rules, and adds the tags on that path to +// `tags'. `tags' may be NULL. If `num_tags_seen' is not NULL, it is +// set to the number of tags seen on the path. */ +func _tre_match_empty(tls *TLS, stack uintptr, node uintptr, tags uintptr, assertions uintptr, num_tags_seen uintptr) (r Treg_errcode_t) { + var bottom, i int32 + var cat, iter, lit, uni, p2 uintptr + var status Treg_errcode_t + _, _, _, _, _, _, _, _ = bottom, cat, i, iter, lit, status, uni, p2 + bottom = _tre_stack_num_objects(tls, stack) + status = REG_OK + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen)) = 0 + } + status = _tre_stack_push_voidptr(tls, stack, node) + /* Walk through the tree recursively. */ + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + switch (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min { + case int64(-int32(3)): + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max >= 0 { + if tags != UintptrFromInt32(0) { + /* Add the tag to `tags'. */ + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) >= 0) { + break + } + if int64(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4))) == (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max { + break + } + goto _1 + _1: + ; + i++ + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + *(*int32)(unsafe.Pointer(tags + uintptr(i+int32(1))*4)) = -int32(1) + } + } + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen))++ + } + } + case int64(-int32(2)): + if assertions != UintptrFromInt32(0) { + p2 = assertions + *(*int32)(unsafe.Pointer(p2)) = int32(int64(*(*int32)(unsafe.Pointer(p2))) | (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + } + case int64(-int32(1)): + default: + break + } + case int32(_UNION): + /* Subexpressions starting earlier take priority over ones + starting later, so we prefer the left subexpression over the + right subexpression. */ + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + } else { + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + } else { + } + } + case int32(_CATENATION): + /* The path must go through both children. */ + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + case int32(_ITERATION): + /* A match with an empty string is preferred over no match at + all, so we go through the argument if possible. */ + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + } + default: + break + } + } + return status +} + +type Ttre_nfl_stack_symbol_t = int32 + +const _NFL_RECURSE = 0 +const _NFL_POST_UNION = 1 +const _NFL_POST_CATENATION = 2 +const _NFL_POST_ITERATION = 3 + +// C documentation +// +// /* Computes and fills in the fields `nullable', `firstpos', and `lastpos' for +// the nodes of the AST `tree'. */ +func _tre_compute_nfl(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, status Treg_errcode_t + var bottom int32 + var cat, iter, lit, node, tags, uni uintptr + var symbol Ttre_nfl_stack_symbol_t + var _ /* assertions at bp+4 */ int32 + var _ /* num_tags at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, bottom, cat, iter, lit, node, status, symbol, tags, uni + bottom = _tre_stack_num_objects(tls, stack) + _status = _tre_stack_push_voidptr(tls, stack, tree) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for _tre_stack_num_objects(tls, stack) > bottom { + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_NFL_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* Back references: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < 0 { + /* Tags, empty strings, params, and zero width assertions: + nullable = true, firstpos = {}, and lastpos = {}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + /* Literal at position i: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes, -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } + } + case int32(_UNION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status2 = _tre_stack_push_voidptr(tls, stack, node) + if _status2 != REG_OK { + return _status2 + } + _status3 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_UNION)) + if _status3 != REG_OK { + return _status3 + } + _status4 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status4 != REG_OK { + return _status4 + } + _status5 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status5 != REG_OK { + return _status5 + } + _status6 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status6 != REG_OK { + return _status6 + } + _status7 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status7 != REG_OK { + return _status7 + } + case int32(_CATENATION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status8 = _tre_stack_push_voidptr(tls, stack, node) + if _status8 != REG_OK { + return _status8 + } + _status9 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_CATENATION)) + if _status9 != REG_OK { + return _status9 + } + _status10 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status10 != REG_OK { + return _status10 + } + _status11 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status11 != REG_OK { + return _status11 + } + _status12 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status12 != REG_OK { + return _status12 + } + _status13 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status13 != REG_OK { + return _status13 + } + case int32(_ITERATION): + /* Compute the attributes for the subtree, and after that for + this node. */ + _status14 = _tre_stack_push_voidptr(tls, stack, node) + if _status14 != REG_OK { + return _status14 + } + _status15 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_ITERATION)) + if _status15 != REG_OK { + return _status15 + } + _status16 = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg) + if _status16 != REG_OK { + return _status16 + } + _status17 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status17 != REG_OK { + return _status17 + } + break + } + case int32(_NFL_POST_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Ffirstpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Flastpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + case int32(_NFL_POST_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin == 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos + case int32(_NFL_POST_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 && (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0) + /* Compute firstpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 { + /* The left side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos + } + /* Compute lastpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0 { + /* The right side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos + } + default: + break + } + } + return REG_OK +} + +// C documentation +// +// /* Adds a transition from each position in `p1' to each position in `p2'. */ +func _tre_make_trans(tls *TLS, p1 uintptr, p2 uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var dup, i, j, k, l, prev_p2_pos, v1, v2, v6 int32 + var orig_p2, trans uintptr + _, _, _, _, _, _, _, _, _, _, _ = dup, i, j, k, l, orig_p2, prev_p2_pos, trans, v1, v2, v6 + orig_p2 = p2 + if transitions != UintptrFromInt32(0) { + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + prev_p2_pos = -int32(1) + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + /* Optimization: if this position was already handled, skip it. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition == prev_p2_pos { + p2 += 56 + continue + } + prev_p2_pos = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + /* Set `trans' to point to the next unused transition from + position `p1->position'. */ + trans = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4)))*56 + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != UintptrFromInt32(0) { + trans += 56 + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate == UintptrFromInt32(0) { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans + UintptrFromInt32(1)*56)).Fstate = UintptrFromInt32(0) + } + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_min = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_min) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_max = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_max) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition)*4)))*56 + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass != 0 { + v1 = int32(ASSERT_CHAR_CLASS) + } else { + v1 = 0 + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + v2 = int32(ASSERT_CHAR_CLASS_NEG) + } else { + v2 = 0 + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fassertions | (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fassertions | v1 | v2 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref >= 0 { + *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fu)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref + *(*int32)(unsafe.Pointer(trans + 32)) |= int32(ASSERT_BACKREF) + } else { + *(*Ttre_ctype_t)(unsafe.Pointer(trans + 40)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + goto _3 + _3: + ; + i++ + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = Xmalloc(tls, uint64(8)*uint64(i+Int32FromInt32(1))) + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) + goto _4 + _4: + ; + i++ + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = Uint64FromInt32(0) + } else { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = UintptrFromInt32(0) + } + /* Find out how many tags this transition has. */ + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + i++ + } + } + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + j++ + } + } + /* If we are overwriting a transition, free the old tag array. */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = UintptrFromInt32(0) + /* If there were any tags, allocate an array and fill it. */ + if i+j > 0 { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = Xmalloc(tls, uint64(4)*uint64(i+j+Int32FromInt32(1))) + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0) { + return int32(REG_ESPACE) + } + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) + i++ + } + } + l = i + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + /* Don't add duplicates. */ + dup = 0 + k = 0 + for { + if !(k < i) { + break + } + if *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(k)*4)) == *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) { + dup = int32(1) + break + } + goto _5 + _5: + ; + k++ + } + if !(dup != 0) { + v6 = l + l++ + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(v6)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) + } + j++ + } + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(l)*4)) = -int32(1) + } + p2 += 56 + } + p1 += 56 + } + } else { + /* Compute a maximum limit for the number of transitions leaving + from each state. */ + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + *(*int32)(unsafe.Pointer(counts + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4))++ + p2 += 56 + } + p1 += 56 + } + } + return REG_OK +} + +// C documentation +// +// /* Converts the syntax tree to a TNFA. All the transitions in the TNFA are +// labelled with one character range (there are no transitions on empty +// strings). The TNFA takes O(n^2) space in the worst case, `n' is size of +// the regexp. */ +func _tre_ast_to_tnfa(tls *TLS, node uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var cat, iter, uni uintptr + var errcode Treg_errcode_t + _, _, _, _ = cat, errcode, iter, uni + errcode = REG_OK + /* XXX - recurse using a stack!. */ + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright, transitions, counts, offs) + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + /* Add a transition from each position in cat->left->lastpos + to each position in cat->right->firstpos. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, transitions, counts, offs) + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax == -int32(1) { + /* Add a transition from each last position in the iterated + expression to each first position. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, transitions, counts, offs) + break + } + return errcode +} + +func Xregcomp(tls *TLS, preg uintptr, regex uintptr, cflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v regex=%v cflags=%v, (%v:)", tls, preg, regex, cflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var add, i, j, v1 int32 + var counts, initial, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v2 uintptr + var errcode Treg_errcode_t + var mem Ttre_mem_t + var _ /* parse_ctx at bp+0 */ Ttre_parse_ctx_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = add, counts, errcode, i, initial, j, mem, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v1, v2 + counts = UintptrFromInt32(0) + offs = UintptrFromInt32(0) + add = 0 + tnfa = UintptrFromInt32(0) + tag_directions = UintptrFromInt32(0) + /* Allocate a stack used throughout the compilation process for various + purposes. */ + stack = _tre_stack_new(tls, int32(512), int32(1024000), int32(128)) + if !(stack != 0) { + return int32(REG_ESPACE) + } + /* Allocate a fast memory allocator. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + if !(mem != 0) { + _tre_stack_destroy(tls, stack) + return int32(REG_ESPACE) + } + /* Parse the regexp. */ + Xmemset(tls, bp, 0, uint64(56)) + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmem = mem + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstack = stack + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstart = regex + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fcflags = cflags + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref = -int32(1) + errcode = _tre_parse(tls, bp) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub = uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id - int32(1)) + tree = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fn + /* Referring to nonexistent subexpressions is illegal. */ + if (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref > int32((*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub) { + errcode = int32(REG_ESUBREG) + if int32(1) != 0 { + goto error_exit + } + } + /* Allocate the TNFA struct. */ + tnfa = Xcalloc(tls, uint64(1), uint64(104)) + if tnfa == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs = BoolInt32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref >= 0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_approx = 0 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id) + /* Set up tags for submatch addressing. If REG_NOSUB is set and the + regexp does not have back references, this can be skipped. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 || !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Figure out how many tags we will need. */ + errcode = _tre_add_tags(tls, UintptrFromInt32(0), stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 { + tag_directions = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + if tag_directions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions = tag_directions + Xmemset(tls, tag_directions, -int32(1), uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags = Xcalloc(tls, uint64(uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)*uint32(2)+uint32(1)), uint64(4)) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + submatch_data = Xcalloc(tls, uint64(uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id)), uint64(16)) + if submatch_data == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data = submatch_data + errcode = _tre_add_tags(tls, mem, stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + } + /* Expand iteration nodes. */ + errcode = _tre_expand_ast(tls, mem, stack, tree, bp+44, tag_directions) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + /* Add a dummy node for the final state. + XXX - For certain patterns this dummy node can be optimized away, + for example "a*" or "ab*". Figure out a simple way to detect + this possibility. */ + tmp_ast_l = tree + v2 = bp + 44 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + tmp_ast_r = _tre_ast_new_literal(tls, mem, 0, 0, v1) + if tmp_ast_r == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + tree = _tre_ast_new_catenation(tls, mem, tmp_ast_l, tmp_ast_r) + if tree == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + errcode = _tre_compute_nfl(tls, mem, stack, tree) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + counts = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if counts == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + offs = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if offs == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _3 + _3: + ; + i++ + } + _tre_ast_to_tnfa(tls, tree, UintptrFromInt32(0), counts, UintptrFromInt32(0)) + add = 0 + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(offs + uintptr(i)*4)) = add + add += *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) + int32(1) + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _4 + _4: + ; + i++ + } + transitions = Xcalloc(tls, uint64(uint32(add)+uint32(1)), uint64(56)) + if transitions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions = transitions + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + errcode = _tre_ast_to_tnfa(tls, tree, transitions, counts, offs) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars = UintptrFromInt32(0) + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + i = 0 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0 { + i++ + p += 56 + } + initial = Xcalloc(tls, uint64(uint32(i)+uint32(1)), uint64(56)) + if initial == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial = initial + i = 0 + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + for { + if !((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0) { + break + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition)*4)))*56 + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = UintptrFromInt32(0) + /* Copy the arrays p->tags, and p->params, they are allocated + from a tre_mem object. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags != 0 { + j = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags + uintptr(j)*4)) >= 0) { + break + } + goto _6 + _6: + ; + j++ + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = Xmalloc(tls, uint64(4)*uint64(j+Int32FromInt32(1))) + if !((*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags != 0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + Xmemcpy(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags, (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags, uint64(4)*uint64(j+Int32FromInt32(1))) + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fassertions + i++ + goto _5 + _5: + ; + p += 56 + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = UintptrFromInt32(0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*(*Ttre_pos_and_tags_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(tree)).Flastpos))).Fposition)*4)))*56 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags = cflags + X__tre_mem_destroy(tls, mem) + _tre_stack_destroy(tls, stack) + Xfree(tls, counts) + Xfree(tls, offs) + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + return REG_OK + goto error_exit +error_exit: + ; + /* Free everything that was allocated and return the error code. */ + X__tre_mem_destroy(tls, mem) + if stack != UintptrFromInt32(0) { + _tre_stack_destroy(tls, stack) + } + if counts != UintptrFromInt32(0) { + Xfree(tls, counts) + } + if offs != UintptrFromInt32(0) { + Xfree(tls, offs) + } + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + Xregfree(tls, preg) + return errcode +} + +func Xregfree(tls *TLS, preg uintptr) { + if __ccgo_strace { + trc("tls=%v preg=%v, (%v:)", tls, preg, origin(2)) + } + var i uint32 + var tnfa, trans uintptr + _, _, _ = i, tnfa, trans + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + if !(tnfa != 0) { + return + } + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions) { + break + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fstate != 0 { + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags) + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes) + } + } + goto _1 + _1: + ; + i++ + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial != 0 { + trans = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0 { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + goto _2 + _2: + ; + trans += 56 + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data != 0 { + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents != 0 { + Xfree(tls, (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents) + } + goto _3 + _3: + ; + i++ + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags) + } + Xfree(tls, tnfa) +} + +/* Error message strings for error codes listed in `regex.h'. This list + needs to be in sync with the codes listed there, naturally. */ + +/* Converted to single string by Rich Felker to remove the need for + * data relocations at runtime, 27 Feb 2006. */ + +var _messages = [286]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'o', ' ', 'm', 'a', 't', 'c', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'r', 'e', 'g', 'e', 'x', 'p', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'o', 'l', 'l', 'a', 't', 'i', 'n', 'g', ' ', 'e', 'l', 'e', 'm', 'e', 'n', 't', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'c', 'l', 'a', 's', 's', ' ', 'n', 'a', 'm', 'e', 0, 'T', 'r', 'a', 'i', 'l', 'i', 'n', 'g', ' ', 'b', 'a', 'c', 'k', 's', 'l', 'a', 's', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'b', 'a', 'c', 'k', ' ', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ']', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ')', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', '}', '\'', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', ' ', 'o', 'f', ' ', '{', '}', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'r', 'a', 'n', 'g', 'e', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'R', 'e', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'd', ' ', 'b', 'y', ' ', 'v', 'a', 'l', 'i', 'd', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xregerror(tls *TLS, e int32, preg uintptr, buf uintptr, size Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v e=%v preg=%v buf=%v size=%v, (%v:)", tls, e, preg, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_messages)) + for { + if !(e != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + e-- + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + s = X__lctrans_cur(tls, s) + return uint64(int32(1) + Xsnprintf(tls, buf, size, __ccgo_ts+15, VaList(bp+8, s))) +} + +const tre_bt_mem_alloc = 0 +const tre_bt_mem_destroy = 0 +const tre_bt_mem_new = 0 + +/*********************************************************************** + from tre-match-utils.h +***********************************************************************/ + +// C documentation +// +// /* Returns 1 if `t1' wins `t2', 0 otherwise. */ +func _tre_tag_order(tls *TLS, num_tags int32, tag_directions uintptr, t1 uintptr, t2 uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(i < num_tags) { + break + } + if *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(i)*4)) == int32(_TRE_TAG_MINIMIZE) { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } else { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } + goto _1 + _1: + ; + i++ + } + /* assert(0);*/ + return 0 +} + +func _tre_neg_char_classes_match(tls *TLS, classes uintptr, wc Ttre_cint_t, icase int32) (r int32) { + for *(*Ttre_ctype_t)(unsafe.Pointer(classes)) != Uint64FromInt32(0) { + if !(icase != 0) && Xiswctype(tls, wc, *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || icase != 0 && (Xiswctype(tls, Xtowupper(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || Xiswctype(tls, Xtowlower(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0) { + return int32(1) + } else { + classes += 8 + } + } + return 0 /* No match. */ +} + +/*********************************************************************** + from tre-match-parallel.c +***********************************************************************/ + +/* + This algorithm searches for matches basically by reading characters + in the searched string one by one, starting at the beginning. All + matching paths in the TNFA are traversed in parallel. When two or + more paths reach the same state, exactly one is chosen according to + tag ordering rules; if returning submatches is not required it does + not matter which path is chosen. + + The worst case time required for finding the leftmost and longest + match, or determining that there is no match, is always linearly + dependent on the length of the text being searched. + + This algorithm cannot handle TNFAs with back referencing nodes. + See `tre-match-backtrack.c'. +*/ + +type Ttre_tnfa_reach_t = struct { + Fstate uintptr + Ftags uintptr +} + +type Ttre_reach_pos_t = struct { + Fpos Tregoff_t + Ftags uintptr +} + +func _tre_tnfa_run_parallel(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var buf, reach, reach_i, reach_next, reach_next_i, reach_pos, str_byte, tag_i, tmp_buf, tmp_iptr, tmp_tags, trans_i uintptr + var end, i, new_match, num_tags, reg_newline, reg_notbol, reg_noteol, skip, start, v18 int32 + var match_eo, pos, pos_add_next, v10, v7 Tregoff_t + var pbytes, rbytes, tbytes, total_bytes, xbytes Tsize_t + var prev_c Ttre_char_t + var ret Treg_errcode_t + var v1, v2, v3, v4 uint64 + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = buf, end, i, match_eo, new_match, num_tags, pbytes, pos, pos_add_next, prev_c, rbytes, reach, reach_i, reach_next, reach_next_i, reach_pos, reg_newline, reg_notbol, reg_noteol, ret, skip, start, str_byte, tag_i, tbytes, tmp_buf, tmp_iptr, tmp_tags, total_bytes, trans_i, xbytes, v1, v10, v18, v2, v3, v4, v7 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = int64(-int32(1)) + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + match_eo = int64(-int32(1)) /* end offset of match (-1 if no match found yet) */ + new_match = 0 + tmp_tags = UintptrFromInt32(0) + if !(match_tags != 0) { + num_tags = 0 + } else { + num_tags = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags + } + /* Allocate memory for temporary data required for matching. This needs to + be done for every matching operation to be thread safe. This allocates + everything in a single large block with calloc(). */ + /* Ensure that tbytes and xbytes*num_states cannot overflow, and that + * they don't contribute more than 1/8 of SIZE_MAX to total_bytes. */ + if uint64(num_tags) > uint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) { + return int32(REG_ESPACE) + } + /* Likewise check rbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Likewise check pbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Compute the length of the block we need. */ + tbytes = uint64(8) * uint64(num_tags) + rbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+Int32FromInt32(1)) + pbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) + xbytes = uint64(8) * uint64(num_tags) + total_bytes = (Uint64FromInt64(8)-Uint64FromInt32(1))*Uint64FromInt32(4) + (rbytes+xbytes*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states))*uint64(2) + tbytes + pbytes + /* Allocate the memory. */ + buf = Xcalloc(tls, total_bytes, uint64(1)) + if buf == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + /* Get the various pointers within tmp_buf (properly aligned). */ + tmp_tags = buf + tmp_buf = buf + uintptr(tbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v1 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v1 = uint64(0) + } + tmp_buf += uintptr(v1) + reach_next = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v2 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v2 = uint64(0) + } + tmp_buf += uintptr(v2) + reach = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v3 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v3 = uint64(0) + } + tmp_buf += uintptr(v3) + reach_pos = tmp_buf + tmp_buf += uintptr(pbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v4 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v4 = uint64(0) + } + tmp_buf += uintptr(v4) + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + goto _5 + _5: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr(i)*16))).Fpos = int64(-int32(1)) + goto _6 + _6: + ; + i++ + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v7 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v7 + if v7 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos = 0 + reach_next_i = reach_next + for int32(1) != 0 { + /* If no match found yet, add the initial states to `reach_next'. */ + if match_eo < 0 { + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != UintptrFromInt32(0) { + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + trans_i += 56 + continue + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) = int64(-int32(1)) + goto _8 + _8: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != 0 { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _9 + _9: + ; + i++ + } + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + reach_next_i += 16 + } + trans_i += 56 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } else { + if num_tags == 0 || reach_next_i == reach_next { + /* We have found a match. */ + break + } + } + /* Check for end of string. */ + if !(*(*Ttre_char_t)(unsafe.Pointer(bp)) != 0) { + break + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v10 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v10 + if v10 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + /* For each state in `reach', weed out states that don't fulfill the + minimal matching conditions. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals != 0 && new_match != 0 { + new_match = 0 + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + skip = 0 + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) >= 0) { + break + } + end = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) + start = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i+int32(1))*4)) + if end >= num_tags { + skip = int32(1) + break + } else { + if *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(start)*8)) == *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(start)*8)) && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(end)*8)) < *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(end)*8)) { + skip = int32(1) + break + } + } + goto _12 + _12: + ; + i += int32(2) + } + if !(skip != 0) { + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags = tmp_iptr + reach_next_i += 16 + } + goto _11 + _11: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + } + /* For each state in `reach' see if there is a transition leaving with + the current input symbol to a state not yet in `reach_next', and + add the destination states to `reach_next'. */ + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + trans_i = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + /* Does this transition match the input symbol? */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _14 + } + /* Compute the tags after this transition. */ + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(i)*8)) + goto _15 + _15: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + /* Found an unvisited node. */ + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = tmp_tags + tmp_tags = tmp_iptr + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal && (match_eo == int64(-int32(1)) || num_tags > 0 && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags)) <= *(*Tregoff_t)(unsafe.Pointer(match_tags))) { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _16 + _16: + ; + i++ + } + } + reach_next_i += 16 + } else { + /* Another path has also reached this state. We choose + the winner by examining the tag values for both + paths. */ + if _tre_tag_order(tls, num_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tmp_tags, *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags))) != 0 { + /* The new path wins. */ + tmp_iptr = *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) + *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) = tmp_tags + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) + goto _17 + _17: + ; + i++ + } + } + tmp_tags = tmp_iptr + } + } + } + goto _14 + _14: + ; + trans_i += 56 + } + goto _13 + _13: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + if match_eo >= 0 { + v18 = REG_OK + } else { + v18 = int32(REG_NOMATCH) + } + ret = v18 + goto error_exit +error_exit: + ; + Xfree(tls, buf) + return ret +} + +/*********************************************************************** + from tre-match-backtrack.c +***********************************************************************/ + +/* + This matcher is for regexps that use back referencing. Regexp matching + with back referencing is an NP-complete problem on the number of back + references. The easiest way to match them is to use a backtracking + routine which basically goes through all possible paths in the TNFA + and chooses the one which results in the best (leftmost and longest) + match. This can be spectacularly expensive and may run out of stack + space, but there really is no better known generic algorithm. Quoting + Henry Spencer from comp.compilers: + + + POSIX.2 REs require longest match, which is really exciting to + implement since the obsolete ("basic") variant also includes + \. I haven't found a better way of tackling this than doing + a preliminary match using a DFA (or simulation) on a modified RE + that just replicates subREs for \, and then doing a + backtracking match to determine whether the subRE matches were + right. This can be rather slow, but I console myself with the + thought that people who use \ deserve very slow execution. + (Pun unintentional but very appropriate.) + +*/ + +type Ttre_backtrack_item_t = struct { + Fpos Tregoff_t + Fstr_byte uintptr + Fstate uintptr + Fstate_id int32 + Fnext_c int32 + Ftags uintptr +} + +type Ttre_backtrack_t = uintptr + +type Ttre_backtrack_struct = struct { + Fitem Ttre_backtrack_item_t + Fprev uintptr + Fnext uintptr +} + +func _tre_tnfa_run_backtrack(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bt, empty_br_match, i, i1, i2, i3, i4, next_c_start, reg_newline, reg_notbol, reg_noteol, result, ret, v20 int32 + var bt_len, eo, match_eo, pos, pos_add_next, pos_start, so, v11, v12, v3 Tregoff_t + var mem Ttre_mem_t + var next_state, next_tags, pmatch, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v18, v6 uintptr + var prev_c Ttre_char_t + var s, s1, stack Ttre_backtrack_t + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bt, bt_len, empty_br_match, eo, i, i1, i2, i3, i4, match_eo, mem, next_c_start, next_state, next_tags, pmatch, pos, pos_add_next, pos_start, prev_c, reg_newline, reg_notbol, reg_noteol, result, ret, s, s1, so, stack, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v11, v12, v18, v20, v3, v6 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = 0 + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + pos_start = int64(-int32(1)) + /* End offset of best match so far, or -1 if no match found yet. */ + match_eo = int64(-int32(1)) + tags = UintptrFromInt32(0) + states_seen = UintptrFromInt32(0) + /* Memory allocator to for allocating the backtracking stack. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + pmatch = UintptrFromInt32(0) + if !(mem != 0) { + return int32(REG_ESPACE) + } + stack = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(stack != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags != 0 { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !(tags != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches != 0 { + pmatch = Xmalloc(tls, uint64(16)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches)) + if !(pmatch != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states != 0 { + states_seen = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) + if !(states_seen != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + goto retry +retry: + ; + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i)*8)) = int64(-int32(1)) + if match_tags != 0 { + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = int64(-int32(1)) + } + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + *(*int32)(unsafe.Pointer(states_seen + uintptr(i)*4)) = 0 + goto _2 + _2: + ; + i++ + } + state = UintptrFromInt32(0) + pos = pos_start + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v3 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v3 + if v3 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos_start = pos + next_c_start = *(*Ttre_char_t)(unsafe.Pointer(bp)) + str_byte_start = str_byte + /* Handle initial states. */ + next_tags = UintptrFromInt32(0) + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + goto _4 + } + if state == UintptrFromInt32(0) { + /* Start from this state. */ + state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Backtrack to this state. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s + stack = s + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i1 = 0 + for { + if !(i1 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i1)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i1)*8)) + goto _5 + _5: + ; + i1++ + } + tmp = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tmp != 0 { + for *(*int32)(unsafe.Pointer(tmp)) >= 0 { + v6 = tmp + tmp += 4 + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(v6)))*8)) = pos + } + } + } + goto _4 + _4: + ; + trans_i += 56 + } + if next_tags != 0 { + for { + if !(*(*int32)(unsafe.Pointer(next_tags)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(next_tags)))*8)) = pos + goto _7 + _7: + ; + next_tags += 4 + } + } + if state == UintptrFromInt32(0) { + goto backtrack + } +_9: + ; + if !(int32(1) != 0) { + goto _8 + } + if state == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + if match_eo < pos || match_eo == pos && match_tags != 0 && _tre_tag_order(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tags, match_tags) != 0 { + /* This match wins the previous match. */ + match_eo = pos + if match_tags != 0 { + i2 = 0 + for { + if !(i2 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i2)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i2)*8)) + goto _10 + _10: + ; + i2++ + } + } + } + /* Our TNFAs never have transitions leaving from the final state, + so we jump right to backtracking. */ + goto backtrack + } + /* Go to the next character in the input string. */ + empty_br_match = 0 + trans_i = state + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0 && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_BACKREF) != 0 { + bt = *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fu)) + /* Get the substring we need to match against. Remember to + turn off REG_NOSUB temporarily. */ + _tre_fill_pmatch(tls, uint64(bt+int32(1)), pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & ^Int32FromInt32(REG_NOSUB), tnfa, tags, pos) + so = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_so + eo = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_eo + bt_len = eo - so + result = Xstrncmp(tls, string1+uintptr(so), str_byte-uintptr(1), uint64(bt_len)) + if result == 0 { + /* Back reference matched. Check for infinite loop. */ + if bt_len == 0 { + empty_br_match = int32(1) + } + if empty_br_match != 0 && *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) != 0 { + goto backtrack + } + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) = empty_br_match + /* Advance in input string and resync `prev_c', `next_c' + and pos. */ + str_byte += uintptr(bt_len - int64(1)) + pos += bt_len - int64(1) + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v11 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v11 + if v11 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } else { + goto backtrack + } + } else { + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto backtrack + } + /* Read the next character. */ + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v12 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v12 + if v12 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } + next_state = UintptrFromInt32(0) + trans_i = state + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _13 + } + if next_state == UintptrFromInt32(0) { + /* First matching transition. */ + next_state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Second matching transition. We may need to backtrack here + to take this transition instead of the first one, so we + push this transition in the backtracking stack so we can + jump back here if needed. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s1 = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s1 != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s1 + stack = s1 + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i3 = 0 + for { + if !(i3 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i3)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i3)*8)) + goto _14 + _14: + ; + i3++ + } + tmp1 = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + for { + if !(tmp1 != 0 && *(*int32)(unsafe.Pointer(tmp1)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(tmp1)))*8)) = pos + goto _15 + _15: + ; + tmp1 += 4 + } + } + } + goto _13 + _13: + ; + trans_i += 56 + } + if !(next_state != UintptrFromInt32(0)) { + goto _16 + } + /* Matching transitions were found. Take the first one. */ + state = next_state + /* Update the tag values. */ + if next_tags != 0 { + for *(*int32)(unsafe.Pointer(next_tags)) >= 0 { + v18 = next_tags + next_tags += 4 + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(v18)))*8)) = pos + } + } + goto _17 +_16: + ; + goto backtrack +backtrack: + ; + /* A matching transition was not found. Try to backtrack. */ + if (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev != 0 { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate)).Fassertions&int32(ASSERT_BACKREF) != 0 { + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id)*4)) = 0 + } + pos = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos + str_byte = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte + state = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate + *(*Ttre_char_t)(unsafe.Pointer(bp)) = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c + i4 = 0 + for { + if !(i4 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i4)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i4)*8)) + goto _19 + _19: + ; + i4++ + } + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev + } else { + if match_eo < 0 { + /* Try starting from a later position in the input string. */ + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto _8 + } + *(*Ttre_char_t)(unsafe.Pointer(bp)) = next_c_start + str_byte = str_byte_start + goto retry + } else { + goto _8 + } + } +_17: + ; + goto _9 +_8: + ; + if match_eo >= 0 { + v20 = REG_OK + } else { + v20 = int32(REG_NOMATCH) + } + ret = v20 + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + goto error_exit +error_exit: + ; + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return ret +} + +/*********************************************************************** + from regexec.c +***********************************************************************/ + +// C documentation +// +// /* Fills the POSIX.2 regmatch_t array according to the TNFA tag and match +// endpoint values. */ +func _tre_fill_pmatch(tls *TLS, nmatch Tsize_t, pmatch uintptr, cflags int32, tnfa uintptr, tags uintptr, match_eo Tregoff_t) { + var i, j uint32 + var parents, submatch_data uintptr + var v1, v3 Tregoff_t + _, _, _, _, _, _ = i, j, parents, submatch_data, v1, v3 + i = uint32(0) + if match_eo >= 0 && !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Construct submatch offsets from the tags. */ + submatch_data = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag)*8)) + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag)*8)) + } + /* If either of the endpoints were not used, this submatch + was not part of the match. */ + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so == int64(-int32(1)) || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + v1 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v1 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v1 + } + i++ + } + /* Reset all submatches that are not within all of their parent + submatches. */ + i = uint32(0) + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + } + parents = (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fparents + if parents != UintptrFromInt32(0) { + j = uint32(0) + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)) >= 0) { + break + } + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so < (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_so || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo > (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_eo { + v3 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v3 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v3 + } + goto _2 + _2: + ; + j++ + } + } + i++ + } + } + for uint64(i) < nmatch { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = int64(-int32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = int64(-int32(1)) + i++ + } +} + +/* + Wrapper functions for POSIX compatible regexp matching. +*/ + +func Xregexec(tls *TLS, preg uintptr, string1 uintptr, nmatch Tsize_t, pmatch uintptr, eflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v string1=%v nmatch=%v pmatch=%v eflags=%v, (%v:)", tls, preg, string1, nmatch, pmatch, eflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var status Treg_errcode_t + var tags, tnfa uintptr + var _ /* eo at bp+0 */ Tregoff_t + _, _, _ = status, tags, tnfa + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + tags = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_NOSUB) != 0 { + nmatch = uint64(0) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 && nmatch > uint64(0) { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if tags == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } + /* Dispatch to the appropriate matcher. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 { + /* The regex has back references, use the backtracking matcher. */ + status = _tre_tnfa_run_backtrack(tls, tnfa, string1, tags, eflags, bp) + } else { + /* Exact matching, no back references, use the parallel matcher. */ + status = _tre_tnfa_run_parallel(tls, tnfa, string1, tags, eflags, bp) + } + if status == REG_OK { + /* A match was found, so fill the submatch registers. */ + _tre_fill_pmatch(tls, nmatch, pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags, tnfa, tags, *(*Tregoff_t)(unsafe.Pointer(bp))) + } + if tags != 0 { + Xfree(tls, tags) + } + return status +} + +/* + This memory allocator is for allocating small memory blocks efficiently + in terms of memory overhead and execution speed. The allocated blocks + cannot be freed individually, only all at once. There can be multiple + allocators, though. +*/ + +// C documentation +// +// /* Returns a new memory allocator or NULL if out of memory. */ +func X__tre_mem_new_impl(tls *TLS, provided int32, provided_block uintptr) (r Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v provided=%v provided_block=%v, (%v:)", tls, provided, provided_block, origin(2)) + defer func() { trc("-> %v", r) }() + } + var mem Ttre_mem_t + _ = mem + if provided != 0 { + mem = provided_block + Xmemset(tls, mem, 0, uint64(48)) + } else { + mem = Xcalloc(tls, uint64(1), uint64(48)) + } + if mem == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + return mem +} + +// C documentation +// +// /* Frees the memory allocator and all memory allocated with it. */ +func X__tre_mem_destroy(tls *TLS, mem Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v mem=%v, (%v:)", tls, mem, origin(2)) + } + var l, tmp uintptr + _, _ = l, tmp + l = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks + for l != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_list_t)(unsafe.Pointer(l)).Fdata) + tmp = (*Ttre_list_t)(unsafe.Pointer(l)).Fnext + Xfree(tls, l) + l = tmp + } + Xfree(tls, mem) +} + +// C documentation +// +// /* Allocates a block of `size' bytes from `mem'. Returns a pointer to the +// allocated block or NULL if an underlying malloc() failed. */ +func X__tre_mem_alloc_impl(tls *TLS, mem Ttre_mem_t, provided int32, provided_block uintptr, zero int32, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mem=%v provided=%v provided_block=%v zero=%v size=%v, (%v:)", tls, mem, provided, provided_block, zero, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var block_size int32 + var l, ptr uintptr + var v1 uint64 + _, _, _, _ = block_size, l, ptr, v1 + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed != 0 { + return UintptrFromInt32(0) + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn < size { + if provided != 0 { + if provided_block == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = provided_block + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(TRE_MEM_BLOCK_SIZE) + } else { + if size*uint64(8) > uint64(TRE_MEM_BLOCK_SIZE) { + block_size = int32(size * uint64(8)) + } else { + block_size = int32(TRE_MEM_BLOCK_SIZE) + } + l = Xmalloc(tls, uint64(16)) + if l == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fdata = Xmalloc(tls, uint64(block_size)) + if (*Ttre_list_t)(unsafe.Pointer(l)).Fdata == UintptrFromInt32(0) { + Xfree(tls, l) + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fnext = UintptrFromInt32(0) + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent != UintptrFromInt32(0) { + (*Ttre_list_t)(unsafe.Pointer((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent)).Fnext = l + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks = l + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent = l + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = (*Ttre_list_t)(unsafe.Pointer(l)).Fdata + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(block_size) + } + } + /* Make sure the next pointer will be aligned. */ + if (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) != 0 { + v1 = uint64(8) - (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) + } else { + v1 = uint64(0) + } + size += v1 + /* Allocate from current block. */ + ptr = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr + *(*uintptr)(unsafe.Pointer(mem + 16)) += uintptr(size) + *(*Tsize_t)(unsafe.Pointer(mem + 24)) -= size + /* Set to zero if needed. */ + if zero != 0 { + Xmemset(tls, ptr, 0, size) + } + return ptr +} + +const MAXSIZE = 1 +const MINSIZE = 8 + +type TACTION = int32 + +const _FIND = 0 +const _ENTER = 1 + +type TVISIT = int32 + +const _preorder = 0 +const _postorder = 1 +const _endorder = 2 +const _leaf = 3 + +type TENTRY = struct { + Fkey uintptr + Fdata uintptr +} + +type Tentry = TENTRY + +type Thsearch_data = struct { + F__tab uintptr + F__unused1 uint32 + F__unused2 uint32 +} + +type Tqelem = struct { + Fq_forw uintptr + Fq_back uintptr + Fq_data [1]uint8 +} + +/* +open addressing hash table with 2^n table size +quadratic probing is used in case of hash collision +tab indices and hash are size_t +after resize fails with ENOMEM the state of tab is still usable + +with the posix api items cannot be iterated and length cannot be queried +*/ + +type t__tab = struct { + Fentries uintptr + Fmask Tsize_t + Fused Tsize_t +} + +var _htab Thsearch_data + +func _keyhash(tls *TLS, k uintptr) (r Tsize_t) { + var h Tsize_t + var p, v1 uintptr + _, _, _ = h, p, v1 + p = k + h = uint64(0) + for *(*uint8)(unsafe.Pointer(p)) != 0 { + v1 = p + p++ + h = uint64(31)*h + uint64(*(*uint8)(unsafe.Pointer(v1))) + } + return h +} + +func _resize(tls *TLS, nel Tsize_t, htab uintptr) (r int32) { + var e, newe, oldtab uintptr + var i, j, newsize, oldsize, v4 Tsize_t + _, _, _, _, _, _, _, _ = e, i, j, newe, newsize, oldsize, oldtab, v4 + oldsize = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask + uint64(1) + oldtab = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + if nel > uint64(-Int32FromInt32(1))/Uint64FromInt32(2)+Uint64FromInt32(1) { + nel = uint64(-Int32FromInt32(1))/Uint64FromInt32(2) + Uint64FromInt32(1) + } + newsize = uint64(MINSIZE) + for { + if !(newsize < nel) { + break + } + goto _1 + _1: + ; + newsize *= uint64(2) + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = Xcalloc(tls, newsize, uint64(16)) + if !((*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = oldtab + return 0 + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask = newsize - uint64(1) + if !(oldtab != 0) { + return int32(1) + } + e = oldtab + for { + if !(e < oldtab+uintptr(oldsize)*16) { + break + } + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + i = _keyhash(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey) + j = Uint64FromInt32(1) + for { + newe = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(newe)).Fkey != 0) { + break + } + goto _3 + _3: + ; + v4 = j + j++ + i += v4 + } + *(*TENTRY)(unsafe.Pointer(newe)) = *(*TENTRY)(unsafe.Pointer(e)) + } + goto _2 + _2: + ; + e += 16 + } + Xfree(tls, oldtab) + return int32(1) +} + +func Xhcreate(tls *TLS, nel Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v nel=%v, (%v:)", tls, nel, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___hcreate_r(tls, nel, uintptr(unsafe.Pointer(&_htab))) +} + +func Xhdestroy(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___hdestroy_r(tls, uintptr(unsafe.Pointer(&_htab))) +} + +func _lookup(tls *TLS, key uintptr, hash Tsize_t, htab uintptr) (r uintptr) { + var e uintptr + var i, j, v2 Tsize_t + _, _, _, _ = e, i, j, v2 + i = hash + j = Uint64FromInt32(1) + for { + e = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(e)).Fkey != 0) || Xstrcmp(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey, key) == 0 { + break + } + goto _1 + _1: + ; + v2 = j + j++ + i += v2 + } + return e +} + +func Xhsearch(tls *TLS, item TENTRY, action TACTION) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v action=%v, (%v:)", tls, item, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* e at bp+0 */ uintptr + ___hsearch_r(tls, item, action, bp, uintptr(unsafe.Pointer(&_htab))) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func ___hcreate_r(tls *TLS, nel Tsize_t, htab uintptr) (r1 int32) { + var r int32 + _ = r + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = Xcalloc(tls, uint64(1), uint64(24)) + if !((*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0) { + return 0 + } + r = _resize(tls, nel, htab) + if r == 0 { + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) + } + return r +} + +func ___hdestroy_r(tls *TLS, htab uintptr) { + if (*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0 { + Xfree(tls, (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries) + } + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) +} + +func ___hsearch_r(tls *TLS, item TENTRY, action TACTION, retval uintptr, htab uintptr) (r int32) { + var e, v2 uintptr + var hash, v1 Tsize_t + _, _, _, _ = e, hash, v1, v2 + hash = _keyhash(tls, item.Fkey) + e = _lookup(tls, item.Fkey, hash, htab) + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) + } + if action == int32(_FIND) { + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + *(*TENTRY)(unsafe.Pointer(e)) = item + v2 = (*Thsearch_data)(unsafe.Pointer(htab)).F__tab + 16 + *(*Tsize_t)(unsafe.Pointer(v2))++ + v1 = *(*Tsize_t)(unsafe.Pointer(v2)) + if v1 > (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask-(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask/uint64(4) { + if !(_resize(tls, uint64(2)*(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused, htab) != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused-- + (*TENTRY)(unsafe.Pointer(e)).Fkey = uintptr(0) + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + e = _lookup(tls, item.Fkey, hash, htab) + } + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) +} + +type Tnode = struct { + Fnext uintptr + Fprev uintptr +} + +func Xinsque(tls *TLS, element uintptr, pred uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v pred=%v, (%v:)", tls, element, pred, origin(2)) + } + var e, p, v1 uintptr + _, _, _ = e, p, v1 + e = element + p = pred + if !(p != 0) { + v1 = UintptrFromInt32(0) + (*Tnode)(unsafe.Pointer(e)).Fprev = v1 + (*Tnode)(unsafe.Pointer(e)).Fnext = v1 + return + } + (*Tnode)(unsafe.Pointer(e)).Fnext = (*Tnode)(unsafe.Pointer(p)).Fnext + (*Tnode)(unsafe.Pointer(e)).Fprev = p + (*Tnode)(unsafe.Pointer(p)).Fnext = e + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = e + } +} + +func Xremque(tls *TLS, element uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v, (%v:)", tls, element, origin(2)) + } + var e uintptr + _ = e + e = element + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = (*Tnode)(unsafe.Pointer(e)).Fprev + } + if (*Tnode)(unsafe.Pointer(e)).Fprev != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fprev)).Fnext = (*Tnode)(unsafe.Pointer(e)).Fnext + } +} + +func Xlsearch(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + *(*Tsize_t)(unsafe.Pointer(nelp)) = n + uint64(1) + return Xmemcpy(tls, p+uintptr(n)*uintptr(v1), key, width) +} + +func Xlfind(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + return uintptr(0) +} + +const MAXH = 0 + +type Tnode1 = struct { + Fkey uintptr + Fa [2]uintptr + Fh int32 +} + +func Xtdelete(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a [97]uintptr + var c, i, v1, v2, v4, v5, v6, v7, v8 int32 + var child, deleted, n, parent uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, c, child, deleted, i, n, parent, v1, v2, v4, v5, v6, v7, v8 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + /* *a[0] is an arbitrary non-null pointer that is returned when + the root node is deleted. */ + v1 = i + i++ + a[v1] = rootp + v2 = i + i++ + a[v2] = rootp + for { + if !(n != 0) { + return uintptr(0) + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + v4 = i + i++ + a[v4] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _3 + _3: + } + parent = *(*uintptr)(unsafe.Pointer(a[i-int32(2)])) + if *(*uintptr)(unsafe.Pointer(n + 8)) != 0 { + /* free the preceding node instead of the deleted one. */ + deleted = n + v5 = i + i++ + a[v5] = n + 8 + n = *(*uintptr)(unsafe.Pointer(n + 8)) + for *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) != 0 { + v6 = i + i++ + a[v6] = n + 8 + 1*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + (*Tnode1)(unsafe.Pointer(deleted)).Fkey = (*Tnode1)(unsafe.Pointer(n)).Fkey + child = *(*uintptr)(unsafe.Pointer(n + 8)) + } else { + child = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + /* freed node has at most one child, move it up and rebalance. */ + Xfree(tls, n) + i-- + v7 = i + *(*uintptr)(unsafe.Pointer(a[v7])) = child + for { + i-- + v8 = i + if !(v8 != 0 && X__tsearch_balance(tls, a[i]) != 0) { + break + } + } + return parent +} + +func Xtdestroy(tls *TLS, root uintptr, freekey uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v freekey=%v, (%v:)", tls, root, freekey, origin(2)) + } + var r uintptr + _ = r + r = root + if r == uintptr(0) { + return + } + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8)), freekey) + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), freekey) + if freekey != 0 { + (*(*func(*TLS, uintptr))(unsafe.Pointer(&struct{ uintptr }{freekey})))(tls, (*Tnode1)(unsafe.Pointer(r)).Fkey) + } + Xfree(tls, r) +} + +func Xtfind(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c int32 + var n uintptr + _, _ = c, n + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _1 + _1: + } + return n +} + +func _height(tls *TLS, n uintptr) (r int32) { + var v1 int32 + _ = v1 + if n != 0 { + v1 = (*Tnode1)(unsafe.Pointer(n)).Fh + } else { + v1 = 0 + } + return v1 +} + +func _rot(tls *TLS, p uintptr, x uintptr, dir int32) (r int32) { + var hx, hz int32 + var y, z uintptr + _, _, _, _ = hx, hz, y, z + y = *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) + z = *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) + hx = (*Tnode1)(unsafe.Pointer(x)).Fh + hz = _height(tls, z) + if hz > _height(tls, *(*uintptr)(unsafe.Pointer(y + 8 + uintptr(dir)*8))) { + /* + * x + * / \ dir z + * A y / * / \ --> x y + * z D /| | * / \ A B C D + * B C + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) + *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) = x + *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) = y + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + (*Tnode1)(unsafe.Pointer(z)).Fh = hz + int32(1) + } else { + /* + * x y + * / \ / * A y --> x D + * / \ / * z D A z + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = z + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = x + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + int32(1) + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + int32(2) + z = y + } + *(*uintptr)(unsafe.Pointer(p)) = z + return (*Tnode1)(unsafe.Pointer(z)).Fh - hx +} + +// C documentation +// +// /* balance *p, return 0 if height is unchanged. */ +func X__tsearch_balance(tls *TLS, p uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h0, h1, old, v1 int32 + var n uintptr + _, _, _, _, _ = h0, h1, n, old, v1 + n = *(*uintptr)(unsafe.Pointer(p)) + h0 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8))) + h1 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8 + 1*8))) + if uint32(h0-h1)+uint32(1) < uint32(3) { + old = (*Tnode1)(unsafe.Pointer(n)).Fh + if h0 < h1 { + v1 = h1 + int32(1) + } else { + v1 = h0 + int32(1) + } + (*Tnode1)(unsafe.Pointer(n)).Fh = v1 + return (*Tnode1)(unsafe.Pointer(n)).Fh - old + } + return _rot(tls, p, n, BoolInt32(h0 < h1)) +} + +func Xtsearch(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a [96]uintptr + var c, i, v1, v3, v5, v6 int32 + var n, r, v4 uintptr + var v7 bool + _, _, _, _, _, _, _, _, _, _, _ = a, c, i, n, r, v1, v3, v4, v5, v6, v7 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + v1 = i + i++ + a[v1] = rootp + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + return n + } + v3 = i + i++ + a[v3] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _2 + _2: + } + r = Xmalloc(tls, uint64(32)) + if !(r != 0) { + return uintptr(0) + } + (*Tnode1)(unsafe.Pointer(r)).Fkey = key + v4 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)) = v4 + *(*uintptr)(unsafe.Pointer(r + 8)) = v4 + (*Tnode1)(unsafe.Pointer(r)).Fh = int32(1) + /* insert new node, rebalance ancestors. */ + i-- + v5 = i + *(*uintptr)(unsafe.Pointer(a[v5])) = r + for { + if v7 = i != 0; v7 { + i-- + v6 = i + } + if !(v7 && X__tsearch_balance(tls, a[v6]) != 0) { + break + } + } + return r +} + +func _walk(tls *TLS, r uintptr, action uintptr, d int32) { + if !(r != 0) { + return + } + if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) + } else { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) + } +} + +func Xtwalk(tls *TLS, root uintptr, action uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v action=%v, (%v:)", tls, root, action, origin(2)) + } + _walk(tls, root, action, 0) +} + +func Xpoll(tls *TLS, fds uintptr, n Tnfds_t, timeout int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v timeout=%v, (%v:)", tls, fds, n, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_poll), int64(fds), int64(n), int64(timeout), 0, 0, 0)))) +} + +type t__ucontext3 = Tucontext_t5 + +func Xppoll(tls *TLS, fds uintptr, n Tnfds_t, to uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v to=%v mask=%v, (%v:)", tls, fds, n, to, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + _, _, _, _, _ = ns, s, v1, v2, v3 + if to != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if to != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if to != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ppoll), int64(fds), int64(n), int64(v3), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)))) +} + +type t__ucontext4 = Tucontext_t4 + +func Xpselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + var _ /* data at bp+16 */ [2]Tsyscall_arg_t + _, _, _, _, _ = ns, s, v1, v2, v3 + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 0: int64(uint64(mask)), + 1: int64(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pselect6), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), int64(bp+16))))) +} + +type Tucontext_t6 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t +} + +func Xselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv=%v, (%v:)", tls, n, rfds, wfds, efds, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var max_time, s Ttime_t + var ns, v1, v2 int64 + var us Tsuseconds_t + var v3 uintptr + _, _, _, _, _, _, _ = max_time, ns, s, us, v1, v2, v3 + if tv != 0 { + v1 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if tv != 0 { + v2 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + } else { + v2 = 0 + } + us = v2 + max_time = int64(Uint64FromUint64(1)<<(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)) - Uint64FromInt32(1)) + if s < 0 || us < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if us/int64(1000000) > max_time-s { + s = max_time + us = int64(999999) + ns = int64(999999999) + } else { + s += us / int64(1000000) + us %= int64(1000000) + ns = us * int64(1000) + } + if tv != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: us, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS__newselect), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), 0)))) +} + +var _all_mask = [1]uint64{ + 0: -Uint64FromUint64(1), +} + +var _app_mask = [1]uint64{ + 0: uint64(0xfffffffc7fffffff), +} + +func X__block_all_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_all_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__block_app_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_app_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__restore_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_SETMASK)), int64(set), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func Xgetitimer(tls *TLS, which int32, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old=%v, (%v:)", tls, which, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old32 at bp+0 */ [4]int64 + _ = r + if uint64(8) > uint64(8) { + r = int32(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(bp))) + if !(r != 0) { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(old))))) +} + +func Xkill(tls *TLS, pid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v, (%v:)", tls, pid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_kill), int64(pid), int64(sig))))) +} + +func Xkillpg(tls *TLS, pgid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pgid=%v sig=%v, (%v:)", tls, pgid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + if pgid < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xkill(tls, -pgid, sig) +} + +func Xpsiginfo(tls *TLS, si uintptr, msg uintptr) { + if __ccgo_strace { + trc("tls=%v si=%v msg=%v, (%v:)", tls, si, msg, origin(2)) + } + Xpsignal(tls, (*Tsiginfo_t)(unsafe.Pointer(si)).Fsi_signo, msg) +} + +func Xpsignal(tls *TLS, sig int32, msg uintptr) { + if __ccgo_strace { + trc("tls=%v sig=%v msg=%v, (%v:)", tls, sig, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var __need_unlock, old_errno, old_mode, v1 int32 + var f, old_locale, s, v2, v3 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, f, old_errno, old_locale, old_mode, s, v1, v2, v3 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + s = Xstrsignal(tls, sig) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since psignal is not + * permitted to change them. Save errno and restore it if there is no + * error since fprintf might change it even on success but psignal is + * not permitted to do so. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if msg != 0 { + v2 = msg + } else { + v2 = __ccgo_ts + } + if msg != 0 { + v3 = __ccgo_ts + 386 + } else { + v3 = __ccgo_ts + } + if Xfprintf(tls, f, __ccgo_ts+1114, VaList(bp+8, v2, v3, s)) >= 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + } + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xraise(tls *TLS, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v, (%v:)", tls, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* set at bp+0 */ Tsigset_t + _ = ret + X__block_app_sigs(tls, bp) + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid), int64(sig))))) + X__restore_sigs(tls, bp) + return ret +} + +/* These functions will not work, but suffice for targets where the + * kernel sigaction structure does not actually use sa_restorer. */ +func X__restore(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func X__restore_rt(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetitimer(tls *TLS, which int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new1=%v old=%v, (%v:)", tls, which, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var is, vs Ttime_t + var ius, vus int64 + var r int32 + var _ /* old32 at bp+32 */ [4]int64 + _, _, _, _, _ = is, ius, r, vs, vus + if uint64(8) > uint64(8) { + is = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ius = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_usec + vus = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_usec + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: ius, + 2: vs, + 3: vus, + } + r = int32(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(bp), int64(bp+32))) + if !(r != 0) && old != 0 { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(new1), int64(old))))) +} + +type Tk_sigaction = struct { + Fhandler uintptr + Fflags uint64 + Frestorer uintptr + Fmask [2]uint32 +} + +var _unmask_done int32 +var _handler_set [1]uint64 + +func X__get_handler_set(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + Xmemcpy(tls, set, uintptr(unsafe.Pointer(&_handler_set)), uint64(8)) +} + +func X__libc_sigaction(tls *TLS, sig int32, sa uintptr, old1 uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old1=%v, (%v:)", tls, sig, sa, old1, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var old, r, r1, v, v15, v19, v24, v28, v5, v9 int32 + var v1, v12, v13, v14, v18, v22, v23, v27, v3, v31, v32, v33, v4, v8 uintptr + var v2 int64 + var _ /* ksa at bp+16 */ Tk_sigaction + var _ /* ksa_old at bp+48 */ Tk_sigaction + var _ /* u at bp+8 */ struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, r, r1, v, v1, v12, v13, v14, v15, v18, v19, v2, v22, v23, v24, v27, v28, v3, v31, v32, v33, v4, v5, v8, v9 + if sa != 0 { + if uint64(*(*uintptr)(unsafe.Pointer(sa))) > uint64(1) { + v1 = uintptr(unsafe.Pointer(&_handler_set)) + uintptr(uint64(sig-Int32FromInt32(1))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + v2 = int64(uint64(1) << (uint64(sig-Int32FromInt32(1)) % (Uint64FromInt32(8) * Uint64FromInt64(8)))) + if Uint64FromInt64(8) == Uint64FromInt64(4) { + v3 = v1 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1529) + for { + v8 = v3 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1529) + v9 = v + goto _10 + _10: + old = v9 + goto _7 + _7: + ; + v4 = v3 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1529) + v5 = r & int32(0x20000000) + goto _6 + _6: + ; + if !!(v5 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1529) + _ = old + goto _11 + _11: + } else { + v12 = v1 + *(*struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + })(unsafe.Pointer(bp + 8)) = struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp + 8)) = uint64(v2) + if *(*Tuint32_t)(unsafe.Pointer(bp + 8)) != 0 { + v13 = v12 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1529) + for { + v18 = v13 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1529) + v19 = v + goto _20 + _20: + old = v19 + goto _17 + _17: + ; + v14 = v13 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1529) + v15 = r & int32(0x20000000) + goto _16 + _16: + ; + if !!(v15 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1529) + _ = old + goto _21 + _21: + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)) != 0 { + v22 = v12 + uintptr(1)*4 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1529) + for { + v27 = v22 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1529) + v28 = v + goto _29 + _29: + old = v28 + goto _26 + _26: + ; + v23 = v22 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1529) + v24 = r & int32(0x20000000) + goto _25 + _25: + ; + if !!(v24 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1529) + _ = old + goto _30 + _30: + } + } + /* If pthread_create has not yet been called, + * implementation-internal signals might not + * yet have been unblocked. They must be + * unblocked before any signal handler is + * installed, so that an application cannot + * receive an illegal sigset_t (with them + * blocked) as part of the ucontext_t passed + * to the signal handler. */ + if !(X__libc.Fthreaded != 0) && !(_unmask_done != 0) { + *(*[1]uint64)(unsafe.Pointer(bp)) = [1]uint64{ + 0: Uint64FromUint64(3) << (Int32FromInt32(32) * BoolInt32(Uint64FromInt64(8) > Uint64FromInt32(4))), + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_UNBLOCK)), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + _unmask_done = int32(1) + } + if !(uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags)&Uint32FromUint32(0x10000000) != 0) { + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1529) + AtomicStorePInt32(uintptr(unsafe.Pointer(&X__eintr_valid_flag)), int32(1)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1529) + } + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fhandler = *(*uintptr)(unsafe.Pointer(sa)) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags = uint64((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags |= uint64(0x04000000) + if uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags)&uint32(4) != 0 { + v31 = __ccgo_fp(X__restore_rt) + } else { + v31 = __ccgo_fp(X__restore) + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Frestorer = v31 + Xmemcpy(tls, bp+16+24, sa+8, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + if sa != 0 { + v32 = bp + 16 + } else { + v32 = uintptr(0) + } + if old1 != 0 { + v33 = bp + 48 + } else { + v33 = uintptr(0) + } + r1 = int32(X__syscall4(tls, int64(SYS_rt_sigaction), int64(sig), int64(v32), int64(v33), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if old1 != 0 && !(r1 != 0) { + *(*uintptr)(unsafe.Pointer(old1)) = (*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fhandler + (*Tsigaction)(unsafe.Pointer(old1)).Fsa_flags = int32((*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fflags) + Xmemcpy(tls, old1+8, bp+48+24, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func X__sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* set at bp+0 */ [1]uint64 + _ = r + if uint32(sig)-uint32(32) < uint32(3) || uint32(sig)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Doing anything with the disposition of SIGABRT requires a lock, + * so that it cannot be changed while abort is terminating the + * process and so any change made by abort can't be observed. */ + if sig == int32(SIGABRT) { + X__block_all_sigs(tls, bp) + ___lock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + } + r = X__libc_sigaction(tls, sig, sa, old) + if sig == int32(SIGABRT) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + X__restore_sigs(tls, bp) + } + return r +} + +func Xsigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__sigaction(tls, sig, sa, old) +} + +func Xsigaddset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) |= uint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1))) + return 0 +} + +func Xsigaltstack(tls *TLS, ss uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ss=%v old=%v, (%v:)", tls, ss, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + if ss != 0 { + if !((*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&Int32FromInt32(SS_DISABLE) != 0) && (*Tstack_t)(unsafe.Pointer(ss)).Fss_size < uint64(MINSIGSTKSZ) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + if (*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&int32(SS_ONSTACK) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sigaltstack), int64(ss), int64(old))))) +} + +const SST_SIZE = 8 + +type Tucontext_t7 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t1 +} + +func Xsigandset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) & *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigdelset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) &= ^(Uint64FromUint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1)))) + return 0 +} + +func Xsigemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0) + if Bool(uint64(8) == uint64(4)) || Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0) + } + if Bool(uint64(8) == uint64(4)) && Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 2*8)) = uint64(0) + *(*uint64)(unsafe.Pointer(set + 3*8)) = uint64(0) + } + return 0 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xsigfillset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0xfffffffc7fffffff) + if int32(_NSIG) > int32(65) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0xffffffffffffffff) + } + return 0 +} + +func Xsigisemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + if *(*uint64)(unsafe.Pointer(set + uintptr(i)*8)) != 0 { + return 0 + } + goto _1 + _1: + ; + i++ + } + return int32(1) +} + +func Xsigismember(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + return 0 + } + return BoolInt32(!!(*(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8))&(Uint64FromUint64(1)<<(uint64(s)&(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)))) != 0)) +} + +func Xsigorset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) | *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigpending(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_rt_sigpending), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))))) +} + +func Xsigprocmask(tls *TLS, how int32, set uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v how=%v set=%v old=%v, (%v:)", tls, how, set, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = _pthread_sigmask(tls, how, set, old) + if !(r != 0) { + return r + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = r + return -int32(1) +} + +func Xsigqueue(tls *TLS, pid Tpid_t, sig int32, value Tsigval) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v value=%v, (%v:)", tls, pid, sig, value, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var r int32 + var _ /* set at bp+128 */ Tsigset_t + var _ /* si at bp+0 */ Tsiginfo_t + _ = r + Xmemset(tls, bp, 0, uint64(128)) + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo = sig + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_code = -int32(1) + *(*Tsigval)(unsafe.Pointer(bp + 16 + 8)) = value + *(*Tuid_t)(unsafe.Pointer(bp + 16 + 4)) = Xgetuid(tls) + X__block_app_sigs(tls, bp+128) + *(*Tpid_t)(unsafe.Pointer(bp + 16)) = Xgetpid(tls) + r = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_rt_sigqueueinfo), int64(pid), int64(sig), int64(bp))))) + X__restore_sigs(tls, bp+128) + return r +} + +func X__libc_current_sigrtmax(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Int32FromInt32(_NSIG) - Int32FromInt32(1) +} + +func X__libc_current_sigrtmin(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(35) +} + +func Xsigsuspend(tls *TLS, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_rt_sigsuspend), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0, 0, 0)))) +} + +func _do_sigtimedwait(tls *TLS, mask uintptr, si uintptr, ts uintptr) (r int32) { + return int32(___syscall_cp(tls, int64(SYS_rt_sigtimedwait), int64(mask), int64(si), int64(ts), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) +} + +func Xsigtimedwait(tls *TLS, mask uintptr, si uintptr, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v timeout=%v, (%v:)", tls, mask, si, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + for cond := true; cond; cond = ret == -int32(EINTR) { + ret = _do_sigtimedwait(tls, mask, si, timeout) + } + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsigwait(tls *TLS, mask uintptr, sig uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v sig=%v, (%v:)", tls, mask, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* si at bp+0 */ Tsiginfo_t + if Xsigtimedwait(tls, mask, bp, uintptr(0)) < 0 { + return -int32(1) + } + *(*int32)(unsafe.Pointer(sig)) = (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo + return 0 +} + +func Xsigwaitinfo(tls *TLS, mask uintptr, si uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v, (%v:)", tls, mask, si, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsigtimedwait(tls, mask, si, uintptr(0)) +} + +func X__fxstat(tls *TLS, ver int32, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v buf=%v, (%v:)", tls, ver, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstat(tls, fd, buf) +} + +func X__fxstatat(tls *TLS, ver int32, fd int32, path uintptr, buf uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v buf=%v flag=%v, (%v:)", tls, ver, fd, path, buf, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, fd, path, buf, flag) +} + +func X__lxstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlstat(tls, path, buf) +} + +func X__xstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstat(tls, path, buf) +} + +func X__xmknod(tls *TLS, ver int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func X__xmknodat(tls *TLS, ver int32, fd int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func Xchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_chmod), int64(path), int64(mode))))) +} + +func Xfchmod(tls *TLS, fd int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall2(tls, int64(SYS_fchmod), int64(fd), int64(mode))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_chmod), int64(bp), int64(mode))))) +} + +func Xfchmodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v flag=%v, (%v:)", tls, fd, path, mode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(176) + defer tls.Free(176) + var fd2, ret, v1 int32 + var _ /* proc at bp+144 */ [27]uint8 + var _ /* st at bp+0 */ Tstat + _, _, _ = fd2, ret, v1 + if !(flag != 0) { + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(fd), int64(path), int64(mode))))) + } + ret = int32(X__syscall4(tls, int64(SYS_fchmodat2), int64(fd), int64(path), int64(mode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag != int32(AT_SYMLINK_NOFOLLOW) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if Xfstatat(tls, fd, path, bp, flag) != 0 { + return -int32(1) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + v1 = int32(X__syscall3(tls, int64(SYS_openat), int64(fd), int64(path), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_PATH)|Int32FromInt32(O_NOFOLLOW)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC)))) + fd2 = v1 + if v1 < 0 { + if fd2 == -int32(ELOOP) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + return int32(X__syscall_ret(tls, uint64(fd2))) + } + X__procfdname(tls, bp+144, uint32(fd2)) + ret = Xstat(tls, bp+144, bp) + if !(ret != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + ret = int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } else { + ret = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(-Int32FromInt32(100)), int64(bp+144), int64(mode))))) + } + } + X__syscall1(tls, int64(SYS_close), int64(fd2)) + return ret +} + +func X__fstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + if fd < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EBADF)))) + } + return X__fstatat(tls, fd, __ccgo_ts, st, int32(AT_EMPTY_PATH)) +} + +func Xfstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat(tls, fd, st) +} + +type Tstatx1 = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + Fpad1 Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_btime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_ctime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_mtime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + Fspare [14]Tuint64_t +} + +func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ret int32 + var _ /* stx at bp+0 */ Tstatx1 + _ = ret + flag |= int32(AT_NO_AUTOMOUNT) + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(fd), int64(path), int64(flag), int64(Int32FromInt32(0x7ff)), int64(bp))) + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 && !(*(*uint8)(unsafe.Pointer(path)) != 0) { + ret = int32(X__syscall2(tls, int64(SYS_fstat), int64(fd), int64(bp))) + if ret == -int32(EBADF) && X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) >= 0 { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + if ret == -int32(EINVAL) { + X__procfdname(tls, bp+144, uint32(fd)) + ret = int32(X__syscall2(tls, int64(SYS_stat), int64(bp+144), int64(bp))) + } + } + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && flag == int32(AT_SYMLINK_NOFOLLOW) { + ret = int32(X__syscall2(tls, int64(SYS_lstat), int64(path), int64(bp))) + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && !(flag != 0) { + ret = int32(X__syscall2(tls, int64(SYS_stat), int64(path), int64(bp))) + } else { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + } + } + } + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_dev, + Fst_ino: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ino, + Fst_nlink: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_nlink, + Fst_mode: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mode, + Fst_uid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_uid, + Fst_gid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_gid, + Fst_rdev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_rdev, + Fst_size: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_size, + Fst_blksize: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blksize, + Fst_blocks: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blocks, + Fst_atim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + Fst_mtim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + Fst_ctim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + } + return 0 +} + +func X__fstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint64(8) < uint64(8) { + ret = _fstatat_statx(tls, fd, path, st, flag) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + ret = _fstatat_kstat(tls, fd, path, st, flag) + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xfstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat(tls, fd, path, st, flag) +} + +func Xfutimens(tls *TLS, fd int32, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times=%v, (%v:)", tls, fd, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xutimensat(tls, fd, uintptr(0), times, 0) +} + +func X__futimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var v2 uintptr + var _ /* ts at bp+0 */ [2]Ttimespec + _, _ = i, v2 + if times != 0 { + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec * int64(1000) + goto _1 + _1: + ; + i++ + } + } + if times != 0 { + v2 = bp + } else { + v2 = uintptr(0) + } + return Xutimensat(tls, dirfd, pathname, v2, 0) +} + +func Xfutimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, dirfd, pathname, times) +} + +func Xlchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfchmodat(tls, -int32(100), path, mode, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xlstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xmkdir(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_mkdir), int64(path), int64(mode))))) +} + +func Xmkdirat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mkdirat), int64(fd), int64(path), int64(mode))))) +} + +func Xmkfifo(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmkfifoat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmknod(tls *TLS, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v dev=%v, (%v:)", tls, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mknod), int64(path), int64(mode), int64(dev))))) +} + +func Xmknodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_mknodat), int64(fd), int64(path), int64(mode), int64(dev))))) +} + +func Xstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, 0) +} + +func ___statfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_statfs64), int64(path), int64(Uint64FromInt64(120)), int64(buf))))) +} + +func Xfstatfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fstatfs64), int64(fd), int64(Uint64FromInt64(120)), int64(buf))))) +} + +func _fixup(tls *TLS, out uintptr, in uintptr) { + var v1 uint64 + _ = v1 + *(*Tstatvfs)(unsafe.Pointer(out)) = Tstatvfs{} + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bsize = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + if (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize != 0 { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize + } else { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + } + (*Tstatvfs)(unsafe.Pointer(out)).Ff_frsize = v1 + (*Tstatvfs)(unsafe.Pointer(out)).Ff_blocks = (*Tstatfs)(unsafe.Pointer(in)).Ff_blocks + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bfree = (*Tstatfs)(unsafe.Pointer(in)).Ff_bfree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bavail = (*Tstatfs)(unsafe.Pointer(in)).Ff_bavail + (*Tstatvfs)(unsafe.Pointer(out)).Ff_files = (*Tstatfs)(unsafe.Pointer(in)).Ff_files + (*Tstatvfs)(unsafe.Pointer(out)).Ff_ffree = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_favail = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_fsid = uint64(*(*int32)(unsafe.Pointer(in + 56))) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_flag = (*Tstatfs)(unsafe.Pointer(in)).Ff_flags + (*Tstatvfs)(unsafe.Pointer(out)).Ff_namemax = (*Tstatfs)(unsafe.Pointer(in)).Ff_namelen + (*Tstatvfs)(unsafe.Pointer(out)).Ff_type = uint32((*Tstatfs)(unsafe.Pointer(in)).Ff_type) +} + +func Xstatvfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* kbuf at bp+0 */ Tstatfs + if ___statfs(tls, path, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xfstatvfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* kbuf at bp+0 */ Tstatfs + if Xfstatfs(tls, fd, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xumask(tls *TLS, mode Tmode_t) (r Tmode_t) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_umask), int64(mode))))) +} + +func Xutimensat(tls *TLS, fd int32, path uintptr, times uintptr, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times=%v flags=%v, (%v:)", tls, fd, path, times, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i, r int32 + var tv uintptr + var _ /* tmp at bp+0 */ [4]int64 + _, _, _ = i, r, tv + if times != 0 && (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec == int64(UTIME_NOW) && (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec == int64(UTIME_NOW) { + times = uintptr(0) + } + r = int32(X__syscall4(tls, int64(SYS_utimensat), int64(fd), int64(path), int64(times), int64(flags))) + if r != -int32(ENOSYS) || flags != 0 { + return int32(X__syscall_ret(tls, uint64(r))) + } + tv = uintptr(0) + if times != 0 { + tv = bp + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec) >= uint64(1000000000) { + if (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int64(UTIME_NOW) || (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int64(UTIME_OMIT) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOSYS)))) + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)*i+0] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)*i+int32(1)] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec / int64(1000) + goto _1 + _1: + ; + i++ + } + } + r = int32(X__syscall3(tls, int64(SYS_futimesat), int64(fd), int64(path), int64(tv))) + if r != -int32(ENOSYS) || fd != -int32(100) { + return int32(X__syscall_ret(tls, uint64(r))) + } + r = int32(X__syscall2(tls, int64(SYS_utimes), int64(path), int64(tv))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__fclose_ca(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) +} + +func X__fdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var f, v1 uintptr + var flags, v2 int32 + var _ /* wsz at bp+0 */ Twinsize + _, _, _, _ = f, flags, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1546, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+buffer or fail */ + v1 = Xmalloc(tls, Uint64FromInt64(232)+Uint64FromInt32(UNGET)+Uint64FromInt32(BUFSIZ)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(v2) + } + /* Apply close-on-exec flag */ + if Xstrchr(tls, mode, int32('e')) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + /* Set append mode on fd if opened for append */ + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags = int32(X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFL)))) + if !(flags&Int32FromInt32(O_APPEND) != 0) { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFL)), int64(flags|Int32FromInt32(O_APPEND))) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_APP) + } + (*TFILE)(unsafe.Pointer(f)).Ffd = fd + (*TFILE)(unsafe.Pointer(f)).Fbuf = f + uintptr(232) + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(BUFSIZ) + /* Activate line buffered mode for terminals */ + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0) && !(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(uint64(Uint32FromUint32(2)< %v", r) }() + } + return X__fdopen(tls, fd, mode) +} + +func X__fmodeflags(tls *TLS, mode uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var flags int32 + _ = flags + if Xstrchr(tls, mode, int32('+')) != 0 { + flags = int32(O_RDWR) + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + flags = O_RDONLY + } else { + flags = int32(O_WRONLY) + } + } + if Xstrchr(tls, mode, int32('x')) != 0 { + flags |= int32(O_EXCL) + } + if Xstrchr(tls, mode, int32('e')) != 0 { + flags |= int32(O_CLOEXEC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) != int32('r') { + flags |= int32(O_CREAT) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('w') { + flags |= int32(O_TRUNC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags |= int32(O_APPEND) + } + return flags +} + +func X__fopen_rb_ca(tls *TLS, filename uintptr, f uintptr, buf uintptr, len1 Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v f=%v buf=%v len1=%v, (%v:)", tls, filename, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemset(tls, f, 0, uint64(232)) + (*TFILE)(unsafe.Pointer(f)).Ffd = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_open), int64(filename), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_LARGEFILE)))))) + if (*TFILE)(unsafe.Pointer(f)).Ffd < 0 { + return uintptr(0) + } + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(Int32FromInt32(F_NOWR) | Int32FromInt32(F_PERM)) + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = len1 - uint64(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + AtomicStorePInt32(f+140, -int32(1)) + return f +} + +func X__overflow(tls *TLS, f uintptr, _c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v _c=%v, (%v:)", tls, f, _c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint8 + var v2, v3 uintptr + var _ /* c at bp+0 */ uint8 + _, _, _ = v1, v2, v3 + *(*uint8)(unsafe.Pointer(bp)) = uint8(_c) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return -int32(1) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend && int32(*(*uint8)(unsafe.Pointer(bp))) != (*TFILE)(unsafe.Pointer(f)).Flbf { + v1 = *(*uint8)(unsafe.Pointer(bp)) + v3 = f + 40 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(v2)) = v1 + return int32(v1) + } + if (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, bp, uint64(1)) != uint64(1) { + return -int32(1) + } + return int32(*(*uint8)(unsafe.Pointer(bp))) +} + +func _dummy9(tls *TLS, fd int32) (r int32) { + return fd +} + +func X__stdio_close(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_close), int64(_dummy9(tls, (*TFILE)(unsafe.Pointer(f)).Ffd)))))) +} + +var _dummy_file = uintptr(0) + +func _close_file(tls *TLS, f uintptr) { + if !(f != 0) { + return + } + if AtomicLoadPInt32(f+140) >= 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } +} + +func X__stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + _close_file(tls, f) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdin_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) +} + +func X__stdio_exit_needed(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit(tls) +} + +func X__stdio_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var v1 int64 + var v2 int32 + var v3, v4 uintptr + var _ /* iov at bp+0 */ [2]Tiovec + _, _, _, _, _ = cnt, v1, v2, v3, v4 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: buf, + Fiov_len: len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)), + }, + 1: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fbuf, + Fiov_len: (*TFILE)(unsafe.Pointer(f)).Fbuf_size, + }, + } + if (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len != 0 { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readv), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(bp), int64(Int32FromInt32(2))))) + } else { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_read), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_base), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_len)))) + } + cnt = v1 + if cnt <= 0 { + if cnt != 0 { + v2 = int32(F_ERR) + } else { + v2 = int32(F_EOF) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v2) + return uint64(0) + } + if uint64(cnt) <= (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len { + return uint64(cnt) + } + cnt = Tssize_t(uint64(cnt) - (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len) + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(cnt) + if (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(len1-uint64(1)))) = *(*uint8)(unsafe.Pointer(v3)) + } + return len1 +} + +func X__stdio_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, (*TFILE)(unsafe.Pointer(f)).Ffd, off, whence) +} + +func X__stdio_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var iov, v2, v3, v4 uintptr + var iovcnt int32 + var rem Tsize_t + var v5 uint64 + var _ /* iovs at bp+0 */ [2]Tiovec + _, _, _, _, _, _, _, _ = cnt, iov, iovcnt, rem, v2, v3, v4, v5 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fwbase, + Fiov_len: uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)), + }, + 1: { + Fiov_base: buf, + Fiov_len: len1, + }, + } + iov = bp + rem = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + (*(*Tiovec)(unsafe.Pointer(iov + 1*16))).Fiov_len + iovcnt = int32(2) + for { + cnt = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_writev), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(iov), int64(iovcnt)))) + if uint64(cnt) == rem { + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + return len1 + } + if cnt < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if iovcnt == int32(2) { + v5 = uint64(0) + } else { + v5 = len1 - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + } + return v5 + } + rem -= uint64(cnt) + if uint64(cnt) > (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len { + cnt = Tssize_t(uint64(cnt) - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len) + iov += 16 + iovcnt-- + } + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base + uintptr(cnt) + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len -= uint64(cnt) + goto _1 + _1: + } + return r +} + +func X__stdout_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* wsz at bp+0 */ Twinsize + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_SVB) != 0) && X__syscall3(tls, int64(SYS_ioctl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(uint64(Uint32FromUint32(2)< %v", r) }() + } + var v1, v2, v3 uintptr + var v4 int32 + _, _, _, _ = v1, v2, v3, v4 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_EOF) != 0 { + v4 = -int32(1) + } else { + v4 = 0 + } + return v4 +} + +func X__toread_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +func X__towrite(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 uintptr + _, _ = v1, v2 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + /* Clear read buffer (easier than summoning nasal demons) */ + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + /* Activate write through the buffer. */ + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + return 0 +} + +func X__towrite_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +/* This function assumes it will never be called if there is already + * data buffered for reading. */ + +func X__uflow(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* c at bp+0 */ uint8 + if !(X__toread(tls, f) != 0) && (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, bp, uint64(1)) == uint64(1) { + return int32(*(*uint8)(unsafe.Pointer(bp))) + } + return -int32(1) +} + +func Xasprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvasprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xclearerr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^(Int32FromInt32(F_EOF) | Int32FromInt32(F_ERR))) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xclearerr_unlocked(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xclearerr(tls, f) +} + +func Xdprintf(tls *TLS, fd int32, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v va=%v, (%v:)", tls, fd, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvdprintf(tls, fd, fmt, ap) + _ = ap + return ret +} + +const FSETLOCKING_BYCALLER = 2 +const FSETLOCKING_INTERNAL = 1 +const FSETLOCKING_QUERY = 0 + +func X_flushlbf(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xfflush(tls, uintptr(0)) +} + +func X__fsetlocking(tls *TLS, f uintptr, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v type1=%v, (%v:)", tls, f, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__fwriting(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 || (*TFILE)(unsafe.Pointer(f)).Fwend != 0) +} + +func X__freading(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 || (*TFILE)(unsafe.Pointer(f)).Frend != 0) +} + +func X__freadable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NORD) != 0)) +} + +func X__fwritable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0)) +} + +func X__flbf(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Flbf >= 0) +} + +func X__fbufsize(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TFILE)(unsafe.Pointer(f)).Fbuf_size +} + +func X__fpending(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Fwend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__fpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + if !(f != 0) { // libbsd fpurge test fails w/o this. + return int32(1) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + return 0 +} + +func Xfpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fpurge(tls, f) +} + +func X__freadahead(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__freadptr(tls *TLS, f uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v sizep=%v, (%v:)", tls, f, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + if (*TFILE)(unsafe.Pointer(f)).Frpos == (*TFILE)(unsafe.Pointer(f)).Frend { + return uintptr(0) + } + *(*Tsize_t)(unsafe.Pointer(sizep)) = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + return (*TFILE)(unsafe.Pointer(f)).Frpos +} + +func X__freadptrinc(tls *TLS, f uintptr, inc Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v inc=%v, (%v:)", tls, f, inc, origin(2)) + } + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(inc) +} + +func X__fseterr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) +} + +func _dummy10(tls *TLS, f uintptr) { +} + +func Xfclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1 int32 + var head uintptr + _, _, _, _ = __need_unlock, head, r, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + r = Xfflush(tls, f) + r |= (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + /* Past this point, f is closed and any further explict access + * to it is undefined. However, it still exists as an entry in + * the open file list and possibly in the thread's locked files + * list, if it was closed while explicitly locked. Functions + * which process these lists must tolerate dead FILE objects + * (which necessarily have inactive buffer pointers) without + * producing any side effects. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) != 0 { + return r + } + X__unlist_locked_file(tls, f) + head = X__ofl_lock(tls) + if (*TFILE)(unsafe.Pointer(f)).Fprev != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev)).Fnext = (*TFILE)(unsafe.Pointer(f)).Fnext + } + if (*TFILE)(unsafe.Pointer(f)).Fnext != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext)).Fprev = (*TFILE)(unsafe.Pointer(f)).Fprev + } + if *(*uintptr)(unsafe.Pointer(head)) == f { + *(*uintptr)(unsafe.Pointer(head)) = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + Xfree(tls, (*TFILE)(unsafe.Pointer(f)).Fgetln_buf) + Xfree(tls, f) + return r +} + +func Xfeof(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_feof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xfeof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xferror(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_ferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +func Xferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +// C documentation +// +// /* stdout.c will override this if linked */ +var _dummy11 = uintptr(0) + +func Xfflush(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, __need_unlock1, r, v2, v3 int32 + var v4, v5, v6 uintptr + _, _, _, _, _, _, _, _ = __need_unlock, __need_unlock1, r, v2, v3, v4, v5, v6 + if !(f != 0) { + r = 0 + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + } + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) + } + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + r |= Xfflush(tls, f) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + return r + } + if AtomicLoadPInt32(f+140) >= 0 { + v3 = ___lockfile(tls, f) + } else { + v3 = 0 + } + __need_unlock1 = v3 + /* If writing, flush output */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + } + /* If reading, sync position, per POSIX */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } + /* Clear read and write modes */ + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + v6 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v6 + (*TFILE)(unsafe.Pointer(f)).Frpos = v6 + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return 0 +} + +func Xfflush_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfflush(tls, f) +} + +func _locking_getc(tls *TLS, f uintptr) (r1 int32) { + var c, old, old1, r, v, v10, v12, v17, v21, v23, v26, v27, v3, v8 int32 + var v1, v13, v14, v15, v16, v2, v20, v25, v7 uintptr + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v2, v20, v21, v23, v25, v26, v27, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__uflow(tls, f) + } + c = v12 + v15 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v20 = v15 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v21 = v + goto _22 + _22: + old1 = v21 + goto _19 + _19: + ; + v16 = v15 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v17 = r & int32(0x20000000) + goto _18 + _18: + ; + if !!(v17 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v23 = old1 + goto _24 +_24: + if v23&int32(MAYBE_WAITERS) != 0 { + v25 = f + 140 + v26 = int32(1) + v27 = int32(1) + if v27 != 0 { + v27 = int32(FUTEX_PRIVATE) + } + if v26 < Int32FromInt32(0) { + v26 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)|v27), int64(v26)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)), int64(v26)) != 0 + } + return c +} + +func Xfgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc(tls, v1) + goto _3 +_3: + return v2 +} + +func Xfgetln(tls *TLS, f uintptr, plen uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v plen=%v, (%v:)", tls, f, plen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, v1, v2 int32 + var l, v8 Tssize_t + var ret, z, v3, v4, v5, v7 uintptr + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, ret, z, v1, v2, v3, v4, v5, v6, v7, v8 + ret = uintptr(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + Xungetc(tls, v2, f) + if v6 = (*TFILE)(unsafe.Pointer(f)).Frend != 0; v6 { + v5 = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + z = v5 + } + if v6 && v5 != 0 { + ret = (*TFILE)(unsafe.Pointer(f)).Frpos + z++ + v7 = z + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(int64(v7) - int64(ret)) + (*TFILE)(unsafe.Pointer(f)).Frpos = z + } else { + *(*[1]Tsize_t)(unsafe.Pointer(bp)) = [1]Tsize_t{} + v8 = Xgetline(tls, f+168, bp, f) + l = v8 + if v8 > 0 { + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(l) + ret = (*TFILE)(unsafe.Pointer(f)).Fgetln_buf + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func Xfgetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + var off Toff_t + _ = off + off = X__ftello(tls, f) + if off < 0 { + return -int32(1) + } + *(*int64)(unsafe.Pointer(pos)) = off + return 0 +} + +func Xfgets(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var k Tsize_t + var p, z, v6, v7, v9 uintptr + var v2 int64 + var v3 uint64 + var v8 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, k, p, z, v1, v2, v3, v4, v5, v6, v7, v8, v9 + p = s + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if n <= int32(1) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if n < int32(1) { + return uintptr(0) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + return s + } + n-- + for n != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v2 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v2 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v2) + if k < uint64(n) { + v3 = k + } else { + v3 = uint64(n) + } + k = v3 + Xmemcpy(tls, p, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + p += uintptr(k) + n = int32(uint64(n) - k) + if z != 0 || !(n != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 < 0 { + if p == s || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + s = uintptr(0) + } + break + } + n-- + v8 = uint8(c) + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = v8 + if int32(v8) == int32('\n') { + break + } + } + if s != 0 { + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return s +} + +func Xfgets_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgets(tls, s, n, f) +} + +func ___fgetwc_unlocked_internal(tls *TLS, f uintptr) (r Twint_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var c, first, v1, v2 int32 + var l Tsize_t + var v3, v4 uintptr + var _ /* b at bp+16 */ uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = c, first, l, v1, v2, v3, v4 + /* Convert character from buffer if possible */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + l = uint64(Xmbtowc(tls, bp, (*TFILE)(unsafe.Pointer(f)).Frpos, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)))) + if l+uint64(1) >= uint64(1) { + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(l + BoolUint64(!(l != 0))) /* l==0 means 1 byte, null */ + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + /* Convert character byte-by-byte */ + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + first = int32(1) + for cond := true; cond; cond = l == uint64(-Int32FromInt32(2)) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + v1 = v2 + c = v1 + *(*uint8)(unsafe.Pointer(bp + 16)) = uint8(v1) + if c < 0 { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + } + return uint32(0xffffffff) + } + l = Xmbrtowc(tls, bp, bp+16, uint64(1), bp+8) + if l == uint64(-Int32FromInt32(1)) { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + Xungetc(tls, int32(*(*uint8)(unsafe.Pointer(bp + 16))), f) + } + return uint32(0xffffffff) + } + first = 0 + } + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) +} + +func X__fgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var loc Tlocale_t + var ploc uintptr + var wc Twchar_t + _, _, _ = loc, ploc, wc + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + wc = int32(___fgetwc_unlocked_internal(tls, f)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(wc) +} + +func Xfgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var c Twint_t + _, _, _ = __need_unlock, c, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fgetwc_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xfgetws(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v2 int32 + var c Twint_t + var p, v4, v5 uintptr + _, _, _, _, _, _, _ = __need_unlock, c, p, v1, v2, v4, v5 + p = s + v1 = n + n-- + if !(v1 != 0) { + return s + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + for { + if !(n != 0) { + break + } + c = X__fgetwc_unlocked(tls, f) + if c == uint32(0xffffffff) { + break + } + v4 = p + p += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = int32(c) + if c == uint32('\n') { + break + } + goto _3 + _3: + ; + n-- + } + *(*Twchar_t)(unsafe.Pointer(p)) = 0 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + p = s + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if p == s { + v5 = UintptrFromInt32(0) + } else { + v5 = s + } + return v5 +} + +func Xfgetws_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetws(tls, s, n, f) +} + +func Xfileno(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fd, v1 int32 + _, _, _ = __need_unlock, fd, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + fd = (*TFILE)(unsafe.Pointer(f)).Ffd + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if fd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return -int32(1) + } + return fd +} + +func Xfileno_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfileno(tls, f) +} + +func Xflockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if !(Xftrylockfile(tls, f) != 0) { + return + } + ___lockfile(tls, f) + X__register_locked_file(tls, f, ___get_tp(tls)) +} + +type Tcookie = struct { + Fpos Tsize_t + Flen1 Tsize_t + Fsize Tsize_t + Fbuf uintptr + Fmode int32 +} + +type Tmem_FILE = struct { + Ff TFILE + Fc Tcookie + Fbuf [1032]uint8 +} + +func _mseek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64((*Tcookie)(unsafe.Pointer(c)).Fsize)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _mread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var rem Tsize_t + _, _ = c, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + rem = (*Tcookie)(unsafe.Pointer(c)).Flen1 - (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + rem = uint64(0) + } + if len1 > rem { + len1 = rem + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_EOF) + } + Xmemcpy(tls, buf, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + rem -= len1 + if rem > (*TFILE)(unsafe.Pointer(f)).Fbuf_size { + rem = (*TFILE)(unsafe.Pointer(f)).Fbuf_size + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(rem) + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), rem) + *(*Tsize_t)(unsafe.Pointer(c)) += rem + return len1 +} + +func _mwrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var len2, rem Tsize_t + _, _, _ = c, len2, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _mwrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + if (*Tcookie)(unsafe.Pointer(c)).Fmode == int32('a') { + (*Tcookie)(unsafe.Pointer(c)).Fpos = (*Tcookie)(unsafe.Pointer(c)).Flen1 + } + rem = (*Tcookie)(unsafe.Pointer(c)).Fsize - (*Tcookie)(unsafe.Pointer(c)).Fpos + if len1 > rem { + len1 = rem + } + Xmemcpy(tls, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + (*Tcookie)(unsafe.Pointer(c)).Flen1 = (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Flen1 < (*Tcookie)(unsafe.Pointer(c)).Fsize { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Flen1))) = uint8(0) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 && (*Tcookie)(unsafe.Pointer(c)).Fsize != 0 { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Fsize-uint64(1)))) = uint8(0) + } + } + } + return len1 +} + +func _mclose(tls *TLS, m uintptr) (r int32) { + return 0 +} + +func Xfmemopen(tls *TLS, buf uintptr, size Tsize_t, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v mode=%v, (%v:)", tls, buf, size, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var plus, v2 int32 + var v1 uint64 + var v3 Tsize_t + _, _, _, _, _ = f, plus, v1, v2, v3 + plus = BoolInt32(!!(Xstrchr(tls, mode, int32('+')) != 0)) + if !(Xstrchr(tls, __ccgo_ts+1546, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(buf != 0) && size > uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + if buf != 0 { + v1 = uint64(0) + } else { + v1 = size + } + f = Xmalloc(tls, uint64(1304)+v1) + if !(f != 0) { + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(UintptrFromInt32(0)+272)) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + if !(buf != 0) { + buf = f + 1304 + Xmemset(tls, buf, 0, size) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf = buf + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fsize = size + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fmode = int32(*(*uint8)(unsafe.Pointer(mode))) + if !(plus != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = size + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + v3 = Xstrnlen(tls, buf, size) + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + } else { + if plus != 0 { + *(*uint8)(unsafe.Pointer((*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf)) = uint8(0) + } + } + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_mread) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_mwrite) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_mseek) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_mclose) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +func Xfopen(tls *TLS, filename uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var fd, flags int32 + _, _, _ = f, fd, flags + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1546, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Compute the flags to pass to open() */ + flags = X__fmodeflags(tls, mode) + fd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0666)))))) + if fd < 0 { + return uintptr(0) + } + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + f = X__fdopen(tls, fd, mode) + if f != 0 { + return f + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) +} + +type Tfcookie = struct { + Fcookie uintptr + Fiofuncs Tcookie_io_functions_t +} + +type Tcookie_FILE = struct { + Ff TFILE + Ffc Tfcookie + Fbuf [1032]uint8 +} + +func _cookieread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v2, v3, v5 uintptr + var len2, readlen, remain, v1 Tsize_t + var ret Tssize_t + var v4 int32 + _, _, _, _, _, _, _, _, _, _ = fc, len2, readlen, remain, ret, v1, v2, v3, v4, v5 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + ret = int64(-int32(1)) + remain = len1 + readlen = uint64(0) + len2 = len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread != 0) { + goto bail + } + if len2 != 0 { + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len2) + if ret <= 0 { + goto bail + } + readlen += uint64(ret) + remain -= uint64(ret) + } + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) || remain > BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) { + return readlen + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, (*TFILE)(unsafe.Pointer(f)).Frpos, (*TFILE)(unsafe.Pointer(f)).Fbuf_size) + if ret <= 0 { + goto bail + } + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(ret) + v1 = readlen + readlen++ + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + return readlen + goto bail +bail: + ; + if ret == 0 { + v4 = int32(F_EOF) + } else { + v4 = int32(F_ERR) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v4) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = v5 + (*TFILE)(unsafe.Pointer(f)).Frpos = v5 + return readlen +} + +func _cookiewrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v1, v2 uintptr + var len2 Tsize_t + var ret Tssize_t + _, _, _, _, _ = fc, len2, ret, v1, v2 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite != 0) { + return len1 + } + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _cookiewrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len1) + if ret < 0 { + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(0) + } + return uint64(ret) +} + +func _cookieseek(tls *TLS, f uintptr, _off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Toff_t)(unsafe.Pointer(bp)) = _off + var fc uintptr + var res int32 + _, _ = fc, res + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if uint32(whence) > uint32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return int64(-int32(1)) + } + res = (*(*func(*TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, bp, whence) + if res < 0 { + return int64(res) + } + return *(*Toff_t)(unsafe.Pointer(bp)) +} + +func _cookieclose(tls *TLS, f uintptr) (r int32) { + var fc uintptr + _ = fc + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1 != 0 { + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie) + } + return 0 +} + +func Xfopencookie(tls *TLS, cookie uintptr, mode uintptr, iofuncs Tcookie_io_functions_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cookie=%v mode=%v iofuncs=%v, (%v:)", tls, cookie, mode, iofuncs, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f, v1 uintptr + var v2 int32 + _, _, _ = f, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1546, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+fcookie+buffer or fail */ + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + /* Set up our fcookie */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fcookie = cookie + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fiofuncs = iofuncs + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + /* Initialize op ptrs. No problem if some are unneeded. */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_cookieread) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_cookiewrite) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_cookieseek) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_cookieclose) + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func _locking_putc(tls *TLS, c int32, f uintptr) (r1 int32) { + var old, old1, r, v, v10, v12, v18, v22, v24, v27, v28, v3, v8 int32 + var v1, v14, v15, v16, v17, v2, v21, v26, v7 uintptr + var v13 uint8 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v18, v2, v21, v22, v24, v26, v27, v28, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v13 = uint8(c) + v15 = f + 40 + v14 = *(*uintptr)(unsafe.Pointer(v15)) + *(*uintptr)(unsafe.Pointer(v15))++ + *(*uint8)(unsafe.Pointer(v14)) = v13 + v12 = int32(v13) + } else { + v12 = X__overflow(tls, f, int32(uint8(c))) + } + c = v12 + v16 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v21 = v16 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v22 = v + goto _23 + _23: + old1 = v22 + goto _20 + _20: + ; + v17 = v16 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v18 = r & int32(0x20000000) + goto _19 + _19: + ; + if !!(v18 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v24 = old1 + goto _25 +_25: + if v24&int32(MAYBE_WAITERS) != 0 { + v26 = f + 140 + v27 = int32(1) + v28 = int32(1) + if v28 != 0 { + v28 = int32(FUTEX_PRIVATE) + } + if v27 < Int32FromInt32(0) { + v27 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)|v28), int64(v27)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)), int64(v27)) != 0 + } + return c +} + +func Xfputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xfputs(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, s) + return BoolInt32(Xfwrite(tls, s, uint64(1), l, f) == l) - int32(1) +} + +func Xfputs_unlocked(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputs(tls, s, f) +} + +func X__fputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v1 int32 + var loc Tlocale_t + var ploc, v3, v4 uintptr + var v2 uint8 + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _ = l, loc, ploc, v1, v2, v3, v4 + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if BoolInt32(uint32(c) < uint32(128)) != 0 { + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwpos+uintptr(MB_LEN_MAX) < (*TFILE)(unsafe.Pointer(f)).Fwend { + l = Xwctomb(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, c) + if l < 0 { + c = Int32FromUint32(0xffffffff) + } else { + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + } + } else { + l = Xwctomb(tls, bp, c) + if l < 0 || X__fwritex(tls, bp, uint64(l), f) < uint64(l) { + c = Int32FromUint32(0xffffffff) + } + } + } + if uint32(c) == uint32(0xffffffff) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(c) +} + +func Xfputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = int32(X__fputwc_unlocked(tls, c, f)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return uint32(c) +} + +func Xfputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xfputws(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + *(*uintptr)(unsafe.Pointer(bp)) = _ws + var __need_unlock, v1 int32 + var l, v2 Tsize_t + var loc Tlocale_t + var ploc uintptr + var v3 bool + var _ /* buf at bp+8 */ [1024]uint8 + _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3 + l = uint64(0) + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + for { + if v3 = *(*uintptr)(unsafe.Pointer(bp)) != 0; v3 { + v2 = Xwcsrtombs(tls, bp+8, bp, uint64(1024), uintptr(0)) + l = v2 + } + if !(v3 && v2+uint64(1) > uint64(1)) { + break + } + if X__fwritex(tls, bp+8, l, f) < l { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return -int32(1) + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return int32(l) /* 0 or -1 */ +} + +func Xfputws_unlocked(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputws(tls, _ws, f) +} + +func Xfread(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var dest uintptr + var k, l, len1 Tsize_t + var v2, v4 uint64 + _, _, _, _, _, _, _, _ = __need_unlock, dest, k, l, len1, v1, v2, v4 + dest = destv + len1 = size * nmemb + l = len1 + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + /* First exhaust the buffer. */ + if uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)) < l { + v2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + } else { + v2 = l + } + k = v2 + Xmemcpy(tls, dest, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + dest += uintptr(k) + l -= k + } + /* Read the remainder directly */ + for { + if !(l != 0) { + break + } + if X__toread(tls, f) != 0 { + v4 = uint64(0) + } else { + v4 = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, dest, l) + } + k = v4 + if !(k != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return (len1 - l) / size + } + goto _3 + _3: + ; + l -= k + dest += uintptr(k) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return nmemb +} + +func Xfread_unlocked(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfread(tls, destv, size, nmemb, f) +} + +/* The basic idea of this implementation is to open a new FILE, + * hack the necessary parts of the new FILE into the old one, then + * close the new FILE. */ + +/* Locking IS necessary because another thread may provably hold the + * lock, via flockfile or otherwise, when freopen is called, and in that + * case, freopen cannot act until the lock is released. */ + +func Xfreopen(tls *TLS, filename uintptr, mode uintptr, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v f=%v, (%v:)", tls, filename, mode, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fl, v1 int32 + var f2 uintptr + _, _, _, _ = __need_unlock, f2, fl, v1 + fl = X__fmodeflags(tls, mode) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfflush(tls, f) + if !(filename != 0) { + if fl&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + fl &= ^(Int32FromInt32(O_CREAT) | Int32FromInt32(O_EXCL) | Int32FromInt32(O_CLOEXEC)) + if X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFL)), int64(fl)))) < 0 { + goto fail + } + } else { + f2 = Xfopen(tls, filename, mode) + if !(f2 != 0) { + goto fail + } + if (*TFILE)(unsafe.Pointer(f2)).Ffd == (*TFILE)(unsafe.Pointer(f)).Ffd { + (*TFILE)(unsafe.Pointer(f2)).Ffd = -int32(1) + } else { + if X__dup3(tls, (*TFILE)(unsafe.Pointer(f2)).Ffd, (*TFILE)(unsafe.Pointer(f)).Ffd, fl&int32(O_CLOEXEC)) < 0 { + goto fail2 + } + } + (*TFILE)(unsafe.Pointer(f)).Fflags = (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) | (*TFILE)(unsafe.Pointer(f2)).Fflags + (*TFILE)(unsafe.Pointer(f)).Fread = (*TFILE)(unsafe.Pointer(f2)).Fread + (*TFILE)(unsafe.Pointer(f)).Fwrite = (*TFILE)(unsafe.Pointer(f2)).Fwrite + (*TFILE)(unsafe.Pointer(f)).Fseek = (*TFILE)(unsafe.Pointer(f2)).Fseek + (*TFILE)(unsafe.Pointer(f)).Fclose1 = (*TFILE)(unsafe.Pointer(f2)).Fclose1 + Xfclose(tls, f2) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = 0 + (*TFILE)(unsafe.Pointer(f)).Flocale = uintptr(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return f + goto fail2 +fail2: + ; + Xfclose(tls, f2) + goto fail +fail: + ; + Xfclose(tls, f) + return UintptrFromInt32(0) +} + +func Xfscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfscanf(tls, f, fmt, va) +} + +func X__fseeko_unlocked(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + /* Fail immediately for invalid whence argument. */ + if whence != int32(1) && whence != 0 && whence != int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Adjust relative offset for unread data in buffer, if any. */ + if whence == int32(1) && (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + off -= int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + /* Flush write buffer, and report error on failure. */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + return -int32(1) + } + } + /* Leave writing mode */ + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + /* Perform the underlying seek. */ + if (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, off, whence) < 0 { + return -int32(1) + } + /* If seek succeeded, file is seekable and we discard read buffer. */ + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + return 0 +} + +func X__fseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, result, v1 int32 + _, _, _ = __need_unlock, result, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + result = X__fseeko_unlocked(tls, f, off, whence) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return result +} + +func Xfseek(tls *TLS, f uintptr, off int64, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfsetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, *(*int64)(unsafe.Pointer(pos)), 0) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__ftello_unlocked(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + var v1 int32 + _, _ = pos, v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_APP) != 0 && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + v1 = int32(2) + } else { + v1 = int32(1) + } + pos = (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, 0, v1) + if pos < 0 { + return pos + } + /* Adjust for data in buffer. */ + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Frend) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwbase != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } + } + return pos +} + +func X__ftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var pos Toff_t + _, _, _ = __need_unlock, pos, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + pos = X__ftello_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return pos +} + +func Xftell(tls *TLS, f uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + _ = pos + pos = X__ftello(tls, f) + if pos > int64(0x7fffffffffffffff) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + return pos +} + +func Xftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ftello(tls, f) +} + +func X__do_orphaned_stdio_locks(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks + for { + if !(f != 0) { + break + } + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1576) + AtomicStorePInt32(f+140, int32(0x40000000)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1576) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } +} + +func X__unlist_locked_file(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = (*TFILE)(unsafe.Pointer(f)).Fprev_locked + } + if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } else { + (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } + } +} + +func X__register_locked_file(tls *TLS, f uintptr, self Tpthread_t) { + if __ccgo_strace { + trc("tls=%v f=%v self=%v, (%v:)", tls, f, self, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount = int64(1) + (*TFILE)(unsafe.Pointer(f)).Fprev_locked = uintptr(0) + (*TFILE)(unsafe.Pointer(f)).Fnext_locked = (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = f + } + (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks = f +} + +func Xftrylockfile(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var old, owner, r, tid, v, v1, v11, v4, v9 int32 + var self Tpthread_t + var v13, v6 bool + var v2, v3, v8 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, owner, r, self, tid, v, v1, v11, v13, v2, v3, v4, v6, v8, v9 + self = ___get_tp(tls) + tid = (*t__pthread)(unsafe.Pointer(self)).Ftid + owner = AtomicLoadPInt32(f + 140) + if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(0x7fffffffffffffff) { + return -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount++ + return 0 + } + if owner < 0 { + v1 = Int32FromInt32(0) + owner = v1 + AtomicStorePInt32(f+140, v1) + } + if v13 = owner != 0; !v13 { + v2 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1602) + for { + v8 = v2 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1602) + v9 = v + goto _10 + _10: + old = v9 + goto _7 + _7: + ; + if v6 = old == 0; v6 { + v3 = v2 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1602) + v4 = r & int32(0x20000000) + goto _5 + _5: + } + if !(v6 && !(v4 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1602) + v11 = old + goto _12 + _12: + } + if v13 || v11 != 0 { + return -int32(1) + } + X__register_locked_file(tls, f, self) + return 0 +} + +func Xfunlockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(1) { + X__unlist_locked_file(tls, f) + (*TFILE)(unsafe.Pointer(f)).Flockcount = 0 + ___unlockfile(tls, f) + } else { + (*TFILE)(unsafe.Pointer(f)).Flockcount-- + } +} + +func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mode=%v, (%v:)", tls, f, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v3, v4 int32 + var v2 Tlocale_t + _, _, _, _, _ = __need_unlock, v1, v2, v3, v4 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if mode != 0 { + if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + v2 = uintptr(unsafe.Pointer(&X__c_locale)) + } else { + v2 = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + } + (*TFILE)(unsafe.Pointer(f)).Flocale = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fmode != 0) { + if mode > 0 { + v4 = int32(1) + } else { + v4 = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = v4 + } + } + mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return mode +} + +func Xfwprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__fwritex(tls *TLS, s uintptr, l Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v, (%v:)", tls, s, l, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + _, _ = i, n + i = uint64(0) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return uint64(0) + } + if l > uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwend)-int64((*TFILE)(unsafe.Pointer(f)).Fwpos)) { + return (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, l) + } + if (*TFILE)(unsafe.Pointer(f)).Flbf >= 0 { + /* Match /^(.*\n|)/ */ + i = l + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('\n')) { + break + } + goto _1 + _1: + ; + i-- + } + if i != 0 { + n = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, i) + if n < i { + return n + } + s += uintptr(i) + l -= i + } + } + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, s, l) + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + return l + i +} + +func Xfwrite(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var k, l Tsize_t + var v2 uint64 + _, _, _, _, _ = __need_unlock, k, l, v1, v2 + l = size * nmemb + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + k = X__fwritex(tls, src, l, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if k == l { + v2 = nmemb + } else { + v2 = k / size + } + return v2 +} + +func Xfwrite_unlocked(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwrite(tls, src, size, nmemb, f) +} + +func Xfwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwscanf(tls, f, fmt, va) +} + +func _locking_getc1(tls *TLS, f uintptr) (r1 int32) { + var c, old, old1, r, v, v10, v12, v17, v21, v23, v26, v27, v3, v8 int32 + var v1, v13, v14, v15, v16, v2, v20, v25, v7 uintptr + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v2, v20, v21, v23, v25, v26, v27, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__uflow(tls, f) + } + c = v12 + v15 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v20 = v15 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v21 = v + goto _22 + _22: + old1 = v21 + goto _19 + _19: + ; + v16 = v15 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v17 = r & int32(0x20000000) + goto _18 + _18: + ; + if !!(v17 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v23 = old1 + goto _24 +_24: + if v23&int32(MAYBE_WAITERS) != 0 { + v25 = f + 140 + v26 = int32(1) + v27 = int32(1) + if v27 != 0 { + v27 = int32(FUTEX_PRIVATE) + } + if v26 < Int32FromInt32(0) { + v26 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)|v27), int64(v26)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)), int64(v26)) != 0 + } + return c +} + +func Xgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc1(tls, v1) + goto _3 +_3: + return v2 +} + +func X_IO_getc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc(tls, f1) +} + +func Xgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + return v1 +} + +func X_IO_getc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func Xfgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func _locking_getc2(tls *TLS, f uintptr) (r1 int32) { + var c, old, old1, r, v, v10, v12, v17, v21, v23, v26, v27, v3, v8 int32 + var v1, v13, v14, v15, v16, v2, v20, v25, v7 uintptr + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v2, v20, v21, v23, v25, v26, v27, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__uflow(tls, f) + } + c = v12 + v15 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1550) + for { + v20 = v15 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1550) + v21 = v + goto _22 + _22: + old1 = v21 + goto _19 + _19: + ; + v16 = v15 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1550) + v17 = r & int32(0x20000000) + goto _18 + _18: + ; + if !!(v17 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1550) + v23 = old1 + goto _24 +_24: + if v23&int32(MAYBE_WAITERS) != 0 { + v25 = f + 140 + v26 = int32(1) + v27 = int32(1) + if v27 != 0 { + v27 = int32(FUTEX_PRIVATE) + } + if v26 < Int32FromInt32(0) { + v26 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)|v27), int64(v26)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v25), int64(Int32FromInt32(FUTEX_WAKE)), int64(v26)) != 0 + } + return c +} + +func Xgetchar(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc2(tls, v1) + goto _3 +_3: + return v2 +} + +func Xgetchar_unlocked(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v3 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return v1 +} + +func Xgetdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var i, k, m, v11 Tsize_t + var tmp, z, v6, v7, v8, v9 uintptr + var v10 uint8 + var v3 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, k, m, tmp, z, v1, v10, v11, v3, v4, v5, v6, v7, v8, v9 + i = uint64(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !(n != 0) || !(s != 0) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !(*(*uintptr)(unsafe.Pointer(s)) != 0) { + *(*Tsize_t)(unsafe.Pointer(n)) = uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, delim, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v3 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v3 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v3) + } else { + z = uintptr(0) + k = uint64(0) + } + if i+k >= *(*Tsize_t)(unsafe.Pointer(n)) { + m = i + k + uint64(2) + if !(z != 0) && m < Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(4) { + m += m / uint64(2) + } + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + m = i + k + uint64(2) + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + /* Copy as much as fits and ensure no + * pushback remains in the FILE buf. */ + k = *(*Tsize_t)(unsafe.Pointer(n)) - i + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + } + *(*uintptr)(unsafe.Pointer(s)) = tmp + *(*Tsize_t)(unsafe.Pointer(n)) = m + } + if k != 0 { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + i += k + } + if z != 0 { + break + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 == -int32(1) { + if !(i != 0) || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(-int32(1)) + } + break + } + /* If the byte read by getc won't fit without growing the + * output buffer, push it back for next iteration. */ + if i+uint64(1) >= *(*Tsize_t)(unsafe.Pointer(n)) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + *(*uint8)(unsafe.Pointer(v8)) = uint8(c) + } else { + v10 = uint8(c) + v11 = i + i++ + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(v11))) = v10 + if int32(v10) == delim { + break + } + } + goto _2 + _2: + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(i))) = uint8(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(i) +} + +func X__getdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, delim, f) +} + +func Xgetline(tls *TLS, s uintptr, n uintptr, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, int32('\n'), f) +} + +func Xgets(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v3 int32 + var i, v6 Tsize_t + var v4, v5 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, v1, v2, v3, v4, v5, v6 + i = uint64(0) + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdin_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + for { + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v5 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + v2 = v3 + c = v2 + if !(v2 != -int32(1) && c != int32('\n')) { + break + } + v6 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v6))) = uint8(c) + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + if c != int32('\n') && (!((*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Fflags&Uint32FromInt32(F_EOF) != 0) || !(i != 0)) { + s = uintptr(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return s +} + +func Xgetw(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* x at bp+0 */ int32 + _ = v1 + if Xfread(tls, bp, uint64(4), uint64(1), f) != 0 { + v1 = *(*int32)(unsafe.Pointer(bp)) + } else { + v1 = -int32(1) + } + return v1 +} + +func Xgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, f) +} + +func Xgetwchar(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) +} + +func Xgetwchar_unlocked(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetwchar(tls) +} + +var _ofl_head uintptr +var _ofl_lock [1]int32 + +func X__ofl_lock(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) + return uintptr(unsafe.Pointer(&_ofl_head)) +} + +func X__ofl_unlock(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) +} + +func X__ofl_add(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var head uintptr + _ = head + head = X__ofl_lock(tls) + (*TFILE)(unsafe.Pointer(f)).Fnext = *(*uintptr)(unsafe.Pointer(head)) + if *(*uintptr)(unsafe.Pointer(head)) != 0 { + (*TFILE)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(head)))).Fprev = f + } + *(*uintptr)(unsafe.Pointer(head)) = f + X__ofl_unlock(tls) + return f +} + +type Tcookie1 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t +} + +type Tms_FILE = struct { + Ff TFILE + Fc Tcookie1 + Fbuf [1024]uint8 +} + +func _ms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie1)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie1)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64(0x7fffffffffffffff)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie1)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _ms_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _ms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie1)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie1)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + newbuf = Xrealloc(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf, len2) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie1)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fspace), 0, len2-(*Tcookie1)(unsafe.Pointer(c)).Fspace) + (*Tcookie1)(unsafe.Pointer(c)).Fspace = len2 + } + Xmemcpy(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len1 + if (*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Flen1 { + (*Tcookie1)(unsafe.Pointer(c)).Flen1 = (*Tcookie1)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie1)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _ms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_memstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(1)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(48)) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 280 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(1024) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_ms_write) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_ms_seek) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_ms_close) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fmode = -int32(1) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +type Tcookie2 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t + Fmbs Tmbstate_t +} + +type Twms_FILE = struct { + Ff TFILE + Fc Tcookie2 + Fbuf [1]uint8 +} + +func _wms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie2)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie2)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)-base { + goto fail + } + Xmemset(tls, c+48, 0, uint64(8)) + v2 = uint64(base + off) + (*Tcookie2)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _wms_write(tls *TLS, f uintptr, _buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _buf + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _wms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie2)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie2)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + if len2 > uint64(Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)) { + return uint64(0) + } + newbuf = Xrealloc(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf, len2*uint64(4)) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie2)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fspace)*4, 0, uint64(4)*(len2-(*Tcookie2)(unsafe.Pointer(c)).Fspace)) + (*Tcookie2)(unsafe.Pointer(c)).Fspace = len2 + } + len2 = Xmbsnrtowcs(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fpos)*4, bp, len1, (*Tcookie2)(unsafe.Pointer(c)).Fspace-(*Tcookie2)(unsafe.Pointer(c)).Fpos, c+48) + if len2 == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len2 + if (*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Flen1 { + (*Tcookie2)(unsafe.Pointer(c)).Flen1 = (*Tcookie2)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie2)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _wms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_wmemstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(296)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(4)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(56)) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*Twchar_t)(unsafe.Pointer(buf)) = 0 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 288 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_wms_write) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_wms_seek) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_wms_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + Xfwide(tls, f, int32(1)) + return X__ofl_add(tls, f) +} + +func Xpclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pid Tpid_t + var r, v1 int32 + var _ /* status at bp+0 */ int32 + _, _, _ = pid, r, v1 + pid = (*TFILE)(unsafe.Pointer(f)).Fpipe_pid + Xfclose(tls, f) + for { + v1 = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EINTR)) { + break + } + } + if r < 0 { + return int32(X__syscall_ret(tls, uint64(r))) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xperror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + var __need_unlock, old_mode, v1 int32 + var errstr, f, old_locale uintptr + _, _, _, _, _, _ = __need_unlock, errstr, f, old_locale, old_mode, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + errstr = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if msg != 0 && *(*uint8)(unsafe.Pointer(msg)) != 0 { + Xfwrite(tls, msg, Xstrlen(tls, msg), uint64(1), f) + Xfputc(tls, int32(':'), f) + Xfputc(tls, int32(' '), f) + } + Xfwrite(tls, errstr, Xstrlen(tls, errstr), uint64(1), f) + Xfputc(tls, int32('\n'), f) + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) + _ = ap + return ret +} + +func _locking_putc1(tls *TLS, c int32, f uintptr) (r1 int32) { + var old, old1, r, v, v10, v12, v18, v22, v24, v27, v28, v3, v8 int32 + var v1, v14, v15, v16, v17, v2, v21, v26, v7 uintptr + var v13 uint8 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v18, v2, v21, v22, v24, v26, v27, v28, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v13 = uint8(c) + v15 = f + 40 + v14 = *(*uintptr)(unsafe.Pointer(v15)) + *(*uintptr)(unsafe.Pointer(v15))++ + *(*uint8)(unsafe.Pointer(v14)) = v13 + v12 = int32(v13) + } else { + v12 = X__overflow(tls, f, int32(uint8(c))) + } + c = v12 + v16 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v21 = v16 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v22 = v + goto _23 + _23: + old1 = v22 + goto _20 + _20: + ; + v17 = v16 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v18 = r & int32(0x20000000) + goto _19 + _19: + ; + if !!(v18 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v24 = old1 + goto _25 +_25: + if v24&int32(MAYBE_WAITERS) != 0 { + v26 = f + 140 + v27 = int32(1) + v28 = int32(1) + if v28 != 0 { + v28 = int32(FUTEX_PRIVATE) + } + if v27 < Int32FromInt32(0) { + v27 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)|v28), int64(v27)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)), int64(v27)) != 0 + } + return c +} + +func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc1(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func X_IO_putc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc(tls, c1, f1) +} + +func Xputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + return v1 +} + +func X_IO_putc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func Xfputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func _locking_putc2(tls *TLS, c int32, f uintptr) (r1 int32) { + var old, old1, r, v, v10, v12, v18, v22, v24, v27, v28, v3, v8 int32 + var v1, v14, v15, v16, v17, v2, v21, v26, v7 uintptr + var v13 uint8 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, r, v, v1, v10, v12, v13, v14, v15, v16, v17, v18, v2, v21, v22, v24, v26, v27, v28, v3, v5, v7, v8 + v1 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v7 = v1 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v8 = v + goto _9 + _9: + old = v8 + goto _6 + _6: + ; + if v5 = old == 0; v5 { + v2 = v1 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v3 = r & int32(0x20000000) + goto _4 + _4: + } + if !(v5 && !(v3 != 0)) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v10 = old + goto _11 +_11: + if v10 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v13 = uint8(c) + v15 = f + 40 + v14 = *(*uintptr)(unsafe.Pointer(v15)) + *(*uintptr)(unsafe.Pointer(v15))++ + *(*uint8)(unsafe.Pointer(v14)) = v13 + v12 = int32(v13) + } else { + v12 = X__overflow(tls, f, int32(uint8(c))) + } + c = v12 + v16 = f + 140 + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1563) + for { + v21 = v16 + // __asm__ __volatile__ ("lwarx %0, 0, %2" : "=r"(v) : "m"(*p), "r"(p)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 5, __ccgo_ts+1563) + v22 = v + goto _23 + _23: + old1 = v22 + goto _20 + _20: + ; + v17 = v16 + // __asm__ __volatile__ ( + // + // "stwcx. %2, 0, %3 ; mfcr %0" + // : "=r"(r), "=m"(*p) : "r"(v), "r"(p) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+1563) + v18 = r & int32(0x20000000) + goto _19 + _19: + ; + if !!(v18 != 0) { + break + } + } + // __asm__ __volatile__ ("isync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 48, __ccgo_ts+1563) + v24 = old1 + goto _25 +_25: + if v24&int32(MAYBE_WAITERS) != 0 { + v26 = f + 140 + v27 = int32(1) + v28 = int32(1) + if v28 != 0 { + v28 = int32(FUTEX_PRIVATE) + } + if v27 < Int32FromInt32(0) { + v27 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)|v28), int64(v27)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v26), int64(Int32FromInt32(FUTEX_WAKE)), int64(v27)) != 0 + } + return c +} + +func Xputchar(tls *TLS, c1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v, (%v:)", tls, c1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc2(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xputchar_unlocked(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v2 = uint8(c) + v4 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(c))) + } + return v1 +} + +func Xputs(tls *TLS, s uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1, v2 int32 + var v3 uint8 + var v4, v5 uintptr + var v6 bool + _, _, _, _, _, _, _, _ = __need_unlock, r, v1, v2, v3, v4, v5, v6 + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdout_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + if v6 = Xfputs(tls, s, uintptr(unsafe.Pointer(&X__stdout_FILE))) < 0; !v6 { + if int32(uint8(Int32FromUint8('\n'))) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v3 = uint8(Int32FromUint8('\n')) + v5 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = v3 + v2 = int32(v3) + } else { + v2 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(Int32FromUint8('\n')))) + } + } + r = -BoolInt32(v6 || v2 < 0) + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } + return r +} + +func Xputw(tls *TLS, _x int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _x=%v f=%v, (%v:)", tls, _x, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*int32)(unsafe.Pointer(bp)) = _x + return int32(Xfwrite(tls, bp, uint64(4), uint64(1), f)) - int32(1) +} + +func Xputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, f) +} + +func Xputwchar(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, uintptr(unsafe.Pointer(&X__stdout_FILE))) +} + +func Xputwchar_unlocked(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputwchar(tls, c) +} + +func Xremove(tls *TLS, path uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_unlink), int64(path))) + if r == -int32(EISDIR) { + r = int32(X__syscall1(tls, int64(SYS_rmdir), int64(path))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xrename(tls *TLS, old uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_rename), int64(old), int64(new1))))) +} + +func Xrewind(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + X__fseeko_unlocked(tls, f, 0, 0) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_scanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscanf(tls, fmt, va) +} + +func Xsetbuf(tls *TLS, f uintptr, buf uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v, (%v:)", tls, f, buf, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, uint64(BUFSIZ)) +} + +func Xsetbuffer(tls *TLS, f uintptr, buf uintptr, size Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v size=%v, (%v:)", tls, f, buf, size, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, size) +} + +func Xsetlinebuf(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xsetvbuf(tls, f, uintptr(0), int32(_IOLBF), uint64(0)) +} + +/* The behavior of this function is undefined except when it is the first + * operation on the stream, so the presence or absence of locking is not + * observable in a program whose behavior is defined. Thus no locking is + * performed here. No allocation of buffers is performed, but a buffer + * provided by the caller is used as long as it is suitably sized. */ + +func Xsetvbuf(tls *TLS, f uintptr, buf uintptr, type1 int32, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v type1=%v size=%v, (%v:)", tls, f, buf, type1, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if type1 == int32(_IONBF) { + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + } else { + if type1 == int32(_IOLBF) || type1 == _IOFBF { + if buf != 0 && size >= uint64(UNGET) { + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + UintptrFromInt32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = size - uint64(UNGET) + } + if type1 == int32(_IOLBF) && (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + } else { + return -int32(1) + } + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_SVB) + return 0 +} + +func Xsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsnprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xsprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_sscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsscanf(tls, s, fmt, va) +} + +var _buf5 [8]uint8 + +func init() { + p := unsafe.Pointer(&X__stderr_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdio_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf6 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdin_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 64)) = __ccgo_fp(X__stdio_read) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf7 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdout_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdout_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +func Xswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xswscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_swscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xswscanf(tls, s, fmt, va) +} + +const MAXTRIES = 100 + +func Xtempnam(tls *TLS, dir uintptr, pfx uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v pfx=%v, (%v:)", tls, dir, pfx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var dl, l, pl Tsize_t + var r, try int32 + var _ /* s at bp+1 */ [4096]uint8 + _, _, _, _, _ = dl, l, pl, r, try + if !(dir != 0) { + dir = __ccgo_ts + 1615 + } + if !(pfx != 0) { + pfx = __ccgo_ts + 1620 + } + dl = Xstrlen(tls, dir) + pl = Xstrlen(tls, pfx) + l = dl + uint64(1) + pl + uint64(1) + uint64(6) + if l >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, bp+1, dir, dl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl] = uint8('/') + Xmemcpy(tls, bp+1+uintptr(dl)+uintptr(1), pfx, pl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl+uint64(1)+pl] = uint8('_') + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[l] = uint8(0) + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(l)-uintptr(6)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + return Xstrdup(tls, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpfile(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var f uintptr + var fd, try int32 + var _ /* s at bp+0 */ [20]uint8 + _, _, _ = f, fd, try + *(*[20]uint8)(unsafe.Pointer(bp)) = [20]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'f', 'i', 'l', 'e', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+uintptr(13)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open), int64(bp), int64(Int32FromInt32(O_RDWR)|Int32FromInt32(O_CREAT)|Int32FromInt32(O_EXCL)|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0600)))))) + if fd >= 0 { + X__syscall1(tls, int64(SYS_unlink), int64(bp)) + f = X__fdopen(tls, fd, __ccgo_ts+1625) + if !(f != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + } + return f + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpnam(tls *TLS, buf uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, try int32 + var v2 uintptr + var _ /* s at bp+1 */ [19]uint8 + _, _, _ = r, try, v2 + *(*[19]uint8)(unsafe.Pointer(bp + 1)) = [19]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'n', 'a', 'm', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(12)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + if buf != 0 { + v2 = buf + } else { + v2 = uintptr(unsafe.Pointer(&_internal1)) + } + return Xstrcpy(tls, v2, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +var _internal1 [20]uint8 + +func Xungetc(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var v2, v3 uintptr + _, _, _, _ = __need_unlock, v1, v2, v3 + if c == -int32(1) { + return c + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + v3 = f + 8 + *(*uintptr)(unsafe.Pointer(v3))-- + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uint8)(unsafe.Pointer(v2)) = uint8(c) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(uint8(c)) +} + +func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, l, v1, v2 int32 + var loc Tlocale_t + var ploc, v4, v5, p6 uintptr + var v3 bool + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if v3 = !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || c == uint32(0xffffffff); !v3 { + v2 = int32(Xwcrtomb(tls, bp, int32(c), uintptr(0))) + l = v2 + } + if v3 || v2 < 0 || (*TFILE)(unsafe.Pointer(f)).Frpos < (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET)+uintptr(l) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(0xffffffff) + } + if BoolInt32(c < uint32(128)) != 0 { + v5 = f + 8 + *(*uintptr)(unsafe.Pointer(v5))-- + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uint8)(unsafe.Pointer(v4)) = uint8(c) + } else { + p6 = f + 8 + *(*uintptr)(unsafe.Pointer(p6)) -= uintptr(l) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(p6)), bp, uint64(l)) + } + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xvasprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap2 Tva_list + var l int32 + var v1 uintptr + var v2 bool + _, _, _, _ = ap2, l, v1, v2 + ap2 = ap + l = Xvsnprintf(tls, uintptr(0), uint64(0), fmt, ap2) + _ = ap2 + if v2 = l < 0; !v2 { + v1 = Xmalloc(tls, uint64(uint32(l)+uint32(1))) + *(*uintptr)(unsafe.Pointer(s)) = v1 + } + if v2 || !(v1 != 0) { + return -int32(1) + } + return Xvsnprintf(tls, *(*uintptr)(unsafe.Pointer(s)), uint64(uint32(l)+uint32(1)), fmt, ap) +} + +func Xvdprintf(tls *TLS, fd int32, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v ap=%v, (%v:)", tls, fd, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fwrite: __ccgo_fp(X__stdio_write), + Fbuf: fmt, + Ffd: fd, + Flock: -int32(1), + Flbf: -int32(1), + } + return Xvfprintf(tls, bp, fmt, ap) +} + +const ALT_FORM = 8 +const FLAGMASK = 75913 +const GROUPED = 128 +const LDBL_EPSILON3 = 2.22044604925031308085e-16 +const LEFT_ADJ = 8192 +const MARK_POS = 2048 +const PAD_POS = 1 +const ZERO_PAD = 65536 + +const _BARE = 0 +const _LPRE = 1 +const _LLPRE = 2 +const _HPRE = 3 +const _HHPRE = 4 +const _BIGLPRE = 5 +const _ZTPRE = 6 +const _JPRE = 7 +const _STOP = 8 +const _PTR = 9 +const _INT = 10 +const _UINT = 11 +const _ULLONG = 12 +const _LONG = 13 +const _ULONG = 14 +const _SHORT = 15 +const _USHORT = 16 +const _CHAR = 17 +const _UCHAR = 18 +const _LLONG = 19 +const _SIZET = 20 +const _IMAX = 21 +const _UMAX = 22 +const _PDIFF = 23 +const _UIPTR = 24 +const _DBL = 25 +const _LDBL = 26 +const _NOARG = 27 +const _MAXSTATE = 28 + +var _states = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +type Targ = struct { + Ff [0]float64 + Fp [0]uintptr + Fi Tuintmax_t +} + +func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0) { + X__fwritex(tls, s, l, f) + } +} + +func _pad3(tls *TLS, f uintptr, c uint8, w int32, l int32, fl int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uint64 + var _ /* pad at bp+0 */ [256]uint8 + _ = v1 + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0 || l >= w { + return + } + l = w - l + if uint64(l) > uint64(256) { + v1 = uint64(256) + } else { + v1 = uint64(l) + } + Xmemset(tls, bp, int32(c), v1) + for { + if !(uint64(l) >= uint64(256)) { + break + } + _out(tls, f, bp, uint64(256)) + goto _2 + _2: + ; + l = int32(uint64(l) - Uint64FromInt64(256)) + } + _out(tls, f, bp, uint64(l)) +} + +var _xdigits1 = [16]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} + +func _fmt_x(tls *TLS, x Tuintmax_t, s uintptr, lower int32) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(_xdigits1[x&uint64(15)]) | lower) + goto _1 + _1: + ; + x >>= uint64(4) + } + return s +} + +func _fmt_o(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x&uint64(7)) + goto _1 + _1: + ; + x >>= uint64(3) + } + return s +} + +func _fmt_u(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var y uint64 + var v2, v4 uintptr + _, _, _ = y, v2, v4 + for { + if !(x > Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x%uint64(10)) + goto _1 + _1: + ; + x /= uint64(10) + } + y = x + for { + if !(y != 0) { + break + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(uint64('0') + y%uint64(10)) + goto _3 + _3: + ; + y /= uint64(10) + } + return s +} + +// C documentation +// +// /* Do not override this check. The floating point printing code below +// * depends on the float.h constants being right. If they are wrong, it +// * may overflow the stack. */ +type Tcompiler_defines_long_double_incorrectly = [1]uint8 + +func _fmt_fp(tls *TLS, f uintptr, y float64, w int32, p int32, fl int32, t int32) (r1 int32) { + bp := tls.Alloc(560) + defer tls.Free(560) + var a, b, d, ebuf, estr, prefix, r, s, s1, s2, s3, s4, z, v10, v11, v13, v14, v15, v17, v18, v19, v20, v21, v24, v27, v28, v31, v32, v43, v44, v46, v48, v49, v5, v51, v54, v55, v56, v6 uintptr + var carry, carry1, rm, x2 Tuint32_t + var e, i, j, l, need, pl, re, sh, sh1, x, v12, v16, v22, v25, v42, v45, v52, v58, v7, v8, v9 int32 + var round, round1, small float64 + var x1 Tuint64_t + var v1, v3 uint64 + var v36, v37, v38, v39, v40, v41, v57 int64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* big at bp+8 */ [126]Tuint32_t + var _ /* buf at bp+516 */ [22]uint8 + var _ /* e2 at bp+512 */ int32 + var _ /* ebuf0 at bp+538 */ [12]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, carry, carry1, d, e, ebuf, estr, i, j, l, need, pl, prefix, r, re, rm, round, round1, s, s1, s2, s3, s4, sh, sh1, small, x, x1, x2, z, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v24, v25, v27, v28, v3, v31, v32, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v48, v49, v5, v51, v52, v54, v55, v56, v57, v58, v6, v7, v8, v9 + *(*int32)(unsafe.Pointer(bp + 512)) = 0 + prefix = __ccgo_ts + 1628 + ebuf = bp + 538 + uintptr(Uint64FromInt32(3)*Uint64FromInt64(4)) + pl = int32(1) + *(*float64)(unsafe.Pointer(bp)) = y + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if int32(v1>>Int32FromInt32(63)) != 0 { + y = -y + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(3) + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(6) + } else { + prefix++ + pl = Int32FromInt32(0) + } + } + } + *(*float64)(unsafe.Pointer(bp)) = y + v3 = *(*uint64)(unsafe.Pointer(bp)) + goto _4 +_4: + if !(BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< int32(3)+pl { + v7 = w + } else { + v7 = int32(3) + pl + } + return v7 + } + y = Xfrexpl(tls, y, bp+512) * Float64FromInt32(2) + if y != 0 { + *(*int32)(unsafe.Pointer(bp + 512))-- + } + if t|int32(32) == int32('a') { + round = Float64FromFloat64(8) + if t&int32(32) != 0 { + prefix += uintptr(9) + } + pl += int32(2) + if p < 0 || p >= Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)-Int32FromInt32(1) { + re = 0 + } else { + re = Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4) - Int32FromInt32(1) - p + } + if re != 0 { + round *= float64(Int32FromInt32(1) << (Int32FromInt32(LDBL_MANT_DIG) % Int32FromInt32(4))) + for { + v8 = re + re-- + if !(v8 != 0) { + break + } + round *= Float64FromInt32(16) + } + if int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + y = -y + y -= round + y += round + y = -y + } else { + y += round + y -= round + } + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v9 = -*(*int32)(unsafe.Pointer(bp + 512)) + } else { + v9 = *(*int32)(unsafe.Pointer(bp + 512)) + } + estr = _fmt_u(tls, uint64(v9), ebuf) + if estr == ebuf { + estr-- + v10 = estr + *(*uint8)(unsafe.Pointer(v10)) = uint8('0') + } + estr-- + v11 = estr + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v12 = int32('-') + } else { + v12 = int32('+') + } + *(*uint8)(unsafe.Pointer(v11)) = uint8(v12) + estr-- + v13 = estr + *(*uint8)(unsafe.Pointer(v13)) = uint8(t + (Int32FromUint8('p') - Int32FromUint8('a'))) + s = bp + 516 + for cond := true; cond; cond = y != 0 { + x = int32(y) + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32(_xdigits1[x]) | t&int32(32)) + y = Float64FromInt32(16) * (y - float64(x)) + if int64(s)-t__predefined_ptrdiff_t(bp+516) == int64(1) && (y != 0 || p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + v15 = s + s++ + *(*uint8)(unsafe.Pointer(v15)) = uint8('.') + } + } + if int64(p) > int64(Int32FromInt32(INT_MAX)-Int32FromInt32(2))-(int64(ebuf)-int64(estr))-int64(pl) { + return -int32(1) + } + if p != 0 && int64(s)-t__predefined_ptrdiff_t(bp+516)-int64(2) < int64(p) { + l = int32(int64(p+Int32FromInt32(2)) + (int64(ebuf) - int64(estr))) + } else { + l = int32(int64(s) - t__predefined_ptrdiff_t(bp+516) + (int64(ebuf) - int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _out(tls, f, bp+516, uint64(int64(s)-t__predefined_ptrdiff_t(bp+516))) + _pad3(tls, f, uint8('0'), int32(int64(l)-(int64(ebuf)-int64(estr))-(int64(s)-t__predefined_ptrdiff_t(bp+516))), 0, 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v16 = w + } else { + v16 = pl + l + } + return v16 + } + if p < 0 { + p = int32(6) + } + if y != 0 { + y *= Float64FromFloat64(2.68435456e+08) + *(*int32)(unsafe.Pointer(bp + 512)) -= int32(28) + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v18 = bp + 8 + z = v18 + v17 = v18 + r = v17 + a = v17 + } else { + v20 = bp + 8 + uintptr(Uint64FromInt64(504)/Uint64FromInt64(4))*4 - UintptrFromInt32(LDBL_MANT_DIG)*4 - UintptrFromInt32(1)*4 + z = v20 + v19 = v20 + r = v19 + a = v19 + } + for cond := true; cond; cond = y != 0 { + *(*Tuint32_t)(unsafe.Pointer(z)) = uint32(y) + v21 = z + z += 4 + y = Float64FromInt32(1000000000) * (y - float64(*(*Tuint32_t)(unsafe.Pointer(v21)))) + } + for *(*int32)(unsafe.Pointer(bp + 512)) > 0 { + carry = uint32(0) + if int32(29) < *(*int32)(unsafe.Pointer(bp + 512)) { + v22 = int32(29) + } else { + v22 = *(*int32)(unsafe.Pointer(bp + 512)) + } + sh = v22 + d = z - uintptr(1)*4 + for { + if !(d >= a) { + break + } + x1 = uint64(*(*Tuint32_t)(unsafe.Pointer(d)))< a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0) { + z -= 4 + } + *(*int32)(unsafe.Pointer(bp + 512)) -= sh + } + for *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + carry1 = uint32(0) + if int32(9) < -*(*int32)(unsafe.Pointer(bp + 512)) { + v25 = int32(9) + } else { + v25 = -*(*int32)(unsafe.Pointer(bp + 512)) + } + sh1 = v25 + need = int32(uint32(1) + (uint32(p)+Uint32FromInt32(LDBL_MANT_DIG)/Uint32FromUint32(3)+uint32(8))/uint32(9)) + d = a + for { + if !(d < z) { + break + } + rm = *(*Tuint32_t)(unsafe.Pointer(d)) & uint32(int32(1)<>sh1 + carry1 + carry1 = uint32(Int32FromInt32(1000000000)>>sh1) * rm + goto _26 + _26: + ; + d += 4 + } + if !(*(*Tuint32_t)(unsafe.Pointer(a)) != 0) { + a += 4 + } + if carry1 != 0 { + v27 = z + z += 4 + *(*Tuint32_t)(unsafe.Pointer(v27)) = carry1 + } + /* Avoid (slow!) computation past requested precision */ + if t|int32(32) == int32('f') { + v28 = r + } else { + v28 = a + } + b = v28 + if (int64(z)-int64(b))/4 > int64(need) { + z = b + uintptr(need)*4 + } + *(*int32)(unsafe.Pointer(bp + 512)) += sh1 + } + if a < z { + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _29 + _29: + ; + i *= int32(10) + e++ + } + } else { + e = 0 + } + /* Perform rounding: j is precision after the radix (possibly neg) */ + j = p - BoolInt32(t|int32(32) != int32('f'))*e - BoolInt32(t|int32(32) == int32('g') && p != 0) + if int64(j) < int64(9)*((int64(z)-int64(r))/4-int64(1)) { + /* We avoid C's broken division of negative numbers */ + d = r + uintptr(1)*4 + uintptr((j+Int32FromInt32(9)*Int32FromInt32(LDBL_MAX_EXP))/Int32FromInt32(9)-Int32FromInt32(LDBL_MAX_EXP))*4 + j += Int32FromInt32(9) * Int32FromInt32(LDBL_MAX_EXP) + j %= int32(9) + i = int32(10) + j++ + for { + if !(j < int32(9)) { + break + } + goto _30 + _30: + ; + i *= int32(10) + j++ + } + x2 = *(*Tuint32_t)(unsafe.Pointer(d)) % uint32(i) + /* Are there any significant digits past j? */ + if x2 != 0 || d+uintptr(1)*4 != z { + round1 = Float64FromInt32(2) / Float64FromFloat64(2.22044604925031308085e-16) + if *(*Tuint32_t)(unsafe.Pointer(d))/uint32(i)&uint32(1) != 0 || i == int32(1000000000) && d > a && *(*Tuint32_t)(unsafe.Pointer(d + uintptr(-Int32FromInt32(1))*4))&uint32(1) != 0 { + round1 += Float64FromInt32(2) + } + if x2 < uint32(i/int32(2)) { + small = Float64FromFloat64(0.5) + } else { + if x2 == uint32(i/int32(2)) && d+uintptr(1)*4 == z { + small = Float64FromFloat64(1) + } else { + small = Float64FromFloat64(1.5) + } + } + if pl != 0 && int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + round1 *= float64(-Int32FromInt32(1)) + small *= float64(-Int32FromInt32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(d)) -= x2 + /* Decide whether to round by probing round+small */ + if round1+small != round1 { + *(*Tuint32_t)(unsafe.Pointer(d)) = *(*Tuint32_t)(unsafe.Pointer(d)) + uint32(i) + for *(*Tuint32_t)(unsafe.Pointer(d)) > uint32(999999999) { + v31 = d + d -= 4 + *(*Tuint32_t)(unsafe.Pointer(v31)) = uint32(0) + if d < a { + a -= 4 + v32 = a + *(*Tuint32_t)(unsafe.Pointer(v32)) = uint32(0) + } + *(*Tuint32_t)(unsafe.Pointer(d))++ + } + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _33 + _33: + ; + i *= int32(10) + e++ + } + } + } + if z > d+uintptr(1)*4 { + z = d + uintptr(1)*4 + } + } + for { + if !(z > a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0)) { + break + } + goto _34 + _34: + ; + z -= 4 + } + if t|int32(32) == int32('g') { + if !(p != 0) { + p++ + } + if p > e && e >= -int32(4) { + t-- + p -= e + int32(1) + } else { + t -= int32(2) + p-- + } + if !(uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + /* Count trailing zeros in last place */ + if z > a && *(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0 { + i = int32(10) + j = Int32FromInt32(0) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4))%uint32(i) == uint32(0)) { + break + } + goto _35 + _35: + ; + i *= int32(10) + j++ + } + } else { + j = int32(9) + } + if t|int32(32) == int32('f') { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v37 = int64(Int32FromInt32(0)) + } else { + v37 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + if int64(p) < v37 { + v36 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v38 = int64(Int32FromInt32(0)) + } else { + v38 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + v36 = v38 + } + p = int32(v36) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v40 = int64(Int32FromInt32(0)) + } else { + v40 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + if int64(p) < v40 { + v39 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v41 = int64(Int32FromInt32(0)) + } else { + v41 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + v39 = v41 + } + p = int32(v39) + } + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(1)-BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + return -int32(1) + } + l = int32(1) + p + BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) + if t|int32(32) == int32('f') { + if e > int32(INT_MAX)-l { + return -int32(1) + } + if e > 0 { + l += e + } + } else { + if e < 0 { + v42 = -e + } else { + v42 = e + } + estr = _fmt_u(tls, uint64(v42), ebuf) + for int64(ebuf)-int64(estr) < int64(2) { + estr-- + v43 = estr + *(*uint8)(unsafe.Pointer(v43)) = uint8('0') + } + estr-- + v44 = estr + if e < 0 { + v45 = int32('-') + } else { + v45 = int32('+') + } + *(*uint8)(unsafe.Pointer(v44)) = uint8(v45) + estr-- + v46 = estr + *(*uint8)(unsafe.Pointer(v46)) = uint8(t) + if int64(ebuf)-int64(estr) > int64(int32(INT_MAX)-l) { + return -int32(1) + } + l = int32(int64(l) + (int64(ebuf) - int64(estr))) + } + if l > int32(INT_MAX)-pl { + return -int32(1) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + if t|int32(32) == int32('f') { + if a > r { + a = r + } + d = a + for { + if !(d <= r) { + break + } + s2 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if d != a { + for s2 > bp+516 { + s2-- + v48 = s2 + *(*uint8)(unsafe.Pointer(v48)) = uint8('0') + } + } else { + if s2 == bp+516+uintptr(9) { + s2-- + v49 = s2 + *(*uint8)(unsafe.Pointer(v49)) = uint8('0') + } + } + _out(tls, f, s2, uint64(int64(bp+516+uintptr(9))-int64(s2))) + goto _47 + _47: + ; + d += 4 + } + if p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+606, uint64(1)) + } + for { + if !(d < z && p > 0) { + break + } + s3 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + for s3 > bp+516 { + s3-- + v51 = s3 + *(*uint8)(unsafe.Pointer(v51)) = uint8('0') + } + if int32(9) < p { + v52 = int32(9) + } else { + v52 = p + } + _out(tls, f, s3, uint64(v52)) + goto _50 + _50: + ; + d += 4 + p -= int32(9) + } + _pad3(tls, f, uint8('0'), p+int32(9), int32(9), 0) + } else { + if z <= a { + z = a + uintptr(1)*4 + } + d = a + for { + if !(d < z && p >= 0) { + break + } + s4 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if s4 == bp+516+uintptr(9) { + s4-- + v54 = s4 + *(*uint8)(unsafe.Pointer(v54)) = uint8('0') + } + if d != a { + for s4 > bp+516 { + s4-- + v55 = s4 + *(*uint8)(unsafe.Pointer(v55)) = uint8('0') + } + } else { + v56 = s4 + s4++ + _out(tls, f, v56, uint64(1)) + if p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+606, uint64(1)) + } + } + if int64(bp+516+UintptrFromInt32(9))-int64(s4) < int64(p) { + v57 = int64(bp+516+UintptrFromInt32(9)) - int64(s4) + } else { + v57 = int64(p) + } + _out(tls, f, s4, uint64(v57)) + p = int32(int64(p) - (int64(bp+516+UintptrFromInt32(9)) - int64(s4))) + goto _53 + _53: + ; + d += 4 + } + _pad3(tls, f, uint8('0'), p+int32(18), int32(18), 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v58 = w + } else { + v58 = pl + l + } + return v58 +} + +func _getint(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return i +} + +func _printf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, prefix, ws, z, v35, v39, v44, v48, v8 uintptr + var argpos, cnt, l, p, pl, t, w, xp, v36, v40, v42, v43, v47, v5, v50, v6, v7 int32 + var fl, l10n, ps, st uint32 + var i Tsize_t + var v31 uint64 + var v34 int64 + var v45, v49 bool + var _ /* arg at bp+8 */ Targ + var _ /* buf at bp+16 */ [24]uint8 + var _ /* mb at bp+48 */ [4]uint8 + var _ /* s at bp+0 */ uintptr + var _ /* wc at bp+40 */ [2]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, cnt, fl, i, l, l10n, p, pl, prefix, ps, st, t, w, ws, xp, z, v31, v34, v35, v36, v39, v40, v42, v43, v44, v45, v47, v48, v49, v5, v50, v6, v7, v8 + *(*uintptr)(unsafe.Pointer(bp)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + z = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('%') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('%')) { + break + } + goto _3 + _3: + ; + z++ + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } + if int64(z)-int64(a) > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32(int64(z) - int64(a)) + if f != 0 { + _out(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + argpos = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) - int32('0') + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read field width */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*4)) = int32(_INT) + w = Int32FromInt32(0) + } else { + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp))++ + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint(tls, bp) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 3))) == int32('$') { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*4)) = int32(_INT) + p = Int32FromInt32(0) + } else { + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(4) + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp))++ + p = _getint(tls, bp) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states)) + uintptr(st)*58 + uintptr(int32(*(*uint8)(unsafe.Pointer(v8)))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + } else { + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } + } else { + if f != 0 { + _pop_arg(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + z = bp + 16 + uintptr(24) + prefix = __ccgo_ts + 1659 + pl = 0 + t = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + uintptr(-Int32FromInt32(1))))) + /* Transform ls,lc -> S,C */ + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + /* - and 0 flags are mutually exclusive */ + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + switch t { + case int32('n'): + goto _9 + case int32('p'): + goto _10 + case int32('X'): + goto _11 + case int32('x'): + goto _12 + case int32('o'): + goto _13 + case int32('i'): + goto _14 + case int32('d'): + goto _15 + case int32('u'): + goto _16 + case int32('c'): + goto _17 + case int32('s'): + goto _18 + case int32('m'): + goto _19 + case int32('C'): + goto _20 + case int32('S'): + goto _21 + case int32('A'): + goto _22 + case int32('G'): + goto _23 + case int32('F'): + goto _24 + case int32('E'): + goto _25 + case int32('a'): + goto _26 + case int32('g'): + goto _27 + case int32('f'): + goto _28 + case int32('e'): + goto _29 + } + goto _30 + _9: + ; + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + break + } + goto _1 + _10: + ; + if uint64(p) > Uint64FromInt32(2)*Uint64FromInt64(8) { + v31 = uint64(p) + } else { + v31 = Uint64FromInt32(2) * Uint64FromInt64(8) + } + p = int32(v31) + t = int32('x') + fl |= Uint32FromUint32(1) << (Int32FromUint8('#') - Int32FromUint8(' ')) + _12: + ; + _11: + ; + a = _fmt_x(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z, t&int32(32)) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0 && fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(t >> Int32FromInt32(4)) + pl = Int32FromInt32(2) + } + if !(0 != 0) { + goto _32 + } + _13: + ; + a = _fmt_o(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 && int64(p) < int64(z)-int64(a)+int64(1) { + p = int32(int64(z) - int64(a) + int64(1)) + } + _32: + ; + if !(0 != 0) { + goto _33 + } + _15: + ; + _14: + ; + pl = int32(1) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) > uint64(Int64FromInt64(INT64_MAX)) { + *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) = -*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix++ + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(2) + } else { + pl = 0 + } + } + } + _16: + ; + a = _fmt_u(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + _33: + ; + if xp != 0 && p < 0 { + goto overflow + } + if xp != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) && !(p != 0) { + a = z + goto _30 + } + if int64(p) > int64(z)-int64(a)+BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) { + v34 = int64(p) + } else { + v34 = int64(z) - int64(a) + BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) + } + p = int32(v34) + goto _30 + goto narrow_c + narrow_c: + ; + _17: + ; + v36 = Int32FromInt32(1) + p = v36 + v35 = z - uintptr(v36) + a = v35 + *(*uint8)(unsafe.Pointer(v35)) = uint8(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _19: + ; + if !(int32(1) != 0) { + goto _37 + } + a = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + goto _38 + _37: + ; + _18: + ; + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v39 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + v39 = __ccgo_ts + 1669 + } + a = v39 + _38: + ; + if p < 0 { + v40 = int32(INT_MAX) + } else { + v40 = p + } + z = a + uintptr(Xstrnlen(tls, a, uint64(v40))) + if p < 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32(int64(z) - int64(a)) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _20: + ; + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) { + goto narrow_c + } + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[0] = int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[int32(1)] = 0 + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + 40 + p = -int32(1) + _21: + ; + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + v42 = Int32FromInt32(0) + l = v42 + i = uint64(v42) + for { + if v45 = i < uint64(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v45 { + v44 = ws + ws += 4 + v43 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v44))) + l = v43 + } + if !(v45 && v43 >= 0 && uint64(l) <= uint64(p)-i) { + break + } + goto _41 + _41: + ; + i += uint64(l) + } + if l < 0 { + return -int32(1) + } + if i > uint64(INT_MAX) { + goto overflow + } + p = int32(i) + _pad3(tls, f, uint8(' '), w, p, int32(fl)) + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + i = uint64(0) + for { + if v49 = i < uint64(0+uint32(p)) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v49 { + v48 = ws + ws += 4 + v47 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v48))) + l = v47 + } + if !(v49 && i+uint64(v47) <= uint64(p)) { + break + } + _out(tls, f, bp+48, uint64(l)) + goto _46 + _46: + ; + i += uint64(l) + } + _pad3(tls, f, uint8(' '), w, p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > p { + v50 = w + } else { + v50 = p + } + l = v50 + goto _1 + _29: + ; + _28: + ; + _27: + ; + _26: + ; + _25: + ; + _24: + ; + _23: + ; + _22: + ; + if xp != 0 && p < 0 { + goto overflow + } + l = _fmt_fp(tls, f, *(*float64)(unsafe.Pointer(bp + 8)), w, p, int32(fl), t) + if l < 0 { + goto overflow + } + goto _1 + _30: + ; + if int64(p) < int64(z)-int64(a) { + p = int32(int64(z) - int64(a)) + } + if p > int32(INT_MAX)-pl { + goto overflow + } + if w < pl+p { + w = pl + p + } + if w > int32(INT_MAX)-cnt { + goto overflow + } + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl)) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _pad3(tls, f, uint8('0'), p, int32(int64(z)-int64(a)), 0) + _out(tls, f, a, uint64(int64(z)-int64(a))) + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = uint64(1) + for { + if !(i <= uint64(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _51 + _51: + ; + i++ + } + for { + if !(i <= uint64(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _52 + _52: + ; + i++ + } + if i <= uint64(NL_ARGMAX) { + goto inval + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var __need_unlock, olderr, ret, v1 int32 + var saved_buf, v2, v3, v4, v5 uintptr + var _ /* ap2 at bp+0 */ Tva_list + var _ /* internal_buf at bp+128 */ [80]uint8 + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _, _, _, _, _, _ = __need_unlock, olderr, ret, saved_buf, v1, v2, v3, v4, v5 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + saved_buf = uintptr(0) + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _printf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) { + saved_buf = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fbuf = bp + 128 + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(80) + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v3 + v2 = v3 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + ret = -int32(1) + } else { + ret = _printf_core(tls, f, fmt, bp, bp+48, bp+8) + } + if saved_buf != 0 { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + ret = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fbuf = saved_buf + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + } + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +const SIZE_L = 2 +const SIZE_def = 0 +const SIZE_h = -1 +const SIZE_hh = -2 +const SIZE_l = 1 +const SIZE_ll = 3 + +func _store_int(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var __need_unlock, alloc, base, c, invert, matches, size, t, width, v1, v12, v13, v16, v17, v20, v21, v23, v29, v3, v32, v33, v36, v4, v6, v64, v65, v69, v7, v70, v75, v76, v80, v81, v9 int32 + var dest, p, s, tmp, tmp1, wcs, v10, v11, v18, v19, v24, v25, v28, v30, v31, v37, v38, v59, v62, v66, v67, v71, v72, v74, v77, v78, v82, v83 uintptr + var i, k, v68, v73, v79 Tsize_t + var pos Toff_t + var x uint64 + var y float64 + var v63 uint32 + var _ /* scanset at bp+16 */ [257]uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+276 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, base, c, dest, i, invert, k, matches, p, pos, s, size, t, tmp, tmp1, wcs, width, x, y, v1, v10, v11, v12, v13, v16, v17, v18, v19, v20, v21, v23, v24, v25, v28, v29, v3, v30, v31, v32, v33, v36, v37, v38, v4, v59, v6, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v9 + alloc = 0 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + goto input_fail + } + p = fmt + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + v3 = int32(*(*uint8)(unsafe.Pointer(p))) + v4 = BoolInt32(v3 == int32(' ') || uint32(v3)-uint32('\t') < uint32(5)) + goto _5 + _5: + if v4 != 0 { + for { + v6 = int32(*(*uint8)(unsafe.Pointer(p + 1))) + v7 = BoolInt32(v6 == int32(' ') || uint32(v6)-uint32('\t') < uint32(5)) + goto _8 + _8: + if !(v7 != 0) { + break + } + p++ + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + v12 = v9 + v13 = BoolInt32(v12 == int32(' ') || uint32(v12)-uint32('\t') < uint32(5)) + goto _14 + _14: + if !(v13 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + if int32(*(*uint8)(unsafe.Pointer(p))) != int32('%') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('%') { + X__shlim(tls, f, int64(Int32FromInt32(0))) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('%') { + p++ + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v19 = f + 8 + v18 = *(*uintptr)(unsafe.Pointer(v19)) + *(*uintptr)(unsafe.Pointer(v19))++ + v17 = int32(*(*uint8)(unsafe.Pointer(v18))) + } else { + v17 = X__shgetc(tls, f) + } + v16 = v17 + c = v16 + v20 = v16 + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + if !(v21 != 0) { + break + } + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = int32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = X__shgetc(tls, f) + } + c = v23 + } + if c != int32(*(*uint8)(unsafe.Pointer(p))) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('*') { + dest = uintptr(0) + p++ + } else { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('$') { + dest = _arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-int32('0'))) + p += uintptr(2) + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + int32(*(*uint8)(unsafe.Pointer(p))) - int32('0') + goto _27 + _27: + ; + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p++ + } else { + alloc = 0 + } + size = SIZE_def + v28 = p + p++ + switch int32(*(*uint8)(unsafe.Pointer(v28))) { + case int32('h'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('h') { + p++ + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('l') { + p++ + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p-- + default: + goto fmt_fail + } + t = int32(*(*uint8)(unsafe.Pointer(p))) + /* C or S */ + if t&int32(0x2f) == int32(3) { + t |= int32(32) + size = int32(SIZE_l) + } + switch t { + case int32('c'): + if width < int32(1) { + width = int32(1) + } + fallthrough + case int32('['): + case int32('n'): + _store_int(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + default: + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v31 = f + 8 + v30 = *(*uintptr)(unsafe.Pointer(v31)) + *(*uintptr)(unsafe.Pointer(v31))++ + v29 = int32(*(*uint8)(unsafe.Pointer(v30))) + } else { + v29 = X__shgetc(tls, f) + } + v32 = v29 + v33 = BoolInt32(v32 == int32(' ') || uint32(v32)-uint32('\t') < uint32(5)) + goto _34 + _34: + if !(v33 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + } + X__shlim(tls, f, int64(width)) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v38 = f + 8 + v37 = *(*uintptr)(unsafe.Pointer(v38)) + *(*uintptr)(unsafe.Pointer(v38))++ + v36 = int32(*(*uint8)(unsafe.Pointer(v37))) + } else { + v36 = X__shgetc(tls, f) + } + if v36 < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + switch t { + case int32('['): + goto _40 + case int32('c'): + goto _41 + case int32('s'): + goto _42 + case int32('x'): + goto _43 + case int32('X'): + goto _44 + case int32('p'): + goto _45 + case int32('o'): + goto _46 + case int32('u'): + goto _47 + case int32('d'): + goto _48 + case int32('i'): + goto _49 + case int32('G'): + goto _50 + case int32('g'): + goto _51 + case int32('F'): + goto _52 + case int32('f'): + goto _53 + case int32('E'): + goto _54 + case int32('e'): + goto _55 + case int32('A'): + goto _56 + case int32('a'): + goto _57 + } + goto _58 + _42: + ; + _41: + ; + _40: + ; + if t == int32('c') || t == int32('s') { + Xmemset(tls, bp+16, -int32(1), uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if t == int32('s') { + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\t')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\n')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\v')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\f')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\r')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(' ')] = uint8(0) + } + } else { + p++ + v59 = p + if int32(*(*uint8)(unsafe.Pointer(v59))) == int32('^') { + p++ + invert = Int32FromInt32(1) + } else { + invert = 0 + } + Xmemset(tls, bp+16, invert, uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('-')] = uint8(Int32FromInt32(1) - invert) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(']')] = uint8(Int32FromInt32(1) - invert) + } + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + v62 = p + p++ + c = int32(*(*uint8)(unsafe.Pointer(v62 + uintptr(-Int32FromInt32(1))))) + for { + if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { + break + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+c] = uint8(int32(1) - invert) + goto _61 + _61: + ; + c++ + } + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+int32(*(*uint8)(unsafe.Pointer(p)))] = uint8(int32(1) - invert) + goto _60 + _60: + ; + p++ + } + } + wcs = uintptr(0) + s = uintptr(0) + i = uint64(0) + if t == int32('c') { + v63 = uint32(width) + uint32(1) + } else { + v63 = uint32(31) + } + k = uint64(v63) + if size == int32(SIZE_l) { + if alloc != 0 { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + wcs = dest + } + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v67 = f + 8 + v66 = *(*uintptr)(unsafe.Pointer(v67)) + *(*uintptr)(unsafe.Pointer(v67))++ + v65 = int32(*(*uint8)(unsafe.Pointer(v66))) + } else { + v65 = X__shgetc(tls, f) + } + v64 = v65 + c = v64 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v64+int32(1)] != 0) { + break + } + *(*uint8)(unsafe.Pointer(bp)) = uint8(c) + switch Xmbrtowc(tls, bp+276, bp, uint64(1), bp+8) { + case uint64(-Int32FromInt32(1)): + goto input_fail + case uint64(-Int32FromInt32(2)): + continue + } + if wcs != 0 { + v68 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v68)*4)) = *(*Twchar_t)(unsafe.Pointer(bp + 276)) + } + if alloc != 0 && i == k { + k += k + uint64(1) + tmp = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp != 0) { + goto alloc_fail + } + wcs = tmp + } + } + if !(Xmbsinit(tls, bp+8) != 0) { + goto input_fail + } + } else { + if alloc != 0 { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v72 = f + 8 + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + v70 = int32(*(*uint8)(unsafe.Pointer(v71))) + } else { + v70 = X__shgetc(tls, f) + } + v69 = v70 + c = v69 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v69+int32(1)] != 0) { + break + } + v73 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v73))) = uint8(c) + if i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, s, k) + if !(tmp1 != 0) { + goto alloc_fail + } + s = tmp1 + } + } + } else { + v74 = dest + s = v74 + if v74 != 0 { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v78 = f + 8 + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + v76 = int32(*(*uint8)(unsafe.Pointer(v77))) + } else { + v76 = X__shgetc(tls, f) + } + v75 = v76 + c = v75 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v75+int32(1)] != 0) { + break + } + v79 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v79))) = uint8(c) + } + } else { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v83 = f + 8 + v82 = *(*uintptr)(unsafe.Pointer(v83)) + *(*uintptr)(unsafe.Pointer(v83))++ + v81 = int32(*(*uint8)(unsafe.Pointer(v82))) + } else { + v81 = X__shgetc(tls, f) + } + v80 = v81 + c = v80 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v80+int32(1)] != 0) { + break + } + } + } + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('c') && (*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != int64(width) { + goto match_fail + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + goto _58 + _45: + ; + _44: + ; + _43: + ; + base = int32(16) + goto int_common + _46: + ; + base = int32(8) + goto int_common + _48: + ; + _47: + ; + base = int32(10) + goto int_common + _49: + ; + base = 0 + goto int_common + int_common: + ; + x = X__intscan(tls, f, uint32(base), 0, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('p') && dest != 0 { + *(*uintptr)(unsafe.Pointer(dest)) = uintptr(x) + } else { + _store_int(tls, dest, size, x) + } + goto _58 + _57: + ; + _56: + ; + _55: + ; + _54: + ; + _53: + ; + _52: + ; + _51: + ; + _50: + ; + y = X__floatscan(tls, f, size, 0) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if dest != 0 { + switch size { + case SIZE_def: + *(*float32)(unsafe.Pointer(dest)) = float32(y) + case int32(SIZE_l): + *(*float64)(unsafe.Pointer(dest)) = y + case int32(SIZE_L): + *(*float64)(unsafe.Pointer(dest)) = y + break + } + } + goto _58 + _58: + ; + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p++ + } + if !(0 != 0) { + goto _85 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_85: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +func X__isoc99_vfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, f, fmt, ap) +} + +var _states1 = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out1(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + var v1 Tsize_t + var v2 uintptr + _, _ = v1, v2 + for { + v1 = l + l-- + if !(v1 != 0 && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) { + break + } + v2 = s + s += 4 + Xfputwc(tls, *(*Twchar_t)(unsafe.Pointer(v2)), f) + } +} + +func _pad4(tls *TLS, f uintptr, n int32, fl int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 || !(n != 0) || (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return + } + Xfprintf(tls, f, __ccgo_ts+1676, VaList(bp+8, n, __ccgo_ts)) +} + +func _getint1(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s)) += 4 + } + return i +} + +var _sizeprefix = [24]uint8{ + 0: uint8('L'), + 3: uint8('j'), + 4: uint8('L'), + 5: uint8('L'), + 6: uint8('L'), + 8: uint8('j'), + 14: uint8('j'), + 15: uint8('j'), + 20: uint8('j'), + 23: uint8('j'), +} + +func _wprintf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(112) + defer tls.Free(112) + var a, bs, z, v8 uintptr + var argpos, cnt, i, l, p, t, w, xp, v10, v12, v13, v14, v16, v5, v6, v7 int32 + var fl, l10n, ps, st uint32 + var v15 bool + var v9 uint64 + var _ /* arg at bp+16 */ Targ + var _ /* charfmt at bp+24 */ [16]uint8 + var _ /* s at bp+8 */ uintptr + var _ /* wc at bp+40 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, bs, cnt, fl, i, l, l10n, p, ps, st, t, w, xp, z, v10, v12, v13, v14, v15, v16, v5, v6, v7, v8, v9 + *(*uintptr)(unsafe.Pointer(bp + 8)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + z = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('%') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('%')) { + break + } + goto _3 + _3: + ; + z += 4 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } + if (int64(z)-int64(a))/4 > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32((int64(z) - int64(a)) / 4) + if f != 0 { + _out1(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + argpos = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) - int32('0') + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read field width */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*4)) = int32(_INT) + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint1(tls, bp+8) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 3*4)) == int32('$') { + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*4)) = int32(_INT) + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(4) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + p = _getint1(tls, bp+8) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp + 8)) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states1)) + uintptr(st)*58 + uintptr(*(*Twchar_t)(unsafe.Pointer(v8))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + *(*Targ)(unsafe.Pointer(bp + 16)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } else { + if f != 0 { + _pop_arg1(tls, bp+16, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + t = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(-Int32FromInt32(1))*4)) + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + switch t { + case int32('n'): + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + break + } + goto _1 + case int32('c'): + fallthrough + case int32('C'): + if w < int32(1) { + w = int32(1) + } + _pad4(tls, f, w-int32(1), int32(fl)) + if t == int32('C') { + v9 = *(*Tuintmax_t)(unsafe.Pointer(bp + 16)) + } else { + v9 = uint64(Xbtowc(tls, int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 16))))) + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(v9) + _out1(tls, f, bp, uint64(1)) + _pad4(tls, f, w-int32(1), int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('S'): + a = *(*uintptr)(unsafe.Pointer(bp + 16)) + if p < 0 { + v10 = int32(INT_MAX) + } else { + v10 = p + } + z = a + uintptr(Xwcsnlen(tls, a, uint64(v10)))*4 + if p < 0 && *(*Twchar_t)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32((int64(z) - int64(a)) / 4) + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + _out1(tls, f, a, uint64(p)) + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('m'): + *(*uintptr)(unsafe.Pointer(bp + 16)) = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + fallthrough + case int32('s'): + if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { + *(*uintptr)(unsafe.Pointer(bp + 16)) = __ccgo_ts + 1669 + } + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + v12 = Int32FromInt32(0) + l = v12 + i = v12 + for { + if p < 0 { + v13 = int32(INT_MAX) + } else { + v13 = p + } + if v15 = l < v13; v15 { + v14 = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + i = v14 + } + if !(v15 && v14 > 0) { + break + } + goto _11 + _11: + ; + bs += uintptr(i) + l++ + } + if i < 0 { + return -int32(1) + } + if p < 0 && *(*uint8)(unsafe.Pointer(bs)) != 0 { + goto overflow + } + p = l + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + for { + v16 = l + l-- + if !(v16 != 0) { + break + } + i = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + bs += uintptr(i) + _out1(tls, f, bp+40, uint64(1)) + } + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + } + if xp != 0 && p < 0 { + goto overflow + } + Xsnprintf(tls, bp+24, uint64(16), __ccgo_ts+1680, VaList(bp+56, __ccgo_ts+1700+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1702+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1704+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0)), __ccgo_ts+714+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1706+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0)), int32(_sizeprefix[t|int32(32)-int32('a')]), t)) + switch t | Int32FromInt32(32) { + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*float64)(unsafe.Pointer(bp + 16)))) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('p'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*Tuintmax_t)(unsafe.Pointer(bp + 16)))) + break + } + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = int32(1) + for { + if !(i <= int32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg1(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _17 + _17: + ; + i++ + } + for { + if !(i <= int32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _18 + _18: + ; + i++ + } + if i <= int32(NL_ARGMAX) { + return -int32(1) + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfwprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var __need_unlock, olderr, ret, v1 int32 + var _ /* ap2 at bp+0 */ Tva_list + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _ = __need_unlock, olderr, ret, v1 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _wprintf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + ret = _wprintf_core(tls, f, fmt, bp, bp+48, bp+8) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +func _store_int1(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n1(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func _in_set(tls *TLS, set uintptr, c int32) (r int32) { + var j int32 + var p, v3 uintptr + _, _, _ = j, p, v3 + p = set + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') { + if c == int32('-') { + return int32(1) + } + p += 4 + } else { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + if c == int32(']') { + return int32(1) + } + p += 4 + } + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0 && *(*Twchar_t)(unsafe.Pointer(p)) != int32(']')) { + break + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != int32(']') { + v3 = p + p += 4 + j = *(*Twchar_t)(unsafe.Pointer(v3 + uintptr(-Int32FromInt32(1))*4)) + for { + if !(j < *(*Twchar_t)(unsafe.Pointer(p))) { + break + } + if c == j { + return int32(1) + } + goto _2 + _2: + ; + j++ + } + } + if c == *(*Twchar_t)(unsafe.Pointer(p)) { + return int32(1) + } + goto _1 + _1: + ; + p += 4 + } + return 0 +} + +func Xvfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var __need_unlock, alloc, c, gotmatch, invert, l, matches, size, t, width, v1, v10, v22, v3, v36 int32 + var dest, p, s, set, tmp1, tmp2, wcs, v12, v13, v15, v16, v18, v19, v21, v24, v25, v27, v28, v30, v31, v32, v33, v34, v38, v39, v41, v43, v44, v45, v5, v6, v8, v9 uintptr + var i, k, v40 Tsize_t + var pos Toff_t + var v11, v14, v23, v26, v35, v37, v4 uint32 + var _ /* cnt at bp+0 */ Toff_t + var _ /* tmp at bp+8 */ [22]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, c, dest, gotmatch, i, invert, k, l, matches, p, pos, s, set, size, t, tmp1, tmp2, wcs, width, v1, v10, v11, v12, v13, v14, v15, v16, v18, v19, v21, v22, v23, v24, v25, v26, v27, v28, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v4, v40, v41, v43, v44, v45, v5, v6, v8, v9 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + p = fmt + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + if Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p)))) != 0 { + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p + 1*4)))) != 0 { + p += 4 + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = uint32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = Xgetwc(tls, f) + } + v3 = int32(v4) + c = v3 + if !(Xiswspace(tls, uint32(v3)) != 0) { + break + } + pos++ + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + _ = *(*uint8)(unsafe.Pointer(v8)) + } else { + Xungetwc(tls, uint32(c), f) + } + goto _2 + } + if *(*Twchar_t)(unsafe.Pointer(p)) != int32('%') || *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('%') { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('%') { + p += 4 + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = uint32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = Xgetwc(tls, f) + } + v10 = int32(v11) + c = v10 + if !(Xiswspace(tls, uint32(v10)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = uint32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = Xgetwc(tls, f) + } + c = int32(v14) + } + if c != *(*Twchar_t)(unsafe.Pointer(p)) { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v19 = f + 8 + *(*uintptr)(unsafe.Pointer(v19))-- + v18 = *(*uintptr)(unsafe.Pointer(v19)) + _ = *(*uint8)(unsafe.Pointer(v18)) + } else { + Xungetwc(tls, uint32(c), f) + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos++ + goto _2 + } + p += 4 + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('*') { + dest = uintptr(0) + p += 4 + } else { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('$') { + dest = _arg_n1(tls, ap, uint32(*(*Twchar_t)(unsafe.Pointer(p))-int32('0'))) + p += uintptr(2) * 4 + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + *(*Twchar_t)(unsafe.Pointer(p)) - int32('0') + goto _20 + _20: + ; + p += 4 + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p += 4 + } else { + alloc = 0 + } + size = SIZE_def + v21 = p + p += 4 + switch *(*Twchar_t)(unsafe.Pointer(v21)) { + case int32('h'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('h') { + p += 4 + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('l') { + p += 4 + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p -= 4 + default: + goto fmt_fail + } + t = *(*Twchar_t)(unsafe.Pointer(p)) + /* Transform S,C -> ls,lc */ + if t&int32(0x2f) == int32(3) { + size = int32(SIZE_l) + t |= int32(32) + } + if t != int32('n') { + if t != int32('[') && t|int32(32) != int32('c') { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = uint32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = Xgetwc(tls, f) + } + v22 = int32(v23) + c = v22 + if !(Xiswspace(tls, uint32(v22)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v28 = f + 8 + v27 = *(*uintptr)(unsafe.Pointer(v28)) + *(*uintptr)(unsafe.Pointer(v28))++ + v26 = uint32(*(*uint8)(unsafe.Pointer(v27))) + } else { + v26 = Xgetwc(tls, f) + } + c = int32(v26) + } + if c < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v31 = f + 8 + *(*uintptr)(unsafe.Pointer(v31))-- + v30 = *(*uintptr)(unsafe.Pointer(v31)) + _ = *(*uint8)(unsafe.Pointer(v30)) + } else { + Xungetwc(tls, uint32(c), f) + } + } + switch t { + case int32('n'): + _store_int1(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + if t == int32('c') { + if width < int32(1) { + width = int32(1) + } + invert = int32(1) + set = __ccgo_ts + 1708 + } else { + if t == int32('s') { + invert = int32(1) + set = uintptr(unsafe.Pointer(&_spaces1)) + } else { + p += 4 + v32 = p + if *(*Twchar_t)(unsafe.Pointer(v32)) == int32('^') { + p += 4 + invert = Int32FromInt32(1) + } else { + invert = 0 + } + set = p + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + p += 4 + } + for *(*Twchar_t)(unsafe.Pointer(p)) != int32(']') { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + p += 4 + } + } + } + if size == SIZE_def { + v33 = dest + } else { + v33 = uintptr(0) + } + s = v33 + if size == int32(SIZE_l) { + v34 = dest + } else { + v34 = uintptr(0) + } + wcs = v34 + gotmatch = 0 + if width < int32(1) { + width = -int32(1) + } + i = uint64(0) + if alloc != 0 { + if t == int32('c') { + v35 = uint32(width) + uint32(1) + } else { + v35 = uint32(31) + } + k = uint64(v35) + if size == int32(SIZE_l) { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + } + } + for width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v39 = f + 8 + v38 = *(*uintptr)(unsafe.Pointer(v39)) + *(*uintptr)(unsafe.Pointer(v39))++ + v37 = uint32(*(*uint8)(unsafe.Pointer(v38))) + } else { + v37 = Xgetwc(tls, f) + } + v36 = int32(v37) + c = v36 + if v36 < 0 { + break + } + if _in_set(tls, set, c) == invert { + break + } + if wcs != 0 { + v40 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v40)*4)) = c + if alloc != 0 && i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp1 != 0) { + goto alloc_fail + } + wcs = tmp1 + } + } else { + if size != int32(SIZE_l) { + if s != 0 { + v41 = s + uintptr(i) + } else { + v41 = bp + 8 + } + l = Xwctomb(tls, v41, c) + if l < 0 { + goto input_fail + } + i += uint64(l) + if alloc != 0 && i > k-uint64(4) { + k += k + uint64(1) + tmp2 = Xrealloc(tls, s, k) + if !(tmp2 != 0) { + goto alloc_fail + } + s = tmp2 + } + } + } + pos++ + width -= BoolInt32(width > 0) + gotmatch = int32(1) + } + if width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v44 = f + 8 + *(*uintptr)(unsafe.Pointer(v44))-- + v43 = *(*uintptr)(unsafe.Pointer(v44)) + _ = *(*uint8)(unsafe.Pointer(v43)) + } else { + Xungetwc(tls, uint32(c), f) + } + if t == int32('c') || !(gotmatch != 0) { + goto match_fail + } + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('p'): + if width < int32(1) { + width = 0 + } + Xsnprintf(tls, bp+8, uint64(22), __ccgo_ts+1712, VaList(bp+40, int32(1)+BoolInt32(!(dest != 0)), __ccgo_ts+1730, width, uintptr(unsafe.Pointer(&_size_pfx))+uintptr(size+int32(2))*3, t)) + *(*Toff_t)(unsafe.Pointer(bp)) = 0 + if dest != 0 { + v45 = dest + } else { + v45 = bp + } + if Xfscanf(tls, f, bp+8, VaList(bp+40, v45, bp)) == -int32(1) { + goto input_fail + } else { + if !(*(*Toff_t)(unsafe.Pointer(bp)) != 0) { + goto match_fail + } + } + pos += *(*Toff_t)(unsafe.Pointer(bp)) + default: + goto fmt_fail + } + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p += 4 + } + if !(0 != 0) { + goto _46 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_46: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +var _size_pfx = [6][3]uint8{ + 0: {'h', 'h'}, + 1: {'h'}, + 2: {}, + 3: {'l'}, + 4: {'L'}, + 5: {'l', 'l'}, +} + +var _spaces1 = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__isoc99_vfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, f, fmt, ap) +} + +func Xvprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvscanf(tls, fmt, ap) +} + +type Tcookie3 = struct { + Fs uintptr + Fn Tsize_t +} + +func _sn_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3 uintptr + var k Tsize_t + var v1, v2 uint64 + _, _, _, _, _ = c, k, v1, v2, v3 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tcookie3)(unsafe.Pointer(c)).Fn < uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) { + v1 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v1 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + k = v1 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, (*TFILE)(unsafe.Pointer(f)).Fwbase, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + if (*Tcookie3)(unsafe.Pointer(c)).Fn < l { + v2 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v2 = l + } + k = v2 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, s, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + *(*uint8)(unsafe.Pointer((*Tcookie3)(unsafe.Pointer(c)).Fs)) = uint8(0) + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + /* pretend to succeed, even if we discarded extra data */ + return l +} + +func Xvsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uintptr + var v2 uint64 + var _ /* buf at bp+0 */ [1]uint8 + var _ /* c at bp+8 */ Tcookie3 + var _ /* dummy at bp+1 */ [1]uint8 + var _ /* f at bp+24 */ TFILE + _, _ = v1, v2 + if n != 0 { + v1 = s + } else { + v1 = bp + 1 + } + if n != 0 { + v2 = n - uint64(1) + } else { + v2 = uint64(0) + } + *(*Tcookie3)(unsafe.Pointer(bp + 8)) = Tcookie3{ + Fs: v1, + Fn: v2, + } + *(*TFILE)(unsafe.Pointer(bp + 24)) = TFILE{ + Fwrite: __ccgo_fp(_sn_write), + Fbuf: bp, + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 8, + } + *(*uint8)(unsafe.Pointer((*(*Tcookie3)(unsafe.Pointer(bp + 8))).Fs)) = uint8(0) + return Xvfprintf(tls, bp+24, fmt, ap) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xvsprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsnprintf(tls, s, uint64(INT_MAX), fmt, ap) +} + +func _string_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var end, src uintptr + var k Tsize_t + _, _, _ = end, k, src + src = (*TFILE)(unsafe.Pointer(f)).Fcookie + k = len1 + uint64(256) + end = Xmemchr(tls, src, 0, k) + if end != 0 { + k = uint64(int64(end) - int64(src)) + } + if k < len1 { + len1 = k + } + Xmemcpy(tls, buf, src, len1) + (*TFILE)(unsafe.Pointer(f)).Frpos = src + uintptr(len1) + (*TFILE)(unsafe.Pointer(f)).Frend = src + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = src + uintptr(k) + return len1 +} + +func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fread: __ccgo_fp(_string_read), + Fbuf: s, + Flock: -int32(1), + Fcookie: s, + } + return Xvfscanf(tls, bp, fmt, ap) +} + +func X__isoc99_vsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsscanf(tls, s, fmt, ap) +} + +type Tcookie4 = struct { + Fws uintptr + Fl Tsize_t +} + +func _sw_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3, v4, v5 uintptr + var i, v1 int32 + var l0 Tsize_t + var v2 bool + _, _, _, _, _, _, _, _ = c, i, l0, v1, v2, v3, v4, v5 + l0 = l + i = 0 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if s != (*TFILE)(unsafe.Pointer(f)).Fwbase && _sw_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase))) == uint64(-Int32FromInt32(1)) { + return uint64(-Int32FromInt32(1)) + } + for { + if v2 = (*Tcookie4)(unsafe.Pointer(c)).Fl != 0 && l != 0; v2 { + v1 = Xmbtowc(tls, (*Tcookie4)(unsafe.Pointer(c)).Fws, s, l) + i = v1 + } + if !(v2 && v1 >= 0) { + break + } + if !(i != 0) { + i = int32(1) + } + s += uintptr(i) + l -= uint64(i) + (*Tcookie4)(unsafe.Pointer(c)).Fl-- + (*Tcookie4)(unsafe.Pointer(c)).Fws += 4 + } + *(*Twchar_t)(unsafe.Pointer((*Tcookie4)(unsafe.Pointer(c)).Fws)) = 0 + if i < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(i) + } + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v5 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v5 + return l0 +} + +func Xvswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var r, v1 int32 + var _ /* buf at bp+0 */ [256]uint8 + var _ /* c at bp+256 */ Tcookie4 + var _ /* f at bp+272 */ TFILE + _, _ = r, v1 + *(*Tcookie4)(unsafe.Pointer(bp + 256)) = Tcookie4{ + Fws: s, + Fl: n - uint64(1), + } + *(*TFILE)(unsafe.Pointer(bp + 272)) = TFILE{ + Fwrite: __ccgo_fp(_sw_write), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 256, + } + if !(n != 0) { + return -int32(1) + } + r = Xvfwprintf(tls, bp+272, fmt, ap) + _sw_write(tls, bp+272, uintptr(0), uint64(0)) + if uint64(r) >= n { + v1 = -int32(1) + } else { + v1 = r + } + return v1 +} + +func _wstring_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k Tsize_t + var v1, v2, v3 uintptr + var _ /* src at bp+0 */ uintptr + _, _, _, _ = k, v1, v2, v3 + *(*uintptr)(unsafe.Pointer(bp)) = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*uintptr)(unsafe.Pointer(bp)) != 0) { + return uint64(0) + } + k = Xwcsrtombs(tls, (*TFILE)(unsafe.Pointer(f)).Fbuf, bp, (*TFILE)(unsafe.Pointer(f)).Fbuf_size, uintptr(0)) + if k == uint64(-Int32FromInt32(1)) { + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + return uint64(0) + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = *(*uintptr)(unsafe.Pointer(bp)) + if !(len1 != 0) || !(k != 0) { + return uint64(0) + } + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v2)) + return uint64(1) +} + +func Xvswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(496) + defer tls.Free(496) + var _ /* buf at bp+0 */ [256]uint8 + var _ /* f at bp+256 */ TFILE + *(*TFILE)(unsafe.Pointer(bp + 256)) = TFILE{ + Fread: __ccgo_fp(_wstring_read), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Fcookie: s, + } + return Xvfwscanf(tls, bp+256, fmt, ap) +} + +func X__isoc99_vswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvswscanf(tls, s, fmt, ap) +} + +func Xvwprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvwscanf(tls, fmt, ap) +} + +func Xwprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwprintf(tls, fmt, ap) + _ = ap + return ret +} + +func Xwscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_wscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwscanf(tls, fmt, va) +} + +func Xabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xatof(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, uintptr(0)) +} + +func Xatoi(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on INT_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - (int32(*(*uint8)(unsafe.Pointer(v4))) - int32('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatol(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatoll(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LLONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xbsearch(tls *TLS, key uintptr, base uintptr, nel Tsize_t, width Tsize_t, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var sign int32 + var try uintptr + _, _ = sign, try + for nel > uint64(0) { + try = base + uintptr(width*(nel/uint64(2))) + sign = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, try) + if sign < 0 { + nel /= uint64(2) + } else { + if sign > 0 { + base = try + uintptr(width) + nel -= nel/uint64(2) + uint64(1) + } else { + return try + } + } + } + return UintptrFromInt32(0) +} + +func Xdiv(tls *TLS, num int32, den int32) (r Tdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xecvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, j, v1, v3 int32 + var _ /* tmp at bp+0 */ [32]uint8 + _, _, _, _ = i, j, v1, v3 + if uint32(n)-uint32(1) > uint32(15) { + n = int32(15) + } + Xsprintf(tls, bp, __ccgo_ts+1733, VaList(bp+40, n-int32(1), x)) + v1 = BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[0]) == Int32FromUint8('-')) + *(*int32)(unsafe.Pointer(sign)) = v1 + i = v1 + j = 0 + for { + if !(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[i]) != int32('e')) { + break + } + _buf8[j] = (*(*[32]uint8)(unsafe.Pointer(bp)))[i] + goto _2 + _2: + ; + v3 = i + i++ + j += BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[v3]) != int32('.')) + } + _buf8[j] = uint8(0) + *(*int32)(unsafe.Pointer(dp)) = Xatoi(tls, bp+uintptr(i)+uintptr(1)) + int32(1) + return uintptr(unsafe.Pointer(&_buf8)) +} + +var _buf8 [16]uint8 + +func Xfcvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1536) + defer tls.Free(1536) + var i, lz int32 + var _ /* tmp at bp+0 */ [1500]uint8 + _, _ = i, lz + if uint32(n) > uint32(1400) { + n = int32(1400) + } + Xsprintf(tls, bp, __ccgo_ts+1738, VaList(bp+1512, n, x)) + i = BoolInt32(int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[0]) == int32('-')) + if int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[i]) == int32('0') { + lz = int32(Xstrspn(tls, bp+uintptr(i)+uintptr(2), __ccgo_ts+1706)) + } else { + lz = -int32(Xstrcspn(tls, bp+uintptr(i), __ccgo_ts+606)) + } + if n <= lz { + *(*int32)(unsafe.Pointer(sign)) = i + *(*int32)(unsafe.Pointer(dp)) = int32(1) + if uint32(n) > uint32(14) { + n = int32(14) + } + return __ccgo_ts + 1743 + UintptrFromInt32(14) - uintptr(n) + } + return Xecvt(tls, x, n-lz, dp, sign) +} + +func Xgcvt(tls *TLS, x float64, n int32, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v b=%v, (%v:)", tls, x, n, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + Xsprintf(tls, b, __ccgo_ts+1759, VaList(bp+8, n, x)) + return b +} + +func Ximaxabs(tls *TLS, a Tintmax_t) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Ximaxdiv(tls *TLS, num Tintmax_t, den Tintmax_t) (r Timaxdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Timaxdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xlabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xldiv(tls *TLS, num int64, den int64) (r Tldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xllabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xlldiv(tls *TLS, num int64, den int64) (r Tlldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tlldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +type Tcmpfun = uintptr + +func _pntz(tls *TLS, p uintptr) (r1 int32) { + var r, v2, v4, v6 int32 + var v1, v5 uint64 + var v8 bool + _, _, _, _, _, _, _ = r, v1, v2, v4, v5, v6, v8 + v1 = *(*Tsize_t)(unsafe.Pointer(p)) - uint64(1) + v2 = _a_ctz_64(tls, v1) + goto _3 +_3: + r = v2 + if v8 = r != 0; !v8 { + v5 = *(*Tsize_t)(unsafe.Pointer(p + 1*8)) + v6 = _a_ctz_64(tls, v5) + goto _7 + _7: + v4 = int32(Uint64FromInt32(8)*Uint64FromInt64(8) + uint64(v6)) + r = v4 + } + if v8 || uint64(v4) != Uint64FromInt32(8)*Uint64FromInt64(8) { + return r + } + return 0 +} + +func _cycle(tls *TLS, width Tsize_t, ar uintptr, n int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i int32 + var l Tsize_t + var v1 uint64 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _ = i, l, v1 + if n < int32(2) { + return + } + *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)) = bp + for width != 0 { + if uint64(256) < width { + v1 = uint64(256) + } else { + v1 = width + } + l = v1 + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)), *(*uintptr)(unsafe.Pointer(ar)), l) + i = 0 + for { + if !(i < n) { + break + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(ar + uintptr(i+int32(1))*8)), l) + *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)) += uintptr(l) + goto _2 + _2: + ; + i++ + } + width -= l + } +} + +// C documentation +// +// /* shl() and shr() need n > 0 */ +func _shl(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = *(*Tsize_t)(unsafe.Pointer(p)) + *(*Tsize_t)(unsafe.Pointer(p)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) <<= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) |= *(*Tsize_t)(unsafe.Pointer(p)) >> (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p)) <<= uint64(n) +} + +func _shr(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p)) = *(*Tsize_t)(unsafe.Pointer(p + 1*8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p)) >>= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p)) |= *(*Tsize_t)(unsafe.Pointer(p + 1*8)) << (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) >>= uint64(n) +} + +func _sift(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pshift int32, lp uintptr) { + bp := tls.Alloc(912) + defer tls.Free(912) + var i, v1, v2 int32 + var lf, rt uintptr + var _ /* ar at bp+0 */ [113]uintptr + _, _, _, _, _ = i, lf, rt, v1, v2 + i = int32(1) + (*(*[113]uintptr)(unsafe.Pointer(bp)))[0] = head + for pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], lf, arg) >= 0 && (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], rt, arg) >= 0 { + break + } + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, rt, arg) >= 0 { + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v1] = lf + head = lf + pshift -= int32(1) + } else { + v2 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v2] = rt + head = rt + pshift -= int32(2) + } + } + _cycle(tls, width, bp, i) +} + +func _trinkle(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pp uintptr, pshift int32, trusty int32, lp uintptr) { + bp := tls.Alloc(928) + defer tls.Free(928) + var i, trail, v1 int32 + var lf, rt, stepson uintptr + var _ /* ar at bp+16 */ [113]uintptr + var _ /* p at bp+0 */ [2]Tsize_t + _, _, _, _, _, _ = i, lf, rt, stepson, trail, v1 + i = int32(1) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] = *(*Tsize_t)(unsafe.Pointer(pp)) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = *(*Tsize_t)(unsafe.Pointer(pp + 1*8)) + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0] = head + for (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] != uint64(0) { + stepson = head - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift)*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, stepson, (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0], arg) <= 0 { + break + } + if !(trusty != 0) && pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, rt, stepson, arg) >= 0 || (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, stepson, arg) >= 0 { + break + } + } + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[v1] = stepson + head = stepson + trail = _pntz(tls, bp) + _shr(tls, bp, trail) + pshift += trail + trusty = 0 + } + if !(trusty != 0) { + _cycle(tls, width, bp+16, i) + _sift(tls, head, width, cmp, arg, pshift, lp) + } +} + +func X__qsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + bp := tls.Alloc(784) + defer tls.Free(784) + var head, high uintptr + var i, size, v2, v3 Tsize_t + var pshift, trail int32 + var _ /* lp at bp+0 */ [96]Tsize_t + var _ /* p at bp+768 */ [2]Tsize_t + _, _, _, _, _, _, _, _ = head, high, i, pshift, size, trail, v2, v3 + size = width * nel + *(*[2]Tsize_t)(unsafe.Pointer(bp + 768)) = [2]Tsize_t{ + 0: uint64(1), + } + pshift = int32(1) + if !(size != 0) { + return + } + head = base + high = head + uintptr(size) - uintptr(width) + /* Precompute Leonardo numbers, scaled by element width */ + v2 = width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = v2 + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[0] = v2 + i = Uint64FromInt32(2) + for { + v3 = (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(2)] + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(1)] + width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i] = v3 + if !(v3 < size) { + break + } + goto _1 + _1: + ; + i++ + } + for head < high { + if (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0]&uint64(3) == uint64(3) { + _sift(tls, head, width, cmp, arg, pshift, bp) + _shr(tls, bp+768, int32(2)) + pshift += int32(2) + } else { + if (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift-int32(1)] >= uint64(int64(high)-int64(head)) { + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + } else { + _sift(tls, head, width, cmp, arg, pshift, bp) + } + if pshift == int32(1) { + _shl(tls, bp+768, int32(1)) + pshift = 0 + } else { + _shl(tls, bp+768, pshift-int32(1)) + pshift = int32(1) + } + } + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + head += uintptr(width) + } + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + for pshift != int32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[int32(1)] != uint64(0) { + if pshift <= int32(1) { + trail = _pntz(tls, bp+768) + _shr(tls, bp+768, trail) + pshift += trail + } else { + _shl(tls, bp+768, int32(2)) + pshift -= int32(2) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) ^= uint64(7) + _shr(tls, bp+768, int32(1)) + _trinkle(tls, head-uintptr((*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift])-uintptr(width), width, cmp, arg, bp+768, pshift+int32(1), int32(1), bp) + _shl(tls, bp+768, int32(1)) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + _trinkle(tls, head-uintptr(width), width, cmp, arg, bp+768, pshift, int32(1), bp) + } + head -= uintptr(width) + } +} + +func Xqsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + X__qsort_r(tls, base, nel, width, cmp, arg) +} + +func _wrapper_cmp(tls *TLS, v1 uintptr, v2 uintptr, cmp uintptr) (r int32) { + return (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, v1, v2) +} + +func Xqsort(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, base, nel, width, cmp, origin(2)) + } + X__qsort_r(tls, base, nel, width, __ccgo_fp(_wrapper_cmp), cmp) +} + +func _strtox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Toff_t + var y float64 + var v1, v2 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _, _ = cnt, y, v1, v2 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp, prec, int32(1)) + cnt = (*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf)) + if p != 0 { + if cnt != 0 { + v2 = s + uintptr(cnt) + } else { + v2 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v2 + } + return y +} + +func Xstrtof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_strtox(tls, s, p, 0)) +} + +func Xstrtod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(1)) +} + +func Xstrtold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(2)) +} + +func _strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Tsize_t + var y uint64 + var v1 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _ = cnt, y, v1 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf))) + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) + } + return y +} + +func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoimax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoimax(tls, s, p, base) +} + +func X__strtol_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtol(tls, s, p, base) +} + +func X__strtoll_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func X__strtoul_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoul(tls, s, p, base) +} + +func X__strtoull_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoumax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoumax(tls, s, p, base) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1764 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y float64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp+64, prec, int32(1)) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_wcstox(tls, s, p, 0)) +} + +func Xwcstod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(1)) +} + +func Xwcstold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(2)) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read1(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1764 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y uint64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read1) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp+64, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoll(tls, s, p, base) +} + +func Xwcstoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoull(tls, s, p, base) +} + +func Xbcmp(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcmp(tls, s1, s2, n) +} + +func Xbcopy(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + } + Xmemmove(tls, s2, s1, n) +} + +func Xbzero(tls *TLS, s uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + } + Xmemset(tls, s, 0, n) +} + +func Xexplicit_bzero(tls *TLS, d uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v n=%v, (%v:)", tls, d, n, origin(2)) + } + d = Xmemset(tls, d, 0, n) +} + +func Xindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrchr(tls, s, c) +} + +const ALIGN1 = -1 +const HIGHS = 0 +const ONES = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemccpy(tls *TLS, dest uintptr, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v c=%v n=%v, (%v:)", tls, dest, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, wd, ws uintptr + var k Tsize_t + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _, _, _, _ = d, k, s, wd, ws, v2, v3, v6, v7 + d = dest + s = src + c = int32(uint8(c)) + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && int32(v2) != c) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 { + goto tail + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(ws))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && int32(v6) != c) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + if n != 0 { + return d + uintptr(1) + } + return uintptr(0) +} + +const SS = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemchr(tls *TLS, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v src=%v c=%v n=%v, (%v:)", tls, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var s, w, v4 uintptr + _, _, _, _ = k, s, w, v4 + s = src + c = int32(uint8(c)) + for { + if !(uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _1 + _1: + ; + s++ + n-- + } + if n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c { + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(n >= Uint64FromInt64(8) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + n -= Uint64FromInt64(8) + } + s = w + } + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + n-- + } + if n != 0 { + v4 = s + } else { + v4 = uintptr(0) + } + return v4 +} + +func Xmemcmp(tls *TLS, vl uintptr, vr uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v vl=%v vr=%v n=%v, (%v:)", tls, vl, vr, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v2 int32 + _, _, _ = l, r, v2 + l = vl + r = vr + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _1 + _1: + ; + n-- + l++ + r++ + } + if n != 0 { + v2 = int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) + } else { + v2 = 0 + } + return v2 +} + +const LS = 0 +const RS = 0 + +func Xmemcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 uintptr + var w, x Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, s, w, x, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 + d = dest + s = src + for { + if !(uint64(s)%uint64(4) != 0 && n != 0) { + break + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + goto _1 + _1: + ; + n-- + } + if uint64(d)%uint64(4) == uint64(0) { + for { + if !(n >= uint64(16)) { + break + } + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) + goto _4 + _4: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + if n&uint64(8) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + d += uintptr(8) + s += uintptr(8) + } + if n&uint64(4) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + d += uintptr(4) + s += uintptr(4) + } + if n&uint64(2) != 0 { + v5 = d + d++ + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + v7 = d + d++ + v8 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = *(*uint8)(unsafe.Pointer(v8)) + } + if n&uint64(1) != 0 { + *(*uint8)(unsafe.Pointer(d)) = *(*uint8)(unsafe.Pointer(s)) + } + return dest + } + if n >= uint64(32) { + switch uint64(d) % Uint64FromInt32(4) { + case uint64(1): + w = *(*uint32)(unsafe.Pointer(s)) + v9 = d + d++ + v10 = s + s++ + *(*uint8)(unsafe.Pointer(v9)) = *(*uint8)(unsafe.Pointer(v10)) + v11 = d + d++ + v12 = s + s++ + *(*uint8)(unsafe.Pointer(v11)) = *(*uint8)(unsafe.Pointer(v12)) + v13 = d + d++ + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v13)) = *(*uint8)(unsafe.Pointer(v14)) + n -= uint64(3) + for { + if !(n >= uint64(17)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(1))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<= uint64(18)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(2))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<= uint64(19)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(3))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(8) | x<>Int32FromInt32(8) | w<>Int32FromInt32(8) | x<>Int32FromInt32(8) | w< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Search loop */ + for { + /* If remainder of haystack is shorter than needle, done */ + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(k < l && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if k < l { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xmemmem(tls *TLS, h0 uintptr, k Tsize_t, n0 uintptr, l Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h0=%v k=%v n0=%v l=%v, (%v:)", tls, h0, k, n0, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, n uintptr + _, _ = h, n + h = h0 + n = n0 + /* Return immediately on empty needle */ + if !(l != 0) { + return h + } + /* Return immediately when needle is longer than haystack */ + if k < l { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xmemchr(tls, h0, int32(*(*uint8)(unsafe.Pointer(n))), k) + if !(h != 0) || l == uint64(1) { + return h + } + k -= uint64(int64(h) - int64(h0)) + if k < l { + return uintptr(0) + } + if l == uint64(2) { + return _twobyte_memmem(tls, h, k, n) + } + if l == uint64(3) { + return _threebyte_memmem(tls, h, k, n) + } + if l == uint64(4) { + return _fourbyte_memmem(tls, h, k, n) + } + return _twoway_memmem(tls, h, h+uintptr(k), n, l) +} + +const WS = 0 + +type TWT = uint64 + +func Xmemmove(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v2, v3, v6, v7 uintptr + var v1, v8 Tsize_t + _, _, _, _, _, _, _, _ = d, s, v1, v2, v3, v6, v7, v8 + d = dest + s = src + if d == s { + return d + } + if uint64(s)-uint64(d)-n <= uint64(-Int32FromInt32(2))*n { + return Xmemcpy(tls, d, s, n) + } + if d < s { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d)%Uint64FromInt64(8) != 0 { + v1 = n + n-- + if !(v1 != 0) { + return dest + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + } + for { + if !(n >= Uint64FromInt64(8)) { + break + } + *(*TWT)(unsafe.Pointer(d)) = *(*TWT)(unsafe.Pointer(s)) + goto _4 + _4: + ; + n -= Uint64FromInt64(8) + d += uintptr(Uint64FromInt64(8)) + s += uintptr(Uint64FromInt64(8)) + } + } + for { + if !(n != 0) { + break + } + v6 = d + d++ + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + goto _5 + _5: + ; + n-- + } + } else { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d+uintptr(n))%Uint64FromInt64(8) != 0 { + v8 = n + n-- + if !(v8 != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + for n >= Uint64FromInt64(8) { + n -= Uint64FromInt64(8) + *(*TWT)(unsafe.Pointer(d + uintptr(n))) = *(*TWT)(unsafe.Pointer(s + uintptr(n))) + } + } + for n != 0 { + n-- + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + } + return dest +} + +func Xmempcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcpy(tls, dest, src, n) + uintptr(n) +} + +func X__memrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v1 Tsize_t + _, _ = s, v1 + s = m + c = int32(uint8(c)) + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(n)))) == c { + return s + uintptr(n) + } + } + return uintptr(0) +} + +func Xmemrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, m, c, n) +} + +func Xmemset(tls *TLS, dest uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v c=%v n=%v, (%v:)", tls, dest, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c32 uint32 + var c64 uint64 + var k Tsize_t + var s uintptr + _, _, _, _ = c32, c64, k, s + s = dest + /* Fill head and tail with minimal branching. Each + * conditional ensures that all the subsequently used + * offsets are well-defined and in the dest region. */ + if !(n != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(s)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(1)))) = uint8(c) + if n <= uint64(2) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 1)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + 2)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(2)))) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(3)))) = uint8(c) + if n <= uint64(6) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 3)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(4)))) = uint8(c) + if n <= uint64(8) { + return dest + } + /* Advance pointer to align it at a 4-byte boundary, + * and truncate n to a multiple of 4. The previous code + * already took care of any head/tail that get cut off + * by the alignment. */ + k = -uint64(s) & uint64(3) + s += uintptr(k) + n -= k + n &= uint64(-Int32FromInt32(4)) + c32 = uint32(-Int32FromInt32(1)) / Uint32FromInt32(255) * uint32(uint8(c)) + /* In preparation to copy 32 bytes at a time, aligned on + * an 8-byte bounary, fill head/tail up to 28 bytes each. + * As in the initial byte-based head/tail fill, each + * conditional below ensures that the subsequent offsets + * are valid (e.g. !(n<=24) implies n>=28). */ + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(4))) = c32 + if n <= uint64(8) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(8))) = c32 + if n <= uint64(24) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(16))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(28))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(16))) = c32 + /* Align to a multiple of 8 so we can fill 64 bits at a time, + * and avoid writing the same bytes twice as much as is + * practical without introducing additional branching. */ + k = uint64(24) + uint64(s)&uint64(4) + s += uintptr(k) + n -= k + /* If this loop is reached, 28 tail bytes have already been + * filled, so any remainder when n drops below 32 can be + * safely ignored. */ + c64 = uint64(c32) | uint64(c32)<= uint64(32)) { + break + } + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(0))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(8))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(16))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(24))) = c64 + goto _1 + _1: + ; + n -= uint64(32) + s += uintptr(32) + } + return dest +} + +func Xrindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrrchr(tls, s, c) +} + +const ALIGN2 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws, v4, v5 uintptr + var v2, v7 uint8 + _, _, _, _, _, _ = wd, ws, v2, v4, v5, v7 + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + if !(v2 != 0) { + return d + } + goto _1 + _1: + ; + s++ + d++ + } + wd = d + ws = s + for { + if !!((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _3 + _3: + ; + v4 = wd + wd += 8 + v5 = ws + ws += 8 + *(*uint64)(unsafe.Pointer(v4)) = *(*uint64)(unsafe.Pointer(v5)) + } + d = wd + s = ws + } + for { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + if !(v7 != 0) { + break + } + goto _6 + _6: + ; + s++ + d++ + } + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpcpy(tls, d, s) +} + +const ALIGN3 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws uintptr + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _ = wd, ws, v2, v3, v6, v7 + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if !(n != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + goto tail + } + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && v6 != 0) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + Xmemset(tls, d, 0, n) + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpncpy(tls, d, s, n) +} + +func Xstrcasecmp(tls *TLS, _l uintptr, _r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v, (%v:)", tls, _l, _r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + _, _ = l, r + l = _l + r = _r + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcasecmp(tls, l, r) +} + +func Xstrcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcasecmp_l(tls, l, r, loc) +} + +func Xstrcasestr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, n) + for { + if !(*(*uint8)(unsafe.Pointer(h)) != 0) { + break + } + if !(Xstrncasecmp(tls, h, n, l) != 0) { + return h + } + goto _1 + _1: + ; + h++ + } + return uintptr(0) +} + +func Xstrcat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xstrcpy(tls, dest+uintptr(Xstrlen(tls, dest)), src) + return dest +} + +func Xstrchr(tls *TLS, s uintptr, c int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 uintptr + _, _ = r, v1 + r = X__strchrnul(tls, s, c) + if int32(*(*uint8)(unsafe.Pointer(r))) == int32(uint8(c)) { + v1 = r + } else { + v1 = uintptr(0) + } + return v1 +} + +const ALIGN4 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__strchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var w uintptr + _, _ = k, w + c = int32(uint8(c)) + if !(c != 0) { + return s + uintptr(Xstrlen(tls, s)) + } + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { + return s + } + goto _1 + _1: + ; + s++ + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + } + return s +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strchrnul(tls, s, c) +} + +func Xstrcmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) && *(*uint8)(unsafe.Pointer(l)) != 0) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrcpy(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpcpy(tls, dest, src) + return dest +} + +func Xstrcspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p2 uintptr + var v3 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v3, p2 + a = s + if !(*(*uint8)(unsafe.Pointer(c)) != 0) || !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + return uint64(int64(X__strchrnul(tls, s, int32(*(*uint8)(unsafe.Pointer(c))))) - int64(a)) + } + Xmemset(tls, bp, 0, uint64(32)) + for { + if v3 = *(*uint8)(unsafe.Pointer(c)) != 0; v3 { + p2 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p2)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v3 && *(*Tsize_t)(unsafe.Pointer(p2)) != 0) { + break + } + goto _1 + _1: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && !((*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0)) { + break + } + goto _4 + _4: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrlen(tls, s) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xmemcpy(tls, d, s, l+uint64(1)) +} + +func Xstrerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var msg uintptr + _, _ = l, msg + msg = Xstrerror(tls, err) + l = Xstrlen(tls, msg) + if l >= buflen { + if buflen != 0 { + Xmemcpy(tls, buf, msg, buflen-uint64(1)) + *(*uint8)(unsafe.Pointer(buf + uintptr(buflen-uint64(1)))) = uint8(0) + } + return int32(ERANGE) + } + Xmemcpy(tls, buf, msg, l+uint64(1)) + return 0 +} + +func X__xpg_strerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrerror_r(tls, err, buf, buflen) +} + +func Xstrlcat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrnlen(tls, d, n) + if l == n { + return l + Xstrlen(tls, s) + } + return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) +} + +const ALIGN5 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, wd, ws uintptr + var v1 Tsize_t + var v3, v7 uint8 + var v4, v8 bool + _, _, _, _, _, _, _, _ = d0, wd, ws, v1, v3, v4, v7, v8 + d0 = d + v1 = n + n-- + if !(v1 != 0) { + goto finish + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v4 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v4 { + v3 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v3 + } + if !(v4 && v3 != 0) { + break + } + goto _2 + _2: + ; + n-- + s++ + d++ + } + if n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*Tsize_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _5 + _5: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + } + for { + if v8 = n != 0; v8 { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + } + if !(v8 && v7 != 0) { + break + } + goto _6 + _6: + ; + n-- + s++ + d++ + } + *(*uint8)(unsafe.Pointer(d)) = uint8(0) + goto finish +finish: + ; + return uint64(int64(d)-int64(d0)) + Xstrlen(tls, s) + return r +} + +const ALIGN6 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, w uintptr + _, _ = a, w + a = s + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return uint64(int64(s) - int64(a)) + } + goto _1 + _1: + ; + s++ + } + w = s + for { + if !!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrncasecmp(tls, l, r, n) +} + +func Xstrncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strncasecmp_l(tls, l, r, n, loc) +} + +func Xstrncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xstrlen(tls, d)) + for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d++ + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + } + v3 = d + d++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(0) + return a +} + +func Xstrncmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpncpy(tls, d, s, n) + return d +} + +func Xstrndup(tls *TLS, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrnlen(tls, s, n) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + Xmemcpy(tls, d, s, l) + *(*uint8)(unsafe.Pointer(d + uintptr(l))) = uint8(0) + return d +} + +func Xstrnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var v1 uint64 + _, _ = p, v1 + p = Xmemchr(tls, s, 0, n) + if p != 0 { + v1 = uint64(int64(p) - int64(s)) + } else { + v1 = n + } + return v1 +} + +func Xstrpbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xstrcspn(tls, s, b)) + if *(*uint8)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xstrrchr(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, s, c, Xstrlen(tls, s)+uint64(1)) +} + +func Xstrsep(tls *TLS, str uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v str=%v sep=%v, (%v:)", tls, str, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, s, v1 uintptr + _, _, _ = end, s, v1 + s = *(*uintptr)(unsafe.Pointer(str)) + if !(s != 0) { + return UintptrFromInt32(0) + } + end = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(end)) != 0 { + v1 = end + end++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + end = uintptr(0) + } + *(*uintptr)(unsafe.Pointer(str)) = end + return s +} + +var _strings = [671]uint8{'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', 0, 'H', 'a', 'n', 'g', 'u', 'p', 0, 'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 0, 'Q', 'u', 'i', 't', 0, 'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'i', 'n', 's', 't', 'r', 'u', 'c', 't', 'i', 'o', 'n', 0, 'T', 'r', 'a', 'c', 'e', '/', 'b', 'r', 'e', 'a', 'k', 'p', 'o', 'i', 'n', 't', ' ', 't', 'r', 'a', 'p', 0, 'A', 'b', 'o', 'r', 't', 'e', 'd', 0, 'B', 'u', 's', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'r', 'i', 't', 'h', 'm', 'e', 't', 'i', 'c', ' ', 'e', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n', 0, 'K', 'i', 'l', 'l', 'e', 'd', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '1', 0, 'S', 'e', 'g', 'm', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', ' ', 'f', 'a', 'u', 'l', 't', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '2', 0, 'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e', 0, 'A', 'l', 'a', 'r', 'm', ' ', 'c', 'l', 'o', 'c', 'k', 0, 'T', 'e', 'r', 'm', 'i', 'n', 'a', 't', 'e', 'd', 0, 'S', 't', 'a', 'c', 'k', ' ', 'f', 'a', 'u', 'l', 't', 0, 'C', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 't', 'u', 's', 0, 'C', 'o', 'n', 't', 'i', 'n', 'u', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 's', 'i', 'g', 'n', 'a', 'l', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'i', 'n', 'p', 'u', 't', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'o', 'u', 't', 'p', 'u', 't', ')', 0, 'U', 'r', 'g', 'e', 'n', 't', ' ', 'I', '/', 'O', ' ', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', 0, 'C', 'P', 'U', ' ', 't', 'i', 'm', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'F', 'i', 'l', 'e', ' ', 's', 'i', 'z', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'P', 'r', 'o', 'f', 'i', 'l', 'i', 'n', 'g', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'W', 'i', 'n', 'd', 'o', 'w', ' ', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 0, 'I', '/', 'O', ' ', 'p', 'o', 's', 's', 'i', 'b', 'l', 'e', 0, 'P', 'o', 'w', 'e', 'r', ' ', 'f', 'a', 'i', 'l', 'u', 'r', 'e', 0, 'B', 'a', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l', 0, 'R', 'T', '3', '2', 0, 'R', 'T', '3', '3', 0, 'R', 'T', '3', '4', 0, 'R', 'T', '3', '5', 0, 'R', 'T', '3', '6', 0, 'R', 'T', '3', '7', 0, 'R', 'T', '3', '8', 0, 'R', 'T', '3', '9', 0, 'R', 'T', '4', '0', 0, 'R', 'T', '4', '1', 0, 'R', 'T', '4', '2', 0, 'R', 'T', '4', '3', 0, 'R', 'T', '4', '4', 0, 'R', 'T', '4', '5', 0, 'R', 'T', '4', '6', 0, 'R', 'T', '4', '7', 0, 'R', 'T', '4', '8', 0, 'R', 'T', '4', '9', 0, 'R', 'T', '5', '0', 0, 'R', 'T', '5', '1', 0, 'R', 'T', '5', '2', 0, 'R', 'T', '5', '3', 0, 'R', 'T', '5', '4', 0, 'R', 'T', '5', '5', 0, 'R', 'T', '5', '6', 0, 'R', 'T', '5', '7', 0, 'R', 'T', '5', '8', 0, 'R', 'T', '5', '9', 0, 'R', 'T', '6', '0', 0, 'R', 'T', '6', '1', 0, 'R', 'T', '6', '2', 0, 'R', 'T', '6', '3', 0, 'R', 'T', '6', '4'} + +func Xstrsignal(tls *TLS, signum int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v signum=%v, (%v:)", tls, signum, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v2 int32 + _, _ = s, v2 + s = uintptr(unsafe.Pointer(&_strings)) + signum = signum + if uint32(signum)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + signum = 0 + } + for { + v2 = signum + signum-- + if !(v2 != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + goto _1 + _1: + ; + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xstrspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p3 uintptr + var v4 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v4, p3 + a = s + *(*[4]Tsize_t)(unsafe.Pointer(bp)) = [4]Tsize_t{} + if !(*(*uint8)(unsafe.Pointer(c)) != 0) { + return uint64(0) + } + if !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c)))) { + break + } + goto _1 + _1: + ; + s++ + } + return uint64(int64(s) - int64(a)) + } + for { + if v4 = *(*uint8)(unsafe.Pointer(c)) != 0; v4 { + p3 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p3)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v4 && *(*Tsize_t)(unsafe.Pointer(p3)) != 0) { + break + } + goto _2 + _2: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0) { + break + } + goto _5 + _5: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func _twobyte_strstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64(int64(z)-int64(h)) < l { + /* Fast estimate for MAX(l,63) */ + grow = l | uint64(63) + z2 = Xmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) + } + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xstrstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle */ + if !(*(*uint8)(unsafe.Pointer(n)) != 0) { + return h + } + /* Use faster algorithms for short needles */ + h = Xstrchr(tls, h, int32(*(*uint8)(unsafe.Pointer(n)))) + if !(h != 0) || !(*(*uint8)(unsafe.Pointer(n + 1)) != 0) { + return h + } + if !(*(*uint8)(unsafe.Pointer(h + 1)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 2)) != 0) { + return _twobyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 2)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 3)) != 0) { + return _threebyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 3)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 4)) != 0) { + return _fourbyte_strstr(tls, h, n) + } + return _twoway_strstr(tls, h, n) +} + +func Xstrtok(tls *TLS, s uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4 uintptr + var v2 bool + _, _, _, _ = v1, v2, v3, v4 + if v2 = !(s != 0); v2 { + v1 = _p2 + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + _p2 = v3 + return v3 + } + _p2 = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(_p2)) != 0 { + v4 = _p2 + _p2++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + _p2 = uintptr(0) + } + return s +} + +var _p2 uintptr + +func Xstrtok_r(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xstrverscmp(tls *TLS, l0 uintptr, r0 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l0=%v r0=%v, (%v:)", tls, l0, r0, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, z int32 + var dp, i, j, v2 Tsize_t + var l, r uintptr + _, _, _, _, _, _, _, _ = c, dp, i, j, l, r, z, v2 + l = l0 + r = r0 + z = int32(1) + /* Find maximal matching prefix and track its maximal digit + * suffix and whether those digits are all zeros. */ + v2 = Uint64FromInt32(0) + i = v2 + dp = v2 + for { + if !(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))) { + break + } + c = int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) + if !(c != 0) { + return 0 + } + if !(BoolInt32(uint32(c)-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + dp = i + uint64(1) + z = Int32FromInt32(1) + } else { + if c != int32('0') { + z = 0 + } + } + goto _1 + _1: + ; + i++ + } + if uint32(int32(*(*uint8)(unsafe.Pointer(l + uintptr(dp))))-int32('1')) < uint32(9) && uint32(int32(*(*uint8)(unsafe.Pointer(r + uintptr(dp))))-int32('1')) < uint32(9) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ + j = i + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return int32(1) + } + goto _3 + _3: + ; + j++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-uint32('0') < uint32(10)) != 0 { + return -int32(1) + } + } else { + if z != 0 && dp < i && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-uint32('0') < uint32(10)) != 0 || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-uint32('0') < uint32(10)) != 0) { + /* Otherwise, if common prefix of digit sequence is + * all zeros, digits order less than non-digits. */ + return int32(uint8(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-Int32FromUint8('0'))) - int32(uint8(int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-Int32FromUint8('0'))) + } + } + return int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(r + uintptr(i)))) +} + +func Xswab(tls *TLS, _src uintptr, _dest uintptr, n Tssize_t) { + if __ccgo_strace { + trc("tls=%v _src=%v _dest=%v n=%v, (%v:)", tls, _src, _dest, n, origin(2)) + } + var dest, src uintptr + _, _ = dest, src + src = _src + dest = _dest + for { + if !(n > int64(1)) { + break + } + *(*uint8)(unsafe.Pointer(dest)) = *(*uint8)(unsafe.Pointer(src + 1)) + *(*uint8)(unsafe.Pointer(dest + 1)) = *(*uint8)(unsafe.Pointer(src)) + dest += uintptr(2) + src += uintptr(2) + goto _1 + _1: + ; + n -= int64(2) + } +} + +func Xwcpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcscpy(tls, d, s) + uintptr(Xwcslen(tls, s))*4 +} + +func Xwcpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsncpy(tls, d, s, n) + uintptr(Xwcsnlen(tls, s, n))*4 +} + +func Xwcscasecmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, uint64(-Int32FromInt32(1))) +} + +func Xwcscasecmp_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscasecmp(tls, l, r) +} + +func Xwcscat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xwcscpy(tls, dest+uintptr(Xwcslen(tls, dest))*4, src) + return dest +} + +func Xwcschr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + if !(c != 0) { + return s + uintptr(Xwcslen(tls, s))*4 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + s += 4 + } + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcscmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2 int32 + _ = v2 + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + l += 4 + r += 4 + } + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v2 = -int32(1) + } else { + v2 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + return v2 +} + +func Xwcscpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Twchar_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v2 = s + s += 4 + v1 = *(*Twchar_t)(unsafe.Pointer(v2)) + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = v1 + if !(v1 != 0) { + break + } + } + return a +} + +func Xwcscspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 uint64 + _, _, _, _ = a, v1, v2, v3 + if !(*(*Twchar_t)(unsafe.Pointer(c)) != 0) { + return Xwcslen(tls, s) + } + if !(*(*Twchar_t)(unsafe.Pointer(c + 1*4)) != 0) { + v3 = s + a = v3 + v2 = Xwcschr(tls, v3, *(*Twchar_t)(unsafe.Pointer(c))) + s = v2 + if v2 != 0 { + v1 = uint64((int64(s) - int64(a)) / 4) + } else { + v1 = Xwcslen(tls, a) + } + return v1 + } + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && !(Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0)) { + break + } + goto _4 + _4: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xwcslen(tls, s) + d = Xmalloc(tls, (l+uint64(1))*uint64(4)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xwmemcpy(tls, d, s, l+uint64(1)) +} + +func Xwcslen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsncasecmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v1 Tsize_t + _ = v1 + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0 && n != 0 && (*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) || Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) == Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l += 4 + r += 4 + n-- + } + return int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) - Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r))))) +} + +func Xwcsncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v locale=%v, (%v:)", tls, l, r, n, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, n) +} + +func Xwcsncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xwcslen(tls, d)) * 4 + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = 0 + return a +} + +func Xwcsncmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwcsncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2 uintptr + _, _, _ = a, v1, v2 + a = d + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + Xwmemset(tls, d, 0, n) + return a +} + +func Xwcsnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var z uintptr + _ = z + z = Xwmemchr(tls, s, 0, n) + if z != 0 { + n = uint64((int64(z) - int64(s)) / 4) + } + return n +} + +func Xwcspbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xwcscspn(tls, s, b)) * 4 + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = UintptrFromInt32(0) + } + return v1 +} + +func Xwcsrchr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v2 uintptr + _, _ = p, v2 + p = s + uintptr(Xwcslen(tls, s))*4 + for { + if !(p >= s && *(*Twchar_t)(unsafe.Pointer(p)) != c) { + break + } + goto _1 + _1: + ; + p -= 4 + } + if p >= s { + v2 = p + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcsspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func _twoway_wcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var grow, ip, jp, k, l, mem, mem0, ms, p, p0, v2, v3, v4, v5, v6, v7 Tsize_t + var z, z2 uintptr + var v11, v8 uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = grow, ip, jp, k, l, mem, mem0, ms, p, p0, z, z2, v11, v2, v3, v4, v5, v6, v7, v8 + /* Computing length of needle */ + l = uint64(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(h + uintptr(l)*4)) != 0) { + break + } + goto _1 + _1: + ; + l++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 { + return uintptr(0) + } /* hit the end of h */ + /* Compute maximal suffix */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v2 = Uint64FromInt32(1) + p = v2 + k = v2 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) > *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) < *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xwmemcmp(tls, n, n+uintptr(p)*4, ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64((int64(z)-int64(h))/4) < l { + /* Fast estimate for MIN(l,63) */ + grow = l | uint64(63) + z2 = Xwmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64((int64(z)-int64(h))/4) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) * 4 + } + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k)*4))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 { + h += uintptr(k-ms) * 4 + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k-uint64(1))*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k-uint64(1))*4))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) * 4 + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xwcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle or haystack */ + if !(*(*Twchar_t)(unsafe.Pointer(n)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h)) != 0) { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xwcschr(tls, h, *(*Twchar_t)(unsafe.Pointer(n))) + if !(h != 0) || !(*(*Twchar_t)(unsafe.Pointer(n + 1*4)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h + 1*4)) != 0) { + return uintptr(0) + } + return _twoway_wcsstr(tls, h, n) +} + +func Xwcstok(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xwcsspn(tls, s, sep)) * 4 + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xwcscspn(tls, s, sep))*4 + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5)) += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xwcswcs(tls *TLS, haystack uintptr, needle uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v haystack=%v needle=%v, (%v:)", tls, haystack, needle, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsstr(tls, haystack, needle) +} + +func Xwmemchr(tls *TLS, s uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v n=%v, (%v:)", tls, s, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + n-- + s += 4 + } + if n != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwmemcmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r))) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwmemcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Tsize_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + v3 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = *(*Twchar_t)(unsafe.Pointer(v3)) + } + return a +} + +func Xwmemmove(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, v3, v4 uintptr + var v1, v2 Tsize_t + _, _, _, _, _ = d0, v1, v2, v3, v4 + d0 = d + if d == s { + return d + } + if uint64(d)-uint64(s) < n*uint64(4) { + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + *(*Twchar_t)(unsafe.Pointer(d + uintptr(n)*4)) = *(*Twchar_t)(unsafe.Pointer(s + uintptr(n)*4)) + } + } else { + for { + v2 = n + n-- + if !(v2 != 0) { + break + } + v3 = d + d += 4 + v4 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = *(*Twchar_t)(unsafe.Pointer(v4)) + } + } + return d0 +} + +func Xwmemset(tls *TLS, d uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v c=%v n=%v, (%v:)", tls, d, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 uintptr + var v1 Tsize_t + _, _, _ = ret, v1, v2 + ret = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = c + } + return ret +} + +func Xmkdtemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var retries, v1 int32 + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1772, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if !(Xmkdir(tls, template, uint32(0700)) != 0) { + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1772, uint64(6)) + return uintptr(0) +} + +func Xmkostemp(tls *TLS, template uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v flags=%v, (%v:)", tls, template, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, flags) +} + +func X__mkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var fd, retries, v1, v3 int32 + var l Tsize_t + _, _, _, _, _ = fd, l, retries, v1, v3 + l = Xstrlen(tls, template) + if l < uint64(6) || uint64(len1) > l-uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1772, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + flags -= flags & (Int32FromInt32(03) | Int32FromInt32(O_PATH)) + retries = int32(100) + for { + ___randname(tls, template+uintptr(l)-uintptr(len1)-uintptr(6)) + v3 = Xopen(tls, template, flags|int32(O_RDWR)|int32(O_CREAT)|int32(O_EXCL), VaList(bp+8, int32(0600))) + fd = v3 + if v3 >= 0 { + return fd + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1772, uint64(6)) + return -int32(1) +} + +func Xmkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, flags) +} + +func Xmkstemp(tls *TLS, template uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, 0) +} + +func Xmkstemps(tls *TLS, template uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v, (%v:)", tls, template, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, 0) +} + +func Xmktemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var l Tsize_t + var retries, v1 int32 + var _ /* st at bp+0 */ Tstat + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1772, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + return template + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if Xstat(tls, template, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) { + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + } + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0) { + break + } + } + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EEXIST) + return template +} + +func Xcfgetospeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*Ttermios)(unsafe.Pointer(tio)).Fc_cflag & uint32(CBAUD) +} + +func Xcfgetispeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfgetospeed(tls, tio) +} + +func Xcfmakeraw(tls *TLS, t uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + } + *(*Ttcflag_t)(unsafe.Pointer(t)) &= uint32(^(Int32FromInt32(IGNBRK) | Int32FromInt32(BRKINT) | Int32FromInt32(PARMRK) | Int32FromInt32(ISTRIP) | Int32FromInt32(INLCR) | Int32FromInt32(IGNCR) | Int32FromInt32(ICRNL) | Int32FromInt32(IXON))) + *(*Ttcflag_t)(unsafe.Pointer(t + 4)) &= uint32(^Int32FromInt32(OPOST)) + *(*Ttcflag_t)(unsafe.Pointer(t + 12)) &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ECHONL) | Int32FromInt32(ICANON) | Int32FromInt32(ISIG) | Int32FromInt32(IEXTEN))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) &= uint32(^(Int32FromInt32(CSIZE) | Int32FromInt32(PARENB))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) |= uint32(CS8) + *(*Tcc_t)(unsafe.Pointer(t + 16 + 5)) = uint8(1) + *(*Tcc_t)(unsafe.Pointer(t + 16 + 7)) = uint8(0) +} + +func Xcfsetospeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + if speed&uint32(^Int32FromInt32(CBAUD)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) &= uint32(^Int32FromInt32(CBAUD)) + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) |= speed + return 0 +} + +func Xcfsetispeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if speed != 0 { + v1 = Xcfsetospeed(tls, tio, speed) + } else { + v1 = 0 + } + return v1 +} + +func Xcfsetspeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfsetospeed(tls, tio, speed) +} + +func Xtcdrain(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ioctl), int64(fd), int64(Uint32FromUint32(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(Uint32FromUint32(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(Uint32FromUint32(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if Xioctl(tls, fd, int32(uint64(Uint32FromUint32(2)< %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* sid at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGSID), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcgetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(uint64(Uint32FromUint32(2)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + /* nonzero duration is implementation-defined, so ignore it */ + return Xioctl(tls, fd, int32(Uint32FromUint32(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if act < 0 || act > int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xioctl(tls, fd, int32(uint64(Uint32FromUint32(4)< %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(uint64(Uint32FromUint32(4)< %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd int32 + var map1, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _, _ = fd, map1, v1 + map1 = uintptr(-Int32FromInt32(1)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_open), int64(pathname), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)|Int32FromInt32(O_LARGEFILE)))))) + if fd < 0 { + return uintptr(0) + } + if !(X__fstat(tls, fd, bp) != 0) { + map1 = X__mmap(tls, uintptr(0), uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size), int32(PROT_READ), int32(MAP_SHARED), fd, 0) + *(*Tsize_t)(unsafe.Pointer(size)) = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + if map1 == uintptr(-Int32FromInt32(1)) { + v1 = uintptr(0) + } else { + v1 = map1 + } + return v1 +} + +func X__month_to_secs(tls *TLS, month int32, is_leap int32) (r int32) { + if __ccgo_strace { + trc("tls=%v month=%v is_leap=%v, (%v:)", tls, month, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t int32 + _ = t + t = _secs_through_month[month] + if is_leap != 0 && month >= int32(2) { + t += int32(86400) + } + return t +} + +var _secs_through_month = [12]int32{ + 1: Int32FromInt32(31) * Int32FromInt32(86400), + 2: Int32FromInt32(59) * Int32FromInt32(86400), + 3: Int32FromInt32(90) * Int32FromInt32(86400), + 4: Int32FromInt32(120) * Int32FromInt32(86400), + 5: Int32FromInt32(151) * Int32FromInt32(86400), + 6: Int32FromInt32(181) * Int32FromInt32(86400), + 7: Int32FromInt32(212) * Int32FromInt32(86400), + 8: Int32FromInt32(243) * Int32FromInt32(86400), + 9: Int32FromInt32(273) * Int32FromInt32(86400), + 10: Int32FromInt32(304) * Int32FromInt32(86400), + 11: Int32FromInt32(334) * Int32FromInt32(86400), +} + +const DAYS_PER_100Y = 36524 +const DAYS_PER_400Y = 146097 +const DAYS_PER_4Y = 1461 +const LEAPOCH = 951868800 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +/* 2000-03-01 (mod 400 year, immediately after feb29 */ + +func X__secs_to_tm(tls *TLS, t int64, tm uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c_cycles, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, wday, yday int32 + var days, secs, years int64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = c_cycles, days, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, secs, wday, yday, years + /* Reject time_t values whose year would overflow int */ + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || t > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + return -int32(1) + } + secs = t - (Int64FromInt64(946684800) + int64(Int32FromInt32(86400)*(Int32FromInt32(31)+Int32FromInt32(29)))) + days = secs / int64(86400) + remsecs = int32(secs % int64(86400)) + if remsecs < 0 { + remsecs += int32(86400) + days-- + } + wday = int32((int64(3) + days) % int64(7)) + if wday < 0 { + wday += int32(7) + } + qc_cycles = int32(days / int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + remdays = int32(days % int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + if remdays < 0 { + remdays += Int32FromInt32(365)*Int32FromInt32(400) + Int32FromInt32(97) + qc_cycles-- + } + c_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + if c_cycles == int32(4) { + c_cycles-- + } + remdays -= c_cycles * (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + q_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + if q_cycles == int32(25) { + q_cycles-- + } + remdays -= q_cycles * (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + remyears = remdays / int32(365) + if remyears == int32(4) { + remyears-- + } + remdays -= remyears * int32(365) + leap = BoolInt32(!(remyears != 0) && (q_cycles != 0 || !(c_cycles != 0))) + yday = remdays + int32(31) + int32(28) + leap + if yday >= int32(365)+leap { + yday -= int32(365) + leap + } + years = int64(remyears+int32(4)*q_cycles+int32(100)*c_cycles) + int64(400)*int64(qc_cycles) + months = 0 + for { + if !(int32(_days_in_month[months]) <= remdays) { + break + } + remdays -= int32(_days_in_month[months]) + goto _1 + _1: + ; + months++ + } + if months >= int32(10) { + months -= int32(12) + years++ + } + if years+int64(100) > int64(INT_MAX) || years+int64(100) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + return -int32(1) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = int32(years + int64(100)) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon = months + int32(2) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mday = remdays + int32(1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday = wday + (*Ttm)(unsafe.Pointer(tm)).Ftm_yday = yday + (*Ttm)(unsafe.Pointer(tm)).Ftm_hour = remsecs / int32(3600) + (*Ttm)(unsafe.Pointer(tm)).Ftm_min = remsecs / int32(60) % int32(60) + (*Ttm)(unsafe.Pointer(tm)).Ftm_sec = remsecs % int32(60) + return 0 +} + +var _days_in_month = [12]uint8{ + 0: uint8(31), + 1: uint8(30), + 2: uint8(31), + 3: uint8(30), + 4: uint8(31), + 5: uint8(31), + 6: uint8(30), + 7: uint8(31), + 8: uint8(30), + 9: uint8(31), + 10: uint8(31), + 11: uint8(29), +} + +func X__tm_to_secs(tls *TLS, tm uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, month int32 + var t, year int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _ = adj, month, t, year + year = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + month = (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + if month >= int32(12) || month < 0 { + adj = month / int32(12) + month %= int32(12) + if month < 0 { + adj-- + month += int32(12) + } + year += int64(adj) + } + t = X__year_to_secs(tls, year, bp) + t += int64(X__month_to_secs(tls, month, *(*int32)(unsafe.Pointer(bp)))) + t += int64(86400) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday-Int32FromInt32(1)) + t += int64(3600) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + t += int64(60) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + t += int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + return t +} + +var _std_name [7]uint8 +var _dst_name [7]uint8 + +var _dst_off int32 +var _r0 [5]int32 +var _r12 [5]int32 + +var _zi uintptr +var _trans uintptr +var _index uintptr +var _types uintptr +var _abbrevs uintptr +var _abbrevs_end uintptr +var _map_size Tsize_t + +var _old_tz_buf [32]uint8 +var _old_tz = uintptr(unsafe.Pointer(&_old_tz_buf)) +var _old_tz_size = uint64(32) + +var _lock4 [1]int32 + +func _getint2(tls *TLS, p uintptr) (r int32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) + uint32(10)*x + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(p))++ + } + return int32(x) +} + +func _getoff(tls *TLS, p uintptr) (r int32) { + var neg, off, v1 int32 + _, _, _ = neg, off, v1 + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('-') { + *(*uintptr)(unsafe.Pointer(p))++ + neg = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('+') { + *(*uintptr)(unsafe.Pointer(p))++ + } + } + off = int32(3600) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += int32(60) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += _getint2(tls, p) + } + } + if neg != 0 { + v1 = -off + } else { + v1 = off + } + return v1 +} + +func _getrule(tls *TLS, p uintptr, rule uintptr) { + var r, v1 int32 + _, _ = r, v1 + v1 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) + *(*int32)(unsafe.Pointer(rule)) = v1 + r = v1 + if r != int32('M') { + if r == int32('J') { + *(*uintptr)(unsafe.Pointer(p))++ + } else { + *(*int32)(unsafe.Pointer(rule)) = 0 + } + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + } else { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 2*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 3*4)) = _getint2(tls, p) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('/') { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 4*4)) = _getoff(tls, p) + } else { + *(*int32)(unsafe.Pointer(rule + 4*4)) = int32(7200) + } +} + +func _getname(tls *TLS, d uintptr, p uintptr) { + var i, v3 int32 + _, _ = i, v3 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('<') { + *(*uintptr)(unsafe.Pointer(p))++ + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i)))) != int32('>')) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _1 + _1: + ; + i++ + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 { + *(*uintptr)(unsafe.Pointer(p))++ + } + } else { + i = 0 + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))))|int32(32)-int32('a')) < uint32(26)) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _2 + _2: + ; + i++ + } + } + *(*uintptr)(unsafe.Pointer(p)) += uintptr(i) + if i < int32(TZNAME_MAX) { + v3 = i + } else { + v3 = int32(TZNAME_MAX) + } + *(*uint8)(unsafe.Pointer(d + uintptr(v3))) = uint8(0) +} + +func _zi_read32(tls *TLS, z uintptr) (r Tuint32_t) { + return uint32(*(*uint8)(unsafe.Pointer(z)))< uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(1)) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + i = Uint64FromInt32(3) + } + if i >= _old_tz_size { + _old_tz_size *= uint64(2) + if i >= _old_tz_size { + _old_tz_size = i + uint64(1) + } + if _old_tz_size > uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(2)) { + _old_tz_size = uint64(Int32FromInt32(PATH_MAX) + Int32FromInt32(2)) + } + _old_tz = Xmalloc(tls, _old_tz_size) + } + if _old_tz != 0 { + Xmemcpy(tls, _old_tz, *(*uintptr)(unsafe.Pointer(bp + 288)), i+uint64(1)) + } + posix_form = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) != int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 296)) = *(*uintptr)(unsafe.Pointer(bp + 288)) + _getname(tls, bp+308, bp+296) + if *(*uintptr)(unsafe.Pointer(bp + 296)) != *(*uintptr)(unsafe.Pointer(bp + 288)) && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('-') || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)))))-uint32('0') < uint32(10)) != 0 || !(Xstrcmp(tls, bp+308, __ccgo_ts+1797) != 0) || !(Xstrcmp(tls, bp+308, __ccgo_ts+1801) != 0)) { + posix_form = int32(1) + } + } + /* Non-suid can use an absolute tzfile pathname or a relative + * pathame beginning with "."; in secure mode, only the + * standard path will be searched. */ + if !(posix_form != 0) { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 288))++ + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('/') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('.') { + if !(X__libc.Fsecure != 0) || !(Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), __ccgo_ts+1782) != 0) { + map1 = X__map_file(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), uintptr(unsafe.Pointer(&_map_size))) + } + } else { + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) + if l <= uint64(NAME_MAX) && !(Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), int32('.')) != 0) { + Xmemcpy(tls, pathname, *(*uintptr)(unsafe.Pointer(bp + 288)), l+uint64(1)) + *(*uint8)(unsafe.Pointer(pathname + uintptr(l))) = uint8(0) + try = uintptr(unsafe.Pointer(&_search)) + for { + if !(!(map1 != 0) && *(*uint8)(unsafe.Pointer(try)) != 0) { + break + } + l = Xstrlen(tls, try) + Xmemcpy(tls, pathname-uintptr(l), try, l) + map1 = X__map_file(tls, pathname-uintptr(l), uintptr(unsafe.Pointer(&_map_size))) + goto _3 + _3: + ; + try += uintptr(l + uint64(1)) + } + } + } + if !(map1 != 0) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + } + if map1 != 0 && (_map_size < uint64(44) || Xmemcmp(tls, map1, __ccgo_ts+1805, uint64(4)) != 0) { + X__munmap(tls, map1, _map_size) + map1 = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + _zi = map1 + if map1 != 0 { + scale = int32(2) + if int32(*(*uint8)(unsafe.Pointer(map1 + 4))) != int32('1') { + *(*[6]uint8)(unsafe.Pointer(bp)) = [6]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(8), + 3: uint8(5), + 4: uint8(6), + 5: uint8(1), + } + skip = _zi_dotprod(tls, _zi+uintptr(20), bp, uint64(6)) + _trans = _zi + uintptr(skip) + uintptr(44) + uintptr(44) + scale++ + } else { + _trans = _zi + uintptr(44) + } + _index = _trans + uintptr(_zi_read32(tls, _trans-uintptr(12))<> scale) + if !(n != 0) { + if alt != 0 { + *(*Tsize_t)(unsafe.Pointer(alt)) = uint64(0) + } + return uint64(0) + } + /* Binary search for 'most-recent rule before t'. */ + for n > uint64(1) { + m = a + n/uint64(2) + x = uint64(_zi_read32(tls, _trans+uintptr(m<> scale) + if a == n-uint64(1) { + return uint64(-Int32FromInt32(1)) + } + if a == uint64(0) { + x = uint64(_zi_read32(tls, _trans)) + if scale == int32(3) { + x = x<>(m-int32(1))&int32(1) + } + return r +} + +/* Convert a POSIX DST rule plus year to seconds since epoch. */ + +func _rule_to_secs(tls *TLS, rule uintptr, year int32) (r int64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var d, days, m, n, wday, x int32 + var t int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _, _, _, _ = d, days, m, n, t, wday, x + t = X__year_to_secs(tls, int64(year), bp) + if *(*int32)(unsafe.Pointer(rule)) != int32('M') { + x = *(*int32)(unsafe.Pointer(rule + 1*4)) + if *(*int32)(unsafe.Pointer(rule)) == int32('J') && (x < int32(60) || !(*(*int32)(unsafe.Pointer(bp)) != 0)) { + x-- + } + t += int64(int32(86400) * x) + } else { + m = *(*int32)(unsafe.Pointer(rule + 1*4)) + n = *(*int32)(unsafe.Pointer(rule + 2*4)) + d = *(*int32)(unsafe.Pointer(rule + 3*4)) + t += int64(X__month_to_secs(tls, m-int32(1), *(*int32)(unsafe.Pointer(bp)))) + wday = int32((t+int64(Int32FromInt32(4)*Int32FromInt32(86400)))%int64(Int32FromInt32(7)*Int32FromInt32(86400))) / int32(86400) + days = d - wday + if days < 0 { + days += int32(7) + } + if n == int32(5) && days+int32(28) >= _days_in_month1(tls, m, *(*int32)(unsafe.Pointer(bp))) { + n = int32(4) + } + t += int64(int32(86400) * (days + int32(7)*(n-int32(1)))) + } + t += int64(*(*int32)(unsafe.Pointer(rule + 4*4))) + return t +} + +/* Determine the time zone in effect for a given time in seconds since the + * epoch. It can be given in local or universal time. The results will + * indicate whether DST is in effect at the queried time, and will give both + * the GMT offset for the active zone/DST rule and the opposite DST. This + * enables a caller to efficiently adjust for the case where an explicit + * DST specification mismatches what would be in effect at the time. */ + +func X__secs_to_zone(tls *TLS, t int64, local int32, isdst uintptr, offset uintptr, oppoff uintptr, zonename uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v local=%v isdst=%v offset=%v oppoff=%v zonename=%v, (%v:)", tls, t, local, isdst, offset, oppoff, zonename, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tsize_t + var t0, t1, y int64 + var _ /* alt at bp+0 */ Tsize_t + _, _, _, _ = i, t0, t1, y + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if _zi != 0 { + i = _scan_trans(tls, t, local, bp) + if i != uint64(-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(isdst)) = int32(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(4))))) + *(*int64)(unsafe.Pointer(offset)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)*i)))) + *(*uintptr)(unsafe.Pointer(zonename)) = _abbrevs + uintptr(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(5))))) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)**(*Tsize_t)(unsafe.Pointer(bp)))))) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + } + } + if !(Xdaylight != 0) { + goto std + } + /* FIXME: may be broken if DST changes right at year boundary? + * Also, this could be more efficient.*/ + y = t/int64(31556952) + int64(70) + for X__year_to_secs(tls, y, uintptr(0)) > t { + y-- + } + for X__year_to_secs(tls, y+int64(1), uintptr(0)) < t { + y++ + } + t0 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r0)), int32(y)) + t1 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r12)), int32(y)) + if !(local != 0) { + t0 += Xtimezone + t1 += int64(_dst_off) + } + if t0 < t1 { + if t >= t0 && t < t1 { + goto dst + } + goto std + } else { + if t >= t1 && t < t0 { + goto std + } + goto dst + } + goto std +std: + ; + *(*int32)(unsafe.Pointer(isdst)) = 0 + *(*int64)(unsafe.Pointer(offset)) = -Xtimezone + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(-_dst_off) + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[0] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + goto dst +dst: + ; + *(*int32)(unsafe.Pointer(isdst)) = int32(1) + *(*int64)(unsafe.Pointer(offset)) = int64(-_dst_off) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = -Xtimezone + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[int32(1)] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func ___tzset(tls *TLS) { + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func X__tm_to_tzname(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = (*Ttm)(unsafe.Pointer(tm)).F__tm_zone + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if p != uintptr(unsafe.Pointer(&X__utc)) && p != Xtzname[0] && p != Xtzname[int32(1)] && (!(_zi != 0) || uint64(p)-uint64(_abbrevs) >= uint64(int64(_abbrevs_end)-int64(_abbrevs))) { + p = __ccgo_ts + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return p +} + +func X__year_to_secs(tls *TLS, year int64, is_leap uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v year=%v is_leap=%v, (%v:)", tls, year, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var centuries, cycles, leaps, leaps1, rem, y int32 + var _ /* dummy at bp+0 */ int32 + _, _, _, _, _, _ = centuries, cycles, leaps, leaps1, rem, y + if uint64(year)-uint64(2) <= uint64(136) { + y = int32(year) + leaps = (y - int32(68)) >> int32(2) + if !((y-Int32FromInt32(68))&Int32FromInt32(3) != 0) { + leaps-- + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + } + } else { + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + } + } + return int64(int32(31536000)*(y-int32(70)) + int32(86400)*leaps) + } + if !(is_leap != 0) { + is_leap = bp + } + cycles = int32((year - int64(100)) / int64(400)) + rem = int32((year - int64(100)) % int64(400)) + if rem < 0 { + cycles-- + rem += int32(400) + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + centuries = 0 + leaps1 = 0 + } else { + if rem >= int32(200) { + if rem >= int32(300) { + centuries = int32(3) + rem -= int32(300) + } else { + centuries = int32(2) + rem -= int32(200) + } + } else { + if rem >= int32(100) { + centuries = int32(1) + rem -= int32(100) + } else { + centuries = 0 + } + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + leaps1 = 0 + } else { + leaps1 = int32(uint32(rem) / uint32(4)) + rem = int32(uint32(rem) % Uint32FromUint32(4)) + *(*int32)(unsafe.Pointer(is_leap)) = BoolInt32(!(rem != 0)) + } + } + leaps1 += int32(97)*cycles + int32(24)*centuries - *(*int32)(unsafe.Pointer(is_leap)) + return (year-int64(100))*int64(31536000) + int64(leaps1)*int64(86400) + int64(946684800) + int64(86400) +} + +func Xasctime(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, uintptr(unsafe.Pointer(&_buf9))) +} + +var _buf9 [26]uint8 + +func X__asctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xsnprintf(tls, buf, uint64(26), __ccgo_ts+1810, VaList(bp+8, X__nl_langinfo_l(tls, int32(ABDAY_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_wday, uintptr(unsafe.Pointer(&X__c_locale))), X__nl_langinfo_l(tls, int32(ABMON_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_mon, uintptr(unsafe.Pointer(&X__c_locale))), (*Ttm)(unsafe.Pointer(tm)).Ftm_mday, (*Ttm)(unsafe.Pointer(tm)).Ftm_hour, (*Ttm)(unsafe.Pointer(tm)).Ftm_min, (*Ttm)(unsafe.Pointer(tm)).Ftm_sec, int32(1900)+(*Ttm)(unsafe.Pointer(tm)).Ftm_year)) >= int32(26) { + /* ISO C requires us to use the above format string, + * even if it will not fit in the buffer. Thus asctime_r + * is _supposed_ to crash if the fields in tm are too large. + * We follow this behavior and crash "gracefully" to warn + * application developers that they may not be so lucky + * on other implementations (e.g. stack smashing..). + */ + // __asm__ __volatile__ (".long 0"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 54, __ccgo_ts+1842) + } + return buf +} + +func Xasctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, buf) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xclock(tls *TLS) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if X__clock_gettime(tls, int32(CLOCK_PROCESS_CPUTIME_ID), bp) != 0 { + return int64(-int32(1)) + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(1000000) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) > int64(0x7fffffffffffffff)-int64(1000000)*(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec { + return int64(-int32(1)) + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec*int64(1000000) + (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) +} + +func Xclock_getcpuclockid(tls *TLS, pid Tpid_t, clk uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v clk=%v, (%v:)", tls, pid, clk, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id Tclockid_t + var ret int32 + var _ /* ts at bp+0 */ Ttimespec + _, _ = id, ret + id = int32(uint32(-pid-Int32FromInt32(1))*uint32(8) + uint32(2)) + ret = int32(X__syscall2(tls, int64(SYS_clock_getres), int64(id), int64(bp))) + if ret == -int32(EINVAL) { + ret = -int32(ESRCH) + } + if ret != 0 { + return -ret + } + *(*Tclockid_t)(unsafe.Pointer(clk)) = id + return 0 +} + +func Xclock_getres(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* If reaching this point, it's a 64-bit arch or time64-only + * 32-bit arch and we can get result directly into timespec. */ + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_getres), int64(clk), int64(ts))))) +} + +func X__clock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_clock_gettime), int64(clk), int64(ts))) + if r == -int32(ENOSYS) { + if clk == CLOCK_REALTIME { + X__syscall2(tls, int64(SYS_gettimeofday), int64(ts), int64(Int32FromInt32(0))) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = int64(int32((*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec) * int32(1000)) + return 0 + } + r = -int32(EINVAL) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xclock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_gettime(tls, clk, ts) +} + +func X__clock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + if clk == int32(CLOCK_THREAD_CPUTIME_ID) { + return int32(EINVAL) + } + if clk == CLOCK_REALTIME && !(flags != 0) { + return int32(-___syscall_cp(tls, int64(SYS_nanosleep), int64(req), int64(rem), 0, 0, 0, 0)) + } + return int32(-___syscall_cp(tls, int64(SYS_clock_nanosleep), int64(clk), int64(flags), int64(req), int64(rem), 0, 0)) +} + +func Xclock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_nanosleep(tls, clk, flags, req, rem) +} + +func Xclock_settime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_settime), int64(clk), int64(ts))))) +} + +func Xctime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var tm uintptr + _ = tm + tm = Xlocaltime(tls, t) + if !(tm != 0) { + return uintptr(0) + } + return Xasctime(tls, tm) +} + +func Xctime_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var tm_p, v1 uintptr + var _ /* tm at bp+0 */ Ttm + _, _ = tm_p, v1 + tm_p = Xlocaltime_r(tls, t, bp) + if tm_p != 0 { + v1 = Xasctime_r(tls, tm_p, buf) + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xdifftime(tls *TLS, t1 Ttime_t, t0 Ttime_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t0=%v, (%v:)", tls, t1, t0, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(t1 - t0) +} + +type Ttimeb = struct { + Ftime Ttime_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func Xftime(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int16 + var _ /* ts at bp+0 */ Ttimespec + _ = v1 + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeb)(unsafe.Pointer(tp)).Ftime = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeb)(unsafe.Pointer(tp)).Fmillitm = uint16((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int64(1000000)) + v1 = Int16FromInt32(0) + (*Ttimeb)(unsafe.Pointer(tp)).Fdstflag = v1 + (*Ttimeb)(unsafe.Pointer(tp)).Ftimezone = v1 + return 0 +} + +func Xgetdate(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var datemsk, f, p, ret uintptr + var _ /* cs at bp+100 */ int32 + var _ /* fmt at bp+0 */ [100]uint8 + _, _, _, _ = datemsk, f, p, ret + ret = uintptr(0) + datemsk = Xgetenv(tls, __ccgo_ts+1854) + f = uintptr(0) + _pthread_setcancelstate(tls, PTHREAD_CANCEL_DEFERRED, bp+100) + if !(datemsk != 0) { + Xgetdate_err = int32(1) + goto out + } + f = Xfopen(tls, datemsk, __ccgo_ts+412) + if !(f != 0) { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOMEM) { + Xgetdate_err = int32(6) + } else { + Xgetdate_err = int32(2) + } + goto out + } + for Xfgets(tls, bp, int32(100), f) != 0 { + p = Xstrptime(tls, s, bp, uintptr(unsafe.Pointer(&_tmbuf))) + if p != 0 && !(*(*uint8)(unsafe.Pointer(p)) != 0) { + ret = uintptr(unsafe.Pointer(&_tmbuf)) + goto out + } + } + if Xferror(tls, f) != 0 { + Xgetdate_err = int32(5) + } else { + Xgetdate_err = int32(7) + } + goto out +out: + ; + if f != 0 { + Xfclose(tls, f) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 100)), uintptr(0)) + return ret +} + +var _tmbuf Ttm + +func Xgettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if !(tv != 0) { + return 0 + } + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64(int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec) / int32(1000)) + return 0 +} + +func Xgmtime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, uintptr(unsafe.Pointer(&_tm))) +} + +var _tm Ttm + +func X__gmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t)), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_zone = uintptr(unsafe.Pointer(&X__utc)) + return tm +} + +func Xgmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, tm) +} + +func Xlocaltime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, uintptr(unsafe.Pointer(&_tm1))) +} + +var _tm1 Ttm + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__localtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Reject time_t values whose year would overflow int because + * __secs_to_zone cannot safely handle them. */ + if *(*Ttime_t)(unsafe.Pointer(t)) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || *(*Ttime_t)(unsafe.Pointer(t)) > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + X__secs_to_zone(tls, *(*Ttime_t)(unsafe.Pointer(t)), 0, tm+32, tm+40, uintptr(0), tm+48) + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t))+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff, tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + return tm +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xlocaltime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, tm) +} + +func Xmktime(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm + var _ /* opp at bp+56 */ int64 + _ = t + t = X__tm_to_secs(tls, tm) + X__secs_to_zone(tls, t, int32(1), bp+32, bp+40, bp+56, bp+48) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst >= 0 && (*(*Ttm)(unsafe.Pointer(bp))).Ftm_isdst != (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst { + t -= *(*int64)(unsafe.Pointer(bp + 56)) - (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + } + t -= (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + if t != t { + goto error + } + X__secs_to_zone(tls, t, 0, bp+32, bp+40, bp+56, bp+48) + if X__secs_to_tm(tls, t+(*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff, bp) < 0 { + goto error + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return t + goto error +error: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) +} + +func Xnanosleep(tls *TLS, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v rem=%v, (%v:)", tls, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-X__clock_nanosleep(tls, CLOCK_REALTIME, 0, req, rem)))) +} + +func _is_leap(tls *TLS, y int32) (r int32) { + /* Avoid overflow */ + if y > Int32FromInt32(INT_MAX)-Int32FromInt32(1900) { + y -= int32(2000) + } + y += int32(1900) + return BoolInt32(!(y%Int32FromInt32(4) != 0) && (y%int32(100) != 0 || !(y%Int32FromInt32(400) != 0))) +} + +func _week_num(tls *TLS, tm uintptr) (r int32) { + var dec31, jan1, val int32 + _, _, _ = dec31, jan1, val + val = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + /* If 1 Jan is just 1-3 days past Monday, + * the previous week is also in this year. */ + if (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(371)-uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)-uint32(2))%uint32(7) <= uint32(2) { + val++ + } + if !(val != 0) { + val = int32(52) + /* If 31 December of prev year a Thursday, + * or Friday of a leap year, then the + * prev year has 53 weeks. */ + dec31 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) - uint32(1)) % uint32(7)) + if dec31 == int32(4) || dec31 == int32(5) && _is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year%int32(400)-int32(1)) != 0 { + val++ + } + } else { + if val == int32(53) { + /* If 1 January is not a Thursday, and not + * a Wednesday of a leap year, then this + * year has only 52 weeks. */ + jan1 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(371) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)) % uint32(7)) + if jan1 != int32(4) && (jan1 != int32(3) || !(_is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year) != 0)) { + val = int32(1) + } + } + } + return val +} + +func X__strftime_fmt_1(tls *TLS, s uintptr, l uintptr, f int32, tm uintptr, loc Tlocale_t, pad int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v tm=%v loc=%v pad=%v, (%v:)", tls, s, l, f, tm, loc, pad, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, fmt, v4, v5 uintptr + var def_pad, width, v1, v2, v6, v7 int32 + var item Tnl_item + var val int64 + _, _, _, _, _, _, _, _, _, _, _, _ = d, def_pad, fmt, item, val, width, v1, v2, v4, v5, v6, v7 + fmt = __ccgo_ts + 1704 + width = int32(2) + def_pad = int32('0') + switch f { + case int32('a'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(ABDAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('A'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(DAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('h'): + fallthrough + case int32('b'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(ABMON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('B'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(MON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('c'): + item = int32(D_T_FMT) + goto nl_strftime + case int32('C'): + val = (int64(1900) + int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year)) / int64(100) + goto number + case int32('e'): + def_pad = int32('_') + fallthrough + case int32('d'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday) + goto number + case int32('D'): + fmt = __ccgo_ts + 1862 + goto recu_strftime + case int32('F'): + fmt = __ccgo_ts + 1871 + goto recu_strftime + case int32('g'): + fallthrough + case int32('G'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday < int32(3) && _week_num(tls, tm) != int32(1) { + val-- + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday > int32(360) && _week_num(tls, tm) == int32(1) { + val++ + } + } + if f == int32('g') { + val %= int64(100) + } else { + width = int32(4) + } + goto number + case int32('H'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + goto number + case int32('l'): + def_pad = int32('_') + fallthrough + case int32('I'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + if !(val != 0) { + val = int64(12) + } else { + if val > int64(12) { + val -= int64(12) + } + } + goto number + case int32('j'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_yday + int32(1)) + width = int32(3) + goto number + case int32('k'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + def_pad = int32('_') + goto number + case int32('m'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mon + int32(1)) + goto number + case int32('M'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + goto number + case int32('n'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 398 + case int32('p'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v1 = int32(PM_STR) + } else { + v1 = int32(AM_STR) + } + item = v1 + goto nl_strcat + case int32('P'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v2 = int32(PM_STR) + } else { + v2 = int32(AM_STR) + } + item = v2 + fmt = X__nl_langinfo_l(tls, item, loc) + d = s + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + for { + if !(*(*uint8)(unsafe.Pointer(fmt)) != 0) { + break + } + v4 = d + d++ + v5 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(v5))))) + goto _3 + _3: + ; + *(*Tsize_t)(unsafe.Pointer(l))++ + } + return s + case int32('r'): + item = int32(T_FMT_AMPM) + goto nl_strftime + case int32('R'): + fmt = __ccgo_ts + 1880 + goto recu_strftime + case int32('s'): + val = X__tm_to_secs(tls, tm) - (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff + width = int32(1) + goto number + case int32('S'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + goto number + case int32('t'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 1442 + case int32('T'): + fmt = __ccgo_ts + 1886 + goto recu_strftime + case int32('u'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_wday != 0 { + v6 = (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + } else { + v6 = int32(7) + } + val = int64(v6) + width = int32(1) + goto number + case int32('U'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)) / uint32(7)) + goto number + case int32('W'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + goto number + case int32('V'): + val = int64(_week_num(tls, tm)) + goto number + case int32('w'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + width = int32(1) + goto number + case int32('x'): + item = int32(D_FMT) + goto nl_strftime + case int32('X'): + item = int32(T_FMT) + goto nl_strftime + case int32('y'): + val = (int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900)) % int64(100) + if val < 0 { + val = -val + } + goto number + case int32('Y'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if val >= int64(10000) { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1895, VaList(bp+8, val))) + return s + } + width = int32(4) + goto number + case int32('z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1901, VaList(bp+8, (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff/int64(3600)*int64(100)+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff%int64(3600)/int64(60)))) + return s + case int32('Z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + fmt = X__tm_to_tzname(tls, tm) + goto string + case int32('%'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 445 + default: + return uintptr(0) + } + goto number +number: + ; + if pad != 0 { + v7 = pad + } else { + v7 = def_pad + } + switch v7 { + case int32('-'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1908, VaList(bp+8, val))) + case int32('_'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1913, VaList(bp+8, width, val))) + case int32('0'): + fallthrough + default: + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1919, VaList(bp+8, width, val))) + break + } + return s + goto nl_strcat +nl_strcat: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto string +string: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = Xstrlen(tls, fmt) + return fmt + goto nl_strftime +nl_strftime: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto recu_strftime +recu_strftime: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = X__strftime_l(tls, s, uint64(100), fmt, tm, loc) + if !(*(*Tsize_t)(unsafe.Pointer(l)) != 0) { + return uintptr(0) + } + return s +} + +func X__strftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var d, l, v10, v12, v2, v7 Tsize_t + var pad, plus, v4, v8 int32 + var t, v3 uintptr + var width uint64 + var v9 bool + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+112 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, l, pad, plus, t, width, v10, v12, v2, v3, v4, v7, v8, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*uint8)(unsafe.Pointer(f)) != 0) { + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + return l + } + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v2 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v2))) = *(*uint8)(unsafe.Pointer(f)) + goto _1 + } + f++ + pad = 0 + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('_') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('0') { + v3 = f + f++ + pad = int32(*(*uint8)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(int32(*(*uint8)(unsafe.Pointer(f))) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + width = Xstrtoul(tls, f, bp+112, int32(10)) + } else { + width = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 112)) = f + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('F') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('G') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 112)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 112)) + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('E') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('O') { + f++ + } + t = X__strftime_fmt_1(tls, bp+8, bp, int32(*(*uint8)(unsafe.Pointer(f))), tm, loc, pad) + if !(t != 0) { + break + } + if width != 0 { + /* Trim off any sign and leading zeros, then + * count remaining digits to determine behavior + * for the + flag. */ + if int32(*(*uint8)(unsafe.Pointer(t))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(t))) == int32('-') { + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(t))) == int32('0') && uint32(int32(*(*uint8)(unsafe.Pointer(t + 1)))-int32('0')) < uint32(10)) { + break + } + goto _5 + _5: + ; + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + if width < *(*Tsize_t)(unsafe.Pointer(bp)) { + width = *(*Tsize_t)(unsafe.Pointer(bp)) + } + d = uint64(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(t + uintptr(d))))-int32('0')) < uint32(10)) { + break + } + goto _6 + _6: + ; + d++ + } + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v7))) = uint8('-') + width-- + } else { + if v9 = plus != 0; v9 { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') { + v8 = int32(3) + } else { + v8 = int32(5) + } + } + if v9 && d+(width-*(*Tsize_t)(unsafe.Pointer(bp))) >= uint64(v8) { + v10 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v10))) = uint8('+') + width-- + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v12 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v12))) = uint8('0') + goto _11 + _11: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) > n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xmemcpy(tls, s+uintptr(l), t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f++ + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + } + return uint64(0) +} + +func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, loc) +} + +func Xstrptime(tls *TLS, s uintptr, f uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v tm=%v, (%v:)", tls, s, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var adj, i, min, neg, range1, w, want_century, v1, v2, v45, v46, v5, v53, v6 int32 + var dest, ex, v49, v51, v54, v9 uintptr + var len1 Tsize_t + var v48, v8 bool + var _ /* century at bp+4 */ int32 + var _ /* dummy at bp+0 */ int32 + var _ /* new_f at bp+16 */ uintptr + var _ /* relyear at bp+8 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = adj, dest, ex, i, len1, min, neg, range1, w, want_century, v1, v2, v45, v46, v48, v49, v5, v51, v53, v54, v6, v8, v9 + want_century = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + *(*int32)(unsafe.Pointer(bp + 8)) = 0 + for *(*uint8)(unsafe.Pointer(f)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v1 = int32(*(*uint8)(unsafe.Pointer(f))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if v2 != 0 { + for { + if v8 = *(*uint8)(unsafe.Pointer(s)) != 0; v8 { + v5 = int32(*(*uint8)(unsafe.Pointer(s))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + } + if !(v8 && v6 != 0) { + break + } + goto _4 + _4: + ; + s++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(*(*uint8)(unsafe.Pointer(f))) { + return uintptr(0) + } else { + s++ + } + } + f++ + continue + } + f++ + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('+') { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + w = int32(Xstrtoul(tls, f, bp+16, int32(10))) + f = *(*uintptr)(unsafe.Pointer(bp + 16)) + } else { + w = -int32(1) + } + adj = 0 + v9 = f + f++ + switch int32(*(*uint8)(unsafe.Pointer(v9))) { + case int32('A'): + goto _10 + case int32('a'): + goto _11 + case int32('h'): + goto _12 + case int32('B'): + goto _13 + case int32('b'): + goto _14 + case int32('c'): + goto _15 + case int32('C'): + goto _16 + case int32('e'): + goto _17 + case int32('d'): + goto _18 + case int32('D'): + goto _19 + case int32('H'): + goto _20 + case int32('I'): + goto _21 + case int32('j'): + goto _22 + case int32('m'): + goto _23 + case int32('M'): + goto _24 + case int32('t'): + goto _25 + case int32('n'): + goto _26 + case int32('p'): + goto _27 + case int32('r'): + goto _28 + case int32('R'): + goto _29 + case int32('S'): + goto _30 + case int32('T'): + goto _31 + case int32('W'): + goto _32 + case int32('U'): + goto _33 + case int32('w'): + goto _34 + case int32('x'): + goto _35 + case int32('X'): + goto _36 + case int32('y'): + goto _37 + case int32('Y'): + goto _38 + case int32('%'): + goto _39 + default: + goto _40 + } + goto _41 + _11: + ; + _10: + ; + dest = tm + 24 + min = int32(ABDAY_1) + range1 = int32(7) + goto symbolic_range + _14: + ; + _13: + ; + _12: + ; + dest = tm + 16 + min = int32(ABMON_1) + range1 = int32(12) + goto symbolic_range + _15: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _16: + ; + dest = bp + 4 + if w < 0 { + w = int32(2) + } + want_century |= int32(2) + goto numeric_digits + _18: + ; + _17: + ; + dest = tm + 12 + min = int32(1) + range1 = int32(31) + goto numeric_range + _19: + ; + s = Xstrptime(tls, s, __ccgo_ts+1862, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _20: + ; + dest = tm + 8 + min = 0 + range1 = int32(24) + goto numeric_range + _21: + ; + dest = tm + 8 + min = int32(1) + range1 = int32(12) + goto numeric_range + _22: + ; + dest = tm + 28 + min = int32(1) + range1 = int32(366) + adj = int32(1) + goto numeric_range + _23: + ; + dest = tm + 16 + min = int32(1) + range1 = int32(12) + adj = int32(1) + goto numeric_range + _24: + ; + dest = tm + 4 + min = 0 + range1 = int32(60) + goto numeric_range + _26: + ; + _25: + ; + _44: + ; + if v48 = *(*uint8)(unsafe.Pointer(s)) != 0; v48 { + v45 = int32(*(*uint8)(unsafe.Pointer(s))) + v46 = BoolInt32(v45 == int32(' ') || uint32(v45)-uint32('\t') < uint32(5)) + goto _47 + _47: + } + if !(v48 && v46 != 0) { + goto _42 + } + goto _43 + _43: + ; + s++ + goto _44 + goto _42 + _42: + ; + goto _41 + _27: + ; + ex = Xnl_langinfo(tls, int32(AM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + s += uintptr(len1) + goto _41 + } + ex = Xnl_langinfo(tls, int32(PM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + *(*int32)(unsafe.Pointer(tm + 8)) += int32(12) + s += uintptr(len1) + goto _41 + } + return uintptr(0) + _28: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT_AMPM)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _29: + ; + s = Xstrptime(tls, s, __ccgo_ts+1880, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _30: + ; + dest = tm + min = 0 + range1 = int32(61) + goto numeric_range + _31: + ; + s = Xstrptime(tls, s, __ccgo_ts+1886, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _33: + ; + _32: + ; + /* Throw away result, for now. (FIXME?) */ + dest = bp + min = 0 + range1 = int32(54) + goto numeric_range + _34: + ; + dest = tm + 24 + min = 0 + range1 = int32(7) + goto numeric_range + _35: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _36: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _37: + ; + dest = bp + 8 + w = int32(2) + want_century |= int32(1) + goto numeric_digits + _38: + ; + dest = tm + 20 + if w < 0 { + w = int32(4) + } + adj = int32(1900) + want_century = 0 + goto numeric_digits + _39: + ; + v49 = s + s++ + if int32(*(*uint8)(unsafe.Pointer(v49))) != int32('%') { + return uintptr(0) + } + goto _41 + _40: + ; + return uintptr(0) + goto numeric_range + numeric_range: + ; + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) = 0 + i = int32(1) + for { + if !(i <= min+range1 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v51 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v51))) - int32('0') + goto _50 + _50: + ; + i *= int32(10) + } + if uint32(*(*int32)(unsafe.Pointer(dest))-min) >= uint32(range1) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + switch int64(dest) - int64(tm) { + case int64(uint64(UintptrFromInt32(0) + 28)): + } + goto update + goto numeric_digits + numeric_digits: + ; + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + s++ + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') { + neg = int32(1) + s++ + } + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + v53 = Int32FromInt32(0) + i = v53 + *(*int32)(unsafe.Pointer(dest)) = v53 + for { + if !(i < w && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v54 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v54))) - int32('0') + goto _52 + _52: + ; + i++ + } + if neg != 0 { + *(*int32)(unsafe.Pointer(dest)) = -*(*int32)(unsafe.Pointer(dest)) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + goto update + goto symbolic_range + symbolic_range: + ; + i = int32(2)*range1 - int32(1) + for { + if !(i >= 0) { + break + } + ex = Xnl_langinfo(tls, min+i) + len1 = Xstrlen(tls, ex) + if Xstrncasecmp(tls, s, ex, len1) != 0 { + goto _55 + } + s += uintptr(len1) + *(*int32)(unsafe.Pointer(dest)) = i % range1 + break + goto _55 + _55: + ; + i-- + } + if i < 0 { + return uintptr(0) + } + goto update + goto update + update: + ; + //FIXME + _41: + } + if want_century != 0 { + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = *(*int32)(unsafe.Pointer(bp + 8)) + if want_century&int32(2) != 0 { + *(*int32)(unsafe.Pointer(tm + 20)) += *(*int32)(unsafe.Pointer(bp + 4))*int32(100) - int32(1900) + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year <= int32(68) { + *(*int32)(unsafe.Pointer(tm + 20)) += int32(100) + } + } + } + return s +} + +func Xtime(tls *TLS, t uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + X__clock_gettime(tls, CLOCK_REALTIME, bp) + if t != 0 { + *(*Ttime_t)(unsafe.Pointer(t)) = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec +} + +func Xtimegm(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm1 + _ = t + t = X__tm_to_secs(tls, tm) + if X__secs_to_tm(tls, t, bp) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + *(*Ttm1)(unsafe.Pointer(tm)) = *(*Ttm1)(unsafe.Pointer(bp)) + (*Ttm1)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_gmtoff = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_zone = uintptr(unsafe.Pointer(&X__utc)) + return t +} + +func Xtimer_delete(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1926) + AtomicStorePInt32(td+148, AtomicLoadPInt32(td+148)|(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))) + // __asm__ __volatile__ ("sync" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 40, __ccgo_ts+1926) + X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(td)).Ftid), int64(Int32FromInt32(SIGTIMER))) + return 0 + } + return int32(X__syscall1(tls, int64(SYS_timer_delete), int64(t))) +} + +func Xtimer_getoverrun(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_timer_getoverrun), int64(t))))) +} + +func Xtimer_gettime(tls *TLS, t Ttimer_t, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v val=%v, (%v:)", tls, t, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timer_gettime), int64(t), int64(val))))) +} + +func Xtimer_settime(tls *TLS, t Ttimer_t, flags int32, val uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val=%v old=%v, (%v:)", tls, t, flags, val, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timer_settime), int64(t), int64(flags), int64(val), int64(old))))) +} + +type Ttms = struct { + Ftms_utime Tclock_t + Ftms_stime Tclock_t + Ftms_cutime Tclock_t + Ftms_cstime Tclock_t +} + +func Xtimes(tls *TLS, tms uintptr) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v tms=%v, (%v:)", tls, tms, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall1(tls, int64(SYS_times), int64(tms)) +} + +// C documentation +// +// /* There is no other implemented value than TIME_UTC; all other values +// * are considered erroneous. */ +func Xtimespec_get(tls *TLS, ts uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ts=%v base=%v, (%v:)", tls, ts, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v1 int32 + _, _ = ret, v1 + if base != int32(TIME_UTC) { + return 0 + } + ret = X__clock_gettime(tls, CLOCK_REALTIME, ts) + if ret < 0 { + v1 = 0 + } else { + v1 = base + } + return v1 +} + +type Tutimbuf = struct { + Factime Ttime_t + Fmodtime Ttime_t +} + +func Xutime(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if times != 0 { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Factime, + }, + 1: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Fmodtime, + }, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), path, v1, 0) +} + +func X__wcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var l, v2, v6, v7, v9 Tsize_t + var pad, plus, v4 int32 + var t, t_mb, v3 uintptr + var width uint64 + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+512 */ uintptr + var _ /* wbuf at bp+108 */ [100]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _ = l, pad, plus, t, t_mb, width, v2, v3, v4, v6, v7, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*Twchar_t)(unsafe.Pointer(f)) != 0) { + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + return l + } + if *(*Twchar_t)(unsafe.Pointer(f)) != int32('%') { + v2 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v2)*4)) = *(*Twchar_t)(unsafe.Pointer(f)) + goto _1 + } + f += 4 + pad = 0 + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('_') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('0') { + v3 = f + f += 4 + pad = *(*Twchar_t)(unsafe.Pointer(v3)) + } + v4 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(f)) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f += 4 + } + width = Xwcstoul(tls, f, bp+512, int32(10)) + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('C') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('F') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('G') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 512)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 512)) + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('E') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('O') { + f += 4 + } + t_mb = X__strftime_fmt_1(tls, bp+8, bp, *(*Twchar_t)(unsafe.Pointer(f)), tm, loc, pad) + if !(t_mb != 0) { + break + } + *(*Tsize_t)(unsafe.Pointer(bp)) = Xmbstowcs(tls, bp+108, t_mb, Uint64FromInt64(400)/Uint64FromInt64(4)) + if *(*Tsize_t)(unsafe.Pointer(bp)) == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + t = bp + 108 + if width != 0 { + for { + if !(*(*Twchar_t)(unsafe.Pointer(t)) == int32('+') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('0') && *(*Twchar_t)(unsafe.Pointer(t + 1*4)) != 0) { + break + } + goto _5 + _5: + ; + t += 4 + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + width-- + if plus != 0 && (*Ttm)(unsafe.Pointer(tm)).Ftm_year >= Int32FromInt32(10000)-Int32FromInt32(1900) { + v6 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v6)*4)) = int32('+') + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v7)*4)) = int32('-') + } else { + width++ + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v9 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v9)*4)) = int32('0') + goto _8 + _8: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) >= n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xwmemcpy(tls, s+uintptr(l)*4, t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f += 4 + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + } + return uint64(0) +} + +func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, s, n, f, tm, loc) +} + +func X_exit(tls *TLS, status int32) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + } + X_Exit(tls, status) +} + +func Xaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_access), int64(filename), int64(amode))))) +} + +func Xacct(tls *TLS, filename uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v, (%v:)", tls, filename, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_acct), int64(filename))))) +} + +func Xalarm(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_value: Ttimeval{ + Ftv_sec: int64(seconds), + }, + } + *(*Titimerval)(unsafe.Pointer(bp + 32)) = Titimerval{} + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec + BoolInt64(!!((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec != 0))) +} + +func Xchdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(path))))) +} + +func Xchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_chown), int64(path), int64(uid), int64(gid))))) +} + +func _dummy12(tls *TLS, fd int32) (r int32) { + return fd +} + +func Xclose(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + fd = _dummy12(tls, fd) + r = int32(___syscall_cp(tls, int64(SYS_close), int64(fd), 0, 0, 0, 0, 0)) + if r == -int32(EINTR) { + r = 0 + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xctermid(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if s != 0 { + v1 = Xstrcpy(tls, s, __ccgo_ts+389) + } else { + v1 = __ccgo_ts + 389 + } + return v1 +} + +func Xdup(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_dup), int64(fd))))) +} + +func Xdup2(tls *TLS, old int32, new1 int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + for { + v1 = int32(X__syscall2(tls, int64(SYS_dup2), int64(old), int64(new1))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__dup3(tls *TLS, old int32, new1 int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v2 int32 + _, _, _ = r, v1, v2 + if old == new1 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if flags != 0 { + for { + v1 = int32(X__syscall3(tls, int64(SYS_dup3), int64(old), int64(new1), int64(flags))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + if flags & ^Int32FromInt32(O_CLOEXEC) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + } + for { + v2 = int32(X__syscall2(tls, int64(SYS_dup2), int64(old), int64(new1))) + r = v2 + if !(v2 == -int32(EBUSY)) { + break + } + } + if r >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(new1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xdup3(tls *TLS, old int32, new1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dup3(tls, old, new1, flags) +} + +type Tctx1 = struct { + Ffd int32 + Ffilename uintptr + Famode int32 + Fp int32 +} + +func _checker(tls *TLS, p uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c uintptr + var _ /* ret at bp+0 */ int32 + _ = c + c = p + if X__syscall2(tls, int64(SYS_setregid), X__syscall0(tls, int64(SYS_getegid)), int64(-Int32FromInt32(1))) != 0 || X__syscall2(tls, int64(SYS_setreuid), X__syscall0(tls, int64(SYS_geteuid)), int64(-Int32FromInt32(1))) != 0 { + X__syscall1(tls, int64(SYS_exit), int64(Int32FromInt32(1))) + } + *(*int32)(unsafe.Pointer(bp)) = int32(X__syscall4(tls, int64(SYS_faccessat), int64((*Tctx1)(unsafe.Pointer(c)).Ffd), int64((*Tctx1)(unsafe.Pointer(c)).Ffilename), int64((*Tctx1)(unsafe.Pointer(c)).Famode), int64(Int32FromInt32(0)))) + X__syscall3(tls, int64(SYS_write), int64((*Tctx1)(unsafe.Pointer(c)).Fp), int64(bp), int64(Uint64FromInt64(4))) + return 0 +} + +func Xfaccessat(tls *TLS, fd int32, filename uintptr, amode int32, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v amode=%v flag=%v, (%v:)", tls, fd, filename, amode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if flag != 0 { + ret = int32(X__syscall4(tls, int64(SYS_faccessat2), int64(fd), int64(filename), int64(amode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + if flag & ^Int32FromInt32(AT_EACCESS) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_faccessat), int64(fd), int64(filename), int64(amode))))) +} + +func Xfchdir(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall1(tls, int64(SYS_fchdir), int64(fd))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(bp))))) +} + +func Xfchown(tls *TLS, fd int32, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v uid=%v gid=%v, (%v:)", tls, fd, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall3(tls, int64(SYS_fchown), int64(fd), int64(uid), int64(gid))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_chown), int64(bp), int64(uid), int64(gid))))) +} + +func Xfchownat(tls *TLS, fd int32, path uintptr, uid Tuid_t, gid Tgid_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v uid=%v gid=%v flag=%v, (%v:)", tls, fd, path, uid, gid, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(fd), int64(path), int64(uid), int64(gid), int64(flag))))) +} + +func Xfdatasync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fdatasync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xfsync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fsync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xftruncate(tls *TLS, fd int32, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v length=%v, (%v:)", tls, fd, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_ftruncate), int64(fd), length)))) +} + +func Xgetcwd(tls *TLS, buf uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v, (%v:)", tls, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int64 + var tmp, v3 uintptr + var v1 t__predefined_size_t + var v2 int32 + _, _, _, _, _ = ret, tmp, v1, v2, v3 + defer func() { Xrealloc(tls, tmp, 0) }() + if buf != 0 { + v2 = int32(1) + } else { + v2 = int32(PATH_MAX) + } + v1 = uint64(v2) + tmp = Xrealloc(tls, tmp, v1) + if !(buf != 0) { + buf = tmp + size = v1 + } else { + if !(size != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + } + ret = X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getcwd), int64(buf), int64(size)))) + if ret < 0 { + return uintptr(0) + } + if ret == 0 || int32(*(*uint8)(unsafe.Pointer(buf))) != int32('/') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if buf == tmp { + v3 = Xstrdup(tls, buf) + } else { + v3 = buf + } + return v3 +} + +func Xgetegid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getegid))) +} + +func Xgeteuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_geteuid))) +} + +func Xgetgid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getgid))) +} + +func Xgetgroups(tls *TLS, count int32, list uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v count=%v list=%v, (%v:)", tls, count, list, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getgroups), int64(count), int64(list))))) +} + +func Xgethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var i Tsize_t + var v2 uint8 + var v3 bool + var _ /* uts at bp+0 */ Tutsname1 + _, _, _ = i, v2, v3 + if Xuname(tls, bp) != 0 { + return -int32(1) + } + if len1 > uint64(65) { + len1 = uint64(65) + } + i = uint64(0) + for { + if v3 = i < len1; v3 { + v2 = *(*uint8)(unsafe.Pointer(bp + 65 + uintptr(i))) + *(*uint8)(unsafe.Pointer(name + uintptr(i))) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i != 0 && i == len1 { + *(*uint8)(unsafe.Pointer(name + uintptr(i-uint64(1)))) = uint8(0) + } + return 0 +} + +func Xgetlogin(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetenv(tls, __ccgo_ts+1939) +} + +func Xgetlogin_r(tls *TLS, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v size=%v, (%v:)", tls, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var logname uintptr + _ = logname + logname = Xgetlogin(tls) + if !(logname != 0) { + return int32(ENXIO) + } /* or...? */ + if Xstrlen(tls, logname) >= size { + return int32(ERANGE) + } + Xstrcpy(tls, name, logname) + return 0 +} + +func Xgetpgid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getpgid), int64(pid))))) +} + +func Xgetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall1(tls, int64(SYS_getpgid), int64(Int32FromInt32(0)))) +} + +func Xgetpid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getpid))) +} + +func Xgetppid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getppid))) +} + +func Xgetsid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getsid), int64(pid))))) +} + +func Xgetuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getuid))) +} + +func Xisatty(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r uint64 + var _ /* wsz at bp+0 */ Twinsize + _ = r + r = uint64(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(uint64(Uint32FromUint32(2)< %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_lchown), int64(path), int64(uid), int64(gid))))) +} + +func Xlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_link), int64(existing), int64(new1))))) +} + +func Xlinkat(tls *TLS, fd1 int32, existing uintptr, fd2 int32, new1 uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd1=%v existing=%v fd2=%v new1=%v flag=%v, (%v:)", tls, fd1, existing, fd2, new1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_linkat), int64(fd1), int64(existing), int64(fd2), int64(new1), int64(flag))))) +} + +func X__lseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int64 + var _ /* result at bp+0 */ Toff_t + _ = v1 + if X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS__llseek), int64(fd), offset>>Int32FromInt32(32), offset, int64(bp), int64(whence)))) != 0 { + v1 = int64(-int32(1)) + } else { + v1 = *(*Toff_t)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xlseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, fd, offset, whence) +} + +func Xnice(tls *TLS, inc int32) (r int32) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var prio int32 + _ = prio + prio = inc + // Only query old priority if it can affect the result. + // This also avoids issues with integer overflow. + if inc > -Int32FromInt32(2)*Int32FromInt32(NZERO) && inc < Int32FromInt32(2)*Int32FromInt32(NZERO) { + prio += Xgetpriority(tls, PRIO_PROCESS, uint32(0)) + } + if prio > Int32FromInt32(NZERO)-Int32FromInt32(1) { + prio = Int32FromInt32(NZERO) - Int32FromInt32(1) + } + if prio < -int32(NZERO) { + prio = -int32(NZERO) + } + if Xsetpriority(tls, PRIO_PROCESS, uint32(0), prio) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EPERM) + } + return -int32(1) + } else { + return prio + } + return r +} + +func Xpause(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pause), 0, 0, 0, 0, 0, 0)))) +} + +func Xpipe(tls *TLS, fd uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_pipe), int64(fd))))) +} + +func Xpipe2(tls *TLS, fd uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flag=%v, (%v:)", tls, fd, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if !(flag != 0) { + return Xpipe(tls, fd) + } + ret = int32(X__syscall2(tls, int64(SYS_pipe2), int64(fd), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag & ^(Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret = Xpipe(tls, fd) + if ret != 0 { + return ret + } + if flag&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flag&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return 0 +} + +func Xposix_close(tls *TLS, fd int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v, (%v:)", tls, fd, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclose(tls, fd) +} + +func Xpread(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pread64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpreadv(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xpwrite(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwrite64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpwritev(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xread(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_read), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xreadlink(tls *TLS, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v bufsize=%v, (%v:)", tls, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadlinkat(tls *TLS, fd int32, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v buf=%v bufsize=%v, (%v:)", tls, fd, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(fd), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadv(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_readv), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func Xrenameat(tls *TLS, oldfd int32, old uintptr, newfd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v oldfd=%v old=%v newfd=%v new1=%v, (%v:)", tls, oldfd, old, newfd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_renameat), int64(oldfd), int64(old), int64(newfd), int64(new1))))) +} + +func Xrmdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_rmdir), int64(path))))) +} + +func Xsetgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setgid), int32(gid), 0, 0) +} + +func Xsetpgid(tls *TLS, pid Tpid_t, pgid Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v pgid=%v, (%v:)", tls, pid, pgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setpgid), int64(pid), int64(pgid))))) +} + +func Xsetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsetpgid(tls, 0, 0) +} + +func Xsetsid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_setsid))))) +} + +func Xsetuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setuid), int32(uid), 0, 0) +} + +type Tctx2 = struct { + Fid int32 + Feid int32 + Fsid int32 + Fnr int32 + Fret int32 +} + +func _do_setxid(tls *TLS, p uintptr) { + var c uintptr + var ret int32 + _, _ = c, ret + c = p + if (*Tctx2)(unsafe.Pointer(c)).Fret < 0 { + return + } + ret = int32(X__syscall3(tls, int64((*Tctx2)(unsafe.Pointer(c)).Fnr), int64((*Tctx2)(unsafe.Pointer(c)).Fid), int64((*Tctx2)(unsafe.Pointer(c)).Feid), int64((*Tctx2)(unsafe.Pointer(c)).Fsid))) + if ret != 0 && !((*Tctx2)(unsafe.Pointer(c)).Fret != 0) { + /* If one thread fails to set ids after another has already + * succeeded, forcibly killing the process is the only safe + * thing to do. State is inconsistent and dangerous. Use + * SIGKILL because it is uncatchable. */ + X__block_all_sigs(tls, uintptr(0)) + X__syscall2(tls, int64(SYS_kill), X__syscall0(tls, int64(SYS_getpid)), int64(Int32FromInt32(SIGKILL))) + } + (*Tctx2)(unsafe.Pointer(c)).Fret = ret +} + +func X__setxid(tls *TLS, nr int32, id int32, eid int32, sid int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nr=%v id=%v eid=%v sid=%v, (%v:)", tls, nr, id, eid, sid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 int32 + var _ /* c at bp+0 */ Tctx2 + _ = v1 + /* ret is initially nonzero so that failure of the first thread does not + * trigger the safety kill above. */ + *(*Tctx2)(unsafe.Pointer(bp)) = Tctx2{ + Fid: id, + Feid: eid, + Fsid: sid, + Fnr: nr, + Fret: int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setxid), bp) + if (*(*Tctx2)(unsafe.Pointer(bp))).Fret > 0 { + v1 = -int32(EAGAIN) + } else { + v1 = (*(*Tctx2)(unsafe.Pointer(bp))).Fret + } + return int32(X__syscall_ret(tls, uint64(v1))) +} + +func Xsleep(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(seconds), + } + if Xnanosleep(tls, bp, bp) != 0 { + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + } + return uint32(0) +} + +func Xsymlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_symlink), int64(existing), int64(new1))))) +} + +func Xsymlinkat(tls *TLS, existing uintptr, fd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v fd=%v new1=%v, (%v:)", tls, existing, fd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_symlinkat), int64(existing), int64(fd), int64(new1))))) +} + +func Xsync(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__syscall0(tls, int64(SYS_sync)) +} + +func Xtcgetpgrp(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp at bp+0 */ int32 + if Xioctl(tls, fd, int32(uint64(Uint32FromUint32(2)< %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp_int at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = pgrp + return Xioctl(tls, fd, int32(uint64(Uint32FromUint32(4)< %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_truncate), int64(path), length)))) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xttyname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var result, v1 int32 + _, _ = result, v1 + v1 = Xttyname_r(tls, fd, uintptr(unsafe.Pointer(&_buf10)), uint64(32)) + result = v1 + if v1 != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = result + return UintptrFromInt32(0) + } + return uintptr(unsafe.Pointer(&_buf10)) +} + +var _buf10 [32]uint8 + +func Xttyname_r(tls *TLS, fd int32, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v size=%v, (%v:)", tls, fd, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var l Tssize_t + var _ /* procname at bp+288 */ [29]uint8 + var _ /* st1 at bp+0 */ Tstat + var _ /* st2 at bp+144 */ Tstat + _ = l + if !(Xisatty(tls, fd) != 0) { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + X__procfdname(tls, bp+288, uint32(fd)) + l = Xreadlink(tls, bp+288, name, size) + if l < 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + if uint64(l) == size { + return int32(ERANGE) + } + } + *(*uint8)(unsafe.Pointer(name + uintptr(l))) = uint8(0) + if Xstat(tls, name, bp) != 0 || Xfstat(tls, fd, bp+144) != 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev || (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return int32(ENODEV) + } + return 0 +} + +func Xualarm(tls *TLS, value uint32, interval uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v value=%v interval=%v, (%v:)", tls, value, interval, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* it_old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_usec: int64(interval), + }, + Fit_value: Ttimeval{ + Ftv_usec: int64(value), + }, + } + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec*int64(1000000) + (*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) +} + +func Xunlink(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_unlink), int64(path))))) +} + +func Xunlinkat(tls *TLS, fd int32, path uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v flag=%v, (%v:)", tls, fd, path, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_unlinkat), int64(fd), int64(path), int64(flag))))) +} + +func Xusleep(tls *TLS, useconds uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v useconds=%v, (%v:)", tls, useconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(useconds / uint32(1000000)), + Ftv_nsec: int64(useconds % uint32(1000000) * uint32(1000)), + } + return Xnanosleep(tls, bp, bp) +} + +func Xwrite(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_write), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xwritev(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_writev), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func __ccgo_fp(f interface{}) uintptr { + type iface [2]uintptr + return (*iface)(unsafe.Pointer(&f))[1] +} + +var X__abort_lock [1]int32 + +var X__at_quick_exit_lockptr = uintptr(unsafe.Pointer(&_lock)) + +var X__c_dot_utf8 = t__locale_map{ + Fmap1: uintptr(unsafe.Pointer(&_empty_mo)), + Fmap_size: uint64(20), + Fname: [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'}, +} + +var X__c_dot_utf8_locale = t__locale_struct{ + Fcat: [6]uintptr{ + 0: uintptr(unsafe.Pointer(&X__c_dot_utf8)), + }, +} + +var X__c_locale = t__locale_struct{} + +var Xdaylight int32 + +var X__eintr_valid_flag int32 + +var Xenviron uintptr + +var X__exp2f_data = Texp2f_data{ + Ftab: [32]Tuint64_t{ + 0: uint64(0x3ff0000000000000), + 1: uint64(0x3fefd9b0d3158574), + 2: uint64(0x3fefb5586cf9890f), + 3: uint64(0x3fef9301d0125b51), + 4: uint64(0x3fef72b83c7d517b), + 5: uint64(0x3fef54873168b9aa), + 6: uint64(0x3fef387a6e756238), + 7: uint64(0x3fef1e9df51fdee1), + 8: uint64(0x3fef06fe0a31b715), + 9: uint64(0x3feef1a7373aa9cb), + 10: uint64(0x3feedea64c123422), + 11: uint64(0x3feece086061892d), + 12: uint64(0x3feebfdad5362a27), + 13: uint64(0x3feeb42b569d4f82), + 14: uint64(0x3feeab07dd485429), + 15: uint64(0x3feea47eb03a5585), + 16: uint64(0x3feea09e667f3bcd), + 17: uint64(0x3fee9f75e8ec5f74), + 18: uint64(0x3feea11473eb0187), + 19: uint64(0x3feea589994cce13), + 20: uint64(0x3feeace5422aa0db), + 21: uint64(0x3feeb737b0cdc5e5), + 22: uint64(0x3feec49182a3f090), + 23: uint64(0x3feed503b23e255d), + 24: uint64(0x3feee89f995ad3ad), + 25: uint64(0x3feeff76f2fb5e47), + 26: uint64(0x3fef199bdd85529c), + 27: uint64(0x3fef3720dcef9069), + 28: uint64(0x3fef5818dcfba487), + 29: uint64(0x3fef7c97337b9b5f), + 30: uint64(0x3fefa4afa2a490da), + 31: uint64(0x3fefd0765b6e4540), + }, + Fshift_scaled: Float64FromFloat64(6.755399441055744e+15) / float64(Int32FromInt32(1)<>Int32FromInt32(6) | Uint32FromInt32(0x0), + 31: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x1), + 32: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x2), + 33: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x3), + 34: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x4), + 35: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x5), + 36: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x6), + 37: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x7), + 38: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x8), + 39: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x9), + 40: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xa), + 41: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xb), + 42: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xc), + 43: (Uint32FromUint32(0x40)-Uint32FromInt32(0xa0))<>Int32FromInt32(6) | Uint32FromInt32(0xd), + 44: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xe), + 45: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xf), + 46: (Uint32FromUint32(0)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x0), + 47: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x1), + 48: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x2), + 49: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x3), + 50: (Uint32FromUint32(0x40)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x4), +} + +var X__gettext_lockptr = uintptr(unsafe.Pointer(&_lock1)) + +var X__hwcap Tsize_t + +var X__libc t__libc + +var X__libc_version = [6]uint8{'1', '.', '2', '.', '5'} + +var X__locale_lock [1]int32 + +var X__locale_lockptr = uintptr(unsafe.Pointer(&X__locale_lock)) + +var X__log2_data = Tlog2_data{ + Finvln2hi: float64(1.4426950407214463), + Finvln2lo: float64(1.6751713164886512e-10), + Fpoly: [6]float64{ + 0: -Float64FromFloat64(0.7213475204444882), + 1: float64(0.4808983469629985), + 2: -Float64FromFloat64(0.36067375954075914), + 3: float64(0.2885390073180969), + 4: -Float64FromFloat64(0.2404693555628422), + 5: float64(0.2061202382173603), + }, + Fpoly1: [10]float64{ + 0: -Float64FromFloat64(0.7213475204444817), + 1: float64(0.48089834696298744), + 2: -Float64FromFloat64(0.360673760222145), + 3: float64(0.2885390081805197), + 4: -Float64FromFloat64(0.24044917405728863), + 5: float64(0.2060992861022954), + 6: -Float64FromFloat64(0.18033596705327856), + 7: float64(0.1603032746063156), + 8: -Float64FromFloat64(0.14483316576701266), + 9: float64(0.13046826811283835), + }, + Ftab: [64]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4463276106642393), + Flogc: -Float64FromFloat64(0.5323943771486483), + }, + 1: { + Finvc: float64(1.4301675812282968), + Flogc: -Float64FromFloat64(0.516184206053822), + }, + 2: { + Finvc: float64(1.4143648676229383), + Flogc: -Float64FromFloat64(0.5001543441974263), + }, + 3: { + Finvc: float64(1.3989068970611538), + Flogc: -Float64FromFloat64(0.4842999484799293), + }, + 4: { + Finvc: float64(1.3837838957784339), + Flogc: -Float64FromFloat64(0.46861865624623533), + }, + 5: { + Finvc: float64(1.368983882697786), + Flogc: -Float64FromFloat64(0.4531054615783887), + }, + 6: { + Finvc: float64(1.3544972916324536), + Flogc: -Float64FromFloat64(0.43775750882059583), + }, + 7: { + Finvc: float64(1.3403139676437443), + Flogc: -Float64FromFloat64(0.4225709906127122), + }, + 8: { + Finvc: float64(1.3264249304188642), + Flogc: -Float64FromFloat64(0.40754302793970965), + }, + 9: { + Finvc: float64(1.3128203652112156), + Flogc: -Float64FromFloat64(0.3926695240384106), + }, + 10: { + Finvc: float64(1.299492412370217), + Flogc: -Float64FromFloat64(0.3779482100565019), + }, + 11: { + Finvc: float64(1.28643198385998), + Flogc: -Float64FromFloat64(0.36337518101890964), + }, + 12: { + Finvc: float64(1.2736319291846832), + Flogc: -Float64FromFloat64(0.3489484089425332), + }, + 13: { + Finvc: float64(1.2610838968062879), + Flogc: -Float64FromFloat64(0.33466425780738973), + }, + 14: { + Finvc: float64(1.248780314313572), + Flogc: -Float64FromFloat64(0.3205197000629596), + }, + 15: { + Finvc: float64(1.2367150450059063), + Flogc: -Float64FromFloat64(0.3065131231801388), + }, + 16: { + Finvc: float64(1.2248804968401878), + Flogc: -Float64FromFloat64(0.2926410022678283), + }, + 17: { + Finvc: float64(1.2132702353497795), + Flogc: -Float64FromFloat64(0.2789009220805383), + }, + 18: { + Finvc: float64(1.2018780785715362), + Flogc: -Float64FromFloat64(0.2652905529862437), + }, + 19: { + Finvc: float64(1.190697765061355), + Flogc: -Float64FromFloat64(0.2518072602367738), + }, + 20: { + Finvc: float64(1.1797235410550593), + Flogc: -Float64FromFloat64(0.23844881494437686), + }, + 21: { + Finvc: float64(1.1689498986205256), + Flogc: -Float64FromFloat64(0.22521309705462045), + }, + 22: { + Finvc: float64(1.158371137408455), + Flogc: -Float64FromFloat64(0.21209756102439314), + }, + 23: { + Finvc: float64(1.1479820146386086), + Flogc: -Float64FromFloat64(0.1991000395789797), + }, + 24: { + Finvc: float64(1.1377775576851088), + Flogc: -Float64FromFloat64(0.18621852970682085), + }, + 25: { + Finvc: float64(1.127753150630225), + Flogc: -Float64FromFloat64(0.17345131655361), + }, + 26: { + Finvc: float64(1.1179037012282074), + Flogc: -Float64FromFloat64(0.16079591649577196), + }, + 27: { + Finvc: float64(1.1082251967632821), + Flogc: -Float64FromFloat64(0.14825107384353942), + }, + 28: { + Finvc: float64(1.098712461056607), + Flogc: -Float64FromFloat64(0.13581387465410444), + }, + 29: { + Finvc: float64(1.0893619091634283), + Flogc: -Float64FromFloat64(0.12348332762257996), + }, + 30: { + Finvc: float64(1.0801689912316736), + Flogc: -Float64FromFloat64(0.11125703807351783), + }, + 31: { + Finvc: float64(1.071129489697672), + Flogc: -Float64FromFloat64(0.09913289918449664), + }, + 32: { + Finvc: float64(1.0622406576750423), + Flogc: -Float64FromFloat64(0.08711065531497297), + }, + 33: { + Finvc: float64(1.0534977607927976), + Flogc: -Float64FromFloat64(0.07518724771330199), + }, + 34: { + Finvc: float64(1.044897877982342), + Flogc: -Float64FromFloat64(0.06336194888240243), + }, + 35: { + Finvc: float64(1.0364370289499079), + Flogc: -Float64FromFloat64(0.0516324649456692), + }, + 36: { + Finvc: float64(1.0281122132034575), + Flogc: -Float64FromFloat64(0.039997735929773626), + }, + 37: { + Finvc: float64(1.0199202450036955), + Flogc: -Float64FromFloat64(0.028456341769015125), + }, + 38: { + Finvc: float64(1.0118577522306755), + Flogc: -Float64FromFloat64(0.017006489068080555), + }, + 39: { + Finvc: float64(1.003921649236766), + Flogc: -Float64FromFloat64(0.005646678981520381), + }, + 40: { + Finvc: float64(0.9922480467550775), + Flogc: float64(0.011227277611396858), + }, + 41: { + Finvc: float64(0.9770993366178549), + Flogc: float64(0.033422853921138085), + }, + 42: { + Finvc: float64(0.9624059787315814), + Flogc: float64(0.05528248992573026), + }, + 43: { + Finvc: float64(0.9481480598286369), + Flogc: float64(0.07681573143713649), + }, + 44: { + Finvc: float64(0.9343065931261065), + Flogc: float64(0.09803204623631245), + }, + 45: { + Finvc: float64(0.9208633936884979), + Flogc: float64(0.11894094059630334), + }, + 46: { + Finvc: float64(0.9078013641840602), + Flogc: float64(0.13955143862290242), + }, + 47: { + Finvc: float64(0.8951048181512927), + Flogc: float64(0.15987146080919956), + }, + 48: { + Finvc: float64(0.882758574260473), + Flogc: float64(0.17990916589428707), + }, + 49: { + Finvc: float64(0.8707481902241709), + Flogc: float64(0.19967252559081317), + }, + 50: { + Finvc: float64(0.8590602881746972), + Flogc: float64(0.2191687127685782), + }, + 51: { + Finvc: float64(0.8476822044336688), + Flogc: float64(0.23840459427242422), + }, + 52: { + Finvc: float64(0.8366013284053287), + Flogc: float64(0.25738780610663525), + }, + 53: { + Finvc: float64(0.8258064913621258), + Flogc: float64(0.27612433583180973), + }, + 54: { + Finvc: float64(0.8152865101579193), + Flogc: float64(0.2946209507022104), + }, + 55: { + Finvc: float64(0.8050314363208223), + Flogc: float64(0.31288297359969874), + }, + 56: { + Finvc: float64(0.7950310492640542), + Flogc: float64(0.33091689015759584), + }, + 57: { + Finvc: float64(0.7852760432487271), + Flogc: float64(0.3487282100279572), + }, + 58: { + Finvc: float64(0.7757575660314712), + Flogc: float64(0.36632223233368677), + }, + 59: { + Finvc: float64(0.7664670566588946), + Flogc: float64(0.383704309808536), + }, + 60: { + Finvc: float64(0.7573965608078645), + Flogc: float64(0.4008792246509074), + }, + 61: { + Finvc: float64(0.7485380168514022), + Flogc: float64(0.41785250494945103), + }, + 62: { + Finvc: float64(0.7398844213755009), + Flogc: float64(0.4346281724315304), + }, + 63: { + Finvc: float64(0.7314286113178112), + Flogc: float64(0.45121103315341315), + }, + }, +} + +var X__log2f_data = Tlog2f_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.42257122959194704), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.3633754347673556), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.30651309567405577), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.25180720160537634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.19910014943794563), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.14825100623281615), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.09913323807318392), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.051632812977629436), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.07508531937943004), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.15987125980713107), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.2384046664317681), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.31288288605863257), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.38370422656453185), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.451211048935815), + }, + }, + Fpoly: [4]float64{ + 0: -Float64FromFloat64(0.36051725506874704), + 1: float64(0.4811247078767291), + 2: -Float64FromFloat64(0.7213476299867769), + 3: float64(1.4426950186867042), + }, +} + +var X__log_data = Tlog_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [5]float64{ + 0: -Float64FromFloat64(0.5000000000000001), + 1: float64(0.33333333331825593), + 2: -Float64FromFloat64(0.2499999999622955), + 3: float64(0.20000304511814496), + 4: -Float64FromFloat64(0.16667054827627667), + }, + Fpoly1: [11]float64{ + 0: -Float64FromFloat64(0.5), + 1: float64(0.3333333333333352), + 2: -Float64FromFloat64(0.24999999999998432), + 3: float64(0.19999999999320328), + 4: -Float64FromFloat64(0.16666666669929706), + 5: float64(0.14285715076560868), + 6: -Float64FromFloat64(0.12499997863982555), + 7: float64(0.11110712032936046), + 8: -Float64FromFloat64(0.10000486757818193), + 9: float64(0.09181994006195467), + 10: -Float64FromFloat64(0.08328363062289341), + }, + Ftab: [128]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4504249240398293), + Flogc: -Float64FromFloat64(0.3718565645633589), + }, + 1: { + Finvc: float64(1.442253508327276), + Flogc: -Float64FromFloat64(0.36620682668944937), + }, + 2: { + Finvc: float64(1.4341736174350004), + Flogc: -Float64FromFloat64(0.3605888069791945), + }, + 3: { + Finvc: float64(1.426183816329995), + Flogc: -Float64FromFloat64(0.3550022171419869), + }, + 4: { + Finvc: float64(1.4182825527052965), + Flogc: -Float64FromFloat64(0.34944666968829097), + }, + 5: { + Finvc: float64(1.4104682921759335), + Flogc: -Float64FromFloat64(0.3439217713603284), + }, + 6: { + Finvc: float64(1.4027396147468003), + Flogc: -Float64FromFloat64(0.3384271921261188), + }, + 7: { + Finvc: float64(1.3950954438932313), + Flogc: -Float64FromFloat64(0.332962831494342), + }, + 8: { + Finvc: float64(1.3875338232485754), + Flogc: -Float64FromFloat64(0.32752794345742586), + }, + 9: { + Finvc: float64(1.3800539211058593), + Flogc: -Float64FromFloat64(0.32212257167088865), + }, + 10: { + Finvc: float64(1.3726542695419708), + Flogc: -Float64FromFloat64(0.3167462884799761), + }, + 11: { + Finvc: float64(1.3653332798446802), + Flogc: -Float64FromFloat64(0.3113985598928366), + }, + 12: { + Finvc: float64(1.358090204587874), + Flogc: -Float64FromFloat64(0.3060794515165526), + }, + 13: { + Finvc: float64(1.3509234892132138), + Flogc: -Float64FromFloat64(0.300788424667644), + }, + 14: { + Finvc: float64(1.3438320840699889), + Flogc: -Float64FromFloat64(0.2955252968476998), + }, + 15: { + Finvc: float64(1.3368146974742003), + Flogc: -Float64FromFloat64(0.29028969275850613), + }, + 16: { + Finvc: float64(1.329870114677736), + Flogc: -Float64FromFloat64(0.2850812793277555), + }, + 17: { + Finvc: float64(1.322997339161106), + Flogc: -Float64FromFloat64(0.27989987391470095), + }, + 18: { + Finvc: float64(1.316195352741367), + Flogc: -Float64FromFloat64(0.27474526621870154), + }, + 19: { + Finvc: float64(1.3094628125672239), + Flogc: -Float64FromFloat64(0.2696169863701243), + }, + 20: { + Finvc: float64(1.3027990455471041), + Flogc: -Float64FromFloat64(0.26451506180308115), + }, + 21: { + Finvc: float64(1.2962024229438942), + Flogc: -Float64FromFloat64(0.2594387762767383), + }, + 22: { + Finvc: float64(1.2896726275815547), + Flogc: -Float64FromFloat64(0.2543884090981692), + }, + 23: { + Finvc: float64(1.2832080305745537), + Flogc: -Float64FromFloat64(0.24936321635129843), + }, + 24: { + Finvc: float64(1.276807885983376), + Flogc: -Float64FromFloat64(0.24436312405975968), + }, + 25: { + Finvc: float64(1.2704714060687552), + Flogc: -Float64FromFloat64(0.23938801747897287), + }, + 26: { + Finvc: float64(1.2641976054949482), + Flogc: -Float64FromFloat64(0.23443761696705678), + }, + 27: { + Finvc: float64(1.257985357514882), + Flogc: -Float64FromFloat64(0.22951151871518505), + }, + 28: { + Finvc: float64(1.2518337750655457), + Flogc: -Float64FromFloat64(0.2246094963439873), + }, + 29: { + Finvc: float64(1.2457421919097305), + Flogc: -Float64FromFloat64(0.21973149037705753), + }, + 30: { + Finvc: float64(1.2397094966625508), + Flogc: -Float64FromFloat64(0.2148770752847895), + }, + 31: { + Finvc: float64(1.2337348463589233), + Flogc: -Float64FromFloat64(0.210046029103637), + }, + 32: { + Finvc: float64(1.2278176973028803), + Flogc: -Float64FromFloat64(0.20523836373934046), + }, + 33: { + Finvc: float64(1.2219570190618474), + Flogc: -Float64FromFloat64(0.20045368751368642), + }, + 34: { + Finvc: float64(1.2161519732977757), + Flogc: -Float64FromFloat64(0.1956917537758045), + }, + 35: { + Finvc: float64(1.2104018095009725), + Flogc: -Float64FromFloat64(0.19095237845203883), + }, + 36: { + Finvc: float64(1.204705805718973), + Flogc: -Float64FromFloat64(0.18623539250290833), + }, + 37: { + Finvc: float64(1.1990631185441964), + Flogc: -Float64FromFloat64(0.18154051731551135), + }, + 38: { + Finvc: float64(1.1934733004462308), + Flogc: -Float64FromFloat64(0.1768677957431919), + }, + 39: { + Finvc: float64(1.1879350812847385), + Flogc: -Float64FromFloat64(0.17221657406412305), + }, + 40: { + Finvc: float64(1.1824481322833125), + Flogc: -Float64FromFloat64(0.16758697765942543), + }, + 41: { + Finvc: float64(1.1770114976921955), + Flogc: -Float64FromFloat64(0.16297859687290384), + }, + 42: { + Finvc: float64(1.1716248121809465), + Flogc: -Float64FromFloat64(0.15839151377804228), + }, + 43: { + Finvc: float64(1.1662869231674715), + Flogc: -Float64FromFloat64(0.15382513241456763), + }, + 44: { + Finvc: float64(1.1609977486762766), + Flogc: -Float64FromFloat64(0.14927976358922024), + }, + 45: { + Finvc: float64(1.1557563220795803), + Flogc: -Float64FromFloat64(0.14475495398119165), + }, + 46: { + Finvc: float64(1.1505619105480347), + Flogc: -Float64FromFloat64(0.14025044090817573), + }, + 47: { + Finvc: float64(1.1454138888505974), + Flogc: -Float64FromFloat64(0.1357660466685502), + }, + 48: { + Finvc: float64(1.140311877374656), + Flogc: -Float64FromFloat64(0.1313018016355727), + }, + 49: { + Finvc: float64(1.1352550225747513), + Flogc: -Float64FromFloat64(0.12685731518763532), + }, + 50: { + Finvc: float64(1.1302429094831266), + Flogc: -Float64FromFloat64(0.1224325737671279), + }, + 51: { + Finvc: float64(1.1252747693068048), + Flogc: -Float64FromFloat64(0.11802724521862729), + }, + 52: { + Finvc: float64(1.1203501571039876), + Flogc: -Float64FromFloat64(0.11364127671663482), + }, + 53: { + Finvc: float64(1.1154683327680124), + Flogc: -Float64FromFloat64(0.10927434611278386), + }, + 54: { + Finvc: float64(1.1106291463292157), + Flogc: -Float64FromFloat64(0.10492665324943573), + }, + 55: { + Finvc: float64(1.1058315813301596), + Flogc: -Float64FromFloat64(0.10059761422644442), + }, + 56: { + Finvc: float64(1.1010752177696026), + Flogc: -Float64FromFloat64(0.09628717309055901), + }, + 57: { + Finvc: float64(1.0963597137952512), + Flogc: -Float64FromFloat64(0.09199534069557558), + }, + 58: { + Finvc: float64(1.0916844827550398), + Flogc: -Float64FromFloat64(0.08772190036688698), + }, + 59: { + Finvc: float64(1.0870487291277784), + Flogc: -Float64FromFloat64(0.08346643613867855), + }, + 60: { + Finvc: float64(1.082452357388312), + Flogc: -Float64FromFloat64(0.07922916827544668), + }, + 61: { + Finvc: float64(1.0778948225025884), + Flogc: -Float64FromFloat64(0.0750099004750382), + }, + 62: { + Finvc: float64(1.0733751731601076), + Flogc: -Float64FromFloat64(0.07080805133352897), + }, + 63: { + Finvc: float64(1.068893585073351), + Flogc: -Float64FromFloat64(0.06662408085151128), + }, + 64: { + Finvc: float64(1.0644491706655506), + Flogc: -Float64FromFloat64(0.06245745471915143), + }, + 65: { + Finvc: float64(1.0600414846328305), + Flogc: -Float64FromFloat64(0.0583080438042316), + }, + 66: { + Finvc: float64(1.0556701316181605), + Flogc: -Float64FromFloat64(0.05417576112313327), + }, + 67: { + Finvc: float64(1.051334750556926), + Flogc: -Float64FromFloat64(0.050060547896805474), + }, + 68: { + Finvc: float64(1.0470347288442157), + Flogc: -Float64FromFloat64(0.045962101199052086), + }, + 69: { + Finvc: float64(1.0427699229652954), + Flogc: -Float64FromFloat64(0.04188056008865715), + }, + 70: { + Finvc: float64(1.0385395013738175), + Flogc: -Float64FromFloat64(0.03781540056183985), + }, + 71: { + Finvc: float64(1.034343418940345), + Flogc: -Float64FromFloat64(0.03376684757915882), + }, + 72: { + Finvc: float64(1.0301811073173315), + Flogc: -Float64FromFloat64(0.029734619131772888), + }, + 73: { + Finvc: float64(1.026052043621297), + Flogc: -Float64FromFloat64(0.025718470239212365), + }, + 74: { + Finvc: float64(1.0219561082336197), + Flogc: -Float64FromFloat64(0.021718543925430822), + }, + 75: { + Finvc: float64(1.0178926505784922), + Flogc: -Float64FromFloat64(0.01773446126981071), + }, + 76: { + Finvc: float64(1.0138614436244586), + Flogc: -Float64FromFloat64(0.013766252464051831), + }, + 77: { + Finvc: float64(1.0098620186501341), + Flogc: -Float64FromFloat64(0.009813706322574944), + }, + 78: { + Finvc: float64(1.0058938559734134), + Flogc: -Float64FromFloat64(0.005876555150052809), + }, + 79: { + Finvc: float64(1.00195696235014), + Flogc: -Float64FromFloat64(0.0019550499938532084), + }, + 80: { + Finvc: float64(0.9961089923088509), + Flogc: float64(0.0038985973556009412), + }, + 81: { + Finvc: float64(0.9884170338185201), + Flogc: float64(0.011650571286395461), + }, + 82: { + Finvc: float64(0.9808429191005297), + Flogc: float64(0.019342955478919066), + }, + 83: { + Finvc: float64(0.9733840169987446), + Flogc: float64(0.0269766014846482), + }, + 84: { + Finvc: float64(0.9660377568876556), + Flogc: float64(0.034552359728422744), + }, + 85: { + Finvc: float64(0.9588014945307369), + Flogc: float64(0.04207121767183253), + }, + 86: { + Finvc: float64(0.9516728569073111), + Flogc: float64(0.049533940950141186), + }, + 87: { + Finvc: float64(0.9446494635965822), + Flogc: float64(0.056941358295944156), + }, + 88: { + Finvc: float64(0.9377288993026223), + Flogc: float64(0.06429439168346107), + }, + 89: { + Finvc: float64(0.9309091073790681), + Flogc: float64(0.0715936354946507), + }, + 90: { + Finvc: float64(0.924187681612722), + Flogc: float64(0.07884010933776153), + }, + 91: { + Finvc: float64(0.9175626765599192), + Flogc: float64(0.08603438905970506), + }, + 92: { + Finvc: float64(0.9110320403624034), + Flogc: float64(0.09317721180013905), + }, + 93: { + Finvc: float64(0.9045935839762024), + Flogc: float64(0.10026951462748457), + }, + 94: { + Finvc: float64(0.8982456375922825), + Flogc: float64(0.10731170956330516), + }, + 95: { + Finvc: float64(0.8919860966782501), + Flogc: float64(0.11430473320717738), + }, + 96: { + Finvc: float64(0.8858131121185129), + Flogc: float64(0.12124928503033061), + }, + 97: { + Finvc: float64(0.879725075760676), + Flogc: float64(0.12814583422959913), + }, + 98: { + Finvc: float64(0.8737201372634685), + Flogc: float64(0.1349951636851756), + }, + 99: { + Finvc: float64(0.8677966405782273), + Flogc: float64(0.1417978768189414), + }, + 100: { + Finvc: float64(0.8619528050060739), + Flogc: float64(0.14855476039031146), + }, + 101: { + Finvc: float64(0.8561872354420692), + Flogc: float64(0.1552661937658968), + }, + 102: { + Finvc: float64(0.8504983927816893), + Flogc: float64(0.16193275688146969), + }, + 103: { + Finvc: float64(0.8448844572790304), + Flogc: float64(0.16855539792220497), + }, + 104: { + Finvc: float64(0.8393442741575965), + Flogc: float64(0.1751343179947753), + }, + 105: { + Finvc: float64(0.8338762249349438), + Flogc: float64(0.1816702989864325), + }, + 106: { + Finvc: float64(0.8284789320557778), + Flogc: float64(0.18816387146023317), + }, + 107: { + Finvc: float64(0.8231510800065832), + Flogc: float64(0.1946155228479256), + }, + 108: { + Finvc: float64(0.8178913903778707), + Flogc: float64(0.20102572579389744), + }, + 109: { + Finvc: float64(0.8126984007245374), + Flogc: float64(0.2073952090795501), + }, + 110: { + Finvc: float64(0.8075710029460227), + Flogc: float64(0.21372429840596396), + }, + 111: { + Finvc: float64(0.8025078881160415), + Flogc: float64(0.2200135945981856), + }, + 112: { + Finvc: float64(0.7975077379364331), + Flogc: float64(0.22626374162859975), + }, + 113: { + Finvc: float64(0.792569604966373), + Flogc: float64(0.23247494747693054), + }, + 114: { + Finvc: float64(0.7876923641254114), + Flogc: float64(0.23864766620658884), + }, + 115: { + Finvc: float64(0.7828746724940998), + Flogc: float64(0.24478265647405806), + }, + 116: { + Finvc: float64(0.7781155388790811), + Flogc: float64(0.25088025827324145), + }, + 117: { + Finvc: float64(0.7734139557869777), + Flogc: float64(0.2569408552510595), + }, + 118: { + Finvc: float64(0.7687687179914933), + Flogc: float64(0.26296511155101143), + }, + 119: { + Finvc: float64(0.7641790698041854), + Flogc: float64(0.2689531327189343), + }, + 120: { + Finvc: float64(0.7596438763692399), + Flogc: float64(0.27490553924610595), + }, + 121: { + Finvc: float64(0.7551621951078668), + Flogc: float64(0.2808227248478943), + }, + 122: { + Finvc: float64(0.7507331780216866), + Flogc: float64(0.286704979267256), + }, + 123: { + Finvc: float64(0.7463557196361751), + Flogc: float64(0.29255295645509705), + }, + 124: { + Finvc: float64(0.7420289364869653), + Flogc: float64(0.2983670386142876), + }, + 125: { + Finvc: float64(0.7377521537065876), + Flogc: float64(0.30414734587282055), + }, + 126: { + Finvc: float64(0.7335242966002608), + Flogc: float64(0.30989455774829366), + }, + 127: { + Finvc: float64(0.729344777457841), + Flogc: float64(0.31560871301871884), + }, + }, +} + +var X__logf_data = Tlogf_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.33569133332882284), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.2929040563774074), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.2518726580937369), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.21245868807117255), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.17453945183745634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.1380057072319758), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.10275976698545139), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.06871392447020525), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.0357891387398228), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.05204517742929496), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.11081431298787942), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.1652495223695143), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.21687389031699977), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.2659635028121397), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.3127556664073557), + }, + }, + Fln2: float64(0.6931471805599453), + Fpoly: [3]float64{ + 0: -Float64FromFloat64(0.25089342214237154), + 1: float64(0.333456765744066), + 2: -Float64FromFloat64(0.4999997485802103), + }, +} + +var X__optpos int32 + +var Xoptreset int32 + +var X__pow_log_data = Tpow_log_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [7]float64{ + 0: -Float64FromFloat64(0.5), + 1: Float64FromFloat64(0.3333333333333339) * float64(-Int32FromInt32(2)), + 2: -Float64FromFloat64(0.25000000000000033) * float64(-Int32FromInt32(2)), + 3: Float64FromFloat64(0.1999999998830994) * Float64FromInt32(4), + 4: -Float64FromFloat64(0.16666666658719348) * Float64FromInt32(4), + 5: Float64FromFloat64(0.14286370355743763) * float64(-Int32FromInt32(8)), + 6: -Float64FromFloat64(0.12500519079594427) * float64(-Int32FromInt32(8)), + }, + Ftab: [128]struct { + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + }{ + 0: { + Finvc: float64(1.4140625), + Flogc: -Float64FromFloat64(0.3464667673462145), + Flogctail: float64(5.929407345889625e-15), + }, + 1: { + Finvc: float64(1.40625), + Flogc: -Float64FromFloat64(0.34092658697056777), + Flogctail: -Float64FromFloat64(2.544157440035963e-14), + }, + 2: { + Finvc: float64(1.3984375), + Flogc: -Float64FromFloat64(0.3353555419211034), + Flogctail: -Float64FromFloat64(3.443525940775045e-14), + }, + 3: { + Finvc: float64(1.390625), + Flogc: -Float64FromFloat64(0.3297532863724655), + Flogctail: -Float64FromFloat64(2.500123826022799e-15), + }, + 4: { + Finvc: float64(1.3828125), + Flogc: -Float64FromFloat64(0.32411946865420305), + Flogctail: -Float64FromFloat64(8.929337133850617e-15), + }, + 5: { + Finvc: float64(1.375), + Flogc: -Float64FromFloat64(0.31845373111855224), + Flogctail: float64(1.7625431312172662e-14), + }, + 6: { + Finvc: float64(1.3671875), + Flogc: -Float64FromFloat64(0.31275571000389846), + Flogctail: float64(1.5688303180062087e-15), + }, + 7: { + Finvc: float64(1.359375), + Flogc: -Float64FromFloat64(0.3070250352949415), + Flogctail: float64(2.9655274673691784e-14), + }, + 8: { + Finvc: float64(1.3515625), + Flogc: -Float64FromFloat64(0.3012613305781997), + Flogctail: float64(3.7923164802093147e-14), + }, + 9: { + Finvc: float64(1.34375), + Flogc: -Float64FromFloat64(0.2954642128938758), + Flogctail: float64(3.993416384387844e-14), + }, + 10: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 11: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 12: { + Finvc: float64(1.328125), + Flogc: -Float64FromFloat64(0.28376817313062475), + Flogctail: -Float64FromFloat64(1.9852665484979036e-14), + }, + 13: { + Finvc: float64(1.3203125), + Flogc: -Float64FromFloat64(0.27786845100342816), + Flogctail: -Float64FromFloat64(2.814323765595281e-14), + }, + 14: { + Finvc: float64(1.3125), + Flogc: -Float64FromFloat64(0.2719337154836694), + Flogctail: float64(2.7643769993528702e-14), + }, + 15: { + Finvc: float64(1.3046875), + Flogc: -Float64FromFloat64(0.2659635484970977), + Flogctail: -Float64FromFloat64(4.025092402293806e-14), + }, + 16: { + Finvc: float64(1.296875), + Flogc: -Float64FromFloat64(0.25995752443691345), + Flogctail: -Float64FromFloat64(1.2621729398885316e-14), + }, + 17: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 18: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 19: { + Finvc: float64(1.28125), + Flogc: -Float64FromFloat64(0.2478361639045943), + Flogctail: float64(1.3029797173308663e-14), + }, + 20: { + Finvc: float64(1.2734375), + Flogc: -Float64FromFloat64(0.2417199368871934), + Flogctail: float64(4.8230289429940886e-14), + }, + 21: { + Finvc: float64(1.265625), + Flogc: -Float64FromFloat64(0.23556607131274632), + Flogctail: -Float64FromFloat64(2.0592242769647135e-14), + }, + 22: { + Finvc: float64(1.2578125), + Flogc: -Float64FromFloat64(0.22937410106487732), + Flogctail: float64(3.149265065191484e-14), + }, + 23: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 24: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 25: { + Finvc: float64(1.2421875), + Flogc: -Float64FromFloat64(0.21687393830063684), + Flogctail: float64(2.2477465222466186e-14), + }, + 26: { + Finvc: float64(1.234375), + Flogc: -Float64FromFloat64(0.21056476910735), + Flogctail: float64(3.6507188831790577e-16), + }, + 27: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 28: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 29: { + Finvc: float64(1.21875), + Flogc: -Float64FromFloat64(0.19782574332987224), + Flogctail: -Float64FromFloat64(4.7641388950792196e-14), + }, + 30: { + Finvc: float64(1.2109375), + Flogc: -Float64FromFloat64(0.19139485299967873), + Flogctail: float64(4.9278276214647115e-14), + }, + 31: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 32: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 33: { + Finvc: float64(1.1953125), + Flogc: -Float64FromFloat64(0.1784076574728033), + Flogctail: -Float64FromFloat64(1.5003333854266542e-14), + }, + 34: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 35: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 36: { + Finvc: float64(1.1796875), + Flogc: -Float64FromFloat64(0.1652495728952772), + Flogctail: -Float64FromFloat64(2.99659267292569e-14), + }, + 37: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 38: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 39: { + Finvc: float64(1.1640625), + Flogc: -Float64FromFloat64(0.15191604202584585), + Flogctail: float64(3.879296723063646e-15), + }, + 40: { + Finvc: float64(1.15625), + Flogc: -Float64FromFloat64(0.1451820098444614), + Flogctail: -Float64FromFloat64(3.6506824353335045e-14), + }, + 41: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 42: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 43: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 44: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 45: { + Finvc: float64(1.1328125), + Flogc: -Float64FromFloat64(0.12470347850091912), + Flogctail: -Float64FromFloat64(3.811763084710266e-14), + }, + 46: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 47: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 48: { + Finvc: float64(1.1171875), + Flogc: -Float64FromFloat64(0.11081436634026431), + Flogctail: -Float64FromFloat64(2.5799991283069902e-14), + }, + 49: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 50: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 51: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 52: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 53: { + Finvc: float64(1.09375), + Flogc: -Float64FromFloat64(0.089612158689647), + Flogctail: -Float64FromFloat64(4.012913552726574e-14), + }, + 54: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 55: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 56: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 57: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 58: { + Finvc: float64(1.0703125), + Flogc: -Float64FromFloat64(0.06795066190852594), + Flogctail: float64(1.8195060030168815e-14), + }, + 59: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 60: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 61: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 62: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 63: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 64: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 65: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 66: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 67: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 68: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 69: { + Finvc: float64(1.0234375), + Flogc: -Float64FromFloat64(0.023167059281490765), + Flogctail: -Float64FromFloat64(4.361324067851568e-14), + }, + 70: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 71: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 72: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 73: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 74: { + Finvc: float64(1), + }, + 75: { + Finvc: float64(1), + }, + 76: { + Finvc: float64(0.9921875), + Flogc: float64(0.007843177461040796), + Flogctail: -Float64FromFloat64(1.4902732911301337e-14), + }, + 77: { + Finvc: float64(0.984375), + Flogc: float64(0.01574835696817445), + Flogctail: -Float64FromFloat64(3.527980389655325e-14), + }, + 78: { + Finvc: float64(0.9765625), + Flogc: float64(0.023716526617363343), + Flogctail: -Float64FromFloat64(4.730054772033249e-14), + }, + 79: { + Finvc: float64(0.96875), + Flogc: float64(0.03174869831457272), + Flogctail: float64(7.580310369375161e-15), + }, + 80: { + Finvc: float64(0.9609375), + Flogc: float64(0.039845908547249564), + Flogctail: -Float64FromFloat64(4.9893776716773285e-14), + }, + 81: { + Finvc: float64(0.953125), + Flogc: float64(0.048009219186383234), + Flogctail: -Float64FromFloat64(2.262629393030674e-14), + }, + 82: { + Finvc: float64(0.9453125), + Flogc: float64(0.056239718322899535), + Flogctail: -Float64FromFloat64(2.345674491018699e-14), + }, + 83: { + Finvc: float64(0.94140625), + Flogc: float64(0.06038051098892083), + Flogctail: -Float64FromFloat64(1.3352588834854848e-14), + }, + 84: { + Finvc: float64(0.93359375), + Flogc: float64(0.06871389254808946), + Flogctail: -Float64FromFloat64(3.765296820388875e-14), + }, + 85: { + Finvc: float64(0.92578125), + Flogc: float64(0.07711730334438016), + Flogctail: float64(5.1128335719851986e-14), + }, + 86: { + Finvc: float64(0.91796875), + Flogc: float64(0.08559193033545398), + Flogctail: -Float64FromFloat64(5.046674438470119e-14), + }, + 87: { + Finvc: float64(0.9140625), + Flogc: float64(0.08985632912185793), + Flogctail: float64(3.1218748807418837e-15), + }, + 88: { + Finvc: float64(0.90625), + Flogc: float64(0.09844007281321865), + Flogctail: float64(3.3871241029241416e-14), + }, + 89: { + Finvc: float64(0.8984375), + Flogc: float64(0.10709813555638448), + Flogctail: -Float64FromFloat64(1.7376727386423858e-14), + }, + 90: { + Finvc: float64(0.89453125), + Flogc: float64(0.11145544092528326), + Flogctail: float64(3.957125899799804e-14), + }, + 91: { + Finvc: float64(0.88671875), + Flogc: float64(0.12022742699821265), + Flogctail: -Float64FromFloat64(5.2849453521890294e-14), + }, + 92: { + Finvc: float64(0.8828125), + Flogc: float64(0.12464244520731427), + Flogctail: -Float64FromFloat64(3.767012502308738e-14), + }, + 93: { + Finvc: float64(0.875), + Flogc: float64(0.13353139262449076), + Flogctail: float64(3.1859736349078334e-14), + }, + 94: { + Finvc: float64(0.87109375), + Flogc: float64(0.13800567301939282), + Flogctail: float64(5.0900642926060466e-14), + }, + 95: { + Finvc: float64(0.86328125), + Flogc: float64(0.14701474296180095), + Flogctail: float64(8.710783796122478e-15), + }, + 96: { + Finvc: float64(0.859375), + Flogc: float64(0.15154989812720032), + Flogctail: float64(6.157896229122976e-16), + }, + 97: { + Finvc: float64(0.8515625), + Flogc: float64(0.16068238169043525), + Flogctail: float64(3.821577743916796e-14), + }, + 98: { + Finvc: float64(0.84765625), + Flogc: float64(0.16528009093906348), + Flogctail: float64(3.9440046718453496e-14), + }, + 99: { + Finvc: float64(0.83984375), + Flogc: float64(0.17453941635187675), + Flogctail: float64(2.2924522154618074e-14), + }, + 100: { + Finvc: float64(0.8359375), + Flogc: float64(0.17920142945774842), + Flogctail: -Float64FromFloat64(3.742530094732263e-14), + }, + 101: { + Finvc: float64(0.83203125), + Flogc: float64(0.18388527877016259), + Flogctail: -Float64FromFloat64(2.5223102140407338e-14), + }, + 102: { + Finvc: float64(0.82421875), + Flogc: float64(0.1933193110035063), + Flogctail: -Float64FromFloat64(1.0320443688698849e-14), + }, + 103: { + Finvc: float64(0.8203125), + Flogc: float64(0.19806991376208316), + Flogctail: float64(1.0634128304268335e-14), + }, + 104: { + Finvc: float64(0.8125), + Flogc: float64(0.20763936477828793), + Flogctail: -Float64FromFloat64(4.3425422595242564e-14), + }, + 105: { + Finvc: float64(0.80859375), + Flogc: float64(0.21245865121420593), + Flogctail: -Float64FromFloat64(1.2527395755711364e-14), + }, + 106: { + Finvc: float64(0.8046875), + Flogc: float64(0.21730127569003344), + Flogctail: -Float64FromFloat64(5.204008743405884e-14), + }, + 107: { + Finvc: float64(0.80078125), + Flogc: float64(0.22216746534115828), + Flogctail: -Float64FromFloat64(3.979844515951702e-15), + }, + 108: { + Finvc: float64(0.79296875), + Flogc: float64(0.2319714654378231), + Flogctail: -Float64FromFloat64(4.7955860343296286e-14), + }, + 109: { + Finvc: float64(0.7890625), + Flogc: float64(0.2369097470783572), + Flogctail: float64(5.015686013791602e-16), + }, + 110: { + Finvc: float64(0.78515625), + Flogc: float64(0.24187253642048745), + Flogctail: -Float64FromFloat64(7.252318953240293e-16), + }, + 111: { + Finvc: float64(0.78125), + Flogc: float64(0.2468600779315011), + Flogctail: float64(2.4688324156011588e-14), + }, + 112: { + Finvc: float64(0.7734375), + Flogc: float64(0.2569104137850218), + Flogctail: float64(5.465121253624792e-15), + }, + 113: { + Finvc: float64(0.76953125), + Flogc: float64(0.26197371574153294), + Flogctail: float64(4.102651071698446e-14), + }, + 114: { + Finvc: float64(0.765625), + Flogc: float64(0.2670627852490952), + Flogctail: -Float64FromFloat64(4.996736502345936e-14), + }, + 115: { + Finvc: float64(0.76171875), + Flogc: float64(0.27217788591576664), + Flogctail: float64(4.903580708156347e-14), + }, + 116: { + Finvc: float64(0.7578125), + Flogc: float64(0.27731928541618345), + Flogctail: float64(5.089628039500759e-14), + }, + 117: { + Finvc: float64(0.75390625), + Flogc: float64(0.28248725557466514), + Flogctail: float64(1.1782016386565151e-14), + }, + 118: { + Finvc: float64(0.74609375), + Flogc: float64(0.29290401643288533), + Flogctail: float64(4.727452940514406e-14), + }, + 119: { + Finvc: float64(0.7421875), + Flogc: float64(0.29815337231912054), + Flogctail: -Float64FromFloat64(4.4204083338755686e-14), + }, + 120: { + Finvc: float64(0.73828125), + Flogc: float64(0.3034304294199046), + Flogctail: float64(1.548345993498083e-14), + }, + 121: { + Finvc: float64(0.734375), + Flogc: float64(0.30873548164959175), + Flogctail: float64(2.1522127491642888e-14), + }, + 122: { + Finvc: float64(0.73046875), + Flogc: float64(0.3140688276249648), + Flogctail: float64(1.1054030169005386e-14), + }, + 123: { + Finvc: float64(0.7265625), + Flogc: float64(0.31943077076641657), + Flogctail: -Float64FromFloat64(5.534326352070679e-14), + }, + 124: { + Finvc: float64(0.72265625), + Flogc: float64(0.3248216194012912), + Flogctail: -Float64FromFloat64(5.351646604259541e-14), + }, + 125: { + Finvc: float64(0.71875), + Flogc: float64(0.33024168687052224), + Flogctail: float64(5.4612144489920215e-14), + }, + 126: { + Finvc: float64(0.71484375), + Flogc: float64(0.3356912916381134), + Flogctail: float64(2.8136969901227338e-14), + }, + 127: { + Finvc: float64(0.7109375), + Flogc: float64(0.3411707574027787), + Flogctail: -Float64FromFloat64(1.156568624616423e-14), + }, + }, +} + +var X__powf_log2_data = Tpowf_log2_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673) * float64(Int32FromInt32(1)<> int32(32)) + *(*int32)(unsafe.Pointer(expt)) = int32(hx>>Int32FromInt32(20) - uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1023)) + _k) + v1 = uint64(hx&Uint32FromInt32(0xfffff)|uint32((Int32FromInt32(0x3ff)+Int32FromInt32(1023))<= ln(DBL_MAX)) +// * where care is needed to avoid overflow. +// * +// * The present implementation is narrowly tailored for our hyperbolic and +// * exponential functions. We assume expt is small (0 or -1), and the caller +// * has filtered out very large x, for which overflow would be inevitable. +// */ +func X__ldexp_cexp(tls *TLS, z complex128, expt int32) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v expt=%v, (%v:)", tls, z, expt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float64 + var half_expt int32 + var v1, v2 Tuint64_t + var v3 [2]float64 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_exp(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + /* + * Arrange so that scale1 * scale2 == 2**expt. We use this to + * compensate for scalbn being horrendously slow. + */ + half_expt = expt / int32(2) + v1 = uint64((Int32FromInt32(0x3ff)+half_expt)<>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(127)) + _k1) + v1 = hx&uint32(0x7fffff) | uint32((Int32FromInt32(0x7f)+Int32FromInt32(127))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float32 + var half_expt int32 + var v1, v2 Tuint32_t + var v3 [2]float32 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_expf(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + half_expt = expt / int32(2) + v1 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale1 = *(*float32)(unsafe.Pointer(&v1)) + half_expt = expt - half_expt + v2 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale2 = *(*float32)(unsafe.Pointer(&v2)) + v3 = [2]float32{ + 0: Xcosf(tls, y) * exp_x * scale1 * scale2, + 1: Xsinf(tls, y) * exp_x * scale1 * scale2, + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +func Xcabs(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypot(tls, Float64FromComplex128(z), +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypotf(tls, Float32FromComplex64(z), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcabs(tls, Complex128FromComplex128(z)) +} + +const M_PI_21 = 1.5707963267948966 + +// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 + +/* acos(z) = pi/2 - asin(z) */ + +func Xcacos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + z = Xcasin(tls, z) + v1 = [2]float64{ + 0: float64(1.5707963267948966) - Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +var _float_pi_2 = float32(1.5707963267948966) + +func Xcacosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + z = Xcasinf(tls, z) + v1 = [2]float32{ + 0: _float_pi_2 - Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +const M_PI_22 = 0 + +/* acosh(z) = i acos(z) */ + +func Xcacosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint64 + var v3, v4 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float64)(unsafe.Pointer(bp)) = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(63)) + z = Xcacos(tls, z) + if zineg != 0 { + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint32 + var v3, v4 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(31)) + z = Xcacosf(tls, z) + if zineg != 0 { + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacosh(tls, Complex128FromComplex128(z))) +} + +func Xcacosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacos(tls, Complex128FromComplex128(z))) +} + +func Xcarg(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2(tls, +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], Float64FromComplex128(z)) +} + +func Xcargf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2f(tls, +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], Float32FromComplex64(z)) +} + +func Xcargl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcarg(tls, Complex128FromComplex128(z)) +} + +// FIXME + +/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ + +func Xcasin(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex128 + var x, y float64 + var v1, v2, v3 [2]float64 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float64{ + 0: float64(1) - (x-y)*(x+y), + 1: -Float64FromFloat64(2) * x * y, + } + w = *(*complex128)(unsafe.Pointer(&v1)) + v2 = [2]float64{ + 0: -y, + 1: x, + } + r = Xclog(tls, *(*complex128)(unsafe.Pointer(&v2))+Xcsqrt(tls, w)) + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float64FromComplex128(r), + } + return *(*complex128)(unsafe.Pointer(&v3)) +} + +// FIXME + +func Xcasinf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex64 + var x, y float32 + var v1, v2, v3 [2]float32 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float32{ + 0: float32(Float64FromFloat64(1) - float64((x-y)*(x+y))), + 1: float32(-Float64FromFloat64(2) * float64(x) * float64(y)), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + v2 = [2]float32{ + 0: -y, + 1: x, + } + r = Xclogf(tls, *(*complex64)(unsafe.Pointer(&v2))+Xcsqrtf(tls, w)) + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float32FromComplex64(r), + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +/* asinh(z) = -i asin(i z) */ + +func Xcasinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcasin(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcasinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcasinf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcasinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasinh(tls, Complex128FromComplex128(z))) +} + +func Xcasinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasin(tls, Complex128FromComplex128(z))) +} + +const MAXNUM = 0 +const M_PI1 = 3.141592653589793 + +var _DP1 = float64(3.141592651605606) +var _DP2 = float64(1.9841871479187034e-09) +var _DP3 = float64(1.1442377452219664e-17) + +func __redupi(tls *TLS, x float64) (r float64) { + var i int64 + var t float64 + _, _ = i, t + t = x / float64(3.141592653589793) + if t >= float64(0) { + t += float64(0.5) + } else { + t -= float64(0.5) + } + i = int64(t) /* the multiple */ + t = float64(i) + t = x - t*_DP1 - t*_DP2 - t*_DP3 + return t +} + +func Xcatan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float64 + var w complex128 + var v1 [2]float64 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = float64(1) - x2 - y*y + t = float64(0.5) * Xatan2(tls, float64(2)*x, a) + w = Complex128FromFloat64(__redupi(tls, t)) + t = y - float64(1) + a = x2 + t*t + t = y + float64(1) + a = (x2 + t*t) / a + v1 = [2]float64{ + 0: Float64FromComplex128(w), + 1: float64(0.25) * Xlog(tls, a), + } + w = *(*complex128)(unsafe.Pointer(&v1)) + return w +} + +const MAXNUMF = 0 + +var _DP11 = float64(3.140625) +var _DP21 = float64(0.0009675025939941406) +var _DP31 = float64(1.5099579909783765e-07) + +var _float_pi = float32(3.141592653589793) + +func __redupif(tls *TLS, xx float32) (r float32) { + var i int64 + var t, x float32 + _, _, _ = i, t, x + x = xx + t = x / _float_pi + if t >= Float32FromFloat32(0) { + t += Float32FromFloat32(0.5) + } else { + t -= Float32FromFloat32(0.5) + } + i = int64(t) /* the multiple */ + t = float32(i) + t = float32(float64(x) - float64(t)*_DP11 - float64(t)*_DP21 - float64(t)*_DP31) + return t +} + +func Xcatanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float32 + var w complex64 + var v1 [2]float32 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = Float32FromFloat32(1) - x2 - y*y + t = Float32FromFloat32(0.5) * Xatan2f(tls, Float32FromFloat32(2)*x, a) + w = Complex64FromFloat32(__redupif(tls, t)) + t = y - Float32FromFloat32(1) + a = x2 + t*t + t = y + Float32FromFloat32(1) + a = (x2 + t*t) / a + v1 = [2]float32{ + 0: Float32FromComplex64(w), + 1: Float32FromFloat32(0.25) * Xlogf(tls, a), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + return w +} + +const M_PI2 = 0 + +/* atanh = -i atan(i z) */ + +func Xcatanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcatan(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcatanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcatanf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcatanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatanh(tls, Complex128FromComplex128(z))) +} + +func Xcatanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatan(tls, Complex128FromComplex128(z))) +} + +/* cos(z) = cosh(i z) */ + +func Xccos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return Xccosh(tls, *(*complex128)(unsafe.Pointer(&v1))) +} + +func Xccosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return Xccoshf(tls, *(*complex64)(unsafe.Pointer(&v1))) +} + +var _huge = float64(8.98846567431158e+307) + +func Xccosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xcosh(tls, x), + 1: x * y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xcosh(tls, x) * Xcos(tls, y), + 1: Xsinh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: h * Xcos(tls, y), + 1: Xcopysign(tls, h, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] * Xcopysign(tls, Float64FromInt32(1), x), + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge * x + v6 = [2]float64{ + 0: h * h * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: y - y, + 1: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. + * + * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. + * The sign of 0 in the result is unspecified. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), x) * y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), (x+x)*y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * cosh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * cosh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * cosh(+-Inf + I NaN) = +Inf + I d(NaN). + * + * cosh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * x * Xcos(tls, y), + 1: x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * cosh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * cosh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge1 = float32(1.7014118346046923e+38) + +func Xccoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xcoshf(tls, x), + 1: x * y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xcoshf(tls, x) * Xcosf(tls, y), + 1: Xsinhf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: Xcopysignf(tls, h, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] * Xcopysignf(tls, Float32FromInt32(1), x), + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge1 * x + v6 = [2]float32{ + 0: h * h * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: y - y, + 1: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), x) * y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), (x+x)*y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * x * Xcosf(tls, y), + 1: x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xccoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccosh(tls, Complex128FromComplex128(z))) +} + +func Xccosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccos(tls, Complex128FromComplex128(z))) +} + +var _exp_ovfl = uint32(0x40862e42) /* high bits of MAX_EXP * ln2 ~= 710 */ +var _cexp_ovfl = uint32(0x4096b8e4) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexp(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var exp_x, x, y float64 + var hx, hy, lx, ly Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, exp_x, hx, hy, lx, ly, x, y, v1, v2, v3, v4, v5, v6 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = uint32(__u >> int32(32)) + ly = uint32(__u) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy|ly == uint32(0) { + v1 = [2]float64{ + 0: Xexp(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff)|lx == uint32(0) { + v2 = [2]float64{ + 0: Xcos(tls, y), + 1: Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7ff00000) { + if lx != uint32(0) || hx&uint32(0x7fffffff) != uint32(0x7ff00000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float64{ + 0: y - y, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float64{} + return *(*complex128)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float64{ + 0: x, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl && hx <= _cexp_ovfl { + /* + * x is between 709.7 and 1454.3, so we must scale to avoid + * overflow in exp(x). + */ + return X__ldexp_cexp(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexp(tls, x) + v6 = [2]float64{ + 0: exp_x * Xcos(tls, y), + 1: exp_x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + return r +} + +var _exp_ovfl1 = uint32(0x42b17218) /* MAX_EXP * ln2 ~= 88.722839355 */ +var _cexp_ovfl1 = uint32(0x43400074) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexpf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var exp_x, x, y float32 + var hx, hy Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float32 + _, _, _, _, _, _, _, _, _, _, _ = exp_x, hx, hy, x, y, v1, v2, v3, v4, v5, v6 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hy = *(*Tuint32_t)(unsafe.Pointer(&y)) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy == uint32(0) { + v1 = [2]float32{ + 0: Xexpf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff) == uint32(0) { + v2 = [2]float32{ + 0: Xcosf(tls, y), + 1: Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7f800000) { + if hx&uint32(0x7fffffff) != uint32(0x7f800000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float32{ + 0: y - y, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float32{} + return *(*complex64)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float32{ + 0: x, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl1 && hx <= _cexp_ovfl1 { + /* + * x is between 88.7 and 192, so we must scale to avoid + * overflow in expf(x). + */ + return X__ldexp_cexpf(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexpf(tls, x) + v6 = [2]float32{ + 0: exp_x * Xcosf(tls, y), + 1: exp_x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcexpl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcexp(tls, Complex128FromComplex128(z))) +} + +func Xcimag(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +// FIXME + +/* log(z) = log(|z|) + i arg(z) */ + +func Xclog(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float64 + var v1 [2]float64 + _, _, _ = phi, r, v1 + r = Xcabs(tls, z) + phi = Xcarg(tls, z) + v1 = [2]float64{ + 0: Xlog(tls, r), + 1: phi, + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +func Xclogf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float32 + var v1 [2]float32 + _, _, _ = phi, r, v1 + r = Xcabsf(tls, z) + phi = Xcargf(tls, z) + v1 = [2]float32{ + 0: Xlogf(tls, r), + 1: phi, + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xclogl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xclog(tls, Complex128FromComplex128(z))) +} + +func Xconj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +func Xconjf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xconjl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ + +func Xcpow(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexp(tls, c*Xclog(tls, z)) +} + +func Xcpowf(tls *TLS, z complex64, c complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexpf(tls, c*Xclogf(tls, z)) +} + +func Xcpowl(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcpow(tls, Complex128FromComplex128(z), Complex128FromComplex128(c))) +} + +func Xcproj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 bool + var v6 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = Float64FromComplex128(z) + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 bool + var v6 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = Float32FromComplex64(z) + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) == uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v6 = [2]float32{ + 0: X__builtin_inff(tls), + 1: Xcopysignf(tls, float32(0), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return z +} + +func Xcprojl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcproj(tls, Complex128FromComplex128(z))) +} + +func Xcreal(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +func Xcrealf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float32FromComplex64(z) +} + +func Xcreall(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +/* sin(z) = -i sinh(i z) */ + +func Xcsin(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcsinh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcsinf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcsinhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +var _huge2 = float64(8.98846567431158e+307) + +func Xcsinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xsinh(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xsinh(tls, x) * Xcos(tls, y), + 1: Xcosh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: Xcopysign(tls, h, x) * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z) * Xcopysign(tls, Float64FromInt32(1), x), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge2 * x + v6 = [2]float64{ + 0: h * Xcos(tls, y), + 1: h * h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * sinh(+-Inf +- I 0) = +-Inf + I +-0. + * + * sinh(NaN +- I 0) = d(NaN) + I +-0. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x, + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x, + 1: Xcopysign(tls, Float64FromInt32(0), y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * sinh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * sinh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). + * The sign of Inf in the result is unspecified. Choice = normally + * the same as d(NaN). + * + * sinh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * Xcos(tls, y), + 1: float64(X__builtin_inff(tls)) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * sinh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * sinh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge3 = float32(1.7014118346046923e+38) + +func Xcsinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xsinhf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xsinhf(tls, x) * Xcosf(tls, y), + 1: Xcoshf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: Xcopysignf(tls, h, x) * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z) * Xcopysignf(tls, Float32FromInt32(1), x), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge3 * x + v6 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: h * h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x, + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * Xcosf(tls, y), + 1: X__builtin_inff(tls) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xcsinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsinh(tls, Complex128FromComplex128(z))) +} + +func Xcsinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsin(tls, Complex128FromComplex128(z))) +} + +const THRESH = 7.446288774449766e+307 + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ + +func Xcsqrt(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b, t float64 + var result complex128 + var scale int32 + var v1, v12, v13, v14, v15, v4, v7 [2]float64 + var v10, v2, v5, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, result, scale, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float64FromComplex128(z) + b = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex128FromInt32(0) { + v1 = [2]float64{ + 1: b, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + *(*float64)(unsafe.Pointer(bp)) = b + v2 = *(*uint64)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + v12 = [2]float64{ + 0: Xfabs(tls, b-b), + 1: Xcopysign(tls, a, b), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float64{ + 0: a, + 1: Xcopysign(tls, b-b, b), + } + return *(*complex128)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* Scale to avoid overflow. */ + if Xfabs(tls, a) >= float64(7.446288774449766e+307) || Xfabs(tls, b) >= float64(7.446288774449766e+307) { + a *= float64(0.25) + b *= float64(0.25) + scale = int32(1) + } else { + scale = 0 + } + /* Algorithm 312, CACM vol 10, Oct 1967. */ + if a >= Float64FromInt32(0) { + t = Xsqrt(tls, (a+Xhypot(tls, a, b))*float64(0.5)) + v14 = [2]float64{ + 0: t, + 1: b / (Float64FromInt32(2) * t), + } + result = *(*complex128)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (-a+Xhypot(tls, a, b))*float64(0.5)) + v15 = [2]float64{ + 0: Xfabs(tls, b) / (Float64FromInt32(2) * t), + 1: Xcopysign(tls, t, b), + } + result = *(*complex128)(unsafe.Pointer(&v15)) + } + /* Rescale. */ + if scale != 0 { + result *= Complex128FromInt32(2) + } + return result +} + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +func Xcsqrtf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b float32 + var t float64 + var v1, v12, v13, v14, v15, v4, v7 [2]float32 + var v10, v2, v5, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float32FromComplex64(z) + b = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex64FromInt32(0) { + v1 = [2]float32{ + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + *(*float32)(unsafe.Pointer(bp)) = b + v2 = *(*uint32)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v4 = [2]float32{ + 0: X__builtin_inff(tls), + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = a + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + if BoolInt32(v5&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + t = float64((b - b) / (b - b)) /* raise invalid if b is not a NaN */ + v7 = [2]float32{ + 0: a, + 1: float32(t), + } + return *(*complex64)(unsafe.Pointer(&v7)) /* return NaN + NaN i */ + } + *(*float32)(unsafe.Pointer(bp)) = a + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if BoolInt32(v8&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + /* + * csqrtf(inf + NaN i) = inf + NaN i + * csqrtf(inf + y i) = inf + 0 i + * csqrtf(-inf + NaN i) = NaN +- inf i + * csqrtf(-inf + y i) = 0 + inf i + */ + *(*float32)(unsafe.Pointer(bp)) = a + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v12 = [2]float32{ + 0: Xfabsf(tls, b-b), + 1: Xcopysignf(tls, a, b), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float32{ + 0: a, + 1: Xcopysignf(tls, b-b, b), + } + return *(*complex64)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* + * We compute t in double precision to avoid overflow and to + * provide correct rounding in nearly all cases. + * This is Algorithm 312, CACM vol 10, Oct 1967. + */ + if a >= Float32FromInt32(0) { + t = Xsqrt(tls, (float64(a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v14 = [2]float32{ + 0: float32(t), + 1: float32(float64(b) / (Float64FromFloat64(2) * t)), + } + return *(*complex64)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (float64(-a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v15 = [2]float32{ + 0: float32(float64(Xfabsf(tls, b)) / (Float64FromFloat64(2) * t)), + 1: Xcopysignf(tls, float32(t), b), + } + return *(*complex64)(unsafe.Pointer(&v15)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcsqrtl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsqrt(tls, Complex128FromComplex128(z))) +} + +/* tan(z) = -i tanh(i z) */ + +func Xctan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xctanh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xctanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xctanhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xctanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, v3 Tuint64_t + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float64 + var hx, ix, lx Tuint32_t + var v1, v10, v12, v13, v4 [2]float64 + var v6, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, beta, denom, exp_mx, hx, ix, lx, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + ix = hx & uint32(0x7fffffff) + /* + * ctanh(NaN + i 0) = NaN + i 0 + * + * ctanh(NaN + i y) = NaN + i NaN for y != 0 + * + * The imaginary part has the sign of x*sin(2*y), but there's no + * special effort to get this right. + * + * ctanh(+-Inf +- i Inf) = +-1 +- 0 + * + * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite + * + * The imaginary part of the sign is unspecified. This special + * case is only needed to avoid a spurious invalid exception when + * y is infinite. + */ + if ix >= uint32(0x7ff00000) { + if ix&uint32(0xfffff)|lx != 0 { /* x is NaN */ + if y == Float64FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float64{ + 0: x, + 1: v2, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + v3 = uint64(hx-Uint32FromInt32(0x40000000))<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)<= uint32(0x40360000) { /* x >= 22 */ + exp_mx = Xexp(tls, -Xfabs(tls, x)) + v12 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(1), x), + 1: Float64FromInt32(4) * Xsin(tls, y) * Xcos(tls, y) * exp_mx * exp_mx, + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* Kahan's algorithm */ + t = Xtan(tls, y) + beta = float64(1) + t*t /* = 1 / cos^2(y) */ + s = Xsinh(tls, x) + rho = Xsqrt(tls, Float64FromInt32(1)+s*s) /* = cosh(x) */ + denom = Float64FromInt32(1) + beta*s*s + v13 = [2]float64{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +func Xctanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float32 + var hx, ix, v3 Tuint32_t + var v1, v10, v12, v13, v4 [2]float32 + var v6, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = beta, denom, exp_mx, hx, ix, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + if ix&uint32(0x7fffff) != 0 { + if y == Float32FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float32{ + 0: x, + 1: v2, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + v3 = hx - uint32(0x40000000) + x = *(*float32)(unsafe.Pointer(&v3)) + *(*float32)(unsafe.Pointer(bp)) = y + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 + _7: + if BoolInt32(v6&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v5 = y + } else { + v5 = Xsinf(tls, y) * Xcosf(tls, y) + } + v4 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), v5), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = y + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if !(BoolInt32(v8&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if ix != 0 { + v11 = y - y + } else { + v11 = x + } + v10 = [2]float32{ + 0: v11, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= uint32(0x41300000) { /* x >= 11 */ + exp_mx = Xexpf(tls, -Xfabsf(tls, x)) + v12 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(1), x), + 1: Float32FromInt32(4) * Xsinf(tls, y) * Xcosf(tls, y) * exp_mx * exp_mx, + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + t = Xtanf(tls, y) + beta = float32(float64(1) + float64(t*t)) + s = Xsinhf(tls, x) + rho = Xsqrtf(tls, Float32FromInt32(1)+s*s) + denom = Float32FromInt32(1) + beta*s*s + v13 = [2]float32{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xctanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctanh(tls, Complex128FromComplex128(z))) +} + +func Xctanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctan(tls, Complex128FromComplex128(z))) +} + +const BUFSIZ = 1024 +const E2BIG = 7 +const EACCES = 13 +const EADDRINUSE = 98 +const EADDRNOTAVAIL = 99 +const EADV = 68 +const EAFNOSUPPORT = 97 +const EAGAIN = 11 +const EALREADY = 114 +const EBADE = 52 +const EBADF = 9 +const EBADFD = 77 +const EBADMSG = 74 +const EBADR = 53 +const EBADRQC = 56 +const EBADSLT = 57 +const EBFONT = 59 +const EBUSY = 16 +const ECANCELED = 125 +const ECHILD = 10 +const ECHRNG = 44 +const ECOMM = 70 +const ECONNABORTED = 103 +const ECONNREFUSED = 111 +const ECONNRESET = 104 +const EDEADLK = 35 +const EDEADLOCK = 35 +const EDESTADDRREQ = 89 +const EDOM = 33 +const EDOTDOT = 73 +const EDQUOT = 122 +const EEXIST = 17 +const EFAULT = 14 +const EFBIG = 27 +const EHOSTDOWN = 112 +const EHOSTUNREACH = 113 +const EHWPOISON = 133 +const EIDRM = 43 +const EILSEQ = 84 +const EINPROGRESS = 115 +const EINTR = 4 +const EINVAL = 22 +const EIO = 5 +const EISCONN = 106 +const EISDIR = 21 +const EISNAM = 120 +const EKEYEXPIRED = 127 +const EKEYREJECTED = 129 +const EKEYREVOKED = 128 +const EL2HLT = 51 +const EL2NSYNC = 45 +const EL3HLT = 46 +const EL3RST = 47 +const ELIBACC = 79 +const ELIBBAD = 80 +const ELIBEXEC = 83 +const ELIBMAX = 82 +const ELIBSCN = 81 +const ELNRNG = 48 +const ELOOP = 40 +const EMEDIUMTYPE = 124 +const EMFILE = 24 +const EMLINK = 31 +const EMSGSIZE = 90 +const EMULTIHOP = 72 +const ENAMETOOLONG = 36 +const ENAVAIL = 119 +const ENETDOWN = 100 +const ENETRESET = 102 +const ENETUNREACH = 101 +const ENFILE = 23 +const ENOANO = 55 +const ENOBUFS = 105 +const ENOCSI = 50 +const ENODATA = 61 +const ENODEV = 19 +const ENOENT = 2 +const ENOEXEC = 8 +const ENOKEY = 126 +const ENOLCK = 37 +const ENOLINK = 67 +const ENOMEDIUM = 123 +const ENOMEM = 12 +const ENOMSG = 42 +const ENONET = 64 +const ENOPKG = 65 +const ENOPROTOOPT = 92 +const ENOSPC = 28 +const ENOSR = 63 +const ENOSTR = 60 +const ENOSYS = 38 +const ENOTBLK = 15 +const ENOTCONN = 107 +const ENOTDIR = 20 +const ENOTEMPTY = 39 +const ENOTNAM = 118 +const ENOTRECOVERABLE = 131 +const ENOTSOCK = 88 +const ENOTSUP = 95 +const ENOTTY = 25 +const ENOTUNIQ = 76 +const ENXIO = 6 +const EOPNOTSUPP = 95 +const EOVERFLOW = 75 +const EOWNERDEAD = 130 +const EPERM = 1 +const EPFNOSUPPORT = 96 +const EPIPE = 32 +const EPROTO = 71 +const EPROTONOSUPPORT = 93 +const EPROTOTYPE = 91 +const ERANGE = 34 +const EREMCHG = 78 +const EREMOTE = 66 +const EREMOTEIO = 121 +const ERESTART = 85 +const ERFKILL = 132 +const EROFS = 30 +const ESHUTDOWN = 108 +const ESOCKTNOSUPPORT = 94 +const ESPIPE = 29 +const ESRCH = 3 +const ESRMNT = 69 +const ESTALE = 116 +const ESTRPIPE = 86 +const ETIME = 62 +const ETIMEDOUT = 110 +const ETOOMANYREFS = 109 +const ETXTBSY = 26 +const EUCLEAN = 117 +const EUNATCH = 49 +const EUSERS = 87 +const EWOULDBLOCK = 11 +const EXDEV = 18 +const EXFULL = 54 +const FILENAME_MAX = 4096 +const FOPEN_MAX = 1000 +const F_LOCK = 1 +const F_OK = 0 +const F_TEST = 3 +const F_TLOCK = 2 +const F_ULOCK = 0 +const L_ctermid = 20 +const L_tmpnam = 20 +const POSIX_CLOSE_RESTART = 0 +const P_tmpdir = "/tmp" +const R_OK = 4 +const SEEK_DATA = 3 +const SEEK_HOLE = 4 +const STDERR_FILENO = 2 +const STDIN_FILENO = 0 +const STDOUT_FILENO = 1 +const TMP_MAX = 10000 +const W_OK = 2 +const X_OK = 1 +const _CS_GNU_LIBC_VERSION = 2 +const _CS_GNU_LIBPTHREAD_VERSION = 3 +const _CS_PATH = 0 +const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = 4 +const _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 +const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 +const _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 +const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 +const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 +const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 +const _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 +const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 +const _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 +const _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 +const _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 +const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 +const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 +const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 +const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 +const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 +const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 1 +const _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 +const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 +const _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 +const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 +const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 +const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 +const _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 +const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 +const _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 +const _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 +const _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 +const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 +const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 +const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 +const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 +const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 +const _CS_POSIX_V7_THREADS_CFLAGS = 1150 +const _CS_POSIX_V7_THREADS_LDFLAGS = 1151 +const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 5 +const _CS_V6_ENV = 1148 +const _CS_V7_ENV = 1149 +const _IOFBF = 0 +const _IOLBF = 1 +const _IONBF = 2 +const _PC_2_SYMLINKS = 20 +const _PC_ALLOC_SIZE_MIN = 18 +const _PC_ASYNC_IO = 10 +const _PC_CHOWN_RESTRICTED = 6 +const _PC_FILESIZEBITS = 13 +const _PC_LINK_MAX = 0 +const _PC_MAX_CANON = 1 +const _PC_MAX_INPUT = 2 +const _PC_NAME_MAX = 3 +const _PC_NO_TRUNC = 7 +const _PC_PATH_MAX = 4 +const _PC_PIPE_BUF = 5 +const _PC_PRIO_IO = 11 +const _PC_REC_INCR_XFER_SIZE = 14 +const _PC_REC_MAX_XFER_SIZE = 15 +const _PC_REC_MIN_XFER_SIZE = 16 +const _PC_REC_XFER_ALIGN = 17 +const _PC_SOCK_MAXBUF = 12 +const _PC_SYMLINK_MAX = 19 +const _PC_SYNC_IO = 9 +const _PC_VDISABLE = 8 +const _POSIX2_C_BIND = 200809 +const _POSIX2_VERSION = 200809 +const _POSIX_ADVISORY_INFO = 200809 +const _POSIX_ASYNCHRONOUS_IO = 200809 +const _POSIX_BARRIERS = 200809 +const _POSIX_CHOWN_RESTRICTED = 1 +const _POSIX_CLOCK_SELECTION = 200809 +const _POSIX_CPUTIME = 200809 +const _POSIX_FSYNC = 200809 +const _POSIX_IPV6 = 200809 +const _POSIX_JOB_CONTROL = 1 +const _POSIX_MAPPED_FILES = 200809 +const _POSIX_MEMLOCK = 200809 +const _POSIX_MEMLOCK_RANGE = 200809 +const _POSIX_MEMORY_PROTECTION = 200809 +const _POSIX_MESSAGE_PASSING = 200809 +const _POSIX_MONOTONIC_CLOCK = 200809 +const _POSIX_NO_TRUNC = 1 +const _POSIX_RAW_SOCKETS = 200809 +const _POSIX_READER_WRITER_LOCKS = 200809 +const _POSIX_REALTIME_SIGNALS = 200809 +const _POSIX_REGEXP = 1 +const _POSIX_SAVED_IDS = 1 +const _POSIX_SEMAPHORES = 200809 +const _POSIX_SHARED_MEMORY_OBJECTS = 200809 +const _POSIX_SHELL = 1 +const _POSIX_SPAWN = 200809 +const _POSIX_SPIN_LOCKS = 200809 +const _POSIX_THREADS = 200809 +const _POSIX_THREAD_ATTR_STACKADDR = 200809 +const _POSIX_THREAD_ATTR_STACKSIZE = 200809 +const _POSIX_THREAD_CPUTIME = 200809 +const _POSIX_THREAD_PRIORITY_SCHEDULING = 200809 +const _POSIX_THREAD_PROCESS_SHARED = 200809 +const _POSIX_THREAD_SAFE_FUNCTIONS = 200809 +const _POSIX_TIMEOUTS = 200809 +const _POSIX_TIMERS = 200809 +const _POSIX_V6_LP64_OFF64 = 1 +const _POSIX_V7_LP64_OFF64 = 1 +const _POSIX_VDISABLE = 0 +const _POSIX_VERSION = 200809 +const _SC_2_CHAR_TERM = 95 +const _SC_2_C_BIND = 47 +const _SC_2_C_DEV = 48 +const _SC_2_FORT_DEV = 49 +const _SC_2_FORT_RUN = 50 +const _SC_2_LOCALEDEF = 52 +const _SC_2_PBS = 168 +const _SC_2_PBS_ACCOUNTING = 169 +const _SC_2_PBS_CHECKPOINT = 175 +const _SC_2_PBS_LOCATE = 170 +const _SC_2_PBS_MESSAGE = 171 +const _SC_2_PBS_TRACK = 172 +const _SC_2_SW_DEV = 51 +const _SC_2_UPE = 97 +const _SC_2_VERSION = 46 +const _SC_ADVISORY_INFO = 132 +const _SC_AIO_LISTIO_MAX = 23 +const _SC_AIO_MAX = 24 +const _SC_AIO_PRIO_DELTA_MAX = 25 +const _SC_ARG_MAX = 0 +const _SC_ASYNCHRONOUS_IO = 12 +const _SC_ATEXIT_MAX = 87 +const _SC_AVPHYS_PAGES = 86 +const _SC_BARRIERS = 133 +const _SC_BC_BASE_MAX = 36 +const _SC_BC_DIM_MAX = 37 +const _SC_BC_SCALE_MAX = 38 +const _SC_BC_STRING_MAX = 39 +const _SC_CHILD_MAX = 1 +const _SC_CLK_TCK = 2 +const _SC_CLOCK_SELECTION = 137 +const _SC_COLL_WEIGHTS_MAX = 40 +const _SC_CPUTIME = 138 +const _SC_DELAYTIMER_MAX = 26 +const _SC_EXPR_NEST_MAX = 42 +const _SC_FSYNC = 15 +const _SC_GETGR_R_SIZE_MAX = 69 +const _SC_GETPW_R_SIZE_MAX = 70 +const _SC_HOST_NAME_MAX = 180 +const _SC_IOV_MAX = 60 +const _SC_IPV6 = 235 +const _SC_JOB_CONTROL = 7 +const _SC_LINE_MAX = 43 +const _SC_LOGIN_NAME_MAX = 71 +const _SC_MAPPED_FILES = 16 +const _SC_MEMLOCK = 17 +const _SC_MEMLOCK_RANGE = 18 +const _SC_MEMORY_PROTECTION = 19 +const _SC_MESSAGE_PASSING = 20 +const _SC_MINSIGSTKSZ = 249 +const _SC_MONOTONIC_CLOCK = 149 +const _SC_MQ_OPEN_MAX = 27 +const _SC_MQ_PRIO_MAX = 28 +const _SC_NGROUPS_MAX = 3 +const _SC_NPROCESSORS_CONF = 83 +const _SC_NPROCESSORS_ONLN = 84 +const _SC_NZERO = 109 +const _SC_OPEN_MAX = 4 +const _SC_PAGESIZE = 30 +const _SC_PAGE_SIZE = 30 +const _SC_PASS_MAX = 88 +const _SC_PHYS_PAGES = 85 +const _SC_PRIORITIZED_IO = 13 +const _SC_PRIORITY_SCHEDULING = 10 +const _SC_RAW_SOCKETS = 236 +const _SC_READER_WRITER_LOCKS = 153 +const _SC_REALTIME_SIGNALS = 9 +const _SC_REGEXP = 155 +const _SC_RE_DUP_MAX = 44 +const _SC_RTSIG_MAX = 31 +const _SC_SAVED_IDS = 8 +const _SC_SEMAPHORES = 21 +const _SC_SEM_NSEMS_MAX = 32 +const _SC_SEM_VALUE_MAX = 33 +const _SC_SHARED_MEMORY_OBJECTS = 22 +const _SC_SHELL = 157 +const _SC_SIGQUEUE_MAX = 34 +const _SC_SIGSTKSZ = 250 +const _SC_SPAWN = 159 +const _SC_SPIN_LOCKS = 154 +const _SC_SPORADIC_SERVER = 160 +const _SC_SS_REPL_MAX = 241 +const _SC_STREAMS = 174 +const _SC_STREAM_MAX = 5 +const _SC_SYMLOOP_MAX = 173 +const _SC_SYNCHRONIZED_IO = 14 +const _SC_THREADS = 67 +const _SC_THREAD_ATTR_STACKADDR = 77 +const _SC_THREAD_ATTR_STACKSIZE = 78 +const _SC_THREAD_CPUTIME = 139 +const _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 +const _SC_THREAD_KEYS_MAX = 74 +const _SC_THREAD_PRIORITY_SCHEDULING = 79 +const _SC_THREAD_PRIO_INHERIT = 80 +const _SC_THREAD_PRIO_PROTECT = 81 +const _SC_THREAD_PROCESS_SHARED = 82 +const _SC_THREAD_ROBUST_PRIO_INHERIT = 247 +const _SC_THREAD_ROBUST_PRIO_PROTECT = 248 +const _SC_THREAD_SAFE_FUNCTIONS = 68 +const _SC_THREAD_SPORADIC_SERVER = 161 +const _SC_THREAD_STACK_MIN = 75 +const _SC_THREAD_THREADS_MAX = 76 +const _SC_TIMEOUTS = 164 +const _SC_TIMERS = 11 +const _SC_TIMER_MAX = 35 +const _SC_TRACE = 181 +const _SC_TRACE_EVENT_FILTER = 182 +const _SC_TRACE_EVENT_NAME_MAX = 242 +const _SC_TRACE_INHERIT = 183 +const _SC_TRACE_LOG = 184 +const _SC_TRACE_NAME_MAX = 243 +const _SC_TRACE_SYS_MAX = 244 +const _SC_TRACE_USER_EVENT_MAX = 245 +const _SC_TTY_NAME_MAX = 72 +const _SC_TYPED_MEMORY_OBJECTS = 165 +const _SC_TZNAME_MAX = 6 +const _SC_UIO_MAXIOV = 60 +const _SC_V6_ILP32_OFF32 = 176 +const _SC_V6_ILP32_OFFBIG = 177 +const _SC_V6_LP64_OFF64 = 178 +const _SC_V6_LPBIG_OFFBIG = 179 +const _SC_V7_ILP32_OFF32 = 237 +const _SC_V7_ILP32_OFFBIG = 238 +const _SC_V7_LP64_OFF64 = 239 +const _SC_V7_LPBIG_OFFBIG = 240 +const _SC_VERSION = 29 +const _SC_XBS5_ILP32_OFF32 = 125 +const _SC_XBS5_ILP32_OFFBIG = 126 +const _SC_XBS5_LP64_OFF64 = 127 +const _SC_XBS5_LPBIG_OFFBIG = 128 +const _SC_XOPEN_CRYPT = 92 +const _SC_XOPEN_ENH_I18N = 93 +const _SC_XOPEN_LEGACY = 129 +const _SC_XOPEN_REALTIME = 130 +const _SC_XOPEN_REALTIME_THREADS = 131 +const _SC_XOPEN_SHM = 94 +const _SC_XOPEN_STREAMS = 246 +const _SC_XOPEN_UNIX = 91 +const _SC_XOPEN_VERSION = 89 +const _SC_XOPEN_XCU_VERSION = 90 +const _SC_XOPEN_XPG2 = 98 +const _SC_XOPEN_XPG3 = 99 +const _SC_XOPEN_XPG4 = 100 +const _XOPEN_ENH_I18N = 1 +const _XOPEN_UNIX = 1 +const _XOPEN_VERSION = 700 + +type Tsize_t = uint64 + +type Tssize_t = int64 + +type Toff_t = int64 + +type Tpid_t = int32 + +type Tuid_t = uint32 + +type Tgid_t = uint32 + +type Tuseconds_t = uint32 + +type Tva_list = uintptr + +type t__isoc_va_list = uintptr + +type Tfpos_t = struct { + F__lldata [0]int64 + F__align [0]float64 + F__opaque [16]uint8 +} + +type T_G_fpos64_t = Tfpos_t + +func Xconfstr(tls *TLS, name int32, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v len1=%v, (%v:)", tls, name, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = __ccgo_ts + if !(name != 0) { + s = __ccgo_ts + 1 + } else { + if uint32(name) & ^Uint32FromUint32(4) != uint32(1) && uint32(name-int32(_CS_POSIX_V6_ILP32_OFF32_CFLAGS)) > uint32(35) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + // snprintf is overkill but avoid wasting code size to implement + // this completely useless function and its truncation semantics + return uint64(Xsnprintf(tls, buf, len1, __ccgo_ts+15, VaList(bp+8, s)) + int32(1)) +} + +const ARG_MAX = 131072 +const BC_BASE_MAX = 99 +const BC_DIM_MAX = 2048 +const BC_SCALE_MAX = 99 +const BC_STRING_MAX = 1000 +const CHARCLASS_NAME_MAX = 14 +const CHAR_BIT = 8 +const CHAR_MAX = 255 +const CHAR_MIN = 0 +const COLL_WEIGHTS_MAX = 2 +const DELAYTIMER_MAX = 2147483647 +const EXPR_NEST_MAX = 32 +const FILESIZEBITS = 64 +const HOST_NAME_MAX = 255 +const INT_MAX = 2147483647 +const INT_MIN = -2147483648 +const IOV_MAX = 1024 +const LINE_MAX = 4096 +const LLONG_MAX = 9223372036854775807 +const LLONG_MIN = -9223372036854775808 +const LOGIN_NAME_MAX = 256 +const LONG_BIT = 64 +const LONG_MAX = 9223372036854775807 +const LONG_MIN = -9223372036854775808 +const MB_LEN_MAX = 4 +const MQ_PRIO_MAX = 32768 +const NAME_MAX = 255 +const NGROUPS_MAX = 32 +const NL_ARGMAX = 9 +const NL_LANGMAX = 32 +const NL_MSGMAX = 32767 +const NL_SETMAX = 255 +const NL_TEXTMAX = 2048 +const NZERO = 20 +const PATH_MAX = 4096 +const PIPE_BUF = 4096 +const PTHREAD_DESTRUCTOR_ITERATIONS = 4 +const PTHREAD_KEYS_MAX = 128 +const PTHREAD_STACK_MIN = 2048 +const RE_DUP_MAX = 255 +const SCHAR_MAX = 127 +const SCHAR_MIN = -128 +const SEEK_CUR = 1 +const SEEK_END = 2 +const SEEK_SET = 0 +const SEM_NSEMS_MAX = 256 +const SEM_VALUE_MAX = 2147483647 +const SHRT_MAX = 32767 +const SHRT_MIN = -32768 +const SSIZE_MAX = 9223372036854775807 +const SYMLOOP_MAX = 40 +const TTY_NAME_MAX = 32 +const TZNAME_MAX = 6 +const UCHAR_MAX = 255 +const UINT_MAX = 4294967295 +const ULLONG_MAX = 18446744073709551615 +const ULONG_MAX = 18446744073709551615 +const USHRT_MAX = 65535 +const WORD_BIT = 32 +const _POSIX2_BC_BASE_MAX = 99 +const _POSIX2_BC_DIM_MAX = 2048 +const _POSIX2_BC_SCALE_MAX = 99 +const _POSIX2_BC_STRING_MAX = 1000 +const _POSIX2_CHARCLASS_NAME_MAX = 14 +const _POSIX2_COLL_WEIGHTS_MAX = 2 +const _POSIX2_EXPR_NEST_MAX = 32 +const _POSIX2_LINE_MAX = 2048 +const _POSIX2_RE_DUP_MAX = 255 +const _POSIX_AIO_LISTIO_MAX = 2 +const _POSIX_AIO_MAX = 1 +const _POSIX_ARG_MAX = 4096 +const _POSIX_CHILD_MAX = 25 +const _POSIX_CLOCKRES_MIN = 20000000 +const _POSIX_DELAYTIMER_MAX = 32 +const _POSIX_HOST_NAME_MAX = 255 +const _POSIX_LINK_MAX = 8 +const _POSIX_LOGIN_NAME_MAX = 9 +const _POSIX_MAX_CANON = 255 +const _POSIX_MAX_INPUT = 255 +const _POSIX_MQ_OPEN_MAX = 8 +const _POSIX_MQ_PRIO_MAX = 32 +const _POSIX_NAME_MAX = 14 +const _POSIX_NGROUPS_MAX = 8 +const _POSIX_OPEN_MAX = 20 +const _POSIX_PATH_MAX = 256 +const _POSIX_PIPE_BUF = 512 +const _POSIX_RE_DUP_MAX = 255 +const _POSIX_RTSIG_MAX = 8 +const _POSIX_SEM_NSEMS_MAX = 256 +const _POSIX_SEM_VALUE_MAX = 32767 +const _POSIX_SIGQUEUE_MAX = 32 +const _POSIX_SSIZE_MAX = 32767 +const _POSIX_SS_REPL_MAX = 4 +const _POSIX_STREAM_MAX = 8 +const _POSIX_SYMLINK_MAX = 255 +const _POSIX_SYMLOOP_MAX = 8 +const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 +const _POSIX_THREAD_KEYS_MAX = 128 +const _POSIX_THREAD_THREADS_MAX = 64 +const _POSIX_TIMER_MAX = 32 +const _POSIX_TRACE_EVENT_NAME_MAX = 30 +const _POSIX_TRACE_NAME_MAX = 8 +const _POSIX_TRACE_SYS_MAX = 8 +const _POSIX_TRACE_USER_EVENT_MAX = 32 +const _POSIX_TTY_NAME_MAX = 9 +const _POSIX_TZNAME_MAX = 6 +const _XOPEN_IOV_MAX = 16 +const _XOPEN_NAME_MAX = 255 +const _XOPEN_PATH_MAX = 1024 + +func Xfpathconf(tls *TLS, fd int32, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(name) >= Uint64FromInt64(42)/Uint64FromInt64(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + return int64(_values[name]) +} + +var _values = [21]int16{ + 0: int16(_POSIX_LINK_MAX), + 1: int16(_POSIX_MAX_CANON), + 2: int16(_POSIX_MAX_INPUT), + 3: int16(NAME_MAX), + 4: int16(PATH_MAX), + 5: int16(PIPE_BUF), + 6: int16(1), + 7: int16(1), + 9: int16(1), + 10: int16(-int32(1)), + 11: int16(-int32(1)), + 12: int16(-int32(1)), + 13: int16(FILESIZEBITS), + 14: int16(4096), + 15: int16(4096), + 16: int16(4096), + 17: int16(4096), + 18: int16(4096), + 19: int16(-int32(1)), + 20: int16(1), +} + +const SI_LOAD_SHIFT = 16 + +type Tsysinfo = struct { + Fuptime uint64 + Floads [3]uint64 + Ftotalram uint64 + Ffreeram uint64 + Fsharedram uint64 + Fbufferram uint64 + Ftotalswap uint64 + Ffreeswap uint64 + Fprocs uint16 + Fpad uint16 + Ftotalhigh uint64 + Ffreehigh uint64 + Fmem_unit uint32 + F__reserved [256]uint8 +} + +func Xget_nprocs_conf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_CONF))) +} + +func Xget_nprocs(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_ONLN))) +} + +func Xget_phys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_PHYS_PAGES)) +} + +func Xget_avphys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_AVPHYS_PAGES)) +} + +func Xpathconf(tls *TLS, path uintptr, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfpathconf(tls, -int32(1), name) +} + +const AT_BASE = 7 +const AT_BASE_PLATFORM = 24 +const AT_CLKTCK = 17 +const AT_DCACHEBSIZE = 19 +const AT_EGID = 14 +const AT_ENTRY = 9 +const AT_EUID = 12 +const AT_EXECFD = 2 +const AT_EXECFN = 31 +const AT_FLAGS = 8 +const AT_FPUCW = 18 +const AT_GID = 13 +const AT_HWCAP = 16 +const AT_HWCAP2 = 26 +const AT_ICACHEBSIZE = 20 +const AT_IGNORE = 1 +const AT_IGNOREPPC = 22 +const AT_L1D_CACHEGEOMETRY = 43 +const AT_L1D_CACHESHAPE = 35 +const AT_L1D_CACHESIZE = 42 +const AT_L1I_CACHEGEOMETRY = 41 +const AT_L1I_CACHESHAPE = 34 +const AT_L1I_CACHESIZE = 40 +const AT_L2_CACHEGEOMETRY = 45 +const AT_L2_CACHESHAPE = 36 +const AT_L2_CACHESIZE = 44 +const AT_L3_CACHEGEOMETRY = 47 +const AT_L3_CACHESHAPE = 37 +const AT_L3_CACHESIZE = 46 +const AT_MINSIGSTKSZ = 51 +const AT_NOTELF = 10 +const AT_NULL = 0 +const AT_PAGESZ = 6 +const AT_PHDR = 3 +const AT_PHENT = 4 +const AT_PHNUM = 5 +const AT_PLATFORM = 15 +const AT_RANDOM = 25 +const AT_SECURE = 23 +const AT_SYSINFO = 32 +const AT_SYSINFO_EHDR = 33 +const AT_UCACHEBSIZE = 21 +const AT_UID = 11 +const BUS_ADRALN = 1 +const BUS_ADRERR = 2 +const BUS_MCEERR_AO = 5 +const BUS_MCEERR_AR = 4 +const BUS_OBJERR = 3 +const CLD_CONTINUED = 6 +const CLD_DUMPED = 3 +const CLD_EXITED = 1 +const CLD_KILLED = 2 +const CLD_STOPPED = 5 +const CLD_TRAPPED = 4 +const DF_1_CONFALT = 8192 +const DF_1_DIRECT = 256 +const DF_1_DISPRELDNE = 32768 +const DF_1_DISPRELPND = 65536 +const DF_1_EDITED = 2097152 +const DF_1_ENDFILTEE = 16384 +const DF_1_GLOBAL = 2 +const DF_1_GLOBAUDIT = 16777216 +const DF_1_GROUP = 4 +const DF_1_IGNMULDEF = 262144 +const DF_1_INITFIRST = 32 +const DF_1_INTERPOSE = 1024 +const DF_1_LOADFLTR = 16 +const DF_1_NODEFLIB = 2048 +const DF_1_NODELETE = 8 +const DF_1_NODIRECT = 131072 +const DF_1_NODUMP = 4096 +const DF_1_NOHDR = 1048576 +const DF_1_NOKSYMS = 524288 +const DF_1_NOOPEN = 64 +const DF_1_NORELOC = 4194304 +const DF_1_NOW = 1 +const DF_1_ORIGIN = 128 +const DF_1_PIE = 134217728 +const DF_1_SINGLETON = 33554432 +const DF_1_STUB = 67108864 +const DF_1_SYMINTPOSE = 8388608 +const DF_1_TRANS = 512 +const DF_BIND_NOW = 8 +const DF_ORIGIN = 1 +const DF_P1_GROUPPERM = 2 +const DF_P1_LAZYLOAD = 1 +const DF_STATIC_TLS = 16 +const DF_SYMBOLIC = 2 +const DF_TEXTREL = 4 +const DTF_1_CONFEXP = 2 +const DTF_1_PARINIT = 1 +const DT_ADDRNUM = 11 +const DT_ADDRRNGHI = 1879047935 +const DT_ADDRRNGLO = 1879047680 +const DT_ALPHA_NUM = 1 +const DT_ALPHA_PLTRO = 1879048192 +const DT_AUDIT = 1879047932 +const DT_AUXILIARY = 2147483645 +const DT_BIND_NOW = 24 +const DT_CHECKSUM = 1879047672 +const DT_CONFIG = 1879047930 +const DT_DEBUG = 21 +const DT_DEPAUDIT = 1879047931 +const DT_ENCODING = 32 +const DT_EXTRANUM = 3 +const DT_FEATURE_1 = 1879047676 +const DT_FILTER = 2147483647 +const DT_FINI = 13 +const DT_FINI_ARRAY = 26 +const DT_FINI_ARRAYSZ = 28 +const DT_FLAGS = 30 +const DT_FLAGS_1 = 1879048187 +const DT_GNU_CONFLICT = 1879047928 +const DT_GNU_CONFLICTSZ = 1879047670 +const DT_GNU_HASH = 1879047925 +const DT_GNU_LIBLIST = 1879047929 +const DT_GNU_LIBLISTSZ = 1879047671 +const DT_GNU_PRELINKED = 1879047669 +const DT_HASH = 4 +const DT_HIOS = 1879044096 +const DT_HIPROC = 2147483647 +const DT_IA_64_NUM = 1 +const DT_IA_64_PLT_RESERVE = 1879048192 +const DT_INIT = 12 +const DT_INIT_ARRAY = 25 +const DT_INIT_ARRAYSZ = 27 +const DT_JMPREL = 23 +const DT_LOOS = 1610612749 +const DT_LOPROC = 1879048192 +const DT_MIPS_AUX_DYNAMIC = 1879048241 +const DT_MIPS_BASE_ADDRESS = 1879048198 +const DT_MIPS_COMPACT_SIZE = 1879048239 +const DT_MIPS_CONFLICT = 1879048200 +const DT_MIPS_CONFLICTNO = 1879048203 +const DT_MIPS_CXX_FLAGS = 1879048226 +const DT_MIPS_DELTA_CLASS = 1879048215 +const DT_MIPS_DELTA_CLASSSYM = 1879048224 +const DT_MIPS_DELTA_CLASSSYM_NO = 1879048225 +const DT_MIPS_DELTA_CLASS_NO = 1879048216 +const DT_MIPS_DELTA_INSTANCE = 1879048217 +const DT_MIPS_DELTA_INSTANCE_NO = 1879048218 +const DT_MIPS_DELTA_RELOC = 1879048219 +const DT_MIPS_DELTA_RELOC_NO = 1879048220 +const DT_MIPS_DELTA_SYM = 1879048221 +const DT_MIPS_DELTA_SYM_NO = 1879048222 +const DT_MIPS_DYNSTR_ALIGN = 1879048235 +const DT_MIPS_FLAGS = 1879048197 +const DT_MIPS_GOTSYM = 1879048211 +const DT_MIPS_GP_VALUE = 1879048240 +const DT_MIPS_HIDDEN_GOTIDX = 1879048231 +const DT_MIPS_HIPAGENO = 1879048212 +const DT_MIPS_ICHECKSUM = 1879048195 +const DT_MIPS_INTERFACE = 1879048234 +const DT_MIPS_INTERFACE_SIZE = 1879048236 +const DT_MIPS_IVERSION = 1879048196 +const DT_MIPS_LIBLIST = 1879048201 +const DT_MIPS_LIBLISTNO = 1879048208 +const DT_MIPS_LOCALPAGE_GOTIDX = 1879048229 +const DT_MIPS_LOCAL_GOTIDX = 1879048230 +const DT_MIPS_LOCAL_GOTNO = 1879048202 +const DT_MIPS_MSYM = 1879048199 +const DT_MIPS_NUM = 54 +const DT_MIPS_OPTIONS = 1879048233 +const DT_MIPS_PERF_SUFFIX = 1879048238 +const DT_MIPS_PIXIE_INIT = 1879048227 +const DT_MIPS_PLTGOT = 1879048242 +const DT_MIPS_PROTECTED_GOTIDX = 1879048232 +const DT_MIPS_RLD_MAP = 1879048214 +const DT_MIPS_RLD_MAP_REL = 1879048245 +const DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 1879048237 +const DT_MIPS_RLD_VERSION = 1879048193 +const DT_MIPS_RWPLT = 1879048244 +const DT_MIPS_SYMBOL_LIB = 1879048228 +const DT_MIPS_SYMTABNO = 1879048209 +const DT_MIPS_TIME_STAMP = 1879048194 +const DT_MIPS_UNREFEXTNO = 1879048210 +const DT_MOVEENT = 1879047674 +const DT_MOVESZ = 1879047675 +const DT_MOVETAB = 1879047934 +const DT_NEEDED = 1 +const DT_NIOS2_GP = 1879048194 +const DT_NULL = 0 +const DT_NUM = 38 +const DT_PLTGOT = 3 +const DT_PLTPAD = 1879047933 +const DT_PLTPADSZ = 1879047673 +const DT_PLTREL = 20 +const DT_PLTRELSZ = 2 +const DT_POSFLAG_1 = 1879047677 +const DT_PPC64_GLINK = 1879048192 +const DT_PPC64_NUM = 4 +const DT_PPC64_OPD = 1879048193 +const DT_PPC64_OPDSZ = 1879048194 +const DT_PPC64_OPT = 1879048195 +const DT_PPC_GOT = 1879048192 +const DT_PPC_NUM = 2 +const DT_PPC_OPT = 1879048193 +const DT_PREINIT_ARRAY = 32 +const DT_PREINIT_ARRAYSZ = 33 +const DT_PROCNUM = 54 +const DT_REL = 17 +const DT_RELA = 7 +const DT_RELACOUNT = 1879048185 +const DT_RELAENT = 9 +const DT_RELASZ = 8 +const DT_RELCOUNT = 1879048186 +const DT_RELENT = 19 +const DT_RELR = 36 +const DT_RELRENT = 37 +const DT_RELRSZ = 35 +const DT_RELSZ = 18 +const DT_RPATH = 15 +const DT_RUNPATH = 29 +const DT_SONAME = 14 +const DT_SPARC_NUM = 2 +const DT_SPARC_REGISTER = 1879048193 +const DT_STRSZ = 10 +const DT_STRTAB = 5 +const DT_SYMBOLIC = 16 +const DT_SYMENT = 11 +const DT_SYMINENT = 1879047679 +const DT_SYMINFO = 1879047935 +const DT_SYMINSZ = 1879047678 +const DT_SYMTAB = 6 +const DT_SYMTAB_SHNDX = 34 +const DT_TEXTREL = 22 +const DT_TLSDESC_GOT = 1879047927 +const DT_TLSDESC_PLT = 1879047926 +const DT_VALNUM = 12 +const DT_VALRNGHI = 1879047679 +const DT_VALRNGLO = 1879047424 +const DT_VERDEF = 1879048188 +const DT_VERDEFNUM = 1879048189 +const DT_VERNEED = 1879048190 +const DT_VERNEEDNUM = 1879048191 +const DT_VERSIONTAGNUM = 16 +const DT_VERSYM = 1879048176 +const EFA_PARISC_1_0 = 523 +const EFA_PARISC_1_1 = 528 +const EFA_PARISC_2_0 = 532 +const EF_ALPHA_32BIT = 1 +const EF_ALPHA_CANRELAX = 2 +const EF_ARM_ABI_FLOAT_HARD = 1024 +const EF_ARM_ABI_FLOAT_SOFT = 512 +const EF_ARM_ALIGN8 = 64 +const EF_ARM_APCS_26 = 8 +const EF_ARM_APCS_FLOAT = 16 +const EF_ARM_BE8 = 8388608 +const EF_ARM_DYNSYMSUSESEGIDX = 8 +const EF_ARM_EABIMASK = 4278190080 +const EF_ARM_EABI_UNKNOWN = 0 +const EF_ARM_EABI_VER1 = 16777216 +const EF_ARM_EABI_VER2 = 33554432 +const EF_ARM_EABI_VER3 = 50331648 +const EF_ARM_EABI_VER4 = 67108864 +const EF_ARM_EABI_VER5 = 83886080 +const EF_ARM_HASENTRY = 2 +const EF_ARM_INTERWORK = 4 +const EF_ARM_LE8 = 4194304 +const EF_ARM_MAPSYMSFIRST = 16 +const EF_ARM_MAVERICK_FLOAT = 2048 +const EF_ARM_NEW_ABI = 128 +const EF_ARM_OLD_ABI = 256 +const EF_ARM_PIC = 32 +const EF_ARM_RELEXEC = 1 +const EF_ARM_SOFT_FLOAT = 512 +const EF_ARM_SYMSARESORTED = 4 +const EF_ARM_VFP_FLOAT = 1024 +const EF_CPU32 = 8454144 +const EF_IA_64_ABI64 = 16 +const EF_IA_64_ARCH = 4278190080 +const EF_IA_64_MASKOS = 15 +const EF_LARCH_ABI_DOUBLE_FLOAT = 3 +const EF_LARCH_ABI_MODIFIER_MASK = 7 +const EF_LARCH_ABI_SINGLE_FLOAT = 2 +const EF_LARCH_ABI_SOFT_FLOAT = 1 +const EF_LARCH_OBJABI_V1 = 64 +const EF_MIPS_64BIT_WHIRL = 16 +const EF_MIPS_ABI2 = 32 +const EF_MIPS_ABI_ON32 = 64 +const EF_MIPS_ARCH = 4026531840 +const EF_MIPS_ARCH_1 = 0 +const EF_MIPS_ARCH_2 = 268435456 +const EF_MIPS_ARCH_3 = 536870912 +const EF_MIPS_ARCH_32 = 1342177280 +const EF_MIPS_ARCH_32R2 = 1879048192 +const EF_MIPS_ARCH_4 = 805306368 +const EF_MIPS_ARCH_5 = 1073741824 +const EF_MIPS_ARCH_64 = 1610612736 +const EF_MIPS_ARCH_64R2 = 2147483648 +const EF_MIPS_CPIC = 4 +const EF_MIPS_FP64 = 512 +const EF_MIPS_NAN2008 = 1024 +const EF_MIPS_NOREORDER = 1 +const EF_MIPS_PIC = 2 +const EF_MIPS_XGOT = 8 +const EF_PARISC_ARCH = 65535 +const EF_PARISC_EXT = 131072 +const EF_PARISC_LAZYSWAP = 4194304 +const EF_PARISC_LSB = 262144 +const EF_PARISC_NO_KABP = 1048576 +const EF_PARISC_TRAPNIL = 65536 +const EF_PARISC_WIDE = 524288 +const EF_PPC64_ABI = 3 +const EF_PPC_EMB = 2147483648 +const EF_PPC_RELOCATABLE = 65536 +const EF_PPC_RELOCATABLE_LIB = 32768 +const EF_SH1 = 1 +const EF_SH2 = 2 +const EF_SH2A = 13 +const EF_SH2A_NOFPU = 19 +const EF_SH2A_SH3E = 24 +const EF_SH2A_SH3_NOFPU = 22 +const EF_SH2A_SH4 = 23 +const EF_SH2A_SH4_NOFPU = 21 +const EF_SH2E = 11 +const EF_SH3 = 3 +const EF_SH3E = 8 +const EF_SH3_DSP = 5 +const EF_SH3_NOMMU = 20 +const EF_SH4 = 9 +const EF_SH4A = 12 +const EF_SH4AL_DSP = 6 +const EF_SH4A_NOFPU = 17 +const EF_SH4_NOFPU = 16 +const EF_SH4_NOMMU_NOFPU = 18 +const EF_SH_DSP = 4 +const EF_SH_MACH_MASK = 31 +const EF_SH_UNKNOWN = 0 +const EF_SPARCV9_MM = 3 +const EF_SPARCV9_PSO = 1 +const EF_SPARCV9_RMO = 2 +const EF_SPARCV9_TSO = 0 +const EF_SPARC_32PLUS = 256 +const EF_SPARC_EXT_MASK = 16776960 +const EF_SPARC_HAL_R1 = 1024 +const EF_SPARC_LEDATA = 8388608 +const EF_SPARC_SUN_US1 = 512 +const EF_SPARC_SUN_US3 = 2048 +const EI_ABIVERSION = 8 +const EI_CLASS = 4 +const EI_DATA = 5 +const EI_MAG0 = 0 +const EI_MAG1 = 1 +const EI_MAG2 = 2 +const EI_MAG3 = 3 +const EI_NIDENT = 16 +const EI_OSABI = 7 +const EI_PAD = 9 +const EI_VERSION = 6 +const ELFCLASS32 = 1 +const ELFCLASS64 = 2 +const ELFCLASSNONE = 0 +const ELFCLASSNUM = 3 +const ELFCOMPRESS_HIOS = 1879048191 +const ELFCOMPRESS_HIPROC = 2147483647 +const ELFCOMPRESS_LOOS = 1610612736 +const ELFCOMPRESS_LOPROC = 1879048192 +const ELFCOMPRESS_ZLIB = 1 +const ELFCOMPRESS_ZSTD = 2 +const ELFDATA2LSB = 1 +const ELFDATA2MSB = 2 +const ELFDATANONE = 0 +const ELFDATANUM = 3 +const ELFMAG = "\\177ELF" +const ELFMAG0 = 127 +const ELFMAG1 = 69 +const ELFMAG2 = 76 +const ELFMAG3 = 70 +const ELFOSABI_AIX = 7 +const ELFOSABI_ARM = 97 +const ELFOSABI_FREEBSD = 9 +const ELFOSABI_GNU = 3 +const ELFOSABI_HPUX = 1 +const ELFOSABI_IRIX = 8 +const ELFOSABI_LINUX = 3 +const ELFOSABI_MODESTO = 11 +const ELFOSABI_NETBSD = 2 +const ELFOSABI_NONE = 0 +const ELFOSABI_OPENBSD = 12 +const ELFOSABI_SOLARIS = 6 +const ELFOSABI_STANDALONE = 255 +const ELFOSABI_SYSV = 0 +const ELFOSABI_TRU64 = 10 +const ELF_NOTE_ABI = 1 +const ELF_NOTE_GNU = "GNU" +const ELF_NOTE_OS_FREEBSD = 3 +const ELF_NOTE_OS_GNU = 1 +const ELF_NOTE_OS_LINUX = 0 +const ELF_NOTE_OS_SOLARIS2 = 2 +const ELF_NOTE_PAGESIZE_HINT = 1 +const ELF_NOTE_SOLARIS = "SUNW Solaris" +const EM_386 = 3 +const EM_56800EX = 200 +const EM_68HC05 = 72 +const EM_68HC08 = 71 +const EM_68HC11 = 70 +const EM_68HC12 = 53 +const EM_68HC16 = 69 +const EM_68K = 4 +const EM_78KOR = 199 +const EM_8051 = 165 +const EM_860 = 7 +const EM_88K = 5 +const EM_960 = 19 +const EM_AARCH64 = 183 +const EM_ALPHA = 36902 +const EM_ALTERA_NIOS2 = 113 +const EM_AMDGPU = 224 +const EM_ARC = 45 +const EM_ARCA = 109 +const EM_ARC_A5 = 93 +const EM_ARC_COMPACT = 93 +const EM_ARC_COMPACT2 = 195 +const EM_ARM = 40 +const EM_AVR = 83 +const EM_AVR32 = 185 +const EM_BA1 = 201 +const EM_BA2 = 202 +const EM_BLACKFIN = 106 +const EM_BPF = 247 +const EM_C166 = 116 +const EM_CDP = 215 +const EM_CE = 119 +const EM_CLOUDSHIELD = 192 +const EM_COGE = 216 +const EM_COLDFIRE = 52 +const EM_COOL = 217 +const EM_COREA_1ST = 193 +const EM_COREA_2ND = 194 +const EM_CR = 103 +const EM_CR16 = 177 +const EM_CRAYNV2 = 172 +const EM_CRIS = 76 +const EM_CRX = 114 +const EM_CSKY = 252 +const EM_CSR_KALIMBA = 219 +const EM_CUDA = 190 +const EM_CYPRESS_M8C = 161 +const EM_D10V = 85 +const EM_D30V = 86 +const EM_DSP24 = 136 +const EM_DSPIC30F = 118 +const EM_DXP = 112 +const EM_ECOG16 = 176 +const EM_ECOG1X = 168 +const EM_ECOG2 = 134 +const EM_EMX16 = 212 +const EM_EMX8 = 213 +const EM_ETPU = 178 +const EM_EXCESS = 111 +const EM_F2MC16 = 104 +const EM_FAKE_ALPHA = 41 +const EM_FIREPATH = 78 +const EM_FR20 = 37 +const EM_FR30 = 84 +const EM_FT32 = 222 +const EM_FX66 = 66 +const EM_H8S = 48 +const EM_H8_300 = 46 +const EM_H8_300H = 47 +const EM_H8_500 = 49 +const EM_HUANY = 81 +const EM_IA_64 = 50 +const EM_IP2K = 101 +const EM_JAVELIN = 77 +const EM_K10M = 181 +const EM_KM32 = 210 +const EM_KMX32 = 211 +const EM_KVARC = 214 +const EM_L10M = 180 +const EM_LATTICEMICO32 = 138 +const EM_LOONGARCH = 258 +const EM_M16C = 117 +const EM_M32 = 1 +const EM_M32C = 120 +const EM_M32R = 88 +const EM_MANIK = 171 +const EM_MAX = 102 +const EM_MAXQ30 = 169 +const EM_MCHP_PIC = 204 +const EM_MCST_ELBRUS = 175 +const EM_ME16 = 59 +const EM_METAG = 174 +const EM_MICROBLAZE = 189 +const EM_MIPS = 8 +const EM_MIPS_RS3_LE = 10 +const EM_MIPS_X = 51 +const EM_MMA = 54 +const EM_MMDSP_PLUS = 160 +const EM_MMIX = 80 +const EM_MN10200 = 90 +const EM_MN10300 = 89 +const EM_MOXIE = 223 +const EM_MSP430 = 105 +const EM_NCPU = 56 +const EM_NDR1 = 57 +const EM_NDS32 = 167 +const EM_NONE = 0 +const EM_NORC = 218 +const EM_NS32K = 97 +const EM_NUM = 259 +const EM_OPEN8 = 196 +const EM_OPENRISC = 92 +const EM_OR1K = 92 +const EM_PARISC = 15 +const EM_PCP = 55 +const EM_PDSP = 63 +const EM_PJ = 91 +const EM_PPC = 20 +const EM_PPC64 = 21 +const EM_PRISM = 82 +const EM_QDSP6 = 164 +const EM_R32C = 162 +const EM_RCE = 39 +const EM_RH32 = 38 +const EM_RISCV = 243 +const EM_RL78 = 197 +const EM_RS08 = 132 +const EM_RX = 173 +const EM_S370 = 9 +const EM_S390 = 22 +const EM_SCORE7 = 135 +const EM_SEP = 108 +const EM_SE_C17 = 139 +const EM_SE_C33 = 107 +const EM_SH = 42 +const EM_SHARC = 133 +const EM_SLE9X = 179 +const EM_SNP1K = 99 +const EM_SPARC = 2 +const EM_SPARC32PLUS = 18 +const EM_SPARCV9 = 43 +const EM_ST100 = 60 +const EM_ST19 = 74 +const EM_ST200 = 100 +const EM_ST7 = 68 +const EM_ST9PLUS = 67 +const EM_STARCORE = 58 +const EM_STM8 = 186 +const EM_STXP7X = 166 +const EM_SVX = 73 +const EM_TILE64 = 187 +const EM_TILEGX = 191 +const EM_TILEPRO = 188 +const EM_TINYJ = 61 +const EM_TI_ARP32 = 143 +const EM_TI_C2000 = 141 +const EM_TI_C5500 = 142 +const EM_TI_C6000 = 140 +const EM_TI_PRU = 144 +const EM_TMM_GPP = 96 +const EM_TPC = 98 +const EM_TRICORE = 44 +const EM_TRIMEDIA = 163 +const EM_TSK3000 = 131 +const EM_UNICORE = 110 +const EM_V800 = 36 +const EM_V850 = 87 +const EM_VAX = 75 +const EM_VIDEOCORE = 95 +const EM_VIDEOCORE3 = 137 +const EM_VIDEOCORE5 = 198 +const EM_VISIUM = 221 +const EM_VPP500 = 17 +const EM_X86_64 = 62 +const EM_XCORE = 203 +const EM_XGATE = 115 +const EM_XIMO16 = 170 +const EM_XTENSA = 94 +const EM_Z80 = 220 +const EM_ZSP = 79 +const ET_CORE = 4 +const ET_DYN = 3 +const ET_EXEC = 2 +const ET_HIOS = 65279 +const ET_HIPROC = 65535 +const ET_LOOS = 65024 +const ET_LOPROC = 65280 +const ET_NONE = 0 +const ET_NUM = 5 +const ET_REL = 1 +const EV_CURRENT = 1 +const EV_NONE = 0 +const EV_NUM = 2 +const EXIT_FAILURE = 1 +const EXIT_SUCCESS = 0 +const E_MIPS_ARCH_1 = 0 +const E_MIPS_ARCH_2 = 268435456 +const E_MIPS_ARCH_3 = 536870912 +const E_MIPS_ARCH_32 = 1342177280 +const E_MIPS_ARCH_4 = 805306368 +const E_MIPS_ARCH_5 = 1073741824 +const E_MIPS_ARCH_64 = 1610612736 +const FD_SETSIZE = 1024 +const FPE_FLTDIV = 3 +const FPE_FLTINV = 7 +const FPE_FLTOVF = 4 +const FPE_FLTRES = 6 +const FPE_FLTSUB = 8 +const FPE_FLTUND = 5 +const FPE_INTDIV = 1 +const FPE_INTOVF = 2 +const GRP_COMDAT = 1 +const ILL_BADSTK = 8 +const ILL_COPROC = 7 +const ILL_ILLADR = 3 +const ILL_ILLOPC = 1 +const ILL_ILLOPN = 2 +const ILL_ILLTRP = 4 +const ILL_PRVOPC = 5 +const ILL_PRVREG = 6 +const IPC_64 = 0 +const ITIMER_PROF = 2 +const ITIMER_REAL = 0 +const ITIMER_VIRTUAL = 1 +const JT_ARG_MAX = -254 +const JT_AVPHYS_PAGES = -247 +const JT_DELAYTIMER_MAX = -245 +const JT_MINSIGSTKSZ = -244 +const JT_MQ_PRIO_MAX = -253 +const JT_NPROCESSORS_CONF = -250 +const JT_NPROCESSORS_ONLN = -249 +const JT_PAGE_SIZE = -252 +const JT_PHYS_PAGES = -248 +const JT_SEM_VALUE_MAX = -251 +const JT_SIGSTKSZ = -243 +const JT_ZERO = -246 +const LITUSE_ALPHA_ADDR = 0 +const LITUSE_ALPHA_BASE = 1 +const LITUSE_ALPHA_BYTOFF = 2 +const LITUSE_ALPHA_JSR = 3 +const LITUSE_ALPHA_TLS_GD = 4 +const LITUSE_ALPHA_TLS_LDM = 5 +const LL_DELAY_LOAD = 16 +const LL_DELTA = 32 +const LL_EXACT_MATCH = 1 +const LL_EXPORTS = 8 +const LL_IGNORE_INT_VER = 2 +const LL_NONE = 0 +const LL_REQUIRE_MINOR = 4 +const MB_CUR_MAX = 0 +const MINSIGSTKSZ = 2048 +const MIPS_AFL_ASE_DSP = 1 +const MIPS_AFL_ASE_DSPR2 = 2 +const MIPS_AFL_ASE_EVA = 4 +const MIPS_AFL_ASE_MASK = 8191 +const MIPS_AFL_ASE_MCU = 8 +const MIPS_AFL_ASE_MDMX = 16 +const MIPS_AFL_ASE_MICROMIPS = 2048 +const MIPS_AFL_ASE_MIPS16 = 1024 +const MIPS_AFL_ASE_MIPS3D = 32 +const MIPS_AFL_ASE_MSA = 512 +const MIPS_AFL_ASE_MT = 64 +const MIPS_AFL_ASE_SMARTMIPS = 128 +const MIPS_AFL_ASE_VIRT = 256 +const MIPS_AFL_ASE_XPA = 4096 +const MIPS_AFL_EXT_10000 = 11 +const MIPS_AFL_EXT_3900 = 10 +const MIPS_AFL_EXT_4010 = 8 +const MIPS_AFL_EXT_4100 = 9 +const MIPS_AFL_EXT_4111 = 13 +const MIPS_AFL_EXT_4120 = 14 +const MIPS_AFL_EXT_4650 = 7 +const MIPS_AFL_EXT_5400 = 15 +const MIPS_AFL_EXT_5500 = 16 +const MIPS_AFL_EXT_5900 = 6 +const MIPS_AFL_EXT_LOONGSON_2E = 17 +const MIPS_AFL_EXT_LOONGSON_2F = 18 +const MIPS_AFL_EXT_LOONGSON_3A = 4 +const MIPS_AFL_EXT_OCTEON = 5 +const MIPS_AFL_EXT_OCTEON2 = 2 +const MIPS_AFL_EXT_OCTEONP = 3 +const MIPS_AFL_EXT_SB1 = 12 +const MIPS_AFL_EXT_XLR = 1 +const MIPS_AFL_FLAGS1_ODDSPREG = 1 +const MIPS_AFL_REG_128 = 3 +const MIPS_AFL_REG_32 = 1 +const MIPS_AFL_REG_64 = 2 +const MIPS_AFL_REG_NONE = 0 +const NT_386_IOPERM = 513 +const NT_386_TLS = 512 +const NT_ARC_V2 = 1536 +const NT_ARM_HW_BREAK = 1026 +const NT_ARM_HW_WATCH = 1027 +const NT_ARM_PACA_KEYS = 1031 +const NT_ARM_PACG_KEYS = 1032 +const NT_ARM_PAC_ENABLED_KEYS = 1034 +const NT_ARM_PAC_MASK = 1030 +const NT_ARM_SVE = 1029 +const NT_ARM_SYSTEM_CALL = 1028 +const NT_ARM_TAGGED_ADDR_CTRL = 1033 +const NT_ARM_TLS = 1025 +const NT_ARM_VFP = 1024 +const NT_ASRS = 8 +const NT_AUXV = 6 +const NT_FILE = 1179208773 +const NT_FPREGSET = 2 +const NT_GNU_ABI_TAG = 1 +const NT_GNU_BUILD_ID = 3 +const NT_GNU_GOLD_VERSION = 4 +const NT_GNU_PROPERTY_TYPE_0 = 5 +const NT_GWINDOWS = 7 +const NT_LOONGARCH_CPUCFG = 2560 +const NT_LOONGARCH_CSR = 2561 +const NT_LOONGARCH_LASX = 2563 +const NT_LOONGARCH_LBT = 2564 +const NT_LOONGARCH_LSX = 2562 +const NT_LWPSINFO = 17 +const NT_LWPSTATUS = 16 +const NT_METAG_CBUF = 1280 +const NT_METAG_RPIPE = 1281 +const NT_METAG_TLS = 1282 +const NT_MIPS_DSP = 2048 +const NT_MIPS_FP_MODE = 2049 +const NT_MIPS_MSA = 2050 +const NT_PLATFORM = 5 +const NT_PPC_DSCR = 261 +const NT_PPC_EBB = 262 +const NT_PPC_PMU = 263 +const NT_PPC_PPR = 260 +const NT_PPC_SPE = 257 +const NT_PPC_TAR = 259 +const NT_PPC_TM_CDSCR = 271 +const NT_PPC_TM_CFPR = 265 +const NT_PPC_TM_CGPR = 264 +const NT_PPC_TM_CPPR = 270 +const NT_PPC_TM_CTAR = 269 +const NT_PPC_TM_CVMX = 266 +const NT_PPC_TM_CVSX = 267 +const NT_PPC_TM_SPR = 268 +const NT_PPC_VMX = 256 +const NT_PPC_VSX = 258 +const NT_PRCRED = 14 +const NT_PRFPREG = 2 +const NT_PRFPXREG = 20 +const NT_PRPSINFO = 3 +const NT_PRSTATUS = 1 +const NT_PRXFPREG = 1189489535 +const NT_PRXREG = 4 +const NT_PSINFO = 13 +const NT_PSTATUS = 10 +const NT_RISCV_CSR = 2304 +const NT_RISCV_VECTOR = 2305 +const NT_S390_CTRS = 772 +const NT_S390_GS_BC = 780 +const NT_S390_GS_CB = 779 +const NT_S390_HIGH_GPRS = 768 +const NT_S390_LAST_BREAK = 774 +const NT_S390_PREFIX = 773 +const NT_S390_RI_CB = 781 +const NT_S390_SYSTEM_CALL = 775 +const NT_S390_TDB = 776 +const NT_S390_TIMER = 769 +const NT_S390_TODCMP = 770 +const NT_S390_TODPREG = 771 +const NT_S390_VXRS_HIGH = 778 +const NT_S390_VXRS_LOW = 777 +const NT_SIGINFO = 1397311305 +const NT_TASKSTRUCT = 4 +const NT_UTSNAME = 15 +const NT_VERSION = 1 +const NT_VMCOREDD = 1792 +const NT_X86_XSTATE = 514 +const ODK_EXCEPTIONS = 2 +const ODK_FILL = 5 +const ODK_HWAND = 7 +const ODK_HWOR = 8 +const ODK_HWPATCH = 4 +const ODK_NULL = 0 +const ODK_PAD = 3 +const ODK_REGINFO = 1 +const ODK_TAGS = 6 +const OEX_DISMISS = 524288 +const OEX_FPDBUG = 262144 +const OEX_FPU_DIV0 = 8 +const OEX_FPU_INEX = 1 +const OEX_FPU_INVAL = 16 +const OEX_FPU_MAX = 7936 +const OEX_FPU_MIN = 31 +const OEX_FPU_OFLO = 4 +const OEX_FPU_UFLO = 2 +const OEX_PAGE0 = 65536 +const OEX_PRECISEFP = 262144 +const OEX_SMM = 131072 +const OHWA0_R4KEOP_CHECKED = 1 +const OHWA1_R4KEOP_CLEAN = 2 +const OHW_R4KEOP = 1 +const OHW_R5KCVTL = 8 +const OHW_R5KEOP = 4 +const OHW_R8KPFETCH = 2 +const OPAD_POSTFIX = 2 +const OPAD_PREFIX = 1 +const OPAD_SYMBOL = 4 +const PF_ARM_ABS = 1073741824 +const PF_ARM_PI = 536870912 +const PF_ARM_SB = 268435456 +const PF_HP_CODE = 16777216 +const PF_HP_FAR_SHARED = 2097152 +const PF_HP_LAZYSWAP = 67108864 +const PF_HP_MODIFY = 33554432 +const PF_HP_NEAR_SHARED = 4194304 +const PF_HP_PAGE_SIZE = 1048576 +const PF_HP_SBP = 134217728 +const PF_IA_64_NORECOV = 2147483648 +const PF_MASKOS = 267386880 +const PF_MASKPROC = 4026531840 +const PF_MIPS_LOCAL = 268435456 +const PF_PARISC_SBP = 134217728 +const PF_R = 4 +const PF_W = 2 +const PF_X = 1 +const PN_XNUM = 65535 +const POLL_ERR = 4 +const POLL_HUP = 6 +const POLL_IN = 1 +const POLL_MSG = 3 +const POLL_OUT = 2 +const POLL_PRI = 5 +const PPC64_OPT_LOCALENTRY = 4 +const PPC64_OPT_MULTI_TOC = 2 +const PPC64_OPT_TLS = 1 +const PPC_OPT_TLS = 1 +const PRIO_MAX = 20 +const PRIO_MIN = -20 +const PRIO_PGRP = 1 +const PRIO_PROCESS = 0 +const PRIO_USER = 2 +const PT_ARM_EXIDX = 1879048193 +const PT_DYNAMIC = 2 +const PT_GNU_EH_FRAME = 1685382480 +const PT_GNU_PROPERTY = 1685382483 +const PT_GNU_RELRO = 1685382482 +const PT_GNU_STACK = 1685382481 +const PT_HIOS = 1879048191 +const PT_HIPROC = 2147483647 +const PT_HISUNW = 1879048191 +const PT_HP_CORE_COMM = 1610612740 +const PT_HP_CORE_KERNEL = 1610612739 +const PT_HP_CORE_LOADABLE = 1610612742 +const PT_HP_CORE_MMF = 1610612745 +const PT_HP_CORE_NONE = 1610612737 +const PT_HP_CORE_PROC = 1610612741 +const PT_HP_CORE_SHM = 1610612744 +const PT_HP_CORE_STACK = 1610612743 +const PT_HP_CORE_VERSION = 1610612738 +const PT_HP_FASTBIND = 1610612753 +const PT_HP_HSL_ANNOT = 1610612755 +const PT_HP_OPT_ANNOT = 1610612754 +const PT_HP_PARALLEL = 1610612752 +const PT_HP_STACK = 1610612756 +const PT_HP_TLS = 1610612736 +const PT_IA_64_ARCHEXT = 1879048192 +const PT_IA_64_HP_HSL_ANOT = 1610612755 +const PT_IA_64_HP_OPT_ANOT = 1610612754 +const PT_IA_64_HP_STACK = 1610612756 +const PT_IA_64_UNWIND = 1879048193 +const PT_INTERP = 3 +const PT_LOAD = 1 +const PT_LOOS = 1610612736 +const PT_LOPROC = 1879048192 +const PT_LOSUNW = 1879048186 +const PT_MIPS_ABIFLAGS = 1879048195 +const PT_MIPS_OPTIONS = 1879048194 +const PT_MIPS_REGINFO = 1879048192 +const PT_MIPS_RTPROC = 1879048193 +const PT_NOTE = 4 +const PT_NULL = 0 +const PT_NUM = 8 +const PT_PARISC_ARCHEXT = 1879048192 +const PT_PARISC_UNWIND = 1879048193 +const PT_PHDR = 6 +const PT_SHLIB = 5 +const PT_SUNWBSS = 1879048186 +const PT_SUNWSTACK = 1879048187 +const PT_TLS = 7 +const RAND_MAX = 2147483647 +const RHF_CORD = 4096 +const RHF_DEFAULT_DELAY_LOAD = 512 +const RHF_DELTA_C_PLUS_PLUS = 64 +const RHF_GUARANTEE_INIT = 32 +const RHF_GUARANTEE_START_INIT = 128 +const RHF_NONE = 0 +const RHF_NOTPOT = 2 +const RHF_NO_LIBRARY_REPLACEMENT = 4 +const RHF_NO_MOVE = 8 +const RHF_NO_UNRES_UNDEF = 8192 +const RHF_PIXIE = 256 +const RHF_QUICKSTART = 1 +const RHF_REQUICKSTART = 1024 +const RHF_REQUICKSTARTED = 2048 +const RHF_RLD_ORDER_SAFE = 16384 +const RHF_SGI_ONLY = 16 +const RLIMIT_AS = 9 +const RLIMIT_CORE = 4 +const RLIMIT_CPU = 0 +const RLIMIT_DATA = 2 +const RLIMIT_FSIZE = 1 +const RLIMIT_LOCKS = 10 +const RLIMIT_MEMLOCK = 8 +const RLIMIT_MSGQUEUE = 12 +const RLIMIT_NICE = 13 +const RLIMIT_NLIMITS = 16 +const RLIMIT_NOFILE = 7 +const RLIMIT_NPROC = 6 +const RLIMIT_RSS = 5 +const RLIMIT_RTPRIO = 14 +const RLIMIT_RTTIME = 15 +const RLIMIT_SIGPENDING = 11 +const RLIMIT_STACK = 3 +const RLIM_INFINITY = 18446744073709551615 +const RLIM_NLIMITS = 16 +const RLIM_SAVED_CUR = 18446744073709551615 +const RLIM_SAVED_MAX = 18446744073709551615 +const RUSAGE_CHILDREN = -1 +const RUSAGE_SELF = 0 +const RUSAGE_THREAD = 1 +const R_386_16 = 20 +const R_386_32 = 1 +const R_386_32PLT = 11 +const R_386_8 = 22 +const R_386_COPY = 5 +const R_386_GLOB_DAT = 6 +const R_386_GOT32 = 3 +const R_386_GOT32X = 43 +const R_386_GOTOFF = 9 +const R_386_GOTPC = 10 +const R_386_IRELATIVE = 42 +const R_386_JMP_SLOT = 7 +const R_386_NONE = 0 +const R_386_NUM = 44 +const R_386_PC16 = 21 +const R_386_PC32 = 2 +const R_386_PC8 = 23 +const R_386_PLT32 = 4 +const R_386_RELATIVE = 8 +const R_386_SIZE32 = 38 +const R_386_TLS_DESC = 41 +const R_386_TLS_DESC_CALL = 40 +const R_386_TLS_DTPMOD32 = 35 +const R_386_TLS_DTPOFF32 = 36 +const R_386_TLS_GD = 18 +const R_386_TLS_GD_32 = 24 +const R_386_TLS_GD_CALL = 26 +const R_386_TLS_GD_POP = 27 +const R_386_TLS_GD_PUSH = 25 +const R_386_TLS_GOTDESC = 39 +const R_386_TLS_GOTIE = 16 +const R_386_TLS_IE = 15 +const R_386_TLS_IE_32 = 33 +const R_386_TLS_LDM = 19 +const R_386_TLS_LDM_32 = 28 +const R_386_TLS_LDM_CALL = 30 +const R_386_TLS_LDM_POP = 31 +const R_386_TLS_LDM_PUSH = 29 +const R_386_TLS_LDO_32 = 32 +const R_386_TLS_LE = 17 +const R_386_TLS_LE_32 = 34 +const R_386_TLS_TPOFF = 14 +const R_386_TLS_TPOFF32 = 37 +const R_390_12 = 2 +const R_390_16 = 3 +const R_390_20 = 57 +const R_390_32 = 4 +const R_390_64 = 22 +const R_390_8 = 1 +const R_390_COPY = 9 +const R_390_GLOB_DAT = 10 +const R_390_GOT12 = 6 +const R_390_GOT16 = 15 +const R_390_GOT20 = 58 +const R_390_GOT32 = 7 +const R_390_GOT64 = 24 +const R_390_GOTENT = 26 +const R_390_GOTOFF16 = 27 +const R_390_GOTOFF32 = 13 +const R_390_GOTOFF64 = 28 +const R_390_GOTPC = 14 +const R_390_GOTPCDBL = 21 +const R_390_GOTPLT12 = 29 +const R_390_GOTPLT16 = 30 +const R_390_GOTPLT20 = 59 +const R_390_GOTPLT32 = 31 +const R_390_GOTPLT64 = 32 +const R_390_GOTPLTENT = 33 +const R_390_JMP_SLOT = 11 +const R_390_NONE = 0 +const R_390_NUM = 61 +const R_390_PC16 = 16 +const R_390_PC16DBL = 17 +const R_390_PC32 = 5 +const R_390_PC32DBL = 19 +const R_390_PC64 = 23 +const R_390_PLT16DBL = 18 +const R_390_PLT32 = 8 +const R_390_PLT32DBL = 20 +const R_390_PLT64 = 25 +const R_390_PLTOFF16 = 34 +const R_390_PLTOFF32 = 35 +const R_390_PLTOFF64 = 36 +const R_390_RELATIVE = 12 +const R_390_TLS_DTPMOD = 54 +const R_390_TLS_DTPOFF = 55 +const R_390_TLS_GD32 = 40 +const R_390_TLS_GD64 = 41 +const R_390_TLS_GDCALL = 38 +const R_390_TLS_GOTIE12 = 42 +const R_390_TLS_GOTIE20 = 60 +const R_390_TLS_GOTIE32 = 43 +const R_390_TLS_GOTIE64 = 44 +const R_390_TLS_IE32 = 47 +const R_390_TLS_IE64 = 48 +const R_390_TLS_IEENT = 49 +const R_390_TLS_LDCALL = 39 +const R_390_TLS_LDM32 = 45 +const R_390_TLS_LDM64 = 46 +const R_390_TLS_LDO32 = 52 +const R_390_TLS_LDO64 = 53 +const R_390_TLS_LE32 = 50 +const R_390_TLS_LE64 = 51 +const R_390_TLS_LOAD = 37 +const R_390_TLS_TPOFF = 56 +const R_68K_16 = 2 +const R_68K_32 = 1 +const R_68K_8 = 3 +const R_68K_COPY = 19 +const R_68K_GLOB_DAT = 20 +const R_68K_GOT16 = 8 +const R_68K_GOT16O = 11 +const R_68K_GOT32 = 7 +const R_68K_GOT32O = 10 +const R_68K_GOT8 = 9 +const R_68K_GOT8O = 12 +const R_68K_JMP_SLOT = 21 +const R_68K_NONE = 0 +const R_68K_NUM = 43 +const R_68K_PC16 = 5 +const R_68K_PC32 = 4 +const R_68K_PC8 = 6 +const R_68K_PLT16 = 14 +const R_68K_PLT16O = 17 +const R_68K_PLT32 = 13 +const R_68K_PLT32O = 16 +const R_68K_PLT8 = 15 +const R_68K_PLT8O = 18 +const R_68K_RELATIVE = 22 +const R_68K_TLS_DTPMOD32 = 40 +const R_68K_TLS_DTPREL32 = 41 +const R_68K_TLS_GD16 = 26 +const R_68K_TLS_GD32 = 25 +const R_68K_TLS_GD8 = 27 +const R_68K_TLS_IE16 = 35 +const R_68K_TLS_IE32 = 34 +const R_68K_TLS_IE8 = 36 +const R_68K_TLS_LDM16 = 29 +const R_68K_TLS_LDM32 = 28 +const R_68K_TLS_LDM8 = 30 +const R_68K_TLS_LDO16 = 32 +const R_68K_TLS_LDO32 = 31 +const R_68K_TLS_LDO8 = 33 +const R_68K_TLS_LE16 = 38 +const R_68K_TLS_LE32 = 37 +const R_68K_TLS_LE8 = 39 +const R_68K_TLS_TPREL32 = 42 +const R_AARCH64_ABS16 = 259 +const R_AARCH64_ABS32 = 258 +const R_AARCH64_ABS64 = 257 +const R_AARCH64_ADD_ABS_LO12_NC = 277 +const R_AARCH64_ADR_GOT_PAGE = 311 +const R_AARCH64_ADR_PREL_LO21 = 274 +const R_AARCH64_ADR_PREL_PG_HI21 = 275 +const R_AARCH64_ADR_PREL_PG_HI21_NC = 276 +const R_AARCH64_CALL26 = 283 +const R_AARCH64_CONDBR19 = 280 +const R_AARCH64_COPY = 1024 +const R_AARCH64_GLOB_DAT = 1025 +const R_AARCH64_GOTREL32 = 308 +const R_AARCH64_GOTREL64 = 307 +const R_AARCH64_GOT_LD_PREL19 = 309 +const R_AARCH64_JUMP26 = 282 +const R_AARCH64_JUMP_SLOT = 1026 +const R_AARCH64_LD64_GOTOFF_LO15 = 310 +const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +const R_AARCH64_LD64_GOT_LO12_NC = 312 +const R_AARCH64_LDST128_ABS_LO12_NC = 299 +const R_AARCH64_LDST16_ABS_LO12_NC = 284 +const R_AARCH64_LDST32_ABS_LO12_NC = 285 +const R_AARCH64_LDST64_ABS_LO12_NC = 286 +const R_AARCH64_LDST8_ABS_LO12_NC = 278 +const R_AARCH64_LD_PREL_LO19 = 273 +const R_AARCH64_MOVW_GOTOFF_G0 = 300 +const R_AARCH64_MOVW_GOTOFF_G0_NC = 301 +const R_AARCH64_MOVW_GOTOFF_G1 = 302 +const R_AARCH64_MOVW_GOTOFF_G1_NC = 303 +const R_AARCH64_MOVW_GOTOFF_G2 = 304 +const R_AARCH64_MOVW_GOTOFF_G2_NC = 305 +const R_AARCH64_MOVW_GOTOFF_G3 = 306 +const R_AARCH64_MOVW_PREL_G0 = 287 +const R_AARCH64_MOVW_PREL_G0_NC = 288 +const R_AARCH64_MOVW_PREL_G1 = 289 +const R_AARCH64_MOVW_PREL_G1_NC = 290 +const R_AARCH64_MOVW_PREL_G2 = 291 +const R_AARCH64_MOVW_PREL_G2_NC = 292 +const R_AARCH64_MOVW_PREL_G3 = 293 +const R_AARCH64_MOVW_SABS_G0 = 270 +const R_AARCH64_MOVW_SABS_G1 = 271 +const R_AARCH64_MOVW_SABS_G2 = 272 +const R_AARCH64_MOVW_UABS_G0 = 263 +const R_AARCH64_MOVW_UABS_G0_NC = 264 +const R_AARCH64_MOVW_UABS_G1 = 265 +const R_AARCH64_MOVW_UABS_G1_NC = 266 +const R_AARCH64_MOVW_UABS_G2 = 267 +const R_AARCH64_MOVW_UABS_G2_NC = 268 +const R_AARCH64_MOVW_UABS_G3 = 269 +const R_AARCH64_NONE = 0 +const R_AARCH64_P32_ABS32 = 1 +const R_AARCH64_P32_COPY = 180 +const R_AARCH64_P32_GLOB_DAT = 181 +const R_AARCH64_P32_IRELATIVE = 188 +const R_AARCH64_P32_JUMP_SLOT = 182 +const R_AARCH64_P32_RELATIVE = 183 +const R_AARCH64_P32_TLSDESC = 187 +const R_AARCH64_P32_TLS_DTPMOD = 184 +const R_AARCH64_P32_TLS_DTPREL = 185 +const R_AARCH64_P32_TLS_TPREL = 186 +const R_AARCH64_PREL16 = 262 +const R_AARCH64_PREL32 = 261 +const R_AARCH64_PREL64 = 260 +const R_AARCH64_RELATIVE = 1027 +const R_AARCH64_TLSDESC = 1031 +const R_AARCH64_TLSDESC_ADD = 568 +const R_AARCH64_TLSDESC_ADD_LO12 = 564 +const R_AARCH64_TLSDESC_ADR_PAGE21 = 562 +const R_AARCH64_TLSDESC_ADR_PREL21 = 561 +const R_AARCH64_TLSDESC_CALL = 569 +const R_AARCH64_TLSDESC_LD64_LO12 = 563 +const R_AARCH64_TLSDESC_LDR = 567 +const R_AARCH64_TLSDESC_LD_PREL19 = 560 +const R_AARCH64_TLSDESC_OFF_G0_NC = 566 +const R_AARCH64_TLSDESC_OFF_G1 = 565 +const R_AARCH64_TLSGD_ADD_LO12_NC = 514 +const R_AARCH64_TLSGD_ADR_PAGE21 = 513 +const R_AARCH64_TLSGD_ADR_PREL21 = 512 +const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +const R_AARCH64_TLSGD_MOVW_G1 = 515 +const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541 +const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542 +const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539 +const R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530 +const R_AARCH64_TLSLD_ADD_LO12_NC = 519 +const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +const R_AARCH64_TLSLD_ADR_PREL21 = 517 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532 +const R_AARCH64_TLSLD_LD_PREL19 = 522 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525 +const R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523 +const R_AARCH64_TLSLD_MOVW_G0_NC = 521 +const R_AARCH64_TLSLD_MOVW_G1 = 520 +const R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549 +const R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550 +const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553 +const R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547 +const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548 +const R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545 +const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546 +const R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544 +const R_AARCH64_TLS_DTPMOD = 1028 +const R_AARCH64_TLS_DTPMOD64 = 1028 +const R_AARCH64_TLS_DTPREL = 1029 +const R_AARCH64_TLS_DTPREL64 = 1029 +const R_AARCH64_TLS_TPREL = 1030 +const R_AARCH64_TLS_TPREL64 = 1030 +const R_AARCH64_TSTBR14 = 279 +const R_ALPHA_BRADDR = 7 +const R_ALPHA_COPY = 24 +const R_ALPHA_DTPMOD64 = 31 +const R_ALPHA_DTPREL16 = 36 +const R_ALPHA_DTPREL64 = 33 +const R_ALPHA_DTPRELHI = 34 +const R_ALPHA_DTPRELLO = 35 +const R_ALPHA_GLOB_DAT = 25 +const R_ALPHA_GOTDTPREL = 32 +const R_ALPHA_GOTTPREL = 37 +const R_ALPHA_GPDISP = 6 +const R_ALPHA_GPREL16 = 19 +const R_ALPHA_GPREL32 = 3 +const R_ALPHA_GPRELHIGH = 17 +const R_ALPHA_GPRELLOW = 18 +const R_ALPHA_HINT = 8 +const R_ALPHA_JMP_SLOT = 26 +const R_ALPHA_LITERAL = 4 +const R_ALPHA_LITUSE = 5 +const R_ALPHA_NONE = 0 +const R_ALPHA_NUM = 46 +const R_ALPHA_REFLONG = 1 +const R_ALPHA_REFQUAD = 2 +const R_ALPHA_RELATIVE = 27 +const R_ALPHA_SREL16 = 9 +const R_ALPHA_SREL32 = 10 +const R_ALPHA_SREL64 = 11 +const R_ALPHA_TLSGD = 29 +const R_ALPHA_TLS_GD_HI = 28 +const R_ALPHA_TLS_LDM = 30 +const R_ALPHA_TPREL16 = 41 +const R_ALPHA_TPREL64 = 38 +const R_ALPHA_TPRELHI = 39 +const R_ALPHA_TPRELLO = 40 +const R_ARM_ABS12 = 6 +const R_ARM_ABS16 = 5 +const R_ARM_ABS32 = 2 +const R_ARM_ABS32_NOI = 55 +const R_ARM_ABS8 = 8 +const R_ARM_ALU_PCREL_15_8 = 33 +const R_ARM_ALU_PCREL_23_15 = 34 +const R_ARM_ALU_PCREL_7_0 = 32 +const R_ARM_ALU_PC_G0 = 58 +const R_ARM_ALU_PC_G0_NC = 57 +const R_ARM_ALU_PC_G1 = 60 +const R_ARM_ALU_PC_G1_NC = 59 +const R_ARM_ALU_PC_G2 = 61 +const R_ARM_ALU_SBREL_19_12 = 36 +const R_ARM_ALU_SBREL_27_20 = 37 +const R_ARM_ALU_SB_G0 = 71 +const R_ARM_ALU_SB_G0_NC = 70 +const R_ARM_ALU_SB_G1 = 73 +const R_ARM_ALU_SB_G1_NC = 72 +const R_ARM_ALU_SB_G2 = 74 +const R_ARM_AMP_VCALL9 = 12 +const R_ARM_BASE_ABS = 31 +const R_ARM_CALL = 28 +const R_ARM_COPY = 20 +const R_ARM_GLOB_DAT = 21 +const R_ARM_GNU_VTENTRY = 100 +const R_ARM_GNU_VTINHERIT = 101 +const R_ARM_GOT32 = 26 +const R_ARM_GOTOFF = 24 +const R_ARM_GOTOFF12 = 98 +const R_ARM_GOTPC = 25 +const R_ARM_GOTRELAX = 99 +const R_ARM_GOT_ABS = 95 +const R_ARM_GOT_BREL12 = 97 +const R_ARM_GOT_PREL = 96 +const R_ARM_IRELATIVE = 160 +const R_ARM_JUMP24 = 29 +const R_ARM_JUMP_SLOT = 22 +const R_ARM_LDC_PC_G0 = 67 +const R_ARM_LDC_PC_G1 = 68 +const R_ARM_LDC_PC_G2 = 69 +const R_ARM_LDC_SB_G0 = 81 +const R_ARM_LDC_SB_G1 = 82 +const R_ARM_LDC_SB_G2 = 83 +const R_ARM_LDRS_PC_G0 = 64 +const R_ARM_LDRS_PC_G1 = 65 +const R_ARM_LDRS_PC_G2 = 66 +const R_ARM_LDRS_SB_G0 = 78 +const R_ARM_LDRS_SB_G1 = 79 +const R_ARM_LDRS_SB_G2 = 80 +const R_ARM_LDR_PC_G1 = 62 +const R_ARM_LDR_PC_G2 = 63 +const R_ARM_LDR_SBREL_11_0 = 35 +const R_ARM_LDR_SB_G0 = 75 +const R_ARM_LDR_SB_G1 = 76 +const R_ARM_LDR_SB_G2 = 77 +const R_ARM_ME_TOO = 128 +const R_ARM_MOVT_ABS = 44 +const R_ARM_MOVT_BREL = 85 +const R_ARM_MOVT_PREL = 46 +const R_ARM_MOVW_ABS_NC = 43 +const R_ARM_MOVW_BREL = 86 +const R_ARM_MOVW_BREL_NC = 84 +const R_ARM_MOVW_PREL_NC = 45 +const R_ARM_NONE = 0 +const R_ARM_NUM = 256 +const R_ARM_PC13 = 4 +const R_ARM_PC24 = 1 +const R_ARM_PLT32 = 27 +const R_ARM_PLT32_ABS = 94 +const R_ARM_PREL31 = 42 +const R_ARM_RABS22 = 253 +const R_ARM_RBASE = 255 +const R_ARM_REL32 = 3 +const R_ARM_REL32_NOI = 56 +const R_ARM_RELATIVE = 23 +const R_ARM_RPC24 = 254 +const R_ARM_RREL32 = 252 +const R_ARM_RSBREL32 = 250 +const R_ARM_RXPC25 = 249 +const R_ARM_SBREL31 = 39 +const R_ARM_SBREL32 = 9 +const R_ARM_TARGET1 = 38 +const R_ARM_TARGET2 = 41 +const R_ARM_THM_ABS5 = 7 +const R_ARM_THM_ALU_PREL_11_0 = 53 +const R_ARM_THM_GOT_BREL12 = 131 +const R_ARM_THM_JUMP19 = 51 +const R_ARM_THM_JUMP24 = 30 +const R_ARM_THM_JUMP6 = 52 +const R_ARM_THM_MOVT_ABS = 48 +const R_ARM_THM_MOVT_BREL = 88 +const R_ARM_THM_MOVT_PREL = 50 +const R_ARM_THM_MOVW_ABS_NC = 47 +const R_ARM_THM_MOVW_BREL = 89 +const R_ARM_THM_MOVW_BREL_NC = 87 +const R_ARM_THM_MOVW_PREL_NC = 49 +const R_ARM_THM_PC11 = 102 +const R_ARM_THM_PC12 = 54 +const R_ARM_THM_PC22 = 10 +const R_ARM_THM_PC8 = 11 +const R_ARM_THM_PC9 = 103 +const R_ARM_THM_RPC22 = 251 +const R_ARM_THM_SWI8 = 14 +const R_ARM_THM_TLS_CALL = 93 +const R_ARM_THM_TLS_DESCSEQ = 129 +const R_ARM_THM_TLS_DESCSEQ16 = 129 +const R_ARM_THM_TLS_DESCSEQ32 = 130 +const R_ARM_THM_XPC22 = 16 +const R_ARM_TLS_CALL = 91 +const R_ARM_TLS_DESC = 13 +const R_ARM_TLS_DESCSEQ = 92 +const R_ARM_TLS_DTPMOD32 = 17 +const R_ARM_TLS_DTPOFF32 = 18 +const R_ARM_TLS_GD32 = 104 +const R_ARM_TLS_GOTDESC = 90 +const R_ARM_TLS_IE12GP = 111 +const R_ARM_TLS_IE32 = 107 +const R_ARM_TLS_LDM32 = 105 +const R_ARM_TLS_LDO12 = 109 +const R_ARM_TLS_LDO32 = 106 +const R_ARM_TLS_LE12 = 110 +const R_ARM_TLS_LE32 = 108 +const R_ARM_TLS_TPOFF32 = 19 +const R_ARM_V4BX = 40 +const R_ARM_XPC25 = 15 +const R_BPF_MAP_FD = 1 +const R_BPF_NONE = 0 +const R_CKCORE_ADDR32 = 1 +const R_CKCORE_ADDRGOT = 17 +const R_CKCORE_ADDRGOT_HI16 = 36 +const R_CKCORE_ADDRGOT_LO16 = 37 +const R_CKCORE_ADDRPLT = 18 +const R_CKCORE_ADDRPLT_HI16 = 38 +const R_CKCORE_ADDRPLT_LO16 = 39 +const R_CKCORE_ADDR_HI16 = 24 +const R_CKCORE_ADDR_LO16 = 25 +const R_CKCORE_COPY = 10 +const R_CKCORE_DOFFSET_IMM18 = 44 +const R_CKCORE_DOFFSET_IMM18BY2 = 45 +const R_CKCORE_DOFFSET_IMM18BY4 = 46 +const R_CKCORE_DOFFSET_LO16 = 42 +const R_CKCORE_GLOB_DAT = 11 +const R_CKCORE_GOT12 = 30 +const R_CKCORE_GOT32 = 15 +const R_CKCORE_GOTOFF = 13 +const R_CKCORE_GOTOFF_HI16 = 28 +const R_CKCORE_GOTOFF_LO16 = 29 +const R_CKCORE_GOTPC = 14 +const R_CKCORE_GOTPC_HI16 = 26 +const R_CKCORE_GOTPC_LO16 = 27 +const R_CKCORE_GOT_HI16 = 31 +const R_CKCORE_GOT_IMM18BY4 = 48 +const R_CKCORE_GOT_LO16 = 32 +const R_CKCORE_JUMP_SLOT = 12 +const R_CKCORE_NONE = 0 +const R_CKCORE_PCREL32 = 5 +const R_CKCORE_PCRELIMM11BY2 = 3 +const R_CKCORE_PCRELIMM8BY4 = 2 +const R_CKCORE_PCRELJSR_IMM11BY2 = 6 +const R_CKCORE_PCREL_IMM10BY2 = 22 +const R_CKCORE_PCREL_IMM10BY4 = 23 +const R_CKCORE_PCREL_IMM16BY2 = 20 +const R_CKCORE_PCREL_IMM16BY4 = 21 +const R_CKCORE_PCREL_IMM18BY2 = 43 +const R_CKCORE_PCREL_IMM26BY2 = 19 +const R_CKCORE_PCREL_IMM7BY4 = 50 +const R_CKCORE_PCREL_JSR_IMM26BY2 = 40 +const R_CKCORE_PLT12 = 33 +const R_CKCORE_PLT32 = 16 +const R_CKCORE_PLT_HI16 = 34 +const R_CKCORE_PLT_IMM18BY4 = 49 +const R_CKCORE_PLT_LO16 = 35 +const R_CKCORE_RELATIVE = 9 +const R_CKCORE_TLS_DTPMOD32 = 56 +const R_CKCORE_TLS_DTPOFF32 = 57 +const R_CKCORE_TLS_GD32 = 53 +const R_CKCORE_TLS_IE32 = 52 +const R_CKCORE_TLS_LDM32 = 54 +const R_CKCORE_TLS_LDO32 = 55 +const R_CKCORE_TLS_LE32 = 51 +const R_CKCORE_TLS_TPOFF32 = 58 +const R_CKCORE_TOFFSET_LO16 = 41 +const R_CRIS_16 = 2 +const R_CRIS_16_GOT = 13 +const R_CRIS_16_GOTPLT = 15 +const R_CRIS_16_PCREL = 5 +const R_CRIS_32 = 3 +const R_CRIS_32_GOT = 14 +const R_CRIS_32_GOTPLT = 16 +const R_CRIS_32_GOTREL = 17 +const R_CRIS_32_PCREL = 6 +const R_CRIS_32_PLT_GOTREL = 18 +const R_CRIS_32_PLT_PCREL = 19 +const R_CRIS_8 = 1 +const R_CRIS_8_PCREL = 4 +const R_CRIS_COPY = 9 +const R_CRIS_GLOB_DAT = 10 +const R_CRIS_GNU_VTENTRY = 8 +const R_CRIS_GNU_VTINHERIT = 7 +const R_CRIS_JUMP_SLOT = 11 +const R_CRIS_NONE = 0 +const R_CRIS_NUM = 20 +const R_CRIS_RELATIVE = 12 +const R_IA64_COPY = 132 +const R_IA64_DIR32LSB = 37 +const R_IA64_DIR32MSB = 36 +const R_IA64_DIR64LSB = 39 +const R_IA64_DIR64MSB = 38 +const R_IA64_DTPMOD64LSB = 167 +const R_IA64_DTPMOD64MSB = 166 +const R_IA64_DTPREL14 = 177 +const R_IA64_DTPREL22 = 178 +const R_IA64_DTPREL32LSB = 181 +const R_IA64_DTPREL32MSB = 180 +const R_IA64_DTPREL64I = 179 +const R_IA64_DTPREL64LSB = 183 +const R_IA64_DTPREL64MSB = 182 +const R_IA64_FPTR32LSB = 69 +const R_IA64_FPTR32MSB = 68 +const R_IA64_FPTR64I = 67 +const R_IA64_FPTR64LSB = 71 +const R_IA64_FPTR64MSB = 70 +const R_IA64_GPREL22 = 42 +const R_IA64_GPREL32LSB = 45 +const R_IA64_GPREL32MSB = 44 +const R_IA64_GPREL64I = 43 +const R_IA64_GPREL64LSB = 47 +const R_IA64_GPREL64MSB = 46 +const R_IA64_IMM14 = 33 +const R_IA64_IMM22 = 34 +const R_IA64_IMM64 = 35 +const R_IA64_IPLTLSB = 129 +const R_IA64_IPLTMSB = 128 +const R_IA64_LDXMOV = 135 +const R_IA64_LTOFF22 = 50 +const R_IA64_LTOFF22X = 134 +const R_IA64_LTOFF64I = 51 +const R_IA64_LTOFF_DTPMOD22 = 170 +const R_IA64_LTOFF_DTPREL22 = 186 +const R_IA64_LTOFF_FPTR22 = 82 +const R_IA64_LTOFF_FPTR32LSB = 85 +const R_IA64_LTOFF_FPTR32MSB = 84 +const R_IA64_LTOFF_FPTR64I = 83 +const R_IA64_LTOFF_FPTR64LSB = 87 +const R_IA64_LTOFF_FPTR64MSB = 86 +const R_IA64_LTOFF_TPREL22 = 154 +const R_IA64_LTV32LSB = 117 +const R_IA64_LTV32MSB = 116 +const R_IA64_LTV64LSB = 119 +const R_IA64_LTV64MSB = 118 +const R_IA64_NONE = 0 +const R_IA64_PCREL21B = 73 +const R_IA64_PCREL21BI = 121 +const R_IA64_PCREL21F = 75 +const R_IA64_PCREL21M = 74 +const R_IA64_PCREL22 = 122 +const R_IA64_PCREL32LSB = 77 +const R_IA64_PCREL32MSB = 76 +const R_IA64_PCREL60B = 72 +const R_IA64_PCREL64I = 123 +const R_IA64_PCREL64LSB = 79 +const R_IA64_PCREL64MSB = 78 +const R_IA64_PLTOFF22 = 58 +const R_IA64_PLTOFF64I = 59 +const R_IA64_PLTOFF64LSB = 63 +const R_IA64_PLTOFF64MSB = 62 +const R_IA64_REL32LSB = 109 +const R_IA64_REL32MSB = 108 +const R_IA64_REL64LSB = 111 +const R_IA64_REL64MSB = 110 +const R_IA64_SECREL32LSB = 101 +const R_IA64_SECREL32MSB = 100 +const R_IA64_SECREL64LSB = 103 +const R_IA64_SECREL64MSB = 102 +const R_IA64_SEGREL32LSB = 93 +const R_IA64_SEGREL32MSB = 92 +const R_IA64_SEGREL64LSB = 95 +const R_IA64_SEGREL64MSB = 94 +const R_IA64_SUB = 133 +const R_IA64_TPREL14 = 145 +const R_IA64_TPREL22 = 146 +const R_IA64_TPREL64I = 147 +const R_IA64_TPREL64LSB = 151 +const R_IA64_TPREL64MSB = 150 +const R_LARCH_32 = 1 +const R_LARCH_32_PCREL = 99 +const R_LARCH_64 = 2 +const R_LARCH_ABS64_HI12 = 70 +const R_LARCH_ABS64_LO20 = 69 +const R_LARCH_ABS_HI20 = 67 +const R_LARCH_ABS_LO12 = 68 +const R_LARCH_ADD16 = 48 +const R_LARCH_ADD24 = 49 +const R_LARCH_ADD32 = 50 +const R_LARCH_ADD64 = 51 +const R_LARCH_ADD8 = 47 +const R_LARCH_B16 = 64 +const R_LARCH_B21 = 65 +const R_LARCH_B26 = 66 +const R_LARCH_COPY = 4 +const R_LARCH_GNU_VTENTRY = 58 +const R_LARCH_GNU_VTINHERIT = 57 +const R_LARCH_GOT64_HI12 = 82 +const R_LARCH_GOT64_LO20 = 81 +const R_LARCH_GOT64_PC_HI12 = 78 +const R_LARCH_GOT64_PC_LO20 = 77 +const R_LARCH_GOT_HI20 = 79 +const R_LARCH_GOT_LO12 = 80 +const R_LARCH_GOT_PC_HI20 = 75 +const R_LARCH_GOT_PC_LO12 = 76 +const R_LARCH_IRELATIVE = 12 +const R_LARCH_JUMP_SLOT = 5 +const R_LARCH_MARK_LA = 20 +const R_LARCH_MARK_PCREL = 21 +const R_LARCH_NONE = 0 +const R_LARCH_PCALA64_HI12 = 74 +const R_LARCH_PCALA64_LO20 = 73 +const R_LARCH_PCALA_HI20 = 71 +const R_LARCH_PCALA_LO12 = 72 +const R_LARCH_RELATIVE = 3 +const R_LARCH_RELAX = 100 +const R_LARCH_SOP_ADD = 35 +const R_LARCH_SOP_AND = 36 +const R_LARCH_SOP_ASSERT = 30 +const R_LARCH_SOP_IF_ELSE = 37 +const R_LARCH_SOP_NOT = 31 +const R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45 +const R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44 +const R_LARCH_SOP_POP_32_S_10_12 = 40 +const R_LARCH_SOP_POP_32_S_10_16 = 41 +const R_LARCH_SOP_POP_32_S_10_16_S2 = 42 +const R_LARCH_SOP_POP_32_S_10_5 = 38 +const R_LARCH_SOP_POP_32_S_5_20 = 43 +const R_LARCH_SOP_POP_32_U = 46 +const R_LARCH_SOP_POP_32_U_10_12 = 39 +const R_LARCH_SOP_PUSH_ABSOLUTE = 23 +const R_LARCH_SOP_PUSH_DUP = 24 +const R_LARCH_SOP_PUSH_GPREL = 25 +const R_LARCH_SOP_PUSH_PCREL = 22 +const R_LARCH_SOP_PUSH_PLT_PCREL = 29 +const R_LARCH_SOP_PUSH_TLS_GD = 28 +const R_LARCH_SOP_PUSH_TLS_GOT = 27 +const R_LARCH_SOP_PUSH_TLS_TPREL = 26 +const R_LARCH_SOP_SL = 33 +const R_LARCH_SOP_SR = 34 +const R_LARCH_SOP_SUB = 32 +const R_LARCH_SUB16 = 53 +const R_LARCH_SUB24 = 54 +const R_LARCH_SUB32 = 55 +const R_LARCH_SUB64 = 56 +const R_LARCH_SUB8 = 52 +const R_LARCH_TLS_DTPMOD32 = 6 +const R_LARCH_TLS_DTPMOD64 = 7 +const R_LARCH_TLS_DTPREL32 = 8 +const R_LARCH_TLS_DTPREL64 = 9 +const R_LARCH_TLS_GD_HI20 = 98 +const R_LARCH_TLS_GD_PC_HI20 = 97 +const R_LARCH_TLS_IE64_HI12 = 94 +const R_LARCH_TLS_IE64_LO20 = 93 +const R_LARCH_TLS_IE64_PC_HI12 = 90 +const R_LARCH_TLS_IE64_PC_LO20 = 89 +const R_LARCH_TLS_IE_HI20 = 91 +const R_LARCH_TLS_IE_LO12 = 92 +const R_LARCH_TLS_IE_PC_HI20 = 87 +const R_LARCH_TLS_IE_PC_LO12 = 88 +const R_LARCH_TLS_LD_HI20 = 96 +const R_LARCH_TLS_LD_PC_HI20 = 95 +const R_LARCH_TLS_LE64_HI12 = 86 +const R_LARCH_TLS_LE64_LO20 = 85 +const R_LARCH_TLS_LE_HI20 = 83 +const R_LARCH_TLS_LE_LO12 = 84 +const R_LARCH_TLS_TPREL32 = 10 +const R_LARCH_TLS_TPREL64 = 11 +const R_M32R_10_PCREL = 4 +const R_M32R_10_PCREL_RELA = 36 +const R_M32R_16 = 1 +const R_M32R_16_RELA = 33 +const R_M32R_18_PCREL = 5 +const R_M32R_18_PCREL_RELA = 37 +const R_M32R_24 = 3 +const R_M32R_24_RELA = 35 +const R_M32R_26_PCREL = 6 +const R_M32R_26_PCREL_RELA = 38 +const R_M32R_26_PLTREL = 49 +const R_M32R_32 = 2 +const R_M32R_32_RELA = 34 +const R_M32R_COPY = 50 +const R_M32R_GLOB_DAT = 51 +const R_M32R_GNU_VTENTRY = 12 +const R_M32R_GNU_VTINHERIT = 11 +const R_M32R_GOT16_HI_SLO = 57 +const R_M32R_GOT16_HI_ULO = 56 +const R_M32R_GOT16_LO = 58 +const R_M32R_GOT24 = 48 +const R_M32R_GOTOFF = 54 +const R_M32R_GOTOFF_HI_SLO = 63 +const R_M32R_GOTOFF_HI_ULO = 62 +const R_M32R_GOTOFF_LO = 64 +const R_M32R_GOTPC24 = 55 +const R_M32R_GOTPC_HI_SLO = 60 +const R_M32R_GOTPC_HI_ULO = 59 +const R_M32R_GOTPC_LO = 61 +const R_M32R_HI16_SLO = 8 +const R_M32R_HI16_SLO_RELA = 40 +const R_M32R_HI16_ULO = 7 +const R_M32R_HI16_ULO_RELA = 39 +const R_M32R_JMP_SLOT = 52 +const R_M32R_LO16 = 9 +const R_M32R_LO16_RELA = 41 +const R_M32R_NONE = 0 +const R_M32R_NUM = 256 +const R_M32R_REL32 = 45 +const R_M32R_RELATIVE = 53 +const R_M32R_RELA_GNU_VTENTRY = 44 +const R_M32R_RELA_GNU_VTINHERIT = 43 +const R_M32R_SDA16 = 10 +const R_M32R_SDA16_RELA = 42 +const R_MICROBLAZE_32 = 1 +const R_MICROBLAZE_32_LO = 6 +const R_MICROBLAZE_32_PCREL = 2 +const R_MICROBLAZE_32_PCREL_LO = 4 +const R_MICROBLAZE_32_SYM_OP_SYM = 10 +const R_MICROBLAZE_64 = 5 +const R_MICROBLAZE_64_NONE = 9 +const R_MICROBLAZE_64_PCREL = 3 +const R_MICROBLAZE_COPY = 21 +const R_MICROBLAZE_GLOB_DAT = 18 +const R_MICROBLAZE_GNU_VTENTRY = 12 +const R_MICROBLAZE_GNU_VTINHERIT = 11 +const R_MICROBLAZE_GOTOFF_32 = 20 +const R_MICROBLAZE_GOTOFF_64 = 19 +const R_MICROBLAZE_GOTPC_64 = 13 +const R_MICROBLAZE_GOT_64 = 14 +const R_MICROBLAZE_JUMP_SLOT = 17 +const R_MICROBLAZE_NONE = 0 +const R_MICROBLAZE_PLT_64 = 15 +const R_MICROBLAZE_REL = 16 +const R_MICROBLAZE_SRO32 = 7 +const R_MICROBLAZE_SRW32 = 8 +const R_MICROBLAZE_TLS = 22 +const R_MICROBLAZE_TLSDTPMOD32 = 25 +const R_MICROBLAZE_TLSDTPREL32 = 26 +const R_MICROBLAZE_TLSDTPREL64 = 27 +const R_MICROBLAZE_TLSGD = 23 +const R_MICROBLAZE_TLSGOTTPREL32 = 28 +const R_MICROBLAZE_TLSLD = 24 +const R_MICROBLAZE_TLSTPREL32 = 29 +const R_MIPS_16 = 1 +const R_MIPS_26 = 4 +const R_MIPS_32 = 2 +const R_MIPS_64 = 18 +const R_MIPS_ADD_IMMEDIATE = 34 +const R_MIPS_CALL16 = 11 +const R_MIPS_CALL_HI16 = 30 +const R_MIPS_CALL_LO16 = 31 +const R_MIPS_COPY = 126 +const R_MIPS_DELETE = 27 +const R_MIPS_GLOB_DAT = 51 +const R_MIPS_GOT16 = 9 +const R_MIPS_GOT_DISP = 19 +const R_MIPS_GOT_HI16 = 22 +const R_MIPS_GOT_LO16 = 23 +const R_MIPS_GOT_OFST = 21 +const R_MIPS_GOT_PAGE = 20 +const R_MIPS_GPREL16 = 7 +const R_MIPS_GPREL32 = 12 +const R_MIPS_HI16 = 5 +const R_MIPS_HIGHER = 28 +const R_MIPS_HIGHEST = 29 +const R_MIPS_INSERT_A = 25 +const R_MIPS_INSERT_B = 26 +const R_MIPS_JALR = 37 +const R_MIPS_JUMP_SLOT = 127 +const R_MIPS_LITERAL = 8 +const R_MIPS_LO16 = 6 +const R_MIPS_NONE = 0 +const R_MIPS_NUM = 128 +const R_MIPS_PC16 = 10 +const R_MIPS_PJUMP = 35 +const R_MIPS_REL16 = 33 +const R_MIPS_REL32 = 3 +const R_MIPS_RELGOT = 36 +const R_MIPS_SCN_DISP = 32 +const R_MIPS_SHIFT5 = 16 +const R_MIPS_SHIFT6 = 17 +const R_MIPS_SUB = 24 +const R_MIPS_TLS_DTPMOD32 = 38 +const R_MIPS_TLS_DTPMOD64 = 40 +const R_MIPS_TLS_DTPREL32 = 39 +const R_MIPS_TLS_DTPREL64 = 41 +const R_MIPS_TLS_DTPREL_HI16 = 44 +const R_MIPS_TLS_DTPREL_LO16 = 45 +const R_MIPS_TLS_GD = 42 +const R_MIPS_TLS_GOTTPREL = 46 +const R_MIPS_TLS_LDM = 43 +const R_MIPS_TLS_TPREL32 = 47 +const R_MIPS_TLS_TPREL64 = 48 +const R_MIPS_TLS_TPREL_HI16 = 49 +const R_MIPS_TLS_TPREL_LO16 = 50 +const R_MN10300_16 = 2 +const R_MN10300_24 = 9 +const R_MN10300_32 = 1 +const R_MN10300_8 = 3 +const R_MN10300_COPY = 20 +const R_MN10300_GLOB_DAT = 21 +const R_MN10300_GNU_VTENTRY = 8 +const R_MN10300_GNU_VTINHERIT = 7 +const R_MN10300_GOT16 = 19 +const R_MN10300_GOT24 = 18 +const R_MN10300_GOT32 = 17 +const R_MN10300_GOTOFF16 = 14 +const R_MN10300_GOTOFF24 = 13 +const R_MN10300_GOTOFF32 = 12 +const R_MN10300_GOTPC16 = 11 +const R_MN10300_GOTPC32 = 10 +const R_MN10300_JMP_SLOT = 22 +const R_MN10300_NONE = 0 +const R_MN10300_NUM = 24 +const R_MN10300_PCREL16 = 5 +const R_MN10300_PCREL32 = 4 +const R_MN10300_PCREL8 = 6 +const R_MN10300_PLT16 = 16 +const R_MN10300_PLT32 = 15 +const R_MN10300_RELATIVE = 23 +const R_NIOS2_ALIGN = 21 +const R_NIOS2_BFD_RELOC_16 = 13 +const R_NIOS2_BFD_RELOC_32 = 12 +const R_NIOS2_BFD_RELOC_8 = 14 +const R_NIOS2_CACHE_OPX = 6 +const R_NIOS2_CALL16 = 23 +const R_NIOS2_CALL26 = 4 +const R_NIOS2_CALL26_NOAT = 41 +const R_NIOS2_CALLR = 20 +const R_NIOS2_CALL_HA = 45 +const R_NIOS2_CALL_LO = 44 +const R_NIOS2_CJMP = 19 +const R_NIOS2_COPY = 36 +const R_NIOS2_GLOB_DAT = 37 +const R_NIOS2_GNU_VTENTRY = 17 +const R_NIOS2_GNU_VTINHERIT = 16 +const R_NIOS2_GOT16 = 22 +const R_NIOS2_GOTOFF = 40 +const R_NIOS2_GOTOFF_HA = 25 +const R_NIOS2_GOTOFF_LO = 24 +const R_NIOS2_GOT_HA = 43 +const R_NIOS2_GOT_LO = 42 +const R_NIOS2_GPREL = 15 +const R_NIOS2_HI16 = 9 +const R_NIOS2_HIADJ16 = 11 +const R_NIOS2_IMM5 = 5 +const R_NIOS2_IMM6 = 7 +const R_NIOS2_IMM8 = 8 +const R_NIOS2_JUMP_SLOT = 38 +const R_NIOS2_LO16 = 10 +const R_NIOS2_NONE = 0 +const R_NIOS2_PCREL16 = 3 +const R_NIOS2_PCREL_HA = 27 +const R_NIOS2_PCREL_LO = 26 +const R_NIOS2_RELATIVE = 39 +const R_NIOS2_S16 = 1 +const R_NIOS2_TLS_DTPMOD = 33 +const R_NIOS2_TLS_DTPREL = 34 +const R_NIOS2_TLS_GD16 = 28 +const R_NIOS2_TLS_IE16 = 31 +const R_NIOS2_TLS_LDM16 = 29 +const R_NIOS2_TLS_LDO16 = 30 +const R_NIOS2_TLS_LE16 = 32 +const R_NIOS2_TLS_TPREL = 35 +const R_NIOS2_U16 = 2 +const R_NIOS2_UJMP = 18 +const R_OR1K_16 = 2 +const R_OR1K_16_PCREL = 10 +const R_OR1K_32 = 1 +const R_OR1K_32_PCREL = 9 +const R_OR1K_8 = 3 +const R_OR1K_8_PCREL = 11 +const R_OR1K_COPY = 18 +const R_OR1K_GLOB_DAT = 19 +const R_OR1K_GNU_VTENTRY = 7 +const R_OR1K_GNU_VTINHERIT = 8 +const R_OR1K_GOT16 = 14 +const R_OR1K_GOTOFF_HI16 = 16 +const R_OR1K_GOTOFF_LO16 = 17 +const R_OR1K_GOTPC_HI16 = 12 +const R_OR1K_GOTPC_LO16 = 13 +const R_OR1K_HI_16_IN_INSN = 5 +const R_OR1K_INSN_REL_26 = 6 +const R_OR1K_JMP_SLOT = 20 +const R_OR1K_LO_16_IN_INSN = 4 +const R_OR1K_NONE = 0 +const R_OR1K_PLT26 = 15 +const R_OR1K_RELATIVE = 21 +const R_OR1K_TLS_DTPMOD = 34 +const R_OR1K_TLS_DTPOFF = 33 +const R_OR1K_TLS_GD_HI16 = 22 +const R_OR1K_TLS_GD_LO16 = 23 +const R_OR1K_TLS_IE_HI16 = 28 +const R_OR1K_TLS_IE_LO16 = 29 +const R_OR1K_TLS_LDM_HI16 = 24 +const R_OR1K_TLS_LDM_LO16 = 25 +const R_OR1K_TLS_LDO_HI16 = 26 +const R_OR1K_TLS_LDO_LO16 = 27 +const R_OR1K_TLS_LE_HI16 = 30 +const R_OR1K_TLS_LE_LO16 = 31 +const R_OR1K_TLS_TPOFF = 32 +const R_PARISC_COPY = 128 +const R_PARISC_DIR14DR = 84 +const R_PARISC_DIR14R = 6 +const R_PARISC_DIR14WR = 83 +const R_PARISC_DIR16DF = 87 +const R_PARISC_DIR16F = 85 +const R_PARISC_DIR16WF = 86 +const R_PARISC_DIR17F = 4 +const R_PARISC_DIR17R = 3 +const R_PARISC_DIR21L = 2 +const R_PARISC_DIR32 = 1 +const R_PARISC_DIR64 = 80 +const R_PARISC_DPREL14R = 22 +const R_PARISC_DPREL21L = 18 +const R_PARISC_EPLT = 130 +const R_PARISC_FPTR64 = 64 +const R_PARISC_GNU_VTENTRY = 232 +const R_PARISC_GNU_VTINHERIT = 233 +const R_PARISC_GPREL14DR = 92 +const R_PARISC_GPREL14R = 30 +const R_PARISC_GPREL14WR = 91 +const R_PARISC_GPREL16DF = 95 +const R_PARISC_GPREL16F = 93 +const R_PARISC_GPREL16WF = 94 +const R_PARISC_GPREL21L = 26 +const R_PARISC_GPREL64 = 88 +const R_PARISC_HIRESERVE = 255 +const R_PARISC_IPLT = 129 +const R_PARISC_LORESERVE = 128 +const R_PARISC_LTOFF14DR = 100 +const R_PARISC_LTOFF14R = 38 +const R_PARISC_LTOFF14WR = 99 +const R_PARISC_LTOFF16DF = 103 +const R_PARISC_LTOFF16F = 101 +const R_PARISC_LTOFF16WF = 102 +const R_PARISC_LTOFF21L = 34 +const R_PARISC_LTOFF64 = 96 +const R_PARISC_LTOFF_FPTR14DR = 124 +const R_PARISC_LTOFF_FPTR14R = 62 +const R_PARISC_LTOFF_FPTR14WR = 123 +const R_PARISC_LTOFF_FPTR16DF = 127 +const R_PARISC_LTOFF_FPTR16F = 125 +const R_PARISC_LTOFF_FPTR16WF = 126 +const R_PARISC_LTOFF_FPTR21L = 58 +const R_PARISC_LTOFF_FPTR32 = 57 +const R_PARISC_LTOFF_FPTR64 = 120 +const R_PARISC_LTOFF_TP14DR = 228 +const R_PARISC_LTOFF_TP14F = 167 +const R_PARISC_LTOFF_TP14R = 166 +const R_PARISC_LTOFF_TP14WR = 227 +const R_PARISC_LTOFF_TP16DF = 231 +const R_PARISC_LTOFF_TP16F = 229 +const R_PARISC_LTOFF_TP16WF = 230 +const R_PARISC_LTOFF_TP21L = 162 +const R_PARISC_LTOFF_TP64 = 224 +const R_PARISC_NONE = 0 +const R_PARISC_PCREL14DR = 76 +const R_PARISC_PCREL14R = 14 +const R_PARISC_PCREL14WR = 75 +const R_PARISC_PCREL16DF = 79 +const R_PARISC_PCREL16F = 77 +const R_PARISC_PCREL16WF = 78 +const R_PARISC_PCREL17F = 12 +const R_PARISC_PCREL17R = 11 +const R_PARISC_PCREL21L = 10 +const R_PARISC_PCREL22F = 74 +const R_PARISC_PCREL32 = 9 +const R_PARISC_PCREL64 = 72 +const R_PARISC_PLABEL14R = 70 +const R_PARISC_PLABEL21L = 66 +const R_PARISC_PLABEL32 = 65 +const R_PARISC_PLTOFF14DR = 116 +const R_PARISC_PLTOFF14R = 54 +const R_PARISC_PLTOFF14WR = 115 +const R_PARISC_PLTOFF16DF = 119 +const R_PARISC_PLTOFF16F = 117 +const R_PARISC_PLTOFF16WF = 118 +const R_PARISC_PLTOFF21L = 50 +const R_PARISC_SECREL32 = 41 +const R_PARISC_SECREL64 = 104 +const R_PARISC_SEGBASE = 48 +const R_PARISC_SEGREL32 = 49 +const R_PARISC_SEGREL64 = 112 +const R_PARISC_TLS_DTPMOD32 = 242 +const R_PARISC_TLS_DTPMOD64 = 243 +const R_PARISC_TLS_DTPOFF32 = 244 +const R_PARISC_TLS_DTPOFF64 = 245 +const R_PARISC_TLS_GD14R = 235 +const R_PARISC_TLS_GD21L = 234 +const R_PARISC_TLS_GDCALL = 236 +const R_PARISC_TLS_IE14R = 166 +const R_PARISC_TLS_IE21L = 162 +const R_PARISC_TLS_LDM14R = 238 +const R_PARISC_TLS_LDM21L = 237 +const R_PARISC_TLS_LDMCALL = 239 +const R_PARISC_TLS_LDO14R = 241 +const R_PARISC_TLS_LDO21L = 240 +const R_PARISC_TLS_LE14R = 158 +const R_PARISC_TLS_LE21L = 154 +const R_PARISC_TLS_TPREL32 = 153 +const R_PARISC_TLS_TPREL64 = 216 +const R_PARISC_TPREL14DR = 220 +const R_PARISC_TPREL14R = 158 +const R_PARISC_TPREL14WR = 219 +const R_PARISC_TPREL16DF = 223 +const R_PARISC_TPREL16F = 221 +const R_PARISC_TPREL16WF = 222 +const R_PARISC_TPREL21L = 154 +const R_PARISC_TPREL32 = 153 +const R_PARISC_TPREL64 = 216 +const R_PPC64_ADDR14 = 7 +const R_PPC64_ADDR14_BRNTAKEN = 9 +const R_PPC64_ADDR14_BRTAKEN = 8 +const R_PPC64_ADDR16 = 3 +const R_PPC64_ADDR16_DS = 56 +const R_PPC64_ADDR16_HA = 6 +const R_PPC64_ADDR16_HI = 5 +const R_PPC64_ADDR16_HIGH = 110 +const R_PPC64_ADDR16_HIGHA = 111 +const R_PPC64_ADDR16_HIGHER = 39 +const R_PPC64_ADDR16_HIGHERA = 40 +const R_PPC64_ADDR16_HIGHEST = 41 +const R_PPC64_ADDR16_HIGHESTA = 42 +const R_PPC64_ADDR16_LO = 4 +const R_PPC64_ADDR16_LO_DS = 57 +const R_PPC64_ADDR24 = 2 +const R_PPC64_ADDR30 = 37 +const R_PPC64_ADDR32 = 1 +const R_PPC64_ADDR64 = 38 +const R_PPC64_COPY = 19 +const R_PPC64_DTPMOD64 = 68 +const R_PPC64_DTPREL16 = 74 +const R_PPC64_DTPREL16_DS = 101 +const R_PPC64_DTPREL16_HA = 77 +const R_PPC64_DTPREL16_HI = 76 +const R_PPC64_DTPREL16_HIGH = 114 +const R_PPC64_DTPREL16_HIGHA = 115 +const R_PPC64_DTPREL16_HIGHER = 103 +const R_PPC64_DTPREL16_HIGHERA = 104 +const R_PPC64_DTPREL16_HIGHEST = 105 +const R_PPC64_DTPREL16_HIGHESTA = 106 +const R_PPC64_DTPREL16_LO = 75 +const R_PPC64_DTPREL16_LO_DS = 102 +const R_PPC64_DTPREL64 = 78 +const R_PPC64_GLOB_DAT = 20 +const R_PPC64_GOT16 = 14 +const R_PPC64_GOT16_DS = 58 +const R_PPC64_GOT16_HA = 17 +const R_PPC64_GOT16_HI = 16 +const R_PPC64_GOT16_LO = 15 +const R_PPC64_GOT16_LO_DS = 59 +const R_PPC64_GOT_DTPREL16_DS = 91 +const R_PPC64_GOT_DTPREL16_HA = 94 +const R_PPC64_GOT_DTPREL16_HI = 93 +const R_PPC64_GOT_DTPREL16_LO_DS = 92 +const R_PPC64_GOT_TLSGD16 = 79 +const R_PPC64_GOT_TLSGD16_HA = 82 +const R_PPC64_GOT_TLSGD16_HI = 81 +const R_PPC64_GOT_TLSGD16_LO = 80 +const R_PPC64_GOT_TLSLD16 = 83 +const R_PPC64_GOT_TLSLD16_HA = 86 +const R_PPC64_GOT_TLSLD16_HI = 85 +const R_PPC64_GOT_TLSLD16_LO = 84 +const R_PPC64_GOT_TPREL16_DS = 87 +const R_PPC64_GOT_TPREL16_HA = 90 +const R_PPC64_GOT_TPREL16_HI = 89 +const R_PPC64_GOT_TPREL16_LO_DS = 88 +const R_PPC64_IRELATIVE = 248 +const R_PPC64_JMP_IREL = 247 +const R_PPC64_JMP_SLOT = 21 +const R_PPC64_NONE = 0 +const R_PPC64_PLT16_HA = 31 +const R_PPC64_PLT16_HI = 30 +const R_PPC64_PLT16_LO = 29 +const R_PPC64_PLT16_LO_DS = 60 +const R_PPC64_PLT32 = 27 +const R_PPC64_PLT64 = 45 +const R_PPC64_PLTGOT16 = 52 +const R_PPC64_PLTGOT16_DS = 65 +const R_PPC64_PLTGOT16_HA = 55 +const R_PPC64_PLTGOT16_HI = 54 +const R_PPC64_PLTGOT16_LO = 53 +const R_PPC64_PLTGOT16_LO_DS = 66 +const R_PPC64_PLTREL32 = 28 +const R_PPC64_PLTREL64 = 46 +const R_PPC64_REL14 = 11 +const R_PPC64_REL14_BRNTAKEN = 13 +const R_PPC64_REL14_BRTAKEN = 12 +const R_PPC64_REL16 = 249 +const R_PPC64_REL16_HA = 252 +const R_PPC64_REL16_HI = 251 +const R_PPC64_REL16_LO = 250 +const R_PPC64_REL24 = 10 +const R_PPC64_REL32 = 26 +const R_PPC64_REL64 = 44 +const R_PPC64_RELATIVE = 22 +const R_PPC64_SECTOFF = 33 +const R_PPC64_SECTOFF_DS = 61 +const R_PPC64_SECTOFF_HA = 36 +const R_PPC64_SECTOFF_HI = 35 +const R_PPC64_SECTOFF_LO = 34 +const R_PPC64_SECTOFF_LO_DS = 62 +const R_PPC64_TLS = 67 +const R_PPC64_TLSGD = 107 +const R_PPC64_TLSLD = 108 +const R_PPC64_TOC = 51 +const R_PPC64_TOC16 = 47 +const R_PPC64_TOC16_DS = 63 +const R_PPC64_TOC16_HA = 50 +const R_PPC64_TOC16_HI = 49 +const R_PPC64_TOC16_LO = 48 +const R_PPC64_TOC16_LO_DS = 64 +const R_PPC64_TOCSAVE = 109 +const R_PPC64_TPREL16 = 69 +const R_PPC64_TPREL16_DS = 95 +const R_PPC64_TPREL16_HA = 72 +const R_PPC64_TPREL16_HI = 71 +const R_PPC64_TPREL16_HIGH = 112 +const R_PPC64_TPREL16_HIGHA = 113 +const R_PPC64_TPREL16_HIGHER = 97 +const R_PPC64_TPREL16_HIGHERA = 98 +const R_PPC64_TPREL16_HIGHEST = 99 +const R_PPC64_TPREL16_HIGHESTA = 100 +const R_PPC64_TPREL16_LO = 70 +const R_PPC64_TPREL16_LO_DS = 96 +const R_PPC64_TPREL64 = 73 +const R_PPC64_UADDR16 = 25 +const R_PPC64_UADDR32 = 24 +const R_PPC64_UADDR64 = 43 +const R_PPC_ADDR14 = 7 +const R_PPC_ADDR14_BRNTAKEN = 9 +const R_PPC_ADDR14_BRTAKEN = 8 +const R_PPC_ADDR16 = 3 +const R_PPC_ADDR16_HA = 6 +const R_PPC_ADDR16_HI = 5 +const R_PPC_ADDR16_LO = 4 +const R_PPC_ADDR24 = 2 +const R_PPC_ADDR32 = 1 +const R_PPC_COPY = 19 +const R_PPC_DIAB_RELSDA_HA = 185 +const R_PPC_DIAB_RELSDA_HI = 184 +const R_PPC_DIAB_RELSDA_LO = 183 +const R_PPC_DIAB_SDA21_HA = 182 +const R_PPC_DIAB_SDA21_HI = 181 +const R_PPC_DIAB_SDA21_LO = 180 +const R_PPC_DTPMOD32 = 68 +const R_PPC_DTPREL16 = 74 +const R_PPC_DTPREL16_HA = 77 +const R_PPC_DTPREL16_HI = 76 +const R_PPC_DTPREL16_LO = 75 +const R_PPC_DTPREL32 = 78 +const R_PPC_EMB_BIT_FLD = 115 +const R_PPC_EMB_MRKREF = 110 +const R_PPC_EMB_NADDR16 = 102 +const R_PPC_EMB_NADDR16_HA = 105 +const R_PPC_EMB_NADDR16_HI = 104 +const R_PPC_EMB_NADDR16_LO = 103 +const R_PPC_EMB_NADDR32 = 101 +const R_PPC_EMB_RELSDA = 116 +const R_PPC_EMB_RELSEC16 = 111 +const R_PPC_EMB_RELST_HA = 114 +const R_PPC_EMB_RELST_HI = 113 +const R_PPC_EMB_RELST_LO = 112 +const R_PPC_EMB_SDA21 = 109 +const R_PPC_EMB_SDA2I16 = 107 +const R_PPC_EMB_SDA2REL = 108 +const R_PPC_EMB_SDAI16 = 106 +const R_PPC_GLOB_DAT = 20 +const R_PPC_GOT16 = 14 +const R_PPC_GOT16_HA = 17 +const R_PPC_GOT16_HI = 16 +const R_PPC_GOT16_LO = 15 +const R_PPC_GOT_DTPREL16 = 91 +const R_PPC_GOT_DTPREL16_HA = 94 +const R_PPC_GOT_DTPREL16_HI = 93 +const R_PPC_GOT_DTPREL16_LO = 92 +const R_PPC_GOT_TLSGD16 = 79 +const R_PPC_GOT_TLSGD16_HA = 82 +const R_PPC_GOT_TLSGD16_HI = 81 +const R_PPC_GOT_TLSGD16_LO = 80 +const R_PPC_GOT_TLSLD16 = 83 +const R_PPC_GOT_TLSLD16_HA = 86 +const R_PPC_GOT_TLSLD16_HI = 85 +const R_PPC_GOT_TLSLD16_LO = 84 +const R_PPC_GOT_TPREL16 = 87 +const R_PPC_GOT_TPREL16_HA = 90 +const R_PPC_GOT_TPREL16_HI = 89 +const R_PPC_GOT_TPREL16_LO = 88 +const R_PPC_IRELATIVE = 248 +const R_PPC_JMP_SLOT = 21 +const R_PPC_LOCAL24PC = 23 +const R_PPC_NONE = 0 +const R_PPC_PLT16_HA = 31 +const R_PPC_PLT16_HI = 30 +const R_PPC_PLT16_LO = 29 +const R_PPC_PLT32 = 27 +const R_PPC_PLTREL24 = 18 +const R_PPC_PLTREL32 = 28 +const R_PPC_REL14 = 11 +const R_PPC_REL14_BRNTAKEN = 13 +const R_PPC_REL14_BRTAKEN = 12 +const R_PPC_REL16 = 249 +const R_PPC_REL16_HA = 252 +const R_PPC_REL16_HI = 251 +const R_PPC_REL16_LO = 250 +const R_PPC_REL24 = 10 +const R_PPC_REL32 = 26 +const R_PPC_RELATIVE = 22 +const R_PPC_SDAREL16 = 32 +const R_PPC_SECTOFF = 33 +const R_PPC_SECTOFF_HA = 36 +const R_PPC_SECTOFF_HI = 35 +const R_PPC_SECTOFF_LO = 34 +const R_PPC_TLS = 67 +const R_PPC_TLSGD = 95 +const R_PPC_TLSLD = 96 +const R_PPC_TOC16 = 255 +const R_PPC_TPREL16 = 69 +const R_PPC_TPREL16_HA = 72 +const R_PPC_TPREL16_HI = 71 +const R_PPC_TPREL16_LO = 70 +const R_PPC_TPREL32 = 73 +const R_PPC_UADDR16 = 25 +const R_PPC_UADDR32 = 24 +const R_RISCV_32 = 1 +const R_RISCV_32_PCREL = 57 +const R_RISCV_64 = 2 +const R_RISCV_ADD16 = 34 +const R_RISCV_ADD32 = 35 +const R_RISCV_ADD64 = 36 +const R_RISCV_ADD8 = 33 +const R_RISCV_ALIGN = 43 +const R_RISCV_BRANCH = 16 +const R_RISCV_CALL = 18 +const R_RISCV_CALL_PLT = 19 +const R_RISCV_COPY = 4 +const R_RISCV_GOT32_PCREL = 41 +const R_RISCV_GOT_HI20 = 20 +const R_RISCV_HI20 = 26 +const R_RISCV_IRELATIVE = 58 +const R_RISCV_JAL = 17 +const R_RISCV_JUMP_SLOT = 5 +const R_RISCV_LO12_I = 27 +const R_RISCV_LO12_S = 28 +const R_RISCV_NONE = 0 +const R_RISCV_PCREL_HI20 = 23 +const R_RISCV_PCREL_LO12_I = 24 +const R_RISCV_PCREL_LO12_S = 25 +const R_RISCV_PLT32 = 59 +const R_RISCV_RELATIVE = 3 +const R_RISCV_RELAX = 51 +const R_RISCV_RVC_BRANCH = 44 +const R_RISCV_RVC_JUMP = 45 +const R_RISCV_RVC_LUI = 46 +const R_RISCV_SET16 = 55 +const R_RISCV_SET32 = 56 +const R_RISCV_SET6 = 53 +const R_RISCV_SET8 = 54 +const R_RISCV_SET_ULEB128 = 60 +const R_RISCV_SUB16 = 38 +const R_RISCV_SUB32 = 39 +const R_RISCV_SUB6 = 52 +const R_RISCV_SUB64 = 40 +const R_RISCV_SUB8 = 37 +const R_RISCV_SUB_ULEB128 = 61 +const R_RISCV_TLSDESC = 12 +const R_RISCV_TLSDESC_ADD_LO12 = 64 +const R_RISCV_TLSDESC_CALL = 65 +const R_RISCV_TLSDESC_HI20 = 62 +const R_RISCV_TLSDESC_LOAD_LO12 = 63 +const R_RISCV_TLS_DTPMOD32 = 6 +const R_RISCV_TLS_DTPMOD64 = 7 +const R_RISCV_TLS_DTPREL32 = 8 +const R_RISCV_TLS_DTPREL64 = 9 +const R_RISCV_TLS_GD_HI20 = 22 +const R_RISCV_TLS_GOT_HI20 = 21 +const R_RISCV_TLS_TPREL32 = 10 +const R_RISCV_TLS_TPREL64 = 11 +const R_RISCV_TPREL_ADD = 32 +const R_RISCV_TPREL_HI20 = 29 +const R_RISCV_TPREL_LO12_I = 30 +const R_RISCV_TPREL_LO12_S = 31 +const R_SH_ALIGN = 29 +const R_SH_CODE = 30 +const R_SH_COPY = 162 +const R_SH_COUNT = 28 +const R_SH_DATA = 31 +const R_SH_DIR32 = 1 +const R_SH_DIR8BP = 7 +const R_SH_DIR8L = 9 +const R_SH_DIR8W = 8 +const R_SH_DIR8WPL = 5 +const R_SH_DIR8WPN = 3 +const R_SH_DIR8WPZ = 6 +const R_SH_FUNCDESC = 207 +const R_SH_FUNCDESC_VALUE = 208 +const R_SH_GLOB_DAT = 163 +const R_SH_GNU_VTENTRY = 35 +const R_SH_GNU_VTINHERIT = 34 +const R_SH_GOT20 = 201 +const R_SH_GOT32 = 160 +const R_SH_GOTFUNCDESC = 203 +const R_SH_GOTFUNCDEST20 = 204 +const R_SH_GOTOFF = 166 +const R_SH_GOTOFF20 = 202 +const R_SH_GOTOFFFUNCDESC = 205 +const R_SH_GOTOFFFUNCDEST20 = 206 +const R_SH_GOTPC = 167 +const R_SH_IND12W = 4 +const R_SH_JMP_SLOT = 164 +const R_SH_LABEL = 32 +const R_SH_NONE = 0 +const R_SH_NUM = 256 +const R_SH_PLT32 = 161 +const R_SH_REL32 = 2 +const R_SH_RELATIVE = 165 +const R_SH_SWITCH16 = 25 +const R_SH_SWITCH32 = 26 +const R_SH_SWITCH8 = 33 +const R_SH_TLS_DTPMOD32 = 149 +const R_SH_TLS_DTPOFF32 = 150 +const R_SH_TLS_GD_32 = 144 +const R_SH_TLS_IE_32 = 147 +const R_SH_TLS_LDO_32 = 146 +const R_SH_TLS_LD_32 = 145 +const R_SH_TLS_LE_32 = 148 +const R_SH_TLS_TPOFF32 = 151 +const R_SH_USES = 27 +const R_SPARC_10 = 30 +const R_SPARC_11 = 31 +const R_SPARC_13 = 11 +const R_SPARC_16 = 2 +const R_SPARC_22 = 10 +const R_SPARC_32 = 3 +const R_SPARC_5 = 44 +const R_SPARC_6 = 45 +const R_SPARC_64 = 32 +const R_SPARC_7 = 43 +const R_SPARC_8 = 1 +const R_SPARC_COPY = 19 +const R_SPARC_DISP16 = 5 +const R_SPARC_DISP32 = 6 +const R_SPARC_DISP64 = 46 +const R_SPARC_DISP8 = 4 +const R_SPARC_GLOB_DAT = 20 +const R_SPARC_GLOB_JMP = 42 +const R_SPARC_GNU_VTENTRY = 251 +const R_SPARC_GNU_VTINHERIT = 250 +const R_SPARC_GOT10 = 13 +const R_SPARC_GOT13 = 14 +const R_SPARC_GOT22 = 15 +const R_SPARC_GOTDATA_HIX22 = 80 +const R_SPARC_GOTDATA_LOX10 = 81 +const R_SPARC_GOTDATA_OP = 84 +const R_SPARC_GOTDATA_OP_HIX22 = 82 +const R_SPARC_GOTDATA_OP_LOX10 = 83 +const R_SPARC_H34 = 85 +const R_SPARC_H44 = 50 +const R_SPARC_HH22 = 34 +const R_SPARC_HI22 = 9 +const R_SPARC_HIPLT22 = 25 +const R_SPARC_HIX22 = 48 +const R_SPARC_HM10 = 35 +const R_SPARC_JMP_SLOT = 21 +const R_SPARC_L44 = 52 +const R_SPARC_LM22 = 36 +const R_SPARC_LO10 = 12 +const R_SPARC_LOPLT10 = 26 +const R_SPARC_LOX10 = 49 +const R_SPARC_M44 = 51 +const R_SPARC_NONE = 0 +const R_SPARC_NUM = 253 +const R_SPARC_OLO10 = 33 +const R_SPARC_PC10 = 16 +const R_SPARC_PC22 = 17 +const R_SPARC_PCPLT10 = 29 +const R_SPARC_PCPLT22 = 28 +const R_SPARC_PCPLT32 = 27 +const R_SPARC_PC_HH22 = 37 +const R_SPARC_PC_HM10 = 38 +const R_SPARC_PC_LM22 = 39 +const R_SPARC_PLT32 = 24 +const R_SPARC_PLT64 = 47 +const R_SPARC_REGISTER = 53 +const R_SPARC_RELATIVE = 22 +const R_SPARC_REV32 = 252 +const R_SPARC_SIZE32 = 86 +const R_SPARC_SIZE64 = 87 +const R_SPARC_TLS_DTPMOD32 = 74 +const R_SPARC_TLS_DTPMOD64 = 75 +const R_SPARC_TLS_DTPOFF32 = 76 +const R_SPARC_TLS_DTPOFF64 = 77 +const R_SPARC_TLS_GD_ADD = 58 +const R_SPARC_TLS_GD_CALL = 59 +const R_SPARC_TLS_GD_HI22 = 56 +const R_SPARC_TLS_GD_LO10 = 57 +const R_SPARC_TLS_IE_ADD = 71 +const R_SPARC_TLS_IE_HI22 = 67 +const R_SPARC_TLS_IE_LD = 69 +const R_SPARC_TLS_IE_LDX = 70 +const R_SPARC_TLS_IE_LO10 = 68 +const R_SPARC_TLS_LDM_ADD = 62 +const R_SPARC_TLS_LDM_CALL = 63 +const R_SPARC_TLS_LDM_HI22 = 60 +const R_SPARC_TLS_LDM_LO10 = 61 +const R_SPARC_TLS_LDO_ADD = 66 +const R_SPARC_TLS_LDO_HIX22 = 64 +const R_SPARC_TLS_LDO_LOX10 = 65 +const R_SPARC_TLS_LE_HIX22 = 72 +const R_SPARC_TLS_LE_LOX10 = 73 +const R_SPARC_TLS_TPOFF32 = 78 +const R_SPARC_TLS_TPOFF64 = 79 +const R_SPARC_UA16 = 55 +const R_SPARC_UA32 = 23 +const R_SPARC_UA64 = 54 +const R_SPARC_WDISP16 = 40 +const R_SPARC_WDISP19 = 41 +const R_SPARC_WDISP22 = 8 +const R_SPARC_WDISP30 = 7 +const R_SPARC_WPLT30 = 18 +const R_X86_64_16 = 12 +const R_X86_64_32 = 10 +const R_X86_64_32S = 11 +const R_X86_64_64 = 1 +const R_X86_64_8 = 14 +const R_X86_64_COPY = 5 +const R_X86_64_DTPMOD64 = 16 +const R_X86_64_DTPOFF32 = 21 +const R_X86_64_DTPOFF64 = 17 +const R_X86_64_GLOB_DAT = 6 +const R_X86_64_GOT32 = 3 +const R_X86_64_GOT64 = 27 +const R_X86_64_GOTOFF64 = 25 +const R_X86_64_GOTPC32 = 26 +const R_X86_64_GOTPC32_TLSDESC = 34 +const R_X86_64_GOTPC64 = 29 +const R_X86_64_GOTPCREL = 9 +const R_X86_64_GOTPCREL64 = 28 +const R_X86_64_GOTPCRELX = 41 +const R_X86_64_GOTPLT64 = 30 +const R_X86_64_GOTTPOFF = 22 +const R_X86_64_IRELATIVE = 37 +const R_X86_64_JUMP_SLOT = 7 +const R_X86_64_NONE = 0 +const R_X86_64_NUM = 43 +const R_X86_64_PC16 = 13 +const R_X86_64_PC32 = 2 +const R_X86_64_PC64 = 24 +const R_X86_64_PC8 = 15 +const R_X86_64_PLT32 = 4 +const R_X86_64_PLTOFF64 = 31 +const R_X86_64_RELATIVE = 8 +const R_X86_64_RELATIVE64 = 38 +const R_X86_64_REX_GOTPCRELX = 42 +const R_X86_64_SIZE32 = 32 +const R_X86_64_SIZE64 = 33 +const R_X86_64_TLSDESC = 36 +const R_X86_64_TLSDESC_CALL = 35 +const R_X86_64_TLSGD = 19 +const R_X86_64_TLSLD = 20 +const R_X86_64_TPOFF32 = 23 +const R_X86_64_TPOFF64 = 18 +const SA_EXPOSE_TAGBITS = 2048 +const SA_NOCLDSTOP = 1 +const SA_NOCLDWAIT = 2 +const SA_NODEFER = 1073741824 +const SA_ONSTACK = 134217728 +const SA_RESETHAND = 2147483648 +const SA_RESTART = 268435456 +const SA_SIGINFO = 4 +const SA_UNSUPPORTED = 1024 +const SCM_TIMESTAMPING_OLD = 37 +const SCM_TIMESTAMPNS_OLD = 35 +const SCM_TIMESTAMP_OLD = 29 +const SEGV_ACCERR = 2 +const SEGV_BNDERR = 3 +const SEGV_MAPERR = 1 +const SEGV_MTEAERR = 8 +const SEGV_MTESERR = 9 +const SEGV_PKUERR = 4 +const SELFMAG = 4 +const SHF_ALLOC = 2 +const SHF_ALPHA_GPREL = 268435456 +const SHF_ARM_COMDEF = 2147483648 +const SHF_ARM_ENTRYSECT = 268435456 +const SHF_COMPRESSED = 2048 +const SHF_EXCLUDE = 2147483648 +const SHF_EXECINSTR = 4 +const SHF_GROUP = 512 +const SHF_IA_64_NORECOV = 536870912 +const SHF_IA_64_SHORT = 268435456 +const SHF_INFO_LINK = 64 +const SHF_LINK_ORDER = 128 +const SHF_MASKOS = 267386880 +const SHF_MASKPROC = 4026531840 +const SHF_MERGE = 16 +const SHF_MIPS_ADDR = 1073741824 +const SHF_MIPS_GPREL = 268435456 +const SHF_MIPS_LOCAL = 67108864 +const SHF_MIPS_MERGE = 536870912 +const SHF_MIPS_NAMES = 33554432 +const SHF_MIPS_NODUPE = 16777216 +const SHF_MIPS_NOSTRIP = 134217728 +const SHF_MIPS_STRINGS = 2147483648 +const SHF_ORDERED = 1073741824 +const SHF_OS_NONCONFORMING = 256 +const SHF_PARISC_HUGE = 1073741824 +const SHF_PARISC_SBP = 2147483648 +const SHF_PARISC_SHORT = 536870912 +const SHF_STRINGS = 32 +const SHF_TLS = 1024 +const SHF_WRITE = 1 +const SHN_ABS = 65521 +const SHN_AFTER = 65281 +const SHN_BEFORE = 65280 +const SHN_COMMON = 65522 +const SHN_HIOS = 65343 +const SHN_HIPROC = 65311 +const SHN_HIRESERVE = 65535 +const SHN_LOOS = 65312 +const SHN_LOPROC = 65280 +const SHN_LORESERVE = 65280 +const SHN_MIPS_ACOMMON = 65280 +const SHN_MIPS_DATA = 65282 +const SHN_MIPS_SCOMMON = 65283 +const SHN_MIPS_SUNDEFINED = 65284 +const SHN_MIPS_TEXT = 65281 +const SHN_PARISC_ANSI_COMMON = 65280 +const SHN_PARISC_HUGE_COMMON = 65281 +const SHN_UNDEF = 0 +const SHN_XINDEX = 65535 +const SHT_ALPHA_DEBUG = 1879048193 +const SHT_ALPHA_REGINFO = 1879048194 +const SHT_ARM_ATTRIBUTES = 1879048195 +const SHT_ARM_EXIDX = 1879048193 +const SHT_ARM_PREEMPTMAP = 1879048194 +const SHT_CHECKSUM = 1879048184 +const SHT_DYNAMIC = 6 +const SHT_DYNSYM = 11 +const SHT_FINI_ARRAY = 15 +const SHT_GNU_ATTRIBUTES = 1879048181 +const SHT_GNU_HASH = 1879048182 +const SHT_GNU_LIBLIST = 1879048183 +const SHT_GNU_verdef = 1879048189 +const SHT_GNU_verneed = 1879048190 +const SHT_GNU_versym = 1879048191 +const SHT_GROUP = 17 +const SHT_HASH = 5 +const SHT_HIOS = 1879048191 +const SHT_HIPROC = 2147483647 +const SHT_HISUNW = 1879048191 +const SHT_HIUSER = 2415919103 +const SHT_IA_64_EXT = 1879048192 +const SHT_IA_64_UNWIND = 1879048193 +const SHT_INIT_ARRAY = 14 +const SHT_LOOS = 1610612736 +const SHT_LOPROC = 1879048192 +const SHT_LOSUNW = 1879048186 +const SHT_LOUSER = 2147483648 +const SHT_MIPS_AUXSYM = 1879048214 +const SHT_MIPS_CONFLICT = 1879048194 +const SHT_MIPS_CONTENT = 1879048204 +const SHT_MIPS_DEBUG = 1879048197 +const SHT_MIPS_DELTACLASS = 1879048221 +const SHT_MIPS_DELTADECL = 1879048223 +const SHT_MIPS_DELTAINST = 1879048220 +const SHT_MIPS_DELTASYM = 1879048219 +const SHT_MIPS_DENSE = 1879048211 +const SHT_MIPS_DWARF = 1879048222 +const SHT_MIPS_EH_REGION = 1879048231 +const SHT_MIPS_EVENTS = 1879048225 +const SHT_MIPS_EXTSYM = 1879048210 +const SHT_MIPS_FDESC = 1879048209 +const SHT_MIPS_GPTAB = 1879048195 +const SHT_MIPS_IFACE = 1879048203 +const SHT_MIPS_LIBLIST = 1879048192 +const SHT_MIPS_LINE = 1879048217 +const SHT_MIPS_LOCSTR = 1879048216 +const SHT_MIPS_LOCSYM = 1879048213 +const SHT_MIPS_MSYM = 1879048193 +const SHT_MIPS_OPTIONS = 1879048205 +const SHT_MIPS_OPTSYM = 1879048215 +const SHT_MIPS_PACKAGE = 1879048199 +const SHT_MIPS_PACKSYM = 1879048200 +const SHT_MIPS_PDESC = 1879048212 +const SHT_MIPS_PDR_EXCEPTION = 1879048233 +const SHT_MIPS_PIXIE = 1879048227 +const SHT_MIPS_REGINFO = 1879048198 +const SHT_MIPS_RELD = 1879048201 +const SHT_MIPS_RFDESC = 1879048218 +const SHT_MIPS_SHDR = 1879048208 +const SHT_MIPS_SYMBOL_LIB = 1879048224 +const SHT_MIPS_TRANSLATE = 1879048226 +const SHT_MIPS_UCODE = 1879048196 +const SHT_MIPS_WHIRL = 1879048230 +const SHT_MIPS_XLATE = 1879048228 +const SHT_MIPS_XLATE_DEBUG = 1879048229 +const SHT_MIPS_XLATE_OLD = 1879048232 +const SHT_NOBITS = 8 +const SHT_NOTE = 7 +const SHT_NULL = 0 +const SHT_NUM = 20 +const SHT_PARISC_DOC = 1879048194 +const SHT_PARISC_EXT = 1879048192 +const SHT_PARISC_UNWIND = 1879048193 +const SHT_PREINIT_ARRAY = 16 +const SHT_PROGBITS = 1 +const SHT_REL = 9 +const SHT_RELA = 4 +const SHT_RELR = 19 +const SHT_SHLIB = 10 +const SHT_STRTAB = 3 +const SHT_SUNW_COMDAT = 1879048187 +const SHT_SUNW_move = 1879048186 +const SHT_SUNW_syminfo = 1879048188 +const SHT_SYMTAB = 2 +const SHT_SYMTAB_SHNDX = 18 +const SIGABRT = 6 +const SIGALRM = 14 +const SIGBUS = 7 +const SIGCHLD = 17 +const SIGCONT = 18 +const SIGEV_NONE = 1 +const SIGEV_SIGNAL = 0 +const SIGEV_THREAD = 2 +const SIGEV_THREAD_ID = 4 +const SIGFPE = 8 +const SIGHUP = 1 +const SIGILL = 4 +const SIGINT = 2 +const SIGIO = 29 +const SIGIOT = 6 +const SIGKILL = 9 +const SIGPIPE = 13 +const SIGPOLL = 29 +const SIGPROF = 27 +const SIGPWR = 30 +const SIGQUIT = 3 +const SIGRTMAX = 0 +const SIGRTMIN = 0 +const SIGSEGV = 11 +const SIGSTKFLT = 16 +const SIGSTKSZ = 8192 +const SIGSTOP = 19 +const SIGSYS = 31 +const SIGTERM = 15 +const SIGTRAP = 5 +const SIGTSTP = 20 +const SIGTTIN = 21 +const SIGTTOU = 22 +const SIGUNUSED = 31 +const SIGURG = 23 +const SIGUSR1 = 10 +const SIGUSR2 = 12 +const SIGVTALRM = 26 +const SIGWINCH = 28 +const SIGXCPU = 24 +const SIGXFSZ = 25 +const SIG_BLOCK = 0 +const SIG_SETMASK = 2 +const SIG_UNBLOCK = 1 +const SIOCGSTAMPNS_OLD = 35079 +const SIOCGSTAMP_OLD = 35078 +const SI_ASYNCIO = -4 +const SI_ASYNCNL = -60 +const SI_KERNEL = 128 +const SI_MESGQ = -3 +const SI_QUEUE = -1 +const SI_SIGIO = -5 +const SI_TIMER = -2 +const SI_TKILL = -6 +const SI_USER = 0 +const SO_RCVTIMEO_OLD = 20 +const SO_SNDTIMEO_OLD = 21 +const SO_TIMESTAMPING_OLD = 37 +const SO_TIMESTAMPNS_OLD = 35 +const SO_TIMESTAMP_OLD = 29 +const SS_AUTODISARM = 2147483648 +const SS_DISABLE = 2 +const SS_FLAG_BITS = 2147483648 +const SS_ONSTACK = 1 +const STB_GLOBAL = 1 +const STB_GNU_UNIQUE = 10 +const STB_HIOS = 12 +const STB_HIPROC = 15 +const STB_LOCAL = 0 +const STB_LOOS = 10 +const STB_LOPROC = 13 +const STB_MIPS_SPLIT_COMMON = 13 +const STB_NUM = 3 +const STB_WEAK = 2 +const STN_UNDEF = 0 +const STO_ALPHA_NOPV = 128 +const STO_ALPHA_STD_GPLOAD = 136 +const STO_MIPS_DEFAULT = 0 +const STO_MIPS_HIDDEN = 2 +const STO_MIPS_INTERNAL = 1 +const STO_MIPS_PLT = 8 +const STO_MIPS_PROTECTED = 3 +const STO_MIPS_SC_ALIGN_UNUSED = 255 +const STO_PPC64_LOCAL_BIT = 5 +const STO_PPC64_LOCAL_MASK = 224 +const STT_ARM_16BIT = 15 +const STT_ARM_TFUNC = 13 +const STT_COMMON = 5 +const STT_FILE = 4 +const STT_FUNC = 2 +const STT_GNU_IFUNC = 10 +const STT_HIOS = 12 +const STT_HIPROC = 15 +const STT_HP_OPAQUE = 11 +const STT_HP_STUB = 12 +const STT_LOOS = 10 +const STT_LOPROC = 13 +const STT_NOTYPE = 0 +const STT_NUM = 7 +const STT_OBJECT = 1 +const STT_PARISC_MILLICODE = 13 +const STT_SECTION = 3 +const STT_SPARC_REGISTER = 13 +const STT_TLS = 6 +const STV_DEFAULT = 0 +const STV_HIDDEN = 2 +const STV_INTERNAL = 1 +const STV_PROTECTED = 3 +const SYMINFO_BT_LOWRESERVE = 65280 +const SYMINFO_BT_PARENT = 65534 +const SYMINFO_BT_SELF = 65535 +const SYMINFO_CURRENT = 1 +const SYMINFO_FLG_COPY = 4 +const SYMINFO_FLG_DIRECT = 1 +const SYMINFO_FLG_LAZYLOAD = 8 +const SYMINFO_FLG_PASSTHRU = 2 +const SYMINFO_NONE = 0 +const SYMINFO_NUM = 2 +const SYSCALL_MMAP2_UNIT = 4096 +const SYSCALL_RLIM_INFINITY = 18446744073709551615 +const SYS_accept = 202 +const SYS_accept4 = 242 +const SYS_acct = 89 +const SYS_add_key = 217 +const SYS_adjtimex = 171 +const SYS_arch_specific_syscall = 244 +const SYS_bind = 200 +const SYS_bpf = 280 +const SYS_brk = 214 +const SYS_cachestat = 451 +const SYS_capget = 90 +const SYS_capset = 91 +const SYS_chdir = 49 +const SYS_chroot = 51 +const SYS_clock_adjtime = 266 +const SYS_clock_getres = 114 +const SYS_clock_gettime = 113 +const SYS_clock_nanosleep = 115 +const SYS_clock_settime = 112 +const SYS_clone = 220 +const SYS_clone3 = 435 +const SYS_close = 57 +const SYS_close_range = 436 +const SYS_connect = 203 +const SYS_copy_file_range = 285 +const SYS_delete_module = 106 +const SYS_dup = 23 +const SYS_dup3 = 24 +const SYS_epoll_create1 = 20 +const SYS_epoll_ctl = 21 +const SYS_epoll_pwait = 22 +const SYS_epoll_pwait2 = 441 +const SYS_eventfd2 = 19 +const SYS_execve = 221 +const SYS_execveat = 281 +const SYS_exit = 93 +const SYS_exit_group = 94 +const SYS_faccessat = 48 +const SYS_faccessat2 = 439 +const SYS_fadvise64 = 223 +const SYS_fallocate = 47 +const SYS_fanotify_init = 262 +const SYS_fanotify_mark = 263 +const SYS_fchdir = 50 +const SYS_fchmod = 52 +const SYS_fchmodat = 53 +const SYS_fchmodat2 = 452 +const SYS_fchown = 55 +const SYS_fchownat = 54 +const SYS_fcntl = 25 +const SYS_fdatasync = 83 +const SYS_fgetxattr = 10 +const SYS_finit_module = 273 +const SYS_flistxattr = 13 +const SYS_flock = 32 +const SYS_fremovexattr = 16 +const SYS_fsconfig = 431 +const SYS_fsetxattr = 7 +const SYS_fsmount = 432 +const SYS_fsopen = 430 +const SYS_fspick = 433 +const SYS_fstat = 80 +const SYS_fstatfs = 44 +const SYS_fsync = 82 +const SYS_ftruncate = 46 +const SYS_futex = 98 +const SYS_futex_waitv = 449 +const SYS_get_mempolicy = 236 +const SYS_get_robust_list = 100 +const SYS_getcpu = 168 +const SYS_getcwd = 17 +const SYS_getdents64 = 61 +const SYS_getegid = 177 +const SYS_geteuid = 175 +const SYS_getgid = 176 +const SYS_getgroups = 158 +const SYS_getitimer = 102 +const SYS_getpeername = 205 +const SYS_getpgid = 155 +const SYS_getpid = 172 +const SYS_getppid = 173 +const SYS_getpriority = 141 +const SYS_getrandom = 278 +const SYS_getresgid = 150 +const SYS_getresuid = 148 +const SYS_getrlimit = 163 +const SYS_getrusage = 165 +const SYS_getsid = 156 +const SYS_getsockname = 204 +const SYS_getsockopt = 209 +const SYS_gettid = 178 +const SYS_gettimeofday = 169 +const SYS_getuid = 174 +const SYS_getxattr = 8 +const SYS_init_module = 105 +const SYS_inotify_add_watch = 27 +const SYS_inotify_init1 = 26 +const SYS_inotify_rm_watch = 28 +const SYS_io_cancel = 3 +const SYS_io_destroy = 1 +const SYS_io_getevents = 4 +const SYS_io_pgetevents = 292 +const SYS_io_setup = 0 +const SYS_io_submit = 2 +const SYS_io_uring_enter = 426 +const SYS_io_uring_register = 427 +const SYS_io_uring_setup = 425 +const SYS_ioctl = 29 +const SYS_ioprio_get = 31 +const SYS_ioprio_set = 30 +const SYS_kcmp = 272 +const SYS_kexec_file_load = 294 +const SYS_kexec_load = 104 +const SYS_keyctl = 219 +const SYS_kill = 129 +const SYS_landlock_add_rule = 445 +const SYS_landlock_create_ruleset = 444 +const SYS_landlock_restrict_self = 446 +const SYS_lgetxattr = 9 +const SYS_linkat = 37 +const SYS_listen = 201 +const SYS_listxattr = 11 +const SYS_llistxattr = 12 +const SYS_lookup_dcookie = 18 +const SYS_lremovexattr = 15 +const SYS_lseek = 62 +const SYS_lsetxattr = 6 +const SYS_madvise = 233 +const SYS_mbind = 235 +const SYS_membarrier = 283 +const SYS_memfd_create = 279 +const SYS_migrate_pages = 238 +const SYS_mincore = 232 +const SYS_mkdirat = 34 +const SYS_mknodat = 33 +const SYS_mlock = 228 +const SYS_mlock2 = 284 +const SYS_mlockall = 230 +const SYS_mmap = 222 +const SYS_mount = 40 +const SYS_mount_setattr = 442 +const SYS_move_mount = 429 +const SYS_move_pages = 239 +const SYS_mprotect = 226 +const SYS_mq_getsetattr = 185 +const SYS_mq_notify = 184 +const SYS_mq_open = 180 +const SYS_mq_timedreceive = 183 +const SYS_mq_timedsend = 182 +const SYS_mq_unlink = 181 +const SYS_mremap = 216 +const SYS_msgctl = 187 +const SYS_msgget = 186 +const SYS_msgrcv = 188 +const SYS_msgsnd = 189 +const SYS_msync = 227 +const SYS_munlock = 229 +const SYS_munlockall = 231 +const SYS_munmap = 215 +const SYS_name_to_handle_at = 264 +const SYS_nanosleep = 101 +const SYS_newfstatat = 79 +const SYS_nfsservctl = 42 +const SYS_open_by_handle_at = 265 +const SYS_open_tree = 428 +const SYS_openat = 56 +const SYS_openat2 = 437 +const SYS_perf_event_open = 241 +const SYS_personality = 92 +const SYS_pidfd_getfd = 438 +const SYS_pidfd_open = 434 +const SYS_pidfd_send_signal = 424 +const SYS_pipe2 = 59 +const SYS_pivot_root = 41 +const SYS_pkey_alloc = 289 +const SYS_pkey_free = 290 +const SYS_pkey_mprotect = 288 +const SYS_ppoll = 73 +const SYS_prctl = 167 +const SYS_pread64 = 67 +const SYS_preadv = 69 +const SYS_preadv2 = 286 +const SYS_prlimit64 = 261 +const SYS_process_madvise = 440 +const SYS_process_mrelease = 448 +const SYS_process_vm_readv = 270 +const SYS_process_vm_writev = 271 +const SYS_pselect6 = 72 +const SYS_ptrace = 117 +const SYS_pwrite64 = 68 +const SYS_pwritev = 70 +const SYS_pwritev2 = 287 +const SYS_quotactl = 60 +const SYS_read = 63 +const SYS_readahead = 213 +const SYS_readlinkat = 78 +const SYS_readv = 65 +const SYS_reboot = 142 +const SYS_recvfrom = 207 +const SYS_recvmmsg = 243 +const SYS_recvmsg = 212 +const SYS_remap_file_pages = 234 +const SYS_removexattr = 14 +const SYS_renameat2 = 276 +const SYS_request_key = 218 +const SYS_restart_syscall = 128 +const SYS_riscv_flush_icache = 259 +const SYS_rseq = 293 +const SYS_rt_sigaction = 134 +const SYS_rt_sigpending = 136 +const SYS_rt_sigprocmask = 135 +const SYS_rt_sigqueueinfo = 138 +const SYS_rt_sigreturn = 139 +const SYS_rt_sigsuspend = 133 +const SYS_rt_sigtimedwait = 137 +const SYS_rt_tgsigqueueinfo = 240 +const SYS_sched_get_priority_max = 125 +const SYS_sched_get_priority_min = 126 +const SYS_sched_getaffinity = 123 +const SYS_sched_getattr = 275 +const SYS_sched_getparam = 121 +const SYS_sched_getscheduler = 120 +const SYS_sched_rr_get_interval = 127 +const SYS_sched_setaffinity = 122 +const SYS_sched_setattr = 274 +const SYS_sched_setparam = 118 +const SYS_sched_setscheduler = 119 +const SYS_sched_yield = 124 +const SYS_seccomp = 277 +const SYS_semctl = 191 +const SYS_semget = 190 +const SYS_semop = 193 +const SYS_semtimedop = 192 +const SYS_sendfile = 71 +const SYS_sendmmsg = 269 +const SYS_sendmsg = 211 +const SYS_sendto = 206 +const SYS_set_mempolicy = 237 +const SYS_set_mempolicy_home_node = 450 +const SYS_set_robust_list = 99 +const SYS_set_tid_address = 96 +const SYS_setdomainname = 162 +const SYS_setfsgid = 152 +const SYS_setfsuid = 151 +const SYS_setgid = 144 +const SYS_setgroups = 159 +const SYS_sethostname = 161 +const SYS_setitimer = 103 +const SYS_setns = 268 +const SYS_setpgid = 154 +const SYS_setpriority = 140 +const SYS_setregid = 143 +const SYS_setresgid = 149 +const SYS_setresuid = 147 +const SYS_setreuid = 145 +const SYS_setrlimit = 164 +const SYS_setsid = 157 +const SYS_setsockopt = 208 +const SYS_settimeofday = 170 +const SYS_setuid = 146 +const SYS_setxattr = 5 +const SYS_shmat = 196 +const SYS_shmctl = 195 +const SYS_shmdt = 197 +const SYS_shmget = 194 +const SYS_shutdown = 210 +const SYS_sigaltstack = 132 +const SYS_signalfd4 = 74 +const SYS_socket = 198 +const SYS_socketpair = 199 +const SYS_splice = 76 +const SYS_statfs = 43 +const SYS_statx = 291 +const SYS_swapoff = 225 +const SYS_swapon = 224 +const SYS_symlinkat = 36 +const SYS_sync = 81 +const SYS_sync_file_range = 84 +const SYS_syncfs = 267 +const SYS_sysinfo = 179 +const SYS_syslog = 116 +const SYS_sysriscv = 244 +const SYS_tee = 77 +const SYS_tgkill = 131 +const SYS_timer_create = 107 +const SYS_timer_delete = 111 +const SYS_timer_getoverrun = 109 +const SYS_timer_gettime = 108 +const SYS_timer_settime = 110 +const SYS_timerfd_create = 85 +const SYS_timerfd_gettime = 87 +const SYS_timerfd_settime = 86 +const SYS_times = 153 +const SYS_tkill = 130 +const SYS_truncate = 45 +const SYS_umask = 166 +const SYS_umount2 = 39 +const SYS_uname = 160 +const SYS_unlinkat = 35 +const SYS_unshare = 97 +const SYS_userfaultfd = 282 +const SYS_utimensat = 88 +const SYS_vhangup = 58 +const SYS_vmsplice = 75 +const SYS_wait4 = 260 +const SYS_waitid = 95 +const SYS_write = 64 +const SYS_writev = 66 +const TRAP_BRANCH = 3 +const TRAP_BRKPT = 1 +const TRAP_HWBKPT = 4 +const TRAP_TRACE = 2 +const TRAP_UNK = 5 +const VER = -255 +const VER_DEF_CURRENT = 1 +const VER_DEF_NONE = 0 +const VER_DEF_NUM = 2 +const VER_FLG_BASE = 1 +const VER_FLG_WEAK = 2 +const VER_NDX_ELIMINATE = 65281 +const VER_NDX_GLOBAL = 1 +const VER_NDX_LOCAL = 0 +const VER_NDX_LORESERVE = 65280 +const VER_NEED_CURRENT = 1 +const VER_NEED_NONE = 0 +const VER_NEED_NUM = 2 +const WNOHANG = 1 +const WUNTRACED = 2 +const _NSIG = 65 +const __NR_accept = 202 +const __NR_accept4 = 242 +const __NR_acct = 89 +const __NR_add_key = 217 +const __NR_adjtimex = 171 +const __NR_arch_specific_syscall = 244 +const __NR_bind = 200 +const __NR_bpf = 280 +const __NR_brk = 214 +const __NR_cachestat = 451 +const __NR_capget = 90 +const __NR_capset = 91 +const __NR_chdir = 49 +const __NR_chroot = 51 +const __NR_clock_adjtime = 266 +const __NR_clock_getres = 114 +const __NR_clock_gettime = 113 +const __NR_clock_nanosleep = 115 +const __NR_clock_settime = 112 +const __NR_clone = 220 +const __NR_clone3 = 435 +const __NR_close = 57 +const __NR_close_range = 436 +const __NR_connect = 203 +const __NR_copy_file_range = 285 +const __NR_delete_module = 106 +const __NR_dup = 23 +const __NR_dup3 = 24 +const __NR_epoll_create1 = 20 +const __NR_epoll_ctl = 21 +const __NR_epoll_pwait = 22 +const __NR_epoll_pwait2 = 441 +const __NR_eventfd2 = 19 +const __NR_execve = 221 +const __NR_execveat = 281 +const __NR_exit = 93 +const __NR_exit_group = 94 +const __NR_faccessat = 48 +const __NR_faccessat2 = 439 +const __NR_fadvise64 = 223 +const __NR_fallocate = 47 +const __NR_fanotify_init = 262 +const __NR_fanotify_mark = 263 +const __NR_fchdir = 50 +const __NR_fchmod = 52 +const __NR_fchmodat = 53 +const __NR_fchmodat2 = 452 +const __NR_fchown = 55 +const __NR_fchownat = 54 +const __NR_fcntl = 25 +const __NR_fdatasync = 83 +const __NR_fgetxattr = 10 +const __NR_finit_module = 273 +const __NR_flistxattr = 13 +const __NR_flock = 32 +const __NR_fremovexattr = 16 +const __NR_fsconfig = 431 +const __NR_fsetxattr = 7 +const __NR_fsmount = 432 +const __NR_fsopen = 430 +const __NR_fspick = 433 +const __NR_fstat = 80 +const __NR_fstatfs = 44 +const __NR_fsync = 82 +const __NR_ftruncate = 46 +const __NR_futex = 98 +const __NR_futex_waitv = 449 +const __NR_get_mempolicy = 236 +const __NR_get_robust_list = 100 +const __NR_getcpu = 168 +const __NR_getcwd = 17 +const __NR_getdents64 = 61 +const __NR_getegid = 177 +const __NR_geteuid = 175 +const __NR_getgid = 176 +const __NR_getgroups = 158 +const __NR_getitimer = 102 +const __NR_getpeername = 205 +const __NR_getpgid = 155 +const __NR_getpid = 172 +const __NR_getppid = 173 +const __NR_getpriority = 141 +const __NR_getrandom = 278 +const __NR_getresgid = 150 +const __NR_getresuid = 148 +const __NR_getrlimit = 163 +const __NR_getrusage = 165 +const __NR_getsid = 156 +const __NR_getsockname = 204 +const __NR_getsockopt = 209 +const __NR_gettid = 178 +const __NR_gettimeofday = 169 +const __NR_getuid = 174 +const __NR_getxattr = 8 +const __NR_init_module = 105 +const __NR_inotify_add_watch = 27 +const __NR_inotify_init1 = 26 +const __NR_inotify_rm_watch = 28 +const __NR_io_cancel = 3 +const __NR_io_destroy = 1 +const __NR_io_getevents = 4 +const __NR_io_pgetevents = 292 +const __NR_io_setup = 0 +const __NR_io_submit = 2 +const __NR_io_uring_enter = 426 +const __NR_io_uring_register = 427 +const __NR_io_uring_setup = 425 +const __NR_ioctl = 29 +const __NR_ioprio_get = 31 +const __NR_ioprio_set = 30 +const __NR_kcmp = 272 +const __NR_kexec_file_load = 294 +const __NR_kexec_load = 104 +const __NR_keyctl = 219 +const __NR_kill = 129 +const __NR_landlock_add_rule = 445 +const __NR_landlock_create_ruleset = 444 +const __NR_landlock_restrict_self = 446 +const __NR_lgetxattr = 9 +const __NR_linkat = 37 +const __NR_listen = 201 +const __NR_listxattr = 11 +const __NR_llistxattr = 12 +const __NR_lookup_dcookie = 18 +const __NR_lremovexattr = 15 +const __NR_lseek = 62 +const __NR_lsetxattr = 6 +const __NR_madvise = 233 +const __NR_mbind = 235 +const __NR_membarrier = 283 +const __NR_memfd_create = 279 +const __NR_migrate_pages = 238 +const __NR_mincore = 232 +const __NR_mkdirat = 34 +const __NR_mknodat = 33 +const __NR_mlock = 228 +const __NR_mlock2 = 284 +const __NR_mlockall = 230 +const __NR_mmap = 222 +const __NR_mount = 40 +const __NR_mount_setattr = 442 +const __NR_move_mount = 429 +const __NR_move_pages = 239 +const __NR_mprotect = 226 +const __NR_mq_getsetattr = 185 +const __NR_mq_notify = 184 +const __NR_mq_open = 180 +const __NR_mq_timedreceive = 183 +const __NR_mq_timedsend = 182 +const __NR_mq_unlink = 181 +const __NR_mremap = 216 +const __NR_msgctl = 187 +const __NR_msgget = 186 +const __NR_msgrcv = 188 +const __NR_msgsnd = 189 +const __NR_msync = 227 +const __NR_munlock = 229 +const __NR_munlockall = 231 +const __NR_munmap = 215 +const __NR_name_to_handle_at = 264 +const __NR_nanosleep = 101 +const __NR_newfstatat = 79 +const __NR_nfsservctl = 42 +const __NR_open_by_handle_at = 265 +const __NR_open_tree = 428 +const __NR_openat = 56 +const __NR_openat2 = 437 +const __NR_perf_event_open = 241 +const __NR_personality = 92 +const __NR_pidfd_getfd = 438 +const __NR_pidfd_open = 434 +const __NR_pidfd_send_signal = 424 +const __NR_pipe2 = 59 +const __NR_pivot_root = 41 +const __NR_pkey_alloc = 289 +const __NR_pkey_free = 290 +const __NR_pkey_mprotect = 288 +const __NR_ppoll = 73 +const __NR_prctl = 167 +const __NR_pread64 = 67 +const __NR_preadv = 69 +const __NR_preadv2 = 286 +const __NR_prlimit64 = 261 +const __NR_process_madvise = 440 +const __NR_process_mrelease = 448 +const __NR_process_vm_readv = 270 +const __NR_process_vm_writev = 271 +const __NR_pselect6 = 72 +const __NR_ptrace = 117 +const __NR_pwrite64 = 68 +const __NR_pwritev = 70 +const __NR_pwritev2 = 287 +const __NR_quotactl = 60 +const __NR_read = 63 +const __NR_readahead = 213 +const __NR_readlinkat = 78 +const __NR_readv = 65 +const __NR_reboot = 142 +const __NR_recvfrom = 207 +const __NR_recvmmsg = 243 +const __NR_recvmsg = 212 +const __NR_remap_file_pages = 234 +const __NR_removexattr = 14 +const __NR_renameat2 = 276 +const __NR_request_key = 218 +const __NR_restart_syscall = 128 +const __NR_riscv_flush_icache = 259 +const __NR_rseq = 293 +const __NR_rt_sigaction = 134 +const __NR_rt_sigpending = 136 +const __NR_rt_sigprocmask = 135 +const __NR_rt_sigqueueinfo = 138 +const __NR_rt_sigreturn = 139 +const __NR_rt_sigsuspend = 133 +const __NR_rt_sigtimedwait = 137 +const __NR_rt_tgsigqueueinfo = 240 +const __NR_sched_get_priority_max = 125 +const __NR_sched_get_priority_min = 126 +const __NR_sched_getaffinity = 123 +const __NR_sched_getattr = 275 +const __NR_sched_getparam = 121 +const __NR_sched_getscheduler = 120 +const __NR_sched_rr_get_interval = 127 +const __NR_sched_setaffinity = 122 +const __NR_sched_setattr = 274 +const __NR_sched_setparam = 118 +const __NR_sched_setscheduler = 119 +const __NR_sched_yield = 124 +const __NR_seccomp = 277 +const __NR_semctl = 191 +const __NR_semget = 190 +const __NR_semop = 193 +const __NR_semtimedop = 192 +const __NR_sendfile = 71 +const __NR_sendmmsg = 269 +const __NR_sendmsg = 211 +const __NR_sendto = 206 +const __NR_set_mempolicy = 237 +const __NR_set_mempolicy_home_node = 450 +const __NR_set_robust_list = 99 +const __NR_set_tid_address = 96 +const __NR_setdomainname = 162 +const __NR_setfsgid = 152 +const __NR_setfsuid = 151 +const __NR_setgid = 144 +const __NR_setgroups = 159 +const __NR_sethostname = 161 +const __NR_setitimer = 103 +const __NR_setns = 268 +const __NR_setpgid = 154 +const __NR_setpriority = 140 +const __NR_setregid = 143 +const __NR_setresgid = 149 +const __NR_setresuid = 147 +const __NR_setreuid = 145 +const __NR_setrlimit = 164 +const __NR_setsid = 157 +const __NR_setsockopt = 208 +const __NR_settimeofday = 170 +const __NR_setuid = 146 +const __NR_setxattr = 5 +const __NR_shmat = 196 +const __NR_shmctl = 195 +const __NR_shmdt = 197 +const __NR_shmget = 194 +const __NR_shutdown = 210 +const __NR_sigaltstack = 132 +const __NR_signalfd4 = 74 +const __NR_socket = 198 +const __NR_socketpair = 199 +const __NR_splice = 76 +const __NR_statfs = 43 +const __NR_statx = 291 +const __NR_swapoff = 225 +const __NR_swapon = 224 +const __NR_symlinkat = 36 +const __NR_sync = 81 +const __NR_sync_file_range = 84 +const __NR_syncfs = 267 +const __NR_sysinfo = 179 +const __NR_syslog = 116 +const __NR_sysriscv = 244 +const __NR_tee = 77 +const __NR_tgkill = 131 +const __NR_timer_create = 107 +const __NR_timer_delete = 111 +const __NR_timer_getoverrun = 109 +const __NR_timer_gettime = 108 +const __NR_timer_settime = 110 +const __NR_timerfd_create = 85 +const __NR_timerfd_gettime = 87 +const __NR_timerfd_settime = 86 +const __NR_times = 153 +const __NR_tkill = 130 +const __NR_truncate = 45 +const __NR_umask = 166 +const __NR_umount2 = 39 +const __NR_uname = 160 +const __NR_unlinkat = 35 +const __NR_unshare = 97 +const __NR_userfaultfd = 282 +const __NR_utimensat = 88 +const __NR_vhangup = 58 +const __NR_vmsplice = 75 +const __NR_wait4 = 260 +const __NR_waitid = 95 +const __NR_write = 64 +const __NR_writev = 66 +const __SC_accept = 5 +const __SC_accept4 = 18 +const __SC_bind = 2 +const __SC_connect = 3 +const __SC_getpeername = 7 +const __SC_getsockname = 6 +const __SC_getsockopt = 15 +const __SC_listen = 4 +const __SC_recv = 10 +const __SC_recvfrom = 12 +const __SC_recvmmsg = 19 +const __SC_recvmsg = 17 +const __SC_send = 9 +const __SC_sendmmsg = 20 +const __SC_sendmsg = 16 +const __SC_sendto = 11 +const __SC_setsockopt = 14 +const __SC_shutdown = 13 +const __SC_socket = 1 +const __SC_socketpair = 8 +const libc = 0 + +type Ttime_t = int64 + +type Tsuseconds_t = int64 + +type Ttimeval = struct { + Ftv_sec Ttime_t + Ftv_usec Tsuseconds_t +} + +type Ttimespec = struct { + Ftv_sec Ttime_t + Ftv_nsec int64 +} + +type Tsigset_t = struct { + F__bits [16]uint64 +} + +type t__sigset_t = Tsigset_t + +type Tfd_mask = uint64 + +type Tfd_set = struct { + Ffds_bits [16]uint64 +} + +type Titimerval = struct { + Fit_interval Ttimeval + Fit_value Ttimeval +} + +type Tid_t = uint32 + +type Trlim_t = uint64 + +type Trlimit = struct { + Frlim_cur Trlim_t + Frlim_max Trlim_t +} + +type Trusage = struct { + Fru_utime Ttimeval + Fru_stime Ttimeval + Fru_maxrss int64 + Fru_ixrss int64 + Fru_idrss int64 + Fru_isrss int64 + Fru_minflt int64 + Fru_majflt int64 + Fru_nswap int64 + Fru_inblock int64 + Fru_oublock int64 + Fru_msgsnd int64 + Fru_msgrcv int64 + Fru_nsignals int64 + Fru_nvcsw int64 + Fru_nivcsw int64 + F__reserved [16]int64 +} + +type Tclock_t = int64 + +type Tpthread_t = uintptr + +type Tpthread_attr_t = struct { + F__u struct { + F__vi [0][14]int32 + F__s [0][7]uint64 + F__i [14]int32 + } +} + +type Tstack_t = struct { + Fss_sp uintptr + Fss_flags int32 + Fss_size Tsize_t +} + +type Tsigaltstack = Tstack_t + +type t__riscv_mc_gp_state = [32]uint64 + +type t__riscv_mc_f_ext_state = struct { + F__f [32]uint32 + F__fcsr uint32 +} + +type t__riscv_mc_d_ext_state = struct { + F__f [32]uint64 + F__fcsr uint32 +} + +type t__riscv_mc_q_ext_state = struct { + F__f [64]uint64 + F__fcsr uint32 + F__reserved [3]uint32 +} + +type t__riscv_mc_fp_state = struct { + F__d [0]t__riscv_mc_d_ext_state + F__q [0]t__riscv_mc_q_ext_state + F__f t__riscv_mc_f_ext_state + F__ccgo_pad3 [396]byte +} + +type Tmcontext_t = struct { + F__gregs t__riscv_mc_gp_state + F__fpregs t__riscv_mc_fp_state +} + +type Tucontext_t = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_sigmask Tsigset_t + Fuc_mcontext Tmcontext_t +} + +type t__ucontext = Tucontext_t + +type Tsigval = struct { + Fsival_ptr [0]uintptr + Fsival_int int32 + F__ccgo_pad2 [4]byte +} + +type Tsiginfo_t = struct { + Fsi_signo int32 + Fsi_errno int32 + Fsi_code int32 + F__si_fields struct { + F__si_common [0]struct { + F__first struct { + F__timer [0]struct { + Fsi_timerid int32 + Fsi_overrun int32 + } + F__piduid struct { + Fsi_pid Tpid_t + Fsi_uid Tuid_t + } + } + F__second struct { + F__sigchld [0]struct { + Fsi_status int32 + Fsi_utime Tclock_t + Fsi_stime Tclock_t + } + Fsi_value Tsigval + F__ccgo_pad2 [16]byte + } + } + F__sigfault [0]struct { + Fsi_addr uintptr + Fsi_addr_lsb int16 + F__first struct { + Fsi_pkey [0]uint32 + F__addr_bnd struct { + Fsi_lower uintptr + Fsi_upper uintptr + } + } + } + F__sigpoll [0]struct { + Fsi_band int64 + Fsi_fd int32 + } + F__sigsys [0]struct { + Fsi_call_addr uintptr + Fsi_syscall int32 + Fsi_arch uint32 + } + F__pad [112]uint8 + } +} + +type Tsigaction = struct { + F__sa_handler struct { + Fsa_sigaction [0]uintptr + Fsa_handler uintptr + } + Fsa_mask Tsigset_t + Fsa_flags int32 + Fsa_restorer uintptr +} + +type Tsigevent = struct { + Fsigev_value Tsigval + Fsigev_signo int32 + Fsigev_notify int32 + F__sev_fields struct { + Fsigev_notify_thread_id [0]Tpid_t + F__sev_thread [0]struct { + Fsigev_notify_function uintptr + Fsigev_notify_attributes uintptr + } + F__pad [48]uint8 + } +} + +type Tsig_atomic_t = int32 + +type TElf32_Half = uint16 + +type TElf64_Half = uint16 + +type TElf32_Word = uint32 + +type TElf32_Sword = int32 + +type TElf64_Word = uint32 + +type TElf64_Sword = int32 + +type TElf32_Xword = uint64 + +type TElf32_Sxword = int64 + +type TElf64_Xword = uint64 + +type TElf64_Sxword = int64 + +type TElf32_Addr = uint32 + +type TElf64_Addr = uint64 + +type TElf32_Off = uint32 + +type TElf64_Off = uint64 + +type TElf32_Section = uint16 + +type TElf64_Section = uint16 + +type TElf32_Versym = uint16 + +type TElf64_Versym = uint16 + +type TElf32_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf32_Half + Fe_machine TElf32_Half + Fe_version TElf32_Word + Fe_entry TElf32_Addr + Fe_phoff TElf32_Off + Fe_shoff TElf32_Off + Fe_flags TElf32_Word + Fe_ehsize TElf32_Half + Fe_phentsize TElf32_Half + Fe_phnum TElf32_Half + Fe_shentsize TElf32_Half + Fe_shnum TElf32_Half + Fe_shstrndx TElf32_Half +} + +type TElf64_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TElf32_Shdr = struct { + Fsh_name TElf32_Word + Fsh_type TElf32_Word + Fsh_flags TElf32_Word + Fsh_addr TElf32_Addr + Fsh_offset TElf32_Off + Fsh_size TElf32_Word + Fsh_link TElf32_Word + Fsh_info TElf32_Word + Fsh_addralign TElf32_Word + Fsh_entsize TElf32_Word +} + +type TElf64_Shdr = struct { + Fsh_name TElf64_Word + Fsh_type TElf64_Word + Fsh_flags TElf64_Xword + Fsh_addr TElf64_Addr + Fsh_offset TElf64_Off + Fsh_size TElf64_Xword + Fsh_link TElf64_Word + Fsh_info TElf64_Word + Fsh_addralign TElf64_Xword + Fsh_entsize TElf64_Xword +} + +type TElf32_Chdr = struct { + Fch_type TElf32_Word + Fch_size TElf32_Word + Fch_addralign TElf32_Word +} + +type TElf64_Chdr = struct { + Fch_type TElf64_Word + Fch_reserved TElf64_Word + Fch_size TElf64_Xword + Fch_addralign TElf64_Xword +} + +type TElf32_Sym = struct { + Fst_name TElf32_Word + Fst_value TElf32_Addr + Fst_size TElf32_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf32_Section +} + +type TElf64_Sym = struct { + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TElf32_Syminfo = struct { + Fsi_boundto TElf32_Half + Fsi_flags TElf32_Half +} + +type TElf64_Syminfo = struct { + Fsi_boundto TElf64_Half + Fsi_flags TElf64_Half +} + +type TElf32_Rel = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word +} + +type TElf64_Rel = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword +} + +type TElf32_Rela = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word + Fr_addend TElf32_Sword +} + +type TElf64_Rela = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword + Fr_addend TElf64_Sxword +} + +type TElf32_Relr = uint32 + +type TElf64_Relr = uint64 + +type TElf32_Phdr = struct { + Fp_type TElf32_Word + Fp_offset TElf32_Off + Fp_vaddr TElf32_Addr + Fp_paddr TElf32_Addr + Fp_filesz TElf32_Word + Fp_memsz TElf32_Word + Fp_flags TElf32_Word + Fp_align TElf32_Word +} + +type TElf64_Phdr = struct { + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TElf32_Dyn = struct { + Fd_tag TElf32_Sword + Fd_un struct { + Fd_ptr [0]TElf32_Addr + Fd_val TElf32_Word + } +} + +type TElf64_Dyn = struct { + Fd_tag TElf64_Sxword + Fd_un struct { + Fd_ptr [0]TElf64_Addr + Fd_val TElf64_Xword + } +} + +type TElf32_Verdef = struct { + Fvd_version TElf32_Half + Fvd_flags TElf32_Half + Fvd_ndx TElf32_Half + Fvd_cnt TElf32_Half + Fvd_hash TElf32_Word + Fvd_aux TElf32_Word + Fvd_next TElf32_Word +} + +type TElf64_Verdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TElf32_Verdaux = struct { + Fvda_name TElf32_Word + Fvda_next TElf32_Word +} + +type TElf64_Verdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +type TElf32_Verneed = struct { + Fvn_version TElf32_Half + Fvn_cnt TElf32_Half + Fvn_file TElf32_Word + Fvn_aux TElf32_Word + Fvn_next TElf32_Word +} + +type TElf64_Verneed = struct { + Fvn_version TElf64_Half + Fvn_cnt TElf64_Half + Fvn_file TElf64_Word + Fvn_aux TElf64_Word + Fvn_next TElf64_Word +} + +type TElf32_Vernaux = struct { + Fvna_hash TElf32_Word + Fvna_flags TElf32_Half + Fvna_other TElf32_Half + Fvna_name TElf32_Word + Fvna_next TElf32_Word +} + +type TElf64_Vernaux = struct { + Fvna_hash TElf64_Word + Fvna_flags TElf64_Half + Fvna_other TElf64_Half + Fvna_name TElf64_Word + Fvna_next TElf64_Word +} + +type TElf32_auxv_t = struct { + Fa_type Tuint32_t + Fa_un struct { + Fa_val Tuint32_t + } +} + +type TElf64_auxv_t = struct { + Fa_type Tuint64_t + Fa_un struct { + Fa_val Tuint64_t + } +} + +type TElf32_Nhdr = struct { + Fn_namesz TElf32_Word + Fn_descsz TElf32_Word + Fn_type TElf32_Word +} + +type TElf64_Nhdr = struct { + Fn_namesz TElf64_Word + Fn_descsz TElf64_Word + Fn_type TElf64_Word +} + +type TElf32_Move = struct { + Fm_value TElf32_Xword + Fm_info TElf32_Word + Fm_poffset TElf32_Word + Fm_repeat TElf32_Half + Fm_stride TElf32_Half +} + +type TElf64_Move = struct { + Fm_value TElf64_Xword + Fm_info TElf64_Xword + Fm_poffset TElf64_Xword + Fm_repeat TElf64_Half + Fm_stride TElf64_Half +} + +type TElf32_gptab = struct { + Fgt_entry [0]struct { + Fgt_g_value TElf32_Word + Fgt_bytes TElf32_Word + } + Fgt_header struct { + Fgt_current_g_value TElf32_Word + Fgt_unused TElf32_Word + } +} + +type TElf32_RegInfo = struct { + Fri_gprmask TElf32_Word + Fri_cprmask [4]TElf32_Word + Fri_gp_value TElf32_Sword +} + +type TElf_Options = struct { + Fkind uint8 + Fsize uint8 + Fsection TElf32_Section + Finfo TElf32_Word +} + +type TElf_Options_Hw = struct { + Fhwp_flags1 TElf32_Word + Fhwp_flags2 TElf32_Word +} + +type TElf32_Lib = struct { + Fl_name TElf32_Word + Fl_time_stamp TElf32_Word + Fl_checksum TElf32_Word + Fl_version TElf32_Word + Fl_flags TElf32_Word +} + +type TElf64_Lib = struct { + Fl_name TElf64_Word + Fl_time_stamp TElf64_Word + Fl_checksum TElf64_Word + Fl_version TElf64_Word + Fl_flags TElf64_Word +} + +type TElf32_Conflict = uint32 + +type TElf_MIPS_ABIFlags_v0 = struct { + Fversion TElf32_Half + Fisa_level uint8 + Fisa_rev uint8 + Fgpr_size uint8 + Fcpr1_size uint8 + Fcpr2_size uint8 + Ffp_abi uint8 + Fisa_ext TElf32_Word + Fases TElf32_Word + Fflags1 TElf32_Word + Fflags2 TElf32_Word +} + +const _Val_GNU_MIPS_ABI_FP_ANY = 0 +const _Val_GNU_MIPS_ABI_FP_DOUBLE = 1 +const _Val_GNU_MIPS_ABI_FP_SINGLE = 2 +const _Val_GNU_MIPS_ABI_FP_SOFT = 3 +const _Val_GNU_MIPS_ABI_FP_OLD_64 = 4 +const _Val_GNU_MIPS_ABI_FP_XX = 5 +const _Val_GNU_MIPS_ABI_FP_64 = 6 +const _Val_GNU_MIPS_ABI_FP_64A = 7 +const _Val_GNU_MIPS_ABI_FP_MAX = 7 + +type Tsyscall_arg_t = int64 + +type Twchar_t = int32 + +type Tdiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tldiv_t = struct { + Fquot int64 + Frem int64 +} + +type Tlldiv_t = struct { + Fquot int64 + Frem int64 +} + +type t__locale_struct = struct { + Fcat [6]uintptr +} + +type Ttls_module = struct { + Fnext uintptr + Fimage uintptr + Flen1 Tsize_t + Fsize Tsize_t + Falign Tsize_t + Foffset Tsize_t +} + +type t__libc = struct { + Fcan_do_threads uint8 + Fthreaded uint8 + Fsecure uint8 + Fneed_locks int8 + Fthreads_minus_1 int32 + Fauxv uintptr + Ftls_head uintptr + Ftls_size Tsize_t + Ftls_align Tsize_t + Ftls_cnt Tsize_t + Fpage_size Tsize_t + Fglobal_locale t__locale_struct +} + +func Xsysconf(tls *TLS, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var cnt, i, v3 int32 + var mem, v1, v6 uint64 + var val int64 + var p5 uintptr + var _ /* lim at bp+0 */ Trlimit + var _ /* set at bp+16 */ [128]uint8 + var _ /* si at bp+144 */ Tsysinfo + _, _, _, _, _, _, _, _ = cnt, i, mem, val, v1, v3, v6, p5 + if uint64(name) >= Uint64FromInt64(502)/Uint64FromInt64(2) || !(_values1[name] != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } else { + if int32(_values1[name]) >= -int32(1) { + return int64(_values1[name]) + } else { + if int32(_values1[name]) < -int32(256) { + Xgetrlimit(tls, int32(_values1[name])&int32(16383), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur == ^Uint64FromUint64(0) { + return int64(-int32(1)) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur > uint64(0x7fffffffffffffff) { + v1 = uint64(0x7fffffffffffffff) + } else { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } + return int64(v1) + } + } + } + switch int32(uint8(_values1[name])) { + case (-Int32FromInt32(256) | Int32FromInt32(1)) & Int32FromInt32(255): + return int64(200809) + case (-Int32FromInt32(256) | Int32FromInt32(2)) & Int32FromInt32(255): + return int64(ARG_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(3)) & Int32FromInt32(255): + return int64(MQ_PRIO_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(4)) & Int32FromInt32(255): + return int64(X__libc.Fpage_size) + case (-Int32FromInt32(256) | Int32FromInt32(5)) & Int32FromInt32(255): + return int64(SEM_VALUE_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(11)) & Int32FromInt32(255): + return int64(DELAYTIMER_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(6)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(7)) & Int32FromInt32(255): + *(*[128]uint8)(unsafe.Pointer(bp + 16)) = [128]uint8{ + 0: uint8(1), + } + X__syscall3(tls, int64(SYS_sched_getaffinity), int64(Int32FromInt32(0)), int64(Uint64FromInt64(128)), int64(bp+16)) + v3 = Int32FromInt32(0) + cnt = v3 + i = v3 + for { + if !(uint64(i) < uint64(128)) { + break + } + for { + if !((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i] != 0) { + break + } + goto _4 + _4: + ; + p5 = bp + 16 + uintptr(i) + *(*uint8)(unsafe.Pointer(p5)) = uint8(int32(*(*uint8)(unsafe.Pointer(p5))) & (int32((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i]) - Int32FromInt32(1))) + cnt++ + } + goto _2 + _2: + ; + i++ + } + return int64(cnt) + case (-Int32FromInt32(256) | Int32FromInt32(8)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(9)) & Int32FromInt32(255): + X__lsysinfo(tls, bp+144) + if !((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit != 0) { + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit = uint32(1) + } + if name == int32(_SC_PHYS_PAGES) { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ftotalram + } else { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ffreeram + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fbufferram + } + mem *= uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit) + mem /= X__libc.Fpage_size + if mem > uint64(0x7fffffffffffffff) { + v6 = uint64(0x7fffffffffffffff) + } else { + v6 = mem + } + return int64(v6) + case (-Int32FromInt32(256) | Int32FromInt32(12)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(13)) & Int32FromInt32(255): + val = int64(X__getauxval(tls, uint64(AT_MINSIGSTKSZ))) + if val < int64(MINSIGSTKSZ) { + val = int64(MINSIGSTKSZ) + } + if int32(_values1[name]) == -Int32FromInt32(256)|Int32FromInt32(13) { + val += int64(Int32FromInt32(SIGSTKSZ) - Int32FromInt32(MINSIGSTKSZ)) + } + return val + case (-Int32FromInt32(256) | Int32FromInt32(10)) & Int32FromInt32(255): + return 0 + } + return int64(_values1[name]) +} + +var _values1 = [251]int16{ + 0: int16(-Int32FromInt32(256) | Int32FromInt32(2)), + 1: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NPROC)), + 2: int16(100), + 3: int16(32), + 4: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NOFILE)), + 5: int16(-int32(1)), + 6: int16(TZNAME_MAX), + 7: int16(1), + 8: int16(1), + 9: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 10: int16(-int32(1)), + 11: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 12: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 13: int16(-int32(1)), + 14: int16(-int32(1)), + 15: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 16: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 17: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 18: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 19: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 20: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 21: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 22: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 23: int16(-int32(1)), + 24: int16(-int32(1)), + 25: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 26: int16(-Int32FromInt32(256) | Int32FromInt32(11)), + 27: int16(-int32(1)), + 28: int16(-Int32FromInt32(256) | Int32FromInt32(3)), + 29: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 30: int16(-Int32FromInt32(256) | Int32FromInt32(4)), + 31: int16(Int32FromInt32(_NSIG) - Int32FromInt32(1) - Int32FromInt32(31) - Int32FromInt32(3)), + 32: int16(SEM_NSEMS_MAX), + 33: int16(-Int32FromInt32(256) | Int32FromInt32(5)), + 34: int16(-int32(1)), + 35: int16(-int32(1)), + 36: int16(_POSIX2_BC_BASE_MAX), + 37: int16(_POSIX2_BC_DIM_MAX), + 38: int16(_POSIX2_BC_SCALE_MAX), + 39: int16(_POSIX2_BC_STRING_MAX), + 40: int16(COLL_WEIGHTS_MAX), + 42: int16(-int32(1)), + 43: int16(-int32(1)), + 44: int16(RE_DUP_MAX), + 46: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 47: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 48: int16(-int32(1)), + 49: int16(-int32(1)), + 50: int16(-int32(1)), + 51: int16(-int32(1)), + 52: int16(-int32(1)), + 60: int16(IOV_MAX), + 67: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 68: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 69: int16(-int32(1)), + 70: int16(-int32(1)), + 71: int16(256), + 72: int16(TTY_NAME_MAX), + 73: int16(PTHREAD_DESTRUCTOR_ITERATIONS), + 74: int16(PTHREAD_KEYS_MAX), + 75: int16(PTHREAD_STACK_MIN), + 76: int16(-int32(1)), + 77: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 78: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 79: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 80: int16(-int32(1)), + 81: int16(-int32(1)), + 82: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 83: int16(-Int32FromInt32(256) | Int32FromInt32(6)), + 84: int16(-Int32FromInt32(256) | Int32FromInt32(7)), + 85: int16(-Int32FromInt32(256) | Int32FromInt32(8)), + 86: int16(-Int32FromInt32(256) | Int32FromInt32(9)), + 87: int16(-int32(1)), + 88: int16(-int32(1)), + 89: int16(_XOPEN_VERSION), + 90: int16(_XOPEN_VERSION), + 91: int16(1), + 92: int16(-int32(1)), + 93: int16(1), + 94: int16(1), + 95: int16(-int32(1)), + 97: int16(-int32(1)), + 98: int16(-int32(1)), + 99: int16(-int32(1)), + 100: int16(-int32(1)), + 109: int16(NZERO), + 125: int16(-int32(1)), + 126: int16(-int32(1)), + 127: int16(1), + 128: int16(-int32(1)), + 129: int16(-int32(1)), + 130: int16(-int32(1)), + 131: int16(-int32(1)), + 132: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 133: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 137: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 138: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 139: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 149: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 153: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 154: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 155: int16(1), + 157: int16(1), + 159: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 160: int16(-int32(1)), + 161: int16(-int32(1)), + 164: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 165: int16(-int32(1)), + 168: int16(-int32(1)), + 169: int16(-int32(1)), + 170: int16(-int32(1)), + 171: int16(-int32(1)), + 172: int16(-int32(1)), + 173: int16(SYMLOOP_MAX), + 174: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 175: int16(-int32(1)), + 176: int16(-int32(1)), + 177: int16(-int32(1)), + 178: int16(1), + 179: int16(-int32(1)), + 180: int16(HOST_NAME_MAX), + 181: int16(-int32(1)), + 182: int16(-int32(1)), + 183: int16(-int32(1)), + 184: int16(-int32(1)), + 235: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 236: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 237: int16(-int32(1)), + 238: int16(-int32(1)), + 239: int16(1), + 240: int16(-int32(1)), + 241: int16(-int32(1)), + 242: int16(-int32(1)), + 243: int16(-int32(1)), + 244: int16(-int32(1)), + 245: int16(-int32(1)), + 246: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 247: int16(-int32(1)), + 248: int16(-int32(1)), + 249: int16(-Int32FromInt32(256) | Int32FromInt32(12)), + 250: int16(-Int32FromInt32(256) | Int32FromInt32(13)), +} + +type Tcrypt_data = struct { + Finitialized int32 + F__buf [256]uint8 +} + +func Xcrypt(tls *TLS, key uintptr, salt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v, (%v:)", tls, key, salt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, uintptr(unsafe.Pointer(&_buf))) +} + +/* This buffer is sufficiently large for all + * currently-supported hash types. It needs to be updated if + * longer hashes are added. The cast to struct crypt_data * is + * purely to meet the public API requirements of the crypt_r + * function; the implementation of crypt_r uses the object + * purely as a char buffer. */ +var _buf [128]uint8 + +const BF_N = 16 + +type Tlocale_t = uintptr + +type TBF_word = uint32 + +type TBF_word_signed = int32 + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ + +type TBF_key = [18]TBF_word + +type TBF_ctx = struct { + FPS [0][1042]TBF_word + Fs struct { + FP TBF_key + FS [4][256]TBF_word + } +} + +// C documentation +// +// /* +// * Magic IV for 64 Blowfish encryptions that we do at the end. +// * The string is "OrpheanBeholderScryDoubt" on big-endian. +// */ +var _BF_magic_w = [6]TBF_word{ + 0: uint32(0x4F727068), + 1: uint32(0x65616E42), + 2: uint32(0x65686F6C), + 3: uint32(0x64657253), + 4: uint32(0x63727944), + 5: uint32(0x6F756274), +} + +// C documentation +// +// /* +// * P-box and S-box tables initialized with digits of Pi. +// */ +var _BF_init_state = *(*TBF_ctx)(unsafe.Pointer(&struct { + FP TBF_key + FS [4][256]TBF_word +}{ + FP: TBF_key{ + 0: uint32(0x243f6a88), + 1: uint32(0x85a308d3), + 2: uint32(0x13198a2e), + 3: uint32(0x03707344), + 4: uint32(0xa4093822), + 5: uint32(0x299f31d0), + 6: uint32(0x082efa98), + 7: uint32(0xec4e6c89), + 8: uint32(0x452821e6), + 9: uint32(0x38d01377), + 10: uint32(0xbe5466cf), + 11: uint32(0x34e90c6c), + 12: uint32(0xc0ac29b7), + 13: uint32(0xc97c50dd), + 14: uint32(0x3f84d5b5), + 15: uint32(0xb5470917), + 16: uint32(0x9216d5d9), + 17: uint32(0x8979fb1b), + }, + FS: [4][256]TBF_word{ + 0: { + 0: uint32(0xd1310ba6), + 1: uint32(0x98dfb5ac), + 2: uint32(0x2ffd72db), + 3: uint32(0xd01adfb7), + 4: uint32(0xb8e1afed), + 5: uint32(0x6a267e96), + 6: uint32(0xba7c9045), + 7: uint32(0xf12c7f99), + 8: uint32(0x24a19947), + 9: uint32(0xb3916cf7), + 10: uint32(0x0801f2e2), + 11: uint32(0x858efc16), + 12: uint32(0x636920d8), + 13: uint32(0x71574e69), + 14: uint32(0xa458fea3), + 15: uint32(0xf4933d7e), + 16: uint32(0x0d95748f), + 17: uint32(0x728eb658), + 18: uint32(0x718bcd58), + 19: uint32(0x82154aee), + 20: uint32(0x7b54a41d), + 21: uint32(0xc25a59b5), + 22: uint32(0x9c30d539), + 23: uint32(0x2af26013), + 24: uint32(0xc5d1b023), + 25: uint32(0x286085f0), + 26: uint32(0xca417918), + 27: uint32(0xb8db38ef), + 28: uint32(0x8e79dcb0), + 29: uint32(0x603a180e), + 30: uint32(0x6c9e0e8b), + 31: uint32(0xb01e8a3e), + 32: uint32(0xd71577c1), + 33: uint32(0xbd314b27), + 34: uint32(0x78af2fda), + 35: uint32(0x55605c60), + 36: uint32(0xe65525f3), + 37: uint32(0xaa55ab94), + 38: uint32(0x57489862), + 39: uint32(0x63e81440), + 40: uint32(0x55ca396a), + 41: uint32(0x2aab10b6), + 42: uint32(0xb4cc5c34), + 43: uint32(0x1141e8ce), + 44: uint32(0xa15486af), + 45: uint32(0x7c72e993), + 46: uint32(0xb3ee1411), + 47: uint32(0x636fbc2a), + 48: uint32(0x2ba9c55d), + 49: uint32(0x741831f6), + 50: uint32(0xce5c3e16), + 51: uint32(0x9b87931e), + 52: uint32(0xafd6ba33), + 53: uint32(0x6c24cf5c), + 54: uint32(0x7a325381), + 55: uint32(0x28958677), + 56: uint32(0x3b8f4898), + 57: uint32(0x6b4bb9af), + 58: uint32(0xc4bfe81b), + 59: uint32(0x66282193), + 60: uint32(0x61d809cc), + 61: uint32(0xfb21a991), + 62: uint32(0x487cac60), + 63: uint32(0x5dec8032), + 64: uint32(0xef845d5d), + 65: uint32(0xe98575b1), + 66: uint32(0xdc262302), + 67: uint32(0xeb651b88), + 68: uint32(0x23893e81), + 69: uint32(0xd396acc5), + 70: uint32(0x0f6d6ff3), + 71: uint32(0x83f44239), + 72: uint32(0x2e0b4482), + 73: uint32(0xa4842004), + 74: uint32(0x69c8f04a), + 75: uint32(0x9e1f9b5e), + 76: uint32(0x21c66842), + 77: uint32(0xf6e96c9a), + 78: uint32(0x670c9c61), + 79: uint32(0xabd388f0), + 80: uint32(0x6a51a0d2), + 81: uint32(0xd8542f68), + 82: uint32(0x960fa728), + 83: uint32(0xab5133a3), + 84: uint32(0x6eef0b6c), + 85: uint32(0x137a3be4), + 86: uint32(0xba3bf050), + 87: uint32(0x7efb2a98), + 88: uint32(0xa1f1651d), + 89: uint32(0x39af0176), + 90: uint32(0x66ca593e), + 91: uint32(0x82430e88), + 92: uint32(0x8cee8619), + 93: uint32(0x456f9fb4), + 94: uint32(0x7d84a5c3), + 95: uint32(0x3b8b5ebe), + 96: uint32(0xe06f75d8), + 97: uint32(0x85c12073), + 98: uint32(0x401a449f), + 99: uint32(0x56c16aa6), + 100: uint32(0x4ed3aa62), + 101: uint32(0x363f7706), + 102: uint32(0x1bfedf72), + 103: uint32(0x429b023d), + 104: uint32(0x37d0d724), + 105: uint32(0xd00a1248), + 106: uint32(0xdb0fead3), + 107: uint32(0x49f1c09b), + 108: uint32(0x075372c9), + 109: uint32(0x80991b7b), + 110: uint32(0x25d479d8), + 111: uint32(0xf6e8def7), + 112: uint32(0xe3fe501a), + 113: uint32(0xb6794c3b), + 114: uint32(0x976ce0bd), + 115: uint32(0x04c006ba), + 116: uint32(0xc1a94fb6), + 117: uint32(0x409f60c4), + 118: uint32(0x5e5c9ec2), + 119: uint32(0x196a2463), + 120: uint32(0x68fb6faf), + 121: uint32(0x3e6c53b5), + 122: uint32(0x1339b2eb), + 123: uint32(0x3b52ec6f), + 124: uint32(0x6dfc511f), + 125: uint32(0x9b30952c), + 126: uint32(0xcc814544), + 127: uint32(0xaf5ebd09), + 128: uint32(0xbee3d004), + 129: uint32(0xde334afd), + 130: uint32(0x660f2807), + 131: uint32(0x192e4bb3), + 132: uint32(0xc0cba857), + 133: uint32(0x45c8740f), + 134: uint32(0xd20b5f39), + 135: uint32(0xb9d3fbdb), + 136: uint32(0x5579c0bd), + 137: uint32(0x1a60320a), + 138: uint32(0xd6a100c6), + 139: uint32(0x402c7279), + 140: uint32(0x679f25fe), + 141: uint32(0xfb1fa3cc), + 142: uint32(0x8ea5e9f8), + 143: uint32(0xdb3222f8), + 144: uint32(0x3c7516df), + 145: uint32(0xfd616b15), + 146: uint32(0x2f501ec8), + 147: uint32(0xad0552ab), + 148: uint32(0x323db5fa), + 149: uint32(0xfd238760), + 150: uint32(0x53317b48), + 151: uint32(0x3e00df82), + 152: uint32(0x9e5c57bb), + 153: uint32(0xca6f8ca0), + 154: uint32(0x1a87562e), + 155: uint32(0xdf1769db), + 156: uint32(0xd542a8f6), + 157: uint32(0x287effc3), + 158: uint32(0xac6732c6), + 159: uint32(0x8c4f5573), + 160: uint32(0x695b27b0), + 161: uint32(0xbbca58c8), + 162: uint32(0xe1ffa35d), + 163: uint32(0xb8f011a0), + 164: uint32(0x10fa3d98), + 165: uint32(0xfd2183b8), + 166: uint32(0x4afcb56c), + 167: uint32(0x2dd1d35b), + 168: uint32(0x9a53e479), + 169: uint32(0xb6f84565), + 170: uint32(0xd28e49bc), + 171: uint32(0x4bfb9790), + 172: uint32(0xe1ddf2da), + 173: uint32(0xa4cb7e33), + 174: uint32(0x62fb1341), + 175: uint32(0xcee4c6e8), + 176: uint32(0xef20cada), + 177: uint32(0x36774c01), + 178: uint32(0xd07e9efe), + 179: uint32(0x2bf11fb4), + 180: uint32(0x95dbda4d), + 181: uint32(0xae909198), + 182: uint32(0xeaad8e71), + 183: uint32(0x6b93d5a0), + 184: uint32(0xd08ed1d0), + 185: uint32(0xafc725e0), + 186: uint32(0x8e3c5b2f), + 187: uint32(0x8e7594b7), + 188: uint32(0x8ff6e2fb), + 189: uint32(0xf2122b64), + 190: uint32(0x8888b812), + 191: uint32(0x900df01c), + 192: uint32(0x4fad5ea0), + 193: uint32(0x688fc31c), + 194: uint32(0xd1cff191), + 195: uint32(0xb3a8c1ad), + 196: uint32(0x2f2f2218), + 197: uint32(0xbe0e1777), + 198: uint32(0xea752dfe), + 199: uint32(0x8b021fa1), + 200: uint32(0xe5a0cc0f), + 201: uint32(0xb56f74e8), + 202: uint32(0x18acf3d6), + 203: uint32(0xce89e299), + 204: uint32(0xb4a84fe0), + 205: uint32(0xfd13e0b7), + 206: uint32(0x7cc43b81), + 207: uint32(0xd2ada8d9), + 208: uint32(0x165fa266), + 209: uint32(0x80957705), + 210: uint32(0x93cc7314), + 211: uint32(0x211a1477), + 212: uint32(0xe6ad2065), + 213: uint32(0x77b5fa86), + 214: uint32(0xc75442f5), + 215: uint32(0xfb9d35cf), + 216: uint32(0xebcdaf0c), + 217: uint32(0x7b3e89a0), + 218: uint32(0xd6411bd3), + 219: uint32(0xae1e7e49), + 220: uint32(0x00250e2d), + 221: uint32(0x2071b35e), + 222: uint32(0x226800bb), + 223: uint32(0x57b8e0af), + 224: uint32(0x2464369b), + 225: uint32(0xf009b91e), + 226: uint32(0x5563911d), + 227: uint32(0x59dfa6aa), + 228: uint32(0x78c14389), + 229: uint32(0xd95a537f), + 230: uint32(0x207d5ba2), + 231: uint32(0x02e5b9c5), + 232: uint32(0x83260376), + 233: uint32(0x6295cfa9), + 234: uint32(0x11c81968), + 235: uint32(0x4e734a41), + 236: uint32(0xb3472dca), + 237: uint32(0x7b14a94a), + 238: uint32(0x1b510052), + 239: uint32(0x9a532915), + 240: uint32(0xd60f573f), + 241: uint32(0xbc9bc6e4), + 242: uint32(0x2b60a476), + 243: uint32(0x81e67400), + 244: uint32(0x08ba6fb5), + 245: uint32(0x571be91f), + 246: uint32(0xf296ec6b), + 247: uint32(0x2a0dd915), + 248: uint32(0xb6636521), + 249: uint32(0xe7b9f9b6), + 250: uint32(0xff34052e), + 251: uint32(0xc5855664), + 252: uint32(0x53b02d5d), + 253: uint32(0xa99f8fa1), + 254: uint32(0x08ba4799), + 255: uint32(0x6e85076a), + }, + 1: { + 0: uint32(0x4b7a70e9), + 1: uint32(0xb5b32944), + 2: uint32(0xdb75092e), + 3: uint32(0xc4192623), + 4: uint32(0xad6ea6b0), + 5: uint32(0x49a7df7d), + 6: uint32(0x9cee60b8), + 7: uint32(0x8fedb266), + 8: uint32(0xecaa8c71), + 9: uint32(0x699a17ff), + 10: uint32(0x5664526c), + 11: uint32(0xc2b19ee1), + 12: uint32(0x193602a5), + 13: uint32(0x75094c29), + 14: uint32(0xa0591340), + 15: uint32(0xe4183a3e), + 16: uint32(0x3f54989a), + 17: uint32(0x5b429d65), + 18: uint32(0x6b8fe4d6), + 19: uint32(0x99f73fd6), + 20: uint32(0xa1d29c07), + 21: uint32(0xefe830f5), + 22: uint32(0x4d2d38e6), + 23: uint32(0xf0255dc1), + 24: uint32(0x4cdd2086), + 25: uint32(0x8470eb26), + 26: uint32(0x6382e9c6), + 27: uint32(0x021ecc5e), + 28: uint32(0x09686b3f), + 29: uint32(0x3ebaefc9), + 30: uint32(0x3c971814), + 31: uint32(0x6b6a70a1), + 32: uint32(0x687f3584), + 33: uint32(0x52a0e286), + 34: uint32(0xb79c5305), + 35: uint32(0xaa500737), + 36: uint32(0x3e07841c), + 37: uint32(0x7fdeae5c), + 38: uint32(0x8e7d44ec), + 39: uint32(0x5716f2b8), + 40: uint32(0xb03ada37), + 41: uint32(0xf0500c0d), + 42: uint32(0xf01c1f04), + 43: uint32(0x0200b3ff), + 44: uint32(0xae0cf51a), + 45: uint32(0x3cb574b2), + 46: uint32(0x25837a58), + 47: uint32(0xdc0921bd), + 48: uint32(0xd19113f9), + 49: uint32(0x7ca92ff6), + 50: uint32(0x94324773), + 51: uint32(0x22f54701), + 52: uint32(0x3ae5e581), + 53: uint32(0x37c2dadc), + 54: uint32(0xc8b57634), + 55: uint32(0x9af3dda7), + 56: uint32(0xa9446146), + 57: uint32(0x0fd0030e), + 58: uint32(0xecc8c73e), + 59: uint32(0xa4751e41), + 60: uint32(0xe238cd99), + 61: uint32(0x3bea0e2f), + 62: uint32(0x3280bba1), + 63: uint32(0x183eb331), + 64: uint32(0x4e548b38), + 65: uint32(0x4f6db908), + 66: uint32(0x6f420d03), + 67: uint32(0xf60a04bf), + 68: uint32(0x2cb81290), + 69: uint32(0x24977c79), + 70: uint32(0x5679b072), + 71: uint32(0xbcaf89af), + 72: uint32(0xde9a771f), + 73: uint32(0xd9930810), + 74: uint32(0xb38bae12), + 75: uint32(0xdccf3f2e), + 76: uint32(0x5512721f), + 77: uint32(0x2e6b7124), + 78: uint32(0x501adde6), + 79: uint32(0x9f84cd87), + 80: uint32(0x7a584718), + 81: uint32(0x7408da17), + 82: uint32(0xbc9f9abc), + 83: uint32(0xe94b7d8c), + 84: uint32(0xec7aec3a), + 85: uint32(0xdb851dfa), + 86: uint32(0x63094366), + 87: uint32(0xc464c3d2), + 88: uint32(0xef1c1847), + 89: uint32(0x3215d908), + 90: uint32(0xdd433b37), + 91: uint32(0x24c2ba16), + 92: uint32(0x12a14d43), + 93: uint32(0x2a65c451), + 94: uint32(0x50940002), + 95: uint32(0x133ae4dd), + 96: uint32(0x71dff89e), + 97: uint32(0x10314e55), + 98: uint32(0x81ac77d6), + 99: uint32(0x5f11199b), + 100: uint32(0x043556f1), + 101: uint32(0xd7a3c76b), + 102: uint32(0x3c11183b), + 103: uint32(0x5924a509), + 104: uint32(0xf28fe6ed), + 105: uint32(0x97f1fbfa), + 106: uint32(0x9ebabf2c), + 107: uint32(0x1e153c6e), + 108: uint32(0x86e34570), + 109: uint32(0xeae96fb1), + 110: uint32(0x860e5e0a), + 111: uint32(0x5a3e2ab3), + 112: uint32(0x771fe71c), + 113: uint32(0x4e3d06fa), + 114: uint32(0x2965dcb9), + 115: uint32(0x99e71d0f), + 116: uint32(0x803e89d6), + 117: uint32(0x5266c825), + 118: uint32(0x2e4cc978), + 119: uint32(0x9c10b36a), + 120: uint32(0xc6150eba), + 121: uint32(0x94e2ea78), + 122: uint32(0xa5fc3c53), + 123: uint32(0x1e0a2df4), + 124: uint32(0xf2f74ea7), + 125: uint32(0x361d2b3d), + 126: uint32(0x1939260f), + 127: uint32(0x19c27960), + 128: uint32(0x5223a708), + 129: uint32(0xf71312b6), + 130: uint32(0xebadfe6e), + 131: uint32(0xeac31f66), + 132: uint32(0xe3bc4595), + 133: uint32(0xa67bc883), + 134: uint32(0xb17f37d1), + 135: uint32(0x018cff28), + 136: uint32(0xc332ddef), + 137: uint32(0xbe6c5aa5), + 138: uint32(0x65582185), + 139: uint32(0x68ab9802), + 140: uint32(0xeecea50f), + 141: uint32(0xdb2f953b), + 142: uint32(0x2aef7dad), + 143: uint32(0x5b6e2f84), + 144: uint32(0x1521b628), + 145: uint32(0x29076170), + 146: uint32(0xecdd4775), + 147: uint32(0x619f1510), + 148: uint32(0x13cca830), + 149: uint32(0xeb61bd96), + 150: uint32(0x0334fe1e), + 151: uint32(0xaa0363cf), + 152: uint32(0xb5735c90), + 153: uint32(0x4c70a239), + 154: uint32(0xd59e9e0b), + 155: uint32(0xcbaade14), + 156: uint32(0xeecc86bc), + 157: uint32(0x60622ca7), + 158: uint32(0x9cab5cab), + 159: uint32(0xb2f3846e), + 160: uint32(0x648b1eaf), + 161: uint32(0x19bdf0ca), + 162: uint32(0xa02369b9), + 163: uint32(0x655abb50), + 164: uint32(0x40685a32), + 165: uint32(0x3c2ab4b3), + 166: uint32(0x319ee9d5), + 167: uint32(0xc021b8f7), + 168: uint32(0x9b540b19), + 169: uint32(0x875fa099), + 170: uint32(0x95f7997e), + 171: uint32(0x623d7da8), + 172: uint32(0xf837889a), + 173: uint32(0x97e32d77), + 174: uint32(0x11ed935f), + 175: uint32(0x16681281), + 176: uint32(0x0e358829), + 177: uint32(0xc7e61fd6), + 178: uint32(0x96dedfa1), + 179: uint32(0x7858ba99), + 180: uint32(0x57f584a5), + 181: uint32(0x1b227263), + 182: uint32(0x9b83c3ff), + 183: uint32(0x1ac24696), + 184: uint32(0xcdb30aeb), + 185: uint32(0x532e3054), + 186: uint32(0x8fd948e4), + 187: uint32(0x6dbc3128), + 188: uint32(0x58ebf2ef), + 189: uint32(0x34c6ffea), + 190: uint32(0xfe28ed61), + 191: uint32(0xee7c3c73), + 192: uint32(0x5d4a14d9), + 193: uint32(0xe864b7e3), + 194: uint32(0x42105d14), + 195: uint32(0x203e13e0), + 196: uint32(0x45eee2b6), + 197: uint32(0xa3aaabea), + 198: uint32(0xdb6c4f15), + 199: uint32(0xfacb4fd0), + 200: uint32(0xc742f442), + 201: uint32(0xef6abbb5), + 202: uint32(0x654f3b1d), + 203: uint32(0x41cd2105), + 204: uint32(0xd81e799e), + 205: uint32(0x86854dc7), + 206: uint32(0xe44b476a), + 207: uint32(0x3d816250), + 208: uint32(0xcf62a1f2), + 209: uint32(0x5b8d2646), + 210: uint32(0xfc8883a0), + 211: uint32(0xc1c7b6a3), + 212: uint32(0x7f1524c3), + 213: uint32(0x69cb7492), + 214: uint32(0x47848a0b), + 215: uint32(0x5692b285), + 216: uint32(0x095bbf00), + 217: uint32(0xad19489d), + 218: uint32(0x1462b174), + 219: uint32(0x23820e00), + 220: uint32(0x58428d2a), + 221: uint32(0x0c55f5ea), + 222: uint32(0x1dadf43e), + 223: uint32(0x233f7061), + 224: uint32(0x3372f092), + 225: uint32(0x8d937e41), + 226: uint32(0xd65fecf1), + 227: uint32(0x6c223bdb), + 228: uint32(0x7cde3759), + 229: uint32(0xcbee7460), + 230: uint32(0x4085f2a7), + 231: uint32(0xce77326e), + 232: uint32(0xa6078084), + 233: uint32(0x19f8509e), + 234: uint32(0xe8efd855), + 235: uint32(0x61d99735), + 236: uint32(0xa969a7aa), + 237: uint32(0xc50c06c2), + 238: uint32(0x5a04abfc), + 239: uint32(0x800bcadc), + 240: uint32(0x9e447a2e), + 241: uint32(0xc3453484), + 242: uint32(0xfdd56705), + 243: uint32(0x0e1e9ec9), + 244: uint32(0xdb73dbd3), + 245: uint32(0x105588cd), + 246: uint32(0x675fda79), + 247: uint32(0xe3674340), + 248: uint32(0xc5c43465), + 249: uint32(0x713e38d8), + 250: uint32(0x3d28f89e), + 251: uint32(0xf16dff20), + 252: uint32(0x153e21e7), + 253: uint32(0x8fb03d4a), + 254: uint32(0xe6e39f2b), + 255: uint32(0xdb83adf7), + }, + 2: { + 0: uint32(0xe93d5a68), + 1: uint32(0x948140f7), + 2: uint32(0xf64c261c), + 3: uint32(0x94692934), + 4: uint32(0x411520f7), + 5: uint32(0x7602d4f7), + 6: uint32(0xbcf46b2e), + 7: uint32(0xd4a20068), + 8: uint32(0xd4082471), + 9: uint32(0x3320f46a), + 10: uint32(0x43b7d4b7), + 11: uint32(0x500061af), + 12: uint32(0x1e39f62e), + 13: uint32(0x97244546), + 14: uint32(0x14214f74), + 15: uint32(0xbf8b8840), + 16: uint32(0x4d95fc1d), + 17: uint32(0x96b591af), + 18: uint32(0x70f4ddd3), + 19: uint32(0x66a02f45), + 20: uint32(0xbfbc09ec), + 21: uint32(0x03bd9785), + 22: uint32(0x7fac6dd0), + 23: uint32(0x31cb8504), + 24: uint32(0x96eb27b3), + 25: uint32(0x55fd3941), + 26: uint32(0xda2547e6), + 27: uint32(0xabca0a9a), + 28: uint32(0x28507825), + 29: uint32(0x530429f4), + 30: uint32(0x0a2c86da), + 31: uint32(0xe9b66dfb), + 32: uint32(0x68dc1462), + 33: uint32(0xd7486900), + 34: uint32(0x680ec0a4), + 35: uint32(0x27a18dee), + 36: uint32(0x4f3ffea2), + 37: uint32(0xe887ad8c), + 38: uint32(0xb58ce006), + 39: uint32(0x7af4d6b6), + 40: uint32(0xaace1e7c), + 41: uint32(0xd3375fec), + 42: uint32(0xce78a399), + 43: uint32(0x406b2a42), + 44: uint32(0x20fe9e35), + 45: uint32(0xd9f385b9), + 46: uint32(0xee39d7ab), + 47: uint32(0x3b124e8b), + 48: uint32(0x1dc9faf7), + 49: uint32(0x4b6d1856), + 50: uint32(0x26a36631), + 51: uint32(0xeae397b2), + 52: uint32(0x3a6efa74), + 53: uint32(0xdd5b4332), + 54: uint32(0x6841e7f7), + 55: uint32(0xca7820fb), + 56: uint32(0xfb0af54e), + 57: uint32(0xd8feb397), + 58: uint32(0x454056ac), + 59: uint32(0xba489527), + 60: uint32(0x55533a3a), + 61: uint32(0x20838d87), + 62: uint32(0xfe6ba9b7), + 63: uint32(0xd096954b), + 64: uint32(0x55a867bc), + 65: uint32(0xa1159a58), + 66: uint32(0xcca92963), + 67: uint32(0x99e1db33), + 68: uint32(0xa62a4a56), + 69: uint32(0x3f3125f9), + 70: uint32(0x5ef47e1c), + 71: uint32(0x9029317c), + 72: uint32(0xfdf8e802), + 73: uint32(0x04272f70), + 74: uint32(0x80bb155c), + 75: uint32(0x05282ce3), + 76: uint32(0x95c11548), + 77: uint32(0xe4c66d22), + 78: uint32(0x48c1133f), + 79: uint32(0xc70f86dc), + 80: uint32(0x07f9c9ee), + 81: uint32(0x41041f0f), + 82: uint32(0x404779a4), + 83: uint32(0x5d886e17), + 84: uint32(0x325f51eb), + 85: uint32(0xd59bc0d1), + 86: uint32(0xf2bcc18f), + 87: uint32(0x41113564), + 88: uint32(0x257b7834), + 89: uint32(0x602a9c60), + 90: uint32(0xdff8e8a3), + 91: uint32(0x1f636c1b), + 92: uint32(0x0e12b4c2), + 93: uint32(0x02e1329e), + 94: uint32(0xaf664fd1), + 95: uint32(0xcad18115), + 96: uint32(0x6b2395e0), + 97: uint32(0x333e92e1), + 98: uint32(0x3b240b62), + 99: uint32(0xeebeb922), + 100: uint32(0x85b2a20e), + 101: uint32(0xe6ba0d99), + 102: uint32(0xde720c8c), + 103: uint32(0x2da2f728), + 104: uint32(0xd0127845), + 105: uint32(0x95b794fd), + 106: uint32(0x647d0862), + 107: uint32(0xe7ccf5f0), + 108: uint32(0x5449a36f), + 109: uint32(0x877d48fa), + 110: uint32(0xc39dfd27), + 111: uint32(0xf33e8d1e), + 112: uint32(0x0a476341), + 113: uint32(0x992eff74), + 114: uint32(0x3a6f6eab), + 115: uint32(0xf4f8fd37), + 116: uint32(0xa812dc60), + 117: uint32(0xa1ebddf8), + 118: uint32(0x991be14c), + 119: uint32(0xdb6e6b0d), + 120: uint32(0xc67b5510), + 121: uint32(0x6d672c37), + 122: uint32(0x2765d43b), + 123: uint32(0xdcd0e804), + 124: uint32(0xf1290dc7), + 125: uint32(0xcc00ffa3), + 126: uint32(0xb5390f92), + 127: uint32(0x690fed0b), + 128: uint32(0x667b9ffb), + 129: uint32(0xcedb7d9c), + 130: uint32(0xa091cf0b), + 131: uint32(0xd9155ea3), + 132: uint32(0xbb132f88), + 133: uint32(0x515bad24), + 134: uint32(0x7b9479bf), + 135: uint32(0x763bd6eb), + 136: uint32(0x37392eb3), + 137: uint32(0xcc115979), + 138: uint32(0x8026e297), + 139: uint32(0xf42e312d), + 140: uint32(0x6842ada7), + 141: uint32(0xc66a2b3b), + 142: uint32(0x12754ccc), + 143: uint32(0x782ef11c), + 144: uint32(0x6a124237), + 145: uint32(0xb79251e7), + 146: uint32(0x06a1bbe6), + 147: uint32(0x4bfb6350), + 148: uint32(0x1a6b1018), + 149: uint32(0x11caedfa), + 150: uint32(0x3d25bdd8), + 151: uint32(0xe2e1c3c9), + 152: uint32(0x44421659), + 153: uint32(0x0a121386), + 154: uint32(0xd90cec6e), + 155: uint32(0xd5abea2a), + 156: uint32(0x64af674e), + 157: uint32(0xda86a85f), + 158: uint32(0xbebfe988), + 159: uint32(0x64e4c3fe), + 160: uint32(0x9dbc8057), + 161: uint32(0xf0f7c086), + 162: uint32(0x60787bf8), + 163: uint32(0x6003604d), + 164: uint32(0xd1fd8346), + 165: uint32(0xf6381fb0), + 166: uint32(0x7745ae04), + 167: uint32(0xd736fccc), + 168: uint32(0x83426b33), + 169: uint32(0xf01eab71), + 170: uint32(0xb0804187), + 171: uint32(0x3c005e5f), + 172: uint32(0x77a057be), + 173: uint32(0xbde8ae24), + 174: uint32(0x55464299), + 175: uint32(0xbf582e61), + 176: uint32(0x4e58f48f), + 177: uint32(0xf2ddfda2), + 178: uint32(0xf474ef38), + 179: uint32(0x8789bdc2), + 180: uint32(0x5366f9c3), + 181: uint32(0xc8b38e74), + 182: uint32(0xb475f255), + 183: uint32(0x46fcd9b9), + 184: uint32(0x7aeb2661), + 185: uint32(0x8b1ddf84), + 186: uint32(0x846a0e79), + 187: uint32(0x915f95e2), + 188: uint32(0x466e598e), + 189: uint32(0x20b45770), + 190: uint32(0x8cd55591), + 191: uint32(0xc902de4c), + 192: uint32(0xb90bace1), + 193: uint32(0xbb8205d0), + 194: uint32(0x11a86248), + 195: uint32(0x7574a99e), + 196: uint32(0xb77f19b6), + 197: uint32(0xe0a9dc09), + 198: uint32(0x662d09a1), + 199: uint32(0xc4324633), + 200: uint32(0xe85a1f02), + 201: uint32(0x09f0be8c), + 202: uint32(0x4a99a025), + 203: uint32(0x1d6efe10), + 204: uint32(0x1ab93d1d), + 205: uint32(0x0ba5a4df), + 206: uint32(0xa186f20f), + 207: uint32(0x2868f169), + 208: uint32(0xdcb7da83), + 209: uint32(0x573906fe), + 210: uint32(0xa1e2ce9b), + 211: uint32(0x4fcd7f52), + 212: uint32(0x50115e01), + 213: uint32(0xa70683fa), + 214: uint32(0xa002b5c4), + 215: uint32(0x0de6d027), + 216: uint32(0x9af88c27), + 217: uint32(0x773f8641), + 218: uint32(0xc3604c06), + 219: uint32(0x61a806b5), + 220: uint32(0xf0177a28), + 221: uint32(0xc0f586e0), + 222: uint32(0x006058aa), + 223: uint32(0x30dc7d62), + 224: uint32(0x11e69ed7), + 225: uint32(0x2338ea63), + 226: uint32(0x53c2dd94), + 227: uint32(0xc2c21634), + 228: uint32(0xbbcbee56), + 229: uint32(0x90bcb6de), + 230: uint32(0xebfc7da1), + 231: uint32(0xce591d76), + 232: uint32(0x6f05e409), + 233: uint32(0x4b7c0188), + 234: uint32(0x39720a3d), + 235: uint32(0x7c927c24), + 236: uint32(0x86e3725f), + 237: uint32(0x724d9db9), + 238: uint32(0x1ac15bb4), + 239: uint32(0xd39eb8fc), + 240: uint32(0xed545578), + 241: uint32(0x08fca5b5), + 242: uint32(0xd83d7cd3), + 243: uint32(0x4dad0fc4), + 244: uint32(0x1e50ef5e), + 245: uint32(0xb161e6f8), + 246: uint32(0xa28514d9), + 247: uint32(0x6c51133c), + 248: uint32(0x6fd5c7e7), + 249: uint32(0x56e14ec4), + 250: uint32(0x362abfce), + 251: uint32(0xddc6c837), + 252: uint32(0xd79a3234), + 253: uint32(0x92638212), + 254: uint32(0x670efa8e), + 255: uint32(0x406000e0), + }, + 3: { + 0: uint32(0x3a39ce37), + 1: uint32(0xd3faf5cf), + 2: uint32(0xabc27737), + 3: uint32(0x5ac52d1b), + 4: uint32(0x5cb0679e), + 5: uint32(0x4fa33742), + 6: uint32(0xd3822740), + 7: uint32(0x99bc9bbe), + 8: uint32(0xd5118e9d), + 9: uint32(0xbf0f7315), + 10: uint32(0xd62d1c7e), + 11: uint32(0xc700c47b), + 12: uint32(0xb78c1b6b), + 13: uint32(0x21a19045), + 14: uint32(0xb26eb1be), + 15: uint32(0x6a366eb4), + 16: uint32(0x5748ab2f), + 17: uint32(0xbc946e79), + 18: uint32(0xc6a376d2), + 19: uint32(0x6549c2c8), + 20: uint32(0x530ff8ee), + 21: uint32(0x468dde7d), + 22: uint32(0xd5730a1d), + 23: uint32(0x4cd04dc6), + 24: uint32(0x2939bbdb), + 25: uint32(0xa9ba4650), + 26: uint32(0xac9526e8), + 27: uint32(0xbe5ee304), + 28: uint32(0xa1fad5f0), + 29: uint32(0x6a2d519a), + 30: uint32(0x63ef8ce2), + 31: uint32(0x9a86ee22), + 32: uint32(0xc089c2b8), + 33: uint32(0x43242ef6), + 34: uint32(0xa51e03aa), + 35: uint32(0x9cf2d0a4), + 36: uint32(0x83c061ba), + 37: uint32(0x9be96a4d), + 38: uint32(0x8fe51550), + 39: uint32(0xba645bd6), + 40: uint32(0x2826a2f9), + 41: uint32(0xa73a3ae1), + 42: uint32(0x4ba99586), + 43: uint32(0xef5562e9), + 44: uint32(0xc72fefd3), + 45: uint32(0xf752f7da), + 46: uint32(0x3f046f69), + 47: uint32(0x77fa0a59), + 48: uint32(0x80e4a915), + 49: uint32(0x87b08601), + 50: uint32(0x9b09e6ad), + 51: uint32(0x3b3ee593), + 52: uint32(0xe990fd5a), + 53: uint32(0x9e34d797), + 54: uint32(0x2cf0b7d9), + 55: uint32(0x022b8b51), + 56: uint32(0x96d5ac3a), + 57: uint32(0x017da67d), + 58: uint32(0xd1cf3ed6), + 59: uint32(0x7c7d2d28), + 60: uint32(0x1f9f25cf), + 61: uint32(0xadf2b89b), + 62: uint32(0x5ad6b472), + 63: uint32(0x5a88f54c), + 64: uint32(0xe029ac71), + 65: uint32(0xe019a5e6), + 66: uint32(0x47b0acfd), + 67: uint32(0xed93fa9b), + 68: uint32(0xe8d3c48d), + 69: uint32(0x283b57cc), + 70: uint32(0xf8d56629), + 71: uint32(0x79132e28), + 72: uint32(0x785f0191), + 73: uint32(0xed756055), + 74: uint32(0xf7960e44), + 75: uint32(0xe3d35e8c), + 76: uint32(0x15056dd4), + 77: uint32(0x88f46dba), + 78: uint32(0x03a16125), + 79: uint32(0x0564f0bd), + 80: uint32(0xc3eb9e15), + 81: uint32(0x3c9057a2), + 82: uint32(0x97271aec), + 83: uint32(0xa93a072a), + 84: uint32(0x1b3f6d9b), + 85: uint32(0x1e6321f5), + 86: uint32(0xf59c66fb), + 87: uint32(0x26dcf319), + 88: uint32(0x7533d928), + 89: uint32(0xb155fdf5), + 90: uint32(0x03563482), + 91: uint32(0x8aba3cbb), + 92: uint32(0x28517711), + 93: uint32(0xc20ad9f8), + 94: uint32(0xabcc5167), + 95: uint32(0xccad925f), + 96: uint32(0x4de81751), + 97: uint32(0x3830dc8e), + 98: uint32(0x379d5862), + 99: uint32(0x9320f991), + 100: uint32(0xea7a90c2), + 101: uint32(0xfb3e7bce), + 102: uint32(0x5121ce64), + 103: uint32(0x774fbe32), + 104: uint32(0xa8b6e37e), + 105: uint32(0xc3293d46), + 106: uint32(0x48de5369), + 107: uint32(0x6413e680), + 108: uint32(0xa2ae0810), + 109: uint32(0xdd6db224), + 110: uint32(0x69852dfd), + 111: uint32(0x09072166), + 112: uint32(0xb39a460a), + 113: uint32(0x6445c0dd), + 114: uint32(0x586cdecf), + 115: uint32(0x1c20c8ae), + 116: uint32(0x5bbef7dd), + 117: uint32(0x1b588d40), + 118: uint32(0xccd2017f), + 119: uint32(0x6bb4e3bb), + 120: uint32(0xdda26a7e), + 121: uint32(0x3a59ff45), + 122: uint32(0x3e350a44), + 123: uint32(0xbcb4cdd5), + 124: uint32(0x72eacea8), + 125: uint32(0xfa6484bb), + 126: uint32(0x8d6612ae), + 127: uint32(0xbf3c6f47), + 128: uint32(0xd29be463), + 129: uint32(0x542f5d9e), + 130: uint32(0xaec2771b), + 131: uint32(0xf64e6370), + 132: uint32(0x740e0d8d), + 133: uint32(0xe75b1357), + 134: uint32(0xf8721671), + 135: uint32(0xaf537d5d), + 136: uint32(0x4040cb08), + 137: uint32(0x4eb4e2cc), + 138: uint32(0x34d2466a), + 139: uint32(0x0115af84), + 140: uint32(0xe1b00428), + 141: uint32(0x95983a1d), + 142: uint32(0x06b89fb4), + 143: uint32(0xce6ea048), + 144: uint32(0x6f3f3b82), + 145: uint32(0x3520ab82), + 146: uint32(0x011a1d4b), + 147: uint32(0x277227f8), + 148: uint32(0x611560b1), + 149: uint32(0xe7933fdc), + 150: uint32(0xbb3a792b), + 151: uint32(0x344525bd), + 152: uint32(0xa08839e1), + 153: uint32(0x51ce794b), + 154: uint32(0x2f32c9b7), + 155: uint32(0xa01fbac9), + 156: uint32(0xe01cc87e), + 157: uint32(0xbcc7d1f6), + 158: uint32(0xcf0111c3), + 159: uint32(0xa1e8aac7), + 160: uint32(0x1a908749), + 161: uint32(0xd44fbd9a), + 162: uint32(0xd0dadecb), + 163: uint32(0xd50ada38), + 164: uint32(0x0339c32a), + 165: uint32(0xc6913667), + 166: uint32(0x8df9317c), + 167: uint32(0xe0b12b4f), + 168: uint32(0xf79e59b7), + 169: uint32(0x43f5bb3a), + 170: uint32(0xf2d519ff), + 171: uint32(0x27d9459c), + 172: uint32(0xbf97222c), + 173: uint32(0x15e6fc2a), + 174: uint32(0x0f91fc71), + 175: uint32(0x9b941525), + 176: uint32(0xfae59361), + 177: uint32(0xceb69ceb), + 178: uint32(0xc2a86459), + 179: uint32(0x12baa8d1), + 180: uint32(0xb6c1075e), + 181: uint32(0xe3056a0c), + 182: uint32(0x10d25065), + 183: uint32(0xcb03a442), + 184: uint32(0xe0ec6e0e), + 185: uint32(0x1698db3b), + 186: uint32(0x4c98a0be), + 187: uint32(0x3278e964), + 188: uint32(0x9f1f9532), + 189: uint32(0xe0d392df), + 190: uint32(0xd3a0342b), + 191: uint32(0x8971f21e), + 192: uint32(0x1b0a7441), + 193: uint32(0x4ba3348c), + 194: uint32(0xc5be7120), + 195: uint32(0xc37632d8), + 196: uint32(0xdf359f8d), + 197: uint32(0x9b992f2e), + 198: uint32(0xe60b6f47), + 199: uint32(0x0fe3f11d), + 200: uint32(0xe54cda54), + 201: uint32(0x1edad891), + 202: uint32(0xce6279cf), + 203: uint32(0xcd3e7e6f), + 204: uint32(0x1618b166), + 205: uint32(0xfd2c1d05), + 206: uint32(0x848fd2c5), + 207: uint32(0xf6fb2299), + 208: uint32(0xf523f357), + 209: uint32(0xa6327623), + 210: uint32(0x93a83531), + 211: uint32(0x56cccd02), + 212: uint32(0xacf08162), + 213: uint32(0x5a75ebb5), + 214: uint32(0x6e163697), + 215: uint32(0x88d273cc), + 216: uint32(0xde966292), + 217: uint32(0x81b949d0), + 218: uint32(0x4c50901b), + 219: uint32(0x71c65614), + 220: uint32(0xe6c6c7bd), + 221: uint32(0x327a140a), + 222: uint32(0x45e1d006), + 223: uint32(0xc3f27b9a), + 224: uint32(0xc9aa53fd), + 225: uint32(0x62a80f00), + 226: uint32(0xbb25bfe2), + 227: uint32(0x35bdd2f6), + 228: uint32(0x71126905), + 229: uint32(0xb2040222), + 230: uint32(0xb6cbcf7c), + 231: uint32(0xcd769c2b), + 232: uint32(0x53113ec0), + 233: uint32(0x1640e3d3), + 234: uint32(0x38abbd60), + 235: uint32(0x2547adf0), + 236: uint32(0xba38209c), + 237: uint32(0xf746ce76), + 238: uint32(0x77afa1c5), + 239: uint32(0x20756060), + 240: uint32(0x85cbfe4e), + 241: uint32(0x8ae88dd8), + 242: uint32(0x7aaaf9b0), + 243: uint32(0x4cf9aa7e), + 244: uint32(0x1948c25c), + 245: uint32(0x02fb8a8c), + 246: uint32(0x01c36ae4), + 247: uint32(0xd6ebe1f9), + 248: uint32(0x90d4f869), + 249: uint32(0xa65cdea0), + 250: uint32(0x3f09252d), + 251: uint32(0xc208e69f), + 252: uint32(0xb74e6132), + 253: uint32(0xce77e25b), + 254: uint32(0x578fdfe3), + 255: uint32(0x3ac372e6), + }, + }, +})) + +var _BF_itoa64 = [65]uint8{'.', '/', '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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +var _BF_atoi64 = [96]uint8{ + 0: uint8(64), + 1: uint8(64), + 2: uint8(64), + 3: uint8(64), + 4: uint8(64), + 5: uint8(64), + 6: uint8(64), + 7: uint8(64), + 8: uint8(64), + 9: uint8(64), + 10: uint8(64), + 11: uint8(64), + 12: uint8(64), + 13: uint8(64), + 15: uint8(1), + 16: uint8(54), + 17: uint8(55), + 18: uint8(56), + 19: uint8(57), + 20: uint8(58), + 21: uint8(59), + 22: uint8(60), + 23: uint8(61), + 24: uint8(62), + 25: uint8(63), + 26: uint8(64), + 27: uint8(64), + 28: uint8(64), + 29: uint8(64), + 30: uint8(64), + 31: uint8(64), + 32: uint8(64), + 33: uint8(2), + 34: uint8(3), + 35: uint8(4), + 36: uint8(5), + 37: uint8(6), + 38: uint8(7), + 39: uint8(8), + 40: uint8(9), + 41: uint8(10), + 42: uint8(11), + 43: uint8(12), + 44: uint8(13), + 45: uint8(14), + 46: uint8(15), + 47: uint8(16), + 48: uint8(17), + 49: uint8(18), + 50: uint8(19), + 51: uint8(20), + 52: uint8(21), + 53: uint8(22), + 54: uint8(23), + 55: uint8(24), + 56: uint8(25), + 57: uint8(26), + 58: uint8(27), + 59: uint8(64), + 60: uint8(64), + 61: uint8(64), + 62: uint8(64), + 63: uint8(64), + 64: uint8(64), + 65: uint8(28), + 66: uint8(29), + 67: uint8(30), + 68: uint8(31), + 69: uint8(32), + 70: uint8(33), + 71: uint8(34), + 72: uint8(35), + 73: uint8(36), + 74: uint8(37), + 75: uint8(38), + 76: uint8(39), + 77: uint8(40), + 78: uint8(41), + 79: uint8(42), + 80: uint8(43), + 81: uint8(44), + 82: uint8(45), + 83: uint8(46), + 84: uint8(47), + 85: uint8(48), + 86: uint8(49), + 87: uint8(50), + 88: uint8(51), + 89: uint8(52), + 90: uint8(53), + 91: uint8(64), + 92: uint8(64), + 93: uint8(64), + 94: uint8(64), + 95: uint8(64), +} + +func _BF_decode(tls *TLS, dst uintptr, src uintptr, size int32) (r int32) { + var c1, c2, c3, c4, tmp uint32 + var dptr, end, sptr, v1, v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, c2, c3, c4, dptr, end, sptr, tmp, v1, v2, v3, v4, v5, v6, v7 + dptr = dst + end = dptr + uintptr(size) + sptr = src + for cond := true; cond; cond = dptr < end { + v1 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v1))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c1 = tmp + v2 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v2))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c2 = tmp + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(c1<>int32(4)) + if dptr >= end { + break + } + v4 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v4))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c3 = tmp + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(c2&uint32(0x0F)<>int32(2)) + if dptr >= end { + break + } + v6 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v6))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c4 = tmp + v7 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(c3&uint32(0x03)<>int32(2)] + c1 = c1 & uint32(0x03) << int32(4) + if sptr >= end { + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = _BF_itoa64[c1] + break + } + v4 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v4))) + c1 |= c2 >> int32(4) + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = _BF_itoa64[c1] + c1 = c2 & uint32(0x0f) << int32(2) + if sptr >= end { + v6 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v6)) = _BF_itoa64[c1] + break + } + v7 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v7))) + c1 |= c2 >> int32(6) + v8 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v8)) = _BF_itoa64[c1] + v9 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v9)) = _BF_itoa64[c2&uint32(0x3f)] + } +} + +func _BF_swap(tls *TLS, x uintptr, count int32) { + var tmp TBF_word + var v1, v2 int32 + var v4 uintptr + _, _, _, _ = tmp, v1, v2, v4 + v1 = int32(1) + if *(*uint8)(unsafe.Pointer(&v1)) != 0 { + for { + tmp = *(*TBF_word)(unsafe.Pointer(x)) + tmp = tmp<>Int32FromInt32(16) + v4 = x + x += 4 + *(*TBF_word)(unsafe.Pointer(v4)) = tmp&uint32(0x00FF00FF)<>Int32FromInt32(8)&uint32(0x00FF00FF) + goto _3 + _3: + ; + count-- + v2 = count + if !(v2 != 0) { + break + } + } + } +} + +func _BF_encrypt(tls *TLS, ctx uintptr, L TBF_word, R TBF_word, start uintptr, end uintptr) (r TBF_word) { + var i int32 + var ptr, v2, v3 uintptr + var tmp1, tmp2, tmp3, tmp4 TBF_word + _, _, _, _, _, _, _, _ = i, ptr, tmp1, tmp2, tmp3, tmp4, v2, v3 + ptr = start + for cond := true; cond; cond = ptr < end { + L ^= *(*TBF_word)(unsafe.Pointer(ctx)) + i = 0 + for { + if !(i < int32(16)) { + break + } + tmp1 = L & uint32(0xFF) + tmp2 = L >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = L >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = L >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + R ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1))*4)) + tmp3 += tmp1 + R ^= tmp3 + tmp1 = R & uint32(0xFF) + tmp2 = R >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = R >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = R >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + L ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1)+int32(1))*4)) + tmp3 += tmp1 + L ^= tmp3 + goto _1 + _1: + ; + i += int32(2) + } + tmp4 = R + R = L + L = tmp4 ^ *(*TBF_word)(unsafe.Pointer(ctx + uintptr(Int32FromInt32(BF_N)+Int32FromInt32(1))*4)) + v2 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v2)) = L + v3 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v3)) = R + } + return L +} + +func _BF_set_key(tls *TLS, key uintptr, expanded uintptr, initial uintptr, flags uint8) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bug, i, j uint32 + var diff, safety, sign, v1, v3 TBF_word + var ptr uintptr + var _ /* tmp at bp+0 */ [2]TBF_word + _, _, _, _, _, _, _, _, _ = bug, diff, i, j, ptr, safety, sign, v1, v3 + ptr = key + /* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = uint32(int32(flags) & int32(1)) + safety = uint32(flags) & uint32(2) << int32(15) + v1 = Uint32FromInt32(0) + diff = v1 + sign = v1 + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(BF_N)+Int32FromInt32(2))) { + break + } + v3 = Uint32FromInt32(0) + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] = v3 + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] = v3 + j = uint32(0) + for { + if !(j < uint32(4)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp)) |= uint32(*(*uint8)(unsafe.Pointer(ptr))) /* correct */ + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) |= uint32(int8(*(*uint8)(unsafe.Pointer(ptr)))) /* bug */ + /* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if j != 0 { + sign |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] & uint32(0x80) + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + ptr = key + } else { + ptr++ + } + goto _4 + _4: + ; + j++ + } + diff |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] /* Non-zero on any differences */ + *(*TBF_word)(unsafe.Pointer(expanded + uintptr(i)*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + *(*TBF_word)(unsafe.Pointer(initial + uintptr(i)*4)) = *(*TBF_word)(unsafe.Pointer(uintptr(unsafe.Pointer(&_BF_init_state)) + uintptr(i)*4)) ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + goto _2 + _2: + ; + i++ + } + /* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> int32(16) /* still zero iff exact match */ + diff &= uint32(0xffff) /* ditto */ + diff += uint32(0xffff) /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= uint32(9) /* move the non-benign sign extension flag to bit 16 */ + sign &= ^diff & safety /* action needed? */ + /* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + *(*TBF_word)(unsafe.Pointer(initial)) ^= sign +} + +var _flags_by_subtype = [26]uint8{ + 0: uint8(2), + 1: uint8(4), + 23: uint8(1), + 24: uint8(4), +} + +func _BF_crypt(tls *TLS, key uintptr, setting uintptr, output uintptr, min TBF_word) (r uintptr) { + bp := tls.Alloc(4272) + defer tls.Free(4272) + var L, L1, R, count, tmp1, tmp2, tmp3, tmp4, v1, v6 TBF_word + var done, i int32 + var ptr uintptr + var _ /* LR at bp+4264 */ [2]TBF_word + var _ /* data at bp+0 */ struct { + Fctx TBF_ctx + Fexpanded_key TBF_key + Fbinary struct { + Foutput [0][6]TBF_word + Fsalt [4]TBF_word + F__ccgo_pad2 [8]byte + } + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = L, L1, R, count, done, i, ptr, tmp1, tmp2, tmp3, tmp4, v1, v6 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('$') || int32(*(*uint8)(unsafe.Pointer(setting + 1))) != int32('2') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')) > uint32(25) || !(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')] != 0) || int32(*(*uint8)(unsafe.Pointer(setting + 3))) != int32('$') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0')) > uint32(1) || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 5)))-int32('0')) > uint32(9) || int32(*(*uint8)(unsafe.Pointer(setting + 6))) != int32('$') { + return UintptrFromInt32(0) + } + count = Uint32FromInt32(1) << ((int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0'))*int32(10) + (int32(*(*uint8)(unsafe.Pointer(setting + 5))) - int32('0'))) + if count < min || _BF_decode(tls, bp+4240, setting+7, int32(16)) != 0 { + return UintptrFromInt32(0) + } + _BF_swap(tls, bp+4240, int32(4)) + _BF_set_key(tls, key, bp+4168, bp, _flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + Xmemcpy(tls, bp+72, uintptr(unsafe.Pointer(&_BF_init_state))+72, uint64(4096)) + L = uint32(0) + R = uint32(0) + ptr = bp + for cond := true; cond; cond = int32(1) != 0 { + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + if ptr >= bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4 { + break + } + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + } + for { + i = 0 + for { + if !(i < Int32FromInt32(BF_N)+Int32FromInt32(2)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i)*4)) + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i+int32(1))*4)) + goto _3 + _3: + ; + i += int32(2) + } + done = 0 + for cond := true; cond; cond = int32(1) != 0 { + _BF_encrypt(tls, bp, uint32(0), uint32(0), bp, bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4) + if done != 0 { + break + } + done = int32(1) + tmp1 = *(*TBF_word)(unsafe.Pointer(bp + 4240)) + tmp2 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)) + tmp4 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)) + i = 0 + for { + if !(i < int32(BF_N)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= tmp2 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(2))*4)) ^= tmp3 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(3))*4)) ^= tmp4 + goto _4 + _4: + ; + i += int32(4) + } + *(*TBF_word)(unsafe.Pointer(bp + 16*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + 17*4)) ^= tmp2 + } + goto _2 + _2: + ; + count-- + v1 = count + if !(v1 != 0) { + break + } + } + i = 0 + for { + if !(i < int32(6)) { + break + } + L1 = _BF_magic_w[i] + (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] = _BF_magic_w[i+int32(1)] + count = uint32(64) + for { + L1 = _BF_encrypt(tls, bp, L1, (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)], bp+4264, bp+4264) + goto _7 + _7: + ; + count-- + v6 = count + if !(v6 != 0) { + break + } + } + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i)*4)) = L1 + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i+int32(1))*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] + goto _5 + _5: + ; + i += int32(2) + } + Xmemcpy(tls, output, setting, uint64(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1))) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))) = _BF_itoa64[int32(_BF_atoi64[int32(*(*uint8)(unsafe.Pointer(setting + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))))-int32(0x20)])&int32(0x30)] + /* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + _BF_swap(tls, bp+4240, int32(6)) + _BF_encode(tls, output+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), bp+4240, int32(23)) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)+Int32FromInt32(31)))) = uint8('\000') + return output +} + +// C documentation +// +// /* +// * Please preserve the runtime self-test. It serves two purposes at once: +// * +// * 1. We really can't afford the risk of producing incompatible hashes e.g. +// * when there's something like gcc bug 26587 again, whereas an application or +// * library integrating this code might not also integrate our external tests or +// * it might not run them after every build. Even if it does, the miscompile +// * might only occur on the production build, but not on a testing build (such +// * as because of different optimization settings). It is painful to recover +// * from incorrectly-computed hashes - merely fixing whatever broke is not +// * enough. Thus, a proactive measure like this self-test is needed. +// * +// * 2. We don't want to leave sensitive data from our actual password hash +// * computation on the stack or in registers. Previous revisions of the code +// * would do explicit cleanups, but simply running the self-test after hash +// * computation is more reliable. +// * +// * The performance cost of this quick self-test is around 0.6% at the "$2a$08" +// * setting. +// */ +func X__crypt_blowfish(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(384) + defer tls.Free(384) + var flags uint32 + var k, p, retval, test_hash, test_key, test_setting uintptr + var ok int32 + var _ /* ae at bp+96 */ TBF_key + var _ /* ai at bp+168 */ TBF_key + var _ /* buf at bp+0 */ struct { + Fs [30]uint8 + Fo [63]uint8 + } + var _ /* ye at bp+240 */ TBF_key + var _ /* yi at bp+312 */ TBF_key + _, _, _, _, _, _, _, _ = flags, k, ok, p, retval, test_hash, test_key, test_setting + test_key = __ccgo_ts + 18 + test_setting = __ccgo_ts + 28 + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + /* Hash the supplied password */ + retval = _BF_crypt(tls, key, setting, output, uint32(16)) + /* + * Do a quick self-test. It is important that we make both calls to BF_crypt() + * from the same scope such that they likely use the same stack locations, + * which makes the second call overwrite the first call's sensitive data on the + * stack and makes it more likely that any alignment related issues would be + * detected by the self-test. + */ + Xmemcpy(tls, bp, test_setting, uint64(30)) + if retval != 0 { + flags = uint32(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + uintptr(flags&uint32(1))*34 + *(*uint8)(unsafe.Pointer(bp + 2)) = *(*uint8)(unsafe.Pointer(setting + 2)) + } + Xmemset(tls, bp+30, int32(0x55), uint64(63)) + *(*uint8)(unsafe.Pointer(bp + 30 + uintptr(Uint64FromInt64(63)-Uint64FromInt32(1)))) = uint8(0) + p = _BF_crypt(tls, test_key, bp, bp+30, uint32(1)) + ok = BoolInt32(p == bp+30 && !(Xmemcmp(tls, p, bp, uint64(Int32FromInt32(7)+Int32FromInt32(22))) != 0) && !(Xmemcmp(tls, p+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), test_hash, uint64(Int32FromInt32(31)+Int32FromInt32(1)+Int32FromInt32(1)+Int32FromInt32(1))) != 0)) + k = __ccgo_ts + 58 + _BF_set_key(tls, k, bp+96, bp+168, uint8(2)) /* $2a$ */ + _BF_set_key(tls, k, bp+240, bp+312, uint8(4)) /* $2y$ */ + *(*TBF_word)(unsafe.Pointer(bp + 168)) ^= uint32(0x10000) /* undo the safety (for comparison) */ + ok = BoolInt32(ok != 0 && (*(*TBF_key)(unsafe.Pointer(bp + 168)))[0] == uint32(0xdb9c59bc) && (*(*TBF_key)(unsafe.Pointer(bp + 240)))[int32(17)] == uint32(0x33343500) && !(Xmemcmp(tls, bp+96, bp+240, uint64(72)) != 0) && !(Xmemcmp(tls, bp+168, bp+312, uint64(72)) != 0)) + if ok != 0 && retval != 0 { + return retval + } + return __ccgo_ts + 70 +} + +var _test_hashes = [2][34]uint8{ + 0: {'i', '1', 'D', '7', '0', '9', 'v', 'f', 'a', 'm', 'u', 'l', 'i', 'm', 'l', 'G', 'c', 'q', '0', 'q', 'q', '3', 'U', 'v', 'u', 'U', 'a', 's', 'v', 'E', 'a', 0, 'U'}, + 1: {'V', 'U', 'r', 'P', 'm', 'X', 'D', '6', 'q', '/', 'n', 'V', 'S', 'S', 'p', '7', 'p', 'N', 'D', 'h', 'C', 'R', '9', '0', '7', '1', 'I', 'f', 'I', 'R', 'e', 0, 'U'}, +} + +const _PASSWORD_EFMT1 = 95 + +type Texpanded_key = struct { + Fl [16]Tuint32_t + Fr [16]Tuint32_t +} + +var _key_shifts = [16]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(2), + 3: uint8(2), + 4: uint8(2), + 5: uint8(2), + 6: uint8(2), + 7: uint8(2), + 8: uint8(1), + 9: uint8(2), + 10: uint8(2), + 11: uint8(2), + 12: uint8(2), + 13: uint8(2), + 14: uint8(2), + 15: uint8(1), +} + +var _psbox = [8][64]Tuint32_t{ + 0: { + 0: uint32(0x00808200), + 2: uint32(0x00008000), + 3: uint32(0x00808202), + 4: uint32(0x00808002), + 5: uint32(0x00008202), + 6: uint32(0x00000002), + 7: uint32(0x00008000), + 8: uint32(0x00000200), + 9: uint32(0x00808200), + 10: uint32(0x00808202), + 11: uint32(0x00000200), + 12: uint32(0x00800202), + 13: uint32(0x00808002), + 14: uint32(0x00800000), + 15: uint32(0x00000002), + 16: uint32(0x00000202), + 17: uint32(0x00800200), + 18: uint32(0x00800200), + 19: uint32(0x00008200), + 20: uint32(0x00008200), + 21: uint32(0x00808000), + 22: uint32(0x00808000), + 23: uint32(0x00800202), + 24: uint32(0x00008002), + 25: uint32(0x00800002), + 26: uint32(0x00800002), + 27: uint32(0x00008002), + 29: uint32(0x00000202), + 30: uint32(0x00008202), + 31: uint32(0x00800000), + 32: uint32(0x00008000), + 33: uint32(0x00808202), + 34: uint32(0x00000002), + 35: uint32(0x00808000), + 36: uint32(0x00808200), + 37: uint32(0x00800000), + 38: uint32(0x00800000), + 39: uint32(0x00000200), + 40: uint32(0x00808002), + 41: uint32(0x00008000), + 42: uint32(0x00008200), + 43: uint32(0x00800002), + 44: uint32(0x00000200), + 45: uint32(0x00000002), + 46: uint32(0x00800202), + 47: uint32(0x00008202), + 48: uint32(0x00808202), + 49: uint32(0x00008002), + 50: uint32(0x00808000), + 51: uint32(0x00800202), + 52: uint32(0x00800002), + 53: uint32(0x00000202), + 54: uint32(0x00008202), + 55: uint32(0x00808200), + 56: uint32(0x00000202), + 57: uint32(0x00800200), + 58: uint32(0x00800200), + 60: uint32(0x00008002), + 61: uint32(0x00008200), + 63: uint32(0x00808002), + }, + 1: { + 0: uint32(0x40084010), + 1: uint32(0x40004000), + 2: uint32(0x00004000), + 3: uint32(0x00084010), + 4: uint32(0x00080000), + 5: uint32(0x00000010), + 6: uint32(0x40080010), + 7: uint32(0x40004010), + 8: uint32(0x40000010), + 9: uint32(0x40084010), + 10: uint32(0x40084000), + 11: uint32(0x40000000), + 12: uint32(0x40004000), + 13: uint32(0x00080000), + 14: uint32(0x00000010), + 15: uint32(0x40080010), + 16: uint32(0x00084000), + 17: uint32(0x00080010), + 18: uint32(0x40004010), + 20: uint32(0x40000000), + 21: uint32(0x00004000), + 22: uint32(0x00084010), + 23: uint32(0x40080000), + 24: uint32(0x00080010), + 25: uint32(0x40000010), + 27: uint32(0x00084000), + 28: uint32(0x00004010), + 29: uint32(0x40084000), + 30: uint32(0x40080000), + 31: uint32(0x00004010), + 33: uint32(0x00084010), + 34: uint32(0x40080010), + 35: uint32(0x00080000), + 36: uint32(0x40004010), + 37: uint32(0x40080000), + 38: uint32(0x40084000), + 39: uint32(0x00004000), + 40: uint32(0x40080000), + 41: uint32(0x40004000), + 42: uint32(0x00000010), + 43: uint32(0x40084010), + 44: uint32(0x00084010), + 45: uint32(0x00000010), + 46: uint32(0x00004000), + 47: uint32(0x40000000), + 48: uint32(0x00004010), + 49: uint32(0x40084000), + 50: uint32(0x00080000), + 51: uint32(0x40000010), + 52: uint32(0x00080010), + 53: uint32(0x40004010), + 54: uint32(0x40000010), + 55: uint32(0x00080010), + 56: uint32(0x00084000), + 58: uint32(0x40004000), + 59: uint32(0x00004010), + 60: uint32(0x40000000), + 61: uint32(0x40080010), + 62: uint32(0x40084010), + 63: uint32(0x00084000), + }, + 2: { + 0: uint32(0x00000104), + 1: uint32(0x04010100), + 3: uint32(0x04010004), + 4: uint32(0x04000100), + 6: uint32(0x00010104), + 7: uint32(0x04000100), + 8: uint32(0x00010004), + 9: uint32(0x04000004), + 10: uint32(0x04000004), + 11: uint32(0x00010000), + 12: uint32(0x04010104), + 13: uint32(0x00010004), + 14: uint32(0x04010000), + 15: uint32(0x00000104), + 16: uint32(0x04000000), + 17: uint32(0x00000004), + 18: uint32(0x04010100), + 19: uint32(0x00000100), + 20: uint32(0x00010100), + 21: uint32(0x04010000), + 22: uint32(0x04010004), + 23: uint32(0x00010104), + 24: uint32(0x04000104), + 25: uint32(0x00010100), + 26: uint32(0x00010000), + 27: uint32(0x04000104), + 28: uint32(0x00000004), + 29: uint32(0x04010104), + 30: uint32(0x00000100), + 31: uint32(0x04000000), + 32: uint32(0x04010100), + 33: uint32(0x04000000), + 34: uint32(0x00010004), + 35: uint32(0x00000104), + 36: uint32(0x00010000), + 37: uint32(0x04010100), + 38: uint32(0x04000100), + 40: uint32(0x00000100), + 41: uint32(0x00010004), + 42: uint32(0x04010104), + 43: uint32(0x04000100), + 44: uint32(0x04000004), + 45: uint32(0x00000100), + 47: uint32(0x04010004), + 48: uint32(0x04000104), + 49: uint32(0x00010000), + 50: uint32(0x04000000), + 51: uint32(0x04010104), + 52: uint32(0x00000004), + 53: uint32(0x00010104), + 54: uint32(0x00010100), + 55: uint32(0x04000004), + 56: uint32(0x04010000), + 57: uint32(0x04000104), + 58: uint32(0x00000104), + 59: uint32(0x04010000), + 60: uint32(0x00010104), + 61: uint32(0x00000004), + 62: uint32(0x04010004), + 63: uint32(0x00010100), + }, + 3: { + 0: uint32(0x80401000), + 1: uint32(0x80001040), + 2: uint32(0x80001040), + 3: uint32(0x00000040), + 4: uint32(0x00401040), + 5: uint32(0x80400040), + 6: uint32(0x80400000), + 7: uint32(0x80001000), + 9: uint32(0x00401000), + 10: uint32(0x00401000), + 11: uint32(0x80401040), + 12: uint32(0x80000040), + 14: uint32(0x00400040), + 15: uint32(0x80400000), + 16: uint32(0x80000000), + 17: uint32(0x00001000), + 18: uint32(0x00400000), + 19: uint32(0x80401000), + 20: uint32(0x00000040), + 21: uint32(0x00400000), + 22: uint32(0x80001000), + 23: uint32(0x00001040), + 24: uint32(0x80400040), + 25: uint32(0x80000000), + 26: uint32(0x00001040), + 27: uint32(0x00400040), + 28: uint32(0x00001000), + 29: uint32(0x00401040), + 30: uint32(0x80401040), + 31: uint32(0x80000040), + 32: uint32(0x00400040), + 33: uint32(0x80400000), + 34: uint32(0x00401000), + 35: uint32(0x80401040), + 36: uint32(0x80000040), + 39: uint32(0x00401000), + 40: uint32(0x00001040), + 41: uint32(0x00400040), + 42: uint32(0x80400040), + 43: uint32(0x80000000), + 44: uint32(0x80401000), + 45: uint32(0x80001040), + 46: uint32(0x80001040), + 47: uint32(0x00000040), + 48: uint32(0x80401040), + 49: uint32(0x80000040), + 50: uint32(0x80000000), + 51: uint32(0x00001000), + 52: uint32(0x80400000), + 53: uint32(0x80001000), + 54: uint32(0x00401040), + 55: uint32(0x80400040), + 56: uint32(0x80001000), + 57: uint32(0x00001040), + 58: uint32(0x00400000), + 59: uint32(0x80401000), + 60: uint32(0x00000040), + 61: uint32(0x00400000), + 62: uint32(0x00001000), + 63: uint32(0x00401040), + }, + 4: { + 0: uint32(0x00000080), + 1: uint32(0x01040080), + 2: uint32(0x01040000), + 3: uint32(0x21000080), + 4: uint32(0x00040000), + 5: uint32(0x00000080), + 6: uint32(0x20000000), + 7: uint32(0x01040000), + 8: uint32(0x20040080), + 9: uint32(0x00040000), + 10: uint32(0x01000080), + 11: uint32(0x20040080), + 12: uint32(0x21000080), + 13: uint32(0x21040000), + 14: uint32(0x00040080), + 15: uint32(0x20000000), + 16: uint32(0x01000000), + 17: uint32(0x20040000), + 18: uint32(0x20040000), + 20: uint32(0x20000080), + 21: uint32(0x21040080), + 22: uint32(0x21040080), + 23: uint32(0x01000080), + 24: uint32(0x21040000), + 25: uint32(0x20000080), + 27: uint32(0x21000000), + 28: uint32(0x01040080), + 29: uint32(0x01000000), + 30: uint32(0x21000000), + 31: uint32(0x00040080), + 32: uint32(0x00040000), + 33: uint32(0x21000080), + 34: uint32(0x00000080), + 35: uint32(0x01000000), + 36: uint32(0x20000000), + 37: uint32(0x01040000), + 38: uint32(0x21000080), + 39: uint32(0x20040080), + 40: uint32(0x01000080), + 41: uint32(0x20000000), + 42: uint32(0x21040000), + 43: uint32(0x01040080), + 44: uint32(0x20040080), + 45: uint32(0x00000080), + 46: uint32(0x01000000), + 47: uint32(0x21040000), + 48: uint32(0x21040080), + 49: uint32(0x00040080), + 50: uint32(0x21000000), + 51: uint32(0x21040080), + 52: uint32(0x01040000), + 54: uint32(0x20040000), + 55: uint32(0x21000000), + 56: uint32(0x00040080), + 57: uint32(0x01000080), + 58: uint32(0x20000080), + 59: uint32(0x00040000), + 61: uint32(0x20040000), + 62: uint32(0x01040080), + 63: uint32(0x20000080), + }, + 5: { + 0: uint32(0x10000008), + 1: uint32(0x10200000), + 2: uint32(0x00002000), + 3: uint32(0x10202008), + 4: uint32(0x10200000), + 5: uint32(0x00000008), + 6: uint32(0x10202008), + 7: uint32(0x00200000), + 8: uint32(0x10002000), + 9: uint32(0x00202008), + 10: uint32(0x00200000), + 11: uint32(0x10000008), + 12: uint32(0x00200008), + 13: uint32(0x10002000), + 14: uint32(0x10000000), + 15: uint32(0x00002008), + 17: uint32(0x00200008), + 18: uint32(0x10002008), + 19: uint32(0x00002000), + 20: uint32(0x00202000), + 21: uint32(0x10002008), + 22: uint32(0x00000008), + 23: uint32(0x10200008), + 24: uint32(0x10200008), + 26: uint32(0x00202008), + 27: uint32(0x10202000), + 28: uint32(0x00002008), + 29: uint32(0x00202000), + 30: uint32(0x10202000), + 31: uint32(0x10000000), + 32: uint32(0x10002000), + 33: uint32(0x00000008), + 34: uint32(0x10200008), + 35: uint32(0x00202000), + 36: uint32(0x10202008), + 37: uint32(0x00200000), + 38: uint32(0x00002008), + 39: uint32(0x10000008), + 40: uint32(0x00200000), + 41: uint32(0x10002000), + 42: uint32(0x10000000), + 43: uint32(0x00002008), + 44: uint32(0x10000008), + 45: uint32(0x10202008), + 46: uint32(0x00202000), + 47: uint32(0x10200000), + 48: uint32(0x00202008), + 49: uint32(0x10202000), + 51: uint32(0x10200008), + 52: uint32(0x00000008), + 53: uint32(0x00002000), + 54: uint32(0x10200000), + 55: uint32(0x00202008), + 56: uint32(0x00002000), + 57: uint32(0x00200008), + 58: uint32(0x10002008), + 60: uint32(0x10202000), + 61: uint32(0x10000000), + 62: uint32(0x00200008), + 63: uint32(0x10002008), + }, + 6: { + 0: uint32(0x00100000), + 1: uint32(0x02100001), + 2: uint32(0x02000401), + 4: uint32(0x00000400), + 5: uint32(0x02000401), + 6: uint32(0x00100401), + 7: uint32(0x02100400), + 8: uint32(0x02100401), + 9: uint32(0x00100000), + 11: uint32(0x02000001), + 12: uint32(0x00000001), + 13: uint32(0x02000000), + 14: uint32(0x02100001), + 15: uint32(0x00000401), + 16: uint32(0x02000400), + 17: uint32(0x00100401), + 18: uint32(0x00100001), + 19: uint32(0x02000400), + 20: uint32(0x02000001), + 21: uint32(0x02100000), + 22: uint32(0x02100400), + 23: uint32(0x00100001), + 24: uint32(0x02100000), + 25: uint32(0x00000400), + 26: uint32(0x00000401), + 27: uint32(0x02100401), + 28: uint32(0x00100400), + 29: uint32(0x00000001), + 30: uint32(0x02000000), + 31: uint32(0x00100400), + 32: uint32(0x02000000), + 33: uint32(0x00100400), + 34: uint32(0x00100000), + 35: uint32(0x02000401), + 36: uint32(0x02000401), + 37: uint32(0x02100001), + 38: uint32(0x02100001), + 39: uint32(0x00000001), + 40: uint32(0x00100001), + 41: uint32(0x02000000), + 42: uint32(0x02000400), + 43: uint32(0x00100000), + 44: uint32(0x02100400), + 45: uint32(0x00000401), + 46: uint32(0x00100401), + 47: uint32(0x02100400), + 48: uint32(0x00000401), + 49: uint32(0x02000001), + 50: uint32(0x02100401), + 51: uint32(0x02100000), + 52: uint32(0x00100400), + 54: uint32(0x00000001), + 55: uint32(0x02100401), + 57: uint32(0x00100401), + 58: uint32(0x02100000), + 59: uint32(0x00000400), + 60: uint32(0x02000001), + 61: uint32(0x02000400), + 62: uint32(0x00000400), + 63: uint32(0x00100001), + }, + 7: { + 0: uint32(0x08000820), + 1: uint32(0x00000800), + 2: uint32(0x00020000), + 3: uint32(0x08020820), + 4: uint32(0x08000000), + 5: uint32(0x08000820), + 6: uint32(0x00000020), + 7: uint32(0x08000000), + 8: uint32(0x00020020), + 9: uint32(0x08020000), + 10: uint32(0x08020820), + 11: uint32(0x00020800), + 12: uint32(0x08020800), + 13: uint32(0x00020820), + 14: uint32(0x00000800), + 15: uint32(0x00000020), + 16: uint32(0x08020000), + 17: uint32(0x08000020), + 18: uint32(0x08000800), + 19: uint32(0x00000820), + 20: uint32(0x00020800), + 21: uint32(0x00020020), + 22: uint32(0x08020020), + 23: uint32(0x08020800), + 24: uint32(0x00000820), + 27: uint32(0x08020020), + 28: uint32(0x08000020), + 29: uint32(0x08000800), + 30: uint32(0x00020820), + 31: uint32(0x00020000), + 32: uint32(0x00020820), + 33: uint32(0x00020000), + 34: uint32(0x08020800), + 35: uint32(0x00000800), + 36: uint32(0x00000020), + 37: uint32(0x08020020), + 38: uint32(0x00000800), + 39: uint32(0x00020820), + 40: uint32(0x08000800), + 41: uint32(0x00000020), + 42: uint32(0x08000020), + 43: uint32(0x08020000), + 44: uint32(0x08020020), + 45: uint32(0x08000000), + 46: uint32(0x00020000), + 47: uint32(0x08000820), + 49: uint32(0x08020820), + 50: uint32(0x00020020), + 51: uint32(0x08000020), + 52: uint32(0x08020000), + 53: uint32(0x08000800), + 54: uint32(0x08000820), + 56: uint32(0x08020820), + 57: uint32(0x00020800), + 58: uint32(0x00020800), + 59: uint32(0x00000820), + 60: uint32(0x00000820), + 61: uint32(0x00020020), + 62: uint32(0x08000000), + 63: uint32(0x08020800), + }, +} +var _ip_maskl = [16][16]Tuint32_t{ + 0: { + 1: uint32(0x00010000), + 3: uint32(0x00010000), + 4: uint32(0x01000000), + 5: uint32(0x01010000), + 6: uint32(0x01000000), + 7: uint32(0x01010000), + 9: uint32(0x00010000), + 11: uint32(0x00010000), + 12: uint32(0x01000000), + 13: uint32(0x01010000), + 14: uint32(0x01000000), + 15: uint32(0x01010000), + }, + 1: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 4: uint32(0x00000100), + 5: uint32(0x00000101), + 6: uint32(0x00000100), + 7: uint32(0x00000101), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 12: uint32(0x00000100), + 13: uint32(0x00000101), + 14: uint32(0x00000100), + 15: uint32(0x00000101), + }, + 2: { + 1: uint32(0x00020000), + 3: uint32(0x00020000), + 4: uint32(0x02000000), + 5: uint32(0x02020000), + 6: uint32(0x02000000), + 7: uint32(0x02020000), + 9: uint32(0x00020000), + 11: uint32(0x00020000), + 12: uint32(0x02000000), + 13: uint32(0x02020000), + 14: uint32(0x02000000), + 15: uint32(0x02020000), + }, + 3: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 4: uint32(0x00000200), + 5: uint32(0x00000202), + 6: uint32(0x00000200), + 7: uint32(0x00000202), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 12: uint32(0x00000200), + 13: uint32(0x00000202), + 14: uint32(0x00000200), + 15: uint32(0x00000202), + }, + 4: { + 1: uint32(0x00040000), + 3: uint32(0x00040000), + 4: uint32(0x04000000), + 5: uint32(0x04040000), + 6: uint32(0x04000000), + 7: uint32(0x04040000), + 9: uint32(0x00040000), + 11: uint32(0x00040000), + 12: uint32(0x04000000), + 13: uint32(0x04040000), + 14: uint32(0x04000000), + 15: uint32(0x04040000), + }, + 5: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 4: uint32(0x00000400), + 5: uint32(0x00000404), + 6: uint32(0x00000400), + 7: uint32(0x00000404), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 12: uint32(0x00000400), + 13: uint32(0x00000404), + 14: uint32(0x00000400), + 15: uint32(0x00000404), + }, + 6: { + 1: uint32(0x00080000), + 3: uint32(0x00080000), + 4: uint32(0x08000000), + 5: uint32(0x08080000), + 6: uint32(0x08000000), + 7: uint32(0x08080000), + 9: uint32(0x00080000), + 11: uint32(0x00080000), + 12: uint32(0x08000000), + 13: uint32(0x08080000), + 14: uint32(0x08000000), + 15: uint32(0x08080000), + }, + 7: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 4: uint32(0x00000800), + 5: uint32(0x00000808), + 6: uint32(0x00000800), + 7: uint32(0x00000808), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 12: uint32(0x00000800), + 13: uint32(0x00000808), + 14: uint32(0x00000800), + 15: uint32(0x00000808), + }, + 8: { + 1: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x10000000), + 5: uint32(0x10100000), + 6: uint32(0x10000000), + 7: uint32(0x10100000), + 9: uint32(0x00100000), + 11: uint32(0x00100000), + 12: uint32(0x10000000), + 13: uint32(0x10100000), + 14: uint32(0x10000000), + 15: uint32(0x10100000), + }, + 9: { + 1: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001010), + 6: uint32(0x00001000), + 7: uint32(0x00001010), + 9: uint32(0x00000010), + 11: uint32(0x00000010), + 12: uint32(0x00001000), + 13: uint32(0x00001010), + 14: uint32(0x00001000), + 15: uint32(0x00001010), + }, + 10: { + 1: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x20000000), + 5: uint32(0x20200000), + 6: uint32(0x20000000), + 7: uint32(0x20200000), + 9: uint32(0x00200000), + 11: uint32(0x00200000), + 12: uint32(0x20000000), + 13: uint32(0x20200000), + 14: uint32(0x20000000), + 15: uint32(0x20200000), + }, + 11: { + 1: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002020), + 6: uint32(0x00002000), + 7: uint32(0x00002020), + 9: uint32(0x00000020), + 11: uint32(0x00000020), + 12: uint32(0x00002000), + 13: uint32(0x00002020), + 14: uint32(0x00002000), + 15: uint32(0x00002020), + }, + 12: { + 1: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x40000000), + 5: uint32(0x40400000), + 6: uint32(0x40000000), + 7: uint32(0x40400000), + 9: uint32(0x00400000), + 11: uint32(0x00400000), + 12: uint32(0x40000000), + 13: uint32(0x40400000), + 14: uint32(0x40000000), + 15: uint32(0x40400000), + }, + 13: { + 1: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004040), + 6: uint32(0x00004000), + 7: uint32(0x00004040), + 9: uint32(0x00000040), + 11: uint32(0x00000040), + 12: uint32(0x00004000), + 13: uint32(0x00004040), + 14: uint32(0x00004000), + 15: uint32(0x00004040), + }, + 14: { + 1: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x80000000), + 5: uint32(0x80800000), + 6: uint32(0x80000000), + 7: uint32(0x80800000), + 9: uint32(0x00800000), + 11: uint32(0x00800000), + 12: uint32(0x80000000), + 13: uint32(0x80800000), + 14: uint32(0x80000000), + 15: uint32(0x80800000), + }, + 15: { + 1: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008080), + 6: uint32(0x00008000), + 7: uint32(0x00008080), + 9: uint32(0x00000080), + 11: uint32(0x00000080), + 12: uint32(0x00008000), + 13: uint32(0x00008080), + 14: uint32(0x00008000), + 15: uint32(0x00008080), + }, +} +var _ip_maskr = [16][16]Tuint32_t{ + 0: { + 2: uint32(0x00010000), + 3: uint32(0x00010000), + 6: uint32(0x00010000), + 7: uint32(0x00010000), + 8: uint32(0x01000000), + 9: uint32(0x01000000), + 10: uint32(0x01010000), + 11: uint32(0x01010000), + 12: uint32(0x01000000), + 13: uint32(0x01000000), + 14: uint32(0x01010000), + 15: uint32(0x01010000), + }, + 1: { + 2: uint32(0x00000001), + 3: uint32(0x00000001), + 6: uint32(0x00000001), + 7: uint32(0x00000001), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x00000101), + 11: uint32(0x00000101), + 12: uint32(0x00000100), + 13: uint32(0x00000100), + 14: uint32(0x00000101), + 15: uint32(0x00000101), + }, + 2: { + 2: uint32(0x00020000), + 3: uint32(0x00020000), + 6: uint32(0x00020000), + 7: uint32(0x00020000), + 8: uint32(0x02000000), + 9: uint32(0x02000000), + 10: uint32(0x02020000), + 11: uint32(0x02020000), + 12: uint32(0x02000000), + 13: uint32(0x02000000), + 14: uint32(0x02020000), + 15: uint32(0x02020000), + }, + 3: { + 2: uint32(0x00000002), + 3: uint32(0x00000002), + 6: uint32(0x00000002), + 7: uint32(0x00000002), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x00000202), + 11: uint32(0x00000202), + 12: uint32(0x00000200), + 13: uint32(0x00000200), + 14: uint32(0x00000202), + 15: uint32(0x00000202), + }, + 4: { + 2: uint32(0x00040000), + 3: uint32(0x00040000), + 6: uint32(0x00040000), + 7: uint32(0x00040000), + 8: uint32(0x04000000), + 9: uint32(0x04000000), + 10: uint32(0x04040000), + 11: uint32(0x04040000), + 12: uint32(0x04000000), + 13: uint32(0x04000000), + 14: uint32(0x04040000), + 15: uint32(0x04040000), + }, + 5: { + 2: uint32(0x00000004), + 3: uint32(0x00000004), + 6: uint32(0x00000004), + 7: uint32(0x00000004), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x00000404), + 11: uint32(0x00000404), + 12: uint32(0x00000400), + 13: uint32(0x00000400), + 14: uint32(0x00000404), + 15: uint32(0x00000404), + }, + 6: { + 2: uint32(0x00080000), + 3: uint32(0x00080000), + 6: uint32(0x00080000), + 7: uint32(0x00080000), + 8: uint32(0x08000000), + 9: uint32(0x08000000), + 10: uint32(0x08080000), + 11: uint32(0x08080000), + 12: uint32(0x08000000), + 13: uint32(0x08000000), + 14: uint32(0x08080000), + 15: uint32(0x08080000), + }, + 7: { + 2: uint32(0x00000008), + 3: uint32(0x00000008), + 6: uint32(0x00000008), + 7: uint32(0x00000008), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x00000808), + 11: uint32(0x00000808), + 12: uint32(0x00000800), + 13: uint32(0x00000800), + 14: uint32(0x00000808), + 15: uint32(0x00000808), + }, + 8: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 6: uint32(0x00100000), + 7: uint32(0x00100000), + 8: uint32(0x10000000), + 9: uint32(0x10000000), + 10: uint32(0x10100000), + 11: uint32(0x10100000), + 12: uint32(0x10000000), + 13: uint32(0x10000000), + 14: uint32(0x10100000), + 15: uint32(0x10100000), + }, + 9: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 6: uint32(0x00000010), + 7: uint32(0x00000010), + 8: uint32(0x00001000), + 9: uint32(0x00001000), + 10: uint32(0x00001010), + 11: uint32(0x00001010), + 12: uint32(0x00001000), + 13: uint32(0x00001000), + 14: uint32(0x00001010), + 15: uint32(0x00001010), + }, + 10: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 6: uint32(0x00200000), + 7: uint32(0x00200000), + 8: uint32(0x20000000), + 9: uint32(0x20000000), + 10: uint32(0x20200000), + 11: uint32(0x20200000), + 12: uint32(0x20000000), + 13: uint32(0x20000000), + 14: uint32(0x20200000), + 15: uint32(0x20200000), + }, + 11: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 6: uint32(0x00000020), + 7: uint32(0x00000020), + 8: uint32(0x00002000), + 9: uint32(0x00002000), + 10: uint32(0x00002020), + 11: uint32(0x00002020), + 12: uint32(0x00002000), + 13: uint32(0x00002000), + 14: uint32(0x00002020), + 15: uint32(0x00002020), + }, + 12: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 6: uint32(0x00400000), + 7: uint32(0x00400000), + 8: uint32(0x40000000), + 9: uint32(0x40000000), + 10: uint32(0x40400000), + 11: uint32(0x40400000), + 12: uint32(0x40000000), + 13: uint32(0x40000000), + 14: uint32(0x40400000), + 15: uint32(0x40400000), + }, + 13: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 6: uint32(0x00000040), + 7: uint32(0x00000040), + 8: uint32(0x00004000), + 9: uint32(0x00004000), + 10: uint32(0x00004040), + 11: uint32(0x00004040), + 12: uint32(0x00004000), + 13: uint32(0x00004000), + 14: uint32(0x00004040), + 15: uint32(0x00004040), + }, + 14: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 6: uint32(0x00800000), + 7: uint32(0x00800000), + 8: uint32(0x80000000), + 9: uint32(0x80000000), + 10: uint32(0x80800000), + 11: uint32(0x80800000), + 12: uint32(0x80000000), + 13: uint32(0x80000000), + 14: uint32(0x80800000), + 15: uint32(0x80800000), + }, + 15: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 6: uint32(0x00000080), + 7: uint32(0x00000080), + 8: uint32(0x00008000), + 9: uint32(0x00008000), + 10: uint32(0x00008080), + 11: uint32(0x00008080), + 12: uint32(0x00008000), + 13: uint32(0x00008000), + 14: uint32(0x00008080), + 15: uint32(0x00008080), + }, +} +var _fp_maskl = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _fp_maskr = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _key_perm_maskl = [8][16]Tuint32_t{ + 0: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00001010), + 7: uint32(0x00001010), + 8: uint32(0x00100000), + 9: uint32(0x00100000), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00101000), + 13: uint32(0x00101000), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 1: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002020), + 7: uint32(0x00002020), + 8: uint32(0x00200000), + 9: uint32(0x00200000), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00202000), + 13: uint32(0x00202000), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 2: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00004040), + 7: uint32(0x00004040), + 8: uint32(0x00400000), + 9: uint32(0x00400000), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00404000), + 13: uint32(0x00404000), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 3: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00008080), + 7: uint32(0x00008080), + 8: uint32(0x00800000), + 9: uint32(0x00800000), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00808000), + 13: uint32(0x00808000), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 4: { + 1: uint32(0x00000001), + 2: uint32(0x00000100), + 3: uint32(0x00000101), + 4: uint32(0x00010000), + 5: uint32(0x00010001), + 6: uint32(0x00010100), + 7: uint32(0x00010101), + 8: uint32(0x01000000), + 9: uint32(0x01000001), + 10: uint32(0x01000100), + 11: uint32(0x01000101), + 12: uint32(0x01010000), + 13: uint32(0x01010001), + 14: uint32(0x01010100), + 15: uint32(0x01010101), + }, + 5: { + 1: uint32(0x00000002), + 2: uint32(0x00000200), + 3: uint32(0x00000202), + 4: uint32(0x00020000), + 5: uint32(0x00020002), + 6: uint32(0x00020200), + 7: uint32(0x00020202), + 8: uint32(0x02000000), + 9: uint32(0x02000002), + 10: uint32(0x02000200), + 11: uint32(0x02000202), + 12: uint32(0x02020000), + 13: uint32(0x02020002), + 14: uint32(0x02020200), + 15: uint32(0x02020202), + }, + 6: { + 1: uint32(0x00000004), + 2: uint32(0x00000400), + 3: uint32(0x00000404), + 4: uint32(0x00040000), + 5: uint32(0x00040004), + 6: uint32(0x00040400), + 7: uint32(0x00040404), + 8: uint32(0x04000000), + 9: uint32(0x04000004), + 10: uint32(0x04000400), + 11: uint32(0x04000404), + 12: uint32(0x04040000), + 13: uint32(0x04040004), + 14: uint32(0x04040400), + 15: uint32(0x04040404), + }, + 7: { + 1: uint32(0x00000008), + 2: uint32(0x00000800), + 3: uint32(0x00000808), + 4: uint32(0x00080000), + 5: uint32(0x00080008), + 6: uint32(0x00080800), + 7: uint32(0x00080808), + 8: uint32(0x08000000), + 9: uint32(0x08000008), + 10: uint32(0x08000800), + 11: uint32(0x08000808), + 12: uint32(0x08080000), + 13: uint32(0x08080008), + 14: uint32(0x08080800), + 15: uint32(0x08080808), + }, +} +var _key_perm_maskr = [12][16]Tuint32_t{ + 0: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 5: uint32(0x00000001), + 7: uint32(0x00000001), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 13: uint32(0x00000001), + 15: uint32(0x00000001), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00101000), + 7: uint32(0x00101000), + 8: uint32(0x00000010), + 9: uint32(0x00000010), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00001010), + 13: uint32(0x00001010), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 2: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 5: uint32(0x00000002), + 7: uint32(0x00000002), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 13: uint32(0x00000002), + 15: uint32(0x00000002), + }, + 3: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00202000), + 7: uint32(0x00202000), + 8: uint32(0x00000020), + 9: uint32(0x00000020), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00002020), + 13: uint32(0x00002020), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 4: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 5: uint32(0x00000004), + 7: uint32(0x00000004), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 13: uint32(0x00000004), + 15: uint32(0x00000004), + }, + 5: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00404000), + 7: uint32(0x00404000), + 8: uint32(0x00000040), + 9: uint32(0x00000040), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00004040), + 13: uint32(0x00004040), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 6: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 5: uint32(0x00000008), + 7: uint32(0x00000008), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 13: uint32(0x00000008), + 15: uint32(0x00000008), + }, + 7: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00808000), + 7: uint32(0x00808000), + 8: uint32(0x00000080), + 9: uint32(0x00000080), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00008080), + 13: uint32(0x00008080), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 8: { + 2: uint32(0x01000000), + 3: uint32(0x01000000), + 4: uint32(0x00010000), + 5: uint32(0x00010000), + 6: uint32(0x01010000), + 7: uint32(0x01010000), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x01000100), + 11: uint32(0x01000100), + 12: uint32(0x00010100), + 13: uint32(0x00010100), + 14: uint32(0x01010100), + 15: uint32(0x01010100), + }, + 9: { + 2: uint32(0x02000000), + 3: uint32(0x02000000), + 4: uint32(0x00020000), + 5: uint32(0x00020000), + 6: uint32(0x02020000), + 7: uint32(0x02020000), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x02000200), + 11: uint32(0x02000200), + 12: uint32(0x00020200), + 13: uint32(0x00020200), + 14: uint32(0x02020200), + 15: uint32(0x02020200), + }, + 10: { + 2: uint32(0x04000000), + 3: uint32(0x04000000), + 4: uint32(0x00040000), + 5: uint32(0x00040000), + 6: uint32(0x04040000), + 7: uint32(0x04040000), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x04000400), + 11: uint32(0x04000400), + 12: uint32(0x00040400), + 13: uint32(0x00040400), + 14: uint32(0x04040400), + 15: uint32(0x04040400), + }, + 11: { + 2: uint32(0x08000000), + 3: uint32(0x08000000), + 4: uint32(0x00080000), + 5: uint32(0x00080000), + 6: uint32(0x08080000), + 7: uint32(0x08080000), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x08000800), + 11: uint32(0x08000800), + 12: uint32(0x00080800), + 13: uint32(0x00080800), + 14: uint32(0x08080800), + 15: uint32(0x08080800), + }, +} +var _comp_maskl0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00020000), + 2: uint32(0x00000001), + 3: uint32(0x00020001), + 4: uint32(0x00080000), + 5: uint32(0x000a0000), + 6: uint32(0x00080001), + 7: uint32(0x000a0001), + }, + 1: { + 1: uint32(0x00001000), + 3: uint32(0x00001000), + 4: uint32(0x00000040), + 5: uint32(0x00001040), + 6: uint32(0x00000040), + 7: uint32(0x00001040), + }, + 2: { + 1: uint32(0x00400000), + 2: uint32(0x00000020), + 3: uint32(0x00400020), + 4: uint32(0x00008000), + 5: uint32(0x00408000), + 6: uint32(0x00008020), + 7: uint32(0x00408020), + }, + 3: { + 1: uint32(0x00100000), + 2: uint32(0x00000800), + 3: uint32(0x00100800), + 5: uint32(0x00100000), + 6: uint32(0x00000800), + 7: uint32(0x00100800), + }, +} +var _comp_maskr0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00200000), + 2: uint32(0x00020000), + 3: uint32(0x00220000), + 4: uint32(0x00000002), + 5: uint32(0x00200002), + 6: uint32(0x00020002), + 7: uint32(0x00220002), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00000004), + 5: uint32(0x00000004), + 6: uint32(0x00100004), + 7: uint32(0x00100004), + }, + 2: { + 1: uint32(0x00004000), + 2: uint32(0x00000800), + 3: uint32(0x00004800), + 5: uint32(0x00004000), + 6: uint32(0x00000800), + 7: uint32(0x00004800), + }, + 3: { + 1: uint32(0x00400000), + 2: uint32(0x00008000), + 3: uint32(0x00408000), + 4: uint32(0x00000008), + 5: uint32(0x00400008), + 6: uint32(0x00008008), + 7: uint32(0x00408008), + }, +} +var _comp_maskl1 = [4][16]Tuint32_t{ + 0: { + 1: uint32(0x00000010), + 2: uint32(0x00004000), + 3: uint32(0x00004010), + 4: uint32(0x00040000), + 5: uint32(0x00040010), + 6: uint32(0x00044000), + 7: uint32(0x00044010), + 8: uint32(0x00000100), + 9: uint32(0x00000110), + 10: uint32(0x00004100), + 11: uint32(0x00004110), + 12: uint32(0x00040100), + 13: uint32(0x00040110), + 14: uint32(0x00044100), + 15: uint32(0x00044110), + }, + 1: { + 1: uint32(0x00800000), + 2: uint32(0x00000002), + 3: uint32(0x00800002), + 4: uint32(0x00000200), + 5: uint32(0x00800200), + 6: uint32(0x00000202), + 7: uint32(0x00800202), + 8: uint32(0x00200000), + 9: uint32(0x00a00000), + 10: uint32(0x00200002), + 11: uint32(0x00a00002), + 12: uint32(0x00200200), + 13: uint32(0x00a00200), + 14: uint32(0x00200202), + 15: uint32(0x00a00202), + }, + 2: { + 1: uint32(0x00002000), + 2: uint32(0x00000004), + 3: uint32(0x00002004), + 4: uint32(0x00000400), + 5: uint32(0x00002400), + 6: uint32(0x00000404), + 7: uint32(0x00002404), + 9: uint32(0x00002000), + 10: uint32(0x00000004), + 11: uint32(0x00002004), + 12: uint32(0x00000400), + 13: uint32(0x00002400), + 14: uint32(0x00000404), + 15: uint32(0x00002404), + }, + 3: { + 1: uint32(0x00010000), + 2: uint32(0x00000008), + 3: uint32(0x00010008), + 4: uint32(0x00000080), + 5: uint32(0x00010080), + 6: uint32(0x00000088), + 7: uint32(0x00010088), + 9: uint32(0x00010000), + 10: uint32(0x00000008), + 11: uint32(0x00010008), + 12: uint32(0x00000080), + 13: uint32(0x00010080), + 14: uint32(0x00000088), + 15: uint32(0x00010088), + }, +} +var _comp_maskr1 = [4][16]Tuint32_t{ + 0: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002080), + 7: uint32(0x00002080), + 8: uint32(0x00000001), + 9: uint32(0x00000001), + 10: uint32(0x00000081), + 11: uint32(0x00000081), + 12: uint32(0x00002001), + 13: uint32(0x00002001), + 14: uint32(0x00002081), + 15: uint32(0x00002081), + }, + 1: { + 1: uint32(0x00000010), + 2: uint32(0x00800000), + 3: uint32(0x00800010), + 4: uint32(0x00010000), + 5: uint32(0x00010010), + 6: uint32(0x00810000), + 7: uint32(0x00810010), + 8: uint32(0x00000200), + 9: uint32(0x00000210), + 10: uint32(0x00800200), + 11: uint32(0x00800210), + 12: uint32(0x00010200), + 13: uint32(0x00010210), + 14: uint32(0x00810200), + 15: uint32(0x00810210), + }, + 2: { + 1: uint32(0x00000400), + 2: uint32(0x00001000), + 3: uint32(0x00001400), + 4: uint32(0x00080000), + 5: uint32(0x00080400), + 6: uint32(0x00081000), + 7: uint32(0x00081400), + 8: uint32(0x00000020), + 9: uint32(0x00000420), + 10: uint32(0x00001020), + 11: uint32(0x00001420), + 12: uint32(0x00080020), + 13: uint32(0x00080420), + 14: uint32(0x00081020), + 15: uint32(0x00081420), + }, + 3: { + 1: uint32(0x00000100), + 2: uint32(0x00040000), + 3: uint32(0x00040100), + 5: uint32(0x00000100), + 6: uint32(0x00040000), + 7: uint32(0x00040100), + 8: uint32(0x00000040), + 9: uint32(0x00000140), + 10: uint32(0x00040040), + 11: uint32(0x00040140), + 12: uint32(0x00000040), + 13: uint32(0x00000140), + 14: uint32(0x00040040), + 15: uint32(0x00040140), + }, +} + +var _ascii64 = [65]uint8{'.', '/', '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', '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'} + +/* 0000000000111111111122222222223333333333444444444455555555556666 */ +/* 0123456789012345678901234567890123456789012345678901234567890123 */ + +// C documentation +// +// /* +// * We match the behavior of UFC-crypt on systems where "char" is signed by +// * default (the majority), regardless of char's signedness on our system. +// */ +func _ascii_to_bin(tls *TLS, ch int32) (r Tuint32_t) { + var retval, sch, v1 int32 + _, _, _ = retval, sch, v1 + if ch < int32(0x80) { + v1 = ch + } else { + v1 = -(int32(0x100) - ch) + } + sch = v1 + retval = sch - int32('.') + if sch >= int32('A') { + retval = sch - (Int32FromUint8('A') - Int32FromInt32(12)) + if sch >= int32('a') { + retval = sch - (Int32FromUint8('a') - Int32FromInt32(38)) + } + } + retval &= int32(0x3f) + return uint32(retval) +} + +// C documentation +// +// /* +// * When we choose to "support" invalid salts, nevertheless disallow those +// * containing characters that would violate the passwd file format. +// */ +func _ascii_is_unsafe(tls *TLS, ch uint8) (r int32) { + return BoolInt32(!(ch != 0) || int32(ch) == int32('\n') || int32(ch) == int32(':')) +} + +func _setup_salt(tls *TLS, salt Tuint32_t) (r Tuint32_t) { + var i uint32 + var obit, saltbit, saltbits Tuint32_t + _, _, _, _ = i, obit, saltbit, saltbits + saltbits = uint32(0) + saltbit = uint32(1) + obit = uint32(0x800000) + i = uint32(0) + for { + if !(i < uint32(24)) { + break + } + if salt&saltbit != 0 { + saltbits |= obit + } + saltbit <<= uint32(1) + obit >>= uint32(1) + goto _1 + _1: + ; + i++ + } + return saltbits +} + +func X__des_setkey(tls *TLS, key uintptr, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v ekey=%v, (%v:)", tls, key, ekey, origin(2)) + } + var i, ibit, j, round, shifts uint32 + var k0, k1, kl, kr, rawkey0, rawkey1, t0, t1, v1, v4 Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ibit, j, k0, k1, kl, kr, rawkey0, rawkey1, round, shifts, t0, t1, v1, v4 + rawkey0 = uint32(*(*uint8)(unsafe.Pointer(key + 3))) | uint32(*(*uint8)(unsafe.Pointer(key + 2)))<>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskl)) + uintptr(i+uint32(4))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j)*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) + ibit -= uint32(4) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j+uint32(1))*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(i+uint32(8))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + /* + * Rotate subkeys and do compression permutation. + */ + shifts = uint32(0) + round = uint32(0) + for { + if !(round < uint32(16)) { + break + } + shifts += uint32(_key_shifts[round]) + t0 = k0<>(Uint32FromInt32(28)-shifts) + t1 = k1<>(Uint32FromInt32(28)-shifts) + v4 = Uint32FromInt32(0) + kr = v4 + kl = v4 + ibit = uint32(25) + i = uint32(0) + for { + if !(i < uint32(4)) { + break + } + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl0)) + uintptr(i)*32 + uintptr(t0>>ibit&uint32(7))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr0)) + uintptr(i)*32 + uintptr(t1>>ibit&uint32(7))*4)) + ibit -= uint32(4) + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl1)) + uintptr(i)*64 + uintptr(t0>>ibit&uint32(0xf))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr1)) + uintptr(i)*64 + uintptr(t1>>ibit&uint32(0xf))*4)) + ibit -= uint32(3) + goto _5 + _5: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(ekey + uintptr(round)*4)) = kl + *(*Tuint32_t)(unsafe.Pointer(ekey + 64 + uintptr(round)*4)) = kr + goto _3 + _3: + ; + round++ + } +} + +// C documentation +// +// /* +// * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format. +// */ +func X__do_des(tls *TLS, l_in Tuint32_t, r_in Tuint32_t, l_out uintptr, r_out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v l_in=%v r_in=%v l_out=%v r_out=%v count=%v saltbits=%v ekey=%v, (%v:)", tls, l_in, r_in, l_out, r_out, count, saltbits, ekey, origin(2)) + } + var f, l, lo, r, r48l, r48r, ro, v1, v3, v7 Tuint32_t + var i, i1, ibit, ibit1, round, v4 uint32 + var kl, kr, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, i1, ibit, ibit1, kl, kr, l, lo, r, r48l, r48r, ro, round, v1, v3, v4, v5, v6, v7 + /* + * Do initial permutation (IP). + */ + v1 = Uint32FromInt32(0) + r = v1 + l = v1 + if l_in|r_in != 0 { + i = uint32(0) + ibit = Uint32FromInt32(28) + for { + if !(i < uint32(8)) { + break + } + l |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + r |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + } + for { + v3 = count + count-- + if !(v3 != 0) { + break + } + /* + * Do each round. + */ + round = uint32(16) + kl = ekey + kr = ekey + 64 + for { + v4 = round + round-- + if !(v4 != 0) { + break + } + /* + * Expand R to 48 bits (simulate the E-box). + */ + r48l = r&uint32(0x00000001)<>int32(9) | r&uint32(0x1f800000)>>int32(11) | r&uint32(0x01f80000)>>int32(13) | r&uint32(0x001f8000)>>int32(15) + r48r = r&uint32(0x0001f800)<>int32(31) + /* + * Do salting for crypt() and friends, and + * XOR with the permuted key. + */ + f = (r48l ^ r48r) & saltbits + v5 = kl + kl += 4 + r48l ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v5)) + v6 = kr + kr += 4 + r48r ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v6)) + /* + * Do S-box lookups (which shrink it back to 32 bits) + * and do the P-box permutation at the same time. + */ + f = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + uintptr(r48l>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 1*256 + uintptr(r48l>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 2*256 + uintptr(r48l>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 3*256 + uintptr(r48l&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 4*256 + uintptr(r48r>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 5*256 + uintptr(r48r>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 6*256 + uintptr(r48r>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 7*256 + uintptr(r48r&uint32(0x3f))*4)) + /* + * Now that we've permuted things, complete f(). + */ + f ^= l + l = r + r = f + } + r = l + l = f + } + /* + * Do final permutation (inverse of IP). + */ + v7 = Uint32FromInt32(0) + ro = v7 + lo = v7 + i1 = uint32(0) + ibit1 = Uint32FromInt32(28) + for { + if !(i1 < uint32(4)) { + break + } + ro |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + ibit1 -= uint32(4) + lo |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + goto _8 + _8: + ; + i1++ + ibit1 -= uint32(4) + } + *(*Tuint32_t)(unsafe.Pointer(l_out)) = lo + *(*Tuint32_t)(unsafe.Pointer(r_out)) = ro +} + +func _des_cipher(tls *TLS, in uintptr, out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rawl, rawr Tuint32_t + var _ /* l_out at bp+0 */ Tuint32_t + var _ /* r_out at bp+4 */ Tuint32_t + _, _ = rawl, rawr + rawl = uint32(*(*uint8)(unsafe.Pointer(in + 3))) | uint32(*(*uint8)(unsafe.Pointer(in + 2)))<> int32(24)) + *(*uint8)(unsafe.Pointer(out + 1)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 2)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 3)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp))) + *(*uint8)(unsafe.Pointer(out + 4)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(24)) + *(*uint8)(unsafe.Pointer(out + 5)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 6)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 7)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4))) +} + +func __crypt_extended_r_uut(tls *TLS, _key uintptr, _setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(144) + defer tls.Free(144) + var count, l, salt, value, value1 Tuint32_t + var i uint32 + var key, p, q, setting, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 uintptr + var _ /* ekey at bp+0 */ Texpanded_key + var _ /* keybuf at bp+128 */ [8]uint8 + var _ /* r0 at bp+136 */ Tuint32_t + var _ /* r1 at bp+140 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = count, i, key, l, p, q, salt, setting, value, value1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 + key = _key + setting = _setting + /* + * Copy the key, shifting each character left by one bit and padding + * with zeroes. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) { + v1 = q + q++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(int32(*(*uint8)(unsafe.Pointer(key))) << int32(1)) + if *(*uint8)(unsafe.Pointer(key)) != 0 { + key++ + } + } + X__des_setkey(tls, bp+128, bp) + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('_') { + /* + * "new"-style: + * setting - underscore, 4 chars of count, 4 chars of salt + * key - unlimited characters + */ + i = uint32(1) + count = Uint32FromInt32(0) + for { + if !(i < uint32(5)) { + break + } + value = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + count |= value << ((i - uint32(1)) * uint32(6)) + goto _2 + _2: + ; + i++ + } + if !(count != 0) { + return UintptrFromInt32(0) + } + i = uint32(5) + salt = Uint32FromInt32(0) + for { + if !(i < uint32(9)) { + break + } + value1 = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value1]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + salt |= value1 << ((i - uint32(5)) * uint32(6)) + goto _3 + _3: + ; + i++ + } + for *(*uint8)(unsafe.Pointer(key)) != 0 { + /* + * Encrypt the key with itself. + */ + _des_cipher(tls, bp+128, bp+128, uint32(1), uint32(0), bp) + /* + * And XOR with the next 8 characters of the key. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) && *(*uint8)(unsafe.Pointer(key)) != 0 { + v5 = q + q++ + p4 = v5 + v6 = key + key++ + *(*uint8)(unsafe.Pointer(p4)) = uint8(int32(*(*uint8)(unsafe.Pointer(p4))) ^ int32(*(*uint8)(unsafe.Pointer(v6)))<> int32(8) + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v7)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v10 = p + p++ + *(*uint8)(unsafe.Pointer(v10)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 136))<>Int32FromInt32(16)&uint32(0xffff) + v11 = p + p++ + *(*uint8)(unsafe.Pointer(v11)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v12 = p + p++ + *(*uint8)(unsafe.Pointer(v12)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v13 = p + p++ + *(*uint8)(unsafe.Pointer(v13)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v14 = p + p++ + *(*uint8)(unsafe.Pointer(v14)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 140)) << int32(2) + v15 = p + p++ + *(*uint8)(unsafe.Pointer(v15)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v16 = p + p++ + *(*uint8)(unsafe.Pointer(v16)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v17 = p + p++ + *(*uint8)(unsafe.Pointer(v17)) = _ascii64[l&uint32(0x3f)] + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return output +} + +func X__crypt_des(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var p, retval, test_hash, test_key, test_setting, v1 uintptr + var _ /* test_buf at bp+0 */ [21]uint8 + _, _, _, _, _, _ = p, retval, test_hash, test_key, test_setting, v1 + test_key = __ccgo_ts + 72 + test_setting = __ccgo_ts + 93 + test_hash = __ccgo_ts + 103 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('_') { + test_setting = __ccgo_ts + 124 + test_hash = __ccgo_ts + 127 + } + /* + * Hash the supplied password. + */ + retval = __crypt_extended_r_uut(tls, key, setting, output) + /* + * Perform a quick self-test. It is important that we make both calls + * to _crypt_extended_r_uut() from the same scope such that they likely + * use the same stack locations, which makes the second call overwrite + * the first call's sensitive data on the stack and makes it more + * likely that any alignment related issues would be detected. + */ + p = __crypt_extended_r_uut(tls, test_key, test_setting, bp) + if p != 0 && !(Xstrcmp(tls, p, test_hash) != 0) && retval != 0 { + return retval + } + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('*') { + v1 = __ccgo_ts + 141 + } else { + v1 = __ccgo_ts + 70 + } + return v1 +} + +const KEY_MAX = 30000 +const SALT_MAX = 8 + +/* public domain md5 implementation based on rfc1321 and libtomcrypt */ + +type Tmd5 = struct { + Flen1 Tuint64_t + Fh [4]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _rol(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n<>(Int32FromInt32(32)-k) +} + +var _tab = [64]Tuint32_t{ + 0: uint32(0xd76aa478), + 1: uint32(0xe8c7b756), + 2: uint32(0x242070db), + 3: uint32(0xc1bdceee), + 4: uint32(0xf57c0faf), + 5: uint32(0x4787c62a), + 6: uint32(0xa8304613), + 7: uint32(0xfd469501), + 8: uint32(0x698098d8), + 9: uint32(0x8b44f7af), + 10: uint32(0xffff5bb1), + 11: uint32(0x895cd7be), + 12: uint32(0x6b901122), + 13: uint32(0xfd987193), + 14: uint32(0xa679438e), + 15: uint32(0x49b40821), + 16: uint32(0xf61e2562), + 17: uint32(0xc040b340), + 18: uint32(0x265e5a51), + 19: uint32(0xe9b6c7aa), + 20: uint32(0xd62f105d), + 21: uint32(0x02441453), + 22: uint32(0xd8a1e681), + 23: uint32(0xe7d3fbc8), + 24: uint32(0x21e1cde6), + 25: uint32(0xc33707d6), + 26: uint32(0xf4d50d87), + 27: uint32(0x455a14ed), + 28: uint32(0xa9e3e905), + 29: uint32(0xfcefa3f8), + 30: uint32(0x676f02d9), + 31: uint32(0x8d2a4c8a), + 32: uint32(0xfffa3942), + 33: uint32(0x8771f681), + 34: uint32(0x6d9d6122), + 35: uint32(0xfde5380c), + 36: uint32(0xa4beea44), + 37: uint32(0x4bdecfa9), + 38: uint32(0xf6bb4b60), + 39: uint32(0xbebfbc70), + 40: uint32(0x289b7ec6), + 41: uint32(0xeaa127fa), + 42: uint32(0xd4ef3085), + 43: uint32(0x04881d05), + 44: uint32(0xd9d4d039), + 45: uint32(0xe6db99e5), + 46: uint32(0x1fa27cf8), + 47: uint32(0xc4ac5665), + 48: uint32(0xf4292244), + 49: uint32(0x432aff97), + 50: uint32(0xab9423a7), + 51: uint32(0xfc93a039), + 52: uint32(0x655b59c3), + 53: uint32(0x8f0ccc92), + 54: uint32(0xffeff47d), + 55: uint32(0x85845dd1), + 56: uint32(0x6fa87e4f), + 57: uint32(0xfe2ce6e0), + 58: uint32(0xa3014314), + 59: uint32(0x4e0811a1), + 60: uint32(0xf7537e82), + 61: uint32(0xbd3af235), + 62: uint32(0x2ad7d2bb), + 63: uint32(0xeb86d391), +} + +func _processblock(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, b, c, d, i Tuint32_t + var _ /* W at bp+0 */ [16]Tuint32_t + _, _, _, _, _ = a, b, c, d, i + i = uint32(0) + for { + if !(i < uint32(16)) { + break + } + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i)))) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(1))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(2))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(3))))) << int32(24) + goto _1 + _1: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + i = uint32(0) + for i < uint32(16) { + a += d ^ b&(c^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + a = _rol(tls, a, int32(7)) + b + i++ + d += c ^ a&(b^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + d = _rol(tls, d, int32(12)) + a + i++ + c += b ^ d&(a^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + c = _rol(tls, c, int32(17)) + d + i++ + b += a ^ c&(d^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + b = _rol(tls, b, int32(22)) + c + i++ + } + for i < uint32(32) { + a += c ^ d&(c^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(5)) + b + i++ + d += b ^ c&(b^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(9)) + a + i++ + c += a ^ b&(a^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(14)) + d + i++ + b += d ^ a&(d^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(20)) + c + i++ + } + for i < uint32(48) { + a += b ^ c ^ d + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(4)) + b + i++ + d += a ^ b ^ c + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(11)) + a + i++ + c += d ^ a ^ b + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(16)) + d + i++ + b += c ^ d ^ a + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(23)) + c + i++ + } + for i < uint32(64) { + a += c ^ (b | ^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(6)) + b + i++ + d += b ^ (a | ^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(10)) + a + i++ + c += a ^ (d | ^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(15)) + d + i++ + b += d ^ (c | ^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(21)) + c + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d +} + +func _pad(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 24 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock(tls, s, s+24) + } + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 56)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 57)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 58)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 59)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 60)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 61)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 62)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 63)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(56)) + _processblock(tls, s, s+24) +} + +func _md5_init(tls *TLS, s uintptr) { + (*Tmd5)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x67452301) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xefcdab89) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x98badcfe) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0x10325476) +} + +func _md5_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad(tls, s) + i = 0 + for { + if !(i < int32(4)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + goto _1 + _1: + ; + i++ + } +} + +func _md5_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+24+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+24+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock(tls, s, s+24) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+24, p, len1) +} + +/*- + * Copyright (c) 2003 Poul-Henning Kamp + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* key limit is not part of the original design, added for DoS protection */ + +var _b64 = [65]uint8{'.', '/', '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', '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'} + +func _to64(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b64[u%uint32(64)] + u /= uint32(64) + } + return s +} + +func _md5crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(112) + defer tls.Free(112) + var i, klen, slen uint32 + var p, salt, v5 uintptr + var _ /* ctx at bp+0 */ Tmd5 + var _ /* md at bp+88 */ [16]uint8 + _, _, _, _, _, _ = i, klen, p, salt, slen, v5 + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX) { + return uintptr(0) + } + /* setting: $1$salt$ (closing $ is optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+143, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + i = uint32(0) + for { + if !(i < uint32(SALT_MAX) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + goto _1 + _1: + ; + i++ + } + slen = i + /* md5(key salt key) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, salt, uint64(slen)) + _md5_update(tls, bp, key, uint64(klen)) + _md5_sum(tls, bp, bp+88) + /* md5(key $1$ salt repeated-md weird-key[0]-0) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, setting, uint64(uint32(3)+slen)) + i = klen + for { + if !(uint64(i) > uint64(16)) { + break + } + _md5_update(tls, bp, bp+88, uint64(16)) + goto _2 + _2: + ; + i = uint32(uint64(i) - Uint64FromInt64(16)) + } + _md5_update(tls, bp, bp+88, uint64(i)) + (*(*[16]uint8)(unsafe.Pointer(bp + 88)))[0] = uint8(0) + i = klen + for { + if !(i != 0) { + break + } + if i&uint32(1) != 0 { + _md5_update(tls, bp, bp+88, uint64(1)) + } else { + _md5_update(tls, bp, key, uint64(1)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _md5_sum(tls, bp, bp+88) + /* md = f(md, key, salt) iteration */ + i = uint32(0) + for { + if !(i < uint32(1000)) { + break + } + _md5_init(tls, bp) + if i%uint32(2) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } else { + _md5_update(tls, bp, bp+88, uint64(16)) + } + if i%uint32(3) != 0 { + _md5_update(tls, bp, salt, uint64(slen)) + } + if i%uint32(7) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } + if i%uint32(2) != 0 { + _md5_update(tls, bp, bp+88, uint64(16)) + } else { + _md5_update(tls, bp, key, uint64(klen)) + } + _md5_sum(tls, bp, bp+88) + goto _4 + _4: + ; + i++ + } + /* output is $1$salt$hash */ + Xmemcpy(tls, output, setting, uint64(uint32(3)+slen)) + p = output + uintptr(3) + uintptr(slen) + v5 = p + p++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('$') + i = uint32(0) + for { + if !(i < uint32(5)) { + break + } + p = _to64(tls, p, uint32(int32((*(*[16]uint8)(unsafe.Pointer(bp + 88)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var p, q uintptr + var _ /* testbuf at bp+0 */ [64]uint8 + _, _ = p, q + p = _md5crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _md5crypt(tls, uintptr(unsafe.Pointer(&_testkey)), uintptr(unsafe.Pointer(&_testsetting)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash)), uint64(35)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting = [13]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$'} + +var _testhash = [35]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$', '9', 'Q', 'c', 'g', '8', 'D', 'y', 'v', 'i', 'e', 'k', 'V', '3', 't', 'D', 'G', 'M', 'Z', 'y', 'n', 'J', '1'} + +func X__crypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + var output uintptr + _ = output + /* Per the crypt_r API, the caller has provided a pointer to + * struct crypt_data; however, this implementation does not + * use the structure to store any internal state, and treats + * it purely as a char buffer for storing the result. */ + output = data + if int32(*(*uint8)(unsafe.Pointer(salt))) == int32('$') && *(*uint8)(unsafe.Pointer(salt + 1)) != 0 && *(*uint8)(unsafe.Pointer(salt + 2)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('1') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_md5(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('2') && int32(*(*uint8)(unsafe.Pointer(salt + 3))) == int32('$') { + return X__crypt_blowfish(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('5') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha256(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('6') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha512(tls, key, salt, output) + } + } + return X__crypt_des(tls, key, salt, output) +} + +func Xcrypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, data) +} + +const KEY_MAX1 = 256 +const ROUNDS_DEFAULT = 5000 +const ROUNDS_MAX = 9999999 +const ROUNDS_MIN = 1000 +const SALT_MAX1 = 16 + +/* public domain sha256 implementation based on fips180-3 */ + +type Tsha256 = struct { + Flen1 Tuint64_t + Fh [8]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _ror(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n>>k | n<<(Int32FromInt32(32)-k) +} + +var _K = [64]Tuint32_t{ + 0: uint32(0x428a2f98), + 1: uint32(0x71374491), + 2: uint32(0xb5c0fbcf), + 3: uint32(0xe9b5dba5), + 4: uint32(0x3956c25b), + 5: uint32(0x59f111f1), + 6: uint32(0x923f82a4), + 7: uint32(0xab1c5ed5), + 8: uint32(0xd807aa98), + 9: uint32(0x12835b01), + 10: uint32(0x243185be), + 11: uint32(0x550c7dc3), + 12: uint32(0x72be5d74), + 13: uint32(0x80deb1fe), + 14: uint32(0x9bdc06a7), + 15: uint32(0xc19bf174), + 16: uint32(0xe49b69c1), + 17: uint32(0xefbe4786), + 18: uint32(0x0fc19dc6), + 19: uint32(0x240ca1cc), + 20: uint32(0x2de92c6f), + 21: uint32(0x4a7484aa), + 22: uint32(0x5cb0a9dc), + 23: uint32(0x76f988da), + 24: uint32(0x983e5152), + 25: uint32(0xa831c66d), + 26: uint32(0xb00327c8), + 27: uint32(0xbf597fc7), + 28: uint32(0xc6e00bf3), + 29: uint32(0xd5a79147), + 30: uint32(0x06ca6351), + 31: uint32(0x14292967), + 32: uint32(0x27b70a85), + 33: uint32(0x2e1b2138), + 34: uint32(0x4d2c6dfc), + 35: uint32(0x53380d13), + 36: uint32(0x650a7354), + 37: uint32(0x766a0abb), + 38: uint32(0x81c2c92e), + 39: uint32(0x92722c85), + 40: uint32(0xa2bfe8a1), + 41: uint32(0xa81a664b), + 42: uint32(0xc24b8b70), + 43: uint32(0xc76c51a3), + 44: uint32(0xd192e819), + 45: uint32(0xd6990624), + 46: uint32(0xf40e3585), + 47: uint32(0x106aa070), + 48: uint32(0x19a4c116), + 49: uint32(0x1e376c08), + 50: uint32(0x2748774c), + 51: uint32(0x34b0bcb5), + 52: uint32(0x391c0cb3), + 53: uint32(0x4ed8aa4a), + 54: uint32(0x5b9cca4f), + 55: uint32(0x682e6ff3), + 56: uint32(0x748f82ee), + 57: uint32(0x78a5636f), + 58: uint32(0x84c87814), + 59: uint32(0x8cc70208), + 60: uint32(0x90befffa), + 61: uint32(0xa4506ceb), + 62: uint32(0xbef9a3f7), + 63: uint32(0xc67178f2), +} + +func _processblock1(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var a, b, c, d, e, f, g, h, t1, t2 Tuint32_t + var i int32 + var _ /* W at bp+0 */ [64]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i)))) << int32(24) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(1))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(2))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(3))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(64)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(17)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(10) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(7)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(18)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(3)) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + e = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) + f = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) + g = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) + h = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) + i = 0 + for { + if !(i < int32(64)) { + break + } + t1 = h + (_ror(tls, e, int32(6)) ^ _ror(tls, e, int32(11)) ^ _ror(tls, e, int32(25))) + (g ^ e&(f^g)) + _K[i] + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] + t2 = _ror(tls, a, int32(2)) ^ _ror(tls, a, int32(13)) ^ _ror(tls, a, int32(22)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) += e + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) += f + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) += g + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) += h +} + +func _pad1(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 40 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock1(tls, s, s+40) + } + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 56)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 57)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 58)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 59)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 60)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 61)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 62)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 63)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1) + _processblock1(tls, s, s+40) +} + +func _sha256_init(tls *TLS, s uintptr) { + (*Tsha256)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x6a09e667) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xbb67ae85) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x3c6ef372) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0xa54ff53a) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) = uint32(0x510e527f) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) = uint32(0x9b05688c) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) = uint32(0x1f83d9ab) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) = uint32(0x5be0cd19) +} + +func _sha256_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad1(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + goto _1 + _1: + ; + i++ + } +} + +func _sha256_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+40+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+40+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock1(tls, s, s+40) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock1(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+40, p, len1) +} + +var _b641 = [65]uint8{'.', '/', '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', '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'} + +func _to641(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b641[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(32)) { + break + } + _sha256_update(tls, s, md, uint64(32)) + goto _1 + _1: + ; + i -= uint32(32) + } + _sha256_update(tls, s, md, uint64(i)) +} + +func _sha256crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(272) + defer tls.Free(272) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha256 + var _ /* end at bp+224 */ uintptr + var _ /* kmd at bp+136 */ [32]uint8 + var _ /* md at bp+104 */ [32]uint8 + var _ /* rounds at bp+200 */ [20]uint8 + var _ /* smd at bp+168 */ [32]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 200)) = [20]uint8{} + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX1)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX1) { + return uintptr(0) + } + /* setting: $5$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+147, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+224, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 224))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 224)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+200, __ccgo_ts+159, VaList(bp+240, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _1 + _1: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_sum(tls, bp, bp+104) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _hashmd(tls, bp, klen, bp+104) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _sha256_update(tls, bp, key, uint64(klen)) + } + goto _2 + _2: + ; + i >>= uint32(1) + } + _sha256_sum(tls, bp, bp+104) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha256_update(tls, bp, key, uint64(klen)) + goto _3 + _3: + ; + i++ + } + _sha256_sum(tls, bp, bp+136) + /* DS = sha(repeat-salt) */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[0]))) { + break + } + _sha256_update(tls, bp, salt, uint64(slen)) + goto _4 + _4: + ; + i++ + } + _sha256_sum(tls, bp, bp+168) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha256_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd(tls, bp, klen, bp+136) + } else { + _sha256_update(tls, bp, bp+104, uint64(32)) + } + if i%uint32(3) != 0 { + _sha256_update(tls, bp, bp+168, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd(tls, bp, klen, bp+136) + } + if i%uint32(2) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _hashmd(tls, bp, klen, bp+136) + } + _sha256_sum(tls, bp, bp+104) + goto _5 + _5: + ; + i++ + } + /* output is $5$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+170, VaList(bp+240, bp+200, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(10)) { + break + } + p = _to641(tls, p, uint32(int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm1)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha256crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha256crypt(tls, uintptr(unsafe.Pointer(&_testkey1)), uintptr(unsafe.Pointer(&_testsetting1)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash1)), uint64(73)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey1 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting1 = [30]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash1 = [73]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '3', 'V', 'f', 'D', 'j', 'P', 't', '0', '5', 'V', 'H', 'F', 'n', '4', '7', 'C', '/', 'o', 'j', 'F', 'Z', '6', 'K', 'R', 'P', 'Y', 'r', 'O', 'j', 'j', '1', 'l', 'L', 'b', 'H', '.', 'd', 'k', 'F', '3', 'b', 'Z', '6'} + +/* public domain sha512 implementation based on fips180-3 */ +/* >=2^64 bits messages are not supported (about 2000 peta bytes) */ + +type Tsha512 = struct { + Flen1 Tuint64_t + Fh [8]Tuint64_t + Fbuf [128]Tuint8_t +} + +func _ror1(tls *TLS, n Tuint64_t, k int32) (r Tuint64_t) { + return n>>k | n<<(Int32FromInt32(64)-k) +} + +var _K1 = [80]Tuint64_t{ + 0: uint64(0x428a2f98d728ae22), + 1: uint64(0x7137449123ef65cd), + 2: uint64(0xb5c0fbcfec4d3b2f), + 3: uint64(0xe9b5dba58189dbbc), + 4: uint64(0x3956c25bf348b538), + 5: uint64(0x59f111f1b605d019), + 6: uint64(0x923f82a4af194f9b), + 7: uint64(0xab1c5ed5da6d8118), + 8: uint64(0xd807aa98a3030242), + 9: uint64(0x12835b0145706fbe), + 10: uint64(0x243185be4ee4b28c), + 11: uint64(0x550c7dc3d5ffb4e2), + 12: uint64(0x72be5d74f27b896f), + 13: uint64(0x80deb1fe3b1696b1), + 14: uint64(0x9bdc06a725c71235), + 15: uint64(0xc19bf174cf692694), + 16: uint64(0xe49b69c19ef14ad2), + 17: uint64(0xefbe4786384f25e3), + 18: uint64(0x0fc19dc68b8cd5b5), + 19: uint64(0x240ca1cc77ac9c65), + 20: uint64(0x2de92c6f592b0275), + 21: uint64(0x4a7484aa6ea6e483), + 22: uint64(0x5cb0a9dcbd41fbd4), + 23: uint64(0x76f988da831153b5), + 24: uint64(0x983e5152ee66dfab), + 25: uint64(0xa831c66d2db43210), + 26: uint64(0xb00327c898fb213f), + 27: uint64(0xbf597fc7beef0ee4), + 28: uint64(0xc6e00bf33da88fc2), + 29: uint64(0xd5a79147930aa725), + 30: uint64(0x06ca6351e003826f), + 31: uint64(0x142929670a0e6e70), + 32: uint64(0x27b70a8546d22ffc), + 33: uint64(0x2e1b21385c26c926), + 34: uint64(0x4d2c6dfc5ac42aed), + 35: uint64(0x53380d139d95b3df), + 36: uint64(0x650a73548baf63de), + 37: uint64(0x766a0abb3c77b2a8), + 38: uint64(0x81c2c92e47edaee6), + 39: uint64(0x92722c851482353b), + 40: uint64(0xa2bfe8a14cf10364), + 41: uint64(0xa81a664bbc423001), + 42: uint64(0xc24b8b70d0f89791), + 43: uint64(0xc76c51a30654be30), + 44: uint64(0xd192e819d6ef5218), + 45: uint64(0xd69906245565a910), + 46: uint64(0xf40e35855771202a), + 47: uint64(0x106aa07032bbd1b8), + 48: uint64(0x19a4c116b8d2d0c8), + 49: uint64(0x1e376c085141ab53), + 50: uint64(0x2748774cdf8eeb99), + 51: uint64(0x34b0bcb5e19b48a8), + 52: uint64(0x391c0cb3c5c95a63), + 53: uint64(0x4ed8aa4ae3418acb), + 54: uint64(0x5b9cca4f7763e373), + 55: uint64(0x682e6ff3d6b2b8a3), + 56: uint64(0x748f82ee5defb2fc), + 57: uint64(0x78a5636f43172f60), + 58: uint64(0x84c87814a1f0ab72), + 59: uint64(0x8cc702081a6439ec), + 60: uint64(0x90befffa23631e28), + 61: uint64(0xa4506cebde82bde9), + 62: uint64(0xbef9a3f7b2c67915), + 63: uint64(0xc67178f2e372532b), + 64: uint64(0xca273eceea26619c), + 65: uint64(0xd186b8c721c0c207), + 66: uint64(0xeada7dd6cde0eb1e), + 67: uint64(0xf57d4f7fee6ed178), + 68: uint64(0x06f067aa72176fba), + 69: uint64(0x0a637dc5a2c898a6), + 70: uint64(0x113f9804bef90dae), + 71: uint64(0x1b710b35131c471b), + 72: uint64(0x28db77f523047d84), + 73: uint64(0x32caab7b40c72493), + 74: uint64(0x3c9ebe0a15c9bebc), + 75: uint64(0x431d67c49c100d4c), + 76: uint64(0x4cc5d4becb3e42b6), + 77: uint64(0x597f299cfc657e2a), + 78: uint64(0x5fcb6fab3ad6faec), + 79: uint64(0x6c44198c4a475817), +} + +func _processblock2(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(640) + defer tls.Free(640) + var a, b, c, d, e, f, g, h, t1, t2 Tuint64_t + var i int32 + var _ /* W at bp+0 */ [80]Tuint64_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i)))) << int32(56) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(1))))) << int32(48) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(2))))) << int32(40) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(3))))) << int32(32) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(4))))) << int32(24) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(5))))) << int32(16) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(6))))) << int32(8) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(7))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(80)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(61)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(6) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(1)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(8)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(7)) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint64_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) + c = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) + d = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) + e = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) + f = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) + g = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) + h = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) + i = 0 + for { + if !(i < int32(80)) { + break + } + t1 = h + (_ror1(tls, e, int32(14)) ^ _ror1(tls, e, int32(18)) ^ _ror1(tls, e, int32(41))) + (g ^ e&(f^g)) + _K1[i] + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] + t2 = _ror1(tls, a, int32(28)) ^ _ror1(tls, a, int32(34)) ^ _ror1(tls, a, int32(39)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint64_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) += b + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) += c + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) += d + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) += e + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) += f + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) += g + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) += h +} + +func _pad2(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 72 + uintptr(v1))) = uint8(0x80) + if r > uint32(112) { + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(128)-r)) + r = uint32(0) + _processblock2(tls, s, s+72) + } + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(120)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 120)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 121)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 122)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 123)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 124)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 125)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 126)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 127)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1) + _processblock2(tls, s, s+72) +} + +func _sha512_init(tls *TLS, s uintptr) { + (*Tsha512)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint64_t)(unsafe.Pointer(s + 8)) = uint64(0x6a09e667f3bcc908) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) = uint64(0xbb67ae8584caa73b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) = uint64(0x3c6ef372fe94f82b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) = uint64(0xa54ff53a5f1d36f1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) = uint64(0x510e527fade682d1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) = uint64(0x9b05688c2b3e6c1f) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) = uint64(0x1f83d9abfb41bd6b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) = uint64(0x5be0cd19137e2179) +} + +func _sha512_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad2(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(1)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(2)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(3)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(4)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(5)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(6)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(7)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8))) + goto _1 + _1: + ; + i++ + } +} + +func _sha512_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(128)-r) { + Xmemcpy(tls, s+72+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+72+uintptr(r), p, uint64(uint32(128)-r)) + len1 -= uint64(uint32(128) - r) + p += uintptr(uint32(128) - r) + _processblock2(tls, s, s+72) + } + for { + if !(len1 >= uint64(128)) { + break + } + _processblock2(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(128) + p += uintptr(128) + } + Xmemcpy(tls, s+72, p, len1) +} + +var _b642 = [65]uint8{'.', '/', '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', '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'} + +func _to642(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b642[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd1(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(64)) { + break + } + _sha512_update(tls, s, md, uint64(64)) + goto _1 + _1: + ; + i -= uint32(64) + } + _sha512_update(tls, s, md, uint64(i)) +} + +func _sha512crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(464) + defer tls.Free(464) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha512 + var _ /* end at bp+416 */ uintptr + var _ /* kmd at bp+264 */ [64]uint8 + var _ /* md at bp+200 */ [64]uint8 + var _ /* rounds at bp+392 */ [20]uint8 + var _ /* smd at bp+328 */ [64]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 392)) = [20]uint8{} + /* reject large keys */ + i = uint32(0) + for { + if !(i <= uint32(KEY_MAX1) && *(*uint8)(unsafe.Pointer(key + uintptr(i))) != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i > uint32(KEY_MAX1) { + return uintptr(0) + } + klen = i + /* setting: $6$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+181, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+416, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 416))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 416)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+392, __ccgo_ts+159, VaList(bp+432, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _2 + _2: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_sum(tls, bp, bp+200) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _hashmd1(tls, bp, klen, bp+200) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _sha512_update(tls, bp, key, uint64(klen)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _sha512_sum(tls, bp, bp+200) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha512_update(tls, bp, key, uint64(klen)) + goto _4 + _4: + ; + i++ + } + _sha512_sum(tls, bp, bp+264) + /* DS = sha(repeat-salt) */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[0]))) { + break + } + _sha512_update(tls, bp, salt, uint64(slen)) + goto _5 + _5: + ; + i++ + } + _sha512_sum(tls, bp, bp+328) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha512_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } else { + _sha512_update(tls, bp, bp+200, uint64(64)) + } + if i%uint32(3) != 0 { + _sha512_update(tls, bp, bp+328, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } + if i%uint32(2) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _hashmd1(tls, bp, klen, bp+264) + } + _sha512_sum(tls, bp, bp+200) + goto _6 + _6: + ; + i++ + } + /* output is $6$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+185, VaList(bp+432, bp+392, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(21)) { + break + } + p = _to642(tls, p, uint32(int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm2)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha512crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha512crypt(tls, uintptr(unsafe.Pointer(&_testkey2)), uintptr(unsafe.Pointer(&_testsetting2)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash2)), uint64(116)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey2 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting2 = [30]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash2 = [116]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', 'B', 'C', 'p', 't', '8', 'z', 'L', 'r', 'c', '/', 'R', 'c', 'y', 'u', 'X', 'm', 'C', 'D', 'O', 'E', '1', 'A', 'L', 'q', 'M', 'X', 'B', '2', 'M', 'H', '6', 'n', '1', 'g', '8', '9', '1', 'H', 'h', 'F', 'j', '8', '.', 'w', '7', 'L', 'x', 'G', 'v', '.', 'F', 'T', 'k', 'q', 'q', '6', 'V', 'x', 'c', '/', 'k', 'm', '3', 'Y', '0', 'j', 'E', '0', 'j', '2', '4', 'j', 'Y', '5', 'P', 'I', 'v', '/', 'o', 'O', 'u', '6', 'r', 'e', 'g', '1'} + +var ___encrypt_key Texpanded_key + +func Xsetkey(tls *TLS, key uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v, (%v:)", tls, key, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, j int32 + var p3 uintptr + var _ /* bkey at bp+0 */ [8]uint8 + _, _, _ = i, j, p3 + i = 0 + for { + if !(i < int32(8)) { + break + } + (*(*[8]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + j = int32(7) + for { + if !(j >= 0) { + break + } + p3 = bp + uintptr(i) + *(*uint8)(unsafe.Pointer(p3)) = uint8(uint32(*(*uint8)(unsafe.Pointer(p3))) | uint32(int32(*(*uint8)(unsafe.Pointer(key)))&Int32FromInt32(1))<= 0) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + 128 + uintptr(i)*4)) |= uint32(int32(*(*uint8)(unsafe.Pointer(p)))&Int32FromInt32(1)) << j + goto _2 + _2: + ; + j-- + p++ + } + goto _1 + _1: + ; + i++ + } + key = uintptr(unsafe.Pointer(&___encrypt_key)) + if edflag != 0 { + key = bp + i = 0 + for { + if !(i < int32(16)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + uintptr(int32(15)-i)*4)) + *(*Tuint32_t)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + 64 + uintptr(int32(15)-i)*4)) + goto _3 + _3: + ; + i++ + } + } + X__do_des(tls, (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[0], (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[int32(1)], bp+128, bp+128+uintptr(1)*4, uint32(1), uint32(0), key) + p = block + i = 0 + for { + if !(i < int32(2)) { + break + } + j = int32(31) + for { + if !(j >= 0) { + break + } + v6 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = uint8((*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[i] >> j & uint32(1)) + goto _5 + _5: + ; + j-- + } + goto _4 + _4: + ; + i++ + } +} + +var _table = [384]uint16{ + 128: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 129: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 130: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 131: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 132: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 133: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 134: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 135: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 136: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 137: uint16((Int32FromInt32(0x320)/Int32FromInt32(256) | Int32FromInt32(0x320)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 138: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 139: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 140: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 141: uint16((Int32FromInt32(0x220)/Int32FromInt32(256) | Int32FromInt32(0x220)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 142: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 143: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 144: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 145: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 146: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 147: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 148: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 149: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 150: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 151: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 152: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 153: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 154: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 155: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 156: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 157: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 158: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 159: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 160: uint16((Int32FromInt32(0x160)/Int32FromInt32(256) | Int32FromInt32(0x160)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 161: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 162: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 163: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 164: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 165: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 166: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 167: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 168: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 169: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 170: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 171: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 172: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 173: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 174: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 175: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 176: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 177: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 178: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 179: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 180: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 181: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 182: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 183: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 184: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 185: uint16((Int32FromInt32(0x8d8)/Int32FromInt32(256) | Int32FromInt32(0x8d8)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 186: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 187: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 188: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 189: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 190: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 191: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 192: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 193: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 194: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 195: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 196: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 197: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 198: uint16((Int32FromInt32(0x8d5)/Int32FromInt32(256) | Int32FromInt32(0x8d5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 199: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 200: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 201: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 202: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 203: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 204: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 205: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 206: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 207: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 208: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 209: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 210: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 211: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 212: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 213: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 214: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 215: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 216: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 217: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 218: uint16((Int32FromInt32(0x8c5)/Int32FromInt32(256) | Int32FromInt32(0x8c5)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 219: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 220: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 221: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 222: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 223: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 224: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 225: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 226: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 227: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 228: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 229: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 230: uint16((Int32FromInt32(0x8d6)/Int32FromInt32(256) | Int32FromInt32(0x8d6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 231: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 232: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 233: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 234: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 235: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 236: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 237: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 238: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 239: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 240: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 241: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 242: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 243: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 244: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 245: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 246: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 247: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 248: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 249: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 250: uint16((Int32FromInt32(0x8c6)/Int32FromInt32(256) | Int32FromInt32(0x8c6)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 251: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 252: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 253: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 254: uint16((Int32FromInt32(0x4c0)/Int32FromInt32(256) | Int32FromInt32(0x4c0)*Int32FromInt32(256)) % Int32FromInt32(65536)), + 255: uint16((Int32FromInt32(0x200)/Int32FromInt32(256) | Int32FromInt32(0x200)*Int32FromInt32(256)) % Int32FromInt32(65536)), +} + +var _ptable = uintptr(unsafe.Pointer(&_table)) + uintptr(128)*2 + +func X__ctype_b_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable)) +} + +const CLOCKS_PER_SEC = 1000000 +const CLOCK_BOOTTIME = 7 +const CLOCK_BOOTTIME_ALARM = 9 +const CLOCK_MONOTONIC = 1 +const CLOCK_MONOTONIC_COARSE = 6 +const CLOCK_MONOTONIC_RAW = 4 +const CLOCK_PROCESS_CPUTIME_ID = 2 +const CLOCK_REALTIME = 0 +const CLOCK_REALTIME_ALARM = 8 +const CLOCK_REALTIME_COARSE = 5 +const CLOCK_SGI_CYCLE = 10 +const CLOCK_TAI = 11 +const CLOCK_THREAD_CPUTIME_ID = 3 +const C_LOCALE = 0 +const DEFAULT_GUARD_MAX = 1048576 +const DEFAULT_GUARD_SIZE = 8192 +const DEFAULT_STACK_MAX = 8388608 +const DEFAULT_STACK_SIZE = 131072 +const DTP_OFFSET = 2048 +const FUTEX_CLOCK_REALTIME = 256 +const FUTEX_CMP_REQUEUE = 4 +const FUTEX_FD = 2 +const FUTEX_LOCK_PI = 6 +const FUTEX_PRIVATE = 128 +const FUTEX_REQUEUE = 3 +const FUTEX_TRYLOCK_PI = 8 +const FUTEX_UNLOCK_PI = 7 +const FUTEX_WAIT = 0 +const FUTEX_WAIT_BITSET = 9 +const FUTEX_WAKE = 1 +const FUTEX_WAKE_OP = 5 +const GAP_ABOVE_TP = 0 +const LC_ALL = 6 +const LC_ALL_MASK = 2147483647 +const LC_COLLATE = 3 +const LC_COLLATE_MASK = 8 +const LC_CTYPE = 0 +const LC_CTYPE_MASK = 1 +const LC_GLOBAL_LOCALE = -1 +const LC_MESSAGES = 5 +const LC_MESSAGES_MASK = 32 +const LC_MONETARY = 4 +const LC_MONETARY_MASK = 16 +const LC_NUMERIC = 1 +const LC_NUMERIC_MASK = 2 +const LC_TIME = 2 +const LC_TIME_MASK = 4 +const LOCALE_NAME_MAX = 23 +const MAP_ANON = 32 +const MAP_ANONYMOUS = 32 +const MAP_DENYWRITE = 2048 +const MAP_EXECUTABLE = 4096 +const MAP_FAILED = -1 +const MAP_FILE = 0 +const MAP_FIXED = 16 +const MAP_FIXED_NOREPLACE = 1048576 +const MAP_GROWSDOWN = 256 +const MAP_HUGETLB = 262144 +const MAP_HUGE_16GB = 2281701376 +const MAP_HUGE_16KB = 939524096 +const MAP_HUGE_16MB = 1610612736 +const MAP_HUGE_1GB = 2013265920 +const MAP_HUGE_1MB = 1342177280 +const MAP_HUGE_256MB = 1879048192 +const MAP_HUGE_2GB = 2080374784 +const MAP_HUGE_2MB = 1409286144 +const MAP_HUGE_32MB = 1677721600 +const MAP_HUGE_512KB = 1275068416 +const MAP_HUGE_512MB = 1946157056 +const MAP_HUGE_64KB = 1073741824 +const MAP_HUGE_8MB = 1543503872 +const MAP_HUGE_MASK = 63 +const MAP_HUGE_SHIFT = 26 +const MAP_LOCKED = 8192 +const MAP_NONBLOCK = 65536 +const MAP_NORESERVE = 16384 +const MAP_POPULATE = 32768 +const MAP_PRIVATE = 2 +const MAP_SHARED = 1 +const MAP_SHARED_VALIDATE = 3 +const MAP_STACK = 131072 +const MAP_SYNC = 524288 +const MAP_TYPE = 15 +const MCL_CURRENT = 1 +const MCL_FUTURE = 2 +const MCL_ONFAULT = 4 +const MS_ASYNC = 1 +const MS_INVALIDATE = 2 +const MS_SYNC = 4 +const POSIX_MADV_DONTNEED = 4 +const POSIX_MADV_NORMAL = 0 +const POSIX_MADV_RANDOM = 1 +const POSIX_MADV_SEQUENTIAL = 2 +const POSIX_MADV_WILLNEED = 3 +const PROT_EXEC = 4 +const PROT_GROWSDOWN = 16777216 +const PROT_GROWSUP = 33554432 +const PROT_NONE = 0 +const PROT_READ = 1 +const PROT_WRITE = 2 +const PTHREAD_BARRIER_SERIAL_THREAD = -1 +const PTHREAD_CANCELED = -1 +const PTHREAD_CANCEL_ASYNCHRONOUS = 1 +const PTHREAD_CANCEL_DEFERRED = 0 +const PTHREAD_CANCEL_DISABLE = 1 +const PTHREAD_CANCEL_ENABLE = 0 +const PTHREAD_CANCEL_MASKED = 2 +const PTHREAD_CREATE_DETACHED = 1 +const PTHREAD_CREATE_JOINABLE = 0 +const PTHREAD_EXPLICIT_SCHED = 1 +const PTHREAD_INHERIT_SCHED = 0 +const PTHREAD_MUTEX_DEFAULT = 0 +const PTHREAD_MUTEX_ERRORCHECK = 2 +const PTHREAD_MUTEX_NORMAL = 0 +const PTHREAD_MUTEX_RECURSIVE = 1 +const PTHREAD_MUTEX_ROBUST = 1 +const PTHREAD_MUTEX_STALLED = 0 +const PTHREAD_ONCE_INIT = 0 +const PTHREAD_PRIO_INHERIT = 1 +const PTHREAD_PRIO_NONE = 0 +const PTHREAD_PRIO_PROTECT = 2 +const PTHREAD_PROCESS_PRIVATE = 0 +const PTHREAD_PROCESS_SHARED = 1 +const PTHREAD_SCOPE_PROCESS = 1 +const PTHREAD_SCOPE_SYSTEM = 0 +const SCHED_BATCH = 3 +const SCHED_DEADLINE = 6 +const SCHED_FIFO = 1 +const SCHED_IDLE = 5 +const SCHED_OTHER = 0 +const SCHED_RESET_ON_FORK = 1073741824 +const SCHED_RR = 2 +const SIGCANCEL = 33 +const SIGSYNCCALL = 34 +const SIGTIMER = 32 +const TIMER_ABSTIME = 1 +const TIME_UTC = 1 +const TP_OFFSET = 0 +const UTF8_LOCALE = 0 +const __CCGO_SIZEOF_GO_MUTEX = 8 +const __SU = 0 +const a_spin = 0 +const pthread = 0 +const tls_mod_off_t = 0 + +type Tlconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits uint8 + Ffrac_digits uint8 + Fp_cs_precedes uint8 + Fp_sep_by_space uint8 + Fn_cs_precedes uint8 + Fn_sep_by_space uint8 + Fp_sign_posn uint8 + Fn_sign_posn uint8 + Fint_p_cs_precedes uint8 + Fint_p_sep_by_space uint8 + Fint_n_cs_precedes uint8 + Fint_n_sep_by_space uint8 + Fint_p_sign_posn uint8 + Fint_n_sign_posn uint8 +} + +type t__locale_map = struct { + Fmap1 uintptr + Fmap_size Tsize_t + Fname [24]uint8 + Fnext uintptr +} + +type Tclockid_t = int32 + +type t__pthread = struct { + Fself uintptr + Fprev uintptr + Fnext uintptr + Fsysinfo Tuintptr_t + Ftid int32 + Ferrno_val int32 + Fdetach_state int32 + Fcancel int32 + Fcanceldisable uint8 + Fcancelasync uint8 + F__ccgo50 uint8 + Fmap_base uintptr + Fmap_size Tsize_t + Fstack uintptr + Fstack_size Tsize_t + Fguard_size Tsize_t + Fresult uintptr + Fcancelbuf uintptr + Ftsd uintptr + Frobust_list struct { + Fhead uintptr + Foff int64 + Fpending uintptr + } + Fh_errno_val int32 + Ftimer_id int32 + Flocale Tlocale_t + Fkilllock [1]int32 + Fdlerror_buf uintptr + Fstdio_locks uintptr + F__ccgo_join_mutex [1]int64 + Fcanary Tuintptr_t + Fdtv uintptr +} + +type Tpthread_once_t = int32 + +type Tpthread_key_t = uint32 + +type Tpthread_spinlock_t = int32 + +type Tpthread_mutexattr_t = struct { + F__attr uint32 +} + +type Tpthread_condattr_t = struct { + F__attr uint32 +} + +type Tpthread_barrierattr_t = struct { + F__attr uint32 +} + +type Tpthread_rwlockattr_t = struct { + F__attr [2]uint32 +} + +type Tpthread_mutex_t = struct { + F__u struct { + F__vi [0][10]int32 + F__p [0][5]uintptr + F__i [10]int32 + } +} + +type Tpthread_cond_t = struct { + F__u struct { + F__vi [0][12]int32 + F__p [0][6]uintptr + F__i [12]int32 + } +} + +type Tpthread_rwlock_t = struct { + F__u struct { + F__vi [0][14]int32 + F__p [0][7]uintptr + F__i [14]int32 + } +} + +type Tpthread_barrier_t = struct { + F__u struct { + F__vi [0][8]int32 + F__p [0][4]uintptr + F__i [8]int32 + } +} + +type Tsched_param = struct { + Fsched_priority int32 + F__reserved1 int32 + F__reserved2 [2]struct { + F__reserved1 Ttime_t + F__reserved2 int64 + } + F__reserved3 int32 +} + +type Ttimer_t = uintptr + +type Ttm = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + F__tm_gmtoff int64 + F__tm_zone uintptr +} + +type Titimerspec = struct { + Fit_interval Ttimespec + Fit_value Ttimespec +} + +type t__ptcb = struct { + F__f uintptr + F__x uintptr + F__next uintptr +} + +type Tmode_t = uint32 + +const _DT_EXITED = 0 +const _DT_EXITING = 1 +const _DT_JOINABLE = 2 +const _DT_DETACHED = 3 + +func X__ctype_get_mb_cur_max(tls *TLS) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + return uint64(v1) +} + +var _table1 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('a'), + 194: int32('b'), + 195: int32('c'), + 196: int32('d'), + 197: int32('e'), + 198: int32('f'), + 199: int32('g'), + 200: int32('h'), + 201: int32('i'), + 202: int32('j'), + 203: int32('k'), + 204: int32('l'), + 205: int32('m'), + 206: int32('n'), + 207: int32('o'), + 208: int32('p'), + 209: int32('q'), + 210: int32('r'), + 211: int32('s'), + 212: int32('t'), + 213: int32('u'), + 214: int32('v'), + 215: int32('w'), + 216: int32('x'), + 217: int32('y'), + 218: int32('z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('a'), + 226: int32('b'), + 227: int32('c'), + 228: int32('d'), + 229: int32('e'), + 230: int32('f'), + 231: int32('g'), + 232: int32('h'), + 233: int32('i'), + 234: int32('j'), + 235: int32('k'), + 236: int32('l'), + 237: int32('m'), + 238: int32('n'), + 239: int32('o'), + 240: int32('p'), + 241: int32('q'), + 242: int32('r'), + 243: int32('s'), + 244: int32('t'), + 245: int32('u'), + 246: int32('v'), + 247: int32('w'), + 248: int32('x'), + 249: int32('y'), + 250: int32('z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 + +func X__ctype_tolower_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable1)) +} + +var _table2 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('A'), + 194: int32('B'), + 195: int32('C'), + 196: int32('D'), + 197: int32('E'), + 198: int32('F'), + 199: int32('G'), + 200: int32('H'), + 201: int32('I'), + 202: int32('J'), + 203: int32('K'), + 204: int32('L'), + 205: int32('M'), + 206: int32('N'), + 207: int32('O'), + 208: int32('P'), + 209: int32('Q'), + 210: int32('R'), + 211: int32('S'), + 212: int32('T'), + 213: int32('U'), + 214: int32('V'), + 215: int32('W'), + 216: int32('X'), + 217: int32('Y'), + 218: int32('Z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('A'), + 226: int32('B'), + 227: int32('C'), + 228: int32('D'), + 229: int32('E'), + 230: int32('F'), + 231: int32('G'), + 232: int32('H'), + 233: int32('I'), + 234: int32('J'), + 235: int32('K'), + 236: int32('L'), + 237: int32('M'), + 238: int32('N'), + 239: int32('O'), + 240: int32('P'), + 241: int32('Q'), + 242: int32('R'), + 243: int32('S'), + 244: int32('T'), + 245: int32('U'), + 246: int32('V'), + 247: int32('W'), + 248: int32('X'), + 249: int32('Y'), + 250: int32('Z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable2 = uintptr(unsafe.Pointer(&_table2)) + uintptr(128)*4 + +func X__ctype_toupper_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable2)) +} + +func Xisalnum(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) != 0 || BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0) +} + +func X__isalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalnum(tls, c) +} + +func Xisalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalnum_l(tls, c, l) +} + +func Xisalpha(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) +} + +func X__isalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalpha(tls, c) +} + +func Xisalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalpha_l(tls, c, l) +} + +func Xisascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(c & ^Int32FromInt32(0x7f) != 0)) +} + +func Xisblank(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || c == int32('\t')) +} + +func X__isblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, c) +} + +func Xisblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isblank_l(tls, c, l) +} + +func Xiscntrl(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c) < uint32(0x20) || c == int32(0x7f)) +} + +func X__iscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiscntrl(tls, c) +} + +func Xiscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iscntrl_l(tls, c, l) +} + +func Xisdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('0') < uint32(10)) +} + +func X__isdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisdigit(tls, c) +} + +func Xisdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isdigit_l(tls, c, l) +} + +func Xisgraph(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) +} + +func X__isgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisgraph(tls, c) +} + +func Xisgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isgraph_l(tls, c, l) +} + +func Xislower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('a') < uint32(26)) +} + +func X__islower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xislower(tls, c) +} + +func Xislower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__islower_l(tls, c, l) +} + +func Xisprint(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x20) < uint32(0x5f)) +} + +func X__isprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisprint(tls, c) +} + +func Xisprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isprint_l(tls, c, l) +} + +func Xispunct(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) != 0 && !(Xisalnum(tls, c) != 0)) +} + +func X__ispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xispunct(tls, c) +} + +func Xispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ispunct_l(tls, c, l) +} + +func Xisspace(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || uint32(c)-uint32('\t') < uint32(5)) +} + +func X__isspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisspace(tls, c) +} + +func Xisspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isspace_l(tls, c, l) +} + +func Xisupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('A') < uint32(26)) +} + +func X__isupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisupper(tls, c) +} + +func Xisupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isupper_l(tls, c, l) +} + +type Twint_t = uint32 + +type Twctype_t = uint64 + +type Twctrans_t = uintptr + +func Xiswalnum(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(wc-uint32('0') < uint32(10)) != 0 || Xiswalpha(tls, wc) != 0) +} + +func X__iswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalnum(tls, c) +} + +func Xiswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalnum_l(tls, c, l) +} + +var _table3 = [3904]uint8{ + 0: uint8(18), + 1: uint8(17), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(17), + 18: uint8(34), + 19: uint8(35), + 20: uint8(36), + 21: uint8(17), + 22: uint8(37), + 23: uint8(38), + 24: uint8(39), + 25: uint8(40), + 26: uint8(41), + 27: uint8(42), + 28: uint8(43), + 29: uint8(44), + 30: uint8(17), + 31: uint8(45), + 32: uint8(46), + 33: uint8(47), + 34: uint8(16), + 35: uint8(16), + 36: uint8(48), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(16), + 48: uint8(52), + 49: uint8(53), + 50: uint8(16), + 51: uint8(16), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(54), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(55), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(56), + 165: uint8(17), + 166: uint8(57), + 167: uint8(58), + 168: uint8(59), + 169: uint8(60), + 170: uint8(61), + 171: uint8(62), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(63), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(64), + 251: uint8(65), + 252: uint8(17), + 253: uint8(66), + 254: uint8(67), + 255: uint8(68), + 256: uint8(69), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(73), + 261: uint8(74), + 262: uint8(17), + 263: uint8(75), + 264: uint8(76), + 265: uint8(77), + 266: uint8(78), + 267: uint8(79), + 268: uint8(80), + 269: uint8(81), + 270: uint8(16), + 271: uint8(82), + 272: uint8(83), + 273: uint8(84), + 274: uint8(85), + 275: uint8(86), + 276: uint8(87), + 277: uint8(88), + 278: uint8(89), + 279: uint8(90), + 280: uint8(91), + 281: uint8(92), + 282: uint8(93), + 283: uint8(16), + 284: uint8(94), + 285: uint8(95), + 286: uint8(96), + 287: uint8(16), + 288: uint8(17), + 289: uint8(17), + 290: uint8(17), + 291: uint8(97), + 292: uint8(98), + 293: uint8(99), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(17), + 305: uint8(17), + 306: uint8(17), + 307: uint8(17), + 308: uint8(100), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(17), + 325: uint8(17), + 326: uint8(101), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(17), + 361: uint8(17), + 362: uint8(102), + 363: uint8(103), + 364: uint8(16), + 365: uint8(16), + 366: uint8(104), + 367: uint8(105), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(106), + 392: uint8(17), + 393: uint8(17), + 394: uint8(107), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(108), + 434: uint8(109), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(110), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(111), + 469: uint8(112), + 470: uint8(113), + 471: uint8(114), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(115), + 481: uint8(116), + 482: uint8(117), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(118), + 489: uint8(119), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(120), + 495: uint8(16), + 496: uint8(16), + 497: uint8(121), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 584: uint8(254), + 585: uint8(255), + 586: uint8(255), + 587: uint8(7), + 588: uint8(254), + 589: uint8(255), + 590: uint8(255), + 591: uint8(7), + 597: uint8(4), + 598: uint8(32), + 599: uint8(4), + 600: uint8(255), + 601: uint8(255), + 602: uint8(127), + 603: uint8(255), + 604: uint8(255), + 605: uint8(255), + 606: uint8(127), + 607: uint8(255), + 608: uint8(255), + 609: uint8(255), + 610: uint8(255), + 611: uint8(255), + 612: uint8(255), + 613: uint8(255), + 614: uint8(255), + 615: uint8(255), + 616: uint8(255), + 617: uint8(255), + 618: uint8(255), + 619: uint8(255), + 620: uint8(255), + 621: uint8(255), + 622: uint8(255), + 623: uint8(255), + 624: uint8(255), + 625: uint8(255), + 626: uint8(255), + 627: uint8(255), + 628: uint8(255), + 629: uint8(255), + 630: uint8(255), + 631: uint8(255), + 632: uint8(195), + 633: uint8(255), + 634: uint8(3), + 636: uint8(31), + 637: uint8(80), + 648: uint8(32), + 654: uint8(223), + 655: uint8(188), + 656: uint8(64), + 657: uint8(215), + 658: uint8(255), + 659: uint8(255), + 660: uint8(251), + 661: uint8(255), + 662: uint8(255), + 663: uint8(255), + 664: uint8(255), + 665: uint8(255), + 666: uint8(255), + 667: uint8(255), + 668: uint8(255), + 669: uint8(255), + 670: uint8(191), + 671: uint8(255), + 672: uint8(255), + 673: uint8(255), + 674: uint8(255), + 675: uint8(255), + 676: uint8(255), + 677: uint8(255), + 678: uint8(255), + 679: uint8(255), + 680: uint8(255), + 681: uint8(255), + 682: uint8(255), + 683: uint8(255), + 684: uint8(255), + 685: uint8(255), + 686: uint8(255), + 687: uint8(255), + 688: uint8(3), + 689: uint8(252), + 690: uint8(255), + 691: uint8(255), + 692: uint8(255), + 693: uint8(255), + 694: uint8(255), + 695: uint8(255), + 696: uint8(255), + 697: uint8(255), + 698: uint8(255), + 699: uint8(255), + 700: uint8(255), + 701: uint8(255), + 702: uint8(255), + 703: uint8(255), + 704: uint8(255), + 705: uint8(255), + 706: uint8(255), + 707: uint8(255), + 708: uint8(255), + 709: uint8(255), + 710: uint8(254), + 711: uint8(255), + 712: uint8(255), + 713: uint8(255), + 714: uint8(127), + 715: uint8(2), + 716: uint8(255), + 717: uint8(255), + 718: uint8(255), + 719: uint8(255), + 720: uint8(255), + 721: uint8(1), + 726: uint8(255), + 727: uint8(191), + 728: uint8(182), + 730: uint8(255), + 731: uint8(255), + 732: uint8(255), + 733: uint8(135), + 734: uint8(7), + 738: uint8(255), + 739: uint8(7), + 740: uint8(255), + 741: uint8(255), + 742: uint8(255), + 743: uint8(255), + 744: uint8(255), + 745: uint8(255), + 746: uint8(255), + 747: uint8(254), + 748: uint8(255), + 749: uint8(195), + 750: uint8(255), + 751: uint8(255), + 752: uint8(255), + 753: uint8(255), + 754: uint8(255), + 755: uint8(255), + 756: uint8(255), + 757: uint8(255), + 758: uint8(255), + 759: uint8(255), + 760: uint8(255), + 761: uint8(255), + 762: uint8(239), + 763: uint8(31), + 764: uint8(254), + 765: uint8(225), + 766: uint8(255), + 767: uint8(159), + 770: uint8(255), + 771: uint8(255), + 772: uint8(255), + 773: uint8(255), + 774: uint8(255), + 775: uint8(255), + 777: uint8(224), + 778: uint8(255), + 779: uint8(255), + 780: uint8(255), + 781: uint8(255), + 782: uint8(255), + 783: uint8(255), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(255), + 788: uint8(255), + 789: uint8(255), + 790: uint8(3), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(7), + 798: uint8(48), + 799: uint8(4), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(252), + 804: uint8(255), + 805: uint8(31), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(1), + 812: uint8(255), + 813: uint8(7), + 820: uint8(255), + 821: uint8(255), + 822: uint8(223), + 823: uint8(63), + 826: uint8(240), + 827: uint8(255), + 828: uint8(248), + 829: uint8(3), + 830: uint8(255), + 831: uint8(255), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(239), + 840: uint8(255), + 841: uint8(223), + 842: uint8(225), + 843: uint8(255), + 844: uint8(207), + 845: uint8(255), + 846: uint8(254), + 847: uint8(255), + 848: uint8(239), + 849: uint8(159), + 850: uint8(249), + 851: uint8(255), + 852: uint8(255), + 853: uint8(253), + 854: uint8(197), + 855: uint8(227), + 856: uint8(159), + 857: uint8(89), + 858: uint8(128), + 859: uint8(176), + 860: uint8(207), + 861: uint8(255), + 862: uint8(3), + 863: uint8(16), + 864: uint8(238), + 865: uint8(135), + 866: uint8(249), + 867: uint8(255), + 868: uint8(255), + 869: uint8(253), + 870: uint8(109), + 871: uint8(195), + 872: uint8(135), + 873: uint8(25), + 874: uint8(2), + 875: uint8(94), + 876: uint8(192), + 877: uint8(255), + 878: uint8(63), + 880: uint8(238), + 881: uint8(191), + 882: uint8(251), + 883: uint8(255), + 884: uint8(255), + 885: uint8(253), + 886: uint8(237), + 887: uint8(227), + 888: uint8(191), + 889: uint8(27), + 890: uint8(1), + 892: uint8(207), + 893: uint8(255), + 895: uint8(30), + 896: uint8(238), + 897: uint8(159), + 898: uint8(249), + 899: uint8(255), + 900: uint8(255), + 901: uint8(253), + 902: uint8(237), + 903: uint8(227), + 904: uint8(159), + 905: uint8(25), + 906: uint8(192), + 907: uint8(176), + 908: uint8(207), + 909: uint8(255), + 910: uint8(2), + 912: uint8(236), + 913: uint8(199), + 914: uint8(61), + 915: uint8(214), + 916: uint8(24), + 917: uint8(199), + 918: uint8(255), + 919: uint8(195), + 920: uint8(199), + 921: uint8(29), + 922: uint8(129), + 924: uint8(192), + 925: uint8(255), + 928: uint8(239), + 929: uint8(223), + 930: uint8(253), + 931: uint8(255), + 932: uint8(255), + 933: uint8(253), + 934: uint8(255), + 935: uint8(227), + 936: uint8(223), + 937: uint8(29), + 938: uint8(96), + 939: uint8(7), + 940: uint8(207), + 941: uint8(255), + 944: uint8(239), + 945: uint8(223), + 946: uint8(253), + 947: uint8(255), + 948: uint8(255), + 949: uint8(253), + 950: uint8(239), + 951: uint8(227), + 952: uint8(223), + 953: uint8(29), + 954: uint8(96), + 955: uint8(64), + 956: uint8(207), + 957: uint8(255), + 958: uint8(6), + 960: uint8(239), + 961: uint8(223), + 962: uint8(253), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(231), + 968: uint8(223), + 969: uint8(93), + 970: uint8(240), + 971: uint8(128), + 972: uint8(207), + 973: uint8(255), + 975: uint8(252), + 976: uint8(236), + 977: uint8(255), + 978: uint8(127), + 979: uint8(252), + 980: uint8(255), + 981: uint8(255), + 982: uint8(251), + 983: uint8(47), + 984: uint8(127), + 985: uint8(128), + 986: uint8(95), + 987: uint8(255), + 988: uint8(192), + 989: uint8(255), + 990: uint8(12), + 992: uint8(254), + 993: uint8(255), + 994: uint8(255), + 995: uint8(255), + 996: uint8(255), + 997: uint8(127), + 998: uint8(255), + 999: uint8(7), + 1000: uint8(63), + 1001: uint8(32), + 1002: uint8(255), + 1003: uint8(3), + 1008: uint8(214), + 1009: uint8(247), + 1010: uint8(255), + 1011: uint8(255), + 1012: uint8(175), + 1013: uint8(255), + 1014: uint8(255), + 1015: uint8(59), + 1016: uint8(95), + 1017: uint8(32), + 1018: uint8(255), + 1019: uint8(243), + 1024: uint8(1), + 1028: uint8(255), + 1029: uint8(3), + 1032: uint8(255), + 1033: uint8(254), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(31), + 1038: uint8(254), + 1039: uint8(255), + 1040: uint8(3), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(254), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(31), + 1056: uint8(255), + 1057: uint8(255), + 1058: uint8(255), + 1059: uint8(255), + 1060: uint8(255), + 1061: uint8(255), + 1062: uint8(127), + 1063: uint8(249), + 1064: uint8(255), + 1065: uint8(3), + 1066: uint8(255), + 1067: uint8(255), + 1068: uint8(255), + 1069: uint8(255), + 1070: uint8(255), + 1071: uint8(255), + 1072: uint8(255), + 1073: uint8(255), + 1074: uint8(255), + 1075: uint8(63), + 1076: uint8(255), + 1077: uint8(255), + 1078: uint8(255), + 1079: uint8(255), + 1080: uint8(191), + 1081: uint8(32), + 1082: uint8(255), + 1083: uint8(255), + 1084: uint8(255), + 1085: uint8(255), + 1086: uint8(255), + 1087: uint8(247), + 1088: uint8(255), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(61), + 1098: uint8(127), + 1099: uint8(61), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(255), + 1104: uint8(255), + 1105: uint8(61), + 1106: uint8(255), + 1107: uint8(255), + 1108: uint8(255), + 1109: uint8(255), + 1110: uint8(61), + 1111: uint8(127), + 1112: uint8(61), + 1113: uint8(255), + 1114: uint8(127), + 1115: uint8(255), + 1116: uint8(255), + 1117: uint8(255), + 1118: uint8(255), + 1119: uint8(255), + 1120: uint8(255), + 1121: uint8(255), + 1122: uint8(61), + 1123: uint8(255), + 1124: uint8(255), + 1125: uint8(255), + 1126: uint8(255), + 1127: uint8(255), + 1128: uint8(255), + 1129: uint8(255), + 1130: uint8(255), + 1131: uint8(7), + 1136: uint8(255), + 1137: uint8(255), + 1140: uint8(255), + 1141: uint8(255), + 1142: uint8(255), + 1143: uint8(255), + 1144: uint8(255), + 1145: uint8(255), + 1146: uint8(255), + 1147: uint8(255), + 1148: uint8(255), + 1149: uint8(255), + 1150: uint8(63), + 1151: uint8(63), + 1152: uint8(254), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1183: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(159), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(254), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(7), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(199), + 1214: uint8(255), + 1215: uint8(1), + 1216: uint8(255), + 1217: uint8(223), + 1218: uint8(15), + 1220: uint8(255), + 1221: uint8(255), + 1222: uint8(15), + 1224: uint8(255), + 1225: uint8(255), + 1226: uint8(15), + 1228: uint8(255), + 1229: uint8(223), + 1230: uint8(13), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(207), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(1), + 1242: uint8(128), + 1243: uint8(16), + 1244: uint8(255), + 1245: uint8(3), + 1250: uint8(255), + 1251: uint8(3), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(1), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(7), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(63), + 1280: uint8(255), + 1281: uint8(255), + 1282: uint8(255), + 1283: uint8(127), + 1284: uint8(255), + 1285: uint8(15), + 1286: uint8(255), + 1287: uint8(1), + 1288: uint8(192), + 1289: uint8(255), + 1290: uint8(255), + 1291: uint8(255), + 1292: uint8(255), + 1293: uint8(63), + 1294: uint8(31), + 1296: uint8(255), + 1297: uint8(255), + 1298: uint8(255), + 1299: uint8(255), + 1300: uint8(255), + 1301: uint8(15), + 1302: uint8(255), + 1303: uint8(255), + 1304: uint8(255), + 1305: uint8(3), + 1306: uint8(255), + 1307: uint8(3), + 1312: uint8(255), + 1313: uint8(255), + 1314: uint8(255), + 1315: uint8(15), + 1316: uint8(255), + 1317: uint8(255), + 1318: uint8(255), + 1319: uint8(255), + 1320: uint8(255), + 1321: uint8(255), + 1322: uint8(255), + 1323: uint8(127), + 1324: uint8(254), + 1325: uint8(255), + 1326: uint8(31), + 1328: uint8(255), + 1329: uint8(3), + 1330: uint8(255), + 1331: uint8(3), + 1332: uint8(128), + 1344: uint8(255), + 1345: uint8(255), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(239), + 1351: uint8(255), + 1352: uint8(239), + 1353: uint8(15), + 1354: uint8(255), + 1355: uint8(3), + 1360: uint8(255), + 1361: uint8(255), + 1362: uint8(255), + 1363: uint8(255), + 1364: uint8(255), + 1365: uint8(243), + 1366: uint8(255), + 1367: uint8(255), + 1368: uint8(255), + 1369: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(191), + 1373: uint8(255), + 1374: uint8(3), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(255), + 1381: uint8(255), + 1382: uint8(127), + 1384: uint8(255), + 1385: uint8(227), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(63), + 1392: uint8(255), + 1393: uint8(1), + 1394: uint8(255), + 1395: uint8(255), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(231), + 1405: uint8(222), + 1406: uint8(111), + 1407: uint8(4), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(255), + 1416: uint8(255), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1436: uint8(128), + 1437: uint8(255), + 1438: uint8(31), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(63), + 1443: uint8(63), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(63), + 1449: uint8(63), + 1450: uint8(255), + 1451: uint8(170), + 1452: uint8(255), + 1453: uint8(255), + 1454: uint8(255), + 1455: uint8(63), + 1456: uint8(255), + 1457: uint8(255), + 1458: uint8(255), + 1459: uint8(255), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(223), + 1463: uint8(95), + 1464: uint8(220), + 1465: uint8(31), + 1466: uint8(207), + 1467: uint8(15), + 1468: uint8(255), + 1469: uint8(31), + 1470: uint8(220), + 1471: uint8(31), + 1486: uint8(2), + 1487: uint8(128), + 1490: uint8(255), + 1491: uint8(31), + 1504: uint8(132), + 1505: uint8(252), + 1506: uint8(47), + 1507: uint8(62), + 1508: uint8(80), + 1509: uint8(189), + 1510: uint8(255), + 1511: uint8(243), + 1512: uint8(224), + 1513: uint8(67), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(1), + 1558: uint8(192), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(3), + 1568: uint8(255), + 1569: uint8(255), + 1570: uint8(255), + 1571: uint8(255), + 1572: uint8(255), + 1573: uint8(127), + 1574: uint8(255), + 1575: uint8(255), + 1576: uint8(255), + 1577: uint8(255), + 1578: uint8(255), + 1579: uint8(127), + 1580: uint8(255), + 1581: uint8(255), + 1582: uint8(255), + 1583: uint8(255), + 1584: uint8(255), + 1585: uint8(255), + 1586: uint8(255), + 1587: uint8(255), + 1588: uint8(255), + 1589: uint8(255), + 1590: uint8(255), + 1591: uint8(255), + 1592: uint8(255), + 1593: uint8(255), + 1594: uint8(255), + 1595: uint8(255), + 1596: uint8(31), + 1597: uint8(120), + 1598: uint8(12), + 1600: uint8(255), + 1601: uint8(255), + 1602: uint8(255), + 1603: uint8(255), + 1604: uint8(191), + 1605: uint8(32), + 1606: uint8(255), + 1607: uint8(255), + 1608: uint8(255), + 1609: uint8(255), + 1610: uint8(255), + 1611: uint8(255), + 1612: uint8(255), + 1613: uint8(128), + 1616: uint8(255), + 1617: uint8(255), + 1618: uint8(127), + 1620: uint8(127), + 1621: uint8(127), + 1622: uint8(127), + 1623: uint8(127), + 1624: uint8(127), + 1625: uint8(127), + 1626: uint8(127), + 1627: uint8(127), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1637: uint8(128), + 1664: uint8(224), + 1668: uint8(254), + 1669: uint8(3), + 1670: uint8(62), + 1671: uint8(31), + 1672: uint8(254), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(127), + 1683: uint8(224), + 1684: uint8(254), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(255), + 1691: uint8(255), + 1692: uint8(255), + 1693: uint8(255), + 1694: uint8(255), + 1695: uint8(247), + 1696: uint8(224), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(255), + 1701: uint8(255), + 1702: uint8(254), + 1703: uint8(255), + 1704: uint8(255), + 1705: uint8(255), + 1706: uint8(255), + 1707: uint8(255), + 1708: uint8(255), + 1709: uint8(255), + 1710: uint8(255), + 1711: uint8(255), + 1712: uint8(255), + 1713: uint8(127), + 1716: uint8(255), + 1717: uint8(255), + 1718: uint8(255), + 1719: uint8(7), + 1726: uint8(255), + 1727: uint8(255), + 1728: uint8(255), + 1729: uint8(255), + 1730: uint8(255), + 1731: uint8(255), + 1732: uint8(255), + 1733: uint8(255), + 1734: uint8(255), + 1735: uint8(255), + 1736: uint8(255), + 1737: uint8(255), + 1738: uint8(255), + 1739: uint8(255), + 1740: uint8(255), + 1741: uint8(255), + 1742: uint8(255), + 1743: uint8(255), + 1744: uint8(255), + 1745: uint8(255), + 1746: uint8(255), + 1747: uint8(255), + 1748: uint8(255), + 1749: uint8(255), + 1750: uint8(63), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(255), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1792: uint8(255), + 1793: uint8(255), + 1794: uint8(255), + 1795: uint8(255), + 1796: uint8(255), + 1797: uint8(255), + 1798: uint8(255), + 1799: uint8(255), + 1800: uint8(255), + 1801: uint8(255), + 1802: uint8(255), + 1803: uint8(255), + 1804: uint8(255), + 1805: uint8(255), + 1806: uint8(255), + 1807: uint8(255), + 1808: uint8(255), + 1809: uint8(31), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(63), + 1824: uint8(255), + 1825: uint8(31), + 1826: uint8(255), + 1827: uint8(255), + 1828: uint8(255), + 1829: uint8(15), + 1832: uint8(255), + 1833: uint8(255), + 1834: uint8(255), + 1835: uint8(255), + 1836: uint8(255), + 1837: uint8(127), + 1838: uint8(240), + 1839: uint8(143), + 1840: uint8(255), + 1841: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(255), + 1849: uint8(255), + 1850: uint8(255), + 1851: uint8(255), + 1852: uint8(255), + 1853: uint8(255), + 1858: uint8(128), + 1859: uint8(255), + 1860: uint8(252), + 1861: uint8(255), + 1862: uint8(255), + 1863: uint8(255), + 1864: uint8(255), + 1865: uint8(255), + 1866: uint8(255), + 1867: uint8(255), + 1868: uint8(255), + 1869: uint8(255), + 1870: uint8(255), + 1871: uint8(255), + 1872: uint8(255), + 1873: uint8(249), + 1874: uint8(255), + 1875: uint8(255), + 1876: uint8(255), + 1877: uint8(255), + 1878: uint8(255), + 1879: uint8(255), + 1880: uint8(124), + 1886: uint8(128), + 1887: uint8(255), + 1888: uint8(191), + 1889: uint8(255), + 1890: uint8(255), + 1891: uint8(255), + 1892: uint8(255), + 1896: uint8(255), + 1897: uint8(255), + 1898: uint8(255), + 1899: uint8(255), + 1900: uint8(255), + 1901: uint8(255), + 1902: uint8(15), + 1904: uint8(255), + 1905: uint8(255), + 1906: uint8(255), + 1907: uint8(255), + 1908: uint8(255), + 1909: uint8(255), + 1910: uint8(255), + 1911: uint8(255), + 1912: uint8(47), + 1914: uint8(255), + 1915: uint8(3), + 1918: uint8(252), + 1919: uint8(232), + 1920: uint8(255), + 1921: uint8(255), + 1922: uint8(255), + 1923: uint8(255), + 1924: uint8(255), + 1925: uint8(7), + 1926: uint8(255), + 1927: uint8(255), + 1928: uint8(255), + 1929: uint8(255), + 1930: uint8(7), + 1932: uint8(255), + 1933: uint8(255), + 1934: uint8(255), + 1935: uint8(31), + 1936: uint8(255), + 1937: uint8(255), + 1938: uint8(255), + 1939: uint8(255), + 1940: uint8(255), + 1941: uint8(255), + 1942: uint8(247), + 1943: uint8(255), + 1945: uint8(128), + 1946: uint8(255), + 1947: uint8(3), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(255), + 1951: uint8(127), + 1952: uint8(255), + 1953: uint8(255), + 1954: uint8(255), + 1955: uint8(255), + 1956: uint8(255), + 1957: uint8(255), + 1958: uint8(127), + 1960: uint8(255), + 1961: uint8(63), + 1962: uint8(255), + 1963: uint8(3), + 1964: uint8(255), + 1965: uint8(255), + 1966: uint8(127), + 1967: uint8(252), + 1968: uint8(255), + 1969: uint8(255), + 1970: uint8(255), + 1971: uint8(255), + 1972: uint8(255), + 1973: uint8(255), + 1974: uint8(255), + 1975: uint8(127), + 1976: uint8(5), + 1979: uint8(56), + 1980: uint8(255), + 1981: uint8(255), + 1982: uint8(60), + 1984: uint8(126), + 1985: uint8(126), + 1986: uint8(126), + 1988: uint8(127), + 1989: uint8(127), + 1990: uint8(255), + 1991: uint8(255), + 1992: uint8(255), + 1993: uint8(255), + 1994: uint8(255), + 1995: uint8(247), + 1996: uint8(255), + 1998: uint8(255), + 1999: uint8(255), + 2000: uint8(255), + 2001: uint8(255), + 2002: uint8(255), + 2003: uint8(255), + 2004: uint8(255), + 2005: uint8(255), + 2006: uint8(255), + 2007: uint8(255), + 2008: uint8(255), + 2009: uint8(255), + 2010: uint8(255), + 2011: uint8(255), + 2012: uint8(255), + 2013: uint8(7), + 2014: uint8(255), + 2015: uint8(3), + 2016: uint8(255), + 2017: uint8(255), + 2018: uint8(255), + 2019: uint8(255), + 2020: uint8(255), + 2021: uint8(255), + 2022: uint8(255), + 2023: uint8(255), + 2024: uint8(255), + 2025: uint8(255), + 2026: uint8(255), + 2027: uint8(255), + 2028: uint8(255), + 2029: uint8(255), + 2030: uint8(255), + 2031: uint8(255), + 2032: uint8(255), + 2033: uint8(255), + 2034: uint8(255), + 2035: uint8(255), + 2036: uint8(15), + 2038: uint8(255), + 2039: uint8(255), + 2040: uint8(127), + 2041: uint8(248), + 2042: uint8(255), + 2043: uint8(255), + 2044: uint8(255), + 2045: uint8(255), + 2046: uint8(255), + 2047: uint8(15), + 2048: uint8(255), + 2049: uint8(255), + 2050: uint8(255), + 2051: uint8(255), + 2052: uint8(255), + 2053: uint8(255), + 2054: uint8(255), + 2055: uint8(255), + 2056: uint8(255), + 2057: uint8(255), + 2058: uint8(255), + 2059: uint8(255), + 2060: uint8(255), + 2061: uint8(63), + 2062: uint8(255), + 2063: uint8(255), + 2064: uint8(255), + 2065: uint8(255), + 2066: uint8(255), + 2067: uint8(255), + 2068: uint8(255), + 2069: uint8(255), + 2070: uint8(255), + 2071: uint8(255), + 2072: uint8(255), + 2073: uint8(255), + 2074: uint8(255), + 2075: uint8(3), + 2080: uint8(127), + 2082: uint8(248), + 2083: uint8(224), + 2084: uint8(255), + 2085: uint8(253), + 2086: uint8(127), + 2087: uint8(95), + 2088: uint8(219), + 2089: uint8(255), + 2090: uint8(255), + 2091: uint8(255), + 2092: uint8(255), + 2093: uint8(255), + 2094: uint8(255), + 2095: uint8(255), + 2096: uint8(255), + 2097: uint8(255), + 2098: uint8(255), + 2099: uint8(255), + 2100: uint8(255), + 2101: uint8(255), + 2102: uint8(3), + 2106: uint8(248), + 2107: uint8(255), + 2108: uint8(255), + 2109: uint8(255), + 2110: uint8(255), + 2111: uint8(255), + 2112: uint8(255), + 2113: uint8(255), + 2114: uint8(255), + 2115: uint8(255), + 2116: uint8(255), + 2117: uint8(255), + 2118: uint8(255), + 2119: uint8(63), + 2122: uint8(255), + 2123: uint8(255), + 2124: uint8(255), + 2125: uint8(255), + 2126: uint8(255), + 2127: uint8(255), + 2128: uint8(255), + 2129: uint8(255), + 2130: uint8(252), + 2131: uint8(255), + 2132: uint8(255), + 2133: uint8(255), + 2134: uint8(255), + 2135: uint8(255), + 2136: uint8(255), + 2142: uint8(255), + 2143: uint8(15), + 2158: uint8(223), + 2159: uint8(255), + 2160: uint8(255), + 2161: uint8(255), + 2162: uint8(255), + 2163: uint8(255), + 2164: uint8(255), + 2165: uint8(255), + 2166: uint8(255), + 2167: uint8(255), + 2168: uint8(255), + 2169: uint8(255), + 2170: uint8(255), + 2171: uint8(255), + 2172: uint8(255), + 2173: uint8(255), + 2174: uint8(255), + 2175: uint8(31), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(254), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(7), + 2184: uint8(254), + 2185: uint8(255), + 2186: uint8(255), + 2187: uint8(7), + 2188: uint8(192), + 2189: uint8(255), + 2190: uint8(255), + 2191: uint8(255), + 2192: uint8(255), + 2193: uint8(255), + 2194: uint8(255), + 2195: uint8(255), + 2196: uint8(255), + 2197: uint8(255), + 2198: uint8(255), + 2199: uint8(127), + 2200: uint8(252), + 2201: uint8(252), + 2202: uint8(252), + 2203: uint8(28), + 2208: uint8(255), + 2209: uint8(239), + 2210: uint8(255), + 2211: uint8(255), + 2212: uint8(127), + 2213: uint8(255), + 2214: uint8(255), + 2215: uint8(183), + 2216: uint8(255), + 2217: uint8(63), + 2218: uint8(255), + 2219: uint8(63), + 2224: uint8(255), + 2225: uint8(255), + 2226: uint8(255), + 2227: uint8(255), + 2228: uint8(255), + 2229: uint8(255), + 2230: uint8(255), + 2231: uint8(255), + 2232: uint8(255), + 2233: uint8(255), + 2234: uint8(255), + 2235: uint8(255), + 2236: uint8(255), + 2237: uint8(255), + 2238: uint8(255), + 2239: uint8(7), + 2248: uint8(255), + 2249: uint8(255), + 2250: uint8(255), + 2251: uint8(255), + 2252: uint8(255), + 2253: uint8(255), + 2254: uint8(31), + 2288: uint8(255), + 2289: uint8(255), + 2290: uint8(255), + 2291: uint8(31), + 2292: uint8(255), + 2293: uint8(255), + 2294: uint8(255), + 2295: uint8(255), + 2296: uint8(255), + 2297: uint8(255), + 2298: uint8(1), + 2304: uint8(255), + 2305: uint8(255), + 2306: uint8(255), + 2307: uint8(255), + 2309: uint8(224), + 2310: uint8(255), + 2311: uint8(255), + 2312: uint8(255), + 2313: uint8(7), + 2314: uint8(255), + 2315: uint8(255), + 2316: uint8(255), + 2317: uint8(255), + 2318: uint8(255), + 2319: uint8(7), + 2320: uint8(255), + 2321: uint8(255), + 2322: uint8(255), + 2323: uint8(63), + 2324: uint8(255), + 2325: uint8(255), + 2326: uint8(255), + 2327: uint8(255), + 2328: uint8(15), + 2329: uint8(255), + 2330: uint8(62), + 2336: uint8(255), + 2337: uint8(255), + 2338: uint8(255), + 2339: uint8(255), + 2340: uint8(255), + 2341: uint8(255), + 2342: uint8(255), + 2343: uint8(255), + 2344: uint8(255), + 2345: uint8(255), + 2346: uint8(255), + 2347: uint8(255), + 2348: uint8(255), + 2349: uint8(255), + 2350: uint8(255), + 2351: uint8(255), + 2352: uint8(255), + 2353: uint8(255), + 2354: uint8(255), + 2355: uint8(63), + 2356: uint8(255), + 2357: uint8(3), + 2358: uint8(255), + 2359: uint8(255), + 2360: uint8(255), + 2361: uint8(255), + 2362: uint8(15), + 2363: uint8(255), + 2364: uint8(255), + 2365: uint8(255), + 2366: uint8(255), + 2367: uint8(15), + 2368: uint8(255), + 2369: uint8(255), + 2370: uint8(255), + 2371: uint8(255), + 2372: uint8(255), + 2374: uint8(255), + 2375: uint8(255), + 2376: uint8(255), + 2377: uint8(255), + 2378: uint8(255), + 2379: uint8(255), + 2380: uint8(15), + 2400: uint8(255), + 2401: uint8(255), + 2402: uint8(255), + 2403: uint8(255), + 2404: uint8(255), + 2405: uint8(255), + 2406: uint8(127), + 2408: uint8(255), + 2409: uint8(255), + 2410: uint8(63), + 2412: uint8(255), + 2432: uint8(63), + 2433: uint8(253), + 2434: uint8(255), + 2435: uint8(255), + 2436: uint8(255), + 2437: uint8(255), + 2438: uint8(191), + 2439: uint8(145), + 2440: uint8(255), + 2441: uint8(255), + 2442: uint8(63), + 2444: uint8(255), + 2445: uint8(255), + 2446: uint8(127), + 2448: uint8(255), + 2449: uint8(255), + 2450: uint8(255), + 2451: uint8(127), + 2460: uint8(255), + 2461: uint8(255), + 2462: uint8(55), + 2464: uint8(255), + 2465: uint8(255), + 2466: uint8(63), + 2468: uint8(255), + 2469: uint8(255), + 2470: uint8(255), + 2471: uint8(3), + 2480: uint8(255), + 2481: uint8(255), + 2482: uint8(255), + 2483: uint8(255), + 2484: uint8(255), + 2485: uint8(255), + 2486: uint8(255), + 2487: uint8(192), + 2496: uint8(111), + 2497: uint8(240), + 2498: uint8(239), + 2499: uint8(254), + 2500: uint8(255), + 2501: uint8(255), + 2502: uint8(63), + 2508: uint8(255), + 2509: uint8(255), + 2510: uint8(255), + 2511: uint8(31), + 2512: uint8(255), + 2513: uint8(255), + 2514: uint8(255), + 2515: uint8(31), + 2520: uint8(255), + 2521: uint8(254), + 2522: uint8(255), + 2523: uint8(255), + 2524: uint8(31), + 2528: uint8(255), + 2529: uint8(255), + 2530: uint8(255), + 2531: uint8(255), + 2532: uint8(255), + 2533: uint8(255), + 2534: uint8(63), + 2536: uint8(255), + 2537: uint8(255), + 2538: uint8(63), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(7), + 2544: uint8(255), + 2545: uint8(255), + 2546: uint8(3), + 2560: uint8(255), + 2561: uint8(255), + 2562: uint8(255), + 2563: uint8(255), + 2564: uint8(255), + 2565: uint8(255), + 2566: uint8(255), + 2567: uint8(255), + 2568: uint8(255), + 2569: uint8(1), + 2576: uint8(255), + 2577: uint8(255), + 2578: uint8(255), + 2579: uint8(255), + 2580: uint8(255), + 2581: uint8(255), + 2582: uint8(7), + 2584: uint8(255), + 2585: uint8(255), + 2586: uint8(255), + 2587: uint8(255), + 2588: uint8(255), + 2589: uint8(255), + 2590: uint8(7), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2598: uint8(255), + 2599: uint8(3), + 2624: uint8(255), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(31), + 2628: uint8(128), + 2630: uint8(255), + 2631: uint8(255), + 2632: uint8(63), + 2652: uint8(255), + 2653: uint8(255), + 2654: uint8(127), + 2656: uint8(255), + 2657: uint8(255), + 2658: uint8(255), + 2659: uint8(255), + 2660: uint8(255), + 2661: uint8(255), + 2662: uint8(255), + 2663: uint8(255), + 2664: uint8(63), + 2668: uint8(192), + 2669: uint8(255), + 2672: uint8(252), + 2673: uint8(255), + 2674: uint8(255), + 2675: uint8(255), + 2676: uint8(255), + 2677: uint8(255), + 2678: uint8(255), + 2679: uint8(1), + 2682: uint8(255), + 2683: uint8(255), + 2684: uint8(255), + 2685: uint8(1), + 2686: uint8(255), + 2687: uint8(3), + 2688: uint8(255), + 2689: uint8(255), + 2690: uint8(255), + 2691: uint8(255), + 2692: uint8(255), + 2693: uint8(255), + 2694: uint8(199), + 2695: uint8(255), + 2696: uint8(112), + 2698: uint8(255), + 2699: uint8(255), + 2700: uint8(255), + 2701: uint8(255), + 2702: uint8(71), + 2704: uint8(255), + 2705: uint8(255), + 2706: uint8(255), + 2707: uint8(255), + 2708: uint8(255), + 2709: uint8(255), + 2710: uint8(255), + 2711: uint8(255), + 2712: uint8(30), + 2714: uint8(255), + 2715: uint8(23), + 2720: uint8(255), + 2721: uint8(255), + 2722: uint8(251), + 2723: uint8(255), + 2724: uint8(255), + 2725: uint8(255), + 2726: uint8(159), + 2727: uint8(64), + 2736: uint8(127), + 2737: uint8(189), + 2738: uint8(255), + 2739: uint8(191), + 2740: uint8(255), + 2741: uint8(1), + 2742: uint8(255), + 2743: uint8(255), + 2744: uint8(255), + 2745: uint8(255), + 2746: uint8(255), + 2747: uint8(255), + 2748: uint8(255), + 2749: uint8(1), + 2750: uint8(255), + 2751: uint8(3), + 2752: uint8(239), + 2753: uint8(159), + 2754: uint8(249), + 2755: uint8(255), + 2756: uint8(255), + 2757: uint8(253), + 2758: uint8(237), + 2759: uint8(227), + 2760: uint8(159), + 2761: uint8(25), + 2762: uint8(129), + 2763: uint8(224), + 2764: uint8(15), + 2784: uint8(255), + 2785: uint8(255), + 2786: uint8(255), + 2787: uint8(255), + 2788: uint8(255), + 2789: uint8(255), + 2790: uint8(255), + 2791: uint8(255), + 2792: uint8(187), + 2793: uint8(7), + 2794: uint8(255), + 2795: uint8(131), + 2800: uint8(255), + 2801: uint8(255), + 2802: uint8(255), + 2803: uint8(255), + 2804: uint8(255), + 2805: uint8(255), + 2806: uint8(255), + 2807: uint8(255), + 2808: uint8(179), + 2810: uint8(255), + 2811: uint8(3), + 2832: uint8(255), + 2833: uint8(255), + 2834: uint8(255), + 2835: uint8(255), + 2836: uint8(255), + 2837: uint8(255), + 2838: uint8(63), + 2839: uint8(127), + 2843: uint8(63), + 2848: uint8(255), + 2849: uint8(255), + 2850: uint8(255), + 2851: uint8(255), + 2852: uint8(255), + 2853: uint8(255), + 2854: uint8(255), + 2855: uint8(127), + 2856: uint8(17), + 2858: uint8(255), + 2859: uint8(3), + 2864: uint8(255), + 2865: uint8(255), + 2866: uint8(255), + 2867: uint8(255), + 2868: uint8(255), + 2869: uint8(255), + 2870: uint8(63), + 2871: uint8(1), + 2872: uint8(255), + 2873: uint8(3), + 2880: uint8(255), + 2881: uint8(255), + 2882: uint8(255), + 2883: uint8(231), + 2884: uint8(255), + 2885: uint8(7), + 2886: uint8(255), + 2887: uint8(3), + 2912: uint8(255), + 2913: uint8(255), + 2914: uint8(255), + 2915: uint8(255), + 2916: uint8(255), + 2917: uint8(255), + 2918: uint8(255), + 2919: uint8(1), + 2932: uint8(255), + 2933: uint8(255), + 2934: uint8(255), + 2935: uint8(255), + 2936: uint8(255), + 2937: uint8(255), + 2938: uint8(255), + 2939: uint8(255), + 2940: uint8(255), + 2941: uint8(3), + 2943: uint8(128), + 2964: uint8(255), + 2965: uint8(252), + 2966: uint8(255), + 2967: uint8(255), + 2968: uint8(255), + 2969: uint8(255), + 2970: uint8(255), + 2971: uint8(252), + 2972: uint8(26), + 2976: uint8(255), + 2977: uint8(255), + 2978: uint8(255), + 2979: uint8(255), + 2980: uint8(255), + 2981: uint8(255), + 2982: uint8(231), + 2983: uint8(127), + 2986: uint8(255), + 2987: uint8(255), + 2988: uint8(255), + 2989: uint8(255), + 2990: uint8(255), + 2991: uint8(255), + 2992: uint8(255), + 2993: uint8(255), + 2994: uint8(255), + 2995: uint8(32), + 3000: uint8(255), + 3001: uint8(255), + 3002: uint8(255), + 3003: uint8(255), + 3004: uint8(255), + 3005: uint8(255), + 3006: uint8(255), + 3007: uint8(1), + 3008: uint8(255), + 3009: uint8(253), + 3010: uint8(255), + 3011: uint8(255), + 3012: uint8(255), + 3013: uint8(255), + 3014: uint8(127), + 3015: uint8(127), + 3016: uint8(1), + 3018: uint8(255), + 3019: uint8(3), + 3022: uint8(252), + 3023: uint8(255), + 3024: uint8(255), + 3025: uint8(255), + 3026: uint8(252), + 3027: uint8(255), + 3028: uint8(255), + 3029: uint8(254), + 3030: uint8(127), + 3040: uint8(127), + 3041: uint8(251), + 3042: uint8(255), + 3043: uint8(255), + 3044: uint8(255), + 3045: uint8(255), + 3046: uint8(127), + 3047: uint8(180), + 3048: uint8(203), + 3050: uint8(255), + 3051: uint8(3), + 3052: uint8(191), + 3053: uint8(253), + 3054: uint8(255), + 3055: uint8(255), + 3056: uint8(255), + 3057: uint8(127), + 3058: uint8(123), + 3059: uint8(1), + 3060: uint8(255), + 3061: uint8(3), + 3100: uint8(255), + 3101: uint8(255), + 3102: uint8(127), + 3104: uint8(255), + 3105: uint8(255), + 3106: uint8(255), + 3107: uint8(255), + 3108: uint8(255), + 3109: uint8(255), + 3110: uint8(255), + 3111: uint8(255), + 3112: uint8(255), + 3113: uint8(255), + 3114: uint8(255), + 3115: uint8(255), + 3116: uint8(255), + 3117: uint8(255), + 3118: uint8(255), + 3119: uint8(255), + 3120: uint8(255), + 3121: uint8(255), + 3122: uint8(255), + 3123: uint8(3), + 3136: uint8(255), + 3137: uint8(255), + 3138: uint8(255), + 3139: uint8(255), + 3140: uint8(255), + 3141: uint8(255), + 3142: uint8(255), + 3143: uint8(255), + 3144: uint8(255), + 3145: uint8(255), + 3146: uint8(255), + 3147: uint8(255), + 3148: uint8(255), + 3149: uint8(127), + 3152: uint8(255), + 3153: uint8(255), + 3154: uint8(255), + 3155: uint8(255), + 3156: uint8(255), + 3157: uint8(255), + 3158: uint8(255), + 3159: uint8(255), + 3160: uint8(255), + 3161: uint8(255), + 3162: uint8(255), + 3163: uint8(255), + 3164: uint8(255), + 3165: uint8(255), + 3166: uint8(255), + 3167: uint8(255), + 3168: uint8(255), + 3169: uint8(255), + 3170: uint8(255), + 3171: uint8(255), + 3172: uint8(255), + 3173: uint8(255), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(15), + 3200: uint8(255), + 3201: uint8(255), + 3202: uint8(255), + 3203: uint8(255), + 3204: uint8(255), + 3205: uint8(127), + 3232: uint8(255), + 3233: uint8(255), + 3234: uint8(255), + 3235: uint8(255), + 3236: uint8(255), + 3237: uint8(255), + 3238: uint8(255), + 3239: uint8(255), + 3240: uint8(127), + 3264: uint8(255), + 3265: uint8(255), + 3266: uint8(255), + 3267: uint8(255), + 3268: uint8(255), + 3269: uint8(255), + 3270: uint8(255), + 3271: uint8(1), + 3272: uint8(255), + 3273: uint8(255), + 3274: uint8(255), + 3275: uint8(127), + 3276: uint8(255), + 3277: uint8(3), + 3290: uint8(255), + 3291: uint8(255), + 3292: uint8(255), + 3293: uint8(63), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3304: uint8(15), + 3306: uint8(255), + 3307: uint8(3), + 3308: uint8(248), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(224), + 3312: uint8(255), + 3313: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(255), + 3369: uint8(135), + 3370: uint8(255), + 3371: uint8(255), + 3372: uint8(255), + 3373: uint8(255), + 3374: uint8(255), + 3375: uint8(255), + 3376: uint8(255), + 3377: uint8(128), + 3378: uint8(255), + 3379: uint8(255), + 3388: uint8(11), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(255), + 3403: uint8(255), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(255), + 3408: uint8(255), + 3409: uint8(255), + 3410: uint8(255), + 3411: uint8(255), + 3412: uint8(255), + 3413: uint8(255), + 3414: uint8(255), + 3415: uint8(255), + 3416: uint8(255), + 3417: uint8(255), + 3418: uint8(255), + 3419: uint8(255), + 3420: uint8(255), + 3421: uint8(255), + 3422: uint8(255), + 3424: uint8(255), + 3425: uint8(255), + 3426: uint8(255), + 3427: uint8(255), + 3428: uint8(255), + 3429: uint8(255), + 3430: uint8(255), + 3431: uint8(255), + 3432: uint8(255), + 3433: uint8(255), + 3434: uint8(255), + 3435: uint8(255), + 3436: uint8(255), + 3437: uint8(255), + 3438: uint8(255), + 3439: uint8(255), + 3440: uint8(255), + 3441: uint8(255), + 3442: uint8(255), + 3443: uint8(255), + 3444: uint8(255), + 3445: uint8(255), + 3446: uint8(255), + 3447: uint8(255), + 3448: uint8(255), + 3449: uint8(255), + 3450: uint8(255), + 3451: uint8(255), + 3452: uint8(255), + 3453: uint8(255), + 3454: uint8(7), + 3456: uint8(255), + 3457: uint8(255), + 3458: uint8(255), + 3459: uint8(127), + 3466: uint8(7), + 3468: uint8(240), + 3470: uint8(255), + 3471: uint8(255), + 3472: uint8(255), + 3473: uint8(255), + 3474: uint8(255), + 3475: uint8(255), + 3476: uint8(255), + 3477: uint8(255), + 3478: uint8(255), + 3479: uint8(255), + 3480: uint8(255), + 3481: uint8(255), + 3482: uint8(255), + 3483: uint8(255), + 3484: uint8(255), + 3485: uint8(255), + 3486: uint8(255), + 3487: uint8(255), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(255), + 3506: uint8(255), + 3507: uint8(255), + 3508: uint8(255), + 3509: uint8(255), + 3510: uint8(255), + 3511: uint8(255), + 3512: uint8(255), + 3513: uint8(255), + 3514: uint8(255), + 3515: uint8(255), + 3516: uint8(255), + 3517: uint8(255), + 3518: uint8(255), + 3519: uint8(15), + 3520: uint8(255), + 3521: uint8(255), + 3522: uint8(255), + 3523: uint8(255), + 3524: uint8(255), + 3525: uint8(255), + 3526: uint8(255), + 3527: uint8(255), + 3528: uint8(255), + 3529: uint8(255), + 3530: uint8(255), + 3531: uint8(255), + 3532: uint8(255), + 3533: uint8(7), + 3534: uint8(255), + 3535: uint8(31), + 3536: uint8(255), + 3537: uint8(1), + 3538: uint8(255), + 3539: uint8(67), + 3552: uint8(255), + 3553: uint8(255), + 3554: uint8(255), + 3555: uint8(255), + 3556: uint8(255), + 3557: uint8(255), + 3558: uint8(255), + 3559: uint8(255), + 3560: uint8(255), + 3561: uint8(255), + 3562: uint8(223), + 3563: uint8(255), + 3564: uint8(255), + 3565: uint8(255), + 3566: uint8(255), + 3567: uint8(255), + 3568: uint8(255), + 3569: uint8(255), + 3570: uint8(255), + 3571: uint8(223), + 3572: uint8(100), + 3573: uint8(222), + 3574: uint8(255), + 3575: uint8(235), + 3576: uint8(239), + 3577: uint8(255), + 3578: uint8(255), + 3579: uint8(255), + 3580: uint8(255), + 3581: uint8(255), + 3582: uint8(255), + 3583: uint8(255), + 3584: uint8(191), + 3585: uint8(231), + 3586: uint8(223), + 3587: uint8(223), + 3588: uint8(255), + 3589: uint8(255), + 3590: uint8(255), + 3591: uint8(123), + 3592: uint8(95), + 3593: uint8(252), + 3594: uint8(253), + 3595: uint8(255), + 3596: uint8(255), + 3597: uint8(255), + 3598: uint8(255), + 3599: uint8(255), + 3600: uint8(255), + 3601: uint8(255), + 3602: uint8(255), + 3603: uint8(255), + 3604: uint8(255), + 3605: uint8(255), + 3606: uint8(255), + 3607: uint8(255), + 3608: uint8(255), + 3609: uint8(255), + 3610: uint8(255), + 3611: uint8(255), + 3612: uint8(255), + 3613: uint8(255), + 3614: uint8(255), + 3615: uint8(255), + 3616: uint8(255), + 3617: uint8(255), + 3618: uint8(255), + 3619: uint8(255), + 3620: uint8(255), + 3621: uint8(255), + 3622: uint8(255), + 3623: uint8(255), + 3624: uint8(255), + 3625: uint8(255), + 3626: uint8(255), + 3627: uint8(255), + 3628: uint8(255), + 3629: uint8(255), + 3630: uint8(255), + 3631: uint8(255), + 3632: uint8(255), + 3633: uint8(255), + 3634: uint8(255), + 3635: uint8(255), + 3636: uint8(63), + 3637: uint8(255), + 3638: uint8(255), + 3639: uint8(255), + 3640: uint8(253), + 3641: uint8(255), + 3642: uint8(255), + 3643: uint8(247), + 3644: uint8(255), + 3645: uint8(255), + 3646: uint8(255), + 3647: uint8(247), + 3648: uint8(255), + 3649: uint8(255), + 3650: uint8(223), + 3651: uint8(255), + 3652: uint8(255), + 3653: uint8(255), + 3654: uint8(223), + 3655: uint8(255), + 3656: uint8(255), + 3657: uint8(127), + 3658: uint8(255), + 3659: uint8(255), + 3660: uint8(255), + 3661: uint8(127), + 3662: uint8(255), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(253), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(253), + 3670: uint8(255), + 3671: uint8(255), + 3672: uint8(247), + 3673: uint8(207), + 3674: uint8(255), + 3675: uint8(255), + 3676: uint8(255), + 3677: uint8(255), + 3678: uint8(255), + 3679: uint8(255), + 3680: uint8(127), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(249), + 3684: uint8(219), + 3685: uint8(7), + 3712: uint8(255), + 3713: uint8(255), + 3714: uint8(255), + 3715: uint8(255), + 3716: uint8(255), + 3717: uint8(31), + 3718: uint8(128), + 3719: uint8(63), + 3720: uint8(255), + 3721: uint8(67), + 3768: uint8(255), + 3769: uint8(255), + 3770: uint8(255), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(15), + 3774: uint8(255), + 3775: uint8(3), + 3776: uint8(255), + 3777: uint8(255), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3782: uint8(255), + 3783: uint8(255), + 3784: uint8(255), + 3785: uint8(255), + 3786: uint8(255), + 3787: uint8(255), + 3788: uint8(255), + 3789: uint8(255), + 3790: uint8(255), + 3791: uint8(255), + 3792: uint8(255), + 3793: uint8(255), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(255), + 3798: uint8(255), + 3799: uint8(255), + 3800: uint8(31), + 3808: uint8(255), + 3809: uint8(255), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(255), + 3816: uint8(143), + 3817: uint8(8), + 3818: uint8(255), + 3819: uint8(3), + 3840: uint8(239), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(150), + 3845: uint8(254), + 3846: uint8(247), + 3847: uint8(10), + 3848: uint8(132), + 3849: uint8(234), + 3850: uint8(150), + 3851: uint8(170), + 3852: uint8(150), + 3853: uint8(247), + 3854: uint8(247), + 3855: uint8(94), + 3856: uint8(255), + 3857: uint8(251), + 3858: uint8(255), + 3859: uint8(15), + 3860: uint8(238), + 3861: uint8(251), + 3862: uint8(255), + 3863: uint8(15), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(3), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(3), + 3886: uint8(255), + 3887: uint8(255), + 3888: uint8(255), + 3889: uint8(3), +} + +func Xiswalpha(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table3[uint32(int32(_table3[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + if wc < uint32(0x2fffe) { + return int32(1) + } + return 0 +} + +func X__iswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalpha(tls, c) +} + +func Xiswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalpha_l(tls, c, l) +} + +func Xiswblank(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, int32(wc)) +} + +func X__iswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswblank(tls, c) +} + +func Xiswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswblank_l(tls, c, l) +} + +func Xiswcntrl(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc < uint32(32) || wc-Uint32FromInt32(0x7f) < uint32(33) || wc-Uint32FromInt32(0x2028) < uint32(2) || wc-Uint32FromInt32(0xfff9) < uint32(3)) +} + +func X__iswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswcntrl(tls, c) +} + +func Xiswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswcntrl_l(tls, c, l) +} + +const WCTYPE_ALNUM = 1 +const WCTYPE_ALPHA = 2 +const WCTYPE_BLANK = 3 +const WCTYPE_CNTRL = 4 +const WCTYPE_DIGIT = 5 +const WCTYPE_GRAPH = 6 +const WCTYPE_LOWER = 7 +const WCTYPE_PRINT = 8 +const WCTYPE_PUNCT = 9 +const WCTYPE_SPACE = 10 +const WCTYPE_UPPER = 11 +const WCTYPE_XDIGIT = 12 + +func Xiswctype(tls *TLS, wc Twint_t, type1 Twctype_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v type1=%v, (%v:)", tls, wc, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + switch type1 { + case uint64(WCTYPE_ALNUM): + return Xiswalnum(tls, wc) + case uint64(WCTYPE_ALPHA): + return Xiswalpha(tls, wc) + case uint64(WCTYPE_BLANK): + return Xiswblank(tls, wc) + case uint64(WCTYPE_CNTRL): + return Xiswcntrl(tls, wc) + case uint64(WCTYPE_DIGIT): + return BoolInt32(wc-uint32('0') < uint32(10)) + case uint64(WCTYPE_GRAPH): + return Xiswgraph(tls, wc) + case uint64(WCTYPE_LOWER): + return Xiswlower(tls, wc) + case uint64(WCTYPE_PRINT): + return Xiswprint(tls, wc) + case uint64(WCTYPE_PUNCT): + return Xiswpunct(tls, wc) + case uint64(WCTYPE_SPACE): + return Xiswspace(tls, wc) + case uint64(WCTYPE_UPPER): + return Xiswupper(tls, wc) + case uint64(WCTYPE_XDIGIT): + return Xiswxdigit(tls, wc) + } + return 0 +} + +func Xwctype(tls *TLS, s uintptr) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var p uintptr + _, _ = i, p + i = int32(1) + p = uintptr(unsafe.Pointer(&_names)) + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(p))) && !(Xstrcmp(tls, s, p) != 0) { + return uint64(i) + } + goto _1 + _1: + ; + i++ + p += uintptr(6) + } + return uint64(0) +} + +/* order must match! */ +var _names = [73]uint8{'a', 'l', 'n', 'u', 'm', 0, 'a', 'l', 'p', 'h', 'a', 0, 'b', 'l', 'a', 'n', 'k', 0, 'c', 'n', 't', 'r', 'l', 0, 'd', 'i', 'g', 'i', 't', 0, 'g', 'r', 'a', 'p', 'h', 0, 'l', 'o', 'w', 'e', 'r', 0, 'p', 'r', 'i', 'n', 't', 0, 'p', 'u', 'n', 'c', 't', 0, 's', 'p', 'a', 'c', 'e', 0, 'u', 'p', 'p', 'e', 'r', 0, 'x', 'd', 'i', 'g', 'i', 't'} + +func X__iswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswctype(tls, c, t) +} + +func X__wctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctype(tls, s) +} + +func Xiswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswctype_l(tls, c, t, l) +} + +func Xwctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctype_l(tls, s, l) +} + +func Xiswdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-uint32('0') < uint32(10)) +} + +func X__iswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswdigit(tls, c) +} + +func Xiswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswdigit_l(tls, c, l) +} + +func Xiswgraph(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* ISO C defines this function as: */ + return BoolInt32(!(Xiswspace(tls, wc) != 0) && Xiswprint(tls, wc) != 0) +} + +func X__iswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswgraph(tls, c) +} + +func Xiswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswgraph_l(tls, c, l) +} + +func Xiswlower(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowupper(tls, wc) != wc) +} + +func X__iswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswlower(tls, c) +} + +func Xiswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswlower_l(tls, c, l) +} + +/* Consider all legal codepoints as printable except for: + * - C0 and C1 control characters + * - U+2028 and U+2029 (line/para break) + * - U+FFF9 through U+FFFB (interlinear annotation controls) + * The following code is optimized heavily to make hot paths for the + * expected printable characters. */ + +func Xiswprint(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0xff) { + return BoolInt32((wc+uint32(1))&uint32(0x7f) >= uint32(0x21)) + } + if wc < uint32(0x2028) || wc-uint32(0x202a) < uint32(Int32FromInt32(0xd800)-Int32FromInt32(0x202a)) || wc-uint32(0xe000) < uint32(Int32FromInt32(0xfff9)-Int32FromInt32(0xe000)) { + return int32(1) + } + if wc-uint32(0xfffc) > uint32(Int32FromInt32(0x10ffff)-Int32FromInt32(0xfffc)) || wc&uint32(0xfffe) == uint32(0xfffe) { + return 0 + } + return int32(1) +} + +func X__iswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswprint(tls, c) +} + +func Xiswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswprint_l(tls, c, l) +} + +var _table4 = [4000]uint8{ + 0: uint8(18), + 1: uint8(16), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(16), + 18: uint8(16), + 19: uint8(34), + 20: uint8(35), + 21: uint8(16), + 22: uint8(36), + 23: uint8(37), + 24: uint8(38), + 25: uint8(39), + 26: uint8(40), + 27: uint8(41), + 28: uint8(42), + 29: uint8(43), + 30: uint8(16), + 31: uint8(44), + 32: uint8(45), + 33: uint8(46), + 34: uint8(17), + 35: uint8(17), + 36: uint8(47), + 37: uint8(17), + 38: uint8(17), + 39: uint8(17), + 40: uint8(17), + 41: uint8(17), + 42: uint8(17), + 43: uint8(48), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(52), + 48: uint8(53), + 49: uint8(54), + 50: uint8(55), + 51: uint8(17), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(56), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(57), + 165: uint8(16), + 166: uint8(58), + 167: uint8(59), + 168: uint8(60), + 169: uint8(61), + 170: uint8(62), + 171: uint8(63), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(16), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(64), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(65), + 249: uint8(16), + 250: uint8(16), + 251: uint8(66), + 252: uint8(16), + 253: uint8(67), + 254: uint8(68), + 255: uint8(69), + 256: uint8(16), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(16), + 261: uint8(73), + 262: uint8(16), + 263: uint8(16), + 264: uint8(74), + 265: uint8(75), + 266: uint8(76), + 267: uint8(77), + 268: uint8(78), + 269: uint8(16), + 270: uint8(79), + 271: uint8(80), + 272: uint8(81), + 273: uint8(82), + 274: uint8(83), + 275: uint8(84), + 276: uint8(85), + 277: uint8(86), + 278: uint8(87), + 279: uint8(88), + 280: uint8(89), + 281: uint8(90), + 282: uint8(91), + 283: uint8(16), + 284: uint8(92), + 285: uint8(93), + 286: uint8(94), + 287: uint8(95), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(96), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(97), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(98), + 363: uint8(99), + 364: uint8(16), + 365: uint8(16), + 366: uint8(100), + 367: uint8(101), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(102), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(103), + 465: uint8(104), + 466: uint8(105), + 467: uint8(106), + 468: uint8(16), + 469: uint8(16), + 470: uint8(107), + 471: uint8(108), + 472: uint8(17), + 473: uint8(17), + 474: uint8(109), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(110), + 482: uint8(111), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(112), + 489: uint8(113), + 490: uint8(16), + 491: uint8(16), + 492: uint8(114), + 493: uint8(115), + 494: uint8(116), + 495: uint8(16), + 496: uint8(117), + 497: uint8(118), + 498: uint8(119), + 499: uint8(17), + 500: uint8(17), + 501: uint8(17), + 502: uint8(120), + 503: uint8(121), + 504: uint8(122), + 505: uint8(123), + 506: uint8(124), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 580: uint8(254), + 581: uint8(255), + 583: uint8(252), + 584: uint8(1), + 587: uint8(248), + 588: uint8(1), + 591: uint8(120), + 596: uint8(255), + 597: uint8(251), + 598: uint8(223), + 599: uint8(251), + 602: uint8(128), + 606: uint8(128), + 632: uint8(60), + 634: uint8(252), + 635: uint8(255), + 636: uint8(224), + 637: uint8(175), + 638: uint8(255), + 639: uint8(255), + 640: uint8(255), + 641: uint8(255), + 642: uint8(255), + 643: uint8(255), + 644: uint8(255), + 645: uint8(255), + 646: uint8(255), + 647: uint8(255), + 648: uint8(223), + 649: uint8(255), + 650: uint8(255), + 651: uint8(255), + 652: uint8(255), + 653: uint8(255), + 654: uint8(32), + 655: uint8(64), + 656: uint8(176), + 670: uint8(64), + 688: uint8(252), + 689: uint8(3), + 715: uint8(252), + 721: uint8(230), + 722: uint8(254), + 723: uint8(255), + 724: uint8(255), + 725: uint8(255), + 727: uint8(64), + 728: uint8(73), + 734: uint8(24), + 736: uint8(255), + 737: uint8(255), + 739: uint8(216), + 747: uint8(1), + 749: uint8(60), + 762: uint8(16), + 763: uint8(224), + 764: uint8(1), + 765: uint8(30), + 767: uint8(96), + 768: uint8(255), + 769: uint8(191), + 776: uint8(255), + 777: uint8(7), + 797: uint8(248), + 798: uint8(207), + 799: uint8(227), + 803: uint8(3), + 805: uint8(32), + 806: uint8(255), + 807: uint8(127), + 811: uint8(78), + 826: uint8(8), + 828: uint8(7), + 829: uint8(252), + 839: uint8(16), + 841: uint8(32), + 842: uint8(30), + 844: uint8(48), + 846: uint8(1), + 855: uint8(16), + 857: uint8(32), + 862: uint8(252), + 863: uint8(111), + 871: uint8(16), + 873: uint8(32), + 878: uint8(64), + 887: uint8(16), + 889: uint8(32), + 894: uint8(3), + 895: uint8(224), + 903: uint8(16), + 905: uint8(32), + 910: uint8(253), + 921: uint8(32), + 926: uint8(255), + 927: uint8(7), + 928: uint8(16), + 937: uint8(32), + 942: uint8(128), + 943: uint8(255), + 944: uint8(16), + 951: uint8(16), + 953: uint8(32), + 967: uint8(24), + 969: uint8(160), + 971: uint8(127), + 974: uint8(255), + 975: uint8(3), + 985: uint8(4), + 990: uint8(16), + 997: uint8(128), + 999: uint8(128), + 1000: uint8(192), + 1001: uint8(223), + 1003: uint8(12), + 1015: uint8(4), + 1017: uint8(31), + 1024: uint8(254), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1029: uint8(252), + 1030: uint8(255), + 1031: uint8(255), + 1040: uint8(252), + 1047: uint8(192), + 1048: uint8(255), + 1049: uint8(223), + 1050: uint8(255), + 1051: uint8(7), + 1062: uint8(128), + 1063: uint8(6), + 1065: uint8(252), + 1075: uint8(192), + 1087: uint8(8), + 1099: uint8(224), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(31), + 1106: uint8(255), + 1107: uint8(3), + 1120: uint8(1), + 1165: uint8(96), + 1168: uint8(1), + 1171: uint8(24), + 1181: uint8(56), + 1186: uint8(16), + 1190: uint8(112), + 1206: uint8(48), + 1209: uint8(254), + 1210: uint8(127), + 1211: uint8(47), + 1214: uint8(255), + 1215: uint8(3), + 1216: uint8(255), + 1217: uint8(127), + 1255: uint8(14), + 1256: uint8(49), + 1275: uint8(196), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(255), + 1283: uint8(192), + 1292: uint8(1), + 1294: uint8(224), + 1295: uint8(159), + 1300: uint8(127), + 1301: uint8(63), + 1302: uint8(255), + 1303: uint8(127), + 1318: uint8(16), + 1320: uint8(16), + 1323: uint8(252), + 1324: uint8(255), + 1325: uint8(255), + 1326: uint8(255), + 1327: uint8(31), + 1333: uint8(12), + 1340: uint8(64), + 1342: uint8(12), + 1343: uint8(240), + 1350: uint8(128), + 1351: uint8(248), + 1359: uint8(192), + 1368: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(255), + 1373: uint8(33), + 1374: uint8(144), + 1375: uint8(3), + 1400: uint8(255), + 1401: uint8(255), + 1402: uint8(255), + 1403: uint8(255), + 1404: uint8(127), + 1406: uint8(224), + 1407: uint8(251), + 1431: uint8(160), + 1432: uint8(3), + 1433: uint8(224), + 1435: uint8(224), + 1437: uint8(224), + 1439: uint8(96), + 1440: uint8(128), + 1441: uint8(248), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(252), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(255), + 1449: uint8(255), + 1450: uint8(255), + 1451: uint8(127), + 1452: uint8(223), + 1453: uint8(255), + 1454: uint8(241), + 1455: uint8(127), + 1456: uint8(255), + 1457: uint8(127), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(255), + 1463: uint8(255), + 1466: uint8(255), + 1467: uint8(255), + 1468: uint8(255), + 1469: uint8(255), + 1470: uint8(1), + 1472: uint8(123), + 1473: uint8(3), + 1474: uint8(208), + 1475: uint8(193), + 1476: uint8(175), + 1477: uint8(66), + 1479: uint8(12), + 1480: uint8(31), + 1481: uint8(188), + 1482: uint8(255), + 1483: uint8(255), + 1489: uint8(14), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(255), + 1497: uint8(255), + 1498: uint8(255), + 1499: uint8(255), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(255), + 1503: uint8(255), + 1504: uint8(255), + 1505: uint8(255), + 1506: uint8(255), + 1507: uint8(255), + 1508: uint8(127), + 1512: uint8(255), + 1513: uint8(7), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(255), + 1522: uint8(255), + 1523: uint8(255), + 1524: uint8(255), + 1525: uint8(255), + 1526: uint8(63), + 1533: uint8(252), + 1534: uint8(255), + 1535: uint8(255), + 1536: uint8(255), + 1537: uint8(255), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(207), + 1551: uint8(255), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(63), + 1555: uint8(255), + 1556: uint8(255), + 1557: uint8(255), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1596: uint8(224), + 1597: uint8(135), + 1598: uint8(3), + 1599: uint8(254), + 1614: uint8(1), + 1615: uint8(128), + 1632: uint8(255), + 1633: uint8(255), + 1634: uint8(255), + 1635: uint8(255), + 1636: uint8(255), + 1637: uint8(127), + 1638: uint8(255), + 1639: uint8(255), + 1640: uint8(255), + 1641: uint8(255), + 1648: uint8(255), + 1649: uint8(255), + 1650: uint8(255), + 1651: uint8(251), + 1652: uint8(255), + 1653: uint8(255), + 1654: uint8(255), + 1655: uint8(255), + 1656: uint8(255), + 1657: uint8(255), + 1658: uint8(255), + 1659: uint8(255), + 1660: uint8(255), + 1661: uint8(255), + 1662: uint8(15), + 1664: uint8(255), + 1665: uint8(255), + 1666: uint8(255), + 1667: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1670: uint8(255), + 1671: uint8(255), + 1672: uint8(255), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(255), + 1683: uint8(255), + 1684: uint8(255), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(63), + 1694: uint8(255), + 1695: uint8(15), + 1696: uint8(30), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(1), + 1701: uint8(252), + 1702: uint8(193), + 1703: uint8(224), + 1715: uint8(30), + 1716: uint8(1), + 1727: uint8(8), + 1746: uint8(255), + 1747: uint8(255), + 1752: uint8(255), + 1753: uint8(255), + 1754: uint8(255), + 1755: uint8(255), + 1756: uint8(15), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(127), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1790: uint8(255), + 1791: uint8(255), + 1816: uint8(255), + 1817: uint8(255), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(127), + 1855: uint8(192), + 1857: uint8(224), + 1869: uint8(128), + 1870: uint8(15), + 1871: uint8(112), + 1886: uint8(255), + 1888: uint8(255), + 1889: uint8(255), + 1890: uint8(127), + 1892: uint8(3), + 1905: uint8(6), + 1920: uint8(64), + 1925: uint8(15), + 1926: uint8(255), + 1927: uint8(3), + 1934: uint8(240), + 1944: uint8(16), + 1945: uint8(192), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(3), + 1951: uint8(23), + 1957: uint8(248), + 1962: uint8(8), + 1963: uint8(128), + 1974: uint8(8), + 1976: uint8(255), + 1977: uint8(63), + 1979: uint8(192), + 1995: uint8(240), + 1998: uint8(128), + 1999: uint8(3), + 2007: uint8(128), + 2008: uint8(2), + 2011: uint8(192), + 2014: uint8(67), + 2027: uint8(8), + 2045: uint8(56), + 2048: uint8(1), + 2111: uint8(128), + 2117: uint8(2), + 2134: uint8(252), + 2135: uint8(255), + 2136: uint8(3), + 2151: uint8(192), + 2175: uint8(48), + 2176: uint8(255), + 2177: uint8(255), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(255), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(255), + 2184: uint8(255), + 2185: uint8(255), + 2186: uint8(247), + 2187: uint8(255), + 2188: uint8(127), + 2189: uint8(15), + 2207: uint8(128), + 2208: uint8(254), + 2209: uint8(255), + 2211: uint8(252), + 2212: uint8(1), + 2215: uint8(248), + 2216: uint8(1), + 2219: uint8(248), + 2220: uint8(63), + 2236: uint8(127), + 2237: uint8(127), + 2239: uint8(48), + 2240: uint8(135), + 2241: uint8(255), + 2242: uint8(255), + 2243: uint8(255), + 2244: uint8(255), + 2245: uint8(255), + 2246: uint8(143), + 2247: uint8(255), + 2254: uint8(224), + 2255: uint8(255), + 2256: uint8(255), + 2257: uint8(127), + 2258: uint8(255), + 2259: uint8(15), + 2260: uint8(1), + 2266: uint8(255), + 2267: uint8(255), + 2268: uint8(255), + 2269: uint8(255), + 2270: uint8(255), + 2271: uint8(63), + 2300: uint8(255), + 2301: uint8(255), + 2302: uint8(255), + 2303: uint8(15), + 2308: uint8(15), + 2323: uint8(128), + 2330: uint8(1), + 2349: uint8(128), + 2378: uint8(128), + 2379: uint8(255), + 2382: uint8(128), + 2383: uint8(255), + 2388: uint8(128), + 2389: uint8(255), + 2399: uint8(248), + 2402: uint8(192), + 2403: uint8(143), + 2407: uint8(128), + 2423: uint8(48), + 2424: uint8(255), + 2425: uint8(255), + 2426: uint8(252), + 2427: uint8(255), + 2428: uint8(255), + 2429: uint8(255), + 2430: uint8(255), + 2431: uint8(255), + 2439: uint8(135), + 2440: uint8(255), + 2441: uint8(1), + 2442: uint8(255), + 2443: uint8(1), + 2447: uint8(224), + 2451: uint8(224), + 2457: uint8(1), + 2460: uint8(96), + 2461: uint8(248), + 2462: uint8(127), + 2471: uint8(254), + 2475: uint8(255), + 2479: uint8(255), + 2483: uint8(30), + 2485: uint8(254), + 2527: uint8(252), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(255), + 2543: uint8(127), + 2563: uint8(224), + 2564: uint8(127), + 2568: uint8(192), + 2569: uint8(255), + 2570: uint8(255), + 2571: uint8(3), + 2600: uint8(192), + 2601: uint8(63), + 2602: uint8(252), + 2603: uint8(255), + 2604: uint8(63), + 2607: uint8(128), + 2608: uint8(3), + 2615: uint8(254), + 2616: uint8(3), + 2617: uint8(32), + 2630: uint8(24), + 2632: uint8(15), + 2638: uint8(56), + 2648: uint8(225), + 2649: uint8(63), + 2651: uint8(232), + 2652: uint8(254), + 2653: uint8(255), + 2654: uint8(31), + 2662: uint8(96), + 2663: uint8(63), + 2677: uint8(2), + 2685: uint8(6), + 2695: uint8(24), + 2697: uint8(32), + 2700: uint8(192), + 2701: uint8(31), + 2702: uint8(31), + 2728: uint8(68), + 2729: uint8(248), + 2731: uint8(104), + 2744: uint8(76), + 2775: uint8(128), + 2776: uint8(255), + 2777: uint8(255), + 2778: uint8(255), + 2791: uint8(128), + 2792: uint8(14), + 2796: uint8(255), + 2797: uint8(31), + 2806: uint8(192), + 2821: uint8(8), + 2823: uint8(252), + 2855: uint8(14), + 2877: uint8(252), + 2878: uint8(7), + 2908: uint8(5), + 2918: uint8(24), + 2919: uint8(128), + 2920: uint8(255), + 2931: uint8(223), + 2932: uint8(7), + 2951: uint8(128), + 2952: uint8(62), + 2955: uint8(252), + 2956: uint8(255), + 2957: uint8(31), + 2958: uint8(3), + 2984: uint8(52), + 2994: uint8(128), + 3038: uint8(128), + 3039: uint8(1), + 3064: uint8(255), + 3065: uint8(255), + 3066: uint8(255), + 3067: uint8(255), + 3068: uint8(255), + 3069: uint8(255), + 3070: uint8(3), + 3071: uint8(128), + 3086: uint8(31), + 3110: uint8(255), + 3111: uint8(1), + 3149: uint8(192), + 3166: uint8(63), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(48), + 3179: uint8(248), + 3180: uint8(3), + 3216: uint8(255), + 3217: uint8(255), + 3218: uint8(255), + 3219: uint8(7), + 3260: uint8(4), + 3283: uint8(176), + 3284: uint8(15), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3302: uint8(255), + 3303: uint8(255), + 3304: uint8(255), + 3305: uint8(255), + 3306: uint8(255), + 3307: uint8(255), + 3308: uint8(255), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(255), + 3312: uint8(255), + 3313: uint8(255), + 3314: uint8(255), + 3315: uint8(255), + 3316: uint8(255), + 3317: uint8(255), + 3318: uint8(255), + 3319: uint8(255), + 3320: uint8(255), + 3321: uint8(255), + 3322: uint8(255), + 3323: uint8(255), + 3324: uint8(255), + 3325: uint8(255), + 3326: uint8(63), + 3328: uint8(255), + 3329: uint8(255), + 3330: uint8(255), + 3331: uint8(255), + 3332: uint8(127), + 3333: uint8(254), + 3334: uint8(255), + 3335: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3344: uint8(255), + 3345: uint8(255), + 3346: uint8(255), + 3347: uint8(255), + 3348: uint8(255), + 3349: uint8(255), + 3350: uint8(255), + 3351: uint8(255), + 3352: uint8(255), + 3353: uint8(255), + 3354: uint8(255), + 3355: uint8(255), + 3356: uint8(255), + 3357: uint8(1), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(63), + 3388: uint8(255), + 3389: uint8(255), + 3390: uint8(15), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(127), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(1), + 3448: uint8(2), + 3451: uint8(8), + 3455: uint8(8), + 3458: uint8(32), + 3462: uint8(32), + 3465: uint8(128), + 3469: uint8(128), + 3473: uint8(2), + 3477: uint8(2), + 3480: uint8(8), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(15), + 3507: uint8(248), + 3508: uint8(254), + 3509: uint8(255), + 3526: uint8(127), + 3529: uint8(128), + 3581: uint8(240), + 3583: uint8(128), + 3608: uint8(128), + 3609: uint8(255), + 3610: uint8(127), + 3624: uint8(112), + 3625: uint8(7), + 3627: uint8(192), + 3662: uint8(254), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(255), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(255), + 3670: uint8(31), + 3680: uint8(254), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(255), + 3684: uint8(255), + 3685: uint8(255), + 3686: uint8(255), + 3687: uint8(63), + 3742: uint8(3), + 3744: uint8(255), + 3745: uint8(255), + 3746: uint8(255), + 3747: uint8(255), + 3748: uint8(255), + 3749: uint8(15), + 3750: uint8(255), + 3751: uint8(255), + 3752: uint8(255), + 3753: uint8(255), + 3754: uint8(255), + 3755: uint8(255), + 3756: uint8(255), + 3757: uint8(255), + 3758: uint8(255), + 3759: uint8(255), + 3760: uint8(255), + 3761: uint8(255), + 3762: uint8(15), + 3764: uint8(255), + 3765: uint8(127), + 3766: uint8(254), + 3767: uint8(255), + 3768: uint8(254), + 3769: uint8(255), + 3770: uint8(254), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(255), + 3774: uint8(63), + 3776: uint8(255), + 3777: uint8(31), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3785: uint8(252), + 3789: uint8(28), + 3793: uint8(252), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(31), + 3804: uint8(192), + 3805: uint8(255), + 3806: uint8(255), + 3807: uint8(255), + 3808: uint8(7), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(15), + 3816: uint8(255), + 3817: uint8(1), + 3818: uint8(3), + 3820: uint8(63), + 3840: uint8(255), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(255), + 3845: uint8(255), + 3846: uint8(255), + 3847: uint8(255), + 3848: uint8(255), + 3849: uint8(255), + 3850: uint8(255), + 3851: uint8(255), + 3852: uint8(255), + 3853: uint8(255), + 3854: uint8(255), + 3855: uint8(255), + 3856: uint8(255), + 3857: uint8(255), + 3858: uint8(255), + 3859: uint8(255), + 3860: uint8(255), + 3861: uint8(255), + 3862: uint8(255), + 3863: uint8(255), + 3864: uint8(255), + 3865: uint8(255), + 3866: uint8(63), + 3868: uint8(255), + 3869: uint8(31), + 3870: uint8(255), + 3871: uint8(7), + 3872: uint8(255), + 3873: uint8(255), + 3874: uint8(255), + 3875: uint8(255), + 3876: uint8(255), + 3877: uint8(255), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(255), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(255), + 3886: uint8(15), + 3888: uint8(255), + 3889: uint8(255), + 3890: uint8(255), + 3891: uint8(255), + 3892: uint8(255), + 3893: uint8(255), + 3894: uint8(255), + 3895: uint8(255), + 3896: uint8(255), + 3897: uint8(255), + 3898: uint8(255), + 3899: uint8(1), + 3900: uint8(255), + 3901: uint8(15), + 3904: uint8(255), + 3905: uint8(15), + 3906: uint8(255), + 3907: uint8(255), + 3908: uint8(255), + 3909: uint8(255), + 3910: uint8(255), + 3911: uint8(255), + 3912: uint8(255), + 3914: uint8(255), + 3915: uint8(3), + 3916: uint8(255), + 3917: uint8(255), + 3918: uint8(255), + 3919: uint8(255), + 3920: uint8(255), + 3922: uint8(255), + 3923: uint8(255), + 3924: uint8(255), + 3925: uint8(63), + 3936: uint8(255), + 3937: uint8(239), + 3938: uint8(255), + 3939: uint8(255), + 3940: uint8(255), + 3941: uint8(255), + 3942: uint8(255), + 3943: uint8(255), + 3944: uint8(255), + 3945: uint8(255), + 3946: uint8(255), + 3947: uint8(255), + 3948: uint8(255), + 3949: uint8(255), + 3950: uint8(123), + 3951: uint8(252), + 3952: uint8(255), + 3953: uint8(255), + 3954: uint8(255), + 3955: uint8(255), + 3956: uint8(231), + 3957: uint8(199), + 3958: uint8(255), + 3959: uint8(255), + 3960: uint8(255), + 3961: uint8(231), + 3962: uint8(255), + 3963: uint8(255), + 3964: uint8(255), + 3965: uint8(255), + 3966: uint8(255), + 3967: uint8(255), + 3968: uint8(255), + 3969: uint8(255), + 3970: uint8(255), + 3971: uint8(255), + 3972: uint8(255), + 3973: uint8(255), + 3974: uint8(255), + 3975: uint8(255), + 3976: uint8(255), + 3977: uint8(255), + 3978: uint8(15), + 3980: uint8(255), + 3981: uint8(63), + 3982: uint8(15), + 3983: uint8(7), + 3984: uint8(7), + 3986: uint8(63), +} + +func Xiswpunct(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table4[uint32(int32(_table4[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + return 0 +} + +func X__iswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswpunct(tls, c) +} + +func Xiswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswpunct_l(tls, c, l) +} + +type Tmbstate_t = struct { + F__opaque1 uint32 + F__opaque2 uint32 +} + +type t__mbstate_t = Tmbstate_t + +/* Our definition of whitespace is the Unicode White_Space property, + * minus non-breaking spaces (U+00A0, U+2007, and U+202F) and script- + * specific characters with non-blank glyphs (U+1680 and U+180E). */ + +func Xiswspace(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc != 0 && Xwcschr(tls, uintptr(unsafe.Pointer(&_spaces)), int32(wc)) != 0) +} + +var _spaces = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__iswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswspace(tls, c) +} + +func Xiswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswspace_l(tls, c, l) +} + +func Xiswupper(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowlower(tls, wc) != wc) +} + +func X__iswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswupper(tls, c) +} + +func Xiswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswupper_l(tls, c, l) +} + +func Xiswxdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-Uint32FromUint8('0') < uint32(10) || wc|Uint32FromInt32(32)-Uint32FromUint8('a') < uint32(6)) +} + +func X__iswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswxdigit(tls, c) +} + +func Xiswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswxdigit_l(tls, c, l) +} + +func Xisxdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) +} + +func X__isxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisxdigit(tls, c) +} + +func Xisxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isxdigit_l(tls, c, l) +} + +// C documentation +// +// /* nonsense function that should NEVER be used! */ +func Xtoascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return c & int32(0x7f) +} + +func Xtolower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('A') < uint32(26)) != 0 { + return c | int32(32) + } + return c +} + +func X__tolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtolower(tls, c) +} + +func Xtolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__tolower_l(tls, c, l) +} + +func Xtoupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('a') < uint32(26)) != 0 { + return c & int32(0x5f) + } + return c +} + +func X__toupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtoupper(tls, c) +} + +func Xtoupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__toupper_l(tls, c, l) +} + +var _tab1 = [2666]uint8{ + 0: uint8(7), + 1: uint8(8), + 2: uint8(9), + 3: uint8(10), + 4: uint8(11), + 5: uint8(12), + 6: uint8(6), + 7: uint8(6), + 8: uint8(6), + 9: uint8(6), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), + 13: uint8(6), + 14: uint8(6), + 15: uint8(6), + 16: uint8(13), + 17: uint8(6), + 18: uint8(6), + 19: uint8(14), + 20: uint8(6), + 21: uint8(6), + 22: uint8(6), + 23: uint8(6), + 24: uint8(6), + 25: uint8(6), + 26: uint8(6), + 27: uint8(6), + 28: uint8(15), + 29: uint8(16), + 30: uint8(17), + 31: uint8(18), + 32: uint8(6), + 33: uint8(19), + 34: uint8(6), + 35: uint8(6), + 36: uint8(6), + 37: uint8(6), + 38: uint8(6), + 39: uint8(6), + 40: uint8(6), + 41: uint8(6), + 42: uint8(6), + 43: uint8(6), + 44: uint8(20), + 45: uint8(21), + 46: uint8(6), + 47: uint8(6), + 48: uint8(6), + 49: uint8(6), + 50: uint8(6), + 51: uint8(6), + 52: uint8(6), + 53: uint8(6), + 54: uint8(6), + 55: uint8(6), + 56: uint8(6), + 57: uint8(6), + 58: uint8(6), + 59: uint8(6), + 60: uint8(6), + 61: uint8(6), + 62: uint8(6), + 63: uint8(6), + 64: uint8(6), + 65: uint8(6), + 66: uint8(6), + 67: uint8(6), + 68: uint8(6), + 69: uint8(6), + 70: uint8(6), + 71: uint8(6), + 72: uint8(6), + 73: uint8(6), + 74: uint8(6), + 75: uint8(6), + 76: uint8(6), + 77: uint8(6), + 78: uint8(6), + 79: uint8(6), + 80: uint8(6), + 81: uint8(6), + 82: uint8(6), + 83: uint8(6), + 84: uint8(6), + 85: uint8(6), + 86: uint8(6), + 87: uint8(6), + 88: uint8(6), + 89: uint8(6), + 90: uint8(6), + 91: uint8(6), + 92: uint8(6), + 93: uint8(6), + 94: uint8(6), + 95: uint8(6), + 96: uint8(6), + 97: uint8(6), + 98: uint8(6), + 99: uint8(6), + 100: uint8(6), + 101: uint8(6), + 102: uint8(6), + 103: uint8(6), + 104: uint8(6), + 105: uint8(6), + 106: uint8(6), + 107: uint8(6), + 108: uint8(6), + 109: uint8(6), + 110: uint8(6), + 111: uint8(6), + 112: uint8(6), + 113: uint8(6), + 114: uint8(6), + 115: uint8(6), + 116: uint8(6), + 117: uint8(6), + 118: uint8(6), + 119: uint8(6), + 120: uint8(6), + 121: uint8(6), + 122: uint8(6), + 123: uint8(6), + 124: uint8(6), + 125: uint8(6), + 126: uint8(6), + 127: uint8(6), + 128: uint8(6), + 129: uint8(6), + 130: uint8(6), + 131: uint8(6), + 132: uint8(6), + 133: uint8(6), + 134: uint8(6), + 135: uint8(6), + 136: uint8(6), + 137: uint8(6), + 138: uint8(6), + 139: uint8(6), + 140: uint8(6), + 141: uint8(6), + 142: uint8(6), + 143: uint8(6), + 144: uint8(6), + 145: uint8(6), + 146: uint8(6), + 147: uint8(6), + 148: uint8(6), + 149: uint8(6), + 150: uint8(6), + 151: uint8(6), + 152: uint8(6), + 153: uint8(6), + 154: uint8(6), + 155: uint8(6), + 156: uint8(6), + 157: uint8(6), + 158: uint8(6), + 159: uint8(6), + 160: uint8(6), + 161: uint8(6), + 162: uint8(6), + 163: uint8(6), + 164: uint8(6), + 165: uint8(6), + 166: uint8(22), + 167: uint8(23), + 168: uint8(6), + 169: uint8(6), + 170: uint8(6), + 171: uint8(24), + 172: uint8(6), + 173: uint8(6), + 174: uint8(6), + 175: uint8(6), + 176: uint8(6), + 177: uint8(6), + 178: uint8(6), + 179: uint8(6), + 180: uint8(6), + 181: uint8(6), + 182: uint8(6), + 183: uint8(6), + 184: uint8(6), + 185: uint8(6), + 186: uint8(6), + 187: uint8(6), + 188: uint8(6), + 189: uint8(6), + 190: uint8(6), + 191: uint8(6), + 192: uint8(6), + 193: uint8(6), + 194: uint8(6), + 195: uint8(6), + 196: uint8(6), + 197: uint8(6), + 198: uint8(6), + 199: uint8(6), + 200: uint8(6), + 201: uint8(6), + 202: uint8(6), + 203: uint8(6), + 204: uint8(6), + 205: uint8(6), + 206: uint8(6), + 207: uint8(6), + 208: uint8(6), + 209: uint8(6), + 210: uint8(6), + 211: uint8(6), + 212: uint8(6), + 213: uint8(6), + 214: uint8(6), + 215: uint8(6), + 216: uint8(6), + 217: uint8(6), + 218: uint8(6), + 219: uint8(6), + 220: uint8(6), + 221: uint8(6), + 222: uint8(6), + 223: uint8(6), + 224: uint8(6), + 225: uint8(6), + 226: uint8(6), + 227: uint8(6), + 228: uint8(6), + 229: uint8(6), + 230: uint8(6), + 231: uint8(6), + 232: uint8(6), + 233: uint8(6), + 234: uint8(6), + 235: uint8(6), + 236: uint8(6), + 237: uint8(6), + 238: uint8(6), + 239: uint8(6), + 240: uint8(6), + 241: uint8(6), + 242: uint8(6), + 243: uint8(6), + 244: uint8(6), + 245: uint8(6), + 246: uint8(6), + 247: uint8(6), + 248: uint8(6), + 249: uint8(6), + 250: uint8(6), + 251: uint8(6), + 252: uint8(6), + 253: uint8(6), + 254: uint8(6), + 255: uint8(25), + 256: uint8(6), + 257: uint8(6), + 258: uint8(6), + 259: uint8(6), + 260: uint8(26), + 261: uint8(6), + 262: uint8(6), + 263: uint8(6), + 264: uint8(6), + 265: uint8(6), + 266: uint8(6), + 267: uint8(6), + 268: uint8(27), + 269: uint8(6), + 270: uint8(6), + 271: uint8(6), + 272: uint8(6), + 273: uint8(6), + 274: uint8(6), + 275: uint8(6), + 276: uint8(6), + 277: uint8(6), + 278: uint8(6), + 279: uint8(6), + 280: uint8(28), + 281: uint8(6), + 282: uint8(6), + 283: uint8(6), + 284: uint8(6), + 285: uint8(6), + 286: uint8(6), + 287: uint8(6), + 288: uint8(6), + 289: uint8(6), + 290: uint8(6), + 291: uint8(6), + 292: uint8(6), + 293: uint8(6), + 294: uint8(6), + 295: uint8(6), + 296: uint8(6), + 297: uint8(6), + 298: uint8(6), + 299: uint8(6), + 300: uint8(6), + 301: uint8(6), + 302: uint8(6), + 303: uint8(6), + 304: uint8(6), + 305: uint8(6), + 306: uint8(6), + 307: uint8(6), + 308: uint8(6), + 309: uint8(6), + 310: uint8(6), + 311: uint8(6), + 312: uint8(6), + 313: uint8(6), + 314: uint8(6), + 315: uint8(6), + 316: uint8(6), + 317: uint8(6), + 318: uint8(6), + 319: uint8(6), + 320: uint8(6), + 321: uint8(6), + 322: uint8(6), + 323: uint8(6), + 324: uint8(6), + 325: uint8(6), + 326: uint8(6), + 327: uint8(6), + 328: uint8(6), + 329: uint8(6), + 330: uint8(6), + 331: uint8(6), + 332: uint8(6), + 333: uint8(6), + 334: uint8(6), + 335: uint8(6), + 336: uint8(6), + 337: uint8(6), + 338: uint8(6), + 339: uint8(6), + 340: uint8(6), + 341: uint8(6), + 342: uint8(6), + 343: uint8(6), + 344: uint8(6), + 345: uint8(6), + 346: uint8(6), + 347: uint8(6), + 348: uint8(6), + 349: uint8(6), + 350: uint8(6), + 351: uint8(6), + 352: uint8(6), + 353: uint8(6), + 354: uint8(6), + 355: uint8(6), + 356: uint8(6), + 357: uint8(6), + 358: uint8(6), + 359: uint8(6), + 360: uint8(6), + 361: uint8(6), + 362: uint8(6), + 363: uint8(6), + 364: uint8(6), + 365: uint8(6), + 366: uint8(29), + 367: uint8(6), + 368: uint8(6), + 369: uint8(6), + 370: uint8(6), + 371: uint8(6), + 372: uint8(6), + 373: uint8(6), + 374: uint8(6), + 375: uint8(6), + 376: uint8(6), + 377: uint8(6), + 378: uint8(6), + 379: uint8(6), + 380: uint8(6), + 381: uint8(6), + 382: uint8(6), + 383: uint8(6), + 384: uint8(6), + 385: uint8(6), + 386: uint8(6), + 387: uint8(6), + 388: uint8(6), + 389: uint8(6), + 390: uint8(6), + 391: uint8(6), + 392: uint8(6), + 393: uint8(6), + 394: uint8(6), + 395: uint8(6), + 396: uint8(6), + 397: uint8(6), + 398: uint8(6), + 399: uint8(6), + 400: uint8(6), + 401: uint8(6), + 402: uint8(6), + 403: uint8(6), + 404: uint8(6), + 405: uint8(6), + 406: uint8(6), + 407: uint8(6), + 408: uint8(6), + 409: uint8(6), + 410: uint8(6), + 411: uint8(6), + 412: uint8(6), + 413: uint8(6), + 414: uint8(6), + 415: uint8(6), + 416: uint8(6), + 417: uint8(6), + 418: uint8(6), + 419: uint8(6), + 420: uint8(6), + 421: uint8(6), + 422: uint8(6), + 423: uint8(6), + 424: uint8(6), + 425: uint8(6), + 426: uint8(6), + 427: uint8(6), + 428: uint8(6), + 429: uint8(6), + 430: uint8(6), + 431: uint8(6), + 432: uint8(6), + 433: uint8(6), + 434: uint8(6), + 435: uint8(6), + 436: uint8(6), + 437: uint8(6), + 438: uint8(6), + 439: uint8(6), + 440: uint8(6), + 441: uint8(6), + 442: uint8(6), + 443: uint8(6), + 444: uint8(6), + 445: uint8(6), + 446: uint8(6), + 447: uint8(6), + 448: uint8(6), + 449: uint8(6), + 450: uint8(6), + 451: uint8(6), + 452: uint8(6), + 453: uint8(6), + 454: uint8(6), + 455: uint8(6), + 456: uint8(6), + 457: uint8(6), + 458: uint8(6), + 459: uint8(6), + 460: uint8(6), + 461: uint8(6), + 462: uint8(6), + 463: uint8(6), + 464: uint8(6), + 465: uint8(6), + 466: uint8(6), + 467: uint8(6), + 468: uint8(6), + 469: uint8(6), + 470: uint8(6), + 471: uint8(6), + 472: uint8(6), + 473: uint8(6), + 474: uint8(6), + 475: uint8(6), + 476: uint8(6), + 477: uint8(6), + 478: uint8(6), + 479: uint8(6), + 480: uint8(6), + 481: uint8(6), + 482: uint8(6), + 483: uint8(6), + 484: uint8(6), + 485: uint8(6), + 486: uint8(6), + 487: uint8(6), + 488: uint8(6), + 489: uint8(30), + 490: uint8(6), + 491: uint8(6), + 492: uint8(6), + 493: uint8(6), + 494: uint8(6), + 495: uint8(6), + 496: uint8(6), + 497: uint8(6), + 498: uint8(6), + 499: uint8(6), + 500: uint8(6), + 501: uint8(6), + 502: uint8(6), + 503: uint8(6), + 504: uint8(6), + 505: uint8(6), + 506: uint8(6), + 507: uint8(6), + 508: uint8(6), + 509: uint8(6), + 510: uint8(6), + 511: uint8(6), + 623: uint8(36), + 624: uint8(43), + 625: uint8(43), + 626: uint8(43), + 627: uint8(43), + 628: uint8(43), + 629: uint8(43), + 630: uint8(43), + 631: uint8(43), + 632: uint8(1), + 634: uint8(84), + 635: uint8(86), + 636: uint8(86), + 637: uint8(86), + 638: uint8(86), + 639: uint8(86), + 640: uint8(86), + 641: uint8(86), + 642: uint8(86), + 662: uint8(24), + 666: uint8(43), + 667: uint8(43), + 668: uint8(43), + 669: uint8(43), + 670: uint8(43), + 671: uint8(43), + 672: uint8(43), + 673: uint8(7), + 674: uint8(43), + 675: uint8(43), + 676: uint8(91), + 677: uint8(86), + 678: uint8(86), + 679: uint8(86), + 680: uint8(86), + 681: uint8(86), + 682: uint8(86), + 683: uint8(86), + 684: uint8(74), + 685: uint8(86), + 686: uint8(86), + 687: uint8(5), + 688: uint8(49), + 689: uint8(80), + 690: uint8(49), + 691: uint8(80), + 692: uint8(49), + 693: uint8(80), + 694: uint8(49), + 695: uint8(80), + 696: uint8(49), + 697: uint8(80), + 698: uint8(49), + 699: uint8(80), + 700: uint8(49), + 701: uint8(80), + 702: uint8(49), + 703: uint8(80), + 704: uint8(36), + 705: uint8(80), + 706: uint8(121), + 707: uint8(49), + 708: uint8(80), + 709: uint8(49), + 710: uint8(80), + 711: uint8(49), + 712: uint8(56), + 713: uint8(80), + 714: uint8(49), + 715: uint8(80), + 716: uint8(49), + 717: uint8(80), + 718: uint8(49), + 719: uint8(80), + 720: uint8(49), + 721: uint8(80), + 722: uint8(49), + 723: uint8(80), + 724: uint8(49), + 725: uint8(80), + 726: uint8(49), + 727: uint8(80), + 728: uint8(78), + 729: uint8(49), + 730: uint8(2), + 731: uint8(78), + 732: uint8(13), + 733: uint8(13), + 734: uint8(78), + 735: uint8(3), + 736: uint8(78), + 738: uint8(36), + 739: uint8(110), + 741: uint8(78), + 742: uint8(49), + 743: uint8(38), + 744: uint8(110), + 745: uint8(81), + 746: uint8(78), + 747: uint8(36), + 748: uint8(80), + 749: uint8(78), + 750: uint8(57), + 751: uint8(20), + 752: uint8(129), + 753: uint8(27), + 754: uint8(29), + 755: uint8(29), + 756: uint8(83), + 757: uint8(49), + 758: uint8(80), + 759: uint8(49), + 760: uint8(80), + 761: uint8(13), + 762: uint8(49), + 763: uint8(80), + 764: uint8(49), + 765: uint8(80), + 766: uint8(49), + 767: uint8(80), + 768: uint8(27), + 769: uint8(83), + 770: uint8(36), + 771: uint8(80), + 772: uint8(49), + 773: uint8(2), + 774: uint8(92), + 775: uint8(123), + 776: uint8(92), + 777: uint8(123), + 778: uint8(92), + 779: uint8(123), + 780: uint8(92), + 781: uint8(123), + 782: uint8(92), + 783: uint8(123), + 784: uint8(20), + 785: uint8(121), + 786: uint8(92), + 787: uint8(123), + 788: uint8(92), + 789: uint8(123), + 790: uint8(92), + 791: uint8(45), + 792: uint8(43), + 793: uint8(73), + 794: uint8(3), + 795: uint8(72), + 796: uint8(3), + 797: uint8(120), + 798: uint8(92), + 799: uint8(123), + 800: uint8(20), + 802: uint8(150), + 803: uint8(10), + 804: uint8(1), + 805: uint8(43), + 806: uint8(40), + 807: uint8(6), + 808: uint8(6), + 810: uint8(42), + 811: uint8(6), + 812: uint8(42), + 813: uint8(42), + 814: uint8(43), + 815: uint8(7), + 816: uint8(187), + 817: uint8(181), + 818: uint8(43), + 819: uint8(30), + 821: uint8(43), + 822: uint8(7), + 823: uint8(43), + 824: uint8(43), + 825: uint8(43), + 826: uint8(1), + 827: uint8(43), + 828: uint8(43), + 829: uint8(43), + 830: uint8(43), + 831: uint8(43), + 832: uint8(43), + 833: uint8(43), + 834: uint8(43), + 835: uint8(43), + 836: uint8(43), + 837: uint8(43), + 838: uint8(43), + 839: uint8(43), + 840: uint8(43), + 841: uint8(43), + 842: uint8(43), + 843: uint8(43), + 844: uint8(43), + 845: uint8(43), + 846: uint8(43), + 847: uint8(43), + 848: uint8(43), + 849: uint8(43), + 850: uint8(43), + 851: uint8(43), + 852: uint8(43), + 853: uint8(43), + 854: uint8(43), + 855: uint8(43), + 856: uint8(43), + 857: uint8(43), + 858: uint8(43), + 859: uint8(1), + 860: uint8(43), + 861: uint8(43), + 862: uint8(43), + 863: uint8(43), + 864: uint8(43), + 865: uint8(43), + 866: uint8(43), + 867: uint8(43), + 868: uint8(43), + 869: uint8(43), + 870: uint8(43), + 871: uint8(43), + 872: uint8(43), + 873: uint8(43), + 874: uint8(43), + 875: uint8(43), + 876: uint8(43), + 877: uint8(43), + 878: uint8(43), + 879: uint8(43), + 880: uint8(43), + 881: uint8(43), + 882: uint8(43), + 883: uint8(42), + 884: uint8(43), + 885: uint8(43), + 886: uint8(43), + 887: uint8(43), + 888: uint8(43), + 889: uint8(43), + 890: uint8(43), + 891: uint8(43), + 892: uint8(43), + 893: uint8(43), + 894: uint8(43), + 895: uint8(43), + 896: uint8(43), + 897: uint8(205), + 898: uint8(70), + 899: uint8(205), + 900: uint8(43), + 902: uint8(37), + 903: uint8(43), + 904: uint8(7), + 905: uint8(1), + 906: uint8(6), + 907: uint8(1), + 908: uint8(85), + 909: uint8(86), + 910: uint8(86), + 911: uint8(86), + 912: uint8(86), + 913: uint8(86), + 914: uint8(85), + 915: uint8(86), + 916: uint8(86), + 917: uint8(2), + 918: uint8(36), + 919: uint8(129), + 920: uint8(129), + 921: uint8(129), + 922: uint8(129), + 923: uint8(129), + 924: uint8(21), + 925: uint8(129), + 926: uint8(129), + 927: uint8(129), + 930: uint8(43), + 932: uint8(178), + 933: uint8(209), + 934: uint8(178), + 935: uint8(209), + 936: uint8(178), + 937: uint8(209), + 938: uint8(178), + 939: uint8(209), + 942: uint8(205), + 943: uint8(204), + 944: uint8(1), + 946: uint8(215), + 947: uint8(215), + 948: uint8(215), + 949: uint8(215), + 950: uint8(215), + 951: uint8(131), + 952: uint8(129), + 953: uint8(129), + 954: uint8(129), + 955: uint8(129), + 956: uint8(129), + 957: uint8(129), + 958: uint8(129), + 959: uint8(129), + 960: uint8(129), + 961: uint8(129), + 962: uint8(172), + 963: uint8(172), + 964: uint8(172), + 965: uint8(172), + 966: uint8(172), + 967: uint8(172), + 968: uint8(172), + 969: uint8(172), + 970: uint8(172), + 971: uint8(172), + 972: uint8(28), + 978: uint8(49), + 979: uint8(80), + 980: uint8(49), + 981: uint8(80), + 982: uint8(49), + 983: uint8(80), + 984: uint8(49), + 985: uint8(80), + 986: uint8(49), + 987: uint8(80), + 988: uint8(49), + 989: uint8(2), + 992: uint8(49), + 993: uint8(80), + 994: uint8(49), + 995: uint8(80), + 996: uint8(49), + 997: uint8(80), + 998: uint8(49), + 999: uint8(80), + 1000: uint8(49), + 1001: uint8(80), + 1002: uint8(49), + 1003: uint8(80), + 1004: uint8(49), + 1005: uint8(80), + 1006: uint8(49), + 1007: uint8(80), + 1008: uint8(49), + 1009: uint8(80), + 1010: uint8(78), + 1011: uint8(49), + 1012: uint8(80), + 1013: uint8(49), + 1014: uint8(80), + 1015: uint8(78), + 1016: uint8(49), + 1017: uint8(80), + 1018: uint8(49), + 1019: uint8(80), + 1020: uint8(49), + 1021: uint8(80), + 1022: uint8(49), + 1023: uint8(80), + 1024: uint8(49), + 1025: uint8(80), + 1026: uint8(49), + 1027: uint8(80), + 1028: uint8(49), + 1029: uint8(80), + 1030: uint8(49), + 1031: uint8(2), + 1032: uint8(135), + 1033: uint8(166), + 1034: uint8(135), + 1035: uint8(166), + 1036: uint8(135), + 1037: uint8(166), + 1038: uint8(135), + 1039: uint8(166), + 1040: uint8(135), + 1041: uint8(166), + 1042: uint8(135), + 1043: uint8(166), + 1044: uint8(135), + 1045: uint8(166), + 1046: uint8(135), + 1047: uint8(166), + 1048: uint8(42), + 1049: uint8(43), + 1050: uint8(43), + 1051: uint8(43), + 1052: uint8(43), + 1053: uint8(43), + 1054: uint8(43), + 1055: uint8(43), + 1056: uint8(43), + 1057: uint8(43), + 1058: uint8(43), + 1059: uint8(43), + 1060: uint8(43), + 1064: uint8(84), + 1065: uint8(86), + 1066: uint8(86), + 1067: uint8(86), + 1068: uint8(86), + 1069: uint8(86), + 1070: uint8(86), + 1071: uint8(86), + 1072: uint8(86), + 1073: uint8(86), + 1074: uint8(86), + 1075: uint8(86), + 1076: uint8(86), + 1171: uint8(84), + 1172: uint8(86), + 1173: uint8(86), + 1174: uint8(86), + 1175: uint8(86), + 1176: uint8(86), + 1177: uint8(86), + 1178: uint8(86), + 1179: uint8(86), + 1180: uint8(86), + 1181: uint8(86), + 1182: uint8(86), + 1183: uint8(86), + 1184: uint8(12), + 1186: uint8(12), + 1187: uint8(42), + 1188: uint8(43), + 1189: uint8(43), + 1190: uint8(43), + 1191: uint8(43), + 1192: uint8(43), + 1193: uint8(43), + 1194: uint8(43), + 1195: uint8(43), + 1196: uint8(43), + 1197: uint8(43), + 1198: uint8(43), + 1199: uint8(43), + 1200: uint8(43), + 1201: uint8(7), + 1202: uint8(42), + 1203: uint8(1), + 1257: uint8(42), + 1258: uint8(43), + 1259: uint8(43), + 1260: uint8(43), + 1261: uint8(43), + 1262: uint8(43), + 1263: uint8(43), + 1264: uint8(43), + 1265: uint8(43), + 1266: uint8(43), + 1267: uint8(43), + 1268: uint8(43), + 1269: uint8(43), + 1270: uint8(43), + 1271: uint8(43), + 1272: uint8(43), + 1273: uint8(43), + 1274: uint8(43), + 1275: uint8(43), + 1276: uint8(43), + 1277: uint8(43), + 1278: uint8(43), + 1279: uint8(43), + 1280: uint8(43), + 1281: uint8(43), + 1282: uint8(43), + 1283: uint8(43), + 1284: uint8(86), + 1285: uint8(86), + 1286: uint8(108), + 1287: uint8(129), + 1288: uint8(21), + 1290: uint8(43), + 1291: uint8(43), + 1292: uint8(43), + 1293: uint8(43), + 1294: uint8(43), + 1295: uint8(43), + 1296: uint8(43), + 1297: uint8(43), + 1298: uint8(43), + 1299: uint8(43), + 1300: uint8(43), + 1301: uint8(43), + 1302: uint8(43), + 1303: uint8(43), + 1304: uint8(43), + 1305: uint8(43), + 1306: uint8(43), + 1307: uint8(43), + 1308: uint8(43), + 1309: uint8(43), + 1310: uint8(43), + 1311: uint8(43), + 1312: uint8(43), + 1313: uint8(43), + 1314: uint8(43), + 1315: uint8(43), + 1316: uint8(43), + 1317: uint8(43), + 1318: uint8(43), + 1319: uint8(43), + 1320: uint8(43), + 1321: uint8(43), + 1322: uint8(43), + 1323: uint8(43), + 1324: uint8(43), + 1325: uint8(43), + 1326: uint8(43), + 1327: uint8(43), + 1328: uint8(43), + 1329: uint8(43), + 1330: uint8(43), + 1331: uint8(43), + 1332: uint8(7), + 1333: uint8(108), + 1334: uint8(3), + 1335: uint8(65), + 1336: uint8(43), + 1337: uint8(43), + 1338: uint8(86), + 1339: uint8(86), + 1340: uint8(86), + 1341: uint8(86), + 1342: uint8(86), + 1343: uint8(86), + 1344: uint8(86), + 1345: uint8(86), + 1346: uint8(86), + 1347: uint8(86), + 1348: uint8(86), + 1349: uint8(86), + 1350: uint8(86), + 1351: uint8(86), + 1352: uint8(44), + 1353: uint8(86), + 1354: uint8(43), + 1355: uint8(43), + 1356: uint8(43), + 1357: uint8(43), + 1358: uint8(43), + 1359: uint8(43), + 1360: uint8(43), + 1361: uint8(43), + 1362: uint8(43), + 1363: uint8(43), + 1364: uint8(43), + 1365: uint8(43), + 1366: uint8(43), + 1367: uint8(43), + 1368: uint8(43), + 1369: uint8(43), + 1370: uint8(43), + 1371: uint8(43), + 1372: uint8(43), + 1373: uint8(43), + 1374: uint8(43), + 1375: uint8(1), + 1416: uint8(12), + 1417: uint8(108), + 1423: uint8(6), + 1462: uint8(6), + 1463: uint8(37), + 1464: uint8(6), + 1465: uint8(37), + 1466: uint8(6), + 1467: uint8(37), + 1468: uint8(6), + 1469: uint8(37), + 1470: uint8(6), + 1471: uint8(37), + 1472: uint8(6), + 1473: uint8(37), + 1474: uint8(6), + 1475: uint8(37), + 1476: uint8(6), + 1477: uint8(37), + 1478: uint8(6), + 1479: uint8(37), + 1480: uint8(6), + 1481: uint8(37), + 1482: uint8(6), + 1483: uint8(37), + 1484: uint8(6), + 1485: uint8(37), + 1486: uint8(6), + 1487: uint8(37), + 1488: uint8(6), + 1489: uint8(37), + 1490: uint8(6), + 1491: uint8(37), + 1492: uint8(6), + 1493: uint8(37), + 1494: uint8(6), + 1495: uint8(37), + 1496: uint8(6), + 1497: uint8(37), + 1498: uint8(6), + 1499: uint8(37), + 1500: uint8(6), + 1501: uint8(37), + 1502: uint8(6), + 1503: uint8(37), + 1504: uint8(6), + 1505: uint8(37), + 1506: uint8(6), + 1507: uint8(37), + 1508: uint8(6), + 1509: uint8(37), + 1510: uint8(6), + 1511: uint8(37), + 1512: uint8(86), + 1513: uint8(122), + 1514: uint8(158), + 1515: uint8(38), + 1516: uint8(6), + 1517: uint8(37), + 1518: uint8(6), + 1519: uint8(37), + 1520: uint8(6), + 1521: uint8(37), + 1522: uint8(6), + 1523: uint8(37), + 1524: uint8(6), + 1525: uint8(37), + 1526: uint8(6), + 1527: uint8(37), + 1528: uint8(6), + 1529: uint8(37), + 1530: uint8(6), + 1531: uint8(37), + 1532: uint8(6), + 1533: uint8(37), + 1534: uint8(6), + 1535: uint8(37), + 1536: uint8(6), + 1537: uint8(37), + 1538: uint8(6), + 1539: uint8(37), + 1540: uint8(6), + 1541: uint8(37), + 1542: uint8(6), + 1543: uint8(37), + 1544: uint8(6), + 1545: uint8(37), + 1546: uint8(6), + 1547: uint8(1), + 1548: uint8(43), + 1549: uint8(43), + 1550: uint8(79), + 1551: uint8(86), + 1552: uint8(86), + 1553: uint8(44), + 1554: uint8(43), + 1555: uint8(127), + 1556: uint8(86), + 1557: uint8(86), + 1558: uint8(57), + 1559: uint8(43), + 1560: uint8(43), + 1561: uint8(85), + 1562: uint8(86), + 1563: uint8(86), + 1564: uint8(43), + 1565: uint8(43), + 1566: uint8(79), + 1567: uint8(86), + 1568: uint8(86), + 1569: uint8(44), + 1570: uint8(43), + 1571: uint8(127), + 1572: uint8(86), + 1573: uint8(86), + 1574: uint8(129), + 1575: uint8(55), + 1576: uint8(117), + 1577: uint8(91), + 1578: uint8(123), + 1579: uint8(92), + 1580: uint8(43), + 1581: uint8(43), + 1582: uint8(79), + 1583: uint8(86), + 1584: uint8(86), + 1585: uint8(2), + 1586: uint8(172), + 1587: uint8(4), + 1590: uint8(57), + 1591: uint8(43), + 1592: uint8(43), + 1593: uint8(85), + 1594: uint8(86), + 1595: uint8(86), + 1596: uint8(43), + 1597: uint8(43), + 1598: uint8(79), + 1599: uint8(86), + 1600: uint8(86), + 1601: uint8(44), + 1602: uint8(43), + 1603: uint8(43), + 1604: uint8(86), + 1605: uint8(86), + 1606: uint8(50), + 1607: uint8(19), + 1608: uint8(129), + 1609: uint8(87), + 1611: uint8(111), + 1612: uint8(129), + 1613: uint8(126), + 1614: uint8(201), + 1615: uint8(215), + 1616: uint8(126), + 1617: uint8(45), + 1618: uint8(129), + 1619: uint8(129), + 1620: uint8(14), + 1621: uint8(126), + 1622: uint8(57), + 1623: uint8(127), + 1624: uint8(111), + 1625: uint8(87), + 1627: uint8(129), + 1628: uint8(129), + 1629: uint8(126), + 1630: uint8(21), + 1632: uint8(126), + 1633: uint8(3), + 1634: uint8(43), + 1635: uint8(43), + 1636: uint8(43), + 1637: uint8(43), + 1638: uint8(43), + 1639: uint8(43), + 1640: uint8(43), + 1641: uint8(43), + 1642: uint8(43), + 1643: uint8(43), + 1644: uint8(43), + 1645: uint8(43), + 1646: uint8(7), + 1647: uint8(43), + 1648: uint8(36), + 1649: uint8(43), + 1650: uint8(151), + 1651: uint8(43), + 1652: uint8(43), + 1653: uint8(43), + 1654: uint8(43), + 1655: uint8(43), + 1656: uint8(43), + 1657: uint8(43), + 1658: uint8(43), + 1659: uint8(43), + 1660: uint8(42), + 1661: uint8(43), + 1662: uint8(43), + 1663: uint8(43), + 1664: uint8(43), + 1665: uint8(43), + 1666: uint8(86), + 1667: uint8(86), + 1668: uint8(86), + 1669: uint8(86), + 1670: uint8(86), + 1671: uint8(128), + 1672: uint8(129), + 1673: uint8(129), + 1674: uint8(129), + 1675: uint8(129), + 1676: uint8(57), + 1677: uint8(187), + 1678: uint8(42), + 1679: uint8(43), + 1680: uint8(43), + 1681: uint8(43), + 1682: uint8(43), + 1683: uint8(43), + 1684: uint8(43), + 1685: uint8(43), + 1686: uint8(43), + 1687: uint8(43), + 1688: uint8(43), + 1689: uint8(43), + 1690: uint8(43), + 1691: uint8(43), + 1692: uint8(43), + 1693: uint8(43), + 1694: uint8(43), + 1695: uint8(43), + 1696: uint8(43), + 1697: uint8(43), + 1698: uint8(43), + 1699: uint8(43), + 1700: uint8(43), + 1701: uint8(43), + 1702: uint8(43), + 1703: uint8(43), + 1704: uint8(43), + 1705: uint8(43), + 1706: uint8(43), + 1707: uint8(43), + 1708: uint8(43), + 1709: uint8(43), + 1710: uint8(43), + 1711: uint8(43), + 1712: uint8(43), + 1713: uint8(43), + 1714: uint8(43), + 1715: uint8(43), + 1716: uint8(43), + 1717: uint8(43), + 1718: uint8(43), + 1719: uint8(1), + 1720: uint8(129), + 1721: uint8(129), + 1722: uint8(129), + 1723: uint8(129), + 1724: uint8(129), + 1725: uint8(129), + 1726: uint8(129), + 1727: uint8(129), + 1728: uint8(129), + 1729: uint8(129), + 1730: uint8(129), + 1731: uint8(129), + 1732: uint8(129), + 1733: uint8(129), + 1734: uint8(129), + 1735: uint8(201), + 1736: uint8(172), + 1737: uint8(172), + 1738: uint8(172), + 1739: uint8(172), + 1740: uint8(172), + 1741: uint8(172), + 1742: uint8(172), + 1743: uint8(172), + 1744: uint8(172), + 1745: uint8(172), + 1746: uint8(172), + 1747: uint8(172), + 1748: uint8(172), + 1749: uint8(172), + 1750: uint8(172), + 1751: uint8(208), + 1752: uint8(13), + 1754: uint8(78), + 1755: uint8(49), + 1756: uint8(2), + 1757: uint8(180), + 1758: uint8(193), + 1759: uint8(193), + 1760: uint8(215), + 1761: uint8(215), + 1762: uint8(36), + 1763: uint8(80), + 1764: uint8(49), + 1765: uint8(80), + 1766: uint8(49), + 1767: uint8(80), + 1768: uint8(49), + 1769: uint8(80), + 1770: uint8(49), + 1771: uint8(80), + 1772: uint8(49), + 1773: uint8(80), + 1774: uint8(49), + 1775: uint8(80), + 1776: uint8(49), + 1777: uint8(80), + 1778: uint8(49), + 1779: uint8(80), + 1780: uint8(49), + 1781: uint8(80), + 1782: uint8(49), + 1783: uint8(80), + 1784: uint8(49), + 1785: uint8(80), + 1786: uint8(49), + 1787: uint8(80), + 1788: uint8(49), + 1789: uint8(80), + 1790: uint8(49), + 1791: uint8(80), + 1792: uint8(49), + 1793: uint8(80), + 1794: uint8(49), + 1795: uint8(80), + 1796: uint8(215), + 1797: uint8(215), + 1798: uint8(83), + 1799: uint8(193), + 1800: uint8(71), + 1801: uint8(212), + 1802: uint8(215), + 1803: uint8(215), + 1804: uint8(215), + 1805: uint8(5), + 1806: uint8(43), + 1807: uint8(43), + 1808: uint8(43), + 1809: uint8(43), + 1810: uint8(43), + 1811: uint8(43), + 1812: uint8(43), + 1813: uint8(43), + 1814: uint8(43), + 1815: uint8(43), + 1816: uint8(43), + 1817: uint8(43), + 1818: uint8(7), + 1819: uint8(1), + 1821: uint8(1), + 1913: uint8(78), + 1914: uint8(49), + 1915: uint8(80), + 1916: uint8(49), + 1917: uint8(80), + 1918: uint8(49), + 1919: uint8(80), + 1920: uint8(49), + 1921: uint8(80), + 1922: uint8(49), + 1923: uint8(80), + 1924: uint8(49), + 1925: uint8(80), + 1926: uint8(49), + 1927: uint8(80), + 1928: uint8(13), + 1934: uint8(36), + 1935: uint8(80), + 1936: uint8(49), + 1937: uint8(80), + 1938: uint8(49), + 1939: uint8(80), + 1940: uint8(49), + 1941: uint8(80), + 1942: uint8(49), + 1943: uint8(80), + 1978: uint8(43), + 1979: uint8(43), + 1980: uint8(43), + 1981: uint8(43), + 1982: uint8(43), + 1983: uint8(43), + 1984: uint8(43), + 1985: uint8(43), + 1986: uint8(43), + 1987: uint8(43), + 1988: uint8(43), + 1989: uint8(121), + 1990: uint8(92), + 1991: uint8(123), + 1992: uint8(92), + 1993: uint8(123), + 1994: uint8(79), + 1995: uint8(123), + 1996: uint8(92), + 1997: uint8(123), + 1998: uint8(92), + 1999: uint8(123), + 2000: uint8(92), + 2001: uint8(123), + 2002: uint8(92), + 2003: uint8(123), + 2004: uint8(92), + 2005: uint8(123), + 2006: uint8(92), + 2007: uint8(123), + 2008: uint8(92), + 2009: uint8(123), + 2010: uint8(92), + 2011: uint8(123), + 2012: uint8(92), + 2013: uint8(123), + 2014: uint8(92), + 2015: uint8(45), + 2016: uint8(43), + 2017: uint8(43), + 2018: uint8(121), + 2019: uint8(20), + 2020: uint8(92), + 2021: uint8(123), + 2022: uint8(92), + 2023: uint8(45), + 2024: uint8(121), + 2025: uint8(42), + 2026: uint8(92), + 2027: uint8(39), + 2028: uint8(92), + 2029: uint8(123), + 2030: uint8(92), + 2031: uint8(123), + 2032: uint8(92), + 2033: uint8(123), + 2034: uint8(164), + 2036: uint8(10), + 2037: uint8(180), + 2038: uint8(92), + 2039: uint8(123), + 2040: uint8(92), + 2041: uint8(123), + 2042: uint8(79), + 2043: uint8(3), + 2044: uint8(42), + 2045: uint8(43), + 2046: uint8(43), + 2047: uint8(43), + 2048: uint8(43), + 2049: uint8(43), + 2050: uint8(43), + 2051: uint8(43), + 2052: uint8(43), + 2053: uint8(43), + 2054: uint8(43), + 2055: uint8(43), + 2056: uint8(43), + 2057: uint8(43), + 2058: uint8(43), + 2059: uint8(43), + 2060: uint8(43), + 2061: uint8(43), + 2062: uint8(43), + 2063: uint8(1), + 2091: uint8(72), + 2101: uint8(42), + 2102: uint8(43), + 2103: uint8(43), + 2104: uint8(43), + 2105: uint8(43), + 2106: uint8(43), + 2107: uint8(43), + 2108: uint8(43), + 2109: uint8(43), + 2110: uint8(43), + 2111: uint8(43), + 2112: uint8(43), + 2113: uint8(43), + 2114: uint8(43), + 2115: uint8(43), + 2116: uint8(43), + 2117: uint8(43), + 2118: uint8(43), + 2119: uint8(43), + 2120: uint8(43), + 2121: uint8(43), + 2122: uint8(43), + 2123: uint8(43), + 2124: uint8(43), + 2125: uint8(43), + 2126: uint8(43), + 2127: uint8(43), + 2161: uint8(43), + 2162: uint8(43), + 2163: uint8(43), + 2164: uint8(43), + 2165: uint8(43), + 2166: uint8(43), + 2167: uint8(43), + 2168: uint8(43), + 2169: uint8(7), + 2171: uint8(72), + 2172: uint8(86), + 2173: uint8(86), + 2174: uint8(86), + 2175: uint8(86), + 2176: uint8(86), + 2177: uint8(86), + 2178: uint8(86), + 2179: uint8(86), + 2180: uint8(2), + 2236: uint8(43), + 2237: uint8(43), + 2238: uint8(43), + 2239: uint8(43), + 2240: uint8(43), + 2241: uint8(43), + 2242: uint8(43), + 2243: uint8(43), + 2244: uint8(43), + 2245: uint8(43), + 2246: uint8(43), + 2247: uint8(43), + 2248: uint8(43), + 2249: uint8(85), + 2250: uint8(86), + 2251: uint8(86), + 2252: uint8(86), + 2253: uint8(86), + 2254: uint8(86), + 2255: uint8(86), + 2256: uint8(86), + 2257: uint8(86), + 2258: uint8(86), + 2259: uint8(86), + 2260: uint8(86), + 2261: uint8(86), + 2262: uint8(14), + 2294: uint8(36), + 2295: uint8(43), + 2296: uint8(43), + 2297: uint8(43), + 2298: uint8(43), + 2299: uint8(43), + 2300: uint8(43), + 2301: uint8(43), + 2302: uint8(43), + 2303: uint8(43), + 2304: uint8(43), + 2305: uint8(43), + 2306: uint8(7), + 2308: uint8(86), + 2309: uint8(86), + 2310: uint8(86), + 2311: uint8(86), + 2312: uint8(86), + 2313: uint8(86), + 2314: uint8(86), + 2315: uint8(86), + 2316: uint8(86), + 2317: uint8(86), + 2318: uint8(86), + 2319: uint8(86), + 2364: uint8(36), + 2365: uint8(43), + 2366: uint8(43), + 2367: uint8(43), + 2368: uint8(43), + 2369: uint8(43), + 2370: uint8(43), + 2371: uint8(43), + 2372: uint8(43), + 2373: uint8(43), + 2374: uint8(43), + 2375: uint8(43), + 2376: uint8(43), + 2377: uint8(43), + 2378: uint8(43), + 2379: uint8(43), + 2380: uint8(43), + 2381: uint8(7), + 2386: uint8(86), + 2387: uint8(86), + 2388: uint8(86), + 2389: uint8(86), + 2390: uint8(86), + 2391: uint8(86), + 2392: uint8(86), + 2393: uint8(86), + 2394: uint8(86), + 2395: uint8(86), + 2396: uint8(86), + 2397: uint8(86), + 2398: uint8(86), + 2399: uint8(86), + 2400: uint8(86), + 2401: uint8(86), + 2402: uint8(86), + 2461: uint8(42), + 2462: uint8(43), + 2463: uint8(43), + 2464: uint8(43), + 2465: uint8(43), + 2466: uint8(43), + 2467: uint8(43), + 2468: uint8(43), + 2469: uint8(43), + 2470: uint8(43), + 2471: uint8(43), + 2472: uint8(86), + 2473: uint8(86), + 2474: uint8(86), + 2475: uint8(86), + 2476: uint8(86), + 2477: uint8(86), + 2478: uint8(86), + 2479: uint8(86), + 2480: uint8(86), + 2481: uint8(86), + 2482: uint8(14), + 2515: uint8(42), + 2516: uint8(43), + 2517: uint8(43), + 2518: uint8(43), + 2519: uint8(43), + 2520: uint8(43), + 2521: uint8(43), + 2522: uint8(43), + 2523: uint8(43), + 2524: uint8(43), + 2525: uint8(43), + 2526: uint8(86), + 2527: uint8(86), + 2528: uint8(86), + 2529: uint8(86), + 2530: uint8(86), + 2531: uint8(86), + 2532: uint8(86), + 2533: uint8(86), + 2534: uint8(86), + 2535: uint8(86), + 2536: uint8(14), + 2580: uint8(43), + 2581: uint8(43), + 2582: uint8(43), + 2583: uint8(43), + 2584: uint8(43), + 2585: uint8(43), + 2586: uint8(43), + 2587: uint8(43), + 2588: uint8(43), + 2589: uint8(43), + 2590: uint8(43), + 2591: uint8(85), + 2592: uint8(86), + 2593: uint8(86), + 2594: uint8(86), + 2595: uint8(86), + 2596: uint8(86), + 2597: uint8(86), + 2598: uint8(86), + 2599: uint8(86), + 2600: uint8(86), + 2601: uint8(86), + 2602: uint8(14), +} +var _rules = [240]int32{ + 1: int32(0x2001), + 2: -int32(0x2000), + 3: int32(0x1dbf00), + 4: int32(0x2e700), + 5: int32(0x7900), + 6: int32(0x2402), + 7: int32(0x101), + 8: -int32(0x100), + 10: int32(0x201), + 11: -int32(0x200), + 12: -int32(0xc6ff), + 13: -int32(0xe800), + 14: -int32(0x78ff), + 15: -int32(0x12c00), + 16: int32(0xc300), + 17: int32(0xd201), + 18: int32(0xce01), + 19: int32(0xcd01), + 20: int32(0x4f01), + 21: int32(0xca01), + 22: int32(0xcb01), + 23: int32(0xcf01), + 24: int32(0x6100), + 25: int32(0xd301), + 26: int32(0xd101), + 27: int32(0xa300), + 28: int32(0xd501), + 29: int32(0x8200), + 30: int32(0xd601), + 31: int32(0xda01), + 32: int32(0xd901), + 33: int32(0xdb01), + 34: int32(0x3800), + 35: int32(0x3), + 36: -int32(0x4f00), + 37: -int32(0x60ff), + 38: -int32(0x37ff), + 39: int32(0x242802), + 41: int32(0x101), + 42: -int32(0x100), + 43: -int32(0xcd00), + 44: -int32(0xda00), + 45: -int32(0x81ff), + 46: int32(0x2a2b01), + 47: -int32(0xa2ff), + 48: int32(0x2a2801), + 49: int32(0x2a3f00), + 50: -int32(0xc2ff), + 51: int32(0x4501), + 52: int32(0x4701), + 53: int32(0x2a1f00), + 54: int32(0x2a1c00), + 55: int32(0x2a1e00), + 56: -int32(0xd200), + 57: -int32(0xce00), + 58: -int32(0xca00), + 59: -int32(0xcb00), + 60: int32(0xa54f00), + 61: int32(0xa54b00), + 62: -int32(0xcf00), + 63: int32(0xa52800), + 64: int32(0xa54400), + 65: -int32(0xd100), + 66: -int32(0xd300), + 67: int32(0x29f700), + 68: int32(0xa54100), + 69: int32(0x29fd00), + 70: -int32(0xd500), + 71: -int32(0xd600), + 72: int32(0x29e700), + 73: int32(0xa54300), + 74: int32(0xa52a00), + 75: -int32(0x4500), + 76: -int32(0xd900), + 77: -int32(0x4700), + 78: -int32(0xdb00), + 79: int32(0xa51500), + 80: int32(0xa51200), + 81: int32(0x4c2402), + 83: int32(0x2001), + 84: -int32(0x2000), + 85: int32(0x101), + 86: -int32(0x100), + 87: int32(0x5400), + 88: int32(0x7401), + 89: int32(0x2601), + 90: int32(0x2501), + 91: int32(0x4001), + 92: int32(0x3f01), + 93: -int32(0x2600), + 94: -int32(0x2500), + 95: -int32(0x1f00), + 96: -int32(0x4000), + 97: -int32(0x3f00), + 98: int32(0x801), + 99: -int32(0x3e00), + 100: -int32(0x3900), + 101: -int32(0x2f00), + 102: -int32(0x3600), + 103: -int32(0x800), + 104: -int32(0x5600), + 105: -int32(0x5000), + 106: int32(0x700), + 107: -int32(0x7400), + 108: -int32(0x3bff), + 109: -int32(0x6000), + 110: -int32(0x6ff), + 111: int32(0x701a02), + 112: int32(0x101), + 113: -int32(0x100), + 114: int32(0x2001), + 115: -int32(0x2000), + 116: int32(0x5001), + 117: int32(0xf01), + 118: -int32(0xf00), + 120: int32(0x3001), + 121: -int32(0x3000), + 122: int32(0x101), + 123: -int32(0x100), + 125: int32(0xbc000), + 126: int32(0x1c6001), + 128: int32(0x97d001), + 129: int32(0x801), + 130: -int32(0x800), + 131: int32(0x8a0502), + 133: -int32(0xbbfff), + 134: -int32(0x186200), + 135: int32(0x89c200), + 136: -int32(0x182500), + 137: -int32(0x186e00), + 138: -int32(0x186d00), + 139: -int32(0x186400), + 140: -int32(0x186300), + 141: -int32(0x185c00), + 143: int32(0x8a3800), + 144: int32(0x8a0400), + 145: int32(0xee600), + 146: int32(0x101), + 147: -int32(0x100), + 149: -int32(0x3b00), + 150: -int32(0x1dbeff), + 151: int32(0x8f1d02), + 152: int32(0x800), + 153: -int32(0x7ff), + 155: int32(0x5600), + 156: -int32(0x55ff), + 157: int32(0x4a00), + 158: int32(0x6400), + 159: int32(0x8000), + 160: int32(0x7000), + 161: int32(0x7e00), + 162: int32(0x900), + 163: -int32(0x49ff), + 164: -int32(0x8ff), + 165: -int32(0x1c2500), + 166: -int32(0x63ff), + 167: -int32(0x6fff), + 168: -int32(0x7fff), + 169: -int32(0x7dff), + 170: int32(0xac0502), + 172: int32(0x1001), + 173: -int32(0x1000), + 174: int32(0x1c01), + 175: int32(0x101), + 176: -int32(0x1d5cff), + 177: -int32(0x20beff), + 178: -int32(0x2045ff), + 179: -int32(0x1c00), + 180: int32(0xb10b02), + 181: int32(0x101), + 182: -int32(0x100), + 183: int32(0x3001), + 184: -int32(0x3000), + 186: -int32(0x29f6ff), + 187: -int32(0xee5ff), + 188: -int32(0x29e6ff), + 189: -int32(0x2a2b00), + 190: -int32(0x2a2800), + 191: -int32(0x2a1bff), + 192: -int32(0x29fcff), + 193: -int32(0x2a1eff), + 194: -int32(0x2a1dff), + 195: -int32(0x2a3eff), + 197: -int32(0x1c6000), + 199: int32(0x101), + 200: -int32(0x100), + 201: int32(0xbc0c02), + 203: int32(0x101), + 204: -int32(0x100), + 205: -int32(0xa543ff), + 206: int32(0x3a001), + 207: -int32(0x8a03ff), + 208: -int32(0xa527ff), + 209: int32(0x3000), + 210: -int32(0xa54eff), + 211: -int32(0xa54aff), + 212: -int32(0xa540ff), + 213: -int32(0xa511ff), + 214: -int32(0xa529ff), + 215: -int32(0xa514ff), + 216: -int32(0x2fff), + 217: -int32(0xa542ff), + 218: -int32(0x8a37ff), + 220: -int32(0x97d000), + 221: -int32(0x3a000), + 223: int32(0x2001), + 224: -int32(0x2000), + 226: int32(0x2801), + 227: -int32(0x2800), + 229: int32(0x4001), + 230: -int32(0x4000), + 232: int32(0x2001), + 233: -int32(0x2000), + 235: int32(0x2001), + 236: -int32(0x2000), + 238: int32(0x2201), + 239: -int32(0x2200), +} +var _rulebases = [512]uint8{ + 1: uint8(6), + 2: uint8(39), + 3: uint8(81), + 4: uint8(111), + 5: uint8(119), + 16: uint8(124), + 19: uint8(127), + 28: uint8(131), + 29: uint8(142), + 30: uint8(146), + 31: uint8(151), + 33: uint8(170), + 44: uint8(180), + 45: uint8(196), + 166: uint8(198), + 167: uint8(201), + 171: uint8(219), + 255: uint8(222), + 260: uint8(225), + 268: uint8(228), + 280: uint8(231), + 366: uint8(234), + 489: uint8(237), +} +var _exceptions = [200][2]uint8{ + 0: { + 0: uint8(48), + 1: uint8(12), + }, + 1: { + 0: uint8(49), + 1: uint8(13), + }, + 2: { + 0: uint8(120), + 1: uint8(14), + }, + 3: { + 0: uint8(127), + 1: uint8(15), + }, + 4: { + 0: uint8(128), + 1: uint8(16), + }, + 5: { + 0: uint8(129), + 1: uint8(17), + }, + 6: { + 0: uint8(134), + 1: uint8(18), + }, + 7: { + 0: uint8(137), + 1: uint8(19), + }, + 8: { + 0: uint8(138), + 1: uint8(19), + }, + 9: { + 0: uint8(142), + 1: uint8(20), + }, + 10: { + 0: uint8(143), + 1: uint8(21), + }, + 11: { + 0: uint8(144), + 1: uint8(22), + }, + 12: { + 0: uint8(147), + 1: uint8(19), + }, + 13: { + 0: uint8(148), + 1: uint8(23), + }, + 14: { + 0: uint8(149), + 1: uint8(24), + }, + 15: { + 0: uint8(150), + 1: uint8(25), + }, + 16: { + 0: uint8(151), + 1: uint8(26), + }, + 17: { + 0: uint8(154), + 1: uint8(27), + }, + 18: { + 0: uint8(156), + 1: uint8(25), + }, + 19: { + 0: uint8(157), + 1: uint8(28), + }, + 20: { + 0: uint8(158), + 1: uint8(29), + }, + 21: { + 0: uint8(159), + 1: uint8(30), + }, + 22: { + 0: uint8(166), + 1: uint8(31), + }, + 23: { + 0: uint8(169), + 1: uint8(31), + }, + 24: { + 0: uint8(174), + 1: uint8(31), + }, + 25: { + 0: uint8(177), + 1: uint8(32), + }, + 26: { + 0: uint8(178), + 1: uint8(32), + }, + 27: { + 0: uint8(183), + 1: uint8(33), + }, + 28: { + 0: uint8(191), + 1: uint8(34), + }, + 29: { + 0: uint8(197), + 1: uint8(35), + }, + 30: { + 0: uint8(200), + 1: uint8(35), + }, + 31: { + 0: uint8(203), + 1: uint8(35), + }, + 32: { + 0: uint8(221), + 1: uint8(36), + }, + 33: { + 0: uint8(242), + 1: uint8(35), + }, + 34: { + 0: uint8(246), + 1: uint8(37), + }, + 35: { + 0: uint8(247), + 1: uint8(38), + }, + 36: { + 0: uint8(32), + 1: uint8(45), + }, + 37: { + 0: uint8(58), + 1: uint8(46), + }, + 38: { + 0: uint8(61), + 1: uint8(47), + }, + 39: { + 0: uint8(62), + 1: uint8(48), + }, + 40: { + 0: uint8(63), + 1: uint8(49), + }, + 41: { + 0: uint8(64), + 1: uint8(49), + }, + 42: { + 0: uint8(67), + 1: uint8(50), + }, + 43: { + 0: uint8(68), + 1: uint8(51), + }, + 44: { + 0: uint8(69), + 1: uint8(52), + }, + 45: { + 0: uint8(80), + 1: uint8(53), + }, + 46: { + 0: uint8(81), + 1: uint8(54), + }, + 47: { + 0: uint8(82), + 1: uint8(55), + }, + 48: { + 0: uint8(83), + 1: uint8(56), + }, + 49: { + 0: uint8(84), + 1: uint8(57), + }, + 50: { + 0: uint8(89), + 1: uint8(58), + }, + 51: { + 0: uint8(91), + 1: uint8(59), + }, + 52: { + 0: uint8(92), + 1: uint8(60), + }, + 53: { + 0: uint8(97), + 1: uint8(61), + }, + 54: { + 0: uint8(99), + 1: uint8(62), + }, + 55: { + 0: uint8(101), + 1: uint8(63), + }, + 56: { + 0: uint8(102), + 1: uint8(64), + }, + 57: { + 0: uint8(104), + 1: uint8(65), + }, + 58: { + 0: uint8(105), + 1: uint8(66), + }, + 59: { + 0: uint8(106), + 1: uint8(64), + }, + 60: { + 0: uint8(107), + 1: uint8(67), + }, + 61: { + 0: uint8(108), + 1: uint8(68), + }, + 62: { + 0: uint8(111), + 1: uint8(66), + }, + 63: { + 0: uint8(113), + 1: uint8(69), + }, + 64: { + 0: uint8(114), + 1: uint8(70), + }, + 65: { + 0: uint8(117), + 1: uint8(71), + }, + 66: { + 0: uint8(125), + 1: uint8(72), + }, + 67: { + 0: uint8(130), + 1: uint8(73), + }, + 68: { + 0: uint8(135), + 1: uint8(74), + }, + 69: { + 0: uint8(137), + 1: uint8(75), + }, + 70: { + 0: uint8(138), + 1: uint8(76), + }, + 71: { + 0: uint8(139), + 1: uint8(76), + }, + 72: { + 0: uint8(140), + 1: uint8(77), + }, + 73: { + 0: uint8(146), + 1: uint8(78), + }, + 74: { + 0: uint8(157), + 1: uint8(79), + }, + 75: { + 0: uint8(158), + 1: uint8(80), + }, + 76: { + 0: uint8(69), + 1: uint8(87), + }, + 77: { + 0: uint8(123), + 1: uint8(29), + }, + 78: { + 0: uint8(124), + 1: uint8(29), + }, + 79: { + 0: uint8(125), + 1: uint8(29), + }, + 80: { + 0: uint8(127), + 1: uint8(88), + }, + 81: { + 0: uint8(134), + 1: uint8(89), + }, + 82: { + 0: uint8(136), + 1: uint8(90), + }, + 83: { + 0: uint8(137), + 1: uint8(90), + }, + 84: { + 0: uint8(138), + 1: uint8(90), + }, + 85: { + 0: uint8(140), + 1: uint8(91), + }, + 86: { + 0: uint8(142), + 1: uint8(92), + }, + 87: { + 0: uint8(143), + 1: uint8(92), + }, + 88: { + 0: uint8(172), + 1: uint8(93), + }, + 89: { + 0: uint8(173), + 1: uint8(94), + }, + 90: { + 0: uint8(174), + 1: uint8(94), + }, + 91: { + 0: uint8(175), + 1: uint8(94), + }, + 92: { + 0: uint8(194), + 1: uint8(95), + }, + 93: { + 0: uint8(204), + 1: uint8(96), + }, + 94: { + 0: uint8(205), + 1: uint8(97), + }, + 95: { + 0: uint8(206), + 1: uint8(97), + }, + 96: { + 0: uint8(207), + 1: uint8(98), + }, + 97: { + 0: uint8(208), + 1: uint8(99), + }, + 98: { + 0: uint8(209), + 1: uint8(100), + }, + 99: { + 0: uint8(213), + 1: uint8(101), + }, + 100: { + 0: uint8(214), + 1: uint8(102), + }, + 101: { + 0: uint8(215), + 1: uint8(103), + }, + 102: { + 0: uint8(240), + 1: uint8(104), + }, + 103: { + 0: uint8(241), + 1: uint8(105), + }, + 104: { + 0: uint8(242), + 1: uint8(106), + }, + 105: { + 0: uint8(243), + 1: uint8(107), + }, + 106: { + 0: uint8(244), + 1: uint8(108), + }, + 107: { + 0: uint8(245), + 1: uint8(109), + }, + 108: { + 0: uint8(249), + 1: uint8(110), + }, + 109: { + 0: uint8(253), + 1: uint8(45), + }, + 110: { + 0: uint8(254), + 1: uint8(45), + }, + 111: { + 0: uint8(255), + 1: uint8(45), + }, + 112: { + 0: uint8(80), + 1: uint8(105), + }, + 113: { + 0: uint8(81), + 1: uint8(105), + }, + 114: { + 0: uint8(82), + 1: uint8(105), + }, + 115: { + 0: uint8(83), + 1: uint8(105), + }, + 116: { + 0: uint8(84), + 1: uint8(105), + }, + 117: { + 0: uint8(85), + 1: uint8(105), + }, + 118: { + 0: uint8(86), + 1: uint8(105), + }, + 119: { + 0: uint8(87), + 1: uint8(105), + }, + 120: { + 0: uint8(88), + 1: uint8(105), + }, + 121: { + 0: uint8(89), + 1: uint8(105), + }, + 122: { + 0: uint8(90), + 1: uint8(105), + }, + 123: { + 0: uint8(91), + 1: uint8(105), + }, + 124: { + 0: uint8(92), + 1: uint8(105), + }, + 125: { + 0: uint8(93), + 1: uint8(105), + }, + 126: { + 0: uint8(94), + 1: uint8(105), + }, + 127: { + 0: uint8(95), + 1: uint8(105), + }, + 128: { + 0: uint8(130), + }, + 129: { + 0: uint8(131), + }, + 130: { + 0: uint8(132), + }, + 131: { + 0: uint8(133), + }, + 132: { + 0: uint8(134), + }, + 133: { + 0: uint8(135), + }, + 134: { + 0: uint8(136), + }, + 135: { + 0: uint8(137), + }, + 136: { + 0: uint8(192), + 1: uint8(117), + }, + 137: { + 0: uint8(207), + 1: uint8(118), + }, + 138: { + 0: uint8(128), + 1: uint8(137), + }, + 139: { + 0: uint8(129), + 1: uint8(138), + }, + 140: { + 0: uint8(130), + 1: uint8(139), + }, + 141: { + 0: uint8(133), + 1: uint8(140), + }, + 142: { + 0: uint8(134), + 1: uint8(141), + }, + 143: { + 0: uint8(112), + 1: uint8(157), + }, + 144: { + 0: uint8(113), + 1: uint8(157), + }, + 145: { + 0: uint8(118), + 1: uint8(158), + }, + 146: { + 0: uint8(119), + 1: uint8(158), + }, + 147: { + 0: uint8(120), + 1: uint8(159), + }, + 148: { + 0: uint8(121), + 1: uint8(159), + }, + 149: { + 0: uint8(122), + 1: uint8(160), + }, + 150: { + 0: uint8(123), + 1: uint8(160), + }, + 151: { + 0: uint8(124), + 1: uint8(161), + }, + 152: { + 0: uint8(125), + 1: uint8(161), + }, + 153: { + 0: uint8(179), + 1: uint8(162), + }, + 154: { + 0: uint8(186), + 1: uint8(163), + }, + 155: { + 0: uint8(187), + 1: uint8(163), + }, + 156: { + 0: uint8(188), + 1: uint8(164), + }, + 157: { + 0: uint8(190), + 1: uint8(165), + }, + 158: { + 0: uint8(195), + 1: uint8(162), + }, + 159: { + 0: uint8(204), + 1: uint8(164), + }, + 160: { + 0: uint8(218), + 1: uint8(166), + }, + 161: { + 0: uint8(219), + 1: uint8(166), + }, + 162: { + 0: uint8(229), + 1: uint8(106), + }, + 163: { + 0: uint8(234), + 1: uint8(167), + }, + 164: { + 0: uint8(235), + 1: uint8(167), + }, + 165: { + 0: uint8(236), + 1: uint8(110), + }, + 166: { + 0: uint8(243), + 1: uint8(162), + }, + 167: { + 0: uint8(248), + 1: uint8(168), + }, + 168: { + 0: uint8(249), + 1: uint8(168), + }, + 169: { + 0: uint8(250), + 1: uint8(169), + }, + 170: { + 0: uint8(251), + 1: uint8(169), + }, + 171: { + 0: uint8(252), + 1: uint8(164), + }, + 172: { + 0: uint8(38), + 1: uint8(176), + }, + 173: { + 0: uint8(42), + 1: uint8(177), + }, + 174: { + 0: uint8(43), + 1: uint8(178), + }, + 175: { + 0: uint8(78), + 1: uint8(179), + }, + 176: { + 0: uint8(132), + 1: uint8(8), + }, + 177: { + 0: uint8(98), + 1: uint8(186), + }, + 178: { + 0: uint8(99), + 1: uint8(187), + }, + 179: { + 0: uint8(100), + 1: uint8(188), + }, + 180: { + 0: uint8(101), + 1: uint8(189), + }, + 181: { + 0: uint8(102), + 1: uint8(190), + }, + 182: { + 0: uint8(109), + 1: uint8(191), + }, + 183: { + 0: uint8(110), + 1: uint8(192), + }, + 184: { + 0: uint8(111), + 1: uint8(193), + }, + 185: { + 0: uint8(112), + 1: uint8(194), + }, + 186: { + 0: uint8(126), + 1: uint8(195), + }, + 187: { + 0: uint8(127), + 1: uint8(195), + }, + 188: { + 0: uint8(125), + 1: uint8(207), + }, + 189: { + 0: uint8(141), + 1: uint8(208), + }, + 190: { + 0: uint8(148), + 1: uint8(209), + }, + 191: { + 0: uint8(171), + 1: uint8(210), + }, + 192: { + 0: uint8(172), + 1: uint8(211), + }, + 193: { + 0: uint8(173), + 1: uint8(212), + }, + 194: { + 0: uint8(176), + 1: uint8(213), + }, + 195: { + 0: uint8(177), + 1: uint8(214), + }, + 196: { + 0: uint8(178), + 1: uint8(215), + }, + 197: { + 0: uint8(196), + 1: uint8(216), + }, + 198: { + 0: uint8(197), + 1: uint8(217), + }, + 199: { + 0: uint8(198), + 1: uint8(218), + }, +} + +func _casemap(tls *TLS, c uint32, dir int32) (r1 int32) { + var b, rt, try, v, x, xb, xn, y uint32 + var c0, r, rd, v1 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = b, c0, r, rd, rt, try, v, x, xb, xn, y, v1 + c0 = int32(c) + if c >= uint32(0x20000) { + return int32(c) + } + b = c >> int32(8) + c &= uint32(255) + x = c / uint32(3) + y = c % uint32(3) + /* lookup entry in two-level base-6 table */ + v = uint32(_tab1[uint32(int32(_tab1[b])*int32(86))+x]) + v = v * uint32(_mt[y]) >> int32(11) % uint32(6) + /* use the bit vector out of the tables as an index into + * a block-specific set of rules and decode the rule into + * a type and a case-mapping delta. */ + r = _rules[uint32(_rulebases[b])+v] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + /* rules 0/1 are simple lower/upper case with a delta. + * apply according to desired mapping direction. */ + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* binary search. endpoints of the binary search for + * this block are stored in the rule delta field. */ + xn = uint32(rd & int32(0xff)) + xb = uint32(rd) >> int32(8) + for xn != 0 { + try = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2))) + if try == c { + r = _rules[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2 + 1))] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* Hard-coded for the four exceptional titlecase */ + if dir != 0 { + v1 = -int32(1) + } else { + v1 = int32(1) + } + return c0 + v1 + } else { + if try > c { + xn /= uint32(2) + } else { + xb += xn / uint32(2) + xn -= xn / uint32(2) + } + } + } + return c0 +} + +var _mt = [3]int32{ + 0: int32(2048), + 1: int32(342), + 2: int32(57), +} + +func Xtowlower(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, 0)) +} + +func Xtowupper(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, int32(1))) +} + +func X__towupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowupper(tls, c) +} + +func X__towlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowlower(tls, c) +} + +func Xtowlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towlower_l(tls, c, l) +} + +func Xtowupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towupper_l(tls, c, l) +} + +func Xwcswidth(tls *TLS, wcs uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v, (%v:)", tls, wcs, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, l, v3, v5 int32 + var v2 Tsize_t + var v4 bool + _, _, _, _, _, _ = k, l, v2, v3, v4, v5 + l = 0 + k = 0 + for { + v2 = n + n-- + if v4 = v2 != 0 && *(*Twchar_t)(unsafe.Pointer(wcs)) != 0; v4 { + v3 = Xwcwidth(tls, *(*Twchar_t)(unsafe.Pointer(wcs))) + k = v3 + } + if !(v4 && v3 >= 0) { + break + } + goto _1 + _1: + ; + l += k + wcs += 4 + } + if k < 0 { + v5 = k + } else { + v5 = l + } + return v5 +} + +func Xwctrans(tls *TLS, class uintptr) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v class=%v, (%v:)", tls, class, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(Xstrcmp(tls, class, __ccgo_ts+196) != 0) { + return UintptrFromInt32(1) + } + if !(Xstrcmp(tls, class, __ccgo_ts+204) != 0) { + return UintptrFromInt32(2) + } + return uintptr(0) +} + +func Xtowctrans(tls *TLS, wc Twint_t, trans Twctrans_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v trans=%v, (%v:)", tls, wc, trans, origin(2)) + defer func() { trc("-> %v", r) }() + } + if trans == UintptrFromInt32(1) { + return Xtowupper(tls, wc) + } + if trans == UintptrFromInt32(2) { + return Xtowlower(tls, wc) + } + return wc +} + +func X__wctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctrans(tls, s) +} + +func X__towctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowctrans(tls, c, t) +} + +func Xtowctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towctrans_l(tls, c, t, l) +} + +func Xwctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctrans_l(tls, s, l) +} + +var _table5 = [2784]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(18), + 4: uint8(19), + 5: uint8(20), + 6: uint8(21), + 7: uint8(22), + 8: uint8(23), + 9: uint8(24), + 10: uint8(25), + 11: uint8(26), + 12: uint8(27), + 13: uint8(28), + 14: uint8(29), + 15: uint8(30), + 16: uint8(31), + 17: uint8(32), + 18: uint8(16), + 19: uint8(33), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(34), + 24: uint8(35), + 25: uint8(36), + 26: uint8(37), + 27: uint8(38), + 28: uint8(39), + 29: uint8(40), + 30: uint8(16), + 31: uint8(16), + 32: uint8(41), + 33: uint8(16), + 34: uint8(16), + 35: uint8(16), + 36: uint8(16), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(42), + 45: uint8(43), + 46: uint8(16), + 47: uint8(16), + 48: uint8(44), + 49: uint8(16), + 50: uint8(16), + 51: uint8(16), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(16), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(16), + 165: uint8(16), + 166: uint8(45), + 167: uint8(16), + 168: uint8(46), + 169: uint8(47), + 170: uint8(48), + 171: uint8(49), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(50), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(16), + 250: uint8(16), + 251: uint8(51), + 252: uint8(16), + 253: uint8(16), + 254: uint8(52), + 255: uint8(53), + 256: uint8(16), + 257: uint8(54), + 258: uint8(55), + 259: uint8(56), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(57), + 267: uint8(16), + 268: uint8(16), + 269: uint8(58), + 270: uint8(16), + 271: uint8(59), + 272: uint8(60), + 273: uint8(61), + 274: uint8(62), + 275: uint8(63), + 276: uint8(64), + 277: uint8(65), + 278: uint8(66), + 279: uint8(67), + 280: uint8(68), + 281: uint8(69), + 282: uint8(70), + 283: uint8(16), + 284: uint8(71), + 285: uint8(72), + 286: uint8(73), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(74), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(75), + 363: uint8(76), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(77), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(78), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(79), + 466: uint8(80), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(81), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(82), + 481: uint8(83), + 482: uint8(84), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(85), + 489: uint8(86), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(16), + 497: uint8(16), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 588: uint8(255), + 589: uint8(255), + 624: uint8(248), + 625: uint8(3), + 658: uint8(254), + 659: uint8(255), + 660: uint8(255), + 661: uint8(255), + 662: uint8(255), + 663: uint8(191), + 664: uint8(182), + 672: uint8(63), + 674: uint8(255), + 675: uint8(23), + 681: uint8(248), + 682: uint8(255), + 683: uint8(255), + 686: uint8(1), + 698: uint8(192), + 699: uint8(191), + 700: uint8(159), + 701: uint8(61), + 705: uint8(128), + 706: uint8(2), + 710: uint8(255), + 711: uint8(255), + 712: uint8(255), + 713: uint8(7), + 724: uint8(192), + 725: uint8(255), + 726: uint8(1), + 733: uint8(248), + 734: uint8(15), + 735: uint8(32), + 738: uint8(192), + 739: uint8(251), + 740: uint8(239), + 741: uint8(62), + 747: uint8(14), + 762: uint8(248), + 763: uint8(255), + 764: uint8(255), + 765: uint8(255), + 766: uint8(255), + 767: uint8(255), + 768: uint8(7), + 775: uint8(20), + 776: uint8(254), + 777: uint8(33), + 778: uint8(254), + 780: uint8(12), + 784: uint8(2), + 791: uint8(16), + 792: uint8(30), + 793: uint8(32), + 796: uint8(12), + 799: uint8(64), + 800: uint8(6), + 807: uint8(16), + 808: uint8(134), + 809: uint8(57), + 810: uint8(2), + 814: uint8(35), + 816: uint8(6), + 823: uint8(16), + 824: uint8(190), + 825: uint8(33), + 828: uint8(12), + 831: uint8(252), + 832: uint8(2), + 839: uint8(144), + 840: uint8(30), + 841: uint8(32), + 842: uint8(64), + 844: uint8(12), + 848: uint8(4), + 856: uint8(1), + 857: uint8(32), + 864: uint8(17), + 871: uint8(192), + 872: uint8(193), + 873: uint8(61), + 874: uint8(96), + 876: uint8(12), + 880: uint8(2), + 887: uint8(144), + 888: uint8(64), + 889: uint8(48), + 892: uint8(12), + 896: uint8(3), + 903: uint8(24), + 904: uint8(30), + 905: uint8(32), + 908: uint8(12), + 921: uint8(4), + 922: uint8(92), + 934: uint8(242), + 935: uint8(7), + 936: uint8(128), + 937: uint8(127), + 950: uint8(242), + 951: uint8(31), + 953: uint8(63), + 963: uint8(3), + 966: uint8(160), + 967: uint8(2), + 974: uint8(254), + 975: uint8(127), + 976: uint8(223), + 977: uint8(224), + 978: uint8(255), + 979: uint8(254), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(31), + 984: uint8(64), + 997: uint8(224), + 998: uint8(253), + 999: uint8(102), + 1003: uint8(195), + 1004: uint8(1), + 1006: uint8(30), + 1008: uint8(100), + 1009: uint8(32), + 1011: uint8(32), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(255), + 1048: uint8(255), + 1049: uint8(255), + 1050: uint8(255), + 1051: uint8(255), + 1052: uint8(255), + 1053: uint8(255), + 1054: uint8(255), + 1055: uint8(255), + 1067: uint8(224), + 1090: uint8(28), + 1094: uint8(28), + 1098: uint8(12), + 1102: uint8(12), + 1110: uint8(176), + 1111: uint8(63), + 1112: uint8(64), + 1113: uint8(254), + 1114: uint8(15), + 1115: uint8(32), + 1121: uint8(120), + 1136: uint8(96), + 1141: uint8(2), + 1156: uint8(135), + 1157: uint8(1), + 1158: uint8(4), + 1159: uint8(14), + 1186: uint8(128), + 1187: uint8(9), + 1194: uint8(64), + 1195: uint8(127), + 1196: uint8(229), + 1197: uint8(31), + 1198: uint8(248), + 1199: uint8(159), + 1206: uint8(255), + 1207: uint8(127), + 1216: uint8(15), + 1222: uint8(208), + 1223: uint8(23), + 1224: uint8(4), + 1229: uint8(248), + 1230: uint8(15), + 1232: uint8(3), + 1236: uint8(60), + 1237: uint8(59), + 1244: uint8(64), + 1245: uint8(163), + 1246: uint8(3), + 1253: uint8(240), + 1254: uint8(207), + 1274: uint8(247), + 1275: uint8(255), + 1276: uint8(253), + 1277: uint8(33), + 1278: uint8(16), + 1279: uint8(3), + 1304: uint8(255), + 1305: uint8(255), + 1306: uint8(255), + 1307: uint8(255), + 1308: uint8(255), + 1309: uint8(255), + 1310: uint8(255), + 1311: uint8(251), + 1313: uint8(248), + 1317: uint8(124), + 1324: uint8(223), + 1325: uint8(255), + 1338: uint8(255), + 1339: uint8(255), + 1340: uint8(255), + 1341: uint8(255), + 1342: uint8(1), + 1373: uint8(128), + 1374: uint8(3), + 1391: uint8(128), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(255), + 1407: uint8(255), + 1413: uint8(60), + 1427: uint8(6), + 1453: uint8(128), + 1454: uint8(247), + 1455: uint8(63), + 1459: uint8(192), + 1470: uint8(3), + 1472: uint8(68), + 1473: uint8(8), + 1476: uint8(96), + 1496: uint8(48), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(3), + 1503: uint8(128), + 1508: uint8(192), + 1509: uint8(63), + 1512: uint8(128), + 1513: uint8(255), + 1514: uint8(3), + 1520: uint8(7), + 1526: uint8(200), + 1527: uint8(51), + 1532: uint8(32), + 1541: uint8(126), + 1542: uint8(102), + 1544: uint8(8), + 1545: uint8(16), + 1551: uint8(16), + 1558: uint8(157), + 1559: uint8(193), + 1560: uint8(2), + 1565: uint8(48), + 1566: uint8(64), + 1596: uint8(32), + 1597: uint8(33), + 1622: uint8(255), + 1623: uint8(255), + 1624: uint8(255), + 1625: uint8(255), + 1626: uint8(255), + 1627: uint8(255), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1635: uint8(64), + 1664: uint8(255), + 1665: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1695: uint8(128), + 1727: uint8(14), + 1759: uint8(32), + 1788: uint8(1), + 1806: uint8(192), + 1807: uint8(7), + 1824: uint8(110), + 1825: uint8(240), + 1831: uint8(135), + 1852: uint8(96), + 1860: uint8(240), + 1896: uint8(192), + 1897: uint8(255), + 1898: uint8(1), + 1920: uint8(2), + 1927: uint8(255), + 1928: uint8(127), + 1935: uint8(128), + 1936: uint8(3), + 1942: uint8(120), + 1943: uint8(38), + 1945: uint8(32), + 1952: uint8(7), + 1956: uint8(128), + 1957: uint8(239), + 1958: uint8(31), + 1966: uint8(8), + 1968: uint8(3), + 1974: uint8(192), + 1975: uint8(127), + 1977: uint8(30), + 1989: uint8(128), + 1990: uint8(211), + 1991: uint8(64), + 2011: uint8(128), + 2012: uint8(248), + 2013: uint8(7), + 2016: uint8(3), + 2023: uint8(24), + 2024: uint8(1), + 2028: uint8(192), + 2029: uint8(31), + 2030: uint8(31), + 2055: uint8(255), + 2056: uint8(92), + 2059: uint8(64), + 2070: uint8(248), + 2071: uint8(133), + 2072: uint8(13), + 2102: uint8(60), + 2103: uint8(176), + 2104: uint8(1), + 2107: uint8(48), + 2118: uint8(248), + 2119: uint8(167), + 2120: uint8(1), + 2133: uint8(40), + 2134: uint8(191), + 2147: uint8(224), + 2148: uint8(188), + 2149: uint8(15), + 2181: uint8(128), + 2182: uint8(255), + 2183: uint8(6), + 2234: uint8(240), + 2235: uint8(12), + 2236: uint8(1), + 2240: uint8(254), + 2241: uint8(7), + 2246: uint8(248), + 2247: uint8(121), + 2248: uint8(128), + 2250: uint8(126), + 2251: uint8(14), + 2257: uint8(252), + 2258: uint8(127), + 2259: uint8(3), + 2278: uint8(127), + 2279: uint8(191), + 2290: uint8(252), + 2291: uint8(255), + 2292: uint8(255), + 2293: uint8(252), + 2294: uint8(109), + 2310: uint8(126), + 2311: uint8(180), + 2312: uint8(191), + 2322: uint8(163), + 2366: uint8(24), + 2374: uint8(255), + 2375: uint8(1), + 2430: uint8(31), + 2438: uint8(127), + 2473: uint8(128), + 2481: uint8(128), + 2482: uint8(7), + 2515: uint8(96), + 2516: uint8(15), + 2540: uint8(128), + 2541: uint8(3), + 2542: uint8(248), + 2543: uint8(255), + 2544: uint8(231), + 2545: uint8(15), + 2549: uint8(60), + 2568: uint8(28), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2597: uint8(255), + 2598: uint8(127), + 2599: uint8(248), + 2600: uint8(255), + 2601: uint8(255), + 2602: uint8(255), + 2603: uint8(255), + 2604: uint8(255), + 2605: uint8(31), + 2606: uint8(32), + 2608: uint8(16), + 2611: uint8(248), + 2612: uint8(254), + 2613: uint8(255), + 2624: uint8(127), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(249), + 2628: uint8(219), + 2629: uint8(7), + 2662: uint8(127), + 2717: uint8(240), + 2746: uint8(127), + 2760: uint8(240), + 2761: uint8(7), +} + +var _wtable = [1600]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(16), + 4: uint8(16), + 5: uint8(16), + 6: uint8(16), + 7: uint8(16), + 8: uint8(16), + 9: uint8(16), + 10: uint8(16), + 11: uint8(16), + 12: uint8(16), + 13: uint8(16), + 14: uint8(16), + 15: uint8(16), + 16: uint8(16), + 17: uint8(18), + 18: uint8(16), + 19: uint8(16), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(16), + 24: uint8(16), + 25: uint8(16), + 26: uint8(16), + 27: uint8(16), + 28: uint8(16), + 29: uint8(16), + 30: uint8(16), + 31: uint8(16), + 32: uint8(16), + 33: uint8(16), + 34: uint8(16), + 35: uint8(19), + 36: uint8(16), + 37: uint8(20), + 38: uint8(21), + 39: uint8(22), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(23), + 44: uint8(16), + 45: uint8(16), + 46: uint8(24), + 47: uint8(25), + 48: uint8(26), + 49: uint8(27), + 50: uint8(28), + 51: uint8(17), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(29), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(17), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(30), + 165: uint8(16), + 166: uint8(16), + 167: uint8(16), + 168: uint8(16), + 169: uint8(31), + 170: uint8(16), + 171: uint8(16), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(32), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(17), + 251: uint8(16), + 252: uint8(16), + 253: uint8(16), + 254: uint8(33), + 255: uint8(34), + 256: uint8(16), + 257: uint8(16), + 258: uint8(16), + 259: uint8(16), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(16), + 267: uint8(16), + 268: uint8(16), + 269: uint8(16), + 270: uint8(16), + 271: uint8(16), + 272: uint8(16), + 273: uint8(16), + 274: uint8(16), + 275: uint8(16), + 276: uint8(16), + 277: uint8(16), + 278: uint8(16), + 279: uint8(16), + 280: uint8(16), + 281: uint8(16), + 282: uint8(16), + 283: uint8(16), + 284: uint8(16), + 285: uint8(16), + 286: uint8(16), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(16), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(16), + 363: uint8(16), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(35), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(36), + 392: uint8(17), + 393: uint8(17), + 394: uint8(37), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(38), + 434: uint8(39), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(16), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(16), + 482: uint8(16), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(16), + 489: uint8(16), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(40), + 497: uint8(41), + 498: uint8(42), + 499: uint8(43), + 500: uint8(44), + 501: uint8(45), + 502: uint8(46), + 503: uint8(47), + 504: uint8(16), + 505: uint8(48), + 506: uint8(49), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 611: uint8(12), + 613: uint8(6), + 637: uint8(30), + 638: uint8(9), + 671: uint8(96), + 674: uint8(48), + 681: uint8(255), + 682: uint8(15), + 687: uint8(128), + 690: uint8(8), + 692: uint8(2), + 693: uint8(12), + 695: uint8(96), + 696: uint8(48), + 697: uint8(64), + 698: uint8(16), + 701: uint8(4), + 702: uint8(44), + 703: uint8(36), + 704: uint8(32), + 705: uint8(12), + 709: uint8(1), + 713: uint8(80), + 714: uint8(184), + 722: uint8(224), + 726: uint8(1), + 727: uint8(128), + 739: uint8(24), + 746: uint8(33), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(251), + 788: uint8(255), + 789: uint8(255), + 790: uint8(255), + 791: uint8(255), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(255), + 798: uint8(15), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(255), + 804: uint8(255), + 805: uint8(255), + 806: uint8(255), + 807: uint8(255), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(255), + 812: uint8(255), + 813: uint8(255), + 814: uint8(255), + 815: uint8(255), + 816: uint8(255), + 817: uint8(255), + 818: uint8(255), + 819: uint8(255), + 820: uint8(255), + 821: uint8(255), + 822: uint8(255), + 823: uint8(255), + 824: uint8(255), + 825: uint8(255), + 826: uint8(63), + 830: uint8(255), + 831: uint8(15), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(127), + 840: uint8(254), + 841: uint8(255), + 842: uint8(255), + 843: uint8(255), + 844: uint8(255), + 845: uint8(255), + 846: uint8(255), + 847: uint8(255), + 848: uint8(255), + 849: uint8(255), + 850: uint8(127), + 851: uint8(254), + 852: uint8(255), + 853: uint8(255), + 854: uint8(255), + 855: uint8(255), + 856: uint8(255), + 857: uint8(255), + 858: uint8(255), + 859: uint8(255), + 860: uint8(255), + 861: uint8(255), + 862: uint8(255), + 863: uint8(255), + 864: uint8(224), + 865: uint8(255), + 866: uint8(255), + 867: uint8(255), + 868: uint8(255), + 869: uint8(255), + 870: uint8(254), + 871: uint8(255), + 872: uint8(255), + 873: uint8(255), + 874: uint8(255), + 875: uint8(255), + 876: uint8(255), + 877: uint8(255), + 878: uint8(255), + 879: uint8(255), + 880: uint8(255), + 881: uint8(127), + 882: uint8(255), + 883: uint8(255), + 884: uint8(255), + 885: uint8(255), + 886: uint8(255), + 887: uint8(7), + 888: uint8(255), + 889: uint8(255), + 890: uint8(255), + 891: uint8(255), + 892: uint8(15), + 894: uint8(255), + 895: uint8(255), + 896: uint8(255), + 897: uint8(255), + 898: uint8(255), + 899: uint8(127), + 900: uint8(255), + 901: uint8(255), + 902: uint8(255), + 903: uint8(255), + 904: uint8(255), + 906: uint8(255), + 907: uint8(255), + 908: uint8(255), + 909: uint8(255), + 910: uint8(255), + 911: uint8(255), + 912: uint8(255), + 913: uint8(255), + 914: uint8(255), + 915: uint8(255), + 916: uint8(255), + 917: uint8(255), + 918: uint8(255), + 919: uint8(255), + 920: uint8(255), + 921: uint8(255), + 922: uint8(255), + 923: uint8(255), + 924: uint8(255), + 925: uint8(255), + 926: uint8(255), + 927: uint8(255), + 928: uint8(255), + 929: uint8(255), + 930: uint8(255), + 931: uint8(255), + 932: uint8(255), + 933: uint8(255), + 934: uint8(255), + 935: uint8(255), + 936: uint8(255), + 937: uint8(255), + 938: uint8(255), + 939: uint8(255), + 940: uint8(255), + 941: uint8(255), + 942: uint8(255), + 943: uint8(255), + 944: uint8(255), + 945: uint8(255), + 946: uint8(255), + 947: uint8(255), + 948: uint8(255), + 949: uint8(255), + 950: uint8(255), + 951: uint8(255), + 960: uint8(255), + 961: uint8(255), + 962: uint8(255), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(255), + 968: uint8(255), + 969: uint8(255), + 970: uint8(255), + 971: uint8(255), + 972: uint8(255), + 973: uint8(255), + 974: uint8(255), + 975: uint8(255), + 976: uint8(255), + 977: uint8(31), + 978: uint8(255), + 979: uint8(255), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(255), + 984: uint8(127), + 1004: uint8(255), + 1005: uint8(255), + 1006: uint8(255), + 1007: uint8(31), + 1024: uint8(255), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1028: uint8(255), + 1029: uint8(255), + 1030: uint8(255), + 1031: uint8(255), + 1032: uint8(255), + 1033: uint8(255), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(15), + 1058: uint8(255), + 1059: uint8(3), + 1062: uint8(255), + 1063: uint8(255), + 1064: uint8(255), + 1065: uint8(255), + 1066: uint8(247), + 1067: uint8(255), + 1068: uint8(127), + 1069: uint8(15), + 1088: uint8(254), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(255), + 1098: uint8(255), + 1099: uint8(255), + 1100: uint8(1), + 1116: uint8(127), + 1148: uint8(15), + 1152: uint8(255), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(255), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(255), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(255), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(255), + 1214: uint8(7), + 1216: uint8(255), + 1217: uint8(255), + 1218: uint8(255), + 1219: uint8(127), + 1226: uint8(7), + 1228: uint8(240), + 1230: uint8(255), + 1231: uint8(255), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(255), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(255), + 1242: uint8(255), + 1243: uint8(255), + 1244: uint8(255), + 1245: uint8(255), + 1246: uint8(255), + 1247: uint8(255), + 1248: uint8(255), + 1249: uint8(255), + 1250: uint8(255), + 1251: uint8(255), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(255), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(255), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(15), + 1280: uint8(16), + 1305: uint8(128), + 1329: uint8(64), + 1330: uint8(254), + 1331: uint8(7), + 1344: uint8(7), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(255), + 1351: uint8(15), + 1352: uint8(255), + 1353: uint8(1), + 1354: uint8(3), + 1356: uint8(63), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(1), + 1381: uint8(224), + 1382: uint8(191), + 1383: uint8(255), + 1384: uint8(255), + 1385: uint8(255), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(223), + 1392: uint8(255), + 1393: uint8(255), + 1394: uint8(15), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(255), + 1400: uint8(255), + 1401: uint8(135), + 1402: uint8(15), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(17), + 1407: uint8(255), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(127), + 1416: uint8(253), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1432: uint8(255), + 1433: uint8(255), + 1434: uint8(255), + 1435: uint8(255), + 1436: uint8(255), + 1437: uint8(255), + 1438: uint8(255), + 1439: uint8(159), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(63), + 1449: uint8(120), + 1450: uint8(255), + 1451: uint8(255), + 1452: uint8(255), + 1455: uint8(4), + 1458: uint8(96), + 1460: uint8(16), + 1471: uint8(248), + 1472: uint8(255), + 1473: uint8(255), + 1474: uint8(255), + 1475: uint8(255), + 1476: uint8(255), + 1477: uint8(255), + 1478: uint8(255), + 1479: uint8(255), + 1480: uint8(255), + 1481: uint8(255), + 1488: uint8(255), + 1489: uint8(255), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(63), + 1497: uint8(16), + 1498: uint8(39), + 1501: uint8(24), + 1502: uint8(240), + 1503: uint8(7), + 1532: uint8(255), + 1533: uint8(15), + 1537: uint8(224), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(123), + 1551: uint8(252), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(255), + 1555: uint8(255), + 1556: uint8(231), + 1557: uint8(199), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(231), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1582: uint8(15), + 1583: uint8(7), + 1584: uint8(7), + 1586: uint8(63), +} + +func Xwcwidth(tls *TLS, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 int32 + _, _ = v1, v2 + if uint32(wc) < uint32(0xff) { + if (wc+int32(1))&int32(0x7f) >= int32(0x21) { + v1 = int32(1) + } else { + if wc != 0 { + v2 = -int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 + } + if uint32(wc)&uint32(0xfffeffff) < uint32(0xfffe) { + if int32(_table5[int32(_table5[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return 0 + } + if int32(_wtable[int32(_wtable[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return int32(2) + } + return int32(1) + } + if wc&int32(0xfffe) == int32(0xfffe) { + return -int32(1) + } + if uint32(wc)-uint32(0x20000) < uint32(0x20000) { + return int32(2) + } + if wc == int32(0xe0001) || uint32(wc)-uint32(0xe0020) < uint32(0x5f) || uint32(wc)-uint32(0xe0100) < uint32(0xef) { + return 0 + } + return int32(1) +} + +const d_fileno = 0 + +type Tino_t = uint64 + +type Tdirent = struct { + Fd_ino Tino_t + Fd_off Toff_t + Fd_reclen uint16 + Fd_type uint8 + Fd_name [256]uint8 +} + +func Xalphasort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrcoll(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +type TDIR = struct { + Ftell Toff_t + Ffd int32 + Fbuf_pos int32 + Fbuf_end int32 + Flock [1]int32 + Fbuf [2048]uint8 +} + +type t__dirstream = TDIR + +func Xclosedir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = Xclose(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd) + Xfree(tls, dir) + return ret +} + +func Xdirfd(tls *TLS, d uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(d)).Ffd +} + +const AT_EACCESS = 512 +const AT_FDCWD = -100 +const AT_REMOVEDIR = 512 +const AT_SYMLINK_FOLLOW = 1024 +const AT_SYMLINK_NOFOLLOW = 256 +const FD_CLOEXEC = 1 +const F_DUPFD = 0 +const F_DUPFD_CLOEXEC = 1030 +const F_GETFD = 1 +const F_GETFL = 3 +const F_GETLK = 5 +const F_GETOWN = 9 +const F_GETOWNER_UIDS = 17 +const F_GETOWN_EX = 16 +const F_GETSIG = 11 +const F_OFD_GETLK = 36 +const F_OFD_SETLK = 37 +const F_OFD_SETLKW = 38 +const F_RDLCK = 0 +const F_SETFD = 2 +const F_SETFL = 4 +const F_SETLK = 6 +const F_SETLKW = 7 +const F_SETOWN = 8 +const F_SETOWN_EX = 15 +const F_SETSIG = 10 +const F_UNLCK = 2 +const F_WRLCK = 1 +const O_ACCMODE = 2097155 +const O_APPEND = 1024 +const O_ASYNC = 8192 +const O_CLOEXEC = 524288 +const O_CREAT = 64 +const O_DIRECT = 16384 +const O_DIRECTORY = 65536 +const O_DSYNC = 4096 +const O_EXCL = 128 +const O_EXEC = 2097152 +const O_LARGEFILE = 32768 +const O_NDELAY = 2048 +const O_NOATIME = 262144 +const O_NOCTTY = 256 +const O_NOFOLLOW = 131072 +const O_NONBLOCK = 2048 +const O_PATH = 2097152 +const O_RDONLY = 0 +const O_RDWR = 2 +const O_RSYNC = 1052672 +const O_SEARCH = 2097152 +const O_SYNC = 1052672 +const O_TMPFILE = 4259840 +const O_TRUNC = 512 +const O_TTY_INIT = 0 +const O_WRONLY = 1 +const POSIX_FADV_DONTNEED = 4 +const POSIX_FADV_NOREUSE = 5 +const POSIX_FADV_NORMAL = 0 +const POSIX_FADV_RANDOM = 1 +const POSIX_FADV_SEQUENTIAL = 2 +const POSIX_FADV_WILLNEED = 3 +const S_IFBLK = 24576 +const S_IFCHR = 8192 +const S_IFDIR = 16384 +const S_IFIFO = 4096 +const S_IFLNK = 40960 +const S_IFMT = 61440 +const S_IFREG = 32768 +const S_IFSOCK = 49152 +const S_IRGRP = 32 +const S_IROTH = 4 +const S_IRUSR = 256 +const S_IRWXG = 56 +const S_IRWXO = 7 +const S_IRWXU = 448 +const S_ISGID = 1024 +const S_ISUID = 2048 +const S_ISVTX = 512 +const S_IWGRP = 16 +const S_IWOTH = 2 +const S_IWUSR = 128 +const S_IXGRP = 8 +const S_IXOTH = 1 +const S_IXUSR = 64 +const UTIME_NOW = 1073741823 +const UTIME_OMIT = 1073741822 + +type Tflock = struct { + Fl_type int16 + Fl_whence int16 + Fl_start Toff_t + Fl_len Toff_t + Fl_pid Tpid_t +} + +type Tblksize_t = int32 + +type Tnlink_t = uint32 + +type Tdev_t = uint64 + +type Tblkcnt_t = int64 + +type Tstat = struct { + Fst_dev Tdev_t + Fst_ino Tino_t + Fst_mode Tmode_t + Fst_nlink Tnlink_t + Fst_uid Tuid_t + Fst_gid Tgid_t + Fst_rdev Tdev_t + F__pad uint64 + Fst_size Toff_t + Fst_blksize Tblksize_t + F__pad2 int32 + Fst_blocks Tblkcnt_t + Fst_atim Ttimespec + Fst_mtim Ttimespec + Fst_ctim Ttimespec + F__unused [2]uint32 +} + +func Xfdopendir(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var dir, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _ = dir, v1 + if Xfstat(tls, fd, bp) < 0 { + return uintptr(0) + } + if Xfcntl(tls, fd, int32(F_GETFL), 0)&int32(O_PATH) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return uintptr(0) + } + if !((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&Uint32FromInt32(S_IFMT) == Uint32FromInt32(S_IFDIR)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTDIR) + return uintptr(0) + } + v1 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v1 + if !(v1 != 0) { + return uintptr(0) + } + Xfcntl(tls, fd, int32(F_SETFD), VaList(bp+136, int32(FD_CLOEXEC))) + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +const AT_EMPTY_PATH = 4096 +const AT_NO_AUTOMOUNT = 2048 +const AT_RECURSIVE = 32768 +const AT_STATX_DONT_SYNC = 16384 +const AT_STATX_FORCE_SYNC = 8192 +const AT_STATX_SYNC_AS_STAT = 0 +const AT_STATX_SYNC_TYPE = 24576 +const DN_ACCESS = 1 +const DN_ATTRIB = 32 +const DN_CREATE = 4 +const DN_DELETE = 8 +const DN_MODIFY = 2 +const DN_MULTISHOT = 2147483648 +const DN_RENAME = 16 +const DT_BLK = 6 +const DT_CHR = 2 +const DT_DIR = 4 +const DT_FIFO = 1 +const DT_LNK = 10 +const DT_REG = 8 +const DT_SOCK = 12 +const DT_UNKNOWN = 0 +const DT_WHT = 14 +const FALLOC_FL_KEEP_SIZE = 1 +const FALLOC_FL_PUNCH_HOLE = 2 +const FAPPEND = 1024 +const FASYNC = 8192 +const FFSYNC = 1052672 +const FNDELAY = 2048 +const FNONBLOCK = 2048 +const F_ADD_SEALS = 1033 +const F_CANCELLK = 1029 +const F_GETLEASE = 1025 +const F_GETPIPE_SZ = 1032 +const F_GET_FILE_RW_HINT = 1037 +const F_GET_RW_HINT = 1035 +const F_GET_SEALS = 1034 +const F_NOTIFY = 1026 +const F_OWNER_GID = 2 +const F_OWNER_PGRP = 2 +const F_OWNER_PID = 1 +const F_OWNER_TID = 0 +const F_SEAL_FUTURE_WRITE = 16 +const F_SEAL_GROW = 4 +const F_SEAL_SEAL = 1 +const F_SEAL_SHRINK = 2 +const F_SEAL_WRITE = 8 +const F_SETLEASE = 1024 +const F_SETPIPE_SZ = 1031 +const F_SET_FILE_RW_HINT = 1038 +const F_SET_RW_HINT = 1036 +const MAX_HANDLE_SZ = 128 +const RWF_WRITE_LIFE_NOT_SET = 0 +const RWH_WRITE_LIFE_EXTREME = 5 +const RWH_WRITE_LIFE_LONG = 4 +const RWH_WRITE_LIFE_MEDIUM = 3 +const RWH_WRITE_LIFE_NONE = 1 +const RWH_WRITE_LIFE_SHORT = 2 +const SPLICE_F_GIFT = 8 +const SPLICE_F_MORE = 4 +const SPLICE_F_MOVE = 1 +const SPLICE_F_NONBLOCK = 2 +const SYNC_FILE_RANGE_WAIT_AFTER = 4 +const SYNC_FILE_RANGE_WAIT_BEFORE = 1 +const SYNC_FILE_RANGE_WRITE = 2 +const alloca = 0 +const loff_t = 0 + +type Tiovec = struct { + Fiov_base uintptr + Fiov_len Tsize_t +} + +type Tfile_handle = struct { + Fhandle_bytes uint32 + Fhandle_type int32 +} + +type Tf_owner_ex = struct { + Ftype1 int32 + Fpid Tpid_t +} + +func Xopendir(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dir, v2 uintptr + var fd, v1 int32 + _, _, _, _ = dir, fd, v1, v2 + v1 = Xopen(tls, name, Int32FromInt32(O_RDONLY)|Int32FromInt32(O_DIRECTORY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + v2 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v2 + if !(v2 != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +type Tptrdiff_t = int64 + +type Tdirstream_buf_alignment_check = [1]uint8 + +func Xreaddir(tls *TLS, dir uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var len1 int32 + _, _ = de, len1 + if (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos >= (*TDIR)(unsafe.Pointer(dir)).Fbuf_end { + len1 = int32(X__syscall3(tls, int64(SYS_getdents64), int64((*TDIR)(unsafe.Pointer(dir)).Ffd), int64(dir+24), int64(Uint64FromInt64(2048)))) + if len1 <= 0 { + if len1 < 0 && len1 != -int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = -len1 + } + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = len1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = 0 + } + de = dir + 24 + uintptr((*TDIR)(unsafe.Pointer(dir)).Fbuf_pos) + *(*int32)(unsafe.Pointer(dir + 12)) += int32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen) + (*TDIR)(unsafe.Pointer(dir)).Ftell = (*Tdirent)(unsafe.Pointer(de)).Fd_off + return de +} + +func Xreaddir_r(tls *TLS, dir uintptr, buf uintptr, result uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v buf=%v result=%v, (%v:)", tls, dir, buf, result, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var errno_save, ret, v1 int32 + _, _, _, _ = de, errno_save, ret, v1 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ___lock(tls, dir+20) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + de = Xreaddir(tls, dir) + v1 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ret = v1 + if v1 != 0 { + ___unlock(tls, dir+20) + return ret + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + if de != 0 { + Xmemcpy(tls, buf, de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } else { + buf = UintptrFromInt32(0) + } + ___unlock(tls, dir+20) + *(*uintptr)(unsafe.Pointer(result)) = buf + return 0 +} + +func Xrewinddir(tls *TLS, dir uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, 0, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + (*TDIR)(unsafe.Pointer(dir)).Ftell = 0 + ___unlock(tls, dir+20) +} + +func Xscandir(tls *TLS, path uintptr, res uintptr, sel uintptr, cmp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v res=%v sel=%v cmp=%v, (%v:)", tls, path, res, sel, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cnt, len1, v2, v3 Tsize_t + var d, de, names, tmp, v1 uintptr + var old_errno int32 + _, _, _, _, _, _, _, _, _, _ = cnt, d, de, len1, names, old_errno, tmp, v1, v2, v3 + d = Xopendir(tls, path) + names = uintptr(0) + cnt = uint64(0) + len1 = uint64(0) + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if !(d != 0) { + return -int32(1) + } + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v1 = Xreaddir(tls, d) + de = v1 + if !(v1 != 0) { + break + } + if sel != 0 && !((*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{sel})))(tls, de) != 0) { + continue + } + if cnt >= len1 { + len1 = uint64(2)*len1 + uint64(1) + if len1 > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + break + } + tmp = Xrealloc(tls, names, len1*uint64(8)) + if !(tmp != 0) { + break + } + names = tmp + } + *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) = Xmalloc(tls, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + if !(*(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) != 0) { + break + } + v2 = cnt + cnt++ + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(v2)*8)), de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } + Xclosedir(tls, d) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != 0 { + if names != 0 { + for { + v3 = cnt + cnt-- + if !(v3 > uint64(0)) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8))) + } + } + Xfree(tls, names) + return -int32(1) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if cmp != 0 { + Xqsort(tls, names, cnt, uint64(8), cmp) + } + *(*uintptr)(unsafe.Pointer(res)) = names + return int32(cnt) +} + +func Xseekdir(tls *TLS, dir uintptr, off int64) { + if __ccgo_strace { + trc("tls=%v dir=%v off=%v, (%v:)", tls, dir, off, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + (*TDIR)(unsafe.Pointer(dir)).Ftell = Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, off, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + ___unlock(tls, dir+20) +} + +func Xtelldir(tls *TLS, dir uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(dir)).Ftell +} + +func Xversionsort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrverscmp(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +func X__reset_tls(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var i, n Tsize_t + var mem, p uintptr + var self Tpthread_t + _, _, _, _, _ = i, mem, n, p, self + self = ___get_tp(tls) + n = *(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv)) + if n != 0 { + p = X__libc.Ftls_head + i = Uint64FromInt32(1) + for { + if !(i <= n) { + break + } + mem = uintptr(*(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv + uintptr(i)*8)) - Uint64FromInt32(DTP_OFFSET)) + Xmemcpy(tls, mem, (*Ttls_module)(unsafe.Pointer(p)).Fimage, (*Ttls_module)(unsafe.Pointer(p)).Flen1) + Xmemset(tls, mem+uintptr((*Ttls_module)(unsafe.Pointer(p)).Flen1), 0, (*Ttls_module)(unsafe.Pointer(p)).Fsize-(*Ttls_module)(unsafe.Pointer(p)).Flen1) + goto _1 + _1: + ; + i++ + p = (*Ttls_module)(unsafe.Pointer(p)).Fnext + } + } +} + +func X__init_ssp(tls *TLS, entropy uintptr) { + if __ccgo_strace { + trc("tls=%v entropy=%v, (%v:)", tls, entropy, origin(2)) + } + if entropy != 0 { + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__stack_chk_guard)), entropy, uint64(8)) + } else { + X__stack_chk_guard = Tuintptr_t(uintptr(unsafe.Pointer(&X__stack_chk_guard))) * uint64(1103515245) + } + /* Sacrifice 8 bits of entropy on 64bit to prevent leaking/ + * overwriting the canary via string-manipulation functions. + * The NULL byte is on the second byte so that off-by-ones can + * still be detected. Endianness is taken care of + * automatically. */ + *(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stack_chk_guard)) + 1)) = uint8(0) + (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fcanary = X__stack_chk_guard +} + +func X__stack_chk_fail(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + *(*uint8)(unsafe.Pointer(UintptrFromInt32(0))) = uint8(0) +} + +func X__stack_chk_fail_local(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stack_chk_fail(tls) +} + +const L_INCR = 1 +const L_SET = 0 +const L_XTND = 2 + +func _dummy(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xclearenv(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, v1 uintptr + _, _ = e, v1 + e = Xenviron + Xenviron = uintptr(0) + if e != 0 { + for *(*uintptr)(unsafe.Pointer(e)) != 0 { + v1 = e + e += 8 + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(v1)), uintptr(0)) + } + } + return 0 +} + +func Xgetenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e uintptr + var l Tsize_t + _, _ = e, l + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if l != 0 && !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) && Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + return *(*uintptr)(unsafe.Pointer(e)) + uintptr(l) + uintptr(1) + } + goto _1 + _1: + ; + e += 8 + } + } + return uintptr(0) +} + +func _dummy1(tls *TLS, old uintptr, new1 uintptr) { +} + +func X__putenv(tls *TLS, s uintptr, l Tsize_t, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var e, newenv, tmp, v2 uintptr + var i Tsize_t + _, _, _, _, _ = e, i, newenv, tmp, v2 + i = uint64(0) + if Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) { + tmp = *(*uintptr)(unsafe.Pointer(e)) + *(*uintptr)(unsafe.Pointer(e)) = s + X__env_rm_add(tls, tmp, r) + return 0 + } + goto _1 + _1: + ; + e += 8 + i++ + } + } + if Xenviron == _oldenv { + newenv = Xrealloc(tls, _oldenv, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + } else { + newenv = Xmalloc(tls, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + if i != 0 { + Xmemcpy(tls, newenv, Xenviron, uint64(8)*i) + } + Xfree(tls, _oldenv) + } + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0) + v2 = newenv + _oldenv = v2 + Xenviron = v2 + if r != 0 { + X__env_rm_add(tls, uintptr(0), r) + } + return 0 + goto oom +oom: + ; + Xfree(tls, r) + return -int32(1) +} + +var _oldenv uintptr + +func Xputenv(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = uint64(int64(X__strchrnul(tls, s, int32('='))) - int64(s)) + if !(l != 0) || !(*(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0) { + return Xunsetenv(tls, s) + } + return X__putenv(tls, s, l, uintptr(0)) +} + +const L_cuserid = 20 +const NL_NMAX = 16 + +type Tcookie_io_functions_t = struct { + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fclose1 uintptr +} + +type T_IO_cookie_io_functions_t = Tcookie_io_functions_t + +func Xsecure_getenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if X__libc.Fsecure != 0 { + v1 = UintptrFromInt32(0) + } else { + v1 = Xgetenv(tls, name) + } + return v1 +} + +func X__env_rm_add(tls *TLS, old uintptr, new1 uintptr) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + } + var i, v3 Tsize_t + var t, v2 uintptr + _, _, _, _ = i, t, v2, v3 + i = uint64(0) + for { + if !(i < _env_alloced_n) { + break + } + if *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) == old { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + Xfree(tls, old) + return + } else { + if !(*(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) != 0) && new1 != 0 { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + new1 = uintptr(0) + } + } + goto _1 + _1: + ; + i++ + } + if !(new1 != 0) { + return + } + t = Xrealloc(tls, _env_alloced, uint64(8)*(_env_alloced_n+uint64(1))) + if !(t != 0) { + return + } + v2 = t + _env_alloced = v2 + v3 = _env_alloced_n + _env_alloced_n++ + *(*uintptr)(unsafe.Pointer(v2 + uintptr(v3)*8)) = new1 +} + +var _env_alloced uintptr + +var _env_alloced_n Tsize_t + +func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) (r int32) { + if __ccgo_strace { + trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l1, l2, v1 Tsize_t + var s uintptr + var v2 bool + _, _, _, _, _ = l1, l2, s, v1, v2 + if v2 = !(var1 != 0); !v2 { + v1 = uint64(int64(X__strchrnul(tls, var1, int32('='))) - int64(var1)) + l1 = v1 + } + if v2 || !(v1 != 0) || *(*uint8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { + return 0 + } + l2 = Xstrlen(tls, value) + s = Xmalloc(tls, l1+l2+uint64(2)) + if !(s != 0) { + return -int32(1) + } + Xmemcpy(tls, s, var1, l1) + *(*uint8)(unsafe.Pointer(s + uintptr(l1))) = uint8('=') + Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1)) + return X__putenv(tls, s, l1, s) +} + +func _dummy2(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xunsetenv(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, eo, v2 uintptr + var l Tsize_t + _, _, _, _ = e, eo, l, v2 + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if !(l != 0) || *(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if Xenviron != 0 { + e = Xenviron + eo = e + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) + } else { + if eo != e { + v2 = eo + eo += 8 + *(*uintptr)(unsafe.Pointer(v2)) = *(*uintptr)(unsafe.Pointer(e)) + } else { + eo += 8 + } + } + goto _1 + _1: + ; + e += 8 + } + if eo != e { + *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) + } + } + return 0 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +type Terrmsgstr_t = struct { + Fstr0 [21]uint8 + FstrEILSEQ [22]uint8 + FstrEDOM [13]uint8 + FstrERANGE [25]uint8 + FstrENOTTY [10]uint8 + FstrEACCES [18]uint8 + FstrEPERM [24]uint8 + FstrENOENT [26]uint8 + FstrESRCH [16]uint8 + FstrEEXIST [12]uint8 + FstrEOVERFLOW [30]uint8 + FstrENOSPC [24]uint8 + FstrENOMEM [14]uint8 + FstrEBUSY [14]uint8 + FstrEINTR [24]uint8 + FstrEAGAIN [33]uint8 + FstrESPIPE [13]uint8 + FstrEXDEV [18]uint8 + FstrEROFS [22]uint8 + FstrENOTEMPTY [20]uint8 + FstrECONNRESET [25]uint8 + FstrETIMEDOUT [20]uint8 + FstrECONNREFUSED [19]uint8 + FstrEHOSTDOWN [13]uint8 + FstrEHOSTUNREACH [20]uint8 + FstrEADDRINUSE [15]uint8 + FstrEPIPE [12]uint8 + FstrEIO [10]uint8 + FstrENXIO [26]uint8 + FstrENOTBLK [22]uint8 + FstrENODEV [15]uint8 + FstrENOTDIR [16]uint8 + FstrEISDIR [15]uint8 + FstrETXTBSY [15]uint8 + FstrENOEXEC [18]uint8 + FstrEINVAL [17]uint8 + FstrE2BIG [23]uint8 + FstrELOOP [19]uint8 + FstrENAMETOOLONG [18]uint8 + FstrENFILE [30]uint8 + FstrEMFILE [30]uint8 + FstrEBADF [20]uint8 + FstrECHILD [17]uint8 + FstrEFAULT [12]uint8 + FstrEFBIG [15]uint8 + FstrEMLINK [15]uint8 + FstrENOLCK [19]uint8 + FstrEDEADLK [30]uint8 + FstrENOTRECOVERABLE [22]uint8 + FstrEOWNERDEAD [20]uint8 + FstrECANCELED [19]uint8 + FstrENOSYS [25]uint8 + FstrENOMSG [27]uint8 + FstrEIDRM [19]uint8 + FstrENOSTR [20]uint8 + FstrENODATA [18]uint8 + FstrETIME [15]uint8 + FstrENOSR [25]uint8 + FstrENOLINK [22]uint8 + FstrEPROTO [15]uint8 + FstrEBADMSG [12]uint8 + FstrEBADFD [29]uint8 + FstrENOTSOCK [13]uint8 + FstrEDESTADDRREQ [29]uint8 + FstrEMSGSIZE [18]uint8 + FstrEPROTOTYPE [31]uint8 + FstrENOPROTOOPT [23]uint8 + FstrEPROTONOSUPPORT [23]uint8 + FstrESOCKTNOSUPPORT [26]uint8 + FstrENOTSUP [14]uint8 + FstrEPFNOSUPPORT [30]uint8 + FstrEAFNOSUPPORT [41]uint8 + FstrEADDRNOTAVAIL [22]uint8 + FstrENETDOWN [16]uint8 + FstrENETUNREACH [20]uint8 + FstrENETRESET [28]uint8 + FstrECONNABORTED [19]uint8 + FstrENOBUFS [26]uint8 + FstrEISCONN [20]uint8 + FstrENOTCONN [21]uint8 + FstrESHUTDOWN [34]uint8 + FstrEALREADY [30]uint8 + FstrEINPROGRESS [22]uint8 + FstrESTALE [18]uint8 + FstrEREMOTEIO [17]uint8 + FstrEDQUOT [15]uint8 + FstrENOMEDIUM [16]uint8 + FstrEMEDIUMTYPE [18]uint8 + FstrEMULTIHOP [19]uint8 + FstrENOKEY [27]uint8 + FstrEKEYEXPIRED [16]uint8 + FstrEKEYREVOKED [21]uint8 + FstrEKEYREJECTED [28]uint8 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +var _errmsgstr = Terrmsgstr_t{ + Fstr0: [21]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', ' ', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n'}, + FstrEILSEQ: [22]uint8{'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'b', 'y', 't', 'e', ' ', 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e'}, + FstrEDOM: [13]uint8{'D', 'o', 'm', 'a', 'i', 'n', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrERANGE: [25]uint8{'R', 'e', 's', 'u', 'l', 't', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a', 'b', 'l', 'e'}, + FstrENOTTY: [10]uint8{'N', 'o', 't', ' ', 'a', ' ', 't', 't', 'y'}, + FstrEACCES: [18]uint8{'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', ' ', 'd', 'e', 'n', 'i', 'e', 'd'}, + FstrEPERM: [24]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'e', 'r', 'm', 'i', 't', 't', 'e', 'd'}, + FstrENOENT: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'f', 'i', 'l', 'e', ' ', 'o', 'r', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrESRCH: [16]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEEXIST: [12]uint8{'F', 'i', 'l', 'e', ' ', 'e', 'x', 'i', 's', 't', 's'}, + FstrEOVERFLOW: [30]uint8{'V', 'a', 'l', 'u', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'a', 't', 'a', ' ', 't', 'y', 'p', 'e'}, + FstrENOSPC: [24]uint8{'N', 'o', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'l', 'e', 'f', 't', ' ', 'o', 'n', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOMEM: [14]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y'}, + FstrEBUSY: [14]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrEINTR: [24]uint8{'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 'e', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l'}, + FstrEAGAIN: [33]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 't', 'e', 'm', 'p', 'o', 'r', 'a', 'r', 'i', 'l', 'y', ' ', 'u', 'n', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrESPIPE: [13]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 's', 'e', 'e', 'k'}, + FstrEXDEV: [18]uint8{'C', 'r', 'o', 's', 's', '-', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'l', 'i', 'n', 'k'}, + FstrEROFS: [22]uint8{'R', 'e', 'a', 'd', '-', 'o', 'n', 'l', 'y', ' ', 'f', 'i', 'l', 'e', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrENOTEMPTY: [20]uint8{'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'n', 'o', 't', ' ', 'e', 'm', 'p', 't', 'y'}, + FstrECONNRESET: [25]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'p', 'e', 'e', 'r'}, + FstrETIMEDOUT: [20]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 't', 'i', 'm', 'e', 'd', ' ', 'o', 'u', 't'}, + FstrECONNREFUSED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 'f', 'u', 's', 'e', 'd'}, + FstrEHOSTDOWN: [13]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrEHOSTUNREACH: [20]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrEADDRINUSE: [15]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'i', 'n', ' ', 'u', 's', 'e'}, + FstrEPIPE: [12]uint8{'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e'}, + FstrEIO: [10]uint8{'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrENXIO: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'o', 'r', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrENOTBLK: [22]uint8{'B', 'l', 'o', 'c', 'k', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrENODEV: [15]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOTDIR: [16]uint8{'N', 'o', 't', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrEISDIR: [15]uint8{'I', 's', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrETXTBSY: [15]uint8{'T', 'e', 'x', 't', ' ', 'f', 'i', 'l', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrENOEXEC: [18]uint8{'E', 'x', 'e', 'c', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEINVAL: [17]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'a', 'r', 'g', 'u', 'm', 'e', 'n', 't'}, + FstrE2BIG: [23]uint8{'A', 'r', 'g', 'u', 'm', 'e', 'n', 't', ' ', 'l', 'i', 's', 't', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrELOOP: [19]uint8{'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', ' ', 'l', 'i', 'n', 'k', ' ', 'l', 'o', 'o', 'p'}, + FstrENAMETOOLONG: [18]uint8{'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrENFILE: [30]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'o', 'p', 'e', 'n', ' ', 'f', 'i', 'l', 'e', 's', ' ', 'i', 'n', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrEMFILE: [30]uint8{'N', 'o', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEBADF: [20]uint8{'B', 'a', 'd', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r'}, + FstrECHILD: [17]uint8{'N', 'o', ' ', 'c', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEFAULT: [12]uint8{'B', 'a', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrEFBIG: [15]uint8{'F', 'i', 'l', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEMLINK: [15]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'l', 'i', 'n', 'k', 's'}, + FstrENOLCK: [19]uint8{'N', 'o', ' ', 'l', 'o', 'c', 'k', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEDEADLK: [30]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'd', 'e', 'a', 'd', 'l', 'o', 'c', 'k', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'o', 'c', 'c', 'u', 'r'}, + FstrENOTRECOVERABLE: [22]uint8{'S', 't', 'a', 't', 'e', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e'}, + FstrEOWNERDEAD: [20]uint8{'P', 'r', 'e', 'v', 'i', 'o', 'u', 's', ' ', 'o', 'w', 'n', 'e', 'r', ' ', 'd', 'i', 'e', 'd'}, + FstrECANCELED: [19]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'c', 'a', 'n', 'c', 'e', 'l', 'e', 'd'}, + FstrENOSYS: [25]uint8{'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'i', 'm', 'p', 'l', 'e', 'm', 'e', 'n', 't', 'e', 'd'}, + FstrENOMSG: [27]uint8{'N', 'o', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 'o', 'f', ' ', 'd', 'e', 's', 'i', 'r', 'e', 'd', ' ', 't', 'y', 'p', 'e'}, + FstrEIDRM: [19]uint8{'I', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd'}, + FstrENOSTR: [20]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 'n', 'o', 't', ' ', 'a', ' ', 's', 't', 'r', 'e', 'a', 'm'}, + FstrENODATA: [18]uint8{'N', 'o', ' ', 'd', 'a', 't', 'a', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrETIME: [15]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 't', 'i', 'm', 'e', 'o', 'u', 't'}, + FstrENOSR: [25]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 's', 't', 'r', 'e', 'a', 'm', 's', ' ', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's'}, + FstrENOLINK: [22]uint8{'L', 'i', 'n', 'k', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 's', 'e', 'v', 'e', 'r', 'e', 'd'}, + FstrEPROTO: [15]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEBADMSG: [12]uint8{'B', 'a', 'd', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'}, + FstrEBADFD: [29]uint8{'F', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', ' ', 'i', 'n', ' ', 'b', 'a', 'd', ' ', 's', 't', 'a', 't', 'e'}, + FstrENOTSOCK: [13]uint8{'N', 'o', 't', ' ', 'a', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrEDESTADDRREQ: [29]uint8{'D', 'e', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrEMSGSIZE: [18]uint8{'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEPROTOTYPE: [31]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'w', 'r', 'o', 'n', 'g', ' ', 't', 'y', 'p', 'e', ' ', 'f', 'o', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrENOPROTOOPT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEPROTONOSUPPORT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrESOCKTNOSUPPORT: [26]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrENOTSUP: [14]uint8{'N', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEPFNOSUPPORT: [30]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEAFNOSUPPORT: [41]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'b', 'y', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'}, + FstrEADDRNOTAVAIL: [22]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrENETDOWN: [16]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrENETUNREACH: [20]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrENETRESET: [28]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'n', 'e', 't', 'w', 'o', 'r', 'k'}, + FstrECONNABORTED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'a', 'b', 'o', 'r', 't', 'e', 'd'}, + FstrENOBUFS: [26]uint8{'N', 'o', ' ', 'b', 'u', 'f', 'f', 'e', 'r', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEISCONN: [20]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'i', 's', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrENOTCONN: [21]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'n', 'o', 't', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrESHUTDOWN: [34]uint8{'C', 'a', 'n', 'n', 'o', 't', ' ', 's', 'e', 'n', 'd', ' ', 'a', 'f', 't', 'e', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 's', 'h', 'u', 't', 'd', 'o', 'w', 'n'}, + FstrEALREADY: [30]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrEINPROGRESS: [22]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrESTALE: [18]uint8{'S', 't', 'a', 'l', 'e', ' ', 'f', 'i', 'l', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e'}, + FstrEREMOTEIO: [17]uint8{'R', 'e', 'm', 'o', 't', 'e', ' ', 'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEDQUOT: [15]uint8{'Q', 'u', 'o', 't', 'a', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd'}, + FstrENOMEDIUM: [16]uint8{'N', 'o', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 'f', 'o', 'u', 'n', 'd'}, + FstrEMEDIUMTYPE: [18]uint8{'W', 'r', 'o', 'n', 'g', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 't', 'y', 'p', 'e'}, + FstrEMULTIHOP: [19]uint8{'M', 'u', 'l', 't', 'i', 'h', 'o', 'p', ' ', 'a', 't', 't', 'e', 'm', 'p', 't', 'e', 'd'}, + FstrENOKEY: [27]uint8{'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd', ' ', 'k', 'e', 'y', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEKEYEXPIRED: [16]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd'}, + FstrEKEYREVOKED: [21]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 'r', 'e', 'v', 'o', 'k', 'e', 'd'}, + FstrEKEYREJECTED: [28]uint8{'K', 'e', 'y', ' ', 'w', 'a', 's', ' ', 'r', 'e', 'j', 'e', 'c', 't', 'e', 'd', ' ', 'b', 'y', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e'}, +} + +var _errmsgidx = [132]uint16{ + 1: uint16(uint64(UintptrFromInt32(0) + 109)), + 2: uint16(uint64(UintptrFromInt32(0) + 133)), + 3: uint16(uint64(UintptrFromInt32(0) + 159)), + 4: uint16(uint64(UintptrFromInt32(0) + 269)), + 5: uint16(uint64(UintptrFromInt32(0) + 523)), + 6: uint16(uint64(UintptrFromInt32(0) + 533)), + 7: uint16(uint64(UintptrFromInt32(0) + 677)), + 8: uint16(uint64(UintptrFromInt32(0) + 642)), + 9: uint16(uint64(UintptrFromInt32(0) + 797)), + 10: uint16(uint64(UintptrFromInt32(0) + 817)), + 11: uint16(uint64(UintptrFromInt32(0) + 293)), + 12: uint16(uint64(UintptrFromInt32(0) + 241)), + 13: uint16(uint64(UintptrFromInt32(0) + 91)), + 14: uint16(uint64(UintptrFromInt32(0) + 834)), + 15: uint16(uint64(UintptrFromInt32(0) + 559)), + 16: uint16(uint64(UintptrFromInt32(0) + 255)), + 17: uint16(uint64(UintptrFromInt32(0) + 175)), + 18: uint16(uint64(UintptrFromInt32(0) + 339)), + 19: uint16(uint64(UintptrFromInt32(0) + 581)), + 20: uint16(uint64(UintptrFromInt32(0) + 596)), + 21: uint16(uint64(UintptrFromInt32(0) + 612)), + 22: uint16(uint64(UintptrFromInt32(0) + 660)), + 23: uint16(uint64(UintptrFromInt32(0) + 737)), + 24: uint16(uint64(UintptrFromInt32(0) + 767)), + 25: uint16(uint64(UintptrFromInt32(0) + 81)), + 26: uint16(uint64(UintptrFromInt32(0) + 627)), + 27: uint16(uint64(UintptrFromInt32(0) + 846)), + 28: uint16(uint64(UintptrFromInt32(0) + 217)), + 29: uint16(uint64(UintptrFromInt32(0) + 326)), + 30: uint16(uint64(UintptrFromInt32(0) + 357)), + 31: uint16(uint64(UintptrFromInt32(0) + 861)), + 32: uint16(uint64(UintptrFromInt32(0) + 511)), + 33: uint16(uint64(UintptrFromInt32(0) + 43)), + 34: uint16(uint64(UintptrFromInt32(0) + 56)), + 35: uint16(uint64(UintptrFromInt32(0) + 895)), + 36: uint16(uint64(UintptrFromInt32(0) + 719)), + 37: uint16(uint64(UintptrFromInt32(0) + 876)), + 38: uint16(uint64(UintptrFromInt32(0) + 986)), + 39: uint16(uint64(UintptrFromInt32(0) + 379)), + 40: uint16(uint64(UintptrFromInt32(0) + 700)), + 42: uint16(uint64(UintptrFromInt32(0) + 1011)), + 43: uint16(uint64(UintptrFromInt32(0) + 1038)), + 60: uint16(uint64(UintptrFromInt32(0) + 1057)), + 61: uint16(uint64(UintptrFromInt32(0) + 1077)), + 62: uint16(uint64(UintptrFromInt32(0) + 1095)), + 63: uint16(uint64(UintptrFromInt32(0) + 1110)), + 67: uint16(uint64(UintptrFromInt32(0) + 1135)), + 71: uint16(uint64(UintptrFromInt32(0) + 1157)), + 72: uint16(uint64(UintptrFromInt32(0) + 1803)), + 74: uint16(uint64(UintptrFromInt32(0) + 1172)), + 75: uint16(uint64(UintptrFromInt32(0) + 187)), + 77: uint16(uint64(UintptrFromInt32(0) + 1184)), + 84: uint16(uint64(UintptrFromInt32(0) + 21)), + 88: uint16(uint64(UintptrFromInt32(0) + 1213)), + 89: uint16(uint64(UintptrFromInt32(0) + 1226)), + 90: uint16(uint64(UintptrFromInt32(0) + 1255)), + 91: uint16(uint64(UintptrFromInt32(0) + 1273)), + 92: uint16(uint64(UintptrFromInt32(0) + 1304)), + 93: uint16(uint64(UintptrFromInt32(0) + 1327)), + 94: uint16(uint64(UintptrFromInt32(0) + 1350)), + 95: uint16(uint64(UintptrFromInt32(0) + 1376)), + 96: uint16(uint64(UintptrFromInt32(0) + 1390)), + 97: uint16(uint64(UintptrFromInt32(0) + 1420)), + 98: uint16(uint64(UintptrFromInt32(0) + 496)), + 99: uint16(uint64(UintptrFromInt32(0) + 1461)), + 100: uint16(uint64(UintptrFromInt32(0) + 1483)), + 101: uint16(uint64(UintptrFromInt32(0) + 1499)), + 102: uint16(uint64(UintptrFromInt32(0) + 1519)), + 103: uint16(uint64(UintptrFromInt32(0) + 1547)), + 104: uint16(uint64(UintptrFromInt32(0) + 399)), + 105: uint16(uint64(UintptrFromInt32(0) + 1566)), + 106: uint16(uint64(UintptrFromInt32(0) + 1592)), + 107: uint16(uint64(UintptrFromInt32(0) + 1612)), + 108: uint16(uint64(UintptrFromInt32(0) + 1633)), + 110: uint16(uint64(UintptrFromInt32(0) + 424)), + 111: uint16(uint64(UintptrFromInt32(0) + 444)), + 112: uint16(uint64(UintptrFromInt32(0) + 463)), + 113: uint16(uint64(UintptrFromInt32(0) + 476)), + 114: uint16(uint64(UintptrFromInt32(0) + 1667)), + 115: uint16(uint64(UintptrFromInt32(0) + 1697)), + 116: uint16(uint64(UintptrFromInt32(0) + 1719)), + 121: uint16(uint64(UintptrFromInt32(0) + 1737)), + 122: uint16(uint64(UintptrFromInt32(0) + 1754)), + 123: uint16(uint64(UintptrFromInt32(0) + 1769)), + 124: uint16(uint64(UintptrFromInt32(0) + 1785)), + 125: uint16(uint64(UintptrFromInt32(0) + 967)), + 126: uint16(uint64(UintptrFromInt32(0) + 1822)), + 127: uint16(uint64(UintptrFromInt32(0) + 1849)), + 128: uint16(uint64(UintptrFromInt32(0) + 1865)), + 129: uint16(uint64(UintptrFromInt32(0) + 1886)), + 130: uint16(uint64(UintptrFromInt32(0) + 947)), + 131: uint16(uint64(UintptrFromInt32(0) + 925)), +} + +func X__strerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + if uint64(e) >= Uint64FromInt64(264)/Uint64FromInt64(2) { + e = 0 + } + s = uintptr(unsafe.Pointer(&_errmsgstr)) + uintptr(_errmsgidx[e]) + return X__lctrans(tls, s, *(*uintptr)(unsafe.Pointer(loc + 5*8))) +} + +func Xstrerror(tls *TLS, e int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v, (%v:)", tls, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, loc) +} + +func X_Exit(tls *TLS, ec int32) { + if __ccgo_strace { + trc("tls=%v ec=%v, (%v:)", tls, ec, origin(2)) + } + X__syscall1(tls, int64(SYS_exit_group), int64(ec)) + for { + X__syscall1(tls, int64(SYS_exit), int64(ec)) + goto _1 + _1: + } +} + +func X__assert_fail(tls *TLS, expr uintptr, file uintptr, line int32, func1 uintptr) { + if __ccgo_strace { + trc("tls=%v expr=%v file=%v line=%v func1=%v, (%v:)", tls, expr, file, line, func1, origin(2)) + } + bp := tls.Alloc(48) + defer tls.Free(48) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+212, VaList(bp+8, expr, file, func1, line)) + Xabort(tls) +} + +const COUNT = 32 + +var _funcs [32]uintptr +var _count int32 +var _lock [1]int32 + +func X__funcs_on_quick_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var func1 uintptr + var v1 int32 + _, _ = func1, v1 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + for _count > 0 { + _count-- + v1 = _count + func1 = _funcs[v1] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + (*(*func(*TLS))(unsafe.Pointer(&struct{ uintptr }{func1})))(tls) + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + } +} + +func Xat_quick_exit(tls *TLS, func1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v func1=%v, (%v:)", tls, func1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + r = 0 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + if _count == int32(32) { + r = -int32(1) + } else { + v1 = _count + _count++ + _funcs[v1] = func1 + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + return r +} + +func _dummy3(tls *TLS) { +} + +func Xquick_exit(tls *TLS, code int32) { + if __ccgo_strace { + trc("tls=%v code=%v, (%v:)", tls, code, origin(2)) + } + X__funcs_on_quick_exit(tls) + X_Exit(tls, code) +} + +func Xcreat(tls *TLS, filename uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xopen(tls, filename, Int32FromInt32(O_CREAT)|Int32FromInt32(O_WRONLY)|Int32FromInt32(O_TRUNC), VaList(bp+8, mode)) +} + +func Xfcntl(tls *TLS, fd int32, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cmd=%v va=%v, (%v:)", tls, fd, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var arg uint64 + var ret, ret1, v1 int32 + var _ /* ex at bp+0 */ Tf_owner_ex + _, _, _, _, _ = ap, arg, ret, ret1, v1 + ap = va + arg = VaUint64(&ap) + _ = ap + if cmd == int32(F_SETFL) { + arg |= uint64(O_LARGEFILE) + } + if cmd == int32(F_SETLKW) { + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)), 0, 0, 0)))) + } + if cmd == int32(F_GETOWN) { + ret = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETOWN_EX)), int64(bp))) + if ret == -int32(EINVAL) { + return int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))) + } + if ret != 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Ftype1 == int32(F_OWNER_PGRP) { + v1 = -(*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } else { + v1 = (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } + return v1 + } + if cmd == int32(F_DUPFD_CLOEXEC) { + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(arg))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(Int32FromInt32(0)))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall1(tls, int64(SYS_close), int64(ret1)) + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD)), int64(arg))) + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + switch cmd { + case int32(F_SETLK): + fallthrough + case int32(F_GETLK): + fallthrough + case int32(F_GETOWN_EX): + fallthrough + case int32(F_SETOWN_EX): + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))))) + default: + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(arg))))) + } + return r +} + +func Xopen(tls *TLS, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v flags=%v va=%v, (%v:)", tls, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var fd int32 + var mode Tmode_t + _, _, _ = ap, fd, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + fd = int32(___syscall_cp(tls, int64(SYS_openat), int64(-Int32FromInt32(100)), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0)) + if fd >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(fd))) +} + +func Xopenat(tls *TLS, fd int32, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v flags=%v va=%v, (%v:)", tls, fd, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var mode Tmode_t + _, _ = ap, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_openat), int64(fd), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0)))) +} + +func Xposix_fadvise(tls *TLS, fd int32, base Toff_t, len1 Toff_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v advice=%v, (%v:)", tls, fd, base, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fadvise64), int64(fd), base, len1, int64(advice))) +} + +func Xposix_fallocate(tls *TLS, fd int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v, (%v:)", tls, fd, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(Int32FromInt32(0)), base, len1)) +} + +const WCONTINUED = 8 +const WEXITED = 4 +const WNOWAIT = 16777216 +const WSTOPPED = 2 +const __WALL = 1073741824 +const __WCLONE = 2147483648 +const __WNOTHREAD = 536870912 + +type Tidtype_t = int32 + +const _P_ALL = 0 +const _P_PID = 1 +const _P_PGID = 2 +const _P_PIDFD = 3 +const F_APP = 128 +const F_EOF = 16 +const F_ERR = 32 +const F_NORD = 4 +const F_NOWR = 8 +const F_PERM = 1 +const F_SVB = 64 +const KMAX = 128 +const LDBL_EPSILON1 = 2.22044604925031308085e-16 +const LDBL_MAX1 = 1.79769313486231570815e+308 +const LDBL_MIN1 = 2.22507385850720138309e-308 +const LD_B1B_DIG = 2 +const LD_B1B_MAX = 254740991 +const MASK = 127 +const MAYBE_WAITERS = 1073741824 +const UNGET = 8 + +type TFILE = struct { + Fflags uint32 + Frpos uintptr + Frend uintptr + Fclose1 uintptr + Fwend uintptr + Fwpos uintptr + Fmustbezero_1 uintptr + Fwbase uintptr + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fbuf uintptr + Fbuf_size Tsize_t + Fprev uintptr + Fnext uintptr + Ffd int32 + Fpipe_pid int32 + Flockcount int64 + Fmode int32 + Flock int32 + Flbf int32 + Fcookie uintptr + Foff Toff_t + Fgetln_buf uintptr + Fmustbezero_2 uintptr + Fshend uintptr + Fshlim Toff_t + Fshcnt Toff_t + Fprev_locked uintptr + Fnext_locked uintptr + Flocale uintptr +} + +type T_IO_FILE = TFILE + +func _scanexp(tls *TLS, f uintptr, pok int32) (r int64) { + var c, neg, x, v1, v10, v14, v18, v4 int32 + var y, v22 int64 + var v11, v12, v15, v16, v19, v2, v20, v3, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, neg, x, y, v1, v10, v11, v12, v14, v15, v16, v18, v19, v2, v20, v22, v3, v4, v5, v6 + neg = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + if c == int32('+') || c == int32('-') { + neg = BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__shgetc(tls, f) + } + c = v4 + if uint32(c-int32('0')) >= uint32(10) && pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if uint32(c-int32('0')) >= uint32(10) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return -Int64FromInt64(0x7fffffffffffffff) - Int64FromInt32(1) + } + x = 0 + for { + if !(uint32(c-int32('0')) < uint32(10) && x < Int32FromInt32(INT_MAX)/Int32FromInt32(10)) { + break + } + x = int32(10)*x + c - int32('0') + goto _9 + _9: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v12 = f + 8 + v11 = *(*uintptr)(unsafe.Pointer(v12)) + *(*uintptr)(unsafe.Pointer(v12))++ + v10 = int32(*(*uint8)(unsafe.Pointer(v11))) + } else { + v10 = X__shgetc(tls, f) + } + c = v10 + } + y = int64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y < Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(100)) { + break + } + y = int64(10)*y + int64(c) - int64('0') + goto _13 + _13: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + for { + if !(uint32(c-int32('0')) < uint32(10)) { + break + } + goto _17 + _17: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v20 = f + 8 + v19 = *(*uintptr)(unsafe.Pointer(v20)) + *(*uintptr)(unsafe.Pointer(v20))++ + v18 = int32(*(*uint8)(unsafe.Pointer(v19))) + } else { + v18 = X__shgetc(tls, f) + } + c = v18 + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if neg != 0 { + v22 = -y + } else { + v22 = y + } + return v22 +} + +func _decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) (r float64) { + bp := tls.Alloc(512) + defer tls.Free(512) + var a, bitlim, denormal, e2, emax, gotdig, gotrad, i, j, k, lnz, p10, rp, rpm9, sh, z, v13, v14, v2, v21, v23, v29, v30, v6, v9 int32 + var bias, frac, y float64 + var carry, carry1, carry2, t, tmp, tmp2 Tuint32_t + var dc, e10, lrp int64 + var tmp1 Tuint64_t + var v10, v11, v15, v16, v3, v4, v7, v8 uintptr + var _ /* x at bp+0 */ [128]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, bias, bitlim, carry, carry1, carry2, dc, denormal, e10, e2, emax, frac, gotdig, gotrad, i, j, k, lnz, lrp, p10, rp, rpm9, sh, t, tmp, tmp1, tmp2, y, z, v10, v11, v13, v14, v15, v16, v2, v21, v23, v29, v3, v30, v4, v6, v7, v8, v9 + lrp = 0 + dc = 0 + e10 = 0 + lnz = 0 + gotdig = 0 + gotrad = 0 + emax = -emin - bits + int32(3) + denormal = 0 + frac = Float64FromInt32(0) + bias = Float64FromInt32(0) + j = 0 + k = 0 + /* Don't let leading zeros consume buffer space */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _1 + _1: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + c = v2 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v8 = f + 8 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + v6 = int32(*(*uint8)(unsafe.Pointer(v7))) + } else { + v6 = X__shgetc(tls, f) + } + c = v6 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + lrp-- + goto _5 + _5: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + c = v9 + } + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + gotrad = int32(1) + lrp = dc + } else { + if k < Int32FromInt32(KMAX)-Int32FromInt32(3) { + dc++ + if c != int32('0') { + lnz = int32(dc) + } + if j != 0 { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]*uint32(10) + uint32(c) - uint32('0') + } else { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(c - int32('0')) + } + j++ + v13 = j + if v13 == int32(9) { + k++ + j = 0 + } + gotdig = int32(1) + } else { + dc++ + if c != int32('0') { + lnz = (Int32FromInt32(KMAX) - Int32FromInt32(4)) * Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(Int32FromInt32(KMAX)-Int32FromInt32(4))*4)) |= uint32(1) + } + } + } + goto _12 + _12: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + if !(gotrad != 0) { + lrp = dc + } + if gotdig != 0 && c|int32(32) == int32('e') { + e10 = _scanexp(tls, f, pok) + if e10 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e10 = 0 + } + lrp += e10 + } else { + if c >= 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if !(gotdig != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + /* Handle zero specially to avoid nasty special cases later */ + if !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] != 0) { + return float64(sign) * float64(0) + } + /* Optimize small integers (w/no exponent) and over/under-flow */ + if lrp == dc && dc < int64(10) && (bits > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bits == uint32(0)) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if lrp > int64(-emin/int32(2)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if lrp < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + /* Align incomplete final B1B digit */ + if j != 0 { + for { + if !(j < int32(9)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32(10) + goto _19 + _19: + ; + j++ + } + k++ + j = 0 + } + a = 0 + z = k + e2 = 0 + rp = int32(lrp) + /* Optimize small to mid-size integers (even in exp. notation) */ + if lnz < int32(9) && lnz <= rp && rp < int32(18) { + if rp == int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if rp < int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) / float64(_p10s[int32(8)-rp]) + } + bitlim = bits - int32(3)*(rp-Int32FromInt32(9)) + if bitlim > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bitlim == uint32(0) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) * float64(_p10s[rp-int32(10)]) + } + } + /* Drop trailing zeros */ + for { + if !!((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z-int32(1)] != 0) { + break + } + goto _20 + _20: + ; + z-- + } + /* Align radix point to B1B digit boundary */ + if rp%int32(9) != 0 { + if rp >= 0 { + v21 = rp % int32(9) + } else { + v21 = rp%int32(9) + int32(9) + } + rpm9 = v21 + p10 = _p10s[int32(8)-rpm9] + carry = uint32(0) + k = a + for { + if !(k != z) { + break + } + tmp = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] % uint32(p10) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]/uint32(p10) + carry + carry = uint32(int32(1000000000)/p10) * tmp + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + rp -= int32(9) + } + goto _22 + _22: + ; + k++ + } + if carry != 0 { + v23 = z + z++ + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v23] = carry + } + rp += int32(9) - rpm9 + } + /* Upscale until desired number of bits are left of radix point */ + for rp < Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) || rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) && (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] < _th[0] { + carry1 = uint32(0) + e2 -= int32(29) + k = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + for { + tmp1 = uint64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k])< uint64(1000000000) { + carry1 = uint32(tmp1 / uint64(1000000000)) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1 % uint64(1000000000)) + } else { + carry1 = uint32(0) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1) + } + if k == (z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) && k != a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + z = k + } + if k == a { + break + } + goto _24 + _24: + ; + k = (k - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry1 != 0 { + rp += int32(9) + a = (a - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if a == z { + z = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] = carry1 + } + } + /* Downscale until exactly number of bits are left of radix point */ + for { + carry2 = uint32(0) + sh = int32(1) + i = 0 + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + k = (a + i) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if k == z || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] < _th[i] { + i = int32(LD_B1B_DIG) + break + } + if (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] > _th[i] { + break + } + goto _26 + _26: + ; + i++ + } + if i == int32(LD_B1B_DIG) && rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + break + } + /* FIXME: find a way to compute optimal sh */ + if rp > Int32FromInt32(9)+Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + sh = int32(9) + } + e2 += sh + k = a + for { + if !(k != z) { + break + } + tmp2 = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] & uint32(int32(1)<>sh + carry2 + carry2 = uint32(Int32FromInt32(1000000000)>>sh) * tmp2 + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + i-- + rp -= int32(9) + } + goto _27 + _27: + ; + k = (k + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry2 != 0 { + if (z+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != a { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] = carry2 + z = (z + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= uint32(1) + } + } + goto _25 + _25: + } + /* Assemble desired bits into floating point variable */ + v29 = Int32FromInt32(0) + i = v29 + y = float64(v29) + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + v30 = (z + Int32FromInt32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + z = v30 + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v30-int32(1)] = uint32(0) + } + y = Float64FromFloat64(1e+09)*y + float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))]) + goto _28 + _28: + ; + i++ + } + y *= float64(sign) + /* Limit precision for denormal results */ + if bits > int32(LDBL_MANT_DIG)+e2-emin { + bits = int32(LDBL_MANT_DIG) + e2 - emin + if bits < 0 { + bits = 0 + } + denormal = int32(1) + } + /* Calculate bias term to force rounding, move out lower bits */ + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), y) + frac = Xfmodl(tls, y, Xscalbn(tls, Float64FromInt32(1), int32(LDBL_MANT_DIG)-bits)) + y -= frac + y += bias + } + /* Process tail of decimal input so it can affect rounding */ + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z { + t = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] + if t < uint32(500000000) && (t != 0 || (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z) { + frac += float64(0.25) * float64(sign) + } else { + if t > uint32(500000000) { + frac += float64(0.75) * float64(sign) + } else { + if t == uint32(500000000) { + if (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + frac += float64(0.5) * float64(sign) + } else { + frac += float64(0.75) * float64(sign) + } + } + } + } + if int32(LDBL_MANT_DIG)-bits >= int32(2) && !(Xfmodl(tls, frac, Float64FromInt32(1)) != 0) { + frac++ + } + } + y += frac + y -= bias + if (e2+int32(LDBL_MANT_DIG))&int32(INT_MAX) > emax-int32(5) { + if Xfabsl(tls, y) >= Float64FromInt32(2)/Float64FromFloat64(2.22044604925031308085e-16) { + if denormal != 0 && bits == int32(LDBL_MANT_DIG)+e2-emin { + denormal = 0 + } + y *= Float64FromFloat64(0.5) + e2++ + } + if e2+int32(LDBL_MANT_DIG) > emax || denormal != 0 && frac != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + } + return Xscalbnl(tls, y, e2) +} + +var _th = [2]Tuint32_t{ + 0: uint32(9007199), + 1: uint32(254740991), +} + +var _p10s = [8]int32{ + 0: int32(10), + 1: int32(100), + 2: int32(1000), + 3: int32(10000), + 4: int32(100000), + 5: int32(1000000), + 6: int32(10000000), + 7: int32(100000000), +} + +func _hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) (r float64) { + var bias, scale, y float64 + var c, d, gotdig, gotrad, gottail, v1, v12, v16, v5, v8 int32 + var dc, e2, rp int64 + var x Tuint32_t + var v10, v13, v14, v17, v18, v2, v3, v6, v7, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bias, c, d, dc, e2, gotdig, gotrad, gottail, rp, scale, x, y, v1, v10, v12, v13, v14, v16, v17, v18, v2, v3, v5, v6, v7, v8, v9 + x = uint32(0) + y = Float64FromInt32(0) + scale = Float64FromInt32(1) + bias = Float64FromInt32(0) + gottail = 0 + gotrad = 0 + gotdig = 0 + rp = 0 + dc = 0 + e2 = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + /* Skip leading zeros */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _4 + _4: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__shgetc(tls, f) + } + c = v5 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + /* Count zeros after the radix point before significand */ + rp = 0 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _11 + _11: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + rp-- + } + } + for { + if !(uint32(c-int32('0')) < uint32(10) || uint32(c|int32(32)-int32('a')) < uint32(6) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + rp = dc + gotrad = int32(1) + } else { + gotdig = int32(1) + if c > int32('9') { + d = c | int32(32) + int32(10) - int32('a') + } else { + d = c - int32('0') + } + if dc < int64(8) { + x = x*uint32(16) + uint32(d) + } else { + if dc < int64(Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)+Int32FromInt32(1)) { + scale /= Float64FromInt32(16) + y += float64(d) * scale + } else { + if d != 0 && !(gottail != 0) { + y += Float64FromFloat64(0.5) * scale + gottail = int32(1) + } + } + } + dc++ + } + goto _15 + _15: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v18 = f + 8 + v17 = *(*uintptr)(unsafe.Pointer(v18)) + *(*uintptr)(unsafe.Pointer(v18))++ + v16 = int32(*(*uint8)(unsafe.Pointer(v17))) + } else { + v16 = X__shgetc(tls, f) + } + c = v16 + } + if !(gotdig != 0) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if gotrad != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return float64(sign) * float64(0) + } + if !(gotrad != 0) { + rp = dc + } + for dc < int64(8) { + x *= uint32(16) + dc++ + } + if c|int32(32) == int32('p') { + e2 = _scanexp(tls, f, pok) + if e2 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e2 = 0 + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + e2 += int64(4)*rp - int64(32) + if !(x != 0) { + return float64(sign) * float64(0) + } + if e2 > int64(-emin) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if e2 < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + for x < uint32(0x80000000) { + if y >= Float64FromFloat64(0.5) { + x += x + uint32(1) + y += y - Float64FromInt32(1) + } else { + x += x + y += y + } + e2-- + } + if int64(bits) > int64(32)+e2-int64(emin) { + bits = int32(int64(32) + e2 - int64(emin)) + if bits < 0 { + bits = 0 + } + } + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(32)+Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), float64(sign)) + } + if bits < int32(32) && y != 0 && !(x&Uint32FromInt32(1) != 0) { + x++ + y = Float64FromInt32(0) + } + y = bias + float64(sign)*float64(x) + float64(sign)*y + y -= bias + if !(y != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + return Xscalbnl(tls, y, int32(e2)) +} + +func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) (r float64) { + if __ccgo_strace { + trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bits, c, emin, sign, v1, v12, v19, v2, v22, v27, v34, v5, v6, v8 int32 + var i, v31 Tsize_t + var v10, v13, v14, v20, v21, v23, v24, v28, v29, v3, v35, v36, v4, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bits, c, emin, i, sign, v1, v10, v12, v13, v14, v19, v2, v20, v21, v22, v23, v24, v27, v28, v29, v3, v31, v34, v35, v36, v4, v5, v6, v8, v9 + sign = int32(1) + switch prec { + case 0: + bits = int32(FLT_MANT_DIG) + emin = -int32(125) - bits + case int32(1): + bits = int32(DBL_MANT_DIG) + emin = -int32(1021) - bits + case int32(2): + bits = int32(LDBL_MANT_DIG) + emin = -int32(1021) - bits + default: + return Float64FromInt32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + sign -= int32(2) * BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + i = uint64(0) + for { + if !(i < uint64(8) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 247 + uintptr(i))))) { + break + } + if i < uint64(7) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + } + goto _11 + _11: + ; + i++ + } + if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { + if i != uint64(8) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + for { + if !(i > uint64(3)) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + goto _16 + _16: + ; + i-- + } + } + } + return float64(float32(sign) * X__builtin_inff(tls)) + } + if !(i != 0) { + i = uint64(0) + for { + if !(i < uint64(3) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 256 + uintptr(i))))) { + break + } + if i < uint64(2) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v21 = f + 8 + v20 = *(*uintptr)(unsafe.Pointer(v21)) + *(*uintptr)(unsafe.Pointer(v21))++ + v19 = int32(*(*uint8)(unsafe.Pointer(v20))) + } else { + v19 = X__shgetc(tls, f) + } + c = v19 + } + goto _18 + _18: + ; + i++ + } + } + if i == uint64(3) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v24 = f + 8 + v23 = *(*uintptr)(unsafe.Pointer(v24)) + *(*uintptr)(unsafe.Pointer(v24))++ + v22 = int32(*(*uint8)(unsafe.Pointer(v23))) + } else { + v22 = X__shgetc(tls, f) + } + if v22 != int32('(') { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + i = uint64(1) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v29 = f + 8 + v28 = *(*uintptr)(unsafe.Pointer(v29)) + *(*uintptr)(unsafe.Pointer(v29))++ + v27 = int32(*(*uint8)(unsafe.Pointer(v28))) + } else { + v27 = X__shgetc(tls, f) + } + c = v27 + if uint32(c-int32('0')) < uint32(10) || uint32(c-int32('A')) < uint32(26) || uint32(c-int32('a')) < uint32(26) || c == int32('_') { + goto _26 + } + if c == int32(')') { + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !(pok != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + for { + v31 = i + i-- + if !(v31 != 0) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + goto _26 + _26: + ; + i++ + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if i != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + if c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v36 = f + 8 + v35 = *(*uintptr)(unsafe.Pointer(v36)) + *(*uintptr)(unsafe.Pointer(v36))++ + v34 = int32(*(*uint8)(unsafe.Pointer(v35))) + } else { + v34 = X__shgetc(tls, f) + } + c = v34 + if c|int32(32) == int32('x') { + return _hexfloat(tls, f, bits, emin, sign, pok) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + c = int32('0') + } + return _decfloat(tls, f, c, bits, emin, sign, pok) +} + +// C documentation +// +// /* Lookup table for digit values. -1==255>=36 -> invalid */ +var _table6 = [257]uint8{ + 0: uint8(-Int32FromInt32(1)), + 1: uint8(-Int32FromInt32(1)), + 2: uint8(-Int32FromInt32(1)), + 3: uint8(-Int32FromInt32(1)), + 4: uint8(-Int32FromInt32(1)), + 5: uint8(-Int32FromInt32(1)), + 6: uint8(-Int32FromInt32(1)), + 7: uint8(-Int32FromInt32(1)), + 8: uint8(-Int32FromInt32(1)), + 9: uint8(-Int32FromInt32(1)), + 10: uint8(-Int32FromInt32(1)), + 11: uint8(-Int32FromInt32(1)), + 12: uint8(-Int32FromInt32(1)), + 13: uint8(-Int32FromInt32(1)), + 14: uint8(-Int32FromInt32(1)), + 15: uint8(-Int32FromInt32(1)), + 16: uint8(-Int32FromInt32(1)), + 17: uint8(-Int32FromInt32(1)), + 18: uint8(-Int32FromInt32(1)), + 19: uint8(-Int32FromInt32(1)), + 20: uint8(-Int32FromInt32(1)), + 21: uint8(-Int32FromInt32(1)), + 22: uint8(-Int32FromInt32(1)), + 23: uint8(-Int32FromInt32(1)), + 24: uint8(-Int32FromInt32(1)), + 25: uint8(-Int32FromInt32(1)), + 26: uint8(-Int32FromInt32(1)), + 27: uint8(-Int32FromInt32(1)), + 28: uint8(-Int32FromInt32(1)), + 29: uint8(-Int32FromInt32(1)), + 30: uint8(-Int32FromInt32(1)), + 31: uint8(-Int32FromInt32(1)), + 32: uint8(-Int32FromInt32(1)), + 33: uint8(-Int32FromInt32(1)), + 34: uint8(-Int32FromInt32(1)), + 35: uint8(-Int32FromInt32(1)), + 36: uint8(-Int32FromInt32(1)), + 37: uint8(-Int32FromInt32(1)), + 38: uint8(-Int32FromInt32(1)), + 39: uint8(-Int32FromInt32(1)), + 40: uint8(-Int32FromInt32(1)), + 41: uint8(-Int32FromInt32(1)), + 42: uint8(-Int32FromInt32(1)), + 43: uint8(-Int32FromInt32(1)), + 44: uint8(-Int32FromInt32(1)), + 45: uint8(-Int32FromInt32(1)), + 46: uint8(-Int32FromInt32(1)), + 47: uint8(-Int32FromInt32(1)), + 48: uint8(-Int32FromInt32(1)), + 50: uint8(1), + 51: uint8(2), + 52: uint8(3), + 53: uint8(4), + 54: uint8(5), + 55: uint8(6), + 56: uint8(7), + 57: uint8(8), + 58: uint8(9), + 59: uint8(-Int32FromInt32(1)), + 60: uint8(-Int32FromInt32(1)), + 61: uint8(-Int32FromInt32(1)), + 62: uint8(-Int32FromInt32(1)), + 63: uint8(-Int32FromInt32(1)), + 64: uint8(-Int32FromInt32(1)), + 65: uint8(-Int32FromInt32(1)), + 66: uint8(10), + 67: uint8(11), + 68: uint8(12), + 69: uint8(13), + 70: uint8(14), + 71: uint8(15), + 72: uint8(16), + 73: uint8(17), + 74: uint8(18), + 75: uint8(19), + 76: uint8(20), + 77: uint8(21), + 78: uint8(22), + 79: uint8(23), + 80: uint8(24), + 81: uint8(25), + 82: uint8(26), + 83: uint8(27), + 84: uint8(28), + 85: uint8(29), + 86: uint8(30), + 87: uint8(31), + 88: uint8(32), + 89: uint8(33), + 90: uint8(34), + 91: uint8(35), + 92: uint8(-Int32FromInt32(1)), + 93: uint8(-Int32FromInt32(1)), + 94: uint8(-Int32FromInt32(1)), + 95: uint8(-Int32FromInt32(1)), + 96: uint8(-Int32FromInt32(1)), + 97: uint8(-Int32FromInt32(1)), + 98: uint8(10), + 99: uint8(11), + 100: uint8(12), + 101: uint8(13), + 102: uint8(14), + 103: uint8(15), + 104: uint8(16), + 105: uint8(17), + 106: uint8(18), + 107: uint8(19), + 108: uint8(20), + 109: uint8(21), + 110: uint8(22), + 111: uint8(23), + 112: uint8(24), + 113: uint8(25), + 114: uint8(26), + 115: uint8(27), + 116: uint8(28), + 117: uint8(29), + 118: uint8(30), + 119: uint8(31), + 120: uint8(32), + 121: uint8(33), + 122: uint8(34), + 123: uint8(35), + 124: uint8(-Int32FromInt32(1)), + 125: uint8(-Int32FromInt32(1)), + 126: uint8(-Int32FromInt32(1)), + 127: uint8(-Int32FromInt32(1)), + 128: uint8(-Int32FromInt32(1)), + 129: uint8(-Int32FromInt32(1)), + 130: uint8(-Int32FromInt32(1)), + 131: uint8(-Int32FromInt32(1)), + 132: uint8(-Int32FromInt32(1)), + 133: uint8(-Int32FromInt32(1)), + 134: uint8(-Int32FromInt32(1)), + 135: uint8(-Int32FromInt32(1)), + 136: uint8(-Int32FromInt32(1)), + 137: uint8(-Int32FromInt32(1)), + 138: uint8(-Int32FromInt32(1)), + 139: uint8(-Int32FromInt32(1)), + 140: uint8(-Int32FromInt32(1)), + 141: uint8(-Int32FromInt32(1)), + 142: uint8(-Int32FromInt32(1)), + 143: uint8(-Int32FromInt32(1)), + 144: uint8(-Int32FromInt32(1)), + 145: uint8(-Int32FromInt32(1)), + 146: uint8(-Int32FromInt32(1)), + 147: uint8(-Int32FromInt32(1)), + 148: uint8(-Int32FromInt32(1)), + 149: uint8(-Int32FromInt32(1)), + 150: uint8(-Int32FromInt32(1)), + 151: uint8(-Int32FromInt32(1)), + 152: uint8(-Int32FromInt32(1)), + 153: uint8(-Int32FromInt32(1)), + 154: uint8(-Int32FromInt32(1)), + 155: uint8(-Int32FromInt32(1)), + 156: uint8(-Int32FromInt32(1)), + 157: uint8(-Int32FromInt32(1)), + 158: uint8(-Int32FromInt32(1)), + 159: uint8(-Int32FromInt32(1)), + 160: uint8(-Int32FromInt32(1)), + 161: uint8(-Int32FromInt32(1)), + 162: uint8(-Int32FromInt32(1)), + 163: uint8(-Int32FromInt32(1)), + 164: uint8(-Int32FromInt32(1)), + 165: uint8(-Int32FromInt32(1)), + 166: uint8(-Int32FromInt32(1)), + 167: uint8(-Int32FromInt32(1)), + 168: uint8(-Int32FromInt32(1)), + 169: uint8(-Int32FromInt32(1)), + 170: uint8(-Int32FromInt32(1)), + 171: uint8(-Int32FromInt32(1)), + 172: uint8(-Int32FromInt32(1)), + 173: uint8(-Int32FromInt32(1)), + 174: uint8(-Int32FromInt32(1)), + 175: uint8(-Int32FromInt32(1)), + 176: uint8(-Int32FromInt32(1)), + 177: uint8(-Int32FromInt32(1)), + 178: uint8(-Int32FromInt32(1)), + 179: uint8(-Int32FromInt32(1)), + 180: uint8(-Int32FromInt32(1)), + 181: uint8(-Int32FromInt32(1)), + 182: uint8(-Int32FromInt32(1)), + 183: uint8(-Int32FromInt32(1)), + 184: uint8(-Int32FromInt32(1)), + 185: uint8(-Int32FromInt32(1)), + 186: uint8(-Int32FromInt32(1)), + 187: uint8(-Int32FromInt32(1)), + 188: uint8(-Int32FromInt32(1)), + 189: uint8(-Int32FromInt32(1)), + 190: uint8(-Int32FromInt32(1)), + 191: uint8(-Int32FromInt32(1)), + 192: uint8(-Int32FromInt32(1)), + 193: uint8(-Int32FromInt32(1)), + 194: uint8(-Int32FromInt32(1)), + 195: uint8(-Int32FromInt32(1)), + 196: uint8(-Int32FromInt32(1)), + 197: uint8(-Int32FromInt32(1)), + 198: uint8(-Int32FromInt32(1)), + 199: uint8(-Int32FromInt32(1)), + 200: uint8(-Int32FromInt32(1)), + 201: uint8(-Int32FromInt32(1)), + 202: uint8(-Int32FromInt32(1)), + 203: uint8(-Int32FromInt32(1)), + 204: uint8(-Int32FromInt32(1)), + 205: uint8(-Int32FromInt32(1)), + 206: uint8(-Int32FromInt32(1)), + 207: uint8(-Int32FromInt32(1)), + 208: uint8(-Int32FromInt32(1)), + 209: uint8(-Int32FromInt32(1)), + 210: uint8(-Int32FromInt32(1)), + 211: uint8(-Int32FromInt32(1)), + 212: uint8(-Int32FromInt32(1)), + 213: uint8(-Int32FromInt32(1)), + 214: uint8(-Int32FromInt32(1)), + 215: uint8(-Int32FromInt32(1)), + 216: uint8(-Int32FromInt32(1)), + 217: uint8(-Int32FromInt32(1)), + 218: uint8(-Int32FromInt32(1)), + 219: uint8(-Int32FromInt32(1)), + 220: uint8(-Int32FromInt32(1)), + 221: uint8(-Int32FromInt32(1)), + 222: uint8(-Int32FromInt32(1)), + 223: uint8(-Int32FromInt32(1)), + 224: uint8(-Int32FromInt32(1)), + 225: uint8(-Int32FromInt32(1)), + 226: uint8(-Int32FromInt32(1)), + 227: uint8(-Int32FromInt32(1)), + 228: uint8(-Int32FromInt32(1)), + 229: uint8(-Int32FromInt32(1)), + 230: uint8(-Int32FromInt32(1)), + 231: uint8(-Int32FromInt32(1)), + 232: uint8(-Int32FromInt32(1)), + 233: uint8(-Int32FromInt32(1)), + 234: uint8(-Int32FromInt32(1)), + 235: uint8(-Int32FromInt32(1)), + 236: uint8(-Int32FromInt32(1)), + 237: uint8(-Int32FromInt32(1)), + 238: uint8(-Int32FromInt32(1)), + 239: uint8(-Int32FromInt32(1)), + 240: uint8(-Int32FromInt32(1)), + 241: uint8(-Int32FromInt32(1)), + 242: uint8(-Int32FromInt32(1)), + 243: uint8(-Int32FromInt32(1)), + 244: uint8(-Int32FromInt32(1)), + 245: uint8(-Int32FromInt32(1)), + 246: uint8(-Int32FromInt32(1)), + 247: uint8(-Int32FromInt32(1)), + 248: uint8(-Int32FromInt32(1)), + 249: uint8(-Int32FromInt32(1)), + 250: uint8(-Int32FromInt32(1)), + 251: uint8(-Int32FromInt32(1)), + 252: uint8(-Int32FromInt32(1)), + 253: uint8(-Int32FromInt32(1)), + 254: uint8(-Int32FromInt32(1)), + 255: uint8(-Int32FromInt32(1)), + 256: uint8(-Int32FromInt32(1)), +} + +func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bs, c, neg, v1, v11, v14, v2, v21, v25, v29, v33, v37, v41, v45, v5, v6, v8 int32 + var val, v10, v12, v13, v15, v16, v22, v23, v26, v27, v3, v30, v31, v34, v35, v38, v39, v4, v42, v43, v46, v47, v9 uintptr + var x uint32 + var y uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bs, c, neg, val, x, y, v1, v10, v11, v12, v13, v14, v15, v16, v2, v21, v22, v23, v25, v26, v27, v29, v3, v30, v31, v33, v34, v35, v37, v38, v39, v4, v41, v42, v43, v45, v46, v47, v5, v6, v8, v9 + val = uintptr(unsafe.Pointer(&_table6)) + uintptr(1) + neg = 0 + if base > uint32(36) || base == uint32(1) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + neg = -BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + if (base == uint32(0) || base == uint32(16)) && c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = int32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = X__shgetc(tls, f) + } + c = v11 + if c|int32(32) == int32('x') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + if int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= int32(16) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return uint64(0) + } + base = uint32(16) + } else { + if base == uint32(0) { + base = uint32(8) + } + } + } else { + if base == uint32(0) { + base = uint32(10) + } + if uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + if base == uint32(10) { + x = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(10)-Uint32FromInt32(1)) { + break + } + x = x*uint32(10) + uint32(c-Int32FromUint8('0')) + goto _20 + _20: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v23 = f + 8 + v22 = *(*uintptr)(unsafe.Pointer(v23)) + *(*uintptr)(unsafe.Pointer(v23))++ + v21 = int32(*(*uint8)(unsafe.Pointer(v22))) + } else { + v21 = X__shgetc(tls, f) + } + c = v21 + } + y = uint64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y <= (Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))/Uint64FromInt32(10) && uint64(10)*y <= Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)-uint64(c-Int32FromUint8('0'))) { + break + } + y = y*uint64(10) + uint64(c-Int32FromUint8('0')) + goto _24 + _24: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v27 = f + 8 + v26 = *(*uintptr)(unsafe.Pointer(v27)) + *(*uintptr)(unsafe.Pointer(v27))++ + v25 = int32(*(*uint8)(unsafe.Pointer(v26))) + } else { + v25 = X__shgetc(tls, f) + } + c = v25 + } + if uint32(c-int32('0')) >= uint32(10) { + goto done + } + } else { + if !(base&(base-Uint32FromInt32(1)) != 0) { + bs = int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 260 + uintptr(uint32(0x17)*base>>int32(5)&uint32(7))))) + x = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(32)) { + break + } + x = x<>bs) { + break + } + y = y<= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if y >= lim { + if !(lim&Uint64FromInt32(1) != 0) && !(neg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim - uint64(1) + } else { + if y > lim { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim + } + } + } + return y ^ uint64(neg) - uint64(neg) +} + +func X__procfdname(tls *TLS, buf uintptr, fd uint32) { + if __ccgo_strace { + trc("tls=%v buf=%v fd=%v, (%v:)", tls, buf, fd, origin(2)) + } + var i, j, v5 uint32 + var v2 uint8 + _, _, _, _ = i, j, v2, v5 + i = uint32(0) + for { + v2 = *(*uint8)(unsafe.Pointer(__ccgo_ts + 269 + uintptr(i))) + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v2 + if !(v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if !(fd != 0) { + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8('0') + *(*uint8)(unsafe.Pointer(buf + uintptr(i+uint32(1)))) = uint8(0) + return + } + j = fd + for { + if !(j != 0) { + break + } + goto _3 + _3: + ; + j /= uint32(10) + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8(0) + for { + if !(fd != 0) { + break + } + i-- + v5 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v5))) = uint8(uint32('0') + fd%uint32(10)) + goto _4 + _4: + ; + fd /= uint32(10) + } +} + +/* The shcnt field stores the number of bytes read so far, offset by + * the value of buf-rpos at the last function call (__shlim or __shgetc), + * so that between calls the inline shcnt macro can add rpos-buf to get + * the actual count. */ + +func X__shlim(tls *TLS, f uintptr, lim Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Fshlim = lim + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + /* If lim is nonzero, rend must be a valid pointer. */ + if lim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > lim { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } +} + +func X__shgetc(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 int32 + var cnt Toff_t + var v2 bool + _, _, _, _ = c, cnt, v1, v2 + cnt = (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if v2 = (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*TFILE)(unsafe.Pointer(f)).Fshlim; !v2 { + v1 = X__uflow(tls, f) + c = v1 + } + if v2 || v1 < 0 { + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + (*TFILE)(unsafe.Pointer(f)).Fshlim = int64(-int32(1)) + return -int32(1) + } + cnt++ + if (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > (*TFILE)(unsafe.Pointer(f)).Fshlim-cnt { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr((*TFILE)(unsafe.Pointer(f)).Fshlim-cnt) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + if (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf { + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(-Int32FromInt32(1)))) = uint8(c) + } + return c +} + +func X__syscall_ret(tls *TLS, r uint64) (r1 int64) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + if r > -Uint64FromUint64(4096) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(-r) + return int64(-int32(1)) + } + return int64(r) +} + +const OK_BINDS = 1030 +const OK_TYPES = 39 + +type TElf_Symndx = uint32 + +type Tdl_phdr_info = struct { + Fdlpi_addr TElf64_Addr + Fdlpi_name uintptr + Fdlpi_phdr uintptr + Fdlpi_phnum TElf64_Half + Fdlpi_adds uint64 + Fdlpi_subs uint64 + Fdlpi_tls_modid Tsize_t + Fdlpi_tls_data uintptr +} + +type Tlink_map = struct { + Fl_addr TElf64_Addr + Fl_name uintptr + Fl_ld uintptr + Fl_next uintptr + Fl_prev uintptr +} + +type Tr_debug = struct { + Fr_version int32 + Fr_map uintptr + Fr_brk TElf64_Addr + Fr_state int32 + Fr_ldbase TElf64_Addr +} + +const _RT_CONSISTENT = 0 +const _RT_ADD = 1 +const _RT_DELETE = 2 + +type TEhdr = struct { + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TPhdr = struct { + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TSym = struct { + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TVerdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TVerdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +func _checkver(tls *TLS, def uintptr, vsym int32, vername uintptr, strings uintptr) (r int32) { + var aux uintptr + _ = aux + vsym &= int32(0x7fff) + for { + if !(int32((*TVerdef)(unsafe.Pointer(def)).Fvd_flags)&Int32FromInt32(VER_FLG_BASE) != 0) && int32((*TVerdef)(unsafe.Pointer(def)).Fvd_ndx)&int32(0x7fff) == vsym { + break + } + if (*TVerdef)(unsafe.Pointer(def)).Fvd_next == uint32(0) { + return 0 + } + def = def + uintptr((*TVerdef)(unsafe.Pointer(def)).Fvd_next) + goto _1 + _1: + } + aux = def + uintptr((*TVerdef)(unsafe.Pointer(def)).Fvd_aux) + return BoolInt32(!(Xstrcmp(tls, vername, strings+uintptr((*TVerdaux)(unsafe.Pointer(aux)).Fvda_name)) != 0)) +} + +func X__vdsosym(tls *TLS, vername uintptr, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v vername=%v name=%v, (%v:)", tls, vername, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var base, i Tsize_t + var dynv, eh, hashtab, p, ph, strings, syms, verdef, versym uintptr + _, _, _, _, _, _, _, _, _, _, _ = base, dynv, eh, hashtab, i, p, ph, strings, syms, verdef, versym + i = uint64(0) + for { + if !(*(*Tsize_t)(unsafe.Pointer(X__libc.Fauxv + uintptr(i)*8)) != uint64(AT_SYSINFO_EHDR)) { + break + } + if !(*(*Tsize_t)(unsafe.Pointer(X__libc.Fauxv + uintptr(i)*8)) != 0) { + return uintptr(0) + } + goto _1 + _1: + ; + i += uint64(2) + } + if !(*(*Tsize_t)(unsafe.Pointer(X__libc.Fauxv + uintptr(i+uint64(1))*8)) != 0) { + return uintptr(0) + } + eh = uintptr(*(*Tsize_t)(unsafe.Pointer(X__libc.Fauxv + uintptr(i+uint64(1))*8))) + ph = eh + uintptr((*TEhdr)(unsafe.Pointer(eh)).Fe_phoff) + dynv = uintptr(0) + base = uint64(-Int32FromInt32(1)) + i = uint64(0) + for { + if !(i < uint64((*TEhdr)(unsafe.Pointer(eh)).Fe_phnum)) { + break + } + if (*TPhdr)(unsafe.Pointer(ph)).Fp_type == uint32(PT_LOAD) { + base = uint64(eh) + (*TPhdr)(unsafe.Pointer(ph)).Fp_offset - (*TPhdr)(unsafe.Pointer(ph)).Fp_vaddr + } else { + if (*TPhdr)(unsafe.Pointer(ph)).Fp_type == uint32(PT_DYNAMIC) { + dynv = eh + uintptr((*TPhdr)(unsafe.Pointer(ph)).Fp_offset) + } + } + goto _2 + _2: + ; + i++ + ph = ph + uintptr((*TEhdr)(unsafe.Pointer(eh)).Fe_phentsize) + } + if !(dynv != 0) || base == uint64(-Int32FromInt32(1)) { + return uintptr(0) + } + strings = uintptr(0) + syms = uintptr(0) + hashtab = uintptr(0) + versym = uintptr(0) + verdef = uintptr(0) + i = uint64(0) + for { + if !(*(*Tsize_t)(unsafe.Pointer(dynv + uintptr(i)*8)) != 0) { + break + } + p = uintptr(base + *(*Tsize_t)(unsafe.Pointer(dynv + uintptr(i+uint64(1))*8))) + switch *(*Tsize_t)(unsafe.Pointer(dynv + uintptr(i)*8)) { + case uint64(DT_STRTAB): + strings = p + case uint64(DT_SYMTAB): + syms = p + case uint64(DT_HASH): + hashtab = p + case uint64(DT_VERSYM): + versym = p + case uint64(DT_VERDEF): + verdef = p + break + } + goto _3 + _3: + ; + i += uint64(2) + } + if !(strings != 0) || !(syms != 0) || !(hashtab != 0) { + return uintptr(0) + } + if !(verdef != 0) { + versym = uintptr(0) + } + i = uint64(0) + for { + if !(i < uint64(*(*TElf_Symndx)(unsafe.Pointer(hashtab + 1*4)))) { + break + } + if !(Int32FromInt32(1)<<(int32((*(*TSym)(unsafe.Pointer(syms + uintptr(i)*24))).Fst_info)&Int32FromInt32(0xf))&(Int32FromInt32(1)<>Int32FromInt32(4))&(Int32FromInt32(1)< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* st at bp+0 */ Tstat + if Xstat(tls, path, bp) < 0 { + return -int32(1) + } + return int32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ino&Uint64FromInt32(0xffff) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0xff)< %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall3(tls, int64(SYS_msgctl), int64(q), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(buf))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xmsgget(tls *TLS, k Tkey_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v k=%v flag=%v, (%v:)", tls, k, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_msgget), int64(k), int64(flag))))) +} + +func Xmsgrcv(tls *TLS, q int32, m uintptr, len1 Tsize_t, type1 int64, flag int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v type1=%v flag=%v, (%v:)", tls, q, m, len1, type1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_msgrcv), int64(q), int64(m), int64(len1), type1, int64(flag), 0))) +} + +func Xmsgsnd(tls *TLS, q int32, m uintptr, len1 Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v flag=%v, (%v:)", tls, q, m, len1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_msgsnd), int64(q), int64(m), int64(len1), int64(flag), 0, 0)))) +} + +const GETALL = 13 +const GETNCNT = 14 +const GETPID = 11 +const GETVAL = 12 +const GETZCNT = 15 +const SEM_INFO = 19 +const SEM_STAT = 18 +const SEM_STAT_ANY = 20 +const SEM_UNDO = 4096 +const SETALL = 17 +const SETVAL = 16 +const _SEM_SEMUN_UNDEFINED = 1 + +type Tsemid_ds = struct { + Fsem_perm Tipc_perm + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + Fsem_nsems uint16 + F__sem_nsems_pad [6]uint8 + F__unused3 int64 + F__unused4 int64 +} + +type Tseminfo = struct { + Fsemmap int32 + Fsemmni int32 + Fsemmns int32 + Fsemmnu int32 + Fsemmsl int32 + Fsemopm int32 + Fsemume int32 + Fsemusz int32 + Fsemvmx int32 + Fsemaem int32 +} + +type Tsembuf = struct { + Fsem_num uint16 + Fsem_op int16 + Fsem_flg int16 +} + +type Tsemun = struct { + Fbuf [0]uintptr + Farray [0]uintptr + Fval int32 + F__ccgo_pad3 [4]byte +} + +func Xsemctl(tls *TLS, id int32, num int32, cmd int32, va uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v num=%v cmd=%v va=%v, (%v:)", tls, id, num, cmd, va, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var r int32 + var _ /* arg at bp+0 */ Tsemun + _, _ = ap, r + *(*Tsemun)(unsafe.Pointer(bp)) = Tsemun{} + *(*int32)(unsafe.Pointer(bp)) = 0 + switch cmd & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)) { + case int32(SETVAL): + fallthrough + case int32(GETALL): + fallthrough + case int32(SETALL): + fallthrough + case int32(IPC_SET): + fallthrough + case int32(IPC_INFO): + fallthrough + case int32(SEM_INFO): + fallthrough + case Int32FromInt32(IPC_STAT) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(18) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(20) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + ap = va + *(*Tsemun)(unsafe.Pointer(bp)) = *(*Tsemun)(unsafe.Pointer(VaOther(&ap, 8))) + _ = ap + } + r = int32(X__syscall4(tls, int64(SYS_semctl), int64(id), int64(num), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(*(*uintptr)(unsafe.Pointer(bp))))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xsemget(tls *TLS, key Tkey_t, n int32, fl int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v n=%v fl=%v, (%v:)", tls, key, n, fl, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if n > int32(USHRT_MAX) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_semget), int64(key), int64(n), int64(fl))))) +} + +func Xsemop(tls *TLS, id int32, buf uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v, (%v:)", tls, id, buf, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_semop), int64(id), int64(buf), int64(n))))) +} + +const NO_TIME32 = 0 +const __key = 0 +const __seq = 0 + +type Tipc_perm1 = struct { + Fkey Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + Fseq int32 + F__pad1 int64 + F__pad2 int64 +} + +type Tsemid_ds1 = struct { + Fsem_perm Tipc_perm1 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + Fsem_nsems uint16 + F__sem_nsems_pad [6]uint8 + F__unused3 int64 + F__unused4 int64 +} + +func Xsemtimedop(tls *TLS, id int32, buf uintptr, n Tsize_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts=%v, (%v:)", tls, id, buf, n, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_semtimedop), int64(id), int64(buf), int64(n), int64(ts))))) +} + +const SHMLBA = 4096 +const SHM_DEST = 512 +const SHM_EXEC = 32768 +const SHM_HUGETLB = 2048 +const SHM_HUGE_16GB = 2281701376 +const SHM_HUGE_16MB = 1610612736 +const SHM_HUGE_1GB = 2013265920 +const SHM_HUGE_1MB = 1342177280 +const SHM_HUGE_256MB = 1879048192 +const SHM_HUGE_2GB = 2080374784 +const SHM_HUGE_2MB = 1409286144 +const SHM_HUGE_32MB = 1677721600 +const SHM_HUGE_512KB = 1275068416 +const SHM_HUGE_512MB = 1946157056 +const SHM_HUGE_64KB = 1073741824 +const SHM_HUGE_8MB = 1543503872 +const SHM_HUGE_MASK = 63 +const SHM_HUGE_SHIFT = 26 +const SHM_INFO = 14 +const SHM_LOCK = 11 +const SHM_LOCKED = 1024 +const SHM_NORESERVE = 4096 +const SHM_R = 256 +const SHM_RDONLY = 4096 +const SHM_REMAP = 16384 +const SHM_RND = 8192 +const SHM_STAT = 13 +const SHM_STAT_ANY = 15 +const SHM_UNLOCK = 12 +const SHM_W = 128 + +type Tshmid_ds = struct { + Fshm_perm Tipc_perm + Fshm_segsz Tsize_t + Fshm_atime Ttime_t + Fshm_dtime Ttime_t + Fshm_ctime Ttime_t + Fshm_cpid Tpid_t + Fshm_lpid Tpid_t + Fshm_nattch uint64 + F__pad1 uint64 + F__pad2 uint64 +} + +type Tshminfo = struct { + Fshmmax uint64 + Fshmmin uint64 + Fshmmni uint64 + Fshmseg uint64 + Fshmall uint64 + F__unused [4]uint64 +} + +type Tshm_info = struct { + F__used_ids int32 + Fshm_tot uint64 + Fshm_rss uint64 + Fshm_swp uint64 + F__swap_attempts uint64 + F__swap_successes uint64 +} + +type Tshmatt_t = uint64 + +func Xshmat(tls *TLS, id int32, addr uintptr, flag int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v id=%v addr=%v flag=%v, (%v:)", tls, id, addr, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_shmat), int64(id), int64(addr), int64(flag))))) +} + +func Xshmctl(tls *TLS, id int32, cmd int32, buf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v cmd=%v buf=%v, (%v:)", tls, id, cmd, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall3(tls, int64(SYS_shmctl), int64(id), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(buf))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xshmdt(tls *TLS, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v, (%v:)", tls, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_shmdt), int64(addr))))) +} + +func Xshmget(tls *TLS, key Tkey_t, size Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v size=%v flag=%v, (%v:)", tls, key, size, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size > uint64(Int64FromInt64(INT64_MAX)) { + size = Uint64FromUint64(0xffffffffffffffff) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_shmget), int64(key), int64(size), int64(flag))))) +} + +type Tpasswd = struct { + Fpw_name uintptr + Fpw_passwd uintptr + Fpw_uid Tuid_t + Fpw_gid Tgid_t + Fpw_gecos uintptr + Fpw_dir uintptr + Fpw_shell uintptr +} + +func Xcuserid(tls *TLS, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(2112) + defer tls.Free(2112) + var len1 Tsize_t + var _ /* ppw at bp+48 */ uintptr + var _ /* pw at bp+0 */ Tpasswd + var _ /* pwb at bp+56 */ [256]int64 + _ = len1 + if buf != 0 { + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + } + Xgetpwuid_r(tls, Xgeteuid(tls), bp, bp+56, uint64(2048), bp+48) + if !(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + return buf + } + len1 = Xstrnlen(tls, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, uint64(L_cuserid)) + if len1 == uint64(L_cuserid) { + return buf + } + if !(buf != 0) { + buf = uintptr(unsafe.Pointer(&_usridbuf)) + } + Xmemcpy(tls, buf, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, len1+uint64(1)) + return buf +} + +var _usridbuf [20]uint8 + +func Xvwarn(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + Xfputs(tls, __ccgo_ts+289, uintptr(unsafe.Pointer(&X__stderr_FILE))) + } + Xperror(tls, uintptr(0)) +} + +func Xvwarnx(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+284, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + } + Xputc(tls, int32('\n'), uintptr(unsafe.Pointer(&X__stderr_FILE))) +} + +func Xverr(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarn(tls, fmt, ap) + _exit(tls, status) +} + +func Xverrx(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarnx(tls, fmt, ap) + _exit(tls, status) +} + +func Xwarn(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarn(tls, fmt, ap) + _ = ap +} + +func Xwarnx(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarnx(tls, fmt, ap) + _ = ap +} + +func Xerr(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverr(tls, status, fmt, ap) + _ = ap +} + +func Xerrx(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverrx(tls, status, fmt, ap) + _ = ap +} + +func Xeuidaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfaccessat(tls, -int32(100), filename, amode, int32(AT_EACCESS)) +} + +func Xeaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xeuidaccess(tls, filename, amode) +} + +const FTW_CHDIR = 4 +const FTW_D = 2 +const FTW_DEPTH = 8 +const FTW_DNR = 3 +const FTW_DP = 6 +const FTW_F = 1 +const FTW_MOUNT = 2 +const FTW_NS = 4 +const FTW_PHYS = 1 +const FTW_SL = 5 +const FTW_SLN = 7 + +type TFTW = struct { + Fbase int32 + Flevel int32 +} + +func Xftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v, (%v:)", tls, path, fn, fd_limit, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The following cast assumes that calling a function with one + * argument more than it needs behaves as expected. This is + * actually undefined, but works on all real-world machines. */ + return Xnftw(tls, path, fn, fd_limit, int32(FTW_PHYS)) +} + +const STATX_ALL = 4095 +const STATX_ATIME = 32 +const STATX_BASIC_STATS = 2047 +const STATX_BLOCKS = 1024 +const STATX_BTIME = 2048 +const STATX_CTIME = 128 +const STATX_GID = 16 +const STATX_INO = 256 +const STATX_MODE = 2 +const STATX_MTIME = 64 +const STATX_NLINK = 4 +const STATX_SIZE = 512 +const STATX_TYPE = 1 +const STATX_UID = 8 +const S_IEXEC = 64 +const S_IREAD = 256 +const S_IWRITE = 128 + +type Tstatx_timestamp = struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + F__pad Tuint32_t +} + +type Tstatx = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + F__pad0 [1]Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime Tstatx_timestamp + Fstx_btime Tstatx_timestamp + Fstx_ctime Tstatx_timestamp + Fstx_mtime Tstatx_timestamp + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + F__pad1 [14]Tuint64_t +} + +type Ttimezone = struct { + Ftz_minuteswest int32 + Ftz_dsttime int32 +} + +func Xfutimes(tls *TLS, fd int32, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tv=%v, (%v:)", tls, fd, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* times at bp+0 */ [2]Ttimespec + if !(tv != 0) { + return Xfutimens(tls, fd, uintptr(0)) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + return Xfutimens(tls, fd, bp) +} + +const prlimit64 = 0 + +func Xgetdtablesize(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* rl at bp+0 */ Trlimit + _ = v1 + Xgetrlimit(tls, int32(RLIMIT_NOFILE), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur < uint64(INT_MAX) { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } else { + v1 = uint64(INT_MAX) + } + return int32(v1) +} + +func Xgetloadavg(tls *TLS, a uintptr, n int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v n=%v, (%v:)", tls, a, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(368) + defer tls.Free(368) + var i, v1 int32 + var _ /* si at bp+0 */ Tsysinfo + _, _ = i, v1 + if n <= 0 { + if n != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 + } + Xsysinfo(tls, bp) + if n > int32(3) { + n = int32(3) + } + i = 0 + for { + if !(i < n) { + break + } + *(*float64)(unsafe.Pointer(a + uintptr(i)*8)) = Float64FromFloat64(1) / float64(Int32FromInt32(1)< %v", r) }() + } + return int32(X__libc.Fpage_size) +} + +const B0 = 0 +const B1000000 = 4104 +const B110 = 3 +const B115200 = 4098 +const B1152000 = 4105 +const B1200 = 9 +const B134 = 4 +const B150 = 5 +const B1500000 = 4106 +const B1800 = 10 +const B19200 = 14 +const B200 = 6 +const B2000000 = 4107 +const B230400 = 4099 +const B2400 = 11 +const B2500000 = 4108 +const B300 = 7 +const B3000000 = 4109 +const B3500000 = 4110 +const B38400 = 15 +const B4000000 = 4111 +const B460800 = 4100 +const B4800 = 12 +const B50 = 1 +const B500000 = 4101 +const B57600 = 4097 +const B576000 = 4102 +const B600 = 8 +const B75 = 2 +const B921600 = 4103 +const B9600 = 13 +const BRKINT = 2 +const BS0 = 0 +const BS1 = 8192 +const BSDLY = 8192 +const CBAUD = 4111 +const CBAUDEX = 4096 +const CIBAUD = 269418496 +const CLOCAL = 2048 +const CMSPAR = 1073741824 +const CR0 = 0 +const CR1 = 512 +const CR2 = 1024 +const CR3 = 1536 +const CRDLY = 1536 +const CREAD = 128 +const CRTSCTS = 2147483648 +const CS5 = 0 +const CS6 = 16 +const CS7 = 32 +const CS8 = 48 +const CSIZE = 48 +const CSTOPB = 64 +const ECHO = 8 +const ECHOCTL = 512 +const ECHOE = 16 +const ECHOK = 32 +const ECHOKE = 2048 +const ECHONL = 64 +const ECHOPRT = 1024 +const EXTA = 14 +const EXTB = 15 +const EXTPROC = 65536 +const FF0 = 0 +const FF1 = 32768 +const FFDLY = 32768 +const FLUSHO = 4096 +const HUPCL = 1024 +const ICANON = 2 +const ICRNL = 256 +const IEXTEN = 32768 +const IGNBRK = 1 +const IGNCR = 128 +const IGNPAR = 4 +const IMAXBEL = 8192 +const INLCR = 64 +const INPCK = 16 +const ISIG = 1 +const ISTRIP = 32 +const IUCLC = 512 +const IUTF8 = 16384 +const IXANY = 2048 +const IXOFF = 4096 +const IXON = 1024 +const NCCS = 32 +const NL0 = 0 +const NL1 = 256 +const NLDLY = 256 +const NOFLSH = 128 +const OCRNL = 8 +const OFDEL = 128 +const OFILL = 64 +const OLCUC = 2 +const ONLCR = 4 +const ONLRET = 32 +const ONOCR = 16 +const OPOST = 1 +const PARENB = 256 +const PARMRK = 8 +const PARODD = 512 +const PENDIN = 16384 +const TAB0 = 0 +const TAB1 = 2048 +const TAB2 = 4096 +const TAB3 = 6144 +const TABDLY = 6144 +const TCIFLUSH = 0 +const TCIOFF = 2 +const TCIOFLUSH = 2 +const TCION = 3 +const TCOFLUSH = 1 +const TCOOFF = 0 +const TCOON = 1 +const TCSADRAIN = 1 +const TCSAFLUSH = 2 +const TCSANOW = 0 +const TOSTOP = 256 +const VDISCARD = 13 +const VEOF = 4 +const VEOL = 11 +const VEOL2 = 16 +const VERASE = 2 +const VINTR = 0 +const VKILL = 3 +const VLNEXT = 15 +const VMIN = 6 +const VQUIT = 1 +const VREPRINT = 12 +const VSTART = 8 +const VSTOP = 9 +const VSUSP = 10 +const VSWTC = 7 +const VT0 = 0 +const VT1 = 16384 +const VTDLY = 16384 +const VTIME = 5 +const VWERASE = 14 +const XCASE = 4 +const XTABS = 6144 + +type Twinsize = struct { + Fws_row uint16 + Fws_col uint16 + Fws_xpixel uint16 + Fws_ypixel uint16 +} + +type Tcc_t = uint8 + +type Tspeed_t = uint32 + +type Ttcflag_t = uint32 + +type Ttermios = struct { + Fc_iflag Ttcflag_t + Fc_oflag Ttcflag_t + Fc_cflag Ttcflag_t + Fc_lflag Ttcflag_t + Fc_line Tcc_t + Fc_cc [32]Tcc_t + F__c_ispeed Tspeed_t + F__c_ospeed Tspeed_t +} + +func Xgetpass(tls *TLS, prompt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v prompt=%v, (%v:)", tls, prompt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd, v1 int32 + var l Tssize_t + var v2 uintptr + var _ /* s at bp+0 */ Ttermios + var _ /* t at bp+60 */ Ttermios + _, _, _, _ = fd, l, v1, v2 + v1 = Xopen(tls, __ccgo_ts+292, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + Xtcgetattr(tls, fd, bp+60) + *(*Ttermios)(unsafe.Pointer(bp)) = *(*Ttermios)(unsafe.Pointer(bp + 60)) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ISIG))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag |= uint32(ICANON) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag &= uint32(^(Int32FromInt32(INLCR) | Int32FromInt32(IGNCR))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag |= uint32(ICRNL) + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp+60) + Xtcdrain(tls, fd) + Xdprintf(tls, fd, __ccgo_ts+15, VaList(bp+128, prompt)) + l = Xread(tls, fd, uintptr(unsafe.Pointer(&_password)), uint64(128)) + if l >= 0 { + if l > 0 && int32(_password[l-int64(1)]) == int32('\n') || uint64(l) == uint64(128) { + l-- + } + _password[l] = uint8(0) + } + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp) + Xdprintf(tls, fd, __ccgo_ts+301, 0) + Xclose(tls, fd) + if l < 0 { + v2 = uintptr(0) + } else { + v2 = uintptr(unsafe.Pointer(&_password)) + } + return v2 +} + +var _password [128]uint8 + +var _defshells = [18]uint8{'/', 'b', 'i', 'n', '/', 's', 'h', 10, '/', 'b', 'i', 'n', '/', 'c', 's', 'h', 10} + +var _line uintptr +var _linesize Tsize_t +var _f uintptr + +func Xendusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f != 0 { + Xfclose(tls, _f) + } + _f = uintptr(0) +} + +func Xsetusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if !(_f != 0) { + _f = Xfopen(tls, __ccgo_ts+303, __ccgo_ts+315) + } + if !(_f != 0) { + _f = Xfmemopen(tls, uintptr(unsafe.Pointer(&_defshells)), Uint64FromInt64(18)-Uint64FromInt32(1), __ccgo_ts+319) + } +} + +func Xgetusershell(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tssize_t + _ = l + if !(_f != 0) { + Xsetusershell(tls) + } + if !(_f != 0) { + return uintptr(0) + } + l = Xgetline(tls, uintptr(unsafe.Pointer(&_line)), uintptr(unsafe.Pointer(&_linesize)), _f) + if l <= 0 { + return uintptr(0) + } + if int32(*(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1))))) == int32('\n') { + *(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1)))) = uint8(0) + } + return _line +} + +const ANYMARK = 1 +const FLUSHBAND = 4 +const FLUSHR = 1 +const FLUSHRW = 3 +const FLUSHW = 2 +const FMNAMESZ = 8 +const I_ATMARK = 21279 +const I_CANPUT = 21282 +const I_CKBAND = 21277 +const I_FDINSERT = 21264 +const I_FIND = 21259 +const I_FLUSH = 21253 +const I_FLUSHBAND = 21276 +const I_GETBAND = 21278 +const I_GETCLTIME = 21281 +const I_GETSIG = 21258 +const I_GRDOPT = 21255 +const I_GWROPT = 21268 +const I_LINK = 21260 +const I_LIST = 21269 +const I_LOOK = 21252 +const I_NREAD = 21249 +const I_PEEK = 21263 +const I_PLINK = 21270 +const I_POP = 21251 +const I_PUNLINK = 21271 +const I_PUSH = 21250 +const I_RECVFD = 21262 +const I_SENDFD = 21265 +const I_SETCLTIME = 21280 +const I_SETSIG = 21257 +const I_SRDOPT = 21254 +const I_STR = 21256 +const I_SWROPT = 21267 +const I_UNLINK = 21261 +const LASTMARK = 2 +const MORECTL = 1 +const MOREDATA = 2 +const MSG_ANY = 2 +const MSG_BAND = 4 +const MSG_HIPRI = 1 +const MUXID_ALL = -1 +const RMSGD = 1 +const RMSGN = 2 +const RNORM = 0 +const RPROTDAT = 4 +const RPROTDIS = 8 +const RPROTMASK = 28 +const RPROTNORM = 16 +const RS_HIPRI = 1 +const SNDPIPE = 2 +const SNDZERO = 1 +const S_BANDURG = 512 +const S_ERROR = 16 +const S_HANGUP = 32 +const S_HIPRI = 2 +const S_INPUT = 1 +const S_MSG = 8 +const S_OUTPUT = 4 +const S_RDBAND = 128 +const S_RDNORM = 64 +const S_WRBAND = 256 +const S_WRNORM = 4 +const __SID = 21248 + +type Tbandinfo = struct { + Fbi_pri uint8 + Fbi_flag int32 +} + +type Tstrbuf = struct { + Fmaxlen int32 + Flen1 int32 + Fbuf uintptr +} + +type Tstrpeek = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 +} + +type Tstrfdinsert = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 + Ffildes int32 + Foffset int32 +} + +type Tstrioctl = struct { + Fic_cmd int32 + Fic_timout int32 + Fic_len int32 + Fic_dp uintptr +} + +type Tstrrecvfd = struct { + Ffd int32 + Fuid int32 + Fgid int32 + F__fill [8]uint8 +} + +type Tstr_mlist = struct { + Fl_name [9]uint8 +} + +type Tstr_list = struct { + Fsl_nmods int32 + Fsl_modlist uintptr +} + +func Xisastream(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if Xfcntl(tls, fd, int32(F_GETFD), 0) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xlutimes(tls *TLS, filename uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v tv=%v, (%v:)", tls, filename, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + var _ /* times at bp+0 */ [2]Ttimespec + _ = v1 + if tv != 0 { + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + } + if tv != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), filename, v1, int32(AT_SYMLINK_NOFOLLOW)) +} + +const UL_GETFSIZE = 1 +const UL_SETFSIZE = 2 + +func Xulimit(tls *TLS, cmd int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v cmd=%v va=%v, (%v:)", tls, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var val int64 + var _ /* rl at bp+0 */ Trlimit + _, _ = ap, val + Xgetrlimit(tls, int32(RLIMIT_FSIZE), bp) + if cmd == int32(UL_SETFSIZE) { + ap = va + val = VaInt64(&ap) + _ = ap + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = uint64(512) * uint64(val) + if Xsetrlimit(tls, int32(RLIMIT_FSIZE), bp) != 0 { + return int64(-int32(1)) + } + } + return int64((*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur / uint64(512)) +} + +const BOOT_TIME = 2 +const DEAD_PROCESS = 8 +const EMPTY = 0 +const INIT_PROCESS = 5 +const LOGIN_PROCESS = 6 +const NEW_TIME = 3 +const OLD_TIME = 4 +const RUN_LVL = 1 +const USER_PROCESS = 7 +const e_exit = 0 +const e_termination = 0 + +type Tutmpx = struct { + Fut_type int16 + F__ut_pad1 int16 + Fut_pid Tpid_t + Fut_line [32]uint8 + Fut_id [4]uint8 + Fut_user [32]uint8 + Fut_host [256]uint8 + Fut_exit struct { + F__e_termination int16 + F__e_exit int16 + } + Fut_session int32 + F__ut_pad2 int32 + Fut_tv Ttimeval + Fut_addr_v6 [4]uint32 + F__unused [20]uint8 +} + +func Xendutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetutxent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xpututxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xupdwtmpx(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } +} + +func ___utmpxname(tls *TLS, f uintptr) (r int32) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return -int32(1) +} + +func Xendutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendutxent(tls) +} + +func Xgetutent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxent(tls) +} + +func Xgetutid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxid(tls, ut) +} + +func Xgetutline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxline(tls, ut) +} + +func Xpututline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xpututxline(tls, ut) +} + +func Xsetutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetutxent(tls) +} + +func Xupdwtmp(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } + Xupdwtmpx(tls, f, u) +} + +const ADJ_ESTERROR = 8 +const ADJ_FREQUENCY = 2 +const ADJ_MAXERROR = 4 +const ADJ_MICRO = 4096 +const ADJ_NANO = 8192 +const ADJ_OFFSET = 1 +const ADJ_OFFSET_SINGLESHOT = 32769 +const ADJ_OFFSET_SS_READ = 40961 +const ADJ_SETOFFSET = 256 +const ADJ_STATUS = 16 +const ADJ_TAI = 128 +const ADJ_TICK = 16384 +const ADJ_TIMECONST = 32 +const MAXTC = 6 +const MOD_CLKA = 32769 +const MOD_CLKB = 16384 +const MOD_ESTERROR = 8 +const MOD_FREQUENCY = 2 +const MOD_MAXERROR = 4 +const MOD_MICRO = 4096 +const MOD_NANO = 8192 +const MOD_OFFSET = 1 +const MOD_STATUS = 16 +const MOD_TAI = 128 +const MOD_TIMECONST = 32 +const STA_CLK = 32768 +const STA_CLOCKERR = 4096 +const STA_DEL = 32 +const STA_FLL = 8 +const STA_FREQHOLD = 128 +const STA_INS = 16 +const STA_MODE = 16384 +const STA_NANO = 8192 +const STA_PLL = 1 +const STA_PPSERROR = 2048 +const STA_PPSFREQ = 2 +const STA_PPSJITTER = 512 +const STA_PPSSIGNAL = 256 +const STA_PPSTIME = 4 +const STA_PPSWANDER = 1024 +const STA_RONLY = 65280 +const STA_UNSYNC = 64 +const TIME_BAD = 5 +const TIME_DEL = 2 +const TIME_ERROR = 5 +const TIME_INS = 1 +const TIME_OK = 0 +const TIME_OOP = 3 +const TIME_WAIT = 4 + +type Tntptimeval = struct { + Ftime Ttimeval + Fmaxerror int64 + Festerror int64 +} + +type Ttimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime Ttimeval + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xadjtime(tls *TLS, in uintptr, out uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v in=%v out=%v, (%v:)", tls, in, out, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var v1 Tsuseconds_t + var _ /* tx at bp+0 */ Ttimex + _ = v1 + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{} + if in != 0 { + if (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec > int64(1000) || (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec > int64(1000000000) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + (*(*Ttimex)(unsafe.Pointer(bp))).Foffset = (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec*int64(1000000) + (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec + (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes = uint32(ADJ_OFFSET_SINGLESHOT) + } + if Xadjtimex(tls, bp) < 0 { + return -int32(1) + } + if out != 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset / int64(1000000) + v1 = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset % Int64FromInt32(1000000) + (*Ttimeval)(unsafe.Pointer(out)).Ftv_usec = v1 + if v1 < 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec-- + *(*Tsuseconds_t)(unsafe.Pointer(out + 8)) += int64(1000000) + } + } + return 0 +} + +func Xadjtimex(tls *TLS, tx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx=%v, (%v:)", tls, tx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclock_adjtime(tls, CLOCK_REALTIME, tx) +} + +func Xbrk(tls *TLS, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v end=%v, (%v:)", tls, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) +} + +const VDSO_FLUSH_ICACHE_SYM = "__vdso_flush_icache" +const VDSO_FLUSH_ICACHE_VER = "LINUX_4.15" + +func _flush_icache_init(tls *TLS, start uintptr, end uintptr, flags uint64) (r int32) { + var f, old, p1 uintptr + var tmp, v2 int32 + _, _, _, _, _ = f, old, p1, tmp, v2 + p1 = X__vdsosym(tls, __ccgo_ts+322, __ccgo_ts+333) + f = p1 + // __asm__ __volatile__ ( + // + // "\n1: lr.d.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.d.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"(t), "r"(s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 28, __ccgo_ts+402) + _ = old + goto _1 +_1: + ; + if f != 0 { + v2 = (*(*func(*TLS, uintptr, uintptr, uint64) int32)(unsafe.Pointer(&struct{ uintptr }{f})))(tls, start, end, flags) + } else { + v2 = -int32(ENOSYS) + } + return v2 +} + +var _vdso_func = uintptr(0) + +func init() { + p := unsafe.Pointer(&_vdso_func) + *(*uintptr)(unsafe.Add(p, 0)) = __ccgo_fp(_flush_icache_init) +} + +func X__riscv_flush_icache(tls *TLS, start uintptr, end uintptr, flags uint64) (r1 int32) { + if __ccgo_strace { + trc("tls=%v start=%v end=%v flags=%v, (%v:)", tls, start, end, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var f uintptr + var r int32 + _, _ = f, r + f = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_vdso_func))) + if f != 0 { + r = (*(*func(*TLS, uintptr, uintptr, uint64) int32)(unsafe.Pointer(&struct{ uintptr }{f})))(tls, start, end, flags) + if !(r != 0) { + return r + } + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(Int32FromInt32(__NR_arch_specific_syscall)+Int32FromInt32(15)), int64(start), int64(end), int64(flags))))) +} + +func Xriscv_flush_icache(tls *TLS, start uintptr, end uintptr, flags uint64) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v end=%v flags=%v, (%v:)", tls, start, end, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__riscv_flush_icache(tls, start, end, flags) +} + +func Xcapset(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capset), int64(a), int64(b))))) +} + +func Xcapget(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capget), int64(a), int64(b))))) +} + +func Xchroot(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chroot), int64(path))))) +} + +type Tktimex64 = struct { + Fmodes uint32 + F__ccgo4 uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + F__ccgo44 uint32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + F__ccgo116 uint32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +type Tktimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xclock_adjtime(tls *TLS, clock_id Tclockid_t, utx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v utx=%v, (%v:)", tls, clock_id, utx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var r int32 + var _ /* ktx at bp+0 */ Tktimex + _ = r + r = -int32(ENOSYS) + if uint64(8) > uint64(8) { + *(*Tktimex)(unsafe.Pointer(bp)) = Tktimex{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: (*Ttimex)(unsafe.Pointer(utx)).Foffset, + Ffreq: (*Ttimex)(unsafe.Pointer(utx)).Ffreq, + Fmaxerror: (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror, + Festerror: (*Ttimex)(unsafe.Pointer(utx)).Festerror, + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: (*Ttimex)(unsafe.Pointer(utx)).Fconstant, + Fprecision: (*Ttimex)(unsafe.Pointer(utx)).Fprecision, + Ftolerance: (*Ttimex)(unsafe.Pointer(utx)).Ftolerance, + Ftime_sec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec, + Ftime_usec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec, + Ftick: (*Ttimex)(unsafe.Pointer(utx)).Ftick, + Fppsfreq: (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq, + Fjitter: (*Ttimex)(unsafe.Pointer(utx)).Fjitter, + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: (*Ttimex)(unsafe.Pointer(utx)).Fstabil, + Fjitcnt: (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt, + Fcalcnt: (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt, + Ferrcnt: (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt, + Fstbcnt: (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt, + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + if clock_id == CLOCK_REALTIME { + r = int32(X__syscall1(tls, int64(SYS_adjtimex), int64(bp))) + } else { + r = int32(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(bp))) + } + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex)(unsafe.Pointer(bp))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = (*(*Tktimex)(unsafe.Pointer(bp))).Foffset + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = (*(*Tktimex)(unsafe.Pointer(bp))).Ffreq + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = (*(*Tktimex)(unsafe.Pointer(bp))).Fmaxerror + (*Ttimex)(unsafe.Pointer(utx)).Festerror = (*(*Tktimex)(unsafe.Pointer(bp))).Festerror + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex)(unsafe.Pointer(bp))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = (*(*Tktimex)(unsafe.Pointer(bp))).Fconstant + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = (*(*Tktimex)(unsafe.Pointer(bp))).Fprecision + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = (*(*Tktimex)(unsafe.Pointer(bp))).Ftolerance + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_sec + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_usec + (*Ttimex)(unsafe.Pointer(utx)).Ftick = (*(*Tktimex)(unsafe.Pointer(bp))).Ftick + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = (*(*Tktimex)(unsafe.Pointer(bp))).Fppsfreq + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitter + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex)(unsafe.Pointer(bp))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = (*(*Tktimex)(unsafe.Pointer(bp))).Fstabil + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitcnt + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fcalcnt + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Ferrcnt + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fstbcnt + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex)(unsafe.Pointer(bp))).Ftai + } + return int32(X__syscall_ret(tls, uint64(r))) + } + if clock_id == CLOCK_REALTIME { + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_adjtimex), int64(utx))))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(utx))))) +} + +func Xcopy_file_range(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_copy_file_range), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +const EPOLLERR = 8 +const EPOLLET = 2147483648 +const EPOLLEXCLUSIVE = 268435456 +const EPOLLHUP = 16 +const EPOLLIN = 1 +const EPOLLMSG = 1024 +const EPOLLNVAL = 32 +const EPOLLONESHOT = 1073741824 +const EPOLLOUT = 4 +const EPOLLPRI = 2 +const EPOLLRDBAND = 128 +const EPOLLRDHUP = 8192 +const EPOLLRDNORM = 64 +const EPOLLWAKEUP = 536870912 +const EPOLLWRBAND = 512 +const EPOLLWRNORM = 256 +const EPOLL_CLOEXEC = 524288 +const EPOLL_CTL_ADD = 1 +const EPOLL_CTL_DEL = 2 +const EPOLL_CTL_MOD = 3 +const EPOLL_NONBLOCK = 2048 + +type Tfsblkcnt_t = uint64 + +type Tfsfilcnt_t = uint64 + +type _EPOLL_EVENTS = int32 + +const ___EPOLL_DUMMY = 0 + +type Tepoll_data_t = struct { + Ffd [0]int32 + Fu32 [0]Tuint32_t + Fu64 [0]Tuint64_t + Fptr uintptr +} + +type Tepoll_data = Tepoll_data_t + +type Tepoll_event = struct { + Fevents Tuint32_t + Fdata Tepoll_data_t +} + +func Xepoll_create(tls *TLS, size int32) (r int32) { + if __ccgo_strace { + trc("tls=%v size=%v, (%v:)", tls, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size <= 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return Xepoll_create1(tls, 0) +} + +func Xepoll_create1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_epoll_create1), int64(flags))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_ctl(tls *TLS, fd int32, op int32, fd2 int32, ev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v fd2=%v ev=%v, (%v:)", tls, fd, op, fd2, ev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_epoll_ctl), int64(fd), int64(op), int64(fd2), int64(ev))))) +} + +func Xepoll_pwait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32, sigs uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v sigs=%v, (%v:)", tls, fd, ev, cnt, to, sigs, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(___syscall_cp(tls, int64(SYS_epoll_pwait), int64(fd), int64(ev), int64(cnt), int64(to), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_wait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v, (%v:)", tls, fd, ev, cnt, to, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xepoll_pwait(tls, fd, ev, cnt, to, uintptr(0)) +} + +const EFD_CLOEXEC = 524288 +const EFD_NONBLOCK = 2048 +const EFD_SEMAPHORE = 1 + +type Teventfd_t = uint64 + +func Xeventfd(tls *TLS, count uint32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v count=%v flags=%v, (%v:)", tls, count, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_eventfd2), int64(count), int64(flags))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xeventfd_read(tls *TLS, fd int32, value uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v value=%v, (%v:)", tls, fd, value, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xread(tls, fd, value, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xeventfd_write(tls *TLS, fd int32, _value Teventfd_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v _value=%v, (%v:)", tls, fd, _value, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Teventfd_t)(unsafe.Pointer(bp)) = _value + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xwrite(tls, fd, bp, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xfallocate(tls *TLS, fd int32, mode int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v base=%v len1=%v, (%v:)", tls, fd, mode, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(mode), base, len1)))) +} + +const FANOTIFY_METADATA_VERSION = 3 +const FAN_ACCESS = 1 +const FAN_ACCESS_PERM = 131072 +const FAN_ALLOW = 1 +const FAN_ALL_CLASS_BITS = 12 +const FAN_ALL_EVENTS = 59 +const FAN_ALL_INIT_FLAGS = 63 +const FAN_ALL_MARK_FLAGS = 255 +const FAN_ALL_OUTGOING_EVENTS = 213051 +const FAN_ALL_PERM_EVENTS = 196608 +const FAN_ATTRIB = 4 +const FAN_AUDIT = 16 +const FAN_CLASS_CONTENT = 4 +const FAN_CLASS_NOTIF = 0 +const FAN_CLASS_PRE_CONTENT = 8 +const FAN_CLOEXEC = 1 +const FAN_CLOSE = 24 +const FAN_CLOSE_NOWRITE = 16 +const FAN_CLOSE_WRITE = 8 +const FAN_CREATE = 256 +const FAN_DELETE = 512 +const FAN_DELETE_SELF = 1024 +const FAN_DENY = 2 +const FAN_DIR_MODIFY = 524288 +const FAN_ENABLE_AUDIT = 64 +const FAN_EVENT_INFO_TYPE_DFID = 3 +const FAN_EVENT_INFO_TYPE_DFID_NAME = 2 +const FAN_EVENT_INFO_TYPE_FID = 1 +const FAN_EVENT_METADATA_LEN = 0 +const FAN_EVENT_ON_CHILD = 134217728 +const FAN_MARK_ADD = 1 +const FAN_MARK_DONT_FOLLOW = 4 +const FAN_MARK_FILESYSTEM = 256 +const FAN_MARK_FLUSH = 128 +const FAN_MARK_IGNORED_MASK = 32 +const FAN_MARK_IGNORED_SURV_MODIFY = 64 +const FAN_MARK_INODE = 0 +const FAN_MARK_MOUNT = 16 +const FAN_MARK_ONLYDIR = 8 +const FAN_MARK_REMOVE = 2 +const FAN_MARK_TYPE_MASK = 272 +const FAN_MODIFY = 2 +const FAN_MOVE = 192 +const FAN_MOVED_FROM = 64 +const FAN_MOVED_TO = 128 +const FAN_MOVE_SELF = 2048 +const FAN_NOFD = -1 +const FAN_NONBLOCK = 2 +const FAN_ONDIR = 1073741824 +const FAN_OPEN = 32 +const FAN_OPEN_EXEC = 4096 +const FAN_OPEN_EXEC_PERM = 262144 +const FAN_OPEN_PERM = 65536 +const FAN_Q_OVERFLOW = 16384 +const FAN_REPORT_DFID_NAME = 3072 +const FAN_REPORT_DIR_FID = 1024 +const FAN_REPORT_FID = 512 +const FAN_REPORT_NAME = 2048 +const FAN_REPORT_TID = 256 +const FAN_UNLIMITED_MARKS = 32 +const FAN_UNLIMITED_QUEUE = 16 +const ST_APPEND = 256 +const ST_IMMUTABLE = 512 +const ST_MANDLOCK = 64 +const ST_NOATIME = 1024 +const ST_NODEV = 4 +const ST_NODIRATIME = 2048 +const ST_NOEXEC = 8 +const ST_NOSUID = 2 +const ST_RDONLY = 1 +const ST_RELATIME = 4096 +const ST_SYNCHRONOUS = 16 +const ST_WRITE = 128 + +type Tstatvfs = struct { + Ff_bsize uint64 + Ff_frsize uint64 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_favail Tfsfilcnt_t + Ff_fsid uint64 + Ff_flag uint64 + Ff_namemax uint64 + Ff_type uint32 + F__reserved [5]int32 +} + +type Tfsid_t = struct { + F__val [2]int32 +} + +type t__fsid_t = Tfsid_t + +type Tstatfs = struct { + Ff_type uint64 + Ff_bsize uint64 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_fsid Tfsid_t + Ff_namelen uint64 + Ff_frsize uint64 + Ff_flags uint64 + Ff_spare [4]uint64 +} + +type Tfanotify_event_metadata = struct { + Fevent_len uint32 + Fvers uint8 + Freserved uint8 + Fmetadata_len uint16 + Fmask uint64 + Ffd int32 + Fpid int32 +} + +type Tfanotify_event_info_header = struct { + Finfo_type uint8 + Fpad uint8 + Flen1 uint16 +} + +type Tfanotify_event_info_fid = struct { + Fhdr Tfanotify_event_info_header + Ffsid Tfsid_t +} + +type Tfanotify_response = struct { + Ffd int32 + Fresponse uint32 +} + +func Xfanotify_init(tls *TLS, flags uint32, event_f_flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v event_f_flags=%v, (%v:)", tls, flags, event_f_flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fanotify_init), int64(flags), int64(event_f_flags))))) +} + +func Xfanotify_mark(tls *TLS, fanotify_fd int32, flags uint32, mask uint64, dfd int32, pathname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fanotify_fd=%v flags=%v mask=%v dfd=%v pathname=%v, (%v:)", tls, fanotify_fd, flags, mask, dfd, pathname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fanotify_mark), int64(fanotify_fd), int64(flags), int64(mask), int64(dfd), int64(pathname))))) +} + +const LOCK_EX = 2 +const LOCK_NB = 4 +const LOCK_SH = 1 +const LOCK_UN = 8 + +func Xflock(tls *TLS, fd int32, op int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v, (%v:)", tls, fd, op, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_flock), int64(fd), int64(op))))) +} + +func Xgetdents(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + if len1 > uint64(INT_MAX) { + len1 = uint64(INT_MAX) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getdents64), int64(fd), int64(buf), int64(len1))))) +} + +const GRND_INSECURE = 4 +const GRND_NONBLOCK = 1 +const GRND_RANDOM = 2 + +func Xgetrandom(tls *TLS, buf uintptr, buflen Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v buf=%v buflen=%v flags=%v, (%v:)", tls, buf, buflen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_getrandom), int64(buf), int64(buflen), int64(flags), 0, 0, 0))) +} + +const IN_ACCESS = 1 +const IN_ALL_EVENTS = 4095 +const IN_ATTRIB = 4 +const IN_CLOEXEC = 524288 +const IN_CLOSE = 24 +const IN_CLOSE_NOWRITE = 16 +const IN_CLOSE_WRITE = 8 +const IN_CREATE = 256 +const IN_DELETE = 512 +const IN_DELETE_SELF = 1024 +const IN_DONT_FOLLOW = 33554432 +const IN_EXCL_UNLINK = 67108864 +const IN_IGNORED = 32768 +const IN_ISDIR = 1073741824 +const IN_MASK_ADD = 536870912 +const IN_MASK_CREATE = 268435456 +const IN_MODIFY = 2 +const IN_MOVE = 192 +const IN_MOVED_FROM = 64 +const IN_MOVED_TO = 128 +const IN_MOVE_SELF = 2048 +const IN_NONBLOCK = 2048 +const IN_ONESHOT = 2147483648 +const IN_ONLYDIR = 16777216 +const IN_OPEN = 32 +const IN_Q_OVERFLOW = 16384 +const IN_UNMOUNT = 8192 + +type Tinotify_event = struct { + Fwd int32 + Fmask Tuint32_t + Fcookie Tuint32_t + Flen1 Tuint32_t +} + +func Xinotify_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xinotify_init1(tls, 0) +} + +func Xinotify_init1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_inotify_init1), int64(flags))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xinotify_add_watch(tls *TLS, fd int32, pathname uintptr, mask Tuint32_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pathname=%v mask=%v, (%v:)", tls, fd, pathname, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_inotify_add_watch), int64(fd), int64(pathname), int64(mask))))) +} + +func Xinotify_rm_watch(tls *TLS, fd int32, wd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wd=%v, (%v:)", tls, fd, wd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_inotify_rm_watch), int64(fd), int64(wd))))) +} + +func Xklogctl(tls *TLS, type1 int32, buf uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v buf=%v len1=%v, (%v:)", tls, type1, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_syslog), int64(type1), int64(buf), int64(len1))))) +} + +const MADV_COLD = 20 +const MADV_DODUMP = 17 +const MADV_DOFORK = 11 +const MADV_DONTDUMP = 16 +const MADV_DONTFORK = 10 +const MADV_DONTNEED = 4 +const MADV_FREE = 8 +const MADV_HUGEPAGE = 14 +const MADV_HWPOISON = 100 +const MADV_KEEPONFORK = 19 +const MADV_MERGEABLE = 12 +const MADV_NOHUGEPAGE = 15 +const MADV_NORMAL = 0 +const MADV_PAGEOUT = 21 +const MADV_RANDOM = 1 +const MADV_REMOVE = 9 +const MADV_SEQUENTIAL = 2 +const MADV_SOFT_OFFLINE = 101 +const MADV_UNMERGEABLE = 13 +const MADV_WILLNEED = 3 +const MADV_WIPEONFORK = 18 +const MFD_ALLOW_SEALING = 2 +const MFD_CLOEXEC = 1 +const MFD_HUGETLB = 4 +const MLOCK_ONFAULT = 1 +const MREMAP_DONTUNMAP = 4 +const MREMAP_FIXED = 2 +const MREMAP_MAYMOVE = 1 +const _GNU_SOURCE = 1 + +func Xmemfd_create(tls *TLS, name uintptr, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flags=%v, (%v:)", tls, name, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_memfd_create), int64(name), int64(flags))))) +} + +func Xmlock2(tls *TLS, addr uintptr, len1 Tsize_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v flags=%v, (%v:)", tls, addr, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if flags == uint32(0) { + return Xmlock(tls, addr, len1) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mlock2), int64(addr), int64(len1), int64(flags))))) +} + +func Xinit_module(tls *TLS, a uintptr, b uint64, c uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v, (%v:)", tls, a, b, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_init_module), int64(a), int64(b), int64(c))))) +} + +func Xdelete_module(tls *TLS, a uintptr, b uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_delete_module), int64(a), int64(b))))) +} + +const BLKBSZGET = 2147488368 +const BLKBSZSET = 1073746545 +const BLKFLSBUF = 4705 +const BLKFRAGET = 4709 +const BLKFRASET = 4708 +const BLKGETSIZE = 4704 +const BLKGETSIZE64 = 2147488370 +const BLKRAGET = 4707 +const BLKRASET = 4706 +const BLKROGET = 4702 +const BLKROSET = 4701 +const BLKRRPART = 4703 +const BLKSECTGET = 4711 +const BLKSECTSET = 4710 +const BLKSSZGET = 4712 +const FIOASYNC = 21586 +const FIOCLEX = 21585 +const FIOGETOWN = 35075 +const FIONBIO = 21537 +const FIONCLEX = 21584 +const FIONREAD = 21531 +const FIOQSIZE = 21600 +const FIOSETOWN = 35073 +const MNT_DETACH = 2 +const MNT_EXPIRE = 4 +const MNT_FORCE = 1 +const MS_ACTIVE = 1073741824 +const MS_BIND = 4096 +const MS_BORN = 536870912 +const MS_DIRSYNC = 128 +const MS_I_VERSION = 8388608 +const MS_KERNMOUNT = 4194304 +const MS_LAZYTIME = 33554432 +const MS_MANDLOCK = 64 +const MS_MGC_MSK = 4294901760 +const MS_MGC_VAL = 3236757504 +const MS_MOVE = 8192 +const MS_NOATIME = 1024 +const MS_NODEV = 4 +const MS_NODIRATIME = 2048 +const MS_NOEXEC = 8 +const MS_NOREMOTELOCK = 134217728 +const MS_NOSEC = 268435456 +const MS_NOSUID = 2 +const MS_NOSYMFOLLOW = 256 +const MS_NOUSER = 2147483648 +const MS_POSIXACL = 65536 +const MS_PRIVATE = 262144 +const MS_RDONLY = 1 +const MS_REC = 16384 +const MS_RELATIME = 2097152 +const MS_REMOUNT = 32 +const MS_RMT_MASK = 41943121 +const MS_SHARED = 1048576 +const MS_SILENT = 32768 +const MS_SLAVE = 524288 +const MS_STRICTATIME = 16777216 +const MS_SYNCHRONOUS = 16 +const MS_UNBINDABLE = 131072 +const N_6PACK = 7 +const N_AX25 = 5 +const N_CAIF = 20 +const N_GIGASET_M101 = 16 +const N_GSM0710 = 21 +const N_HCI = 15 +const N_HDLC = 13 +const N_IRDA = 11 +const N_MASC = 8 +const N_MOUSE = 2 +const N_NCI = 25 +const N_NULL = 27 +const N_PPP = 3 +const N_PPS = 18 +const N_PROFIBUS_FDL = 10 +const N_R3964 = 9 +const N_SLCAN = 17 +const N_SLIP = 1 +const N_SMSBLOCK = 12 +const N_SPEAKUP = 26 +const N_STRIP = 4 +const N_SYNC_PPP = 14 +const N_TI_WL = 22 +const N_TRACEROUTER = 24 +const N_TRACESINK = 23 +const N_TTY = 0 +const N_V253 = 19 +const N_X25 = 6 +const SIOCADDDLCI = 35200 +const SIOCADDMULTI = 35121 +const SIOCADDRT = 35083 +const SIOCATMARK = 35077 +const SIOCDARP = 35155 +const SIOCDELDLCI = 35201 +const SIOCDELMULTI = 35122 +const SIOCDELRT = 35084 +const SIOCDEVPRIVATE = 35312 +const SIOCDIFADDR = 35126 +const SIOCDRARP = 35168 +const SIOCGARP = 35156 +const SIOCGIFADDR = 35093 +const SIOCGIFBR = 35136 +const SIOCGIFBRDADDR = 35097 +const SIOCGIFCONF = 35090 +const SIOCGIFCOUNT = 35128 +const SIOCGIFDSTADDR = 35095 +const SIOCGIFENCAP = 35109 +const SIOCGIFFLAGS = 35091 +const SIOCGIFHWADDR = 35111 +const SIOCGIFINDEX = 35123 +const SIOCGIFMAP = 35184 +const SIOCGIFMEM = 35103 +const SIOCGIFMETRIC = 35101 +const SIOCGIFMTU = 35105 +const SIOCGIFNAME = 35088 +const SIOCGIFNETMASK = 35099 +const SIOCGIFPFLAGS = 35125 +const SIOCGIFSLAVE = 35113 +const SIOCGIFTXQLEN = 35138 +const SIOCGPGRP = 35076 +const SIOCGRARP = 35169 +const SIOCGSTAMP = 35078 +const SIOCGSTAMPNS = 35079 +const SIOCPROTOPRIVATE = 35296 +const SIOCRTMSG = 35085 +const SIOCSARP = 35157 +const SIOCSIFADDR = 35094 +const SIOCSIFBR = 35137 +const SIOCSIFBRDADDR = 35098 +const SIOCSIFDSTADDR = 35096 +const SIOCSIFENCAP = 35110 +const SIOCSIFFLAGS = 35092 +const SIOCSIFHWADDR = 35108 +const SIOCSIFHWBROADCAST = 35127 +const SIOCSIFLINK = 35089 +const SIOCSIFMAP = 35185 +const SIOCSIFMEM = 35104 +const SIOCSIFMETRIC = 35102 +const SIOCSIFMTU = 35106 +const SIOCSIFNAME = 35107 +const SIOCSIFNETMASK = 35100 +const SIOCSIFPFLAGS = 35124 +const SIOCSIFSLAVE = 35120 +const SIOCSIFTXQLEN = 35139 +const SIOCSPGRP = 35074 +const SIOCSRARP = 35170 +const SIOGIFINDEX = 35123 +const TCFLSH = 21515 +const TCGETA = 21509 +const TCGETS = 21505 +const TCGETX = 21554 +const TCSBRK = 21513 +const TCSBRKP = 21541 +const TCSETA = 21510 +const TCSETAF = 21512 +const TCSETAW = 21511 +const TCSETS = 21506 +const TCSETSF = 21508 +const TCSETSW = 21507 +const TCSETX = 21555 +const TCSETXF = 21556 +const TCSETXW = 21557 +const TCXONC = 21514 +const TIOCCBRK = 21544 +const TIOCCONS = 21533 +const TIOCEXCL = 21516 +const TIOCGDEV = 2147767346 +const TIOCGETD = 21540 +const TIOCGEXCL = 2147767360 +const TIOCGICOUNT = 21597 +const TIOCGISO7816 = 2150126658 +const TIOCGLCKTRMIOS = 21590 +const TIOCGPGRP = 21519 +const TIOCGPKT = 2147767352 +const TIOCGPTLCK = 2147767353 +const TIOCGPTN = 2147767344 +const TIOCGPTPEER = 21569 +const TIOCGRS485 = 21550 +const TIOCGSERIAL = 21534 +const TIOCGSID = 21545 +const TIOCGSOFTCAR = 21529 +const TIOCGWINSZ = 21523 +const TIOCINQ = 21531 +const TIOCLINUX = 21532 +const TIOCMBIC = 21527 +const TIOCMBIS = 21526 +const TIOCMGET = 21525 +const TIOCMIWAIT = 21596 +const TIOCMSET = 21528 +const TIOCM_CAR = 64 +const TIOCM_CD = 64 +const TIOCM_CTS = 32 +const TIOCM_DSR = 256 +const TIOCM_DTR = 2 +const TIOCM_LE = 1 +const TIOCM_LOOP = 32768 +const TIOCM_OUT1 = 8192 +const TIOCM_OUT2 = 16384 +const TIOCM_RI = 128 +const TIOCM_RNG = 128 +const TIOCM_RTS = 4 +const TIOCM_SR = 16 +const TIOCM_ST = 8 +const TIOCNOTTY = 21538 +const TIOCNXCL = 21517 +const TIOCOUTQ = 21521 +const TIOCPKT = 21536 +const TIOCPKT_DATA = 0 +const TIOCPKT_DOSTOP = 32 +const TIOCPKT_FLUSHREAD = 1 +const TIOCPKT_FLUSHWRITE = 2 +const TIOCPKT_IOCTL = 64 +const TIOCPKT_NOSTOP = 16 +const TIOCPKT_START = 8 +const TIOCPKT_STOP = 4 +const TIOCSBRK = 21543 +const TIOCSCTTY = 21518 +const TIOCSERCONFIG = 21587 +const TIOCSERGETLSR = 21593 +const TIOCSERGETMULTI = 21594 +const TIOCSERGSTRUCT = 21592 +const TIOCSERGWILD = 21588 +const TIOCSERSETMULTI = 21595 +const TIOCSERSWILD = 21589 +const TIOCSER_TEMT = 1 +const TIOCSETD = 21539 +const TIOCSIG = 1074025526 +const TIOCSISO7816 = 3223868483 +const TIOCSLCKTRMIOS = 21591 +const TIOCSPGRP = 21520 +const TIOCSPTLCK = 1074025521 +const TIOCSRS485 = 21551 +const TIOCSSERIAL = 21535 +const TIOCSSOFTCAR = 21530 +const TIOCSTI = 21522 +const TIOCSWINSZ = 21524 +const TIOCVHANGUP = 21559 +const UMOUNT_NOFOLLOW = 8 +const _IOC_NONE = 0 +const _IOC_READ = 2 +const _IOC_WRITE = 1 + +func Xmount(tls *TLS, special uintptr, dir uintptr, fstype uintptr, flags uint64, data uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v dir=%v fstype=%v flags=%v data=%v, (%v:)", tls, special, dir, fstype, flags, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mount), int64(special), int64(dir), int64(fstype), int64(flags), int64(data))))) +} + +func Xumount(tls *TLS, special uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v, (%v:)", tls, special, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(Int32FromInt32(0)))))) +} + +func Xumount2(tls *TLS, special uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v flags=%v, (%v:)", tls, special, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(flags))))) +} + +func Xname_to_handle_at(tls *TLS, dirfd int32, pathname uintptr, handle uintptr, mount_id uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v handle=%v mount_id=%v flags=%v, (%v:)", tls, dirfd, pathname, handle, mount_id, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_name_to_handle_at), int64(dirfd), int64(pathname), int64(handle), int64(mount_id), int64(flags))))) +} + +func Xopen_by_handle_at(tls *TLS, mount_fd int32, handle uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mount_fd=%v handle=%v flags=%v, (%v:)", tls, mount_fd, handle, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open_by_handle_at), int64(mount_fd), int64(handle), int64(flags))))) +} + +const ADDR_COMPAT_LAYOUT = 2097152 +const ADDR_LIMIT_32BIT = 8388608 +const ADDR_LIMIT_3GB = 134217728 +const ADDR_NO_RANDOMIZE = 262144 +const FDPIC_FUNCPTRS = 524288 +const MMAP_PAGE_ZERO = 1048576 +const PER_BSD = 6 +const PER_HPUX = 16 +const PER_IRIX32 = 67108873 +const PER_IRIX64 = 67108875 +const PER_IRIXN32 = 67108874 +const PER_ISCR4 = 67108869 +const PER_LINUX = 0 +const PER_LINUX32 = 8 +const PER_LINUX32_3GB = 134217736 +const PER_LINUX_32BIT = 8388608 +const PER_LINUX_FDPIC = 524288 +const PER_MASK = 255 +const PER_OSF4 = 15 +const PER_OSR5 = 100663299 +const PER_RISCOS = 12 +const PER_SCOSVR3 = 117440515 +const PER_SOLARIS = 67108877 +const PER_SUNOS = 67108870 +const PER_SVR3 = 83886082 +const PER_SVR4 = 68157441 +const PER_UW7 = 68157454 +const PER_WYSEV386 = 83886084 +const PER_XENIX = 83886087 +const READ_IMPLIES_EXEC = 4194304 +const SHORT_INODE = 16777216 +const STICKY_TIMEOUTS = 67108864 +const UNAME26 = 131072 +const WHOLE_SECONDS = 33554432 + +func Xpersonality(tls *TLS, persona uint64) (r int32) { + if __ccgo_strace { + trc("tls=%v persona=%v, (%v:)", tls, persona, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_personality), int64(persona))))) +} + +func Xpivot_root(tls *TLS, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v new1=%v old=%v, (%v:)", tls, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_pivot_root), int64(new1), int64(old))))) +} + +const PR_CAPBSET_DROP = 24 +const PR_CAPBSET_READ = 23 +const PR_CAP_AMBIENT = 47 +const PR_CAP_AMBIENT_CLEAR_ALL = 4 +const PR_CAP_AMBIENT_IS_SET = 1 +const PR_CAP_AMBIENT_LOWER = 3 +const PR_CAP_AMBIENT_RAISE = 2 +const PR_ENDIAN_BIG = 0 +const PR_ENDIAN_LITTLE = 1 +const PR_ENDIAN_PPC_LITTLE = 2 +const PR_FPEMU_NOPRINT = 1 +const PR_FPEMU_SIGFPE = 2 +const PR_FP_EXC_ASYNC = 2 +const PR_FP_EXC_DISABLED = 0 +const PR_FP_EXC_DIV = 65536 +const PR_FP_EXC_INV = 1048576 +const PR_FP_EXC_NONRECOV = 1 +const PR_FP_EXC_OVF = 131072 +const PR_FP_EXC_PRECISE = 3 +const PR_FP_EXC_RES = 524288 +const PR_FP_EXC_SW_ENABLE = 128 +const PR_FP_EXC_UND = 262144 +const PR_FP_MODE_FR = 1 +const PR_FP_MODE_FRE = 2 +const PR_GET_CHILD_SUBREAPER = 37 +const PR_GET_DUMPABLE = 3 +const PR_GET_ENDIAN = 19 +const PR_GET_FPEMU = 9 +const PR_GET_FPEXC = 11 +const PR_GET_FP_MODE = 46 +const PR_GET_IO_FLUSHER = 58 +const PR_GET_KEEPCAPS = 7 +const PR_GET_NAME = 16 +const PR_GET_NO_NEW_PRIVS = 39 +const PR_GET_PDEATHSIG = 2 +const PR_GET_SECCOMP = 21 +const PR_GET_SECUREBITS = 27 +const PR_GET_SPECULATION_CTRL = 52 +const PR_GET_TAGGED_ADDR_CTRL = 56 +const PR_GET_THP_DISABLE = 42 +const PR_GET_TID_ADDRESS = 40 +const PR_GET_TIMERSLACK = 30 +const PR_GET_TIMING = 13 +const PR_GET_TSC = 25 +const PR_GET_UNALIGN = 5 +const PR_MCE_KILL = 33 +const PR_MCE_KILL_CLEAR = 0 +const PR_MCE_KILL_DEFAULT = 2 +const PR_MCE_KILL_EARLY = 1 +const PR_MCE_KILL_GET = 34 +const PR_MCE_KILL_LATE = 0 +const PR_MCE_KILL_SET = 1 +const PR_MPX_DISABLE_MANAGEMENT = 44 +const PR_MPX_ENABLE_MANAGEMENT = 43 +const PR_MTE_TAG_MASK = 524280 +const PR_MTE_TAG_SHIFT = 3 +const PR_MTE_TCF_ASYNC = 4 +const PR_MTE_TCF_MASK = 6 +const PR_MTE_TCF_NONE = 0 +const PR_MTE_TCF_SHIFT = 1 +const PR_MTE_TCF_SYNC = 2 +const PR_PAC_APDAKEY = 4 +const PR_PAC_APDBKEY = 8 +const PR_PAC_APGAKEY = 16 +const PR_PAC_APIAKEY = 1 +const PR_PAC_APIBKEY = 2 +const PR_PAC_GET_ENABLED_KEYS = 61 +const PR_PAC_RESET_KEYS = 54 +const PR_PAC_SET_ENABLED_KEYS = 60 +const PR_SET_CHILD_SUBREAPER = 36 +const PR_SET_DUMPABLE = 4 +const PR_SET_ENDIAN = 20 +const PR_SET_FPEMU = 10 +const PR_SET_FPEXC = 12 +const PR_SET_FP_MODE = 45 +const PR_SET_IO_FLUSHER = 57 +const PR_SET_KEEPCAPS = 8 +const PR_SET_MM = 35 +const PR_SET_MM_ARG_END = 9 +const PR_SET_MM_ARG_START = 8 +const PR_SET_MM_AUXV = 12 +const PR_SET_MM_BRK = 7 +const PR_SET_MM_END_CODE = 2 +const PR_SET_MM_END_DATA = 4 +const PR_SET_MM_ENV_END = 11 +const PR_SET_MM_ENV_START = 10 +const PR_SET_MM_EXE_FILE = 13 +const PR_SET_MM_MAP = 14 +const PR_SET_MM_MAP_SIZE = 15 +const PR_SET_MM_START_BRK = 6 +const PR_SET_MM_START_CODE = 1 +const PR_SET_MM_START_DATA = 3 +const PR_SET_MM_START_STACK = 5 +const PR_SET_NAME = 15 +const PR_SET_NO_NEW_PRIVS = 38 +const PR_SET_PDEATHSIG = 1 +const PR_SET_PTRACER = 1499557217 +const PR_SET_PTRACER_ANY = 18446744073709551615 +const PR_SET_SECCOMP = 22 +const PR_SET_SECUREBITS = 28 +const PR_SET_SPECULATION_CTRL = 53 +const PR_SET_SYSCALL_USER_DISPATCH = 59 +const PR_SET_TAGGED_ADDR_CTRL = 55 +const PR_SET_THP_DISABLE = 41 +const PR_SET_TIMERSLACK = 29 +const PR_SET_TIMING = 14 +const PR_SET_TSC = 26 +const PR_SET_UNALIGN = 6 +const PR_SPEC_DISABLE = 4 +const PR_SPEC_DISABLE_NOEXEC = 16 +const PR_SPEC_ENABLE = 2 +const PR_SPEC_FORCE_DISABLE = 8 +const PR_SPEC_INDIRECT_BRANCH = 1 +const PR_SPEC_NOT_AFFECTED = 0 +const PR_SPEC_PRCTL = 1 +const PR_SPEC_STORE_BYPASS = 0 +const PR_SVE_GET_VL = 51 +const PR_SVE_SET_VL = 50 +const PR_SVE_SET_VL_ONEXEC = 262144 +const PR_SVE_VL_INHERIT = 131072 +const PR_SVE_VL_LEN_MASK = 65535 +const PR_SYS_DISPATCH_OFF = 0 +const PR_SYS_DISPATCH_ON = 1 +const PR_TAGGED_ADDR_ENABLE = 1 +const PR_TASK_PERF_EVENTS_DISABLE = 31 +const PR_TASK_PERF_EVENTS_ENABLE = 32 +const PR_TIMING_STATISTICAL = 0 +const PR_TIMING_TIMESTAMP = 1 +const PR_TSC_ENABLE = 1 +const PR_TSC_SIGSEGV = 2 +const PR_UNALIGN_NOPRINT = 1 +const PR_UNALIGN_SIGBUS = 2 +const SYSCALL_DISPATCH_FILTER_ALLOW = 0 +const SYSCALL_DISPATCH_FILTER_BLOCK = 1 + +type Tprctl_mm_map = struct { + Fstart_code Tuint64_t + Fend_code Tuint64_t + Fstart_data Tuint64_t + Fend_data Tuint64_t + Fstart_brk Tuint64_t + Fbrk Tuint64_t + Fstart_stack Tuint64_t + Farg_start Tuint64_t + Farg_end Tuint64_t + Fenv_start Tuint64_t + Fenv_end Tuint64_t + Fauxv uintptr + Fauxv_size Tuint32_t + Fexe_fd Tuint32_t +} + +func Xprctl(tls *TLS, op int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v va=%v, (%v:)", tls, op, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var i int32 + var x [4]uint64 + _, _, _ = ap, i, x + ap = va + i = 0 + for { + if !(i < int32(4)) { + break + } + x[i] = VaUint64(&ap) + goto _1 + _1: + ; + i++ + } + _ = ap + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_prctl), int64(op), int64(x[0]), int64(x[int32(1)]), int64(x[int32(2)]), int64(x[int32(3)]))))) +} + +const RWF_APPEND = 16 +const RWF_DSYNC = 2 +const RWF_HIPRI = 1 +const RWF_NOWAIT = 8 +const RWF_SYNC = 4 +const UIO_MAXIOV = 1024 + +func Xpreadv2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xreadv(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +func Xprlimit(tls *TLS, pid Tpid_t, resource int32, new_limit uintptr, old_limit uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v resource=%v new_limit=%v old_limit=%v, (%v:)", tls, pid, resource, new_limit, old_limit, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tmp at bp+0 */ Trlimit + _ = r + if new_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(new_limit)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + new_limit = bp + } + r = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(pid), int64(resource), int64(new_limit), int64(old_limit))))) + if !(r != 0) && old_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max = ^Uint64FromUint64(0) + } + } + return r +} + +func Xprocess_vm_writev(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_writev), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +func Xprocess_vm_readv(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_readv), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +const PTRACE_ATTACH = 16 +const PTRACE_CONT = 7 +const PTRACE_DETACH = 17 +const PTRACE_EVENT_CLONE = 3 +const PTRACE_EVENT_EXEC = 4 +const PTRACE_EVENT_EXIT = 6 +const PTRACE_EVENT_FORK = 1 +const PTRACE_EVENT_SECCOMP = 7 +const PTRACE_EVENT_STOP = 128 +const PTRACE_EVENT_VFORK = 2 +const PTRACE_EVENT_VFORK_DONE = 5 +const PTRACE_GETEVENTMSG = 16897 +const PTRACE_GETFPREGS = 14 +const PTRACE_GETFPXREGS = 18 +const PTRACE_GETREGS = 12 +const PTRACE_GETREGSET = 16900 +const PTRACE_GETSIGINFO = 16898 +const PTRACE_GETSIGMASK = 16906 +const PTRACE_GET_RSEQ_CONFIGURATION = 16911 +const PTRACE_GET_SYSCALL_INFO = 16910 +const PTRACE_INTERRUPT = 16903 +const PTRACE_KILL = 8 +const PTRACE_LISTEN = 16904 +const PTRACE_O_EXITKILL = 1048576 +const PTRACE_O_MASK = 3145983 +const PTRACE_O_SUSPEND_SECCOMP = 2097152 +const PTRACE_O_TRACECLONE = 8 +const PTRACE_O_TRACEEXEC = 16 +const PTRACE_O_TRACEEXIT = 64 +const PTRACE_O_TRACEFORK = 2 +const PTRACE_O_TRACESECCOMP = 128 +const PTRACE_O_TRACESYSGOOD = 1 +const PTRACE_O_TRACEVFORK = 4 +const PTRACE_O_TRACEVFORKDONE = 32 +const PTRACE_PEEKDATA = 2 +const PTRACE_PEEKSIGINFO = 16905 +const PTRACE_PEEKSIGINFO_SHARED = 1 +const PTRACE_PEEKTEXT = 1 +const PTRACE_PEEKUSER = 3 +const PTRACE_POKEDATA = 5 +const PTRACE_POKETEXT = 4 +const PTRACE_POKEUSER = 6 +const PTRACE_SECCOMP_GET_FILTER = 16908 +const PTRACE_SECCOMP_GET_METADATA = 16909 +const PTRACE_SEIZE = 16902 +const PTRACE_SETFPREGS = 15 +const PTRACE_SETFPXREGS = 19 +const PTRACE_SETOPTIONS = 16896 +const PTRACE_SETREGS = 13 +const PTRACE_SETREGSET = 16901 +const PTRACE_SETSIGINFO = 16899 +const PTRACE_SETSIGMASK = 16907 +const PTRACE_SINGLESTEP = 9 +const PTRACE_SYSCALL = 24 +const PTRACE_SYSCALL_INFO_ENTRY = 1 +const PTRACE_SYSCALL_INFO_EXIT = 2 +const PTRACE_SYSCALL_INFO_NONE = 0 +const PTRACE_SYSCALL_INFO_SECCOMP = 3 +const PTRACE_TRACEME = 0 +const PT_ATTACH = 16 +const PT_CONTINUE = 7 +const PT_DETACH = 17 +const PT_GETEVENTMSG = 16897 +const PT_GETFPREGS = 14 +const PT_GETFPXREGS = 18 +const PT_GETREGS = 12 +const PT_GETSIGINFO = 16898 +const PT_KILL = 8 +const PT_READ_D = 2 +const PT_READ_I = 1 +const PT_READ_U = 3 +const PT_SETFPREGS = 15 +const PT_SETFPXREGS = 19 +const PT_SETOPTIONS = 16896 +const PT_SETREGS = 13 +const PT_SETSIGINFO = 16899 +const PT_STEP = 9 +const PT_SYSCALL = 24 +const PT_TRACE_ME = 0 +const PT_WRITE_D = 5 +const PT_WRITE_I = 4 +const PT_WRITE_U = 6 + +type t__ptrace_peeksiginfo_args = struct { + Foff Tuint64_t + Fflags Tuint32_t + Fnr Tint32_t +} + +type t__ptrace_seccomp_metadata = struct { + Ffilter_off Tuint64_t + Fflags Tuint64_t +} + +type t__ptrace_syscall_info = struct { + Fop Tuint8_t + F__pad [3]Tuint8_t + Farch Tuint32_t + Finstruction_pointer Tuint64_t + Fstack_pointer Tuint64_t + F__ccgo5_24 struct { + Fexit [0]struct { + Frval Tint64_t + Fis_error Tuint8_t + } + Fseccomp [0]struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + Fret_data Tuint32_t + } + Fentry struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + } + F__ccgo_pad3 [8]byte + } +} + +type t__ptrace_rseq_configuration = struct { + Frseq_abi_pointer Tuint64_t + Frseq_abi_size Tuint32_t + Fsignature Tuint32_t + Fflags Tuint32_t + Fpad Tuint32_t +} + +func Xptrace(tls *TLS, req int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v req=%v va=%v, (%v:)", tls, req, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var addr, addr2, data uintptr + var ap Tva_list + var pid Tpid_t + var ret int64 + var _ /* result at bp+0 */ int64 + _, _, _, _, _, _ = addr, addr2, ap, data, pid, ret + addr2 = uintptr(0) + ap = va + pid = VaInt32(&ap) + addr = VaUintptr(&ap) + data = VaUintptr(&ap) + /* PTRACE_{READ,WRITE}{DATA,TEXT} (16...19) are specific to SPARC. */ + _ = ap + if uint32(req)-uint32(1) < uint32(3) { + data = bp + } + ret = X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ptrace), int64(req), int64(pid), int64(addr), int64(data), int64(addr2)))) + if ret < 0 || uint32(req)-uint32(1) >= uint32(3) { + return ret + } + return *(*int64)(unsafe.Pointer(bp)) +} + +func Xpwritev2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xwritev(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +const GRPQUOTA = 1 +const IIF_ALL = 7 +const IIF_BGRACE = 1 +const IIF_FLAGS = 4 +const IIF_IGRACE = 2 +const MAXQUOTAS = 2 +const MAX_DQ_TIME = 604800 +const MAX_IQ_TIME = 604800 +const NR_DQHASH = 43 +const NR_DQUOTS = 256 +const QFMT_OCFS2 = 3 +const QFMT_VFS_OLD = 1 +const QFMT_VFS_V0 = 2 +const QFMT_VFS_V1 = 4 +const QIF_ALL = 63 +const QIF_BLIMITS = 1 +const QIF_BTIME = 16 +const QIF_ILIMITS = 4 +const QIF_INODES = 8 +const QIF_ITIME = 32 +const QIF_LIMITS = 5 +const QIF_SPACE = 2 +const QIF_TIMES = 48 +const QIF_USAGE = 10 +const QUOTAFILENAME = "quota" +const QUOTAGROUP = "staff" +const Q_GETFMT = 8388612 +const Q_GETINFO = 8388613 +const Q_GETQUOTA = 8388615 +const Q_QUOTAOFF = 8388611 +const Q_QUOTAON = 8388610 +const Q_SETINFO = 8388614 +const Q_SETQUOTA = 8388616 +const Q_SYNC = 8388609 +const SUBCMDMASK = 255 +const SUBCMDSHIFT = 8 +const USRQUOTA = 0 +const _LINUX_QUOTA_VERSION = 2 + +type Tdqblk = struct { + Fdqb_bhardlimit Tuint64_t + Fdqb_bsoftlimit Tuint64_t + Fdqb_curspace Tuint64_t + Fdqb_ihardlimit Tuint64_t + Fdqb_isoftlimit Tuint64_t + Fdqb_curinodes Tuint64_t + Fdqb_btime Tuint64_t + Fdqb_itime Tuint64_t + Fdqb_valid Tuint32_t +} + +type Tdqinfo = struct { + Fdqi_bgrace Tuint64_t + Fdqi_igrace Tuint64_t + Fdqi_flags Tuint32_t + Fdqi_valid Tuint32_t +} + +func Xquotactl(tls *TLS, cmd int32, special uintptr, id int32, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v special=%v id=%v addr=%v, (%v:)", tls, cmd, special, id, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_quotactl), int64(cmd), int64(special), int64(id), int64(addr))))) +} + +func Xreadahead(tls *TLS, fd int32, pos Toff_t, len1 Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v, (%v:)", tls, fd, pos, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readahead), int64(fd), pos, int64(len1)))) +} + +const RB_AUTOBOOT = 19088743 +const RB_DISABLE_CAD = 0 +const RB_ENABLE_CAD = 2309737967 +const RB_HALT_SYSTEM = 3454992675 +const RB_KEXEC = 1163412803 +const RB_POWER_OFF = 1126301404 +const RB_SW_SUSPEND = 3489725666 + +func Xreboot(tls *TLS, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v, (%v:)", tls, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_reboot), int64(Uint32FromUint32(0xfee1dead)), int64(Int32FromInt32(672274793)), int64(type1))))) +} + +func Xremap_file_pages(tls *TLS, addr uintptr, size Tsize_t, prot int32, pgoff Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v size=%v prot=%v pgoff=%v flags=%v, (%v:)", tls, addr, size, prot, pgoff, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_remap_file_pages), int64(addr), int64(size), int64(prot), int64(pgoff), int64(flags))))) +} + +func Xsbrk(tls *TLS, inc Tintptr_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if inc != 0 { + return uintptr(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) + } + return uintptr(X__syscall1(tls, int64(SYS_brk), int64(Int32FromInt32(0)))) +} + +func Xsendfile(tls *TLS, out_fd int32, in_fd int32, ofs uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v out_fd=%v in_fd=%v ofs=%v count=%v, (%v:)", tls, out_fd, in_fd, ofs, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sendfile), int64(out_fd), int64(in_fd), int64(ofs), int64(count)))) +} + +func Xsetfsgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsgid), int64(gid))))) +} + +func Xsetfsuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsuid), int64(uid))))) +} + +func Xsethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sethostname), int64(name), int64(len1))))) +} + +const CLONE_CHILD_CLEARTID = 2097152 +const CLONE_CHILD_SETTID = 16777216 +const CLONE_DETACHED = 4194304 +const CLONE_FILES = 1024 +const CLONE_FS = 512 +const CLONE_IO = 2147483648 +const CLONE_NEWCGROUP = 33554432 +const CLONE_NEWIPC = 134217728 +const CLONE_NEWNET = 1073741824 +const CLONE_NEWNS = 131072 +const CLONE_NEWPID = 536870912 +const CLONE_NEWTIME = 128 +const CLONE_NEWUSER = 268435456 +const CLONE_NEWUTS = 67108864 +const CLONE_PARENT = 32768 +const CLONE_PARENT_SETTID = 1048576 +const CLONE_PIDFD = 4096 +const CLONE_PTRACE = 8192 +const CLONE_SETTLS = 524288 +const CLONE_SIGHAND = 2048 +const CLONE_SYSVSEM = 262144 +const CLONE_THREAD = 65536 +const CLONE_UNTRACED = 8388608 +const CLONE_VFORK = 16384 +const CLONE_VM = 256 +const CPU_SETSIZE = 1024 +const CSIGNAL = 255 + +type Tcpu_set_t = struct { + F__bits [16]uint64 +} + +func Xsetns(tls *TLS, fd int32, nstype int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v nstype=%v, (%v:)", tls, fd, nstype, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setns), int64(fd), int64(nstype))))) +} + +const __tm_gmtoff = 0 +const __tm_zone = 0 + +type Ttm1 = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + Ftm_gmtoff int64 + Ftm_zone uintptr +} + +func Xsettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if !(tv != 0) { + return 0 + } + if uint64((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec, + Ftv_nsec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec * int64(1000), + } + return Xclock_settime(tls, CLOCK_REALTIME, bp) +} + +const SFD_CLOEXEC = 524288 +const SFD_NONBLOCK = 2048 + +type Tsignalfd_siginfo = struct { + Fssi_signo Tuint32_t + Fssi_errno Tint32_t + Fssi_code Tint32_t + Fssi_pid Tuint32_t + Fssi_uid Tuint32_t + Fssi_fd Tint32_t + Fssi_tid Tuint32_t + Fssi_band Tuint32_t + Fssi_overrun Tuint32_t + Fssi_trapno Tuint32_t + Fssi_status Tint32_t + Fssi_int Tint32_t + Fssi_ptr Tuint64_t + Fssi_utime Tuint64_t + Fssi_stime Tuint64_t + Fssi_addr Tuint64_t + Fssi_addr_lsb Tuint16_t + F__pad2 Tuint16_t + Fssi_syscall Tint32_t + Fssi_call_addr Tuint64_t + Fssi_arch Tuint32_t + F__pad [28]Tuint8_t +} + +func Xsignalfd(tls *TLS, fd int32, sigs uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v sigs=%v flags=%v, (%v:)", tls, fd, sigs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall4(tls, int64(SYS_signalfd4), int64(fd), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), int64(flags))) + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsplice(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_splice), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +func Xstatx(tls *TLS, dirfd int32, path uintptr, flags int32, mask uint32, stx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v path=%v flags=%v mask=%v stx=%v, (%v:)", tls, dirfd, path, flags, mask, stx, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* st at bp+0 */ Tstat + _ = ret + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(dirfd), int64(path), int64(flags), int64(mask), int64(stx))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + ret = Xfstatat(tls, dirfd, path, bp, flags) + if ret != 0 { + return ret + } + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_major = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(31)>>Int32FromInt32(1)&Uint64FromUint32(0xfffff000) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(8)&Uint64FromInt32(0x00000fff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_minor = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(12)&Uint64FromUint32(0xffffff00) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0x000000ff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mode = uint16((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_nlink = (*(*Tstat)(unsafe.Pointer(bp))).Fst_nlink + (*Tstatx)(unsafe.Pointer(stx)).Fstx_uid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_uid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_gid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_gid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_size = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blksize = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_blksize) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blocks = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_blocks) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_btime = Tstatx_timestamp{} + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mask = uint32(0x7ff) + return 0 +} + +func Xstime(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimeval + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: *(*Ttime_t)(unsafe.Pointer(t)), + } + return Xsettimeofday(tls, bp, UintptrFromInt32(0)) +} + +const SWAP_FLAG_DISCARD = 65536 +const SWAP_FLAG_PREFER = 32768 +const SWAP_FLAG_PRIO_MASK = 32767 +const SWAP_FLAG_PRIO_SHIFT = 0 + +func Xswapon(tls *TLS, path uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v flags=%v, (%v:)", tls, path, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_swapon), int64(path), int64(flags))))) +} + +func Xswapoff(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_swapoff), int64(path))))) +} + +func Xsync_file_range(tls *TLS, fd int32, pos Toff_t, len1 Toff_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v flags=%v, (%v:)", tls, fd, pos, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sync_file_range), int64(fd), pos, len1, int64(flags))))) +} + +func Xsyncfs(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_syncfs), int64(fd))))) +} + +func X__lsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_sysinfo), int64(info))))) +} + +func Xsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lsysinfo(tls, info) +} + +func Xtee(tls *TLS, src int32, dest int32, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v src=%v dest=%v len1=%v flags=%v, (%v:)", tls, src, dest, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_tee), int64(src), int64(dest), int64(len1), int64(flags)))) +} + +const TFD_CLOEXEC = 524288 +const TFD_NONBLOCK = 2048 +const TFD_TIMER_ABSTIME = 1 +const TFD_TIMER_CANCEL_ON_SET = 2 + +func Xtimerfd_create(tls *TLS, clockid int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v clockid=%v flags=%v, (%v:)", tls, clockid, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_create), int64(clockid), int64(flags))))) +} + +func Xtimerfd_settime(tls *TLS, fd int32, flags int32, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v new1=%v old=%v, (%v:)", tls, fd, flags, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timerfd_settime), int64(fd), int64(flags), int64(new1), int64(old))))) +} + +func Xtimerfd_gettime(tls *TLS, fd int32, cur uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cur=%v, (%v:)", tls, fd, cur, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_gettime), int64(fd), int64(cur))))) +} + +func Xunshare(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_unshare), int64(flags))))) +} + +func Xutimes(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, -int32(100), path, times) +} + +func Xvhangup(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_vhangup))))) +} + +func Xvmsplice(tls *TLS, fd int32, iov uintptr, cnt Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v cnt=%v flags=%v, (%v:)", tls, fd, iov, cnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_vmsplice), int64(fd), int64(iov), int64(cnt), int64(flags)))) +} + +const NSIG = 65 +const REG_A0 = 10 +const REG_PC = 0 +const REG_RA = 1 +const REG_S0 = 8 +const REG_S1 = 9 +const REG_S2 = 18 +const REG_SP = 2 +const REG_TP = 4 +const SA_NOMASK = 1073741824 +const SA_ONESHOT = 2147483648 +const SYS_SECCOMP = 1 +const SYS_USER_DISPATCH = 2 +const __ucontext = 0 + +type Tgreg_t = uint64 + +type Tgregset_t = [32]uint64 + +type Tfpregset_t = struct { + F__d [0]t__riscv_mc_d_ext_state + F__q [0]t__riscv_mc_q_ext_state + F__f t__riscv_mc_f_ext_state + F__ccgo_pad3 [396]byte +} + +type Tsigcontext = struct { + Fgregs Tgregset_t + Ffpregs Tfpregset_t +} + +type Tucontext = Tucontext_t + +type Tsig_t = uintptr + +type Tsighandler_t = uintptr + +func Xwait3(tls *TLS, status uintptr, options int32, usage uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwait4(tls, -int32(1), status, options, usage) +} + +func Xwait4(tls *TLS, pid Tpid_t, status uintptr, options int32, ru uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v ru=%v, (%v:)", tls, pid, status, options, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest, v1 uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _, _ = dest, r, v1 + if ru != 0 { + v1 = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + } else { + v1 = uintptr(0) + } + dest = v1 + r = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(dest))) + if r > 0 && ru != 0 && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +const XATTR_CREATE = 1 +const XATTR_REPLACE = 2 +const __UAPI_DEF_XATTR = 0 + +func Xgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_getxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xlgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_lgetxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xfgetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v, (%v:)", tls, filedes, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fgetxattr), int64(filedes), int64(name), int64(value), int64(size)))) +} + +func Xlistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_listxattr), int64(path), int64(list), int64(size)))) +} + +func Xllistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_llistxattr), int64(path), int64(list), int64(size)))) +} + +func Xflistxattr(tls *TLS, filedes int32, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v list=%v size=%v, (%v:)", tls, filedes, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_flistxattr), int64(filedes), int64(list), int64(size)))) +} + +func Xsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_setxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xlsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_lsetxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xfsetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, filedes, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fsetxattr), int64(filedes), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_removexattr), int64(path), int64(name))))) +} + +func Xlremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_lremovexattr), int64(path), int64(name))))) +} + +func Xfremovexattr(tls *TLS, fd int32, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fremovexattr), int64(fd), int64(name))))) +} + +func _dummy4(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + return msg +} + +func X__lctrans(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, lm) +} + +func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale + 5*8))) +} + +func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { + var v1 uint32 + _ = v1 + if c != 0 { + v1 = x>>int32(24) | x>>int32(8)&uint32(0xff00) | x< %v", r) }() + } + var b, n, o, ol, os, t, tl, ts Tuint32_t + var mo uintptr + var sign, sw int32 + _, _, _, _, _, _, _, _, _, _, _ = b, mo, n, o, ol, os, sign, sw, t, tl, ts + mo = p + sw = int32(*(*Tuint32_t)(unsafe.Pointer(mo)) - uint32(0x950412de)) + b = uint32(0) + n = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 2*4)), sw) + o = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 3*4)), sw) + t = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 4*4)), sw) + if uint64(n) >= size/uint64(4) || uint64(o) >= size-uint64(uint32(4)*n) || uint64(t) >= size-uint64(uint32(4)*n) || (o|t)%uint32(4) != 0 { + return uintptr(0) + } + o /= uint32(4) + t /= uint32(4) + for { + ol = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2)))*4)), sw) + os = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(os) >= size || uint64(ol) >= size-uint64(os) || *(*uint8)(unsafe.Pointer(p + uintptr(os+ol))) != 0 { + return uintptr(0) + } + sign = Xstrcmp(tls, s, p+uintptr(os)) + if !(sign != 0) { + tl = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2)))*4)), sw) + ts = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(ts) >= size || uint64(tl) >= size-uint64(ts) || *(*uint8)(unsafe.Pointer(p + uintptr(ts+tl))) != 0 { + return uintptr(0) + } + return p + uintptr(ts) + } else { + if n == uint32(1) { + return uintptr(0) + } else { + if sign < 0 { + n /= uint32(2) + } else { + b += n / uint32(2) + n -= n / uint32(2) + } + } + } + goto _1 + _1: + } + return uintptr(0) +} + +const __USE_GNU_GETTEXT = 1 + +func Xbind_textdomain_codeset(tls *TLS, domainname uintptr, codeset uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v codeset=%v, (%v:)", tls, domainname, codeset, origin(2)) + defer func() { trc("-> %v", r) }() + } + if codeset != 0 && Xstrcasecmp(tls, codeset, __ccgo_ts+420) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + } + return UintptrFromInt32(0) +} + +var _empty_mo = [5]Tuint32_t{ + 0: uint32(0x950412de), + 2: uint32(-Int32FromInt32(1)), + 3: uint32(-Int32FromInt32(1)), + 4: uint32(-Int32FromInt32(1)), +} + +const NL_CAT_LOCALE = 1 +const NL_SETD = 1 + +type Tnl_item = int32 + +type Tnl_catd = uintptr + +func Xcatclose(tls *TLS, catd Tnl_catd) (r int32) { + if __ccgo_strace { + trc("tls=%v catd=%v, (%v:)", tls, catd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var map1 uintptr + var v1, v2 Tuint32_t + _, _, _ = map1, v1, v2 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4< y { + v8 = int32(1) + } else { + v8 = 0 + } + v7 = v8 + } + return v7 +} + +func Xcatgets(tls *TLS, catd Tnl_catd, set_id int32, msg_id int32, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v catd=%v set_id=%v msg_id=%v s=%v, (%v:)", tls, catd, set_id, msg_id, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var map1, msg, msgs, set, sets, strings uintptr + var nmsgs, nsets, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 Tuint32_t + var _ /* msg_id_be at bp+4 */ Tuint32_t + var _ /* set_id_be at bp+0 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = map1, msg, msgs, nmsgs, nsets, set, sets, strings, v1, v10, v11, v13, v14, v16, v17, v19, v2, v20, v22, v23, v4, v5, v7, v8 + map1 = catd + v1 = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(4))) + v2 = v1>>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v4>>int32(8)&uint32(0xff00) | v4<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7<>int32(24) | v10>>int32(8)&uint32(0xff00) | v10<>int32(24) | v13>>int32(8)&uint32(0xff00) | v13<>int32(24) | v16>>int32(8)&uint32(0xff00) | v16<>int32(24) | v19>>int32(8)&uint32(0xff00) | v19<>int32(24) | v22>>int32(8)&uint32(0xff00) | v22<>int32(24) | v1>>int32(8)&uint32(0xff00) | v1<>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< %v", r) }() + } + bp := tls.Alloc(4096) + defer tls.Free(4096) + var catd Tnl_catd + var i, l Tsize_t + var lang, p, path, v, z, v1, v3, v6, v7 uintptr + var v2 bool + var _ /* buf at bp+0 */ [4096]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = catd, i, l, lang, p, path, v, z, v1, v2, v3, v6, v7 + if Xstrchr(tls, name, int32('/')) != 0 { + return _do_catopen(tls, name) + } + if v2 = X__libc.Fsecure != 0; !v2 { + v1 = Xgetenv(tls, __ccgo_ts+426) + path = v1 + } + if v2 || !(v1 != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + if oflag != 0 { + v3 = Xnl_langinfo(tls, Int32FromInt32(LC_MESSAGES)<= uint64(4096)-i { + break + } + Xmemcpy(tls, bp+uintptr(i), v, l) + i += l + goto _5 + _5: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(z)) != 0) && (p < z || !(i != 0)) { + break + } + if p < z { + goto _4 + } + if *(*uint8)(unsafe.Pointer(z)) != 0 { + z++ + } + (*(*[4096]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + /* Leading : or :: in NLSPATH is same as %N */ + if i != 0 { + v7 = bp + } else { + v7 = name + } + catd = _do_catopen(tls, v7) + if catd != uintptr(-Int32FromInt32(1)) { + return catd + } + goto _4 + _4: + ; + p = z + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) +} + +const calloc = 0 +const free = 0 +const malloc = 0 +const realloc = 0 + +type Tbinding = struct { + Fnext uintptr + Fdirlen int32 + Factive int32 + Fdomainname uintptr + Fdirname uintptr +} + +var _bindings uintptr + +func _gettextdir(tls *TLS, domainname uintptr, dirlen uintptr) (r uintptr) { + var p uintptr + _ = p + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(p+12) != 0 { + *(*Tsize_t)(unsafe.Pointer(dirlen)) = uint64((*Tbinding)(unsafe.Pointer(p)).Fdirlen) + return (*Tbinding)(unsafe.Pointer(p)).Fdirname + } + goto _1 + _1: + ; + p = (*Tbinding)(unsafe.Pointer(p)).Fnext + } + return uintptr(0) +} + +var _lock1 [1]int32 + +func Xbindtextdomain(tls *TLS, domainname uintptr, dirname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v dirname=%v, (%v:)", tls, domainname, dirname, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dirlen, domlen Tsize_t + var old, p2, q uintptr + var tmp int32 + _, _, _, _, _, _ = dirlen, domlen, old, p2, q, tmp + if !(domainname != 0) { + return uintptr(0) + } + if !(dirname != 0) { + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + return _gettextdir(tls, domainname, bp) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + dirlen = Xstrnlen(tls, dirname, uint64(PATH_MAX)) + if domlen > uint64(NAME_MAX) || dirlen >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock1))) + p2 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p2 != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdomainname, domainname) != 0) && !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdirname, dirname) != 0) { + break + } + goto _1 + _1: + ; + p2 = (*Tbinding)(unsafe.Pointer(p2)).Fnext + } + if !(p2 != 0) { + p2 = Xcalloc(tls, uint64(32)+domlen+dirlen+uint64(2), uint64(1)) + if !(p2 != 0) { + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return uintptr(0) + } + (*Tbinding)(unsafe.Pointer(p2)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + (*Tbinding)(unsafe.Pointer(p2)).Fdirlen = int32(dirlen) + (*Tbinding)(unsafe.Pointer(p2)).Fdomainname = p2 + 32 + (*Tbinding)(unsafe.Pointer(p2)).Fdirname = p2 + 32 + uintptr(domlen) + uintptr(1) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdomainname, domainname, domlen+uint64(1)) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdirname, dirname, dirlen+uint64(1)) + // __asm__ __volatile__ ( + // + // "\n1: lr.d.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.d.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"(t), "r"(s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 28, __ccgo_ts+448) + _ = old + goto _2 + _2: + } + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+448) + AtomicStorePInt32(p2+12, int32(1)) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+448) + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && q != p2 { + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+448) + AtomicStorePInt32(q+12, 0) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+448) + } + goto _3 + _3: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return (*Tbinding)(unsafe.Pointer(p2)).Fdirname +} + +var _catnames = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +var _catlens = [6]uint8{ + 0: uint8(8), + 1: uint8(10), + 2: uint8(7), + 3: uint8(10), + 4: uint8(11), + 5: uint8(11), +} + +type Tmsgcat = struct { + Fnext uintptr + Fmap1 uintptr + Fmap_size Tsize_t + Fplural_rule uintptr + Fnplurals int32 + Fbinding uintptr + Flm uintptr + Fcat int32 +} + +func _dummy_gettextdomain(tls *TLS) (r uintptr) { + return __ccgo_ts + 463 +} + +func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64, category int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v category=%v, (%v:)", tls, domainname, msgid1, msgid2, n, category, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var alt_modlen, catlen, dirlen, domlen, l, loclen, modlen, rem, v5 Tsize_t + var catname, csp, dirname, lm, loc, locname, locp, map1, modname, name, old, old_cats, p1, q, r, rule, trans, v10, v17, v3, v8, v9 uintptr + var np, plural, v20 uint64 + var old_errno, tmp, v11, v12, v14, v15 int32 + var v6 t__predefined_size_t + var _ /* map_size at bp+0 */ Tsize_t + var _ /* z at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old, old_cats, old_errno, p1, plural, q, r, rem, rule, tmp, trans, v10, v11, v12, v14, v15, v17, v20, v3, v5, v6, v8, v9 + defer func() { Xrealloc(tls, name, 0) }() + loc = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + /* match gnu gettext behaviour */ + if !(msgid1 != 0) { + goto notrans + } + if uint32(category) >= uint32(LC_ALL) { + goto notrans + } + if !(domainname != 0) { + domainname = X__gettextdomain(tls) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if domlen > uint64(NAME_MAX) { + goto notrans + } + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(q+12) != 0 { + break + } + goto _1 + _1: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + if !(q != 0) { + goto notrans + } + lm = *(*uintptr)(unsafe.Pointer(loc + uintptr(category)*8)) + if !!(lm != 0) { + goto _2 + } + goto notrans +notrans: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if n == uint64(1) { + v3 = msgid1 + } else { + v3 = msgid2 + } + return v3 +_2: + ; + p1 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + for { + if !(p1 != 0) { + break + } + if (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding == q && (*Tmsgcat)(unsafe.Pointer(p1)).Flm == lm && (*Tmsgcat)(unsafe.Pointer(p1)).Fcat == category { + break + } + goto _4 + _4: + ; + p1 = (*Tmsgcat)(unsafe.Pointer(p1)).Fnext + } + if !(p1 != 0) { + dirname = (*Tbinding)(unsafe.Pointer(q)).Fdirname + locname = lm + 16 + catname = uintptr(unsafe.Pointer(&_catnames)) + uintptr(category)*12 + dirlen = uint64((*Tbinding)(unsafe.Pointer(q)).Fdirlen) + loclen = Xstrlen(tls, locname) + catlen = uint64(_catlens[category]) + /* Logically split @mod suffix from locale name. */ + modname = Xmemchr(tls, locname, int32('@'), loclen) + if !(modname != 0) { + modname = locname + uintptr(loclen) + } + v5 = loclen - uint64(int64(modname)-int64(locname)) + modlen = v5 + alt_modlen = v5 + loclen = uint64(int64(modname) - int64(locname)) + /* Drop .charset identifier; it is not used. */ + csp = Xmemchr(tls, locname, int32('.'), loclen) + if csp != 0 { + loclen = uint64(int64(csp) - int64(locname)) + } + v6 = dirlen + uint64(1) + loclen + modlen + uint64(1) + catlen + uint64(1) + domlen + uint64(3) + uint64(1) + name = Xrealloc(tls, name, v6) + for { + Xsnprintf(tls, name, v6, __ccgo_ts+472, VaList(bp+24, dirname, int32(loclen), locname, int32(alt_modlen), modname, catname, domainname)) + v8 = X__map_file(tls, name, bp) + map1 = v8 + if v8 != 0 { + break + } + /* Try dropping @mod, _YY, then both. */ + if alt_modlen != 0 { + alt_modlen = uint64(0) + } else { + v9 = Xmemchr(tls, locname, int32('_'), loclen) + locp = v9 + if v9 != 0 { + loclen = uint64(int64(locp) - int64(locname)) + alt_modlen = modlen + } else { + break + } + } + goto _7 + _7: + } + if !(map1 != 0) { + goto notrans + } + p1 = Xcalloc(tls, uint64(64), uint64(1)) + if !(p1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + goto notrans + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fcat = category + (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding = q + (*Tmsgcat)(unsafe.Pointer(p1)).Flm = lm + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1 = map1 + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp)) + rule = __ccgo_ts + 494 + np = uint64(2) + r = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, __ccgo_ts) + for r != 0 && Xstrncmp(tls, r, __ccgo_ts+500, uint64(13)) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = Xstrchr(tls, r, int32('\n')) + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v10 = *(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(1) + } else { + v10 = uintptr(0) + } + r = v10 + } + if r != 0 { + r += uintptr(13) + for { + v11 = int32(*(*uint8)(unsafe.Pointer(r))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + if !(v12 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+514, uint64(9)) != 0) { + np = Xstrtoul(tls, r+uintptr(9), bp+8, int32(10)) + r = *(*uintptr)(unsafe.Pointer(bp + 8)) + } + for *(*uint8)(unsafe.Pointer(r)) != 0 && int32(*(*uint8)(unsafe.Pointer(r))) != int32(';') { + r++ + } + if *(*uint8)(unsafe.Pointer(r)) != 0 { + r++ + for { + v14 = int32(*(*uint8)(unsafe.Pointer(r))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + if !(v15 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+524, uint64(7)) != 0) { + rule = r + uintptr(7) + } + } + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals = int32(np) + (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule = rule + for { + old_cats = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + (*Tmsgcat)(unsafe.Pointer(p1)).Fnext = old_cats + goto _19 + _19: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.d.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.d.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"(t), "r"(s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 28, __ccgo_ts+532) + v17 = old + goto _18 + _18: + ; + if !(v17 != old_cats) { + break + } + } + } + trans = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, msgid1) + if !(trans != 0) { + goto notrans + } + /* Non-plural-processing gettext forms pass a null pointer as + * msgid2 to request that dcngettext suppress plural processing. */ + if msgid2 != 0 && (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals != 0 { + plural = X__pleval(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule, n) + if plural > uint64((*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals) { + goto notrans + } + for { + v20 = plural + plural-- + if !(v20 != 0) { + break + } + rem = (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size - uint64(int64(trans)-int64((*Tmsgcat)(unsafe.Pointer(p1)).Fmap1)) + l = Xstrnlen(tls, trans, rem) + if l+uint64(1) >= rem { + goto notrans + } + trans += uintptr(l + uint64(1)) + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return trans +} + +var _cats uintptr + +func Xdcgettext(tls *TLS, domainname uintptr, msgid uintptr, category int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v category=%v, (%v:)", tls, domainname, msgid, category, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), category) +} + +func Xdngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, domainname, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid1, msgid2, n, int32(LC_MESSAGES)) +} + +func Xdgettext(tls *TLS, domainname uintptr, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v, (%v:)", tls, domainname, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), int32(LC_MESSAGES)) +} + +func X__duplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var new1 Tlocale_t + _ = new1 + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + return uintptr(0) + } + if old == uintptr(-Int32FromInt32(1)) { + old = uintptr(unsafe.Pointer(&X__libc)) + 56 + } + *(*t__locale_struct)(unsafe.Pointer(new1)) = *(*t__locale_struct)(unsafe.Pointer(old)) + return new1 +} + +func Xduplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__duplocale(tls, old) +} + +func Xfreelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + if X__loc_is_allocated(tls, l) != 0 { + Xfree(tls, l) + } +} + +func X__freelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + Xfreelocale(tls, l) +} + +const BIG5 = 224 +const EUC_JP = 208 +const EUC_KR = 232 +const GB18030 = 216 +const GB2312 = 218 +const GBK = 217 +const ISO2022_JP = 210 +const SHIFT_JIS = 209 +const UCS2 = 204 +const UCS2BE = 196 +const UCS2LE = 197 +const US_ASCII = 199 +const UTF_16 = 202 +const UTF_16BE = 194 +const UTF_16LE = 193 +const UTF_32 = 203 +const UTF_32BE = 192 +const UTF_32LE = 195 +const UTF_8 = 200 +const WCHAR_T = 198 +const mbrtowc_utf8 = 0 +const wctomb_utf8 = 0 + +type Ticonv_t = uintptr + +/* Definitions of charmaps. Each charmap consists of: + * 1. Empty-string-terminated list of null-terminated aliases. + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ + +var _charmaps = [4907]uint8{'u', 't', 'f', '8', 0, 'c', 'h', 'a', 'r', 0, 0, 200, 'w', 'c', 'h', 'a', 'r', 't', 0, 0, 198, 'u', 'c', 's', '2', 'b', 'e', 0, 0, 196, 'u', 'c', 's', '2', 'l', 'e', 0, 0, 197, 'u', 't', 'f', '1', '6', 'b', 'e', 0, 0, 194, 'u', 't', 'f', '1', '6', 'l', 'e', 0, 0, 193, 'u', 'c', 's', '4', 'b', 'e', 0, 'u', 't', 'f', '3', '2', 'b', 'e', 0, 0, 192, 'u', 'c', 's', '4', 'l', 'e', 0, 'u', 't', 'f', '3', '2', 'l', 'e', 0, 0, 195, 'a', 's', 'c', 'i', 'i', 0, 'u', 's', 'a', 's', 'c', 'i', 'i', 0, 'i', 's', 'o', '6', '4', '6', 0, 'i', 's', 'o', '6', '4', '6', 'u', 's', 0, 0, 199, 'u', 't', 'f', '1', '6', 0, 0, 202, 'u', 'c', 's', '4', 0, 'u', 't', 'f', '3', '2', 0, 0, 203, 'u', 'c', 's', '2', 0, 0, 204, 'e', 'u', 'c', 'j', 'p', 0, 0, 208, 's', 'h', 'i', 'f', 't', 'j', 'i', 's', 0, 's', 'j', 'i', 's', 0, 'c', 'p', '9', '3', '2', 0, 0, 209, 'i', 's', 'o', '2', '0', '2', '2', 'j', 'p', 0, 0, 210, 'g', 'b', '1', '8', '0', '3', '0', 0, 0, 216, 'g', 'b', 'k', 0, 'c', 'p', '9', '3', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '9', '3', '6', 0, 0, 217, 'g', 'b', '2', '3', '1', '2', 0, 0, 218, 'b', 'i', 'g', '5', 0, 'b', 'i', 'g', 'f', 'i', 'v', 'e', 0, 'c', 'p', '9', '5', '0', 0, 'b', 'i', 'g', '5', 'h', 'k', 's', 'c', 's', 0, 0, 224, 'e', 'u', 'c', 'k', 'r', 0, 'k', 's', 'c', '5', '6', '0', '1', 0, 'k', 's', 'x', '1', '0', '0', '1', 0, 'c', 'p', '9', '4', '9', 0, 0, 232, 'i', 's', 'o', '8', '8', '5', '9', '1', 0, 'l', 'a', 't', 'i', 'n', '1', 0, 0, '@', 'i', 's', 'o', '8', '8', '5', '9', '2', 0, 0, '(', 160, 16, 244, 'W', 'N', 164, 220, 244, 212, ')', 168, 'T', '5', 'U', 'V', 'n', 181, '"', 23, '\\', 176, 20, 20, 152, 'N', 180, 224, 4, 149, '_', 184, 'X', 'E', 149, 'V', 'o', 13, '6', 'W', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '3', 0, 0, '(', 160, 144, 244, 215, '(', 164, 0, ' ', 210, ')', 168, 176, '4', 21, 'G', '.', 181, 2, 0, '\\', 176, 148, '$', 203, ',', 180, 212, '2', 210, '-', 184, 180, 'D', 'U', 'G', '/', 245, 2, '@', '\\', 192, 4, '#', 12, 0, 196, '(', 132, 208, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 0, 'D', '#', 205, '4', 212, 'x', 'd', 205, '5', 26, 'e', 163, 205, '6', 220, 132, 21, 213, '7', 224, 132, '#', 14, 0, 228, ',', 148, 208, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 0, 196, '#', 207, '<', 244, '|', 'd', 207, '=', 27, 229, 163, 207, '>', 252, 136, '%', 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '4', 0, 0, '(', 160, 16, '$', 211, 'R', 164, 152, 'T', 211, ')', 168, 'T', '%', 17, 'H', '[', 181, '"', 215, '+', 176, 20, 20, 24, 'S', 180, 156, 'd', 147, '_', 184, 'X', '5', 'Q', 'H', '\\', 5, '5', 151, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 12, 'J', 16, 245, '4', 20, 'L', 212, 'T', 'c', 205, '5', 216, 156, 165, 205, '6', 220, 't', 245, 213, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 'N', 'J', 17, 249, 'D', 'T', 'L', 244, 212, 'c', 207, '=', 248, 160, 165, 207, '>', 252, 'x', 5, 22, '`', 'i', 's', 'o', '8', '8', '5', '9', '5', 0, 0, '(', 160, 'D', '\'', 221, 't', 212, 'U', 'g', 221, 'u', 216, 'e', 167, 221, 'v', 220, 181, 210, 157, 'w', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, '&', 127, 8, 'b', 136, '"', 142, 'H', 'b', 137, '&', 158, 136, 'b', 138, '*', 158, 178, '"', 139, 'i', 's', 'o', '8', '8', '5', '9', '6', 0, 0, '(', 160, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'b', 182, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 152, 0, 0, 0, 0, 153, 0, 148, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, 158, '|', 246, 233, '\'', 0, 0, 0, 0, 0, 0, 127, 2, 26, 168, 160, 131, 18, 'Z', 168, 161, 135, '"', 154, 168, 162, 139, '2', 218, 168, 163, 143, 'B', 26, ')', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '7', 0, 0, '(', 160, 'L', 'L', 241, '(', '$', 151, 'l', 202, ')', 168, 164, 146, 216, '*', 172, 180, 2, '@', 196, 176, 196, '"', 203, ',', 138, '-', 198, 216, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'i', 's', 'o', '8', '8', '5', '9', '8', 0, 0, '(', 160, 0, ' ', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 196, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'i', 's', 'o', '8', '8', '5', '9', '9', 0, 0, '4', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '0', 0, 0, '(', 160, 16, '$', 17, 'H', '(', 153, 4, 211, ')', '5', 'A', 'T', 213, 'V', 'r', 181, 242, 'U', 'P', 176, 20, '4', 'Q', 'H', ')', 157, 20, 211, '-', '6', 'E', 'd', 21, 'W', 's', 'E', 12, 150, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 204, '3', 208, 244, '4', 212, '4', 212, 'T', 'c', 'M', 'W', 216, 156, 165, 205, '6', 220, 't', 227, 205, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 206, ';', 240, 248, 'D', 212, '<', 244, 212, 'c', 143, 'W', 248, 160, 165, 207, '>', 252, 244, 227, 143, 'L', 'i', 's', 'o', '8', '8', '5', '9', '1', '1', 0, 't', 'i', 's', '6', '2', '0', 0, 0, '(', 160, 'x', 250, ')', 168, 161, 138, ':', '*', 169, 165, 154, 'z', '*', 170, 169, 170, 186, '*', 171, 173, 186, 250, '*', 172, 177, 202, ':', '+', 173, 181, 218, 'z', '+', 174, 185, 234, 186, '+', 175, 189, 250, 250, '+', 176, 193, 10, ';', ',', 177, 197, 26, '{', ',', 178, 201, '*', 187, ',', 179, 205, ':', 251, ',', 180, 209, 'J', ';', '-', 181, 213, 'Z', '{', '-', 0, 0, 0, 0, 0, 182, 217, 'j', 187, '-', 183, 221, 'z', 251, '-', 184, 225, 138, ';', '.', 185, 229, 154, '{', '.', 186, 233, 170, 187, '.', 187, 237, 186, 251, '.', 188, 241, 202, ';', '/', 189, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '1', '3', 0, 0, '(', 160, '\\', ',', 202, '(', 164, '`', 'l', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 22, 215, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, 197, 'i', 's', 'o', '8', '8', '5', '9', '1', '4', 0, 0, '(', 160, 212, 'k', 239, '(', 10, '-', 't', 239, ')', 3, 167, 'R', '0', 190, 9, 183, 226, 'J', '[', 249, 234, 235, 209, 'G', 251, 242, 'k', 'K', 191, 4, 251, 'k', 240, 191, 10, 31, 140, '0', 192, 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 'i', 'E', '#', 205, '4', 212, 'T', 'c', 'M', 192, 216, 'd', 163, 205, '6', 220, 't', 179, 214, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 'j', 197, '#', 207, '<', 244, 212, 'c', 143, 192, 248, 228, 163, 207, '>', 252, 244, 195, 214, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '5', 0, 'l', 'a', 't', 'i', 'n', '9', 0, 0, ')', '$', 151, 'R', 213, ')', 'V', 165, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 'r', 213, 'b', 203, '-', 's', 229, 162, 203, '.', 'G', '!', 213, 214, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '6', 0, 0, '(', 160, 16, 'T', 'P', 'N', '$', 'c', '\\', 213, ')', 'V', 165, 146, 215, '*', 'n', 181, 242, 22, '\\', 176, 196, 194, 144, 'N', 'r', ']', 'l', 203, '-', 's', '5', 164, 215, '.', 'G', '!', 213, 'V', '\\', 192, 4, '#', 140, '@', 196, 24, 'd', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 16, 237, '$', 205, '4', 212, 20, 'e', 205, 'S', 'e', 'e', 163, 205, '6', 220, 'X', 180, 215, '7', 224, 132, '#', 206, '@', 228, 28, 'd', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 17, 241, '$', 207, '<', 244, 24, 'e', 15, 'T', 'f', 229, 163, 207, '>', 252, '\\', 196, 215, '?', 'c', 'p', '1', '2', '5', '0', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '0', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', '\\', 149, 199, 'O', 'e', '%', 151, '[', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 'l', 213, 199, 'P', 'i', '5', 215, '[', 160, 248, 245, 'W', 'N', 164, 16, 'd', 202, ')', 168, 164, '2', 213, '*', 172, 180, 226, 10, '\\', 176, 196, 18, 152, 'N', 180, 212, 'b', 203, '-', 184, 20, 'D', 213, '.', '7', 13, 134, 'S', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'c', 'p', '1', '2', '5', '1', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '1', 0, 0, ' ', 210, 'M', 'W', 'q', 136, 24, 's', 156, 177, 198, '$', 'w', 156, 157, 199, 218, 'q', 183, 157, 'w', ' ', 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, '|', 226, 199, '(', 170, 152, '"', 139, 160, 't', 183, '"', 'v', 164, 180, 'h', 202, ')', 209, 165, 'B', 221, '*', 172, 180, 226, 202, 'u', 176, 196, 'b', 29, 137, '.', 214, 'b', 203, '-', 31, 154, ',', 226, '.', '&', 'V', '7', 'b', 137, 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 'c', 'p', '1', '2', '5', '2', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '2', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, ' ', 23, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, '0', 'W', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'c', 'p', '1', '2', '5', '3', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '3', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 0, 0, 0, 0, 160, ',', 198, 216, '(', 164, 148, 'b', 202, ')', 168, 164, 2, 192, '*', 172, 180, 226, 'J', 196, 176, 196, '"', 203, ',', 138, 213, 'b', 203, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'c', 'p', '1', '2', '5', '4', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '4', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'c', 'p', '1', '2', '5', '5', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '5', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 0, 0, 0, 0, 0, 160, 132, '"', 202, '(', '"', 151, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 203, '/', '/', 194, 24, 163, 140, '3', 210, 'X', 163, 141, '7', 226, 8, '@', 142, ':', 238, 200, 'c', 143, '>', 254, 8, 'd', 144, ']', 'z', 249, '%', 152, 'a', 2, 0, 0, 0, 0, 0, 0, 0, 0, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'c', 'p', '1', '2', '5', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '6', 0, 0, ' ', '$', 'O', 'Z', '1', ']', 24, 's', 156, 177, 198, '}', 'u', ',', 169, 199, 'G', 'Q', 'z', 'i', 165, 153, 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 152, 158, 'l', 233, 199, 'H', '-', 204, 176, 166, 160, 136, ')', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 178, 233, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, '2', 230, '.', 188, 244, 226, 11, 153, 156, 150, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, '5', '{', 242, 217, 167, 159, 127, 2, 26, 168, 160, 224, 12, '*', 14, 161, 133, 26, 'z', 232, '9', 232, 164, 163, 206, ':', 136, '&', 234, 206, ';', 138, '.', 202, 'h', 163, 244, '8', 250, 232, '=', 144, 230, 19, 233, '>', 252, '4', 236, 'p', 167, 'c', 'p', '1', '2', '5', '7', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '7', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 160, 226, 23, '.', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 188, 18, 24, 0, 160, 0, ' ', 202, '(', 164, 0, '`', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, '`', 'c', 'p', '1', '2', '5', '8', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '8', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 140, '@', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 132, '5', 227, 204, '3', 16, 'E', 's', 216, '4', 212, 212, 'e', 205, '5', 216, 'd', 163, 205, '6', 220, 220, 'e', 216, '7', 224, 132, '#', 206, '@', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 133, 181, 227, 206, ';', 17, 197, 131, 216, '<', 244, 216, 'e', 207, '=', 248, 228, 163, 207, '>', 252, 224, '5', 242, '?', 'k', 'o', 'i', '8', 'r', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, 'A', 11, '=', '4', 209, 'E', 27, '}', '4', 210, 'I', '+', 189, '4', 211, 'M', ';', 253, 't', 't', 'P', 'G', '-', 245, 212, 'T', 'W', 'm', 245, 213, 'X', 'g', 173, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'k', 'o', 'i', '8', 'u', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, '"', 10, 'M', 'b', 137, 'E', 27, '}', '4', 210, 'I', 187, 184, '4', 211, 'M', ';', 253, 't', 't', 212, 'E', 'm', 221, 'u', 'T', 'W', 'm', 245, 213, 'X', 183, 168, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'c', 'p', '4', '3', '7', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 141, '(', 163, 148, 18, '2', ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 192, 204, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 179, '}', 'c', 153, 'p', 165, 21, 'W', 139, 'q', 168, 'm', 182, 154, 'm', '*', '#', 'w', 219, 202, '-', 199, 242, 178, 203, '1', 203, '|', 15, 203, 176, 160, '|', 'K', 202, ' ', 203, '2', '6', '(', 'c', 'p', '8', '5', '0', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 13, '>', 163, '`', 's', 13, ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 184, 194, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', 7, '#', 12, '0', 169, 'D', 253, 's', 209, 'K', 139, 'R', 138, 205, '7', 243, 188, 's', 206, '3', 247, '<', 206, '0', 'H', 11, '}', '5', 213, 'N', 251, 172, '5', ')', 240, '@', 163, 204, '2', 200, 180, 212, 140, '3', 207, 224, '\\', 's', 215, '\\', 155, 194, 204, 214, 211, '|', 'C', 141, '4', 245, 'T', 'S', 139, '?', 222, 'h', 179, 'M', '6', 253, 't', 243, 10, '-', 173, 196, '"', 177, '/', 182, 156, 'r', 15, '.', 176, 160, 'r', 'K', '.', 179, 200, '2', '6', '(', 'c', 'p', '8', '6', '6', 0, 0, ' ', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 209, '}', 'H', 157, 136, 215, 149, 216, 221, 138, 176, 160, '|', 'K', 202, '&', 147, '2', '6', '(', 'i', 'b', 'm', '1', '0', '4', '7', 0, 'c', 'p', '1', '0', '4', '7', 0, 0, 1, 156, '$', '`', 200, 31, 151, '4', 226, 200, 2, 12, '4', 224, 192, 3, 16, 'D', ' ', 193, 4, 157, 20, 130, 192, '!', 24, 'd', ' ', 201, '#', 28, 't', 224, 193, 7, 128, 4, '"', 200, ' ', 132, '(', 'p', 193, 6, 136, '$', 162, 200, '"', 140, 20, '`', 192, 1, 144, 'D', 'b', 193, '$', 148, 'T', 'b', 9, 1, 152, 'd', 162, 201, '&', 20, 'T', 224, 137, 6, ' ', 128, '"', 14, '9', 224, 132, '3', 'N', '9', 231, 196, '#', 138, 11, '<', 160, 176, 2, 31, '&', 164, 163, 206, ':', 232, 180, 227, 206, ';', 236, '|', 19, 2, 9, '*', 164, 176, 131, 23, '-', 188, ' ', 12, '1', 192, 4, '3', 'L', '1', 199, 'D', 'c', 10, 11, '%', '|', 225, 195, 15, 248, '$', 163, 204, '2', 200, '4', 227, 204, '3', 204, 128, 161, 195, 8, '@', 156, 208, 131, 8, 216, 132, '!', 198, 24, 'd', 148, 'a', 198, 25, 'h', 164, 177, 202, '.', 240, 244, 227, 'O', ',', 176, 168, 177, 6, 27, 'm', 184, 241, 6, 28, 'q', 200, 161, 138, '.', 230, 224, 'b', 12, ')', 181, 248, '1', 7, 29, 'u', 216, 'q', 7, 30, 'y', 232, 17, 202, '/', 208, 'l', 225, 141, '+', 172, 140, 'R', 202, '-', 169, 156, 'b', 11, '/', 189, 248, 210, 13, '*', 175, 't', 'A', 203, '5', '{', 4, '!', 196, 16, 'D', 20, 'a', 196, 17, 'H', '$', 209, 10, '=', 246, 200, '3', 'O', '=', '}', '(', 177, 4, 19, 'M', '8', 241, 4, 20, 'Q', 'H', 145, 203, '>', 252, 228, 163, 207, '?', '\\', 220, '3', 5, 21, 'U', 'X', 'q', 5, 22, 'Y', 'h', '!', 11, '5', 214, 'H', '3', 'M', '5', '0', 196, ' ', 195, 12, '4', 212, '`', 195, 13, '8', 228, '0', 203, '6', 220, 'd', 163, 205, '\''} + +// C documentation +// +// /* Table of characters that appear in legacy 8-bit codepages, +// * limited to 1024 slots (10 bit indices). The first 256 entries +// * are elided since those characters are obviously all included. */ +var _legacy_chars = [612]uint16{ + 0: uint16(256), + 1: uint16(257), + 2: uint16(258), + 3: uint16(259), + 4: uint16(260), + 5: uint16(261), + 6: uint16(262), + 7: uint16(263), + 8: uint16(264), + 9: uint16(265), + 10: uint16(266), + 11: uint16(267), + 12: uint16(268), + 13: uint16(269), + 14: uint16(270), + 15: uint16(271), + 16: uint16(272), + 17: uint16(273), + 18: uint16(274), + 19: uint16(275), + 20: uint16(278), + 21: uint16(279), + 22: uint16(280), + 23: uint16(281), + 24: uint16(282), + 25: uint16(283), + 26: uint16(284), + 27: uint16(285), + 28: uint16(286), + 29: uint16(287), + 30: uint16(288), + 31: uint16(289), + 32: uint16(290), + 33: uint16(291), + 34: uint16(292), + 35: uint16(293), + 36: uint16(294), + 37: uint16(295), + 38: uint16(296), + 39: uint16(297), + 40: uint16(298), + 41: uint16(299), + 42: uint16(302), + 43: uint16(303), + 44: uint16(304), + 45: uint16(305), + 46: uint16(308), + 47: uint16(309), + 48: uint16(310), + 49: uint16(311), + 50: uint16(312), + 51: uint16(313), + 52: uint16(314), + 53: uint16(315), + 54: uint16(316), + 55: uint16(317), + 56: uint16(318), + 57: uint16(321), + 58: uint16(322), + 59: uint16(323), + 60: uint16(324), + 61: uint16(325), + 62: uint16(326), + 63: uint16(327), + 64: uint16(328), + 65: uint16(330), + 66: uint16(331), + 67: uint16(332), + 68: uint16(333), + 69: uint16(336), + 70: uint16(337), + 71: uint16(338), + 72: uint16(339), + 73: uint16(340), + 74: uint16(341), + 75: uint16(342), + 76: uint16(343), + 77: uint16(344), + 78: uint16(345), + 79: uint16(346), + 80: uint16(347), + 81: uint16(348), + 82: uint16(349), + 83: uint16(350), + 84: uint16(351), + 85: uint16(352), + 86: uint16(353), + 87: uint16(354), + 88: uint16(355), + 89: uint16(356), + 90: uint16(357), + 91: uint16(358), + 92: uint16(359), + 93: uint16(360), + 94: uint16(361), + 95: uint16(362), + 96: uint16(363), + 97: uint16(364), + 98: uint16(365), + 99: uint16(366), + 100: uint16(367), + 101: uint16(368), + 102: uint16(369), + 103: uint16(370), + 104: uint16(371), + 105: uint16(372), + 106: uint16(373), + 107: uint16(374), + 108: uint16(375), + 109: uint16(376), + 110: uint16(377), + 111: uint16(378), + 112: uint16(379), + 113: uint16(380), + 114: uint16(381), + 115: uint16(382), + 116: uint16(402), + 117: uint16(416), + 118: uint16(417), + 119: uint16(431), + 120: uint16(432), + 121: uint16(536), + 122: uint16(537), + 123: uint16(538), + 124: uint16(539), + 125: uint16(710), + 126: uint16(711), + 127: uint16(728), + 128: uint16(729), + 129: uint16(731), + 130: uint16(732), + 131: uint16(733), + 132: uint16(768), + 133: uint16(769), + 134: uint16(771), + 135: uint16(777), + 136: uint16(803), + 137: uint16(890), + 138: uint16(900), + 139: uint16(901), + 140: uint16(902), + 141: uint16(904), + 142: uint16(905), + 143: uint16(906), + 144: uint16(908), + 145: uint16(910), + 146: uint16(911), + 147: uint16(912), + 148: uint16(913), + 149: uint16(914), + 150: uint16(915), + 151: uint16(916), + 152: uint16(917), + 153: uint16(918), + 154: uint16(919), + 155: uint16(920), + 156: uint16(921), + 157: uint16(922), + 158: uint16(923), + 159: uint16(924), + 160: uint16(925), + 161: uint16(926), + 162: uint16(927), + 163: uint16(928), + 164: uint16(929), + 165: uint16(931), + 166: uint16(932), + 167: uint16(933), + 168: uint16(934), + 169: uint16(935), + 170: uint16(936), + 171: uint16(937), + 172: uint16(938), + 173: uint16(939), + 174: uint16(940), + 175: uint16(941), + 176: uint16(942), + 177: uint16(943), + 178: uint16(944), + 179: uint16(945), + 180: uint16(946), + 181: uint16(947), + 182: uint16(948), + 183: uint16(949), + 184: uint16(950), + 185: uint16(951), + 186: uint16(952), + 187: uint16(953), + 188: uint16(954), + 189: uint16(955), + 190: uint16(956), + 191: uint16(957), + 192: uint16(958), + 193: uint16(959), + 194: uint16(960), + 195: uint16(961), + 196: uint16(962), + 197: uint16(963), + 198: uint16(964), + 199: uint16(965), + 200: uint16(966), + 201: uint16(967), + 202: uint16(968), + 203: uint16(969), + 204: uint16(970), + 205: uint16(971), + 206: uint16(972), + 207: uint16(973), + 208: uint16(974), + 209: uint16(1025), + 210: uint16(1026), + 211: uint16(1027), + 212: uint16(1028), + 213: uint16(1029), + 214: uint16(1030), + 215: uint16(1031), + 216: uint16(1032), + 217: uint16(1033), + 218: uint16(1034), + 219: uint16(1035), + 220: uint16(1036), + 221: uint16(1038), + 222: uint16(1039), + 223: uint16(1040), + 224: uint16(1041), + 225: uint16(1042), + 226: uint16(1043), + 227: uint16(1044), + 228: uint16(1045), + 229: uint16(1046), + 230: uint16(1047), + 231: uint16(1048), + 232: uint16(1049), + 233: uint16(1050), + 234: uint16(1051), + 235: uint16(1052), + 236: uint16(1053), + 237: uint16(1054), + 238: uint16(1055), + 239: uint16(1056), + 240: uint16(1057), + 241: uint16(1058), + 242: uint16(1059), + 243: uint16(1060), + 244: uint16(1061), + 245: uint16(1062), + 246: uint16(1063), + 247: uint16(1064), + 248: uint16(1065), + 249: uint16(1066), + 250: uint16(1067), + 251: uint16(1068), + 252: uint16(1069), + 253: uint16(1070), + 254: uint16(1071), + 255: uint16(1072), + 256: uint16(1073), + 257: uint16(1074), + 258: uint16(1075), + 259: uint16(1076), + 260: uint16(1077), + 261: uint16(1078), + 262: uint16(1079), + 263: uint16(1080), + 264: uint16(1081), + 265: uint16(1082), + 266: uint16(1083), + 267: uint16(1084), + 268: uint16(1085), + 269: uint16(1086), + 270: uint16(1087), + 271: uint16(1088), + 272: uint16(1089), + 273: uint16(1090), + 274: uint16(1091), + 275: uint16(1092), + 276: uint16(1093), + 277: uint16(1094), + 278: uint16(1095), + 279: uint16(1096), + 280: uint16(1097), + 281: uint16(1098), + 282: uint16(1099), + 283: uint16(1100), + 284: uint16(1101), + 285: uint16(1102), + 286: uint16(1103), + 287: uint16(1105), + 288: uint16(1106), + 289: uint16(1107), + 290: uint16(1108), + 291: uint16(1109), + 292: uint16(1110), + 293: uint16(1111), + 294: uint16(1112), + 295: uint16(1113), + 296: uint16(1114), + 297: uint16(1115), + 298: uint16(1116), + 299: uint16(1118), + 300: uint16(1119), + 301: uint16(1168), + 302: uint16(1169), + 303: uint16(1456), + 304: uint16(1457), + 305: uint16(1458), + 306: uint16(1459), + 307: uint16(1460), + 308: uint16(1461), + 309: uint16(1462), + 310: uint16(1463), + 311: uint16(1464), + 312: uint16(1465), + 313: uint16(1467), + 314: uint16(1468), + 315: uint16(1469), + 316: uint16(1470), + 317: uint16(1471), + 318: uint16(1472), + 319: uint16(1473), + 320: uint16(1474), + 321: uint16(1475), + 322: uint16(1488), + 323: uint16(1489), + 324: uint16(1490), + 325: uint16(1491), + 326: uint16(1492), + 327: uint16(1493), + 328: uint16(1494), + 329: uint16(1495), + 330: uint16(1496), + 331: uint16(1497), + 332: uint16(1498), + 333: uint16(1499), + 334: uint16(1500), + 335: uint16(1501), + 336: uint16(1502), + 337: uint16(1503), + 338: uint16(1504), + 339: uint16(1505), + 340: uint16(1506), + 341: uint16(1507), + 342: uint16(1508), + 343: uint16(1509), + 344: uint16(1510), + 345: uint16(1511), + 346: uint16(1512), + 347: uint16(1513), + 348: uint16(1514), + 349: uint16(1520), + 350: uint16(1521), + 351: uint16(1522), + 352: uint16(1523), + 353: uint16(1524), + 354: uint16(1548), + 355: uint16(1563), + 356: uint16(1567), + 357: uint16(1569), + 358: uint16(1570), + 359: uint16(1571), + 360: uint16(1572), + 361: uint16(1573), + 362: uint16(1574), + 363: uint16(1575), + 364: uint16(1576), + 365: uint16(1577), + 366: uint16(1578), + 367: uint16(1579), + 368: uint16(1580), + 369: uint16(1581), + 370: uint16(1582), + 371: uint16(1583), + 372: uint16(1584), + 373: uint16(1585), + 374: uint16(1586), + 375: uint16(1587), + 376: uint16(1588), + 377: uint16(1589), + 378: uint16(1590), + 379: uint16(1591), + 380: uint16(1592), + 381: uint16(1593), + 382: uint16(1594), + 383: uint16(1600), + 384: uint16(1601), + 385: uint16(1602), + 386: uint16(1603), + 387: uint16(1604), + 388: uint16(1605), + 389: uint16(1606), + 390: uint16(1607), + 391: uint16(1608), + 392: uint16(1609), + 393: uint16(1610), + 394: uint16(1611), + 395: uint16(1612), + 396: uint16(1613), + 397: uint16(1614), + 398: uint16(1615), + 399: uint16(1616), + 400: uint16(1617), + 401: uint16(1618), + 402: uint16(1657), + 403: uint16(1662), + 404: uint16(1670), + 405: uint16(1672), + 406: uint16(1681), + 407: uint16(1688), + 408: uint16(1705), + 409: uint16(1711), + 410: uint16(1722), + 411: uint16(1726), + 412: uint16(1729), + 413: uint16(1746), + 414: uint16(3585), + 415: uint16(3586), + 416: uint16(3587), + 417: uint16(3588), + 418: uint16(3589), + 419: uint16(3590), + 420: uint16(3591), + 421: uint16(3592), + 422: uint16(3593), + 423: uint16(3594), + 424: uint16(3595), + 425: uint16(3596), + 426: uint16(3597), + 427: uint16(3598), + 428: uint16(3599), + 429: uint16(3600), + 430: uint16(3601), + 431: uint16(3602), + 432: uint16(3603), + 433: uint16(3604), + 434: uint16(3605), + 435: uint16(3606), + 436: uint16(3607), + 437: uint16(3608), + 438: uint16(3609), + 439: uint16(3610), + 440: uint16(3611), + 441: uint16(3612), + 442: uint16(3613), + 443: uint16(3614), + 444: uint16(3615), + 445: uint16(3616), + 446: uint16(3617), + 447: uint16(3618), + 448: uint16(3619), + 449: uint16(3620), + 450: uint16(3621), + 451: uint16(3622), + 452: uint16(3623), + 453: uint16(3624), + 454: uint16(3625), + 455: uint16(3626), + 456: uint16(3627), + 457: uint16(3628), + 458: uint16(3629), + 459: uint16(3630), + 460: uint16(3631), + 461: uint16(3632), + 462: uint16(3633), + 463: uint16(3634), + 464: uint16(3635), + 465: uint16(3636), + 466: uint16(3637), + 467: uint16(3638), + 468: uint16(3639), + 469: uint16(3640), + 470: uint16(3641), + 471: uint16(3642), + 472: uint16(3647), + 473: uint16(3648), + 474: uint16(3649), + 475: uint16(3650), + 476: uint16(3651), + 477: uint16(3652), + 478: uint16(3653), + 479: uint16(3654), + 480: uint16(3655), + 481: uint16(3656), + 482: uint16(3657), + 483: uint16(3658), + 484: uint16(3659), + 485: uint16(3660), + 486: uint16(3661), + 487: uint16(3662), + 488: uint16(3663), + 489: uint16(3664), + 490: uint16(3665), + 491: uint16(3666), + 492: uint16(3667), + 493: uint16(3668), + 494: uint16(3669), + 495: uint16(3670), + 496: uint16(3671), + 497: uint16(3672), + 498: uint16(3673), + 499: uint16(3674), + 500: uint16(3675), + 501: uint16(7682), + 502: uint16(7683), + 503: uint16(7690), + 504: uint16(7691), + 505: uint16(7710), + 506: uint16(7711), + 507: uint16(7744), + 508: uint16(7745), + 509: uint16(7766), + 510: uint16(7767), + 511: uint16(7776), + 512: uint16(7777), + 513: uint16(7786), + 514: uint16(7787), + 515: uint16(7808), + 516: uint16(7809), + 517: uint16(7810), + 518: uint16(7811), + 519: uint16(7812), + 520: uint16(7813), + 521: uint16(7922), + 522: uint16(7923), + 523: uint16(8204), + 524: uint16(8205), + 525: uint16(8206), + 526: uint16(8207), + 527: uint16(8211), + 528: uint16(8212), + 529: uint16(8213), + 530: uint16(8215), + 531: uint16(8216), + 532: uint16(8217), + 533: uint16(8218), + 534: uint16(8220), + 535: uint16(8221), + 536: uint16(8222), + 537: uint16(8224), + 538: uint16(8225), + 539: uint16(8226), + 540: uint16(8230), + 541: uint16(8240), + 542: uint16(8249), + 543: uint16(8250), + 544: uint16(8319), + 545: uint16(8359), + 546: uint16(8362), + 547: uint16(8363), + 548: uint16(8364), + 549: uint16(8367), + 550: uint16(8470), + 551: uint16(8482), + 552: uint16(8729), + 553: uint16(8730), + 554: uint16(8734), + 555: uint16(8745), + 556: uint16(8776), + 557: uint16(8801), + 558: uint16(8804), + 559: uint16(8805), + 560: uint16(8976), + 561: uint16(8992), + 562: uint16(8993), + 563: uint16(9472), + 564: uint16(9474), + 565: uint16(9484), + 566: uint16(9488), + 567: uint16(9492), + 568: uint16(9496), + 569: uint16(9500), + 570: uint16(9508), + 571: uint16(9516), + 572: uint16(9524), + 573: uint16(9532), + 574: uint16(9552), + 575: uint16(9553), + 576: uint16(9554), + 577: uint16(9555), + 578: uint16(9556), + 579: uint16(9557), + 580: uint16(9558), + 581: uint16(9559), + 582: uint16(9560), + 583: uint16(9561), + 584: uint16(9562), + 585: uint16(9563), + 586: uint16(9564), + 587: uint16(9565), + 588: uint16(9566), + 589: uint16(9567), + 590: uint16(9568), + 591: uint16(9569), + 592: uint16(9570), + 593: uint16(9571), + 594: uint16(9572), + 595: uint16(9573), + 596: uint16(9574), + 597: uint16(9575), + 598: uint16(9576), + 599: uint16(9577), + 600: uint16(9578), + 601: uint16(9579), + 602: uint16(9580), + 603: uint16(9600), + 604: uint16(9604), + 605: uint16(9608), + 606: uint16(9612), + 607: uint16(9616), + 608: uint16(9617), + 609: uint16(9618), + 610: uint16(9619), + 611: uint16(9632), +} + +var _jis0208 = [84][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(65292), + 4: uint16(65294), + 5: uint16(12539), + 6: uint16(65306), + 7: uint16(65307), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(12443), + 11: uint16(12444), + 12: uint16(180), + 13: uint16(65344), + 14: uint16(168), + 15: uint16(65342), + 16: uint16(65507), + 17: uint16(65343), + 18: uint16(12541), + 19: uint16(12542), + 20: uint16(12445), + 21: uint16(12446), + 22: uint16(12291), + 23: uint16(20189), + 24: uint16(12293), + 25: uint16(12294), + 26: uint16(12295), + 27: uint16(12540), + 28: uint16(8213), + 29: uint16(8208), + 30: uint16(65295), + 31: uint16(92), + 32: uint16(12316), + 33: uint16(8214), + 34: uint16(65372), + 35: uint16(8230), + 36: uint16(8229), + 37: uint16(8216), + 38: uint16(8217), + 39: uint16(8220), + 40: uint16(8221), + 41: uint16(65288), + 42: uint16(65289), + 43: uint16(12308), + 44: uint16(12309), + 45: uint16(65339), + 46: uint16(65341), + 47: uint16(65371), + 48: uint16(65373), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(12298), + 52: uint16(12299), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(12302), + 56: uint16(12303), + 57: uint16(12304), + 58: uint16(12305), + 59: uint16(65291), + 60: uint16(8722), + 61: uint16(177), + 62: uint16(215), + 63: uint16(247), + 64: uint16(65309), + 65: uint16(8800), + 66: uint16(65308), + 67: uint16(65310), + 68: uint16(8806), + 69: uint16(8807), + 70: uint16(8734), + 71: uint16(8756), + 72: uint16(9794), + 73: uint16(9792), + 74: uint16(176), + 75: uint16(8242), + 76: uint16(8243), + 77: uint16(8451), + 78: uint16(65509), + 79: uint16(65284), + 80: uint16(162), + 81: uint16(163), + 82: uint16(65285), + 83: uint16(65283), + 84: uint16(65286), + 85: uint16(65290), + 86: uint16(65312), + 87: uint16(167), + 88: uint16(9734), + 89: uint16(9733), + 90: uint16(9675), + 91: uint16(9679), + 92: uint16(9678), + 93: uint16(9671), + }, + 1: { + 0: uint16(9670), + 1: uint16(9633), + 2: uint16(9632), + 3: uint16(9651), + 4: uint16(9650), + 5: uint16(9661), + 6: uint16(9660), + 7: uint16(8251), + 8: uint16(12306), + 9: uint16(8594), + 10: uint16(8592), + 11: uint16(8593), + 12: uint16(8595), + 13: uint16(12307), + 25: uint16(8712), + 26: uint16(8715), + 27: uint16(8838), + 28: uint16(8839), + 29: uint16(8834), + 30: uint16(8835), + 31: uint16(8746), + 32: uint16(8745), + 41: uint16(8743), + 42: uint16(8744), + 43: uint16(172), + 44: uint16(8658), + 45: uint16(8660), + 46: uint16(8704), + 47: uint16(8707), + 59: uint16(8736), + 60: uint16(8869), + 61: uint16(8978), + 62: uint16(8706), + 63: uint16(8711), + 64: uint16(8801), + 65: uint16(8786), + 66: uint16(8810), + 67: uint16(8811), + 68: uint16(8730), + 69: uint16(8765), + 70: uint16(8733), + 71: uint16(8757), + 72: uint16(8747), + 73: uint16(8748), + 81: uint16(8491), + 82: uint16(8240), + 83: uint16(9839), + 84: uint16(9837), + 85: uint16(9834), + 86: uint16(8224), + 87: uint16(8225), + 88: uint16(182), + 93: uint16(9711), + }, + 2: { + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + }, + 3: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 4: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 5: { + 0: uint16(913), + 1: uint16(914), + 2: uint16(915), + 3: uint16(916), + 4: uint16(917), + 5: uint16(918), + 6: uint16(919), + 7: uint16(920), + 8: uint16(921), + 9: uint16(922), + 10: uint16(923), + 11: uint16(924), + 12: uint16(925), + 13: uint16(926), + 14: uint16(927), + 15: uint16(928), + 16: uint16(929), + 17: uint16(931), + 18: uint16(932), + 19: uint16(933), + 20: uint16(934), + 21: uint16(935), + 22: uint16(936), + 23: uint16(937), + 32: uint16(945), + 33: uint16(946), + 34: uint16(947), + 35: uint16(948), + 36: uint16(949), + 37: uint16(950), + 38: uint16(951), + 39: uint16(952), + 40: uint16(953), + 41: uint16(954), + 42: uint16(955), + 43: uint16(956), + 44: uint16(957), + 45: uint16(958), + 46: uint16(959), + 47: uint16(960), + 48: uint16(961), + 49: uint16(963), + 50: uint16(964), + 51: uint16(965), + 52: uint16(966), + 53: uint16(967), + 54: uint16(968), + 55: uint16(969), + }, + 6: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 7: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + }, + 8: {}, + 9: {}, + 10: {}, + 11: {}, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(20124), + 1: uint16(21782), + 2: uint16(23043), + 3: uint16(38463), + 4: uint16(21696), + 5: uint16(24859), + 6: uint16(25384), + 7: uint16(23030), + 8: uint16(36898), + 9: uint16(33909), + 10: uint16(33564), + 11: uint16(31312), + 12: uint16(24746), + 13: uint16(25569), + 14: uint16(28197), + 15: uint16(26093), + 16: uint16(33894), + 17: uint16(33446), + 18: uint16(39925), + 19: uint16(26771), + 20: uint16(22311), + 21: uint16(26017), + 22: uint16(25201), + 23: uint16(23451), + 24: uint16(22992), + 25: uint16(34427), + 26: uint16(39156), + 27: uint16(32098), + 28: uint16(32190), + 29: uint16(39822), + 30: uint16(25110), + 31: uint16(31903), + 32: uint16(34999), + 33: uint16(23433), + 34: uint16(24245), + 35: uint16(25353), + 36: uint16(26263), + 37: uint16(26696), + 38: uint16(38343), + 39: uint16(38797), + 40: uint16(26447), + 41: uint16(20197), + 42: uint16(20234), + 43: uint16(20301), + 44: uint16(20381), + 45: uint16(20553), + 46: uint16(22258), + 47: uint16(22839), + 48: uint16(22996), + 49: uint16(23041), + 50: uint16(23561), + 51: uint16(24799), + 52: uint16(24847), + 53: uint16(24944), + 54: uint16(26131), + 55: uint16(26885), + 56: uint16(28858), + 57: uint16(30031), + 58: uint16(30064), + 59: uint16(31227), + 60: uint16(32173), + 61: uint16(32239), + 62: uint16(32963), + 63: uint16(33806), + 64: uint16(34915), + 65: uint16(35586), + 66: uint16(36949), + 67: uint16(36986), + 68: uint16(21307), + 69: uint16(20117), + 70: uint16(20133), + 71: uint16(22495), + 72: uint16(32946), + 73: uint16(37057), + 74: uint16(30959), + 75: uint16(19968), + 76: uint16(22769), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(31282), + 80: uint16(33576), + 81: uint16(33419), + 82: uint16(39983), + 83: uint16(20801), + 84: uint16(21360), + 85: uint16(21693), + 86: uint16(21729), + 87: uint16(22240), + 88: uint16(23035), + 89: uint16(24341), + 90: uint16(39154), + 91: uint16(28139), + 92: uint16(32996), + 93: uint16(34093), + }, + 16: { + 0: uint16(38498), + 1: uint16(38512), + 2: uint16(38560), + 3: uint16(38907), + 4: uint16(21515), + 5: uint16(21491), + 6: uint16(23431), + 7: uint16(28879), + 8: uint16(32701), + 9: uint16(36802), + 10: uint16(38632), + 11: uint16(21359), + 12: uint16(40284), + 13: uint16(31418), + 14: uint16(19985), + 15: uint16(30867), + 16: uint16(33276), + 17: uint16(28198), + 18: uint16(22040), + 19: uint16(21764), + 20: uint16(27421), + 21: uint16(34074), + 22: uint16(39995), + 23: uint16(23013), + 24: uint16(21417), + 25: uint16(28006), + 26: uint16(29916), + 27: uint16(38287), + 28: uint16(22082), + 29: uint16(20113), + 30: uint16(36939), + 31: uint16(38642), + 32: uint16(33615), + 33: uint16(39180), + 34: uint16(21473), + 35: uint16(21942), + 36: uint16(23344), + 37: uint16(24433), + 38: uint16(26144), + 39: uint16(26355), + 40: uint16(26628), + 41: uint16(27704), + 42: uint16(27891), + 43: uint16(27945), + 44: uint16(29787), + 45: uint16(30408), + 46: uint16(31310), + 47: uint16(38964), + 48: uint16(33521), + 49: uint16(34907), + 50: uint16(35424), + 51: uint16(37613), + 52: uint16(28082), + 53: uint16(30123), + 54: uint16(30410), + 55: uint16(39365), + 56: uint16(24742), + 57: uint16(35585), + 58: uint16(36234), + 59: uint16(38322), + 60: uint16(27022), + 61: uint16(21421), + 62: uint16(20870), + 63: uint16(22290), + 64: uint16(22576), + 65: uint16(22852), + 66: uint16(23476), + 67: uint16(24310), + 68: uint16(24616), + 69: uint16(25513), + 70: uint16(25588), + 71: uint16(27839), + 72: uint16(28436), + 73: uint16(28814), + 74: uint16(28948), + 75: uint16(29017), + 76: uint16(29141), + 77: uint16(29503), + 78: uint16(32257), + 79: uint16(33398), + 80: uint16(33489), + 81: uint16(34199), + 82: uint16(36960), + 83: uint16(37467), + 84: uint16(40219), + 85: uint16(22633), + 86: uint16(26044), + 87: uint16(27738), + 88: uint16(29989), + 89: uint16(20985), + 90: uint16(22830), + 91: uint16(22885), + 92: uint16(24448), + 93: uint16(24540), + }, + 17: { + 0: uint16(25276), + 1: uint16(26106), + 2: uint16(27178), + 3: uint16(27431), + 4: uint16(27572), + 5: uint16(29579), + 6: uint16(32705), + 7: uint16(35158), + 8: uint16(40236), + 9: uint16(40206), + 10: uint16(40644), + 11: uint16(23713), + 12: uint16(27798), + 13: uint16(33659), + 14: uint16(20740), + 15: uint16(23627), + 16: uint16(25014), + 17: uint16(33222), + 18: uint16(26742), + 19: uint16(29281), + 20: uint16(20057), + 21: uint16(20474), + 22: uint16(21368), + 23: uint16(24681), + 24: uint16(28201), + 25: uint16(31311), + 26: uint16(38899), + 27: uint16(19979), + 28: uint16(21270), + 29: uint16(20206), + 30: uint16(20309), + 31: uint16(20285), + 32: uint16(20385), + 33: uint16(20339), + 34: uint16(21152), + 35: uint16(21487), + 36: uint16(22025), + 37: uint16(22799), + 38: uint16(23233), + 39: uint16(23478), + 40: uint16(23521), + 41: uint16(31185), + 42: uint16(26247), + 43: uint16(26524), + 44: uint16(26550), + 45: uint16(27468), + 46: uint16(27827), + 47: uint16(28779), + 48: uint16(29634), + 49: uint16(31117), + 50: uint16(31166), + 51: uint16(31292), + 52: uint16(31623), + 53: uint16(33457), + 54: uint16(33499), + 55: uint16(33540), + 56: uint16(33655), + 57: uint16(33775), + 58: uint16(33747), + 59: uint16(34662), + 60: uint16(35506), + 61: uint16(22057), + 62: uint16(36008), + 63: uint16(36838), + 64: uint16(36942), + 65: uint16(38686), + 66: uint16(34442), + 67: uint16(20420), + 68: uint16(23784), + 69: uint16(25105), + 70: uint16(29273), + 71: uint16(30011), + 72: uint16(33253), + 73: uint16(33469), + 74: uint16(34558), + 75: uint16(36032), + 76: uint16(38597), + 77: uint16(39187), + 78: uint16(39381), + 79: uint16(20171), + 80: uint16(20250), + 81: uint16(35299), + 82: uint16(22238), + 83: uint16(22602), + 84: uint16(22730), + 85: uint16(24315), + 86: uint16(24555), + 87: uint16(24618), + 88: uint16(24724), + 89: uint16(24674), + 90: uint16(25040), + 91: uint16(25106), + 92: uint16(25296), + 93: uint16(25913), + }, + 18: { + 0: uint16(39745), + 1: uint16(26214), + 2: uint16(26800), + 3: uint16(28023), + 4: uint16(28784), + 5: uint16(30028), + 6: uint16(30342), + 7: uint16(32117), + 8: uint16(33445), + 9: uint16(34809), + 10: uint16(38283), + 11: uint16(38542), + 12: uint16(35997), + 13: uint16(20977), + 14: uint16(21182), + 15: uint16(22806), + 16: uint16(21683), + 17: uint16(23475), + 18: uint16(23830), + 19: uint16(24936), + 20: uint16(27010), + 21: uint16(28079), + 22: uint16(30861), + 23: uint16(33995), + 24: uint16(34903), + 25: uint16(35442), + 26: uint16(37799), + 27: uint16(39608), + 28: uint16(28012), + 29: uint16(39336), + 30: uint16(34521), + 31: uint16(22435), + 32: uint16(26623), + 33: uint16(34510), + 34: uint16(37390), + 35: uint16(21123), + 36: uint16(22151), + 37: uint16(21508), + 38: uint16(24275), + 39: uint16(25313), + 40: uint16(25785), + 41: uint16(26684), + 42: uint16(26680), + 43: uint16(27579), + 44: uint16(29554), + 45: uint16(30906), + 46: uint16(31339), + 47: uint16(35226), + 48: uint16(35282), + 49: uint16(36203), + 50: uint16(36611), + 51: uint16(37101), + 52: uint16(38307), + 53: uint16(38548), + 54: uint16(38761), + 55: uint16(23398), + 56: uint16(23731), + 57: uint16(27005), + 58: uint16(38989), + 59: uint16(38990), + 60: uint16(25499), + 61: uint16(31520), + 62: uint16(27179), + 63: uint16(27263), + 64: uint16(26806), + 65: uint16(39949), + 66: uint16(28511), + 67: uint16(21106), + 68: uint16(21917), + 69: uint16(24688), + 70: uint16(25324), + 71: uint16(27963), + 72: uint16(28167), + 73: uint16(28369), + 74: uint16(33883), + 75: uint16(35088), + 76: uint16(36676), + 77: uint16(19988), + 78: uint16(39993), + 79: uint16(21494), + 80: uint16(26907), + 81: uint16(27194), + 82: uint16(38788), + 83: uint16(26666), + 84: uint16(20828), + 85: uint16(31427), + 86: uint16(33970), + 87: uint16(37340), + 88: uint16(37772), + 89: uint16(22107), + 90: uint16(40232), + 91: uint16(26658), + 92: uint16(33541), + 93: uint16(33841), + }, + 19: { + 0: uint16(31909), + 1: uint16(21000), + 2: uint16(33477), + 3: uint16(29926), + 4: uint16(20094), + 5: uint16(20355), + 6: uint16(20896), + 7: uint16(23506), + 8: uint16(21002), + 9: uint16(21208), + 10: uint16(21223), + 11: uint16(24059), + 12: uint16(21914), + 13: uint16(22570), + 14: uint16(23014), + 15: uint16(23436), + 16: uint16(23448), + 17: uint16(23515), + 18: uint16(24178), + 19: uint16(24185), + 20: uint16(24739), + 21: uint16(24863), + 22: uint16(24931), + 23: uint16(25022), + 24: uint16(25563), + 25: uint16(25954), + 26: uint16(26577), + 27: uint16(26707), + 28: uint16(26874), + 29: uint16(27454), + 30: uint16(27475), + 31: uint16(27735), + 32: uint16(28450), + 33: uint16(28567), + 34: uint16(28485), + 35: uint16(29872), + 36: uint16(29976), + 37: uint16(30435), + 38: uint16(30475), + 39: uint16(31487), + 40: uint16(31649), + 41: uint16(31777), + 42: uint16(32233), + 43: uint16(32566), + 44: uint16(32752), + 45: uint16(32925), + 46: uint16(33382), + 47: uint16(33694), + 48: uint16(35251), + 49: uint16(35532), + 50: uint16(36011), + 51: uint16(36996), + 52: uint16(37969), + 53: uint16(38291), + 54: uint16(38289), + 55: uint16(38306), + 56: uint16(38501), + 57: uint16(38867), + 58: uint16(39208), + 59: uint16(33304), + 60: uint16(20024), + 61: uint16(21547), + 62: uint16(23736), + 63: uint16(24012), + 64: uint16(29609), + 65: uint16(30284), + 66: uint16(30524), + 67: uint16(23721), + 68: uint16(32747), + 69: uint16(36107), + 70: uint16(38593), + 71: uint16(38929), + 72: uint16(38996), + 73: uint16(39000), + 74: uint16(20225), + 75: uint16(20238), + 76: uint16(21361), + 77: uint16(21916), + 78: uint16(22120), + 79: uint16(22522), + 80: uint16(22855), + 81: uint16(23305), + 82: uint16(23492), + 83: uint16(23696), + 84: uint16(24076), + 85: uint16(24190), + 86: uint16(24524), + 87: uint16(25582), + 88: uint16(26426), + 89: uint16(26071), + 90: uint16(26082), + 91: uint16(26399), + 92: uint16(26827), + 93: uint16(26820), + }, + 20: { + 0: uint16(27231), + 1: uint16(24112), + 2: uint16(27589), + 3: uint16(27671), + 4: uint16(27773), + 5: uint16(30079), + 6: uint16(31048), + 7: uint16(23395), + 8: uint16(31232), + 9: uint16(32000), + 10: uint16(24509), + 11: uint16(35215), + 12: uint16(35352), + 13: uint16(36020), + 14: uint16(36215), + 15: uint16(36556), + 16: uint16(36637), + 17: uint16(39138), + 18: uint16(39438), + 19: uint16(39740), + 20: uint16(20096), + 21: uint16(20605), + 22: uint16(20736), + 23: uint16(22931), + 24: uint16(23452), + 25: uint16(25135), + 26: uint16(25216), + 27: uint16(25836), + 28: uint16(27450), + 29: uint16(29344), + 30: uint16(30097), + 31: uint16(31047), + 32: uint16(32681), + 33: uint16(34811), + 34: uint16(35516), + 35: uint16(35696), + 36: uint16(25516), + 37: uint16(33738), + 38: uint16(38816), + 39: uint16(21513), + 40: uint16(21507), + 41: uint16(21931), + 42: uint16(26708), + 43: uint16(27224), + 44: uint16(35440), + 45: uint16(30759), + 46: uint16(26485), + 47: uint16(40653), + 48: uint16(21364), + 49: uint16(23458), + 50: uint16(33050), + 51: uint16(34384), + 52: uint16(36870), + 53: uint16(19992), + 54: uint16(20037), + 55: uint16(20167), + 56: uint16(20241), + 57: uint16(21450), + 58: uint16(21560), + 59: uint16(23470), + 60: uint16(24339), + 61: uint16(24613), + 62: uint16(25937), + 63: uint16(26429), + 64: uint16(27714), + 65: uint16(27762), + 66: uint16(27875), + 67: uint16(28792), + 68: uint16(29699), + 69: uint16(31350), + 70: uint16(31406), + 71: uint16(31496), + 72: uint16(32026), + 73: uint16(31998), + 74: uint16(32102), + 75: uint16(26087), + 76: uint16(29275), + 77: uint16(21435), + 78: uint16(23621), + 79: uint16(24040), + 80: uint16(25298), + 81: uint16(25312), + 82: uint16(25369), + 83: uint16(28192), + 84: uint16(34394), + 85: uint16(35377), + 86: uint16(36317), + 87: uint16(37624), + 88: uint16(28417), + 89: uint16(31142), + 90: uint16(39770), + 91: uint16(20136), + 92: uint16(20139), + 93: uint16(20140), + }, + 21: { + 0: uint16(20379), + 1: uint16(20384), + 2: uint16(20689), + 3: uint16(20807), + 4: uint16(31478), + 5: uint16(20849), + 6: uint16(20982), + 7: uint16(21332), + 8: uint16(21281), + 9: uint16(21375), + 10: uint16(21483), + 11: uint16(21932), + 12: uint16(22659), + 13: uint16(23777), + 14: uint16(24375), + 15: uint16(24394), + 16: uint16(24623), + 17: uint16(24656), + 18: uint16(24685), + 19: uint16(25375), + 20: uint16(25945), + 21: uint16(27211), + 22: uint16(27841), + 23: uint16(29378), + 24: uint16(29421), + 25: uint16(30703), + 26: uint16(33016), + 27: uint16(33029), + 28: uint16(33288), + 29: uint16(34126), + 30: uint16(37111), + 31: uint16(37857), + 32: uint16(38911), + 33: uint16(39255), + 34: uint16(39514), + 35: uint16(20208), + 36: uint16(20957), + 37: uint16(23597), + 38: uint16(26241), + 39: uint16(26989), + 40: uint16(23616), + 41: uint16(26354), + 42: uint16(26997), + 43: uint16(29577), + 44: uint16(26704), + 45: uint16(31873), + 46: uint16(20677), + 47: uint16(21220), + 48: uint16(22343), + 49: uint16(24062), + 50: uint16(37670), + 51: uint16(26020), + 52: uint16(27427), + 53: uint16(27453), + 54: uint16(29748), + 55: uint16(31105), + 56: uint16(31165), + 57: uint16(31563), + 58: uint16(32202), + 59: uint16(33465), + 60: uint16(33740), + 61: uint16(34943), + 62: uint16(35167), + 63: uint16(35641), + 64: uint16(36817), + 65: uint16(37329), + 66: uint16(21535), + 67: uint16(37504), + 68: uint16(20061), + 69: uint16(20534), + 70: uint16(21477), + 71: uint16(21306), + 72: uint16(29399), + 73: uint16(29590), + 74: uint16(30697), + 75: uint16(33510), + 76: uint16(36527), + 77: uint16(39366), + 78: uint16(39368), + 79: uint16(39378), + 80: uint16(20855), + 81: uint16(24858), + 82: uint16(34398), + 83: uint16(21936), + 84: uint16(31354), + 85: uint16(20598), + 86: uint16(23507), + 87: uint16(36935), + 88: uint16(38533), + 89: uint16(20018), + 90: uint16(27355), + 91: uint16(37351), + 92: uint16(23633), + 93: uint16(23624), + }, + 22: { + 0: uint16(25496), + 1: uint16(31391), + 2: uint16(27795), + 3: uint16(38772), + 4: uint16(36705), + 5: uint16(31402), + 6: uint16(29066), + 7: uint16(38536), + 8: uint16(31874), + 9: uint16(26647), + 10: uint16(32368), + 11: uint16(26705), + 12: uint16(37740), + 13: uint16(21234), + 14: uint16(21531), + 15: uint16(34219), + 16: uint16(35347), + 17: uint16(32676), + 18: uint16(36557), + 19: uint16(37089), + 20: uint16(21350), + 21: uint16(34952), + 22: uint16(31041), + 23: uint16(20418), + 24: uint16(20670), + 25: uint16(21009), + 26: uint16(20804), + 27: uint16(21843), + 28: uint16(22317), + 29: uint16(29674), + 30: uint16(22411), + 31: uint16(22865), + 32: uint16(24418), + 33: uint16(24452), + 34: uint16(24693), + 35: uint16(24950), + 36: uint16(24935), + 37: uint16(25001), + 38: uint16(25522), + 39: uint16(25658), + 40: uint16(25964), + 41: uint16(26223), + 42: uint16(26690), + 43: uint16(28179), + 44: uint16(30054), + 45: uint16(31293), + 46: uint16(31995), + 47: uint16(32076), + 48: uint16(32153), + 49: uint16(32331), + 50: uint16(32619), + 51: uint16(33550), + 52: uint16(33610), + 53: uint16(34509), + 54: uint16(35336), + 55: uint16(35427), + 56: uint16(35686), + 57: uint16(36605), + 58: uint16(38938), + 59: uint16(40335), + 60: uint16(33464), + 61: uint16(36814), + 62: uint16(39912), + 63: uint16(21127), + 64: uint16(25119), + 65: uint16(25731), + 66: uint16(28608), + 67: uint16(38553), + 68: uint16(26689), + 69: uint16(20625), + 70: uint16(27424), + 71: uint16(27770), + 72: uint16(28500), + 73: uint16(31348), + 74: uint16(32080), + 75: uint16(34880), + 76: uint16(35363), + 77: uint16(26376), + 78: uint16(20214), + 79: uint16(20537), + 80: uint16(20518), + 81: uint16(20581), + 82: uint16(20860), + 83: uint16(21048), + 84: uint16(21091), + 85: uint16(21927), + 86: uint16(22287), + 87: uint16(22533), + 88: uint16(23244), + 89: uint16(24314), + 90: uint16(25010), + 91: uint16(25080), + 92: uint16(25331), + 93: uint16(25458), + }, + 23: { + 0: uint16(26908), + 1: uint16(27177), + 2: uint16(29309), + 3: uint16(29356), + 4: uint16(29486), + 5: uint16(30740), + 6: uint16(30831), + 7: uint16(32121), + 8: uint16(30476), + 9: uint16(32937), + 10: uint16(35211), + 11: uint16(35609), + 12: uint16(36066), + 13: uint16(36562), + 14: uint16(36963), + 15: uint16(37749), + 16: uint16(38522), + 17: uint16(38997), + 18: uint16(39443), + 19: uint16(40568), + 20: uint16(20803), + 21: uint16(21407), + 22: uint16(21427), + 23: uint16(24187), + 24: uint16(24358), + 25: uint16(28187), + 26: uint16(28304), + 27: uint16(29572), + 28: uint16(29694), + 29: uint16(32067), + 30: uint16(33335), + 31: uint16(35328), + 32: uint16(35578), + 33: uint16(38480), + 34: uint16(20046), + 35: uint16(20491), + 36: uint16(21476), + 37: uint16(21628), + 38: uint16(22266), + 39: uint16(22993), + 40: uint16(23396), + 41: uint16(24049), + 42: uint16(24235), + 43: uint16(24359), + 44: uint16(25144), + 45: uint16(25925), + 46: uint16(26543), + 47: uint16(28246), + 48: uint16(29392), + 49: uint16(31946), + 50: uint16(34996), + 51: uint16(32929), + 52: uint16(32993), + 53: uint16(33776), + 54: uint16(34382), + 55: uint16(35463), + 56: uint16(36328), + 57: uint16(37431), + 58: uint16(38599), + 59: uint16(39015), + 60: uint16(40723), + 61: uint16(20116), + 62: uint16(20114), + 63: uint16(20237), + 64: uint16(21320), + 65: uint16(21577), + 66: uint16(21566), + 67: uint16(23087), + 68: uint16(24460), + 69: uint16(24481), + 70: uint16(24735), + 71: uint16(26791), + 72: uint16(27278), + 73: uint16(29786), + 74: uint16(30849), + 75: uint16(35486), + 76: uint16(35492), + 77: uint16(35703), + 78: uint16(37264), + 79: uint16(20062), + 80: uint16(39881), + 81: uint16(20132), + 82: uint16(20348), + 83: uint16(20399), + 84: uint16(20505), + 85: uint16(20502), + 86: uint16(20809), + 87: uint16(20844), + 88: uint16(21151), + 89: uint16(21177), + 90: uint16(21246), + 91: uint16(21402), + 92: uint16(21475), + 93: uint16(21521), + }, + 24: { + 0: uint16(21518), + 1: uint16(21897), + 2: uint16(22353), + 3: uint16(22434), + 4: uint16(22909), + 5: uint16(23380), + 6: uint16(23389), + 7: uint16(23439), + 8: uint16(24037), + 9: uint16(24039), + 10: uint16(24055), + 11: uint16(24184), + 12: uint16(24195), + 13: uint16(24218), + 14: uint16(24247), + 15: uint16(24344), + 16: uint16(24658), + 17: uint16(24908), + 18: uint16(25239), + 19: uint16(25304), + 20: uint16(25511), + 21: uint16(25915), + 22: uint16(26114), + 23: uint16(26179), + 24: uint16(26356), + 25: uint16(26477), + 26: uint16(26657), + 27: uint16(26775), + 28: uint16(27083), + 29: uint16(27743), + 30: uint16(27946), + 31: uint16(28009), + 32: uint16(28207), + 33: uint16(28317), + 34: uint16(30002), + 35: uint16(30343), + 36: uint16(30828), + 37: uint16(31295), + 38: uint16(31968), + 39: uint16(32005), + 40: uint16(32024), + 41: uint16(32094), + 42: uint16(32177), + 43: uint16(32789), + 44: uint16(32771), + 45: uint16(32943), + 46: uint16(32945), + 47: uint16(33108), + 48: uint16(33167), + 49: uint16(33322), + 50: uint16(33618), + 51: uint16(34892), + 52: uint16(34913), + 53: uint16(35611), + 54: uint16(36002), + 55: uint16(36092), + 56: uint16(37066), + 57: uint16(37237), + 58: uint16(37489), + 59: uint16(30783), + 60: uint16(37628), + 61: uint16(38308), + 62: uint16(38477), + 63: uint16(38917), + 64: uint16(39321), + 65: uint16(39640), + 66: uint16(40251), + 67: uint16(21083), + 68: uint16(21163), + 69: uint16(21495), + 70: uint16(21512), + 71: uint16(22741), + 72: uint16(25335), + 73: uint16(28640), + 74: uint16(35946), + 75: uint16(36703), + 76: uint16(40633), + 77: uint16(20811), + 78: uint16(21051), + 79: uint16(21578), + 80: uint16(22269), + 81: uint16(31296), + 82: uint16(37239), + 83: uint16(40288), + 84: uint16(40658), + 85: uint16(29508), + 86: uint16(28425), + 87: uint16(33136), + 88: uint16(29969), + 89: uint16(24573), + 90: uint16(24794), + 91: uint16(39592), + 92: uint16(29403), + 93: uint16(36796), + }, + 25: { + 0: uint16(27492), + 1: uint16(38915), + 2: uint16(20170), + 3: uint16(22256), + 4: uint16(22372), + 5: uint16(22718), + 6: uint16(23130), + 7: uint16(24680), + 8: uint16(25031), + 9: uint16(26127), + 10: uint16(26118), + 11: uint16(26681), + 12: uint16(26801), + 13: uint16(28151), + 14: uint16(30165), + 15: uint16(32058), + 16: uint16(33390), + 17: uint16(39746), + 18: uint16(20123), + 19: uint16(20304), + 20: uint16(21449), + 21: uint16(21766), + 22: uint16(23919), + 23: uint16(24038), + 24: uint16(24046), + 25: uint16(26619), + 26: uint16(27801), + 27: uint16(29811), + 28: uint16(30722), + 29: uint16(35408), + 30: uint16(37782), + 31: uint16(35039), + 32: uint16(22352), + 33: uint16(24231), + 34: uint16(25387), + 35: uint16(20661), + 36: uint16(20652), + 37: uint16(20877), + 38: uint16(26368), + 39: uint16(21705), + 40: uint16(22622), + 41: uint16(22971), + 42: uint16(23472), + 43: uint16(24425), + 44: uint16(25165), + 45: uint16(25505), + 46: uint16(26685), + 47: uint16(27507), + 48: uint16(28168), + 49: uint16(28797), + 50: uint16(37319), + 51: uint16(29312), + 52: uint16(30741), + 53: uint16(30758), + 54: uint16(31085), + 55: uint16(25998), + 56: uint16(32048), + 57: uint16(33756), + 58: uint16(35009), + 59: uint16(36617), + 60: uint16(38555), + 61: uint16(21092), + 62: uint16(22312), + 63: uint16(26448), + 64: uint16(32618), + 65: uint16(36001), + 66: uint16(20916), + 67: uint16(22338), + 68: uint16(38442), + 69: uint16(22586), + 70: uint16(27018), + 71: uint16(32948), + 72: uint16(21682), + 73: uint16(23822), + 74: uint16(22524), + 75: uint16(30869), + 76: uint16(40442), + 77: uint16(20316), + 78: uint16(21066), + 79: uint16(21643), + 80: uint16(25662), + 81: uint16(26152), + 82: uint16(26388), + 83: uint16(26613), + 84: uint16(31364), + 85: uint16(31574), + 86: uint16(32034), + 87: uint16(37679), + 88: uint16(26716), + 89: uint16(39853), + 90: uint16(31545), + 91: uint16(21273), + 92: uint16(20874), + 93: uint16(21047), + }, + 26: { + 0: uint16(23519), + 1: uint16(25334), + 2: uint16(25774), + 3: uint16(25830), + 4: uint16(26413), + 5: uint16(27578), + 6: uint16(34217), + 7: uint16(38609), + 8: uint16(30352), + 9: uint16(39894), + 10: uint16(25420), + 11: uint16(37638), + 12: uint16(39851), + 13: uint16(30399), + 14: uint16(26194), + 15: uint16(19977), + 16: uint16(20632), + 17: uint16(21442), + 18: uint16(23665), + 19: uint16(24808), + 20: uint16(25746), + 21: uint16(25955), + 22: uint16(26719), + 23: uint16(29158), + 24: uint16(29642), + 25: uint16(29987), + 26: uint16(31639), + 27: uint16(32386), + 28: uint16(34453), + 29: uint16(35715), + 30: uint16(36059), + 31: uint16(37240), + 32: uint16(39184), + 33: uint16(26028), + 34: uint16(26283), + 35: uint16(27531), + 36: uint16(20181), + 37: uint16(20180), + 38: uint16(20282), + 39: uint16(20351), + 40: uint16(21050), + 41: uint16(21496), + 42: uint16(21490), + 43: uint16(21987), + 44: uint16(22235), + 45: uint16(22763), + 46: uint16(22987), + 47: uint16(22985), + 48: uint16(23039), + 49: uint16(23376), + 50: uint16(23629), + 51: uint16(24066), + 52: uint16(24107), + 53: uint16(24535), + 54: uint16(24605), + 55: uint16(25351), + 56: uint16(25903), + 57: uint16(23388), + 58: uint16(26031), + 59: uint16(26045), + 60: uint16(26088), + 61: uint16(26525), + 62: uint16(27490), + 63: uint16(27515), + 64: uint16(27663), + 65: uint16(29509), + 66: uint16(31049), + 67: uint16(31169), + 68: uint16(31992), + 69: uint16(32025), + 70: uint16(32043), + 71: uint16(32930), + 72: uint16(33026), + 73: uint16(33267), + 74: uint16(35222), + 75: uint16(35422), + 76: uint16(35433), + 77: uint16(35430), + 78: uint16(35468), + 79: uint16(35566), + 80: uint16(36039), + 81: uint16(36060), + 82: uint16(38604), + 83: uint16(39164), + 84: uint16(27503), + 85: uint16(20107), + 86: uint16(20284), + 87: uint16(20365), + 88: uint16(20816), + 89: uint16(23383), + 90: uint16(23546), + 91: uint16(24904), + 92: uint16(25345), + 93: uint16(26178), + }, + 27: { + 0: uint16(27425), + 1: uint16(28363), + 2: uint16(27835), + 3: uint16(29246), + 4: uint16(29885), + 5: uint16(30164), + 6: uint16(30913), + 7: uint16(31034), + 8: uint16(32780), + 9: uint16(32819), + 10: uint16(33258), + 11: uint16(33940), + 12: uint16(36766), + 13: uint16(27728), + 14: uint16(40575), + 15: uint16(24335), + 16: uint16(35672), + 17: uint16(40235), + 18: uint16(31482), + 19: uint16(36600), + 20: uint16(23437), + 21: uint16(38635), + 22: uint16(19971), + 23: uint16(21489), + 24: uint16(22519), + 25: uint16(22833), + 26: uint16(23241), + 27: uint16(23460), + 28: uint16(24713), + 29: uint16(28287), + 30: uint16(28422), + 31: uint16(30142), + 32: uint16(36074), + 33: uint16(23455), + 34: uint16(34048), + 35: uint16(31712), + 36: uint16(20594), + 37: uint16(26612), + 38: uint16(33437), + 39: uint16(23649), + 40: uint16(34122), + 41: uint16(32286), + 42: uint16(33294), + 43: uint16(20889), + 44: uint16(23556), + 45: uint16(25448), + 46: uint16(36198), + 47: uint16(26012), + 48: uint16(29038), + 49: uint16(31038), + 50: uint16(32023), + 51: uint16(32773), + 52: uint16(35613), + 53: uint16(36554), + 54: uint16(36974), + 55: uint16(34503), + 56: uint16(37034), + 57: uint16(20511), + 58: uint16(21242), + 59: uint16(23610), + 60: uint16(26451), + 61: uint16(28796), + 62: uint16(29237), + 63: uint16(37196), + 64: uint16(37320), + 65: uint16(37675), + 66: uint16(33509), + 67: uint16(23490), + 68: uint16(24369), + 69: uint16(24825), + 70: uint16(20027), + 71: uint16(21462), + 72: uint16(23432), + 73: uint16(25163), + 74: uint16(26417), + 75: uint16(27530), + 76: uint16(29417), + 77: uint16(29664), + 78: uint16(31278), + 79: uint16(33131), + 80: uint16(36259), + 81: uint16(37202), + 82: uint16(39318), + 83: uint16(20754), + 84: uint16(21463), + 85: uint16(21610), + 86: uint16(23551), + 87: uint16(25480), + 88: uint16(27193), + 89: uint16(32172), + 90: uint16(38656), + 91: uint16(22234), + 92: uint16(21454), + 93: uint16(21608), + }, + 28: { + 0: uint16(23447), + 1: uint16(23601), + 2: uint16(24030), + 3: uint16(20462), + 4: uint16(24833), + 5: uint16(25342), + 6: uint16(27954), + 7: uint16(31168), + 8: uint16(31179), + 9: uint16(32066), + 10: uint16(32333), + 11: uint16(32722), + 12: uint16(33261), + 13: uint16(33311), + 14: uint16(33936), + 15: uint16(34886), + 16: uint16(35186), + 17: uint16(35728), + 18: uint16(36468), + 19: uint16(36655), + 20: uint16(36913), + 21: uint16(37195), + 22: uint16(37228), + 23: uint16(38598), + 24: uint16(37276), + 25: uint16(20160), + 26: uint16(20303), + 27: uint16(20805), + 28: uint16(21313), + 29: uint16(24467), + 30: uint16(25102), + 31: uint16(26580), + 32: uint16(27713), + 33: uint16(28171), + 34: uint16(29539), + 35: uint16(32294), + 36: uint16(37325), + 37: uint16(37507), + 38: uint16(21460), + 39: uint16(22809), + 40: uint16(23487), + 41: uint16(28113), + 42: uint16(31069), + 43: uint16(32302), + 44: uint16(31899), + 45: uint16(22654), + 46: uint16(29087), + 47: uint16(20986), + 48: uint16(34899), + 49: uint16(36848), + 50: uint16(20426), + 51: uint16(23803), + 52: uint16(26149), + 53: uint16(30636), + 54: uint16(31459), + 55: uint16(33308), + 56: uint16(39423), + 57: uint16(20934), + 58: uint16(24490), + 59: uint16(26092), + 60: uint16(26991), + 61: uint16(27529), + 62: uint16(28147), + 63: uint16(28310), + 64: uint16(28516), + 65: uint16(30462), + 66: uint16(32020), + 67: uint16(24033), + 68: uint16(36981), + 69: uint16(37255), + 70: uint16(38918), + 71: uint16(20966), + 72: uint16(21021), + 73: uint16(25152), + 74: uint16(26257), + 75: uint16(26329), + 76: uint16(28186), + 77: uint16(24246), + 78: uint16(32210), + 79: uint16(32626), + 80: uint16(26360), + 81: uint16(34223), + 82: uint16(34295), + 83: uint16(35576), + 84: uint16(21161), + 85: uint16(21465), + 86: uint16(22899), + 87: uint16(24207), + 88: uint16(24464), + 89: uint16(24661), + 90: uint16(37604), + 91: uint16(38500), + 92: uint16(20663), + 93: uint16(20767), + }, + 29: { + 0: uint16(21213), + 1: uint16(21280), + 2: uint16(21319), + 3: uint16(21484), + 4: uint16(21736), + 5: uint16(21830), + 6: uint16(21809), + 7: uint16(22039), + 8: uint16(22888), + 9: uint16(22974), + 10: uint16(23100), + 11: uint16(23477), + 12: uint16(23558), + 13: uint16(23567), + 14: uint16(23569), + 15: uint16(23578), + 16: uint16(24196), + 17: uint16(24202), + 18: uint16(24288), + 19: uint16(24432), + 20: uint16(25215), + 21: uint16(25220), + 22: uint16(25307), + 23: uint16(25484), + 24: uint16(25463), + 25: uint16(26119), + 26: uint16(26124), + 27: uint16(26157), + 28: uint16(26230), + 29: uint16(26494), + 30: uint16(26786), + 31: uint16(27167), + 32: uint16(27189), + 33: uint16(27836), + 34: uint16(28040), + 35: uint16(28169), + 36: uint16(28248), + 37: uint16(28988), + 38: uint16(28966), + 39: uint16(29031), + 40: uint16(30151), + 41: uint16(30465), + 42: uint16(30813), + 43: uint16(30977), + 44: uint16(31077), + 45: uint16(31216), + 46: uint16(31456), + 47: uint16(31505), + 48: uint16(31911), + 49: uint16(32057), + 50: uint16(32918), + 51: uint16(33750), + 52: uint16(33931), + 53: uint16(34121), + 54: uint16(34909), + 55: uint16(35059), + 56: uint16(35359), + 57: uint16(35388), + 58: uint16(35412), + 59: uint16(35443), + 60: uint16(35937), + 61: uint16(36062), + 62: uint16(37284), + 63: uint16(37478), + 64: uint16(37758), + 65: uint16(37912), + 66: uint16(38556), + 67: uint16(38808), + 68: uint16(19978), + 69: uint16(19976), + 70: uint16(19998), + 71: uint16(20055), + 72: uint16(20887), + 73: uint16(21104), + 74: uint16(22478), + 75: uint16(22580), + 76: uint16(22732), + 77: uint16(23330), + 78: uint16(24120), + 79: uint16(24773), + 80: uint16(25854), + 81: uint16(26465), + 82: uint16(26454), + 83: uint16(27972), + 84: uint16(29366), + 85: uint16(30067), + 86: uint16(31331), + 87: uint16(33976), + 88: uint16(35698), + 89: uint16(37304), + 90: uint16(37664), + 91: uint16(22065), + 92: uint16(22516), + 93: uint16(39166), + }, + 30: { + 0: uint16(25325), + 1: uint16(26893), + 2: uint16(27542), + 3: uint16(29165), + 4: uint16(32340), + 5: uint16(32887), + 6: uint16(33394), + 7: uint16(35302), + 8: uint16(39135), + 9: uint16(34645), + 10: uint16(36785), + 11: uint16(23611), + 12: uint16(20280), + 13: uint16(20449), + 14: uint16(20405), + 15: uint16(21767), + 16: uint16(23072), + 17: uint16(23517), + 18: uint16(23529), + 19: uint16(24515), + 20: uint16(24910), + 21: uint16(25391), + 22: uint16(26032), + 23: uint16(26187), + 24: uint16(26862), + 25: uint16(27035), + 26: uint16(28024), + 27: uint16(28145), + 28: uint16(30003), + 29: uint16(30137), + 30: uint16(30495), + 31: uint16(31070), + 32: uint16(31206), + 33: uint16(32051), + 34: uint16(33251), + 35: uint16(33455), + 36: uint16(34218), + 37: uint16(35242), + 38: uint16(35386), + 39: uint16(36523), + 40: uint16(36763), + 41: uint16(36914), + 42: uint16(37341), + 43: uint16(38663), + 44: uint16(20154), + 45: uint16(20161), + 46: uint16(20995), + 47: uint16(22645), + 48: uint16(22764), + 49: uint16(23563), + 50: uint16(29978), + 51: uint16(23613), + 52: uint16(33102), + 53: uint16(35338), + 54: uint16(36805), + 55: uint16(38499), + 56: uint16(38765), + 57: uint16(31525), + 58: uint16(35535), + 59: uint16(38920), + 60: uint16(37218), + 61: uint16(22259), + 62: uint16(21416), + 63: uint16(36887), + 64: uint16(21561), + 65: uint16(22402), + 66: uint16(24101), + 67: uint16(25512), + 68: uint16(27700), + 69: uint16(28810), + 70: uint16(30561), + 71: uint16(31883), + 72: uint16(32736), + 73: uint16(34928), + 74: uint16(36930), + 75: uint16(37204), + 76: uint16(37648), + 77: uint16(37656), + 78: uint16(38543), + 79: uint16(29790), + 80: uint16(39620), + 81: uint16(23815), + 82: uint16(23913), + 83: uint16(25968), + 84: uint16(26530), + 85: uint16(36264), + 86: uint16(38619), + 87: uint16(25454), + 88: uint16(26441), + 89: uint16(26905), + 90: uint16(33733), + 91: uint16(38935), + 92: uint16(38592), + 93: uint16(35070), + }, + 31: { + 0: uint16(28548), + 1: uint16(25722), + 2: uint16(23544), + 3: uint16(19990), + 4: uint16(28716), + 5: uint16(30045), + 6: uint16(26159), + 7: uint16(20932), + 8: uint16(21046), + 9: uint16(21218), + 10: uint16(22995), + 11: uint16(24449), + 12: uint16(24615), + 13: uint16(25104), + 14: uint16(25919), + 15: uint16(25972), + 16: uint16(26143), + 17: uint16(26228), + 18: uint16(26866), + 19: uint16(26646), + 20: uint16(27491), + 21: uint16(28165), + 22: uint16(29298), + 23: uint16(29983), + 24: uint16(30427), + 25: uint16(31934), + 26: uint16(32854), + 27: uint16(22768), + 28: uint16(35069), + 29: uint16(35199), + 30: uint16(35488), + 31: uint16(35475), + 32: uint16(35531), + 33: uint16(36893), + 34: uint16(37266), + 35: uint16(38738), + 36: uint16(38745), + 37: uint16(25993), + 38: uint16(31246), + 39: uint16(33030), + 40: uint16(38587), + 41: uint16(24109), + 42: uint16(24796), + 43: uint16(25114), + 44: uint16(26021), + 45: uint16(26132), + 46: uint16(26512), + 47: uint16(30707), + 48: uint16(31309), + 49: uint16(31821), + 50: uint16(32318), + 51: uint16(33034), + 52: uint16(36012), + 53: uint16(36196), + 54: uint16(36321), + 55: uint16(36447), + 56: uint16(30889), + 57: uint16(20999), + 58: uint16(25305), + 59: uint16(25509), + 60: uint16(25666), + 61: uint16(25240), + 62: uint16(35373), + 63: uint16(31363), + 64: uint16(31680), + 65: uint16(35500), + 66: uint16(38634), + 67: uint16(32118), + 68: uint16(33292), + 69: uint16(34633), + 70: uint16(20185), + 71: uint16(20808), + 72: uint16(21315), + 73: uint16(21344), + 74: uint16(23459), + 75: uint16(23554), + 76: uint16(23574), + 77: uint16(24029), + 78: uint16(25126), + 79: uint16(25159), + 80: uint16(25776), + 81: uint16(26643), + 82: uint16(26676), + 83: uint16(27849), + 84: uint16(27973), + 85: uint16(27927), + 86: uint16(26579), + 87: uint16(28508), + 88: uint16(29006), + 89: uint16(29053), + 90: uint16(26059), + 91: uint16(31359), + 92: uint16(31661), + 93: uint16(32218), + }, + 32: { + 0: uint16(32330), + 1: uint16(32680), + 2: uint16(33146), + 3: uint16(33307), + 4: uint16(33337), + 5: uint16(34214), + 6: uint16(35438), + 7: uint16(36046), + 8: uint16(36341), + 9: uint16(36984), + 10: uint16(36983), + 11: uint16(37549), + 12: uint16(37521), + 13: uint16(38275), + 14: uint16(39854), + 15: uint16(21069), + 16: uint16(21892), + 17: uint16(28472), + 18: uint16(28982), + 19: uint16(20840), + 20: uint16(31109), + 21: uint16(32341), + 22: uint16(33203), + 23: uint16(31950), + 24: uint16(22092), + 25: uint16(22609), + 26: uint16(23720), + 27: uint16(25514), + 28: uint16(26366), + 29: uint16(26365), + 30: uint16(26970), + 31: uint16(29401), + 32: uint16(30095), + 33: uint16(30094), + 34: uint16(30990), + 35: uint16(31062), + 36: uint16(31199), + 37: uint16(31895), + 38: uint16(32032), + 39: uint16(32068), + 40: uint16(34311), + 41: uint16(35380), + 42: uint16(38459), + 43: uint16(36961), + 44: uint16(40736), + 45: uint16(20711), + 46: uint16(21109), + 47: uint16(21452), + 48: uint16(21474), + 49: uint16(20489), + 50: uint16(21930), + 51: uint16(22766), + 52: uint16(22863), + 53: uint16(29245), + 54: uint16(23435), + 55: uint16(23652), + 56: uint16(21277), + 57: uint16(24803), + 58: uint16(24819), + 59: uint16(25436), + 60: uint16(25475), + 61: uint16(25407), + 62: uint16(25531), + 63: uint16(25805), + 64: uint16(26089), + 65: uint16(26361), + 66: uint16(24035), + 67: uint16(27085), + 68: uint16(27133), + 69: uint16(28437), + 70: uint16(29157), + 71: uint16(20105), + 72: uint16(30185), + 73: uint16(30456), + 74: uint16(31379), + 75: uint16(31967), + 76: uint16(32207), + 77: uint16(32156), + 78: uint16(32865), + 79: uint16(33609), + 80: uint16(33624), + 81: uint16(33900), + 82: uint16(33980), + 83: uint16(34299), + 84: uint16(35013), + 85: uint16(36208), + 86: uint16(36865), + 87: uint16(36973), + 88: uint16(37783), + 89: uint16(38684), + 90: uint16(39442), + 91: uint16(20687), + 92: uint16(22679), + 93: uint16(24974), + }, + 33: { + 0: uint16(33235), + 1: uint16(34101), + 2: uint16(36104), + 3: uint16(36896), + 4: uint16(20419), + 5: uint16(20596), + 6: uint16(21063), + 7: uint16(21363), + 8: uint16(24687), + 9: uint16(25417), + 10: uint16(26463), + 11: uint16(28204), + 12: uint16(36275), + 13: uint16(36895), + 14: uint16(20439), + 15: uint16(23646), + 16: uint16(36042), + 17: uint16(26063), + 18: uint16(32154), + 19: uint16(21330), + 20: uint16(34966), + 21: uint16(20854), + 22: uint16(25539), + 23: uint16(23384), + 24: uint16(23403), + 25: uint16(23562), + 26: uint16(25613), + 27: uint16(26449), + 28: uint16(36956), + 29: uint16(20182), + 30: uint16(22810), + 31: uint16(22826), + 32: uint16(27760), + 33: uint16(35409), + 34: uint16(21822), + 35: uint16(22549), + 36: uint16(22949), + 37: uint16(24816), + 38: uint16(25171), + 39: uint16(26561), + 40: uint16(33333), + 41: uint16(26965), + 42: uint16(38464), + 43: uint16(39364), + 44: uint16(39464), + 45: uint16(20307), + 46: uint16(22534), + 47: uint16(23550), + 48: uint16(32784), + 49: uint16(23729), + 50: uint16(24111), + 51: uint16(24453), + 52: uint16(24608), + 53: uint16(24907), + 54: uint16(25140), + 55: uint16(26367), + 56: uint16(27888), + 57: uint16(28382), + 58: uint16(32974), + 59: uint16(33151), + 60: uint16(33492), + 61: uint16(34955), + 62: uint16(36024), + 63: uint16(36864), + 64: uint16(36910), + 65: uint16(38538), + 66: uint16(40667), + 67: uint16(39899), + 68: uint16(20195), + 69: uint16(21488), + 70: uint16(22823), + 71: uint16(31532), + 72: uint16(37261), + 73: uint16(38988), + 74: uint16(40441), + 75: uint16(28381), + 76: uint16(28711), + 77: uint16(21331), + 78: uint16(21828), + 79: uint16(23429), + 80: uint16(25176), + 81: uint16(25246), + 82: uint16(25299), + 83: uint16(27810), + 84: uint16(28655), + 85: uint16(29730), + 86: uint16(35351), + 87: uint16(37944), + 88: uint16(28609), + 89: uint16(35582), + 90: uint16(33592), + 91: uint16(20967), + 92: uint16(34552), + 93: uint16(21482), + }, + 34: { + 0: uint16(21481), + 1: uint16(20294), + 2: uint16(36948), + 3: uint16(36784), + 4: uint16(22890), + 5: uint16(33073), + 6: uint16(24061), + 7: uint16(31466), + 8: uint16(36799), + 9: uint16(26842), + 10: uint16(35895), + 11: uint16(29432), + 12: uint16(40008), + 13: uint16(27197), + 14: uint16(35504), + 15: uint16(20025), + 16: uint16(21336), + 17: uint16(22022), + 18: uint16(22374), + 19: uint16(25285), + 20: uint16(25506), + 21: uint16(26086), + 22: uint16(27470), + 23: uint16(28129), + 24: uint16(28251), + 25: uint16(28845), + 26: uint16(30701), + 27: uint16(31471), + 28: uint16(31658), + 29: uint16(32187), + 30: uint16(32829), + 31: uint16(32966), + 32: uint16(34507), + 33: uint16(35477), + 34: uint16(37723), + 35: uint16(22243), + 36: uint16(22727), + 37: uint16(24382), + 38: uint16(26029), + 39: uint16(26262), + 40: uint16(27264), + 41: uint16(27573), + 42: uint16(30007), + 43: uint16(35527), + 44: uint16(20516), + 45: uint16(30693), + 46: uint16(22320), + 47: uint16(24347), + 48: uint16(24677), + 49: uint16(26234), + 50: uint16(27744), + 51: uint16(30196), + 52: uint16(31258), + 53: uint16(32622), + 54: uint16(33268), + 55: uint16(34584), + 56: uint16(36933), + 57: uint16(39347), + 58: uint16(31689), + 59: uint16(30044), + 60: uint16(31481), + 61: uint16(31569), + 62: uint16(33988), + 63: uint16(36880), + 64: uint16(31209), + 65: uint16(31378), + 66: uint16(33590), + 67: uint16(23265), + 68: uint16(30528), + 69: uint16(20013), + 70: uint16(20210), + 71: uint16(23449), + 72: uint16(24544), + 73: uint16(25277), + 74: uint16(26172), + 75: uint16(26609), + 76: uint16(27880), + 77: uint16(34411), + 78: uint16(34935), + 79: uint16(35387), + 80: uint16(37198), + 81: uint16(37619), + 82: uint16(39376), + 83: uint16(27159), + 84: uint16(28710), + 85: uint16(29482), + 86: uint16(33511), + 87: uint16(33879), + 88: uint16(36015), + 89: uint16(19969), + 90: uint16(20806), + 91: uint16(20939), + 92: uint16(21899), + 93: uint16(23541), + }, + 35: { + 0: uint16(24086), + 1: uint16(24115), + 2: uint16(24193), + 3: uint16(24340), + 4: uint16(24373), + 5: uint16(24427), + 6: uint16(24500), + 7: uint16(25074), + 8: uint16(25361), + 9: uint16(26274), + 10: uint16(26397), + 11: uint16(28526), + 12: uint16(29266), + 13: uint16(30010), + 14: uint16(30522), + 15: uint16(32884), + 16: uint16(33081), + 17: uint16(33144), + 18: uint16(34678), + 19: uint16(35519), + 20: uint16(35548), + 21: uint16(36229), + 22: uint16(36339), + 23: uint16(37530), + 24: uint16(38263), + 25: uint16(38914), + 26: uint16(40165), + 27: uint16(21189), + 28: uint16(25431), + 29: uint16(30452), + 30: uint16(26389), + 31: uint16(27784), + 32: uint16(29645), + 33: uint16(36035), + 34: uint16(37806), + 35: uint16(38515), + 36: uint16(27941), + 37: uint16(22684), + 38: uint16(26894), + 39: uint16(27084), + 40: uint16(36861), + 41: uint16(37786), + 42: uint16(30171), + 43: uint16(36890), + 44: uint16(22618), + 45: uint16(26626), + 46: uint16(25524), + 47: uint16(27131), + 48: uint16(20291), + 49: uint16(28460), + 50: uint16(26584), + 51: uint16(36795), + 52: uint16(34086), + 53: uint16(32180), + 54: uint16(37716), + 55: uint16(26943), + 56: uint16(28528), + 57: uint16(22378), + 58: uint16(22775), + 59: uint16(23340), + 60: uint16(32044), + 61: uint16(29226), + 62: uint16(21514), + 63: uint16(37347), + 64: uint16(40372), + 65: uint16(20141), + 66: uint16(20302), + 67: uint16(20572), + 68: uint16(20597), + 69: uint16(21059), + 70: uint16(35998), + 71: uint16(21576), + 72: uint16(22564), + 73: uint16(23450), + 74: uint16(24093), + 75: uint16(24213), + 76: uint16(24237), + 77: uint16(24311), + 78: uint16(24351), + 79: uint16(24716), + 80: uint16(25269), + 81: uint16(25402), + 82: uint16(25552), + 83: uint16(26799), + 84: uint16(27712), + 85: uint16(30855), + 86: uint16(31118), + 87: uint16(31243), + 88: uint16(32224), + 89: uint16(33351), + 90: uint16(35330), + 91: uint16(35558), + 92: uint16(36420), + 93: uint16(36883), + }, + 36: { + 0: uint16(37048), + 1: uint16(37165), + 2: uint16(37336), + 3: uint16(40718), + 4: uint16(27877), + 5: uint16(25688), + 6: uint16(25826), + 7: uint16(25973), + 8: uint16(28404), + 9: uint16(30340), + 10: uint16(31515), + 11: uint16(36969), + 12: uint16(37841), + 13: uint16(28346), + 14: uint16(21746), + 15: uint16(24505), + 16: uint16(25764), + 17: uint16(36685), + 18: uint16(36845), + 19: uint16(37444), + 20: uint16(20856), + 21: uint16(22635), + 22: uint16(22825), + 23: uint16(23637), + 24: uint16(24215), + 25: uint16(28155), + 26: uint16(32399), + 27: uint16(29980), + 28: uint16(36028), + 29: uint16(36578), + 30: uint16(39003), + 31: uint16(28857), + 32: uint16(20253), + 33: uint16(27583), + 34: uint16(28593), + 35: uint16(30000), + 36: uint16(38651), + 37: uint16(20814), + 38: uint16(21520), + 39: uint16(22581), + 40: uint16(22615), + 41: uint16(22956), + 42: uint16(23648), + 43: uint16(24466), + 44: uint16(26007), + 45: uint16(26460), + 46: uint16(28193), + 47: uint16(30331), + 48: uint16(33759), + 49: uint16(36077), + 50: uint16(36884), + 51: uint16(37117), + 52: uint16(37709), + 53: uint16(30757), + 54: uint16(30778), + 55: uint16(21162), + 56: uint16(24230), + 57: uint16(22303), + 58: uint16(22900), + 59: uint16(24594), + 60: uint16(20498), + 61: uint16(20826), + 62: uint16(20908), + 63: uint16(20941), + 64: uint16(20992), + 65: uint16(21776), + 66: uint16(22612), + 67: uint16(22616), + 68: uint16(22871), + 69: uint16(23445), + 70: uint16(23798), + 71: uint16(23947), + 72: uint16(24764), + 73: uint16(25237), + 74: uint16(25645), + 75: uint16(26481), + 76: uint16(26691), + 77: uint16(26812), + 78: uint16(26847), + 79: uint16(30423), + 80: uint16(28120), + 81: uint16(28271), + 82: uint16(28059), + 83: uint16(28783), + 84: uint16(29128), + 85: uint16(24403), + 86: uint16(30168), + 87: uint16(31095), + 88: uint16(31561), + 89: uint16(31572), + 90: uint16(31570), + 91: uint16(31958), + 92: uint16(32113), + 93: uint16(21040), + }, + 37: { + 0: uint16(33891), + 1: uint16(34153), + 2: uint16(34276), + 3: uint16(35342), + 4: uint16(35588), + 5: uint16(35910), + 6: uint16(36367), + 7: uint16(36867), + 8: uint16(36879), + 9: uint16(37913), + 10: uint16(38518), + 11: uint16(38957), + 12: uint16(39472), + 13: uint16(38360), + 14: uint16(20685), + 15: uint16(21205), + 16: uint16(21516), + 17: uint16(22530), + 18: uint16(23566), + 19: uint16(24999), + 20: uint16(25758), + 21: uint16(27934), + 22: uint16(30643), + 23: uint16(31461), + 24: uint16(33012), + 25: uint16(33796), + 26: uint16(36947), + 27: uint16(37509), + 28: uint16(23776), + 29: uint16(40199), + 30: uint16(21311), + 31: uint16(24471), + 32: uint16(24499), + 33: uint16(28060), + 34: uint16(29305), + 35: uint16(30563), + 36: uint16(31167), + 37: uint16(31716), + 38: uint16(27602), + 39: uint16(29420), + 40: uint16(35501), + 41: uint16(26627), + 42: uint16(27233), + 43: uint16(20984), + 44: uint16(31361), + 45: uint16(26932), + 46: uint16(23626), + 47: uint16(40182), + 48: uint16(33515), + 49: uint16(23493), + 50: uint16(37193), + 51: uint16(28702), + 52: uint16(22136), + 53: uint16(23663), + 54: uint16(24775), + 55: uint16(25958), + 56: uint16(27788), + 57: uint16(35930), + 58: uint16(36929), + 59: uint16(38931), + 60: uint16(21585), + 61: uint16(26311), + 62: uint16(37389), + 63: uint16(22856), + 64: uint16(37027), + 65: uint16(20869), + 66: uint16(20045), + 67: uint16(20970), + 68: uint16(34201), + 69: uint16(35598), + 70: uint16(28760), + 71: uint16(25466), + 72: uint16(37707), + 73: uint16(26978), + 74: uint16(39348), + 75: uint16(32260), + 76: uint16(30071), + 77: uint16(21335), + 78: uint16(26976), + 79: uint16(36575), + 80: uint16(38627), + 81: uint16(27741), + 82: uint16(20108), + 83: uint16(23612), + 84: uint16(24336), + 85: uint16(36841), + 86: uint16(21250), + 87: uint16(36049), + 88: uint16(32905), + 89: uint16(34425), + 90: uint16(24319), + 91: uint16(26085), + 92: uint16(20083), + 93: uint16(20837), + }, + 38: { + 0: uint16(22914), + 1: uint16(23615), + 2: uint16(38894), + 3: uint16(20219), + 4: uint16(22922), + 5: uint16(24525), + 6: uint16(35469), + 7: uint16(28641), + 8: uint16(31152), + 9: uint16(31074), + 10: uint16(23527), + 11: uint16(33905), + 12: uint16(29483), + 13: uint16(29105), + 14: uint16(24180), + 15: uint16(24565), + 16: uint16(25467), + 17: uint16(25754), + 18: uint16(29123), + 19: uint16(31896), + 20: uint16(20035), + 21: uint16(24316), + 22: uint16(20043), + 23: uint16(22492), + 24: uint16(22178), + 25: uint16(24745), + 26: uint16(28611), + 27: uint16(32013), + 28: uint16(33021), + 29: uint16(33075), + 30: uint16(33215), + 31: uint16(36786), + 32: uint16(35223), + 33: uint16(34468), + 34: uint16(24052), + 35: uint16(25226), + 36: uint16(25773), + 37: uint16(35207), + 38: uint16(26487), + 39: uint16(27874), + 40: uint16(27966), + 41: uint16(29750), + 42: uint16(30772), + 43: uint16(23110), + 44: uint16(32629), + 45: uint16(33453), + 46: uint16(39340), + 47: uint16(20467), + 48: uint16(24259), + 49: uint16(25309), + 50: uint16(25490), + 51: uint16(25943), + 52: uint16(26479), + 53: uint16(30403), + 54: uint16(29260), + 55: uint16(32972), + 56: uint16(32954), + 57: uint16(36649), + 58: uint16(37197), + 59: uint16(20493), + 60: uint16(22521), + 61: uint16(23186), + 62: uint16(26757), + 63: uint16(26995), + 64: uint16(29028), + 65: uint16(29437), + 66: uint16(36023), + 67: uint16(22770), + 68: uint16(36064), + 69: uint16(38506), + 70: uint16(36889), + 71: uint16(34687), + 72: uint16(31204), + 73: uint16(30695), + 74: uint16(33833), + 75: uint16(20271), + 76: uint16(21093), + 77: uint16(21338), + 78: uint16(25293), + 79: uint16(26575), + 80: uint16(27850), + 81: uint16(30333), + 82: uint16(31636), + 83: uint16(31893), + 84: uint16(33334), + 85: uint16(34180), + 86: uint16(36843), + 87: uint16(26333), + 88: uint16(28448), + 89: uint16(29190), + 90: uint16(32283), + 91: uint16(33707), + 92: uint16(39361), + 93: uint16(40614), + }, + 39: { + 0: uint16(20989), + 1: uint16(31665), + 2: uint16(30834), + 3: uint16(31672), + 4: uint16(32903), + 5: uint16(31560), + 6: uint16(27368), + 7: uint16(24161), + 8: uint16(32908), + 9: uint16(30033), + 10: uint16(30048), + 11: uint16(20843), + 12: uint16(37474), + 13: uint16(28300), + 14: uint16(30330), + 15: uint16(37271), + 16: uint16(39658), + 17: uint16(20240), + 18: uint16(32624), + 19: uint16(25244), + 20: uint16(31567), + 21: uint16(38309), + 22: uint16(40169), + 23: uint16(22138), + 24: uint16(22617), + 25: uint16(34532), + 26: uint16(38588), + 27: uint16(20276), + 28: uint16(21028), + 29: uint16(21322), + 30: uint16(21453), + 31: uint16(21467), + 32: uint16(24070), + 33: uint16(25644), + 34: uint16(26001), + 35: uint16(26495), + 36: uint16(27710), + 37: uint16(27726), + 38: uint16(29256), + 39: uint16(29359), + 40: uint16(29677), + 41: uint16(30036), + 42: uint16(32321), + 43: uint16(33324), + 44: uint16(34281), + 45: uint16(36009), + 46: uint16(31684), + 47: uint16(37318), + 48: uint16(29033), + 49: uint16(38930), + 50: uint16(39151), + 51: uint16(25405), + 52: uint16(26217), + 53: uint16(30058), + 54: uint16(30436), + 55: uint16(30928), + 56: uint16(34115), + 57: uint16(34542), + 58: uint16(21290), + 59: uint16(21329), + 60: uint16(21542), + 61: uint16(22915), + 62: uint16(24199), + 63: uint16(24444), + 64: uint16(24754), + 65: uint16(25161), + 66: uint16(25209), + 67: uint16(25259), + 68: uint16(26000), + 69: uint16(27604), + 70: uint16(27852), + 71: uint16(30130), + 72: uint16(30382), + 73: uint16(30865), + 74: uint16(31192), + 75: uint16(32203), + 76: uint16(32631), + 77: uint16(32933), + 78: uint16(34987), + 79: uint16(35513), + 80: uint16(36027), + 81: uint16(36991), + 82: uint16(38750), + 83: uint16(39131), + 84: uint16(27147), + 85: uint16(31800), + 86: uint16(20633), + 87: uint16(23614), + 88: uint16(24494), + 89: uint16(26503), + 90: uint16(27608), + 91: uint16(29749), + 92: uint16(30473), + 93: uint16(32654), + }, + 40: { + 0: uint16(40763), + 1: uint16(26570), + 2: uint16(31255), + 3: uint16(21305), + 4: uint16(30091), + 5: uint16(39661), + 6: uint16(24422), + 7: uint16(33181), + 8: uint16(33777), + 9: uint16(32920), + 10: uint16(24380), + 11: uint16(24517), + 12: uint16(30050), + 13: uint16(31558), + 14: uint16(36924), + 15: uint16(26727), + 16: uint16(23019), + 17: uint16(23195), + 18: uint16(32016), + 19: uint16(30334), + 20: uint16(35628), + 21: uint16(20469), + 22: uint16(24426), + 23: uint16(27161), + 24: uint16(27703), + 25: uint16(28418), + 26: uint16(29922), + 27: uint16(31080), + 28: uint16(34920), + 29: uint16(35413), + 30: uint16(35961), + 31: uint16(24287), + 32: uint16(25551), + 33: uint16(30149), + 34: uint16(31186), + 35: uint16(33495), + 36: uint16(37672), + 37: uint16(37618), + 38: uint16(33948), + 39: uint16(34541), + 40: uint16(39981), + 41: uint16(21697), + 42: uint16(24428), + 43: uint16(25996), + 44: uint16(27996), + 45: uint16(28693), + 46: uint16(36007), + 47: uint16(36051), + 48: uint16(38971), + 49: uint16(25935), + 50: uint16(29942), + 51: uint16(19981), + 52: uint16(20184), + 53: uint16(22496), + 54: uint16(22827), + 55: uint16(23142), + 56: uint16(23500), + 57: uint16(20904), + 58: uint16(24067), + 59: uint16(24220), + 60: uint16(24598), + 61: uint16(25206), + 62: uint16(25975), + 63: uint16(26023), + 64: uint16(26222), + 65: uint16(28014), + 66: uint16(29238), + 67: uint16(31526), + 68: uint16(33104), + 69: uint16(33178), + 70: uint16(33433), + 71: uint16(35676), + 72: uint16(36000), + 73: uint16(36070), + 74: uint16(36212), + 75: uint16(38428), + 76: uint16(38468), + 77: uint16(20398), + 78: uint16(25771), + 79: uint16(27494), + 80: uint16(33310), + 81: uint16(33889), + 82: uint16(34154), + 83: uint16(37096), + 84: uint16(23553), + 85: uint16(26963), + 86: uint16(39080), + 87: uint16(33914), + 88: uint16(34135), + 89: uint16(20239), + 90: uint16(21103), + 91: uint16(24489), + 92: uint16(24133), + 93: uint16(26381), + }, + 41: { + 0: uint16(31119), + 1: uint16(33145), + 2: uint16(35079), + 3: uint16(35206), + 4: uint16(28149), + 5: uint16(24343), + 6: uint16(25173), + 7: uint16(27832), + 8: uint16(20175), + 9: uint16(29289), + 10: uint16(39826), + 11: uint16(20998), + 12: uint16(21563), + 13: uint16(22132), + 14: uint16(22707), + 15: uint16(24996), + 16: uint16(25198), + 17: uint16(28954), + 18: uint16(22894), + 19: uint16(31881), + 20: uint16(31966), + 21: uint16(32027), + 22: uint16(38640), + 23: uint16(25991), + 24: uint16(32862), + 25: uint16(19993), + 26: uint16(20341), + 27: uint16(20853), + 28: uint16(22592), + 29: uint16(24163), + 30: uint16(24179), + 31: uint16(24330), + 32: uint16(26564), + 33: uint16(20006), + 34: uint16(34109), + 35: uint16(38281), + 36: uint16(38491), + 37: uint16(31859), + 38: uint16(38913), + 39: uint16(20731), + 40: uint16(22721), + 41: uint16(30294), + 42: uint16(30887), + 43: uint16(21029), + 44: uint16(30629), + 45: uint16(34065), + 46: uint16(31622), + 47: uint16(20559), + 48: uint16(22793), + 49: uint16(29255), + 50: uint16(31687), + 51: uint16(32232), + 52: uint16(36794), + 53: uint16(36820), + 54: uint16(36941), + 55: uint16(20415), + 56: uint16(21193), + 57: uint16(23081), + 58: uint16(24321), + 59: uint16(38829), + 60: uint16(20445), + 61: uint16(33303), + 62: uint16(37610), + 63: uint16(22275), + 64: uint16(25429), + 65: uint16(27497), + 66: uint16(29995), + 67: uint16(35036), + 68: uint16(36628), + 69: uint16(31298), + 70: uint16(21215), + 71: uint16(22675), + 72: uint16(24917), + 73: uint16(25098), + 74: uint16(26286), + 75: uint16(27597), + 76: uint16(31807), + 77: uint16(33769), + 78: uint16(20515), + 79: uint16(20472), + 80: uint16(21253), + 81: uint16(21574), + 82: uint16(22577), + 83: uint16(22857), + 84: uint16(23453), + 85: uint16(23792), + 86: uint16(23791), + 87: uint16(23849), + 88: uint16(24214), + 89: uint16(25265), + 90: uint16(25447), + 91: uint16(25918), + 92: uint16(26041), + 93: uint16(26379), + }, + 42: { + 0: uint16(27861), + 1: uint16(27873), + 2: uint16(28921), + 3: uint16(30770), + 4: uint16(32299), + 5: uint16(32990), + 6: uint16(33459), + 7: uint16(33804), + 8: uint16(34028), + 9: uint16(34562), + 10: uint16(35090), + 11: uint16(35370), + 12: uint16(35914), + 13: uint16(37030), + 14: uint16(37586), + 15: uint16(39165), + 16: uint16(40179), + 17: uint16(40300), + 18: uint16(20047), + 19: uint16(20129), + 20: uint16(20621), + 21: uint16(21078), + 22: uint16(22346), + 23: uint16(22952), + 24: uint16(24125), + 25: uint16(24536), + 26: uint16(24537), + 27: uint16(25151), + 28: uint16(26292), + 29: uint16(26395), + 30: uint16(26576), + 31: uint16(26834), + 32: uint16(20882), + 33: uint16(32033), + 34: uint16(32938), + 35: uint16(33192), + 36: uint16(35584), + 37: uint16(35980), + 38: uint16(36031), + 39: uint16(37502), + 40: uint16(38450), + 41: uint16(21536), + 42: uint16(38956), + 43: uint16(21271), + 44: uint16(20693), + 45: uint16(21340), + 46: uint16(22696), + 47: uint16(25778), + 48: uint16(26420), + 49: uint16(29287), + 50: uint16(30566), + 51: uint16(31302), + 52: uint16(37350), + 53: uint16(21187), + 54: uint16(27809), + 55: uint16(27526), + 56: uint16(22528), + 57: uint16(24140), + 58: uint16(22868), + 59: uint16(26412), + 60: uint16(32763), + 61: uint16(20961), + 62: uint16(30406), + 63: uint16(25705), + 64: uint16(30952), + 65: uint16(39764), + 66: uint16(40635), + 67: uint16(22475), + 68: uint16(22969), + 69: uint16(26151), + 70: uint16(26522), + 71: uint16(27598), + 72: uint16(21737), + 73: uint16(27097), + 74: uint16(24149), + 75: uint16(33180), + 76: uint16(26517), + 77: uint16(39850), + 78: uint16(26622), + 79: uint16(40018), + 80: uint16(26717), + 81: uint16(20134), + 82: uint16(20451), + 83: uint16(21448), + 84: uint16(25273), + 85: uint16(26411), + 86: uint16(27819), + 87: uint16(36804), + 88: uint16(20397), + 89: uint16(32365), + 90: uint16(40639), + 91: uint16(19975), + 92: uint16(24930), + 93: uint16(28288), + }, + 43: { + 0: uint16(28459), + 1: uint16(34067), + 2: uint16(21619), + 3: uint16(26410), + 4: uint16(39749), + 5: uint16(24051), + 6: uint16(31637), + 7: uint16(23724), + 8: uint16(23494), + 9: uint16(34588), + 10: uint16(28234), + 11: uint16(34001), + 12: uint16(31252), + 13: uint16(33032), + 14: uint16(22937), + 15: uint16(31885), + 16: uint16(27665), + 17: uint16(30496), + 18: uint16(21209), + 19: uint16(22818), + 20: uint16(28961), + 21: uint16(29279), + 22: uint16(30683), + 23: uint16(38695), + 24: uint16(40289), + 25: uint16(26891), + 26: uint16(23167), + 27: uint16(23064), + 28: uint16(20901), + 29: uint16(21517), + 30: uint16(21629), + 31: uint16(26126), + 32: uint16(30431), + 33: uint16(36855), + 34: uint16(37528), + 35: uint16(40180), + 36: uint16(23018), + 37: uint16(29277), + 38: uint16(28357), + 39: uint16(20813), + 40: uint16(26825), + 41: uint16(32191), + 42: uint16(32236), + 43: uint16(38754), + 44: uint16(40634), + 45: uint16(25720), + 46: uint16(27169), + 47: uint16(33538), + 48: uint16(22916), + 49: uint16(23391), + 50: uint16(27611), + 51: uint16(29467), + 52: uint16(30450), + 53: uint16(32178), + 54: uint16(32791), + 55: uint16(33945), + 56: uint16(20786), + 57: uint16(26408), + 58: uint16(40665), + 59: uint16(30446), + 60: uint16(26466), + 61: uint16(21247), + 62: uint16(39173), + 63: uint16(23588), + 64: uint16(25147), + 65: uint16(31870), + 66: uint16(36016), + 67: uint16(21839), + 68: uint16(24758), + 69: uint16(32011), + 70: uint16(38272), + 71: uint16(21249), + 72: uint16(20063), + 73: uint16(20918), + 74: uint16(22812), + 75: uint16(29242), + 76: uint16(32822), + 77: uint16(37326), + 78: uint16(24357), + 79: uint16(30690), + 80: uint16(21380), + 81: uint16(24441), + 82: uint16(32004), + 83: uint16(34220), + 84: uint16(35379), + 85: uint16(36493), + 86: uint16(38742), + 87: uint16(26611), + 88: uint16(34222), + 89: uint16(37971), + 90: uint16(24841), + 91: uint16(24840), + 92: uint16(27833), + 93: uint16(30290), + }, + 44: { + 0: uint16(35565), + 1: uint16(36664), + 2: uint16(21807), + 3: uint16(20305), + 4: uint16(20778), + 5: uint16(21191), + 6: uint16(21451), + 7: uint16(23461), + 8: uint16(24189), + 9: uint16(24736), + 10: uint16(24962), + 11: uint16(25558), + 12: uint16(26377), + 13: uint16(26586), + 14: uint16(28263), + 15: uint16(28044), + 16: uint16(29494), + 17: uint16(29495), + 18: uint16(30001), + 19: uint16(31056), + 20: uint16(35029), + 21: uint16(35480), + 22: uint16(36938), + 23: uint16(37009), + 24: uint16(37109), + 25: uint16(38596), + 26: uint16(34701), + 27: uint16(22805), + 28: uint16(20104), + 29: uint16(20313), + 30: uint16(19982), + 31: uint16(35465), + 32: uint16(36671), + 33: uint16(38928), + 34: uint16(20653), + 35: uint16(24188), + 36: uint16(22934), + 37: uint16(23481), + 38: uint16(24248), + 39: uint16(25562), + 40: uint16(25594), + 41: uint16(25793), + 42: uint16(26332), + 43: uint16(26954), + 44: uint16(27096), + 45: uint16(27915), + 46: uint16(28342), + 47: uint16(29076), + 48: uint16(29992), + 49: uint16(31407), + 50: uint16(32650), + 51: uint16(32768), + 52: uint16(33865), + 53: uint16(33993), + 54: uint16(35201), + 55: uint16(35617), + 56: uint16(36362), + 57: uint16(36965), + 58: uint16(38525), + 59: uint16(39178), + 60: uint16(24958), + 61: uint16(25233), + 62: uint16(27442), + 63: uint16(27779), + 64: uint16(28020), + 65: uint16(32716), + 66: uint16(32764), + 67: uint16(28096), + 68: uint16(32645), + 69: uint16(34746), + 70: uint16(35064), + 71: uint16(26469), + 72: uint16(33713), + 73: uint16(38972), + 74: uint16(38647), + 75: uint16(27931), + 76: uint16(32097), + 77: uint16(33853), + 78: uint16(37226), + 79: uint16(20081), + 80: uint16(21365), + 81: uint16(23888), + 82: uint16(27396), + 83: uint16(28651), + 84: uint16(34253), + 85: uint16(34349), + 86: uint16(35239), + 87: uint16(21033), + 88: uint16(21519), + 89: uint16(23653), + 90: uint16(26446), + 91: uint16(26792), + 92: uint16(29702), + 93: uint16(29827), + }, + 45: { + 0: uint16(30178), + 1: uint16(35023), + 2: uint16(35041), + 3: uint16(37324), + 4: uint16(38626), + 5: uint16(38520), + 6: uint16(24459), + 7: uint16(29575), + 8: uint16(31435), + 9: uint16(33870), + 10: uint16(25504), + 11: uint16(30053), + 12: uint16(21129), + 13: uint16(27969), + 14: uint16(28316), + 15: uint16(29705), + 16: uint16(30041), + 17: uint16(30827), + 18: uint16(31890), + 19: uint16(38534), + 20: uint16(31452), + 21: uint16(40845), + 22: uint16(20406), + 23: uint16(24942), + 24: uint16(26053), + 25: uint16(34396), + 26: uint16(20102), + 27: uint16(20142), + 28: uint16(20698), + 29: uint16(20001), + 30: uint16(20940), + 31: uint16(23534), + 32: uint16(26009), + 33: uint16(26753), + 34: uint16(28092), + 35: uint16(29471), + 36: uint16(30274), + 37: uint16(30637), + 38: uint16(31260), + 39: uint16(31975), + 40: uint16(33391), + 41: uint16(35538), + 42: uint16(36988), + 43: uint16(37327), + 44: uint16(38517), + 45: uint16(38936), + 46: uint16(21147), + 47: uint16(32209), + 48: uint16(20523), + 49: uint16(21400), + 50: uint16(26519), + 51: uint16(28107), + 52: uint16(29136), + 53: uint16(29747), + 54: uint16(33256), + 55: uint16(36650), + 56: uint16(38563), + 57: uint16(40023), + 58: uint16(40607), + 59: uint16(29792), + 60: uint16(22593), + 61: uint16(28057), + 62: uint16(32047), + 63: uint16(39006), + 64: uint16(20196), + 65: uint16(20278), + 66: uint16(20363), + 67: uint16(20919), + 68: uint16(21169), + 69: uint16(23994), + 70: uint16(24604), + 71: uint16(29618), + 72: uint16(31036), + 73: uint16(33491), + 74: uint16(37428), + 75: uint16(38583), + 76: uint16(38646), + 77: uint16(38666), + 78: uint16(40599), + 79: uint16(40802), + 80: uint16(26278), + 81: uint16(27508), + 82: uint16(21015), + 83: uint16(21155), + 84: uint16(28872), + 85: uint16(35010), + 86: uint16(24265), + 87: uint16(24651), + 88: uint16(24976), + 89: uint16(28451), + 90: uint16(29001), + 91: uint16(31806), + 92: uint16(32244), + 93: uint16(32879), + }, + 46: { + 0: uint16(34030), + 1: uint16(36899), + 2: uint16(37676), + 3: uint16(21570), + 4: uint16(39791), + 5: uint16(27347), + 6: uint16(28809), + 7: uint16(36034), + 8: uint16(36335), + 9: uint16(38706), + 10: uint16(21172), + 11: uint16(23105), + 12: uint16(24266), + 13: uint16(24324), + 14: uint16(26391), + 15: uint16(27004), + 16: uint16(27028), + 17: uint16(28010), + 18: uint16(28431), + 19: uint16(29282), + 20: uint16(29436), + 21: uint16(31725), + 22: uint16(32769), + 23: uint16(32894), + 24: uint16(34635), + 25: uint16(37070), + 26: uint16(20845), + 27: uint16(40595), + 28: uint16(31108), + 29: uint16(32907), + 30: uint16(37682), + 31: uint16(35542), + 32: uint16(20525), + 33: uint16(21644), + 34: uint16(35441), + 35: uint16(27498), + 36: uint16(36036), + 37: uint16(33031), + 38: uint16(24785), + 39: uint16(26528), + 40: uint16(40434), + 41: uint16(20121), + 42: uint16(20120), + 43: uint16(39952), + 44: uint16(35435), + 45: uint16(34241), + 46: uint16(34152), + 47: uint16(26880), + 48: uint16(28286), + 49: uint16(30871), + 50: uint16(33109), + }, + 47: { + 0: uint16(24332), + 1: uint16(19984), + 2: uint16(19989), + 3: uint16(20010), + 4: uint16(20017), + 5: uint16(20022), + 6: uint16(20028), + 7: uint16(20031), + 8: uint16(20034), + 9: uint16(20054), + 10: uint16(20056), + 11: uint16(20098), + 12: uint16(20101), + 13: uint16(35947), + 14: uint16(20106), + 15: uint16(33298), + 16: uint16(24333), + 17: uint16(20110), + 18: uint16(20126), + 19: uint16(20127), + 20: uint16(20128), + 21: uint16(20130), + 22: uint16(20144), + 23: uint16(20147), + 24: uint16(20150), + 25: uint16(20174), + 26: uint16(20173), + 27: uint16(20164), + 28: uint16(20166), + 29: uint16(20162), + 30: uint16(20183), + 31: uint16(20190), + 32: uint16(20205), + 33: uint16(20191), + 34: uint16(20215), + 35: uint16(20233), + 36: uint16(20314), + 37: uint16(20272), + 38: uint16(20315), + 39: uint16(20317), + 40: uint16(20311), + 41: uint16(20295), + 42: uint16(20342), + 43: uint16(20360), + 44: uint16(20367), + 45: uint16(20376), + 46: uint16(20347), + 47: uint16(20329), + 48: uint16(20336), + 49: uint16(20369), + 50: uint16(20335), + 51: uint16(20358), + 52: uint16(20374), + 53: uint16(20760), + 54: uint16(20436), + 55: uint16(20447), + 56: uint16(20430), + 57: uint16(20440), + 58: uint16(20443), + 59: uint16(20433), + 60: uint16(20442), + 61: uint16(20432), + 62: uint16(20452), + 63: uint16(20453), + 64: uint16(20506), + 65: uint16(20520), + 66: uint16(20500), + 67: uint16(20522), + 68: uint16(20517), + 69: uint16(20485), + 70: uint16(20252), + 71: uint16(20470), + 72: uint16(20513), + 73: uint16(20521), + 74: uint16(20524), + 75: uint16(20478), + 76: uint16(20463), + 77: uint16(20497), + 78: uint16(20486), + 79: uint16(20547), + 80: uint16(20551), + 81: uint16(26371), + 82: uint16(20565), + 83: uint16(20560), + 84: uint16(20552), + 85: uint16(20570), + 86: uint16(20566), + 87: uint16(20588), + 88: uint16(20600), + 89: uint16(20608), + 90: uint16(20634), + 91: uint16(20613), + 92: uint16(20660), + 93: uint16(20658), + }, + 48: { + 0: uint16(20681), + 1: uint16(20682), + 2: uint16(20659), + 3: uint16(20674), + 4: uint16(20694), + 5: uint16(20702), + 6: uint16(20709), + 7: uint16(20717), + 8: uint16(20707), + 9: uint16(20718), + 10: uint16(20729), + 11: uint16(20725), + 12: uint16(20745), + 13: uint16(20737), + 14: uint16(20738), + 15: uint16(20758), + 16: uint16(20757), + 17: uint16(20756), + 18: uint16(20762), + 19: uint16(20769), + 20: uint16(20794), + 21: uint16(20791), + 22: uint16(20796), + 23: uint16(20795), + 24: uint16(20799), + 25: uint16(20800), + 26: uint16(20818), + 27: uint16(20812), + 28: uint16(20820), + 29: uint16(20834), + 30: uint16(31480), + 31: uint16(20841), + 32: uint16(20842), + 33: uint16(20846), + 34: uint16(20864), + 35: uint16(20866), + 36: uint16(22232), + 37: uint16(20876), + 38: uint16(20873), + 39: uint16(20879), + 40: uint16(20881), + 41: uint16(20883), + 42: uint16(20885), + 43: uint16(20886), + 44: uint16(20900), + 45: uint16(20902), + 46: uint16(20898), + 47: uint16(20905), + 48: uint16(20906), + 49: uint16(20907), + 50: uint16(20915), + 51: uint16(20913), + 52: uint16(20914), + 53: uint16(20912), + 54: uint16(20917), + 55: uint16(20925), + 56: uint16(20933), + 57: uint16(20937), + 58: uint16(20955), + 59: uint16(20960), + 60: uint16(34389), + 61: uint16(20969), + 62: uint16(20973), + 63: uint16(20976), + 64: uint16(20981), + 65: uint16(20990), + 66: uint16(20996), + 67: uint16(21003), + 68: uint16(21012), + 69: uint16(21006), + 70: uint16(21031), + 71: uint16(21034), + 72: uint16(21038), + 73: uint16(21043), + 74: uint16(21049), + 75: uint16(21071), + 76: uint16(21060), + 77: uint16(21067), + 78: uint16(21068), + 79: uint16(21086), + 80: uint16(21076), + 81: uint16(21098), + 82: uint16(21108), + 83: uint16(21097), + 84: uint16(21107), + 85: uint16(21119), + 86: uint16(21117), + 87: uint16(21133), + 88: uint16(21140), + 89: uint16(21138), + 90: uint16(21105), + 91: uint16(21128), + 92: uint16(21137), + 93: uint16(36776), + }, + 49: { + 0: uint16(36775), + 1: uint16(21164), + 2: uint16(21165), + 3: uint16(21180), + 4: uint16(21173), + 5: uint16(21185), + 6: uint16(21197), + 7: uint16(21207), + 8: uint16(21214), + 9: uint16(21219), + 10: uint16(21222), + 11: uint16(39149), + 12: uint16(21216), + 13: uint16(21235), + 14: uint16(21237), + 15: uint16(21240), + 16: uint16(21241), + 17: uint16(21254), + 18: uint16(21256), + 19: uint16(30008), + 20: uint16(21261), + 21: uint16(21264), + 22: uint16(21263), + 23: uint16(21269), + 24: uint16(21274), + 25: uint16(21283), + 26: uint16(21295), + 27: uint16(21297), + 28: uint16(21299), + 29: uint16(21304), + 30: uint16(21312), + 31: uint16(21318), + 32: uint16(21317), + 33: uint16(19991), + 34: uint16(21321), + 35: uint16(21325), + 36: uint16(20950), + 37: uint16(21342), + 38: uint16(21353), + 39: uint16(21358), + 40: uint16(22808), + 41: uint16(21371), + 42: uint16(21367), + 43: uint16(21378), + 44: uint16(21398), + 45: uint16(21408), + 46: uint16(21414), + 47: uint16(21413), + 48: uint16(21422), + 49: uint16(21424), + 50: uint16(21430), + 51: uint16(21443), + 52: uint16(31762), + 53: uint16(38617), + 54: uint16(21471), + 55: uint16(26364), + 56: uint16(29166), + 57: uint16(21486), + 58: uint16(21480), + 59: uint16(21485), + 60: uint16(21498), + 61: uint16(21505), + 62: uint16(21565), + 63: uint16(21568), + 64: uint16(21548), + 65: uint16(21549), + 66: uint16(21564), + 67: uint16(21550), + 68: uint16(21558), + 69: uint16(21545), + 70: uint16(21533), + 71: uint16(21582), + 72: uint16(21647), + 73: uint16(21621), + 74: uint16(21646), + 75: uint16(21599), + 76: uint16(21617), + 77: uint16(21623), + 78: uint16(21616), + 79: uint16(21650), + 80: uint16(21627), + 81: uint16(21632), + 82: uint16(21622), + 83: uint16(21636), + 84: uint16(21648), + 85: uint16(21638), + 86: uint16(21703), + 87: uint16(21666), + 88: uint16(21688), + 89: uint16(21669), + 90: uint16(21676), + 91: uint16(21700), + 92: uint16(21704), + 93: uint16(21672), + }, + 50: { + 0: uint16(21675), + 1: uint16(21698), + 2: uint16(21668), + 3: uint16(21694), + 4: uint16(21692), + 5: uint16(21720), + 6: uint16(21733), + 7: uint16(21734), + 8: uint16(21775), + 9: uint16(21780), + 10: uint16(21757), + 11: uint16(21742), + 12: uint16(21741), + 13: uint16(21754), + 14: uint16(21730), + 15: uint16(21817), + 16: uint16(21824), + 17: uint16(21859), + 18: uint16(21836), + 19: uint16(21806), + 20: uint16(21852), + 21: uint16(21829), + 22: uint16(21846), + 23: uint16(21847), + 24: uint16(21816), + 25: uint16(21811), + 26: uint16(21853), + 27: uint16(21913), + 28: uint16(21888), + 29: uint16(21679), + 30: uint16(21898), + 31: uint16(21919), + 32: uint16(21883), + 33: uint16(21886), + 34: uint16(21912), + 35: uint16(21918), + 36: uint16(21934), + 37: uint16(21884), + 38: uint16(21891), + 39: uint16(21929), + 40: uint16(21895), + 41: uint16(21928), + 42: uint16(21978), + 43: uint16(21957), + 44: uint16(21983), + 45: uint16(21956), + 46: uint16(21980), + 47: uint16(21988), + 48: uint16(21972), + 49: uint16(22036), + 50: uint16(22007), + 51: uint16(22038), + 52: uint16(22014), + 53: uint16(22013), + 54: uint16(22043), + 55: uint16(22009), + 56: uint16(22094), + 57: uint16(22096), + 58: uint16(29151), + 59: uint16(22068), + 60: uint16(22070), + 61: uint16(22066), + 62: uint16(22072), + 63: uint16(22123), + 64: uint16(22116), + 65: uint16(22063), + 66: uint16(22124), + 67: uint16(22122), + 68: uint16(22150), + 69: uint16(22144), + 70: uint16(22154), + 71: uint16(22176), + 72: uint16(22164), + 73: uint16(22159), + 74: uint16(22181), + 75: uint16(22190), + 76: uint16(22198), + 77: uint16(22196), + 78: uint16(22210), + 79: uint16(22204), + 80: uint16(22209), + 81: uint16(22211), + 82: uint16(22208), + 83: uint16(22216), + 84: uint16(22222), + 85: uint16(22225), + 86: uint16(22227), + 87: uint16(22231), + 88: uint16(22254), + 89: uint16(22265), + 90: uint16(22272), + 91: uint16(22271), + 92: uint16(22276), + 93: uint16(22281), + }, + 51: { + 0: uint16(22280), + 1: uint16(22283), + 2: uint16(22285), + 3: uint16(22291), + 4: uint16(22296), + 5: uint16(22294), + 6: uint16(21959), + 7: uint16(22300), + 8: uint16(22310), + 9: uint16(22327), + 10: uint16(22328), + 11: uint16(22350), + 12: uint16(22331), + 13: uint16(22336), + 14: uint16(22351), + 15: uint16(22377), + 16: uint16(22464), + 17: uint16(22408), + 18: uint16(22369), + 19: uint16(22399), + 20: uint16(22409), + 21: uint16(22419), + 22: uint16(22432), + 23: uint16(22451), + 24: uint16(22436), + 25: uint16(22442), + 26: uint16(22448), + 27: uint16(22467), + 28: uint16(22470), + 29: uint16(22484), + 30: uint16(22482), + 31: uint16(22483), + 32: uint16(22538), + 33: uint16(22486), + 34: uint16(22499), + 35: uint16(22539), + 36: uint16(22553), + 37: uint16(22557), + 38: uint16(22642), + 39: uint16(22561), + 40: uint16(22626), + 41: uint16(22603), + 42: uint16(22640), + 43: uint16(27584), + 44: uint16(22610), + 45: uint16(22589), + 46: uint16(22649), + 47: uint16(22661), + 48: uint16(22713), + 49: uint16(22687), + 50: uint16(22699), + 51: uint16(22714), + 52: uint16(22750), + 53: uint16(22715), + 54: uint16(22712), + 55: uint16(22702), + 56: uint16(22725), + 57: uint16(22739), + 58: uint16(22737), + 59: uint16(22743), + 60: uint16(22745), + 61: uint16(22744), + 62: uint16(22757), + 63: uint16(22748), + 64: uint16(22756), + 65: uint16(22751), + 66: uint16(22767), + 67: uint16(22778), + 68: uint16(22777), + 69: uint16(22779), + 70: uint16(22780), + 71: uint16(22781), + 72: uint16(22786), + 73: uint16(22794), + 74: uint16(22800), + 75: uint16(22811), + 76: uint16(26790), + 77: uint16(22821), + 78: uint16(22828), + 79: uint16(22829), + 80: uint16(22834), + 81: uint16(22840), + 82: uint16(22846), + 83: uint16(31442), + 84: uint16(22869), + 85: uint16(22864), + 86: uint16(22862), + 87: uint16(22874), + 88: uint16(22872), + 89: uint16(22882), + 90: uint16(22880), + 91: uint16(22887), + 92: uint16(22892), + 93: uint16(22889), + }, + 52: { + 0: uint16(22904), + 1: uint16(22913), + 2: uint16(22941), + 3: uint16(20318), + 4: uint16(20395), + 5: uint16(22947), + 6: uint16(22962), + 7: uint16(22982), + 8: uint16(23016), + 9: uint16(23004), + 10: uint16(22925), + 11: uint16(23001), + 12: uint16(23002), + 13: uint16(23077), + 14: uint16(23071), + 15: uint16(23057), + 16: uint16(23068), + 17: uint16(23049), + 18: uint16(23066), + 19: uint16(23104), + 20: uint16(23148), + 21: uint16(23113), + 22: uint16(23093), + 23: uint16(23094), + 24: uint16(23138), + 25: uint16(23146), + 26: uint16(23194), + 27: uint16(23228), + 28: uint16(23230), + 29: uint16(23243), + 30: uint16(23234), + 31: uint16(23229), + 32: uint16(23267), + 33: uint16(23255), + 34: uint16(23270), + 35: uint16(23273), + 36: uint16(23254), + 37: uint16(23290), + 38: uint16(23291), + 39: uint16(23308), + 40: uint16(23307), + 41: uint16(23318), + 42: uint16(23346), + 43: uint16(23248), + 44: uint16(23338), + 45: uint16(23350), + 46: uint16(23358), + 47: uint16(23363), + 48: uint16(23365), + 49: uint16(23360), + 50: uint16(23377), + 51: uint16(23381), + 52: uint16(23386), + 53: uint16(23387), + 54: uint16(23397), + 55: uint16(23401), + 56: uint16(23408), + 57: uint16(23411), + 58: uint16(23413), + 59: uint16(23416), + 60: uint16(25992), + 61: uint16(23418), + 62: uint16(23424), + 63: uint16(23427), + 64: uint16(23462), + 65: uint16(23480), + 66: uint16(23491), + 67: uint16(23495), + 68: uint16(23497), + 69: uint16(23508), + 70: uint16(23504), + 71: uint16(23524), + 72: uint16(23526), + 73: uint16(23522), + 74: uint16(23518), + 75: uint16(23525), + 76: uint16(23531), + 77: uint16(23536), + 78: uint16(23542), + 79: uint16(23539), + 80: uint16(23557), + 81: uint16(23559), + 82: uint16(23560), + 83: uint16(23565), + 84: uint16(23571), + 85: uint16(23584), + 86: uint16(23586), + 87: uint16(23592), + 88: uint16(23608), + 89: uint16(23609), + 90: uint16(23617), + 91: uint16(23622), + 92: uint16(23630), + 93: uint16(23635), + }, + 53: { + 0: uint16(23632), + 1: uint16(23631), + 2: uint16(23409), + 3: uint16(23660), + 4: uint16(23662), + 5: uint16(20066), + 6: uint16(23670), + 7: uint16(23673), + 8: uint16(23692), + 9: uint16(23697), + 10: uint16(23700), + 11: uint16(22939), + 12: uint16(23723), + 13: uint16(23739), + 14: uint16(23734), + 15: uint16(23740), + 16: uint16(23735), + 17: uint16(23749), + 18: uint16(23742), + 19: uint16(23751), + 20: uint16(23769), + 21: uint16(23785), + 22: uint16(23805), + 23: uint16(23802), + 24: uint16(23789), + 25: uint16(23948), + 26: uint16(23786), + 27: uint16(23819), + 28: uint16(23829), + 29: uint16(23831), + 30: uint16(23900), + 31: uint16(23839), + 32: uint16(23835), + 33: uint16(23825), + 34: uint16(23828), + 35: uint16(23842), + 36: uint16(23834), + 37: uint16(23833), + 38: uint16(23832), + 39: uint16(23884), + 40: uint16(23890), + 41: uint16(23886), + 42: uint16(23883), + 43: uint16(23916), + 44: uint16(23923), + 45: uint16(23926), + 46: uint16(23943), + 47: uint16(23940), + 48: uint16(23938), + 49: uint16(23970), + 50: uint16(23965), + 51: uint16(23980), + 52: uint16(23982), + 53: uint16(23997), + 54: uint16(23952), + 55: uint16(23991), + 56: uint16(23996), + 57: uint16(24009), + 58: uint16(24013), + 59: uint16(24019), + 60: uint16(24018), + 61: uint16(24022), + 62: uint16(24027), + 63: uint16(24043), + 64: uint16(24050), + 65: uint16(24053), + 66: uint16(24075), + 67: uint16(24090), + 68: uint16(24089), + 69: uint16(24081), + 70: uint16(24091), + 71: uint16(24118), + 72: uint16(24119), + 73: uint16(24132), + 74: uint16(24131), + 75: uint16(24128), + 76: uint16(24142), + 77: uint16(24151), + 78: uint16(24148), + 79: uint16(24159), + 80: uint16(24162), + 81: uint16(24164), + 82: uint16(24135), + 83: uint16(24181), + 84: uint16(24182), + 85: uint16(24186), + 86: uint16(40636), + 87: uint16(24191), + 88: uint16(24224), + 89: uint16(24257), + 90: uint16(24258), + 91: uint16(24264), + 92: uint16(24272), + 93: uint16(24271), + }, + 54: { + 0: uint16(24278), + 1: uint16(24291), + 2: uint16(24285), + 3: uint16(24282), + 4: uint16(24283), + 5: uint16(24290), + 6: uint16(24289), + 7: uint16(24296), + 8: uint16(24297), + 9: uint16(24300), + 10: uint16(24305), + 11: uint16(24307), + 12: uint16(24304), + 13: uint16(24308), + 14: uint16(24312), + 15: uint16(24318), + 16: uint16(24323), + 17: uint16(24329), + 18: uint16(24413), + 19: uint16(24412), + 20: uint16(24331), + 21: uint16(24337), + 22: uint16(24342), + 23: uint16(24361), + 24: uint16(24365), + 25: uint16(24376), + 26: uint16(24385), + 27: uint16(24392), + 28: uint16(24396), + 29: uint16(24398), + 30: uint16(24367), + 31: uint16(24401), + 32: uint16(24406), + 33: uint16(24407), + 34: uint16(24409), + 35: uint16(24417), + 36: uint16(24429), + 37: uint16(24435), + 38: uint16(24439), + 39: uint16(24451), + 40: uint16(24450), + 41: uint16(24447), + 42: uint16(24458), + 43: uint16(24456), + 44: uint16(24465), + 45: uint16(24455), + 46: uint16(24478), + 47: uint16(24473), + 48: uint16(24472), + 49: uint16(24480), + 50: uint16(24488), + 51: uint16(24493), + 52: uint16(24508), + 53: uint16(24534), + 54: uint16(24571), + 55: uint16(24548), + 56: uint16(24568), + 57: uint16(24561), + 58: uint16(24541), + 59: uint16(24755), + 60: uint16(24575), + 61: uint16(24609), + 62: uint16(24672), + 63: uint16(24601), + 64: uint16(24592), + 65: uint16(24617), + 66: uint16(24590), + 67: uint16(24625), + 68: uint16(24603), + 69: uint16(24597), + 70: uint16(24619), + 71: uint16(24614), + 72: uint16(24591), + 73: uint16(24634), + 74: uint16(24666), + 75: uint16(24641), + 76: uint16(24682), + 77: uint16(24695), + 78: uint16(24671), + 79: uint16(24650), + 80: uint16(24646), + 81: uint16(24653), + 82: uint16(24675), + 83: uint16(24643), + 84: uint16(24676), + 85: uint16(24642), + 86: uint16(24684), + 87: uint16(24683), + 88: uint16(24665), + 89: uint16(24705), + 90: uint16(24717), + 91: uint16(24807), + 92: uint16(24707), + 93: uint16(24730), + }, + 55: { + 0: uint16(24708), + 1: uint16(24731), + 2: uint16(24726), + 3: uint16(24727), + 4: uint16(24722), + 5: uint16(24743), + 6: uint16(24715), + 7: uint16(24801), + 8: uint16(24760), + 9: uint16(24800), + 10: uint16(24787), + 11: uint16(24756), + 12: uint16(24560), + 13: uint16(24765), + 14: uint16(24774), + 15: uint16(24757), + 16: uint16(24792), + 17: uint16(24909), + 18: uint16(24853), + 19: uint16(24838), + 20: uint16(24822), + 21: uint16(24823), + 22: uint16(24832), + 23: uint16(24820), + 24: uint16(24826), + 25: uint16(24835), + 26: uint16(24865), + 27: uint16(24827), + 28: uint16(24817), + 29: uint16(24845), + 30: uint16(24846), + 31: uint16(24903), + 32: uint16(24894), + 33: uint16(24872), + 34: uint16(24871), + 35: uint16(24906), + 36: uint16(24895), + 37: uint16(24892), + 38: uint16(24876), + 39: uint16(24884), + 40: uint16(24893), + 41: uint16(24898), + 42: uint16(24900), + 43: uint16(24947), + 44: uint16(24951), + 45: uint16(24920), + 46: uint16(24921), + 47: uint16(24922), + 48: uint16(24939), + 49: uint16(24948), + 50: uint16(24943), + 51: uint16(24933), + 52: uint16(24945), + 53: uint16(24927), + 54: uint16(24925), + 55: uint16(24915), + 56: uint16(24949), + 57: uint16(24985), + 58: uint16(24982), + 59: uint16(24967), + 60: uint16(25004), + 61: uint16(24980), + 62: uint16(24986), + 63: uint16(24970), + 64: uint16(24977), + 65: uint16(25003), + 66: uint16(25006), + 67: uint16(25036), + 68: uint16(25034), + 69: uint16(25033), + 70: uint16(25079), + 71: uint16(25032), + 72: uint16(25027), + 73: uint16(25030), + 74: uint16(25018), + 75: uint16(25035), + 76: uint16(32633), + 77: uint16(25037), + 78: uint16(25062), + 79: uint16(25059), + 80: uint16(25078), + 81: uint16(25082), + 82: uint16(25076), + 83: uint16(25087), + 84: uint16(25085), + 85: uint16(25084), + 86: uint16(25086), + 87: uint16(25088), + 88: uint16(25096), + 89: uint16(25097), + 90: uint16(25101), + 91: uint16(25100), + 92: uint16(25108), + 93: uint16(25115), + }, + 56: { + 0: uint16(25118), + 1: uint16(25121), + 2: uint16(25130), + 3: uint16(25134), + 4: uint16(25136), + 5: uint16(25138), + 6: uint16(25139), + 7: uint16(25153), + 8: uint16(25166), + 9: uint16(25182), + 10: uint16(25187), + 11: uint16(25179), + 12: uint16(25184), + 13: uint16(25192), + 14: uint16(25212), + 15: uint16(25218), + 16: uint16(25225), + 17: uint16(25214), + 18: uint16(25234), + 19: uint16(25235), + 20: uint16(25238), + 21: uint16(25300), + 22: uint16(25219), + 23: uint16(25236), + 24: uint16(25303), + 25: uint16(25297), + 26: uint16(25275), + 27: uint16(25295), + 28: uint16(25343), + 29: uint16(25286), + 30: uint16(25812), + 31: uint16(25288), + 32: uint16(25308), + 33: uint16(25292), + 34: uint16(25290), + 35: uint16(25282), + 36: uint16(25287), + 37: uint16(25243), + 38: uint16(25289), + 39: uint16(25356), + 40: uint16(25326), + 41: uint16(25329), + 42: uint16(25383), + 43: uint16(25346), + 44: uint16(25352), + 45: uint16(25327), + 46: uint16(25333), + 47: uint16(25424), + 48: uint16(25406), + 49: uint16(25421), + 50: uint16(25628), + 51: uint16(25423), + 52: uint16(25494), + 53: uint16(25486), + 54: uint16(25472), + 55: uint16(25515), + 56: uint16(25462), + 57: uint16(25507), + 58: uint16(25487), + 59: uint16(25481), + 60: uint16(25503), + 61: uint16(25525), + 62: uint16(25451), + 63: uint16(25449), + 64: uint16(25534), + 65: uint16(25577), + 66: uint16(25536), + 67: uint16(25542), + 68: uint16(25571), + 69: uint16(25545), + 70: uint16(25554), + 71: uint16(25590), + 72: uint16(25540), + 73: uint16(25622), + 74: uint16(25652), + 75: uint16(25606), + 76: uint16(25619), + 77: uint16(25638), + 78: uint16(25654), + 79: uint16(25885), + 80: uint16(25623), + 81: uint16(25640), + 82: uint16(25615), + 83: uint16(25703), + 84: uint16(25711), + 85: uint16(25718), + 86: uint16(25678), + 87: uint16(25898), + 88: uint16(25749), + 89: uint16(25747), + 90: uint16(25765), + 91: uint16(25769), + 92: uint16(25736), + 93: uint16(25788), + }, + 57: { + 0: uint16(25818), + 1: uint16(25810), + 2: uint16(25797), + 3: uint16(25799), + 4: uint16(25787), + 5: uint16(25816), + 6: uint16(25794), + 7: uint16(25841), + 8: uint16(25831), + 9: uint16(33289), + 10: uint16(25824), + 11: uint16(25825), + 12: uint16(25260), + 13: uint16(25827), + 14: uint16(25839), + 15: uint16(25900), + 16: uint16(25846), + 17: uint16(25844), + 18: uint16(25842), + 19: uint16(25850), + 20: uint16(25856), + 21: uint16(25853), + 22: uint16(25880), + 23: uint16(25884), + 24: uint16(25861), + 25: uint16(25892), + 26: uint16(25891), + 27: uint16(25899), + 28: uint16(25908), + 29: uint16(25909), + 30: uint16(25911), + 31: uint16(25910), + 32: uint16(25912), + 33: uint16(30027), + 34: uint16(25928), + 35: uint16(25942), + 36: uint16(25941), + 37: uint16(25933), + 38: uint16(25944), + 39: uint16(25950), + 40: uint16(25949), + 41: uint16(25970), + 42: uint16(25976), + 43: uint16(25986), + 44: uint16(25987), + 45: uint16(35722), + 46: uint16(26011), + 47: uint16(26015), + 48: uint16(26027), + 49: uint16(26039), + 50: uint16(26051), + 51: uint16(26054), + 52: uint16(26049), + 53: uint16(26052), + 54: uint16(26060), + 55: uint16(26066), + 56: uint16(26075), + 57: uint16(26073), + 58: uint16(26080), + 59: uint16(26081), + 60: uint16(26097), + 61: uint16(26482), + 62: uint16(26122), + 63: uint16(26115), + 64: uint16(26107), + 65: uint16(26483), + 66: uint16(26165), + 67: uint16(26166), + 68: uint16(26164), + 69: uint16(26140), + 70: uint16(26191), + 71: uint16(26180), + 72: uint16(26185), + 73: uint16(26177), + 74: uint16(26206), + 75: uint16(26205), + 76: uint16(26212), + 77: uint16(26215), + 78: uint16(26216), + 79: uint16(26207), + 80: uint16(26210), + 81: uint16(26224), + 82: uint16(26243), + 83: uint16(26248), + 84: uint16(26254), + 85: uint16(26249), + 86: uint16(26244), + 87: uint16(26264), + 88: uint16(26269), + 89: uint16(26305), + 90: uint16(26297), + 91: uint16(26313), + 92: uint16(26302), + 93: uint16(26300), + }, + 58: { + 0: uint16(26308), + 1: uint16(26296), + 2: uint16(26326), + 3: uint16(26330), + 4: uint16(26336), + 5: uint16(26175), + 6: uint16(26342), + 7: uint16(26345), + 8: uint16(26352), + 9: uint16(26357), + 10: uint16(26359), + 11: uint16(26383), + 12: uint16(26390), + 13: uint16(26398), + 14: uint16(26406), + 15: uint16(26407), + 16: uint16(38712), + 17: uint16(26414), + 18: uint16(26431), + 19: uint16(26422), + 20: uint16(26433), + 21: uint16(26424), + 22: uint16(26423), + 23: uint16(26438), + 24: uint16(26462), + 25: uint16(26464), + 26: uint16(26457), + 27: uint16(26467), + 28: uint16(26468), + 29: uint16(26505), + 30: uint16(26480), + 31: uint16(26537), + 32: uint16(26492), + 33: uint16(26474), + 34: uint16(26508), + 35: uint16(26507), + 36: uint16(26534), + 37: uint16(26529), + 38: uint16(26501), + 39: uint16(26551), + 40: uint16(26607), + 41: uint16(26548), + 42: uint16(26604), + 43: uint16(26547), + 44: uint16(26601), + 45: uint16(26552), + 46: uint16(26596), + 47: uint16(26590), + 48: uint16(26589), + 49: uint16(26594), + 50: uint16(26606), + 51: uint16(26553), + 52: uint16(26574), + 53: uint16(26566), + 54: uint16(26599), + 55: uint16(27292), + 56: uint16(26654), + 57: uint16(26694), + 58: uint16(26665), + 59: uint16(26688), + 60: uint16(26701), + 61: uint16(26674), + 62: uint16(26702), + 63: uint16(26803), + 64: uint16(26667), + 65: uint16(26713), + 66: uint16(26723), + 67: uint16(26743), + 68: uint16(26751), + 69: uint16(26783), + 70: uint16(26767), + 71: uint16(26797), + 72: uint16(26772), + 73: uint16(26781), + 74: uint16(26779), + 75: uint16(26755), + 76: uint16(27310), + 77: uint16(26809), + 78: uint16(26740), + 79: uint16(26805), + 80: uint16(26784), + 81: uint16(26810), + 82: uint16(26895), + 83: uint16(26765), + 84: uint16(26750), + 85: uint16(26881), + 86: uint16(26826), + 87: uint16(26888), + 88: uint16(26840), + 89: uint16(26914), + 90: uint16(26918), + 91: uint16(26849), + 92: uint16(26892), + 93: uint16(26829), + }, + 59: { + 0: uint16(26836), + 1: uint16(26855), + 2: uint16(26837), + 3: uint16(26934), + 4: uint16(26898), + 5: uint16(26884), + 6: uint16(26839), + 7: uint16(26851), + 8: uint16(26917), + 9: uint16(26873), + 10: uint16(26848), + 11: uint16(26863), + 12: uint16(26920), + 13: uint16(26922), + 14: uint16(26906), + 15: uint16(26915), + 16: uint16(26913), + 17: uint16(26822), + 18: uint16(27001), + 19: uint16(26999), + 20: uint16(26972), + 21: uint16(27000), + 22: uint16(26987), + 23: uint16(26964), + 24: uint16(27006), + 25: uint16(26990), + 26: uint16(26937), + 27: uint16(26996), + 28: uint16(26941), + 29: uint16(26969), + 30: uint16(26928), + 31: uint16(26977), + 32: uint16(26974), + 33: uint16(26973), + 34: uint16(27009), + 35: uint16(26986), + 36: uint16(27058), + 37: uint16(27054), + 38: uint16(27088), + 39: uint16(27071), + 40: uint16(27073), + 41: uint16(27091), + 42: uint16(27070), + 43: uint16(27086), + 44: uint16(23528), + 45: uint16(27082), + 46: uint16(27101), + 47: uint16(27067), + 48: uint16(27075), + 49: uint16(27047), + 50: uint16(27182), + 51: uint16(27025), + 52: uint16(27040), + 53: uint16(27036), + 54: uint16(27029), + 55: uint16(27060), + 56: uint16(27102), + 57: uint16(27112), + 58: uint16(27138), + 59: uint16(27163), + 60: uint16(27135), + 61: uint16(27402), + 62: uint16(27129), + 63: uint16(27122), + 64: uint16(27111), + 65: uint16(27141), + 66: uint16(27057), + 67: uint16(27166), + 68: uint16(27117), + 69: uint16(27156), + 70: uint16(27115), + 71: uint16(27146), + 72: uint16(27154), + 73: uint16(27329), + 74: uint16(27171), + 75: uint16(27155), + 76: uint16(27204), + 77: uint16(27148), + 78: uint16(27250), + 79: uint16(27190), + 80: uint16(27256), + 81: uint16(27207), + 82: uint16(27234), + 83: uint16(27225), + 84: uint16(27238), + 85: uint16(27208), + 86: uint16(27192), + 87: uint16(27170), + 88: uint16(27280), + 89: uint16(27277), + 90: uint16(27296), + 91: uint16(27268), + 92: uint16(27298), + 93: uint16(27299), + }, + 60: { + 0: uint16(27287), + 1: uint16(34327), + 2: uint16(27323), + 3: uint16(27331), + 4: uint16(27330), + 5: uint16(27320), + 6: uint16(27315), + 7: uint16(27308), + 8: uint16(27358), + 9: uint16(27345), + 10: uint16(27359), + 11: uint16(27306), + 12: uint16(27354), + 13: uint16(27370), + 14: uint16(27387), + 15: uint16(27397), + 16: uint16(34326), + 17: uint16(27386), + 18: uint16(27410), + 19: uint16(27414), + 20: uint16(39729), + 21: uint16(27423), + 22: uint16(27448), + 23: uint16(27447), + 24: uint16(30428), + 25: uint16(27449), + 26: uint16(39150), + 27: uint16(27463), + 28: uint16(27459), + 29: uint16(27465), + 30: uint16(27472), + 31: uint16(27481), + 32: uint16(27476), + 33: uint16(27483), + 34: uint16(27487), + 35: uint16(27489), + 36: uint16(27512), + 37: uint16(27513), + 38: uint16(27519), + 39: uint16(27520), + 40: uint16(27524), + 41: uint16(27523), + 42: uint16(27533), + 43: uint16(27544), + 44: uint16(27541), + 45: uint16(27550), + 46: uint16(27556), + 47: uint16(27562), + 48: uint16(27563), + 49: uint16(27567), + 50: uint16(27570), + 51: uint16(27569), + 52: uint16(27571), + 53: uint16(27575), + 54: uint16(27580), + 55: uint16(27590), + 56: uint16(27595), + 57: uint16(27603), + 58: uint16(27615), + 59: uint16(27628), + 60: uint16(27627), + 61: uint16(27635), + 62: uint16(27631), + 63: uint16(40638), + 64: uint16(27656), + 65: uint16(27667), + 66: uint16(27668), + 67: uint16(27675), + 68: uint16(27684), + 69: uint16(27683), + 70: uint16(27742), + 71: uint16(27733), + 72: uint16(27746), + 73: uint16(27754), + 74: uint16(27778), + 75: uint16(27789), + 76: uint16(27802), + 77: uint16(27777), + 78: uint16(27803), + 79: uint16(27774), + 80: uint16(27752), + 81: uint16(27763), + 82: uint16(27794), + 83: uint16(27792), + 84: uint16(27844), + 85: uint16(27889), + 86: uint16(27859), + 87: uint16(27837), + 88: uint16(27863), + 89: uint16(27845), + 90: uint16(27869), + 91: uint16(27822), + 92: uint16(27825), + 93: uint16(27838), + }, + 61: { + 0: uint16(27834), + 1: uint16(27867), + 2: uint16(27887), + 3: uint16(27865), + 4: uint16(27882), + 5: uint16(27935), + 6: uint16(34893), + 7: uint16(27958), + 8: uint16(27947), + 9: uint16(27965), + 10: uint16(27960), + 11: uint16(27929), + 12: uint16(27957), + 13: uint16(27955), + 14: uint16(27922), + 15: uint16(27916), + 16: uint16(28003), + 17: uint16(28051), + 18: uint16(28004), + 19: uint16(27994), + 20: uint16(28025), + 21: uint16(27993), + 22: uint16(28046), + 23: uint16(28053), + 24: uint16(28644), + 25: uint16(28037), + 26: uint16(28153), + 27: uint16(28181), + 28: uint16(28170), + 29: uint16(28085), + 30: uint16(28103), + 31: uint16(28134), + 32: uint16(28088), + 33: uint16(28102), + 34: uint16(28140), + 35: uint16(28126), + 36: uint16(28108), + 37: uint16(28136), + 38: uint16(28114), + 39: uint16(28101), + 40: uint16(28154), + 41: uint16(28121), + 42: uint16(28132), + 43: uint16(28117), + 44: uint16(28138), + 45: uint16(28142), + 46: uint16(28205), + 47: uint16(28270), + 48: uint16(28206), + 49: uint16(28185), + 50: uint16(28274), + 51: uint16(28255), + 52: uint16(28222), + 53: uint16(28195), + 54: uint16(28267), + 55: uint16(28203), + 56: uint16(28278), + 57: uint16(28237), + 58: uint16(28191), + 59: uint16(28227), + 60: uint16(28218), + 61: uint16(28238), + 62: uint16(28196), + 63: uint16(28415), + 64: uint16(28189), + 65: uint16(28216), + 66: uint16(28290), + 67: uint16(28330), + 68: uint16(28312), + 69: uint16(28361), + 70: uint16(28343), + 71: uint16(28371), + 72: uint16(28349), + 73: uint16(28335), + 74: uint16(28356), + 75: uint16(28338), + 76: uint16(28372), + 77: uint16(28373), + 78: uint16(28303), + 79: uint16(28325), + 80: uint16(28354), + 81: uint16(28319), + 82: uint16(28481), + 83: uint16(28433), + 84: uint16(28748), + 85: uint16(28396), + 86: uint16(28408), + 87: uint16(28414), + 88: uint16(28479), + 89: uint16(28402), + 90: uint16(28465), + 91: uint16(28399), + 92: uint16(28466), + 93: uint16(28364), + }, + 62: { + 0: uint16(28478), + 1: uint16(28435), + 2: uint16(28407), + 3: uint16(28550), + 4: uint16(28538), + 5: uint16(28536), + 6: uint16(28545), + 7: uint16(28544), + 8: uint16(28527), + 9: uint16(28507), + 10: uint16(28659), + 11: uint16(28525), + 12: uint16(28546), + 13: uint16(28540), + 14: uint16(28504), + 15: uint16(28558), + 16: uint16(28561), + 17: uint16(28610), + 18: uint16(28518), + 19: uint16(28595), + 20: uint16(28579), + 21: uint16(28577), + 22: uint16(28580), + 23: uint16(28601), + 24: uint16(28614), + 25: uint16(28586), + 26: uint16(28639), + 27: uint16(28629), + 28: uint16(28652), + 29: uint16(28628), + 30: uint16(28632), + 31: uint16(28657), + 32: uint16(28654), + 33: uint16(28635), + 34: uint16(28681), + 35: uint16(28683), + 36: uint16(28666), + 37: uint16(28689), + 38: uint16(28673), + 39: uint16(28687), + 40: uint16(28670), + 41: uint16(28699), + 42: uint16(28698), + 43: uint16(28532), + 44: uint16(28701), + 45: uint16(28696), + 46: uint16(28703), + 47: uint16(28720), + 48: uint16(28734), + 49: uint16(28722), + 50: uint16(28753), + 51: uint16(28771), + 52: uint16(28825), + 53: uint16(28818), + 54: uint16(28847), + 55: uint16(28913), + 56: uint16(28844), + 57: uint16(28856), + 58: uint16(28851), + 59: uint16(28846), + 60: uint16(28895), + 61: uint16(28875), + 62: uint16(28893), + 63: uint16(28889), + 64: uint16(28937), + 65: uint16(28925), + 66: uint16(28956), + 67: uint16(28953), + 68: uint16(29029), + 69: uint16(29013), + 70: uint16(29064), + 71: uint16(29030), + 72: uint16(29026), + 73: uint16(29004), + 74: uint16(29014), + 75: uint16(29036), + 76: uint16(29071), + 77: uint16(29179), + 78: uint16(29060), + 79: uint16(29077), + 80: uint16(29096), + 81: uint16(29100), + 82: uint16(29143), + 83: uint16(29113), + 84: uint16(29118), + 85: uint16(29138), + 86: uint16(29129), + 87: uint16(29140), + 88: uint16(29134), + 89: uint16(29152), + 90: uint16(29164), + 91: uint16(29159), + 92: uint16(29173), + 93: uint16(29180), + }, + 63: { + 0: uint16(29177), + 1: uint16(29183), + 2: uint16(29197), + 3: uint16(29200), + 4: uint16(29211), + 5: uint16(29224), + 6: uint16(29229), + 7: uint16(29228), + 8: uint16(29232), + 9: uint16(29234), + 10: uint16(29243), + 11: uint16(29244), + 12: uint16(29247), + 13: uint16(29248), + 14: uint16(29254), + 15: uint16(29259), + 16: uint16(29272), + 17: uint16(29300), + 18: uint16(29310), + 19: uint16(29314), + 20: uint16(29313), + 21: uint16(29319), + 22: uint16(29330), + 23: uint16(29334), + 24: uint16(29346), + 25: uint16(29351), + 26: uint16(29369), + 27: uint16(29362), + 28: uint16(29379), + 29: uint16(29382), + 30: uint16(29380), + 31: uint16(29390), + 32: uint16(29394), + 33: uint16(29410), + 34: uint16(29408), + 35: uint16(29409), + 36: uint16(29433), + 37: uint16(29431), + 38: uint16(20495), + 39: uint16(29463), + 40: uint16(29450), + 41: uint16(29468), + 42: uint16(29462), + 43: uint16(29469), + 44: uint16(29492), + 45: uint16(29487), + 46: uint16(29481), + 47: uint16(29477), + 48: uint16(29502), + 49: uint16(29518), + 50: uint16(29519), + 51: uint16(40664), + 52: uint16(29527), + 53: uint16(29546), + 54: uint16(29544), + 55: uint16(29552), + 56: uint16(29560), + 57: uint16(29557), + 58: uint16(29563), + 59: uint16(29562), + 60: uint16(29640), + 61: uint16(29619), + 62: uint16(29646), + 63: uint16(29627), + 64: uint16(29632), + 65: uint16(29669), + 66: uint16(29678), + 67: uint16(29662), + 68: uint16(29858), + 69: uint16(29701), + 70: uint16(29807), + 71: uint16(29733), + 72: uint16(29688), + 73: uint16(29746), + 74: uint16(29754), + 75: uint16(29781), + 76: uint16(29759), + 77: uint16(29791), + 78: uint16(29785), + 79: uint16(29761), + 80: uint16(29788), + 81: uint16(29801), + 82: uint16(29808), + 83: uint16(29795), + 84: uint16(29802), + 85: uint16(29814), + 86: uint16(29822), + 87: uint16(29835), + 88: uint16(29854), + 89: uint16(29863), + 90: uint16(29898), + 91: uint16(29903), + 92: uint16(29908), + 93: uint16(29681), + }, + 64: { + 0: uint16(29920), + 1: uint16(29923), + 2: uint16(29927), + 3: uint16(29929), + 4: uint16(29934), + 5: uint16(29938), + 6: uint16(29936), + 7: uint16(29937), + 8: uint16(29944), + 9: uint16(29943), + 10: uint16(29956), + 11: uint16(29955), + 12: uint16(29957), + 13: uint16(29964), + 14: uint16(29966), + 15: uint16(29965), + 16: uint16(29973), + 17: uint16(29971), + 18: uint16(29982), + 19: uint16(29990), + 20: uint16(29996), + 21: uint16(30012), + 22: uint16(30020), + 23: uint16(30029), + 24: uint16(30026), + 25: uint16(30025), + 26: uint16(30043), + 27: uint16(30022), + 28: uint16(30042), + 29: uint16(30057), + 30: uint16(30052), + 31: uint16(30055), + 32: uint16(30059), + 33: uint16(30061), + 34: uint16(30072), + 35: uint16(30070), + 36: uint16(30086), + 37: uint16(30087), + 38: uint16(30068), + 39: uint16(30090), + 40: uint16(30089), + 41: uint16(30082), + 42: uint16(30100), + 43: uint16(30106), + 44: uint16(30109), + 45: uint16(30117), + 46: uint16(30115), + 47: uint16(30146), + 48: uint16(30131), + 49: uint16(30147), + 50: uint16(30133), + 51: uint16(30141), + 52: uint16(30136), + 53: uint16(30140), + 54: uint16(30129), + 55: uint16(30157), + 56: uint16(30154), + 57: uint16(30162), + 58: uint16(30169), + 59: uint16(30179), + 60: uint16(30174), + 61: uint16(30206), + 62: uint16(30207), + 63: uint16(30204), + 64: uint16(30209), + 65: uint16(30192), + 66: uint16(30202), + 67: uint16(30194), + 68: uint16(30195), + 69: uint16(30219), + 70: uint16(30221), + 71: uint16(30217), + 72: uint16(30239), + 73: uint16(30247), + 74: uint16(30240), + 75: uint16(30241), + 76: uint16(30242), + 77: uint16(30244), + 78: uint16(30260), + 79: uint16(30256), + 80: uint16(30267), + 81: uint16(30279), + 82: uint16(30280), + 83: uint16(30278), + 84: uint16(30300), + 85: uint16(30296), + 86: uint16(30305), + 87: uint16(30306), + 88: uint16(30312), + 89: uint16(30313), + 90: uint16(30314), + 91: uint16(30311), + 92: uint16(30316), + 93: uint16(30320), + }, + 65: { + 0: uint16(30322), + 1: uint16(30326), + 2: uint16(30328), + 3: uint16(30332), + 4: uint16(30336), + 5: uint16(30339), + 6: uint16(30344), + 7: uint16(30347), + 8: uint16(30350), + 9: uint16(30358), + 10: uint16(30355), + 11: uint16(30361), + 12: uint16(30362), + 13: uint16(30384), + 14: uint16(30388), + 15: uint16(30392), + 16: uint16(30393), + 17: uint16(30394), + 18: uint16(30402), + 19: uint16(30413), + 20: uint16(30422), + 21: uint16(30418), + 22: uint16(30430), + 23: uint16(30433), + 24: uint16(30437), + 25: uint16(30439), + 26: uint16(30442), + 27: uint16(34351), + 28: uint16(30459), + 29: uint16(30472), + 30: uint16(30471), + 31: uint16(30468), + 32: uint16(30505), + 33: uint16(30500), + 34: uint16(30494), + 35: uint16(30501), + 36: uint16(30502), + 37: uint16(30491), + 38: uint16(30519), + 39: uint16(30520), + 40: uint16(30535), + 41: uint16(30554), + 42: uint16(30568), + 43: uint16(30571), + 44: uint16(30555), + 45: uint16(30565), + 46: uint16(30591), + 47: uint16(30590), + 48: uint16(30585), + 49: uint16(30606), + 50: uint16(30603), + 51: uint16(30609), + 52: uint16(30624), + 53: uint16(30622), + 54: uint16(30640), + 55: uint16(30646), + 56: uint16(30649), + 57: uint16(30655), + 58: uint16(30652), + 59: uint16(30653), + 60: uint16(30651), + 61: uint16(30663), + 62: uint16(30669), + 63: uint16(30679), + 64: uint16(30682), + 65: uint16(30684), + 66: uint16(30691), + 67: uint16(30702), + 68: uint16(30716), + 69: uint16(30732), + 70: uint16(30738), + 71: uint16(31014), + 72: uint16(30752), + 73: uint16(31018), + 74: uint16(30789), + 75: uint16(30862), + 76: uint16(30836), + 77: uint16(30854), + 78: uint16(30844), + 79: uint16(30874), + 80: uint16(30860), + 81: uint16(30883), + 82: uint16(30901), + 83: uint16(30890), + 84: uint16(30895), + 85: uint16(30929), + 86: uint16(30918), + 87: uint16(30923), + 88: uint16(30932), + 89: uint16(30910), + 90: uint16(30908), + 91: uint16(30917), + 92: uint16(30922), + 93: uint16(30956), + }, + 66: { + 0: uint16(30951), + 1: uint16(30938), + 2: uint16(30973), + 3: uint16(30964), + 4: uint16(30983), + 5: uint16(30994), + 6: uint16(30993), + 7: uint16(31001), + 8: uint16(31020), + 9: uint16(31019), + 10: uint16(31040), + 11: uint16(31072), + 12: uint16(31063), + 13: uint16(31071), + 14: uint16(31066), + 15: uint16(31061), + 16: uint16(31059), + 17: uint16(31098), + 18: uint16(31103), + 19: uint16(31114), + 20: uint16(31133), + 21: uint16(31143), + 22: uint16(40779), + 23: uint16(31146), + 24: uint16(31150), + 25: uint16(31155), + 26: uint16(31161), + 27: uint16(31162), + 28: uint16(31177), + 29: uint16(31189), + 30: uint16(31207), + 31: uint16(31212), + 32: uint16(31201), + 33: uint16(31203), + 34: uint16(31240), + 35: uint16(31245), + 36: uint16(31256), + 37: uint16(31257), + 38: uint16(31264), + 39: uint16(31263), + 40: uint16(31104), + 41: uint16(31281), + 42: uint16(31291), + 43: uint16(31294), + 44: uint16(31287), + 45: uint16(31299), + 46: uint16(31319), + 47: uint16(31305), + 48: uint16(31329), + 49: uint16(31330), + 50: uint16(31337), + 51: uint16(40861), + 52: uint16(31344), + 53: uint16(31353), + 54: uint16(31357), + 55: uint16(31368), + 56: uint16(31383), + 57: uint16(31381), + 58: uint16(31384), + 59: uint16(31382), + 60: uint16(31401), + 61: uint16(31432), + 62: uint16(31408), + 63: uint16(31414), + 64: uint16(31429), + 65: uint16(31428), + 66: uint16(31423), + 67: uint16(36995), + 68: uint16(31431), + 69: uint16(31434), + 70: uint16(31437), + 71: uint16(31439), + 72: uint16(31445), + 73: uint16(31443), + 74: uint16(31449), + 75: uint16(31450), + 76: uint16(31453), + 77: uint16(31457), + 78: uint16(31458), + 79: uint16(31462), + 80: uint16(31469), + 81: uint16(31472), + 82: uint16(31490), + 83: uint16(31503), + 84: uint16(31498), + 85: uint16(31494), + 86: uint16(31539), + 87: uint16(31512), + 88: uint16(31513), + 89: uint16(31518), + 90: uint16(31541), + 91: uint16(31528), + 92: uint16(31542), + 93: uint16(31568), + }, + 67: { + 0: uint16(31610), + 1: uint16(31492), + 2: uint16(31565), + 3: uint16(31499), + 4: uint16(31564), + 5: uint16(31557), + 6: uint16(31605), + 7: uint16(31589), + 8: uint16(31604), + 9: uint16(31591), + 10: uint16(31600), + 11: uint16(31601), + 12: uint16(31596), + 13: uint16(31598), + 14: uint16(31645), + 15: uint16(31640), + 16: uint16(31647), + 17: uint16(31629), + 18: uint16(31644), + 19: uint16(31642), + 20: uint16(31627), + 21: uint16(31634), + 22: uint16(31631), + 23: uint16(31581), + 24: uint16(31641), + 25: uint16(31691), + 26: uint16(31681), + 27: uint16(31692), + 28: uint16(31695), + 29: uint16(31668), + 30: uint16(31686), + 31: uint16(31709), + 32: uint16(31721), + 33: uint16(31761), + 34: uint16(31764), + 35: uint16(31718), + 36: uint16(31717), + 37: uint16(31840), + 38: uint16(31744), + 39: uint16(31751), + 40: uint16(31763), + 41: uint16(31731), + 42: uint16(31735), + 43: uint16(31767), + 44: uint16(31757), + 45: uint16(31734), + 46: uint16(31779), + 47: uint16(31783), + 48: uint16(31786), + 49: uint16(31775), + 50: uint16(31799), + 51: uint16(31787), + 52: uint16(31805), + 53: uint16(31820), + 54: uint16(31811), + 55: uint16(31828), + 56: uint16(31823), + 57: uint16(31808), + 58: uint16(31824), + 59: uint16(31832), + 60: uint16(31839), + 61: uint16(31844), + 62: uint16(31830), + 63: uint16(31845), + 64: uint16(31852), + 65: uint16(31861), + 66: uint16(31875), + 67: uint16(31888), + 68: uint16(31908), + 69: uint16(31917), + 70: uint16(31906), + 71: uint16(31915), + 72: uint16(31905), + 73: uint16(31912), + 74: uint16(31923), + 75: uint16(31922), + 76: uint16(31921), + 77: uint16(31918), + 78: uint16(31929), + 79: uint16(31933), + 80: uint16(31936), + 81: uint16(31941), + 82: uint16(31938), + 83: uint16(31960), + 84: uint16(31954), + 85: uint16(31964), + 86: uint16(31970), + 87: uint16(39739), + 88: uint16(31983), + 89: uint16(31986), + 90: uint16(31988), + 91: uint16(31990), + 92: uint16(31994), + 93: uint16(32006), + }, + 68: { + 0: uint16(32002), + 1: uint16(32028), + 2: uint16(32021), + 3: uint16(32010), + 4: uint16(32069), + 5: uint16(32075), + 6: uint16(32046), + 7: uint16(32050), + 8: uint16(32063), + 9: uint16(32053), + 10: uint16(32070), + 11: uint16(32115), + 12: uint16(32086), + 13: uint16(32078), + 14: uint16(32114), + 15: uint16(32104), + 16: uint16(32110), + 17: uint16(32079), + 18: uint16(32099), + 19: uint16(32147), + 20: uint16(32137), + 21: uint16(32091), + 22: uint16(32143), + 23: uint16(32125), + 24: uint16(32155), + 25: uint16(32186), + 26: uint16(32174), + 27: uint16(32163), + 28: uint16(32181), + 29: uint16(32199), + 30: uint16(32189), + 31: uint16(32171), + 32: uint16(32317), + 33: uint16(32162), + 34: uint16(32175), + 35: uint16(32220), + 36: uint16(32184), + 37: uint16(32159), + 38: uint16(32176), + 39: uint16(32216), + 40: uint16(32221), + 41: uint16(32228), + 42: uint16(32222), + 43: uint16(32251), + 44: uint16(32242), + 45: uint16(32225), + 46: uint16(32261), + 47: uint16(32266), + 48: uint16(32291), + 49: uint16(32289), + 50: uint16(32274), + 51: uint16(32305), + 52: uint16(32287), + 53: uint16(32265), + 54: uint16(32267), + 55: uint16(32290), + 56: uint16(32326), + 57: uint16(32358), + 58: uint16(32315), + 59: uint16(32309), + 60: uint16(32313), + 61: uint16(32323), + 62: uint16(32311), + 63: uint16(32306), + 64: uint16(32314), + 65: uint16(32359), + 66: uint16(32349), + 67: uint16(32342), + 68: uint16(32350), + 69: uint16(32345), + 70: uint16(32346), + 71: uint16(32377), + 72: uint16(32362), + 73: uint16(32361), + 74: uint16(32380), + 75: uint16(32379), + 76: uint16(32387), + 77: uint16(32213), + 78: uint16(32381), + 79: uint16(36782), + 80: uint16(32383), + 81: uint16(32392), + 82: uint16(32393), + 83: uint16(32396), + 84: uint16(32402), + 85: uint16(32400), + 86: uint16(32403), + 87: uint16(32404), + 88: uint16(32406), + 89: uint16(32398), + 90: uint16(32411), + 91: uint16(32412), + 92: uint16(32568), + 93: uint16(32570), + }, + 69: { + 0: uint16(32581), + 1: uint16(32588), + 2: uint16(32589), + 3: uint16(32590), + 4: uint16(32592), + 5: uint16(32593), + 6: uint16(32597), + 7: uint16(32596), + 8: uint16(32600), + 9: uint16(32607), + 10: uint16(32608), + 11: uint16(32616), + 12: uint16(32617), + 13: uint16(32615), + 14: uint16(32632), + 15: uint16(32642), + 16: uint16(32646), + 17: uint16(32643), + 18: uint16(32648), + 19: uint16(32647), + 20: uint16(32652), + 21: uint16(32660), + 22: uint16(32670), + 23: uint16(32669), + 24: uint16(32666), + 25: uint16(32675), + 26: uint16(32687), + 27: uint16(32690), + 28: uint16(32697), + 29: uint16(32686), + 30: uint16(32694), + 31: uint16(32696), + 32: uint16(35697), + 33: uint16(32709), + 34: uint16(32710), + 35: uint16(32714), + 36: uint16(32725), + 37: uint16(32724), + 38: uint16(32737), + 39: uint16(32742), + 40: uint16(32745), + 41: uint16(32755), + 42: uint16(32761), + 43: uint16(39132), + 44: uint16(32774), + 45: uint16(32772), + 46: uint16(32779), + 47: uint16(32786), + 48: uint16(32792), + 49: uint16(32793), + 50: uint16(32796), + 51: uint16(32801), + 52: uint16(32808), + 53: uint16(32831), + 54: uint16(32827), + 55: uint16(32842), + 56: uint16(32838), + 57: uint16(32850), + 58: uint16(32856), + 59: uint16(32858), + 60: uint16(32863), + 61: uint16(32866), + 62: uint16(32872), + 63: uint16(32883), + 64: uint16(32882), + 65: uint16(32880), + 66: uint16(32886), + 67: uint16(32889), + 68: uint16(32893), + 69: uint16(32895), + 70: uint16(32900), + 71: uint16(32902), + 72: uint16(32901), + 73: uint16(32923), + 74: uint16(32915), + 75: uint16(32922), + 76: uint16(32941), + 77: uint16(20880), + 78: uint16(32940), + 79: uint16(32987), + 80: uint16(32997), + 81: uint16(32985), + 82: uint16(32989), + 83: uint16(32964), + 84: uint16(32986), + 85: uint16(32982), + 86: uint16(33033), + 87: uint16(33007), + 88: uint16(33009), + 89: uint16(33051), + 90: uint16(33065), + 91: uint16(33059), + 92: uint16(33071), + 93: uint16(33099), + }, + 70: { + 0: uint16(38539), + 1: uint16(33094), + 2: uint16(33086), + 3: uint16(33107), + 4: uint16(33105), + 5: uint16(33020), + 6: uint16(33137), + 7: uint16(33134), + 8: uint16(33125), + 9: uint16(33126), + 10: uint16(33140), + 11: uint16(33155), + 12: uint16(33160), + 13: uint16(33162), + 14: uint16(33152), + 15: uint16(33154), + 16: uint16(33184), + 17: uint16(33173), + 18: uint16(33188), + 19: uint16(33187), + 20: uint16(33119), + 21: uint16(33171), + 22: uint16(33193), + 23: uint16(33200), + 24: uint16(33205), + 25: uint16(33214), + 26: uint16(33208), + 27: uint16(33213), + 28: uint16(33216), + 29: uint16(33218), + 30: uint16(33210), + 31: uint16(33225), + 32: uint16(33229), + 33: uint16(33233), + 34: uint16(33241), + 35: uint16(33240), + 36: uint16(33224), + 37: uint16(33242), + 38: uint16(33247), + 39: uint16(33248), + 40: uint16(33255), + 41: uint16(33274), + 42: uint16(33275), + 43: uint16(33278), + 44: uint16(33281), + 45: uint16(33282), + 46: uint16(33285), + 47: uint16(33287), + 48: uint16(33290), + 49: uint16(33293), + 50: uint16(33296), + 51: uint16(33302), + 52: uint16(33321), + 53: uint16(33323), + 54: uint16(33336), + 55: uint16(33331), + 56: uint16(33344), + 57: uint16(33369), + 58: uint16(33368), + 59: uint16(33373), + 60: uint16(33370), + 61: uint16(33375), + 62: uint16(33380), + 63: uint16(33378), + 64: uint16(33384), + 65: uint16(33386), + 66: uint16(33387), + 67: uint16(33326), + 68: uint16(33393), + 69: uint16(33399), + 70: uint16(33400), + 71: uint16(33406), + 72: uint16(33421), + 73: uint16(33426), + 74: uint16(33451), + 75: uint16(33439), + 76: uint16(33467), + 77: uint16(33452), + 78: uint16(33505), + 79: uint16(33507), + 80: uint16(33503), + 81: uint16(33490), + 82: uint16(33524), + 83: uint16(33523), + 84: uint16(33530), + 85: uint16(33683), + 86: uint16(33539), + 87: uint16(33531), + 88: uint16(33529), + 89: uint16(33502), + 90: uint16(33542), + 91: uint16(33500), + 92: uint16(33545), + 93: uint16(33497), + }, + 71: { + 0: uint16(33589), + 1: uint16(33588), + 2: uint16(33558), + 3: uint16(33586), + 4: uint16(33585), + 5: uint16(33600), + 6: uint16(33593), + 7: uint16(33616), + 8: uint16(33605), + 9: uint16(33583), + 10: uint16(33579), + 11: uint16(33559), + 12: uint16(33560), + 13: uint16(33669), + 14: uint16(33690), + 15: uint16(33706), + 16: uint16(33695), + 17: uint16(33698), + 18: uint16(33686), + 19: uint16(33571), + 20: uint16(33678), + 21: uint16(33671), + 22: uint16(33674), + 23: uint16(33660), + 24: uint16(33717), + 25: uint16(33651), + 26: uint16(33653), + 27: uint16(33696), + 28: uint16(33673), + 29: uint16(33704), + 30: uint16(33780), + 31: uint16(33811), + 32: uint16(33771), + 33: uint16(33742), + 34: uint16(33789), + 35: uint16(33795), + 36: uint16(33752), + 37: uint16(33803), + 38: uint16(33729), + 39: uint16(33783), + 40: uint16(33799), + 41: uint16(33760), + 42: uint16(33778), + 43: uint16(33805), + 44: uint16(33826), + 45: uint16(33824), + 46: uint16(33725), + 47: uint16(33848), + 48: uint16(34054), + 49: uint16(33787), + 50: uint16(33901), + 51: uint16(33834), + 52: uint16(33852), + 53: uint16(34138), + 54: uint16(33924), + 55: uint16(33911), + 56: uint16(33899), + 57: uint16(33965), + 58: uint16(33902), + 59: uint16(33922), + 60: uint16(33897), + 61: uint16(33862), + 62: uint16(33836), + 63: uint16(33903), + 64: uint16(33913), + 65: uint16(33845), + 66: uint16(33994), + 67: uint16(33890), + 68: uint16(33977), + 69: uint16(33983), + 70: uint16(33951), + 71: uint16(34009), + 72: uint16(33997), + 73: uint16(33979), + 74: uint16(34010), + 75: uint16(34000), + 76: uint16(33985), + 77: uint16(33990), + 78: uint16(34006), + 79: uint16(33953), + 80: uint16(34081), + 81: uint16(34047), + 82: uint16(34036), + 83: uint16(34071), + 84: uint16(34072), + 85: uint16(34092), + 86: uint16(34079), + 87: uint16(34069), + 88: uint16(34068), + 89: uint16(34044), + 90: uint16(34112), + 91: uint16(34147), + 92: uint16(34136), + 93: uint16(34120), + }, + 72: { + 0: uint16(34113), + 1: uint16(34306), + 2: uint16(34123), + 3: uint16(34133), + 4: uint16(34176), + 5: uint16(34212), + 6: uint16(34184), + 7: uint16(34193), + 8: uint16(34186), + 9: uint16(34216), + 10: uint16(34157), + 11: uint16(34196), + 12: uint16(34203), + 13: uint16(34282), + 14: uint16(34183), + 15: uint16(34204), + 16: uint16(34167), + 17: uint16(34174), + 18: uint16(34192), + 19: uint16(34249), + 20: uint16(34234), + 21: uint16(34255), + 22: uint16(34233), + 23: uint16(34256), + 24: uint16(34261), + 25: uint16(34269), + 26: uint16(34277), + 27: uint16(34268), + 28: uint16(34297), + 29: uint16(34314), + 30: uint16(34323), + 31: uint16(34315), + 32: uint16(34302), + 33: uint16(34298), + 34: uint16(34310), + 35: uint16(34338), + 36: uint16(34330), + 37: uint16(34352), + 38: uint16(34367), + 39: uint16(34381), + 40: uint16(20053), + 41: uint16(34388), + 42: uint16(34399), + 43: uint16(34407), + 44: uint16(34417), + 45: uint16(34451), + 46: uint16(34467), + 47: uint16(34473), + 48: uint16(34474), + 49: uint16(34443), + 50: uint16(34444), + 51: uint16(34486), + 52: uint16(34479), + 53: uint16(34500), + 54: uint16(34502), + 55: uint16(34480), + 56: uint16(34505), + 57: uint16(34851), + 58: uint16(34475), + 59: uint16(34516), + 60: uint16(34526), + 61: uint16(34537), + 62: uint16(34540), + 63: uint16(34527), + 64: uint16(34523), + 65: uint16(34543), + 66: uint16(34578), + 67: uint16(34566), + 68: uint16(34568), + 69: uint16(34560), + 70: uint16(34563), + 71: uint16(34555), + 72: uint16(34577), + 73: uint16(34569), + 74: uint16(34573), + 75: uint16(34553), + 76: uint16(34570), + 77: uint16(34612), + 78: uint16(34623), + 79: uint16(34615), + 80: uint16(34619), + 81: uint16(34597), + 82: uint16(34601), + 83: uint16(34586), + 84: uint16(34656), + 85: uint16(34655), + 86: uint16(34680), + 87: uint16(34636), + 88: uint16(34638), + 89: uint16(34676), + 90: uint16(34647), + 91: uint16(34664), + 92: uint16(34670), + 93: uint16(34649), + }, + 73: { + 0: uint16(34643), + 1: uint16(34659), + 2: uint16(34666), + 3: uint16(34821), + 4: uint16(34722), + 5: uint16(34719), + 6: uint16(34690), + 7: uint16(34735), + 8: uint16(34763), + 9: uint16(34749), + 10: uint16(34752), + 11: uint16(34768), + 12: uint16(38614), + 13: uint16(34731), + 14: uint16(34756), + 15: uint16(34739), + 16: uint16(34759), + 17: uint16(34758), + 18: uint16(34747), + 19: uint16(34799), + 20: uint16(34802), + 21: uint16(34784), + 22: uint16(34831), + 23: uint16(34829), + 24: uint16(34814), + 25: uint16(34806), + 26: uint16(34807), + 27: uint16(34830), + 28: uint16(34770), + 29: uint16(34833), + 30: uint16(34838), + 31: uint16(34837), + 32: uint16(34850), + 33: uint16(34849), + 34: uint16(34865), + 35: uint16(34870), + 36: uint16(34873), + 37: uint16(34855), + 38: uint16(34875), + 39: uint16(34884), + 40: uint16(34882), + 41: uint16(34898), + 42: uint16(34905), + 43: uint16(34910), + 44: uint16(34914), + 45: uint16(34923), + 46: uint16(34945), + 47: uint16(34942), + 48: uint16(34974), + 49: uint16(34933), + 50: uint16(34941), + 51: uint16(34997), + 52: uint16(34930), + 53: uint16(34946), + 54: uint16(34967), + 55: uint16(34962), + 56: uint16(34990), + 57: uint16(34969), + 58: uint16(34978), + 59: uint16(34957), + 60: uint16(34980), + 61: uint16(34992), + 62: uint16(35007), + 63: uint16(34993), + 64: uint16(35011), + 65: uint16(35012), + 66: uint16(35028), + 67: uint16(35032), + 68: uint16(35033), + 69: uint16(35037), + 70: uint16(35065), + 71: uint16(35074), + 72: uint16(35068), + 73: uint16(35060), + 74: uint16(35048), + 75: uint16(35058), + 76: uint16(35076), + 77: uint16(35084), + 78: uint16(35082), + 79: uint16(35091), + 80: uint16(35139), + 81: uint16(35102), + 82: uint16(35109), + 83: uint16(35114), + 84: uint16(35115), + 85: uint16(35137), + 86: uint16(35140), + 87: uint16(35131), + 88: uint16(35126), + 89: uint16(35128), + 90: uint16(35148), + 91: uint16(35101), + 92: uint16(35168), + 93: uint16(35166), + }, + 74: { + 0: uint16(35174), + 1: uint16(35172), + 2: uint16(35181), + 3: uint16(35178), + 4: uint16(35183), + 5: uint16(35188), + 6: uint16(35191), + 7: uint16(35198), + 8: uint16(35203), + 9: uint16(35208), + 10: uint16(35210), + 11: uint16(35219), + 12: uint16(35224), + 13: uint16(35233), + 14: uint16(35241), + 15: uint16(35238), + 16: uint16(35244), + 17: uint16(35247), + 18: uint16(35250), + 19: uint16(35258), + 20: uint16(35261), + 21: uint16(35263), + 22: uint16(35264), + 23: uint16(35290), + 24: uint16(35292), + 25: uint16(35293), + 26: uint16(35303), + 27: uint16(35316), + 28: uint16(35320), + 29: uint16(35331), + 30: uint16(35350), + 31: uint16(35344), + 32: uint16(35340), + 33: uint16(35355), + 34: uint16(35357), + 35: uint16(35365), + 36: uint16(35382), + 37: uint16(35393), + 38: uint16(35419), + 39: uint16(35410), + 40: uint16(35398), + 41: uint16(35400), + 42: uint16(35452), + 43: uint16(35437), + 44: uint16(35436), + 45: uint16(35426), + 46: uint16(35461), + 47: uint16(35458), + 48: uint16(35460), + 49: uint16(35496), + 50: uint16(35489), + 51: uint16(35473), + 52: uint16(35493), + 53: uint16(35494), + 54: uint16(35482), + 55: uint16(35491), + 56: uint16(35524), + 57: uint16(35533), + 58: uint16(35522), + 59: uint16(35546), + 60: uint16(35563), + 61: uint16(35571), + 62: uint16(35559), + 63: uint16(35556), + 64: uint16(35569), + 65: uint16(35604), + 66: uint16(35552), + 67: uint16(35554), + 68: uint16(35575), + 69: uint16(35550), + 70: uint16(35547), + 71: uint16(35596), + 72: uint16(35591), + 73: uint16(35610), + 74: uint16(35553), + 75: uint16(35606), + 76: uint16(35600), + 77: uint16(35607), + 78: uint16(35616), + 79: uint16(35635), + 80: uint16(38827), + 81: uint16(35622), + 82: uint16(35627), + 83: uint16(35646), + 84: uint16(35624), + 85: uint16(35649), + 86: uint16(35660), + 87: uint16(35663), + 88: uint16(35662), + 89: uint16(35657), + 90: uint16(35670), + 91: uint16(35675), + 92: uint16(35674), + 93: uint16(35691), + }, + 75: { + 0: uint16(35679), + 1: uint16(35692), + 2: uint16(35695), + 3: uint16(35700), + 4: uint16(35709), + 5: uint16(35712), + 6: uint16(35724), + 7: uint16(35726), + 8: uint16(35730), + 9: uint16(35731), + 10: uint16(35734), + 11: uint16(35737), + 12: uint16(35738), + 13: uint16(35898), + 14: uint16(35905), + 15: uint16(35903), + 16: uint16(35912), + 17: uint16(35916), + 18: uint16(35918), + 19: uint16(35920), + 20: uint16(35925), + 21: uint16(35938), + 22: uint16(35948), + 23: uint16(35960), + 24: uint16(35962), + 25: uint16(35970), + 26: uint16(35977), + 27: uint16(35973), + 28: uint16(35978), + 29: uint16(35981), + 30: uint16(35982), + 31: uint16(35988), + 32: uint16(35964), + 33: uint16(35992), + 34: uint16(25117), + 35: uint16(36013), + 36: uint16(36010), + 37: uint16(36029), + 38: uint16(36018), + 39: uint16(36019), + 40: uint16(36014), + 41: uint16(36022), + 42: uint16(36040), + 43: uint16(36033), + 44: uint16(36068), + 45: uint16(36067), + 46: uint16(36058), + 47: uint16(36093), + 48: uint16(36090), + 49: uint16(36091), + 50: uint16(36100), + 51: uint16(36101), + 52: uint16(36106), + 53: uint16(36103), + 54: uint16(36111), + 55: uint16(36109), + 56: uint16(36112), + 57: uint16(40782), + 58: uint16(36115), + 59: uint16(36045), + 60: uint16(36116), + 61: uint16(36118), + 62: uint16(36199), + 63: uint16(36205), + 64: uint16(36209), + 65: uint16(36211), + 66: uint16(36225), + 67: uint16(36249), + 68: uint16(36290), + 69: uint16(36286), + 70: uint16(36282), + 71: uint16(36303), + 72: uint16(36314), + 73: uint16(36310), + 74: uint16(36300), + 75: uint16(36315), + 76: uint16(36299), + 77: uint16(36330), + 78: uint16(36331), + 79: uint16(36319), + 80: uint16(36323), + 81: uint16(36348), + 82: uint16(36360), + 83: uint16(36361), + 84: uint16(36351), + 85: uint16(36381), + 86: uint16(36382), + 87: uint16(36368), + 88: uint16(36383), + 89: uint16(36418), + 90: uint16(36405), + 91: uint16(36400), + 92: uint16(36404), + 93: uint16(36426), + }, + 76: { + 0: uint16(36423), + 1: uint16(36425), + 2: uint16(36428), + 3: uint16(36432), + 4: uint16(36424), + 5: uint16(36441), + 6: uint16(36452), + 7: uint16(36448), + 8: uint16(36394), + 9: uint16(36451), + 10: uint16(36437), + 11: uint16(36470), + 12: uint16(36466), + 13: uint16(36476), + 14: uint16(36481), + 15: uint16(36487), + 16: uint16(36485), + 17: uint16(36484), + 18: uint16(36491), + 19: uint16(36490), + 20: uint16(36499), + 21: uint16(36497), + 22: uint16(36500), + 23: uint16(36505), + 24: uint16(36522), + 25: uint16(36513), + 26: uint16(36524), + 27: uint16(36528), + 28: uint16(36550), + 29: uint16(36529), + 30: uint16(36542), + 31: uint16(36549), + 32: uint16(36552), + 33: uint16(36555), + 34: uint16(36571), + 35: uint16(36579), + 36: uint16(36604), + 37: uint16(36603), + 38: uint16(36587), + 39: uint16(36606), + 40: uint16(36618), + 41: uint16(36613), + 42: uint16(36629), + 43: uint16(36626), + 44: uint16(36633), + 45: uint16(36627), + 46: uint16(36636), + 47: uint16(36639), + 48: uint16(36635), + 49: uint16(36620), + 50: uint16(36646), + 51: uint16(36659), + 52: uint16(36667), + 53: uint16(36665), + 54: uint16(36677), + 55: uint16(36674), + 56: uint16(36670), + 57: uint16(36684), + 58: uint16(36681), + 59: uint16(36678), + 60: uint16(36686), + 61: uint16(36695), + 62: uint16(36700), + 63: uint16(36706), + 64: uint16(36707), + 65: uint16(36708), + 66: uint16(36764), + 67: uint16(36767), + 68: uint16(36771), + 69: uint16(36781), + 70: uint16(36783), + 71: uint16(36791), + 72: uint16(36826), + 73: uint16(36837), + 74: uint16(36834), + 75: uint16(36842), + 76: uint16(36847), + 77: uint16(36999), + 78: uint16(36852), + 79: uint16(36869), + 80: uint16(36857), + 81: uint16(36858), + 82: uint16(36881), + 83: uint16(36885), + 84: uint16(36897), + 85: uint16(36877), + 86: uint16(36894), + 87: uint16(36886), + 88: uint16(36875), + 89: uint16(36903), + 90: uint16(36918), + 91: uint16(36917), + 92: uint16(36921), + 93: uint16(36856), + }, + 77: { + 0: uint16(36943), + 1: uint16(36944), + 2: uint16(36945), + 3: uint16(36946), + 4: uint16(36878), + 5: uint16(36937), + 6: uint16(36926), + 7: uint16(36950), + 8: uint16(36952), + 9: uint16(36958), + 10: uint16(36968), + 11: uint16(36975), + 12: uint16(36982), + 13: uint16(38568), + 14: uint16(36978), + 15: uint16(36994), + 16: uint16(36989), + 17: uint16(36993), + 18: uint16(36992), + 19: uint16(37002), + 20: uint16(37001), + 21: uint16(37007), + 22: uint16(37032), + 23: uint16(37039), + 24: uint16(37041), + 25: uint16(37045), + 26: uint16(37090), + 27: uint16(37092), + 28: uint16(25160), + 29: uint16(37083), + 30: uint16(37122), + 31: uint16(37138), + 32: uint16(37145), + 33: uint16(37170), + 34: uint16(37168), + 35: uint16(37194), + 36: uint16(37206), + 37: uint16(37208), + 38: uint16(37219), + 39: uint16(37221), + 40: uint16(37225), + 41: uint16(37235), + 42: uint16(37234), + 43: uint16(37259), + 44: uint16(37257), + 45: uint16(37250), + 46: uint16(37282), + 47: uint16(37291), + 48: uint16(37295), + 49: uint16(37290), + 50: uint16(37301), + 51: uint16(37300), + 52: uint16(37306), + 53: uint16(37312), + 54: uint16(37313), + 55: uint16(37321), + 56: uint16(37323), + 57: uint16(37328), + 58: uint16(37334), + 59: uint16(37343), + 60: uint16(37345), + 61: uint16(37339), + 62: uint16(37372), + 63: uint16(37365), + 64: uint16(37366), + 65: uint16(37406), + 66: uint16(37375), + 67: uint16(37396), + 68: uint16(37420), + 69: uint16(37397), + 70: uint16(37393), + 71: uint16(37470), + 72: uint16(37463), + 73: uint16(37445), + 74: uint16(37449), + 75: uint16(37476), + 76: uint16(37448), + 77: uint16(37525), + 78: uint16(37439), + 79: uint16(37451), + 80: uint16(37456), + 81: uint16(37532), + 82: uint16(37526), + 83: uint16(37523), + 84: uint16(37531), + 85: uint16(37466), + 86: uint16(37583), + 87: uint16(37561), + 88: uint16(37559), + 89: uint16(37609), + 90: uint16(37647), + 91: uint16(37626), + 92: uint16(37700), + 93: uint16(37678), + }, + 78: { + 0: uint16(37657), + 1: uint16(37666), + 2: uint16(37658), + 3: uint16(37667), + 4: uint16(37690), + 5: uint16(37685), + 6: uint16(37691), + 7: uint16(37724), + 8: uint16(37728), + 9: uint16(37756), + 10: uint16(37742), + 11: uint16(37718), + 12: uint16(37808), + 13: uint16(37804), + 14: uint16(37805), + 15: uint16(37780), + 16: uint16(37817), + 17: uint16(37846), + 18: uint16(37847), + 19: uint16(37864), + 20: uint16(37861), + 21: uint16(37848), + 22: uint16(37827), + 23: uint16(37853), + 24: uint16(37840), + 25: uint16(37832), + 26: uint16(37860), + 27: uint16(37914), + 28: uint16(37908), + 29: uint16(37907), + 30: uint16(37891), + 31: uint16(37895), + 32: uint16(37904), + 33: uint16(37942), + 34: uint16(37931), + 35: uint16(37941), + 36: uint16(37921), + 37: uint16(37946), + 38: uint16(37953), + 39: uint16(37970), + 40: uint16(37956), + 41: uint16(37979), + 42: uint16(37984), + 43: uint16(37986), + 44: uint16(37982), + 45: uint16(37994), + 46: uint16(37417), + 47: uint16(38000), + 48: uint16(38005), + 49: uint16(38007), + 50: uint16(38013), + 51: uint16(37978), + 52: uint16(38012), + 53: uint16(38014), + 54: uint16(38017), + 55: uint16(38015), + 56: uint16(38274), + 57: uint16(38279), + 58: uint16(38282), + 59: uint16(38292), + 60: uint16(38294), + 61: uint16(38296), + 62: uint16(38297), + 63: uint16(38304), + 64: uint16(38312), + 65: uint16(38311), + 66: uint16(38317), + 67: uint16(38332), + 68: uint16(38331), + 69: uint16(38329), + 70: uint16(38334), + 71: uint16(38346), + 72: uint16(28662), + 73: uint16(38339), + 74: uint16(38349), + 75: uint16(38348), + 76: uint16(38357), + 77: uint16(38356), + 78: uint16(38358), + 79: uint16(38364), + 80: uint16(38369), + 81: uint16(38373), + 82: uint16(38370), + 83: uint16(38433), + 84: uint16(38440), + 85: uint16(38446), + 86: uint16(38447), + 87: uint16(38466), + 88: uint16(38476), + 89: uint16(38479), + 90: uint16(38475), + 91: uint16(38519), + 92: uint16(38492), + 93: uint16(38494), + }, + 79: { + 0: uint16(38493), + 1: uint16(38495), + 2: uint16(38502), + 3: uint16(38514), + 4: uint16(38508), + 5: uint16(38541), + 6: uint16(38552), + 7: uint16(38549), + 8: uint16(38551), + 9: uint16(38570), + 10: uint16(38567), + 11: uint16(38577), + 12: uint16(38578), + 13: uint16(38576), + 14: uint16(38580), + 15: uint16(38582), + 16: uint16(38584), + 17: uint16(38585), + 18: uint16(38606), + 19: uint16(38603), + 20: uint16(38601), + 21: uint16(38605), + 22: uint16(35149), + 23: uint16(38620), + 24: uint16(38669), + 25: uint16(38613), + 26: uint16(38649), + 27: uint16(38660), + 28: uint16(38662), + 29: uint16(38664), + 30: uint16(38675), + 31: uint16(38670), + 32: uint16(38673), + 33: uint16(38671), + 34: uint16(38678), + 35: uint16(38681), + 36: uint16(38692), + 37: uint16(38698), + 38: uint16(38704), + 39: uint16(38713), + 40: uint16(38717), + 41: uint16(38718), + 42: uint16(38724), + 43: uint16(38726), + 44: uint16(38728), + 45: uint16(38722), + 46: uint16(38729), + 47: uint16(38748), + 48: uint16(38752), + 49: uint16(38756), + 50: uint16(38758), + 51: uint16(38760), + 52: uint16(21202), + 53: uint16(38763), + 54: uint16(38769), + 55: uint16(38777), + 56: uint16(38789), + 57: uint16(38780), + 58: uint16(38785), + 59: uint16(38778), + 60: uint16(38790), + 61: uint16(38795), + 62: uint16(38799), + 63: uint16(38800), + 64: uint16(38812), + 65: uint16(38824), + 66: uint16(38822), + 67: uint16(38819), + 68: uint16(38835), + 69: uint16(38836), + 70: uint16(38851), + 71: uint16(38854), + 72: uint16(38856), + 73: uint16(38859), + 74: uint16(38876), + 75: uint16(38893), + 76: uint16(40783), + 77: uint16(38898), + 78: uint16(31455), + 79: uint16(38902), + 80: uint16(38901), + 81: uint16(38927), + 82: uint16(38924), + 83: uint16(38968), + 84: uint16(38948), + 85: uint16(38945), + 86: uint16(38967), + 87: uint16(38973), + 88: uint16(38982), + 89: uint16(38991), + 90: uint16(38987), + 91: uint16(39019), + 92: uint16(39023), + 93: uint16(39024), + }, + 80: { + 0: uint16(39025), + 1: uint16(39028), + 2: uint16(39027), + 3: uint16(39082), + 4: uint16(39087), + 5: uint16(39089), + 6: uint16(39094), + 7: uint16(39108), + 8: uint16(39107), + 9: uint16(39110), + 10: uint16(39145), + 11: uint16(39147), + 12: uint16(39171), + 13: uint16(39177), + 14: uint16(39186), + 15: uint16(39188), + 16: uint16(39192), + 17: uint16(39201), + 18: uint16(39197), + 19: uint16(39198), + 20: uint16(39204), + 21: uint16(39200), + 22: uint16(39212), + 23: uint16(39214), + 24: uint16(39229), + 25: uint16(39230), + 26: uint16(39234), + 27: uint16(39241), + 28: uint16(39237), + 29: uint16(39248), + 30: uint16(39243), + 31: uint16(39249), + 32: uint16(39250), + 33: uint16(39244), + 34: uint16(39253), + 35: uint16(39319), + 36: uint16(39320), + 37: uint16(39333), + 38: uint16(39341), + 39: uint16(39342), + 40: uint16(39356), + 41: uint16(39391), + 42: uint16(39387), + 43: uint16(39389), + 44: uint16(39384), + 45: uint16(39377), + 46: uint16(39405), + 47: uint16(39406), + 48: uint16(39409), + 49: uint16(39410), + 50: uint16(39419), + 51: uint16(39416), + 52: uint16(39425), + 53: uint16(39439), + 54: uint16(39429), + 55: uint16(39394), + 56: uint16(39449), + 57: uint16(39467), + 58: uint16(39479), + 59: uint16(39493), + 60: uint16(39490), + 61: uint16(39488), + 62: uint16(39491), + 63: uint16(39486), + 64: uint16(39509), + 65: uint16(39501), + 66: uint16(39515), + 67: uint16(39511), + 68: uint16(39519), + 69: uint16(39522), + 70: uint16(39525), + 71: uint16(39524), + 72: uint16(39529), + 73: uint16(39531), + 74: uint16(39530), + 75: uint16(39597), + 76: uint16(39600), + 77: uint16(39612), + 78: uint16(39616), + 79: uint16(39631), + 80: uint16(39633), + 81: uint16(39635), + 82: uint16(39636), + 83: uint16(39646), + 84: uint16(39647), + 85: uint16(39650), + 86: uint16(39651), + 87: uint16(39654), + 88: uint16(39663), + 89: uint16(39659), + 90: uint16(39662), + 91: uint16(39668), + 92: uint16(39665), + 93: uint16(39671), + }, + 81: { + 0: uint16(39675), + 1: uint16(39686), + 2: uint16(39704), + 3: uint16(39706), + 4: uint16(39711), + 5: uint16(39714), + 6: uint16(39715), + 7: uint16(39717), + 8: uint16(39719), + 9: uint16(39720), + 10: uint16(39721), + 11: uint16(39722), + 12: uint16(39726), + 13: uint16(39727), + 14: uint16(39730), + 15: uint16(39748), + 16: uint16(39747), + 17: uint16(39759), + 18: uint16(39757), + 19: uint16(39758), + 20: uint16(39761), + 21: uint16(39768), + 22: uint16(39796), + 23: uint16(39827), + 24: uint16(39811), + 25: uint16(39825), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39839), + 29: uint16(39840), + 30: uint16(39848), + 31: uint16(39860), + 32: uint16(39872), + 33: uint16(39882), + 34: uint16(39865), + 35: uint16(39878), + 36: uint16(39887), + 37: uint16(39889), + 38: uint16(39890), + 39: uint16(39907), + 40: uint16(39906), + 41: uint16(39908), + 42: uint16(39892), + 43: uint16(39905), + 44: uint16(39994), + 45: uint16(39922), + 46: uint16(39921), + 47: uint16(39920), + 48: uint16(39957), + 49: uint16(39956), + 50: uint16(39945), + 51: uint16(39955), + 52: uint16(39948), + 53: uint16(39942), + 54: uint16(39944), + 55: uint16(39954), + 56: uint16(39946), + 57: uint16(39940), + 58: uint16(39982), + 59: uint16(39963), + 60: uint16(39973), + 61: uint16(39972), + 62: uint16(39969), + 63: uint16(39984), + 64: uint16(40007), + 65: uint16(39986), + 66: uint16(40006), + 67: uint16(39998), + 68: uint16(40026), + 69: uint16(40032), + 70: uint16(40039), + 71: uint16(40054), + 72: uint16(40056), + 73: uint16(40167), + 74: uint16(40172), + 75: uint16(40176), + 76: uint16(40201), + 77: uint16(40200), + 78: uint16(40171), + 79: uint16(40195), + 80: uint16(40198), + 81: uint16(40234), + 82: uint16(40230), + 83: uint16(40367), + 84: uint16(40227), + 85: uint16(40223), + 86: uint16(40260), + 87: uint16(40213), + 88: uint16(40210), + 89: uint16(40257), + 90: uint16(40255), + 91: uint16(40254), + 92: uint16(40262), + 93: uint16(40264), + }, + 82: { + 0: uint16(40285), + 1: uint16(40286), + 2: uint16(40292), + 3: uint16(40273), + 4: uint16(40272), + 5: uint16(40281), + 6: uint16(40306), + 7: uint16(40329), + 8: uint16(40327), + 9: uint16(40363), + 10: uint16(40303), + 11: uint16(40314), + 12: uint16(40346), + 13: uint16(40356), + 14: uint16(40361), + 15: uint16(40370), + 16: uint16(40388), + 17: uint16(40385), + 18: uint16(40379), + 19: uint16(40376), + 20: uint16(40378), + 21: uint16(40390), + 22: uint16(40399), + 23: uint16(40386), + 24: uint16(40409), + 25: uint16(40403), + 26: uint16(40440), + 27: uint16(40422), + 28: uint16(40429), + 29: uint16(40431), + 30: uint16(40445), + 31: uint16(40474), + 32: uint16(40475), + 33: uint16(40478), + 34: uint16(40565), + 35: uint16(40569), + 36: uint16(40573), + 37: uint16(40577), + 38: uint16(40584), + 39: uint16(40587), + 40: uint16(40588), + 41: uint16(40594), + 42: uint16(40597), + 43: uint16(40593), + 44: uint16(40605), + 45: uint16(40613), + 46: uint16(40617), + 47: uint16(40632), + 48: uint16(40618), + 49: uint16(40621), + 50: uint16(38753), + 51: uint16(40652), + 52: uint16(40654), + 53: uint16(40655), + 54: uint16(40656), + 55: uint16(40660), + 56: uint16(40668), + 57: uint16(40670), + 58: uint16(40669), + 59: uint16(40672), + 60: uint16(40677), + 61: uint16(40680), + 62: uint16(40687), + 63: uint16(40692), + 64: uint16(40694), + 65: uint16(40695), + 66: uint16(40697), + 67: uint16(40699), + 68: uint16(40700), + 69: uint16(40701), + 70: uint16(40711), + 71: uint16(40712), + 72: uint16(30391), + 73: uint16(40725), + 74: uint16(40737), + 75: uint16(40748), + 76: uint16(40766), + 77: uint16(40778), + 78: uint16(40786), + 79: uint16(40788), + 80: uint16(40803), + 81: uint16(40799), + 82: uint16(40800), + 83: uint16(40801), + 84: uint16(40806), + 85: uint16(40807), + 86: uint16(40812), + 87: uint16(40810), + 88: uint16(40823), + 89: uint16(40818), + 90: uint16(40822), + 91: uint16(40853), + 92: uint16(40860), + 93: uint16(40864), + }, + 83: { + 0: uint16(22575), + 1: uint16(27079), + 2: uint16(36953), + 3: uint16(29796), + 4: uint16(20956), + 5: uint16(29081), + }, +} + +var _gb18030 = [126][190]uint16{ + 0: { + 0: uint16(19970), + 1: uint16(19972), + 2: uint16(19973), + 3: uint16(19974), + 4: uint16(19983), + 5: uint16(19986), + 6: uint16(19991), + 7: uint16(19999), + 8: uint16(20000), + 9: uint16(20001), + 10: uint16(20003), + 11: uint16(20006), + 12: uint16(20009), + 13: uint16(20014), + 14: uint16(20015), + 15: uint16(20017), + 16: uint16(20019), + 17: uint16(20021), + 18: uint16(20023), + 19: uint16(20028), + 20: uint16(20032), + 21: uint16(20033), + 22: uint16(20034), + 23: uint16(20036), + 24: uint16(20038), + 25: uint16(20042), + 26: uint16(20049), + 27: uint16(20053), + 28: uint16(20055), + 29: uint16(20058), + 30: uint16(20059), + 31: uint16(20066), + 32: uint16(20067), + 33: uint16(20068), + 34: uint16(20069), + 35: uint16(20071), + 36: uint16(20072), + 37: uint16(20074), + 38: uint16(20075), + 39: uint16(20076), + 40: uint16(20077), + 41: uint16(20078), + 42: uint16(20079), + 43: uint16(20082), + 44: uint16(20084), + 45: uint16(20085), + 46: uint16(20086), + 47: uint16(20087), + 48: uint16(20088), + 49: uint16(20089), + 50: uint16(20090), + 51: uint16(20091), + 52: uint16(20092), + 53: uint16(20093), + 54: uint16(20095), + 55: uint16(20096), + 56: uint16(20097), + 57: uint16(20098), + 58: uint16(20099), + 59: uint16(20100), + 60: uint16(20101), + 61: uint16(20103), + 62: uint16(20106), + 63: uint16(20112), + 64: uint16(20118), + 65: uint16(20119), + 66: uint16(20121), + 67: uint16(20124), + 68: uint16(20125), + 69: uint16(20126), + 70: uint16(20131), + 71: uint16(20138), + 72: uint16(20143), + 73: uint16(20144), + 74: uint16(20145), + 75: uint16(20148), + 76: uint16(20150), + 77: uint16(20151), + 78: uint16(20152), + 79: uint16(20153), + 80: uint16(20156), + 81: uint16(20157), + 82: uint16(20158), + 83: uint16(20168), + 84: uint16(20172), + 85: uint16(20175), + 86: uint16(20176), + 87: uint16(20178), + 88: uint16(20186), + 89: uint16(20187), + 90: uint16(20188), + 91: uint16(20192), + 92: uint16(20194), + 93: uint16(20198), + 94: uint16(20199), + 95: uint16(20201), + 96: uint16(20205), + 97: uint16(20206), + 98: uint16(20207), + 99: uint16(20209), + 100: uint16(20212), + 101: uint16(20216), + 102: uint16(20217), + 103: uint16(20218), + 104: uint16(20220), + 105: uint16(20222), + 106: uint16(20224), + 107: uint16(20226), + 108: uint16(20227), + 109: uint16(20228), + 110: uint16(20229), + 111: uint16(20230), + 112: uint16(20231), + 113: uint16(20232), + 114: uint16(20235), + 115: uint16(20236), + 116: uint16(20242), + 117: uint16(20243), + 118: uint16(20244), + 119: uint16(20245), + 120: uint16(20246), + 121: uint16(20252), + 122: uint16(20253), + 123: uint16(20257), + 124: uint16(20259), + 125: uint16(20264), + 126: uint16(20265), + 127: uint16(20268), + 128: uint16(20269), + 129: uint16(20270), + 130: uint16(20273), + 131: uint16(20275), + 132: uint16(20277), + 133: uint16(20279), + 134: uint16(20281), + 135: uint16(20283), + 136: uint16(20286), + 137: uint16(20287), + 138: uint16(20288), + 139: uint16(20289), + 140: uint16(20290), + 141: uint16(20292), + 142: uint16(20293), + 143: uint16(20295), + 144: uint16(20296), + 145: uint16(20297), + 146: uint16(20298), + 147: uint16(20299), + 148: uint16(20300), + 149: uint16(20306), + 150: uint16(20308), + 151: uint16(20310), + 152: uint16(20321), + 153: uint16(20322), + 154: uint16(20326), + 155: uint16(20328), + 156: uint16(20330), + 157: uint16(20331), + 158: uint16(20333), + 159: uint16(20334), + 160: uint16(20337), + 161: uint16(20338), + 162: uint16(20341), + 163: uint16(20343), + 164: uint16(20344), + 165: uint16(20345), + 166: uint16(20346), + 167: uint16(20349), + 168: uint16(20352), + 169: uint16(20353), + 170: uint16(20354), + 171: uint16(20357), + 172: uint16(20358), + 173: uint16(20359), + 174: uint16(20362), + 175: uint16(20364), + 176: uint16(20366), + 177: uint16(20368), + 178: uint16(20370), + 179: uint16(20371), + 180: uint16(20373), + 181: uint16(20374), + 182: uint16(20376), + 183: uint16(20377), + 184: uint16(20378), + 185: uint16(20380), + 186: uint16(20382), + 187: uint16(20383), + 188: uint16(20385), + 189: uint16(20386), + }, + 1: { + 0: uint16(20388), + 1: uint16(20395), + 2: uint16(20397), + 3: uint16(20400), + 4: uint16(20401), + 5: uint16(20402), + 6: uint16(20403), + 7: uint16(20404), + 8: uint16(20406), + 9: uint16(20407), + 10: uint16(20408), + 11: uint16(20409), + 12: uint16(20410), + 13: uint16(20411), + 14: uint16(20412), + 15: uint16(20413), + 16: uint16(20414), + 17: uint16(20416), + 18: uint16(20417), + 19: uint16(20418), + 20: uint16(20422), + 21: uint16(20423), + 22: uint16(20424), + 23: uint16(20425), + 24: uint16(20427), + 25: uint16(20428), + 26: uint16(20429), + 27: uint16(20434), + 28: uint16(20435), + 29: uint16(20436), + 30: uint16(20437), + 31: uint16(20438), + 32: uint16(20441), + 33: uint16(20443), + 34: uint16(20448), + 35: uint16(20450), + 36: uint16(20452), + 37: uint16(20453), + 38: uint16(20455), + 39: uint16(20459), + 40: uint16(20460), + 41: uint16(20464), + 42: uint16(20466), + 43: uint16(20468), + 44: uint16(20469), + 45: uint16(20470), + 46: uint16(20471), + 47: uint16(20473), + 48: uint16(20475), + 49: uint16(20476), + 50: uint16(20477), + 51: uint16(20479), + 52: uint16(20480), + 53: uint16(20481), + 54: uint16(20482), + 55: uint16(20483), + 56: uint16(20484), + 57: uint16(20485), + 58: uint16(20486), + 59: uint16(20487), + 60: uint16(20488), + 61: uint16(20489), + 62: uint16(20490), + 63: uint16(20491), + 64: uint16(20494), + 65: uint16(20496), + 66: uint16(20497), + 67: uint16(20499), + 68: uint16(20501), + 69: uint16(20502), + 70: uint16(20503), + 71: uint16(20507), + 72: uint16(20509), + 73: uint16(20510), + 74: uint16(20512), + 75: uint16(20514), + 76: uint16(20515), + 77: uint16(20516), + 78: uint16(20519), + 79: uint16(20523), + 80: uint16(20527), + 81: uint16(20528), + 82: uint16(20529), + 83: uint16(20530), + 84: uint16(20531), + 85: uint16(20532), + 86: uint16(20533), + 87: uint16(20534), + 88: uint16(20535), + 89: uint16(20536), + 90: uint16(20537), + 91: uint16(20539), + 92: uint16(20541), + 93: uint16(20543), + 94: uint16(20544), + 95: uint16(20545), + 96: uint16(20546), + 97: uint16(20548), + 98: uint16(20549), + 99: uint16(20550), + 100: uint16(20553), + 101: uint16(20554), + 102: uint16(20555), + 103: uint16(20557), + 104: uint16(20560), + 105: uint16(20561), + 106: uint16(20562), + 107: uint16(20563), + 108: uint16(20564), + 109: uint16(20566), + 110: uint16(20567), + 111: uint16(20568), + 112: uint16(20569), + 113: uint16(20571), + 114: uint16(20573), + 115: uint16(20574), + 116: uint16(20575), + 117: uint16(20576), + 118: uint16(20577), + 119: uint16(20578), + 120: uint16(20579), + 121: uint16(20580), + 122: uint16(20582), + 123: uint16(20583), + 124: uint16(20584), + 125: uint16(20585), + 126: uint16(20586), + 127: uint16(20587), + 128: uint16(20589), + 129: uint16(20590), + 130: uint16(20591), + 131: uint16(20592), + 132: uint16(20593), + 133: uint16(20594), + 134: uint16(20595), + 135: uint16(20596), + 136: uint16(20597), + 137: uint16(20600), + 138: uint16(20601), + 139: uint16(20602), + 140: uint16(20604), + 141: uint16(20605), + 142: uint16(20609), + 143: uint16(20610), + 144: uint16(20611), + 145: uint16(20612), + 146: uint16(20614), + 147: uint16(20615), + 148: uint16(20617), + 149: uint16(20618), + 150: uint16(20619), + 151: uint16(20620), + 152: uint16(20622), + 153: uint16(20623), + 154: uint16(20624), + 155: uint16(20625), + 156: uint16(20626), + 157: uint16(20627), + 158: uint16(20628), + 159: uint16(20629), + 160: uint16(20630), + 161: uint16(20631), + 162: uint16(20632), + 163: uint16(20633), + 164: uint16(20634), + 165: uint16(20635), + 166: uint16(20636), + 167: uint16(20637), + 168: uint16(20638), + 169: uint16(20639), + 170: uint16(20640), + 171: uint16(20641), + 172: uint16(20642), + 173: uint16(20644), + 174: uint16(20646), + 175: uint16(20650), + 176: uint16(20651), + 177: uint16(20653), + 178: uint16(20654), + 179: uint16(20655), + 180: uint16(20656), + 181: uint16(20657), + 182: uint16(20659), + 183: uint16(20660), + 184: uint16(20661), + 185: uint16(20662), + 186: uint16(20663), + 187: uint16(20664), + 188: uint16(20665), + 189: uint16(20668), + }, + 2: { + 0: uint16(20669), + 1: uint16(20670), + 2: uint16(20671), + 3: uint16(20672), + 4: uint16(20673), + 5: uint16(20674), + 6: uint16(20675), + 7: uint16(20676), + 8: uint16(20677), + 9: uint16(20678), + 10: uint16(20679), + 11: uint16(20680), + 12: uint16(20681), + 13: uint16(20682), + 14: uint16(20683), + 15: uint16(20684), + 16: uint16(20685), + 17: uint16(20686), + 18: uint16(20688), + 19: uint16(20689), + 20: uint16(20690), + 21: uint16(20691), + 22: uint16(20692), + 23: uint16(20693), + 24: uint16(20695), + 25: uint16(20696), + 26: uint16(20697), + 27: uint16(20699), + 28: uint16(20700), + 29: uint16(20701), + 30: uint16(20702), + 31: uint16(20703), + 32: uint16(20704), + 33: uint16(20705), + 34: uint16(20706), + 35: uint16(20707), + 36: uint16(20708), + 37: uint16(20709), + 38: uint16(20712), + 39: uint16(20713), + 40: uint16(20714), + 41: uint16(20715), + 42: uint16(20719), + 43: uint16(20720), + 44: uint16(20721), + 45: uint16(20722), + 46: uint16(20724), + 47: uint16(20726), + 48: uint16(20727), + 49: uint16(20728), + 50: uint16(20729), + 51: uint16(20730), + 52: uint16(20732), + 53: uint16(20733), + 54: uint16(20734), + 55: uint16(20735), + 56: uint16(20736), + 57: uint16(20737), + 58: uint16(20738), + 59: uint16(20739), + 60: uint16(20740), + 61: uint16(20741), + 62: uint16(20744), + 63: uint16(20745), + 64: uint16(20746), + 65: uint16(20748), + 66: uint16(20749), + 67: uint16(20750), + 68: uint16(20751), + 69: uint16(20752), + 70: uint16(20753), + 71: uint16(20755), + 72: uint16(20756), + 73: uint16(20757), + 74: uint16(20758), + 75: uint16(20759), + 76: uint16(20760), + 77: uint16(20761), + 78: uint16(20762), + 79: uint16(20763), + 80: uint16(20764), + 81: uint16(20765), + 82: uint16(20766), + 83: uint16(20767), + 84: uint16(20768), + 85: uint16(20770), + 86: uint16(20771), + 87: uint16(20772), + 88: uint16(20773), + 89: uint16(20774), + 90: uint16(20775), + 91: uint16(20776), + 92: uint16(20777), + 93: uint16(20778), + 94: uint16(20779), + 95: uint16(20780), + 96: uint16(20781), + 97: uint16(20782), + 98: uint16(20783), + 99: uint16(20784), + 100: uint16(20785), + 101: uint16(20786), + 102: uint16(20787), + 103: uint16(20788), + 104: uint16(20789), + 105: uint16(20790), + 106: uint16(20791), + 107: uint16(20792), + 108: uint16(20793), + 109: uint16(20794), + 110: uint16(20795), + 111: uint16(20796), + 112: uint16(20797), + 113: uint16(20798), + 114: uint16(20802), + 115: uint16(20807), + 116: uint16(20810), + 117: uint16(20812), + 118: uint16(20814), + 119: uint16(20815), + 120: uint16(20816), + 121: uint16(20818), + 122: uint16(20819), + 123: uint16(20823), + 124: uint16(20824), + 125: uint16(20825), + 126: uint16(20827), + 127: uint16(20829), + 128: uint16(20830), + 129: uint16(20831), + 130: uint16(20832), + 131: uint16(20833), + 132: uint16(20835), + 133: uint16(20836), + 134: uint16(20838), + 135: uint16(20839), + 136: uint16(20841), + 137: uint16(20842), + 138: uint16(20847), + 139: uint16(20850), + 140: uint16(20858), + 141: uint16(20862), + 142: uint16(20863), + 143: uint16(20867), + 144: uint16(20868), + 145: uint16(20870), + 146: uint16(20871), + 147: uint16(20874), + 148: uint16(20875), + 149: uint16(20878), + 150: uint16(20879), + 151: uint16(20880), + 152: uint16(20881), + 153: uint16(20883), + 154: uint16(20884), + 155: uint16(20888), + 156: uint16(20890), + 157: uint16(20893), + 158: uint16(20894), + 159: uint16(20895), + 160: uint16(20897), + 161: uint16(20899), + 162: uint16(20902), + 163: uint16(20903), + 164: uint16(20904), + 165: uint16(20905), + 166: uint16(20906), + 167: uint16(20909), + 168: uint16(20910), + 169: uint16(20916), + 170: uint16(20920), + 171: uint16(20921), + 172: uint16(20922), + 173: uint16(20926), + 174: uint16(20927), + 175: uint16(20929), + 176: uint16(20930), + 177: uint16(20931), + 178: uint16(20933), + 179: uint16(20936), + 180: uint16(20938), + 181: uint16(20941), + 182: uint16(20942), + 183: uint16(20944), + 184: uint16(20946), + 185: uint16(20947), + 186: uint16(20948), + 187: uint16(20949), + 188: uint16(20950), + 189: uint16(20951), + }, + 3: { + 0: uint16(20952), + 1: uint16(20953), + 2: uint16(20954), + 3: uint16(20956), + 4: uint16(20958), + 5: uint16(20959), + 6: uint16(20962), + 7: uint16(20963), + 8: uint16(20965), + 9: uint16(20966), + 10: uint16(20967), + 11: uint16(20968), + 12: uint16(20969), + 13: uint16(20970), + 14: uint16(20972), + 15: uint16(20974), + 16: uint16(20977), + 17: uint16(20978), + 18: uint16(20980), + 19: uint16(20983), + 20: uint16(20990), + 21: uint16(20996), + 22: uint16(20997), + 23: uint16(21001), + 24: uint16(21003), + 25: uint16(21004), + 26: uint16(21007), + 27: uint16(21008), + 28: uint16(21011), + 29: uint16(21012), + 30: uint16(21013), + 31: uint16(21020), + 32: uint16(21022), + 33: uint16(21023), + 34: uint16(21025), + 35: uint16(21026), + 36: uint16(21027), + 37: uint16(21029), + 38: uint16(21030), + 39: uint16(21031), + 40: uint16(21034), + 41: uint16(21036), + 42: uint16(21039), + 43: uint16(21041), + 44: uint16(21042), + 45: uint16(21044), + 46: uint16(21045), + 47: uint16(21052), + 48: uint16(21054), + 49: uint16(21060), + 50: uint16(21061), + 51: uint16(21062), + 52: uint16(21063), + 53: uint16(21064), + 54: uint16(21065), + 55: uint16(21067), + 56: uint16(21070), + 57: uint16(21071), + 58: uint16(21074), + 59: uint16(21075), + 60: uint16(21077), + 61: uint16(21079), + 62: uint16(21080), + 63: uint16(21081), + 64: uint16(21082), + 65: uint16(21083), + 66: uint16(21085), + 67: uint16(21087), + 68: uint16(21088), + 69: uint16(21090), + 70: uint16(21091), + 71: uint16(21092), + 72: uint16(21094), + 73: uint16(21096), + 74: uint16(21099), + 75: uint16(21100), + 76: uint16(21101), + 77: uint16(21102), + 78: uint16(21104), + 79: uint16(21105), + 80: uint16(21107), + 81: uint16(21108), + 82: uint16(21109), + 83: uint16(21110), + 84: uint16(21111), + 85: uint16(21112), + 86: uint16(21113), + 87: uint16(21114), + 88: uint16(21115), + 89: uint16(21116), + 90: uint16(21118), + 91: uint16(21120), + 92: uint16(21123), + 93: uint16(21124), + 94: uint16(21125), + 95: uint16(21126), + 96: uint16(21127), + 97: uint16(21129), + 98: uint16(21130), + 99: uint16(21131), + 100: uint16(21132), + 101: uint16(21133), + 102: uint16(21134), + 103: uint16(21135), + 104: uint16(21137), + 105: uint16(21138), + 106: uint16(21140), + 107: uint16(21141), + 108: uint16(21142), + 109: uint16(21143), + 110: uint16(21144), + 111: uint16(21145), + 112: uint16(21146), + 113: uint16(21148), + 114: uint16(21156), + 115: uint16(21157), + 116: uint16(21158), + 117: uint16(21159), + 118: uint16(21166), + 119: uint16(21167), + 120: uint16(21168), + 121: uint16(21172), + 122: uint16(21173), + 123: uint16(21174), + 124: uint16(21175), + 125: uint16(21176), + 126: uint16(21177), + 127: uint16(21178), + 128: uint16(21179), + 129: uint16(21180), + 130: uint16(21181), + 131: uint16(21184), + 132: uint16(21185), + 133: uint16(21186), + 134: uint16(21188), + 135: uint16(21189), + 136: uint16(21190), + 137: uint16(21192), + 138: uint16(21194), + 139: uint16(21196), + 140: uint16(21197), + 141: uint16(21198), + 142: uint16(21199), + 143: uint16(21201), + 144: uint16(21203), + 145: uint16(21204), + 146: uint16(21205), + 147: uint16(21207), + 148: uint16(21209), + 149: uint16(21210), + 150: uint16(21211), + 151: uint16(21212), + 152: uint16(21213), + 153: uint16(21214), + 154: uint16(21216), + 155: uint16(21217), + 156: uint16(21218), + 157: uint16(21219), + 158: uint16(21221), + 159: uint16(21222), + 160: uint16(21223), + 161: uint16(21224), + 162: uint16(21225), + 163: uint16(21226), + 164: uint16(21227), + 165: uint16(21228), + 166: uint16(21229), + 167: uint16(21230), + 168: uint16(21231), + 169: uint16(21233), + 170: uint16(21234), + 171: uint16(21235), + 172: uint16(21236), + 173: uint16(21237), + 174: uint16(21238), + 175: uint16(21239), + 176: uint16(21240), + 177: uint16(21243), + 178: uint16(21244), + 179: uint16(21245), + 180: uint16(21249), + 181: uint16(21250), + 182: uint16(21251), + 183: uint16(21252), + 184: uint16(21255), + 185: uint16(21257), + 186: uint16(21258), + 187: uint16(21259), + 188: uint16(21260), + 189: uint16(21262), + }, + 4: { + 0: uint16(21265), + 1: uint16(21266), + 2: uint16(21267), + 3: uint16(21268), + 4: uint16(21272), + 5: uint16(21275), + 6: uint16(21276), + 7: uint16(21278), + 8: uint16(21279), + 9: uint16(21282), + 10: uint16(21284), + 11: uint16(21285), + 12: uint16(21287), + 13: uint16(21288), + 14: uint16(21289), + 15: uint16(21291), + 16: uint16(21292), + 17: uint16(21293), + 18: uint16(21295), + 19: uint16(21296), + 20: uint16(21297), + 21: uint16(21298), + 22: uint16(21299), + 23: uint16(21300), + 24: uint16(21301), + 25: uint16(21302), + 26: uint16(21303), + 27: uint16(21304), + 28: uint16(21308), + 29: uint16(21309), + 30: uint16(21312), + 31: uint16(21314), + 32: uint16(21316), + 33: uint16(21318), + 34: uint16(21323), + 35: uint16(21324), + 36: uint16(21325), + 37: uint16(21328), + 38: uint16(21332), + 39: uint16(21336), + 40: uint16(21337), + 41: uint16(21339), + 42: uint16(21341), + 43: uint16(21349), + 44: uint16(21352), + 45: uint16(21354), + 46: uint16(21356), + 47: uint16(21357), + 48: uint16(21362), + 49: uint16(21366), + 50: uint16(21369), + 51: uint16(21371), + 52: uint16(21372), + 53: uint16(21373), + 54: uint16(21374), + 55: uint16(21376), + 56: uint16(21377), + 57: uint16(21379), + 58: uint16(21383), + 59: uint16(21384), + 60: uint16(21386), + 61: uint16(21390), + 62: uint16(21391), + 63: uint16(21392), + 64: uint16(21393), + 65: uint16(21394), + 66: uint16(21395), + 67: uint16(21396), + 68: uint16(21398), + 69: uint16(21399), + 70: uint16(21401), + 71: uint16(21403), + 72: uint16(21404), + 73: uint16(21406), + 74: uint16(21408), + 75: uint16(21409), + 76: uint16(21412), + 77: uint16(21415), + 78: uint16(21418), + 79: uint16(21419), + 80: uint16(21420), + 81: uint16(21421), + 82: uint16(21423), + 83: uint16(21424), + 84: uint16(21425), + 85: uint16(21426), + 86: uint16(21427), + 87: uint16(21428), + 88: uint16(21429), + 89: uint16(21431), + 90: uint16(21432), + 91: uint16(21433), + 92: uint16(21434), + 93: uint16(21436), + 94: uint16(21437), + 95: uint16(21438), + 96: uint16(21440), + 97: uint16(21443), + 98: uint16(21444), + 99: uint16(21445), + 100: uint16(21446), + 101: uint16(21447), + 102: uint16(21454), + 103: uint16(21455), + 104: uint16(21456), + 105: uint16(21458), + 106: uint16(21459), + 107: uint16(21461), + 108: uint16(21466), + 109: uint16(21468), + 110: uint16(21469), + 111: uint16(21470), + 112: uint16(21473), + 113: uint16(21474), + 114: uint16(21479), + 115: uint16(21492), + 116: uint16(21498), + 117: uint16(21502), + 118: uint16(21503), + 119: uint16(21504), + 120: uint16(21506), + 121: uint16(21509), + 122: uint16(21511), + 123: uint16(21515), + 124: uint16(21524), + 125: uint16(21528), + 126: uint16(21529), + 127: uint16(21530), + 128: uint16(21532), + 129: uint16(21538), + 130: uint16(21540), + 131: uint16(21541), + 132: uint16(21546), + 133: uint16(21552), + 134: uint16(21555), + 135: uint16(21558), + 136: uint16(21559), + 137: uint16(21562), + 138: uint16(21565), + 139: uint16(21567), + 140: uint16(21569), + 141: uint16(21570), + 142: uint16(21572), + 143: uint16(21573), + 144: uint16(21575), + 145: uint16(21577), + 146: uint16(21580), + 147: uint16(21581), + 148: uint16(21582), + 149: uint16(21583), + 150: uint16(21585), + 151: uint16(21594), + 152: uint16(21597), + 153: uint16(21598), + 154: uint16(21599), + 155: uint16(21600), + 156: uint16(21601), + 157: uint16(21603), + 158: uint16(21605), + 159: uint16(21607), + 160: uint16(21609), + 161: uint16(21610), + 162: uint16(21611), + 163: uint16(21612), + 164: uint16(21613), + 165: uint16(21614), + 166: uint16(21615), + 167: uint16(21616), + 168: uint16(21620), + 169: uint16(21625), + 170: uint16(21626), + 171: uint16(21630), + 172: uint16(21631), + 173: uint16(21633), + 174: uint16(21635), + 175: uint16(21637), + 176: uint16(21639), + 177: uint16(21640), + 178: uint16(21641), + 179: uint16(21642), + 180: uint16(21645), + 181: uint16(21649), + 182: uint16(21651), + 183: uint16(21655), + 184: uint16(21656), + 185: uint16(21660), + 186: uint16(21662), + 187: uint16(21663), + 188: uint16(21664), + 189: uint16(21665), + }, + 5: { + 0: uint16(21666), + 1: uint16(21669), + 2: uint16(21678), + 3: uint16(21680), + 4: uint16(21682), + 5: uint16(21685), + 6: uint16(21686), + 7: uint16(21687), + 8: uint16(21689), + 9: uint16(21690), + 10: uint16(21692), + 11: uint16(21694), + 12: uint16(21699), + 13: uint16(21701), + 14: uint16(21706), + 15: uint16(21707), + 16: uint16(21718), + 17: uint16(21720), + 18: uint16(21723), + 19: uint16(21728), + 20: uint16(21729), + 21: uint16(21730), + 22: uint16(21731), + 23: uint16(21732), + 24: uint16(21739), + 25: uint16(21740), + 26: uint16(21743), + 27: uint16(21744), + 28: uint16(21745), + 29: uint16(21748), + 30: uint16(21749), + 31: uint16(21750), + 32: uint16(21751), + 33: uint16(21752), + 34: uint16(21753), + 35: uint16(21755), + 36: uint16(21758), + 37: uint16(21760), + 38: uint16(21762), + 39: uint16(21763), + 40: uint16(21764), + 41: uint16(21765), + 42: uint16(21768), + 43: uint16(21770), + 44: uint16(21771), + 45: uint16(21772), + 46: uint16(21773), + 47: uint16(21774), + 48: uint16(21778), + 49: uint16(21779), + 50: uint16(21781), + 51: uint16(21782), + 52: uint16(21783), + 53: uint16(21784), + 54: uint16(21785), + 55: uint16(21786), + 56: uint16(21788), + 57: uint16(21789), + 58: uint16(21790), + 59: uint16(21791), + 60: uint16(21793), + 61: uint16(21797), + 62: uint16(21798), + 63: uint16(21800), + 64: uint16(21801), + 65: uint16(21803), + 66: uint16(21805), + 67: uint16(21810), + 68: uint16(21812), + 69: uint16(21813), + 70: uint16(21814), + 71: uint16(21816), + 72: uint16(21817), + 73: uint16(21818), + 74: uint16(21819), + 75: uint16(21821), + 76: uint16(21824), + 77: uint16(21826), + 78: uint16(21829), + 79: uint16(21831), + 80: uint16(21832), + 81: uint16(21835), + 82: uint16(21836), + 83: uint16(21837), + 84: uint16(21838), + 85: uint16(21839), + 86: uint16(21841), + 87: uint16(21842), + 88: uint16(21843), + 89: uint16(21844), + 90: uint16(21847), + 91: uint16(21848), + 92: uint16(21849), + 93: uint16(21850), + 94: uint16(21851), + 95: uint16(21853), + 96: uint16(21854), + 97: uint16(21855), + 98: uint16(21856), + 99: uint16(21858), + 100: uint16(21859), + 101: uint16(21864), + 102: uint16(21865), + 103: uint16(21867), + 104: uint16(21871), + 105: uint16(21872), + 106: uint16(21873), + 107: uint16(21874), + 108: uint16(21875), + 109: uint16(21876), + 110: uint16(21881), + 111: uint16(21882), + 112: uint16(21885), + 113: uint16(21887), + 114: uint16(21893), + 115: uint16(21894), + 116: uint16(21900), + 117: uint16(21901), + 118: uint16(21902), + 119: uint16(21904), + 120: uint16(21906), + 121: uint16(21907), + 122: uint16(21909), + 123: uint16(21910), + 124: uint16(21911), + 125: uint16(21914), + 126: uint16(21915), + 127: uint16(21918), + 128: uint16(21920), + 129: uint16(21921), + 130: uint16(21922), + 131: uint16(21923), + 132: uint16(21924), + 133: uint16(21925), + 134: uint16(21926), + 135: uint16(21928), + 136: uint16(21929), + 137: uint16(21930), + 138: uint16(21931), + 139: uint16(21932), + 140: uint16(21933), + 141: uint16(21934), + 142: uint16(21935), + 143: uint16(21936), + 144: uint16(21938), + 145: uint16(21940), + 146: uint16(21942), + 147: uint16(21944), + 148: uint16(21946), + 149: uint16(21948), + 150: uint16(21951), + 151: uint16(21952), + 152: uint16(21953), + 153: uint16(21954), + 154: uint16(21955), + 155: uint16(21958), + 156: uint16(21959), + 157: uint16(21960), + 158: uint16(21962), + 159: uint16(21963), + 160: uint16(21966), + 161: uint16(21967), + 162: uint16(21968), + 163: uint16(21973), + 164: uint16(21975), + 165: uint16(21976), + 166: uint16(21977), + 167: uint16(21978), + 168: uint16(21979), + 169: uint16(21982), + 170: uint16(21984), + 171: uint16(21986), + 172: uint16(21991), + 173: uint16(21993), + 174: uint16(21997), + 175: uint16(21998), + 176: uint16(22000), + 177: uint16(22001), + 178: uint16(22004), + 179: uint16(22006), + 180: uint16(22008), + 181: uint16(22009), + 182: uint16(22010), + 183: uint16(22011), + 184: uint16(22012), + 185: uint16(22015), + 186: uint16(22018), + 187: uint16(22019), + 188: uint16(22020), + 189: uint16(22021), + }, + 6: { + 0: uint16(22022), + 1: uint16(22023), + 2: uint16(22026), + 3: uint16(22027), + 4: uint16(22029), + 5: uint16(22032), + 6: uint16(22033), + 7: uint16(22034), + 8: uint16(22035), + 9: uint16(22036), + 10: uint16(22037), + 11: uint16(22038), + 12: uint16(22039), + 13: uint16(22041), + 14: uint16(22042), + 15: uint16(22044), + 16: uint16(22045), + 17: uint16(22048), + 18: uint16(22049), + 19: uint16(22050), + 20: uint16(22053), + 21: uint16(22054), + 22: uint16(22056), + 23: uint16(22057), + 24: uint16(22058), + 25: uint16(22059), + 26: uint16(22062), + 27: uint16(22063), + 28: uint16(22064), + 29: uint16(22067), + 30: uint16(22069), + 31: uint16(22071), + 32: uint16(22072), + 33: uint16(22074), + 34: uint16(22076), + 35: uint16(22077), + 36: uint16(22078), + 37: uint16(22080), + 38: uint16(22081), + 39: uint16(22082), + 40: uint16(22083), + 41: uint16(22084), + 42: uint16(22085), + 43: uint16(22086), + 44: uint16(22087), + 45: uint16(22088), + 46: uint16(22089), + 47: uint16(22090), + 48: uint16(22091), + 49: uint16(22095), + 50: uint16(22096), + 51: uint16(22097), + 52: uint16(22098), + 53: uint16(22099), + 54: uint16(22101), + 55: uint16(22102), + 56: uint16(22106), + 57: uint16(22107), + 58: uint16(22109), + 59: uint16(22110), + 60: uint16(22111), + 61: uint16(22112), + 62: uint16(22113), + 63: uint16(22115), + 64: uint16(22117), + 65: uint16(22118), + 66: uint16(22119), + 67: uint16(22125), + 68: uint16(22126), + 69: uint16(22127), + 70: uint16(22128), + 71: uint16(22130), + 72: uint16(22131), + 73: uint16(22132), + 74: uint16(22133), + 75: uint16(22135), + 76: uint16(22136), + 77: uint16(22137), + 78: uint16(22138), + 79: uint16(22141), + 80: uint16(22142), + 81: uint16(22143), + 82: uint16(22144), + 83: uint16(22145), + 84: uint16(22146), + 85: uint16(22147), + 86: uint16(22148), + 87: uint16(22151), + 88: uint16(22152), + 89: uint16(22153), + 90: uint16(22154), + 91: uint16(22155), + 92: uint16(22156), + 93: uint16(22157), + 94: uint16(22160), + 95: uint16(22161), + 96: uint16(22162), + 97: uint16(22164), + 98: uint16(22165), + 99: uint16(22166), + 100: uint16(22167), + 101: uint16(22168), + 102: uint16(22169), + 103: uint16(22170), + 104: uint16(22171), + 105: uint16(22172), + 106: uint16(22173), + 107: uint16(22174), + 108: uint16(22175), + 109: uint16(22176), + 110: uint16(22177), + 111: uint16(22178), + 112: uint16(22180), + 113: uint16(22181), + 114: uint16(22182), + 115: uint16(22183), + 116: uint16(22184), + 117: uint16(22185), + 118: uint16(22186), + 119: uint16(22187), + 120: uint16(22188), + 121: uint16(22189), + 122: uint16(22190), + 123: uint16(22192), + 124: uint16(22193), + 125: uint16(22194), + 126: uint16(22195), + 127: uint16(22196), + 128: uint16(22197), + 129: uint16(22198), + 130: uint16(22200), + 131: uint16(22201), + 132: uint16(22202), + 133: uint16(22203), + 134: uint16(22205), + 135: uint16(22206), + 136: uint16(22207), + 137: uint16(22208), + 138: uint16(22209), + 139: uint16(22210), + 140: uint16(22211), + 141: uint16(22212), + 142: uint16(22213), + 143: uint16(22214), + 144: uint16(22215), + 145: uint16(22216), + 146: uint16(22217), + 147: uint16(22219), + 148: uint16(22220), + 149: uint16(22221), + 150: uint16(22222), + 151: uint16(22223), + 152: uint16(22224), + 153: uint16(22225), + 154: uint16(22226), + 155: uint16(22227), + 156: uint16(22229), + 157: uint16(22230), + 158: uint16(22232), + 159: uint16(22233), + 160: uint16(22236), + 161: uint16(22243), + 162: uint16(22245), + 163: uint16(22246), + 164: uint16(22247), + 165: uint16(22248), + 166: uint16(22249), + 167: uint16(22250), + 168: uint16(22252), + 169: uint16(22254), + 170: uint16(22255), + 171: uint16(22258), + 172: uint16(22259), + 173: uint16(22262), + 174: uint16(22263), + 175: uint16(22264), + 176: uint16(22267), + 177: uint16(22268), + 178: uint16(22272), + 179: uint16(22273), + 180: uint16(22274), + 181: uint16(22277), + 182: uint16(22279), + 183: uint16(22283), + 184: uint16(22284), + 185: uint16(22285), + 186: uint16(22286), + 187: uint16(22287), + 188: uint16(22288), + 189: uint16(22289), + }, + 7: { + 0: uint16(22290), + 1: uint16(22291), + 2: uint16(22292), + 3: uint16(22293), + 4: uint16(22294), + 5: uint16(22295), + 6: uint16(22296), + 7: uint16(22297), + 8: uint16(22298), + 9: uint16(22299), + 10: uint16(22301), + 11: uint16(22302), + 12: uint16(22304), + 13: uint16(22305), + 14: uint16(22306), + 15: uint16(22308), + 16: uint16(22309), + 17: uint16(22310), + 18: uint16(22311), + 19: uint16(22315), + 20: uint16(22321), + 21: uint16(22322), + 22: uint16(22324), + 23: uint16(22325), + 24: uint16(22326), + 25: uint16(22327), + 26: uint16(22328), + 27: uint16(22332), + 28: uint16(22333), + 29: uint16(22335), + 30: uint16(22337), + 31: uint16(22339), + 32: uint16(22340), + 33: uint16(22341), + 34: uint16(22342), + 35: uint16(22344), + 36: uint16(22345), + 37: uint16(22347), + 38: uint16(22354), + 39: uint16(22355), + 40: uint16(22356), + 41: uint16(22357), + 42: uint16(22358), + 43: uint16(22360), + 44: uint16(22361), + 45: uint16(22370), + 46: uint16(22371), + 47: uint16(22373), + 48: uint16(22375), + 49: uint16(22380), + 50: uint16(22382), + 51: uint16(22384), + 52: uint16(22385), + 53: uint16(22386), + 54: uint16(22388), + 55: uint16(22389), + 56: uint16(22392), + 57: uint16(22393), + 58: uint16(22394), + 59: uint16(22397), + 60: uint16(22398), + 61: uint16(22399), + 62: uint16(22400), + 63: uint16(22401), + 64: uint16(22407), + 65: uint16(22408), + 66: uint16(22409), + 67: uint16(22410), + 68: uint16(22413), + 69: uint16(22414), + 70: uint16(22415), + 71: uint16(22416), + 72: uint16(22417), + 73: uint16(22420), + 74: uint16(22421), + 75: uint16(22422), + 76: uint16(22423), + 77: uint16(22424), + 78: uint16(22425), + 79: uint16(22426), + 80: uint16(22428), + 81: uint16(22429), + 82: uint16(22430), + 83: uint16(22431), + 84: uint16(22437), + 85: uint16(22440), + 86: uint16(22442), + 87: uint16(22444), + 88: uint16(22447), + 89: uint16(22448), + 90: uint16(22449), + 91: uint16(22451), + 92: uint16(22453), + 93: uint16(22454), + 94: uint16(22455), + 95: uint16(22457), + 96: uint16(22458), + 97: uint16(22459), + 98: uint16(22460), + 99: uint16(22461), + 100: uint16(22462), + 101: uint16(22463), + 102: uint16(22464), + 103: uint16(22465), + 104: uint16(22468), + 105: uint16(22469), + 106: uint16(22470), + 107: uint16(22471), + 108: uint16(22472), + 109: uint16(22473), + 110: uint16(22474), + 111: uint16(22476), + 112: uint16(22477), + 113: uint16(22480), + 114: uint16(22481), + 115: uint16(22483), + 116: uint16(22486), + 117: uint16(22487), + 118: uint16(22491), + 119: uint16(22492), + 120: uint16(22494), + 121: uint16(22497), + 122: uint16(22498), + 123: uint16(22499), + 124: uint16(22501), + 125: uint16(22502), + 126: uint16(22503), + 127: uint16(22504), + 128: uint16(22505), + 129: uint16(22506), + 130: uint16(22507), + 131: uint16(22508), + 132: uint16(22510), + 133: uint16(22512), + 134: uint16(22513), + 135: uint16(22514), + 136: uint16(22515), + 137: uint16(22517), + 138: uint16(22518), + 139: uint16(22519), + 140: uint16(22523), + 141: uint16(22524), + 142: uint16(22526), + 143: uint16(22527), + 144: uint16(22529), + 145: uint16(22531), + 146: uint16(22532), + 147: uint16(22533), + 148: uint16(22536), + 149: uint16(22537), + 150: uint16(22538), + 151: uint16(22540), + 152: uint16(22542), + 153: uint16(22543), + 154: uint16(22544), + 155: uint16(22546), + 156: uint16(22547), + 157: uint16(22548), + 158: uint16(22550), + 159: uint16(22551), + 160: uint16(22552), + 161: uint16(22554), + 162: uint16(22555), + 163: uint16(22556), + 164: uint16(22557), + 165: uint16(22559), + 166: uint16(22562), + 167: uint16(22563), + 168: uint16(22565), + 169: uint16(22566), + 170: uint16(22567), + 171: uint16(22568), + 172: uint16(22569), + 173: uint16(22571), + 174: uint16(22572), + 175: uint16(22573), + 176: uint16(22574), + 177: uint16(22575), + 178: uint16(22577), + 179: uint16(22578), + 180: uint16(22579), + 181: uint16(22580), + 182: uint16(22582), + 183: uint16(22583), + 184: uint16(22584), + 185: uint16(22585), + 186: uint16(22586), + 187: uint16(22587), + 188: uint16(22588), + 189: uint16(22589), + }, + 8: { + 0: uint16(22590), + 1: uint16(22591), + 2: uint16(22592), + 3: uint16(22593), + 4: uint16(22594), + 5: uint16(22595), + 6: uint16(22597), + 7: uint16(22598), + 8: uint16(22599), + 9: uint16(22600), + 10: uint16(22601), + 11: uint16(22602), + 12: uint16(22603), + 13: uint16(22606), + 14: uint16(22607), + 15: uint16(22608), + 16: uint16(22610), + 17: uint16(22611), + 18: uint16(22613), + 19: uint16(22614), + 20: uint16(22615), + 21: uint16(22617), + 22: uint16(22618), + 23: uint16(22619), + 24: uint16(22620), + 25: uint16(22621), + 26: uint16(22623), + 27: uint16(22624), + 28: uint16(22625), + 29: uint16(22626), + 30: uint16(22627), + 31: uint16(22628), + 32: uint16(22630), + 33: uint16(22631), + 34: uint16(22632), + 35: uint16(22633), + 36: uint16(22634), + 37: uint16(22637), + 38: uint16(22638), + 39: uint16(22639), + 40: uint16(22640), + 41: uint16(22641), + 42: uint16(22642), + 43: uint16(22643), + 44: uint16(22644), + 45: uint16(22645), + 46: uint16(22646), + 47: uint16(22647), + 48: uint16(22648), + 49: uint16(22649), + 50: uint16(22650), + 51: uint16(22651), + 52: uint16(22652), + 53: uint16(22653), + 54: uint16(22655), + 55: uint16(22658), + 56: uint16(22660), + 57: uint16(22662), + 58: uint16(22663), + 59: uint16(22664), + 60: uint16(22666), + 61: uint16(22667), + 62: uint16(22668), + 63: uint16(22669), + 64: uint16(22670), + 65: uint16(22671), + 66: uint16(22672), + 67: uint16(22673), + 68: uint16(22676), + 69: uint16(22677), + 70: uint16(22678), + 71: uint16(22679), + 72: uint16(22680), + 73: uint16(22683), + 74: uint16(22684), + 75: uint16(22685), + 76: uint16(22688), + 77: uint16(22689), + 78: uint16(22690), + 79: uint16(22691), + 80: uint16(22692), + 81: uint16(22693), + 82: uint16(22694), + 83: uint16(22695), + 84: uint16(22698), + 85: uint16(22699), + 86: uint16(22700), + 87: uint16(22701), + 88: uint16(22702), + 89: uint16(22703), + 90: uint16(22704), + 91: uint16(22705), + 92: uint16(22706), + 93: uint16(22707), + 94: uint16(22708), + 95: uint16(22709), + 96: uint16(22710), + 97: uint16(22711), + 98: uint16(22712), + 99: uint16(22713), + 100: uint16(22714), + 101: uint16(22715), + 102: uint16(22717), + 103: uint16(22718), + 104: uint16(22719), + 105: uint16(22720), + 106: uint16(22722), + 107: uint16(22723), + 108: uint16(22724), + 109: uint16(22726), + 110: uint16(22727), + 111: uint16(22728), + 112: uint16(22729), + 113: uint16(22730), + 114: uint16(22731), + 115: uint16(22732), + 116: uint16(22733), + 117: uint16(22734), + 118: uint16(22735), + 119: uint16(22736), + 120: uint16(22738), + 121: uint16(22739), + 122: uint16(22740), + 123: uint16(22742), + 124: uint16(22743), + 125: uint16(22744), + 126: uint16(22745), + 127: uint16(22746), + 128: uint16(22747), + 129: uint16(22748), + 130: uint16(22749), + 131: uint16(22750), + 132: uint16(22751), + 133: uint16(22752), + 134: uint16(22753), + 135: uint16(22754), + 136: uint16(22755), + 137: uint16(22757), + 138: uint16(22758), + 139: uint16(22759), + 140: uint16(22760), + 141: uint16(22761), + 142: uint16(22762), + 143: uint16(22765), + 144: uint16(22767), + 145: uint16(22769), + 146: uint16(22770), + 147: uint16(22772), + 148: uint16(22773), + 149: uint16(22775), + 150: uint16(22776), + 151: uint16(22778), + 152: uint16(22779), + 153: uint16(22780), + 154: uint16(22781), + 155: uint16(22782), + 156: uint16(22783), + 157: uint16(22784), + 158: uint16(22785), + 159: uint16(22787), + 160: uint16(22789), + 161: uint16(22790), + 162: uint16(22792), + 163: uint16(22793), + 164: uint16(22794), + 165: uint16(22795), + 166: uint16(22796), + 167: uint16(22798), + 168: uint16(22800), + 169: uint16(22801), + 170: uint16(22802), + 171: uint16(22803), + 172: uint16(22807), + 173: uint16(22808), + 174: uint16(22811), + 175: uint16(22813), + 176: uint16(22814), + 177: uint16(22816), + 178: uint16(22817), + 179: uint16(22818), + 180: uint16(22819), + 181: uint16(22822), + 182: uint16(22824), + 183: uint16(22828), + 184: uint16(22832), + 185: uint16(22834), + 186: uint16(22835), + 187: uint16(22837), + 188: uint16(22838), + 189: uint16(22843), + }, + 9: { + 0: uint16(22845), + 1: uint16(22846), + 2: uint16(22847), + 3: uint16(22848), + 4: uint16(22851), + 5: uint16(22853), + 6: uint16(22854), + 7: uint16(22858), + 8: uint16(22860), + 9: uint16(22861), + 10: uint16(22864), + 11: uint16(22866), + 12: uint16(22867), + 13: uint16(22873), + 14: uint16(22875), + 15: uint16(22876), + 16: uint16(22877), + 17: uint16(22878), + 18: uint16(22879), + 19: uint16(22881), + 20: uint16(22883), + 21: uint16(22884), + 22: uint16(22886), + 23: uint16(22887), + 24: uint16(22888), + 25: uint16(22889), + 26: uint16(22890), + 27: uint16(22891), + 28: uint16(22892), + 29: uint16(22893), + 30: uint16(22894), + 31: uint16(22895), + 32: uint16(22896), + 33: uint16(22897), + 34: uint16(22898), + 35: uint16(22901), + 36: uint16(22903), + 37: uint16(22906), + 38: uint16(22907), + 39: uint16(22908), + 40: uint16(22910), + 41: uint16(22911), + 42: uint16(22912), + 43: uint16(22917), + 44: uint16(22921), + 45: uint16(22923), + 46: uint16(22924), + 47: uint16(22926), + 48: uint16(22927), + 49: uint16(22928), + 50: uint16(22929), + 51: uint16(22932), + 52: uint16(22933), + 53: uint16(22936), + 54: uint16(22938), + 55: uint16(22939), + 56: uint16(22940), + 57: uint16(22941), + 58: uint16(22943), + 59: uint16(22944), + 60: uint16(22945), + 61: uint16(22946), + 62: uint16(22950), + 63: uint16(22951), + 64: uint16(22956), + 65: uint16(22957), + 66: uint16(22960), + 67: uint16(22961), + 68: uint16(22963), + 69: uint16(22964), + 70: uint16(22965), + 71: uint16(22966), + 72: uint16(22967), + 73: uint16(22968), + 74: uint16(22970), + 75: uint16(22972), + 76: uint16(22973), + 77: uint16(22975), + 78: uint16(22976), + 79: uint16(22977), + 80: uint16(22978), + 81: uint16(22979), + 82: uint16(22980), + 83: uint16(22981), + 84: uint16(22983), + 85: uint16(22984), + 86: uint16(22985), + 87: uint16(22988), + 88: uint16(22989), + 89: uint16(22990), + 90: uint16(22991), + 91: uint16(22997), + 92: uint16(22998), + 93: uint16(23001), + 94: uint16(23003), + 95: uint16(23006), + 96: uint16(23007), + 97: uint16(23008), + 98: uint16(23009), + 99: uint16(23010), + 100: uint16(23012), + 101: uint16(23014), + 102: uint16(23015), + 103: uint16(23017), + 104: uint16(23018), + 105: uint16(23019), + 106: uint16(23021), + 107: uint16(23022), + 108: uint16(23023), + 109: uint16(23024), + 110: uint16(23025), + 111: uint16(23026), + 112: uint16(23027), + 113: uint16(23028), + 114: uint16(23029), + 115: uint16(23030), + 116: uint16(23031), + 117: uint16(23032), + 118: uint16(23034), + 119: uint16(23036), + 120: uint16(23037), + 121: uint16(23038), + 122: uint16(23040), + 123: uint16(23042), + 124: uint16(23050), + 125: uint16(23051), + 126: uint16(23053), + 127: uint16(23054), + 128: uint16(23055), + 129: uint16(23056), + 130: uint16(23058), + 131: uint16(23060), + 132: uint16(23061), + 133: uint16(23062), + 134: uint16(23063), + 135: uint16(23065), + 136: uint16(23066), + 137: uint16(23067), + 138: uint16(23069), + 139: uint16(23070), + 140: uint16(23073), + 141: uint16(23074), + 142: uint16(23076), + 143: uint16(23078), + 144: uint16(23079), + 145: uint16(23080), + 146: uint16(23082), + 147: uint16(23083), + 148: uint16(23084), + 149: uint16(23085), + 150: uint16(23086), + 151: uint16(23087), + 152: uint16(23088), + 153: uint16(23091), + 154: uint16(23093), + 155: uint16(23095), + 156: uint16(23096), + 157: uint16(23097), + 158: uint16(23098), + 159: uint16(23099), + 160: uint16(23101), + 161: uint16(23102), + 162: uint16(23103), + 163: uint16(23105), + 164: uint16(23106), + 165: uint16(23107), + 166: uint16(23108), + 167: uint16(23109), + 168: uint16(23111), + 169: uint16(23112), + 170: uint16(23115), + 171: uint16(23116), + 172: uint16(23117), + 173: uint16(23118), + 174: uint16(23119), + 175: uint16(23120), + 176: uint16(23121), + 177: uint16(23122), + 178: uint16(23123), + 179: uint16(23124), + 180: uint16(23126), + 181: uint16(23127), + 182: uint16(23128), + 183: uint16(23129), + 184: uint16(23131), + 185: uint16(23132), + 186: uint16(23133), + 187: uint16(23134), + 188: uint16(23135), + 189: uint16(23136), + }, + 10: { + 0: uint16(23137), + 1: uint16(23139), + 2: uint16(23140), + 3: uint16(23141), + 4: uint16(23142), + 5: uint16(23144), + 6: uint16(23145), + 7: uint16(23147), + 8: uint16(23148), + 9: uint16(23149), + 10: uint16(23150), + 11: uint16(23151), + 12: uint16(23152), + 13: uint16(23153), + 14: uint16(23154), + 15: uint16(23155), + 16: uint16(23160), + 17: uint16(23161), + 18: uint16(23163), + 19: uint16(23164), + 20: uint16(23165), + 21: uint16(23166), + 22: uint16(23168), + 23: uint16(23169), + 24: uint16(23170), + 25: uint16(23171), + 26: uint16(23172), + 27: uint16(23173), + 28: uint16(23174), + 29: uint16(23175), + 30: uint16(23176), + 31: uint16(23177), + 32: uint16(23178), + 33: uint16(23179), + 34: uint16(23180), + 35: uint16(23181), + 36: uint16(23182), + 37: uint16(23183), + 38: uint16(23184), + 39: uint16(23185), + 40: uint16(23187), + 41: uint16(23188), + 42: uint16(23189), + 43: uint16(23190), + 44: uint16(23191), + 45: uint16(23192), + 46: uint16(23193), + 47: uint16(23196), + 48: uint16(23197), + 49: uint16(23198), + 50: uint16(23199), + 51: uint16(23200), + 52: uint16(23201), + 53: uint16(23202), + 54: uint16(23203), + 55: uint16(23204), + 56: uint16(23205), + 57: uint16(23206), + 58: uint16(23207), + 59: uint16(23208), + 60: uint16(23209), + 61: uint16(23211), + 62: uint16(23212), + 63: uint16(23213), + 64: uint16(23214), + 65: uint16(23215), + 66: uint16(23216), + 67: uint16(23217), + 68: uint16(23220), + 69: uint16(23222), + 70: uint16(23223), + 71: uint16(23225), + 72: uint16(23226), + 73: uint16(23227), + 74: uint16(23228), + 75: uint16(23229), + 76: uint16(23231), + 77: uint16(23232), + 78: uint16(23235), + 79: uint16(23236), + 80: uint16(23237), + 81: uint16(23238), + 82: uint16(23239), + 83: uint16(23240), + 84: uint16(23242), + 85: uint16(23243), + 86: uint16(23245), + 87: uint16(23246), + 88: uint16(23247), + 89: uint16(23248), + 90: uint16(23249), + 91: uint16(23251), + 92: uint16(23253), + 93: uint16(23255), + 94: uint16(23257), + 95: uint16(23258), + 96: uint16(23259), + 97: uint16(23261), + 98: uint16(23262), + 99: uint16(23263), + 100: uint16(23266), + 101: uint16(23268), + 102: uint16(23269), + 103: uint16(23271), + 104: uint16(23272), + 105: uint16(23274), + 106: uint16(23276), + 107: uint16(23277), + 108: uint16(23278), + 109: uint16(23279), + 110: uint16(23280), + 111: uint16(23282), + 112: uint16(23283), + 113: uint16(23284), + 114: uint16(23285), + 115: uint16(23286), + 116: uint16(23287), + 117: uint16(23288), + 118: uint16(23289), + 119: uint16(23290), + 120: uint16(23291), + 121: uint16(23292), + 122: uint16(23293), + 123: uint16(23294), + 124: uint16(23295), + 125: uint16(23296), + 126: uint16(23297), + 127: uint16(23298), + 128: uint16(23299), + 129: uint16(23300), + 130: uint16(23301), + 131: uint16(23302), + 132: uint16(23303), + 133: uint16(23304), + 134: uint16(23306), + 135: uint16(23307), + 136: uint16(23308), + 137: uint16(23309), + 138: uint16(23310), + 139: uint16(23311), + 140: uint16(23312), + 141: uint16(23313), + 142: uint16(23314), + 143: uint16(23315), + 144: uint16(23316), + 145: uint16(23317), + 146: uint16(23320), + 147: uint16(23321), + 148: uint16(23322), + 149: uint16(23323), + 150: uint16(23324), + 151: uint16(23325), + 152: uint16(23326), + 153: uint16(23327), + 154: uint16(23328), + 155: uint16(23329), + 156: uint16(23330), + 157: uint16(23331), + 158: uint16(23332), + 159: uint16(23333), + 160: uint16(23334), + 161: uint16(23335), + 162: uint16(23336), + 163: uint16(23337), + 164: uint16(23338), + 165: uint16(23339), + 166: uint16(23340), + 167: uint16(23341), + 168: uint16(23342), + 169: uint16(23343), + 170: uint16(23344), + 171: uint16(23345), + 172: uint16(23347), + 173: uint16(23349), + 174: uint16(23350), + 175: uint16(23352), + 176: uint16(23353), + 177: uint16(23354), + 178: uint16(23355), + 179: uint16(23356), + 180: uint16(23357), + 181: uint16(23358), + 182: uint16(23359), + 183: uint16(23361), + 184: uint16(23362), + 185: uint16(23363), + 186: uint16(23364), + 187: uint16(23365), + 188: uint16(23366), + 189: uint16(23367), + }, + 11: { + 0: uint16(23368), + 1: uint16(23369), + 2: uint16(23370), + 3: uint16(23371), + 4: uint16(23372), + 5: uint16(23373), + 6: uint16(23374), + 7: uint16(23375), + 8: uint16(23378), + 9: uint16(23382), + 10: uint16(23390), + 11: uint16(23392), + 12: uint16(23393), + 13: uint16(23399), + 14: uint16(23400), + 15: uint16(23403), + 16: uint16(23405), + 17: uint16(23406), + 18: uint16(23407), + 19: uint16(23410), + 20: uint16(23412), + 21: uint16(23414), + 22: uint16(23415), + 23: uint16(23416), + 24: uint16(23417), + 25: uint16(23419), + 26: uint16(23420), + 27: uint16(23422), + 28: uint16(23423), + 29: uint16(23426), + 30: uint16(23430), + 31: uint16(23434), + 32: uint16(23437), + 33: uint16(23438), + 34: uint16(23440), + 35: uint16(23441), + 36: uint16(23442), + 37: uint16(23444), + 38: uint16(23446), + 39: uint16(23455), + 40: uint16(23463), + 41: uint16(23464), + 42: uint16(23465), + 43: uint16(23468), + 44: uint16(23469), + 45: uint16(23470), + 46: uint16(23471), + 47: uint16(23473), + 48: uint16(23474), + 49: uint16(23479), + 50: uint16(23482), + 51: uint16(23483), + 52: uint16(23484), + 53: uint16(23488), + 54: uint16(23489), + 55: uint16(23491), + 56: uint16(23496), + 57: uint16(23497), + 58: uint16(23498), + 59: uint16(23499), + 60: uint16(23501), + 61: uint16(23502), + 62: uint16(23503), + 63: uint16(23505), + 64: uint16(23508), + 65: uint16(23509), + 66: uint16(23510), + 67: uint16(23511), + 68: uint16(23512), + 69: uint16(23513), + 70: uint16(23514), + 71: uint16(23515), + 72: uint16(23516), + 73: uint16(23520), + 74: uint16(23522), + 75: uint16(23523), + 76: uint16(23526), + 77: uint16(23527), + 78: uint16(23529), + 79: uint16(23530), + 80: uint16(23531), + 81: uint16(23532), + 82: uint16(23533), + 83: uint16(23535), + 84: uint16(23537), + 85: uint16(23538), + 86: uint16(23539), + 87: uint16(23540), + 88: uint16(23541), + 89: uint16(23542), + 90: uint16(23543), + 91: uint16(23549), + 92: uint16(23550), + 93: uint16(23552), + 94: uint16(23554), + 95: uint16(23555), + 96: uint16(23557), + 97: uint16(23559), + 98: uint16(23560), + 99: uint16(23563), + 100: uint16(23564), + 101: uint16(23565), + 102: uint16(23566), + 103: uint16(23568), + 104: uint16(23570), + 105: uint16(23571), + 106: uint16(23575), + 107: uint16(23577), + 108: uint16(23579), + 109: uint16(23582), + 110: uint16(23583), + 111: uint16(23584), + 112: uint16(23585), + 113: uint16(23587), + 114: uint16(23590), + 115: uint16(23592), + 116: uint16(23593), + 117: uint16(23594), + 118: uint16(23595), + 119: uint16(23597), + 120: uint16(23598), + 121: uint16(23599), + 122: uint16(23600), + 123: uint16(23602), + 124: uint16(23603), + 125: uint16(23605), + 126: uint16(23606), + 127: uint16(23607), + 128: uint16(23619), + 129: uint16(23620), + 130: uint16(23622), + 131: uint16(23623), + 132: uint16(23628), + 133: uint16(23629), + 134: uint16(23634), + 135: uint16(23635), + 136: uint16(23636), + 137: uint16(23638), + 138: uint16(23639), + 139: uint16(23640), + 140: uint16(23642), + 141: uint16(23643), + 142: uint16(23644), + 143: uint16(23645), + 144: uint16(23647), + 145: uint16(23650), + 146: uint16(23652), + 147: uint16(23655), + 148: uint16(23656), + 149: uint16(23657), + 150: uint16(23658), + 151: uint16(23659), + 152: uint16(23660), + 153: uint16(23661), + 154: uint16(23664), + 155: uint16(23666), + 156: uint16(23667), + 157: uint16(23668), + 158: uint16(23669), + 159: uint16(23670), + 160: uint16(23671), + 161: uint16(23672), + 162: uint16(23675), + 163: uint16(23676), + 164: uint16(23677), + 165: uint16(23678), + 166: uint16(23680), + 167: uint16(23683), + 168: uint16(23684), + 169: uint16(23685), + 170: uint16(23686), + 171: uint16(23687), + 172: uint16(23689), + 173: uint16(23690), + 174: uint16(23691), + 175: uint16(23694), + 176: uint16(23695), + 177: uint16(23698), + 178: uint16(23699), + 179: uint16(23701), + 180: uint16(23709), + 181: uint16(23710), + 182: uint16(23711), + 183: uint16(23712), + 184: uint16(23713), + 185: uint16(23716), + 186: uint16(23717), + 187: uint16(23718), + 188: uint16(23719), + 189: uint16(23720), + }, + 12: { + 0: uint16(23722), + 1: uint16(23726), + 2: uint16(23727), + 3: uint16(23728), + 4: uint16(23730), + 5: uint16(23732), + 6: uint16(23734), + 7: uint16(23737), + 8: uint16(23738), + 9: uint16(23739), + 10: uint16(23740), + 11: uint16(23742), + 12: uint16(23744), + 13: uint16(23746), + 14: uint16(23747), + 15: uint16(23749), + 16: uint16(23750), + 17: uint16(23751), + 18: uint16(23752), + 19: uint16(23753), + 20: uint16(23754), + 21: uint16(23756), + 22: uint16(23757), + 23: uint16(23758), + 24: uint16(23759), + 25: uint16(23760), + 26: uint16(23761), + 27: uint16(23763), + 28: uint16(23764), + 29: uint16(23765), + 30: uint16(23766), + 31: uint16(23767), + 32: uint16(23768), + 33: uint16(23770), + 34: uint16(23771), + 35: uint16(23772), + 36: uint16(23773), + 37: uint16(23774), + 38: uint16(23775), + 39: uint16(23776), + 40: uint16(23778), + 41: uint16(23779), + 42: uint16(23783), + 43: uint16(23785), + 44: uint16(23787), + 45: uint16(23788), + 46: uint16(23790), + 47: uint16(23791), + 48: uint16(23793), + 49: uint16(23794), + 50: uint16(23795), + 51: uint16(23796), + 52: uint16(23797), + 53: uint16(23798), + 54: uint16(23799), + 55: uint16(23800), + 56: uint16(23801), + 57: uint16(23802), + 58: uint16(23804), + 59: uint16(23805), + 60: uint16(23806), + 61: uint16(23807), + 62: uint16(23808), + 63: uint16(23809), + 64: uint16(23812), + 65: uint16(23813), + 66: uint16(23816), + 67: uint16(23817), + 68: uint16(23818), + 69: uint16(23819), + 70: uint16(23820), + 71: uint16(23821), + 72: uint16(23823), + 73: uint16(23824), + 74: uint16(23825), + 75: uint16(23826), + 76: uint16(23827), + 77: uint16(23829), + 78: uint16(23831), + 79: uint16(23832), + 80: uint16(23833), + 81: uint16(23834), + 82: uint16(23836), + 83: uint16(23837), + 84: uint16(23839), + 85: uint16(23840), + 86: uint16(23841), + 87: uint16(23842), + 88: uint16(23843), + 89: uint16(23845), + 90: uint16(23848), + 91: uint16(23850), + 92: uint16(23851), + 93: uint16(23852), + 94: uint16(23855), + 95: uint16(23856), + 96: uint16(23857), + 97: uint16(23858), + 98: uint16(23859), + 99: uint16(23861), + 100: uint16(23862), + 101: uint16(23863), + 102: uint16(23864), + 103: uint16(23865), + 104: uint16(23866), + 105: uint16(23867), + 106: uint16(23868), + 107: uint16(23871), + 108: uint16(23872), + 109: uint16(23873), + 110: uint16(23874), + 111: uint16(23875), + 112: uint16(23876), + 113: uint16(23877), + 114: uint16(23878), + 115: uint16(23880), + 116: uint16(23881), + 117: uint16(23885), + 118: uint16(23886), + 119: uint16(23887), + 120: uint16(23888), + 121: uint16(23889), + 122: uint16(23890), + 123: uint16(23891), + 124: uint16(23892), + 125: uint16(23893), + 126: uint16(23894), + 127: uint16(23895), + 128: uint16(23897), + 129: uint16(23898), + 130: uint16(23900), + 131: uint16(23902), + 132: uint16(23903), + 133: uint16(23904), + 134: uint16(23905), + 135: uint16(23906), + 136: uint16(23907), + 137: uint16(23908), + 138: uint16(23909), + 139: uint16(23910), + 140: uint16(23911), + 141: uint16(23912), + 142: uint16(23914), + 143: uint16(23917), + 144: uint16(23918), + 145: uint16(23920), + 146: uint16(23921), + 147: uint16(23922), + 148: uint16(23923), + 149: uint16(23925), + 150: uint16(23926), + 151: uint16(23927), + 152: uint16(23928), + 153: uint16(23929), + 154: uint16(23930), + 155: uint16(23931), + 156: uint16(23932), + 157: uint16(23933), + 158: uint16(23934), + 159: uint16(23935), + 160: uint16(23936), + 161: uint16(23937), + 162: uint16(23939), + 163: uint16(23940), + 164: uint16(23941), + 165: uint16(23942), + 166: uint16(23943), + 167: uint16(23944), + 168: uint16(23945), + 169: uint16(23946), + 170: uint16(23947), + 171: uint16(23948), + 172: uint16(23949), + 173: uint16(23950), + 174: uint16(23951), + 175: uint16(23952), + 176: uint16(23953), + 177: uint16(23954), + 178: uint16(23955), + 179: uint16(23956), + 180: uint16(23957), + 181: uint16(23958), + 182: uint16(23959), + 183: uint16(23960), + 184: uint16(23962), + 185: uint16(23963), + 186: uint16(23964), + 187: uint16(23966), + 188: uint16(23967), + 189: uint16(23968), + }, + 13: { + 0: uint16(23969), + 1: uint16(23970), + 2: uint16(23971), + 3: uint16(23972), + 4: uint16(23973), + 5: uint16(23974), + 6: uint16(23975), + 7: uint16(23976), + 8: uint16(23977), + 9: uint16(23978), + 10: uint16(23979), + 11: uint16(23980), + 12: uint16(23981), + 13: uint16(23982), + 14: uint16(23983), + 15: uint16(23984), + 16: uint16(23985), + 17: uint16(23986), + 18: uint16(23987), + 19: uint16(23988), + 20: uint16(23989), + 21: uint16(23990), + 22: uint16(23992), + 23: uint16(23993), + 24: uint16(23994), + 25: uint16(23995), + 26: uint16(23996), + 27: uint16(23997), + 28: uint16(23998), + 29: uint16(23999), + 30: uint16(24000), + 31: uint16(24001), + 32: uint16(24002), + 33: uint16(24003), + 34: uint16(24004), + 35: uint16(24006), + 36: uint16(24007), + 37: uint16(24008), + 38: uint16(24009), + 39: uint16(24010), + 40: uint16(24011), + 41: uint16(24012), + 42: uint16(24014), + 43: uint16(24015), + 44: uint16(24016), + 45: uint16(24017), + 46: uint16(24018), + 47: uint16(24019), + 48: uint16(24020), + 49: uint16(24021), + 50: uint16(24022), + 51: uint16(24023), + 52: uint16(24024), + 53: uint16(24025), + 54: uint16(24026), + 55: uint16(24028), + 56: uint16(24031), + 57: uint16(24032), + 58: uint16(24035), + 59: uint16(24036), + 60: uint16(24042), + 61: uint16(24044), + 62: uint16(24045), + 63: uint16(24048), + 64: uint16(24053), + 65: uint16(24054), + 66: uint16(24056), + 67: uint16(24057), + 68: uint16(24058), + 69: uint16(24059), + 70: uint16(24060), + 71: uint16(24063), + 72: uint16(24064), + 73: uint16(24068), + 74: uint16(24071), + 75: uint16(24073), + 76: uint16(24074), + 77: uint16(24075), + 78: uint16(24077), + 79: uint16(24078), + 80: uint16(24082), + 81: uint16(24083), + 82: uint16(24087), + 83: uint16(24094), + 84: uint16(24095), + 85: uint16(24096), + 86: uint16(24097), + 87: uint16(24098), + 88: uint16(24099), + 89: uint16(24100), + 90: uint16(24101), + 91: uint16(24104), + 92: uint16(24105), + 93: uint16(24106), + 94: uint16(24107), + 95: uint16(24108), + 96: uint16(24111), + 97: uint16(24112), + 98: uint16(24114), + 99: uint16(24115), + 100: uint16(24116), + 101: uint16(24117), + 102: uint16(24118), + 103: uint16(24121), + 104: uint16(24122), + 105: uint16(24126), + 106: uint16(24127), + 107: uint16(24128), + 108: uint16(24129), + 109: uint16(24131), + 110: uint16(24134), + 111: uint16(24135), + 112: uint16(24136), + 113: uint16(24137), + 114: uint16(24138), + 115: uint16(24139), + 116: uint16(24141), + 117: uint16(24142), + 118: uint16(24143), + 119: uint16(24144), + 120: uint16(24145), + 121: uint16(24146), + 122: uint16(24147), + 123: uint16(24150), + 124: uint16(24151), + 125: uint16(24152), + 126: uint16(24153), + 127: uint16(24154), + 128: uint16(24156), + 129: uint16(24157), + 130: uint16(24159), + 131: uint16(24160), + 132: uint16(24163), + 133: uint16(24164), + 134: uint16(24165), + 135: uint16(24166), + 136: uint16(24167), + 137: uint16(24168), + 138: uint16(24169), + 139: uint16(24170), + 140: uint16(24171), + 141: uint16(24172), + 142: uint16(24173), + 143: uint16(24174), + 144: uint16(24175), + 145: uint16(24176), + 146: uint16(24177), + 147: uint16(24181), + 148: uint16(24183), + 149: uint16(24185), + 150: uint16(24190), + 151: uint16(24193), + 152: uint16(24194), + 153: uint16(24195), + 154: uint16(24197), + 155: uint16(24200), + 156: uint16(24201), + 157: uint16(24204), + 158: uint16(24205), + 159: uint16(24206), + 160: uint16(24210), + 161: uint16(24216), + 162: uint16(24219), + 163: uint16(24221), + 164: uint16(24225), + 165: uint16(24226), + 166: uint16(24227), + 167: uint16(24228), + 168: uint16(24232), + 169: uint16(24233), + 170: uint16(24234), + 171: uint16(24235), + 172: uint16(24236), + 173: uint16(24238), + 174: uint16(24239), + 175: uint16(24240), + 176: uint16(24241), + 177: uint16(24242), + 178: uint16(24244), + 179: uint16(24250), + 180: uint16(24251), + 181: uint16(24252), + 182: uint16(24253), + 183: uint16(24255), + 184: uint16(24256), + 185: uint16(24257), + 186: uint16(24258), + 187: uint16(24259), + 188: uint16(24260), + 189: uint16(24261), + }, + 14: { + 0: uint16(24262), + 1: uint16(24263), + 2: uint16(24264), + 3: uint16(24267), + 4: uint16(24268), + 5: uint16(24269), + 6: uint16(24270), + 7: uint16(24271), + 8: uint16(24272), + 9: uint16(24276), + 10: uint16(24277), + 11: uint16(24279), + 12: uint16(24280), + 13: uint16(24281), + 14: uint16(24282), + 15: uint16(24284), + 16: uint16(24285), + 17: uint16(24286), + 18: uint16(24287), + 19: uint16(24288), + 20: uint16(24289), + 21: uint16(24290), + 22: uint16(24291), + 23: uint16(24292), + 24: uint16(24293), + 25: uint16(24294), + 26: uint16(24295), + 27: uint16(24297), + 28: uint16(24299), + 29: uint16(24300), + 30: uint16(24301), + 31: uint16(24302), + 32: uint16(24303), + 33: uint16(24304), + 34: uint16(24305), + 35: uint16(24306), + 36: uint16(24307), + 37: uint16(24309), + 38: uint16(24312), + 39: uint16(24313), + 40: uint16(24315), + 41: uint16(24316), + 42: uint16(24317), + 43: uint16(24325), + 44: uint16(24326), + 45: uint16(24327), + 46: uint16(24329), + 47: uint16(24332), + 48: uint16(24333), + 49: uint16(24334), + 50: uint16(24336), + 51: uint16(24338), + 52: uint16(24340), + 53: uint16(24342), + 54: uint16(24345), + 55: uint16(24346), + 56: uint16(24348), + 57: uint16(24349), + 58: uint16(24350), + 59: uint16(24353), + 60: uint16(24354), + 61: uint16(24355), + 62: uint16(24356), + 63: uint16(24360), + 64: uint16(24363), + 65: uint16(24364), + 66: uint16(24366), + 67: uint16(24368), + 68: uint16(24370), + 69: uint16(24371), + 70: uint16(24372), + 71: uint16(24373), + 72: uint16(24374), + 73: uint16(24375), + 74: uint16(24376), + 75: uint16(24379), + 76: uint16(24381), + 77: uint16(24382), + 78: uint16(24383), + 79: uint16(24385), + 80: uint16(24386), + 81: uint16(24387), + 82: uint16(24388), + 83: uint16(24389), + 84: uint16(24390), + 85: uint16(24391), + 86: uint16(24392), + 87: uint16(24393), + 88: uint16(24394), + 89: uint16(24395), + 90: uint16(24396), + 91: uint16(24397), + 92: uint16(24398), + 93: uint16(24399), + 94: uint16(24401), + 95: uint16(24404), + 96: uint16(24409), + 97: uint16(24410), + 98: uint16(24411), + 99: uint16(24412), + 100: uint16(24414), + 101: uint16(24415), + 102: uint16(24416), + 103: uint16(24419), + 104: uint16(24421), + 105: uint16(24423), + 106: uint16(24424), + 107: uint16(24427), + 108: uint16(24430), + 109: uint16(24431), + 110: uint16(24434), + 111: uint16(24436), + 112: uint16(24437), + 113: uint16(24438), + 114: uint16(24440), + 115: uint16(24442), + 116: uint16(24445), + 117: uint16(24446), + 118: uint16(24447), + 119: uint16(24451), + 120: uint16(24454), + 121: uint16(24461), + 122: uint16(24462), + 123: uint16(24463), + 124: uint16(24465), + 125: uint16(24467), + 126: uint16(24468), + 127: uint16(24470), + 128: uint16(24474), + 129: uint16(24475), + 130: uint16(24477), + 131: uint16(24478), + 132: uint16(24479), + 133: uint16(24480), + 134: uint16(24482), + 135: uint16(24483), + 136: uint16(24484), + 137: uint16(24485), + 138: uint16(24486), + 139: uint16(24487), + 140: uint16(24489), + 141: uint16(24491), + 142: uint16(24492), + 143: uint16(24495), + 144: uint16(24496), + 145: uint16(24497), + 146: uint16(24498), + 147: uint16(24499), + 148: uint16(24500), + 149: uint16(24502), + 150: uint16(24504), + 151: uint16(24505), + 152: uint16(24506), + 153: uint16(24507), + 154: uint16(24510), + 155: uint16(24511), + 156: uint16(24512), + 157: uint16(24513), + 158: uint16(24514), + 159: uint16(24519), + 160: uint16(24520), + 161: uint16(24522), + 162: uint16(24523), + 163: uint16(24526), + 164: uint16(24531), + 165: uint16(24532), + 166: uint16(24533), + 167: uint16(24538), + 168: uint16(24539), + 169: uint16(24540), + 170: uint16(24542), + 171: uint16(24543), + 172: uint16(24546), + 173: uint16(24547), + 174: uint16(24549), + 175: uint16(24550), + 176: uint16(24552), + 177: uint16(24553), + 178: uint16(24556), + 179: uint16(24559), + 180: uint16(24560), + 181: uint16(24562), + 182: uint16(24563), + 183: uint16(24564), + 184: uint16(24566), + 185: uint16(24567), + 186: uint16(24569), + 187: uint16(24570), + 188: uint16(24572), + 189: uint16(24583), + }, + 15: { + 0: uint16(24584), + 1: uint16(24585), + 2: uint16(24587), + 3: uint16(24588), + 4: uint16(24592), + 5: uint16(24593), + 6: uint16(24595), + 7: uint16(24599), + 8: uint16(24600), + 9: uint16(24602), + 10: uint16(24606), + 11: uint16(24607), + 12: uint16(24610), + 13: uint16(24611), + 14: uint16(24612), + 15: uint16(24620), + 16: uint16(24621), + 17: uint16(24622), + 18: uint16(24624), + 19: uint16(24625), + 20: uint16(24626), + 21: uint16(24627), + 22: uint16(24628), + 23: uint16(24630), + 24: uint16(24631), + 25: uint16(24632), + 26: uint16(24633), + 27: uint16(24634), + 28: uint16(24637), + 29: uint16(24638), + 30: uint16(24640), + 31: uint16(24644), + 32: uint16(24645), + 33: uint16(24646), + 34: uint16(24647), + 35: uint16(24648), + 36: uint16(24649), + 37: uint16(24650), + 38: uint16(24652), + 39: uint16(24654), + 40: uint16(24655), + 41: uint16(24657), + 42: uint16(24659), + 43: uint16(24660), + 44: uint16(24662), + 45: uint16(24663), + 46: uint16(24664), + 47: uint16(24667), + 48: uint16(24668), + 49: uint16(24670), + 50: uint16(24671), + 51: uint16(24672), + 52: uint16(24673), + 53: uint16(24677), + 54: uint16(24678), + 55: uint16(24686), + 56: uint16(24689), + 57: uint16(24690), + 58: uint16(24692), + 59: uint16(24693), + 60: uint16(24695), + 61: uint16(24702), + 62: uint16(24704), + 63: uint16(24705), + 64: uint16(24706), + 65: uint16(24709), + 66: uint16(24710), + 67: uint16(24711), + 68: uint16(24712), + 69: uint16(24714), + 70: uint16(24715), + 71: uint16(24718), + 72: uint16(24719), + 73: uint16(24720), + 74: uint16(24721), + 75: uint16(24723), + 76: uint16(24725), + 77: uint16(24727), + 78: uint16(24728), + 79: uint16(24729), + 80: uint16(24732), + 81: uint16(24734), + 82: uint16(24737), + 83: uint16(24738), + 84: uint16(24740), + 85: uint16(24741), + 86: uint16(24743), + 87: uint16(24745), + 88: uint16(24746), + 89: uint16(24750), + 90: uint16(24752), + 91: uint16(24755), + 92: uint16(24757), + 93: uint16(24758), + 94: uint16(24759), + 95: uint16(24761), + 96: uint16(24762), + 97: uint16(24765), + 98: uint16(24766), + 99: uint16(24767), + 100: uint16(24768), + 101: uint16(24769), + 102: uint16(24770), + 103: uint16(24771), + 104: uint16(24772), + 105: uint16(24775), + 106: uint16(24776), + 107: uint16(24777), + 108: uint16(24780), + 109: uint16(24781), + 110: uint16(24782), + 111: uint16(24783), + 112: uint16(24784), + 113: uint16(24786), + 114: uint16(24787), + 115: uint16(24788), + 116: uint16(24790), + 117: uint16(24791), + 118: uint16(24793), + 119: uint16(24795), + 120: uint16(24798), + 121: uint16(24801), + 122: uint16(24802), + 123: uint16(24803), + 124: uint16(24804), + 125: uint16(24805), + 126: uint16(24810), + 127: uint16(24817), + 128: uint16(24818), + 129: uint16(24821), + 130: uint16(24823), + 131: uint16(24824), + 132: uint16(24827), + 133: uint16(24828), + 134: uint16(24829), + 135: uint16(24830), + 136: uint16(24831), + 137: uint16(24834), + 138: uint16(24835), + 139: uint16(24836), + 140: uint16(24837), + 141: uint16(24839), + 142: uint16(24842), + 143: uint16(24843), + 144: uint16(24844), + 145: uint16(24848), + 146: uint16(24849), + 147: uint16(24850), + 148: uint16(24851), + 149: uint16(24852), + 150: uint16(24854), + 151: uint16(24855), + 152: uint16(24856), + 153: uint16(24857), + 154: uint16(24859), + 155: uint16(24860), + 156: uint16(24861), + 157: uint16(24862), + 158: uint16(24865), + 159: uint16(24866), + 160: uint16(24869), + 161: uint16(24872), + 162: uint16(24873), + 163: uint16(24874), + 164: uint16(24876), + 165: uint16(24877), + 166: uint16(24878), + 167: uint16(24879), + 168: uint16(24880), + 169: uint16(24881), + 170: uint16(24882), + 171: uint16(24883), + 172: uint16(24884), + 173: uint16(24885), + 174: uint16(24886), + 175: uint16(24887), + 176: uint16(24888), + 177: uint16(24889), + 178: uint16(24890), + 179: uint16(24891), + 180: uint16(24892), + 181: uint16(24893), + 182: uint16(24894), + 183: uint16(24896), + 184: uint16(24897), + 185: uint16(24898), + 186: uint16(24899), + 187: uint16(24900), + 188: uint16(24901), + 189: uint16(24902), + }, + 16: { + 0: uint16(24903), + 1: uint16(24905), + 2: uint16(24907), + 3: uint16(24909), + 4: uint16(24911), + 5: uint16(24912), + 6: uint16(24914), + 7: uint16(24915), + 8: uint16(24916), + 9: uint16(24918), + 10: uint16(24919), + 11: uint16(24920), + 12: uint16(24921), + 13: uint16(24922), + 14: uint16(24923), + 15: uint16(24924), + 16: uint16(24926), + 17: uint16(24927), + 18: uint16(24928), + 19: uint16(24929), + 20: uint16(24931), + 21: uint16(24932), + 22: uint16(24933), + 23: uint16(24934), + 24: uint16(24937), + 25: uint16(24938), + 26: uint16(24939), + 27: uint16(24940), + 28: uint16(24941), + 29: uint16(24942), + 30: uint16(24943), + 31: uint16(24945), + 32: uint16(24946), + 33: uint16(24947), + 34: uint16(24948), + 35: uint16(24950), + 36: uint16(24952), + 37: uint16(24953), + 38: uint16(24954), + 39: uint16(24955), + 40: uint16(24956), + 41: uint16(24957), + 42: uint16(24958), + 43: uint16(24959), + 44: uint16(24960), + 45: uint16(24961), + 46: uint16(24962), + 47: uint16(24963), + 48: uint16(24964), + 49: uint16(24965), + 50: uint16(24966), + 51: uint16(24967), + 52: uint16(24968), + 53: uint16(24969), + 54: uint16(24970), + 55: uint16(24972), + 56: uint16(24973), + 57: uint16(24975), + 58: uint16(24976), + 59: uint16(24977), + 60: uint16(24978), + 61: uint16(24979), + 62: uint16(24981), + 63: uint16(24982), + 64: uint16(24983), + 65: uint16(24984), + 66: uint16(24985), + 67: uint16(24986), + 68: uint16(24987), + 69: uint16(24988), + 70: uint16(24990), + 71: uint16(24991), + 72: uint16(24992), + 73: uint16(24993), + 74: uint16(24994), + 75: uint16(24995), + 76: uint16(24996), + 77: uint16(24997), + 78: uint16(24998), + 79: uint16(25002), + 80: uint16(25003), + 81: uint16(25005), + 82: uint16(25006), + 83: uint16(25007), + 84: uint16(25008), + 85: uint16(25009), + 86: uint16(25010), + 87: uint16(25011), + 88: uint16(25012), + 89: uint16(25013), + 90: uint16(25014), + 91: uint16(25016), + 92: uint16(25017), + 93: uint16(25018), + 94: uint16(25019), + 95: uint16(25020), + 96: uint16(25021), + 97: uint16(25023), + 98: uint16(25024), + 99: uint16(25025), + 100: uint16(25027), + 101: uint16(25028), + 102: uint16(25029), + 103: uint16(25030), + 104: uint16(25031), + 105: uint16(25033), + 106: uint16(25036), + 107: uint16(25037), + 108: uint16(25038), + 109: uint16(25039), + 110: uint16(25040), + 111: uint16(25043), + 112: uint16(25045), + 113: uint16(25046), + 114: uint16(25047), + 115: uint16(25048), + 116: uint16(25049), + 117: uint16(25050), + 118: uint16(25051), + 119: uint16(25052), + 120: uint16(25053), + 121: uint16(25054), + 122: uint16(25055), + 123: uint16(25056), + 124: uint16(25057), + 125: uint16(25058), + 126: uint16(25059), + 127: uint16(25060), + 128: uint16(25061), + 129: uint16(25063), + 130: uint16(25064), + 131: uint16(25065), + 132: uint16(25066), + 133: uint16(25067), + 134: uint16(25068), + 135: uint16(25069), + 136: uint16(25070), + 137: uint16(25071), + 138: uint16(25072), + 139: uint16(25073), + 140: uint16(25074), + 141: uint16(25075), + 142: uint16(25076), + 143: uint16(25078), + 144: uint16(25079), + 145: uint16(25080), + 146: uint16(25081), + 147: uint16(25082), + 148: uint16(25083), + 149: uint16(25084), + 150: uint16(25085), + 151: uint16(25086), + 152: uint16(25088), + 153: uint16(25089), + 154: uint16(25090), + 155: uint16(25091), + 156: uint16(25092), + 157: uint16(25093), + 158: uint16(25095), + 159: uint16(25097), + 160: uint16(25107), + 161: uint16(25108), + 162: uint16(25113), + 163: uint16(25116), + 164: uint16(25117), + 165: uint16(25118), + 166: uint16(25120), + 167: uint16(25123), + 168: uint16(25126), + 169: uint16(25127), + 170: uint16(25128), + 171: uint16(25129), + 172: uint16(25131), + 173: uint16(25133), + 174: uint16(25135), + 175: uint16(25136), + 176: uint16(25137), + 177: uint16(25138), + 178: uint16(25141), + 179: uint16(25142), + 180: uint16(25144), + 181: uint16(25145), + 182: uint16(25146), + 183: uint16(25147), + 184: uint16(25148), + 185: uint16(25154), + 186: uint16(25156), + 187: uint16(25157), + 188: uint16(25158), + 189: uint16(25162), + }, + 17: { + 0: uint16(25167), + 1: uint16(25168), + 2: uint16(25173), + 3: uint16(25174), + 4: uint16(25175), + 5: uint16(25177), + 6: uint16(25178), + 7: uint16(25180), + 8: uint16(25181), + 9: uint16(25182), + 10: uint16(25183), + 11: uint16(25184), + 12: uint16(25185), + 13: uint16(25186), + 14: uint16(25188), + 15: uint16(25189), + 16: uint16(25192), + 17: uint16(25201), + 18: uint16(25202), + 19: uint16(25204), + 20: uint16(25205), + 21: uint16(25207), + 22: uint16(25208), + 23: uint16(25210), + 24: uint16(25211), + 25: uint16(25213), + 26: uint16(25217), + 27: uint16(25218), + 28: uint16(25219), + 29: uint16(25221), + 30: uint16(25222), + 31: uint16(25223), + 32: uint16(25224), + 33: uint16(25227), + 34: uint16(25228), + 35: uint16(25229), + 36: uint16(25230), + 37: uint16(25231), + 38: uint16(25232), + 39: uint16(25236), + 40: uint16(25241), + 41: uint16(25244), + 42: uint16(25245), + 43: uint16(25246), + 44: uint16(25251), + 45: uint16(25254), + 46: uint16(25255), + 47: uint16(25257), + 48: uint16(25258), + 49: uint16(25261), + 50: uint16(25262), + 51: uint16(25263), + 52: uint16(25264), + 53: uint16(25266), + 54: uint16(25267), + 55: uint16(25268), + 56: uint16(25270), + 57: uint16(25271), + 58: uint16(25272), + 59: uint16(25274), + 60: uint16(25278), + 61: uint16(25280), + 62: uint16(25281), + 63: uint16(25283), + 64: uint16(25291), + 65: uint16(25295), + 66: uint16(25297), + 67: uint16(25301), + 68: uint16(25309), + 69: uint16(25310), + 70: uint16(25312), + 71: uint16(25313), + 72: uint16(25316), + 73: uint16(25322), + 74: uint16(25323), + 75: uint16(25328), + 76: uint16(25330), + 77: uint16(25333), + 78: uint16(25336), + 79: uint16(25337), + 80: uint16(25338), + 81: uint16(25339), + 82: uint16(25344), + 83: uint16(25347), + 84: uint16(25348), + 85: uint16(25349), + 86: uint16(25350), + 87: uint16(25354), + 88: uint16(25355), + 89: uint16(25356), + 90: uint16(25357), + 91: uint16(25359), + 92: uint16(25360), + 93: uint16(25362), + 94: uint16(25363), + 95: uint16(25364), + 96: uint16(25365), + 97: uint16(25367), + 98: uint16(25368), + 99: uint16(25369), + 100: uint16(25372), + 101: uint16(25382), + 102: uint16(25383), + 103: uint16(25385), + 104: uint16(25388), + 105: uint16(25389), + 106: uint16(25390), + 107: uint16(25392), + 108: uint16(25393), + 109: uint16(25395), + 110: uint16(25396), + 111: uint16(25397), + 112: uint16(25398), + 113: uint16(25399), + 114: uint16(25400), + 115: uint16(25403), + 116: uint16(25404), + 117: uint16(25406), + 118: uint16(25407), + 119: uint16(25408), + 120: uint16(25409), + 121: uint16(25412), + 122: uint16(25415), + 123: uint16(25416), + 124: uint16(25418), + 125: uint16(25425), + 126: uint16(25426), + 127: uint16(25427), + 128: uint16(25428), + 129: uint16(25430), + 130: uint16(25431), + 131: uint16(25432), + 132: uint16(25433), + 133: uint16(25434), + 134: uint16(25435), + 135: uint16(25436), + 136: uint16(25437), + 137: uint16(25440), + 138: uint16(25444), + 139: uint16(25445), + 140: uint16(25446), + 141: uint16(25448), + 142: uint16(25450), + 143: uint16(25451), + 144: uint16(25452), + 145: uint16(25455), + 146: uint16(25456), + 147: uint16(25458), + 148: uint16(25459), + 149: uint16(25460), + 150: uint16(25461), + 151: uint16(25464), + 152: uint16(25465), + 153: uint16(25468), + 154: uint16(25469), + 155: uint16(25470), + 156: uint16(25471), + 157: uint16(25473), + 158: uint16(25475), + 159: uint16(25476), + 160: uint16(25477), + 161: uint16(25478), + 162: uint16(25483), + 163: uint16(25485), + 164: uint16(25489), + 165: uint16(25491), + 166: uint16(25492), + 167: uint16(25493), + 168: uint16(25495), + 169: uint16(25497), + 170: uint16(25498), + 171: uint16(25499), + 172: uint16(25500), + 173: uint16(25501), + 174: uint16(25502), + 175: uint16(25503), + 176: uint16(25505), + 177: uint16(25508), + 178: uint16(25510), + 179: uint16(25515), + 180: uint16(25519), + 181: uint16(25521), + 182: uint16(25522), + 183: uint16(25525), + 184: uint16(25526), + 185: uint16(25529), + 186: uint16(25531), + 187: uint16(25533), + 188: uint16(25535), + 189: uint16(25536), + }, + 18: { + 0: uint16(25537), + 1: uint16(25538), + 2: uint16(25539), + 3: uint16(25541), + 4: uint16(25543), + 5: uint16(25544), + 6: uint16(25546), + 7: uint16(25547), + 8: uint16(25548), + 9: uint16(25553), + 10: uint16(25555), + 11: uint16(25556), + 12: uint16(25557), + 13: uint16(25559), + 14: uint16(25560), + 15: uint16(25561), + 16: uint16(25562), + 17: uint16(25563), + 18: uint16(25564), + 19: uint16(25565), + 20: uint16(25567), + 21: uint16(25570), + 22: uint16(25572), + 23: uint16(25573), + 24: uint16(25574), + 25: uint16(25575), + 26: uint16(25576), + 27: uint16(25579), + 28: uint16(25580), + 29: uint16(25582), + 30: uint16(25583), + 31: uint16(25584), + 32: uint16(25585), + 33: uint16(25587), + 34: uint16(25589), + 35: uint16(25591), + 36: uint16(25593), + 37: uint16(25594), + 38: uint16(25595), + 39: uint16(25596), + 40: uint16(25598), + 41: uint16(25603), + 42: uint16(25604), + 43: uint16(25606), + 44: uint16(25607), + 45: uint16(25608), + 46: uint16(25609), + 47: uint16(25610), + 48: uint16(25613), + 49: uint16(25614), + 50: uint16(25617), + 51: uint16(25618), + 52: uint16(25621), + 53: uint16(25622), + 54: uint16(25623), + 55: uint16(25624), + 56: uint16(25625), + 57: uint16(25626), + 58: uint16(25629), + 59: uint16(25631), + 60: uint16(25634), + 61: uint16(25635), + 62: uint16(25636), + 63: uint16(25637), + 64: uint16(25639), + 65: uint16(25640), + 66: uint16(25641), + 67: uint16(25643), + 68: uint16(25646), + 69: uint16(25647), + 70: uint16(25648), + 71: uint16(25649), + 72: uint16(25650), + 73: uint16(25651), + 74: uint16(25653), + 75: uint16(25654), + 76: uint16(25655), + 77: uint16(25656), + 78: uint16(25657), + 79: uint16(25659), + 80: uint16(25660), + 81: uint16(25662), + 82: uint16(25664), + 83: uint16(25666), + 84: uint16(25667), + 85: uint16(25673), + 86: uint16(25675), + 87: uint16(25676), + 88: uint16(25677), + 89: uint16(25678), + 90: uint16(25679), + 91: uint16(25680), + 92: uint16(25681), + 93: uint16(25683), + 94: uint16(25685), + 95: uint16(25686), + 96: uint16(25687), + 97: uint16(25689), + 98: uint16(25690), + 99: uint16(25691), + 100: uint16(25692), + 101: uint16(25693), + 102: uint16(25695), + 103: uint16(25696), + 104: uint16(25697), + 105: uint16(25698), + 106: uint16(25699), + 107: uint16(25700), + 108: uint16(25701), + 109: uint16(25702), + 110: uint16(25704), + 111: uint16(25706), + 112: uint16(25707), + 113: uint16(25708), + 114: uint16(25710), + 115: uint16(25711), + 116: uint16(25712), + 117: uint16(25713), + 118: uint16(25714), + 119: uint16(25715), + 120: uint16(25716), + 121: uint16(25717), + 122: uint16(25718), + 123: uint16(25719), + 124: uint16(25723), + 125: uint16(25724), + 126: uint16(25725), + 127: uint16(25726), + 128: uint16(25727), + 129: uint16(25728), + 130: uint16(25729), + 131: uint16(25731), + 132: uint16(25734), + 133: uint16(25736), + 134: uint16(25737), + 135: uint16(25738), + 136: uint16(25739), + 137: uint16(25740), + 138: uint16(25741), + 139: uint16(25742), + 140: uint16(25743), + 141: uint16(25744), + 142: uint16(25747), + 143: uint16(25748), + 144: uint16(25751), + 145: uint16(25752), + 146: uint16(25754), + 147: uint16(25755), + 148: uint16(25756), + 149: uint16(25757), + 150: uint16(25759), + 151: uint16(25760), + 152: uint16(25761), + 153: uint16(25762), + 154: uint16(25763), + 155: uint16(25765), + 156: uint16(25766), + 157: uint16(25767), + 158: uint16(25768), + 159: uint16(25770), + 160: uint16(25771), + 161: uint16(25775), + 162: uint16(25777), + 163: uint16(25778), + 164: uint16(25779), + 165: uint16(25780), + 166: uint16(25782), + 167: uint16(25785), + 168: uint16(25787), + 169: uint16(25789), + 170: uint16(25790), + 171: uint16(25791), + 172: uint16(25793), + 173: uint16(25795), + 174: uint16(25796), + 175: uint16(25798), + 176: uint16(25799), + 177: uint16(25800), + 178: uint16(25801), + 179: uint16(25802), + 180: uint16(25803), + 181: uint16(25804), + 182: uint16(25807), + 183: uint16(25809), + 184: uint16(25811), + 185: uint16(25812), + 186: uint16(25813), + 187: uint16(25814), + 188: uint16(25817), + 189: uint16(25818), + }, + 19: { + 0: uint16(25819), + 1: uint16(25820), + 2: uint16(25821), + 3: uint16(25823), + 4: uint16(25824), + 5: uint16(25825), + 6: uint16(25827), + 7: uint16(25829), + 8: uint16(25831), + 9: uint16(25832), + 10: uint16(25833), + 11: uint16(25834), + 12: uint16(25835), + 13: uint16(25836), + 14: uint16(25837), + 15: uint16(25838), + 16: uint16(25839), + 17: uint16(25840), + 18: uint16(25841), + 19: uint16(25842), + 20: uint16(25843), + 21: uint16(25844), + 22: uint16(25845), + 23: uint16(25846), + 24: uint16(25847), + 25: uint16(25848), + 26: uint16(25849), + 27: uint16(25850), + 28: uint16(25851), + 29: uint16(25852), + 30: uint16(25853), + 31: uint16(25854), + 32: uint16(25855), + 33: uint16(25857), + 34: uint16(25858), + 35: uint16(25859), + 36: uint16(25860), + 37: uint16(25861), + 38: uint16(25862), + 39: uint16(25863), + 40: uint16(25864), + 41: uint16(25866), + 42: uint16(25867), + 43: uint16(25868), + 44: uint16(25869), + 45: uint16(25870), + 46: uint16(25871), + 47: uint16(25872), + 48: uint16(25873), + 49: uint16(25875), + 50: uint16(25876), + 51: uint16(25877), + 52: uint16(25878), + 53: uint16(25879), + 54: uint16(25881), + 55: uint16(25882), + 56: uint16(25883), + 57: uint16(25884), + 58: uint16(25885), + 59: uint16(25886), + 60: uint16(25887), + 61: uint16(25888), + 62: uint16(25889), + 63: uint16(25890), + 64: uint16(25891), + 65: uint16(25892), + 66: uint16(25894), + 67: uint16(25895), + 68: uint16(25896), + 69: uint16(25897), + 70: uint16(25898), + 71: uint16(25900), + 72: uint16(25901), + 73: uint16(25904), + 74: uint16(25905), + 75: uint16(25906), + 76: uint16(25907), + 77: uint16(25911), + 78: uint16(25914), + 79: uint16(25916), + 80: uint16(25917), + 81: uint16(25920), + 82: uint16(25921), + 83: uint16(25922), + 84: uint16(25923), + 85: uint16(25924), + 86: uint16(25926), + 87: uint16(25927), + 88: uint16(25930), + 89: uint16(25931), + 90: uint16(25933), + 91: uint16(25934), + 92: uint16(25936), + 93: uint16(25938), + 94: uint16(25939), + 95: uint16(25940), + 96: uint16(25943), + 97: uint16(25944), + 98: uint16(25946), + 99: uint16(25948), + 100: uint16(25951), + 101: uint16(25952), + 102: uint16(25953), + 103: uint16(25956), + 104: uint16(25957), + 105: uint16(25959), + 106: uint16(25960), + 107: uint16(25961), + 108: uint16(25962), + 109: uint16(25965), + 110: uint16(25966), + 111: uint16(25967), + 112: uint16(25969), + 113: uint16(25971), + 114: uint16(25973), + 115: uint16(25974), + 116: uint16(25976), + 117: uint16(25977), + 118: uint16(25978), + 119: uint16(25979), + 120: uint16(25980), + 121: uint16(25981), + 122: uint16(25982), + 123: uint16(25983), + 124: uint16(25984), + 125: uint16(25985), + 126: uint16(25986), + 127: uint16(25987), + 128: uint16(25988), + 129: uint16(25989), + 130: uint16(25990), + 131: uint16(25992), + 132: uint16(25993), + 133: uint16(25994), + 134: uint16(25997), + 135: uint16(25998), + 136: uint16(25999), + 137: uint16(26002), + 138: uint16(26004), + 139: uint16(26005), + 140: uint16(26006), + 141: uint16(26008), + 142: uint16(26010), + 143: uint16(26013), + 144: uint16(26014), + 145: uint16(26016), + 146: uint16(26018), + 147: uint16(26019), + 148: uint16(26022), + 149: uint16(26024), + 150: uint16(26026), + 151: uint16(26028), + 152: uint16(26030), + 153: uint16(26033), + 154: uint16(26034), + 155: uint16(26035), + 156: uint16(26036), + 157: uint16(26037), + 158: uint16(26038), + 159: uint16(26039), + 160: uint16(26040), + 161: uint16(26042), + 162: uint16(26043), + 163: uint16(26046), + 164: uint16(26047), + 165: uint16(26048), + 166: uint16(26050), + 167: uint16(26055), + 168: uint16(26056), + 169: uint16(26057), + 170: uint16(26058), + 171: uint16(26061), + 172: uint16(26064), + 173: uint16(26065), + 174: uint16(26067), + 175: uint16(26068), + 176: uint16(26069), + 177: uint16(26072), + 178: uint16(26073), + 179: uint16(26074), + 180: uint16(26075), + 181: uint16(26076), + 182: uint16(26077), + 183: uint16(26078), + 184: uint16(26079), + 185: uint16(26081), + 186: uint16(26083), + 187: uint16(26084), + 188: uint16(26090), + 189: uint16(26091), + }, + 20: { + 0: uint16(26098), + 1: uint16(26099), + 2: uint16(26100), + 3: uint16(26101), + 4: uint16(26104), + 5: uint16(26105), + 6: uint16(26107), + 7: uint16(26108), + 8: uint16(26109), + 9: uint16(26110), + 10: uint16(26111), + 11: uint16(26113), + 12: uint16(26116), + 13: uint16(26117), + 14: uint16(26119), + 15: uint16(26120), + 16: uint16(26121), + 17: uint16(26123), + 18: uint16(26125), + 19: uint16(26128), + 20: uint16(26129), + 21: uint16(26130), + 22: uint16(26134), + 23: uint16(26135), + 24: uint16(26136), + 25: uint16(26138), + 26: uint16(26139), + 27: uint16(26140), + 28: uint16(26142), + 29: uint16(26145), + 30: uint16(26146), + 31: uint16(26147), + 32: uint16(26148), + 33: uint16(26150), + 34: uint16(26153), + 35: uint16(26154), + 36: uint16(26155), + 37: uint16(26156), + 38: uint16(26158), + 39: uint16(26160), + 40: uint16(26162), + 41: uint16(26163), + 42: uint16(26167), + 43: uint16(26168), + 44: uint16(26169), + 45: uint16(26170), + 46: uint16(26171), + 47: uint16(26173), + 48: uint16(26175), + 49: uint16(26176), + 50: uint16(26178), + 51: uint16(26180), + 52: uint16(26181), + 53: uint16(26182), + 54: uint16(26183), + 55: uint16(26184), + 56: uint16(26185), + 57: uint16(26186), + 58: uint16(26189), + 59: uint16(26190), + 60: uint16(26192), + 61: uint16(26193), + 62: uint16(26200), + 63: uint16(26201), + 64: uint16(26203), + 65: uint16(26204), + 66: uint16(26205), + 67: uint16(26206), + 68: uint16(26208), + 69: uint16(26210), + 70: uint16(26211), + 71: uint16(26213), + 72: uint16(26215), + 73: uint16(26217), + 74: uint16(26218), + 75: uint16(26219), + 76: uint16(26220), + 77: uint16(26221), + 78: uint16(26225), + 79: uint16(26226), + 80: uint16(26227), + 81: uint16(26229), + 82: uint16(26232), + 83: uint16(26233), + 84: uint16(26235), + 85: uint16(26236), + 86: uint16(26237), + 87: uint16(26239), + 88: uint16(26240), + 89: uint16(26241), + 90: uint16(26243), + 91: uint16(26245), + 92: uint16(26246), + 93: uint16(26248), + 94: uint16(26249), + 95: uint16(26250), + 96: uint16(26251), + 97: uint16(26253), + 98: uint16(26254), + 99: uint16(26255), + 100: uint16(26256), + 101: uint16(26258), + 102: uint16(26259), + 103: uint16(26260), + 104: uint16(26261), + 105: uint16(26264), + 106: uint16(26265), + 107: uint16(26266), + 108: uint16(26267), + 109: uint16(26268), + 110: uint16(26270), + 111: uint16(26271), + 112: uint16(26272), + 113: uint16(26273), + 114: uint16(26274), + 115: uint16(26275), + 116: uint16(26276), + 117: uint16(26277), + 118: uint16(26278), + 119: uint16(26281), + 120: uint16(26282), + 121: uint16(26283), + 122: uint16(26284), + 123: uint16(26285), + 124: uint16(26287), + 125: uint16(26288), + 126: uint16(26289), + 127: uint16(26290), + 128: uint16(26291), + 129: uint16(26293), + 130: uint16(26294), + 131: uint16(26295), + 132: uint16(26296), + 133: uint16(26298), + 134: uint16(26299), + 135: uint16(26300), + 136: uint16(26301), + 137: uint16(26303), + 138: uint16(26304), + 139: uint16(26305), + 140: uint16(26306), + 141: uint16(26307), + 142: uint16(26308), + 143: uint16(26309), + 144: uint16(26310), + 145: uint16(26311), + 146: uint16(26312), + 147: uint16(26313), + 148: uint16(26314), + 149: uint16(26315), + 150: uint16(26316), + 151: uint16(26317), + 152: uint16(26318), + 153: uint16(26319), + 154: uint16(26320), + 155: uint16(26321), + 156: uint16(26322), + 157: uint16(26323), + 158: uint16(26324), + 159: uint16(26325), + 160: uint16(26326), + 161: uint16(26327), + 162: uint16(26328), + 163: uint16(26330), + 164: uint16(26334), + 165: uint16(26335), + 166: uint16(26336), + 167: uint16(26337), + 168: uint16(26338), + 169: uint16(26339), + 170: uint16(26340), + 171: uint16(26341), + 172: uint16(26343), + 173: uint16(26344), + 174: uint16(26346), + 175: uint16(26347), + 176: uint16(26348), + 177: uint16(26349), + 178: uint16(26350), + 179: uint16(26351), + 180: uint16(26353), + 181: uint16(26357), + 182: uint16(26358), + 183: uint16(26360), + 184: uint16(26362), + 185: uint16(26363), + 186: uint16(26365), + 187: uint16(26369), + 188: uint16(26370), + 189: uint16(26371), + }, + 21: { + 0: uint16(26372), + 1: uint16(26373), + 2: uint16(26374), + 3: uint16(26375), + 4: uint16(26380), + 5: uint16(26382), + 6: uint16(26383), + 7: uint16(26385), + 8: uint16(26386), + 9: uint16(26387), + 10: uint16(26390), + 11: uint16(26392), + 12: uint16(26393), + 13: uint16(26394), + 14: uint16(26396), + 15: uint16(26398), + 16: uint16(26400), + 17: uint16(26401), + 18: uint16(26402), + 19: uint16(26403), + 20: uint16(26404), + 21: uint16(26405), + 22: uint16(26407), + 23: uint16(26409), + 24: uint16(26414), + 25: uint16(26416), + 26: uint16(26418), + 27: uint16(26419), + 28: uint16(26422), + 29: uint16(26423), + 30: uint16(26424), + 31: uint16(26425), + 32: uint16(26427), + 33: uint16(26428), + 34: uint16(26430), + 35: uint16(26431), + 36: uint16(26433), + 37: uint16(26436), + 38: uint16(26437), + 39: uint16(26439), + 40: uint16(26442), + 41: uint16(26443), + 42: uint16(26445), + 43: uint16(26450), + 44: uint16(26452), + 45: uint16(26453), + 46: uint16(26455), + 47: uint16(26456), + 48: uint16(26457), + 49: uint16(26458), + 50: uint16(26459), + 51: uint16(26461), + 52: uint16(26466), + 53: uint16(26467), + 54: uint16(26468), + 55: uint16(26470), + 56: uint16(26471), + 57: uint16(26475), + 58: uint16(26476), + 59: uint16(26478), + 60: uint16(26481), + 61: uint16(26484), + 62: uint16(26486), + 63: uint16(26488), + 64: uint16(26489), + 65: uint16(26490), + 66: uint16(26491), + 67: uint16(26493), + 68: uint16(26496), + 69: uint16(26498), + 70: uint16(26499), + 71: uint16(26501), + 72: uint16(26502), + 73: uint16(26504), + 74: uint16(26506), + 75: uint16(26508), + 76: uint16(26509), + 77: uint16(26510), + 78: uint16(26511), + 79: uint16(26513), + 80: uint16(26514), + 81: uint16(26515), + 82: uint16(26516), + 83: uint16(26518), + 84: uint16(26521), + 85: uint16(26523), + 86: uint16(26527), + 87: uint16(26528), + 88: uint16(26529), + 89: uint16(26532), + 90: uint16(26534), + 91: uint16(26537), + 92: uint16(26540), + 93: uint16(26542), + 94: uint16(26545), + 95: uint16(26546), + 96: uint16(26548), + 97: uint16(26553), + 98: uint16(26554), + 99: uint16(26555), + 100: uint16(26556), + 101: uint16(26557), + 102: uint16(26558), + 103: uint16(26559), + 104: uint16(26560), + 105: uint16(26562), + 106: uint16(26565), + 107: uint16(26566), + 108: uint16(26567), + 109: uint16(26568), + 110: uint16(26569), + 111: uint16(26570), + 112: uint16(26571), + 113: uint16(26572), + 114: uint16(26573), + 115: uint16(26574), + 116: uint16(26581), + 117: uint16(26582), + 118: uint16(26583), + 119: uint16(26587), + 120: uint16(26591), + 121: uint16(26593), + 122: uint16(26595), + 123: uint16(26596), + 124: uint16(26598), + 125: uint16(26599), + 126: uint16(26600), + 127: uint16(26602), + 128: uint16(26603), + 129: uint16(26605), + 130: uint16(26606), + 131: uint16(26610), + 132: uint16(26613), + 133: uint16(26614), + 134: uint16(26615), + 135: uint16(26616), + 136: uint16(26617), + 137: uint16(26618), + 138: uint16(26619), + 139: uint16(26620), + 140: uint16(26622), + 141: uint16(26625), + 142: uint16(26626), + 143: uint16(26627), + 144: uint16(26628), + 145: uint16(26630), + 146: uint16(26637), + 147: uint16(26640), + 148: uint16(26642), + 149: uint16(26644), + 150: uint16(26645), + 151: uint16(26648), + 152: uint16(26649), + 153: uint16(26650), + 154: uint16(26651), + 155: uint16(26652), + 156: uint16(26654), + 157: uint16(26655), + 158: uint16(26656), + 159: uint16(26658), + 160: uint16(26659), + 161: uint16(26660), + 162: uint16(26661), + 163: uint16(26662), + 164: uint16(26663), + 165: uint16(26664), + 166: uint16(26667), + 167: uint16(26668), + 168: uint16(26669), + 169: uint16(26670), + 170: uint16(26671), + 171: uint16(26672), + 172: uint16(26673), + 173: uint16(26676), + 174: uint16(26677), + 175: uint16(26678), + 176: uint16(26682), + 177: uint16(26683), + 178: uint16(26687), + 179: uint16(26695), + 180: uint16(26699), + 181: uint16(26701), + 182: uint16(26703), + 183: uint16(26706), + 184: uint16(26710), + 185: uint16(26711), + 186: uint16(26712), + 187: uint16(26713), + 188: uint16(26714), + 189: uint16(26715), + }, + 22: { + 0: uint16(26716), + 1: uint16(26717), + 2: uint16(26718), + 3: uint16(26719), + 4: uint16(26730), + 5: uint16(26732), + 6: uint16(26733), + 7: uint16(26734), + 8: uint16(26735), + 9: uint16(26736), + 10: uint16(26737), + 11: uint16(26738), + 12: uint16(26739), + 13: uint16(26741), + 14: uint16(26744), + 15: uint16(26745), + 16: uint16(26746), + 17: uint16(26747), + 18: uint16(26748), + 19: uint16(26749), + 20: uint16(26750), + 21: uint16(26751), + 22: uint16(26752), + 23: uint16(26754), + 24: uint16(26756), + 25: uint16(26759), + 26: uint16(26760), + 27: uint16(26761), + 28: uint16(26762), + 29: uint16(26763), + 30: uint16(26764), + 31: uint16(26765), + 32: uint16(26766), + 33: uint16(26768), + 34: uint16(26769), + 35: uint16(26770), + 36: uint16(26772), + 37: uint16(26773), + 38: uint16(26774), + 39: uint16(26776), + 40: uint16(26777), + 41: uint16(26778), + 42: uint16(26779), + 43: uint16(26780), + 44: uint16(26781), + 45: uint16(26782), + 46: uint16(26783), + 47: uint16(26784), + 48: uint16(26785), + 49: uint16(26787), + 50: uint16(26788), + 51: uint16(26789), + 52: uint16(26793), + 53: uint16(26794), + 54: uint16(26795), + 55: uint16(26796), + 56: uint16(26798), + 57: uint16(26801), + 58: uint16(26802), + 59: uint16(26804), + 60: uint16(26806), + 61: uint16(26807), + 62: uint16(26808), + 63: uint16(26809), + 64: uint16(26810), + 65: uint16(26811), + 66: uint16(26812), + 67: uint16(26813), + 68: uint16(26814), + 69: uint16(26815), + 70: uint16(26817), + 71: uint16(26819), + 72: uint16(26820), + 73: uint16(26821), + 74: uint16(26822), + 75: uint16(26823), + 76: uint16(26824), + 77: uint16(26826), + 78: uint16(26828), + 79: uint16(26830), + 80: uint16(26831), + 81: uint16(26832), + 82: uint16(26833), + 83: uint16(26835), + 84: uint16(26836), + 85: uint16(26838), + 86: uint16(26839), + 87: uint16(26841), + 88: uint16(26843), + 89: uint16(26844), + 90: uint16(26845), + 91: uint16(26846), + 92: uint16(26847), + 93: uint16(26849), + 94: uint16(26850), + 95: uint16(26852), + 96: uint16(26853), + 97: uint16(26854), + 98: uint16(26855), + 99: uint16(26856), + 100: uint16(26857), + 101: uint16(26858), + 102: uint16(26859), + 103: uint16(26860), + 104: uint16(26861), + 105: uint16(26863), + 106: uint16(26866), + 107: uint16(26867), + 108: uint16(26868), + 109: uint16(26870), + 110: uint16(26871), + 111: uint16(26872), + 112: uint16(26875), + 113: uint16(26877), + 114: uint16(26878), + 115: uint16(26879), + 116: uint16(26880), + 117: uint16(26882), + 118: uint16(26883), + 119: uint16(26884), + 120: uint16(26886), + 121: uint16(26887), + 122: uint16(26888), + 123: uint16(26889), + 124: uint16(26890), + 125: uint16(26892), + 126: uint16(26895), + 127: uint16(26897), + 128: uint16(26899), + 129: uint16(26900), + 130: uint16(26901), + 131: uint16(26902), + 132: uint16(26903), + 133: uint16(26904), + 134: uint16(26905), + 135: uint16(26906), + 136: uint16(26907), + 137: uint16(26908), + 138: uint16(26909), + 139: uint16(26910), + 140: uint16(26913), + 141: uint16(26914), + 142: uint16(26915), + 143: uint16(26917), + 144: uint16(26918), + 145: uint16(26919), + 146: uint16(26920), + 147: uint16(26921), + 148: uint16(26922), + 149: uint16(26923), + 150: uint16(26924), + 151: uint16(26926), + 152: uint16(26927), + 153: uint16(26929), + 154: uint16(26930), + 155: uint16(26931), + 156: uint16(26933), + 157: uint16(26934), + 158: uint16(26935), + 159: uint16(26936), + 160: uint16(26938), + 161: uint16(26939), + 162: uint16(26940), + 163: uint16(26942), + 164: uint16(26944), + 165: uint16(26945), + 166: uint16(26947), + 167: uint16(26948), + 168: uint16(26949), + 169: uint16(26950), + 170: uint16(26951), + 171: uint16(26952), + 172: uint16(26953), + 173: uint16(26954), + 174: uint16(26955), + 175: uint16(26956), + 176: uint16(26957), + 177: uint16(26958), + 178: uint16(26959), + 179: uint16(26960), + 180: uint16(26961), + 181: uint16(26962), + 182: uint16(26963), + 183: uint16(26965), + 184: uint16(26966), + 185: uint16(26968), + 186: uint16(26969), + 187: uint16(26971), + 188: uint16(26972), + 189: uint16(26975), + }, + 23: { + 0: uint16(26977), + 1: uint16(26978), + 2: uint16(26980), + 3: uint16(26981), + 4: uint16(26983), + 5: uint16(26984), + 6: uint16(26985), + 7: uint16(26986), + 8: uint16(26988), + 9: uint16(26989), + 10: uint16(26991), + 11: uint16(26992), + 12: uint16(26994), + 13: uint16(26995), + 14: uint16(26996), + 15: uint16(26997), + 16: uint16(26998), + 17: uint16(27002), + 18: uint16(27003), + 19: uint16(27005), + 20: uint16(27006), + 21: uint16(27007), + 22: uint16(27009), + 23: uint16(27011), + 24: uint16(27013), + 25: uint16(27018), + 26: uint16(27019), + 27: uint16(27020), + 28: uint16(27022), + 29: uint16(27023), + 30: uint16(27024), + 31: uint16(27025), + 32: uint16(27026), + 33: uint16(27027), + 34: uint16(27030), + 35: uint16(27031), + 36: uint16(27033), + 37: uint16(27034), + 38: uint16(27037), + 39: uint16(27038), + 40: uint16(27039), + 41: uint16(27040), + 42: uint16(27041), + 43: uint16(27042), + 44: uint16(27043), + 45: uint16(27044), + 46: uint16(27045), + 47: uint16(27046), + 48: uint16(27049), + 49: uint16(27050), + 50: uint16(27052), + 51: uint16(27054), + 52: uint16(27055), + 53: uint16(27056), + 54: uint16(27058), + 55: uint16(27059), + 56: uint16(27061), + 57: uint16(27062), + 58: uint16(27064), + 59: uint16(27065), + 60: uint16(27066), + 61: uint16(27068), + 62: uint16(27069), + 63: uint16(27070), + 64: uint16(27071), + 65: uint16(27072), + 66: uint16(27074), + 67: uint16(27075), + 68: uint16(27076), + 69: uint16(27077), + 70: uint16(27078), + 71: uint16(27079), + 72: uint16(27080), + 73: uint16(27081), + 74: uint16(27083), + 75: uint16(27085), + 76: uint16(27087), + 77: uint16(27089), + 78: uint16(27090), + 79: uint16(27091), + 80: uint16(27093), + 81: uint16(27094), + 82: uint16(27095), + 83: uint16(27096), + 84: uint16(27097), + 85: uint16(27098), + 86: uint16(27100), + 87: uint16(27101), + 88: uint16(27102), + 89: uint16(27105), + 90: uint16(27106), + 91: uint16(27107), + 92: uint16(27108), + 93: uint16(27109), + 94: uint16(27110), + 95: uint16(27111), + 96: uint16(27112), + 97: uint16(27113), + 98: uint16(27114), + 99: uint16(27115), + 100: uint16(27116), + 101: uint16(27118), + 102: uint16(27119), + 103: uint16(27120), + 104: uint16(27121), + 105: uint16(27123), + 106: uint16(27124), + 107: uint16(27125), + 108: uint16(27126), + 109: uint16(27127), + 110: uint16(27128), + 111: uint16(27129), + 112: uint16(27130), + 113: uint16(27131), + 114: uint16(27132), + 115: uint16(27134), + 116: uint16(27136), + 117: uint16(27137), + 118: uint16(27138), + 119: uint16(27139), + 120: uint16(27140), + 121: uint16(27141), + 122: uint16(27142), + 123: uint16(27143), + 124: uint16(27144), + 125: uint16(27145), + 126: uint16(27147), + 127: uint16(27148), + 128: uint16(27149), + 129: uint16(27150), + 130: uint16(27151), + 131: uint16(27152), + 132: uint16(27153), + 133: uint16(27154), + 134: uint16(27155), + 135: uint16(27156), + 136: uint16(27157), + 137: uint16(27158), + 138: uint16(27161), + 139: uint16(27162), + 140: uint16(27163), + 141: uint16(27164), + 142: uint16(27165), + 143: uint16(27166), + 144: uint16(27168), + 145: uint16(27170), + 146: uint16(27171), + 147: uint16(27172), + 148: uint16(27173), + 149: uint16(27174), + 150: uint16(27175), + 151: uint16(27177), + 152: uint16(27179), + 153: uint16(27180), + 154: uint16(27181), + 155: uint16(27182), + 156: uint16(27184), + 157: uint16(27186), + 158: uint16(27187), + 159: uint16(27188), + 160: uint16(27190), + 161: uint16(27191), + 162: uint16(27192), + 163: uint16(27193), + 164: uint16(27194), + 165: uint16(27195), + 166: uint16(27196), + 167: uint16(27199), + 168: uint16(27200), + 169: uint16(27201), + 170: uint16(27202), + 171: uint16(27203), + 172: uint16(27205), + 173: uint16(27206), + 174: uint16(27208), + 175: uint16(27209), + 176: uint16(27210), + 177: uint16(27211), + 178: uint16(27212), + 179: uint16(27213), + 180: uint16(27214), + 181: uint16(27215), + 182: uint16(27217), + 183: uint16(27218), + 184: uint16(27219), + 185: uint16(27220), + 186: uint16(27221), + 187: uint16(27222), + 188: uint16(27223), + 189: uint16(27226), + }, + 24: { + 0: uint16(27228), + 1: uint16(27229), + 2: uint16(27230), + 3: uint16(27231), + 4: uint16(27232), + 5: uint16(27234), + 6: uint16(27235), + 7: uint16(27236), + 8: uint16(27238), + 9: uint16(27239), + 10: uint16(27240), + 11: uint16(27241), + 12: uint16(27242), + 13: uint16(27243), + 14: uint16(27244), + 15: uint16(27245), + 16: uint16(27246), + 17: uint16(27247), + 18: uint16(27248), + 19: uint16(27250), + 20: uint16(27251), + 21: uint16(27252), + 22: uint16(27253), + 23: uint16(27254), + 24: uint16(27255), + 25: uint16(27256), + 26: uint16(27258), + 27: uint16(27259), + 28: uint16(27261), + 29: uint16(27262), + 30: uint16(27263), + 31: uint16(27265), + 32: uint16(27266), + 33: uint16(27267), + 34: uint16(27269), + 35: uint16(27270), + 36: uint16(27271), + 37: uint16(27272), + 38: uint16(27273), + 39: uint16(27274), + 40: uint16(27275), + 41: uint16(27276), + 42: uint16(27277), + 43: uint16(27279), + 44: uint16(27282), + 45: uint16(27283), + 46: uint16(27284), + 47: uint16(27285), + 48: uint16(27286), + 49: uint16(27288), + 50: uint16(27289), + 51: uint16(27290), + 52: uint16(27291), + 53: uint16(27292), + 54: uint16(27293), + 55: uint16(27294), + 56: uint16(27295), + 57: uint16(27297), + 58: uint16(27298), + 59: uint16(27299), + 60: uint16(27300), + 61: uint16(27301), + 62: uint16(27302), + 63: uint16(27303), + 64: uint16(27304), + 65: uint16(27306), + 66: uint16(27309), + 67: uint16(27310), + 68: uint16(27311), + 69: uint16(27312), + 70: uint16(27313), + 71: uint16(27314), + 72: uint16(27315), + 73: uint16(27316), + 74: uint16(27317), + 75: uint16(27318), + 76: uint16(27319), + 77: uint16(27320), + 78: uint16(27321), + 79: uint16(27322), + 80: uint16(27323), + 81: uint16(27324), + 82: uint16(27325), + 83: uint16(27326), + 84: uint16(27327), + 85: uint16(27328), + 86: uint16(27329), + 87: uint16(27330), + 88: uint16(27331), + 89: uint16(27332), + 90: uint16(27333), + 91: uint16(27334), + 92: uint16(27335), + 93: uint16(27336), + 94: uint16(27337), + 95: uint16(27338), + 96: uint16(27339), + 97: uint16(27340), + 98: uint16(27341), + 99: uint16(27342), + 100: uint16(27343), + 101: uint16(27344), + 102: uint16(27345), + 103: uint16(27346), + 104: uint16(27347), + 105: uint16(27348), + 106: uint16(27349), + 107: uint16(27350), + 108: uint16(27351), + 109: uint16(27352), + 110: uint16(27353), + 111: uint16(27354), + 112: uint16(27355), + 113: uint16(27356), + 114: uint16(27357), + 115: uint16(27358), + 116: uint16(27359), + 117: uint16(27360), + 118: uint16(27361), + 119: uint16(27362), + 120: uint16(27363), + 121: uint16(27364), + 122: uint16(27365), + 123: uint16(27366), + 124: uint16(27367), + 125: uint16(27368), + 126: uint16(27369), + 127: uint16(27370), + 128: uint16(27371), + 129: uint16(27372), + 130: uint16(27373), + 131: uint16(27374), + 132: uint16(27375), + 133: uint16(27376), + 134: uint16(27377), + 135: uint16(27378), + 136: uint16(27379), + 137: uint16(27380), + 138: uint16(27381), + 139: uint16(27382), + 140: uint16(27383), + 141: uint16(27384), + 142: uint16(27385), + 143: uint16(27386), + 144: uint16(27387), + 145: uint16(27388), + 146: uint16(27389), + 147: uint16(27390), + 148: uint16(27391), + 149: uint16(27392), + 150: uint16(27393), + 151: uint16(27394), + 152: uint16(27395), + 153: uint16(27396), + 154: uint16(27397), + 155: uint16(27398), + 156: uint16(27399), + 157: uint16(27400), + 158: uint16(27401), + 159: uint16(27402), + 160: uint16(27403), + 161: uint16(27404), + 162: uint16(27405), + 163: uint16(27406), + 164: uint16(27407), + 165: uint16(27408), + 166: uint16(27409), + 167: uint16(27410), + 168: uint16(27411), + 169: uint16(27412), + 170: uint16(27413), + 171: uint16(27414), + 172: uint16(27415), + 173: uint16(27416), + 174: uint16(27417), + 175: uint16(27418), + 176: uint16(27419), + 177: uint16(27420), + 178: uint16(27421), + 179: uint16(27422), + 180: uint16(27423), + 181: uint16(27429), + 182: uint16(27430), + 183: uint16(27432), + 184: uint16(27433), + 185: uint16(27434), + 186: uint16(27435), + 187: uint16(27436), + 188: uint16(27437), + 189: uint16(27438), + }, + 25: { + 0: uint16(27439), + 1: uint16(27440), + 2: uint16(27441), + 3: uint16(27443), + 4: uint16(27444), + 5: uint16(27445), + 6: uint16(27446), + 7: uint16(27448), + 8: uint16(27451), + 9: uint16(27452), + 10: uint16(27453), + 11: uint16(27455), + 12: uint16(27456), + 13: uint16(27457), + 14: uint16(27458), + 15: uint16(27460), + 16: uint16(27461), + 17: uint16(27464), + 18: uint16(27466), + 19: uint16(27467), + 20: uint16(27469), + 21: uint16(27470), + 22: uint16(27471), + 23: uint16(27472), + 24: uint16(27473), + 25: uint16(27474), + 26: uint16(27475), + 27: uint16(27476), + 28: uint16(27477), + 29: uint16(27478), + 30: uint16(27479), + 31: uint16(27480), + 32: uint16(27482), + 33: uint16(27483), + 34: uint16(27484), + 35: uint16(27485), + 36: uint16(27486), + 37: uint16(27487), + 38: uint16(27488), + 39: uint16(27489), + 40: uint16(27496), + 41: uint16(27497), + 42: uint16(27499), + 43: uint16(27500), + 44: uint16(27501), + 45: uint16(27502), + 46: uint16(27503), + 47: uint16(27504), + 48: uint16(27505), + 49: uint16(27506), + 50: uint16(27507), + 51: uint16(27508), + 52: uint16(27509), + 53: uint16(27510), + 54: uint16(27511), + 55: uint16(27512), + 56: uint16(27514), + 57: uint16(27517), + 58: uint16(27518), + 59: uint16(27519), + 60: uint16(27520), + 61: uint16(27525), + 62: uint16(27528), + 63: uint16(27532), + 64: uint16(27534), + 65: uint16(27535), + 66: uint16(27536), + 67: uint16(27537), + 68: uint16(27540), + 69: uint16(27541), + 70: uint16(27543), + 71: uint16(27544), + 72: uint16(27545), + 73: uint16(27548), + 74: uint16(27549), + 75: uint16(27550), + 76: uint16(27551), + 77: uint16(27552), + 78: uint16(27554), + 79: uint16(27555), + 80: uint16(27556), + 81: uint16(27557), + 82: uint16(27558), + 83: uint16(27559), + 84: uint16(27560), + 85: uint16(27561), + 86: uint16(27563), + 87: uint16(27564), + 88: uint16(27565), + 89: uint16(27566), + 90: uint16(27567), + 91: uint16(27568), + 92: uint16(27569), + 93: uint16(27570), + 94: uint16(27574), + 95: uint16(27576), + 96: uint16(27577), + 97: uint16(27578), + 98: uint16(27579), + 99: uint16(27580), + 100: uint16(27581), + 101: uint16(27582), + 102: uint16(27584), + 103: uint16(27587), + 104: uint16(27588), + 105: uint16(27590), + 106: uint16(27591), + 107: uint16(27592), + 108: uint16(27593), + 109: uint16(27594), + 110: uint16(27596), + 111: uint16(27598), + 112: uint16(27600), + 113: uint16(27601), + 114: uint16(27608), + 115: uint16(27610), + 116: uint16(27612), + 117: uint16(27613), + 118: uint16(27614), + 119: uint16(27615), + 120: uint16(27616), + 121: uint16(27618), + 122: uint16(27619), + 123: uint16(27620), + 124: uint16(27621), + 125: uint16(27622), + 126: uint16(27623), + 127: uint16(27624), + 128: uint16(27625), + 129: uint16(27628), + 130: uint16(27629), + 131: uint16(27630), + 132: uint16(27632), + 133: uint16(27633), + 134: uint16(27634), + 135: uint16(27636), + 136: uint16(27638), + 137: uint16(27639), + 138: uint16(27640), + 139: uint16(27642), + 140: uint16(27643), + 141: uint16(27644), + 142: uint16(27646), + 143: uint16(27647), + 144: uint16(27648), + 145: uint16(27649), + 146: uint16(27650), + 147: uint16(27651), + 148: uint16(27652), + 149: uint16(27656), + 150: uint16(27657), + 151: uint16(27658), + 152: uint16(27659), + 153: uint16(27660), + 154: uint16(27662), + 155: uint16(27666), + 156: uint16(27671), + 157: uint16(27676), + 158: uint16(27677), + 159: uint16(27678), + 160: uint16(27680), + 161: uint16(27683), + 162: uint16(27685), + 163: uint16(27691), + 164: uint16(27692), + 165: uint16(27693), + 166: uint16(27697), + 167: uint16(27699), + 168: uint16(27702), + 169: uint16(27703), + 170: uint16(27705), + 171: uint16(27706), + 172: uint16(27707), + 173: uint16(27708), + 174: uint16(27710), + 175: uint16(27711), + 176: uint16(27715), + 177: uint16(27716), + 178: uint16(27717), + 179: uint16(27720), + 180: uint16(27723), + 181: uint16(27724), + 182: uint16(27725), + 183: uint16(27726), + 184: uint16(27727), + 185: uint16(27729), + 186: uint16(27730), + 187: uint16(27731), + 188: uint16(27734), + 189: uint16(27736), + }, + 26: { + 0: uint16(27737), + 1: uint16(27738), + 2: uint16(27746), + 3: uint16(27747), + 4: uint16(27749), + 5: uint16(27750), + 6: uint16(27751), + 7: uint16(27755), + 8: uint16(27756), + 9: uint16(27757), + 10: uint16(27758), + 11: uint16(27759), + 12: uint16(27761), + 13: uint16(27763), + 14: uint16(27765), + 15: uint16(27767), + 16: uint16(27768), + 17: uint16(27770), + 18: uint16(27771), + 19: uint16(27772), + 20: uint16(27775), + 21: uint16(27776), + 22: uint16(27780), + 23: uint16(27783), + 24: uint16(27786), + 25: uint16(27787), + 26: uint16(27789), + 27: uint16(27790), + 28: uint16(27793), + 29: uint16(27794), + 30: uint16(27797), + 31: uint16(27798), + 32: uint16(27799), + 33: uint16(27800), + 34: uint16(27802), + 35: uint16(27804), + 36: uint16(27805), + 37: uint16(27806), + 38: uint16(27808), + 39: uint16(27810), + 40: uint16(27816), + 41: uint16(27820), + 42: uint16(27823), + 43: uint16(27824), + 44: uint16(27828), + 45: uint16(27829), + 46: uint16(27830), + 47: uint16(27831), + 48: uint16(27834), + 49: uint16(27840), + 50: uint16(27841), + 51: uint16(27842), + 52: uint16(27843), + 53: uint16(27846), + 54: uint16(27847), + 55: uint16(27848), + 56: uint16(27851), + 57: uint16(27853), + 58: uint16(27854), + 59: uint16(27855), + 60: uint16(27857), + 61: uint16(27858), + 62: uint16(27864), + 63: uint16(27865), + 64: uint16(27866), + 65: uint16(27868), + 66: uint16(27869), + 67: uint16(27871), + 68: uint16(27876), + 69: uint16(27878), + 70: uint16(27879), + 71: uint16(27881), + 72: uint16(27884), + 73: uint16(27885), + 74: uint16(27890), + 75: uint16(27892), + 76: uint16(27897), + 77: uint16(27903), + 78: uint16(27904), + 79: uint16(27906), + 80: uint16(27907), + 81: uint16(27909), + 82: uint16(27910), + 83: uint16(27912), + 84: uint16(27913), + 85: uint16(27914), + 86: uint16(27917), + 87: uint16(27919), + 88: uint16(27920), + 89: uint16(27921), + 90: uint16(27923), + 91: uint16(27924), + 92: uint16(27925), + 93: uint16(27926), + 94: uint16(27928), + 95: uint16(27932), + 96: uint16(27933), + 97: uint16(27935), + 98: uint16(27936), + 99: uint16(27937), + 100: uint16(27938), + 101: uint16(27939), + 102: uint16(27940), + 103: uint16(27942), + 104: uint16(27944), + 105: uint16(27945), + 106: uint16(27948), + 107: uint16(27949), + 108: uint16(27951), + 109: uint16(27952), + 110: uint16(27956), + 111: uint16(27958), + 112: uint16(27959), + 113: uint16(27960), + 114: uint16(27962), + 115: uint16(27967), + 116: uint16(27968), + 117: uint16(27970), + 118: uint16(27972), + 119: uint16(27977), + 120: uint16(27980), + 121: uint16(27984), + 122: uint16(27989), + 123: uint16(27990), + 124: uint16(27991), + 125: uint16(27992), + 126: uint16(27995), + 127: uint16(27997), + 128: uint16(27999), + 129: uint16(28001), + 130: uint16(28002), + 131: uint16(28004), + 132: uint16(28005), + 133: uint16(28007), + 134: uint16(28008), + 135: uint16(28011), + 136: uint16(28012), + 137: uint16(28013), + 138: uint16(28016), + 139: uint16(28017), + 140: uint16(28018), + 141: uint16(28019), + 142: uint16(28021), + 143: uint16(28022), + 144: uint16(28025), + 145: uint16(28026), + 146: uint16(28027), + 147: uint16(28029), + 148: uint16(28030), + 149: uint16(28031), + 150: uint16(28032), + 151: uint16(28033), + 152: uint16(28035), + 153: uint16(28036), + 154: uint16(28038), + 155: uint16(28039), + 156: uint16(28042), + 157: uint16(28043), + 158: uint16(28045), + 159: uint16(28047), + 160: uint16(28048), + 161: uint16(28050), + 162: uint16(28054), + 163: uint16(28055), + 164: uint16(28056), + 165: uint16(28057), + 166: uint16(28058), + 167: uint16(28060), + 168: uint16(28066), + 169: uint16(28069), + 170: uint16(28076), + 171: uint16(28077), + 172: uint16(28080), + 173: uint16(28081), + 174: uint16(28083), + 175: uint16(28084), + 176: uint16(28086), + 177: uint16(28087), + 178: uint16(28089), + 179: uint16(28090), + 180: uint16(28091), + 181: uint16(28092), + 182: uint16(28093), + 183: uint16(28094), + 184: uint16(28097), + 185: uint16(28098), + 186: uint16(28099), + 187: uint16(28104), + 188: uint16(28105), + 189: uint16(28106), + }, + 27: { + 0: uint16(28109), + 1: uint16(28110), + 2: uint16(28111), + 3: uint16(28112), + 4: uint16(28114), + 5: uint16(28115), + 6: uint16(28116), + 7: uint16(28117), + 8: uint16(28119), + 9: uint16(28122), + 10: uint16(28123), + 11: uint16(28124), + 12: uint16(28127), + 13: uint16(28130), + 14: uint16(28131), + 15: uint16(28133), + 16: uint16(28135), + 17: uint16(28136), + 18: uint16(28137), + 19: uint16(28138), + 20: uint16(28141), + 21: uint16(28143), + 22: uint16(28144), + 23: uint16(28146), + 24: uint16(28148), + 25: uint16(28149), + 26: uint16(28150), + 27: uint16(28152), + 28: uint16(28154), + 29: uint16(28157), + 30: uint16(28158), + 31: uint16(28159), + 32: uint16(28160), + 33: uint16(28161), + 34: uint16(28162), + 35: uint16(28163), + 36: uint16(28164), + 37: uint16(28166), + 38: uint16(28167), + 39: uint16(28168), + 40: uint16(28169), + 41: uint16(28171), + 42: uint16(28175), + 43: uint16(28178), + 44: uint16(28179), + 45: uint16(28181), + 46: uint16(28184), + 47: uint16(28185), + 48: uint16(28187), + 49: uint16(28188), + 50: uint16(28190), + 51: uint16(28191), + 52: uint16(28194), + 53: uint16(28198), + 54: uint16(28199), + 55: uint16(28200), + 56: uint16(28202), + 57: uint16(28204), + 58: uint16(28206), + 59: uint16(28208), + 60: uint16(28209), + 61: uint16(28211), + 62: uint16(28213), + 63: uint16(28214), + 64: uint16(28215), + 65: uint16(28217), + 66: uint16(28219), + 67: uint16(28220), + 68: uint16(28221), + 69: uint16(28222), + 70: uint16(28223), + 71: uint16(28224), + 72: uint16(28225), + 73: uint16(28226), + 74: uint16(28229), + 75: uint16(28230), + 76: uint16(28231), + 77: uint16(28232), + 78: uint16(28233), + 79: uint16(28234), + 80: uint16(28235), + 81: uint16(28236), + 82: uint16(28239), + 83: uint16(28240), + 84: uint16(28241), + 85: uint16(28242), + 86: uint16(28245), + 87: uint16(28247), + 88: uint16(28249), + 89: uint16(28250), + 90: uint16(28252), + 91: uint16(28253), + 92: uint16(28254), + 93: uint16(28256), + 94: uint16(28257), + 95: uint16(28258), + 96: uint16(28259), + 97: uint16(28260), + 98: uint16(28261), + 99: uint16(28262), + 100: uint16(28263), + 101: uint16(28264), + 102: uint16(28265), + 103: uint16(28266), + 104: uint16(28268), + 105: uint16(28269), + 106: uint16(28271), + 107: uint16(28272), + 108: uint16(28273), + 109: uint16(28274), + 110: uint16(28275), + 111: uint16(28276), + 112: uint16(28277), + 113: uint16(28278), + 114: uint16(28279), + 115: uint16(28280), + 116: uint16(28281), + 117: uint16(28282), + 118: uint16(28283), + 119: uint16(28284), + 120: uint16(28285), + 121: uint16(28288), + 122: uint16(28289), + 123: uint16(28290), + 124: uint16(28292), + 125: uint16(28295), + 126: uint16(28296), + 127: uint16(28298), + 128: uint16(28299), + 129: uint16(28300), + 130: uint16(28301), + 131: uint16(28302), + 132: uint16(28305), + 133: uint16(28306), + 134: uint16(28307), + 135: uint16(28308), + 136: uint16(28309), + 137: uint16(28310), + 138: uint16(28311), + 139: uint16(28313), + 140: uint16(28314), + 141: uint16(28315), + 142: uint16(28317), + 143: uint16(28318), + 144: uint16(28320), + 145: uint16(28321), + 146: uint16(28323), + 147: uint16(28324), + 148: uint16(28326), + 149: uint16(28328), + 150: uint16(28329), + 151: uint16(28331), + 152: uint16(28332), + 153: uint16(28333), + 154: uint16(28334), + 155: uint16(28336), + 156: uint16(28339), + 157: uint16(28341), + 158: uint16(28344), + 159: uint16(28345), + 160: uint16(28348), + 161: uint16(28350), + 162: uint16(28351), + 163: uint16(28352), + 164: uint16(28355), + 165: uint16(28356), + 166: uint16(28357), + 167: uint16(28358), + 168: uint16(28360), + 169: uint16(28361), + 170: uint16(28362), + 171: uint16(28364), + 172: uint16(28365), + 173: uint16(28366), + 174: uint16(28368), + 175: uint16(28370), + 176: uint16(28374), + 177: uint16(28376), + 178: uint16(28377), + 179: uint16(28379), + 180: uint16(28380), + 181: uint16(28381), + 182: uint16(28387), + 183: uint16(28391), + 184: uint16(28394), + 185: uint16(28395), + 186: uint16(28396), + 187: uint16(28397), + 188: uint16(28398), + 189: uint16(28399), + }, + 28: { + 0: uint16(28400), + 1: uint16(28401), + 2: uint16(28402), + 3: uint16(28403), + 4: uint16(28405), + 5: uint16(28406), + 6: uint16(28407), + 7: uint16(28408), + 8: uint16(28410), + 9: uint16(28411), + 10: uint16(28412), + 11: uint16(28413), + 12: uint16(28414), + 13: uint16(28415), + 14: uint16(28416), + 15: uint16(28417), + 16: uint16(28419), + 17: uint16(28420), + 18: uint16(28421), + 19: uint16(28423), + 20: uint16(28424), + 21: uint16(28426), + 22: uint16(28427), + 23: uint16(28428), + 24: uint16(28429), + 25: uint16(28430), + 26: uint16(28432), + 27: uint16(28433), + 28: uint16(28434), + 29: uint16(28438), + 30: uint16(28439), + 31: uint16(28440), + 32: uint16(28441), + 33: uint16(28442), + 34: uint16(28443), + 35: uint16(28444), + 36: uint16(28445), + 37: uint16(28446), + 38: uint16(28447), + 39: uint16(28449), + 40: uint16(28450), + 41: uint16(28451), + 42: uint16(28453), + 43: uint16(28454), + 44: uint16(28455), + 45: uint16(28456), + 46: uint16(28460), + 47: uint16(28462), + 48: uint16(28464), + 49: uint16(28466), + 50: uint16(28468), + 51: uint16(28469), + 52: uint16(28471), + 53: uint16(28472), + 54: uint16(28473), + 55: uint16(28474), + 56: uint16(28475), + 57: uint16(28476), + 58: uint16(28477), + 59: uint16(28479), + 60: uint16(28480), + 61: uint16(28481), + 62: uint16(28482), + 63: uint16(28483), + 64: uint16(28484), + 65: uint16(28485), + 66: uint16(28488), + 67: uint16(28489), + 68: uint16(28490), + 69: uint16(28492), + 70: uint16(28494), + 71: uint16(28495), + 72: uint16(28496), + 73: uint16(28497), + 74: uint16(28498), + 75: uint16(28499), + 76: uint16(28500), + 77: uint16(28501), + 78: uint16(28502), + 79: uint16(28503), + 80: uint16(28505), + 81: uint16(28506), + 82: uint16(28507), + 83: uint16(28509), + 84: uint16(28511), + 85: uint16(28512), + 86: uint16(28513), + 87: uint16(28515), + 88: uint16(28516), + 89: uint16(28517), + 90: uint16(28519), + 91: uint16(28520), + 92: uint16(28521), + 93: uint16(28522), + 94: uint16(28523), + 95: uint16(28524), + 96: uint16(28527), + 97: uint16(28528), + 98: uint16(28529), + 99: uint16(28531), + 100: uint16(28533), + 101: uint16(28534), + 102: uint16(28535), + 103: uint16(28537), + 104: uint16(28539), + 105: uint16(28541), + 106: uint16(28542), + 107: uint16(28543), + 108: uint16(28544), + 109: uint16(28545), + 110: uint16(28546), + 111: uint16(28547), + 112: uint16(28549), + 113: uint16(28550), + 114: uint16(28551), + 115: uint16(28554), + 116: uint16(28555), + 117: uint16(28559), + 118: uint16(28560), + 119: uint16(28561), + 120: uint16(28562), + 121: uint16(28563), + 122: uint16(28564), + 123: uint16(28565), + 124: uint16(28566), + 125: uint16(28567), + 126: uint16(28568), + 127: uint16(28569), + 128: uint16(28570), + 129: uint16(28571), + 130: uint16(28573), + 131: uint16(28574), + 132: uint16(28575), + 133: uint16(28576), + 134: uint16(28578), + 135: uint16(28579), + 136: uint16(28580), + 137: uint16(28581), + 138: uint16(28582), + 139: uint16(28584), + 140: uint16(28585), + 141: uint16(28586), + 142: uint16(28587), + 143: uint16(28588), + 144: uint16(28589), + 145: uint16(28590), + 146: uint16(28591), + 147: uint16(28592), + 148: uint16(28593), + 149: uint16(28594), + 150: uint16(28596), + 151: uint16(28597), + 152: uint16(28599), + 153: uint16(28600), + 154: uint16(28602), + 155: uint16(28603), + 156: uint16(28604), + 157: uint16(28605), + 158: uint16(28606), + 159: uint16(28607), + 160: uint16(28609), + 161: uint16(28611), + 162: uint16(28612), + 163: uint16(28613), + 164: uint16(28614), + 165: uint16(28615), + 166: uint16(28616), + 167: uint16(28618), + 168: uint16(28619), + 169: uint16(28620), + 170: uint16(28621), + 171: uint16(28622), + 172: uint16(28623), + 173: uint16(28624), + 174: uint16(28627), + 175: uint16(28628), + 176: uint16(28629), + 177: uint16(28630), + 178: uint16(28631), + 179: uint16(28632), + 180: uint16(28633), + 181: uint16(28634), + 182: uint16(28635), + 183: uint16(28636), + 184: uint16(28637), + 185: uint16(28639), + 186: uint16(28642), + 187: uint16(28643), + 188: uint16(28644), + 189: uint16(28645), + }, + 29: { + 0: uint16(28646), + 1: uint16(28647), + 2: uint16(28648), + 3: uint16(28649), + 4: uint16(28650), + 5: uint16(28651), + 6: uint16(28652), + 7: uint16(28653), + 8: uint16(28656), + 9: uint16(28657), + 10: uint16(28658), + 11: uint16(28659), + 12: uint16(28660), + 13: uint16(28661), + 14: uint16(28662), + 15: uint16(28663), + 16: uint16(28664), + 17: uint16(28665), + 18: uint16(28666), + 19: uint16(28667), + 20: uint16(28668), + 21: uint16(28669), + 22: uint16(28670), + 23: uint16(28671), + 24: uint16(28672), + 25: uint16(28673), + 26: uint16(28674), + 27: uint16(28675), + 28: uint16(28676), + 29: uint16(28677), + 30: uint16(28678), + 31: uint16(28679), + 32: uint16(28680), + 33: uint16(28681), + 34: uint16(28682), + 35: uint16(28683), + 36: uint16(28684), + 37: uint16(28685), + 38: uint16(28686), + 39: uint16(28687), + 40: uint16(28688), + 41: uint16(28690), + 42: uint16(28691), + 43: uint16(28692), + 44: uint16(28693), + 45: uint16(28694), + 46: uint16(28695), + 47: uint16(28696), + 48: uint16(28697), + 49: uint16(28700), + 50: uint16(28701), + 51: uint16(28702), + 52: uint16(28703), + 53: uint16(28704), + 54: uint16(28705), + 55: uint16(28706), + 56: uint16(28708), + 57: uint16(28709), + 58: uint16(28710), + 59: uint16(28711), + 60: uint16(28712), + 61: uint16(28713), + 62: uint16(28714), + 63: uint16(28715), + 64: uint16(28716), + 65: uint16(28717), + 66: uint16(28718), + 67: uint16(28719), + 68: uint16(28720), + 69: uint16(28721), + 70: uint16(28722), + 71: uint16(28723), + 72: uint16(28724), + 73: uint16(28726), + 74: uint16(28727), + 75: uint16(28728), + 76: uint16(28730), + 77: uint16(28731), + 78: uint16(28732), + 79: uint16(28733), + 80: uint16(28734), + 81: uint16(28735), + 82: uint16(28736), + 83: uint16(28737), + 84: uint16(28738), + 85: uint16(28739), + 86: uint16(28740), + 87: uint16(28741), + 88: uint16(28742), + 89: uint16(28743), + 90: uint16(28744), + 91: uint16(28745), + 92: uint16(28746), + 93: uint16(28747), + 94: uint16(28749), + 95: uint16(28750), + 96: uint16(28752), + 97: uint16(28753), + 98: uint16(28754), + 99: uint16(28755), + 100: uint16(28756), + 101: uint16(28757), + 102: uint16(28758), + 103: uint16(28759), + 104: uint16(28760), + 105: uint16(28761), + 106: uint16(28762), + 107: uint16(28763), + 108: uint16(28764), + 109: uint16(28765), + 110: uint16(28767), + 111: uint16(28768), + 112: uint16(28769), + 113: uint16(28770), + 114: uint16(28771), + 115: uint16(28772), + 116: uint16(28773), + 117: uint16(28774), + 118: uint16(28775), + 119: uint16(28776), + 120: uint16(28777), + 121: uint16(28778), + 122: uint16(28782), + 123: uint16(28785), + 124: uint16(28786), + 125: uint16(28787), + 126: uint16(28788), + 127: uint16(28791), + 128: uint16(28793), + 129: uint16(28794), + 130: uint16(28795), + 131: uint16(28797), + 132: uint16(28801), + 133: uint16(28802), + 134: uint16(28803), + 135: uint16(28804), + 136: uint16(28806), + 137: uint16(28807), + 138: uint16(28808), + 139: uint16(28811), + 140: uint16(28812), + 141: uint16(28813), + 142: uint16(28815), + 143: uint16(28816), + 144: uint16(28817), + 145: uint16(28819), + 146: uint16(28823), + 147: uint16(28824), + 148: uint16(28826), + 149: uint16(28827), + 150: uint16(28830), + 151: uint16(28831), + 152: uint16(28832), + 153: uint16(28833), + 154: uint16(28834), + 155: uint16(28835), + 156: uint16(28836), + 157: uint16(28837), + 158: uint16(28838), + 159: uint16(28839), + 160: uint16(28840), + 161: uint16(28841), + 162: uint16(28842), + 163: uint16(28848), + 164: uint16(28850), + 165: uint16(28852), + 166: uint16(28853), + 167: uint16(28854), + 168: uint16(28858), + 169: uint16(28862), + 170: uint16(28863), + 171: uint16(28868), + 172: uint16(28869), + 173: uint16(28870), + 174: uint16(28871), + 175: uint16(28873), + 176: uint16(28875), + 177: uint16(28876), + 178: uint16(28877), + 179: uint16(28878), + 180: uint16(28879), + 181: uint16(28880), + 182: uint16(28881), + 183: uint16(28882), + 184: uint16(28883), + 185: uint16(28884), + 186: uint16(28885), + 187: uint16(28886), + 188: uint16(28887), + 189: uint16(28890), + }, + 30: { + 0: uint16(28892), + 1: uint16(28893), + 2: uint16(28894), + 3: uint16(28896), + 4: uint16(28897), + 5: uint16(28898), + 6: uint16(28899), + 7: uint16(28901), + 8: uint16(28906), + 9: uint16(28910), + 10: uint16(28912), + 11: uint16(28913), + 12: uint16(28914), + 13: uint16(28915), + 14: uint16(28916), + 15: uint16(28917), + 16: uint16(28918), + 17: uint16(28920), + 18: uint16(28922), + 19: uint16(28923), + 20: uint16(28924), + 21: uint16(28926), + 22: uint16(28927), + 23: uint16(28928), + 24: uint16(28929), + 25: uint16(28930), + 26: uint16(28931), + 27: uint16(28932), + 28: uint16(28933), + 29: uint16(28934), + 30: uint16(28935), + 31: uint16(28936), + 32: uint16(28939), + 33: uint16(28940), + 34: uint16(28941), + 35: uint16(28942), + 36: uint16(28943), + 37: uint16(28945), + 38: uint16(28946), + 39: uint16(28948), + 40: uint16(28951), + 41: uint16(28955), + 42: uint16(28956), + 43: uint16(28957), + 44: uint16(28958), + 45: uint16(28959), + 46: uint16(28960), + 47: uint16(28961), + 48: uint16(28962), + 49: uint16(28963), + 50: uint16(28964), + 51: uint16(28965), + 52: uint16(28967), + 53: uint16(28968), + 54: uint16(28969), + 55: uint16(28970), + 56: uint16(28971), + 57: uint16(28972), + 58: uint16(28973), + 59: uint16(28974), + 60: uint16(28978), + 61: uint16(28979), + 62: uint16(28980), + 63: uint16(28981), + 64: uint16(28983), + 65: uint16(28984), + 66: uint16(28985), + 67: uint16(28986), + 68: uint16(28987), + 69: uint16(28988), + 70: uint16(28989), + 71: uint16(28990), + 72: uint16(28991), + 73: uint16(28992), + 74: uint16(28993), + 75: uint16(28994), + 76: uint16(28995), + 77: uint16(28996), + 78: uint16(28998), + 79: uint16(28999), + 80: uint16(29000), + 81: uint16(29001), + 82: uint16(29003), + 83: uint16(29005), + 84: uint16(29007), + 85: uint16(29008), + 86: uint16(29009), + 87: uint16(29010), + 88: uint16(29011), + 89: uint16(29012), + 90: uint16(29013), + 91: uint16(29014), + 92: uint16(29015), + 93: uint16(29016), + 94: uint16(29017), + 95: uint16(29018), + 96: uint16(29019), + 97: uint16(29021), + 98: uint16(29023), + 99: uint16(29024), + 100: uint16(29025), + 101: uint16(29026), + 102: uint16(29027), + 103: uint16(29029), + 104: uint16(29033), + 105: uint16(29034), + 106: uint16(29035), + 107: uint16(29036), + 108: uint16(29037), + 109: uint16(29039), + 110: uint16(29040), + 111: uint16(29041), + 112: uint16(29044), + 113: uint16(29045), + 114: uint16(29046), + 115: uint16(29047), + 116: uint16(29049), + 117: uint16(29051), + 118: uint16(29052), + 119: uint16(29054), + 120: uint16(29055), + 121: uint16(29056), + 122: uint16(29057), + 123: uint16(29058), + 124: uint16(29059), + 125: uint16(29061), + 126: uint16(29062), + 127: uint16(29063), + 128: uint16(29064), + 129: uint16(29065), + 130: uint16(29067), + 131: uint16(29068), + 132: uint16(29069), + 133: uint16(29070), + 134: uint16(29072), + 135: uint16(29073), + 136: uint16(29074), + 137: uint16(29075), + 138: uint16(29077), + 139: uint16(29078), + 140: uint16(29079), + 141: uint16(29082), + 142: uint16(29083), + 143: uint16(29084), + 144: uint16(29085), + 145: uint16(29086), + 146: uint16(29089), + 147: uint16(29090), + 148: uint16(29091), + 149: uint16(29092), + 150: uint16(29093), + 151: uint16(29094), + 152: uint16(29095), + 153: uint16(29097), + 154: uint16(29098), + 155: uint16(29099), + 156: uint16(29101), + 157: uint16(29102), + 158: uint16(29103), + 159: uint16(29104), + 160: uint16(29105), + 161: uint16(29106), + 162: uint16(29108), + 163: uint16(29110), + 164: uint16(29111), + 165: uint16(29112), + 166: uint16(29114), + 167: uint16(29115), + 168: uint16(29116), + 169: uint16(29117), + 170: uint16(29118), + 171: uint16(29119), + 172: uint16(29120), + 173: uint16(29121), + 174: uint16(29122), + 175: uint16(29124), + 176: uint16(29125), + 177: uint16(29126), + 178: uint16(29127), + 179: uint16(29128), + 180: uint16(29129), + 181: uint16(29130), + 182: uint16(29131), + 183: uint16(29132), + 184: uint16(29133), + 185: uint16(29135), + 186: uint16(29136), + 187: uint16(29137), + 188: uint16(29138), + 189: uint16(29139), + }, + 31: { + 0: uint16(29142), + 1: uint16(29143), + 2: uint16(29144), + 3: uint16(29145), + 4: uint16(29146), + 5: uint16(29147), + 6: uint16(29148), + 7: uint16(29149), + 8: uint16(29150), + 9: uint16(29151), + 10: uint16(29153), + 11: uint16(29154), + 12: uint16(29155), + 13: uint16(29156), + 14: uint16(29158), + 15: uint16(29160), + 16: uint16(29161), + 17: uint16(29162), + 18: uint16(29163), + 19: uint16(29164), + 20: uint16(29165), + 21: uint16(29167), + 22: uint16(29168), + 23: uint16(29169), + 24: uint16(29170), + 25: uint16(29171), + 26: uint16(29172), + 27: uint16(29173), + 28: uint16(29174), + 29: uint16(29175), + 30: uint16(29176), + 31: uint16(29178), + 32: uint16(29179), + 33: uint16(29180), + 34: uint16(29181), + 35: uint16(29182), + 36: uint16(29183), + 37: uint16(29184), + 38: uint16(29185), + 39: uint16(29186), + 40: uint16(29187), + 41: uint16(29188), + 42: uint16(29189), + 43: uint16(29191), + 44: uint16(29192), + 45: uint16(29193), + 46: uint16(29194), + 47: uint16(29195), + 48: uint16(29196), + 49: uint16(29197), + 50: uint16(29198), + 51: uint16(29199), + 52: uint16(29200), + 53: uint16(29201), + 54: uint16(29202), + 55: uint16(29203), + 56: uint16(29204), + 57: uint16(29205), + 58: uint16(29206), + 59: uint16(29207), + 60: uint16(29208), + 61: uint16(29209), + 62: uint16(29210), + 63: uint16(29211), + 64: uint16(29212), + 65: uint16(29214), + 66: uint16(29215), + 67: uint16(29216), + 68: uint16(29217), + 69: uint16(29218), + 70: uint16(29219), + 71: uint16(29220), + 72: uint16(29221), + 73: uint16(29222), + 74: uint16(29223), + 75: uint16(29225), + 76: uint16(29227), + 77: uint16(29229), + 78: uint16(29230), + 79: uint16(29231), + 80: uint16(29234), + 81: uint16(29235), + 82: uint16(29236), + 83: uint16(29242), + 84: uint16(29244), + 85: uint16(29246), + 86: uint16(29248), + 87: uint16(29249), + 88: uint16(29250), + 89: uint16(29251), + 90: uint16(29252), + 91: uint16(29253), + 92: uint16(29254), + 93: uint16(29257), + 94: uint16(29258), + 95: uint16(29259), + 96: uint16(29262), + 97: uint16(29263), + 98: uint16(29264), + 99: uint16(29265), + 100: uint16(29267), + 101: uint16(29268), + 102: uint16(29269), + 103: uint16(29271), + 104: uint16(29272), + 105: uint16(29274), + 106: uint16(29276), + 107: uint16(29278), + 108: uint16(29280), + 109: uint16(29283), + 110: uint16(29284), + 111: uint16(29285), + 112: uint16(29288), + 113: uint16(29290), + 114: uint16(29291), + 115: uint16(29292), + 116: uint16(29293), + 117: uint16(29296), + 118: uint16(29297), + 119: uint16(29299), + 120: uint16(29300), + 121: uint16(29302), + 122: uint16(29303), + 123: uint16(29304), + 124: uint16(29307), + 125: uint16(29308), + 126: uint16(29309), + 127: uint16(29314), + 128: uint16(29315), + 129: uint16(29317), + 130: uint16(29318), + 131: uint16(29319), + 132: uint16(29320), + 133: uint16(29321), + 134: uint16(29324), + 135: uint16(29326), + 136: uint16(29328), + 137: uint16(29329), + 138: uint16(29331), + 139: uint16(29332), + 140: uint16(29333), + 141: uint16(29334), + 142: uint16(29335), + 143: uint16(29336), + 144: uint16(29337), + 145: uint16(29338), + 146: uint16(29339), + 147: uint16(29340), + 148: uint16(29341), + 149: uint16(29342), + 150: uint16(29344), + 151: uint16(29345), + 152: uint16(29346), + 153: uint16(29347), + 154: uint16(29348), + 155: uint16(29349), + 156: uint16(29350), + 157: uint16(29351), + 158: uint16(29352), + 159: uint16(29353), + 160: uint16(29354), + 161: uint16(29355), + 162: uint16(29358), + 163: uint16(29361), + 164: uint16(29362), + 165: uint16(29363), + 166: uint16(29365), + 167: uint16(29370), + 168: uint16(29371), + 169: uint16(29372), + 170: uint16(29373), + 171: uint16(29374), + 172: uint16(29375), + 173: uint16(29376), + 174: uint16(29381), + 175: uint16(29382), + 176: uint16(29383), + 177: uint16(29385), + 178: uint16(29386), + 179: uint16(29387), + 180: uint16(29388), + 181: uint16(29391), + 182: uint16(29393), + 183: uint16(29395), + 184: uint16(29396), + 185: uint16(29397), + 186: uint16(29398), + 187: uint16(29400), + 188: uint16(29402), + 189: uint16(29403), + }, + 32: { + 0: uint16(58566), + 1: uint16(58567), + 2: uint16(58568), + 3: uint16(58569), + 4: uint16(58570), + 5: uint16(58571), + 6: uint16(58572), + 7: uint16(58573), + 8: uint16(58574), + 9: uint16(58575), + 10: uint16(58576), + 11: uint16(58577), + 12: uint16(58578), + 13: uint16(58579), + 14: uint16(58580), + 15: uint16(58581), + 16: uint16(58582), + 17: uint16(58583), + 18: uint16(58584), + 19: uint16(58585), + 20: uint16(58586), + 21: uint16(58587), + 22: uint16(58588), + 23: uint16(58589), + 24: uint16(58590), + 25: uint16(58591), + 26: uint16(58592), + 27: uint16(58593), + 28: uint16(58594), + 29: uint16(58595), + 30: uint16(58596), + 31: uint16(58597), + 32: uint16(58598), + 33: uint16(58599), + 34: uint16(58600), + 35: uint16(58601), + 36: uint16(58602), + 37: uint16(58603), + 38: uint16(58604), + 39: uint16(58605), + 40: uint16(58606), + 41: uint16(58607), + 42: uint16(58608), + 43: uint16(58609), + 44: uint16(58610), + 45: uint16(58611), + 46: uint16(58612), + 47: uint16(58613), + 48: uint16(58614), + 49: uint16(58615), + 50: uint16(58616), + 51: uint16(58617), + 52: uint16(58618), + 53: uint16(58619), + 54: uint16(58620), + 55: uint16(58621), + 56: uint16(58622), + 57: uint16(58623), + 58: uint16(58624), + 59: uint16(58625), + 60: uint16(58626), + 61: uint16(58627), + 62: uint16(58628), + 63: uint16(58629), + 64: uint16(58630), + 65: uint16(58631), + 66: uint16(58632), + 67: uint16(58633), + 68: uint16(58634), + 69: uint16(58635), + 70: uint16(58636), + 71: uint16(58637), + 72: uint16(58638), + 73: uint16(58639), + 74: uint16(58640), + 75: uint16(58641), + 76: uint16(58642), + 77: uint16(58643), + 78: uint16(58644), + 79: uint16(58645), + 80: uint16(58646), + 81: uint16(58647), + 82: uint16(58648), + 83: uint16(58649), + 84: uint16(58650), + 85: uint16(58651), + 86: uint16(58652), + 87: uint16(58653), + 88: uint16(58654), + 89: uint16(58655), + 90: uint16(58656), + 91: uint16(58657), + 92: uint16(58658), + 93: uint16(58659), + 94: uint16(58660), + 95: uint16(58661), + 96: uint16(12288), + 97: uint16(12289), + 98: uint16(12290), + 99: uint16(183), + 100: uint16(713), + 101: uint16(711), + 102: uint16(168), + 103: uint16(12291), + 104: uint16(12293), + 105: uint16(8212), + 106: uint16(65374), + 107: uint16(8214), + 108: uint16(8230), + 109: uint16(8216), + 110: uint16(8217), + 111: uint16(8220), + 112: uint16(8221), + 113: uint16(12308), + 114: uint16(12309), + 115: uint16(12296), + 116: uint16(12297), + 117: uint16(12298), + 118: uint16(12299), + 119: uint16(12300), + 120: uint16(12301), + 121: uint16(12302), + 122: uint16(12303), + 123: uint16(12310), + 124: uint16(12311), + 125: uint16(12304), + 126: uint16(12305), + 127: uint16(177), + 128: uint16(215), + 129: uint16(247), + 130: uint16(8758), + 131: uint16(8743), + 132: uint16(8744), + 133: uint16(8721), + 134: uint16(8719), + 135: uint16(8746), + 136: uint16(8745), + 137: uint16(8712), + 138: uint16(8759), + 139: uint16(8730), + 140: uint16(8869), + 141: uint16(8741), + 142: uint16(8736), + 143: uint16(8978), + 144: uint16(8857), + 145: uint16(8747), + 146: uint16(8750), + 147: uint16(8801), + 148: uint16(8780), + 149: uint16(8776), + 150: uint16(8765), + 151: uint16(8733), + 152: uint16(8800), + 153: uint16(8814), + 154: uint16(8815), + 155: uint16(8804), + 156: uint16(8805), + 157: uint16(8734), + 158: uint16(8757), + 159: uint16(8756), + 160: uint16(9794), + 161: uint16(9792), + 162: uint16(176), + 163: uint16(8242), + 164: uint16(8243), + 165: uint16(8451), + 166: uint16(65284), + 167: uint16(164), + 168: uint16(65504), + 169: uint16(65505), + 170: uint16(8240), + 171: uint16(167), + 172: uint16(8470), + 173: uint16(9734), + 174: uint16(9733), + 175: uint16(9675), + 176: uint16(9679), + 177: uint16(9678), + 178: uint16(9671), + 179: uint16(9670), + 180: uint16(9633), + 181: uint16(9632), + 182: uint16(9651), + 183: uint16(9650), + 184: uint16(8251), + 185: uint16(8594), + 186: uint16(8592), + 187: uint16(8593), + 188: uint16(8595), + 189: uint16(12307), + }, + 33: { + 0: uint16(58662), + 1: uint16(58663), + 2: uint16(58664), + 3: uint16(58665), + 4: uint16(58666), + 5: uint16(58667), + 6: uint16(58668), + 7: uint16(58669), + 8: uint16(58670), + 9: uint16(58671), + 10: uint16(58672), + 11: uint16(58673), + 12: uint16(58674), + 13: uint16(58675), + 14: uint16(58676), + 15: uint16(58677), + 16: uint16(58678), + 17: uint16(58679), + 18: uint16(58680), + 19: uint16(58681), + 20: uint16(58682), + 21: uint16(58683), + 22: uint16(58684), + 23: uint16(58685), + 24: uint16(58686), + 25: uint16(58687), + 26: uint16(58688), + 27: uint16(58689), + 28: uint16(58690), + 29: uint16(58691), + 30: uint16(58692), + 31: uint16(58693), + 32: uint16(58694), + 33: uint16(58695), + 34: uint16(58696), + 35: uint16(58697), + 36: uint16(58698), + 37: uint16(58699), + 38: uint16(58700), + 39: uint16(58701), + 40: uint16(58702), + 41: uint16(58703), + 42: uint16(58704), + 43: uint16(58705), + 44: uint16(58706), + 45: uint16(58707), + 46: uint16(58708), + 47: uint16(58709), + 48: uint16(58710), + 49: uint16(58711), + 50: uint16(58712), + 51: uint16(58713), + 52: uint16(58714), + 53: uint16(58715), + 54: uint16(58716), + 55: uint16(58717), + 56: uint16(58718), + 57: uint16(58719), + 58: uint16(58720), + 59: uint16(58721), + 60: uint16(58722), + 61: uint16(58723), + 62: uint16(58724), + 63: uint16(58725), + 64: uint16(58726), + 65: uint16(58727), + 66: uint16(58728), + 67: uint16(58729), + 68: uint16(58730), + 69: uint16(58731), + 70: uint16(58732), + 71: uint16(58733), + 72: uint16(58734), + 73: uint16(58735), + 74: uint16(58736), + 75: uint16(58737), + 76: uint16(58738), + 77: uint16(58739), + 78: uint16(58740), + 79: uint16(58741), + 80: uint16(58742), + 81: uint16(58743), + 82: uint16(58744), + 83: uint16(58745), + 84: uint16(58746), + 85: uint16(58747), + 86: uint16(58748), + 87: uint16(58749), + 88: uint16(58750), + 89: uint16(58751), + 90: uint16(58752), + 91: uint16(58753), + 92: uint16(58754), + 93: uint16(58755), + 94: uint16(58756), + 95: uint16(58757), + 96: uint16(8560), + 97: uint16(8561), + 98: uint16(8562), + 99: uint16(8563), + 100: uint16(8564), + 101: uint16(8565), + 102: uint16(8566), + 103: uint16(8567), + 104: uint16(8568), + 105: uint16(8569), + 106: uint16(59238), + 107: uint16(59239), + 108: uint16(59240), + 109: uint16(59241), + 110: uint16(59242), + 111: uint16(59243), + 112: uint16(9352), + 113: uint16(9353), + 114: uint16(9354), + 115: uint16(9355), + 116: uint16(9356), + 117: uint16(9357), + 118: uint16(9358), + 119: uint16(9359), + 120: uint16(9360), + 121: uint16(9361), + 122: uint16(9362), + 123: uint16(9363), + 124: uint16(9364), + 125: uint16(9365), + 126: uint16(9366), + 127: uint16(9367), + 128: uint16(9368), + 129: uint16(9369), + 130: uint16(9370), + 131: uint16(9371), + 132: uint16(9332), + 133: uint16(9333), + 134: uint16(9334), + 135: uint16(9335), + 136: uint16(9336), + 137: uint16(9337), + 138: uint16(9338), + 139: uint16(9339), + 140: uint16(9340), + 141: uint16(9341), + 142: uint16(9342), + 143: uint16(9343), + 144: uint16(9344), + 145: uint16(9345), + 146: uint16(9346), + 147: uint16(9347), + 148: uint16(9348), + 149: uint16(9349), + 150: uint16(9350), + 151: uint16(9351), + 152: uint16(9312), + 153: uint16(9313), + 154: uint16(9314), + 155: uint16(9315), + 156: uint16(9316), + 157: uint16(9317), + 158: uint16(9318), + 159: uint16(9319), + 160: uint16(9320), + 161: uint16(9321), + 162: uint16(8364), + 163: uint16(59245), + 164: uint16(12832), + 165: uint16(12833), + 166: uint16(12834), + 167: uint16(12835), + 168: uint16(12836), + 169: uint16(12837), + 170: uint16(12838), + 171: uint16(12839), + 172: uint16(12840), + 173: uint16(12841), + 174: uint16(59246), + 175: uint16(59247), + 176: uint16(8544), + 177: uint16(8545), + 178: uint16(8546), + 179: uint16(8547), + 180: uint16(8548), + 181: uint16(8549), + 182: uint16(8550), + 183: uint16(8551), + 184: uint16(8552), + 185: uint16(8553), + 186: uint16(8554), + 187: uint16(8555), + 188: uint16(59248), + 189: uint16(59249), + }, + 34: { + 0: uint16(58758), + 1: uint16(58759), + 2: uint16(58760), + 3: uint16(58761), + 4: uint16(58762), + 5: uint16(58763), + 6: uint16(58764), + 7: uint16(58765), + 8: uint16(58766), + 9: uint16(58767), + 10: uint16(58768), + 11: uint16(58769), + 12: uint16(58770), + 13: uint16(58771), + 14: uint16(58772), + 15: uint16(58773), + 16: uint16(58774), + 17: uint16(58775), + 18: uint16(58776), + 19: uint16(58777), + 20: uint16(58778), + 21: uint16(58779), + 22: uint16(58780), + 23: uint16(58781), + 24: uint16(58782), + 25: uint16(58783), + 26: uint16(58784), + 27: uint16(58785), + 28: uint16(58786), + 29: uint16(58787), + 30: uint16(58788), + 31: uint16(58789), + 32: uint16(58790), + 33: uint16(58791), + 34: uint16(58792), + 35: uint16(58793), + 36: uint16(58794), + 37: uint16(58795), + 38: uint16(58796), + 39: uint16(58797), + 40: uint16(58798), + 41: uint16(58799), + 42: uint16(58800), + 43: uint16(58801), + 44: uint16(58802), + 45: uint16(58803), + 46: uint16(58804), + 47: uint16(58805), + 48: uint16(58806), + 49: uint16(58807), + 50: uint16(58808), + 51: uint16(58809), + 52: uint16(58810), + 53: uint16(58811), + 54: uint16(58812), + 55: uint16(58813), + 56: uint16(58814), + 57: uint16(58815), + 58: uint16(58816), + 59: uint16(58817), + 60: uint16(58818), + 61: uint16(58819), + 62: uint16(58820), + 63: uint16(58821), + 64: uint16(58822), + 65: uint16(58823), + 66: uint16(58824), + 67: uint16(58825), + 68: uint16(58826), + 69: uint16(58827), + 70: uint16(58828), + 71: uint16(58829), + 72: uint16(58830), + 73: uint16(58831), + 74: uint16(58832), + 75: uint16(58833), + 76: uint16(58834), + 77: uint16(58835), + 78: uint16(58836), + 79: uint16(58837), + 80: uint16(58838), + 81: uint16(58839), + 82: uint16(58840), + 83: uint16(58841), + 84: uint16(58842), + 85: uint16(58843), + 86: uint16(58844), + 87: uint16(58845), + 88: uint16(58846), + 89: uint16(58847), + 90: uint16(58848), + 91: uint16(58849), + 92: uint16(58850), + 93: uint16(58851), + 94: uint16(58852), + 95: uint16(58853), + 96: uint16(65281), + 97: uint16(65282), + 98: uint16(65283), + 99: uint16(65509), + 100: uint16(65285), + 101: uint16(65286), + 102: uint16(65287), + 103: uint16(65288), + 104: uint16(65289), + 105: uint16(65290), + 106: uint16(65291), + 107: uint16(65292), + 108: uint16(65293), + 109: uint16(65294), + 110: uint16(65295), + 111: uint16(65296), + 112: uint16(65297), + 113: uint16(65298), + 114: uint16(65299), + 115: uint16(65300), + 116: uint16(65301), + 117: uint16(65302), + 118: uint16(65303), + 119: uint16(65304), + 120: uint16(65305), + 121: uint16(65306), + 122: uint16(65307), + 123: uint16(65308), + 124: uint16(65309), + 125: uint16(65310), + 126: uint16(65311), + 127: uint16(65312), + 128: uint16(65313), + 129: uint16(65314), + 130: uint16(65315), + 131: uint16(65316), + 132: uint16(65317), + 133: uint16(65318), + 134: uint16(65319), + 135: uint16(65320), + 136: uint16(65321), + 137: uint16(65322), + 138: uint16(65323), + 139: uint16(65324), + 140: uint16(65325), + 141: uint16(65326), + 142: uint16(65327), + 143: uint16(65328), + 144: uint16(65329), + 145: uint16(65330), + 146: uint16(65331), + 147: uint16(65332), + 148: uint16(65333), + 149: uint16(65334), + 150: uint16(65335), + 151: uint16(65336), + 152: uint16(65337), + 153: uint16(65338), + 154: uint16(65339), + 155: uint16(65340), + 156: uint16(65341), + 157: uint16(65342), + 158: uint16(65343), + 159: uint16(65344), + 160: uint16(65345), + 161: uint16(65346), + 162: uint16(65347), + 163: uint16(65348), + 164: uint16(65349), + 165: uint16(65350), + 166: uint16(65351), + 167: uint16(65352), + 168: uint16(65353), + 169: uint16(65354), + 170: uint16(65355), + 171: uint16(65356), + 172: uint16(65357), + 173: uint16(65358), + 174: uint16(65359), + 175: uint16(65360), + 176: uint16(65361), + 177: uint16(65362), + 178: uint16(65363), + 179: uint16(65364), + 180: uint16(65365), + 181: uint16(65366), + 182: uint16(65367), + 183: uint16(65368), + 184: uint16(65369), + 185: uint16(65370), + 186: uint16(65371), + 187: uint16(65372), + 188: uint16(65373), + 189: uint16(65507), + }, + 35: { + 0: uint16(58854), + 1: uint16(58855), + 2: uint16(58856), + 3: uint16(58857), + 4: uint16(58858), + 5: uint16(58859), + 6: uint16(58860), + 7: uint16(58861), + 8: uint16(58862), + 9: uint16(58863), + 10: uint16(58864), + 11: uint16(58865), + 12: uint16(58866), + 13: uint16(58867), + 14: uint16(58868), + 15: uint16(58869), + 16: uint16(58870), + 17: uint16(58871), + 18: uint16(58872), + 19: uint16(58873), + 20: uint16(58874), + 21: uint16(58875), + 22: uint16(58876), + 23: uint16(58877), + 24: uint16(58878), + 25: uint16(58879), + 26: uint16(58880), + 27: uint16(58881), + 28: uint16(58882), + 29: uint16(58883), + 30: uint16(58884), + 31: uint16(58885), + 32: uint16(58886), + 33: uint16(58887), + 34: uint16(58888), + 35: uint16(58889), + 36: uint16(58890), + 37: uint16(58891), + 38: uint16(58892), + 39: uint16(58893), + 40: uint16(58894), + 41: uint16(58895), + 42: uint16(58896), + 43: uint16(58897), + 44: uint16(58898), + 45: uint16(58899), + 46: uint16(58900), + 47: uint16(58901), + 48: uint16(58902), + 49: uint16(58903), + 50: uint16(58904), + 51: uint16(58905), + 52: uint16(58906), + 53: uint16(58907), + 54: uint16(58908), + 55: uint16(58909), + 56: uint16(58910), + 57: uint16(58911), + 58: uint16(58912), + 59: uint16(58913), + 60: uint16(58914), + 61: uint16(58915), + 62: uint16(58916), + 63: uint16(58917), + 64: uint16(58918), + 65: uint16(58919), + 66: uint16(58920), + 67: uint16(58921), + 68: uint16(58922), + 69: uint16(58923), + 70: uint16(58924), + 71: uint16(58925), + 72: uint16(58926), + 73: uint16(58927), + 74: uint16(58928), + 75: uint16(58929), + 76: uint16(58930), + 77: uint16(58931), + 78: uint16(58932), + 79: uint16(58933), + 80: uint16(58934), + 81: uint16(58935), + 82: uint16(58936), + 83: uint16(58937), + 84: uint16(58938), + 85: uint16(58939), + 86: uint16(58940), + 87: uint16(58941), + 88: uint16(58942), + 89: uint16(58943), + 90: uint16(58944), + 91: uint16(58945), + 92: uint16(58946), + 93: uint16(58947), + 94: uint16(58948), + 95: uint16(58949), + 96: uint16(12353), + 97: uint16(12354), + 98: uint16(12355), + 99: uint16(12356), + 100: uint16(12357), + 101: uint16(12358), + 102: uint16(12359), + 103: uint16(12360), + 104: uint16(12361), + 105: uint16(12362), + 106: uint16(12363), + 107: uint16(12364), + 108: uint16(12365), + 109: uint16(12366), + 110: uint16(12367), + 111: uint16(12368), + 112: uint16(12369), + 113: uint16(12370), + 114: uint16(12371), + 115: uint16(12372), + 116: uint16(12373), + 117: uint16(12374), + 118: uint16(12375), + 119: uint16(12376), + 120: uint16(12377), + 121: uint16(12378), + 122: uint16(12379), + 123: uint16(12380), + 124: uint16(12381), + 125: uint16(12382), + 126: uint16(12383), + 127: uint16(12384), + 128: uint16(12385), + 129: uint16(12386), + 130: uint16(12387), + 131: uint16(12388), + 132: uint16(12389), + 133: uint16(12390), + 134: uint16(12391), + 135: uint16(12392), + 136: uint16(12393), + 137: uint16(12394), + 138: uint16(12395), + 139: uint16(12396), + 140: uint16(12397), + 141: uint16(12398), + 142: uint16(12399), + 143: uint16(12400), + 144: uint16(12401), + 145: uint16(12402), + 146: uint16(12403), + 147: uint16(12404), + 148: uint16(12405), + 149: uint16(12406), + 150: uint16(12407), + 151: uint16(12408), + 152: uint16(12409), + 153: uint16(12410), + 154: uint16(12411), + 155: uint16(12412), + 156: uint16(12413), + 157: uint16(12414), + 158: uint16(12415), + 159: uint16(12416), + 160: uint16(12417), + 161: uint16(12418), + 162: uint16(12419), + 163: uint16(12420), + 164: uint16(12421), + 165: uint16(12422), + 166: uint16(12423), + 167: uint16(12424), + 168: uint16(12425), + 169: uint16(12426), + 170: uint16(12427), + 171: uint16(12428), + 172: uint16(12429), + 173: uint16(12430), + 174: uint16(12431), + 175: uint16(12432), + 176: uint16(12433), + 177: uint16(12434), + 178: uint16(12435), + 179: uint16(59250), + 180: uint16(59251), + 181: uint16(59252), + 182: uint16(59253), + 183: uint16(59254), + 184: uint16(59255), + 185: uint16(59256), + 186: uint16(59257), + 187: uint16(59258), + 188: uint16(59259), + 189: uint16(59260), + }, + 36: { + 0: uint16(58950), + 1: uint16(58951), + 2: uint16(58952), + 3: uint16(58953), + 4: uint16(58954), + 5: uint16(58955), + 6: uint16(58956), + 7: uint16(58957), + 8: uint16(58958), + 9: uint16(58959), + 10: uint16(58960), + 11: uint16(58961), + 12: uint16(58962), + 13: uint16(58963), + 14: uint16(58964), + 15: uint16(58965), + 16: uint16(58966), + 17: uint16(58967), + 18: uint16(58968), + 19: uint16(58969), + 20: uint16(58970), + 21: uint16(58971), + 22: uint16(58972), + 23: uint16(58973), + 24: uint16(58974), + 25: uint16(58975), + 26: uint16(58976), + 27: uint16(58977), + 28: uint16(58978), + 29: uint16(58979), + 30: uint16(58980), + 31: uint16(58981), + 32: uint16(58982), + 33: uint16(58983), + 34: uint16(58984), + 35: uint16(58985), + 36: uint16(58986), + 37: uint16(58987), + 38: uint16(58988), + 39: uint16(58989), + 40: uint16(58990), + 41: uint16(58991), + 42: uint16(58992), + 43: uint16(58993), + 44: uint16(58994), + 45: uint16(58995), + 46: uint16(58996), + 47: uint16(58997), + 48: uint16(58998), + 49: uint16(58999), + 50: uint16(59000), + 51: uint16(59001), + 52: uint16(59002), + 53: uint16(59003), + 54: uint16(59004), + 55: uint16(59005), + 56: uint16(59006), + 57: uint16(59007), + 58: uint16(59008), + 59: uint16(59009), + 60: uint16(59010), + 61: uint16(59011), + 62: uint16(59012), + 63: uint16(59013), + 64: uint16(59014), + 65: uint16(59015), + 66: uint16(59016), + 67: uint16(59017), + 68: uint16(59018), + 69: uint16(59019), + 70: uint16(59020), + 71: uint16(59021), + 72: uint16(59022), + 73: uint16(59023), + 74: uint16(59024), + 75: uint16(59025), + 76: uint16(59026), + 77: uint16(59027), + 78: uint16(59028), + 79: uint16(59029), + 80: uint16(59030), + 81: uint16(59031), + 82: uint16(59032), + 83: uint16(59033), + 84: uint16(59034), + 85: uint16(59035), + 86: uint16(59036), + 87: uint16(59037), + 88: uint16(59038), + 89: uint16(59039), + 90: uint16(59040), + 91: uint16(59041), + 92: uint16(59042), + 93: uint16(59043), + 94: uint16(59044), + 95: uint16(59045), + 96: uint16(12449), + 97: uint16(12450), + 98: uint16(12451), + 99: uint16(12452), + 100: uint16(12453), + 101: uint16(12454), + 102: uint16(12455), + 103: uint16(12456), + 104: uint16(12457), + 105: uint16(12458), + 106: uint16(12459), + 107: uint16(12460), + 108: uint16(12461), + 109: uint16(12462), + 110: uint16(12463), + 111: uint16(12464), + 112: uint16(12465), + 113: uint16(12466), + 114: uint16(12467), + 115: uint16(12468), + 116: uint16(12469), + 117: uint16(12470), + 118: uint16(12471), + 119: uint16(12472), + 120: uint16(12473), + 121: uint16(12474), + 122: uint16(12475), + 123: uint16(12476), + 124: uint16(12477), + 125: uint16(12478), + 126: uint16(12479), + 127: uint16(12480), + 128: uint16(12481), + 129: uint16(12482), + 130: uint16(12483), + 131: uint16(12484), + 132: uint16(12485), + 133: uint16(12486), + 134: uint16(12487), + 135: uint16(12488), + 136: uint16(12489), + 137: uint16(12490), + 138: uint16(12491), + 139: uint16(12492), + 140: uint16(12493), + 141: uint16(12494), + 142: uint16(12495), + 143: uint16(12496), + 144: uint16(12497), + 145: uint16(12498), + 146: uint16(12499), + 147: uint16(12500), + 148: uint16(12501), + 149: uint16(12502), + 150: uint16(12503), + 151: uint16(12504), + 152: uint16(12505), + 153: uint16(12506), + 154: uint16(12507), + 155: uint16(12508), + 156: uint16(12509), + 157: uint16(12510), + 158: uint16(12511), + 159: uint16(12512), + 160: uint16(12513), + 161: uint16(12514), + 162: uint16(12515), + 163: uint16(12516), + 164: uint16(12517), + 165: uint16(12518), + 166: uint16(12519), + 167: uint16(12520), + 168: uint16(12521), + 169: uint16(12522), + 170: uint16(12523), + 171: uint16(12524), + 172: uint16(12525), + 173: uint16(12526), + 174: uint16(12527), + 175: uint16(12528), + 176: uint16(12529), + 177: uint16(12530), + 178: uint16(12531), + 179: uint16(12532), + 180: uint16(12533), + 181: uint16(12534), + 182: uint16(59261), + 183: uint16(59262), + 184: uint16(59263), + 185: uint16(59264), + 186: uint16(59265), + 187: uint16(59266), + 188: uint16(59267), + 189: uint16(59268), + }, + 37: { + 0: uint16(59046), + 1: uint16(59047), + 2: uint16(59048), + 3: uint16(59049), + 4: uint16(59050), + 5: uint16(59051), + 6: uint16(59052), + 7: uint16(59053), + 8: uint16(59054), + 9: uint16(59055), + 10: uint16(59056), + 11: uint16(59057), + 12: uint16(59058), + 13: uint16(59059), + 14: uint16(59060), + 15: uint16(59061), + 16: uint16(59062), + 17: uint16(59063), + 18: uint16(59064), + 19: uint16(59065), + 20: uint16(59066), + 21: uint16(59067), + 22: uint16(59068), + 23: uint16(59069), + 24: uint16(59070), + 25: uint16(59071), + 26: uint16(59072), + 27: uint16(59073), + 28: uint16(59074), + 29: uint16(59075), + 30: uint16(59076), + 31: uint16(59077), + 32: uint16(59078), + 33: uint16(59079), + 34: uint16(59080), + 35: uint16(59081), + 36: uint16(59082), + 37: uint16(59083), + 38: uint16(59084), + 39: uint16(59085), + 40: uint16(59086), + 41: uint16(59087), + 42: uint16(59088), + 43: uint16(59089), + 44: uint16(59090), + 45: uint16(59091), + 46: uint16(59092), + 47: uint16(59093), + 48: uint16(59094), + 49: uint16(59095), + 50: uint16(59096), + 51: uint16(59097), + 52: uint16(59098), + 53: uint16(59099), + 54: uint16(59100), + 55: uint16(59101), + 56: uint16(59102), + 57: uint16(59103), + 58: uint16(59104), + 59: uint16(59105), + 60: uint16(59106), + 61: uint16(59107), + 62: uint16(59108), + 63: uint16(59109), + 64: uint16(59110), + 65: uint16(59111), + 66: uint16(59112), + 67: uint16(59113), + 68: uint16(59114), + 69: uint16(59115), + 70: uint16(59116), + 71: uint16(59117), + 72: uint16(59118), + 73: uint16(59119), + 74: uint16(59120), + 75: uint16(59121), + 76: uint16(59122), + 77: uint16(59123), + 78: uint16(59124), + 79: uint16(59125), + 80: uint16(59126), + 81: uint16(59127), + 82: uint16(59128), + 83: uint16(59129), + 84: uint16(59130), + 85: uint16(59131), + 86: uint16(59132), + 87: uint16(59133), + 88: uint16(59134), + 89: uint16(59135), + 90: uint16(59136), + 91: uint16(59137), + 92: uint16(59138), + 93: uint16(59139), + 94: uint16(59140), + 95: uint16(59141), + 96: uint16(913), + 97: uint16(914), + 98: uint16(915), + 99: uint16(916), + 100: uint16(917), + 101: uint16(918), + 102: uint16(919), + 103: uint16(920), + 104: uint16(921), + 105: uint16(922), + 106: uint16(923), + 107: uint16(924), + 108: uint16(925), + 109: uint16(926), + 110: uint16(927), + 111: uint16(928), + 112: uint16(929), + 113: uint16(931), + 114: uint16(932), + 115: uint16(933), + 116: uint16(934), + 117: uint16(935), + 118: uint16(936), + 119: uint16(937), + 120: uint16(59269), + 121: uint16(59270), + 122: uint16(59271), + 123: uint16(59272), + 124: uint16(59273), + 125: uint16(59274), + 126: uint16(59275), + 127: uint16(59276), + 128: uint16(945), + 129: uint16(946), + 130: uint16(947), + 131: uint16(948), + 132: uint16(949), + 133: uint16(950), + 134: uint16(951), + 135: uint16(952), + 136: uint16(953), + 137: uint16(954), + 138: uint16(955), + 139: uint16(956), + 140: uint16(957), + 141: uint16(958), + 142: uint16(959), + 143: uint16(960), + 144: uint16(961), + 145: uint16(963), + 146: uint16(964), + 147: uint16(965), + 148: uint16(966), + 149: uint16(967), + 150: uint16(968), + 151: uint16(969), + 152: uint16(59277), + 153: uint16(59278), + 154: uint16(59279), + 155: uint16(59280), + 156: uint16(59281), + 157: uint16(59282), + 158: uint16(59283), + 159: uint16(65077), + 160: uint16(65078), + 161: uint16(65081), + 162: uint16(65082), + 163: uint16(65087), + 164: uint16(65088), + 165: uint16(65085), + 166: uint16(65086), + 167: uint16(65089), + 168: uint16(65090), + 169: uint16(65091), + 170: uint16(65092), + 171: uint16(59284), + 172: uint16(59285), + 173: uint16(65083), + 174: uint16(65084), + 175: uint16(65079), + 176: uint16(65080), + 177: uint16(65073), + 178: uint16(59286), + 179: uint16(65075), + 180: uint16(65076), + 181: uint16(59287), + 182: uint16(59288), + 183: uint16(59289), + 184: uint16(59290), + 185: uint16(59291), + 186: uint16(59292), + 187: uint16(59293), + 188: uint16(59294), + 189: uint16(59295), + }, + 38: { + 0: uint16(59142), + 1: uint16(59143), + 2: uint16(59144), + 3: uint16(59145), + 4: uint16(59146), + 5: uint16(59147), + 6: uint16(59148), + 7: uint16(59149), + 8: uint16(59150), + 9: uint16(59151), + 10: uint16(59152), + 11: uint16(59153), + 12: uint16(59154), + 13: uint16(59155), + 14: uint16(59156), + 15: uint16(59157), + 16: uint16(59158), + 17: uint16(59159), + 18: uint16(59160), + 19: uint16(59161), + 20: uint16(59162), + 21: uint16(59163), + 22: uint16(59164), + 23: uint16(59165), + 24: uint16(59166), + 25: uint16(59167), + 26: uint16(59168), + 27: uint16(59169), + 28: uint16(59170), + 29: uint16(59171), + 30: uint16(59172), + 31: uint16(59173), + 32: uint16(59174), + 33: uint16(59175), + 34: uint16(59176), + 35: uint16(59177), + 36: uint16(59178), + 37: uint16(59179), + 38: uint16(59180), + 39: uint16(59181), + 40: uint16(59182), + 41: uint16(59183), + 42: uint16(59184), + 43: uint16(59185), + 44: uint16(59186), + 45: uint16(59187), + 46: uint16(59188), + 47: uint16(59189), + 48: uint16(59190), + 49: uint16(59191), + 50: uint16(59192), + 51: uint16(59193), + 52: uint16(59194), + 53: uint16(59195), + 54: uint16(59196), + 55: uint16(59197), + 56: uint16(59198), + 57: uint16(59199), + 58: uint16(59200), + 59: uint16(59201), + 60: uint16(59202), + 61: uint16(59203), + 62: uint16(59204), + 63: uint16(59205), + 64: uint16(59206), + 65: uint16(59207), + 66: uint16(59208), + 67: uint16(59209), + 68: uint16(59210), + 69: uint16(59211), + 70: uint16(59212), + 71: uint16(59213), + 72: uint16(59214), + 73: uint16(59215), + 74: uint16(59216), + 75: uint16(59217), + 76: uint16(59218), + 77: uint16(59219), + 78: uint16(59220), + 79: uint16(59221), + 80: uint16(59222), + 81: uint16(59223), + 82: uint16(59224), + 83: uint16(59225), + 84: uint16(59226), + 85: uint16(59227), + 86: uint16(59228), + 87: uint16(59229), + 88: uint16(59230), + 89: uint16(59231), + 90: uint16(59232), + 91: uint16(59233), + 92: uint16(59234), + 93: uint16(59235), + 94: uint16(59236), + 95: uint16(59237), + 96: uint16(1040), + 97: uint16(1041), + 98: uint16(1042), + 99: uint16(1043), + 100: uint16(1044), + 101: uint16(1045), + 102: uint16(1025), + 103: uint16(1046), + 104: uint16(1047), + 105: uint16(1048), + 106: uint16(1049), + 107: uint16(1050), + 108: uint16(1051), + 109: uint16(1052), + 110: uint16(1053), + 111: uint16(1054), + 112: uint16(1055), + 113: uint16(1056), + 114: uint16(1057), + 115: uint16(1058), + 116: uint16(1059), + 117: uint16(1060), + 118: uint16(1061), + 119: uint16(1062), + 120: uint16(1063), + 121: uint16(1064), + 122: uint16(1065), + 123: uint16(1066), + 124: uint16(1067), + 125: uint16(1068), + 126: uint16(1069), + 127: uint16(1070), + 128: uint16(1071), + 129: uint16(59296), + 130: uint16(59297), + 131: uint16(59298), + 132: uint16(59299), + 133: uint16(59300), + 134: uint16(59301), + 135: uint16(59302), + 136: uint16(59303), + 137: uint16(59304), + 138: uint16(59305), + 139: uint16(59306), + 140: uint16(59307), + 141: uint16(59308), + 142: uint16(59309), + 143: uint16(59310), + 144: uint16(1072), + 145: uint16(1073), + 146: uint16(1074), + 147: uint16(1075), + 148: uint16(1076), + 149: uint16(1077), + 150: uint16(1105), + 151: uint16(1078), + 152: uint16(1079), + 153: uint16(1080), + 154: uint16(1081), + 155: uint16(1082), + 156: uint16(1083), + 157: uint16(1084), + 158: uint16(1085), + 159: uint16(1086), + 160: uint16(1087), + 161: uint16(1088), + 162: uint16(1089), + 163: uint16(1090), + 164: uint16(1091), + 165: uint16(1092), + 166: uint16(1093), + 167: uint16(1094), + 168: uint16(1095), + 169: uint16(1096), + 170: uint16(1097), + 171: uint16(1098), + 172: uint16(1099), + 173: uint16(1100), + 174: uint16(1101), + 175: uint16(1102), + 176: uint16(1103), + 177: uint16(59311), + 178: uint16(59312), + 179: uint16(59313), + 180: uint16(59314), + 181: uint16(59315), + 182: uint16(59316), + 183: uint16(59317), + 184: uint16(59318), + 185: uint16(59319), + 186: uint16(59320), + 187: uint16(59321), + 188: uint16(59322), + 189: uint16(59323), + }, + 39: { + 0: uint16(714), + 1: uint16(715), + 2: uint16(729), + 3: uint16(8211), + 4: uint16(8213), + 5: uint16(8229), + 6: uint16(8245), + 7: uint16(8453), + 8: uint16(8457), + 9: uint16(8598), + 10: uint16(8599), + 11: uint16(8600), + 12: uint16(8601), + 13: uint16(8725), + 14: uint16(8735), + 15: uint16(8739), + 16: uint16(8786), + 17: uint16(8806), + 18: uint16(8807), + 19: uint16(8895), + 20: uint16(9552), + 21: uint16(9553), + 22: uint16(9554), + 23: uint16(9555), + 24: uint16(9556), + 25: uint16(9557), + 26: uint16(9558), + 27: uint16(9559), + 28: uint16(9560), + 29: uint16(9561), + 30: uint16(9562), + 31: uint16(9563), + 32: uint16(9564), + 33: uint16(9565), + 34: uint16(9566), + 35: uint16(9567), + 36: uint16(9568), + 37: uint16(9569), + 38: uint16(9570), + 39: uint16(9571), + 40: uint16(9572), + 41: uint16(9573), + 42: uint16(9574), + 43: uint16(9575), + 44: uint16(9576), + 45: uint16(9577), + 46: uint16(9578), + 47: uint16(9579), + 48: uint16(9580), + 49: uint16(9581), + 50: uint16(9582), + 51: uint16(9583), + 52: uint16(9584), + 53: uint16(9585), + 54: uint16(9586), + 55: uint16(9587), + 56: uint16(9601), + 57: uint16(9602), + 58: uint16(9603), + 59: uint16(9604), + 60: uint16(9605), + 61: uint16(9606), + 62: uint16(9607), + 63: uint16(9608), + 64: uint16(9609), + 65: uint16(9610), + 66: uint16(9611), + 67: uint16(9612), + 68: uint16(9613), + 69: uint16(9614), + 70: uint16(9615), + 71: uint16(9619), + 72: uint16(9620), + 73: uint16(9621), + 74: uint16(9660), + 75: uint16(9661), + 76: uint16(9698), + 77: uint16(9699), + 78: uint16(9700), + 79: uint16(9701), + 80: uint16(9737), + 81: uint16(8853), + 82: uint16(12306), + 83: uint16(12317), + 84: uint16(12318), + 85: uint16(59324), + 86: uint16(59325), + 87: uint16(59326), + 88: uint16(59327), + 89: uint16(59328), + 90: uint16(59329), + 91: uint16(59330), + 92: uint16(59331), + 93: uint16(59332), + 94: uint16(59333), + 95: uint16(59334), + 96: uint16(257), + 97: uint16(225), + 98: uint16(462), + 99: uint16(224), + 100: uint16(275), + 101: uint16(233), + 102: uint16(283), + 103: uint16(232), + 104: uint16(299), + 105: uint16(237), + 106: uint16(464), + 107: uint16(236), + 108: uint16(333), + 109: uint16(243), + 110: uint16(466), + 111: uint16(242), + 112: uint16(363), + 113: uint16(250), + 114: uint16(468), + 115: uint16(249), + 116: uint16(470), + 117: uint16(472), + 118: uint16(474), + 119: uint16(476), + 120: uint16(252), + 121: uint16(234), + 122: uint16(593), + 123: uint16(59335), + 124: uint16(324), + 125: uint16(328), + 126: uint16(505), + 127: uint16(609), + 128: uint16(59337), + 129: uint16(59338), + 130: uint16(59339), + 131: uint16(59340), + 132: uint16(12549), + 133: uint16(12550), + 134: uint16(12551), + 135: uint16(12552), + 136: uint16(12553), + 137: uint16(12554), + 138: uint16(12555), + 139: uint16(12556), + 140: uint16(12557), + 141: uint16(12558), + 142: uint16(12559), + 143: uint16(12560), + 144: uint16(12561), + 145: uint16(12562), + 146: uint16(12563), + 147: uint16(12564), + 148: uint16(12565), + 149: uint16(12566), + 150: uint16(12567), + 151: uint16(12568), + 152: uint16(12569), + 153: uint16(12570), + 154: uint16(12571), + 155: uint16(12572), + 156: uint16(12573), + 157: uint16(12574), + 158: uint16(12575), + 159: uint16(12576), + 160: uint16(12577), + 161: uint16(12578), + 162: uint16(12579), + 163: uint16(12580), + 164: uint16(12581), + 165: uint16(12582), + 166: uint16(12583), + 167: uint16(12584), + 168: uint16(12585), + 169: uint16(59341), + 170: uint16(59342), + 171: uint16(59343), + 172: uint16(59344), + 173: uint16(59345), + 174: uint16(59346), + 175: uint16(59347), + 176: uint16(59348), + 177: uint16(59349), + 178: uint16(59350), + 179: uint16(59351), + 180: uint16(59352), + 181: uint16(59353), + 182: uint16(59354), + 183: uint16(59355), + 184: uint16(59356), + 185: uint16(59357), + 186: uint16(59358), + 187: uint16(59359), + 188: uint16(59360), + 189: uint16(59361), + }, + 40: { + 0: uint16(12321), + 1: uint16(12322), + 2: uint16(12323), + 3: uint16(12324), + 4: uint16(12325), + 5: uint16(12326), + 6: uint16(12327), + 7: uint16(12328), + 8: uint16(12329), + 9: uint16(12963), + 10: uint16(13198), + 11: uint16(13199), + 12: uint16(13212), + 13: uint16(13213), + 14: uint16(13214), + 15: uint16(13217), + 16: uint16(13252), + 17: uint16(13262), + 18: uint16(13265), + 19: uint16(13266), + 20: uint16(13269), + 21: uint16(65072), + 22: uint16(65506), + 23: uint16(65508), + 24: uint16(59362), + 25: uint16(8481), + 26: uint16(12849), + 27: uint16(59363), + 28: uint16(8208), + 29: uint16(59364), + 30: uint16(59365), + 31: uint16(59366), + 32: uint16(12540), + 33: uint16(12443), + 34: uint16(12444), + 35: uint16(12541), + 36: uint16(12542), + 37: uint16(12294), + 38: uint16(12445), + 39: uint16(12446), + 40: uint16(65097), + 41: uint16(65098), + 42: uint16(65099), + 43: uint16(65100), + 44: uint16(65101), + 45: uint16(65102), + 46: uint16(65103), + 47: uint16(65104), + 48: uint16(65105), + 49: uint16(65106), + 50: uint16(65108), + 51: uint16(65109), + 52: uint16(65110), + 53: uint16(65111), + 54: uint16(65113), + 55: uint16(65114), + 56: uint16(65115), + 57: uint16(65116), + 58: uint16(65117), + 59: uint16(65118), + 60: uint16(65119), + 61: uint16(65120), + 62: uint16(65121), + 63: uint16(65122), + 64: uint16(65123), + 65: uint16(65124), + 66: uint16(65125), + 67: uint16(65126), + 68: uint16(65128), + 69: uint16(65129), + 70: uint16(65130), + 71: uint16(65131), + 72: uint16(12350), + 73: uint16(12272), + 74: uint16(12273), + 75: uint16(12274), + 76: uint16(12275), + 77: uint16(12276), + 78: uint16(12277), + 79: uint16(12278), + 80: uint16(12279), + 81: uint16(12280), + 82: uint16(12281), + 83: uint16(12282), + 84: uint16(12283), + 85: uint16(12295), + 86: uint16(59380), + 87: uint16(59381), + 88: uint16(59382), + 89: uint16(59383), + 90: uint16(59384), + 91: uint16(59385), + 92: uint16(59386), + 93: uint16(59387), + 94: uint16(59388), + 95: uint16(59389), + 96: uint16(59390), + 97: uint16(59391), + 98: uint16(59392), + 99: uint16(9472), + 100: uint16(9473), + 101: uint16(9474), + 102: uint16(9475), + 103: uint16(9476), + 104: uint16(9477), + 105: uint16(9478), + 106: uint16(9479), + 107: uint16(9480), + 108: uint16(9481), + 109: uint16(9482), + 110: uint16(9483), + 111: uint16(9484), + 112: uint16(9485), + 113: uint16(9486), + 114: uint16(9487), + 115: uint16(9488), + 116: uint16(9489), + 117: uint16(9490), + 118: uint16(9491), + 119: uint16(9492), + 120: uint16(9493), + 121: uint16(9494), + 122: uint16(9495), + 123: uint16(9496), + 124: uint16(9497), + 125: uint16(9498), + 126: uint16(9499), + 127: uint16(9500), + 128: uint16(9501), + 129: uint16(9502), + 130: uint16(9503), + 131: uint16(9504), + 132: uint16(9505), + 133: uint16(9506), + 134: uint16(9507), + 135: uint16(9508), + 136: uint16(9509), + 137: uint16(9510), + 138: uint16(9511), + 139: uint16(9512), + 140: uint16(9513), + 141: uint16(9514), + 142: uint16(9515), + 143: uint16(9516), + 144: uint16(9517), + 145: uint16(9518), + 146: uint16(9519), + 147: uint16(9520), + 148: uint16(9521), + 149: uint16(9522), + 150: uint16(9523), + 151: uint16(9524), + 152: uint16(9525), + 153: uint16(9526), + 154: uint16(9527), + 155: uint16(9528), + 156: uint16(9529), + 157: uint16(9530), + 158: uint16(9531), + 159: uint16(9532), + 160: uint16(9533), + 161: uint16(9534), + 162: uint16(9535), + 163: uint16(9536), + 164: uint16(9537), + 165: uint16(9538), + 166: uint16(9539), + 167: uint16(9540), + 168: uint16(9541), + 169: uint16(9542), + 170: uint16(9543), + 171: uint16(9544), + 172: uint16(9545), + 173: uint16(9546), + 174: uint16(9547), + 175: uint16(59393), + 176: uint16(59394), + 177: uint16(59395), + 178: uint16(59396), + 179: uint16(59397), + 180: uint16(59398), + 181: uint16(59399), + 182: uint16(59400), + 183: uint16(59401), + 184: uint16(59402), + 185: uint16(59403), + 186: uint16(59404), + 187: uint16(59405), + 188: uint16(59406), + 189: uint16(59407), + }, + 41: { + 0: uint16(29404), + 1: uint16(29405), + 2: uint16(29407), + 3: uint16(29410), + 4: uint16(29411), + 5: uint16(29412), + 6: uint16(29413), + 7: uint16(29414), + 8: uint16(29415), + 9: uint16(29418), + 10: uint16(29419), + 11: uint16(29429), + 12: uint16(29430), + 13: uint16(29433), + 14: uint16(29437), + 15: uint16(29438), + 16: uint16(29439), + 17: uint16(29440), + 18: uint16(29442), + 19: uint16(29444), + 20: uint16(29445), + 21: uint16(29446), + 22: uint16(29447), + 23: uint16(29448), + 24: uint16(29449), + 25: uint16(29451), + 26: uint16(29452), + 27: uint16(29453), + 28: uint16(29455), + 29: uint16(29456), + 30: uint16(29457), + 31: uint16(29458), + 32: uint16(29460), + 33: uint16(29464), + 34: uint16(29465), + 35: uint16(29466), + 36: uint16(29471), + 37: uint16(29472), + 38: uint16(29475), + 39: uint16(29476), + 40: uint16(29478), + 41: uint16(29479), + 42: uint16(29480), + 43: uint16(29485), + 44: uint16(29487), + 45: uint16(29488), + 46: uint16(29490), + 47: uint16(29491), + 48: uint16(29493), + 49: uint16(29494), + 50: uint16(29498), + 51: uint16(29499), + 52: uint16(29500), + 53: uint16(29501), + 54: uint16(29504), + 55: uint16(29505), + 56: uint16(29506), + 57: uint16(29507), + 58: uint16(29508), + 59: uint16(29509), + 60: uint16(29510), + 61: uint16(29511), + 62: uint16(29512), + 63: uint16(29513), + 64: uint16(29514), + 65: uint16(29515), + 66: uint16(29516), + 67: uint16(29518), + 68: uint16(29519), + 69: uint16(29521), + 70: uint16(29523), + 71: uint16(29524), + 72: uint16(29525), + 73: uint16(29526), + 74: uint16(29528), + 75: uint16(29529), + 76: uint16(29530), + 77: uint16(29531), + 78: uint16(29532), + 79: uint16(29533), + 80: uint16(29534), + 81: uint16(29535), + 82: uint16(29537), + 83: uint16(29538), + 84: uint16(29539), + 85: uint16(29540), + 86: uint16(29541), + 87: uint16(29542), + 88: uint16(29543), + 89: uint16(29544), + 90: uint16(29545), + 91: uint16(29546), + 92: uint16(29547), + 93: uint16(29550), + 94: uint16(29552), + 95: uint16(29553), + 96: uint16(57344), + 97: uint16(57345), + 98: uint16(57346), + 99: uint16(57347), + 100: uint16(57348), + 101: uint16(57349), + 102: uint16(57350), + 103: uint16(57351), + 104: uint16(57352), + 105: uint16(57353), + 106: uint16(57354), + 107: uint16(57355), + 108: uint16(57356), + 109: uint16(57357), + 110: uint16(57358), + 111: uint16(57359), + 112: uint16(57360), + 113: uint16(57361), + 114: uint16(57362), + 115: uint16(57363), + 116: uint16(57364), + 117: uint16(57365), + 118: uint16(57366), + 119: uint16(57367), + 120: uint16(57368), + 121: uint16(57369), + 122: uint16(57370), + 123: uint16(57371), + 124: uint16(57372), + 125: uint16(57373), + 126: uint16(57374), + 127: uint16(57375), + 128: uint16(57376), + 129: uint16(57377), + 130: uint16(57378), + 131: uint16(57379), + 132: uint16(57380), + 133: uint16(57381), + 134: uint16(57382), + 135: uint16(57383), + 136: uint16(57384), + 137: uint16(57385), + 138: uint16(57386), + 139: uint16(57387), + 140: uint16(57388), + 141: uint16(57389), + 142: uint16(57390), + 143: uint16(57391), + 144: uint16(57392), + 145: uint16(57393), + 146: uint16(57394), + 147: uint16(57395), + 148: uint16(57396), + 149: uint16(57397), + 150: uint16(57398), + 151: uint16(57399), + 152: uint16(57400), + 153: uint16(57401), + 154: uint16(57402), + 155: uint16(57403), + 156: uint16(57404), + 157: uint16(57405), + 158: uint16(57406), + 159: uint16(57407), + 160: uint16(57408), + 161: uint16(57409), + 162: uint16(57410), + 163: uint16(57411), + 164: uint16(57412), + 165: uint16(57413), + 166: uint16(57414), + 167: uint16(57415), + 168: uint16(57416), + 169: uint16(57417), + 170: uint16(57418), + 171: uint16(57419), + 172: uint16(57420), + 173: uint16(57421), + 174: uint16(57422), + 175: uint16(57423), + 176: uint16(57424), + 177: uint16(57425), + 178: uint16(57426), + 179: uint16(57427), + 180: uint16(57428), + 181: uint16(57429), + 182: uint16(57430), + 183: uint16(57431), + 184: uint16(57432), + 185: uint16(57433), + 186: uint16(57434), + 187: uint16(57435), + 188: uint16(57436), + 189: uint16(57437), + }, + 42: { + 0: uint16(29554), + 1: uint16(29555), + 2: uint16(29556), + 3: uint16(29557), + 4: uint16(29558), + 5: uint16(29559), + 6: uint16(29560), + 7: uint16(29561), + 8: uint16(29562), + 9: uint16(29563), + 10: uint16(29564), + 11: uint16(29565), + 12: uint16(29567), + 13: uint16(29568), + 14: uint16(29569), + 15: uint16(29570), + 16: uint16(29571), + 17: uint16(29573), + 18: uint16(29574), + 19: uint16(29576), + 20: uint16(29578), + 21: uint16(29580), + 22: uint16(29581), + 23: uint16(29583), + 24: uint16(29584), + 25: uint16(29586), + 26: uint16(29587), + 27: uint16(29588), + 28: uint16(29589), + 29: uint16(29591), + 30: uint16(29592), + 31: uint16(29593), + 32: uint16(29594), + 33: uint16(29596), + 34: uint16(29597), + 35: uint16(29598), + 36: uint16(29600), + 37: uint16(29601), + 38: uint16(29603), + 39: uint16(29604), + 40: uint16(29605), + 41: uint16(29606), + 42: uint16(29607), + 43: uint16(29608), + 44: uint16(29610), + 45: uint16(29612), + 46: uint16(29613), + 47: uint16(29617), + 48: uint16(29620), + 49: uint16(29621), + 50: uint16(29622), + 51: uint16(29624), + 52: uint16(29625), + 53: uint16(29628), + 54: uint16(29629), + 55: uint16(29630), + 56: uint16(29631), + 57: uint16(29633), + 58: uint16(29635), + 59: uint16(29636), + 60: uint16(29637), + 61: uint16(29638), + 62: uint16(29639), + 63: uint16(29643), + 64: uint16(29644), + 65: uint16(29646), + 66: uint16(29650), + 67: uint16(29651), + 68: uint16(29652), + 69: uint16(29653), + 70: uint16(29654), + 71: uint16(29655), + 72: uint16(29656), + 73: uint16(29658), + 74: uint16(29659), + 75: uint16(29660), + 76: uint16(29661), + 77: uint16(29663), + 78: uint16(29665), + 79: uint16(29666), + 80: uint16(29667), + 81: uint16(29668), + 82: uint16(29670), + 83: uint16(29672), + 84: uint16(29674), + 85: uint16(29675), + 86: uint16(29676), + 87: uint16(29678), + 88: uint16(29679), + 89: uint16(29680), + 90: uint16(29681), + 91: uint16(29683), + 92: uint16(29684), + 93: uint16(29685), + 94: uint16(29686), + 95: uint16(29687), + 96: uint16(57438), + 97: uint16(57439), + 98: uint16(57440), + 99: uint16(57441), + 100: uint16(57442), + 101: uint16(57443), + 102: uint16(57444), + 103: uint16(57445), + 104: uint16(57446), + 105: uint16(57447), + 106: uint16(57448), + 107: uint16(57449), + 108: uint16(57450), + 109: uint16(57451), + 110: uint16(57452), + 111: uint16(57453), + 112: uint16(57454), + 113: uint16(57455), + 114: uint16(57456), + 115: uint16(57457), + 116: uint16(57458), + 117: uint16(57459), + 118: uint16(57460), + 119: uint16(57461), + 120: uint16(57462), + 121: uint16(57463), + 122: uint16(57464), + 123: uint16(57465), + 124: uint16(57466), + 125: uint16(57467), + 126: uint16(57468), + 127: uint16(57469), + 128: uint16(57470), + 129: uint16(57471), + 130: uint16(57472), + 131: uint16(57473), + 132: uint16(57474), + 133: uint16(57475), + 134: uint16(57476), + 135: uint16(57477), + 136: uint16(57478), + 137: uint16(57479), + 138: uint16(57480), + 139: uint16(57481), + 140: uint16(57482), + 141: uint16(57483), + 142: uint16(57484), + 143: uint16(57485), + 144: uint16(57486), + 145: uint16(57487), + 146: uint16(57488), + 147: uint16(57489), + 148: uint16(57490), + 149: uint16(57491), + 150: uint16(57492), + 151: uint16(57493), + 152: uint16(57494), + 153: uint16(57495), + 154: uint16(57496), + 155: uint16(57497), + 156: uint16(57498), + 157: uint16(57499), + 158: uint16(57500), + 159: uint16(57501), + 160: uint16(57502), + 161: uint16(57503), + 162: uint16(57504), + 163: uint16(57505), + 164: uint16(57506), + 165: uint16(57507), + 166: uint16(57508), + 167: uint16(57509), + 168: uint16(57510), + 169: uint16(57511), + 170: uint16(57512), + 171: uint16(57513), + 172: uint16(57514), + 173: uint16(57515), + 174: uint16(57516), + 175: uint16(57517), + 176: uint16(57518), + 177: uint16(57519), + 178: uint16(57520), + 179: uint16(57521), + 180: uint16(57522), + 181: uint16(57523), + 182: uint16(57524), + 183: uint16(57525), + 184: uint16(57526), + 185: uint16(57527), + 186: uint16(57528), + 187: uint16(57529), + 188: uint16(57530), + 189: uint16(57531), + }, + 43: { + 0: uint16(29688), + 1: uint16(29689), + 2: uint16(29690), + 3: uint16(29691), + 4: uint16(29692), + 5: uint16(29693), + 6: uint16(29694), + 7: uint16(29695), + 8: uint16(29696), + 9: uint16(29697), + 10: uint16(29698), + 11: uint16(29700), + 12: uint16(29703), + 13: uint16(29704), + 14: uint16(29707), + 15: uint16(29708), + 16: uint16(29709), + 17: uint16(29710), + 18: uint16(29713), + 19: uint16(29714), + 20: uint16(29715), + 21: uint16(29716), + 22: uint16(29717), + 23: uint16(29718), + 24: uint16(29719), + 25: uint16(29720), + 26: uint16(29721), + 27: uint16(29724), + 28: uint16(29725), + 29: uint16(29726), + 30: uint16(29727), + 31: uint16(29728), + 32: uint16(29729), + 33: uint16(29731), + 34: uint16(29732), + 35: uint16(29735), + 36: uint16(29737), + 37: uint16(29739), + 38: uint16(29741), + 39: uint16(29743), + 40: uint16(29745), + 41: uint16(29746), + 42: uint16(29751), + 43: uint16(29752), + 44: uint16(29753), + 45: uint16(29754), + 46: uint16(29755), + 47: uint16(29757), + 48: uint16(29758), + 49: uint16(29759), + 50: uint16(29760), + 51: uint16(29762), + 52: uint16(29763), + 53: uint16(29764), + 54: uint16(29765), + 55: uint16(29766), + 56: uint16(29767), + 57: uint16(29768), + 58: uint16(29769), + 59: uint16(29770), + 60: uint16(29771), + 61: uint16(29772), + 62: uint16(29773), + 63: uint16(29774), + 64: uint16(29775), + 65: uint16(29776), + 66: uint16(29777), + 67: uint16(29778), + 68: uint16(29779), + 69: uint16(29780), + 70: uint16(29782), + 71: uint16(29784), + 72: uint16(29789), + 73: uint16(29792), + 74: uint16(29793), + 75: uint16(29794), + 76: uint16(29795), + 77: uint16(29796), + 78: uint16(29797), + 79: uint16(29798), + 80: uint16(29799), + 81: uint16(29800), + 82: uint16(29801), + 83: uint16(29802), + 84: uint16(29803), + 85: uint16(29804), + 86: uint16(29806), + 87: uint16(29807), + 88: uint16(29809), + 89: uint16(29810), + 90: uint16(29811), + 91: uint16(29812), + 92: uint16(29813), + 93: uint16(29816), + 94: uint16(29817), + 95: uint16(29818), + 96: uint16(57532), + 97: uint16(57533), + 98: uint16(57534), + 99: uint16(57535), + 100: uint16(57536), + 101: uint16(57537), + 102: uint16(57538), + 103: uint16(57539), + 104: uint16(57540), + 105: uint16(57541), + 106: uint16(57542), + 107: uint16(57543), + 108: uint16(57544), + 109: uint16(57545), + 110: uint16(57546), + 111: uint16(57547), + 112: uint16(57548), + 113: uint16(57549), + 114: uint16(57550), + 115: uint16(57551), + 116: uint16(57552), + 117: uint16(57553), + 118: uint16(57554), + 119: uint16(57555), + 120: uint16(57556), + 121: uint16(57557), + 122: uint16(57558), + 123: uint16(57559), + 124: uint16(57560), + 125: uint16(57561), + 126: uint16(57562), + 127: uint16(57563), + 128: uint16(57564), + 129: uint16(57565), + 130: uint16(57566), + 131: uint16(57567), + 132: uint16(57568), + 133: uint16(57569), + 134: uint16(57570), + 135: uint16(57571), + 136: uint16(57572), + 137: uint16(57573), + 138: uint16(57574), + 139: uint16(57575), + 140: uint16(57576), + 141: uint16(57577), + 142: uint16(57578), + 143: uint16(57579), + 144: uint16(57580), + 145: uint16(57581), + 146: uint16(57582), + 147: uint16(57583), + 148: uint16(57584), + 149: uint16(57585), + 150: uint16(57586), + 151: uint16(57587), + 152: uint16(57588), + 153: uint16(57589), + 154: uint16(57590), + 155: uint16(57591), + 156: uint16(57592), + 157: uint16(57593), + 158: uint16(57594), + 159: uint16(57595), + 160: uint16(57596), + 161: uint16(57597), + 162: uint16(57598), + 163: uint16(57599), + 164: uint16(57600), + 165: uint16(57601), + 166: uint16(57602), + 167: uint16(57603), + 168: uint16(57604), + 169: uint16(57605), + 170: uint16(57606), + 171: uint16(57607), + 172: uint16(57608), + 173: uint16(57609), + 174: uint16(57610), + 175: uint16(57611), + 176: uint16(57612), + 177: uint16(57613), + 178: uint16(57614), + 179: uint16(57615), + 180: uint16(57616), + 181: uint16(57617), + 182: uint16(57618), + 183: uint16(57619), + 184: uint16(57620), + 185: uint16(57621), + 186: uint16(57622), + 187: uint16(57623), + 188: uint16(57624), + 189: uint16(57625), + }, + 44: { + 0: uint16(29819), + 1: uint16(29820), + 2: uint16(29821), + 3: uint16(29823), + 4: uint16(29826), + 5: uint16(29828), + 6: uint16(29829), + 7: uint16(29830), + 8: uint16(29832), + 9: uint16(29833), + 10: uint16(29834), + 11: uint16(29836), + 12: uint16(29837), + 13: uint16(29839), + 14: uint16(29841), + 15: uint16(29842), + 16: uint16(29843), + 17: uint16(29844), + 18: uint16(29845), + 19: uint16(29846), + 20: uint16(29847), + 21: uint16(29848), + 22: uint16(29849), + 23: uint16(29850), + 24: uint16(29851), + 25: uint16(29853), + 26: uint16(29855), + 27: uint16(29856), + 28: uint16(29857), + 29: uint16(29858), + 30: uint16(29859), + 31: uint16(29860), + 32: uint16(29861), + 33: uint16(29862), + 34: uint16(29866), + 35: uint16(29867), + 36: uint16(29868), + 37: uint16(29869), + 38: uint16(29870), + 39: uint16(29871), + 40: uint16(29872), + 41: uint16(29873), + 42: uint16(29874), + 43: uint16(29875), + 44: uint16(29876), + 45: uint16(29877), + 46: uint16(29878), + 47: uint16(29879), + 48: uint16(29880), + 49: uint16(29881), + 50: uint16(29883), + 51: uint16(29884), + 52: uint16(29885), + 53: uint16(29886), + 54: uint16(29887), + 55: uint16(29888), + 56: uint16(29889), + 57: uint16(29890), + 58: uint16(29891), + 59: uint16(29892), + 60: uint16(29893), + 61: uint16(29894), + 62: uint16(29895), + 63: uint16(29896), + 64: uint16(29897), + 65: uint16(29898), + 66: uint16(29899), + 67: uint16(29900), + 68: uint16(29901), + 69: uint16(29902), + 70: uint16(29903), + 71: uint16(29904), + 72: uint16(29905), + 73: uint16(29907), + 74: uint16(29908), + 75: uint16(29909), + 76: uint16(29910), + 77: uint16(29911), + 78: uint16(29912), + 79: uint16(29913), + 80: uint16(29914), + 81: uint16(29915), + 82: uint16(29917), + 83: uint16(29919), + 84: uint16(29921), + 85: uint16(29925), + 86: uint16(29927), + 87: uint16(29928), + 88: uint16(29929), + 89: uint16(29930), + 90: uint16(29931), + 91: uint16(29932), + 92: uint16(29933), + 93: uint16(29936), + 94: uint16(29937), + 95: uint16(29938), + 96: uint16(57626), + 97: uint16(57627), + 98: uint16(57628), + 99: uint16(57629), + 100: uint16(57630), + 101: uint16(57631), + 102: uint16(57632), + 103: uint16(57633), + 104: uint16(57634), + 105: uint16(57635), + 106: uint16(57636), + 107: uint16(57637), + 108: uint16(57638), + 109: uint16(57639), + 110: uint16(57640), + 111: uint16(57641), + 112: uint16(57642), + 113: uint16(57643), + 114: uint16(57644), + 115: uint16(57645), + 116: uint16(57646), + 117: uint16(57647), + 118: uint16(57648), + 119: uint16(57649), + 120: uint16(57650), + 121: uint16(57651), + 122: uint16(57652), + 123: uint16(57653), + 124: uint16(57654), + 125: uint16(57655), + 126: uint16(57656), + 127: uint16(57657), + 128: uint16(57658), + 129: uint16(57659), + 130: uint16(57660), + 131: uint16(57661), + 132: uint16(57662), + 133: uint16(57663), + 134: uint16(57664), + 135: uint16(57665), + 136: uint16(57666), + 137: uint16(57667), + 138: uint16(57668), + 139: uint16(57669), + 140: uint16(57670), + 141: uint16(57671), + 142: uint16(57672), + 143: uint16(57673), + 144: uint16(57674), + 145: uint16(57675), + 146: uint16(57676), + 147: uint16(57677), + 148: uint16(57678), + 149: uint16(57679), + 150: uint16(57680), + 151: uint16(57681), + 152: uint16(57682), + 153: uint16(57683), + 154: uint16(57684), + 155: uint16(57685), + 156: uint16(57686), + 157: uint16(57687), + 158: uint16(57688), + 159: uint16(57689), + 160: uint16(57690), + 161: uint16(57691), + 162: uint16(57692), + 163: uint16(57693), + 164: uint16(57694), + 165: uint16(57695), + 166: uint16(57696), + 167: uint16(57697), + 168: uint16(57698), + 169: uint16(57699), + 170: uint16(57700), + 171: uint16(57701), + 172: uint16(57702), + 173: uint16(57703), + 174: uint16(57704), + 175: uint16(57705), + 176: uint16(57706), + 177: uint16(57707), + 178: uint16(57708), + 179: uint16(57709), + 180: uint16(57710), + 181: uint16(57711), + 182: uint16(57712), + 183: uint16(57713), + 184: uint16(57714), + 185: uint16(57715), + 186: uint16(57716), + 187: uint16(57717), + 188: uint16(57718), + 189: uint16(57719), + }, + 45: { + 0: uint16(29939), + 1: uint16(29941), + 2: uint16(29944), + 3: uint16(29945), + 4: uint16(29946), + 5: uint16(29947), + 6: uint16(29948), + 7: uint16(29949), + 8: uint16(29950), + 9: uint16(29952), + 10: uint16(29953), + 11: uint16(29954), + 12: uint16(29955), + 13: uint16(29957), + 14: uint16(29958), + 15: uint16(29959), + 16: uint16(29960), + 17: uint16(29961), + 18: uint16(29962), + 19: uint16(29963), + 20: uint16(29964), + 21: uint16(29966), + 22: uint16(29968), + 23: uint16(29970), + 24: uint16(29972), + 25: uint16(29973), + 26: uint16(29974), + 27: uint16(29975), + 28: uint16(29979), + 29: uint16(29981), + 30: uint16(29982), + 31: uint16(29984), + 32: uint16(29985), + 33: uint16(29986), + 34: uint16(29987), + 35: uint16(29988), + 36: uint16(29990), + 37: uint16(29991), + 38: uint16(29994), + 39: uint16(29998), + 40: uint16(30004), + 41: uint16(30006), + 42: uint16(30009), + 43: uint16(30012), + 44: uint16(30013), + 45: uint16(30015), + 46: uint16(30017), + 47: uint16(30018), + 48: uint16(30019), + 49: uint16(30020), + 50: uint16(30022), + 51: uint16(30023), + 52: uint16(30025), + 53: uint16(30026), + 54: uint16(30029), + 55: uint16(30032), + 56: uint16(30033), + 57: uint16(30034), + 58: uint16(30035), + 59: uint16(30037), + 60: uint16(30038), + 61: uint16(30039), + 62: uint16(30040), + 63: uint16(30045), + 64: uint16(30046), + 65: uint16(30047), + 66: uint16(30048), + 67: uint16(30049), + 68: uint16(30050), + 69: uint16(30051), + 70: uint16(30052), + 71: uint16(30055), + 72: uint16(30056), + 73: uint16(30057), + 74: uint16(30059), + 75: uint16(30060), + 76: uint16(30061), + 77: uint16(30062), + 78: uint16(30063), + 79: uint16(30064), + 80: uint16(30065), + 81: uint16(30067), + 82: uint16(30069), + 83: uint16(30070), + 84: uint16(30071), + 85: uint16(30074), + 86: uint16(30075), + 87: uint16(30076), + 88: uint16(30077), + 89: uint16(30078), + 90: uint16(30080), + 91: uint16(30081), + 92: uint16(30082), + 93: uint16(30084), + 94: uint16(30085), + 95: uint16(30087), + 96: uint16(57720), + 97: uint16(57721), + 98: uint16(57722), + 99: uint16(57723), + 100: uint16(57724), + 101: uint16(57725), + 102: uint16(57726), + 103: uint16(57727), + 104: uint16(57728), + 105: uint16(57729), + 106: uint16(57730), + 107: uint16(57731), + 108: uint16(57732), + 109: uint16(57733), + 110: uint16(57734), + 111: uint16(57735), + 112: uint16(57736), + 113: uint16(57737), + 114: uint16(57738), + 115: uint16(57739), + 116: uint16(57740), + 117: uint16(57741), + 118: uint16(57742), + 119: uint16(57743), + 120: uint16(57744), + 121: uint16(57745), + 122: uint16(57746), + 123: uint16(57747), + 124: uint16(57748), + 125: uint16(57749), + 126: uint16(57750), + 127: uint16(57751), + 128: uint16(57752), + 129: uint16(57753), + 130: uint16(57754), + 131: uint16(57755), + 132: uint16(57756), + 133: uint16(57757), + 134: uint16(57758), + 135: uint16(57759), + 136: uint16(57760), + 137: uint16(57761), + 138: uint16(57762), + 139: uint16(57763), + 140: uint16(57764), + 141: uint16(57765), + 142: uint16(57766), + 143: uint16(57767), + 144: uint16(57768), + 145: uint16(57769), + 146: uint16(57770), + 147: uint16(57771), + 148: uint16(57772), + 149: uint16(57773), + 150: uint16(57774), + 151: uint16(57775), + 152: uint16(57776), + 153: uint16(57777), + 154: uint16(57778), + 155: uint16(57779), + 156: uint16(57780), + 157: uint16(57781), + 158: uint16(57782), + 159: uint16(57783), + 160: uint16(57784), + 161: uint16(57785), + 162: uint16(57786), + 163: uint16(57787), + 164: uint16(57788), + 165: uint16(57789), + 166: uint16(57790), + 167: uint16(57791), + 168: uint16(57792), + 169: uint16(57793), + 170: uint16(57794), + 171: uint16(57795), + 172: uint16(57796), + 173: uint16(57797), + 174: uint16(57798), + 175: uint16(57799), + 176: uint16(57800), + 177: uint16(57801), + 178: uint16(57802), + 179: uint16(57803), + 180: uint16(57804), + 181: uint16(57805), + 182: uint16(57806), + 183: uint16(57807), + 184: uint16(57808), + 185: uint16(57809), + 186: uint16(57810), + 187: uint16(57811), + 188: uint16(57812), + 189: uint16(57813), + }, + 46: { + 0: uint16(30088), + 1: uint16(30089), + 2: uint16(30090), + 3: uint16(30092), + 4: uint16(30093), + 5: uint16(30094), + 6: uint16(30096), + 7: uint16(30099), + 8: uint16(30101), + 9: uint16(30104), + 10: uint16(30107), + 11: uint16(30108), + 12: uint16(30110), + 13: uint16(30114), + 14: uint16(30118), + 15: uint16(30119), + 16: uint16(30120), + 17: uint16(30121), + 18: uint16(30122), + 19: uint16(30125), + 20: uint16(30134), + 21: uint16(30135), + 22: uint16(30138), + 23: uint16(30139), + 24: uint16(30143), + 25: uint16(30144), + 26: uint16(30145), + 27: uint16(30150), + 28: uint16(30155), + 29: uint16(30156), + 30: uint16(30158), + 31: uint16(30159), + 32: uint16(30160), + 33: uint16(30161), + 34: uint16(30163), + 35: uint16(30167), + 36: uint16(30169), + 37: uint16(30170), + 38: uint16(30172), + 39: uint16(30173), + 40: uint16(30175), + 41: uint16(30176), + 42: uint16(30177), + 43: uint16(30181), + 44: uint16(30185), + 45: uint16(30188), + 46: uint16(30189), + 47: uint16(30190), + 48: uint16(30191), + 49: uint16(30194), + 50: uint16(30195), + 51: uint16(30197), + 52: uint16(30198), + 53: uint16(30199), + 54: uint16(30200), + 55: uint16(30202), + 56: uint16(30203), + 57: uint16(30205), + 58: uint16(30206), + 59: uint16(30210), + 60: uint16(30212), + 61: uint16(30214), + 62: uint16(30215), + 63: uint16(30216), + 64: uint16(30217), + 65: uint16(30219), + 66: uint16(30221), + 67: uint16(30222), + 68: uint16(30223), + 69: uint16(30225), + 70: uint16(30226), + 71: uint16(30227), + 72: uint16(30228), + 73: uint16(30230), + 74: uint16(30234), + 75: uint16(30236), + 76: uint16(30237), + 77: uint16(30238), + 78: uint16(30241), + 79: uint16(30243), + 80: uint16(30247), + 81: uint16(30248), + 82: uint16(30252), + 83: uint16(30254), + 84: uint16(30255), + 85: uint16(30257), + 86: uint16(30258), + 87: uint16(30262), + 88: uint16(30263), + 89: uint16(30265), + 90: uint16(30266), + 91: uint16(30267), + 92: uint16(30269), + 93: uint16(30273), + 94: uint16(30274), + 95: uint16(30276), + 96: uint16(57814), + 97: uint16(57815), + 98: uint16(57816), + 99: uint16(57817), + 100: uint16(57818), + 101: uint16(57819), + 102: uint16(57820), + 103: uint16(57821), + 104: uint16(57822), + 105: uint16(57823), + 106: uint16(57824), + 107: uint16(57825), + 108: uint16(57826), + 109: uint16(57827), + 110: uint16(57828), + 111: uint16(57829), + 112: uint16(57830), + 113: uint16(57831), + 114: uint16(57832), + 115: uint16(57833), + 116: uint16(57834), + 117: uint16(57835), + 118: uint16(57836), + 119: uint16(57837), + 120: uint16(57838), + 121: uint16(57839), + 122: uint16(57840), + 123: uint16(57841), + 124: uint16(57842), + 125: uint16(57843), + 126: uint16(57844), + 127: uint16(57845), + 128: uint16(57846), + 129: uint16(57847), + 130: uint16(57848), + 131: uint16(57849), + 132: uint16(57850), + 133: uint16(57851), + 134: uint16(57852), + 135: uint16(57853), + 136: uint16(57854), + 137: uint16(57855), + 138: uint16(57856), + 139: uint16(57857), + 140: uint16(57858), + 141: uint16(57859), + 142: uint16(57860), + 143: uint16(57861), + 144: uint16(57862), + 145: uint16(57863), + 146: uint16(57864), + 147: uint16(57865), + 148: uint16(57866), + 149: uint16(57867), + 150: uint16(57868), + 151: uint16(57869), + 152: uint16(57870), + 153: uint16(57871), + 154: uint16(57872), + 155: uint16(57873), + 156: uint16(57874), + 157: uint16(57875), + 158: uint16(57876), + 159: uint16(57877), + 160: uint16(57878), + 161: uint16(57879), + 162: uint16(57880), + 163: uint16(57881), + 164: uint16(57882), + 165: uint16(57883), + 166: uint16(57884), + 167: uint16(57885), + 168: uint16(57886), + 169: uint16(57887), + 170: uint16(57888), + 171: uint16(57889), + 172: uint16(57890), + 173: uint16(57891), + 174: uint16(57892), + 175: uint16(57893), + 176: uint16(57894), + 177: uint16(57895), + 178: uint16(57896), + 179: uint16(57897), + 180: uint16(57898), + 181: uint16(57899), + 182: uint16(57900), + 183: uint16(57901), + 184: uint16(57902), + 185: uint16(57903), + 186: uint16(57904), + 187: uint16(57905), + 188: uint16(57906), + 189: uint16(57907), + }, + 47: { + 0: uint16(30277), + 1: uint16(30278), + 2: uint16(30279), + 3: uint16(30280), + 4: uint16(30281), + 5: uint16(30282), + 6: uint16(30283), + 7: uint16(30286), + 8: uint16(30287), + 9: uint16(30288), + 10: uint16(30289), + 11: uint16(30290), + 12: uint16(30291), + 13: uint16(30293), + 14: uint16(30295), + 15: uint16(30296), + 16: uint16(30297), + 17: uint16(30298), + 18: uint16(30299), + 19: uint16(30301), + 20: uint16(30303), + 21: uint16(30304), + 22: uint16(30305), + 23: uint16(30306), + 24: uint16(30308), + 25: uint16(30309), + 26: uint16(30310), + 27: uint16(30311), + 28: uint16(30312), + 29: uint16(30313), + 30: uint16(30314), + 31: uint16(30316), + 32: uint16(30317), + 33: uint16(30318), + 34: uint16(30320), + 35: uint16(30321), + 36: uint16(30322), + 37: uint16(30323), + 38: uint16(30324), + 39: uint16(30325), + 40: uint16(30326), + 41: uint16(30327), + 42: uint16(30329), + 43: uint16(30330), + 44: uint16(30332), + 45: uint16(30335), + 46: uint16(30336), + 47: uint16(30337), + 48: uint16(30339), + 49: uint16(30341), + 50: uint16(30345), + 51: uint16(30346), + 52: uint16(30348), + 53: uint16(30349), + 54: uint16(30351), + 55: uint16(30352), + 56: uint16(30354), + 57: uint16(30356), + 58: uint16(30357), + 59: uint16(30359), + 60: uint16(30360), + 61: uint16(30362), + 62: uint16(30363), + 63: uint16(30364), + 64: uint16(30365), + 65: uint16(30366), + 66: uint16(30367), + 67: uint16(30368), + 68: uint16(30369), + 69: uint16(30370), + 70: uint16(30371), + 71: uint16(30373), + 72: uint16(30374), + 73: uint16(30375), + 74: uint16(30376), + 75: uint16(30377), + 76: uint16(30378), + 77: uint16(30379), + 78: uint16(30380), + 79: uint16(30381), + 80: uint16(30383), + 81: uint16(30384), + 82: uint16(30387), + 83: uint16(30389), + 84: uint16(30390), + 85: uint16(30391), + 86: uint16(30392), + 87: uint16(30393), + 88: uint16(30394), + 89: uint16(30395), + 90: uint16(30396), + 91: uint16(30397), + 92: uint16(30398), + 93: uint16(30400), + 94: uint16(30401), + 95: uint16(30403), + 96: uint16(21834), + 97: uint16(38463), + 98: uint16(22467), + 99: uint16(25384), + 100: uint16(21710), + 101: uint16(21769), + 102: uint16(21696), + 103: uint16(30353), + 104: uint16(30284), + 105: uint16(34108), + 106: uint16(30702), + 107: uint16(33406), + 108: uint16(30861), + 109: uint16(29233), + 110: uint16(38552), + 111: uint16(38797), + 112: uint16(27688), + 113: uint16(23433), + 114: uint16(20474), + 115: uint16(25353), + 116: uint16(26263), + 117: uint16(23736), + 118: uint16(33018), + 119: uint16(26696), + 120: uint16(32942), + 121: uint16(26114), + 122: uint16(30414), + 123: uint16(20985), + 124: uint16(25942), + 125: uint16(29100), + 126: uint16(32753), + 127: uint16(34948), + 128: uint16(20658), + 129: uint16(22885), + 130: uint16(25034), + 131: uint16(28595), + 132: uint16(33453), + 133: uint16(25420), + 134: uint16(25170), + 135: uint16(21485), + 136: uint16(21543), + 137: uint16(31494), + 138: uint16(20843), + 139: uint16(30116), + 140: uint16(24052), + 141: uint16(25300), + 142: uint16(36299), + 143: uint16(38774), + 144: uint16(25226), + 145: uint16(32793), + 146: uint16(22365), + 147: uint16(38712), + 148: uint16(32610), + 149: uint16(29240), + 150: uint16(30333), + 151: uint16(26575), + 152: uint16(30334), + 153: uint16(25670), + 154: uint16(20336), + 155: uint16(36133), + 156: uint16(25308), + 157: uint16(31255), + 158: uint16(26001), + 159: uint16(29677), + 160: uint16(25644), + 161: uint16(25203), + 162: uint16(33324), + 163: uint16(39041), + 164: uint16(26495), + 165: uint16(29256), + 166: uint16(25198), + 167: uint16(25292), + 168: uint16(20276), + 169: uint16(29923), + 170: uint16(21322), + 171: uint16(21150), + 172: uint16(32458), + 173: uint16(37030), + 174: uint16(24110), + 175: uint16(26758), + 176: uint16(27036), + 177: uint16(33152), + 178: uint16(32465), + 179: uint16(26834), + 180: uint16(30917), + 181: uint16(34444), + 182: uint16(38225), + 183: uint16(20621), + 184: uint16(35876), + 185: uint16(33502), + 186: uint16(32990), + 187: uint16(21253), + 188: uint16(35090), + 189: uint16(21093), + }, + 48: { + 0: uint16(30404), + 1: uint16(30407), + 2: uint16(30409), + 3: uint16(30411), + 4: uint16(30412), + 5: uint16(30419), + 6: uint16(30421), + 7: uint16(30425), + 8: uint16(30426), + 9: uint16(30428), + 10: uint16(30429), + 11: uint16(30430), + 12: uint16(30432), + 13: uint16(30433), + 14: uint16(30434), + 15: uint16(30435), + 16: uint16(30436), + 17: uint16(30438), + 18: uint16(30439), + 19: uint16(30440), + 20: uint16(30441), + 21: uint16(30442), + 22: uint16(30443), + 23: uint16(30444), + 24: uint16(30445), + 25: uint16(30448), + 26: uint16(30451), + 27: uint16(30453), + 28: uint16(30454), + 29: uint16(30455), + 30: uint16(30458), + 31: uint16(30459), + 32: uint16(30461), + 33: uint16(30463), + 34: uint16(30464), + 35: uint16(30466), + 36: uint16(30467), + 37: uint16(30469), + 38: uint16(30470), + 39: uint16(30474), + 40: uint16(30476), + 41: uint16(30478), + 42: uint16(30479), + 43: uint16(30480), + 44: uint16(30481), + 45: uint16(30482), + 46: uint16(30483), + 47: uint16(30484), + 48: uint16(30485), + 49: uint16(30486), + 50: uint16(30487), + 51: uint16(30488), + 52: uint16(30491), + 53: uint16(30492), + 54: uint16(30493), + 55: uint16(30494), + 56: uint16(30497), + 57: uint16(30499), + 58: uint16(30500), + 59: uint16(30501), + 60: uint16(30503), + 61: uint16(30506), + 62: uint16(30507), + 63: uint16(30508), + 64: uint16(30510), + 65: uint16(30512), + 66: uint16(30513), + 67: uint16(30514), + 68: uint16(30515), + 69: uint16(30516), + 70: uint16(30521), + 71: uint16(30523), + 72: uint16(30525), + 73: uint16(30526), + 74: uint16(30527), + 75: uint16(30530), + 76: uint16(30532), + 77: uint16(30533), + 78: uint16(30534), + 79: uint16(30536), + 80: uint16(30537), + 81: uint16(30538), + 82: uint16(30539), + 83: uint16(30540), + 84: uint16(30541), + 85: uint16(30542), + 86: uint16(30543), + 87: uint16(30546), + 88: uint16(30547), + 89: uint16(30548), + 90: uint16(30549), + 91: uint16(30550), + 92: uint16(30551), + 93: uint16(30552), + 94: uint16(30553), + 95: uint16(30556), + 96: uint16(34180), + 97: uint16(38649), + 98: uint16(20445), + 99: uint16(22561), + 100: uint16(39281), + 101: uint16(23453), + 102: uint16(25265), + 103: uint16(25253), + 104: uint16(26292), + 105: uint16(35961), + 106: uint16(40077), + 107: uint16(29190), + 108: uint16(26479), + 109: uint16(30865), + 110: uint16(24754), + 111: uint16(21329), + 112: uint16(21271), + 113: uint16(36744), + 114: uint16(32972), + 115: uint16(36125), + 116: uint16(38049), + 117: uint16(20493), + 118: uint16(29384), + 119: uint16(22791), + 120: uint16(24811), + 121: uint16(28953), + 122: uint16(34987), + 123: uint16(22868), + 124: uint16(33519), + 125: uint16(26412), + 126: uint16(31528), + 127: uint16(23849), + 128: uint16(32503), + 129: uint16(29997), + 130: uint16(27893), + 131: uint16(36454), + 132: uint16(36856), + 133: uint16(36924), + 134: uint16(40763), + 135: uint16(27604), + 136: uint16(37145), + 137: uint16(31508), + 138: uint16(24444), + 139: uint16(30887), + 140: uint16(34006), + 141: uint16(34109), + 142: uint16(27605), + 143: uint16(27609), + 144: uint16(27606), + 145: uint16(24065), + 146: uint16(24199), + 147: uint16(30201), + 148: uint16(38381), + 149: uint16(25949), + 150: uint16(24330), + 151: uint16(24517), + 152: uint16(36767), + 153: uint16(22721), + 154: uint16(33218), + 155: uint16(36991), + 156: uint16(38491), + 157: uint16(38829), + 158: uint16(36793), + 159: uint16(32534), + 160: uint16(36140), + 161: uint16(25153), + 162: uint16(20415), + 163: uint16(21464), + 164: uint16(21342), + 165: uint16(36776), + 166: uint16(36777), + 167: uint16(36779), + 168: uint16(36941), + 169: uint16(26631), + 170: uint16(24426), + 171: uint16(33176), + 172: uint16(34920), + 173: uint16(40150), + 174: uint16(24971), + 175: uint16(21035), + 176: uint16(30250), + 177: uint16(24428), + 178: uint16(25996), + 179: uint16(28626), + 180: uint16(28392), + 181: uint16(23486), + 182: uint16(25672), + 183: uint16(20853), + 184: uint16(20912), + 185: uint16(26564), + 186: uint16(19993), + 187: uint16(31177), + 188: uint16(39292), + 189: uint16(28851), + }, + 49: { + 0: uint16(30557), + 1: uint16(30558), + 2: uint16(30559), + 3: uint16(30560), + 4: uint16(30564), + 5: uint16(30567), + 6: uint16(30569), + 7: uint16(30570), + 8: uint16(30573), + 9: uint16(30574), + 10: uint16(30575), + 11: uint16(30576), + 12: uint16(30577), + 13: uint16(30578), + 14: uint16(30579), + 15: uint16(30580), + 16: uint16(30581), + 17: uint16(30582), + 18: uint16(30583), + 19: uint16(30584), + 20: uint16(30586), + 21: uint16(30587), + 22: uint16(30588), + 23: uint16(30593), + 24: uint16(30594), + 25: uint16(30595), + 26: uint16(30598), + 27: uint16(30599), + 28: uint16(30600), + 29: uint16(30601), + 30: uint16(30602), + 31: uint16(30603), + 32: uint16(30607), + 33: uint16(30608), + 34: uint16(30611), + 35: uint16(30612), + 36: uint16(30613), + 37: uint16(30614), + 38: uint16(30615), + 39: uint16(30616), + 40: uint16(30617), + 41: uint16(30618), + 42: uint16(30619), + 43: uint16(30620), + 44: uint16(30621), + 45: uint16(30622), + 46: uint16(30625), + 47: uint16(30627), + 48: uint16(30628), + 49: uint16(30630), + 50: uint16(30632), + 51: uint16(30635), + 52: uint16(30637), + 53: uint16(30638), + 54: uint16(30639), + 55: uint16(30641), + 56: uint16(30642), + 57: uint16(30644), + 58: uint16(30646), + 59: uint16(30647), + 60: uint16(30648), + 61: uint16(30649), + 62: uint16(30650), + 63: uint16(30652), + 64: uint16(30654), + 65: uint16(30656), + 66: uint16(30657), + 67: uint16(30658), + 68: uint16(30659), + 69: uint16(30660), + 70: uint16(30661), + 71: uint16(30662), + 72: uint16(30663), + 73: uint16(30664), + 74: uint16(30665), + 75: uint16(30666), + 76: uint16(30667), + 77: uint16(30668), + 78: uint16(30670), + 79: uint16(30671), + 80: uint16(30672), + 81: uint16(30673), + 82: uint16(30674), + 83: uint16(30675), + 84: uint16(30676), + 85: uint16(30677), + 86: uint16(30678), + 87: uint16(30680), + 88: uint16(30681), + 89: uint16(30682), + 90: uint16(30685), + 91: uint16(30686), + 92: uint16(30687), + 93: uint16(30688), + 94: uint16(30689), + 95: uint16(30692), + 96: uint16(30149), + 97: uint16(24182), + 98: uint16(29627), + 99: uint16(33760), + 100: uint16(25773), + 101: uint16(25320), + 102: uint16(38069), + 103: uint16(27874), + 104: uint16(21338), + 105: uint16(21187), + 106: uint16(25615), + 107: uint16(38082), + 108: uint16(31636), + 109: uint16(20271), + 110: uint16(24091), + 111: uint16(33334), + 112: uint16(33046), + 113: uint16(33162), + 114: uint16(28196), + 115: uint16(27850), + 116: uint16(39539), + 117: uint16(25429), + 118: uint16(21340), + 119: uint16(21754), + 120: uint16(34917), + 121: uint16(22496), + 122: uint16(19981), + 123: uint16(24067), + 124: uint16(27493), + 125: uint16(31807), + 126: uint16(37096), + 127: uint16(24598), + 128: uint16(25830), + 129: uint16(29468), + 130: uint16(35009), + 131: uint16(26448), + 132: uint16(25165), + 133: uint16(36130), + 134: uint16(30572), + 135: uint16(36393), + 136: uint16(37319), + 137: uint16(24425), + 138: uint16(33756), + 139: uint16(34081), + 140: uint16(39184), + 141: uint16(21442), + 142: uint16(34453), + 143: uint16(27531), + 144: uint16(24813), + 145: uint16(24808), + 146: uint16(28799), + 147: uint16(33485), + 148: uint16(33329), + 149: uint16(20179), + 150: uint16(27815), + 151: uint16(34255), + 152: uint16(25805), + 153: uint16(31961), + 154: uint16(27133), + 155: uint16(26361), + 156: uint16(33609), + 157: uint16(21397), + 158: uint16(31574), + 159: uint16(20391), + 160: uint16(20876), + 161: uint16(27979), + 162: uint16(23618), + 163: uint16(36461), + 164: uint16(25554), + 165: uint16(21449), + 166: uint16(33580), + 167: uint16(33590), + 168: uint16(26597), + 169: uint16(30900), + 170: uint16(25661), + 171: uint16(23519), + 172: uint16(23700), + 173: uint16(24046), + 174: uint16(35815), + 175: uint16(25286), + 176: uint16(26612), + 177: uint16(35962), + 178: uint16(25600), + 179: uint16(25530), + 180: uint16(34633), + 181: uint16(39307), + 182: uint16(35863), + 183: uint16(32544), + 184: uint16(38130), + 185: uint16(20135), + 186: uint16(38416), + 187: uint16(39076), + 188: uint16(26124), + 189: uint16(29462), + }, + 50: { + 0: uint16(30694), + 1: uint16(30696), + 2: uint16(30698), + 3: uint16(30703), + 4: uint16(30704), + 5: uint16(30705), + 6: uint16(30706), + 7: uint16(30708), + 8: uint16(30709), + 9: uint16(30711), + 10: uint16(30713), + 11: uint16(30714), + 12: uint16(30715), + 13: uint16(30716), + 14: uint16(30723), + 15: uint16(30724), + 16: uint16(30725), + 17: uint16(30726), + 18: uint16(30727), + 19: uint16(30728), + 20: uint16(30730), + 21: uint16(30731), + 22: uint16(30734), + 23: uint16(30735), + 24: uint16(30736), + 25: uint16(30739), + 26: uint16(30741), + 27: uint16(30745), + 28: uint16(30747), + 29: uint16(30750), + 30: uint16(30752), + 31: uint16(30753), + 32: uint16(30754), + 33: uint16(30756), + 34: uint16(30760), + 35: uint16(30762), + 36: uint16(30763), + 37: uint16(30766), + 38: uint16(30767), + 39: uint16(30769), + 40: uint16(30770), + 41: uint16(30771), + 42: uint16(30773), + 43: uint16(30774), + 44: uint16(30781), + 45: uint16(30783), + 46: uint16(30785), + 47: uint16(30786), + 48: uint16(30787), + 49: uint16(30788), + 50: uint16(30790), + 51: uint16(30792), + 52: uint16(30793), + 53: uint16(30794), + 54: uint16(30795), + 55: uint16(30797), + 56: uint16(30799), + 57: uint16(30801), + 58: uint16(30803), + 59: uint16(30804), + 60: uint16(30808), + 61: uint16(30809), + 62: uint16(30810), + 63: uint16(30811), + 64: uint16(30812), + 65: uint16(30814), + 66: uint16(30815), + 67: uint16(30816), + 68: uint16(30817), + 69: uint16(30818), + 70: uint16(30819), + 71: uint16(30820), + 72: uint16(30821), + 73: uint16(30822), + 74: uint16(30823), + 75: uint16(30824), + 76: uint16(30825), + 77: uint16(30831), + 78: uint16(30832), + 79: uint16(30833), + 80: uint16(30834), + 81: uint16(30835), + 82: uint16(30836), + 83: uint16(30837), + 84: uint16(30838), + 85: uint16(30840), + 86: uint16(30841), + 87: uint16(30842), + 88: uint16(30843), + 89: uint16(30845), + 90: uint16(30846), + 91: uint16(30847), + 92: uint16(30848), + 93: uint16(30849), + 94: uint16(30850), + 95: uint16(30851), + 96: uint16(22330), + 97: uint16(23581), + 98: uint16(24120), + 99: uint16(38271), + 100: uint16(20607), + 101: uint16(32928), + 102: uint16(21378), + 103: uint16(25950), + 104: uint16(30021), + 105: uint16(21809), + 106: uint16(20513), + 107: uint16(36229), + 108: uint16(25220), + 109: uint16(38046), + 110: uint16(26397), + 111: uint16(22066), + 112: uint16(28526), + 113: uint16(24034), + 114: uint16(21557), + 115: uint16(28818), + 116: uint16(36710), + 117: uint16(25199), + 118: uint16(25764), + 119: uint16(25507), + 120: uint16(24443), + 121: uint16(28552), + 122: uint16(37108), + 123: uint16(33251), + 124: uint16(36784), + 125: uint16(23576), + 126: uint16(26216), + 127: uint16(24561), + 128: uint16(27785), + 129: uint16(38472), + 130: uint16(36225), + 131: uint16(34924), + 132: uint16(25745), + 133: uint16(31216), + 134: uint16(22478), + 135: uint16(27225), + 136: uint16(25104), + 137: uint16(21576), + 138: uint16(20056), + 139: uint16(31243), + 140: uint16(24809), + 141: uint16(28548), + 142: uint16(35802), + 143: uint16(25215), + 144: uint16(36894), + 145: uint16(39563), + 146: uint16(31204), + 147: uint16(21507), + 148: uint16(30196), + 149: uint16(25345), + 150: uint16(21273), + 151: uint16(27744), + 152: uint16(36831), + 153: uint16(24347), + 154: uint16(39536), + 155: uint16(32827), + 156: uint16(40831), + 157: uint16(20360), + 158: uint16(23610), + 159: uint16(36196), + 160: uint16(32709), + 161: uint16(26021), + 162: uint16(28861), + 163: uint16(20805), + 164: uint16(20914), + 165: uint16(34411), + 166: uint16(23815), + 167: uint16(23456), + 168: uint16(25277), + 169: uint16(37228), + 170: uint16(30068), + 171: uint16(36364), + 172: uint16(31264), + 173: uint16(24833), + 174: uint16(31609), + 175: uint16(20167), + 176: uint16(32504), + 177: uint16(30597), + 178: uint16(19985), + 179: uint16(33261), + 180: uint16(21021), + 181: uint16(20986), + 182: uint16(27249), + 183: uint16(21416), + 184: uint16(36487), + 185: uint16(38148), + 186: uint16(38607), + 187: uint16(28353), + 188: uint16(38500), + 189: uint16(26970), + }, + 51: { + 0: uint16(30852), + 1: uint16(30853), + 2: uint16(30854), + 3: uint16(30856), + 4: uint16(30858), + 5: uint16(30859), + 6: uint16(30863), + 7: uint16(30864), + 8: uint16(30866), + 9: uint16(30868), + 10: uint16(30869), + 11: uint16(30870), + 12: uint16(30873), + 13: uint16(30877), + 14: uint16(30878), + 15: uint16(30880), + 16: uint16(30882), + 17: uint16(30884), + 18: uint16(30886), + 19: uint16(30888), + 20: uint16(30889), + 21: uint16(30890), + 22: uint16(30891), + 23: uint16(30892), + 24: uint16(30893), + 25: uint16(30894), + 26: uint16(30895), + 27: uint16(30901), + 28: uint16(30902), + 29: uint16(30903), + 30: uint16(30904), + 31: uint16(30906), + 32: uint16(30907), + 33: uint16(30908), + 34: uint16(30909), + 35: uint16(30911), + 36: uint16(30912), + 37: uint16(30914), + 38: uint16(30915), + 39: uint16(30916), + 40: uint16(30918), + 41: uint16(30919), + 42: uint16(30920), + 43: uint16(30924), + 44: uint16(30925), + 45: uint16(30926), + 46: uint16(30927), + 47: uint16(30929), + 48: uint16(30930), + 49: uint16(30931), + 50: uint16(30934), + 51: uint16(30935), + 52: uint16(30936), + 53: uint16(30938), + 54: uint16(30939), + 55: uint16(30940), + 56: uint16(30941), + 57: uint16(30942), + 58: uint16(30943), + 59: uint16(30944), + 60: uint16(30945), + 61: uint16(30946), + 62: uint16(30947), + 63: uint16(30948), + 64: uint16(30949), + 65: uint16(30950), + 66: uint16(30951), + 67: uint16(30953), + 68: uint16(30954), + 69: uint16(30955), + 70: uint16(30957), + 71: uint16(30958), + 72: uint16(30959), + 73: uint16(30960), + 74: uint16(30961), + 75: uint16(30963), + 76: uint16(30965), + 77: uint16(30966), + 78: uint16(30968), + 79: uint16(30969), + 80: uint16(30971), + 81: uint16(30972), + 82: uint16(30973), + 83: uint16(30974), + 84: uint16(30975), + 85: uint16(30976), + 86: uint16(30978), + 87: uint16(30979), + 88: uint16(30980), + 89: uint16(30982), + 90: uint16(30983), + 91: uint16(30984), + 92: uint16(30985), + 93: uint16(30986), + 94: uint16(30987), + 95: uint16(30988), + 96: uint16(30784), + 97: uint16(20648), + 98: uint16(30679), + 99: uint16(25616), + 100: uint16(35302), + 101: uint16(22788), + 102: uint16(25571), + 103: uint16(24029), + 104: uint16(31359), + 105: uint16(26941), + 106: uint16(20256), + 107: uint16(33337), + 108: uint16(21912), + 109: uint16(20018), + 110: uint16(30126), + 111: uint16(31383), + 112: uint16(24162), + 113: uint16(24202), + 114: uint16(38383), + 115: uint16(21019), + 116: uint16(21561), + 117: uint16(28810), + 118: uint16(25462), + 119: uint16(38180), + 120: uint16(22402), + 121: uint16(26149), + 122: uint16(26943), + 123: uint16(37255), + 124: uint16(21767), + 125: uint16(28147), + 126: uint16(32431), + 127: uint16(34850), + 128: uint16(25139), + 129: uint16(32496), + 130: uint16(30133), + 131: uint16(33576), + 132: uint16(30913), + 133: uint16(38604), + 134: uint16(36766), + 135: uint16(24904), + 136: uint16(29943), + 137: uint16(35789), + 138: uint16(27492), + 139: uint16(21050), + 140: uint16(36176), + 141: uint16(27425), + 142: uint16(32874), + 143: uint16(33905), + 144: uint16(22257), + 145: uint16(21254), + 146: uint16(20174), + 147: uint16(19995), + 148: uint16(20945), + 149: uint16(31895), + 150: uint16(37259), + 151: uint16(31751), + 152: uint16(20419), + 153: uint16(36479), + 154: uint16(31713), + 155: uint16(31388), + 156: uint16(25703), + 157: uint16(23828), + 158: uint16(20652), + 159: uint16(33030), + 160: uint16(30209), + 161: uint16(31929), + 162: uint16(28140), + 163: uint16(32736), + 164: uint16(26449), + 165: uint16(23384), + 166: uint16(23544), + 167: uint16(30923), + 168: uint16(25774), + 169: uint16(25619), + 170: uint16(25514), + 171: uint16(25387), + 172: uint16(38169), + 173: uint16(25645), + 174: uint16(36798), + 175: uint16(31572), + 176: uint16(30249), + 177: uint16(25171), + 178: uint16(22823), + 179: uint16(21574), + 180: uint16(27513), + 181: uint16(20643), + 182: uint16(25140), + 183: uint16(24102), + 184: uint16(27526), + 185: uint16(20195), + 186: uint16(36151), + 187: uint16(34955), + 188: uint16(24453), + 189: uint16(36910), + }, + 52: { + 0: uint16(30989), + 1: uint16(30990), + 2: uint16(30991), + 3: uint16(30992), + 4: uint16(30993), + 5: uint16(30994), + 6: uint16(30996), + 7: uint16(30997), + 8: uint16(30998), + 9: uint16(30999), + 10: uint16(31000), + 11: uint16(31001), + 12: uint16(31002), + 13: uint16(31003), + 14: uint16(31004), + 15: uint16(31005), + 16: uint16(31007), + 17: uint16(31008), + 18: uint16(31009), + 19: uint16(31010), + 20: uint16(31011), + 21: uint16(31013), + 22: uint16(31014), + 23: uint16(31015), + 24: uint16(31016), + 25: uint16(31017), + 26: uint16(31018), + 27: uint16(31019), + 28: uint16(31020), + 29: uint16(31021), + 30: uint16(31022), + 31: uint16(31023), + 32: uint16(31024), + 33: uint16(31025), + 34: uint16(31026), + 35: uint16(31027), + 36: uint16(31029), + 37: uint16(31030), + 38: uint16(31031), + 39: uint16(31032), + 40: uint16(31033), + 41: uint16(31037), + 42: uint16(31039), + 43: uint16(31042), + 44: uint16(31043), + 45: uint16(31044), + 46: uint16(31045), + 47: uint16(31047), + 48: uint16(31050), + 49: uint16(31051), + 50: uint16(31052), + 51: uint16(31053), + 52: uint16(31054), + 53: uint16(31055), + 54: uint16(31056), + 55: uint16(31057), + 56: uint16(31058), + 57: uint16(31060), + 58: uint16(31061), + 59: uint16(31064), + 60: uint16(31065), + 61: uint16(31073), + 62: uint16(31075), + 63: uint16(31076), + 64: uint16(31078), + 65: uint16(31081), + 66: uint16(31082), + 67: uint16(31083), + 68: uint16(31084), + 69: uint16(31086), + 70: uint16(31088), + 71: uint16(31089), + 72: uint16(31090), + 73: uint16(31091), + 74: uint16(31092), + 75: uint16(31093), + 76: uint16(31094), + 77: uint16(31097), + 78: uint16(31099), + 79: uint16(31100), + 80: uint16(31101), + 81: uint16(31102), + 82: uint16(31103), + 83: uint16(31106), + 84: uint16(31107), + 85: uint16(31110), + 86: uint16(31111), + 87: uint16(31112), + 88: uint16(31113), + 89: uint16(31115), + 90: uint16(31116), + 91: uint16(31117), + 92: uint16(31118), + 93: uint16(31120), + 94: uint16(31121), + 95: uint16(31122), + 96: uint16(24608), + 97: uint16(32829), + 98: uint16(25285), + 99: uint16(20025), + 100: uint16(21333), + 101: uint16(37112), + 102: uint16(25528), + 103: uint16(32966), + 104: uint16(26086), + 105: uint16(27694), + 106: uint16(20294), + 107: uint16(24814), + 108: uint16(28129), + 109: uint16(35806), + 110: uint16(24377), + 111: uint16(34507), + 112: uint16(24403), + 113: uint16(25377), + 114: uint16(20826), + 115: uint16(33633), + 116: uint16(26723), + 117: uint16(20992), + 118: uint16(25443), + 119: uint16(36424), + 120: uint16(20498), + 121: uint16(23707), + 122: uint16(31095), + 123: uint16(23548), + 124: uint16(21040), + 125: uint16(31291), + 126: uint16(24764), + 127: uint16(36947), + 128: uint16(30423), + 129: uint16(24503), + 130: uint16(24471), + 131: uint16(30340), + 132: uint16(36460), + 133: uint16(28783), + 134: uint16(30331), + 135: uint16(31561), + 136: uint16(30634), + 137: uint16(20979), + 138: uint16(37011), + 139: uint16(22564), + 140: uint16(20302), + 141: uint16(28404), + 142: uint16(36842), + 143: uint16(25932), + 144: uint16(31515), + 145: uint16(29380), + 146: uint16(28068), + 147: uint16(32735), + 148: uint16(23265), + 149: uint16(25269), + 150: uint16(24213), + 151: uint16(22320), + 152: uint16(33922), + 153: uint16(31532), + 154: uint16(24093), + 155: uint16(24351), + 156: uint16(36882), + 157: uint16(32532), + 158: uint16(39072), + 159: uint16(25474), + 160: uint16(28359), + 161: uint16(30872), + 162: uint16(28857), + 163: uint16(20856), + 164: uint16(38747), + 165: uint16(22443), + 166: uint16(30005), + 167: uint16(20291), + 168: uint16(30008), + 169: uint16(24215), + 170: uint16(24806), + 171: uint16(22880), + 172: uint16(28096), + 173: uint16(27583), + 174: uint16(30857), + 175: uint16(21500), + 176: uint16(38613), + 177: uint16(20939), + 178: uint16(20993), + 179: uint16(25481), + 180: uint16(21514), + 181: uint16(38035), + 182: uint16(35843), + 183: uint16(36300), + 184: uint16(29241), + 185: uint16(30879), + 186: uint16(34678), + 187: uint16(36845), + 188: uint16(35853), + 189: uint16(21472), + }, + 53: { + 0: uint16(31123), + 1: uint16(31124), + 2: uint16(31125), + 3: uint16(31126), + 4: uint16(31127), + 5: uint16(31128), + 6: uint16(31129), + 7: uint16(31131), + 8: uint16(31132), + 9: uint16(31133), + 10: uint16(31134), + 11: uint16(31135), + 12: uint16(31136), + 13: uint16(31137), + 14: uint16(31138), + 15: uint16(31139), + 16: uint16(31140), + 17: uint16(31141), + 18: uint16(31142), + 19: uint16(31144), + 20: uint16(31145), + 21: uint16(31146), + 22: uint16(31147), + 23: uint16(31148), + 24: uint16(31149), + 25: uint16(31150), + 26: uint16(31151), + 27: uint16(31152), + 28: uint16(31153), + 29: uint16(31154), + 30: uint16(31156), + 31: uint16(31157), + 32: uint16(31158), + 33: uint16(31159), + 34: uint16(31160), + 35: uint16(31164), + 36: uint16(31167), + 37: uint16(31170), + 38: uint16(31172), + 39: uint16(31173), + 40: uint16(31175), + 41: uint16(31176), + 42: uint16(31178), + 43: uint16(31180), + 44: uint16(31182), + 45: uint16(31183), + 46: uint16(31184), + 47: uint16(31187), + 48: uint16(31188), + 49: uint16(31190), + 50: uint16(31191), + 51: uint16(31193), + 52: uint16(31194), + 53: uint16(31195), + 54: uint16(31196), + 55: uint16(31197), + 56: uint16(31198), + 57: uint16(31200), + 58: uint16(31201), + 59: uint16(31202), + 60: uint16(31205), + 61: uint16(31208), + 62: uint16(31210), + 63: uint16(31212), + 64: uint16(31214), + 65: uint16(31217), + 66: uint16(31218), + 67: uint16(31219), + 68: uint16(31220), + 69: uint16(31221), + 70: uint16(31222), + 71: uint16(31223), + 72: uint16(31225), + 73: uint16(31226), + 74: uint16(31228), + 75: uint16(31230), + 76: uint16(31231), + 77: uint16(31233), + 78: uint16(31236), + 79: uint16(31237), + 80: uint16(31239), + 81: uint16(31240), + 82: uint16(31241), + 83: uint16(31242), + 84: uint16(31244), + 85: uint16(31247), + 86: uint16(31248), + 87: uint16(31249), + 88: uint16(31250), + 89: uint16(31251), + 90: uint16(31253), + 91: uint16(31254), + 92: uint16(31256), + 93: uint16(31257), + 94: uint16(31259), + 95: uint16(31260), + 96: uint16(19969), + 97: uint16(30447), + 98: uint16(21486), + 99: uint16(38025), + 100: uint16(39030), + 101: uint16(40718), + 102: uint16(38189), + 103: uint16(23450), + 104: uint16(35746), + 105: uint16(20002), + 106: uint16(19996), + 107: uint16(20908), + 108: uint16(33891), + 109: uint16(25026), + 110: uint16(21160), + 111: uint16(26635), + 112: uint16(20375), + 113: uint16(24683), + 114: uint16(20923), + 115: uint16(27934), + 116: uint16(20828), + 117: uint16(25238), + 118: uint16(26007), + 119: uint16(38497), + 120: uint16(35910), + 121: uint16(36887), + 122: uint16(30168), + 123: uint16(37117), + 124: uint16(30563), + 125: uint16(27602), + 126: uint16(29322), + 127: uint16(29420), + 128: uint16(35835), + 129: uint16(22581), + 130: uint16(30585), + 131: uint16(36172), + 132: uint16(26460), + 133: uint16(38208), + 134: uint16(32922), + 135: uint16(24230), + 136: uint16(28193), + 137: uint16(22930), + 138: uint16(31471), + 139: uint16(30701), + 140: uint16(38203), + 141: uint16(27573), + 142: uint16(26029), + 143: uint16(32526), + 144: uint16(22534), + 145: uint16(20817), + 146: uint16(38431), + 147: uint16(23545), + 148: uint16(22697), + 149: uint16(21544), + 150: uint16(36466), + 151: uint16(25958), + 152: uint16(39039), + 153: uint16(22244), + 154: uint16(38045), + 155: uint16(30462), + 156: uint16(36929), + 157: uint16(25479), + 158: uint16(21702), + 159: uint16(22810), + 160: uint16(22842), + 161: uint16(22427), + 162: uint16(36530), + 163: uint16(26421), + 164: uint16(36346), + 165: uint16(33333), + 166: uint16(21057), + 167: uint16(24816), + 168: uint16(22549), + 169: uint16(34558), + 170: uint16(23784), + 171: uint16(40517), + 172: uint16(20420), + 173: uint16(39069), + 174: uint16(35769), + 175: uint16(23077), + 176: uint16(24694), + 177: uint16(21380), + 178: uint16(25212), + 179: uint16(36943), + 180: uint16(37122), + 181: uint16(39295), + 182: uint16(24681), + 183: uint16(32780), + 184: uint16(20799), + 185: uint16(32819), + 186: uint16(23572), + 187: uint16(39285), + 188: uint16(27953), + 189: uint16(20108), + }, + 54: { + 0: uint16(31261), + 1: uint16(31263), + 2: uint16(31265), + 3: uint16(31266), + 4: uint16(31268), + 5: uint16(31269), + 6: uint16(31270), + 7: uint16(31271), + 8: uint16(31272), + 9: uint16(31273), + 10: uint16(31274), + 11: uint16(31275), + 12: uint16(31276), + 13: uint16(31277), + 14: uint16(31278), + 15: uint16(31279), + 16: uint16(31280), + 17: uint16(31281), + 18: uint16(31282), + 19: uint16(31284), + 20: uint16(31285), + 21: uint16(31286), + 22: uint16(31288), + 23: uint16(31290), + 24: uint16(31294), + 25: uint16(31296), + 26: uint16(31297), + 27: uint16(31298), + 28: uint16(31299), + 29: uint16(31300), + 30: uint16(31301), + 31: uint16(31303), + 32: uint16(31304), + 33: uint16(31305), + 34: uint16(31306), + 35: uint16(31307), + 36: uint16(31308), + 37: uint16(31309), + 38: uint16(31310), + 39: uint16(31311), + 40: uint16(31312), + 41: uint16(31314), + 42: uint16(31315), + 43: uint16(31316), + 44: uint16(31317), + 45: uint16(31318), + 46: uint16(31320), + 47: uint16(31321), + 48: uint16(31322), + 49: uint16(31323), + 50: uint16(31324), + 51: uint16(31325), + 52: uint16(31326), + 53: uint16(31327), + 54: uint16(31328), + 55: uint16(31329), + 56: uint16(31330), + 57: uint16(31331), + 58: uint16(31332), + 59: uint16(31333), + 60: uint16(31334), + 61: uint16(31335), + 62: uint16(31336), + 63: uint16(31337), + 64: uint16(31338), + 65: uint16(31339), + 66: uint16(31340), + 67: uint16(31341), + 68: uint16(31342), + 69: uint16(31343), + 70: uint16(31345), + 71: uint16(31346), + 72: uint16(31347), + 73: uint16(31349), + 74: uint16(31355), + 75: uint16(31356), + 76: uint16(31357), + 77: uint16(31358), + 78: uint16(31362), + 79: uint16(31365), + 80: uint16(31367), + 81: uint16(31369), + 82: uint16(31370), + 83: uint16(31371), + 84: uint16(31372), + 85: uint16(31374), + 86: uint16(31375), + 87: uint16(31376), + 88: uint16(31379), + 89: uint16(31380), + 90: uint16(31385), + 91: uint16(31386), + 92: uint16(31387), + 93: uint16(31390), + 94: uint16(31393), + 95: uint16(31394), + 96: uint16(36144), + 97: uint16(21457), + 98: uint16(32602), + 99: uint16(31567), + 100: uint16(20240), + 101: uint16(20047), + 102: uint16(38400), + 103: uint16(27861), + 104: uint16(29648), + 105: uint16(34281), + 106: uint16(24070), + 107: uint16(30058), + 108: uint16(32763), + 109: uint16(27146), + 110: uint16(30718), + 111: uint16(38034), + 112: uint16(32321), + 113: uint16(20961), + 114: uint16(28902), + 115: uint16(21453), + 116: uint16(36820), + 117: uint16(33539), + 118: uint16(36137), + 119: uint16(29359), + 120: uint16(39277), + 121: uint16(27867), + 122: uint16(22346), + 123: uint16(33459), + 124: uint16(26041), + 125: uint16(32938), + 126: uint16(25151), + 127: uint16(38450), + 128: uint16(22952), + 129: uint16(20223), + 130: uint16(35775), + 131: uint16(32442), + 132: uint16(25918), + 133: uint16(33778), + 134: uint16(38750), + 135: uint16(21857), + 136: uint16(39134), + 137: uint16(32933), + 138: uint16(21290), + 139: uint16(35837), + 140: uint16(21536), + 141: uint16(32954), + 142: uint16(24223), + 143: uint16(27832), + 144: uint16(36153), + 145: uint16(33452), + 146: uint16(37210), + 147: uint16(21545), + 148: uint16(27675), + 149: uint16(20998), + 150: uint16(32439), + 151: uint16(22367), + 152: uint16(28954), + 153: uint16(27774), + 154: uint16(31881), + 155: uint16(22859), + 156: uint16(20221), + 157: uint16(24575), + 158: uint16(24868), + 159: uint16(31914), + 160: uint16(20016), + 161: uint16(23553), + 162: uint16(26539), + 163: uint16(34562), + 164: uint16(23792), + 165: uint16(38155), + 166: uint16(39118), + 167: uint16(30127), + 168: uint16(28925), + 169: uint16(36898), + 170: uint16(20911), + 171: uint16(32541), + 172: uint16(35773), + 173: uint16(22857), + 174: uint16(20964), + 175: uint16(20315), + 176: uint16(21542), + 177: uint16(22827), + 178: uint16(25975), + 179: uint16(32932), + 180: uint16(23413), + 181: uint16(25206), + 182: uint16(25282), + 183: uint16(36752), + 184: uint16(24133), + 185: uint16(27679), + 186: uint16(31526), + 187: uint16(20239), + 188: uint16(20440), + 189: uint16(26381), + }, + 55: { + 0: uint16(31395), + 1: uint16(31396), + 2: uint16(31399), + 3: uint16(31401), + 4: uint16(31402), + 5: uint16(31403), + 6: uint16(31406), + 7: uint16(31407), + 8: uint16(31408), + 9: uint16(31409), + 10: uint16(31410), + 11: uint16(31412), + 12: uint16(31413), + 13: uint16(31414), + 14: uint16(31415), + 15: uint16(31416), + 16: uint16(31417), + 17: uint16(31418), + 18: uint16(31419), + 19: uint16(31420), + 20: uint16(31421), + 21: uint16(31422), + 22: uint16(31424), + 23: uint16(31425), + 24: uint16(31426), + 25: uint16(31427), + 26: uint16(31428), + 27: uint16(31429), + 28: uint16(31430), + 29: uint16(31431), + 30: uint16(31432), + 31: uint16(31433), + 32: uint16(31434), + 33: uint16(31436), + 34: uint16(31437), + 35: uint16(31438), + 36: uint16(31439), + 37: uint16(31440), + 38: uint16(31441), + 39: uint16(31442), + 40: uint16(31443), + 41: uint16(31444), + 42: uint16(31445), + 43: uint16(31447), + 44: uint16(31448), + 45: uint16(31450), + 46: uint16(31451), + 47: uint16(31452), + 48: uint16(31453), + 49: uint16(31457), + 50: uint16(31458), + 51: uint16(31460), + 52: uint16(31463), + 53: uint16(31464), + 54: uint16(31465), + 55: uint16(31466), + 56: uint16(31467), + 57: uint16(31468), + 58: uint16(31470), + 59: uint16(31472), + 60: uint16(31473), + 61: uint16(31474), + 62: uint16(31475), + 63: uint16(31476), + 64: uint16(31477), + 65: uint16(31478), + 66: uint16(31479), + 67: uint16(31480), + 68: uint16(31483), + 69: uint16(31484), + 70: uint16(31486), + 71: uint16(31488), + 72: uint16(31489), + 73: uint16(31490), + 74: uint16(31493), + 75: uint16(31495), + 76: uint16(31497), + 77: uint16(31500), + 78: uint16(31501), + 79: uint16(31502), + 80: uint16(31504), + 81: uint16(31506), + 82: uint16(31507), + 83: uint16(31510), + 84: uint16(31511), + 85: uint16(31512), + 86: uint16(31514), + 87: uint16(31516), + 88: uint16(31517), + 89: uint16(31519), + 90: uint16(31521), + 91: uint16(31522), + 92: uint16(31523), + 93: uint16(31527), + 94: uint16(31529), + 95: uint16(31533), + 96: uint16(28014), + 97: uint16(28074), + 98: uint16(31119), + 99: uint16(34993), + 100: uint16(24343), + 101: uint16(29995), + 102: uint16(25242), + 103: uint16(36741), + 104: uint16(20463), + 105: uint16(37340), + 106: uint16(26023), + 107: uint16(33071), + 108: uint16(33105), + 109: uint16(24220), + 110: uint16(33104), + 111: uint16(36212), + 112: uint16(21103), + 113: uint16(35206), + 114: uint16(36171), + 115: uint16(22797), + 116: uint16(20613), + 117: uint16(20184), + 118: uint16(38428), + 119: uint16(29238), + 120: uint16(33145), + 121: uint16(36127), + 122: uint16(23500), + 123: uint16(35747), + 124: uint16(38468), + 125: uint16(22919), + 126: uint16(32538), + 127: uint16(21648), + 128: uint16(22134), + 129: uint16(22030), + 130: uint16(35813), + 131: uint16(25913), + 132: uint16(27010), + 133: uint16(38041), + 134: uint16(30422), + 135: uint16(28297), + 136: uint16(24178), + 137: uint16(29976), + 138: uint16(26438), + 139: uint16(26577), + 140: uint16(31487), + 141: uint16(32925), + 142: uint16(36214), + 143: uint16(24863), + 144: uint16(31174), + 145: uint16(25954), + 146: uint16(36195), + 147: uint16(20872), + 148: uint16(21018), + 149: uint16(38050), + 150: uint16(32568), + 151: uint16(32923), + 152: uint16(32434), + 153: uint16(23703), + 154: uint16(28207), + 155: uint16(26464), + 156: uint16(31705), + 157: uint16(30347), + 158: uint16(39640), + 159: uint16(33167), + 160: uint16(32660), + 161: uint16(31957), + 162: uint16(25630), + 163: uint16(38224), + 164: uint16(31295), + 165: uint16(21578), + 166: uint16(21733), + 167: uint16(27468), + 168: uint16(25601), + 169: uint16(25096), + 170: uint16(40509), + 171: uint16(33011), + 172: uint16(30105), + 173: uint16(21106), + 174: uint16(38761), + 175: uint16(33883), + 176: uint16(26684), + 177: uint16(34532), + 178: uint16(38401), + 179: uint16(38548), + 180: uint16(38124), + 181: uint16(20010), + 182: uint16(21508), + 183: uint16(32473), + 184: uint16(26681), + 185: uint16(36319), + 186: uint16(32789), + 187: uint16(26356), + 188: uint16(24218), + 189: uint16(32697), + }, + 56: { + 0: uint16(31535), + 1: uint16(31536), + 2: uint16(31538), + 3: uint16(31540), + 4: uint16(31541), + 5: uint16(31542), + 6: uint16(31543), + 7: uint16(31545), + 8: uint16(31547), + 9: uint16(31549), + 10: uint16(31551), + 11: uint16(31552), + 12: uint16(31553), + 13: uint16(31554), + 14: uint16(31555), + 15: uint16(31556), + 16: uint16(31558), + 17: uint16(31560), + 18: uint16(31562), + 19: uint16(31565), + 20: uint16(31566), + 21: uint16(31571), + 22: uint16(31573), + 23: uint16(31575), + 24: uint16(31577), + 25: uint16(31580), + 26: uint16(31582), + 27: uint16(31583), + 28: uint16(31585), + 29: uint16(31587), + 30: uint16(31588), + 31: uint16(31589), + 32: uint16(31590), + 33: uint16(31591), + 34: uint16(31592), + 35: uint16(31593), + 36: uint16(31594), + 37: uint16(31595), + 38: uint16(31596), + 39: uint16(31597), + 40: uint16(31599), + 41: uint16(31600), + 42: uint16(31603), + 43: uint16(31604), + 44: uint16(31606), + 45: uint16(31608), + 46: uint16(31610), + 47: uint16(31612), + 48: uint16(31613), + 49: uint16(31615), + 50: uint16(31617), + 51: uint16(31618), + 52: uint16(31619), + 53: uint16(31620), + 54: uint16(31622), + 55: uint16(31623), + 56: uint16(31624), + 57: uint16(31625), + 58: uint16(31626), + 59: uint16(31627), + 60: uint16(31628), + 61: uint16(31630), + 62: uint16(31631), + 63: uint16(31633), + 64: uint16(31634), + 65: uint16(31635), + 66: uint16(31638), + 67: uint16(31640), + 68: uint16(31641), + 69: uint16(31642), + 70: uint16(31643), + 71: uint16(31646), + 72: uint16(31647), + 73: uint16(31648), + 74: uint16(31651), + 75: uint16(31652), + 76: uint16(31653), + 77: uint16(31662), + 78: uint16(31663), + 79: uint16(31664), + 80: uint16(31666), + 81: uint16(31667), + 82: uint16(31669), + 83: uint16(31670), + 84: uint16(31671), + 85: uint16(31673), + 86: uint16(31674), + 87: uint16(31675), + 88: uint16(31676), + 89: uint16(31677), + 90: uint16(31678), + 91: uint16(31679), + 92: uint16(31680), + 93: uint16(31682), + 94: uint16(31683), + 95: uint16(31684), + 96: uint16(22466), + 97: uint16(32831), + 98: uint16(26775), + 99: uint16(24037), + 100: uint16(25915), + 101: uint16(21151), + 102: uint16(24685), + 103: uint16(40858), + 104: uint16(20379), + 105: uint16(36524), + 106: uint16(20844), + 107: uint16(23467), + 108: uint16(24339), + 109: uint16(24041), + 110: uint16(27742), + 111: uint16(25329), + 112: uint16(36129), + 113: uint16(20849), + 114: uint16(38057), + 115: uint16(21246), + 116: uint16(27807), + 117: uint16(33503), + 118: uint16(29399), + 119: uint16(22434), + 120: uint16(26500), + 121: uint16(36141), + 122: uint16(22815), + 123: uint16(36764), + 124: uint16(33735), + 125: uint16(21653), + 126: uint16(31629), + 127: uint16(20272), + 128: uint16(27837), + 129: uint16(23396), + 130: uint16(22993), + 131: uint16(40723), + 132: uint16(21476), + 133: uint16(34506), + 134: uint16(39592), + 135: uint16(35895), + 136: uint16(32929), + 137: uint16(25925), + 138: uint16(39038), + 139: uint16(22266), + 140: uint16(38599), + 141: uint16(21038), + 142: uint16(29916), + 143: uint16(21072), + 144: uint16(23521), + 145: uint16(25346), + 146: uint16(35074), + 147: uint16(20054), + 148: uint16(25296), + 149: uint16(24618), + 150: uint16(26874), + 151: uint16(20851), + 152: uint16(23448), + 153: uint16(20896), + 154: uint16(35266), + 155: uint16(31649), + 156: uint16(39302), + 157: uint16(32592), + 158: uint16(24815), + 159: uint16(28748), + 160: uint16(36143), + 161: uint16(20809), + 162: uint16(24191), + 163: uint16(36891), + 164: uint16(29808), + 165: uint16(35268), + 166: uint16(22317), + 167: uint16(30789), + 168: uint16(24402), + 169: uint16(40863), + 170: uint16(38394), + 171: uint16(36712), + 172: uint16(39740), + 173: uint16(35809), + 174: uint16(30328), + 175: uint16(26690), + 176: uint16(26588), + 177: uint16(36330), + 178: uint16(36149), + 179: uint16(21053), + 180: uint16(36746), + 181: uint16(28378), + 182: uint16(26829), + 183: uint16(38149), + 184: uint16(37101), + 185: uint16(22269), + 186: uint16(26524), + 187: uint16(35065), + 188: uint16(36807), + 189: uint16(21704), + }, + 57: { + 0: uint16(31685), + 1: uint16(31688), + 2: uint16(31689), + 3: uint16(31690), + 4: uint16(31691), + 5: uint16(31693), + 6: uint16(31694), + 7: uint16(31695), + 8: uint16(31696), + 9: uint16(31698), + 10: uint16(31700), + 11: uint16(31701), + 12: uint16(31702), + 13: uint16(31703), + 14: uint16(31704), + 15: uint16(31707), + 16: uint16(31708), + 17: uint16(31710), + 18: uint16(31711), + 19: uint16(31712), + 20: uint16(31714), + 21: uint16(31715), + 22: uint16(31716), + 23: uint16(31719), + 24: uint16(31720), + 25: uint16(31721), + 26: uint16(31723), + 27: uint16(31724), + 28: uint16(31725), + 29: uint16(31727), + 30: uint16(31728), + 31: uint16(31730), + 32: uint16(31731), + 33: uint16(31732), + 34: uint16(31733), + 35: uint16(31734), + 36: uint16(31736), + 37: uint16(31737), + 38: uint16(31738), + 39: uint16(31739), + 40: uint16(31741), + 41: uint16(31743), + 42: uint16(31744), + 43: uint16(31745), + 44: uint16(31746), + 45: uint16(31747), + 46: uint16(31748), + 47: uint16(31749), + 48: uint16(31750), + 49: uint16(31752), + 50: uint16(31753), + 51: uint16(31754), + 52: uint16(31757), + 53: uint16(31758), + 54: uint16(31760), + 55: uint16(31761), + 56: uint16(31762), + 57: uint16(31763), + 58: uint16(31764), + 59: uint16(31765), + 60: uint16(31767), + 61: uint16(31768), + 62: uint16(31769), + 63: uint16(31770), + 64: uint16(31771), + 65: uint16(31772), + 66: uint16(31773), + 67: uint16(31774), + 68: uint16(31776), + 69: uint16(31777), + 70: uint16(31778), + 71: uint16(31779), + 72: uint16(31780), + 73: uint16(31781), + 74: uint16(31784), + 75: uint16(31785), + 76: uint16(31787), + 77: uint16(31788), + 78: uint16(31789), + 79: uint16(31790), + 80: uint16(31791), + 81: uint16(31792), + 82: uint16(31793), + 83: uint16(31794), + 84: uint16(31795), + 85: uint16(31796), + 86: uint16(31797), + 87: uint16(31798), + 88: uint16(31799), + 89: uint16(31801), + 90: uint16(31802), + 91: uint16(31803), + 92: uint16(31804), + 93: uint16(31805), + 94: uint16(31806), + 95: uint16(31810), + 96: uint16(39608), + 97: uint16(23401), + 98: uint16(28023), + 99: uint16(27686), + 100: uint16(20133), + 101: uint16(23475), + 102: uint16(39559), + 103: uint16(37219), + 104: uint16(25000), + 105: uint16(37039), + 106: uint16(38889), + 107: uint16(21547), + 108: uint16(28085), + 109: uint16(23506), + 110: uint16(20989), + 111: uint16(21898), + 112: uint16(32597), + 113: uint16(32752), + 114: uint16(25788), + 115: uint16(25421), + 116: uint16(26097), + 117: uint16(25022), + 118: uint16(24717), + 119: uint16(28938), + 120: uint16(27735), + 121: uint16(27721), + 122: uint16(22831), + 123: uint16(26477), + 124: uint16(33322), + 125: uint16(22741), + 126: uint16(22158), + 127: uint16(35946), + 128: uint16(27627), + 129: uint16(37085), + 130: uint16(22909), + 131: uint16(32791), + 132: uint16(21495), + 133: uint16(28009), + 134: uint16(21621), + 135: uint16(21917), + 136: uint16(33655), + 137: uint16(33743), + 138: uint16(26680), + 139: uint16(31166), + 140: uint16(21644), + 141: uint16(20309), + 142: uint16(21512), + 143: uint16(30418), + 144: uint16(35977), + 145: uint16(38402), + 146: uint16(27827), + 147: uint16(28088), + 148: uint16(36203), + 149: uint16(35088), + 150: uint16(40548), + 151: uint16(36154), + 152: uint16(22079), + 153: uint16(40657), + 154: uint16(30165), + 155: uint16(24456), + 156: uint16(29408), + 157: uint16(24680), + 158: uint16(21756), + 159: uint16(20136), + 160: uint16(27178), + 161: uint16(34913), + 162: uint16(24658), + 163: uint16(36720), + 164: uint16(21700), + 165: uint16(28888), + 166: uint16(34425), + 167: uint16(40511), + 168: uint16(27946), + 169: uint16(23439), + 170: uint16(24344), + 171: uint16(32418), + 172: uint16(21897), + 173: uint16(20399), + 174: uint16(29492), + 175: uint16(21564), + 176: uint16(21402), + 177: uint16(20505), + 178: uint16(21518), + 179: uint16(21628), + 180: uint16(20046), + 181: uint16(24573), + 182: uint16(29786), + 183: uint16(22774), + 184: uint16(33899), + 185: uint16(32993), + 186: uint16(34676), + 187: uint16(29392), + 188: uint16(31946), + 189: uint16(28246), + }, + 58: { + 0: uint16(31811), + 1: uint16(31812), + 2: uint16(31813), + 3: uint16(31814), + 4: uint16(31815), + 5: uint16(31816), + 6: uint16(31817), + 7: uint16(31818), + 8: uint16(31819), + 9: uint16(31820), + 10: uint16(31822), + 11: uint16(31823), + 12: uint16(31824), + 13: uint16(31825), + 14: uint16(31826), + 15: uint16(31827), + 16: uint16(31828), + 17: uint16(31829), + 18: uint16(31830), + 19: uint16(31831), + 20: uint16(31832), + 21: uint16(31833), + 22: uint16(31834), + 23: uint16(31835), + 24: uint16(31836), + 25: uint16(31837), + 26: uint16(31838), + 27: uint16(31839), + 28: uint16(31840), + 29: uint16(31841), + 30: uint16(31842), + 31: uint16(31843), + 32: uint16(31844), + 33: uint16(31845), + 34: uint16(31846), + 35: uint16(31847), + 36: uint16(31848), + 37: uint16(31849), + 38: uint16(31850), + 39: uint16(31851), + 40: uint16(31852), + 41: uint16(31853), + 42: uint16(31854), + 43: uint16(31855), + 44: uint16(31856), + 45: uint16(31857), + 46: uint16(31858), + 47: uint16(31861), + 48: uint16(31862), + 49: uint16(31863), + 50: uint16(31864), + 51: uint16(31865), + 52: uint16(31866), + 53: uint16(31870), + 54: uint16(31871), + 55: uint16(31872), + 56: uint16(31873), + 57: uint16(31874), + 58: uint16(31875), + 59: uint16(31876), + 60: uint16(31877), + 61: uint16(31878), + 62: uint16(31879), + 63: uint16(31880), + 64: uint16(31882), + 65: uint16(31883), + 66: uint16(31884), + 67: uint16(31885), + 68: uint16(31886), + 69: uint16(31887), + 70: uint16(31888), + 71: uint16(31891), + 72: uint16(31892), + 73: uint16(31894), + 74: uint16(31897), + 75: uint16(31898), + 76: uint16(31899), + 77: uint16(31904), + 78: uint16(31905), + 79: uint16(31907), + 80: uint16(31910), + 81: uint16(31911), + 82: uint16(31912), + 83: uint16(31913), + 84: uint16(31915), + 85: uint16(31916), + 86: uint16(31917), + 87: uint16(31919), + 88: uint16(31920), + 89: uint16(31924), + 90: uint16(31925), + 91: uint16(31926), + 92: uint16(31927), + 93: uint16(31928), + 94: uint16(31930), + 95: uint16(31931), + 96: uint16(24359), + 97: uint16(34382), + 98: uint16(21804), + 99: uint16(25252), + 100: uint16(20114), + 101: uint16(27818), + 102: uint16(25143), + 103: uint16(33457), + 104: uint16(21719), + 105: uint16(21326), + 106: uint16(29502), + 107: uint16(28369), + 108: uint16(30011), + 109: uint16(21010), + 110: uint16(21270), + 111: uint16(35805), + 112: uint16(27088), + 113: uint16(24458), + 114: uint16(24576), + 115: uint16(28142), + 116: uint16(22351), + 117: uint16(27426), + 118: uint16(29615), + 119: uint16(26707), + 120: uint16(36824), + 121: uint16(32531), + 122: uint16(25442), + 123: uint16(24739), + 124: uint16(21796), + 125: uint16(30186), + 126: uint16(35938), + 127: uint16(28949), + 128: uint16(28067), + 129: uint16(23462), + 130: uint16(24187), + 131: uint16(33618), + 132: uint16(24908), + 133: uint16(40644), + 134: uint16(30970), + 135: uint16(34647), + 136: uint16(31783), + 137: uint16(30343), + 138: uint16(20976), + 139: uint16(24822), + 140: uint16(29004), + 141: uint16(26179), + 142: uint16(24140), + 143: uint16(24653), + 144: uint16(35854), + 145: uint16(28784), + 146: uint16(25381), + 147: uint16(36745), + 148: uint16(24509), + 149: uint16(24674), + 150: uint16(34516), + 151: uint16(22238), + 152: uint16(27585), + 153: uint16(24724), + 154: uint16(24935), + 155: uint16(21321), + 156: uint16(24800), + 157: uint16(26214), + 158: uint16(36159), + 159: uint16(31229), + 160: uint16(20250), + 161: uint16(28905), + 162: uint16(27719), + 163: uint16(35763), + 164: uint16(35826), + 165: uint16(32472), + 166: uint16(33636), + 167: uint16(26127), + 168: uint16(23130), + 169: uint16(39746), + 170: uint16(27985), + 171: uint16(28151), + 172: uint16(35905), + 173: uint16(27963), + 174: uint16(20249), + 175: uint16(28779), + 176: uint16(33719), + 177: uint16(25110), + 178: uint16(24785), + 179: uint16(38669), + 180: uint16(36135), + 181: uint16(31096), + 182: uint16(20987), + 183: uint16(22334), + 184: uint16(22522), + 185: uint16(26426), + 186: uint16(30072), + 187: uint16(31293), + 188: uint16(31215), + 189: uint16(31637), + }, + 59: { + 0: uint16(31935), + 1: uint16(31936), + 2: uint16(31938), + 3: uint16(31939), + 4: uint16(31940), + 5: uint16(31942), + 6: uint16(31945), + 7: uint16(31947), + 8: uint16(31950), + 9: uint16(31951), + 10: uint16(31952), + 11: uint16(31953), + 12: uint16(31954), + 13: uint16(31955), + 14: uint16(31956), + 15: uint16(31960), + 16: uint16(31962), + 17: uint16(31963), + 18: uint16(31965), + 19: uint16(31966), + 20: uint16(31969), + 21: uint16(31970), + 22: uint16(31971), + 23: uint16(31972), + 24: uint16(31973), + 25: uint16(31974), + 26: uint16(31975), + 27: uint16(31977), + 28: uint16(31978), + 29: uint16(31979), + 30: uint16(31980), + 31: uint16(31981), + 32: uint16(31982), + 33: uint16(31984), + 34: uint16(31985), + 35: uint16(31986), + 36: uint16(31987), + 37: uint16(31988), + 38: uint16(31989), + 39: uint16(31990), + 40: uint16(31991), + 41: uint16(31993), + 42: uint16(31994), + 43: uint16(31996), + 44: uint16(31997), + 45: uint16(31998), + 46: uint16(31999), + 47: uint16(32000), + 48: uint16(32001), + 49: uint16(32002), + 50: uint16(32003), + 51: uint16(32004), + 52: uint16(32005), + 53: uint16(32006), + 54: uint16(32007), + 55: uint16(32008), + 56: uint16(32009), + 57: uint16(32011), + 58: uint16(32012), + 59: uint16(32013), + 60: uint16(32014), + 61: uint16(32015), + 62: uint16(32016), + 63: uint16(32017), + 64: uint16(32018), + 65: uint16(32019), + 66: uint16(32020), + 67: uint16(32021), + 68: uint16(32022), + 69: uint16(32023), + 70: uint16(32024), + 71: uint16(32025), + 72: uint16(32026), + 73: uint16(32027), + 74: uint16(32028), + 75: uint16(32029), + 76: uint16(32030), + 77: uint16(32031), + 78: uint16(32033), + 79: uint16(32035), + 80: uint16(32036), + 81: uint16(32037), + 82: uint16(32038), + 83: uint16(32040), + 84: uint16(32041), + 85: uint16(32042), + 86: uint16(32044), + 87: uint16(32045), + 88: uint16(32046), + 89: uint16(32048), + 90: uint16(32049), + 91: uint16(32050), + 92: uint16(32051), + 93: uint16(32052), + 94: uint16(32053), + 95: uint16(32054), + 96: uint16(32908), + 97: uint16(39269), + 98: uint16(36857), + 99: uint16(28608), + 100: uint16(35749), + 101: uint16(40481), + 102: uint16(23020), + 103: uint16(32489), + 104: uint16(32521), + 105: uint16(21513), + 106: uint16(26497), + 107: uint16(26840), + 108: uint16(36753), + 109: uint16(31821), + 110: uint16(38598), + 111: uint16(21450), + 112: uint16(24613), + 113: uint16(30142), + 114: uint16(27762), + 115: uint16(21363), + 116: uint16(23241), + 117: uint16(32423), + 118: uint16(25380), + 119: uint16(20960), + 120: uint16(33034), + 121: uint16(24049), + 122: uint16(34015), + 123: uint16(25216), + 124: uint16(20864), + 125: uint16(23395), + 126: uint16(20238), + 127: uint16(31085), + 128: uint16(21058), + 129: uint16(24760), + 130: uint16(27982), + 131: uint16(23492), + 132: uint16(23490), + 133: uint16(35745), + 134: uint16(35760), + 135: uint16(26082), + 136: uint16(24524), + 137: uint16(38469), + 138: uint16(22931), + 139: uint16(32487), + 140: uint16(32426), + 141: uint16(22025), + 142: uint16(26551), + 143: uint16(22841), + 144: uint16(20339), + 145: uint16(23478), + 146: uint16(21152), + 147: uint16(33626), + 148: uint16(39050), + 149: uint16(36158), + 150: uint16(30002), + 151: uint16(38078), + 152: uint16(20551), + 153: uint16(31292), + 154: uint16(20215), + 155: uint16(26550), + 156: uint16(39550), + 157: uint16(23233), + 158: uint16(27516), + 159: uint16(30417), + 160: uint16(22362), + 161: uint16(23574), + 162: uint16(31546), + 163: uint16(38388), + 164: uint16(29006), + 165: uint16(20860), + 166: uint16(32937), + 167: uint16(33392), + 168: uint16(22904), + 169: uint16(32516), + 170: uint16(33575), + 171: uint16(26816), + 172: uint16(26604), + 173: uint16(30897), + 174: uint16(30839), + 175: uint16(25315), + 176: uint16(25441), + 177: uint16(31616), + 178: uint16(20461), + 179: uint16(21098), + 180: uint16(20943), + 181: uint16(33616), + 182: uint16(27099), + 183: uint16(37492), + 184: uint16(36341), + 185: uint16(36145), + 186: uint16(35265), + 187: uint16(38190), + 188: uint16(31661), + 189: uint16(20214), + }, + 60: { + 0: uint16(32055), + 1: uint16(32056), + 2: uint16(32057), + 3: uint16(32058), + 4: uint16(32059), + 5: uint16(32060), + 6: uint16(32061), + 7: uint16(32062), + 8: uint16(32063), + 9: uint16(32064), + 10: uint16(32065), + 11: uint16(32066), + 12: uint16(32067), + 13: uint16(32068), + 14: uint16(32069), + 15: uint16(32070), + 16: uint16(32071), + 17: uint16(32072), + 18: uint16(32073), + 19: uint16(32074), + 20: uint16(32075), + 21: uint16(32076), + 22: uint16(32077), + 23: uint16(32078), + 24: uint16(32079), + 25: uint16(32080), + 26: uint16(32081), + 27: uint16(32082), + 28: uint16(32083), + 29: uint16(32084), + 30: uint16(32085), + 31: uint16(32086), + 32: uint16(32087), + 33: uint16(32088), + 34: uint16(32089), + 35: uint16(32090), + 36: uint16(32091), + 37: uint16(32092), + 38: uint16(32093), + 39: uint16(32094), + 40: uint16(32095), + 41: uint16(32096), + 42: uint16(32097), + 43: uint16(32098), + 44: uint16(32099), + 45: uint16(32100), + 46: uint16(32101), + 47: uint16(32102), + 48: uint16(32103), + 49: uint16(32104), + 50: uint16(32105), + 51: uint16(32106), + 52: uint16(32107), + 53: uint16(32108), + 54: uint16(32109), + 55: uint16(32111), + 56: uint16(32112), + 57: uint16(32113), + 58: uint16(32114), + 59: uint16(32115), + 60: uint16(32116), + 61: uint16(32117), + 62: uint16(32118), + 63: uint16(32120), + 64: uint16(32121), + 65: uint16(32122), + 66: uint16(32123), + 67: uint16(32124), + 68: uint16(32125), + 69: uint16(32126), + 70: uint16(32127), + 71: uint16(32128), + 72: uint16(32129), + 73: uint16(32130), + 74: uint16(32131), + 75: uint16(32132), + 76: uint16(32133), + 77: uint16(32134), + 78: uint16(32135), + 79: uint16(32136), + 80: uint16(32137), + 81: uint16(32138), + 82: uint16(32139), + 83: uint16(32140), + 84: uint16(32141), + 85: uint16(32142), + 86: uint16(32143), + 87: uint16(32144), + 88: uint16(32145), + 89: uint16(32146), + 90: uint16(32147), + 91: uint16(32148), + 92: uint16(32149), + 93: uint16(32150), + 94: uint16(32151), + 95: uint16(32152), + 96: uint16(20581), + 97: uint16(33328), + 98: uint16(21073), + 99: uint16(39279), + 100: uint16(28176), + 101: uint16(28293), + 102: uint16(28071), + 103: uint16(24314), + 104: uint16(20725), + 105: uint16(23004), + 106: uint16(23558), + 107: uint16(27974), + 108: uint16(27743), + 109: uint16(30086), + 110: uint16(33931), + 111: uint16(26728), + 112: uint16(22870), + 113: uint16(35762), + 114: uint16(21280), + 115: uint16(37233), + 116: uint16(38477), + 117: uint16(34121), + 118: uint16(26898), + 119: uint16(30977), + 120: uint16(28966), + 121: uint16(33014), + 122: uint16(20132), + 123: uint16(37066), + 124: uint16(27975), + 125: uint16(39556), + 126: uint16(23047), + 127: uint16(22204), + 128: uint16(25605), + 129: uint16(38128), + 130: uint16(30699), + 131: uint16(20389), + 132: uint16(33050), + 133: uint16(29409), + 134: uint16(35282), + 135: uint16(39290), + 136: uint16(32564), + 137: uint16(32478), + 138: uint16(21119), + 139: uint16(25945), + 140: uint16(37237), + 141: uint16(36735), + 142: uint16(36739), + 143: uint16(21483), + 144: uint16(31382), + 145: uint16(25581), + 146: uint16(25509), + 147: uint16(30342), + 148: uint16(31224), + 149: uint16(34903), + 150: uint16(38454), + 151: uint16(25130), + 152: uint16(21163), + 153: uint16(33410), + 154: uint16(26708), + 155: uint16(26480), + 156: uint16(25463), + 157: uint16(30571), + 158: uint16(31469), + 159: uint16(27905), + 160: uint16(32467), + 161: uint16(35299), + 162: uint16(22992), + 163: uint16(25106), + 164: uint16(34249), + 165: uint16(33445), + 166: uint16(30028), + 167: uint16(20511), + 168: uint16(20171), + 169: uint16(30117), + 170: uint16(35819), + 171: uint16(23626), + 172: uint16(24062), + 173: uint16(31563), + 174: uint16(26020), + 175: uint16(37329), + 176: uint16(20170), + 177: uint16(27941), + 178: uint16(35167), + 179: uint16(32039), + 180: uint16(38182), + 181: uint16(20165), + 182: uint16(35880), + 183: uint16(36827), + 184: uint16(38771), + 185: uint16(26187), + 186: uint16(31105), + 187: uint16(36817), + 188: uint16(28908), + 189: uint16(28024), + }, + 61: { + 0: uint16(32153), + 1: uint16(32154), + 2: uint16(32155), + 3: uint16(32156), + 4: uint16(32157), + 5: uint16(32158), + 6: uint16(32159), + 7: uint16(32160), + 8: uint16(32161), + 9: uint16(32162), + 10: uint16(32163), + 11: uint16(32164), + 12: uint16(32165), + 13: uint16(32167), + 14: uint16(32168), + 15: uint16(32169), + 16: uint16(32170), + 17: uint16(32171), + 18: uint16(32172), + 19: uint16(32173), + 20: uint16(32175), + 21: uint16(32176), + 22: uint16(32177), + 23: uint16(32178), + 24: uint16(32179), + 25: uint16(32180), + 26: uint16(32181), + 27: uint16(32182), + 28: uint16(32183), + 29: uint16(32184), + 30: uint16(32185), + 31: uint16(32186), + 32: uint16(32187), + 33: uint16(32188), + 34: uint16(32189), + 35: uint16(32190), + 36: uint16(32191), + 37: uint16(32192), + 38: uint16(32193), + 39: uint16(32194), + 40: uint16(32195), + 41: uint16(32196), + 42: uint16(32197), + 43: uint16(32198), + 44: uint16(32199), + 45: uint16(32200), + 46: uint16(32201), + 47: uint16(32202), + 48: uint16(32203), + 49: uint16(32204), + 50: uint16(32205), + 51: uint16(32206), + 52: uint16(32207), + 53: uint16(32208), + 54: uint16(32209), + 55: uint16(32210), + 56: uint16(32211), + 57: uint16(32212), + 58: uint16(32213), + 59: uint16(32214), + 60: uint16(32215), + 61: uint16(32216), + 62: uint16(32217), + 63: uint16(32218), + 64: uint16(32219), + 65: uint16(32220), + 66: uint16(32221), + 67: uint16(32222), + 68: uint16(32223), + 69: uint16(32224), + 70: uint16(32225), + 71: uint16(32226), + 72: uint16(32227), + 73: uint16(32228), + 74: uint16(32229), + 75: uint16(32230), + 76: uint16(32231), + 77: uint16(32232), + 78: uint16(32233), + 79: uint16(32234), + 80: uint16(32235), + 81: uint16(32236), + 82: uint16(32237), + 83: uint16(32238), + 84: uint16(32239), + 85: uint16(32240), + 86: uint16(32241), + 87: uint16(32242), + 88: uint16(32243), + 89: uint16(32244), + 90: uint16(32245), + 91: uint16(32246), + 92: uint16(32247), + 93: uint16(32248), + 94: uint16(32249), + 95: uint16(32250), + 96: uint16(23613), + 97: uint16(21170), + 98: uint16(33606), + 99: uint16(20834), + 100: uint16(33550), + 101: uint16(30555), + 102: uint16(26230), + 103: uint16(40120), + 104: uint16(20140), + 105: uint16(24778), + 106: uint16(31934), + 107: uint16(31923), + 108: uint16(32463), + 109: uint16(20117), + 110: uint16(35686), + 111: uint16(26223), + 112: uint16(39048), + 113: uint16(38745), + 114: uint16(22659), + 115: uint16(25964), + 116: uint16(38236), + 117: uint16(24452), + 118: uint16(30153), + 119: uint16(38742), + 120: uint16(31455), + 121: uint16(31454), + 122: uint16(20928), + 123: uint16(28847), + 124: uint16(31384), + 125: uint16(25578), + 126: uint16(31350), + 127: uint16(32416), + 128: uint16(29590), + 129: uint16(38893), + 130: uint16(20037), + 131: uint16(28792), + 132: uint16(20061), + 133: uint16(37202), + 134: uint16(21417), + 135: uint16(25937), + 136: uint16(26087), + 137: uint16(33276), + 138: uint16(33285), + 139: uint16(21646), + 140: uint16(23601), + 141: uint16(30106), + 142: uint16(38816), + 143: uint16(25304), + 144: uint16(29401), + 145: uint16(30141), + 146: uint16(23621), + 147: uint16(39545), + 148: uint16(33738), + 149: uint16(23616), + 150: uint16(21632), + 151: uint16(30697), + 152: uint16(20030), + 153: uint16(27822), + 154: uint16(32858), + 155: uint16(25298), + 156: uint16(25454), + 157: uint16(24040), + 158: uint16(20855), + 159: uint16(36317), + 160: uint16(36382), + 161: uint16(38191), + 162: uint16(20465), + 163: uint16(21477), + 164: uint16(24807), + 165: uint16(28844), + 166: uint16(21095), + 167: uint16(25424), + 168: uint16(40515), + 169: uint16(23071), + 170: uint16(20518), + 171: uint16(30519), + 172: uint16(21367), + 173: uint16(32482), + 174: uint16(25733), + 175: uint16(25899), + 176: uint16(25225), + 177: uint16(25496), + 178: uint16(20500), + 179: uint16(29237), + 180: uint16(35273), + 181: uint16(20915), + 182: uint16(35776), + 183: uint16(32477), + 184: uint16(22343), + 185: uint16(33740), + 186: uint16(38055), + 187: uint16(20891), + 188: uint16(21531), + 189: uint16(23803), + }, + 62: { + 0: uint16(32251), + 1: uint16(32252), + 2: uint16(32253), + 3: uint16(32254), + 4: uint16(32255), + 5: uint16(32256), + 6: uint16(32257), + 7: uint16(32258), + 8: uint16(32259), + 9: uint16(32260), + 10: uint16(32261), + 11: uint16(32262), + 12: uint16(32263), + 13: uint16(32264), + 14: uint16(32265), + 15: uint16(32266), + 16: uint16(32267), + 17: uint16(32268), + 18: uint16(32269), + 19: uint16(32270), + 20: uint16(32271), + 21: uint16(32272), + 22: uint16(32273), + 23: uint16(32274), + 24: uint16(32275), + 25: uint16(32276), + 26: uint16(32277), + 27: uint16(32278), + 28: uint16(32279), + 29: uint16(32280), + 30: uint16(32281), + 31: uint16(32282), + 32: uint16(32283), + 33: uint16(32284), + 34: uint16(32285), + 35: uint16(32286), + 36: uint16(32287), + 37: uint16(32288), + 38: uint16(32289), + 39: uint16(32290), + 40: uint16(32291), + 41: uint16(32292), + 42: uint16(32293), + 43: uint16(32294), + 44: uint16(32295), + 45: uint16(32296), + 46: uint16(32297), + 47: uint16(32298), + 48: uint16(32299), + 49: uint16(32300), + 50: uint16(32301), + 51: uint16(32302), + 52: uint16(32303), + 53: uint16(32304), + 54: uint16(32305), + 55: uint16(32306), + 56: uint16(32307), + 57: uint16(32308), + 58: uint16(32309), + 59: uint16(32310), + 60: uint16(32311), + 61: uint16(32312), + 62: uint16(32313), + 63: uint16(32314), + 64: uint16(32316), + 65: uint16(32317), + 66: uint16(32318), + 67: uint16(32319), + 68: uint16(32320), + 69: uint16(32322), + 70: uint16(32323), + 71: uint16(32324), + 72: uint16(32325), + 73: uint16(32326), + 74: uint16(32328), + 75: uint16(32329), + 76: uint16(32330), + 77: uint16(32331), + 78: uint16(32332), + 79: uint16(32333), + 80: uint16(32334), + 81: uint16(32335), + 82: uint16(32336), + 83: uint16(32337), + 84: uint16(32338), + 85: uint16(32339), + 86: uint16(32340), + 87: uint16(32341), + 88: uint16(32342), + 89: uint16(32343), + 90: uint16(32344), + 91: uint16(32345), + 92: uint16(32346), + 93: uint16(32347), + 94: uint16(32348), + 95: uint16(32349), + 96: uint16(20426), + 97: uint16(31459), + 98: uint16(27994), + 99: uint16(37089), + 100: uint16(39567), + 101: uint16(21888), + 102: uint16(21654), + 103: uint16(21345), + 104: uint16(21679), + 105: uint16(24320), + 106: uint16(25577), + 107: uint16(26999), + 108: uint16(20975), + 109: uint16(24936), + 110: uint16(21002), + 111: uint16(22570), + 112: uint16(21208), + 113: uint16(22350), + 114: uint16(30733), + 115: uint16(30475), + 116: uint16(24247), + 117: uint16(24951), + 118: uint16(31968), + 119: uint16(25179), + 120: uint16(25239), + 121: uint16(20130), + 122: uint16(28821), + 123: uint16(32771), + 124: uint16(25335), + 125: uint16(28900), + 126: uint16(38752), + 127: uint16(22391), + 128: uint16(33499), + 129: uint16(26607), + 130: uint16(26869), + 131: uint16(30933), + 132: uint16(39063), + 133: uint16(31185), + 134: uint16(22771), + 135: uint16(21683), + 136: uint16(21487), + 137: uint16(28212), + 138: uint16(20811), + 139: uint16(21051), + 140: uint16(23458), + 141: uint16(35838), + 142: uint16(32943), + 143: uint16(21827), + 144: uint16(22438), + 145: uint16(24691), + 146: uint16(22353), + 147: uint16(21549), + 148: uint16(31354), + 149: uint16(24656), + 150: uint16(23380), + 151: uint16(25511), + 152: uint16(25248), + 153: uint16(21475), + 154: uint16(25187), + 155: uint16(23495), + 156: uint16(26543), + 157: uint16(21741), + 158: uint16(31391), + 159: uint16(33510), + 160: uint16(37239), + 161: uint16(24211), + 162: uint16(35044), + 163: uint16(22840), + 164: uint16(22446), + 165: uint16(25358), + 166: uint16(36328), + 167: uint16(33007), + 168: uint16(22359), + 169: uint16(31607), + 170: uint16(20393), + 171: uint16(24555), + 172: uint16(23485), + 173: uint16(27454), + 174: uint16(21281), + 175: uint16(31568), + 176: uint16(29378), + 177: uint16(26694), + 178: uint16(30719), + 179: uint16(30518), + 180: uint16(26103), + 181: uint16(20917), + 182: uint16(20111), + 183: uint16(30420), + 184: uint16(23743), + 185: uint16(31397), + 186: uint16(33909), + 187: uint16(22862), + 188: uint16(39745), + 189: uint16(20608), + }, + 63: { + 0: uint16(32350), + 1: uint16(32351), + 2: uint16(32352), + 3: uint16(32353), + 4: uint16(32354), + 5: uint16(32355), + 6: uint16(32356), + 7: uint16(32357), + 8: uint16(32358), + 9: uint16(32359), + 10: uint16(32360), + 11: uint16(32361), + 12: uint16(32362), + 13: uint16(32363), + 14: uint16(32364), + 15: uint16(32365), + 16: uint16(32366), + 17: uint16(32367), + 18: uint16(32368), + 19: uint16(32369), + 20: uint16(32370), + 21: uint16(32371), + 22: uint16(32372), + 23: uint16(32373), + 24: uint16(32374), + 25: uint16(32375), + 26: uint16(32376), + 27: uint16(32377), + 28: uint16(32378), + 29: uint16(32379), + 30: uint16(32380), + 31: uint16(32381), + 32: uint16(32382), + 33: uint16(32383), + 34: uint16(32384), + 35: uint16(32385), + 36: uint16(32387), + 37: uint16(32388), + 38: uint16(32389), + 39: uint16(32390), + 40: uint16(32391), + 41: uint16(32392), + 42: uint16(32393), + 43: uint16(32394), + 44: uint16(32395), + 45: uint16(32396), + 46: uint16(32397), + 47: uint16(32398), + 48: uint16(32399), + 49: uint16(32400), + 50: uint16(32401), + 51: uint16(32402), + 52: uint16(32403), + 53: uint16(32404), + 54: uint16(32405), + 55: uint16(32406), + 56: uint16(32407), + 57: uint16(32408), + 58: uint16(32409), + 59: uint16(32410), + 60: uint16(32412), + 61: uint16(32413), + 62: uint16(32414), + 63: uint16(32430), + 64: uint16(32436), + 65: uint16(32443), + 66: uint16(32444), + 67: uint16(32470), + 68: uint16(32484), + 69: uint16(32492), + 70: uint16(32505), + 71: uint16(32522), + 72: uint16(32528), + 73: uint16(32542), + 74: uint16(32567), + 75: uint16(32569), + 76: uint16(32571), + 77: uint16(32572), + 78: uint16(32573), + 79: uint16(32574), + 80: uint16(32575), + 81: uint16(32576), + 82: uint16(32577), + 83: uint16(32579), + 84: uint16(32582), + 85: uint16(32583), + 86: uint16(32584), + 87: uint16(32585), + 88: uint16(32586), + 89: uint16(32587), + 90: uint16(32588), + 91: uint16(32589), + 92: uint16(32590), + 93: uint16(32591), + 94: uint16(32594), + 95: uint16(32595), + 96: uint16(39304), + 97: uint16(24871), + 98: uint16(28291), + 99: uint16(22372), + 100: uint16(26118), + 101: uint16(25414), + 102: uint16(22256), + 103: uint16(25324), + 104: uint16(25193), + 105: uint16(24275), + 106: uint16(38420), + 107: uint16(22403), + 108: uint16(25289), + 109: uint16(21895), + 110: uint16(34593), + 111: uint16(33098), + 112: uint16(36771), + 113: uint16(21862), + 114: uint16(33713), + 115: uint16(26469), + 116: uint16(36182), + 117: uint16(34013), + 118: uint16(23146), + 119: uint16(26639), + 120: uint16(25318), + 121: uint16(31726), + 122: uint16(38417), + 123: uint16(20848), + 124: uint16(28572), + 125: uint16(35888), + 126: uint16(25597), + 127: uint16(35272), + 128: uint16(25042), + 129: uint16(32518), + 130: uint16(28866), + 131: uint16(28389), + 132: uint16(29701), + 133: uint16(27028), + 134: uint16(29436), + 135: uint16(24266), + 136: uint16(37070), + 137: uint16(26391), + 138: uint16(28010), + 139: uint16(25438), + 140: uint16(21171), + 141: uint16(29282), + 142: uint16(32769), + 143: uint16(20332), + 144: uint16(23013), + 145: uint16(37226), + 146: uint16(28889), + 147: uint16(28061), + 148: uint16(21202), + 149: uint16(20048), + 150: uint16(38647), + 151: uint16(38253), + 152: uint16(34174), + 153: uint16(30922), + 154: uint16(32047), + 155: uint16(20769), + 156: uint16(22418), + 157: uint16(25794), + 158: uint16(32907), + 159: uint16(31867), + 160: uint16(27882), + 161: uint16(26865), + 162: uint16(26974), + 163: uint16(20919), + 164: uint16(21400), + 165: uint16(26792), + 166: uint16(29313), + 167: uint16(40654), + 168: uint16(31729), + 169: uint16(29432), + 170: uint16(31163), + 171: uint16(28435), + 172: uint16(29702), + 173: uint16(26446), + 174: uint16(37324), + 175: uint16(40100), + 176: uint16(31036), + 177: uint16(33673), + 178: uint16(33620), + 179: uint16(21519), + 180: uint16(26647), + 181: uint16(20029), + 182: uint16(21385), + 183: uint16(21169), + 184: uint16(30782), + 185: uint16(21382), + 186: uint16(21033), + 187: uint16(20616), + 188: uint16(20363), + 189: uint16(20432), + }, + 64: { + 0: uint16(32598), + 1: uint16(32601), + 2: uint16(32603), + 3: uint16(32604), + 4: uint16(32605), + 5: uint16(32606), + 6: uint16(32608), + 7: uint16(32611), + 8: uint16(32612), + 9: uint16(32613), + 10: uint16(32614), + 11: uint16(32615), + 12: uint16(32619), + 13: uint16(32620), + 14: uint16(32621), + 15: uint16(32623), + 16: uint16(32624), + 17: uint16(32627), + 18: uint16(32629), + 19: uint16(32630), + 20: uint16(32631), + 21: uint16(32632), + 22: uint16(32634), + 23: uint16(32635), + 24: uint16(32636), + 25: uint16(32637), + 26: uint16(32639), + 27: uint16(32640), + 28: uint16(32642), + 29: uint16(32643), + 30: uint16(32644), + 31: uint16(32645), + 32: uint16(32646), + 33: uint16(32647), + 34: uint16(32648), + 35: uint16(32649), + 36: uint16(32651), + 37: uint16(32653), + 38: uint16(32655), + 39: uint16(32656), + 40: uint16(32657), + 41: uint16(32658), + 42: uint16(32659), + 43: uint16(32661), + 44: uint16(32662), + 45: uint16(32663), + 46: uint16(32664), + 47: uint16(32665), + 48: uint16(32667), + 49: uint16(32668), + 50: uint16(32672), + 51: uint16(32674), + 52: uint16(32675), + 53: uint16(32677), + 54: uint16(32678), + 55: uint16(32680), + 56: uint16(32681), + 57: uint16(32682), + 58: uint16(32683), + 59: uint16(32684), + 60: uint16(32685), + 61: uint16(32686), + 62: uint16(32689), + 63: uint16(32691), + 64: uint16(32692), + 65: uint16(32693), + 66: uint16(32694), + 67: uint16(32695), + 68: uint16(32698), + 69: uint16(32699), + 70: uint16(32702), + 71: uint16(32704), + 72: uint16(32706), + 73: uint16(32707), + 74: uint16(32708), + 75: uint16(32710), + 76: uint16(32711), + 77: uint16(32712), + 78: uint16(32713), + 79: uint16(32715), + 80: uint16(32717), + 81: uint16(32719), + 82: uint16(32720), + 83: uint16(32721), + 84: uint16(32722), + 85: uint16(32723), + 86: uint16(32726), + 87: uint16(32727), + 88: uint16(32729), + 89: uint16(32730), + 90: uint16(32731), + 91: uint16(32732), + 92: uint16(32733), + 93: uint16(32734), + 94: uint16(32738), + 95: uint16(32739), + 96: uint16(30178), + 97: uint16(31435), + 98: uint16(31890), + 99: uint16(27813), + 100: uint16(38582), + 101: uint16(21147), + 102: uint16(29827), + 103: uint16(21737), + 104: uint16(20457), + 105: uint16(32852), + 106: uint16(33714), + 107: uint16(36830), + 108: uint16(38256), + 109: uint16(24265), + 110: uint16(24604), + 111: uint16(28063), + 112: uint16(24088), + 113: uint16(25947), + 114: uint16(33080), + 115: uint16(38142), + 116: uint16(24651), + 117: uint16(28860), + 118: uint16(32451), + 119: uint16(31918), + 120: uint16(20937), + 121: uint16(26753), + 122: uint16(31921), + 123: uint16(33391), + 124: uint16(20004), + 125: uint16(36742), + 126: uint16(37327), + 127: uint16(26238), + 128: uint16(20142), + 129: uint16(35845), + 130: uint16(25769), + 131: uint16(32842), + 132: uint16(20698), + 133: uint16(30103), + 134: uint16(29134), + 135: uint16(23525), + 136: uint16(36797), + 137: uint16(28518), + 138: uint16(20102), + 139: uint16(25730), + 140: uint16(38243), + 141: uint16(24278), + 142: uint16(26009), + 143: uint16(21015), + 144: uint16(35010), + 145: uint16(28872), + 146: uint16(21155), + 147: uint16(29454), + 148: uint16(29747), + 149: uint16(26519), + 150: uint16(30967), + 151: uint16(38678), + 152: uint16(20020), + 153: uint16(37051), + 154: uint16(40158), + 155: uint16(28107), + 156: uint16(20955), + 157: uint16(36161), + 158: uint16(21533), + 159: uint16(25294), + 160: uint16(29618), + 161: uint16(33777), + 162: uint16(38646), + 163: uint16(40836), + 164: uint16(38083), + 165: uint16(20278), + 166: uint16(32666), + 167: uint16(20940), + 168: uint16(28789), + 169: uint16(38517), + 170: uint16(23725), + 171: uint16(39046), + 172: uint16(21478), + 173: uint16(20196), + 174: uint16(28316), + 175: uint16(29705), + 176: uint16(27060), + 177: uint16(30827), + 178: uint16(39311), + 179: uint16(30041), + 180: uint16(21016), + 181: uint16(30244), + 182: uint16(27969), + 183: uint16(26611), + 184: uint16(20845), + 185: uint16(40857), + 186: uint16(32843), + 187: uint16(21657), + 188: uint16(31548), + 189: uint16(31423), + }, + 65: { + 0: uint16(32740), + 1: uint16(32743), + 2: uint16(32744), + 3: uint16(32746), + 4: uint16(32747), + 5: uint16(32748), + 6: uint16(32749), + 7: uint16(32751), + 8: uint16(32754), + 9: uint16(32756), + 10: uint16(32757), + 11: uint16(32758), + 12: uint16(32759), + 13: uint16(32760), + 14: uint16(32761), + 15: uint16(32762), + 16: uint16(32765), + 17: uint16(32766), + 18: uint16(32767), + 19: uint16(32770), + 20: uint16(32775), + 21: uint16(32776), + 22: uint16(32777), + 23: uint16(32778), + 24: uint16(32782), + 25: uint16(32783), + 26: uint16(32785), + 27: uint16(32787), + 28: uint16(32794), + 29: uint16(32795), + 30: uint16(32797), + 31: uint16(32798), + 32: uint16(32799), + 33: uint16(32801), + 34: uint16(32803), + 35: uint16(32804), + 36: uint16(32811), + 37: uint16(32812), + 38: uint16(32813), + 39: uint16(32814), + 40: uint16(32815), + 41: uint16(32816), + 42: uint16(32818), + 43: uint16(32820), + 44: uint16(32825), + 45: uint16(32826), + 46: uint16(32828), + 47: uint16(32830), + 48: uint16(32832), + 49: uint16(32833), + 50: uint16(32836), + 51: uint16(32837), + 52: uint16(32839), + 53: uint16(32840), + 54: uint16(32841), + 55: uint16(32846), + 56: uint16(32847), + 57: uint16(32848), + 58: uint16(32849), + 59: uint16(32851), + 60: uint16(32853), + 61: uint16(32854), + 62: uint16(32855), + 63: uint16(32857), + 64: uint16(32859), + 65: uint16(32860), + 66: uint16(32861), + 67: uint16(32862), + 68: uint16(32863), + 69: uint16(32864), + 70: uint16(32865), + 71: uint16(32866), + 72: uint16(32867), + 73: uint16(32868), + 74: uint16(32869), + 75: uint16(32870), + 76: uint16(32871), + 77: uint16(32872), + 78: uint16(32875), + 79: uint16(32876), + 80: uint16(32877), + 81: uint16(32878), + 82: uint16(32879), + 83: uint16(32880), + 84: uint16(32882), + 85: uint16(32883), + 86: uint16(32884), + 87: uint16(32885), + 88: uint16(32886), + 89: uint16(32887), + 90: uint16(32888), + 91: uint16(32889), + 92: uint16(32890), + 93: uint16(32891), + 94: uint16(32892), + 95: uint16(32893), + 96: uint16(38534), + 97: uint16(22404), + 98: uint16(25314), + 99: uint16(38471), + 100: uint16(27004), + 101: uint16(23044), + 102: uint16(25602), + 103: uint16(31699), + 104: uint16(28431), + 105: uint16(38475), + 106: uint16(33446), + 107: uint16(21346), + 108: uint16(39045), + 109: uint16(24208), + 110: uint16(28809), + 111: uint16(25523), + 112: uint16(21348), + 113: uint16(34383), + 114: uint16(40065), + 115: uint16(40595), + 116: uint16(30860), + 117: uint16(38706), + 118: uint16(36335), + 119: uint16(36162), + 120: uint16(40575), + 121: uint16(28510), + 122: uint16(31108), + 123: uint16(24405), + 124: uint16(38470), + 125: uint16(25134), + 126: uint16(39540), + 127: uint16(21525), + 128: uint16(38109), + 129: uint16(20387), + 130: uint16(26053), + 131: uint16(23653), + 132: uint16(23649), + 133: uint16(32533), + 134: uint16(34385), + 135: uint16(27695), + 136: uint16(24459), + 137: uint16(29575), + 138: uint16(28388), + 139: uint16(32511), + 140: uint16(23782), + 141: uint16(25371), + 142: uint16(23402), + 143: uint16(28390), + 144: uint16(21365), + 145: uint16(20081), + 146: uint16(25504), + 147: uint16(30053), + 148: uint16(25249), + 149: uint16(36718), + 150: uint16(20262), + 151: uint16(20177), + 152: uint16(27814), + 153: uint16(32438), + 154: uint16(35770), + 155: uint16(33821), + 156: uint16(34746), + 157: uint16(32599), + 158: uint16(36923), + 159: uint16(38179), + 160: uint16(31657), + 161: uint16(39585), + 162: uint16(35064), + 163: uint16(33853), + 164: uint16(27931), + 165: uint16(39558), + 166: uint16(32476), + 167: uint16(22920), + 168: uint16(40635), + 169: uint16(29595), + 170: uint16(30721), + 171: uint16(34434), + 172: uint16(39532), + 173: uint16(39554), + 174: uint16(22043), + 175: uint16(21527), + 176: uint16(22475), + 177: uint16(20080), + 178: uint16(40614), + 179: uint16(21334), + 180: uint16(36808), + 181: uint16(33033), + 182: uint16(30610), + 183: uint16(39314), + 184: uint16(34542), + 185: uint16(28385), + 186: uint16(34067), + 187: uint16(26364), + 188: uint16(24930), + 189: uint16(28459), + }, + 66: { + 0: uint16(32894), + 1: uint16(32897), + 2: uint16(32898), + 3: uint16(32901), + 4: uint16(32904), + 5: uint16(32906), + 6: uint16(32909), + 7: uint16(32910), + 8: uint16(32911), + 9: uint16(32912), + 10: uint16(32913), + 11: uint16(32914), + 12: uint16(32916), + 13: uint16(32917), + 14: uint16(32919), + 15: uint16(32921), + 16: uint16(32926), + 17: uint16(32931), + 18: uint16(32934), + 19: uint16(32935), + 20: uint16(32936), + 21: uint16(32940), + 22: uint16(32944), + 23: uint16(32947), + 24: uint16(32949), + 25: uint16(32950), + 26: uint16(32952), + 27: uint16(32953), + 28: uint16(32955), + 29: uint16(32965), + 30: uint16(32967), + 31: uint16(32968), + 32: uint16(32969), + 33: uint16(32970), + 34: uint16(32971), + 35: uint16(32975), + 36: uint16(32976), + 37: uint16(32977), + 38: uint16(32978), + 39: uint16(32979), + 40: uint16(32980), + 41: uint16(32981), + 42: uint16(32984), + 43: uint16(32991), + 44: uint16(32992), + 45: uint16(32994), + 46: uint16(32995), + 47: uint16(32998), + 48: uint16(33006), + 49: uint16(33013), + 50: uint16(33015), + 51: uint16(33017), + 52: uint16(33019), + 53: uint16(33022), + 54: uint16(33023), + 55: uint16(33024), + 56: uint16(33025), + 57: uint16(33027), + 58: uint16(33028), + 59: uint16(33029), + 60: uint16(33031), + 61: uint16(33032), + 62: uint16(33035), + 63: uint16(33036), + 64: uint16(33045), + 65: uint16(33047), + 66: uint16(33049), + 67: uint16(33051), + 68: uint16(33052), + 69: uint16(33053), + 70: uint16(33055), + 71: uint16(33056), + 72: uint16(33057), + 73: uint16(33058), + 74: uint16(33059), + 75: uint16(33060), + 76: uint16(33061), + 77: uint16(33062), + 78: uint16(33063), + 79: uint16(33064), + 80: uint16(33065), + 81: uint16(33066), + 82: uint16(33067), + 83: uint16(33069), + 84: uint16(33070), + 85: uint16(33072), + 86: uint16(33075), + 87: uint16(33076), + 88: uint16(33077), + 89: uint16(33079), + 90: uint16(33081), + 91: uint16(33082), + 92: uint16(33083), + 93: uint16(33084), + 94: uint16(33085), + 95: uint16(33087), + 96: uint16(35881), + 97: uint16(33426), + 98: uint16(33579), + 99: uint16(30450), + 100: uint16(27667), + 101: uint16(24537), + 102: uint16(33725), + 103: uint16(29483), + 104: uint16(33541), + 105: uint16(38170), + 106: uint16(27611), + 107: uint16(30683), + 108: uint16(38086), + 109: uint16(21359), + 110: uint16(33538), + 111: uint16(20882), + 112: uint16(24125), + 113: uint16(35980), + 114: uint16(36152), + 115: uint16(20040), + 116: uint16(29611), + 117: uint16(26522), + 118: uint16(26757), + 119: uint16(37238), + 120: uint16(38665), + 121: uint16(29028), + 122: uint16(27809), + 123: uint16(30473), + 124: uint16(23186), + 125: uint16(38209), + 126: uint16(27599), + 127: uint16(32654), + 128: uint16(26151), + 129: uint16(23504), + 130: uint16(22969), + 131: uint16(23194), + 132: uint16(38376), + 133: uint16(38391), + 134: uint16(20204), + 135: uint16(33804), + 136: uint16(33945), + 137: uint16(27308), + 138: uint16(30431), + 139: uint16(38192), + 140: uint16(29467), + 141: uint16(26790), + 142: uint16(23391), + 143: uint16(30511), + 144: uint16(37274), + 145: uint16(38753), + 146: uint16(31964), + 147: uint16(36855), + 148: uint16(35868), + 149: uint16(24357), + 150: uint16(31859), + 151: uint16(31192), + 152: uint16(35269), + 153: uint16(27852), + 154: uint16(34588), + 155: uint16(23494), + 156: uint16(24130), + 157: uint16(26825), + 158: uint16(30496), + 159: uint16(32501), + 160: uint16(20885), + 161: uint16(20813), + 162: uint16(21193), + 163: uint16(23081), + 164: uint16(32517), + 165: uint16(38754), + 166: uint16(33495), + 167: uint16(25551), + 168: uint16(30596), + 169: uint16(34256), + 170: uint16(31186), + 171: uint16(28218), + 172: uint16(24217), + 173: uint16(22937), + 174: uint16(34065), + 175: uint16(28781), + 176: uint16(27665), + 177: uint16(25279), + 178: uint16(30399), + 179: uint16(25935), + 180: uint16(24751), + 181: uint16(38397), + 182: uint16(26126), + 183: uint16(34719), + 184: uint16(40483), + 185: uint16(38125), + 186: uint16(21517), + 187: uint16(21629), + 188: uint16(35884), + 189: uint16(25720), + }, + 67: { + 0: uint16(33088), + 1: uint16(33089), + 2: uint16(33090), + 3: uint16(33091), + 4: uint16(33092), + 5: uint16(33093), + 6: uint16(33095), + 7: uint16(33097), + 8: uint16(33101), + 9: uint16(33102), + 10: uint16(33103), + 11: uint16(33106), + 12: uint16(33110), + 13: uint16(33111), + 14: uint16(33112), + 15: uint16(33115), + 16: uint16(33116), + 17: uint16(33117), + 18: uint16(33118), + 19: uint16(33119), + 20: uint16(33121), + 21: uint16(33122), + 22: uint16(33123), + 23: uint16(33124), + 24: uint16(33126), + 25: uint16(33128), + 26: uint16(33130), + 27: uint16(33131), + 28: uint16(33132), + 29: uint16(33135), + 30: uint16(33138), + 31: uint16(33139), + 32: uint16(33141), + 33: uint16(33142), + 34: uint16(33143), + 35: uint16(33144), + 36: uint16(33153), + 37: uint16(33155), + 38: uint16(33156), + 39: uint16(33157), + 40: uint16(33158), + 41: uint16(33159), + 42: uint16(33161), + 43: uint16(33163), + 44: uint16(33164), + 45: uint16(33165), + 46: uint16(33166), + 47: uint16(33168), + 48: uint16(33170), + 49: uint16(33171), + 50: uint16(33172), + 51: uint16(33173), + 52: uint16(33174), + 53: uint16(33175), + 54: uint16(33177), + 55: uint16(33178), + 56: uint16(33182), + 57: uint16(33183), + 58: uint16(33184), + 59: uint16(33185), + 60: uint16(33186), + 61: uint16(33188), + 62: uint16(33189), + 63: uint16(33191), + 64: uint16(33193), + 65: uint16(33195), + 66: uint16(33196), + 67: uint16(33197), + 68: uint16(33198), + 69: uint16(33199), + 70: uint16(33200), + 71: uint16(33201), + 72: uint16(33202), + 73: uint16(33204), + 74: uint16(33205), + 75: uint16(33206), + 76: uint16(33207), + 77: uint16(33208), + 78: uint16(33209), + 79: uint16(33212), + 80: uint16(33213), + 81: uint16(33214), + 82: uint16(33215), + 83: uint16(33220), + 84: uint16(33221), + 85: uint16(33223), + 86: uint16(33224), + 87: uint16(33225), + 88: uint16(33227), + 89: uint16(33229), + 90: uint16(33230), + 91: uint16(33231), + 92: uint16(33232), + 93: uint16(33233), + 94: uint16(33234), + 95: uint16(33235), + 96: uint16(25721), + 97: uint16(34321), + 98: uint16(27169), + 99: uint16(33180), + 100: uint16(30952), + 101: uint16(25705), + 102: uint16(39764), + 103: uint16(25273), + 104: uint16(26411), + 105: uint16(33707), + 106: uint16(22696), + 107: uint16(40664), + 108: uint16(27819), + 109: uint16(28448), + 110: uint16(23518), + 111: uint16(38476), + 112: uint16(35851), + 113: uint16(29279), + 114: uint16(26576), + 115: uint16(25287), + 116: uint16(29281), + 117: uint16(20137), + 118: uint16(22982), + 119: uint16(27597), + 120: uint16(22675), + 121: uint16(26286), + 122: uint16(24149), + 123: uint16(21215), + 124: uint16(24917), + 125: uint16(26408), + 126: uint16(30446), + 127: uint16(30566), + 128: uint16(29287), + 129: uint16(31302), + 130: uint16(25343), + 131: uint16(21738), + 132: uint16(21584), + 133: uint16(38048), + 134: uint16(37027), + 135: uint16(23068), + 136: uint16(32435), + 137: uint16(27670), + 138: uint16(20035), + 139: uint16(22902), + 140: uint16(32784), + 141: uint16(22856), + 142: uint16(21335), + 143: uint16(30007), + 144: uint16(38590), + 145: uint16(22218), + 146: uint16(25376), + 147: uint16(33041), + 148: uint16(24700), + 149: uint16(38393), + 150: uint16(28118), + 151: uint16(21602), + 152: uint16(39297), + 153: uint16(20869), + 154: uint16(23273), + 155: uint16(33021), + 156: uint16(22958), + 157: uint16(38675), + 158: uint16(20522), + 159: uint16(27877), + 160: uint16(23612), + 161: uint16(25311), + 162: uint16(20320), + 163: uint16(21311), + 164: uint16(33147), + 165: uint16(36870), + 166: uint16(28346), + 167: uint16(34091), + 168: uint16(25288), + 169: uint16(24180), + 170: uint16(30910), + 171: uint16(25781), + 172: uint16(25467), + 173: uint16(24565), + 174: uint16(23064), + 175: uint16(37247), + 176: uint16(40479), + 177: uint16(23615), + 178: uint16(25423), + 179: uint16(32834), + 180: uint16(23421), + 181: uint16(21870), + 182: uint16(38218), + 183: uint16(38221), + 184: uint16(28037), + 185: uint16(24744), + 186: uint16(26592), + 187: uint16(29406), + 188: uint16(20957), + 189: uint16(23425), + }, + 68: { + 0: uint16(33236), + 1: uint16(33237), + 2: uint16(33238), + 3: uint16(33239), + 4: uint16(33240), + 5: uint16(33241), + 6: uint16(33242), + 7: uint16(33243), + 8: uint16(33244), + 9: uint16(33245), + 10: uint16(33246), + 11: uint16(33247), + 12: uint16(33248), + 13: uint16(33249), + 14: uint16(33250), + 15: uint16(33252), + 16: uint16(33253), + 17: uint16(33254), + 18: uint16(33256), + 19: uint16(33257), + 20: uint16(33259), + 21: uint16(33262), + 22: uint16(33263), + 23: uint16(33264), + 24: uint16(33265), + 25: uint16(33266), + 26: uint16(33269), + 27: uint16(33270), + 28: uint16(33271), + 29: uint16(33272), + 30: uint16(33273), + 31: uint16(33274), + 32: uint16(33277), + 33: uint16(33279), + 34: uint16(33283), + 35: uint16(33287), + 36: uint16(33288), + 37: uint16(33289), + 38: uint16(33290), + 39: uint16(33291), + 40: uint16(33294), + 41: uint16(33295), + 42: uint16(33297), + 43: uint16(33299), + 44: uint16(33301), + 45: uint16(33302), + 46: uint16(33303), + 47: uint16(33304), + 48: uint16(33305), + 49: uint16(33306), + 50: uint16(33309), + 51: uint16(33312), + 52: uint16(33316), + 53: uint16(33317), + 54: uint16(33318), + 55: uint16(33319), + 56: uint16(33321), + 57: uint16(33326), + 58: uint16(33330), + 59: uint16(33338), + 60: uint16(33340), + 61: uint16(33341), + 62: uint16(33343), + 63: uint16(33344), + 64: uint16(33345), + 65: uint16(33346), + 66: uint16(33347), + 67: uint16(33349), + 68: uint16(33350), + 69: uint16(33352), + 70: uint16(33354), + 71: uint16(33356), + 72: uint16(33357), + 73: uint16(33358), + 74: uint16(33360), + 75: uint16(33361), + 76: uint16(33362), + 77: uint16(33363), + 78: uint16(33364), + 79: uint16(33365), + 80: uint16(33366), + 81: uint16(33367), + 82: uint16(33369), + 83: uint16(33371), + 84: uint16(33372), + 85: uint16(33373), + 86: uint16(33374), + 87: uint16(33376), + 88: uint16(33377), + 89: uint16(33378), + 90: uint16(33379), + 91: uint16(33380), + 92: uint16(33381), + 93: uint16(33382), + 94: uint16(33383), + 95: uint16(33385), + 96: uint16(25319), + 97: uint16(27870), + 98: uint16(29275), + 99: uint16(25197), + 100: uint16(38062), + 101: uint16(32445), + 102: uint16(33043), + 103: uint16(27987), + 104: uint16(20892), + 105: uint16(24324), + 106: uint16(22900), + 107: uint16(21162), + 108: uint16(24594), + 109: uint16(22899), + 110: uint16(26262), + 111: uint16(34384), + 112: uint16(30111), + 113: uint16(25386), + 114: uint16(25062), + 115: uint16(31983), + 116: uint16(35834), + 117: uint16(21734), + 118: uint16(27431), + 119: uint16(40485), + 120: uint16(27572), + 121: uint16(34261), + 122: uint16(21589), + 123: uint16(20598), + 124: uint16(27812), + 125: uint16(21866), + 126: uint16(36276), + 127: uint16(29228), + 128: uint16(24085), + 129: uint16(24597), + 130: uint16(29750), + 131: uint16(25293), + 132: uint16(25490), + 133: uint16(29260), + 134: uint16(24472), + 135: uint16(28227), + 136: uint16(27966), + 137: uint16(25856), + 138: uint16(28504), + 139: uint16(30424), + 140: uint16(30928), + 141: uint16(30460), + 142: uint16(30036), + 143: uint16(21028), + 144: uint16(21467), + 145: uint16(20051), + 146: uint16(24222), + 147: uint16(26049), + 148: uint16(32810), + 149: uint16(32982), + 150: uint16(25243), + 151: uint16(21638), + 152: uint16(21032), + 153: uint16(28846), + 154: uint16(34957), + 155: uint16(36305), + 156: uint16(27873), + 157: uint16(21624), + 158: uint16(32986), + 159: uint16(22521), + 160: uint16(35060), + 161: uint16(36180), + 162: uint16(38506), + 163: uint16(37197), + 164: uint16(20329), + 165: uint16(27803), + 166: uint16(21943), + 167: uint16(30406), + 168: uint16(30768), + 169: uint16(25256), + 170: uint16(28921), + 171: uint16(28558), + 172: uint16(24429), + 173: uint16(34028), + 174: uint16(26842), + 175: uint16(30844), + 176: uint16(31735), + 177: uint16(33192), + 178: uint16(26379), + 179: uint16(40527), + 180: uint16(25447), + 181: uint16(30896), + 182: uint16(22383), + 183: uint16(30738), + 184: uint16(38713), + 185: uint16(25209), + 186: uint16(25259), + 187: uint16(21128), + 188: uint16(29749), + 189: uint16(27607), + }, + 69: { + 0: uint16(33386), + 1: uint16(33387), + 2: uint16(33388), + 3: uint16(33389), + 4: uint16(33393), + 5: uint16(33397), + 6: uint16(33398), + 7: uint16(33399), + 8: uint16(33400), + 9: uint16(33403), + 10: uint16(33404), + 11: uint16(33408), + 12: uint16(33409), + 13: uint16(33411), + 14: uint16(33413), + 15: uint16(33414), + 16: uint16(33415), + 17: uint16(33417), + 18: uint16(33420), + 19: uint16(33424), + 20: uint16(33427), + 21: uint16(33428), + 22: uint16(33429), + 23: uint16(33430), + 24: uint16(33434), + 25: uint16(33435), + 26: uint16(33438), + 27: uint16(33440), + 28: uint16(33442), + 29: uint16(33443), + 30: uint16(33447), + 31: uint16(33458), + 32: uint16(33461), + 33: uint16(33462), + 34: uint16(33466), + 35: uint16(33467), + 36: uint16(33468), + 37: uint16(33471), + 38: uint16(33472), + 39: uint16(33474), + 40: uint16(33475), + 41: uint16(33477), + 42: uint16(33478), + 43: uint16(33481), + 44: uint16(33488), + 45: uint16(33494), + 46: uint16(33497), + 47: uint16(33498), + 48: uint16(33501), + 49: uint16(33506), + 50: uint16(33511), + 51: uint16(33512), + 52: uint16(33513), + 53: uint16(33514), + 54: uint16(33516), + 55: uint16(33517), + 56: uint16(33518), + 57: uint16(33520), + 58: uint16(33522), + 59: uint16(33523), + 60: uint16(33525), + 61: uint16(33526), + 62: uint16(33528), + 63: uint16(33530), + 64: uint16(33532), + 65: uint16(33533), + 66: uint16(33534), + 67: uint16(33535), + 68: uint16(33536), + 69: uint16(33546), + 70: uint16(33547), + 71: uint16(33549), + 72: uint16(33552), + 73: uint16(33554), + 74: uint16(33555), + 75: uint16(33558), + 76: uint16(33560), + 77: uint16(33561), + 78: uint16(33565), + 79: uint16(33566), + 80: uint16(33567), + 81: uint16(33568), + 82: uint16(33569), + 83: uint16(33570), + 84: uint16(33571), + 85: uint16(33572), + 86: uint16(33573), + 87: uint16(33574), + 88: uint16(33577), + 89: uint16(33578), + 90: uint16(33582), + 91: uint16(33584), + 92: uint16(33586), + 93: uint16(33591), + 94: uint16(33595), + 95: uint16(33597), + 96: uint16(21860), + 97: uint16(33086), + 98: uint16(30130), + 99: uint16(30382), + 100: uint16(21305), + 101: uint16(30174), + 102: uint16(20731), + 103: uint16(23617), + 104: uint16(35692), + 105: uint16(31687), + 106: uint16(20559), + 107: uint16(29255), + 108: uint16(39575), + 109: uint16(39128), + 110: uint16(28418), + 111: uint16(29922), + 112: uint16(31080), + 113: uint16(25735), + 114: uint16(30629), + 115: uint16(25340), + 116: uint16(39057), + 117: uint16(36139), + 118: uint16(21697), + 119: uint16(32856), + 120: uint16(20050), + 121: uint16(22378), + 122: uint16(33529), + 123: uint16(33805), + 124: uint16(24179), + 125: uint16(20973), + 126: uint16(29942), + 127: uint16(35780), + 128: uint16(23631), + 129: uint16(22369), + 130: uint16(27900), + 131: uint16(39047), + 132: uint16(23110), + 133: uint16(30772), + 134: uint16(39748), + 135: uint16(36843), + 136: uint16(31893), + 137: uint16(21078), + 138: uint16(25169), + 139: uint16(38138), + 140: uint16(20166), + 141: uint16(33670), + 142: uint16(33889), + 143: uint16(33769), + 144: uint16(33970), + 145: uint16(22484), + 146: uint16(26420), + 147: uint16(22275), + 148: uint16(26222), + 149: uint16(28006), + 150: uint16(35889), + 151: uint16(26333), + 152: uint16(28689), + 153: uint16(26399), + 154: uint16(27450), + 155: uint16(26646), + 156: uint16(25114), + 157: uint16(22971), + 158: uint16(19971), + 159: uint16(20932), + 160: uint16(28422), + 161: uint16(26578), + 162: uint16(27791), + 163: uint16(20854), + 164: uint16(26827), + 165: uint16(22855), + 166: uint16(27495), + 167: uint16(30054), + 168: uint16(23822), + 169: uint16(33040), + 170: uint16(40784), + 171: uint16(26071), + 172: uint16(31048), + 173: uint16(31041), + 174: uint16(39569), + 175: uint16(36215), + 176: uint16(23682), + 177: uint16(20062), + 178: uint16(20225), + 179: uint16(21551), + 180: uint16(22865), + 181: uint16(30732), + 182: uint16(22120), + 183: uint16(27668), + 184: uint16(36804), + 185: uint16(24323), + 186: uint16(27773), + 187: uint16(27875), + 188: uint16(35755), + 189: uint16(25488), + }, + 70: { + 0: uint16(33598), + 1: uint16(33599), + 2: uint16(33601), + 3: uint16(33602), + 4: uint16(33604), + 5: uint16(33605), + 6: uint16(33608), + 7: uint16(33610), + 8: uint16(33611), + 9: uint16(33612), + 10: uint16(33613), + 11: uint16(33614), + 12: uint16(33619), + 13: uint16(33621), + 14: uint16(33622), + 15: uint16(33623), + 16: uint16(33624), + 17: uint16(33625), + 18: uint16(33629), + 19: uint16(33634), + 20: uint16(33648), + 21: uint16(33649), + 22: uint16(33650), + 23: uint16(33651), + 24: uint16(33652), + 25: uint16(33653), + 26: uint16(33654), + 27: uint16(33657), + 28: uint16(33658), + 29: uint16(33662), + 30: uint16(33663), + 31: uint16(33664), + 32: uint16(33665), + 33: uint16(33666), + 34: uint16(33667), + 35: uint16(33668), + 36: uint16(33671), + 37: uint16(33672), + 38: uint16(33674), + 39: uint16(33675), + 40: uint16(33676), + 41: uint16(33677), + 42: uint16(33679), + 43: uint16(33680), + 44: uint16(33681), + 45: uint16(33684), + 46: uint16(33685), + 47: uint16(33686), + 48: uint16(33687), + 49: uint16(33689), + 50: uint16(33690), + 51: uint16(33693), + 52: uint16(33695), + 53: uint16(33697), + 54: uint16(33698), + 55: uint16(33699), + 56: uint16(33700), + 57: uint16(33701), + 58: uint16(33702), + 59: uint16(33703), + 60: uint16(33708), + 61: uint16(33709), + 62: uint16(33710), + 63: uint16(33711), + 64: uint16(33717), + 65: uint16(33723), + 66: uint16(33726), + 67: uint16(33727), + 68: uint16(33730), + 69: uint16(33731), + 70: uint16(33732), + 71: uint16(33734), + 72: uint16(33736), + 73: uint16(33737), + 74: uint16(33739), + 75: uint16(33741), + 76: uint16(33742), + 77: uint16(33744), + 78: uint16(33745), + 79: uint16(33746), + 80: uint16(33747), + 81: uint16(33749), + 82: uint16(33751), + 83: uint16(33753), + 84: uint16(33754), + 85: uint16(33755), + 86: uint16(33758), + 87: uint16(33762), + 88: uint16(33763), + 89: uint16(33764), + 90: uint16(33766), + 91: uint16(33767), + 92: uint16(33768), + 93: uint16(33771), + 94: uint16(33772), + 95: uint16(33773), + 96: uint16(24688), + 97: uint16(27965), + 98: uint16(29301), + 99: uint16(25190), + 100: uint16(38030), + 101: uint16(38085), + 102: uint16(21315), + 103: uint16(36801), + 104: uint16(31614), + 105: uint16(20191), + 106: uint16(35878), + 107: uint16(20094), + 108: uint16(40660), + 109: uint16(38065), + 110: uint16(38067), + 111: uint16(21069), + 112: uint16(28508), + 113: uint16(36963), + 114: uint16(27973), + 115: uint16(35892), + 116: uint16(22545), + 117: uint16(23884), + 118: uint16(27424), + 119: uint16(27465), + 120: uint16(26538), + 121: uint16(21595), + 122: uint16(33108), + 123: uint16(32652), + 124: uint16(22681), + 125: uint16(34103), + 126: uint16(24378), + 127: uint16(25250), + 128: uint16(27207), + 129: uint16(38201), + 130: uint16(25970), + 131: uint16(24708), + 132: uint16(26725), + 133: uint16(30631), + 134: uint16(20052), + 135: uint16(20392), + 136: uint16(24039), + 137: uint16(38808), + 138: uint16(25772), + 139: uint16(32728), + 140: uint16(23789), + 141: uint16(20431), + 142: uint16(31373), + 143: uint16(20999), + 144: uint16(33540), + 145: uint16(19988), + 146: uint16(24623), + 147: uint16(31363), + 148: uint16(38054), + 149: uint16(20405), + 150: uint16(20146), + 151: uint16(31206), + 152: uint16(29748), + 153: uint16(21220), + 154: uint16(33465), + 155: uint16(25810), + 156: uint16(31165), + 157: uint16(23517), + 158: uint16(27777), + 159: uint16(38738), + 160: uint16(36731), + 161: uint16(27682), + 162: uint16(20542), + 163: uint16(21375), + 164: uint16(28165), + 165: uint16(25806), + 166: uint16(26228), + 167: uint16(27696), + 168: uint16(24773), + 169: uint16(39031), + 170: uint16(35831), + 171: uint16(24198), + 172: uint16(29756), + 173: uint16(31351), + 174: uint16(31179), + 175: uint16(19992), + 176: uint16(37041), + 177: uint16(29699), + 178: uint16(27714), + 179: uint16(22234), + 180: uint16(37195), + 181: uint16(27845), + 182: uint16(36235), + 183: uint16(21306), + 184: uint16(34502), + 185: uint16(26354), + 186: uint16(36527), + 187: uint16(23624), + 188: uint16(39537), + 189: uint16(28192), + }, + 71: { + 0: uint16(33774), + 1: uint16(33775), + 2: uint16(33779), + 3: uint16(33780), + 4: uint16(33781), + 5: uint16(33782), + 6: uint16(33783), + 7: uint16(33786), + 8: uint16(33787), + 9: uint16(33788), + 10: uint16(33790), + 11: uint16(33791), + 12: uint16(33792), + 13: uint16(33794), + 14: uint16(33797), + 15: uint16(33799), + 16: uint16(33800), + 17: uint16(33801), + 18: uint16(33802), + 19: uint16(33808), + 20: uint16(33810), + 21: uint16(33811), + 22: uint16(33812), + 23: uint16(33813), + 24: uint16(33814), + 25: uint16(33815), + 26: uint16(33817), + 27: uint16(33818), + 28: uint16(33819), + 29: uint16(33822), + 30: uint16(33823), + 31: uint16(33824), + 32: uint16(33825), + 33: uint16(33826), + 34: uint16(33827), + 35: uint16(33833), + 36: uint16(33834), + 37: uint16(33835), + 38: uint16(33836), + 39: uint16(33837), + 40: uint16(33838), + 41: uint16(33839), + 42: uint16(33840), + 43: uint16(33842), + 44: uint16(33843), + 45: uint16(33844), + 46: uint16(33845), + 47: uint16(33846), + 48: uint16(33847), + 49: uint16(33849), + 50: uint16(33850), + 51: uint16(33851), + 52: uint16(33854), + 53: uint16(33855), + 54: uint16(33856), + 55: uint16(33857), + 56: uint16(33858), + 57: uint16(33859), + 58: uint16(33860), + 59: uint16(33861), + 60: uint16(33863), + 61: uint16(33864), + 62: uint16(33865), + 63: uint16(33866), + 64: uint16(33867), + 65: uint16(33868), + 66: uint16(33869), + 67: uint16(33870), + 68: uint16(33871), + 69: uint16(33872), + 70: uint16(33874), + 71: uint16(33875), + 72: uint16(33876), + 73: uint16(33877), + 74: uint16(33878), + 75: uint16(33880), + 76: uint16(33885), + 77: uint16(33886), + 78: uint16(33887), + 79: uint16(33888), + 80: uint16(33890), + 81: uint16(33892), + 82: uint16(33893), + 83: uint16(33894), + 84: uint16(33895), + 85: uint16(33896), + 86: uint16(33898), + 87: uint16(33902), + 88: uint16(33903), + 89: uint16(33904), + 90: uint16(33906), + 91: uint16(33908), + 92: uint16(33911), + 93: uint16(33913), + 94: uint16(33915), + 95: uint16(33916), + 96: uint16(21462), + 97: uint16(23094), + 98: uint16(40843), + 99: uint16(36259), + 100: uint16(21435), + 101: uint16(22280), + 102: uint16(39079), + 103: uint16(26435), + 104: uint16(37275), + 105: uint16(27849), + 106: uint16(20840), + 107: uint16(30154), + 108: uint16(25331), + 109: uint16(29356), + 110: uint16(21048), + 111: uint16(21149), + 112: uint16(32570), + 113: uint16(28820), + 114: uint16(30264), + 115: uint16(21364), + 116: uint16(40522), + 117: uint16(27063), + 118: uint16(30830), + 119: uint16(38592), + 120: uint16(35033), + 121: uint16(32676), + 122: uint16(28982), + 123: uint16(29123), + 124: uint16(20873), + 125: uint16(26579), + 126: uint16(29924), + 127: uint16(22756), + 128: uint16(25880), + 129: uint16(22199), + 130: uint16(35753), + 131: uint16(39286), + 132: uint16(25200), + 133: uint16(32469), + 134: uint16(24825), + 135: uint16(28909), + 136: uint16(22764), + 137: uint16(20161), + 138: uint16(20154), + 139: uint16(24525), + 140: uint16(38887), + 141: uint16(20219), + 142: uint16(35748), + 143: uint16(20995), + 144: uint16(22922), + 145: uint16(32427), + 146: uint16(25172), + 147: uint16(20173), + 148: uint16(26085), + 149: uint16(25102), + 150: uint16(33592), + 151: uint16(33993), + 152: uint16(33635), + 153: uint16(34701), + 154: uint16(29076), + 155: uint16(28342), + 156: uint16(23481), + 157: uint16(32466), + 158: uint16(20887), + 159: uint16(25545), + 160: uint16(26580), + 161: uint16(32905), + 162: uint16(33593), + 163: uint16(34837), + 164: uint16(20754), + 165: uint16(23418), + 166: uint16(22914), + 167: uint16(36785), + 168: uint16(20083), + 169: uint16(27741), + 170: uint16(20837), + 171: uint16(35109), + 172: uint16(36719), + 173: uint16(38446), + 174: uint16(34122), + 175: uint16(29790), + 176: uint16(38160), + 177: uint16(38384), + 178: uint16(28070), + 179: uint16(33509), + 180: uint16(24369), + 181: uint16(25746), + 182: uint16(27922), + 183: uint16(33832), + 184: uint16(33134), + 185: uint16(40131), + 186: uint16(22622), + 187: uint16(36187), + 188: uint16(19977), + 189: uint16(21441), + }, + 72: { + 0: uint16(33917), + 1: uint16(33918), + 2: uint16(33919), + 3: uint16(33920), + 4: uint16(33921), + 5: uint16(33923), + 6: uint16(33924), + 7: uint16(33925), + 8: uint16(33926), + 9: uint16(33930), + 10: uint16(33933), + 11: uint16(33935), + 12: uint16(33936), + 13: uint16(33937), + 14: uint16(33938), + 15: uint16(33939), + 16: uint16(33940), + 17: uint16(33941), + 18: uint16(33942), + 19: uint16(33944), + 20: uint16(33946), + 21: uint16(33947), + 22: uint16(33949), + 23: uint16(33950), + 24: uint16(33951), + 25: uint16(33952), + 26: uint16(33954), + 27: uint16(33955), + 28: uint16(33956), + 29: uint16(33957), + 30: uint16(33958), + 31: uint16(33959), + 32: uint16(33960), + 33: uint16(33961), + 34: uint16(33962), + 35: uint16(33963), + 36: uint16(33964), + 37: uint16(33965), + 38: uint16(33966), + 39: uint16(33968), + 40: uint16(33969), + 41: uint16(33971), + 42: uint16(33973), + 43: uint16(33974), + 44: uint16(33975), + 45: uint16(33979), + 46: uint16(33980), + 47: uint16(33982), + 48: uint16(33984), + 49: uint16(33986), + 50: uint16(33987), + 51: uint16(33989), + 52: uint16(33990), + 53: uint16(33991), + 54: uint16(33992), + 55: uint16(33995), + 56: uint16(33996), + 57: uint16(33998), + 58: uint16(33999), + 59: uint16(34002), + 60: uint16(34004), + 61: uint16(34005), + 62: uint16(34007), + 63: uint16(34008), + 64: uint16(34009), + 65: uint16(34010), + 66: uint16(34011), + 67: uint16(34012), + 68: uint16(34014), + 69: uint16(34017), + 70: uint16(34018), + 71: uint16(34020), + 72: uint16(34023), + 73: uint16(34024), + 74: uint16(34025), + 75: uint16(34026), + 76: uint16(34027), + 77: uint16(34029), + 78: uint16(34030), + 79: uint16(34031), + 80: uint16(34033), + 81: uint16(34034), + 82: uint16(34035), + 83: uint16(34036), + 84: uint16(34037), + 85: uint16(34038), + 86: uint16(34039), + 87: uint16(34040), + 88: uint16(34041), + 89: uint16(34042), + 90: uint16(34043), + 91: uint16(34045), + 92: uint16(34046), + 93: uint16(34048), + 94: uint16(34049), + 95: uint16(34050), + 96: uint16(20254), + 97: uint16(25955), + 98: uint16(26705), + 99: uint16(21971), + 100: uint16(20007), + 101: uint16(25620), + 102: uint16(39578), + 103: uint16(25195), + 104: uint16(23234), + 105: uint16(29791), + 106: uint16(33394), + 107: uint16(28073), + 108: uint16(26862), + 109: uint16(20711), + 110: uint16(33678), + 111: uint16(30722), + 112: uint16(26432), + 113: uint16(21049), + 114: uint16(27801), + 115: uint16(32433), + 116: uint16(20667), + 117: uint16(21861), + 118: uint16(29022), + 119: uint16(31579), + 120: uint16(26194), + 121: uint16(29642), + 122: uint16(33515), + 123: uint16(26441), + 124: uint16(23665), + 125: uint16(21024), + 126: uint16(29053), + 127: uint16(34923), + 128: uint16(38378), + 129: uint16(38485), + 130: uint16(25797), + 131: uint16(36193), + 132: uint16(33203), + 133: uint16(21892), + 134: uint16(27733), + 135: uint16(25159), + 136: uint16(32558), + 137: uint16(22674), + 138: uint16(20260), + 139: uint16(21830), + 140: uint16(36175), + 141: uint16(26188), + 142: uint16(19978), + 143: uint16(23578), + 144: uint16(35059), + 145: uint16(26786), + 146: uint16(25422), + 147: uint16(31245), + 148: uint16(28903), + 149: uint16(33421), + 150: uint16(21242), + 151: uint16(38902), + 152: uint16(23569), + 153: uint16(21736), + 154: uint16(37045), + 155: uint16(32461), + 156: uint16(22882), + 157: uint16(36170), + 158: uint16(34503), + 159: uint16(33292), + 160: uint16(33293), + 161: uint16(36198), + 162: uint16(25668), + 163: uint16(23556), + 164: uint16(24913), + 165: uint16(28041), + 166: uint16(31038), + 167: uint16(35774), + 168: uint16(30775), + 169: uint16(30003), + 170: uint16(21627), + 171: uint16(20280), + 172: uint16(36523), + 173: uint16(28145), + 174: uint16(23072), + 175: uint16(32453), + 176: uint16(31070), + 177: uint16(27784), + 178: uint16(23457), + 179: uint16(23158), + 180: uint16(29978), + 181: uint16(32958), + 182: uint16(24910), + 183: uint16(28183), + 184: uint16(22768), + 185: uint16(29983), + 186: uint16(29989), + 187: uint16(29298), + 188: uint16(21319), + 189: uint16(32499), + }, + 73: { + 0: uint16(34051), + 1: uint16(34052), + 2: uint16(34053), + 3: uint16(34054), + 4: uint16(34055), + 5: uint16(34056), + 6: uint16(34057), + 7: uint16(34058), + 8: uint16(34059), + 9: uint16(34061), + 10: uint16(34062), + 11: uint16(34063), + 12: uint16(34064), + 13: uint16(34066), + 14: uint16(34068), + 15: uint16(34069), + 16: uint16(34070), + 17: uint16(34072), + 18: uint16(34073), + 19: uint16(34075), + 20: uint16(34076), + 21: uint16(34077), + 22: uint16(34078), + 23: uint16(34080), + 24: uint16(34082), + 25: uint16(34083), + 26: uint16(34084), + 27: uint16(34085), + 28: uint16(34086), + 29: uint16(34087), + 30: uint16(34088), + 31: uint16(34089), + 32: uint16(34090), + 33: uint16(34093), + 34: uint16(34094), + 35: uint16(34095), + 36: uint16(34096), + 37: uint16(34097), + 38: uint16(34098), + 39: uint16(34099), + 40: uint16(34100), + 41: uint16(34101), + 42: uint16(34102), + 43: uint16(34110), + 44: uint16(34111), + 45: uint16(34112), + 46: uint16(34113), + 47: uint16(34114), + 48: uint16(34116), + 49: uint16(34117), + 50: uint16(34118), + 51: uint16(34119), + 52: uint16(34123), + 53: uint16(34124), + 54: uint16(34125), + 55: uint16(34126), + 56: uint16(34127), + 57: uint16(34128), + 58: uint16(34129), + 59: uint16(34130), + 60: uint16(34131), + 61: uint16(34132), + 62: uint16(34133), + 63: uint16(34135), + 64: uint16(34136), + 65: uint16(34138), + 66: uint16(34139), + 67: uint16(34140), + 68: uint16(34141), + 69: uint16(34143), + 70: uint16(34144), + 71: uint16(34145), + 72: uint16(34146), + 73: uint16(34147), + 74: uint16(34149), + 75: uint16(34150), + 76: uint16(34151), + 77: uint16(34153), + 78: uint16(34154), + 79: uint16(34155), + 80: uint16(34156), + 81: uint16(34157), + 82: uint16(34158), + 83: uint16(34159), + 84: uint16(34160), + 85: uint16(34161), + 86: uint16(34163), + 87: uint16(34165), + 88: uint16(34166), + 89: uint16(34167), + 90: uint16(34168), + 91: uint16(34172), + 92: uint16(34173), + 93: uint16(34175), + 94: uint16(34176), + 95: uint16(34177), + 96: uint16(30465), + 97: uint16(30427), + 98: uint16(21097), + 99: uint16(32988), + 100: uint16(22307), + 101: uint16(24072), + 102: uint16(22833), + 103: uint16(29422), + 104: uint16(26045), + 105: uint16(28287), + 106: uint16(35799), + 107: uint16(23608), + 108: uint16(34417), + 109: uint16(21313), + 110: uint16(30707), + 111: uint16(25342), + 112: uint16(26102), + 113: uint16(20160), + 114: uint16(39135), + 115: uint16(34432), + 116: uint16(23454), + 117: uint16(35782), + 118: uint16(21490), + 119: uint16(30690), + 120: uint16(20351), + 121: uint16(23630), + 122: uint16(39542), + 123: uint16(22987), + 124: uint16(24335), + 125: uint16(31034), + 126: uint16(22763), + 127: uint16(19990), + 128: uint16(26623), + 129: uint16(20107), + 130: uint16(25325), + 131: uint16(35475), + 132: uint16(36893), + 133: uint16(21183), + 134: uint16(26159), + 135: uint16(21980), + 136: uint16(22124), + 137: uint16(36866), + 138: uint16(20181), + 139: uint16(20365), + 140: uint16(37322), + 141: uint16(39280), + 142: uint16(27663), + 143: uint16(24066), + 144: uint16(24643), + 145: uint16(23460), + 146: uint16(35270), + 147: uint16(35797), + 148: uint16(25910), + 149: uint16(25163), + 150: uint16(39318), + 151: uint16(23432), + 152: uint16(23551), + 153: uint16(25480), + 154: uint16(21806), + 155: uint16(21463), + 156: uint16(30246), + 157: uint16(20861), + 158: uint16(34092), + 159: uint16(26530), + 160: uint16(26803), + 161: uint16(27530), + 162: uint16(25234), + 163: uint16(36755), + 164: uint16(21460), + 165: uint16(33298), + 166: uint16(28113), + 167: uint16(30095), + 168: uint16(20070), + 169: uint16(36174), + 170: uint16(23408), + 171: uint16(29087), + 172: uint16(34223), + 173: uint16(26257), + 174: uint16(26329), + 175: uint16(32626), + 176: uint16(34560), + 177: uint16(40653), + 178: uint16(40736), + 179: uint16(23646), + 180: uint16(26415), + 181: uint16(36848), + 182: uint16(26641), + 183: uint16(26463), + 184: uint16(25101), + 185: uint16(31446), + 186: uint16(22661), + 187: uint16(24246), + 188: uint16(25968), + 189: uint16(28465), + }, + 74: { + 0: uint16(34178), + 1: uint16(34179), + 2: uint16(34182), + 3: uint16(34184), + 4: uint16(34185), + 5: uint16(34186), + 6: uint16(34187), + 7: uint16(34188), + 8: uint16(34189), + 9: uint16(34190), + 10: uint16(34192), + 11: uint16(34193), + 12: uint16(34194), + 13: uint16(34195), + 14: uint16(34196), + 15: uint16(34197), + 16: uint16(34198), + 17: uint16(34199), + 18: uint16(34200), + 19: uint16(34201), + 20: uint16(34202), + 21: uint16(34205), + 22: uint16(34206), + 23: uint16(34207), + 24: uint16(34208), + 25: uint16(34209), + 26: uint16(34210), + 27: uint16(34211), + 28: uint16(34213), + 29: uint16(34214), + 30: uint16(34215), + 31: uint16(34217), + 32: uint16(34219), + 33: uint16(34220), + 34: uint16(34221), + 35: uint16(34225), + 36: uint16(34226), + 37: uint16(34227), + 38: uint16(34228), + 39: uint16(34229), + 40: uint16(34230), + 41: uint16(34232), + 42: uint16(34234), + 43: uint16(34235), + 44: uint16(34236), + 45: uint16(34237), + 46: uint16(34238), + 47: uint16(34239), + 48: uint16(34240), + 49: uint16(34242), + 50: uint16(34243), + 51: uint16(34244), + 52: uint16(34245), + 53: uint16(34246), + 54: uint16(34247), + 55: uint16(34248), + 56: uint16(34250), + 57: uint16(34251), + 58: uint16(34252), + 59: uint16(34253), + 60: uint16(34254), + 61: uint16(34257), + 62: uint16(34258), + 63: uint16(34260), + 64: uint16(34262), + 65: uint16(34263), + 66: uint16(34264), + 67: uint16(34265), + 68: uint16(34266), + 69: uint16(34267), + 70: uint16(34269), + 71: uint16(34270), + 72: uint16(34271), + 73: uint16(34272), + 74: uint16(34273), + 75: uint16(34274), + 76: uint16(34275), + 77: uint16(34277), + 78: uint16(34278), + 79: uint16(34279), + 80: uint16(34280), + 81: uint16(34282), + 82: uint16(34283), + 83: uint16(34284), + 84: uint16(34285), + 85: uint16(34286), + 86: uint16(34287), + 87: uint16(34288), + 88: uint16(34289), + 89: uint16(34290), + 90: uint16(34291), + 91: uint16(34292), + 92: uint16(34293), + 93: uint16(34294), + 94: uint16(34295), + 95: uint16(34296), + 96: uint16(24661), + 97: uint16(21047), + 98: uint16(32781), + 99: uint16(25684), + 100: uint16(34928), + 101: uint16(29993), + 102: uint16(24069), + 103: uint16(26643), + 104: uint16(25332), + 105: uint16(38684), + 106: uint16(21452), + 107: uint16(29245), + 108: uint16(35841), + 109: uint16(27700), + 110: uint16(30561), + 111: uint16(31246), + 112: uint16(21550), + 113: uint16(30636), + 114: uint16(39034), + 115: uint16(33308), + 116: uint16(35828), + 117: uint16(30805), + 118: uint16(26388), + 119: uint16(28865), + 120: uint16(26031), + 121: uint16(25749), + 122: uint16(22070), + 123: uint16(24605), + 124: uint16(31169), + 125: uint16(21496), + 126: uint16(19997), + 127: uint16(27515), + 128: uint16(32902), + 129: uint16(23546), + 130: uint16(21987), + 131: uint16(22235), + 132: uint16(20282), + 133: uint16(20284), + 134: uint16(39282), + 135: uint16(24051), + 136: uint16(26494), + 137: uint16(32824), + 138: uint16(24578), + 139: uint16(39042), + 140: uint16(36865), + 141: uint16(23435), + 142: uint16(35772), + 143: uint16(35829), + 144: uint16(25628), + 145: uint16(33368), + 146: uint16(25822), + 147: uint16(22013), + 148: uint16(33487), + 149: uint16(37221), + 150: uint16(20439), + 151: uint16(32032), + 152: uint16(36895), + 153: uint16(31903), + 154: uint16(20723), + 155: uint16(22609), + 156: uint16(28335), + 157: uint16(23487), + 158: uint16(35785), + 159: uint16(32899), + 160: uint16(37240), + 161: uint16(33948), + 162: uint16(31639), + 163: uint16(34429), + 164: uint16(38539), + 165: uint16(38543), + 166: uint16(32485), + 167: uint16(39635), + 168: uint16(30862), + 169: uint16(23681), + 170: uint16(31319), + 171: uint16(36930), + 172: uint16(38567), + 173: uint16(31071), + 174: uint16(23385), + 175: uint16(25439), + 176: uint16(31499), + 177: uint16(34001), + 178: uint16(26797), + 179: uint16(21766), + 180: uint16(32553), + 181: uint16(29712), + 182: uint16(32034), + 183: uint16(38145), + 184: uint16(25152), + 185: uint16(22604), + 186: uint16(20182), + 187: uint16(23427), + 188: uint16(22905), + 189: uint16(22612), + }, + 75: { + 0: uint16(34297), + 1: uint16(34298), + 2: uint16(34300), + 3: uint16(34301), + 4: uint16(34302), + 5: uint16(34304), + 6: uint16(34305), + 7: uint16(34306), + 8: uint16(34307), + 9: uint16(34308), + 10: uint16(34310), + 11: uint16(34311), + 12: uint16(34312), + 13: uint16(34313), + 14: uint16(34314), + 15: uint16(34315), + 16: uint16(34316), + 17: uint16(34317), + 18: uint16(34318), + 19: uint16(34319), + 20: uint16(34320), + 21: uint16(34322), + 22: uint16(34323), + 23: uint16(34324), + 24: uint16(34325), + 25: uint16(34327), + 26: uint16(34328), + 27: uint16(34329), + 28: uint16(34330), + 29: uint16(34331), + 30: uint16(34332), + 31: uint16(34333), + 32: uint16(34334), + 33: uint16(34335), + 34: uint16(34336), + 35: uint16(34337), + 36: uint16(34338), + 37: uint16(34339), + 38: uint16(34340), + 39: uint16(34341), + 40: uint16(34342), + 41: uint16(34344), + 42: uint16(34346), + 43: uint16(34347), + 44: uint16(34348), + 45: uint16(34349), + 46: uint16(34350), + 47: uint16(34351), + 48: uint16(34352), + 49: uint16(34353), + 50: uint16(34354), + 51: uint16(34355), + 52: uint16(34356), + 53: uint16(34357), + 54: uint16(34358), + 55: uint16(34359), + 56: uint16(34361), + 57: uint16(34362), + 58: uint16(34363), + 59: uint16(34365), + 60: uint16(34366), + 61: uint16(34367), + 62: uint16(34368), + 63: uint16(34369), + 64: uint16(34370), + 65: uint16(34371), + 66: uint16(34372), + 67: uint16(34373), + 68: uint16(34374), + 69: uint16(34375), + 70: uint16(34376), + 71: uint16(34377), + 72: uint16(34378), + 73: uint16(34379), + 74: uint16(34380), + 75: uint16(34386), + 76: uint16(34387), + 77: uint16(34389), + 78: uint16(34390), + 79: uint16(34391), + 80: uint16(34392), + 81: uint16(34393), + 82: uint16(34395), + 83: uint16(34396), + 84: uint16(34397), + 85: uint16(34399), + 86: uint16(34400), + 87: uint16(34401), + 88: uint16(34403), + 89: uint16(34404), + 90: uint16(34405), + 91: uint16(34406), + 92: uint16(34407), + 93: uint16(34408), + 94: uint16(34409), + 95: uint16(34410), + 96: uint16(29549), + 97: uint16(25374), + 98: uint16(36427), + 99: uint16(36367), + 100: uint16(32974), + 101: uint16(33492), + 102: uint16(25260), + 103: uint16(21488), + 104: uint16(27888), + 105: uint16(37214), + 106: uint16(22826), + 107: uint16(24577), + 108: uint16(27760), + 109: uint16(22349), + 110: uint16(25674), + 111: uint16(36138), + 112: uint16(30251), + 113: uint16(28393), + 114: uint16(22363), + 115: uint16(27264), + 116: uint16(30192), + 117: uint16(28525), + 118: uint16(35885), + 119: uint16(35848), + 120: uint16(22374), + 121: uint16(27631), + 122: uint16(34962), + 123: uint16(30899), + 124: uint16(25506), + 125: uint16(21497), + 126: uint16(28845), + 127: uint16(27748), + 128: uint16(22616), + 129: uint16(25642), + 130: uint16(22530), + 131: uint16(26848), + 132: uint16(33179), + 133: uint16(21776), + 134: uint16(31958), + 135: uint16(20504), + 136: uint16(36538), + 137: uint16(28108), + 138: uint16(36255), + 139: uint16(28907), + 140: uint16(25487), + 141: uint16(28059), + 142: uint16(28372), + 143: uint16(32486), + 144: uint16(33796), + 145: uint16(26691), + 146: uint16(36867), + 147: uint16(28120), + 148: uint16(38518), + 149: uint16(35752), + 150: uint16(22871), + 151: uint16(29305), + 152: uint16(34276), + 153: uint16(33150), + 154: uint16(30140), + 155: uint16(35466), + 156: uint16(26799), + 157: uint16(21076), + 158: uint16(36386), + 159: uint16(38161), + 160: uint16(25552), + 161: uint16(39064), + 162: uint16(36420), + 163: uint16(21884), + 164: uint16(20307), + 165: uint16(26367), + 166: uint16(22159), + 167: uint16(24789), + 168: uint16(28053), + 169: uint16(21059), + 170: uint16(23625), + 171: uint16(22825), + 172: uint16(28155), + 173: uint16(22635), + 174: uint16(30000), + 175: uint16(29980), + 176: uint16(24684), + 177: uint16(33300), + 178: uint16(33094), + 179: uint16(25361), + 180: uint16(26465), + 181: uint16(36834), + 182: uint16(30522), + 183: uint16(36339), + 184: uint16(36148), + 185: uint16(38081), + 186: uint16(24086), + 187: uint16(21381), + 188: uint16(21548), + 189: uint16(28867), + }, + 76: { + 0: uint16(34413), + 1: uint16(34415), + 2: uint16(34416), + 3: uint16(34418), + 4: uint16(34419), + 5: uint16(34420), + 6: uint16(34421), + 7: uint16(34422), + 8: uint16(34423), + 9: uint16(34424), + 10: uint16(34435), + 11: uint16(34436), + 12: uint16(34437), + 13: uint16(34438), + 14: uint16(34439), + 15: uint16(34440), + 16: uint16(34441), + 17: uint16(34446), + 18: uint16(34447), + 19: uint16(34448), + 20: uint16(34449), + 21: uint16(34450), + 22: uint16(34452), + 23: uint16(34454), + 24: uint16(34455), + 25: uint16(34456), + 26: uint16(34457), + 27: uint16(34458), + 28: uint16(34459), + 29: uint16(34462), + 30: uint16(34463), + 31: uint16(34464), + 32: uint16(34465), + 33: uint16(34466), + 34: uint16(34469), + 35: uint16(34470), + 36: uint16(34475), + 37: uint16(34477), + 38: uint16(34478), + 39: uint16(34482), + 40: uint16(34483), + 41: uint16(34487), + 42: uint16(34488), + 43: uint16(34489), + 44: uint16(34491), + 45: uint16(34492), + 46: uint16(34493), + 47: uint16(34494), + 48: uint16(34495), + 49: uint16(34497), + 50: uint16(34498), + 51: uint16(34499), + 52: uint16(34501), + 53: uint16(34504), + 54: uint16(34508), + 55: uint16(34509), + 56: uint16(34514), + 57: uint16(34515), + 58: uint16(34517), + 59: uint16(34518), + 60: uint16(34519), + 61: uint16(34522), + 62: uint16(34524), + 63: uint16(34525), + 64: uint16(34528), + 65: uint16(34529), + 66: uint16(34530), + 67: uint16(34531), + 68: uint16(34533), + 69: uint16(34534), + 70: uint16(34535), + 71: uint16(34536), + 72: uint16(34538), + 73: uint16(34539), + 74: uint16(34540), + 75: uint16(34543), + 76: uint16(34549), + 77: uint16(34550), + 78: uint16(34551), + 79: uint16(34554), + 80: uint16(34555), + 81: uint16(34556), + 82: uint16(34557), + 83: uint16(34559), + 84: uint16(34561), + 85: uint16(34564), + 86: uint16(34565), + 87: uint16(34566), + 88: uint16(34571), + 89: uint16(34572), + 90: uint16(34574), + 91: uint16(34575), + 92: uint16(34576), + 93: uint16(34577), + 94: uint16(34580), + 95: uint16(34582), + 96: uint16(27712), + 97: uint16(24311), + 98: uint16(20572), + 99: uint16(20141), + 100: uint16(24237), + 101: uint16(25402), + 102: uint16(33351), + 103: uint16(36890), + 104: uint16(26704), + 105: uint16(37230), + 106: uint16(30643), + 107: uint16(21516), + 108: uint16(38108), + 109: uint16(24420), + 110: uint16(31461), + 111: uint16(26742), + 112: uint16(25413), + 113: uint16(31570), + 114: uint16(32479), + 115: uint16(30171), + 116: uint16(20599), + 117: uint16(25237), + 118: uint16(22836), + 119: uint16(36879), + 120: uint16(20984), + 121: uint16(31171), + 122: uint16(31361), + 123: uint16(22270), + 124: uint16(24466), + 125: uint16(36884), + 126: uint16(28034), + 127: uint16(23648), + 128: uint16(22303), + 129: uint16(21520), + 130: uint16(20820), + 131: uint16(28237), + 132: uint16(22242), + 133: uint16(25512), + 134: uint16(39059), + 135: uint16(33151), + 136: uint16(34581), + 137: uint16(35114), + 138: uint16(36864), + 139: uint16(21534), + 140: uint16(23663), + 141: uint16(33216), + 142: uint16(25302), + 143: uint16(25176), + 144: uint16(33073), + 145: uint16(40501), + 146: uint16(38464), + 147: uint16(39534), + 148: uint16(39548), + 149: uint16(26925), + 150: uint16(22949), + 151: uint16(25299), + 152: uint16(21822), + 153: uint16(25366), + 154: uint16(21703), + 155: uint16(34521), + 156: uint16(27964), + 157: uint16(23043), + 158: uint16(29926), + 159: uint16(34972), + 160: uint16(27498), + 161: uint16(22806), + 162: uint16(35916), + 163: uint16(24367), + 164: uint16(28286), + 165: uint16(29609), + 166: uint16(39037), + 167: uint16(20024), + 168: uint16(28919), + 169: uint16(23436), + 170: uint16(30871), + 171: uint16(25405), + 172: uint16(26202), + 173: uint16(30358), + 174: uint16(24779), + 175: uint16(23451), + 176: uint16(23113), + 177: uint16(19975), + 178: uint16(33109), + 179: uint16(27754), + 180: uint16(29579), + 181: uint16(20129), + 182: uint16(26505), + 183: uint16(32593), + 184: uint16(24448), + 185: uint16(26106), + 186: uint16(26395), + 187: uint16(24536), + 188: uint16(22916), + 189: uint16(23041), + }, + 77: { + 0: uint16(34585), + 1: uint16(34587), + 2: uint16(34589), + 3: uint16(34591), + 4: uint16(34592), + 5: uint16(34596), + 6: uint16(34598), + 7: uint16(34599), + 8: uint16(34600), + 9: uint16(34602), + 10: uint16(34603), + 11: uint16(34604), + 12: uint16(34605), + 13: uint16(34607), + 14: uint16(34608), + 15: uint16(34610), + 16: uint16(34611), + 17: uint16(34613), + 18: uint16(34614), + 19: uint16(34616), + 20: uint16(34617), + 21: uint16(34618), + 22: uint16(34620), + 23: uint16(34621), + 24: uint16(34624), + 25: uint16(34625), + 26: uint16(34626), + 27: uint16(34627), + 28: uint16(34628), + 29: uint16(34629), + 30: uint16(34630), + 31: uint16(34634), + 32: uint16(34635), + 33: uint16(34637), + 34: uint16(34639), + 35: uint16(34640), + 36: uint16(34641), + 37: uint16(34642), + 38: uint16(34644), + 39: uint16(34645), + 40: uint16(34646), + 41: uint16(34648), + 42: uint16(34650), + 43: uint16(34651), + 44: uint16(34652), + 45: uint16(34653), + 46: uint16(34654), + 47: uint16(34655), + 48: uint16(34657), + 49: uint16(34658), + 50: uint16(34662), + 51: uint16(34663), + 52: uint16(34664), + 53: uint16(34665), + 54: uint16(34666), + 55: uint16(34667), + 56: uint16(34668), + 57: uint16(34669), + 58: uint16(34671), + 59: uint16(34673), + 60: uint16(34674), + 61: uint16(34675), + 62: uint16(34677), + 63: uint16(34679), + 64: uint16(34680), + 65: uint16(34681), + 66: uint16(34682), + 67: uint16(34687), + 68: uint16(34688), + 69: uint16(34689), + 70: uint16(34692), + 71: uint16(34694), + 72: uint16(34695), + 73: uint16(34697), + 74: uint16(34698), + 75: uint16(34700), + 76: uint16(34702), + 77: uint16(34703), + 78: uint16(34704), + 79: uint16(34705), + 80: uint16(34706), + 81: uint16(34708), + 82: uint16(34709), + 83: uint16(34710), + 84: uint16(34712), + 85: uint16(34713), + 86: uint16(34714), + 87: uint16(34715), + 88: uint16(34716), + 89: uint16(34717), + 90: uint16(34718), + 91: uint16(34720), + 92: uint16(34721), + 93: uint16(34722), + 94: uint16(34723), + 95: uint16(34724), + 96: uint16(24013), + 97: uint16(24494), + 98: uint16(21361), + 99: uint16(38886), + 100: uint16(36829), + 101: uint16(26693), + 102: uint16(22260), + 103: uint16(21807), + 104: uint16(24799), + 105: uint16(20026), + 106: uint16(28493), + 107: uint16(32500), + 108: uint16(33479), + 109: uint16(33806), + 110: uint16(22996), + 111: uint16(20255), + 112: uint16(20266), + 113: uint16(23614), + 114: uint16(32428), + 115: uint16(26410), + 116: uint16(34074), + 117: uint16(21619), + 118: uint16(30031), + 119: uint16(32963), + 120: uint16(21890), + 121: uint16(39759), + 122: uint16(20301), + 123: uint16(28205), + 124: uint16(35859), + 125: uint16(23561), + 126: uint16(24944), + 127: uint16(21355), + 128: uint16(30239), + 129: uint16(28201), + 130: uint16(34442), + 131: uint16(25991), + 132: uint16(38395), + 133: uint16(32441), + 134: uint16(21563), + 135: uint16(31283), + 136: uint16(32010), + 137: uint16(38382), + 138: uint16(21985), + 139: uint16(32705), + 140: uint16(29934), + 141: uint16(25373), + 142: uint16(34583), + 143: uint16(28065), + 144: uint16(31389), + 145: uint16(25105), + 146: uint16(26017), + 147: uint16(21351), + 148: uint16(25569), + 149: uint16(27779), + 150: uint16(24043), + 151: uint16(21596), + 152: uint16(38056), + 153: uint16(20044), + 154: uint16(27745), + 155: uint16(35820), + 156: uint16(23627), + 157: uint16(26080), + 158: uint16(33436), + 159: uint16(26791), + 160: uint16(21566), + 161: uint16(21556), + 162: uint16(27595), + 163: uint16(27494), + 164: uint16(20116), + 165: uint16(25410), + 166: uint16(21320), + 167: uint16(33310), + 168: uint16(20237), + 169: uint16(20398), + 170: uint16(22366), + 171: uint16(25098), + 172: uint16(38654), + 173: uint16(26212), + 174: uint16(29289), + 175: uint16(21247), + 176: uint16(21153), + 177: uint16(24735), + 178: uint16(35823), + 179: uint16(26132), + 180: uint16(29081), + 181: uint16(26512), + 182: uint16(35199), + 183: uint16(30802), + 184: uint16(30717), + 185: uint16(26224), + 186: uint16(22075), + 187: uint16(21560), + 188: uint16(38177), + 189: uint16(29306), + }, + 78: { + 0: uint16(34725), + 1: uint16(34726), + 2: uint16(34727), + 3: uint16(34729), + 4: uint16(34730), + 5: uint16(34734), + 6: uint16(34736), + 7: uint16(34737), + 8: uint16(34738), + 9: uint16(34740), + 10: uint16(34742), + 11: uint16(34743), + 12: uint16(34744), + 13: uint16(34745), + 14: uint16(34747), + 15: uint16(34748), + 16: uint16(34750), + 17: uint16(34751), + 18: uint16(34753), + 19: uint16(34754), + 20: uint16(34755), + 21: uint16(34756), + 22: uint16(34757), + 23: uint16(34759), + 24: uint16(34760), + 25: uint16(34761), + 26: uint16(34764), + 27: uint16(34765), + 28: uint16(34766), + 29: uint16(34767), + 30: uint16(34768), + 31: uint16(34772), + 32: uint16(34773), + 33: uint16(34774), + 34: uint16(34775), + 35: uint16(34776), + 36: uint16(34777), + 37: uint16(34778), + 38: uint16(34780), + 39: uint16(34781), + 40: uint16(34782), + 41: uint16(34783), + 42: uint16(34785), + 43: uint16(34786), + 44: uint16(34787), + 45: uint16(34788), + 46: uint16(34790), + 47: uint16(34791), + 48: uint16(34792), + 49: uint16(34793), + 50: uint16(34795), + 51: uint16(34796), + 52: uint16(34797), + 53: uint16(34799), + 54: uint16(34800), + 55: uint16(34801), + 56: uint16(34802), + 57: uint16(34803), + 58: uint16(34804), + 59: uint16(34805), + 60: uint16(34806), + 61: uint16(34807), + 62: uint16(34808), + 63: uint16(34810), + 64: uint16(34811), + 65: uint16(34812), + 66: uint16(34813), + 67: uint16(34815), + 68: uint16(34816), + 69: uint16(34817), + 70: uint16(34818), + 71: uint16(34820), + 72: uint16(34821), + 73: uint16(34822), + 74: uint16(34823), + 75: uint16(34824), + 76: uint16(34825), + 77: uint16(34827), + 78: uint16(34828), + 79: uint16(34829), + 80: uint16(34830), + 81: uint16(34831), + 82: uint16(34832), + 83: uint16(34833), + 84: uint16(34834), + 85: uint16(34836), + 86: uint16(34839), + 87: uint16(34840), + 88: uint16(34841), + 89: uint16(34842), + 90: uint16(34844), + 91: uint16(34845), + 92: uint16(34846), + 93: uint16(34847), + 94: uint16(34848), + 95: uint16(34851), + 96: uint16(31232), + 97: uint16(24687), + 98: uint16(24076), + 99: uint16(24713), + 100: uint16(33181), + 101: uint16(22805), + 102: uint16(24796), + 103: uint16(29060), + 104: uint16(28911), + 105: uint16(28330), + 106: uint16(27728), + 107: uint16(29312), + 108: uint16(27268), + 109: uint16(34989), + 110: uint16(24109), + 111: uint16(20064), + 112: uint16(23219), + 113: uint16(21916), + 114: uint16(38115), + 115: uint16(27927), + 116: uint16(31995), + 117: uint16(38553), + 118: uint16(25103), + 119: uint16(32454), + 120: uint16(30606), + 121: uint16(34430), + 122: uint16(21283), + 123: uint16(38686), + 124: uint16(36758), + 125: uint16(26247), + 126: uint16(23777), + 127: uint16(20384), + 128: uint16(29421), + 129: uint16(19979), + 130: uint16(21414), + 131: uint16(22799), + 132: uint16(21523), + 133: uint16(25472), + 134: uint16(38184), + 135: uint16(20808), + 136: uint16(20185), + 137: uint16(40092), + 138: uint16(32420), + 139: uint16(21688), + 140: uint16(36132), + 141: uint16(34900), + 142: uint16(33335), + 143: uint16(38386), + 144: uint16(28046), + 145: uint16(24358), + 146: uint16(23244), + 147: uint16(26174), + 148: uint16(38505), + 149: uint16(29616), + 150: uint16(29486), + 151: uint16(21439), + 152: uint16(33146), + 153: uint16(39301), + 154: uint16(32673), + 155: uint16(23466), + 156: uint16(38519), + 157: uint16(38480), + 158: uint16(32447), + 159: uint16(30456), + 160: uint16(21410), + 161: uint16(38262), + 162: uint16(39321), + 163: uint16(31665), + 164: uint16(35140), + 165: uint16(28248), + 166: uint16(20065), + 167: uint16(32724), + 168: uint16(31077), + 169: uint16(35814), + 170: uint16(24819), + 171: uint16(21709), + 172: uint16(20139), + 173: uint16(39033), + 174: uint16(24055), + 175: uint16(27233), + 176: uint16(20687), + 177: uint16(21521), + 178: uint16(35937), + 179: uint16(33831), + 180: uint16(30813), + 181: uint16(38660), + 182: uint16(21066), + 183: uint16(21742), + 184: uint16(22179), + 185: uint16(38144), + 186: uint16(28040), + 187: uint16(23477), + 188: uint16(28102), + 189: uint16(26195), + }, + 79: { + 0: uint16(34852), + 1: uint16(34853), + 2: uint16(34854), + 3: uint16(34855), + 4: uint16(34856), + 5: uint16(34857), + 6: uint16(34858), + 7: uint16(34859), + 8: uint16(34860), + 9: uint16(34861), + 10: uint16(34862), + 11: uint16(34863), + 12: uint16(34864), + 13: uint16(34865), + 14: uint16(34867), + 15: uint16(34868), + 16: uint16(34869), + 17: uint16(34870), + 18: uint16(34871), + 19: uint16(34872), + 20: uint16(34874), + 21: uint16(34875), + 22: uint16(34877), + 23: uint16(34878), + 24: uint16(34879), + 25: uint16(34881), + 26: uint16(34882), + 27: uint16(34883), + 28: uint16(34886), + 29: uint16(34887), + 30: uint16(34888), + 31: uint16(34889), + 32: uint16(34890), + 33: uint16(34891), + 34: uint16(34894), + 35: uint16(34895), + 36: uint16(34896), + 37: uint16(34897), + 38: uint16(34898), + 39: uint16(34899), + 40: uint16(34901), + 41: uint16(34902), + 42: uint16(34904), + 43: uint16(34906), + 44: uint16(34907), + 45: uint16(34908), + 46: uint16(34909), + 47: uint16(34910), + 48: uint16(34911), + 49: uint16(34912), + 50: uint16(34918), + 51: uint16(34919), + 52: uint16(34922), + 53: uint16(34925), + 54: uint16(34927), + 55: uint16(34929), + 56: uint16(34931), + 57: uint16(34932), + 58: uint16(34933), + 59: uint16(34934), + 60: uint16(34936), + 61: uint16(34937), + 62: uint16(34938), + 63: uint16(34939), + 64: uint16(34940), + 65: uint16(34944), + 66: uint16(34947), + 67: uint16(34950), + 68: uint16(34951), + 69: uint16(34953), + 70: uint16(34954), + 71: uint16(34956), + 72: uint16(34958), + 73: uint16(34959), + 74: uint16(34960), + 75: uint16(34961), + 76: uint16(34963), + 77: uint16(34964), + 78: uint16(34965), + 79: uint16(34967), + 80: uint16(34968), + 81: uint16(34969), + 82: uint16(34970), + 83: uint16(34971), + 84: uint16(34973), + 85: uint16(34974), + 86: uint16(34975), + 87: uint16(34976), + 88: uint16(34977), + 89: uint16(34979), + 90: uint16(34981), + 91: uint16(34982), + 92: uint16(34983), + 93: uint16(34984), + 94: uint16(34985), + 95: uint16(34986), + 96: uint16(23567), + 97: uint16(23389), + 98: uint16(26657), + 99: uint16(32918), + 100: uint16(21880), + 101: uint16(31505), + 102: uint16(25928), + 103: uint16(26964), + 104: uint16(20123), + 105: uint16(27463), + 106: uint16(34638), + 107: uint16(38795), + 108: uint16(21327), + 109: uint16(25375), + 110: uint16(25658), + 111: uint16(37034), + 112: uint16(26012), + 113: uint16(32961), + 114: uint16(35856), + 115: uint16(20889), + 116: uint16(26800), + 117: uint16(21368), + 118: uint16(34809), + 119: uint16(25032), + 120: uint16(27844), + 121: uint16(27899), + 122: uint16(35874), + 123: uint16(23633), + 124: uint16(34218), + 125: uint16(33455), + 126: uint16(38156), + 127: uint16(27427), + 128: uint16(36763), + 129: uint16(26032), + 130: uint16(24571), + 131: uint16(24515), + 132: uint16(20449), + 133: uint16(34885), + 134: uint16(26143), + 135: uint16(33125), + 136: uint16(29481), + 137: uint16(24826), + 138: uint16(20852), + 139: uint16(21009), + 140: uint16(22411), + 141: uint16(24418), + 142: uint16(37026), + 143: uint16(34892), + 144: uint16(37266), + 145: uint16(24184), + 146: uint16(26447), + 147: uint16(24615), + 148: uint16(22995), + 149: uint16(20804), + 150: uint16(20982), + 151: uint16(33016), + 152: uint16(21256), + 153: uint16(27769), + 154: uint16(38596), + 155: uint16(29066), + 156: uint16(20241), + 157: uint16(20462), + 158: uint16(32670), + 159: uint16(26429), + 160: uint16(21957), + 161: uint16(38152), + 162: uint16(31168), + 163: uint16(34966), + 164: uint16(32483), + 165: uint16(22687), + 166: uint16(25100), + 167: uint16(38656), + 168: uint16(34394), + 169: uint16(22040), + 170: uint16(39035), + 171: uint16(24464), + 172: uint16(35768), + 173: uint16(33988), + 174: uint16(37207), + 175: uint16(21465), + 176: uint16(26093), + 177: uint16(24207), + 178: uint16(30044), + 179: uint16(24676), + 180: uint16(32110), + 181: uint16(23167), + 182: uint16(32490), + 183: uint16(32493), + 184: uint16(36713), + 185: uint16(21927), + 186: uint16(23459), + 187: uint16(24748), + 188: uint16(26059), + 189: uint16(29572), + }, + 80: { + 0: uint16(34988), + 1: uint16(34990), + 2: uint16(34991), + 3: uint16(34992), + 4: uint16(34994), + 5: uint16(34995), + 6: uint16(34996), + 7: uint16(34997), + 8: uint16(34998), + 9: uint16(35000), + 10: uint16(35001), + 11: uint16(35002), + 12: uint16(35003), + 13: uint16(35005), + 14: uint16(35006), + 15: uint16(35007), + 16: uint16(35008), + 17: uint16(35011), + 18: uint16(35012), + 19: uint16(35015), + 20: uint16(35016), + 21: uint16(35018), + 22: uint16(35019), + 23: uint16(35020), + 24: uint16(35021), + 25: uint16(35023), + 26: uint16(35024), + 27: uint16(35025), + 28: uint16(35027), + 29: uint16(35030), + 30: uint16(35031), + 31: uint16(35034), + 32: uint16(35035), + 33: uint16(35036), + 34: uint16(35037), + 35: uint16(35038), + 36: uint16(35040), + 37: uint16(35041), + 38: uint16(35046), + 39: uint16(35047), + 40: uint16(35049), + 41: uint16(35050), + 42: uint16(35051), + 43: uint16(35052), + 44: uint16(35053), + 45: uint16(35054), + 46: uint16(35055), + 47: uint16(35058), + 48: uint16(35061), + 49: uint16(35062), + 50: uint16(35063), + 51: uint16(35066), + 52: uint16(35067), + 53: uint16(35069), + 54: uint16(35071), + 55: uint16(35072), + 56: uint16(35073), + 57: uint16(35075), + 58: uint16(35076), + 59: uint16(35077), + 60: uint16(35078), + 61: uint16(35079), + 62: uint16(35080), + 63: uint16(35081), + 64: uint16(35083), + 65: uint16(35084), + 66: uint16(35085), + 67: uint16(35086), + 68: uint16(35087), + 69: uint16(35089), + 70: uint16(35092), + 71: uint16(35093), + 72: uint16(35094), + 73: uint16(35095), + 74: uint16(35096), + 75: uint16(35100), + 76: uint16(35101), + 77: uint16(35102), + 78: uint16(35103), + 79: uint16(35104), + 80: uint16(35106), + 81: uint16(35107), + 82: uint16(35108), + 83: uint16(35110), + 84: uint16(35111), + 85: uint16(35112), + 86: uint16(35113), + 87: uint16(35116), + 88: uint16(35117), + 89: uint16(35118), + 90: uint16(35119), + 91: uint16(35121), + 92: uint16(35122), + 93: uint16(35123), + 94: uint16(35125), + 95: uint16(35127), + 96: uint16(36873), + 97: uint16(30307), + 98: uint16(30505), + 99: uint16(32474), + 100: uint16(38772), + 101: uint16(34203), + 102: uint16(23398), + 103: uint16(31348), + 104: uint16(38634), + 105: uint16(34880), + 106: uint16(21195), + 107: uint16(29071), + 108: uint16(24490), + 109: uint16(26092), + 110: uint16(35810), + 111: uint16(23547), + 112: uint16(39535), + 113: uint16(24033), + 114: uint16(27529), + 115: uint16(27739), + 116: uint16(35757), + 117: uint16(35759), + 118: uint16(36874), + 119: uint16(36805), + 120: uint16(21387), + 121: uint16(25276), + 122: uint16(40486), + 123: uint16(40493), + 124: uint16(21568), + 125: uint16(20011), + 126: uint16(33469), + 127: uint16(29273), + 128: uint16(34460), + 129: uint16(23830), + 130: uint16(34905), + 131: uint16(28079), + 132: uint16(38597), + 133: uint16(21713), + 134: uint16(20122), + 135: uint16(35766), + 136: uint16(28937), + 137: uint16(21693), + 138: uint16(38409), + 139: uint16(28895), + 140: uint16(28153), + 141: uint16(30416), + 142: uint16(20005), + 143: uint16(30740), + 144: uint16(34578), + 145: uint16(23721), + 146: uint16(24310), + 147: uint16(35328), + 148: uint16(39068), + 149: uint16(38414), + 150: uint16(28814), + 151: uint16(27839), + 152: uint16(22852), + 153: uint16(25513), + 154: uint16(30524), + 155: uint16(34893), + 156: uint16(28436), + 157: uint16(33395), + 158: uint16(22576), + 159: uint16(29141), + 160: uint16(21388), + 161: uint16(30746), + 162: uint16(38593), + 163: uint16(21761), + 164: uint16(24422), + 165: uint16(28976), + 166: uint16(23476), + 167: uint16(35866), + 168: uint16(39564), + 169: uint16(27523), + 170: uint16(22830), + 171: uint16(40495), + 172: uint16(31207), + 173: uint16(26472), + 174: uint16(25196), + 175: uint16(20335), + 176: uint16(30113), + 177: uint16(32650), + 178: uint16(27915), + 179: uint16(38451), + 180: uint16(27687), + 181: uint16(20208), + 182: uint16(30162), + 183: uint16(20859), + 184: uint16(26679), + 185: uint16(28478), + 186: uint16(36992), + 187: uint16(33136), + 188: uint16(22934), + 189: uint16(29814), + }, + 81: { + 0: uint16(35128), + 1: uint16(35129), + 2: uint16(35130), + 3: uint16(35131), + 4: uint16(35132), + 5: uint16(35133), + 6: uint16(35134), + 7: uint16(35135), + 8: uint16(35136), + 9: uint16(35138), + 10: uint16(35139), + 11: uint16(35141), + 12: uint16(35142), + 13: uint16(35143), + 14: uint16(35144), + 15: uint16(35145), + 16: uint16(35146), + 17: uint16(35147), + 18: uint16(35148), + 19: uint16(35149), + 20: uint16(35150), + 21: uint16(35151), + 22: uint16(35152), + 23: uint16(35153), + 24: uint16(35154), + 25: uint16(35155), + 26: uint16(35156), + 27: uint16(35157), + 28: uint16(35158), + 29: uint16(35159), + 30: uint16(35160), + 31: uint16(35161), + 32: uint16(35162), + 33: uint16(35163), + 34: uint16(35164), + 35: uint16(35165), + 36: uint16(35168), + 37: uint16(35169), + 38: uint16(35170), + 39: uint16(35171), + 40: uint16(35172), + 41: uint16(35173), + 42: uint16(35175), + 43: uint16(35176), + 44: uint16(35177), + 45: uint16(35178), + 46: uint16(35179), + 47: uint16(35180), + 48: uint16(35181), + 49: uint16(35182), + 50: uint16(35183), + 51: uint16(35184), + 52: uint16(35185), + 53: uint16(35186), + 54: uint16(35187), + 55: uint16(35188), + 56: uint16(35189), + 57: uint16(35190), + 58: uint16(35191), + 59: uint16(35192), + 60: uint16(35193), + 61: uint16(35194), + 62: uint16(35196), + 63: uint16(35197), + 64: uint16(35198), + 65: uint16(35200), + 66: uint16(35202), + 67: uint16(35204), + 68: uint16(35205), + 69: uint16(35207), + 70: uint16(35208), + 71: uint16(35209), + 72: uint16(35210), + 73: uint16(35211), + 74: uint16(35212), + 75: uint16(35213), + 76: uint16(35214), + 77: uint16(35215), + 78: uint16(35216), + 79: uint16(35217), + 80: uint16(35218), + 81: uint16(35219), + 82: uint16(35220), + 83: uint16(35221), + 84: uint16(35222), + 85: uint16(35223), + 86: uint16(35224), + 87: uint16(35225), + 88: uint16(35226), + 89: uint16(35227), + 90: uint16(35228), + 91: uint16(35229), + 92: uint16(35230), + 93: uint16(35231), + 94: uint16(35232), + 95: uint16(35233), + 96: uint16(25671), + 97: uint16(23591), + 98: uint16(36965), + 99: uint16(31377), + 100: uint16(35875), + 101: uint16(23002), + 102: uint16(21676), + 103: uint16(33280), + 104: uint16(33647), + 105: uint16(35201), + 106: uint16(32768), + 107: uint16(26928), + 108: uint16(22094), + 109: uint16(32822), + 110: uint16(29239), + 111: uint16(37326), + 112: uint16(20918), + 113: uint16(20063), + 114: uint16(39029), + 115: uint16(25494), + 116: uint16(19994), + 117: uint16(21494), + 118: uint16(26355), + 119: uint16(33099), + 120: uint16(22812), + 121: uint16(28082), + 122: uint16(19968), + 123: uint16(22777), + 124: uint16(21307), + 125: uint16(25558), + 126: uint16(38129), + 127: uint16(20381), + 128: uint16(20234), + 129: uint16(34915), + 130: uint16(39056), + 131: uint16(22839), + 132: uint16(36951), + 133: uint16(31227), + 134: uint16(20202), + 135: uint16(33008), + 136: uint16(30097), + 137: uint16(27778), + 138: uint16(23452), + 139: uint16(23016), + 140: uint16(24413), + 141: uint16(26885), + 142: uint16(34433), + 143: uint16(20506), + 144: uint16(24050), + 145: uint16(20057), + 146: uint16(30691), + 147: uint16(20197), + 148: uint16(33402), + 149: uint16(25233), + 150: uint16(26131), + 151: uint16(37009), + 152: uint16(23673), + 153: uint16(20159), + 154: uint16(24441), + 155: uint16(33222), + 156: uint16(36920), + 157: uint16(32900), + 158: uint16(30123), + 159: uint16(20134), + 160: uint16(35028), + 161: uint16(24847), + 162: uint16(27589), + 163: uint16(24518), + 164: uint16(20041), + 165: uint16(30410), + 166: uint16(28322), + 167: uint16(35811), + 168: uint16(35758), + 169: uint16(35850), + 170: uint16(35793), + 171: uint16(24322), + 172: uint16(32764), + 173: uint16(32716), + 174: uint16(32462), + 175: uint16(33589), + 176: uint16(33643), + 177: uint16(22240), + 178: uint16(27575), + 179: uint16(38899), + 180: uint16(38452), + 181: uint16(23035), + 182: uint16(21535), + 183: uint16(38134), + 184: uint16(28139), + 185: uint16(23493), + 186: uint16(39278), + 187: uint16(23609), + 188: uint16(24341), + 189: uint16(38544), + }, + 82: { + 0: uint16(35234), + 1: uint16(35235), + 2: uint16(35236), + 3: uint16(35237), + 4: uint16(35238), + 5: uint16(35239), + 6: uint16(35240), + 7: uint16(35241), + 8: uint16(35242), + 9: uint16(35243), + 10: uint16(35244), + 11: uint16(35245), + 12: uint16(35246), + 13: uint16(35247), + 14: uint16(35248), + 15: uint16(35249), + 16: uint16(35250), + 17: uint16(35251), + 18: uint16(35252), + 19: uint16(35253), + 20: uint16(35254), + 21: uint16(35255), + 22: uint16(35256), + 23: uint16(35257), + 24: uint16(35258), + 25: uint16(35259), + 26: uint16(35260), + 27: uint16(35261), + 28: uint16(35262), + 29: uint16(35263), + 30: uint16(35264), + 31: uint16(35267), + 32: uint16(35277), + 33: uint16(35283), + 34: uint16(35284), + 35: uint16(35285), + 36: uint16(35287), + 37: uint16(35288), + 38: uint16(35289), + 39: uint16(35291), + 40: uint16(35293), + 41: uint16(35295), + 42: uint16(35296), + 43: uint16(35297), + 44: uint16(35298), + 45: uint16(35300), + 46: uint16(35303), + 47: uint16(35304), + 48: uint16(35305), + 49: uint16(35306), + 50: uint16(35308), + 51: uint16(35309), + 52: uint16(35310), + 53: uint16(35312), + 54: uint16(35313), + 55: uint16(35314), + 56: uint16(35316), + 57: uint16(35317), + 58: uint16(35318), + 59: uint16(35319), + 60: uint16(35320), + 61: uint16(35321), + 62: uint16(35322), + 63: uint16(35323), + 64: uint16(35324), + 65: uint16(35325), + 66: uint16(35326), + 67: uint16(35327), + 68: uint16(35329), + 69: uint16(35330), + 70: uint16(35331), + 71: uint16(35332), + 72: uint16(35333), + 73: uint16(35334), + 74: uint16(35336), + 75: uint16(35337), + 76: uint16(35338), + 77: uint16(35339), + 78: uint16(35340), + 79: uint16(35341), + 80: uint16(35342), + 81: uint16(35343), + 82: uint16(35344), + 83: uint16(35345), + 84: uint16(35346), + 85: uint16(35347), + 86: uint16(35348), + 87: uint16(35349), + 88: uint16(35350), + 89: uint16(35351), + 90: uint16(35352), + 91: uint16(35353), + 92: uint16(35354), + 93: uint16(35355), + 94: uint16(35356), + 95: uint16(35357), + 96: uint16(21360), + 97: uint16(33521), + 98: uint16(27185), + 99: uint16(23156), + 100: uint16(40560), + 101: uint16(24212), + 102: uint16(32552), + 103: uint16(33721), + 104: uint16(33828), + 105: uint16(33829), + 106: uint16(33639), + 107: uint16(34631), + 108: uint16(36814), + 109: uint16(36194), + 110: uint16(30408), + 111: uint16(24433), + 112: uint16(39062), + 113: uint16(30828), + 114: uint16(26144), + 115: uint16(21727), + 116: uint16(25317), + 117: uint16(20323), + 118: uint16(33219), + 119: uint16(30152), + 120: uint16(24248), + 121: uint16(38605), + 122: uint16(36362), + 123: uint16(34553), + 124: uint16(21647), + 125: uint16(27891), + 126: uint16(28044), + 127: uint16(27704), + 128: uint16(24703), + 129: uint16(21191), + 130: uint16(29992), + 131: uint16(24189), + 132: uint16(20248), + 133: uint16(24736), + 134: uint16(24551), + 135: uint16(23588), + 136: uint16(30001), + 137: uint16(37038), + 138: uint16(38080), + 139: uint16(29369), + 140: uint16(27833), + 141: uint16(28216), + 142: uint16(37193), + 143: uint16(26377), + 144: uint16(21451), + 145: uint16(21491), + 146: uint16(20305), + 147: uint16(37321), + 148: uint16(35825), + 149: uint16(21448), + 150: uint16(24188), + 151: uint16(36802), + 152: uint16(28132), + 153: uint16(20110), + 154: uint16(30402), + 155: uint16(27014), + 156: uint16(34398), + 157: uint16(24858), + 158: uint16(33286), + 159: uint16(20313), + 160: uint16(20446), + 161: uint16(36926), + 162: uint16(40060), + 163: uint16(24841), + 164: uint16(28189), + 165: uint16(28180), + 166: uint16(38533), + 167: uint16(20104), + 168: uint16(23089), + 169: uint16(38632), + 170: uint16(19982), + 171: uint16(23679), + 172: uint16(31161), + 173: uint16(23431), + 174: uint16(35821), + 175: uint16(32701), + 176: uint16(29577), + 177: uint16(22495), + 178: uint16(33419), + 179: uint16(37057), + 180: uint16(21505), + 181: uint16(36935), + 182: uint16(21947), + 183: uint16(23786), + 184: uint16(24481), + 185: uint16(24840), + 186: uint16(27442), + 187: uint16(29425), + 188: uint16(32946), + 189: uint16(35465), + }, + 83: { + 0: uint16(35358), + 1: uint16(35359), + 2: uint16(35360), + 3: uint16(35361), + 4: uint16(35362), + 5: uint16(35363), + 6: uint16(35364), + 7: uint16(35365), + 8: uint16(35366), + 9: uint16(35367), + 10: uint16(35368), + 11: uint16(35369), + 12: uint16(35370), + 13: uint16(35371), + 14: uint16(35372), + 15: uint16(35373), + 16: uint16(35374), + 17: uint16(35375), + 18: uint16(35376), + 19: uint16(35377), + 20: uint16(35378), + 21: uint16(35379), + 22: uint16(35380), + 23: uint16(35381), + 24: uint16(35382), + 25: uint16(35383), + 26: uint16(35384), + 27: uint16(35385), + 28: uint16(35386), + 29: uint16(35387), + 30: uint16(35388), + 31: uint16(35389), + 32: uint16(35391), + 33: uint16(35392), + 34: uint16(35393), + 35: uint16(35394), + 36: uint16(35395), + 37: uint16(35396), + 38: uint16(35397), + 39: uint16(35398), + 40: uint16(35399), + 41: uint16(35401), + 42: uint16(35402), + 43: uint16(35403), + 44: uint16(35404), + 45: uint16(35405), + 46: uint16(35406), + 47: uint16(35407), + 48: uint16(35408), + 49: uint16(35409), + 50: uint16(35410), + 51: uint16(35411), + 52: uint16(35412), + 53: uint16(35413), + 54: uint16(35414), + 55: uint16(35415), + 56: uint16(35416), + 57: uint16(35417), + 58: uint16(35418), + 59: uint16(35419), + 60: uint16(35420), + 61: uint16(35421), + 62: uint16(35422), + 63: uint16(35423), + 64: uint16(35424), + 65: uint16(35425), + 66: uint16(35426), + 67: uint16(35427), + 68: uint16(35428), + 69: uint16(35429), + 70: uint16(35430), + 71: uint16(35431), + 72: uint16(35432), + 73: uint16(35433), + 74: uint16(35434), + 75: uint16(35435), + 76: uint16(35436), + 77: uint16(35437), + 78: uint16(35438), + 79: uint16(35439), + 80: uint16(35440), + 81: uint16(35441), + 82: uint16(35442), + 83: uint16(35443), + 84: uint16(35444), + 85: uint16(35445), + 86: uint16(35446), + 87: uint16(35447), + 88: uint16(35448), + 89: uint16(35450), + 90: uint16(35451), + 91: uint16(35452), + 92: uint16(35453), + 93: uint16(35454), + 94: uint16(35455), + 95: uint16(35456), + 96: uint16(28020), + 97: uint16(23507), + 98: uint16(35029), + 99: uint16(39044), + 100: uint16(35947), + 101: uint16(39533), + 102: uint16(40499), + 103: uint16(28170), + 104: uint16(20900), + 105: uint16(20803), + 106: uint16(22435), + 107: uint16(34945), + 108: uint16(21407), + 109: uint16(25588), + 110: uint16(36757), + 111: uint16(22253), + 112: uint16(21592), + 113: uint16(22278), + 114: uint16(29503), + 115: uint16(28304), + 116: uint16(32536), + 117: uint16(36828), + 118: uint16(33489), + 119: uint16(24895), + 120: uint16(24616), + 121: uint16(38498), + 122: uint16(26352), + 123: uint16(32422), + 124: uint16(36234), + 125: uint16(36291), + 126: uint16(38053), + 127: uint16(23731), + 128: uint16(31908), + 129: uint16(26376), + 130: uint16(24742), + 131: uint16(38405), + 132: uint16(32792), + 133: uint16(20113), + 134: uint16(37095), + 135: uint16(21248), + 136: uint16(38504), + 137: uint16(20801), + 138: uint16(36816), + 139: uint16(34164), + 140: uint16(37213), + 141: uint16(26197), + 142: uint16(38901), + 143: uint16(23381), + 144: uint16(21277), + 145: uint16(30776), + 146: uint16(26434), + 147: uint16(26685), + 148: uint16(21705), + 149: uint16(28798), + 150: uint16(23472), + 151: uint16(36733), + 152: uint16(20877), + 153: uint16(22312), + 154: uint16(21681), + 155: uint16(25874), + 156: uint16(26242), + 157: uint16(36190), + 158: uint16(36163), + 159: uint16(33039), + 160: uint16(33900), + 161: uint16(36973), + 162: uint16(31967), + 163: uint16(20991), + 164: uint16(34299), + 165: uint16(26531), + 166: uint16(26089), + 167: uint16(28577), + 168: uint16(34468), + 169: uint16(36481), + 170: uint16(22122), + 171: uint16(36896), + 172: uint16(30338), + 173: uint16(28790), + 174: uint16(29157), + 175: uint16(36131), + 176: uint16(25321), + 177: uint16(21017), + 178: uint16(27901), + 179: uint16(36156), + 180: uint16(24590), + 181: uint16(22686), + 182: uint16(24974), + 183: uint16(26366), + 184: uint16(36192), + 185: uint16(25166), + 186: uint16(21939), + 187: uint16(28195), + 188: uint16(26413), + 189: uint16(36711), + }, + 84: { + 0: uint16(35457), + 1: uint16(35458), + 2: uint16(35459), + 3: uint16(35460), + 4: uint16(35461), + 5: uint16(35462), + 6: uint16(35463), + 7: uint16(35464), + 8: uint16(35467), + 9: uint16(35468), + 10: uint16(35469), + 11: uint16(35470), + 12: uint16(35471), + 13: uint16(35472), + 14: uint16(35473), + 15: uint16(35474), + 16: uint16(35476), + 17: uint16(35477), + 18: uint16(35478), + 19: uint16(35479), + 20: uint16(35480), + 21: uint16(35481), + 22: uint16(35482), + 23: uint16(35483), + 24: uint16(35484), + 25: uint16(35485), + 26: uint16(35486), + 27: uint16(35487), + 28: uint16(35488), + 29: uint16(35489), + 30: uint16(35490), + 31: uint16(35491), + 32: uint16(35492), + 33: uint16(35493), + 34: uint16(35494), + 35: uint16(35495), + 36: uint16(35496), + 37: uint16(35497), + 38: uint16(35498), + 39: uint16(35499), + 40: uint16(35500), + 41: uint16(35501), + 42: uint16(35502), + 43: uint16(35503), + 44: uint16(35504), + 45: uint16(35505), + 46: uint16(35506), + 47: uint16(35507), + 48: uint16(35508), + 49: uint16(35509), + 50: uint16(35510), + 51: uint16(35511), + 52: uint16(35512), + 53: uint16(35513), + 54: uint16(35514), + 55: uint16(35515), + 56: uint16(35516), + 57: uint16(35517), + 58: uint16(35518), + 59: uint16(35519), + 60: uint16(35520), + 61: uint16(35521), + 62: uint16(35522), + 63: uint16(35523), + 64: uint16(35524), + 65: uint16(35525), + 66: uint16(35526), + 67: uint16(35527), + 68: uint16(35528), + 69: uint16(35529), + 70: uint16(35530), + 71: uint16(35531), + 72: uint16(35532), + 73: uint16(35533), + 74: uint16(35534), + 75: uint16(35535), + 76: uint16(35536), + 77: uint16(35537), + 78: uint16(35538), + 79: uint16(35539), + 80: uint16(35540), + 81: uint16(35541), + 82: uint16(35542), + 83: uint16(35543), + 84: uint16(35544), + 85: uint16(35545), + 86: uint16(35546), + 87: uint16(35547), + 88: uint16(35548), + 89: uint16(35549), + 90: uint16(35550), + 91: uint16(35551), + 92: uint16(35552), + 93: uint16(35553), + 94: uint16(35554), + 95: uint16(35555), + 96: uint16(38113), + 97: uint16(38392), + 98: uint16(30504), + 99: uint16(26629), + 100: uint16(27048), + 101: uint16(21643), + 102: uint16(20045), + 103: uint16(28856), + 104: uint16(35784), + 105: uint16(25688), + 106: uint16(25995), + 107: uint16(23429), + 108: uint16(31364), + 109: uint16(20538), + 110: uint16(23528), + 111: uint16(30651), + 112: uint16(27617), + 113: uint16(35449), + 114: uint16(31896), + 115: uint16(27838), + 116: uint16(30415), + 117: uint16(26025), + 118: uint16(36759), + 119: uint16(23853), + 120: uint16(23637), + 121: uint16(34360), + 122: uint16(26632), + 123: uint16(21344), + 124: uint16(25112), + 125: uint16(31449), + 126: uint16(28251), + 127: uint16(32509), + 128: uint16(27167), + 129: uint16(31456), + 130: uint16(24432), + 131: uint16(28467), + 132: uint16(24352), + 133: uint16(25484), + 134: uint16(28072), + 135: uint16(26454), + 136: uint16(19976), + 137: uint16(24080), + 138: uint16(36134), + 139: uint16(20183), + 140: uint16(32960), + 141: uint16(30260), + 142: uint16(38556), + 143: uint16(25307), + 144: uint16(26157), + 145: uint16(25214), + 146: uint16(27836), + 147: uint16(36213), + 148: uint16(29031), + 149: uint16(32617), + 150: uint16(20806), + 151: uint16(32903), + 152: uint16(21484), + 153: uint16(36974), + 154: uint16(25240), + 155: uint16(21746), + 156: uint16(34544), + 157: uint16(36761), + 158: uint16(32773), + 159: uint16(38167), + 160: uint16(34071), + 161: uint16(36825), + 162: uint16(27993), + 163: uint16(29645), + 164: uint16(26015), + 165: uint16(30495), + 166: uint16(29956), + 167: uint16(30759), + 168: uint16(33275), + 169: uint16(36126), + 170: uint16(38024), + 171: uint16(20390), + 172: uint16(26517), + 173: uint16(30137), + 174: uint16(35786), + 175: uint16(38663), + 176: uint16(25391), + 177: uint16(38215), + 178: uint16(38453), + 179: uint16(33976), + 180: uint16(25379), + 181: uint16(30529), + 182: uint16(24449), + 183: uint16(29424), + 184: uint16(20105), + 185: uint16(24596), + 186: uint16(25972), + 187: uint16(25327), + 188: uint16(27491), + 189: uint16(25919), + }, + 85: { + 0: uint16(35556), + 1: uint16(35557), + 2: uint16(35558), + 3: uint16(35559), + 4: uint16(35560), + 5: uint16(35561), + 6: uint16(35562), + 7: uint16(35563), + 8: uint16(35564), + 9: uint16(35565), + 10: uint16(35566), + 11: uint16(35567), + 12: uint16(35568), + 13: uint16(35569), + 14: uint16(35570), + 15: uint16(35571), + 16: uint16(35572), + 17: uint16(35573), + 18: uint16(35574), + 19: uint16(35575), + 20: uint16(35576), + 21: uint16(35577), + 22: uint16(35578), + 23: uint16(35579), + 24: uint16(35580), + 25: uint16(35581), + 26: uint16(35582), + 27: uint16(35583), + 28: uint16(35584), + 29: uint16(35585), + 30: uint16(35586), + 31: uint16(35587), + 32: uint16(35588), + 33: uint16(35589), + 34: uint16(35590), + 35: uint16(35592), + 36: uint16(35593), + 37: uint16(35594), + 38: uint16(35595), + 39: uint16(35596), + 40: uint16(35597), + 41: uint16(35598), + 42: uint16(35599), + 43: uint16(35600), + 44: uint16(35601), + 45: uint16(35602), + 46: uint16(35603), + 47: uint16(35604), + 48: uint16(35605), + 49: uint16(35606), + 50: uint16(35607), + 51: uint16(35608), + 52: uint16(35609), + 53: uint16(35610), + 54: uint16(35611), + 55: uint16(35612), + 56: uint16(35613), + 57: uint16(35614), + 58: uint16(35615), + 59: uint16(35616), + 60: uint16(35617), + 61: uint16(35618), + 62: uint16(35619), + 63: uint16(35620), + 64: uint16(35621), + 65: uint16(35623), + 66: uint16(35624), + 67: uint16(35625), + 68: uint16(35626), + 69: uint16(35627), + 70: uint16(35628), + 71: uint16(35629), + 72: uint16(35630), + 73: uint16(35631), + 74: uint16(35632), + 75: uint16(35633), + 76: uint16(35634), + 77: uint16(35635), + 78: uint16(35636), + 79: uint16(35637), + 80: uint16(35638), + 81: uint16(35639), + 82: uint16(35640), + 83: uint16(35641), + 84: uint16(35642), + 85: uint16(35643), + 86: uint16(35644), + 87: uint16(35645), + 88: uint16(35646), + 89: uint16(35647), + 90: uint16(35648), + 91: uint16(35649), + 92: uint16(35650), + 93: uint16(35651), + 94: uint16(35652), + 95: uint16(35653), + 96: uint16(24103), + 97: uint16(30151), + 98: uint16(37073), + 99: uint16(35777), + 100: uint16(33437), + 101: uint16(26525), + 102: uint16(25903), + 103: uint16(21553), + 104: uint16(34584), + 105: uint16(30693), + 106: uint16(32930), + 107: uint16(33026), + 108: uint16(27713), + 109: uint16(20043), + 110: uint16(32455), + 111: uint16(32844), + 112: uint16(30452), + 113: uint16(26893), + 114: uint16(27542), + 115: uint16(25191), + 116: uint16(20540), + 117: uint16(20356), + 118: uint16(22336), + 119: uint16(25351), + 120: uint16(27490), + 121: uint16(36286), + 122: uint16(21482), + 123: uint16(26088), + 124: uint16(32440), + 125: uint16(24535), + 126: uint16(25370), + 127: uint16(25527), + 128: uint16(33267), + 129: uint16(33268), + 130: uint16(32622), + 131: uint16(24092), + 132: uint16(23769), + 133: uint16(21046), + 134: uint16(26234), + 135: uint16(31209), + 136: uint16(31258), + 137: uint16(36136), + 138: uint16(28825), + 139: uint16(30164), + 140: uint16(28382), + 141: uint16(27835), + 142: uint16(31378), + 143: uint16(20013), + 144: uint16(30405), + 145: uint16(24544), + 146: uint16(38047), + 147: uint16(34935), + 148: uint16(32456), + 149: uint16(31181), + 150: uint16(32959), + 151: uint16(37325), + 152: uint16(20210), + 153: uint16(20247), + 154: uint16(33311), + 155: uint16(21608), + 156: uint16(24030), + 157: uint16(27954), + 158: uint16(35788), + 159: uint16(31909), + 160: uint16(36724), + 161: uint16(32920), + 162: uint16(24090), + 163: uint16(21650), + 164: uint16(30385), + 165: uint16(23449), + 166: uint16(26172), + 167: uint16(39588), + 168: uint16(29664), + 169: uint16(26666), + 170: uint16(34523), + 171: uint16(26417), + 172: uint16(29482), + 173: uint16(35832), + 174: uint16(35803), + 175: uint16(36880), + 176: uint16(31481), + 177: uint16(28891), + 178: uint16(29038), + 179: uint16(25284), + 180: uint16(30633), + 181: uint16(22065), + 182: uint16(20027), + 183: uint16(33879), + 184: uint16(26609), + 185: uint16(21161), + 186: uint16(34496), + 187: uint16(36142), + 188: uint16(38136), + 189: uint16(31569), + }, + 86: { + 0: uint16(35654), + 1: uint16(35655), + 2: uint16(35656), + 3: uint16(35657), + 4: uint16(35658), + 5: uint16(35659), + 6: uint16(35660), + 7: uint16(35661), + 8: uint16(35662), + 9: uint16(35663), + 10: uint16(35664), + 11: uint16(35665), + 12: uint16(35666), + 13: uint16(35667), + 14: uint16(35668), + 15: uint16(35669), + 16: uint16(35670), + 17: uint16(35671), + 18: uint16(35672), + 19: uint16(35673), + 20: uint16(35674), + 21: uint16(35675), + 22: uint16(35676), + 23: uint16(35677), + 24: uint16(35678), + 25: uint16(35679), + 26: uint16(35680), + 27: uint16(35681), + 28: uint16(35682), + 29: uint16(35683), + 30: uint16(35684), + 31: uint16(35685), + 32: uint16(35687), + 33: uint16(35688), + 34: uint16(35689), + 35: uint16(35690), + 36: uint16(35691), + 37: uint16(35693), + 38: uint16(35694), + 39: uint16(35695), + 40: uint16(35696), + 41: uint16(35697), + 42: uint16(35698), + 43: uint16(35699), + 44: uint16(35700), + 45: uint16(35701), + 46: uint16(35702), + 47: uint16(35703), + 48: uint16(35704), + 49: uint16(35705), + 50: uint16(35706), + 51: uint16(35707), + 52: uint16(35708), + 53: uint16(35709), + 54: uint16(35710), + 55: uint16(35711), + 56: uint16(35712), + 57: uint16(35713), + 58: uint16(35714), + 59: uint16(35715), + 60: uint16(35716), + 61: uint16(35717), + 62: uint16(35718), + 63: uint16(35719), + 64: uint16(35720), + 65: uint16(35721), + 66: uint16(35722), + 67: uint16(35723), + 68: uint16(35724), + 69: uint16(35725), + 70: uint16(35726), + 71: uint16(35727), + 72: uint16(35728), + 73: uint16(35729), + 74: uint16(35730), + 75: uint16(35731), + 76: uint16(35732), + 77: uint16(35733), + 78: uint16(35734), + 79: uint16(35735), + 80: uint16(35736), + 81: uint16(35737), + 82: uint16(35738), + 83: uint16(35739), + 84: uint16(35740), + 85: uint16(35741), + 86: uint16(35742), + 87: uint16(35743), + 88: uint16(35756), + 89: uint16(35761), + 90: uint16(35771), + 91: uint16(35783), + 92: uint16(35792), + 93: uint16(35818), + 94: uint16(35849), + 95: uint16(35870), + 96: uint16(20303), + 97: uint16(27880), + 98: uint16(31069), + 99: uint16(39547), + 100: uint16(25235), + 101: uint16(29226), + 102: uint16(25341), + 103: uint16(19987), + 104: uint16(30742), + 105: uint16(36716), + 106: uint16(25776), + 107: uint16(36186), + 108: uint16(31686), + 109: uint16(26729), + 110: uint16(24196), + 111: uint16(35013), + 112: uint16(22918), + 113: uint16(25758), + 114: uint16(22766), + 115: uint16(29366), + 116: uint16(26894), + 117: uint16(38181), + 118: uint16(36861), + 119: uint16(36184), + 120: uint16(22368), + 121: uint16(32512), + 122: uint16(35846), + 123: uint16(20934), + 124: uint16(25417), + 125: uint16(25305), + 126: uint16(21331), + 127: uint16(26700), + 128: uint16(29730), + 129: uint16(33537), + 130: uint16(37196), + 131: uint16(21828), + 132: uint16(30528), + 133: uint16(28796), + 134: uint16(27978), + 135: uint16(20857), + 136: uint16(21672), + 137: uint16(36164), + 138: uint16(23039), + 139: uint16(28363), + 140: uint16(28100), + 141: uint16(23388), + 142: uint16(32043), + 143: uint16(20180), + 144: uint16(31869), + 145: uint16(28371), + 146: uint16(23376), + 147: uint16(33258), + 148: uint16(28173), + 149: uint16(23383), + 150: uint16(39683), + 151: uint16(26837), + 152: uint16(36394), + 153: uint16(23447), + 154: uint16(32508), + 155: uint16(24635), + 156: uint16(32437), + 157: uint16(37049), + 158: uint16(36208), + 159: uint16(22863), + 160: uint16(25549), + 161: uint16(31199), + 162: uint16(36275), + 163: uint16(21330), + 164: uint16(26063), + 165: uint16(31062), + 166: uint16(35781), + 167: uint16(38459), + 168: uint16(32452), + 169: uint16(38075), + 170: uint16(32386), + 171: uint16(22068), + 172: uint16(37257), + 173: uint16(26368), + 174: uint16(32618), + 175: uint16(23562), + 176: uint16(36981), + 177: uint16(26152), + 178: uint16(24038), + 179: uint16(20304), + 180: uint16(26590), + 181: uint16(20570), + 182: uint16(20316), + 183: uint16(22352), + 184: uint16(24231), + 185: uint16(59408), + 186: uint16(59409), + 187: uint16(59410), + 188: uint16(59411), + 189: uint16(59412), + }, + 87: { + 0: uint16(35896), + 1: uint16(35897), + 2: uint16(35898), + 3: uint16(35899), + 4: uint16(35900), + 5: uint16(35901), + 6: uint16(35902), + 7: uint16(35903), + 8: uint16(35904), + 9: uint16(35906), + 10: uint16(35907), + 11: uint16(35908), + 12: uint16(35909), + 13: uint16(35912), + 14: uint16(35914), + 15: uint16(35915), + 16: uint16(35917), + 17: uint16(35918), + 18: uint16(35919), + 19: uint16(35920), + 20: uint16(35921), + 21: uint16(35922), + 22: uint16(35923), + 23: uint16(35924), + 24: uint16(35926), + 25: uint16(35927), + 26: uint16(35928), + 27: uint16(35929), + 28: uint16(35931), + 29: uint16(35932), + 30: uint16(35933), + 31: uint16(35934), + 32: uint16(35935), + 33: uint16(35936), + 34: uint16(35939), + 35: uint16(35940), + 36: uint16(35941), + 37: uint16(35942), + 38: uint16(35943), + 39: uint16(35944), + 40: uint16(35945), + 41: uint16(35948), + 42: uint16(35949), + 43: uint16(35950), + 44: uint16(35951), + 45: uint16(35952), + 46: uint16(35953), + 47: uint16(35954), + 48: uint16(35956), + 49: uint16(35957), + 50: uint16(35958), + 51: uint16(35959), + 52: uint16(35963), + 53: uint16(35964), + 54: uint16(35965), + 55: uint16(35966), + 56: uint16(35967), + 57: uint16(35968), + 58: uint16(35969), + 59: uint16(35971), + 60: uint16(35972), + 61: uint16(35974), + 62: uint16(35975), + 63: uint16(35976), + 64: uint16(35979), + 65: uint16(35981), + 66: uint16(35982), + 67: uint16(35983), + 68: uint16(35984), + 69: uint16(35985), + 70: uint16(35986), + 71: uint16(35987), + 72: uint16(35989), + 73: uint16(35990), + 74: uint16(35991), + 75: uint16(35993), + 76: uint16(35994), + 77: uint16(35995), + 78: uint16(35996), + 79: uint16(35997), + 80: uint16(35998), + 81: uint16(35999), + 82: uint16(36000), + 83: uint16(36001), + 84: uint16(36002), + 85: uint16(36003), + 86: uint16(36004), + 87: uint16(36005), + 88: uint16(36006), + 89: uint16(36007), + 90: uint16(36008), + 91: uint16(36009), + 92: uint16(36010), + 93: uint16(36011), + 94: uint16(36012), + 95: uint16(36013), + 96: uint16(20109), + 97: uint16(19980), + 98: uint16(20800), + 99: uint16(19984), + 100: uint16(24319), + 101: uint16(21317), + 102: uint16(19989), + 103: uint16(20120), + 104: uint16(19998), + 105: uint16(39730), + 106: uint16(23404), + 107: uint16(22121), + 108: uint16(20008), + 109: uint16(31162), + 110: uint16(20031), + 111: uint16(21269), + 112: uint16(20039), + 113: uint16(22829), + 114: uint16(29243), + 115: uint16(21358), + 116: uint16(27664), + 117: uint16(22239), + 118: uint16(32996), + 119: uint16(39319), + 120: uint16(27603), + 121: uint16(30590), + 122: uint16(40727), + 123: uint16(20022), + 124: uint16(20127), + 125: uint16(40720), + 126: uint16(20060), + 127: uint16(20073), + 128: uint16(20115), + 129: uint16(33416), + 130: uint16(23387), + 131: uint16(21868), + 132: uint16(22031), + 133: uint16(20164), + 134: uint16(21389), + 135: uint16(21405), + 136: uint16(21411), + 137: uint16(21413), + 138: uint16(21422), + 139: uint16(38757), + 140: uint16(36189), + 141: uint16(21274), + 142: uint16(21493), + 143: uint16(21286), + 144: uint16(21294), + 145: uint16(21310), + 146: uint16(36188), + 147: uint16(21350), + 148: uint16(21347), + 149: uint16(20994), + 150: uint16(21000), + 151: uint16(21006), + 152: uint16(21037), + 153: uint16(21043), + 154: uint16(21055), + 155: uint16(21056), + 156: uint16(21068), + 157: uint16(21086), + 158: uint16(21089), + 159: uint16(21084), + 160: uint16(33967), + 161: uint16(21117), + 162: uint16(21122), + 163: uint16(21121), + 164: uint16(21136), + 165: uint16(21139), + 166: uint16(20866), + 167: uint16(32596), + 168: uint16(20155), + 169: uint16(20163), + 170: uint16(20169), + 171: uint16(20162), + 172: uint16(20200), + 173: uint16(20193), + 174: uint16(20203), + 175: uint16(20190), + 176: uint16(20251), + 177: uint16(20211), + 178: uint16(20258), + 179: uint16(20324), + 180: uint16(20213), + 181: uint16(20261), + 182: uint16(20263), + 183: uint16(20233), + 184: uint16(20267), + 185: uint16(20318), + 186: uint16(20327), + 187: uint16(25912), + 188: uint16(20314), + 189: uint16(20317), + }, + 88: { + 0: uint16(36014), + 1: uint16(36015), + 2: uint16(36016), + 3: uint16(36017), + 4: uint16(36018), + 5: uint16(36019), + 6: uint16(36020), + 7: uint16(36021), + 8: uint16(36022), + 9: uint16(36023), + 10: uint16(36024), + 11: uint16(36025), + 12: uint16(36026), + 13: uint16(36027), + 14: uint16(36028), + 15: uint16(36029), + 16: uint16(36030), + 17: uint16(36031), + 18: uint16(36032), + 19: uint16(36033), + 20: uint16(36034), + 21: uint16(36035), + 22: uint16(36036), + 23: uint16(36037), + 24: uint16(36038), + 25: uint16(36039), + 26: uint16(36040), + 27: uint16(36041), + 28: uint16(36042), + 29: uint16(36043), + 30: uint16(36044), + 31: uint16(36045), + 32: uint16(36046), + 33: uint16(36047), + 34: uint16(36048), + 35: uint16(36049), + 36: uint16(36050), + 37: uint16(36051), + 38: uint16(36052), + 39: uint16(36053), + 40: uint16(36054), + 41: uint16(36055), + 42: uint16(36056), + 43: uint16(36057), + 44: uint16(36058), + 45: uint16(36059), + 46: uint16(36060), + 47: uint16(36061), + 48: uint16(36062), + 49: uint16(36063), + 50: uint16(36064), + 51: uint16(36065), + 52: uint16(36066), + 53: uint16(36067), + 54: uint16(36068), + 55: uint16(36069), + 56: uint16(36070), + 57: uint16(36071), + 58: uint16(36072), + 59: uint16(36073), + 60: uint16(36074), + 61: uint16(36075), + 62: uint16(36076), + 63: uint16(36077), + 64: uint16(36078), + 65: uint16(36079), + 66: uint16(36080), + 67: uint16(36081), + 68: uint16(36082), + 69: uint16(36083), + 70: uint16(36084), + 71: uint16(36085), + 72: uint16(36086), + 73: uint16(36087), + 74: uint16(36088), + 75: uint16(36089), + 76: uint16(36090), + 77: uint16(36091), + 78: uint16(36092), + 79: uint16(36093), + 80: uint16(36094), + 81: uint16(36095), + 82: uint16(36096), + 83: uint16(36097), + 84: uint16(36098), + 85: uint16(36099), + 86: uint16(36100), + 87: uint16(36101), + 88: uint16(36102), + 89: uint16(36103), + 90: uint16(36104), + 91: uint16(36105), + 92: uint16(36106), + 93: uint16(36107), + 94: uint16(36108), + 95: uint16(36109), + 96: uint16(20319), + 97: uint16(20311), + 98: uint16(20274), + 99: uint16(20285), + 100: uint16(20342), + 101: uint16(20340), + 102: uint16(20369), + 103: uint16(20361), + 104: uint16(20355), + 105: uint16(20367), + 106: uint16(20350), + 107: uint16(20347), + 108: uint16(20394), + 109: uint16(20348), + 110: uint16(20396), + 111: uint16(20372), + 112: uint16(20454), + 113: uint16(20456), + 114: uint16(20458), + 115: uint16(20421), + 116: uint16(20442), + 117: uint16(20451), + 118: uint16(20444), + 119: uint16(20433), + 120: uint16(20447), + 121: uint16(20472), + 122: uint16(20521), + 123: uint16(20556), + 124: uint16(20467), + 125: uint16(20524), + 126: uint16(20495), + 127: uint16(20526), + 128: uint16(20525), + 129: uint16(20478), + 130: uint16(20508), + 131: uint16(20492), + 132: uint16(20517), + 133: uint16(20520), + 134: uint16(20606), + 135: uint16(20547), + 136: uint16(20565), + 137: uint16(20552), + 138: uint16(20558), + 139: uint16(20588), + 140: uint16(20603), + 141: uint16(20645), + 142: uint16(20647), + 143: uint16(20649), + 144: uint16(20666), + 145: uint16(20694), + 146: uint16(20742), + 147: uint16(20717), + 148: uint16(20716), + 149: uint16(20710), + 150: uint16(20718), + 151: uint16(20743), + 152: uint16(20747), + 153: uint16(20189), + 154: uint16(27709), + 155: uint16(20312), + 156: uint16(20325), + 157: uint16(20430), + 158: uint16(40864), + 159: uint16(27718), + 160: uint16(31860), + 161: uint16(20846), + 162: uint16(24061), + 163: uint16(40649), + 164: uint16(39320), + 165: uint16(20865), + 166: uint16(22804), + 167: uint16(21241), + 168: uint16(21261), + 169: uint16(35335), + 170: uint16(21264), + 171: uint16(20971), + 172: uint16(22809), + 173: uint16(20821), + 174: uint16(20128), + 175: uint16(20822), + 176: uint16(20147), + 177: uint16(34926), + 178: uint16(34980), + 179: uint16(20149), + 180: uint16(33044), + 181: uint16(35026), + 182: uint16(31104), + 183: uint16(23348), + 184: uint16(34819), + 185: uint16(32696), + 186: uint16(20907), + 187: uint16(20913), + 188: uint16(20925), + 189: uint16(20924), + }, + 89: { + 0: uint16(36110), + 1: uint16(36111), + 2: uint16(36112), + 3: uint16(36113), + 4: uint16(36114), + 5: uint16(36115), + 6: uint16(36116), + 7: uint16(36117), + 8: uint16(36118), + 9: uint16(36119), + 10: uint16(36120), + 11: uint16(36121), + 12: uint16(36122), + 13: uint16(36123), + 14: uint16(36124), + 15: uint16(36128), + 16: uint16(36177), + 17: uint16(36178), + 18: uint16(36183), + 19: uint16(36191), + 20: uint16(36197), + 21: uint16(36200), + 22: uint16(36201), + 23: uint16(36202), + 24: uint16(36204), + 25: uint16(36206), + 26: uint16(36207), + 27: uint16(36209), + 28: uint16(36210), + 29: uint16(36216), + 30: uint16(36217), + 31: uint16(36218), + 32: uint16(36219), + 33: uint16(36220), + 34: uint16(36221), + 35: uint16(36222), + 36: uint16(36223), + 37: uint16(36224), + 38: uint16(36226), + 39: uint16(36227), + 40: uint16(36230), + 41: uint16(36231), + 42: uint16(36232), + 43: uint16(36233), + 44: uint16(36236), + 45: uint16(36237), + 46: uint16(36238), + 47: uint16(36239), + 48: uint16(36240), + 49: uint16(36242), + 50: uint16(36243), + 51: uint16(36245), + 52: uint16(36246), + 53: uint16(36247), + 54: uint16(36248), + 55: uint16(36249), + 56: uint16(36250), + 57: uint16(36251), + 58: uint16(36252), + 59: uint16(36253), + 60: uint16(36254), + 61: uint16(36256), + 62: uint16(36257), + 63: uint16(36258), + 64: uint16(36260), + 65: uint16(36261), + 66: uint16(36262), + 67: uint16(36263), + 68: uint16(36264), + 69: uint16(36265), + 70: uint16(36266), + 71: uint16(36267), + 72: uint16(36268), + 73: uint16(36269), + 74: uint16(36270), + 75: uint16(36271), + 76: uint16(36272), + 77: uint16(36274), + 78: uint16(36278), + 79: uint16(36279), + 80: uint16(36281), + 81: uint16(36283), + 82: uint16(36285), + 83: uint16(36288), + 84: uint16(36289), + 85: uint16(36290), + 86: uint16(36293), + 87: uint16(36295), + 88: uint16(36296), + 89: uint16(36297), + 90: uint16(36298), + 91: uint16(36301), + 92: uint16(36304), + 93: uint16(36306), + 94: uint16(36307), + 95: uint16(36308), + 96: uint16(20935), + 97: uint16(20886), + 98: uint16(20898), + 99: uint16(20901), + 100: uint16(35744), + 101: uint16(35750), + 102: uint16(35751), + 103: uint16(35754), + 104: uint16(35764), + 105: uint16(35765), + 106: uint16(35767), + 107: uint16(35778), + 108: uint16(35779), + 109: uint16(35787), + 110: uint16(35791), + 111: uint16(35790), + 112: uint16(35794), + 113: uint16(35795), + 114: uint16(35796), + 115: uint16(35798), + 116: uint16(35800), + 117: uint16(35801), + 118: uint16(35804), + 119: uint16(35807), + 120: uint16(35808), + 121: uint16(35812), + 122: uint16(35816), + 123: uint16(35817), + 124: uint16(35822), + 125: uint16(35824), + 126: uint16(35827), + 127: uint16(35830), + 128: uint16(35833), + 129: uint16(35836), + 130: uint16(35839), + 131: uint16(35840), + 132: uint16(35842), + 133: uint16(35844), + 134: uint16(35847), + 135: uint16(35852), + 136: uint16(35855), + 137: uint16(35857), + 138: uint16(35858), + 139: uint16(35860), + 140: uint16(35861), + 141: uint16(35862), + 142: uint16(35865), + 143: uint16(35867), + 144: uint16(35864), + 145: uint16(35869), + 146: uint16(35871), + 147: uint16(35872), + 148: uint16(35873), + 149: uint16(35877), + 150: uint16(35879), + 151: uint16(35882), + 152: uint16(35883), + 153: uint16(35886), + 154: uint16(35887), + 155: uint16(35890), + 156: uint16(35891), + 157: uint16(35893), + 158: uint16(35894), + 159: uint16(21353), + 160: uint16(21370), + 161: uint16(38429), + 162: uint16(38434), + 163: uint16(38433), + 164: uint16(38449), + 165: uint16(38442), + 166: uint16(38461), + 167: uint16(38460), + 168: uint16(38466), + 169: uint16(38473), + 170: uint16(38484), + 171: uint16(38495), + 172: uint16(38503), + 173: uint16(38508), + 174: uint16(38514), + 175: uint16(38516), + 176: uint16(38536), + 177: uint16(38541), + 178: uint16(38551), + 179: uint16(38576), + 180: uint16(37015), + 181: uint16(37019), + 182: uint16(37021), + 183: uint16(37017), + 184: uint16(37036), + 185: uint16(37025), + 186: uint16(37044), + 187: uint16(37043), + 188: uint16(37046), + 189: uint16(37050), + }, + 90: { + 0: uint16(36309), + 1: uint16(36312), + 2: uint16(36313), + 3: uint16(36316), + 4: uint16(36320), + 5: uint16(36321), + 6: uint16(36322), + 7: uint16(36325), + 8: uint16(36326), + 9: uint16(36327), + 10: uint16(36329), + 11: uint16(36333), + 12: uint16(36334), + 13: uint16(36336), + 14: uint16(36337), + 15: uint16(36338), + 16: uint16(36340), + 17: uint16(36342), + 18: uint16(36348), + 19: uint16(36350), + 20: uint16(36351), + 21: uint16(36352), + 22: uint16(36353), + 23: uint16(36354), + 24: uint16(36355), + 25: uint16(36356), + 26: uint16(36358), + 27: uint16(36359), + 28: uint16(36360), + 29: uint16(36363), + 30: uint16(36365), + 31: uint16(36366), + 32: uint16(36368), + 33: uint16(36369), + 34: uint16(36370), + 35: uint16(36371), + 36: uint16(36373), + 37: uint16(36374), + 38: uint16(36375), + 39: uint16(36376), + 40: uint16(36377), + 41: uint16(36378), + 42: uint16(36379), + 43: uint16(36380), + 44: uint16(36384), + 45: uint16(36385), + 46: uint16(36388), + 47: uint16(36389), + 48: uint16(36390), + 49: uint16(36391), + 50: uint16(36392), + 51: uint16(36395), + 52: uint16(36397), + 53: uint16(36400), + 54: uint16(36402), + 55: uint16(36403), + 56: uint16(36404), + 57: uint16(36406), + 58: uint16(36407), + 59: uint16(36408), + 60: uint16(36411), + 61: uint16(36412), + 62: uint16(36414), + 63: uint16(36415), + 64: uint16(36419), + 65: uint16(36421), + 66: uint16(36422), + 67: uint16(36428), + 68: uint16(36429), + 69: uint16(36430), + 70: uint16(36431), + 71: uint16(36432), + 72: uint16(36435), + 73: uint16(36436), + 74: uint16(36437), + 75: uint16(36438), + 76: uint16(36439), + 77: uint16(36440), + 78: uint16(36442), + 79: uint16(36443), + 80: uint16(36444), + 81: uint16(36445), + 82: uint16(36446), + 83: uint16(36447), + 84: uint16(36448), + 85: uint16(36449), + 86: uint16(36450), + 87: uint16(36451), + 88: uint16(36452), + 89: uint16(36453), + 90: uint16(36455), + 91: uint16(36456), + 92: uint16(36458), + 93: uint16(36459), + 94: uint16(36462), + 95: uint16(36465), + 96: uint16(37048), + 97: uint16(37040), + 98: uint16(37071), + 99: uint16(37061), + 100: uint16(37054), + 101: uint16(37072), + 102: uint16(37060), + 103: uint16(37063), + 104: uint16(37075), + 105: uint16(37094), + 106: uint16(37090), + 107: uint16(37084), + 108: uint16(37079), + 109: uint16(37083), + 110: uint16(37099), + 111: uint16(37103), + 112: uint16(37118), + 113: uint16(37124), + 114: uint16(37154), + 115: uint16(37150), + 116: uint16(37155), + 117: uint16(37169), + 118: uint16(37167), + 119: uint16(37177), + 120: uint16(37187), + 121: uint16(37190), + 122: uint16(21005), + 123: uint16(22850), + 124: uint16(21154), + 125: uint16(21164), + 126: uint16(21165), + 127: uint16(21182), + 128: uint16(21759), + 129: uint16(21200), + 130: uint16(21206), + 131: uint16(21232), + 132: uint16(21471), + 133: uint16(29166), + 134: uint16(30669), + 135: uint16(24308), + 136: uint16(20981), + 137: uint16(20988), + 138: uint16(39727), + 139: uint16(21430), + 140: uint16(24321), + 141: uint16(30042), + 142: uint16(24047), + 143: uint16(22348), + 144: uint16(22441), + 145: uint16(22433), + 146: uint16(22654), + 147: uint16(22716), + 148: uint16(22725), + 149: uint16(22737), + 150: uint16(22313), + 151: uint16(22316), + 152: uint16(22314), + 153: uint16(22323), + 154: uint16(22329), + 155: uint16(22318), + 156: uint16(22319), + 157: uint16(22364), + 158: uint16(22331), + 159: uint16(22338), + 160: uint16(22377), + 161: uint16(22405), + 162: uint16(22379), + 163: uint16(22406), + 164: uint16(22396), + 165: uint16(22395), + 166: uint16(22376), + 167: uint16(22381), + 168: uint16(22390), + 169: uint16(22387), + 170: uint16(22445), + 171: uint16(22436), + 172: uint16(22412), + 173: uint16(22450), + 174: uint16(22479), + 175: uint16(22439), + 176: uint16(22452), + 177: uint16(22419), + 178: uint16(22432), + 179: uint16(22485), + 180: uint16(22488), + 181: uint16(22490), + 182: uint16(22489), + 183: uint16(22482), + 184: uint16(22456), + 185: uint16(22516), + 186: uint16(22511), + 187: uint16(22520), + 188: uint16(22500), + 189: uint16(22493), + }, + 91: { + 0: uint16(36467), + 1: uint16(36469), + 2: uint16(36471), + 3: uint16(36472), + 4: uint16(36473), + 5: uint16(36474), + 6: uint16(36475), + 7: uint16(36477), + 8: uint16(36478), + 9: uint16(36480), + 10: uint16(36482), + 11: uint16(36483), + 12: uint16(36484), + 13: uint16(36486), + 14: uint16(36488), + 15: uint16(36489), + 16: uint16(36490), + 17: uint16(36491), + 18: uint16(36492), + 19: uint16(36493), + 20: uint16(36494), + 21: uint16(36497), + 22: uint16(36498), + 23: uint16(36499), + 24: uint16(36501), + 25: uint16(36502), + 26: uint16(36503), + 27: uint16(36504), + 28: uint16(36505), + 29: uint16(36506), + 30: uint16(36507), + 31: uint16(36509), + 32: uint16(36511), + 33: uint16(36512), + 34: uint16(36513), + 35: uint16(36514), + 36: uint16(36515), + 37: uint16(36516), + 38: uint16(36517), + 39: uint16(36518), + 40: uint16(36519), + 41: uint16(36520), + 42: uint16(36521), + 43: uint16(36522), + 44: uint16(36525), + 45: uint16(36526), + 46: uint16(36528), + 47: uint16(36529), + 48: uint16(36531), + 49: uint16(36532), + 50: uint16(36533), + 51: uint16(36534), + 52: uint16(36535), + 53: uint16(36536), + 54: uint16(36537), + 55: uint16(36539), + 56: uint16(36540), + 57: uint16(36541), + 58: uint16(36542), + 59: uint16(36543), + 60: uint16(36544), + 61: uint16(36545), + 62: uint16(36546), + 63: uint16(36547), + 64: uint16(36548), + 65: uint16(36549), + 66: uint16(36550), + 67: uint16(36551), + 68: uint16(36552), + 69: uint16(36553), + 70: uint16(36554), + 71: uint16(36555), + 72: uint16(36556), + 73: uint16(36557), + 74: uint16(36559), + 75: uint16(36560), + 76: uint16(36561), + 77: uint16(36562), + 78: uint16(36563), + 79: uint16(36564), + 80: uint16(36565), + 81: uint16(36566), + 82: uint16(36567), + 83: uint16(36568), + 84: uint16(36569), + 85: uint16(36570), + 86: uint16(36571), + 87: uint16(36572), + 88: uint16(36573), + 89: uint16(36574), + 90: uint16(36575), + 91: uint16(36576), + 92: uint16(36577), + 93: uint16(36578), + 94: uint16(36579), + 95: uint16(36580), + 96: uint16(22539), + 97: uint16(22541), + 98: uint16(22525), + 99: uint16(22509), + 100: uint16(22528), + 101: uint16(22558), + 102: uint16(22553), + 103: uint16(22596), + 104: uint16(22560), + 105: uint16(22629), + 106: uint16(22636), + 107: uint16(22657), + 108: uint16(22665), + 109: uint16(22682), + 110: uint16(22656), + 111: uint16(39336), + 112: uint16(40729), + 113: uint16(25087), + 114: uint16(33401), + 115: uint16(33405), + 116: uint16(33407), + 117: uint16(33423), + 118: uint16(33418), + 119: uint16(33448), + 120: uint16(33412), + 121: uint16(33422), + 122: uint16(33425), + 123: uint16(33431), + 124: uint16(33433), + 125: uint16(33451), + 126: uint16(33464), + 127: uint16(33470), + 128: uint16(33456), + 129: uint16(33480), + 130: uint16(33482), + 131: uint16(33507), + 132: uint16(33432), + 133: uint16(33463), + 134: uint16(33454), + 135: uint16(33483), + 136: uint16(33484), + 137: uint16(33473), + 138: uint16(33449), + 139: uint16(33460), + 140: uint16(33441), + 141: uint16(33450), + 142: uint16(33439), + 143: uint16(33476), + 144: uint16(33486), + 145: uint16(33444), + 146: uint16(33505), + 147: uint16(33545), + 148: uint16(33527), + 149: uint16(33508), + 150: uint16(33551), + 151: uint16(33543), + 152: uint16(33500), + 153: uint16(33524), + 154: uint16(33490), + 155: uint16(33496), + 156: uint16(33548), + 157: uint16(33531), + 158: uint16(33491), + 159: uint16(33553), + 160: uint16(33562), + 161: uint16(33542), + 162: uint16(33556), + 163: uint16(33557), + 164: uint16(33504), + 165: uint16(33493), + 166: uint16(33564), + 167: uint16(33617), + 168: uint16(33627), + 169: uint16(33628), + 170: uint16(33544), + 171: uint16(33682), + 172: uint16(33596), + 173: uint16(33588), + 174: uint16(33585), + 175: uint16(33691), + 176: uint16(33630), + 177: uint16(33583), + 178: uint16(33615), + 179: uint16(33607), + 180: uint16(33603), + 181: uint16(33631), + 182: uint16(33600), + 183: uint16(33559), + 184: uint16(33632), + 185: uint16(33581), + 186: uint16(33594), + 187: uint16(33587), + 188: uint16(33638), + 189: uint16(33637), + }, + 92: { + 0: uint16(36581), + 1: uint16(36582), + 2: uint16(36583), + 3: uint16(36584), + 4: uint16(36585), + 5: uint16(36586), + 6: uint16(36587), + 7: uint16(36588), + 8: uint16(36589), + 9: uint16(36590), + 10: uint16(36591), + 11: uint16(36592), + 12: uint16(36593), + 13: uint16(36594), + 14: uint16(36595), + 15: uint16(36596), + 16: uint16(36597), + 17: uint16(36598), + 18: uint16(36599), + 19: uint16(36600), + 20: uint16(36601), + 21: uint16(36602), + 22: uint16(36603), + 23: uint16(36604), + 24: uint16(36605), + 25: uint16(36606), + 26: uint16(36607), + 27: uint16(36608), + 28: uint16(36609), + 29: uint16(36610), + 30: uint16(36611), + 31: uint16(36612), + 32: uint16(36613), + 33: uint16(36614), + 34: uint16(36615), + 35: uint16(36616), + 36: uint16(36617), + 37: uint16(36618), + 38: uint16(36619), + 39: uint16(36620), + 40: uint16(36621), + 41: uint16(36622), + 42: uint16(36623), + 43: uint16(36624), + 44: uint16(36625), + 45: uint16(36626), + 46: uint16(36627), + 47: uint16(36628), + 48: uint16(36629), + 49: uint16(36630), + 50: uint16(36631), + 51: uint16(36632), + 52: uint16(36633), + 53: uint16(36634), + 54: uint16(36635), + 55: uint16(36636), + 56: uint16(36637), + 57: uint16(36638), + 58: uint16(36639), + 59: uint16(36640), + 60: uint16(36641), + 61: uint16(36642), + 62: uint16(36643), + 63: uint16(36644), + 64: uint16(36645), + 65: uint16(36646), + 66: uint16(36647), + 67: uint16(36648), + 68: uint16(36649), + 69: uint16(36650), + 70: uint16(36651), + 71: uint16(36652), + 72: uint16(36653), + 73: uint16(36654), + 74: uint16(36655), + 75: uint16(36656), + 76: uint16(36657), + 77: uint16(36658), + 78: uint16(36659), + 79: uint16(36660), + 80: uint16(36661), + 81: uint16(36662), + 82: uint16(36663), + 83: uint16(36664), + 84: uint16(36665), + 85: uint16(36666), + 86: uint16(36667), + 87: uint16(36668), + 88: uint16(36669), + 89: uint16(36670), + 90: uint16(36671), + 91: uint16(36672), + 92: uint16(36673), + 93: uint16(36674), + 94: uint16(36675), + 95: uint16(36676), + 96: uint16(33640), + 97: uint16(33563), + 98: uint16(33641), + 99: uint16(33644), + 100: uint16(33642), + 101: uint16(33645), + 102: uint16(33646), + 103: uint16(33712), + 104: uint16(33656), + 105: uint16(33715), + 106: uint16(33716), + 107: uint16(33696), + 108: uint16(33706), + 109: uint16(33683), + 110: uint16(33692), + 111: uint16(33669), + 112: uint16(33660), + 113: uint16(33718), + 114: uint16(33705), + 115: uint16(33661), + 116: uint16(33720), + 117: uint16(33659), + 118: uint16(33688), + 119: uint16(33694), + 120: uint16(33704), + 121: uint16(33722), + 122: uint16(33724), + 123: uint16(33729), + 124: uint16(33793), + 125: uint16(33765), + 126: uint16(33752), + 127: uint16(22535), + 128: uint16(33816), + 129: uint16(33803), + 130: uint16(33757), + 131: uint16(33789), + 132: uint16(33750), + 133: uint16(33820), + 134: uint16(33848), + 135: uint16(33809), + 136: uint16(33798), + 137: uint16(33748), + 138: uint16(33759), + 139: uint16(33807), + 140: uint16(33795), + 141: uint16(33784), + 142: uint16(33785), + 143: uint16(33770), + 144: uint16(33733), + 145: uint16(33728), + 146: uint16(33830), + 147: uint16(33776), + 148: uint16(33761), + 149: uint16(33884), + 150: uint16(33873), + 151: uint16(33882), + 152: uint16(33881), + 153: uint16(33907), + 154: uint16(33927), + 155: uint16(33928), + 156: uint16(33914), + 157: uint16(33929), + 158: uint16(33912), + 159: uint16(33852), + 160: uint16(33862), + 161: uint16(33897), + 162: uint16(33910), + 163: uint16(33932), + 164: uint16(33934), + 165: uint16(33841), + 166: uint16(33901), + 167: uint16(33985), + 168: uint16(33997), + 169: uint16(34000), + 170: uint16(34022), + 171: uint16(33981), + 172: uint16(34003), + 173: uint16(33994), + 174: uint16(33983), + 175: uint16(33978), + 176: uint16(34016), + 177: uint16(33953), + 178: uint16(33977), + 179: uint16(33972), + 180: uint16(33943), + 181: uint16(34021), + 182: uint16(34019), + 183: uint16(34060), + 184: uint16(29965), + 185: uint16(34104), + 186: uint16(34032), + 187: uint16(34105), + 188: uint16(34079), + 189: uint16(34106), + }, + 93: { + 0: uint16(36677), + 1: uint16(36678), + 2: uint16(36679), + 3: uint16(36680), + 4: uint16(36681), + 5: uint16(36682), + 6: uint16(36683), + 7: uint16(36684), + 8: uint16(36685), + 9: uint16(36686), + 10: uint16(36687), + 11: uint16(36688), + 12: uint16(36689), + 13: uint16(36690), + 14: uint16(36691), + 15: uint16(36692), + 16: uint16(36693), + 17: uint16(36694), + 18: uint16(36695), + 19: uint16(36696), + 20: uint16(36697), + 21: uint16(36698), + 22: uint16(36699), + 23: uint16(36700), + 24: uint16(36701), + 25: uint16(36702), + 26: uint16(36703), + 27: uint16(36704), + 28: uint16(36705), + 29: uint16(36706), + 30: uint16(36707), + 31: uint16(36708), + 32: uint16(36709), + 33: uint16(36714), + 34: uint16(36736), + 35: uint16(36748), + 36: uint16(36754), + 37: uint16(36765), + 38: uint16(36768), + 39: uint16(36769), + 40: uint16(36770), + 41: uint16(36772), + 42: uint16(36773), + 43: uint16(36774), + 44: uint16(36775), + 45: uint16(36778), + 46: uint16(36780), + 47: uint16(36781), + 48: uint16(36782), + 49: uint16(36783), + 50: uint16(36786), + 51: uint16(36787), + 52: uint16(36788), + 53: uint16(36789), + 54: uint16(36791), + 55: uint16(36792), + 56: uint16(36794), + 57: uint16(36795), + 58: uint16(36796), + 59: uint16(36799), + 60: uint16(36800), + 61: uint16(36803), + 62: uint16(36806), + 63: uint16(36809), + 64: uint16(36810), + 65: uint16(36811), + 66: uint16(36812), + 67: uint16(36813), + 68: uint16(36815), + 69: uint16(36818), + 70: uint16(36822), + 71: uint16(36823), + 72: uint16(36826), + 73: uint16(36832), + 74: uint16(36833), + 75: uint16(36835), + 76: uint16(36839), + 77: uint16(36844), + 78: uint16(36847), + 79: uint16(36849), + 80: uint16(36850), + 81: uint16(36852), + 82: uint16(36853), + 83: uint16(36854), + 84: uint16(36858), + 85: uint16(36859), + 86: uint16(36860), + 87: uint16(36862), + 88: uint16(36863), + 89: uint16(36871), + 90: uint16(36872), + 91: uint16(36876), + 92: uint16(36878), + 93: uint16(36883), + 94: uint16(36885), + 95: uint16(36888), + 96: uint16(34134), + 97: uint16(34107), + 98: uint16(34047), + 99: uint16(34044), + 100: uint16(34137), + 101: uint16(34120), + 102: uint16(34152), + 103: uint16(34148), + 104: uint16(34142), + 105: uint16(34170), + 106: uint16(30626), + 107: uint16(34115), + 108: uint16(34162), + 109: uint16(34171), + 110: uint16(34212), + 111: uint16(34216), + 112: uint16(34183), + 113: uint16(34191), + 114: uint16(34169), + 115: uint16(34222), + 116: uint16(34204), + 117: uint16(34181), + 118: uint16(34233), + 119: uint16(34231), + 120: uint16(34224), + 121: uint16(34259), + 122: uint16(34241), + 123: uint16(34268), + 124: uint16(34303), + 125: uint16(34343), + 126: uint16(34309), + 127: uint16(34345), + 128: uint16(34326), + 129: uint16(34364), + 130: uint16(24318), + 131: uint16(24328), + 132: uint16(22844), + 133: uint16(22849), + 134: uint16(32823), + 135: uint16(22869), + 136: uint16(22874), + 137: uint16(22872), + 138: uint16(21263), + 139: uint16(23586), + 140: uint16(23589), + 141: uint16(23596), + 142: uint16(23604), + 143: uint16(25164), + 144: uint16(25194), + 145: uint16(25247), + 146: uint16(25275), + 147: uint16(25290), + 148: uint16(25306), + 149: uint16(25303), + 150: uint16(25326), + 151: uint16(25378), + 152: uint16(25334), + 153: uint16(25401), + 154: uint16(25419), + 155: uint16(25411), + 156: uint16(25517), + 157: uint16(25590), + 158: uint16(25457), + 159: uint16(25466), + 160: uint16(25486), + 161: uint16(25524), + 162: uint16(25453), + 163: uint16(25516), + 164: uint16(25482), + 165: uint16(25449), + 166: uint16(25518), + 167: uint16(25532), + 168: uint16(25586), + 169: uint16(25592), + 170: uint16(25568), + 171: uint16(25599), + 172: uint16(25540), + 173: uint16(25566), + 174: uint16(25550), + 175: uint16(25682), + 176: uint16(25542), + 177: uint16(25534), + 178: uint16(25669), + 179: uint16(25665), + 180: uint16(25611), + 181: uint16(25627), + 182: uint16(25632), + 183: uint16(25612), + 184: uint16(25638), + 185: uint16(25633), + 186: uint16(25694), + 187: uint16(25732), + 188: uint16(25709), + 189: uint16(25750), + }, + 94: { + 0: uint16(36889), + 1: uint16(36892), + 2: uint16(36899), + 3: uint16(36900), + 4: uint16(36901), + 5: uint16(36903), + 6: uint16(36904), + 7: uint16(36905), + 8: uint16(36906), + 9: uint16(36907), + 10: uint16(36908), + 11: uint16(36912), + 12: uint16(36913), + 13: uint16(36914), + 14: uint16(36915), + 15: uint16(36916), + 16: uint16(36919), + 17: uint16(36921), + 18: uint16(36922), + 19: uint16(36925), + 20: uint16(36927), + 21: uint16(36928), + 22: uint16(36931), + 23: uint16(36933), + 24: uint16(36934), + 25: uint16(36936), + 26: uint16(36937), + 27: uint16(36938), + 28: uint16(36939), + 29: uint16(36940), + 30: uint16(36942), + 31: uint16(36948), + 32: uint16(36949), + 33: uint16(36950), + 34: uint16(36953), + 35: uint16(36954), + 36: uint16(36956), + 37: uint16(36957), + 38: uint16(36958), + 39: uint16(36959), + 40: uint16(36960), + 41: uint16(36961), + 42: uint16(36964), + 43: uint16(36966), + 44: uint16(36967), + 45: uint16(36969), + 46: uint16(36970), + 47: uint16(36971), + 48: uint16(36972), + 49: uint16(36975), + 50: uint16(36976), + 51: uint16(36977), + 52: uint16(36978), + 53: uint16(36979), + 54: uint16(36982), + 55: uint16(36983), + 56: uint16(36984), + 57: uint16(36985), + 58: uint16(36986), + 59: uint16(36987), + 60: uint16(36988), + 61: uint16(36990), + 62: uint16(36993), + 63: uint16(36996), + 64: uint16(36997), + 65: uint16(36998), + 66: uint16(36999), + 67: uint16(37001), + 68: uint16(37002), + 69: uint16(37004), + 70: uint16(37005), + 71: uint16(37006), + 72: uint16(37007), + 73: uint16(37008), + 74: uint16(37010), + 75: uint16(37012), + 76: uint16(37014), + 77: uint16(37016), + 78: uint16(37018), + 79: uint16(37020), + 80: uint16(37022), + 81: uint16(37023), + 82: uint16(37024), + 83: uint16(37028), + 84: uint16(37029), + 85: uint16(37031), + 86: uint16(37032), + 87: uint16(37033), + 88: uint16(37035), + 89: uint16(37037), + 90: uint16(37042), + 91: uint16(37047), + 92: uint16(37052), + 93: uint16(37053), + 94: uint16(37055), + 95: uint16(37056), + 96: uint16(25722), + 97: uint16(25783), + 98: uint16(25784), + 99: uint16(25753), + 100: uint16(25786), + 101: uint16(25792), + 102: uint16(25808), + 103: uint16(25815), + 104: uint16(25828), + 105: uint16(25826), + 106: uint16(25865), + 107: uint16(25893), + 108: uint16(25902), + 109: uint16(24331), + 110: uint16(24530), + 111: uint16(29977), + 112: uint16(24337), + 113: uint16(21343), + 114: uint16(21489), + 115: uint16(21501), + 116: uint16(21481), + 117: uint16(21480), + 118: uint16(21499), + 119: uint16(21522), + 120: uint16(21526), + 121: uint16(21510), + 122: uint16(21579), + 123: uint16(21586), + 124: uint16(21587), + 125: uint16(21588), + 126: uint16(21590), + 127: uint16(21571), + 128: uint16(21537), + 129: uint16(21591), + 130: uint16(21593), + 131: uint16(21539), + 132: uint16(21554), + 133: uint16(21634), + 134: uint16(21652), + 135: uint16(21623), + 136: uint16(21617), + 137: uint16(21604), + 138: uint16(21658), + 139: uint16(21659), + 140: uint16(21636), + 141: uint16(21622), + 142: uint16(21606), + 143: uint16(21661), + 144: uint16(21712), + 145: uint16(21677), + 146: uint16(21698), + 147: uint16(21684), + 148: uint16(21714), + 149: uint16(21671), + 150: uint16(21670), + 151: uint16(21715), + 152: uint16(21716), + 153: uint16(21618), + 154: uint16(21667), + 155: uint16(21717), + 156: uint16(21691), + 157: uint16(21695), + 158: uint16(21708), + 159: uint16(21721), + 160: uint16(21722), + 161: uint16(21724), + 162: uint16(21673), + 163: uint16(21674), + 164: uint16(21668), + 165: uint16(21725), + 166: uint16(21711), + 167: uint16(21726), + 168: uint16(21787), + 169: uint16(21735), + 170: uint16(21792), + 171: uint16(21757), + 172: uint16(21780), + 173: uint16(21747), + 174: uint16(21794), + 175: uint16(21795), + 176: uint16(21775), + 177: uint16(21777), + 178: uint16(21799), + 179: uint16(21802), + 180: uint16(21863), + 181: uint16(21903), + 182: uint16(21941), + 183: uint16(21833), + 184: uint16(21869), + 185: uint16(21825), + 186: uint16(21845), + 187: uint16(21823), + 188: uint16(21840), + 189: uint16(21820), + }, + 95: { + 0: uint16(37058), + 1: uint16(37059), + 2: uint16(37062), + 3: uint16(37064), + 4: uint16(37065), + 5: uint16(37067), + 6: uint16(37068), + 7: uint16(37069), + 8: uint16(37074), + 9: uint16(37076), + 10: uint16(37077), + 11: uint16(37078), + 12: uint16(37080), + 13: uint16(37081), + 14: uint16(37082), + 15: uint16(37086), + 16: uint16(37087), + 17: uint16(37088), + 18: uint16(37091), + 19: uint16(37092), + 20: uint16(37093), + 21: uint16(37097), + 22: uint16(37098), + 23: uint16(37100), + 24: uint16(37102), + 25: uint16(37104), + 26: uint16(37105), + 27: uint16(37106), + 28: uint16(37107), + 29: uint16(37109), + 30: uint16(37110), + 31: uint16(37111), + 32: uint16(37113), + 33: uint16(37114), + 34: uint16(37115), + 35: uint16(37116), + 36: uint16(37119), + 37: uint16(37120), + 38: uint16(37121), + 39: uint16(37123), + 40: uint16(37125), + 41: uint16(37126), + 42: uint16(37127), + 43: uint16(37128), + 44: uint16(37129), + 45: uint16(37130), + 46: uint16(37131), + 47: uint16(37132), + 48: uint16(37133), + 49: uint16(37134), + 50: uint16(37135), + 51: uint16(37136), + 52: uint16(37137), + 53: uint16(37138), + 54: uint16(37139), + 55: uint16(37140), + 56: uint16(37141), + 57: uint16(37142), + 58: uint16(37143), + 59: uint16(37144), + 60: uint16(37146), + 61: uint16(37147), + 62: uint16(37148), + 63: uint16(37149), + 64: uint16(37151), + 65: uint16(37152), + 66: uint16(37153), + 67: uint16(37156), + 68: uint16(37157), + 69: uint16(37158), + 70: uint16(37159), + 71: uint16(37160), + 72: uint16(37161), + 73: uint16(37162), + 74: uint16(37163), + 75: uint16(37164), + 76: uint16(37165), + 77: uint16(37166), + 78: uint16(37168), + 79: uint16(37170), + 80: uint16(37171), + 81: uint16(37172), + 82: uint16(37173), + 83: uint16(37174), + 84: uint16(37175), + 85: uint16(37176), + 86: uint16(37178), + 87: uint16(37179), + 88: uint16(37180), + 89: uint16(37181), + 90: uint16(37182), + 91: uint16(37183), + 92: uint16(37184), + 93: uint16(37185), + 94: uint16(37186), + 95: uint16(37188), + 96: uint16(21815), + 97: uint16(21846), + 98: uint16(21877), + 99: uint16(21878), + 100: uint16(21879), + 101: uint16(21811), + 102: uint16(21808), + 103: uint16(21852), + 104: uint16(21899), + 105: uint16(21970), + 106: uint16(21891), + 107: uint16(21937), + 108: uint16(21945), + 109: uint16(21896), + 110: uint16(21889), + 111: uint16(21919), + 112: uint16(21886), + 113: uint16(21974), + 114: uint16(21905), + 115: uint16(21883), + 116: uint16(21983), + 117: uint16(21949), + 118: uint16(21950), + 119: uint16(21908), + 120: uint16(21913), + 121: uint16(21994), + 122: uint16(22007), + 123: uint16(21961), + 124: uint16(22047), + 125: uint16(21969), + 126: uint16(21995), + 127: uint16(21996), + 128: uint16(21972), + 129: uint16(21990), + 130: uint16(21981), + 131: uint16(21956), + 132: uint16(21999), + 133: uint16(21989), + 134: uint16(22002), + 135: uint16(22003), + 136: uint16(21964), + 137: uint16(21965), + 138: uint16(21992), + 139: uint16(22005), + 140: uint16(21988), + 141: uint16(36756), + 142: uint16(22046), + 143: uint16(22024), + 144: uint16(22028), + 145: uint16(22017), + 146: uint16(22052), + 147: uint16(22051), + 148: uint16(22014), + 149: uint16(22016), + 150: uint16(22055), + 151: uint16(22061), + 152: uint16(22104), + 153: uint16(22073), + 154: uint16(22103), + 155: uint16(22060), + 156: uint16(22093), + 157: uint16(22114), + 158: uint16(22105), + 159: uint16(22108), + 160: uint16(22092), + 161: uint16(22100), + 162: uint16(22150), + 163: uint16(22116), + 164: uint16(22129), + 165: uint16(22123), + 166: uint16(22139), + 167: uint16(22140), + 168: uint16(22149), + 169: uint16(22163), + 170: uint16(22191), + 171: uint16(22228), + 172: uint16(22231), + 173: uint16(22237), + 174: uint16(22241), + 175: uint16(22261), + 176: uint16(22251), + 177: uint16(22265), + 178: uint16(22271), + 179: uint16(22276), + 180: uint16(22282), + 181: uint16(22281), + 182: uint16(22300), + 183: uint16(24079), + 184: uint16(24089), + 185: uint16(24084), + 186: uint16(24081), + 187: uint16(24113), + 188: uint16(24123), + 189: uint16(24124), + }, + 96: { + 0: uint16(37189), + 1: uint16(37191), + 2: uint16(37192), + 3: uint16(37201), + 4: uint16(37203), + 5: uint16(37204), + 6: uint16(37205), + 7: uint16(37206), + 8: uint16(37208), + 9: uint16(37209), + 10: uint16(37211), + 11: uint16(37212), + 12: uint16(37215), + 13: uint16(37216), + 14: uint16(37222), + 15: uint16(37223), + 16: uint16(37224), + 17: uint16(37227), + 18: uint16(37229), + 19: uint16(37235), + 20: uint16(37242), + 21: uint16(37243), + 22: uint16(37244), + 23: uint16(37248), + 24: uint16(37249), + 25: uint16(37250), + 26: uint16(37251), + 27: uint16(37252), + 28: uint16(37254), + 29: uint16(37256), + 30: uint16(37258), + 31: uint16(37262), + 32: uint16(37263), + 33: uint16(37267), + 34: uint16(37268), + 35: uint16(37269), + 36: uint16(37270), + 37: uint16(37271), + 38: uint16(37272), + 39: uint16(37273), + 40: uint16(37276), + 41: uint16(37277), + 42: uint16(37278), + 43: uint16(37279), + 44: uint16(37280), + 45: uint16(37281), + 46: uint16(37284), + 47: uint16(37285), + 48: uint16(37286), + 49: uint16(37287), + 50: uint16(37288), + 51: uint16(37289), + 52: uint16(37291), + 53: uint16(37292), + 54: uint16(37296), + 55: uint16(37297), + 56: uint16(37298), + 57: uint16(37299), + 58: uint16(37302), + 59: uint16(37303), + 60: uint16(37304), + 61: uint16(37305), + 62: uint16(37307), + 63: uint16(37308), + 64: uint16(37309), + 65: uint16(37310), + 66: uint16(37311), + 67: uint16(37312), + 68: uint16(37313), + 69: uint16(37314), + 70: uint16(37315), + 71: uint16(37316), + 72: uint16(37317), + 73: uint16(37318), + 74: uint16(37320), + 75: uint16(37323), + 76: uint16(37328), + 77: uint16(37330), + 78: uint16(37331), + 79: uint16(37332), + 80: uint16(37333), + 81: uint16(37334), + 82: uint16(37335), + 83: uint16(37336), + 84: uint16(37337), + 85: uint16(37338), + 86: uint16(37339), + 87: uint16(37341), + 88: uint16(37342), + 89: uint16(37343), + 90: uint16(37344), + 91: uint16(37345), + 92: uint16(37346), + 93: uint16(37347), + 94: uint16(37348), + 95: uint16(37349), + 96: uint16(24119), + 97: uint16(24132), + 98: uint16(24148), + 99: uint16(24155), + 100: uint16(24158), + 101: uint16(24161), + 102: uint16(23692), + 103: uint16(23674), + 104: uint16(23693), + 105: uint16(23696), + 106: uint16(23702), + 107: uint16(23688), + 108: uint16(23704), + 109: uint16(23705), + 110: uint16(23697), + 111: uint16(23706), + 112: uint16(23708), + 113: uint16(23733), + 114: uint16(23714), + 115: uint16(23741), + 116: uint16(23724), + 117: uint16(23723), + 118: uint16(23729), + 119: uint16(23715), + 120: uint16(23745), + 121: uint16(23735), + 122: uint16(23748), + 123: uint16(23762), + 124: uint16(23780), + 125: uint16(23755), + 126: uint16(23781), + 127: uint16(23810), + 128: uint16(23811), + 129: uint16(23847), + 130: uint16(23846), + 131: uint16(23854), + 132: uint16(23844), + 133: uint16(23838), + 134: uint16(23814), + 135: uint16(23835), + 136: uint16(23896), + 137: uint16(23870), + 138: uint16(23860), + 139: uint16(23869), + 140: uint16(23916), + 141: uint16(23899), + 142: uint16(23919), + 143: uint16(23901), + 144: uint16(23915), + 145: uint16(23883), + 146: uint16(23882), + 147: uint16(23913), + 148: uint16(23924), + 149: uint16(23938), + 150: uint16(23961), + 151: uint16(23965), + 152: uint16(35955), + 153: uint16(23991), + 154: uint16(24005), + 155: uint16(24435), + 156: uint16(24439), + 157: uint16(24450), + 158: uint16(24455), + 159: uint16(24457), + 160: uint16(24460), + 161: uint16(24469), + 162: uint16(24473), + 163: uint16(24476), + 164: uint16(24488), + 165: uint16(24493), + 166: uint16(24501), + 167: uint16(24508), + 168: uint16(34914), + 169: uint16(24417), + 170: uint16(29357), + 171: uint16(29360), + 172: uint16(29364), + 173: uint16(29367), + 174: uint16(29368), + 175: uint16(29379), + 176: uint16(29377), + 177: uint16(29390), + 178: uint16(29389), + 179: uint16(29394), + 180: uint16(29416), + 181: uint16(29423), + 182: uint16(29417), + 183: uint16(29426), + 184: uint16(29428), + 185: uint16(29431), + 186: uint16(29441), + 187: uint16(29427), + 188: uint16(29443), + 189: uint16(29434), + }, + 97: { + 0: uint16(37350), + 1: uint16(37351), + 2: uint16(37352), + 3: uint16(37353), + 4: uint16(37354), + 5: uint16(37355), + 6: uint16(37356), + 7: uint16(37357), + 8: uint16(37358), + 9: uint16(37359), + 10: uint16(37360), + 11: uint16(37361), + 12: uint16(37362), + 13: uint16(37363), + 14: uint16(37364), + 15: uint16(37365), + 16: uint16(37366), + 17: uint16(37367), + 18: uint16(37368), + 19: uint16(37369), + 20: uint16(37370), + 21: uint16(37371), + 22: uint16(37372), + 23: uint16(37373), + 24: uint16(37374), + 25: uint16(37375), + 26: uint16(37376), + 27: uint16(37377), + 28: uint16(37378), + 29: uint16(37379), + 30: uint16(37380), + 31: uint16(37381), + 32: uint16(37382), + 33: uint16(37383), + 34: uint16(37384), + 35: uint16(37385), + 36: uint16(37386), + 37: uint16(37387), + 38: uint16(37388), + 39: uint16(37389), + 40: uint16(37390), + 41: uint16(37391), + 42: uint16(37392), + 43: uint16(37393), + 44: uint16(37394), + 45: uint16(37395), + 46: uint16(37396), + 47: uint16(37397), + 48: uint16(37398), + 49: uint16(37399), + 50: uint16(37400), + 51: uint16(37401), + 52: uint16(37402), + 53: uint16(37403), + 54: uint16(37404), + 55: uint16(37405), + 56: uint16(37406), + 57: uint16(37407), + 58: uint16(37408), + 59: uint16(37409), + 60: uint16(37410), + 61: uint16(37411), + 62: uint16(37412), + 63: uint16(37413), + 64: uint16(37414), + 65: uint16(37415), + 66: uint16(37416), + 67: uint16(37417), + 68: uint16(37418), + 69: uint16(37419), + 70: uint16(37420), + 71: uint16(37421), + 72: uint16(37422), + 73: uint16(37423), + 74: uint16(37424), + 75: uint16(37425), + 76: uint16(37426), + 77: uint16(37427), + 78: uint16(37428), + 79: uint16(37429), + 80: uint16(37430), + 81: uint16(37431), + 82: uint16(37432), + 83: uint16(37433), + 84: uint16(37434), + 85: uint16(37435), + 86: uint16(37436), + 87: uint16(37437), + 88: uint16(37438), + 89: uint16(37439), + 90: uint16(37440), + 91: uint16(37441), + 92: uint16(37442), + 93: uint16(37443), + 94: uint16(37444), + 95: uint16(37445), + 96: uint16(29435), + 97: uint16(29463), + 98: uint16(29459), + 99: uint16(29473), + 100: uint16(29450), + 101: uint16(29470), + 102: uint16(29469), + 103: uint16(29461), + 104: uint16(29474), + 105: uint16(29497), + 106: uint16(29477), + 107: uint16(29484), + 108: uint16(29496), + 109: uint16(29489), + 110: uint16(29520), + 111: uint16(29517), + 112: uint16(29527), + 113: uint16(29536), + 114: uint16(29548), + 115: uint16(29551), + 116: uint16(29566), + 117: uint16(33307), + 118: uint16(22821), + 119: uint16(39143), + 120: uint16(22820), + 121: uint16(22786), + 122: uint16(39267), + 123: uint16(39271), + 124: uint16(39272), + 125: uint16(39273), + 126: uint16(39274), + 127: uint16(39275), + 128: uint16(39276), + 129: uint16(39284), + 130: uint16(39287), + 131: uint16(39293), + 132: uint16(39296), + 133: uint16(39300), + 134: uint16(39303), + 135: uint16(39306), + 136: uint16(39309), + 137: uint16(39312), + 138: uint16(39313), + 139: uint16(39315), + 140: uint16(39316), + 141: uint16(39317), + 142: uint16(24192), + 143: uint16(24209), + 144: uint16(24203), + 145: uint16(24214), + 146: uint16(24229), + 147: uint16(24224), + 148: uint16(24249), + 149: uint16(24245), + 150: uint16(24254), + 151: uint16(24243), + 152: uint16(36179), + 153: uint16(24274), + 154: uint16(24273), + 155: uint16(24283), + 156: uint16(24296), + 157: uint16(24298), + 158: uint16(33210), + 159: uint16(24516), + 160: uint16(24521), + 161: uint16(24534), + 162: uint16(24527), + 163: uint16(24579), + 164: uint16(24558), + 165: uint16(24580), + 166: uint16(24545), + 167: uint16(24548), + 168: uint16(24574), + 169: uint16(24581), + 170: uint16(24582), + 171: uint16(24554), + 172: uint16(24557), + 173: uint16(24568), + 174: uint16(24601), + 175: uint16(24629), + 176: uint16(24614), + 177: uint16(24603), + 178: uint16(24591), + 179: uint16(24589), + 180: uint16(24617), + 181: uint16(24619), + 182: uint16(24586), + 183: uint16(24639), + 184: uint16(24609), + 185: uint16(24696), + 186: uint16(24697), + 187: uint16(24699), + 188: uint16(24698), + 189: uint16(24642), + }, + 98: { + 0: uint16(37446), + 1: uint16(37447), + 2: uint16(37448), + 3: uint16(37449), + 4: uint16(37450), + 5: uint16(37451), + 6: uint16(37452), + 7: uint16(37453), + 8: uint16(37454), + 9: uint16(37455), + 10: uint16(37456), + 11: uint16(37457), + 12: uint16(37458), + 13: uint16(37459), + 14: uint16(37460), + 15: uint16(37461), + 16: uint16(37462), + 17: uint16(37463), + 18: uint16(37464), + 19: uint16(37465), + 20: uint16(37466), + 21: uint16(37467), + 22: uint16(37468), + 23: uint16(37469), + 24: uint16(37470), + 25: uint16(37471), + 26: uint16(37472), + 27: uint16(37473), + 28: uint16(37474), + 29: uint16(37475), + 30: uint16(37476), + 31: uint16(37477), + 32: uint16(37478), + 33: uint16(37479), + 34: uint16(37480), + 35: uint16(37481), + 36: uint16(37482), + 37: uint16(37483), + 38: uint16(37484), + 39: uint16(37485), + 40: uint16(37486), + 41: uint16(37487), + 42: uint16(37488), + 43: uint16(37489), + 44: uint16(37490), + 45: uint16(37491), + 46: uint16(37493), + 47: uint16(37494), + 48: uint16(37495), + 49: uint16(37496), + 50: uint16(37497), + 51: uint16(37498), + 52: uint16(37499), + 53: uint16(37500), + 54: uint16(37501), + 55: uint16(37502), + 56: uint16(37503), + 57: uint16(37504), + 58: uint16(37505), + 59: uint16(37506), + 60: uint16(37507), + 61: uint16(37508), + 62: uint16(37509), + 63: uint16(37510), + 64: uint16(37511), + 65: uint16(37512), + 66: uint16(37513), + 67: uint16(37514), + 68: uint16(37515), + 69: uint16(37516), + 70: uint16(37517), + 71: uint16(37519), + 72: uint16(37520), + 73: uint16(37521), + 74: uint16(37522), + 75: uint16(37523), + 76: uint16(37524), + 77: uint16(37525), + 78: uint16(37526), + 79: uint16(37527), + 80: uint16(37528), + 81: uint16(37529), + 82: uint16(37530), + 83: uint16(37531), + 84: uint16(37532), + 85: uint16(37533), + 86: uint16(37534), + 87: uint16(37535), + 88: uint16(37536), + 89: uint16(37537), + 90: uint16(37538), + 91: uint16(37539), + 92: uint16(37540), + 93: uint16(37541), + 94: uint16(37542), + 95: uint16(37543), + 96: uint16(24682), + 97: uint16(24701), + 98: uint16(24726), + 99: uint16(24730), + 100: uint16(24749), + 101: uint16(24733), + 102: uint16(24707), + 103: uint16(24722), + 104: uint16(24716), + 105: uint16(24731), + 106: uint16(24812), + 107: uint16(24763), + 108: uint16(24753), + 109: uint16(24797), + 110: uint16(24792), + 111: uint16(24774), + 112: uint16(24794), + 113: uint16(24756), + 114: uint16(24864), + 115: uint16(24870), + 116: uint16(24853), + 117: uint16(24867), + 118: uint16(24820), + 119: uint16(24832), + 120: uint16(24846), + 121: uint16(24875), + 122: uint16(24906), + 123: uint16(24949), + 124: uint16(25004), + 125: uint16(24980), + 126: uint16(24999), + 127: uint16(25015), + 128: uint16(25044), + 129: uint16(25077), + 130: uint16(24541), + 131: uint16(38579), + 132: uint16(38377), + 133: uint16(38379), + 134: uint16(38385), + 135: uint16(38387), + 136: uint16(38389), + 137: uint16(38390), + 138: uint16(38396), + 139: uint16(38398), + 140: uint16(38403), + 141: uint16(38404), + 142: uint16(38406), + 143: uint16(38408), + 144: uint16(38410), + 145: uint16(38411), + 146: uint16(38412), + 147: uint16(38413), + 148: uint16(38415), + 149: uint16(38418), + 150: uint16(38421), + 151: uint16(38422), + 152: uint16(38423), + 153: uint16(38425), + 154: uint16(38426), + 155: uint16(20012), + 156: uint16(29247), + 157: uint16(25109), + 158: uint16(27701), + 159: uint16(27732), + 160: uint16(27740), + 161: uint16(27722), + 162: uint16(27811), + 163: uint16(27781), + 164: uint16(27792), + 165: uint16(27796), + 166: uint16(27788), + 167: uint16(27752), + 168: uint16(27753), + 169: uint16(27764), + 170: uint16(27766), + 171: uint16(27782), + 172: uint16(27817), + 173: uint16(27856), + 174: uint16(27860), + 175: uint16(27821), + 176: uint16(27895), + 177: uint16(27896), + 178: uint16(27889), + 179: uint16(27863), + 180: uint16(27826), + 181: uint16(27872), + 182: uint16(27862), + 183: uint16(27898), + 184: uint16(27883), + 185: uint16(27886), + 186: uint16(27825), + 187: uint16(27859), + 188: uint16(27887), + 189: uint16(27902), + }, + 99: { + 0: uint16(37544), + 1: uint16(37545), + 2: uint16(37546), + 3: uint16(37547), + 4: uint16(37548), + 5: uint16(37549), + 6: uint16(37551), + 7: uint16(37552), + 8: uint16(37553), + 9: uint16(37554), + 10: uint16(37555), + 11: uint16(37556), + 12: uint16(37557), + 13: uint16(37558), + 14: uint16(37559), + 15: uint16(37560), + 16: uint16(37561), + 17: uint16(37562), + 18: uint16(37563), + 19: uint16(37564), + 20: uint16(37565), + 21: uint16(37566), + 22: uint16(37567), + 23: uint16(37568), + 24: uint16(37569), + 25: uint16(37570), + 26: uint16(37571), + 27: uint16(37572), + 28: uint16(37573), + 29: uint16(37574), + 30: uint16(37575), + 31: uint16(37577), + 32: uint16(37578), + 33: uint16(37579), + 34: uint16(37580), + 35: uint16(37581), + 36: uint16(37582), + 37: uint16(37583), + 38: uint16(37584), + 39: uint16(37585), + 40: uint16(37586), + 41: uint16(37587), + 42: uint16(37588), + 43: uint16(37589), + 44: uint16(37590), + 45: uint16(37591), + 46: uint16(37592), + 47: uint16(37593), + 48: uint16(37594), + 49: uint16(37595), + 50: uint16(37596), + 51: uint16(37597), + 52: uint16(37598), + 53: uint16(37599), + 54: uint16(37600), + 55: uint16(37601), + 56: uint16(37602), + 57: uint16(37603), + 58: uint16(37604), + 59: uint16(37605), + 60: uint16(37606), + 61: uint16(37607), + 62: uint16(37608), + 63: uint16(37609), + 64: uint16(37610), + 65: uint16(37611), + 66: uint16(37612), + 67: uint16(37613), + 68: uint16(37614), + 69: uint16(37615), + 70: uint16(37616), + 71: uint16(37617), + 72: uint16(37618), + 73: uint16(37619), + 74: uint16(37620), + 75: uint16(37621), + 76: uint16(37622), + 77: uint16(37623), + 78: uint16(37624), + 79: uint16(37625), + 80: uint16(37626), + 81: uint16(37627), + 82: uint16(37628), + 83: uint16(37629), + 84: uint16(37630), + 85: uint16(37631), + 86: uint16(37632), + 87: uint16(37633), + 88: uint16(37634), + 89: uint16(37635), + 90: uint16(37636), + 91: uint16(37637), + 92: uint16(37638), + 93: uint16(37639), + 94: uint16(37640), + 95: uint16(37641), + 96: uint16(27961), + 97: uint16(27943), + 98: uint16(27916), + 99: uint16(27971), + 100: uint16(27976), + 101: uint16(27911), + 102: uint16(27908), + 103: uint16(27929), + 104: uint16(27918), + 105: uint16(27947), + 106: uint16(27981), + 107: uint16(27950), + 108: uint16(27957), + 109: uint16(27930), + 110: uint16(27983), + 111: uint16(27986), + 112: uint16(27988), + 113: uint16(27955), + 114: uint16(28049), + 115: uint16(28015), + 116: uint16(28062), + 117: uint16(28064), + 118: uint16(27998), + 119: uint16(28051), + 120: uint16(28052), + 121: uint16(27996), + 122: uint16(28000), + 123: uint16(28028), + 124: uint16(28003), + 125: uint16(28186), + 126: uint16(28103), + 127: uint16(28101), + 128: uint16(28126), + 129: uint16(28174), + 130: uint16(28095), + 131: uint16(28128), + 132: uint16(28177), + 133: uint16(28134), + 134: uint16(28125), + 135: uint16(28121), + 136: uint16(28182), + 137: uint16(28075), + 138: uint16(28172), + 139: uint16(28078), + 140: uint16(28203), + 141: uint16(28270), + 142: uint16(28238), + 143: uint16(28267), + 144: uint16(28338), + 145: uint16(28255), + 146: uint16(28294), + 147: uint16(28243), + 148: uint16(28244), + 149: uint16(28210), + 150: uint16(28197), + 151: uint16(28228), + 152: uint16(28383), + 153: uint16(28337), + 154: uint16(28312), + 155: uint16(28384), + 156: uint16(28461), + 157: uint16(28386), + 158: uint16(28325), + 159: uint16(28327), + 160: uint16(28349), + 161: uint16(28347), + 162: uint16(28343), + 163: uint16(28375), + 164: uint16(28340), + 165: uint16(28367), + 166: uint16(28303), + 167: uint16(28354), + 168: uint16(28319), + 169: uint16(28514), + 170: uint16(28486), + 171: uint16(28487), + 172: uint16(28452), + 173: uint16(28437), + 174: uint16(28409), + 175: uint16(28463), + 176: uint16(28470), + 177: uint16(28491), + 178: uint16(28532), + 179: uint16(28458), + 180: uint16(28425), + 181: uint16(28457), + 182: uint16(28553), + 183: uint16(28557), + 184: uint16(28556), + 185: uint16(28536), + 186: uint16(28530), + 187: uint16(28540), + 188: uint16(28538), + 189: uint16(28625), + }, + 100: { + 0: uint16(37642), + 1: uint16(37643), + 2: uint16(37644), + 3: uint16(37645), + 4: uint16(37646), + 5: uint16(37647), + 6: uint16(37648), + 7: uint16(37649), + 8: uint16(37650), + 9: uint16(37651), + 10: uint16(37652), + 11: uint16(37653), + 12: uint16(37654), + 13: uint16(37655), + 14: uint16(37656), + 15: uint16(37657), + 16: uint16(37658), + 17: uint16(37659), + 18: uint16(37660), + 19: uint16(37661), + 20: uint16(37662), + 21: uint16(37663), + 22: uint16(37664), + 23: uint16(37665), + 24: uint16(37666), + 25: uint16(37667), + 26: uint16(37668), + 27: uint16(37669), + 28: uint16(37670), + 29: uint16(37671), + 30: uint16(37672), + 31: uint16(37673), + 32: uint16(37674), + 33: uint16(37675), + 34: uint16(37676), + 35: uint16(37677), + 36: uint16(37678), + 37: uint16(37679), + 38: uint16(37680), + 39: uint16(37681), + 40: uint16(37682), + 41: uint16(37683), + 42: uint16(37684), + 43: uint16(37685), + 44: uint16(37686), + 45: uint16(37687), + 46: uint16(37688), + 47: uint16(37689), + 48: uint16(37690), + 49: uint16(37691), + 50: uint16(37692), + 51: uint16(37693), + 52: uint16(37695), + 53: uint16(37696), + 54: uint16(37697), + 55: uint16(37698), + 56: uint16(37699), + 57: uint16(37700), + 58: uint16(37701), + 59: uint16(37702), + 60: uint16(37703), + 61: uint16(37704), + 62: uint16(37705), + 63: uint16(37706), + 64: uint16(37707), + 65: uint16(37708), + 66: uint16(37709), + 67: uint16(37710), + 68: uint16(37711), + 69: uint16(37712), + 70: uint16(37713), + 71: uint16(37714), + 72: uint16(37715), + 73: uint16(37716), + 74: uint16(37717), + 75: uint16(37718), + 76: uint16(37719), + 77: uint16(37720), + 78: uint16(37721), + 79: uint16(37722), + 80: uint16(37723), + 81: uint16(37724), + 82: uint16(37725), + 83: uint16(37726), + 84: uint16(37727), + 85: uint16(37728), + 86: uint16(37729), + 87: uint16(37730), + 88: uint16(37731), + 89: uint16(37732), + 90: uint16(37733), + 91: uint16(37734), + 92: uint16(37735), + 93: uint16(37736), + 94: uint16(37737), + 95: uint16(37739), + 96: uint16(28617), + 97: uint16(28583), + 98: uint16(28601), + 99: uint16(28598), + 100: uint16(28610), + 101: uint16(28641), + 102: uint16(28654), + 103: uint16(28638), + 104: uint16(28640), + 105: uint16(28655), + 106: uint16(28698), + 107: uint16(28707), + 108: uint16(28699), + 109: uint16(28729), + 110: uint16(28725), + 111: uint16(28751), + 112: uint16(28766), + 113: uint16(23424), + 114: uint16(23428), + 115: uint16(23445), + 116: uint16(23443), + 117: uint16(23461), + 118: uint16(23480), + 119: uint16(29999), + 120: uint16(39582), + 121: uint16(25652), + 122: uint16(23524), + 123: uint16(23534), + 124: uint16(35120), + 125: uint16(23536), + 126: uint16(36423), + 127: uint16(35591), + 128: uint16(36790), + 129: uint16(36819), + 130: uint16(36821), + 131: uint16(36837), + 132: uint16(36846), + 133: uint16(36836), + 134: uint16(36841), + 135: uint16(36838), + 136: uint16(36851), + 137: uint16(36840), + 138: uint16(36869), + 139: uint16(36868), + 140: uint16(36875), + 141: uint16(36902), + 142: uint16(36881), + 143: uint16(36877), + 144: uint16(36886), + 145: uint16(36897), + 146: uint16(36917), + 147: uint16(36918), + 148: uint16(36909), + 149: uint16(36911), + 150: uint16(36932), + 151: uint16(36945), + 152: uint16(36946), + 153: uint16(36944), + 154: uint16(36968), + 155: uint16(36952), + 156: uint16(36962), + 157: uint16(36955), + 158: uint16(26297), + 159: uint16(36980), + 160: uint16(36989), + 161: uint16(36994), + 162: uint16(37000), + 163: uint16(36995), + 164: uint16(37003), + 165: uint16(24400), + 166: uint16(24407), + 167: uint16(24406), + 168: uint16(24408), + 169: uint16(23611), + 170: uint16(21675), + 171: uint16(23632), + 172: uint16(23641), + 173: uint16(23409), + 174: uint16(23651), + 175: uint16(23654), + 176: uint16(32700), + 177: uint16(24362), + 178: uint16(24361), + 179: uint16(24365), + 180: uint16(33396), + 181: uint16(24380), + 182: uint16(39739), + 183: uint16(23662), + 184: uint16(22913), + 185: uint16(22915), + 186: uint16(22925), + 187: uint16(22953), + 188: uint16(22954), + 189: uint16(22947), + }, + 101: { + 0: uint16(37740), + 1: uint16(37741), + 2: uint16(37742), + 3: uint16(37743), + 4: uint16(37744), + 5: uint16(37745), + 6: uint16(37746), + 7: uint16(37747), + 8: uint16(37748), + 9: uint16(37749), + 10: uint16(37750), + 11: uint16(37751), + 12: uint16(37752), + 13: uint16(37753), + 14: uint16(37754), + 15: uint16(37755), + 16: uint16(37756), + 17: uint16(37757), + 18: uint16(37758), + 19: uint16(37759), + 20: uint16(37760), + 21: uint16(37761), + 22: uint16(37762), + 23: uint16(37763), + 24: uint16(37764), + 25: uint16(37765), + 26: uint16(37766), + 27: uint16(37767), + 28: uint16(37768), + 29: uint16(37769), + 30: uint16(37770), + 31: uint16(37771), + 32: uint16(37772), + 33: uint16(37773), + 34: uint16(37774), + 35: uint16(37776), + 36: uint16(37777), + 37: uint16(37778), + 38: uint16(37779), + 39: uint16(37780), + 40: uint16(37781), + 41: uint16(37782), + 42: uint16(37783), + 43: uint16(37784), + 44: uint16(37785), + 45: uint16(37786), + 46: uint16(37787), + 47: uint16(37788), + 48: uint16(37789), + 49: uint16(37790), + 50: uint16(37791), + 51: uint16(37792), + 52: uint16(37793), + 53: uint16(37794), + 54: uint16(37795), + 55: uint16(37796), + 56: uint16(37797), + 57: uint16(37798), + 58: uint16(37799), + 59: uint16(37800), + 60: uint16(37801), + 61: uint16(37802), + 62: uint16(37803), + 63: uint16(37804), + 64: uint16(37805), + 65: uint16(37806), + 66: uint16(37807), + 67: uint16(37808), + 68: uint16(37809), + 69: uint16(37810), + 70: uint16(37811), + 71: uint16(37812), + 72: uint16(37813), + 73: uint16(37814), + 74: uint16(37815), + 75: uint16(37816), + 76: uint16(37817), + 77: uint16(37818), + 78: uint16(37819), + 79: uint16(37820), + 80: uint16(37821), + 81: uint16(37822), + 82: uint16(37823), + 83: uint16(37824), + 84: uint16(37825), + 85: uint16(37826), + 86: uint16(37827), + 87: uint16(37828), + 88: uint16(37829), + 89: uint16(37830), + 90: uint16(37831), + 91: uint16(37832), + 92: uint16(37833), + 93: uint16(37835), + 94: uint16(37836), + 95: uint16(37837), + 96: uint16(22935), + 97: uint16(22986), + 98: uint16(22955), + 99: uint16(22942), + 100: uint16(22948), + 101: uint16(22994), + 102: uint16(22962), + 103: uint16(22959), + 104: uint16(22999), + 105: uint16(22974), + 106: uint16(23045), + 107: uint16(23046), + 108: uint16(23005), + 109: uint16(23048), + 110: uint16(23011), + 111: uint16(23000), + 112: uint16(23033), + 113: uint16(23052), + 114: uint16(23049), + 115: uint16(23090), + 116: uint16(23092), + 117: uint16(23057), + 118: uint16(23075), + 119: uint16(23059), + 120: uint16(23104), + 121: uint16(23143), + 122: uint16(23114), + 123: uint16(23125), + 124: uint16(23100), + 125: uint16(23138), + 126: uint16(23157), + 127: uint16(33004), + 128: uint16(23210), + 129: uint16(23195), + 130: uint16(23159), + 131: uint16(23162), + 132: uint16(23230), + 133: uint16(23275), + 134: uint16(23218), + 135: uint16(23250), + 136: uint16(23252), + 137: uint16(23224), + 138: uint16(23264), + 139: uint16(23267), + 140: uint16(23281), + 141: uint16(23254), + 142: uint16(23270), + 143: uint16(23256), + 144: uint16(23260), + 145: uint16(23305), + 146: uint16(23319), + 147: uint16(23318), + 148: uint16(23346), + 149: uint16(23351), + 150: uint16(23360), + 151: uint16(23573), + 152: uint16(23580), + 153: uint16(23386), + 154: uint16(23397), + 155: uint16(23411), + 156: uint16(23377), + 157: uint16(23379), + 158: uint16(23394), + 159: uint16(39541), + 160: uint16(39543), + 161: uint16(39544), + 162: uint16(39546), + 163: uint16(39551), + 164: uint16(39549), + 165: uint16(39552), + 166: uint16(39553), + 167: uint16(39557), + 168: uint16(39560), + 169: uint16(39562), + 170: uint16(39568), + 171: uint16(39570), + 172: uint16(39571), + 173: uint16(39574), + 174: uint16(39576), + 175: uint16(39579), + 176: uint16(39580), + 177: uint16(39581), + 178: uint16(39583), + 179: uint16(39584), + 180: uint16(39586), + 181: uint16(39587), + 182: uint16(39589), + 183: uint16(39591), + 184: uint16(32415), + 185: uint16(32417), + 186: uint16(32419), + 187: uint16(32421), + 188: uint16(32424), + 189: uint16(32425), + }, + 102: { + 0: uint16(37838), + 1: uint16(37839), + 2: uint16(37840), + 3: uint16(37841), + 4: uint16(37842), + 5: uint16(37843), + 6: uint16(37844), + 7: uint16(37845), + 8: uint16(37847), + 9: uint16(37848), + 10: uint16(37849), + 11: uint16(37850), + 12: uint16(37851), + 13: uint16(37852), + 14: uint16(37853), + 15: uint16(37854), + 16: uint16(37855), + 17: uint16(37856), + 18: uint16(37857), + 19: uint16(37858), + 20: uint16(37859), + 21: uint16(37860), + 22: uint16(37861), + 23: uint16(37862), + 24: uint16(37863), + 25: uint16(37864), + 26: uint16(37865), + 27: uint16(37866), + 28: uint16(37867), + 29: uint16(37868), + 30: uint16(37869), + 31: uint16(37870), + 32: uint16(37871), + 33: uint16(37872), + 34: uint16(37873), + 35: uint16(37874), + 36: uint16(37875), + 37: uint16(37876), + 38: uint16(37877), + 39: uint16(37878), + 40: uint16(37879), + 41: uint16(37880), + 42: uint16(37881), + 43: uint16(37882), + 44: uint16(37883), + 45: uint16(37884), + 46: uint16(37885), + 47: uint16(37886), + 48: uint16(37887), + 49: uint16(37888), + 50: uint16(37889), + 51: uint16(37890), + 52: uint16(37891), + 53: uint16(37892), + 54: uint16(37893), + 55: uint16(37894), + 56: uint16(37895), + 57: uint16(37896), + 58: uint16(37897), + 59: uint16(37898), + 60: uint16(37899), + 61: uint16(37900), + 62: uint16(37901), + 63: uint16(37902), + 64: uint16(37903), + 65: uint16(37904), + 66: uint16(37905), + 67: uint16(37906), + 68: uint16(37907), + 69: uint16(37908), + 70: uint16(37909), + 71: uint16(37910), + 72: uint16(37911), + 73: uint16(37912), + 74: uint16(37913), + 75: uint16(37914), + 76: uint16(37915), + 77: uint16(37916), + 78: uint16(37917), + 79: uint16(37918), + 80: uint16(37919), + 81: uint16(37920), + 82: uint16(37921), + 83: uint16(37922), + 84: uint16(37923), + 85: uint16(37924), + 86: uint16(37925), + 87: uint16(37926), + 88: uint16(37927), + 89: uint16(37928), + 90: uint16(37929), + 91: uint16(37930), + 92: uint16(37931), + 93: uint16(37932), + 94: uint16(37933), + 95: uint16(37934), + 96: uint16(32429), + 97: uint16(32432), + 98: uint16(32446), + 99: uint16(32448), + 100: uint16(32449), + 101: uint16(32450), + 102: uint16(32457), + 103: uint16(32459), + 104: uint16(32460), + 105: uint16(32464), + 106: uint16(32468), + 107: uint16(32471), + 108: uint16(32475), + 109: uint16(32480), + 110: uint16(32481), + 111: uint16(32488), + 112: uint16(32491), + 113: uint16(32494), + 114: uint16(32495), + 115: uint16(32497), + 116: uint16(32498), + 117: uint16(32525), + 118: uint16(32502), + 119: uint16(32506), + 120: uint16(32507), + 121: uint16(32510), + 122: uint16(32513), + 123: uint16(32514), + 124: uint16(32515), + 125: uint16(32519), + 126: uint16(32520), + 127: uint16(32523), + 128: uint16(32524), + 129: uint16(32527), + 130: uint16(32529), + 131: uint16(32530), + 132: uint16(32535), + 133: uint16(32537), + 134: uint16(32540), + 135: uint16(32539), + 136: uint16(32543), + 137: uint16(32545), + 138: uint16(32546), + 139: uint16(32547), + 140: uint16(32548), + 141: uint16(32549), + 142: uint16(32550), + 143: uint16(32551), + 144: uint16(32554), + 145: uint16(32555), + 146: uint16(32556), + 147: uint16(32557), + 148: uint16(32559), + 149: uint16(32560), + 150: uint16(32561), + 151: uint16(32562), + 152: uint16(32563), + 153: uint16(32565), + 154: uint16(24186), + 155: uint16(30079), + 156: uint16(24027), + 157: uint16(30014), + 158: uint16(37013), + 159: uint16(29582), + 160: uint16(29585), + 161: uint16(29614), + 162: uint16(29602), + 163: uint16(29599), + 164: uint16(29647), + 165: uint16(29634), + 166: uint16(29649), + 167: uint16(29623), + 168: uint16(29619), + 169: uint16(29632), + 170: uint16(29641), + 171: uint16(29640), + 172: uint16(29669), + 173: uint16(29657), + 174: uint16(39036), + 175: uint16(29706), + 176: uint16(29673), + 177: uint16(29671), + 178: uint16(29662), + 179: uint16(29626), + 180: uint16(29682), + 181: uint16(29711), + 182: uint16(29738), + 183: uint16(29787), + 184: uint16(29734), + 185: uint16(29733), + 186: uint16(29736), + 187: uint16(29744), + 188: uint16(29742), + 189: uint16(29740), + }, + 103: { + 0: uint16(37935), + 1: uint16(37936), + 2: uint16(37937), + 3: uint16(37938), + 4: uint16(37939), + 5: uint16(37940), + 6: uint16(37941), + 7: uint16(37942), + 8: uint16(37943), + 9: uint16(37944), + 10: uint16(37945), + 11: uint16(37946), + 12: uint16(37947), + 13: uint16(37948), + 14: uint16(37949), + 15: uint16(37951), + 16: uint16(37952), + 17: uint16(37953), + 18: uint16(37954), + 19: uint16(37955), + 20: uint16(37956), + 21: uint16(37957), + 22: uint16(37958), + 23: uint16(37959), + 24: uint16(37960), + 25: uint16(37961), + 26: uint16(37962), + 27: uint16(37963), + 28: uint16(37964), + 29: uint16(37965), + 30: uint16(37966), + 31: uint16(37967), + 32: uint16(37968), + 33: uint16(37969), + 34: uint16(37970), + 35: uint16(37971), + 36: uint16(37972), + 37: uint16(37973), + 38: uint16(37974), + 39: uint16(37975), + 40: uint16(37976), + 41: uint16(37977), + 42: uint16(37978), + 43: uint16(37979), + 44: uint16(37980), + 45: uint16(37981), + 46: uint16(37982), + 47: uint16(37983), + 48: uint16(37984), + 49: uint16(37985), + 50: uint16(37986), + 51: uint16(37987), + 52: uint16(37988), + 53: uint16(37989), + 54: uint16(37990), + 55: uint16(37991), + 56: uint16(37992), + 57: uint16(37993), + 58: uint16(37994), + 59: uint16(37996), + 60: uint16(37997), + 61: uint16(37998), + 62: uint16(37999), + 63: uint16(38000), + 64: uint16(38001), + 65: uint16(38002), + 66: uint16(38003), + 67: uint16(38004), + 68: uint16(38005), + 69: uint16(38006), + 70: uint16(38007), + 71: uint16(38008), + 72: uint16(38009), + 73: uint16(38010), + 74: uint16(38011), + 75: uint16(38012), + 76: uint16(38013), + 77: uint16(38014), + 78: uint16(38015), + 79: uint16(38016), + 80: uint16(38017), + 81: uint16(38018), + 82: uint16(38019), + 83: uint16(38020), + 84: uint16(38033), + 85: uint16(38038), + 86: uint16(38040), + 87: uint16(38087), + 88: uint16(38095), + 89: uint16(38099), + 90: uint16(38100), + 91: uint16(38106), + 92: uint16(38118), + 93: uint16(38139), + 94: uint16(38172), + 95: uint16(38176), + 96: uint16(29723), + 97: uint16(29722), + 98: uint16(29761), + 99: uint16(29788), + 100: uint16(29783), + 101: uint16(29781), + 102: uint16(29785), + 103: uint16(29815), + 104: uint16(29805), + 105: uint16(29822), + 106: uint16(29852), + 107: uint16(29838), + 108: uint16(29824), + 109: uint16(29825), + 110: uint16(29831), + 111: uint16(29835), + 112: uint16(29854), + 113: uint16(29864), + 114: uint16(29865), + 115: uint16(29840), + 116: uint16(29863), + 117: uint16(29906), + 118: uint16(29882), + 119: uint16(38890), + 120: uint16(38891), + 121: uint16(38892), + 122: uint16(26444), + 123: uint16(26451), + 124: uint16(26462), + 125: uint16(26440), + 126: uint16(26473), + 127: uint16(26533), + 128: uint16(26503), + 129: uint16(26474), + 130: uint16(26483), + 131: uint16(26520), + 132: uint16(26535), + 133: uint16(26485), + 134: uint16(26536), + 135: uint16(26526), + 136: uint16(26541), + 137: uint16(26507), + 138: uint16(26487), + 139: uint16(26492), + 140: uint16(26608), + 141: uint16(26633), + 142: uint16(26584), + 143: uint16(26634), + 144: uint16(26601), + 145: uint16(26544), + 146: uint16(26636), + 147: uint16(26585), + 148: uint16(26549), + 149: uint16(26586), + 150: uint16(26547), + 151: uint16(26589), + 152: uint16(26624), + 153: uint16(26563), + 154: uint16(26552), + 155: uint16(26594), + 156: uint16(26638), + 157: uint16(26561), + 158: uint16(26621), + 159: uint16(26674), + 160: uint16(26675), + 161: uint16(26720), + 162: uint16(26721), + 163: uint16(26702), + 164: uint16(26722), + 165: uint16(26692), + 166: uint16(26724), + 167: uint16(26755), + 168: uint16(26653), + 169: uint16(26709), + 170: uint16(26726), + 171: uint16(26689), + 172: uint16(26727), + 173: uint16(26688), + 174: uint16(26686), + 175: uint16(26698), + 176: uint16(26697), + 177: uint16(26665), + 178: uint16(26805), + 179: uint16(26767), + 180: uint16(26740), + 181: uint16(26743), + 182: uint16(26771), + 183: uint16(26731), + 184: uint16(26818), + 185: uint16(26990), + 186: uint16(26876), + 187: uint16(26911), + 188: uint16(26912), + 189: uint16(26873), + }, + 104: { + 0: uint16(38183), + 1: uint16(38195), + 2: uint16(38205), + 3: uint16(38211), + 4: uint16(38216), + 5: uint16(38219), + 6: uint16(38229), + 7: uint16(38234), + 8: uint16(38240), + 9: uint16(38254), + 10: uint16(38260), + 11: uint16(38261), + 12: uint16(38263), + 13: uint16(38264), + 14: uint16(38265), + 15: uint16(38266), + 16: uint16(38267), + 17: uint16(38268), + 18: uint16(38269), + 19: uint16(38270), + 20: uint16(38272), + 21: uint16(38273), + 22: uint16(38274), + 23: uint16(38275), + 24: uint16(38276), + 25: uint16(38277), + 26: uint16(38278), + 27: uint16(38279), + 28: uint16(38280), + 29: uint16(38281), + 30: uint16(38282), + 31: uint16(38283), + 32: uint16(38284), + 33: uint16(38285), + 34: uint16(38286), + 35: uint16(38287), + 36: uint16(38288), + 37: uint16(38289), + 38: uint16(38290), + 39: uint16(38291), + 40: uint16(38292), + 41: uint16(38293), + 42: uint16(38294), + 43: uint16(38295), + 44: uint16(38296), + 45: uint16(38297), + 46: uint16(38298), + 47: uint16(38299), + 48: uint16(38300), + 49: uint16(38301), + 50: uint16(38302), + 51: uint16(38303), + 52: uint16(38304), + 53: uint16(38305), + 54: uint16(38306), + 55: uint16(38307), + 56: uint16(38308), + 57: uint16(38309), + 58: uint16(38310), + 59: uint16(38311), + 60: uint16(38312), + 61: uint16(38313), + 62: uint16(38314), + 63: uint16(38315), + 64: uint16(38316), + 65: uint16(38317), + 66: uint16(38318), + 67: uint16(38319), + 68: uint16(38320), + 69: uint16(38321), + 70: uint16(38322), + 71: uint16(38323), + 72: uint16(38324), + 73: uint16(38325), + 74: uint16(38326), + 75: uint16(38327), + 76: uint16(38328), + 77: uint16(38329), + 78: uint16(38330), + 79: uint16(38331), + 80: uint16(38332), + 81: uint16(38333), + 82: uint16(38334), + 83: uint16(38335), + 84: uint16(38336), + 85: uint16(38337), + 86: uint16(38338), + 87: uint16(38339), + 88: uint16(38340), + 89: uint16(38341), + 90: uint16(38342), + 91: uint16(38343), + 92: uint16(38344), + 93: uint16(38345), + 94: uint16(38346), + 95: uint16(38347), + 96: uint16(26916), + 97: uint16(26864), + 98: uint16(26891), + 99: uint16(26881), + 100: uint16(26967), + 101: uint16(26851), + 102: uint16(26896), + 103: uint16(26993), + 104: uint16(26937), + 105: uint16(26976), + 106: uint16(26946), + 107: uint16(26973), + 108: uint16(27012), + 109: uint16(26987), + 110: uint16(27008), + 111: uint16(27032), + 112: uint16(27000), + 113: uint16(26932), + 114: uint16(27084), + 115: uint16(27015), + 116: uint16(27016), + 117: uint16(27086), + 118: uint16(27017), + 119: uint16(26982), + 120: uint16(26979), + 121: uint16(27001), + 122: uint16(27035), + 123: uint16(27047), + 124: uint16(27067), + 125: uint16(27051), + 126: uint16(27053), + 127: uint16(27092), + 128: uint16(27057), + 129: uint16(27073), + 130: uint16(27082), + 131: uint16(27103), + 132: uint16(27029), + 133: uint16(27104), + 134: uint16(27021), + 135: uint16(27135), + 136: uint16(27183), + 137: uint16(27117), + 138: uint16(27159), + 139: uint16(27160), + 140: uint16(27237), + 141: uint16(27122), + 142: uint16(27204), + 143: uint16(27198), + 144: uint16(27296), + 145: uint16(27216), + 146: uint16(27227), + 147: uint16(27189), + 148: uint16(27278), + 149: uint16(27257), + 150: uint16(27197), + 151: uint16(27176), + 152: uint16(27224), + 153: uint16(27260), + 154: uint16(27281), + 155: uint16(27280), + 156: uint16(27305), + 157: uint16(27287), + 158: uint16(27307), + 159: uint16(29495), + 160: uint16(29522), + 161: uint16(27521), + 162: uint16(27522), + 163: uint16(27527), + 164: uint16(27524), + 165: uint16(27538), + 166: uint16(27539), + 167: uint16(27533), + 168: uint16(27546), + 169: uint16(27547), + 170: uint16(27553), + 171: uint16(27562), + 172: uint16(36715), + 173: uint16(36717), + 174: uint16(36721), + 175: uint16(36722), + 176: uint16(36723), + 177: uint16(36725), + 178: uint16(36726), + 179: uint16(36728), + 180: uint16(36727), + 181: uint16(36729), + 182: uint16(36730), + 183: uint16(36732), + 184: uint16(36734), + 185: uint16(36737), + 186: uint16(36738), + 187: uint16(36740), + 188: uint16(36743), + 189: uint16(36747), + }, + 105: { + 0: uint16(38348), + 1: uint16(38349), + 2: uint16(38350), + 3: uint16(38351), + 4: uint16(38352), + 5: uint16(38353), + 6: uint16(38354), + 7: uint16(38355), + 8: uint16(38356), + 9: uint16(38357), + 10: uint16(38358), + 11: uint16(38359), + 12: uint16(38360), + 13: uint16(38361), + 14: uint16(38362), + 15: uint16(38363), + 16: uint16(38364), + 17: uint16(38365), + 18: uint16(38366), + 19: uint16(38367), + 20: uint16(38368), + 21: uint16(38369), + 22: uint16(38370), + 23: uint16(38371), + 24: uint16(38372), + 25: uint16(38373), + 26: uint16(38374), + 27: uint16(38375), + 28: uint16(38380), + 29: uint16(38399), + 30: uint16(38407), + 31: uint16(38419), + 32: uint16(38424), + 33: uint16(38427), + 34: uint16(38430), + 35: uint16(38432), + 36: uint16(38435), + 37: uint16(38436), + 38: uint16(38437), + 39: uint16(38438), + 40: uint16(38439), + 41: uint16(38440), + 42: uint16(38441), + 43: uint16(38443), + 44: uint16(38444), + 45: uint16(38445), + 46: uint16(38447), + 47: uint16(38448), + 48: uint16(38455), + 49: uint16(38456), + 50: uint16(38457), + 51: uint16(38458), + 52: uint16(38462), + 53: uint16(38465), + 54: uint16(38467), + 55: uint16(38474), + 56: uint16(38478), + 57: uint16(38479), + 58: uint16(38481), + 59: uint16(38482), + 60: uint16(38483), + 61: uint16(38486), + 62: uint16(38487), + 63: uint16(38488), + 64: uint16(38489), + 65: uint16(38490), + 66: uint16(38492), + 67: uint16(38493), + 68: uint16(38494), + 69: uint16(38496), + 70: uint16(38499), + 71: uint16(38501), + 72: uint16(38502), + 73: uint16(38507), + 74: uint16(38509), + 75: uint16(38510), + 76: uint16(38511), + 77: uint16(38512), + 78: uint16(38513), + 79: uint16(38515), + 80: uint16(38520), + 81: uint16(38521), + 82: uint16(38522), + 83: uint16(38523), + 84: uint16(38524), + 85: uint16(38525), + 86: uint16(38526), + 87: uint16(38527), + 88: uint16(38528), + 89: uint16(38529), + 90: uint16(38530), + 91: uint16(38531), + 92: uint16(38532), + 93: uint16(38535), + 94: uint16(38537), + 95: uint16(38538), + 96: uint16(36749), + 97: uint16(36750), + 98: uint16(36751), + 99: uint16(36760), + 100: uint16(36762), + 101: uint16(36558), + 102: uint16(25099), + 103: uint16(25111), + 104: uint16(25115), + 105: uint16(25119), + 106: uint16(25122), + 107: uint16(25121), + 108: uint16(25125), + 109: uint16(25124), + 110: uint16(25132), + 111: uint16(33255), + 112: uint16(29935), + 113: uint16(29940), + 114: uint16(29951), + 115: uint16(29967), + 116: uint16(29969), + 117: uint16(29971), + 118: uint16(25908), + 119: uint16(26094), + 120: uint16(26095), + 121: uint16(26096), + 122: uint16(26122), + 123: uint16(26137), + 124: uint16(26482), + 125: uint16(26115), + 126: uint16(26133), + 127: uint16(26112), + 128: uint16(28805), + 129: uint16(26359), + 130: uint16(26141), + 131: uint16(26164), + 132: uint16(26161), + 133: uint16(26166), + 134: uint16(26165), + 135: uint16(32774), + 136: uint16(26207), + 137: uint16(26196), + 138: uint16(26177), + 139: uint16(26191), + 140: uint16(26198), + 141: uint16(26209), + 142: uint16(26199), + 143: uint16(26231), + 144: uint16(26244), + 145: uint16(26252), + 146: uint16(26279), + 147: uint16(26269), + 148: uint16(26302), + 149: uint16(26331), + 150: uint16(26332), + 151: uint16(26342), + 152: uint16(26345), + 153: uint16(36146), + 154: uint16(36147), + 155: uint16(36150), + 156: uint16(36155), + 157: uint16(36157), + 158: uint16(36160), + 159: uint16(36165), + 160: uint16(36166), + 161: uint16(36168), + 162: uint16(36169), + 163: uint16(36167), + 164: uint16(36173), + 165: uint16(36181), + 166: uint16(36185), + 167: uint16(35271), + 168: uint16(35274), + 169: uint16(35275), + 170: uint16(35276), + 171: uint16(35278), + 172: uint16(35279), + 173: uint16(35280), + 174: uint16(35281), + 175: uint16(29294), + 176: uint16(29343), + 177: uint16(29277), + 178: uint16(29286), + 179: uint16(29295), + 180: uint16(29310), + 181: uint16(29311), + 182: uint16(29316), + 183: uint16(29323), + 184: uint16(29325), + 185: uint16(29327), + 186: uint16(29330), + 187: uint16(25352), + 188: uint16(25394), + 189: uint16(25520), + }, + 106: { + 0: uint16(38540), + 1: uint16(38542), + 2: uint16(38545), + 3: uint16(38546), + 4: uint16(38547), + 5: uint16(38549), + 6: uint16(38550), + 7: uint16(38554), + 8: uint16(38555), + 9: uint16(38557), + 10: uint16(38558), + 11: uint16(38559), + 12: uint16(38560), + 13: uint16(38561), + 14: uint16(38562), + 15: uint16(38563), + 16: uint16(38564), + 17: uint16(38565), + 18: uint16(38566), + 19: uint16(38568), + 20: uint16(38569), + 21: uint16(38570), + 22: uint16(38571), + 23: uint16(38572), + 24: uint16(38573), + 25: uint16(38574), + 26: uint16(38575), + 27: uint16(38577), + 28: uint16(38578), + 29: uint16(38580), + 30: uint16(38581), + 31: uint16(38583), + 32: uint16(38584), + 33: uint16(38586), + 34: uint16(38587), + 35: uint16(38591), + 36: uint16(38594), + 37: uint16(38595), + 38: uint16(38600), + 39: uint16(38602), + 40: uint16(38603), + 41: uint16(38608), + 42: uint16(38609), + 43: uint16(38611), + 44: uint16(38612), + 45: uint16(38614), + 46: uint16(38615), + 47: uint16(38616), + 48: uint16(38617), + 49: uint16(38618), + 50: uint16(38619), + 51: uint16(38620), + 52: uint16(38621), + 53: uint16(38622), + 54: uint16(38623), + 55: uint16(38625), + 56: uint16(38626), + 57: uint16(38627), + 58: uint16(38628), + 59: uint16(38629), + 60: uint16(38630), + 61: uint16(38631), + 62: uint16(38635), + 63: uint16(38636), + 64: uint16(38637), + 65: uint16(38638), + 66: uint16(38640), + 67: uint16(38641), + 68: uint16(38642), + 69: uint16(38644), + 70: uint16(38645), + 71: uint16(38648), + 72: uint16(38650), + 73: uint16(38651), + 74: uint16(38652), + 75: uint16(38653), + 76: uint16(38655), + 77: uint16(38658), + 78: uint16(38659), + 79: uint16(38661), + 80: uint16(38666), + 81: uint16(38667), + 82: uint16(38668), + 83: uint16(38672), + 84: uint16(38673), + 85: uint16(38674), + 86: uint16(38676), + 87: uint16(38677), + 88: uint16(38679), + 89: uint16(38680), + 90: uint16(38681), + 91: uint16(38682), + 92: uint16(38683), + 93: uint16(38685), + 94: uint16(38687), + 95: uint16(38688), + 96: uint16(25663), + 97: uint16(25816), + 98: uint16(32772), + 99: uint16(27626), + 100: uint16(27635), + 101: uint16(27645), + 102: uint16(27637), + 103: uint16(27641), + 104: uint16(27653), + 105: uint16(27655), + 106: uint16(27654), + 107: uint16(27661), + 108: uint16(27669), + 109: uint16(27672), + 110: uint16(27673), + 111: uint16(27674), + 112: uint16(27681), + 113: uint16(27689), + 114: uint16(27684), + 115: uint16(27690), + 116: uint16(27698), + 117: uint16(25909), + 118: uint16(25941), + 119: uint16(25963), + 120: uint16(29261), + 121: uint16(29266), + 122: uint16(29270), + 123: uint16(29232), + 124: uint16(34402), + 125: uint16(21014), + 126: uint16(32927), + 127: uint16(32924), + 128: uint16(32915), + 129: uint16(32956), + 130: uint16(26378), + 131: uint16(32957), + 132: uint16(32945), + 133: uint16(32939), + 134: uint16(32941), + 135: uint16(32948), + 136: uint16(32951), + 137: uint16(32999), + 138: uint16(33000), + 139: uint16(33001), + 140: uint16(33002), + 141: uint16(32987), + 142: uint16(32962), + 143: uint16(32964), + 144: uint16(32985), + 145: uint16(32973), + 146: uint16(32983), + 147: uint16(26384), + 148: uint16(32989), + 149: uint16(33003), + 150: uint16(33009), + 151: uint16(33012), + 152: uint16(33005), + 153: uint16(33037), + 154: uint16(33038), + 155: uint16(33010), + 156: uint16(33020), + 157: uint16(26389), + 158: uint16(33042), + 159: uint16(35930), + 160: uint16(33078), + 161: uint16(33054), + 162: uint16(33068), + 163: uint16(33048), + 164: uint16(33074), + 165: uint16(33096), + 166: uint16(33100), + 167: uint16(33107), + 168: uint16(33140), + 169: uint16(33113), + 170: uint16(33114), + 171: uint16(33137), + 172: uint16(33120), + 173: uint16(33129), + 174: uint16(33148), + 175: uint16(33149), + 176: uint16(33133), + 177: uint16(33127), + 178: uint16(22605), + 179: uint16(23221), + 180: uint16(33160), + 181: uint16(33154), + 182: uint16(33169), + 183: uint16(28373), + 184: uint16(33187), + 185: uint16(33194), + 186: uint16(33228), + 187: uint16(26406), + 188: uint16(33226), + 189: uint16(33211), + }, + 107: { + 0: uint16(38689), + 1: uint16(38690), + 2: uint16(38691), + 3: uint16(38692), + 4: uint16(38693), + 5: uint16(38694), + 6: uint16(38695), + 7: uint16(38696), + 8: uint16(38697), + 9: uint16(38699), + 10: uint16(38700), + 11: uint16(38702), + 12: uint16(38703), + 13: uint16(38705), + 14: uint16(38707), + 15: uint16(38708), + 16: uint16(38709), + 17: uint16(38710), + 18: uint16(38711), + 19: uint16(38714), + 20: uint16(38715), + 21: uint16(38716), + 22: uint16(38717), + 23: uint16(38719), + 24: uint16(38720), + 25: uint16(38721), + 26: uint16(38722), + 27: uint16(38723), + 28: uint16(38724), + 29: uint16(38725), + 30: uint16(38726), + 31: uint16(38727), + 32: uint16(38728), + 33: uint16(38729), + 34: uint16(38730), + 35: uint16(38731), + 36: uint16(38732), + 37: uint16(38733), + 38: uint16(38734), + 39: uint16(38735), + 40: uint16(38736), + 41: uint16(38737), + 42: uint16(38740), + 43: uint16(38741), + 44: uint16(38743), + 45: uint16(38744), + 46: uint16(38746), + 47: uint16(38748), + 48: uint16(38749), + 49: uint16(38751), + 50: uint16(38755), + 51: uint16(38756), + 52: uint16(38758), + 53: uint16(38759), + 54: uint16(38760), + 55: uint16(38762), + 56: uint16(38763), + 57: uint16(38764), + 58: uint16(38765), + 59: uint16(38766), + 60: uint16(38767), + 61: uint16(38768), + 62: uint16(38769), + 63: uint16(38770), + 64: uint16(38773), + 65: uint16(38775), + 66: uint16(38776), + 67: uint16(38777), + 68: uint16(38778), + 69: uint16(38779), + 70: uint16(38781), + 71: uint16(38782), + 72: uint16(38783), + 73: uint16(38784), + 74: uint16(38785), + 75: uint16(38786), + 76: uint16(38787), + 77: uint16(38788), + 78: uint16(38790), + 79: uint16(38791), + 80: uint16(38792), + 81: uint16(38793), + 82: uint16(38794), + 83: uint16(38796), + 84: uint16(38798), + 85: uint16(38799), + 86: uint16(38800), + 87: uint16(38803), + 88: uint16(38805), + 89: uint16(38806), + 90: uint16(38807), + 91: uint16(38809), + 92: uint16(38810), + 93: uint16(38811), + 94: uint16(38812), + 95: uint16(38813), + 96: uint16(33217), + 97: uint16(33190), + 98: uint16(27428), + 99: uint16(27447), + 100: uint16(27449), + 101: uint16(27459), + 102: uint16(27462), + 103: uint16(27481), + 104: uint16(39121), + 105: uint16(39122), + 106: uint16(39123), + 107: uint16(39125), + 108: uint16(39129), + 109: uint16(39130), + 110: uint16(27571), + 111: uint16(24384), + 112: uint16(27586), + 113: uint16(35315), + 114: uint16(26000), + 115: uint16(40785), + 116: uint16(26003), + 117: uint16(26044), + 118: uint16(26054), + 119: uint16(26052), + 120: uint16(26051), + 121: uint16(26060), + 122: uint16(26062), + 123: uint16(26066), + 124: uint16(26070), + 125: uint16(28800), + 126: uint16(28828), + 127: uint16(28822), + 128: uint16(28829), + 129: uint16(28859), + 130: uint16(28864), + 131: uint16(28855), + 132: uint16(28843), + 133: uint16(28849), + 134: uint16(28904), + 135: uint16(28874), + 136: uint16(28944), + 137: uint16(28947), + 138: uint16(28950), + 139: uint16(28975), + 140: uint16(28977), + 141: uint16(29043), + 142: uint16(29020), + 143: uint16(29032), + 144: uint16(28997), + 145: uint16(29042), + 146: uint16(29002), + 147: uint16(29048), + 148: uint16(29050), + 149: uint16(29080), + 150: uint16(29107), + 151: uint16(29109), + 152: uint16(29096), + 153: uint16(29088), + 154: uint16(29152), + 155: uint16(29140), + 156: uint16(29159), + 157: uint16(29177), + 158: uint16(29213), + 159: uint16(29224), + 160: uint16(28780), + 161: uint16(28952), + 162: uint16(29030), + 163: uint16(29113), + 164: uint16(25150), + 165: uint16(25149), + 166: uint16(25155), + 167: uint16(25160), + 168: uint16(25161), + 169: uint16(31035), + 170: uint16(31040), + 171: uint16(31046), + 172: uint16(31049), + 173: uint16(31067), + 174: uint16(31068), + 175: uint16(31059), + 176: uint16(31066), + 177: uint16(31074), + 178: uint16(31063), + 179: uint16(31072), + 180: uint16(31087), + 181: uint16(31079), + 182: uint16(31098), + 183: uint16(31109), + 184: uint16(31114), + 185: uint16(31130), + 186: uint16(31143), + 187: uint16(31155), + 188: uint16(24529), + 189: uint16(24528), + }, + 108: { + 0: uint16(38814), + 1: uint16(38815), + 2: uint16(38817), + 3: uint16(38818), + 4: uint16(38820), + 5: uint16(38821), + 6: uint16(38822), + 7: uint16(38823), + 8: uint16(38824), + 9: uint16(38825), + 10: uint16(38826), + 11: uint16(38828), + 12: uint16(38830), + 13: uint16(38832), + 14: uint16(38833), + 15: uint16(38835), + 16: uint16(38837), + 17: uint16(38838), + 18: uint16(38839), + 19: uint16(38840), + 20: uint16(38841), + 21: uint16(38842), + 22: uint16(38843), + 23: uint16(38844), + 24: uint16(38845), + 25: uint16(38846), + 26: uint16(38847), + 27: uint16(38848), + 28: uint16(38849), + 29: uint16(38850), + 30: uint16(38851), + 31: uint16(38852), + 32: uint16(38853), + 33: uint16(38854), + 34: uint16(38855), + 35: uint16(38856), + 36: uint16(38857), + 37: uint16(38858), + 38: uint16(38859), + 39: uint16(38860), + 40: uint16(38861), + 41: uint16(38862), + 42: uint16(38863), + 43: uint16(38864), + 44: uint16(38865), + 45: uint16(38866), + 46: uint16(38867), + 47: uint16(38868), + 48: uint16(38869), + 49: uint16(38870), + 50: uint16(38871), + 51: uint16(38872), + 52: uint16(38873), + 53: uint16(38874), + 54: uint16(38875), + 55: uint16(38876), + 56: uint16(38877), + 57: uint16(38878), + 58: uint16(38879), + 59: uint16(38880), + 60: uint16(38881), + 61: uint16(38882), + 62: uint16(38883), + 63: uint16(38884), + 64: uint16(38885), + 65: uint16(38888), + 66: uint16(38894), + 67: uint16(38895), + 68: uint16(38896), + 69: uint16(38897), + 70: uint16(38898), + 71: uint16(38900), + 72: uint16(38903), + 73: uint16(38904), + 74: uint16(38905), + 75: uint16(38906), + 76: uint16(38907), + 77: uint16(38908), + 78: uint16(38909), + 79: uint16(38910), + 80: uint16(38911), + 81: uint16(38912), + 82: uint16(38913), + 83: uint16(38914), + 84: uint16(38915), + 85: uint16(38916), + 86: uint16(38917), + 87: uint16(38918), + 88: uint16(38919), + 89: uint16(38920), + 90: uint16(38921), + 91: uint16(38922), + 92: uint16(38923), + 93: uint16(38924), + 94: uint16(38925), + 95: uint16(38926), + 96: uint16(24636), + 97: uint16(24669), + 98: uint16(24666), + 99: uint16(24679), + 100: uint16(24641), + 101: uint16(24665), + 102: uint16(24675), + 103: uint16(24747), + 104: uint16(24838), + 105: uint16(24845), + 106: uint16(24925), + 107: uint16(25001), + 108: uint16(24989), + 109: uint16(25035), + 110: uint16(25041), + 111: uint16(25094), + 112: uint16(32896), + 113: uint16(32895), + 114: uint16(27795), + 115: uint16(27894), + 116: uint16(28156), + 117: uint16(30710), + 118: uint16(30712), + 119: uint16(30720), + 120: uint16(30729), + 121: uint16(30743), + 122: uint16(30744), + 123: uint16(30737), + 124: uint16(26027), + 125: uint16(30765), + 126: uint16(30748), + 127: uint16(30749), + 128: uint16(30777), + 129: uint16(30778), + 130: uint16(30779), + 131: uint16(30751), + 132: uint16(30780), + 133: uint16(30757), + 134: uint16(30764), + 135: uint16(30755), + 136: uint16(30761), + 137: uint16(30798), + 138: uint16(30829), + 139: uint16(30806), + 140: uint16(30807), + 141: uint16(30758), + 142: uint16(30800), + 143: uint16(30791), + 144: uint16(30796), + 145: uint16(30826), + 146: uint16(30875), + 147: uint16(30867), + 148: uint16(30874), + 149: uint16(30855), + 150: uint16(30876), + 151: uint16(30881), + 152: uint16(30883), + 153: uint16(30898), + 154: uint16(30905), + 155: uint16(30885), + 156: uint16(30932), + 157: uint16(30937), + 158: uint16(30921), + 159: uint16(30956), + 160: uint16(30962), + 161: uint16(30981), + 162: uint16(30964), + 163: uint16(30995), + 164: uint16(31012), + 165: uint16(31006), + 166: uint16(31028), + 167: uint16(40859), + 168: uint16(40697), + 169: uint16(40699), + 170: uint16(40700), + 171: uint16(30449), + 172: uint16(30468), + 173: uint16(30477), + 174: uint16(30457), + 175: uint16(30471), + 176: uint16(30472), + 177: uint16(30490), + 178: uint16(30498), + 179: uint16(30489), + 180: uint16(30509), + 181: uint16(30502), + 182: uint16(30517), + 183: uint16(30520), + 184: uint16(30544), + 185: uint16(30545), + 186: uint16(30535), + 187: uint16(30531), + 188: uint16(30554), + 189: uint16(30568), + }, + 109: { + 0: uint16(38927), + 1: uint16(38928), + 2: uint16(38929), + 3: uint16(38930), + 4: uint16(38931), + 5: uint16(38932), + 6: uint16(38933), + 7: uint16(38934), + 8: uint16(38935), + 9: uint16(38936), + 10: uint16(38937), + 11: uint16(38938), + 12: uint16(38939), + 13: uint16(38940), + 14: uint16(38941), + 15: uint16(38942), + 16: uint16(38943), + 17: uint16(38944), + 18: uint16(38945), + 19: uint16(38946), + 20: uint16(38947), + 21: uint16(38948), + 22: uint16(38949), + 23: uint16(38950), + 24: uint16(38951), + 25: uint16(38952), + 26: uint16(38953), + 27: uint16(38954), + 28: uint16(38955), + 29: uint16(38956), + 30: uint16(38957), + 31: uint16(38958), + 32: uint16(38959), + 33: uint16(38960), + 34: uint16(38961), + 35: uint16(38962), + 36: uint16(38963), + 37: uint16(38964), + 38: uint16(38965), + 39: uint16(38966), + 40: uint16(38967), + 41: uint16(38968), + 42: uint16(38969), + 43: uint16(38970), + 44: uint16(38971), + 45: uint16(38972), + 46: uint16(38973), + 47: uint16(38974), + 48: uint16(38975), + 49: uint16(38976), + 50: uint16(38977), + 51: uint16(38978), + 52: uint16(38979), + 53: uint16(38980), + 54: uint16(38981), + 55: uint16(38982), + 56: uint16(38983), + 57: uint16(38984), + 58: uint16(38985), + 59: uint16(38986), + 60: uint16(38987), + 61: uint16(38988), + 62: uint16(38989), + 63: uint16(38990), + 64: uint16(38991), + 65: uint16(38992), + 66: uint16(38993), + 67: uint16(38994), + 68: uint16(38995), + 69: uint16(38996), + 70: uint16(38997), + 71: uint16(38998), + 72: uint16(38999), + 73: uint16(39000), + 74: uint16(39001), + 75: uint16(39002), + 76: uint16(39003), + 77: uint16(39004), + 78: uint16(39005), + 79: uint16(39006), + 80: uint16(39007), + 81: uint16(39008), + 82: uint16(39009), + 83: uint16(39010), + 84: uint16(39011), + 85: uint16(39012), + 86: uint16(39013), + 87: uint16(39014), + 88: uint16(39015), + 89: uint16(39016), + 90: uint16(39017), + 91: uint16(39018), + 92: uint16(39019), + 93: uint16(39020), + 94: uint16(39021), + 95: uint16(39022), + 96: uint16(30562), + 97: uint16(30565), + 98: uint16(30591), + 99: uint16(30605), + 100: uint16(30589), + 101: uint16(30592), + 102: uint16(30604), + 103: uint16(30609), + 104: uint16(30623), + 105: uint16(30624), + 106: uint16(30640), + 107: uint16(30645), + 108: uint16(30653), + 109: uint16(30010), + 110: uint16(30016), + 111: uint16(30030), + 112: uint16(30027), + 113: uint16(30024), + 114: uint16(30043), + 115: uint16(30066), + 116: uint16(30073), + 117: uint16(30083), + 118: uint16(32600), + 119: uint16(32609), + 120: uint16(32607), + 121: uint16(35400), + 122: uint16(32616), + 123: uint16(32628), + 124: uint16(32625), + 125: uint16(32633), + 126: uint16(32641), + 127: uint16(32638), + 128: uint16(30413), + 129: uint16(30437), + 130: uint16(34866), + 131: uint16(38021), + 132: uint16(38022), + 133: uint16(38023), + 134: uint16(38027), + 135: uint16(38026), + 136: uint16(38028), + 137: uint16(38029), + 138: uint16(38031), + 139: uint16(38032), + 140: uint16(38036), + 141: uint16(38039), + 142: uint16(38037), + 143: uint16(38042), + 144: uint16(38043), + 145: uint16(38044), + 146: uint16(38051), + 147: uint16(38052), + 148: uint16(38059), + 149: uint16(38058), + 150: uint16(38061), + 151: uint16(38060), + 152: uint16(38063), + 153: uint16(38064), + 154: uint16(38066), + 155: uint16(38068), + 156: uint16(38070), + 157: uint16(38071), + 158: uint16(38072), + 159: uint16(38073), + 160: uint16(38074), + 161: uint16(38076), + 162: uint16(38077), + 163: uint16(38079), + 164: uint16(38084), + 165: uint16(38088), + 166: uint16(38089), + 167: uint16(38090), + 168: uint16(38091), + 169: uint16(38092), + 170: uint16(38093), + 171: uint16(38094), + 172: uint16(38096), + 173: uint16(38097), + 174: uint16(38098), + 175: uint16(38101), + 176: uint16(38102), + 177: uint16(38103), + 178: uint16(38105), + 179: uint16(38104), + 180: uint16(38107), + 181: uint16(38110), + 182: uint16(38111), + 183: uint16(38112), + 184: uint16(38114), + 185: uint16(38116), + 186: uint16(38117), + 187: uint16(38119), + 188: uint16(38120), + 189: uint16(38122), + }, + 110: { + 0: uint16(39023), + 1: uint16(39024), + 2: uint16(39025), + 3: uint16(39026), + 4: uint16(39027), + 5: uint16(39028), + 6: uint16(39051), + 7: uint16(39054), + 8: uint16(39058), + 9: uint16(39061), + 10: uint16(39065), + 11: uint16(39075), + 12: uint16(39080), + 13: uint16(39081), + 14: uint16(39082), + 15: uint16(39083), + 16: uint16(39084), + 17: uint16(39085), + 18: uint16(39086), + 19: uint16(39087), + 20: uint16(39088), + 21: uint16(39089), + 22: uint16(39090), + 23: uint16(39091), + 24: uint16(39092), + 25: uint16(39093), + 26: uint16(39094), + 27: uint16(39095), + 28: uint16(39096), + 29: uint16(39097), + 30: uint16(39098), + 31: uint16(39099), + 32: uint16(39100), + 33: uint16(39101), + 34: uint16(39102), + 35: uint16(39103), + 36: uint16(39104), + 37: uint16(39105), + 38: uint16(39106), + 39: uint16(39107), + 40: uint16(39108), + 41: uint16(39109), + 42: uint16(39110), + 43: uint16(39111), + 44: uint16(39112), + 45: uint16(39113), + 46: uint16(39114), + 47: uint16(39115), + 48: uint16(39116), + 49: uint16(39117), + 50: uint16(39119), + 51: uint16(39120), + 52: uint16(39124), + 53: uint16(39126), + 54: uint16(39127), + 55: uint16(39131), + 56: uint16(39132), + 57: uint16(39133), + 58: uint16(39136), + 59: uint16(39137), + 60: uint16(39138), + 61: uint16(39139), + 62: uint16(39140), + 63: uint16(39141), + 64: uint16(39142), + 65: uint16(39145), + 66: uint16(39146), + 67: uint16(39147), + 68: uint16(39148), + 69: uint16(39149), + 70: uint16(39150), + 71: uint16(39151), + 72: uint16(39152), + 73: uint16(39153), + 74: uint16(39154), + 75: uint16(39155), + 76: uint16(39156), + 77: uint16(39157), + 78: uint16(39158), + 79: uint16(39159), + 80: uint16(39160), + 81: uint16(39161), + 82: uint16(39162), + 83: uint16(39163), + 84: uint16(39164), + 85: uint16(39165), + 86: uint16(39166), + 87: uint16(39167), + 88: uint16(39168), + 89: uint16(39169), + 90: uint16(39170), + 91: uint16(39171), + 92: uint16(39172), + 93: uint16(39173), + 94: uint16(39174), + 95: uint16(39175), + 96: uint16(38121), + 97: uint16(38123), + 98: uint16(38126), + 99: uint16(38127), + 100: uint16(38131), + 101: uint16(38132), + 102: uint16(38133), + 103: uint16(38135), + 104: uint16(38137), + 105: uint16(38140), + 106: uint16(38141), + 107: uint16(38143), + 108: uint16(38147), + 109: uint16(38146), + 110: uint16(38150), + 111: uint16(38151), + 112: uint16(38153), + 113: uint16(38154), + 114: uint16(38157), + 115: uint16(38158), + 116: uint16(38159), + 117: uint16(38162), + 118: uint16(38163), + 119: uint16(38164), + 120: uint16(38165), + 121: uint16(38166), + 122: uint16(38168), + 123: uint16(38171), + 124: uint16(38173), + 125: uint16(38174), + 126: uint16(38175), + 127: uint16(38178), + 128: uint16(38186), + 129: uint16(38187), + 130: uint16(38185), + 131: uint16(38188), + 132: uint16(38193), + 133: uint16(38194), + 134: uint16(38196), + 135: uint16(38198), + 136: uint16(38199), + 137: uint16(38200), + 138: uint16(38204), + 139: uint16(38206), + 140: uint16(38207), + 141: uint16(38210), + 142: uint16(38197), + 143: uint16(38212), + 144: uint16(38213), + 145: uint16(38214), + 146: uint16(38217), + 147: uint16(38220), + 148: uint16(38222), + 149: uint16(38223), + 150: uint16(38226), + 151: uint16(38227), + 152: uint16(38228), + 153: uint16(38230), + 154: uint16(38231), + 155: uint16(38232), + 156: uint16(38233), + 157: uint16(38235), + 158: uint16(38238), + 159: uint16(38239), + 160: uint16(38237), + 161: uint16(38241), + 162: uint16(38242), + 163: uint16(38244), + 164: uint16(38245), + 165: uint16(38246), + 166: uint16(38247), + 167: uint16(38248), + 168: uint16(38249), + 169: uint16(38250), + 170: uint16(38251), + 171: uint16(38252), + 172: uint16(38255), + 173: uint16(38257), + 174: uint16(38258), + 175: uint16(38259), + 176: uint16(38202), + 177: uint16(30695), + 178: uint16(30700), + 179: uint16(38601), + 180: uint16(31189), + 181: uint16(31213), + 182: uint16(31203), + 183: uint16(31211), + 184: uint16(31238), + 185: uint16(23879), + 186: uint16(31235), + 187: uint16(31234), + 188: uint16(31262), + 189: uint16(31252), + }, + 111: { + 0: uint16(39176), + 1: uint16(39177), + 2: uint16(39178), + 3: uint16(39179), + 4: uint16(39180), + 5: uint16(39182), + 6: uint16(39183), + 7: uint16(39185), + 8: uint16(39186), + 9: uint16(39187), + 10: uint16(39188), + 11: uint16(39189), + 12: uint16(39190), + 13: uint16(39191), + 14: uint16(39192), + 15: uint16(39193), + 16: uint16(39194), + 17: uint16(39195), + 18: uint16(39196), + 19: uint16(39197), + 20: uint16(39198), + 21: uint16(39199), + 22: uint16(39200), + 23: uint16(39201), + 24: uint16(39202), + 25: uint16(39203), + 26: uint16(39204), + 27: uint16(39205), + 28: uint16(39206), + 29: uint16(39207), + 30: uint16(39208), + 31: uint16(39209), + 32: uint16(39210), + 33: uint16(39211), + 34: uint16(39212), + 35: uint16(39213), + 36: uint16(39215), + 37: uint16(39216), + 38: uint16(39217), + 39: uint16(39218), + 40: uint16(39219), + 41: uint16(39220), + 42: uint16(39221), + 43: uint16(39222), + 44: uint16(39223), + 45: uint16(39224), + 46: uint16(39225), + 47: uint16(39226), + 48: uint16(39227), + 49: uint16(39228), + 50: uint16(39229), + 51: uint16(39230), + 52: uint16(39231), + 53: uint16(39232), + 54: uint16(39233), + 55: uint16(39234), + 56: uint16(39235), + 57: uint16(39236), + 58: uint16(39237), + 59: uint16(39238), + 60: uint16(39239), + 61: uint16(39240), + 62: uint16(39241), + 63: uint16(39242), + 64: uint16(39243), + 65: uint16(39244), + 66: uint16(39245), + 67: uint16(39246), + 68: uint16(39247), + 69: uint16(39248), + 70: uint16(39249), + 71: uint16(39250), + 72: uint16(39251), + 73: uint16(39254), + 74: uint16(39255), + 75: uint16(39256), + 76: uint16(39257), + 77: uint16(39258), + 78: uint16(39259), + 79: uint16(39260), + 80: uint16(39261), + 81: uint16(39262), + 82: uint16(39263), + 83: uint16(39264), + 84: uint16(39265), + 85: uint16(39266), + 86: uint16(39268), + 87: uint16(39270), + 88: uint16(39283), + 89: uint16(39288), + 90: uint16(39289), + 91: uint16(39291), + 92: uint16(39294), + 93: uint16(39298), + 94: uint16(39299), + 95: uint16(39305), + 96: uint16(31289), + 97: uint16(31287), + 98: uint16(31313), + 99: uint16(40655), + 100: uint16(39333), + 101: uint16(31344), + 102: uint16(30344), + 103: uint16(30350), + 104: uint16(30355), + 105: uint16(30361), + 106: uint16(30372), + 107: uint16(29918), + 108: uint16(29920), + 109: uint16(29996), + 110: uint16(40480), + 111: uint16(40482), + 112: uint16(40488), + 113: uint16(40489), + 114: uint16(40490), + 115: uint16(40491), + 116: uint16(40492), + 117: uint16(40498), + 118: uint16(40497), + 119: uint16(40502), + 120: uint16(40504), + 121: uint16(40503), + 122: uint16(40505), + 123: uint16(40506), + 124: uint16(40510), + 125: uint16(40513), + 126: uint16(40514), + 127: uint16(40516), + 128: uint16(40518), + 129: uint16(40519), + 130: uint16(40520), + 131: uint16(40521), + 132: uint16(40523), + 133: uint16(40524), + 134: uint16(40526), + 135: uint16(40529), + 136: uint16(40533), + 137: uint16(40535), + 138: uint16(40538), + 139: uint16(40539), + 140: uint16(40540), + 141: uint16(40542), + 142: uint16(40547), + 143: uint16(40550), + 144: uint16(40551), + 145: uint16(40552), + 146: uint16(40553), + 147: uint16(40554), + 148: uint16(40555), + 149: uint16(40556), + 150: uint16(40561), + 151: uint16(40557), + 152: uint16(40563), + 153: uint16(30098), + 154: uint16(30100), + 155: uint16(30102), + 156: uint16(30112), + 157: uint16(30109), + 158: uint16(30124), + 159: uint16(30115), + 160: uint16(30131), + 161: uint16(30132), + 162: uint16(30136), + 163: uint16(30148), + 164: uint16(30129), + 165: uint16(30128), + 166: uint16(30147), + 167: uint16(30146), + 168: uint16(30166), + 169: uint16(30157), + 170: uint16(30179), + 171: uint16(30184), + 172: uint16(30182), + 173: uint16(30180), + 174: uint16(30187), + 175: uint16(30183), + 176: uint16(30211), + 177: uint16(30193), + 178: uint16(30204), + 179: uint16(30207), + 180: uint16(30224), + 181: uint16(30208), + 182: uint16(30213), + 183: uint16(30220), + 184: uint16(30231), + 185: uint16(30218), + 186: uint16(30245), + 187: uint16(30232), + 188: uint16(30229), + 189: uint16(30233), + }, + 112: { + 0: uint16(39308), + 1: uint16(39310), + 2: uint16(39322), + 3: uint16(39323), + 4: uint16(39324), + 5: uint16(39325), + 6: uint16(39326), + 7: uint16(39327), + 8: uint16(39328), + 9: uint16(39329), + 10: uint16(39330), + 11: uint16(39331), + 12: uint16(39332), + 13: uint16(39334), + 14: uint16(39335), + 15: uint16(39337), + 16: uint16(39338), + 17: uint16(39339), + 18: uint16(39340), + 19: uint16(39341), + 20: uint16(39342), + 21: uint16(39343), + 22: uint16(39344), + 23: uint16(39345), + 24: uint16(39346), + 25: uint16(39347), + 26: uint16(39348), + 27: uint16(39349), + 28: uint16(39350), + 29: uint16(39351), + 30: uint16(39352), + 31: uint16(39353), + 32: uint16(39354), + 33: uint16(39355), + 34: uint16(39356), + 35: uint16(39357), + 36: uint16(39358), + 37: uint16(39359), + 38: uint16(39360), + 39: uint16(39361), + 40: uint16(39362), + 41: uint16(39363), + 42: uint16(39364), + 43: uint16(39365), + 44: uint16(39366), + 45: uint16(39367), + 46: uint16(39368), + 47: uint16(39369), + 48: uint16(39370), + 49: uint16(39371), + 50: uint16(39372), + 51: uint16(39373), + 52: uint16(39374), + 53: uint16(39375), + 54: uint16(39376), + 55: uint16(39377), + 56: uint16(39378), + 57: uint16(39379), + 58: uint16(39380), + 59: uint16(39381), + 60: uint16(39382), + 61: uint16(39383), + 62: uint16(39384), + 63: uint16(39385), + 64: uint16(39386), + 65: uint16(39387), + 66: uint16(39388), + 67: uint16(39389), + 68: uint16(39390), + 69: uint16(39391), + 70: uint16(39392), + 71: uint16(39393), + 72: uint16(39394), + 73: uint16(39395), + 74: uint16(39396), + 75: uint16(39397), + 76: uint16(39398), + 77: uint16(39399), + 78: uint16(39400), + 79: uint16(39401), + 80: uint16(39402), + 81: uint16(39403), + 82: uint16(39404), + 83: uint16(39405), + 84: uint16(39406), + 85: uint16(39407), + 86: uint16(39408), + 87: uint16(39409), + 88: uint16(39410), + 89: uint16(39411), + 90: uint16(39412), + 91: uint16(39413), + 92: uint16(39414), + 93: uint16(39415), + 94: uint16(39416), + 95: uint16(39417), + 96: uint16(30235), + 97: uint16(30268), + 98: uint16(30242), + 99: uint16(30240), + 100: uint16(30272), + 101: uint16(30253), + 102: uint16(30256), + 103: uint16(30271), + 104: uint16(30261), + 105: uint16(30275), + 106: uint16(30270), + 107: uint16(30259), + 108: uint16(30285), + 109: uint16(30302), + 110: uint16(30292), + 111: uint16(30300), + 112: uint16(30294), + 113: uint16(30315), + 114: uint16(30319), + 115: uint16(32714), + 116: uint16(31462), + 117: uint16(31352), + 118: uint16(31353), + 119: uint16(31360), + 120: uint16(31366), + 121: uint16(31368), + 122: uint16(31381), + 123: uint16(31398), + 124: uint16(31392), + 125: uint16(31404), + 126: uint16(31400), + 127: uint16(31405), + 128: uint16(31411), + 129: uint16(34916), + 130: uint16(34921), + 131: uint16(34930), + 132: uint16(34941), + 133: uint16(34943), + 134: uint16(34946), + 135: uint16(34978), + 136: uint16(35014), + 137: uint16(34999), + 138: uint16(35004), + 139: uint16(35017), + 140: uint16(35042), + 141: uint16(35022), + 142: uint16(35043), + 143: uint16(35045), + 144: uint16(35057), + 145: uint16(35098), + 146: uint16(35068), + 147: uint16(35048), + 148: uint16(35070), + 149: uint16(35056), + 150: uint16(35105), + 151: uint16(35097), + 152: uint16(35091), + 153: uint16(35099), + 154: uint16(35082), + 155: uint16(35124), + 156: uint16(35115), + 157: uint16(35126), + 158: uint16(35137), + 159: uint16(35174), + 160: uint16(35195), + 161: uint16(30091), + 162: uint16(32997), + 163: uint16(30386), + 164: uint16(30388), + 165: uint16(30684), + 166: uint16(32786), + 167: uint16(32788), + 168: uint16(32790), + 169: uint16(32796), + 170: uint16(32800), + 171: uint16(32802), + 172: uint16(32805), + 173: uint16(32806), + 174: uint16(32807), + 175: uint16(32809), + 176: uint16(32808), + 177: uint16(32817), + 178: uint16(32779), + 179: uint16(32821), + 180: uint16(32835), + 181: uint16(32838), + 182: uint16(32845), + 183: uint16(32850), + 184: uint16(32873), + 185: uint16(32881), + 186: uint16(35203), + 187: uint16(39032), + 188: uint16(39040), + 189: uint16(39043), + }, + 113: { + 0: uint16(39418), + 1: uint16(39419), + 2: uint16(39420), + 3: uint16(39421), + 4: uint16(39422), + 5: uint16(39423), + 6: uint16(39424), + 7: uint16(39425), + 8: uint16(39426), + 9: uint16(39427), + 10: uint16(39428), + 11: uint16(39429), + 12: uint16(39430), + 13: uint16(39431), + 14: uint16(39432), + 15: uint16(39433), + 16: uint16(39434), + 17: uint16(39435), + 18: uint16(39436), + 19: uint16(39437), + 20: uint16(39438), + 21: uint16(39439), + 22: uint16(39440), + 23: uint16(39441), + 24: uint16(39442), + 25: uint16(39443), + 26: uint16(39444), + 27: uint16(39445), + 28: uint16(39446), + 29: uint16(39447), + 30: uint16(39448), + 31: uint16(39449), + 32: uint16(39450), + 33: uint16(39451), + 34: uint16(39452), + 35: uint16(39453), + 36: uint16(39454), + 37: uint16(39455), + 38: uint16(39456), + 39: uint16(39457), + 40: uint16(39458), + 41: uint16(39459), + 42: uint16(39460), + 43: uint16(39461), + 44: uint16(39462), + 45: uint16(39463), + 46: uint16(39464), + 47: uint16(39465), + 48: uint16(39466), + 49: uint16(39467), + 50: uint16(39468), + 51: uint16(39469), + 52: uint16(39470), + 53: uint16(39471), + 54: uint16(39472), + 55: uint16(39473), + 56: uint16(39474), + 57: uint16(39475), + 58: uint16(39476), + 59: uint16(39477), + 60: uint16(39478), + 61: uint16(39479), + 62: uint16(39480), + 63: uint16(39481), + 64: uint16(39482), + 65: uint16(39483), + 66: uint16(39484), + 67: uint16(39485), + 68: uint16(39486), + 69: uint16(39487), + 70: uint16(39488), + 71: uint16(39489), + 72: uint16(39490), + 73: uint16(39491), + 74: uint16(39492), + 75: uint16(39493), + 76: uint16(39494), + 77: uint16(39495), + 78: uint16(39496), + 79: uint16(39497), + 80: uint16(39498), + 81: uint16(39499), + 82: uint16(39500), + 83: uint16(39501), + 84: uint16(39502), + 85: uint16(39503), + 86: uint16(39504), + 87: uint16(39505), + 88: uint16(39506), + 89: uint16(39507), + 90: uint16(39508), + 91: uint16(39509), + 92: uint16(39510), + 93: uint16(39511), + 94: uint16(39512), + 95: uint16(39513), + 96: uint16(39049), + 97: uint16(39052), + 98: uint16(39053), + 99: uint16(39055), + 100: uint16(39060), + 101: uint16(39066), + 102: uint16(39067), + 103: uint16(39070), + 104: uint16(39071), + 105: uint16(39073), + 106: uint16(39074), + 107: uint16(39077), + 108: uint16(39078), + 109: uint16(34381), + 110: uint16(34388), + 111: uint16(34412), + 112: uint16(34414), + 113: uint16(34431), + 114: uint16(34426), + 115: uint16(34428), + 116: uint16(34427), + 117: uint16(34472), + 118: uint16(34445), + 119: uint16(34443), + 120: uint16(34476), + 121: uint16(34461), + 122: uint16(34471), + 123: uint16(34467), + 124: uint16(34474), + 125: uint16(34451), + 126: uint16(34473), + 127: uint16(34486), + 128: uint16(34500), + 129: uint16(34485), + 130: uint16(34510), + 131: uint16(34480), + 132: uint16(34490), + 133: uint16(34481), + 134: uint16(34479), + 135: uint16(34505), + 136: uint16(34511), + 137: uint16(34484), + 138: uint16(34537), + 139: uint16(34545), + 140: uint16(34546), + 141: uint16(34541), + 142: uint16(34547), + 143: uint16(34512), + 144: uint16(34579), + 145: uint16(34526), + 146: uint16(34548), + 147: uint16(34527), + 148: uint16(34520), + 149: uint16(34513), + 150: uint16(34563), + 151: uint16(34567), + 152: uint16(34552), + 153: uint16(34568), + 154: uint16(34570), + 155: uint16(34573), + 156: uint16(34569), + 157: uint16(34595), + 158: uint16(34619), + 159: uint16(34590), + 160: uint16(34597), + 161: uint16(34606), + 162: uint16(34586), + 163: uint16(34622), + 164: uint16(34632), + 165: uint16(34612), + 166: uint16(34609), + 167: uint16(34601), + 168: uint16(34615), + 169: uint16(34623), + 170: uint16(34690), + 171: uint16(34594), + 172: uint16(34685), + 173: uint16(34686), + 174: uint16(34683), + 175: uint16(34656), + 176: uint16(34672), + 177: uint16(34636), + 178: uint16(34670), + 179: uint16(34699), + 180: uint16(34643), + 181: uint16(34659), + 182: uint16(34684), + 183: uint16(34660), + 184: uint16(34649), + 185: uint16(34661), + 186: uint16(34707), + 187: uint16(34735), + 188: uint16(34728), + 189: uint16(34770), + }, + 114: { + 0: uint16(39514), + 1: uint16(39515), + 2: uint16(39516), + 3: uint16(39517), + 4: uint16(39518), + 5: uint16(39519), + 6: uint16(39520), + 7: uint16(39521), + 8: uint16(39522), + 9: uint16(39523), + 10: uint16(39524), + 11: uint16(39525), + 12: uint16(39526), + 13: uint16(39527), + 14: uint16(39528), + 15: uint16(39529), + 16: uint16(39530), + 17: uint16(39531), + 18: uint16(39538), + 19: uint16(39555), + 20: uint16(39561), + 21: uint16(39565), + 22: uint16(39566), + 23: uint16(39572), + 24: uint16(39573), + 25: uint16(39577), + 26: uint16(39590), + 27: uint16(39593), + 28: uint16(39594), + 29: uint16(39595), + 30: uint16(39596), + 31: uint16(39597), + 32: uint16(39598), + 33: uint16(39599), + 34: uint16(39602), + 35: uint16(39603), + 36: uint16(39604), + 37: uint16(39605), + 38: uint16(39609), + 39: uint16(39611), + 40: uint16(39613), + 41: uint16(39614), + 42: uint16(39615), + 43: uint16(39619), + 44: uint16(39620), + 45: uint16(39622), + 46: uint16(39623), + 47: uint16(39624), + 48: uint16(39625), + 49: uint16(39626), + 50: uint16(39629), + 51: uint16(39630), + 52: uint16(39631), + 53: uint16(39632), + 54: uint16(39634), + 55: uint16(39636), + 56: uint16(39637), + 57: uint16(39638), + 58: uint16(39639), + 59: uint16(39641), + 60: uint16(39642), + 61: uint16(39643), + 62: uint16(39644), + 63: uint16(39645), + 64: uint16(39646), + 65: uint16(39648), + 66: uint16(39650), + 67: uint16(39651), + 68: uint16(39652), + 69: uint16(39653), + 70: uint16(39655), + 71: uint16(39656), + 72: uint16(39657), + 73: uint16(39658), + 74: uint16(39660), + 75: uint16(39662), + 76: uint16(39664), + 77: uint16(39665), + 78: uint16(39666), + 79: uint16(39667), + 80: uint16(39668), + 81: uint16(39669), + 82: uint16(39670), + 83: uint16(39671), + 84: uint16(39672), + 85: uint16(39674), + 86: uint16(39676), + 87: uint16(39677), + 88: uint16(39678), + 89: uint16(39679), + 90: uint16(39680), + 91: uint16(39681), + 92: uint16(39682), + 93: uint16(39684), + 94: uint16(39685), + 95: uint16(39686), + 96: uint16(34758), + 97: uint16(34696), + 98: uint16(34693), + 99: uint16(34733), + 100: uint16(34711), + 101: uint16(34691), + 102: uint16(34731), + 103: uint16(34789), + 104: uint16(34732), + 105: uint16(34741), + 106: uint16(34739), + 107: uint16(34763), + 108: uint16(34771), + 109: uint16(34749), + 110: uint16(34769), + 111: uint16(34752), + 112: uint16(34762), + 113: uint16(34779), + 114: uint16(34794), + 115: uint16(34784), + 116: uint16(34798), + 117: uint16(34838), + 118: uint16(34835), + 119: uint16(34814), + 120: uint16(34826), + 121: uint16(34843), + 122: uint16(34849), + 123: uint16(34873), + 124: uint16(34876), + 125: uint16(32566), + 126: uint16(32578), + 127: uint16(32580), + 128: uint16(32581), + 129: uint16(33296), + 130: uint16(31482), + 131: uint16(31485), + 132: uint16(31496), + 133: uint16(31491), + 134: uint16(31492), + 135: uint16(31509), + 136: uint16(31498), + 137: uint16(31531), + 138: uint16(31503), + 139: uint16(31559), + 140: uint16(31544), + 141: uint16(31530), + 142: uint16(31513), + 143: uint16(31534), + 144: uint16(31537), + 145: uint16(31520), + 146: uint16(31525), + 147: uint16(31524), + 148: uint16(31539), + 149: uint16(31550), + 150: uint16(31518), + 151: uint16(31576), + 152: uint16(31578), + 153: uint16(31557), + 154: uint16(31605), + 155: uint16(31564), + 156: uint16(31581), + 157: uint16(31584), + 158: uint16(31598), + 159: uint16(31611), + 160: uint16(31586), + 161: uint16(31602), + 162: uint16(31601), + 163: uint16(31632), + 164: uint16(31654), + 165: uint16(31655), + 166: uint16(31672), + 167: uint16(31660), + 168: uint16(31645), + 169: uint16(31656), + 170: uint16(31621), + 171: uint16(31658), + 172: uint16(31644), + 173: uint16(31650), + 174: uint16(31659), + 175: uint16(31668), + 176: uint16(31697), + 177: uint16(31681), + 178: uint16(31692), + 179: uint16(31709), + 180: uint16(31706), + 181: uint16(31717), + 182: uint16(31718), + 183: uint16(31722), + 184: uint16(31756), + 185: uint16(31742), + 186: uint16(31740), + 187: uint16(31759), + 188: uint16(31766), + 189: uint16(31755), + }, + 115: { + 0: uint16(39687), + 1: uint16(39689), + 2: uint16(39690), + 3: uint16(39691), + 4: uint16(39692), + 5: uint16(39693), + 6: uint16(39694), + 7: uint16(39696), + 8: uint16(39697), + 9: uint16(39698), + 10: uint16(39700), + 11: uint16(39701), + 12: uint16(39702), + 13: uint16(39703), + 14: uint16(39704), + 15: uint16(39705), + 16: uint16(39706), + 17: uint16(39707), + 18: uint16(39708), + 19: uint16(39709), + 20: uint16(39710), + 21: uint16(39712), + 22: uint16(39713), + 23: uint16(39714), + 24: uint16(39716), + 25: uint16(39717), + 26: uint16(39718), + 27: uint16(39719), + 28: uint16(39720), + 29: uint16(39721), + 30: uint16(39722), + 31: uint16(39723), + 32: uint16(39724), + 33: uint16(39725), + 34: uint16(39726), + 35: uint16(39728), + 36: uint16(39729), + 37: uint16(39731), + 38: uint16(39732), + 39: uint16(39733), + 40: uint16(39734), + 41: uint16(39735), + 42: uint16(39736), + 43: uint16(39737), + 44: uint16(39738), + 45: uint16(39741), + 46: uint16(39742), + 47: uint16(39743), + 48: uint16(39744), + 49: uint16(39750), + 50: uint16(39754), + 51: uint16(39755), + 52: uint16(39756), + 53: uint16(39758), + 54: uint16(39760), + 55: uint16(39762), + 56: uint16(39763), + 57: uint16(39765), + 58: uint16(39766), + 59: uint16(39767), + 60: uint16(39768), + 61: uint16(39769), + 62: uint16(39770), + 63: uint16(39771), + 64: uint16(39772), + 65: uint16(39773), + 66: uint16(39774), + 67: uint16(39775), + 68: uint16(39776), + 69: uint16(39777), + 70: uint16(39778), + 71: uint16(39779), + 72: uint16(39780), + 73: uint16(39781), + 74: uint16(39782), + 75: uint16(39783), + 76: uint16(39784), + 77: uint16(39785), + 78: uint16(39786), + 79: uint16(39787), + 80: uint16(39788), + 81: uint16(39789), + 82: uint16(39790), + 83: uint16(39791), + 84: uint16(39792), + 85: uint16(39793), + 86: uint16(39794), + 87: uint16(39795), + 88: uint16(39796), + 89: uint16(39797), + 90: uint16(39798), + 91: uint16(39799), + 92: uint16(39800), + 93: uint16(39801), + 94: uint16(39802), + 95: uint16(39803), + 96: uint16(31775), + 97: uint16(31786), + 98: uint16(31782), + 99: uint16(31800), + 100: uint16(31809), + 101: uint16(31808), + 102: uint16(33278), + 103: uint16(33281), + 104: uint16(33282), + 105: uint16(33284), + 106: uint16(33260), + 107: uint16(34884), + 108: uint16(33313), + 109: uint16(33314), + 110: uint16(33315), + 111: uint16(33325), + 112: uint16(33327), + 113: uint16(33320), + 114: uint16(33323), + 115: uint16(33336), + 116: uint16(33339), + 117: uint16(33331), + 118: uint16(33332), + 119: uint16(33342), + 120: uint16(33348), + 121: uint16(33353), + 122: uint16(33355), + 123: uint16(33359), + 124: uint16(33370), + 125: uint16(33375), + 126: uint16(33384), + 127: uint16(34942), + 128: uint16(34949), + 129: uint16(34952), + 130: uint16(35032), + 131: uint16(35039), + 132: uint16(35166), + 133: uint16(32669), + 134: uint16(32671), + 135: uint16(32679), + 136: uint16(32687), + 137: uint16(32688), + 138: uint16(32690), + 139: uint16(31868), + 140: uint16(25929), + 141: uint16(31889), + 142: uint16(31901), + 143: uint16(31900), + 144: uint16(31902), + 145: uint16(31906), + 146: uint16(31922), + 147: uint16(31932), + 148: uint16(31933), + 149: uint16(31937), + 150: uint16(31943), + 151: uint16(31948), + 152: uint16(31949), + 153: uint16(31944), + 154: uint16(31941), + 155: uint16(31959), + 156: uint16(31976), + 157: uint16(33390), + 158: uint16(26280), + 159: uint16(32703), + 160: uint16(32718), + 161: uint16(32725), + 162: uint16(32741), + 163: uint16(32737), + 164: uint16(32742), + 165: uint16(32745), + 166: uint16(32750), + 167: uint16(32755), + 168: uint16(31992), + 169: uint16(32119), + 170: uint16(32166), + 171: uint16(32174), + 172: uint16(32327), + 173: uint16(32411), + 174: uint16(40632), + 175: uint16(40628), + 176: uint16(36211), + 177: uint16(36228), + 178: uint16(36244), + 179: uint16(36241), + 180: uint16(36273), + 181: uint16(36199), + 182: uint16(36205), + 183: uint16(35911), + 184: uint16(35913), + 185: uint16(37194), + 186: uint16(37200), + 187: uint16(37198), + 188: uint16(37199), + 189: uint16(37220), + }, + 116: { + 0: uint16(39804), + 1: uint16(39805), + 2: uint16(39806), + 3: uint16(39807), + 4: uint16(39808), + 5: uint16(39809), + 6: uint16(39810), + 7: uint16(39811), + 8: uint16(39812), + 9: uint16(39813), + 10: uint16(39814), + 11: uint16(39815), + 12: uint16(39816), + 13: uint16(39817), + 14: uint16(39818), + 15: uint16(39819), + 16: uint16(39820), + 17: uint16(39821), + 18: uint16(39822), + 19: uint16(39823), + 20: uint16(39824), + 21: uint16(39825), + 22: uint16(39826), + 23: uint16(39827), + 24: uint16(39828), + 25: uint16(39829), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39832), + 29: uint16(39833), + 30: uint16(39834), + 31: uint16(39835), + 32: uint16(39836), + 33: uint16(39837), + 34: uint16(39838), + 35: uint16(39839), + 36: uint16(39840), + 37: uint16(39841), + 38: uint16(39842), + 39: uint16(39843), + 40: uint16(39844), + 41: uint16(39845), + 42: uint16(39846), + 43: uint16(39847), + 44: uint16(39848), + 45: uint16(39849), + 46: uint16(39850), + 47: uint16(39851), + 48: uint16(39852), + 49: uint16(39853), + 50: uint16(39854), + 51: uint16(39855), + 52: uint16(39856), + 53: uint16(39857), + 54: uint16(39858), + 55: uint16(39859), + 56: uint16(39860), + 57: uint16(39861), + 58: uint16(39862), + 59: uint16(39863), + 60: uint16(39864), + 61: uint16(39865), + 62: uint16(39866), + 63: uint16(39867), + 64: uint16(39868), + 65: uint16(39869), + 66: uint16(39870), + 67: uint16(39871), + 68: uint16(39872), + 69: uint16(39873), + 70: uint16(39874), + 71: uint16(39875), + 72: uint16(39876), + 73: uint16(39877), + 74: uint16(39878), + 75: uint16(39879), + 76: uint16(39880), + 77: uint16(39881), + 78: uint16(39882), + 79: uint16(39883), + 80: uint16(39884), + 81: uint16(39885), + 82: uint16(39886), + 83: uint16(39887), + 84: uint16(39888), + 85: uint16(39889), + 86: uint16(39890), + 87: uint16(39891), + 88: uint16(39892), + 89: uint16(39893), + 90: uint16(39894), + 91: uint16(39895), + 92: uint16(39896), + 93: uint16(39897), + 94: uint16(39898), + 95: uint16(39899), + 96: uint16(37218), + 97: uint16(37217), + 98: uint16(37232), + 99: uint16(37225), + 100: uint16(37231), + 101: uint16(37245), + 102: uint16(37246), + 103: uint16(37234), + 104: uint16(37236), + 105: uint16(37241), + 106: uint16(37260), + 107: uint16(37253), + 108: uint16(37264), + 109: uint16(37261), + 110: uint16(37265), + 111: uint16(37282), + 112: uint16(37283), + 113: uint16(37290), + 114: uint16(37293), + 115: uint16(37294), + 116: uint16(37295), + 117: uint16(37301), + 118: uint16(37300), + 119: uint16(37306), + 120: uint16(35925), + 121: uint16(40574), + 122: uint16(36280), + 123: uint16(36331), + 124: uint16(36357), + 125: uint16(36441), + 126: uint16(36457), + 127: uint16(36277), + 128: uint16(36287), + 129: uint16(36284), + 130: uint16(36282), + 131: uint16(36292), + 132: uint16(36310), + 133: uint16(36311), + 134: uint16(36314), + 135: uint16(36318), + 136: uint16(36302), + 137: uint16(36303), + 138: uint16(36315), + 139: uint16(36294), + 140: uint16(36332), + 141: uint16(36343), + 142: uint16(36344), + 143: uint16(36323), + 144: uint16(36345), + 145: uint16(36347), + 146: uint16(36324), + 147: uint16(36361), + 148: uint16(36349), + 149: uint16(36372), + 150: uint16(36381), + 151: uint16(36383), + 152: uint16(36396), + 153: uint16(36398), + 154: uint16(36387), + 155: uint16(36399), + 156: uint16(36410), + 157: uint16(36416), + 158: uint16(36409), + 159: uint16(36405), + 160: uint16(36413), + 161: uint16(36401), + 162: uint16(36425), + 163: uint16(36417), + 164: uint16(36418), + 165: uint16(36433), + 166: uint16(36434), + 167: uint16(36426), + 168: uint16(36464), + 169: uint16(36470), + 170: uint16(36476), + 171: uint16(36463), + 172: uint16(36468), + 173: uint16(36485), + 174: uint16(36495), + 175: uint16(36500), + 176: uint16(36496), + 177: uint16(36508), + 178: uint16(36510), + 179: uint16(35960), + 180: uint16(35970), + 181: uint16(35978), + 182: uint16(35973), + 183: uint16(35992), + 184: uint16(35988), + 185: uint16(26011), + 186: uint16(35286), + 187: uint16(35294), + 188: uint16(35290), + 189: uint16(35292), + }, + 117: { + 0: uint16(39900), + 1: uint16(39901), + 2: uint16(39902), + 3: uint16(39903), + 4: uint16(39904), + 5: uint16(39905), + 6: uint16(39906), + 7: uint16(39907), + 8: uint16(39908), + 9: uint16(39909), + 10: uint16(39910), + 11: uint16(39911), + 12: uint16(39912), + 13: uint16(39913), + 14: uint16(39914), + 15: uint16(39915), + 16: uint16(39916), + 17: uint16(39917), + 18: uint16(39918), + 19: uint16(39919), + 20: uint16(39920), + 21: uint16(39921), + 22: uint16(39922), + 23: uint16(39923), + 24: uint16(39924), + 25: uint16(39925), + 26: uint16(39926), + 27: uint16(39927), + 28: uint16(39928), + 29: uint16(39929), + 30: uint16(39930), + 31: uint16(39931), + 32: uint16(39932), + 33: uint16(39933), + 34: uint16(39934), + 35: uint16(39935), + 36: uint16(39936), + 37: uint16(39937), + 38: uint16(39938), + 39: uint16(39939), + 40: uint16(39940), + 41: uint16(39941), + 42: uint16(39942), + 43: uint16(39943), + 44: uint16(39944), + 45: uint16(39945), + 46: uint16(39946), + 47: uint16(39947), + 48: uint16(39948), + 49: uint16(39949), + 50: uint16(39950), + 51: uint16(39951), + 52: uint16(39952), + 53: uint16(39953), + 54: uint16(39954), + 55: uint16(39955), + 56: uint16(39956), + 57: uint16(39957), + 58: uint16(39958), + 59: uint16(39959), + 60: uint16(39960), + 61: uint16(39961), + 62: uint16(39962), + 63: uint16(39963), + 64: uint16(39964), + 65: uint16(39965), + 66: uint16(39966), + 67: uint16(39967), + 68: uint16(39968), + 69: uint16(39969), + 70: uint16(39970), + 71: uint16(39971), + 72: uint16(39972), + 73: uint16(39973), + 74: uint16(39974), + 75: uint16(39975), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39978), + 79: uint16(39979), + 80: uint16(39980), + 81: uint16(39981), + 82: uint16(39982), + 83: uint16(39983), + 84: uint16(39984), + 85: uint16(39985), + 86: uint16(39986), + 87: uint16(39987), + 88: uint16(39988), + 89: uint16(39989), + 90: uint16(39990), + 91: uint16(39991), + 92: uint16(39992), + 93: uint16(39993), + 94: uint16(39994), + 95: uint16(39995), + 96: uint16(35301), + 97: uint16(35307), + 98: uint16(35311), + 99: uint16(35390), + 100: uint16(35622), + 101: uint16(38739), + 102: uint16(38633), + 103: uint16(38643), + 104: uint16(38639), + 105: uint16(38662), + 106: uint16(38657), + 107: uint16(38664), + 108: uint16(38671), + 109: uint16(38670), + 110: uint16(38698), + 111: uint16(38701), + 112: uint16(38704), + 113: uint16(38718), + 114: uint16(40832), + 115: uint16(40835), + 116: uint16(40837), + 117: uint16(40838), + 118: uint16(40839), + 119: uint16(40840), + 120: uint16(40841), + 121: uint16(40842), + 122: uint16(40844), + 123: uint16(40702), + 124: uint16(40715), + 125: uint16(40717), + 126: uint16(38585), + 127: uint16(38588), + 128: uint16(38589), + 129: uint16(38606), + 130: uint16(38610), + 131: uint16(30655), + 132: uint16(38624), + 133: uint16(37518), + 134: uint16(37550), + 135: uint16(37576), + 136: uint16(37694), + 137: uint16(37738), + 138: uint16(37834), + 139: uint16(37775), + 140: uint16(37950), + 141: uint16(37995), + 142: uint16(40063), + 143: uint16(40066), + 144: uint16(40069), + 145: uint16(40070), + 146: uint16(40071), + 147: uint16(40072), + 148: uint16(31267), + 149: uint16(40075), + 150: uint16(40078), + 151: uint16(40080), + 152: uint16(40081), + 153: uint16(40082), + 154: uint16(40084), + 155: uint16(40085), + 156: uint16(40090), + 157: uint16(40091), + 158: uint16(40094), + 159: uint16(40095), + 160: uint16(40096), + 161: uint16(40097), + 162: uint16(40098), + 163: uint16(40099), + 164: uint16(40101), + 165: uint16(40102), + 166: uint16(40103), + 167: uint16(40104), + 168: uint16(40105), + 169: uint16(40107), + 170: uint16(40109), + 171: uint16(40110), + 172: uint16(40112), + 173: uint16(40113), + 174: uint16(40114), + 175: uint16(40115), + 176: uint16(40116), + 177: uint16(40117), + 178: uint16(40118), + 179: uint16(40119), + 180: uint16(40122), + 181: uint16(40123), + 182: uint16(40124), + 183: uint16(40125), + 184: uint16(40132), + 185: uint16(40133), + 186: uint16(40134), + 187: uint16(40135), + 188: uint16(40138), + 189: uint16(40139), + }, + 118: { + 0: uint16(39996), + 1: uint16(39997), + 2: uint16(39998), + 3: uint16(39999), + 4: uint16(40000), + 5: uint16(40001), + 6: uint16(40002), + 7: uint16(40003), + 8: uint16(40004), + 9: uint16(40005), + 10: uint16(40006), + 11: uint16(40007), + 12: uint16(40008), + 13: uint16(40009), + 14: uint16(40010), + 15: uint16(40011), + 16: uint16(40012), + 17: uint16(40013), + 18: uint16(40014), + 19: uint16(40015), + 20: uint16(40016), + 21: uint16(40017), + 22: uint16(40018), + 23: uint16(40019), + 24: uint16(40020), + 25: uint16(40021), + 26: uint16(40022), + 27: uint16(40023), + 28: uint16(40024), + 29: uint16(40025), + 30: uint16(40026), + 31: uint16(40027), + 32: uint16(40028), + 33: uint16(40029), + 34: uint16(40030), + 35: uint16(40031), + 36: uint16(40032), + 37: uint16(40033), + 38: uint16(40034), + 39: uint16(40035), + 40: uint16(40036), + 41: uint16(40037), + 42: uint16(40038), + 43: uint16(40039), + 44: uint16(40040), + 45: uint16(40041), + 46: uint16(40042), + 47: uint16(40043), + 48: uint16(40044), + 49: uint16(40045), + 50: uint16(40046), + 51: uint16(40047), + 52: uint16(40048), + 53: uint16(40049), + 54: uint16(40050), + 55: uint16(40051), + 56: uint16(40052), + 57: uint16(40053), + 58: uint16(40054), + 59: uint16(40055), + 60: uint16(40056), + 61: uint16(40057), + 62: uint16(40058), + 63: uint16(40059), + 64: uint16(40061), + 65: uint16(40062), + 66: uint16(40064), + 67: uint16(40067), + 68: uint16(40068), + 69: uint16(40073), + 70: uint16(40074), + 71: uint16(40076), + 72: uint16(40079), + 73: uint16(40083), + 74: uint16(40086), + 75: uint16(40087), + 76: uint16(40088), + 77: uint16(40089), + 78: uint16(40093), + 79: uint16(40106), + 80: uint16(40108), + 81: uint16(40111), + 82: uint16(40121), + 83: uint16(40126), + 84: uint16(40127), + 85: uint16(40128), + 86: uint16(40129), + 87: uint16(40130), + 88: uint16(40136), + 89: uint16(40137), + 90: uint16(40145), + 91: uint16(40146), + 92: uint16(40154), + 93: uint16(40155), + 94: uint16(40160), + 95: uint16(40161), + 96: uint16(40140), + 97: uint16(40141), + 98: uint16(40142), + 99: uint16(40143), + 100: uint16(40144), + 101: uint16(40147), + 102: uint16(40148), + 103: uint16(40149), + 104: uint16(40151), + 105: uint16(40152), + 106: uint16(40153), + 107: uint16(40156), + 108: uint16(40157), + 109: uint16(40159), + 110: uint16(40162), + 111: uint16(38780), + 112: uint16(38789), + 113: uint16(38801), + 114: uint16(38802), + 115: uint16(38804), + 116: uint16(38831), + 117: uint16(38827), + 118: uint16(38819), + 119: uint16(38834), + 120: uint16(38836), + 121: uint16(39601), + 122: uint16(39600), + 123: uint16(39607), + 124: uint16(40536), + 125: uint16(39606), + 126: uint16(39610), + 127: uint16(39612), + 128: uint16(39617), + 129: uint16(39616), + 130: uint16(39621), + 131: uint16(39618), + 132: uint16(39627), + 133: uint16(39628), + 134: uint16(39633), + 135: uint16(39749), + 136: uint16(39747), + 137: uint16(39751), + 138: uint16(39753), + 139: uint16(39752), + 140: uint16(39757), + 141: uint16(39761), + 142: uint16(39144), + 143: uint16(39181), + 144: uint16(39214), + 145: uint16(39253), + 146: uint16(39252), + 147: uint16(39647), + 148: uint16(39649), + 149: uint16(39654), + 150: uint16(39663), + 151: uint16(39659), + 152: uint16(39675), + 153: uint16(39661), + 154: uint16(39673), + 155: uint16(39688), + 156: uint16(39695), + 157: uint16(39699), + 158: uint16(39711), + 159: uint16(39715), + 160: uint16(40637), + 161: uint16(40638), + 162: uint16(32315), + 163: uint16(40578), + 164: uint16(40583), + 165: uint16(40584), + 166: uint16(40587), + 167: uint16(40594), + 168: uint16(37846), + 169: uint16(40605), + 170: uint16(40607), + 171: uint16(40667), + 172: uint16(40668), + 173: uint16(40669), + 174: uint16(40672), + 175: uint16(40671), + 176: uint16(40674), + 177: uint16(40681), + 178: uint16(40679), + 179: uint16(40677), + 180: uint16(40682), + 181: uint16(40687), + 182: uint16(40738), + 183: uint16(40748), + 184: uint16(40751), + 185: uint16(40761), + 186: uint16(40759), + 187: uint16(40765), + 188: uint16(40766), + 189: uint16(40772), + }, + 119: { + 0: uint16(40163), + 1: uint16(40164), + 2: uint16(40165), + 3: uint16(40166), + 4: uint16(40167), + 5: uint16(40168), + 6: uint16(40169), + 7: uint16(40170), + 8: uint16(40171), + 9: uint16(40172), + 10: uint16(40173), + 11: uint16(40174), + 12: uint16(40175), + 13: uint16(40176), + 14: uint16(40177), + 15: uint16(40178), + 16: uint16(40179), + 17: uint16(40180), + 18: uint16(40181), + 19: uint16(40182), + 20: uint16(40183), + 21: uint16(40184), + 22: uint16(40185), + 23: uint16(40186), + 24: uint16(40187), + 25: uint16(40188), + 26: uint16(40189), + 27: uint16(40190), + 28: uint16(40191), + 29: uint16(40192), + 30: uint16(40193), + 31: uint16(40194), + 32: uint16(40195), + 33: uint16(40196), + 34: uint16(40197), + 35: uint16(40198), + 36: uint16(40199), + 37: uint16(40200), + 38: uint16(40201), + 39: uint16(40202), + 40: uint16(40203), + 41: uint16(40204), + 42: uint16(40205), + 43: uint16(40206), + 44: uint16(40207), + 45: uint16(40208), + 46: uint16(40209), + 47: uint16(40210), + 48: uint16(40211), + 49: uint16(40212), + 50: uint16(40213), + 51: uint16(40214), + 52: uint16(40215), + 53: uint16(40216), + 54: uint16(40217), + 55: uint16(40218), + 56: uint16(40219), + 57: uint16(40220), + 58: uint16(40221), + 59: uint16(40222), + 60: uint16(40223), + 61: uint16(40224), + 62: uint16(40225), + 63: uint16(40226), + 64: uint16(40227), + 65: uint16(40228), + 66: uint16(40229), + 67: uint16(40230), + 68: uint16(40231), + 69: uint16(40232), + 70: uint16(40233), + 71: uint16(40234), + 72: uint16(40235), + 73: uint16(40236), + 74: uint16(40237), + 75: uint16(40238), + 76: uint16(40239), + 77: uint16(40240), + 78: uint16(40241), + 79: uint16(40242), + 80: uint16(40243), + 81: uint16(40244), + 82: uint16(40245), + 83: uint16(40246), + 84: uint16(40247), + 85: uint16(40248), + 86: uint16(40249), + 87: uint16(40250), + 88: uint16(40251), + 89: uint16(40252), + 90: uint16(40253), + 91: uint16(40254), + 92: uint16(40255), + 93: uint16(40256), + 94: uint16(40257), + 95: uint16(40258), + 96: uint16(57908), + 97: uint16(57909), + 98: uint16(57910), + 99: uint16(57911), + 100: uint16(57912), + 101: uint16(57913), + 102: uint16(57914), + 103: uint16(57915), + 104: uint16(57916), + 105: uint16(57917), + 106: uint16(57918), + 107: uint16(57919), + 108: uint16(57920), + 109: uint16(57921), + 110: uint16(57922), + 111: uint16(57923), + 112: uint16(57924), + 113: uint16(57925), + 114: uint16(57926), + 115: uint16(57927), + 116: uint16(57928), + 117: uint16(57929), + 118: uint16(57930), + 119: uint16(57931), + 120: uint16(57932), + 121: uint16(57933), + 122: uint16(57934), + 123: uint16(57935), + 124: uint16(57936), + 125: uint16(57937), + 126: uint16(57938), + 127: uint16(57939), + 128: uint16(57940), + 129: uint16(57941), + 130: uint16(57942), + 131: uint16(57943), + 132: uint16(57944), + 133: uint16(57945), + 134: uint16(57946), + 135: uint16(57947), + 136: uint16(57948), + 137: uint16(57949), + 138: uint16(57950), + 139: uint16(57951), + 140: uint16(57952), + 141: uint16(57953), + 142: uint16(57954), + 143: uint16(57955), + 144: uint16(57956), + 145: uint16(57957), + 146: uint16(57958), + 147: uint16(57959), + 148: uint16(57960), + 149: uint16(57961), + 150: uint16(57962), + 151: uint16(57963), + 152: uint16(57964), + 153: uint16(57965), + 154: uint16(57966), + 155: uint16(57967), + 156: uint16(57968), + 157: uint16(57969), + 158: uint16(57970), + 159: uint16(57971), + 160: uint16(57972), + 161: uint16(57973), + 162: uint16(57974), + 163: uint16(57975), + 164: uint16(57976), + 165: uint16(57977), + 166: uint16(57978), + 167: uint16(57979), + 168: uint16(57980), + 169: uint16(57981), + 170: uint16(57982), + 171: uint16(57983), + 172: uint16(57984), + 173: uint16(57985), + 174: uint16(57986), + 175: uint16(57987), + 176: uint16(57988), + 177: uint16(57989), + 178: uint16(57990), + 179: uint16(57991), + 180: uint16(57992), + 181: uint16(57993), + 182: uint16(57994), + 183: uint16(57995), + 184: uint16(57996), + 185: uint16(57997), + 186: uint16(57998), + 187: uint16(57999), + 188: uint16(58000), + 189: uint16(58001), + }, + 120: { + 0: uint16(40259), + 1: uint16(40260), + 2: uint16(40261), + 3: uint16(40262), + 4: uint16(40263), + 5: uint16(40264), + 6: uint16(40265), + 7: uint16(40266), + 8: uint16(40267), + 9: uint16(40268), + 10: uint16(40269), + 11: uint16(40270), + 12: uint16(40271), + 13: uint16(40272), + 14: uint16(40273), + 15: uint16(40274), + 16: uint16(40275), + 17: uint16(40276), + 18: uint16(40277), + 19: uint16(40278), + 20: uint16(40279), + 21: uint16(40280), + 22: uint16(40281), + 23: uint16(40282), + 24: uint16(40283), + 25: uint16(40284), + 26: uint16(40285), + 27: uint16(40286), + 28: uint16(40287), + 29: uint16(40288), + 30: uint16(40289), + 31: uint16(40290), + 32: uint16(40291), + 33: uint16(40292), + 34: uint16(40293), + 35: uint16(40294), + 36: uint16(40295), + 37: uint16(40296), + 38: uint16(40297), + 39: uint16(40298), + 40: uint16(40299), + 41: uint16(40300), + 42: uint16(40301), + 43: uint16(40302), + 44: uint16(40303), + 45: uint16(40304), + 46: uint16(40305), + 47: uint16(40306), + 48: uint16(40307), + 49: uint16(40308), + 50: uint16(40309), + 51: uint16(40310), + 52: uint16(40311), + 53: uint16(40312), + 54: uint16(40313), + 55: uint16(40314), + 56: uint16(40315), + 57: uint16(40316), + 58: uint16(40317), + 59: uint16(40318), + 60: uint16(40319), + 61: uint16(40320), + 62: uint16(40321), + 63: uint16(40322), + 64: uint16(40323), + 65: uint16(40324), + 66: uint16(40325), + 67: uint16(40326), + 68: uint16(40327), + 69: uint16(40328), + 70: uint16(40329), + 71: uint16(40330), + 72: uint16(40331), + 73: uint16(40332), + 74: uint16(40333), + 75: uint16(40334), + 76: uint16(40335), + 77: uint16(40336), + 78: uint16(40337), + 79: uint16(40338), + 80: uint16(40339), + 81: uint16(40340), + 82: uint16(40341), + 83: uint16(40342), + 84: uint16(40343), + 85: uint16(40344), + 86: uint16(40345), + 87: uint16(40346), + 88: uint16(40347), + 89: uint16(40348), + 90: uint16(40349), + 91: uint16(40350), + 92: uint16(40351), + 93: uint16(40352), + 94: uint16(40353), + 95: uint16(40354), + 96: uint16(58002), + 97: uint16(58003), + 98: uint16(58004), + 99: uint16(58005), + 100: uint16(58006), + 101: uint16(58007), + 102: uint16(58008), + 103: uint16(58009), + 104: uint16(58010), + 105: uint16(58011), + 106: uint16(58012), + 107: uint16(58013), + 108: uint16(58014), + 109: uint16(58015), + 110: uint16(58016), + 111: uint16(58017), + 112: uint16(58018), + 113: uint16(58019), + 114: uint16(58020), + 115: uint16(58021), + 116: uint16(58022), + 117: uint16(58023), + 118: uint16(58024), + 119: uint16(58025), + 120: uint16(58026), + 121: uint16(58027), + 122: uint16(58028), + 123: uint16(58029), + 124: uint16(58030), + 125: uint16(58031), + 126: uint16(58032), + 127: uint16(58033), + 128: uint16(58034), + 129: uint16(58035), + 130: uint16(58036), + 131: uint16(58037), + 132: uint16(58038), + 133: uint16(58039), + 134: uint16(58040), + 135: uint16(58041), + 136: uint16(58042), + 137: uint16(58043), + 138: uint16(58044), + 139: uint16(58045), + 140: uint16(58046), + 141: uint16(58047), + 142: uint16(58048), + 143: uint16(58049), + 144: uint16(58050), + 145: uint16(58051), + 146: uint16(58052), + 147: uint16(58053), + 148: uint16(58054), + 149: uint16(58055), + 150: uint16(58056), + 151: uint16(58057), + 152: uint16(58058), + 153: uint16(58059), + 154: uint16(58060), + 155: uint16(58061), + 156: uint16(58062), + 157: uint16(58063), + 158: uint16(58064), + 159: uint16(58065), + 160: uint16(58066), + 161: uint16(58067), + 162: uint16(58068), + 163: uint16(58069), + 164: uint16(58070), + 165: uint16(58071), + 166: uint16(58072), + 167: uint16(58073), + 168: uint16(58074), + 169: uint16(58075), + 170: uint16(58076), + 171: uint16(58077), + 172: uint16(58078), + 173: uint16(58079), + 174: uint16(58080), + 175: uint16(58081), + 176: uint16(58082), + 177: uint16(58083), + 178: uint16(58084), + 179: uint16(58085), + 180: uint16(58086), + 181: uint16(58087), + 182: uint16(58088), + 183: uint16(58089), + 184: uint16(58090), + 185: uint16(58091), + 186: uint16(58092), + 187: uint16(58093), + 188: uint16(58094), + 189: uint16(58095), + }, + 121: { + 0: uint16(40355), + 1: uint16(40356), + 2: uint16(40357), + 3: uint16(40358), + 4: uint16(40359), + 5: uint16(40360), + 6: uint16(40361), + 7: uint16(40362), + 8: uint16(40363), + 9: uint16(40364), + 10: uint16(40365), + 11: uint16(40366), + 12: uint16(40367), + 13: uint16(40368), + 14: uint16(40369), + 15: uint16(40370), + 16: uint16(40371), + 17: uint16(40372), + 18: uint16(40373), + 19: uint16(40374), + 20: uint16(40375), + 21: uint16(40376), + 22: uint16(40377), + 23: uint16(40378), + 24: uint16(40379), + 25: uint16(40380), + 26: uint16(40381), + 27: uint16(40382), + 28: uint16(40383), + 29: uint16(40384), + 30: uint16(40385), + 31: uint16(40386), + 32: uint16(40387), + 33: uint16(40388), + 34: uint16(40389), + 35: uint16(40390), + 36: uint16(40391), + 37: uint16(40392), + 38: uint16(40393), + 39: uint16(40394), + 40: uint16(40395), + 41: uint16(40396), + 42: uint16(40397), + 43: uint16(40398), + 44: uint16(40399), + 45: uint16(40400), + 46: uint16(40401), + 47: uint16(40402), + 48: uint16(40403), + 49: uint16(40404), + 50: uint16(40405), + 51: uint16(40406), + 52: uint16(40407), + 53: uint16(40408), + 54: uint16(40409), + 55: uint16(40410), + 56: uint16(40411), + 57: uint16(40412), + 58: uint16(40413), + 59: uint16(40414), + 60: uint16(40415), + 61: uint16(40416), + 62: uint16(40417), + 63: uint16(40418), + 64: uint16(40419), + 65: uint16(40420), + 66: uint16(40421), + 67: uint16(40422), + 68: uint16(40423), + 69: uint16(40424), + 70: uint16(40425), + 71: uint16(40426), + 72: uint16(40427), + 73: uint16(40428), + 74: uint16(40429), + 75: uint16(40430), + 76: uint16(40431), + 77: uint16(40432), + 78: uint16(40433), + 79: uint16(40434), + 80: uint16(40435), + 81: uint16(40436), + 82: uint16(40437), + 83: uint16(40438), + 84: uint16(40439), + 85: uint16(40440), + 86: uint16(40441), + 87: uint16(40442), + 88: uint16(40443), + 89: uint16(40444), + 90: uint16(40445), + 91: uint16(40446), + 92: uint16(40447), + 93: uint16(40448), + 94: uint16(40449), + 95: uint16(40450), + 96: uint16(58096), + 97: uint16(58097), + 98: uint16(58098), + 99: uint16(58099), + 100: uint16(58100), + 101: uint16(58101), + 102: uint16(58102), + 103: uint16(58103), + 104: uint16(58104), + 105: uint16(58105), + 106: uint16(58106), + 107: uint16(58107), + 108: uint16(58108), + 109: uint16(58109), + 110: uint16(58110), + 111: uint16(58111), + 112: uint16(58112), + 113: uint16(58113), + 114: uint16(58114), + 115: uint16(58115), + 116: uint16(58116), + 117: uint16(58117), + 118: uint16(58118), + 119: uint16(58119), + 120: uint16(58120), + 121: uint16(58121), + 122: uint16(58122), + 123: uint16(58123), + 124: uint16(58124), + 125: uint16(58125), + 126: uint16(58126), + 127: uint16(58127), + 128: uint16(58128), + 129: uint16(58129), + 130: uint16(58130), + 131: uint16(58131), + 132: uint16(58132), + 133: uint16(58133), + 134: uint16(58134), + 135: uint16(58135), + 136: uint16(58136), + 137: uint16(58137), + 138: uint16(58138), + 139: uint16(58139), + 140: uint16(58140), + 141: uint16(58141), + 142: uint16(58142), + 143: uint16(58143), + 144: uint16(58144), + 145: uint16(58145), + 146: uint16(58146), + 147: uint16(58147), + 148: uint16(58148), + 149: uint16(58149), + 150: uint16(58150), + 151: uint16(58151), + 152: uint16(58152), + 153: uint16(58153), + 154: uint16(58154), + 155: uint16(58155), + 156: uint16(58156), + 157: uint16(58157), + 158: uint16(58158), + 159: uint16(58159), + 160: uint16(58160), + 161: uint16(58161), + 162: uint16(58162), + 163: uint16(58163), + 164: uint16(58164), + 165: uint16(58165), + 166: uint16(58166), + 167: uint16(58167), + 168: uint16(58168), + 169: uint16(58169), + 170: uint16(58170), + 171: uint16(58171), + 172: uint16(58172), + 173: uint16(58173), + 174: uint16(58174), + 175: uint16(58175), + 176: uint16(58176), + 177: uint16(58177), + 178: uint16(58178), + 179: uint16(58179), + 180: uint16(58180), + 181: uint16(58181), + 182: uint16(58182), + 183: uint16(58183), + 184: uint16(58184), + 185: uint16(58185), + 186: uint16(58186), + 187: uint16(58187), + 188: uint16(58188), + 189: uint16(58189), + }, + 122: { + 0: uint16(40451), + 1: uint16(40452), + 2: uint16(40453), + 3: uint16(40454), + 4: uint16(40455), + 5: uint16(40456), + 6: uint16(40457), + 7: uint16(40458), + 8: uint16(40459), + 9: uint16(40460), + 10: uint16(40461), + 11: uint16(40462), + 12: uint16(40463), + 13: uint16(40464), + 14: uint16(40465), + 15: uint16(40466), + 16: uint16(40467), + 17: uint16(40468), + 18: uint16(40469), + 19: uint16(40470), + 20: uint16(40471), + 21: uint16(40472), + 22: uint16(40473), + 23: uint16(40474), + 24: uint16(40475), + 25: uint16(40476), + 26: uint16(40477), + 27: uint16(40478), + 28: uint16(40484), + 29: uint16(40487), + 30: uint16(40494), + 31: uint16(40496), + 32: uint16(40500), + 33: uint16(40507), + 34: uint16(40508), + 35: uint16(40512), + 36: uint16(40525), + 37: uint16(40528), + 38: uint16(40530), + 39: uint16(40531), + 40: uint16(40532), + 41: uint16(40534), + 42: uint16(40537), + 43: uint16(40541), + 44: uint16(40543), + 45: uint16(40544), + 46: uint16(40545), + 47: uint16(40546), + 48: uint16(40549), + 49: uint16(40558), + 50: uint16(40559), + 51: uint16(40562), + 52: uint16(40564), + 53: uint16(40565), + 54: uint16(40566), + 55: uint16(40567), + 56: uint16(40568), + 57: uint16(40569), + 58: uint16(40570), + 59: uint16(40571), + 60: uint16(40572), + 61: uint16(40573), + 62: uint16(40576), + 63: uint16(40577), + 64: uint16(40579), + 65: uint16(40580), + 66: uint16(40581), + 67: uint16(40582), + 68: uint16(40585), + 69: uint16(40586), + 70: uint16(40588), + 71: uint16(40589), + 72: uint16(40590), + 73: uint16(40591), + 74: uint16(40592), + 75: uint16(40593), + 76: uint16(40596), + 77: uint16(40597), + 78: uint16(40598), + 79: uint16(40599), + 80: uint16(40600), + 81: uint16(40601), + 82: uint16(40602), + 83: uint16(40603), + 84: uint16(40604), + 85: uint16(40606), + 86: uint16(40608), + 87: uint16(40609), + 88: uint16(40610), + 89: uint16(40611), + 90: uint16(40612), + 91: uint16(40613), + 92: uint16(40615), + 93: uint16(40616), + 94: uint16(40617), + 95: uint16(40618), + 96: uint16(58190), + 97: uint16(58191), + 98: uint16(58192), + 99: uint16(58193), + 100: uint16(58194), + 101: uint16(58195), + 102: uint16(58196), + 103: uint16(58197), + 104: uint16(58198), + 105: uint16(58199), + 106: uint16(58200), + 107: uint16(58201), + 108: uint16(58202), + 109: uint16(58203), + 110: uint16(58204), + 111: uint16(58205), + 112: uint16(58206), + 113: uint16(58207), + 114: uint16(58208), + 115: uint16(58209), + 116: uint16(58210), + 117: uint16(58211), + 118: uint16(58212), + 119: uint16(58213), + 120: uint16(58214), + 121: uint16(58215), + 122: uint16(58216), + 123: uint16(58217), + 124: uint16(58218), + 125: uint16(58219), + 126: uint16(58220), + 127: uint16(58221), + 128: uint16(58222), + 129: uint16(58223), + 130: uint16(58224), + 131: uint16(58225), + 132: uint16(58226), + 133: uint16(58227), + 134: uint16(58228), + 135: uint16(58229), + 136: uint16(58230), + 137: uint16(58231), + 138: uint16(58232), + 139: uint16(58233), + 140: uint16(58234), + 141: uint16(58235), + 142: uint16(58236), + 143: uint16(58237), + 144: uint16(58238), + 145: uint16(58239), + 146: uint16(58240), + 147: uint16(58241), + 148: uint16(58242), + 149: uint16(58243), + 150: uint16(58244), + 151: uint16(58245), + 152: uint16(58246), + 153: uint16(58247), + 154: uint16(58248), + 155: uint16(58249), + 156: uint16(58250), + 157: uint16(58251), + 158: uint16(58252), + 159: uint16(58253), + 160: uint16(58254), + 161: uint16(58255), + 162: uint16(58256), + 163: uint16(58257), + 164: uint16(58258), + 165: uint16(58259), + 166: uint16(58260), + 167: uint16(58261), + 168: uint16(58262), + 169: uint16(58263), + 170: uint16(58264), + 171: uint16(58265), + 172: uint16(58266), + 173: uint16(58267), + 174: uint16(58268), + 175: uint16(58269), + 176: uint16(58270), + 177: uint16(58271), + 178: uint16(58272), + 179: uint16(58273), + 180: uint16(58274), + 181: uint16(58275), + 182: uint16(58276), + 183: uint16(58277), + 184: uint16(58278), + 185: uint16(58279), + 186: uint16(58280), + 187: uint16(58281), + 188: uint16(58282), + 189: uint16(58283), + }, + 123: { + 0: uint16(40619), + 1: uint16(40620), + 2: uint16(40621), + 3: uint16(40622), + 4: uint16(40623), + 5: uint16(40624), + 6: uint16(40625), + 7: uint16(40626), + 8: uint16(40627), + 9: uint16(40629), + 10: uint16(40630), + 11: uint16(40631), + 12: uint16(40633), + 13: uint16(40634), + 14: uint16(40636), + 15: uint16(40639), + 16: uint16(40640), + 17: uint16(40641), + 18: uint16(40642), + 19: uint16(40643), + 20: uint16(40645), + 21: uint16(40646), + 22: uint16(40647), + 23: uint16(40648), + 24: uint16(40650), + 25: uint16(40651), + 26: uint16(40652), + 27: uint16(40656), + 28: uint16(40658), + 29: uint16(40659), + 30: uint16(40661), + 31: uint16(40662), + 32: uint16(40663), + 33: uint16(40665), + 34: uint16(40666), + 35: uint16(40670), + 36: uint16(40673), + 37: uint16(40675), + 38: uint16(40676), + 39: uint16(40678), + 40: uint16(40680), + 41: uint16(40683), + 42: uint16(40684), + 43: uint16(40685), + 44: uint16(40686), + 45: uint16(40688), + 46: uint16(40689), + 47: uint16(40690), + 48: uint16(40691), + 49: uint16(40692), + 50: uint16(40693), + 51: uint16(40694), + 52: uint16(40695), + 53: uint16(40696), + 54: uint16(40698), + 55: uint16(40701), + 56: uint16(40703), + 57: uint16(40704), + 58: uint16(40705), + 59: uint16(40706), + 60: uint16(40707), + 61: uint16(40708), + 62: uint16(40709), + 63: uint16(40710), + 64: uint16(40711), + 65: uint16(40712), + 66: uint16(40713), + 67: uint16(40714), + 68: uint16(40716), + 69: uint16(40719), + 70: uint16(40721), + 71: uint16(40722), + 72: uint16(40724), + 73: uint16(40725), + 74: uint16(40726), + 75: uint16(40728), + 76: uint16(40730), + 77: uint16(40731), + 78: uint16(40732), + 79: uint16(40733), + 80: uint16(40734), + 81: uint16(40735), + 82: uint16(40737), + 83: uint16(40739), + 84: uint16(40740), + 85: uint16(40741), + 86: uint16(40742), + 87: uint16(40743), + 88: uint16(40744), + 89: uint16(40745), + 90: uint16(40746), + 91: uint16(40747), + 92: uint16(40749), + 93: uint16(40750), + 94: uint16(40752), + 95: uint16(40753), + 96: uint16(58284), + 97: uint16(58285), + 98: uint16(58286), + 99: uint16(58287), + 100: uint16(58288), + 101: uint16(58289), + 102: uint16(58290), + 103: uint16(58291), + 104: uint16(58292), + 105: uint16(58293), + 106: uint16(58294), + 107: uint16(58295), + 108: uint16(58296), + 109: uint16(58297), + 110: uint16(58298), + 111: uint16(58299), + 112: uint16(58300), + 113: uint16(58301), + 114: uint16(58302), + 115: uint16(58303), + 116: uint16(58304), + 117: uint16(58305), + 118: uint16(58306), + 119: uint16(58307), + 120: uint16(58308), + 121: uint16(58309), + 122: uint16(58310), + 123: uint16(58311), + 124: uint16(58312), + 125: uint16(58313), + 126: uint16(58314), + 127: uint16(58315), + 128: uint16(58316), + 129: uint16(58317), + 130: uint16(58318), + 131: uint16(58319), + 132: uint16(58320), + 133: uint16(58321), + 134: uint16(58322), + 135: uint16(58323), + 136: uint16(58324), + 137: uint16(58325), + 138: uint16(58326), + 139: uint16(58327), + 140: uint16(58328), + 141: uint16(58329), + 142: uint16(58330), + 143: uint16(58331), + 144: uint16(58332), + 145: uint16(58333), + 146: uint16(58334), + 147: uint16(58335), + 148: uint16(58336), + 149: uint16(58337), + 150: uint16(58338), + 151: uint16(58339), + 152: uint16(58340), + 153: uint16(58341), + 154: uint16(58342), + 155: uint16(58343), + 156: uint16(58344), + 157: uint16(58345), + 158: uint16(58346), + 159: uint16(58347), + 160: uint16(58348), + 161: uint16(58349), + 162: uint16(58350), + 163: uint16(58351), + 164: uint16(58352), + 165: uint16(58353), + 166: uint16(58354), + 167: uint16(58355), + 168: uint16(58356), + 169: uint16(58357), + 170: uint16(58358), + 171: uint16(58359), + 172: uint16(58360), + 173: uint16(58361), + 174: uint16(58362), + 175: uint16(58363), + 176: uint16(58364), + 177: uint16(58365), + 178: uint16(58366), + 179: uint16(58367), + 180: uint16(58368), + 181: uint16(58369), + 182: uint16(58370), + 183: uint16(58371), + 184: uint16(58372), + 185: uint16(58373), + 186: uint16(58374), + 187: uint16(58375), + 188: uint16(58376), + 189: uint16(58377), + }, + 124: { + 0: uint16(40754), + 1: uint16(40755), + 2: uint16(40756), + 3: uint16(40757), + 4: uint16(40758), + 5: uint16(40760), + 6: uint16(40762), + 7: uint16(40764), + 8: uint16(40767), + 9: uint16(40768), + 10: uint16(40769), + 11: uint16(40770), + 12: uint16(40771), + 13: uint16(40773), + 14: uint16(40774), + 15: uint16(40775), + 16: uint16(40776), + 17: uint16(40777), + 18: uint16(40778), + 19: uint16(40779), + 20: uint16(40780), + 21: uint16(40781), + 22: uint16(40782), + 23: uint16(40783), + 24: uint16(40786), + 25: uint16(40787), + 26: uint16(40788), + 27: uint16(40789), + 28: uint16(40790), + 29: uint16(40791), + 30: uint16(40792), + 31: uint16(40793), + 32: uint16(40794), + 33: uint16(40795), + 34: uint16(40796), + 35: uint16(40797), + 36: uint16(40798), + 37: uint16(40799), + 38: uint16(40800), + 39: uint16(40801), + 40: uint16(40802), + 41: uint16(40803), + 42: uint16(40804), + 43: uint16(40805), + 44: uint16(40806), + 45: uint16(40807), + 46: uint16(40808), + 47: uint16(40809), + 48: uint16(40810), + 49: uint16(40811), + 50: uint16(40812), + 51: uint16(40813), + 52: uint16(40814), + 53: uint16(40815), + 54: uint16(40816), + 55: uint16(40817), + 56: uint16(40818), + 57: uint16(40819), + 58: uint16(40820), + 59: uint16(40821), + 60: uint16(40822), + 61: uint16(40823), + 62: uint16(40824), + 63: uint16(40825), + 64: uint16(40826), + 65: uint16(40827), + 66: uint16(40828), + 67: uint16(40829), + 68: uint16(40830), + 69: uint16(40833), + 70: uint16(40834), + 71: uint16(40845), + 72: uint16(40846), + 73: uint16(40847), + 74: uint16(40848), + 75: uint16(40849), + 76: uint16(40850), + 77: uint16(40851), + 78: uint16(40852), + 79: uint16(40853), + 80: uint16(40854), + 81: uint16(40855), + 82: uint16(40856), + 83: uint16(40860), + 84: uint16(40861), + 85: uint16(40862), + 86: uint16(40865), + 87: uint16(40866), + 88: uint16(40867), + 89: uint16(40868), + 90: uint16(40869), + 91: uint16(63788), + 92: uint16(63865), + 93: uint16(63893), + 94: uint16(63975), + 95: uint16(63985), + 96: uint16(58378), + 97: uint16(58379), + 98: uint16(58380), + 99: uint16(58381), + 100: uint16(58382), + 101: uint16(58383), + 102: uint16(58384), + 103: uint16(58385), + 104: uint16(58386), + 105: uint16(58387), + 106: uint16(58388), + 107: uint16(58389), + 108: uint16(58390), + 109: uint16(58391), + 110: uint16(58392), + 111: uint16(58393), + 112: uint16(58394), + 113: uint16(58395), + 114: uint16(58396), + 115: uint16(58397), + 116: uint16(58398), + 117: uint16(58399), + 118: uint16(58400), + 119: uint16(58401), + 120: uint16(58402), + 121: uint16(58403), + 122: uint16(58404), + 123: uint16(58405), + 124: uint16(58406), + 125: uint16(58407), + 126: uint16(58408), + 127: uint16(58409), + 128: uint16(58410), + 129: uint16(58411), + 130: uint16(58412), + 131: uint16(58413), + 132: uint16(58414), + 133: uint16(58415), + 134: uint16(58416), + 135: uint16(58417), + 136: uint16(58418), + 137: uint16(58419), + 138: uint16(58420), + 139: uint16(58421), + 140: uint16(58422), + 141: uint16(58423), + 142: uint16(58424), + 143: uint16(58425), + 144: uint16(58426), + 145: uint16(58427), + 146: uint16(58428), + 147: uint16(58429), + 148: uint16(58430), + 149: uint16(58431), + 150: uint16(58432), + 151: uint16(58433), + 152: uint16(58434), + 153: uint16(58435), + 154: uint16(58436), + 155: uint16(58437), + 156: uint16(58438), + 157: uint16(58439), + 158: uint16(58440), + 159: uint16(58441), + 160: uint16(58442), + 161: uint16(58443), + 162: uint16(58444), + 163: uint16(58445), + 164: uint16(58446), + 165: uint16(58447), + 166: uint16(58448), + 167: uint16(58449), + 168: uint16(58450), + 169: uint16(58451), + 170: uint16(58452), + 171: uint16(58453), + 172: uint16(58454), + 173: uint16(58455), + 174: uint16(58456), + 175: uint16(58457), + 176: uint16(58458), + 177: uint16(58459), + 178: uint16(58460), + 179: uint16(58461), + 180: uint16(58462), + 181: uint16(58463), + 182: uint16(58464), + 183: uint16(58465), + 184: uint16(58466), + 185: uint16(58467), + 186: uint16(58468), + 187: uint16(58469), + 188: uint16(58470), + 189: uint16(58471), + }, + 125: { + 0: uint16(64012), + 1: uint16(64013), + 2: uint16(64014), + 3: uint16(64015), + 4: uint16(64017), + 5: uint16(64019), + 6: uint16(64020), + 7: uint16(64024), + 8: uint16(64031), + 9: uint16(64032), + 10: uint16(64033), + 11: uint16(64035), + 12: uint16(64036), + 13: uint16(64039), + 14: uint16(64040), + 15: uint16(64041), + 16: uint16(11905), + 17: uint16(59414), + 18: uint16(59415), + 19: uint16(59416), + 20: uint16(11908), + 21: uint16(13427), + 22: uint16(13383), + 23: uint16(11912), + 24: uint16(11915), + 25: uint16(59422), + 26: uint16(13726), + 27: uint16(13850), + 28: uint16(13838), + 29: uint16(11916), + 30: uint16(11927), + 31: uint16(14702), + 32: uint16(14616), + 33: uint16(59430), + 34: uint16(14799), + 35: uint16(14815), + 36: uint16(14963), + 37: uint16(14800), + 38: uint16(59435), + 39: uint16(59436), + 40: uint16(15182), + 41: uint16(15470), + 42: uint16(15584), + 43: uint16(11943), + 44: uint16(59441), + 45: uint16(59442), + 46: uint16(11946), + 47: uint16(16470), + 48: uint16(16735), + 49: uint16(11950), + 50: uint16(17207), + 51: uint16(11955), + 52: uint16(11958), + 53: uint16(11959), + 54: uint16(59451), + 55: uint16(17329), + 56: uint16(17324), + 57: uint16(11963), + 58: uint16(17373), + 59: uint16(17622), + 60: uint16(18017), + 61: uint16(17996), + 62: uint16(59459), + 63: uint16(18211), + 64: uint16(18217), + 65: uint16(18300), + 66: uint16(18317), + 67: uint16(11978), + 68: uint16(18759), + 69: uint16(18810), + 70: uint16(18813), + 71: uint16(18818), + 72: uint16(18819), + 73: uint16(18821), + 74: uint16(18822), + 75: uint16(18847), + 76: uint16(18843), + 77: uint16(18871), + 78: uint16(18870), + 79: uint16(59476), + 80: uint16(59477), + 81: uint16(19619), + 82: uint16(19615), + 83: uint16(19616), + 84: uint16(19617), + 85: uint16(19575), + 86: uint16(19618), + 87: uint16(19731), + 88: uint16(19732), + 89: uint16(19733), + 90: uint16(19734), + 91: uint16(19735), + 92: uint16(19736), + 93: uint16(19737), + 94: uint16(19886), + 95: uint16(59492), + 96: uint16(58472), + 97: uint16(58473), + 98: uint16(58474), + 99: uint16(58475), + 100: uint16(58476), + 101: uint16(58477), + 102: uint16(58478), + 103: uint16(58479), + 104: uint16(58480), + 105: uint16(58481), + 106: uint16(58482), + 107: uint16(58483), + 108: uint16(58484), + 109: uint16(58485), + 110: uint16(58486), + 111: uint16(58487), + 112: uint16(58488), + 113: uint16(58489), + 114: uint16(58490), + 115: uint16(58491), + 116: uint16(58492), + 117: uint16(58493), + 118: uint16(58494), + 119: uint16(58495), + 120: uint16(58496), + 121: uint16(58497), + 122: uint16(58498), + 123: uint16(58499), + 124: uint16(58500), + 125: uint16(58501), + 126: uint16(58502), + 127: uint16(58503), + 128: uint16(58504), + 129: uint16(58505), + 130: uint16(58506), + 131: uint16(58507), + 132: uint16(58508), + 133: uint16(58509), + 134: uint16(58510), + 135: uint16(58511), + 136: uint16(58512), + 137: uint16(58513), + 138: uint16(58514), + 139: uint16(58515), + 140: uint16(58516), + 141: uint16(58517), + 142: uint16(58518), + 143: uint16(58519), + 144: uint16(58520), + 145: uint16(58521), + 146: uint16(58522), + 147: uint16(58523), + 148: uint16(58524), + 149: uint16(58525), + 150: uint16(58526), + 151: uint16(58527), + 152: uint16(58528), + 153: uint16(58529), + 154: uint16(58530), + 155: uint16(58531), + 156: uint16(58532), + 157: uint16(58533), + 158: uint16(58534), + 159: uint16(58535), + 160: uint16(58536), + 161: uint16(58537), + 162: uint16(58538), + 163: uint16(58539), + 164: uint16(58540), + 165: uint16(58541), + 166: uint16(58542), + 167: uint16(58543), + 168: uint16(58544), + 169: uint16(58545), + 170: uint16(58546), + 171: uint16(58547), + 172: uint16(58548), + 173: uint16(58549), + 174: uint16(58550), + 175: uint16(58551), + 176: uint16(58552), + 177: uint16(58553), + 178: uint16(58554), + 179: uint16(58555), + 180: uint16(58556), + 181: uint16(58557), + 182: uint16(58558), + 183: uint16(58559), + 184: uint16(58560), + 185: uint16(58561), + 186: uint16(58562), + 187: uint16(58563), + 188: uint16(58564), + 189: uint16(58565), + }, +} + +var _big5 = [89][157]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(65292), + 2: uint16(12289), + 3: uint16(12290), + 4: uint16(65294), + 5: uint16(8231), + 6: uint16(65307), + 7: uint16(65306), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(65072), + 11: uint16(8230), + 12: uint16(8229), + 13: uint16(65104), + 14: uint16(65105), + 15: uint16(65106), + 16: uint16(183), + 17: uint16(65108), + 18: uint16(65109), + 19: uint16(65110), + 20: uint16(65111), + 21: uint16(65372), + 22: uint16(8211), + 23: uint16(65073), + 24: uint16(8212), + 25: uint16(65075), + 26: uint16(9588), + 27: uint16(65076), + 28: uint16(65103), + 29: uint16(65288), + 30: uint16(65289), + 31: uint16(65077), + 32: uint16(65078), + 33: uint16(65371), + 34: uint16(65373), + 35: uint16(65079), + 36: uint16(65080), + 37: uint16(12308), + 38: uint16(12309), + 39: uint16(65081), + 40: uint16(65082), + 41: uint16(12304), + 42: uint16(12305), + 43: uint16(65083), + 44: uint16(65084), + 45: uint16(12298), + 46: uint16(12299), + 47: uint16(65085), + 48: uint16(65086), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(65087), + 52: uint16(65088), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(65089), + 56: uint16(65090), + 57: uint16(12302), + 58: uint16(12303), + 59: uint16(65091), + 60: uint16(65092), + 61: uint16(65113), + 62: uint16(65114), + 63: uint16(65115), + 64: uint16(65116), + 65: uint16(65117), + 66: uint16(65118), + 67: uint16(8216), + 68: uint16(8217), + 69: uint16(8220), + 70: uint16(8221), + 71: uint16(12317), + 72: uint16(12318), + 73: uint16(8245), + 74: uint16(8242), + 75: uint16(65283), + 76: uint16(65286), + 77: uint16(65290), + 78: uint16(8251), + 79: uint16(167), + 80: uint16(12291), + 81: uint16(9675), + 82: uint16(9679), + 83: uint16(9651), + 84: uint16(9650), + 85: uint16(9678), + 86: uint16(9734), + 87: uint16(9733), + 88: uint16(9671), + 89: uint16(9670), + 90: uint16(9633), + 91: uint16(9632), + 92: uint16(9661), + 93: uint16(9660), + 94: uint16(12963), + 95: uint16(8453), + 96: uint16(175), + 97: uint16(65507), + 98: uint16(65343), + 99: uint16(717), + 100: uint16(65097), + 101: uint16(65098), + 102: uint16(65101), + 103: uint16(65102), + 104: uint16(65099), + 105: uint16(65100), + 106: uint16(65119), + 107: uint16(65120), + 108: uint16(65121), + 109: uint16(65291), + 110: uint16(65293), + 111: uint16(215), + 112: uint16(247), + 113: uint16(177), + 114: uint16(8730), + 115: uint16(65308), + 116: uint16(65310), + 117: uint16(65309), + 118: uint16(8806), + 119: uint16(8807), + 120: uint16(8800), + 121: uint16(8734), + 122: uint16(8786), + 123: uint16(8801), + 124: uint16(65122), + 125: uint16(65123), + 126: uint16(65124), + 127: uint16(65125), + 128: uint16(65126), + 129: uint16(65374), + 130: uint16(8745), + 131: uint16(8746), + 132: uint16(8869), + 133: uint16(8736), + 134: uint16(8735), + 135: uint16(8895), + 136: uint16(13266), + 137: uint16(13265), + 138: uint16(8747), + 139: uint16(8750), + 140: uint16(8757), + 141: uint16(8756), + 142: uint16(9792), + 143: uint16(9794), + 144: uint16(8853), + 145: uint16(8857), + 146: uint16(8593), + 147: uint16(8595), + 148: uint16(8592), + 149: uint16(8594), + 150: uint16(8598), + 151: uint16(8599), + 152: uint16(8601), + 153: uint16(8600), + 154: uint16(8741), + 155: uint16(8739), + 156: uint16(65295), + }, + 1: { + 0: uint16(65340), + 1: uint16(8725), + 2: uint16(65128), + 3: uint16(65284), + 4: uint16(65509), + 5: uint16(12306), + 6: uint16(65504), + 7: uint16(65505), + 8: uint16(65285), + 9: uint16(65312), + 10: uint16(8451), + 11: uint16(8457), + 12: uint16(65129), + 13: uint16(65130), + 14: uint16(65131), + 15: uint16(13269), + 16: uint16(13212), + 17: uint16(13213), + 18: uint16(13214), + 19: uint16(13262), + 20: uint16(13217), + 21: uint16(13198), + 22: uint16(13199), + 23: uint16(13252), + 24: uint16(176), + 25: uint16(20825), + 26: uint16(20827), + 27: uint16(20830), + 28: uint16(20829), + 29: uint16(20833), + 30: uint16(20835), + 31: uint16(21991), + 32: uint16(29929), + 33: uint16(31950), + 34: uint16(9601), + 35: uint16(9602), + 36: uint16(9603), + 37: uint16(9604), + 38: uint16(9605), + 39: uint16(9606), + 40: uint16(9607), + 41: uint16(9608), + 42: uint16(9615), + 43: uint16(9614), + 44: uint16(9613), + 45: uint16(9612), + 46: uint16(9611), + 47: uint16(9610), + 48: uint16(9609), + 49: uint16(9532), + 50: uint16(9524), + 51: uint16(9516), + 52: uint16(9508), + 53: uint16(9500), + 54: uint16(9620), + 55: uint16(9472), + 56: uint16(9474), + 57: uint16(9621), + 58: uint16(9484), + 59: uint16(9488), + 60: uint16(9492), + 61: uint16(9496), + 62: uint16(9581), + 63: uint16(9582), + 64: uint16(9584), + 65: uint16(9583), + 66: uint16(9552), + 67: uint16(9566), + 68: uint16(9578), + 69: uint16(9569), + 70: uint16(9698), + 71: uint16(9699), + 72: uint16(9701), + 73: uint16(9700), + 74: uint16(9585), + 75: uint16(9586), + 76: uint16(9587), + 77: uint16(65296), + 78: uint16(65297), + 79: uint16(65298), + 80: uint16(65299), + 81: uint16(65300), + 82: uint16(65301), + 83: uint16(65302), + 84: uint16(65303), + 85: uint16(65304), + 86: uint16(65305), + 87: uint16(8544), + 88: uint16(8545), + 89: uint16(8546), + 90: uint16(8547), + 91: uint16(8548), + 92: uint16(8549), + 93: uint16(8550), + 94: uint16(8551), + 95: uint16(8552), + 96: uint16(8553), + 97: uint16(12321), + 98: uint16(12322), + 99: uint16(12323), + 100: uint16(12324), + 101: uint16(12325), + 102: uint16(12326), + 103: uint16(12327), + 104: uint16(12328), + 105: uint16(12329), + 106: uint16(21313), + 107: uint16(21316), + 108: uint16(21317), + 109: uint16(65313), + 110: uint16(65314), + 111: uint16(65315), + 112: uint16(65316), + 113: uint16(65317), + 114: uint16(65318), + 115: uint16(65319), + 116: uint16(65320), + 117: uint16(65321), + 118: uint16(65322), + 119: uint16(65323), + 120: uint16(65324), + 121: uint16(65325), + 122: uint16(65326), + 123: uint16(65327), + 124: uint16(65328), + 125: uint16(65329), + 126: uint16(65330), + 127: uint16(65331), + 128: uint16(65332), + 129: uint16(65333), + 130: uint16(65334), + 131: uint16(65335), + 132: uint16(65336), + 133: uint16(65337), + 134: uint16(65338), + 135: uint16(65345), + 136: uint16(65346), + 137: uint16(65347), + 138: uint16(65348), + 139: uint16(65349), + 140: uint16(65350), + 141: uint16(65351), + 142: uint16(65352), + 143: uint16(65353), + 144: uint16(65354), + 145: uint16(65355), + 146: uint16(65356), + 147: uint16(65357), + 148: uint16(65358), + 149: uint16(65359), + 150: uint16(65360), + 151: uint16(65361), + 152: uint16(65362), + 153: uint16(65363), + 154: uint16(65364), + 155: uint16(65365), + 156: uint16(65366), + }, + 2: { + 0: uint16(65367), + 1: uint16(65368), + 2: uint16(65369), + 3: uint16(65370), + 4: uint16(913), + 5: uint16(914), + 6: uint16(915), + 7: uint16(916), + 8: uint16(917), + 9: uint16(918), + 10: uint16(919), + 11: uint16(920), + 12: uint16(921), + 13: uint16(922), + 14: uint16(923), + 15: uint16(924), + 16: uint16(925), + 17: uint16(926), + 18: uint16(927), + 19: uint16(928), + 20: uint16(929), + 21: uint16(931), + 22: uint16(932), + 23: uint16(933), + 24: uint16(934), + 25: uint16(935), + 26: uint16(936), + 27: uint16(937), + 28: uint16(945), + 29: uint16(946), + 30: uint16(947), + 31: uint16(948), + 32: uint16(949), + 33: uint16(950), + 34: uint16(951), + 35: uint16(952), + 36: uint16(953), + 37: uint16(954), + 38: uint16(955), + 39: uint16(956), + 40: uint16(957), + 41: uint16(958), + 42: uint16(959), + 43: uint16(960), + 44: uint16(961), + 45: uint16(963), + 46: uint16(964), + 47: uint16(965), + 48: uint16(966), + 49: uint16(967), + 50: uint16(968), + 51: uint16(969), + 52: uint16(12549), + 53: uint16(12550), + 54: uint16(12551), + 55: uint16(12552), + 56: uint16(12553), + 57: uint16(12554), + 58: uint16(12555), + 59: uint16(12556), + 60: uint16(12557), + 61: uint16(12558), + 62: uint16(12559), + 63: uint16(12560), + 64: uint16(12561), + 65: uint16(12562), + 66: uint16(12563), + 67: uint16(12564), + 68: uint16(12565), + 69: uint16(12566), + 70: uint16(12567), + 71: uint16(12568), + 72: uint16(12569), + 73: uint16(12570), + 74: uint16(12571), + 75: uint16(12572), + 76: uint16(12573), + 77: uint16(12574), + 78: uint16(12575), + 79: uint16(12576), + 80: uint16(12577), + 81: uint16(12578), + 82: uint16(12579), + 83: uint16(12580), + 84: uint16(12581), + 85: uint16(12582), + 86: uint16(12583), + 87: uint16(12584), + 88: uint16(12585), + 89: uint16(729), + 90: uint16(713), + 91: uint16(714), + 92: uint16(711), + 93: uint16(715), + 94: uint16(9216), + 95: uint16(9217), + 96: uint16(9218), + 97: uint16(9219), + 98: uint16(9220), + 99: uint16(9221), + 100: uint16(9222), + 101: uint16(9223), + 102: uint16(9224), + 103: uint16(9225), + 104: uint16(9226), + 105: uint16(9227), + 106: uint16(9228), + 107: uint16(9229), + 108: uint16(9230), + 109: uint16(9231), + 110: uint16(9232), + 111: uint16(9233), + 112: uint16(9234), + 113: uint16(9235), + 114: uint16(9236), + 115: uint16(9237), + 116: uint16(9238), + 117: uint16(9239), + 118: uint16(9240), + 119: uint16(9241), + 120: uint16(9242), + 121: uint16(9243), + 122: uint16(9244), + 123: uint16(9245), + 124: uint16(9246), + 125: uint16(9247), + 126: uint16(9249), + 127: uint16(8364), + }, + 3: { + 0: uint16(19968), + 1: uint16(20057), + 2: uint16(19969), + 3: uint16(19971), + 4: uint16(20035), + 5: uint16(20061), + 6: uint16(20102), + 7: uint16(20108), + 8: uint16(20154), + 9: uint16(20799), + 10: uint16(20837), + 11: uint16(20843), + 12: uint16(20960), + 13: uint16(20992), + 14: uint16(20993), + 15: uint16(21147), + 16: uint16(21269), + 17: uint16(21313), + 18: uint16(21340), + 19: uint16(21448), + 20: uint16(19977), + 21: uint16(19979), + 22: uint16(19976), + 23: uint16(19978), + 24: uint16(20011), + 25: uint16(20024), + 26: uint16(20961), + 27: uint16(20037), + 28: uint16(20040), + 29: uint16(20063), + 30: uint16(20062), + 31: uint16(20110), + 32: uint16(20129), + 33: uint16(20800), + 34: uint16(20995), + 35: uint16(21242), + 36: uint16(21315), + 37: uint16(21449), + 38: uint16(21475), + 39: uint16(22303), + 40: uint16(22763), + 41: uint16(22805), + 42: uint16(22823), + 43: uint16(22899), + 44: uint16(23376), + 45: uint16(23377), + 46: uint16(23379), + 47: uint16(23544), + 48: uint16(23567), + 49: uint16(23586), + 50: uint16(23608), + 51: uint16(23665), + 52: uint16(24029), + 53: uint16(24037), + 54: uint16(24049), + 55: uint16(24050), + 56: uint16(24051), + 57: uint16(24062), + 58: uint16(24178), + 59: uint16(24318), + 60: uint16(24331), + 61: uint16(24339), + 62: uint16(25165), + 63: uint16(19985), + 64: uint16(19984), + 65: uint16(19981), + 66: uint16(20013), + 67: uint16(20016), + 68: uint16(20025), + 69: uint16(20043), + 70: uint16(23609), + 71: uint16(20104), + 72: uint16(20113), + 73: uint16(20117), + 74: uint16(20114), + 75: uint16(20116), + 76: uint16(20130), + 77: uint16(20161), + 78: uint16(20160), + 79: uint16(20163), + 80: uint16(20166), + 81: uint16(20167), + 82: uint16(20173), + 83: uint16(20170), + 84: uint16(20171), + 85: uint16(20164), + 86: uint16(20803), + 87: uint16(20801), + 88: uint16(20839), + 89: uint16(20845), + 90: uint16(20846), + 91: uint16(20844), + 92: uint16(20887), + 93: uint16(20982), + 94: uint16(20998), + 95: uint16(20999), + 96: uint16(21000), + 97: uint16(21243), + 98: uint16(21246), + 99: uint16(21247), + 100: uint16(21270), + 101: uint16(21305), + 102: uint16(21320), + 103: uint16(21319), + 104: uint16(21317), + 105: uint16(21342), + 106: uint16(21380), + 107: uint16(21451), + 108: uint16(21450), + 109: uint16(21453), + 110: uint16(22764), + 111: uint16(22825), + 112: uint16(22827), + 113: uint16(22826), + 114: uint16(22829), + 115: uint16(23380), + 116: uint16(23569), + 117: uint16(23588), + 118: uint16(23610), + 119: uint16(23663), + 120: uint16(24052), + 121: uint16(24187), + 122: uint16(24319), + 123: uint16(24340), + 124: uint16(24341), + 125: uint16(24515), + 126: uint16(25096), + 127: uint16(25142), + 128: uint16(25163), + 129: uint16(25166), + 130: uint16(25903), + 131: uint16(25991), + 132: uint16(26007), + 133: uint16(26020), + 134: uint16(26041), + 135: uint16(26085), + 136: uint16(26352), + 137: uint16(26376), + 138: uint16(26408), + 139: uint16(27424), + 140: uint16(27490), + 141: uint16(27513), + 142: uint16(27595), + 143: uint16(27604), + 144: uint16(27611), + 145: uint16(27663), + 146: uint16(27700), + 147: uint16(28779), + 148: uint16(29226), + 149: uint16(29238), + 150: uint16(29243), + 151: uint16(29255), + 152: uint16(29273), + 153: uint16(29275), + 154: uint16(29356), + 155: uint16(29579), + 156: uint16(19993), + }, + 4: { + 0: uint16(19990), + 1: uint16(19989), + 2: uint16(19988), + 3: uint16(19992), + 4: uint16(20027), + 5: uint16(20045), + 6: uint16(20047), + 7: uint16(20046), + 8: uint16(20197), + 9: uint16(20184), + 10: uint16(20180), + 11: uint16(20181), + 12: uint16(20182), + 13: uint16(20183), + 14: uint16(20195), + 15: uint16(20196), + 16: uint16(20185), + 17: uint16(20190), + 18: uint16(20805), + 19: uint16(20804), + 20: uint16(20873), + 21: uint16(20874), + 22: uint16(20908), + 23: uint16(20985), + 24: uint16(20986), + 25: uint16(20984), + 26: uint16(21002), + 27: uint16(21152), + 28: uint16(21151), + 29: uint16(21253), + 30: uint16(21254), + 31: uint16(21271), + 32: uint16(21277), + 33: uint16(20191), + 34: uint16(21322), + 35: uint16(21321), + 36: uint16(21345), + 37: uint16(21344), + 38: uint16(21359), + 39: uint16(21358), + 40: uint16(21435), + 41: uint16(21487), + 42: uint16(21476), + 43: uint16(21491), + 44: uint16(21484), + 45: uint16(21486), + 46: uint16(21481), + 47: uint16(21480), + 48: uint16(21500), + 49: uint16(21496), + 50: uint16(21493), + 51: uint16(21483), + 52: uint16(21478), + 53: uint16(21482), + 54: uint16(21490), + 55: uint16(21489), + 56: uint16(21488), + 57: uint16(21477), + 58: uint16(21485), + 59: uint16(21499), + 60: uint16(22235), + 61: uint16(22234), + 62: uint16(22806), + 63: uint16(22830), + 64: uint16(22833), + 65: uint16(22900), + 66: uint16(22902), + 67: uint16(23381), + 68: uint16(23427), + 69: uint16(23612), + 70: uint16(24040), + 71: uint16(24039), + 72: uint16(24038), + 73: uint16(24066), + 74: uint16(24067), + 75: uint16(24179), + 76: uint16(24188), + 77: uint16(24321), + 78: uint16(24344), + 79: uint16(24343), + 80: uint16(24517), + 81: uint16(25098), + 82: uint16(25171), + 83: uint16(25172), + 84: uint16(25170), + 85: uint16(25169), + 86: uint16(26021), + 87: uint16(26086), + 88: uint16(26414), + 89: uint16(26412), + 90: uint16(26410), + 91: uint16(26411), + 92: uint16(26413), + 93: uint16(27491), + 94: uint16(27597), + 95: uint16(27665), + 96: uint16(27664), + 97: uint16(27704), + 98: uint16(27713), + 99: uint16(27712), + 100: uint16(27710), + 101: uint16(29359), + 102: uint16(29572), + 103: uint16(29577), + 104: uint16(29916), + 105: uint16(29926), + 106: uint16(29976), + 107: uint16(29983), + 108: uint16(29992), + 109: uint16(29993), + 110: uint16(30000), + 111: uint16(30001), + 112: uint16(30002), + 113: uint16(30003), + 114: uint16(30091), + 115: uint16(30333), + 116: uint16(30382), + 117: uint16(30399), + 118: uint16(30446), + 119: uint16(30683), + 120: uint16(30690), + 121: uint16(30707), + 122: uint16(31034), + 123: uint16(31166), + 124: uint16(31348), + 125: uint16(31435), + 126: uint16(19998), + 127: uint16(19999), + 128: uint16(20050), + 129: uint16(20051), + 130: uint16(20073), + 131: uint16(20121), + 132: uint16(20132), + 133: uint16(20134), + 134: uint16(20133), + 135: uint16(20223), + 136: uint16(20233), + 137: uint16(20249), + 138: uint16(20234), + 139: uint16(20245), + 140: uint16(20237), + 141: uint16(20240), + 142: uint16(20241), + 143: uint16(20239), + 144: uint16(20210), + 145: uint16(20214), + 146: uint16(20219), + 147: uint16(20208), + 148: uint16(20211), + 149: uint16(20221), + 150: uint16(20225), + 151: uint16(20235), + 152: uint16(20809), + 153: uint16(20807), + 154: uint16(20806), + 155: uint16(20808), + 156: uint16(20840), + }, + 5: { + 0: uint16(20849), + 1: uint16(20877), + 2: uint16(20912), + 3: uint16(21015), + 4: uint16(21009), + 5: uint16(21010), + 6: uint16(21006), + 7: uint16(21014), + 8: uint16(21155), + 9: uint16(21256), + 10: uint16(21281), + 11: uint16(21280), + 12: uint16(21360), + 13: uint16(21361), + 14: uint16(21513), + 15: uint16(21519), + 16: uint16(21516), + 17: uint16(21514), + 18: uint16(21520), + 19: uint16(21505), + 20: uint16(21515), + 21: uint16(21508), + 22: uint16(21521), + 23: uint16(21517), + 24: uint16(21512), + 25: uint16(21507), + 26: uint16(21518), + 27: uint16(21510), + 28: uint16(21522), + 29: uint16(22240), + 30: uint16(22238), + 31: uint16(22237), + 32: uint16(22323), + 33: uint16(22320), + 34: uint16(22312), + 35: uint16(22317), + 36: uint16(22316), + 37: uint16(22319), + 38: uint16(22313), + 39: uint16(22809), + 40: uint16(22810), + 41: uint16(22839), + 42: uint16(22840), + 43: uint16(22916), + 44: uint16(22904), + 45: uint16(22915), + 46: uint16(22909), + 47: uint16(22905), + 48: uint16(22914), + 49: uint16(22913), + 50: uint16(23383), + 51: uint16(23384), + 52: uint16(23431), + 53: uint16(23432), + 54: uint16(23429), + 55: uint16(23433), + 56: uint16(23546), + 57: uint16(23574), + 58: uint16(23673), + 59: uint16(24030), + 60: uint16(24070), + 61: uint16(24182), + 62: uint16(24180), + 63: uint16(24335), + 64: uint16(24347), + 65: uint16(24537), + 66: uint16(24534), + 67: uint16(25102), + 68: uint16(25100), + 69: uint16(25101), + 70: uint16(25104), + 71: uint16(25187), + 72: uint16(25179), + 73: uint16(25176), + 74: uint16(25910), + 75: uint16(26089), + 76: uint16(26088), + 77: uint16(26092), + 78: uint16(26093), + 79: uint16(26354), + 80: uint16(26355), + 81: uint16(26377), + 82: uint16(26429), + 83: uint16(26420), + 84: uint16(26417), + 85: uint16(26421), + 86: uint16(27425), + 87: uint16(27492), + 88: uint16(27515), + 89: uint16(27670), + 90: uint16(27741), + 91: uint16(27735), + 92: uint16(27737), + 93: uint16(27743), + 94: uint16(27744), + 95: uint16(27728), + 96: uint16(27733), + 97: uint16(27745), + 98: uint16(27739), + 99: uint16(27725), + 100: uint16(27726), + 101: uint16(28784), + 102: uint16(29279), + 103: uint16(29277), + 104: uint16(30334), + 105: uint16(31481), + 106: uint16(31859), + 107: uint16(31992), + 108: uint16(32566), + 109: uint16(32650), + 110: uint16(32701), + 111: uint16(32769), + 112: uint16(32771), + 113: uint16(32780), + 114: uint16(32786), + 115: uint16(32819), + 116: uint16(32895), + 117: uint16(32905), + 118: uint16(32907), + 119: uint16(32908), + 120: uint16(33251), + 121: uint16(33258), + 122: uint16(33267), + 123: uint16(33276), + 124: uint16(33292), + 125: uint16(33307), + 126: uint16(33311), + 127: uint16(33390), + 128: uint16(33394), + 129: uint16(33406), + 130: uint16(34411), + 131: uint16(34880), + 132: uint16(34892), + 133: uint16(34915), + 134: uint16(35199), + 135: uint16(38433), + 136: uint16(20018), + 137: uint16(20136), + 138: uint16(20301), + 139: uint16(20303), + 140: uint16(20295), + 141: uint16(20311), + 142: uint16(20318), + 143: uint16(20276), + 144: uint16(20315), + 145: uint16(20309), + 146: uint16(20272), + 147: uint16(20304), + 148: uint16(20305), + 149: uint16(20285), + 150: uint16(20282), + 151: uint16(20280), + 152: uint16(20291), + 153: uint16(20308), + 154: uint16(20284), + 155: uint16(20294), + 156: uint16(20323), + }, + 6: { + 0: uint16(20316), + 1: uint16(20320), + 2: uint16(20271), + 3: uint16(20302), + 4: uint16(20278), + 5: uint16(20313), + 6: uint16(20317), + 7: uint16(20296), + 8: uint16(20314), + 9: uint16(20812), + 10: uint16(20811), + 11: uint16(20813), + 12: uint16(20853), + 13: uint16(20918), + 14: uint16(20919), + 15: uint16(21029), + 16: uint16(21028), + 17: uint16(21033), + 18: uint16(21034), + 19: uint16(21032), + 20: uint16(21163), + 21: uint16(21161), + 22: uint16(21162), + 23: uint16(21164), + 24: uint16(21283), + 25: uint16(21363), + 26: uint16(21365), + 27: uint16(21533), + 28: uint16(21549), + 29: uint16(21534), + 30: uint16(21566), + 31: uint16(21542), + 32: uint16(21582), + 33: uint16(21543), + 34: uint16(21574), + 35: uint16(21571), + 36: uint16(21555), + 37: uint16(21576), + 38: uint16(21570), + 39: uint16(21531), + 40: uint16(21545), + 41: uint16(21578), + 42: uint16(21561), + 43: uint16(21563), + 44: uint16(21560), + 45: uint16(21550), + 46: uint16(21557), + 47: uint16(21558), + 48: uint16(21536), + 49: uint16(21564), + 50: uint16(21568), + 51: uint16(21553), + 52: uint16(21547), + 53: uint16(21535), + 54: uint16(21548), + 55: uint16(22250), + 56: uint16(22256), + 57: uint16(22244), + 58: uint16(22251), + 59: uint16(22346), + 60: uint16(22353), + 61: uint16(22336), + 62: uint16(22349), + 63: uint16(22343), + 64: uint16(22350), + 65: uint16(22334), + 66: uint16(22352), + 67: uint16(22351), + 68: uint16(22331), + 69: uint16(22767), + 70: uint16(22846), + 71: uint16(22941), + 72: uint16(22930), + 73: uint16(22952), + 74: uint16(22942), + 75: uint16(22947), + 76: uint16(22937), + 77: uint16(22934), + 78: uint16(22925), + 79: uint16(22948), + 80: uint16(22931), + 81: uint16(22922), + 82: uint16(22949), + 83: uint16(23389), + 84: uint16(23388), + 85: uint16(23386), + 86: uint16(23387), + 87: uint16(23436), + 88: uint16(23435), + 89: uint16(23439), + 90: uint16(23596), + 91: uint16(23616), + 92: uint16(23617), + 93: uint16(23615), + 94: uint16(23614), + 95: uint16(23696), + 96: uint16(23697), + 97: uint16(23700), + 98: uint16(23692), + 99: uint16(24043), + 100: uint16(24076), + 101: uint16(24207), + 102: uint16(24199), + 103: uint16(24202), + 104: uint16(24311), + 105: uint16(24324), + 106: uint16(24351), + 107: uint16(24420), + 108: uint16(24418), + 109: uint16(24439), + 110: uint16(24441), + 111: uint16(24536), + 112: uint16(24524), + 113: uint16(24535), + 114: uint16(24525), + 115: uint16(24561), + 116: uint16(24555), + 117: uint16(24568), + 118: uint16(24554), + 119: uint16(25106), + 120: uint16(25105), + 121: uint16(25220), + 122: uint16(25239), + 123: uint16(25238), + 124: uint16(25216), + 125: uint16(25206), + 126: uint16(25225), + 127: uint16(25197), + 128: uint16(25226), + 129: uint16(25212), + 130: uint16(25214), + 131: uint16(25209), + 132: uint16(25203), + 133: uint16(25234), + 134: uint16(25199), + 135: uint16(25240), + 136: uint16(25198), + 137: uint16(25237), + 138: uint16(25235), + 139: uint16(25233), + 140: uint16(25222), + 141: uint16(25913), + 142: uint16(25915), + 143: uint16(25912), + 144: uint16(26097), + 145: uint16(26356), + 146: uint16(26463), + 147: uint16(26446), + 148: uint16(26447), + 149: uint16(26448), + 150: uint16(26449), + 151: uint16(26460), + 152: uint16(26454), + 153: uint16(26462), + 154: uint16(26441), + 155: uint16(26438), + 156: uint16(26464), + }, + 7: { + 0: uint16(26451), + 1: uint16(26455), + 2: uint16(27493), + 3: uint16(27599), + 4: uint16(27714), + 5: uint16(27742), + 6: uint16(27801), + 7: uint16(27777), + 8: uint16(27784), + 9: uint16(27785), + 10: uint16(27781), + 11: uint16(27803), + 12: uint16(27754), + 13: uint16(27770), + 14: uint16(27792), + 15: uint16(27760), + 16: uint16(27788), + 17: uint16(27752), + 18: uint16(27798), + 19: uint16(27794), + 20: uint16(27773), + 21: uint16(27779), + 22: uint16(27762), + 23: uint16(27774), + 24: uint16(27764), + 25: uint16(27782), + 26: uint16(27766), + 27: uint16(27789), + 28: uint16(27796), + 29: uint16(27800), + 30: uint16(27778), + 31: uint16(28790), + 32: uint16(28796), + 33: uint16(28797), + 34: uint16(28792), + 35: uint16(29282), + 36: uint16(29281), + 37: uint16(29280), + 38: uint16(29380), + 39: uint16(29378), + 40: uint16(29590), + 41: uint16(29996), + 42: uint16(29995), + 43: uint16(30007), + 44: uint16(30008), + 45: uint16(30338), + 46: uint16(30447), + 47: uint16(30691), + 48: uint16(31169), + 49: uint16(31168), + 50: uint16(31167), + 51: uint16(31350), + 52: uint16(31995), + 53: uint16(32597), + 54: uint16(32918), + 55: uint16(32915), + 56: uint16(32925), + 57: uint16(32920), + 58: uint16(32923), + 59: uint16(32922), + 60: uint16(32946), + 61: uint16(33391), + 62: uint16(33426), + 63: uint16(33419), + 64: uint16(33421), + 65: uint16(35211), + 66: uint16(35282), + 67: uint16(35328), + 68: uint16(35895), + 69: uint16(35910), + 70: uint16(35925), + 71: uint16(35997), + 72: uint16(36196), + 73: uint16(36208), + 74: uint16(36275), + 75: uint16(36523), + 76: uint16(36554), + 77: uint16(36763), + 78: uint16(36784), + 79: uint16(36802), + 80: uint16(36806), + 81: uint16(36805), + 82: uint16(36804), + 83: uint16(24033), + 84: uint16(37009), + 85: uint16(37026), + 86: uint16(37034), + 87: uint16(37030), + 88: uint16(37027), + 89: uint16(37193), + 90: uint16(37318), + 91: uint16(37324), + 92: uint16(38450), + 93: uint16(38446), + 94: uint16(38449), + 95: uint16(38442), + 96: uint16(38444), + 97: uint16(20006), + 98: uint16(20054), + 99: uint16(20083), + 100: uint16(20107), + 101: uint16(20123), + 102: uint16(20126), + 103: uint16(20139), + 104: uint16(20140), + 105: uint16(20335), + 106: uint16(20381), + 107: uint16(20365), + 108: uint16(20339), + 109: uint16(20351), + 110: uint16(20332), + 111: uint16(20379), + 112: uint16(20363), + 113: uint16(20358), + 114: uint16(20355), + 115: uint16(20336), + 116: uint16(20341), + 117: uint16(20360), + 118: uint16(20329), + 119: uint16(20347), + 120: uint16(20374), + 121: uint16(20350), + 122: uint16(20367), + 123: uint16(20369), + 124: uint16(20346), + 125: uint16(20820), + 126: uint16(20818), + 127: uint16(20821), + 128: uint16(20841), + 129: uint16(20855), + 130: uint16(20854), + 131: uint16(20856), + 132: uint16(20925), + 133: uint16(20989), + 134: uint16(21051), + 135: uint16(21048), + 136: uint16(21047), + 137: uint16(21050), + 138: uint16(21040), + 139: uint16(21038), + 140: uint16(21046), + 141: uint16(21057), + 142: uint16(21182), + 143: uint16(21179), + 144: uint16(21330), + 145: uint16(21332), + 146: uint16(21331), + 147: uint16(21329), + 148: uint16(21350), + 149: uint16(21367), + 150: uint16(21368), + 151: uint16(21369), + 152: uint16(21462), + 153: uint16(21460), + 154: uint16(21463), + 155: uint16(21619), + 156: uint16(21621), + }, + 8: { + 0: uint16(21654), + 1: uint16(21624), + 2: uint16(21653), + 3: uint16(21632), + 4: uint16(21627), + 5: uint16(21623), + 6: uint16(21636), + 7: uint16(21650), + 8: uint16(21638), + 9: uint16(21628), + 10: uint16(21648), + 11: uint16(21617), + 12: uint16(21622), + 13: uint16(21644), + 14: uint16(21658), + 15: uint16(21602), + 16: uint16(21608), + 17: uint16(21643), + 18: uint16(21629), + 19: uint16(21646), + 20: uint16(22266), + 21: uint16(22403), + 22: uint16(22391), + 23: uint16(22378), + 24: uint16(22377), + 25: uint16(22369), + 26: uint16(22374), + 27: uint16(22372), + 28: uint16(22396), + 29: uint16(22812), + 30: uint16(22857), + 31: uint16(22855), + 32: uint16(22856), + 33: uint16(22852), + 34: uint16(22868), + 35: uint16(22974), + 36: uint16(22971), + 37: uint16(22996), + 38: uint16(22969), + 39: uint16(22958), + 40: uint16(22993), + 41: uint16(22982), + 42: uint16(22992), + 43: uint16(22989), + 44: uint16(22987), + 45: uint16(22995), + 46: uint16(22986), + 47: uint16(22959), + 48: uint16(22963), + 49: uint16(22994), + 50: uint16(22981), + 51: uint16(23391), + 52: uint16(23396), + 53: uint16(23395), + 54: uint16(23447), + 55: uint16(23450), + 56: uint16(23448), + 57: uint16(23452), + 58: uint16(23449), + 59: uint16(23451), + 60: uint16(23578), + 61: uint16(23624), + 62: uint16(23621), + 63: uint16(23622), + 64: uint16(23735), + 65: uint16(23713), + 66: uint16(23736), + 67: uint16(23721), + 68: uint16(23723), + 69: uint16(23729), + 70: uint16(23731), + 71: uint16(24088), + 72: uint16(24090), + 73: uint16(24086), + 74: uint16(24085), + 75: uint16(24091), + 76: uint16(24081), + 77: uint16(24184), + 78: uint16(24218), + 79: uint16(24215), + 80: uint16(24220), + 81: uint16(24213), + 82: uint16(24214), + 83: uint16(24310), + 84: uint16(24358), + 85: uint16(24359), + 86: uint16(24361), + 87: uint16(24448), + 88: uint16(24449), + 89: uint16(24447), + 90: uint16(24444), + 91: uint16(24541), + 92: uint16(24544), + 93: uint16(24573), + 94: uint16(24565), + 95: uint16(24575), + 96: uint16(24591), + 97: uint16(24596), + 98: uint16(24623), + 99: uint16(24629), + 100: uint16(24598), + 101: uint16(24618), + 102: uint16(24597), + 103: uint16(24609), + 104: uint16(24615), + 105: uint16(24617), + 106: uint16(24619), + 107: uint16(24603), + 108: uint16(25110), + 109: uint16(25109), + 110: uint16(25151), + 111: uint16(25150), + 112: uint16(25152), + 113: uint16(25215), + 114: uint16(25289), + 115: uint16(25292), + 116: uint16(25284), + 117: uint16(25279), + 118: uint16(25282), + 119: uint16(25273), + 120: uint16(25298), + 121: uint16(25307), + 122: uint16(25259), + 123: uint16(25299), + 124: uint16(25300), + 125: uint16(25291), + 126: uint16(25288), + 127: uint16(25256), + 128: uint16(25277), + 129: uint16(25276), + 130: uint16(25296), + 131: uint16(25305), + 132: uint16(25287), + 133: uint16(25293), + 134: uint16(25269), + 135: uint16(25306), + 136: uint16(25265), + 137: uint16(25304), + 138: uint16(25302), + 139: uint16(25303), + 140: uint16(25286), + 141: uint16(25260), + 142: uint16(25294), + 143: uint16(25918), + 144: uint16(26023), + 145: uint16(26044), + 146: uint16(26106), + 147: uint16(26132), + 148: uint16(26131), + 149: uint16(26124), + 150: uint16(26118), + 151: uint16(26114), + 152: uint16(26126), + 153: uint16(26112), + 154: uint16(26127), + 155: uint16(26133), + 156: uint16(26122), + }, + 9: { + 0: uint16(26119), + 1: uint16(26381), + 2: uint16(26379), + 3: uint16(26477), + 4: uint16(26507), + 5: uint16(26517), + 6: uint16(26481), + 7: uint16(26524), + 8: uint16(26483), + 9: uint16(26487), + 10: uint16(26503), + 11: uint16(26525), + 12: uint16(26519), + 13: uint16(26479), + 14: uint16(26480), + 15: uint16(26495), + 16: uint16(26505), + 17: uint16(26494), + 18: uint16(26512), + 19: uint16(26485), + 20: uint16(26522), + 21: uint16(26515), + 22: uint16(26492), + 23: uint16(26474), + 24: uint16(26482), + 25: uint16(27427), + 26: uint16(27494), + 27: uint16(27495), + 28: uint16(27519), + 29: uint16(27667), + 30: uint16(27675), + 31: uint16(27875), + 32: uint16(27880), + 33: uint16(27891), + 34: uint16(27825), + 35: uint16(27852), + 36: uint16(27877), + 37: uint16(27827), + 38: uint16(27837), + 39: uint16(27838), + 40: uint16(27836), + 41: uint16(27874), + 42: uint16(27819), + 43: uint16(27861), + 44: uint16(27859), + 45: uint16(27832), + 46: uint16(27844), + 47: uint16(27833), + 48: uint16(27841), + 49: uint16(27822), + 50: uint16(27863), + 51: uint16(27845), + 52: uint16(27889), + 53: uint16(27839), + 54: uint16(27835), + 55: uint16(27873), + 56: uint16(27867), + 57: uint16(27850), + 58: uint16(27820), + 59: uint16(27887), + 60: uint16(27868), + 61: uint16(27862), + 62: uint16(27872), + 63: uint16(28821), + 64: uint16(28814), + 65: uint16(28818), + 66: uint16(28810), + 67: uint16(28825), + 68: uint16(29228), + 69: uint16(29229), + 70: uint16(29240), + 71: uint16(29256), + 72: uint16(29287), + 73: uint16(29289), + 74: uint16(29376), + 75: uint16(29390), + 76: uint16(29401), + 77: uint16(29399), + 78: uint16(29392), + 79: uint16(29609), + 80: uint16(29608), + 81: uint16(29599), + 82: uint16(29611), + 83: uint16(29605), + 84: uint16(30013), + 85: uint16(30109), + 86: uint16(30105), + 87: uint16(30106), + 88: uint16(30340), + 89: uint16(30402), + 90: uint16(30450), + 91: uint16(30452), + 92: uint16(30693), + 93: uint16(30717), + 94: uint16(31038), + 95: uint16(31040), + 96: uint16(31041), + 97: uint16(31177), + 98: uint16(31176), + 99: uint16(31354), + 100: uint16(31353), + 101: uint16(31482), + 102: uint16(31998), + 103: uint16(32596), + 104: uint16(32652), + 105: uint16(32651), + 106: uint16(32773), + 107: uint16(32954), + 108: uint16(32933), + 109: uint16(32930), + 110: uint16(32945), + 111: uint16(32929), + 112: uint16(32939), + 113: uint16(32937), + 114: uint16(32948), + 115: uint16(32938), + 116: uint16(32943), + 117: uint16(33253), + 118: uint16(33278), + 119: uint16(33293), + 120: uint16(33459), + 121: uint16(33437), + 122: uint16(33433), + 123: uint16(33453), + 124: uint16(33469), + 125: uint16(33439), + 126: uint16(33465), + 127: uint16(33457), + 128: uint16(33452), + 129: uint16(33445), + 130: uint16(33455), + 131: uint16(33464), + 132: uint16(33443), + 133: uint16(33456), + 134: uint16(33470), + 135: uint16(33463), + 136: uint16(34382), + 137: uint16(34417), + 138: uint16(21021), + 139: uint16(34920), + 140: uint16(36555), + 141: uint16(36814), + 142: uint16(36820), + 143: uint16(36817), + 144: uint16(37045), + 145: uint16(37048), + 146: uint16(37041), + 147: uint16(37046), + 148: uint16(37319), + 149: uint16(37329), + 150: uint16(38263), + 151: uint16(38272), + 152: uint16(38428), + 153: uint16(38464), + 154: uint16(38463), + 155: uint16(38459), + 156: uint16(38468), + }, + 10: { + 0: uint16(38466), + 1: uint16(38585), + 2: uint16(38632), + 3: uint16(38738), + 4: uint16(38750), + 5: uint16(20127), + 6: uint16(20141), + 7: uint16(20142), + 8: uint16(20449), + 9: uint16(20405), + 10: uint16(20399), + 11: uint16(20415), + 12: uint16(20448), + 13: uint16(20433), + 14: uint16(20431), + 15: uint16(20445), + 16: uint16(20419), + 17: uint16(20406), + 18: uint16(20440), + 19: uint16(20447), + 20: uint16(20426), + 21: uint16(20439), + 22: uint16(20398), + 23: uint16(20432), + 24: uint16(20420), + 25: uint16(20418), + 26: uint16(20442), + 27: uint16(20430), + 28: uint16(20446), + 29: uint16(20407), + 30: uint16(20823), + 31: uint16(20882), + 32: uint16(20881), + 33: uint16(20896), + 34: uint16(21070), + 35: uint16(21059), + 36: uint16(21066), + 37: uint16(21069), + 38: uint16(21068), + 39: uint16(21067), + 40: uint16(21063), + 41: uint16(21191), + 42: uint16(21193), + 43: uint16(21187), + 44: uint16(21185), + 45: uint16(21261), + 46: uint16(21335), + 47: uint16(21371), + 48: uint16(21402), + 49: uint16(21467), + 50: uint16(21676), + 51: uint16(21696), + 52: uint16(21672), + 53: uint16(21710), + 54: uint16(21705), + 55: uint16(21688), + 56: uint16(21670), + 57: uint16(21683), + 58: uint16(21703), + 59: uint16(21698), + 60: uint16(21693), + 61: uint16(21674), + 62: uint16(21697), + 63: uint16(21700), + 64: uint16(21704), + 65: uint16(21679), + 66: uint16(21675), + 67: uint16(21681), + 68: uint16(21691), + 69: uint16(21673), + 70: uint16(21671), + 71: uint16(21695), + 72: uint16(22271), + 73: uint16(22402), + 74: uint16(22411), + 75: uint16(22432), + 76: uint16(22435), + 77: uint16(22434), + 78: uint16(22478), + 79: uint16(22446), + 80: uint16(22419), + 81: uint16(22869), + 82: uint16(22865), + 83: uint16(22863), + 84: uint16(22862), + 85: uint16(22864), + 86: uint16(23004), + 87: uint16(23000), + 88: uint16(23039), + 89: uint16(23011), + 90: uint16(23016), + 91: uint16(23043), + 92: uint16(23013), + 93: uint16(23018), + 94: uint16(23002), + 95: uint16(23014), + 96: uint16(23041), + 97: uint16(23035), + 98: uint16(23401), + 99: uint16(23459), + 100: uint16(23462), + 101: uint16(23460), + 102: uint16(23458), + 103: uint16(23461), + 104: uint16(23553), + 105: uint16(23630), + 106: uint16(23631), + 107: uint16(23629), + 108: uint16(23627), + 109: uint16(23769), + 110: uint16(23762), + 111: uint16(24055), + 112: uint16(24093), + 113: uint16(24101), + 114: uint16(24095), + 115: uint16(24189), + 116: uint16(24224), + 117: uint16(24230), + 118: uint16(24314), + 119: uint16(24328), + 120: uint16(24365), + 121: uint16(24421), + 122: uint16(24456), + 123: uint16(24453), + 124: uint16(24458), + 125: uint16(24459), + 126: uint16(24455), + 127: uint16(24460), + 128: uint16(24457), + 129: uint16(24594), + 130: uint16(24605), + 131: uint16(24608), + 132: uint16(24613), + 133: uint16(24590), + 134: uint16(24616), + 135: uint16(24653), + 136: uint16(24688), + 137: uint16(24680), + 138: uint16(24674), + 139: uint16(24646), + 140: uint16(24643), + 141: uint16(24684), + 142: uint16(24683), + 143: uint16(24682), + 144: uint16(24676), + 145: uint16(25153), + 146: uint16(25308), + 147: uint16(25366), + 148: uint16(25353), + 149: uint16(25340), + 150: uint16(25325), + 151: uint16(25345), + 152: uint16(25326), + 153: uint16(25341), + 154: uint16(25351), + 155: uint16(25329), + 156: uint16(25335), + }, + 11: { + 0: uint16(25327), + 1: uint16(25324), + 2: uint16(25342), + 3: uint16(25332), + 4: uint16(25361), + 5: uint16(25346), + 6: uint16(25919), + 7: uint16(25925), + 8: uint16(26027), + 9: uint16(26045), + 10: uint16(26082), + 11: uint16(26149), + 12: uint16(26157), + 13: uint16(26144), + 14: uint16(26151), + 15: uint16(26159), + 16: uint16(26143), + 17: uint16(26152), + 18: uint16(26161), + 19: uint16(26148), + 20: uint16(26359), + 21: uint16(26623), + 22: uint16(26579), + 23: uint16(26609), + 24: uint16(26580), + 25: uint16(26576), + 26: uint16(26604), + 27: uint16(26550), + 28: uint16(26543), + 29: uint16(26613), + 30: uint16(26601), + 31: uint16(26607), + 32: uint16(26564), + 33: uint16(26577), + 34: uint16(26548), + 35: uint16(26586), + 36: uint16(26597), + 37: uint16(26552), + 38: uint16(26575), + 39: uint16(26590), + 40: uint16(26611), + 41: uint16(26544), + 42: uint16(26585), + 43: uint16(26594), + 44: uint16(26589), + 45: uint16(26578), + 46: uint16(27498), + 47: uint16(27523), + 48: uint16(27526), + 49: uint16(27573), + 50: uint16(27602), + 51: uint16(27607), + 52: uint16(27679), + 53: uint16(27849), + 54: uint16(27915), + 55: uint16(27954), + 56: uint16(27946), + 57: uint16(27969), + 58: uint16(27941), + 59: uint16(27916), + 60: uint16(27953), + 61: uint16(27934), + 62: uint16(27927), + 63: uint16(27963), + 64: uint16(27965), + 65: uint16(27966), + 66: uint16(27958), + 67: uint16(27931), + 68: uint16(27893), + 69: uint16(27961), + 70: uint16(27943), + 71: uint16(27960), + 72: uint16(27945), + 73: uint16(27950), + 74: uint16(27957), + 75: uint16(27918), + 76: uint16(27947), + 77: uint16(28843), + 78: uint16(28858), + 79: uint16(28851), + 80: uint16(28844), + 81: uint16(28847), + 82: uint16(28845), + 83: uint16(28856), + 84: uint16(28846), + 85: uint16(28836), + 86: uint16(29232), + 87: uint16(29298), + 88: uint16(29295), + 89: uint16(29300), + 90: uint16(29417), + 91: uint16(29408), + 92: uint16(29409), + 93: uint16(29623), + 94: uint16(29642), + 95: uint16(29627), + 96: uint16(29618), + 97: uint16(29645), + 98: uint16(29632), + 99: uint16(29619), + 100: uint16(29978), + 101: uint16(29997), + 102: uint16(30031), + 103: uint16(30028), + 104: uint16(30030), + 105: uint16(30027), + 106: uint16(30123), + 107: uint16(30116), + 108: uint16(30117), + 109: uint16(30114), + 110: uint16(30115), + 111: uint16(30328), + 112: uint16(30342), + 113: uint16(30343), + 114: uint16(30344), + 115: uint16(30408), + 116: uint16(30406), + 117: uint16(30403), + 118: uint16(30405), + 119: uint16(30465), + 120: uint16(30457), + 121: uint16(30456), + 122: uint16(30473), + 123: uint16(30475), + 124: uint16(30462), + 125: uint16(30460), + 126: uint16(30471), + 127: uint16(30684), + 128: uint16(30722), + 129: uint16(30740), + 130: uint16(30732), + 131: uint16(30733), + 132: uint16(31046), + 133: uint16(31049), + 134: uint16(31048), + 135: uint16(31047), + 136: uint16(31161), + 137: uint16(31162), + 138: uint16(31185), + 139: uint16(31186), + 140: uint16(31179), + 141: uint16(31359), + 142: uint16(31361), + 143: uint16(31487), + 144: uint16(31485), + 145: uint16(31869), + 146: uint16(32002), + 147: uint16(32005), + 148: uint16(32000), + 149: uint16(32009), + 150: uint16(32007), + 151: uint16(32004), + 152: uint16(32006), + 153: uint16(32568), + 154: uint16(32654), + 155: uint16(32703), + 156: uint16(32772), + }, + 12: { + 0: uint16(32784), + 1: uint16(32781), + 2: uint16(32785), + 3: uint16(32822), + 4: uint16(32982), + 5: uint16(32997), + 6: uint16(32986), + 7: uint16(32963), + 8: uint16(32964), + 9: uint16(32972), + 10: uint16(32993), + 11: uint16(32987), + 12: uint16(32974), + 13: uint16(32990), + 14: uint16(32996), + 15: uint16(32989), + 16: uint16(33268), + 17: uint16(33314), + 18: uint16(33511), + 19: uint16(33539), + 20: uint16(33541), + 21: uint16(33507), + 22: uint16(33499), + 23: uint16(33510), + 24: uint16(33540), + 25: uint16(33509), + 26: uint16(33538), + 27: uint16(33545), + 28: uint16(33490), + 29: uint16(33495), + 30: uint16(33521), + 31: uint16(33537), + 32: uint16(33500), + 33: uint16(33492), + 34: uint16(33489), + 35: uint16(33502), + 36: uint16(33491), + 37: uint16(33503), + 38: uint16(33519), + 39: uint16(33542), + 40: uint16(34384), + 41: uint16(34425), + 42: uint16(34427), + 43: uint16(34426), + 44: uint16(34893), + 45: uint16(34923), + 46: uint16(35201), + 47: uint16(35284), + 48: uint16(35336), + 49: uint16(35330), + 50: uint16(35331), + 51: uint16(35998), + 52: uint16(36000), + 53: uint16(36212), + 54: uint16(36211), + 55: uint16(36276), + 56: uint16(36557), + 57: uint16(36556), + 58: uint16(36848), + 59: uint16(36838), + 60: uint16(36834), + 61: uint16(36842), + 62: uint16(36837), + 63: uint16(36845), + 64: uint16(36843), + 65: uint16(36836), + 66: uint16(36840), + 67: uint16(37066), + 68: uint16(37070), + 69: uint16(37057), + 70: uint16(37059), + 71: uint16(37195), + 72: uint16(37194), + 73: uint16(37325), + 74: uint16(38274), + 75: uint16(38480), + 76: uint16(38475), + 77: uint16(38476), + 78: uint16(38477), + 79: uint16(38754), + 80: uint16(38761), + 81: uint16(38859), + 82: uint16(38893), + 83: uint16(38899), + 84: uint16(38913), + 85: uint16(39080), + 86: uint16(39131), + 87: uint16(39135), + 88: uint16(39318), + 89: uint16(39321), + 90: uint16(20056), + 91: uint16(20147), + 92: uint16(20492), + 93: uint16(20493), + 94: uint16(20515), + 95: uint16(20463), + 96: uint16(20518), + 97: uint16(20517), + 98: uint16(20472), + 99: uint16(20521), + 100: uint16(20502), + 101: uint16(20486), + 102: uint16(20540), + 103: uint16(20511), + 104: uint16(20506), + 105: uint16(20498), + 106: uint16(20497), + 107: uint16(20474), + 108: uint16(20480), + 109: uint16(20500), + 110: uint16(20520), + 111: uint16(20465), + 112: uint16(20513), + 113: uint16(20491), + 114: uint16(20505), + 115: uint16(20504), + 116: uint16(20467), + 117: uint16(20462), + 118: uint16(20525), + 119: uint16(20522), + 120: uint16(20478), + 121: uint16(20523), + 122: uint16(20489), + 123: uint16(20860), + 124: uint16(20900), + 125: uint16(20901), + 126: uint16(20898), + 127: uint16(20941), + 128: uint16(20940), + 129: uint16(20934), + 130: uint16(20939), + 131: uint16(21078), + 132: uint16(21084), + 133: uint16(21076), + 134: uint16(21083), + 135: uint16(21085), + 136: uint16(21290), + 137: uint16(21375), + 138: uint16(21407), + 139: uint16(21405), + 140: uint16(21471), + 141: uint16(21736), + 142: uint16(21776), + 143: uint16(21761), + 144: uint16(21815), + 145: uint16(21756), + 146: uint16(21733), + 147: uint16(21746), + 148: uint16(21766), + 149: uint16(21754), + 150: uint16(21780), + 151: uint16(21737), + 152: uint16(21741), + 153: uint16(21729), + 154: uint16(21769), + 155: uint16(21742), + 156: uint16(21738), + }, + 13: { + 0: uint16(21734), + 1: uint16(21799), + 2: uint16(21767), + 3: uint16(21757), + 4: uint16(21775), + 5: uint16(22275), + 6: uint16(22276), + 7: uint16(22466), + 8: uint16(22484), + 9: uint16(22475), + 10: uint16(22467), + 11: uint16(22537), + 12: uint16(22799), + 13: uint16(22871), + 14: uint16(22872), + 15: uint16(22874), + 16: uint16(23057), + 17: uint16(23064), + 18: uint16(23068), + 19: uint16(23071), + 20: uint16(23067), + 21: uint16(23059), + 22: uint16(23020), + 23: uint16(23072), + 24: uint16(23075), + 25: uint16(23081), + 26: uint16(23077), + 27: uint16(23052), + 28: uint16(23049), + 29: uint16(23403), + 30: uint16(23640), + 31: uint16(23472), + 32: uint16(23475), + 33: uint16(23478), + 34: uint16(23476), + 35: uint16(23470), + 36: uint16(23477), + 37: uint16(23481), + 38: uint16(23480), + 39: uint16(23556), + 40: uint16(23633), + 41: uint16(23637), + 42: uint16(23632), + 43: uint16(23789), + 44: uint16(23805), + 45: uint16(23803), + 46: uint16(23786), + 47: uint16(23784), + 48: uint16(23792), + 49: uint16(23798), + 50: uint16(23809), + 51: uint16(23796), + 52: uint16(24046), + 53: uint16(24109), + 54: uint16(24107), + 55: uint16(24235), + 56: uint16(24237), + 57: uint16(24231), + 58: uint16(24369), + 59: uint16(24466), + 60: uint16(24465), + 61: uint16(24464), + 62: uint16(24665), + 63: uint16(24675), + 64: uint16(24677), + 65: uint16(24656), + 66: uint16(24661), + 67: uint16(24685), + 68: uint16(24681), + 69: uint16(24687), + 70: uint16(24708), + 71: uint16(24735), + 72: uint16(24730), + 73: uint16(24717), + 74: uint16(24724), + 75: uint16(24716), + 76: uint16(24709), + 77: uint16(24726), + 78: uint16(25159), + 79: uint16(25331), + 80: uint16(25352), + 81: uint16(25343), + 82: uint16(25422), + 83: uint16(25406), + 84: uint16(25391), + 85: uint16(25429), + 86: uint16(25410), + 87: uint16(25414), + 88: uint16(25423), + 89: uint16(25417), + 90: uint16(25402), + 91: uint16(25424), + 92: uint16(25405), + 93: uint16(25386), + 94: uint16(25387), + 95: uint16(25384), + 96: uint16(25421), + 97: uint16(25420), + 98: uint16(25928), + 99: uint16(25929), + 100: uint16(26009), + 101: uint16(26049), + 102: uint16(26053), + 103: uint16(26178), + 104: uint16(26185), + 105: uint16(26191), + 106: uint16(26179), + 107: uint16(26194), + 108: uint16(26188), + 109: uint16(26181), + 110: uint16(26177), + 111: uint16(26360), + 112: uint16(26388), + 113: uint16(26389), + 114: uint16(26391), + 115: uint16(26657), + 116: uint16(26680), + 117: uint16(26696), + 118: uint16(26694), + 119: uint16(26707), + 120: uint16(26681), + 121: uint16(26690), + 122: uint16(26708), + 123: uint16(26665), + 124: uint16(26803), + 125: uint16(26647), + 126: uint16(26700), + 127: uint16(26705), + 128: uint16(26685), + 129: uint16(26612), + 130: uint16(26704), + 131: uint16(26688), + 132: uint16(26684), + 133: uint16(26691), + 134: uint16(26666), + 135: uint16(26693), + 136: uint16(26643), + 137: uint16(26648), + 138: uint16(26689), + 139: uint16(27530), + 140: uint16(27529), + 141: uint16(27575), + 142: uint16(27683), + 143: uint16(27687), + 144: uint16(27688), + 145: uint16(27686), + 146: uint16(27684), + 147: uint16(27888), + 148: uint16(28010), + 149: uint16(28053), + 150: uint16(28040), + 151: uint16(28039), + 152: uint16(28006), + 153: uint16(28024), + 154: uint16(28023), + 155: uint16(27993), + 156: uint16(28051), + }, + 14: { + 0: uint16(28012), + 1: uint16(28041), + 2: uint16(28014), + 3: uint16(27994), + 4: uint16(28020), + 5: uint16(28009), + 6: uint16(28044), + 7: uint16(28042), + 8: uint16(28025), + 9: uint16(28037), + 10: uint16(28005), + 11: uint16(28052), + 12: uint16(28874), + 13: uint16(28888), + 14: uint16(28900), + 15: uint16(28889), + 16: uint16(28872), + 17: uint16(28879), + 18: uint16(29241), + 19: uint16(29305), + 20: uint16(29436), + 21: uint16(29433), + 22: uint16(29437), + 23: uint16(29432), + 24: uint16(29431), + 25: uint16(29574), + 26: uint16(29677), + 27: uint16(29705), + 28: uint16(29678), + 29: uint16(29664), + 30: uint16(29674), + 31: uint16(29662), + 32: uint16(30036), + 33: uint16(30045), + 34: uint16(30044), + 35: uint16(30042), + 36: uint16(30041), + 37: uint16(30142), + 38: uint16(30149), + 39: uint16(30151), + 40: uint16(30130), + 41: uint16(30131), + 42: uint16(30141), + 43: uint16(30140), + 44: uint16(30137), + 45: uint16(30146), + 46: uint16(30136), + 47: uint16(30347), + 48: uint16(30384), + 49: uint16(30410), + 50: uint16(30413), + 51: uint16(30414), + 52: uint16(30505), + 53: uint16(30495), + 54: uint16(30496), + 55: uint16(30504), + 56: uint16(30697), + 57: uint16(30768), + 58: uint16(30759), + 59: uint16(30776), + 60: uint16(30749), + 61: uint16(30772), + 62: uint16(30775), + 63: uint16(30757), + 64: uint16(30765), + 65: uint16(30752), + 66: uint16(30751), + 67: uint16(30770), + 68: uint16(31061), + 69: uint16(31056), + 70: uint16(31072), + 71: uint16(31071), + 72: uint16(31062), + 73: uint16(31070), + 74: uint16(31069), + 75: uint16(31063), + 76: uint16(31066), + 77: uint16(31204), + 78: uint16(31203), + 79: uint16(31207), + 80: uint16(31199), + 81: uint16(31206), + 82: uint16(31209), + 83: uint16(31192), + 84: uint16(31364), + 85: uint16(31368), + 86: uint16(31449), + 87: uint16(31494), + 88: uint16(31505), + 89: uint16(31881), + 90: uint16(32033), + 91: uint16(32023), + 92: uint16(32011), + 93: uint16(32010), + 94: uint16(32032), + 95: uint16(32034), + 96: uint16(32020), + 97: uint16(32016), + 98: uint16(32021), + 99: uint16(32026), + 100: uint16(32028), + 101: uint16(32013), + 102: uint16(32025), + 103: uint16(32027), + 104: uint16(32570), + 105: uint16(32607), + 106: uint16(32660), + 107: uint16(32709), + 108: uint16(32705), + 109: uint16(32774), + 110: uint16(32792), + 111: uint16(32789), + 112: uint16(32793), + 113: uint16(32791), + 114: uint16(32829), + 115: uint16(32831), + 116: uint16(33009), + 117: uint16(33026), + 118: uint16(33008), + 119: uint16(33029), + 120: uint16(33005), + 121: uint16(33012), + 122: uint16(33030), + 123: uint16(33016), + 124: uint16(33011), + 125: uint16(33032), + 126: uint16(33021), + 127: uint16(33034), + 128: uint16(33020), + 129: uint16(33007), + 130: uint16(33261), + 131: uint16(33260), + 132: uint16(33280), + 133: uint16(33296), + 134: uint16(33322), + 135: uint16(33323), + 136: uint16(33320), + 137: uint16(33324), + 138: uint16(33467), + 139: uint16(33579), + 140: uint16(33618), + 141: uint16(33620), + 142: uint16(33610), + 143: uint16(33592), + 144: uint16(33616), + 145: uint16(33609), + 146: uint16(33589), + 147: uint16(33588), + 148: uint16(33615), + 149: uint16(33586), + 150: uint16(33593), + 151: uint16(33590), + 152: uint16(33559), + 153: uint16(33600), + 154: uint16(33585), + 155: uint16(33576), + 156: uint16(33603), + }, + 15: { + 0: uint16(34388), + 1: uint16(34442), + 2: uint16(34474), + 3: uint16(34451), + 4: uint16(34468), + 5: uint16(34473), + 6: uint16(34444), + 7: uint16(34467), + 8: uint16(34460), + 9: uint16(34928), + 10: uint16(34935), + 11: uint16(34945), + 12: uint16(34946), + 13: uint16(34941), + 14: uint16(34937), + 15: uint16(35352), + 16: uint16(35344), + 17: uint16(35342), + 18: uint16(35340), + 19: uint16(35349), + 20: uint16(35338), + 21: uint16(35351), + 22: uint16(35347), + 23: uint16(35350), + 24: uint16(35343), + 25: uint16(35345), + 26: uint16(35912), + 27: uint16(35962), + 28: uint16(35961), + 29: uint16(36001), + 30: uint16(36002), + 31: uint16(36215), + 32: uint16(36524), + 33: uint16(36562), + 34: uint16(36564), + 35: uint16(36559), + 36: uint16(36785), + 37: uint16(36865), + 38: uint16(36870), + 39: uint16(36855), + 40: uint16(36864), + 41: uint16(36858), + 42: uint16(36852), + 43: uint16(36867), + 44: uint16(36861), + 45: uint16(36869), + 46: uint16(36856), + 47: uint16(37013), + 48: uint16(37089), + 49: uint16(37085), + 50: uint16(37090), + 51: uint16(37202), + 52: uint16(37197), + 53: uint16(37196), + 54: uint16(37336), + 55: uint16(37341), + 56: uint16(37335), + 57: uint16(37340), + 58: uint16(37337), + 59: uint16(38275), + 60: uint16(38498), + 61: uint16(38499), + 62: uint16(38497), + 63: uint16(38491), + 64: uint16(38493), + 65: uint16(38500), + 66: uint16(38488), + 67: uint16(38494), + 68: uint16(38587), + 69: uint16(39138), + 70: uint16(39340), + 71: uint16(39592), + 72: uint16(39640), + 73: uint16(39717), + 74: uint16(39730), + 75: uint16(39740), + 76: uint16(20094), + 77: uint16(20602), + 78: uint16(20605), + 79: uint16(20572), + 80: uint16(20551), + 81: uint16(20547), + 82: uint16(20556), + 83: uint16(20570), + 84: uint16(20553), + 85: uint16(20581), + 86: uint16(20598), + 87: uint16(20558), + 88: uint16(20565), + 89: uint16(20597), + 90: uint16(20596), + 91: uint16(20599), + 92: uint16(20559), + 93: uint16(20495), + 94: uint16(20591), + 95: uint16(20589), + 96: uint16(20828), + 97: uint16(20885), + 98: uint16(20976), + 99: uint16(21098), + 100: uint16(21103), + 101: uint16(21202), + 102: uint16(21209), + 103: uint16(21208), + 104: uint16(21205), + 105: uint16(21264), + 106: uint16(21263), + 107: uint16(21273), + 108: uint16(21311), + 109: uint16(21312), + 110: uint16(21310), + 111: uint16(21443), + 112: uint16(26364), + 113: uint16(21830), + 114: uint16(21866), + 115: uint16(21862), + 116: uint16(21828), + 117: uint16(21854), + 118: uint16(21857), + 119: uint16(21827), + 120: uint16(21834), + 121: uint16(21809), + 122: uint16(21846), + 123: uint16(21839), + 124: uint16(21845), + 125: uint16(21807), + 126: uint16(21860), + 127: uint16(21816), + 128: uint16(21806), + 129: uint16(21852), + 130: uint16(21804), + 131: uint16(21859), + 132: uint16(21811), + 133: uint16(21825), + 134: uint16(21847), + 135: uint16(22280), + 136: uint16(22283), + 137: uint16(22281), + 138: uint16(22495), + 139: uint16(22533), + 140: uint16(22538), + 141: uint16(22534), + 142: uint16(22496), + 143: uint16(22500), + 144: uint16(22522), + 145: uint16(22530), + 146: uint16(22581), + 147: uint16(22519), + 148: uint16(22521), + 149: uint16(22816), + 150: uint16(22882), + 151: uint16(23094), + 152: uint16(23105), + 153: uint16(23113), + 154: uint16(23142), + 155: uint16(23146), + 156: uint16(23104), + }, + 16: { + 0: uint16(23100), + 1: uint16(23138), + 2: uint16(23130), + 3: uint16(23110), + 4: uint16(23114), + 5: uint16(23408), + 6: uint16(23495), + 7: uint16(23493), + 8: uint16(23492), + 9: uint16(23490), + 10: uint16(23487), + 11: uint16(23494), + 12: uint16(23561), + 13: uint16(23560), + 14: uint16(23559), + 15: uint16(23648), + 16: uint16(23644), + 17: uint16(23645), + 18: uint16(23815), + 19: uint16(23814), + 20: uint16(23822), + 21: uint16(23835), + 22: uint16(23830), + 23: uint16(23842), + 24: uint16(23825), + 25: uint16(23849), + 26: uint16(23828), + 27: uint16(23833), + 28: uint16(23844), + 29: uint16(23847), + 30: uint16(23831), + 31: uint16(24034), + 32: uint16(24120), + 33: uint16(24118), + 34: uint16(24115), + 35: uint16(24119), + 36: uint16(24247), + 37: uint16(24248), + 38: uint16(24246), + 39: uint16(24245), + 40: uint16(24254), + 41: uint16(24373), + 42: uint16(24375), + 43: uint16(24407), + 44: uint16(24428), + 45: uint16(24425), + 46: uint16(24427), + 47: uint16(24471), + 48: uint16(24473), + 49: uint16(24478), + 50: uint16(24472), + 51: uint16(24481), + 52: uint16(24480), + 53: uint16(24476), + 54: uint16(24703), + 55: uint16(24739), + 56: uint16(24713), + 57: uint16(24736), + 58: uint16(24744), + 59: uint16(24779), + 60: uint16(24756), + 61: uint16(24806), + 62: uint16(24765), + 63: uint16(24773), + 64: uint16(24763), + 65: uint16(24757), + 66: uint16(24796), + 67: uint16(24764), + 68: uint16(24792), + 69: uint16(24789), + 70: uint16(24774), + 71: uint16(24799), + 72: uint16(24760), + 73: uint16(24794), + 74: uint16(24775), + 75: uint16(25114), + 76: uint16(25115), + 77: uint16(25160), + 78: uint16(25504), + 79: uint16(25511), + 80: uint16(25458), + 81: uint16(25494), + 82: uint16(25506), + 83: uint16(25509), + 84: uint16(25463), + 85: uint16(25447), + 86: uint16(25496), + 87: uint16(25514), + 88: uint16(25457), + 89: uint16(25513), + 90: uint16(25481), + 91: uint16(25475), + 92: uint16(25499), + 93: uint16(25451), + 94: uint16(25512), + 95: uint16(25476), + 96: uint16(25480), + 97: uint16(25497), + 98: uint16(25505), + 99: uint16(25516), + 100: uint16(25490), + 101: uint16(25487), + 102: uint16(25472), + 103: uint16(25467), + 104: uint16(25449), + 105: uint16(25448), + 106: uint16(25466), + 107: uint16(25949), + 108: uint16(25942), + 109: uint16(25937), + 110: uint16(25945), + 111: uint16(25943), + 112: uint16(21855), + 113: uint16(25935), + 114: uint16(25944), + 115: uint16(25941), + 116: uint16(25940), + 117: uint16(26012), + 118: uint16(26011), + 119: uint16(26028), + 120: uint16(26063), + 121: uint16(26059), + 122: uint16(26060), + 123: uint16(26062), + 124: uint16(26205), + 125: uint16(26202), + 126: uint16(26212), + 127: uint16(26216), + 128: uint16(26214), + 129: uint16(26206), + 130: uint16(26361), + 131: uint16(21207), + 132: uint16(26395), + 133: uint16(26753), + 134: uint16(26799), + 135: uint16(26786), + 136: uint16(26771), + 137: uint16(26805), + 138: uint16(26751), + 139: uint16(26742), + 140: uint16(26801), + 141: uint16(26791), + 142: uint16(26775), + 143: uint16(26800), + 144: uint16(26755), + 145: uint16(26820), + 146: uint16(26797), + 147: uint16(26758), + 148: uint16(26757), + 149: uint16(26772), + 150: uint16(26781), + 151: uint16(26792), + 152: uint16(26783), + 153: uint16(26785), + 154: uint16(26754), + 155: uint16(27442), + 156: uint16(27578), + }, + 17: { + 0: uint16(27627), + 1: uint16(27628), + 2: uint16(27691), + 3: uint16(28046), + 4: uint16(28092), + 5: uint16(28147), + 6: uint16(28121), + 7: uint16(28082), + 8: uint16(28129), + 9: uint16(28108), + 10: uint16(28132), + 11: uint16(28155), + 12: uint16(28154), + 13: uint16(28165), + 14: uint16(28103), + 15: uint16(28107), + 16: uint16(28079), + 17: uint16(28113), + 18: uint16(28078), + 19: uint16(28126), + 20: uint16(28153), + 21: uint16(28088), + 22: uint16(28151), + 23: uint16(28149), + 24: uint16(28101), + 25: uint16(28114), + 26: uint16(28186), + 27: uint16(28085), + 28: uint16(28122), + 29: uint16(28139), + 30: uint16(28120), + 31: uint16(28138), + 32: uint16(28145), + 33: uint16(28142), + 34: uint16(28136), + 35: uint16(28102), + 36: uint16(28100), + 37: uint16(28074), + 38: uint16(28140), + 39: uint16(28095), + 40: uint16(28134), + 41: uint16(28921), + 42: uint16(28937), + 43: uint16(28938), + 44: uint16(28925), + 45: uint16(28911), + 46: uint16(29245), + 47: uint16(29309), + 48: uint16(29313), + 49: uint16(29468), + 50: uint16(29467), + 51: uint16(29462), + 52: uint16(29459), + 53: uint16(29465), + 54: uint16(29575), + 55: uint16(29701), + 56: uint16(29706), + 57: uint16(29699), + 58: uint16(29702), + 59: uint16(29694), + 60: uint16(29709), + 61: uint16(29920), + 62: uint16(29942), + 63: uint16(29943), + 64: uint16(29980), + 65: uint16(29986), + 66: uint16(30053), + 67: uint16(30054), + 68: uint16(30050), + 69: uint16(30064), + 70: uint16(30095), + 71: uint16(30164), + 72: uint16(30165), + 73: uint16(30133), + 74: uint16(30154), + 75: uint16(30157), + 76: uint16(30350), + 77: uint16(30420), + 78: uint16(30418), + 79: uint16(30427), + 80: uint16(30519), + 81: uint16(30526), + 82: uint16(30524), + 83: uint16(30518), + 84: uint16(30520), + 85: uint16(30522), + 86: uint16(30827), + 87: uint16(30787), + 88: uint16(30798), + 89: uint16(31077), + 90: uint16(31080), + 91: uint16(31085), + 92: uint16(31227), + 93: uint16(31378), + 94: uint16(31381), + 95: uint16(31520), + 96: uint16(31528), + 97: uint16(31515), + 98: uint16(31532), + 99: uint16(31526), + 100: uint16(31513), + 101: uint16(31518), + 102: uint16(31534), + 103: uint16(31890), + 104: uint16(31895), + 105: uint16(31893), + 106: uint16(32070), + 107: uint16(32067), + 108: uint16(32113), + 109: uint16(32046), + 110: uint16(32057), + 111: uint16(32060), + 112: uint16(32064), + 113: uint16(32048), + 114: uint16(32051), + 115: uint16(32068), + 116: uint16(32047), + 117: uint16(32066), + 118: uint16(32050), + 119: uint16(32049), + 120: uint16(32573), + 121: uint16(32670), + 122: uint16(32666), + 123: uint16(32716), + 124: uint16(32718), + 125: uint16(32722), + 126: uint16(32796), + 127: uint16(32842), + 128: uint16(32838), + 129: uint16(33071), + 130: uint16(33046), + 131: uint16(33059), + 132: uint16(33067), + 133: uint16(33065), + 134: uint16(33072), + 135: uint16(33060), + 136: uint16(33282), + 137: uint16(33333), + 138: uint16(33335), + 139: uint16(33334), + 140: uint16(33337), + 141: uint16(33678), + 142: uint16(33694), + 143: uint16(33688), + 144: uint16(33656), + 145: uint16(33698), + 146: uint16(33686), + 147: uint16(33725), + 148: uint16(33707), + 149: uint16(33682), + 150: uint16(33674), + 151: uint16(33683), + 152: uint16(33673), + 153: uint16(33696), + 154: uint16(33655), + 155: uint16(33659), + 156: uint16(33660), + }, + 18: { + 0: uint16(33670), + 1: uint16(33703), + 2: uint16(34389), + 3: uint16(24426), + 4: uint16(34503), + 5: uint16(34496), + 6: uint16(34486), + 7: uint16(34500), + 8: uint16(34485), + 9: uint16(34502), + 10: uint16(34507), + 11: uint16(34481), + 12: uint16(34479), + 13: uint16(34505), + 14: uint16(34899), + 15: uint16(34974), + 16: uint16(34952), + 17: uint16(34987), + 18: uint16(34962), + 19: uint16(34966), + 20: uint16(34957), + 21: uint16(34955), + 22: uint16(35219), + 23: uint16(35215), + 24: uint16(35370), + 25: uint16(35357), + 26: uint16(35363), + 27: uint16(35365), + 28: uint16(35377), + 29: uint16(35373), + 30: uint16(35359), + 31: uint16(35355), + 32: uint16(35362), + 33: uint16(35913), + 34: uint16(35930), + 35: uint16(36009), + 36: uint16(36012), + 37: uint16(36011), + 38: uint16(36008), + 39: uint16(36010), + 40: uint16(36007), + 41: uint16(36199), + 42: uint16(36198), + 43: uint16(36286), + 44: uint16(36282), + 45: uint16(36571), + 46: uint16(36575), + 47: uint16(36889), + 48: uint16(36877), + 49: uint16(36890), + 50: uint16(36887), + 51: uint16(36899), + 52: uint16(36895), + 53: uint16(36893), + 54: uint16(36880), + 55: uint16(36885), + 56: uint16(36894), + 57: uint16(36896), + 58: uint16(36879), + 59: uint16(36898), + 60: uint16(36886), + 61: uint16(36891), + 62: uint16(36884), + 63: uint16(37096), + 64: uint16(37101), + 65: uint16(37117), + 66: uint16(37207), + 67: uint16(37326), + 68: uint16(37365), + 69: uint16(37350), + 70: uint16(37347), + 71: uint16(37351), + 72: uint16(37357), + 73: uint16(37353), + 74: uint16(38281), + 75: uint16(38506), + 76: uint16(38517), + 77: uint16(38515), + 78: uint16(38520), + 79: uint16(38512), + 80: uint16(38516), + 81: uint16(38518), + 82: uint16(38519), + 83: uint16(38508), + 84: uint16(38592), + 85: uint16(38634), + 86: uint16(38633), + 87: uint16(31456), + 88: uint16(31455), + 89: uint16(38914), + 90: uint16(38915), + 91: uint16(39770), + 92: uint16(40165), + 93: uint16(40565), + 94: uint16(40575), + 95: uint16(40613), + 96: uint16(40635), + 97: uint16(20642), + 98: uint16(20621), + 99: uint16(20613), + 100: uint16(20633), + 101: uint16(20625), + 102: uint16(20608), + 103: uint16(20630), + 104: uint16(20632), + 105: uint16(20634), + 106: uint16(26368), + 107: uint16(20977), + 108: uint16(21106), + 109: uint16(21108), + 110: uint16(21109), + 111: uint16(21097), + 112: uint16(21214), + 113: uint16(21213), + 114: uint16(21211), + 115: uint16(21338), + 116: uint16(21413), + 117: uint16(21883), + 118: uint16(21888), + 119: uint16(21927), + 120: uint16(21884), + 121: uint16(21898), + 122: uint16(21917), + 123: uint16(21912), + 124: uint16(21890), + 125: uint16(21916), + 126: uint16(21930), + 127: uint16(21908), + 128: uint16(21895), + 129: uint16(21899), + 130: uint16(21891), + 131: uint16(21939), + 132: uint16(21934), + 133: uint16(21919), + 134: uint16(21822), + 135: uint16(21938), + 136: uint16(21914), + 137: uint16(21947), + 138: uint16(21932), + 139: uint16(21937), + 140: uint16(21886), + 141: uint16(21897), + 142: uint16(21931), + 143: uint16(21913), + 144: uint16(22285), + 145: uint16(22575), + 146: uint16(22570), + 147: uint16(22580), + 148: uint16(22564), + 149: uint16(22576), + 150: uint16(22577), + 151: uint16(22561), + 152: uint16(22557), + 153: uint16(22560), + 154: uint16(22777), + 155: uint16(22778), + 156: uint16(22880), + }, + 19: { + 0: uint16(23159), + 1: uint16(23194), + 2: uint16(23167), + 3: uint16(23186), + 4: uint16(23195), + 5: uint16(23207), + 6: uint16(23411), + 7: uint16(23409), + 8: uint16(23506), + 9: uint16(23500), + 10: uint16(23507), + 11: uint16(23504), + 12: uint16(23562), + 13: uint16(23563), + 14: uint16(23601), + 15: uint16(23884), + 16: uint16(23888), + 17: uint16(23860), + 18: uint16(23879), + 19: uint16(24061), + 20: uint16(24133), + 21: uint16(24125), + 22: uint16(24128), + 23: uint16(24131), + 24: uint16(24190), + 25: uint16(24266), + 26: uint16(24257), + 27: uint16(24258), + 28: uint16(24260), + 29: uint16(24380), + 30: uint16(24429), + 31: uint16(24489), + 32: uint16(24490), + 33: uint16(24488), + 34: uint16(24785), + 35: uint16(24801), + 36: uint16(24754), + 37: uint16(24758), + 38: uint16(24800), + 39: uint16(24860), + 40: uint16(24867), + 41: uint16(24826), + 42: uint16(24853), + 43: uint16(24816), + 44: uint16(24827), + 45: uint16(24820), + 46: uint16(24936), + 47: uint16(24817), + 48: uint16(24846), + 49: uint16(24822), + 50: uint16(24841), + 51: uint16(24832), + 52: uint16(24850), + 53: uint16(25119), + 54: uint16(25161), + 55: uint16(25507), + 56: uint16(25484), + 57: uint16(25551), + 58: uint16(25536), + 59: uint16(25577), + 60: uint16(25545), + 61: uint16(25542), + 62: uint16(25549), + 63: uint16(25554), + 64: uint16(25571), + 65: uint16(25552), + 66: uint16(25569), + 67: uint16(25558), + 68: uint16(25581), + 69: uint16(25582), + 70: uint16(25462), + 71: uint16(25588), + 72: uint16(25578), + 73: uint16(25563), + 74: uint16(25682), + 75: uint16(25562), + 76: uint16(25593), + 77: uint16(25950), + 78: uint16(25958), + 79: uint16(25954), + 80: uint16(25955), + 81: uint16(26001), + 82: uint16(26000), + 83: uint16(26031), + 84: uint16(26222), + 85: uint16(26224), + 86: uint16(26228), + 87: uint16(26230), + 88: uint16(26223), + 89: uint16(26257), + 90: uint16(26234), + 91: uint16(26238), + 92: uint16(26231), + 93: uint16(26366), + 94: uint16(26367), + 95: uint16(26399), + 96: uint16(26397), + 97: uint16(26874), + 98: uint16(26837), + 99: uint16(26848), + 100: uint16(26840), + 101: uint16(26839), + 102: uint16(26885), + 103: uint16(26847), + 104: uint16(26869), + 105: uint16(26862), + 106: uint16(26855), + 107: uint16(26873), + 108: uint16(26834), + 109: uint16(26866), + 110: uint16(26851), + 111: uint16(26827), + 112: uint16(26829), + 113: uint16(26893), + 114: uint16(26898), + 115: uint16(26894), + 116: uint16(26825), + 117: uint16(26842), + 118: uint16(26990), + 119: uint16(26875), + 120: uint16(27454), + 121: uint16(27450), + 122: uint16(27453), + 123: uint16(27544), + 124: uint16(27542), + 125: uint16(27580), + 126: uint16(27631), + 127: uint16(27694), + 128: uint16(27695), + 129: uint16(27692), + 130: uint16(28207), + 131: uint16(28216), + 132: uint16(28244), + 133: uint16(28193), + 134: uint16(28210), + 135: uint16(28263), + 136: uint16(28234), + 137: uint16(28192), + 138: uint16(28197), + 139: uint16(28195), + 140: uint16(28187), + 141: uint16(28251), + 142: uint16(28248), + 143: uint16(28196), + 144: uint16(28246), + 145: uint16(28270), + 146: uint16(28205), + 147: uint16(28198), + 148: uint16(28271), + 149: uint16(28212), + 150: uint16(28237), + 151: uint16(28218), + 152: uint16(28204), + 153: uint16(28227), + 154: uint16(28189), + 155: uint16(28222), + 156: uint16(28363), + }, + 20: { + 0: uint16(28297), + 1: uint16(28185), + 2: uint16(28238), + 3: uint16(28259), + 4: uint16(28228), + 5: uint16(28274), + 6: uint16(28265), + 7: uint16(28255), + 8: uint16(28953), + 9: uint16(28954), + 10: uint16(28966), + 11: uint16(28976), + 12: uint16(28961), + 13: uint16(28982), + 14: uint16(29038), + 15: uint16(28956), + 16: uint16(29260), + 17: uint16(29316), + 18: uint16(29312), + 19: uint16(29494), + 20: uint16(29477), + 21: uint16(29492), + 22: uint16(29481), + 23: uint16(29754), + 24: uint16(29738), + 25: uint16(29747), + 26: uint16(29730), + 27: uint16(29733), + 28: uint16(29749), + 29: uint16(29750), + 30: uint16(29748), + 31: uint16(29743), + 32: uint16(29723), + 33: uint16(29734), + 34: uint16(29736), + 35: uint16(29989), + 36: uint16(29990), + 37: uint16(30059), + 38: uint16(30058), + 39: uint16(30178), + 40: uint16(30171), + 41: uint16(30179), + 42: uint16(30169), + 43: uint16(30168), + 44: uint16(30174), + 45: uint16(30176), + 46: uint16(30331), + 47: uint16(30332), + 48: uint16(30358), + 49: uint16(30355), + 50: uint16(30388), + 51: uint16(30428), + 52: uint16(30543), + 53: uint16(30701), + 54: uint16(30813), + 55: uint16(30828), + 56: uint16(30831), + 57: uint16(31245), + 58: uint16(31240), + 59: uint16(31243), + 60: uint16(31237), + 61: uint16(31232), + 62: uint16(31384), + 63: uint16(31383), + 64: uint16(31382), + 65: uint16(31461), + 66: uint16(31459), + 67: uint16(31561), + 68: uint16(31574), + 69: uint16(31558), + 70: uint16(31568), + 71: uint16(31570), + 72: uint16(31572), + 73: uint16(31565), + 74: uint16(31563), + 75: uint16(31567), + 76: uint16(31569), + 77: uint16(31903), + 78: uint16(31909), + 79: uint16(32094), + 80: uint16(32080), + 81: uint16(32104), + 82: uint16(32085), + 83: uint16(32043), + 84: uint16(32110), + 85: uint16(32114), + 86: uint16(32097), + 87: uint16(32102), + 88: uint16(32098), + 89: uint16(32112), + 90: uint16(32115), + 91: uint16(21892), + 92: uint16(32724), + 93: uint16(32725), + 94: uint16(32779), + 95: uint16(32850), + 96: uint16(32901), + 97: uint16(33109), + 98: uint16(33108), + 99: uint16(33099), + 100: uint16(33105), + 101: uint16(33102), + 102: uint16(33081), + 103: uint16(33094), + 104: uint16(33086), + 105: uint16(33100), + 106: uint16(33107), + 107: uint16(33140), + 108: uint16(33298), + 109: uint16(33308), + 110: uint16(33769), + 111: uint16(33795), + 112: uint16(33784), + 113: uint16(33805), + 114: uint16(33760), + 115: uint16(33733), + 116: uint16(33803), + 117: uint16(33729), + 118: uint16(33775), + 119: uint16(33777), + 120: uint16(33780), + 121: uint16(33879), + 122: uint16(33802), + 123: uint16(33776), + 124: uint16(33804), + 125: uint16(33740), + 126: uint16(33789), + 127: uint16(33778), + 128: uint16(33738), + 129: uint16(33848), + 130: uint16(33806), + 131: uint16(33796), + 132: uint16(33756), + 133: uint16(33799), + 134: uint16(33748), + 135: uint16(33759), + 136: uint16(34395), + 137: uint16(34527), + 138: uint16(34521), + 139: uint16(34541), + 140: uint16(34516), + 141: uint16(34523), + 142: uint16(34532), + 143: uint16(34512), + 144: uint16(34526), + 145: uint16(34903), + 146: uint16(35009), + 147: uint16(35010), + 148: uint16(34993), + 149: uint16(35203), + 150: uint16(35222), + 151: uint16(35387), + 152: uint16(35424), + 153: uint16(35413), + 154: uint16(35422), + 155: uint16(35388), + 156: uint16(35393), + }, + 21: { + 0: uint16(35412), + 1: uint16(35419), + 2: uint16(35408), + 3: uint16(35398), + 4: uint16(35380), + 5: uint16(35386), + 6: uint16(35382), + 7: uint16(35414), + 8: uint16(35937), + 9: uint16(35970), + 10: uint16(36015), + 11: uint16(36028), + 12: uint16(36019), + 13: uint16(36029), + 14: uint16(36033), + 15: uint16(36027), + 16: uint16(36032), + 17: uint16(36020), + 18: uint16(36023), + 19: uint16(36022), + 20: uint16(36031), + 21: uint16(36024), + 22: uint16(36234), + 23: uint16(36229), + 24: uint16(36225), + 25: uint16(36302), + 26: uint16(36317), + 27: uint16(36299), + 28: uint16(36314), + 29: uint16(36305), + 30: uint16(36300), + 31: uint16(36315), + 32: uint16(36294), + 33: uint16(36603), + 34: uint16(36600), + 35: uint16(36604), + 36: uint16(36764), + 37: uint16(36910), + 38: uint16(36917), + 39: uint16(36913), + 40: uint16(36920), + 41: uint16(36914), + 42: uint16(36918), + 43: uint16(37122), + 44: uint16(37109), + 45: uint16(37129), + 46: uint16(37118), + 47: uint16(37219), + 48: uint16(37221), + 49: uint16(37327), + 50: uint16(37396), + 51: uint16(37397), + 52: uint16(37411), + 53: uint16(37385), + 54: uint16(37406), + 55: uint16(37389), + 56: uint16(37392), + 57: uint16(37383), + 58: uint16(37393), + 59: uint16(38292), + 60: uint16(38287), + 61: uint16(38283), + 62: uint16(38289), + 63: uint16(38291), + 64: uint16(38290), + 65: uint16(38286), + 66: uint16(38538), + 67: uint16(38542), + 68: uint16(38539), + 69: uint16(38525), + 70: uint16(38533), + 71: uint16(38534), + 72: uint16(38541), + 73: uint16(38514), + 74: uint16(38532), + 75: uint16(38593), + 76: uint16(38597), + 77: uint16(38596), + 78: uint16(38598), + 79: uint16(38599), + 80: uint16(38639), + 81: uint16(38642), + 82: uint16(38860), + 83: uint16(38917), + 84: uint16(38918), + 85: uint16(38920), + 86: uint16(39143), + 87: uint16(39146), + 88: uint16(39151), + 89: uint16(39145), + 90: uint16(39154), + 91: uint16(39149), + 92: uint16(39342), + 93: uint16(39341), + 94: uint16(40643), + 95: uint16(40653), + 96: uint16(40657), + 97: uint16(20098), + 98: uint16(20653), + 99: uint16(20661), + 100: uint16(20658), + 101: uint16(20659), + 102: uint16(20677), + 103: uint16(20670), + 104: uint16(20652), + 105: uint16(20663), + 106: uint16(20667), + 107: uint16(20655), + 108: uint16(20679), + 109: uint16(21119), + 110: uint16(21111), + 111: uint16(21117), + 112: uint16(21215), + 113: uint16(21222), + 114: uint16(21220), + 115: uint16(21218), + 116: uint16(21219), + 117: uint16(21295), + 118: uint16(21983), + 119: uint16(21992), + 120: uint16(21971), + 121: uint16(21990), + 122: uint16(21966), + 123: uint16(21980), + 124: uint16(21959), + 125: uint16(21969), + 126: uint16(21987), + 127: uint16(21988), + 128: uint16(21999), + 129: uint16(21978), + 130: uint16(21985), + 131: uint16(21957), + 132: uint16(21958), + 133: uint16(21989), + 134: uint16(21961), + 135: uint16(22290), + 136: uint16(22291), + 137: uint16(22622), + 138: uint16(22609), + 139: uint16(22616), + 140: uint16(22615), + 141: uint16(22618), + 142: uint16(22612), + 143: uint16(22635), + 144: uint16(22604), + 145: uint16(22637), + 146: uint16(22602), + 147: uint16(22626), + 148: uint16(22610), + 149: uint16(22603), + 150: uint16(22887), + 151: uint16(23233), + 152: uint16(23241), + 153: uint16(23244), + 154: uint16(23230), + 155: uint16(23229), + 156: uint16(23228), + }, + 22: { + 0: uint16(23219), + 1: uint16(23234), + 2: uint16(23218), + 3: uint16(23913), + 4: uint16(23919), + 5: uint16(24140), + 6: uint16(24185), + 7: uint16(24265), + 8: uint16(24264), + 9: uint16(24338), + 10: uint16(24409), + 11: uint16(24492), + 12: uint16(24494), + 13: uint16(24858), + 14: uint16(24847), + 15: uint16(24904), + 16: uint16(24863), + 17: uint16(24819), + 18: uint16(24859), + 19: uint16(24825), + 20: uint16(24833), + 21: uint16(24840), + 22: uint16(24910), + 23: uint16(24908), + 24: uint16(24900), + 25: uint16(24909), + 26: uint16(24894), + 27: uint16(24884), + 28: uint16(24871), + 29: uint16(24845), + 30: uint16(24838), + 31: uint16(24887), + 32: uint16(25121), + 33: uint16(25122), + 34: uint16(25619), + 35: uint16(25662), + 36: uint16(25630), + 37: uint16(25642), + 38: uint16(25645), + 39: uint16(25661), + 40: uint16(25644), + 41: uint16(25615), + 42: uint16(25628), + 43: uint16(25620), + 44: uint16(25613), + 45: uint16(25654), + 46: uint16(25622), + 47: uint16(25623), + 48: uint16(25606), + 49: uint16(25964), + 50: uint16(26015), + 51: uint16(26032), + 52: uint16(26263), + 53: uint16(26249), + 54: uint16(26247), + 55: uint16(26248), + 56: uint16(26262), + 57: uint16(26244), + 58: uint16(26264), + 59: uint16(26253), + 60: uint16(26371), + 61: uint16(27028), + 62: uint16(26989), + 63: uint16(26970), + 64: uint16(26999), + 65: uint16(26976), + 66: uint16(26964), + 67: uint16(26997), + 68: uint16(26928), + 69: uint16(27010), + 70: uint16(26954), + 71: uint16(26984), + 72: uint16(26987), + 73: uint16(26974), + 74: uint16(26963), + 75: uint16(27001), + 76: uint16(27014), + 77: uint16(26973), + 78: uint16(26979), + 79: uint16(26971), + 80: uint16(27463), + 81: uint16(27506), + 82: uint16(27584), + 83: uint16(27583), + 84: uint16(27603), + 85: uint16(27645), + 86: uint16(28322), + 87: uint16(28335), + 88: uint16(28371), + 89: uint16(28342), + 90: uint16(28354), + 91: uint16(28304), + 92: uint16(28317), + 93: uint16(28359), + 94: uint16(28357), + 95: uint16(28325), + 96: uint16(28312), + 97: uint16(28348), + 98: uint16(28346), + 99: uint16(28331), + 100: uint16(28369), + 101: uint16(28310), + 102: uint16(28316), + 103: uint16(28356), + 104: uint16(28372), + 105: uint16(28330), + 106: uint16(28327), + 107: uint16(28340), + 108: uint16(29006), + 109: uint16(29017), + 110: uint16(29033), + 111: uint16(29028), + 112: uint16(29001), + 113: uint16(29031), + 114: uint16(29020), + 115: uint16(29036), + 116: uint16(29030), + 117: uint16(29004), + 118: uint16(29029), + 119: uint16(29022), + 120: uint16(28998), + 121: uint16(29032), + 122: uint16(29014), + 123: uint16(29242), + 124: uint16(29266), + 125: uint16(29495), + 126: uint16(29509), + 127: uint16(29503), + 128: uint16(29502), + 129: uint16(29807), + 130: uint16(29786), + 131: uint16(29781), + 132: uint16(29791), + 133: uint16(29790), + 134: uint16(29761), + 135: uint16(29759), + 136: uint16(29785), + 137: uint16(29787), + 138: uint16(29788), + 139: uint16(30070), + 140: uint16(30072), + 141: uint16(30208), + 142: uint16(30192), + 143: uint16(30209), + 144: uint16(30194), + 145: uint16(30193), + 146: uint16(30202), + 147: uint16(30207), + 148: uint16(30196), + 149: uint16(30195), + 150: uint16(30430), + 151: uint16(30431), + 152: uint16(30555), + 153: uint16(30571), + 154: uint16(30566), + 155: uint16(30558), + 156: uint16(30563), + }, + 23: { + 0: uint16(30585), + 1: uint16(30570), + 2: uint16(30572), + 3: uint16(30556), + 4: uint16(30565), + 5: uint16(30568), + 6: uint16(30562), + 7: uint16(30702), + 8: uint16(30862), + 9: uint16(30896), + 10: uint16(30871), + 11: uint16(30872), + 12: uint16(30860), + 13: uint16(30857), + 14: uint16(30844), + 15: uint16(30865), + 16: uint16(30867), + 17: uint16(30847), + 18: uint16(31098), + 19: uint16(31103), + 20: uint16(31105), + 21: uint16(33836), + 22: uint16(31165), + 23: uint16(31260), + 24: uint16(31258), + 25: uint16(31264), + 26: uint16(31252), + 27: uint16(31263), + 28: uint16(31262), + 29: uint16(31391), + 30: uint16(31392), + 31: uint16(31607), + 32: uint16(31680), + 33: uint16(31584), + 34: uint16(31598), + 35: uint16(31591), + 36: uint16(31921), + 37: uint16(31923), + 38: uint16(31925), + 39: uint16(32147), + 40: uint16(32121), + 41: uint16(32145), + 42: uint16(32129), + 43: uint16(32143), + 44: uint16(32091), + 45: uint16(32622), + 46: uint16(32617), + 47: uint16(32618), + 48: uint16(32626), + 49: uint16(32681), + 50: uint16(32680), + 51: uint16(32676), + 52: uint16(32854), + 53: uint16(32856), + 54: uint16(32902), + 55: uint16(32900), + 56: uint16(33137), + 57: uint16(33136), + 58: uint16(33144), + 59: uint16(33125), + 60: uint16(33134), + 61: uint16(33139), + 62: uint16(33131), + 63: uint16(33145), + 64: uint16(33146), + 65: uint16(33126), + 66: uint16(33285), + 67: uint16(33351), + 68: uint16(33922), + 69: uint16(33911), + 70: uint16(33853), + 71: uint16(33841), + 72: uint16(33909), + 73: uint16(33894), + 74: uint16(33899), + 75: uint16(33865), + 76: uint16(33900), + 77: uint16(33883), + 78: uint16(33852), + 79: uint16(33845), + 80: uint16(33889), + 81: uint16(33891), + 82: uint16(33897), + 83: uint16(33901), + 84: uint16(33862), + 85: uint16(34398), + 86: uint16(34396), + 87: uint16(34399), + 88: uint16(34553), + 89: uint16(34579), + 90: uint16(34568), + 91: uint16(34567), + 92: uint16(34560), + 93: uint16(34558), + 94: uint16(34555), + 95: uint16(34562), + 96: uint16(34563), + 97: uint16(34566), + 98: uint16(34570), + 99: uint16(34905), + 100: uint16(35039), + 101: uint16(35028), + 102: uint16(35033), + 103: uint16(35036), + 104: uint16(35032), + 105: uint16(35037), + 106: uint16(35041), + 107: uint16(35018), + 108: uint16(35029), + 109: uint16(35026), + 110: uint16(35228), + 111: uint16(35299), + 112: uint16(35435), + 113: uint16(35442), + 114: uint16(35443), + 115: uint16(35430), + 116: uint16(35433), + 117: uint16(35440), + 118: uint16(35463), + 119: uint16(35452), + 120: uint16(35427), + 121: uint16(35488), + 122: uint16(35441), + 123: uint16(35461), + 124: uint16(35437), + 125: uint16(35426), + 126: uint16(35438), + 127: uint16(35436), + 128: uint16(35449), + 129: uint16(35451), + 130: uint16(35390), + 131: uint16(35432), + 132: uint16(35938), + 133: uint16(35978), + 134: uint16(35977), + 135: uint16(36042), + 136: uint16(36039), + 137: uint16(36040), + 138: uint16(36036), + 139: uint16(36018), + 140: uint16(36035), + 141: uint16(36034), + 142: uint16(36037), + 143: uint16(36321), + 144: uint16(36319), + 145: uint16(36328), + 146: uint16(36335), + 147: uint16(36339), + 148: uint16(36346), + 149: uint16(36330), + 150: uint16(36324), + 151: uint16(36326), + 152: uint16(36530), + 153: uint16(36611), + 154: uint16(36617), + 155: uint16(36606), + 156: uint16(36618), + }, + 24: { + 0: uint16(36767), + 1: uint16(36786), + 2: uint16(36939), + 3: uint16(36938), + 4: uint16(36947), + 5: uint16(36930), + 6: uint16(36948), + 7: uint16(36924), + 8: uint16(36949), + 9: uint16(36944), + 10: uint16(36935), + 11: uint16(36943), + 12: uint16(36942), + 13: uint16(36941), + 14: uint16(36945), + 15: uint16(36926), + 16: uint16(36929), + 17: uint16(37138), + 18: uint16(37143), + 19: uint16(37228), + 20: uint16(37226), + 21: uint16(37225), + 22: uint16(37321), + 23: uint16(37431), + 24: uint16(37463), + 25: uint16(37432), + 26: uint16(37437), + 27: uint16(37440), + 28: uint16(37438), + 29: uint16(37467), + 30: uint16(37451), + 31: uint16(37476), + 32: uint16(37457), + 33: uint16(37428), + 34: uint16(37449), + 35: uint16(37453), + 36: uint16(37445), + 37: uint16(37433), + 38: uint16(37439), + 39: uint16(37466), + 40: uint16(38296), + 41: uint16(38552), + 42: uint16(38548), + 43: uint16(38549), + 44: uint16(38605), + 45: uint16(38603), + 46: uint16(38601), + 47: uint16(38602), + 48: uint16(38647), + 49: uint16(38651), + 50: uint16(38649), + 51: uint16(38646), + 52: uint16(38742), + 53: uint16(38772), + 54: uint16(38774), + 55: uint16(38928), + 56: uint16(38929), + 57: uint16(38931), + 58: uint16(38922), + 59: uint16(38930), + 60: uint16(38924), + 61: uint16(39164), + 62: uint16(39156), + 63: uint16(39165), + 64: uint16(39166), + 65: uint16(39347), + 66: uint16(39345), + 67: uint16(39348), + 68: uint16(39649), + 69: uint16(40169), + 70: uint16(40578), + 71: uint16(40718), + 72: uint16(40723), + 73: uint16(40736), + 74: uint16(20711), + 75: uint16(20718), + 76: uint16(20709), + 77: uint16(20694), + 78: uint16(20717), + 79: uint16(20698), + 80: uint16(20693), + 81: uint16(20687), + 82: uint16(20689), + 83: uint16(20721), + 84: uint16(20686), + 85: uint16(20713), + 86: uint16(20834), + 87: uint16(20979), + 88: uint16(21123), + 89: uint16(21122), + 90: uint16(21297), + 91: uint16(21421), + 92: uint16(22014), + 93: uint16(22016), + 94: uint16(22043), + 95: uint16(22039), + 96: uint16(22013), + 97: uint16(22036), + 98: uint16(22022), + 99: uint16(22025), + 100: uint16(22029), + 101: uint16(22030), + 102: uint16(22007), + 103: uint16(22038), + 104: uint16(22047), + 105: uint16(22024), + 106: uint16(22032), + 107: uint16(22006), + 108: uint16(22296), + 109: uint16(22294), + 110: uint16(22645), + 111: uint16(22654), + 112: uint16(22659), + 113: uint16(22675), + 114: uint16(22666), + 115: uint16(22649), + 116: uint16(22661), + 117: uint16(22653), + 118: uint16(22781), + 119: uint16(22821), + 120: uint16(22818), + 121: uint16(22820), + 122: uint16(22890), + 123: uint16(22889), + 124: uint16(23265), + 125: uint16(23270), + 126: uint16(23273), + 127: uint16(23255), + 128: uint16(23254), + 129: uint16(23256), + 130: uint16(23267), + 131: uint16(23413), + 132: uint16(23518), + 133: uint16(23527), + 134: uint16(23521), + 135: uint16(23525), + 136: uint16(23526), + 137: uint16(23528), + 138: uint16(23522), + 139: uint16(23524), + 140: uint16(23519), + 141: uint16(23565), + 142: uint16(23650), + 143: uint16(23940), + 144: uint16(23943), + 145: uint16(24155), + 146: uint16(24163), + 147: uint16(24149), + 148: uint16(24151), + 149: uint16(24148), + 150: uint16(24275), + 151: uint16(24278), + 152: uint16(24330), + 153: uint16(24390), + 154: uint16(24432), + 155: uint16(24505), + 156: uint16(24903), + }, + 25: { + 0: uint16(24895), + 1: uint16(24907), + 2: uint16(24951), + 3: uint16(24930), + 4: uint16(24931), + 5: uint16(24927), + 6: uint16(24922), + 7: uint16(24920), + 8: uint16(24949), + 9: uint16(25130), + 10: uint16(25735), + 11: uint16(25688), + 12: uint16(25684), + 13: uint16(25764), + 14: uint16(25720), + 15: uint16(25695), + 16: uint16(25722), + 17: uint16(25681), + 18: uint16(25703), + 19: uint16(25652), + 20: uint16(25709), + 21: uint16(25723), + 22: uint16(25970), + 23: uint16(26017), + 24: uint16(26071), + 25: uint16(26070), + 26: uint16(26274), + 27: uint16(26280), + 28: uint16(26269), + 29: uint16(27036), + 30: uint16(27048), + 31: uint16(27029), + 32: uint16(27073), + 33: uint16(27054), + 34: uint16(27091), + 35: uint16(27083), + 36: uint16(27035), + 37: uint16(27063), + 38: uint16(27067), + 39: uint16(27051), + 40: uint16(27060), + 41: uint16(27088), + 42: uint16(27085), + 43: uint16(27053), + 44: uint16(27084), + 45: uint16(27046), + 46: uint16(27075), + 47: uint16(27043), + 48: uint16(27465), + 49: uint16(27468), + 50: uint16(27699), + 51: uint16(28467), + 52: uint16(28436), + 53: uint16(28414), + 54: uint16(28435), + 55: uint16(28404), + 56: uint16(28457), + 57: uint16(28478), + 58: uint16(28448), + 59: uint16(28460), + 60: uint16(28431), + 61: uint16(28418), + 62: uint16(28450), + 63: uint16(28415), + 64: uint16(28399), + 65: uint16(28422), + 66: uint16(28465), + 67: uint16(28472), + 68: uint16(28466), + 69: uint16(28451), + 70: uint16(28437), + 71: uint16(28459), + 72: uint16(28463), + 73: uint16(28552), + 74: uint16(28458), + 75: uint16(28396), + 76: uint16(28417), + 77: uint16(28402), + 78: uint16(28364), + 79: uint16(28407), + 80: uint16(29076), + 81: uint16(29081), + 82: uint16(29053), + 83: uint16(29066), + 84: uint16(29060), + 85: uint16(29074), + 86: uint16(29246), + 87: uint16(29330), + 88: uint16(29334), + 89: uint16(29508), + 90: uint16(29520), + 91: uint16(29796), + 92: uint16(29795), + 93: uint16(29802), + 94: uint16(29808), + 95: uint16(29805), + 96: uint16(29956), + 97: uint16(30097), + 98: uint16(30247), + 99: uint16(30221), + 100: uint16(30219), + 101: uint16(30217), + 102: uint16(30227), + 103: uint16(30433), + 104: uint16(30435), + 105: uint16(30596), + 106: uint16(30589), + 107: uint16(30591), + 108: uint16(30561), + 109: uint16(30913), + 110: uint16(30879), + 111: uint16(30887), + 112: uint16(30899), + 113: uint16(30889), + 114: uint16(30883), + 115: uint16(31118), + 116: uint16(31119), + 117: uint16(31117), + 118: uint16(31278), + 119: uint16(31281), + 120: uint16(31402), + 121: uint16(31401), + 122: uint16(31469), + 123: uint16(31471), + 124: uint16(31649), + 125: uint16(31637), + 126: uint16(31627), + 127: uint16(31605), + 128: uint16(31639), + 129: uint16(31645), + 130: uint16(31636), + 131: uint16(31631), + 132: uint16(31672), + 133: uint16(31623), + 134: uint16(31620), + 135: uint16(31929), + 136: uint16(31933), + 137: uint16(31934), + 138: uint16(32187), + 139: uint16(32176), + 140: uint16(32156), + 141: uint16(32189), + 142: uint16(32190), + 143: uint16(32160), + 144: uint16(32202), + 145: uint16(32180), + 146: uint16(32178), + 147: uint16(32177), + 148: uint16(32186), + 149: uint16(32162), + 150: uint16(32191), + 151: uint16(32181), + 152: uint16(32184), + 153: uint16(32173), + 154: uint16(32210), + 155: uint16(32199), + 156: uint16(32172), + }, + 26: { + 0: uint16(32624), + 1: uint16(32736), + 2: uint16(32737), + 3: uint16(32735), + 4: uint16(32862), + 5: uint16(32858), + 6: uint16(32903), + 7: uint16(33104), + 8: uint16(33152), + 9: uint16(33167), + 10: uint16(33160), + 11: uint16(33162), + 12: uint16(33151), + 13: uint16(33154), + 14: uint16(33255), + 15: uint16(33274), + 16: uint16(33287), + 17: uint16(33300), + 18: uint16(33310), + 19: uint16(33355), + 20: uint16(33993), + 21: uint16(33983), + 22: uint16(33990), + 23: uint16(33988), + 24: uint16(33945), + 25: uint16(33950), + 26: uint16(33970), + 27: uint16(33948), + 28: uint16(33995), + 29: uint16(33976), + 30: uint16(33984), + 31: uint16(34003), + 32: uint16(33936), + 33: uint16(33980), + 34: uint16(34001), + 35: uint16(33994), + 36: uint16(34623), + 37: uint16(34588), + 38: uint16(34619), + 39: uint16(34594), + 40: uint16(34597), + 41: uint16(34612), + 42: uint16(34584), + 43: uint16(34645), + 44: uint16(34615), + 45: uint16(34601), + 46: uint16(35059), + 47: uint16(35074), + 48: uint16(35060), + 49: uint16(35065), + 50: uint16(35064), + 51: uint16(35069), + 52: uint16(35048), + 53: uint16(35098), + 54: uint16(35055), + 55: uint16(35494), + 56: uint16(35468), + 57: uint16(35486), + 58: uint16(35491), + 59: uint16(35469), + 60: uint16(35489), + 61: uint16(35475), + 62: uint16(35492), + 63: uint16(35498), + 64: uint16(35493), + 65: uint16(35496), + 66: uint16(35480), + 67: uint16(35473), + 68: uint16(35482), + 69: uint16(35495), + 70: uint16(35946), + 71: uint16(35981), + 72: uint16(35980), + 73: uint16(36051), + 74: uint16(36049), + 75: uint16(36050), + 76: uint16(36203), + 77: uint16(36249), + 78: uint16(36245), + 79: uint16(36348), + 80: uint16(36628), + 81: uint16(36626), + 82: uint16(36629), + 83: uint16(36627), + 84: uint16(36771), + 85: uint16(36960), + 86: uint16(36952), + 87: uint16(36956), + 88: uint16(36963), + 89: uint16(36953), + 90: uint16(36958), + 91: uint16(36962), + 92: uint16(36957), + 93: uint16(36955), + 94: uint16(37145), + 95: uint16(37144), + 96: uint16(37150), + 97: uint16(37237), + 98: uint16(37240), + 99: uint16(37239), + 100: uint16(37236), + 101: uint16(37496), + 102: uint16(37504), + 103: uint16(37509), + 104: uint16(37528), + 105: uint16(37526), + 106: uint16(37499), + 107: uint16(37523), + 108: uint16(37532), + 109: uint16(37544), + 110: uint16(37500), + 111: uint16(37521), + 112: uint16(38305), + 113: uint16(38312), + 114: uint16(38313), + 115: uint16(38307), + 116: uint16(38309), + 117: uint16(38308), + 118: uint16(38553), + 119: uint16(38556), + 120: uint16(38555), + 121: uint16(38604), + 122: uint16(38610), + 123: uint16(38656), + 124: uint16(38780), + 125: uint16(38789), + 126: uint16(38902), + 127: uint16(38935), + 128: uint16(38936), + 129: uint16(39087), + 130: uint16(39089), + 131: uint16(39171), + 132: uint16(39173), + 133: uint16(39180), + 134: uint16(39177), + 135: uint16(39361), + 136: uint16(39599), + 137: uint16(39600), + 138: uint16(39654), + 139: uint16(39745), + 140: uint16(39746), + 141: uint16(40180), + 142: uint16(40182), + 143: uint16(40179), + 144: uint16(40636), + 145: uint16(40763), + 146: uint16(40778), + 147: uint16(20740), + 148: uint16(20736), + 149: uint16(20731), + 150: uint16(20725), + 151: uint16(20729), + 152: uint16(20738), + 153: uint16(20744), + 154: uint16(20745), + 155: uint16(20741), + 156: uint16(20956), + }, + 27: { + 0: uint16(21127), + 1: uint16(21128), + 2: uint16(21129), + 3: uint16(21133), + 4: uint16(21130), + 5: uint16(21232), + 6: uint16(21426), + 7: uint16(22062), + 8: uint16(22075), + 9: uint16(22073), + 10: uint16(22066), + 11: uint16(22079), + 12: uint16(22068), + 13: uint16(22057), + 14: uint16(22099), + 15: uint16(22094), + 16: uint16(22103), + 17: uint16(22132), + 18: uint16(22070), + 19: uint16(22063), + 20: uint16(22064), + 21: uint16(22656), + 22: uint16(22687), + 23: uint16(22686), + 24: uint16(22707), + 25: uint16(22684), + 26: uint16(22702), + 27: uint16(22697), + 28: uint16(22694), + 29: uint16(22893), + 30: uint16(23305), + 31: uint16(23291), + 32: uint16(23307), + 33: uint16(23285), + 34: uint16(23308), + 35: uint16(23304), + 36: uint16(23534), + 37: uint16(23532), + 38: uint16(23529), + 39: uint16(23531), + 40: uint16(23652), + 41: uint16(23653), + 42: uint16(23965), + 43: uint16(23956), + 44: uint16(24162), + 45: uint16(24159), + 46: uint16(24161), + 47: uint16(24290), + 48: uint16(24282), + 49: uint16(24287), + 50: uint16(24285), + 51: uint16(24291), + 52: uint16(24288), + 53: uint16(24392), + 54: uint16(24433), + 55: uint16(24503), + 56: uint16(24501), + 57: uint16(24950), + 58: uint16(24935), + 59: uint16(24942), + 60: uint16(24925), + 61: uint16(24917), + 62: uint16(24962), + 63: uint16(24956), + 64: uint16(24944), + 65: uint16(24939), + 66: uint16(24958), + 67: uint16(24999), + 68: uint16(24976), + 69: uint16(25003), + 70: uint16(24974), + 71: uint16(25004), + 72: uint16(24986), + 73: uint16(24996), + 74: uint16(24980), + 75: uint16(25006), + 76: uint16(25134), + 77: uint16(25705), + 78: uint16(25711), + 79: uint16(25721), + 80: uint16(25758), + 81: uint16(25778), + 82: uint16(25736), + 83: uint16(25744), + 84: uint16(25776), + 85: uint16(25765), + 86: uint16(25747), + 87: uint16(25749), + 88: uint16(25769), + 89: uint16(25746), + 90: uint16(25774), + 91: uint16(25773), + 92: uint16(25771), + 93: uint16(25754), + 94: uint16(25772), + 95: uint16(25753), + 96: uint16(25762), + 97: uint16(25779), + 98: uint16(25973), + 99: uint16(25975), + 100: uint16(25976), + 101: uint16(26286), + 102: uint16(26283), + 103: uint16(26292), + 104: uint16(26289), + 105: uint16(27171), + 106: uint16(27167), + 107: uint16(27112), + 108: uint16(27137), + 109: uint16(27166), + 110: uint16(27161), + 111: uint16(27133), + 112: uint16(27169), + 113: uint16(27155), + 114: uint16(27146), + 115: uint16(27123), + 116: uint16(27138), + 117: uint16(27141), + 118: uint16(27117), + 119: uint16(27153), + 120: uint16(27472), + 121: uint16(27470), + 122: uint16(27556), + 123: uint16(27589), + 124: uint16(27590), + 125: uint16(28479), + 126: uint16(28540), + 127: uint16(28548), + 128: uint16(28497), + 129: uint16(28518), + 130: uint16(28500), + 131: uint16(28550), + 132: uint16(28525), + 133: uint16(28507), + 134: uint16(28536), + 135: uint16(28526), + 136: uint16(28558), + 137: uint16(28538), + 138: uint16(28528), + 139: uint16(28516), + 140: uint16(28567), + 141: uint16(28504), + 142: uint16(28373), + 143: uint16(28527), + 144: uint16(28512), + 145: uint16(28511), + 146: uint16(29087), + 147: uint16(29100), + 148: uint16(29105), + 149: uint16(29096), + 150: uint16(29270), + 151: uint16(29339), + 152: uint16(29518), + 153: uint16(29527), + 154: uint16(29801), + 155: uint16(29835), + 156: uint16(29827), + }, + 28: { + 0: uint16(29822), + 1: uint16(29824), + 2: uint16(30079), + 3: uint16(30240), + 4: uint16(30249), + 5: uint16(30239), + 6: uint16(30244), + 7: uint16(30246), + 8: uint16(30241), + 9: uint16(30242), + 10: uint16(30362), + 11: uint16(30394), + 12: uint16(30436), + 13: uint16(30606), + 14: uint16(30599), + 15: uint16(30604), + 16: uint16(30609), + 17: uint16(30603), + 18: uint16(30923), + 19: uint16(30917), + 20: uint16(30906), + 21: uint16(30922), + 22: uint16(30910), + 23: uint16(30933), + 24: uint16(30908), + 25: uint16(30928), + 26: uint16(31295), + 27: uint16(31292), + 28: uint16(31296), + 29: uint16(31293), + 30: uint16(31287), + 31: uint16(31291), + 32: uint16(31407), + 33: uint16(31406), + 34: uint16(31661), + 35: uint16(31665), + 36: uint16(31684), + 37: uint16(31668), + 38: uint16(31686), + 39: uint16(31687), + 40: uint16(31681), + 41: uint16(31648), + 42: uint16(31692), + 43: uint16(31946), + 44: uint16(32224), + 45: uint16(32244), + 46: uint16(32239), + 47: uint16(32251), + 48: uint16(32216), + 49: uint16(32236), + 50: uint16(32221), + 51: uint16(32232), + 52: uint16(32227), + 53: uint16(32218), + 54: uint16(32222), + 55: uint16(32233), + 56: uint16(32158), + 57: uint16(32217), + 58: uint16(32242), + 59: uint16(32249), + 60: uint16(32629), + 61: uint16(32631), + 62: uint16(32687), + 63: uint16(32745), + 64: uint16(32806), + 65: uint16(33179), + 66: uint16(33180), + 67: uint16(33181), + 68: uint16(33184), + 69: uint16(33178), + 70: uint16(33176), + 71: uint16(34071), + 72: uint16(34109), + 73: uint16(34074), + 74: uint16(34030), + 75: uint16(34092), + 76: uint16(34093), + 77: uint16(34067), + 78: uint16(34065), + 79: uint16(34083), + 80: uint16(34081), + 81: uint16(34068), + 82: uint16(34028), + 83: uint16(34085), + 84: uint16(34047), + 85: uint16(34054), + 86: uint16(34690), + 87: uint16(34676), + 88: uint16(34678), + 89: uint16(34656), + 90: uint16(34662), + 91: uint16(34680), + 92: uint16(34664), + 93: uint16(34649), + 94: uint16(34647), + 95: uint16(34636), + 96: uint16(34643), + 97: uint16(34907), + 98: uint16(34909), + 99: uint16(35088), + 100: uint16(35079), + 101: uint16(35090), + 102: uint16(35091), + 103: uint16(35093), + 104: uint16(35082), + 105: uint16(35516), + 106: uint16(35538), + 107: uint16(35527), + 108: uint16(35524), + 109: uint16(35477), + 110: uint16(35531), + 111: uint16(35576), + 112: uint16(35506), + 113: uint16(35529), + 114: uint16(35522), + 115: uint16(35519), + 116: uint16(35504), + 117: uint16(35542), + 118: uint16(35533), + 119: uint16(35510), + 120: uint16(35513), + 121: uint16(35547), + 122: uint16(35916), + 123: uint16(35918), + 124: uint16(35948), + 125: uint16(36064), + 126: uint16(36062), + 127: uint16(36070), + 128: uint16(36068), + 129: uint16(36076), + 130: uint16(36077), + 131: uint16(36066), + 132: uint16(36067), + 133: uint16(36060), + 134: uint16(36074), + 135: uint16(36065), + 136: uint16(36205), + 137: uint16(36255), + 138: uint16(36259), + 139: uint16(36395), + 140: uint16(36368), + 141: uint16(36381), + 142: uint16(36386), + 143: uint16(36367), + 144: uint16(36393), + 145: uint16(36383), + 146: uint16(36385), + 147: uint16(36382), + 148: uint16(36538), + 149: uint16(36637), + 150: uint16(36635), + 151: uint16(36639), + 152: uint16(36649), + 153: uint16(36646), + 154: uint16(36650), + 155: uint16(36636), + 156: uint16(36638), + }, + 29: { + 0: uint16(36645), + 1: uint16(36969), + 2: uint16(36974), + 3: uint16(36968), + 4: uint16(36973), + 5: uint16(36983), + 6: uint16(37168), + 7: uint16(37165), + 8: uint16(37159), + 9: uint16(37169), + 10: uint16(37255), + 11: uint16(37257), + 12: uint16(37259), + 13: uint16(37251), + 14: uint16(37573), + 15: uint16(37563), + 16: uint16(37559), + 17: uint16(37610), + 18: uint16(37548), + 19: uint16(37604), + 20: uint16(37569), + 21: uint16(37555), + 22: uint16(37564), + 23: uint16(37586), + 24: uint16(37575), + 25: uint16(37616), + 26: uint16(37554), + 27: uint16(38317), + 28: uint16(38321), + 29: uint16(38660), + 30: uint16(38662), + 31: uint16(38663), + 32: uint16(38665), + 33: uint16(38752), + 34: uint16(38797), + 35: uint16(38795), + 36: uint16(38799), + 37: uint16(38945), + 38: uint16(38955), + 39: uint16(38940), + 40: uint16(39091), + 41: uint16(39178), + 42: uint16(39187), + 43: uint16(39186), + 44: uint16(39192), + 45: uint16(39389), + 46: uint16(39376), + 47: uint16(39391), + 48: uint16(39387), + 49: uint16(39377), + 50: uint16(39381), + 51: uint16(39378), + 52: uint16(39385), + 53: uint16(39607), + 54: uint16(39662), + 55: uint16(39663), + 56: uint16(39719), + 57: uint16(39749), + 58: uint16(39748), + 59: uint16(39799), + 60: uint16(39791), + 61: uint16(40198), + 62: uint16(40201), + 63: uint16(40195), + 64: uint16(40617), + 65: uint16(40638), + 66: uint16(40654), + 67: uint16(22696), + 68: uint16(40786), + 69: uint16(20754), + 70: uint16(20760), + 71: uint16(20756), + 72: uint16(20752), + 73: uint16(20757), + 74: uint16(20864), + 75: uint16(20906), + 76: uint16(20957), + 77: uint16(21137), + 78: uint16(21139), + 79: uint16(21235), + 80: uint16(22105), + 81: uint16(22123), + 82: uint16(22137), + 83: uint16(22121), + 84: uint16(22116), + 85: uint16(22136), + 86: uint16(22122), + 87: uint16(22120), + 88: uint16(22117), + 89: uint16(22129), + 90: uint16(22127), + 91: uint16(22124), + 92: uint16(22114), + 93: uint16(22134), + 94: uint16(22721), + 95: uint16(22718), + 96: uint16(22727), + 97: uint16(22725), + 98: uint16(22894), + 99: uint16(23325), + 100: uint16(23348), + 101: uint16(23416), + 102: uint16(23536), + 103: uint16(23566), + 104: uint16(24394), + 105: uint16(25010), + 106: uint16(24977), + 107: uint16(25001), + 108: uint16(24970), + 109: uint16(25037), + 110: uint16(25014), + 111: uint16(25022), + 112: uint16(25034), + 113: uint16(25032), + 114: uint16(25136), + 115: uint16(25797), + 116: uint16(25793), + 117: uint16(25803), + 118: uint16(25787), + 119: uint16(25788), + 120: uint16(25818), + 121: uint16(25796), + 122: uint16(25799), + 123: uint16(25794), + 124: uint16(25805), + 125: uint16(25791), + 126: uint16(25810), + 127: uint16(25812), + 128: uint16(25790), + 129: uint16(25972), + 130: uint16(26310), + 131: uint16(26313), + 132: uint16(26297), + 133: uint16(26308), + 134: uint16(26311), + 135: uint16(26296), + 136: uint16(27197), + 137: uint16(27192), + 138: uint16(27194), + 139: uint16(27225), + 140: uint16(27243), + 141: uint16(27224), + 142: uint16(27193), + 143: uint16(27204), + 144: uint16(27234), + 145: uint16(27233), + 146: uint16(27211), + 147: uint16(27207), + 148: uint16(27189), + 149: uint16(27231), + 150: uint16(27208), + 151: uint16(27481), + 152: uint16(27511), + 153: uint16(27653), + 154: uint16(28610), + 155: uint16(28593), + 156: uint16(28577), + }, + 30: { + 0: uint16(28611), + 1: uint16(28580), + 2: uint16(28609), + 3: uint16(28583), + 4: uint16(28595), + 5: uint16(28608), + 6: uint16(28601), + 7: uint16(28598), + 8: uint16(28582), + 9: uint16(28576), + 10: uint16(28596), + 11: uint16(29118), + 12: uint16(29129), + 13: uint16(29136), + 14: uint16(29138), + 15: uint16(29128), + 16: uint16(29141), + 17: uint16(29113), + 18: uint16(29134), + 19: uint16(29145), + 20: uint16(29148), + 21: uint16(29123), + 22: uint16(29124), + 23: uint16(29544), + 24: uint16(29852), + 25: uint16(29859), + 26: uint16(29848), + 27: uint16(29855), + 28: uint16(29854), + 29: uint16(29922), + 30: uint16(29964), + 31: uint16(29965), + 32: uint16(30260), + 33: uint16(30264), + 34: uint16(30266), + 35: uint16(30439), + 36: uint16(30437), + 37: uint16(30624), + 38: uint16(30622), + 39: uint16(30623), + 40: uint16(30629), + 41: uint16(30952), + 42: uint16(30938), + 43: uint16(30956), + 44: uint16(30951), + 45: uint16(31142), + 46: uint16(31309), + 47: uint16(31310), + 48: uint16(31302), + 49: uint16(31308), + 50: uint16(31307), + 51: uint16(31418), + 52: uint16(31705), + 53: uint16(31761), + 54: uint16(31689), + 55: uint16(31716), + 56: uint16(31707), + 57: uint16(31713), + 58: uint16(31721), + 59: uint16(31718), + 60: uint16(31957), + 61: uint16(31958), + 62: uint16(32266), + 63: uint16(32273), + 64: uint16(32264), + 65: uint16(32283), + 66: uint16(32291), + 67: uint16(32286), + 68: uint16(32285), + 69: uint16(32265), + 70: uint16(32272), + 71: uint16(32633), + 72: uint16(32690), + 73: uint16(32752), + 74: uint16(32753), + 75: uint16(32750), + 76: uint16(32808), + 77: uint16(33203), + 78: uint16(33193), + 79: uint16(33192), + 80: uint16(33275), + 81: uint16(33288), + 82: uint16(33368), + 83: uint16(33369), + 84: uint16(34122), + 85: uint16(34137), + 86: uint16(34120), + 87: uint16(34152), + 88: uint16(34153), + 89: uint16(34115), + 90: uint16(34121), + 91: uint16(34157), + 92: uint16(34154), + 93: uint16(34142), + 94: uint16(34691), + 95: uint16(34719), + 96: uint16(34718), + 97: uint16(34722), + 98: uint16(34701), + 99: uint16(34913), + 100: uint16(35114), + 101: uint16(35122), + 102: uint16(35109), + 103: uint16(35115), + 104: uint16(35105), + 105: uint16(35242), + 106: uint16(35238), + 107: uint16(35558), + 108: uint16(35578), + 109: uint16(35563), + 110: uint16(35569), + 111: uint16(35584), + 112: uint16(35548), + 113: uint16(35559), + 114: uint16(35566), + 115: uint16(35582), + 116: uint16(35585), + 117: uint16(35586), + 118: uint16(35575), + 119: uint16(35565), + 120: uint16(35571), + 121: uint16(35574), + 122: uint16(35580), + 123: uint16(35947), + 124: uint16(35949), + 125: uint16(35987), + 126: uint16(36084), + 127: uint16(36420), + 128: uint16(36401), + 129: uint16(36404), + 130: uint16(36418), + 131: uint16(36409), + 132: uint16(36405), + 133: uint16(36667), + 134: uint16(36655), + 135: uint16(36664), + 136: uint16(36659), + 137: uint16(36776), + 138: uint16(36774), + 139: uint16(36981), + 140: uint16(36980), + 141: uint16(36984), + 142: uint16(36978), + 143: uint16(36988), + 144: uint16(36986), + 145: uint16(37172), + 146: uint16(37266), + 147: uint16(37664), + 148: uint16(37686), + 149: uint16(37624), + 150: uint16(37683), + 151: uint16(37679), + 152: uint16(37666), + 153: uint16(37628), + 154: uint16(37675), + 155: uint16(37636), + 156: uint16(37658), + }, + 31: { + 0: uint16(37648), + 1: uint16(37670), + 2: uint16(37665), + 3: uint16(37653), + 4: uint16(37678), + 5: uint16(37657), + 6: uint16(38331), + 7: uint16(38567), + 8: uint16(38568), + 9: uint16(38570), + 10: uint16(38613), + 11: uint16(38670), + 12: uint16(38673), + 13: uint16(38678), + 14: uint16(38669), + 15: uint16(38675), + 16: uint16(38671), + 17: uint16(38747), + 18: uint16(38748), + 19: uint16(38758), + 20: uint16(38808), + 21: uint16(38960), + 22: uint16(38968), + 23: uint16(38971), + 24: uint16(38967), + 25: uint16(38957), + 26: uint16(38969), + 27: uint16(38948), + 28: uint16(39184), + 29: uint16(39208), + 30: uint16(39198), + 31: uint16(39195), + 32: uint16(39201), + 33: uint16(39194), + 34: uint16(39405), + 35: uint16(39394), + 36: uint16(39409), + 37: uint16(39608), + 38: uint16(39612), + 39: uint16(39675), + 40: uint16(39661), + 41: uint16(39720), + 42: uint16(39825), + 43: uint16(40213), + 44: uint16(40227), + 45: uint16(40230), + 46: uint16(40232), + 47: uint16(40210), + 48: uint16(40219), + 49: uint16(40664), + 50: uint16(40660), + 51: uint16(40845), + 52: uint16(40860), + 53: uint16(20778), + 54: uint16(20767), + 55: uint16(20769), + 56: uint16(20786), + 57: uint16(21237), + 58: uint16(22158), + 59: uint16(22144), + 60: uint16(22160), + 61: uint16(22149), + 62: uint16(22151), + 63: uint16(22159), + 64: uint16(22741), + 65: uint16(22739), + 66: uint16(22737), + 67: uint16(22734), + 68: uint16(23344), + 69: uint16(23338), + 70: uint16(23332), + 71: uint16(23418), + 72: uint16(23607), + 73: uint16(23656), + 74: uint16(23996), + 75: uint16(23994), + 76: uint16(23997), + 77: uint16(23992), + 78: uint16(24171), + 79: uint16(24396), + 80: uint16(24509), + 81: uint16(25033), + 82: uint16(25026), + 83: uint16(25031), + 84: uint16(25062), + 85: uint16(25035), + 86: uint16(25138), + 87: uint16(25140), + 88: uint16(25806), + 89: uint16(25802), + 90: uint16(25816), + 91: uint16(25824), + 92: uint16(25840), + 93: uint16(25830), + 94: uint16(25836), + 95: uint16(25841), + 96: uint16(25826), + 97: uint16(25837), + 98: uint16(25986), + 99: uint16(25987), + 100: uint16(26329), + 101: uint16(26326), + 102: uint16(27264), + 103: uint16(27284), + 104: uint16(27268), + 105: uint16(27298), + 106: uint16(27292), + 107: uint16(27355), + 108: uint16(27299), + 109: uint16(27262), + 110: uint16(27287), + 111: uint16(27280), + 112: uint16(27296), + 113: uint16(27484), + 114: uint16(27566), + 115: uint16(27610), + 116: uint16(27656), + 117: uint16(28632), + 118: uint16(28657), + 119: uint16(28639), + 120: uint16(28640), + 121: uint16(28635), + 122: uint16(28644), + 123: uint16(28651), + 124: uint16(28655), + 125: uint16(28544), + 126: uint16(28652), + 127: uint16(28641), + 128: uint16(28649), + 129: uint16(28629), + 130: uint16(28654), + 131: uint16(28656), + 132: uint16(29159), + 133: uint16(29151), + 134: uint16(29166), + 135: uint16(29158), + 136: uint16(29157), + 137: uint16(29165), + 138: uint16(29164), + 139: uint16(29172), + 140: uint16(29152), + 141: uint16(29237), + 142: uint16(29254), + 143: uint16(29552), + 144: uint16(29554), + 145: uint16(29865), + 146: uint16(29872), + 147: uint16(29862), + 148: uint16(29864), + 149: uint16(30278), + 150: uint16(30274), + 151: uint16(30284), + 152: uint16(30442), + 153: uint16(30643), + 154: uint16(30634), + 155: uint16(30640), + 156: uint16(30636), + }, + 32: { + 0: uint16(30631), + 1: uint16(30637), + 2: uint16(30703), + 3: uint16(30967), + 4: uint16(30970), + 5: uint16(30964), + 6: uint16(30959), + 7: uint16(30977), + 8: uint16(31143), + 9: uint16(31146), + 10: uint16(31319), + 11: uint16(31423), + 12: uint16(31751), + 13: uint16(31757), + 14: uint16(31742), + 15: uint16(31735), + 16: uint16(31756), + 17: uint16(31712), + 18: uint16(31968), + 19: uint16(31964), + 20: uint16(31966), + 21: uint16(31970), + 22: uint16(31967), + 23: uint16(31961), + 24: uint16(31965), + 25: uint16(32302), + 26: uint16(32318), + 27: uint16(32326), + 28: uint16(32311), + 29: uint16(32306), + 30: uint16(32323), + 31: uint16(32299), + 32: uint16(32317), + 33: uint16(32305), + 34: uint16(32325), + 35: uint16(32321), + 36: uint16(32308), + 37: uint16(32313), + 38: uint16(32328), + 39: uint16(32309), + 40: uint16(32319), + 41: uint16(32303), + 42: uint16(32580), + 43: uint16(32755), + 44: uint16(32764), + 45: uint16(32881), + 46: uint16(32882), + 47: uint16(32880), + 48: uint16(32879), + 49: uint16(32883), + 50: uint16(33222), + 51: uint16(33219), + 52: uint16(33210), + 53: uint16(33218), + 54: uint16(33216), + 55: uint16(33215), + 56: uint16(33213), + 57: uint16(33225), + 58: uint16(33214), + 59: uint16(33256), + 60: uint16(33289), + 61: uint16(33393), + 62: uint16(34218), + 63: uint16(34180), + 64: uint16(34174), + 65: uint16(34204), + 66: uint16(34193), + 67: uint16(34196), + 68: uint16(34223), + 69: uint16(34203), + 70: uint16(34183), + 71: uint16(34216), + 72: uint16(34186), + 73: uint16(34407), + 74: uint16(34752), + 75: uint16(34769), + 76: uint16(34739), + 77: uint16(34770), + 78: uint16(34758), + 79: uint16(34731), + 80: uint16(34747), + 81: uint16(34746), + 82: uint16(34760), + 83: uint16(34763), + 84: uint16(35131), + 85: uint16(35126), + 86: uint16(35140), + 87: uint16(35128), + 88: uint16(35133), + 89: uint16(35244), + 90: uint16(35598), + 91: uint16(35607), + 92: uint16(35609), + 93: uint16(35611), + 94: uint16(35594), + 95: uint16(35616), + 96: uint16(35613), + 97: uint16(35588), + 98: uint16(35600), + 99: uint16(35905), + 100: uint16(35903), + 101: uint16(35955), + 102: uint16(36090), + 103: uint16(36093), + 104: uint16(36092), + 105: uint16(36088), + 106: uint16(36091), + 107: uint16(36264), + 108: uint16(36425), + 109: uint16(36427), + 110: uint16(36424), + 111: uint16(36426), + 112: uint16(36676), + 113: uint16(36670), + 114: uint16(36674), + 115: uint16(36677), + 116: uint16(36671), + 117: uint16(36991), + 118: uint16(36989), + 119: uint16(36996), + 120: uint16(36993), + 121: uint16(36994), + 122: uint16(36992), + 123: uint16(37177), + 124: uint16(37283), + 125: uint16(37278), + 126: uint16(37276), + 127: uint16(37709), + 128: uint16(37762), + 129: uint16(37672), + 130: uint16(37749), + 131: uint16(37706), + 132: uint16(37733), + 133: uint16(37707), + 134: uint16(37656), + 135: uint16(37758), + 136: uint16(37740), + 137: uint16(37723), + 138: uint16(37744), + 139: uint16(37722), + 140: uint16(37716), + 141: uint16(38346), + 142: uint16(38347), + 143: uint16(38348), + 144: uint16(38344), + 145: uint16(38342), + 146: uint16(38577), + 147: uint16(38584), + 148: uint16(38614), + 149: uint16(38684), + 150: uint16(38686), + 151: uint16(38816), + 152: uint16(38867), + 153: uint16(38982), + 154: uint16(39094), + 155: uint16(39221), + 156: uint16(39425), + }, + 33: { + 0: uint16(39423), + 1: uint16(39854), + 2: uint16(39851), + 3: uint16(39850), + 4: uint16(39853), + 5: uint16(40251), + 6: uint16(40255), + 7: uint16(40587), + 8: uint16(40655), + 9: uint16(40670), + 10: uint16(40668), + 11: uint16(40669), + 12: uint16(40667), + 13: uint16(40766), + 14: uint16(40779), + 15: uint16(21474), + 16: uint16(22165), + 17: uint16(22190), + 18: uint16(22745), + 19: uint16(22744), + 20: uint16(23352), + 21: uint16(24413), + 22: uint16(25059), + 23: uint16(25139), + 24: uint16(25844), + 25: uint16(25842), + 26: uint16(25854), + 27: uint16(25862), + 28: uint16(25850), + 29: uint16(25851), + 30: uint16(25847), + 31: uint16(26039), + 32: uint16(26332), + 33: uint16(26406), + 34: uint16(27315), + 35: uint16(27308), + 36: uint16(27331), + 37: uint16(27323), + 38: uint16(27320), + 39: uint16(27330), + 40: uint16(27310), + 41: uint16(27311), + 42: uint16(27487), + 43: uint16(27512), + 44: uint16(27567), + 45: uint16(28681), + 46: uint16(28683), + 47: uint16(28670), + 48: uint16(28678), + 49: uint16(28666), + 50: uint16(28689), + 51: uint16(28687), + 52: uint16(29179), + 53: uint16(29180), + 54: uint16(29182), + 55: uint16(29176), + 56: uint16(29559), + 57: uint16(29557), + 58: uint16(29863), + 59: uint16(29887), + 60: uint16(29973), + 61: uint16(30294), + 62: uint16(30296), + 63: uint16(30290), + 64: uint16(30653), + 65: uint16(30655), + 66: uint16(30651), + 67: uint16(30652), + 68: uint16(30990), + 69: uint16(31150), + 70: uint16(31329), + 71: uint16(31330), + 72: uint16(31328), + 73: uint16(31428), + 74: uint16(31429), + 75: uint16(31787), + 76: uint16(31783), + 77: uint16(31786), + 78: uint16(31774), + 79: uint16(31779), + 80: uint16(31777), + 81: uint16(31975), + 82: uint16(32340), + 83: uint16(32341), + 84: uint16(32350), + 85: uint16(32346), + 86: uint16(32353), + 87: uint16(32338), + 88: uint16(32345), + 89: uint16(32584), + 90: uint16(32761), + 91: uint16(32763), + 92: uint16(32887), + 93: uint16(32886), + 94: uint16(33229), + 95: uint16(33231), + 96: uint16(33290), + 97: uint16(34255), + 98: uint16(34217), + 99: uint16(34253), + 100: uint16(34256), + 101: uint16(34249), + 102: uint16(34224), + 103: uint16(34234), + 104: uint16(34233), + 105: uint16(34214), + 106: uint16(34799), + 107: uint16(34796), + 108: uint16(34802), + 109: uint16(34784), + 110: uint16(35206), + 111: uint16(35250), + 112: uint16(35316), + 113: uint16(35624), + 114: uint16(35641), + 115: uint16(35628), + 116: uint16(35627), + 117: uint16(35920), + 118: uint16(36101), + 119: uint16(36441), + 120: uint16(36451), + 121: uint16(36454), + 122: uint16(36452), + 123: uint16(36447), + 124: uint16(36437), + 125: uint16(36544), + 126: uint16(36681), + 127: uint16(36685), + 128: uint16(36999), + 129: uint16(36995), + 130: uint16(37000), + 131: uint16(37291), + 132: uint16(37292), + 133: uint16(37328), + 134: uint16(37780), + 135: uint16(37770), + 136: uint16(37782), + 137: uint16(37794), + 138: uint16(37811), + 139: uint16(37806), + 140: uint16(37804), + 141: uint16(37808), + 142: uint16(37784), + 143: uint16(37786), + 144: uint16(37783), + 145: uint16(38356), + 146: uint16(38358), + 147: uint16(38352), + 148: uint16(38357), + 149: uint16(38626), + 150: uint16(38620), + 151: uint16(38617), + 152: uint16(38619), + 153: uint16(38622), + 154: uint16(38692), + 155: uint16(38819), + 156: uint16(38822), + }, + 34: { + 0: uint16(38829), + 1: uint16(38905), + 2: uint16(38989), + 3: uint16(38991), + 4: uint16(38988), + 5: uint16(38990), + 6: uint16(38995), + 7: uint16(39098), + 8: uint16(39230), + 9: uint16(39231), + 10: uint16(39229), + 11: uint16(39214), + 12: uint16(39333), + 13: uint16(39438), + 14: uint16(39617), + 15: uint16(39683), + 16: uint16(39686), + 17: uint16(39759), + 18: uint16(39758), + 19: uint16(39757), + 20: uint16(39882), + 21: uint16(39881), + 22: uint16(39933), + 23: uint16(39880), + 24: uint16(39872), + 25: uint16(40273), + 26: uint16(40285), + 27: uint16(40288), + 28: uint16(40672), + 29: uint16(40725), + 30: uint16(40748), + 31: uint16(20787), + 32: uint16(22181), + 33: uint16(22750), + 34: uint16(22751), + 35: uint16(22754), + 36: uint16(23541), + 37: uint16(40848), + 38: uint16(24300), + 39: uint16(25074), + 40: uint16(25079), + 41: uint16(25078), + 42: uint16(25077), + 43: uint16(25856), + 44: uint16(25871), + 45: uint16(26336), + 46: uint16(26333), + 47: uint16(27365), + 48: uint16(27357), + 49: uint16(27354), + 50: uint16(27347), + 51: uint16(28699), + 52: uint16(28703), + 53: uint16(28712), + 54: uint16(28698), + 55: uint16(28701), + 56: uint16(28693), + 57: uint16(28696), + 58: uint16(29190), + 59: uint16(29197), + 60: uint16(29272), + 61: uint16(29346), + 62: uint16(29560), + 63: uint16(29562), + 64: uint16(29885), + 65: uint16(29898), + 66: uint16(29923), + 67: uint16(30087), + 68: uint16(30086), + 69: uint16(30303), + 70: uint16(30305), + 71: uint16(30663), + 72: uint16(31001), + 73: uint16(31153), + 74: uint16(31339), + 75: uint16(31337), + 76: uint16(31806), + 77: uint16(31807), + 78: uint16(31800), + 79: uint16(31805), + 80: uint16(31799), + 81: uint16(31808), + 82: uint16(32363), + 83: uint16(32365), + 84: uint16(32377), + 85: uint16(32361), + 86: uint16(32362), + 87: uint16(32645), + 88: uint16(32371), + 89: uint16(32694), + 90: uint16(32697), + 91: uint16(32696), + 92: uint16(33240), + 93: uint16(34281), + 94: uint16(34269), + 95: uint16(34282), + 96: uint16(34261), + 97: uint16(34276), + 98: uint16(34277), + 99: uint16(34295), + 100: uint16(34811), + 101: uint16(34821), + 102: uint16(34829), + 103: uint16(34809), + 104: uint16(34814), + 105: uint16(35168), + 106: uint16(35167), + 107: uint16(35158), + 108: uint16(35166), + 109: uint16(35649), + 110: uint16(35676), + 111: uint16(35672), + 112: uint16(35657), + 113: uint16(35674), + 114: uint16(35662), + 115: uint16(35663), + 116: uint16(35654), + 117: uint16(35673), + 118: uint16(36104), + 119: uint16(36106), + 120: uint16(36476), + 121: uint16(36466), + 122: uint16(36487), + 123: uint16(36470), + 124: uint16(36460), + 125: uint16(36474), + 126: uint16(36468), + 127: uint16(36692), + 128: uint16(36686), + 129: uint16(36781), + 130: uint16(37002), + 131: uint16(37003), + 132: uint16(37297), + 133: uint16(37294), + 134: uint16(37857), + 135: uint16(37841), + 136: uint16(37855), + 137: uint16(37827), + 138: uint16(37832), + 139: uint16(37852), + 140: uint16(37853), + 141: uint16(37846), + 142: uint16(37858), + 143: uint16(37837), + 144: uint16(37848), + 145: uint16(37860), + 146: uint16(37847), + 147: uint16(37864), + 148: uint16(38364), + 149: uint16(38580), + 150: uint16(38627), + 151: uint16(38698), + 152: uint16(38695), + 153: uint16(38753), + 154: uint16(38876), + 155: uint16(38907), + 156: uint16(39006), + }, + 35: { + 0: uint16(39000), + 1: uint16(39003), + 2: uint16(39100), + 3: uint16(39237), + 4: uint16(39241), + 5: uint16(39446), + 6: uint16(39449), + 7: uint16(39693), + 8: uint16(39912), + 9: uint16(39911), + 10: uint16(39894), + 11: uint16(39899), + 12: uint16(40329), + 13: uint16(40289), + 14: uint16(40306), + 15: uint16(40298), + 16: uint16(40300), + 17: uint16(40594), + 18: uint16(40599), + 19: uint16(40595), + 20: uint16(40628), + 21: uint16(21240), + 22: uint16(22184), + 23: uint16(22199), + 24: uint16(22198), + 25: uint16(22196), + 26: uint16(22204), + 27: uint16(22756), + 28: uint16(23360), + 29: uint16(23363), + 30: uint16(23421), + 31: uint16(23542), + 32: uint16(24009), + 33: uint16(25080), + 34: uint16(25082), + 35: uint16(25880), + 36: uint16(25876), + 37: uint16(25881), + 38: uint16(26342), + 39: uint16(26407), + 40: uint16(27372), + 41: uint16(28734), + 42: uint16(28720), + 43: uint16(28722), + 44: uint16(29200), + 45: uint16(29563), + 46: uint16(29903), + 47: uint16(30306), + 48: uint16(30309), + 49: uint16(31014), + 50: uint16(31018), + 51: uint16(31020), + 52: uint16(31019), + 53: uint16(31431), + 54: uint16(31478), + 55: uint16(31820), + 56: uint16(31811), + 57: uint16(31821), + 58: uint16(31983), + 59: uint16(31984), + 60: uint16(36782), + 61: uint16(32381), + 62: uint16(32380), + 63: uint16(32386), + 64: uint16(32588), + 65: uint16(32768), + 66: uint16(33242), + 67: uint16(33382), + 68: uint16(34299), + 69: uint16(34297), + 70: uint16(34321), + 71: uint16(34298), + 72: uint16(34310), + 73: uint16(34315), + 74: uint16(34311), + 75: uint16(34314), + 76: uint16(34836), + 77: uint16(34837), + 78: uint16(35172), + 79: uint16(35258), + 80: uint16(35320), + 81: uint16(35696), + 82: uint16(35692), + 83: uint16(35686), + 84: uint16(35695), + 85: uint16(35679), + 86: uint16(35691), + 87: uint16(36111), + 88: uint16(36109), + 89: uint16(36489), + 90: uint16(36481), + 91: uint16(36485), + 92: uint16(36482), + 93: uint16(37300), + 94: uint16(37323), + 95: uint16(37912), + 96: uint16(37891), + 97: uint16(37885), + 98: uint16(38369), + 99: uint16(38704), + 100: uint16(39108), + 101: uint16(39250), + 102: uint16(39249), + 103: uint16(39336), + 104: uint16(39467), + 105: uint16(39472), + 106: uint16(39479), + 107: uint16(39477), + 108: uint16(39955), + 109: uint16(39949), + 110: uint16(40569), + 111: uint16(40629), + 112: uint16(40680), + 113: uint16(40751), + 114: uint16(40799), + 115: uint16(40803), + 116: uint16(40801), + 117: uint16(20791), + 118: uint16(20792), + 119: uint16(22209), + 120: uint16(22208), + 121: uint16(22210), + 122: uint16(22804), + 123: uint16(23660), + 124: uint16(24013), + 125: uint16(25084), + 126: uint16(25086), + 127: uint16(25885), + 128: uint16(25884), + 129: uint16(26005), + 130: uint16(26345), + 131: uint16(27387), + 132: uint16(27396), + 133: uint16(27386), + 134: uint16(27570), + 135: uint16(28748), + 136: uint16(29211), + 137: uint16(29351), + 138: uint16(29910), + 139: uint16(29908), + 140: uint16(30313), + 141: uint16(30675), + 142: uint16(31824), + 143: uint16(32399), + 144: uint16(32396), + 145: uint16(32700), + 146: uint16(34327), + 147: uint16(34349), + 148: uint16(34330), + 149: uint16(34851), + 150: uint16(34850), + 151: uint16(34849), + 152: uint16(34847), + 153: uint16(35178), + 154: uint16(35180), + 155: uint16(35261), + 156: uint16(35700), + }, + 36: { + 0: uint16(35703), + 1: uint16(35709), + 2: uint16(36115), + 3: uint16(36490), + 4: uint16(36493), + 5: uint16(36491), + 6: uint16(36703), + 7: uint16(36783), + 8: uint16(37306), + 9: uint16(37934), + 10: uint16(37939), + 11: uint16(37941), + 12: uint16(37946), + 13: uint16(37944), + 14: uint16(37938), + 15: uint16(37931), + 16: uint16(38370), + 17: uint16(38712), + 18: uint16(38713), + 19: uint16(38706), + 20: uint16(38911), + 21: uint16(39015), + 22: uint16(39013), + 23: uint16(39255), + 24: uint16(39493), + 25: uint16(39491), + 26: uint16(39488), + 27: uint16(39486), + 28: uint16(39631), + 29: uint16(39764), + 30: uint16(39761), + 31: uint16(39981), + 32: uint16(39973), + 33: uint16(40367), + 34: uint16(40372), + 35: uint16(40386), + 36: uint16(40376), + 37: uint16(40605), + 38: uint16(40687), + 39: uint16(40729), + 40: uint16(40796), + 41: uint16(40806), + 42: uint16(40807), + 43: uint16(20796), + 44: uint16(20795), + 45: uint16(22216), + 46: uint16(22218), + 47: uint16(22217), + 48: uint16(23423), + 49: uint16(24020), + 50: uint16(24018), + 51: uint16(24398), + 52: uint16(25087), + 53: uint16(25892), + 54: uint16(27402), + 55: uint16(27489), + 56: uint16(28753), + 57: uint16(28760), + 58: uint16(29568), + 59: uint16(29924), + 60: uint16(30090), + 61: uint16(30318), + 62: uint16(30316), + 63: uint16(31155), + 64: uint16(31840), + 65: uint16(31839), + 66: uint16(32894), + 67: uint16(32893), + 68: uint16(33247), + 69: uint16(35186), + 70: uint16(35183), + 71: uint16(35324), + 72: uint16(35712), + 73: uint16(36118), + 74: uint16(36119), + 75: uint16(36497), + 76: uint16(36499), + 77: uint16(36705), + 78: uint16(37192), + 79: uint16(37956), + 80: uint16(37969), + 81: uint16(37970), + 82: uint16(38717), + 83: uint16(38718), + 84: uint16(38851), + 85: uint16(38849), + 86: uint16(39019), + 87: uint16(39253), + 88: uint16(39509), + 89: uint16(39501), + 90: uint16(39634), + 91: uint16(39706), + 92: uint16(40009), + 93: uint16(39985), + 94: uint16(39998), + 95: uint16(39995), + 96: uint16(40403), + 97: uint16(40407), + 98: uint16(40756), + 99: uint16(40812), + 100: uint16(40810), + 101: uint16(40852), + 102: uint16(22220), + 103: uint16(24022), + 104: uint16(25088), + 105: uint16(25891), + 106: uint16(25899), + 107: uint16(25898), + 108: uint16(26348), + 109: uint16(27408), + 110: uint16(29914), + 111: uint16(31434), + 112: uint16(31844), + 113: uint16(31843), + 114: uint16(31845), + 115: uint16(32403), + 116: uint16(32406), + 117: uint16(32404), + 118: uint16(33250), + 119: uint16(34360), + 120: uint16(34367), + 121: uint16(34865), + 122: uint16(35722), + 123: uint16(37008), + 124: uint16(37007), + 125: uint16(37987), + 126: uint16(37984), + 127: uint16(37988), + 128: uint16(38760), + 129: uint16(39023), + 130: uint16(39260), + 131: uint16(39514), + 132: uint16(39515), + 133: uint16(39511), + 134: uint16(39635), + 135: uint16(39636), + 136: uint16(39633), + 137: uint16(40020), + 138: uint16(40023), + 139: uint16(40022), + 140: uint16(40421), + 141: uint16(40607), + 142: uint16(40692), + 143: uint16(22225), + 144: uint16(22761), + 145: uint16(25900), + 146: uint16(28766), + 147: uint16(30321), + 148: uint16(30322), + 149: uint16(30679), + 150: uint16(32592), + 151: uint16(32648), + 152: uint16(34870), + 153: uint16(34873), + 154: uint16(34914), + 155: uint16(35731), + 156: uint16(35730), + }, + 37: { + 0: uint16(35734), + 1: uint16(33399), + 2: uint16(36123), + 3: uint16(37312), + 4: uint16(37994), + 5: uint16(38722), + 6: uint16(38728), + 7: uint16(38724), + 8: uint16(38854), + 9: uint16(39024), + 10: uint16(39519), + 11: uint16(39714), + 12: uint16(39768), + 13: uint16(40031), + 14: uint16(40441), + 15: uint16(40442), + 16: uint16(40572), + 17: uint16(40573), + 18: uint16(40711), + 19: uint16(40823), + 20: uint16(40818), + 21: uint16(24307), + 22: uint16(27414), + 23: uint16(28771), + 24: uint16(31852), + 25: uint16(31854), + 26: uint16(34875), + 27: uint16(35264), + 28: uint16(36513), + 29: uint16(37313), + 30: uint16(38002), + 31: uint16(38000), + 32: uint16(39025), + 33: uint16(39262), + 34: uint16(39638), + 35: uint16(39715), + 36: uint16(40652), + 37: uint16(28772), + 38: uint16(30682), + 39: uint16(35738), + 40: uint16(38007), + 41: uint16(38857), + 42: uint16(39522), + 43: uint16(39525), + 44: uint16(32412), + 45: uint16(35740), + 46: uint16(36522), + 47: uint16(37317), + 48: uint16(38013), + 49: uint16(38014), + 50: uint16(38012), + 51: uint16(40055), + 52: uint16(40056), + 53: uint16(40695), + 54: uint16(35924), + 55: uint16(38015), + 56: uint16(40474), + 57: uint16(29224), + 58: uint16(39530), + 59: uint16(39729), + 60: uint16(40475), + 61: uint16(40478), + 62: uint16(31858), + 63: uint16(9312), + 64: uint16(9313), + 65: uint16(9314), + 66: uint16(9315), + 67: uint16(9316), + 68: uint16(9317), + 69: uint16(9318), + 70: uint16(9319), + 71: uint16(9320), + 72: uint16(9321), + 73: uint16(9332), + 74: uint16(9333), + 75: uint16(9334), + 76: uint16(9335), + 77: uint16(9336), + 78: uint16(9337), + 79: uint16(9338), + 80: uint16(9339), + 81: uint16(9340), + 82: uint16(9341), + 83: uint16(8560), + 84: uint16(8561), + 85: uint16(8562), + 86: uint16(8563), + 87: uint16(8564), + 88: uint16(8565), + 89: uint16(8566), + 90: uint16(8567), + 91: uint16(8568), + 92: uint16(8569), + 93: uint16(20022), + 94: uint16(20031), + 95: uint16(20101), + 96: uint16(20128), + 97: uint16(20866), + 98: uint16(20886), + 99: uint16(20907), + 100: uint16(21241), + 101: uint16(21304), + 102: uint16(21353), + 103: uint16(21430), + 104: uint16(22794), + 105: uint16(23424), + 106: uint16(24027), + 107: uint16(24186), + 108: uint16(24191), + 109: uint16(24308), + 110: uint16(24400), + 111: uint16(24417), + 112: uint16(25908), + 113: uint16(26080), + 114: uint16(30098), + 115: uint16(30326), + 116: uint16(36789), + 117: uint16(38582), + 118: uint16(168), + 119: uint16(710), + 120: uint16(12541), + 121: uint16(12542), + 122: uint16(12445), + 123: uint16(12446), + 126: uint16(12293), + 127: uint16(12294), + 128: uint16(12295), + 129: uint16(12540), + 130: uint16(65339), + 131: uint16(65341), + 132: uint16(10045), + 133: uint16(12353), + 134: uint16(12354), + 135: uint16(12355), + 136: uint16(12356), + 137: uint16(12357), + 138: uint16(12358), + 139: uint16(12359), + 140: uint16(12360), + 141: uint16(12361), + 142: uint16(12362), + 143: uint16(12363), + 144: uint16(12364), + 145: uint16(12365), + 146: uint16(12366), + 147: uint16(12367), + 148: uint16(12368), + 149: uint16(12369), + 150: uint16(12370), + 151: uint16(12371), + 152: uint16(12372), + 153: uint16(12373), + 154: uint16(12374), + 155: uint16(12375), + 156: uint16(12376), + }, + 38: { + 0: uint16(12377), + 1: uint16(12378), + 2: uint16(12379), + 3: uint16(12380), + 4: uint16(12381), + 5: uint16(12382), + 6: uint16(12383), + 7: uint16(12384), + 8: uint16(12385), + 9: uint16(12386), + 10: uint16(12387), + 11: uint16(12388), + 12: uint16(12389), + 13: uint16(12390), + 14: uint16(12391), + 15: uint16(12392), + 16: uint16(12393), + 17: uint16(12394), + 18: uint16(12395), + 19: uint16(12396), + 20: uint16(12397), + 21: uint16(12398), + 22: uint16(12399), + 23: uint16(12400), + 24: uint16(12401), + 25: uint16(12402), + 26: uint16(12403), + 27: uint16(12404), + 28: uint16(12405), + 29: uint16(12406), + 30: uint16(12407), + 31: uint16(12408), + 32: uint16(12409), + 33: uint16(12410), + 34: uint16(12411), + 35: uint16(12412), + 36: uint16(12413), + 37: uint16(12414), + 38: uint16(12415), + 39: uint16(12416), + 40: uint16(12417), + 41: uint16(12418), + 42: uint16(12419), + 43: uint16(12420), + 44: uint16(12421), + 45: uint16(12422), + 46: uint16(12423), + 47: uint16(12424), + 48: uint16(12425), + 49: uint16(12426), + 50: uint16(12427), + 51: uint16(12428), + 52: uint16(12429), + 53: uint16(12430), + 54: uint16(12431), + 55: uint16(12432), + 56: uint16(12433), + 57: uint16(12434), + 58: uint16(12435), + 59: uint16(12449), + 60: uint16(12450), + 61: uint16(12451), + 62: uint16(12452), + 63: uint16(12453), + 64: uint16(12454), + 65: uint16(12455), + 66: uint16(12456), + 67: uint16(12457), + 68: uint16(12458), + 69: uint16(12459), + 70: uint16(12460), + 71: uint16(12461), + 72: uint16(12462), + 73: uint16(12463), + 74: uint16(12464), + 75: uint16(12465), + 76: uint16(12466), + 77: uint16(12467), + 78: uint16(12468), + 79: uint16(12469), + 80: uint16(12470), + 81: uint16(12471), + 82: uint16(12472), + 83: uint16(12473), + 84: uint16(12474), + 85: uint16(12475), + 86: uint16(12476), + 87: uint16(12477), + 88: uint16(12478), + 89: uint16(12479), + 90: uint16(12480), + 91: uint16(12481), + 92: uint16(12482), + 93: uint16(12483), + 94: uint16(12484), + 95: uint16(12485), + 96: uint16(12486), + 97: uint16(12487), + 98: uint16(12488), + 99: uint16(12489), + 100: uint16(12490), + 101: uint16(12491), + 102: uint16(12492), + 103: uint16(12493), + 104: uint16(12494), + 105: uint16(12495), + 106: uint16(12496), + 107: uint16(12497), + 108: uint16(12498), + 109: uint16(12499), + 110: uint16(12500), + 111: uint16(12501), + 112: uint16(12502), + 113: uint16(12503), + 114: uint16(12504), + 115: uint16(12505), + 116: uint16(12506), + 117: uint16(12507), + 118: uint16(12508), + 119: uint16(12509), + 120: uint16(12510), + 121: uint16(12511), + 122: uint16(12512), + 123: uint16(12513), + 124: uint16(12514), + 125: uint16(12515), + 126: uint16(12516), + 127: uint16(12517), + 128: uint16(12518), + 129: uint16(12519), + 130: uint16(12520), + 131: uint16(12521), + 132: uint16(12522), + 133: uint16(12523), + 134: uint16(12524), + 135: uint16(12525), + 136: uint16(12526), + 137: uint16(12527), + 138: uint16(12528), + 139: uint16(12529), + 140: uint16(12530), + 141: uint16(12531), + 142: uint16(12532), + 143: uint16(12533), + 144: uint16(12534), + 145: uint16(1040), + 146: uint16(1041), + 147: uint16(1042), + 148: uint16(1043), + 149: uint16(1044), + 150: uint16(1045), + 151: uint16(1025), + 152: uint16(1046), + 153: uint16(1047), + 154: uint16(1048), + 155: uint16(1049), + 156: uint16(1050), + }, + 39: { + 0: uint16(1051), + 1: uint16(1052), + 2: uint16(1053), + 3: uint16(1054), + 4: uint16(1055), + 5: uint16(1056), + 6: uint16(1057), + 7: uint16(1058), + 8: uint16(1059), + 9: uint16(1060), + 10: uint16(1061), + 11: uint16(1062), + 12: uint16(1063), + 13: uint16(1064), + 14: uint16(1065), + 15: uint16(1066), + 16: uint16(1067), + 17: uint16(1068), + 18: uint16(1069), + 19: uint16(1070), + 20: uint16(1071), + 21: uint16(1072), + 22: uint16(1073), + 23: uint16(1074), + 24: uint16(1075), + 25: uint16(1076), + 26: uint16(1077), + 27: uint16(1105), + 28: uint16(1078), + 29: uint16(1079), + 30: uint16(1080), + 31: uint16(1081), + 32: uint16(1082), + 33: uint16(1083), + 34: uint16(1084), + 35: uint16(1085), + 36: uint16(1086), + 37: uint16(1087), + 38: uint16(1088), + 39: uint16(1089), + 40: uint16(1090), + 41: uint16(1091), + 42: uint16(1092), + 43: uint16(1093), + 44: uint16(1094), + 45: uint16(1095), + 46: uint16(1096), + 47: uint16(1097), + 48: uint16(1098), + 49: uint16(1099), + 50: uint16(1100), + 51: uint16(1101), + 52: uint16(1102), + 53: uint16(1103), + 54: uint16(8679), + 55: uint16(8632), + 56: uint16(8633), + 57: uint16(12751), + 58: uint16(204), + 59: uint16(20058), + 60: uint16(138), + 61: uint16(20994), + 62: uint16(17553), + 63: uint16(40880), + 64: uint16(20872), + 65: uint16(40881), + 66: uint16(30215), + 107: uint16(65506), + 108: uint16(65508), + 109: uint16(65287), + 110: uint16(65282), + 111: uint16(12849), + 112: uint16(8470), + 113: uint16(8481), + 114: uint16(12443), + 115: uint16(12444), + 116: uint16(11904), + 117: uint16(11908), + 118: uint16(11910), + 119: uint16(11911), + 120: uint16(11912), + 121: uint16(11914), + 122: uint16(11916), + 123: uint16(11917), + 124: uint16(11925), + 125: uint16(11932), + 126: uint16(11933), + 127: uint16(11941), + 128: uint16(11943), + 129: uint16(11946), + 130: uint16(11948), + 131: uint16(11950), + 132: uint16(11958), + 133: uint16(11964), + 134: uint16(11966), + 135: uint16(11974), + 136: uint16(11978), + 137: uint16(11980), + 138: uint16(11981), + 139: uint16(11983), + 140: uint16(11990), + 141: uint16(11991), + 142: uint16(11998), + 143: uint16(12003), + 147: uint16(643), + 148: uint16(592), + 149: uint16(603), + 150: uint16(596), + 151: uint16(629), + 152: uint16(339), + 153: uint16(248), + 154: uint16(331), + 155: uint16(650), + 156: uint16(618), + }, + 40: { + 0: uint16(20034), + 1: uint16(20060), + 2: uint16(20981), + 3: uint16(21274), + 4: uint16(21378), + 5: uint16(19975), + 6: uint16(19980), + 7: uint16(20039), + 8: uint16(20109), + 9: uint16(22231), + 10: uint16(64012), + 11: uint16(23662), + 12: uint16(24435), + 13: uint16(19983), + 14: uint16(20871), + 15: uint16(19982), + 16: uint16(20014), + 17: uint16(20115), + 18: uint16(20162), + 19: uint16(20169), + 20: uint16(20168), + 21: uint16(20888), + 22: uint16(21244), + 23: uint16(21356), + 24: uint16(21433), + 25: uint16(22304), + 26: uint16(22787), + 27: uint16(22828), + 28: uint16(23568), + 29: uint16(24063), + 30: uint16(26081), + 31: uint16(27571), + 32: uint16(27596), + 33: uint16(27668), + 34: uint16(29247), + 35: uint16(20017), + 36: uint16(20028), + 37: uint16(20200), + 38: uint16(20188), + 39: uint16(20201), + 40: uint16(20193), + 41: uint16(20189), + 42: uint16(20186), + 43: uint16(21004), + 44: uint16(21276), + 45: uint16(21324), + 46: uint16(22306), + 47: uint16(22307), + 48: uint16(22807), + 49: uint16(22831), + 50: uint16(23425), + 51: uint16(23428), + 52: uint16(23570), + 53: uint16(23611), + 54: uint16(23668), + 55: uint16(23667), + 56: uint16(24068), + 57: uint16(24192), + 58: uint16(24194), + 59: uint16(24521), + 60: uint16(25097), + 61: uint16(25168), + 62: uint16(27669), + 63: uint16(27702), + 64: uint16(27715), + 65: uint16(27711), + 66: uint16(27707), + 67: uint16(29358), + 68: uint16(29360), + 69: uint16(29578), + 70: uint16(31160), + 71: uint16(32906), + 72: uint16(38430), + 73: uint16(20238), + 74: uint16(20248), + 75: uint16(20268), + 76: uint16(20213), + 77: uint16(20244), + 78: uint16(20209), + 79: uint16(20224), + 80: uint16(20215), + 81: uint16(20232), + 82: uint16(20253), + 83: uint16(20226), + 84: uint16(20229), + 85: uint16(20258), + 86: uint16(20243), + 87: uint16(20228), + 88: uint16(20212), + 89: uint16(20242), + 90: uint16(20913), + 91: uint16(21011), + 92: uint16(21001), + 93: uint16(21008), + 94: uint16(21158), + 95: uint16(21282), + 96: uint16(21279), + 97: uint16(21325), + 98: uint16(21386), + 99: uint16(21511), + 100: uint16(22241), + 101: uint16(22239), + 102: uint16(22318), + 103: uint16(22314), + 104: uint16(22324), + 105: uint16(22844), + 106: uint16(22912), + 107: uint16(22908), + 108: uint16(22917), + 109: uint16(22907), + 110: uint16(22910), + 111: uint16(22903), + 112: uint16(22911), + 113: uint16(23382), + 114: uint16(23573), + 115: uint16(23589), + 116: uint16(23676), + 117: uint16(23674), + 118: uint16(23675), + 119: uint16(23678), + 120: uint16(24031), + 121: uint16(24181), + 122: uint16(24196), + 123: uint16(24322), + 124: uint16(24346), + 125: uint16(24436), + 126: uint16(24533), + 127: uint16(24532), + 128: uint16(24527), + 129: uint16(25180), + 130: uint16(25182), + 131: uint16(25188), + 132: uint16(25185), + 133: uint16(25190), + 134: uint16(25186), + 135: uint16(25177), + 136: uint16(25184), + 137: uint16(25178), + 138: uint16(25189), + 139: uint16(26095), + 140: uint16(26094), + 141: uint16(26430), + 142: uint16(26425), + 143: uint16(26424), + 144: uint16(26427), + 145: uint16(26426), + 146: uint16(26431), + 147: uint16(26428), + 148: uint16(26419), + 149: uint16(27672), + 150: uint16(27718), + 151: uint16(27730), + 152: uint16(27740), + 153: uint16(27727), + 154: uint16(27722), + 155: uint16(27732), + 156: uint16(27723), + }, + 41: { + 0: uint16(27724), + 1: uint16(28785), + 2: uint16(29278), + 3: uint16(29364), + 4: uint16(29365), + 5: uint16(29582), + 6: uint16(29994), + 7: uint16(30335), + 8: uint16(31349), + 9: uint16(32593), + 10: uint16(33400), + 11: uint16(33404), + 12: uint16(33408), + 13: uint16(33405), + 14: uint16(33407), + 15: uint16(34381), + 16: uint16(35198), + 17: uint16(37017), + 18: uint16(37015), + 19: uint16(37016), + 20: uint16(37019), + 21: uint16(37012), + 22: uint16(38434), + 23: uint16(38436), + 24: uint16(38432), + 25: uint16(38435), + 26: uint16(20310), + 27: uint16(20283), + 28: uint16(20322), + 29: uint16(20297), + 30: uint16(20307), + 31: uint16(20324), + 32: uint16(20286), + 33: uint16(20327), + 34: uint16(20306), + 35: uint16(20319), + 36: uint16(20289), + 37: uint16(20312), + 38: uint16(20269), + 39: uint16(20275), + 40: uint16(20287), + 41: uint16(20321), + 42: uint16(20879), + 43: uint16(20921), + 44: uint16(21020), + 45: uint16(21022), + 46: uint16(21025), + 47: uint16(21165), + 48: uint16(21166), + 49: uint16(21257), + 50: uint16(21347), + 51: uint16(21362), + 52: uint16(21390), + 53: uint16(21391), + 54: uint16(21552), + 55: uint16(21559), + 56: uint16(21546), + 57: uint16(21588), + 58: uint16(21573), + 59: uint16(21529), + 60: uint16(21532), + 61: uint16(21541), + 62: uint16(21528), + 63: uint16(21565), + 64: uint16(21583), + 65: uint16(21569), + 66: uint16(21544), + 67: uint16(21540), + 68: uint16(21575), + 69: uint16(22254), + 70: uint16(22247), + 71: uint16(22245), + 72: uint16(22337), + 73: uint16(22341), + 74: uint16(22348), + 75: uint16(22345), + 76: uint16(22347), + 77: uint16(22354), + 78: uint16(22790), + 79: uint16(22848), + 80: uint16(22950), + 81: uint16(22936), + 82: uint16(22944), + 83: uint16(22935), + 84: uint16(22926), + 85: uint16(22946), + 86: uint16(22928), + 87: uint16(22927), + 88: uint16(22951), + 89: uint16(22945), + 90: uint16(23438), + 91: uint16(23442), + 92: uint16(23592), + 93: uint16(23594), + 94: uint16(23693), + 95: uint16(23695), + 96: uint16(23688), + 97: uint16(23691), + 98: uint16(23689), + 99: uint16(23698), + 100: uint16(23690), + 101: uint16(23686), + 102: uint16(23699), + 103: uint16(23701), + 104: uint16(24032), + 105: uint16(24074), + 106: uint16(24078), + 107: uint16(24203), + 108: uint16(24201), + 109: uint16(24204), + 110: uint16(24200), + 111: uint16(24205), + 112: uint16(24325), + 113: uint16(24349), + 114: uint16(24440), + 115: uint16(24438), + 116: uint16(24530), + 117: uint16(24529), + 118: uint16(24528), + 119: uint16(24557), + 120: uint16(24552), + 121: uint16(24558), + 122: uint16(24563), + 123: uint16(24545), + 124: uint16(24548), + 125: uint16(24547), + 126: uint16(24570), + 127: uint16(24559), + 128: uint16(24567), + 129: uint16(24571), + 130: uint16(24576), + 131: uint16(24564), + 132: uint16(25146), + 133: uint16(25219), + 134: uint16(25228), + 135: uint16(25230), + 136: uint16(25231), + 137: uint16(25236), + 138: uint16(25223), + 139: uint16(25201), + 140: uint16(25211), + 141: uint16(25210), + 142: uint16(25200), + 143: uint16(25217), + 144: uint16(25224), + 145: uint16(25207), + 146: uint16(25213), + 147: uint16(25202), + 148: uint16(25204), + 149: uint16(25911), + 150: uint16(26096), + 151: uint16(26100), + 152: uint16(26099), + 153: uint16(26098), + 154: uint16(26101), + 155: uint16(26437), + 156: uint16(26439), + }, + 42: { + 0: uint16(26457), + 1: uint16(26453), + 2: uint16(26444), + 3: uint16(26440), + 4: uint16(26461), + 5: uint16(26445), + 6: uint16(26458), + 7: uint16(26443), + 8: uint16(27600), + 9: uint16(27673), + 10: uint16(27674), + 11: uint16(27768), + 12: uint16(27751), + 13: uint16(27755), + 14: uint16(27780), + 15: uint16(27787), + 16: uint16(27791), + 17: uint16(27761), + 18: uint16(27759), + 19: uint16(27753), + 20: uint16(27802), + 21: uint16(27757), + 22: uint16(27783), + 23: uint16(27797), + 24: uint16(27804), + 25: uint16(27750), + 26: uint16(27763), + 27: uint16(27749), + 28: uint16(27771), + 29: uint16(27790), + 30: uint16(28788), + 31: uint16(28794), + 32: uint16(29283), + 33: uint16(29375), + 34: uint16(29373), + 35: uint16(29379), + 36: uint16(29382), + 37: uint16(29377), + 38: uint16(29370), + 39: uint16(29381), + 40: uint16(29589), + 41: uint16(29591), + 42: uint16(29587), + 43: uint16(29588), + 44: uint16(29586), + 45: uint16(30010), + 46: uint16(30009), + 47: uint16(30100), + 48: uint16(30101), + 49: uint16(30337), + 50: uint16(31037), + 51: uint16(32820), + 52: uint16(32917), + 53: uint16(32921), + 54: uint16(32912), + 55: uint16(32914), + 56: uint16(32924), + 57: uint16(33424), + 58: uint16(33423), + 59: uint16(33413), + 60: uint16(33422), + 61: uint16(33425), + 62: uint16(33427), + 63: uint16(33418), + 64: uint16(33411), + 65: uint16(33412), + 66: uint16(35960), + 67: uint16(36809), + 68: uint16(36799), + 69: uint16(37023), + 70: uint16(37025), + 71: uint16(37029), + 72: uint16(37022), + 73: uint16(37031), + 74: uint16(37024), + 75: uint16(38448), + 76: uint16(38440), + 77: uint16(38447), + 78: uint16(38445), + 79: uint16(20019), + 80: uint16(20376), + 81: uint16(20348), + 82: uint16(20357), + 83: uint16(20349), + 84: uint16(20352), + 85: uint16(20359), + 86: uint16(20342), + 87: uint16(20340), + 88: uint16(20361), + 89: uint16(20356), + 90: uint16(20343), + 91: uint16(20300), + 92: uint16(20375), + 93: uint16(20330), + 94: uint16(20378), + 95: uint16(20345), + 96: uint16(20353), + 97: uint16(20344), + 98: uint16(20368), + 99: uint16(20380), + 100: uint16(20372), + 101: uint16(20382), + 102: uint16(20370), + 103: uint16(20354), + 104: uint16(20373), + 105: uint16(20331), + 106: uint16(20334), + 107: uint16(20894), + 108: uint16(20924), + 109: uint16(20926), + 110: uint16(21045), + 111: uint16(21042), + 112: uint16(21043), + 113: uint16(21062), + 114: uint16(21041), + 115: uint16(21180), + 116: uint16(21258), + 117: uint16(21259), + 118: uint16(21308), + 119: uint16(21394), + 120: uint16(21396), + 121: uint16(21639), + 122: uint16(21631), + 123: uint16(21633), + 124: uint16(21649), + 125: uint16(21634), + 126: uint16(21640), + 127: uint16(21611), + 128: uint16(21626), + 129: uint16(21630), + 130: uint16(21605), + 131: uint16(21612), + 132: uint16(21620), + 133: uint16(21606), + 134: uint16(21645), + 135: uint16(21615), + 136: uint16(21601), + 137: uint16(21600), + 138: uint16(21656), + 139: uint16(21603), + 140: uint16(21607), + 141: uint16(21604), + 142: uint16(22263), + 143: uint16(22265), + 144: uint16(22383), + 145: uint16(22386), + 146: uint16(22381), + 147: uint16(22379), + 148: uint16(22385), + 149: uint16(22384), + 150: uint16(22390), + 151: uint16(22400), + 152: uint16(22389), + 153: uint16(22395), + 154: uint16(22387), + 155: uint16(22388), + 156: uint16(22370), + }, + 43: { + 0: uint16(22376), + 1: uint16(22397), + 2: uint16(22796), + 3: uint16(22853), + 4: uint16(22965), + 5: uint16(22970), + 6: uint16(22991), + 7: uint16(22990), + 8: uint16(22962), + 9: uint16(22988), + 10: uint16(22977), + 11: uint16(22966), + 12: uint16(22972), + 13: uint16(22979), + 14: uint16(22998), + 15: uint16(22961), + 16: uint16(22973), + 17: uint16(22976), + 18: uint16(22984), + 19: uint16(22964), + 20: uint16(22983), + 21: uint16(23394), + 22: uint16(23397), + 23: uint16(23443), + 24: uint16(23445), + 25: uint16(23620), + 26: uint16(23623), + 27: uint16(23726), + 28: uint16(23716), + 29: uint16(23712), + 30: uint16(23733), + 31: uint16(23727), + 32: uint16(23720), + 33: uint16(23724), + 34: uint16(23711), + 35: uint16(23715), + 36: uint16(23725), + 37: uint16(23714), + 38: uint16(23722), + 39: uint16(23719), + 40: uint16(23709), + 41: uint16(23717), + 42: uint16(23734), + 43: uint16(23728), + 44: uint16(23718), + 45: uint16(24087), + 46: uint16(24084), + 47: uint16(24089), + 48: uint16(24360), + 49: uint16(24354), + 50: uint16(24355), + 51: uint16(24356), + 52: uint16(24404), + 53: uint16(24450), + 54: uint16(24446), + 55: uint16(24445), + 56: uint16(24542), + 57: uint16(24549), + 58: uint16(24621), + 59: uint16(24614), + 60: uint16(24601), + 61: uint16(24626), + 62: uint16(24587), + 63: uint16(24628), + 64: uint16(24586), + 65: uint16(24599), + 66: uint16(24627), + 67: uint16(24602), + 68: uint16(24606), + 69: uint16(24620), + 70: uint16(24610), + 71: uint16(24589), + 72: uint16(24592), + 73: uint16(24622), + 74: uint16(24595), + 75: uint16(24593), + 76: uint16(24588), + 77: uint16(24585), + 78: uint16(24604), + 79: uint16(25108), + 80: uint16(25149), + 81: uint16(25261), + 82: uint16(25268), + 83: uint16(25297), + 84: uint16(25278), + 85: uint16(25258), + 86: uint16(25270), + 87: uint16(25290), + 88: uint16(25262), + 89: uint16(25267), + 90: uint16(25263), + 91: uint16(25275), + 92: uint16(25257), + 93: uint16(25264), + 94: uint16(25272), + 95: uint16(25917), + 96: uint16(26024), + 97: uint16(26043), + 98: uint16(26121), + 99: uint16(26108), + 100: uint16(26116), + 101: uint16(26130), + 102: uint16(26120), + 103: uint16(26107), + 104: uint16(26115), + 105: uint16(26123), + 106: uint16(26125), + 107: uint16(26117), + 108: uint16(26109), + 109: uint16(26129), + 110: uint16(26128), + 111: uint16(26358), + 112: uint16(26378), + 113: uint16(26501), + 114: uint16(26476), + 115: uint16(26510), + 116: uint16(26514), + 117: uint16(26486), + 118: uint16(26491), + 119: uint16(26520), + 120: uint16(26502), + 121: uint16(26500), + 122: uint16(26484), + 123: uint16(26509), + 124: uint16(26508), + 125: uint16(26490), + 126: uint16(26527), + 127: uint16(26513), + 128: uint16(26521), + 129: uint16(26499), + 130: uint16(26493), + 131: uint16(26497), + 132: uint16(26488), + 133: uint16(26489), + 134: uint16(26516), + 135: uint16(27429), + 136: uint16(27520), + 137: uint16(27518), + 138: uint16(27614), + 139: uint16(27677), + 140: uint16(27795), + 141: uint16(27884), + 142: uint16(27883), + 143: uint16(27886), + 144: uint16(27865), + 145: uint16(27830), + 146: uint16(27860), + 147: uint16(27821), + 148: uint16(27879), + 149: uint16(27831), + 150: uint16(27856), + 151: uint16(27842), + 152: uint16(27834), + 153: uint16(27843), + 154: uint16(27846), + 155: uint16(27885), + 156: uint16(27890), + }, + 44: { + 0: uint16(27858), + 1: uint16(27869), + 2: uint16(27828), + 3: uint16(27786), + 4: uint16(27805), + 5: uint16(27776), + 6: uint16(27870), + 7: uint16(27840), + 8: uint16(27952), + 9: uint16(27853), + 10: uint16(27847), + 11: uint16(27824), + 12: uint16(27897), + 13: uint16(27855), + 14: uint16(27881), + 15: uint16(27857), + 16: uint16(28820), + 17: uint16(28824), + 18: uint16(28805), + 19: uint16(28819), + 20: uint16(28806), + 21: uint16(28804), + 22: uint16(28817), + 23: uint16(28822), + 24: uint16(28802), + 25: uint16(28826), + 26: uint16(28803), + 27: uint16(29290), + 28: uint16(29398), + 29: uint16(29387), + 30: uint16(29400), + 31: uint16(29385), + 32: uint16(29404), + 33: uint16(29394), + 34: uint16(29396), + 35: uint16(29402), + 36: uint16(29388), + 37: uint16(29393), + 38: uint16(29604), + 39: uint16(29601), + 40: uint16(29613), + 41: uint16(29606), + 42: uint16(29602), + 43: uint16(29600), + 44: uint16(29612), + 45: uint16(29597), + 46: uint16(29917), + 47: uint16(29928), + 48: uint16(30015), + 49: uint16(30016), + 50: uint16(30014), + 51: uint16(30092), + 52: uint16(30104), + 53: uint16(30383), + 54: uint16(30451), + 55: uint16(30449), + 56: uint16(30448), + 57: uint16(30453), + 58: uint16(30712), + 59: uint16(30716), + 60: uint16(30713), + 61: uint16(30715), + 62: uint16(30714), + 63: uint16(30711), + 64: uint16(31042), + 65: uint16(31039), + 66: uint16(31173), + 67: uint16(31352), + 68: uint16(31355), + 69: uint16(31483), + 70: uint16(31861), + 71: uint16(31997), + 72: uint16(32821), + 73: uint16(32911), + 74: uint16(32942), + 75: uint16(32931), + 76: uint16(32952), + 77: uint16(32949), + 78: uint16(32941), + 79: uint16(33312), + 80: uint16(33440), + 81: uint16(33472), + 82: uint16(33451), + 83: uint16(33434), + 84: uint16(33432), + 85: uint16(33435), + 86: uint16(33461), + 87: uint16(33447), + 88: uint16(33454), + 89: uint16(33468), + 90: uint16(33438), + 91: uint16(33466), + 92: uint16(33460), + 93: uint16(33448), + 94: uint16(33441), + 95: uint16(33449), + 96: uint16(33474), + 97: uint16(33444), + 98: uint16(33475), + 99: uint16(33462), + 100: uint16(33442), + 101: uint16(34416), + 102: uint16(34415), + 103: uint16(34413), + 104: uint16(34414), + 105: uint16(35926), + 106: uint16(36818), + 107: uint16(36811), + 108: uint16(36819), + 109: uint16(36813), + 110: uint16(36822), + 111: uint16(36821), + 112: uint16(36823), + 113: uint16(37042), + 114: uint16(37044), + 115: uint16(37039), + 116: uint16(37043), + 117: uint16(37040), + 118: uint16(38457), + 119: uint16(38461), + 120: uint16(38460), + 121: uint16(38458), + 122: uint16(38467), + 123: uint16(20429), + 124: uint16(20421), + 125: uint16(20435), + 126: uint16(20402), + 127: uint16(20425), + 128: uint16(20427), + 129: uint16(20417), + 130: uint16(20436), + 131: uint16(20444), + 132: uint16(20441), + 133: uint16(20411), + 134: uint16(20403), + 135: uint16(20443), + 136: uint16(20423), + 137: uint16(20438), + 138: uint16(20410), + 139: uint16(20416), + 140: uint16(20409), + 141: uint16(20460), + 142: uint16(21060), + 143: uint16(21065), + 144: uint16(21184), + 145: uint16(21186), + 146: uint16(21309), + 147: uint16(21372), + 148: uint16(21399), + 149: uint16(21398), + 150: uint16(21401), + 151: uint16(21400), + 152: uint16(21690), + 153: uint16(21665), + 154: uint16(21677), + 155: uint16(21669), + 156: uint16(21711), + }, + 45: { + 0: uint16(21699), + 1: uint16(33549), + 2: uint16(21687), + 3: uint16(21678), + 4: uint16(21718), + 5: uint16(21686), + 6: uint16(21701), + 7: uint16(21702), + 8: uint16(21664), + 9: uint16(21616), + 10: uint16(21692), + 11: uint16(21666), + 12: uint16(21694), + 13: uint16(21618), + 14: uint16(21726), + 15: uint16(21680), + 16: uint16(22453), + 17: uint16(22430), + 18: uint16(22431), + 19: uint16(22436), + 20: uint16(22412), + 21: uint16(22423), + 22: uint16(22429), + 23: uint16(22427), + 24: uint16(22420), + 25: uint16(22424), + 26: uint16(22415), + 27: uint16(22425), + 28: uint16(22437), + 29: uint16(22426), + 30: uint16(22421), + 31: uint16(22772), + 32: uint16(22797), + 33: uint16(22867), + 34: uint16(23009), + 35: uint16(23006), + 36: uint16(23022), + 37: uint16(23040), + 38: uint16(23025), + 39: uint16(23005), + 40: uint16(23034), + 41: uint16(23037), + 42: uint16(23036), + 43: uint16(23030), + 44: uint16(23012), + 45: uint16(23026), + 46: uint16(23031), + 47: uint16(23003), + 48: uint16(23017), + 49: uint16(23027), + 50: uint16(23029), + 51: uint16(23008), + 52: uint16(23038), + 53: uint16(23028), + 54: uint16(23021), + 55: uint16(23464), + 56: uint16(23628), + 57: uint16(23760), + 58: uint16(23768), + 59: uint16(23756), + 60: uint16(23767), + 61: uint16(23755), + 62: uint16(23771), + 63: uint16(23774), + 64: uint16(23770), + 65: uint16(23753), + 66: uint16(23751), + 67: uint16(23754), + 68: uint16(23766), + 69: uint16(23763), + 70: uint16(23764), + 71: uint16(23759), + 72: uint16(23752), + 73: uint16(23750), + 74: uint16(23758), + 75: uint16(23775), + 76: uint16(23800), + 77: uint16(24057), + 78: uint16(24097), + 79: uint16(24098), + 80: uint16(24099), + 81: uint16(24096), + 82: uint16(24100), + 83: uint16(24240), + 84: uint16(24228), + 85: uint16(24226), + 86: uint16(24219), + 87: uint16(24227), + 88: uint16(24229), + 89: uint16(24327), + 90: uint16(24366), + 91: uint16(24406), + 92: uint16(24454), + 93: uint16(24631), + 94: uint16(24633), + 95: uint16(24660), + 96: uint16(24690), + 97: uint16(24670), + 98: uint16(24645), + 99: uint16(24659), + 100: uint16(24647), + 101: uint16(24649), + 102: uint16(24667), + 103: uint16(24652), + 104: uint16(24640), + 105: uint16(24642), + 106: uint16(24671), + 107: uint16(24612), + 108: uint16(24644), + 109: uint16(24664), + 110: uint16(24678), + 111: uint16(24686), + 112: uint16(25154), + 113: uint16(25155), + 114: uint16(25295), + 115: uint16(25357), + 116: uint16(25355), + 117: uint16(25333), + 118: uint16(25358), + 119: uint16(25347), + 120: uint16(25323), + 121: uint16(25337), + 122: uint16(25359), + 123: uint16(25356), + 124: uint16(25336), + 125: uint16(25334), + 126: uint16(25344), + 127: uint16(25363), + 128: uint16(25364), + 129: uint16(25338), + 130: uint16(25365), + 131: uint16(25339), + 132: uint16(25328), + 133: uint16(25921), + 134: uint16(25923), + 135: uint16(26026), + 136: uint16(26047), + 137: uint16(26166), + 138: uint16(26145), + 139: uint16(26162), + 140: uint16(26165), + 141: uint16(26140), + 142: uint16(26150), + 143: uint16(26146), + 144: uint16(26163), + 145: uint16(26155), + 146: uint16(26170), + 147: uint16(26141), + 148: uint16(26164), + 149: uint16(26169), + 150: uint16(26158), + 151: uint16(26383), + 152: uint16(26384), + 153: uint16(26561), + 154: uint16(26610), + 155: uint16(26568), + 156: uint16(26554), + }, + 46: { + 0: uint16(26588), + 1: uint16(26555), + 2: uint16(26616), + 3: uint16(26584), + 4: uint16(26560), + 5: uint16(26551), + 6: uint16(26565), + 7: uint16(26603), + 8: uint16(26596), + 9: uint16(26591), + 10: uint16(26549), + 11: uint16(26573), + 12: uint16(26547), + 13: uint16(26615), + 14: uint16(26614), + 15: uint16(26606), + 16: uint16(26595), + 17: uint16(26562), + 18: uint16(26553), + 19: uint16(26574), + 20: uint16(26599), + 21: uint16(26608), + 22: uint16(26546), + 23: uint16(26620), + 24: uint16(26566), + 25: uint16(26605), + 26: uint16(26572), + 27: uint16(26542), + 28: uint16(26598), + 29: uint16(26587), + 30: uint16(26618), + 31: uint16(26569), + 32: uint16(26570), + 33: uint16(26563), + 34: uint16(26602), + 35: uint16(26571), + 36: uint16(27432), + 37: uint16(27522), + 38: uint16(27524), + 39: uint16(27574), + 40: uint16(27606), + 41: uint16(27608), + 42: uint16(27616), + 43: uint16(27680), + 44: uint16(27681), + 45: uint16(27944), + 46: uint16(27956), + 47: uint16(27949), + 48: uint16(27935), + 49: uint16(27964), + 50: uint16(27967), + 51: uint16(27922), + 52: uint16(27914), + 53: uint16(27866), + 54: uint16(27955), + 55: uint16(27908), + 56: uint16(27929), + 57: uint16(27962), + 58: uint16(27930), + 59: uint16(27921), + 60: uint16(27904), + 61: uint16(27933), + 62: uint16(27970), + 63: uint16(27905), + 64: uint16(27928), + 65: uint16(27959), + 66: uint16(27907), + 67: uint16(27919), + 68: uint16(27968), + 69: uint16(27911), + 70: uint16(27936), + 71: uint16(27948), + 72: uint16(27912), + 73: uint16(27938), + 74: uint16(27913), + 75: uint16(27920), + 76: uint16(28855), + 77: uint16(28831), + 78: uint16(28862), + 79: uint16(28849), + 80: uint16(28848), + 81: uint16(28833), + 82: uint16(28852), + 83: uint16(28853), + 84: uint16(28841), + 85: uint16(29249), + 86: uint16(29257), + 87: uint16(29258), + 88: uint16(29292), + 89: uint16(29296), + 90: uint16(29299), + 91: uint16(29294), + 92: uint16(29386), + 93: uint16(29412), + 94: uint16(29416), + 95: uint16(29419), + 96: uint16(29407), + 97: uint16(29418), + 98: uint16(29414), + 99: uint16(29411), + 100: uint16(29573), + 101: uint16(29644), + 102: uint16(29634), + 103: uint16(29640), + 104: uint16(29637), + 105: uint16(29625), + 106: uint16(29622), + 107: uint16(29621), + 108: uint16(29620), + 109: uint16(29675), + 110: uint16(29631), + 111: uint16(29639), + 112: uint16(29630), + 113: uint16(29635), + 114: uint16(29638), + 115: uint16(29624), + 116: uint16(29643), + 117: uint16(29932), + 118: uint16(29934), + 119: uint16(29998), + 120: uint16(30023), + 121: uint16(30024), + 122: uint16(30119), + 123: uint16(30122), + 124: uint16(30329), + 125: uint16(30404), + 126: uint16(30472), + 127: uint16(30467), + 128: uint16(30468), + 129: uint16(30469), + 130: uint16(30474), + 131: uint16(30455), + 132: uint16(30459), + 133: uint16(30458), + 134: uint16(30695), + 135: uint16(30696), + 136: uint16(30726), + 137: uint16(30737), + 138: uint16(30738), + 139: uint16(30725), + 140: uint16(30736), + 141: uint16(30735), + 142: uint16(30734), + 143: uint16(30729), + 144: uint16(30723), + 145: uint16(30739), + 146: uint16(31050), + 147: uint16(31052), + 148: uint16(31051), + 149: uint16(31045), + 150: uint16(31044), + 151: uint16(31189), + 152: uint16(31181), + 153: uint16(31183), + 154: uint16(31190), + 155: uint16(31182), + 156: uint16(31360), + }, + 47: { + 0: uint16(31358), + 1: uint16(31441), + 2: uint16(31488), + 3: uint16(31489), + 4: uint16(31866), + 5: uint16(31864), + 6: uint16(31865), + 7: uint16(31871), + 8: uint16(31872), + 9: uint16(31873), + 10: uint16(32003), + 11: uint16(32008), + 12: uint16(32001), + 13: uint16(32600), + 14: uint16(32657), + 15: uint16(32653), + 16: uint16(32702), + 17: uint16(32775), + 18: uint16(32782), + 19: uint16(32783), + 20: uint16(32788), + 21: uint16(32823), + 22: uint16(32984), + 23: uint16(32967), + 24: uint16(32992), + 25: uint16(32977), + 26: uint16(32968), + 27: uint16(32962), + 28: uint16(32976), + 29: uint16(32965), + 30: uint16(32995), + 31: uint16(32985), + 32: uint16(32988), + 33: uint16(32970), + 34: uint16(32981), + 35: uint16(32969), + 36: uint16(32975), + 37: uint16(32983), + 38: uint16(32998), + 39: uint16(32973), + 40: uint16(33279), + 41: uint16(33313), + 42: uint16(33428), + 43: uint16(33497), + 44: uint16(33534), + 45: uint16(33529), + 46: uint16(33543), + 47: uint16(33512), + 48: uint16(33536), + 49: uint16(33493), + 50: uint16(33594), + 51: uint16(33515), + 52: uint16(33494), + 53: uint16(33524), + 54: uint16(33516), + 55: uint16(33505), + 56: uint16(33522), + 57: uint16(33525), + 58: uint16(33548), + 59: uint16(33531), + 60: uint16(33526), + 61: uint16(33520), + 62: uint16(33514), + 63: uint16(33508), + 64: uint16(33504), + 65: uint16(33530), + 66: uint16(33523), + 67: uint16(33517), + 68: uint16(34423), + 69: uint16(34420), + 70: uint16(34428), + 71: uint16(34419), + 72: uint16(34881), + 73: uint16(34894), + 74: uint16(34919), + 75: uint16(34922), + 76: uint16(34921), + 77: uint16(35283), + 78: uint16(35332), + 79: uint16(35335), + 80: uint16(36210), + 81: uint16(36835), + 82: uint16(36833), + 83: uint16(36846), + 84: uint16(36832), + 85: uint16(37105), + 86: uint16(37053), + 87: uint16(37055), + 88: uint16(37077), + 89: uint16(37061), + 90: uint16(37054), + 91: uint16(37063), + 92: uint16(37067), + 93: uint16(37064), + 94: uint16(37332), + 95: uint16(37331), + 96: uint16(38484), + 97: uint16(38479), + 98: uint16(38481), + 99: uint16(38483), + 100: uint16(38474), + 101: uint16(38478), + 102: uint16(20510), + 103: uint16(20485), + 104: uint16(20487), + 105: uint16(20499), + 106: uint16(20514), + 107: uint16(20528), + 108: uint16(20507), + 109: uint16(20469), + 110: uint16(20468), + 111: uint16(20531), + 112: uint16(20535), + 113: uint16(20524), + 114: uint16(20470), + 115: uint16(20471), + 116: uint16(20503), + 117: uint16(20508), + 118: uint16(20512), + 119: uint16(20519), + 120: uint16(20533), + 121: uint16(20527), + 122: uint16(20529), + 123: uint16(20494), + 124: uint16(20826), + 125: uint16(20884), + 126: uint16(20883), + 127: uint16(20938), + 128: uint16(20932), + 129: uint16(20933), + 130: uint16(20936), + 131: uint16(20942), + 132: uint16(21089), + 133: uint16(21082), + 134: uint16(21074), + 135: uint16(21086), + 136: uint16(21087), + 137: uint16(21077), + 138: uint16(21090), + 139: uint16(21197), + 140: uint16(21262), + 141: uint16(21406), + 142: uint16(21798), + 143: uint16(21730), + 144: uint16(21783), + 145: uint16(21778), + 146: uint16(21735), + 147: uint16(21747), + 148: uint16(21732), + 149: uint16(21786), + 150: uint16(21759), + 151: uint16(21764), + 152: uint16(21768), + 153: uint16(21739), + 154: uint16(21777), + 155: uint16(21765), + 156: uint16(21745), + }, + 48: { + 0: uint16(21770), + 1: uint16(21755), + 2: uint16(21751), + 3: uint16(21752), + 4: uint16(21728), + 5: uint16(21774), + 6: uint16(21763), + 7: uint16(21771), + 8: uint16(22273), + 9: uint16(22274), + 10: uint16(22476), + 11: uint16(22578), + 12: uint16(22485), + 13: uint16(22482), + 14: uint16(22458), + 15: uint16(22470), + 16: uint16(22461), + 17: uint16(22460), + 18: uint16(22456), + 19: uint16(22454), + 20: uint16(22463), + 21: uint16(22471), + 22: uint16(22480), + 23: uint16(22457), + 24: uint16(22465), + 25: uint16(22798), + 26: uint16(22858), + 27: uint16(23065), + 28: uint16(23062), + 29: uint16(23085), + 30: uint16(23086), + 31: uint16(23061), + 32: uint16(23055), + 33: uint16(23063), + 34: uint16(23050), + 35: uint16(23070), + 36: uint16(23091), + 37: uint16(23404), + 38: uint16(23463), + 39: uint16(23469), + 40: uint16(23468), + 41: uint16(23555), + 42: uint16(23638), + 43: uint16(23636), + 44: uint16(23788), + 45: uint16(23807), + 46: uint16(23790), + 47: uint16(23793), + 48: uint16(23799), + 49: uint16(23808), + 50: uint16(23801), + 51: uint16(24105), + 52: uint16(24104), + 53: uint16(24232), + 54: uint16(24238), + 55: uint16(24234), + 56: uint16(24236), + 57: uint16(24371), + 58: uint16(24368), + 59: uint16(24423), + 60: uint16(24669), + 61: uint16(24666), + 62: uint16(24679), + 63: uint16(24641), + 64: uint16(24738), + 65: uint16(24712), + 66: uint16(24704), + 67: uint16(24722), + 68: uint16(24705), + 69: uint16(24733), + 70: uint16(24707), + 71: uint16(24725), + 72: uint16(24731), + 73: uint16(24727), + 74: uint16(24711), + 75: uint16(24732), + 76: uint16(24718), + 77: uint16(25113), + 78: uint16(25158), + 79: uint16(25330), + 80: uint16(25360), + 81: uint16(25430), + 82: uint16(25388), + 83: uint16(25412), + 84: uint16(25413), + 85: uint16(25398), + 86: uint16(25411), + 87: uint16(25572), + 88: uint16(25401), + 89: uint16(25419), + 90: uint16(25418), + 91: uint16(25404), + 92: uint16(25385), + 93: uint16(25409), + 94: uint16(25396), + 95: uint16(25432), + 96: uint16(25428), + 97: uint16(25433), + 98: uint16(25389), + 99: uint16(25415), + 100: uint16(25395), + 101: uint16(25434), + 102: uint16(25425), + 103: uint16(25400), + 104: uint16(25431), + 105: uint16(25408), + 106: uint16(25416), + 107: uint16(25930), + 108: uint16(25926), + 109: uint16(26054), + 110: uint16(26051), + 111: uint16(26052), + 112: uint16(26050), + 113: uint16(26186), + 114: uint16(26207), + 115: uint16(26183), + 116: uint16(26193), + 117: uint16(26386), + 118: uint16(26387), + 119: uint16(26655), + 120: uint16(26650), + 121: uint16(26697), + 122: uint16(26674), + 123: uint16(26675), + 124: uint16(26683), + 125: uint16(26699), + 126: uint16(26703), + 127: uint16(26646), + 128: uint16(26673), + 129: uint16(26652), + 130: uint16(26677), + 131: uint16(26667), + 132: uint16(26669), + 133: uint16(26671), + 134: uint16(26702), + 135: uint16(26692), + 136: uint16(26676), + 137: uint16(26653), + 138: uint16(26642), + 139: uint16(26644), + 140: uint16(26662), + 141: uint16(26664), + 142: uint16(26670), + 143: uint16(26701), + 144: uint16(26682), + 145: uint16(26661), + 146: uint16(26656), + 147: uint16(27436), + 148: uint16(27439), + 149: uint16(27437), + 150: uint16(27441), + 151: uint16(27444), + 152: uint16(27501), + 153: uint16(32898), + 154: uint16(27528), + 155: uint16(27622), + 156: uint16(27620), + }, + 49: { + 0: uint16(27624), + 1: uint16(27619), + 2: uint16(27618), + 3: uint16(27623), + 4: uint16(27685), + 5: uint16(28026), + 6: uint16(28003), + 7: uint16(28004), + 8: uint16(28022), + 9: uint16(27917), + 10: uint16(28001), + 11: uint16(28050), + 12: uint16(27992), + 13: uint16(28002), + 14: uint16(28013), + 15: uint16(28015), + 16: uint16(28049), + 17: uint16(28045), + 18: uint16(28143), + 19: uint16(28031), + 20: uint16(28038), + 21: uint16(27998), + 22: uint16(28007), + 23: uint16(28000), + 24: uint16(28055), + 25: uint16(28016), + 26: uint16(28028), + 27: uint16(27999), + 28: uint16(28034), + 29: uint16(28056), + 30: uint16(27951), + 31: uint16(28008), + 32: uint16(28043), + 33: uint16(28030), + 34: uint16(28032), + 35: uint16(28036), + 36: uint16(27926), + 37: uint16(28035), + 38: uint16(28027), + 39: uint16(28029), + 40: uint16(28021), + 41: uint16(28048), + 42: uint16(28892), + 43: uint16(28883), + 44: uint16(28881), + 45: uint16(28893), + 46: uint16(28875), + 47: uint16(32569), + 48: uint16(28898), + 49: uint16(28887), + 50: uint16(28882), + 51: uint16(28894), + 52: uint16(28896), + 53: uint16(28884), + 54: uint16(28877), + 55: uint16(28869), + 56: uint16(28870), + 57: uint16(28871), + 58: uint16(28890), + 59: uint16(28878), + 60: uint16(28897), + 61: uint16(29250), + 62: uint16(29304), + 63: uint16(29303), + 64: uint16(29302), + 65: uint16(29440), + 66: uint16(29434), + 67: uint16(29428), + 68: uint16(29438), + 69: uint16(29430), + 70: uint16(29427), + 71: uint16(29435), + 72: uint16(29441), + 73: uint16(29651), + 74: uint16(29657), + 75: uint16(29669), + 76: uint16(29654), + 77: uint16(29628), + 78: uint16(29671), + 79: uint16(29667), + 80: uint16(29673), + 81: uint16(29660), + 82: uint16(29650), + 83: uint16(29659), + 84: uint16(29652), + 85: uint16(29661), + 86: uint16(29658), + 87: uint16(29655), + 88: uint16(29656), + 89: uint16(29672), + 90: uint16(29918), + 91: uint16(29919), + 92: uint16(29940), + 93: uint16(29941), + 94: uint16(29985), + 95: uint16(30043), + 96: uint16(30047), + 97: uint16(30128), + 98: uint16(30145), + 99: uint16(30139), + 100: uint16(30148), + 101: uint16(30144), + 102: uint16(30143), + 103: uint16(30134), + 104: uint16(30138), + 105: uint16(30346), + 106: uint16(30409), + 107: uint16(30493), + 108: uint16(30491), + 109: uint16(30480), + 110: uint16(30483), + 111: uint16(30482), + 112: uint16(30499), + 113: uint16(30481), + 114: uint16(30485), + 115: uint16(30489), + 116: uint16(30490), + 117: uint16(30498), + 118: uint16(30503), + 119: uint16(30755), + 120: uint16(30764), + 121: uint16(30754), + 122: uint16(30773), + 123: uint16(30767), + 124: uint16(30760), + 125: uint16(30766), + 126: uint16(30763), + 127: uint16(30753), + 128: uint16(30761), + 129: uint16(30771), + 130: uint16(30762), + 131: uint16(30769), + 132: uint16(31060), + 133: uint16(31067), + 134: uint16(31055), + 135: uint16(31068), + 136: uint16(31059), + 137: uint16(31058), + 138: uint16(31057), + 139: uint16(31211), + 140: uint16(31212), + 141: uint16(31200), + 142: uint16(31214), + 143: uint16(31213), + 144: uint16(31210), + 145: uint16(31196), + 146: uint16(31198), + 147: uint16(31197), + 148: uint16(31366), + 149: uint16(31369), + 150: uint16(31365), + 151: uint16(31371), + 152: uint16(31372), + 153: uint16(31370), + 154: uint16(31367), + 155: uint16(31448), + 156: uint16(31504), + }, + 50: { + 0: uint16(31492), + 1: uint16(31507), + 2: uint16(31493), + 3: uint16(31503), + 4: uint16(31496), + 5: uint16(31498), + 6: uint16(31502), + 7: uint16(31497), + 8: uint16(31506), + 9: uint16(31876), + 10: uint16(31889), + 11: uint16(31882), + 12: uint16(31884), + 13: uint16(31880), + 14: uint16(31885), + 15: uint16(31877), + 16: uint16(32030), + 17: uint16(32029), + 18: uint16(32017), + 19: uint16(32014), + 20: uint16(32024), + 21: uint16(32022), + 22: uint16(32019), + 23: uint16(32031), + 24: uint16(32018), + 25: uint16(32015), + 26: uint16(32012), + 27: uint16(32604), + 28: uint16(32609), + 29: uint16(32606), + 30: uint16(32608), + 31: uint16(32605), + 32: uint16(32603), + 33: uint16(32662), + 34: uint16(32658), + 35: uint16(32707), + 36: uint16(32706), + 37: uint16(32704), + 38: uint16(32790), + 39: uint16(32830), + 40: uint16(32825), + 41: uint16(33018), + 42: uint16(33010), + 43: uint16(33017), + 44: uint16(33013), + 45: uint16(33025), + 46: uint16(33019), + 47: uint16(33024), + 48: uint16(33281), + 49: uint16(33327), + 50: uint16(33317), + 51: uint16(33587), + 52: uint16(33581), + 53: uint16(33604), + 54: uint16(33561), + 55: uint16(33617), + 56: uint16(33573), + 57: uint16(33622), + 58: uint16(33599), + 59: uint16(33601), + 60: uint16(33574), + 61: uint16(33564), + 62: uint16(33570), + 63: uint16(33602), + 64: uint16(33614), + 65: uint16(33563), + 66: uint16(33578), + 67: uint16(33544), + 68: uint16(33596), + 69: uint16(33613), + 70: uint16(33558), + 71: uint16(33572), + 72: uint16(33568), + 73: uint16(33591), + 74: uint16(33583), + 75: uint16(33577), + 76: uint16(33607), + 77: uint16(33605), + 78: uint16(33612), + 79: uint16(33619), + 80: uint16(33566), + 81: uint16(33580), + 82: uint16(33611), + 83: uint16(33575), + 84: uint16(33608), + 85: uint16(34387), + 86: uint16(34386), + 87: uint16(34466), + 88: uint16(34472), + 89: uint16(34454), + 90: uint16(34445), + 91: uint16(34449), + 92: uint16(34462), + 93: uint16(34439), + 94: uint16(34455), + 95: uint16(34438), + 96: uint16(34443), + 97: uint16(34458), + 98: uint16(34437), + 99: uint16(34469), + 100: uint16(34457), + 101: uint16(34465), + 102: uint16(34471), + 103: uint16(34453), + 104: uint16(34456), + 105: uint16(34446), + 106: uint16(34461), + 107: uint16(34448), + 108: uint16(34452), + 109: uint16(34883), + 110: uint16(34884), + 111: uint16(34925), + 112: uint16(34933), + 113: uint16(34934), + 114: uint16(34930), + 115: uint16(34944), + 116: uint16(34929), + 117: uint16(34943), + 118: uint16(34927), + 119: uint16(34947), + 120: uint16(34942), + 121: uint16(34932), + 122: uint16(34940), + 123: uint16(35346), + 124: uint16(35911), + 125: uint16(35927), + 126: uint16(35963), + 127: uint16(36004), + 128: uint16(36003), + 129: uint16(36214), + 130: uint16(36216), + 131: uint16(36277), + 132: uint16(36279), + 133: uint16(36278), + 134: uint16(36561), + 135: uint16(36563), + 136: uint16(36862), + 137: uint16(36853), + 138: uint16(36866), + 139: uint16(36863), + 140: uint16(36859), + 141: uint16(36868), + 142: uint16(36860), + 143: uint16(36854), + 144: uint16(37078), + 145: uint16(37088), + 146: uint16(37081), + 147: uint16(37082), + 148: uint16(37091), + 149: uint16(37087), + 150: uint16(37093), + 151: uint16(37080), + 152: uint16(37083), + 153: uint16(37079), + 154: uint16(37084), + 155: uint16(37092), + 156: uint16(37200), + }, + 51: { + 0: uint16(37198), + 1: uint16(37199), + 2: uint16(37333), + 3: uint16(37346), + 4: uint16(37338), + 5: uint16(38492), + 6: uint16(38495), + 7: uint16(38588), + 8: uint16(39139), + 9: uint16(39647), + 10: uint16(39727), + 11: uint16(20095), + 12: uint16(20592), + 13: uint16(20586), + 14: uint16(20577), + 15: uint16(20574), + 16: uint16(20576), + 17: uint16(20563), + 18: uint16(20555), + 19: uint16(20573), + 20: uint16(20594), + 21: uint16(20552), + 22: uint16(20557), + 23: uint16(20545), + 24: uint16(20571), + 25: uint16(20554), + 26: uint16(20578), + 27: uint16(20501), + 28: uint16(20549), + 29: uint16(20575), + 30: uint16(20585), + 31: uint16(20587), + 32: uint16(20579), + 33: uint16(20580), + 34: uint16(20550), + 35: uint16(20544), + 36: uint16(20590), + 37: uint16(20595), + 38: uint16(20567), + 39: uint16(20561), + 40: uint16(20944), + 41: uint16(21099), + 42: uint16(21101), + 43: uint16(21100), + 44: uint16(21102), + 45: uint16(21206), + 46: uint16(21203), + 47: uint16(21293), + 48: uint16(21404), + 49: uint16(21877), + 50: uint16(21878), + 51: uint16(21820), + 52: uint16(21837), + 53: uint16(21840), + 54: uint16(21812), + 55: uint16(21802), + 56: uint16(21841), + 57: uint16(21858), + 58: uint16(21814), + 59: uint16(21813), + 60: uint16(21808), + 61: uint16(21842), + 62: uint16(21829), + 63: uint16(21772), + 64: uint16(21810), + 65: uint16(21861), + 66: uint16(21838), + 67: uint16(21817), + 68: uint16(21832), + 69: uint16(21805), + 70: uint16(21819), + 71: uint16(21824), + 72: uint16(21835), + 73: uint16(22282), + 74: uint16(22279), + 75: uint16(22523), + 76: uint16(22548), + 77: uint16(22498), + 78: uint16(22518), + 79: uint16(22492), + 80: uint16(22516), + 81: uint16(22528), + 82: uint16(22509), + 83: uint16(22525), + 84: uint16(22536), + 85: uint16(22520), + 86: uint16(22539), + 87: uint16(22515), + 88: uint16(22479), + 89: uint16(22535), + 90: uint16(22510), + 91: uint16(22499), + 92: uint16(22514), + 93: uint16(22501), + 94: uint16(22508), + 95: uint16(22497), + 96: uint16(22542), + 97: uint16(22524), + 98: uint16(22544), + 99: uint16(22503), + 100: uint16(22529), + 101: uint16(22540), + 102: uint16(22513), + 103: uint16(22505), + 104: uint16(22512), + 105: uint16(22541), + 106: uint16(22532), + 107: uint16(22876), + 108: uint16(23136), + 109: uint16(23128), + 110: uint16(23125), + 111: uint16(23143), + 112: uint16(23134), + 113: uint16(23096), + 114: uint16(23093), + 115: uint16(23149), + 116: uint16(23120), + 117: uint16(23135), + 118: uint16(23141), + 119: uint16(23148), + 120: uint16(23123), + 121: uint16(23140), + 122: uint16(23127), + 123: uint16(23107), + 124: uint16(23133), + 125: uint16(23122), + 126: uint16(23108), + 127: uint16(23131), + 128: uint16(23112), + 129: uint16(23182), + 130: uint16(23102), + 131: uint16(23117), + 132: uint16(23097), + 133: uint16(23116), + 134: uint16(23152), + 135: uint16(23145), + 136: uint16(23111), + 137: uint16(23121), + 138: uint16(23126), + 139: uint16(23106), + 140: uint16(23132), + 141: uint16(23410), + 142: uint16(23406), + 143: uint16(23489), + 144: uint16(23488), + 145: uint16(23641), + 146: uint16(23838), + 147: uint16(23819), + 148: uint16(23837), + 149: uint16(23834), + 150: uint16(23840), + 151: uint16(23820), + 152: uint16(23848), + 153: uint16(23821), + 154: uint16(23846), + 155: uint16(23845), + 156: uint16(23823), + }, + 52: { + 0: uint16(23856), + 1: uint16(23826), + 2: uint16(23843), + 3: uint16(23839), + 4: uint16(23854), + 5: uint16(24126), + 6: uint16(24116), + 7: uint16(24241), + 8: uint16(24244), + 9: uint16(24249), + 10: uint16(24242), + 11: uint16(24243), + 12: uint16(24374), + 13: uint16(24376), + 14: uint16(24475), + 15: uint16(24470), + 16: uint16(24479), + 17: uint16(24714), + 18: uint16(24720), + 19: uint16(24710), + 20: uint16(24766), + 21: uint16(24752), + 22: uint16(24762), + 23: uint16(24787), + 24: uint16(24788), + 25: uint16(24783), + 26: uint16(24804), + 27: uint16(24793), + 28: uint16(24797), + 29: uint16(24776), + 30: uint16(24753), + 31: uint16(24795), + 32: uint16(24759), + 33: uint16(24778), + 34: uint16(24767), + 35: uint16(24771), + 36: uint16(24781), + 37: uint16(24768), + 38: uint16(25394), + 39: uint16(25445), + 40: uint16(25482), + 41: uint16(25474), + 42: uint16(25469), + 43: uint16(25533), + 44: uint16(25502), + 45: uint16(25517), + 46: uint16(25501), + 47: uint16(25495), + 48: uint16(25515), + 49: uint16(25486), + 50: uint16(25455), + 51: uint16(25479), + 52: uint16(25488), + 53: uint16(25454), + 54: uint16(25519), + 55: uint16(25461), + 56: uint16(25500), + 57: uint16(25453), + 58: uint16(25518), + 59: uint16(25468), + 60: uint16(25508), + 61: uint16(25403), + 62: uint16(25503), + 63: uint16(25464), + 64: uint16(25477), + 65: uint16(25473), + 66: uint16(25489), + 67: uint16(25485), + 68: uint16(25456), + 69: uint16(25939), + 70: uint16(26061), + 71: uint16(26213), + 72: uint16(26209), + 73: uint16(26203), + 74: uint16(26201), + 75: uint16(26204), + 76: uint16(26210), + 77: uint16(26392), + 78: uint16(26745), + 79: uint16(26759), + 80: uint16(26768), + 81: uint16(26780), + 82: uint16(26733), + 83: uint16(26734), + 84: uint16(26798), + 85: uint16(26795), + 86: uint16(26966), + 87: uint16(26735), + 88: uint16(26787), + 89: uint16(26796), + 90: uint16(26793), + 91: uint16(26741), + 92: uint16(26740), + 93: uint16(26802), + 94: uint16(26767), + 95: uint16(26743), + 96: uint16(26770), + 97: uint16(26748), + 98: uint16(26731), + 99: uint16(26738), + 100: uint16(26794), + 101: uint16(26752), + 102: uint16(26737), + 103: uint16(26750), + 104: uint16(26779), + 105: uint16(26774), + 106: uint16(26763), + 107: uint16(26784), + 108: uint16(26761), + 109: uint16(26788), + 110: uint16(26744), + 111: uint16(26747), + 112: uint16(26769), + 113: uint16(26764), + 114: uint16(26762), + 115: uint16(26749), + 116: uint16(27446), + 117: uint16(27443), + 118: uint16(27447), + 119: uint16(27448), + 120: uint16(27537), + 121: uint16(27535), + 122: uint16(27533), + 123: uint16(27534), + 124: uint16(27532), + 125: uint16(27690), + 126: uint16(28096), + 127: uint16(28075), + 128: uint16(28084), + 129: uint16(28083), + 130: uint16(28276), + 131: uint16(28076), + 132: uint16(28137), + 133: uint16(28130), + 134: uint16(28087), + 135: uint16(28150), + 136: uint16(28116), + 137: uint16(28160), + 138: uint16(28104), + 139: uint16(28128), + 140: uint16(28127), + 141: uint16(28118), + 142: uint16(28094), + 143: uint16(28133), + 144: uint16(28124), + 145: uint16(28125), + 146: uint16(28123), + 147: uint16(28148), + 148: uint16(28106), + 149: uint16(28093), + 150: uint16(28141), + 151: uint16(28144), + 152: uint16(28090), + 153: uint16(28117), + 154: uint16(28098), + 155: uint16(28111), + 156: uint16(28105), + }, + 53: { + 0: uint16(28112), + 1: uint16(28146), + 2: uint16(28115), + 3: uint16(28157), + 4: uint16(28119), + 5: uint16(28109), + 6: uint16(28131), + 7: uint16(28091), + 8: uint16(28922), + 9: uint16(28941), + 10: uint16(28919), + 11: uint16(28951), + 12: uint16(28916), + 13: uint16(28940), + 14: uint16(28912), + 15: uint16(28932), + 16: uint16(28915), + 17: uint16(28944), + 18: uint16(28924), + 19: uint16(28927), + 20: uint16(28934), + 21: uint16(28947), + 22: uint16(28928), + 23: uint16(28920), + 24: uint16(28918), + 25: uint16(28939), + 26: uint16(28930), + 27: uint16(28942), + 28: uint16(29310), + 29: uint16(29307), + 30: uint16(29308), + 31: uint16(29311), + 32: uint16(29469), + 33: uint16(29463), + 34: uint16(29447), + 35: uint16(29457), + 36: uint16(29464), + 37: uint16(29450), + 38: uint16(29448), + 39: uint16(29439), + 40: uint16(29455), + 41: uint16(29470), + 42: uint16(29576), + 43: uint16(29686), + 44: uint16(29688), + 45: uint16(29685), + 46: uint16(29700), + 47: uint16(29697), + 48: uint16(29693), + 49: uint16(29703), + 50: uint16(29696), + 51: uint16(29690), + 52: uint16(29692), + 53: uint16(29695), + 54: uint16(29708), + 55: uint16(29707), + 56: uint16(29684), + 57: uint16(29704), + 58: uint16(30052), + 59: uint16(30051), + 60: uint16(30158), + 61: uint16(30162), + 62: uint16(30159), + 63: uint16(30155), + 64: uint16(30156), + 65: uint16(30161), + 66: uint16(30160), + 67: uint16(30351), + 68: uint16(30345), + 69: uint16(30419), + 70: uint16(30521), + 71: uint16(30511), + 72: uint16(30509), + 73: uint16(30513), + 74: uint16(30514), + 75: uint16(30516), + 76: uint16(30515), + 77: uint16(30525), + 78: uint16(30501), + 79: uint16(30523), + 80: uint16(30517), + 81: uint16(30792), + 82: uint16(30802), + 83: uint16(30793), + 84: uint16(30797), + 85: uint16(30794), + 86: uint16(30796), + 87: uint16(30758), + 88: uint16(30789), + 89: uint16(30800), + 90: uint16(31076), + 91: uint16(31079), + 92: uint16(31081), + 93: uint16(31082), + 94: uint16(31075), + 95: uint16(31083), + 96: uint16(31073), + 97: uint16(31163), + 98: uint16(31226), + 99: uint16(31224), + 100: uint16(31222), + 101: uint16(31223), + 102: uint16(31375), + 103: uint16(31380), + 104: uint16(31376), + 105: uint16(31541), + 106: uint16(31559), + 107: uint16(31540), + 108: uint16(31525), + 109: uint16(31536), + 110: uint16(31522), + 111: uint16(31524), + 112: uint16(31539), + 113: uint16(31512), + 114: uint16(31530), + 115: uint16(31517), + 116: uint16(31537), + 117: uint16(31531), + 118: uint16(31533), + 119: uint16(31535), + 120: uint16(31538), + 121: uint16(31544), + 122: uint16(31514), + 123: uint16(31523), + 124: uint16(31892), + 125: uint16(31896), + 126: uint16(31894), + 127: uint16(31907), + 128: uint16(32053), + 129: uint16(32061), + 130: uint16(32056), + 131: uint16(32054), + 132: uint16(32058), + 133: uint16(32069), + 134: uint16(32044), + 135: uint16(32041), + 136: uint16(32065), + 137: uint16(32071), + 138: uint16(32062), + 139: uint16(32063), + 140: uint16(32074), + 141: uint16(32059), + 142: uint16(32040), + 143: uint16(32611), + 144: uint16(32661), + 145: uint16(32668), + 146: uint16(32669), + 147: uint16(32667), + 148: uint16(32714), + 149: uint16(32715), + 150: uint16(32717), + 151: uint16(32720), + 152: uint16(32721), + 153: uint16(32711), + 154: uint16(32719), + 155: uint16(32713), + 156: uint16(32799), + }, + 54: { + 0: uint16(32798), + 1: uint16(32795), + 2: uint16(32839), + 3: uint16(32835), + 4: uint16(32840), + 5: uint16(33048), + 6: uint16(33061), + 7: uint16(33049), + 8: uint16(33051), + 9: uint16(33069), + 10: uint16(33055), + 11: uint16(33068), + 12: uint16(33054), + 13: uint16(33057), + 14: uint16(33045), + 15: uint16(33063), + 16: uint16(33053), + 17: uint16(33058), + 18: uint16(33297), + 19: uint16(33336), + 20: uint16(33331), + 21: uint16(33338), + 22: uint16(33332), + 23: uint16(33330), + 24: uint16(33396), + 25: uint16(33680), + 26: uint16(33699), + 27: uint16(33704), + 28: uint16(33677), + 29: uint16(33658), + 30: uint16(33651), + 31: uint16(33700), + 32: uint16(33652), + 33: uint16(33679), + 34: uint16(33665), + 35: uint16(33685), + 36: uint16(33689), + 37: uint16(33653), + 38: uint16(33684), + 39: uint16(33705), + 40: uint16(33661), + 41: uint16(33667), + 42: uint16(33676), + 43: uint16(33693), + 44: uint16(33691), + 45: uint16(33706), + 46: uint16(33675), + 47: uint16(33662), + 48: uint16(33701), + 49: uint16(33711), + 50: uint16(33672), + 51: uint16(33687), + 52: uint16(33712), + 53: uint16(33663), + 54: uint16(33702), + 55: uint16(33671), + 56: uint16(33710), + 57: uint16(33654), + 58: uint16(33690), + 59: uint16(34393), + 60: uint16(34390), + 61: uint16(34495), + 62: uint16(34487), + 63: uint16(34498), + 64: uint16(34497), + 65: uint16(34501), + 66: uint16(34490), + 67: uint16(34480), + 68: uint16(34504), + 69: uint16(34489), + 70: uint16(34483), + 71: uint16(34488), + 72: uint16(34508), + 73: uint16(34484), + 74: uint16(34491), + 75: uint16(34492), + 76: uint16(34499), + 77: uint16(34493), + 78: uint16(34494), + 79: uint16(34898), + 80: uint16(34953), + 81: uint16(34965), + 82: uint16(34984), + 83: uint16(34978), + 84: uint16(34986), + 85: uint16(34970), + 86: uint16(34961), + 87: uint16(34977), + 88: uint16(34975), + 89: uint16(34968), + 90: uint16(34983), + 91: uint16(34969), + 92: uint16(34971), + 93: uint16(34967), + 94: uint16(34980), + 95: uint16(34988), + 96: uint16(34956), + 97: uint16(34963), + 98: uint16(34958), + 99: uint16(35202), + 100: uint16(35286), + 101: uint16(35289), + 102: uint16(35285), + 103: uint16(35376), + 104: uint16(35367), + 105: uint16(35372), + 106: uint16(35358), + 107: uint16(35897), + 108: uint16(35899), + 109: uint16(35932), + 110: uint16(35933), + 111: uint16(35965), + 112: uint16(36005), + 113: uint16(36221), + 114: uint16(36219), + 115: uint16(36217), + 116: uint16(36284), + 117: uint16(36290), + 118: uint16(36281), + 119: uint16(36287), + 120: uint16(36289), + 121: uint16(36568), + 122: uint16(36574), + 123: uint16(36573), + 124: uint16(36572), + 125: uint16(36567), + 126: uint16(36576), + 127: uint16(36577), + 128: uint16(36900), + 129: uint16(36875), + 130: uint16(36881), + 131: uint16(36892), + 132: uint16(36876), + 133: uint16(36897), + 134: uint16(37103), + 135: uint16(37098), + 136: uint16(37104), + 137: uint16(37108), + 138: uint16(37106), + 139: uint16(37107), + 140: uint16(37076), + 141: uint16(37099), + 142: uint16(37100), + 143: uint16(37097), + 144: uint16(37206), + 145: uint16(37208), + 146: uint16(37210), + 147: uint16(37203), + 148: uint16(37205), + 149: uint16(37356), + 150: uint16(37364), + 151: uint16(37361), + 152: uint16(37363), + 153: uint16(37368), + 154: uint16(37348), + 155: uint16(37369), + 156: uint16(37354), + }, + 55: { + 0: uint16(37355), + 1: uint16(37367), + 2: uint16(37352), + 3: uint16(37358), + 4: uint16(38266), + 5: uint16(38278), + 6: uint16(38280), + 7: uint16(38524), + 8: uint16(38509), + 9: uint16(38507), + 10: uint16(38513), + 11: uint16(38511), + 12: uint16(38591), + 13: uint16(38762), + 14: uint16(38916), + 15: uint16(39141), + 16: uint16(39319), + 17: uint16(20635), + 18: uint16(20629), + 19: uint16(20628), + 20: uint16(20638), + 21: uint16(20619), + 22: uint16(20643), + 23: uint16(20611), + 24: uint16(20620), + 25: uint16(20622), + 26: uint16(20637), + 27: uint16(20584), + 28: uint16(20636), + 29: uint16(20626), + 30: uint16(20610), + 31: uint16(20615), + 32: uint16(20831), + 33: uint16(20948), + 34: uint16(21266), + 35: uint16(21265), + 36: uint16(21412), + 37: uint16(21415), + 38: uint16(21905), + 39: uint16(21928), + 40: uint16(21925), + 41: uint16(21933), + 42: uint16(21879), + 43: uint16(22085), + 44: uint16(21922), + 45: uint16(21907), + 46: uint16(21896), + 47: uint16(21903), + 48: uint16(21941), + 49: uint16(21889), + 50: uint16(21923), + 51: uint16(21906), + 52: uint16(21924), + 53: uint16(21885), + 54: uint16(21900), + 55: uint16(21926), + 56: uint16(21887), + 57: uint16(21909), + 58: uint16(21921), + 59: uint16(21902), + 60: uint16(22284), + 61: uint16(22569), + 62: uint16(22583), + 63: uint16(22553), + 64: uint16(22558), + 65: uint16(22567), + 66: uint16(22563), + 67: uint16(22568), + 68: uint16(22517), + 69: uint16(22600), + 70: uint16(22565), + 71: uint16(22556), + 72: uint16(22555), + 73: uint16(22579), + 74: uint16(22591), + 75: uint16(22582), + 76: uint16(22574), + 77: uint16(22585), + 78: uint16(22584), + 79: uint16(22573), + 80: uint16(22572), + 81: uint16(22587), + 82: uint16(22881), + 83: uint16(23215), + 84: uint16(23188), + 85: uint16(23199), + 86: uint16(23162), + 87: uint16(23202), + 88: uint16(23198), + 89: uint16(23160), + 90: uint16(23206), + 91: uint16(23164), + 92: uint16(23205), + 93: uint16(23212), + 94: uint16(23189), + 95: uint16(23214), + 96: uint16(23095), + 97: uint16(23172), + 98: uint16(23178), + 99: uint16(23191), + 100: uint16(23171), + 101: uint16(23179), + 102: uint16(23209), + 103: uint16(23163), + 104: uint16(23165), + 105: uint16(23180), + 106: uint16(23196), + 107: uint16(23183), + 108: uint16(23187), + 109: uint16(23197), + 110: uint16(23530), + 111: uint16(23501), + 112: uint16(23499), + 113: uint16(23508), + 114: uint16(23505), + 115: uint16(23498), + 116: uint16(23502), + 117: uint16(23564), + 118: uint16(23600), + 119: uint16(23863), + 120: uint16(23875), + 121: uint16(23915), + 122: uint16(23873), + 123: uint16(23883), + 124: uint16(23871), + 125: uint16(23861), + 126: uint16(23889), + 127: uint16(23886), + 128: uint16(23893), + 129: uint16(23859), + 130: uint16(23866), + 131: uint16(23890), + 132: uint16(23869), + 133: uint16(23857), + 134: uint16(23897), + 135: uint16(23874), + 136: uint16(23865), + 137: uint16(23881), + 138: uint16(23864), + 139: uint16(23868), + 140: uint16(23858), + 141: uint16(23862), + 142: uint16(23872), + 143: uint16(23877), + 144: uint16(24132), + 145: uint16(24129), + 146: uint16(24408), + 147: uint16(24486), + 148: uint16(24485), + 149: uint16(24491), + 150: uint16(24777), + 151: uint16(24761), + 152: uint16(24780), + 153: uint16(24802), + 154: uint16(24782), + 155: uint16(24772), + 156: uint16(24852), + }, + 56: { + 0: uint16(24818), + 1: uint16(24842), + 2: uint16(24854), + 3: uint16(24837), + 4: uint16(24821), + 5: uint16(24851), + 6: uint16(24824), + 7: uint16(24828), + 8: uint16(24830), + 9: uint16(24769), + 10: uint16(24835), + 11: uint16(24856), + 12: uint16(24861), + 13: uint16(24848), + 14: uint16(24831), + 15: uint16(24836), + 16: uint16(24843), + 17: uint16(25162), + 18: uint16(25492), + 19: uint16(25521), + 20: uint16(25520), + 21: uint16(25550), + 22: uint16(25573), + 23: uint16(25576), + 24: uint16(25583), + 25: uint16(25539), + 26: uint16(25757), + 27: uint16(25587), + 28: uint16(25546), + 29: uint16(25568), + 30: uint16(25590), + 31: uint16(25557), + 32: uint16(25586), + 33: uint16(25589), + 34: uint16(25697), + 35: uint16(25567), + 36: uint16(25534), + 37: uint16(25565), + 38: uint16(25564), + 39: uint16(25540), + 40: uint16(25560), + 41: uint16(25555), + 42: uint16(25538), + 43: uint16(25543), + 44: uint16(25548), + 45: uint16(25547), + 46: uint16(25544), + 47: uint16(25584), + 48: uint16(25559), + 49: uint16(25561), + 50: uint16(25906), + 51: uint16(25959), + 52: uint16(25962), + 53: uint16(25956), + 54: uint16(25948), + 55: uint16(25960), + 56: uint16(25957), + 57: uint16(25996), + 58: uint16(26013), + 59: uint16(26014), + 60: uint16(26030), + 61: uint16(26064), + 62: uint16(26066), + 63: uint16(26236), + 64: uint16(26220), + 65: uint16(26235), + 66: uint16(26240), + 67: uint16(26225), + 68: uint16(26233), + 69: uint16(26218), + 70: uint16(26226), + 71: uint16(26369), + 72: uint16(26892), + 73: uint16(26835), + 74: uint16(26884), + 75: uint16(26844), + 76: uint16(26922), + 77: uint16(26860), + 78: uint16(26858), + 79: uint16(26865), + 80: uint16(26895), + 81: uint16(26838), + 82: uint16(26871), + 83: uint16(26859), + 84: uint16(26852), + 85: uint16(26870), + 86: uint16(26899), + 87: uint16(26896), + 88: uint16(26867), + 89: uint16(26849), + 90: uint16(26887), + 91: uint16(26828), + 92: uint16(26888), + 93: uint16(26992), + 94: uint16(26804), + 95: uint16(26897), + 96: uint16(26863), + 97: uint16(26822), + 98: uint16(26900), + 99: uint16(26872), + 100: uint16(26832), + 101: uint16(26877), + 102: uint16(26876), + 103: uint16(26856), + 104: uint16(26891), + 105: uint16(26890), + 106: uint16(26903), + 107: uint16(26830), + 108: uint16(26824), + 109: uint16(26845), + 110: uint16(26846), + 111: uint16(26854), + 112: uint16(26868), + 113: uint16(26833), + 114: uint16(26886), + 115: uint16(26836), + 116: uint16(26857), + 117: uint16(26901), + 118: uint16(26917), + 119: uint16(26823), + 120: uint16(27449), + 121: uint16(27451), + 122: uint16(27455), + 123: uint16(27452), + 124: uint16(27540), + 125: uint16(27543), + 126: uint16(27545), + 127: uint16(27541), + 128: uint16(27581), + 129: uint16(27632), + 130: uint16(27634), + 131: uint16(27635), + 132: uint16(27696), + 133: uint16(28156), + 134: uint16(28230), + 135: uint16(28231), + 136: uint16(28191), + 137: uint16(28233), + 138: uint16(28296), + 139: uint16(28220), + 140: uint16(28221), + 141: uint16(28229), + 142: uint16(28258), + 143: uint16(28203), + 144: uint16(28223), + 145: uint16(28225), + 146: uint16(28253), + 147: uint16(28275), + 148: uint16(28188), + 149: uint16(28211), + 150: uint16(28235), + 151: uint16(28224), + 152: uint16(28241), + 153: uint16(28219), + 154: uint16(28163), + 155: uint16(28206), + 156: uint16(28254), + }, + 57: { + 0: uint16(28264), + 1: uint16(28252), + 2: uint16(28257), + 3: uint16(28209), + 4: uint16(28200), + 5: uint16(28256), + 6: uint16(28273), + 7: uint16(28267), + 8: uint16(28217), + 9: uint16(28194), + 10: uint16(28208), + 11: uint16(28243), + 12: uint16(28261), + 13: uint16(28199), + 14: uint16(28280), + 15: uint16(28260), + 16: uint16(28279), + 17: uint16(28245), + 18: uint16(28281), + 19: uint16(28242), + 20: uint16(28262), + 21: uint16(28213), + 22: uint16(28214), + 23: uint16(28250), + 24: uint16(28960), + 25: uint16(28958), + 26: uint16(28975), + 27: uint16(28923), + 28: uint16(28974), + 29: uint16(28977), + 30: uint16(28963), + 31: uint16(28965), + 32: uint16(28962), + 33: uint16(28978), + 34: uint16(28959), + 35: uint16(28968), + 36: uint16(28986), + 37: uint16(28955), + 38: uint16(29259), + 39: uint16(29274), + 40: uint16(29320), + 41: uint16(29321), + 42: uint16(29318), + 43: uint16(29317), + 44: uint16(29323), + 45: uint16(29458), + 46: uint16(29451), + 47: uint16(29488), + 48: uint16(29474), + 49: uint16(29489), + 50: uint16(29491), + 51: uint16(29479), + 52: uint16(29490), + 53: uint16(29485), + 54: uint16(29478), + 55: uint16(29475), + 56: uint16(29493), + 57: uint16(29452), + 58: uint16(29742), + 59: uint16(29740), + 60: uint16(29744), + 61: uint16(29739), + 62: uint16(29718), + 63: uint16(29722), + 64: uint16(29729), + 65: uint16(29741), + 66: uint16(29745), + 67: uint16(29732), + 68: uint16(29731), + 69: uint16(29725), + 70: uint16(29737), + 71: uint16(29728), + 72: uint16(29746), + 73: uint16(29947), + 74: uint16(29999), + 75: uint16(30063), + 76: uint16(30060), + 77: uint16(30183), + 78: uint16(30170), + 79: uint16(30177), + 80: uint16(30182), + 81: uint16(30173), + 82: uint16(30175), + 83: uint16(30180), + 84: uint16(30167), + 85: uint16(30357), + 86: uint16(30354), + 87: uint16(30426), + 88: uint16(30534), + 89: uint16(30535), + 90: uint16(30532), + 91: uint16(30541), + 92: uint16(30533), + 93: uint16(30538), + 94: uint16(30542), + 95: uint16(30539), + 96: uint16(30540), + 97: uint16(30686), + 98: uint16(30700), + 99: uint16(30816), + 100: uint16(30820), + 101: uint16(30821), + 102: uint16(30812), + 103: uint16(30829), + 104: uint16(30833), + 105: uint16(30826), + 106: uint16(30830), + 107: uint16(30832), + 108: uint16(30825), + 109: uint16(30824), + 110: uint16(30814), + 111: uint16(30818), + 112: uint16(31092), + 113: uint16(31091), + 114: uint16(31090), + 115: uint16(31088), + 116: uint16(31234), + 117: uint16(31242), + 118: uint16(31235), + 119: uint16(31244), + 120: uint16(31236), + 121: uint16(31385), + 122: uint16(31462), + 123: uint16(31460), + 124: uint16(31562), + 125: uint16(31547), + 126: uint16(31556), + 127: uint16(31560), + 128: uint16(31564), + 129: uint16(31566), + 130: uint16(31552), + 131: uint16(31576), + 132: uint16(31557), + 133: uint16(31906), + 134: uint16(31902), + 135: uint16(31912), + 136: uint16(31905), + 137: uint16(32088), + 138: uint16(32111), + 139: uint16(32099), + 140: uint16(32083), + 141: uint16(32086), + 142: uint16(32103), + 143: uint16(32106), + 144: uint16(32079), + 145: uint16(32109), + 146: uint16(32092), + 147: uint16(32107), + 148: uint16(32082), + 149: uint16(32084), + 150: uint16(32105), + 151: uint16(32081), + 152: uint16(32095), + 153: uint16(32078), + 154: uint16(32574), + 155: uint16(32575), + 156: uint16(32613), + }, + 58: { + 0: uint16(32614), + 1: uint16(32674), + 2: uint16(32672), + 3: uint16(32673), + 4: uint16(32727), + 5: uint16(32849), + 6: uint16(32847), + 7: uint16(32848), + 8: uint16(33022), + 9: uint16(32980), + 10: uint16(33091), + 11: uint16(33098), + 12: uint16(33106), + 13: uint16(33103), + 14: uint16(33095), + 15: uint16(33085), + 16: uint16(33101), + 17: uint16(33082), + 18: uint16(33254), + 19: uint16(33262), + 20: uint16(33271), + 21: uint16(33272), + 22: uint16(33273), + 23: uint16(33284), + 24: uint16(33340), + 25: uint16(33341), + 26: uint16(33343), + 27: uint16(33397), + 28: uint16(33595), + 29: uint16(33743), + 30: uint16(33785), + 31: uint16(33827), + 32: uint16(33728), + 33: uint16(33768), + 34: uint16(33810), + 35: uint16(33767), + 36: uint16(33764), + 37: uint16(33788), + 38: uint16(33782), + 39: uint16(33808), + 40: uint16(33734), + 41: uint16(33736), + 42: uint16(33771), + 43: uint16(33763), + 44: uint16(33727), + 45: uint16(33793), + 46: uint16(33757), + 47: uint16(33765), + 48: uint16(33752), + 49: uint16(33791), + 50: uint16(33761), + 51: uint16(33739), + 52: uint16(33742), + 53: uint16(33750), + 54: uint16(33781), + 55: uint16(33737), + 56: uint16(33801), + 57: uint16(33807), + 58: uint16(33758), + 59: uint16(33809), + 60: uint16(33798), + 61: uint16(33730), + 62: uint16(33779), + 63: uint16(33749), + 64: uint16(33786), + 65: uint16(33735), + 66: uint16(33745), + 67: uint16(33770), + 68: uint16(33811), + 69: uint16(33731), + 70: uint16(33772), + 71: uint16(33774), + 72: uint16(33732), + 73: uint16(33787), + 74: uint16(33751), + 75: uint16(33762), + 76: uint16(33819), + 77: uint16(33755), + 78: uint16(33790), + 79: uint16(34520), + 80: uint16(34530), + 81: uint16(34534), + 82: uint16(34515), + 83: uint16(34531), + 84: uint16(34522), + 85: uint16(34538), + 86: uint16(34525), + 87: uint16(34539), + 88: uint16(34524), + 89: uint16(34540), + 90: uint16(34537), + 91: uint16(34519), + 92: uint16(34536), + 93: uint16(34513), + 94: uint16(34888), + 95: uint16(34902), + 96: uint16(34901), + 97: uint16(35002), + 98: uint16(35031), + 99: uint16(35001), + 100: uint16(35000), + 101: uint16(35008), + 102: uint16(35006), + 103: uint16(34998), + 104: uint16(35004), + 105: uint16(34999), + 106: uint16(35005), + 107: uint16(34994), + 108: uint16(35073), + 109: uint16(35017), + 110: uint16(35221), + 111: uint16(35224), + 112: uint16(35223), + 113: uint16(35293), + 114: uint16(35290), + 115: uint16(35291), + 116: uint16(35406), + 117: uint16(35405), + 118: uint16(35385), + 119: uint16(35417), + 120: uint16(35392), + 121: uint16(35415), + 122: uint16(35416), + 123: uint16(35396), + 124: uint16(35397), + 125: uint16(35410), + 126: uint16(35400), + 127: uint16(35409), + 128: uint16(35402), + 129: uint16(35404), + 130: uint16(35407), + 131: uint16(35935), + 132: uint16(35969), + 133: uint16(35968), + 134: uint16(36026), + 135: uint16(36030), + 136: uint16(36016), + 137: uint16(36025), + 138: uint16(36021), + 139: uint16(36228), + 140: uint16(36224), + 141: uint16(36233), + 142: uint16(36312), + 143: uint16(36307), + 144: uint16(36301), + 145: uint16(36295), + 146: uint16(36310), + 147: uint16(36316), + 148: uint16(36303), + 149: uint16(36309), + 150: uint16(36313), + 151: uint16(36296), + 152: uint16(36311), + 153: uint16(36293), + 154: uint16(36591), + 155: uint16(36599), + 156: uint16(36602), + }, + 59: { + 0: uint16(36601), + 1: uint16(36582), + 2: uint16(36590), + 3: uint16(36581), + 4: uint16(36597), + 5: uint16(36583), + 6: uint16(36584), + 7: uint16(36598), + 8: uint16(36587), + 9: uint16(36593), + 10: uint16(36588), + 11: uint16(36596), + 12: uint16(36585), + 13: uint16(36909), + 14: uint16(36916), + 15: uint16(36911), + 16: uint16(37126), + 17: uint16(37164), + 18: uint16(37124), + 19: uint16(37119), + 20: uint16(37116), + 21: uint16(37128), + 22: uint16(37113), + 23: uint16(37115), + 24: uint16(37121), + 25: uint16(37120), + 26: uint16(37127), + 27: uint16(37125), + 28: uint16(37123), + 29: uint16(37217), + 30: uint16(37220), + 31: uint16(37215), + 32: uint16(37218), + 33: uint16(37216), + 34: uint16(37377), + 35: uint16(37386), + 36: uint16(37413), + 37: uint16(37379), + 38: uint16(37402), + 39: uint16(37414), + 40: uint16(37391), + 41: uint16(37388), + 42: uint16(37376), + 43: uint16(37394), + 44: uint16(37375), + 45: uint16(37373), + 46: uint16(37382), + 47: uint16(37380), + 48: uint16(37415), + 49: uint16(37378), + 50: uint16(37404), + 51: uint16(37412), + 52: uint16(37401), + 53: uint16(37399), + 54: uint16(37381), + 55: uint16(37398), + 56: uint16(38267), + 57: uint16(38285), + 58: uint16(38284), + 59: uint16(38288), + 60: uint16(38535), + 61: uint16(38526), + 62: uint16(38536), + 63: uint16(38537), + 64: uint16(38531), + 65: uint16(38528), + 66: uint16(38594), + 67: uint16(38600), + 68: uint16(38595), + 69: uint16(38641), + 70: uint16(38640), + 71: uint16(38764), + 72: uint16(38768), + 73: uint16(38766), + 74: uint16(38919), + 75: uint16(39081), + 76: uint16(39147), + 77: uint16(40166), + 78: uint16(40697), + 79: uint16(20099), + 80: uint16(20100), + 81: uint16(20150), + 82: uint16(20669), + 83: uint16(20671), + 84: uint16(20678), + 85: uint16(20654), + 86: uint16(20676), + 87: uint16(20682), + 88: uint16(20660), + 89: uint16(20680), + 90: uint16(20674), + 91: uint16(20656), + 92: uint16(20673), + 93: uint16(20666), + 94: uint16(20657), + 95: uint16(20683), + 96: uint16(20681), + 97: uint16(20662), + 98: uint16(20664), + 99: uint16(20951), + 100: uint16(21114), + 101: uint16(21112), + 102: uint16(21115), + 103: uint16(21116), + 104: uint16(21955), + 105: uint16(21979), + 106: uint16(21964), + 107: uint16(21968), + 108: uint16(21963), + 109: uint16(21962), + 110: uint16(21981), + 111: uint16(21952), + 112: uint16(21972), + 113: uint16(21956), + 114: uint16(21993), + 115: uint16(21951), + 116: uint16(21970), + 117: uint16(21901), + 118: uint16(21967), + 119: uint16(21973), + 120: uint16(21986), + 121: uint16(21974), + 122: uint16(21960), + 123: uint16(22002), + 124: uint16(21965), + 125: uint16(21977), + 126: uint16(21954), + 127: uint16(22292), + 128: uint16(22611), + 129: uint16(22632), + 130: uint16(22628), + 131: uint16(22607), + 132: uint16(22605), + 133: uint16(22601), + 134: uint16(22639), + 135: uint16(22613), + 136: uint16(22606), + 137: uint16(22621), + 138: uint16(22617), + 139: uint16(22629), + 140: uint16(22619), + 141: uint16(22589), + 142: uint16(22627), + 143: uint16(22641), + 144: uint16(22780), + 145: uint16(23239), + 146: uint16(23236), + 147: uint16(23243), + 148: uint16(23226), + 149: uint16(23224), + 150: uint16(23217), + 151: uint16(23221), + 152: uint16(23216), + 153: uint16(23231), + 154: uint16(23240), + 155: uint16(23227), + 156: uint16(23238), + }, + 60: { + 0: uint16(23223), + 1: uint16(23232), + 2: uint16(23242), + 3: uint16(23220), + 4: uint16(23222), + 5: uint16(23245), + 6: uint16(23225), + 7: uint16(23184), + 8: uint16(23510), + 9: uint16(23512), + 10: uint16(23513), + 11: uint16(23583), + 12: uint16(23603), + 13: uint16(23921), + 14: uint16(23907), + 15: uint16(23882), + 16: uint16(23909), + 17: uint16(23922), + 18: uint16(23916), + 19: uint16(23902), + 20: uint16(23912), + 21: uint16(23911), + 22: uint16(23906), + 23: uint16(24048), + 24: uint16(24143), + 25: uint16(24142), + 26: uint16(24138), + 27: uint16(24141), + 28: uint16(24139), + 29: uint16(24261), + 30: uint16(24268), + 31: uint16(24262), + 32: uint16(24267), + 33: uint16(24263), + 34: uint16(24384), + 35: uint16(24495), + 36: uint16(24493), + 37: uint16(24823), + 38: uint16(24905), + 39: uint16(24906), + 40: uint16(24875), + 41: uint16(24901), + 42: uint16(24886), + 43: uint16(24882), + 44: uint16(24878), + 45: uint16(24902), + 46: uint16(24879), + 47: uint16(24911), + 48: uint16(24873), + 49: uint16(24896), + 50: uint16(25120), + 51: uint16(37224), + 52: uint16(25123), + 53: uint16(25125), + 54: uint16(25124), + 55: uint16(25541), + 56: uint16(25585), + 57: uint16(25579), + 58: uint16(25616), + 59: uint16(25618), + 60: uint16(25609), + 61: uint16(25632), + 62: uint16(25636), + 63: uint16(25651), + 64: uint16(25667), + 65: uint16(25631), + 66: uint16(25621), + 67: uint16(25624), + 68: uint16(25657), + 69: uint16(25655), + 70: uint16(25634), + 71: uint16(25635), + 72: uint16(25612), + 73: uint16(25638), + 74: uint16(25648), + 75: uint16(25640), + 76: uint16(25665), + 77: uint16(25653), + 78: uint16(25647), + 79: uint16(25610), + 80: uint16(25626), + 81: uint16(25664), + 82: uint16(25637), + 83: uint16(25639), + 84: uint16(25611), + 85: uint16(25575), + 86: uint16(25627), + 87: uint16(25646), + 88: uint16(25633), + 89: uint16(25614), + 90: uint16(25967), + 91: uint16(26002), + 92: uint16(26067), + 93: uint16(26246), + 94: uint16(26252), + 95: uint16(26261), + 96: uint16(26256), + 97: uint16(26251), + 98: uint16(26250), + 99: uint16(26265), + 100: uint16(26260), + 101: uint16(26232), + 102: uint16(26400), + 103: uint16(26982), + 104: uint16(26975), + 105: uint16(26936), + 106: uint16(26958), + 107: uint16(26978), + 108: uint16(26993), + 109: uint16(26943), + 110: uint16(26949), + 111: uint16(26986), + 112: uint16(26937), + 113: uint16(26946), + 114: uint16(26967), + 115: uint16(26969), + 116: uint16(27002), + 117: uint16(26952), + 118: uint16(26953), + 119: uint16(26933), + 120: uint16(26988), + 121: uint16(26931), + 122: uint16(26941), + 123: uint16(26981), + 124: uint16(26864), + 125: uint16(27000), + 126: uint16(26932), + 127: uint16(26985), + 128: uint16(26944), + 129: uint16(26991), + 130: uint16(26948), + 131: uint16(26998), + 132: uint16(26968), + 133: uint16(26945), + 134: uint16(26996), + 135: uint16(26956), + 136: uint16(26939), + 137: uint16(26955), + 138: uint16(26935), + 139: uint16(26972), + 140: uint16(26959), + 141: uint16(26961), + 142: uint16(26930), + 143: uint16(26962), + 144: uint16(26927), + 145: uint16(27003), + 146: uint16(26940), + 147: uint16(27462), + 148: uint16(27461), + 149: uint16(27459), + 150: uint16(27458), + 151: uint16(27464), + 152: uint16(27457), + 153: uint16(27547), + 154: uint16(64013), + 155: uint16(27643), + 156: uint16(27644), + }, + 61: { + 0: uint16(27641), + 1: uint16(27639), + 2: uint16(27640), + 3: uint16(28315), + 4: uint16(28374), + 5: uint16(28360), + 6: uint16(28303), + 7: uint16(28352), + 8: uint16(28319), + 9: uint16(28307), + 10: uint16(28308), + 11: uint16(28320), + 12: uint16(28337), + 13: uint16(28345), + 14: uint16(28358), + 15: uint16(28370), + 16: uint16(28349), + 17: uint16(28353), + 18: uint16(28318), + 19: uint16(28361), + 20: uint16(28343), + 21: uint16(28336), + 22: uint16(28365), + 23: uint16(28326), + 24: uint16(28367), + 25: uint16(28338), + 26: uint16(28350), + 27: uint16(28355), + 28: uint16(28380), + 29: uint16(28376), + 30: uint16(28313), + 31: uint16(28306), + 32: uint16(28302), + 33: uint16(28301), + 34: uint16(28324), + 35: uint16(28321), + 36: uint16(28351), + 37: uint16(28339), + 38: uint16(28368), + 39: uint16(28362), + 40: uint16(28311), + 41: uint16(28334), + 42: uint16(28323), + 43: uint16(28999), + 44: uint16(29012), + 45: uint16(29010), + 46: uint16(29027), + 47: uint16(29024), + 48: uint16(28993), + 49: uint16(29021), + 50: uint16(29026), + 51: uint16(29042), + 52: uint16(29048), + 53: uint16(29034), + 54: uint16(29025), + 55: uint16(28994), + 56: uint16(29016), + 57: uint16(28995), + 58: uint16(29003), + 59: uint16(29040), + 60: uint16(29023), + 61: uint16(29008), + 62: uint16(29011), + 63: uint16(28996), + 64: uint16(29005), + 65: uint16(29018), + 66: uint16(29263), + 67: uint16(29325), + 68: uint16(29324), + 69: uint16(29329), + 70: uint16(29328), + 71: uint16(29326), + 72: uint16(29500), + 73: uint16(29506), + 74: uint16(29499), + 75: uint16(29498), + 76: uint16(29504), + 77: uint16(29514), + 78: uint16(29513), + 79: uint16(29764), + 80: uint16(29770), + 81: uint16(29771), + 82: uint16(29778), + 83: uint16(29777), + 84: uint16(29783), + 85: uint16(29760), + 86: uint16(29775), + 87: uint16(29776), + 88: uint16(29774), + 89: uint16(29762), + 90: uint16(29766), + 91: uint16(29773), + 92: uint16(29780), + 93: uint16(29921), + 94: uint16(29951), + 95: uint16(29950), + 96: uint16(29949), + 97: uint16(29981), + 98: uint16(30073), + 99: uint16(30071), + 100: uint16(27011), + 101: uint16(30191), + 102: uint16(30223), + 103: uint16(30211), + 104: uint16(30199), + 105: uint16(30206), + 106: uint16(30204), + 107: uint16(30201), + 108: uint16(30200), + 109: uint16(30224), + 110: uint16(30203), + 111: uint16(30198), + 112: uint16(30189), + 113: uint16(30197), + 114: uint16(30205), + 115: uint16(30361), + 116: uint16(30389), + 117: uint16(30429), + 118: uint16(30549), + 119: uint16(30559), + 120: uint16(30560), + 121: uint16(30546), + 122: uint16(30550), + 123: uint16(30554), + 124: uint16(30569), + 125: uint16(30567), + 126: uint16(30548), + 127: uint16(30553), + 128: uint16(30573), + 129: uint16(30688), + 130: uint16(30855), + 131: uint16(30874), + 132: uint16(30868), + 133: uint16(30863), + 134: uint16(30852), + 135: uint16(30869), + 136: uint16(30853), + 137: uint16(30854), + 138: uint16(30881), + 139: uint16(30851), + 140: uint16(30841), + 141: uint16(30873), + 142: uint16(30848), + 143: uint16(30870), + 144: uint16(30843), + 145: uint16(31100), + 146: uint16(31106), + 147: uint16(31101), + 148: uint16(31097), + 149: uint16(31249), + 150: uint16(31256), + 151: uint16(31257), + 152: uint16(31250), + 153: uint16(31255), + 154: uint16(31253), + 155: uint16(31266), + 156: uint16(31251), + }, + 62: { + 0: uint16(31259), + 1: uint16(31248), + 2: uint16(31395), + 3: uint16(31394), + 4: uint16(31390), + 5: uint16(31467), + 6: uint16(31590), + 7: uint16(31588), + 8: uint16(31597), + 9: uint16(31604), + 10: uint16(31593), + 11: uint16(31602), + 12: uint16(31589), + 13: uint16(31603), + 14: uint16(31601), + 15: uint16(31600), + 16: uint16(31585), + 17: uint16(31608), + 18: uint16(31606), + 19: uint16(31587), + 20: uint16(31922), + 21: uint16(31924), + 22: uint16(31919), + 23: uint16(32136), + 24: uint16(32134), + 25: uint16(32128), + 26: uint16(32141), + 27: uint16(32127), + 28: uint16(32133), + 29: uint16(32122), + 30: uint16(32142), + 31: uint16(32123), + 32: uint16(32131), + 33: uint16(32124), + 34: uint16(32140), + 35: uint16(32148), + 36: uint16(32132), + 37: uint16(32125), + 38: uint16(32146), + 39: uint16(32621), + 40: uint16(32619), + 41: uint16(32615), + 42: uint16(32616), + 43: uint16(32620), + 44: uint16(32678), + 45: uint16(32677), + 46: uint16(32679), + 47: uint16(32731), + 48: uint16(32732), + 49: uint16(32801), + 50: uint16(33124), + 51: uint16(33120), + 52: uint16(33143), + 53: uint16(33116), + 54: uint16(33129), + 55: uint16(33115), + 56: uint16(33122), + 57: uint16(33138), + 58: uint16(26401), + 59: uint16(33118), + 60: uint16(33142), + 61: uint16(33127), + 62: uint16(33135), + 63: uint16(33092), + 64: uint16(33121), + 65: uint16(33309), + 66: uint16(33353), + 67: uint16(33348), + 68: uint16(33344), + 69: uint16(33346), + 70: uint16(33349), + 71: uint16(34033), + 72: uint16(33855), + 73: uint16(33878), + 74: uint16(33910), + 75: uint16(33913), + 76: uint16(33935), + 77: uint16(33933), + 78: uint16(33893), + 79: uint16(33873), + 80: uint16(33856), + 81: uint16(33926), + 82: uint16(33895), + 83: uint16(33840), + 84: uint16(33869), + 85: uint16(33917), + 86: uint16(33882), + 87: uint16(33881), + 88: uint16(33908), + 89: uint16(33907), + 90: uint16(33885), + 91: uint16(34055), + 92: uint16(33886), + 93: uint16(33847), + 94: uint16(33850), + 95: uint16(33844), + 96: uint16(33914), + 97: uint16(33859), + 98: uint16(33912), + 99: uint16(33842), + 100: uint16(33861), + 101: uint16(33833), + 102: uint16(33753), + 103: uint16(33867), + 104: uint16(33839), + 105: uint16(33858), + 106: uint16(33837), + 107: uint16(33887), + 108: uint16(33904), + 109: uint16(33849), + 110: uint16(33870), + 111: uint16(33868), + 112: uint16(33874), + 113: uint16(33903), + 114: uint16(33989), + 115: uint16(33934), + 116: uint16(33851), + 117: uint16(33863), + 118: uint16(33846), + 119: uint16(33843), + 120: uint16(33896), + 121: uint16(33918), + 122: uint16(33860), + 123: uint16(33835), + 124: uint16(33888), + 125: uint16(33876), + 126: uint16(33902), + 127: uint16(33872), + 128: uint16(34571), + 129: uint16(34564), + 130: uint16(34551), + 131: uint16(34572), + 132: uint16(34554), + 133: uint16(34518), + 134: uint16(34549), + 135: uint16(34637), + 136: uint16(34552), + 137: uint16(34574), + 138: uint16(34569), + 139: uint16(34561), + 140: uint16(34550), + 141: uint16(34573), + 142: uint16(34565), + 143: uint16(35030), + 144: uint16(35019), + 145: uint16(35021), + 146: uint16(35022), + 147: uint16(35038), + 148: uint16(35035), + 149: uint16(35034), + 150: uint16(35020), + 151: uint16(35024), + 152: uint16(35205), + 153: uint16(35227), + 154: uint16(35295), + 155: uint16(35301), + 156: uint16(35300), + }, + 63: { + 0: uint16(35297), + 1: uint16(35296), + 2: uint16(35298), + 3: uint16(35292), + 4: uint16(35302), + 5: uint16(35446), + 6: uint16(35462), + 7: uint16(35455), + 8: uint16(35425), + 9: uint16(35391), + 10: uint16(35447), + 11: uint16(35458), + 12: uint16(35460), + 13: uint16(35445), + 14: uint16(35459), + 15: uint16(35457), + 16: uint16(35444), + 17: uint16(35450), + 18: uint16(35900), + 19: uint16(35915), + 20: uint16(35914), + 21: uint16(35941), + 22: uint16(35940), + 23: uint16(35942), + 24: uint16(35974), + 25: uint16(35972), + 26: uint16(35973), + 27: uint16(36044), + 28: uint16(36200), + 29: uint16(36201), + 30: uint16(36241), + 31: uint16(36236), + 32: uint16(36238), + 33: uint16(36239), + 34: uint16(36237), + 35: uint16(36243), + 36: uint16(36244), + 37: uint16(36240), + 38: uint16(36242), + 39: uint16(36336), + 40: uint16(36320), + 41: uint16(36332), + 42: uint16(36337), + 43: uint16(36334), + 44: uint16(36304), + 45: uint16(36329), + 46: uint16(36323), + 47: uint16(36322), + 48: uint16(36327), + 49: uint16(36338), + 50: uint16(36331), + 51: uint16(36340), + 52: uint16(36614), + 53: uint16(36607), + 54: uint16(36609), + 55: uint16(36608), + 56: uint16(36613), + 57: uint16(36615), + 58: uint16(36616), + 59: uint16(36610), + 60: uint16(36619), + 61: uint16(36946), + 62: uint16(36927), + 63: uint16(36932), + 64: uint16(36937), + 65: uint16(36925), + 66: uint16(37136), + 67: uint16(37133), + 68: uint16(37135), + 69: uint16(37137), + 70: uint16(37142), + 71: uint16(37140), + 72: uint16(37131), + 73: uint16(37134), + 74: uint16(37230), + 75: uint16(37231), + 76: uint16(37448), + 77: uint16(37458), + 78: uint16(37424), + 79: uint16(37434), + 80: uint16(37478), + 81: uint16(37427), + 82: uint16(37477), + 83: uint16(37470), + 84: uint16(37507), + 85: uint16(37422), + 86: uint16(37450), + 87: uint16(37446), + 88: uint16(37485), + 89: uint16(37484), + 90: uint16(37455), + 91: uint16(37472), + 92: uint16(37479), + 93: uint16(37487), + 94: uint16(37430), + 95: uint16(37473), + 96: uint16(37488), + 97: uint16(37425), + 98: uint16(37460), + 99: uint16(37475), + 100: uint16(37456), + 101: uint16(37490), + 102: uint16(37454), + 103: uint16(37459), + 104: uint16(37452), + 105: uint16(37462), + 106: uint16(37426), + 107: uint16(38303), + 108: uint16(38300), + 109: uint16(38302), + 110: uint16(38299), + 111: uint16(38546), + 112: uint16(38547), + 113: uint16(38545), + 114: uint16(38551), + 115: uint16(38606), + 116: uint16(38650), + 117: uint16(38653), + 118: uint16(38648), + 119: uint16(38645), + 120: uint16(38771), + 121: uint16(38775), + 122: uint16(38776), + 123: uint16(38770), + 124: uint16(38927), + 125: uint16(38925), + 126: uint16(38926), + 127: uint16(39084), + 128: uint16(39158), + 129: uint16(39161), + 130: uint16(39343), + 131: uint16(39346), + 132: uint16(39344), + 133: uint16(39349), + 134: uint16(39597), + 135: uint16(39595), + 136: uint16(39771), + 137: uint16(40170), + 138: uint16(40173), + 139: uint16(40167), + 140: uint16(40576), + 141: uint16(40701), + 142: uint16(20710), + 143: uint16(20692), + 144: uint16(20695), + 145: uint16(20712), + 146: uint16(20723), + 147: uint16(20699), + 148: uint16(20714), + 149: uint16(20701), + 150: uint16(20708), + 151: uint16(20691), + 152: uint16(20716), + 153: uint16(20720), + 154: uint16(20719), + 155: uint16(20707), + 156: uint16(20704), + }, + 64: { + 0: uint16(20952), + 1: uint16(21120), + 2: uint16(21121), + 3: uint16(21225), + 4: uint16(21227), + 5: uint16(21296), + 6: uint16(21420), + 7: uint16(22055), + 8: uint16(22037), + 9: uint16(22028), + 10: uint16(22034), + 11: uint16(22012), + 12: uint16(22031), + 13: uint16(22044), + 14: uint16(22017), + 15: uint16(22035), + 16: uint16(22018), + 17: uint16(22010), + 18: uint16(22045), + 19: uint16(22020), + 20: uint16(22015), + 21: uint16(22009), + 22: uint16(22665), + 23: uint16(22652), + 24: uint16(22672), + 25: uint16(22680), + 26: uint16(22662), + 27: uint16(22657), + 28: uint16(22655), + 29: uint16(22644), + 30: uint16(22667), + 31: uint16(22650), + 32: uint16(22663), + 33: uint16(22673), + 34: uint16(22670), + 35: uint16(22646), + 36: uint16(22658), + 37: uint16(22664), + 38: uint16(22651), + 39: uint16(22676), + 40: uint16(22671), + 41: uint16(22782), + 42: uint16(22891), + 43: uint16(23260), + 44: uint16(23278), + 45: uint16(23269), + 46: uint16(23253), + 47: uint16(23274), + 48: uint16(23258), + 49: uint16(23277), + 50: uint16(23275), + 51: uint16(23283), + 52: uint16(23266), + 53: uint16(23264), + 54: uint16(23259), + 55: uint16(23276), + 56: uint16(23262), + 57: uint16(23261), + 58: uint16(23257), + 59: uint16(23272), + 60: uint16(23263), + 61: uint16(23415), + 62: uint16(23520), + 63: uint16(23523), + 64: uint16(23651), + 65: uint16(23938), + 66: uint16(23936), + 67: uint16(23933), + 68: uint16(23942), + 69: uint16(23930), + 70: uint16(23937), + 71: uint16(23927), + 72: uint16(23946), + 73: uint16(23945), + 74: uint16(23944), + 75: uint16(23934), + 76: uint16(23932), + 77: uint16(23949), + 78: uint16(23929), + 79: uint16(23935), + 80: uint16(24152), + 81: uint16(24153), + 82: uint16(24147), + 83: uint16(24280), + 84: uint16(24273), + 85: uint16(24279), + 86: uint16(24270), + 87: uint16(24284), + 88: uint16(24277), + 89: uint16(24281), + 90: uint16(24274), + 91: uint16(24276), + 92: uint16(24388), + 93: uint16(24387), + 94: uint16(24431), + 95: uint16(24502), + 96: uint16(24876), + 97: uint16(24872), + 98: uint16(24897), + 99: uint16(24926), + 100: uint16(24945), + 101: uint16(24947), + 102: uint16(24914), + 103: uint16(24915), + 104: uint16(24946), + 105: uint16(24940), + 106: uint16(24960), + 107: uint16(24948), + 108: uint16(24916), + 109: uint16(24954), + 110: uint16(24923), + 111: uint16(24933), + 112: uint16(24891), + 113: uint16(24938), + 114: uint16(24929), + 115: uint16(24918), + 116: uint16(25129), + 117: uint16(25127), + 118: uint16(25131), + 119: uint16(25643), + 120: uint16(25677), + 121: uint16(25691), + 122: uint16(25693), + 123: uint16(25716), + 124: uint16(25718), + 125: uint16(25714), + 126: uint16(25715), + 127: uint16(25725), + 128: uint16(25717), + 129: uint16(25702), + 130: uint16(25766), + 131: uint16(25678), + 132: uint16(25730), + 133: uint16(25694), + 134: uint16(25692), + 135: uint16(25675), + 136: uint16(25683), + 137: uint16(25696), + 138: uint16(25680), + 139: uint16(25727), + 140: uint16(25663), + 141: uint16(25708), + 142: uint16(25707), + 143: uint16(25689), + 144: uint16(25701), + 145: uint16(25719), + 146: uint16(25971), + 147: uint16(26016), + 148: uint16(26273), + 149: uint16(26272), + 150: uint16(26271), + 151: uint16(26373), + 152: uint16(26372), + 153: uint16(26402), + 154: uint16(27057), + 155: uint16(27062), + 156: uint16(27081), + }, + 65: { + 0: uint16(27040), + 1: uint16(27086), + 2: uint16(27030), + 3: uint16(27056), + 4: uint16(27052), + 5: uint16(27068), + 6: uint16(27025), + 7: uint16(27033), + 8: uint16(27022), + 9: uint16(27047), + 10: uint16(27021), + 11: uint16(27049), + 12: uint16(27070), + 13: uint16(27055), + 14: uint16(27071), + 15: uint16(27076), + 16: uint16(27069), + 17: uint16(27044), + 18: uint16(27092), + 19: uint16(27065), + 20: uint16(27082), + 21: uint16(27034), + 22: uint16(27087), + 23: uint16(27059), + 24: uint16(27027), + 25: uint16(27050), + 26: uint16(27041), + 27: uint16(27038), + 28: uint16(27097), + 29: uint16(27031), + 30: uint16(27024), + 31: uint16(27074), + 32: uint16(27061), + 33: uint16(27045), + 34: uint16(27078), + 35: uint16(27466), + 36: uint16(27469), + 37: uint16(27467), + 38: uint16(27550), + 39: uint16(27551), + 40: uint16(27552), + 41: uint16(27587), + 42: uint16(27588), + 43: uint16(27646), + 44: uint16(28366), + 45: uint16(28405), + 46: uint16(28401), + 47: uint16(28419), + 48: uint16(28453), + 49: uint16(28408), + 50: uint16(28471), + 51: uint16(28411), + 52: uint16(28462), + 53: uint16(28425), + 54: uint16(28494), + 55: uint16(28441), + 56: uint16(28442), + 57: uint16(28455), + 58: uint16(28440), + 59: uint16(28475), + 60: uint16(28434), + 61: uint16(28397), + 62: uint16(28426), + 63: uint16(28470), + 64: uint16(28531), + 65: uint16(28409), + 66: uint16(28398), + 67: uint16(28461), + 68: uint16(28480), + 69: uint16(28464), + 70: uint16(28476), + 71: uint16(28469), + 72: uint16(28395), + 73: uint16(28423), + 74: uint16(28430), + 75: uint16(28483), + 76: uint16(28421), + 77: uint16(28413), + 78: uint16(28406), + 79: uint16(28473), + 80: uint16(28444), + 81: uint16(28412), + 82: uint16(28474), + 83: uint16(28447), + 84: uint16(28429), + 85: uint16(28446), + 86: uint16(28424), + 87: uint16(28449), + 88: uint16(29063), + 89: uint16(29072), + 90: uint16(29065), + 91: uint16(29056), + 92: uint16(29061), + 93: uint16(29058), + 94: uint16(29071), + 95: uint16(29051), + 96: uint16(29062), + 97: uint16(29057), + 98: uint16(29079), + 99: uint16(29252), + 100: uint16(29267), + 101: uint16(29335), + 102: uint16(29333), + 103: uint16(29331), + 104: uint16(29507), + 105: uint16(29517), + 106: uint16(29521), + 107: uint16(29516), + 108: uint16(29794), + 109: uint16(29811), + 110: uint16(29809), + 111: uint16(29813), + 112: uint16(29810), + 113: uint16(29799), + 114: uint16(29806), + 115: uint16(29952), + 116: uint16(29954), + 117: uint16(29955), + 118: uint16(30077), + 119: uint16(30096), + 120: uint16(30230), + 121: uint16(30216), + 122: uint16(30220), + 123: uint16(30229), + 124: uint16(30225), + 125: uint16(30218), + 126: uint16(30228), + 127: uint16(30392), + 128: uint16(30593), + 129: uint16(30588), + 130: uint16(30597), + 131: uint16(30594), + 132: uint16(30574), + 133: uint16(30592), + 134: uint16(30575), + 135: uint16(30590), + 136: uint16(30595), + 137: uint16(30898), + 138: uint16(30890), + 139: uint16(30900), + 140: uint16(30893), + 141: uint16(30888), + 142: uint16(30846), + 143: uint16(30891), + 144: uint16(30878), + 145: uint16(30885), + 146: uint16(30880), + 147: uint16(30892), + 148: uint16(30882), + 149: uint16(30884), + 150: uint16(31128), + 151: uint16(31114), + 152: uint16(31115), + 153: uint16(31126), + 154: uint16(31125), + 155: uint16(31124), + 156: uint16(31123), + }, + 66: { + 0: uint16(31127), + 1: uint16(31112), + 2: uint16(31122), + 3: uint16(31120), + 4: uint16(31275), + 5: uint16(31306), + 6: uint16(31280), + 7: uint16(31279), + 8: uint16(31272), + 9: uint16(31270), + 10: uint16(31400), + 11: uint16(31403), + 12: uint16(31404), + 13: uint16(31470), + 14: uint16(31624), + 15: uint16(31644), + 16: uint16(31626), + 17: uint16(31633), + 18: uint16(31632), + 19: uint16(31638), + 20: uint16(31629), + 21: uint16(31628), + 22: uint16(31643), + 23: uint16(31630), + 24: uint16(31621), + 25: uint16(31640), + 26: uint16(21124), + 27: uint16(31641), + 28: uint16(31652), + 29: uint16(31618), + 30: uint16(31931), + 31: uint16(31935), + 32: uint16(31932), + 33: uint16(31930), + 34: uint16(32167), + 35: uint16(32183), + 36: uint16(32194), + 37: uint16(32163), + 38: uint16(32170), + 39: uint16(32193), + 40: uint16(32192), + 41: uint16(32197), + 42: uint16(32157), + 43: uint16(32206), + 44: uint16(32196), + 45: uint16(32198), + 46: uint16(32203), + 47: uint16(32204), + 48: uint16(32175), + 49: uint16(32185), + 50: uint16(32150), + 51: uint16(32188), + 52: uint16(32159), + 53: uint16(32166), + 54: uint16(32174), + 55: uint16(32169), + 56: uint16(32161), + 57: uint16(32201), + 58: uint16(32627), + 59: uint16(32738), + 60: uint16(32739), + 61: uint16(32741), + 62: uint16(32734), + 63: uint16(32804), + 64: uint16(32861), + 65: uint16(32860), + 66: uint16(33161), + 67: uint16(33158), + 68: uint16(33155), + 69: uint16(33159), + 70: uint16(33165), + 71: uint16(33164), + 72: uint16(33163), + 73: uint16(33301), + 74: uint16(33943), + 75: uint16(33956), + 76: uint16(33953), + 77: uint16(33951), + 78: uint16(33978), + 79: uint16(33998), + 80: uint16(33986), + 81: uint16(33964), + 82: uint16(33966), + 83: uint16(33963), + 84: uint16(33977), + 85: uint16(33972), + 86: uint16(33985), + 87: uint16(33997), + 88: uint16(33962), + 89: uint16(33946), + 90: uint16(33969), + 91: uint16(34000), + 92: uint16(33949), + 93: uint16(33959), + 94: uint16(33979), + 95: uint16(33954), + 96: uint16(33940), + 97: uint16(33991), + 98: uint16(33996), + 99: uint16(33947), + 100: uint16(33961), + 101: uint16(33967), + 102: uint16(33960), + 103: uint16(34006), + 104: uint16(33944), + 105: uint16(33974), + 106: uint16(33999), + 107: uint16(33952), + 108: uint16(34007), + 109: uint16(34004), + 110: uint16(34002), + 111: uint16(34011), + 112: uint16(33968), + 113: uint16(33937), + 114: uint16(34401), + 115: uint16(34611), + 116: uint16(34595), + 117: uint16(34600), + 118: uint16(34667), + 119: uint16(34624), + 120: uint16(34606), + 121: uint16(34590), + 122: uint16(34593), + 123: uint16(34585), + 124: uint16(34587), + 125: uint16(34627), + 126: uint16(34604), + 127: uint16(34625), + 128: uint16(34622), + 129: uint16(34630), + 130: uint16(34592), + 131: uint16(34610), + 132: uint16(34602), + 133: uint16(34605), + 134: uint16(34620), + 135: uint16(34578), + 136: uint16(34618), + 137: uint16(34609), + 138: uint16(34613), + 139: uint16(34626), + 140: uint16(34598), + 141: uint16(34599), + 142: uint16(34616), + 143: uint16(34596), + 144: uint16(34586), + 145: uint16(34608), + 146: uint16(34577), + 147: uint16(35063), + 148: uint16(35047), + 149: uint16(35057), + 150: uint16(35058), + 151: uint16(35066), + 152: uint16(35070), + 153: uint16(35054), + 154: uint16(35068), + 155: uint16(35062), + 156: uint16(35067), + }, + 67: { + 0: uint16(35056), + 1: uint16(35052), + 2: uint16(35051), + 3: uint16(35229), + 4: uint16(35233), + 5: uint16(35231), + 6: uint16(35230), + 7: uint16(35305), + 8: uint16(35307), + 9: uint16(35304), + 10: uint16(35499), + 11: uint16(35481), + 12: uint16(35467), + 13: uint16(35474), + 14: uint16(35471), + 15: uint16(35478), + 16: uint16(35901), + 17: uint16(35944), + 18: uint16(35945), + 19: uint16(36053), + 20: uint16(36047), + 21: uint16(36055), + 22: uint16(36246), + 23: uint16(36361), + 24: uint16(36354), + 25: uint16(36351), + 26: uint16(36365), + 27: uint16(36349), + 28: uint16(36362), + 29: uint16(36355), + 30: uint16(36359), + 31: uint16(36358), + 32: uint16(36357), + 33: uint16(36350), + 34: uint16(36352), + 35: uint16(36356), + 36: uint16(36624), + 37: uint16(36625), + 38: uint16(36622), + 39: uint16(36621), + 40: uint16(37155), + 41: uint16(37148), + 42: uint16(37152), + 43: uint16(37154), + 44: uint16(37151), + 45: uint16(37149), + 46: uint16(37146), + 47: uint16(37156), + 48: uint16(37153), + 49: uint16(37147), + 50: uint16(37242), + 51: uint16(37234), + 52: uint16(37241), + 53: uint16(37235), + 54: uint16(37541), + 55: uint16(37540), + 56: uint16(37494), + 57: uint16(37531), + 58: uint16(37498), + 59: uint16(37536), + 60: uint16(37524), + 61: uint16(37546), + 62: uint16(37517), + 63: uint16(37542), + 64: uint16(37530), + 65: uint16(37547), + 66: uint16(37497), + 67: uint16(37527), + 68: uint16(37503), + 69: uint16(37539), + 70: uint16(37614), + 71: uint16(37518), + 72: uint16(37506), + 73: uint16(37525), + 74: uint16(37538), + 75: uint16(37501), + 76: uint16(37512), + 77: uint16(37537), + 78: uint16(37514), + 79: uint16(37510), + 80: uint16(37516), + 81: uint16(37529), + 82: uint16(37543), + 83: uint16(37502), + 84: uint16(37511), + 85: uint16(37545), + 86: uint16(37533), + 87: uint16(37515), + 88: uint16(37421), + 89: uint16(38558), + 90: uint16(38561), + 91: uint16(38655), + 92: uint16(38744), + 93: uint16(38781), + 94: uint16(38778), + 95: uint16(38782), + 96: uint16(38787), + 97: uint16(38784), + 98: uint16(38786), + 99: uint16(38779), + 100: uint16(38788), + 101: uint16(38785), + 102: uint16(38783), + 103: uint16(38862), + 104: uint16(38861), + 105: uint16(38934), + 106: uint16(39085), + 107: uint16(39086), + 108: uint16(39170), + 109: uint16(39168), + 110: uint16(39175), + 111: uint16(39325), + 112: uint16(39324), + 113: uint16(39363), + 114: uint16(39353), + 115: uint16(39355), + 116: uint16(39354), + 117: uint16(39362), + 118: uint16(39357), + 119: uint16(39367), + 120: uint16(39601), + 121: uint16(39651), + 122: uint16(39655), + 123: uint16(39742), + 124: uint16(39743), + 125: uint16(39776), + 126: uint16(39777), + 127: uint16(39775), + 128: uint16(40177), + 129: uint16(40178), + 130: uint16(40181), + 131: uint16(40615), + 132: uint16(20735), + 133: uint16(20739), + 134: uint16(20784), + 135: uint16(20728), + 136: uint16(20742), + 137: uint16(20743), + 138: uint16(20726), + 139: uint16(20734), + 140: uint16(20747), + 141: uint16(20748), + 142: uint16(20733), + 143: uint16(20746), + 144: uint16(21131), + 145: uint16(21132), + 146: uint16(21233), + 147: uint16(21231), + 148: uint16(22088), + 149: uint16(22082), + 150: uint16(22092), + 151: uint16(22069), + 152: uint16(22081), + 153: uint16(22090), + 154: uint16(22089), + 155: uint16(22086), + 156: uint16(22104), + }, + 68: { + 0: uint16(22106), + 1: uint16(22080), + 2: uint16(22067), + 3: uint16(22077), + 4: uint16(22060), + 5: uint16(22078), + 6: uint16(22072), + 7: uint16(22058), + 8: uint16(22074), + 9: uint16(22298), + 10: uint16(22699), + 11: uint16(22685), + 12: uint16(22705), + 13: uint16(22688), + 14: uint16(22691), + 15: uint16(22703), + 16: uint16(22700), + 17: uint16(22693), + 18: uint16(22689), + 19: uint16(22783), + 20: uint16(23295), + 21: uint16(23284), + 22: uint16(23293), + 23: uint16(23287), + 24: uint16(23286), + 25: uint16(23299), + 26: uint16(23288), + 27: uint16(23298), + 28: uint16(23289), + 29: uint16(23297), + 30: uint16(23303), + 31: uint16(23301), + 32: uint16(23311), + 33: uint16(23655), + 34: uint16(23961), + 35: uint16(23959), + 36: uint16(23967), + 37: uint16(23954), + 38: uint16(23970), + 39: uint16(23955), + 40: uint16(23957), + 41: uint16(23968), + 42: uint16(23964), + 43: uint16(23969), + 44: uint16(23962), + 45: uint16(23966), + 46: uint16(24169), + 47: uint16(24157), + 48: uint16(24160), + 49: uint16(24156), + 50: uint16(32243), + 51: uint16(24283), + 52: uint16(24286), + 53: uint16(24289), + 54: uint16(24393), + 55: uint16(24498), + 56: uint16(24971), + 57: uint16(24963), + 58: uint16(24953), + 59: uint16(25009), + 60: uint16(25008), + 61: uint16(24994), + 62: uint16(24969), + 63: uint16(24987), + 64: uint16(24979), + 65: uint16(25007), + 66: uint16(25005), + 67: uint16(24991), + 68: uint16(24978), + 69: uint16(25002), + 70: uint16(24993), + 71: uint16(24973), + 72: uint16(24934), + 73: uint16(25011), + 74: uint16(25133), + 75: uint16(25710), + 76: uint16(25712), + 77: uint16(25750), + 78: uint16(25760), + 79: uint16(25733), + 80: uint16(25751), + 81: uint16(25756), + 82: uint16(25743), + 83: uint16(25739), + 84: uint16(25738), + 85: uint16(25740), + 86: uint16(25763), + 87: uint16(25759), + 88: uint16(25704), + 89: uint16(25777), + 90: uint16(25752), + 91: uint16(25974), + 92: uint16(25978), + 93: uint16(25977), + 94: uint16(25979), + 95: uint16(26034), + 96: uint16(26035), + 97: uint16(26293), + 98: uint16(26288), + 99: uint16(26281), + 100: uint16(26290), + 101: uint16(26295), + 102: uint16(26282), + 103: uint16(26287), + 104: uint16(27136), + 105: uint16(27142), + 106: uint16(27159), + 107: uint16(27109), + 108: uint16(27128), + 109: uint16(27157), + 110: uint16(27121), + 111: uint16(27108), + 112: uint16(27168), + 113: uint16(27135), + 114: uint16(27116), + 115: uint16(27106), + 116: uint16(27163), + 117: uint16(27165), + 118: uint16(27134), + 119: uint16(27175), + 120: uint16(27122), + 121: uint16(27118), + 122: uint16(27156), + 123: uint16(27127), + 124: uint16(27111), + 125: uint16(27200), + 126: uint16(27144), + 127: uint16(27110), + 128: uint16(27131), + 129: uint16(27149), + 130: uint16(27132), + 131: uint16(27115), + 132: uint16(27145), + 133: uint16(27140), + 134: uint16(27160), + 135: uint16(27173), + 136: uint16(27151), + 137: uint16(27126), + 138: uint16(27174), + 139: uint16(27143), + 140: uint16(27124), + 141: uint16(27158), + 142: uint16(27473), + 143: uint16(27557), + 144: uint16(27555), + 145: uint16(27554), + 146: uint16(27558), + 147: uint16(27649), + 148: uint16(27648), + 149: uint16(27647), + 150: uint16(27650), + 151: uint16(28481), + 152: uint16(28454), + 153: uint16(28542), + 154: uint16(28551), + 155: uint16(28614), + 156: uint16(28562), + }, + 69: { + 0: uint16(28557), + 1: uint16(28553), + 2: uint16(28556), + 3: uint16(28514), + 4: uint16(28495), + 5: uint16(28549), + 6: uint16(28506), + 7: uint16(28566), + 8: uint16(28534), + 9: uint16(28524), + 10: uint16(28546), + 11: uint16(28501), + 12: uint16(28530), + 13: uint16(28498), + 14: uint16(28496), + 15: uint16(28503), + 16: uint16(28564), + 17: uint16(28563), + 18: uint16(28509), + 19: uint16(28416), + 20: uint16(28513), + 21: uint16(28523), + 22: uint16(28541), + 23: uint16(28519), + 24: uint16(28560), + 25: uint16(28499), + 26: uint16(28555), + 27: uint16(28521), + 28: uint16(28543), + 29: uint16(28565), + 30: uint16(28515), + 31: uint16(28535), + 32: uint16(28522), + 33: uint16(28539), + 34: uint16(29106), + 35: uint16(29103), + 36: uint16(29083), + 37: uint16(29104), + 38: uint16(29088), + 39: uint16(29082), + 40: uint16(29097), + 41: uint16(29109), + 42: uint16(29085), + 43: uint16(29093), + 44: uint16(29086), + 45: uint16(29092), + 46: uint16(29089), + 47: uint16(29098), + 48: uint16(29084), + 49: uint16(29095), + 50: uint16(29107), + 51: uint16(29336), + 52: uint16(29338), + 53: uint16(29528), + 54: uint16(29522), + 55: uint16(29534), + 56: uint16(29535), + 57: uint16(29536), + 58: uint16(29533), + 59: uint16(29531), + 60: uint16(29537), + 61: uint16(29530), + 62: uint16(29529), + 63: uint16(29538), + 64: uint16(29831), + 65: uint16(29833), + 66: uint16(29834), + 67: uint16(29830), + 68: uint16(29825), + 69: uint16(29821), + 70: uint16(29829), + 71: uint16(29832), + 72: uint16(29820), + 73: uint16(29817), + 74: uint16(29960), + 75: uint16(29959), + 76: uint16(30078), + 77: uint16(30245), + 78: uint16(30238), + 79: uint16(30233), + 80: uint16(30237), + 81: uint16(30236), + 82: uint16(30243), + 83: uint16(30234), + 84: uint16(30248), + 85: uint16(30235), + 86: uint16(30364), + 87: uint16(30365), + 88: uint16(30366), + 89: uint16(30363), + 90: uint16(30605), + 91: uint16(30607), + 92: uint16(30601), + 93: uint16(30600), + 94: uint16(30925), + 95: uint16(30907), + 96: uint16(30927), + 97: uint16(30924), + 98: uint16(30929), + 99: uint16(30926), + 100: uint16(30932), + 101: uint16(30920), + 102: uint16(30915), + 103: uint16(30916), + 104: uint16(30921), + 105: uint16(31130), + 106: uint16(31137), + 107: uint16(31136), + 108: uint16(31132), + 109: uint16(31138), + 110: uint16(31131), + 111: uint16(27510), + 112: uint16(31289), + 113: uint16(31410), + 114: uint16(31412), + 115: uint16(31411), + 116: uint16(31671), + 117: uint16(31691), + 118: uint16(31678), + 119: uint16(31660), + 120: uint16(31694), + 121: uint16(31663), + 122: uint16(31673), + 123: uint16(31690), + 124: uint16(31669), + 125: uint16(31941), + 126: uint16(31944), + 127: uint16(31948), + 128: uint16(31947), + 129: uint16(32247), + 130: uint16(32219), + 131: uint16(32234), + 132: uint16(32231), + 133: uint16(32215), + 134: uint16(32225), + 135: uint16(32259), + 136: uint16(32250), + 137: uint16(32230), + 138: uint16(32246), + 139: uint16(32241), + 140: uint16(32240), + 141: uint16(32238), + 142: uint16(32223), + 143: uint16(32630), + 144: uint16(32684), + 145: uint16(32688), + 146: uint16(32685), + 147: uint16(32749), + 148: uint16(32747), + 149: uint16(32746), + 150: uint16(32748), + 151: uint16(32742), + 152: uint16(32744), + 153: uint16(32868), + 154: uint16(32871), + 155: uint16(33187), + 156: uint16(33183), + }, + 70: { + 0: uint16(33182), + 1: uint16(33173), + 2: uint16(33186), + 3: uint16(33177), + 4: uint16(33175), + 5: uint16(33302), + 6: uint16(33359), + 7: uint16(33363), + 8: uint16(33362), + 9: uint16(33360), + 10: uint16(33358), + 11: uint16(33361), + 12: uint16(34084), + 13: uint16(34107), + 14: uint16(34063), + 15: uint16(34048), + 16: uint16(34089), + 17: uint16(34062), + 18: uint16(34057), + 19: uint16(34061), + 20: uint16(34079), + 21: uint16(34058), + 22: uint16(34087), + 23: uint16(34076), + 24: uint16(34043), + 25: uint16(34091), + 26: uint16(34042), + 27: uint16(34056), + 28: uint16(34060), + 29: uint16(34036), + 30: uint16(34090), + 31: uint16(34034), + 32: uint16(34069), + 33: uint16(34039), + 34: uint16(34027), + 35: uint16(34035), + 36: uint16(34044), + 37: uint16(34066), + 38: uint16(34026), + 39: uint16(34025), + 40: uint16(34070), + 41: uint16(34046), + 42: uint16(34088), + 43: uint16(34077), + 44: uint16(34094), + 45: uint16(34050), + 46: uint16(34045), + 47: uint16(34078), + 48: uint16(34038), + 49: uint16(34097), + 50: uint16(34086), + 51: uint16(34023), + 52: uint16(34024), + 53: uint16(34032), + 54: uint16(34031), + 55: uint16(34041), + 56: uint16(34072), + 57: uint16(34080), + 58: uint16(34096), + 59: uint16(34059), + 60: uint16(34073), + 61: uint16(34095), + 62: uint16(34402), + 63: uint16(34646), + 64: uint16(34659), + 65: uint16(34660), + 66: uint16(34679), + 67: uint16(34785), + 68: uint16(34675), + 69: uint16(34648), + 70: uint16(34644), + 71: uint16(34651), + 72: uint16(34642), + 73: uint16(34657), + 74: uint16(34650), + 75: uint16(34641), + 76: uint16(34654), + 77: uint16(34669), + 78: uint16(34666), + 79: uint16(34640), + 80: uint16(34638), + 81: uint16(34655), + 82: uint16(34653), + 83: uint16(34671), + 84: uint16(34668), + 85: uint16(34682), + 86: uint16(34670), + 87: uint16(34652), + 88: uint16(34661), + 89: uint16(34639), + 90: uint16(34683), + 91: uint16(34677), + 92: uint16(34658), + 93: uint16(34663), + 94: uint16(34665), + 95: uint16(34906), + 96: uint16(35077), + 97: uint16(35084), + 98: uint16(35092), + 99: uint16(35083), + 100: uint16(35095), + 101: uint16(35096), + 102: uint16(35097), + 103: uint16(35078), + 104: uint16(35094), + 105: uint16(35089), + 106: uint16(35086), + 107: uint16(35081), + 108: uint16(35234), + 109: uint16(35236), + 110: uint16(35235), + 111: uint16(35309), + 112: uint16(35312), + 113: uint16(35308), + 114: uint16(35535), + 115: uint16(35526), + 116: uint16(35512), + 117: uint16(35539), + 118: uint16(35537), + 119: uint16(35540), + 120: uint16(35541), + 121: uint16(35515), + 122: uint16(35543), + 123: uint16(35518), + 124: uint16(35520), + 125: uint16(35525), + 126: uint16(35544), + 127: uint16(35523), + 128: uint16(35514), + 129: uint16(35517), + 130: uint16(35545), + 131: uint16(35902), + 132: uint16(35917), + 133: uint16(35983), + 134: uint16(36069), + 135: uint16(36063), + 136: uint16(36057), + 137: uint16(36072), + 138: uint16(36058), + 139: uint16(36061), + 140: uint16(36071), + 141: uint16(36256), + 142: uint16(36252), + 143: uint16(36257), + 144: uint16(36251), + 145: uint16(36384), + 146: uint16(36387), + 147: uint16(36389), + 148: uint16(36388), + 149: uint16(36398), + 150: uint16(36373), + 151: uint16(36379), + 152: uint16(36374), + 153: uint16(36369), + 154: uint16(36377), + 155: uint16(36390), + 156: uint16(36391), + }, + 71: { + 0: uint16(36372), + 1: uint16(36370), + 2: uint16(36376), + 3: uint16(36371), + 4: uint16(36380), + 5: uint16(36375), + 6: uint16(36378), + 7: uint16(36652), + 8: uint16(36644), + 9: uint16(36632), + 10: uint16(36634), + 11: uint16(36640), + 12: uint16(36643), + 13: uint16(36630), + 14: uint16(36631), + 15: uint16(36979), + 16: uint16(36976), + 17: uint16(36975), + 18: uint16(36967), + 19: uint16(36971), + 20: uint16(37167), + 21: uint16(37163), + 22: uint16(37161), + 23: uint16(37162), + 24: uint16(37170), + 25: uint16(37158), + 26: uint16(37166), + 27: uint16(37253), + 28: uint16(37254), + 29: uint16(37258), + 30: uint16(37249), + 31: uint16(37250), + 32: uint16(37252), + 33: uint16(37248), + 34: uint16(37584), + 35: uint16(37571), + 36: uint16(37572), + 37: uint16(37568), + 38: uint16(37593), + 39: uint16(37558), + 40: uint16(37583), + 41: uint16(37617), + 42: uint16(37599), + 43: uint16(37592), + 44: uint16(37609), + 45: uint16(37591), + 46: uint16(37597), + 47: uint16(37580), + 48: uint16(37615), + 49: uint16(37570), + 50: uint16(37608), + 51: uint16(37578), + 52: uint16(37576), + 53: uint16(37582), + 54: uint16(37606), + 55: uint16(37581), + 56: uint16(37589), + 57: uint16(37577), + 58: uint16(37600), + 59: uint16(37598), + 60: uint16(37607), + 61: uint16(37585), + 62: uint16(37587), + 63: uint16(37557), + 64: uint16(37601), + 65: uint16(37574), + 66: uint16(37556), + 67: uint16(38268), + 68: uint16(38316), + 69: uint16(38315), + 70: uint16(38318), + 71: uint16(38320), + 72: uint16(38564), + 73: uint16(38562), + 74: uint16(38611), + 75: uint16(38661), + 76: uint16(38664), + 77: uint16(38658), + 78: uint16(38746), + 79: uint16(38794), + 80: uint16(38798), + 81: uint16(38792), + 82: uint16(38864), + 83: uint16(38863), + 84: uint16(38942), + 85: uint16(38941), + 86: uint16(38950), + 87: uint16(38953), + 88: uint16(38952), + 89: uint16(38944), + 90: uint16(38939), + 91: uint16(38951), + 92: uint16(39090), + 93: uint16(39176), + 94: uint16(39162), + 95: uint16(39185), + 96: uint16(39188), + 97: uint16(39190), + 98: uint16(39191), + 99: uint16(39189), + 100: uint16(39388), + 101: uint16(39373), + 102: uint16(39375), + 103: uint16(39379), + 104: uint16(39380), + 105: uint16(39374), + 106: uint16(39369), + 107: uint16(39382), + 108: uint16(39384), + 109: uint16(39371), + 110: uint16(39383), + 111: uint16(39372), + 112: uint16(39603), + 113: uint16(39660), + 114: uint16(39659), + 115: uint16(39667), + 116: uint16(39666), + 117: uint16(39665), + 118: uint16(39750), + 119: uint16(39747), + 120: uint16(39783), + 121: uint16(39796), + 122: uint16(39793), + 123: uint16(39782), + 124: uint16(39798), + 125: uint16(39797), + 126: uint16(39792), + 127: uint16(39784), + 128: uint16(39780), + 129: uint16(39788), + 130: uint16(40188), + 131: uint16(40186), + 132: uint16(40189), + 133: uint16(40191), + 134: uint16(40183), + 135: uint16(40199), + 136: uint16(40192), + 137: uint16(40185), + 138: uint16(40187), + 139: uint16(40200), + 140: uint16(40197), + 141: uint16(40196), + 142: uint16(40579), + 143: uint16(40659), + 144: uint16(40719), + 145: uint16(40720), + 146: uint16(20764), + 147: uint16(20755), + 148: uint16(20759), + 149: uint16(20762), + 150: uint16(20753), + 151: uint16(20958), + 152: uint16(21300), + 153: uint16(21473), + 154: uint16(22128), + 155: uint16(22112), + 156: uint16(22126), + }, + 72: { + 0: uint16(22131), + 1: uint16(22118), + 2: uint16(22115), + 3: uint16(22125), + 4: uint16(22130), + 5: uint16(22110), + 6: uint16(22135), + 7: uint16(22300), + 8: uint16(22299), + 9: uint16(22728), + 10: uint16(22717), + 11: uint16(22729), + 12: uint16(22719), + 13: uint16(22714), + 14: uint16(22722), + 15: uint16(22716), + 16: uint16(22726), + 17: uint16(23319), + 18: uint16(23321), + 19: uint16(23323), + 20: uint16(23329), + 21: uint16(23316), + 22: uint16(23315), + 23: uint16(23312), + 24: uint16(23318), + 25: uint16(23336), + 26: uint16(23322), + 27: uint16(23328), + 28: uint16(23326), + 29: uint16(23535), + 30: uint16(23980), + 31: uint16(23985), + 32: uint16(23977), + 33: uint16(23975), + 34: uint16(23989), + 35: uint16(23984), + 36: uint16(23982), + 37: uint16(23978), + 38: uint16(23976), + 39: uint16(23986), + 40: uint16(23981), + 41: uint16(23983), + 42: uint16(23988), + 43: uint16(24167), + 44: uint16(24168), + 45: uint16(24166), + 46: uint16(24175), + 47: uint16(24297), + 48: uint16(24295), + 49: uint16(24294), + 50: uint16(24296), + 51: uint16(24293), + 52: uint16(24395), + 53: uint16(24508), + 54: uint16(24989), + 55: uint16(25000), + 56: uint16(24982), + 57: uint16(25029), + 58: uint16(25012), + 59: uint16(25030), + 60: uint16(25025), + 61: uint16(25036), + 62: uint16(25018), + 63: uint16(25023), + 64: uint16(25016), + 65: uint16(24972), + 66: uint16(25815), + 67: uint16(25814), + 68: uint16(25808), + 69: uint16(25807), + 70: uint16(25801), + 71: uint16(25789), + 72: uint16(25737), + 73: uint16(25795), + 74: uint16(25819), + 75: uint16(25843), + 76: uint16(25817), + 77: uint16(25907), + 78: uint16(25983), + 79: uint16(25980), + 80: uint16(26018), + 81: uint16(26312), + 82: uint16(26302), + 83: uint16(26304), + 84: uint16(26314), + 85: uint16(26315), + 86: uint16(26319), + 87: uint16(26301), + 88: uint16(26299), + 89: uint16(26298), + 90: uint16(26316), + 91: uint16(26403), + 92: uint16(27188), + 93: uint16(27238), + 94: uint16(27209), + 95: uint16(27239), + 96: uint16(27186), + 97: uint16(27240), + 98: uint16(27198), + 99: uint16(27229), + 100: uint16(27245), + 101: uint16(27254), + 102: uint16(27227), + 103: uint16(27217), + 104: uint16(27176), + 105: uint16(27226), + 106: uint16(27195), + 107: uint16(27199), + 108: uint16(27201), + 109: uint16(27242), + 110: uint16(27236), + 111: uint16(27216), + 112: uint16(27215), + 113: uint16(27220), + 114: uint16(27247), + 115: uint16(27241), + 116: uint16(27232), + 117: uint16(27196), + 118: uint16(27230), + 119: uint16(27222), + 120: uint16(27221), + 121: uint16(27213), + 122: uint16(27214), + 123: uint16(27206), + 124: uint16(27477), + 125: uint16(27476), + 126: uint16(27478), + 127: uint16(27559), + 128: uint16(27562), + 129: uint16(27563), + 130: uint16(27592), + 131: uint16(27591), + 132: uint16(27652), + 133: uint16(27651), + 134: uint16(27654), + 135: uint16(28589), + 136: uint16(28619), + 137: uint16(28579), + 138: uint16(28615), + 139: uint16(28604), + 140: uint16(28622), + 141: uint16(28616), + 142: uint16(28510), + 143: uint16(28612), + 144: uint16(28605), + 145: uint16(28574), + 146: uint16(28618), + 147: uint16(28584), + 148: uint16(28676), + 149: uint16(28581), + 150: uint16(28590), + 151: uint16(28602), + 152: uint16(28588), + 153: uint16(28586), + 154: uint16(28623), + 155: uint16(28607), + 156: uint16(28600), + }, + 73: { + 0: uint16(28578), + 1: uint16(28617), + 2: uint16(28587), + 3: uint16(28621), + 4: uint16(28591), + 5: uint16(28594), + 6: uint16(28592), + 7: uint16(29125), + 8: uint16(29122), + 9: uint16(29119), + 10: uint16(29112), + 11: uint16(29142), + 12: uint16(29120), + 13: uint16(29121), + 14: uint16(29131), + 15: uint16(29140), + 16: uint16(29130), + 17: uint16(29127), + 18: uint16(29135), + 19: uint16(29117), + 20: uint16(29144), + 21: uint16(29116), + 22: uint16(29126), + 23: uint16(29146), + 24: uint16(29147), + 25: uint16(29341), + 26: uint16(29342), + 27: uint16(29545), + 28: uint16(29542), + 29: uint16(29543), + 30: uint16(29548), + 31: uint16(29541), + 32: uint16(29547), + 33: uint16(29546), + 34: uint16(29823), + 35: uint16(29850), + 36: uint16(29856), + 37: uint16(29844), + 38: uint16(29842), + 39: uint16(29845), + 40: uint16(29857), + 41: uint16(29963), + 42: uint16(30080), + 43: uint16(30255), + 44: uint16(30253), + 45: uint16(30257), + 46: uint16(30269), + 47: uint16(30259), + 48: uint16(30268), + 49: uint16(30261), + 50: uint16(30258), + 51: uint16(30256), + 52: uint16(30395), + 53: uint16(30438), + 54: uint16(30618), + 55: uint16(30621), + 56: uint16(30625), + 57: uint16(30620), + 58: uint16(30619), + 59: uint16(30626), + 60: uint16(30627), + 61: uint16(30613), + 62: uint16(30617), + 63: uint16(30615), + 64: uint16(30941), + 65: uint16(30953), + 66: uint16(30949), + 67: uint16(30954), + 68: uint16(30942), + 69: uint16(30947), + 70: uint16(30939), + 71: uint16(30945), + 72: uint16(30946), + 73: uint16(30957), + 74: uint16(30943), + 75: uint16(30944), + 76: uint16(31140), + 77: uint16(31300), + 78: uint16(31304), + 79: uint16(31303), + 80: uint16(31414), + 81: uint16(31416), + 82: uint16(31413), + 83: uint16(31409), + 84: uint16(31415), + 85: uint16(31710), + 86: uint16(31715), + 87: uint16(31719), + 88: uint16(31709), + 89: uint16(31701), + 90: uint16(31717), + 91: uint16(31706), + 92: uint16(31720), + 93: uint16(31737), + 94: uint16(31700), + 95: uint16(31722), + 96: uint16(31714), + 97: uint16(31708), + 98: uint16(31723), + 99: uint16(31704), + 100: uint16(31711), + 101: uint16(31954), + 102: uint16(31956), + 103: uint16(31959), + 104: uint16(31952), + 105: uint16(31953), + 106: uint16(32274), + 107: uint16(32289), + 108: uint16(32279), + 109: uint16(32268), + 110: uint16(32287), + 111: uint16(32288), + 112: uint16(32275), + 113: uint16(32270), + 114: uint16(32284), + 115: uint16(32277), + 116: uint16(32282), + 117: uint16(32290), + 118: uint16(32267), + 119: uint16(32271), + 120: uint16(32278), + 121: uint16(32269), + 122: uint16(32276), + 123: uint16(32293), + 124: uint16(32292), + 125: uint16(32579), + 126: uint16(32635), + 127: uint16(32636), + 128: uint16(32634), + 129: uint16(32689), + 130: uint16(32751), + 131: uint16(32810), + 132: uint16(32809), + 133: uint16(32876), + 134: uint16(33201), + 135: uint16(33190), + 136: uint16(33198), + 137: uint16(33209), + 138: uint16(33205), + 139: uint16(33195), + 140: uint16(33200), + 141: uint16(33196), + 142: uint16(33204), + 143: uint16(33202), + 144: uint16(33207), + 145: uint16(33191), + 146: uint16(33266), + 147: uint16(33365), + 148: uint16(33366), + 149: uint16(33367), + 150: uint16(34134), + 151: uint16(34117), + 152: uint16(34155), + 153: uint16(34125), + 154: uint16(34131), + 155: uint16(34145), + 156: uint16(34136), + }, + 74: { + 0: uint16(34112), + 1: uint16(34118), + 2: uint16(34148), + 3: uint16(34113), + 4: uint16(34146), + 5: uint16(34116), + 6: uint16(34129), + 7: uint16(34119), + 8: uint16(34147), + 9: uint16(34110), + 10: uint16(34139), + 11: uint16(34161), + 12: uint16(34126), + 13: uint16(34158), + 14: uint16(34165), + 15: uint16(34133), + 16: uint16(34151), + 17: uint16(34144), + 18: uint16(34188), + 19: uint16(34150), + 20: uint16(34141), + 21: uint16(34132), + 22: uint16(34149), + 23: uint16(34156), + 24: uint16(34403), + 25: uint16(34405), + 26: uint16(34404), + 27: uint16(34715), + 28: uint16(34703), + 29: uint16(34711), + 30: uint16(34707), + 31: uint16(34706), + 32: uint16(34696), + 33: uint16(34689), + 34: uint16(34710), + 35: uint16(34712), + 36: uint16(34681), + 37: uint16(34695), + 38: uint16(34723), + 39: uint16(34693), + 40: uint16(34704), + 41: uint16(34705), + 42: uint16(34717), + 43: uint16(34692), + 44: uint16(34708), + 45: uint16(34716), + 46: uint16(34714), + 47: uint16(34697), + 48: uint16(35102), + 49: uint16(35110), + 50: uint16(35120), + 51: uint16(35117), + 52: uint16(35118), + 53: uint16(35111), + 54: uint16(35121), + 55: uint16(35106), + 56: uint16(35113), + 57: uint16(35107), + 58: uint16(35119), + 59: uint16(35116), + 60: uint16(35103), + 61: uint16(35313), + 62: uint16(35552), + 63: uint16(35554), + 64: uint16(35570), + 65: uint16(35572), + 66: uint16(35573), + 67: uint16(35549), + 68: uint16(35604), + 69: uint16(35556), + 70: uint16(35551), + 71: uint16(35568), + 72: uint16(35528), + 73: uint16(35550), + 74: uint16(35553), + 75: uint16(35560), + 76: uint16(35583), + 77: uint16(35567), + 78: uint16(35579), + 79: uint16(35985), + 80: uint16(35986), + 81: uint16(35984), + 82: uint16(36085), + 83: uint16(36078), + 84: uint16(36081), + 85: uint16(36080), + 86: uint16(36083), + 87: uint16(36204), + 88: uint16(36206), + 89: uint16(36261), + 90: uint16(36263), + 91: uint16(36403), + 92: uint16(36414), + 93: uint16(36408), + 94: uint16(36416), + 95: uint16(36421), + 96: uint16(36406), + 97: uint16(36412), + 98: uint16(36413), + 99: uint16(36417), + 100: uint16(36400), + 101: uint16(36415), + 102: uint16(36541), + 103: uint16(36662), + 104: uint16(36654), + 105: uint16(36661), + 106: uint16(36658), + 107: uint16(36665), + 108: uint16(36663), + 109: uint16(36660), + 110: uint16(36982), + 111: uint16(36985), + 112: uint16(36987), + 113: uint16(36998), + 114: uint16(37114), + 115: uint16(37171), + 116: uint16(37173), + 117: uint16(37174), + 118: uint16(37267), + 119: uint16(37264), + 120: uint16(37265), + 121: uint16(37261), + 122: uint16(37263), + 123: uint16(37671), + 124: uint16(37662), + 125: uint16(37640), + 126: uint16(37663), + 127: uint16(37638), + 128: uint16(37647), + 129: uint16(37754), + 130: uint16(37688), + 131: uint16(37692), + 132: uint16(37659), + 133: uint16(37667), + 134: uint16(37650), + 135: uint16(37633), + 136: uint16(37702), + 137: uint16(37677), + 138: uint16(37646), + 139: uint16(37645), + 140: uint16(37579), + 141: uint16(37661), + 142: uint16(37626), + 143: uint16(37669), + 144: uint16(37651), + 145: uint16(37625), + 146: uint16(37623), + 147: uint16(37684), + 148: uint16(37634), + 149: uint16(37668), + 150: uint16(37631), + 151: uint16(37673), + 152: uint16(37689), + 153: uint16(37685), + 154: uint16(37674), + 155: uint16(37652), + 156: uint16(37644), + }, + 75: { + 0: uint16(37643), + 1: uint16(37630), + 2: uint16(37641), + 3: uint16(37632), + 4: uint16(37627), + 5: uint16(37654), + 6: uint16(38332), + 7: uint16(38349), + 8: uint16(38334), + 9: uint16(38329), + 10: uint16(38330), + 11: uint16(38326), + 12: uint16(38335), + 13: uint16(38325), + 14: uint16(38333), + 15: uint16(38569), + 16: uint16(38612), + 17: uint16(38667), + 18: uint16(38674), + 19: uint16(38672), + 20: uint16(38809), + 21: uint16(38807), + 22: uint16(38804), + 23: uint16(38896), + 24: uint16(38904), + 25: uint16(38965), + 26: uint16(38959), + 27: uint16(38962), + 28: uint16(39204), + 29: uint16(39199), + 30: uint16(39207), + 31: uint16(39209), + 32: uint16(39326), + 33: uint16(39406), + 34: uint16(39404), + 35: uint16(39397), + 36: uint16(39396), + 37: uint16(39408), + 38: uint16(39395), + 39: uint16(39402), + 40: uint16(39401), + 41: uint16(39399), + 42: uint16(39609), + 43: uint16(39615), + 44: uint16(39604), + 45: uint16(39611), + 46: uint16(39670), + 47: uint16(39674), + 48: uint16(39673), + 49: uint16(39671), + 50: uint16(39731), + 51: uint16(39808), + 52: uint16(39813), + 53: uint16(39815), + 54: uint16(39804), + 55: uint16(39806), + 56: uint16(39803), + 57: uint16(39810), + 58: uint16(39827), + 59: uint16(39826), + 60: uint16(39824), + 61: uint16(39802), + 62: uint16(39829), + 63: uint16(39805), + 64: uint16(39816), + 65: uint16(40229), + 66: uint16(40215), + 67: uint16(40224), + 68: uint16(40222), + 69: uint16(40212), + 70: uint16(40233), + 71: uint16(40221), + 72: uint16(40216), + 73: uint16(40226), + 74: uint16(40208), + 75: uint16(40217), + 76: uint16(40223), + 77: uint16(40584), + 78: uint16(40582), + 79: uint16(40583), + 80: uint16(40622), + 81: uint16(40621), + 82: uint16(40661), + 83: uint16(40662), + 84: uint16(40698), + 85: uint16(40722), + 86: uint16(40765), + 87: uint16(20774), + 88: uint16(20773), + 89: uint16(20770), + 90: uint16(20772), + 91: uint16(20768), + 92: uint16(20777), + 93: uint16(21236), + 94: uint16(22163), + 95: uint16(22156), + 96: uint16(22157), + 97: uint16(22150), + 98: uint16(22148), + 99: uint16(22147), + 100: uint16(22142), + 101: uint16(22146), + 102: uint16(22143), + 103: uint16(22145), + 104: uint16(22742), + 105: uint16(22740), + 106: uint16(22735), + 107: uint16(22738), + 108: uint16(23341), + 109: uint16(23333), + 110: uint16(23346), + 111: uint16(23331), + 112: uint16(23340), + 113: uint16(23335), + 114: uint16(23334), + 115: uint16(23343), + 116: uint16(23342), + 117: uint16(23419), + 118: uint16(23537), + 119: uint16(23538), + 120: uint16(23991), + 121: uint16(24172), + 122: uint16(24170), + 123: uint16(24510), + 124: uint16(24507), + 125: uint16(25027), + 126: uint16(25013), + 127: uint16(25020), + 128: uint16(25063), + 129: uint16(25056), + 130: uint16(25061), + 131: uint16(25060), + 132: uint16(25064), + 133: uint16(25054), + 134: uint16(25839), + 135: uint16(25833), + 136: uint16(25827), + 137: uint16(25835), + 138: uint16(25828), + 139: uint16(25832), + 140: uint16(25985), + 141: uint16(25984), + 142: uint16(26038), + 143: uint16(26074), + 144: uint16(26322), + 145: uint16(27277), + 146: uint16(27286), + 147: uint16(27265), + 148: uint16(27301), + 149: uint16(27273), + 150: uint16(27295), + 151: uint16(27291), + 152: uint16(27297), + 153: uint16(27294), + 154: uint16(27271), + 155: uint16(27283), + 156: uint16(27278), + }, + 76: { + 0: uint16(27285), + 1: uint16(27267), + 2: uint16(27304), + 3: uint16(27300), + 4: uint16(27281), + 5: uint16(27263), + 6: uint16(27302), + 7: uint16(27290), + 8: uint16(27269), + 9: uint16(27276), + 10: uint16(27282), + 11: uint16(27483), + 12: uint16(27565), + 13: uint16(27657), + 14: uint16(28620), + 15: uint16(28585), + 16: uint16(28660), + 17: uint16(28628), + 18: uint16(28643), + 19: uint16(28636), + 20: uint16(28653), + 21: uint16(28647), + 22: uint16(28646), + 23: uint16(28638), + 24: uint16(28658), + 25: uint16(28637), + 26: uint16(28642), + 27: uint16(28648), + 28: uint16(29153), + 29: uint16(29169), + 30: uint16(29160), + 31: uint16(29170), + 32: uint16(29156), + 33: uint16(29168), + 34: uint16(29154), + 35: uint16(29555), + 36: uint16(29550), + 37: uint16(29551), + 38: uint16(29847), + 39: uint16(29874), + 40: uint16(29867), + 41: uint16(29840), + 42: uint16(29866), + 43: uint16(29869), + 44: uint16(29873), + 45: uint16(29861), + 46: uint16(29871), + 47: uint16(29968), + 48: uint16(29969), + 49: uint16(29970), + 50: uint16(29967), + 51: uint16(30084), + 52: uint16(30275), + 53: uint16(30280), + 54: uint16(30281), + 55: uint16(30279), + 56: uint16(30372), + 57: uint16(30441), + 58: uint16(30645), + 59: uint16(30635), + 60: uint16(30642), + 61: uint16(30647), + 62: uint16(30646), + 63: uint16(30644), + 64: uint16(30641), + 65: uint16(30632), + 66: uint16(30704), + 67: uint16(30963), + 68: uint16(30973), + 69: uint16(30978), + 70: uint16(30971), + 71: uint16(30972), + 72: uint16(30962), + 73: uint16(30981), + 74: uint16(30969), + 75: uint16(30974), + 76: uint16(30980), + 77: uint16(31147), + 78: uint16(31144), + 79: uint16(31324), + 80: uint16(31323), + 81: uint16(31318), + 82: uint16(31320), + 83: uint16(31316), + 84: uint16(31322), + 85: uint16(31422), + 86: uint16(31424), + 87: uint16(31425), + 88: uint16(31749), + 89: uint16(31759), + 90: uint16(31730), + 91: uint16(31744), + 92: uint16(31743), + 93: uint16(31739), + 94: uint16(31758), + 95: uint16(31732), + 96: uint16(31755), + 97: uint16(31731), + 98: uint16(31746), + 99: uint16(31753), + 100: uint16(31747), + 101: uint16(31745), + 102: uint16(31736), + 103: uint16(31741), + 104: uint16(31750), + 105: uint16(31728), + 106: uint16(31729), + 107: uint16(31760), + 108: uint16(31754), + 109: uint16(31976), + 110: uint16(32301), + 111: uint16(32316), + 112: uint16(32322), + 113: uint16(32307), + 114: uint16(38984), + 115: uint16(32312), + 116: uint16(32298), + 117: uint16(32329), + 118: uint16(32320), + 119: uint16(32327), + 120: uint16(32297), + 121: uint16(32332), + 122: uint16(32304), + 123: uint16(32315), + 124: uint16(32310), + 125: uint16(32324), + 126: uint16(32314), + 127: uint16(32581), + 128: uint16(32639), + 129: uint16(32638), + 130: uint16(32637), + 131: uint16(32756), + 132: uint16(32754), + 133: uint16(32812), + 134: uint16(33211), + 135: uint16(33220), + 136: uint16(33228), + 137: uint16(33226), + 138: uint16(33221), + 139: uint16(33223), + 140: uint16(33212), + 141: uint16(33257), + 142: uint16(33371), + 143: uint16(33370), + 144: uint16(33372), + 145: uint16(34179), + 146: uint16(34176), + 147: uint16(34191), + 148: uint16(34215), + 149: uint16(34197), + 150: uint16(34208), + 151: uint16(34187), + 152: uint16(34211), + 153: uint16(34171), + 154: uint16(34212), + 155: uint16(34202), + 156: uint16(34206), + }, + 77: { + 0: uint16(34167), + 1: uint16(34172), + 2: uint16(34185), + 3: uint16(34209), + 4: uint16(34170), + 5: uint16(34168), + 6: uint16(34135), + 7: uint16(34190), + 8: uint16(34198), + 9: uint16(34182), + 10: uint16(34189), + 11: uint16(34201), + 12: uint16(34205), + 13: uint16(34177), + 14: uint16(34210), + 15: uint16(34178), + 16: uint16(34184), + 17: uint16(34181), + 18: uint16(34169), + 19: uint16(34166), + 20: uint16(34200), + 21: uint16(34192), + 22: uint16(34207), + 23: uint16(34408), + 24: uint16(34750), + 25: uint16(34730), + 26: uint16(34733), + 27: uint16(34757), + 28: uint16(34736), + 29: uint16(34732), + 30: uint16(34745), + 31: uint16(34741), + 32: uint16(34748), + 33: uint16(34734), + 34: uint16(34761), + 35: uint16(34755), + 36: uint16(34754), + 37: uint16(34764), + 38: uint16(34743), + 39: uint16(34735), + 40: uint16(34756), + 41: uint16(34762), + 42: uint16(34740), + 43: uint16(34742), + 44: uint16(34751), + 45: uint16(34744), + 46: uint16(34749), + 47: uint16(34782), + 48: uint16(34738), + 49: uint16(35125), + 50: uint16(35123), + 51: uint16(35132), + 52: uint16(35134), + 53: uint16(35137), + 54: uint16(35154), + 55: uint16(35127), + 56: uint16(35138), + 57: uint16(35245), + 58: uint16(35247), + 59: uint16(35246), + 60: uint16(35314), + 61: uint16(35315), + 62: uint16(35614), + 63: uint16(35608), + 64: uint16(35606), + 65: uint16(35601), + 66: uint16(35589), + 67: uint16(35595), + 68: uint16(35618), + 69: uint16(35599), + 70: uint16(35602), + 71: uint16(35605), + 72: uint16(35591), + 73: uint16(35597), + 74: uint16(35592), + 75: uint16(35590), + 76: uint16(35612), + 77: uint16(35603), + 78: uint16(35610), + 79: uint16(35919), + 80: uint16(35952), + 81: uint16(35954), + 82: uint16(35953), + 83: uint16(35951), + 84: uint16(35989), + 85: uint16(35988), + 86: uint16(36089), + 87: uint16(36207), + 88: uint16(36430), + 89: uint16(36429), + 90: uint16(36435), + 91: uint16(36432), + 92: uint16(36428), + 93: uint16(36423), + 94: uint16(36675), + 95: uint16(36672), + 96: uint16(36997), + 97: uint16(36990), + 98: uint16(37176), + 99: uint16(37274), + 100: uint16(37282), + 101: uint16(37275), + 102: uint16(37273), + 103: uint16(37279), + 104: uint16(37281), + 105: uint16(37277), + 106: uint16(37280), + 107: uint16(37793), + 108: uint16(37763), + 109: uint16(37807), + 110: uint16(37732), + 111: uint16(37718), + 112: uint16(37703), + 113: uint16(37756), + 114: uint16(37720), + 115: uint16(37724), + 116: uint16(37750), + 117: uint16(37705), + 118: uint16(37712), + 119: uint16(37713), + 120: uint16(37728), + 121: uint16(37741), + 122: uint16(37775), + 123: uint16(37708), + 124: uint16(37738), + 125: uint16(37753), + 126: uint16(37719), + 127: uint16(37717), + 128: uint16(37714), + 129: uint16(37711), + 130: uint16(37745), + 131: uint16(37751), + 132: uint16(37755), + 133: uint16(37729), + 134: uint16(37726), + 135: uint16(37731), + 136: uint16(37735), + 137: uint16(37760), + 138: uint16(37710), + 139: uint16(37721), + 140: uint16(38343), + 141: uint16(38336), + 142: uint16(38345), + 143: uint16(38339), + 144: uint16(38341), + 145: uint16(38327), + 146: uint16(38574), + 147: uint16(38576), + 148: uint16(38572), + 149: uint16(38688), + 150: uint16(38687), + 151: uint16(38680), + 152: uint16(38685), + 153: uint16(38681), + 154: uint16(38810), + 155: uint16(38817), + 156: uint16(38812), + }, + 78: { + 0: uint16(38814), + 1: uint16(38813), + 2: uint16(38869), + 3: uint16(38868), + 4: uint16(38897), + 5: uint16(38977), + 6: uint16(38980), + 7: uint16(38986), + 8: uint16(38985), + 9: uint16(38981), + 10: uint16(38979), + 11: uint16(39205), + 12: uint16(39211), + 13: uint16(39212), + 14: uint16(39210), + 15: uint16(39219), + 16: uint16(39218), + 17: uint16(39215), + 18: uint16(39213), + 19: uint16(39217), + 20: uint16(39216), + 21: uint16(39320), + 22: uint16(39331), + 23: uint16(39329), + 24: uint16(39426), + 25: uint16(39418), + 26: uint16(39412), + 27: uint16(39415), + 28: uint16(39417), + 29: uint16(39416), + 30: uint16(39414), + 31: uint16(39419), + 32: uint16(39421), + 33: uint16(39422), + 34: uint16(39420), + 35: uint16(39427), + 36: uint16(39614), + 37: uint16(39678), + 38: uint16(39677), + 39: uint16(39681), + 40: uint16(39676), + 41: uint16(39752), + 42: uint16(39834), + 43: uint16(39848), + 44: uint16(39838), + 45: uint16(39835), + 46: uint16(39846), + 47: uint16(39841), + 48: uint16(39845), + 49: uint16(39844), + 50: uint16(39814), + 51: uint16(39842), + 52: uint16(39840), + 53: uint16(39855), + 54: uint16(40243), + 55: uint16(40257), + 56: uint16(40295), + 57: uint16(40246), + 58: uint16(40238), + 59: uint16(40239), + 60: uint16(40241), + 61: uint16(40248), + 62: uint16(40240), + 63: uint16(40261), + 64: uint16(40258), + 65: uint16(40259), + 66: uint16(40254), + 67: uint16(40247), + 68: uint16(40256), + 69: uint16(40253), + 70: uint16(32757), + 71: uint16(40237), + 72: uint16(40586), + 73: uint16(40585), + 74: uint16(40589), + 75: uint16(40624), + 76: uint16(40648), + 77: uint16(40666), + 78: uint16(40699), + 79: uint16(40703), + 80: uint16(40740), + 81: uint16(40739), + 82: uint16(40738), + 83: uint16(40788), + 84: uint16(40864), + 85: uint16(20785), + 86: uint16(20781), + 87: uint16(20782), + 88: uint16(22168), + 89: uint16(22172), + 90: uint16(22167), + 91: uint16(22170), + 92: uint16(22173), + 93: uint16(22169), + 94: uint16(22896), + 95: uint16(23356), + 96: uint16(23657), + 97: uint16(23658), + 98: uint16(24000), + 99: uint16(24173), + 100: uint16(24174), + 101: uint16(25048), + 102: uint16(25055), + 103: uint16(25069), + 104: uint16(25070), + 105: uint16(25073), + 106: uint16(25066), + 107: uint16(25072), + 108: uint16(25067), + 109: uint16(25046), + 110: uint16(25065), + 111: uint16(25855), + 112: uint16(25860), + 113: uint16(25853), + 114: uint16(25848), + 115: uint16(25857), + 116: uint16(25859), + 117: uint16(25852), + 118: uint16(26004), + 119: uint16(26075), + 120: uint16(26330), + 121: uint16(26331), + 122: uint16(26328), + 123: uint16(27333), + 124: uint16(27321), + 125: uint16(27325), + 126: uint16(27361), + 127: uint16(27334), + 128: uint16(27322), + 129: uint16(27318), + 130: uint16(27319), + 131: uint16(27335), + 132: uint16(27316), + 133: uint16(27309), + 134: uint16(27486), + 135: uint16(27593), + 136: uint16(27659), + 137: uint16(28679), + 138: uint16(28684), + 139: uint16(28685), + 140: uint16(28673), + 141: uint16(28677), + 142: uint16(28692), + 143: uint16(28686), + 144: uint16(28671), + 145: uint16(28672), + 146: uint16(28667), + 147: uint16(28710), + 148: uint16(28668), + 149: uint16(28663), + 150: uint16(28682), + 151: uint16(29185), + 152: uint16(29183), + 153: uint16(29177), + 154: uint16(29187), + 155: uint16(29181), + 156: uint16(29558), + }, + 79: { + 0: uint16(29880), + 1: uint16(29888), + 2: uint16(29877), + 3: uint16(29889), + 4: uint16(29886), + 5: uint16(29878), + 6: uint16(29883), + 7: uint16(29890), + 8: uint16(29972), + 9: uint16(29971), + 10: uint16(30300), + 11: uint16(30308), + 12: uint16(30297), + 13: uint16(30288), + 14: uint16(30291), + 15: uint16(30295), + 16: uint16(30298), + 17: uint16(30374), + 18: uint16(30397), + 19: uint16(30444), + 20: uint16(30658), + 21: uint16(30650), + 22: uint16(30975), + 23: uint16(30988), + 24: uint16(30995), + 25: uint16(30996), + 26: uint16(30985), + 27: uint16(30992), + 28: uint16(30994), + 29: uint16(30993), + 30: uint16(31149), + 31: uint16(31148), + 32: uint16(31327), + 33: uint16(31772), + 34: uint16(31785), + 35: uint16(31769), + 36: uint16(31776), + 37: uint16(31775), + 38: uint16(31789), + 39: uint16(31773), + 40: uint16(31782), + 41: uint16(31784), + 42: uint16(31778), + 43: uint16(31781), + 44: uint16(31792), + 45: uint16(32348), + 46: uint16(32336), + 47: uint16(32342), + 48: uint16(32355), + 49: uint16(32344), + 50: uint16(32354), + 51: uint16(32351), + 52: uint16(32337), + 53: uint16(32352), + 54: uint16(32343), + 55: uint16(32339), + 56: uint16(32693), + 57: uint16(32691), + 58: uint16(32759), + 59: uint16(32760), + 60: uint16(32885), + 61: uint16(33233), + 62: uint16(33234), + 63: uint16(33232), + 64: uint16(33375), + 65: uint16(33374), + 66: uint16(34228), + 67: uint16(34246), + 68: uint16(34240), + 69: uint16(34243), + 70: uint16(34242), + 71: uint16(34227), + 72: uint16(34229), + 73: uint16(34237), + 74: uint16(34247), + 75: uint16(34244), + 76: uint16(34239), + 77: uint16(34251), + 78: uint16(34254), + 79: uint16(34248), + 80: uint16(34245), + 81: uint16(34225), + 82: uint16(34230), + 83: uint16(34258), + 84: uint16(34340), + 85: uint16(34232), + 86: uint16(34231), + 87: uint16(34238), + 88: uint16(34409), + 89: uint16(34791), + 90: uint16(34790), + 91: uint16(34786), + 92: uint16(34779), + 93: uint16(34795), + 94: uint16(34794), + 95: uint16(34789), + 96: uint16(34783), + 97: uint16(34803), + 98: uint16(34788), + 99: uint16(34772), + 100: uint16(34780), + 101: uint16(34771), + 102: uint16(34797), + 103: uint16(34776), + 104: uint16(34787), + 105: uint16(34724), + 106: uint16(34775), + 107: uint16(34777), + 108: uint16(34817), + 109: uint16(34804), + 110: uint16(34792), + 111: uint16(34781), + 112: uint16(35155), + 113: uint16(35147), + 114: uint16(35151), + 115: uint16(35148), + 116: uint16(35142), + 117: uint16(35152), + 118: uint16(35153), + 119: uint16(35145), + 120: uint16(35626), + 121: uint16(35623), + 122: uint16(35619), + 123: uint16(35635), + 124: uint16(35632), + 125: uint16(35637), + 126: uint16(35655), + 127: uint16(35631), + 128: uint16(35644), + 129: uint16(35646), + 130: uint16(35633), + 131: uint16(35621), + 132: uint16(35639), + 133: uint16(35622), + 134: uint16(35638), + 135: uint16(35630), + 136: uint16(35620), + 137: uint16(35643), + 138: uint16(35645), + 139: uint16(35642), + 140: uint16(35906), + 141: uint16(35957), + 142: uint16(35993), + 143: uint16(35992), + 144: uint16(35991), + 145: uint16(36094), + 146: uint16(36100), + 147: uint16(36098), + 148: uint16(36096), + 149: uint16(36444), + 150: uint16(36450), + 151: uint16(36448), + 152: uint16(36439), + 153: uint16(36438), + 154: uint16(36446), + 155: uint16(36453), + 156: uint16(36455), + }, + 80: { + 0: uint16(36443), + 1: uint16(36442), + 2: uint16(36449), + 3: uint16(36445), + 4: uint16(36457), + 5: uint16(36436), + 6: uint16(36678), + 7: uint16(36679), + 8: uint16(36680), + 9: uint16(36683), + 10: uint16(37160), + 11: uint16(37178), + 12: uint16(37179), + 13: uint16(37182), + 14: uint16(37288), + 15: uint16(37285), + 16: uint16(37287), + 17: uint16(37295), + 18: uint16(37290), + 19: uint16(37813), + 20: uint16(37772), + 21: uint16(37778), + 22: uint16(37815), + 23: uint16(37787), + 24: uint16(37789), + 25: uint16(37769), + 26: uint16(37799), + 27: uint16(37774), + 28: uint16(37802), + 29: uint16(37790), + 30: uint16(37798), + 31: uint16(37781), + 32: uint16(37768), + 33: uint16(37785), + 34: uint16(37791), + 35: uint16(37773), + 36: uint16(37809), + 37: uint16(37777), + 38: uint16(37810), + 39: uint16(37796), + 40: uint16(37800), + 41: uint16(37812), + 42: uint16(37795), + 43: uint16(37797), + 44: uint16(38354), + 45: uint16(38355), + 46: uint16(38353), + 47: uint16(38579), + 48: uint16(38615), + 49: uint16(38618), + 50: uint16(24002), + 51: uint16(38623), + 52: uint16(38616), + 53: uint16(38621), + 54: uint16(38691), + 55: uint16(38690), + 56: uint16(38693), + 57: uint16(38828), + 58: uint16(38830), + 59: uint16(38824), + 60: uint16(38827), + 61: uint16(38820), + 62: uint16(38826), + 63: uint16(38818), + 64: uint16(38821), + 65: uint16(38871), + 66: uint16(38873), + 67: uint16(38870), + 68: uint16(38872), + 69: uint16(38906), + 70: uint16(38992), + 71: uint16(38993), + 72: uint16(38994), + 73: uint16(39096), + 74: uint16(39233), + 75: uint16(39228), + 76: uint16(39226), + 77: uint16(39439), + 78: uint16(39435), + 79: uint16(39433), + 80: uint16(39437), + 81: uint16(39428), + 82: uint16(39441), + 83: uint16(39434), + 84: uint16(39429), + 85: uint16(39431), + 86: uint16(39430), + 87: uint16(39616), + 88: uint16(39644), + 89: uint16(39688), + 90: uint16(39684), + 91: uint16(39685), + 92: uint16(39721), + 93: uint16(39733), + 94: uint16(39754), + 95: uint16(39756), + 96: uint16(39755), + 97: uint16(39879), + 98: uint16(39878), + 99: uint16(39875), + 100: uint16(39871), + 101: uint16(39873), + 102: uint16(39861), + 103: uint16(39864), + 104: uint16(39891), + 105: uint16(39862), + 106: uint16(39876), + 107: uint16(39865), + 108: uint16(39869), + 109: uint16(40284), + 110: uint16(40275), + 111: uint16(40271), + 112: uint16(40266), + 113: uint16(40283), + 114: uint16(40267), + 115: uint16(40281), + 116: uint16(40278), + 117: uint16(40268), + 118: uint16(40279), + 119: uint16(40274), + 120: uint16(40276), + 121: uint16(40287), + 122: uint16(40280), + 123: uint16(40282), + 124: uint16(40590), + 125: uint16(40588), + 126: uint16(40671), + 127: uint16(40705), + 128: uint16(40704), + 129: uint16(40726), + 130: uint16(40741), + 131: uint16(40747), + 132: uint16(40746), + 133: uint16(40745), + 134: uint16(40744), + 135: uint16(40780), + 136: uint16(40789), + 137: uint16(20788), + 138: uint16(20789), + 139: uint16(21142), + 140: uint16(21239), + 141: uint16(21428), + 142: uint16(22187), + 143: uint16(22189), + 144: uint16(22182), + 145: uint16(22183), + 146: uint16(22186), + 147: uint16(22188), + 148: uint16(22746), + 149: uint16(22749), + 150: uint16(22747), + 151: uint16(22802), + 152: uint16(23357), + 153: uint16(23358), + 154: uint16(23359), + 155: uint16(24003), + 156: uint16(24176), + }, + 81: { + 0: uint16(24511), + 1: uint16(25083), + 2: uint16(25863), + 3: uint16(25872), + 4: uint16(25869), + 5: uint16(25865), + 6: uint16(25868), + 7: uint16(25870), + 8: uint16(25988), + 9: uint16(26078), + 10: uint16(26077), + 11: uint16(26334), + 12: uint16(27367), + 13: uint16(27360), + 14: uint16(27340), + 15: uint16(27345), + 16: uint16(27353), + 17: uint16(27339), + 18: uint16(27359), + 19: uint16(27356), + 20: uint16(27344), + 21: uint16(27371), + 22: uint16(27343), + 23: uint16(27341), + 24: uint16(27358), + 25: uint16(27488), + 26: uint16(27568), + 27: uint16(27660), + 28: uint16(28697), + 29: uint16(28711), + 30: uint16(28704), + 31: uint16(28694), + 32: uint16(28715), + 33: uint16(28705), + 34: uint16(28706), + 35: uint16(28707), + 36: uint16(28713), + 37: uint16(28695), + 38: uint16(28708), + 39: uint16(28700), + 40: uint16(28714), + 41: uint16(29196), + 42: uint16(29194), + 43: uint16(29191), + 44: uint16(29186), + 45: uint16(29189), + 46: uint16(29349), + 47: uint16(29350), + 48: uint16(29348), + 49: uint16(29347), + 50: uint16(29345), + 51: uint16(29899), + 52: uint16(29893), + 53: uint16(29879), + 54: uint16(29891), + 55: uint16(29974), + 56: uint16(30304), + 57: uint16(30665), + 58: uint16(30666), + 59: uint16(30660), + 60: uint16(30705), + 61: uint16(31005), + 62: uint16(31003), + 63: uint16(31009), + 64: uint16(31004), + 65: uint16(30999), + 66: uint16(31006), + 67: uint16(31152), + 68: uint16(31335), + 69: uint16(31336), + 70: uint16(31795), + 71: uint16(31804), + 72: uint16(31801), + 73: uint16(31788), + 74: uint16(31803), + 75: uint16(31980), + 76: uint16(31978), + 77: uint16(32374), + 78: uint16(32373), + 79: uint16(32376), + 80: uint16(32368), + 81: uint16(32375), + 82: uint16(32367), + 83: uint16(32378), + 84: uint16(32370), + 85: uint16(32372), + 86: uint16(32360), + 87: uint16(32587), + 88: uint16(32586), + 89: uint16(32643), + 90: uint16(32646), + 91: uint16(32695), + 92: uint16(32765), + 93: uint16(32766), + 94: uint16(32888), + 95: uint16(33239), + 96: uint16(33237), + 97: uint16(33380), + 98: uint16(33377), + 99: uint16(33379), + 100: uint16(34283), + 101: uint16(34289), + 102: uint16(34285), + 103: uint16(34265), + 104: uint16(34273), + 105: uint16(34280), + 106: uint16(34266), + 107: uint16(34263), + 108: uint16(34284), + 109: uint16(34290), + 110: uint16(34296), + 111: uint16(34264), + 112: uint16(34271), + 113: uint16(34275), + 114: uint16(34268), + 115: uint16(34257), + 116: uint16(34288), + 117: uint16(34278), + 118: uint16(34287), + 119: uint16(34270), + 120: uint16(34274), + 121: uint16(34816), + 122: uint16(34810), + 123: uint16(34819), + 124: uint16(34806), + 125: uint16(34807), + 126: uint16(34825), + 127: uint16(34828), + 128: uint16(34827), + 129: uint16(34822), + 130: uint16(34812), + 131: uint16(34824), + 132: uint16(34815), + 133: uint16(34826), + 134: uint16(34818), + 135: uint16(35170), + 136: uint16(35162), + 137: uint16(35163), + 138: uint16(35159), + 139: uint16(35169), + 140: uint16(35164), + 141: uint16(35160), + 142: uint16(35165), + 143: uint16(35161), + 144: uint16(35208), + 145: uint16(35255), + 146: uint16(35254), + 147: uint16(35318), + 148: uint16(35664), + 149: uint16(35656), + 150: uint16(35658), + 151: uint16(35648), + 152: uint16(35667), + 153: uint16(35670), + 154: uint16(35668), + 155: uint16(35659), + 156: uint16(35669), + }, + 82: { + 0: uint16(35665), + 1: uint16(35650), + 2: uint16(35666), + 3: uint16(35671), + 4: uint16(35907), + 5: uint16(35959), + 6: uint16(35958), + 7: uint16(35994), + 8: uint16(36102), + 9: uint16(36103), + 10: uint16(36105), + 11: uint16(36268), + 12: uint16(36266), + 13: uint16(36269), + 14: uint16(36267), + 15: uint16(36461), + 16: uint16(36472), + 17: uint16(36467), + 18: uint16(36458), + 19: uint16(36463), + 20: uint16(36475), + 21: uint16(36546), + 22: uint16(36690), + 23: uint16(36689), + 24: uint16(36687), + 25: uint16(36688), + 26: uint16(36691), + 27: uint16(36788), + 28: uint16(37184), + 29: uint16(37183), + 30: uint16(37296), + 31: uint16(37293), + 32: uint16(37854), + 33: uint16(37831), + 34: uint16(37839), + 35: uint16(37826), + 36: uint16(37850), + 37: uint16(37840), + 38: uint16(37881), + 39: uint16(37868), + 40: uint16(37836), + 41: uint16(37849), + 42: uint16(37801), + 43: uint16(37862), + 44: uint16(37834), + 45: uint16(37844), + 46: uint16(37870), + 47: uint16(37859), + 48: uint16(37845), + 49: uint16(37828), + 50: uint16(37838), + 51: uint16(37824), + 52: uint16(37842), + 53: uint16(37863), + 54: uint16(38269), + 55: uint16(38362), + 56: uint16(38363), + 57: uint16(38625), + 58: uint16(38697), + 59: uint16(38699), + 60: uint16(38700), + 61: uint16(38696), + 62: uint16(38694), + 63: uint16(38835), + 64: uint16(38839), + 65: uint16(38838), + 66: uint16(38877), + 67: uint16(38878), + 68: uint16(38879), + 69: uint16(39004), + 70: uint16(39001), + 71: uint16(39005), + 72: uint16(38999), + 73: uint16(39103), + 74: uint16(39101), + 75: uint16(39099), + 76: uint16(39102), + 77: uint16(39240), + 78: uint16(39239), + 79: uint16(39235), + 80: uint16(39334), + 81: uint16(39335), + 82: uint16(39450), + 83: uint16(39445), + 84: uint16(39461), + 85: uint16(39453), + 86: uint16(39460), + 87: uint16(39451), + 88: uint16(39458), + 89: uint16(39456), + 90: uint16(39463), + 91: uint16(39459), + 92: uint16(39454), + 93: uint16(39452), + 94: uint16(39444), + 95: uint16(39618), + 96: uint16(39691), + 97: uint16(39690), + 98: uint16(39694), + 99: uint16(39692), + 100: uint16(39735), + 101: uint16(39914), + 102: uint16(39915), + 103: uint16(39904), + 104: uint16(39902), + 105: uint16(39908), + 106: uint16(39910), + 107: uint16(39906), + 108: uint16(39920), + 109: uint16(39892), + 110: uint16(39895), + 111: uint16(39916), + 112: uint16(39900), + 113: uint16(39897), + 114: uint16(39909), + 115: uint16(39893), + 116: uint16(39905), + 117: uint16(39898), + 118: uint16(40311), + 119: uint16(40321), + 120: uint16(40330), + 121: uint16(40324), + 122: uint16(40328), + 123: uint16(40305), + 124: uint16(40320), + 125: uint16(40312), + 126: uint16(40326), + 127: uint16(40331), + 128: uint16(40332), + 129: uint16(40317), + 130: uint16(40299), + 131: uint16(40308), + 132: uint16(40309), + 133: uint16(40304), + 134: uint16(40297), + 135: uint16(40325), + 136: uint16(40307), + 137: uint16(40315), + 138: uint16(40322), + 139: uint16(40303), + 140: uint16(40313), + 141: uint16(40319), + 142: uint16(40327), + 143: uint16(40296), + 144: uint16(40596), + 145: uint16(40593), + 146: uint16(40640), + 147: uint16(40700), + 148: uint16(40749), + 149: uint16(40768), + 150: uint16(40769), + 151: uint16(40781), + 152: uint16(40790), + 153: uint16(40791), + 154: uint16(40792), + 155: uint16(21303), + 156: uint16(22194), + }, + 83: { + 0: uint16(22197), + 1: uint16(22195), + 2: uint16(22755), + 3: uint16(23365), + 4: uint16(24006), + 5: uint16(24007), + 6: uint16(24302), + 7: uint16(24303), + 8: uint16(24512), + 9: uint16(24513), + 10: uint16(25081), + 11: uint16(25879), + 12: uint16(25878), + 13: uint16(25877), + 14: uint16(25875), + 15: uint16(26079), + 16: uint16(26344), + 17: uint16(26339), + 18: uint16(26340), + 19: uint16(27379), + 20: uint16(27376), + 21: uint16(27370), + 22: uint16(27368), + 23: uint16(27385), + 24: uint16(27377), + 25: uint16(27374), + 26: uint16(27375), + 27: uint16(28732), + 28: uint16(28725), + 29: uint16(28719), + 30: uint16(28727), + 31: uint16(28724), + 32: uint16(28721), + 33: uint16(28738), + 34: uint16(28728), + 35: uint16(28735), + 36: uint16(28730), + 37: uint16(28729), + 38: uint16(28736), + 39: uint16(28731), + 40: uint16(28723), + 41: uint16(28737), + 42: uint16(29203), + 43: uint16(29204), + 44: uint16(29352), + 45: uint16(29565), + 46: uint16(29564), + 47: uint16(29882), + 48: uint16(30379), + 49: uint16(30378), + 50: uint16(30398), + 51: uint16(30445), + 52: uint16(30668), + 53: uint16(30670), + 54: uint16(30671), + 55: uint16(30669), + 56: uint16(30706), + 57: uint16(31013), + 58: uint16(31011), + 59: uint16(31015), + 60: uint16(31016), + 61: uint16(31012), + 62: uint16(31017), + 63: uint16(31154), + 64: uint16(31342), + 65: uint16(31340), + 66: uint16(31341), + 67: uint16(31479), + 68: uint16(31817), + 69: uint16(31816), + 70: uint16(31818), + 71: uint16(31815), + 72: uint16(31813), + 73: uint16(31982), + 74: uint16(32379), + 75: uint16(32382), + 76: uint16(32385), + 77: uint16(32384), + 78: uint16(32698), + 79: uint16(32767), + 80: uint16(32889), + 81: uint16(33243), + 82: uint16(33241), + 83: uint16(33291), + 84: uint16(33384), + 85: uint16(33385), + 86: uint16(34338), + 87: uint16(34303), + 88: uint16(34305), + 89: uint16(34302), + 90: uint16(34331), + 91: uint16(34304), + 92: uint16(34294), + 93: uint16(34308), + 94: uint16(34313), + 95: uint16(34309), + 96: uint16(34316), + 97: uint16(34301), + 98: uint16(34841), + 99: uint16(34832), + 100: uint16(34833), + 101: uint16(34839), + 102: uint16(34835), + 103: uint16(34838), + 104: uint16(35171), + 105: uint16(35174), + 106: uint16(35257), + 107: uint16(35319), + 108: uint16(35680), + 109: uint16(35690), + 110: uint16(35677), + 111: uint16(35688), + 112: uint16(35683), + 113: uint16(35685), + 114: uint16(35687), + 115: uint16(35693), + 116: uint16(36270), + 117: uint16(36486), + 118: uint16(36488), + 119: uint16(36484), + 120: uint16(36697), + 121: uint16(36694), + 122: uint16(36695), + 123: uint16(36693), + 124: uint16(36696), + 125: uint16(36698), + 126: uint16(37005), + 127: uint16(37187), + 128: uint16(37185), + 129: uint16(37303), + 130: uint16(37301), + 131: uint16(37298), + 132: uint16(37299), + 133: uint16(37899), + 134: uint16(37907), + 135: uint16(37883), + 136: uint16(37920), + 137: uint16(37903), + 138: uint16(37908), + 139: uint16(37886), + 140: uint16(37909), + 141: uint16(37904), + 142: uint16(37928), + 143: uint16(37913), + 144: uint16(37901), + 145: uint16(37877), + 146: uint16(37888), + 147: uint16(37879), + 148: uint16(37895), + 149: uint16(37902), + 150: uint16(37910), + 151: uint16(37906), + 152: uint16(37882), + 153: uint16(37897), + 154: uint16(37880), + 155: uint16(37898), + 156: uint16(37887), + }, + 84: { + 0: uint16(37884), + 1: uint16(37900), + 2: uint16(37878), + 3: uint16(37905), + 4: uint16(37894), + 5: uint16(38366), + 6: uint16(38368), + 7: uint16(38367), + 8: uint16(38702), + 9: uint16(38703), + 10: uint16(38841), + 11: uint16(38843), + 12: uint16(38909), + 13: uint16(38910), + 14: uint16(39008), + 15: uint16(39010), + 16: uint16(39011), + 17: uint16(39007), + 18: uint16(39105), + 19: uint16(39106), + 20: uint16(39248), + 21: uint16(39246), + 22: uint16(39257), + 23: uint16(39244), + 24: uint16(39243), + 25: uint16(39251), + 26: uint16(39474), + 27: uint16(39476), + 28: uint16(39473), + 29: uint16(39468), + 30: uint16(39466), + 31: uint16(39478), + 32: uint16(39465), + 33: uint16(39470), + 34: uint16(39480), + 35: uint16(39469), + 36: uint16(39623), + 37: uint16(39626), + 38: uint16(39622), + 39: uint16(39696), + 40: uint16(39698), + 41: uint16(39697), + 42: uint16(39947), + 43: uint16(39944), + 44: uint16(39927), + 45: uint16(39941), + 46: uint16(39954), + 47: uint16(39928), + 48: uint16(40000), + 49: uint16(39943), + 50: uint16(39950), + 51: uint16(39942), + 52: uint16(39959), + 53: uint16(39956), + 54: uint16(39945), + 55: uint16(40351), + 56: uint16(40345), + 57: uint16(40356), + 58: uint16(40349), + 59: uint16(40338), + 60: uint16(40344), + 61: uint16(40336), + 62: uint16(40347), + 63: uint16(40352), + 64: uint16(40340), + 65: uint16(40348), + 66: uint16(40362), + 67: uint16(40343), + 68: uint16(40353), + 69: uint16(40346), + 70: uint16(40354), + 71: uint16(40360), + 72: uint16(40350), + 73: uint16(40355), + 74: uint16(40383), + 75: uint16(40361), + 76: uint16(40342), + 77: uint16(40358), + 78: uint16(40359), + 79: uint16(40601), + 80: uint16(40603), + 81: uint16(40602), + 82: uint16(40677), + 83: uint16(40676), + 84: uint16(40679), + 85: uint16(40678), + 86: uint16(40752), + 87: uint16(40750), + 88: uint16(40795), + 89: uint16(40800), + 90: uint16(40798), + 91: uint16(40797), + 92: uint16(40793), + 93: uint16(40849), + 94: uint16(20794), + 95: uint16(20793), + 96: uint16(21144), + 97: uint16(21143), + 98: uint16(22211), + 99: uint16(22205), + 100: uint16(22206), + 101: uint16(23368), + 102: uint16(23367), + 103: uint16(24011), + 104: uint16(24015), + 105: uint16(24305), + 106: uint16(25085), + 107: uint16(25883), + 108: uint16(27394), + 109: uint16(27388), + 110: uint16(27395), + 111: uint16(27384), + 112: uint16(27392), + 113: uint16(28739), + 114: uint16(28740), + 115: uint16(28746), + 116: uint16(28744), + 117: uint16(28745), + 118: uint16(28741), + 119: uint16(28742), + 120: uint16(29213), + 121: uint16(29210), + 122: uint16(29209), + 123: uint16(29566), + 124: uint16(29975), + 125: uint16(30314), + 126: uint16(30672), + 127: uint16(31021), + 128: uint16(31025), + 129: uint16(31023), + 130: uint16(31828), + 131: uint16(31827), + 132: uint16(31986), + 133: uint16(32394), + 134: uint16(32391), + 135: uint16(32392), + 136: uint16(32395), + 137: uint16(32390), + 138: uint16(32397), + 139: uint16(32589), + 140: uint16(32699), + 141: uint16(32816), + 142: uint16(33245), + 143: uint16(34328), + 144: uint16(34346), + 145: uint16(34342), + 146: uint16(34335), + 147: uint16(34339), + 148: uint16(34332), + 149: uint16(34329), + 150: uint16(34343), + 151: uint16(34350), + 152: uint16(34337), + 153: uint16(34336), + 154: uint16(34345), + 155: uint16(34334), + 156: uint16(34341), + }, + 85: { + 0: uint16(34857), + 1: uint16(34845), + 2: uint16(34843), + 3: uint16(34848), + 4: uint16(34852), + 5: uint16(34844), + 6: uint16(34859), + 7: uint16(34890), + 8: uint16(35181), + 9: uint16(35177), + 10: uint16(35182), + 11: uint16(35179), + 12: uint16(35322), + 13: uint16(35705), + 14: uint16(35704), + 15: uint16(35653), + 16: uint16(35706), + 17: uint16(35707), + 18: uint16(36112), + 19: uint16(36116), + 20: uint16(36271), + 21: uint16(36494), + 22: uint16(36492), + 23: uint16(36702), + 24: uint16(36699), + 25: uint16(36701), + 26: uint16(37190), + 27: uint16(37188), + 28: uint16(37189), + 29: uint16(37305), + 30: uint16(37951), + 31: uint16(37947), + 32: uint16(37942), + 33: uint16(37929), + 34: uint16(37949), + 35: uint16(37948), + 36: uint16(37936), + 37: uint16(37945), + 38: uint16(37930), + 39: uint16(37943), + 40: uint16(37932), + 41: uint16(37952), + 42: uint16(37937), + 43: uint16(38373), + 44: uint16(38372), + 45: uint16(38371), + 46: uint16(38709), + 47: uint16(38714), + 48: uint16(38847), + 49: uint16(38881), + 50: uint16(39012), + 51: uint16(39113), + 52: uint16(39110), + 53: uint16(39104), + 54: uint16(39256), + 55: uint16(39254), + 56: uint16(39481), + 57: uint16(39485), + 58: uint16(39494), + 59: uint16(39492), + 60: uint16(39490), + 61: uint16(39489), + 62: uint16(39482), + 63: uint16(39487), + 64: uint16(39629), + 65: uint16(39701), + 66: uint16(39703), + 67: uint16(39704), + 68: uint16(39702), + 69: uint16(39738), + 70: uint16(39762), + 71: uint16(39979), + 72: uint16(39965), + 73: uint16(39964), + 74: uint16(39980), + 75: uint16(39971), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39972), + 79: uint16(39969), + 80: uint16(40375), + 81: uint16(40374), + 82: uint16(40380), + 83: uint16(40385), + 84: uint16(40391), + 85: uint16(40394), + 86: uint16(40399), + 87: uint16(40382), + 88: uint16(40389), + 89: uint16(40387), + 90: uint16(40379), + 91: uint16(40373), + 92: uint16(40398), + 93: uint16(40377), + 94: uint16(40378), + 95: uint16(40364), + 96: uint16(40392), + 97: uint16(40369), + 98: uint16(40365), + 99: uint16(40396), + 100: uint16(40371), + 101: uint16(40397), + 102: uint16(40370), + 103: uint16(40570), + 104: uint16(40604), + 105: uint16(40683), + 106: uint16(40686), + 107: uint16(40685), + 108: uint16(40731), + 109: uint16(40728), + 110: uint16(40730), + 111: uint16(40753), + 112: uint16(40782), + 113: uint16(40805), + 114: uint16(40804), + 115: uint16(40850), + 116: uint16(20153), + 117: uint16(22214), + 118: uint16(22213), + 119: uint16(22219), + 120: uint16(22897), + 121: uint16(23371), + 122: uint16(23372), + 123: uint16(24021), + 124: uint16(24017), + 125: uint16(24306), + 126: uint16(25889), + 127: uint16(25888), + 128: uint16(25894), + 129: uint16(25890), + 130: uint16(27403), + 131: uint16(27400), + 132: uint16(27401), + 133: uint16(27661), + 134: uint16(28757), + 135: uint16(28758), + 136: uint16(28759), + 137: uint16(28754), + 138: uint16(29214), + 139: uint16(29215), + 140: uint16(29353), + 141: uint16(29567), + 142: uint16(29912), + 143: uint16(29909), + 144: uint16(29913), + 145: uint16(29911), + 146: uint16(30317), + 147: uint16(30381), + 148: uint16(31029), + 149: uint16(31156), + 150: uint16(31344), + 151: uint16(31345), + 152: uint16(31831), + 153: uint16(31836), + 154: uint16(31833), + 155: uint16(31835), + 156: uint16(31834), + }, + 86: { + 0: uint16(31988), + 1: uint16(31985), + 2: uint16(32401), + 3: uint16(32591), + 4: uint16(32647), + 5: uint16(33246), + 6: uint16(33387), + 7: uint16(34356), + 8: uint16(34357), + 9: uint16(34355), + 10: uint16(34348), + 11: uint16(34354), + 12: uint16(34358), + 13: uint16(34860), + 14: uint16(34856), + 15: uint16(34854), + 16: uint16(34858), + 17: uint16(34853), + 18: uint16(35185), + 19: uint16(35263), + 20: uint16(35262), + 21: uint16(35323), + 22: uint16(35710), + 23: uint16(35716), + 24: uint16(35714), + 25: uint16(35718), + 26: uint16(35717), + 27: uint16(35711), + 28: uint16(36117), + 29: uint16(36501), + 30: uint16(36500), + 31: uint16(36506), + 32: uint16(36498), + 33: uint16(36496), + 34: uint16(36502), + 35: uint16(36503), + 36: uint16(36704), + 37: uint16(36706), + 38: uint16(37191), + 39: uint16(37964), + 40: uint16(37968), + 41: uint16(37962), + 42: uint16(37963), + 43: uint16(37967), + 44: uint16(37959), + 45: uint16(37957), + 46: uint16(37960), + 47: uint16(37961), + 48: uint16(37958), + 49: uint16(38719), + 50: uint16(38883), + 51: uint16(39018), + 52: uint16(39017), + 53: uint16(39115), + 54: uint16(39252), + 55: uint16(39259), + 56: uint16(39502), + 57: uint16(39507), + 58: uint16(39508), + 59: uint16(39500), + 60: uint16(39503), + 61: uint16(39496), + 62: uint16(39498), + 63: uint16(39497), + 64: uint16(39506), + 65: uint16(39504), + 66: uint16(39632), + 67: uint16(39705), + 68: uint16(39723), + 69: uint16(39739), + 70: uint16(39766), + 71: uint16(39765), + 72: uint16(40006), + 73: uint16(40008), + 74: uint16(39999), + 75: uint16(40004), + 76: uint16(39993), + 77: uint16(39987), + 78: uint16(40001), + 79: uint16(39996), + 80: uint16(39991), + 81: uint16(39988), + 82: uint16(39986), + 83: uint16(39997), + 84: uint16(39990), + 85: uint16(40411), + 86: uint16(40402), + 87: uint16(40414), + 88: uint16(40410), + 89: uint16(40395), + 90: uint16(40400), + 91: uint16(40412), + 92: uint16(40401), + 93: uint16(40415), + 94: uint16(40425), + 95: uint16(40409), + 96: uint16(40408), + 97: uint16(40406), + 98: uint16(40437), + 99: uint16(40405), + 100: uint16(40413), + 101: uint16(40630), + 102: uint16(40688), + 103: uint16(40757), + 104: uint16(40755), + 105: uint16(40754), + 106: uint16(40770), + 107: uint16(40811), + 108: uint16(40853), + 109: uint16(40866), + 110: uint16(20797), + 111: uint16(21145), + 112: uint16(22760), + 113: uint16(22759), + 114: uint16(22898), + 115: uint16(23373), + 116: uint16(24024), + 117: uint16(34863), + 118: uint16(24399), + 119: uint16(25089), + 120: uint16(25091), + 121: uint16(25092), + 122: uint16(25897), + 123: uint16(25893), + 124: uint16(26006), + 125: uint16(26347), + 126: uint16(27409), + 127: uint16(27410), + 128: uint16(27407), + 129: uint16(27594), + 130: uint16(28763), + 131: uint16(28762), + 132: uint16(29218), + 133: uint16(29570), + 134: uint16(29569), + 135: uint16(29571), + 136: uint16(30320), + 137: uint16(30676), + 138: uint16(31847), + 139: uint16(31846), + 140: uint16(32405), + 141: uint16(33388), + 142: uint16(34362), + 143: uint16(34368), + 144: uint16(34361), + 145: uint16(34364), + 146: uint16(34353), + 147: uint16(34363), + 148: uint16(34366), + 149: uint16(34864), + 150: uint16(34866), + 151: uint16(34862), + 152: uint16(34867), + 153: uint16(35190), + 154: uint16(35188), + 155: uint16(35187), + 156: uint16(35326), + }, + 87: { + 0: uint16(35724), + 1: uint16(35726), + 2: uint16(35723), + 3: uint16(35720), + 4: uint16(35909), + 5: uint16(36121), + 6: uint16(36504), + 7: uint16(36708), + 8: uint16(36707), + 9: uint16(37308), + 10: uint16(37986), + 11: uint16(37973), + 12: uint16(37981), + 13: uint16(37975), + 14: uint16(37982), + 15: uint16(38852), + 16: uint16(38853), + 17: uint16(38912), + 18: uint16(39510), + 19: uint16(39513), + 20: uint16(39710), + 21: uint16(39711), + 22: uint16(39712), + 23: uint16(40018), + 24: uint16(40024), + 25: uint16(40016), + 26: uint16(40010), + 27: uint16(40013), + 28: uint16(40011), + 29: uint16(40021), + 30: uint16(40025), + 31: uint16(40012), + 32: uint16(40014), + 33: uint16(40443), + 34: uint16(40439), + 35: uint16(40431), + 36: uint16(40419), + 37: uint16(40427), + 38: uint16(40440), + 39: uint16(40420), + 40: uint16(40438), + 41: uint16(40417), + 42: uint16(40430), + 43: uint16(40422), + 44: uint16(40434), + 45: uint16(40432), + 46: uint16(40418), + 47: uint16(40428), + 48: uint16(40436), + 49: uint16(40435), + 50: uint16(40424), + 51: uint16(40429), + 52: uint16(40642), + 53: uint16(40656), + 54: uint16(40690), + 55: uint16(40691), + 56: uint16(40710), + 57: uint16(40732), + 58: uint16(40760), + 59: uint16(40759), + 60: uint16(40758), + 61: uint16(40771), + 62: uint16(40783), + 63: uint16(40817), + 64: uint16(40816), + 65: uint16(40814), + 66: uint16(40815), + 67: uint16(22227), + 68: uint16(22221), + 69: uint16(23374), + 70: uint16(23661), + 71: uint16(25901), + 72: uint16(26349), + 73: uint16(26350), + 74: uint16(27411), + 75: uint16(28767), + 76: uint16(28769), + 77: uint16(28765), + 78: uint16(28768), + 79: uint16(29219), + 80: uint16(29915), + 81: uint16(29925), + 82: uint16(30677), + 83: uint16(31032), + 84: uint16(31159), + 85: uint16(31158), + 86: uint16(31850), + 87: uint16(32407), + 88: uint16(32649), + 89: uint16(33389), + 90: uint16(34371), + 91: uint16(34872), + 92: uint16(34871), + 93: uint16(34869), + 94: uint16(34891), + 95: uint16(35732), + 96: uint16(35733), + 97: uint16(36510), + 98: uint16(36511), + 99: uint16(36512), + 100: uint16(36509), + 101: uint16(37310), + 102: uint16(37309), + 103: uint16(37314), + 104: uint16(37995), + 105: uint16(37992), + 106: uint16(37993), + 107: uint16(38629), + 108: uint16(38726), + 109: uint16(38723), + 110: uint16(38727), + 111: uint16(38855), + 112: uint16(38885), + 113: uint16(39518), + 114: uint16(39637), + 115: uint16(39769), + 116: uint16(40035), + 117: uint16(40039), + 118: uint16(40038), + 119: uint16(40034), + 120: uint16(40030), + 121: uint16(40032), + 122: uint16(40450), + 123: uint16(40446), + 124: uint16(40455), + 125: uint16(40451), + 126: uint16(40454), + 127: uint16(40453), + 128: uint16(40448), + 129: uint16(40449), + 130: uint16(40457), + 131: uint16(40447), + 132: uint16(40445), + 133: uint16(40452), + 134: uint16(40608), + 135: uint16(40734), + 136: uint16(40774), + 137: uint16(40820), + 138: uint16(40821), + 139: uint16(40822), + 140: uint16(22228), + 141: uint16(25902), + 142: uint16(26040), + 143: uint16(27416), + 144: uint16(27417), + 145: uint16(27415), + 146: uint16(27418), + 147: uint16(28770), + 148: uint16(29222), + 149: uint16(29354), + 150: uint16(30680), + 151: uint16(30681), + 152: uint16(31033), + 153: uint16(31849), + 154: uint16(31851), + 155: uint16(31990), + 156: uint16(32410), + }, + 88: { + 0: uint16(32408), + 1: uint16(32411), + 2: uint16(32409), + 3: uint16(33248), + 4: uint16(33249), + 5: uint16(34374), + 6: uint16(34375), + 7: uint16(34376), + 8: uint16(35193), + 9: uint16(35194), + 10: uint16(35196), + 11: uint16(35195), + 12: uint16(35327), + 13: uint16(35736), + 14: uint16(35737), + 15: uint16(36517), + 16: uint16(36516), + 17: uint16(36515), + 18: uint16(37998), + 19: uint16(37997), + 20: uint16(37999), + 21: uint16(38001), + 22: uint16(38003), + 23: uint16(38729), + 24: uint16(39026), + 25: uint16(39263), + 26: uint16(40040), + 27: uint16(40046), + 28: uint16(40045), + 29: uint16(40459), + 30: uint16(40461), + 31: uint16(40464), + 32: uint16(40463), + 33: uint16(40466), + 34: uint16(40465), + 35: uint16(40609), + 36: uint16(40693), + 37: uint16(40713), + 38: uint16(40775), + 39: uint16(40824), + 40: uint16(40827), + 41: uint16(40826), + 42: uint16(40825), + 43: uint16(22302), + 44: uint16(28774), + 45: uint16(31855), + 46: uint16(34876), + 47: uint16(36274), + 48: uint16(36518), + 49: uint16(37315), + 50: uint16(38004), + 51: uint16(38008), + 52: uint16(38006), + 53: uint16(38005), + 54: uint16(39520), + 55: uint16(40052), + 56: uint16(40051), + 57: uint16(40049), + 58: uint16(40053), + 59: uint16(40468), + 60: uint16(40467), + 61: uint16(40694), + 62: uint16(40714), + 63: uint16(40868), + 64: uint16(28776), + 65: uint16(28773), + 66: uint16(31991), + 67: uint16(34410), + 68: uint16(34878), + 69: uint16(34877), + 70: uint16(34879), + 71: uint16(35742), + 72: uint16(35996), + 73: uint16(36521), + 74: uint16(36553), + 75: uint16(38731), + 76: uint16(39027), + 77: uint16(39028), + 78: uint16(39116), + 79: uint16(39265), + 80: uint16(39339), + 81: uint16(39524), + 82: uint16(39526), + 83: uint16(39527), + 84: uint16(39716), + 85: uint16(40469), + 86: uint16(40471), + 87: uint16(40776), + 88: uint16(25095), + 89: uint16(27422), + 90: uint16(29223), + 91: uint16(34380), + 92: uint16(36520), + 93: uint16(38018), + 94: uint16(38016), + 95: uint16(38017), + 96: uint16(39529), + 97: uint16(39528), + 98: uint16(39726), + 99: uint16(40473), + 100: uint16(29225), + 101: uint16(34379), + 102: uint16(35743), + 103: uint16(38019), + 104: uint16(40057), + 105: uint16(40631), + 106: uint16(30325), + 107: uint16(39531), + 108: uint16(40058), + 109: uint16(40477), + 110: uint16(28777), + 111: uint16(28778), + 112: uint16(40612), + 113: uint16(40830), + 114: uint16(40777), + 115: uint16(40856), + 116: uint16(30849), + 117: uint16(37561), + 118: uint16(35023), + 119: uint16(22715), + 120: uint16(24658), + 121: uint16(31911), + 122: uint16(23290), + 123: uint16(9556), + 124: uint16(9574), + 125: uint16(9559), + 126: uint16(9568), + 127: uint16(9580), + 128: uint16(9571), + 129: uint16(9562), + 130: uint16(9577), + 131: uint16(9565), + 132: uint16(9554), + 133: uint16(9572), + 134: uint16(9557), + 135: uint16(9566), + 136: uint16(9578), + 137: uint16(9569), + 138: uint16(9560), + 139: uint16(9575), + 140: uint16(9563), + 141: uint16(9555), + 142: uint16(9573), + 143: uint16(9558), + 144: uint16(9567), + 145: uint16(9579), + 146: uint16(9570), + 147: uint16(9561), + 148: uint16(9576), + 149: uint16(9564), + 150: uint16(9553), + 151: uint16(9552), + 152: uint16(9581), + 153: uint16(9582), + 154: uint16(9584), + 155: uint16(9583), + 156: uint16(9619), + }, +} + +var _hkscs = [5172]uint16{ + 0: uint16(17392), + 1: uint16(19506), + 2: uint16(17923), + 3: uint16(17830), + 4: uint16(17784), + 5: uint16(29287), + 6: uint16(19831), + 7: uint16(17843), + 8: uint16(31921), + 9: uint16(19682), + 10: uint16(31941), + 11: uint16(15253), + 12: uint16(18230), + 13: uint16(18244), + 14: uint16(19527), + 15: uint16(19520), + 16: uint16(17087), + 17: uint16(13847), + 18: uint16(29522), + 19: uint16(28299), + 20: uint16(28882), + 21: uint16(19543), + 22: uint16(41809), + 23: uint16(18255), + 24: uint16(17882), + 25: uint16(19589), + 26: uint16(31852), + 27: uint16(19719), + 28: uint16(19108), + 29: uint16(18081), + 30: uint16(27427), + 31: uint16(29221), + 32: uint16(23124), + 33: uint16(6755), + 34: uint16(15878), + 35: uint16(16225), + 36: uint16(26189), + 37: uint16(22267), + 39: uint16(32149), + 40: uint16(22813), + 41: uint16(35769), + 42: uint16(15860), + 43: uint16(38708), + 44: uint16(31727), + 45: uint16(23515), + 46: uint16(7518), + 47: uint16(23204), + 48: uint16(13861), + 49: uint16(40624), + 50: uint16(23249), + 51: uint16(23479), + 52: uint16(23804), + 53: uint16(26478), + 54: uint16(34195), + 55: uint16(39237), + 56: uint16(29793), + 57: uint16(29853), + 58: uint16(14453), + 59: uint16(7507), + 60: uint16(13982), + 61: uint16(24609), + 62: uint16(16108), + 63: uint16(22750), + 64: uint16(15093), + 65: uint16(31484), + 66: uint16(40855), + 67: uint16(16737), + 68: uint16(35085), + 69: uint16(12778), + 70: uint16(2698), + 71: uint16(12894), + 72: uint16(17162), + 73: uint16(33924), + 74: uint16(40854), + 75: uint16(37935), + 76: uint16(18736), + 77: uint16(34323), + 78: uint16(22678), + 79: uint16(38730), + 80: uint16(37400), + 81: uint16(31184), + 82: uint16(31282), + 83: uint16(26208), + 84: uint16(27177), + 85: uint16(34973), + 86: uint16(29772), + 87: uint16(31685), + 88: uint16(26498), + 89: uint16(31276), + 90: uint16(21071), + 91: uint16(36934), + 92: uint16(13542), + 93: uint16(29636), + 94: uint16(23993), + 95: uint16(29894), + 96: uint16(40903), + 97: uint16(22451), + 98: uint16(18735), + 99: uint16(21580), + 100: uint16(16689), + 101: uint16(13966), + 102: uint16(22552), + 103: uint16(31346), + 104: uint16(31589), + 105: uint16(35727), + 106: uint16(18094), + 107: uint16(28296), + 108: uint16(16769), + 109: uint16(23961), + 110: uint16(31662), + 111: uint16(9404), + 112: uint16(40904), + 113: uint16(9409), + 114: uint16(9417), + 115: uint16(9420), + 116: uint16(40905), + 117: uint16(34052), + 118: uint16(13755), + 119: uint16(16564), + 120: uint16(40906), + 121: uint16(17633), + 122: uint16(44543), + 123: uint16(25281), + 124: uint16(28782), + 125: uint16(40907), + 157: uint16(12736), + 158: uint16(12737), + 159: uint16(12738), + 160: uint16(12739), + 161: uint16(12740), + 162: uint16(268), + 163: uint16(12741), + 164: uint16(209), + 165: uint16(205), + 166: uint16(12742), + 167: uint16(12743), + 168: uint16(203), + 169: uint16(8168), + 170: uint16(12744), + 171: uint16(202), + 172: uint16(12745), + 173: uint16(12746), + 174: uint16(12747), + 175: uint16(12748), + 176: uint16(270), + 177: uint16(12749), + 178: uint16(12750), + 179: uint16(256), + 180: uint16(193), + 181: uint16(461), + 182: uint16(192), + 183: uint16(274), + 184: uint16(201), + 185: uint16(282), + 186: uint16(200), + 187: uint16(332), + 188: uint16(211), + 189: uint16(465), + 190: uint16(210), + 191: uint16(56320), + 192: uint16(7870), + 193: uint16(56324), + 194: uint16(7872), + 195: uint16(202), + 196: uint16(257), + 197: uint16(225), + 198: uint16(462), + 199: uint16(224), + 200: uint16(593), + 201: uint16(275), + 202: uint16(233), + 203: uint16(283), + 204: uint16(232), + 205: uint16(299), + 206: uint16(237), + 207: uint16(464), + 208: uint16(236), + 209: uint16(333), + 210: uint16(243), + 211: uint16(466), + 212: uint16(242), + 213: uint16(363), + 214: uint16(250), + 215: uint16(468), + 216: uint16(249), + 217: uint16(470), + 218: uint16(472), + 219: uint16(474), + 220: uint16(476), + 221: uint16(252), + 222: uint16(56328), + 223: uint16(7871), + 224: uint16(56332), + 225: uint16(7873), + 226: uint16(234), + 227: uint16(609), + 228: uint16(9178), + 229: uint16(9179), + 314: uint16(41897), + 315: uint16(4421), + 317: uint16(25866), + 320: uint16(20029), + 321: uint16(28381), + 322: uint16(40270), + 323: uint16(37343), + 326: uint16(30517), + 327: uint16(25745), + 328: uint16(20250), + 329: uint16(20264), + 330: uint16(20392), + 331: uint16(20822), + 332: uint16(20852), + 333: uint16(20892), + 334: uint16(20964), + 335: uint16(21153), + 336: uint16(21160), + 337: uint16(21307), + 338: uint16(21326), + 339: uint16(21457), + 340: uint16(21464), + 341: uint16(22242), + 342: uint16(22768), + 343: uint16(22788), + 344: uint16(22791), + 345: uint16(22834), + 346: uint16(22836), + 347: uint16(23398), + 348: uint16(23454), + 349: uint16(23455), + 350: uint16(23706), + 351: uint16(24198), + 352: uint16(24635), + 353: uint16(25993), + 354: uint16(26622), + 355: uint16(26628), + 356: uint16(26725), + 357: uint16(27982), + 358: uint16(28860), + 359: uint16(30005), + 360: uint16(32420), + 361: uint16(32428), + 362: uint16(32442), + 363: uint16(32455), + 364: uint16(32463), + 365: uint16(32479), + 366: uint16(32518), + 367: uint16(32567), + 368: uint16(33402), + 369: uint16(33487), + 370: uint16(33647), + 371: uint16(35270), + 372: uint16(35774), + 373: uint16(35810), + 374: uint16(36710), + 375: uint16(36711), + 376: uint16(36718), + 377: uint16(29713), + 378: uint16(31996), + 379: uint16(32205), + 380: uint16(26950), + 381: uint16(31433), + 382: uint16(21031), + 387: uint16(37260), + 388: uint16(30904), + 389: uint16(37214), + 390: uint16(32956), + 392: uint16(36107), + 393: uint16(33014), + 394: uint16(2535), + 397: uint16(32927), + 398: uint16(40647), + 399: uint16(19661), + 400: uint16(40393), + 401: uint16(40460), + 402: uint16(19518), + 403: uint16(40438), + 404: uint16(28686), + 405: uint16(40458), + 406: uint16(41267), + 407: uint16(13761), + 409: uint16(28314), + 410: uint16(33342), + 411: uint16(29977), + 413: uint16(18705), + 414: uint16(39532), + 415: uint16(39567), + 416: uint16(40857), + 417: uint16(31111), + 418: uint16(33900), + 419: uint16(7626), + 420: uint16(1488), + 421: uint16(10982), + 422: uint16(20004), + 423: uint16(20097), + 424: uint16(20096), + 425: uint16(20103), + 426: uint16(20159), + 427: uint16(20203), + 428: uint16(20279), + 429: uint16(13388), + 430: uint16(20413), + 431: uint16(15944), + 432: uint16(20483), + 433: uint16(20616), + 434: uint16(13437), + 435: uint16(13459), + 436: uint16(13477), + 437: uint16(20870), + 438: uint16(22789), + 439: uint16(20955), + 440: uint16(20988), + 441: uint16(20997), + 442: uint16(20105), + 443: uint16(21113), + 444: uint16(21136), + 445: uint16(21287), + 446: uint16(13767), + 447: uint16(21417), + 448: uint16(13649), + 449: uint16(21424), + 450: uint16(13651), + 451: uint16(21442), + 452: uint16(21539), + 453: uint16(13677), + 454: uint16(13682), + 455: uint16(13953), + 456: uint16(21651), + 457: uint16(21667), + 458: uint16(21684), + 459: uint16(21689), + 460: uint16(21712), + 461: uint16(21743), + 462: uint16(21784), + 463: uint16(21795), + 464: uint16(21800), + 465: uint16(13720), + 466: uint16(21823), + 467: uint16(13733), + 468: uint16(13759), + 469: uint16(21975), + 470: uint16(13765), + 471: uint16(32132), + 472: uint16(21797), + 474: uint16(3138), + 475: uint16(3349), + 476: uint16(20779), + 477: uint16(21904), + 478: uint16(11462), + 479: uint16(14828), + 480: uint16(833), + 481: uint16(36422), + 482: uint16(19896), + 483: uint16(38117), + 484: uint16(16467), + 485: uint16(32958), + 486: uint16(30586), + 487: uint16(11320), + 488: uint16(14900), + 489: uint16(18389), + 490: uint16(33117), + 491: uint16(27122), + 492: uint16(19946), + 493: uint16(25821), + 494: uint16(3452), + 495: uint16(4020), + 496: uint16(3285), + 497: uint16(4340), + 498: uint16(25741), + 499: uint16(36478), + 500: uint16(3734), + 501: uint16(3083), + 502: uint16(3940), + 503: uint16(11433), + 504: uint16(33366), + 505: uint16(17619), + 507: uint16(3398), + 508: uint16(39501), + 509: uint16(33001), + 510: uint16(18420), + 511: uint16(20135), + 512: uint16(11458), + 513: uint16(39602), + 514: uint16(14951), + 515: uint16(38388), + 516: uint16(16365), + 517: uint16(13574), + 518: uint16(21191), + 519: uint16(38868), + 520: uint16(30920), + 521: uint16(11588), + 522: uint16(40302), + 523: uint16(38933), + 525: uint16(17369), + 526: uint16(24741), + 527: uint16(25780), + 528: uint16(21731), + 529: uint16(11596), + 530: uint16(11210), + 531: uint16(4215), + 532: uint16(14843), + 533: uint16(4207), + 534: uint16(26330), + 535: uint16(26390), + 536: uint16(31136), + 537: uint16(25834), + 538: uint16(20562), + 539: uint16(3139), + 540: uint16(36456), + 541: uint16(8609), + 542: uint16(35660), + 543: uint16(1841), + 545: uint16(18443), + 546: uint16(425), + 547: uint16(16378), + 548: uint16(22643), + 549: uint16(11661), + 551: uint16(17864), + 552: uint16(1276), + 553: uint16(24727), + 554: uint16(3916), + 555: uint16(3478), + 556: uint16(21881), + 557: uint16(16571), + 558: uint16(17338), + 560: uint16(19124), + 561: uint16(10854), + 562: uint16(4253), + 563: uint16(33194), + 564: uint16(39157), + 565: uint16(3484), + 566: uint16(25465), + 567: uint16(14846), + 568: uint16(10101), + 569: uint16(36288), + 570: uint16(22177), + 571: uint16(25724), + 572: uint16(15939), + 574: uint16(42497), + 575: uint16(3593), + 576: uint16(10959), + 577: uint16(11465), + 579: uint16(4296), + 580: uint16(14786), + 581: uint16(14738), + 582: uint16(14854), + 583: uint16(33435), + 584: uint16(13688), + 585: uint16(24137), + 586: uint16(8391), + 587: uint16(22098), + 588: uint16(3889), + 589: uint16(11442), + 590: uint16(38688), + 591: uint16(13500), + 592: uint16(27709), + 593: uint16(20027), + 596: uint16(30068), + 597: uint16(11915), + 598: uint16(8712), + 599: uint16(42587), + 600: uint16(36045), + 601: uint16(3706), + 602: uint16(3124), + 603: uint16(26652), + 604: uint16(32659), + 605: uint16(4303), + 606: uint16(10243), + 607: uint16(10553), + 608: uint16(13819), + 609: uint16(20963), + 610: uint16(3724), + 611: uint16(3981), + 612: uint16(3754), + 613: uint16(16275), + 614: uint16(3888), + 615: uint16(3399), + 616: uint16(4431), + 617: uint16(3660), + 619: uint16(3755), + 620: uint16(2985), + 621: uint16(3400), + 622: uint16(4288), + 623: uint16(4413), + 624: uint16(16377), + 625: uint16(9878), + 626: uint16(25650), + 627: uint16(4013), + 628: uint16(13300), + 629: uint16(30265), + 630: uint16(11214), + 631: uint16(3454), + 632: uint16(3455), + 633: uint16(11345), + 634: uint16(11349), + 635: uint16(14872), + 636: uint16(3736), + 637: uint16(4295), + 638: uint16(3886), + 639: uint16(42546), + 640: uint16(27472), + 641: uint16(36050), + 642: uint16(36249), + 643: uint16(36042), + 644: uint16(38314), + 645: uint16(21708), + 646: uint16(33476), + 647: uint16(21945), + 649: uint16(40643), + 650: uint16(39974), + 651: uint16(39606), + 652: uint16(30558), + 653: uint16(11758), + 654: uint16(28992), + 655: uint16(33133), + 656: uint16(33004), + 657: uint16(23580), + 658: uint16(25970), + 659: uint16(33076), + 660: uint16(14231), + 661: uint16(21343), + 662: uint16(32957), + 663: uint16(37302), + 664: uint16(3834), + 665: uint16(3599), + 666: uint16(3703), + 667: uint16(3835), + 668: uint16(13789), + 669: uint16(19947), + 670: uint16(13833), + 671: uint16(3286), + 672: uint16(22191), + 673: uint16(10165), + 674: uint16(4297), + 675: uint16(3600), + 676: uint16(3704), + 677: uint16(4216), + 678: uint16(4424), + 679: uint16(33287), + 680: uint16(5205), + 681: uint16(3705), + 682: uint16(20048), + 683: uint16(11684), + 684: uint16(23124), + 685: uint16(4125), + 686: uint16(4126), + 687: uint16(4341), + 688: uint16(4342), + 689: uint16(22428), + 690: uint16(3601), + 691: uint16(30356), + 692: uint16(33485), + 693: uint16(4021), + 694: uint16(3707), + 695: uint16(20862), + 696: uint16(14083), + 697: uint16(4022), + 698: uint16(4480), + 699: uint16(21208), + 700: uint16(41661), + 701: uint16(18906), + 702: uint16(6202), + 703: uint16(16759), + 704: uint16(33404), + 705: uint16(22681), + 706: uint16(21096), + 707: uint16(13850), + 708: uint16(22333), + 709: uint16(31666), + 710: uint16(23400), + 711: uint16(18432), + 712: uint16(19244), + 713: uint16(40743), + 714: uint16(18919), + 715: uint16(39967), + 716: uint16(39821), + 717: uint16(23412), + 718: uint16(12605), + 719: uint16(22011), + 720: uint16(13810), + 721: uint16(22153), + 722: uint16(20008), + 723: uint16(22786), + 724: uint16(7105), + 725: uint16(63608), + 726: uint16(38737), + 727: uint16(134), + 728: uint16(20059), + 729: uint16(20155), + 730: uint16(13630), + 731: uint16(23587), + 732: uint16(24401), + 733: uint16(24516), + 734: uint16(14586), + 735: uint16(25164), + 736: uint16(25909), + 737: uint16(27514), + 738: uint16(27701), + 739: uint16(27706), + 740: uint16(28780), + 741: uint16(29227), + 742: uint16(20012), + 743: uint16(29357), + 744: uint16(18665), + 745: uint16(32594), + 746: uint16(31035), + 747: uint16(31993), + 748: uint16(32595), + 749: uint16(25194), + 750: uint16(13505), + 752: uint16(25419), + 753: uint16(32770), + 754: uint16(32896), + 755: uint16(26130), + 756: uint16(26961), + 757: uint16(21341), + 758: uint16(34916), + 759: uint16(35265), + 760: uint16(30898), + 761: uint16(35744), + 762: uint16(36125), + 763: uint16(38021), + 764: uint16(38264), + 765: uint16(38271), + 766: uint16(38376), + 767: uint16(36367), + 768: uint16(38886), + 769: uint16(39029), + 770: uint16(39118), + 771: uint16(39134), + 772: uint16(39267), + 773: uint16(38928), + 774: uint16(40060), + 775: uint16(40479), + 776: uint16(40644), + 777: uint16(27503), + 778: uint16(63751), + 779: uint16(20023), + 780: uint16(135), + 781: uint16(38429), + 782: uint16(25143), + 783: uint16(38050), + 785: uint16(20539), + 786: uint16(28158), + 787: uint16(40051), + 788: uint16(40870), + 789: uint16(15817), + 790: uint16(34959), + 791: uint16(16718), + 792: uint16(28791), + 793: uint16(23797), + 794: uint16(19232), + 795: uint16(20941), + 796: uint16(13657), + 797: uint16(23856), + 798: uint16(24866), + 799: uint16(35378), + 800: uint16(36775), + 801: uint16(37366), + 802: uint16(29073), + 803: uint16(26393), + 804: uint16(29626), + 805: uint16(12929), + 806: uint16(41223), + 807: uint16(15499), + 808: uint16(6528), + 809: uint16(19216), + 810: uint16(30948), + 811: uint16(29698), + 812: uint16(20910), + 813: uint16(34575), + 814: uint16(16393), + 815: uint16(27235), + 816: uint16(41658), + 817: uint16(16931), + 818: uint16(34319), + 819: uint16(2671), + 820: uint16(31274), + 821: uint16(39239), + 822: uint16(35562), + 823: uint16(38741), + 824: uint16(28749), + 825: uint16(21284), + 826: uint16(8318), + 827: uint16(37876), + 828: uint16(30425), + 829: uint16(35299), + 830: uint16(40871), + 831: uint16(30685), + 832: uint16(20131), + 833: uint16(20464), + 834: uint16(20668), + 835: uint16(20015), + 836: uint16(20247), + 837: uint16(40872), + 838: uint16(21556), + 839: uint16(32139), + 840: uint16(22674), + 841: uint16(22736), + 842: uint16(7606), + 843: uint16(24210), + 844: uint16(24217), + 845: uint16(24514), + 846: uint16(10002), + 847: uint16(25995), + 848: uint16(13305), + 849: uint16(26905), + 850: uint16(27203), + 851: uint16(15459), + 852: uint16(27903), + 854: uint16(29184), + 855: uint16(17669), + 856: uint16(29580), + 857: uint16(16091), + 858: uint16(18963), + 859: uint16(23317), + 860: uint16(29881), + 861: uint16(35715), + 862: uint16(23716), + 863: uint16(22165), + 864: uint16(31379), + 865: uint16(31724), + 866: uint16(31939), + 867: uint16(32364), + 868: uint16(33528), + 869: uint16(34199), + 870: uint16(40873), + 871: uint16(34960), + 872: uint16(40874), + 873: uint16(36537), + 874: uint16(40875), + 875: uint16(36815), + 876: uint16(34143), + 877: uint16(39392), + 878: uint16(37409), + 879: uint16(40876), + 880: uint16(36281), + 881: uint16(5183), + 882: uint16(16497), + 883: uint16(17058), + 884: uint16(23066), + 888: uint16(39016), + 889: uint16(26475), + 890: uint16(17014), + 891: uint16(22333), + 893: uint16(34262), + 894: uint16(18811), + 895: uint16(33471), + 896: uint16(28941), + 897: uint16(19585), + 898: uint16(28020), + 899: uint16(23931), + 900: uint16(27413), + 901: uint16(28606), + 902: uint16(40877), + 903: uint16(40878), + 904: uint16(23446), + 905: uint16(40879), + 906: uint16(26343), + 907: uint16(32347), + 908: uint16(28247), + 909: uint16(31178), + 910: uint16(15752), + 911: uint16(17603), + 912: uint16(12886), + 913: uint16(10134), + 914: uint16(17306), + 915: uint16(17718), + 917: uint16(23765), + 918: uint16(15130), + 919: uint16(35577), + 920: uint16(23672), + 921: uint16(15634), + 922: uint16(13649), + 923: uint16(23928), + 924: uint16(40882), + 925: uint16(29015), + 926: uint16(17752), + 927: uint16(16620), + 928: uint16(7715), + 929: uint16(19575), + 930: uint16(14712), + 931: uint16(13386), + 932: uint16(420), + 933: uint16(27713), + 934: uint16(35532), + 935: uint16(20404), + 936: uint16(569), + 937: uint16(22975), + 938: uint16(33132), + 939: uint16(38998), + 940: uint16(39162), + 941: uint16(24379), + 942: uint16(2975), + 944: uint16(8641), + 945: uint16(35181), + 946: uint16(16642), + 947: uint16(18107), + 948: uint16(36985), + 949: uint16(16135), + 950: uint16(40883), + 951: uint16(41397), + 952: uint16(16632), + 953: uint16(14294), + 954: uint16(18167), + 955: uint16(27718), + 956: uint16(16764), + 957: uint16(34482), + 958: uint16(29695), + 959: uint16(17773), + 960: uint16(14548), + 961: uint16(21658), + 962: uint16(17761), + 963: uint16(17691), + 964: uint16(19849), + 965: uint16(19579), + 966: uint16(19830), + 967: uint16(17898), + 968: uint16(16328), + 969: uint16(19215), + 970: uint16(13921), + 971: uint16(17630), + 972: uint16(17597), + 973: uint16(16877), + 974: uint16(23870), + 975: uint16(23880), + 976: uint16(23894), + 977: uint16(15868), + 978: uint16(14351), + 979: uint16(23972), + 980: uint16(23993), + 981: uint16(14368), + 982: uint16(14392), + 983: uint16(24130), + 984: uint16(24253), + 985: uint16(24357), + 986: uint16(24451), + 987: uint16(14600), + 988: uint16(14612), + 989: uint16(14655), + 990: uint16(14669), + 991: uint16(24791), + 992: uint16(24893), + 993: uint16(23781), + 994: uint16(14729), + 995: uint16(25015), + 996: uint16(25017), + 997: uint16(25039), + 998: uint16(14776), + 999: uint16(25132), + 1000: uint16(25232), + 1001: uint16(25317), + 1002: uint16(25368), + 1003: uint16(14840), + 1004: uint16(22193), + 1005: uint16(14851), + 1006: uint16(25570), + 1007: uint16(25595), + 1008: uint16(25607), + 1009: uint16(25690), + 1010: uint16(14923), + 1011: uint16(25792), + 1012: uint16(23829), + 1013: uint16(22049), + 1014: uint16(40863), + 1015: uint16(14999), + 1016: uint16(25990), + 1017: uint16(15037), + 1018: uint16(26111), + 1019: uint16(26195), + 1020: uint16(15090), + 1021: uint16(26258), + 1022: uint16(15138), + 1023: uint16(26390), + 1024: uint16(15170), + 1025: uint16(26532), + 1026: uint16(26624), + 1027: uint16(15192), + 1028: uint16(26698), + 1029: uint16(26756), + 1030: uint16(15218), + 1031: uint16(15217), + 1032: uint16(15227), + 1033: uint16(26889), + 1034: uint16(26947), + 1035: uint16(29276), + 1036: uint16(26980), + 1037: uint16(27039), + 1038: uint16(27013), + 1039: uint16(15292), + 1040: uint16(27094), + 1041: uint16(15325), + 1042: uint16(27237), + 1043: uint16(27252), + 1044: uint16(27249), + 1045: uint16(27266), + 1046: uint16(15340), + 1047: uint16(27289), + 1048: uint16(15346), + 1049: uint16(27307), + 1050: uint16(27317), + 1051: uint16(27348), + 1052: uint16(27382), + 1053: uint16(27521), + 1054: uint16(27585), + 1055: uint16(27626), + 1056: uint16(27765), + 1057: uint16(27818), + 1058: uint16(15563), + 1059: uint16(27906), + 1060: uint16(27910), + 1061: uint16(27942), + 1062: uint16(28033), + 1063: uint16(15599), + 1064: uint16(28068), + 1065: uint16(28081), + 1066: uint16(28181), + 1067: uint16(28184), + 1068: uint16(28201), + 1069: uint16(28294), + 1070: uint16(35264), + 1071: uint16(28347), + 1072: uint16(28386), + 1073: uint16(28378), + 1074: uint16(40831), + 1075: uint16(28392), + 1076: uint16(28393), + 1077: uint16(28452), + 1078: uint16(28468), + 1079: uint16(15686), + 1080: uint16(16193), + 1081: uint16(28545), + 1082: uint16(28606), + 1083: uint16(15722), + 1084: uint16(15733), + 1085: uint16(29111), + 1086: uint16(23705), + 1087: uint16(15754), + 1088: uint16(28716), + 1089: uint16(15761), + 1090: uint16(28752), + 1091: uint16(28756), + 1092: uint16(28783), + 1093: uint16(28799), + 1094: uint16(28809), + 1095: uint16(805), + 1096: uint16(17345), + 1097: uint16(13809), + 1098: uint16(3800), + 1099: uint16(16087), + 1100: uint16(22462), + 1101: uint16(28371), + 1102: uint16(28990), + 1103: uint16(22496), + 1104: uint16(13902), + 1105: uint16(27042), + 1106: uint16(35817), + 1107: uint16(23412), + 1108: uint16(31305), + 1109: uint16(22753), + 1110: uint16(38105), + 1111: uint16(31333), + 1112: uint16(31357), + 1113: uint16(22956), + 1114: uint16(31419), + 1115: uint16(31408), + 1116: uint16(31426), + 1117: uint16(31427), + 1118: uint16(29137), + 1119: uint16(25741), + 1120: uint16(16842), + 1121: uint16(31450), + 1122: uint16(31453), + 1123: uint16(31466), + 1124: uint16(16879), + 1125: uint16(21682), + 1126: uint16(23553), + 1127: uint16(31499), + 1128: uint16(31573), + 1129: uint16(31529), + 1130: uint16(21262), + 1131: uint16(23806), + 1132: uint16(31650), + 1133: uint16(31599), + 1134: uint16(33692), + 1135: uint16(23476), + 1136: uint16(27775), + 1137: uint16(31696), + 1138: uint16(33825), + 1139: uint16(31634), + 1141: uint16(23840), + 1142: uint16(15789), + 1143: uint16(23653), + 1144: uint16(33938), + 1145: uint16(31738), + 1147: uint16(31797), + 1148: uint16(23745), + 1149: uint16(31812), + 1150: uint16(31875), + 1151: uint16(18562), + 1152: uint16(31910), + 1153: uint16(26237), + 1154: uint16(17784), + 1155: uint16(31945), + 1156: uint16(31943), + 1157: uint16(31974), + 1158: uint16(31860), + 1159: uint16(31987), + 1160: uint16(31989), + 1162: uint16(32359), + 1163: uint16(17693), + 1164: uint16(28228), + 1165: uint16(32093), + 1166: uint16(28374), + 1167: uint16(29837), + 1168: uint16(32137), + 1169: uint16(32171), + 1170: uint16(28981), + 1171: uint16(32179), + 1173: uint16(16471), + 1174: uint16(24617), + 1175: uint16(32228), + 1176: uint16(15635), + 1177: uint16(32245), + 1178: uint16(6137), + 1179: uint16(32229), + 1180: uint16(33645), + 1182: uint16(24865), + 1183: uint16(24922), + 1184: uint16(32366), + 1185: uint16(32402), + 1186: uint16(17195), + 1187: uint16(37996), + 1188: uint16(32295), + 1189: uint16(32576), + 1190: uint16(32577), + 1191: uint16(32583), + 1192: uint16(31030), + 1193: uint16(25296), + 1194: uint16(39393), + 1195: uint16(32663), + 1196: uint16(25425), + 1197: uint16(32675), + 1198: uint16(5729), + 1199: uint16(104), + 1200: uint16(17756), + 1201: uint16(14182), + 1202: uint16(17667), + 1203: uint16(33594), + 1204: uint16(32762), + 1205: uint16(25737), + 1207: uint16(32776), + 1208: uint16(32797), + 1210: uint16(32815), + 1211: uint16(41095), + 1212: uint16(27843), + 1213: uint16(32827), + 1214: uint16(32828), + 1215: uint16(32865), + 1216: uint16(10004), + 1217: uint16(18825), + 1218: uint16(26150), + 1219: uint16(15843), + 1220: uint16(26344), + 1221: uint16(26405), + 1222: uint16(32935), + 1223: uint16(35400), + 1224: uint16(33031), + 1225: uint16(33050), + 1226: uint16(22704), + 1227: uint16(9974), + 1228: uint16(27775), + 1229: uint16(25752), + 1230: uint16(20408), + 1231: uint16(25831), + 1232: uint16(5258), + 1233: uint16(33304), + 1234: uint16(6238), + 1235: uint16(27219), + 1236: uint16(19045), + 1237: uint16(19093), + 1238: uint16(17530), + 1239: uint16(33321), + 1240: uint16(2829), + 1241: uint16(27218), + 1242: uint16(15742), + 1243: uint16(20473), + 1244: uint16(5373), + 1245: uint16(34018), + 1246: uint16(33634), + 1247: uint16(27402), + 1248: uint16(18855), + 1249: uint16(13616), + 1250: uint16(6003), + 1251: uint16(15864), + 1252: uint16(33450), + 1253: uint16(26907), + 1254: uint16(63892), + 1255: uint16(16859), + 1256: uint16(34123), + 1257: uint16(33488), + 1258: uint16(33562), + 1259: uint16(3606), + 1260: uint16(6068), + 1261: uint16(14017), + 1262: uint16(12669), + 1263: uint16(13658), + 1264: uint16(33403), + 1265: uint16(33506), + 1266: uint16(33560), + 1267: uint16(16011), + 1268: uint16(28067), + 1269: uint16(27397), + 1270: uint16(27543), + 1271: uint16(13774), + 1272: uint16(15807), + 1273: uint16(33565), + 1274: uint16(21996), + 1275: uint16(33669), + 1276: uint16(17675), + 1277: uint16(28069), + 1278: uint16(33708), + 1280: uint16(33747), + 1281: uint16(13438), + 1282: uint16(28372), + 1283: uint16(27223), + 1284: uint16(34138), + 1285: uint16(13462), + 1286: uint16(28226), + 1287: uint16(12015), + 1288: uint16(33880), + 1289: uint16(23524), + 1290: uint16(33905), + 1291: uint16(15827), + 1292: uint16(17636), + 1293: uint16(27303), + 1294: uint16(33866), + 1295: uint16(15541), + 1296: uint16(31064), + 1298: uint16(27542), + 1299: uint16(28279), + 1300: uint16(28227), + 1301: uint16(34014), + 1303: uint16(33681), + 1304: uint16(17568), + 1305: uint16(33939), + 1306: uint16(34020), + 1307: uint16(23697), + 1308: uint16(16960), + 1309: uint16(23744), + 1310: uint16(17731), + 1311: uint16(34100), + 1312: uint16(23282), + 1313: uint16(28313), + 1314: uint16(17703), + 1315: uint16(34163), + 1316: uint16(17686), + 1317: uint16(26559), + 1318: uint16(34326), + 1319: uint16(34341), + 1320: uint16(34363), + 1321: uint16(34241), + 1322: uint16(28808), + 1323: uint16(34306), + 1324: uint16(5506), + 1325: uint16(28877), + 1326: uint16(63922), + 1327: uint16(17770), + 1328: uint16(34344), + 1329: uint16(13896), + 1330: uint16(6306), + 1331: uint16(21495), + 1332: uint16(29594), + 1333: uint16(34430), + 1334: uint16(34673), + 1335: uint16(41208), + 1336: uint16(34798), + 1337: uint16(11303), + 1338: uint16(34737), + 1339: uint16(34778), + 1340: uint16(34831), + 1341: uint16(22113), + 1342: uint16(34412), + 1343: uint16(26710), + 1344: uint16(17935), + 1345: uint16(34885), + 1346: uint16(34886), + 1347: uint16(30176), + 1348: uint16(15801), + 1349: uint16(30180), + 1350: uint16(34910), + 1351: uint16(34972), + 1352: uint16(18011), + 1353: uint16(34996), + 1354: uint16(34997), + 1355: uint16(25537), + 1356: uint16(35013), + 1357: uint16(30583), + 1358: uint16(30479), + 1359: uint16(35207), + 1360: uint16(35210), + 1363: uint16(35239), + 1364: uint16(35260), + 1365: uint16(35365), + 1366: uint16(35303), + 1367: uint16(31012), + 1368: uint16(31421), + 1369: uint16(35484), + 1370: uint16(30611), + 1371: uint16(37374), + 1372: uint16(35472), + 1373: uint16(31321), + 1374: uint16(31465), + 1375: uint16(31546), + 1376: uint16(16271), + 1377: uint16(18195), + 1378: uint16(31544), + 1379: uint16(29052), + 1380: uint16(35596), + 1381: uint16(35615), + 1382: uint16(21552), + 1383: uint16(21861), + 1384: uint16(35647), + 1385: uint16(35660), + 1386: uint16(35661), + 1387: uint16(35497), + 1388: uint16(19066), + 1389: uint16(35728), + 1390: uint16(35739), + 1391: uint16(35503), + 1392: uint16(5855), + 1393: uint16(17941), + 1394: uint16(34895), + 1395: uint16(35995), + 1396: uint16(32084), + 1397: uint16(32143), + 1398: uint16(63956), + 1399: uint16(14117), + 1400: uint16(32083), + 1401: uint16(36054), + 1402: uint16(32152), + 1403: uint16(32189), + 1404: uint16(36114), + 1405: uint16(36099), + 1406: uint16(6416), + 1407: uint16(36059), + 1408: uint16(28764), + 1409: uint16(36113), + 1410: uint16(19657), + 1411: uint16(16080), + 1413: uint16(36265), + 1414: uint16(32770), + 1415: uint16(4116), + 1416: uint16(18826), + 1417: uint16(15228), + 1418: uint16(33212), + 1419: uint16(28940), + 1420: uint16(31463), + 1421: uint16(36525), + 1422: uint16(36534), + 1423: uint16(36547), + 1424: uint16(37588), + 1425: uint16(36633), + 1426: uint16(36653), + 1427: uint16(33637), + 1428: uint16(33810), + 1429: uint16(36773), + 1430: uint16(37635), + 1431: uint16(41631), + 1432: uint16(2640), + 1433: uint16(36787), + 1434: uint16(18730), + 1435: uint16(35294), + 1436: uint16(34109), + 1437: uint16(15803), + 1438: uint16(24312), + 1439: uint16(12898), + 1440: uint16(36857), + 1441: uint16(40980), + 1442: uint16(34492), + 1443: uint16(34049), + 1444: uint16(8997), + 1445: uint16(14720), + 1446: uint16(28375), + 1447: uint16(36919), + 1448: uint16(34108), + 1449: uint16(31422), + 1450: uint16(36961), + 1451: uint16(34156), + 1452: uint16(34315), + 1453: uint16(37032), + 1454: uint16(34579), + 1455: uint16(37060), + 1456: uint16(34534), + 1457: uint16(37038), + 1459: uint16(37223), + 1460: uint16(15088), + 1461: uint16(37289), + 1462: uint16(37316), + 1463: uint16(31916), + 1464: uint16(35123), + 1465: uint16(7817), + 1466: uint16(37390), + 1467: uint16(27807), + 1468: uint16(37441), + 1469: uint16(37474), + 1470: uint16(21945), + 1472: uint16(35526), + 1473: uint16(15515), + 1474: uint16(35596), + 1475: uint16(21979), + 1476: uint16(3377), + 1477: uint16(37676), + 1478: uint16(37739), + 1479: uint16(35553), + 1480: uint16(35819), + 1481: uint16(28815), + 1482: uint16(23235), + 1483: uint16(35554), + 1484: uint16(35557), + 1485: uint16(18789), + 1486: uint16(37444), + 1487: uint16(35820), + 1488: uint16(35897), + 1489: uint16(35839), + 1490: uint16(37747), + 1491: uint16(37979), + 1492: uint16(36540), + 1493: uint16(38277), + 1494: uint16(38310), + 1495: uint16(37926), + 1496: uint16(38304), + 1497: uint16(28662), + 1498: uint16(17081), + 1499: uint16(9850), + 1500: uint16(34520), + 1501: uint16(4732), + 1502: uint16(15918), + 1503: uint16(18911), + 1504: uint16(27676), + 1505: uint16(38523), + 1506: uint16(38550), + 1507: uint16(16748), + 1508: uint16(38563), + 1509: uint16(28373), + 1510: uint16(25050), + 1511: uint16(38582), + 1512: uint16(30965), + 1513: uint16(35552), + 1514: uint16(38589), + 1515: uint16(21452), + 1516: uint16(18849), + 1517: uint16(27832), + 1518: uint16(628), + 1519: uint16(25616), + 1520: uint16(37039), + 1521: uint16(37093), + 1522: uint16(19153), + 1523: uint16(6421), + 1524: uint16(13066), + 1525: uint16(38705), + 1526: uint16(34370), + 1527: uint16(38710), + 1528: uint16(18959), + 1529: uint16(17725), + 1530: uint16(17797), + 1531: uint16(19177), + 1532: uint16(28789), + 1533: uint16(23361), + 1534: uint16(38683), + 1536: uint16(37333), + 1537: uint16(38743), + 1538: uint16(23370), + 1539: uint16(37355), + 1540: uint16(38751), + 1541: uint16(37925), + 1542: uint16(20688), + 1543: uint16(12471), + 1544: uint16(12476), + 1545: uint16(38793), + 1546: uint16(38815), + 1547: uint16(38833), + 1548: uint16(38846), + 1549: uint16(38848), + 1550: uint16(38866), + 1551: uint16(38880), + 1552: uint16(21612), + 1553: uint16(38894), + 1554: uint16(29724), + 1555: uint16(37939), + 1557: uint16(38901), + 1558: uint16(37917), + 1559: uint16(31098), + 1560: uint16(19153), + 1561: uint16(38964), + 1562: uint16(38963), + 1563: uint16(38987), + 1564: uint16(39014), + 1565: uint16(15118), + 1566: uint16(29045), + 1567: uint16(15697), + 1568: uint16(1584), + 1569: uint16(16732), + 1570: uint16(22278), + 1571: uint16(39114), + 1572: uint16(39095), + 1573: uint16(39112), + 1574: uint16(39111), + 1575: uint16(19199), + 1576: uint16(27943), + 1577: uint16(5843), + 1578: uint16(21936), + 1579: uint16(39137), + 1580: uint16(39142), + 1581: uint16(39148), + 1582: uint16(37752), + 1583: uint16(39225), + 1584: uint16(18985), + 1585: uint16(19314), + 1586: uint16(38999), + 1587: uint16(39173), + 1588: uint16(39413), + 1589: uint16(39436), + 1590: uint16(39483), + 1591: uint16(39440), + 1592: uint16(39512), + 1593: uint16(22309), + 1594: uint16(14020), + 1595: uint16(37041), + 1596: uint16(39893), + 1597: uint16(39648), + 1598: uint16(39650), + 1599: uint16(39685), + 1600: uint16(39668), + 1601: uint16(19470), + 1602: uint16(39700), + 1603: uint16(39725), + 1604: uint16(34304), + 1605: uint16(20532), + 1606: uint16(39732), + 1607: uint16(27048), + 1608: uint16(14531), + 1609: uint16(12413), + 1610: uint16(39760), + 1611: uint16(39744), + 1612: uint16(40254), + 1613: uint16(23109), + 1614: uint16(6243), + 1615: uint16(39822), + 1616: uint16(16971), + 1617: uint16(39938), + 1618: uint16(39935), + 1619: uint16(39948), + 1620: uint16(40552), + 1621: uint16(40404), + 1622: uint16(40887), + 1623: uint16(41362), + 1624: uint16(41387), + 1625: uint16(41185), + 1626: uint16(41251), + 1627: uint16(41439), + 1628: uint16(40318), + 1629: uint16(40323), + 1630: uint16(41268), + 1631: uint16(40462), + 1632: uint16(26760), + 1633: uint16(40388), + 1634: uint16(8539), + 1635: uint16(41363), + 1636: uint16(41504), + 1637: uint16(6459), + 1638: uint16(41523), + 1639: uint16(40249), + 1640: uint16(41145), + 1641: uint16(41652), + 1642: uint16(40592), + 1643: uint16(40597), + 1644: uint16(40606), + 1645: uint16(40610), + 1646: uint16(19764), + 1647: uint16(40618), + 1648: uint16(40623), + 1649: uint16(17252), + 1650: uint16(40641), + 1651: uint16(15200), + 1652: uint16(14821), + 1653: uint16(15645), + 1654: uint16(20274), + 1655: uint16(14270), + 1656: uint16(35883), + 1657: uint16(40706), + 1658: uint16(40712), + 1659: uint16(19350), + 1660: uint16(37924), + 1661: uint16(28066), + 1662: uint16(40727), + 1664: uint16(40761), + 1665: uint16(22175), + 1666: uint16(22154), + 1667: uint16(40773), + 1668: uint16(39352), + 1669: uint16(37003), + 1670: uint16(38898), + 1671: uint16(33919), + 1672: uint16(40802), + 1673: uint16(40809), + 1674: uint16(31452), + 1675: uint16(40846), + 1676: uint16(29206), + 1677: uint16(19390), + 1678: uint16(18805), + 1679: uint16(18875), + 1680: uint16(29047), + 1681: uint16(18936), + 1682: uint16(17224), + 1683: uint16(19025), + 1684: uint16(29598), + 1685: uint16(35802), + 1686: uint16(6394), + 1687: uint16(31135), + 1688: uint16(35198), + 1689: uint16(36406), + 1690: uint16(37737), + 1691: uint16(37875), + 1692: uint16(35396), + 1693: uint16(37612), + 1694: uint16(37761), + 1695: uint16(37835), + 1696: uint16(35180), + 1697: uint16(17593), + 1698: uint16(29207), + 1699: uint16(16107), + 1700: uint16(30578), + 1701: uint16(31299), + 1702: uint16(28880), + 1703: uint16(17523), + 1704: uint16(17400), + 1705: uint16(29054), + 1706: uint16(6127), + 1707: uint16(28835), + 1708: uint16(6334), + 1709: uint16(13721), + 1710: uint16(16071), + 1711: uint16(6277), + 1712: uint16(21551), + 1713: uint16(6136), + 1714: uint16(14114), + 1715: uint16(5883), + 1716: uint16(6201), + 1717: uint16(14049), + 1718: uint16(6004), + 1719: uint16(6353), + 1720: uint16(24395), + 1721: uint16(14115), + 1722: uint16(5824), + 1723: uint16(22363), + 1724: uint16(18981), + 1725: uint16(5118), + 1726: uint16(4776), + 1727: uint16(5062), + 1728: uint16(5302), + 1729: uint16(34051), + 1730: uint16(13990), + 1732: uint16(33877), + 1733: uint16(18836), + 1734: uint16(29029), + 1735: uint16(15921), + 1736: uint16(21852), + 1737: uint16(16123), + 1738: uint16(28754), + 1739: uint16(17652), + 1740: uint16(14062), + 1741: uint16(39325), + 1742: uint16(28454), + 1743: uint16(26617), + 1744: uint16(14131), + 1745: uint16(15381), + 1746: uint16(15847), + 1747: uint16(22636), + 1748: uint16(6434), + 1749: uint16(26640), + 1750: uint16(16471), + 1751: uint16(14143), + 1752: uint16(16609), + 1753: uint16(16523), + 1754: uint16(16655), + 1755: uint16(27681), + 1756: uint16(21707), + 1757: uint16(22174), + 1758: uint16(26289), + 1759: uint16(22162), + 1760: uint16(4063), + 1761: uint16(2984), + 1762: uint16(3597), + 1763: uint16(37830), + 1764: uint16(35603), + 1765: uint16(37788), + 1766: uint16(20216), + 1767: uint16(20779), + 1768: uint16(14361), + 1769: uint16(17462), + 1770: uint16(20156), + 1771: uint16(1125), + 1772: uint16(895), + 1773: uint16(20299), + 1774: uint16(20362), + 1775: uint16(22097), + 1776: uint16(23144), + 1777: uint16(427), + 1778: uint16(971), + 1779: uint16(14745), + 1780: uint16(778), + 1781: uint16(1044), + 1782: uint16(13365), + 1783: uint16(20265), + 1784: uint16(704), + 1785: uint16(36531), + 1786: uint16(629), + 1787: uint16(35546), + 1788: uint16(524), + 1789: uint16(20120), + 1790: uint16(20685), + 1791: uint16(20749), + 1792: uint16(20386), + 1793: uint16(20227), + 1794: uint16(18958), + 1795: uint16(16010), + 1796: uint16(20290), + 1797: uint16(20526), + 1798: uint16(20588), + 1799: uint16(20609), + 1800: uint16(20428), + 1801: uint16(20453), + 1802: uint16(20568), + 1803: uint16(20732), + 1808: uint16(28278), + 1809: uint16(13717), + 1810: uint16(15929), + 1811: uint16(16063), + 1812: uint16(28018), + 1813: uint16(6276), + 1814: uint16(16009), + 1815: uint16(20904), + 1816: uint16(20931), + 1817: uint16(1504), + 1818: uint16(17629), + 1819: uint16(1187), + 1820: uint16(1170), + 1821: uint16(1169), + 1822: uint16(36218), + 1823: uint16(35484), + 1824: uint16(1806), + 1825: uint16(21081), + 1826: uint16(21156), + 1827: uint16(2163), + 1828: uint16(21217), + 1830: uint16(18042), + 1831: uint16(29068), + 1832: uint16(17292), + 1833: uint16(3104), + 1834: uint16(18860), + 1835: uint16(4324), + 1836: uint16(27089), + 1837: uint16(3613), + 1839: uint16(16094), + 1840: uint16(29849), + 1841: uint16(29716), + 1842: uint16(29782), + 1843: uint16(29592), + 1844: uint16(19342), + 1845: uint16(19132), + 1846: uint16(16525), + 1847: uint16(21456), + 1848: uint16(13700), + 1849: uint16(29199), + 1850: uint16(16585), + 1851: uint16(21940), + 1852: uint16(837), + 1853: uint16(21709), + 1854: uint16(3014), + 1855: uint16(22301), + 1856: uint16(37469), + 1857: uint16(38644), + 1858: uint16(37734), + 1859: uint16(22493), + 1860: uint16(22413), + 1861: uint16(22399), + 1862: uint16(13886), + 1863: uint16(22731), + 1864: uint16(23193), + 1865: uint16(35398), + 1866: uint16(5882), + 1867: uint16(5999), + 1868: uint16(5904), + 1869: uint16(23084), + 1870: uint16(22968), + 1871: uint16(37519), + 1872: uint16(23166), + 1873: uint16(23247), + 1874: uint16(23058), + 1875: uint16(22854), + 1876: uint16(6643), + 1877: uint16(6241), + 1878: uint16(17045), + 1879: uint16(14069), + 1880: uint16(27909), + 1881: uint16(29763), + 1882: uint16(23073), + 1883: uint16(24195), + 1884: uint16(23169), + 1885: uint16(35799), + 1886: uint16(1043), + 1887: uint16(37856), + 1888: uint16(29836), + 1889: uint16(4867), + 1890: uint16(28933), + 1891: uint16(18802), + 1892: uint16(37896), + 1893: uint16(35323), + 1894: uint16(37821), + 1895: uint16(14240), + 1896: uint16(23582), + 1897: uint16(23710), + 1898: uint16(24158), + 1899: uint16(24136), + 1900: uint16(6550), + 1901: uint16(6524), + 1902: uint16(15086), + 1903: uint16(24269), + 1904: uint16(23375), + 1905: uint16(6403), + 1906: uint16(6404), + 1907: uint16(14081), + 1908: uint16(6304), + 1909: uint16(14045), + 1910: uint16(5886), + 1911: uint16(14035), + 1912: uint16(33066), + 1913: uint16(35399), + 1914: uint16(7610), + 1915: uint16(13426), + 1916: uint16(35240), + 1917: uint16(24332), + 1918: uint16(24334), + 1919: uint16(6439), + 1920: uint16(6059), + 1921: uint16(23147), + 1922: uint16(5947), + 1923: uint16(23364), + 1924: uint16(34324), + 1925: uint16(30205), + 1926: uint16(34912), + 1927: uint16(24702), + 1928: uint16(10336), + 1929: uint16(9771), + 1930: uint16(24539), + 1931: uint16(16056), + 1932: uint16(9647), + 1933: uint16(9662), + 1934: uint16(37000), + 1935: uint16(28531), + 1936: uint16(25024), + 1937: uint16(62), + 1938: uint16(70), + 1939: uint16(9755), + 1940: uint16(24985), + 1941: uint16(24984), + 1942: uint16(24693), + 1943: uint16(11419), + 1944: uint16(11527), + 1945: uint16(18132), + 1946: uint16(37197), + 1947: uint16(25713), + 1948: uint16(18021), + 1949: uint16(11114), + 1950: uint16(14889), + 1951: uint16(11042), + 1952: uint16(13392), + 1953: uint16(39146), + 1954: uint16(11896), + 1955: uint16(25399), + 1956: uint16(42075), + 1957: uint16(25782), + 1958: uint16(25393), + 1959: uint16(25553), + 1960: uint16(18915), + 1961: uint16(11623), + 1962: uint16(25252), + 1963: uint16(11425), + 1964: uint16(25659), + 1965: uint16(25963), + 1966: uint16(26994), + 1967: uint16(15348), + 1968: uint16(12430), + 1969: uint16(12973), + 1970: uint16(18825), + 1971: uint16(12971), + 1972: uint16(21773), + 1973: uint16(13024), + 1974: uint16(6361), + 1975: uint16(37951), + 1976: uint16(26318), + 1977: uint16(12937), + 1978: uint16(12723), + 1979: uint16(15072), + 1980: uint16(16784), + 1981: uint16(21892), + 1982: uint16(35618), + 1983: uint16(21903), + 1984: uint16(5884), + 1985: uint16(21851), + 1986: uint16(21541), + 1987: uint16(30958), + 1988: uint16(12547), + 1989: uint16(6186), + 1990: uint16(12852), + 1991: uint16(13412), + 1992: uint16(12815), + 1993: uint16(12674), + 1994: uint16(17097), + 1995: uint16(26254), + 1996: uint16(27940), + 1997: uint16(26219), + 1998: uint16(19347), + 1999: uint16(26160), + 2000: uint16(30832), + 2001: uint16(7659), + 2002: uint16(26211), + 2003: uint16(13010), + 2004: uint16(13025), + 2005: uint16(26142), + 2006: uint16(22642), + 2007: uint16(14545), + 2008: uint16(14394), + 2009: uint16(14268), + 2010: uint16(15257), + 2011: uint16(14242), + 2012: uint16(13310), + 2013: uint16(29904), + 2014: uint16(15254), + 2015: uint16(26511), + 2016: uint16(17962), + 2017: uint16(26806), + 2018: uint16(26654), + 2019: uint16(15300), + 2020: uint16(27326), + 2021: uint16(14435), + 2022: uint16(14293), + 2023: uint16(17543), + 2024: uint16(27187), + 2025: uint16(27218), + 2026: uint16(27337), + 2027: uint16(27397), + 2028: uint16(6418), + 2029: uint16(25873), + 2030: uint16(26776), + 2031: uint16(27212), + 2032: uint16(15319), + 2033: uint16(27258), + 2034: uint16(27479), + 2035: uint16(16320), + 2036: uint16(15514), + 2037: uint16(37792), + 2038: uint16(37618), + 2039: uint16(35818), + 2040: uint16(35531), + 2041: uint16(37513), + 2042: uint16(32798), + 2043: uint16(35292), + 2044: uint16(37991), + 2045: uint16(28069), + 2046: uint16(28427), + 2047: uint16(18924), + 2049: uint16(16255), + 2050: uint16(15759), + 2051: uint16(28164), + 2052: uint16(16444), + 2053: uint16(23101), + 2054: uint16(28170), + 2055: uint16(22599), + 2056: uint16(27940), + 2057: uint16(30786), + 2058: uint16(28987), + 2059: uint16(17178), + 2060: uint16(17014), + 2061: uint16(28913), + 2062: uint16(29264), + 2063: uint16(29319), + 2064: uint16(29332), + 2065: uint16(18319), + 2066: uint16(18213), + 2067: uint16(20857), + 2068: uint16(19108), + 2069: uint16(1515), + 2070: uint16(29818), + 2071: uint16(16120), + 2072: uint16(13919), + 2073: uint16(19018), + 2074: uint16(18711), + 2075: uint16(24545), + 2076: uint16(16134), + 2077: uint16(16049), + 2078: uint16(19167), + 2079: uint16(35875), + 2080: uint16(16181), + 2081: uint16(24743), + 2082: uint16(16115), + 2083: uint16(29900), + 2084: uint16(29756), + 2085: uint16(37767), + 2086: uint16(29751), + 2087: uint16(17567), + 2088: uint16(28138), + 2089: uint16(17745), + 2090: uint16(30083), + 2091: uint16(16227), + 2092: uint16(19673), + 2093: uint16(19718), + 2094: uint16(16216), + 2095: uint16(30037), + 2096: uint16(30323), + 2097: uint16(42438), + 2098: uint16(15129), + 2099: uint16(29800), + 2100: uint16(35532), + 2101: uint16(18859), + 2102: uint16(18830), + 2103: uint16(15099), + 2104: uint16(15821), + 2105: uint16(19022), + 2106: uint16(16127), + 2107: uint16(18885), + 2108: uint16(18675), + 2109: uint16(37370), + 2110: uint16(22322), + 2111: uint16(37698), + 2112: uint16(35555), + 2113: uint16(6244), + 2114: uint16(20703), + 2115: uint16(21025), + 2116: uint16(20967), + 2117: uint16(30584), + 2118: uint16(12850), + 2119: uint16(30478), + 2120: uint16(30479), + 2121: uint16(30587), + 2122: uint16(18071), + 2123: uint16(14209), + 2124: uint16(14942), + 2125: uint16(18672), + 2126: uint16(29752), + 2127: uint16(29851), + 2128: uint16(16063), + 2129: uint16(19130), + 2130: uint16(19143), + 2131: uint16(16584), + 2132: uint16(19094), + 2133: uint16(25006), + 2134: uint16(37639), + 2135: uint16(21889), + 2136: uint16(30750), + 2137: uint16(30861), + 2138: uint16(30856), + 2139: uint16(30930), + 2140: uint16(29648), + 2141: uint16(31065), + 2142: uint16(30529), + 2143: uint16(22243), + 2144: uint16(16654), + 2146: uint16(33942), + 2147: uint16(31141), + 2148: uint16(27181), + 2149: uint16(16122), + 2150: uint16(31290), + 2151: uint16(31220), + 2152: uint16(16750), + 2153: uint16(5862), + 2154: uint16(16690), + 2155: uint16(37429), + 2156: uint16(31217), + 2157: uint16(3404), + 2158: uint16(18828), + 2159: uint16(665), + 2160: uint16(15802), + 2161: uint16(5998), + 2162: uint16(13719), + 2163: uint16(21867), + 2164: uint16(13680), + 2165: uint16(13994), + 2166: uint16(468), + 2167: uint16(3085), + 2168: uint16(31458), + 2169: uint16(23129), + 2170: uint16(9973), + 2171: uint16(23215), + 2172: uint16(23196), + 2173: uint16(23053), + 2174: uint16(603), + 2175: uint16(30960), + 2176: uint16(23082), + 2177: uint16(23494), + 2178: uint16(31486), + 2179: uint16(16889), + 2180: uint16(31837), + 2181: uint16(31853), + 2182: uint16(16913), + 2183: uint16(23475), + 2184: uint16(24252), + 2185: uint16(24230), + 2186: uint16(31949), + 2187: uint16(18937), + 2188: uint16(6064), + 2189: uint16(31886), + 2190: uint16(31868), + 2191: uint16(31918), + 2192: uint16(27314), + 2193: uint16(32220), + 2194: uint16(32263), + 2195: uint16(32211), + 2196: uint16(32590), + 2197: uint16(25185), + 2198: uint16(24924), + 2199: uint16(31560), + 2200: uint16(32151), + 2201: uint16(24194), + 2202: uint16(17002), + 2203: uint16(27509), + 2204: uint16(2326), + 2205: uint16(26582), + 2206: uint16(78), + 2207: uint16(13775), + 2208: uint16(22468), + 2209: uint16(25618), + 2210: uint16(25592), + 2211: uint16(18786), + 2212: uint16(32733), + 2213: uint16(31527), + 2214: uint16(2092), + 2215: uint16(23273), + 2216: uint16(23875), + 2217: uint16(31500), + 2218: uint16(24078), + 2219: uint16(39398), + 2220: uint16(34373), + 2221: uint16(39523), + 2222: uint16(27164), + 2223: uint16(13375), + 2224: uint16(14818), + 2225: uint16(18935), + 2226: uint16(26029), + 2227: uint16(39455), + 2228: uint16(26016), + 2229: uint16(33920), + 2230: uint16(28967), + 2231: uint16(27857), + 2232: uint16(17642), + 2233: uint16(33079), + 2234: uint16(17410), + 2235: uint16(32966), + 2236: uint16(33033), + 2237: uint16(33090), + 2238: uint16(26548), + 2239: uint16(39107), + 2240: uint16(27202), + 2241: uint16(33378), + 2242: uint16(33381), + 2243: uint16(27217), + 2244: uint16(33875), + 2245: uint16(28071), + 2246: uint16(34320), + 2247: uint16(29211), + 2248: uint16(23174), + 2249: uint16(16767), + 2250: uint16(6208), + 2251: uint16(23339), + 2252: uint16(6305), + 2253: uint16(23268), + 2254: uint16(6360), + 2255: uint16(34464), + 2256: uint16(63932), + 2257: uint16(15759), + 2258: uint16(34861), + 2259: uint16(29730), + 2260: uint16(23042), + 2261: uint16(34926), + 2262: uint16(20293), + 2263: uint16(34951), + 2264: uint16(35007), + 2265: uint16(35046), + 2266: uint16(35173), + 2267: uint16(35149), + 2268: uint16(22147), + 2269: uint16(35156), + 2270: uint16(30597), + 2271: uint16(30596), + 2272: uint16(35829), + 2273: uint16(35801), + 2274: uint16(35740), + 2275: uint16(35321), + 2276: uint16(16045), + 2277: uint16(33955), + 2278: uint16(18165), + 2279: uint16(18127), + 2280: uint16(14322), + 2281: uint16(35389), + 2282: uint16(35356), + 2283: uint16(37960), + 2284: uint16(24397), + 2285: uint16(37419), + 2286: uint16(17028), + 2287: uint16(26068), + 2288: uint16(28969), + 2289: uint16(28868), + 2290: uint16(6213), + 2291: uint16(40301), + 2292: uint16(35999), + 2293: uint16(36073), + 2294: uint16(32220), + 2295: uint16(22938), + 2296: uint16(30659), + 2297: uint16(23024), + 2298: uint16(17262), + 2299: uint16(14036), + 2300: uint16(36394), + 2301: uint16(36519), + 2302: uint16(19465), + 2303: uint16(36656), + 2304: uint16(36682), + 2305: uint16(17140), + 2306: uint16(27736), + 2307: uint16(28603), + 2308: uint16(8993), + 2309: uint16(18587), + 2310: uint16(28537), + 2311: uint16(28299), + 2312: uint16(6106), + 2313: uint16(39913), + 2314: uint16(14005), + 2315: uint16(18735), + 2316: uint16(37051), + 2318: uint16(21873), + 2319: uint16(18694), + 2320: uint16(37307), + 2321: uint16(37892), + 2322: uint16(35403), + 2323: uint16(16482), + 2324: uint16(35580), + 2325: uint16(37927), + 2326: uint16(35869), + 2327: uint16(35899), + 2328: uint16(34021), + 2329: uint16(35371), + 2330: uint16(38297), + 2331: uint16(38311), + 2332: uint16(38295), + 2333: uint16(38294), + 2334: uint16(36148), + 2335: uint16(29765), + 2336: uint16(16066), + 2337: uint16(18687), + 2338: uint16(19010), + 2339: uint16(17386), + 2340: uint16(16103), + 2341: uint16(12837), + 2342: uint16(38543), + 2343: uint16(36583), + 2344: uint16(36454), + 2345: uint16(36453), + 2346: uint16(16076), + 2347: uint16(18925), + 2348: uint16(19064), + 2349: uint16(16366), + 2350: uint16(29714), + 2351: uint16(29803), + 2352: uint16(16124), + 2353: uint16(38721), + 2354: uint16(37040), + 2355: uint16(26695), + 2356: uint16(18973), + 2357: uint16(37011), + 2358: uint16(22495), + 2360: uint16(37736), + 2361: uint16(35209), + 2362: uint16(35878), + 2363: uint16(35631), + 2364: uint16(25534), + 2365: uint16(37562), + 2366: uint16(23313), + 2367: uint16(35689), + 2368: uint16(18748), + 2369: uint16(29689), + 2370: uint16(16923), + 2371: uint16(38811), + 2372: uint16(38769), + 2373: uint16(39224), + 2374: uint16(3878), + 2375: uint16(24001), + 2376: uint16(35781), + 2377: uint16(19122), + 2378: uint16(38943), + 2379: uint16(38106), + 2380: uint16(37622), + 2381: uint16(38359), + 2382: uint16(37349), + 2383: uint16(17600), + 2384: uint16(35664), + 2385: uint16(19047), + 2386: uint16(35684), + 2387: uint16(39132), + 2388: uint16(35397), + 2389: uint16(16128), + 2390: uint16(37418), + 2391: uint16(18725), + 2392: uint16(33812), + 2393: uint16(39227), + 2394: uint16(39245), + 2395: uint16(31494), + 2396: uint16(15869), + 2397: uint16(39323), + 2398: uint16(19311), + 2399: uint16(39338), + 2400: uint16(39516), + 2401: uint16(35685), + 2402: uint16(22728), + 2403: uint16(27279), + 2404: uint16(39457), + 2405: uint16(23294), + 2406: uint16(39471), + 2407: uint16(39153), + 2408: uint16(19344), + 2409: uint16(39240), + 2410: uint16(39356), + 2411: uint16(19389), + 2412: uint16(19351), + 2413: uint16(37757), + 2414: uint16(22642), + 2415: uint16(4866), + 2416: uint16(22562), + 2417: uint16(18872), + 2418: uint16(5352), + 2419: uint16(30788), + 2420: uint16(10015), + 2421: uint16(15800), + 2422: uint16(26821), + 2423: uint16(15741), + 2424: uint16(37976), + 2425: uint16(14631), + 2426: uint16(24912), + 2427: uint16(10113), + 2428: uint16(10603), + 2429: uint16(24839), + 2430: uint16(40015), + 2431: uint16(40019), + 2432: uint16(40059), + 2433: uint16(39989), + 2434: uint16(39952), + 2435: uint16(39807), + 2436: uint16(39887), + 2437: uint16(40493), + 2438: uint16(39839), + 2439: uint16(41461), + 2440: uint16(41214), + 2441: uint16(40225), + 2442: uint16(19630), + 2443: uint16(16644), + 2444: uint16(40472), + 2445: uint16(19632), + 2446: uint16(40204), + 2447: uint16(41396), + 2448: uint16(41197), + 2449: uint16(41203), + 2450: uint16(39215), + 2451: uint16(40357), + 2452: uint16(33981), + 2453: uint16(28178), + 2454: uint16(28639), + 2455: uint16(27522), + 2456: uint16(34300), + 2457: uint16(17715), + 2458: uint16(28068), + 2459: uint16(28292), + 2460: uint16(28144), + 2461: uint16(33824), + 2462: uint16(34286), + 2463: uint16(28160), + 2464: uint16(14295), + 2465: uint16(24676), + 2466: uint16(31202), + 2467: uint16(13724), + 2468: uint16(13888), + 2469: uint16(18733), + 2470: uint16(18910), + 2471: uint16(15714), + 2472: uint16(37851), + 2473: uint16(37566), + 2474: uint16(37704), + 2475: uint16(703), + 2476: uint16(30905), + 2477: uint16(37495), + 2478: uint16(37965), + 2479: uint16(20452), + 2480: uint16(13376), + 2481: uint16(36964), + 2482: uint16(21853), + 2483: uint16(30781), + 2484: uint16(30804), + 2485: uint16(30902), + 2486: uint16(30795), + 2487: uint16(5975), + 2488: uint16(12745), + 2489: uint16(18753), + 2490: uint16(13978), + 2491: uint16(20338), + 2492: uint16(28634), + 2493: uint16(28633), + 2495: uint16(28702), + 2496: uint16(21524), + 2497: uint16(16821), + 2498: uint16(22459), + 2499: uint16(22771), + 2500: uint16(22410), + 2501: uint16(40214), + 2502: uint16(22487), + 2503: uint16(28980), + 2504: uint16(13487), + 2505: uint16(16812), + 2506: uint16(29163), + 2507: uint16(27712), + 2508: uint16(20375), + 2510: uint16(6069), + 2511: uint16(35401), + 2512: uint16(24844), + 2513: uint16(23246), + 2514: uint16(23051), + 2515: uint16(17084), + 2516: uint16(17544), + 2517: uint16(14124), + 2518: uint16(19323), + 2519: uint16(35324), + 2520: uint16(37819), + 2521: uint16(37816), + 2522: uint16(6358), + 2523: uint16(3869), + 2524: uint16(33906), + 2525: uint16(27840), + 2526: uint16(5139), + 2527: uint16(17146), + 2528: uint16(11302), + 2529: uint16(17345), + 2530: uint16(22932), + 2531: uint16(15799), + 2532: uint16(26433), + 2533: uint16(32168), + 2534: uint16(24923), + 2535: uint16(24740), + 2536: uint16(18873), + 2537: uint16(18827), + 2538: uint16(35322), + 2539: uint16(37605), + 2540: uint16(29666), + 2541: uint16(16105), + 2542: uint16(29876), + 2543: uint16(35683), + 2544: uint16(6303), + 2545: uint16(16097), + 2546: uint16(19123), + 2547: uint16(27352), + 2548: uint16(29683), + 2549: uint16(29691), + 2550: uint16(16086), + 2551: uint16(19006), + 2552: uint16(19092), + 2553: uint16(6105), + 2554: uint16(19046), + 2555: uint16(935), + 2556: uint16(5156), + 2557: uint16(18917), + 2558: uint16(29768), + 2559: uint16(18710), + 2560: uint16(28837), + 2561: uint16(18806), + 2562: uint16(37508), + 2563: uint16(29670), + 2564: uint16(37727), + 2565: uint16(1278), + 2566: uint16(37681), + 2567: uint16(35534), + 2568: uint16(35350), + 2569: uint16(37766), + 2570: uint16(35815), + 2571: uint16(21973), + 2572: uint16(18741), + 2573: uint16(35458), + 2574: uint16(29035), + 2575: uint16(18755), + 2576: uint16(3327), + 2577: uint16(22180), + 2578: uint16(1562), + 2579: uint16(3051), + 2580: uint16(3256), + 2581: uint16(21762), + 2582: uint16(31172), + 2583: uint16(6138), + 2584: uint16(32254), + 2585: uint16(5826), + 2586: uint16(19024), + 2587: uint16(6226), + 2588: uint16(17710), + 2589: uint16(37889), + 2590: uint16(14090), + 2591: uint16(35520), + 2592: uint16(18861), + 2593: uint16(22960), + 2594: uint16(6335), + 2595: uint16(6275), + 2596: uint16(29828), + 2597: uint16(23201), + 2598: uint16(14050), + 2599: uint16(15707), + 2600: uint16(14000), + 2601: uint16(37471), + 2602: uint16(23161), + 2603: uint16(35457), + 2604: uint16(6242), + 2605: uint16(37748), + 2606: uint16(15565), + 2607: uint16(2740), + 2608: uint16(19094), + 2609: uint16(14730), + 2610: uint16(20724), + 2611: uint16(15721), + 2612: uint16(15692), + 2613: uint16(5020), + 2614: uint16(29045), + 2615: uint16(17147), + 2616: uint16(33304), + 2617: uint16(28175), + 2618: uint16(37092), + 2619: uint16(17643), + 2620: uint16(27991), + 2621: uint16(32335), + 2622: uint16(28775), + 2623: uint16(27823), + 2624: uint16(15574), + 2625: uint16(16365), + 2626: uint16(15917), + 2627: uint16(28162), + 2628: uint16(28428), + 2629: uint16(15727), + 2630: uint16(1013), + 2631: uint16(30033), + 2632: uint16(14012), + 2633: uint16(13512), + 2634: uint16(18048), + 2635: uint16(16090), + 2636: uint16(18545), + 2637: uint16(22980), + 2638: uint16(37486), + 2639: uint16(18750), + 2640: uint16(36673), + 2641: uint16(35868), + 2642: uint16(27584), + 2643: uint16(22546), + 2644: uint16(22472), + 2645: uint16(14038), + 2646: uint16(5202), + 2647: uint16(28926), + 2648: uint16(17250), + 2649: uint16(19057), + 2650: uint16(12259), + 2651: uint16(4784), + 2652: uint16(9149), + 2653: uint16(26809), + 2654: uint16(26983), + 2655: uint16(5016), + 2656: uint16(13541), + 2657: uint16(31732), + 2658: uint16(14047), + 2659: uint16(35459), + 2660: uint16(14294), + 2661: uint16(13306), + 2662: uint16(19615), + 2663: uint16(27162), + 2664: uint16(13997), + 2665: uint16(27831), + 2666: uint16(33854), + 2667: uint16(17631), + 2668: uint16(17614), + 2669: uint16(27942), + 2670: uint16(27985), + 2671: uint16(27778), + 2672: uint16(28638), + 2673: uint16(28439), + 2674: uint16(28937), + 2675: uint16(33597), + 2676: uint16(5946), + 2677: uint16(33773), + 2678: uint16(27776), + 2679: uint16(28755), + 2680: uint16(6107), + 2681: uint16(22921), + 2682: uint16(23170), + 2683: uint16(6067), + 2684: uint16(23137), + 2685: uint16(23153), + 2686: uint16(6405), + 2687: uint16(16892), + 2688: uint16(14125), + 2689: uint16(23023), + 2690: uint16(5948), + 2691: uint16(14023), + 2692: uint16(29070), + 2693: uint16(37776), + 2694: uint16(26266), + 2695: uint16(17061), + 2696: uint16(23150), + 2697: uint16(23083), + 2698: uint16(17043), + 2699: uint16(27179), + 2700: uint16(16121), + 2701: uint16(30518), + 2702: uint16(17499), + 2703: uint16(17098), + 2704: uint16(28957), + 2705: uint16(16985), + 2706: uint16(35297), + 2707: uint16(20400), + 2708: uint16(27944), + 2709: uint16(23746), + 2710: uint16(17614), + 2711: uint16(32333), + 2712: uint16(17341), + 2713: uint16(27148), + 2714: uint16(16982), + 2715: uint16(4868), + 2716: uint16(28838), + 2717: uint16(28979), + 2718: uint16(17385), + 2719: uint16(15781), + 2720: uint16(27871), + 2721: uint16(63525), + 2722: uint16(19023), + 2723: uint16(32357), + 2724: uint16(23019), + 2725: uint16(23855), + 2726: uint16(15859), + 2727: uint16(24412), + 2728: uint16(19037), + 2729: uint16(6111), + 2730: uint16(32164), + 2731: uint16(33830), + 2732: uint16(21637), + 2733: uint16(15098), + 2734: uint16(13056), + 2735: uint16(532), + 2736: uint16(22398), + 2737: uint16(2261), + 2738: uint16(1561), + 2739: uint16(16357), + 2740: uint16(8094), + 2741: uint16(41654), + 2742: uint16(28675), + 2743: uint16(37211), + 2744: uint16(23920), + 2745: uint16(29583), + 2746: uint16(31955), + 2747: uint16(35417), + 2748: uint16(37920), + 2749: uint16(20424), + 2750: uint16(32743), + 2751: uint16(29389), + 2752: uint16(29456), + 2753: uint16(31476), + 2754: uint16(29496), + 2755: uint16(29497), + 2756: uint16(22262), + 2757: uint16(29505), + 2758: uint16(29512), + 2759: uint16(16041), + 2760: uint16(31512), + 2761: uint16(36972), + 2762: uint16(29173), + 2763: uint16(18674), + 2764: uint16(29665), + 2765: uint16(33270), + 2766: uint16(16074), + 2767: uint16(30476), + 2768: uint16(16081), + 2769: uint16(27810), + 2770: uint16(22269), + 2771: uint16(29721), + 2772: uint16(29726), + 2773: uint16(29727), + 2774: uint16(16098), + 2775: uint16(16112), + 2776: uint16(16116), + 2777: uint16(16122), + 2778: uint16(29907), + 2779: uint16(16142), + 2780: uint16(16211), + 2781: uint16(30018), + 2782: uint16(30061), + 2783: uint16(30066), + 2784: uint16(30093), + 2785: uint16(16252), + 2786: uint16(30152), + 2787: uint16(30172), + 2788: uint16(16320), + 2789: uint16(30285), + 2790: uint16(16343), + 2791: uint16(30324), + 2792: uint16(16348), + 2793: uint16(30330), + 2794: uint16(20316), + 2795: uint16(29064), + 2796: uint16(22051), + 2797: uint16(35200), + 2798: uint16(22633), + 2799: uint16(16413), + 2800: uint16(30531), + 2801: uint16(16441), + 2802: uint16(26465), + 2803: uint16(16453), + 2804: uint16(13787), + 2805: uint16(30616), + 2806: uint16(16490), + 2807: uint16(16495), + 2808: uint16(23646), + 2809: uint16(30654), + 2810: uint16(30667), + 2811: uint16(22770), + 2812: uint16(30744), + 2813: uint16(28857), + 2814: uint16(30748), + 2815: uint16(16552), + 2816: uint16(30777), + 2817: uint16(30791), + 2818: uint16(30801), + 2819: uint16(30822), + 2820: uint16(33864), + 2821: uint16(21813), + 2822: uint16(31027), + 2823: uint16(26627), + 2824: uint16(31026), + 2825: uint16(16643), + 2826: uint16(16649), + 2827: uint16(31121), + 2828: uint16(31129), + 2829: uint16(36795), + 2830: uint16(31238), + 2831: uint16(36796), + 2832: uint16(16743), + 2833: uint16(31377), + 2834: uint16(16818), + 2835: uint16(31420), + 2836: uint16(33401), + 2837: uint16(16836), + 2838: uint16(31439), + 2839: uint16(31451), + 2840: uint16(16847), + 2841: uint16(20001), + 2842: uint16(31586), + 2843: uint16(31596), + 2844: uint16(31611), + 2845: uint16(31762), + 2846: uint16(31771), + 2847: uint16(16992), + 2848: uint16(17018), + 2849: uint16(31867), + 2850: uint16(31900), + 2851: uint16(17036), + 2852: uint16(31928), + 2853: uint16(17044), + 2854: uint16(31981), + 2855: uint16(36755), + 2856: uint16(28864), + 2857: uint16(3279), + 2858: uint16(32207), + 2859: uint16(32212), + 2860: uint16(32208), + 2861: uint16(32253), + 2862: uint16(32686), + 2863: uint16(32692), + 2864: uint16(29343), + 2865: uint16(17303), + 2866: uint16(32800), + 2867: uint16(32805), + 2868: uint16(31545), + 2869: uint16(32814), + 2870: uint16(32817), + 2871: uint16(32852), + 2872: uint16(15820), + 2873: uint16(22452), + 2874: uint16(28832), + 2875: uint16(32951), + 2876: uint16(33001), + 2877: uint16(17389), + 2878: uint16(33036), + 2879: uint16(29482), + 2880: uint16(33038), + 2881: uint16(33042), + 2882: uint16(30048), + 2883: uint16(33044), + 2884: uint16(17409), + 2885: uint16(15161), + 2886: uint16(33110), + 2887: uint16(33113), + 2888: uint16(33114), + 2889: uint16(17427), + 2890: uint16(22586), + 2891: uint16(33148), + 2892: uint16(33156), + 2893: uint16(17445), + 2894: uint16(33171), + 2895: uint16(17453), + 2896: uint16(33189), + 2897: uint16(22511), + 2898: uint16(33217), + 2899: uint16(33252), + 2900: uint16(33364), + 2901: uint16(17551), + 2902: uint16(33446), + 2903: uint16(33398), + 2904: uint16(33482), + 2905: uint16(33496), + 2906: uint16(33535), + 2907: uint16(17584), + 2908: uint16(33623), + 2909: uint16(38505), + 2910: uint16(27018), + 2911: uint16(33797), + 2912: uint16(28917), + 2913: uint16(33892), + 2914: uint16(24803), + 2915: uint16(33928), + 2916: uint16(17668), + 2917: uint16(33982), + 2918: uint16(34017), + 2919: uint16(34040), + 2920: uint16(34064), + 2921: uint16(34104), + 2922: uint16(34130), + 2923: uint16(17723), + 2924: uint16(34159), + 2925: uint16(34160), + 2926: uint16(34272), + 2927: uint16(17783), + 2928: uint16(34418), + 2929: uint16(34450), + 2930: uint16(34482), + 2931: uint16(34543), + 2932: uint16(38469), + 2933: uint16(34699), + 2934: uint16(17926), + 2935: uint16(17943), + 2936: uint16(34990), + 2937: uint16(35071), + 2938: uint16(35108), + 2939: uint16(35143), + 2940: uint16(35217), + 2941: uint16(31079), + 2942: uint16(35369), + 2943: uint16(35384), + 2944: uint16(35476), + 2945: uint16(35508), + 2946: uint16(35921), + 2947: uint16(36052), + 2948: uint16(36082), + 2949: uint16(36124), + 2950: uint16(18328), + 2951: uint16(22623), + 2952: uint16(36291), + 2953: uint16(18413), + 2954: uint16(20206), + 2955: uint16(36410), + 2956: uint16(21976), + 2957: uint16(22356), + 2958: uint16(36465), + 2959: uint16(22005), + 2960: uint16(36528), + 2961: uint16(18487), + 2962: uint16(36558), + 2963: uint16(36578), + 2964: uint16(36580), + 2965: uint16(36589), + 2966: uint16(36594), + 2967: uint16(36791), + 2968: uint16(36801), + 2969: uint16(36810), + 2970: uint16(36812), + 2971: uint16(36915), + 2972: uint16(39364), + 2973: uint16(18605), + 2974: uint16(39136), + 2975: uint16(37395), + 2976: uint16(18718), + 2977: uint16(37416), + 2978: uint16(37464), + 2979: uint16(37483), + 2980: uint16(37553), + 2981: uint16(37550), + 2982: uint16(37567), + 2983: uint16(37603), + 2984: uint16(37611), + 2985: uint16(37619), + 2986: uint16(37620), + 2987: uint16(37629), + 2988: uint16(37699), + 2989: uint16(37764), + 2990: uint16(37805), + 2991: uint16(18757), + 2992: uint16(18769), + 2993: uint16(40639), + 2994: uint16(37911), + 2995: uint16(21249), + 2996: uint16(37917), + 2997: uint16(37933), + 2998: uint16(37950), + 2999: uint16(18794), + 3000: uint16(37972), + 3001: uint16(38009), + 3002: uint16(38189), + 3003: uint16(38306), + 3004: uint16(18855), + 3005: uint16(38388), + 3006: uint16(38451), + 3007: uint16(18917), + 3008: uint16(26528), + 3009: uint16(18980), + 3010: uint16(38720), + 3011: uint16(18997), + 3012: uint16(38834), + 3013: uint16(38850), + 3014: uint16(22100), + 3015: uint16(19172), + 3016: uint16(24808), + 3017: uint16(39097), + 3018: uint16(19225), + 3019: uint16(39153), + 3020: uint16(22596), + 3021: uint16(39182), + 3022: uint16(39193), + 3023: uint16(20916), + 3024: uint16(39196), + 3025: uint16(39223), + 3026: uint16(39234), + 3027: uint16(39261), + 3028: uint16(39266), + 3029: uint16(19312), + 3030: uint16(39365), + 3031: uint16(19357), + 3032: uint16(39484), + 3033: uint16(39695), + 3034: uint16(31363), + 3035: uint16(39785), + 3036: uint16(39809), + 3037: uint16(39901), + 3038: uint16(39921), + 3039: uint16(39924), + 3040: uint16(19565), + 3041: uint16(39968), + 3042: uint16(14191), + 3043: uint16(7106), + 3044: uint16(40265), + 3045: uint16(39994), + 3046: uint16(40702), + 3047: uint16(22096), + 3048: uint16(40339), + 3049: uint16(40381), + 3050: uint16(40384), + 3051: uint16(40444), + 3052: uint16(38134), + 3053: uint16(36790), + 3054: uint16(40571), + 3055: uint16(40620), + 3056: uint16(40625), + 3057: uint16(40637), + 3058: uint16(40646), + 3059: uint16(38108), + 3060: uint16(40674), + 3061: uint16(40689), + 3062: uint16(40696), + 3063: uint16(31432), + 3064: uint16(40772), + 3065: uint16(148), + 3066: uint16(695), + 3067: uint16(928), + 3068: uint16(26906), + 3069: uint16(38083), + 3070: uint16(22956), + 3071: uint16(1239), + 3072: uint16(22592), + 3073: uint16(38081), + 3074: uint16(14265), + 3075: uint16(1493), + 3076: uint16(1557), + 3077: uint16(1654), + 3078: uint16(5818), + 3079: uint16(22359), + 3080: uint16(29043), + 3081: uint16(2754), + 3082: uint16(2765), + 3083: uint16(3007), + 3084: uint16(21610), + 3085: uint16(63547), + 3086: uint16(3019), + 3087: uint16(21662), + 3088: uint16(3067), + 3089: uint16(3131), + 3090: uint16(3155), + 3091: uint16(3173), + 3092: uint16(3196), + 3093: uint16(24807), + 3094: uint16(3213), + 3095: uint16(22138), + 3096: uint16(3253), + 3097: uint16(3293), + 3098: uint16(3309), + 3099: uint16(3439), + 3100: uint16(3506), + 3101: uint16(3528), + 3102: uint16(26965), + 3103: uint16(39983), + 3104: uint16(34725), + 3105: uint16(3588), + 3106: uint16(3598), + 3107: uint16(3799), + 3108: uint16(3984), + 3109: uint16(3885), + 3110: uint16(3699), + 3111: uint16(23584), + 3112: uint16(4028), + 3113: uint16(24075), + 3114: uint16(4188), + 3115: uint16(4175), + 3116: uint16(4214), + 3117: uint16(26398), + 3118: uint16(4219), + 3119: uint16(4232), + 3120: uint16(4246), + 3121: uint16(13895), + 3122: uint16(4287), + 3123: uint16(4307), + 3124: uint16(4399), + 3125: uint16(4411), + 3126: uint16(21348), + 3127: uint16(33965), + 3128: uint16(4835), + 3129: uint16(4981), + 3130: uint16(4918), + 3131: uint16(35713), + 3132: uint16(5495), + 3133: uint16(5657), + 3134: uint16(6083), + 3135: uint16(6087), + 3136: uint16(20088), + 3137: uint16(28859), + 3138: uint16(6189), + 3139: uint16(6506), + 3140: uint16(6701), + 3141: uint16(6725), + 3142: uint16(7210), + 3143: uint16(7280), + 3144: uint16(7340), + 3145: uint16(7880), + 3146: uint16(25283), + 3147: uint16(7893), + 3148: uint16(7957), + 3149: uint16(29080), + 3150: uint16(26709), + 3151: uint16(8261), + 3152: uint16(27113), + 3153: uint16(14024), + 3154: uint16(8828), + 3155: uint16(9175), + 3156: uint16(9210), + 3157: uint16(10026), + 3158: uint16(10353), + 3159: uint16(10575), + 3160: uint16(33533), + 3161: uint16(10599), + 3162: uint16(10643), + 3163: uint16(10965), + 3164: uint16(35237), + 3165: uint16(10984), + 3166: uint16(36768), + 3167: uint16(11022), + 3168: uint16(38840), + 3169: uint16(11071), + 3170: uint16(38983), + 3171: uint16(39613), + 3172: uint16(11340), + 3174: uint16(11400), + 3175: uint16(11447), + 3176: uint16(23528), + 3177: uint16(11528), + 3178: uint16(11538), + 3179: uint16(11703), + 3180: uint16(11669), + 3181: uint16(11842), + 3182: uint16(12148), + 3183: uint16(12236), + 3184: uint16(12339), + 3185: uint16(12390), + 3186: uint16(13087), + 3187: uint16(13278), + 3188: uint16(24497), + 3189: uint16(26184), + 3190: uint16(26303), + 3191: uint16(31353), + 3192: uint16(13671), + 3193: uint16(13811), + 3195: uint16(18874), + 3197: uint16(13850), + 3198: uint16(14102), + 3200: uint16(838), + 3201: uint16(22709), + 3202: uint16(26382), + 3203: uint16(26904), + 3204: uint16(15015), + 3205: uint16(30295), + 3206: uint16(24546), + 3207: uint16(15889), + 3208: uint16(16057), + 3209: uint16(30206), + 3210: uint16(8346), + 3211: uint16(18640), + 3212: uint16(19128), + 3213: uint16(16665), + 3214: uint16(35482), + 3215: uint16(17134), + 3216: uint16(17165), + 3217: uint16(16443), + 3218: uint16(17204), + 3219: uint16(17302), + 3220: uint16(19013), + 3221: uint16(1482), + 3222: uint16(20946), + 3223: uint16(1553), + 3224: uint16(22943), + 3225: uint16(7848), + 3226: uint16(15294), + 3227: uint16(15615), + 3228: uint16(17412), + 3229: uint16(17622), + 3230: uint16(22408), + 3231: uint16(18036), + 3232: uint16(14747), + 3233: uint16(18223), + 3234: uint16(34280), + 3235: uint16(39369), + 3236: uint16(14178), + 3237: uint16(8643), + 3238: uint16(35678), + 3239: uint16(35662), + 3241: uint16(18450), + 3242: uint16(18683), + 3243: uint16(18965), + 3244: uint16(29193), + 3245: uint16(19136), + 3246: uint16(3192), + 3247: uint16(22885), + 3248: uint16(20133), + 3249: uint16(20358), + 3250: uint16(1913), + 3251: uint16(36570), + 3252: uint16(20524), + 3253: uint16(21135), + 3254: uint16(22335), + 3255: uint16(29041), + 3256: uint16(21145), + 3257: uint16(21529), + 3258: uint16(16202), + 3259: uint16(19111), + 3260: uint16(21948), + 3261: uint16(21574), + 3262: uint16(21614), + 3263: uint16(27474), + 3265: uint16(13427), + 3266: uint16(21823), + 3267: uint16(30258), + 3268: uint16(21854), + 3269: uint16(18200), + 3270: uint16(21858), + 3271: uint16(21862), + 3272: uint16(22471), + 3273: uint16(18751), + 3274: uint16(22621), + 3275: uint16(20582), + 3276: uint16(13563), + 3277: uint16(13260), + 3279: uint16(22787), + 3280: uint16(18300), + 3281: uint16(35144), + 3282: uint16(23214), + 3283: uint16(23433), + 3284: uint16(23558), + 3285: uint16(7568), + 3286: uint16(22433), + 3287: uint16(29009), + 3289: uint16(24834), + 3290: uint16(31762), + 3291: uint16(36950), + 3292: uint16(25010), + 3293: uint16(20378), + 3294: uint16(35682), + 3295: uint16(25602), + 3296: uint16(25674), + 3297: uint16(23899), + 3298: uint16(27639), + 3300: uint16(25732), + 3301: uint16(6428), + 3302: uint16(35562), + 3303: uint16(18934), + 3304: uint16(25736), + 3305: uint16(16367), + 3306: uint16(25874), + 3307: uint16(19392), + 3308: uint16(26047), + 3309: uint16(26293), + 3310: uint16(10011), + 3311: uint16(37989), + 3312: uint16(22497), + 3313: uint16(24981), + 3314: uint16(23079), + 3315: uint16(63693), + 3317: uint16(22201), + 3318: uint16(17697), + 3319: uint16(26364), + 3320: uint16(20074), + 3321: uint16(18740), + 3322: uint16(38486), + 3323: uint16(28047), + 3324: uint16(27837), + 3325: uint16(13848), + 3326: uint16(35191), + 3327: uint16(26521), + 3328: uint16(26734), + 3329: uint16(25617), + 3330: uint16(26718), + 3332: uint16(26823), + 3333: uint16(31554), + 3334: uint16(37056), + 3335: uint16(2577), + 3336: uint16(26918), + 3338: uint16(26937), + 3339: uint16(31301), + 3341: uint16(27130), + 3342: uint16(39462), + 3343: uint16(27181), + 3344: uint16(13919), + 3345: uint16(25705), + 3346: uint16(33), + 3347: uint16(31107), + 3348: uint16(27188), + 3349: uint16(27483), + 3350: uint16(23852), + 3351: uint16(13593), + 3353: uint16(27549), + 3354: uint16(18128), + 3355: uint16(27812), + 3356: uint16(30011), + 3357: uint16(34917), + 3358: uint16(28078), + 3359: uint16(22710), + 3360: uint16(14108), + 3361: uint16(9613), + 3362: uint16(28747), + 3363: uint16(29133), + 3364: uint16(15444), + 3365: uint16(29312), + 3366: uint16(29317), + 3367: uint16(37505), + 3368: uint16(8570), + 3369: uint16(29323), + 3370: uint16(37680), + 3371: uint16(29414), + 3372: uint16(18896), + 3373: uint16(27705), + 3374: uint16(38047), + 3375: uint16(29776), + 3376: uint16(3832), + 3377: uint16(34855), + 3378: uint16(35061), + 3379: uint16(10534), + 3380: uint16(33907), + 3381: uint16(6065), + 3382: uint16(28344), + 3383: uint16(18986), + 3384: uint16(6176), + 3385: uint16(14756), + 3386: uint16(14009), + 3389: uint16(17727), + 3390: uint16(26294), + 3391: uint16(40109), + 3392: uint16(39076), + 3393: uint16(35139), + 3394: uint16(30668), + 3395: uint16(30808), + 3396: uint16(22230), + 3397: uint16(16607), + 3398: uint16(5642), + 3399: uint16(14753), + 3400: uint16(14127), + 3401: uint16(33000), + 3402: uint16(5061), + 3403: uint16(29101), + 3404: uint16(33638), + 3405: uint16(31197), + 3406: uint16(37288), + 3408: uint16(19639), + 3409: uint16(28847), + 3410: uint16(35243), + 3411: uint16(31229), + 3412: uint16(31242), + 3413: uint16(31499), + 3414: uint16(32102), + 3415: uint16(16762), + 3416: uint16(31555), + 3417: uint16(31102), + 3418: uint16(32777), + 3419: uint16(28597), + 3420: uint16(41695), + 3421: uint16(27139), + 3422: uint16(33560), + 3423: uint16(21410), + 3424: uint16(28167), + 3425: uint16(37823), + 3426: uint16(26678), + 3427: uint16(38749), + 3428: uint16(33135), + 3429: uint16(32803), + 3430: uint16(27061), + 3431: uint16(5101), + 3432: uint16(12847), + 3433: uint16(32840), + 3434: uint16(23941), + 3435: uint16(35888), + 3436: uint16(32899), + 3437: uint16(22293), + 3438: uint16(38947), + 3439: uint16(35145), + 3440: uint16(23979), + 3441: uint16(18824), + 3442: uint16(26046), + 3443: uint16(27093), + 3444: uint16(21458), + 3445: uint16(19109), + 3446: uint16(16257), + 3447: uint16(15377), + 3448: uint16(26422), + 3449: uint16(32912), + 3450: uint16(33012), + 3451: uint16(33070), + 3452: uint16(8097), + 3453: uint16(33103), + 3454: uint16(33161), + 3455: uint16(33199), + 3456: uint16(33306), + 3457: uint16(33542), + 3458: uint16(33583), + 3459: uint16(33674), + 3460: uint16(13770), + 3461: uint16(33896), + 3462: uint16(34474), + 3463: uint16(18682), + 3464: uint16(25574), + 3465: uint16(35158), + 3466: uint16(30728), + 3467: uint16(37461), + 3468: uint16(35256), + 3469: uint16(17394), + 3470: uint16(35303), + 3471: uint16(17375), + 3472: uint16(35304), + 3473: uint16(35654), + 3474: uint16(35796), + 3475: uint16(23032), + 3476: uint16(35849), + 3478: uint16(36805), + 3479: uint16(37100), + 3481: uint16(37136), + 3482: uint16(37180), + 3483: uint16(15863), + 3484: uint16(37214), + 3485: uint16(19146), + 3486: uint16(36816), + 3487: uint16(29327), + 3488: uint16(22155), + 3489: uint16(38119), + 3490: uint16(38377), + 3491: uint16(38320), + 3492: uint16(38328), + 3493: uint16(38706), + 3494: uint16(39121), + 3495: uint16(39241), + 3496: uint16(39274), + 3497: uint16(39363), + 3498: uint16(39464), + 3499: uint16(39694), + 3500: uint16(40282), + 3501: uint16(40347), + 3502: uint16(32415), + 3503: uint16(40696), + 3504: uint16(40739), + 3505: uint16(19620), + 3506: uint16(38215), + 3507: uint16(41619), + 3508: uint16(29090), + 3509: uint16(41727), + 3510: uint16(19857), + 3511: uint16(36882), + 3512: uint16(42443), + 3513: uint16(19868), + 3514: uint16(3228), + 3515: uint16(36798), + 3516: uint16(21953), + 3517: uint16(36794), + 3518: uint16(9392), + 3519: uint16(36793), + 3520: uint16(19091), + 3521: uint16(17673), + 3522: uint16(32383), + 3523: uint16(28502), + 3524: uint16(27313), + 3525: uint16(20202), + 3526: uint16(13540), + 3527: uint16(35628), + 3528: uint16(30877), + 3529: uint16(14138), + 3530: uint16(36480), + 3531: uint16(6133), + 3532: uint16(32804), + 3533: uint16(35692), + 3534: uint16(35737), + 3535: uint16(31294), + 3536: uint16(26287), + 3537: uint16(15851), + 3538: uint16(30293), + 3539: uint16(15543), + 3540: uint16(22069), + 3541: uint16(22870), + 3542: uint16(20122), + 3543: uint16(24193), + 3544: uint16(25176), + 3545: uint16(22207), + 3546: uint16(3693), + 3547: uint16(36366), + 3548: uint16(23405), + 3549: uint16(16008), + 3550: uint16(19614), + 3551: uint16(25566), + 3553: uint16(6134), + 3554: uint16(6267), + 3555: uint16(25904), + 3556: uint16(22061), + 3557: uint16(23626), + 3558: uint16(21530), + 3559: uint16(21265), + 3560: uint16(15814), + 3561: uint16(40344), + 3562: uint16(19581), + 3563: uint16(22050), + 3564: uint16(22046), + 3565: uint16(32585), + 3566: uint16(24280), + 3567: uint16(22901), + 3568: uint16(15680), + 3569: uint16(34672), + 3570: uint16(19996), + 3571: uint16(4074), + 3572: uint16(3401), + 3573: uint16(14010), + 3574: uint16(33047), + 3575: uint16(40286), + 3576: uint16(36120), + 3577: uint16(30267), + 3578: uint16(40005), + 3579: uint16(30286), + 3580: uint16(30649), + 3581: uint16(37701), + 3582: uint16(21554), + 3583: uint16(33096), + 3584: uint16(33527), + 3585: uint16(22053), + 3586: uint16(33074), + 3587: uint16(33816), + 3588: uint16(32957), + 3589: uint16(21994), + 3590: uint16(31074), + 3591: uint16(22083), + 3592: uint16(21526), + 3593: uint16(3741), + 3594: uint16(13774), + 3595: uint16(22021), + 3596: uint16(22001), + 3597: uint16(26353), + 3598: uint16(33506), + 3599: uint16(13869), + 3600: uint16(30004), + 3601: uint16(22000), + 3602: uint16(21946), + 3603: uint16(21655), + 3604: uint16(21874), + 3605: uint16(3137), + 3606: uint16(3222), + 3607: uint16(24272), + 3608: uint16(20808), + 3609: uint16(3702), + 3610: uint16(11362), + 3611: uint16(3746), + 3612: uint16(40619), + 3613: uint16(32090), + 3614: uint16(21982), + 3615: uint16(4213), + 3616: uint16(25245), + 3617: uint16(38765), + 3618: uint16(21652), + 3619: uint16(36045), + 3620: uint16(29174), + 3621: uint16(37238), + 3622: uint16(25596), + 3623: uint16(25529), + 3624: uint16(25598), + 3625: uint16(21865), + 3626: uint16(11075), + 3627: uint16(40050), + 3628: uint16(11955), + 3629: uint16(20890), + 3630: uint16(13535), + 3631: uint16(3495), + 3632: uint16(20903), + 3633: uint16(21581), + 3634: uint16(21790), + 3635: uint16(21779), + 3636: uint16(30310), + 3637: uint16(36397), + 3638: uint16(26762), + 3639: uint16(30129), + 3640: uint16(32950), + 3641: uint16(34820), + 3642: uint16(34694), + 3643: uint16(35015), + 3644: uint16(33206), + 3645: uint16(33820), + 3646: uint16(4289), + 3647: uint16(17644), + 3648: uint16(29444), + 3649: uint16(18182), + 3650: uint16(23440), + 3651: uint16(33547), + 3652: uint16(26771), + 3653: uint16(22139), + 3654: uint16(9972), + 3655: uint16(32047), + 3656: uint16(16803), + 3657: uint16(32115), + 3658: uint16(28368), + 3659: uint16(29366), + 3660: uint16(37232), + 3661: uint16(4569), + 3662: uint16(37384), + 3663: uint16(15612), + 3664: uint16(42665), + 3665: uint16(3756), + 3666: uint16(3833), + 3667: uint16(29286), + 3668: uint16(7330), + 3669: uint16(18254), + 3670: uint16(20418), + 3671: uint16(32761), + 3672: uint16(4075), + 3673: uint16(16634), + 3674: uint16(40029), + 3675: uint16(25887), + 3676: uint16(11680), + 3677: uint16(18675), + 3678: uint16(18400), + 3679: uint16(40316), + 3680: uint16(4076), + 3681: uint16(3594), + 3683: uint16(30115), + 3684: uint16(4077), + 3686: uint16(24648), + 3687: uint16(4487), + 3688: uint16(29091), + 3689: uint16(32398), + 3690: uint16(40272), + 3691: uint16(19994), + 3692: uint16(19972), + 3693: uint16(13687), + 3694: uint16(23309), + 3695: uint16(27826), + 3696: uint16(21351), + 3697: uint16(13996), + 3698: uint16(14812), + 3699: uint16(21373), + 3700: uint16(13989), + 3701: uint16(17944), + 3702: uint16(22682), + 3703: uint16(19310), + 3704: uint16(33325), + 3705: uint16(21579), + 3706: uint16(22442), + 3707: uint16(23189), + 3708: uint16(2425), + 3710: uint16(14930), + 3711: uint16(9317), + 3712: uint16(29556), + 3713: uint16(40620), + 3714: uint16(19721), + 3715: uint16(39917), + 3716: uint16(15614), + 3717: uint16(40752), + 3718: uint16(19547), + 3719: uint16(20393), + 3720: uint16(38302), + 3721: uint16(40926), + 3722: uint16(33884), + 3723: uint16(15798), + 3724: uint16(29362), + 3725: uint16(26547), + 3726: uint16(14112), + 3727: uint16(25390), + 3728: uint16(32037), + 3729: uint16(16119), + 3730: uint16(15916), + 3731: uint16(14890), + 3732: uint16(36872), + 3733: uint16(21196), + 3734: uint16(15988), + 3735: uint16(13946), + 3736: uint16(17897), + 3737: uint16(1166), + 3738: uint16(30272), + 3739: uint16(23280), + 3740: uint16(3766), + 3741: uint16(30842), + 3742: uint16(32558), + 3743: uint16(22695), + 3744: uint16(16575), + 3745: uint16(22140), + 3746: uint16(39819), + 3747: uint16(23924), + 3748: uint16(30292), + 3749: uint16(42036), + 3750: uint16(40581), + 3751: uint16(19681), + 3753: uint16(14331), + 3754: uint16(24857), + 3755: uint16(12506), + 3756: uint16(17394), + 3758: uint16(22109), + 3759: uint16(4777), + 3760: uint16(22439), + 3761: uint16(18787), + 3762: uint16(40454), + 3763: uint16(21044), + 3764: uint16(28846), + 3765: uint16(13741), + 3767: uint16(40316), + 3768: uint16(31830), + 3769: uint16(39737), + 3770: uint16(22494), + 3771: uint16(5996), + 3772: uint16(23635), + 3773: uint16(25811), + 3774: uint16(38096), + 3775: uint16(25397), + 3776: uint16(29028), + 3777: uint16(34477), + 3778: uint16(3368), + 3779: uint16(27938), + 3780: uint16(19170), + 3781: uint16(3441), + 3783: uint16(20990), + 3784: uint16(7951), + 3785: uint16(23950), + 3786: uint16(38659), + 3787: uint16(7633), + 3788: uint16(40577), + 3789: uint16(36940), + 3790: uint16(31519), + 3791: uint16(39682), + 3792: uint16(23761), + 3793: uint16(31651), + 3794: uint16(25192), + 3795: uint16(25397), + 3796: uint16(39679), + 3797: uint16(31695), + 3798: uint16(39722), + 3799: uint16(31870), + 3801: uint16(31810), + 3802: uint16(31878), + 3803: uint16(39957), + 3804: uint16(31740), + 3805: uint16(39689), + 3807: uint16(39963), + 3808: uint16(18750), + 3809: uint16(40794), + 3810: uint16(21875), + 3811: uint16(23491), + 3812: uint16(20477), + 3813: uint16(40600), + 3814: uint16(20466), + 3815: uint16(21088), + 3816: uint16(15878), + 3817: uint16(21201), + 3818: uint16(22375), + 3819: uint16(20566), + 3820: uint16(22967), + 3821: uint16(24082), + 3822: uint16(38856), + 3823: uint16(40363), + 3824: uint16(36700), + 3825: uint16(21609), + 3826: uint16(38836), + 3827: uint16(39232), + 3828: uint16(38842), + 3829: uint16(21292), + 3830: uint16(24880), + 3831: uint16(26924), + 3832: uint16(21466), + 3833: uint16(39946), + 3834: uint16(40194), + 3835: uint16(19515), + 3836: uint16(38465), + 3837: uint16(27008), + 3838: uint16(20646), + 3839: uint16(30022), + 3840: uint16(5997), + 3841: uint16(39386), + 3842: uint16(21107), + 3844: uint16(37209), + 3845: uint16(38529), + 3846: uint16(37212), + 3848: uint16(37201), + 3849: uint16(36503), + 3850: uint16(25471), + 3851: uint16(27939), + 3852: uint16(27338), + 3853: uint16(22033), + 3854: uint16(37262), + 3855: uint16(30074), + 3856: uint16(25221), + 3857: uint16(1020), + 3858: uint16(29519), + 3859: uint16(31856), + 3860: uint16(23585), + 3861: uint16(15613), + 3863: uint16(18713), + 3864: uint16(30422), + 3865: uint16(39837), + 3866: uint16(20010), + 3867: uint16(3284), + 3868: uint16(33726), + 3869: uint16(34882), + 3871: uint16(23626), + 3872: uint16(27072), + 3874: uint16(22394), + 3875: uint16(21023), + 3876: uint16(24053), + 3877: uint16(20174), + 3878: uint16(27697), + 3879: uint16(498), + 3880: uint16(20281), + 3881: uint16(21660), + 3882: uint16(21722), + 3883: uint16(21146), + 3884: uint16(36226), + 3885: uint16(13822), + 3887: uint16(13811), + 3889: uint16(27474), + 3890: uint16(37244), + 3891: uint16(40869), + 3892: uint16(39831), + 3893: uint16(38958), + 3894: uint16(39092), + 3895: uint16(39610), + 3896: uint16(40616), + 3897: uint16(40580), + 3898: uint16(29050), + 3899: uint16(31508), + 3901: uint16(27642), + 3902: uint16(34840), + 3903: uint16(32632), + 3905: uint16(22048), + 3906: uint16(42570), + 3907: uint16(36471), + 3908: uint16(40787), + 3910: uint16(36308), + 3911: uint16(36431), + 3912: uint16(40476), + 3913: uint16(36353), + 3914: uint16(25218), + 3915: uint16(33661), + 3916: uint16(36392), + 3917: uint16(36469), + 3918: uint16(31443), + 3919: uint16(19063), + 3920: uint16(31294), + 3921: uint16(30936), + 3922: uint16(27882), + 3923: uint16(35431), + 3924: uint16(30215), + 3925: uint16(35418), + 3926: uint16(40742), + 3927: uint16(27854), + 3928: uint16(34774), + 3929: uint16(30147), + 3930: uint16(41650), + 3931: uint16(30803), + 3932: uint16(63552), + 3933: uint16(36108), + 3934: uint16(29410), + 3935: uint16(29553), + 3936: uint16(35629), + 3937: uint16(29442), + 3938: uint16(29937), + 3939: uint16(36075), + 3940: uint16(19131), + 3941: uint16(34351), + 3942: uint16(24506), + 3943: uint16(34976), + 3944: uint16(17591), + 3946: uint16(6203), + 3947: uint16(28165), + 3949: uint16(35454), + 3950: uint16(9499), + 3952: uint16(24829), + 3953: uint16(30311), + 3954: uint16(39639), + 3955: uint16(40260), + 3956: uint16(37742), + 3957: uint16(39823), + 3958: uint16(34805), + 3961: uint16(36087), + 3962: uint16(29484), + 3963: uint16(38689), + 3964: uint16(39856), + 3965: uint16(13782), + 3966: uint16(29362), + 3967: uint16(19463), + 3968: uint16(31825), + 3969: uint16(39242), + 3970: uint16(24921), + 3971: uint16(24921), + 3972: uint16(19460), + 3973: uint16(40598), + 3974: uint16(24957), + 3976: uint16(22367), + 3977: uint16(24943), + 3978: uint16(25254), + 3979: uint16(25145), + 3981: uint16(14940), + 3982: uint16(25058), + 3983: uint16(21418), + 3984: uint16(13301), + 3985: uint16(25444), + 3986: uint16(26626), + 3987: uint16(13778), + 3988: uint16(23895), + 3989: uint16(35778), + 3990: uint16(36826), + 3991: uint16(36409), + 3993: uint16(20697), + 3994: uint16(7494), + 3995: uint16(30982), + 3996: uint16(21298), + 3997: uint16(38456), + 3998: uint16(3899), + 3999: uint16(16485), + 4001: uint16(30718), + 4003: uint16(31938), + 4004: uint16(24346), + 4005: uint16(31962), + 4006: uint16(31277), + 4007: uint16(32870), + 4008: uint16(32867), + 4009: uint16(32077), + 4010: uint16(29957), + 4011: uint16(29938), + 4012: uint16(35220), + 4013: uint16(33306), + 4014: uint16(26380), + 4015: uint16(32866), + 4016: uint16(29830), + 4017: uint16(32859), + 4018: uint16(29936), + 4019: uint16(33027), + 4020: uint16(30500), + 4021: uint16(35209), + 4022: uint16(26572), + 4023: uint16(30035), + 4024: uint16(28369), + 4025: uint16(34729), + 4026: uint16(34766), + 4027: uint16(33224), + 4028: uint16(34700), + 4029: uint16(35401), + 4030: uint16(36013), + 4031: uint16(35651), + 4032: uint16(30507), + 4033: uint16(29944), + 4034: uint16(34010), + 4035: uint16(13877), + 4036: uint16(27058), + 4037: uint16(36262), + 4039: uint16(35241), + 4041: uint16(28089), + 4042: uint16(34753), + 4043: uint16(16401), + 4044: uint16(29927), + 4045: uint16(15835), + 4046: uint16(29046), + 4047: uint16(24740), + 4048: uint16(24988), + 4049: uint16(15569), + 4051: uint16(24695), + 4053: uint16(32625), + 4054: uint16(35629), + 4056: uint16(24809), + 4057: uint16(19326), + 4058: uint16(21024), + 4059: uint16(15384), + 4060: uint16(15559), + 4061: uint16(24279), + 4062: uint16(30294), + 4063: uint16(21809), + 4064: uint16(6468), + 4065: uint16(4862), + 4066: uint16(39171), + 4067: uint16(28124), + 4068: uint16(28845), + 4069: uint16(23745), + 4070: uint16(25005), + 4071: uint16(35343), + 4072: uint16(13943), + 4073: uint16(238), + 4074: uint16(26694), + 4075: uint16(20238), + 4076: uint16(17762), + 4077: uint16(23327), + 4078: uint16(25420), + 4079: uint16(40784), + 4080: uint16(40614), + 4081: uint16(25195), + 4082: uint16(1351), + 4083: uint16(37595), + 4084: uint16(1503), + 4085: uint16(16325), + 4086: uint16(34124), + 4087: uint16(17077), + 4088: uint16(29679), + 4089: uint16(20917), + 4090: uint16(13897), + 4091: uint16(18754), + 4092: uint16(35300), + 4093: uint16(37700), + 4094: uint16(6619), + 4095: uint16(33518), + 4096: uint16(15560), + 4097: uint16(30780), + 4098: uint16(26436), + 4099: uint16(25311), + 4100: uint16(18739), + 4101: uint16(35242), + 4102: uint16(672), + 4103: uint16(27571), + 4104: uint16(4869), + 4105: uint16(20395), + 4106: uint16(9453), + 4107: uint16(20488), + 4108: uint16(27945), + 4109: uint16(31364), + 4110: uint16(13824), + 4111: uint16(19121), + 4112: uint16(9491), + 4114: uint16(894), + 4115: uint16(24484), + 4116: uint16(896), + 4117: uint16(839), + 4118: uint16(28379), + 4119: uint16(1055), + 4121: uint16(20737), + 4122: uint16(13434), + 4123: uint16(20750), + 4124: uint16(39020), + 4125: uint16(14147), + 4126: uint16(33814), + 4127: uint16(18852), + 4128: uint16(1159), + 4129: uint16(20832), + 4130: uint16(13236), + 4131: uint16(20842), + 4132: uint16(3071), + 4133: uint16(8444), + 4134: uint16(741), + 4135: uint16(9520), + 4136: uint16(1422), + 4137: uint16(12851), + 4138: uint16(6531), + 4139: uint16(23426), + 4140: uint16(34685), + 4141: uint16(1459), + 4142: uint16(15513), + 4143: uint16(20914), + 4144: uint16(20920), + 4145: uint16(40244), + 4146: uint16(20937), + 4147: uint16(20943), + 4148: uint16(20945), + 4149: uint16(15580), + 4150: uint16(20947), + 4151: uint16(19110), + 4152: uint16(20915), + 4153: uint16(20962), + 4154: uint16(21314), + 4155: uint16(20973), + 4156: uint16(33741), + 4157: uint16(26942), + 4158: uint16(14125), + 4159: uint16(24443), + 4160: uint16(21003), + 4161: uint16(21030), + 4162: uint16(21052), + 4163: uint16(21173), + 4164: uint16(21079), + 4165: uint16(21140), + 4166: uint16(21177), + 4167: uint16(21189), + 4168: uint16(31765), + 4169: uint16(34114), + 4170: uint16(21216), + 4171: uint16(34317), + 4172: uint16(27411), + 4174: uint16(35550), + 4175: uint16(21833), + 4176: uint16(28377), + 4177: uint16(16256), + 4178: uint16(2388), + 4179: uint16(16364), + 4180: uint16(21299), + 4182: uint16(3042), + 4183: uint16(27851), + 4184: uint16(5926), + 4185: uint16(26651), + 4186: uint16(29653), + 4187: uint16(24650), + 4188: uint16(16042), + 4189: uint16(14540), + 4190: uint16(5864), + 4191: uint16(29149), + 4192: uint16(17570), + 4193: uint16(21357), + 4194: uint16(21364), + 4195: uint16(34475), + 4196: uint16(21374), + 4198: uint16(5526), + 4199: uint16(5651), + 4200: uint16(30694), + 4201: uint16(21395), + 4202: uint16(35483), + 4203: uint16(21408), + 4204: uint16(21419), + 4205: uint16(21422), + 4206: uint16(29607), + 4207: uint16(22386), + 4208: uint16(16217), + 4209: uint16(29596), + 4210: uint16(21441), + 4211: uint16(21445), + 4212: uint16(27721), + 4213: uint16(20041), + 4214: uint16(22526), + 4215: uint16(21465), + 4216: uint16(15019), + 4217: uint16(2959), + 4218: uint16(21472), + 4219: uint16(16363), + 4220: uint16(11683), + 4221: uint16(21494), + 4222: uint16(3191), + 4223: uint16(21523), + 4224: uint16(28793), + 4225: uint16(21803), + 4226: uint16(26199), + 4227: uint16(27995), + 4228: uint16(21613), + 4229: uint16(27475), + 4230: uint16(3444), + 4231: uint16(21853), + 4232: uint16(21647), + 4233: uint16(21668), + 4234: uint16(18342), + 4235: uint16(5901), + 4236: uint16(3805), + 4237: uint16(15796), + 4238: uint16(3405), + 4239: uint16(35260), + 4240: uint16(9880), + 4241: uint16(21831), + 4242: uint16(19693), + 4243: uint16(21551), + 4244: uint16(29719), + 4245: uint16(21894), + 4246: uint16(21929), + 4248: uint16(6359), + 4249: uint16(16442), + 4250: uint16(17746), + 4251: uint16(17461), + 4252: uint16(26291), + 4253: uint16(4276), + 4254: uint16(22071), + 4255: uint16(26317), + 4256: uint16(12938), + 4257: uint16(26276), + 4258: uint16(26285), + 4259: uint16(22093), + 4260: uint16(22095), + 4261: uint16(30961), + 4262: uint16(22257), + 4263: uint16(38791), + 4264: uint16(21502), + 4265: uint16(22272), + 4266: uint16(22255), + 4267: uint16(22253), + 4268: uint16(35686), + 4269: uint16(13859), + 4270: uint16(4687), + 4271: uint16(22342), + 4272: uint16(16805), + 4273: uint16(27758), + 4274: uint16(28811), + 4275: uint16(22338), + 4276: uint16(14001), + 4277: uint16(27774), + 4278: uint16(22502), + 4279: uint16(5142), + 4280: uint16(22531), + 4281: uint16(5204), + 4282: uint16(17251), + 4283: uint16(22566), + 4284: uint16(19445), + 4285: uint16(22620), + 4286: uint16(22698), + 4287: uint16(13665), + 4288: uint16(22752), + 4289: uint16(22748), + 4290: uint16(4668), + 4291: uint16(22779), + 4292: uint16(23551), + 4293: uint16(22339), + 4294: uint16(41296), + 4295: uint16(17016), + 4296: uint16(37843), + 4297: uint16(13729), + 4298: uint16(22815), + 4299: uint16(26790), + 4300: uint16(14019), + 4301: uint16(28249), + 4302: uint16(5694), + 4303: uint16(23076), + 4304: uint16(21843), + 4305: uint16(5778), + 4306: uint16(34053), + 4307: uint16(22985), + 4308: uint16(3406), + 4309: uint16(27777), + 4310: uint16(27946), + 4311: uint16(6108), + 4312: uint16(23001), + 4313: uint16(6139), + 4314: uint16(6066), + 4315: uint16(28070), + 4316: uint16(28017), + 4317: uint16(6184), + 4318: uint16(5845), + 4319: uint16(23033), + 4320: uint16(28229), + 4321: uint16(23211), + 4322: uint16(23139), + 4323: uint16(14054), + 4324: uint16(18857), + 4326: uint16(14088), + 4327: uint16(23190), + 4328: uint16(29797), + 4329: uint16(23251), + 4330: uint16(28577), + 4331: uint16(9556), + 4332: uint16(15749), + 4333: uint16(6417), + 4334: uint16(14130), + 4335: uint16(5816), + 4336: uint16(24195), + 4337: uint16(21200), + 4338: uint16(23414), + 4339: uint16(25992), + 4340: uint16(23420), + 4341: uint16(31246), + 4342: uint16(16388), + 4343: uint16(18525), + 4344: uint16(516), + 4345: uint16(23509), + 4346: uint16(24928), + 4347: uint16(6708), + 4348: uint16(22988), + 4349: uint16(1445), + 4350: uint16(23539), + 4351: uint16(23453), + 4352: uint16(19728), + 4353: uint16(23557), + 4354: uint16(6980), + 4355: uint16(23571), + 4356: uint16(29646), + 4357: uint16(23572), + 4358: uint16(7333), + 4359: uint16(27432), + 4360: uint16(23625), + 4361: uint16(18653), + 4362: uint16(23685), + 4363: uint16(23785), + 4364: uint16(23791), + 4365: uint16(23947), + 4366: uint16(7673), + 4367: uint16(7735), + 4368: uint16(23824), + 4369: uint16(23832), + 4370: uint16(23878), + 4371: uint16(7844), + 4372: uint16(23738), + 4373: uint16(24023), + 4374: uint16(33532), + 4375: uint16(14381), + 4376: uint16(18689), + 4377: uint16(8265), + 4378: uint16(8563), + 4379: uint16(33415), + 4380: uint16(14390), + 4381: uint16(15298), + 4382: uint16(24110), + 4383: uint16(27274), + 4385: uint16(24186), + 4386: uint16(17596), + 4387: uint16(3283), + 4388: uint16(21414), + 4389: uint16(20151), + 4391: uint16(21416), + 4392: uint16(6001), + 4393: uint16(24073), + 4394: uint16(24308), + 4395: uint16(33922), + 4396: uint16(24313), + 4397: uint16(24315), + 4398: uint16(14496), + 4399: uint16(24316), + 4400: uint16(26686), + 4401: uint16(37915), + 4402: uint16(24333), + 4403: uint16(449), + 4404: uint16(63636), + 4405: uint16(15070), + 4406: uint16(18606), + 4407: uint16(4922), + 4408: uint16(24378), + 4409: uint16(26760), + 4410: uint16(9168), + 4412: uint16(9329), + 4413: uint16(24419), + 4414: uint16(38845), + 4415: uint16(28270), + 4416: uint16(24434), + 4417: uint16(37696), + 4418: uint16(35382), + 4419: uint16(24487), + 4420: uint16(23990), + 4421: uint16(15711), + 4422: uint16(21072), + 4423: uint16(8042), + 4424: uint16(28920), + 4425: uint16(9832), + 4426: uint16(37334), + 4427: uint16(670), + 4428: uint16(35369), + 4429: uint16(24625), + 4430: uint16(26245), + 4431: uint16(6263), + 4432: uint16(14691), + 4433: uint16(15815), + 4434: uint16(13881), + 4435: uint16(22416), + 4436: uint16(10164), + 4437: uint16(31089), + 4438: uint16(15936), + 4439: uint16(24734), + 4441: uint16(24755), + 4442: uint16(18818), + 4443: uint16(18831), + 4444: uint16(31315), + 4445: uint16(29860), + 4446: uint16(20705), + 4447: uint16(23200), + 4448: uint16(24932), + 4449: uint16(33828), + 4450: uint16(24898), + 4451: uint16(63654), + 4452: uint16(28370), + 4453: uint16(24961), + 4454: uint16(20980), + 4455: uint16(1622), + 4456: uint16(24967), + 4457: uint16(23466), + 4458: uint16(16311), + 4459: uint16(10335), + 4460: uint16(25043), + 4461: uint16(35741), + 4462: uint16(39261), + 4463: uint16(25040), + 4464: uint16(14642), + 4465: uint16(10624), + 4466: uint16(10433), + 4467: uint16(24611), + 4468: uint16(24924), + 4469: uint16(25886), + 4470: uint16(25483), + 4471: uint16(280), + 4472: uint16(25285), + 4473: uint16(6000), + 4474: uint16(25301), + 4475: uint16(11789), + 4476: uint16(25452), + 4477: uint16(18911), + 4478: uint16(14871), + 4479: uint16(25656), + 4480: uint16(25592), + 4481: uint16(5006), + 4482: uint16(6140), + 4484: uint16(28554), + 4485: uint16(11830), + 4486: uint16(38932), + 4487: uint16(16524), + 4488: uint16(22301), + 4489: uint16(25825), + 4490: uint16(25829), + 4491: uint16(38011), + 4492: uint16(14950), + 4493: uint16(25658), + 4494: uint16(14935), + 4495: uint16(25933), + 4496: uint16(28438), + 4497: uint16(18984), + 4498: uint16(18979), + 4499: uint16(25989), + 4500: uint16(25965), + 4501: uint16(25951), + 4502: uint16(12414), + 4503: uint16(26037), + 4504: uint16(18752), + 4505: uint16(19255), + 4506: uint16(26065), + 4507: uint16(16600), + 4508: uint16(6185), + 4509: uint16(26080), + 4510: uint16(26083), + 4511: uint16(24543), + 4512: uint16(13312), + 4513: uint16(26136), + 4514: uint16(12791), + 4515: uint16(12792), + 4516: uint16(26180), + 4517: uint16(12708), + 4518: uint16(12709), + 4519: uint16(26187), + 4520: uint16(3701), + 4521: uint16(26215), + 4522: uint16(20966), + 4523: uint16(26227), + 4525: uint16(7741), + 4526: uint16(12849), + 4527: uint16(34292), + 4528: uint16(12744), + 4529: uint16(21267), + 4530: uint16(30661), + 4531: uint16(10487), + 4532: uint16(39332), + 4533: uint16(26370), + 4534: uint16(17308), + 4535: uint16(18977), + 4536: uint16(15147), + 4537: uint16(27130), + 4538: uint16(14274), + 4540: uint16(26471), + 4541: uint16(26466), + 4542: uint16(16845), + 4543: uint16(37101), + 4544: uint16(26583), + 4545: uint16(17641), + 4546: uint16(26658), + 4547: uint16(28240), + 4548: uint16(37436), + 4549: uint16(26625), + 4550: uint16(13286), + 4551: uint16(28064), + 4552: uint16(26717), + 4553: uint16(13423), + 4554: uint16(27105), + 4555: uint16(27147), + 4556: uint16(35551), + 4557: uint16(26995), + 4558: uint16(26819), + 4559: uint16(13773), + 4560: uint16(26881), + 4561: uint16(26880), + 4562: uint16(15666), + 4563: uint16(14849), + 4564: uint16(13884), + 4565: uint16(15232), + 4566: uint16(26540), + 4567: uint16(26977), + 4568: uint16(35402), + 4569: uint16(17148), + 4570: uint16(26934), + 4571: uint16(27032), + 4572: uint16(15265), + 4573: uint16(969), + 4574: uint16(33635), + 4575: uint16(20624), + 4576: uint16(27129), + 4577: uint16(13913), + 4578: uint16(8490), + 4579: uint16(27205), + 4580: uint16(14083), + 4581: uint16(27293), + 4582: uint16(15347), + 4583: uint16(26545), + 4584: uint16(27336), + 4585: uint16(37276), + 4586: uint16(15373), + 4587: uint16(27421), + 4588: uint16(2339), + 4589: uint16(24798), + 4590: uint16(27445), + 4591: uint16(27508), + 4592: uint16(10189), + 4593: uint16(28341), + 4594: uint16(15067), + 4595: uint16(949), + 4596: uint16(6488), + 4597: uint16(14144), + 4598: uint16(21537), + 4599: uint16(15194), + 4600: uint16(27617), + 4601: uint16(16124), + 4602: uint16(27612), + 4603: uint16(27703), + 4604: uint16(9355), + 4605: uint16(18673), + 4606: uint16(27473), + 4607: uint16(27738), + 4608: uint16(33318), + 4609: uint16(27769), + 4610: uint16(15804), + 4611: uint16(17605), + 4612: uint16(15805), + 4613: uint16(16804), + 4614: uint16(18700), + 4615: uint16(18688), + 4616: uint16(15561), + 4617: uint16(14053), + 4618: uint16(15595), + 4619: uint16(3378), + 4620: uint16(39811), + 4621: uint16(12793), + 4622: uint16(9361), + 4623: uint16(32655), + 4624: uint16(26679), + 4625: uint16(27941), + 4626: uint16(28065), + 4627: uint16(28139), + 4628: uint16(28054), + 4629: uint16(27996), + 4630: uint16(28284), + 4631: uint16(28420), + 4632: uint16(18815), + 4633: uint16(16517), + 4634: uint16(28274), + 4635: uint16(34099), + 4636: uint16(28532), + 4637: uint16(20935), + 4640: uint16(33838), + 4641: uint16(35617), + 4643: uint16(15919), + 4644: uint16(29779), + 4645: uint16(16258), + 4646: uint16(31180), + 4647: uint16(28239), + 4648: uint16(23185), + 4649: uint16(12363), + 4650: uint16(28664), + 4651: uint16(14093), + 4652: uint16(28573), + 4653: uint16(15920), + 4654: uint16(28410), + 4655: uint16(5271), + 4656: uint16(16445), + 4657: uint16(17749), + 4658: uint16(37872), + 4659: uint16(28484), + 4660: uint16(28508), + 4661: uint16(15694), + 4662: uint16(28532), + 4663: uint16(37232), + 4664: uint16(15675), + 4665: uint16(28575), + 4666: uint16(16708), + 4667: uint16(28627), + 4668: uint16(16529), + 4669: uint16(16725), + 4670: uint16(16441), + 4671: uint16(16368), + 4672: uint16(16308), + 4673: uint16(16703), + 4674: uint16(20959), + 4675: uint16(16726), + 4676: uint16(16727), + 4677: uint16(16704), + 4678: uint16(25053), + 4679: uint16(28747), + 4680: uint16(28798), + 4681: uint16(28839), + 4682: uint16(28801), + 4683: uint16(28876), + 4684: uint16(28885), + 4685: uint16(28886), + 4686: uint16(28895), + 4687: uint16(16644), + 4688: uint16(15848), + 4689: uint16(29108), + 4690: uint16(29078), + 4691: uint16(17015), + 4692: uint16(28971), + 4693: uint16(28997), + 4694: uint16(23176), + 4695: uint16(29002), + 4697: uint16(23708), + 4698: uint16(17253), + 4699: uint16(29007), + 4700: uint16(37730), + 4701: uint16(17089), + 4702: uint16(28972), + 4703: uint16(17498), + 4704: uint16(18983), + 4705: uint16(18978), + 4706: uint16(29114), + 4707: uint16(35816), + 4708: uint16(28861), + 4709: uint16(29198), + 4710: uint16(37954), + 4711: uint16(29205), + 4712: uint16(22801), + 4713: uint16(37955), + 4714: uint16(29220), + 4715: uint16(37697), + 4716: uint16(22021), + 4717: uint16(29230), + 4718: uint16(29248), + 4719: uint16(18804), + 4720: uint16(26813), + 4721: uint16(29269), + 4722: uint16(29271), + 4723: uint16(15957), + 4724: uint16(12356), + 4725: uint16(26637), + 4726: uint16(28477), + 4727: uint16(29314), + 4729: uint16(29483), + 4730: uint16(18467), + 4731: uint16(34859), + 4732: uint16(18669), + 4733: uint16(34820), + 4734: uint16(29480), + 4735: uint16(29486), + 4736: uint16(29647), + 4737: uint16(29610), + 4738: uint16(3130), + 4739: uint16(27182), + 4740: uint16(29641), + 4741: uint16(29769), + 4742: uint16(16866), + 4743: uint16(5863), + 4744: uint16(18980), + 4745: uint16(26147), + 4746: uint16(14021), + 4747: uint16(18871), + 4748: uint16(18829), + 4749: uint16(18939), + 4750: uint16(29687), + 4751: uint16(29717), + 4752: uint16(26883), + 4753: uint16(18982), + 4754: uint16(29753), + 4755: uint16(1475), + 4756: uint16(16087), + 4758: uint16(10413), + 4759: uint16(29792), + 4760: uint16(36530), + 4761: uint16(29767), + 4762: uint16(29668), + 4763: uint16(29814), + 4764: uint16(33721), + 4765: uint16(29804), + 4766: uint16(14128), + 4767: uint16(29812), + 4768: uint16(37873), + 4769: uint16(27180), + 4770: uint16(29826), + 4771: uint16(18771), + 4772: uint16(19084), + 4773: uint16(16735), + 4774: uint16(19065), + 4775: uint16(35727), + 4776: uint16(23366), + 4777: uint16(35843), + 4778: uint16(6302), + 4779: uint16(29896), + 4780: uint16(6536), + 4781: uint16(29966), + 4783: uint16(29982), + 4784: uint16(36569), + 4785: uint16(6731), + 4786: uint16(23511), + 4787: uint16(36524), + 4788: uint16(37765), + 4789: uint16(30029), + 4790: uint16(30026), + 4791: uint16(30055), + 4792: uint16(30062), + 4793: uint16(20354), + 4794: uint16(16132), + 4795: uint16(19731), + 4796: uint16(30094), + 4797: uint16(29789), + 4798: uint16(30110), + 4799: uint16(30132), + 4800: uint16(30210), + 4801: uint16(30252), + 4802: uint16(30289), + 4803: uint16(30287), + 4804: uint16(30319), + 4805: uint16(30326), + 4806: uint16(25589), + 4807: uint16(30352), + 4808: uint16(33263), + 4809: uint16(14328), + 4810: uint16(26897), + 4811: uint16(26894), + 4812: uint16(30369), + 4813: uint16(30373), + 4814: uint16(30391), + 4815: uint16(30412), + 4816: uint16(28575), + 4817: uint16(33890), + 4818: uint16(20637), + 4819: uint16(20861), + 4820: uint16(7708), + 4821: uint16(30494), + 4822: uint16(30502), + 4823: uint16(30528), + 4824: uint16(25775), + 4825: uint16(21024), + 4826: uint16(30552), + 4827: uint16(12972), + 4828: uint16(30639), + 4829: uint16(35172), + 4830: uint16(35176), + 4831: uint16(5825), + 4832: uint16(30708), + 4834: uint16(4982), + 4835: uint16(18962), + 4836: uint16(26826), + 4837: uint16(30895), + 4838: uint16(30919), + 4839: uint16(30931), + 4840: uint16(38565), + 4841: uint16(31022), + 4842: uint16(21984), + 4843: uint16(30935), + 4844: uint16(31028), + 4845: uint16(30897), + 4846: uint16(30220), + 4847: uint16(36792), + 4848: uint16(34948), + 4849: uint16(35627), + 4850: uint16(24707), + 4851: uint16(9756), + 4852: uint16(31110), + 4853: uint16(35072), + 4854: uint16(26882), + 4855: uint16(31104), + 4856: uint16(22615), + 4857: uint16(31133), + 4858: uint16(31545), + 4859: uint16(31036), + 4860: uint16(31145), + 4861: uint16(28202), + 4862: uint16(28966), + 4863: uint16(16040), + 4864: uint16(31174), + 4865: uint16(37133), + 4866: uint16(31188), + 4867: uint16(1312), + 4868: uint16(17503), + 4869: uint16(21007), + 4870: uint16(47234), + 4871: uint16(248), + 4872: uint16(16384), + 4873: uint16(43296), + 4874: uint16(1102), + 4877: uint16(2868), + 4878: uint16(1), + 4886: uint16(3072), + 4887: uint16(64), + 4891: uint16(1024), + 4892: uint16(88), + 4893: uint16(60), + 4896: uint16(23680), + 4897: uint16(56493), + 4898: uint16(48115), + 4899: uint16(17353), + 4900: uint16(60910), + 4901: uint16(4004), + 4902: uint16(49446), + 4903: uint16(30363), + 4904: uint16(61426), + 4905: uint16(64478), + 4906: uint16(63482), + 4907: uint16(12815), + 4908: uint16(44868), + 4909: uint16(61438), + 4910: uint16(65277), + 4911: uint16(24593), + 4912: uint16(176), + 4913: uint16(8448), + 4914: uint16(33049), + 4915: uint16(4128), + 4916: uint16(43144), + 4917: uint16(8544), + 4918: uint16(9321), + 4919: uint16(17408), + 4920: uint16(50313), + 4922: uint16(16387), + 4923: uint16(53), + 4924: uint16(33859), + 4925: uint16(20785), + 4926: uint16(26771), + 4927: uint16(514), + 4933: uint16(16384), + 4934: uint16(256), + 4935: uint16(44160), + 4936: uint16(33380), + 4937: uint16(35904), + 4938: uint16(37025), + 4939: uint16(20484), + 4940: uint16(54368), + 4941: uint16(53760), + 4942: uint16(6186), + 4943: uint16(26781), + 4944: uint16(38709), + 4945: uint16(55375), + 4946: uint16(8440), + 4947: uint16(33476), + 4948: uint16(10268), + 4949: uint16(30082), + 4950: uint16(660), + 4951: uint16(16440), + 4952: uint16(41376), + 4953: uint16(4293), + 4954: uint16(19825), + 4955: uint16(3524), + 4956: uint16(47512), + 4957: uint16(23390), + 4958: uint16(17153), + 4959: uint16(39327), + 4960: uint16(30723), + 4961: uint16(57888), + 4962: uint16(2079), + 4963: uint16(393), + 4964: uint16(16585), + 4965: uint16(775), + 4966: uint16(39437), + 4967: uint16(21136), + 4968: uint16(20433), + 4969: uint16(892), + 4970: uint16(8450), + 4971: uint16(49184), + 4972: uint16(4974), + 4973: uint16(46467), + 4974: uint16(62939), + 4975: uint16(30693), + 4976: uint16(20368), + 4977: uint16(39447), + 4978: uint16(5942), + 4979: uint16(12), + 4980: uint16(47726), + 4981: uint16(12041), + 4982: uint16(21600), + 4983: uint16(7680), + 4984: uint16(26744), + 4985: uint16(28706), + 4986: uint16(40534), + 4987: uint16(62245), + 4988: uint16(46990), + 4989: uint16(2839), + 4990: uint16(59119), + 4991: uint16(6007), + 4992: uint16(7003), + 4993: uint16(4289), + 4994: uint16(36248), + 4995: uint16(6162), + 4996: uint16(53174), + 4997: uint16(12545), + 4998: uint16(6770), + 4999: uint16(11355), + 5000: uint16(49334), + 5001: uint16(57888), + 5002: uint16(23747), + 5003: uint16(7042), + 5004: uint16(56032), + 5005: uint16(34254), + 5006: uint16(16598), + 5007: uint16(21673), + 5008: uint16(53259), + 5009: uint16(18447), + 5010: uint16(16452), + 5011: uint16(2320), + 5012: uint16(16596), + 5013: uint16(15278), + 5014: uint16(7780), + 5015: uint16(11076), + 5016: uint16(2071), + 5017: uint16(33414), + 5018: uint16(6198), + 5019: uint16(35232), + 5020: uint16(40167), + 5021: uint16(2139), + 5022: uint16(900), + 5023: uint16(55810), + 5024: uint16(60560), + 5025: uint16(34779), + 5026: uint16(49029), + 5027: uint16(44450), + 5028: uint16(36509), + 5029: uint16(39069), + 5030: uint16(9504), + 5031: uint16(70), + 5032: uint16(40774), + 5033: uint16(58239), + 5034: uint16(51669), + 5035: uint16(62596), + 5036: uint16(19926), + 5037: uint16(58118), + 5038: uint16(6326), + 5039: uint16(2322), + 5041: uint16(1024), + 5043: uint16(32), + 5045: uint16(512), + 5050: uint16(8192), + 5057: uint16(8), + 5058: uint16(36352), + 5059: uint16(28280), + 5060: uint16(16223), + 5061: uint16(56702), + 5062: uint16(63293), + 5063: uint16(39932), + 5064: uint16(44796), + 5065: uint16(65490), + 5066: uint16(27535), + 5067: uint16(59377), + 5068: uint16(47807), + 5069: uint16(28334), + 5070: uint16(61207), + 5071: uint16(42972), + 5072: uint16(46654), + 5073: uint16(30645), + 5074: uint16(37577), + 5075: uint16(42455), + 5076: uint16(19126), + 5077: uint16(39790), + 5078: uint16(33209), + 5079: uint16(26445), + 5080: uint16(21758), + 5081: uint16(39921), + 5082: uint16(65122), + 5083: uint16(21103), + 5084: uint16(14039), + 5085: uint16(49150), + 5086: uint16(17705), + 5087: uint16(63873), + 5088: uint16(26045), + 5089: uint16(17062), + 5090: uint16(57), + 5091: uint16(16896), + 5092: uint16(36704), + 5093: uint16(37888), + 5094: uint16(16448), + 5095: uint16(45010), + 5096: uint16(53719), + 5097: uint16(219), + 5098: uint16(39072), + 5099: uint16(31666), + 5100: uint16(20998), + 5101: uint16(38944), + 5102: uint16(51222), + 5103: uint16(2365), + 5105: uint16(1), + 5107: uint16(2561), + 5108: uint16(2226), + 5109: uint16(128), + 5111: uint16(34820), + 5112: uint16(5152), + 5113: uint16(19472), + 5115: uint16(4), + 5116: uint16(17569), + 5117: uint16(16), + 5118: uint16(321), + 5119: uint16(2048), + 5120: uint16(61504), + 5121: uint16(20447), + 5122: uint16(22582), + 5123: uint16(62961), + 5124: uint16(32949), + 5125: uint16(26613), + 5126: uint16(16512), + 5127: uint16(20480), + 5128: uint16(16718), + 5129: uint16(33992), + 5130: uint16(23040), + 5131: uint16(55392), + 5132: uint16(11009), + 5133: uint16(20481), + 5134: uint16(5793), + 5135: uint16(16580), + 5136: uint16(28402), + 5137: uint16(44049), + 5138: uint16(14624), + 5139: uint16(49348), + 5140: uint16(1800), + 5141: uint16(2316), + 5142: uint16(38552), + 5143: uint16(39876), + 5144: uint16(7184), + 5145: uint16(27800), + 5146: uint16(10886), + 5147: uint16(422), + 5148: uint16(4422), + 5149: uint16(58733), + 5150: uint16(50379), + 5151: uint16(37568), + 5152: uint16(8464), + 5153: uint16(4630), + 5154: uint16(29341), + 5155: uint16(27124), + 5156: uint16(5902), + 5157: uint16(41514), + 5158: uint16(62593), + 5159: uint16(123), + 5160: uint16(41992), + 5161: uint16(36875), + 5162: uint16(11280), + 5163: uint16(14796), + 5164: uint16(330), + 5165: uint16(5872), + 5166: uint16(2571), + 5167: uint16(3136), + 5168: uint16(59933), + 5169: uint16(17420), + 5170: uint16(17678), + 5171: uint16(2), +} + +var _ksc = [93][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(183), + 4: uint16(8229), + 5: uint16(8230), + 6: uint16(168), + 7: uint16(12291), + 8: uint16(173), + 9: uint16(8213), + 10: uint16(8741), + 11: uint16(65340), + 12: uint16(8764), + 13: uint16(8216), + 14: uint16(8217), + 15: uint16(8220), + 16: uint16(8221), + 17: uint16(12308), + 18: uint16(12309), + 19: uint16(12296), + 20: uint16(12297), + 21: uint16(12298), + 22: uint16(12299), + 23: uint16(12300), + 24: uint16(12301), + 25: uint16(12302), + 26: uint16(12303), + 27: uint16(12304), + 28: uint16(12305), + 29: uint16(177), + 30: uint16(215), + 31: uint16(247), + 32: uint16(8800), + 33: uint16(8804), + 34: uint16(8805), + 35: uint16(8734), + 36: uint16(8756), + 37: uint16(176), + 38: uint16(8242), + 39: uint16(8243), + 40: uint16(8451), + 41: uint16(8491), + 42: uint16(65504), + 43: uint16(65505), + 44: uint16(65509), + 45: uint16(9794), + 46: uint16(9792), + 47: uint16(8736), + 48: uint16(8869), + 49: uint16(8978), + 50: uint16(8706), + 51: uint16(8711), + 52: uint16(8801), + 53: uint16(8786), + 54: uint16(167), + 55: uint16(8251), + 56: uint16(9734), + 57: uint16(9733), + 58: uint16(9675), + 59: uint16(9679), + 60: uint16(9678), + 61: uint16(9671), + 62: uint16(9670), + 63: uint16(9633), + 64: uint16(9632), + 65: uint16(9651), + 66: uint16(9650), + 67: uint16(9661), + 68: uint16(9660), + 69: uint16(8594), + 70: uint16(8592), + 71: uint16(8593), + 72: uint16(8595), + 73: uint16(8596), + 74: uint16(12307), + 75: uint16(8810), + 76: uint16(8811), + 77: uint16(8730), + 78: uint16(8765), + 79: uint16(8733), + 80: uint16(8757), + 81: uint16(8747), + 82: uint16(8748), + 83: uint16(8712), + 84: uint16(8715), + 85: uint16(8838), + 86: uint16(8839), + 87: uint16(8834), + 88: uint16(8835), + 89: uint16(8746), + 90: uint16(8745), + 91: uint16(8743), + 92: uint16(8744), + 93: uint16(65506), + }, + 1: { + 0: uint16(8658), + 1: uint16(8660), + 2: uint16(8704), + 3: uint16(8707), + 4: uint16(180), + 5: uint16(65374), + 6: uint16(711), + 7: uint16(728), + 8: uint16(733), + 9: uint16(730), + 10: uint16(729), + 11: uint16(184), + 12: uint16(731), + 13: uint16(161), + 14: uint16(191), + 15: uint16(720), + 16: uint16(8750), + 17: uint16(8721), + 18: uint16(8719), + 19: uint16(164), + 20: uint16(8457), + 21: uint16(8240), + 22: uint16(9665), + 23: uint16(9664), + 24: uint16(9655), + 25: uint16(9654), + 26: uint16(9828), + 27: uint16(9824), + 28: uint16(9825), + 29: uint16(9829), + 30: uint16(9831), + 31: uint16(9827), + 32: uint16(8857), + 33: uint16(9672), + 34: uint16(9635), + 35: uint16(9680), + 36: uint16(9681), + 37: uint16(9618), + 38: uint16(9636), + 39: uint16(9637), + 40: uint16(9640), + 41: uint16(9639), + 42: uint16(9638), + 43: uint16(9641), + 44: uint16(9832), + 45: uint16(9743), + 46: uint16(9742), + 47: uint16(9756), + 48: uint16(9758), + 49: uint16(182), + 50: uint16(8224), + 51: uint16(8225), + 52: uint16(8597), + 53: uint16(8599), + 54: uint16(8601), + 55: uint16(8598), + 56: uint16(8600), + 57: uint16(9837), + 58: uint16(9833), + 59: uint16(9834), + 60: uint16(9836), + 61: uint16(12927), + 62: uint16(12828), + 63: uint16(8470), + 64: uint16(13255), + 65: uint16(8482), + 66: uint16(13250), + 67: uint16(13272), + 68: uint16(8481), + 69: uint16(8364), + 70: uint16(174), + }, + 2: { + 0: uint16(65281), + 1: uint16(65282), + 2: uint16(65283), + 3: uint16(65284), + 4: uint16(65285), + 5: uint16(65286), + 6: uint16(65287), + 7: uint16(65288), + 8: uint16(65289), + 9: uint16(65290), + 10: uint16(65291), + 11: uint16(65292), + 12: uint16(65293), + 13: uint16(65294), + 14: uint16(65295), + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 25: uint16(65306), + 26: uint16(65307), + 27: uint16(65308), + 28: uint16(65309), + 29: uint16(65310), + 30: uint16(65311), + 31: uint16(65312), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 58: uint16(65339), + 59: uint16(65510), + 60: uint16(65341), + 61: uint16(65342), + 62: uint16(65343), + 63: uint16(65344), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + 90: uint16(65371), + 91: uint16(65372), + 92: uint16(65373), + 93: uint16(65507), + }, + 3: { + 0: uint16(12593), + 1: uint16(12594), + 2: uint16(12595), + 3: uint16(12596), + 4: uint16(12597), + 5: uint16(12598), + 6: uint16(12599), + 7: uint16(12600), + 8: uint16(12601), + 9: uint16(12602), + 10: uint16(12603), + 11: uint16(12604), + 12: uint16(12605), + 13: uint16(12606), + 14: uint16(12607), + 15: uint16(12608), + 16: uint16(12609), + 17: uint16(12610), + 18: uint16(12611), + 19: uint16(12612), + 20: uint16(12613), + 21: uint16(12614), + 22: uint16(12615), + 23: uint16(12616), + 24: uint16(12617), + 25: uint16(12618), + 26: uint16(12619), + 27: uint16(12620), + 28: uint16(12621), + 29: uint16(12622), + 30: uint16(12623), + 31: uint16(12624), + 32: uint16(12625), + 33: uint16(12626), + 34: uint16(12627), + 35: uint16(12628), + 36: uint16(12629), + 37: uint16(12630), + 38: uint16(12631), + 39: uint16(12632), + 40: uint16(12633), + 41: uint16(12634), + 42: uint16(12635), + 43: uint16(12636), + 44: uint16(12637), + 45: uint16(12638), + 46: uint16(12639), + 47: uint16(12640), + 48: uint16(12641), + 49: uint16(12642), + 50: uint16(12643), + 51: uint16(12644), + 52: uint16(12645), + 53: uint16(12646), + 54: uint16(12647), + 55: uint16(12648), + 56: uint16(12649), + 57: uint16(12650), + 58: uint16(12651), + 59: uint16(12652), + 60: uint16(12653), + 61: uint16(12654), + 62: uint16(12655), + 63: uint16(12656), + 64: uint16(12657), + 65: uint16(12658), + 66: uint16(12659), + 67: uint16(12660), + 68: uint16(12661), + 69: uint16(12662), + 70: uint16(12663), + 71: uint16(12664), + 72: uint16(12665), + 73: uint16(12666), + 74: uint16(12667), + 75: uint16(12668), + 76: uint16(12669), + 77: uint16(12670), + 78: uint16(12671), + 79: uint16(12672), + 80: uint16(12673), + 81: uint16(12674), + 82: uint16(12675), + 83: uint16(12676), + 84: uint16(12677), + 85: uint16(12678), + 86: uint16(12679), + 87: uint16(12680), + 88: uint16(12681), + 89: uint16(12682), + 90: uint16(12683), + 91: uint16(12684), + 92: uint16(12685), + 93: uint16(12686), + }, + 4: { + 0: uint16(8560), + 1: uint16(8561), + 2: uint16(8562), + 3: uint16(8563), + 4: uint16(8564), + 5: uint16(8565), + 6: uint16(8566), + 7: uint16(8567), + 8: uint16(8568), + 9: uint16(8569), + 15: uint16(8544), + 16: uint16(8545), + 17: uint16(8546), + 18: uint16(8547), + 19: uint16(8548), + 20: uint16(8549), + 21: uint16(8550), + 22: uint16(8551), + 23: uint16(8552), + 24: uint16(8553), + 32: uint16(913), + 33: uint16(914), + 34: uint16(915), + 35: uint16(916), + 36: uint16(917), + 37: uint16(918), + 38: uint16(919), + 39: uint16(920), + 40: uint16(921), + 41: uint16(922), + 42: uint16(923), + 43: uint16(924), + 44: uint16(925), + 45: uint16(926), + 46: uint16(927), + 47: uint16(928), + 48: uint16(929), + 49: uint16(931), + 50: uint16(932), + 51: uint16(933), + 52: uint16(934), + 53: uint16(935), + 54: uint16(936), + 55: uint16(937), + 64: uint16(945), + 65: uint16(946), + 66: uint16(947), + 67: uint16(948), + 68: uint16(949), + 69: uint16(950), + 70: uint16(951), + 71: uint16(952), + 72: uint16(953), + 73: uint16(954), + 74: uint16(955), + 75: uint16(956), + 76: uint16(957), + 77: uint16(958), + 78: uint16(959), + 79: uint16(960), + 80: uint16(961), + 81: uint16(963), + 82: uint16(964), + 83: uint16(965), + 84: uint16(966), + 85: uint16(967), + 86: uint16(968), + 87: uint16(969), + }, + 5: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + 32: uint16(9490), + 33: uint16(9489), + 34: uint16(9498), + 35: uint16(9497), + 36: uint16(9494), + 37: uint16(9493), + 38: uint16(9486), + 39: uint16(9485), + 40: uint16(9502), + 41: uint16(9503), + 42: uint16(9505), + 43: uint16(9506), + 44: uint16(9510), + 45: uint16(9511), + 46: uint16(9513), + 47: uint16(9514), + 48: uint16(9517), + 49: uint16(9518), + 50: uint16(9521), + 51: uint16(9522), + 52: uint16(9525), + 53: uint16(9526), + 54: uint16(9529), + 55: uint16(9530), + 56: uint16(9533), + 57: uint16(9534), + 58: uint16(9536), + 59: uint16(9537), + 60: uint16(9539), + 61: uint16(9540), + 62: uint16(9541), + 63: uint16(9542), + 64: uint16(9543), + 65: uint16(9544), + 66: uint16(9545), + 67: uint16(9546), + }, + 6: { + 0: uint16(13205), + 1: uint16(13206), + 2: uint16(13207), + 3: uint16(8467), + 4: uint16(13208), + 5: uint16(13252), + 6: uint16(13219), + 7: uint16(13220), + 8: uint16(13221), + 9: uint16(13222), + 10: uint16(13209), + 11: uint16(13210), + 12: uint16(13211), + 13: uint16(13212), + 14: uint16(13213), + 15: uint16(13214), + 16: uint16(13215), + 17: uint16(13216), + 18: uint16(13217), + 19: uint16(13218), + 20: uint16(13258), + 21: uint16(13197), + 22: uint16(13198), + 23: uint16(13199), + 24: uint16(13263), + 25: uint16(13192), + 26: uint16(13193), + 27: uint16(13256), + 28: uint16(13223), + 29: uint16(13224), + 30: uint16(13232), + 31: uint16(13233), + 32: uint16(13234), + 33: uint16(13235), + 34: uint16(13236), + 35: uint16(13237), + 36: uint16(13238), + 37: uint16(13239), + 38: uint16(13240), + 39: uint16(13241), + 40: uint16(13184), + 41: uint16(13185), + 42: uint16(13186), + 43: uint16(13187), + 44: uint16(13188), + 45: uint16(13242), + 46: uint16(13243), + 47: uint16(13244), + 48: uint16(13245), + 49: uint16(13246), + 50: uint16(13247), + 51: uint16(13200), + 52: uint16(13201), + 53: uint16(13202), + 54: uint16(13203), + 55: uint16(13204), + 56: uint16(8486), + 57: uint16(13248), + 58: uint16(13249), + 59: uint16(13194), + 60: uint16(13195), + 61: uint16(13196), + 62: uint16(13270), + 63: uint16(13253), + 64: uint16(13229), + 65: uint16(13230), + 66: uint16(13231), + 67: uint16(13275), + 68: uint16(13225), + 69: uint16(13226), + 70: uint16(13227), + 71: uint16(13228), + 72: uint16(13277), + 73: uint16(13264), + 74: uint16(13267), + 75: uint16(13251), + 76: uint16(13257), + 77: uint16(13276), + 78: uint16(13254), + }, + 7: { + 0: uint16(198), + 1: uint16(208), + 2: uint16(170), + 3: uint16(294), + 5: uint16(306), + 7: uint16(319), + 8: uint16(321), + 9: uint16(216), + 10: uint16(338), + 11: uint16(186), + 12: uint16(222), + 13: uint16(358), + 14: uint16(330), + 16: uint16(12896), + 17: uint16(12897), + 18: uint16(12898), + 19: uint16(12899), + 20: uint16(12900), + 21: uint16(12901), + 22: uint16(12902), + 23: uint16(12903), + 24: uint16(12904), + 25: uint16(12905), + 26: uint16(12906), + 27: uint16(12907), + 28: uint16(12908), + 29: uint16(12909), + 30: uint16(12910), + 31: uint16(12911), + 32: uint16(12912), + 33: uint16(12913), + 34: uint16(12914), + 35: uint16(12915), + 36: uint16(12916), + 37: uint16(12917), + 38: uint16(12918), + 39: uint16(12919), + 40: uint16(12920), + 41: uint16(12921), + 42: uint16(12922), + 43: uint16(12923), + 44: uint16(9424), + 45: uint16(9425), + 46: uint16(9426), + 47: uint16(9427), + 48: uint16(9428), + 49: uint16(9429), + 50: uint16(9430), + 51: uint16(9431), + 52: uint16(9432), + 53: uint16(9433), + 54: uint16(9434), + 55: uint16(9435), + 56: uint16(9436), + 57: uint16(9437), + 58: uint16(9438), + 59: uint16(9439), + 60: uint16(9440), + 61: uint16(9441), + 62: uint16(9442), + 63: uint16(9443), + 64: uint16(9444), + 65: uint16(9445), + 66: uint16(9446), + 67: uint16(9447), + 68: uint16(9448), + 69: uint16(9449), + 70: uint16(9312), + 71: uint16(9313), + 72: uint16(9314), + 73: uint16(9315), + 74: uint16(9316), + 75: uint16(9317), + 76: uint16(9318), + 77: uint16(9319), + 78: uint16(9320), + 79: uint16(9321), + 80: uint16(9322), + 81: uint16(9323), + 82: uint16(9324), + 83: uint16(9325), + 84: uint16(9326), + 85: uint16(189), + 86: uint16(8531), + 87: uint16(8532), + 88: uint16(188), + 89: uint16(190), + 90: uint16(8539), + 91: uint16(8540), + 92: uint16(8541), + 93: uint16(8542), + }, + 8: { + 0: uint16(230), + 1: uint16(273), + 2: uint16(240), + 3: uint16(295), + 4: uint16(305), + 5: uint16(307), + 6: uint16(312), + 7: uint16(320), + 8: uint16(322), + 9: uint16(248), + 10: uint16(339), + 11: uint16(223), + 12: uint16(254), + 13: uint16(359), + 14: uint16(331), + 15: uint16(329), + 16: uint16(12800), + 17: uint16(12801), + 18: uint16(12802), + 19: uint16(12803), + 20: uint16(12804), + 21: uint16(12805), + 22: uint16(12806), + 23: uint16(12807), + 24: uint16(12808), + 25: uint16(12809), + 26: uint16(12810), + 27: uint16(12811), + 28: uint16(12812), + 29: uint16(12813), + 30: uint16(12814), + 31: uint16(12815), + 32: uint16(12816), + 33: uint16(12817), + 34: uint16(12818), + 35: uint16(12819), + 36: uint16(12820), + 37: uint16(12821), + 38: uint16(12822), + 39: uint16(12823), + 40: uint16(12824), + 41: uint16(12825), + 42: uint16(12826), + 43: uint16(12827), + 44: uint16(9372), + 45: uint16(9373), + 46: uint16(9374), + 47: uint16(9375), + 48: uint16(9376), + 49: uint16(9377), + 50: uint16(9378), + 51: uint16(9379), + 52: uint16(9380), + 53: uint16(9381), + 54: uint16(9382), + 55: uint16(9383), + 56: uint16(9384), + 57: uint16(9385), + 58: uint16(9386), + 59: uint16(9387), + 60: uint16(9388), + 61: uint16(9389), + 62: uint16(9390), + 63: uint16(9391), + 64: uint16(9392), + 65: uint16(9393), + 66: uint16(9394), + 67: uint16(9395), + 68: uint16(9396), + 69: uint16(9397), + 70: uint16(9332), + 71: uint16(9333), + 72: uint16(9334), + 73: uint16(9335), + 74: uint16(9336), + 75: uint16(9337), + 76: uint16(9338), + 77: uint16(9339), + 78: uint16(9340), + 79: uint16(9341), + 80: uint16(9342), + 81: uint16(9343), + 82: uint16(9344), + 83: uint16(9345), + 84: uint16(9346), + 85: uint16(185), + 86: uint16(178), + 87: uint16(179), + 88: uint16(8308), + 89: uint16(8319), + 90: uint16(8321), + 91: uint16(8322), + 92: uint16(8323), + 93: uint16(8324), + }, + 9: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 10: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 11: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(44032), + 1: uint16(44033), + 2: uint16(44036), + 3: uint16(44039), + 4: uint16(44040), + 5: uint16(44041), + 6: uint16(44042), + 7: uint16(44048), + 8: uint16(44049), + 9: uint16(44050), + 10: uint16(44051), + 11: uint16(44052), + 12: uint16(44053), + 13: uint16(44054), + 14: uint16(44055), + 15: uint16(44057), + 16: uint16(44058), + 17: uint16(44059), + 18: uint16(44060), + 19: uint16(44061), + 20: uint16(44064), + 21: uint16(44068), + 22: uint16(44076), + 23: uint16(44077), + 24: uint16(44079), + 25: uint16(44080), + 26: uint16(44081), + 27: uint16(44088), + 28: uint16(44089), + 29: uint16(44092), + 30: uint16(44096), + 31: uint16(44107), + 32: uint16(44109), + 33: uint16(44116), + 34: uint16(44120), + 35: uint16(44124), + 36: uint16(44144), + 37: uint16(44145), + 38: uint16(44148), + 39: uint16(44151), + 40: uint16(44152), + 41: uint16(44154), + 42: uint16(44160), + 43: uint16(44161), + 44: uint16(44163), + 45: uint16(44164), + 46: uint16(44165), + 47: uint16(44166), + 48: uint16(44169), + 49: uint16(44170), + 50: uint16(44171), + 51: uint16(44172), + 52: uint16(44176), + 53: uint16(44180), + 54: uint16(44188), + 55: uint16(44189), + 56: uint16(44191), + 57: uint16(44192), + 58: uint16(44193), + 59: uint16(44200), + 60: uint16(44201), + 61: uint16(44202), + 62: uint16(44204), + 63: uint16(44207), + 64: uint16(44208), + 65: uint16(44216), + 66: uint16(44217), + 67: uint16(44219), + 68: uint16(44220), + 69: uint16(44221), + 70: uint16(44225), + 71: uint16(44228), + 72: uint16(44232), + 73: uint16(44236), + 74: uint16(44245), + 75: uint16(44247), + 76: uint16(44256), + 77: uint16(44257), + 78: uint16(44260), + 79: uint16(44263), + 80: uint16(44264), + 81: uint16(44266), + 82: uint16(44268), + 83: uint16(44271), + 84: uint16(44272), + 85: uint16(44273), + 86: uint16(44275), + 87: uint16(44277), + 88: uint16(44278), + 89: uint16(44284), + 90: uint16(44285), + 91: uint16(44288), + 92: uint16(44292), + 93: uint16(44294), + }, + 16: { + 0: uint16(44300), + 1: uint16(44301), + 2: uint16(44303), + 3: uint16(44305), + 4: uint16(44312), + 5: uint16(44316), + 6: uint16(44320), + 7: uint16(44329), + 8: uint16(44332), + 9: uint16(44333), + 10: uint16(44340), + 11: uint16(44341), + 12: uint16(44344), + 13: uint16(44348), + 14: uint16(44356), + 15: uint16(44357), + 16: uint16(44359), + 17: uint16(44361), + 18: uint16(44368), + 19: uint16(44372), + 20: uint16(44376), + 21: uint16(44385), + 22: uint16(44387), + 23: uint16(44396), + 24: uint16(44397), + 25: uint16(44400), + 26: uint16(44403), + 27: uint16(44404), + 28: uint16(44405), + 29: uint16(44406), + 30: uint16(44411), + 31: uint16(44412), + 32: uint16(44413), + 33: uint16(44415), + 34: uint16(44417), + 35: uint16(44418), + 36: uint16(44424), + 37: uint16(44425), + 38: uint16(44428), + 39: uint16(44432), + 40: uint16(44444), + 41: uint16(44445), + 42: uint16(44452), + 43: uint16(44471), + 44: uint16(44480), + 45: uint16(44481), + 46: uint16(44484), + 47: uint16(44488), + 48: uint16(44496), + 49: uint16(44497), + 50: uint16(44499), + 51: uint16(44508), + 52: uint16(44512), + 53: uint16(44516), + 54: uint16(44536), + 55: uint16(44537), + 56: uint16(44540), + 57: uint16(44543), + 58: uint16(44544), + 59: uint16(44545), + 60: uint16(44552), + 61: uint16(44553), + 62: uint16(44555), + 63: uint16(44557), + 64: uint16(44564), + 65: uint16(44592), + 66: uint16(44593), + 67: uint16(44596), + 68: uint16(44599), + 69: uint16(44600), + 70: uint16(44602), + 71: uint16(44608), + 72: uint16(44609), + 73: uint16(44611), + 74: uint16(44613), + 75: uint16(44614), + 76: uint16(44618), + 77: uint16(44620), + 78: uint16(44621), + 79: uint16(44622), + 80: uint16(44624), + 81: uint16(44628), + 82: uint16(44630), + 83: uint16(44636), + 84: uint16(44637), + 85: uint16(44639), + 86: uint16(44640), + 87: uint16(44641), + 88: uint16(44645), + 89: uint16(44648), + 90: uint16(44649), + 91: uint16(44652), + 92: uint16(44656), + 93: uint16(44664), + }, + 17: { + 0: uint16(44665), + 1: uint16(44667), + 2: uint16(44668), + 3: uint16(44669), + 4: uint16(44676), + 5: uint16(44677), + 6: uint16(44684), + 7: uint16(44732), + 8: uint16(44733), + 9: uint16(44734), + 10: uint16(44736), + 11: uint16(44740), + 12: uint16(44748), + 13: uint16(44749), + 14: uint16(44751), + 15: uint16(44752), + 16: uint16(44753), + 17: uint16(44760), + 18: uint16(44761), + 19: uint16(44764), + 20: uint16(44776), + 21: uint16(44779), + 22: uint16(44781), + 23: uint16(44788), + 24: uint16(44792), + 25: uint16(44796), + 26: uint16(44807), + 27: uint16(44808), + 28: uint16(44813), + 29: uint16(44816), + 30: uint16(44844), + 31: uint16(44845), + 32: uint16(44848), + 33: uint16(44850), + 34: uint16(44852), + 35: uint16(44860), + 36: uint16(44861), + 37: uint16(44863), + 38: uint16(44865), + 39: uint16(44866), + 40: uint16(44867), + 41: uint16(44872), + 42: uint16(44873), + 43: uint16(44880), + 44: uint16(44892), + 45: uint16(44893), + 46: uint16(44900), + 47: uint16(44901), + 48: uint16(44921), + 49: uint16(44928), + 50: uint16(44932), + 51: uint16(44936), + 52: uint16(44944), + 53: uint16(44945), + 54: uint16(44949), + 55: uint16(44956), + 56: uint16(44984), + 57: uint16(44985), + 58: uint16(44988), + 59: uint16(44992), + 60: uint16(44999), + 61: uint16(45000), + 62: uint16(45001), + 63: uint16(45003), + 64: uint16(45005), + 65: uint16(45006), + 66: uint16(45012), + 67: uint16(45020), + 68: uint16(45032), + 69: uint16(45033), + 70: uint16(45040), + 71: uint16(45041), + 72: uint16(45044), + 73: uint16(45048), + 74: uint16(45056), + 75: uint16(45057), + 76: uint16(45060), + 77: uint16(45068), + 78: uint16(45072), + 79: uint16(45076), + 80: uint16(45084), + 81: uint16(45085), + 82: uint16(45096), + 83: uint16(45124), + 84: uint16(45125), + 85: uint16(45128), + 86: uint16(45130), + 87: uint16(45132), + 88: uint16(45134), + 89: uint16(45139), + 90: uint16(45140), + 91: uint16(45141), + 92: uint16(45143), + 93: uint16(45145), + }, + 18: { + 0: uint16(45149), + 1: uint16(45180), + 2: uint16(45181), + 3: uint16(45184), + 4: uint16(45188), + 5: uint16(45196), + 6: uint16(45197), + 7: uint16(45199), + 8: uint16(45201), + 9: uint16(45208), + 10: uint16(45209), + 11: uint16(45210), + 12: uint16(45212), + 13: uint16(45215), + 14: uint16(45216), + 15: uint16(45217), + 16: uint16(45218), + 17: uint16(45224), + 18: uint16(45225), + 19: uint16(45227), + 20: uint16(45228), + 21: uint16(45229), + 22: uint16(45230), + 23: uint16(45231), + 24: uint16(45233), + 25: uint16(45235), + 26: uint16(45236), + 27: uint16(45237), + 28: uint16(45240), + 29: uint16(45244), + 30: uint16(45252), + 31: uint16(45253), + 32: uint16(45255), + 33: uint16(45256), + 34: uint16(45257), + 35: uint16(45264), + 36: uint16(45265), + 37: uint16(45268), + 38: uint16(45272), + 39: uint16(45280), + 40: uint16(45285), + 41: uint16(45320), + 42: uint16(45321), + 43: uint16(45323), + 44: uint16(45324), + 45: uint16(45328), + 46: uint16(45330), + 47: uint16(45331), + 48: uint16(45336), + 49: uint16(45337), + 50: uint16(45339), + 51: uint16(45340), + 52: uint16(45341), + 53: uint16(45347), + 54: uint16(45348), + 55: uint16(45349), + 56: uint16(45352), + 57: uint16(45356), + 58: uint16(45364), + 59: uint16(45365), + 60: uint16(45367), + 61: uint16(45368), + 62: uint16(45369), + 63: uint16(45376), + 64: uint16(45377), + 65: uint16(45380), + 66: uint16(45384), + 67: uint16(45392), + 68: uint16(45393), + 69: uint16(45396), + 70: uint16(45397), + 71: uint16(45400), + 72: uint16(45404), + 73: uint16(45408), + 74: uint16(45432), + 75: uint16(45433), + 76: uint16(45436), + 77: uint16(45440), + 78: uint16(45442), + 79: uint16(45448), + 80: uint16(45449), + 81: uint16(45451), + 82: uint16(45453), + 83: uint16(45458), + 84: uint16(45459), + 85: uint16(45460), + 86: uint16(45464), + 87: uint16(45468), + 88: uint16(45480), + 89: uint16(45516), + 90: uint16(45520), + 91: uint16(45524), + 92: uint16(45532), + 93: uint16(45533), + }, + 19: { + 0: uint16(45535), + 1: uint16(45544), + 2: uint16(45545), + 3: uint16(45548), + 4: uint16(45552), + 5: uint16(45561), + 6: uint16(45563), + 7: uint16(45565), + 8: uint16(45572), + 9: uint16(45573), + 10: uint16(45576), + 11: uint16(45579), + 12: uint16(45580), + 13: uint16(45588), + 14: uint16(45589), + 15: uint16(45591), + 16: uint16(45593), + 17: uint16(45600), + 18: uint16(45620), + 19: uint16(45628), + 20: uint16(45656), + 21: uint16(45660), + 22: uint16(45664), + 23: uint16(45672), + 24: uint16(45673), + 25: uint16(45684), + 26: uint16(45685), + 27: uint16(45692), + 28: uint16(45700), + 29: uint16(45701), + 30: uint16(45705), + 31: uint16(45712), + 32: uint16(45713), + 33: uint16(45716), + 34: uint16(45720), + 35: uint16(45721), + 36: uint16(45722), + 37: uint16(45728), + 38: uint16(45729), + 39: uint16(45731), + 40: uint16(45733), + 41: uint16(45734), + 42: uint16(45738), + 43: uint16(45740), + 44: uint16(45744), + 45: uint16(45748), + 46: uint16(45768), + 47: uint16(45769), + 48: uint16(45772), + 49: uint16(45776), + 50: uint16(45778), + 51: uint16(45784), + 52: uint16(45785), + 53: uint16(45787), + 54: uint16(45789), + 55: uint16(45794), + 56: uint16(45796), + 57: uint16(45797), + 58: uint16(45798), + 59: uint16(45800), + 60: uint16(45803), + 61: uint16(45804), + 62: uint16(45805), + 63: uint16(45806), + 64: uint16(45807), + 65: uint16(45811), + 66: uint16(45812), + 67: uint16(45813), + 68: uint16(45815), + 69: uint16(45816), + 70: uint16(45817), + 71: uint16(45818), + 72: uint16(45819), + 73: uint16(45823), + 74: uint16(45824), + 75: uint16(45825), + 76: uint16(45828), + 77: uint16(45832), + 78: uint16(45840), + 79: uint16(45841), + 80: uint16(45843), + 81: uint16(45844), + 82: uint16(45845), + 83: uint16(45852), + 84: uint16(45908), + 85: uint16(45909), + 86: uint16(45910), + 87: uint16(45912), + 88: uint16(45915), + 89: uint16(45916), + 90: uint16(45918), + 91: uint16(45919), + 92: uint16(45924), + 93: uint16(45925), + }, + 20: { + 0: uint16(45927), + 1: uint16(45929), + 2: uint16(45931), + 3: uint16(45934), + 4: uint16(45936), + 5: uint16(45937), + 6: uint16(45940), + 7: uint16(45944), + 8: uint16(45952), + 9: uint16(45953), + 10: uint16(45955), + 11: uint16(45956), + 12: uint16(45957), + 13: uint16(45964), + 14: uint16(45968), + 15: uint16(45972), + 16: uint16(45984), + 17: uint16(45985), + 18: uint16(45992), + 19: uint16(45996), + 20: uint16(46020), + 21: uint16(46021), + 22: uint16(46024), + 23: uint16(46027), + 24: uint16(46028), + 25: uint16(46030), + 26: uint16(46032), + 27: uint16(46036), + 28: uint16(46037), + 29: uint16(46039), + 30: uint16(46041), + 31: uint16(46043), + 32: uint16(46045), + 33: uint16(46048), + 34: uint16(46052), + 35: uint16(46056), + 36: uint16(46076), + 37: uint16(46096), + 38: uint16(46104), + 39: uint16(46108), + 40: uint16(46112), + 41: uint16(46120), + 42: uint16(46121), + 43: uint16(46123), + 44: uint16(46132), + 45: uint16(46160), + 46: uint16(46161), + 47: uint16(46164), + 48: uint16(46168), + 49: uint16(46176), + 50: uint16(46177), + 51: uint16(46179), + 52: uint16(46181), + 53: uint16(46188), + 54: uint16(46208), + 55: uint16(46216), + 56: uint16(46237), + 57: uint16(46244), + 58: uint16(46248), + 59: uint16(46252), + 60: uint16(46261), + 61: uint16(46263), + 62: uint16(46265), + 63: uint16(46272), + 64: uint16(46276), + 65: uint16(46280), + 66: uint16(46288), + 67: uint16(46293), + 68: uint16(46300), + 69: uint16(46301), + 70: uint16(46304), + 71: uint16(46307), + 72: uint16(46308), + 73: uint16(46310), + 74: uint16(46316), + 75: uint16(46317), + 76: uint16(46319), + 77: uint16(46321), + 78: uint16(46328), + 79: uint16(46356), + 80: uint16(46357), + 81: uint16(46360), + 82: uint16(46363), + 83: uint16(46364), + 84: uint16(46372), + 85: uint16(46373), + 86: uint16(46375), + 87: uint16(46376), + 88: uint16(46377), + 89: uint16(46378), + 90: uint16(46384), + 91: uint16(46385), + 92: uint16(46388), + 93: uint16(46392), + }, + 21: { + 0: uint16(46400), + 1: uint16(46401), + 2: uint16(46403), + 3: uint16(46404), + 4: uint16(46405), + 5: uint16(46411), + 6: uint16(46412), + 7: uint16(46413), + 8: uint16(46416), + 9: uint16(46420), + 10: uint16(46428), + 11: uint16(46429), + 12: uint16(46431), + 13: uint16(46432), + 14: uint16(46433), + 15: uint16(46496), + 16: uint16(46497), + 17: uint16(46500), + 18: uint16(46504), + 19: uint16(46506), + 20: uint16(46507), + 21: uint16(46512), + 22: uint16(46513), + 23: uint16(46515), + 24: uint16(46516), + 25: uint16(46517), + 26: uint16(46523), + 27: uint16(46524), + 28: uint16(46525), + 29: uint16(46528), + 30: uint16(46532), + 31: uint16(46540), + 32: uint16(46541), + 33: uint16(46543), + 34: uint16(46544), + 35: uint16(46545), + 36: uint16(46552), + 37: uint16(46572), + 38: uint16(46608), + 39: uint16(46609), + 40: uint16(46612), + 41: uint16(46616), + 42: uint16(46629), + 43: uint16(46636), + 44: uint16(46644), + 45: uint16(46664), + 46: uint16(46692), + 47: uint16(46696), + 48: uint16(46748), + 49: uint16(46749), + 50: uint16(46752), + 51: uint16(46756), + 52: uint16(46763), + 53: uint16(46764), + 54: uint16(46769), + 55: uint16(46804), + 56: uint16(46832), + 57: uint16(46836), + 58: uint16(46840), + 59: uint16(46848), + 60: uint16(46849), + 61: uint16(46853), + 62: uint16(46888), + 63: uint16(46889), + 64: uint16(46892), + 65: uint16(46895), + 66: uint16(46896), + 67: uint16(46904), + 68: uint16(46905), + 69: uint16(46907), + 70: uint16(46916), + 71: uint16(46920), + 72: uint16(46924), + 73: uint16(46932), + 74: uint16(46933), + 75: uint16(46944), + 76: uint16(46948), + 77: uint16(46952), + 78: uint16(46960), + 79: uint16(46961), + 80: uint16(46963), + 81: uint16(46965), + 82: uint16(46972), + 83: uint16(46973), + 84: uint16(46976), + 85: uint16(46980), + 86: uint16(46988), + 87: uint16(46989), + 88: uint16(46991), + 89: uint16(46992), + 90: uint16(46993), + 91: uint16(46994), + 92: uint16(46998), + 93: uint16(46999), + }, + 22: { + 0: uint16(47000), + 1: uint16(47001), + 2: uint16(47004), + 3: uint16(47008), + 4: uint16(47016), + 5: uint16(47017), + 6: uint16(47019), + 7: uint16(47020), + 8: uint16(47021), + 9: uint16(47028), + 10: uint16(47029), + 11: uint16(47032), + 12: uint16(47047), + 13: uint16(47049), + 14: uint16(47084), + 15: uint16(47085), + 16: uint16(47088), + 17: uint16(47092), + 18: uint16(47100), + 19: uint16(47101), + 20: uint16(47103), + 21: uint16(47104), + 22: uint16(47105), + 23: uint16(47111), + 24: uint16(47112), + 25: uint16(47113), + 26: uint16(47116), + 27: uint16(47120), + 28: uint16(47128), + 29: uint16(47129), + 30: uint16(47131), + 31: uint16(47133), + 32: uint16(47140), + 33: uint16(47141), + 34: uint16(47144), + 35: uint16(47148), + 36: uint16(47156), + 37: uint16(47157), + 38: uint16(47159), + 39: uint16(47160), + 40: uint16(47161), + 41: uint16(47168), + 42: uint16(47172), + 43: uint16(47185), + 44: uint16(47187), + 45: uint16(47196), + 46: uint16(47197), + 47: uint16(47200), + 48: uint16(47204), + 49: uint16(47212), + 50: uint16(47213), + 51: uint16(47215), + 52: uint16(47217), + 53: uint16(47224), + 54: uint16(47228), + 55: uint16(47245), + 56: uint16(47272), + 57: uint16(47280), + 58: uint16(47284), + 59: uint16(47288), + 60: uint16(47296), + 61: uint16(47297), + 62: uint16(47299), + 63: uint16(47301), + 64: uint16(47308), + 65: uint16(47312), + 66: uint16(47316), + 67: uint16(47325), + 68: uint16(47327), + 69: uint16(47329), + 70: uint16(47336), + 71: uint16(47337), + 72: uint16(47340), + 73: uint16(47344), + 74: uint16(47352), + 75: uint16(47353), + 76: uint16(47355), + 77: uint16(47357), + 78: uint16(47364), + 79: uint16(47384), + 80: uint16(47392), + 81: uint16(47420), + 82: uint16(47421), + 83: uint16(47424), + 84: uint16(47428), + 85: uint16(47436), + 86: uint16(47439), + 87: uint16(47441), + 88: uint16(47448), + 89: uint16(47449), + 90: uint16(47452), + 91: uint16(47456), + 92: uint16(47464), + 93: uint16(47465), + }, + 23: { + 0: uint16(47467), + 1: uint16(47469), + 2: uint16(47476), + 3: uint16(47477), + 4: uint16(47480), + 5: uint16(47484), + 6: uint16(47492), + 7: uint16(47493), + 8: uint16(47495), + 9: uint16(47497), + 10: uint16(47498), + 11: uint16(47501), + 12: uint16(47502), + 13: uint16(47532), + 14: uint16(47533), + 15: uint16(47536), + 16: uint16(47540), + 17: uint16(47548), + 18: uint16(47549), + 19: uint16(47551), + 20: uint16(47553), + 21: uint16(47560), + 22: uint16(47561), + 23: uint16(47564), + 24: uint16(47566), + 25: uint16(47567), + 26: uint16(47568), + 27: uint16(47569), + 28: uint16(47570), + 29: uint16(47576), + 30: uint16(47577), + 31: uint16(47579), + 32: uint16(47581), + 33: uint16(47582), + 34: uint16(47585), + 35: uint16(47587), + 36: uint16(47588), + 37: uint16(47589), + 38: uint16(47592), + 39: uint16(47596), + 40: uint16(47604), + 41: uint16(47605), + 42: uint16(47607), + 43: uint16(47608), + 44: uint16(47609), + 45: uint16(47610), + 46: uint16(47616), + 47: uint16(47617), + 48: uint16(47624), + 49: uint16(47637), + 50: uint16(47672), + 51: uint16(47673), + 52: uint16(47676), + 53: uint16(47680), + 54: uint16(47682), + 55: uint16(47688), + 56: uint16(47689), + 57: uint16(47691), + 58: uint16(47693), + 59: uint16(47694), + 60: uint16(47699), + 61: uint16(47700), + 62: uint16(47701), + 63: uint16(47704), + 64: uint16(47708), + 65: uint16(47716), + 66: uint16(47717), + 67: uint16(47719), + 68: uint16(47720), + 69: uint16(47721), + 70: uint16(47728), + 71: uint16(47729), + 72: uint16(47732), + 73: uint16(47736), + 74: uint16(47747), + 75: uint16(47748), + 76: uint16(47749), + 77: uint16(47751), + 78: uint16(47756), + 79: uint16(47784), + 80: uint16(47785), + 81: uint16(47787), + 82: uint16(47788), + 83: uint16(47792), + 84: uint16(47794), + 85: uint16(47800), + 86: uint16(47801), + 87: uint16(47803), + 88: uint16(47805), + 89: uint16(47812), + 90: uint16(47816), + 91: uint16(47832), + 92: uint16(47833), + 93: uint16(47868), + }, + 24: { + 0: uint16(47872), + 1: uint16(47876), + 2: uint16(47885), + 3: uint16(47887), + 4: uint16(47889), + 5: uint16(47896), + 6: uint16(47900), + 7: uint16(47904), + 8: uint16(47913), + 9: uint16(47915), + 10: uint16(47924), + 11: uint16(47925), + 12: uint16(47926), + 13: uint16(47928), + 14: uint16(47931), + 15: uint16(47932), + 16: uint16(47933), + 17: uint16(47934), + 18: uint16(47940), + 19: uint16(47941), + 20: uint16(47943), + 21: uint16(47945), + 22: uint16(47949), + 23: uint16(47951), + 24: uint16(47952), + 25: uint16(47956), + 26: uint16(47960), + 27: uint16(47969), + 28: uint16(47971), + 29: uint16(47980), + 30: uint16(48008), + 31: uint16(48012), + 32: uint16(48016), + 33: uint16(48036), + 34: uint16(48040), + 35: uint16(48044), + 36: uint16(48052), + 37: uint16(48055), + 38: uint16(48064), + 39: uint16(48068), + 40: uint16(48072), + 41: uint16(48080), + 42: uint16(48083), + 43: uint16(48120), + 44: uint16(48121), + 45: uint16(48124), + 46: uint16(48127), + 47: uint16(48128), + 48: uint16(48130), + 49: uint16(48136), + 50: uint16(48137), + 51: uint16(48139), + 52: uint16(48140), + 53: uint16(48141), + 54: uint16(48143), + 55: uint16(48145), + 56: uint16(48148), + 57: uint16(48149), + 58: uint16(48150), + 59: uint16(48151), + 60: uint16(48152), + 61: uint16(48155), + 62: uint16(48156), + 63: uint16(48157), + 64: uint16(48158), + 65: uint16(48159), + 66: uint16(48164), + 67: uint16(48165), + 68: uint16(48167), + 69: uint16(48169), + 70: uint16(48173), + 71: uint16(48176), + 72: uint16(48177), + 73: uint16(48180), + 74: uint16(48184), + 75: uint16(48192), + 76: uint16(48193), + 77: uint16(48195), + 78: uint16(48196), + 79: uint16(48197), + 80: uint16(48201), + 81: uint16(48204), + 82: uint16(48205), + 83: uint16(48208), + 84: uint16(48221), + 85: uint16(48260), + 86: uint16(48261), + 87: uint16(48264), + 88: uint16(48267), + 89: uint16(48268), + 90: uint16(48270), + 91: uint16(48276), + 92: uint16(48277), + 93: uint16(48279), + }, + 25: { + 0: uint16(48281), + 1: uint16(48282), + 2: uint16(48288), + 3: uint16(48289), + 4: uint16(48292), + 5: uint16(48295), + 6: uint16(48296), + 7: uint16(48304), + 8: uint16(48305), + 9: uint16(48307), + 10: uint16(48308), + 11: uint16(48309), + 12: uint16(48316), + 13: uint16(48317), + 14: uint16(48320), + 15: uint16(48324), + 16: uint16(48333), + 17: uint16(48335), + 18: uint16(48336), + 19: uint16(48337), + 20: uint16(48341), + 21: uint16(48344), + 22: uint16(48348), + 23: uint16(48372), + 24: uint16(48373), + 25: uint16(48374), + 26: uint16(48376), + 27: uint16(48380), + 28: uint16(48388), + 29: uint16(48389), + 30: uint16(48391), + 31: uint16(48393), + 32: uint16(48400), + 33: uint16(48404), + 34: uint16(48420), + 35: uint16(48428), + 36: uint16(48448), + 37: uint16(48456), + 38: uint16(48457), + 39: uint16(48460), + 40: uint16(48464), + 41: uint16(48472), + 42: uint16(48473), + 43: uint16(48484), + 44: uint16(48488), + 45: uint16(48512), + 46: uint16(48513), + 47: uint16(48516), + 48: uint16(48519), + 49: uint16(48520), + 50: uint16(48521), + 51: uint16(48522), + 52: uint16(48528), + 53: uint16(48529), + 54: uint16(48531), + 55: uint16(48533), + 56: uint16(48537), + 57: uint16(48538), + 58: uint16(48540), + 59: uint16(48548), + 60: uint16(48560), + 61: uint16(48568), + 62: uint16(48596), + 63: uint16(48597), + 64: uint16(48600), + 65: uint16(48604), + 66: uint16(48617), + 67: uint16(48624), + 68: uint16(48628), + 69: uint16(48632), + 70: uint16(48640), + 71: uint16(48643), + 72: uint16(48645), + 73: uint16(48652), + 74: uint16(48653), + 75: uint16(48656), + 76: uint16(48660), + 77: uint16(48668), + 78: uint16(48669), + 79: uint16(48671), + 80: uint16(48708), + 81: uint16(48709), + 82: uint16(48712), + 83: uint16(48716), + 84: uint16(48718), + 85: uint16(48724), + 86: uint16(48725), + 87: uint16(48727), + 88: uint16(48729), + 89: uint16(48730), + 90: uint16(48731), + 91: uint16(48736), + 92: uint16(48737), + 93: uint16(48740), + }, + 26: { + 0: uint16(48744), + 1: uint16(48746), + 2: uint16(48752), + 3: uint16(48753), + 4: uint16(48755), + 5: uint16(48756), + 6: uint16(48757), + 7: uint16(48763), + 8: uint16(48764), + 9: uint16(48765), + 10: uint16(48768), + 11: uint16(48772), + 12: uint16(48780), + 13: uint16(48781), + 14: uint16(48783), + 15: uint16(48784), + 16: uint16(48785), + 17: uint16(48792), + 18: uint16(48793), + 19: uint16(48808), + 20: uint16(48848), + 21: uint16(48849), + 22: uint16(48852), + 23: uint16(48855), + 24: uint16(48856), + 25: uint16(48864), + 26: uint16(48867), + 27: uint16(48868), + 28: uint16(48869), + 29: uint16(48876), + 30: uint16(48897), + 31: uint16(48904), + 32: uint16(48905), + 33: uint16(48920), + 34: uint16(48921), + 35: uint16(48923), + 36: uint16(48924), + 37: uint16(48925), + 38: uint16(48960), + 39: uint16(48961), + 40: uint16(48964), + 41: uint16(48968), + 42: uint16(48976), + 43: uint16(48977), + 44: uint16(48981), + 45: uint16(49044), + 46: uint16(49072), + 47: uint16(49093), + 48: uint16(49100), + 49: uint16(49101), + 50: uint16(49104), + 51: uint16(49108), + 52: uint16(49116), + 53: uint16(49119), + 54: uint16(49121), + 55: uint16(49212), + 56: uint16(49233), + 57: uint16(49240), + 58: uint16(49244), + 59: uint16(49248), + 60: uint16(49256), + 61: uint16(49257), + 62: uint16(49296), + 63: uint16(49297), + 64: uint16(49300), + 65: uint16(49304), + 66: uint16(49312), + 67: uint16(49313), + 68: uint16(49315), + 69: uint16(49317), + 70: uint16(49324), + 71: uint16(49325), + 72: uint16(49327), + 73: uint16(49328), + 74: uint16(49331), + 75: uint16(49332), + 76: uint16(49333), + 77: uint16(49334), + 78: uint16(49340), + 79: uint16(49341), + 80: uint16(49343), + 81: uint16(49344), + 82: uint16(49345), + 83: uint16(49349), + 84: uint16(49352), + 85: uint16(49353), + 86: uint16(49356), + 87: uint16(49360), + 88: uint16(49368), + 89: uint16(49369), + 90: uint16(49371), + 91: uint16(49372), + 92: uint16(49373), + 93: uint16(49380), + }, + 27: { + 0: uint16(49381), + 1: uint16(49384), + 2: uint16(49388), + 3: uint16(49396), + 4: uint16(49397), + 5: uint16(49399), + 6: uint16(49401), + 7: uint16(49408), + 8: uint16(49412), + 9: uint16(49416), + 10: uint16(49424), + 11: uint16(49429), + 12: uint16(49436), + 13: uint16(49437), + 14: uint16(49438), + 15: uint16(49439), + 16: uint16(49440), + 17: uint16(49443), + 18: uint16(49444), + 19: uint16(49446), + 20: uint16(49447), + 21: uint16(49452), + 22: uint16(49453), + 23: uint16(49455), + 24: uint16(49456), + 25: uint16(49457), + 26: uint16(49462), + 27: uint16(49464), + 28: uint16(49465), + 29: uint16(49468), + 30: uint16(49472), + 31: uint16(49480), + 32: uint16(49481), + 33: uint16(49483), + 34: uint16(49484), + 35: uint16(49485), + 36: uint16(49492), + 37: uint16(49493), + 38: uint16(49496), + 39: uint16(49500), + 40: uint16(49508), + 41: uint16(49509), + 42: uint16(49511), + 43: uint16(49512), + 44: uint16(49513), + 45: uint16(49520), + 46: uint16(49524), + 47: uint16(49528), + 48: uint16(49541), + 49: uint16(49548), + 50: uint16(49549), + 51: uint16(49550), + 52: uint16(49552), + 53: uint16(49556), + 54: uint16(49558), + 55: uint16(49564), + 56: uint16(49565), + 57: uint16(49567), + 58: uint16(49569), + 59: uint16(49573), + 60: uint16(49576), + 61: uint16(49577), + 62: uint16(49580), + 63: uint16(49584), + 64: uint16(49597), + 65: uint16(49604), + 66: uint16(49608), + 67: uint16(49612), + 68: uint16(49620), + 69: uint16(49623), + 70: uint16(49624), + 71: uint16(49632), + 72: uint16(49636), + 73: uint16(49640), + 74: uint16(49648), + 75: uint16(49649), + 76: uint16(49651), + 77: uint16(49660), + 78: uint16(49661), + 79: uint16(49664), + 80: uint16(49668), + 81: uint16(49676), + 82: uint16(49677), + 83: uint16(49679), + 84: uint16(49681), + 85: uint16(49688), + 86: uint16(49689), + 87: uint16(49692), + 88: uint16(49695), + 89: uint16(49696), + 90: uint16(49704), + 91: uint16(49705), + 92: uint16(49707), + 93: uint16(49709), + }, + 28: { + 0: uint16(49711), + 1: uint16(49713), + 2: uint16(49714), + 3: uint16(49716), + 4: uint16(49736), + 5: uint16(49744), + 6: uint16(49745), + 7: uint16(49748), + 8: uint16(49752), + 9: uint16(49760), + 10: uint16(49765), + 11: uint16(49772), + 12: uint16(49773), + 13: uint16(49776), + 14: uint16(49780), + 15: uint16(49788), + 16: uint16(49789), + 17: uint16(49791), + 18: uint16(49793), + 19: uint16(49800), + 20: uint16(49801), + 21: uint16(49808), + 22: uint16(49816), + 23: uint16(49819), + 24: uint16(49821), + 25: uint16(49828), + 26: uint16(49829), + 27: uint16(49832), + 28: uint16(49836), + 29: uint16(49837), + 30: uint16(49844), + 31: uint16(49845), + 32: uint16(49847), + 33: uint16(49849), + 34: uint16(49884), + 35: uint16(49885), + 36: uint16(49888), + 37: uint16(49891), + 38: uint16(49892), + 39: uint16(49899), + 40: uint16(49900), + 41: uint16(49901), + 42: uint16(49903), + 43: uint16(49905), + 44: uint16(49910), + 45: uint16(49912), + 46: uint16(49913), + 47: uint16(49915), + 48: uint16(49916), + 49: uint16(49920), + 50: uint16(49928), + 51: uint16(49929), + 52: uint16(49932), + 53: uint16(49933), + 54: uint16(49939), + 55: uint16(49940), + 56: uint16(49941), + 57: uint16(49944), + 58: uint16(49948), + 59: uint16(49956), + 60: uint16(49957), + 61: uint16(49960), + 62: uint16(49961), + 63: uint16(49989), + 64: uint16(50024), + 65: uint16(50025), + 66: uint16(50028), + 67: uint16(50032), + 68: uint16(50034), + 69: uint16(50040), + 70: uint16(50041), + 71: uint16(50044), + 72: uint16(50045), + 73: uint16(50052), + 74: uint16(50056), + 75: uint16(50060), + 76: uint16(50112), + 77: uint16(50136), + 78: uint16(50137), + 79: uint16(50140), + 80: uint16(50143), + 81: uint16(50144), + 82: uint16(50146), + 83: uint16(50152), + 84: uint16(50153), + 85: uint16(50157), + 86: uint16(50164), + 87: uint16(50165), + 88: uint16(50168), + 89: uint16(50184), + 90: uint16(50192), + 91: uint16(50212), + 92: uint16(50220), + 93: uint16(50224), + }, + 29: { + 0: uint16(50228), + 1: uint16(50236), + 2: uint16(50237), + 3: uint16(50248), + 4: uint16(50276), + 5: uint16(50277), + 6: uint16(50280), + 7: uint16(50284), + 8: uint16(50292), + 9: uint16(50293), + 10: uint16(50297), + 11: uint16(50304), + 12: uint16(50324), + 13: uint16(50332), + 14: uint16(50360), + 15: uint16(50364), + 16: uint16(50409), + 17: uint16(50416), + 18: uint16(50417), + 19: uint16(50420), + 20: uint16(50424), + 21: uint16(50426), + 22: uint16(50431), + 23: uint16(50432), + 24: uint16(50433), + 25: uint16(50444), + 26: uint16(50448), + 27: uint16(50452), + 28: uint16(50460), + 29: uint16(50472), + 30: uint16(50473), + 31: uint16(50476), + 32: uint16(50480), + 33: uint16(50488), + 34: uint16(50489), + 35: uint16(50491), + 36: uint16(50493), + 37: uint16(50500), + 38: uint16(50501), + 39: uint16(50504), + 40: uint16(50505), + 41: uint16(50506), + 42: uint16(50508), + 43: uint16(50509), + 44: uint16(50510), + 45: uint16(50515), + 46: uint16(50516), + 47: uint16(50517), + 48: uint16(50519), + 49: uint16(50520), + 50: uint16(50521), + 51: uint16(50525), + 52: uint16(50526), + 53: uint16(50528), + 54: uint16(50529), + 55: uint16(50532), + 56: uint16(50536), + 57: uint16(50544), + 58: uint16(50545), + 59: uint16(50547), + 60: uint16(50548), + 61: uint16(50549), + 62: uint16(50556), + 63: uint16(50557), + 64: uint16(50560), + 65: uint16(50564), + 66: uint16(50567), + 67: uint16(50572), + 68: uint16(50573), + 69: uint16(50575), + 70: uint16(50577), + 71: uint16(50581), + 72: uint16(50583), + 73: uint16(50584), + 74: uint16(50588), + 75: uint16(50592), + 76: uint16(50601), + 77: uint16(50612), + 78: uint16(50613), + 79: uint16(50616), + 80: uint16(50617), + 81: uint16(50619), + 82: uint16(50620), + 83: uint16(50621), + 84: uint16(50622), + 85: uint16(50628), + 86: uint16(50629), + 87: uint16(50630), + 88: uint16(50631), + 89: uint16(50632), + 90: uint16(50633), + 91: uint16(50634), + 92: uint16(50636), + 93: uint16(50638), + }, + 30: { + 0: uint16(50640), + 1: uint16(50641), + 2: uint16(50644), + 3: uint16(50648), + 4: uint16(50656), + 5: uint16(50657), + 6: uint16(50659), + 7: uint16(50661), + 8: uint16(50668), + 9: uint16(50669), + 10: uint16(50670), + 11: uint16(50672), + 12: uint16(50676), + 13: uint16(50678), + 14: uint16(50679), + 15: uint16(50684), + 16: uint16(50685), + 17: uint16(50686), + 18: uint16(50687), + 19: uint16(50688), + 20: uint16(50689), + 21: uint16(50693), + 22: uint16(50694), + 23: uint16(50695), + 24: uint16(50696), + 25: uint16(50700), + 26: uint16(50704), + 27: uint16(50712), + 28: uint16(50713), + 29: uint16(50715), + 30: uint16(50716), + 31: uint16(50724), + 32: uint16(50725), + 33: uint16(50728), + 34: uint16(50732), + 35: uint16(50733), + 36: uint16(50734), + 37: uint16(50736), + 38: uint16(50739), + 39: uint16(50740), + 40: uint16(50741), + 41: uint16(50743), + 42: uint16(50745), + 43: uint16(50747), + 44: uint16(50752), + 45: uint16(50753), + 46: uint16(50756), + 47: uint16(50760), + 48: uint16(50768), + 49: uint16(50769), + 50: uint16(50771), + 51: uint16(50772), + 52: uint16(50773), + 53: uint16(50780), + 54: uint16(50781), + 55: uint16(50784), + 56: uint16(50796), + 57: uint16(50799), + 58: uint16(50801), + 59: uint16(50808), + 60: uint16(50809), + 61: uint16(50812), + 62: uint16(50816), + 63: uint16(50824), + 64: uint16(50825), + 65: uint16(50827), + 66: uint16(50829), + 67: uint16(50836), + 68: uint16(50837), + 69: uint16(50840), + 70: uint16(50844), + 71: uint16(50852), + 72: uint16(50853), + 73: uint16(50855), + 74: uint16(50857), + 75: uint16(50864), + 76: uint16(50865), + 77: uint16(50868), + 78: uint16(50872), + 79: uint16(50873), + 80: uint16(50874), + 81: uint16(50880), + 82: uint16(50881), + 83: uint16(50883), + 84: uint16(50885), + 85: uint16(50892), + 86: uint16(50893), + 87: uint16(50896), + 88: uint16(50900), + 89: uint16(50908), + 90: uint16(50909), + 91: uint16(50912), + 92: uint16(50913), + 93: uint16(50920), + }, + 31: { + 0: uint16(50921), + 1: uint16(50924), + 2: uint16(50928), + 3: uint16(50936), + 4: uint16(50937), + 5: uint16(50941), + 6: uint16(50948), + 7: uint16(50949), + 8: uint16(50952), + 9: uint16(50956), + 10: uint16(50964), + 11: uint16(50965), + 12: uint16(50967), + 13: uint16(50969), + 14: uint16(50976), + 15: uint16(50977), + 16: uint16(50980), + 17: uint16(50984), + 18: uint16(50992), + 19: uint16(50993), + 20: uint16(50995), + 21: uint16(50997), + 22: uint16(50999), + 23: uint16(51004), + 24: uint16(51005), + 25: uint16(51008), + 26: uint16(51012), + 27: uint16(51018), + 28: uint16(51020), + 29: uint16(51021), + 30: uint16(51023), + 31: uint16(51025), + 32: uint16(51026), + 33: uint16(51027), + 34: uint16(51028), + 35: uint16(51029), + 36: uint16(51030), + 37: uint16(51031), + 38: uint16(51032), + 39: uint16(51036), + 40: uint16(51040), + 41: uint16(51048), + 42: uint16(51051), + 43: uint16(51060), + 44: uint16(51061), + 45: uint16(51064), + 46: uint16(51068), + 47: uint16(51069), + 48: uint16(51070), + 49: uint16(51075), + 50: uint16(51076), + 51: uint16(51077), + 52: uint16(51079), + 53: uint16(51080), + 54: uint16(51081), + 55: uint16(51082), + 56: uint16(51086), + 57: uint16(51088), + 58: uint16(51089), + 59: uint16(51092), + 60: uint16(51094), + 61: uint16(51095), + 62: uint16(51096), + 63: uint16(51098), + 64: uint16(51104), + 65: uint16(51105), + 66: uint16(51107), + 67: uint16(51108), + 68: uint16(51109), + 69: uint16(51110), + 70: uint16(51116), + 71: uint16(51117), + 72: uint16(51120), + 73: uint16(51124), + 74: uint16(51132), + 75: uint16(51133), + 76: uint16(51135), + 77: uint16(51136), + 78: uint16(51137), + 79: uint16(51144), + 80: uint16(51145), + 81: uint16(51148), + 82: uint16(51150), + 83: uint16(51152), + 84: uint16(51160), + 85: uint16(51165), + 86: uint16(51172), + 87: uint16(51176), + 88: uint16(51180), + 89: uint16(51200), + 90: uint16(51201), + 91: uint16(51204), + 92: uint16(51208), + 93: uint16(51210), + }, + 32: { + 0: uint16(51216), + 1: uint16(51217), + 2: uint16(51219), + 3: uint16(51221), + 4: uint16(51222), + 5: uint16(51228), + 6: uint16(51229), + 7: uint16(51232), + 8: uint16(51236), + 9: uint16(51244), + 10: uint16(51245), + 11: uint16(51247), + 12: uint16(51249), + 13: uint16(51256), + 14: uint16(51260), + 15: uint16(51264), + 16: uint16(51272), + 17: uint16(51273), + 18: uint16(51276), + 19: uint16(51277), + 20: uint16(51284), + 21: uint16(51312), + 22: uint16(51313), + 23: uint16(51316), + 24: uint16(51320), + 25: uint16(51322), + 26: uint16(51328), + 27: uint16(51329), + 28: uint16(51331), + 29: uint16(51333), + 30: uint16(51334), + 31: uint16(51335), + 32: uint16(51339), + 33: uint16(51340), + 34: uint16(51341), + 35: uint16(51348), + 36: uint16(51357), + 37: uint16(51359), + 38: uint16(51361), + 39: uint16(51368), + 40: uint16(51388), + 41: uint16(51389), + 42: uint16(51396), + 43: uint16(51400), + 44: uint16(51404), + 45: uint16(51412), + 46: uint16(51413), + 47: uint16(51415), + 48: uint16(51417), + 49: uint16(51424), + 50: uint16(51425), + 51: uint16(51428), + 52: uint16(51445), + 53: uint16(51452), + 54: uint16(51453), + 55: uint16(51456), + 56: uint16(51460), + 57: uint16(51461), + 58: uint16(51462), + 59: uint16(51468), + 60: uint16(51469), + 61: uint16(51471), + 62: uint16(51473), + 63: uint16(51480), + 64: uint16(51500), + 65: uint16(51508), + 66: uint16(51536), + 67: uint16(51537), + 68: uint16(51540), + 69: uint16(51544), + 70: uint16(51552), + 71: uint16(51553), + 72: uint16(51555), + 73: uint16(51564), + 74: uint16(51568), + 75: uint16(51572), + 76: uint16(51580), + 77: uint16(51592), + 78: uint16(51593), + 79: uint16(51596), + 80: uint16(51600), + 81: uint16(51608), + 82: uint16(51609), + 83: uint16(51611), + 84: uint16(51613), + 85: uint16(51648), + 86: uint16(51649), + 87: uint16(51652), + 88: uint16(51655), + 89: uint16(51656), + 90: uint16(51658), + 91: uint16(51664), + 92: uint16(51665), + 93: uint16(51667), + }, + 33: { + 0: uint16(51669), + 1: uint16(51670), + 2: uint16(51673), + 3: uint16(51674), + 4: uint16(51676), + 5: uint16(51677), + 6: uint16(51680), + 7: uint16(51682), + 8: uint16(51684), + 9: uint16(51687), + 10: uint16(51692), + 11: uint16(51693), + 12: uint16(51695), + 13: uint16(51696), + 14: uint16(51697), + 15: uint16(51704), + 16: uint16(51705), + 17: uint16(51708), + 18: uint16(51712), + 19: uint16(51720), + 20: uint16(51721), + 21: uint16(51723), + 22: uint16(51724), + 23: uint16(51725), + 24: uint16(51732), + 25: uint16(51736), + 26: uint16(51753), + 27: uint16(51788), + 28: uint16(51789), + 29: uint16(51792), + 30: uint16(51796), + 31: uint16(51804), + 32: uint16(51805), + 33: uint16(51807), + 34: uint16(51808), + 35: uint16(51809), + 36: uint16(51816), + 37: uint16(51837), + 38: uint16(51844), + 39: uint16(51864), + 40: uint16(51900), + 41: uint16(51901), + 42: uint16(51904), + 43: uint16(51908), + 44: uint16(51916), + 45: uint16(51917), + 46: uint16(51919), + 47: uint16(51921), + 48: uint16(51923), + 49: uint16(51928), + 50: uint16(51929), + 51: uint16(51936), + 52: uint16(51948), + 53: uint16(51956), + 54: uint16(51976), + 55: uint16(51984), + 56: uint16(51988), + 57: uint16(51992), + 58: uint16(52000), + 59: uint16(52001), + 60: uint16(52033), + 61: uint16(52040), + 62: uint16(52041), + 63: uint16(52044), + 64: uint16(52048), + 65: uint16(52056), + 66: uint16(52057), + 67: uint16(52061), + 68: uint16(52068), + 69: uint16(52088), + 70: uint16(52089), + 71: uint16(52124), + 72: uint16(52152), + 73: uint16(52180), + 74: uint16(52196), + 75: uint16(52199), + 76: uint16(52201), + 77: uint16(52236), + 78: uint16(52237), + 79: uint16(52240), + 80: uint16(52244), + 81: uint16(52252), + 82: uint16(52253), + 83: uint16(52257), + 84: uint16(52258), + 85: uint16(52263), + 86: uint16(52264), + 87: uint16(52265), + 88: uint16(52268), + 89: uint16(52270), + 90: uint16(52272), + 91: uint16(52280), + 92: uint16(52281), + 93: uint16(52283), + }, + 34: { + 0: uint16(52284), + 1: uint16(52285), + 2: uint16(52286), + 3: uint16(52292), + 4: uint16(52293), + 5: uint16(52296), + 6: uint16(52300), + 7: uint16(52308), + 8: uint16(52309), + 9: uint16(52311), + 10: uint16(52312), + 11: uint16(52313), + 12: uint16(52320), + 13: uint16(52324), + 14: uint16(52326), + 15: uint16(52328), + 16: uint16(52336), + 17: uint16(52341), + 18: uint16(52376), + 19: uint16(52377), + 20: uint16(52380), + 21: uint16(52384), + 22: uint16(52392), + 23: uint16(52393), + 24: uint16(52395), + 25: uint16(52396), + 26: uint16(52397), + 27: uint16(52404), + 28: uint16(52405), + 29: uint16(52408), + 30: uint16(52412), + 31: uint16(52420), + 32: uint16(52421), + 33: uint16(52423), + 34: uint16(52425), + 35: uint16(52432), + 36: uint16(52436), + 37: uint16(52452), + 38: uint16(52460), + 39: uint16(52464), + 40: uint16(52481), + 41: uint16(52488), + 42: uint16(52489), + 43: uint16(52492), + 44: uint16(52496), + 45: uint16(52504), + 46: uint16(52505), + 47: uint16(52507), + 48: uint16(52509), + 49: uint16(52516), + 50: uint16(52520), + 51: uint16(52524), + 52: uint16(52537), + 53: uint16(52572), + 54: uint16(52576), + 55: uint16(52580), + 56: uint16(52588), + 57: uint16(52589), + 58: uint16(52591), + 59: uint16(52593), + 60: uint16(52600), + 61: uint16(52616), + 62: uint16(52628), + 63: uint16(52629), + 64: uint16(52632), + 65: uint16(52636), + 66: uint16(52644), + 67: uint16(52645), + 68: uint16(52647), + 69: uint16(52649), + 70: uint16(52656), + 71: uint16(52676), + 72: uint16(52684), + 73: uint16(52688), + 74: uint16(52712), + 75: uint16(52716), + 76: uint16(52720), + 77: uint16(52728), + 78: uint16(52729), + 79: uint16(52731), + 80: uint16(52733), + 81: uint16(52740), + 82: uint16(52744), + 83: uint16(52748), + 84: uint16(52756), + 85: uint16(52761), + 86: uint16(52768), + 87: uint16(52769), + 88: uint16(52772), + 89: uint16(52776), + 90: uint16(52784), + 91: uint16(52785), + 92: uint16(52787), + 93: uint16(52789), + }, + 35: { + 0: uint16(52824), + 1: uint16(52825), + 2: uint16(52828), + 3: uint16(52831), + 4: uint16(52832), + 5: uint16(52833), + 6: uint16(52840), + 7: uint16(52841), + 8: uint16(52843), + 9: uint16(52845), + 10: uint16(52852), + 11: uint16(52853), + 12: uint16(52856), + 13: uint16(52860), + 14: uint16(52868), + 15: uint16(52869), + 16: uint16(52871), + 17: uint16(52873), + 18: uint16(52880), + 19: uint16(52881), + 20: uint16(52884), + 21: uint16(52888), + 22: uint16(52896), + 23: uint16(52897), + 24: uint16(52899), + 25: uint16(52900), + 26: uint16(52901), + 27: uint16(52908), + 28: uint16(52909), + 29: uint16(52929), + 30: uint16(52964), + 31: uint16(52965), + 32: uint16(52968), + 33: uint16(52971), + 34: uint16(52972), + 35: uint16(52980), + 36: uint16(52981), + 37: uint16(52983), + 38: uint16(52984), + 39: uint16(52985), + 40: uint16(52992), + 41: uint16(52993), + 42: uint16(52996), + 43: uint16(53000), + 44: uint16(53008), + 45: uint16(53009), + 46: uint16(53011), + 47: uint16(53013), + 48: uint16(53020), + 49: uint16(53024), + 50: uint16(53028), + 51: uint16(53036), + 52: uint16(53037), + 53: uint16(53039), + 54: uint16(53040), + 55: uint16(53041), + 56: uint16(53048), + 57: uint16(53076), + 58: uint16(53077), + 59: uint16(53080), + 60: uint16(53084), + 61: uint16(53092), + 62: uint16(53093), + 63: uint16(53095), + 64: uint16(53097), + 65: uint16(53104), + 66: uint16(53105), + 67: uint16(53108), + 68: uint16(53112), + 69: uint16(53120), + 70: uint16(53125), + 71: uint16(53132), + 72: uint16(53153), + 73: uint16(53160), + 74: uint16(53168), + 75: uint16(53188), + 76: uint16(53216), + 77: uint16(53217), + 78: uint16(53220), + 79: uint16(53224), + 80: uint16(53232), + 81: uint16(53233), + 82: uint16(53235), + 83: uint16(53237), + 84: uint16(53244), + 85: uint16(53248), + 86: uint16(53252), + 87: uint16(53265), + 88: uint16(53272), + 89: uint16(53293), + 90: uint16(53300), + 91: uint16(53301), + 92: uint16(53304), + 93: uint16(53308), + }, + 36: { + 0: uint16(53316), + 1: uint16(53317), + 2: uint16(53319), + 3: uint16(53321), + 4: uint16(53328), + 5: uint16(53332), + 6: uint16(53336), + 7: uint16(53344), + 8: uint16(53356), + 9: uint16(53357), + 10: uint16(53360), + 11: uint16(53364), + 12: uint16(53372), + 13: uint16(53373), + 14: uint16(53377), + 15: uint16(53412), + 16: uint16(53413), + 17: uint16(53416), + 18: uint16(53420), + 19: uint16(53428), + 20: uint16(53429), + 21: uint16(53431), + 22: uint16(53433), + 23: uint16(53440), + 24: uint16(53441), + 25: uint16(53444), + 26: uint16(53448), + 27: uint16(53449), + 28: uint16(53456), + 29: uint16(53457), + 30: uint16(53459), + 31: uint16(53460), + 32: uint16(53461), + 33: uint16(53468), + 34: uint16(53469), + 35: uint16(53472), + 36: uint16(53476), + 37: uint16(53484), + 38: uint16(53485), + 39: uint16(53487), + 40: uint16(53488), + 41: uint16(53489), + 42: uint16(53496), + 43: uint16(53517), + 44: uint16(53552), + 45: uint16(53553), + 46: uint16(53556), + 47: uint16(53560), + 48: uint16(53562), + 49: uint16(53568), + 50: uint16(53569), + 51: uint16(53571), + 52: uint16(53572), + 53: uint16(53573), + 54: uint16(53580), + 55: uint16(53581), + 56: uint16(53584), + 57: uint16(53588), + 58: uint16(53596), + 59: uint16(53597), + 60: uint16(53599), + 61: uint16(53601), + 62: uint16(53608), + 63: uint16(53612), + 64: uint16(53628), + 65: uint16(53636), + 66: uint16(53640), + 67: uint16(53664), + 68: uint16(53665), + 69: uint16(53668), + 70: uint16(53672), + 71: uint16(53680), + 72: uint16(53681), + 73: uint16(53683), + 74: uint16(53685), + 75: uint16(53690), + 76: uint16(53692), + 77: uint16(53696), + 78: uint16(53720), + 79: uint16(53748), + 80: uint16(53752), + 81: uint16(53767), + 82: uint16(53769), + 83: uint16(53776), + 84: uint16(53804), + 85: uint16(53805), + 86: uint16(53808), + 87: uint16(53812), + 88: uint16(53820), + 89: uint16(53821), + 90: uint16(53823), + 91: uint16(53825), + 92: uint16(53832), + 93: uint16(53852), + }, + 37: { + 0: uint16(53860), + 1: uint16(53888), + 2: uint16(53889), + 3: uint16(53892), + 4: uint16(53896), + 5: uint16(53904), + 6: uint16(53905), + 7: uint16(53909), + 8: uint16(53916), + 9: uint16(53920), + 10: uint16(53924), + 11: uint16(53932), + 12: uint16(53937), + 13: uint16(53944), + 14: uint16(53945), + 15: uint16(53948), + 16: uint16(53951), + 17: uint16(53952), + 18: uint16(53954), + 19: uint16(53960), + 20: uint16(53961), + 21: uint16(53963), + 22: uint16(53972), + 23: uint16(53976), + 24: uint16(53980), + 25: uint16(53988), + 26: uint16(53989), + 27: uint16(54000), + 28: uint16(54001), + 29: uint16(54004), + 30: uint16(54008), + 31: uint16(54016), + 32: uint16(54017), + 33: uint16(54019), + 34: uint16(54021), + 35: uint16(54028), + 36: uint16(54029), + 37: uint16(54030), + 38: uint16(54032), + 39: uint16(54036), + 40: uint16(54038), + 41: uint16(54044), + 42: uint16(54045), + 43: uint16(54047), + 44: uint16(54048), + 45: uint16(54049), + 46: uint16(54053), + 47: uint16(54056), + 48: uint16(54057), + 49: uint16(54060), + 50: uint16(54064), + 51: uint16(54072), + 52: uint16(54073), + 53: uint16(54075), + 54: uint16(54076), + 55: uint16(54077), + 56: uint16(54084), + 57: uint16(54085), + 58: uint16(54140), + 59: uint16(54141), + 60: uint16(54144), + 61: uint16(54148), + 62: uint16(54156), + 63: uint16(54157), + 64: uint16(54159), + 65: uint16(54160), + 66: uint16(54161), + 67: uint16(54168), + 68: uint16(54169), + 69: uint16(54172), + 70: uint16(54176), + 71: uint16(54184), + 72: uint16(54185), + 73: uint16(54187), + 74: uint16(54189), + 75: uint16(54196), + 76: uint16(54200), + 77: uint16(54204), + 78: uint16(54212), + 79: uint16(54213), + 80: uint16(54216), + 81: uint16(54217), + 82: uint16(54224), + 83: uint16(54232), + 84: uint16(54241), + 85: uint16(54243), + 86: uint16(54252), + 87: uint16(54253), + 88: uint16(54256), + 89: uint16(54260), + 90: uint16(54268), + 91: uint16(54269), + 92: uint16(54271), + 93: uint16(54273), + }, + 38: { + 0: uint16(54280), + 1: uint16(54301), + 2: uint16(54336), + 3: uint16(54340), + 4: uint16(54364), + 5: uint16(54368), + 6: uint16(54372), + 7: uint16(54381), + 8: uint16(54383), + 9: uint16(54392), + 10: uint16(54393), + 11: uint16(54396), + 12: uint16(54399), + 13: uint16(54400), + 14: uint16(54402), + 15: uint16(54408), + 16: uint16(54409), + 17: uint16(54411), + 18: uint16(54413), + 19: uint16(54420), + 20: uint16(54441), + 21: uint16(54476), + 22: uint16(54480), + 23: uint16(54484), + 24: uint16(54492), + 25: uint16(54495), + 26: uint16(54504), + 27: uint16(54508), + 28: uint16(54512), + 29: uint16(54520), + 30: uint16(54523), + 31: uint16(54525), + 32: uint16(54532), + 33: uint16(54536), + 34: uint16(54540), + 35: uint16(54548), + 36: uint16(54549), + 37: uint16(54551), + 38: uint16(54588), + 39: uint16(54589), + 40: uint16(54592), + 41: uint16(54596), + 42: uint16(54604), + 43: uint16(54605), + 44: uint16(54607), + 45: uint16(54609), + 46: uint16(54616), + 47: uint16(54617), + 48: uint16(54620), + 49: uint16(54624), + 50: uint16(54629), + 51: uint16(54632), + 52: uint16(54633), + 53: uint16(54635), + 54: uint16(54637), + 55: uint16(54644), + 56: uint16(54645), + 57: uint16(54648), + 58: uint16(54652), + 59: uint16(54660), + 60: uint16(54661), + 61: uint16(54663), + 62: uint16(54664), + 63: uint16(54665), + 64: uint16(54672), + 65: uint16(54693), + 66: uint16(54728), + 67: uint16(54729), + 68: uint16(54732), + 69: uint16(54736), + 70: uint16(54738), + 71: uint16(54744), + 72: uint16(54745), + 73: uint16(54747), + 74: uint16(54749), + 75: uint16(54756), + 76: uint16(54757), + 77: uint16(54760), + 78: uint16(54764), + 79: uint16(54772), + 80: uint16(54773), + 81: uint16(54775), + 82: uint16(54777), + 83: uint16(54784), + 84: uint16(54785), + 85: uint16(54788), + 86: uint16(54792), + 87: uint16(54800), + 88: uint16(54801), + 89: uint16(54803), + 90: uint16(54804), + 91: uint16(54805), + 92: uint16(54812), + 93: uint16(54816), + }, + 39: { + 0: uint16(54820), + 1: uint16(54829), + 2: uint16(54840), + 3: uint16(54841), + 4: uint16(54844), + 5: uint16(54848), + 6: uint16(54853), + 7: uint16(54856), + 8: uint16(54857), + 9: uint16(54859), + 10: uint16(54861), + 11: uint16(54865), + 12: uint16(54868), + 13: uint16(54869), + 14: uint16(54872), + 15: uint16(54876), + 16: uint16(54887), + 17: uint16(54889), + 18: uint16(54896), + 19: uint16(54897), + 20: uint16(54900), + 21: uint16(54915), + 22: uint16(54917), + 23: uint16(54924), + 24: uint16(54925), + 25: uint16(54928), + 26: uint16(54932), + 27: uint16(54941), + 28: uint16(54943), + 29: uint16(54945), + 30: uint16(54952), + 31: uint16(54956), + 32: uint16(54960), + 33: uint16(54969), + 34: uint16(54971), + 35: uint16(54980), + 36: uint16(54981), + 37: uint16(54984), + 38: uint16(54988), + 39: uint16(54993), + 40: uint16(54996), + 41: uint16(54999), + 42: uint16(55001), + 43: uint16(55008), + 44: uint16(55012), + 45: uint16(55016), + 46: uint16(55024), + 47: uint16(55029), + 48: uint16(55036), + 49: uint16(55037), + 50: uint16(55040), + 51: uint16(55044), + 52: uint16(55057), + 53: uint16(55064), + 54: uint16(55065), + 55: uint16(55068), + 56: uint16(55072), + 57: uint16(55080), + 58: uint16(55081), + 59: uint16(55083), + 60: uint16(55085), + 61: uint16(55092), + 62: uint16(55093), + 63: uint16(55096), + 64: uint16(55100), + 65: uint16(55108), + 66: uint16(55111), + 67: uint16(55113), + 68: uint16(55120), + 69: uint16(55121), + 70: uint16(55124), + 71: uint16(55126), + 72: uint16(55127), + 73: uint16(55128), + 74: uint16(55129), + 75: uint16(55136), + 76: uint16(55137), + 77: uint16(55139), + 78: uint16(55141), + 79: uint16(55145), + 80: uint16(55148), + 81: uint16(55152), + 82: uint16(55156), + 83: uint16(55164), + 84: uint16(55165), + 85: uint16(55169), + 86: uint16(55176), + 87: uint16(55177), + 88: uint16(55180), + 89: uint16(55184), + 90: uint16(55192), + 91: uint16(55193), + 92: uint16(55195), + 93: uint16(55197), + }, + 40: {}, + 41: { + 0: uint16(20285), + 1: uint16(20339), + 2: uint16(20551), + 3: uint16(20729), + 4: uint16(21152), + 5: uint16(21487), + 6: uint16(21621), + 7: uint16(21733), + 8: uint16(22025), + 9: uint16(23233), + 10: uint16(23478), + 11: uint16(26247), + 12: uint16(26550), + 13: uint16(26551), + 14: uint16(26607), + 15: uint16(27468), + 16: uint16(29634), + 17: uint16(30146), + 18: uint16(31292), + 19: uint16(33499), + 20: uint16(33540), + 21: uint16(34903), + 22: uint16(34952), + 23: uint16(35382), + 24: uint16(36040), + 25: uint16(36303), + 26: uint16(36603), + 27: uint16(36838), + 28: uint16(39381), + 29: uint16(21051), + 30: uint16(21364), + 31: uint16(21508), + 32: uint16(24682), + 33: uint16(24932), + 34: uint16(27580), + 35: uint16(29647), + 36: uint16(33050), + 37: uint16(35258), + 38: uint16(35282), + 39: uint16(38307), + 40: uint16(20355), + 41: uint16(21002), + 42: uint16(22718), + 43: uint16(22904), + 44: uint16(23014), + 45: uint16(24178), + 46: uint16(24185), + 47: uint16(25031), + 48: uint16(25536), + 49: uint16(26438), + 50: uint16(26604), + 51: uint16(26751), + 52: uint16(28567), + 53: uint16(30286), + 54: uint16(30475), + 55: uint16(30965), + 56: uint16(31240), + 57: uint16(31487), + 58: uint16(31777), + 59: uint16(32925), + 60: uint16(33390), + 61: uint16(33393), + 62: uint16(35563), + 63: uint16(38291), + 64: uint16(20075), + 65: uint16(21917), + 66: uint16(26359), + 67: uint16(28212), + 68: uint16(30883), + 69: uint16(31469), + 70: uint16(33883), + 71: uint16(35088), + 72: uint16(34638), + 73: uint16(38824), + 74: uint16(21208), + 75: uint16(22350), + 76: uint16(22570), + 77: uint16(23884), + 78: uint16(24863), + 79: uint16(25022), + 80: uint16(25121), + 81: uint16(25954), + 82: uint16(26577), + 83: uint16(27204), + 84: uint16(28187), + 85: uint16(29976), + 86: uint16(30131), + 87: uint16(30435), + 88: uint16(30640), + 89: uint16(32058), + 90: uint16(37039), + 91: uint16(37969), + 92: uint16(37970), + 93: uint16(40853), + }, + 42: { + 0: uint16(21283), + 1: uint16(23724), + 2: uint16(30002), + 3: uint16(32987), + 4: uint16(37440), + 5: uint16(38296), + 6: uint16(21083), + 7: uint16(22536), + 8: uint16(23004), + 9: uint16(23713), + 10: uint16(23831), + 11: uint16(24247), + 12: uint16(24378), + 13: uint16(24394), + 14: uint16(24951), + 15: uint16(27743), + 16: uint16(30074), + 17: uint16(30086), + 18: uint16(31968), + 19: uint16(32115), + 20: uint16(32177), + 21: uint16(32652), + 22: uint16(33108), + 23: uint16(33313), + 24: uint16(34193), + 25: uint16(35137), + 26: uint16(35611), + 27: uint16(37628), + 28: uint16(38477), + 29: uint16(40007), + 30: uint16(20171), + 31: uint16(20215), + 32: uint16(20491), + 33: uint16(20977), + 34: uint16(22607), + 35: uint16(24887), + 36: uint16(24894), + 37: uint16(24936), + 38: uint16(25913), + 39: uint16(27114), + 40: uint16(28433), + 41: uint16(30117), + 42: uint16(30342), + 43: uint16(30422), + 44: uint16(31623), + 45: uint16(33445), + 46: uint16(33995), + 47: uint16(63744), + 48: uint16(37799), + 49: uint16(38283), + 50: uint16(21888), + 51: uint16(23458), + 52: uint16(22353), + 53: uint16(63745), + 54: uint16(31923), + 55: uint16(32697), + 56: uint16(37301), + 57: uint16(20520), + 58: uint16(21435), + 59: uint16(23621), + 60: uint16(24040), + 61: uint16(25298), + 62: uint16(25454), + 63: uint16(25818), + 64: uint16(25831), + 65: uint16(28192), + 66: uint16(28844), + 67: uint16(31067), + 68: uint16(36317), + 69: uint16(36382), + 70: uint16(63746), + 71: uint16(36989), + 72: uint16(37445), + 73: uint16(37624), + 74: uint16(20094), + 75: uint16(20214), + 76: uint16(20581), + 77: uint16(24062), + 78: uint16(24314), + 79: uint16(24838), + 80: uint16(26967), + 81: uint16(33137), + 82: uint16(34388), + 83: uint16(36423), + 84: uint16(37749), + 85: uint16(39467), + 86: uint16(20062), + 87: uint16(20625), + 88: uint16(26480), + 89: uint16(26688), + 90: uint16(20745), + 91: uint16(21133), + 92: uint16(21138), + 93: uint16(27298), + }, + 43: { + 0: uint16(30652), + 1: uint16(37392), + 2: uint16(40660), + 3: uint16(21163), + 4: uint16(24623), + 5: uint16(36850), + 6: uint16(20552), + 7: uint16(25001), + 8: uint16(25581), + 9: uint16(25802), + 10: uint16(26684), + 11: uint16(27268), + 12: uint16(28608), + 13: uint16(33160), + 14: uint16(35233), + 15: uint16(38548), + 16: uint16(22533), + 17: uint16(29309), + 18: uint16(29356), + 19: uint16(29956), + 20: uint16(32121), + 21: uint16(32365), + 22: uint16(32937), + 23: uint16(35211), + 24: uint16(35700), + 25: uint16(36963), + 26: uint16(40273), + 27: uint16(25225), + 28: uint16(27770), + 29: uint16(28500), + 30: uint16(32080), + 31: uint16(32570), + 32: uint16(35363), + 33: uint16(20860), + 34: uint16(24906), + 35: uint16(31645), + 36: uint16(35609), + 37: uint16(37463), + 38: uint16(37772), + 39: uint16(20140), + 40: uint16(20435), + 41: uint16(20510), + 42: uint16(20670), + 43: uint16(20742), + 44: uint16(21185), + 45: uint16(21197), + 46: uint16(21375), + 47: uint16(22384), + 48: uint16(22659), + 49: uint16(24218), + 50: uint16(24465), + 51: uint16(24950), + 52: uint16(25004), + 53: uint16(25806), + 54: uint16(25964), + 55: uint16(26223), + 56: uint16(26299), + 57: uint16(26356), + 58: uint16(26775), + 59: uint16(28039), + 60: uint16(28805), + 61: uint16(28913), + 62: uint16(29855), + 63: uint16(29861), + 64: uint16(29898), + 65: uint16(30169), + 66: uint16(30828), + 67: uint16(30956), + 68: uint16(31455), + 69: uint16(31478), + 70: uint16(32069), + 71: uint16(32147), + 72: uint16(32789), + 73: uint16(32831), + 74: uint16(33051), + 75: uint16(33686), + 76: uint16(35686), + 77: uint16(36629), + 78: uint16(36885), + 79: uint16(37857), + 80: uint16(38915), + 81: uint16(38968), + 82: uint16(39514), + 83: uint16(39912), + 84: uint16(20418), + 85: uint16(21843), + 86: uint16(22586), + 87: uint16(22865), + 88: uint16(23395), + 89: uint16(23622), + 90: uint16(24760), + 91: uint16(25106), + 92: uint16(26690), + 93: uint16(26800), + }, + 44: { + 0: uint16(26856), + 1: uint16(28330), + 2: uint16(30028), + 3: uint16(30328), + 4: uint16(30926), + 5: uint16(31293), + 6: uint16(31995), + 7: uint16(32363), + 8: uint16(32380), + 9: uint16(35336), + 10: uint16(35489), + 11: uint16(35903), + 12: uint16(38542), + 13: uint16(40388), + 14: uint16(21476), + 15: uint16(21481), + 16: uint16(21578), + 17: uint16(21617), + 18: uint16(22266), + 19: uint16(22993), + 20: uint16(23396), + 21: uint16(23611), + 22: uint16(24235), + 23: uint16(25335), + 24: uint16(25911), + 25: uint16(25925), + 26: uint16(25970), + 27: uint16(26272), + 28: uint16(26543), + 29: uint16(27073), + 30: uint16(27837), + 31: uint16(30204), + 32: uint16(30352), + 33: uint16(30590), + 34: uint16(31295), + 35: uint16(32660), + 36: uint16(32771), + 37: uint16(32929), + 38: uint16(33167), + 39: uint16(33510), + 40: uint16(33533), + 41: uint16(33776), + 42: uint16(34241), + 43: uint16(34865), + 44: uint16(34996), + 45: uint16(35493), + 46: uint16(63747), + 47: uint16(36764), + 48: uint16(37678), + 49: uint16(38599), + 50: uint16(39015), + 51: uint16(39640), + 52: uint16(40723), + 53: uint16(21741), + 54: uint16(26011), + 55: uint16(26354), + 56: uint16(26767), + 57: uint16(31296), + 58: uint16(35895), + 59: uint16(40288), + 60: uint16(22256), + 61: uint16(22372), + 62: uint16(23825), + 63: uint16(26118), + 64: uint16(26801), + 65: uint16(26829), + 66: uint16(28414), + 67: uint16(29736), + 68: uint16(34974), + 69: uint16(39908), + 70: uint16(27752), + 71: uint16(63748), + 72: uint16(39592), + 73: uint16(20379), + 74: uint16(20844), + 75: uint16(20849), + 76: uint16(21151), + 77: uint16(23380), + 78: uint16(24037), + 79: uint16(24656), + 80: uint16(24685), + 81: uint16(25329), + 82: uint16(25511), + 83: uint16(25915), + 84: uint16(29657), + 85: uint16(31354), + 86: uint16(34467), + 87: uint16(36002), + 88: uint16(38799), + 89: uint16(20018), + 90: uint16(23521), + 91: uint16(25096), + 92: uint16(26524), + 93: uint16(29916), + }, + 45: { + 0: uint16(31185), + 1: uint16(33747), + 2: uint16(35463), + 3: uint16(35506), + 4: uint16(36328), + 5: uint16(36942), + 6: uint16(37707), + 7: uint16(38982), + 8: uint16(24275), + 9: uint16(27112), + 10: uint16(34303), + 11: uint16(37101), + 12: uint16(63749), + 13: uint16(20896), + 14: uint16(23448), + 15: uint16(23532), + 16: uint16(24931), + 17: uint16(26874), + 18: uint16(27454), + 19: uint16(28748), + 20: uint16(29743), + 21: uint16(29912), + 22: uint16(31649), + 23: uint16(32592), + 24: uint16(33733), + 25: uint16(35264), + 26: uint16(36011), + 27: uint16(38364), + 28: uint16(39208), + 29: uint16(21038), + 30: uint16(24669), + 31: uint16(25324), + 32: uint16(36866), + 33: uint16(20362), + 34: uint16(20809), + 35: uint16(21281), + 36: uint16(22745), + 37: uint16(24291), + 38: uint16(26336), + 39: uint16(27960), + 40: uint16(28826), + 41: uint16(29378), + 42: uint16(29654), + 43: uint16(31568), + 44: uint16(33009), + 45: uint16(37979), + 46: uint16(21350), + 47: uint16(25499), + 48: uint16(32619), + 49: uint16(20054), + 50: uint16(20608), + 51: uint16(22602), + 52: uint16(22750), + 53: uint16(24618), + 54: uint16(24871), + 55: uint16(25296), + 56: uint16(27088), + 57: uint16(39745), + 58: uint16(23439), + 59: uint16(32024), + 60: uint16(32945), + 61: uint16(36703), + 62: uint16(20132), + 63: uint16(20689), + 64: uint16(21676), + 65: uint16(21932), + 66: uint16(23308), + 67: uint16(23968), + 68: uint16(24039), + 69: uint16(25898), + 70: uint16(25934), + 71: uint16(26657), + 72: uint16(27211), + 73: uint16(29409), + 74: uint16(30350), + 75: uint16(30703), + 76: uint16(32094), + 77: uint16(32761), + 78: uint16(33184), + 79: uint16(34126), + 80: uint16(34527), + 81: uint16(36611), + 82: uint16(36686), + 83: uint16(37066), + 84: uint16(39171), + 85: uint16(39509), + 86: uint16(39851), + 87: uint16(19992), + 88: uint16(20037), + 89: uint16(20061), + 90: uint16(20167), + 91: uint16(20465), + 92: uint16(20855), + 93: uint16(21246), + }, + 46: { + 0: uint16(21312), + 1: uint16(21475), + 2: uint16(21477), + 3: uint16(21646), + 4: uint16(22036), + 5: uint16(22389), + 6: uint16(22434), + 7: uint16(23495), + 8: uint16(23943), + 9: uint16(24272), + 10: uint16(25084), + 11: uint16(25304), + 12: uint16(25937), + 13: uint16(26552), + 14: uint16(26601), + 15: uint16(27083), + 16: uint16(27472), + 17: uint16(27590), + 18: uint16(27628), + 19: uint16(27714), + 20: uint16(28317), + 21: uint16(28792), + 22: uint16(29399), + 23: uint16(29590), + 24: uint16(29699), + 25: uint16(30655), + 26: uint16(30697), + 27: uint16(31350), + 28: uint16(32127), + 29: uint16(32777), + 30: uint16(33276), + 31: uint16(33285), + 32: uint16(33290), + 33: uint16(33503), + 34: uint16(34914), + 35: uint16(35635), + 36: uint16(36092), + 37: uint16(36544), + 38: uint16(36881), + 39: uint16(37041), + 40: uint16(37476), + 41: uint16(37558), + 42: uint16(39378), + 43: uint16(39493), + 44: uint16(40169), + 45: uint16(40407), + 46: uint16(40860), + 47: uint16(22283), + 48: uint16(23616), + 49: uint16(33738), + 50: uint16(38816), + 51: uint16(38827), + 52: uint16(40628), + 53: uint16(21531), + 54: uint16(31384), + 55: uint16(32676), + 56: uint16(35033), + 57: uint16(36557), + 58: uint16(37089), + 59: uint16(22528), + 60: uint16(23624), + 61: uint16(25496), + 62: uint16(31391), + 63: uint16(23470), + 64: uint16(24339), + 65: uint16(31353), + 66: uint16(31406), + 67: uint16(33422), + 68: uint16(36524), + 69: uint16(20518), + 70: uint16(21048), + 71: uint16(21240), + 72: uint16(21367), + 73: uint16(22280), + 74: uint16(25331), + 75: uint16(25458), + 76: uint16(27402), + 77: uint16(28099), + 78: uint16(30519), + 79: uint16(21413), + 80: uint16(29527), + 81: uint16(34152), + 82: uint16(36470), + 83: uint16(38357), + 84: uint16(26426), + 85: uint16(27331), + 86: uint16(28528), + 87: uint16(35437), + 88: uint16(36556), + 89: uint16(39243), + 90: uint16(63750), + 91: uint16(26231), + 92: uint16(27512), + 93: uint16(36020), + }, + 47: { + 0: uint16(39740), + 1: uint16(63751), + 2: uint16(21483), + 3: uint16(22317), + 4: uint16(22862), + 5: uint16(25542), + 6: uint16(27131), + 7: uint16(29674), + 8: uint16(30789), + 9: uint16(31418), + 10: uint16(31429), + 11: uint16(31998), + 12: uint16(33909), + 13: uint16(35215), + 14: uint16(36211), + 15: uint16(36917), + 16: uint16(38312), + 17: uint16(21243), + 18: uint16(22343), + 19: uint16(30023), + 20: uint16(31584), + 21: uint16(33740), + 22: uint16(37406), + 23: uint16(63752), + 24: uint16(27224), + 25: uint16(20811), + 26: uint16(21067), + 27: uint16(21127), + 28: uint16(25119), + 29: uint16(26840), + 30: uint16(26997), + 31: uint16(38553), + 32: uint16(20677), + 33: uint16(21156), + 34: uint16(21220), + 35: uint16(25027), + 36: uint16(26020), + 37: uint16(26681), + 38: uint16(27135), + 39: uint16(29822), + 40: uint16(31563), + 41: uint16(33465), + 42: uint16(33771), + 43: uint16(35250), + 44: uint16(35641), + 45: uint16(36817), + 46: uint16(39241), + 47: uint16(63753), + 48: uint16(20170), + 49: uint16(22935), + 50: uint16(25810), + 51: uint16(26129), + 52: uint16(27278), + 53: uint16(29748), + 54: uint16(31105), + 55: uint16(31165), + 56: uint16(33449), + 57: uint16(34942), + 58: uint16(34943), + 59: uint16(35167), + 60: uint16(63754), + 61: uint16(37670), + 62: uint16(20235), + 63: uint16(21450), + 64: uint16(24613), + 65: uint16(25201), + 66: uint16(27762), + 67: uint16(32026), + 68: uint16(32102), + 69: uint16(20120), + 70: uint16(20834), + 71: uint16(30684), + 72: uint16(32943), + 73: uint16(20225), + 74: uint16(20238), + 75: uint16(20854), + 76: uint16(20864), + 77: uint16(21980), + 78: uint16(22120), + 79: uint16(22331), + 80: uint16(22522), + 81: uint16(22524), + 82: uint16(22804), + 83: uint16(22855), + 84: uint16(22931), + 85: uint16(23492), + 86: uint16(23696), + 87: uint16(23822), + 88: uint16(24049), + 89: uint16(24190), + 90: uint16(24524), + 91: uint16(25216), + 92: uint16(26071), + 93: uint16(26083), + }, + 48: { + 0: uint16(26398), + 1: uint16(26399), + 2: uint16(26462), + 3: uint16(26827), + 4: uint16(26820), + 5: uint16(27231), + 6: uint16(27450), + 7: uint16(27683), + 8: uint16(27773), + 9: uint16(27778), + 10: uint16(28103), + 11: uint16(29592), + 12: uint16(29734), + 13: uint16(29738), + 14: uint16(29826), + 15: uint16(29859), + 16: uint16(30072), + 17: uint16(30079), + 18: uint16(30849), + 19: uint16(30959), + 20: uint16(31041), + 21: uint16(31047), + 22: uint16(31048), + 23: uint16(31098), + 24: uint16(31637), + 25: uint16(32000), + 26: uint16(32186), + 27: uint16(32648), + 28: uint16(32774), + 29: uint16(32813), + 30: uint16(32908), + 31: uint16(35352), + 32: uint16(35663), + 33: uint16(35912), + 34: uint16(36215), + 35: uint16(37665), + 36: uint16(37668), + 37: uint16(39138), + 38: uint16(39249), + 39: uint16(39438), + 40: uint16(39439), + 41: uint16(39525), + 42: uint16(40594), + 43: uint16(32202), + 44: uint16(20342), + 45: uint16(21513), + 46: uint16(25326), + 47: uint16(26708), + 48: uint16(37329), + 49: uint16(21931), + 50: uint16(20794), + 51: uint16(63755), + 52: uint16(63756), + 53: uint16(23068), + 54: uint16(25062), + 55: uint16(63757), + 56: uint16(25295), + 57: uint16(25343), + 58: uint16(63758), + 59: uint16(63759), + 60: uint16(63760), + 61: uint16(63761), + 62: uint16(63762), + 63: uint16(63763), + 64: uint16(37027), + 65: uint16(63764), + 66: uint16(63765), + 67: uint16(63766), + 68: uint16(63767), + 69: uint16(63768), + 70: uint16(35582), + 71: uint16(63769), + 72: uint16(63770), + 73: uint16(63771), + 74: uint16(63772), + 75: uint16(26262), + 76: uint16(63773), + 77: uint16(29014), + 78: uint16(63774), + 79: uint16(63775), + 80: uint16(38627), + 81: uint16(63776), + 82: uint16(25423), + 83: uint16(25466), + 84: uint16(21335), + 85: uint16(63777), + 86: uint16(26511), + 87: uint16(26976), + 88: uint16(28275), + 89: uint16(63778), + 90: uint16(30007), + 91: uint16(63779), + 92: uint16(63780), + 93: uint16(63781), + }, + 49: { + 0: uint16(32013), + 1: uint16(63782), + 2: uint16(63783), + 3: uint16(34930), + 4: uint16(22218), + 5: uint16(23064), + 6: uint16(63784), + 7: uint16(63785), + 8: uint16(63786), + 9: uint16(63787), + 10: uint16(63788), + 11: uint16(20035), + 12: uint16(63789), + 13: uint16(20839), + 14: uint16(22856), + 15: uint16(26608), + 16: uint16(32784), + 17: uint16(63790), + 18: uint16(22899), + 19: uint16(24180), + 20: uint16(25754), + 21: uint16(31178), + 22: uint16(24565), + 23: uint16(24684), + 24: uint16(25288), + 25: uint16(25467), + 26: uint16(23527), + 27: uint16(23511), + 28: uint16(21162), + 29: uint16(63791), + 30: uint16(22900), + 31: uint16(24361), + 32: uint16(24594), + 33: uint16(63792), + 34: uint16(63793), + 35: uint16(63794), + 36: uint16(29785), + 37: uint16(63795), + 38: uint16(63796), + 39: uint16(63797), + 40: uint16(63798), + 41: uint16(63799), + 42: uint16(63800), + 43: uint16(39377), + 44: uint16(63801), + 45: uint16(63802), + 46: uint16(63803), + 47: uint16(63804), + 48: uint16(63805), + 49: uint16(63806), + 50: uint16(63807), + 51: uint16(63808), + 52: uint16(63809), + 53: uint16(63810), + 54: uint16(63811), + 55: uint16(28611), + 56: uint16(63812), + 57: uint16(63813), + 58: uint16(33215), + 59: uint16(36786), + 60: uint16(24817), + 61: uint16(63814), + 62: uint16(63815), + 63: uint16(33126), + 64: uint16(63816), + 65: uint16(63817), + 66: uint16(23615), + 67: uint16(63818), + 68: uint16(63819), + 69: uint16(63820), + 70: uint16(63821), + 71: uint16(63822), + 72: uint16(63823), + 73: uint16(63824), + 74: uint16(63825), + 75: uint16(23273), + 76: uint16(35365), + 77: uint16(26491), + 78: uint16(32016), + 79: uint16(63826), + 80: uint16(63827), + 81: uint16(63828), + 82: uint16(63829), + 83: uint16(63830), + 84: uint16(63831), + 85: uint16(33021), + 86: uint16(63832), + 87: uint16(63833), + 88: uint16(23612), + 89: uint16(27877), + 90: uint16(21311), + 91: uint16(28346), + 92: uint16(22810), + 93: uint16(33590), + }, + 50: { + 0: uint16(20025), + 1: uint16(20150), + 2: uint16(20294), + 3: uint16(21934), + 4: uint16(22296), + 5: uint16(22727), + 6: uint16(24406), + 7: uint16(26039), + 8: uint16(26086), + 9: uint16(27264), + 10: uint16(27573), + 11: uint16(28237), + 12: uint16(30701), + 13: uint16(31471), + 14: uint16(31774), + 15: uint16(32222), + 16: uint16(34507), + 17: uint16(34962), + 18: uint16(37170), + 19: uint16(37723), + 20: uint16(25787), + 21: uint16(28606), + 22: uint16(29562), + 23: uint16(30136), + 24: uint16(36948), + 25: uint16(21846), + 26: uint16(22349), + 27: uint16(25018), + 28: uint16(25812), + 29: uint16(26311), + 30: uint16(28129), + 31: uint16(28251), + 32: uint16(28525), + 33: uint16(28601), + 34: uint16(30192), + 35: uint16(32835), + 36: uint16(33213), + 37: uint16(34113), + 38: uint16(35203), + 39: uint16(35527), + 40: uint16(35674), + 41: uint16(37663), + 42: uint16(27795), + 43: uint16(30035), + 44: uint16(31572), + 45: uint16(36367), + 46: uint16(36957), + 47: uint16(21776), + 48: uint16(22530), + 49: uint16(22616), + 50: uint16(24162), + 51: uint16(25095), + 52: uint16(25758), + 53: uint16(26848), + 54: uint16(30070), + 55: uint16(31958), + 56: uint16(34739), + 57: uint16(40680), + 58: uint16(20195), + 59: uint16(22408), + 60: uint16(22382), + 61: uint16(22823), + 62: uint16(23565), + 63: uint16(23729), + 64: uint16(24118), + 65: uint16(24453), + 66: uint16(25140), + 67: uint16(25825), + 68: uint16(29619), + 69: uint16(33274), + 70: uint16(34955), + 71: uint16(36024), + 72: uint16(38538), + 73: uint16(40667), + 74: uint16(23429), + 75: uint16(24503), + 76: uint16(24755), + 77: uint16(20498), + 78: uint16(20992), + 79: uint16(21040), + 80: uint16(22294), + 81: uint16(22581), + 82: uint16(22615), + 83: uint16(23566), + 84: uint16(23648), + 85: uint16(23798), + 86: uint16(23947), + 87: uint16(24230), + 88: uint16(24466), + 89: uint16(24764), + 90: uint16(25361), + 91: uint16(25481), + 92: uint16(25623), + 93: uint16(26691), + }, + 51: { + 0: uint16(26873), + 1: uint16(27330), + 2: uint16(28120), + 3: uint16(28193), + 4: uint16(28372), + 5: uint16(28644), + 6: uint16(29182), + 7: uint16(30428), + 8: uint16(30585), + 9: uint16(31153), + 10: uint16(31291), + 11: uint16(33796), + 12: uint16(35241), + 13: uint16(36077), + 14: uint16(36339), + 15: uint16(36424), + 16: uint16(36867), + 17: uint16(36884), + 18: uint16(36947), + 19: uint16(37117), + 20: uint16(37709), + 21: uint16(38518), + 22: uint16(38876), + 23: uint16(27602), + 24: uint16(28678), + 25: uint16(29272), + 26: uint16(29346), + 27: uint16(29544), + 28: uint16(30563), + 29: uint16(31167), + 30: uint16(31716), + 31: uint16(32411), + 32: uint16(35712), + 33: uint16(22697), + 34: uint16(24775), + 35: uint16(25958), + 36: uint16(26109), + 37: uint16(26302), + 38: uint16(27788), + 39: uint16(28958), + 40: uint16(29129), + 41: uint16(35930), + 42: uint16(38931), + 43: uint16(20077), + 44: uint16(31361), + 45: uint16(20189), + 46: uint16(20908), + 47: uint16(20941), + 48: uint16(21205), + 49: uint16(21516), + 50: uint16(24999), + 51: uint16(26481), + 52: uint16(26704), + 53: uint16(26847), + 54: uint16(27934), + 55: uint16(28540), + 56: uint16(30140), + 57: uint16(30643), + 58: uint16(31461), + 59: uint16(33012), + 60: uint16(33891), + 61: uint16(37509), + 62: uint16(20828), + 63: uint16(26007), + 64: uint16(26460), + 65: uint16(26515), + 66: uint16(30168), + 67: uint16(31431), + 68: uint16(33651), + 69: uint16(63834), + 70: uint16(35910), + 71: uint16(36887), + 72: uint16(38957), + 73: uint16(23663), + 74: uint16(33216), + 75: uint16(33434), + 76: uint16(36929), + 77: uint16(36975), + 78: uint16(37389), + 79: uint16(24471), + 80: uint16(23965), + 81: uint16(27225), + 82: uint16(29128), + 83: uint16(30331), + 84: uint16(31561), + 85: uint16(34276), + 86: uint16(35588), + 87: uint16(37159), + 88: uint16(39472), + 89: uint16(21895), + 90: uint16(25078), + 91: uint16(63835), + 92: uint16(30313), + 93: uint16(32645), + }, + 52: { + 0: uint16(34367), + 1: uint16(34746), + 2: uint16(35064), + 3: uint16(37007), + 4: uint16(63836), + 5: uint16(27931), + 6: uint16(28889), + 7: uint16(29662), + 8: uint16(32097), + 9: uint16(33853), + 10: uint16(63837), + 11: uint16(37226), + 12: uint16(39409), + 13: uint16(63838), + 14: uint16(20098), + 15: uint16(21365), + 16: uint16(27396), + 17: uint16(27410), + 18: uint16(28734), + 19: uint16(29211), + 20: uint16(34349), + 21: uint16(40478), + 22: uint16(21068), + 23: uint16(36771), + 24: uint16(23888), + 25: uint16(25829), + 26: uint16(25900), + 27: uint16(27414), + 28: uint16(28651), + 29: uint16(31811), + 30: uint16(32412), + 31: uint16(34253), + 32: uint16(35172), + 33: uint16(35261), + 34: uint16(25289), + 35: uint16(33240), + 36: uint16(34847), + 37: uint16(24266), + 38: uint16(26391), + 39: uint16(28010), + 40: uint16(29436), + 41: uint16(29701), + 42: uint16(29807), + 43: uint16(34690), + 44: uint16(37086), + 45: uint16(20358), + 46: uint16(23821), + 47: uint16(24480), + 48: uint16(33802), + 49: uint16(20919), + 50: uint16(25504), + 51: uint16(30053), + 52: uint16(20142), + 53: uint16(20486), + 54: uint16(20841), + 55: uint16(20937), + 56: uint16(26753), + 57: uint16(27153), + 58: uint16(31918), + 59: uint16(31921), + 60: uint16(31975), + 61: uint16(33391), + 62: uint16(35538), + 63: uint16(36635), + 64: uint16(37327), + 65: uint16(20406), + 66: uint16(20791), + 67: uint16(21237), + 68: uint16(21570), + 69: uint16(24300), + 70: uint16(24942), + 71: uint16(25150), + 72: uint16(26053), + 73: uint16(27354), + 74: uint16(28670), + 75: uint16(31018), + 76: uint16(34268), + 77: uint16(34851), + 78: uint16(38317), + 79: uint16(39522), + 80: uint16(39530), + 81: uint16(40599), + 82: uint16(40654), + 83: uint16(21147), + 84: uint16(26310), + 85: uint16(27511), + 86: uint16(28701), + 87: uint16(31019), + 88: uint16(36706), + 89: uint16(38722), + 90: uint16(24976), + 91: uint16(25088), + 92: uint16(25891), + 93: uint16(28451), + }, + 53: { + 0: uint16(29001), + 1: uint16(29833), + 2: uint16(32244), + 3: uint16(32879), + 4: uint16(34030), + 5: uint16(36646), + 6: uint16(36899), + 7: uint16(37706), + 8: uint16(20925), + 9: uint16(21015), + 10: uint16(21155), + 11: uint16(27916), + 12: uint16(28872), + 13: uint16(35010), + 14: uint16(24265), + 15: uint16(25986), + 16: uint16(27566), + 17: uint16(28610), + 18: uint16(31806), + 19: uint16(29557), + 20: uint16(20196), + 21: uint16(20278), + 22: uint16(22265), + 23: uint16(63839), + 24: uint16(23738), + 25: uint16(23994), + 26: uint16(24604), + 27: uint16(29618), + 28: uint16(31533), + 29: uint16(32666), + 30: uint16(32718), + 31: uint16(32838), + 32: uint16(36894), + 33: uint16(37428), + 34: uint16(38646), + 35: uint16(38728), + 36: uint16(38936), + 37: uint16(40801), + 38: uint16(20363), + 39: uint16(28583), + 40: uint16(31150), + 41: uint16(37300), + 42: uint16(38583), + 43: uint16(21214), + 44: uint16(63840), + 45: uint16(25736), + 46: uint16(25796), + 47: uint16(27347), + 48: uint16(28510), + 49: uint16(28696), + 50: uint16(29200), + 51: uint16(30439), + 52: uint16(32769), + 53: uint16(34310), + 54: uint16(34396), + 55: uint16(36335), + 56: uint16(36613), + 57: uint16(38706), + 58: uint16(39791), + 59: uint16(40442), + 60: uint16(40565), + 61: uint16(30860), + 62: uint16(31103), + 63: uint16(32160), + 64: uint16(33737), + 65: uint16(37636), + 66: uint16(40575), + 67: uint16(40595), + 68: uint16(35542), + 69: uint16(22751), + 70: uint16(24324), + 71: uint16(26407), + 72: uint16(28711), + 73: uint16(29903), + 74: uint16(31840), + 75: uint16(32894), + 76: uint16(20769), + 77: uint16(28712), + 78: uint16(29282), + 79: uint16(30922), + 80: uint16(36034), + 81: uint16(36058), + 82: uint16(36084), + 83: uint16(38647), + 84: uint16(20102), + 85: uint16(20698), + 86: uint16(23534), + 87: uint16(24278), + 88: uint16(26009), + 89: uint16(29134), + 90: uint16(30274), + 91: uint16(30637), + 92: uint16(32842), + 93: uint16(34044), + }, + 54: { + 0: uint16(36988), + 1: uint16(39719), + 2: uint16(40845), + 3: uint16(22744), + 4: uint16(23105), + 5: uint16(23650), + 6: uint16(27155), + 7: uint16(28122), + 8: uint16(28431), + 9: uint16(30267), + 10: uint16(32047), + 11: uint16(32311), + 12: uint16(34078), + 13: uint16(35128), + 14: uint16(37860), + 15: uint16(38475), + 16: uint16(21129), + 17: uint16(26066), + 18: uint16(26611), + 19: uint16(27060), + 20: uint16(27969), + 21: uint16(28316), + 22: uint16(28687), + 23: uint16(29705), + 24: uint16(29792), + 25: uint16(30041), + 26: uint16(30244), + 27: uint16(30827), + 28: uint16(35628), + 29: uint16(39006), + 30: uint16(20845), + 31: uint16(25134), + 32: uint16(38520), + 33: uint16(20374), + 34: uint16(20523), + 35: uint16(23833), + 36: uint16(28138), + 37: uint16(32184), + 38: uint16(36650), + 39: uint16(24459), + 40: uint16(24900), + 41: uint16(26647), + 42: uint16(63841), + 43: uint16(38534), + 44: uint16(21202), + 45: uint16(32907), + 46: uint16(20956), + 47: uint16(20940), + 48: uint16(26974), + 49: uint16(31260), + 50: uint16(32190), + 51: uint16(33777), + 52: uint16(38517), + 53: uint16(20442), + 54: uint16(21033), + 55: uint16(21400), + 56: uint16(21519), + 57: uint16(21774), + 58: uint16(23653), + 59: uint16(24743), + 60: uint16(26446), + 61: uint16(26792), + 62: uint16(28012), + 63: uint16(29313), + 64: uint16(29432), + 65: uint16(29702), + 66: uint16(29827), + 67: uint16(63842), + 68: uint16(30178), + 69: uint16(31852), + 70: uint16(32633), + 71: uint16(32696), + 72: uint16(33673), + 73: uint16(35023), + 74: uint16(35041), + 75: uint16(37324), + 76: uint16(37328), + 77: uint16(38626), + 78: uint16(39881), + 79: uint16(21533), + 80: uint16(28542), + 81: uint16(29136), + 82: uint16(29848), + 83: uint16(34298), + 84: uint16(36522), + 85: uint16(38563), + 86: uint16(40023), + 87: uint16(40607), + 88: uint16(26519), + 89: uint16(28107), + 90: uint16(29747), + 91: uint16(33256), + 92: uint16(38678), + 93: uint16(30764), + }, + 55: { + 0: uint16(31435), + 1: uint16(31520), + 2: uint16(31890), + 3: uint16(25705), + 4: uint16(29802), + 5: uint16(30194), + 6: uint16(30908), + 7: uint16(30952), + 8: uint16(39340), + 9: uint16(39764), + 10: uint16(40635), + 11: uint16(23518), + 12: uint16(24149), + 13: uint16(28448), + 14: uint16(33180), + 15: uint16(33707), + 16: uint16(37000), + 17: uint16(19975), + 18: uint16(21325), + 19: uint16(23081), + 20: uint16(24018), + 21: uint16(24398), + 22: uint16(24930), + 23: uint16(25405), + 24: uint16(26217), + 25: uint16(26364), + 26: uint16(28415), + 27: uint16(28459), + 28: uint16(28771), + 29: uint16(30622), + 30: uint16(33836), + 31: uint16(34067), + 32: uint16(34875), + 33: uint16(36627), + 34: uint16(39237), + 35: uint16(39995), + 36: uint16(21788), + 37: uint16(25273), + 38: uint16(26411), + 39: uint16(27819), + 40: uint16(33545), + 41: uint16(35178), + 42: uint16(38778), + 43: uint16(20129), + 44: uint16(22916), + 45: uint16(24536), + 46: uint16(24537), + 47: uint16(26395), + 48: uint16(32178), + 49: uint16(32596), + 50: uint16(33426), + 51: uint16(33579), + 52: uint16(33725), + 53: uint16(36638), + 54: uint16(37017), + 55: uint16(22475), + 56: uint16(22969), + 57: uint16(23186), + 58: uint16(23504), + 59: uint16(26151), + 60: uint16(26522), + 61: uint16(26757), + 62: uint16(27599), + 63: uint16(29028), + 64: uint16(32629), + 65: uint16(36023), + 66: uint16(36067), + 67: uint16(36993), + 68: uint16(39749), + 69: uint16(33032), + 70: uint16(35978), + 71: uint16(38476), + 72: uint16(39488), + 73: uint16(40613), + 74: uint16(23391), + 75: uint16(27667), + 76: uint16(29467), + 77: uint16(30450), + 78: uint16(30431), + 79: uint16(33804), + 80: uint16(20906), + 81: uint16(35219), + 82: uint16(20813), + 83: uint16(20885), + 84: uint16(21193), + 85: uint16(26825), + 86: uint16(27796), + 87: uint16(30468), + 88: uint16(30496), + 89: uint16(32191), + 90: uint16(32236), + 91: uint16(38754), + 92: uint16(40629), + 93: uint16(28357), + }, + 56: { + 0: uint16(34065), + 1: uint16(20901), + 2: uint16(21517), + 3: uint16(21629), + 4: uint16(26126), + 5: uint16(26269), + 6: uint16(26919), + 7: uint16(28319), + 8: uint16(30399), + 9: uint16(30609), + 10: uint16(33559), + 11: uint16(33986), + 12: uint16(34719), + 13: uint16(37225), + 14: uint16(37528), + 15: uint16(40180), + 16: uint16(34946), + 17: uint16(20398), + 18: uint16(20882), + 19: uint16(21215), + 20: uint16(22982), + 21: uint16(24125), + 22: uint16(24917), + 23: uint16(25720), + 24: uint16(25721), + 25: uint16(26286), + 26: uint16(26576), + 27: uint16(27169), + 28: uint16(27597), + 29: uint16(27611), + 30: uint16(29279), + 31: uint16(29281), + 32: uint16(29761), + 33: uint16(30520), + 34: uint16(30683), + 35: uint16(32791), + 36: uint16(33468), + 37: uint16(33541), + 38: uint16(35584), + 39: uint16(35624), + 40: uint16(35980), + 41: uint16(26408), + 42: uint16(27792), + 43: uint16(29287), + 44: uint16(30446), + 45: uint16(30566), + 46: uint16(31302), + 47: uint16(40361), + 48: uint16(27519), + 49: uint16(27794), + 50: uint16(22818), + 51: uint16(26406), + 52: uint16(33945), + 53: uint16(21359), + 54: uint16(22675), + 55: uint16(22937), + 56: uint16(24287), + 57: uint16(25551), + 58: uint16(26164), + 59: uint16(26483), + 60: uint16(28218), + 61: uint16(29483), + 62: uint16(31447), + 63: uint16(33495), + 64: uint16(37672), + 65: uint16(21209), + 66: uint16(24043), + 67: uint16(25006), + 68: uint16(25035), + 69: uint16(25098), + 70: uint16(25287), + 71: uint16(25771), + 72: uint16(26080), + 73: uint16(26969), + 74: uint16(27494), + 75: uint16(27595), + 76: uint16(28961), + 77: uint16(29687), + 78: uint16(30045), + 79: uint16(32326), + 80: uint16(33310), + 81: uint16(33538), + 82: uint16(34154), + 83: uint16(35491), + 84: uint16(36031), + 85: uint16(38695), + 86: uint16(40289), + 87: uint16(22696), + 88: uint16(40664), + 89: uint16(20497), + 90: uint16(21006), + 91: uint16(21563), + 92: uint16(21839), + 93: uint16(25991), + }, + 57: { + 0: uint16(27766), + 1: uint16(32010), + 2: uint16(32011), + 3: uint16(32862), + 4: uint16(34442), + 5: uint16(38272), + 6: uint16(38639), + 7: uint16(21247), + 8: uint16(27797), + 9: uint16(29289), + 10: uint16(21619), + 11: uint16(23194), + 12: uint16(23614), + 13: uint16(23883), + 14: uint16(24396), + 15: uint16(24494), + 16: uint16(26410), + 17: uint16(26806), + 18: uint16(26979), + 19: uint16(28220), + 20: uint16(28228), + 21: uint16(30473), + 22: uint16(31859), + 23: uint16(32654), + 24: uint16(34183), + 25: uint16(35598), + 26: uint16(36855), + 27: uint16(38753), + 28: uint16(40692), + 29: uint16(23735), + 30: uint16(24758), + 31: uint16(24845), + 32: uint16(25003), + 33: uint16(25935), + 34: uint16(26107), + 35: uint16(26108), + 36: uint16(27665), + 37: uint16(27887), + 38: uint16(29599), + 39: uint16(29641), + 40: uint16(32225), + 41: uint16(38292), + 42: uint16(23494), + 43: uint16(34588), + 44: uint16(35600), + 45: uint16(21085), + 46: uint16(21338), + 47: uint16(25293), + 48: uint16(25615), + 49: uint16(25778), + 50: uint16(26420), + 51: uint16(27192), + 52: uint16(27850), + 53: uint16(29632), + 54: uint16(29854), + 55: uint16(31636), + 56: uint16(31893), + 57: uint16(32283), + 58: uint16(33162), + 59: uint16(33334), + 60: uint16(34180), + 61: uint16(36843), + 62: uint16(38649), + 63: uint16(39361), + 64: uint16(20276), + 65: uint16(21322), + 66: uint16(21453), + 67: uint16(21467), + 68: uint16(25292), + 69: uint16(25644), + 70: uint16(25856), + 71: uint16(26001), + 72: uint16(27075), + 73: uint16(27886), + 74: uint16(28504), + 75: uint16(29677), + 76: uint16(30036), + 77: uint16(30242), + 78: uint16(30436), + 79: uint16(30460), + 80: uint16(30928), + 81: uint16(30971), + 82: uint16(31020), + 83: uint16(32070), + 84: uint16(33324), + 85: uint16(34784), + 86: uint16(36820), + 87: uint16(38930), + 88: uint16(39151), + 89: uint16(21187), + 90: uint16(25300), + 91: uint16(25765), + 92: uint16(28196), + 93: uint16(28497), + }, + 58: { + 0: uint16(30332), + 1: uint16(36299), + 2: uint16(37297), + 3: uint16(37474), + 4: uint16(39662), + 5: uint16(39747), + 6: uint16(20515), + 7: uint16(20621), + 8: uint16(22346), + 9: uint16(22952), + 10: uint16(23592), + 11: uint16(24135), + 12: uint16(24439), + 13: uint16(25151), + 14: uint16(25918), + 15: uint16(26041), + 16: uint16(26049), + 17: uint16(26121), + 18: uint16(26507), + 19: uint16(27036), + 20: uint16(28354), + 21: uint16(30917), + 22: uint16(32033), + 23: uint16(32938), + 24: uint16(33152), + 25: uint16(33323), + 26: uint16(33459), + 27: uint16(33953), + 28: uint16(34444), + 29: uint16(35370), + 30: uint16(35607), + 31: uint16(37030), + 32: uint16(38450), + 33: uint16(40848), + 34: uint16(20493), + 35: uint16(20467), + 36: uint16(63843), + 37: uint16(22521), + 38: uint16(24472), + 39: uint16(25308), + 40: uint16(25490), + 41: uint16(26479), + 42: uint16(28227), + 43: uint16(28953), + 44: uint16(30403), + 45: uint16(32972), + 46: uint16(32986), + 47: uint16(35060), + 48: uint16(35061), + 49: uint16(35097), + 50: uint16(36064), + 51: uint16(36649), + 52: uint16(37197), + 53: uint16(38506), + 54: uint16(20271), + 55: uint16(20336), + 56: uint16(24091), + 57: uint16(26575), + 58: uint16(26658), + 59: uint16(30333), + 60: uint16(30334), + 61: uint16(39748), + 62: uint16(24161), + 63: uint16(27146), + 64: uint16(29033), + 65: uint16(29140), + 66: uint16(30058), + 67: uint16(63844), + 68: uint16(32321), + 69: uint16(34115), + 70: uint16(34281), + 71: uint16(39132), + 72: uint16(20240), + 73: uint16(31567), + 74: uint16(32624), + 75: uint16(38309), + 76: uint16(20961), + 77: uint16(24070), + 78: uint16(26805), + 79: uint16(27710), + 80: uint16(27726), + 81: uint16(27867), + 82: uint16(29359), + 83: uint16(31684), + 84: uint16(33539), + 85: uint16(27861), + 86: uint16(29754), + 87: uint16(20731), + 88: uint16(21128), + 89: uint16(22721), + 90: uint16(25816), + 91: uint16(27287), + 92: uint16(29863), + 93: uint16(30294), + }, + 59: { + 0: uint16(30887), + 1: uint16(34327), + 2: uint16(38370), + 3: uint16(38713), + 4: uint16(63845), + 5: uint16(21342), + 6: uint16(24321), + 7: uint16(35722), + 8: uint16(36776), + 9: uint16(36783), + 10: uint16(37002), + 11: uint16(21029), + 12: uint16(30629), + 13: uint16(40009), + 14: uint16(40712), + 15: uint16(19993), + 16: uint16(20482), + 17: uint16(20853), + 18: uint16(23643), + 19: uint16(24183), + 20: uint16(26142), + 21: uint16(26170), + 22: uint16(26564), + 23: uint16(26821), + 24: uint16(28851), + 25: uint16(29953), + 26: uint16(30149), + 27: uint16(31177), + 28: uint16(31453), + 29: uint16(36647), + 30: uint16(39200), + 31: uint16(39432), + 32: uint16(20445), + 33: uint16(22561), + 34: uint16(22577), + 35: uint16(23542), + 36: uint16(26222), + 37: uint16(27493), + 38: uint16(27921), + 39: uint16(28282), + 40: uint16(28541), + 41: uint16(29668), + 42: uint16(29995), + 43: uint16(33769), + 44: uint16(35036), + 45: uint16(35091), + 46: uint16(35676), + 47: uint16(36628), + 48: uint16(20239), + 49: uint16(20693), + 50: uint16(21264), + 51: uint16(21340), + 52: uint16(23443), + 53: uint16(24489), + 54: uint16(26381), + 55: uint16(31119), + 56: uint16(33145), + 57: uint16(33583), + 58: uint16(34068), + 59: uint16(35079), + 60: uint16(35206), + 61: uint16(36665), + 62: uint16(36667), + 63: uint16(39333), + 64: uint16(39954), + 65: uint16(26412), + 66: uint16(20086), + 67: uint16(20472), + 68: uint16(22857), + 69: uint16(23553), + 70: uint16(23791), + 71: uint16(23792), + 72: uint16(25447), + 73: uint16(26834), + 74: uint16(28925), + 75: uint16(29090), + 76: uint16(29739), + 77: uint16(32299), + 78: uint16(34028), + 79: uint16(34562), + 80: uint16(36898), + 81: uint16(37586), + 82: uint16(40179), + 83: uint16(19981), + 84: uint16(20184), + 85: uint16(20463), + 86: uint16(20613), + 87: uint16(21078), + 88: uint16(21103), + 89: uint16(21542), + 90: uint16(21648), + 91: uint16(22496), + 92: uint16(22827), + 93: uint16(23142), + }, + 60: { + 0: uint16(23386), + 1: uint16(23413), + 2: uint16(23500), + 3: uint16(24220), + 4: uint16(63846), + 5: uint16(25206), + 6: uint16(25975), + 7: uint16(26023), + 8: uint16(28014), + 9: uint16(28325), + 10: uint16(29238), + 11: uint16(31526), + 12: uint16(31807), + 13: uint16(32566), + 14: uint16(33104), + 15: uint16(33105), + 16: uint16(33178), + 17: uint16(33344), + 18: uint16(33433), + 19: uint16(33705), + 20: uint16(35331), + 21: uint16(36000), + 22: uint16(36070), + 23: uint16(36091), + 24: uint16(36212), + 25: uint16(36282), + 26: uint16(37096), + 27: uint16(37340), + 28: uint16(38428), + 29: uint16(38468), + 30: uint16(39385), + 31: uint16(40167), + 32: uint16(21271), + 33: uint16(20998), + 34: uint16(21545), + 35: uint16(22132), + 36: uint16(22707), + 37: uint16(22868), + 38: uint16(22894), + 39: uint16(24575), + 40: uint16(24996), + 41: uint16(25198), + 42: uint16(26128), + 43: uint16(27774), + 44: uint16(28954), + 45: uint16(30406), + 46: uint16(31881), + 47: uint16(31966), + 48: uint16(32027), + 49: uint16(33452), + 50: uint16(36033), + 51: uint16(38640), + 52: uint16(63847), + 53: uint16(20315), + 54: uint16(24343), + 55: uint16(24447), + 56: uint16(25282), + 57: uint16(23849), + 58: uint16(26379), + 59: uint16(26842), + 60: uint16(30844), + 61: uint16(32323), + 62: uint16(40300), + 63: uint16(19989), + 64: uint16(20633), + 65: uint16(21269), + 66: uint16(21290), + 67: uint16(21329), + 68: uint16(22915), + 69: uint16(23138), + 70: uint16(24199), + 71: uint16(24754), + 72: uint16(24970), + 73: uint16(25161), + 74: uint16(25209), + 75: uint16(26000), + 76: uint16(26503), + 77: uint16(27047), + 78: uint16(27604), + 79: uint16(27606), + 80: uint16(27607), + 81: uint16(27608), + 82: uint16(27832), + 83: uint16(63848), + 84: uint16(29749), + 85: uint16(30202), + 86: uint16(30738), + 87: uint16(30865), + 88: uint16(31189), + 89: uint16(31192), + 90: uint16(31875), + 91: uint16(32203), + 92: uint16(32737), + 93: uint16(32933), + }, + 61: { + 0: uint16(33086), + 1: uint16(33218), + 2: uint16(33778), + 3: uint16(34586), + 4: uint16(35048), + 5: uint16(35513), + 6: uint16(35692), + 7: uint16(36027), + 8: uint16(37145), + 9: uint16(38750), + 10: uint16(39131), + 11: uint16(40763), + 12: uint16(22188), + 13: uint16(23338), + 14: uint16(24428), + 15: uint16(25996), + 16: uint16(27315), + 17: uint16(27567), + 18: uint16(27996), + 19: uint16(28657), + 20: uint16(28693), + 21: uint16(29277), + 22: uint16(29613), + 23: uint16(36007), + 24: uint16(36051), + 25: uint16(38971), + 26: uint16(24977), + 27: uint16(27703), + 28: uint16(32856), + 29: uint16(39425), + 30: uint16(20045), + 31: uint16(20107), + 32: uint16(20123), + 33: uint16(20181), + 34: uint16(20282), + 35: uint16(20284), + 36: uint16(20351), + 37: uint16(20447), + 38: uint16(20735), + 39: uint16(21490), + 40: uint16(21496), + 41: uint16(21766), + 42: uint16(21987), + 43: uint16(22235), + 44: uint16(22763), + 45: uint16(22882), + 46: uint16(23057), + 47: uint16(23531), + 48: uint16(23546), + 49: uint16(23556), + 50: uint16(24051), + 51: uint16(24107), + 52: uint16(24473), + 53: uint16(24605), + 54: uint16(25448), + 55: uint16(26012), + 56: uint16(26031), + 57: uint16(26614), + 58: uint16(26619), + 59: uint16(26797), + 60: uint16(27515), + 61: uint16(27801), + 62: uint16(27863), + 63: uint16(28195), + 64: uint16(28681), + 65: uint16(29509), + 66: uint16(30722), + 67: uint16(31038), + 68: uint16(31040), + 69: uint16(31072), + 70: uint16(31169), + 71: uint16(31721), + 72: uint16(32023), + 73: uint16(32114), + 74: uint16(32902), + 75: uint16(33293), + 76: uint16(33678), + 77: uint16(34001), + 78: uint16(34503), + 79: uint16(35039), + 80: uint16(35408), + 81: uint16(35422), + 82: uint16(35613), + 83: uint16(36060), + 84: uint16(36198), + 85: uint16(36781), + 86: uint16(37034), + 87: uint16(39164), + 88: uint16(39391), + 89: uint16(40605), + 90: uint16(21066), + 91: uint16(63849), + 92: uint16(26388), + 93: uint16(63850), + }, + 62: { + 0: uint16(20632), + 1: uint16(21034), + 2: uint16(23665), + 3: uint16(25955), + 4: uint16(27733), + 5: uint16(29642), + 6: uint16(29987), + 7: uint16(30109), + 8: uint16(31639), + 9: uint16(33948), + 10: uint16(37240), + 11: uint16(38704), + 12: uint16(20087), + 13: uint16(25746), + 14: uint16(27578), + 15: uint16(29022), + 16: uint16(34217), + 17: uint16(19977), + 18: uint16(63851), + 19: uint16(26441), + 20: uint16(26862), + 21: uint16(28183), + 22: uint16(33439), + 23: uint16(34072), + 24: uint16(34923), + 25: uint16(25591), + 26: uint16(28545), + 27: uint16(37394), + 28: uint16(39087), + 29: uint16(19978), + 30: uint16(20663), + 31: uint16(20687), + 32: uint16(20767), + 33: uint16(21830), + 34: uint16(21930), + 35: uint16(22039), + 36: uint16(23360), + 37: uint16(23577), + 38: uint16(23776), + 39: uint16(24120), + 40: uint16(24202), + 41: uint16(24224), + 42: uint16(24258), + 43: uint16(24819), + 44: uint16(26705), + 45: uint16(27233), + 46: uint16(28248), + 47: uint16(29245), + 48: uint16(29248), + 49: uint16(29376), + 50: uint16(30456), + 51: uint16(31077), + 52: uint16(31665), + 53: uint16(32724), + 54: uint16(35059), + 55: uint16(35316), + 56: uint16(35443), + 57: uint16(35937), + 58: uint16(36062), + 59: uint16(38684), + 60: uint16(22622), + 61: uint16(29885), + 62: uint16(36093), + 63: uint16(21959), + 64: uint16(63852), + 65: uint16(31329), + 66: uint16(32034), + 67: uint16(33394), + 68: uint16(29298), + 69: uint16(29983), + 70: uint16(29989), + 71: uint16(63853), + 72: uint16(31513), + 73: uint16(22661), + 74: uint16(22779), + 75: uint16(23996), + 76: uint16(24207), + 77: uint16(24246), + 78: uint16(24464), + 79: uint16(24661), + 80: uint16(25234), + 81: uint16(25471), + 82: uint16(25933), + 83: uint16(26257), + 84: uint16(26329), + 85: uint16(26360), + 86: uint16(26646), + 87: uint16(26866), + 88: uint16(29312), + 89: uint16(29790), + 90: uint16(31598), + 91: uint16(32110), + 92: uint16(32214), + 93: uint16(32626), + }, + 63: { + 0: uint16(32997), + 1: uint16(33298), + 2: uint16(34223), + 3: uint16(35199), + 4: uint16(35475), + 5: uint16(36893), + 6: uint16(37604), + 7: uint16(40653), + 8: uint16(40736), + 9: uint16(22805), + 10: uint16(22893), + 11: uint16(24109), + 12: uint16(24796), + 13: uint16(26132), + 14: uint16(26227), + 15: uint16(26512), + 16: uint16(27728), + 17: uint16(28101), + 18: uint16(28511), + 19: uint16(30707), + 20: uint16(30889), + 21: uint16(33990), + 22: uint16(37323), + 23: uint16(37675), + 24: uint16(20185), + 25: uint16(20682), + 26: uint16(20808), + 27: uint16(21892), + 28: uint16(23307), + 29: uint16(23459), + 30: uint16(25159), + 31: uint16(25982), + 32: uint16(26059), + 33: uint16(28210), + 34: uint16(29053), + 35: uint16(29697), + 36: uint16(29764), + 37: uint16(29831), + 38: uint16(29887), + 39: uint16(30316), + 40: uint16(31146), + 41: uint16(32218), + 42: uint16(32341), + 43: uint16(32680), + 44: uint16(33146), + 45: uint16(33203), + 46: uint16(33337), + 47: uint16(34330), + 48: uint16(34796), + 49: uint16(35445), + 50: uint16(36323), + 51: uint16(36984), + 52: uint16(37521), + 53: uint16(37925), + 54: uint16(39245), + 55: uint16(39854), + 56: uint16(21352), + 57: uint16(23633), + 58: uint16(26964), + 59: uint16(27844), + 60: uint16(27945), + 61: uint16(28203), + 62: uint16(33292), + 63: uint16(34203), + 64: uint16(35131), + 65: uint16(35373), + 66: uint16(35498), + 67: uint16(38634), + 68: uint16(40807), + 69: uint16(21089), + 70: uint16(26297), + 71: uint16(27570), + 72: uint16(32406), + 73: uint16(34814), + 74: uint16(36109), + 75: uint16(38275), + 76: uint16(38493), + 77: uint16(25885), + 78: uint16(28041), + 79: uint16(29166), + 80: uint16(63854), + 81: uint16(22478), + 82: uint16(22995), + 83: uint16(23468), + 84: uint16(24615), + 85: uint16(24826), + 86: uint16(25104), + 87: uint16(26143), + 88: uint16(26207), + 89: uint16(29481), + 90: uint16(29689), + 91: uint16(30427), + 92: uint16(30465), + 93: uint16(31596), + }, + 64: { + 0: uint16(32854), + 1: uint16(32882), + 2: uint16(33125), + 3: uint16(35488), + 4: uint16(37266), + 5: uint16(19990), + 6: uint16(21218), + 7: uint16(27506), + 8: uint16(27927), + 9: uint16(31237), + 10: uint16(31545), + 11: uint16(32048), + 12: uint16(63855), + 13: uint16(36016), + 14: uint16(21484), + 15: uint16(22063), + 16: uint16(22609), + 17: uint16(23477), + 18: uint16(23567), + 19: uint16(23569), + 20: uint16(24034), + 21: uint16(25152), + 22: uint16(25475), + 23: uint16(25620), + 24: uint16(26157), + 25: uint16(26803), + 26: uint16(27836), + 27: uint16(28040), + 28: uint16(28335), + 29: uint16(28703), + 30: uint16(28836), + 31: uint16(29138), + 32: uint16(29990), + 33: uint16(30095), + 34: uint16(30094), + 35: uint16(30233), + 36: uint16(31505), + 37: uint16(31712), + 38: uint16(31787), + 39: uint16(32032), + 40: uint16(32057), + 41: uint16(34092), + 42: uint16(34157), + 43: uint16(34311), + 44: uint16(35380), + 45: uint16(36877), + 46: uint16(36961), + 47: uint16(37045), + 48: uint16(37559), + 49: uint16(38902), + 50: uint16(39479), + 51: uint16(20439), + 52: uint16(23660), + 53: uint16(26463), + 54: uint16(28049), + 55: uint16(31903), + 56: uint16(32396), + 57: uint16(35606), + 58: uint16(36118), + 59: uint16(36895), + 60: uint16(23403), + 61: uint16(24061), + 62: uint16(25613), + 63: uint16(33984), + 64: uint16(36956), + 65: uint16(39137), + 66: uint16(29575), + 67: uint16(23435), + 68: uint16(24730), + 69: uint16(26494), + 70: uint16(28126), + 71: uint16(35359), + 72: uint16(35494), + 73: uint16(36865), + 74: uint16(38924), + 75: uint16(21047), + 76: uint16(63856), + 77: uint16(28753), + 78: uint16(30862), + 79: uint16(37782), + 80: uint16(34928), + 81: uint16(37335), + 82: uint16(20462), + 83: uint16(21463), + 84: uint16(22013), + 85: uint16(22234), + 86: uint16(22402), + 87: uint16(22781), + 88: uint16(23234), + 89: uint16(23432), + 90: uint16(23723), + 91: uint16(23744), + 92: uint16(24101), + 93: uint16(24833), + }, + 65: { + 0: uint16(25101), + 1: uint16(25163), + 2: uint16(25480), + 3: uint16(25628), + 4: uint16(25910), + 5: uint16(25976), + 6: uint16(27193), + 7: uint16(27530), + 8: uint16(27700), + 9: uint16(27929), + 10: uint16(28465), + 11: uint16(29159), + 12: uint16(29417), + 13: uint16(29560), + 14: uint16(29703), + 15: uint16(29874), + 16: uint16(30246), + 17: uint16(30561), + 18: uint16(31168), + 19: uint16(31319), + 20: uint16(31466), + 21: uint16(31929), + 22: uint16(32143), + 23: uint16(32172), + 24: uint16(32353), + 25: uint16(32670), + 26: uint16(33065), + 27: uint16(33585), + 28: uint16(33936), + 29: uint16(34010), + 30: uint16(34282), + 31: uint16(34966), + 32: uint16(35504), + 33: uint16(35728), + 34: uint16(36664), + 35: uint16(36930), + 36: uint16(36995), + 37: uint16(37228), + 38: uint16(37526), + 39: uint16(37561), + 40: uint16(38539), + 41: uint16(38567), + 42: uint16(38568), + 43: uint16(38614), + 44: uint16(38656), + 45: uint16(38920), + 46: uint16(39318), + 47: uint16(39635), + 48: uint16(39706), + 49: uint16(21460), + 50: uint16(22654), + 51: uint16(22809), + 52: uint16(23408), + 53: uint16(23487), + 54: uint16(28113), + 55: uint16(28506), + 56: uint16(29087), + 57: uint16(29729), + 58: uint16(29881), + 59: uint16(32901), + 60: uint16(33789), + 61: uint16(24033), + 62: uint16(24455), + 63: uint16(24490), + 64: uint16(24642), + 65: uint16(26092), + 66: uint16(26642), + 67: uint16(26991), + 68: uint16(27219), + 69: uint16(27529), + 70: uint16(27957), + 71: uint16(28147), + 72: uint16(29667), + 73: uint16(30462), + 74: uint16(30636), + 75: uint16(31565), + 76: uint16(32020), + 77: uint16(33059), + 78: uint16(33308), + 79: uint16(33600), + 80: uint16(34036), + 81: uint16(34147), + 82: uint16(35426), + 83: uint16(35524), + 84: uint16(37255), + 85: uint16(37662), + 86: uint16(38918), + 87: uint16(39348), + 88: uint16(25100), + 89: uint16(34899), + 90: uint16(36848), + 91: uint16(37477), + 92: uint16(23815), + 93: uint16(23847), + }, + 66: { + 0: uint16(23913), + 1: uint16(29791), + 2: uint16(33181), + 3: uint16(34664), + 4: uint16(28629), + 5: uint16(25342), + 6: uint16(32722), + 7: uint16(35126), + 8: uint16(35186), + 9: uint16(19998), + 10: uint16(20056), + 11: uint16(20711), + 12: uint16(21213), + 13: uint16(21319), + 14: uint16(25215), + 15: uint16(26119), + 16: uint16(32361), + 17: uint16(34821), + 18: uint16(38494), + 19: uint16(20365), + 20: uint16(21273), + 21: uint16(22070), + 22: uint16(22987), + 23: uint16(23204), + 24: uint16(23608), + 25: uint16(23630), + 26: uint16(23629), + 27: uint16(24066), + 28: uint16(24337), + 29: uint16(24643), + 30: uint16(26045), + 31: uint16(26159), + 32: uint16(26178), + 33: uint16(26558), + 34: uint16(26612), + 35: uint16(29468), + 36: uint16(30690), + 37: uint16(31034), + 38: uint16(32709), + 39: uint16(33940), + 40: uint16(33997), + 41: uint16(35222), + 42: uint16(35430), + 43: uint16(35433), + 44: uint16(35553), + 45: uint16(35925), + 46: uint16(35962), + 47: uint16(22516), + 48: uint16(23508), + 49: uint16(24335), + 50: uint16(24687), + 51: uint16(25325), + 52: uint16(26893), + 53: uint16(27542), + 54: uint16(28252), + 55: uint16(29060), + 56: uint16(31698), + 57: uint16(34645), + 58: uint16(35672), + 59: uint16(36606), + 60: uint16(39135), + 61: uint16(39166), + 62: uint16(20280), + 63: uint16(20353), + 64: uint16(20449), + 65: uint16(21627), + 66: uint16(23072), + 67: uint16(23480), + 68: uint16(24892), + 69: uint16(26032), + 70: uint16(26216), + 71: uint16(29180), + 72: uint16(30003), + 73: uint16(31070), + 74: uint16(32051), + 75: uint16(33102), + 76: uint16(33251), + 77: uint16(33688), + 78: uint16(34218), + 79: uint16(34254), + 80: uint16(34563), + 81: uint16(35338), + 82: uint16(36523), + 83: uint16(36763), + 84: uint16(63857), + 85: uint16(36805), + 86: uint16(22833), + 87: uint16(23460), + 88: uint16(23526), + 89: uint16(24713), + 90: uint16(23529), + 91: uint16(23563), + 92: uint16(24515), + 93: uint16(27777), + }, + 67: { + 0: uint16(63858), + 1: uint16(28145), + 2: uint16(28683), + 3: uint16(29978), + 4: uint16(33455), + 5: uint16(35574), + 6: uint16(20160), + 7: uint16(21313), + 8: uint16(63859), + 9: uint16(38617), + 10: uint16(27663), + 11: uint16(20126), + 12: uint16(20420), + 13: uint16(20818), + 14: uint16(21854), + 15: uint16(23077), + 16: uint16(23784), + 17: uint16(25105), + 18: uint16(29273), + 19: uint16(33469), + 20: uint16(33706), + 21: uint16(34558), + 22: uint16(34905), + 23: uint16(35357), + 24: uint16(38463), + 25: uint16(38597), + 26: uint16(39187), + 27: uint16(40201), + 28: uint16(40285), + 29: uint16(22538), + 30: uint16(23731), + 31: uint16(23997), + 32: uint16(24132), + 33: uint16(24801), + 34: uint16(24853), + 35: uint16(25569), + 36: uint16(27138), + 37: uint16(28197), + 38: uint16(37122), + 39: uint16(37716), + 40: uint16(38990), + 41: uint16(39952), + 42: uint16(40823), + 43: uint16(23433), + 44: uint16(23736), + 45: uint16(25353), + 46: uint16(26191), + 47: uint16(26696), + 48: uint16(30524), + 49: uint16(38593), + 50: uint16(38797), + 51: uint16(38996), + 52: uint16(39839), + 53: uint16(26017), + 54: uint16(35585), + 55: uint16(36555), + 56: uint16(38332), + 57: uint16(21813), + 58: uint16(23721), + 59: uint16(24022), + 60: uint16(24245), + 61: uint16(26263), + 62: uint16(30284), + 63: uint16(33780), + 64: uint16(38343), + 65: uint16(22739), + 66: uint16(25276), + 67: uint16(29390), + 68: uint16(40232), + 69: uint16(20208), + 70: uint16(22830), + 71: uint16(24591), + 72: uint16(26171), + 73: uint16(27523), + 74: uint16(31207), + 75: uint16(40230), + 76: uint16(21395), + 77: uint16(21696), + 78: uint16(22467), + 79: uint16(23830), + 80: uint16(24859), + 81: uint16(26326), + 82: uint16(28079), + 83: uint16(30861), + 84: uint16(33406), + 85: uint16(38552), + 86: uint16(38724), + 87: uint16(21380), + 88: uint16(25212), + 89: uint16(25494), + 90: uint16(28082), + 91: uint16(32266), + 92: uint16(33099), + 93: uint16(38989), + }, + 68: { + 0: uint16(27387), + 1: uint16(32588), + 2: uint16(40367), + 3: uint16(40474), + 4: uint16(20063), + 5: uint16(20539), + 6: uint16(20918), + 7: uint16(22812), + 8: uint16(24825), + 9: uint16(25590), + 10: uint16(26928), + 11: uint16(29242), + 12: uint16(32822), + 13: uint16(63860), + 14: uint16(37326), + 15: uint16(24369), + 16: uint16(63861), + 17: uint16(63862), + 18: uint16(32004), + 19: uint16(33509), + 20: uint16(33903), + 21: uint16(33979), + 22: uint16(34277), + 23: uint16(36493), + 24: uint16(63863), + 25: uint16(20335), + 26: uint16(63864), + 27: uint16(63865), + 28: uint16(22756), + 29: uint16(23363), + 30: uint16(24665), + 31: uint16(25562), + 32: uint16(25880), + 33: uint16(25965), + 34: uint16(26264), + 35: uint16(63866), + 36: uint16(26954), + 37: uint16(27171), + 38: uint16(27915), + 39: uint16(28673), + 40: uint16(29036), + 41: uint16(30162), + 42: uint16(30221), + 43: uint16(31155), + 44: uint16(31344), + 45: uint16(63867), + 46: uint16(32650), + 47: uint16(63868), + 48: uint16(35140), + 49: uint16(63869), + 50: uint16(35731), + 51: uint16(37312), + 52: uint16(38525), + 53: uint16(63870), + 54: uint16(39178), + 55: uint16(22276), + 56: uint16(24481), + 57: uint16(26044), + 58: uint16(28417), + 59: uint16(30208), + 60: uint16(31142), + 61: uint16(35486), + 62: uint16(39341), + 63: uint16(39770), + 64: uint16(40812), + 65: uint16(20740), + 66: uint16(25014), + 67: uint16(25233), + 68: uint16(27277), + 69: uint16(33222), + 70: uint16(20547), + 71: uint16(22576), + 72: uint16(24422), + 73: uint16(28937), + 74: uint16(35328), + 75: uint16(35578), + 76: uint16(23420), + 77: uint16(34326), + 78: uint16(20474), + 79: uint16(20796), + 80: uint16(22196), + 81: uint16(22852), + 82: uint16(25513), + 83: uint16(28153), + 84: uint16(23978), + 85: uint16(26989), + 86: uint16(20870), + 87: uint16(20104), + 88: uint16(20313), + 89: uint16(63871), + 90: uint16(63872), + 91: uint16(63873), + 92: uint16(22914), + 93: uint16(63874), + }, + 69: { + 0: uint16(63875), + 1: uint16(27487), + 2: uint16(27741), + 3: uint16(63876), + 4: uint16(29877), + 5: uint16(30998), + 6: uint16(63877), + 7: uint16(33287), + 8: uint16(33349), + 9: uint16(33593), + 10: uint16(36671), + 11: uint16(36701), + 12: uint16(63878), + 13: uint16(39192), + 14: uint16(63879), + 15: uint16(63880), + 16: uint16(63881), + 17: uint16(20134), + 18: uint16(63882), + 19: uint16(22495), + 20: uint16(24441), + 21: uint16(26131), + 22: uint16(63883), + 23: uint16(63884), + 24: uint16(30123), + 25: uint16(32377), + 26: uint16(35695), + 27: uint16(63885), + 28: uint16(36870), + 29: uint16(39515), + 30: uint16(22181), + 31: uint16(22567), + 32: uint16(23032), + 33: uint16(23071), + 34: uint16(23476), + 35: uint16(63886), + 36: uint16(24310), + 37: uint16(63887), + 38: uint16(63888), + 39: uint16(25424), + 40: uint16(25403), + 41: uint16(63889), + 42: uint16(26941), + 43: uint16(27783), + 44: uint16(27839), + 45: uint16(28046), + 46: uint16(28051), + 47: uint16(28149), + 48: uint16(28436), + 49: uint16(63890), + 50: uint16(28895), + 51: uint16(28982), + 52: uint16(29017), + 53: uint16(63891), + 54: uint16(29123), + 55: uint16(29141), + 56: uint16(63892), + 57: uint16(30799), + 58: uint16(30831), + 59: uint16(63893), + 60: uint16(31605), + 61: uint16(32227), + 62: uint16(63894), + 63: uint16(32303), + 64: uint16(63895), + 65: uint16(34893), + 66: uint16(36575), + 67: uint16(63896), + 68: uint16(63897), + 69: uint16(63898), + 70: uint16(37467), + 71: uint16(63899), + 72: uint16(40182), + 73: uint16(63900), + 74: uint16(63901), + 75: uint16(63902), + 76: uint16(24709), + 77: uint16(28037), + 78: uint16(63903), + 79: uint16(29105), + 80: uint16(63904), + 81: uint16(63905), + 82: uint16(38321), + 83: uint16(21421), + 84: uint16(63906), + 85: uint16(63907), + 86: uint16(63908), + 87: uint16(26579), + 88: uint16(63909), + 89: uint16(28814), + 90: uint16(28976), + 91: uint16(29744), + 92: uint16(33398), + 93: uint16(33490), + }, + 70: { + 0: uint16(63910), + 1: uint16(38331), + 2: uint16(39653), + 3: uint16(40573), + 4: uint16(26308), + 5: uint16(63911), + 6: uint16(29121), + 7: uint16(33865), + 8: uint16(63912), + 9: uint16(63913), + 10: uint16(22603), + 11: uint16(63914), + 12: uint16(63915), + 13: uint16(23992), + 14: uint16(24433), + 15: uint16(63916), + 16: uint16(26144), + 17: uint16(26254), + 18: uint16(27001), + 19: uint16(27054), + 20: uint16(27704), + 21: uint16(27891), + 22: uint16(28214), + 23: uint16(28481), + 24: uint16(28634), + 25: uint16(28699), + 26: uint16(28719), + 27: uint16(29008), + 28: uint16(29151), + 29: uint16(29552), + 30: uint16(63917), + 31: uint16(29787), + 32: uint16(63918), + 33: uint16(29908), + 34: uint16(30408), + 35: uint16(31310), + 36: uint16(32403), + 37: uint16(63919), + 38: uint16(63920), + 39: uint16(33521), + 40: uint16(35424), + 41: uint16(36814), + 42: uint16(63921), + 43: uint16(37704), + 44: uint16(63922), + 45: uint16(38681), + 46: uint16(63923), + 47: uint16(63924), + 48: uint16(20034), + 49: uint16(20522), + 50: uint16(63925), + 51: uint16(21000), + 52: uint16(21473), + 53: uint16(26355), + 54: uint16(27757), + 55: uint16(28618), + 56: uint16(29450), + 57: uint16(30591), + 58: uint16(31330), + 59: uint16(33454), + 60: uint16(34269), + 61: uint16(34306), + 62: uint16(63926), + 63: uint16(35028), + 64: uint16(35427), + 65: uint16(35709), + 66: uint16(35947), + 67: uint16(63927), + 68: uint16(37555), + 69: uint16(63928), + 70: uint16(38675), + 71: uint16(38928), + 72: uint16(20116), + 73: uint16(20237), + 74: uint16(20425), + 75: uint16(20658), + 76: uint16(21320), + 77: uint16(21566), + 78: uint16(21555), + 79: uint16(21978), + 80: uint16(22626), + 81: uint16(22714), + 82: uint16(22887), + 83: uint16(23067), + 84: uint16(23524), + 85: uint16(24735), + 86: uint16(63929), + 87: uint16(25034), + 88: uint16(25942), + 89: uint16(26111), + 90: uint16(26212), + 91: uint16(26791), + 92: uint16(27738), + 93: uint16(28595), + }, + 71: { + 0: uint16(28879), + 1: uint16(29100), + 2: uint16(29522), + 3: uint16(31613), + 4: uint16(34568), + 5: uint16(35492), + 6: uint16(39986), + 7: uint16(40711), + 8: uint16(23627), + 9: uint16(27779), + 10: uint16(29508), + 11: uint16(29577), + 12: uint16(37434), + 13: uint16(28331), + 14: uint16(29797), + 15: uint16(30239), + 16: uint16(31337), + 17: uint16(32277), + 18: uint16(34314), + 19: uint16(20800), + 20: uint16(22725), + 21: uint16(25793), + 22: uint16(29934), + 23: uint16(29973), + 24: uint16(30320), + 25: uint16(32705), + 26: uint16(37013), + 27: uint16(38605), + 28: uint16(39252), + 29: uint16(28198), + 30: uint16(29926), + 31: uint16(31401), + 32: uint16(31402), + 33: uint16(33253), + 34: uint16(34521), + 35: uint16(34680), + 36: uint16(35355), + 37: uint16(23113), + 38: uint16(23436), + 39: uint16(23451), + 40: uint16(26785), + 41: uint16(26880), + 42: uint16(28003), + 43: uint16(29609), + 44: uint16(29715), + 45: uint16(29740), + 46: uint16(30871), + 47: uint16(32233), + 48: uint16(32747), + 49: uint16(33048), + 50: uint16(33109), + 51: uint16(33694), + 52: uint16(35916), + 53: uint16(38446), + 54: uint16(38929), + 55: uint16(26352), + 56: uint16(24448), + 57: uint16(26106), + 58: uint16(26505), + 59: uint16(27754), + 60: uint16(29579), + 61: uint16(20525), + 62: uint16(23043), + 63: uint16(27498), + 64: uint16(30702), + 65: uint16(22806), + 66: uint16(23916), + 67: uint16(24013), + 68: uint16(29477), + 69: uint16(30031), + 70: uint16(63930), + 71: uint16(63931), + 72: uint16(20709), + 73: uint16(20985), + 74: uint16(22575), + 75: uint16(22829), + 76: uint16(22934), + 77: uint16(23002), + 78: uint16(23525), + 79: uint16(63932), + 80: uint16(63933), + 81: uint16(23970), + 82: uint16(25303), + 83: uint16(25622), + 84: uint16(25747), + 85: uint16(25854), + 86: uint16(63934), + 87: uint16(26332), + 88: uint16(63935), + 89: uint16(27208), + 90: uint16(63936), + 91: uint16(29183), + 92: uint16(29796), + 93: uint16(63937), + }, + 72: { + 0: uint16(31368), + 1: uint16(31407), + 2: uint16(32327), + 3: uint16(32350), + 4: uint16(32768), + 5: uint16(33136), + 6: uint16(63938), + 7: uint16(34799), + 8: uint16(35201), + 9: uint16(35616), + 10: uint16(36953), + 11: uint16(63939), + 12: uint16(36992), + 13: uint16(39250), + 14: uint16(24958), + 15: uint16(27442), + 16: uint16(28020), + 17: uint16(32287), + 18: uint16(35109), + 19: uint16(36785), + 20: uint16(20433), + 21: uint16(20653), + 22: uint16(20887), + 23: uint16(21191), + 24: uint16(22471), + 25: uint16(22665), + 26: uint16(23481), + 27: uint16(24248), + 28: uint16(24898), + 29: uint16(27029), + 30: uint16(28044), + 31: uint16(28263), + 32: uint16(28342), + 33: uint16(29076), + 34: uint16(29794), + 35: uint16(29992), + 36: uint16(29996), + 37: uint16(32883), + 38: uint16(33592), + 39: uint16(33993), + 40: uint16(36362), + 41: uint16(37780), + 42: uint16(37854), + 43: uint16(63940), + 44: uint16(20110), + 45: uint16(20305), + 46: uint16(20598), + 47: uint16(20778), + 48: uint16(21448), + 49: uint16(21451), + 50: uint16(21491), + 51: uint16(23431), + 52: uint16(23507), + 53: uint16(23588), + 54: uint16(24858), + 55: uint16(24962), + 56: uint16(26100), + 57: uint16(29275), + 58: uint16(29591), + 59: uint16(29760), + 60: uint16(30402), + 61: uint16(31056), + 62: uint16(31121), + 63: uint16(31161), + 64: uint16(32006), + 65: uint16(32701), + 66: uint16(33419), + 67: uint16(34261), + 68: uint16(34398), + 69: uint16(36802), + 70: uint16(36935), + 71: uint16(37109), + 72: uint16(37354), + 73: uint16(38533), + 74: uint16(38632), + 75: uint16(38633), + 76: uint16(21206), + 77: uint16(24423), + 78: uint16(26093), + 79: uint16(26161), + 80: uint16(26671), + 81: uint16(29020), + 82: uint16(31286), + 83: uint16(37057), + 84: uint16(38922), + 85: uint16(20113), + 86: uint16(63941), + 87: uint16(27218), + 88: uint16(27550), + 89: uint16(28560), + 90: uint16(29065), + 91: uint16(32792), + 92: uint16(33464), + 93: uint16(34131), + }, + 73: { + 0: uint16(36939), + 1: uint16(38549), + 2: uint16(38642), + 3: uint16(38907), + 4: uint16(34074), + 5: uint16(39729), + 6: uint16(20112), + 7: uint16(29066), + 8: uint16(38596), + 9: uint16(20803), + 10: uint16(21407), + 11: uint16(21729), + 12: uint16(22291), + 13: uint16(22290), + 14: uint16(22435), + 15: uint16(23195), + 16: uint16(23236), + 17: uint16(23491), + 18: uint16(24616), + 19: uint16(24895), + 20: uint16(25588), + 21: uint16(27781), + 22: uint16(27961), + 23: uint16(28274), + 24: uint16(28304), + 25: uint16(29232), + 26: uint16(29503), + 27: uint16(29783), + 28: uint16(33489), + 29: uint16(34945), + 30: uint16(36677), + 31: uint16(36960), + 32: uint16(63942), + 33: uint16(38498), + 34: uint16(39000), + 35: uint16(40219), + 36: uint16(26376), + 37: uint16(36234), + 38: uint16(37470), + 39: uint16(20301), + 40: uint16(20553), + 41: uint16(20702), + 42: uint16(21361), + 43: uint16(22285), + 44: uint16(22996), + 45: uint16(23041), + 46: uint16(23561), + 47: uint16(24944), + 48: uint16(26256), + 49: uint16(28205), + 50: uint16(29234), + 51: uint16(29771), + 52: uint16(32239), + 53: uint16(32963), + 54: uint16(33806), + 55: uint16(33894), + 56: uint16(34111), + 57: uint16(34655), + 58: uint16(34907), + 59: uint16(35096), + 60: uint16(35586), + 61: uint16(36949), + 62: uint16(38859), + 63: uint16(39759), + 64: uint16(20083), + 65: uint16(20369), + 66: uint16(20754), + 67: uint16(20842), + 68: uint16(63943), + 69: uint16(21807), + 70: uint16(21929), + 71: uint16(23418), + 72: uint16(23461), + 73: uint16(24188), + 74: uint16(24189), + 75: uint16(24254), + 76: uint16(24736), + 77: uint16(24799), + 78: uint16(24840), + 79: uint16(24841), + 80: uint16(25540), + 81: uint16(25912), + 82: uint16(26377), + 83: uint16(63944), + 84: uint16(26580), + 85: uint16(26586), + 86: uint16(63945), + 87: uint16(26977), + 88: uint16(26978), + 89: uint16(27833), + 90: uint16(27943), + 91: uint16(63946), + 92: uint16(28216), + 93: uint16(63947), + }, + 74: { + 0: uint16(28641), + 1: uint16(29494), + 2: uint16(29495), + 3: uint16(63948), + 4: uint16(29788), + 5: uint16(30001), + 6: uint16(63949), + 7: uint16(30290), + 8: uint16(63950), + 9: uint16(63951), + 10: uint16(32173), + 11: uint16(33278), + 12: uint16(33848), + 13: uint16(35029), + 14: uint16(35480), + 15: uint16(35547), + 16: uint16(35565), + 17: uint16(36400), + 18: uint16(36418), + 19: uint16(36938), + 20: uint16(36926), + 21: uint16(36986), + 22: uint16(37193), + 23: uint16(37321), + 24: uint16(37742), + 25: uint16(63952), + 26: uint16(63953), + 27: uint16(22537), + 28: uint16(63954), + 29: uint16(27603), + 30: uint16(32905), + 31: uint16(32946), + 32: uint16(63955), + 33: uint16(63956), + 34: uint16(20801), + 35: uint16(22891), + 36: uint16(23609), + 37: uint16(63957), + 38: uint16(63958), + 39: uint16(28516), + 40: uint16(29607), + 41: uint16(32996), + 42: uint16(36103), + 43: uint16(63959), + 44: uint16(37399), + 45: uint16(38287), + 46: uint16(63960), + 47: uint16(63961), + 48: uint16(63962), + 49: uint16(63963), + 50: uint16(32895), + 51: uint16(25102), + 52: uint16(28700), + 53: uint16(32104), + 54: uint16(34701), + 55: uint16(63964), + 56: uint16(22432), + 57: uint16(24681), + 58: uint16(24903), + 59: uint16(27575), + 60: uint16(35518), + 61: uint16(37504), + 62: uint16(38577), + 63: uint16(20057), + 64: uint16(21535), + 65: uint16(28139), + 66: uint16(34093), + 67: uint16(38512), + 68: uint16(38899), + 69: uint16(39150), + 70: uint16(25558), + 71: uint16(27875), + 72: uint16(37009), + 73: uint16(20957), + 74: uint16(25033), + 75: uint16(33210), + 76: uint16(40441), + 77: uint16(20381), + 78: uint16(20506), + 79: uint16(20736), + 80: uint16(23452), + 81: uint16(24847), + 82: uint16(25087), + 83: uint16(25836), + 84: uint16(26885), + 85: uint16(27589), + 86: uint16(30097), + 87: uint16(30691), + 88: uint16(32681), + 89: uint16(33380), + 90: uint16(34191), + 91: uint16(34811), + 92: uint16(34915), + 93: uint16(35516), + }, + 75: { + 0: uint16(35696), + 1: uint16(37291), + 2: uint16(20108), + 3: uint16(20197), + 4: uint16(20234), + 5: uint16(63965), + 6: uint16(63966), + 7: uint16(22839), + 8: uint16(23016), + 9: uint16(63967), + 10: uint16(24050), + 11: uint16(24347), + 12: uint16(24411), + 13: uint16(24609), + 14: uint16(63968), + 15: uint16(63969), + 16: uint16(63970), + 17: uint16(63971), + 18: uint16(29246), + 19: uint16(29669), + 20: uint16(63972), + 21: uint16(30064), + 22: uint16(30157), + 23: uint16(63973), + 24: uint16(31227), + 25: uint16(63974), + 26: uint16(32780), + 27: uint16(32819), + 28: uint16(32900), + 29: uint16(33505), + 30: uint16(33617), + 31: uint16(63975), + 32: uint16(63976), + 33: uint16(36029), + 34: uint16(36019), + 35: uint16(36999), + 36: uint16(63977), + 37: uint16(63978), + 38: uint16(39156), + 39: uint16(39180), + 40: uint16(63979), + 41: uint16(63980), + 42: uint16(28727), + 43: uint16(30410), + 44: uint16(32714), + 45: uint16(32716), + 46: uint16(32764), + 47: uint16(35610), + 48: uint16(20154), + 49: uint16(20161), + 50: uint16(20995), + 51: uint16(21360), + 52: uint16(63981), + 53: uint16(21693), + 54: uint16(22240), + 55: uint16(23035), + 56: uint16(23493), + 57: uint16(24341), + 58: uint16(24525), + 59: uint16(28270), + 60: uint16(63982), + 61: uint16(63983), + 62: uint16(32106), + 63: uint16(33589), + 64: uint16(63984), + 65: uint16(34451), + 66: uint16(35469), + 67: uint16(63985), + 68: uint16(38765), + 69: uint16(38775), + 70: uint16(63986), + 71: uint16(63987), + 72: uint16(19968), + 73: uint16(20314), + 74: uint16(20350), + 75: uint16(22777), + 76: uint16(26085), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(37808), + 80: uint16(39353), + 81: uint16(20219), + 82: uint16(22764), + 83: uint16(22922), + 84: uint16(23001), + 85: uint16(24641), + 86: uint16(63988), + 87: uint16(63989), + 88: uint16(31252), + 89: uint16(63990), + 90: uint16(33615), + 91: uint16(36035), + 92: uint16(20837), + 93: uint16(21316), + }, + 76: { + 0: uint16(63991), + 1: uint16(63992), + 2: uint16(63993), + 3: uint16(20173), + 4: uint16(21097), + 5: uint16(23381), + 6: uint16(33471), + 7: uint16(20180), + 8: uint16(21050), + 9: uint16(21672), + 10: uint16(22985), + 11: uint16(23039), + 12: uint16(23376), + 13: uint16(23383), + 14: uint16(23388), + 15: uint16(24675), + 16: uint16(24904), + 17: uint16(28363), + 18: uint16(28825), + 19: uint16(29038), + 20: uint16(29574), + 21: uint16(29943), + 22: uint16(30133), + 23: uint16(30913), + 24: uint16(32043), + 25: uint16(32773), + 26: uint16(33258), + 27: uint16(33576), + 28: uint16(34071), + 29: uint16(34249), + 30: uint16(35566), + 31: uint16(36039), + 32: uint16(38604), + 33: uint16(20316), + 34: uint16(21242), + 35: uint16(22204), + 36: uint16(26027), + 37: uint16(26152), + 38: uint16(28796), + 39: uint16(28856), + 40: uint16(29237), + 41: uint16(32189), + 42: uint16(33421), + 43: uint16(37196), + 44: uint16(38592), + 45: uint16(40306), + 46: uint16(23409), + 47: uint16(26855), + 48: uint16(27544), + 49: uint16(28538), + 50: uint16(30430), + 51: uint16(23697), + 52: uint16(26283), + 53: uint16(28507), + 54: uint16(31668), + 55: uint16(31786), + 56: uint16(34870), + 57: uint16(38620), + 58: uint16(19976), + 59: uint16(20183), + 60: uint16(21280), + 61: uint16(22580), + 62: uint16(22715), + 63: uint16(22767), + 64: uint16(22892), + 65: uint16(23559), + 66: uint16(24115), + 67: uint16(24196), + 68: uint16(24373), + 69: uint16(25484), + 70: uint16(26290), + 71: uint16(26454), + 72: uint16(27167), + 73: uint16(27299), + 74: uint16(27404), + 75: uint16(28479), + 76: uint16(29254), + 77: uint16(63994), + 78: uint16(29520), + 79: uint16(29835), + 80: uint16(31456), + 81: uint16(31911), + 82: uint16(33144), + 83: uint16(33247), + 84: uint16(33255), + 85: uint16(33674), + 86: uint16(33900), + 87: uint16(34083), + 88: uint16(34196), + 89: uint16(34255), + 90: uint16(35037), + 91: uint16(36115), + 92: uint16(37292), + 93: uint16(38263), + }, + 77: { + 0: uint16(38556), + 1: uint16(20877), + 2: uint16(21705), + 3: uint16(22312), + 4: uint16(23472), + 5: uint16(25165), + 6: uint16(26448), + 7: uint16(26685), + 8: uint16(26771), + 9: uint16(28221), + 10: uint16(28371), + 11: uint16(28797), + 12: uint16(32289), + 13: uint16(35009), + 14: uint16(36001), + 15: uint16(36617), + 16: uint16(40779), + 17: uint16(40782), + 18: uint16(29229), + 19: uint16(31631), + 20: uint16(35533), + 21: uint16(37658), + 22: uint16(20295), + 23: uint16(20302), + 24: uint16(20786), + 25: uint16(21632), + 26: uint16(22992), + 27: uint16(24213), + 28: uint16(25269), + 29: uint16(26485), + 30: uint16(26990), + 31: uint16(27159), + 32: uint16(27822), + 33: uint16(28186), + 34: uint16(29401), + 35: uint16(29482), + 36: uint16(30141), + 37: uint16(31672), + 38: uint16(32053), + 39: uint16(33511), + 40: uint16(33785), + 41: uint16(33879), + 42: uint16(34295), + 43: uint16(35419), + 44: uint16(36015), + 45: uint16(36487), + 46: uint16(36889), + 47: uint16(37048), + 48: uint16(38606), + 49: uint16(40799), + 50: uint16(21219), + 51: uint16(21514), + 52: uint16(23265), + 53: uint16(23490), + 54: uint16(25688), + 55: uint16(25973), + 56: uint16(28404), + 57: uint16(29380), + 58: uint16(63995), + 59: uint16(30340), + 60: uint16(31309), + 61: uint16(31515), + 62: uint16(31821), + 63: uint16(32318), + 64: uint16(32735), + 65: uint16(33659), + 66: uint16(35627), + 67: uint16(36042), + 68: uint16(36196), + 69: uint16(36321), + 70: uint16(36447), + 71: uint16(36842), + 72: uint16(36857), + 73: uint16(36969), + 74: uint16(37841), + 75: uint16(20291), + 76: uint16(20346), + 77: uint16(20659), + 78: uint16(20840), + 79: uint16(20856), + 80: uint16(21069), + 81: uint16(21098), + 82: uint16(22625), + 83: uint16(22652), + 84: uint16(22880), + 85: uint16(23560), + 86: uint16(23637), + 87: uint16(24283), + 88: uint16(24731), + 89: uint16(25136), + 90: uint16(26643), + 91: uint16(27583), + 92: uint16(27656), + 93: uint16(28593), + }, + 78: { + 0: uint16(29006), + 1: uint16(29728), + 2: uint16(30000), + 3: uint16(30008), + 4: uint16(30033), + 5: uint16(30322), + 6: uint16(31564), + 7: uint16(31627), + 8: uint16(31661), + 9: uint16(31686), + 10: uint16(32399), + 11: uint16(35438), + 12: uint16(36670), + 13: uint16(36681), + 14: uint16(37439), + 15: uint16(37523), + 16: uint16(37666), + 17: uint16(37931), + 18: uint16(38651), + 19: uint16(39002), + 20: uint16(39019), + 21: uint16(39198), + 22: uint16(20999), + 23: uint16(25130), + 24: uint16(25240), + 25: uint16(27993), + 26: uint16(30308), + 27: uint16(31434), + 28: uint16(31680), + 29: uint16(32118), + 30: uint16(21344), + 31: uint16(23742), + 32: uint16(24215), + 33: uint16(28472), + 34: uint16(28857), + 35: uint16(31896), + 36: uint16(38673), + 37: uint16(39822), + 38: uint16(40670), + 39: uint16(25509), + 40: uint16(25722), + 41: uint16(34678), + 42: uint16(19969), + 43: uint16(20117), + 44: uint16(20141), + 45: uint16(20572), + 46: uint16(20597), + 47: uint16(21576), + 48: uint16(22979), + 49: uint16(23450), + 50: uint16(24128), + 51: uint16(24237), + 52: uint16(24311), + 53: uint16(24449), + 54: uint16(24773), + 55: uint16(25402), + 56: uint16(25919), + 57: uint16(25972), + 58: uint16(26060), + 59: uint16(26230), + 60: uint16(26232), + 61: uint16(26622), + 62: uint16(26984), + 63: uint16(27273), + 64: uint16(27491), + 65: uint16(27712), + 66: uint16(28096), + 67: uint16(28136), + 68: uint16(28191), + 69: uint16(28254), + 70: uint16(28702), + 71: uint16(28833), + 72: uint16(29582), + 73: uint16(29693), + 74: uint16(30010), + 75: uint16(30555), + 76: uint16(30855), + 77: uint16(31118), + 78: uint16(31243), + 79: uint16(31357), + 80: uint16(31934), + 81: uint16(32142), + 82: uint16(33351), + 83: uint16(35330), + 84: uint16(35562), + 85: uint16(35998), + 86: uint16(37165), + 87: uint16(37194), + 88: uint16(37336), + 89: uint16(37478), + 90: uint16(37580), + 91: uint16(37664), + 92: uint16(38662), + 93: uint16(38742), + }, + 79: { + 0: uint16(38748), + 1: uint16(38914), + 2: uint16(40718), + 3: uint16(21046), + 4: uint16(21137), + 5: uint16(21884), + 6: uint16(22564), + 7: uint16(24093), + 8: uint16(24351), + 9: uint16(24716), + 10: uint16(25552), + 11: uint16(26799), + 12: uint16(28639), + 13: uint16(31085), + 14: uint16(31532), + 15: uint16(33229), + 16: uint16(34234), + 17: uint16(35069), + 18: uint16(35576), + 19: uint16(36420), + 20: uint16(37261), + 21: uint16(38500), + 22: uint16(38555), + 23: uint16(38717), + 24: uint16(38988), + 25: uint16(40778), + 26: uint16(20430), + 27: uint16(20806), + 28: uint16(20939), + 29: uint16(21161), + 30: uint16(22066), + 31: uint16(24340), + 32: uint16(24427), + 33: uint16(25514), + 34: uint16(25805), + 35: uint16(26089), + 36: uint16(26177), + 37: uint16(26362), + 38: uint16(26361), + 39: uint16(26397), + 40: uint16(26781), + 41: uint16(26839), + 42: uint16(27133), + 43: uint16(28437), + 44: uint16(28526), + 45: uint16(29031), + 46: uint16(29157), + 47: uint16(29226), + 48: uint16(29866), + 49: uint16(30522), + 50: uint16(31062), + 51: uint16(31066), + 52: uint16(31199), + 53: uint16(31264), + 54: uint16(31381), + 55: uint16(31895), + 56: uint16(31967), + 57: uint16(32068), + 58: uint16(32368), + 59: uint16(32903), + 60: uint16(34299), + 61: uint16(34468), + 62: uint16(35412), + 63: uint16(35519), + 64: uint16(36249), + 65: uint16(36481), + 66: uint16(36896), + 67: uint16(36973), + 68: uint16(37347), + 69: uint16(38459), + 70: uint16(38613), + 71: uint16(40165), + 72: uint16(26063), + 73: uint16(31751), + 74: uint16(36275), + 75: uint16(37827), + 76: uint16(23384), + 77: uint16(23562), + 78: uint16(21330), + 79: uint16(25305), + 80: uint16(29469), + 81: uint16(20519), + 82: uint16(23447), + 83: uint16(24478), + 84: uint16(24752), + 85: uint16(24939), + 86: uint16(26837), + 87: uint16(28121), + 88: uint16(29742), + 89: uint16(31278), + 90: uint16(32066), + 91: uint16(32156), + 92: uint16(32305), + 93: uint16(33131), + }, + 80: { + 0: uint16(36394), + 1: uint16(36405), + 2: uint16(37758), + 3: uint16(37912), + 4: uint16(20304), + 5: uint16(22352), + 6: uint16(24038), + 7: uint16(24231), + 8: uint16(25387), + 9: uint16(32618), + 10: uint16(20027), + 11: uint16(20303), + 12: uint16(20367), + 13: uint16(20570), + 14: uint16(23005), + 15: uint16(32964), + 16: uint16(21610), + 17: uint16(21608), + 18: uint16(22014), + 19: uint16(22863), + 20: uint16(23449), + 21: uint16(24030), + 22: uint16(24282), + 23: uint16(26205), + 24: uint16(26417), + 25: uint16(26609), + 26: uint16(26666), + 27: uint16(27880), + 28: uint16(27954), + 29: uint16(28234), + 30: uint16(28557), + 31: uint16(28855), + 32: uint16(29664), + 33: uint16(30087), + 34: uint16(31820), + 35: uint16(32002), + 36: uint16(32044), + 37: uint16(32162), + 38: uint16(33311), + 39: uint16(34523), + 40: uint16(35387), + 41: uint16(35461), + 42: uint16(36208), + 43: uint16(36490), + 44: uint16(36659), + 45: uint16(36913), + 46: uint16(37198), + 47: uint16(37202), + 48: uint16(37956), + 49: uint16(39376), + 50: uint16(31481), + 51: uint16(31909), + 52: uint16(20426), + 53: uint16(20737), + 54: uint16(20934), + 55: uint16(22472), + 56: uint16(23535), + 57: uint16(23803), + 58: uint16(26201), + 59: uint16(27197), + 60: uint16(27994), + 61: uint16(28310), + 62: uint16(28652), + 63: uint16(28940), + 64: uint16(30063), + 65: uint16(31459), + 66: uint16(34850), + 67: uint16(36897), + 68: uint16(36981), + 69: uint16(38603), + 70: uint16(39423), + 71: uint16(33537), + 72: uint16(20013), + 73: uint16(20210), + 74: uint16(34886), + 75: uint16(37325), + 76: uint16(21373), + 77: uint16(27355), + 78: uint16(26987), + 79: uint16(27713), + 80: uint16(33914), + 81: uint16(22686), + 82: uint16(24974), + 83: uint16(26366), + 84: uint16(25327), + 85: uint16(28893), + 86: uint16(29969), + 87: uint16(30151), + 88: uint16(32338), + 89: uint16(33976), + 90: uint16(35657), + 91: uint16(36104), + 92: uint16(20043), + 93: uint16(21482), + }, + 81: { + 0: uint16(21675), + 1: uint16(22320), + 2: uint16(22336), + 3: uint16(24535), + 4: uint16(25345), + 5: uint16(25351), + 6: uint16(25711), + 7: uint16(25903), + 8: uint16(26088), + 9: uint16(26234), + 10: uint16(26525), + 11: uint16(26547), + 12: uint16(27490), + 13: uint16(27744), + 14: uint16(27802), + 15: uint16(28460), + 16: uint16(30693), + 17: uint16(30757), + 18: uint16(31049), + 19: uint16(31063), + 20: uint16(32025), + 21: uint16(32930), + 22: uint16(33026), + 23: uint16(33267), + 24: uint16(33437), + 25: uint16(33463), + 26: uint16(34584), + 27: uint16(35468), + 28: uint16(63996), + 29: uint16(36100), + 30: uint16(36286), + 31: uint16(36978), + 32: uint16(30452), + 33: uint16(31257), + 34: uint16(31287), + 35: uint16(32340), + 36: uint16(32887), + 37: uint16(21767), + 38: uint16(21972), + 39: uint16(22645), + 40: uint16(25391), + 41: uint16(25634), + 42: uint16(26185), + 43: uint16(26187), + 44: uint16(26733), + 45: uint16(27035), + 46: uint16(27524), + 47: uint16(27941), + 48: uint16(28337), + 49: uint16(29645), + 50: uint16(29800), + 51: uint16(29857), + 52: uint16(30043), + 53: uint16(30137), + 54: uint16(30433), + 55: uint16(30494), + 56: uint16(30603), + 57: uint16(31206), + 58: uint16(32265), + 59: uint16(32285), + 60: uint16(33275), + 61: uint16(34095), + 62: uint16(34967), + 63: uint16(35386), + 64: uint16(36049), + 65: uint16(36587), + 66: uint16(36784), + 67: uint16(36914), + 68: uint16(37805), + 69: uint16(38499), + 70: uint16(38515), + 71: uint16(38663), + 72: uint16(20356), + 73: uint16(21489), + 74: uint16(23018), + 75: uint16(23241), + 76: uint16(24089), + 77: uint16(26702), + 78: uint16(29894), + 79: uint16(30142), + 80: uint16(31209), + 81: uint16(31378), + 82: uint16(33187), + 83: uint16(34541), + 84: uint16(36074), + 85: uint16(36300), + 86: uint16(36845), + 87: uint16(26015), + 88: uint16(26389), + 89: uint16(63997), + 90: uint16(22519), + 91: uint16(28503), + 92: uint16(32221), + 93: uint16(36655), + }, + 82: { + 0: uint16(37878), + 1: uint16(38598), + 2: uint16(24501), + 3: uint16(25074), + 4: uint16(28548), + 5: uint16(19988), + 6: uint16(20376), + 7: uint16(20511), + 8: uint16(21449), + 9: uint16(21983), + 10: uint16(23919), + 11: uint16(24046), + 12: uint16(27425), + 13: uint16(27492), + 14: uint16(30923), + 15: uint16(31642), + 16: uint16(63998), + 17: uint16(36425), + 18: uint16(36554), + 19: uint16(36974), + 20: uint16(25417), + 21: uint16(25662), + 22: uint16(30528), + 23: uint16(31364), + 24: uint16(37679), + 25: uint16(38015), + 26: uint16(40810), + 27: uint16(25776), + 28: uint16(28591), + 29: uint16(29158), + 30: uint16(29864), + 31: uint16(29914), + 32: uint16(31428), + 33: uint16(31762), + 34: uint16(32386), + 35: uint16(31922), + 36: uint16(32408), + 37: uint16(35738), + 38: uint16(36106), + 39: uint16(38013), + 40: uint16(39184), + 41: uint16(39244), + 42: uint16(21049), + 43: uint16(23519), + 44: uint16(25830), + 45: uint16(26413), + 46: uint16(32046), + 47: uint16(20717), + 48: uint16(21443), + 49: uint16(22649), + 50: uint16(24920), + 51: uint16(24921), + 52: uint16(25082), + 53: uint16(26028), + 54: uint16(31449), + 55: uint16(35730), + 56: uint16(35734), + 57: uint16(20489), + 58: uint16(20513), + 59: uint16(21109), + 60: uint16(21809), + 61: uint16(23100), + 62: uint16(24288), + 63: uint16(24432), + 64: uint16(24884), + 65: uint16(25950), + 66: uint16(26124), + 67: uint16(26166), + 68: uint16(26274), + 69: uint16(27085), + 70: uint16(28356), + 71: uint16(28466), + 72: uint16(29462), + 73: uint16(30241), + 74: uint16(31379), + 75: uint16(33081), + 76: uint16(33369), + 77: uint16(33750), + 78: uint16(33980), + 79: uint16(20661), + 80: uint16(22512), + 81: uint16(23488), + 82: uint16(23528), + 83: uint16(24425), + 84: uint16(25505), + 85: uint16(30758), + 86: uint16(32181), + 87: uint16(33756), + 88: uint16(34081), + 89: uint16(37319), + 90: uint16(37365), + 91: uint16(20874), + 92: uint16(26613), + 93: uint16(31574), + }, + 83: { + 0: uint16(36012), + 1: uint16(20932), + 2: uint16(22971), + 3: uint16(24765), + 4: uint16(34389), + 5: uint16(20508), + 6: uint16(63999), + 7: uint16(21076), + 8: uint16(23610), + 9: uint16(24957), + 10: uint16(25114), + 11: uint16(25299), + 12: uint16(25842), + 13: uint16(26021), + 14: uint16(28364), + 15: uint16(30240), + 16: uint16(33034), + 17: uint16(36448), + 18: uint16(38495), + 19: uint16(38587), + 20: uint16(20191), + 21: uint16(21315), + 22: uint16(21912), + 23: uint16(22825), + 24: uint16(24029), + 25: uint16(25797), + 26: uint16(27849), + 27: uint16(28154), + 28: uint16(29588), + 29: uint16(31359), + 30: uint16(33307), + 31: uint16(34214), + 32: uint16(36068), + 33: uint16(36368), + 34: uint16(36983), + 35: uint16(37351), + 36: uint16(38369), + 37: uint16(38433), + 38: uint16(38854), + 39: uint16(20984), + 40: uint16(21746), + 41: uint16(21894), + 42: uint16(24505), + 43: uint16(25764), + 44: uint16(28552), + 45: uint16(32180), + 46: uint16(36639), + 47: uint16(36685), + 48: uint16(37941), + 49: uint16(20681), + 50: uint16(23574), + 51: uint16(27838), + 52: uint16(28155), + 53: uint16(29979), + 54: uint16(30651), + 55: uint16(31805), + 56: uint16(31844), + 57: uint16(35449), + 58: uint16(35522), + 59: uint16(22558), + 60: uint16(22974), + 61: uint16(24086), + 62: uint16(25463), + 63: uint16(29266), + 64: uint16(30090), + 65: uint16(30571), + 66: uint16(35548), + 67: uint16(36028), + 68: uint16(36626), + 69: uint16(24307), + 70: uint16(26228), + 71: uint16(28152), + 72: uint16(32893), + 73: uint16(33729), + 74: uint16(35531), + 75: uint16(38737), + 76: uint16(39894), + 77: uint16(64000), + 78: uint16(21059), + 79: uint16(26367), + 80: uint16(28053), + 81: uint16(28399), + 82: uint16(32224), + 83: uint16(35558), + 84: uint16(36910), + 85: uint16(36958), + 86: uint16(39636), + 87: uint16(21021), + 88: uint16(21119), + 89: uint16(21736), + 90: uint16(24980), + 91: uint16(25220), + 92: uint16(25307), + 93: uint16(26786), + }, + 84: { + 0: uint16(26898), + 1: uint16(26970), + 2: uint16(27189), + 3: uint16(28818), + 4: uint16(28966), + 5: uint16(30813), + 6: uint16(30977), + 7: uint16(30990), + 8: uint16(31186), + 9: uint16(31245), + 10: uint16(32918), + 11: uint16(33400), + 12: uint16(33493), + 13: uint16(33609), + 14: uint16(34121), + 15: uint16(35970), + 16: uint16(36229), + 17: uint16(37218), + 18: uint16(37259), + 19: uint16(37294), + 20: uint16(20419), + 21: uint16(22225), + 22: uint16(29165), + 23: uint16(30679), + 24: uint16(34560), + 25: uint16(35320), + 26: uint16(23544), + 27: uint16(24534), + 28: uint16(26449), + 29: uint16(37032), + 30: uint16(21474), + 31: uint16(22618), + 32: uint16(23541), + 33: uint16(24740), + 34: uint16(24961), + 35: uint16(25696), + 36: uint16(32317), + 37: uint16(32880), + 38: uint16(34085), + 39: uint16(37507), + 40: uint16(25774), + 41: uint16(20652), + 42: uint16(23828), + 43: uint16(26368), + 44: uint16(22684), + 45: uint16(25277), + 46: uint16(25512), + 47: uint16(26894), + 48: uint16(27000), + 49: uint16(27166), + 50: uint16(28267), + 51: uint16(30394), + 52: uint16(31179), + 53: uint16(33467), + 54: uint16(33833), + 55: uint16(35535), + 56: uint16(36264), + 57: uint16(36861), + 58: uint16(37138), + 59: uint16(37195), + 60: uint16(37276), + 61: uint16(37648), + 62: uint16(37656), + 63: uint16(37786), + 64: uint16(38619), + 65: uint16(39478), + 66: uint16(39949), + 67: uint16(19985), + 68: uint16(30044), + 69: uint16(31069), + 70: uint16(31482), + 71: uint16(31569), + 72: uint16(31689), + 73: uint16(32302), + 74: uint16(33988), + 75: uint16(36441), + 76: uint16(36468), + 77: uint16(36600), + 78: uint16(36880), + 79: uint16(26149), + 80: uint16(26943), + 81: uint16(29763), + 82: uint16(20986), + 83: uint16(26414), + 84: uint16(40668), + 85: uint16(20805), + 86: uint16(24544), + 87: uint16(27798), + 88: uint16(34802), + 89: uint16(34909), + 90: uint16(34935), + 91: uint16(24756), + 92: uint16(33205), + 93: uint16(33795), + }, + 85: { + 0: uint16(36101), + 1: uint16(21462), + 2: uint16(21561), + 3: uint16(22068), + 4: uint16(23094), + 5: uint16(23601), + 6: uint16(28810), + 7: uint16(32736), + 8: uint16(32858), + 9: uint16(33030), + 10: uint16(33261), + 11: uint16(36259), + 12: uint16(37257), + 13: uint16(39519), + 14: uint16(40434), + 15: uint16(20596), + 16: uint16(20164), + 17: uint16(21408), + 18: uint16(24827), + 19: uint16(28204), + 20: uint16(23652), + 21: uint16(20360), + 22: uint16(20516), + 23: uint16(21988), + 24: uint16(23769), + 25: uint16(24159), + 26: uint16(24677), + 27: uint16(26772), + 28: uint16(27835), + 29: uint16(28100), + 30: uint16(29118), + 31: uint16(30164), + 32: uint16(30196), + 33: uint16(30305), + 34: uint16(31258), + 35: uint16(31305), + 36: uint16(32199), + 37: uint16(32251), + 38: uint16(32622), + 39: uint16(33268), + 40: uint16(34473), + 41: uint16(36636), + 42: uint16(38601), + 43: uint16(39347), + 44: uint16(40786), + 45: uint16(21063), + 46: uint16(21189), + 47: uint16(39149), + 48: uint16(35242), + 49: uint16(19971), + 50: uint16(26578), + 51: uint16(28422), + 52: uint16(20405), + 53: uint16(23522), + 54: uint16(26517), + 55: uint16(27784), + 56: uint16(28024), + 57: uint16(29723), + 58: uint16(30759), + 59: uint16(37341), + 60: uint16(37756), + 61: uint16(34756), + 62: uint16(31204), + 63: uint16(31281), + 64: uint16(24555), + 65: uint16(20182), + 66: uint16(21668), + 67: uint16(21822), + 68: uint16(22702), + 69: uint16(22949), + 70: uint16(24816), + 71: uint16(25171), + 72: uint16(25302), + 73: uint16(26422), + 74: uint16(26965), + 75: uint16(33333), + 76: uint16(38464), + 77: uint16(39345), + 78: uint16(39389), + 79: uint16(20524), + 80: uint16(21331), + 81: uint16(21828), + 82: uint16(22396), + 83: uint16(64001), + 84: uint16(25176), + 85: uint16(64002), + 86: uint16(25826), + 87: uint16(26219), + 88: uint16(26589), + 89: uint16(28609), + 90: uint16(28655), + 91: uint16(29730), + 92: uint16(29752), + 93: uint16(35351), + }, + 86: { + 0: uint16(37944), + 1: uint16(21585), + 2: uint16(22022), + 3: uint16(22374), + 4: uint16(24392), + 5: uint16(24986), + 6: uint16(27470), + 7: uint16(28760), + 8: uint16(28845), + 9: uint16(32187), + 10: uint16(35477), + 11: uint16(22890), + 12: uint16(33067), + 13: uint16(25506), + 14: uint16(30472), + 15: uint16(32829), + 16: uint16(36010), + 17: uint16(22612), + 18: uint16(25645), + 19: uint16(27067), + 20: uint16(23445), + 21: uint16(24081), + 22: uint16(28271), + 23: uint16(64003), + 24: uint16(34153), + 25: uint16(20812), + 26: uint16(21488), + 27: uint16(22826), + 28: uint16(24608), + 29: uint16(24907), + 30: uint16(27526), + 31: uint16(27760), + 32: uint16(27888), + 33: uint16(31518), + 34: uint16(32974), + 35: uint16(33492), + 36: uint16(36294), + 37: uint16(37040), + 38: uint16(39089), + 39: uint16(64004), + 40: uint16(25799), + 41: uint16(28580), + 42: uint16(25745), + 43: uint16(25860), + 44: uint16(20814), + 45: uint16(21520), + 46: uint16(22303), + 47: uint16(35342), + 48: uint16(24927), + 49: uint16(26742), + 50: uint16(64005), + 51: uint16(30171), + 52: uint16(31570), + 53: uint16(32113), + 54: uint16(36890), + 55: uint16(22534), + 56: uint16(27084), + 57: uint16(33151), + 58: uint16(35114), + 59: uint16(36864), + 60: uint16(38969), + 61: uint16(20600), + 62: uint16(22871), + 63: uint16(22956), + 64: uint16(25237), + 65: uint16(36879), + 66: uint16(39722), + 67: uint16(24925), + 68: uint16(29305), + 69: uint16(38358), + 70: uint16(22369), + 71: uint16(23110), + 72: uint16(24052), + 73: uint16(25226), + 74: uint16(25773), + 75: uint16(25850), + 76: uint16(26487), + 77: uint16(27874), + 78: uint16(27966), + 79: uint16(29228), + 80: uint16(29750), + 81: uint16(30772), + 82: uint16(32631), + 83: uint16(33453), + 84: uint16(36315), + 85: uint16(38935), + 86: uint16(21028), + 87: uint16(22338), + 88: uint16(26495), + 89: uint16(29256), + 90: uint16(29923), + 91: uint16(36009), + 92: uint16(36774), + 93: uint16(37393), + }, + 87: { + 0: uint16(38442), + 1: uint16(20843), + 2: uint16(21485), + 3: uint16(25420), + 4: uint16(20329), + 5: uint16(21764), + 6: uint16(24726), + 7: uint16(25943), + 8: uint16(27803), + 9: uint16(28031), + 10: uint16(29260), + 11: uint16(29437), + 12: uint16(31255), + 13: uint16(35207), + 14: uint16(35997), + 15: uint16(24429), + 16: uint16(28558), + 17: uint16(28921), + 18: uint16(33192), + 19: uint16(24846), + 20: uint16(20415), + 21: uint16(20559), + 22: uint16(25153), + 23: uint16(29255), + 24: uint16(31687), + 25: uint16(32232), + 26: uint16(32745), + 27: uint16(36941), + 28: uint16(38829), + 29: uint16(39449), + 30: uint16(36022), + 31: uint16(22378), + 32: uint16(24179), + 33: uint16(26544), + 34: uint16(33805), + 35: uint16(35413), + 36: uint16(21536), + 37: uint16(23318), + 38: uint16(24163), + 39: uint16(24290), + 40: uint16(24330), + 41: uint16(25987), + 42: uint16(32954), + 43: uint16(34109), + 44: uint16(38281), + 45: uint16(38491), + 46: uint16(20296), + 47: uint16(21253), + 48: uint16(21261), + 49: uint16(21263), + 50: uint16(21638), + 51: uint16(21754), + 52: uint16(22275), + 53: uint16(24067), + 54: uint16(24598), + 55: uint16(25243), + 56: uint16(25265), + 57: uint16(25429), + 58: uint16(64006), + 59: uint16(27873), + 60: uint16(28006), + 61: uint16(30129), + 62: uint16(30770), + 63: uint16(32990), + 64: uint16(33071), + 65: uint16(33502), + 66: uint16(33889), + 67: uint16(33970), + 68: uint16(34957), + 69: uint16(35090), + 70: uint16(36875), + 71: uint16(37610), + 72: uint16(39165), + 73: uint16(39825), + 74: uint16(24133), + 75: uint16(26292), + 76: uint16(26333), + 77: uint16(28689), + 78: uint16(29190), + 79: uint16(64007), + 80: uint16(20469), + 81: uint16(21117), + 82: uint16(24426), + 83: uint16(24915), + 84: uint16(26451), + 85: uint16(27161), + 86: uint16(28418), + 87: uint16(29922), + 88: uint16(31080), + 89: uint16(34920), + 90: uint16(35961), + 91: uint16(39111), + 92: uint16(39108), + 93: uint16(39491), + }, + 88: { + 0: uint16(21697), + 1: uint16(31263), + 2: uint16(26963), + 3: uint16(35575), + 4: uint16(35914), + 5: uint16(39080), + 6: uint16(39342), + 7: uint16(24444), + 8: uint16(25259), + 9: uint16(30130), + 10: uint16(30382), + 11: uint16(34987), + 12: uint16(36991), + 13: uint16(38466), + 14: uint16(21305), + 15: uint16(24380), + 16: uint16(24517), + 17: uint16(27852), + 18: uint16(29644), + 19: uint16(30050), + 20: uint16(30091), + 21: uint16(31558), + 22: uint16(33534), + 23: uint16(39325), + 24: uint16(20047), + 25: uint16(36924), + 26: uint16(19979), + 27: uint16(20309), + 28: uint16(21414), + 29: uint16(22799), + 30: uint16(24264), + 31: uint16(26160), + 32: uint16(27827), + 33: uint16(29781), + 34: uint16(33655), + 35: uint16(34662), + 36: uint16(36032), + 37: uint16(36944), + 38: uint16(38686), + 39: uint16(39957), + 40: uint16(22737), + 41: uint16(23416), + 42: uint16(34384), + 43: uint16(35604), + 44: uint16(40372), + 45: uint16(23506), + 46: uint16(24680), + 47: uint16(24717), + 48: uint16(26097), + 49: uint16(27735), + 50: uint16(28450), + 51: uint16(28579), + 52: uint16(28698), + 53: uint16(32597), + 54: uint16(32752), + 55: uint16(38289), + 56: uint16(38290), + 57: uint16(38480), + 58: uint16(38867), + 59: uint16(21106), + 60: uint16(36676), + 61: uint16(20989), + 62: uint16(21547), + 63: uint16(21688), + 64: uint16(21859), + 65: uint16(21898), + 66: uint16(27323), + 67: uint16(28085), + 68: uint16(32216), + 69: uint16(33382), + 70: uint16(37532), + 71: uint16(38519), + 72: uint16(40569), + 73: uint16(21512), + 74: uint16(21704), + 75: uint16(30418), + 76: uint16(34532), + 77: uint16(38308), + 78: uint16(38356), + 79: uint16(38492), + 80: uint16(20130), + 81: uint16(20233), + 82: uint16(23022), + 83: uint16(23270), + 84: uint16(24055), + 85: uint16(24658), + 86: uint16(25239), + 87: uint16(26477), + 88: uint16(26689), + 89: uint16(27782), + 90: uint16(28207), + 91: uint16(32568), + 92: uint16(32923), + 93: uint16(33322), + }, + 89: { + 0: uint16(64008), + 1: uint16(64009), + 2: uint16(38917), + 3: uint16(20133), + 4: uint16(20565), + 5: uint16(21683), + 6: uint16(22419), + 7: uint16(22874), + 8: uint16(23401), + 9: uint16(23475), + 10: uint16(25032), + 11: uint16(26999), + 12: uint16(28023), + 13: uint16(28707), + 14: uint16(34809), + 15: uint16(35299), + 16: uint16(35442), + 17: uint16(35559), + 18: uint16(36994), + 19: uint16(39405), + 20: uint16(39608), + 21: uint16(21182), + 22: uint16(26680), + 23: uint16(20502), + 24: uint16(24184), + 25: uint16(26447), + 26: uint16(33607), + 27: uint16(34892), + 28: uint16(20139), + 29: uint16(21521), + 30: uint16(22190), + 31: uint16(29670), + 32: uint16(37141), + 33: uint16(38911), + 34: uint16(39177), + 35: uint16(39255), + 36: uint16(39321), + 37: uint16(22099), + 38: uint16(22687), + 39: uint16(34395), + 40: uint16(35377), + 41: uint16(25010), + 42: uint16(27382), + 43: uint16(29563), + 44: uint16(36562), + 45: uint16(27463), + 46: uint16(38570), + 47: uint16(39511), + 48: uint16(22869), + 49: uint16(29184), + 50: uint16(36203), + 51: uint16(38761), + 52: uint16(20436), + 53: uint16(23796), + 54: uint16(24358), + 55: uint16(25080), + 56: uint16(26203), + 57: uint16(27883), + 58: uint16(28843), + 59: uint16(29572), + 60: uint16(29625), + 61: uint16(29694), + 62: uint16(30505), + 63: uint16(30541), + 64: uint16(32067), + 65: uint16(32098), + 66: uint16(32291), + 67: uint16(33335), + 68: uint16(34898), + 69: uint16(64010), + 70: uint16(36066), + 71: uint16(37449), + 72: uint16(39023), + 73: uint16(23377), + 74: uint16(31348), + 75: uint16(34880), + 76: uint16(38913), + 77: uint16(23244), + 78: uint16(20448), + 79: uint16(21332), + 80: uint16(22846), + 81: uint16(23805), + 82: uint16(25406), + 83: uint16(28025), + 84: uint16(29433), + 85: uint16(33029), + 86: uint16(33031), + 87: uint16(33698), + 88: uint16(37583), + 89: uint16(38960), + 90: uint16(20136), + 91: uint16(20804), + 92: uint16(21009), + 93: uint16(22411), + }, + 90: { + 0: uint16(24418), + 1: uint16(27842), + 2: uint16(28366), + 3: uint16(28677), + 4: uint16(28752), + 5: uint16(28847), + 6: uint16(29074), + 7: uint16(29673), + 8: uint16(29801), + 9: uint16(33610), + 10: uint16(34722), + 11: uint16(34913), + 12: uint16(36872), + 13: uint16(37026), + 14: uint16(37795), + 15: uint16(39336), + 16: uint16(20846), + 17: uint16(24407), + 18: uint16(24800), + 19: uint16(24935), + 20: uint16(26291), + 21: uint16(34137), + 22: uint16(36426), + 23: uint16(37295), + 24: uint16(38795), + 25: uint16(20046), + 26: uint16(20114), + 27: uint16(21628), + 28: uint16(22741), + 29: uint16(22778), + 30: uint16(22909), + 31: uint16(23733), + 32: uint16(24359), + 33: uint16(25142), + 34: uint16(25160), + 35: uint16(26122), + 36: uint16(26215), + 37: uint16(27627), + 38: uint16(28009), + 39: uint16(28111), + 40: uint16(28246), + 41: uint16(28408), + 42: uint16(28564), + 43: uint16(28640), + 44: uint16(28649), + 45: uint16(28765), + 46: uint16(29392), + 47: uint16(29733), + 48: uint16(29786), + 49: uint16(29920), + 50: uint16(30355), + 51: uint16(31068), + 52: uint16(31946), + 53: uint16(32286), + 54: uint16(32993), + 55: uint16(33446), + 56: uint16(33899), + 57: uint16(33983), + 58: uint16(34382), + 59: uint16(34399), + 60: uint16(34676), + 61: uint16(35703), + 62: uint16(35946), + 63: uint16(37804), + 64: uint16(38912), + 65: uint16(39013), + 66: uint16(24785), + 67: uint16(25110), + 68: uint16(37239), + 69: uint16(23130), + 70: uint16(26127), + 71: uint16(28151), + 72: uint16(28222), + 73: uint16(29759), + 74: uint16(39746), + 75: uint16(24573), + 76: uint16(24794), + 77: uint16(31503), + 78: uint16(21700), + 79: uint16(24344), + 80: uint16(27742), + 81: uint16(27859), + 82: uint16(27946), + 83: uint16(28888), + 84: uint16(32005), + 85: uint16(34425), + 86: uint16(35340), + 87: uint16(40251), + 88: uint16(21270), + 89: uint16(21644), + 90: uint16(23301), + 91: uint16(27194), + 92: uint16(28779), + 93: uint16(30069), + }, + 91: { + 0: uint16(31117), + 1: uint16(31166), + 2: uint16(33457), + 3: uint16(33775), + 4: uint16(35441), + 5: uint16(35649), + 6: uint16(36008), + 7: uint16(38772), + 8: uint16(64011), + 9: uint16(25844), + 10: uint16(25899), + 11: uint16(30906), + 12: uint16(30907), + 13: uint16(31339), + 14: uint16(20024), + 15: uint16(21914), + 16: uint16(22864), + 17: uint16(23462), + 18: uint16(24187), + 19: uint16(24739), + 20: uint16(25563), + 21: uint16(27489), + 22: uint16(26213), + 23: uint16(26707), + 24: uint16(28185), + 25: uint16(29029), + 26: uint16(29872), + 27: uint16(32008), + 28: uint16(36996), + 29: uint16(39529), + 30: uint16(39973), + 31: uint16(27963), + 32: uint16(28369), + 33: uint16(29502), + 34: uint16(35905), + 35: uint16(38346), + 36: uint16(20976), + 37: uint16(24140), + 38: uint16(24488), + 39: uint16(24653), + 40: uint16(24822), + 41: uint16(24880), + 42: uint16(24908), + 43: uint16(26179), + 44: uint16(26180), + 45: uint16(27045), + 46: uint16(27841), + 47: uint16(28255), + 48: uint16(28361), + 49: uint16(28514), + 50: uint16(29004), + 51: uint16(29852), + 52: uint16(30343), + 53: uint16(31681), + 54: uint16(31783), + 55: uint16(33618), + 56: uint16(34647), + 57: uint16(36945), + 58: uint16(38541), + 59: uint16(40643), + 60: uint16(21295), + 61: uint16(22238), + 62: uint16(24315), + 63: uint16(24458), + 64: uint16(24674), + 65: uint16(24724), + 66: uint16(25079), + 67: uint16(26214), + 68: uint16(26371), + 69: uint16(27292), + 70: uint16(28142), + 71: uint16(28590), + 72: uint16(28784), + 73: uint16(29546), + 74: uint16(32362), + 75: uint16(33214), + 76: uint16(33588), + 77: uint16(34516), + 78: uint16(35496), + 79: uint16(36036), + 80: uint16(21123), + 81: uint16(29554), + 82: uint16(23446), + 83: uint16(27243), + 84: uint16(37892), + 85: uint16(21742), + 86: uint16(22150), + 87: uint16(23389), + 88: uint16(25928), + 89: uint16(25989), + 90: uint16(26313), + 91: uint16(26783), + 92: uint16(28045), + 93: uint16(28102), + }, + 92: { + 0: uint16(29243), + 1: uint16(32948), + 2: uint16(37237), + 3: uint16(39501), + 4: uint16(20399), + 5: uint16(20505), + 6: uint16(21402), + 7: uint16(21518), + 8: uint16(21564), + 9: uint16(21897), + 10: uint16(21957), + 11: uint16(24127), + 12: uint16(24460), + 13: uint16(26429), + 14: uint16(29030), + 15: uint16(29661), + 16: uint16(36869), + 17: uint16(21211), + 18: uint16(21235), + 19: uint16(22628), + 20: uint16(22734), + 21: uint16(28932), + 22: uint16(29071), + 23: uint16(29179), + 24: uint16(34224), + 25: uint16(35347), + 26: uint16(26248), + 27: uint16(34216), + 28: uint16(21927), + 29: uint16(26244), + 30: uint16(29002), + 31: uint16(33841), + 32: uint16(21321), + 33: uint16(21913), + 34: uint16(27585), + 35: uint16(24409), + 36: uint16(24509), + 37: uint16(25582), + 38: uint16(26249), + 39: uint16(28999), + 40: uint16(35569), + 41: uint16(36637), + 42: uint16(40638), + 43: uint16(20241), + 44: uint16(25658), + 45: uint16(28875), + 46: uint16(30054), + 47: uint16(34407), + 48: uint16(24676), + 49: uint16(35662), + 50: uint16(40440), + 51: uint16(20807), + 52: uint16(20982), + 53: uint16(21256), + 54: uint16(27958), + 55: uint16(33016), + 56: uint16(40657), + 57: uint16(26133), + 58: uint16(27427), + 59: uint16(28824), + 60: uint16(30165), + 61: uint16(21507), + 62: uint16(23673), + 63: uint16(32007), + 64: uint16(35350), + 65: uint16(27424), + 66: uint16(27453), + 67: uint16(27462), + 68: uint16(21560), + 69: uint16(24688), + 70: uint16(27965), + 71: uint16(32725), + 72: uint16(33288), + 73: uint16(20694), + 74: uint16(20958), + 75: uint16(21916), + 76: uint16(22123), + 77: uint16(22221), + 78: uint16(23020), + 79: uint16(23305), + 80: uint16(24076), + 81: uint16(24985), + 82: uint16(24984), + 83: uint16(25137), + 84: uint16(26206), + 85: uint16(26342), + 86: uint16(29081), + 87: uint16(29113), + 88: uint16(29114), + 89: uint16(29351), + 90: uint16(31143), + 91: uint16(31232), + 92: uint16(32690), + 93: uint16(35440), + }, +} + +var _rev_jis = [6879]uint16{ + 0: uint16(31), + 1: uint16(80), + 2: uint16(81), + 3: uint16(87), + 4: uint16(14), + 5: uint16(299), + 6: uint16(74), + 7: uint16(61), + 8: uint16(12), + 9: uint16(344), + 10: uint16(62), + 11: uint16(63), + 12: uint16(1280), + 13: uint16(1281), + 14: uint16(1282), + 15: uint16(1283), + 16: uint16(1284), + 17: uint16(1285), + 18: uint16(1286), + 19: uint16(1287), + 20: uint16(1288), + 21: uint16(1289), + 22: uint16(1290), + 23: uint16(1291), + 24: uint16(1292), + 25: uint16(1293), + 26: uint16(1294), + 27: uint16(1295), + 28: uint16(1296), + 29: uint16(1297), + 30: uint16(1298), + 31: uint16(1299), + 32: uint16(1300), + 33: uint16(1301), + 34: uint16(1302), + 35: uint16(1303), + 36: uint16(1312), + 37: uint16(1313), + 38: uint16(1314), + 39: uint16(1315), + 40: uint16(1316), + 41: uint16(1317), + 42: uint16(1318), + 43: uint16(1319), + 44: uint16(1320), + 45: uint16(1321), + 46: uint16(1322), + 47: uint16(1323), + 48: uint16(1324), + 49: uint16(1325), + 50: uint16(1326), + 51: uint16(1327), + 52: uint16(1328), + 53: uint16(1329), + 54: uint16(1330), + 55: uint16(1331), + 56: uint16(1332), + 57: uint16(1333), + 58: uint16(1334), + 59: uint16(1335), + 60: uint16(1542), + 61: uint16(1536), + 62: uint16(1537), + 63: uint16(1538), + 64: uint16(1539), + 65: uint16(1540), + 66: uint16(1541), + 67: uint16(1543), + 68: uint16(1544), + 69: uint16(1545), + 70: uint16(1546), + 71: uint16(1547), + 72: uint16(1548), + 73: uint16(1549), + 74: uint16(1550), + 75: uint16(1551), + 76: uint16(1552), + 77: uint16(1553), + 78: uint16(1554), + 79: uint16(1555), + 80: uint16(1556), + 81: uint16(1557), + 82: uint16(1558), + 83: uint16(1559), + 84: uint16(1560), + 85: uint16(1561), + 86: uint16(1562), + 87: uint16(1563), + 88: uint16(1564), + 89: uint16(1565), + 90: uint16(1566), + 91: uint16(1567), + 92: uint16(1568), + 93: uint16(1584), + 94: uint16(1585), + 95: uint16(1586), + 96: uint16(1587), + 97: uint16(1588), + 98: uint16(1589), + 99: uint16(1591), + 100: uint16(1592), + 101: uint16(1593), + 102: uint16(1594), + 103: uint16(1595), + 104: uint16(1596), + 105: uint16(1597), + 106: uint16(1598), + 107: uint16(1599), + 108: uint16(1600), + 109: uint16(1601), + 110: uint16(1602), + 111: uint16(1603), + 112: uint16(1604), + 113: uint16(1605), + 114: uint16(1606), + 115: uint16(1607), + 116: uint16(1608), + 117: uint16(1609), + 118: uint16(1610), + 119: uint16(1611), + 120: uint16(1612), + 121: uint16(1613), + 122: uint16(1614), + 123: uint16(1615), + 124: uint16(1616), + 125: uint16(1590), + 126: uint16(29), + 127: uint16(28), + 128: uint16(33), + 129: uint16(37), + 130: uint16(38), + 131: uint16(39), + 132: uint16(40), + 133: uint16(342), + 134: uint16(343), + 135: uint16(36), + 136: uint16(35), + 137: uint16(338), + 138: uint16(75), + 139: uint16(76), + 140: uint16(263), + 141: uint16(77), + 142: uint16(337), + 143: uint16(266), + 144: uint16(267), + 145: uint16(265), + 146: uint16(268), + 147: uint16(300), + 148: uint16(301), + 149: uint16(302), + 150: uint16(318), + 151: uint16(303), + 152: uint16(319), + 153: uint16(281), + 154: uint16(282), + 155: uint16(60), + 156: uint16(324), + 157: uint16(326), + 158: uint16(70), + 159: uint16(315), + 160: uint16(297), + 161: uint16(298), + 162: uint16(288), + 163: uint16(287), + 164: uint16(328), + 165: uint16(329), + 166: uint16(71), + 167: uint16(327), + 168: uint16(325), + 169: uint16(321), + 170: uint16(65), + 171: uint16(320), + 172: uint16(68), + 173: uint16(69), + 174: uint16(322), + 175: uint16(323), + 176: uint16(285), + 177: uint16(286), + 178: uint16(283), + 179: uint16(284), + 180: uint16(316), + 181: uint16(317), + 182: uint16(1792), + 183: uint16(1803), + 184: uint16(1793), + 185: uint16(1804), + 186: uint16(1794), + 187: uint16(1805), + 188: uint16(1795), + 189: uint16(1806), + 190: uint16(1797), + 191: uint16(1808), + 192: uint16(1796), + 193: uint16(1807), + 194: uint16(1798), + 195: uint16(1819), + 196: uint16(1814), + 197: uint16(1809), + 198: uint16(1800), + 199: uint16(1821), + 200: uint16(1816), + 201: uint16(1811), + 202: uint16(1799), + 203: uint16(1815), + 204: uint16(1820), + 205: uint16(1810), + 206: uint16(1801), + 207: uint16(1817), + 208: uint16(1822), + 209: uint16(1812), + 210: uint16(1802), + 211: uint16(1818), + 212: uint16(1823), + 213: uint16(1813), + 214: uint16(258), + 215: uint16(257), + 216: uint16(260), + 217: uint16(259), + 218: uint16(262), + 219: uint16(261), + 220: uint16(256), + 221: uint16(93), + 222: uint16(90), + 223: uint16(92), + 224: uint16(91), + 225: uint16(349), + 226: uint16(89), + 227: uint16(88), + 228: uint16(73), + 229: uint16(72), + 230: uint16(341), + 231: uint16(340), + 232: uint16(339), + 234: uint16(1), + 235: uint16(2), + 236: uint16(22), + 237: uint16(24), + 238: uint16(25), + 239: uint16(26), + 240: uint16(49), + 241: uint16(50), + 242: uint16(51), + 243: uint16(52), + 244: uint16(53), + 245: uint16(54), + 246: uint16(55), + 247: uint16(56), + 248: uint16(57), + 249: uint16(58), + 250: uint16(264), + 251: uint16(269), + 252: uint16(43), + 253: uint16(44), + 254: uint16(32), + 255: uint16(768), + 256: uint16(769), + 257: uint16(770), + 258: uint16(771), + 259: uint16(772), + 260: uint16(773), + 261: uint16(774), + 262: uint16(775), + 263: uint16(776), + 264: uint16(777), + 265: uint16(778), + 266: uint16(779), + 267: uint16(780), + 268: uint16(781), + 269: uint16(782), + 270: uint16(783), + 271: uint16(784), + 272: uint16(785), + 273: uint16(786), + 274: uint16(787), + 275: uint16(788), + 276: uint16(789), + 277: uint16(790), + 278: uint16(791), + 279: uint16(792), + 280: uint16(793), + 281: uint16(794), + 282: uint16(795), + 283: uint16(796), + 284: uint16(797), + 285: uint16(798), + 286: uint16(799), + 287: uint16(800), + 288: uint16(801), + 289: uint16(802), + 290: uint16(803), + 291: uint16(804), + 292: uint16(805), + 293: uint16(806), + 294: uint16(807), + 295: uint16(808), + 296: uint16(809), + 297: uint16(810), + 298: uint16(811), + 299: uint16(812), + 300: uint16(813), + 301: uint16(814), + 302: uint16(815), + 303: uint16(816), + 304: uint16(817), + 305: uint16(818), + 306: uint16(819), + 307: uint16(820), + 308: uint16(821), + 309: uint16(822), + 310: uint16(823), + 311: uint16(824), + 312: uint16(825), + 313: uint16(826), + 314: uint16(827), + 315: uint16(828), + 316: uint16(829), + 317: uint16(830), + 318: uint16(831), + 319: uint16(832), + 320: uint16(833), + 321: uint16(834), + 322: uint16(835), + 323: uint16(836), + 324: uint16(837), + 325: uint16(838), + 326: uint16(839), + 327: uint16(840), + 328: uint16(841), + 329: uint16(842), + 330: uint16(843), + 331: uint16(844), + 332: uint16(845), + 333: uint16(846), + 334: uint16(847), + 335: uint16(848), + 336: uint16(849), + 337: uint16(850), + 338: uint16(10), + 339: uint16(11), + 340: uint16(20), + 341: uint16(21), + 342: uint16(1024), + 343: uint16(1025), + 344: uint16(1026), + 345: uint16(1027), + 346: uint16(1028), + 347: uint16(1029), + 348: uint16(1030), + 349: uint16(1031), + 350: uint16(1032), + 351: uint16(1033), + 352: uint16(1034), + 353: uint16(1035), + 354: uint16(1036), + 355: uint16(1037), + 356: uint16(1038), + 357: uint16(1039), + 358: uint16(1040), + 359: uint16(1041), + 360: uint16(1042), + 361: uint16(1043), + 362: uint16(1044), + 363: uint16(1045), + 364: uint16(1046), + 365: uint16(1047), + 366: uint16(1048), + 367: uint16(1049), + 368: uint16(1050), + 369: uint16(1051), + 370: uint16(1052), + 371: uint16(1053), + 372: uint16(1054), + 373: uint16(1055), + 374: uint16(1056), + 375: uint16(1057), + 376: uint16(1058), + 377: uint16(1059), + 378: uint16(1060), + 379: uint16(1061), + 380: uint16(1062), + 381: uint16(1063), + 382: uint16(1064), + 383: uint16(1065), + 384: uint16(1066), + 385: uint16(1067), + 386: uint16(1068), + 387: uint16(1069), + 388: uint16(1070), + 389: uint16(1071), + 390: uint16(1072), + 391: uint16(1073), + 392: uint16(1074), + 393: uint16(1075), + 394: uint16(1076), + 395: uint16(1077), + 396: uint16(1078), + 397: uint16(1079), + 398: uint16(1080), + 399: uint16(1081), + 400: uint16(1082), + 401: uint16(1083), + 402: uint16(1084), + 403: uint16(1085), + 404: uint16(1086), + 405: uint16(1087), + 406: uint16(1088), + 407: uint16(1089), + 408: uint16(1090), + 409: uint16(1091), + 410: uint16(1092), + 411: uint16(1093), + 412: uint16(1094), + 413: uint16(1095), + 414: uint16(1096), + 415: uint16(1097), + 416: uint16(1098), + 417: uint16(1099), + 418: uint16(1100), + 419: uint16(1101), + 420: uint16(1102), + 421: uint16(1103), + 422: uint16(1104), + 423: uint16(1105), + 424: uint16(1106), + 425: uint16(1107), + 426: uint16(1108), + 427: uint16(1109), + 428: uint16(5), + 429: uint16(27), + 430: uint16(18), + 431: uint16(19), + 432: uint16(3915), + 433: uint16(8793), + 434: uint16(6934), + 435: uint16(10843), + 436: uint16(7493), + 437: uint16(6671), + 438: uint16(7492), + 439: uint16(4379), + 440: uint16(10291), + 441: uint16(11294), + 442: uint16(12033), + 443: uint16(4110), + 444: uint16(4685), + 445: uint16(12034), + 446: uint16(7939), + 447: uint16(12577), + 448: uint16(5173), + 449: uint16(10521), + 450: uint16(7494), + 451: uint16(11549), + 452: uint16(10529), + 453: uint16(12035), + 454: uint16(8773), + 455: uint16(12036), + 456: uint16(5465), + 457: uint16(12037), + 458: uint16(4924), + 459: uint16(8719), + 460: uint16(6982), + 461: uint16(12038), + 462: uint16(12039), + 463: uint16(12040), + 464: uint16(9748), + 465: uint16(5174), + 466: uint16(9750), + 467: uint16(9538), + 468: uint16(5922), + 469: uint16(10770), + 470: uint16(18472), + 471: uint16(12041), + 472: uint16(7495), + 473: uint16(12042), + 474: uint16(4372), + 475: uint16(5444), + 476: uint16(5967), + 477: uint16(11080), + 478: uint16(13573), + 479: uint16(11343), + 480: uint16(9564), + 481: uint16(4868), + 482: uint16(5140), + 483: uint16(12043), + 484: uint16(12044), + 485: uint16(11546), + 486: uint16(11292), + 487: uint16(8263), + 488: uint16(12046), + 489: uint16(6741), + 490: uint16(9554), + 491: uint16(12049), + 492: uint16(4125), + 493: uint16(5950), + 494: uint16(5949), + 495: uint16(3909), + 496: uint16(11818), + 497: uint16(11817), + 498: uint16(6418), + 499: uint16(3840), + 500: uint16(12050), + 501: uint16(12051), + 502: uint16(12052), + 503: uint16(10771), + 504: uint16(12053), + 505: uint16(5969), + 506: uint16(3910), + 507: uint16(10833), + 508: uint16(5211), + 509: uint16(5212), + 510: uint16(5213), + 511: uint16(9025), + 512: uint16(11547), + 513: uint16(12054), + 514: uint16(12055), + 515: uint16(12056), + 516: uint16(7724), + 517: uint16(7193), + 518: uint16(7725), + 519: uint16(12061), + 520: uint16(12059), + 521: uint16(12060), + 522: uint16(5175), + 523: uint16(6402), + 524: uint16(4431), + 525: uint16(12058), + 526: uint16(12057), + 527: uint16(10504), + 528: uint16(6693), + 529: uint16(6692), + 530: uint16(8477), + 531: uint16(12062), + 532: uint16(10292), + 533: uint16(8006), + 534: uint16(23), + 535: uint16(12063), + 536: uint16(12065), + 537: uint16(8516), + 538: uint16(11584), + 539: uint16(3881), + 540: uint16(12064), + 541: uint16(4381), + 542: uint16(5411), + 543: uint16(8774), + 544: uint16(5710), + 545: uint16(12066), + 546: uint16(9731), + 547: uint16(4938), + 548: uint16(12067), + 549: uint16(3882), + 550: uint16(5951), + 551: uint16(4939), + 552: uint16(10329), + 553: uint16(10001), + 554: uint16(5176), + 555: uint16(4432), + 556: uint16(12102), + 557: uint16(9248), + 558: uint16(9803), + 559: uint16(12069), + 560: uint16(10011), + 561: uint16(11585), + 562: uint16(7692), + 563: uint16(6694), + 564: uint16(6742), + 565: uint16(4383), + 566: uint16(9008), + 567: uint16(8705), + 568: uint16(12073), + 569: uint16(3883), + 570: uint16(9026), + 571: uint16(7194), + 572: uint16(6419), + 573: uint16(11267), + 574: uint16(8493), + 575: uint16(4382), + 576: uint16(12072), + 577: uint16(11293), + 578: uint16(12068), + 579: uint16(12070), + 580: uint16(6477), + 581: uint16(12071), + 582: uint16(13315), + 583: uint16(12079), + 584: uint16(12082), + 585: uint16(12080), + 586: uint16(4385), + 587: uint16(10522), + 588: uint16(12074), + 589: uint16(12078), + 590: uint16(5970), + 591: uint16(6695), + 592: uint16(4869), + 593: uint16(12083), + 594: uint16(12075), + 595: uint16(11586), + 596: uint16(6743), + 597: uint16(12076), + 598: uint16(12081), + 599: uint16(12084), + 600: uint16(12077), + 601: uint16(5376), + 602: uint16(3884), + 603: uint16(5377), + 604: uint16(4384), + 605: uint16(13316), + 606: uint16(10840), + 607: uint16(10317), + 608: uint16(5971), + 609: uint16(7694), + 610: uint16(11542), + 611: uint16(10551), + 612: uint16(5655), + 613: uint16(8452), + 614: uint16(4419), + 615: uint16(7218), + 616: uint16(12088), + 617: uint16(12093), + 618: uint16(12091), + 619: uint16(12086), + 620: uint16(8462), + 621: uint16(12089), + 622: uint16(12092), + 623: uint16(12090), + 624: uint16(10556), + 625: uint16(12087), + 626: uint16(7693), + 627: uint16(10834), + 628: uint16(12094), + 629: uint16(12095), + 630: uint16(7171), + 631: uint16(12108), + 632: uint16(9775), + 633: uint16(10261), + 634: uint16(12103), + 635: uint16(10575), + 636: uint16(4373), + 637: uint16(12107), + 638: uint16(12101), + 639: uint16(12110), + 640: uint16(8241), + 641: uint16(5923), + 642: uint16(9787), + 643: uint16(16166), + 644: uint16(12109), + 645: uint16(9276), + 646: uint16(12098), + 647: uint16(5973), + 648: uint16(5972), + 649: uint16(12096), + 650: uint16(6969), + 651: uint16(12104), + 652: uint16(10574), + 653: uint16(8748), + 654: uint16(12100), + 655: uint16(5712), + 656: uint16(12097), + 657: uint16(12105), + 658: uint16(12099), + 659: uint16(11568), + 660: uint16(12106), + 661: uint16(11808), + 662: uint16(5445), + 663: uint16(5711), + 664: uint16(12111), + 665: uint16(12112), + 666: uint16(12116), + 667: uint16(3885), + 668: uint16(10543), + 669: uint16(12115), + 670: uint16(12114), + 671: uint16(12118), + 672: uint16(12117), + 673: uint16(9027), + 674: uint16(5713), + 675: uint16(12119), + 676: uint16(6948), + 677: uint16(8453), + 678: uint16(9028), + 679: uint16(5461), + 680: uint16(12120), + 681: uint16(5141), + 682: uint16(12121), + 683: uint16(12123), + 684: uint16(10772), + 685: uint16(5701), + 686: uint16(6672), + 687: uint16(10070), + 688: uint16(12122), + 689: uint16(6436), + 690: uint16(11298), + 691: uint16(12125), + 692: uint16(12290), + 693: uint16(12124), + 694: uint16(6435), + 695: uint16(7260), + 696: uint16(5656), + 697: uint16(12291), + 698: uint16(5422), + 699: uint16(12288), + 700: uint16(12289), + 701: uint16(9486), + 702: uint16(8283), + 703: uint16(5378), + 704: uint16(10796), + 705: uint16(12292), + 706: uint16(11548), + 707: uint16(12293), + 708: uint16(12296), + 709: uint16(12294), + 710: uint16(8237), + 711: uint16(12295), + 712: uint16(12297), + 713: uint16(12299), + 714: uint16(12298), + 715: uint16(10535), + 716: uint16(5142), + 717: uint16(12301), + 718: uint16(12302), + 719: uint16(4366), + 720: uint16(12300), + 721: uint16(6995), + 722: uint16(12305), + 723: uint16(12304), + 724: uint16(12303), + 725: uint16(12085), + 726: uint16(12306), + 727: uint16(7261), + 728: uint16(12307), + 729: uint16(11268), + 730: uint16(11064), + 731: uint16(12309), + 732: uint16(12308), + 733: uint16(12311), + 734: uint16(12310), + 735: uint16(12312), + 736: uint16(12313), + 737: uint16(3923), + 738: uint16(5908), + 739: uint16(5658), + 740: uint16(7195), + 741: uint16(8794), + 742: uint16(5379), + 743: uint16(8007), + 744: uint16(5974), + 745: uint16(6221), + 746: uint16(12315), + 747: uint16(11047), + 748: uint16(9253), + 749: uint16(6744), + 750: uint16(12314), + 751: uint16(12316), + 752: uint16(9277), + 753: uint16(4692), + 754: uint16(12317), + 755: uint16(9565), + 756: uint16(8211), + 757: uint16(12319), + 758: uint16(12320), + 759: uint16(9995), + 760: uint16(5975), + 761: uint16(11802), + 762: uint16(12321), + 763: uint16(5381), + 764: uint16(10523), + 765: uint16(8469), + 766: uint16(5456), + 767: uint16(9236), + 768: uint16(5714), + 769: uint16(12322), + 770: uint16(12323), + 771: uint16(9537), + 772: uint16(4158), + 773: uint16(12326), + 774: uint16(6492), + 775: uint16(12325), + 776: uint16(6437), + 777: uint16(12327), + 778: uint16(17741), + 779: uint16(12328), + 780: uint16(10784), + 781: uint16(12329), + 782: uint16(12330), + 783: uint16(12331), + 784: uint16(7496), + 785: uint16(6955), + 786: uint16(4870), + 787: uint16(12334), + 788: uint16(12332), + 789: uint16(11036), + 790: uint16(12333), + 791: uint16(10297), + 792: uint16(12335), + 793: uint16(12336), + 794: uint16(12337), + 795: uint16(9278), + 796: uint16(12341), + 797: uint16(12339), + 798: uint16(12340), + 799: uint16(12338), + 800: uint16(6466), + 801: uint16(12342), + 802: uint16(11081), + 803: uint16(11587), + 804: uint16(12343), + 805: uint16(7943), + 806: uint16(12344), + 807: uint16(7225), + 808: uint16(12345), + 809: uint16(8795), + 810: uint16(11550), + 811: uint16(9279), + 812: uint16(12580), + 813: uint16(12346), + 814: uint16(21252), + 815: uint16(5412), + 816: uint16(12347), + 817: uint16(10813), + 818: uint16(7239), + 819: uint16(8539), + 820: uint16(12349), + 821: uint16(9539), + 822: uint16(12350), + 823: uint16(12351), + 824: uint16(4621), + 825: uint16(12352), + 826: uint16(5382), + 827: uint16(9515), + 828: uint16(4185), + 829: uint16(7215), + 830: uint16(9984), + 831: uint16(12353), + 832: uint16(9280), + 833: uint16(7726), + 834: uint16(12354), + 835: uint16(10507), + 836: uint16(7993), + 837: uint16(4865), + 838: uint16(4872), + 839: uint16(12355), + 840: uint16(12357), + 841: uint16(5657), + 842: uint16(12356), + 843: uint16(11602), + 844: uint16(7240), + 845: uint16(10012), + 846: uint16(10539), + 847: uint16(12358), + 848: uint16(11351), + 849: uint16(12359), + 850: uint16(12360), + 851: uint16(9309), + 852: uint16(12361), + 853: uint16(7944), + 854: uint16(6493), + 855: uint16(5715), + 856: uint16(12362), + 857: uint16(6696), + 858: uint16(6222), + 859: uint16(9029), + 860: uint16(12364), + 861: uint16(8454), + 862: uint16(6478), + 863: uint16(12365), + 864: uint16(12366), + 865: uint16(8207), + 866: uint16(12363), + 867: uint16(12368), + 868: uint16(10773), + 869: uint16(6211), + 870: uint16(12367), + 871: uint16(5716), + 872: uint16(6461), + 873: uint16(9804), + 874: uint16(12371), + 875: uint16(12369), + 876: uint16(10330), + 877: uint16(7497), + 878: uint16(12378), + 879: uint16(4675), + 880: uint16(12372), + 881: uint16(12370), + 882: uint16(8238), + 883: uint16(12374), + 884: uint16(12373), + 885: uint16(4643), + 886: uint16(5695), + 887: uint16(12379), + 888: uint16(11532), + 889: uint16(12375), + 890: uint16(12380), + 891: uint16(12377), + 892: uint16(12376), + 893: uint16(11566), + 894: uint16(5976), + 895: uint16(4386), + 896: uint16(11603), + 897: uint16(7252), + 898: uint16(9271), + 899: uint16(6212), + 900: uint16(12545), + 901: uint16(12546), + 902: uint16(11588), + 903: uint16(11786), + 904: uint16(12548), + 905: uint16(5977), + 906: uint16(12547), + 907: uint16(4622), + 908: uint16(12549), + 909: uint16(10805), + 910: uint16(8987), + 911: uint16(11269), + 912: uint16(10552), + 913: uint16(12550), + 914: uint16(20276), + 915: uint16(9487), + 916: uint16(12551), + 917: uint16(4873), + 918: uint16(11026), + 919: uint16(7424), + 920: uint16(12552), + 921: uint16(10566), + 922: uint16(12556), + 923: uint16(7945), + 924: uint16(12553), + 925: uint16(5423), + 926: uint16(12554), + 927: uint16(4874), + 928: uint16(5645), + 929: uint16(12557), + 930: uint16(12558), + 931: uint16(12559), + 932: uint16(12560), + 933: uint16(6970), + 934: uint16(5978), + 935: uint16(11069), + 936: uint16(11079), + 937: uint16(9558), + 938: uint16(10576), + 939: uint16(12561), + 940: uint16(12562), + 941: uint16(12564), + 942: uint16(12566), + 943: uint16(12565), + 944: uint16(12567), + 945: uint16(4380), + 946: uint16(10795), + 947: uint16(6491), + 948: uint16(12568), + 949: uint16(8248), + 950: uint16(7425), + 951: uint16(5384), + 952: uint16(12569), + 953: uint16(10042), + 954: uint16(12570), + 955: uint16(12571), + 956: uint16(12572), + 957: uint16(12573), + 958: uint16(10243), + 959: uint16(5447), + 960: uint16(3908), + 961: uint16(9502), + 962: uint16(12574), + 963: uint16(7196), + 964: uint16(8008), + 965: uint16(12576), + 966: uint16(12575), + 967: uint16(7426), + 968: uint16(5952), + 969: uint16(12578), + 970: uint16(10013), + 971: uint16(12579), + 972: uint16(10043), + 973: uint16(8467), + 974: uint16(8525), + 975: uint16(5383), + 976: uint16(9549), + 977: uint16(8720), + 978: uint16(9805), + 979: uint16(10797), + 980: uint16(12581), + 981: uint16(8009), + 982: uint16(5652), + 983: uint16(12582), + 984: uint16(12583), + 985: uint16(4107), + 986: uint16(3924), + 987: uint16(4940), + 988: uint16(8455), + 989: uint16(5168), + 990: uint16(11344), + 991: uint16(12586), + 992: uint16(4374), + 993: uint16(12585), + 994: uint16(5385), + 995: uint16(12587), + 996: uint16(11088), + 997: uint16(12588), + 998: uint16(11569), + 999: uint16(5979), + 1000: uint16(5909), + 1001: uint16(12589), + 1002: uint16(12591), + 1003: uint16(12590), + 1004: uint16(7742), + 1005: uint16(4120), + 1006: uint16(4157), + 1007: uint16(12592), + 1008: uint16(12593), + 1009: uint16(5910), + 1010: uint16(12594), + 1011: uint16(5197), + 1012: uint16(6673), + 1013: uint16(12595), + 1014: uint16(10835), + 1015: uint16(6420), + 1016: uint16(5177), + 1017: uint16(11270), + 1018: uint16(8239), + 1019: uint16(10014), + 1020: uint16(7004), + 1021: uint16(7206), + 1022: uint16(6983), + 1023: uint16(6996), + 1024: uint16(7253), + 1025: uint16(10015), + 1026: uint16(12598), + 1027: uint16(4130), + 1028: uint16(8240), + 1029: uint16(5980), + 1030: uint16(5924), + 1031: uint16(5446), + 1032: uint16(12602), + 1033: uint16(8704), + 1034: uint16(8541), + 1035: uint16(5386), + 1036: uint16(7427), + 1037: uint16(12603), + 1038: uint16(12601), + 1039: uint16(4387), + 1040: uint16(8517), + 1041: uint16(6935), + 1042: uint16(6698), + 1043: uint16(4101), + 1044: uint16(4687), + 1045: uint16(6213), + 1046: uint16(6697), + 1047: uint16(12604), + 1048: uint16(12605), + 1049: uint16(5160), + 1050: uint16(4645), + 1051: uint16(6214), + 1052: uint16(5159), + 1053: uint16(9022), + 1054: uint16(4100), + 1055: uint16(9488), + 1056: uint16(11037), + 1057: uint16(6144), + 1058: uint16(11352), + 1059: uint16(9254), + 1060: uint16(5981), + 1061: uint16(5646), + 1062: uint16(12614), + 1063: uint16(5442), + 1064: uint16(10793), + 1065: uint16(10044), + 1066: uint16(12613), + 1067: uint16(4925), + 1068: uint16(12608), + 1069: uint16(12609), + 1070: uint16(12611), + 1071: uint16(12612), + 1072: uint16(5178), + 1073: uint16(7744), + 1074: uint16(10508), + 1075: uint16(12610), + 1076: uint16(12606), + 1077: uint16(5954), + 1078: uint16(12607), + 1079: uint16(11779), + 1080: uint16(10577), + 1081: uint16(9031), + 1082: uint16(5953), + 1083: uint16(6223), + 1084: uint16(12615), + 1085: uint16(9532), + 1086: uint16(12619), + 1087: uint16(7005), + 1088: uint16(6997), + 1089: uint16(12622), + 1090: uint16(12620), + 1091: uint16(11010), + 1092: uint16(12617), + 1093: uint16(12626), + 1094: uint16(12621), + 1095: uint16(12624), + 1096: uint16(5925), + 1097: uint16(11038), + 1098: uint16(12625), + 1099: uint16(12627), + 1100: uint16(12629), + 1101: uint16(6479), + 1102: uint16(11809), + 1103: uint16(12618), + 1104: uint16(12616), + 1105: uint16(12628), + 1106: uint16(12623), + 1107: uint16(12631), + 1108: uint16(12802), + 1109: uint16(12633), + 1110: uint16(12637), + 1111: uint16(12800), + 1112: uint16(12634), + 1113: uint16(12829), + 1114: uint16(6472), + 1115: uint16(4624), + 1116: uint16(12632), + 1117: uint16(12804), + 1118: uint16(3925), + 1119: uint16(12803), + 1120: uint16(3844), + 1121: uint16(10281), + 1122: uint16(12801), + 1123: uint16(12635), + 1124: uint16(12630), + 1125: uint16(12636), + 1126: uint16(6439), + 1127: uint16(12805), + 1128: uint16(3926), + 1129: uint16(12814), + 1130: uint16(12806), + 1131: uint16(12807), + 1132: uint16(7428), + 1133: uint16(10824), + 1134: uint16(12812), + 1135: uint16(12811), + 1136: uint16(9230), + 1137: uint16(12813), + 1138: uint16(12810), + 1139: uint16(4115), + 1140: uint16(6421), + 1141: uint16(7695), + 1142: uint16(12808), + 1143: uint16(9281), + 1144: uint16(12809), + 1145: uint16(3841), + 1146: uint16(12819), + 1147: uint16(11266), + 1148: uint16(7430), + 1149: uint16(12825), + 1150: uint16(12824), + 1151: uint16(12815), + 1152: uint16(8482), + 1153: uint16(12816), + 1154: uint16(8526), + 1155: uint16(12821), + 1156: uint16(7429), + 1157: uint16(12818), + 1158: uint16(11075), + 1159: uint16(5659), + 1160: uint16(12822), + 1161: uint16(12823), + 1162: uint16(12820), + 1163: uint16(12826), + 1164: uint16(12817), + 1165: uint16(12832), + 1166: uint16(12837), + 1167: uint16(12833), + 1168: uint16(12828), + 1169: uint16(12838), + 1170: uint16(8208), + 1171: uint16(12840), + 1172: uint16(6145), + 1173: uint16(12830), + 1174: uint16(8796), + 1175: uint16(12834), + 1176: uint16(12827), + 1177: uint16(4876), + 1178: uint16(4941), + 1179: uint16(4676), + 1180: uint16(12835), + 1181: uint16(12831), + 1182: uint16(5717), + 1183: uint16(12841), + 1184: uint16(12839), + 1185: uint16(8242), + 1186: uint16(5161), + 1187: uint16(5387), + 1188: uint16(12836), + 1189: uint16(5459), + 1190: uint16(4131), + 1191: uint16(12845), + 1192: uint16(12843), + 1193: uint16(13062), + 1194: uint16(12848), + 1195: uint16(12842), + 1196: uint16(12846), + 1197: uint16(12844), + 1198: uint16(6699), + 1199: uint16(12847), + 1200: uint16(12850), + 1201: uint16(12855), + 1202: uint16(12853), + 1203: uint16(12852), + 1204: uint16(8721), + 1205: uint16(4388), + 1206: uint16(12849), + 1207: uint16(12851), + 1208: uint16(7431), + 1209: uint16(4114), + 1210: uint16(12854), + 1211: uint16(4413), + 1212: uint16(12865), + 1213: uint16(7515), + 1214: uint16(12861), + 1215: uint16(12859), + 1216: uint16(12860), + 1217: uint16(12862), + 1218: uint16(4124), + 1219: uint16(8216), + 1220: uint16(12856), + 1221: uint16(12857), + 1222: uint16(4697), + 1223: uint16(12864), + 1224: uint16(4942), + 1225: uint16(12867), + 1226: uint16(12863), + 1227: uint16(12866), + 1228: uint16(10509), + 1229: uint16(9524), + 1230: uint16(10007), + 1231: uint16(12869), + 1232: uint16(12868), + 1233: uint16(4644), + 1234: uint16(12870), + 1235: uint16(12873), + 1236: uint16(12872), + 1237: uint16(12871), + 1238: uint16(9752), + 1239: uint16(12874), + 1240: uint16(12875), + 1241: uint16(12877), + 1242: uint16(12876), + 1243: uint16(12879), + 1244: uint16(12882), + 1245: uint16(12880), + 1246: uint16(12878), + 1247: uint16(12881), + 1248: uint16(12883), + 1249: uint16(12884), + 1250: uint16(12885), + 1251: uint16(12886), + 1252: uint16(12887), + 1253: uint16(12324), + 1254: uint16(7003), + 1255: uint16(6700), + 1256: uint16(4434), + 1257: uint16(3927), + 1258: uint16(8739), + 1259: uint16(12888), + 1260: uint16(6403), + 1261: uint16(3886), + 1262: uint16(7741), + 1263: uint16(12889), + 1264: uint16(5926), + 1265: uint16(6224), + 1266: uint16(12891), + 1267: uint16(12890), + 1268: uint16(10559), + 1269: uint16(12892), + 1270: uint16(13056), + 1271: uint16(12893), + 1272: uint16(13057), + 1273: uint16(13058), + 1274: uint16(5718), + 1275: uint16(4159), + 1276: uint16(13059), + 1277: uint16(13061), + 1278: uint16(13060), + 1279: uint16(13063), + 1280: uint16(9273), + 1281: uint16(13064), + 1282: uint16(3860), + 1283: uint16(6462), + 1284: uint16(5660), + 1285: uint16(8750), + 1286: uint16(13065), + 1287: uint16(13066), + 1288: uint16(13068), + 1289: uint16(13069), + 1290: uint16(6467), + 1291: uint16(5424), + 1292: uint16(10774), + 1293: uint16(13067), + 1294: uint16(13070), + 1295: uint16(6432), + 1296: uint16(6146), + 1297: uint16(13074), + 1298: uint16(6404), + 1299: uint16(8722), + 1300: uint16(13071), + 1301: uint16(9017), + 1302: uint16(13075), + 1303: uint16(7745), + 1304: uint16(13073), + 1305: uint16(13076), + 1306: uint16(5662), + 1307: uint16(13077), + 1308: uint16(13078), + 1309: uint16(6147), + 1310: uint16(4639), + 1311: uint16(13080), + 1312: uint16(13081), + 1313: uint16(13082), + 1314: uint16(13079), + 1315: uint16(13072), + 1316: uint16(13083), + 1317: uint16(13084), + 1318: uint16(10819), + 1319: uint16(7498), + 1320: uint16(13086), + 1321: uint16(13087), + 1322: uint16(13085), + 1323: uint16(13089), + 1324: uint16(9751), + 1325: uint16(3911), + 1326: uint16(10293), + 1327: uint16(13090), + 1328: uint16(7516), + 1329: uint16(6936), + 1330: uint16(9788), + 1331: uint16(4943), + 1332: uint16(6474), + 1333: uint16(10808), + 1334: uint16(9489), + 1335: uint16(5719), + 1336: uint16(8494), + 1337: uint16(13088), + 1338: uint16(13091), + 1339: uint16(8483), + 1340: uint16(13092), + 1341: uint16(13093), + 1342: uint16(13095), + 1343: uint16(9032), + 1344: uint16(4877), + 1345: uint16(21248), + 1346: uint16(4160), + 1347: uint16(10578), + 1348: uint16(7499), + 1349: uint16(9255), + 1350: uint16(6469), + 1351: uint16(13101), + 1352: uint16(10524), + 1353: uint16(11580), + 1354: uint16(4435), + 1355: uint16(13097), + 1356: uint16(8217), + 1357: uint16(13100), + 1358: uint16(9282), + 1359: uint16(9256), + 1360: uint16(9283), + 1361: uint16(10008), + 1362: uint16(9004), + 1363: uint16(6440), + 1364: uint16(13096), + 1365: uint16(4181), + 1366: uint16(9237), + 1367: uint16(13098), + 1368: uint16(13094), + 1369: uint16(7727), + 1370: uint16(13102), + 1371: uint16(7213), + 1372: uint16(5388), + 1373: uint16(13103), + 1374: uint16(10567), + 1375: uint16(8284), + 1376: uint16(8997), + 1377: uint16(13105), + 1378: uint16(10798), + 1379: uint16(13106), + 1380: uint16(13111), + 1381: uint16(10510), + 1382: uint16(13110), + 1383: uint16(13104), + 1384: uint16(13107), + 1385: uint16(13109), + 1386: uint16(6405), + 1387: uint16(10536), + 1388: uint16(13112), + 1389: uint16(8740), + 1390: uint16(4436), + 1391: uint16(7500), + 1392: uint16(13114), + 1393: uint16(13113), + 1394: uint16(6215), + 1395: uint16(13115), + 1396: uint16(13117), + 1397: uint16(13116), + 1398: uint16(13119), + 1399: uint16(13108), + 1400: uint16(13121), + 1401: uint16(13120), + 1402: uint16(13118), + 1403: uint16(6701), + 1404: uint16(7728), + 1405: uint16(8243), + 1406: uint16(13122), + 1407: uint16(7963), + 1408: uint16(3916), + 1409: uint16(9795), + 1410: uint16(9018), + 1411: uint16(13124), + 1412: uint16(13123), + 1413: uint16(13125), + 1414: uint16(13126), + 1415: uint16(13127), + 1416: uint16(13128), + 1417: uint16(10544), + 1418: uint16(13129), + 1419: uint16(4389), + 1420: uint16(13130), + 1421: uint16(11291), + 1422: uint16(4623), + 1423: uint16(12584), + 1424: uint16(7207), + 1425: uint16(8478), + 1426: uint16(13131), + 1427: uint16(11082), + 1428: uint16(11027), + 1429: uint16(13133), + 1430: uint16(8518), + 1431: uint16(9238), + 1432: uint16(8479), + 1433: uint16(10294), + 1434: uint16(13134), + 1435: uint16(13135), + 1436: uint16(4186), + 1437: uint16(6937), + 1438: uint16(13136), + 1439: uint16(3887), + 1440: uint16(13137), + 1441: uint16(13138), + 1442: uint16(4161), + 1443: uint16(4944), + 1444: uint16(9535), + 1445: uint16(10579), + 1446: uint16(13142), + 1447: uint16(8244), + 1448: uint16(13141), + 1449: uint16(5663), + 1450: uint16(10810), + 1451: uint16(13140), + 1452: uint16(9284), + 1453: uint16(13144), + 1454: uint16(13143), + 1455: uint16(13146), + 1456: uint16(13145), + 1457: uint16(4187), + 1458: uint16(13147), + 1459: uint16(7432), + 1460: uint16(13149), + 1461: uint16(8708), + 1462: uint16(13148), + 1463: uint16(10514), + 1464: uint16(7254), + 1465: uint16(9274), + 1466: uint16(13312), + 1467: uint16(6148), + 1468: uint16(13313), + 1469: uint16(9728), + 1470: uint16(10045), + 1471: uint16(11056), + 1472: uint16(9732), + 1473: uint16(13322), + 1474: uint16(5143), + 1475: uint16(11300), + 1476: uint16(11022), + 1477: uint16(13579), + 1478: uint16(13314), + 1479: uint16(13317), + 1480: uint16(8484), + 1481: uint16(10775), + 1482: uint16(9257), + 1483: uint16(13318), + 1484: uint16(10820), + 1485: uint16(6441), + 1486: uint16(7433), + 1487: uint16(13319), + 1488: uint16(6703), + 1489: uint16(6702), + 1490: uint16(3864), + 1491: uint16(5927), + 1492: uint16(7946), + 1493: uint16(3888), + 1494: uint16(13323), + 1495: uint16(13324), + 1496: uint16(13321), + 1497: uint16(4119), + 1498: uint16(4878), + 1499: uint16(13320), + 1500: uint16(11044), + 1501: uint16(10256), + 1502: uint16(3847), + 1503: uint16(3928), + 1504: uint16(6704), + 1505: uint16(3889), + 1506: uint16(3842), + 1507: uint16(13329), + 1508: uint16(13327), + 1509: uint16(11035), + 1510: uint16(13330), + 1511: uint16(13328), + 1512: uint16(13326), + 1513: uint16(7696), + 1514: uint16(13325), + 1515: uint16(10553), + 1516: uint16(5955), + 1517: uint16(13334), + 1518: uint16(13335), + 1519: uint16(7434), + 1520: uint16(13331), + 1521: uint16(11787), + 1522: uint16(9771), + 1523: uint16(13333), + 1524: uint16(6406), + 1525: uint16(13336), + 1526: uint16(10295), + 1527: uint16(13337), + 1528: uint16(13332), + 1529: uint16(11034), + 1530: uint16(9789), + 1531: uint16(13338), + 1532: uint16(10257), + 1533: uint16(13339), + 1534: uint16(13343), + 1535: uint16(13340), + 1536: uint16(4390), + 1537: uint16(13342), + 1538: uint16(6938), + 1539: uint16(13341), + 1540: uint16(5720), + 1541: uint16(13355), + 1542: uint16(13348), + 1543: uint16(13345), + 1544: uint16(8771), + 1545: uint16(13344), + 1546: uint16(13346), + 1547: uint16(13347), + 1548: uint16(13349), + 1549: uint16(13350), + 1550: uint16(4945), + 1551: uint16(13352), + 1552: uint16(13351), + 1553: uint16(13353), + 1554: uint16(7501), + 1555: uint16(13356), + 1556: uint16(9019), + 1557: uint16(4132), + 1558: uint16(13354), + 1559: uint16(13357), + 1560: uint16(13358), + 1561: uint16(13361), + 1562: uint16(13359), + 1563: uint16(13360), + 1564: uint16(6705), + 1565: uint16(13362), + 1566: uint16(6149), + 1567: uint16(13363), + 1568: uint16(6745), + 1569: uint16(8471), + 1570: uint16(13364), + 1571: uint16(13365), + 1572: uint16(6713), + 1573: uint16(6150), + 1574: uint16(11057), + 1575: uint16(5127), + 1576: uint16(5928), + 1577: uint16(13366), + 1578: uint16(4663), + 1579: uint16(13367), + 1580: uint16(8472), + 1581: uint16(13368), + 1582: uint16(13570), + 1583: uint16(13369), + 1584: uint16(13370), + 1585: uint16(13371), + 1586: uint16(13373), + 1587: uint16(13374), + 1588: uint16(13375), + 1589: uint16(8527), + 1590: uint16(4102), + 1591: uint16(6984), + 1592: uint16(3873), + 1593: uint16(8246), + 1594: uint16(4879), + 1595: uint16(6932), + 1596: uint16(6151), + 1597: uint16(9285), + 1598: uint16(7168), + 1599: uint16(4880), + 1600: uint16(8775), + 1601: uint16(9033), + 1602: uint16(3863), + 1603: uint16(5144), + 1604: uint16(10580), + 1605: uint16(6945), + 1606: uint16(5169), + 1607: uint16(8010), + 1608: uint16(6939), + 1609: uint16(11271), + 1610: uint16(13376), + 1611: uint16(5179), + 1612: uint16(6442), + 1613: uint16(4625), + 1614: uint16(4162), + 1615: uint16(7435), + 1616: uint16(4391), + 1617: uint16(13377), + 1618: uint16(11301), + 1619: uint16(7208), + 1620: uint16(6979), + 1621: uint16(13378), + 1622: uint16(4946), + 1623: uint16(9521), + 1624: uint16(11016), + 1625: uint16(13379), + 1626: uint16(13380), + 1627: uint16(10296), + 1628: uint16(13382), + 1629: uint16(4871), + 1630: uint16(5462), + 1631: uint16(13381), + 1632: uint16(4881), + 1633: uint16(7697), + 1634: uint16(13386), + 1635: uint16(6656), + 1636: uint16(4392), + 1637: uint16(13385), + 1638: uint16(13383), + 1639: uint16(13387), + 1640: uint16(13384), + 1641: uint16(9738), + 1642: uint16(15148), + 1643: uint16(7698), + 1644: uint16(13388), + 1645: uint16(11551), + 1646: uint16(13389), + 1647: uint16(13391), + 1648: uint16(8797), + 1649: uint16(13390), + 1650: uint16(7938), + 1651: uint16(6746), + 1652: uint16(8495), + 1653: uint16(6998), + 1654: uint16(10324), + 1655: uint16(8011), + 1656: uint16(6956), + 1657: uint16(13392), + 1658: uint16(7436), + 1659: uint16(13393), + 1660: uint16(13394), + 1661: uint16(3890), + 1662: uint16(8473), + 1663: uint16(7729), + 1664: uint16(13395), + 1665: uint16(9490), + 1666: uint16(7437), + 1667: uint16(7438), + 1668: uint16(13396), + 1669: uint16(8012), + 1670: uint16(7439), + 1671: uint16(13397), + 1672: uint16(13398), + 1673: uint16(11071), + 1674: uint16(13399), + 1675: uint16(5413), + 1676: uint16(7169), + 1677: uint16(13400), + 1678: uint16(13401), + 1679: uint16(6971), + 1680: uint16(7691), + 1681: uint16(9555), + 1682: uint16(7731), + 1683: uint16(10071), + 1684: uint16(9729), + 1685: uint16(5416), + 1686: uint16(13402), + 1687: uint16(5198), + 1688: uint16(13403), + 1689: uint16(5469), + 1690: uint16(9518), + 1691: uint16(4367), + 1692: uint16(6706), + 1693: uint16(13404), + 1694: uint16(13569), + 1695: uint16(13568), + 1696: uint16(5468), + 1697: uint16(13405), + 1698: uint16(9239), + 1699: uint16(8463), + 1700: uint16(9258), + 1701: uint16(6951), + 1702: uint16(8247), + 1703: uint16(11353), + 1704: uint16(13571), + 1705: uint16(13572), + 1706: uint16(9525), + 1707: uint16(6674), + 1708: uint16(13574), + 1709: uint16(13575), + 1710: uint16(13576), + 1711: uint16(4947), + 1712: uint16(13577), + 1713: uint16(13578), + 1714: uint16(4363), + 1715: uint16(8218), + 1716: uint16(4931), + 1717: uint16(13580), + 1718: uint16(11015), + 1719: uint16(8497), + 1720: uint16(4664), + 1721: uint16(13582), + 1722: uint16(13584), + 1723: uint16(4926), + 1724: uint16(13581), + 1725: uint16(13583), + 1726: uint16(13586), + 1727: uint16(13585), + 1728: uint16(13587), + 1729: uint16(13588), + 1730: uint16(9500), + 1731: uint16(5389), + 1732: uint16(4420), + 1733: uint16(13589), + 1734: uint16(13594), + 1735: uint16(13592), + 1736: uint16(10582), + 1737: uint16(10581), + 1738: uint16(9286), + 1739: uint16(13591), + 1740: uint16(7219), + 1741: uint16(13590), + 1742: uint16(7761), + 1743: uint16(13595), + 1744: uint16(6473), + 1745: uint16(13601), + 1746: uint16(13602), + 1747: uint16(13596), + 1748: uint16(4626), + 1749: uint16(13597), + 1750: uint16(13606), + 1751: uint16(13605), + 1752: uint16(13604), + 1753: uint16(13600), + 1754: uint16(13599), + 1755: uint16(13603), + 1756: uint16(10583), + 1757: uint16(13610), + 1758: uint16(13607), + 1759: uint16(13609), + 1760: uint16(11345), + 1761: uint16(13608), + 1762: uint16(13598), + 1763: uint16(7762), + 1764: uint16(13611), + 1765: uint16(6422), + 1766: uint16(13612), + 1767: uint16(13613), + 1768: uint16(13616), + 1769: uint16(13615), + 1770: uint16(13614), + 1771: uint16(9287), + 1772: uint16(13593), + 1773: uint16(13622), + 1774: uint16(13618), + 1775: uint16(13617), + 1776: uint16(13619), + 1777: uint16(13620), + 1778: uint16(13623), + 1779: uint16(11589), + 1780: uint16(13624), + 1781: uint16(13621), + 1782: uint16(13625), + 1783: uint16(4927), + 1784: uint16(13626), + 1785: uint16(13628), + 1786: uint16(13627), + 1787: uint16(13629), + 1788: uint16(13630), + 1789: uint16(8013), + 1790: uint16(7170), + 1791: uint16(7235), + 1792: uint16(8258), + 1793: uint16(6152), + 1794: uint16(6423), + 1795: uint16(6153), + 1796: uint16(5199), + 1797: uint16(13631), + 1798: uint16(6424), + 1799: uint16(5929), + 1800: uint16(13632), + 1801: uint16(11013), + 1802: uint16(9762), + 1803: uint16(13633), + 1804: uint16(6154), + 1805: uint16(4875), + 1806: uint16(8710), + 1807: uint16(5425), + 1808: uint16(6707), + 1809: uint16(10298), + 1810: uint16(10016), + 1811: uint16(13634), + 1812: uint16(4948), + 1813: uint16(13637), + 1814: uint16(8960), + 1815: uint16(13636), + 1816: uint16(13635), + 1817: uint16(13638), + 1818: uint16(9034), + 1819: uint16(7746), + 1820: uint16(6708), + 1821: uint16(7977), + 1822: uint16(8498), + 1823: uint16(5121), + 1824: uint16(8961), + 1825: uint16(13639), + 1826: uint16(13640), + 1827: uint16(7502), + 1828: uint16(10776), + 1829: uint16(13643), + 1830: uint16(13642), + 1831: uint16(13641), + 1832: uint16(10332), + 1833: uint16(13650), + 1834: uint16(10809), + 1835: uint16(13644), + 1836: uint16(13646), + 1837: uint16(10826), + 1838: uint16(13645), + 1839: uint16(13647), + 1840: uint16(9991), + 1841: uint16(13648), + 1842: uint16(10525), + 1843: uint16(13649), + 1844: uint16(4882), + 1845: uint16(10526), + 1846: uint16(9742), + 1847: uint16(13651), + 1848: uint16(13652), + 1849: uint16(6155), + 1850: uint16(4883), + 1851: uint16(13653), + 1852: uint16(5911), + 1853: uint16(11299), + 1854: uint16(11272), + 1855: uint16(4949), + 1856: uint16(13655), + 1857: uint16(8962), + 1858: uint16(6156), + 1859: uint16(7440), + 1860: uint16(10046), + 1861: uint16(7441), + 1862: uint16(7255), + 1863: uint16(9035), + 1864: uint16(10584), + 1865: uint16(9240), + 1866: uint16(6157), + 1867: uint16(10299), + 1868: uint16(13656), + 1869: uint16(9272), + 1870: uint16(6433), + 1871: uint16(5930), + 1872: uint16(9036), + 1873: uint16(3874), + 1874: uint16(7245), + 1875: uint16(6158), + 1876: uint16(11302), + 1877: uint16(13657), + 1878: uint16(13658), + 1879: uint16(9776), + 1880: uint16(13659), + 1881: uint16(11606), + 1882: uint16(11788), + 1883: uint16(13661), + 1884: uint16(13660), + 1885: uint16(4646), + 1886: uint16(13824), + 1887: uint16(13827), + 1888: uint16(13828), + 1889: uint16(13826), + 1890: uint16(10271), + 1891: uint16(7442), + 1892: uint16(13830), + 1893: uint16(13829), + 1894: uint16(13825), + 1895: uint16(13831), + 1896: uint16(13832), + 1897: uint16(13833), + 1898: uint16(13836), + 1899: uint16(13834), + 1900: uint16(13835), + 1901: uint16(13837), + 1902: uint16(4163), + 1903: uint16(9037), + 1904: uint16(13838), + 1905: uint16(5721), + 1906: uint16(4437), + 1907: uint16(9749), + 1908: uint16(13839), + 1909: uint16(9562), + 1910: uint16(10554), + 1911: uint16(13840), + 1912: uint16(11789), + 1913: uint16(13841), + 1914: uint16(10527), + 1915: uint16(13844), + 1916: uint16(12032), + 1917: uint16(12048), + 1918: uint16(6927), + 1919: uint16(9556), + 1920: uint16(13845), + 1921: uint16(5180), + 1922: uint16(8963), + 1923: uint16(3929), + 1924: uint16(13846), + 1925: uint16(10501), + 1926: uint16(6159), + 1927: uint16(8751), + 1928: uint16(9038), + 1929: uint16(11086), + 1930: uint16(5912), + 1931: uint16(5931), + 1932: uint16(13847), + 1933: uint16(13848), + 1934: uint16(13854), + 1935: uint16(6980), + 1936: uint16(8964), + 1937: uint16(5390), + 1938: uint16(13849), + 1939: uint16(10250), + 1940: uint16(8741), + 1941: uint16(13850), + 1942: uint16(13851), + 1943: uint16(5391), + 1944: uint16(13852), + 1945: uint16(13853), + 1946: uint16(13855), + 1947: uint16(9301), + 1948: uint16(13856), + 1949: uint16(13857), + 1950: uint16(13858), + 1951: uint16(13843), + 1952: uint16(13842), + 1953: uint16(13859), + 1954: uint16(5664), + 1955: uint16(10246), + 1956: uint16(6443), + 1957: uint16(10262), + 1958: uint16(8965), + 1959: uint16(10282), + 1960: uint16(13860), + 1961: uint16(7443), + 1962: uint16(4133), + 1963: uint16(13861), + 1964: uint16(13862), + 1965: uint16(11089), + 1966: uint16(10047), + 1967: uint16(13865), + 1968: uint16(4188), + 1969: uint16(7947), + 1970: uint16(13864), + 1971: uint16(13863), + 1972: uint16(5665), + 1973: uint16(8499), + 1974: uint16(13869), + 1975: uint16(13867), + 1976: uint16(13866), + 1977: uint16(11526), + 1978: uint16(5956), + 1979: uint16(7256), + 1980: uint16(13868), + 1981: uint16(9259), + 1982: uint16(7197), + 1983: uint16(9503), + 1984: uint16(13872), + 1985: uint16(13871), + 1986: uint16(13870), + 1987: uint16(13873), + 1988: uint16(5957), + 1989: uint16(13874), + 1990: uint16(10331), + 1991: uint16(7226), + 1992: uint16(13875), + 1993: uint16(10072), + 1994: uint16(9504), + 1995: uint16(8966), + 1996: uint16(9231), + 1997: uint16(13876), + 1998: uint16(5130), + 1999: uint16(7699), + 2000: uint16(10251), + 2001: uint16(4950), + 2002: uint16(9733), + 2003: uint16(13877), + 2004: uint16(6709), + 2005: uint16(10777), + 2006: uint16(10778), + 2007: uint16(4189), + 2008: uint16(13882), + 2009: uint16(8776), + 2010: uint16(13879), + 2011: uint16(4438), + 2012: uint16(14092), + 2013: uint16(13881), + 2014: uint16(9743), + 2015: uint16(13880), + 2016: uint16(13878), + 2017: uint16(6233), + 2018: uint16(13884), + 2019: uint16(13890), + 2020: uint16(13896), + 2021: uint16(13888), + 2022: uint16(9275), + 2023: uint16(13893), + 2024: uint16(10300), + 2025: uint16(13887), + 2026: uint16(13892), + 2027: uint16(11590), + 2028: uint16(6710), + 2029: uint16(8500), + 2030: uint16(13885), + 2031: uint16(5181), + 2032: uint16(13895), + 2033: uint16(7948), + 2034: uint16(4164), + 2035: uint16(13889), + 2036: uint16(4439), + 2037: uint16(13894), + 2038: uint16(5392), + 2039: uint16(13891), + 2040: uint16(13897), + 2041: uint16(13899), + 2042: uint16(13909), + 2043: uint16(13907), + 2044: uint16(13904), + 2045: uint16(13903), + 2046: uint16(11607), + 2047: uint16(13905), + 2048: uint16(5393), + 2049: uint16(6160), + 2050: uint16(7257), + 2051: uint16(13912), + 2052: uint16(13898), + 2053: uint16(13902), + 2054: uint16(13886), + 2055: uint16(4441), + 2056: uint16(13906), + 2057: uint16(13908), + 2058: uint16(8752), + 2059: uint16(6407), + 2060: uint16(4375), + 2061: uint16(13900), + 2062: uint16(13911), + 2063: uint16(13910), + 2064: uint16(5394), + 2065: uint16(8456), + 2066: uint16(4677), + 2067: uint16(5666), + 2068: uint16(13901), + 2069: uint16(13913), + 2070: uint16(13916), + 2071: uint16(14080), + 2072: uint16(6940), + 2073: uint16(14086), + 2074: uint16(9039), + 2075: uint16(13914), + 2076: uint16(14084), + 2077: uint16(4440), + 2078: uint16(14082), + 2079: uint16(14083), + 2080: uint16(13917), + 2081: uint16(14081), + 2082: uint16(5958), + 2083: uint16(11273), + 2084: uint16(4884), + 2085: uint16(4152), + 2086: uint16(14085), + 2087: uint16(9753), + 2088: uint16(3852), + 2089: uint16(10048), + 2090: uint16(13883), + 2091: uint16(14091), + 2092: uint16(14095), + 2093: uint16(11076), + 2094: uint16(14088), + 2095: uint16(9288), + 2096: uint16(14093), + 2097: uint16(7503), + 2098: uint16(14094), + 2099: uint16(9526), + 2100: uint16(11814), + 2101: uint16(14090), + 2102: uint16(14096), + 2103: uint16(6234), + 2104: uint16(7978), + 2105: uint16(3891), + 2106: uint16(14089), + 2107: uint16(14087), + 2108: uint16(8249), + 2109: uint16(13915), + 2110: uint16(6675), + 2111: uint16(8485), + 2112: uint16(14108), + 2113: uint16(8250), + 2114: uint16(14103), + 2115: uint16(14100), + 2116: uint16(14101), + 2117: uint16(6981), + 2118: uint16(14104), + 2119: uint16(14107), + 2120: uint16(14102), + 2121: uint16(7172), + 2122: uint16(14105), + 2123: uint16(14099), + 2124: uint16(11099), + 2125: uint16(11098), + 2126: uint16(14109), + 2127: uint16(14110), + 2128: uint16(3892), + 2129: uint16(14098), + 2130: uint16(5457), + 2131: uint16(3845), + 2132: uint16(4885), + 2133: uint16(14106), + 2134: uint16(14114), + 2135: uint16(14113), + 2136: uint16(14118), + 2137: uint16(14119), + 2138: uint16(14117), + 2139: uint16(14120), + 2140: uint16(14112), + 2141: uint16(14116), + 2142: uint16(14121), + 2143: uint16(14122), + 2144: uint16(14111), + 2145: uint16(6747), + 2146: uint16(14115), + 2147: uint16(8501), + 2148: uint16(6161), + 2149: uint16(14097), + 2150: uint16(7700), + 2151: uint16(14135), + 2152: uint16(10568), + 2153: uint16(14125), + 2154: uint16(14126), + 2155: uint16(14127), + 2156: uint16(14134), + 2157: uint16(14133), + 2158: uint16(10844), + 2159: uint16(4886), + 2160: uint16(14131), + 2161: uint16(5668), + 2162: uint16(4627), + 2163: uint16(14128), + 2164: uint16(11543), + 2165: uint16(14130), + 2166: uint16(3893), + 2167: uint16(14132), + 2168: uint16(14123), + 2169: uint16(14129), + 2170: uint16(14136), + 2171: uint16(5667), + 2172: uint16(14124), + 2173: uint16(11324), + 2174: uint16(11274), + 2175: uint16(14139), + 2176: uint16(14143), + 2177: uint16(8285), + 2178: uint16(11608), + 2179: uint16(14144), + 2180: uint16(14141), + 2181: uint16(14138), + 2182: uint16(14137), + 2183: uint16(14142), + 2184: uint16(10511), + 2185: uint16(9491), + 2186: uint16(5669), + 2187: uint16(14145), + 2188: uint16(14140), + 2189: uint16(14146), + 2190: uint16(5722), + 2191: uint16(4368), + 2192: uint16(14154), + 2193: uint16(4887), + 2194: uint16(14152), + 2195: uint16(14153), + 2196: uint16(6408), + 2197: uint16(14151), + 2198: uint16(14149), + 2199: uint16(14148), + 2200: uint16(14155), + 2201: uint16(14147), + 2202: uint16(14157), + 2203: uint16(4442), + 2204: uint16(14159), + 2205: uint16(14158), + 2206: uint16(8967), + 2207: uint16(14162), + 2208: uint16(14160), + 2209: uint16(14150), + 2210: uint16(5723), + 2211: uint16(14161), + 2212: uint16(14165), + 2213: uint16(14164), + 2214: uint16(14166), + 2215: uint16(14163), + 2216: uint16(14167), + 2217: uint16(14168), + 2218: uint16(14169), + 2219: uint16(10569), + 2220: uint16(14171), + 2221: uint16(14170), + 2222: uint16(7198), + 2223: uint16(7949), + 2224: uint16(4421), + 2225: uint16(4443), + 2226: uint16(14172), + 2227: uint16(3870), + 2228: uint16(7979), + 2229: uint16(14173), + 2230: uint16(19234), + 2231: uint16(14336), + 2232: uint16(5696), + 2233: uint16(14337), + 2234: uint16(8014), + 2235: uint16(14338), + 2236: uint16(14339), + 2237: uint16(5145), + 2238: uint16(14340), + 2239: uint16(14341), + 2240: uint16(14342), + 2241: uint16(8502), + 2242: uint16(5932), + 2243: uint16(11072), + 2244: uint16(10779), + 2245: uint16(7241), + 2246: uint16(14343), + 2247: uint16(8015), + 2248: uint16(19740), + 2249: uint16(10049), + 2250: uint16(6985), + 2251: uint16(6444), + 2252: uint16(14344), + 2253: uint16(8486), + 2254: uint16(10502), + 2255: uint16(8528), + 2256: uint16(14347), + 2257: uint16(14345), + 2258: uint16(14348), + 2259: uint16(14346), + 2260: uint16(14349), + 2261: uint16(10512), + 2262: uint16(3862), + 2263: uint16(10301), + 2264: uint16(10050), + 2265: uint16(14350), + 2266: uint16(14353), + 2267: uint16(7444), + 2268: uint16(5146), + 2269: uint16(14351), + 2270: uint16(14358), + 2271: uint16(7445), + 2272: uint16(14352), + 2273: uint16(9763), + 2274: uint16(11325), + 2275: uint16(14354), + 2276: uint16(14355), + 2277: uint16(14359), + 2278: uint16(9289), + 2279: uint16(14356), + 2280: uint16(6162), + 2281: uint16(7997), + 2282: uint16(14373), + 2283: uint16(10003), + 2284: uint16(8529), + 2285: uint16(10051), + 2286: uint16(14604), + 2287: uint16(10585), + 2288: uint16(9040), + 2289: uint16(10836), + 2290: uint16(14362), + 2291: uint16(4352), + 2292: uint16(8777), + 2293: uint16(14371), + 2294: uint16(8723), + 2295: uint16(14365), + 2296: uint16(14372), + 2297: uint16(14367), + 2298: uint16(14374), + 2299: uint16(14370), + 2300: uint16(14369), + 2301: uint16(9806), + 2302: uint16(14363), + 2303: uint16(4444), + 2304: uint16(14361), + 2305: uint16(5200), + 2306: uint16(8530), + 2307: uint16(14357), + 2308: uint16(14360), + 2309: uint16(6163), + 2310: uint16(7994), + 2311: uint16(7446), + 2312: uint16(14368), + 2313: uint16(9777), + 2314: uint16(5201), + 2315: uint16(4647), + 2316: uint16(4678), + 2317: uint16(7680), + 2318: uint16(14376), + 2319: uint16(14381), + 2320: uint16(14377), + 2321: uint16(5724), + 2322: uint16(14382), + 2323: uint16(6657), + 2324: uint16(6216), + 2325: uint16(7173), + 2326: uint16(14364), + 2327: uint16(6748), + 2328: uint16(14379), + 2329: uint16(6711), + 2330: uint16(14380), + 2331: uint16(3875), + 2332: uint16(14375), + 2333: uint16(8968), + 2334: uint16(5202), + 2335: uint16(5395), + 2336: uint16(14378), + 2337: uint16(3846), + 2338: uint16(6434), + 2339: uint16(7701), + 2340: uint16(9041), + 2341: uint16(10035), + 2342: uint16(14384), + 2343: uint16(8253), + 2344: uint16(8457), + 2345: uint16(6666), + 2346: uint16(14385), + 2347: uint16(14387), + 2348: uint16(14383), + 2349: uint16(10560), + 2350: uint16(8988), + 2351: uint16(8251), + 2352: uint16(10586), + 2353: uint16(6957), + 2354: uint16(14399), + 2355: uint16(14398), + 2356: uint16(7767), + 2357: uint16(5725), + 2358: uint16(14392), + 2359: uint16(7448), + 2360: uint16(9543), + 2361: uint16(9744), + 2362: uint16(14390), + 2363: uint16(8252), + 2364: uint16(6999), + 2365: uint16(14395), + 2366: uint16(7447), + 2367: uint16(14389), + 2368: uint16(14394), + 2369: uint16(9778), + 2370: uint16(14388), + 2371: uint16(5632), + 2372: uint16(4668), + 2373: uint16(14396), + 2374: uint16(11530), + 2375: uint16(6445), + 2376: uint16(8724), + 2377: uint16(14393), + 2378: uint16(7995), + 2379: uint16(6164), + 2380: uint16(7747), + 2381: uint16(4165), + 2382: uint16(8219), + 2383: uint16(14391), + 2384: uint16(5156), + 2385: uint16(5670), + 2386: uint16(9006), + 2387: uint16(14397), + 2388: uint16(8254), + 2389: uint16(14400), + 2390: uint16(14402), + 2391: uint16(8470), + 2392: uint16(14408), + 2393: uint16(14403), + 2394: uint16(14405), + 2395: uint16(10272), + 2396: uint16(9042), + 2397: uint16(14406), + 2398: uint16(11275), + 2399: uint16(11303), + 2400: uint16(4888), + 2401: uint16(3853), + 2402: uint16(14404), + 2403: uint16(14401), + 2404: uint16(4951), + 2405: uint16(4166), + 2406: uint16(14407), + 2407: uint16(11304), + 2408: uint16(14411), + 2409: uint16(8474), + 2410: uint16(14418), + 2411: uint16(14412), + 2412: uint16(14409), + 2413: uint16(14416), + 2414: uint16(14386), + 2415: uint16(14413), + 2416: uint16(14417), + 2417: uint16(10017), + 2418: uint16(9290), + 2419: uint16(14410), + 2420: uint16(14414), + 2421: uint16(5671), + 2422: uint16(6480), + 2423: uint16(7996), + 2424: uint16(14422), + 2425: uint16(9221), + 2426: uint16(14419), + 2427: uint16(10815), + 2428: uint16(14420), + 2429: uint16(14421), + 2430: uint16(11053), + 2431: uint16(7937), + 2432: uint16(5697), + 2433: uint16(14428), + 2434: uint16(6676), + 2435: uint16(14425), + 2436: uint16(14424), + 2437: uint16(9745), + 2438: uint16(9492), + 2439: uint16(9232), + 2440: uint16(14426), + 2441: uint16(14427), + 2442: uint16(10318), + 2443: uint16(9764), + 2444: uint16(6658), + 2445: uint16(8016), + 2446: uint16(10799), + 2447: uint16(4648), + 2448: uint16(14596), + 2449: uint16(14429), + 2450: uint16(11305), + 2451: uint16(14598), + 2452: uint16(14594), + 2453: uint16(14595), + 2454: uint16(8255), + 2455: uint16(14593), + 2456: uint16(14366), + 2457: uint16(14597), + 2458: uint16(14592), + 2459: uint16(14602), + 2460: uint16(14603), + 2461: uint16(9222), + 2462: uint16(14605), + 2463: uint16(6659), + 2464: uint16(14600), + 2465: uint16(5147), + 2466: uint16(14606), + 2467: uint16(14599), + 2468: uint16(14610), + 2469: uint16(14609), + 2470: uint16(14608), + 2471: uint16(14611), + 2472: uint16(14613), + 2473: uint16(7504), + 2474: uint16(14612), + 2475: uint16(14616), + 2476: uint16(14614), + 2477: uint16(14615), + 2478: uint16(14415), + 2479: uint16(14618), + 2480: uint16(14617), + 2481: uint16(14423), + 2482: uint16(14619), + 2483: uint16(14607), + 2484: uint16(6712), + 2485: uint16(14620), + 2486: uint16(14621), + 2487: uint16(14623), + 2488: uint16(14622), + 2489: uint16(14624), + 2490: uint16(4445), + 2491: uint16(6165), + 2492: uint16(10587), + 2493: uint16(7950), + 2494: uint16(5933), + 2495: uint16(14626), + 2496: uint16(14629), + 2497: uint16(10289), + 2498: uint16(5182), + 2499: uint16(14628), + 2500: uint16(14627), + 2501: uint16(9779), + 2502: uint16(14630), + 2503: uint16(5396), + 2504: uint16(14632), + 2505: uint16(14631), + 2506: uint16(4889), + 2507: uint16(6677), + 2508: uint16(9527), + 2509: uint16(5672), + 2510: uint16(7763), + 2511: uint16(14633), + 2512: uint16(7951), + 2513: uint16(9223), + 2514: uint16(10302), + 2515: uint16(14634), + 2516: uint16(14635), + 2517: uint16(14636), + 2518: uint16(10519), + 2519: uint16(13372), + 2520: uint16(7973), + 2521: uint16(10283), + 2522: uint16(6455), + 2523: uint16(10052), + 2524: uint16(10018), + 2525: uint16(9260), + 2526: uint16(11552), + 2527: uint16(14638), + 2528: uint16(6959), + 2529: uint16(14639), + 2530: uint16(3861), + 2531: uint16(5427), + 2532: uint16(7980), + 2533: uint16(10303), + 2534: uint16(14640), + 2535: uint16(6689), + 2536: uint16(8742), + 2537: uint16(6714), + 2538: uint16(7702), + 2539: uint16(14641), + 2540: uint16(10588), + 2541: uint16(4182), + 2542: uint16(6715), + 2543: uint16(14644), + 2544: uint16(14642), + 2545: uint16(14645), + 2546: uint16(11544), + 2547: uint16(14643), + 2548: uint16(8026), + 2549: uint16(14646), + 2550: uint16(8465), + 2551: uint16(14647), + 2552: uint16(4953), + 2553: uint16(14649), + 2554: uint16(14648), + 2555: uint16(14650), + 2556: uint16(14651), + 2557: uint16(4954), + 2558: uint16(9563), + 2559: uint16(8725), + 2560: uint16(5195), + 2561: uint16(6716), + 2562: uint16(8256), + 2563: uint16(7227), + 2564: uint16(3855), + 2565: uint16(14652), + 2566: uint16(4353), + 2567: uint16(14656), + 2568: uint16(6166), + 2569: uint16(14655), + 2570: uint16(6410), + 2571: uint16(7449), + 2572: uint16(14654), + 2573: uint16(7450), + 2574: uint16(11039), + 2575: uint16(6409), + 2576: uint16(3894), + 2577: uint16(7981), + 2578: uint16(14661), + 2579: uint16(7952), + 2580: uint16(4134), + 2581: uint16(7220), + 2582: uint16(10821), + 2583: uint16(6481), + 2584: uint16(7451), + 2585: uint16(7942), + 2586: uint16(14660), + 2587: uint16(14658), + 2588: uint16(14659), + 2589: uint16(8778), + 2590: uint16(14853), + 2591: uint16(14665), + 2592: uint16(6749), + 2593: uint16(6167), + 2594: uint16(14663), + 2595: uint16(14664), + 2596: uint16(7703), + 2597: uint16(14662), + 2598: uint16(6670), + 2599: uint16(14667), + 2600: uint16(14666), + 2601: uint16(14671), + 2602: uint16(14672), + 2603: uint16(14668), + 2604: uint16(4609), + 2605: uint16(14669), + 2606: uint16(14670), + 2607: uint16(10036), + 2608: uint16(10304), + 2609: uint16(5673), + 2610: uint16(14673), + 2611: uint16(7953), + 2612: uint16(7452), + 2613: uint16(8753), + 2614: uint16(5414), + 2615: uint16(14674), + 2616: uint16(14678), + 2617: uint16(4394), + 2618: uint16(14675), + 2619: uint16(14677), + 2620: uint16(14676), + 2621: uint16(7242), + 2622: uint16(8743), + 2623: uint16(3876), + 2624: uint16(14679), + 2625: uint16(14680), + 2626: uint16(8969), + 2627: uint16(11600), + 2628: uint16(6690), + 2629: uint16(10570), + 2630: uint16(10780), + 2631: uint16(14849), + 2632: uint16(14682), + 2633: uint16(14685), + 2634: uint16(14684), + 2635: uint16(14681), + 2636: uint16(14848), + 2637: uint16(9533), + 2638: uint16(14683), + 2639: uint16(14850), + 2640: uint16(7243), + 2641: uint16(14851), + 2642: uint16(11306), + 2643: uint16(9815), + 2644: uint16(14852), + 2645: uint16(14854), + 2646: uint16(14855), + 2647: uint16(14856), + 2648: uint16(5417), + 2649: uint16(4135), + 2650: uint16(6168), + 2651: uint16(14857), + 2652: uint16(14858), + 2653: uint16(7248), + 2654: uint16(8257), + 2655: uint16(12599), + 2656: uint16(8221), + 2657: uint16(8220), + 2658: uint16(8503), + 2659: uint16(6438), + 2660: uint16(12113), + 2661: uint16(5709), + 2662: uint16(11276), + 2663: uint16(10589), + 2664: uint16(10333), + 2665: uint16(14859), + 2666: uint16(6482), + 2667: uint16(8990), + 2668: uint16(14860), + 2669: uint16(11790), + 2670: uint16(10781), + 2671: uint16(8970), + 2672: uint16(14861), + 2673: uint16(4955), + 2674: uint16(14862), + 2675: uint16(14863), + 2676: uint16(11065), + 2677: uint16(11011), + 2678: uint16(10837), + 2679: uint16(10811), + 2680: uint16(6660), + 2681: uint16(14865), + 2682: uint16(6986), + 2683: uint16(10800), + 2684: uint16(14867), + 2685: uint16(14870), + 2686: uint16(14869), + 2687: uint16(4952), + 2688: uint16(5183), + 2689: uint16(14866), + 2690: uint16(14868), + 2691: uint16(14871), + 2692: uint16(7768), + 2693: uint16(11354), + 2694: uint16(3880), + 2695: uint16(6463), + 2696: uint16(8475), + 2697: uint16(6972), + 2698: uint16(7506), + 2699: uint16(14874), + 2700: uint16(9261), + 2701: uint16(14872), + 2702: uint16(8458), + 2703: uint16(14873), + 2704: uint16(7505), + 2705: uint16(11068), + 2706: uint16(14875), + 2707: uint16(14876), + 2708: uint16(11335), + 2709: uint16(14881), + 2710: uint16(6169), + 2711: uint16(9780), + 2712: uint16(14878), + 2713: uint16(9291), + 2714: uint16(14653), + 2715: uint16(14657), + 2716: uint16(5166), + 2717: uint16(9766), + 2718: uint16(14880), + 2719: uint16(7453), + 2720: uint16(10019), + 2721: uint16(14886), + 2722: uint16(10073), + 2723: uint16(14877), + 2724: uint16(14883), + 2725: uint16(14882), + 2726: uint16(7982), + 2727: uint16(10828), + 2728: uint16(11570), + 2729: uint16(10822), + 2730: uint16(4395), + 2731: uint16(6717), + 2732: uint16(11815), + 2733: uint16(14885), + 2734: uint16(7764), + 2735: uint16(14884), + 2736: uint16(14879), + 2737: uint16(5934), + 2738: uint16(14891), + 2739: uint16(14889), + 2740: uint16(4396), + 2741: uint16(14887), + 2742: uint16(14893), + 2743: uint16(14899), + 2744: uint16(8487), + 2745: uint16(10528), + 2746: uint16(14901), + 2747: uint16(10241), + 2748: uint16(14900), + 2749: uint16(9807), + 2750: uint16(10782), + 2751: uint16(4890), + 2752: uint16(8022), + 2753: uint16(7199), + 2754: uint16(9010), + 2755: uint16(11277), + 2756: uint16(14896), + 2757: uint16(14895), + 2758: uint16(14897), + 2759: uint16(14894), + 2760: uint16(14902), + 2761: uint16(14892), + 2762: uint16(14890), + 2763: uint16(14898), + 2764: uint16(14888), + 2765: uint16(8779), + 2766: uint16(11095), + 2767: uint16(6949), + 2768: uint16(6483), + 2769: uint16(6425), + 2770: uint16(10830), + 2771: uint16(4640), + 2772: uint16(9005), + 2773: uint16(9513), + 2774: uint16(4136), + 2775: uint16(8017), + 2776: uint16(7955), + 2777: uint16(5641), + 2778: uint16(14904), + 2779: uint16(6170), + 2780: uint16(4699), + 2781: uint16(14906), + 2782: uint16(4691), + 2783: uint16(14912), + 2784: uint16(14909), + 2785: uint16(8018), + 2786: uint16(4650), + 2787: uint16(6411), + 2788: uint16(4649), + 2789: uint16(6446), + 2790: uint16(14907), + 2791: uint16(5700), + 2792: uint16(5674), + 2793: uint16(9292), + 2794: uint16(14905), + 2795: uint16(3877), + 2796: uint16(14908), + 2797: uint16(14910), + 2798: uint16(5420), + 2799: uint16(5643), + 2800: uint16(4891), + 2801: uint16(5162), + 2802: uint16(14913), + 2803: uint16(6488), + 2804: uint16(10832), + 2805: uint16(6678), + 2806: uint16(14914), + 2807: uint16(10255), + 2808: uint16(14926), + 2809: uint16(4370), + 2810: uint16(14915), + 2811: uint16(14932), + 2812: uint16(14916), + 2813: uint16(11553), + 2814: uint16(14923), + 2815: uint16(9790), + 2816: uint16(14931), + 2817: uint16(14918), + 2818: uint16(3859), + 2819: uint16(14920), + 2820: uint16(6171), + 2821: uint16(14922), + 2822: uint16(14921), + 2823: uint16(14917), + 2824: uint16(14928), + 2825: uint16(7454), + 2826: uint16(13132), + 2827: uint16(5959), + 2828: uint16(11355), + 2829: uint16(14919), + 2830: uint16(9043), + 2831: uint16(4610), + 2832: uint16(6412), + 2833: uint16(14911), + 2834: uint16(14927), + 2835: uint16(4672), + 2836: uint16(14925), + 2837: uint16(14929), + 2838: uint16(9293), + 2839: uint16(4957), + 2840: uint16(15121), + 2841: uint16(11048), + 2842: uint16(14934), + 2843: uint16(4956), + 2844: uint16(14941), + 2845: uint16(10783), + 2846: uint16(15104), + 2847: uint16(15106), + 2848: uint16(15110), + 2849: uint16(14936), + 2850: uint16(8713), + 2851: uint16(9294), + 2852: uint16(15114), + 2853: uint16(14939), + 2854: uint16(15111), + 2855: uint16(15105), + 2856: uint16(7704), + 2857: uint16(15115), + 2858: uint16(7954), + 2859: uint16(15113), + 2860: uint16(4892), + 2861: uint16(11823), + 2862: uint16(14933), + 2863: uint16(15109), + 2864: uint16(3895), + 2865: uint16(14935), + 2866: uint16(11033), + 2867: uint16(14940), + 2868: uint16(7681), + 2869: uint16(8998), + 2870: uint16(14930), + 2871: uint16(15108), + 2872: uint16(7769), + 2873: uint16(15118), + 2874: uint16(4688), + 2875: uint16(5888), + 2876: uint16(15120), + 2877: uint16(14937), + 2878: uint16(15119), + 2879: uint16(15112), + 2880: uint16(14938), + 2881: uint16(15116), + 2882: uint16(15117), + 2883: uint16(15134), + 2884: uint16(9517), + 2885: uint16(15107), + 2886: uint16(15130), + 2887: uint16(15132), + 2888: uint16(9015), + 2889: uint16(11307), + 2890: uint16(10325), + 2891: uint16(15127), + 2892: uint16(8489), + 2893: uint16(15133), + 2894: uint16(8222), + 2895: uint16(15124), + 2896: uint16(15137), + 2897: uint16(15136), + 2898: uint16(9550), + 2899: uint16(15135), + 2900: uint16(9545), + 2901: uint16(15139), + 2902: uint16(15126), + 2903: uint16(5415), + 2904: uint16(15129), + 2905: uint16(7228), + 2906: uint16(9791), + 2907: uint16(15131), + 2908: uint16(5418), + 2909: uint16(15123), + 2910: uint16(15125), + 2911: uint16(15122), + 2912: uint16(11791), + 2913: uint16(4665), + 2914: uint16(15128), + 2915: uint16(15138), + 2916: uint16(4628), + 2917: uint16(6470), + 2918: uint16(4156), + 2919: uint16(15155), + 2920: uint16(11792), + 2921: uint16(15158), + 2922: uint16(7705), + 2923: uint16(15157), + 2924: uint16(15156), + 2925: uint16(15153), + 2926: uint16(15141), + 2927: uint16(15170), + 2928: uint16(15140), + 2929: uint16(15159), + 2930: uint16(15151), + 2931: uint16(15146), + 2932: uint16(15143), + 2933: uint16(15144), + 2934: uint16(15152), + 2935: uint16(21249), + 2936: uint16(15149), + 2937: uint16(6172), + 2938: uint16(8999), + 2939: uint16(8259), + 2940: uint16(15147), + 2941: uint16(15142), + 2942: uint16(15145), + 2943: uint16(11308), + 2944: uint16(10825), + 2945: uint16(15150), + 2946: uint16(15160), + 2947: uint16(15168), + 2948: uint16(15161), + 2949: uint16(15174), + 2950: uint16(15172), + 2951: uint16(15167), + 2952: uint16(15166), + 2953: uint16(9007), + 2954: uint16(8260), + 2955: uint16(15164), + 2956: uint16(15162), + 2957: uint16(15169), + 2958: uint16(15175), + 2959: uint16(10068), + 2960: uint16(15181), + 2961: uint16(15176), + 2962: uint16(15179), + 2963: uint16(15173), + 2964: uint16(8787), + 2965: uint16(10263), + 2966: uint16(15163), + 2967: uint16(15171), + 2968: uint16(7455), + 2969: uint16(11054), + 2970: uint16(15191), + 2971: uint16(15178), + 2972: uint16(5889), + 2973: uint16(4354), + 2974: uint16(4670), + 2975: uint16(15154), + 2976: uint16(7456), + 2977: uint16(15183), + 2978: uint16(15190), + 2979: uint16(7000), + 2980: uint16(4689), + 2981: uint16(8717), + 2982: uint16(15180), + 2983: uint16(15185), + 2984: uint16(15189), + 2985: uint16(5397), + 2986: uint16(5163), + 2987: uint16(15187), + 2988: uint16(5120), + 2989: uint16(9514), + 2990: uint16(15186), + 2991: uint16(15188), + 2992: uint16(15182), + 2993: uint16(15184), + 2994: uint16(4671), + 2995: uint16(8744), + 2996: uint16(15195), + 2997: uint16(15193), + 2998: uint16(5960), + 2999: uint16(15192), + 3000: uint16(15360), + 3001: uint16(14903), + 3002: uint16(15194), + 3003: uint16(15196), + 3004: uint16(15197), + 3005: uint16(15371), + 3006: uint16(15367), + 3007: uint16(14924), + 3008: uint16(15366), + 3009: uint16(15365), + 3010: uint16(15362), + 3011: uint16(15177), + 3012: uint16(15364), + 3013: uint16(15363), + 3014: uint16(15369), + 3015: uint16(11781), + 3016: uint16(15372), + 3017: uint16(5466), + 3018: uint16(15368), + 3019: uint16(15370), + 3020: uint16(9990), + 3021: uint16(15373), + 3022: uint16(15377), + 3023: uint16(15374), + 3024: uint16(11346), + 3025: uint16(15375), + 3026: uint16(15165), + 3027: uint16(15378), + 3028: uint16(15379), + 3029: uint16(4116), + 3030: uint16(15381), + 3031: uint16(5702), + 3032: uint16(6912), + 3033: uint16(5428), + 3034: uint16(4355), + 3035: uint16(11326), + 3036: uint16(15383), + 3037: uint16(15382), + 3038: uint16(15385), + 3039: uint16(5148), + 3040: uint16(5429), + 3041: uint16(4893), + 3042: uint16(15388), + 3043: uint16(15387), + 3044: uint16(15389), + 3045: uint16(4397), + 3046: uint16(8726), + 3047: uint16(15390), + 3048: uint16(4894), + 3049: uint16(15392), + 3050: uint16(15391), + 3051: uint16(15393), + 3052: uint16(15394), + 3053: uint16(15395), + 3054: uint16(6718), + 3055: uint16(7956), + 3056: uint16(6400), + 3057: uint16(10319), + 3058: uint16(10561), + 3059: uint16(11811), + 3060: uint16(6740), + 3061: uint16(6447), + 3062: uint16(11601), + 3063: uint16(15396), + 3064: uint16(15397), + 3065: uint16(6719), + 3066: uint16(15398), + 3067: uint16(15399), + 3068: uint16(15401), + 3069: uint16(15400), + 3070: uint16(10807), + 3071: uint16(7229), + 3072: uint16(6987), + 3073: uint16(6691), + 3074: uint16(15402), + 3075: uint16(15404), + 3076: uint16(7682), + 3077: uint16(15403), + 3078: uint16(15405), + 3079: uint16(15406), + 3080: uint16(15407), + 3081: uint16(15408), + 3082: uint16(15409), + 3083: uint16(15411), + 3084: uint16(15410), + 3085: uint16(15412), + 3086: uint16(4356), + 3087: uint16(8745), + 3088: uint16(15413), + 3089: uint16(6661), + 3090: uint16(4651), + 3091: uint16(15414), + 3092: uint16(9249), + 3093: uint16(13099), + 3094: uint16(5122), + 3095: uint16(15415), + 3096: uint16(15416), + 3097: uint16(10571), + 3098: uint16(10823), + 3099: uint16(9510), + 3100: uint16(15417), + 3101: uint16(10053), + 3102: uint16(10074), + 3103: uint16(11058), + 3104: uint16(15418), + 3105: uint16(15420), + 3106: uint16(15419), + 3107: uint16(15422), + 3108: uint16(15421), + 3109: uint16(15424), + 3110: uint16(6720), + 3111: uint16(11024), + 3112: uint16(15425), + 3113: uint16(15426), + 3114: uint16(5123), + 3115: uint16(15427), + 3116: uint16(15429), + 3117: uint16(15428), + 3118: uint16(7748), + 3119: uint16(10264), + 3120: uint16(4137), + 3121: uint16(10020), + 3122: uint16(9044), + 3123: uint16(7200), + 3124: uint16(5184), + 3125: uint16(10021), + 3126: uint16(6925), + 3127: uint16(15431), + 3128: uint16(4895), + 3129: uint16(4183), + 3130: uint16(9553), + 3131: uint16(15430), + 3132: uint16(6173), + 3133: uint16(8754), + 3134: uint16(15432), + 3135: uint16(15440), + 3136: uint16(15433), + 3137: uint16(8480), + 3138: uint16(5185), + 3139: uint16(15441), + 3140: uint16(5703), + 3141: uint16(5124), + 3142: uint16(15439), + 3143: uint16(15437), + 3144: uint16(15434), + 3145: uint16(11327), + 3146: uint16(8991), + 3147: uint16(9528), + 3148: uint16(15435), + 3149: uint16(15443), + 3150: uint16(15442), + 3151: uint16(5634), + 3152: uint16(4364), + 3153: uint16(6426), + 3154: uint16(15436), + 3155: uint16(15438), + 3156: uint16(10806), + 3157: uint16(8531), + 3158: uint16(10838), + 3159: uint16(15451), + 3160: uint16(15452), + 3161: uint16(4398), + 3162: uint16(10503), + 3163: uint16(11100), + 3164: uint16(15616), + 3165: uint16(6914), + 3166: uint16(7457), + 3167: uint16(15447), + 3168: uint16(15453), + 3169: uint16(4167), + 3170: uint16(5398), + 3171: uint16(15444), + 3172: uint16(15449), + 3173: uint16(8019), + 3174: uint16(9808), + 3175: uint16(10054), + 3176: uint16(15446), + 3177: uint16(10752), + 3178: uint16(15448), + 3179: uint16(15619), + 3180: uint16(15617), + 3181: uint16(15450), + 3182: uint16(10753), + 3183: uint16(9767), + 3184: uint16(5186), + 3185: uint16(9220), + 3186: uint16(8780), + 3187: uint16(15620), + 3188: uint16(15618), + 3189: uint16(8504), + 3190: uint16(15445), + 3191: uint16(4138), + 3192: uint16(11309), + 3193: uint16(15631), + 3194: uint16(15630), + 3195: uint16(8021), + 3196: uint16(15627), + 3197: uint16(11339), + 3198: uint16(9493), + 3199: uint16(15621), + 3200: uint16(8996), + 3201: uint16(4139), + 3202: uint16(6174), + 3203: uint16(15624), + 3204: uint16(7174), + 3205: uint16(15629), + 3206: uint16(15628), + 3207: uint16(15623), + 3208: uint16(15626), + 3209: uint16(4679), + 3210: uint16(15625), + 3211: uint16(9768), + 3212: uint16(11533), + 3213: uint16(7507), + 3214: uint16(8020), + 3215: uint16(15637), + 3216: uint16(15635), + 3217: uint16(10284), + 3218: uint16(15632), + 3219: uint16(15634), + 3220: uint16(4121), + 3221: uint16(6175), + 3222: uint16(11793), + 3223: uint16(4636), + 3224: uint16(10305), + 3225: uint16(11328), + 3226: uint16(4611), + 3227: uint16(7706), + 3228: uint16(15636), + 3229: uint16(15641), + 3230: uint16(7458), + 3231: uint16(11279), + 3232: uint16(15638), + 3233: uint16(15633), + 3234: uint16(15639), + 3235: uint16(11581), + 3236: uint16(9298), + 3237: uint16(9505), + 3238: uint16(4629), + 3239: uint16(4148), + 3240: uint16(15645), + 3241: uint16(15648), + 3242: uint16(11554), + 3243: uint16(11331), + 3244: uint16(15655), + 3245: uint16(15649), + 3246: uint16(15646), + 3247: uint16(11571), + 3248: uint16(15652), + 3249: uint16(7209), + 3250: uint16(15654), + 3251: uint16(15659), + 3252: uint16(9296), + 3253: uint16(15657), + 3254: uint16(15651), + 3255: uint16(8727), + 3256: uint16(15658), + 3257: uint16(15647), + 3258: uint16(15653), + 3259: uint16(15660), + 3260: uint16(3931), + 3261: uint16(15650), + 3262: uint16(15661), + 3263: uint16(7707), + 3264: uint16(7230), + 3265: uint16(10500), + 3266: uint16(6413), + 3267: uint16(15642), + 3268: uint16(15656), + 3269: uint16(9241), + 3270: uint16(7957), + 3271: uint16(4680), + 3272: uint16(6448), + 3273: uint16(7459), + 3274: uint16(15644), + 3275: uint16(7201), + 3276: uint16(5675), + 3277: uint16(15643), + 3278: uint16(15665), + 3279: uint16(7244), + 3280: uint16(5913), + 3281: uint16(15680), + 3282: uint16(15674), + 3283: uint16(5203), + 3284: uint16(9262), + 3285: uint16(15669), + 3286: uint16(15678), + 3287: uint16(3854), + 3288: uint16(4113), + 3289: uint16(4376), + 3290: uint16(15671), + 3291: uint16(8459), + 3292: uint16(15662), + 3293: uint16(15664), + 3294: uint16(6176), + 3295: uint16(15681), + 3296: uint16(15676), + 3297: uint16(15668), + 3298: uint16(15675), + 3299: uint16(11018), + 3300: uint16(15673), + 3301: uint16(15677), + 3302: uint16(5935), + 3303: uint16(7460), + 3304: uint16(8728), + 3305: uint16(15667), + 3306: uint16(11278), + 3307: uint16(15670), + 3308: uint16(15663), + 3309: uint16(9297), + 3310: uint16(15666), + 3311: uint16(15672), + 3312: uint16(11824), + 3313: uint16(6941), + 3314: uint16(10845), + 3315: uint16(15682), + 3316: uint16(9997), + 3317: uint16(15694), + 3318: uint16(5914), + 3319: uint16(7231), + 3320: uint16(15684), + 3321: uint16(11534), + 3322: uint16(6177), + 3323: uint16(15697), + 3324: uint16(3917), + 3325: uint16(15695), + 3326: uint16(15683), + 3327: uint16(15689), + 3328: uint16(15691), + 3329: uint16(11310), + 3330: uint16(15686), + 3331: uint16(9229), + 3332: uint16(15688), + 3333: uint16(15696), + 3334: uint16(15690), + 3335: uint16(11046), + 3336: uint16(15685), + 3337: uint16(6913), + 3338: uint16(15709), + 3339: uint16(4681), + 3340: uint16(15687), + 3341: uint16(15692), + 3342: uint16(15693), + 3343: uint16(8523), + 3344: uint16(8505), + 3345: uint16(15701), + 3346: uint16(15707), + 3347: uint16(15705), + 3348: uint16(9224), + 3349: uint16(15874), + 3350: uint16(15702), + 3351: uint16(15703), + 3352: uint16(15679), + 3353: uint16(5208), + 3354: uint16(10265), + 3355: uint16(6942), + 3356: uint16(6230), + 3357: uint16(11794), + 3358: uint16(15699), + 3359: uint16(15873), + 3360: uint16(4168), + 3361: uint16(8261), + 3362: uint16(9816), + 3363: uint16(4896), + 3364: uint16(11609), + 3365: uint16(11008), + 3366: uint16(9009), + 3367: uint16(15706), + 3368: uint16(15708), + 3369: uint16(8209), + 3370: uint16(15872), + 3371: uint16(15704), + 3372: uint16(15698), + 3373: uint16(4898), + 3374: uint16(5704), + 3375: uint16(15886), + 3376: uint16(15881), + 3377: uint16(8023), + 3378: uint16(4674), + 3379: uint16(7232), + 3380: uint16(15890), + 3381: uint16(15883), + 3382: uint16(8971), + 3383: uint16(15880), + 3384: uint16(9016), + 3385: uint16(15915), + 3386: uint16(15877), + 3387: uint16(15876), + 3388: uint16(15885), + 3389: uint16(15879), + 3390: uint16(15878), + 3391: uint16(15884), + 3392: uint16(7936), + 3393: uint16(15875), + 3394: uint16(15887), + 3395: uint16(15888), + 3396: uint16(4897), + 3397: uint16(15893), + 3398: uint16(15892), + 3399: uint16(15894), + 3400: uint16(15897), + 3401: uint16(9250), + 3402: uint16(15891), + 3403: uint16(15895), + 3404: uint16(5698), + 3405: uint16(8536), + 3406: uint16(15889), + 3407: uint16(9754), + 3408: uint16(15896), + 3409: uint16(15901), + 3410: uint16(15899), + 3411: uint16(15902), + 3412: uint16(15905), + 3413: uint16(15898), + 3414: uint16(6217), + 3415: uint16(9735), + 3416: uint16(15640), + 3417: uint16(11347), + 3418: uint16(15900), + 3419: uint16(15904), + 3420: uint16(8532), + 3421: uint16(15903), + 3422: uint16(15882), + 3423: uint16(20040), + 3424: uint16(15908), + 3425: uint16(15912), + 3426: uint16(15910), + 3427: uint16(15906), + 3428: uint16(15907), + 3429: uint16(15911), + 3430: uint16(15909), + 3431: uint16(10285), + 3432: uint16(15917), + 3433: uint16(15914), + 3434: uint16(15913), + 3435: uint16(15916), + 3436: uint16(9523), + 3437: uint16(15918), + 3438: uint16(8788), + 3439: uint16(8524), + 3440: uint16(7940), + 3441: uint16(15919), + 3442: uint16(15921), + 3443: uint16(15920), + 3444: uint16(15700), + 3445: uint16(15922), + 3446: uint16(9542), + 3447: uint16(15923), + 3448: uint16(4399), + 3449: uint16(9299), + 3450: uint16(4612), + 3451: uint16(5187), + 3452: uint16(6973), + 3453: uint16(6449), + 3454: uint16(11782), + 3455: uint16(7749), + 3456: uint16(4169), + 3457: uint16(15925), + 3458: uint16(15924), + 3459: uint16(15928), + 3460: uint16(8729), + 3461: uint16(15931), + 3462: uint16(15926), + 3463: uint16(15930), + 3464: uint16(15929), + 3465: uint16(9247), + 3466: uint16(3896), + 3467: uint16(11604), + 3468: uint16(15933), + 3469: uint16(4103), + 3470: uint16(15935), + 3471: uint16(15934), + 3472: uint16(15932), + 3473: uint16(15927), + 3474: uint16(10754), + 3475: uint16(15937), + 3476: uint16(15936), + 3477: uint16(4170), + 3478: uint16(15939), + 3479: uint16(10513), + 3480: uint16(15938), + 3481: uint16(11028), + 3482: uint16(7462), + 3483: uint16(8210), + 3484: uint16(7461), + 3485: uint16(11610), + 3486: uint16(15945), + 3487: uint16(8024), + 3488: uint16(15941), + 3489: uint16(15946), + 3490: uint16(4171), + 3491: uint16(15944), + 3492: uint16(9792), + 3493: uint16(15940), + 3494: uint16(15943), + 3495: uint16(7463), + 3496: uint16(10032), + 3497: uint16(15947), + 3498: uint16(6960), + 3499: uint16(8025), + 3500: uint16(15950), + 3501: uint16(15942), + 3502: uint16(5638), + 3503: uint16(15948), + 3504: uint16(11311), + 3505: uint16(15951), + 3506: uint16(21253), + 3507: uint16(7214), + 3508: uint16(15952), + 3509: uint16(15953), + 3510: uint16(9741), + 3511: uint16(15955), + 3512: uint16(15956), + 3513: uint16(9746), + 3514: uint16(9300), + 3515: uint16(15958), + 3516: uint16(15960), + 3517: uint16(11572), + 3518: uint16(15957), + 3519: uint16(15959), + 3520: uint16(4172), + 3521: uint16(15954), + 3522: uint16(12858), + 3523: uint16(15961), + 3524: uint16(8262), + 3525: uint16(6679), + 3526: uint16(15963), + 3527: uint16(15962), + 3528: uint16(7683), + 3529: uint16(12600), + 3530: uint16(15964), + 3531: uint16(16128), + 3532: uint16(15949), + 3533: uint16(15965), + 3534: uint16(16129), + 3535: uint16(9817), + 3536: uint16(16130), + 3537: uint16(16131), + 3538: uint16(16132), + 3539: uint16(16133), + 3540: uint16(9021), + 3541: uint16(16135), + 3542: uint16(16134), + 3543: uint16(16136), + 3544: uint16(16137), + 3545: uint16(6974), + 3546: uint16(10306), + 3547: uint16(11083), + 3548: uint16(16138), + 3549: uint16(16139), + 3550: uint16(8245), + 3551: uint16(6915), + 3552: uint16(16140), + 3553: uint16(16141), + 3554: uint16(16142), + 3555: uint16(10545), + 3556: uint16(10022), + 3557: uint16(16143), + 3558: uint16(9782), + 3559: uint16(8972), + 3560: uint16(16144), + 3561: uint16(4422), + 3562: uint16(5196), + 3563: uint16(11045), + 3564: uint16(11029), + 3565: uint16(4371), + 3566: uint16(11795), + 3567: uint16(10801), + 3568: uint16(10505), + 3569: uint16(7958), + 3570: uint16(16145), + 3571: uint16(9506), + 3572: uint16(5890), + 3573: uint16(16146), + 3574: uint16(6451), + 3575: uint16(16148), + 3576: uint16(16147), + 3577: uint16(16149), + 3578: uint16(16150), + 3579: uint16(16151), + 3580: uint16(5149), + 3581: uint16(16152), + 3582: uint16(16153), + 3583: uint16(5891), + 3584: uint16(10023), + 3585: uint16(16155), + 3586: uint16(7508), + 3587: uint16(16154), + 3588: uint16(5399), + 3589: uint16(16156), + 3590: uint16(16158), + 3591: uint16(16157), + 3592: uint16(16159), + 3593: uint16(5936), + 3594: uint16(16160), + 3595: uint16(5448), + 3596: uint16(8223), + 3597: uint16(6236), + 3598: uint16(16162), + 3599: uint16(16163), + 3600: uint16(16161), + 3601: uint16(6988), + 3602: uint16(9511), + 3603: uint16(5400), + 3604: uint16(16165), + 3605: uint16(8715), + 3606: uint16(16164), + 3607: uint16(11796), + 3608: uint16(9793), + 3609: uint16(16168), + 3610: uint16(16170), + 3611: uint16(16167), + 3612: uint16(11059), + 3613: uint16(16169), + 3614: uint16(16171), + 3615: uint16(11555), + 3616: uint16(16175), + 3617: uint16(16174), + 3618: uint16(8789), + 3619: uint16(9740), + 3620: uint16(5892), + 3621: uint16(16173), + 3622: uint16(16172), + 3623: uint16(11280), + 3624: uint16(11281), + 3625: uint16(16176), + 3626: uint16(4173), + 3627: uint16(6229), + 3628: uint16(6721), + 3629: uint16(16177), + 3630: uint16(16178), + 3631: uint16(16180), + 3632: uint16(7202), + 3633: uint16(16182), + 3634: uint16(16181), + 3635: uint16(16183), + 3636: uint16(4652), + 3637: uint16(16185), + 3638: uint16(16184), + 3639: uint16(16187), + 3640: uint16(16186), + 3641: uint16(5915), + 3642: uint16(11527), + 3643: uint16(5419), + 3644: uint16(4357), + 3645: uint16(5449), + 3646: uint16(4928), + 3647: uint16(11591), + 3648: uint16(16189), + 3649: uint16(16191), + 3650: uint16(16192), + 3651: uint16(4400), + 3652: uint16(16188), + 3653: uint16(6680), + 3654: uint16(8992), + 3655: uint16(16190), + 3656: uint16(16195), + 3657: uint16(6989), + 3658: uint16(16193), + 3659: uint16(5661), + 3660: uint16(10024), + 3661: uint16(16194), + 3662: uint16(16221), + 3663: uint16(16200), + 3664: uint16(5916), + 3665: uint16(5188), + 3666: uint16(16197), + 3667: uint16(11356), + 3668: uint16(11535), + 3669: uint16(8533), + 3670: uint16(16199), + 3671: uint16(16201), + 3672: uint16(11573), + 3673: uint16(5430), + 3674: uint16(10075), + 3675: uint16(9769), + 3676: uint16(16202), + 3677: uint16(16204), + 3678: uint16(16207), + 3679: uint16(16203), + 3680: uint16(16206), + 3681: uint16(5961), + 3682: uint16(4140), + 3683: uint16(16208), + 3684: uint16(7759), + 3685: uint16(16205), + 3686: uint16(11579), + 3687: uint16(16211), + 3688: uint16(21251), + 3689: uint16(16209), + 3690: uint16(16212), + 3691: uint16(16198), + 3692: uint16(16210), + 3693: uint16(6427), + 3694: uint16(16213), + 3695: uint16(16214), + 3696: uint16(11357), + 3697: uint16(16215), + 3698: uint16(16216), + 3699: uint16(16196), + 3700: uint16(16217), + 3701: uint16(4899), + 3702: uint16(6916), + 3703: uint16(16218), + 3704: uint16(16219), + 3705: uint16(16220), + 3706: uint16(4122), + 3707: uint16(16384), + 3708: uint16(10266), + 3709: uint16(16385), + 3710: uint16(4867), + 3711: uint16(16386), + 3712: uint16(16387), + 3713: uint16(16388), + 3714: uint16(16390), + 3715: uint16(16391), + 3716: uint16(16389), + 3717: uint16(10290), + 3718: uint16(16393), + 3719: uint16(16392), + 3720: uint16(16395), + 3721: uint16(16394), + 3722: uint16(16396), + 3723: uint16(16397), + 3724: uint16(16399), + 3725: uint16(16398), + 3726: uint16(6232), + 3727: uint16(16401), + 3728: uint16(16400), + 3729: uint16(4900), + 3730: uint16(7730), + 3731: uint16(9243), + 3732: uint16(16402), + 3733: uint16(7959), + 3734: uint16(6681), + 3735: uint16(4184), + 3736: uint16(16403), + 3737: uint16(11312), + 3738: uint16(10562), + 3739: uint16(16404), + 3740: uint16(9251), + 3741: uint16(11282), + 3742: uint16(6178), + 3743: uint16(7708), + 3744: uint16(8746), + 3745: uint16(12563), + 3746: uint16(8973), + 3747: uint16(4423), + 3748: uint16(16405), + 3749: uint16(16406), + 3750: uint16(16411), + 3751: uint16(16409), + 3752: uint16(16408), + 3753: uint16(14625), + 3754: uint16(4613), + 3755: uint16(16407), + 3756: uint16(3897), + 3757: uint16(9993), + 3758: uint16(10025), + 3759: uint16(11536), + 3760: uint16(16412), + 3761: uint16(16410), + 3762: uint16(8763), + 3763: uint16(7941), + 3764: uint16(9994), + 3765: uint16(10252), + 3766: uint16(16414), + 3767: uint16(11531), + 3768: uint16(5676), + 3769: uint16(16415), + 3770: uint16(16413), + 3771: uint16(10037), + 3772: uint16(16416), + 3773: uint16(16417), + 3774: uint16(3898), + 3775: uint16(7509), + 3776: uint16(16422), + 3777: uint16(16419), + 3778: uint16(9548), + 3779: uint16(16418), + 3780: uint16(5125), + 3781: uint16(16425), + 3782: uint16(16420), + 3783: uint16(16421), + 3784: uint16(16424), + 3785: uint16(16423), + 3786: uint16(10244), + 3787: uint16(8225), + 3788: uint16(8224), + 3789: uint16(5150), + 3790: uint16(16426), + 3791: uint16(16427), + 3792: uint16(16428), + 3793: uint16(16430), + 3794: uint16(16429), + 3795: uint16(4149), + 3796: uint16(16438), + 3797: uint16(10055), + 3798: uint16(16432), + 3799: uint16(16434), + 3800: uint16(16436), + 3801: uint16(7709), + 3802: uint16(16437), + 3803: uint16(16435), + 3804: uint16(6943), + 3805: uint16(16431), + 3806: uint16(16433), + 3807: uint16(10273), + 3808: uint16(7464), + 3809: uint16(16440), + 3810: uint16(16439), + 3811: uint16(16441), + 3812: uint16(6917), + 3813: uint16(6414), + 3814: uint16(9302), + 3815: uint16(16442), + 3816: uint16(9002), + 3817: uint16(16444), + 3818: uint16(11520), + 3819: uint16(16443), + 3820: uint16(8264), + 3821: uint16(16449), + 3822: uint16(16451), + 3823: uint16(16452), + 3824: uint16(8755), + 3825: uint16(16450), + 3826: uint16(16447), + 3827: uint16(16445), + 3828: uint16(16446), + 3829: uint16(16448), + 3830: uint16(16455), + 3831: uint16(16453), + 3832: uint16(16454), + 3833: uint16(16456), + 3834: uint16(16458), + 3835: uint16(16459), + 3836: uint16(16460), + 3837: uint16(16461), + 3838: uint16(16457), + 3839: uint16(16463), + 3840: uint16(16462), + 3841: uint16(16464), + 3842: uint16(11556), + 3843: uint16(16467), + 3844: uint16(16465), + 3845: uint16(16466), + 3846: uint16(4929), + 3847: uint16(11101), + 3848: uint16(10537), + 3849: uint16(16469), + 3850: uint16(16468), + 3851: uint16(16470), + 3852: uint16(16471), + 3853: uint16(16475), + 3854: uint16(16472), + 3855: uint16(16473), + 3856: uint16(16474), + 3857: uint16(16476), + 3858: uint16(16477), + 3859: uint16(16640), + 3860: uint16(16641), + 3861: uint16(16642), + 3862: uint16(9998), + 3863: uint16(9263), + 3864: uint16(16643), + 3865: uint16(9809), + 3866: uint16(10259), + 3867: uint16(16644), + 3868: uint16(16645), + 3869: uint16(9225), + 3870: uint16(4614), + 3871: uint16(6179), + 3872: uint16(16646), + 3873: uint16(16647), + 3874: uint16(16648), + 3875: uint16(6664), + 3876: uint16(16650), + 3877: uint16(16649), + 3878: uint16(16651), + 3879: uint16(16652), + 3880: uint16(10056), + 3881: uint16(16653), + 3882: uint16(16654), + 3883: uint16(21064), + 3884: uint16(16655), + 3885: uint16(16656), + 3886: uint16(16657), + 3887: uint16(6669), + 3888: uint16(16658), + 3889: uint16(9781), + 3890: uint16(10814), + 3891: uint16(4141), + 3892: uint16(4150), + 3893: uint16(16659), + 3894: uint16(16661), + 3895: uint16(16660), + 3896: uint16(9295), + 3897: uint16(7960), + 3898: uint16(15384), + 3899: uint16(16662), + 3900: uint16(11040), + 3901: uint16(16663), + 3902: uint16(4901), + 3903: uint16(10038), + 3904: uint16(16664), + 3905: uint16(16665), + 3906: uint16(16666), + 3907: uint16(11067), + 3908: uint16(11060), + 3909: uint16(8989), + 3910: uint16(8265), + 3911: uint16(16668), + 3912: uint16(7233), + 3913: uint16(7465), + 3914: uint16(16671), + 3915: uint16(16670), + 3916: uint16(16669), + 3917: uint16(10076), + 3918: uint16(4902), + 3919: uint16(5896), + 3920: uint16(16677), + 3921: uint16(16674), + 3922: uint16(7710), + 3923: uint16(11025), + 3924: uint16(16673), + 3925: uint16(16675), + 3926: uint16(16676), + 3927: uint16(16672), + 3928: uint16(16678), + 3929: uint16(16679), + 3930: uint16(8974), + 3931: uint16(4930), + 3932: uint16(8772), + 3933: uint16(16680), + 3934: uint16(16681), + 3935: uint16(16684), + 3936: uint16(7750), + 3937: uint16(9507), + 3938: uint16(16685), + 3939: uint16(10802), + 3940: uint16(16682), + 3941: uint16(16683), + 3942: uint16(16688), + 3943: uint16(16687), + 3944: uint16(16686), + 3945: uint16(16690), + 3946: uint16(16689), + 3947: uint16(16691), + 3948: uint16(16693), + 3949: uint16(16692), + 3950: uint16(10540), + 3951: uint16(7221), + 3952: uint16(11557), + 3953: uint16(16694), + 3954: uint16(9494), + 3955: uint16(16695), + 3956: uint16(16696), + 3957: uint16(16700), + 3958: uint16(16698), + 3959: uint16(16699), + 3960: uint16(16697), + 3961: uint16(16701), + 3962: uint16(16702), + 3963: uint16(16703), + 3964: uint16(16704), + 3965: uint16(11030), + 3966: uint16(16705), + 3967: uint16(11087), + 3968: uint16(16706), + 3969: uint16(8749), + 3970: uint16(9801), + 3971: uint16(5450), + 3972: uint16(8730), + 3973: uint16(16707), + 3974: uint16(5401), + 3975: uint16(7983), + 3976: uint16(16708), + 3977: uint16(6428), + 3978: uint16(16709), + 3979: uint16(16710), + 3980: uint16(5893), + 3981: uint16(6452), + 3982: uint16(16712), + 3983: uint16(9269), + 3984: uint16(6453), + 3985: uint16(5165), + 3986: uint16(10755), + 3987: uint16(9770), + 3988: uint16(9270), + 3989: uint16(6203), + 3990: uint16(16714), + 3991: uint16(7466), + 3992: uint16(11537), + 3993: uint16(6180), + 3994: uint16(5894), + 3995: uint16(9986), + 3996: uint16(16716), + 3997: uint16(16718), + 3998: uint16(5962), + 3999: uint16(16717), + 4000: uint16(9045), + 4001: uint16(16720), + 4002: uint16(4630), + 4003: uint16(16715), + 4004: uint16(10057), + 4005: uint16(4111), + 4006: uint16(6475), + 4007: uint16(11825), + 4008: uint16(16719), + 4009: uint16(16721), + 4010: uint16(10538), + 4011: uint16(7992), + 4012: uint16(16723), + 4013: uint16(16724), + 4014: uint16(16722), + 4015: uint16(4653), + 4016: uint16(16730), + 4017: uint16(16729), + 4018: uint16(6918), + 4019: uint16(16731), + 4020: uint16(16726), + 4021: uint16(16732), + 4022: uint16(16727), + 4023: uint16(10039), + 4024: uint16(16725), + 4025: uint16(16728), + 4026: uint16(16897), + 4027: uint16(16896), + 4028: uint16(10816), + 4029: uint16(16733), + 4030: uint16(3914), + 4031: uint16(16899), + 4032: uint16(16898), + 4033: uint16(7467), + 4034: uint16(16900), + 4035: uint16(8226), + 4036: uint16(16902), + 4037: uint16(16901), + 4038: uint16(16903), + 4039: uint16(16711), + 4040: uint16(16713), + 4041: uint16(16905), + 4042: uint16(16904), + 4043: uint16(6919), + 4044: uint16(11592), + 4045: uint16(6961), + 4046: uint16(16906), + 4047: uint16(5654), + 4048: uint16(5151), + 4049: uint16(5126), + 4050: uint16(6722), + 4051: uint16(11283), + 4052: uint16(16912), + 4053: uint16(16911), + 4054: uint16(8227), + 4055: uint16(16908), + 4056: uint16(16910), + 4057: uint16(7210), + 4058: uint16(7711), + 4059: uint16(16909), + 4060: uint16(16907), + 4061: uint16(9737), + 4062: uint16(7468), + 4063: uint16(10267), + 4064: uint16(6454), + 4065: uint16(9303), + 4066: uint16(16913), + 4067: uint16(16914), + 4068: uint16(16936), + 4069: uint16(5431), + 4070: uint16(11804), + 4071: uint16(8212), + 4072: uint16(16915), + 4073: uint16(4401), + 4074: uint16(9046), + 4075: uint16(10496), + 4076: uint16(16916), + 4077: uint16(5209), + 4078: uint16(16917), + 4079: uint16(16919), + 4080: uint16(16920), + 4081: uint16(9736), + 4082: uint16(16921), + 4083: uint16(16922), + 4084: uint16(16923), + 4085: uint16(5432), + 4086: uint16(4402), + 4087: uint16(9508), + 4088: uint16(7175), + 4089: uint16(6723), + 4090: uint16(16924), + 4091: uint16(7176), + 4092: uint16(4393), + 4093: uint16(10274), + 4094: uint16(16925), + 4095: uint16(10058), + 4096: uint16(8228), + 4097: uint16(16928), + 4098: uint16(16929), + 4099: uint16(9800), + 4100: uint16(7712), + 4101: uint16(16926), + 4102: uint16(8768), + 4103: uint16(16927), + 4104: uint16(7469), + 4105: uint16(3899), + 4106: uint16(5128), + 4107: uint16(16930), + 4108: uint16(9047), + 4109: uint16(16931), + 4110: uint16(7974), + 4111: uint16(11020), + 4112: uint16(10242), + 4113: uint16(16932), + 4114: uint16(16933), + 4115: uint16(8756), + 4116: uint16(11558), + 4117: uint16(16935), + 4118: uint16(16934), + 4119: uint16(6990), + 4120: uint16(16937), + 4121: uint16(3919), + 4122: uint16(16940), + 4123: uint16(16938), + 4124: uint16(4403), + 4125: uint16(5677), + 4126: uint16(16939), + 4127: uint16(6181), + 4128: uint16(6225), + 4129: uint16(10565), + 4130: uint16(16941), + 4131: uint16(10803), + 4132: uint16(16943), + 4133: uint16(7984), + 4134: uint16(4142), + 4135: uint16(4377), + 4136: uint16(3851), + 4137: uint16(16942), + 4138: uint16(16944), + 4139: uint16(16945), + 4140: uint16(7510), + 4141: uint16(16946), + 4142: uint16(4654), + 4143: uint16(16948), + 4144: uint16(5705), + 4145: uint16(5189), + 4146: uint16(16949), + 4147: uint16(5460), + 4148: uint16(16950), + 4149: uint16(8027), + 4150: uint16(9516), + 4151: uint16(7999), + 4152: uint16(6484), + 4153: uint16(16951), + 4154: uint16(8769), + 4155: uint16(8266), + 4156: uint16(16953), + 4157: uint16(16955), + 4158: uint16(16952), + 4159: uint16(16954), + 4160: uint16(5633), + 4161: uint16(16956), + 4162: uint16(5637), + 4163: uint16(5190), + 4164: uint16(11313), + 4165: uint16(16958), + 4166: uint16(16959), + 4167: uint16(4109), + 4168: uint16(16962), + 4169: uint16(4693), + 4170: uint16(16961), + 4171: uint16(16960), + 4172: uint16(16964), + 4173: uint16(16957), + 4174: uint16(16965), + 4175: uint16(11528), + 4176: uint16(16966), + 4177: uint16(16967), + 4178: uint16(13139), + 4179: uint16(16969), + 4180: uint16(16968), + 4181: uint16(16970), + 4182: uint16(16971), + 4183: uint16(11540), + 4184: uint16(16972), + 4185: uint16(20302), + 4186: uint16(7470), + 4187: uint16(16973), + 4188: uint16(16974), + 4189: uint16(7222), + 4190: uint16(9495), + 4191: uint16(16975), + 4192: uint16(8711), + 4193: uint16(16976), + 4194: uint16(8731), + 4195: uint16(16977), + 4196: uint16(5380), + 4197: uint16(12318), + 4198: uint16(8764), + 4199: uint16(6930), + 4200: uint16(4903), + 4201: uint16(16978), + 4202: uint16(17153), + 4203: uint16(16981), + 4204: uint16(5191), + 4205: uint16(16980), + 4206: uint16(17155), + 4207: uint16(16979), + 4208: uint16(7471), + 4209: uint16(16983), + 4210: uint16(16984), + 4211: uint16(9226), + 4212: uint16(16985), + 4213: uint16(4669), + 4214: uint16(7737), + 4215: uint16(10307), + 4216: uint16(16987), + 4217: uint16(8519), + 4218: uint16(16982), + 4219: uint16(16986), + 4220: uint16(16988), + 4221: uint16(6490), + 4222: uint16(17157), + 4223: uint16(10253), + 4224: uint16(9989), + 4225: uint16(9304), + 4226: uint16(5433), + 4227: uint16(17156), + 4228: uint16(17154), + 4229: uint16(10004), + 4230: uint16(16989), + 4231: uint16(8765), + 4232: uint16(9306), + 4233: uint16(9305), + 4234: uint16(6485), + 4235: uint16(17175), + 4236: uint16(17159), + 4237: uint16(17161), + 4238: uint16(17164), + 4239: uint16(17165), + 4240: uint16(17162), + 4241: uint16(17163), + 4242: uint16(17160), + 4243: uint16(17158), + 4244: uint16(17152), + 4245: uint16(10542), + 4246: uint16(4404), + 4247: uint16(17172), + 4248: uint16(17169), + 4249: uint16(17174), + 4250: uint16(17173), + 4251: uint16(9810), + 4252: uint16(11014), + 4253: uint16(6682), + 4254: uint16(17167), + 4255: uint16(17176), + 4256: uint16(17171), + 4257: uint16(17170), + 4258: uint16(17166), + 4259: uint16(17168), + 4260: uint16(4904), + 4261: uint16(8732), + 4262: uint16(8028), + 4263: uint16(9985), + 4264: uint16(17181), + 4265: uint16(9987), + 4266: uint16(8000), + 4267: uint16(17178), + 4268: uint16(10030), + 4269: uint16(17182), + 4270: uint16(10546), + 4271: uint16(8762), + 4272: uint16(17177), + 4273: uint16(17179), + 4274: uint16(17180), + 4275: uint16(17183), + 4276: uint16(6947), + 4277: uint16(9509), + 4278: uint16(17188), + 4279: uint16(17187), + 4280: uint16(17184), + 4281: uint16(11797), + 4282: uint16(17193), + 4283: uint16(17197), + 4284: uint16(17194), + 4285: uint16(17190), + 4286: uint16(17191), + 4287: uint16(17196), + 4288: uint16(17185), + 4289: uint16(12596), + 4290: uint16(17192), + 4291: uint16(17186), + 4292: uint16(17195), + 4293: uint16(17201), + 4294: uint16(4905), + 4295: uint16(17198), + 4296: uint16(17199), + 4297: uint16(17200), + 4298: uint16(17203), + 4299: uint16(17202), + 4300: uint16(10069), + 4301: uint16(17204), + 4302: uint16(11611), + 4303: uint16(10572), + 4304: uint16(17209), + 4305: uint16(17206), + 4306: uint16(17205), + 4307: uint16(7985), + 4308: uint16(17208), + 4309: uint16(17210), + 4310: uint16(17207), + 4311: uint16(17214), + 4312: uint16(17211), + 4313: uint16(17212), + 4314: uint16(17189), + 4315: uint16(17213), + 4316: uint16(17215), + 4317: uint16(17216), + 4318: uint16(10533), + 4319: uint16(17217), + 4320: uint16(11073), + 4321: uint16(5421), + 4322: uint16(5640), + 4323: uint16(17218), + 4324: uint16(10515), + 4325: uint16(7751), + 4326: uint16(11023), + 4327: uint16(17219), + 4328: uint16(11538), + 4329: uint16(9811), + 4330: uint16(8229), + 4331: uint16(9747), + 4332: uint16(7212), + 4333: uint16(3871), + 4334: uint16(17224), + 4335: uint16(17222), + 4336: uint16(17220), + 4337: uint16(4864), + 4338: uint16(7472), + 4339: uint16(17225), + 4340: uint16(17223), + 4341: uint16(17221), + 4342: uint16(17229), + 4343: uint16(17228), + 4344: uint16(17227), + 4345: uint16(17226), + 4346: uint16(17230), + 4347: uint16(17231), + 4348: uint16(7961), + 4349: uint16(17232), + 4350: uint16(17234), + 4351: uint16(17233), + 4352: uint16(5937), + 4353: uint16(8215), + 4354: uint16(17236), + 4355: uint16(9307), + 4356: uint16(17235), + 4357: uint16(17237), + 4358: uint16(10516), + 4359: uint16(8267), + 4360: uint16(6182), + 4361: uint16(17238), + 4362: uint16(11559), + 4363: uint16(17240), + 4364: uint16(17241), + 4365: uint16(17242), + 4366: uint16(17243), + 4367: uint16(6724), + 4368: uint16(17244), + 4369: uint16(5678), + 4370: uint16(5193), + 4371: uint16(5129), + 4372: uint16(17408), + 4373: uint16(11090), + 4374: uint16(6183), + 4375: uint16(17245), + 4376: uint16(17411), + 4377: uint16(11077), + 4378: uint16(9755), + 4379: uint16(10258), + 4380: uint16(7234), + 4381: uint16(17410), + 4382: uint16(6962), + 4383: uint16(6184), + 4384: uint16(6725), + 4385: uint16(5192), + 4386: uint16(10517), + 4387: uint16(17409), + 4388: uint16(8230), + 4389: uint16(10785), + 4390: uint16(6486), + 4391: uint16(6726), + 4392: uint16(9020), + 4393: uint16(17414), + 4394: uint16(11582), + 4395: uint16(6456), + 4396: uint16(17415), + 4397: uint16(7713), + 4398: uint16(17417), + 4399: uint16(7473), + 4400: uint16(6415), + 4401: uint16(17416), + 4402: uint16(7177), + 4403: uint16(5917), + 4404: uint16(8231), + 4405: uint16(17412), + 4406: uint16(17418), + 4407: uint16(17413), + 4408: uint16(5679), + 4409: uint16(17421), + 4410: uint16(17425), + 4411: uint16(5706), + 4412: uint16(17420), + 4413: uint16(17429), + 4414: uint16(6185), + 4415: uint16(11340), + 4416: uint16(3867), + 4417: uint16(17426), + 4418: uint16(5194), + 4419: uint16(17423), + 4420: uint16(17424), + 4421: uint16(9308), + 4422: uint16(17422), + 4423: uint16(17419), + 4424: uint16(4615), + 4425: uint16(8003), + 4426: uint16(5895), + 4427: uint16(17431), + 4428: uint16(17428), + 4429: uint16(17430), + 4430: uint16(17427), + 4431: uint16(5680), + 4432: uint16(8466), + 4433: uint16(17432), + 4434: uint16(8269), + 4435: uint16(17445), + 4436: uint16(17441), + 4437: uint16(17435), + 4438: uint16(17439), + 4439: uint16(7001), + 4440: uint16(3900), + 4441: uint16(17434), + 4442: uint16(17442), + 4443: uint16(17446), + 4444: uint16(6186), + 4445: uint16(11061), + 4446: uint16(9013), + 4447: uint16(17436), + 4448: uint16(17444), + 4449: uint16(17433), + 4450: uint16(8733), + 4451: uint16(17438), + 4452: uint16(3868), + 4453: uint16(11049), + 4454: uint16(17437), + 4455: uint16(5434), + 4456: uint16(10059), + 4457: uint16(8268), + 4458: uint16(11567), + 4459: uint16(7246), + 4460: uint16(17485), + 4461: uint16(17447), + 4462: uint16(8029), + 4463: uint16(17443), + 4464: uint16(17448), + 4465: uint16(17450), + 4466: uint16(9048), + 4467: uint16(17453), + 4468: uint16(17449), + 4469: uint16(10547), + 4470: uint16(4906), + 4471: uint16(11050), + 4472: uint16(3901), + 4473: uint16(17452), + 4474: uint16(11612), + 4475: uint16(17451), + 4476: uint16(4174), + 4477: uint16(9547), + 4478: uint16(17454), + 4479: uint16(17461), + 4480: uint16(17455), + 4481: uint16(17462), + 4482: uint16(17458), + 4483: uint16(9818), + 4484: uint16(6953), + 4485: uint16(17460), + 4486: uint16(17457), + 4487: uint16(17463), + 4488: uint16(17456), + 4489: uint16(7203), + 4490: uint16(10756), + 4491: uint16(7211), + 4492: uint16(17459), + 4493: uint16(17471), + 4494: uint16(17467), + 4495: uint16(17470), + 4496: uint16(17468), + 4497: uint16(17472), + 4498: uint16(17466), + 4499: uint16(17440), + 4500: uint16(7986), + 4501: uint16(10026), + 4502: uint16(17469), + 4503: uint16(17464), + 4504: uint16(8192), + 4505: uint16(5681), + 4506: uint16(7178), + 4507: uint16(7684), + 4508: uint16(8213), + 4509: uint16(17475), + 4510: uint16(17477), + 4511: uint16(17478), + 4512: uint16(17474), + 4513: uint16(17476), + 4514: uint16(17465), + 4515: uint16(17473), + 4516: uint16(17481), + 4517: uint16(17480), + 4518: uint16(10841), + 4519: uint16(5642), + 4520: uint16(17479), + 4521: uint16(17483), + 4522: uint16(17482), + 4523: uint16(17486), + 4524: uint16(17488), + 4525: uint16(6683), + 4526: uint16(17484), + 4527: uint16(17489), + 4528: uint16(17490), + 4529: uint16(17491), + 4530: uint16(17497), + 4531: uint16(9242), + 4532: uint16(17493), + 4533: uint16(17492), + 4534: uint16(17494), + 4535: uint16(17495), + 4536: uint16(17496), + 4537: uint16(17498), + 4538: uint16(17499), + 4539: uint16(4907), + 4540: uint16(17500), + 4541: uint16(17501), + 4542: uint16(17664), + 4543: uint16(17665), + 4544: uint16(17666), + 4545: uint16(17667), + 4546: uint16(17668), + 4547: uint16(17669), + 4548: uint16(17671), + 4549: uint16(17670), + 4550: uint16(17672), + 4551: uint16(17673), + 4552: uint16(17674), + 4553: uint16(17677), + 4554: uint16(17675), + 4555: uint16(17676), + 4556: uint16(6464), + 4557: uint16(5682), + 4558: uint16(8757), + 4559: uint16(10002), + 4560: uint16(7247), + 4561: uint16(9772), + 4562: uint16(10060), + 4563: uint16(17678), + 4564: uint16(14156), + 4565: uint16(17679), + 4566: uint16(17681), + 4567: uint16(11332), + 4568: uint16(17680), + 4569: uint16(17683), + 4570: uint16(17682), + 4571: uint16(11314), + 4572: uint16(17684), + 4573: uint16(10077), + 4574: uint16(17685), + 4575: uint16(17688), + 4576: uint16(17687), + 4577: uint16(17686), + 4578: uint16(17689), + 4579: uint16(5649), + 4580: uint16(8193), + 4581: uint16(5152), + 4582: uint16(17693), + 4583: uint16(17690), + 4584: uint16(17691), + 4585: uint16(17694), + 4586: uint16(17695), + 4587: uint16(17692), + 4588: uint16(4104), + 4589: uint16(4358), + 4590: uint16(17697), + 4591: uint16(17698), + 4592: uint16(17699), + 4593: uint16(11329), + 4594: uint16(7179), + 4595: uint16(17701), + 4596: uint16(17700), + 4597: uint16(7752), + 4598: uint16(17702), + 4599: uint16(17703), + 4600: uint16(17704), + 4601: uint16(4932), + 4602: uint16(4908), + 4603: uint16(17705), + 4604: uint16(17706), + 4605: uint16(10812), + 4606: uint16(11330), + 4607: uint16(11315), + 4608: uint16(11798), + 4609: uint16(6188), + 4610: uint16(17709), + 4611: uint16(6963), + 4612: uint16(17708), + 4613: uint16(17710), + 4614: uint16(6920), + 4615: uint16(8496), + 4616: uint16(17711), + 4617: uint16(6187), + 4618: uint16(11062), + 4619: uint16(17712), + 4620: uint16(17713), + 4621: uint16(17714), + 4622: uint16(17715), + 4623: uint16(17716), + 4624: uint16(6921), + 4625: uint16(11084), + 4626: uint16(17718), + 4627: uint16(8734), + 4628: uint16(17717), + 4629: uint16(17720), + 4630: uint16(17719), + 4631: uint16(17721), + 4632: uint16(7962), + 4633: uint16(17722), + 4634: uint16(17723), + 4635: uint16(10520), + 4636: uint16(17724), + 4637: uint16(8270), + 4638: uint16(17725), + 4639: uint16(17726), + 4640: uint16(11613), + 4641: uint16(17729), + 4642: uint16(17728), + 4643: uint16(17727), + 4644: uint16(8975), + 4645: uint16(17730), + 4646: uint16(7685), + 4647: uint16(17731), + 4648: uint16(17732), + 4649: uint16(11799), + 4650: uint16(17733), + 4651: uint16(17734), + 4652: uint16(17736), + 4653: uint16(17735), + 4654: uint16(9988), + 4655: uint16(9560), + 4656: uint16(11805), + 4657: uint16(9992), + 4658: uint16(17738), + 4659: uint16(7474), + 4660: uint16(10249), + 4661: uint16(17739), + 4662: uint16(17737), + 4663: uint16(4909), + 4664: uint16(5939), + 4665: uint16(6727), + 4666: uint16(10061), + 4667: uint16(5897), + 4668: uint16(10786), + 4669: uint16(17742), + 4670: uint16(17740), + 4671: uint16(6189), + 4672: uint16(6190), + 4673: uint16(3912), + 4674: uint16(6471), + 4675: uint16(9784), + 4676: uint16(3902), + 4677: uint16(17747), + 4678: uint16(8735), + 4679: uint16(9783), + 4680: uint16(8506), + 4681: uint16(17749), + 4682: uint16(17745), + 4683: uint16(17748), + 4684: uint16(17743), + 4685: uint16(17746), + 4686: uint16(10757), + 4687: uint16(5940), + 4688: uint16(3932), + 4689: uint16(17744), + 4690: uint16(17751), + 4691: uint16(17752), + 4692: uint16(9496), + 4693: uint16(5402), + 4694: uint16(17925), + 4695: uint16(9756), + 4696: uint16(6728), + 4697: uint16(5403), + 4698: uint16(7975), + 4699: uint16(11813), + 4700: uint16(11021), + 4701: uint16(17750), + 4702: uint16(7987), + 4703: uint16(5170), + 4704: uint16(17753), + 4705: uint16(17755), + 4706: uint16(17754), + 4707: uint16(17756), + 4708: uint16(8709), + 4709: uint16(9757), + 4710: uint16(8976), + 4711: uint16(17922), + 4712: uint16(17921), + 4713: uint16(17757), + 4714: uint16(7732), + 4715: uint16(10308), + 4716: uint16(17924), + 4717: uint16(17923), + 4718: uint16(6191), + 4719: uint16(11826), + 4720: uint16(17940), + 4721: uint16(17928), + 4722: uint16(17929), + 4723: uint16(6991), + 4724: uint16(17927), + 4725: uint16(6231), + 4726: uint16(17926), + 4727: uint16(17930), + 4728: uint16(8977), + 4729: uint16(10497), + 4730: uint16(8194), + 4731: uint16(8507), + 4732: uint16(17934), + 4733: uint16(17935), + 4734: uint16(17931), + 4735: uint16(17932), + 4736: uint16(17933), + 4737: uint16(6192), + 4738: uint16(17941), + 4739: uint16(17937), + 4740: uint16(10309), + 4741: uint16(10827), + 4742: uint16(10247), + 4743: uint16(17936), + 4744: uint16(17939), + 4745: uint16(17938), + 4746: uint16(10787), + 4747: uint16(17942), + 4748: uint16(17943), + 4749: uint16(8214), + 4750: uint16(17944), + 4751: uint16(17946), + 4752: uint16(17950), + 4753: uint16(17947), + 4754: uint16(17945), + 4755: uint16(9758), + 4756: uint16(17948), + 4757: uint16(17949), + 4758: uint16(4369), + 4759: uint16(17956), + 4760: uint16(17951), + 4761: uint16(17952), + 4762: uint16(17953), + 4763: uint16(8448), + 4764: uint16(17955), + 4765: uint16(17954), + 4766: uint16(17957), + 4767: uint16(17958), + 4768: uint16(17959), + 4769: uint16(7714), + 4770: uint16(4424), + 4771: uint16(17960), + 4772: uint16(11574), + 4773: uint16(6922), + 4774: uint16(7180), + 4775: uint16(6729), + 4776: uint16(8758), + 4777: uint16(17961), + 4778: uint16(17962), + 4779: uint16(4112), + 4780: uint16(17963), + 4781: uint16(17964), + 4782: uint16(17965), + 4783: uint16(17966), + 4784: uint16(17967), + 4785: uint16(5404), + 4786: uint16(14601), + 4787: uint16(17968), + 4788: uint16(8004), + 4789: uint16(17969), + 4790: uint16(6954), + 4791: uint16(17970), + 4792: uint16(12047), + 4793: uint16(17971), + 4794: uint16(10557), + 4795: uint16(4923), + 4796: uint16(8195), + 4797: uint16(7223), + 4798: uint16(10320), + 4799: uint16(7181), + 4800: uint16(17972), + 4801: uint16(6193), + 4802: uint16(17973), + 4803: uint16(10027), + 4804: uint16(17987), + 4805: uint16(17975), + 4806: uint16(8488), + 4807: uint16(9812), + 4808: uint16(5918), + 4809: uint16(17974), + 4810: uint16(8196), + 4811: uint16(17976), + 4812: uint16(9049), + 4813: uint16(17978), + 4814: uint16(17977), + 4815: uint16(17980), + 4816: uint16(17979), + 4817: uint16(17981), + 4818: uint16(17983), + 4819: uint16(17982), + 4820: uint16(4910), + 4821: uint16(17984), + 4822: uint16(17985), + 4823: uint16(17986), + 4824: uint16(6416), + 4825: uint16(11560), + 4826: uint16(17988), + 4827: uint16(7686), + 4828: uint16(4175), + 4829: uint16(17989), + 4830: uint16(17990), + 4831: uint16(17991), + 4832: uint16(3921), + 4833: uint16(17992), + 4834: uint16(17993), + 4835: uint16(10310), + 4836: uint16(6950), + 4837: uint16(17995), + 4838: uint16(4616), + 4839: uint16(3857), + 4840: uint16(17994), + 4841: uint16(17997), + 4842: uint16(9773), + 4843: uint16(7715), + 4844: uint16(4405), + 4845: uint16(10758), + 4846: uint16(5692), + 4847: uint16(5435), + 4848: uint16(17996), + 4849: uint16(4425), + 4850: uint16(4866), + 4851: uint16(4176), + 4852: uint16(18001), + 4853: uint16(11593), + 4854: uint16(8508), + 4855: uint16(10275), + 4856: uint16(18013), + 4857: uint16(4406), + 4858: uint16(18011), + 4859: uint16(18009), + 4860: uint16(18000), + 4861: uint16(17998), + 4862: uint16(17999), + 4863: uint16(6978), + 4864: uint16(5451), + 4865: uint16(8790), + 4866: uint16(9520), + 4867: uint16(4144), + 4868: uint16(18003), + 4869: uint16(18002), + 4870: uint16(18008), + 4871: uint16(18004), + 4872: uint16(18007), + 4873: uint16(11055), + 4874: uint16(18006), + 4875: uint16(4407), + 4876: uint16(4700), + 4877: uint16(18010), + 4878: uint16(18012), + 4879: uint16(5683), + 4880: uint16(18178), + 4881: uint16(18187), + 4882: uint16(18188), + 4883: uint16(3850), + 4884: uint16(18195), + 4885: uint16(3920), + 4886: uint16(18186), + 4887: uint16(18185), + 4888: uint16(18180), + 4889: uint16(18179), + 4890: uint16(18177), + 4891: uint16(18176), + 4892: uint16(8770), + 4893: uint16(8538), + 4894: uint16(18182), + 4895: uint16(18181), + 4896: uint16(18184), + 4897: uint16(8271), + 4898: uint16(5684), + 4899: uint16(4128), + 4900: uint16(18183), + 4901: uint16(6194), + 4902: uint16(8272), + 4903: uint16(18201), + 4904: uint16(18202), + 4905: uint16(4408), + 4906: uint16(4365), + 4907: uint16(18199), + 4908: uint16(18189), + 4909: uint16(18197), + 4910: uint16(18204), + 4911: uint16(18198), + 4912: uint16(18196), + 4913: uint16(18005), + 4914: uint16(18194), + 4915: uint16(18190), + 4916: uint16(4911), + 4917: uint16(18192), + 4918: uint16(18203), + 4919: uint16(18193), + 4920: uint16(18205), + 4921: uint16(18191), + 4922: uint16(9819), + 4923: uint16(11336), + 4924: uint16(18200), + 4925: uint16(18222), + 4926: uint16(18214), + 4927: uint16(7770), + 4928: uint16(5157), + 4929: uint16(5436), + 4930: uint16(18209), + 4931: uint16(4410), + 4932: uint16(7475), + 4933: uint16(18212), + 4934: uint16(6457), + 4935: uint16(9264), + 4936: uint16(18217), + 4937: uint16(10573), + 4938: uint16(18208), + 4939: uint16(4409), + 4940: uint16(5941), + 4941: uint16(10248), + 4942: uint16(18218), + 4943: uint16(18206), + 4944: uint16(18215), + 4945: uint16(18225), + 4946: uint16(18210), + 4947: uint16(18211), + 4948: uint16(9497), + 4949: uint16(18216), + 4950: uint16(18213), + 4951: uint16(10759), + 4952: uint16(18219), + 4953: uint16(3903), + 4954: uint16(18207), + 4955: uint16(18221), + 4956: uint16(18220), + 4957: uint16(9802), + 4958: uint16(18227), + 4959: uint16(18238), + 4960: uint16(4701), + 4961: uint16(18241), + 4962: uint16(18223), + 4963: uint16(18228), + 4964: uint16(11341), + 4965: uint16(18237), + 4966: uint16(11316), + 4967: uint16(11529), + 4968: uint16(8791), + 4969: uint16(4682), + 4970: uint16(10321), + 4971: uint16(18243), + 4972: uint16(9472), + 4973: uint16(3856), + 4974: uint16(18236), + 4975: uint16(18232), + 4976: uint16(8273), + 4977: uint16(18226), + 4978: uint16(18234), + 4979: uint16(18239), + 4980: uint16(9739), + 4981: uint16(3849), + 4982: uint16(18231), + 4983: uint16(18240), + 4984: uint16(10327), + 4985: uint16(18235), + 4986: uint16(18230), + 4987: uint16(7476), + 4988: uint16(7182), + 4989: uint16(6923), + 4990: uint16(11063), + 4991: uint16(10278), + 4992: uint16(18246), + 4993: uint16(18255), + 4994: uint16(18233), + 4995: uint16(4694), + 4996: uint16(7511), + 4997: uint16(18244), + 4998: uint16(18249), + 4999: uint16(8274), + 5000: uint16(18245), + 5001: uint16(18252), + 5002: uint16(8766), + 5003: uint16(18253), + 5004: uint16(11317), + 5005: uint16(18242), + 5006: uint16(4631), + 5007: uint16(18248), + 5008: uint16(18251), + 5009: uint16(11019), + 5010: uint16(18254), + 5011: uint16(18247), + 5012: uint16(18250), + 5013: uint16(10760), + 5014: uint16(11776), + 5015: uint16(18258), + 5016: uint16(18265), + 5017: uint16(18257), + 5018: uint16(6946), + 5019: uint16(18224), + 5020: uint16(10541), + 5021: uint16(11009), + 5022: uint16(18264), + 5023: uint16(18263), + 5024: uint16(18259), + 5025: uint16(18260), + 5026: uint16(4117), + 5027: uint16(18262), + 5028: uint16(18256), + 5029: uint16(9012), + 5030: uint16(18261), + 5031: uint16(3933), + 5032: uint16(8449), + 5033: uint16(10530), + 5034: uint16(18266), + 5035: uint16(18432), + 5036: uint16(10040), + 5037: uint16(18269), + 5038: uint16(7477), + 5039: uint16(6952), + 5040: uint16(18434), + 5041: uint16(5405), + 5042: uint16(18435), + 5043: uint16(10328), + 5044: uint16(18268), + 5045: uint16(18229), + 5046: uint16(18267), + 5047: uint16(11822), + 5048: uint16(9473), + 5049: uint16(10322), + 5050: uint16(18442), + 5051: uint16(18448), + 5052: uint16(18449), + 5053: uint16(18436), + 5054: uint16(9813), + 5055: uint16(18446), + 5056: uint16(18438), + 5057: uint16(18440), + 5058: uint16(18450), + 5059: uint16(18439), + 5060: uint16(18443), + 5061: uint16(4177), + 5062: uint16(9540), + 5063: uint16(18444), + 5064: uint16(18447), + 5065: uint16(18437), + 5066: uint16(8197), + 5067: uint16(18441), + 5068: uint16(6662), + 5069: uint16(7716), + 5070: uint16(5647), + 5071: uint16(11091), + 5072: uint16(11096), + 5073: uint16(7249), + 5074: uint16(18454), + 5075: uint16(18452), + 5076: uint16(11821), + 5077: uint16(18451), + 5078: uint16(11348), + 5079: uint16(18453), + 5080: uint16(18455), + 5081: uint16(18456), + 5082: uint16(18459), + 5083: uint16(18457), + 5084: uint16(9474), + 5085: uint16(18458), + 5086: uint16(10028), + 5087: uint16(18445), + 5088: uint16(7250), + 5089: uint16(18460), + 5090: uint16(18465), + 5091: uint16(8275), + 5092: uint16(18464), + 5093: uint16(18433), + 5094: uint16(18466), + 5095: uint16(8232), + 5096: uint16(18461), + 5097: uint16(18463), + 5098: uint16(18462), + 5099: uint16(15376), + 5100: uint16(15361), + 5101: uint16(18468), + 5102: uint16(18467), + 5103: uint16(11349), + 5104: uint16(16667), + 5105: uint16(18469), + 5106: uint16(18470), + 5107: uint16(18471), + 5108: uint16(5942), + 5109: uint16(5171), + 5110: uint16(18473), + 5111: uint16(12348), + 5112: uint16(5204), + 5113: uint16(11545), + 5114: uint16(5458), + 5115: uint16(18474), + 5116: uint16(18475), + 5117: uint16(8781), + 5118: uint16(18476), + 5119: uint16(9561), + 5120: uint16(3865), + 5121: uint16(4418), + 5122: uint16(18481), + 5123: uint16(18482), + 5124: uint16(18477), + 5125: uint16(6684), + 5126: uint16(18478), + 5127: uint16(9761), + 5128: uint16(18479), + 5129: uint16(18480), + 5130: uint16(18490), + 5131: uint16(18484), + 5132: uint16(18487), + 5133: uint16(18483), + 5134: uint16(18485), + 5135: uint16(18486), + 5136: uint16(6967), + 5137: uint16(18488), + 5138: uint16(8736), + 5139: uint16(5685), + 5140: uint16(4641), + 5141: uint16(18491), + 5142: uint16(4638), + 5143: uint16(18496), + 5144: uint16(18492), + 5145: uint16(18495), + 5146: uint16(10009), + 5147: uint16(18493), + 5148: uint16(18494), + 5149: uint16(10279), + 5150: uint16(10041), + 5151: uint16(18497), + 5152: uint16(8540), + 5153: uint16(18507), + 5154: uint16(18503), + 5155: uint16(4426), + 5156: uint16(18501), + 5157: uint16(10761), + 5158: uint16(18502), + 5159: uint16(18499), + 5160: uint16(18500), + 5161: uint16(18505), + 5162: uint16(18508), + 5163: uint16(18506), + 5164: uint16(18504), + 5165: uint16(18498), + 5166: uint16(8759), + 5167: uint16(18515), + 5168: uint16(11017), + 5169: uint16(18513), + 5170: uint16(18514), + 5171: uint16(18509), + 5172: uint16(18511), + 5173: uint16(18512), + 5174: uint16(18510), + 5175: uint16(8005), + 5176: uint16(11800), + 5177: uint16(18519), + 5178: uint16(18520), + 5179: uint16(18688), + 5180: uint16(7689), + 5181: uint16(18522), + 5182: uint16(18525), + 5183: uint16(18517), + 5184: uint16(18516), + 5185: uint16(18689), + 5186: uint16(4411), + 5187: uint16(18523), + 5188: uint16(18690), + 5189: uint16(18524), + 5190: uint16(18521), + 5191: uint16(8978), + 5192: uint16(18518), + 5193: uint16(9799), + 5194: uint16(18694), + 5195: uint16(11290), + 5196: uint16(18693), + 5197: uint16(18692), + 5198: uint16(18701), + 5199: uint16(18695), + 5200: uint16(18703), + 5201: uint16(11333), + 5202: uint16(18706), + 5203: uint16(18697), + 5204: uint16(18698), + 5205: uint16(18702), + 5206: uint16(18705), + 5207: uint16(18704), + 5208: uint16(18696), + 5209: uint16(18699), + 5210: uint16(18716), + 5211: uint16(18709), + 5212: uint16(18707), + 5213: uint16(18708), + 5214: uint16(18713), + 5215: uint16(18714), + 5216: uint16(4617), + 5217: uint16(5153), + 5218: uint16(18712), + 5219: uint16(18691), + 5220: uint16(18711), + 5221: uint16(18715), + 5222: uint16(18710), + 5223: uint16(18717), + 5224: uint16(18719), + 5225: uint16(18718), + 5226: uint16(18721), + 5227: uint16(18720), + 5228: uint16(18489), + 5229: uint16(18725), + 5230: uint16(18722), + 5231: uint16(18723), + 5232: uint16(18724), + 5233: uint16(18726), + 5234: uint16(5707), + 5235: uint16(18728), + 5236: uint16(18727), + 5237: uint16(7183), + 5238: uint16(6195), + 5239: uint16(15622), + 5240: uint16(18729), + 5241: uint16(7216), + 5242: uint16(4632), + 5243: uint16(18730), + 5244: uint16(4145), + 5245: uint16(7478), + 5246: uint16(18731), + 5247: uint16(6196), + 5248: uint16(18732), + 5249: uint16(3904), + 5250: uint16(10268), + 5251: uint16(18733), + 5252: uint16(7753), + 5253: uint16(18740), + 5254: uint16(18737), + 5255: uint16(8782), + 5256: uint16(18738), + 5257: uint16(18735), + 5258: uint16(5437), + 5259: uint16(18734), + 5260: uint16(18741), + 5261: uint16(5653), + 5262: uint16(8509), + 5263: uint16(18747), + 5264: uint16(18743), + 5265: uint16(8468), + 5266: uint16(18742), + 5267: uint16(18745), + 5268: uint16(18736), + 5269: uint16(18746), + 5270: uint16(18748), + 5271: uint16(10062), + 5272: uint16(18744), + 5273: uint16(18749), + 5274: uint16(18751), + 5275: uint16(5938), + 5276: uint16(18739), + 5277: uint16(3872), + 5278: uint16(18750), + 5279: uint16(6458), + 5280: uint16(11605), + 5281: uint16(18752), + 5282: uint16(18753), + 5283: uint16(8276), + 5284: uint16(11521), + 5285: uint16(18754), + 5286: uint16(11284), + 5287: uint16(18755), + 5288: uint16(18756), + 5289: uint16(10563), + 5290: uint16(18757), + 5291: uint16(6431), + 5292: uint16(11522), + 5293: uint16(18762), + 5294: uint16(18763), + 5295: uint16(7479), + 5296: uint16(18761), + 5297: uint16(11334), + 5298: uint16(18758), + 5299: uint16(18760), + 5300: uint16(7964), + 5301: uint16(7773), + 5302: uint16(18759), + 5303: uint16(18764), + 5304: uint16(10498), + 5305: uint16(18766), + 5306: uint16(18765), + 5307: uint16(4683), + 5308: uint16(10762), + 5309: uint16(18767), + 5310: uint16(18779), + 5311: uint16(18769), + 5312: uint16(18770), + 5313: uint16(18771), + 5314: uint16(18772), + 5315: uint16(18776), + 5316: uint16(18777), + 5317: uint16(18775), + 5318: uint16(18773), + 5319: uint16(18768), + 5320: uint16(18774), + 5321: uint16(18778), + 5322: uint16(20246), + 5323: uint16(4359), + 5324: uint16(18781), + 5325: uint16(5438), + 5326: uint16(18780), + 5327: uint16(18945), + 5328: uint16(18944), + 5329: uint16(18947), + 5330: uint16(18946), + 5331: uint16(18948), + 5332: uint16(7184), + 5333: uint16(18949), + 5334: uint16(18950), + 5335: uint16(18951), + 5336: uint16(7965), + 5337: uint16(11318), + 5338: uint16(18952), + 5339: uint16(10499), + 5340: uint16(9765), + 5341: uint16(18953), + 5342: uint16(18954), + 5343: uint16(5898), + 5344: uint16(5131), + 5345: uint16(18955), + 5346: uint16(6730), + 5347: uint16(9760), + 5348: uint16(18956), + 5349: uint16(4655), + 5350: uint16(18957), + 5351: uint16(18959), + 5352: uint16(11350), + 5353: uint16(18958), + 5354: uint16(7717), + 5355: uint16(18960), + 5356: uint16(18961), + 5357: uint16(18962), + 5358: uint16(4912), + 5359: uint16(18963), + 5360: uint16(18964), + 5361: uint16(18965), + 5362: uint16(18966), + 5363: uint16(4656), + 5364: uint16(18967), + 5365: uint16(18968), + 5366: uint16(18969), + 5367: uint16(4433), + 5368: uint16(7687), + 5369: uint16(18970), + 5370: uint16(18971), + 5371: uint16(18972), + 5372: uint16(5919), + 5373: uint16(9050), + 5374: uint16(18973), + 5375: uint16(5686), + 5376: uint16(7733), + 5377: uint16(18976), + 5378: uint16(9475), + 5379: uint16(18975), + 5380: uint16(5648), + 5381: uint16(18974), + 5382: uint16(8534), + 5383: uint16(5132), + 5384: uint16(18977), + 5385: uint16(18978), + 5386: uint16(7480), + 5387: uint16(5708), + 5388: uint16(18979), + 5389: uint16(10763), + 5390: uint16(7998), + 5391: uint16(5205), + 5392: uint16(11092), + 5393: uint16(8233), + 5394: uint16(18980), + 5395: uint16(7718), + 5396: uint16(8783), + 5397: uint16(7481), + 5398: uint16(18981), + 5399: uint16(18984), + 5400: uint16(18985), + 5401: uint16(6429), + 5402: uint16(8481), + 5403: uint16(18983), + 5404: uint16(7482), + 5405: uint16(10269), + 5406: uint16(18982), + 5407: uint16(6731), + 5408: uint16(4146), + 5409: uint16(18989), + 5410: uint16(5687), + 5411: uint16(6733), + 5412: uint16(6732), + 5413: uint16(11820), + 5414: uint16(18988), + 5415: uint16(18987), + 5416: uint16(8198), + 5417: uint16(5164), + 5418: uint16(11810), + 5419: uint16(4633), + 5420: uint16(7483), + 5421: uint16(18986), + 5422: uint16(18991), + 5423: uint16(18992), + 5424: uint16(18990), + 5425: uint16(5943), + 5426: uint16(11295), + 5427: uint16(6734), + 5428: uint16(9734), + 5429: uint16(18995), + 5430: uint16(7967), + 5431: uint16(8737), + 5432: uint16(11285), + 5433: uint16(18998), + 5434: uint16(5963), + 5435: uint16(7966), + 5436: uint16(18994), + 5437: uint16(18999), + 5438: uint16(5964), + 5439: uint16(18996), + 5440: uint16(18997), + 5441: uint16(18993), + 5442: uint16(8001), + 5443: uint16(9512), + 5444: uint16(8718), + 5445: uint16(4412), + 5446: uint16(10063), + 5447: uint16(5154), + 5448: uint16(8979), + 5449: uint16(19002), + 5450: uint16(19000), + 5451: uint16(8747), + 5452: uint16(7968), + 5453: uint16(4913), + 5454: uint16(19001), + 5455: uint16(7738), + 5456: uint16(11561), + 5457: uint16(11807), + 5458: uint16(19003), + 5459: uint16(19014), + 5460: uint16(8980), + 5461: uint16(19013), + 5462: uint16(19010), + 5463: uint16(19018), + 5464: uint16(19011), + 5465: uint16(19007), + 5466: uint16(9051), + 5467: uint16(19006), + 5468: uint16(19004), + 5469: uint16(11264), + 5470: uint16(6735), + 5471: uint16(19008), + 5472: uint16(19005), + 5473: uint16(19012), + 5474: uint16(7251), + 5475: uint16(5920), + 5476: uint16(8537), + 5477: uint16(10788), + 5478: uint16(4153), + 5479: uint16(3905), + 5480: uint16(9476), + 5481: uint16(19016), + 5482: uint16(19015), + 5483: uint16(9541), + 5484: uint16(19020), + 5485: uint16(19009), + 5486: uint16(19019), + 5487: uint16(19021), + 5488: uint16(5899), + 5489: uint16(19017), + 5490: uint16(6197), + 5491: uint16(6964), + 5492: uint16(19022), + 5493: uint16(11319), + 5494: uint16(19025), + 5495: uint16(19028), + 5496: uint16(19026), + 5497: uint16(10260), + 5498: uint16(19023), + 5499: uint16(5439), + 5500: uint16(19027), + 5501: uint16(19029), + 5502: uint16(19033), + 5503: uint16(19030), + 5504: uint16(19032), + 5505: uint16(19031), + 5506: uint16(19034), + 5507: uint16(6928), + 5508: uint16(19036), + 5509: uint16(19035), + 5510: uint16(10311), + 5511: uint16(19200), + 5512: uint16(5688), + 5513: uint16(19037), + 5514: uint16(19201), + 5515: uint16(19202), + 5516: uint16(5155), + 5517: uint16(17696), + 5518: uint16(7512), + 5519: uint16(19203), + 5520: uint16(5965), + 5521: uint16(19204), + 5522: uint16(19205), + 5523: uint16(6685), + 5524: uint16(14637), + 5525: uint16(19206), + 5526: uint16(19207), + 5527: uint16(7185), + 5528: uint16(19208), + 5529: uint16(19209), + 5530: uint16(19210), + 5531: uint16(19211), + 5532: uint16(19212), + 5533: uint16(8714), + 5534: uint16(19213), + 5535: uint16(19215), + 5536: uint16(19214), + 5537: uint16(9477), + 5538: uint16(19216), + 5539: uint16(10764), + 5540: uint16(19217), + 5541: uint16(19218), + 5542: uint16(19219), + 5543: uint16(19220), + 5544: uint16(9529), + 5545: uint16(7484), + 5546: uint16(19221), + 5547: uint16(6218), + 5548: uint16(12045), + 5549: uint16(19222), + 5550: uint16(19223), + 5551: uint16(10270), + 5552: uint16(19224), + 5553: uint16(19232), + 5554: uint16(19225), + 5555: uint16(19227), + 5556: uint16(19226), + 5557: uint16(19228), + 5558: uint16(10789), + 5559: uint16(19229), + 5560: uint16(19230), + 5561: uint16(19231), + 5562: uint16(19233), + 5563: uint16(4620), + 5564: uint16(9030), + 5565: uint16(10312), + 5566: uint16(6465), + 5567: uint16(6198), + 5568: uint16(10286), + 5569: uint16(4414), + 5570: uint16(10029), + 5571: uint16(19236), + 5572: uint16(4914), + 5573: uint16(7988), + 5574: uint16(19235), + 5575: uint16(19240), + 5576: uint16(8792), + 5577: uint16(11074), + 5578: uint16(19238), + 5579: uint16(19239), + 5580: uint16(5133), + 5581: uint16(19241), + 5582: uint16(9794), + 5583: uint16(8510), + 5584: uint16(10064), + 5585: uint16(9244), + 5586: uint16(19237), + 5587: uint16(10790), + 5588: uint16(4427), + 5589: uint16(19243), + 5590: uint16(11783), + 5591: uint16(8993), + 5592: uint16(11812), + 5593: uint16(6736), + 5594: uint16(19242), + 5595: uint16(8464), + 5596: uint16(19259), + 5597: uint16(8199), + 5598: uint16(9559), + 5599: uint16(10287), + 5600: uint16(19246), + 5601: uint16(6686), + 5602: uint16(6737), + 5603: uint16(7485), + 5604: uint16(9796), + 5605: uint16(5900), + 5606: uint16(19245), + 5607: uint16(19244), + 5608: uint16(10313), + 5609: uint16(6944), + 5610: uint16(9265), + 5611: uint16(19248), + 5612: uint16(19249), + 5613: uint16(6199), + 5614: uint16(19247), + 5615: uint16(19250), + 5616: uint16(19251), + 5617: uint16(19253), + 5618: uint16(8450), + 5619: uint16(19252), + 5620: uint16(4933), + 5621: uint16(19255), + 5622: uint16(19254), + 5623: uint16(19256), + 5624: uint16(19258), + 5625: uint16(19260), + 5626: uint16(19261), + 5627: uint16(7989), + 5628: uint16(6958), + 5629: uint16(19262), + 5630: uint16(4657), + 5631: uint16(19263), + 5632: uint16(8277), + 5633: uint16(19264), + 5634: uint16(19265), + 5635: uint16(10314), + 5636: uint16(5134), + 5637: uint16(19266), + 5638: uint16(8981), + 5639: uint16(4154), + 5640: uint16(19267), + 5641: uint16(6992), + 5642: uint16(7765), + 5643: uint16(8460), + 5644: uint16(19270), + 5645: uint16(19269), + 5646: uint16(19268), + 5647: uint16(19276), + 5648: uint16(19274), + 5649: uint16(19271), + 5650: uint16(19273), + 5651: uint16(19272), + 5652: uint16(19275), + 5653: uint16(5206), + 5654: uint16(19279), + 5655: uint16(7990), + 5656: uint16(19280), + 5657: uint16(5944), + 5658: uint16(19277), + 5659: uint16(19278), + 5660: uint16(11784), + 5661: uint16(8982), + 5662: uint16(8200), + 5663: uint16(19281), + 5664: uint16(19284), + 5665: uint16(19282), + 5666: uint16(19283), + 5667: uint16(11320), + 5668: uint16(9478), + 5669: uint16(19287), + 5670: uint16(19285), + 5671: uint16(19286), + 5672: uint16(19288), + 5673: uint16(19464), + 5674: uint16(19291), + 5675: uint16(19292), + 5676: uint16(19290), + 5677: uint16(19289), + 5678: uint16(9052), + 5679: uint16(19456), + 5680: uint16(19460), + 5681: uint16(19457), + 5682: uint16(19293), + 5683: uint16(19458), + 5684: uint16(19459), + 5685: uint16(19466), + 5686: uint16(19461), + 5687: uint16(7991), + 5688: uint16(19463), + 5689: uint16(19465), + 5690: uint16(19462), + 5691: uint16(19468), + 5692: uint16(7186), + 5693: uint16(19467), + 5694: uint16(19469), + 5695: uint16(19470), + 5696: uint16(19473), + 5697: uint16(19472), + 5698: uint16(19471), + 5699: uint16(19475), + 5700: uint16(19474), + 5701: uint16(11093), + 5702: uint16(19477), + 5703: uint16(19476), + 5704: uint16(19478), + 5705: uint16(19479), + 5706: uint16(19481), + 5707: uint16(19480), + 5708: uint16(7719), + 5709: uint16(19482), + 5710: uint16(5452), + 5711: uint16(19483), + 5712: uint16(19485), + 5713: uint16(19486), + 5714: uint16(19487), + 5715: uint16(19484), + 5716: uint16(19488), + 5717: uint16(6965), + 5718: uint16(19489), + 5719: uint16(5135), + 5720: uint16(5650), + 5721: uint16(5901), + 5722: uint16(19490), + 5723: uint16(9551), + 5724: uint16(9245), + 5725: uint16(19491), + 5726: uint16(19494), + 5727: uint16(6931), + 5728: uint16(19493), + 5729: uint16(19492), + 5730: uint16(5689), + 5731: uint16(19495), + 5732: uint16(4658), + 5733: uint16(19497), + 5734: uint16(6459), + 5735: uint16(19496), + 5736: uint16(19505), + 5737: uint16(19499), + 5738: uint16(19501), + 5739: uint16(10564), + 5740: uint16(19498), + 5741: uint16(19500), + 5742: uint16(19504), + 5743: uint16(19502), + 5744: uint16(5136), + 5745: uint16(19503), + 5746: uint16(19506), + 5747: uint16(9785), + 5748: uint16(11575), + 5749: uint16(7187), + 5750: uint16(19507), + 5751: uint16(11265), + 5752: uint16(19509), + 5753: uint16(19508), + 5754: uint16(19512), + 5755: uint16(11296), + 5756: uint16(19511), + 5757: uint16(4684), + 5758: uint16(19510), + 5759: uint16(19515), + 5760: uint16(19514), + 5761: uint16(19513), + 5762: uint16(9233), + 5763: uint16(19516), + 5764: uint16(19517), + 5765: uint16(19518), + 5766: uint16(6219), + 5767: uint16(5636), + 5768: uint16(19519), + 5769: uint16(19520), + 5770: uint16(19521), + 5771: uint16(7720), + 5772: uint16(19522), + 5773: uint16(6924), + 5774: uint16(19523), + 5775: uint16(19524), + 5776: uint16(12544), + 5777: uint16(12381), + 5778: uint16(19525), + 5779: uint16(17487), + 5780: uint16(19526), + 5781: uint16(8707), + 5782: uint16(7690), + 5783: uint16(9759), + 5784: uint16(19527), + 5785: uint16(10548), + 5786: uint16(9011), + 5787: uint16(6237), + 5788: uint16(8712), + 5789: uint16(4105), + 5790: uint16(10839), + 5791: uint16(7734), + 5792: uint16(5693), + 5793: uint16(5440), + 5794: uint16(10549), + 5795: uint16(19528), + 5796: uint16(19530), + 5797: uint16(19529), + 5798: uint16(4415), + 5799: uint16(9557), + 5800: uint16(19531), + 5801: uint16(9814), + 5802: uint16(9234), + 5803: uint16(19532), + 5804: uint16(7217), + 5805: uint16(19534), + 5806: uint16(11041), + 5807: uint16(19549), + 5808: uint16(19536), + 5809: uint16(19537), + 5810: uint16(9000), + 5811: uint16(8511), + 5812: uint16(8278), + 5813: uint16(9479), + 5814: uint16(19535), + 5815: uint16(5172), + 5816: uint16(19544), + 5817: uint16(19541), + 5818: uint16(19716), + 5819: uint16(9480), + 5820: uint16(8767), + 5821: uint16(19538), + 5822: uint16(9053), + 5823: uint16(9266), + 5824: uint16(19539), + 5825: uint16(19543), + 5826: uint16(7743), + 5827: uint16(9798), + 5828: uint16(9003), + 5829: uint16(7969), + 5830: uint16(19542), + 5831: uint16(8461), + 5832: uint16(8451), + 5833: uint16(19540), + 5834: uint16(3848), + 5835: uint16(11777), + 5836: uint16(19545), + 5837: uint16(8512), + 5838: uint16(7188), + 5839: uint16(7721), + 5840: uint16(19547), + 5841: uint16(19546), + 5842: uint16(3918), + 5843: uint16(19548), + 5844: uint16(10254), + 5845: uint16(19718), + 5846: uint16(9530), + 5847: uint16(7754), + 5848: uint16(8760), + 5849: uint16(5463), + 5850: uint16(19717), + 5851: uint16(11286), + 5852: uint16(4126), + 5853: uint16(10550), + 5854: uint16(4416), + 5855: uint16(19712), + 5856: uint16(19713), + 5857: uint16(19714), + 5858: uint16(19715), + 5859: uint16(9498), + 5860: uint16(8706), + 5861: uint16(3906), + 5862: uint16(19719), + 5863: uint16(19720), + 5864: uint16(21250), + 5865: uint16(8476), + 5866: uint16(19721), + 5867: uint16(4178), + 5868: uint16(8235), + 5869: uint16(5902), + 5870: uint16(11321), + 5871: uint16(19722), + 5872: uint16(9227), + 5873: uint16(8279), + 5874: uint16(6966), + 5875: uint16(19723), + 5876: uint16(19726), + 5877: uint16(7236), + 5878: uint16(19724), + 5879: uint16(8202), + 5880: uint16(8201), + 5881: uint16(3907), + 5882: uint16(11562), + 5883: uint16(19728), + 5884: uint16(10065), + 5885: uint16(19730), + 5886: uint16(19729), + 5887: uint16(19727), + 5888: uint16(16963), + 5889: uint16(4915), + 5890: uint16(19533), + 5891: uint16(19732), + 5892: uint16(19731), + 5893: uint16(19733), + 5894: uint16(11287), + 5895: uint16(9536), + 5896: uint16(10765), + 5897: uint16(19734), + 5898: uint16(6968), + 5899: uint16(19735), + 5900: uint16(19736), + 5901: uint16(19737), + 5902: uint16(9216), + 5903: uint16(3913), + 5904: uint16(6200), + 5905: uint16(11801), + 5906: uint16(19741), + 5907: uint16(5651), + 5908: uint16(19738), + 5909: uint16(19739), + 5910: uint16(10323), + 5911: uint16(4659), + 5912: uint16(11288), + 5913: uint16(5406), + 5914: uint16(9267), + 5915: uint16(19742), + 5916: uint16(19743), + 5917: uint16(19744), + 5918: uint16(9217), + 5919: uint16(19746), + 5920: uint16(19745), + 5921: uint16(9522), + 5922: uint16(19747), + 5923: uint16(7189), + 5924: uint16(6975), + 5925: uint16(9786), + 5926: uint16(8784), + 5927: uint16(6993), + 5928: uint16(7755), + 5929: uint16(19748), + 5930: uint16(19749), + 5931: uint16(7740), + 5932: uint16(19750), + 5933: uint16(19751), + 5934: uint16(19752), + 5935: uint16(11342), + 5936: uint16(7190), + 5937: uint16(19754), + 5938: uint16(19753), + 5939: uint16(6201), + 5940: uint16(6226), + 5941: uint16(6687), + 5942: uint16(19757), + 5943: uint16(7237), + 5944: uint16(19756), + 5945: uint16(19755), + 5946: uint16(8520), + 5947: uint16(5966), + 5948: uint16(7970), + 5949: uint16(9999), + 5950: uint16(7192), + 5951: uint16(19758), + 5952: uint16(7486), + 5953: uint16(19761), + 5954: uint16(19759), + 5955: uint16(19760), + 5956: uint16(19763), + 5957: uint16(19762), + 5958: uint16(7513), + 5959: uint16(19764), + 5960: uint16(19765), + 5961: uint16(19766), + 5962: uint16(10031), + 5963: uint16(6450), + 5964: uint16(6976), + 5965: uint16(19767), + 5966: uint16(19768), + 5967: uint16(11523), + 5968: uint16(7204), + 5969: uint16(11085), + 5970: uint16(11563), + 5971: uint16(19769), + 5972: uint16(5441), + 5973: uint16(19770), + 5974: uint16(9218), + 5975: uint16(19773), + 5976: uint16(4695), + 5977: uint16(7722), + 5978: uint16(19771), + 5979: uint16(19772), + 5980: uint16(9023), + 5981: uint16(10804), + 5982: uint16(5467), + 5983: uint16(19775), + 5984: uint16(19776), + 5985: uint16(19774), + 5986: uint16(19778), + 5987: uint16(9534), + 5988: uint16(4642), + 5989: uint16(19782), + 5990: uint16(19779), + 5991: uint16(19781), + 5992: uint16(19777), + 5993: uint16(20014), + 5994: uint16(19780), + 5995: uint16(11594), + 5996: uint16(5945), + 5997: uint16(19790), + 5998: uint16(9235), + 5999: uint16(19785), + 6000: uint16(19788), + 6001: uint16(19786), + 6002: uint16(19791), + 6003: uint16(19792), + 6004: uint16(19784), + 6005: uint16(19797), + 6006: uint16(4179), + 6007: uint16(19783), + 6008: uint16(9996), + 6009: uint16(19787), + 6010: uint16(7487), + 6011: uint16(6202), + 6012: uint16(10791), + 6013: uint16(5443), + 6014: uint16(7205), + 6015: uint16(9499), + 6016: uint16(8204), + 6017: uint16(19795), + 6018: uint16(19789), + 6019: uint16(19794), + 6020: uint16(11042), + 6021: uint16(8983), + 6022: uint16(19796), + 6023: uint16(19793), + 6024: uint16(8203), + 6025: uint16(19800), + 6026: uint16(19799), + 6027: uint16(19798), + 6028: uint16(10766), + 6029: uint16(7258), + 6030: uint16(19801), + 6031: uint16(10558), + 6032: uint16(4147), + 6033: uint16(10277), + 6034: uint16(8785), + 6035: uint16(5207), + 6036: uint16(19803), + 6037: uint16(6204), + 6038: uint16(6667), + 6039: uint16(19802), + 6040: uint16(7756), + 6041: uint16(7757), + 6042: uint16(19968), + 6043: uint16(19970), + 6044: uint16(7514), + 6045: uint16(19969), + 6046: uint16(19971), + 6047: uint16(5426), + 6048: uint16(10276), + 6049: uint16(6977), + 6050: uint16(11778), + 6051: uint16(19805), + 6052: uint16(6487), + 6053: uint16(11806), + 6054: uint16(19973), + 6055: uint16(19972), + 6056: uint16(19974), + 6057: uint16(19804), + 6058: uint16(9544), + 6059: uint16(9268), + 6060: uint16(9014), + 6061: uint16(19979), + 6062: uint16(8738), + 6063: uint16(19975), + 6064: uint16(19976), + 6065: uint16(5644), + 6066: uint16(19978), + 6067: uint16(5903), + 6068: uint16(19977), + 6069: uint16(7488), + 6070: uint16(4696), + 6071: uint16(19983), + 6072: uint16(6430), + 6073: uint16(8280), + 6074: uint16(9001), + 6075: uint16(4634), + 6076: uint16(19981), + 6077: uint16(19982), + 6078: uint16(8994), + 6079: uint16(19980), + 6080: uint16(19984), + 6081: uint16(19990), + 6082: uint16(19993), + 6083: uint16(19992), + 6084: uint16(9228), + 6085: uint16(19985), + 6086: uint16(19986), + 6087: uint16(19989), + 6088: uint16(19991), + 6089: uint16(5407), + 6090: uint16(19994), + 6091: uint16(19988), + 6092: uint16(19987), + 6093: uint16(19998), + 6094: uint16(19999), + 6095: uint16(20000), + 6096: uint16(19997), + 6097: uint16(19996), + 6098: uint16(7489), + 6099: uint16(9481), + 6100: uint16(19995), + 6101: uint16(20004), + 6102: uint16(20002), + 6103: uint16(20003), + 6104: uint16(20001), + 6105: uint16(8535), + 6106: uint16(20005), + 6107: uint16(20006), + 6108: uint16(20008), + 6109: uint16(4916), + 6110: uint16(20007), + 6111: uint16(11097), + 6112: uint16(20019), + 6113: uint16(20009), + 6114: uint16(20012), + 6115: uint16(20010), + 6116: uint16(20011), + 6117: uint16(20013), + 6118: uint16(20015), + 6119: uint16(20016), + 6120: uint16(20017), + 6121: uint16(20020), + 6122: uint16(20018), + 6123: uint16(20021), + 6124: uint16(20023), + 6125: uint16(20022), + 6126: uint16(8984), + 6127: uint16(11078), + 6128: uint16(20024), + 6129: uint16(8205), + 6130: uint16(20025), + 6131: uint16(10531), + 6132: uint16(20026), + 6133: uint16(4618), + 6134: uint16(4123), + 6135: uint16(4918), + 6136: uint16(4917), + 6137: uint16(20027), + 6138: uint16(20028), + 6139: uint16(20029), + 6140: uint16(20030), + 6141: uint16(20031), + 6142: uint16(4919), + 6143: uint16(4660), + 6144: uint16(6205), + 6145: uint16(10005), + 6146: uint16(20033), + 6147: uint16(20032), + 6148: uint16(20034), + 6149: uint16(4155), + 6150: uint16(20037), + 6151: uint16(20036), + 6152: uint16(20035), + 6153: uint16(20038), + 6154: uint16(20041), + 6155: uint16(3878), + 6156: uint16(20039), + 6157: uint16(20043), + 6158: uint16(20042), + 6159: uint16(20045), + 6160: uint16(20044), + 6161: uint16(20046), + 6162: uint16(9485), + 6163: uint16(20047), + 6164: uint16(20048), + 6165: uint16(20050), + 6166: uint16(20049), + 6167: uint16(10315), + 6168: uint16(20051), + 6169: uint16(20052), + 6170: uint16(6468), + 6171: uint16(20053), + 6172: uint16(20054), + 6173: uint16(10792), + 6174: uint16(8234), + 6175: uint16(3843), + 6176: uint16(8490), + 6177: uint16(20055), + 6178: uint16(10316), + 6179: uint16(20058), + 6180: uint16(20056), + 6181: uint16(6206), + 6182: uint16(20057), + 6183: uint16(5921), + 6184: uint16(10532), + 6185: uint16(20060), + 6186: uint16(20224), + 6187: uint16(20061), + 6188: uint16(20225), + 6189: uint16(4096), + 6190: uint16(7735), + 6191: uint16(7259), + 6192: uint16(4920), + 6193: uint16(20226), + 6194: uint16(9797), + 6195: uint16(20228), + 6196: uint16(4097), + 6197: uint16(20227), + 6198: uint16(8995), + 6199: uint16(11564), + 6200: uint16(9482), + 6201: uint16(20059), + 6202: uint16(11525), + 6203: uint16(5904), + 6204: uint16(11322), + 6205: uint16(5464), + 6206: uint16(11539), + 6207: uint16(5639), + 6208: uint16(8513), + 6209: uint16(17920), + 6210: uint16(20229), + 6211: uint16(4619), + 6212: uint16(7758), + 6213: uint16(4661), + 6214: uint16(20231), + 6215: uint16(20232), + 6216: uint16(20230), + 6217: uint16(5699), + 6218: uint16(6460), + 6219: uint16(7490), + 6220: uint16(4098), + 6221: uint16(11576), + 6222: uint16(20234), + 6223: uint16(19725), + 6224: uint16(20233), + 6225: uint16(20237), + 6226: uint16(20235), + 6227: uint16(20236), + 6228: uint16(20238), + 6229: uint16(20239), + 6230: uint16(11595), + 6231: uint16(20240), + 6232: uint16(20241), + 6233: uint16(7976), + 6234: uint16(10010), + 6235: uint16(7772), + 6236: uint16(4934), + 6237: uint16(11289), + 6238: uint16(4428), + 6239: uint16(7191), + 6240: uint16(5946), + 6241: uint16(20244), + 6242: uint16(20243), + 6243: uint16(6738), + 6244: uint16(20245), + 6245: uint16(20242), + 6246: uint16(6663), + 6247: uint16(20249), + 6248: uint16(18700), + 6249: uint16(12597), + 6250: uint16(7766), + 6251: uint16(20247), + 6252: uint16(11524), + 6253: uint16(9552), + 6254: uint16(4106), + 6255: uint16(8002), + 6256: uint16(6933), + 6257: uint16(10518), + 6258: uint16(4127), + 6259: uint16(11596), + 6260: uint16(11338), + 6261: uint16(20250), + 6262: uint16(9252), + 6263: uint16(7002), + 6264: uint16(20251), + 6265: uint16(20252), + 6266: uint16(7723), + 6267: uint16(20253), + 6268: uint16(11597), + 6269: uint16(20248), + 6270: uint16(20255), + 6271: uint16(20257), + 6272: uint16(20256), + 6273: uint16(20254), + 6274: uint16(20258), + 6275: uint16(20259), + 6276: uint16(8281), + 6277: uint16(4417), + 6278: uint16(20260), + 6279: uint16(11031), + 6280: uint16(20261), + 6281: uint16(20262), + 6282: uint16(11785), + 6283: uint16(14864), + 6284: uint16(20263), + 6285: uint16(20264), + 6286: uint16(20265), + 6287: uint16(20269), + 6288: uint16(20266), + 6289: uint16(20267), + 6290: uint16(20268), + 6291: uint16(20270), + 6292: uint16(7971), + 6293: uint16(11094), + 6294: uint16(7972), + 6295: uint16(20271), + 6296: uint16(10066), + 6297: uint16(20272), + 6298: uint16(21042), + 6299: uint16(11051), + 6300: uint16(20273), + 6301: uint16(20274), + 6302: uint16(20275), + 6303: uint16(4662), + 6304: uint16(20277), + 6305: uint16(7736), + 6306: uint16(20278), + 6307: uint16(5635), + 6308: uint16(20279), + 6309: uint16(20283), + 6310: uint16(20281), + 6311: uint16(20282), + 6312: uint16(4690), + 6313: uint16(20280), + 6314: uint16(20284), + 6315: uint16(20285), + 6316: uint16(3879), + 6317: uint16(20286), + 6318: uint16(20287), + 6319: uint16(7491), + 6320: uint16(20288), + 6321: uint16(5158), + 6322: uint16(20291), + 6323: uint16(20290), + 6324: uint16(20289), + 6325: uint16(19024), + 6326: uint16(10555), + 6327: uint16(20292), + 6328: uint16(20293), + 6329: uint16(20294), + 6330: uint16(20295), + 6331: uint16(20296), + 6332: uint16(20297), + 6333: uint16(4921), + 6334: uint16(20298), + 6335: uint16(20299), + 6336: uint16(9730), + 6337: uint16(20301), + 6338: uint16(4378), + 6339: uint16(20304), + 6340: uint16(20303), + 6341: uint16(4099), + 6342: uint16(5408), + 6343: uint16(10534), + 6344: uint16(8985), + 6345: uint16(6401), + 6346: uint16(6207), + 6347: uint16(7238), + 6348: uint16(7739), + 6349: uint16(20306), + 6350: uint16(20305), + 6351: uint16(11297), + 6352: uint16(4935), + 6353: uint16(10033), + 6354: uint16(9531), + 6355: uint16(7771), + 6356: uint16(11565), + 6357: uint16(5690), + 6358: uint16(20309), + 6359: uint16(20308), + 6360: uint16(10794), + 6361: uint16(9483), + 6362: uint16(4143), + 6363: uint16(20310), + 6364: uint16(20307), + 6365: uint16(10288), + 6366: uint16(11337), + 6367: uint16(20311), + 6368: uint16(20312), + 6369: uint16(20314), + 6370: uint16(8521), + 6371: uint16(4666), + 6372: uint16(4667), + 6373: uint16(20313), + 6374: uint16(4936), + 6375: uint16(5905), + 6376: uint16(4937), + 6377: uint16(9246), + 6378: uint16(11583), + 6379: uint16(5947), + 6380: uint16(20315), + 6381: uint16(20316), + 6382: uint16(20317), + 6383: uint16(20480), + 6384: uint16(20482), + 6385: uint16(20481), + 6386: uint16(10326), + 6387: uint16(20483), + 6388: uint16(20484), + 6389: uint16(20485), + 6390: uint16(20486), + 6391: uint16(20488), + 6392: uint16(20487), + 6393: uint16(20489), + 6394: uint16(10067), + 6395: uint16(17707), + 6396: uint16(7688), + 6397: uint16(5137), + 6398: uint16(20490), + 6399: uint16(20491), + 6400: uint16(12555), + 6401: uint16(15386), + 6402: uint16(10034), + 6403: uint16(3930), + 6404: uint16(3866), + 6405: uint16(6739), + 6406: uint16(10767), + 6407: uint16(7517), + 6408: uint16(20492), + 6409: uint16(11070), + 6410: uint16(20493), + 6411: uint16(11323), + 6412: uint16(4129), + 6413: uint16(6688), + 6414: uint16(20494), + 6415: uint16(4429), + 6416: uint16(20495), + 6417: uint16(20496), + 6418: uint16(20498), + 6419: uint16(20499), + 6420: uint16(20501), + 6421: uint16(20497), + 6422: uint16(20500), + 6423: uint16(4922), + 6424: uint16(20502), + 6425: uint16(20503), + 6426: uint16(20504), + 6427: uint16(20505), + 6428: uint16(20506), + 6429: uint16(20508), + 6430: uint16(20507), + 6431: uint16(20510), + 6432: uint16(20513), + 6433: uint16(20509), + 6434: uint16(20511), + 6435: uint16(20512), + 6436: uint16(20514), + 6437: uint16(5409), + 6438: uint16(6994), + 6439: uint16(20515), + 6440: uint16(20516), + 6441: uint16(6208), + 6442: uint16(20517), + 6443: uint16(4637), + 6444: uint16(9774), + 6445: uint16(20518), + 6446: uint16(20519), + 6447: uint16(8761), + 6448: uint16(9546), + 6449: uint16(20520), + 6450: uint16(9820), + 6451: uint16(8491), + 6452: uint16(4151), + 6453: uint16(5453), + 6454: uint16(5454), + 6455: uint16(8786), + 6456: uint16(20525), + 6457: uint16(5455), + 6458: uint16(4430), + 6459: uint16(20524), + 6460: uint16(20522), + 6461: uint16(20523), + 6462: uint16(20521), + 6463: uint16(20535), + 6464: uint16(20526), + 6465: uint16(20527), + 6466: uint16(20528), + 6467: uint16(20529), + 6468: uint16(20531), + 6469: uint16(20530), + 6470: uint16(7224), + 6471: uint16(20532), + 6472: uint16(20534), + 6473: uint16(5138), + 6474: uint16(20533), + 6475: uint16(8282), + 6476: uint16(5906), + 6477: uint16(20536), + 6478: uint16(8492), + 6479: uint16(20537), + 6480: uint16(9484), + 6481: uint16(20538), + 6482: uint16(20543), + 6483: uint16(20541), + 6484: uint16(20540), + 6485: uint16(20542), + 6486: uint16(20539), + 6487: uint16(20545), + 6488: uint16(20544), + 6489: uint16(20547), + 6490: uint16(5410), + 6491: uint16(20546), + 6492: uint16(20548), + 6493: uint16(20549), + 6494: uint16(20551), + 6495: uint16(20550), + 6496: uint16(20552), + 6497: uint16(20554), + 6498: uint16(20553), + 6499: uint16(6235), + 6500: uint16(20555), + 6501: uint16(20556), + 6502: uint16(4635), + 6503: uint16(20557), + 6504: uint16(20558), + 6505: uint16(7760), + 6506: uint16(20559), + 6507: uint16(20560), + 6508: uint16(20561), + 6509: uint16(20562), + 6510: uint16(6209), + 6511: uint16(20563), + 6512: uint16(20564), + 6513: uint16(20565), + 6514: uint16(20566), + 6515: uint16(20567), + 6516: uint16(10000), + 6517: uint16(20569), + 6518: uint16(10245), + 6519: uint16(20570), + 6520: uint16(20568), + 6521: uint16(20572), + 6522: uint16(20571), + 6523: uint16(20573), + 6524: uint16(20736), + 6525: uint16(20737), + 6526: uint16(20738), + 6527: uint16(20739), + 6528: uint16(20740), + 6529: uint16(20741), + 6530: uint16(20742), + 6531: uint16(20743), + 6532: uint16(20744), + 6533: uint16(20745), + 6534: uint16(20746), + 6535: uint16(20747), + 6536: uint16(20748), + 6537: uint16(20749), + 6538: uint16(15380), + 6539: uint16(20750), + 6540: uint16(17239), + 6541: uint16(5139), + 6542: uint16(4608), + 6543: uint16(6417), + 6544: uint16(20752), + 6545: uint16(20751), + 6546: uint16(11012), + 6547: uint16(20754), + 6548: uint16(20755), + 6549: uint16(20753), + 6550: uint16(20756), + 6551: uint16(10817), + 6552: uint16(20757), + 6553: uint16(5210), + 6554: uint16(11780), + 6555: uint16(20758), + 6556: uint16(20760), + 6557: uint16(3869), + 6558: uint16(20761), + 6559: uint16(10506), + 6560: uint16(20759), + 6561: uint16(20762), + 6562: uint16(20763), + 6563: uint16(20764), + 6564: uint16(20765), + 6565: uint16(20766), + 6566: uint16(10829), + 6567: uint16(6668), + 6568: uint16(6489), + 6569: uint16(8206), + 6570: uint16(20767), + 6571: uint16(20770), + 6572: uint16(20768), + 6573: uint16(20771), + 6574: uint16(5968), + 6575: uint16(20769), + 6576: uint16(20772), + 6577: uint16(20773), + 6578: uint16(20774), + 6579: uint16(20778), + 6580: uint16(6665), + 6581: uint16(8515), + 6582: uint16(20779), + 6583: uint16(20776), + 6584: uint16(20775), + 6585: uint16(20777), + 6586: uint16(5694), + 6587: uint16(20783), + 6588: uint16(20782), + 6589: uint16(20781), + 6590: uint16(3858), + 6591: uint16(20793), + 6592: uint16(20789), + 6593: uint16(20790), + 6594: uint16(20786), + 6595: uint16(20792), + 6596: uint16(20788), + 6597: uint16(4673), + 6598: uint16(11819), + 6599: uint16(20791), + 6600: uint16(20787), + 6601: uint16(20785), + 6602: uint16(20784), + 6603: uint16(20795), + 6604: uint16(20798), + 6605: uint16(20797), + 6606: uint16(20796), + 6607: uint16(10280), + 6608: uint16(20794), + 6609: uint16(3922), + 6610: uint16(20799), + 6611: uint16(20801), + 6612: uint16(4686), + 6613: uint16(20780), + 6614: uint16(4118), + 6615: uint16(20803), + 6616: uint16(20802), + 6617: uint16(20800), + 6618: uint16(8716), + 6619: uint16(10831), + 6620: uint16(11577), + 6621: uint16(20804), + 6622: uint16(20805), + 6623: uint16(20806), + 6624: uint16(20807), + 6625: uint16(20808), + 6626: uint16(8986), + 6627: uint16(20809), + 6628: uint16(10006), + 6629: uint16(20814), + 6630: uint16(20810), + 6631: uint16(20811), + 6632: uint16(10768), + 6633: uint16(11043), + 6634: uint16(9519), + 6635: uint16(20815), + 6636: uint16(20816), + 6637: uint16(9501), + 6638: uint16(20813), + 6639: uint16(20812), + 6640: uint16(4361), + 6641: uint16(20824), + 6642: uint16(20823), + 6643: uint16(4180), + 6644: uint16(20821), + 6645: uint16(20820), + 6646: uint16(20818), + 6647: uint16(4698), + 6648: uint16(20817), + 6649: uint16(6929), + 6650: uint16(4360), + 6651: uint16(6210), + 6652: uint16(20827), + 6653: uint16(20826), + 6654: uint16(20825), + 6655: uint16(20822), + 6656: uint16(20828), + 6657: uint16(20829), + 6658: uint16(20996), + 6659: uint16(20995), + 6660: uint16(20997), + 6661: uint16(4108), + 6662: uint16(20992), + 6663: uint16(20993), + 6664: uint16(6227), + 6665: uint16(11032), + 6666: uint16(20994), + 6667: uint16(10769), + 6668: uint16(21002), + 6669: uint16(20998), + 6670: uint16(21003), + 6671: uint16(21000), + 6672: uint16(20999), + 6673: uint16(5691), + 6674: uint16(21004), + 6675: uint16(21005), + 6676: uint16(21006), + 6677: uint16(21001), + 6678: uint16(20819), + 6679: uint16(21007), + 6680: uint16(9024), + 6681: uint16(21011), + 6682: uint16(21012), + 6683: uint16(21010), + 6684: uint16(21009), + 6685: uint16(21015), + 6686: uint16(21008), + 6687: uint16(21013), + 6688: uint16(21014), + 6689: uint16(21017), + 6690: uint16(21016), + 6691: uint16(21019), + 6692: uint16(21020), + 6693: uint16(21021), + 6694: uint16(11816), + 6695: uint16(21018), + 6696: uint16(8522), + 6697: uint16(6476), + 6698: uint16(21022), + 6699: uint16(21023), + 6700: uint16(21024), + 6701: uint16(21025), + 6702: uint16(21026), + 6703: uint16(5907), + 6704: uint16(21027), + 6705: uint16(21028), + 6706: uint16(6926), + 6707: uint16(21029), + 6708: uint16(21030), + 6709: uint16(21031), + 6710: uint16(21032), + 6711: uint16(21035), + 6712: uint16(21033), + 6713: uint16(11803), + 6714: uint16(21034), + 6715: uint16(11598), + 6716: uint16(21036), + 6717: uint16(11578), + 6718: uint16(21037), + 6719: uint16(9821), + 6720: uint16(21038), + 6721: uint16(21040), + 6722: uint16(21041), + 6723: uint16(21039), + 6724: uint16(6220), + 6725: uint16(11052), + 6726: uint16(10818), + 6727: uint16(13654), + 6728: uint16(15423), + 6729: uint16(10842), + 6730: uint16(4362), + 6731: uint16(21043), + 6732: uint16(5167), + 6733: uint16(21044), + 6734: uint16(21045), + 6735: uint16(21046), + 6736: uint16(6228), + 6737: uint16(21047), + 6738: uint16(16179), + 6739: uint16(11066), + 6740: uint16(8514), + 6741: uint16(21048), + 6742: uint16(21050), + 6743: uint16(21049), + 6744: uint16(21051), + 6745: uint16(21052), + 6746: uint16(21053), + 6747: uint16(21054), + 6748: uint16(21055), + 6749: uint16(21056), + 6750: uint16(21057), + 6751: uint16(21058), + 6752: uint16(21059), + 6753: uint16(21060), + 6754: uint16(21061), + 6755: uint16(21062), + 6756: uint16(21063), + 6757: uint16(9219), + 6758: uint16(5948), + 6759: uint16(21065), + 6760: uint16(8236), + 6761: uint16(21066), + 6762: uint16(21067), + 6763: uint16(10240), + 6764: uint16(21068), + 6765: uint16(21069), + 6766: uint16(16918), + 6767: uint16(19257), + 6768: uint16(20300), + 6769: uint16(21070), + 6770: uint16(21071), + 6771: uint16(21073), + 6772: uint16(21074), + 6773: uint16(21075), + 6774: uint16(11599), + 6775: uint16(21072), + 6776: uint16(21076), + 6777: uint16(21077), + 6778: uint16(21079), + 6779: uint16(21078), + 6780: uint16(21081), + 6781: uint16(21082), + 6782: uint16(21080), + 6783: uint16(11541), + 6784: uint16(21083), + 6785: uint16(21084), + 6786: uint16(16947), + 6787: uint16(21085), + 6788: uint16(9), + 6789: uint16(83), + 6790: uint16(79), + 6791: uint16(82), + 6792: uint16(84), + 6793: uint16(41), + 6794: uint16(42), + 6795: uint16(85), + 6796: uint16(59), + 6797: uint16(3), + 6798: uint16(4), + 6799: uint16(30), + 6800: uint16(527), + 6801: uint16(528), + 6802: uint16(529), + 6803: uint16(530), + 6804: uint16(531), + 6805: uint16(532), + 6806: uint16(533), + 6807: uint16(534), + 6808: uint16(535), + 6809: uint16(536), + 6810: uint16(6), + 6811: uint16(7), + 6812: uint16(66), + 6813: uint16(64), + 6814: uint16(67), + 6815: uint16(8), + 6816: uint16(86), + 6817: uint16(544), + 6818: uint16(545), + 6819: uint16(546), + 6820: uint16(547), + 6821: uint16(548), + 6822: uint16(549), + 6823: uint16(550), + 6824: uint16(551), + 6825: uint16(552), + 6826: uint16(553), + 6827: uint16(554), + 6828: uint16(555), + 6829: uint16(556), + 6830: uint16(557), + 6831: uint16(558), + 6832: uint16(559), + 6833: uint16(560), + 6834: uint16(561), + 6835: uint16(562), + 6836: uint16(563), + 6837: uint16(564), + 6838: uint16(565), + 6839: uint16(566), + 6840: uint16(567), + 6841: uint16(568), + 6842: uint16(569), + 6843: uint16(45), + 6844: uint16(46), + 6845: uint16(15), + 6846: uint16(17), + 6847: uint16(13), + 6848: uint16(576), + 6849: uint16(577), + 6850: uint16(578), + 6851: uint16(579), + 6852: uint16(580), + 6853: uint16(581), + 6854: uint16(582), + 6855: uint16(583), + 6856: uint16(584), + 6857: uint16(585), + 6858: uint16(586), + 6859: uint16(587), + 6860: uint16(588), + 6861: uint16(589), + 6862: uint16(590), + 6863: uint16(591), + 6864: uint16(592), + 6865: uint16(593), + 6866: uint16(594), + 6867: uint16(595), + 6868: uint16(596), + 6869: uint16(597), + 6870: uint16(598), + 6871: uint16(599), + 6872: uint16(600), + 6873: uint16(601), + 6874: uint16(47), + 6875: uint16(34), + 6876: uint16(48), + 6877: uint16(16), + 6878: uint16(78), +} + +func _fuzzycmp(tls *TLS, a uintptr, b uintptr) (r int32) { + for { + if !(*(*uint8)(unsafe.Pointer(a)) != 0 && *(*uint8)(unsafe.Pointer(b)) != 0) { + break + } + for *(*uint8)(unsafe.Pointer(a)) != 0 && uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32)-uint32('a') > uint32(26) && uint32(int32(*(*uint8)(unsafe.Pointer(a)))-int32('0')) > uint32(10) { + a++ + } + if uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32) != uint32(*(*uint8)(unsafe.Pointer(b))) { + return int32(1) + } + goto _1 + _1: + ; + a++ + b++ + } + return BoolInt32(int32(*(*uint8)(unsafe.Pointer(a))) != int32(*(*uint8)(unsafe.Pointer(b)))) +} + +func _find_charmap(tls *TLS, name uintptr) (r Tsize_t) { + var s uintptr + _ = s + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + name = uintptr(unsafe.Pointer(&_charmaps)) + } /* "utf8" */ + s = uintptr(unsafe.Pointer(&_charmaps)) + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if !(_fuzzycmp(tls, name, s) != 0) { + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + return uint64(int64(s+uintptr(1)) - t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_charmaps)))) + } + s += uintptr(Xstrlen(tls, s) + uint64(1)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + if int32(*(*uint8)(unsafe.Pointer(s + 1))) > int32(0200) { + s += uintptr(2) + } else { + s += uintptr(uint32(2) + (uint32(64)-uint32(*(*uint8)(unsafe.Pointer(s + 1))))*uint32(5)) + } + } + goto _1 + _1: + } + return uint64(-Int32FromInt32(1)) +} + +type Tstateful_cd = struct { + Fbase_cd Ticonv_t + Fstate uint32 +} + +func _combine_to_from(tls *TLS, t Tsize_t, f Tsize_t) (r Ticonv_t) { + return uintptr(f<> int32(16) +} + +func _extract_to(tls *TLS, cd Ticonv_t) (r Tsize_t) { + return uint64(cd) >> int32(1) & uint64(0x7fff) +} + +func Xiconv_open(tls *TLS, to uintptr, from uintptr) (r Ticonv_t) { + if __ccgo_strace { + trc("tls=%v to=%v from=%v, (%v:)", tls, to, from, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cd Ticonv_t + var f, t, v1, v2 Tsize_t + var scd uintptr + var v3 bool + _, _, _, _, _, _, _ = cd, f, scd, t, v1, v2, v3 + v1 = _find_charmap(tls, to) + t = v1 + if v3 = v1 == uint64(-Int32FromInt32(1)); !v3 { + v2 = _find_charmap(tls, from) + f = v2 + } + if v3 || v2 == uint64(-Int32FromInt32(1)) || int32(_charmaps[t]) >= int32(0330) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + cd = _combine_to_from(tls, t, f) + switch int32(_charmaps[f]) { + case int32(UTF_16): + fallthrough + case int32(UTF_32): + fallthrough + case int32(UCS2): + fallthrough + case int32(ISO2022_JP): + scd = Xmalloc(tls, uint64(16)) + if !(scd != 0) { + return uintptr(-Int32FromInt32(1)) + } + (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd = cd + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + cd = scd + } + return cd +} + +func _get_16(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(1) + return uint32(int32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))<> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(int32(1)-e))) = uint8(c) +} + +func _get_32(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(3) + return (uint32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))+0)<> int32(24)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(1)))) = uint8(c >> int32(16)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(2)))) = uint8(c >> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(3)))) = uint8(c) +} + +/* Adapt as needed */ + +func _legacy_map(tls *TLS, map1 uintptr, c uint32) (r uint32) { + var x, v1 uint32 + _, _ = x, v1 + if c < uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) { + return c + } + x = c - uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) + x = uint32(int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)))))>>(uint32(2)*x%uint32(8)) | int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)+uint32(1)))))<<(uint32(8)-uint32(2)*x%uint32(8))&int32(1023)) + if x < uint32(256) { + v1 = x + } else { + v1 = uint32(_legacy_chars[x-uint32(256)]) + } + return v1 +} + +func _uni_to_jis(tls *TLS, c uint32) (r uint32) { + var b, d, i, j, nel uint32 + _, _, _, _, _ = b, d, i, j, nel + nel = uint32(Uint64FromInt64(13758) / Uint64FromInt64(2)) + b = uint32(0) + for { + i = nel / uint32(2) + j = uint32(_rev_jis[b+i]) + d = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(j/uint32(256))*188 + uintptr(j%uint32(256))*2))) + if d == c { + return j + uint32(0x2121) + } else { + if nel == uint32(1) { + return uint32(0) + } else { + if c < d { + nel /= uint32(2) + } else { + b += i + nel -= nel / uint32(2) + } + } + } + goto _1 + _1: + } + return r +} + +func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v cd=%v in=%v inb=%v out=%v outb=%v, (%v:)", tls, cd, in, inb, out, outb, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var c, d, from, to, v62 uint32 + var err, i, i1, j, j1, v25, v26, v27, v28, v59 int32 + var k, l, tmplen, tmpx, x Tsize_t + var loc Tlocale_t + var map1, ploc, scd, tomap, v100, v101, v102, v103, v104, v54, v55, v57, v58, v60, v61, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 uintptr + var totype, type1 uint8 + var _ /* ptmp at bp+48 */ uintptr + var _ /* st at bp+24 */ Tmbstate_t + var _ /* tmp at bp+40 */ struct { + Fwc [0][2]Twchar_t + Fc [8]uint8 + } + var _ /* tmp at bp+56 */ [4]uint8 + var _ /* wc at bp+32 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, err, from, i, i1, j, j1, k, l, loc, map1, ploc, scd, tmplen, tmpx, to, tomap, totype, type1, x, v100, v101, v102, v103, v104, v25, v26, v27, v28, v54, v55, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 + x = uint64(0) + scd = uintptr(0) + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + scd = cd + cd = (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd + } + to = uint32(_extract_to(tls, cd)) + from = uint32(_extract_from(tls, cd)) + map1 = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(from) + uintptr(1) + tomap = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(to) + uintptr(1) + *(*Tmbstate_t)(unsafe.Pointer(bp + 24)) = Tmbstate_t{} + type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) + totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + return uint64(0) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + for { + if !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + break + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + l = uint64(1) + switch int32(type1) { + case int32(UTF_8): + goto _2 + case int32(US_ASCII): + goto _3 + case int32(WCHAR_T): + goto _4 + case int32(UTF_32LE): + goto _5 + case int32(UTF_32BE): + goto _6 + case int32(UTF_16LE): + goto _7 + case int32(UTF_16BE): + goto _8 + case int32(UCS2LE): + goto _9 + case int32(UCS2BE): + goto _10 + case int32(UTF_16): + goto _11 + case int32(UCS2): + goto _12 + case int32(UTF_32): + goto _13 + case int32(SHIFT_JIS): + goto _14 + case int32(EUC_JP): + goto _15 + case int32(ISO2022_JP): + goto _16 + case int32(GB2312): + goto _17 + case int32(GBK): + goto _18 + case int32(GB18030): + goto _19 + case int32(BIG5): + goto _20 + case int32(EUC_KR): + goto _21 + default: + goto _22 + } + goto _23 + _2: + ; + if c < uint32(128) { + goto _23 + } + l = Xmbrtowc(tls, bp+32, *(*uintptr)(unsafe.Pointer(in)), *(*Tsize_t)(unsafe.Pointer(inb)), bp+24) + if l == uint64(-Int32FromInt32(1)) { + goto ilseq + } + if l == uint64(-Int32FromInt32(2)) { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(bp + 32))) + goto _23 + _3: + ; + if c >= uint32(128) { + goto ilseq + } + goto _23 + _4: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < l { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + if !(0 != 0) { + goto _24 + } + _6: + ; + _5: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = _get_32(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + _24: + ; + if c-uint32(0xd800) < uint32(0x800) || c >= uint32(0x110000) { + goto ilseq + } + goto _23 + _10: + ; + _9: + ; + _8: + ; + _7: + ; + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + c = _get_16(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + if c-Uint32FromInt32(0xdc00) < uint32(0x400) { + goto ilseq + } + if c-Uint32FromInt32(0xd800) < uint32(0x400) { + if uint32(int32(type1)-int32(UCS2BE)) < uint32(2) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + d = _get_16(tls, *(*uintptr)(unsafe.Pointer(in))+UintptrFromInt32(2), int32(type1)) + if d-Uint32FromInt32(0xdc00) >= uint32(0x400) { + goto ilseq + } + c = (c-uint32(0xd7c0))< uint32(127) { + d-- + } + d -= uint32(64) + } else { + if d-uint32(159) <= uint32(Int32FromInt32(252)-Int32FromInt32(159)) { + c++ + d -= uint32(159) + } + } + if c >= uint32(84) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _15: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if c == uint32(0x8e) { + c = d + if c-uint32(0xa1) > uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + goto ilseq + } + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0xa1)) + goto _23 + } + c -= uint32(0xa1) + d -= uint32(0xa1) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _16: + ; + if c >= uint32(128) { + goto ilseq + } + if c == uint32('\033') { + l = uint64(3) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(3) { + goto starved + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if c != uint32('(') && c != uint32('$') { + goto ilseq + } + switch uint32(Int32FromInt32(128)*BoolInt32(c == Uint32FromUint8('$'))) + d { + case uint32('B'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + goto _1 + case uint32('J'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(1) + goto _1 + case uint32('I'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(4) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('@')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(2) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('B')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(3) + goto _1 + } + goto ilseq + } + switch (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate { + case uint32(1): + if c == uint32('\\') { + c = uint32(0xa5) + } + if c == uint32('~') { + c = uint32(0x203e) + } + case uint32(2): + fallthrough + case uint32(3): + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + c -= uint32(0x21) + d -= uint32(0x21) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + case uint32(4): + if c-uint32(0x60) < uint32(0x1f) { + goto ilseq + } + if c-uint32(0x21) < uint32(0x5e) { + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0x21)) + } + break + } + goto _23 + _17: + ; + if c < uint32(128) { + goto _23 + } + if c < uint32(0xa1) { + goto ilseq + } + _18: + ; + if c == uint32(128) { + c = uint32(0x20ac) + goto _23 + } + _19: + ; + if c < uint32(128) { + goto _23 + } + c -= uint32(0x81) + if c >= uint32(126) { + goto ilseq + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d < uint32(0xa1) && int32(type1) == int32(GB2312) { + goto ilseq + } + if d-uint32(0x40) >= uint32(191) || d == uint32(127) { + if d-uint32('0') > uint32(9) || int32(type1) != int32(GB18030) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = (uint32(10)*c + d - uint32('0')) * uint32(1260) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if d-uint32(0x81) > uint32(126) { + goto ilseq + } + c += uint32(10) * (d - uint32(0x81)) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(3)))) + if d-uint32('0') > uint32(9) { + goto ilseq + } + c += d - uint32('0') + c += uint32(128) + d = uint32(0) + for { + if !(d <= c) { + break + } + k = uint64(0) + i = 0 + for { + if !(i < int32(126)) { + break + } + j = 0 + for { + if !(j < int32(190)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(i)*380 + uintptr(j)*2)))-d <= c-d { + k++ + } + goto _31 + _31: + ; + j++ + } + goto _30 + _30: + ; + i++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _29 + _29: + } + goto _23 + } + d -= uint32(0x40) + if d > uint32(63) { + d-- + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(c)*380 + uintptr(d)*2))) + goto _23 + _20: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d-uint32(0x40) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x40)) || d-uint32(0x7f) < uint32(Int32FromInt32(0xa1)-Int32FromInt32(0x7f)) { + goto ilseq + } + d -= uint32(0x40) + if d > uint32(0x3e) { + d -= uint32(0x22) + } + if c-uint32(0xa1) >= uint32(Int32FromInt32(0xfa)-Int32FromInt32(0xa1)) { + if c-uint32(0x87) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x87)) { + goto ilseq + } + if c < uint32(0xa1) { + c -= uint32(0x87) + } else { + c -= uint32(Int32FromInt32(0x87) + (Int32FromInt32(0xfa) - Int32FromInt32(0xa1))) + } + c = uint32(int32(_hkscs[uint32(4867)+(c*uint32(157)+d)/uint32(16)])>>((c*uint32(157)+d)%uint32(16))%int32(2)< *(*Tsize_t)(unsafe.Pointer(outb)) { + goto toobig + } + if tmpx != 0 { + x++ + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+40, tmplen) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(tmplen) + *(*Tsize_t)(unsafe.Pointer(outb)) -= tmplen + goto _1 + } + if !(c != 0) { + goto ilseq + } + goto _23 + } + c -= uint32(0xa1) + c = uint32(int32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_big5)) + uintptr(c)*314 + uintptr(d)*2))) | BoolInt32(c == uint32(0x27) && (d == uint32(0x3a) || d == uint32(0x3c) || d == uint32(0x42)))<= uint32(93) || d >= uint32(94) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0x81)) + d += uint32(0xa1) + if c >= uint32(93) || c >= uint32(Int32FromInt32(0xc6)-Int32FromInt32(0x81)) && d > uint32(0x52) { + goto ilseq + } + if d-uint32('A') < uint32(26) { + d = d - uint32('A') + } else { + if d-uint32('a') < uint32(26) { + d = d - uint32('a') + uint32(26) + } else { + if d-uint32(0x81) < uint32(Int32FromInt32(0xff)-Int32FromInt32(0x81)) { + d = d - uint32(0x81) + uint32(52) + } else { + goto ilseq + } + } + } + if c < uint32(0x20) { + c = uint32(178)*c + d + } else { + c = uint32(Int32FromInt32(178)*Int32FromInt32(0x20)) + uint32(84)*(c-uint32(0x20)) + d + } + c += uint32(0xac00) + d = uint32(0xac00) + for { + if !(d <= c) { + break + } + k = uint64(0) + i1 = 0 + for { + if !(i1 < int32(93)) { + break + } + j1 = 0 + for { + if !(j1 < int32(94)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(i1)*188 + uintptr(j1)*2)))-d <= c-d { + k++ + } + goto _34 + _34: + ; + j1++ + } + goto _33 + _33: + ; + i1++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _32 + _32: + } + goto _23 + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _22: + ; + if !(c != 0) { + goto _23 + } + c = _legacy_map(tls, map1, c) + if !(c != 0) { + goto ilseq + } + _23: + ; + switch int32(totype) { + case int32(WCHAR_T): + goto _35 + case int32(UTF_8): + goto _36 + case int32(US_ASCII): + goto _37 + default: + goto _38 + case int32(SHIFT_JIS): + goto _39 + case int32(EUC_JP): + goto _40 + case int32(ISO2022_JP): + goto _41 + case int32(UCS2): + goto _42 + case int32(UTF_16LE): + goto _43 + case int32(UTF_16BE): + goto _44 + case int32(UTF_16): + goto _45 + case int32(UCS2LE): + goto _46 + case int32(UCS2BE): + goto _47 + case int32(UTF_32): + goto _48 + case int32(UTF_32LE): + goto _49 + case int32(UTF_32BE): + goto _50 + } + goto _51 + _35: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(out)))) = int32(c) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _36: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + k = uint64(Xwctomb(tls, bp+56, int32(c))) + if *(*Tsize_t)(unsafe.Pointer(outb)) < k { + goto toobig + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+56, k) + } else { + k = uint64(Xwctomb(tls, *(*uintptr)(unsafe.Pointer(out)), int32(c))) + } + *(*uintptr)(unsafe.Pointer(out)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(outb)) -= k + goto _51 + _37: + ; + if !(c > uint32(0x7f)) { + goto _52 + } + goto subst + subst: + ; + x++ + c = Uint32FromUint8('*') + _52: + ; + _38: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + if !(c < uint32(256) && c == _legacy_map(tls, tomap, c)) { + goto _53 + } + goto revout + revout: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + v55 = out + v54 = *(*uintptr)(unsafe.Pointer(v55)) + *(*uintptr)(unsafe.Pointer(v55))++ + *(*uint8)(unsafe.Pointer(v54)) = uint8(c) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(1) + goto _51 + _53: + ; + d = c + c = uint32(int32(4) * int32(totype)) + for { + if !(c < uint32(256)) { + break + } + if d == _legacy_map(tls, tomap, c) { + goto revout + } + goto _56 + _56: + ; + c++ + } + goto subst + _39: + ; + if c < uint32(128) { + goto revout + } + if c == uint32(0xa5) { + x++ + c = uint32('\\') + goto revout + } + if c == uint32(0x203e) { + x++ + c = uint32('~') + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0xff61)) + goto revout + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + d = c % uint32(256) + c = c / uint32(256) + v58 = out + v57 = *(*uintptr)(unsafe.Pointer(v58)) + *(*uintptr)(unsafe.Pointer(v58))++ + if c < uint32(95) { + v59 = int32(112) + } else { + v59 = int32(176) + } + *(*uint8)(unsafe.Pointer(v57)) = uint8((c+uint32(1))/uint32(2) + uint32(v59)) + v61 = out + v60 = *(*uintptr)(unsafe.Pointer(v61)) + *(*uintptr)(unsafe.Pointer(v61))++ + if c%uint32(2) != 0 { + v62 = d + uint32(31) + d/uint32(96) + } else { + v62 = d + uint32(126) + } + *(*uint8)(unsafe.Pointer(v60)) = uint8(v62) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _40: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0x0e00) + Int32FromInt32(0x21) - Int32FromInt32(0xff61)) + } else { + c = _uni_to_jis(tls, c) + } + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + v64 = out + v63 = *(*uintptr)(unsafe.Pointer(v64)) + *(*uintptr)(unsafe.Pointer(v64))++ + *(*uint8)(unsafe.Pointer(v63)) = uint8(c/uint32(256) + uint32(0x80)) + v66 = out + v65 = *(*uintptr)(unsafe.Pointer(v66)) + *(*uintptr)(unsafe.Pointer(v66))++ + *(*uint8)(unsafe.Pointer(v65)) = uint8(c%uint32(256) + uint32(0x80)) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _41: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) || c == uint32(0xa5) || c == uint32(0x203e) { + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(7) { + goto toobig + } + v68 = out + v67 = *(*uintptr)(unsafe.Pointer(v68)) + *(*uintptr)(unsafe.Pointer(v68))++ + *(*uint8)(unsafe.Pointer(v67)) = uint8('\033') + v70 = out + v69 = *(*uintptr)(unsafe.Pointer(v70)) + *(*uintptr)(unsafe.Pointer(v70))++ + *(*uint8)(unsafe.Pointer(v69)) = uint8('(') + if c == uint32(0xa5) { + v72 = out + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + *(*uint8)(unsafe.Pointer(v71)) = uint8('J') + v74 = out + v73 = *(*uintptr)(unsafe.Pointer(v74)) + *(*uintptr)(unsafe.Pointer(v74))++ + *(*uint8)(unsafe.Pointer(v73)) = uint8('\\') + } else { + if c == uint32(0x203e) { + v76 = out + v75 = *(*uintptr)(unsafe.Pointer(v76)) + *(*uintptr)(unsafe.Pointer(v76))++ + *(*uint8)(unsafe.Pointer(v75)) = uint8('J') + v78 = out + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + *(*uint8)(unsafe.Pointer(v77)) = uint8('~') + } else { + v80 = out + v79 = *(*uintptr)(unsafe.Pointer(v80)) + *(*uintptr)(unsafe.Pointer(v80))++ + *(*uint8)(unsafe.Pointer(v79)) = uint8('I') + v82 = out + v81 = *(*uintptr)(unsafe.Pointer(v82)) + *(*uintptr)(unsafe.Pointer(v82))++ + *(*uint8)(unsafe.Pointer(v81)) = uint8(c - uint32(0xff61) + uint32(0x21)) + } + } + v84 = out + v83 = *(*uintptr)(unsafe.Pointer(v84)) + *(*uintptr)(unsafe.Pointer(v84))++ + *(*uint8)(unsafe.Pointer(v83)) = uint8('\033') + v86 = out + v85 = *(*uintptr)(unsafe.Pointer(v86)) + *(*uintptr)(unsafe.Pointer(v86))++ + *(*uint8)(unsafe.Pointer(v85)) = uint8('(') + v88 = out + v87 = *(*uintptr)(unsafe.Pointer(v88)) + *(*uintptr)(unsafe.Pointer(v88))++ + *(*uint8)(unsafe.Pointer(v87)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(7) + goto _51 + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(8) { + goto toobig + } + v90 = out + v89 = *(*uintptr)(unsafe.Pointer(v90)) + *(*uintptr)(unsafe.Pointer(v90))++ + *(*uint8)(unsafe.Pointer(v89)) = uint8('\033') + v92 = out + v91 = *(*uintptr)(unsafe.Pointer(v92)) + *(*uintptr)(unsafe.Pointer(v92))++ + *(*uint8)(unsafe.Pointer(v91)) = uint8('$') + v94 = out + v93 = *(*uintptr)(unsafe.Pointer(v94)) + *(*uintptr)(unsafe.Pointer(v94))++ + *(*uint8)(unsafe.Pointer(v93)) = uint8('B') + v96 = out + v95 = *(*uintptr)(unsafe.Pointer(v96)) + *(*uintptr)(unsafe.Pointer(v96))++ + *(*uint8)(unsafe.Pointer(v95)) = uint8(c / uint32(256)) + v98 = out + v97 = *(*uintptr)(unsafe.Pointer(v98)) + *(*uintptr)(unsafe.Pointer(v98))++ + *(*uint8)(unsafe.Pointer(v97)) = uint8(c % uint32(256)) + v100 = out + v99 = *(*uintptr)(unsafe.Pointer(v100)) + *(*uintptr)(unsafe.Pointer(v100))++ + *(*uint8)(unsafe.Pointer(v99)) = uint8('\033') + v102 = out + v101 = *(*uintptr)(unsafe.Pointer(v102)) + *(*uintptr)(unsafe.Pointer(v102))++ + *(*uint8)(unsafe.Pointer(v101)) = uint8('(') + v104 = out + v103 = *(*uintptr)(unsafe.Pointer(v104)) + *(*uintptr)(unsafe.Pointer(v104))++ + *(*uint8)(unsafe.Pointer(v103)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(8) + goto _51 + _42: + ; + totype = uint8(UCS2BE) + _47: + ; + _46: + ; + _45: + ; + _44: + ; + _43: + ; + if c < uint32(0x10000) || uint32(int32(totype)-int32(UCS2BE)) < uint32(2) { + if c >= uint32(0x10000) { + c = uint32(0xFFFD) + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(2) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + c -= uint32(0x10000) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c>>int32(10)|uint32(0xd800), int32(totype)) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out))+UintptrFromInt32(2), c&uint32(0x3ff)|uint32(0xdc00), int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _48: + ; + totype = uint8(UTF_32BE) + _50: + ; + _49: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + _put_32(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _51: + ; + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(in)) += uintptr(l) + *(*Tsize_t)(unsafe.Pointer(inb)) -= l + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x + goto ilseq +ilseq: + ; + err = int32(EILSEQ) + x = uint64(-Int32FromInt32(1)) + goto end + goto toobig +toobig: + ; + err = int32(E2BIG) + x = uint64(-Int32FromInt32(1)) + goto end + goto starved +starved: + ; + err = int32(EINVAL) + x = uint64(-Int32FromInt32(1)) + goto end +end: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x +} + +func Xiconv_close(tls *TLS, cd Ticonv_t) (r int32) { + if __ccgo_strace { + trc("tls=%v cd=%v, (%v:)", tls, cd, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + Xfree(tls, cd) + } + return 0 +} + +var _c_time = [316]uint8{'S', 'u', 'n', 0, 'M', 'o', 'n', 0, 'T', 'u', 'e', 0, 'W', 'e', 'd', 0, 'T', 'h', 'u', 0, 'F', 'r', 'i', 0, 'S', 'a', 't', 0, 'S', 'u', 'n', 'd', 'a', 'y', 0, 'M', 'o', 'n', 'd', 'a', 'y', 0, 'T', 'u', 'e', 's', 'd', 'a', 'y', 0, 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 0, 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 0, 'F', 'r', 'i', 'd', 'a', 'y', 0, 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 0, 'J', 'a', 'n', 0, 'F', 'e', 'b', 0, 'M', 'a', 'r', 0, 'A', 'p', 'r', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 0, 'J', 'u', 'l', 0, 'A', 'u', 'g', 0, 'S', 'e', 'p', 0, 'O', 'c', 't', 0, 'N', 'o', 'v', 0, 'D', 'e', 'c', 0, 'J', 'a', 'n', 'u', 'a', 'r', 'y', 0, 'F', 'e', 'b', 'r', 'u', 'a', 'r', 'y', 0, 'M', 'a', 'r', 'c', 'h', 0, 'A', 'p', 'r', 'i', 'l', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 'e', 0, 'J', 'u', 'l', 'y', 0, 'A', 'u', 'g', 'u', 's', 't', 0, 'S', 'e', 'p', 't', 'e', 'm', 'b', 'e', 'r', 0, 'O', 'c', 't', 'o', 'b', 'e', 'r', 0, 'N', 'o', 'v', 'e', 'm', 'b', 'e', 'r', 0, 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 0, 'A', 'M', 0, 'P', 'M', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S', 0, '%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p', 0, 0, 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S'} + +var _c_messages = [19]uint8{'^', '[', 'y', 'Y', ']', 0, '^', '[', 'n', 'N', ']', 0, 'y', 'e', 's', 0, 'n', 'o'} +var _c_numeric = [3]uint8{'.'} + +func X__nl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cat, idx int32 + var str, v1, v2 uintptr + _, _, _, _, _ = cat, idx, str, v1, v2 + cat = item >> int32(16) + idx = item & int32(65535) + if item == int32(CODESET) { + if *(*uintptr)(unsafe.Pointer(loc)) != 0 { + v1 = __ccgo_ts + 420 + } else { + v1 = __ccgo_ts + 565 + } + return v1 + } + /* _NL_LOCALE_NAME extension */ + if idx == int32(65535) && cat < int32(LC_ALL) { + if *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) != 0 { + v2 = *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) + 16 + } else { + v2 = __ccgo_ts + 571 + } + return v2 + } + switch cat { + case int32(LC_NUMERIC): + if idx > int32(1) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_numeric)) + case int32(LC_TIME): + if idx > int32(0x31) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_time)) + case int32(LC_MONETARY): + if idx > 0 { + return __ccgo_ts + } + str = __ccgo_ts + case int32(LC_MESSAGES): + if idx > int32(3) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_messages)) + default: + return __ccgo_ts + } + for { + if !(idx != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(str)) != 0) { + break + } + goto _4 + _4: + ; + str++ + } + goto _3 + _3: + ; + idx-- + str++ + } + if cat != int32(LC_NUMERIC) && *(*uint8)(unsafe.Pointer(str)) != 0 { + str = X__lctrans(tls, str, *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8))) + } + return str +} + +func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo(tls, item) +} + +func Xnl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, loc) +} + +func X__lctrans_impl(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var trans, v1 uintptr + _, _ = trans, v1 + trans = uintptr(0) + if lm != 0 { + trans = X__mo_lookup(tls, (*t__locale_map)(unsafe.Pointer(lm)).Fmap1, (*t__locale_map)(unsafe.Pointer(lm)).Fmap_size, msg) + } + if trans != 0 { + v1 = trans + } else { + v1 = msg + } + return v1 +} + +var _envvars = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +func X__get_locale(tls *TLS, cat int32, val uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v val=%v, (%v:)", tls, cat, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var builtin int32 + var l, n Tsize_t + var map1, new1, p, path, z, v1, v11, v2, v4, v6 uintptr + var v12, v3, v5, v7 bool + var _ /* buf at bp+0 */ [256]uint8 + var _ /* map_size at bp+256 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = builtin, l, map1, n, new1, p, path, z, v1, v11, v12, v2, v3, v4, v5, v6, v7 + new1 = uintptr(0) + path = uintptr(0) + if !(*(*uint8)(unsafe.Pointer(val)) != 0) { + v1 = Xgetenv(tls, __ccgo_ts+573) + val = v1 + if v3 = v1 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v3 { + v2 = Xgetenv(tls, uintptr(unsafe.Pointer(&_envvars))+uintptr(cat)*12) + val = v2 + } + if v5 = v3 || v2 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v5 { + v4 = Xgetenv(tls, __ccgo_ts+434) + val = v4 + } + if v7 = v5 || v4 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v7 { + v6 = __ccgo_ts + 580 + val = v6 + } + _ = v7 || v6 != 0 + } + /* Limit name length and forbid leading dot or any slashes. */ + n = uint64(0) + for { + if !(n < uint64(LOCALE_NAME_MAX) && *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 && int32(*(*uint8)(unsafe.Pointer(val + uintptr(n)))) != int32('/')) { + break + } + goto _8 + _8: + ; + n++ + } + if int32(*(*uint8)(unsafe.Pointer(val))) == int32('.') || *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 { + val = __ccgo_ts + 580 + } + builtin = BoolInt32(int32(*(*uint8)(unsafe.Pointer(val))) == int32('C') && !(*(*uint8)(unsafe.Pointer(val + 1)) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+580) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+588) != 0)) + if builtin != 0 { + if cat == LC_CTYPE && int32(*(*uint8)(unsafe.Pointer(val + 1))) == int32('.') { + return uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return uintptr(0) + } + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, val, p+16) != 0) { + return p + } + goto _9 + _9: + ; + p = (*t__locale_map)(unsafe.Pointer(p)).Fnext + } + if !(X__libc.Fsecure != 0) { + path = Xgetenv(tls, __ccgo_ts+594) + } + /* FIXME: add a default path? */ + if path != 0 { + for { + if !(*(*uint8)(unsafe.Pointer(path)) != 0) { + break + } + z = X__strchrnul(tls, path, int32(':')) + l = uint64(int64(z) - int64(path)) + if l >= uint64(256)-n-uint64(2) { + goto _10 + } + Xmemcpy(tls, bp, path, l) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l] = uint8('/') + Xmemcpy(tls, bp+uintptr(l)+uintptr(1), val, n) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l+uint64(1)+n] = uint8(0) + map1 = X__map_file(tls, bp, bp+256) + if map1 != 0 { + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp + 256))) + break + } + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = map1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp + 256)) + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + break + } + goto _10 + _10: + ; + path = z + BoolUintptr(!!(*(*uint8)(unsafe.Pointer(z)) != 0)) + } + } + /* If no locale definition was found, make a locale map + * object anyway to store the name, which is kept for the + * sake of being able to do message translations at the + * application level. */ + if v12 = !(new1 != 0); v12 { + v11 = Xmalloc(tls, uint64(48)) + new1 = v11 + } + if v12 && v11 != 0 { + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = X__c_dot_utf8.Fmap1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = X__c_dot_utf8.Fmap_size + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + } + /* For LC_CTYPE, never return a null pointer unless the + * requested name was "C" or "POSIX". */ + if !(new1 != 0) && cat == LC_CTYPE { + new1 = uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return new1 +} + +var _loc_head uintptr + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _posix_lconv = Tlconv{ + Fdecimal_point: __ccgo_ts + 607, + Fthousands_sep: __ccgo_ts, + Fgrouping: __ccgo_ts, + Fint_curr_symbol: __ccgo_ts, + Fcurrency_symbol: __ccgo_ts, + Fmon_decimal_point: __ccgo_ts, + Fmon_thousands_sep: __ccgo_ts, + Fmon_grouping: __ccgo_ts, + Fpositive_sign: __ccgo_ts, + Fnegative_sign: __ccgo_ts, + Fint_frac_digits: uint8(CHAR_MAX), + Ffrac_digits: uint8(CHAR_MAX), + Fp_cs_precedes: uint8(CHAR_MAX), + Fp_sep_by_space: uint8(CHAR_MAX), + Fn_cs_precedes: uint8(CHAR_MAX), + Fn_sep_by_space: uint8(CHAR_MAX), + Fp_sign_posn: uint8(CHAR_MAX), + Fn_sign_posn: uint8(CHAR_MAX), + Fint_p_cs_precedes: uint8(CHAR_MAX), + Fint_p_sep_by_space: uint8(CHAR_MAX), + Fint_n_cs_precedes: uint8(CHAR_MAX), + Fint_n_sep_by_space: uint8(CHAR_MAX), + Fint_p_sign_posn: uint8(CHAR_MAX), + Fint_n_sign_posn: uint8(CHAR_MAX), +} + +func Xlocaleconv(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_posix_lconv)) +} + +var _default_locale_init_done int32 +var _default_locale t__locale_struct +var _default_ctype_locale t__locale_struct + +func X__loc_is_allocated(tls *TLS, loc Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v loc=%v, (%v:)", tls, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(loc != 0 && loc != uintptr(unsafe.Pointer(&X__c_locale)) && loc != uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) && loc != uintptr(unsafe.Pointer(&_default_locale)) && loc != uintptr(unsafe.Pointer(&_default_ctype_locale))) +} + +func _do_newlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i, i1 int32 + var v2, v3 uintptr + var v5 Tlocale_t + var _ /* tmp at bp+0 */ t__locale_struct + _, _, _, _, _ = i, i1, v2, v3, v5 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + if !(mask&(Int32FromInt32(1)< %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + loc = _do_newlocale(tls, mask, name, loc) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return loc +} + +func Xnewlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v mask=%v name=%v loc=%v, (%v:)", tls, mask, name, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__newlocale(tls, mask, name, loc) +} + +/* +grammar: + +Start = Expr ';' +Expr = Or | Or '?' Expr ':' Expr +Or = And | Or '||' And +And = Eq | And '&&' Eq +Eq = Rel | Eq '==' Rel | Eq '!=' Rel +Rel = Add | Rel '<=' Add | Rel '>=' Add | Rel '<' Add | Rel '>' Add +Add = Mul | Add '+' Mul | Add '-' Mul +Mul = Prim | Mul '*' Prim | Mul '/' Prim | Mul '%' Prim +Prim = '(' Expr ')' | '!' Prim | decimal | 'n' + +internals: + +recursive descent expression evaluator with stack depth limit. +for binary operators an operator-precedence parser is used. +eval* functions store the result of the parsed subexpression +and return a pointer to the next non-space character. +*/ + +type Tst = struct { + Fr uint64 + Fn uint64 + Fop int32 +} + +func _skipspace(tls *TLS, s uintptr) (r uintptr) { + var v1, v2 int32 + _, _ = v1, v2 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + return s +} + +func _evalprim(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* e at bp+0 */ uintptr + _ = v1 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _skipspace(tls, s) + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = Xstrtoul(tls, s, bp, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp)) == s || (*Tst)(unsafe.Pointer(st)).Fr == uint64(-Int32FromInt32(1)) { + return __ccgo_ts + } + return _skipspace(tls, *(*uintptr)(unsafe.Pointer(bp))) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('n') { + (*Tst)(unsafe.Pointer(st)).Fr = (*Tst)(unsafe.Pointer(st)).Fn + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(')') { + return __ccgo_ts + } + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('!') { + s = _evalprim(tls, st, s+uintptr(1), d) + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(!((*Tst)(unsafe.Pointer(st)).Fr != 0)) + return s + } + return __ccgo_ts +} + +func _binop(tls *TLS, st uintptr, op int32, left uint64) (r int32) { + var a, b uint64 + _, _ = a, b + a = left + b = (*Tst)(unsafe.Pointer(st)).Fr + switch op { + case 0: + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 || b != 0) + return 0 + case int32(1): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 && b != 0) + return 0 + case int32(2): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a == b) + return 0 + case int32(3): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != b) + return 0 + case int32(4): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a >= b) + return 0 + case int32(5): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a <= b) + return 0 + case int32(6): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a > b) + return 0 + case int32(7): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a < b) + return 0 + case int32(8): + (*Tst)(unsafe.Pointer(st)).Fr = a + b + return 0 + case int32(9): + (*Tst)(unsafe.Pointer(st)).Fr = a - b + return 0 + case int32(10): + (*Tst)(unsafe.Pointer(st)).Fr = a * b + return 0 + case int32(11): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a % b + return 0 + } + return int32(1) + case int32(12): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a / b + return 0 + } + return int32(1) + } + return int32(1) +} + +func _parseop(tls *TLS, st uintptr, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(i < int32(11)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(_opch[i]) { + /* note: >,< are accepted with or without = */ + if i < int32(6) && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(_opch2[i]) { + (*Tst)(unsafe.Pointer(st)).Fop = i + return s + uintptr(2) + } + if i >= int32(4) { + (*Tst)(unsafe.Pointer(st)).Fop = i + int32(2) + return s + uintptr(1) + } + break + } + goto _1 + _1: + ; + i++ + } + (*Tst)(unsafe.Pointer(st)).Fop = int32(13) + return s +} + +var _opch = [11]uint8{'|', '&', '=', '!', '>', '<', '+', '-', '*', '%', '/'} + +var _opch2 = [6]uint8{'|', '&', '=', '=', '=', '='} + +func _evalbinop(tls *TLS, st uintptr, s uintptr, minprec int32, d int32) (r uintptr) { + var left uint64 + var op int32 + _, _ = left, op + d-- + s = _evalprim(tls, st, s, d) + s = _parseop(tls, st, s) + for { + /* + st->r (left hand side value) and st->op are now set, + get the right hand side or back out if op has low prec, + if op was missing then prec[op]==0 + */ + op = (*Tst)(unsafe.Pointer(st)).Fop + if int32(_prec[op]) <= minprec { + return s + } + left = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalbinop(tls, st, s, int32(_prec[op]), d) + if _binop(tls, st, op, left) != 0 { + return __ccgo_ts + } + goto _1 + _1: + } + return r +} + +var _prec = [14]uint8{ + 0: uint8(1), + 1: uint8(2), + 2: uint8(3), + 3: uint8(3), + 4: uint8(4), + 5: uint8(4), + 6: uint8(4), + 7: uint8(4), + 8: uint8(5), + 9: uint8(5), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), +} + +func _evalexpr(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + var a, b, v2 uint64 + var v1 int32 + _, _, _, _ = a, b, v1, v2 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _evalbinop(tls, st, s, 0, d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') { + return s + } + a = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(':') { + return __ccgo_ts + } + b = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if a != 0 { + v2 = b + } else { + v2 = (*Tst)(unsafe.Pointer(st)).Fr + } + (*Tst)(unsafe.Pointer(st)).Fr = v2 + return s +} + +func X__pleval(tls *TLS, s uintptr, n uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uint64 + var _ /* st at bp+0 */ Tst + _ = v1 + (*(*Tst)(unsafe.Pointer(bp))).Fn = n + s = _evalexpr(tls, bp, s, int32(100)) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(';') { + v1 = (*(*Tst)(unsafe.Pointer(bp))).Fr + } else { + v1 = uint64(-Int32FromInt32(1)) + } + return v1 +} + +var _buf1 [144]uint8 + +func Xsetlocale(tls *TLS, cat int32, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v name=%v, (%v:)", tls, cat, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var i, same int32 + var l Tsize_t + var lm, lm1, p, part1, ret, s, z, v3, v4, v5, v6 uintptr + var _ /* part at bp+48 */ [24]uint8 + var _ /* tmp_locale at bp+0 */ t__locale_struct + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, lm, lm1, p, part1, ret, s, same, z, v3, v4, v5, v6 + if uint32(cat) > uint32(LC_ALL) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + /* For LC_ALL, setlocale is required to return a string which + * encodes the current setting for all categories. The format of + * this string is unspecified, and only the following code, which + * performs both the serialization and deserialization, depends + * on the format, so it can easily be changed if needed. */ + if cat == int32(LC_ALL) { + if name != 0 { + *(*[24]uint8)(unsafe.Pointer(bp + 48)) = [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'} + p = name + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + z = X__strchrnul(tls, p, int32(';')) + if int64(z)-int64(p) <= int64(LOCALE_NAME_MAX) { + Xmemcpy(tls, bp+48, p, uint64(int64(z)-int64(p))) + (*(*[24]uint8)(unsafe.Pointer(bp + 48)))[int64(z)-int64(p)] = uint8(0) + if *(*uint8)(unsafe.Pointer(z)) != 0 { + p = z + uintptr(1) + } + } + lm = X__get_locale(tls, i, bp+48) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = lm + goto _1 + _1: + ; + i++ + } + X__libc.Fglobal_locale = *(*t__locale_struct)(unsafe.Pointer(bp)) + } + s = uintptr(unsafe.Pointer(&_buf1)) + same = 0 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + lm1 = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(i)*8)) + if lm1 == *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56)) { + same++ + } + if lm1 != 0 { + v3 = lm1 + 16 + } else { + v3 = __ccgo_ts + 571 + } + part1 = v3 + l = Xstrlen(tls, part1) + Xmemcpy(tls, s, part1, l) + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(';') + s += uintptr(l + uint64(1)) + goto _2 + _2: + ; + i++ + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + if same == int32(LC_ALL) { + v5 = part1 + } else { + v5 = uintptr(unsafe.Pointer(&_buf1)) + } + return v5 + } + if name != 0 { + lm = X__get_locale(tls, cat, name) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) = lm + } else { + lm = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) + } + if lm != 0 { + v6 = lm + 16 + } else { + v6 = __ccgo_ts + 571 + } + ret = v6 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return ret +} + +func X__strcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcmp(tls, l, r) +} + +func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, loc) +} + +func _vstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, ap Tva_list) (r Tssize_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var fill, fw, intl, left, lp, negpar, nogrp, nosym, rp, w int32 + var l Tsize_t + var s0, v12, v5, v6, v8 uintptr + var x float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = fill, fw, intl, l, left, lp, negpar, nogrp, nosym, rp, s0, w, x, v12, v5, v6, v8 + s0 = s +_3: + ; + if !(n != 0 && *(*uint8)(unsafe.Pointer(fmt)) != 0) { + goto _1 + } + if !(int32(*(*uint8)(unsafe.Pointer(fmt))) != int32('%')) { + goto _4 + } + goto literal +literal: + ; + v5 = s + s++ + v6 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + n-- + goto _2 +_4: + ; + fmt++ + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('%') { + goto literal + } + fill = int32(' ') + nogrp = 0 + negpar = 0 + nosym = 0 + left = 0 + for { + switch int32(*(*uint8)(unsafe.Pointer(fmt))) { + case int32('='): + fmt++ + v8 = fmt + fill = int32(*(*uint8)(unsafe.Pointer(v8))) + goto _7 + case int32('^'): + nogrp = int32(1) + goto _7 + case int32('('): + negpar = int32(1) + fallthrough + case int32('+'): + goto _7 + case int32('!'): + nosym = int32(1) + goto _7 + case int32('-'): + left = int32(1) + goto _7 + } + break + goto _7 + _7: + ; + fmt++ + } + fw = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + fw = int32(10)*fw + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _9 + _9: + ; + fmt++ + } + lp = 0 + rp = int32(2) + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('#') { + lp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + lp = int32(10)*lp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _10 + _10: + ; + fmt++ + } + } + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('.') { + rp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + rp = int32(10)*rp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _11 + _11: + ; + fmt++ + } + } + v12 = fmt + fmt++ + intl = BoolInt32(int32(*(*uint8)(unsafe.Pointer(v12))) == int32('i')) + w = lp + int32(1) + rp + if !(left != 0) && fw > w { + w = fw + } + x = VaFloat64(&ap) + l = uint64(Xsnprintf(tls, s, n, __ccgo_ts+609, VaList(bp+8, w, rp, x))) + if l >= n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(E2BIG) + return int64(-int32(1)) + } + s += uintptr(l) + n -= l + goto _2 +_2: + ; + goto _3 + goto _1 +_1: + ; + return int64(s) - int64(s0) +} + +func Xstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v loc=%v fmt=%v va=%v, (%v:)", tls, s, n, loc, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, loc, fmt, ap) + _ = ap + return ret +} + +func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale, fmt, ap) + _ = ap + return ret +} + +func Xstrtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof(tls, s, p) +} + +func Xstrtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, p) +} + +func Xstrtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold(tls, s, p) +} + +func X__strtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod_l(tls, s, p, l) +} + +func X__strtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof_l(tls, s, p, l) +} + +func X__strtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold_l(tls, s, p, l) +} + +// C documentation +// +// /* collate only by code points */ +func X__strxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, src) + if n > l { + Xstrcpy(tls, dest, src) + } + return l +} + +func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xstrxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, loc) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _current_domain uintptr + +func X__gettextdomain(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if _current_domain != 0 { + v1 = _current_domain + } else { + v1 = __ccgo_ts + 463 + } + return v1 +} + +func Xtextdomain(tls *TLS, domainname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v, (%v:)", tls, domainname, origin(2)) + defer func() { trc("-> %v", r) }() + } + var domlen Tsize_t + _ = domlen + if !(domainname != 0) { + return X__gettextdomain(tls) + } + domlen = Xstrlen(tls, domainname) + if domlen > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(_current_domain != 0) { + _current_domain = Xmalloc(tls, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if !(_current_domain != 0) { + return uintptr(0) + } + } + Xmemcpy(tls, _current_domain, domainname, domlen+uint64(1)) + return _current_domain +} + +func Xgettext(tls *TLS, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid=%v, (%v:)", tls, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdgettext(tls, uintptr(0), msgid) +} + +func Xngettext(tls *TLS, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdngettext(tls, uintptr(0), msgid1, msgid2, n) +} + +func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var global, old, v1, v2 Tlocale_t + var self Tpthread_t + _, _, _, _, _ = global, old, self, v1, v2 + self = ___get_tp(tls) + old = (*t__pthread)(unsafe.Pointer(self)).Flocale + global = uintptr(unsafe.Pointer(&X__libc)) + 56 + if new1 != 0 { + if new1 == uintptr(-Int32FromInt32(1)) { + v1 = global + } else { + v1 = new1 + } + (*t__pthread)(unsafe.Pointer(self)).Flocale = v1 + } + if old == global { + v2 = uintptr(-Int32FromInt32(1)) + } else { + v2 = old + } + return v2 +} + +func Xuselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__uselocale(tls, new1) +} + +// C documentation +// +// /* FIXME: stub */ +func X__wcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscmp(tls, l, r) +} + +func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* FIXME: stub */ +func Xwcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, locale) +} + +// C documentation +// +// /* collate only by code points */ +func X__wcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xwcslen(tls, src) + if l < n { + Xwmemcpy(tls, dest, src, l+uint64(1)) + } else { + if n != 0 { + Xwmemcpy(tls, dest, src, n-uint64(1)) + *(*Twchar_t)(unsafe.Pointer(dest + uintptr(n-uint64(1))*4)) = 0 + } + } + return l +} + +func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xwcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, loc) +} + +func Xreallocarray(tls *TLS, ptr uintptr, m Tsize_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ptr=%v m=%v n=%v, (%v:)", tls, ptr, m, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n != 0 && m > uint64(-Int32FromInt32(1))/n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + return Xrealloc(tls, ptr, m*n) +} + +const LDBL_EPSILON2 = 0 +const LDBL_MAX2 = 0 +const LDBL_MIN2 = 0 + +var _C1 = float64(0.0416666666666666) /* 0x3FA55555, 0x5555554C */ +var _C2 = -Float64FromFloat64(0.001388888888887411) /* 0xBF56C16C, 0x16C15177 */ +var _C3 = float64(2.480158728947673e-05) /* 0x3EFA01A0, 0x19CB1590 */ +var _C4 = -Float64FromFloat64(2.7557314351390663e-07) /* 0xBE927E4F, 0x809C52AD */ +var _C5 = float64(2.087572321298175e-09) /* 0x3E21EE9E, 0xBDB4B1C4 */ +var _C6 = -Float64FromFloat64(1.1359647557788195e-11) /* 0xBDA8FAE9, 0xBE8838D4 */ + +func X__cos(tls *TLS, x float64, y float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hz, r, w, z Tdouble_t + _, _, _, _ = hz, r, w, z + z = x * x + w = z * z + r = z*(_C1+z*(_C2+z*_C3)) + w*w*(_C4+z*(_C5+z*_C6)) + hz = float64(0.5) * z + w = float64(1) - hz + return w + (Float64FromFloat64(1) - w - hz + (z*r - x*y)) +} + +// C documentation +// +// /* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ + +var _C0 = -Float64FromFloat64(0.499999997251031) /* -0.499999997251031003120 */ +var _C11 = float64(0.04166662332373906) /* 0.0416666233237390631894 */ +var _C21 = -Float64FromFloat64(0.001388676377460993) /* -0.00138867637746099294692 */ +var _C31 = float64(2.439044879627741e-05) /* 0.0000243904487962774090654 */ + +func X__cosdf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w, z Tdouble_t + _, _, _ = r, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _C21 + z*_C31 + return float32(float64(1) + z*_C0 + w*_C11 + w*z*r) +} + +// C documentation +// +// /* k is such that k*ln2 has minimal relative error and x - kln2 > log(DBL_MIN) */ +var _k2 = int32(2043) +var _kln22 = float64(1416.0996898839683) + +// C documentation +// +// /* exp(x)/2 for x >= log(DBL_MAX), slightly better than 0.5*exp(x/2)*exp(x/2) */ +func X__expo2(tls *TLS, x float64, sign float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float64 + var v1 Tuint64_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint64(uint32(Int32FromInt32(0x3ff)+_k2/Int32FromInt32(2))< log(FLT_MIN) */ +var _k3 = int32(235) +var _kln23 = Float32FromFloat32(162.88958740234375) + +// C documentation +// +// /* expf(x)/2 for x >= log(FLT_MAX), slightly better than 0.5f*expf(x/2)*expf(x/2) */ +func X__expo2f(tls *TLS, x float32, sign float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float32 + var v1 Tuint32_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint32(Int32FromInt32(0x7f)+_k3/Int32FromInt32(2)) << int32(23) + scale = *(*float32)(unsafe.Pointer(&v1)) + /* exp(x - k ln2) * 2**(k-1) */ + /* in directed rounding correct sign before rounding or overflow is important */ + return Xexpf(tls, x-_kln23) * (sign * scale) * scale +} + +func X__fpclassify(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + if *(*Tuint64_t)(unsafe.Pointer(bp))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(e != 0) { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return X__fpclassify(tls, x) +} + +const pio2_hi = 0 +const pio2_lo = 0 + +func X__math_divzero(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float64 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float64FromFloat64(1) + } else { + v1 = float64(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / float64(0) +} + +func X__math_divzerof(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float32 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float32FromFloat32(1) + } else { + v1 = Float32FromFloat32(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / Float32FromFloat32(0) +} + +func X__math_invalid(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_invalidf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_oflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(3.105036184601418e+231)) +} + +func X__math_oflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(1.5845632502852868e+29)) +} + +func X__math_uflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(1.2882297539194267e-231)) +} + +func X__math_uflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(2.524354896707238e-29)) +} + +func X__math_xflow(tls *TLS, sign Tuint32_t, y2 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float64 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +func X__math_xflowf(tls *TLS, sign Tuint32_t, y2 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float32 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +const DBL_EPSILON1 = 2.220446049250313e-16 +const EPS = 0 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 33 bit of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// * pio2_2: second 33 bit of pi/2 +// * pio2_2t: pi/2 - (pio2_1+pio2_2) +// * pio2_3: third 33 bit of pi/2 +// * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +// */ + +var _toint = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio4 = float64(0.7853981633974483) +var _invpio2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_1 = float64(1.5707963267341256) /* 0x3FF921FB, 0x54400000 */ +var _pio2_1t = float64(6.077100506506192e-11) /* 0x3DD0B461, 0x1A626331 */ +var _pio2_2 = float64(6.077100506303966e-11) /* 0x3DD0B461, 0x1A600000 */ +var _pio2_2t = float64(2.0222662487959506e-21) /* 0x3BA3198A, 0x2E037073 */ +var _pio2_3 = float64(2.0222662487111665e-21) /* 0x3BA3198A, 0x2E000000 */ +var _pio2_3t = float64(8.4784276603689e-32) /* 0x397B839A, 0x252049C1 */ + +// C documentation +// +// /* caller must handle the case when reduction is not needed: |x| ~<= pi/4 */ +func X__rem_pio2(tls *TLS, x float64, y uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey, i, n, sign int32 + var fn, r, t, w, z Tdouble_t + var ix Tuint32_t + var v2 float64 + var _ /* tx at bp+8 */ [3]float64 + var _ /* ty at bp+32 */ [2]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, fn, i, ix, n, r, sign, t, w, z, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix <= uint32(0x400f6a7a) { /* |x| ~<= 5pi/4 */ + if ix&uint32(0xfffff) == uint32(0x921fb) { /* |x| ~= pi/2 or 2pi/2 */ + goto medium + } /* cancellation -- use medium case */ + if ix <= uint32(0x4002d97c) { /* |x| ~<= 3pi/4 */ + if !(sign != 0) { + z = x - _pio2_1 /* one round good to 85 bits */ + *(*float64)(unsafe.Pointer(y)) = z - _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - _pio2_1t + return int32(1) + } else { + z = x + _pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + _pio2_1t + return -int32(1) + } + } else { + if !(sign != 0) { + z = x - Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(2)*_pio2_1t + return int32(2) + } else { + z = x + Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(2)*_pio2_1t + return -int32(2) + } + } + } + if ix <= uint32(0x401c463b) { /* |x| ~<= 9pi/4 */ + if ix <= uint32(0x4015fdbc) { /* |x| ~<= 7pi/4 */ + if ix == uint32(0x4012d97c) { /* |x| ~= 3pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(3)*_pio2_1t + return int32(3) + } else { + z = x + Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(3)*_pio2_1t + return -int32(3) + } + } else { + if ix == uint32(0x401921fb) { /* |x| ~= 4pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(4)*_pio2_1t + return int32(4) + } else { + z = x + Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(4)*_pio2_1t + return -int32(4) + } + } + } + if !(ix < uint32(0x413921fb)) { + goto _1 + } /* |x| ~< 2^20*(pi/2), medium size */ + goto medium +medium: + ; + /* rint(x/(pi/2)) */ + fn = x*_invpio2 + _toint - _toint + n = int32(fn) + r = x - fn*_pio2_1 + w = fn * _pio2_1t /* 1st round, good to 85 bits */ + /* Matters with directed rounding. */ + if r-w < -_pio4 { + n-- + fn-- + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } else { + if r-w > _pio4 { + n++ + fn++ + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } + } + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + ex = int32(ix >> int32(20)) + if ex-ey > int32(16) { /* 2nd round, good to 118 bits */ + t = r + w = fn * _pio2_2 + r = t - w + w = fn*_pio2_2t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if ex-ey > int32(49) { /* 3rd round, good to 151 bits, covers all cases */ + t = r + w = fn * _pio2_3 + r = t - w + w = fn*_pio2_3t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + } + } + *(*float64)(unsafe.Pointer(y + 1*8)) = r - *(*float64)(unsafe.Pointer(y)) - w + return n +_1: + ; + /* + * all other (large) arguments + */ + if ix >= uint32(0x7ff00000) { /* x is inf or NaN */ + v2 = x - x + *(*float64)(unsafe.Pointer(y + 1*8)) = v2 + *(*float64)(unsafe.Pointer(y)) = v2 + return 0 + } + /* set z = scalbn(|x|,-ilogb(x)+23) */ + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(Int32FromInt32(0x3ff)+Int32FromInt32(23)) << Int32FromInt32(52) + z = *(*float64)(unsafe.Pointer(bp)) + i = 0 + for { + if !(i < int32(2)) { + break + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = float64(int32(z)) + z = (z - (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i]) * float64(1.6777216e+07) + goto _3 + _3: + ; + i++ + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = z + /* skip zero terms, first term is non-zero */ + for (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] == float64(0) { + i-- + } + n = X__rem_pio2_large(tls, bp+8, bp+32, int32(ix>>Int32FromInt32(20))-(Int32FromInt32(0x3ff)+Int32FromInt32(23)), i+int32(1), int32(1)) + if sign != 0 { + *(*float64)(unsafe.Pointer(y)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return -n + } + *(*float64)(unsafe.Pointer(y)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return n +} + +const DBL_EPSILON2 = 0 + +var _init_jk = [4]int32{ + 0: int32(3), + 1: int32(4), + 2: int32(4), + 3: int32(6), +} /* initial value for jk */ + +// C documentation +// +// /* +// * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi +// * +// * integer array, contains the (24*i)-th to (24*i+23)-th +// * bit of 2/pi after binary point. The corresponding +// * floating value is +// * +// * ipio2[i] * 2^(-24(i+1)). +// * +// * NB: This table must have at least (e0-3)/24 + jk terms. +// * For quad precision (e0 <= 16360, jk = 6), this is 686. +// */ +var _ipio2 = [66]Tint32_t{ + 0: int32(0xA2F983), + 1: int32(0x6E4E44), + 2: int32(0x1529FC), + 3: int32(0x2757D1), + 4: int32(0xF534DD), + 5: int32(0xC0DB62), + 6: int32(0x95993C), + 7: int32(0x439041), + 8: int32(0xFE5163), + 9: int32(0xABDEBB), + 10: int32(0xC561B7), + 11: int32(0x246E3A), + 12: int32(0x424DD2), + 13: int32(0xE00649), + 14: int32(0x2EEA09), + 15: int32(0xD1921C), + 16: int32(0xFE1DEB), + 17: int32(0x1CB129), + 18: int32(0xA73EE8), + 19: int32(0x8235F5), + 20: int32(0x2EBB44), + 21: int32(0x84E99C), + 22: int32(0x7026B4), + 23: int32(0x5F7E41), + 24: int32(0x3991D6), + 25: int32(0x398353), + 26: int32(0x39F49C), + 27: int32(0x845F8B), + 28: int32(0xBDF928), + 29: int32(0x3B1FF8), + 30: int32(0x97FFDE), + 31: int32(0x05980F), + 32: int32(0xEF2F11), + 33: int32(0x8B5A0A), + 34: int32(0x6D1F6D), + 35: int32(0x367ECF), + 36: int32(0x27CB09), + 37: int32(0xB74F46), + 38: int32(0x3F669E), + 39: int32(0x5FEA2D), + 40: int32(0x7527BA), + 41: int32(0xC7EBE5), + 42: int32(0xF17B3D), + 43: int32(0x0739F7), + 44: int32(0x8A5292), + 45: int32(0xEA6BFB), + 46: int32(0x5FB11F), + 47: int32(0x8D5D08), + 48: int32(0x560330), + 49: int32(0x46FC7B), + 50: int32(0x6BABF0), + 51: int32(0xCFBC20), + 52: int32(0x9AF436), + 53: int32(0x1DA9E3), + 54: int32(0x91615E), + 55: int32(0xE61B08), + 56: int32(0x659985), + 57: int32(0x5F14A0), + 58: int32(0x68408D), + 59: int32(0xFFD880), + 60: int32(0x4D7327), + 61: int32(0x310606), + 62: int32(0x1556CA), + 63: int32(0x73A8C9), + 64: int32(0x60E27B), + 65: int32(0xC08C6B), +} + +var _PIo2 = [8]float64{ + 0: float64(1.570796251296997), + 1: float64(7.549789415861596e-08), + 2: float64(5.390302529957765e-15), + 3: float64(3.282003415807913e-22), + 4: float64(1.270655753080676e-29), + 5: float64(1.2293330898111133e-36), + 6: float64(2.7337005381646456e-44), + 7: float64(2.1674168387780482e-51), +} + +func X__rem_pio2_large(tls *TLS, x uintptr, y uintptr, e0 int32, nx int32, prec int32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v e0=%v nx=%v prec=%v, (%v:)", tls, x, y, e0, nx, prec, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var carry, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q0 Tint32_t + var f, q [20]float64 + var fw, z, v2, v20, v22, v24 float64 + var _ /* fq at bp+80 */ [20]float64 + var _ /* iq at bp+0 */ [20]Tint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = carry, f, fw, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q, q0, z, v2, v20, v22, v24 + /* initialize jk*/ + jk = _init_jk[prec] + jp = jk + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx - int32(1) + jv = (e0 - int32(3)) / int32(24) + if jv < 0 { + jv = 0 + } + q0 = e0 - int32(24)*(jv+int32(1)) + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv - jx + m = jx + jk + i = 0 + for { + if !(i <= m) { + break + } + if j < 0 { + v2 = float64(0) + } else { + v2 = float64(_ipio2[j]) + } + f[i] = v2 + goto _1 + _1: + ; + i++ + j++ + } + /* compute q[0],q[1],...q[jk] */ + i = 0 + for { + if !(i <= jk) { + break + } + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _4 + _4: + ; + j++ + } + q[i] = fw + goto _3 + _3: + ; + i++ + } + jz = jk + goto recompute +recompute: + ; + /* distill q[] into iq[] reversingly */ + i = 0 + j = jz + z = q[jz] + for { + if !(j > 0) { + break + } + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + z = q[j-int32(1)] + fw + goto _5 + _5: + ; + i++ + j-- + } + /* compute n */ + z = Xscalbn(tls, z, q0) /* actual value of z */ + z -= float64(8) * Xfloor(tls, z*float64(0.125)) /* trim off integer >= 8 */ + n = int32(z) + z -= float64(n) + ih = 0 + if q0 > 0 { /* need iq[jz-1] to determine n */ + i = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(24) - q0) + n += i + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) -= i << (int32(24) - q0) + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(23) - q0) + } else { + if q0 == 0 { + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> int32(23) + } else { + if z >= float64(0.5) { + ih = int32(2) + } + } + } + if ih > 0 { /* q > 0.5 */ + n += int32(1) + carry = 0 + i = 0 + for { + if !(i < jz) { + break + } /* compute 1-q */ + j = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + if carry == 0 { + if j != 0 { + carry = int32(1) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0x1000000) - j + } + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0xffffff) - j + } + goto _6 + _6: + ; + i++ + } + if q0 > 0 { /* rare case: chance is 1 in 12 */ + switch q0 { + case int32(1): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x7fffff) + case int32(2): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x3fffff) + break + } + } + if ih == int32(2) { + z = float64(1) - z + if carry != 0 { + z -= Xscalbn(tls, float64(1), q0) + } + } + } + /* check if recomputation is needed */ + if z == float64(0) { + j = 0 + i = jz - int32(1) + for { + if !(i >= jk) { + break + } + j |= (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + goto _7 + _7: + ; + i-- + } + if j == 0 { /* need recomputation */ + k = int32(1) + for { + if !((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jk-k] == 0) { + break + } + goto _8 + _8: + ; + k++ + } /* k = no. of terms needed */ + i = jz + int32(1) + for { + if !(i <= jz+k) { + break + } /* add q[jz+1] to q[jz+k] */ + f[jx+i] = float64(_ipio2[jv+i]) + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _10 + _10: + ; + j++ + } + q[i] = fw + goto _9 + _9: + ; + i++ + } + jz += k + goto recompute + } + } + /* chop off zero terms */ + if z == float64(0) { + jz -= int32(1) + q0 -= int32(24) + for (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] == 0 { + jz-- + q0 -= int32(24) + } + } else { /* break z into 24-bit if necessary */ + z = Xscalbn(tls, z, -q0) + if z >= float64(1.6777216e+07) { + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + jz += int32(1) + q0 += int32(24) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(fw) + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z) + } + } + /* convert integer "bit" chunk to floating-point value */ + fw = Xscalbn(tls, float64(1), q0) + i = jz + for { + if !(i >= 0) { + break + } + q[i] = fw * float64((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i]) + fw *= float64(5.960464477539063e-08) + goto _11 + _11: + ; + i-- + } + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + i = jz + for { + if !(i >= 0) { + break + } + fw = float64(0) + k = Int32FromInt32(0) + for { + if !(k <= jp && k <= jz-i) { + break + } + fw += _PIo2[k] * q[i+k] + goto _13 + _13: + ; + k++ + } + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[jz-i] = fw + goto _12 + _12: + ; + i-- + } + /* compress fq[] into y[] */ + switch prec { + case 0: + goto _14 + case int32(2): + goto _15 + case int32(1): + goto _16 + case int32(3): + goto _17 + } + goto _18 +_14: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _19 + _19: + ; + i-- + } + if ih == 0 { + v20 = fw + } else { + v20 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v20 + goto _18 +_16: + ; +_15: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _21 + _21: + ; + i-- + } + // TODO: drop excess precision here once double_t is used + fw = fw + if ih == 0 { + v22 = fw + } else { + v22 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v22 + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] - fw + i = int32(1) + for { + if !(i <= jz) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _23 + _23: + ; + i++ + } + if ih == 0 { + v24 = fw + } else { + v24 = -fw + } + *(*float64)(unsafe.Pointer(y + 1*8)) = v24 + goto _18 +_17: + ; /* painful */ + i = jz +_27: + ; + if !(i > 0) { + goto _25 + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _26 +_26: + ; + i-- + goto _27 + goto _25 +_25: + ; + i = jz + for { + if !(i > int32(1)) { + break + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _28 + _28: + ; + i-- + } + fw = float64(0) + i = jz + for { + if !(i >= int32(2)) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _29 + _29: + ; + i-- + } + if ih == 0 { + *(*float64)(unsafe.Pointer(y)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = fw + } else { + *(*float64)(unsafe.Pointer(y)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = -fw + } +_18: + ; + return n & int32(7) +} + +const DBL_EPSILON3 = 2.220446049250313e-16 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 25 bits of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// */ + +var _toint1 = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio41 = float64(0.7853981852531433) +var _invpio21 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_11 = float64(1.5707963109016418) /* 0x3FF921FB, 0x50000000 */ +var _pio2_1t1 = float64(1.5893254773528196e-08) /* 0x3E5110b4, 0x611A6263 */ + +func X__rem_pio2f(tls *TLS, x float32, y uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e0, n, sign int32 + var fn Tdouble_t + var ix Tuint32_t + var _ /* tx at bp+8 */ [1]float64 + var _ /* ty at bp+16 */ [1]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e0, fn, ix, n, sign + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + /* 25+53 bit pi is good enough for medium size */ + if ix < uint32(0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */ + /* Use a specialized rint() to get fn. */ + fn = float64(x)*_invpio21 + _toint1 - _toint1 + n = int32(fn) + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + /* Matters with directed rounding. */ + if *(*float64)(unsafe.Pointer(y)) < -_pio41 { + n-- + fn-- + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } else { + if *(*float64)(unsafe.Pointer(y)) > _pio41 { + n++ + fn++ + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } + } + return n + } + if ix >= uint32(0x7f800000) { /* x is inf or NaN */ + *(*float64)(unsafe.Pointer(y)) = float64(x - x) + return 0 + } + /* scale x into [2^23, 2^24-1] */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + e0 = int32(ix>>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(23))) /* e0 = ilogb(|x|)-23, positive */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix - uint32(e0< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) +} + +// C documentation +// +// // FIXME: macro in math.h +func X__signbitf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) +} + +func X__signbitl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__signbit(tls, x) +} + +var _S1 = -Float64FromFloat64(0.16666666666666632) /* 0xBFC55555, 0x55555549 */ +var _S2 = float64(0.00833333333332249) /* 0x3F811111, 0x1110F8A6 */ +var _S3 = -Float64FromFloat64(0.0001984126982985795) /* 0xBF2A01A0, 0x19C161D5 */ +var _S4 = float64(2.7557313707070068e-06) /* 0x3EC71DE3, 0x57B1FE7D */ +var _S5 = -Float64FromFloat64(2.5050760253406863e-08) /* 0xBE5AE5E6, 0x8A2B9CEB */ +var _S6 = float64(1.58969099521155e-10) /* 0x3DE5D93A, 0x5ACFD57C */ + +func X__sin(tls *TLS, x float64, y float64, iy int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v iy=%v, (%v:)", tls, x, y, iy, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v, w, z Tdouble_t + _, _, _, _ = r, v, w, z + z = x * x + w = z * z + r = _S2 + z*(_S3+z*_S4) + z*w*(_S5+z*_S6) + v = z * x + if iy == 0 { + return x + v*(_S1+z*r) + } else { + return x - (z*(Float64FromFloat64(0.5)*y-v*r) - y - v*_S1) + } + return r1 +} + +// C documentation +// +// /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ + +var _S11 = -Float64FromFloat64(0.16666666641626524) /* -0.166666666416265235595 */ +var _S21 = float64(0.008333329385889463) /* 0.0083333293858894631756 */ +var _S31 = -Float64FromFloat64(0.00019839334836096632) /* -0.000198393348360966317347 */ +var _S41 = float64(2.718311493989822e-06) /* 0.0000027183114939898219064 */ + +func X__sindf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, w, z Tdouble_t + _, _, _, _ = r, s, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _S31 + z*_S41 + s = z * x + return float32(x + s*(_S11+z*_S21) + s*w*r) +} + +var _T = [13]float64{ + 0: float64(0.3333333333333341), + 1: float64(0.13333333333320124), + 2: float64(0.05396825397622605), + 3: float64(0.021869488294859542), + 4: float64(0.0088632398235993), + 5: float64(0.0035920791075913124), + 6: float64(0.0014562094543252903), + 7: float64(0.0005880412408202641), + 8: float64(0.0002464631348184699), + 9: float64(7.817944429395571e-05), + 10: float64(7.140724913826082e-05), + 11: -Float64FromFloat64(1.8558637485527546e-05), + 12: float64(2.590730518636337e-05), +} +var _pio42 = float64(0.7853981633974483) /* 3FE921FB, 54442D18 */ +var _pio4lo = float64(3.061616997868383e-17) /* 3C81A626, 33145C07 */ + +func X__tan(tls *TLS, x float64, y float64, odd int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v odd=%v, (%v:)", tls, x, y, odd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a, r, s, v, w, z, v1, v3 Tdouble_t + var a0, w0 float64 + var big, sign int32 + var hx Tuint32_t + var v2, v4 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, a0, big, hx, r, s, sign, v, w, w0, z, v1, v2, v3, v4 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + big = BoolInt32(hx&uint32(0x7fffffff) >= uint32(0x3FE59428)) /* |x| >= 0.6744 */ + if big != 0 { + sign = int32(hx >> int32(31)) + if sign != 0 { + x = -x + y = -y + } + x = _pio42 - x + (_pio4lo - y) + y = float64(0) + } + z = x * x + w = z * z + /* + * Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = _T[int32(1)] + w*(_T[int32(3)]+w*(_T[int32(5)]+w*(_T[int32(7)]+w*(_T[int32(9)]+w*_T[int32(11)])))) + v = z * (_T[int32(2)] + w*(_T[int32(4)]+w*(_T[int32(6)]+w*(_T[int32(8)]+w*(_T[int32(10)]+w*_T[int32(12)]))))) + s = z * x + r = y + z*(s*(r+v)+y) + s*_T[0] + w = x + r + if big != 0 { + s = float64(int32(1) - int32(2)*odd) + v = s - float64(2)*(x+(r-w*w/(w+s))) + if sign != 0 { + v1 = -v + } else { + v1 = v + } + return v1 + } + if !(odd != 0) { + return w + } + /* -1.0/(x+r) has up to 2ulp error, so compute it accurately */ + w0 = w + v2 = *(*Tuint64_t)(unsafe.Pointer(&w0))>>Int32FromInt32(32)<>Int32FromInt32(32)< %v", r1) }() + } + var r, s, t, u, w, z Tdouble_t + var v1 float64 + _, _, _, _, _, _, _ = r, s, t, u, w, z, v1 + z = x * x + /* + * Split up the polynomial into small independent terms to give + * opportunities for parallel evaluation. The chosen splitting is + * micro-optimized for Athlons (XP, X64). It costs 2 multiplications + * relative to Horner's method on sequential machines. + * + * We add the small terms from lowest degree up for efficiency on + * non-sequential machines (the lowest degree terms tend to be ready + * earlier). Apart from this, we don't care about order of + * operations, and don't need to to care since we have precision to + * spare. However, the chosen splitting is good for accuracy too, + * and would give results as accurate as Horner's method if the + * small terms were added from highest degree down. + */ + r = _T1[int32(4)] + z*_T1[int32(5)] + t = _T1[int32(2)] + z*_T1[int32(3)] + w = z * z + s = z * x + u = _T1[0] + z*_T1[int32(1)] + r = x + s*u + s*w*(t+w*r) + if odd != 0 { + v1 = -Float64FromFloat64(1) / r + } else { + v1 = r + } + return float32(v1) +} + +var _pio2_hi = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +var _pS0 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS1 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS2 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS3 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS4 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS5 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS1 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS2 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS3 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS4 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS0 + z*(_pS1+z*(_pS2+z*(_pS3+z*(_pS4+z*_pS5))))) + q = float64(1) + z*(_qS1+z*(_qS2+z*(_qS3+z*_qS4))) + return p / q +} + +func Xacos(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, df, s, w, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, df, hx, ix, lx, s, w, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* acos(1)=0, acos(-1)=pi */ + if hx>>int32(31) != 0 { + return Float64FromInt32(2)*_pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + if ix <= uint32(0x3c600000) { /* |x| < 2**-57 */ + return _pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return _pio2_hi - (x - (_pio2_lo - x*_R(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (float64(1) + x) * float64(0.5) + s = Xsqrt(tls, z) + w = _R(tls, z)*s - _pio2_lo + return Float64FromInt32(2) * (_pio2_hi - (s + w)) + } + /* x > 0.5 */ + z = (float64(1) - x) * float64(0.5) + s = Xsqrt(tls, z) + df = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&df))>>Int32FromInt32(32)< %v", r) }() + } + var c, df, s, w, z float32 + var hx, ix, v1 Tuint32_t + _, _, _, _, _, _, _, _ = c, df, hx, ix, s, w, z, v1 + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3f800000) { + if ix == uint32(0x3f800000) { + if hx>>int32(31) != 0 { + return Float32FromInt32(2)*_pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return Float32FromInt32(0) + } + return Float32FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3f000000) { + if ix <= uint32(0x32800000) { /* |x| < 2**-26 */ + return _pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return _pio2_hi1 - (x - (_pio2_lo1 - x*_R1(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (Float32FromInt32(1) + x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + w = _R1(tls, z)*s - _pio2_lo1 + return Float32FromInt32(2) * (_pio2_hi1 - (s + w)) + } + /* x > 0.5 */ + z = (Float32FromInt32(1) - x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + hx = *(*Tuint32_t)(unsafe.Pointer(&s)) + v1 = hx & uint32(0xfffff000) + df = *(*float32)(unsafe.Pointer(&v1)) + c = (z - df*df) / (s + df) + w = _R1(tls, z)*s + c + return Float32FromInt32(2) * (df + w) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacosh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e uint32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = e + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + /* x < 1 domain error is handled in the called functions */ + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| < 2, up to 2ulp error in [1,1.125] */ + return Xlog1p(tls, x-Float64FromInt32(1)+Xsqrt(tls, (x-Float64FromInt32(1))*(x-Float64FromInt32(1))+Float64FromInt32(2)*(x-Float64FromInt32(1)))) + } + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| < 0x1p26 */ + return Xlog(tls, Float64FromInt32(2)*x-Float64FromInt32(1)/(x+Xsqrt(tls, x*x-Float64FromInt32(1)))) + } + /* |x| >= 0x1p26 or nan */ + return Xlog(tls, x) + float64(0.6931471805599453) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacoshf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = a + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + a = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if a < uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 0x1p12 or x <= -2 or nan */ + return Xlogf(tls, x) + Float32FromFloat32(0.6931471805599453) +} + +func Xacoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacosh(tls, x) +} + +func Xacosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacos(tls, x) +} + +var _pio2_hi2 = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo2 = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +/* coefficients for R(x^2) */ +var _pS02 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS12 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS22 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS31 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS41 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS51 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS12 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS21 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS31 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS41 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R2(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS02 + z*(_pS12+z*(_pS22+z*(_pS31+z*(_pS41+z*_pS51))))) + q = float64(1) + z*(_qS12+z*(_qS21+z*(_qS31+z*_qS41))) + return p / q +} + +func Xasin(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, f, r, s, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, f, hx, ix, lx, r, s, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* asin(1) = +-pi/2 with inexact */ + return x*_pio2_hi2 + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + /* if 0x1p-1022 <= |x| < 0x1p-26, avoid raising underflow */ + if ix < uint32(0x3e500000) && ix >= uint32(0x00100000) { + return x + } + return x + x*_R2(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float64FromInt32(1) - Xfabs(tls, x)) * float64(0.5) + s = Xsqrt(tls, z) + r = _R2(tls, z) + if ix >= uint32(0x3fef3333) { /* if |x| > 0.975 */ + x = _pio2_hi2 - (Float64FromInt32(2)*(s+s*r) - _pio2_lo2) + } else { + /* f+c = sqrt(z) */ + f = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&f))>>Int32FromInt32(32)<>int32(31) != 0 { + return -x + } + return x +} + +var _pio2 = float64(1.5707963267948966) + +/* coefficients for R(x^2) */ +var _pS03 = float32(0.16666586697) +var _pS13 = float32(-Float64FromFloat64(0.042743422091)) +var _pS23 = float32(-Float64FromFloat64(0.008656363003)) +var _qS13 = float32(-Float64FromFloat64(0.7066296339)) + +func _R3(tls *TLS, z float32) (r float32) { + var p, q Tfloat_t + _, _ = p, q + p = z * (_pS03 + z*(_pS13+z*_pS23)) + q = Float32FromFloat32(1) + z*_qS13 + return p / q +} + +func Xasinf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var hx, ix Tuint32_t + var s float64 + var z float32 + _, _, _, _ = hx, ix, s, z + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x3f800000) { /* |x| >= 1 */ + if ix == uint32(0x3f800000) { /* |x| == 1 */ + return float32(float64(x)*_pio2 + Float64FromFloat32(7.52316384526264e-37)) + } /* asin(+-1) = +-pi/2 with inexact */ + return Float32FromInt32(0) / (x - x) /* asin(|x|>1) is NaN */ + } + if ix < uint32(0x3f000000) { /* |x| < 0.5 */ + /* if 0x1p-126 <= |x| < 0x1p-12, avoid raising underflow */ + if ix < uint32(0x39800000) && ix >= uint32(0x00800000) { + return x + } + return x + x*_R3(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float32FromInt32(1) - Xfabsf(tls, x)) * Float32FromFloat32(0.5) + s = Xsqrt(tls, float64(z)) + x = float32(_pio2 - Float64FromInt32(2)*(s+s*float64(_R3(tls, z)))) + if hx>>int32(31) != 0 { + return -x + } + return x +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| >= 0x1p26 or inf or nan */ + x3 = Xlog(tls, x3) + float64(0.6931471805599453) + } else { + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| >= 2 */ + x3 = Xlog(tls, Float64FromInt32(2)*x3+Float64FromInt32(1)/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+x3)) + } else { + if e >= uint32(Int32FromInt32(0x3ff)-Int32FromInt32(26)) { + /* |x| >= 0x1p-26, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1p(tls, x3+x3*x3/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+Float64FromInt32(1))) + } else { + /* |x| < 0x1p-26, raise inexact if x != 0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tuint32_t + var s uint32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = i, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = i + x3 = *(*float32)(unsafe.Pointer(bp)) + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(12)<= 0x1p12 or inf or nan */ + x3 = Xlogf(tls, x3) + Float32FromFloat32(0.6931471805599453) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 2 */ + x3 = Xlogf(tls, Float32FromInt32(2)*x3+Float32FromInt32(1)/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+x3)) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)<= 0x1p-12, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1pf(tls, x3+x3*x3/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+Float32FromInt32(1))) + } else { + /* |x| < 0x1p-12, raise inexact if x!=0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +func Xasinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasinh(tls, x) +} + +func Xasinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasin(tls, x) +} + +var _atanhi = [4]float64{ + 0: float64(0.4636476090008061), + 1: float64(0.7853981633974483), + 2: float64(0.982793723247329), + 3: float64(1.5707963267948966), +} + +var _atanlo = [4]float64{ + 0: float64(2.2698777452961687e-17), + 1: float64(3.061616997868383e-17), + 2: float64(1.3903311031230998e-17), + 3: float64(6.123233995736766e-17), +} + +var _aT = [11]float64{ + 0: float64(0.3333333333333293), + 1: -Float64FromFloat64(0.19999999999876483), + 2: float64(0.14285714272503466), + 3: -Float64FromFloat64(0.11111110405462356), + 4: float64(0.09090887133436507), + 5: -Float64FromFloat64(0.0769187620504483), + 6: float64(0.06661073137387531), + 7: -Float64FromFloat64(0.058335701337905735), + 8: float64(0.049768779946159324), + 9: -Float64FromFloat64(0.036531572744216916), + 10: float64(0.016285820115365782), +} + +func Xatan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tdouble_t + var y float32 + var y1, y2 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x44100000) { /* if |x| >= 2^66 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, __u2 Tuint64_t + var ix, iy, lx, ly, m Tuint32_t + var z, v6, v7 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, __u2, ix, iy, lx, ly, m, z, v1, v3, v5, v6, v7 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<> int32(32)) + lx = uint32(__u1) + __u2 = *(*Tuint64_t)(unsafe.Pointer(&y)) + iy = uint32(__u2 >> int32(32)) + ly = uint32(__u2) + if ix-uint32(0x3ff00000)|lx == uint32(0) { /* x = 1.0 */ + return Xatan(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix = ix & uint32(0x7fffffff) + iy = iy & uint32(0x7fffffff) + /* when y = 0 */ + if iy|ly == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix|lx == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi / Float64FromInt32(2) + } else { + v6 = _pi / Float64FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7ff00000) { + if iy == uint32(0x7ff00000) { + switch m { + case uint32(0): + return _pi / Float64FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi / Float64FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float64FromInt32(3) * _pi / Float64FromInt32(4) /* atan(+INF,-INF) */ + case uint32(3): + return float64(-Int32FromInt32(3)) * _pi / Float64FromInt32(4) /* atan(-INF,-INF) */ + } + } else { + switch m { + case uint32(0): + return float64(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float64FromFloat64(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi /* atan(+...,-INF) */ + case uint32(3): + return -_pi /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p64 */ + if ix+uint32(Int32FromInt32(64)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix, iy, m Tuint32_t + var z, v6, v7 float32 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _ = ix, iy, m, z, v1, v3, v5, v6, v7 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + y + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y)) + if ix == uint32(0x3f800000) { /* x=1.0 */ + return Xatanf(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix &= uint32(0x7fffffff) + iy &= uint32(0x7fffffff) + /* when y = 0 */ + if iy == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi1 /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi1 /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi1 / Float32FromInt32(2) + } else { + v6 = _pi1 / Float32FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7f800000) { + if iy == uint32(0x7f800000) { + switch m { + case uint32(0): + return _pi1 / Float32FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi1 / Float32FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float32FromInt32(3) * _pi1 / Float32FromInt32(4) /*atan(+INF,-INF)*/ + case uint32(3): + return float32(-Int32FromInt32(3)) * _pi1 / Float32FromInt32(4) /*atan(-INF,-INF)*/ + } + } else { + switch m { + case uint32(0): + return Float32FromFloat32(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float32FromFloat32(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi1 /* atan(+...,-INF) */ + case uint32(3): + return -_pi1 /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p26 */ + if ix+uint32(Int32FromInt32(26)< %v", r) }() + } + return Xatan2(tls, y, x) +} + +var _atanhi1 = [4]float32{ + 0: float32(0.46364760399), + 1: float32(0.78539812565), + 2: float32(0.98279368877), + 3: float32(1.5707962513), +} + +var _atanlo1 = [4]float32{ + 0: float32(5.012158244e-09), + 1: float32(3.7748947079e-08), + 2: float32(3.447321717e-08), + 3: float32(7.5497894159e-08), +} + +var _aT1 = [5]float32{ + 0: float32(0.33333328366), + 1: float32(-Float64FromFloat64(0.19999158382)), + 2: float32(0.14253635705), + 3: float32(-Float64FromFloat64(0.10648017377)), + 4: float32(0.061687607318), +} + +func Xatanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tfloat_t + var y float32 + var y1, y2 float64 + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x4c800000) { /* if |x| >= 2**26 */ + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + } + z = _atanhi1[int32(3)] + Float32FromFloat32(7.52316384526264e-37) + if sign != 0 { + v3 = -z + } else { + v3 = z + } + return v3 + } + if ix < uint32(0x3ee00000) { /* |x| < 0.4375 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + if ix < uint32(0x00800000) { + /* raise underflow for subnormal x */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } + id = -int32(1) + } else { + x3 = Xfabsf(tls, x3) + if ix < uint32(0x3f980000) { /* |x| < 1.1875 */ + if ix < uint32(0x3f300000) { /* 7/16 <= |x| < 11/16 */ + id = 0 + x3 = (Float32FromFloat32(2)*x3 - Float32FromFloat32(1)) / (Float32FromFloat32(2) + x3) + } else { /* 11/16 <= |x| < 19/16 */ + id = int32(1) + x3 = (x3 - Float32FromFloat32(1)) / (x3 + Float32FromFloat32(1)) + } + } else { + if ix < uint32(0x401c0000) { /* |x| < 2.4375 */ + id = int32(2) + x3 = (x3 - Float32FromFloat32(1.5)) / (Float32FromFloat32(1) + Float32FromFloat32(1.5)*x3) + } else { /* 2.4375 <= |x| < 2**26 */ + id = int32(3) + x3 = -Float32FromFloat32(1) / x3 + } + } + } + /* end of argument reduction */ + z = x3 * x3 + w = z * z + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z * (_aT1[0] + w*(_aT1[int32(2)]+w*_aT1[int32(4)])) + s2 = w * (_aT1[int32(1)] + w*_aT1[int32(3)]) + if id < 0 { + return x3 - x3*(s1+s2) + } + z = _atanhi1[id] - (x3*(s1+s2) - _atanlo1[id] - x3) + if sign != 0 { + v4 = -z + } else { + v4 = z + } + return v4 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = e, s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + y3 = *(*float64)(unsafe.Pointer(bp)) + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(1)) { + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(32)) { + /* handle underflow */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = float32(y3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(y3)) + } else { + y2 = float64(float32(y3)) + } + } + } + } else { + /* |x| < 0.5, up to 1.7ulp error */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*y3+Float64FromInt32(2)*y3*y3/(Float64FromInt32(1)-y3)) + } + } else { + /* avoid overflow */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*(y3/(Float64FromInt32(1)-y3))) + } + if s != 0 { + v1 = -y3 + } else { + v1 = y3 + } + return v1 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + y3 = *(*float32)(unsafe.Pointer(bp)) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(1)< %v", r) }() + } + return Xatanh(tls, x) +} + +func Xatanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan(tls, x) +} + +var _B1 = uint32(715094163) /* B1 = (1023-1023/3-0.03306235651)*2**20 */ +var _B2 = uint32(696219795) /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */ + +// C documentation +// +// /* |1/cbrt(x) - p(x)| < 2**-23.5 (~[-7.93e-8, 7.929e-8]). */ + +var _P0 = float64(1.87595182427177) /* 0x3ffe03e6, 0x0f61e692 */ +var _P1 = -Float64FromFloat64(1.8849797954337717) /* 0xbffe28e0, 0x92f02420 */ +var _P2 = float64(1.6214297201053545) /* 0x3ff9f160, 0x4a49d6c2 */ +var _P3 = -Float64FromFloat64(0.758397934778766) /* 0xbfe844cb, 0xbee751d9 */ +var _P4 = float64(0.14599619288661245) /* 0x3fc2b000, 0xd4e4edd7 */ + +func Xcbrt(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var hx Tuint32_t + var r, s, t, w Tdouble_t + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = hx, r, s, t, w, p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx >= uint32(0x7ff00000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* + * Rough cbrt to 5 bits: + * cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3) + * where e is integral and >= 0, m is real and in [0, 1), and "/" and + * "%" are integer division and modulus with rounding towards minus + * infinity. The RHS is always >= the LHS and has a maximum relative + * error of about 1 in 16. Adding a bias of -0.03306235651 to the + * (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE + * floating point representation, for finite positive normal values, + * ordinary integer divison of the value in bits magically gives + * almost exactly the RHS of the above provided we first subtract the + * exponent bias (1023 for doubles) and later add it back. We do the + * subtraction virtually to keep e >= 0 so that ordinary integer + * division rounds towards minus infinity; this is also efficient. + */ + if hx < uint32(0x00100000) { /* zero or subnormal? */ + *(*float64)(unsafe.Pointer(bp)) = x * float64(1.8014398509481984e+16) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx == uint32(0) { + return x + } /* cbrt(0) is itself */ + hx = hx/uint32(3) + _B2 + } else { + hx = hx/uint32(3) + _B1 + } + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) + t = *(*float64)(unsafe.Pointer(bp)) + /* + * New cbrt to 23 bits: + * cbrt(x) = t*cbrt(x/t**3) ~= t*P(t**3/x) + * where P(r) is a polynomial of degree 4 that approximates 1/cbrt(r) + * to within 2**-23.5 when |r - 1| < 1/10. The rough approximation + * has produced t such than |t/cbrt(x) - 1| ~< 1/32, and cubing this + * gives us bounds for r = t**3/x. + * + * Try to optimize for parallel evaluation as in __tanf.c. + */ + r = t * t * (t / x) + t = t * (_P0 + r*(_P1+r*_P2) + r*r*r*(_P3+r*_P4)) + /* + * Round t away from zero to 23 bits (sloppily except for ensuring that + * the result is larger in magnitude than cbrt(x) but not much more than + * 2 23-bit ulps larger). With rounding towards zero, the error bound + * would be ~5/6 instead of ~4/6. With a maximum error of 2 23-bit ulps + * in the rounded t, the infinite-precision error in the Newton + * approximation barely affects third digit in the final error + * 0.667; the error in the rounded t can be up to about 3 23-bit ulps + * before the final error is larger than 0.667 ulps. + */ + *(*float64)(unsafe.Pointer(bp)) = t + *(*Tuint64_t)(unsafe.Pointer(bp)) = (*(*Tuint64_t)(unsafe.Pointer(bp)) + Uint64FromUint32(0x80000000)) & uint64(0xffffffffc0000000) + t = *(*float64)(unsafe.Pointer(bp)) + /* one step Newton iteration to 53 bits with error < 0.667 ulps */ + s = t * t /* t*t is exact */ + r = x / s /* error <= 0.5 ulps; |r| < |t| */ + w = t + t /* t+t is exact */ + r = (r - t) / (w + r) /* r-t is exact; w+r ~= 3*t */ + t = t + t*r /* error <= 0.5 + 0.5/3 + epsilon */ + return t +} + +var _B11 = uint32(709958130) /* B1 = (127-127.0/3-0.03306235651)*2**23 */ +var _B21 = uint32(642849266) /* B2 = (127-127.0/3-24/3-0.03306235651)*2**23 */ + +func Xcbrtf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var T, r Tdouble_t + var hx Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = T, hx, r + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if hx >= uint32(0x7f800000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* rough cbrt to 5 bits */ + if hx < uint32(0x00800000) { /* zero or subnormal? */ + if hx == uint32(0) { + return x + } /* cbrt(+-0) is itself */ + *(*float32)(unsafe.Pointer(bp)) = x * Float32FromFloat32(1.6777216e+07) + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + hx = hx/uint32(3) + _B21 + } else { + hx = hx/uint32(3) + _B11 + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= hx + /* + * First step Newton iteration (solving t*t-x/t == 0) to 16 bits. In + * double precision so that its terms can be arranged for efficiency + * without causing overflow or underflow. + */ + T = float64(*(*float32)(unsafe.Pointer(bp))) + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* + * Second step Newton iteration to 47 bits. In double precision for + * efficiency and accuracy. + */ + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* rounding to 24 bits is perfect in round-to-nearest mode */ + return float32(T) +} + +func Xcbrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcbrt(tls, x) +} + +const DBL_EPSILON5 = 2.220446049250313e-16 + +var _toint2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xceil(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2, v1 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint2 + _toint2 - x3 + } else { + y3 = x3 + _toint2 - _toint2 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(1) + } + return v1 + } + if y3 < Float64FromInt32(0) { + return x3 + y3 + Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON6 = 0 + +func Xceilf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*float32)(unsafe.Pointer(bp)) = float32(-Float64FromFloat64(0)) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xceil(tls, x) +} + +func Xcopysign(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1, p2 uintptr + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _ = p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&(Uint64FromUint64(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xcopysignl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcopysign(tls, x, y) +} + +func Xcos(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _ = ix, n, y, y1, y2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) */ + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + return float64(1) + } + return X__cos(tls, x3, Float64FromInt32(0)) + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(1): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(2): + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + default: + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + } + return r +} + +const M_PI_23 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _c1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _c2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _c3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _c4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xcosf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y float32 + var y1, y2, v1, v2 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x != 0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + return Float32FromFloat32(1) + } + return X__cosdf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix > uint32(0x4016cbe3) { /* |x| ~> 3*pi/4 */ + if sign != 0 { + v1 = float64(x3) + _c2pio2 + } else { + v1 = float64(x3) - _c2pio2 + } + return -X__cosdf(tls, v1) + } else { + if sign != 0 { + return X__sindf(tls, float64(x3)+_c1pio2) + } else { + return X__sindf(tls, _c1pio2-float64(x3)) + } + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix > uint32(0x40afeddf) { /* |x| ~> 7*pi/4 */ + if sign != 0 { + v2 = float64(x3) + _c4pio2 + } else { + v2 = float64(x3) - _c4pio2 + } + return X__cosdf(tls, v2) + } else { + if sign != 0 { + return X__sindf(tls, float64(-x3)-_c3pio2) + } else { + return X__sindf(tls, float64(x3)-_c3pio2) + } + } + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case uint32(1): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + case uint32(2): + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + default: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_24 = 0 + +// C documentation +// +// /* cosh(x) = (exp(x) + 1/exp(x))/2 +// * = 1 + 0.5*(exp(x)-1)*(exp(x)-1)/exp(x) +// * = 1 + x*x/2 + o(x^4) +// */ +func Xcosh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y1, y2 float64 + var w Tuint32_t + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(2) */ + if w < uint32(0x3fe62e42) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26) then the 1/t is not needed */ + return float64(0.5) * (t + Float64FromInt32(1)/t) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, x3, float64(1)) + return t +} + +func Xcoshf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(2) */ + if w < uint32(0x3f317217) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< log(FLT_MAX) or nan */ + t = X__expo2f(tls, x3, Float32FromFloat32(1)) + return t +} + +func Xcoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcosh(tls, x) +} + +func Xcosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcos(tls, x) +} + +var _erx = float64(0.8450629115104675) /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx8 = float64(1.0270333367641007) /* 0x3FF06EBA, 0x8214DB69 */ +var _pp0 = float64(0.12837916709551256) /* 0x3FC06EBA, 0x8214DB68 */ +var _pp1 = -Float64FromFloat64(0.3250421072470015) /* 0xBFD4CD7D, 0x691CB913 */ +var _pp2 = -Float64FromFloat64(0.02848174957559851) /* 0xBF9D2A51, 0xDBD7194F */ +var _pp3 = -Float64FromFloat64(0.005770270296489442) /* 0xBF77A291, 0x236668E4 */ +var _pp4 = -Float64FromFloat64(2.3763016656650163e-05) /* 0xBEF8EAD6, 0x120016AC */ +var _qq1 = float64(0.39791722395915535) /* 0x3FD97779, 0xCDDADC09 */ +var _qq2 = float64(0.0650222499887673) /* 0x3FB0A54C, 0x5536CEBA */ +var _qq3 = float64(0.005081306281875766) /* 0x3F74D022, 0xC4D36B0F */ +var _qq4 = float64(0.00013249473800432164) /* 0x3F215DC9, 0x221C1A10 */ +var _qq5 = -Float64FromFloat64(3.960228278775368e-06) /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa0 = -Float64FromFloat64(0.0023621185607526594) /* 0xBF6359B8, 0xBEF77538 */ +var _pa1 = float64(0.41485611868374833) /* 0x3FDA8D00, 0xAD92B34D */ +var _pa2 = -Float64FromFloat64(0.3722078760357013) /* 0xBFD7D240, 0xFBB8C3F1 */ +var _pa3 = float64(0.31834661990116175) /* 0x3FD45FCA, 0x805120E4 */ +var _pa4 = -Float64FromFloat64(0.11089469428239668) /* 0xBFBC6398, 0x3D3E28EC */ +var _pa5 = float64(0.035478304325618236) /* 0x3FA22A36, 0x599795EB */ +var _pa6 = -Float64FromFloat64(0.002166375594868791) /* 0xBF61BF38, 0x0A96073F */ +var _qa1 = float64(0.10642088040084423) /* 0x3FBB3E66, 0x18EEE323 */ +var _qa2 = float64(0.540397917702171) /* 0x3FE14AF0, 0x92EB6F33 */ +var _qa3 = float64(0.07182865441419627) /* 0x3FB2635C, 0xD99FE9A7 */ +var _qa4 = float64(0.12617121980876164) /* 0x3FC02660, 0xE763351F */ +var _qa5 = float64(0.01363708391202905) /* 0x3F8BEDC2, 0x6B51DD1C */ +var _qa6 = float64(0.011984499846799107) /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra0 = -Float64FromFloat64(0.009864944034847148) /* 0xBF843412, 0x600D6435 */ +var _ra1 = -Float64FromFloat64(0.6938585727071818) /* 0xBFE63416, 0xE4BA7360 */ +var _ra2 = -Float64FromFloat64(10.558626225323291) /* 0xC0251E04, 0x41B0E726 */ +var _ra3 = -Float64FromFloat64(62.375332450326006) /* 0xC04F300A, 0xE4CBA38D */ +var _ra4 = -Float64FromFloat64(162.39666946257347) /* 0xC0644CB1, 0x84282266 */ +var _ra5 = -Float64FromFloat64(184.60509290671104) /* 0xC067135C, 0xEBCCABB2 */ +var _ra6 = -Float64FromFloat64(81.2874355063066) /* 0xC0545265, 0x57E4D2F2 */ +var _ra7 = -Float64FromFloat64(9.814329344169145) /* 0xC023A0EF, 0xC69AC25C */ +var _sa1 = float64(19.651271667439257) /* 0x4033A6B9, 0xBD707687 */ +var _sa2 = float64(137.65775414351904) /* 0x4061350C, 0x526AE721 */ +var _sa3 = float64(434.56587747522923) /* 0x407B290D, 0xD58A1A71 */ +var _sa4 = float64(645.3872717332679) /* 0x40842B19, 0x21EC2868 */ +var _sa5 = float64(429.00814002756783) /* 0x407AD021, 0x57700314 */ +var _sa6 = float64(108.63500554177944) /* 0x405B28A3, 0xEE48AE2C */ +var _sa7 = float64(6.570249770319282) /* 0x401A47EF, 0x8E484A93 */ +var _sa8 = -Float64FromFloat64(0.0604244152148581) /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb0 = -Float64FromFloat64(0.0098649429247001) /* 0xBF843412, 0x39E86F4A */ +var _rb1 = -Float64FromFloat64(0.799283237680523) /* 0xBFE993BA, 0x70C285DE */ +var _rb2 = -Float64FromFloat64(17.757954917754752) /* 0xC031C209, 0x555F995A */ +var _rb3 = -Float64FromFloat64(160.63638485582192) /* 0xC064145D, 0x43C5ED98 */ +var _rb4 = -Float64FromFloat64(637.5664433683896) /* 0xC083EC88, 0x1375F228 */ +var _rb5 = -Float64FromFloat64(1025.0951316110772) /* 0xC0900461, 0x6A2E5992 */ +var _rb6 = -Float64FromFloat64(483.5191916086514) /* 0xC07E384E, 0x9BDC383F */ +var _sb1 = float64(30.33806074348246) /* 0x403E568B, 0x261D5190 */ +var _sb2 = float64(325.7925129965739) /* 0x40745CAE, 0x221B9F0A */ +var _sb3 = float64(1536.729586084437) /* 0x409802EB, 0x189D5118 */ +var _sb4 = float64(3199.8582195085955) /* 0x40A8FFB7, 0x688C246A */ +var _sb5 = float64(2553.0504064331644) /* 0x40A3F219, 0xCEDF3BE6 */ +var _sb6 = float64(474.52854120695537) /* 0x407DA874, 0xE79FE763 */ +var _sb7 = -Float64FromFloat64(22.44095244658582) /* 0xC03670E2, 0x42712D62 */ + +func _erfc1(tls *TLS, x float64) (r float64) { + var P, Q, s Tdouble_t + _, _, _ = P, Q, s + s = Xfabs(tls, x) - Float64FromInt32(1) + P = _pa0 + s*(_pa1+s*(_pa2+s*(_pa3+s*(_pa4+s*(_pa5+s*_pa6))))) + Q = Float64FromInt32(1) + s*(_qa1+s*(_qa2+s*(_qa3+s*(_qa4+s*(_qa5+s*_qa6))))) + return Float64FromInt32(1) - _erx - P/Q +} + +func _erfc2(tls *TLS, ix Tuint32_t, x float64) (r float64) { + var R, S, s Tdouble_t + var z float64 + var v1 Tuint64_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3ff40000) { /* |x| < 1.25 */ + return _erfc1(tls, x) + } + x = Xfabs(tls, x) + s = Float64FromInt32(1) / (x * x) + if ix < uint32(0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */ + R = _ra0 + s*(_ra1+s*(_ra2+s*(_ra3+s*(_ra4+s*(_ra5+s*(_ra6+s*_ra7)))))) + S = float64(1) + s*(_sa1+s*(_sa2+s*(_sa3+s*(_sa4+s*(_sa5+s*(_sa6+s*(_sa7+s*_sa8))))))) + } else { /* |x| > 1/.35 */ + R = _rb0 + s*(_rb1+s*(_rb2+s*(_rb3+s*(_rb4+s*(_rb5+s*_rb6))))) + S = float64(1) + s*(_sb1+s*(_sb2+s*(_sb3+s*(_sb4+s*(_sb5+s*(_sb6+s*_sb7)))))) + } + z = x + v1 = *(*Tuint64_t)(unsafe.Pointer(&z))>>Int32FromInt32(32)< %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float64 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float64(int32(1)-int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3e300000) { /* |x| < 2**-28 */ + /* avoid underflow */ + return float64(0.125) * (Float64FromInt32(8)*x + _efx8*x) + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40180000) { /* 0.84375 <= |x| < 6 */ + y = Float64FromInt32(1) - _erfc2(tls, ix, x) + } else { + y = Float64FromInt32(1) - Float64FromFloat64(2.2250738585072014e-308) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfc(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float64 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float64(int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3c700000) { /* |x| < 2**-56 */ + return float64(1) - x + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + if sign != 0 || ix < uint32(0x3fd00000) { /* x < 1/4 */ + return float64(1) - (x + x*y) + } + return float64(0.5) - (x - float64(0.5) + x*y) + } + if ix < uint32(0x403c0000) { /* 0.84375 <= |x| < 28 */ + if sign != 0 { + v1 = Float64FromInt32(2) - _erfc2(tls, ix, x) + } else { + v1 = _erfc2(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float64FromInt32(2) - Float64FromFloat64(2.2250738585072014e-308) + } else { + v2 = Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(2.2250738585072014e-308) + } + return v2 +} + +var _erx1 = float32(0.84506291151) /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx81 = float32(1.027033329) /* 0x3f8375d4 */ +var _pp01 = float32(0.12837916613) /* 0x3e0375d4 */ +var _pp11 = float32(-Float64FromFloat64(0.32504209876)) /* 0xbea66beb */ +var _pp21 = float32(-Float64FromFloat64(0.028481749818)) /* 0xbce9528f */ +var _pp31 = float32(-Float64FromFloat64(0.005770270247)) /* 0xbbbd1489 */ +var _pp41 = float32(-Float64FromFloat64(2.3763017452e-05)) /* 0xb7c756b1 */ +var _qq11 = float32(0.39791721106) /* 0x3ecbbbce */ +var _qq21 = float32(0.0650222525) /* 0x3d852a63 */ +var _qq31 = float32(0.0050813062117) /* 0x3ba68116 */ +var _qq41 = float32(0.00013249473704) /* 0x390aee49 */ +var _qq51 = float32(-Float64FromFloat64(3.9602282413e-06)) /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa01 = float32(-Float64FromFloat64(0.0023621185683)) /* 0xbb1acdc6 */ +var _pa11 = float32(0.41485610604) /* 0x3ed46805 */ +var _pa21 = float32(-Float64FromFloat64(0.37220788002)) /* 0xbebe9208 */ +var _pa31 = float32(0.31834661961) /* 0x3ea2fe54 */ +var _pa41 = float32(-Float64FromFloat64(0.11089469492)) /* 0xbde31cc2 */ +var _pa51 = float32(0.035478305072) /* 0x3d1151b3 */ +var _pa61 = float32(-Float64FromFloat64(0.0021663755178)) /* 0xbb0df9c0 */ +var _qa11 = float32(0.10642088205) /* 0x3dd9f331 */ +var _qa21 = float32(0.54039794207) /* 0x3f0a5785 */ +var _qa31 = float32(0.071828655899) /* 0x3d931ae7 */ +var _qa41 = float32(0.12617121637) /* 0x3e013307 */ +var _qa51 = float32(0.013637083583) /* 0x3c5f6e13 */ +var _qa61 = float32(0.011984500103) /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra01 = float32(-Float64FromFloat64(0.0098649440333)) /* 0xbc21a093 */ +var _ra11 = float32(-Float64FromFloat64(0.6938585639)) /* 0xbf31a0b7 */ +var _ra21 = float32(-Float64FromFloat64(10.558626175)) /* 0xc128f022 */ +var _ra31 = float32(-Float64FromFloat64(62.375331879)) /* 0xc2798057 */ +var _ra41 = float32(-Float64FromFloat64(162.39666748)) /* 0xc322658c */ +var _ra51 = float32(-Float64FromFloat64(184.60508728)) /* 0xc3389ae7 */ +var _ra61 = float32(-Float64FromFloat64(81.287437439)) /* 0xc2a2932b */ +var _ra71 = float32(-Float64FromFloat64(9.8143291473)) /* 0xc11d077e */ +var _sa11 = float32(19.65127182) /* 0x419d35ce */ +var _sa21 = float32(137.65776062) /* 0x4309a863 */ +var _sa31 = float32(434.56588745) /* 0x43d9486f */ +var _sa41 = float32(645.38726807) /* 0x442158c9 */ +var _sa51 = float32(429.00814819) /* 0x43d6810b */ +var _sa61 = float32(108.63500214) /* 0x42d9451f */ +var _sa71 = float32(6.5702495575) /* 0x40d23f7c */ +var _sa81 = float32(-Float64FromFloat64(0.060424413532)) /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb01 = float32(-Float64FromFloat64(0.009864943102)) /* 0xbc21a092 */ +var _rb11 = float32(-Float64FromFloat64(0.79928326607)) /* 0xbf4c9dd4 */ +var _rb21 = float32(-Float64FromFloat64(17.757955551)) /* 0xc18e104b */ +var _rb31 = float32(-Float64FromFloat64(160.63638306)) /* 0xc320a2ea */ +var _rb41 = float32(-Float64FromFloat64(637.56646729)) /* 0xc41f6441 */ +var _rb51 = float32(-Float64FromFloat64(1025.0950928)) /* 0xc480230b */ +var _rb61 = float32(-Float64FromFloat64(483.51919556)) /* 0xc3f1c275 */ +var _sb11 = float32(30.338060379) /* 0x41f2b459 */ +var _sb21 = float32(325.79251099) /* 0x43a2e571 */ +var _sb31 = float32(1536.7296143) /* 0x44c01759 */ +var _sb41 = float32(3199.8581543) /* 0x4547fdbb */ +var _sb51 = float32(2553.050293) /* 0x451f90ce */ +var _sb61 = float32(474.52853394) /* 0x43ed43a7 */ +var _sb71 = float32(-Float64FromFloat64(22.440952301)) /* 0xc1b38712 */ + +func _erfc11(tls *TLS, x float32) (r float32) { + var P, Q, s Tfloat_t + _, _, _ = P, Q, s + s = Xfabsf(tls, x) - Float32FromInt32(1) + P = _pa01 + s*(_pa11+s*(_pa21+s*(_pa31+s*(_pa41+s*(_pa51+s*_pa61))))) + Q = Float32FromInt32(1) + s*(_qa11+s*(_qa21+s*(_qa31+s*(_qa41+s*(_qa51+s*_qa61))))) + return Float32FromInt32(1) - _erx1 - P/Q +} + +func _erfc21(tls *TLS, ix Tuint32_t, x float32) (r float32) { + var R, S, s Tfloat_t + var z float32 + var v1 Tuint32_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3fa00000) { /* |x| < 1.25 */ + return _erfc11(tls, x) + } + x = Xfabsf(tls, x) + s = Float32FromInt32(1) / (x * x) + if ix < uint32(0x4036db6d) { /* |x| < 1/0.35 */ + R = _ra01 + s*(_ra11+s*(_ra21+s*(_ra31+s*(_ra41+s*(_ra51+s*(_ra61+s*_ra71)))))) + S = Float32FromFloat32(1) + s*(_sa11+s*(_sa21+s*(_sa31+s*(_sa41+s*(_sa51+s*(_sa61+s*(_sa71+s*_sa81))))))) + } else { /* |x| >= 1/0.35 */ + R = _rb01 + s*(_rb11+s*(_rb21+s*(_rb31+s*(_rb41+s*(_rb51+s*_rb61))))) + S = Float32FromFloat32(1) + s*(_sb11+s*(_sb21+s*(_sb31+s*(_sb41+s*(_sb51+s*(_sb61+s*_sb71)))))) + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + v1 = ix & uint32(0xffffe000) + z = *(*float32)(unsafe.Pointer(&v1)) + return Xexpf(tls, -z*z-Float32FromFloat32(0.5625)) * Xexpf(tls, (z-x)*(z+x)+R/S) / x +} + +func Xerff(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float32 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float32(int32(1)-int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x31800000) { /* |x| < 2**-28 */ + /*avoid underflow */ + return Float32FromFloat32(0.125) * (Float32FromInt32(8)*x + _efx81*x) + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromInt32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40c00000) { /* |x| < 6 */ + y = Float32FromInt32(1) - _erfc21(tls, ix, x) + } else { + y = Float32FromInt32(1) - Float32FromFloat32(7.52316384526264e-37) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfcf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float32 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float32(int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x23800000) { /* |x| < 2**-56 */ + return Float32FromFloat32(1) - x + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromFloat32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + if sign != 0 || ix < uint32(0x3e800000) { /* x < 1/4 */ + return Float32FromFloat32(1) - (x + x*y) + } + return Float32FromFloat32(0.5) - (x - Float32FromFloat32(0.5) + x*y) + } + if ix < uint32(0x41e00000) { /* |x| < 28 */ + if sign != 0 { + v1 = Float32FromInt32(2) - _erfc21(tls, ix, x) + } else { + v1 = _erfc21(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float32FromInt32(2) - Float32FromFloat32(7.52316384526264e-37) + } else { + v2 = Float32FromFloat32(7.52316384526264e-37) * Float32FromFloat32(7.52316384526264e-37) + } + return v2 +} + +func Xerfl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerf(tls, x) +} + +func Xerfcl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerfc(tls, x) +} + +const EXP2_POLY_ORDER = 5 +const EXP_POLY_ORDER = 5 +const EXP_TABLE_BITS = 7 +const EXP_USE_TOINT_NARROW = 0 +const N = 128 + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by <= 460. */ + sbits = sbits - Uint64FromUint64(1009)<> int32(52)) +} + +func Xexp(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v5 Tuint64_t + var kd, r, r2, scale, tail, tmp, z Tdouble_t + var y, v1, v2, v4, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v4, v5, v6 + abstop = _top12(tls, x1) & uint32(0x7ff) + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= _top12(tls, float64(512))-_top12(tls, float64(5.551115123125783e-17)) { + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top12(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top12(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if *(*Tuint64_t)(unsafe.Pointer(&x1))>>int32(63) != 0 { + return X__math_uflow(tls, uint32(0)) + } else { + return X__math_oflow(tls, uint32(0)) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v2 = y + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v6 = y + goto _7 +_7: + return v6 +} + +const HUGE = 0 + +func Xexp10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float64 + var _ /* n at bp+0 */ float64 + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = Xmodf(tls, x, bp) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = *(*float64)(unsafe.Pointer(bp)) + /* fabs(n) < 16 without raising invalid on nan */ + if *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(52)&uint64(0x7ff) < uint64(Int32FromInt32(0x3ff)+Int32FromInt32(4)) { + if !(y != 0) { + return _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + y = Xexp2(tls, float64(3.321928094887362)*y) + return y * _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + return Xpow(tls, float64(10), x) +} + +var _p10 = [31]float64{ + 0: float64(1e-15), + 1: float64(1e-14), + 2: float64(1e-13), + 3: float64(1e-12), + 4: float64(1e-11), + 5: float64(1e-10), + 6: float64(1e-09), + 7: float64(1e-08), + 8: float64(1e-07), + 9: float64(1e-06), + 10: float64(1e-05), + 11: float64(0.0001), + 12: float64(0.001), + 13: float64(0.01), + 14: float64(0.1), + 15: Float64FromInt32(1), + 16: float64(10), + 17: float64(100), + 18: float64(1000), + 19: float64(10000), + 20: float64(100000), + 21: float64(1e+06), + 22: float64(1e+07), + 23: float64(1e+08), + 24: float64(1e+09), + 25: float64(1e+10), + 26: float64(1e+11), + 27: float64(1e+12), + 28: float64(1e+13), + 29: float64(1e+14), + 30: float64(1e+15), +} + +func Xpow10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xexp10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float32 + var _ /* n at bp+0 */ float32 + var _ /* u at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = Xmodff(tls, x, bp) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = *(*float32)(unsafe.Pointer(bp)) + /* fabsf(n) < 8 without raising invalid on nan */ + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))>>int32(23)&uint32(0xff) < uint32(Int32FromInt32(0x7f)+Int32FromInt32(3)) { + if !(y != 0) { + return _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + y = Xexp2f(tls, Float32FromFloat32(3.321928094887362)*y) + return y * _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + return float32(Xexp2(tls, float64(3.321928094887362)*float64(x))) +} + +var _p101 = [15]float32{ + 0: Float32FromFloat32(1e-07), + 1: Float32FromFloat32(1e-06), + 2: Float32FromFloat32(1e-05), + 3: Float32FromFloat32(0.0001), + 4: Float32FromFloat32(0.001), + 5: Float32FromFloat32(0.01), + 6: Float32FromFloat32(0.1), + 7: Float32FromInt32(1), + 8: float32(10), + 9: float32(100), + 10: float32(1000), + 11: float32(10000), + 12: float32(100000), + 13: float32(1e+06), + 14: float32(1e+07), +} + +func Xpow10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10f(tls, x) +} + +func Xexp10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xpow10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10l(tls, x) +} + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase1(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by 1. */ + sbits = sbits - Uint64FromUint64(1)<> int32(52)) +} + +func Xexp2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v7 Tuint64_t + var kd, r, r2, scale, tail, tmp Tdouble_t + var y, v1, v2, v3, v4, v6, v8 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, v1, v2, v3, v4, v6, v7, v8 + abstop = _top121(tls, x1) & uint32(0x7ff) + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= _top121(tls, float64(512))-_top121(tls, float64(5.551115123125783e-17)) { + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top121(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top121(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if !(*(*Tuint64_t)(unsafe.Pointer(&x1))>>Int32FromInt32(63) != 0) { + return X__math_oflow(tls, uint32(0)) + } else { + v2 = -Float64FromFloat64(1075) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) >= *(*Tuint64_t)(unsafe.Pointer(&v2)) { + return X__math_uflow(tls, uint32(0)) + } + } + } + v3 = float64(928) + if uint64(2)**(*Tuint64_t)(unsafe.Pointer(&x1)) > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Large x is special cased below. */ + abstop = uint32(0) + } + } + /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */ + /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */ + y = x1 + X__exp_data.Fexp2_shift + v4 = y + goto _5 +_5: + kd = v4 + v6 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v6)) /* k. */ + kd -= X__exp_data.Fexp2_shift /* k/N for int k. */ + r = x1 - kd + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-65 and scale > 2^-928, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v8 = y + goto _9 +_9: + return v8 +} + +const EXP2F_POLY_ORDER = 3 +const EXP2F_TABLE_BITS = 5 +const N1 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.) +Wrong count: 168353 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top122(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexp2f(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top122(tls, x2) & uint32(0x7ff) + if abstop >= _top122(tls, Float32FromFloat32(128)) { + /* |x| >= 128 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top122(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(0) { + return X__math_oflowf(tls, uint32(0)) + } + if x2 <= -Float32FromFloat32(150) { + return X__math_uflowf(tls, uint32(0)) + } + } + /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ + y1 = xd + X__exp2f_data.Fshift_scaled + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift_scaled /* k/N for int k. */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp2(tls, x) +} + +const N2 = 128 + +type Texp_data = struct { + Finvln2N float64 + Fshift float64 + Fnegln2hiN float64 + Fnegln2loN float64 + Fpoly [4]float64 + Fexp2_shift float64 + Fexp2_poly [5]float64 + Ftab [256]Tuint64_t +} + +const N3 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.) +Wrong count: 170635 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top123(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexpf(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top123(tls, x2) & uint32(0x7ff) + if abstop >= _top123(tls, Float32FromFloat32(88)) { + /* |x| >= 88 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top123(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(88.72283172607422) { /* x > log(0x1p128) ~= 88.72 */ + return X__math_oflowf(tls, uint32(0)) + } + if x2 < -Float32FromFloat32(103.97207641601562) { /* x < log(0x1p-150) ~= -103.97 */ + return X__math_uflowf(tls, uint32(0)) + } + } + /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */ + z = X__exp2f_data.Finvln2_scaled * xd + /* Round and convert z to int, the result is in [-150*N, 128*N] and + ideally ties-to-even rule is used, otherwise the magnitude of r + can be bigger which gives larger approximation error. */ + y1 = z + X__exp2f_data.Fshift + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift + r = z - kd + /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp(tls, x) +} + +var _o_threshold = float64(709.782712893384) /* 0x40862E42, 0xFEFA39EF */ +var _ln2_hi = float64(0.6931471803691238) /* 0x3fe62e42, 0xfee00000 */ +var _ln2_lo = float64(1.9082149292705877e-10) /* 0x3dea39ef, 0x35793c76 */ +var _invln2 = float64(1.4426950408889634) /* 0x3ff71547, 0x652b82fe */ +/* Scaled Q's: Qn_here = 2**n * Qn_above, for R(2*z) where z = hxs = x*x/2: */ +var _Q1 = -Float64FromFloat64(0.03333333333333313) /* BFA11111 111110F4 */ +var _Q2 = float64(0.0015873015872548146) /* 3F5A01A0 19FE5585 */ +var _Q3 = -Float64FromFloat64(7.93650757867488e-05) /* BF14CE19 9EAADBB7 */ +var _Q4 = float64(4.008217827329362e-06) /* 3ED0CFCA 86E65239 */ +var _Q5 = -Float64FromFloat64(2.0109921818362437e-07) /* BE8AFDB7 6E09C32D */ + +func Xexpm1(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tdouble_t + var hx Tuint32_t + var k, sign int32 + var y float32 + var y1, y2, v3 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1, v3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4043687A) { /* if |x|>=56*ln2 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< _o_threshold { + x3 *= float64(8.98846567431158e+307) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi + lo = _ln2_lo + k = int32(1) + } else { + hi = x3 + _ln2_hi + lo = -_ln2_lo + k = -int32(1) + } + } else { + if sign != 0 { + v3 = -Float64FromFloat64(0.5) + } else { + v3 = float64(0.5) + } + k = int32(_invln2*x3 + v3) + t = float64(k) + hi = x3 - t*_ln2_hi /* t*ln2_hi is exact here */ + lo = t * _ln2_lo + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x3c900000) { /* |x| < 2**-54, return x */ + if hx < uint32(0x00100000) { + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(0.5) * x3 + hxs = x3 * hfx + r1 = float64(1) + hxs*(_Q1+hxs*(_Q2+hxs*(_Q3+hxs*(_Q4+hxs*_Q5)))) + t = float64(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat64(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float64(0.5)*(x3-e) - float64(0.5) + } + if k == int32(1) { + if x3 < -Float64FromFloat64(0.25) { + return -Float64FromFloat64(2) * (e - (x3 + Float64FromFloat64(0.5))) + } + return float64(1) + float64(2)*(x3-e) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)+k) << int32(52) /* 2^k */ + twopk = *(*float64)(unsafe.Pointer(bp + 8)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + float64(1) + if k == int32(1024) { + y3 = y3 * float64(2) * float64(8.98846567431158e+307) + } else { + y3 = y3 * twopk + } + return y3 - float64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)-k) << int32(52) /* 2^-k */ + if k < int32(20) { + y3 = (x3 - e + (Float64FromInt32(1) - *(*float64)(unsafe.Pointer(bp + 8)))) * twopk + } else { + y3 = (x3 - (e + *(*float64)(unsafe.Pointer(bp + 8))) + Float64FromInt32(1)) * twopk + } + return y3 +} + +var _ln2_hi1 = float32(0.69313812256) /* 0x3f317180 */ +var _ln2_lo1 = float32(9.0580006145e-06) /* 0x3717f7d1 */ +var _invln21 = float32(1.4426950216) /* 0x3fb8aa3b */ +/* + * Domain [-0.34568, 0.34568], range ~[-6.694e-10, 6.696e-10]: + * |6 / x * (1 + 2 * (1 / (exp(x) - 1) - 1 / x)) - q(x)| < 2**-30.04 + * Scaled coefficients: Qn_here = 2**n * Qn_for_q (see s_expm1.c): + */ +var _Q11 = float32(-Float64FromFloat64(0.033333212137)) /* -0x888868.0p-28 */ +var _Q21 = float32(0.0015807170421) /* 0xcf3010.0p-33 */ + +func Xexpm1f(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tfloat_t + var hx Tuint32_t + var k, sign int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4195b844) { /* if |x|>=27*ln2 */ + if hx > uint32(0x7f800000) { /* NaN */ + return x3 + } + if sign != 0 { + return float32(-Int32FromInt32(1)) + } + if hx > uint32(0x42b17217) { /* x > log(FLT_MAX) */ + x3 *= Float32FromFloat32(1.7014118346046923e+38) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3eb17218) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3F851592) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi1 + lo = _ln2_lo1 + k = int32(1) + } else { + hi = x3 + _ln2_hi1 + lo = -_ln2_lo1 + k = -int32(1) + } + } else { + if sign != 0 { + v1 = -Float32FromFloat32(0.5) + } else { + v1 = Float32FromFloat32(0.5) + } + k = int32(_invln21*x3 + v1) + t = float32(k) + hi = x3 - t*_ln2_hi1 /* t*ln2_hi is exact here */ + lo = t * _ln2_lo1 + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x33000000) { /* when |x|<2**-25, return x */ + if hx < uint32(0x00800000) { + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = Float32FromFloat32(0.5) * x3 + hxs = x3 * hfx + r1 = Float32FromFloat32(1) + hxs*(_Q11+hxs*_Q21) + t = Float32FromFloat32(3) - r1*hfx + e = hxs * ((r1 - t) / (Float32FromFloat32(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return Float32FromFloat32(0.5)*(x3-e) - Float32FromFloat32(0.5) + } + if k == int32(1) { + if x3 < -Float32FromFloat32(0.25) { + return -Float32FromFloat32(2) * (e - (x3 + Float32FromFloat32(0.5))) + } + return Float32FromFloat32(1) + Float32FromFloat32(2)*(x3-e) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) + k) << int32(23)) /* 2^k */ + twopk = *(*float32)(unsafe.Pointer(bp)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + Float32FromFloat32(1) + if k == int32(128) { + y3 = y3 * Float32FromFloat32(2) * Float32FromFloat32(1.7014118346046923e+38) + } else { + y3 = y3 * twopk + } + return y3 - Float32FromFloat32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) - k) << int32(23)) /* 2^-k */ + if k < int32(23) { + y3 = (x3 - e + (Float32FromInt32(1) - *(*float32)(unsafe.Pointer(bp)))) * twopk + } else { + y3 = (x3 - (e + *(*float32)(unsafe.Pointer(bp))) + Float32FromInt32(1)) * twopk + } + return y3 +} + +func Xexpm1l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexpm1(tls, x) +} + +func Xfabs(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2)) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfabsf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfabsl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfabs(tls, x) +} + +func Xfdim(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _ = v1, v3, v5 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< y { + v5 = x - y + } else { + v5 = Float64FromInt32(0) + } + return v5 +} + +func Xfdimf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _ = v1, v3, v5 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + if x > y { + v5 = x - y + } else { + v5 = Float32FromInt32(0) + } + return v5 +} + +func Xfdiml(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfdim(tls, x, y) +} + +func Xfinite(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&uint32(0x7fffffff) < uint32(0x7f800000)) +} + +const DBL_EPSILON7 = 2.220446049250313e-16 + +var _toint3 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xfloor(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1 int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint3 + _toint3 - x3 + } else { + y3 = x3 + _toint3 - _toint3 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return float64(v1) + } + if y3 > Float64FromInt32(0) { + return x3 + y3 - Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON8 = 0 + +func Xfloorf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(0) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xfloor(tls, x) +} + +const DBL_MIN1 = 2.2250738585072014e-308 +const FLT_MIN1 = 1.1754943508222875e-38 +const ZEROINFNAN = 971 + +type Tnum = struct { + Fm Tuint64_t + Fe int32 + Fsign int32 +} + +func _normalize(tls *TLS, x float64) (r Tnum) { + var e, sign, v2 int32 + var ix Tuint64_t + var v1 float64 + _, _, _, _, _ = e, ix, sign, v1, v2 + ix = *(*Tuint64_t)(unsafe.Pointer(&x)) + e = int32(ix >> int32(52)) + sign = e & int32(0x800) + e &= int32(0x7ff) + if !(e != 0) { + v1 = x * float64(9.223372036854776e+18) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + e = int32(ix >> int32(52) & uint64(0x7ff)) + if e != 0 { + v2 = e - int32(63) + } else { + v2 = int32(0x800) + } + e = v2 + } + ix = ix & (Uint64FromUint64(1)<> int32(32) + ylo = uint64(uint32(y)) + yhi = y >> int32(32) + t1 = xlo * ylo + t2 = xlo*yhi + xhi*ylo + t3 = xhi * yhi + *(*Tuint64_t)(unsafe.Pointer(lo)) = t1 + t2<>Int32FromInt32(32) + BoolUint64(t1 > *(*Tuint64_t)(unsafe.Pointer(lo))) +} + +func Xfma(tls *TLS, x1 float64, y1 float64, z float64) (r2 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v z=%v, (%v:)", tls, x1, y1, z, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, r1 float64 + var d, e, nonzero, r, samesign, sign, v2, v5 int32 + var fltmin float32 + var i Tint64_t + var nx, ny, nz Tnum + var t, zhi, zlo, v1, v4 Tuint64_t + var tiny Tdouble_t + var y Tuint32_t + var _ /* rhi at bp+0 */ Tuint64_t + var _ /* rlo at bp+8 */ Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, e, fltmin, i, nonzero, nx, ny, nz, r, r1, samesign, sign, t, tiny, y, zhi, zlo, v1, v2, v4, v5 + nx = _normalize(tls, x1) + ny = _normalize(tls, y1) + nz = _normalize(tls, z) + if nx.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) || ny.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + return x1*y1 + z + } + if nz.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + if nz.Fe > Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { /* z==0 */ + return x1*y1 + z + } + return z + } + _mul(tls, bp, bp+8, nx.Fm, ny.Fm) + /* either top 20 or 21 bits of rhi and last 2 bits of rlo are 0 */ + /* align exponents */ + e = nx.Fe + ny.Fe + d = nz.Fe - e + /* shift bits z<<=kz, r>>=kr, so kz+kr == d, set e = e+kr (== ez-kz) */ + if d > 0 { + if d < int32(64) { + zlo = nz.Fm << d + zhi = nz.Fm >> (int32(64) - d) + } else { + zlo = uint64(0) + zhi = nz.Fm + e = nz.Fe - int32(64) + d -= int32(64) + if d == 0 { + } else { + if d < int32(64) { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = *(*Tuint64_t)(unsafe.Pointer(bp))<<(int32(64)-d) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<<(Int32FromInt32(64)-d) != 0)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) >> d + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(1) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(0) + } + } + } + } else { + zhi = uint64(0) + d = -d + if d == 0 { + zlo = nz.Fm + } else { + if d < int32(64) { + zlo = nz.Fm>>d | BoolUint64(!!(nz.Fm<<(Int32FromInt32(64)-d) != 0)) + } else { + zlo = uint64(1) + } + } + } + /* add */ + sign = nx.Fsign ^ ny.Fsign + samesign = BoolInt32(!(sign^nz.Fsign != 0)) + nonzero = int32(1) + if samesign != 0 { + /* r += z */ + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) += zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) += zhi + BoolUint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) < zlo) + } else { + /* r -= z */ + t = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) -= zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) - zhi - BoolUint64(t < *(*Tuint64_t)(unsafe.Pointer(bp + 8))) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = -*(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = -*(*Tuint64_t)(unsafe.Pointer(bp)) - BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) != 0)) + sign = BoolInt32(!(sign != 0)) + } + nonzero = BoolInt32(!!(*(*Tuint64_t)(unsafe.Pointer(bp)) != 0)) + } + /* set rhi to top 63bit of the result (last bit is sticky) */ + if nonzero != 0 { + e += int32(64) + v1 = *(*Tuint64_t)(unsafe.Pointer(bp)) + if v1>>Int32FromInt32(32) != 0 { + y = uint32(v1 >> int32(32)) + r = Int32FromInt32(0) + } else { + y = uint32(v1) + r = Int32FromInt32(32) + } + if y>>Int32FromInt32(16) != 0 { + y >>= uint32(16) + } else { + r |= int32(16) + } + if y>>Int32FromInt32(8) != 0 { + y >>= uint32(8) + } else { + r |= int32(8) + } + if y>>Int32FromInt32(4) != 0 { + y >>= uint32(4) + } else { + r |= int32(4) + } + if y>>Int32FromInt32(2) != 0 { + y >>= uint32(2) + } else { + r |= int32(2) + } + v2 = r | BoolInt32(!(y>>Int32FromInt32(1) != 0)) + goto _3 + _3: + d = v2 - int32(1) + /* note: d > 0 */ + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp))<>(int32(64)-d) | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<>Int32FromInt32(32) != 0 { + y = uint32(v4 >> int32(32)) + r = Int32FromInt32(0) + } else { + y = uint32(v4) + r = Int32FromInt32(32) + } + if y>>Int32FromInt32(16) != 0 { + y >>= uint32(16) + } else { + r |= int32(16) + } + if y>>Int32FromInt32(8) != 0 { + y >>= uint32(8) + } else { + r |= int32(8) + } + if y>>Int32FromInt32(4) != 0 { + y >>= uint32(4) + } else { + r |= int32(4) + } + if y>>Int32FromInt32(2) != 0 { + y >>= uint32(2) + } else { + r |= int32(2) + } + v5 = r | BoolInt32(!(y>>Int32FromInt32(1) != 0)) + goto _6 + _6: + d = v5 - int32(1) + if d < 0 { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&uint64(1) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) << d + } + } else { + /* exact +-0 */ + return x1*y1 + z + } + } + e -= d + /* convert to double */ + i = int64(*(*Tuint64_t)(unsafe.Pointer(bp))) /* i is in [1<<62,(1<<63)-1] */ + if sign != 0 { + i = -i + } + r1 = float64(i) /* |r| is in [0x1p62,0x1p63] */ + if e < -Int32FromInt32(1022)-Int32FromInt32(62) { + /* result is subnormal before rounding */ + if e == -Int32FromInt32(1022)-Int32FromInt32(63) { + c = float64(9.223372036854776e+18) + if sign != 0 { + c = -c + } + if r1 == c { + /* min normal after rounding, underflow depends + on arch behaviour which can be imitated by + a double to float conversion */ + fltmin = float32(Float64FromFloat64(1.0842021401737618e-19) * Float64FromFloat32(1.1754943508222875e-38) * r1) + return Float64FromFloat64(2.2250738585072014e-308) / Float64FromFloat32(1.1754943508222875e-38) * float64(fltmin) + } + /* one bit is lost when scaled, add another top bit to + only round once at conversion if it is inexact */ + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp))&uint64(1) | Uint64FromUint64(1)<>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp))<<(Int32FromInt32(64)-d) != 0))) << d) + if sign != 0 { + i = -i + } + r1 = float64(i) + } + } + return Xscalbn(tls, r1, e) +} + +const DBL_MIN2 = 0 +const FLT_MIN2 = 0 + +func Xfmal(tls *TLS, x float64, y float64, z float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v z=%v, (%v:)", tls, x, y, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfma(tls, x, y, z) +} + +func Xfmax(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeroes, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmax(tls, x, y) +} + +func Xfmin(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeros, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmin(tls, x, y) +} + +func Xfmod(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx int32 + var i, uxi Tuint64_t + var v1 uint64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* in the followings uxi should be ux.i, but then gcc wrongly adds */ + /* float load/store to inner loops ruining performance and code size */ + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = *(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + uxi <<= uint64(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + /* scale result */ + if ex > 0 { + uxi = uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + uxi |= uint64(sx) << int32(63) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xfmodf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey int32 + var i, sx, uxi Tuint32_t + var v1 uint32 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if uxi<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + uxi <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + /* scale result up */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + uxi |= sx + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xfmodl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmod(tls, x, y) +} + +func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexp(tls, x*float64(1.8446744073709552e+19), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0x7ff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & Uint64FromUint64(0x800fffffffffffff) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) | Uint64FromUint64(0x3fe0000000000000) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfrexpf(tls *TLS, x float32, e uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexpf(tls, float32(float64(x)*float64(1.8446744073709552e+19)), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0xff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x7e) + p1 = bp + *(*Tuint32_t)(unsafe.Pointer(p1)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p1))) & Uint64FromUint64(0x807fffff)) + p2 = bp + *(*Tuint32_t)(unsafe.Pointer(p2)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p2))) | Uint64FromUint64(0x3f000000)) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfrexpl(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfrexp(tls, x, e) +} + +const SPLIT = 1 + +func _sq(tls *TLS, hi uintptr, lo uintptr, x float64) { + var xc, xh, xl Tdouble_t + _, _, _ = xc, xh, xl + xc = x * (Float64FromFloat64(1.34217728e+08) + Float64FromInt32(1)) + xh = x - xc + xc + xl = x - xh + *(*Tdouble_t)(unsafe.Pointer(hi)) = x * x + *(*Tdouble_t)(unsafe.Pointer(lo)) = xh*xh - *(*Tdouble_t)(unsafe.Pointer(hi)) + Float64FromInt32(2)*xh*xl + xl*xl +} + +func Xhypot(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey int32 + var ut struct { + Fi [0]Tuint64_t + Ff float64 + } + var z Tdouble_t + var p1, p2 uintptr + var _ /* hx at bp+16 */ Tdouble_t + var _ /* hy at bp+32 */ Tdouble_t + var _ /* lx at bp+24 */ Tdouble_t + var _ /* ly at bp+40 */ Tdouble_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = ex, ey, ut, z, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + /* arrange |x| >= |y| */ + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = *(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) + p2 = bp + 8 + *(*Tuint64_t)(unsafe.Pointer(p2)) = *(*Tuint64_t)(unsafe.Pointer(p2)) & (-Uint64FromUint64(1) >> Int32FromInt32(1)) + if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { + ut = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = ut + } + /* special cases */ + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52)) + x = *(*float64)(unsafe.Pointer(bp)) + y = *(*float64)(unsafe.Pointer(bp + 8)) + /* note: hypot(inf,nan) == inf */ + if ey == int32(0x7ff) { + return y + } + if ex == int32(0x7ff) || *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == uint64(0) { + return x + } + /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ + /* 64 difference is enough for ld80 double_t */ + if ex-ey > int32(64) { + return x + y + } + /* precise sqrt argument in nearest rounding mode without overflow */ + /* xh*xh must not overflow and xl*xl must not underflow in sq */ + z = Float64FromInt32(1) + if ex > Int32FromInt32(0x3ff)+Int32FromInt32(510) { + z = float64(5.260135901548374e+210) + x *= float64(1.90109156629516e-211) + y *= float64(1.90109156629516e-211) + } else { + if ey < Int32FromInt32(0x3ff)-Int32FromInt32(450) { + z = float64(1.90109156629516e-211) + x *= float64(5.260135901548374e+210) + y *= float64(5.260135901548374e+210) + } + } + _sq(tls, bp+16, bp+24, x) + _sq(tls, bp+32, bp+40, y) + return z * Xsqrt(tls, *(*Tdouble_t)(unsafe.Pointer(bp + 40))+*(*Tdouble_t)(unsafe.Pointer(bp + 24))+*(*Tdouble_t)(unsafe.Pointer(bp + 32))+*(*Tdouble_t)(unsafe.Pointer(bp + 16))) +} + +func Xhypotf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ut struct { + Fi [0]Tuint32_t + Ff float32 + } + var z Tfloat_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = ut, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < *(*Tuint32_t)(unsafe.Pointer(bp + 4)) { + ut = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = ut + } + x = *(*float32)(unsafe.Pointer(bp)) + y = *(*float32)(unsafe.Pointer(bp + 4)) + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(25)<= uint32((Int32FromInt32(0x7f)+Int32FromInt32(60))< %v", r) }() + } + return Xhypot(tls, x, y) +} + +func Xilogb(tls *TLS, x3 float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint64_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + i <<= uint64(12) + if i == uint64(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x3ff) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint64(1) + } + return e + } + if e == int32(0x7ff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(23) & uint32(0xff)) + if !(e != 0) { + i <<= uint32(9) + if i == uint32(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x7f) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint32(1) + } + return e + } + if e == int32(0xff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + return Xilogb(tls, x) +} + +var _invsqrtpi = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +// C documentation +// +// /* common method when |x|>=2 */ +func _common(tls *TLS, ix Tuint32_t, x float64, y0 int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x-pi/4)-q0(x)*sin(x-pi/4)) + * y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x-pi/4)+q0(x)*cos(x-pi/4)) + * + * sin(x-pi/4) = (sin(x) - cos(x))/sqrt(2) + * cos(x-pi/4) = (sin(x) + cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + c = Xcos(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + /* avoid overflow in 2*x, big ulp error when x>=0x1p1023 */ + if ix < uint32(0x7fe00000) { + ss = s - c + z = -Xcos(tls, Float64FromInt32(2)*x) + if s*c < Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y0 != 0 { + ss = -ss + } + cc = _pzero(tls, x)*cc - _qzero(tls, x)*ss + } + } + return _invsqrtpi * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R02 = float64(0.015624999999999995) /* 0x3F8FFFFF, 0xFFFFFFFD */ +var _R03 = -Float64FromFloat64(0.00018997929423885472) /* 0xBF28E6A5, 0xB61AC6E9 */ +var _R04 = float64(1.8295404953270067e-06) /* 0x3EBEB1D1, 0x0C503919 */ +var _R05 = -Float64FromFloat64(4.618326885321032e-09) /* 0xBE33D5E7, 0x73D63FCE */ +var _S01 = float64(0.015619102946489001) /* 0x3F8FFCE8, 0x82C8C2A4 */ +var _S02 = float64(0.00011692678466333745) /* 0x3F1EA6D2, 0xDD57DBF4 */ +var _S03 = float64(5.135465502073181e-07) /* 0x3EA13B54, 0xCE84D5A9 */ +var _S04 = float64(1.1661400333379e-09) /* 0x3E1408BC, 0xF4745D8F */ + +func Xj0(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + _, _, _, _ = ix, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* j0(+-inf)=0, j0(nan)=nan */ + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + x = Xfabs(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros: 2.4, 5.52, 8.6537,.. */ + return _common(tls, ix, x, 0) + } + /* 1 - x*x/4 + x*x*R(x^2)/S(x^2) */ + if ix >= uint32(0x3f200000) { /* |x| >= 2**-13 */ + /* up to 4ulp error close to 2 */ + z = x * x + r = z * (_R02 + z*(_R03+z*(_R04+z*_R05))) + s = Float64FromInt32(1) + z*(_S01+z*(_S02+z*(_S03+z*_S04))) + return (Float64FromInt32(1)+x/Float64FromInt32(2))*(Float64FromInt32(1)-x/Float64FromInt32(2)) + z*(r/s) + } + /* 1 - x*x/4 */ + /* prevent underflow */ + /* inexact should be raised when x!=0, this is not done correctly */ + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + x = float64(0.25) * x * x + } + return Float64FromInt32(1) - x +} + +var _u00 = -Float64FromFloat64(0.07380429510868723) /* 0xBFB2E4D6, 0x99CBD01F */ +var _u01 = float64(0.17666645250918112) /* 0x3FC69D01, 0x9DE9E3FC */ +var _u02 = -Float64FromFloat64(0.01381856719455969) /* 0xBF8C4CE8, 0xB16CFA97 */ +var _u03 = float64(0.00034745343209368365) /* 0x3F36C54D, 0x20B29B6B */ +var _u04 = -Float64FromFloat64(3.8140705372436416e-06) /* 0xBECFFEA7, 0x73D25CAD */ +var _u05 = float64(1.9559013703502292e-08) /* 0x3E550057, 0x3B4EABD4 */ +var _u06 = -Float64FromFloat64(3.982051941321034e-11) /* 0xBDC5E43D, 0x693FB3C8 */ +var _v01 = float64(0.01273048348341237) /* 0x3F8A1270, 0x91C9C71A */ +var _v02 = float64(7.600686273503533e-05) /* 0x3F13ECBB, 0xF578C6C1 */ +var _v03 = float64(2.591508518404578e-07) /* 0x3E91642D, 0x7FF202FD */ +var _v04 = float64(4.4111031133267547e-10) /* 0x3DFE5018, 0x3BD6D9EF */ + +func Xy0(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y0(nan)=nan, y0(<0)=nan, y0(0)=-inf, y0(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + /* large ulp errors near zeros: 3.958, 7.086,.. */ + return _common(tls, ix, x, int32(1)) + } + /* U(x^2)/V(x^2) + (2/pi)*j0(x)*log(x) */ + if ix >= uint32(0x3e400000) { /* x >= 2**-27 */ + /* large ulp error near the first zero, x ~= 0.89 */ + z = x * x + u = _u00 + z*(_u01+z*(_u02+z*(_u03+z*(_u04+z*(_u05+z*_u06))))) + v = float64(1) + z*(_v01+z*(_v02+z*(_v03+z*_v04))) + return u/v + _tpi*(Xj0(tls, x)*Xlog(tls, x)) + } + return _u00 + _tpi*Xlog(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR8 = [6]float64{ + 1: -Float64FromFloat64(0.07031249999999004), + 2: -Float64FromFloat64(8.081670412753498), + 3: -Float64FromFloat64(257.06310567970485), + 4: -Float64FromFloat64(2485.216410094288), + 5: -Float64FromFloat64(5253.043804907295), +} +var _pS8 = [5]float64{ + 0: float64(116.53436461966818), + 1: float64(3833.7447536412183), + 2: float64(40597.857264847255), + 3: float64(116752.97256437592), + 4: float64(47627.728414673096), +} + +var _pR5 = [6]float64{ + 0: -Float64FromFloat64(1.141254646918945e-11), + 1: -Float64FromFloat64(0.07031249408735993), + 2: -Float64FromFloat64(4.159610644705878), + 3: -Float64FromFloat64(67.67476522651673), + 4: -Float64FromFloat64(331.23129964917297), + 5: -Float64FromFloat64(346.4333883656049), +} +var _pS52 = [5]float64{ + 0: float64(60.753938269230034), + 1: float64(1051.2523059570458), + 2: float64(5978.970943338558), + 3: float64(9625.445143577745), + 4: float64(2406.058159229391), +} + +var _pR3 = [6]float64{ + 0: -Float64FromFloat64(2.547046017719519e-09), + 1: -Float64FromFloat64(0.07031196163814817), + 2: -Float64FromFloat64(2.409032215495296), + 3: -Float64FromFloat64(21.96597747348831), + 4: -Float64FromFloat64(58.07917047017376), + 5: -Float64FromFloat64(31.44794705948885), +} +var _pS32 = [5]float64{ + 0: float64(35.85603380552097), + 1: float64(361.51398305030386), + 2: float64(1193.6078379211153), + 3: float64(1127.9967985690741), + 4: float64(173.58093081333575), +} + +var _pR2 = [6]float64{ + 0: -Float64FromFloat64(8.875343330325264e-08), + 1: -Float64FromFloat64(0.07030309954836247), + 2: -Float64FromFloat64(1.4507384678095299), + 3: -Float64FromFloat64(7.635696138235278), + 4: -Float64FromFloat64(11.193166886035675), + 5: -Float64FromFloat64(3.2336457935133534), +} +var _pS24 = [5]float64{ + 0: float64(22.22029975320888), + 1: float64(136.2067942182152), + 2: float64(270.4702786580835), + 3: float64(153.87539420832033), + 4: float64(14.65761769482562), +} + +func _pzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pR8)) + q = uintptr(unsafe.Pointer(&_pS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pR5)) + q = uintptr(unsafe.Pointer(&_pS52)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pR3)) + q = uintptr(unsafe.Pointer(&_pS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR2)) + q = uintptr(unsafe.Pointer(&_pS24)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR8 = [6]float64{ + 1: float64(0.0732421874999935), + 2: float64(11.76820646822527), + 3: float64(557.6733802564019), + 4: float64(8859.197207564686), + 5: float64(37014.62677768878), +} +var _qS8 = [6]float64{ + 0: float64(163.77602689568982), + 1: float64(8098.344946564498), + 2: float64(142538.29141912048), + 3: float64(803309.2571195144), + 4: float64(840501.5798190605), + 5: -Float64FromFloat64(343899.2935378666), +} + +var _qR5 = [6]float64{ + 0: float64(1.8408596359451553e-11), + 1: float64(0.07324217666126848), + 2: float64(5.8356350896205695), + 3: float64(135.11157728644983), + 4: float64(1027.243765961641), + 5: float64(1989.9778586460538), +} +var _qS5 = [6]float64{ + 0: float64(82.77661022365378), + 1: float64(2077.81416421393), + 2: float64(18847.28877857181), + 3: float64(56751.11228949473), + 4: float64(35976.75384251145), + 5: -Float64FromFloat64(5354.342756019448), +} + +var _qR3 = [6]float64{ + 0: float64(4.377410140897386e-09), + 1: float64(0.07324111800429114), + 2: float64(3.344231375161707), + 3: float64(42.621844074541265), + 4: float64(170.8080913405656), + 5: float64(166.73394869665117), +} +var _qS32 = [6]float64{ + 0: float64(48.75887297245872), + 1: float64(709.689221056606), + 2: float64(3704.1482262011136), + 3: float64(6460.425167525689), + 4: float64(2516.3336892036896), + 5: -Float64FromFloat64(149.2474518361564), +} + +var _qR2 = [6]float64{ + 0: float64(1.5044444488698327e-07), + 1: float64(0.07322342659630793), + 2: float64(1.99819174093816), + 3: float64(14.495602934788574), + 4: float64(31.666231750478154), + 5: float64(16.252707571092927), +} +var _qS22 = [6]float64{ + 0: float64(30.36558483552192), + 1: float64(269.34811860804984), + 2: float64(844.7837575953201), + 3: float64(882.9358451124886), + 4: float64(212.66638851179883), + 5: -Float64FromFloat64(5.3109549388266695), +} + +func _qzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qR8)) + q = uintptr(unsafe.Pointer(&_qS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qR5)) + q = uintptr(unsafe.Pointer(&_qS5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qR3)) + q = uintptr(unsafe.Pointer(&_qS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR2)) + q = uintptr(unsafe.Pointer(&_qS22)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (-Float64FromFloat64(0.125) + r/s) / x +} + +var _invsqrtpi1 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi1 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common1(tls *TLS, ix Tuint32_t, x float32, y0 int32) (r float32) { + var c, cc, s, ss, z float32 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + s = Xsinf(tls, x) + c = Xcosf(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + if ix < uint32(0x7f000000) { + ss = s - c + z = -Xcosf(tls, Float32FromInt32(2)*x) + if s*c < Float32FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y0 != 0 { + ss = -ss + } + cc = _pzerof(tls, x)*cc - _qzerof(tls, x)*ss + } + } + return _invsqrtpi1 * cc / Xsqrtf(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R021 = float32(0.015625) /* 0x3c800000 */ +var _R031 = float32(-Float64FromFloat64(0.00018997929874)) /* 0xb947352e */ +var _R041 = float32(1.8295404516e-06) /* 0x35f58e88 */ +var _R051 = float32(-Float64FromFloat64(4.6183270541e-09)) /* 0xb19eaf3c */ +var _S011 = float32(0.015619102865) /* 0x3c7fe744 */ +var _S021 = float32(0.00011692678527) /* 0x38f53697 */ +var _S031 = float32(5.1354652442e-07) /* 0x3509daa6 */ +var _S041 = float32(1.1661400734e-09) /* 0x30a045e8 */ + +func Xj0f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + _, _, _, _ = ix, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + x = Xfabsf(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, 0) + } + if ix >= uint32(0x3a000000) { /* |x| >= 2**-11 */ + /* up to 4ulp error near 2 */ + z = x * x + r = z * (_R021 + z*(_R031+z*(_R041+z*_R051))) + s = Float32FromInt32(1) + z*(_S011+z*(_S021+z*(_S031+z*_S041))) + return (Float32FromInt32(1)+x/Float32FromInt32(2))*(Float32FromInt32(1)-x/Float32FromInt32(2)) + z*(r/s) + } + if ix >= uint32(0x21800000) { /* |x| >= 2**-60 */ + x = Float32FromFloat32(0.25) * x * x + } + return Float32FromInt32(1) - x +} + +var _u001 = float32(-Float64FromFloat64(0.073804296553)) /* 0xbd9726b5 */ +var _u011 = float32(0.17666645348) /* 0x3e34e80d */ +var _u021 = float32(-Float64FromFloat64(0.013818567619)) /* 0xbc626746 */ +var _u031 = float32(0.00034745343146) /* 0x39b62a69 */ +var _u041 = float32(-Float64FromFloat64(3.8140706238e-06)) /* 0xb67ff53c */ +var _u051 = float32(1.9559013964e-08) /* 0x32a802ba */ +var _u061 = float32(-Float64FromFloat64(3.982051841e-11)) /* 0xae2f21eb */ +var _v011 = float32(0.012730483897) /* 0x3c509385 */ +var _v021 = float32(7.6006865129e-05) /* 0x389f65e0 */ +var _v031 = float32(2.5915085189e-07) /* 0x348b216c */ +var _v041 = float32(4.4111031494e-10) /* 0x2ff280c2 */ + +func Xy0f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, int32(1)) + } + if ix >= uint32(0x39000000) { /* x >= 2**-13 */ + /* large ulp error at x ~= 0.89 */ + z = x * x + u = _u001 + z*(_u011+z*(_u021+z*(_u031+z*(_u041+z*(_u051+z*_u061))))) + v = Float32FromInt32(1) + z*(_v011+z*(_v021+z*(_v031+z*_v041))) + return u/v + _tpi1*(Xj0f(tls, x)*Xlogf(tls, x)) + } + return _u001 + _tpi1*Xlogf(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.0703125)), + 2: float32(-Float64FromFloat64(8.0816707611)), + 3: float32(-Float64FromFloat64(257.06311035)), + 4: float32(-Float64FromFloat64(2485.2163086)), + 5: float32(-Float64FromFloat64(5253.0439453)), +} +var _pS81 = [5]float32{ + 0: float32(116.53436279), + 1: float32(3833.744873), + 2: float32(40597.855469), + 3: float32(116752.96875), + 4: float32(47627.726562), +} +var _pR51 = [6]float32{ + 0: float32(-Float64FromFloat64(1.1412546255e-11)), + 1: float32(-Float64FromFloat64(0.070312492549)), + 2: float32(-Float64FromFloat64(4.1596107483)), + 3: float32(-Float64FromFloat64(67.674766541)), + 4: float32(-Float64FromFloat64(331.23129272)), + 5: float32(-Float64FromFloat64(346.43338013)), +} +var _pS53 = [5]float32{ + 0: float32(60.753936768), + 1: float32(1051.2523193), + 2: float32(5978.9707031), + 3: float32(9625.4453125), + 4: float32(2406.0581055), +} + +var _pR31 = [6]float32{ + 0: float32(-Float64FromFloat64(2.5470459075e-09)), + 1: float32(-Float64FromFloat64(0.070311963558)), + 2: float32(-Float64FromFloat64(2.4090321064)), + 3: float32(-Float64FromFloat64(21.965976715)), + 4: float32(-Float64FromFloat64(58.079170227)), + 5: float32(-Float64FromFloat64(31.447946548)), +} +var _pS33 = [5]float32{ + 0: float32(35.856033325), + 1: float32(361.51397705), + 2: float32(1193.6077881), + 3: float32(1127.9968262), + 4: float32(173.58093262), +} + +var _pR21 = [6]float32{ + 0: float32(-Float64FromFloat64(8.8753431271e-08)), + 1: float32(-Float64FromFloat64(0.070303097367)), + 2: float32(-Float64FromFloat64(1.45073843)), + 3: float32(-Float64FromFloat64(7.6356959343)), + 4: float32(-Float64FromFloat64(11.193166733)), + 5: float32(-Float64FromFloat64(3.2336456776)), +} +var _pS25 = [5]float32{ + 0: float32(22.220300674), + 1: float32(136.20678711), + 2: float32(270.47027588), + 3: float32(153.87539673), + 4: float32(14.657617569), +} + +func _pzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pR81)) + q = uintptr(unsafe.Pointer(&_pS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pR51)) + q = uintptr(unsafe.Pointer(&_pS53)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pR31)) + q = uintptr(unsafe.Pointer(&_pS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR21)) + q = uintptr(unsafe.Pointer(&_pS25)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR81 = [6]float32{ + 1: float32(0.0732421875), + 2: float32(11.768206596), + 3: float32(557.67340088), + 4: float32(8859.1972656), + 5: float32(37014.625), +} +var _qS81 = [6]float32{ + 0: float32(163.77603149), + 1: float32(8098.3447266), + 2: float32(142538.29688), + 3: float32(803309.25), + 4: float32(840501.5625), + 5: float32(-Float64FromFloat64(343899.28125)), +} + +var _qR51 = [6]float32{ + 0: float32(1.8408595828e-11), + 1: float32(0.073242180049), + 2: float32(5.8356351852), + 3: float32(135.11157227), + 4: float32(1027.2437744), + 5: float32(1989.9779053), +} +var _qS51 = [6]float32{ + 0: float32(82.776611328), + 1: float32(2077.814209), + 2: float32(18847.289062), + 3: float32(56751.113281), + 4: float32(35976.753906), + 5: float32(-Float64FromFloat64(5354.3427734)), +} + +var _qR31 = [6]float32{ + 0: float32(4.37740999e-09), + 1: float32(0.073241114616), + 2: float32(3.3442313671), + 3: float32(42.621845245), + 4: float32(170.80809021), + 5: float32(166.73394775), +} +var _qS33 = [6]float32{ + 0: float32(48.758872986), + 1: float32(709.68920898), + 2: float32(3704.1481934), + 3: float32(6460.425293), + 4: float32(2516.3337402), + 5: float32(-Float64FromFloat64(149.24745178)), +} + +var _qR21 = [6]float32{ + 0: float32(1.5044444979e-07), + 1: float32(0.073223426938), + 2: float32(1.9981917143), + 3: float32(14.495602608), + 4: float32(31.666231155), + 5: float32(16.252708435), +} +var _qS23 = [6]float32{ + 0: float32(30.365585327), + 1: float32(269.34811401), + 2: float32(844.78375244), + 3: float32(882.93585205), + 4: float32(212.66638184), + 5: float32(-Float64FromFloat64(5.3109550476)), +} + +func _qzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qR81)) + q = uintptr(unsafe.Pointer(&_qS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qR51)) + q = uintptr(unsafe.Pointer(&_qS51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qR31)) + q = uintptr(unsafe.Pointer(&_qS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR21)) + q = uintptr(unsafe.Pointer(&_qS23)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (-Float32FromFloat32(0.125) + r/s) / x +} + +var _invsqrtpi2 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +func _common2(tls *TLS, ix Tuint32_t, x float64, y1 int32, sign int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x-3pi/4)-q1(x)*sin(x-3pi/4)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x-3pi/4)+q1(x)*cos(x-3pi/4)) + * + * sin(x-3pi/4) = -(sin(x) + cos(x))/sqrt(2) + * cos(x-3pi/4) = (sin(x) - cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + if y1 != 0 { + s = -s + } + c = Xcos(tls, x) + cc = s - c + if ix < uint32(0x7fe00000) { + /* avoid overflow in 2*x */ + ss = -s - c + z = Xcos(tls, Float64FromInt32(2)*x) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y1 != 0 { + ss = -ss + } + cc = _pone(tls, x)*cc - _qone(tls, x)*ss + } + } + if sign != 0 { + cc = -cc + } + return _invsqrtpi2 * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r00 = -Float64FromFloat64(0.0625) /* 0xBFB00000, 0x00000000 */ +var _r01 = float64(0.001407056669551897) /* 0x3F570D9F, 0x98472C61 */ +var _r02 = -Float64FromFloat64(1.599556310840356e-05) /* 0xBEF0C5C6, 0xBA169668 */ +var _r03 = float64(4.9672799960958445e-08) /* 0x3E6AAAFA, 0x46CA0BD9 */ +var _s01 = float64(0.019153759953836346) /* 0x3F939D0B, 0x12637E53 */ +var _s02 = float64(0.00018594678558863092) /* 0x3F285F56, 0xB9CDF664 */ +var _s03 = float64(1.1771846404262368e-06) /* 0x3EB3BFF8, 0x333F8498 */ +var _s04 = float64(5.0463625707621704e-09) /* 0x3E35AC88, 0xC97DFF2C */ +var _s05 = float64(1.2354227442613791e-11) /* 0x3DAB2ACF, 0xCFB97ED8 */ + +func Xj1(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common2(tls, ix, Xfabs(tls, x), 0, sign) + } + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + z = x * x + r = z * (_r00 + z*(_r01+z*(_r02+z*_r03))) + s = Float64FromInt32(1) + z*(_s01+z*(_s02+z*(_s03+z*(_s04+z*_s05)))) + z = r / s + } else { + /* avoid underflow, raise inexact if x!=0 */ + z = x + } + return (float64(0.5) + z) * x +} + +var _U0 = [5]float64{ + 0: -Float64FromFloat64(0.19605709064623894), + 1: float64(0.05044387166398113), + 2: -Float64FromFloat64(0.0019125689587576355), + 3: float64(2.352526005616105e-05), + 4: -Float64FromFloat64(9.190991580398789e-08), +} +var _V0 = [5]float64{ + 0: float64(0.01991673182366499), + 1: float64(0.00020255258102513517), + 2: float64(1.3560880109751623e-06), + 3: float64(6.227414523646215e-09), + 4: float64(1.6655924620799208e-11), +} + +func Xy1(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + return _common2(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x3c900000) { /* x < 2**-54 */ + return -_tpi2 / x + } + z = x * x + u = _U0[0] + z*(_U0[int32(1)]+z*(_U0[int32(2)]+z*(_U0[int32(3)]+z*_U0[int32(4)]))) + v = Float64FromInt32(1) + z*(_V0[0]+z*(_V0[int32(1)]+z*(_V0[int32(2)]+z*(_V0[int32(3)]+z*_V0[int32(4)])))) + return x*(u/v) + _tpi2*(Xj1(tls, x)*Xlog(tls, x)-Float64FromInt32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr8 = [6]float64{ + 1: float64(0.11718749999998865), + 2: float64(13.239480659307358), + 3: float64(412.05185430737856), + 4: float64(3874.7453891396053), + 5: float64(7914.479540318917), +} +var _ps8 = [5]float64{ + 0: float64(114.20737037567841), + 1: float64(3650.9308342085346), + 2: float64(36956.206026903346), + 3: float64(97602.79359349508), + 4: float64(30804.27206278888), +} + +var _pr5 = [6]float64{ + 0: float64(1.3199051955624352e-11), + 1: float64(0.1171874931906141), + 2: float64(6.802751278684329), + 3: float64(108.30818299018911), + 4: float64(517.6361395331998), + 5: float64(528.7152013633375), +} +var _ps5 = [5]float64{ + 0: float64(59.28059872211313), + 1: float64(991.4014187336144), + 2: float64(5353.26695291488), + 3: float64(7844.690317495512), + 4: float64(1504.0468881036106), +} + +var _pr3 = [6]float64{ + 0: float64(3.025039161373736e-09), + 1: float64(0.11718686556725359), + 2: float64(3.9329775003331564), + 3: float64(35.11940355916369), + 4: float64(91.05501107507813), + 5: float64(48.55906851973649), +} +var _ps3 = [5]float64{ + 0: float64(34.79130950012515), + 1: float64(336.76245874782575), + 2: float64(1046.8713997577513), + 3: float64(890.8113463982564), + 4: float64(103.78793243963928), +} + +var _pr2 = [6]float64{ + 0: float64(1.0771083010687374e-07), + 1: float64(0.11717621946268335), + 2: float64(2.368514966676088), + 3: float64(12.242610914826123), + 4: float64(17.693971127168773), + 5: float64(5.073523125888185), +} +var _ps2 = [5]float64{ + 0: float64(21.43648593638214), + 1: float64(125.29022716840275), + 2: float64(232.2764690571628), + 3: float64(117.6793732871471), + 4: float64(8.364638933716183), +} + +func _pone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pr8)) + q = uintptr(unsafe.Pointer(&_ps8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pr5)) + q = uintptr(unsafe.Pointer(&_ps5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pr3)) + q = uintptr(unsafe.Pointer(&_ps3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr2)) + q = uintptr(unsafe.Pointer(&_ps2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr8 = [6]float64{ + 1: -Float64FromFloat64(0.10253906249999271), + 2: -Float64FromFloat64(16.271753454459), + 3: -Float64FromFloat64(759.6017225139501), + 4: -Float64FromFloat64(11849.806670242959), + 5: -Float64FromFloat64(48438.512428575035), +} +var _qs8 = [6]float64{ + 0: float64(161.3953697007229), + 1: float64(7825.385999233485), + 2: float64(133875.33628724958), + 3: float64(719657.7236832409), + 4: float64(666601.2326177764), + 5: -Float64FromFloat64(294490.26430383464), +} + +var _qr5 = [6]float64{ + 0: -Float64FromFloat64(2.089799311417641e-11), + 1: -Float64FromFloat64(0.10253905024137543), + 2: -Float64FromFloat64(8.05644828123936), + 3: -Float64FromFloat64(183.66960747488838), + 4: -Float64FromFloat64(1373.1937606550816), + 5: -Float64FromFloat64(2612.4444045321566), +} +var _qs5 = [6]float64{ + 0: float64(81.27655013843358), + 1: float64(1991.7987346048596), + 2: float64(17468.48519249089), + 3: float64(49851.42709103523), + 4: float64(27948.075163891812), + 5: -Float64FromFloat64(4719.183547951285), +} + +var _qr3 = [6]float64{ + 0: -Float64FromFloat64(5.078312264617666e-09), + 1: -Float64FromFloat64(0.10253782982083709), + 2: -Float64FromFloat64(4.610115811394734), + 3: -Float64FromFloat64(57.847221656278364), + 4: -Float64FromFloat64(228.2445407376317), + 5: -Float64FromFloat64(219.21012847890933), +} +var _qs3 = [6]float64{ + 0: float64(47.66515503237295), + 1: float64(673.8651126766997), + 2: float64(3380.1528667952634), + 3: float64(5547.729097207228), + 4: float64(1903.119193388108), + 5: -Float64FromFloat64(135.20119144430734), +} + +var _qr2 = [6]float64{ + 0: -Float64FromFloat64(1.7838172751095887e-07), + 1: -Float64FromFloat64(0.10251704260798555), + 2: -Float64FromFloat64(2.7522056827818746), + 3: -Float64FromFloat64(19.663616264370372), + 4: -Float64FromFloat64(42.32531333728305), + 5: -Float64FromFloat64(21.371921170370406), +} +var _qs2 = [6]float64{ + 0: float64(29.533362906052385), + 1: float64(252.98154998219053), + 2: float64(757.5028348686454), + 3: float64(739.3932053204672), + 4: float64(155.94900333666612), + 5: -Float64FromFloat64(4.959498988226282), +} + +func _qone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qr8)) + q = uintptr(unsafe.Pointer(&_qs8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qr5)) + q = uintptr(unsafe.Pointer(&_qs5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qr3)) + q = uintptr(unsafe.Pointer(&_qs3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr2)) + q = uintptr(unsafe.Pointer(&_qs2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (float64(0.375) + r/s) / x +} + +var _invsqrtpi3 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi3 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common3(tls *TLS, ix Tuint32_t, x float32, y1 int32, sign int32) (r float32) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + s = float64(Xsinf(tls, x)) + if y1 != 0 { + s = -s + } + c = float64(Xcosf(tls, x)) + cc = s - c + if ix < uint32(0x7f000000) { + ss = -s - c + z = float64(Xcosf(tls, Float32FromInt32(2)*x)) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y1 != 0 { + ss = -ss + } + cc = float64(_ponef(tls, x))*cc - float64(_qonef(tls, x))*ss + } + } + if sign != 0 { + cc = -cc + } + return float32(float64(_invsqrtpi3) * cc / float64(Xsqrtf(tls, x))) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r001 = float32(-Float64FromFloat64(0.0625)) /* 0xbd800000 */ +var _r011 = float32(0.0014070566976) /* 0x3ab86cfd */ +var _r021 = float32(-Float64FromFloat64(1.5995563444e-05)) /* 0xb7862e36 */ +var _r031 = float32(4.9672799207e-08) /* 0x335557d2 */ +var _s011 = float32(0.019153760746) /* 0x3c9ce859 */ +var _s021 = float32(0.00018594678841) /* 0x3942fab6 */ +var _s031 = float32(1.1771846857e-06) /* 0x359dffc2 */ +var _s041 = float32(5.046362439e-09) /* 0x31ad6446 */ +var _s051 = float32(1.2354227016e-11) /* 0x2d59567e */ + +func Xj1f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common3(tls, ix, Xfabsf(tls, x), 0, sign) + } + if ix >= uint32(0x39000000) { /* |x| >= 2**-13 */ + z = x * x + r = z * (_r001 + z*(_r011+z*(_r021+z*_r031))) + s = Float32FromInt32(1) + z*(_s011+z*(_s021+z*(_s031+z*(_s041+z*_s051)))) + z = Float32FromFloat32(0.5) + r/s + } else { + z = Float32FromFloat32(0.5) + } + return z * x +} + +var _U01 = [5]float32{ + 0: float32(-Float64FromFloat64(0.19605709612)), + 1: float32(0.050443872809), + 2: float32(-Float64FromFloat64(0.0019125689287)), + 3: float32(2.3525259166e-05), + 4: float32(-Float64FromFloat64(9.1909917899e-08)), +} +var _V01 = [5]float32{ + 0: float32(0.019916731864), + 1: float32(0.0002025525755), + 2: float32(1.3560879779e-06), + 3: float32(6.227414584e-09), + 4: float32(1.6655924903e-11), +} + +func Xy1f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + return _common3(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x33000000) { /* x < 2**-25 */ + return -_tpi3 / x + } + z = x * x + u = _U01[0] + z*(_U01[int32(1)]+z*(_U01[int32(2)]+z*(_U01[int32(3)]+z*_U01[int32(4)]))) + v = Float32FromFloat32(1) + z*(_V01[0]+z*(_V01[int32(1)]+z*(_V01[int32(2)]+z*(_V01[int32(3)]+z*_V01[int32(4)])))) + return x*(u/v) + _tpi3*(Xj1f(tls, x)*Xlogf(tls, x)-Float32FromFloat32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr81 = [6]float32{ + 1: float32(0.1171875), + 2: float32(13.239480972), + 3: float32(412.05184937), + 4: float32(3874.7453613), + 5: float32(7914.4794922), +} +var _ps81 = [5]float32{ + 0: float32(114.20736694), + 1: float32(3650.9309082), + 2: float32(36956.207031), + 3: float32(97602.796875), + 4: float32(30804.271484), +} + +var _pr51 = [6]float32{ + 0: float32(1.3199052094e-11), + 1: float32(0.11718749255), + 2: float32(6.8027510643), + 3: float32(108.30818176), + 4: float32(517.63616943), + 5: float32(528.71520996), +} +var _ps51 = [5]float32{ + 0: float32(59.280597687), + 1: float32(991.40142822), + 2: float32(5353.2670898), + 3: float32(7844.6904297), + 4: float32(1504.046875), +} + +var _pr31 = [6]float32{ + 0: float32(3.0250391081e-09), + 1: float32(0.1171868667), + 2: float32(3.932977438), + 3: float32(35.119403839), + 4: float32(91.055007935), + 5: float32(48.559066772), +} +var _ps31 = [5]float32{ + 0: float32(34.791309357), + 1: float32(336.76245117), + 2: float32(1046.87146), + 3: float32(890.81134033), + 4: float32(103.78793335), +} + +var _pr21 = [6]float32{ + 0: float32(1.0771083225e-07), + 1: float32(0.11717621982), + 2: float32(2.3685150146), + 3: float32(12.242610931), + 4: float32(17.693971634), + 5: float32(5.0735230446), +} +var _ps21 = [5]float32{ + 0: float32(21.436485291), + 1: float32(125.2902298), + 2: float32(232.276474), + 3: float32(117.67937469), + 4: float32(8.3646392822), +} + +func _ponef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pr81)) + q = uintptr(unsafe.Pointer(&_ps81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pr51)) + q = uintptr(unsafe.Pointer(&_ps51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pr31)) + q = uintptr(unsafe.Pointer(&_ps31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr21)) + q = uintptr(unsafe.Pointer(&_ps21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z**(*float32)(unsafe.Pointer(q + 4*4)))))) + return Float32FromFloat32(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.1025390625)), + 2: float32(-Float64FromFloat64(16.271753311)), + 3: float32(-Float64FromFloat64(759.60174561)), + 4: float32(-Float64FromFloat64(11849.806641)), + 5: float32(-Float64FromFloat64(48438.511719)), +} +var _qs81 = [6]float32{ + 0: float32(161.39537048), + 1: float32(7825.3862305), + 2: float32(133875.34375), + 3: float32(719657.75), + 4: float32(666601.25), + 5: float32(-Float64FromFloat64(294490.25)), +} + +var _qr51 = [6]float32{ + 0: float32(-Float64FromFloat64(2.0897993405e-11)), + 1: float32(-Float64FromFloat64(0.1025390476)), + 2: float32(-Float64FromFloat64(8.0564479828)), + 3: float32(-Float64FromFloat64(183.66960144)), + 4: float32(-Float64FromFloat64(1373.1937256)), + 5: float32(-Float64FromFloat64(2612.4443359)), +} +var _qs51 = [6]float32{ + 0: float32(81.276550293), + 1: float32(1991.7987061), + 2: float32(17468.484375), + 3: float32(49851.425781), + 4: float32(27948.074219), + 5: float32(-Float64FromFloat64(4719.1835938)), +} + +var _qr31 = [6]float32{ + 0: float32(-Float64FromFloat64(5.0783124372e-09)), + 1: float32(-Float64FromFloat64(0.10253783315)), + 2: float32(-Float64FromFloat64(4.6101160049)), + 3: float32(-Float64FromFloat64(57.847221375)), + 4: float32(-Float64FromFloat64(228.24453735)), + 5: float32(-Float64FromFloat64(219.21012878)), +} +var _qs31 = [6]float32{ + 0: float32(47.665153503), + 1: float32(673.8651123), + 2: float32(3380.152832), + 3: float32(5547.7290039), + 4: float32(1903.1191406), + 5: float32(-Float64FromFloat64(135.20118713)), +} + +var _qr21 = [6]float32{ + 0: float32(-Float64FromFloat64(1.7838172539e-07)), + 1: float32(-Float64FromFloat64(0.10251704603)), + 2: float32(-Float64FromFloat64(2.7522056103)), + 3: float32(-Float64FromFloat64(19.66361618)), + 4: float32(-Float64FromFloat64(42.325313568)), + 5: float32(-Float64FromFloat64(21.371921539)), +} +var _qs21 = [6]float32{ + 0: float32(29.533363342), + 1: float32(252.98155212), + 2: float32(757.50280762), + 3: float32(739.39318848), + 4: float32(155.94900513), + 5: float32(-Float64FromFloat64(4.9594988823)), +} + +func _qonef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qr81)) + q = uintptr(unsafe.Pointer(&_qs81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qr51)) + q = uintptr(unsafe.Pointer(&_qs51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qr31)) + q = uintptr(unsafe.Pointer(&_qs31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr21)) + q = uintptr(unsafe.Pointer(&_qs21)) + } + } + } + z = Float32FromFloat32(1) / (x * x) + r = *(*float32)(unsafe.Pointer(p)) + z*(*(*float32)(unsafe.Pointer(p + 1*4))+z*(*(*float32)(unsafe.Pointer(p + 2*4))+z*(*(*float32)(unsafe.Pointer(p + 3*4))+z*(*(*float32)(unsafe.Pointer(p + 4*4))+z**(*float32)(unsafe.Pointer(p + 5*4)))))) + s = Float32FromFloat32(1) + z*(*(*float32)(unsafe.Pointer(q))+z*(*(*float32)(unsafe.Pointer(q + 1*4))+z*(*(*float32)(unsafe.Pointer(q + 2*4))+z*(*(*float32)(unsafe.Pointer(q + 3*4))+z*(*(*float32)(unsafe.Pointer(q + 4*4))+z**(*float32)(unsafe.Pointer(q + 5*4))))))) + return (Float32FromFloat32(0.375) + r/s) / x +} + +var _invsqrtpi4 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ + +func Xjn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float64 + var i, k, nm1, sign int32 + var ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, h, i, ix, k, lx, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + /* nm1 = |n|-1 is used instead of |n| to handle n==INT_MIN */ + if n == 0 { + return Xj0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabs(tls, x) + if ix|lx == uint32(0) || ix == uint32(0x7ff00000) { /* if x is 0 or inf */ + b = float64(0) + } else { + if float64(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xcos(tls, x) + Xsin(tls, x) + case int32(1): + temp = -Xcos(tls, x) - Xsin(tls, x) + case int32(2): + temp = Xcos(tls, x) - Xsin(tls, x) + default: + fallthrough + case int32(3): + temp = Xcos(tls, x) + Xsin(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xj0(tls, x) + b = Xj1(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(float64(2)*float64(i)/x) - a /* avoid underflow */ + a = temp + goto _1 + _1: + } + } + } else { + if ix < uint32(0x3e100000) { /* x < 2**-29 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(32) { /* underflow */ + b = float64(0) + } else { + temp = x * float64(0.5) + b = temp + a = float64(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float64(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } + } else { + nf = float64(nm1) + float64(1) + w = Float64FromInt32(2) * nf / x + h = Float64FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - float64(1) + k = int32(1) + for q1 < float64(1e+09) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = float64(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float64FromInt32(1) / (Float64FromInt32(2)*(float64(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = float64(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlog(tls, Xfabs(tls, w)) + if tmp < float64(709.782712893384) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > float64(3.273390607896142e+150) { + a /= b + t /= b + b = float64(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0(tls, x) + w = Xj1(tls, x) + if Xfabs(tls, z) >= Xfabs(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xyn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, temp, v1, v3 float64 + var i, nm1, sign int32 + var ib, ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, i, ib, ix, lx, nm1, sign, temp, v1, v3 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + if sign != 0 && ix|lx != uint32(0) { /* x < 0 */ + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix == uint32(0x7ff00000) { + return float64(0) + } + if n == 0 { + return Xy0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1(tls, x) + } else { + v1 = Xy1(tls, x) + } + return v1 + } + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xsin(tls, x) - Xcos(tls, x) + case int32(1): + temp = -Xsin(tls, x) + Xcos(tls, x) + case int32(2): + temp = Xsin(tls, x) + Xcos(tls, x) + default: + fallthrough + case int32(3): + temp = Xsin(tls, x) - Xcos(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xy0(tls, x) + b = Xy1(tls, x) + /* quit if b is -inf */ + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xfff00000)) { + break + } + i++ + temp = b + b = float64(2)*float64(i)/x*b - a + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + a = temp + goto _2 + _2: + } + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xjnf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float32 + var i, k, nm1, sign int32 + var ix Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, h, i, ix, k, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + /* J(-n,x) = J(n,-x), use |n|-1 to avoid overflow in -n */ + if n == 0 { + return Xj0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1f(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabsf(tls, x) + if ix == uint32(0) || ix == uint32(0x7f800000) { /* if x is 0 or inf */ + b = Float32FromFloat32(0) + } else { + if float32(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = Xj0f(tls, x) + b = Xj1f(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(Float32FromFloat32(2)*float32(i)/x) - a + a = temp + goto _1 + _1: + } + } else { + if ix < uint32(0x35800000) { /* x < 2**-20 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(8) { /* underflow */ + nm1 = int32(8) + } + temp = Float32FromFloat32(0.5) * x + b = temp + a = Float32FromFloat32(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float32(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } else { + nf = float32(nm1) + Float32FromFloat32(1) + w = Float32FromInt32(2) * nf / x + h = Float32FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - Float32FromFloat32(1) + k = int32(1) + for q1 < Float32FromFloat32(10000) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = Float32FromFloat32(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float32FromFloat32(1) / (Float32FromInt32(2)*(float32(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = Float32FromFloat32(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlogf(tls, Xfabsf(tls, w)) + if tmp < Float32FromFloat32(88.721679688) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > Float32FromFloat32(1.152921504606847e+18) { + a /= b + t /= b + b = Float32FromFloat32(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0f(tls, x) + w = Xj1f(tls, x) + if Xfabsf(tls, z) >= Xfabsf(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xynf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, temp, v1, v3 float32 + var i, nm1, sign int32 + var ib, ix Tuint32_t + _, _, _, _, _, _, _, _, _, _ = a, b, i, ib, ix, nm1, sign, temp, v1, v3 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + if sign != 0 && ix != uint32(0) { /* x < 0 */ + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix == uint32(0x7f800000) { + return Float32FromFloat32(0) + } + if n == 0 { + return Xy0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1f(tls, x) + } else { + v1 = Xy1f(tls, x) + } + return v1 + } + a = Xy0f(tls, x) + b = Xy1f(tls, x) + /* quit if b is -inf */ + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xff800000)) { + break + } + i++ + temp = b + b = Float32FromFloat32(2)*float32(i)/x*b - a + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + a = temp + goto _2 + _2: + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xldexp(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xldexpf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, n) +} + +func Xldexpl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnl(tls, x, n) +} + +func Xlgamma(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi2 = float64(3.141592653589793) /* 0x400921FB, 0x54442D18 */ +var _a0 = float64(0.07721566490153287) /* 0x3FB3C467, 0xE37DB0C8 */ +var _a1 = float64(0.3224670334241136) /* 0x3FD4A34C, 0xC4A60FAD */ +var _a2 = float64(0.06735230105312927) /* 0x3FB13E00, 0x1A5562A7 */ +var _a3 = float64(0.020580808432516733) /* 0x3F951322, 0xAC92547B */ +var _a4 = float64(0.007385550860814029) /* 0x3F7E404F, 0xB68FEFE8 */ +var _a5 = float64(0.0028905138367341563) /* 0x3F67ADD8, 0xCCB7926B */ +var _a6 = float64(0.0011927076318336207) /* 0x3F538A94, 0x116F3F5D */ +var _a7 = float64(0.0005100697921535113) /* 0x3F40B6C6, 0x89B99C00 */ +var _a8 = float64(0.00022086279071390839) /* 0x3F2CF2EC, 0xED10E54D */ +var _a9 = float64(0.00010801156724758394) /* 0x3F1C5088, 0x987DFB07 */ +var _a10 = float64(2.5214456545125733e-05) /* 0x3EFA7074, 0x428CFA52 */ +var _a11 = float64(4.4864094961891516e-05) /* 0x3F07858E, 0x90A45837 */ +var _tc = float64(1.4616321449683622) /* 0x3FF762D8, 0x6356BE3F */ +var _tf = -Float64FromFloat64(0.12148629053584961) /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +var _tt = -Float64FromFloat64(3.638676997039505e-18) /* 0xBC50C7CA, 0xA48A971F */ +var _t0 = float64(0.48383612272381005) /* 0x3FDEF72B, 0xC8EE38A2 */ +var _t1 = -Float64FromFloat64(0.1475877229945939) /* 0xBFC2E427, 0x8DC6C509 */ +var _t2 = float64(0.06462494023913339) /* 0x3FB08B42, 0x94D5419B */ +var _t3 = -Float64FromFloat64(0.032788541075985965) /* 0xBFA0C9A8, 0xDF35B713 */ +var _t4 = float64(0.01797067508118204) /* 0x3F9266E7, 0x970AF9EC */ +var _t5 = -Float64FromFloat64(0.010314224129834144) /* 0xBF851F9F, 0xBA91EC6A */ +var _t6 = float64(0.006100538702462913) /* 0x3F78FCE0, 0xE370E344 */ +var _t7 = -Float64FromFloat64(0.0036845201678113826) /* 0xBF6E2EFF, 0xB3E914D7 */ +var _t8 = float64(0.0022596478090061247) /* 0x3F6282D3, 0x2E15C915 */ +var _t9 = -Float64FromFloat64(0.0014034646998923284) /* 0xBF56FE8E, 0xBF2D1AF1 */ +var _t10 = float64(0.000881081882437654) /* 0x3F4CDF0C, 0xEF61A8E9 */ +var _t11 = -Float64FromFloat64(0.0005385953053567405) /* 0xBF41A610, 0x9C73E0EC */ +var _t12 = float64(0.00031563207090362595) /* 0x3F34AF6D, 0x6C0EBBF7 */ +var _t13 = -Float64FromFloat64(0.00031275416837512086) /* 0xBF347F24, 0xECC38C38 */ +var _t14 = float64(0.0003355291926355191) /* 0x3F35FD3E, 0xE8C2D3F4 */ +var _u0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _u1 = float64(0.6328270640250934) /* 0x3FE4401E, 0x8B005DFF */ +var _u2 = float64(1.4549225013723477) /* 0x3FF7475C, 0xD119BD6F */ +var _u3 = float64(0.9777175279633727) /* 0x3FEF4976, 0x44EA8450 */ +var _u4 = float64(0.22896372806469245) /* 0x3FCD4EAE, 0xF6010924 */ +var _u5 = float64(0.013381091853678766) /* 0x3F8B678B, 0xBF2BAB09 */ +var _v1 = float64(2.4559779371304113) /* 0x4003A5D7, 0xC2BD619C */ +var _v2 = float64(2.128489763798934) /* 0x40010725, 0xA42B18F5 */ +var _v3 = float64(0.7692851504566728) /* 0x3FE89DFB, 0xE45050AF */ +var _v4 = float64(0.10422264559336913) /* 0x3FBAAE55, 0xD6537C88 */ +var _v5 = float64(0.003217092422824239) /* 0x3F6A5ABB, 0x57D0CF61 */ +var _s0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _s1 = float64(0.21498241596060885) /* 0x3FCB848B, 0x36E20878 */ +var _s2 = float64(0.325778796408931) /* 0x3FD4D98F, 0x4F139F59 */ +var _s3 = float64(0.14635047265246445) /* 0x3FC2BB9C, 0xBEE5F2F7 */ +var _s4 = float64(0.02664227030336386) /* 0x3F9B481C, 0x7E939961 */ +var _s5 = float64(0.0018402845140733772) /* 0x3F5E26B6, 0x7368F239 */ +var _s6 = float64(3.194753265841009e-05) /* 0x3F00BFEC, 0xDD17E945 */ +var _r1 = float64(1.3920053346762105) /* 0x3FF645A7, 0x62C4AB74 */ +var _r2 = float64(0.7219355475671381) /* 0x3FE71A18, 0x93D3DCDC */ +var _r3 = float64(0.17193386563280308) /* 0x3FC601ED, 0xCCFBDF27 */ +var _r4 = float64(0.01864591917156529) /* 0x3F9317EA, 0x742ED475 */ +var _r5 = float64(0.0007779424963818936) /* 0x3F497DDA, 0xCA41A95B */ +var _r6 = float64(7.326684307446256e-06) /* 0x3EDEBAF7, 0xA5B38140 */ +var _w0 = float64(0.4189385332046727) /* 0x3FDACFE3, 0x90C97D69 */ +var _w1 = float64(0.08333333333333297) /* 0x3FB55555, 0x5555553B */ +var _w2 = -Float64FromFloat64(0.0027777777772877554) /* 0xBF66C16C, 0x16B02E5C */ +var _w3 = float64(0.0007936505586430196) /* 0x3F4A019F, 0x98CF38B6 */ +var _w4 = -Float64FromFloat64(0.00059518755745034) /* 0xBF4380CB, 0x8C0FE741 */ +var _w5 = float64(0.0008363399189962821) /* 0x3F4B67BA, 0x4CDAD5D1 */ +var _w6 = -Float64FromFloat64(0.0016309293409657527) /* 0xBF5AB89D, 0x0B9E43E4 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* spurious inexact if odd int */ + x = float64(2) * (x*float64(0.5) - Xfloor(tls, x*float64(0.5))) /* x mod 2.0 */ + n = int32(x * Float64FromFloat64(4)) + n = (n + int32(1)) / int32(2) + x -= float64(float32(n) * Float32FromFloat32(0.5)) + x *= _pi2 + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sin(tls, x, float64(0), 0) + case int32(1): + return X__cos(tls, x, float64(0)) + case int32(2): + return X__sin(tls, -x, float64(0), 0) + case int32(3): + return -X__cos(tls, x, float64(0)) + } + return r +} + +func X__lgamma_r(tls *TLS, x float64, signgamp uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix >= uint32(0x7ff00000) { + return x * x + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(70))< float64(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlog(tls, _pi2/(t*x)) + } + /* purge off 1 and 2 */ + if (ix == uint32(0x3ff00000) || ix == uint32(0x40000000)) && uint32(*(*Tuint64_t)(unsafe.Pointer(bp))) == uint32(0) { + r = Float64FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlog(tls, x) + if ix >= uint32(0x3FE76944) { + y = float64(1) - x + i = 0 + } else { + if ix >= uint32(0x3FCDA661) { + y = x - (_tc - Float64FromFloat64(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = float64(0) + if ix >= uint32(0x3FFBB4C3) { /* [1.7316,2] */ + y = float64(2) - x + i = 0 + } else { + if ix >= uint32(0x3FF3B4C4) { /* [1.23,1.73] */ + y = x - _tc + i = int32(1) + } else { + y = x - float64(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a0 + z*(_a2+z*(_a4+z*(_a6+z*(_a8+z*_a10)))) + p2 = z * (_a1 + z*(_a3+z*(_a5+z*(_a7+z*(_a9+z*_a11))))) + p = y*p1 + p2 + r += p - float64(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t0 + w*(_t3+w*(_t6+w*(_t9+w*_t12))) /* parallel comp */ + p2 = _t1 + w*(_t4+w*(_t7+w*(_t10+w*_t13))) + p3 = _t2 + w*(_t5+w*(_t8+w*(_t11+w*_t14))) + p = z*p1 - (_tt - w*(p2+y*p3)) + r += _tf + p + case int32(2): + p1 = y * (_u0 + y*(_u1+y*(_u2+y*(_u3+y*(_u4+y*_u5))))) + p2 = float64(1) + y*(_v1+y*(_v2+y*(_v3+y*(_v4+y*_v5)))) + r += -Float64FromFloat64(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x40200000) { /* x < 8.0 */ + i = int32(x) + y = x - float64(i) + p = y * (_s0 + y*(_s1+y*(_s2+y*(_s3+y*(_s4+y*(_s5+y*_s6)))))) + q = float64(1) + y*(_r1+y*(_r2+y*(_r3+y*(_r4+y*(_r5+y*_r6))))) + r = float64(0.5)*y + p/q + z = float64(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + float64(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + float64(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + float64(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + float64(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + float64(2) /* FALLTHRU */ + r += Xlog(tls, z) + break + } + } else { + if ix < uint32(0x43900000) { /* 8.0 <= x < 2**58 */ + t = Xlog(tls, x) + z = float64(1) / x + y = z * z + w = _w0 + z*(_w1+y*(_w2+y*(_w3+y*(_w4+y*(_w5+y*_w6))))) + r = (x-float64(0.5))*(t-Float64FromFloat64(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlog(tls, x) - float64(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgamma_r(tls *TLS, x float64, signgamp uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, signgamp) +} + +func Xlgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi3 = float32(3.141592741) /* 0x40490fdb */ +var _a01 = float32(0.077215664089) /* 0x3d9e233f */ +var _a12 = float32(0.32246702909) /* 0x3ea51a66 */ +var _a21 = float32(0.067352302372) /* 0x3d89f001 */ +var _a31 = float32(0.020580807701) /* 0x3ca89915 */ +var _a41 = float32(0.0073855509982) /* 0x3bf2027e */ +var _a51 = float32(0.0028905137442) /* 0x3b3d6ec6 */ +var _a61 = float32(0.0011927076848) /* 0x3a9c54a1 */ +var _a71 = float32(0.00051006977446) /* 0x3a05b634 */ +var _a81 = float32(0.00022086278477) /* 0x39679767 */ +var _a91 = float32(0.00010801156895) /* 0x38e28445 */ +var _a101 = float32(2.52144564e-05) /* 0x37d383a2 */ +var _a111 = float32(4.4864096708e-05) /* 0x383c2c75 */ +var _tc1 = float32(1.4616321325) /* 0x3fbb16c3 */ +var _tf1 = float32(-Float64FromFloat64(0.12148628384)) /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +var _tt1 = float32(6.6971006518e-09) /* 0x31e61c52 */ +var _t01 = float32(0.48383611441) /* 0x3ef7b95e */ +var _t15 = float32(-Float64FromFloat64(0.14758771658)) /* 0xbe17213c */ +var _t21 = float32(0.064624942839) /* 0x3d845a15 */ +var _t31 = float32(-Float64FromFloat64(0.032788541168)) /* 0xbd064d47 */ +var _t41 = float32(0.017970675603) /* 0x3c93373d */ +var _t51 = float32(-Float64FromFloat64(0.010314224288)) /* 0xbc28fcfe */ +var _t61 = float32(0.0061005386524) /* 0x3bc7e707 */ +var _t71 = float32(-Float64FromFloat64(0.0036845202558)) /* 0xbb7177fe */ +var _t81 = float32(0.0022596477065) /* 0x3b141699 */ +var _t91 = float32(-Float64FromFloat64(0.0014034647029)) /* 0xbab7f476 */ +var _t101 = float32(0.00088108185446) /* 0x3a66f867 */ +var _t111 = float32(-Float64FromFloat64(0.00053859531181)) /* 0xba0d3085 */ +var _t121 = float32(0.00031563205994) /* 0x39a57b6b */ +var _t131 = float32(-Float64FromFloat64(0.00031275415677)) /* 0xb9a3f927 */ +var _t141 = float32(0.00033552918467) /* 0x39afe9f7 */ +var _u07 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _u11 = float32(0.63282704353) /* 0x3f2200f4 */ +var _u21 = float32(1.4549225569) /* 0x3fba3ae7 */ +var _u31 = float32(0.97771751881) /* 0x3f7a4bb2 */ +var _u41 = float32(0.22896373272) /* 0x3e6a7578 */ +var _u51 = float32(0.013381091878) /* 0x3c5b3c5e */ +var _v11 = float32(2.4559779167) /* 0x401d2ebe */ +var _v21 = float32(2.1284897327) /* 0x4008392d */ +var _v31 = float32(0.76928514242) /* 0x3f44efdf */ +var _v41 = float32(0.10422264785) /* 0x3dd572af */ +var _v51 = float32(0.0032170924824) /* 0x3b52d5db */ +var _s06 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _s11 = float32(0.21498242021) /* 0x3e5c245a */ +var _s21 = float32(0.32577878237) /* 0x3ea6cc7a */ +var _s31 = float32(0.14635047317) /* 0x3e15dce6 */ +var _s41 = float32(0.026642270386) /* 0x3cda40e4 */ +var _s51 = float32(0.0018402845599) /* 0x3af135b4 */ +var _s61 = float32(3.1947532989e-05) /* 0x3805ff67 */ +var _r11 = float32(1.3920053244) /* 0x3fb22d3b */ +var _r21 = float32(0.72193557024) /* 0x3f38d0c5 */ +var _r31 = float32(0.17193385959) /* 0x3e300f6e */ +var _r41 = float32(0.018645919859) /* 0x3c98bf54 */ +var _r51 = float32(0.00077794247773) /* 0x3a4beed6 */ +var _r61 = float32(7.3266842264e-06) /* 0x36f5d7bd */ +var _w01 = float32(0.41893854737) /* 0x3ed67f1d */ +var _w11 = float32(0.083333335817) /* 0x3daaaaab */ +var _w21 = float32(-Float64FromFloat64(0.002777777845)) /* 0xbb360b61 */ +var _w31 = float32(0.00079365057172) /* 0x3a500cfd */ +var _w41 = float32(-Float64FromFloat64(0.00059518753551)) /* 0xba1c065c */ +var _w51 = float32(0.00083633989561) /* 0x3a5b3dd2 */ +var _w61 = float32(-Float64FromFloat64(0.0016309292987)) /* 0xbad5c4e8 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi1(tls *TLS, x float32) (r float32) { + var n int32 + var y Tdouble_t + _, _ = n, y + /* spurious inexact if odd int */ + x = Float32FromInt32(2) * (x*Float32FromFloat32(0.5) - Xfloorf(tls, x*Float32FromFloat32(0.5))) /* x mod 2.0 */ + n = int32(x * Float32FromInt32(4)) + n = (n + int32(1)) / int32(2) + y = float64(x - float32(n)*Float32FromFloat32(0.5)) + y *= float64(3.141592653589793) + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sindf(tls, y) + case int32(1): + return X__cosdf(tls, y) + case int32(2): + return X__sindf(tls, -y) + case int32(3): + return -X__cosdf(tls, y) + } + return r +} + +func X__lgammaf_r(tls *TLS, x float32, signgamp uintptr) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return x * x + } + if ix < uint32(0x35000000) { /* |x| < 2**-21, return -log(|x|) */ + if sign != 0 { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + x = -x + } + return -Xlogf(tls, x) + } + if sign != 0 { + x = -x + t = _sin_pi1(tls, x) + if t == Float32FromFloat32(0) { /* -integer */ + return Float32FromFloat32(1) / (x - x) + } + if t > Float32FromFloat32(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlogf(tls, _pi3/(t*x)) + } + /* purge off 1 and 2 */ + if ix == uint32(0x3f800000) || ix == uint32(0x40000000) { + r = Float32FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3f666666) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlogf(tls, x) + if ix >= uint32(0x3f3b4a20) { + y = Float32FromFloat32(1) - x + i = 0 + } else { + if ix >= uint32(0x3e6d3308) { + y = x - (_tc1 - Float32FromFloat32(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float32FromFloat32(0) + if ix >= uint32(0x3fdda618) { /* [1.7316,2] */ + y = Float32FromFloat32(2) - x + i = 0 + } else { + if ix >= uint32(0x3F9da620) { /* [1.23,1.73] */ + y = x - _tc1 + i = int32(1) + } else { + y = x - Float32FromFloat32(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a01 + z*(_a21+z*(_a41+z*(_a61+z*(_a81+z*_a101)))) + p2 = z * (_a12 + z*(_a31+z*(_a51+z*(_a71+z*(_a91+z*_a111))))) + p = y*p1 + p2 + r += p - Float32FromFloat32(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t01 + w*(_t31+w*(_t61+w*(_t91+w*_t121))) /* parallel comp */ + p2 = _t15 + w*(_t41+w*(_t71+w*(_t101+w*_t131))) + p3 = _t21 + w*(_t51+w*(_t81+w*(_t111+w*_t141))) + p = z*p1 - (_tt1 - w*(p2+y*p3)) + r += _tf1 + p + case int32(2): + p1 = y * (_u07 + y*(_u11+y*(_u21+y*(_u31+y*(_u41+y*_u51))))) + p2 = Float32FromFloat32(1) + y*(_v11+y*(_v21+y*(_v31+y*(_v41+y*_v51)))) + r += -Float32FromFloat32(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x41000000) { /* x < 8.0 */ + i = int32(x) + y = x - float32(i) + p = y * (_s06 + y*(_s11+y*(_s21+y*(_s31+y*(_s41+y*(_s51+y*_s61)))))) + q = Float32FromFloat32(1) + y*(_r11+y*(_r21+y*(_r31+y*(_r41+y*(_r51+y*_r61))))) + r = Float32FromFloat32(0.5)*y + p/q + z = Float32FromFloat32(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float32FromFloat32(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float32FromFloat32(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float32FromFloat32(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float32FromFloat32(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float32FromFloat32(2) /* FALLTHRU */ + r += Xlogf(tls, z) + break + } + } else { + if ix < uint32(0x5c800000) { /* 8.0 <= x < 2**58 */ + t = Xlogf(tls, x) + z = Float32FromFloat32(1) / x + y = z * z + w = _w01 + z*(_w11+y*(_w21+y*(_w31+y*(_w41+y*(_w51+y*_w61))))) + r = (x-Float32FromFloat32(0.5))*(t-Float32FromFloat32(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlogf(tls, x) - Float32FromFloat32(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgammaf_r(tls *TLS, x float32, signgamp uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, signgamp) +} + +func X__lgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, sg) +} + +func Xlgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +func Xlgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, sg) +} + +/* uses LLONG_MAX > 2^53, see comments in lrint.c */ + +func Xllrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LLONG_MAX > 2^24, see comments in lrint.c */ + +func Xllrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +const FE_ALL_EXCEPT = 31 +const FE_DIVBYZERO = 8 +const FE_DOWNWARD = 2 +const FE_INEXACT = 1 +const FE_INVALID = 16 +const FE_OVERFLOW = 4 +const FE_TONEAREST = 0 +const FE_TOWARDZERO = 1 +const FE_UNDERFLOW = 2 +const FE_UPWARD = 3 + +type Tfexcept_t = uint32 + +type Tfenv_t = uint32 + +func Xllrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xllrint(tls, x) +} + +func Xllround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xllroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xllroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +const LOG_POLY1_ORDER = 12 +const LOG_POLY_ORDER = 6 +const LOG_TABLE_BITS = 7 +const N4 = 128 +const OFF = 4604367669032910848 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top16(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, r, r2, r3, rhi, rlo, w, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, r, r2, r3, rhi, rlo, tmp, top, w, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top16(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.064697265625) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + r2 = r * r + r3 = r * r2 + y1 = r3 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 1*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 2*8)) + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 3*8)) + r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 5*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 6*8))+r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 7*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 8*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 9*8))+r3**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 10*8))))) + /* Worst-case error is around 0.507 ULP. */ + w = r * float64(1.34217728e+08) + rhi = r + w - w + rlo = r - rhi + w = rhi * rhi * *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) /* B[0] == -0.5. */ + hi = r + w + lo = r - hi + w + lo += *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) * rlo * (rhi + r) + y1 += lo + y1 += hi + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-5: + 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma) + Worst case error if |y| > 0x1p-4: + 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */ + y1 = lo + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16)) + r*r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 1*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 2*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 3*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 4*8)))) + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +var _ivln10hi = float64(0.4342944818781689) /* 0x3fdbcb7b, 0x15200000 */ +var _ivln10lo = float64(2.5082946711645275e-11) /* 0x3dbb9438, 0xca9aadd5 */ +var _log10_2hi = float64(0.30102999566361177) /* 0x3FD34413, 0x509F6000 */ +var _log10_2lo = float64(3.694239077158931e-13) /* 0x3D59FEF3, 0x11F12B36 */ +var _Lg1 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg2 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg3 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg4 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg5 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg6 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg7 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, val_hi, val_lo, w, y, z Tdouble_t + var hx Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, hx, k, lo, s, t1, t2, val_hi, val_lo, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = 0 + if hx < uint32(0x00100000) || hx>>int32(31) != 0 { + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(31) != 0 { + return (x - x) / float64(0) + } /* log(-#) = NaN */ + /* subnormal number, scale x up */ + k -= int32(54) + x *= float64(1.8014398509481984e+16) + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + } else { + if hx >= uint32(0x7ff00000) { + return x + } else { + if hx == uint32(0x3ff00000) && *(*Tuint64_t)(unsafe.Pointer(bp))<>Int32FromInt32(20)) - int32(0x3ff) + hx = hx&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hx)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, w, z Tfloat_t + var ix Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, ix, k, lo, s, t1, t2, w, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = 0 + if ix < uint32(0x00800000) || ix>>int32(31) != 0 { /* x < 2**-126 */ + if ix<>int32(31) != 0 { + return (x - x) / Float32FromFloat32(0) + } /* log(-#) = NaN */ + /* subnormal number, scale up x */ + k -= int32(25) + x *= Float32FromFloat32(3.3554432e+07) + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + } else { + if ix >= uint32(0x7f800000) { + return x + } else { + if ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + } + } + /* reduce x into [sqrt(2)/2, sqrt(2)] */ + ix += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k += int32(ix>>Int32FromInt32(23)) - int32(0x7f) + ix = ix&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix + x = *(*float32)(unsafe.Pointer(bp)) + f = x - Float32FromFloat32(1) + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg21 + w*_Lg41) + t2 = z * (_Lg11 + w*_Lg31) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + hi = f - hfsq + *(*float32)(unsafe.Pointer(bp)) = hi + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0xfffff000) + hi = *(*float32)(unsafe.Pointer(bp)) + lo = f - hi - hfsq + s*(hfsq+R) + dk = float32(k) + return dk*_log10_2lo1 + (lo+hi)*_ivln10lo1 + lo*_ivln10hi1 + hi*_ivln10hi1 + dk*_log10_2hi1 +} + +func Xlog10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog10(tls, x) +} + +var _ln2_hi2 = float64(0.6931471803691238) /* 3fe62e42 fee00000 */ +var _ln2_lo2 = float64(1.9082149292705877e-10) /* 3dea39ef 35793c76 */ +var _Lg12 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg22 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg32 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg42 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg51 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg61 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg71 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog1p(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tdouble_t + var hu, hx Tuint32_t + var k int32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, hu, hx, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = int32(1) + if hx < uint32(0x3fda827a) || hx>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if hx >= uint32(0xbff00000) { /* x <= -1.0 */ + if x3 == float64(-Int32FromInt32(1)) { + return x3 / float64(0) + } /* log1p(-1) = -inf */ + return (x3 - x3) / float64(0) /* log1p(x<-1) = NaN */ + } + if hx<= uint32(0x7ff00000) { + return x3 + } + } + if k != 0 { + *(*float64)(unsafe.Pointer(bp)) = Float64FromInt32(1) + x3 + hu = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + hu += uint32(Int32FromInt32(0x3ff00000) - Int32FromInt32(0x3fe6a09e)) + k = int32(hu>>Int32FromInt32(20)) - int32(0x3ff) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(54) { + if k >= int32(2) { + v1 = Float64FromInt32(1) - (*(*float64)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float64)(unsafe.Pointer(bp)) - Float64FromInt32(1)) + } + c = v1 + c /= *(*float64)(unsafe.Pointer(bp)) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + hu = hu&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hu)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tfloat_t + var iu, ix Tuint32_t + var k int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, iu, ix, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = int32(1) + if ix < uint32(0x3ed413d0) || ix>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if ix >= uint32(0xbf800000) { /* x <= -1.0 */ + if x3 == float32(-Int32FromInt32(1)) { + return x3 / Float32FromFloat32(0) + } /* log1p(-1)=+inf */ + return (x3 - x3) / Float32FromFloat32(0) /* log1p(x<-1)=NaN */ + } + if ix<= uint32(0x7f800000) { + return x3 + } + } + if k != 0 { + *(*float32)(unsafe.Pointer(bp)) = Float32FromInt32(1) + x3 + iu = *(*Tuint32_t)(unsafe.Pointer(bp)) + iu += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k = int32(iu>>Int32FromInt32(23)) - int32(0x7f) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(25) { + if k >= int32(2) { + v1 = Float32FromInt32(1) - (*(*float32)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + c = v1 + c /= *(*float32)(unsafe.Pointer(bp)) + } else { + c = Float32FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + iu = iu&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = iu + f = *(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1) + } + s = f / (Float32FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (_Lg23 + w*_Lg43) + t2 = z * (_Lg13 + w*_Lg33) + R = t2 + t1 + hfsq = Float32FromFloat32(0.5) * f * f + dk = float32(k) + return s*(hfsq+R) + (dk*_ln2_lo3 + c) - hfsq + f + dk*_ln2_hi3 +} + +func Xlog1pl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog1p(tls, x) +} + +const LOG2_POLY1_ORDER = 11 +const LOG2_POLY_ORDER = 7 +const LOG2_TABLE_BITS = 6 +const N5 = 64 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top161(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, p, r, r2, r4, t1, t2, t3, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, p, r, r2, r4, t1, t2, t3, tmp, top, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top161(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.044274330139160156) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + hi = r * X__log2_data.Finvln2hi + lo = r*X__log2_data.Finvln2lo + X__builtin_fma(tls, r, X__log2_data.Finvln2hi, -hi) + r2 = r * r /* rounding error: 0x1p-62. */ + r4 = r2 * r2 + /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */ + p = r2 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 1*8))) + y1 = hi + p + lo += hi - y1 + p + lo += r4 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 2*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 3*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 5*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 6*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 7*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 8*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 9*8))))) + y1 += lo + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-4: 0.547 ULP (0.550 ULP without fma). + ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */ + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 1*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 2*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 3*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 5*8))) + y1 = lo + r2*p + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +type Tlog2_data = struct { + Finvln2hi float64 + Finvln2lo float64 + Fpoly [6]float64 + Fpoly1 [10]float64 + Ftab [64]struct { + Finvc float64 + Flogc float64 + } +} + +const LOG2F_POLY_ORDER = 4 +const LOG2F_TABLE_BITS = 4 +const N6 = 16 +const OFF1 = 1060306944 + +/* +LOG2F_TABLE_BITS = 4 +LOG2F_POLY_ORDER = 4 + +ULP error: 0.752 (nearest rounding.) +Relative error: 1.9 * 2^-26 (before rounding.) +*/ + +func Xlog2f(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, k int32 + var invc, logc, p, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp, top Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, p, r, r2, tmp, top, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log2(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOG2F_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256))*r2 + y1 + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 3*8))*r + y0 + y1 = y1*r2 + p + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlog2f_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fpoly [4]float64 +} + +func Xlog2l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog2(tls, x) +} + +const N7 = 128 + +type Tlog_data = struct { + Fln2hi float64 + Fln2lo float64 + Fpoly [5]float64 + Fpoly1 [11]float64 + Ftab [128]struct { + Finvc float64 + Flogc float64 + } +} + +/* +special cases: + logb(+-0) = -inf, and raise divbyzero + logb(+-inf) = +inf + logb(nan) = nan +*/ + +func Xlogb(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + return x * x + } + if x == Float32FromInt32(0) { + return float32(-Int32FromInt32(1)) / (x * x) + } + return float32(Xilogbf(tls, x)) +} + +func Xlogbl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r1) }() + } + var i, k int32 + var invc, logc, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, r, r2, tmp, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOGF_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + iz = ix - tmp&uint32(0xff800000) + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k)*X__logf_data.Fln2 + /* Pipelined polynomial evaluation to approximate log1p(r). */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264))*r2 + y1 + y1 = y1*r2 + (y0 + r) + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlogf_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fln2 float64 + Fpoly [3]float64 +} + +func Xlogl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog(tls, x) +} + +/* +If the result cannot be represented (overflow, nan), then +lrint raises the invalid exception. + +Otherwise if the input was not an integer then the inexact +exception is raised. + +C99 is a bit vague about whether inexact exception is +allowed to be raised when invalid is raised. +(F.9 explicitly allows spurious inexact exceptions, F.9.6.5 +does not make it clear if that rule applies to lrint, but +IEEE 754r 7.8 seems to forbid spurious inexact exception in +the ineger conversion functions) + +So we try to make sure that no spurious inexact exception is +raised in case of an overflow. + +If the bit size of long > precision of double, then there +cannot be inexact rounding in case the result overflows, +otherwise LONG_MAX and LONG_MIN can be represented exactly +as a double. +*/ + +func Xlrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LONG_MAX > 2^24, see comments in lrint.c */ + +func Xlrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xlrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlrint(tls, x) +} + +func Xlround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xlroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xlroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +func Xmodf(tls *TLS, x float64, iptr uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint64_t + var p1, p2, p3 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, mask, p1, p2, p3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + /* no fractional part */ + if e >= int32(52) { + *(*float64)(unsafe.Pointer(iptr)) = x + if e == int32(0x400) && *(*Tuint64_t)(unsafe.Pointer(bp))<> Int32FromInt32(12) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { + *(*float64)(unsafe.Pointer(iptr)) = x + p3 = bp + *(*Tuint64_t)(unsafe.Pointer(p3)) = *(*Tuint64_t)(unsafe.Pointer(p3)) & (Uint64FromUint64(1) << Int32FromInt32(63)) + return *(*float64)(unsafe.Pointer(bp)) + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return x - *(*float64)(unsafe.Pointer(bp)) +} + +func Xmodff(tls *TLS, x float32, iptr uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + /* no fractional part */ + if e >= int32(23) { + *(*float32)(unsafe.Pointer(iptr)) = x + if e == int32(0x80) && *(*Tuint32_t)(unsafe.Pointer(bp))<> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&mask == uint32(0) { + *(*float32)(unsafe.Pointer(iptr)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^mask + *(*float32)(unsafe.Pointer(iptr)) = *(*float32)(unsafe.Pointer(bp)) + return x - *(*float32)(unsafe.Pointer(bp)) +} + +func Xmodfl(tls *TLS, x float64, iptr uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r float64 + var _ /* d at bp+0 */ float64 + _ = r + r = Xmodf(tls, x, bp) + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return r +} + +func Xnan(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnanf(tls *TLS, s uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__builtin_nanf(tls, __ccgo_ts) +} + +func Xnanl(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnextafter(tls *TLS, x3 float64, y3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ax, ay Tuint64_t + var e int32 + var y float32 + var y1, y2 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y3 + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> int32(52) & uint64(0x7ff)) + /* raise overflow if ux.f is infinite and x is finite */ + if e == int32(0x7ff) { + if uint64(8) == uint64(4) { + y = float32(x3 + x3) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + x3 + } else { + y2 = x3 + x3 + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == 0 { + if uint64(8) == uint64(4) { + y = float32(x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8))) + } else { + if uint64(8) == uint64(8) { + y1 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } else { + y2 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } + } + } + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xnextafterf(tls *TLS, x3 float32, y3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ax, ay, e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y3 + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + y3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == *(*Tuint32_t)(unsafe.Pointer(bp + 8)) { + return y3 + } + ax = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7fffffff) + ay = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) & uint32(0x7fffffff) + if ax == uint32(0) { + if ay == uint32(0) { + return y3 + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = *(*Tuint32_t)(unsafe.Pointer(bp + 8))&uint32(0x80000000) | uint32(1) + } else { + if ax > ay || (*(*Tuint32_t)(unsafe.Pointer(bp + 4))^*(*Tuint32_t)(unsafe.Pointer(bp + 8)))&uint32(0x80000000) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))++ + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xnextafterl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttoward(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttowardf(tls *TLS, x3 float32, y3 float64) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v10, v8 uint32 + var v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* __u at bp+8 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+16 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _ = e, y, y1, y2, v1, v10, v3, v5, v6, v8 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 16)) = x3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float64)(unsafe.Pointer(bp + 8)) = y3 + v3 = *(*uint64)(unsafe.Pointer(bp + 8)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16)) |= uint32(0x80000000) + } + } else { + if float64(x3) < y3 { + *(*float32)(unsafe.Pointer(bp)) = x3 + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 + _9: + if int32(v8>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } + } else { + *(*float32)(unsafe.Pointer(bp)) = x3 + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 16)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 16)) +} + +func Xnexttowardl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafterl(tls, x, y) +} + +const OFF2 = 4604531861337669632 +const POW_LOG_POLY_ORDER = 8 +const POW_LOG_TABLE_BITS = 7 +const SIGN_BIAS = 262144 + +/* +Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53) +relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma) +ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma) +*/ + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top124(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +// C documentation +// +// /* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about +// additional 15 bits precision. IX is the bit representation of x, but +// normalized in the subnormal range using the sign bit for the exponent. */ +func _log_inline(tls *TLS, ix Tuint64_t, tail uintptr) (r1 Tdouble_t) { + var ar, ar2, ar3, hi, invc, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, y, z Tdouble_t + var i, k int32 + var iz, tmp Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ar, ar2, ar3, hi, i, invc, iz, k, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, tmp, y, z + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF2) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ + sbits = sbits - Uint64FromUint64(1009)<= _top124(tls, float64(512))-_top124(tls, float64(5.551115123125783e-17)) { + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + one = float64(1) + x1 + if sign_bias != 0 { + v1 = -one + } else { + v1 = one + } + return v1 + } + if abstop >= _top124(tls, float64(1024)) { + /* Note: inf and nan are already handled. */ + v2 = x1 + if *(*Tuint64_t)(unsafe.Pointer(&v2))>>int32(63) != 0 { + return X__math_uflow(tls, sign_bias) + } else { + return X__math_oflow(tls, sign_bias) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v3 = y + goto _4 +_4: + kd = v3 + v5 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v5)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* The code assumes 2^-200 < |xtail| < 2^-8/N. */ + r += xtail + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is +// the bit representation of a non-zero finite floating-point value. */ +func _checkint(tls *TLS, iy Tuint64_t) (r int32) { + var e int32 + _ = e + e = int32(iy >> int32(52) & uint64(0x7ff)) + if e < int32(0x3ff) { + return 0 + } + if e > Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return int32(2) + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)-uint64(1)) != 0 { + return 0 + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +// C documentation +// +// /* Returns 1 if input is the bit representation of 0, infinity or nan. */ +func _zeroinfnan(tls *TLS, i Tuint64_t) (r int32) { + var v1 float64 + _ = v1 + v1 = float64(X__builtin_inff(tls)) + return BoolInt32(uint64(2)*i-uint64(1) >= uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v1))-uint64(1)) +} + +func Xpow(tls *TLS, x1 float64, y1 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ehi, elo, hi, x2 Tdouble_t + var ix, iy Tuint64_t + var sign_bias, topx, topy Tuint32_t + var y, v1, v10, v11, v12, v13, v14, v15, v2, v3, v5, v6, v7, v8 float64 + var yint int32 + var v4 bool + var _ /* lo at bp+0 */ Tdouble_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ehi, elo, hi, ix, iy, sign_bias, topx, topy, x2, y, yint, v1, v10, v11, v12, v13, v14, v15, v2, v3, v4, v5, v6, v7, v8 + sign_bias = uint32(0) + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint64_t)(unsafe.Pointer(&y1)) + topx = _top124(tls, x1) + topy = _top124(tls, y1) + if topx-uint32(0x001) >= uint32(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) || topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0 + and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */ + /* Special cases: (x < 0x1p-126 or inf or nan) or + (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */ + if _zeroinfnan(tls, iy) != 0 { + if uint64(2)*iy == uint64(0) { + return float64(1) + } + v1 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(1) + } + v2 = float64(X__builtin_inff(tls)) + if v4 = uint64(2)*ix > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v2)); !v4 { + v3 = float64(X__builtin_inff(tls)) + } + if v4 || uint64(2)*iy > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + return x1 + y1 + } + v5 = float64(1) + if uint64(2)*ix == uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v5)) { + return float64(1) + } + v6 = float64(1) + if BoolInt32(uint64(2)*ix < uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v6))) == BoolInt32(!(iy>>Int32FromInt32(63) != 0)) { + return float64(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan(tls, ix) != 0 { + x2 = x1 * x1 + if ix>>int32(63) != 0 && _checkint(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy>>int32(63) != 0 { + y = Float64FromInt32(1) / x2 + v8 = y + goto _9 + _9: + v7 = v8 + } else { + v7 = x2 + } + return v7 + } + /* Here x and y are non-zero finite. */ + if ix>>int32(63) != 0 { + /* Finite x < 0. */ + yint = _checkint(tls, iy) + if yint == 0 { + return X__math_invalid(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(0x800) << Int32FromInt32(EXP_TABLE_BITS)) + } + ix &= uint64(0x7fffffffffffffff) + topx &= uint32(0x7ff) + } + if topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: sign_bias == 0 here because y is not odd. */ + v10 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { + return float64(1) + } + if topy&uint32(0x7ff) < uint32(0x3be) { + /* |y| < 2^-65, x^y ~= 1 + y*log(x). */ + if int32(WANT_ROUNDING) != 0 { + v12 = float64(1) + if ix > *(*Tuint64_t)(unsafe.Pointer(&v12)) { + v11 = float64(1) + y1 + } else { + v11 = float64(1) - y1 + } + return v11 + } else { + return float64(1) + } + } + v14 = float64(1) + if BoolInt32(ix > *(*Tuint64_t)(unsafe.Pointer(&v14))) == BoolInt32(topy < uint32(0x800)) { + v13 = X__math_oflow(tls, uint32(0)) + } else { + v13 = X__math_uflow(tls, uint32(0)) + } + return v13 + } + if topx == uint32(0) { + /* Normalize subnormal x so exponent becomes negative. */ + v15 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v15)) + ix &= uint64(0x7fffffffffffffff) + ix = ix - Uint64FromUint64(52)<> (Int32FromInt32(23) - Int32FromInt32(POWF_LOG2_TABLE_BITS)) % uint32(Int32FromInt32(1)<> (Int32FromInt32(23) - Int32FromInt32(POWF_SCALE_BITS)) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 1*8)) + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 2*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 3*8)) + r4 = r2 * r2 + q = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 4*8))*r + y0 + q = p*r2 + q + y = y*r4 + q + return y +} + +// C documentation +// +// /* The output of log2 and thus the input of exp2 is either scaled by N +// (in case of fast toint intrinsics) or not. The unscaled xd must be +// in [-1021,1023], sign_bias sets the sign of the result. */ +func _exp2_inline(tls *TLS, xd Tdouble_t, sign_bias Tuint32_t) (r1 float32) { + var kd, r, r2, s, y2, z Tdouble_t + var ki, ski, t Tuint64_t + var y, v4 float32 + var y1, v1, v3 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = kd, ki, r, r2, s, ski, t, y, y1, y2, z, v1, v3, v4 + /* x = k/N + r with r in [-1/(2N), 1/(2N)] */ + y1 = xd + X__exp2f_data.Fshift_scaled + v1 = y1 + goto _2 +_2: + kd = v1 + v3 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v3)) + kd -= X__exp2f_data.Fshift_scaled /* k/N */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)<> int32(23) & uint32(0xff)) + if e < int32(0x7f) { + return 0 + } + if e > Int32FromInt32(0x7f)+Int32FromInt32(23) { + return int32(2) + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)-Int32FromInt32(1)) != 0 { + return 0 + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +func _zeroinfnan1(tls *TLS, ix Tuint32_t) (r int32) { + return BoolInt32(uint32(2)*ix-uint32(1) >= Uint32FromUint32(2)*Uint32FromInt32(0x7f800000)-Uint32FromInt32(1)) +} + +func Xpowf(tls *TLS, x1 float32, y1 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix, iy, sign_bias Tuint32_t + var logx, ylogx Tdouble_t + var x2 Tfloat_t + var y, v1, v2, v4 float32 + var yint int32 + var v5, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, iy, logx, sign_bias, x2, y, yint, ylogx, v1, v2, v4, v5, v6 + sign_bias = uint32(0) + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) || _zeroinfnan1(tls, iy) != 0 { + /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */ + if _zeroinfnan1(tls, iy) != 0 { + if uint32(2)*iy == uint32(0) { + return Float32FromFloat32(1) + } + if ix == uint32(0x3f800000) { + return Float32FromFloat32(1) + } + if uint32(2)*ix > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) || uint32(2)*iy > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) { + return x1 + y1 + } + if uint32(2)*ix == uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000)) { + return Float32FromFloat32(1) + } + if BoolInt32(uint32(2)*ix < uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000))) == BoolInt32(!(iy&Uint32FromUint32(0x80000000) != 0)) { + return Float32FromFloat32(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan1(tls, ix) != 0 { + x2 = x1 * x1 + if ix&uint32(0x80000000) != 0 && _checkint1(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy&uint32(0x80000000) != 0 { + y = Float32FromInt32(1) / x2 + v2 = y + goto _3 + _3: + v1 = v2 + } else { + v1 = x2 + } + return v1 + } + /* x and y are non-zero finite. */ + if ix&uint32(0x80000000) != 0 { + /* Finite x < 0. */ + yint = _checkint1(tls, iy) + if yint == 0 { + return X__math_invalidf(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(1) << (Int32FromInt32(EXP2F_TABLE_BITS) + Int32FromInt32(11))) + } + ix &= uint32(0x7fffffff) + } + if ix < uint32(0x00800000) { + /* Normalize subnormal x so exponent becomes negative. */ + v4 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v4)) + ix &= uint32(0x7fffffff) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + } + logx = _log2_inline(tls, ix) + ylogx = float64(y1) * logx /* cannot overflow, y is single prec. */ + v5 = ylogx + v6 = float64(126) * float64(Int32FromInt32(1)<>int32(47)&uint64(0xffff) >= *(*Tuint64_t)(unsafe.Pointer(&v6))>>int32(47) { + /* |y*log(x)| >= 126. */ + if ylogx > float64(127.99999995700433)*float64(Int32FromInt32(1)< %v", r) }() + } + return Xpow(tls, x, y) +} + +func Xremainder(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquo(tls, x, y, bp) +} + +func Xdrem(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremainderf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquof(tls, x, y, bp) +} + +func Xdremf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainderf(tls, x, y) +} + +func Xremainderl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremquo(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx, sy, v10 int32 + var i, uxi Tuint64_t + var q Tuint32_t + var v1 uint64 + var v11 float64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v10, v11, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + sy = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(63)) + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + uxi = uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = *(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12)) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = *(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + uxi <<= uint64(1) + q <<= uint32(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + if uxi == uint64(0) { + ex = -int32(60) + } else { + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi = uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + x = *(*float64)(unsafe.Pointer(bp + 8)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float64FromInt32(2)*x > y || Float64FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v10 = -int32(q) + } else { + v10 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v10 + if sx != 0 { + v11 = -x + } else { + v11 = x + } + return v11 +} + +func Xremquof(tls *TLS, x float32, y float32, quo uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey, sx, sy, v8 int32 + var i, q, uxi Tuint32_t + var v1 uint32 + var v3 bool + var v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(31)) + sy = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(31)) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + uxi <<= uint32(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + if uxi == uint32(0) { + ex = -int32(30) + } else { + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + x = *(*float32)(unsafe.Pointer(bp + 4)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float32FromInt32(2)*x > y || Float32FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquol(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremquo(tls, x, y, quo) +} + +const DBL_EPSILON9 = 2.220446049250313e-16 + +var _toint4 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xrint(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tdouble_t + var v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x + } + if s != 0 { + y = x - _toint4 + _toint4 + } else { + y = x + _toint4 - _toint4 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(0) + } + return v1 + } + return y +} + +const DBL_EPSILON10 = 0 +const FLT_EPSILON1 = 1.1920928955078125e-07 + +var _toint5 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xrintf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tfloat_t + var v1 float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + s = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x + } + if s != 0 { + y = x - _toint5 + _toint5 + } else { + y = x + _toint5 - _toint5 + } + if y == Float32FromInt32(0) { + if s != 0 { + v1 = -Float32FromFloat32(0) + } else { + v1 = Float32FromFloat32(0) + } + return v1 + } + return y +} + +const FLT_EPSILON2 = 0 + +func Xrintl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrint(tls, x) +} + +const DBL_EPSILON11 = 2.220446049250313e-16 + +var _toint6 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xround(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x3 + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x3ff)-Int32FromInt32(1) { + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + _toint6) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + _toint6 + } else { + y2 = x3 + _toint6 + } + } + return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint6 - _toint6 - x3 + if y3 > float64(0.5) { + y3 = y3 + x3 - Float64FromInt32(1) + } else { + if y3 <= -Float64FromFloat64(0.5) { + y3 = y3 + x3 + Float64FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = -y3 + } + return y3 +} + +const DBL_EPSILON12 = 0 +const FLT_EPSILON3 = 1.1920928955078125e-07 + +var _toint7 = Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07) + +func Xroundf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x7f)-Int32FromInt32(1) { + if uint64(4) == uint64(4) { + y = x3 + _toint7 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + _toint7) + } else { + y2 = float64(x3 + _toint7) + } + } + return Float32FromInt32(0) * *(*float32)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint7 - _toint7 - x3 + if y3 > Float32FromFloat32(0.5) { + y3 = y3 + x3 - Float32FromInt32(1) + } else { + if y3 <= -Float32FromFloat32(0.5) { + y3 = y3 + x3 + Float32FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + y3 = -y3 + } + return y3 +} + +const FLT_EPSILON4 = 0 + +func Xroundl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xround(tls, x) +} + +func Xscalb(tls *TLS, x float64, fn float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< float64(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrint(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > float64(65000) { + return Xscalbn(tls, x, int32(65000)) + } + if -fn > float64(65000) { + return Xscalbn(tls, x, -int32(65000)) + } + return Xscalbn(tls, x, int32(fn)) +} + +func Xscalbf(tls *TLS, x float32, fn float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = fn + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x * fn + } + *(*float32)(unsafe.Pointer(bp)) = fn + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 +_7: + if !(BoolInt32(v6&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if fn > Float32FromFloat32(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrintf(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, int32(65000)) + } + if -fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, -int32(65000)) + } + return Xscalbnf(tls, x, int32(fn)) +} + +func Xscalbln(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbn(tls, x, int32(n)) +} + +func Xscalblnf(tls *TLS, x float32, n int64) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbnf(tls, x, int32(n)) +} + +func Xscalblnl(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbln(tls, x, n) +} + +func Xscalbn(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = x + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + n = int32(1023) + } + } + } else { + if n < -int32(1022) { + /* make sure final n < -53 to avoid double + rounding in the subnormal range */ + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + n = -int32(1022) + } + } + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(Int32FromInt32(0x3ff)+n) << int32(52) + x = y * *(*float64)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = x + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + y *= Float32FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + n = int32(127) + } + } + } else { + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + y *= Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + n = -int32(126) + } + } + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(Int32FromInt32(0x7f)+n) << int32(23) + x = y * *(*float32)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xsignificand(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, -Xilogb(tls, x)) +} + +func Xsignificandf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, -Xilogbf(tls, x)) +} + +func Xsin(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + /* High word of x. */ + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e500000) { /* |x| < 2**-26 */ + /* raise inexact if x != 0 and underflow if subnormal*/ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__sin(tls, x3, float64(0), 0) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(1): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(2): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + default: + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + } + return r +} + +func Xsincos(tls *TLS, x3 float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s, y1, y2, v1, v2, v3, v4 float64 + var ix Tuint32_t + var n uint32 + var y float32 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, y, y1, y2, v1, v2, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + /* if |x| < 2**-27 * sqrt(2) */ + if ix < uint32(0x3e46a09e) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + *(*float64)(unsafe.Pointer(sin)) = x3 + *(*float64)(unsafe.Pointer(cos)) = float64(1) + return + } + *(*float64)(unsafe.Pointer(sin)) = X__sin(tls, x3, float64(0), 0) + *(*float64)(unsafe.Pointer(cos)) = X__cos(tls, x3, float64(0)) + return + } + /* sincos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + v4 = x3 - x3 + *(*float64)(unsafe.Pointer(cos)) = v4 + *(*float64)(unsafe.Pointer(sin)) = v4 + return + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + s = X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + c = X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float64)(unsafe.Pointer(sin)) = s + *(*float64)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float64)(unsafe.Pointer(sin)) = c + *(*float64)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float64)(unsafe.Pointer(sin)) = -s + *(*float64)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float64)(unsafe.Pointer(sin)) = -c + *(*float64)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_25 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsincosf(tls *TLS, x3 float32, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s Tfloat_t + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3, v8 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + /* |x| ~<= pi/4 */ + if ix <= uint32(0x3f490fda) { + /* |x| < 2**-12 */ + if ix < uint32(0x39800000) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + *(*float32)(unsafe.Pointer(sin)) = x3 + *(*float32)(unsafe.Pointer(cos)) = Float32FromFloat32(1) + return + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, float64(x3)) + return + } + /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x407b53d1) { + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)+_s1pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)+_s1pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, _s1pio2-float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, _s1pio2-float64(x3)) + } + return + } + /* -sin(x+c) is not correct if x+c could be 0: -0 vs +0 */ + if sign != 0 { + v4 = float64(x3) + _s2pio2 + } else { + v4 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(sin)) = -X__sindf(tls, v4) + if sign != 0 { + v5 = float64(x3) + _s2pio2 + } else { + v5 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(cos)) = -X__cosdf(tls, v5) + return + } + /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40e231d5) { + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, float64(x3)+_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = -X__sindf(tls, float64(x3)+_s3pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)-_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)-_s3pio2) + } + return + } + if sign != 0 { + v6 = float64(x3) + _s4pio2 + } else { + v6 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, v6) + if sign != 0 { + v7 = float64(x3) + _s4pio2 + } else { + v7 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, v7) + return + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + v8 = x3 - x3 + *(*float32)(unsafe.Pointer(cos)) = v8 + *(*float32)(unsafe.Pointer(sin)) = v8 + return + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + s = X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + c = X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float32)(unsafe.Pointer(sin)) = s + *(*float32)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float32)(unsafe.Pointer(sin)) = c + *(*float32)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float32)(unsafe.Pointer(sin)) = -s + *(*float32)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float32)(unsafe.Pointer(sin)) = -c + *(*float32)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_26 = 0 + +func Xsincosl(tls *TLS, x float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v sin=%v cos=%v, (%v:)", tls, x, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cosd at bp+8 */ float64 + var _ /* sind at bp+0 */ float64 + Xsincos(tls, x, bp, bp+8) + *(*float64)(unsafe.Pointer(sin)) = *(*float64)(unsafe.Pointer(bp)) + *(*float64)(unsafe.Pointer(cos)) = *(*float64)(unsafe.Pointer(bp + 8)) +} + +const M_PI_27 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio21 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio21 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio21 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio21 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsinf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign int32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__sindf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + return -X__cosdf(tls, float64(x3)+_s1pio21) + } else { + return X__cosdf(tls, float64(x3)-_s1pio21) + } + } + if sign != 0 { + v4 = -(float64(x3) + _s2pio21) + } else { + v4 = -(float64(x3) - _s2pio21) + } + return X__sindf(tls, v4) + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + return X__cosdf(tls, float64(x3)+_s3pio21) + } else { + return -X__cosdf(tls, float64(x3)-_s3pio21) + } + } + if sign != 0 { + v5 = float64(x3) + _s4pio21 + } else { + v5 = float64(x3) - _s4pio21 + } + return X__sindf(tls, v5) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = X__rem_pio2f(tls, x3, bp) + switch n & Int32FromInt32(3) { + case 0: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(1): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(2): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + default: + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_28 = 0 + +// C documentation +// +// /* sinh(x) = (exp(x) - 1/exp(x))/2 +// * = (exp(x)-1 + (exp(x)-1)/exp(x))/2 +// * = x + x^3/6 + o(x^5) +// */ +func Xsinh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float64 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + h = float64(0.5) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + h = -h + } + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + absx = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(DBL_MAX) */ + if w < uint32(0x40862e42) { + t = Xexpm1(tls, absx) + if w < uint32(0x3ff00000) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26)+eps could be just h*exp(x) */ + return h * (t + t/(t+Float64FromInt32(1))) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, absx, Float64FromInt32(2)*h) + return t +} + +func Xsinhf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float32 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + h = float32(0.5) + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + h = -h + } + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + absx = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(FLT_MAX) */ + if w < uint32(0x42b17217) { + t = Xexpm1f(tls, absx) + if w < uint32(0x3f800000) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< logf(FLT_MAX) or nan */ + t = X__expo2f(tls, absx, Float32FromInt32(2)*h) + return t +} + +func Xsinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsinh(tls, x) +} + +func Xsinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsin(tls, x) +} + +const FENV_SUPPORT = 1 + +// C documentation +// +// /* returns a*b*2^-32 - e, with error 0 <= e < 1. */ +func _mul32(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +// C documentation +// +// /* returns a*b*2^-64 - e, with error 0 <= e < 3. */ +func _mul64(tls *TLS, a Tuint64_t, b Tuint64_t) (r Tuint64_t) { + var ahi, alo, bhi, blo Tuint64_t + _, _, _, _ = ahi, alo, bhi, blo + ahi = a >> int32(32) + alo = a & uint64(0xffffffff) + bhi = b >> int32(32) + blo = b & uint64(0xffffffff) + return ahi*bhi + ahi*blo>>int32(32) + alo*bhi>>int32(32) +} + +func Xsqrt(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, i, ix, m, r, s, tiny, top, u Tuint64_t + var even int32 + var t, y, y1, v1, v3 float64 + var v2 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, i, ix, m, r, s, t, tiny, top, u, y, y1, v1, v2, v3 + /* special case handling. */ + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = ix >> int32(52) + if top-uint64(0x001) >= uint64(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return x1 + } + if ix == uint64(0x7ff0000000000000) { + return x1 + } + if ix > uint64(0x7ff0000000000000) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + top = ix >> int32(52) + top -= uint64(52) + } + /* argument reduction: + x = 4^e m; with integer e, and m in [1, 4) + m: fixed point representation [2.62] + 2^e is the exponent part of the result. */ + even = int32(top & uint64(1)) + m = ix<>= uint64(1) + } + top = (top + uint64(0x3ff)) >> int32(1) + i = ix >> Int32FromInt32(46) % uint64(128) + r = uint64(uint32(X__rsqrt_tab[i]) << int32(16)) + /* |r sqrt(m) - 1| < 0x1.fdp-9 */ + s = uint64(_mul32(tls, uint32(m>>int32(32)), uint32(r))) + /* |s/sqrt(m) - 1| < 0x1.fdp-9 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.7bp-16 */ + s = uint64(_mul32(tls, uint32(s), uint32(u)) << int32(1)) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.3704p-29 (measured worst-case) */ + r = r << int32(32) + s = _mul64(tls, m, r) + d = _mul64(tls, s, r) + u = _three<> int32(9) + d0 = m<> int32(63) + s &= uint64(0x000fffffffffffff) + s |= top << int32(52) + y1 = *(*float64)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint64(0) { + v2 = 0 + } else { + v2 = int64(0x0010000000000000) + } + /* handle rounding modes and inexact exception: + only (s+1)^2 == 2^42 m case is exact otherwise + add a tiny value to cause the fenv effects. */ + tiny = uint64(v2) + tiny |= (d1 ^ d2) & uint64(0x8000000000000000) + t = *(*float64)(unsafe.Pointer(&tiny)) + y = y1 + t + v3 = y + goto _4 + _4: + y1 = v3 + } + return y1 +} + +/* approximate r ~ 1/sqrt(m) and s ~ sqrt(m) when m in [1,4) + + initial estimate: + 7bit table lookup (1bit exponent and 6bit significand). + + iterative approximation: + using 2 goldschmidt iterations with 32bit int arithmetics + and a final iteration with 64bit int arithmetics. + + details: + + the relative error (e = r0 sqrt(m)-1) of a linear estimate + (r0 = a m + b) is |e| < 0.085955 ~ 0x1.6p-4 at best, + a table lookup is faster and needs one less iteration + 6 bit lookup table (128b) gives |e| < 0x1.f9p-8 + 7 bit lookup table (256b) gives |e| < 0x1.fdp-9 + for single and double prec 6bit is enough but for quad + prec 7bit is needed (or modified iterations). to avoid + one more iteration >=13bit table would be needed (16k). + + a newton-raphson iteration for r is + w = r*r + u = 3 - m*w + r = r*u/2 + can use a goldschmidt iteration for s at the end or + s = m*r + + first goldschmidt iteration is + s = m*r + u = 3 - s*r + r = r*u/2 + s = s*u/2 + next goldschmidt iteration is + u = 3 - s*r + r = r*u/2 + s = s*u/2 + and at the end r is not computed only s. + + they use the same amount of operations and converge at the + same quadratic rate, i.e. if + r1 sqrt(m) - 1 = e, then + r2 sqrt(m) - 1 = -3/2 e^2 - 1/2 e^3 + the advantage of goldschmidt is that the mul for s and r + are independent (computed in parallel), however it is not + "self synchronizing": it only uses the input m in the + first iteration so rounding errors accumulate. at the end + or when switching to larger precision arithmetics rounding + errors dominate so the first iteration should be used. + + the fixed point representations are + m: 2.30 r: 0.32, s: 2.30, d: 2.30, u: 2.30, three: 2.30 + and after switching to 64 bit + m: 2.62 r: 0.64, s: 2.62, d: 2.62, u: 2.62, three: 2.62 */ + +var _three = uint64(0xc0000000) + +func _mul321(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +/* see sqrt.c for more detailed comments. */ + +func Xsqrtf(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, tiny, u Tuint32_t + var t, y, y1, v1, v4 float32 + var v2 uint32 + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, t, tiny, u, y, y1, v1, v2, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return x1 + } + if ix == uint32(0x7f800000) { + return x1 + } + if ix > uint32(0x7f800000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 4^e m; with int e and m in [1, 4). */ + even = ix & uint32(0x00800000) + m1 = ix<> int32(1) + ey += uint32(Int32FromInt32(0x3f800000) >> Int32FromInt32(1)) + ey &= uint32(0x7f800000) + i = ix >> Int32FromInt32(17) % uint32(128) + r = uint32(X__rsqrt_tab[i]) << int32(16) + /* |r*sqrt(m) - 1| < 0x1p-8 */ + s = _mul321(tls, m, r) + /* |s/sqrt(m) - 1| < 0x1p-8 */ + d = _mul321(tls, s, r) + u = _three1 - d + r = _mul321(tls, r, u) << int32(1) + /* |r*sqrt(m) - 1| < 0x1.7bp-16 */ + s = _mul321(tls, s, u) << int32(1) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = _mul321(tls, s, r) + u = _three1 - d + s = _mul321(tls, s, u) + /* -0x1.03p-28 < s/sqrt(m) - 1 < 0x1.fp-31 */ + s = (s - uint32(1)) >> int32(6) + d0 = m<> int32(31) + s &= uint32(0x007fffff) + s |= ey + y1 = *(*float32)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint32(0) { + v3 = 0 + } else { + v3 = int32(0x01000000) + } + /* handle rounding and inexact exception. */ + tiny = uint32(v3) + tiny |= (d1 ^ d2) & uint32(0x80000000) + t = *(*float32)(unsafe.Pointer(&tiny)) + y = y1 + t + v4 = y + goto _5 + _5: + y1 = v4 + } + return y1 +} + +/* compute r ~ 1/sqrt(m), s ~ sqrt(m) with 2 goldschmidt iterations. */ +var _three1 = uint32(0xc0000000) + +func Xsqrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsqrt(tls, x) +} + +func Xtan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e400000) { /* |x| < 2**-27 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__tan(tls, x3, float64(0), 0) + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + return X__tan(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(n&uint32(1))) +} + +const M_PI_29 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _t1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _t2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _t3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _t4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xtanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__tandf(tls, float64(x3), 0) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + v4 = float64(x3) + _t1pio2 + } else { + v4 = float64(x3) - _t1pio2 + } + return X__tandf(tls, v4, int32(1)) + } else { + if sign != 0 { + v5 = float64(x3) + _t2pio2 + } else { + v5 = float64(x3) - _t2pio2 + } + return X__tandf(tls, v5, 0) + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + v6 = float64(x3) + _t3pio2 + } else { + v6 = float64(x3) - _t3pio2 + } + return X__tandf(tls, v6, int32(1)) + } else { + if sign != 0 { + v7 = float64(x3) + _t4pio2 + } else { + v7 = float64(x3) - _t4pio2 + } + return X__tandf(tls, v7, 0) + } + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + return X__tandf(tls, *(*float64)(unsafe.Pointer(bp)), int32(n&uint32(1))) +} + +const M_PI_210 = 0 + +// C documentation +// +// /* tanh(x) = (exp(x) - exp(-x))/(exp(x) + exp(-x)) +// * = (exp(2*x) - 1)/(exp(2*x) - 1 + 2) +// * = (1 - exp(-2*x))/(exp(-2*x) - 1 + 2) +// */ +func Xtanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, v1 Tdouble_t + var w Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + if w > uint32(0x3fe193ea) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x40340000) { + /* |x| > 20 or nan */ + /* note: this branch avoids raising overflow */ + t = Float64FromInt32(1) - Float64FromInt32(0)/x3 + } else { + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = Float64FromInt32(1) - Float64FromInt32(2)/(t+Float64FromInt32(2)) + } + } else { + if w > uint32(0x3fd058ae) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = t / (t + Float64FromInt32(2)) + } else { + if w >= uint32(0x00100000) { + /* |x| >= 0x1p-1022, up to 2ulp error in [0.1,0.2554] */ + t = Xexpm1(tls, float64(-Int32FromInt32(2))*x3) + t = -t / (t + Float64FromInt32(2)) + } else { + /* |x| is subnormal */ + /* note: the branch above would not raise underflow in [0x1p-1023,0x1p-1022) */ + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, y, v1 float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + if w > uint32(0x3f0c9f54) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x41200000) { + /* |x| > 10 */ + t = Float32FromInt32(1) + Float32FromInt32(0)/x3 + } else { + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = Float32FromInt32(1) - Float32FromInt32(2)/(t+Float32FromInt32(2)) + } + } else { + if w > uint32(0x3e82c578) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = t / (t + Float32FromInt32(2)) + } else { + if w >= uint32(0x00800000) { + /* |x| >= 0x1p-126 */ + t = Xexpm1f(tls, float32(-Int32FromInt32(2))*x3) + t = -t / (t + Float32FromInt32(2)) + } else { + /* |x| is subnormal */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtanh(tls, x) +} + +func Xtanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtan(tls, x) +} + +const N10 = 12 + +var _pi4 = float64(3.141592653589793) + +// C documentation +// +// /* sin(pi x) with x > 0x1p-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sinpi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* argument reduction: x = |x| mod 2 */ + /* spurious inexact when x is odd int */ + x = x * float64(0.5) + x = Float64FromInt32(2) * (x - Xfloor(tls, x)) + /* reduce x into [-.25,.25] */ + n = int32(Float64FromInt32(4) * x) + n = (n + int32(1)) / int32(2) + x -= float64(n) * float64(0.5) + x *= _pi4 + switch n { + default: /* case 4 */ + fallthrough + case 0: + return X__sin(tls, x, Float64FromInt32(0), 0) + case int32(1): + return X__cos(tls, x, Float64FromInt32(0)) + case int32(2): + return X__sin(tls, -x, Float64FromInt32(0), 0) + case int32(3): + return -X__cos(tls, x, Float64FromInt32(0)) + } + return r +} + +// C documentation +// +// //static const double g = 6.024680040776729583740234375; +var _gmhalf = float64(5.52468004077673) +var _Snum = [13]float64{ + 0: float64(2.353137688041076e+10), + 1: float64(4.29198036426491e+10), + 2: float64(3.571195923735567e+10), + 3: float64(1.792103442603721e+10), + 4: float64(6.039542586352028e+09), + 5: float64(1.4397204073117216e+09), + 6: float64(2.4887455786205417e+08), + 7: float64(3.1426415585400194e+07), + 8: float64(2.8763706289353725e+06), + 9: float64(186056.26539522348), + 10: float64(8071.672002365816), + 11: float64(210.82427775157936), + 12: float64(2.5066282746310002), +} +var _Sden = [13]float64{ + 1: Float64FromInt32(39916800), + 2: Float64FromInt32(120543840), + 3: Float64FromInt32(150917976), + 4: Float64FromInt32(105258076), + 5: Float64FromInt32(45995730), + 6: Float64FromInt32(13339535), + 7: Float64FromInt32(2637558), + 8: Float64FromInt32(357423), + 9: Float64FromInt32(32670), + 10: Float64FromInt32(1925), + 11: Float64FromInt32(66), + 12: Float64FromInt32(1), +} + +// C documentation +// +// /* n! for small integer n */ +var _fact = [23]float64{ + 0: Float64FromInt32(1), + 1: Float64FromInt32(1), + 2: Float64FromInt32(2), + 3: Float64FromInt32(6), + 4: Float64FromInt32(24), + 5: Float64FromInt32(120), + 6: Float64FromInt32(720), + 7: float64(5040), + 8: float64(40320), + 9: float64(362880), + 10: float64(3.6288e+06), + 11: float64(3.99168e+07), + 12: float64(4.790016e+08), + 13: float64(6.2270208e+09), + 14: float64(8.71782912e+10), + 15: float64(1.307674368e+12), + 16: float64(2.0922789888e+13), + 17: float64(3.55687428096e+14), + 18: float64(6.402373705728e+15), + 19: float64(1.21645100408832e+17), + 20: float64(2.43290200817664e+18), + 21: float64(5.109094217170944e+19), + 22: float64(1.1240007277776077e+21), +} + +// C documentation +// +// /* S(x) rational function for positive x */ +func _S(tls *TLS, x float64) (r float64) { + var den, num Tdouble_t + var i int32 + _, _, _ = den, i, num + num = Float64FromInt32(0) + den = Float64FromInt32(0) + /* to avoid overflow handle large x differently */ + if x < Float64FromInt32(8) { + i = int32(N10) + for { + if !(i >= 0) { + break + } + num = num*x + _Snum[i] + den = den*x + _Sden[i] + goto _1 + _1: + ; + i-- + } + } else { + i = 0 + for { + if !(i <= int32(N10)) { + break + } + num = num/x + _Snum[i] + den = den/x + _Sden[i] + goto _2 + _2: + ; + i++ + } + } + return num / den +} + +func Xtgamma(tls *TLS, x3 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, y1, y2, y3, v1 float64 + var dy, r, z Tdouble_t + var ix Tuint32_t + var sign int32 + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = absx, dy, ix, r, sign, y, y1, y2, y3, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* special cases */ + if ix >= uint32(0x7ff00000) { + /* tgamma(nan)=nan, tgamma(inf)=inf, tgamma(-inf)=nan with invalid */ + return x3 + float64(X__builtin_inff(tls)) + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(54))<= 172: tgamma(x)=inf with overflow */ + /* x =< -184: tgamma(x)=+-0 with underflow */ + if ix >= uint32(0x40670000) { /* |x| >= 184 */ + if sign != 0 { + if uint64(4) == uint64(4) { + y = float32(Float64FromFloat64(1.1754943508222875e-38) / x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } else { + y2 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } + } + if Xfloor(tls, x3)*float64(0.5) == Xfloor(tls, x3*float64(0.5)) { + return Float64FromInt32(0) + } + return -Float64FromFloat64(0) + } + x3 *= float64(8.98846567431158e+307) + return x3 + } + if sign != 0 { + v1 = -x3 + } else { + v1 = x3 + } + absx = v1 + /* handle the error of x + g - 0.5 */ + y3 = absx + _gmhalf + if absx > _gmhalf { + dy = y3 - absx + dy -= _gmhalf + } else { + dy = y3 - _gmhalf + dy -= absx + } + z = absx - float64(0.5) + r = _S(tls, absx) * Xexp(tls, -y3) + if x3 < Float64FromInt32(0) { + /* reflection formula for negative x */ + /* sinpi(absx) is not 0, integers are already handled */ + r = -_pi4 / (_sinpi(tls, absx) * absx * r) + dy = -dy + z = -z + } + r += dy * (_gmhalf + Float64FromFloat64(0.5)) * r / y3 + z = Xpow(tls, y3, float64(0.5)*z) + y3 = r * z * z + return y3 +} + +func Xtgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(Xtgamma(tls, float64(x))) +} + +func Xtgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtgamma(tls, x) +} + +func Xtrunc(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + int32(12) + if e >= Int32FromInt32(52)+Int32FromInt32(12) { + return x3 + } + if e < int32(12) { + e = int32(1) + } + m = -Uint64FromUint64(1) >> e + if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { + return x3 + } + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xtruncf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + int32(9) + if e >= Int32FromInt32(23)+Int32FromInt32(9) { + return x3 + } + if e < int32(9) { + e = int32(1) + } + m = -Uint32FromUint32(1) >> e + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xtruncl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtrunc(tls, x) +} + +var _digits = [65]uint8{'.', '/', '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', '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'} + +func Xa64l(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var e int32 + var x Tuint32_t + _, _, _ = d, e, x + x = uint32(0) + e = 0 + for { + if !(e < int32(36) && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + d = Xstrchr(tls, uintptr(unsafe.Pointer(&_digits)), int32(*(*uint8)(unsafe.Pointer(s)))) + if !(d != 0) { + break + } + x |= uint32(int64(d)-t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_digits)))) << e + goto _1 + _1: + ; + e += int32(6) + s++ + } + return int64(int32(x)) +} + +func Xl64a(tls *TLS, x0 int64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x0=%v, (%v:)", tls, x0, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var x Tuint32_t + _, _ = p, x + x = uint32(x0) + p = uintptr(unsafe.Pointer(&_s)) + for { + if !(x != 0) { + break + } + *(*uint8)(unsafe.Pointer(p)) = _digits[x&uint32(63)] + goto _1 + _1: + ; + p++ + x >>= uint32(6) + } + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return uintptr(unsafe.Pointer(&_s)) +} + +var _s [7]uint8 + +func Xbasename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 607 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + goto _1 + _1: + ; + i-- + } + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('/')) { + break + } + goto _2 + _2: + ; + i-- + } + return s + uintptr(i) +} + +func X__xpg_basename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xbasename(tls, s) +} + +func Xdirname(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 607 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 615 + } + goto _1 + _1: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) != int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 607 + } + goto _2 + _2: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 615 + } + goto _3 + _3: + ; + i-- + } + *(*uint8)(unsafe.Pointer(s + uintptr(i+uint64(1)))) = uint8(0) + return s +} + +func Xffs(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_l(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsl(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_l(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsll(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_64(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +const MM_APPL = 8 +const MM_CONSOLE = 512 +const MM_ERROR = 2 +const MM_FIRM = 4 +const MM_HALT = 1 +const MM_HARD = 1 +const MM_INFO = 4 +const MM_NOCON = 4 +const MM_NOMSG = 1 +const MM_NOSEV = 0 +const MM_NOTOK = -1 +const MM_NRECOV = 128 +const MM_NULLMC = 0 +const MM_NULLSEV = 0 +const MM_OK = 0 +const MM_OPSYS = 32 +const MM_PRINT = 256 +const MM_RECOVER = 64 +const MM_SOFT = 2 +const MM_UTIL = 16 +const MM_WARNING = 3 + +// C documentation +// +// /* +// * If lstr is the first part of bstr, check that the next char in bstr +// * is either \0 or : +// */ +func __strcolcmp(tls *TLS, lstr uintptr, bstr uintptr) (r int32) { + var i Tsize_t + _ = i + i = uint64(0) + for *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 && *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(lstr + uintptr(i)))) { + i++ + } + if *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 || *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) != int32(':') { + return int32(1) + } + return 0 +} + +func Xfmtmsg(tls *TLS, classification int64, label uintptr, severity int32, text uintptr, action uintptr, tag uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v classification=%v label=%v severity=%v text=%v action=%v tag=%v, (%v:)", tls, classification, label, severity, text, action, tag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var cmsg, errstring, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 uintptr + var consolefd, i, ret, verb int32 + var msgs [6]uintptr + var _ /* cs at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cmsg, consolefd, errstring, i, msgs, ret, verb, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + ret = 0 + verb = 0 + errstring = uintptr(MM_NULLSEV) + cmsg = Xgetenv(tls, __ccgo_ts+617) + msgs = [6]uintptr{ + 0: __ccgo_ts + 625, + 1: __ccgo_ts + 631, + 2: __ccgo_ts + 640, + 3: __ccgo_ts + 645, + 4: __ccgo_ts + 652, + 5: UintptrFromInt32(0), + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + if severity == int32(MM_HALT) { + errstring = __ccgo_ts + 656 + } else { + if severity == int32(MM_ERROR) { + errstring = __ccgo_ts + 663 + } else { + if severity == int32(MM_WARNING) { + errstring = __ccgo_ts + 671 + } else { + if severity == int32(MM_INFO) { + errstring = __ccgo_ts + 681 + } + } + } + } + if classification&int64(MM_CONSOLE) != 0 { + consolefd = Xopen(tls, __ccgo_ts+688, int32(O_WRONLY), 0) + if consolefd < 0 { + ret = int32(MM_NOCON) + } else { + if label != 0 { + v1 = label + } else { + v1 = __ccgo_ts + } + if label != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + if severity != 0 { + v3 = errstring + } else { + v3 = __ccgo_ts + } + if text != 0 { + v4 = text + } else { + v4 = __ccgo_ts + } + if action != 0 { + v5 = __ccgo_ts + 701 + } else { + v5 = __ccgo_ts + } + if action != 0 { + v6 = action + } else { + v6 = __ccgo_ts + } + if action != 0 { + v7 = __ccgo_ts + 711 + } else { + v7 = __ccgo_ts + } + if tag != 0 { + v8 = tag + } else { + v8 = __ccgo_ts + } + if Xdprintf(tls, consolefd, __ccgo_ts+713, VaList(bp+16, v1, v2, v3, v4, v5, v6, v7, v8)) < int32(1) { + ret = int32(MM_NOCON) + } + Xclose(tls, consolefd) + } + } + if classification&int64(MM_PRINT) != 0 { + for cmsg != 0 && *(*uint8)(unsafe.Pointer(cmsg)) != 0 { + i = 0 + for { + if !(msgs[i] != 0) { + break + } + if !(__strcolcmp(tls, msgs[i], cmsg) != 0) { + break + } + goto _9 + _9: + ; + i++ + } + if msgs[i] == UintptrFromInt32(0) { + //ignore MSGVERB-unrecognized component + verb = int32(0xFF) + break + } else { + verb |= int32(1) << i + cmsg = Xstrchr(tls, cmsg, int32(':')) + if cmsg != 0 { + cmsg++ + } + } + } + if !(verb != 0) { + verb = int32(0xFF) + } + if verb&int32(1) != 0 && label != 0 { + v10 = label + } else { + v10 = __ccgo_ts + } + if verb&int32(1) != 0 && label != 0 { + v11 = __ccgo_ts + 289 + } else { + v11 = __ccgo_ts + } + if verb&int32(2) != 0 && severity != 0 { + v12 = errstring + } else { + v12 = __ccgo_ts + } + if verb&int32(4) != 0 && text != 0 { + v13 = text + } else { + v13 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v14 = __ccgo_ts + 701 + } else { + v14 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v15 = action + } else { + v15 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v16 = __ccgo_ts + 711 + } else { + v16 = __ccgo_ts + } + if verb&int32(16) != 0 && tag != 0 { + v17 = tag + } else { + v17 = __ccgo_ts + } + if Xdprintf(tls, int32(2), __ccgo_ts+713, VaList(bp+16, v10, v11, v12, v13, v14, v15, v16, v17)) < int32(1) { + ret |= int32(MM_NOMSG) + } + } + if ret&(Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG)) == Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG) { + ret = -int32(1) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xget_current_dir_name(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var res uintptr + var _ /* a at bp+0 */ Tstat + var _ /* b at bp+128 */ Tstat + _ = res + res = Xgetenv(tls, __ccgo_ts+731) + if res != 0 && *(*uint8)(unsafe.Pointer(res)) != 0 && !(Xstat(tls, res, bp) != 0) && !(Xstat(tls, __ccgo_ts+607, bp+128) != 0) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev == (*(*Tstat)(unsafe.Pointer(bp + 128))).Fst_dev && (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino == (*(*Tstat)(unsafe.Pointer(bp + 128))).Fst_ino { + return Xstrdup(tls, res) + } + return Xgetcwd(tls, uintptr(0), uint64(0)) +} + +func X__getauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + var auxv uintptr + _ = auxv + auxv = X__libc.Fauxv + if item == uint64(AT_SECURE) { + return uint64(X__libc.Fsecure) + } + for { + if !(*(*Tsize_t)(unsafe.Pointer(auxv)) != 0) { + break + } + if *(*Tsize_t)(unsafe.Pointer(auxv)) == item { + return *(*Tsize_t)(unsafe.Pointer(auxv + 1*8)) + } + goto _1 + _1: + ; + auxv += uintptr(2) * 8 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uint64(0) +} + +func Xgetauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__getauxval(tls, item) +} + +type Tutsname = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + Fdomainname [65]uint8 +} + +func Xgetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* temp at bp+0 */ Tutsname + Xuname(tls, bp) + if !(len1 != 0) || Xstrlen(tls, bp+325) >= len1 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + Xstrcpy(tls, name, bp+325) + return 0 +} + +func Xgetentropy(tls *TLS, buffer uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v buffer=%v len1=%v, (%v:)", tls, buffer, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pos uintptr + var ret int32 + var _ /* cs at bp+0 */ int32 + _, _ = pos, ret + ret = 0 + pos = buffer + if len1 > uint64(256) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + for len1 != 0 { + ret = int32(Xgetrandom(tls, pos, len1, uint32(0))) + if ret < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) { + continue + } else { + break + } + } + pos += uintptr(ret) + len1 -= uint64(ret) + ret = 0 + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xgethostid(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const optpos = 0 + +func X__getopt_msg(tls *TLS, a uintptr, b uintptr, c uintptr, l Tsize_t) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v l=%v, (%v:)", tls, a, b, c, l, origin(2)) + } + var __need_unlock, v1 int32 + var f uintptr + _, _, _ = __need_unlock, f, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + b = X__lctrans_cur(tls, b) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + _ = Xfputs(tls, a, f) >= 0 && Xfwrite(tls, b, Xstrlen(tls, b), uint64(1), f) != 0 && Xfwrite(tls, c, uint64(1), l, f) == l && Xputc(tls, int32('\n'), f) != 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xgetopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, k, l, v1, v2, v3 int32 + var optchar uintptr + var _ /* c at bp+0 */ Twchar_t + var _ /* d at bp+4 */ Twchar_t + _, _, _, _, _, _, _ = i, k, l, optchar, v1, v2, v3 + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) != int32('-') { + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') { + v1 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v1)*8)) + return int32(1) + } + return -int32(1) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + Xoptind++ + return -Int32FromInt32(1) + } + if !(X__optpos != 0) { + X__optpos++ + } + v2 = Xmbtowc(tls, bp, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(X__optpos), uint64(MB_LEN_MAX)) + k = v2 + if v2 < 0 { + k = int32(1) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xfffd) /* replacement char */ + } + optchar = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos) + X__optpos += k + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos))) != 0) { + Xoptind++ + X__optpos = 0 + } + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') { + optstring++ + } + i = 0 + *(*Twchar_t)(unsafe.Pointer(bp + 4)) = 0 + for cond := true; cond; cond = l != 0 && *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) { + l = Xmbtowc(tls, bp+4, optstring+uintptr(i), uint64(MB_LEN_MAX)) + if l > 0 { + i += l + } else { + i++ + } + } + if *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) || *(*Twchar_t)(unsafe.Pointer(bp)) == int32(':') { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32(':') && Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+735, optchar, uint64(k)) + } + return int32('?') + } + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i)))) == int32(':') { + Xoptarg = uintptr(0) + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+int32(1))))) != int32(':') || X__optpos != 0 { + v3 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v3)*8)) + if X__optpos != 0 { + Xoptarg += uintptr(X__optpos) + } + X__optpos = 0 + } + if Xoptind > argc { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32(':') { + return int32(':') + } + if Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+759, optchar, uint64(k)) + } + return int32('?') + } + } + return *(*Twchar_t)(unsafe.Pointer(bp)) +} + +func X__posix_getopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetopt(tls, argc, argv, optstring) +} + +const no_argument = 0 +const optional_argument = 2 +const required_argument = 1 + +type Toption = struct { + Fname uintptr + Fhas_arg int32 + Fflag uintptr + Fval int32 +} + +func _permute(tls *TLS, argv uintptr, dest int32, src int32) { + var av, tmp uintptr + var i int32 + _, _, _ = av, i, tmp + av = argv + tmp = *(*uintptr)(unsafe.Pointer(av + uintptr(src)*8)) + i = src + for { + if !(i > dest) { + break + } + *(*uintptr)(unsafe.Pointer(av + uintptr(i)*8)) = *(*uintptr)(unsafe.Pointer(av + uintptr(i-int32(1))*8)) + goto _1 + _1: + ; + i-- + } + *(*uintptr)(unsafe.Pointer(av + uintptr(dest)*8)) = tmp +} + +func ___getopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var cnt, i, i1, resumed, ret, skipped int32 + _, _, _, _, _, _ = cnt, i, i1, resumed, ret, skipped + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + skipped = Xoptind + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('-') { + i = Xoptind + for { + if i >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) + 1)) != 0 { + break + } + goto _1 + _1: + ; + i++ + } + Xoptind = i + } + resumed = Xoptind + ret = ___getopt_long_core(tls, argc, argv, optstring, longopts, idx, longonly) + if resumed > skipped { + cnt = Xoptind - resumed + i1 = 0 + for { + if !(i1 < cnt) { + break + } + _permute(tls, argv, skipped, Xoptind-int32(1)) + goto _2 + _2: + ; + i1++ + } + Xoptind = skipped + cnt + } + return ret +} + +func ___getopt_long_core(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var arg, name, opt, start, v5, v6 uintptr + var cnt, colon, i, j, l, match, v2 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = arg, cnt, colon, i, j, l, match, name, opt, start, v2, v5, v6 + Xoptarg = uintptr(0) + if longopts != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) == int32('-') && (longonly != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) != int32('-') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + colon = BoolInt32(int32(*(*uint8)(unsafe.Pointer(optstring + BoolUintptr(int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-'))))) == int32(':')) + start = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(1) + v2 = Int32FromInt32(0) + i = v2 + cnt = v2 + for { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname != 0) { + break + } + name = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname + opt = start + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('-') { + opt++ + } + for *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') && int32(*(*uint8)(unsafe.Pointer(opt))) == int32(*(*uint8)(unsafe.Pointer(name))) { + name++ + opt++ + } + if *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') { + goto _1 + } + arg = opt + match = i + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + cnt = int32(1) + break + } + cnt++ + goto _1 + _1: + ; + i++ + } + if cnt == int32(1) && longonly != 0 && int64(arg)-int64(start) == int64(Xmblen(tls, start, uint64(MB_LEN_MAX))) { + l = int32(int64(arg) - int64(start)) + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(optstring + uintptr(i))) != 0) { + break + } + j = 0 + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(start + uintptr(j)))) == int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+j))))) { + break + } + goto _4 + _4: + ; + j++ + } + if j == l { + cnt++ + break + } + goto _3 + _3: + ; + i++ + } + } + if cnt == int32(1) { + i = match + opt = arg + Xoptind++ + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('=') { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 || !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+791, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptarg = opt + uintptr(1) + } else { + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg == int32(required_argument) { + v5 = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + Xoptarg = v5 + if !(v5 != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 { + return int32(':') + } + if !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+759, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptind++ + } + } + if idx != 0 { + *(*int32)(unsafe.Pointer(idx)) = i + } + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag != 0 { + *(*int32)(unsafe.Pointer((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag)) = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + return 0 + } + return (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') { + Xoptopt = 0 + if !(colon != 0) && Xopterr != 0 { + if cnt != 0 { + v6 = __ccgo_ts + 828 + } else { + v6 = __ccgo_ts + 735 + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), v6, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2), Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2))) + } + Xoptind++ + return int32('?') + } + } + return Xgetopt(tls, argc, argv, optstring) +} + +func Xgetopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, 0) +} + +func Xgetopt_long_only(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, int32(1)) +} + +func Xgetpriority(tls *TLS, which int32, who Tid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v, (%v:)", tls, which, who, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getpriority), int64(which), int64(who))))) + if ret < 0 { + return ret + } + return int32(20) - ret +} + +func Xgetresgid(tls *TLS, rgid uintptr, egid uintptr, sgid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v rgid=%v egid=%v sgid=%v, (%v:)", tls, rgid, egid, sgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresgid), int64(rgid), int64(egid), int64(sgid))))) +} + +func Xgetresuid(tls *TLS, ruid uintptr, euid uintptr, suid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ruid=%v euid=%v suid=%v, (%v:)", tls, ruid, euid, suid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresuid), int64(ruid), int64(euid), int64(suid))))) +} + +func Xgetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret int32 + var v1, v2 uint64 + var _ /* k_rlim at bp+0 */ [2]uint64 + _, _, _ = ret, v1, v2 + ret = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(Int32FromInt32(0)), int64(rlim))))) + if !(ret != 0) { + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + } + if !(ret != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) { + return ret + } + if X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getrlimit), int64(resource), int64(bp)))) < 0 { + return -int32(1) + } + if (*(*[2]uint64)(unsafe.Pointer(bp)))[0] == -Uint64FromUint64(1) { + v1 = ^Uint64FromUint64(0) + } else { + v1 = (*(*[2]uint64)(unsafe.Pointer(bp)))[0] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = v1 + if (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] == -Uint64FromUint64(1) { + v2 = ^Uint64FromUint64(0) + } else { + v2 = (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = v2 + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + return 0 +} + +func Xgetrusage(tls *TLS, who int32, ru uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v ru=%v, (%v:)", tls, who, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _ = dest, r + dest = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + r = int32(X__syscall2(tls, int64(SYS_getrusage), int64(who), int64(dest))) + if !(r != 0) && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xgetsubopt(tls *TLS, opt uintptr, keys uintptr, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v opt=%v keys=%v val=%v, (%v:)", tls, opt, keys, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var l Tsize_t + var s, v1, v2 uintptr + _, _, _, _, _ = i, l, s, v1, v2 + s = *(*uintptr)(unsafe.Pointer(opt)) + *(*uintptr)(unsafe.Pointer(val)) = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(opt)) = Xstrchr(tls, s, int32(',')) + if *(*uintptr)(unsafe.Pointer(opt)) != 0 { + v2 = opt + v1 = *(*uintptr)(unsafe.Pointer(v2)) + *(*uintptr)(unsafe.Pointer(v2))++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(opt)) = s + uintptr(Xstrlen(tls, s)) + } + i = 0 + for { + if !(*(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)) != 0) { + break + } + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8))) + if Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)), s, l) != 0 { + goto _3 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(l)))) == int32('=') { + *(*uintptr)(unsafe.Pointer(val)) = s + uintptr(l) + uintptr(1) + } else { + if *(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0 { + goto _3 + } + } + return i + goto _3 + _3: + ; + i++ + } + return -int32(1) +} + +const R = 2 +const W = 1 +const WR = 3 + +type Tioctl_compat_map = struct { + Fnew_req int32 + Fold_req int32 + Fold_size uint8 + Fdir uint8 + Fforce_align uint8 + Fnoffs uint8 + Foffsets [8]uint8 +} + +/* yields a type for a struct with original size n, with a misaligned + * timeval/timespec expanded from 32- to 64-bit. for use with ioctl + * number producing macros; only size of result is meaningful. */ + +type Tv4l2_event = struct { + Fa Tuint32_t + Fb [8]Tuint64_t + Fc [2]Tuint32_t + Fts [2]Tuint32_t + Fd [9]Tuint32_t +} + +var _compat_map = [20]Tioctl_compat_map{ + 0: { + Fnew_req: int32(SIOCGSTAMP), + Fold_req: int32(SIOCGSTAMP_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 1: { + Fnew_req: int32(SIOCGSTAMPNS), + Fold_req: int32(SIOCGSTAMPNS_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 2: { + Fnew_req: int32(uint64(Uint32FromUint32(2)< %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var ap Tva_list + var arg uintptr + var i, r int32 + var _ /* u at bp+0 */ struct { + Fbuf [0][256]uint8 + Falign int64 + F__ccgo_pad2 [248]byte + } + _, _, _, _ = ap, arg, i, r + ap = va + arg = VaUintptr(&ap) + _ = ap + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(req), int64(arg))) + if Bool(Bool(int32(SIOCGSTAMP) != int32(SIOCGSTAMP_OLD)) && req != 0) && r == -int32(ENOTTY) { + i = 0 + for { + if !(uint64(i) < Uint64FromInt64(400)/Uint64FromInt64(20)) { + break + } + if _compat_map[i].Fnew_req != req { + goto _1 + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(W)) + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(_compat_map[i].Fold_req), int64(bp))) + if r < 0 { + break + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(R)) + break + goto _1 + _1: + ; + i++ + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xissetugid(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__libc.Fsecure) +} + +func Xlockf(tls *TLS, fd int32, op int32, size Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v size=%v, (%v:)", tls, fd, op, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var _ /* l at bp+0 */ Tflock + *(*Tflock)(unsafe.Pointer(bp)) = Tflock{ + Fl_type: int16(F_WRLCK), + Fl_whence: int16(1), + Fl_len: size, + } + switch op { + case int32(F_TEST): + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = F_RDLCK + if Xfcntl(tls, fd, int32(F_GETLK), VaList(bp+40, bp)) < 0 { + return -int32(1) + } + if int32((*(*Tflock)(unsafe.Pointer(bp))).Fl_type) == int32(F_UNLCK) || (*(*Tflock)(unsafe.Pointer(bp))).Fl_pid == Xgetpid(tls) { + return 0 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + return -int32(1) + case F_ULOCK: + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = int16(F_UNLCK) + fallthrough + case int32(F_TLOCK): + return Xfcntl(tls, fd, int32(F_SETLK), VaList(bp+40, bp)) + case int32(F_LOCK): + return Xfcntl(tls, fd, int32(F_SETLKW), VaList(bp+40, bp)) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) +} + +const ACCOUNTING = 9 +const UTMP_FILE = "_PATH_UTMP" +const UTMP_FILENAME = "_PATH_UTMP" +const UT_HOSTSIZE = 256 +const UT_LINESIZE = 32 +const UT_NAMESIZE = 32 +const WTMP_FILE = "_PATH_WTMP" +const WTMP_FILENAME = "_PATH_WTMP" +const _PATH_UTMP = "/dev/null/utmp" +const _PATH_WTMP = "/dev/null/wtmp" +const ut_name = 0 +const utmp = 0 + +type Tlastlog = struct { + Fll_time Ttime_t + Fll_line [32]uint8 + Fll_host [256]uint8 +} + +func Xlogin_tty(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xsetsid(tls) + if Xioctl(tls, fd, int32(TIOCSCTTY), VaList(bp+8, UintptrFromInt32(0))) != 0 { + return -int32(1) + } + Xdup2(tls, fd, 0) + Xdup2(tls, fd, int32(1)) + Xdup2(tls, fd, int32(2)) + if fd > int32(2) { + Xclose(tls, fd) + } + return 0 +} + +const MNTOPT_DEFAULTS = "defaults" +const MNTOPT_NOAUTO = "noauto" +const MNTOPT_NOSUID = "nosuid" +const MNTOPT_RO = "ro" +const MNTOPT_RW = "rw" +const MNTOPT_SUID = "suid" +const MNTTYPE_IGNORE = "ignore" +const MNTTYPE_NFS = "nfs" +const MNTTYPE_SWAP = "swap" +const MOUNTED = "/etc/mtab" +const SENTINEL = 0 + +type Tmntent = struct { + Fmnt_fsname uintptr + Fmnt_dir uintptr + Fmnt_type uintptr + Fmnt_opts uintptr + Fmnt_freq int32 + Fmnt_passno int32 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _internal_buf uintptr +var _internal_bufsize Tsize_t + +func Xsetmntent(tls *TLS, name uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v mode=%v, (%v:)", tls, name, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfopen(tls, name, mode) +} + +func Xendmntent(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + if f != 0 { + Xfclose(tls, f) + } + return int32(1) +} + +func _unescape_ent(tls *TLS, beg uintptr) (r uintptr) { + var cval uint8 + var dest, src, val, v1, v2, v3, v4, v6, v7, v8, v9 uintptr + var i int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = cval, dest, i, src, val, v1, v2, v3, v4, v6, v7, v8, v9 + dest = beg + src = beg + for *(*uint8)(unsafe.Pointer(src)) != 0 { + cval = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(src))) != int32('\\') { + v1 = dest + dest++ + v2 = src + src++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + continue + } + if int32(*(*uint8)(unsafe.Pointer(src + 1))) == int32('\\') { + src++ + v3 = dest + dest++ + v4 = src + src++ + *(*uint8)(unsafe.Pointer(v3)) = *(*uint8)(unsafe.Pointer(v4)) + continue + } + val = src + uintptr(1) + i = 0 + for { + if !(i < int32(3)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(val))) >= int32('0') && int32(*(*uint8)(unsafe.Pointer(val))) <= int32('7') { + cval = uint8(int32(cval) << Int32FromInt32(3)) + v6 = val + val++ + cval = uint8(int32(cval) + (int32(*(*uint8)(unsafe.Pointer(v6))) - Int32FromUint8('0'))) + } else { + break + } + goto _5 + _5: + ; + i++ + } + if cval != 0 { + v7 = dest + dest++ + *(*uint8)(unsafe.Pointer(v7)) = cval + src = val + } else { + v8 = dest + dest++ + v9 = src + src++ + *(*uint8)(unsafe.Pointer(v8)) = *(*uint8)(unsafe.Pointer(v9)) + } + } + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + return beg +} + +func Xgetmntent_r(tls *TLS, f uintptr, mnt uintptr, linebuf uintptr, buflen int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v linebuf=%v buflen=%v, (%v:)", tls, f, mnt, linebuf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var i, len1 Tsize_t + var use_internal int32 + var _ /* n at bp+0 */ [8]int32 + _, _, _ = i, len1, use_internal + use_internal = BoolInt32(linebuf == uintptr(unsafe.Pointer(&_internal_buf))) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno = 0 + for cond := true; cond; cond = int32(*(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])))) == int32('#') || uint64((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]) == len1 { + if use_internal != 0 { + Xgetline(tls, uintptr(unsafe.Pointer(&_internal_buf)), uintptr(unsafe.Pointer(&_internal_bufsize)), f) + linebuf = _internal_buf + } else { + Xfgets(tls, linebuf, buflen, f) + } + if Xfeof(tls, f) != 0 || Xferror(tls, f) != 0 { + return uintptr(0) + } + if !(Xstrchr(tls, linebuf, int32('\n')) != 0) { + Xfscanf(tls, f, __ccgo_ts+852, 0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return uintptr(0) + } + len1 = Xstrlen(tls, linebuf) + if len1 > uint64(INT_MAX) { + continue + } + i = uint64(0) + for { + if !(i < Uint64FromInt64(32)/Uint64FromInt64(4)) { + break + } + (*(*[8]int32)(unsafe.Pointer(bp)))[i] = int32(len1) + goto _1 + _1: + ; + i++ + } + Xsscanf(tls, linebuf, __ccgo_ts+864, VaList(bp+40, bp, bp+uintptr(1)*4, bp+uintptr(2)*4, bp+uintptr(3)*4, bp+uintptr(4)*4, bp+uintptr(5)*4, bp+uintptr(6)*4, bp+uintptr(7)*4, mnt+32, mnt+36)) + } + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(3)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(5)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(7)]))) = uint8(0) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(2)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(4)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(6)])) + return mnt +} + +func Xgetmntent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetmntent_r(tls, f, uintptr(unsafe.Pointer(&_mnt)), uintptr(unsafe.Pointer(&_internal_buf)), 0) +} + +var _mnt Tmntent + +func Xaddmntent(tls *TLS, f uintptr, mnt uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v, (%v:)", tls, f, mnt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xfseek(tls, f, 0, int32(2)) != 0 { + return int32(1) + } + return BoolInt32(Xfprintf(tls, f, __ccgo_ts+919, VaList(bp+8, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno)) < 0) +} + +func Xhasmntopt(tls *TLS, mnt uintptr, opt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mnt=%v opt=%v, (%v:)", tls, mnt, opt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrstr(tls, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, opt) +} + +type Thistory = struct { + Fchain uintptr + Fdev Tdev_t + Fino Tino_t + Flevel int32 + Fbase int32 +} + +func _do_nftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32, h uintptr) (r1 int32) { + bp := tls.Alloc(176) + defer tls.Free(176) + var d, de, v10 uintptr + var dfd, err, r, type1, v11, v12, v3, v4, v7 int32 + var j, k, l Tsize_t + var v1 uint64 + var v13, v8 bool + var v2 Tino_t + var _ /* lev at bp+160 */ TFTW + var _ /* new at bp+128 */ Thistory + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, de, dfd, err, j, k, l, r, type1, v1, v10, v11, v12, v13, v2, v3, v4, v7, v8 + l = Xstrlen(tls, path) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(l-uint64(1))))) == int32('/') { + v1 = l - uint64(1) + } else { + v1 = l + } + j = v1 + v2 = Uint64FromInt32(0) + (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino = v2 + (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev = v2 + if flags&int32(FTW_PHYS) != 0 { + v3 = Xlstat(tls, path, bp) + } else { + v3 = BoolInt32(Xstat(tls, path, bp) < 0) + } + if v3 != 0 { + if !(flags&Int32FromInt32(FTW_PHYS) != 0) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) && !(Xlstat(tls, path, bp) != 0) { + type1 = int32(FTW_SLN) + } else { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EACCES) { + return -int32(1) + } else { + type1 = int32(FTW_NS) + } + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + if flags&int32(FTW_DEPTH) != 0 { + type1 = int32(FTW_DP) + } else { + type1 = int32(FTW_D) + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + if flags&int32(FTW_PHYS) != 0 { + type1 = int32(FTW_SL) + } else { + type1 = int32(FTW_SLN) + } + } else { + type1 = int32(FTW_F) + } + } + } + if flags&int32(FTW_MOUNT) != 0 && h != 0 && type1 != int32(FTW_NS) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*Thistory)(unsafe.Pointer(h)).Fdev { + return 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 128))).Fchain = h + (*(*Thistory)(unsafe.Pointer(bp + 128))).Fdev = (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev + (*(*Thistory)(unsafe.Pointer(bp + 128))).Fino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + if h != 0 { + v4 = (*Thistory)(unsafe.Pointer(h)).Flevel + int32(1) + } else { + v4 = 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 128))).Flevel = v4 + (*(*Thistory)(unsafe.Pointer(bp + 128))).Fbase = int32(j + uint64(1)) + (*(*TFTW)(unsafe.Pointer(bp + 160))).Flevel = (*(*Thistory)(unsafe.Pointer(bp + 128))).Flevel + if h != 0 { + (*(*TFTW)(unsafe.Pointer(bp + 160))).Fbase = (*Thistory)(unsafe.Pointer(h)).Fbase + } else { + k = j + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k)))) == int32('/')) { + break + } + goto _5 + _5: + ; + k-- + } + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k-uint64(1))))) != int32('/')) { + break + } + goto _6 + _6: + ; + k-- + } + (*(*TFTW)(unsafe.Pointer(bp + 160))).Fbase = int32(k) + } + if type1 == int32(FTW_D) || type1 == int32(FTW_DP) { + dfd = Xopen(tls, path, O_RDONLY, 0) + err = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if dfd < 0 && err == int32(EACCES) { + type1 = int32(FTW_DNR) + } + if !(fd_limit != 0) { + Xclose(tls, dfd) + } + } + if v8 = !(flags&Int32FromInt32(FTW_DEPTH) != 0); v8 { + v7 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+160) + r = v7 + } + if v8 && v7 != 0 { + return r + } + for { + if !(h != 0) { + break + } + if (*Thistory)(unsafe.Pointer(h)).Fdev == (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev && (*Thistory)(unsafe.Pointer(h)).Fino == (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino { + return 0 + } + goto _9 + _9: + ; + h = (*Thistory)(unsafe.Pointer(h)).Fchain + } + if (type1 == int32(FTW_D) || type1 == int32(FTW_DP)) && fd_limit != 0 { + if dfd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return -int32(1) + } + d = Xfdopendir(tls, dfd) + if d != 0 { + for { + v10 = Xreaddir(tls, d) + de = v10 + if !(v10 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) { + continue + } + if Xstrlen(tls, de+19) >= uint64(PATH_MAX)-l { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + Xclosedir(tls, d) + return -int32(1) + } + *(*uint8)(unsafe.Pointer(path + uintptr(j))) = uint8('/') + Xstrcpy(tls, path+uintptr(j)+uintptr(1), de+19) + v11 = _do_nftw(tls, path, fn, fd_limit-int32(1), flags, bp+128) + r = v11 + if v11 != 0 { + Xclosedir(tls, d) + return r + } + } + Xclosedir(tls, d) + } else { + Xclose(tls, dfd) + return -int32(1) + } + } + *(*uint8)(unsafe.Pointer(path + uintptr(l))) = uint8(0) + if v13 = flags&int32(FTW_DEPTH) != 0; v13 { + v12 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+160) + r = v12 + } + if v13 && v12 != 0 { + return r + } + return 0 +} + +func Xnftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v flags=%v, (%v:)", tls, path, fn, fd_limit, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var l Tsize_t + var r int32 + var _ /* cs at bp+0 */ int32 + var _ /* pathbuf at bp+4 */ [4097]uint8 + _, _ = l, r + if fd_limit <= 0 { + return 0 + } + l = Xstrlen(tls, path) + if l > uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + Xmemcpy(tls, bp+4, path, l+uint64(1)) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + r = _do_nftw(tls, bp+4, fn, fd_limit, flags, UintptrFromInt32(0)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return r +} + +/* Nonstandard, but vastly superior to the standard functions */ + +func Xopenpty(tls *TLS, pm uintptr, ps uintptr, name uintptr, tio uintptr, ws uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pm=%v ps=%v name=%v tio=%v ws=%v, (%v:)", tls, pm, ps, name, tio, ws, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var m, s, v1 int32 + var _ /* buf at bp+8 */ [20]uint8 + var _ /* cs at bp+4 */ int32 + var _ /* n at bp+0 */ int32 + _, _, _ = m, s, v1 + *(*int32)(unsafe.Pointer(bp)) = 0 + m = Xopen(tls, __ccgo_ts+938, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + if m < 0 { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + if Xioctl(tls, m, int32(TIOCSPTLCK), VaList(bp+40, bp)) != 0 || Xioctl(tls, m, Int32FromUint32(TIOCGPTN), VaList(bp+40, bp)) != 0 { + goto fail + } + if !(name != 0) { + name = bp + 8 + } + Xsnprintf(tls, name, uint64(20), __ccgo_ts+948, VaList(bp+40, *(*int32)(unsafe.Pointer(bp)))) + v1 = Xopen(tls, name, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + s = v1 + if v1 < 0 { + goto fail + } + if tio != 0 { + Xtcsetattr(tls, s, TCSANOW, tio) + } + if ws != 0 { + Xioctl(tls, s, int32(TIOCSWINSZ), VaList(bp+40, ws)) + } + *(*int32)(unsafe.Pointer(pm)) = m + *(*int32)(unsafe.Pointer(ps)) = s + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return 0 + goto fail +fail: + ; + Xclose(tls, m) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return -int32(1) +} + +func Xptsname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var err int32 + _ = err + err = X__ptsname_r(tls, fd, uintptr(unsafe.Pointer(&_buf2)), uint64(22)) + if err != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_buf2)) +} + +var _buf2 [22]uint8 + +func Xposix_openpt(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xopen(tls, __ccgo_ts+938, flags, 0) + if r < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSPC) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAGAIN) + } + return r +} + +func Xgrantpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xunlockpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* unlock at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = 0 + return Xioctl(tls, fd, int32(TIOCSPTLCK), VaList(bp+16, bp)) +} + +func X__ptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var err, v1 int32 + var _ /* pty at bp+0 */ int32 + _, _ = err, v1 + if !(buf != 0) { + len1 = uint64(0) + } + v1 = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Uint32FromUint32(TIOCGPTN)), int64(bp))) + err = v1 + if v1 != 0 { + return -err + } + if uint64(Xsnprintf(tls, buf, len1, __ccgo_ts+948, VaList(bp+16, *(*int32)(unsafe.Pointer(bp))))) >= len1 { + return int32(ERANGE) + } + return 0 +} + +func Xptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ptsname_r(tls, fd, buf, len1) +} + +func _slash_len(tls *TLS, s uintptr) (r Tsize_t) { + var s0 uintptr + _ = s0 + s0 = s + for int32(*(*uint8)(unsafe.Pointer(s))) == int32('/') { + s++ + } + return uint64(int64(s) - int64(s0)) +} + +func Xrealpath(tls *TLS, filename uintptr, resolved uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v resolved=%v, (%v:)", tls, filename, resolved, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(8208) + defer tls.Free(8208) + var check_dir, up int32 + var cnt, l, l0, nup, p, q, v10, v11, v4, v5, v6, v7, v9 Tsize_t + var k Tssize_t + var z uintptr + var _ /* output at bp+4097 */ [4096]uint8 + var _ /* stack at bp+0 */ [4097]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = check_dir, cnt, k, l, l0, nup, p, q, up, z, v10, v11, v4, v5, v6, v7, v9 + cnt = uint64(0) + nup = uint64(0) + check_dir = 0 + if !(filename != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + l = Xstrnlen(tls, filename, uint64(4097)) + if !(l != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if l >= uint64(PATH_MAX) { + goto toolong + } + p = uint64(4097) - l - uint64(1) + q = uint64(0) + Xmemcpy(tls, bp+uintptr(p), filename, l+uint64(1)) + /* Main loop. Each iteration pops the next part from stack of + * remaining path components and consumes any slashes that follow. + * If not a link, it's moved to output; if a link, contents are + * pushed to the stack. */ + goto restart +restart: + ; +_3: + ; + /* If stack starts with /, the whole component is / or // + * and the output state must be reset. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + check_dir = 0 + nup = uint64(0) + q = uint64(0) + v4 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v4] = uint8('/') + p++ + /* Initial // is special. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p+uint64(1)]) != int32('/') { + v5 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v5] = uint8('/') + } + goto _2 + } + z = X__strchrnul(tls, bp+uintptr(p), int32('/')) + v6 = uint64(int64(z) - int64(bp+uintptr(p))) + l = v6 + l0 = v6 + if !(l != 0) && !(check_dir != 0) { + goto _1 + } + /* Skip any . component but preserve check_dir status. */ + if l == uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('.') { + p += l + goto _2 + } + /* Copy next component onto output at least temporarily, to + * call readlink, but wait to advance output position until + * determining it's not a link. */ + if q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + if !(p != 0) { + goto toolong + } + p-- + v7 = p + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v7] = uint8('/') + l++ + } + if q+l >= uint64(PATH_MAX) { + goto toolong + } + Xmemcpy(tls, bp+4097+uintptr(q), bp+uintptr(p), l) + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q+l] = uint8(0) + p += l + up = 0 + if l0 == uint64(2) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(2)]) == int32('.') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(1)]) == int32('.') { + up = int32(1) + /* Any non-.. path components we could cancel start + * after nup repetitions of the 3-byte string "../"; + * if there are none, accumulate .. components to + * later apply to cwd, if needed. */ + if q <= uint64(3)*nup { + nup++ + q += l + goto _2 + } + /* When previous components are already known to be + * directories, processing .. can skip readlink. */ + if !(check_dir != 0) { + goto skip_readlink + } + } + k = Xreadlink(tls, bp+4097, bp, p) + if uint64(k) == p { + goto toolong + } + if !(k != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if !(k < 0) { + goto _8 + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return uintptr(0) + } + goto skip_readlink +skip_readlink: + ; + check_dir = 0 + if up != 0 { + for q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + q-- + } + if q > uint64(1) && (q > uint64(2) || int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/')) { + q-- + } + goto _2 + } + if l0 != 0 { + q += l + } + check_dir = int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) + goto _2 +_8: + ; + cnt++ + v9 = cnt + if v9 == uint64(SYMLOOP_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ELOOP) + return uintptr(0) + } + /* If link contents end in /, strip any slashes already on + * stack to avoid /->// or //->/// or spurious toolong. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[k-int64(1)]) == int32('/') { + for int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + p++ + } + } + p -= uint64(k) + Xmemmove(tls, bp+uintptr(p), bp, uint64(k)) + /* Skip the stack advancement in case we have a new + * absolute base path. */ + goto restart + goto _2 +_2: + ; + p += _slash_len(tls, bp+uintptr(p)) + goto _3 + goto _1 +_1: + ; + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q] = uint8(0) + if int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/') { + if !(Xgetcwd(tls, bp, uint64(4097)) != 0) { + return uintptr(0) + } + l = Xstrlen(tls, bp) + /* Cancel any initial .. components. */ + p = uint64(0) + for { + v10 = nup + nup-- + if !(v10 != 0) { + break + } + for l > uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + l-- + } + if l > uint64(1) { + l-- + } + p += uint64(2) + if p < q { + p++ + } + } + if q-p != 0 && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + v11 = l + l++ + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v11] = uint8('/') + } + if l+(q-p)+uint64(1) >= uint64(PATH_MAX) { + goto toolong + } + Xmemmove(tls, bp+4097+uintptr(l), bp+4097+uintptr(p), q-p+uint64(1)) + Xmemcpy(tls, bp+4097, bp, l) + q = l + q - p + } + if resolved != 0 { + return Xmemcpy(tls, resolved, bp+4097, q+uint64(1)) + } else { + return Xstrdup(tls, bp+4097) + } + goto toolong +toolong: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) +} + +func Xsetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setdomainname), int64(name), int64(len1))))) +} + +func Xsetpriority(tls *TLS, which int32, who Tid_t, prio int32) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v prio=%v, (%v:)", tls, which, who, prio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setpriority), int64(which), int64(who), int64(prio))))) +} + +type Tctx = struct { + Flim [2]uint64 + Fres int32 + Ferr int32 +} + +func _do_setrlimit(tls *TLS, p uintptr) { + var c uintptr + _ = c + c = p + if (*Tctx)(unsafe.Pointer(c)).Ferr > 0 { + return + } + (*Tctx)(unsafe.Pointer(c)).Ferr = int32(-X__syscall2(tls, int64(SYS_setrlimit), int64((*Tctx)(unsafe.Pointer(c)).Fres), int64(c))) +} + +func Xsetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ret int32 + var v1, v2 uint64 + var _ /* c at bp+16 */ Tctx + var _ /* tmp at bp+0 */ Trlimit + _, _, _ = ret, v1, v2 + if ^Uint64FromUint64(0) != ^Uint64FromUint64(0) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(rlim)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + rlim = bp + } + ret = int32(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(rlim), int64(Int32FromInt32(0)))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur < ^Uint64FromUint64(0) { + v1 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur + } else { + v1 = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max < ^Uint64FromUint64(0) { + v2 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max + } else { + v2 = ^Uint64FromUint64(0) + } + *(*Tctx)(unsafe.Pointer(bp + 16)) = Tctx{ + Flim: [2]uint64{ + 0: v1, + 1: v2, + }, + Fres: resource, + Ferr: -int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setrlimit), bp+16) + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr != 0 { + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr > 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr + } + return -int32(1) + } + return 0 +} + +func Xsyscall(tls *TLS, n int64, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v n=%v va=%v, (%v:)", tls, n, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, c, d, e, f Tsyscall_arg_t + var ap Tva_list + _, _, _, _, _, _, _ = a, ap, b, c, d, e, f + ap = va + a = VaInt64(&ap) + b = VaInt64(&ap) + c = VaInt64(&ap) + d = VaInt64(&ap) + e = VaInt64(&ap) + f = VaInt64(&ap) + _ = ap + return X__syscall_ret(tls, uint64(X__syscall6(tls, n, a, b, c, d, e, f))) +} + +const AF_ALG = 38 +const AF_APPLETALK = 5 +const AF_ASH = 18 +const AF_ATMPVC = 8 +const AF_ATMSVC = 20 +const AF_AX25 = 3 +const AF_BLUETOOTH = 31 +const AF_BRIDGE = 7 +const AF_CAIF = 37 +const AF_CAN = 29 +const AF_DECnet = 12 +const AF_ECONET = 19 +const AF_FILE = 1 +const AF_IB = 27 +const AF_IEEE802154 = 36 +const AF_INET = 2 +const AF_INET6 = 10 +const AF_IPX = 4 +const AF_IRDA = 23 +const AF_ISDN = 34 +const AF_IUCV = 32 +const AF_KCM = 41 +const AF_KEY = 15 +const AF_LLC = 26 +const AF_LOCAL = 1 +const AF_MAX = 45 +const AF_MPLS = 28 +const AF_NETBEUI = 13 +const AF_NETLINK = 16 +const AF_NETROM = 6 +const AF_NFC = 39 +const AF_PACKET = 17 +const AF_PHONET = 35 +const AF_PPPOX = 24 +const AF_QIPCRTR = 42 +const AF_RDS = 21 +const AF_ROSE = 11 +const AF_ROUTE = 16 +const AF_RXRPC = 33 +const AF_SECURITY = 14 +const AF_SMC = 43 +const AF_SNA = 22 +const AF_TIPC = 30 +const AF_UNIX = 1 +const AF_UNSPEC = 0 +const AF_VSOCK = 40 +const AF_WANPIPE = 25 +const AF_X25 = 9 +const AF_XDP = 44 +const LOG_ALERT = 1 +const LOG_AUTH = 32 +const LOG_AUTHPRIV = 80 +const LOG_CONS = 2 +const LOG_CRIT = 2 +const LOG_CRON = 72 +const LOG_DAEMON = 24 +const LOG_DEBUG = 7 +const LOG_EMERG = 0 +const LOG_ERR = 3 +const LOG_FACMASK = 1016 +const LOG_FTP = 88 +const LOG_INFO = 6 +const LOG_KERN = 0 +const LOG_LOCAL0 = 128 +const LOG_LOCAL1 = 136 +const LOG_LOCAL2 = 144 +const LOG_LOCAL3 = 152 +const LOG_LOCAL4 = 160 +const LOG_LOCAL5 = 168 +const LOG_LOCAL6 = 176 +const LOG_LOCAL7 = 184 +const LOG_LPR = 48 +const LOG_MAIL = 16 +const LOG_NDELAY = 8 +const LOG_NEWS = 56 +const LOG_NFACILITIES = 24 +const LOG_NOTICE = 5 +const LOG_NOWAIT = 16 +const LOG_ODELAY = 4 +const LOG_PERROR = 32 +const LOG_PID = 1 +const LOG_PRIMASK = 7 +const LOG_SYSLOG = 40 +const LOG_USER = 8 +const LOG_UUCP = 64 +const LOG_WARNING = 4 +const MSG_BATCH = 262144 +const MSG_CMSG_CLOEXEC = 1073741824 +const MSG_CONFIRM = 2048 +const MSG_CTRUNC = 8 +const MSG_DONTROUTE = 4 +const MSG_DONTWAIT = 64 +const MSG_EOR = 128 +const MSG_ERRQUEUE = 8192 +const MSG_FASTOPEN = 536870912 +const MSG_FIN = 512 +const MSG_MORE = 32768 +const MSG_NOSIGNAL = 16384 +const MSG_OOB = 1 +const MSG_PEEK = 2 +const MSG_PROXY = 16 +const MSG_RST = 4096 +const MSG_SYN = 1024 +const MSG_TRUNC = 32 +const MSG_WAITALL = 256 +const MSG_WAITFORONE = 65536 +const MSG_ZEROCOPY = 67108864 +const PF_ALG = 38 +const PF_APPLETALK = 5 +const PF_ASH = 18 +const PF_ATMPVC = 8 +const PF_ATMSVC = 20 +const PF_AX25 = 3 +const PF_BLUETOOTH = 31 +const PF_BRIDGE = 7 +const PF_CAIF = 37 +const PF_CAN = 29 +const PF_DECnet = 12 +const PF_ECONET = 19 +const PF_FILE = 1 +const PF_IB = 27 +const PF_IEEE802154 = 36 +const PF_INET = 2 +const PF_INET6 = 10 +const PF_IPX = 4 +const PF_IRDA = 23 +const PF_ISDN = 34 +const PF_IUCV = 32 +const PF_KCM = 41 +const PF_KEY = 15 +const PF_LLC = 26 +const PF_LOCAL = 1 +const PF_MAX = 45 +const PF_MPLS = 28 +const PF_NETBEUI = 13 +const PF_NETLINK = 16 +const PF_NETROM = 6 +const PF_NFC = 39 +const PF_PACKET = 17 +const PF_PHONET = 35 +const PF_PPPOX = 24 +const PF_QIPCRTR = 42 +const PF_RDS = 21 +const PF_ROSE = 11 +const PF_ROUTE = 16 +const PF_RXRPC = 33 +const PF_SECURITY = 14 +const PF_SMC = 43 +const PF_SNA = 22 +const PF_TIPC = 30 +const PF_UNIX = 1 +const PF_UNSPEC = 0 +const PF_VSOCK = 40 +const PF_WANPIPE = 25 +const PF_X25 = 9 +const PF_XDP = 44 +const SCM_CREDENTIALS = 2 +const SCM_RIGHTS = 1 +const SCM_TIMESTAMP = 29 +const SCM_TIMESTAMPING = 37 +const SCM_TIMESTAMPING_OPT_STATS = 54 +const SCM_TIMESTAMPING_PKTINFO = 58 +const SCM_TIMESTAMPNS = 35 +const SCM_TXTIME = 61 +const SCM_WIFI_STATUS = 41 +const SHUT_RD = 0 +const SHUT_RDWR = 2 +const SHUT_WR = 1 +const SOCK_CLOEXEC = 524288 +const SOCK_DCCP = 6 +const SOCK_DGRAM = 2 +const SOCK_NONBLOCK = 2048 +const SOCK_PACKET = 10 +const SOCK_RAW = 3 +const SOCK_RDM = 4 +const SOCK_SEQPACKET = 5 +const SOCK_STREAM = 1 +const SOL_AAL = 265 +const SOL_ALG = 279 +const SOL_ATM = 264 +const SOL_BLUETOOTH = 274 +const SOL_CAIF = 278 +const SOL_DCCP = 269 +const SOL_DECNET = 261 +const SOL_ICMPV6 = 58 +const SOL_IP = 0 +const SOL_IPV6 = 41 +const SOL_IRDA = 266 +const SOL_IUCV = 277 +const SOL_KCM = 281 +const SOL_LLC = 268 +const SOL_NETBEUI = 267 +const SOL_NETLINK = 270 +const SOL_NFC = 280 +const SOL_PACKET = 263 +const SOL_PNPIPE = 275 +const SOL_PPPOL2TP = 273 +const SOL_RAW = 255 +const SOL_RDS = 276 +const SOL_RXRPC = 272 +const SOL_SOCKET = 1 +const SOL_TIPC = 271 +const SOL_TLS = 282 +const SOL_X25 = 262 +const SOL_XDP = 283 +const SOMAXCONN = 128 +const SO_ACCEPTCONN = 30 +const SO_ATTACH_BPF = 50 +const SO_ATTACH_FILTER = 26 +const SO_ATTACH_REUSEPORT_CBPF = 51 +const SO_ATTACH_REUSEPORT_EBPF = 52 +const SO_BINDTODEVICE = 25 +const SO_BINDTOIFINDEX = 62 +const SO_BPF_EXTENSIONS = 48 +const SO_BROADCAST = 6 +const SO_BSDCOMPAT = 14 +const SO_BUSY_POLL = 46 +const SO_BUSY_POLL_BUDGET = 70 +const SO_CNX_ADVICE = 53 +const SO_COOKIE = 57 +const SO_DEBUG = 1 +const SO_DETACH_BPF = 27 +const SO_DETACH_FILTER = 27 +const SO_DETACH_REUSEPORT_BPF = 68 +const SO_DOMAIN = 39 +const SO_DONTROUTE = 5 +const SO_ERROR = 4 +const SO_GET_FILTER = 26 +const SO_INCOMING_CPU = 49 +const SO_INCOMING_NAPI_ID = 56 +const SO_KEEPALIVE = 9 +const SO_LINGER = 13 +const SO_LOCK_FILTER = 44 +const SO_MARK = 36 +const SO_MAX_PACING_RATE = 47 +const SO_MEMINFO = 55 +const SO_NOFCS = 43 +const SO_NO_CHECK = 11 +const SO_OOBINLINE = 10 +const SO_PASSCRED = 16 +const SO_PASSSEC = 34 +const SO_PEEK_OFF = 42 +const SO_PEERCRED = 17 +const SO_PEERGROUPS = 59 +const SO_PEERNAME = 28 +const SO_PEERSEC = 31 +const SO_PREFER_BUSY_POLL = 69 +const SO_PRIORITY = 12 +const SO_PROTOCOL = 38 +const SO_RCVBUF = 8 +const SO_RCVBUFFORCE = 33 +const SO_RCVLOWAT = 18 +const SO_RCVTIMEO = 20 +const SO_REUSEADDR = 2 +const SO_REUSEPORT = 15 +const SO_RXQ_OVFL = 40 +const SO_SECURITY_AUTHENTICATION = 22 +const SO_SECURITY_ENCRYPTION_NETWORK = 24 +const SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +const SO_SELECT_ERR_QUEUE = 45 +const SO_SNDBUF = 7 +const SO_SNDBUFFORCE = 32 +const SO_SNDLOWAT = 19 +const SO_SNDTIMEO = 21 +const SO_TIMESTAMP = 29 +const SO_TIMESTAMPING = 37 +const SO_TIMESTAMPNS = 35 +const SO_TXTIME = 61 +const SO_TYPE = 3 +const SO_WIFI_STATUS = 41 +const SO_ZEROCOPY = 60 + +type Tsocklen_t = uint32 + +type Tsa_family_t = uint16 + +type Tmsghdr = struct { + Fmsg_name uintptr + Fmsg_namelen Tsocklen_t + Fmsg_iov uintptr + Fmsg_iovlen int32 + F__pad1 int32 + Fmsg_control uintptr + Fmsg_controllen Tsocklen_t + F__pad2 int32 + Fmsg_flags int32 +} + +type Tcmsghdr = struct { + Fcmsg_len Tsocklen_t + F__pad1 int32 + Fcmsg_level int32 + Fcmsg_type int32 +} + +type Tlinger = struct { + Fl_onoff int32 + Fl_linger int32 +} + +type Tsockaddr = struct { + Fsa_family Tsa_family_t + Fsa_data [14]uint8 +} + +type Tsockaddr_storage = struct { + Fss_family Tsa_family_t + F__ss_padding [118]uint8 + F__ss_align uint64 +} + +var _lock2 [1]int32 +var _log_ident [32]uint8 +var _log_opt int32 +var _log_facility = Int32FromInt32(1) << Int32FromInt32(3) +var _log_mask = int32(0xff) +var _log_fd = -int32(1) + +func Xsetlogmask(tls *TLS, maskpri int32) (r int32) { + if __ccgo_strace { + trc("tls=%v maskpri=%v, (%v:)", tls, maskpri, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + ret = _log_mask + if maskpri != 0 { + _log_mask = maskpri + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + return ret +} + +var _log_addr = struct { + Fsun_family int16 + Fsun_path [9]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [9]uint8{'/', 'd', 'e', 'v', '/', 'l', 'o', 'g'}, +} + +func Xcloselog(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + Xclose(tls, _log_fd) + _log_fd = -int32(1) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func ___openlog(tls *TLS) { + _log_fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if _log_fd >= 0 { + Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) + } +} + +func Xopenlog(tls *TLS, ident uintptr, opt int32, facility int32) { + if __ccgo_strace { + trc("tls=%v ident=%v opt=%v facility=%v, (%v:)", tls, ident, opt, facility, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var n Tsize_t + var _ /* cs at bp+0 */ int32 + _ = n + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + if ident != 0 { + n = Xstrnlen(tls, ident, Uint64FromInt64(32)-Uint64FromInt32(1)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&_log_ident)), ident, n) + _log_ident[n] = uint8(0) + } else { + _log_ident[0] = uint8(0) + } + _log_opt = opt + _log_facility = facility + if opt&int32(LOG_NDELAY) != 0 && _log_fd < 0 { + ___openlog(tls) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func _is_lost_conn(tls *TLS, e int32) (r int32) { + return BoolInt32(e == int32(ECONNREFUSED) || e == int32(ECONNRESET) || e == int32(ENOTCONN) || e == int32(EPIPE)) +} + +func __vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(1184) + defer tls.Free(1184) + var errno_save, fd, l, l2, pid, v1, v2 int32 + var _ /* buf at bp+80 */ [1024]uint8 + var _ /* hlen at bp+1104 */ int32 + var _ /* now at bp+16 */ Ttime_t + var _ /* timebuf at bp+0 */ [16]uint8 + var _ /* tm at bp+24 */ Ttm + _, _, _, _, _, _, _ = errno_save, fd, l, l2, pid, v1, v2 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if _log_fd < 0 { + ___openlog(tls) + } + if !(priority&Int32FromInt32(LOG_FACMASK) != 0) { + priority |= _log_facility + } + *(*Ttime_t)(unsafe.Pointer(bp + 16)) = Xtime(tls, UintptrFromInt32(0)) + Xgmtime_r(tls, bp+16, bp+24) + Xstrftime_l(tls, bp, uint64(16), __ccgo_ts+960, bp+24, uintptr(unsafe.Pointer(&X__c_locale))) + if _log_opt&int32(LOG_PID) != 0 { + v1 = Xgetpid(tls) + } else { + v1 = 0 + } + pid = v1 + l = Xsnprintf(tls, bp+80, uint64(1024), __ccgo_ts+969, VaList(bp+1120, priority, bp, bp+1104, uintptr(unsafe.Pointer(&_log_ident)), __ccgo_ts+991+BoolUintptr(!(pid != 0)), pid, __ccgo_ts+993+BoolUintptr(!(pid != 0)))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + l2 = Xvsnprintf(tls, bp+80+uintptr(l), uint64(1024)-uint64(l), message, ap) + if l2 >= 0 { + if uint64(l2) >= uint64(1024)-uint64(l) { + l = int32(Uint64FromInt64(1024) - Uint64FromInt32(1)) + } else { + l += l2 + } + if int32((*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[l-int32(1)]) != int32('\n') { + v2 = l + l++ + (*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[v2] = uint8('\n') + } + if Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0 && (!(_is_lost_conn(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0) || Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) < 0 || Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0) && _log_opt&int32(LOG_CONS) != 0 { + fd = Xopen(tls, __ccgo_ts+688, Int32FromInt32(O_WRONLY)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + if fd >= 0 { + Xdprintf(tls, fd, __ccgo_ts+995, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + Xclose(tls, fd) + } + } + if _log_opt&int32(LOG_PERROR) != 0 { + Xdprintf(tls, int32(2), __ccgo_ts+995, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + } + } +} + +func ___vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + if !(_log_mask&(Int32FromInt32(1)<<(priority&Int32FromInt32(7))) != 0) || priority & ^Int32FromInt32(0x3ff) != 0 { + return + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + __vsyslog(tls, priority, message, ap) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func Xsyslog(tls *TLS, priority int32, message uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v priority=%v message=%v va=%v, (%v:)", tls, priority, message, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + ___vsyslog(tls, priority, message, ap) + _ = ap +} + +type Tutsname1 = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + F__domainname [65]uint8 +} + +func Xuname(tls *TLS, uts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uts=%v, (%v:)", tls, uts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_uname), int64(uts))))) +} + +func X__madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))))) +} + +func Xmadvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__madvise(tls, addr, len1, advice) +} + +func Xmincore(tls *TLS, addr uintptr, len1 Tsize_t, vec uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v vec=%v, (%v:)", tls, addr, len1, vec, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mincore), int64(addr), int64(len1), int64(vec))))) +} + +func Xmlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_mlock), int64(addr), int64(len1))))) +} + +func Xmlockall(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_mlockall), int64(flags))))) +} + +const OFF_MASK = 4095 +const UNIT = 4096 + +func _dummy5(tls *TLS) { +} + +func X__mmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int64 + _ = ret + if uint64(off)&(-Uint64FromUint64(0x2000)<<(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1))|(Uint64FromUint64(4096)-Uint64FromInt32(1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + if len1 >= uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MAP_FIXED) != 0 { + _dummy5(tls) + } + ret = X__syscall6(tls, int64(SYS_mmap), int64(start), int64(len1), int64(prot), int64(flags), int64(fd), off) + /* Fixup incorrect EPERM from kernel. */ + if ret == int64(-int32(EPERM)) && !(start != 0) && flags&int32(MAP_ANON) != 0 && !(flags&Int32FromInt32(MAP_FIXED) != 0) { + ret = int64(-int32(ENOMEM)) + } + return uintptr(X__syscall_ret(tls, uint64(ret))) +} + +func Xmmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mmap(tls, start, len1, prot, flags, fd, off) +} + +func X__mprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, start Tsize_t + _, _ = end, start + start = uint64(addr) & -X__libc.Fpage_size + end = uint64(addr+uintptr(len1)+uintptr(X__libc.Fpage_size)-UintptrFromInt32(1)) & -X__libc.Fpage_size + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mprotect), int64(start), int64(end-start), int64(prot))))) +} + +func Xmprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mprotect(tls, addr, len1, prot) +} + +func _dummy6(tls *TLS) { +} + +func X__mremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var new_addr uintptr + _, _ = ap, new_addr + new_addr = uintptr(0) + if new_len >= uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MREMAP_FIXED) != 0 { + _dummy6(tls) + ap = va + new_addr = VaUintptr(&ap) + _ = ap + } + return uintptr(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mremap), int64(old_addr), int64(old_len), int64(new_len), int64(flags), int64(new_addr))))) +} + +func Xmremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mremap(tls, old_addr, old_len, new_len, flags, va) +} + +func Xmsync(tls *TLS, start uintptr, len1 Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v flags=%v, (%v:)", tls, start, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_msync), int64(start), int64(len1), int64(flags), 0, 0, 0)))) +} + +func Xmunlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munlock), int64(addr), int64(len1))))) +} + +func Xmunlockall(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_munlockall))))) +} + +func _dummy7(tls *TLS) { +} + +func X__munmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + _dummy7(tls) + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munmap), int64(start), int64(len1))))) +} + +func Xmunmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__munmap(tls, start, len1) +} + +func Xposix_madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + if advice == int32(MADV_DONTNEED) { + return 0 + } + return int32(-X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))) +} + +func X__shm_mapname(tls *TLS, name uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v, (%v:)", tls, name, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1 uintptr + _, _ = p, v1 + for int32(*(*uint8)(unsafe.Pointer(name))) == int32('/') { + name++ + } + v1 = X__strchrnul(tls, name, int32('/')) + p = v1 + if *(*uint8)(unsafe.Pointer(v1)) != 0 || p == name || int64(p)-int64(name) <= int64(2) && int32(*(*uint8)(unsafe.Pointer(name))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('.') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if int64(p)-int64(name) > int64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, buf, __ccgo_ts+1000, uint64(9)) + Xmemcpy(tls, buf+uintptr(9), name, uint64(int64(p)-int64(name)+int64(1))) + return buf +} + +func Xshm_open(tls *TLS, name uintptr, flag int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flag=%v mode=%v, (%v:)", tls, name, flag, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var fd int32 + var v1 uintptr + var _ /* buf at bp+4 */ [265]uint8 + var _ /* cs at bp+0 */ int32 + _, _ = fd, v1 + v1 = X__shm_mapname(tls, name, bp+4) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + fd = Xopen(tls, name, flag|int32(O_NOFOLLOW)|int32(O_CLOEXEC)|int32(O_NONBLOCK), VaList(bp+280, mode)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return fd +} + +func Xshm_unlink(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var v1 uintptr + var _ /* buf at bp+0 */ [265]uint8 + _ = v1 + v1 = X__shm_mapname(tls, name, bp) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + return Xunlink(tls, name) +} + +const SA = 194 +const SB = 244 +const bittab = 0 + +func Xbtowc(tls *TLS, c int32) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, v3 int32 + var v1, v2 uint32 + _, _, _, _ = b, v1, v2, v3 + b = int32(uint8(c)) + if uint32(b) < uint32(128) { + v1 = uint32(b) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) && c != -int32(1) { + v2 = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + } else { + v2 = uint32(0xffffffff) + } + v1 = v2 + } + return v1 +} + +type Tchar16_t = uint16 + +type Tchar32_t = uint32 + +func Xc16rtomb(tls *TLS, s uintptr, c16 Tchar16_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c16=%v ps=%v, (%v:)", tls, s, c16, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wc Twchar_t + var x uintptr + _, _ = wc, x + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state)) + } + x = ps + if !(s != 0) { + if *(*uint32)(unsafe.Pointer(x)) != 0 { + goto ilseq + } + return uint64(1) + } + if !(*(*uint32)(unsafe.Pointer(x)) != 0) && uint32(c16)-uint32(0xd800) < uint32(0x400) { + *(*uint32)(unsafe.Pointer(x)) = uint32((int32(c16) - int32(0xd7c0)) << int32(10)) + return uint64(0) + } + if *(*uint32)(unsafe.Pointer(x)) != 0 { + if uint32(c16)-uint32(0xdc00) >= uint32(0x400) { + goto ilseq + } else { + wc = int32(*(*uint32)(unsafe.Pointer(x)) + uint32(c16) - uint32(0xdc00)) + } + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + } else { + wc = int32(c16) + } + return Xwcrtomb(tls, s, wc, uintptr(0)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state uint32 + +func Xc32rtomb(tls *TLS, s uintptr, c32 Tchar32_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c32=%v ps=%v, (%v:)", tls, s, c32, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcrtomb(tls, s, int32(c32), ps) +} + +func Xmblen(tls *TLS, s uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmbtowc(tls, uintptr(0), s, n) +} + +func Xmbrlen(tls *TLS, s uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v st=%v, (%v:)", tls, s, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if st != 0 { + v1 = st + } else { + v1 = uintptr(unsafe.Pointer(&_internal)) + } + return Xmbrtowc(tls, uintptr(0), s, n, v1) +} + +var _internal uint32 + +func Xmbrtoc16(tls *TLS, pc16 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc16=%v s=%v n=%v ps=%v, (%v:)", tls, pc16, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pending uintptr + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _ = pending, ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state1)) + } + pending = ps + if !(s != 0) { + return Xmbrtoc16(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + /* mbrtowc states for partial UTF-8 characters have the high bit set; + * we use nonzero states without high bit for pending surrogates. */ + if int32(*(*uint32)(unsafe.Pointer(pending))) > 0 { + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*uint32)(unsafe.Pointer(pending))) + } + *(*uint32)(unsafe.Pointer(pending)) = uint32(0) + return uint64(-Int32FromInt32(3)) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) { + if *(*Twchar_t)(unsafe.Pointer(bp)) >= int32(0x10000) { + *(*uint32)(unsafe.Pointer(pending)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))&int32(0x3ff) + int32(0xdc00)) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xd7c0) + *(*Twchar_t)(unsafe.Pointer(bp))>>Int32FromInt32(10) + } + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + return ret +} + +var _internal_state1 uint32 + +func Xmbrtoc32(tls *TLS, pc32 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc32=%v s=%v n=%v ps=%v, (%v:)", tls, pc32, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _ = ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state2)) + } + if !(s != 0) { + return Xmbrtoc32(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) && pc32 != 0 { + *(*Tchar32_t)(unsafe.Pointer(pc32)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + return ret +} + +var _internal_state2 uint32 + +func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N Tsize_t + var c uint32 + var s, v3, v4 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = N, c, s, v1, v2, v3, v4 + s = src + N = n + if !(st != 0) { + st = uintptr(unsafe.Pointer(&_internal_state3)) + } + c = *(*uint32)(unsafe.Pointer(st)) + if !(s != 0) { + if c != 0 { + goto ilseq + } + return uint64(0) + } else { + if !(wc != 0) { + wc = bp + } + } + if !(n != 0) { + return uint64(-Int32FromInt32(2)) + } + if !(c != 0) { + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolUint64(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Uint64FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + n-- + } + if n != 0 { + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + goto loop + loop: + ; + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + goto loop + } + } + *(*uint32)(unsafe.Pointer(st)) = c + return uint64(-Int32FromInt32(2)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state3 uint32 + +func Xmbsinit(tls *TLS, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(st != 0) || !(*(*uint32)(unsafe.Pointer(st)) != 0)) +} + +func Xmbsnrtowcs(tls *TLS, wcs uintptr, src uintptr, n Tsize_t, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v src=%v n=%v wn=%v st=%v, (%v:)", tls, wcs, src, n, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + var cnt, l, n2, v1 Tsize_t + var tmp_s, ws uintptr + var v2 bool + var v3 uint64 + var _ /* s at bp+1024 */ uintptr + var _ /* wbuf at bp+0 */ [256]Twchar_t + _, _, _, _, _, _, _, _ = cnt, l, n2, tmp_s, ws, v1, v2, v3 + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 1024)) = *(*uintptr)(unsafe.Pointer(src)) + if !(wcs != 0) { + ws = bp + wn = Uint64FromInt64(1024) / Uint64FromInt64(4) + } else { + ws = wcs + } + /* making sure output buffer size is at most n/4 will ensure + * that mbsrtowcs never reads more than n input bytes. thus + * we can use mbsrtowcs as long as it's practical.. */ + for { + if v2 = *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 && wn != 0; v2 { + v1 = n / Uint64FromInt32(4) + n2 = v1 + } + if !(v2 && (v1 >= wn || n2 > uint64(32))) { + break + } + if n2 >= wn { + n2 = wn + } + tmp_s = *(*uintptr)(unsafe.Pointer(bp + 1024)) + l = Xmbsrtowcs(tls, ws, bp+1024, n2, st) + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + wn = uint64(0) + break + } + if ws != bp { + ws += uintptr(l) * 4 + wn -= l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + v3 = n - uint64(int64(*(*uintptr)(unsafe.Pointer(bp + 1024)))-int64(tmp_s)) + } else { + v3 = uint64(0) + } + n = v3 + cnt += l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + for wn != 0 && n != 0 { + l = Xmbrtowc(tls, ws, *(*uintptr)(unsafe.Pointer(bp + 1024)), n, st) + if l+uint64(2) <= uint64(2) { + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + break + } + if !(l != 0) { + *(*uintptr)(unsafe.Pointer(bp + 1024)) = uintptr(0) + break + } + /* have to roll back partial character */ + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + break + } + *(*uintptr)(unsafe.Pointer(bp + 1024)) += uintptr(l) + n -= l + /* safe - this loop runs fewer than sizeof(wbuf)/8 times */ + ws += 4 + wn-- + cnt++ + } + } + if wcs != 0 { + *(*uintptr)(unsafe.Pointer(src)) = *(*uintptr)(unsafe.Pointer(bp + 1024)) + } + return cnt +} + +func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v ws=%v src=%v wn=%v st=%v, (%v:)", tls, ws, src, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 uint32 + var s, v12, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v5, v6 uintptr + var wn0 Tsize_t + var v2 bool + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, s, wn0, v1, v12, v16, v17, v18, v19, v2, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v3, v30, v5, v6 + s = *(*uintptr)(unsafe.Pointer(src)) + wn0 = wn + c = uint32(0) + if v2 = st != 0; v2 { + v1 = *(*uint32)(unsafe.Pointer(st)) + c = v1 + } + if v2 && v1 != 0 { + if ws != 0 { + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + goto resume + } else { + goto resume0 + } + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + if !(ws != 0) { + return Xstrlen(tls, s) + } + for { + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + v5 = s + s++ + c = uint32(*(*uint8)(unsafe.Pointer(v5))) + v6 = ws + ws += 4 + *(*Twchar_t)(unsafe.Pointer(v6)) = Int32FromInt32(0xdfff) & int32(int8(c)) + wn-- + goto _4 + _4: + } + *(*Twchar_t)(unsafe.Pointer(ws)) = 0 + *(*uintptr)(unsafe.Pointer(src)) = uintptr(0) + return wn0 - wn + } + if !!(ws != 0) { + goto _7 + } +_11: + ; + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + s += uintptr(4) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + s++ + wn-- + goto _10 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _9 + } + v12 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v12)))-uint32(0xc2)] + goto resume0 +resume0: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(2) + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(3) + goto _9 + } + s++ + } + } + wn-- + c = uint32(0) + goto _10 +_10: + ; + goto _11 + goto _9 +_9: + ; + goto _8 +_7: + ; +_15: + ; + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for wn >= uint64(5) && !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + v16 = ws + ws += 4 + v17 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v16)) = int32(*(*uint8)(unsafe.Pointer(v17))) + v18 = ws + ws += 4 + v19 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v18)) = int32(*(*uint8)(unsafe.Pointer(v19))) + v20 = ws + ws += 4 + v21 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v20)) = int32(*(*uint8)(unsafe.Pointer(v21))) + v22 = ws + ws += 4 + v23 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v22)) = int32(*(*uint8)(unsafe.Pointer(v23))) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + v24 = ws + ws += 4 + v25 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v24)) = int32(*(*uint8)(unsafe.Pointer(v25))) + wn-- + goto _14 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _13 + } + v26 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v26)))-uint32(0xc2)] + goto resume +resume: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _13 + } + v27 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(2) + goto _13 + } + v28 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(3) + goto _13 + } + v29 = s + s++ + c = c< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _s + return Xmbsrtowcs(tls, ws, bp, wn, uintptr(0)) +} + +func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v, (%v:)", tls, wc, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c uint32 + var s, v3, v4, v5, v6 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _ = c, s, v1, v2, v3, v4, v5, v6 + s = src + if !(s != 0) { + return 0 + } + if !(n != 0) { + goto ilseq + } + if !(wc != 0) { + wc = bp + } + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolInt32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Int32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + /* Avoid excessive checks against n: If shifting the state n-1 + * times does not clear the high bit, then the value of n is + * insufficient to read a character */ + if n < uint64(4) && c<<(uint64(6)*n-uint64(6))&(Uint32FromUint32(1)<>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v5 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v6 = s + s++ + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(c< %v", r) }() + } + var v1 int32 + var v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if !(s != 0) { + return uint64(1) + } + if uint32(wc) < uint32(0x80) { + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) { + if !(uint32(wc)-Uint32FromInt32(0xdf80) < Uint32FromInt32(0x80)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if uint32(wc) < uint32(0x800) { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(0xc0) | wc>>Int32FromInt32(6)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(2) + } else { + if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(int32(0xe0) | wc>>Int32FromInt32(12)) + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(3) + } else { + if uint32(wc)-uint32(0x10000) < uint32(0x100000) { + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(int32(0xf0) | wc>>Int32FromInt32(18)) + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(int32(0x80) | wc>>Int32FromInt32(12)&int32(0x3f)) + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(4) + } + } + } + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +func Xwcsnrtombs(tls *TLS, dst uintptr, wcs uintptr, wn Tsize_t, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dst=%v wcs=%v wn=%v n=%v st=%v, (%v:)", tls, dst, wcs, wn, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt, l Tsize_t + var ws, v1 uintptr + var _ /* tmp at bp+0 */ [4]uint8 + _, _, _, _ = cnt, l, ws, v1 + ws = *(*uintptr)(unsafe.Pointer(wcs)) + cnt = uint64(0) + if !(dst != 0) { + n = uint64(0) + } + for ws != 0 && wn != 0 { + if n < uint64(MB_LEN_MAX) { + v1 = bp + } else { + v1 = dst + } + l = Xwcrtomb(tls, v1, *(*Twchar_t)(unsafe.Pointer(ws)), uintptr(0)) + if l == uint64(-Int32FromInt32(1)) { + cnt = uint64(-Int32FromInt32(1)) + break + } + if dst != 0 { + if n < uint64(MB_LEN_MAX) { + if l > n { + break + } + Xmemcpy(tls, dst, bp, l) + } + dst += uintptr(l) + n -= l + } + if !(*(*Twchar_t)(unsafe.Pointer(ws)) != 0) { + ws = uintptr(0) + break + } + ws += 4 + wn-- + cnt += l + } + if dst != 0 { + *(*uintptr)(unsafe.Pointer(wcs)) = ws + } + return cnt +} + +func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N, l Tsize_t + var ws2, v2, v3 uintptr + var _ /* buf at bp+0 */ [4]uint8 + _, _, _, _, _ = N, l, ws2, v2, v3 + N = n + if !(s != 0) { + n = uint64(0) + ws2 = *(*uintptr)(unsafe.Pointer(ws)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(ws2)) != 0) { + break + } + if uint32(*(*Twchar_t)(unsafe.Pointer(ws2))) >= uint32(0x80) { + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(ws2)), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + n += l + } else { + n++ + } + goto _1 + _1: + ; + ws2 += 4 + } + return n + } + for n >= uint64(4) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + s += uintptr(l) + n -= l + } else { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + for n != 0 { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + if l > n { + return N - n + } + Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + s += uintptr(l) + n -= l + } else { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + return N +} + +func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = ws + return Xwcsrtombs(tls, s, bp, n, uintptr(0)) +} + +func Xwctob(tls *TLS, c Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if c < uint32(128) { + return int32(c) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) && c-uint32(0xdf80) < uint32(0x80) { + return int32(uint8(c)) + } + return -int32(1) +} + +func Xwctomb(tls *TLS, s uintptr, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v wc=%v, (%v:)", tls, s, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(s != 0) { + return 0 + } + return int32(Xwcrtomb(tls, s, wc, uintptr(0))) +} + +func Xaccept(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_accept) + _ = int32(__SC_accept) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +type Tucred = struct { + Fpid Tpid_t + Fuid Tuid_t + Fgid Tgid_t +} + +type Tmmsghdr = struct { + Fmsg_hdr Tmsghdr + Fmsg_len uint32 +} + +func Xaccept4(tls *TLS, fd int32, addr uintptr, len1 uintptr, flg int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v flg=%v, (%v:)", tls, fd, addr, len1, flg, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var ret, v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _ = r, ret, v1, v2, v3, v4, v5, v6, v7, v8 + if !(flg != 0) { + return Xaccept(tls, fd, addr, len1) + } + v1 = int32(SYS_accept4) + _ = int32(__SC_accept4) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(flg) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + ret = int32(X__syscall_ret(tls, uint64(v8))) + if ret >= 0 || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return ret + } + if flg & ^(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + ret = Xaccept(tls, fd, addr, len1) + if ret < 0 { + return ret + } + if flg&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flg&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return ret +} + +func Xbind(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_bind) + _ = int32(__SC_bind) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +func Xconnect(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_connect) + _ = int32(__SC_connect) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +const ADD = 0 +const C_ANY = 0 +const C_CHAOS = 0 +const C_HS = 0 +const C_IN = 0 +const C_NONE = 0 +const DELETE = 0 +const FORMERR = 0 +const GETLONG = 0 +const GETSHORT = 0 +const HFIXEDSZ = 12 +const IN6ADDRSZ = 16 +const INADDRSZ = 4 +const INDIR_MASK = 192 +const INET6_ADDRSTRLEN = 46 +const INET_ADDRSTRLEN = 16 +const INT16SZ = 2 +const INT32SZ = 4 +const INT8SZ = 1 +const IN_CLASSA_HOST = 16777215 +const IN_CLASSA_MAX = 128 +const IN_CLASSA_NET = 4278190080 +const IN_CLASSA_NSHIFT = 24 +const IN_CLASSB_HOST = 65535 +const IN_CLASSB_MAX = 65536 +const IN_CLASSB_NET = 4294901760 +const IN_CLASSB_NSHIFT = 16 +const IN_CLASSC_HOST = 255 +const IN_CLASSC_NET = 4294967040 +const IN_CLASSC_NSHIFT = 8 +const IN_LOOPBACKNET = 127 +const IPPORT_RESERVED = 1024 +const IPPROTO_AH = 51 +const IPPROTO_BEETPH = 94 +const IPPROTO_COMP = 108 +const IPPROTO_DCCP = 33 +const IPPROTO_DSTOPTS = 60 +const IPPROTO_EGP = 8 +const IPPROTO_ENCAP = 98 +const IPPROTO_ESP = 50 +const IPPROTO_ETHERNET = 143 +const IPPROTO_FRAGMENT = 44 +const IPPROTO_GRE = 47 +const IPPROTO_HOPOPTS = 0 +const IPPROTO_ICMP = 1 +const IPPROTO_ICMPV6 = 58 +const IPPROTO_IDP = 22 +const IPPROTO_IGMP = 2 +const IPPROTO_IP = 0 +const IPPROTO_IPIP = 4 +const IPPROTO_IPV6 = 41 +const IPPROTO_MAX = 263 +const IPPROTO_MH = 135 +const IPPROTO_MPLS = 137 +const IPPROTO_MPTCP = 262 +const IPPROTO_MTP = 92 +const IPPROTO_NONE = 59 +const IPPROTO_PIM = 103 +const IPPROTO_PUP = 12 +const IPPROTO_RAW = 255 +const IPPROTO_ROUTING = 43 +const IPPROTO_RSVP = 46 +const IPPROTO_SCTP = 132 +const IPPROTO_TCP = 6 +const IPPROTO_TP = 29 +const IPPROTO_UDP = 17 +const IPPROTO_UDPLITE = 136 +const IPV6_2292DSTOPTS = 4 +const IPV6_2292HOPLIMIT = 8 +const IPV6_2292HOPOPTS = 3 +const IPV6_2292PKTINFO = 2 +const IPV6_2292PKTOPTIONS = 6 +const IPV6_2292RTHDR = 5 +const IPV6_ADDRFORM = 1 +const IPV6_ADDR_PREFERENCES = 72 +const IPV6_ADD_MEMBERSHIP = 20 +const IPV6_AUTHHDR = 10 +const IPV6_AUTOFLOWLABEL = 70 +const IPV6_CHECKSUM = 7 +const IPV6_DONTFRAG = 62 +const IPV6_DROP_MEMBERSHIP = 21 +const IPV6_DSTOPTS = 59 +const IPV6_FREEBIND = 78 +const IPV6_HDRINCL = 36 +const IPV6_HOPLIMIT = 52 +const IPV6_HOPOPTS = 54 +const IPV6_IPSEC_POLICY = 34 +const IPV6_JOIN_ANYCAST = 27 +const IPV6_JOIN_GROUP = 20 +const IPV6_LEAVE_ANYCAST = 28 +const IPV6_LEAVE_GROUP = 21 +const IPV6_MINHOPCOUNT = 73 +const IPV6_MTU = 24 +const IPV6_MTU_DISCOVER = 23 +const IPV6_MULTICAST_ALL = 29 +const IPV6_MULTICAST_HOPS = 18 +const IPV6_MULTICAST_IF = 17 +const IPV6_MULTICAST_LOOP = 19 +const IPV6_NEXTHOP = 9 +const IPV6_ORIGDSTADDR = 74 +const IPV6_PATHMTU = 61 +const IPV6_PKTINFO = 50 +const IPV6_PMTUDISC_DO = 2 +const IPV6_PMTUDISC_DONT = 0 +const IPV6_PMTUDISC_INTERFACE = 4 +const IPV6_PMTUDISC_OMIT = 5 +const IPV6_PMTUDISC_PROBE = 3 +const IPV6_PMTUDISC_WANT = 1 +const IPV6_PREFER_SRC_CGA = 8 +const IPV6_PREFER_SRC_COA = 4 +const IPV6_PREFER_SRC_HOME = 1024 +const IPV6_PREFER_SRC_NONCGA = 2048 +const IPV6_PREFER_SRC_PUBLIC = 2 +const IPV6_PREFER_SRC_PUBTMP_DEFAULT = 256 +const IPV6_PREFER_SRC_TMP = 1 +const IPV6_RECVDSTOPTS = 58 +const IPV6_RECVERR = 25 +const IPV6_RECVFRAGSIZE = 77 +const IPV6_RECVHOPLIMIT = 51 +const IPV6_RECVHOPOPTS = 53 +const IPV6_RECVORIGDSTADDR = 74 +const IPV6_RECVPATHMTU = 60 +const IPV6_RECVPKTINFO = 49 +const IPV6_RECVRTHDR = 56 +const IPV6_RECVTCLASS = 66 +const IPV6_ROUTER_ALERT = 22 +const IPV6_ROUTER_ALERT_ISOLATE = 30 +const IPV6_RTHDR = 57 +const IPV6_RTHDRDSTOPTS = 55 +const IPV6_RTHDR_LOOSE = 0 +const IPV6_RTHDR_STRICT = 1 +const IPV6_RTHDR_TYPE_0 = 0 +const IPV6_RXDSTOPTS = 59 +const IPV6_RXHOPOPTS = 54 +const IPV6_TCLASS = 67 +const IPV6_TRANSPARENT = 75 +const IPV6_UNICAST_HOPS = 16 +const IPV6_UNICAST_IF = 76 +const IPV6_V6ONLY = 26 +const IPV6_XFRM_POLICY = 35 +const IP_ADD_MEMBERSHIP = 35 +const IP_ADD_SOURCE_MEMBERSHIP = 39 +const IP_BIND_ADDRESS_NO_PORT = 24 +const IP_BLOCK_SOURCE = 38 +const IP_CHECKSUM = 23 +const IP_DEFAULT_MULTICAST_LOOP = 1 +const IP_DEFAULT_MULTICAST_TTL = 1 +const IP_DROP_MEMBERSHIP = 36 +const IP_DROP_SOURCE_MEMBERSHIP = 40 +const IP_FREEBIND = 15 +const IP_HDRINCL = 3 +const IP_IPSEC_POLICY = 16 +const IP_MAX_MEMBERSHIPS = 20 +const IP_MINTTL = 21 +const IP_MSFILTER = 41 +const IP_MTU = 14 +const IP_MTU_DISCOVER = 10 +const IP_MULTICAST_ALL = 49 +const IP_MULTICAST_IF = 32 +const IP_MULTICAST_LOOP = 34 +const IP_MULTICAST_TTL = 33 +const IP_NODEFRAG = 22 +const IP_OPTIONS = 4 +const IP_ORIGDSTADDR = 20 +const IP_PASSSEC = 18 +const IP_PKTINFO = 8 +const IP_PKTOPTIONS = 9 +const IP_PMTUDISC = 10 +const IP_PMTUDISC_DO = 2 +const IP_PMTUDISC_DONT = 0 +const IP_PMTUDISC_INTERFACE = 4 +const IP_PMTUDISC_OMIT = 5 +const IP_PMTUDISC_PROBE = 3 +const IP_PMTUDISC_WANT = 1 +const IP_RECVERR = 11 +const IP_RECVERR_RFC4884 = 26 +const IP_RECVFRAGSIZE = 25 +const IP_RECVOPTS = 6 +const IP_RECVORIGDSTADDR = 20 +const IP_RECVRETOPTS = 7 +const IP_RECVTOS = 13 +const IP_RECVTTL = 12 +const IP_RETOPTS = 7 +const IP_ROUTER_ALERT = 5 +const IP_TOS = 1 +const IP_TRANSPARENT = 19 +const IP_TTL = 2 +const IP_UNBLOCK_SOURCE = 37 +const IP_UNICAST_IF = 50 +const IP_XFRM_POLICY = 17 +const IQUERY = 0 +const LOCALDOMAINPARTS = 2 +const MAXCDNAME = 255 +const MAXDFLSRCH = 3 +const MAXDNAME = 1025 +const MAXDNSRCH = 6 +const MAXLABEL = 63 +const MAXNS = 3 +const MAXRESOLVSORT = 10 +const NAMESERVER_PORT = 53 +const NOERROR = 0 +const NOTAUTH = 0 +const NOTIMP = 0 +const NOTZONE = 0 +const NS_ALG_DH = 2 +const NS_ALG_DSA = 3 +const NS_ALG_DSS = 3 +const NS_ALG_EXPIRE_ONLY = 253 +const NS_ALG_MD5RSA = 1 +const NS_ALG_PRIVATE_OID = 254 +const NS_CMPRSFLGS = 192 +const NS_DEFAULTPORT = 53 +const NS_DSA_MAX_BYTES = 405 +const NS_DSA_MIN_SIZE = 213 +const NS_DSA_SIG_SIZE = 41 +const NS_HFIXEDSZ = 12 +const NS_IN6ADDRSZ = 16 +const NS_INADDRSZ = 4 +const NS_INT16SZ = 2 +const NS_INT32SZ = 4 +const NS_INT8SZ = 1 +const NS_KEY_EXTENDED_FLAGS = 4096 +const NS_KEY_NAME_ENTITY = 512 +const NS_KEY_NAME_RESERVED = 768 +const NS_KEY_NAME_TYPE = 768 +const NS_KEY_NAME_USER = 0 +const NS_KEY_NAME_ZONE = 256 +const NS_KEY_NO_AUTH = 32768 +const NS_KEY_NO_CONF = 16384 +const NS_KEY_PROT_ANY = 255 +const NS_KEY_PROT_DNSSEC = 3 +const NS_KEY_PROT_EMAIL = 2 +const NS_KEY_PROT_IPSEC = 4 +const NS_KEY_PROT_TLS = 1 +const NS_KEY_RESERVED10 = 32 +const NS_KEY_RESERVED11 = 16 +const NS_KEY_RESERVED2 = 8192 +const NS_KEY_RESERVED4 = 2048 +const NS_KEY_RESERVED5 = 1024 +const NS_KEY_RESERVED8 = 128 +const NS_KEY_RESERVED9 = 64 +const NS_KEY_RESERVED_BITMASK = 11504 +const NS_KEY_RESERVED_BITMASK2 = 65535 +const NS_KEY_SIGNATORYMASK = 15 +const NS_KEY_TYPEMASK = 49152 +const NS_KEY_TYPE_AUTH_CONF = 0 +const NS_KEY_TYPE_AUTH_ONLY = 16384 +const NS_KEY_TYPE_CONF_ONLY = 32768 +const NS_KEY_TYPE_NO_KEY = 49152 +const NS_MAXCDNAME = 255 +const NS_MAXDNAME = 1025 +const NS_MAXLABEL = 63 +const NS_MAXMSG = 65535 +const NS_MD5RSA_MAX_BASE64 = 10928 +const NS_MD5RSA_MAX_BITS = 4096 +const NS_MD5RSA_MAX_BYTES = 8195 +const NS_MD5RSA_MAX_SIZE = 512 +const NS_MD5RSA_MIN_BITS = 512 +const NS_MD5RSA_MIN_SIZE = 64 +const NS_NOTIFY_OP = 0 +const NS_NXT_BITS = 8 +const NS_NXT_MAX = 127 +const NS_OPT_DNSSEC_OK = 32768 +const NS_OPT_NSID = 3 +const NS_PACKETSZ = 512 +const NS_QFIXEDSZ = 4 +const NS_RRFIXEDSZ = 10 +const NS_SIG_ALG = 2 +const NS_SIG_EXPIR = 8 +const NS_SIG_FOOT = 16 +const NS_SIG_LABELS = 3 +const NS_SIG_OTTL = 4 +const NS_SIG_SIGNED = 12 +const NS_SIG_SIGNER = 18 +const NS_SIG_TYPE = 0 +const NS_TSIG_ALG_HMAC_MD5 = "HMAC-MD5.SIG-ALG.REG.INT" +const NS_TSIG_ERROR_FORMERR = -12 +const NS_TSIG_ERROR_NO_SPACE = -11 +const NS_TSIG_ERROR_NO_TSIG = -10 +const NS_TSIG_FUDGE = 300 +const NS_TSIG_TCP_COUNT = 100 +const NS_UPDATE_OP = 0 +const NXDOMAIN = 0 +const NXRRSET = 0 +const PACKETSZ = 512 +const PRIX16 = "X" +const PRIX32 = "X" +const PRIX8 = "X" +const PRIXFAST16 = "X" +const PRIXFAST32 = "X" +const PRIXFAST8 = "X" +const PRIXLEAST16 = "X" +const PRIXLEAST32 = "X" +const PRIXLEAST8 = "X" +const PRId16 = "d" +const PRId32 = "d" +const PRId8 = "d" +const PRIdFAST16 = "d" +const PRIdFAST32 = "d" +const PRIdFAST8 = "d" +const PRIdLEAST16 = "d" +const PRIdLEAST32 = "d" +const PRIdLEAST8 = "d" +const PRIi16 = "i" +const PRIi32 = "i" +const PRIi8 = "i" +const PRIiFAST16 = "i" +const PRIiFAST32 = "i" +const PRIiFAST8 = "i" +const PRIiLEAST16 = "i" +const PRIiLEAST32 = "i" +const PRIiLEAST8 = "i" +const PRIo16 = "o" +const PRIo32 = "o" +const PRIo8 = "o" +const PRIoFAST16 = "o" +const PRIoFAST32 = "o" +const PRIoFAST8 = "o" +const PRIoLEAST16 = "o" +const PRIoLEAST32 = "o" +const PRIoLEAST8 = "o" +const PRIu16 = "u" +const PRIu32 = "u" +const PRIu8 = "u" +const PRIuFAST16 = "u" +const PRIuFAST32 = "u" +const PRIuFAST8 = "u" +const PRIuLEAST16 = "u" +const PRIuLEAST32 = "u" +const PRIuLEAST8 = "u" +const PRIx16 = "x" +const PRIx32 = "x" +const PRIx8 = "x" +const PRIxFAST16 = "x" +const PRIxFAST32 = "x" +const PRIxFAST8 = "x" +const PRIxLEAST16 = "x" +const PRIxLEAST32 = "x" +const PRIxLEAST8 = "x" +const PUTLONG = 0 +const PUTSHORT = 0 +const QFIXEDSZ = 4 +const QUERY = 0 +const REFUSED = 0 +const RES_AAONLY = 4 +const RES_BLAST = 131072 +const RES_DEBUG = 2 +const RES_DEFAULT = 524992 +const RES_DEFNAMES = 128 +const RES_DFLRETRY = 2 +const RES_DNSRCH = 512 +const RES_EXHAUSTIVE = 1 +const RES_F_CONN = 2 +const RES_F_EDNS0ERR = 4 +const RES_F_VC = 1 +const RES_IGNTC = 32 +const RES_INIT = 1 +const RES_INSECURE1 = 1024 +const RES_INSECURE2 = 2048 +const RES_KEEPTSIG = 65536 +const RES_MAXNDOTS = 15 +const RES_MAXRETRANS = 30 +const RES_MAXRETRY = 5 +const RES_MAXTIME = 65535 +const RES_NOALIASES = 4096 +const RES_NOCHECKNAME = 32768 +const RES_NOIP6DOTINT = 524288 +const RES_PRF_ADD = 128 +const RES_PRF_ANS = 32 +const RES_PRF_AUTH = 64 +const RES_PRF_CLASS = 4 +const RES_PRF_CMD = 8 +const RES_PRF_HEAD1 = 256 +const RES_PRF_HEAD2 = 512 +const RES_PRF_HEADX = 2048 +const RES_PRF_INIT = 16384 +const RES_PRF_QUERY = 4096 +const RES_PRF_QUES = 16 +const RES_PRF_REPLY = 8192 +const RES_PRF_STATS = 1 +const RES_PRF_TTLID = 1024 +const RES_PRF_UPDATE = 2 +const RES_PRIMARY = 16 +const RES_RECURSE = 64 +const RES_ROTATE = 16384 +const RES_SNGLKUP = 2097152 +const RES_SNGLKUPREOP = 4194304 +const RES_STAYOPEN = 256 +const RES_TIMEOUT = 5 +const RES_USEBSTRING = 262144 +const RES_USEVC = 8 +const RES_USE_DNSSEC = 8388608 +const RES_USE_EDNS0 = 1048576 +const RES_USE_INET6 = 8192 +const RRFIXEDSZ = 10 +const SCNd16 = "hd" +const SCNd32 = "d" +const SCNd8 = "hhd" +const SCNdFAST16 = "d" +const SCNdFAST32 = "d" +const SCNdFAST8 = "hhd" +const SCNdLEAST16 = "hd" +const SCNdLEAST32 = "d" +const SCNdLEAST8 = "hhd" +const SCNi16 = "hi" +const SCNi32 = "i" +const SCNi8 = "hhi" +const SCNiFAST16 = "i" +const SCNiFAST32 = "i" +const SCNiFAST8 = "hhi" +const SCNiLEAST16 = "hi" +const SCNiLEAST32 = "i" +const SCNiLEAST8 = "hhi" +const SCNo16 = "ho" +const SCNo32 = "o" +const SCNo8 = "hho" +const SCNoFAST16 = "o" +const SCNoFAST32 = "o" +const SCNoFAST8 = "hho" +const SCNoLEAST16 = "ho" +const SCNoLEAST32 = "o" +const SCNoLEAST8 = "hho" +const SCNu16 = "hu" +const SCNu32 = "u" +const SCNu8 = "hhu" +const SCNuFAST16 = "u" +const SCNuFAST32 = "u" +const SCNuFAST8 = "hhu" +const SCNuLEAST16 = "hu" +const SCNuLEAST32 = "u" +const SCNuLEAST8 = "hhu" +const SCNx16 = "hx" +const SCNx32 = "x" +const SCNx8 = "hhx" +const SCNxFAST16 = "x" +const SCNxFAST32 = "x" +const SCNxFAST8 = "hhx" +const SCNxLEAST16 = "hx" +const SCNxLEAST32 = "x" +const SCNxLEAST8 = "hhx" +const SERVFAIL = 0 +const STATUS = 0 +const S_ADDT = 0 +const S_PREREQ = 0 +const S_UPDATE = 0 +const S_ZONE = 0 +const T_A = 0 +const T_A6 = 0 +const T_AAAA = 0 +const T_AFSDB = 0 +const T_ANY = 0 +const T_ATMA = 0 +const T_AVC = 0 +const T_AXFR = 0 +const T_CAA = 0 +const T_CDNSKEY = 0 +const T_CDS = 0 +const T_CNAME = 0 +const T_CSYNC = 0 +const T_DHCID = 0 +const T_DLV = 0 +const T_DNAME = 0 +const T_DNSKEY = 0 +const T_DS = 0 +const T_EID = 0 +const T_EUI48 = 0 +const T_EUI64 = 0 +const T_GID = 0 +const T_GPOS = 0 +const T_HINFO = 0 +const T_HIP = 0 +const T_IPSECKEY = 0 +const T_ISDN = 0 +const T_IXFR = 0 +const T_KEY = 0 +const T_L32 = 0 +const T_L64 = 0 +const T_LOC = 0 +const T_LP = 0 +const T_MAILA = 0 +const T_MAILB = 0 +const T_MB = 0 +const T_MD = 0 +const T_MF = 0 +const T_MG = 0 +const T_MINFO = 0 +const T_MR = 0 +const T_MX = 0 +const T_NAPTR = 0 +const T_NID = 0 +const T_NIMLOC = 0 +const T_NINFO = 0 +const T_NS = 0 +const T_NSAP = 0 +const T_NSAP_PTR = 0 +const T_NSEC = 0 +const T_NSEC3 = 0 +const T_NSEC3PARAM = 0 +const T_NULL = 0 +const T_NXT = 0 +const T_OPENPGPKEY = 0 +const T_PTR = 0 +const T_PX = 0 +const T_RKEY = 0 +const T_RP = 0 +const T_RRSIG = 0 +const T_RT = 0 +const T_SIG = 0 +const T_SMIMEA = 0 +const T_SOA = 0 +const T_SPF = 0 +const T_SRV = 0 +const T_SSHFP = 0 +const T_TA = 0 +const T_TALINK = 0 +const T_TKEY = 0 +const T_TLSA = 0 +const T_TSIG = 0 +const T_TXT = 0 +const T_UID = 0 +const T_UINFO = 0 +const T_UNSPEC = 0 +const T_URI = 0 +const T_WKS = 0 +const T_X25 = 0 +const YXDOMAIN = 0 +const YXRRSET = 0 +const _PATH_RESCONF = "/etc/resolv.conf" +const __BIND = 19950621 +const __NAMESER = 19991006 +const __PRI64 = "l" +const __PRIPTR = "l" +const __RES = 19960801 +const __UAPI_DEF_IN6_ADDR = 0 +const __UAPI_DEF_IN6_ADDR_ALT = 0 +const __UAPI_DEF_IN6_PKTINFO = 0 +const __UAPI_DEF_IN_ADDR = 0 +const __UAPI_DEF_IN_CLASS = 0 +const __UAPI_DEF_IN_IPPROTO = 0 +const __UAPI_DEF_IN_PKTINFO = 0 +const __UAPI_DEF_IP6_MTUINFO = 0 +const __UAPI_DEF_IPPROTO_V6 = 0 +const __UAPI_DEF_IPV6_MREQ = 0 +const __UAPI_DEF_IPV6_OPTIONS = 0 +const __UAPI_DEF_IP_MREQ = 0 +const __UAPI_DEF_SOCKADDR_IN = 0 +const __UAPI_DEF_SOCKADDR_IN6 = 0 +const _res = 0 + +type Tns_sect = int32 + +type ___ns_sect = int32 + +const _ns_s_qd = 0 +const _ns_s_zn = 0 +const _ns_s_an = 1 +const _ns_s_pr = 1 +const _ns_s_ns = 2 +const _ns_s_ud = 2 +const _ns_s_ar = 3 +const _ns_s_max = 4 + +type Tns_msg = struct { + F_msg uintptr + F_eom uintptr + F_id Tuint16_t + F_flags Tuint16_t + F_counts [4]Tuint16_t + F_sections [4]uintptr + F_sect Tns_sect + F_rrnum int32 + F_msg_ptr uintptr +} + +type t__ns_msg = Tns_msg + +type T_ns_flagdata = struct { + Fmask int32 + Fshift int32 +} + +type Tns_rr = struct { + Fname [1025]uint8 + Ftype1 Tuint16_t + Frr_class Tuint16_t + Fttl Tuint32_t + Frdlength Tuint16_t + Frdata uintptr +} + +type t__ns_rr = Tns_rr + +type Tns_flag = int32 + +type ___ns_flag = int32 + +const _ns_f_qr = 0 +const _ns_f_opcode = 1 +const _ns_f_aa = 2 +const _ns_f_tc = 3 +const _ns_f_rd = 4 +const _ns_f_ra = 5 +const _ns_f_z = 6 +const _ns_f_ad = 7 +const _ns_f_cd = 8 +const _ns_f_rcode = 9 +const _ns_f_max = 10 + +type Tns_opcode = int32 + +type ___ns_opcode = int32 + +const _ns_o_query = 0 +const _ns_o_iquery = 1 +const _ns_o_status = 2 +const _ns_o_notify = 4 +const _ns_o_update = 5 +const _ns_o_max = 6 + +type Tns_rcode = int32 + +type ___ns_rcode = int32 + +const _ns_r_noerror = 0 +const _ns_r_formerr = 1 +const _ns_r_servfail = 2 +const _ns_r_nxdomain = 3 +const _ns_r_notimpl = 4 +const _ns_r_refused = 5 +const _ns_r_yxdomain = 6 +const _ns_r_yxrrset = 7 +const _ns_r_nxrrset = 8 +const _ns_r_notauth = 9 +const _ns_r_notzone = 10 +const _ns_r_max = 11 +const _ns_r_badvers = 16 +const _ns_r_badsig = 16 +const _ns_r_badkey = 17 +const _ns_r_badtime = 18 + +type Tns_update_operation = int32 + +type ___ns_update_operation = int32 + +const _ns_uop_delete = 0 +const _ns_uop_add = 1 +const _ns_uop_max = 2 + +type Tns_tsig_key1 = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tsig_key = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tcp_tsig_state1 = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_tcp_tsig_state = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_type = int32 + +type ___ns_type = int32 + +const _ns_t_invalid = 0 +const _ns_t_a = 1 +const _ns_t_ns = 2 +const _ns_t_md = 3 +const _ns_t_mf = 4 +const _ns_t_cname = 5 +const _ns_t_soa = 6 +const _ns_t_mb = 7 +const _ns_t_mg = 8 +const _ns_t_mr = 9 +const _ns_t_null = 10 +const _ns_t_wks = 11 +const _ns_t_ptr = 12 +const _ns_t_hinfo = 13 +const _ns_t_minfo = 14 +const _ns_t_mx = 15 +const _ns_t_txt = 16 +const _ns_t_rp = 17 +const _ns_t_afsdb = 18 +const _ns_t_x25 = 19 +const _ns_t_isdn = 20 +const _ns_t_rt = 21 +const _ns_t_nsap = 22 +const _ns_t_nsap_ptr = 23 +const _ns_t_sig = 24 +const _ns_t_key = 25 +const _ns_t_px = 26 +const _ns_t_gpos = 27 +const _ns_t_aaaa = 28 +const _ns_t_loc = 29 +const _ns_t_nxt = 30 +const _ns_t_eid = 31 +const _ns_t_nimloc = 32 +const _ns_t_srv = 33 +const _ns_t_atma = 34 +const _ns_t_naptr = 35 +const _ns_t_kx = 36 +const _ns_t_cert = 37 +const _ns_t_a6 = 38 +const _ns_t_dname = 39 +const _ns_t_sink = 40 +const _ns_t_opt = 41 +const _ns_t_apl = 42 +const _ns_t_ds = 43 +const _ns_t_sshfp = 44 +const _ns_t_ipseckey = 45 +const _ns_t_rrsig = 46 +const _ns_t_nsec = 47 +const _ns_t_dnskey = 48 +const _ns_t_dhcid = 49 +const _ns_t_nsec3 = 50 +const _ns_t_nsec3param = 51 +const _ns_t_tlsa = 52 +const _ns_t_smimea = 53 +const _ns_t_hip = 55 +const _ns_t_ninfo = 56 +const _ns_t_rkey = 57 +const _ns_t_talink = 58 +const _ns_t_cds = 59 +const _ns_t_cdnskey = 60 +const _ns_t_openpgpkey = 61 +const _ns_t_csync = 62 +const _ns_t_spf = 99 +const _ns_t_uinfo = 100 +const _ns_t_uid = 101 +const _ns_t_gid = 102 +const _ns_t_unspec = 103 +const _ns_t_nid = 104 +const _ns_t_l32 = 105 +const _ns_t_l64 = 106 +const _ns_t_lp = 107 +const _ns_t_eui48 = 108 +const _ns_t_eui64 = 109 +const _ns_t_tkey = 249 +const _ns_t_tsig = 250 +const _ns_t_ixfr = 251 +const _ns_t_axfr = 252 +const _ns_t_mailb = 253 +const _ns_t_maila = 254 +const _ns_t_any = 255 +const _ns_t_zxfr = 256 +const _ns_t_uri = 256 +const _ns_t_caa = 257 +const _ns_t_avc = 258 +const _ns_t_ta = 32768 +const _ns_t_dlv = 32769 +const _ns_t_max = 65536 + +type Tns_class = int32 + +type ___ns_class = int32 + +const _ns_c_invalid = 0 +const _ns_c_in = 1 +const _ns_c_2 = 2 +const _ns_c_chaos = 3 +const _ns_c_hs = 4 +const _ns_c_none = 254 +const _ns_c_any = 255 +const _ns_c_max = 65536 + +type Tns_key_types = int32 + +type ___ns_key_types = int32 + +const _ns_kt_rsa = 1 +const _ns_kt_dh = 2 +const _ns_kt_dsa = 3 +const _ns_kt_private = 254 + +type Tns_cert_types = int32 + +type ___ns_cert_types = int32 + +const _cert_t_pkix = 1 +const _cert_t_spki = 2 +const _cert_t_pgp = 3 +const _cert_t_url = 253 +const _cert_t_oid = 254 + +type THEADER = struct { + F__ccgo0 uint32 + F__ccgo4 uint32 + F__ccgo8 uint32 +} + +type Timaxdiv_t = struct { + Fquot Tintmax_t + Frem Tintmax_t +} + +type Tin_port_t = uint16 + +type Tin_addr_t = uint32 + +type Tin_addr = struct { + Fs_addr Tin_addr_t +} + +type Tsockaddr_in = struct { + Fsin_family Tsa_family_t + Fsin_port Tin_port_t + Fsin_addr Tin_addr + Fsin_zero [8]Tuint8_t +} + +type Tin6_addr = struct { + F__in6_union struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + } +} + +type Tsockaddr_in6 = struct { + Fsin6_family Tsa_family_t + Fsin6_port Tin_port_t + Fsin6_flowinfo Tuint32_t + Fsin6_addr Tin6_addr + Fsin6_scope_id Tuint32_t +} + +type Tipv6_mreq = struct { + Fipv6mr_multiaddr Tin6_addr + Fipv6mr_interface uint32 +} + +type Tip_opts = struct { + Fip_dst Tin_addr + Fip_opts [40]uint8 +} + +type Tres_state = uintptr + +type t__res_state = struct { + Fretrans int32 + Fretry int32 + Foptions uint64 + Fnscount int32 + Fnsaddr_list [3]Tsockaddr_in + Fid uint16 + Fdnsrch [7]uintptr + Fdefdname [256]uint8 + Fpfcode uint64 + F__ccgo392 uint32 + Fsort_list [10]struct { + Faddr Tin_addr + Fmask Tuint32_t + } + Fqhook uintptr + Frhook uintptr + Fres_h_errno int32 + F_vcsock int32 + F_flags uint32 + F_u struct { + F_ext [0]struct { + Fnscount Tuint16_t + Fnsmap [3]Tuint16_t + Fnssocks [3]int32 + Fnscount6 Tuint16_t + Fnsinit Tuint16_t + Fnsaddrs [3]uintptr + F_initstamp [2]uint32 + } + Fpad [52]uint8 + F__ccgo_pad2 [4]byte + } +} + +type Tres_sym = struct { + Fnumber int32 + Fname uintptr + Fhumanname uintptr +} + +/* RFC 1035 message compression */ + +// C documentation +// +// /* label start offsets of a compressed domain name s */ +func _getoffs(tls *TLS, offs uintptr, base uintptr, s uintptr) (r int32) { + var i, v2 int32 + _, _ = i, v2 + i = 0 + for { + for int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != 0 { + if int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != int32(0xc0) { + return 0 + } + s = base + uintptr(int32(*(*uint8)(unsafe.Pointer(s)))&Int32FromInt32(0x3f)<= int64(0x4000) { + return 0 + } + v2 = i + i++ + *(*int16)(unsafe.Pointer(offs + uintptr(v2)*2)) = int16(int64(s) - int64(base)) + s += uintptr(int32(*(*uint8)(unsafe.Pointer(s))) + int32(1)) + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* label lengths of an ascii domain name s */ +func _getlens(tls *TLS, lens uintptr, s uintptr, l int32) (r int32) { + var i, j, k, v3, v4 int32 + _, _, _, _, _ = i, j, k, v3, v4 + i = 0 + j = 0 + k = 0 + for { + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-k)-uint32(1) > uint32(62) { + return 0 + } + v3 = i + i++ + *(*uint8)(unsafe.Pointer(lens + uintptr(v3))) = uint8(j - k) + if j == l { + return i + } + j++ + v4 = j + k = v4 + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* longest suffix match of an ascii domain with a compressed domain name dn */ +func _match(tls *TLS, offset uintptr, base uintptr, dn uintptr, end uintptr, lens uintptr, nlen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var l, m, noff, o, v2, v3 int32 + var _ /* offs at bp+0 */ [128]int16 + _, _, _, _, _, _ = l, m, noff, o, v2, v3 + m = 0 + noff = _getoffs(tls, bp, base, dn) + if !(noff != 0) { + return 0 + } + for { + nlen-- + v2 = nlen + l = int32(*(*uint8)(unsafe.Pointer(lens + uintptr(v2)))) + noff-- + v3 = noff + o = int32((*(*[128]int16)(unsafe.Pointer(bp)))[v3]) + end -= uintptr(l) + if l != int32(*(*uint8)(unsafe.Pointer(base + uintptr(o)))) || Xmemcmp(tls, base+uintptr(o)+uintptr(1), end, uint64(l)) != 0 { + return m + } + *(*int32)(unsafe.Pointer(offset)) = o + m += l + if nlen != 0 { + m++ + } + if !(nlen != 0) || !(noff != 0) { + return m + } + end-- + goto _1 + _1: + } + return r +} + +func Xdn_comp(tls *TLS, src uintptr, dst uintptr, space int32, dnptrs uintptr, lastdnptr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v src=%v dst=%v space=%v dnptrs=%v lastdnptr=%v, (%v:)", tls, src, dst, space, dnptrs, lastdnptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var bestlen, bestoff, i, j, m, n, v3, v4, v5, v6, v7 int32 + var end, p, v8 uintptr + var l Tsize_t + var _ /* lens at bp+4 */ [127]uint8 + var _ /* offset at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bestlen, bestoff, end, i, j, l, m, n, p, v3, v4, v5, v6, v7, v8 + m = 0 + bestlen = 0 + l = Xstrnlen(tls, src, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(src + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l > uint64(253) || space <= 0 { + return -int32(1) + } + if !(l != 0) { + *(*uint8)(unsafe.Pointer(dst)) = uint8(0) + return int32(1) + } + end = src + uintptr(l) + n = _getlens(tls, bp+4, src, int32(l)) + if !(n != 0) { + return -int32(1) + } + p = dnptrs + if p != 0 && *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + for { + if !(*(*uintptr)(unsafe.Pointer(p)) != 0) { + break + } + m = _match(tls, bp, *(*uintptr)(unsafe.Pointer(dnptrs)), *(*uintptr)(unsafe.Pointer(p)), end, bp+4, n) + if m > bestlen { + bestlen = m + bestoff = *(*int32)(unsafe.Pointer(bp)) + if uint64(m) == l { + break + } + } + goto _1 + _1: + ; + p += 8 + } + } + /* encode unmatched part */ + if uint64(space) < l-uint64(bestlen)+uint64(2)+BoolUint64(uint64(bestlen-Int32FromInt32(1)) < l-Uint64FromInt32(1)) { + return -int32(1) + } + Xmemcpy(tls, dst+uintptr(1), src, l-uint64(bestlen)) + v3 = Int32FromInt32(0) + j = v3 + i = v3 + for { + if !(uint64(i) < l-uint64(bestlen)) { + break + } + *(*uint8)(unsafe.Pointer(dst + uintptr(i))) = (*(*[127]uint8)(unsafe.Pointer(bp + 4)))[j] + goto _2 + _2: + ; + v4 = j + j++ + i += int32((*(*[127]uint8)(unsafe.Pointer(bp + 4)))[v4]) + int32(1) + } + /* add tail */ + if bestlen != 0 { + v5 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v5))) = uint8(int32(0xc0) | bestoff>>int32(8)) + v6 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v6))) = uint8(bestoff) + } else { + v7 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v7))) = uint8(0) + } + /* save dst pointer */ + if i > int32(2) && lastdnptr != 0 && dnptrs != 0 && *(*uintptr)(unsafe.Pointer(dnptrs)) != 0 { + for *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + } + if p+uintptr(1)*8 < lastdnptr { + v8 = p + p += 8 + *(*uintptr)(unsafe.Pointer(v8)) = dst + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + } + return i +} + +func X__dn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dbegin, dend, p, v3, v4, v6, v7 uintptr + var i, j, len1, v1, v5 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = dbegin, dend, i, j, len1, p, v1, v3, v4, v5, v6, v7 + p = src + dbegin = dest + len1 = -int32(1) + if p == end || space <= 0 { + return -int32(1) + } + if space > int32(254) { + v1 = int32(254) + } else { + v1 = space + } + dend = dest + uintptr(v1) + /* detect reference loop using an iteration counter */ + i = 0 + for { + if !(int64(i) < int64(end)-int64(base)) { + break + } + /* loop invariants: p= int64(end)-int64(base) { + return -int32(1) + } + p = base + uintptr(j) + } else { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + if dest != dbegin { + v3 = dest + dest++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + } + v4 = p + p++ + j = int32(*(*uint8)(unsafe.Pointer(v4))) + if int64(j) >= int64(end)-int64(p) || int64(j) >= int64(dend)-int64(dest) { + return -int32(1) + } + for { + v5 = j + j-- + if !(v5 != 0) { + break + } + v6 = dest + dest++ + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + } + } else { + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + if len1 < 0 { + len1 = int32(int64(p+uintptr(1)) - int64(src)) + } + return len1 + } + } + goto _2 + _2: + ; + i += int32(2) + } + return -int32(1) +} + +func Xdn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dn_expand(tls, base, end, src, dest, space) +} + +func Xdn_skipname(tls *TLS, s uintptr, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v end=%v, (%v:)", tls, s, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = s + for p < end { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + return int32(int64(p) - int64(s) + int64(1)) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) >= int32(192) { + if p+uintptr(1) < end { + return int32(int64(p) - int64(s) + int64(2)) + } else { + break + } + } else { + if int64(end)-int64(p) < int64(int32(*(*uint8)(unsafe.Pointer(p)))+int32(1)) { + break + } else { + p += uintptr(int32(*(*uint8)(unsafe.Pointer(p))) + int32(1)) + } + } + } + } + return -int32(1) +} + +const AI_ADDRCONFIG = 32 +const AI_ALL = 16 +const AI_CANONNAME = 2 +const AI_NUMERICHOST = 4 +const AI_NUMERICSERV = 1024 +const AI_PASSIVE = 1 +const AI_V4MAPPED = 8 +const EAI_AGAIN = -3 +const EAI_BADFLAGS = -1 +const EAI_FAIL = -4 +const EAI_FAMILY = -6 +const EAI_MEMORY = -10 +const EAI_NODATA = -5 +const EAI_NONAME = -2 +const EAI_OVERFLOW = -12 +const EAI_SERVICE = -8 +const EAI_SOCKTYPE = -7 +const EAI_SYSTEM = -11 +const MAXADDRS = 48 +const MAXSERVS = 2 +const NI_DGRAM = 16 +const NI_NAMEREQD = 8 +const NI_NOFQDN = 4 +const NI_NUMERICHOST = 1 +const NI_NUMERICSCOPE = 256 +const NI_NUMERICSERV = 2 + +type Taddrinfo = struct { + Fai_flags int32 + Fai_family int32 + Fai_socktype int32 + Fai_protocol int32 + Fai_addrlen Tsocklen_t + Fai_addr uintptr + Fai_canonname uintptr + Fai_next uintptr +} + +type Tnetent = struct { + Fn_name uintptr + Fn_aliases uintptr + Fn_addrtype int32 + Fn_net Tuint32_t +} + +type Thostent = struct { + Fh_name uintptr + Fh_aliases uintptr + Fh_addrtype int32 + Fh_length int32 + Fh_addr_list uintptr +} + +type Tservent = struct { + Fs_name uintptr + Fs_aliases uintptr + Fs_port int32 + Fs_proto uintptr +} + +type Tprotoent = struct { + Fp_name uintptr + Fp_aliases uintptr + Fp_proto int32 +} + +type Taibuf = struct { + Fai Taddrinfo + Fsa Tsa + Flock [1]int32 + Fslot int16 + Fref int16 +} + +type Taddress = struct { + Ffamily int32 + Fscopeid uint32 + Faddr [16]Tuint8_t + Fsortkey int32 +} + +type Tservice = struct { + Fport Tuint16_t + Fproto uint8 + Fsocktype uint8 +} + +type Tresolvconf = struct { + Fns [3]Taddress + Fnns uint32 + Fattempts uint32 + Fndots uint32 + Ftimeout uint32 +} + +func X__dns_parse(tls *TLS, r uintptr, rlen int32, callback uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v rlen=%v callback=%v ctx=%v, (%v:)", tls, r, rlen, callback, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ancount, len1, qdcount, v1, v2 int32 + var p uintptr + _, _, _, _, _, _ = ancount, len1, p, qdcount, v1, v2 + if rlen < int32(12) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(r + 3)))&int32(15) != 0 { + return 0 + } + p = r + uintptr(12) + qdcount = int32(*(*uint8)(unsafe.Pointer(r + 4)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 5))) + ancount = int32(*(*uint8)(unsafe.Pointer(r + 6)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 7))) + for { + v1 = qdcount + qdcount-- + if !(v1 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(6) { + return -int32(1) + } + p += uintptr(int32(5) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + } + for { + v2 = ancount + ancount-- + if !(v2 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(12) { + return -int32(1) + } + p += uintptr(int32(1) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + len1 = int32(*(*uint8)(unsafe.Pointer(p + 8)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(p + 9))) + if int64(len1+int32(10)) > int64(r+uintptr(rlen))-int64(p) { + return -int32(1) + } + if (*(*func(*TLS, uintptr, int32, uintptr, int32, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{callback})))(tls, ctx, int32(*(*uint8)(unsafe.Pointer(p + 1))), p+uintptr(10), len1, r, rlen) < 0 { + return -int32(1) + } + p += uintptr(int32(10) + len1) + } + return 0 +} + +type Tsa = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte +} + +func Xsethostent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } +} + +func Xgethostent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xendhostent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendnetent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendhostent(tls) +} + +func Xsetnetent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } + Xsethostent(tls, x) +} + +const ARPD_FLUSH = 3 +const ARPD_LOOKUP = 2 +const ARPD_UPDATE = 1 +const ARPHRD_6LOWPAN = 825 +const ARPHRD_ADAPT = 264 +const ARPHRD_APPLETLK = 8 +const ARPHRD_ARCNET = 7 +const ARPHRD_ASH = 781 +const ARPHRD_ATM = 19 +const ARPHRD_AX25 = 3 +const ARPHRD_BIF = 775 +const ARPHRD_CAIF = 822 +const ARPHRD_CAN = 280 +const ARPHRD_CHAOS = 5 +const ARPHRD_CISCO = 513 +const ARPHRD_CSLIP = 257 +const ARPHRD_CSLIP6 = 259 +const ARPHRD_DDCMP = 517 +const ARPHRD_DLCI = 15 +const ARPHRD_ECONET = 782 +const ARPHRD_EETHER = 2 +const ARPHRD_ETHER = 1 +const ARPHRD_EUI64 = 27 +const ARPHRD_FCAL = 785 +const ARPHRD_FCFABRIC = 787 +const ARPHRD_FCPL = 786 +const ARPHRD_FCPP = 784 +const ARPHRD_FDDI = 774 +const ARPHRD_FRAD = 770 +const ARPHRD_HDLC = 513 +const ARPHRD_HIPPI = 780 +const ARPHRD_HWX25 = 272 +const ARPHRD_IEEE1394 = 24 +const ARPHRD_IEEE802 = 6 +const ARPHRD_IEEE80211 = 801 +const ARPHRD_IEEE80211_PRISM = 802 +const ARPHRD_IEEE80211_RADIOTAP = 803 +const ARPHRD_IEEE802154 = 804 +const ARPHRD_IEEE802154_MONITOR = 805 +const ARPHRD_IEEE802_TR = 800 +const ARPHRD_INFINIBAND = 32 +const ARPHRD_IP6GRE = 823 +const ARPHRD_IPDDP = 777 +const ARPHRD_IPGRE = 778 +const ARPHRD_IRDA = 783 +const ARPHRD_LAPB = 516 +const ARPHRD_LOCALTLK = 773 +const ARPHRD_LOOPBACK = 772 +const ARPHRD_METRICOM = 23 +const ARPHRD_NETLINK = 824 +const ARPHRD_NETROM = 0 +const ARPHRD_NONE = 65534 +const ARPHRD_PHONET = 820 +const ARPHRD_PHONET_PIPE = 821 +const ARPHRD_PIMREG = 779 +const ARPHRD_PPP = 512 +const ARPHRD_PRONET = 4 +const ARPHRD_RAWHDLC = 518 +const ARPHRD_RAWIP = 519 +const ARPHRD_ROSE = 270 +const ARPHRD_RSRVD = 260 +const ARPHRD_SIT = 776 +const ARPHRD_SKIP = 771 +const ARPHRD_SLIP = 256 +const ARPHRD_SLIP6 = 258 +const ARPHRD_TUNNEL = 768 +const ARPHRD_TUNNEL6 = 769 +const ARPHRD_VOID = 65535 +const ARPHRD_VSOCKMON = 826 +const ARPHRD_X25 = 271 +const ARPOP_InREPLY = 9 +const ARPOP_InREQUEST = 8 +const ARPOP_NAK = 10 +const ARPOP_REPLY = 2 +const ARPOP_REQUEST = 1 +const ARPOP_RREPLY = 4 +const ARPOP_RREQUEST = 3 +const ATF_COM = 2 +const ATF_DONTPUB = 64 +const ATF_MAGIC = 128 +const ATF_NETMASK = 32 +const ATF_PERM = 4 +const ATF_PUBL = 8 +const ATF_USETRAILERS = 16 +const ETHERMIN = 46 +const ETHERMTU = 1500 +const ETHERTYPE_AARP = 33011 +const ETHERTYPE_ARP = 2054 +const ETHERTYPE_AT = 32923 +const ETHERTYPE_IP = 2048 +const ETHERTYPE_IPV6 = 34525 +const ETHERTYPE_IPX = 33079 +const ETHERTYPE_LOOPBACK = 36864 +const ETHERTYPE_NTRAILER = 16 +const ETHERTYPE_PUP = 512 +const ETHERTYPE_REVARP = 32821 +const ETHERTYPE_SPRITE = 1280 +const ETHERTYPE_TRAIL = 4096 +const ETHERTYPE_VLAN = 33024 +const ETHER_ADDR_LEN = 6 +const ETHER_CRC_LEN = 4 +const ETHER_HDR_LEN = 14 +const ETHER_MAX_LEN = 1518 +const ETHER_MIN_LEN = 64 +const ETHER_TYPE_LEN = 2 +const ETH_ALEN = 6 +const ETH_DATA_LEN = 1500 +const ETH_FCS_LEN = 4 +const ETH_FRAME_LEN = 1514 +const ETH_HLEN = 14 +const ETH_MAX_MTU = 65535 +const ETH_MIN_MTU = 68 +const ETH_P_1588 = 35063 +const ETH_P_8021AD = 34984 +const ETH_P_8021AH = 35047 +const ETH_P_8021Q = 33024 +const ETH_P_80221 = 35095 +const ETH_P_802_2 = 4 +const ETH_P_802_3 = 1 +const ETH_P_802_3_MIN = 1536 +const ETH_P_802_EX1 = 34997 +const ETH_P_AARP = 33011 +const ETH_P_AF_IUCV = 64507 +const ETH_P_ALL = 3 +const ETH_P_AOE = 34978 +const ETH_P_ARCNET = 26 +const ETH_P_ARP = 2054 +const ETH_P_ATALK = 32923 +const ETH_P_ATMFATE = 34948 +const ETH_P_ATMMPOA = 34892 +const ETH_P_AX25 = 2 +const ETH_P_BATMAN = 17157 +const ETH_P_BPQ = 2303 +const ETH_P_CAIF = 247 +const ETH_P_CAN = 12 +const ETH_P_CANFD = 13 +const ETH_P_CFM = 35074 +const ETH_P_CONTROL = 22 +const ETH_P_CUST = 24582 +const ETH_P_DDCMP = 6 +const ETH_P_DEC = 24576 +const ETH_P_DIAG = 24581 +const ETH_P_DNA_DL = 24577 +const ETH_P_DNA_RC = 24578 +const ETH_P_DNA_RT = 24579 +const ETH_P_DSA = 27 +const ETH_P_DSA_8021Q = 56027 +const ETH_P_ECONET = 24 +const ETH_P_EDSA = 56026 +const ETH_P_ERSPAN = 35006 +const ETH_P_ERSPAN2 = 8939 +const ETH_P_FCOE = 35078 +const ETH_P_FIP = 35092 +const ETH_P_HDLC = 25 +const ETH_P_HSR = 35119 +const ETH_P_IBOE = 35093 +const ETH_P_IEEE802154 = 246 +const ETH_P_IEEEPUP = 2560 +const ETH_P_IEEEPUPAT = 2561 +const ETH_P_IFE = 60734 +const ETH_P_IP = 2048 +const ETH_P_IPV6 = 34525 +const ETH_P_IPX = 33079 +const ETH_P_IRDA = 23 +const ETH_P_LAT = 24580 +const ETH_P_LINK_CTL = 34924 +const ETH_P_LLDP = 35020 +const ETH_P_LOCALTALK = 9 +const ETH_P_LOOP = 96 +const ETH_P_LOOPBACK = 36864 +const ETH_P_MACSEC = 35045 +const ETH_P_MAP = 249 +const ETH_P_MOBITEX = 21 +const ETH_P_MPLS_MC = 34888 +const ETH_P_MPLS_UC = 34887 +const ETH_P_MRP = 35043 +const ETH_P_MVRP = 35061 +const ETH_P_NCSI = 35064 +const ETH_P_NSH = 35151 +const ETH_P_PAE = 34958 +const ETH_P_PAUSE = 34824 +const ETH_P_PHONET = 245 +const ETH_P_PPPTALK = 16 +const ETH_P_PPP_DISC = 34915 +const ETH_P_PPP_MP = 8 +const ETH_P_PPP_SES = 34916 +const ETH_P_PREAUTH = 35015 +const ETH_P_PRP = 35067 +const ETH_P_PUP = 512 +const ETH_P_PUPAT = 513 +const ETH_P_QINQ1 = 37120 +const ETH_P_QINQ2 = 37376 +const ETH_P_QINQ3 = 37632 +const ETH_P_RARP = 32821 +const ETH_P_SCA = 24583 +const ETH_P_SLOW = 34825 +const ETH_P_SNAP = 5 +const ETH_P_TDLS = 35085 +const ETH_P_TEB = 25944 +const ETH_P_TIPC = 35018 +const ETH_P_TRAILER = 28 +const ETH_P_TR_802_2 = 17 +const ETH_P_TSN = 8944 +const ETH_P_WAN_PPP = 7 +const ETH_P_WCCP = 34878 +const ETH_P_X25 = 2053 +const ETH_P_XDSA = 248 +const ETH_TLEN = 2 +const ETH_ZLEN = 60 +const MAX_ADDR_LEN = 7 +const __UAPI_DEF_ETHHDR = 0 + +type Tethhdr = struct { + Fh_dest [6]Tuint8_t + Fh_source [6]Tuint8_t + Fh_proto Tuint16_t +} + +type Tether_addr = struct { + Fether_addr_octet [6]Tuint8_t +} + +type Tether_header = struct { + Fether_dhost [6]Tuint8_t + Fether_shost [6]Tuint8_t + Fether_type Tuint16_t +} + +type Tarphdr = struct { + Far_hrd Tuint16_t + Far_pro Tuint16_t + Far_hln Tuint8_t + Far_pln Tuint8_t + Far_op Tuint16_t +} + +type Tarpreq = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr + Farp_dev [16]uint8 +} + +type Tarpreq_old = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr +} + +type Tarpd_request = struct { + Freq uint16 + Fip Tuint32_t + Fdev uint64 + Fstamp uint64 + Fupdated uint64 + Fha [7]uint8 +} + +type Tether_arp = struct { + Fea_hdr Tarphdr + Farp_sha [6]Tuint8_t + Farp_spa [4]Tuint8_t + Farp_tha [6]Tuint8_t + Farp_tpa [4]Tuint8_t +} + +func Xether_aton_r(tls *TLS, x uintptr, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v p_a=%v, (%v:)", tls, x, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var n uint64 + var _ /* a at bp+0 */ Tether_addr + var _ /* y at bp+8 */ uintptr + _, _ = ii, n + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii != 0 { + if int32(*(*uint8)(unsafe.Pointer(x))) != int32(':') { + return uintptr(0) + } else { + x++ + } + } + n = Xstrtoul(tls, x, bp+8, int32(16)) + x = *(*uintptr)(unsafe.Pointer(bp + 8)) + if n > uint64(0xFF) { + return uintptr(0) + } /* bad byte */ + *(*Tuint8_t)(unsafe.Pointer(bp + uintptr(ii))) = uint8(n) + goto _1 + _1: + ; + ii++ + } + if int32(*(*uint8)(unsafe.Pointer(x))) != 0 { + return uintptr(0) + } /* bad format */ + *(*Tether_addr)(unsafe.Pointer(p_a)) = *(*Tether_addr)(unsafe.Pointer(bp)) + return p_a +} + +func Xether_aton(tls *TLS, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_aton_r(tls, x, uintptr(unsafe.Pointer(&_a))) +} + +var _a Tether_addr + +func Xether_ntoa_r(tls *TLS, p_a uintptr, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v x=%v, (%v:)", tls, p_a, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var y, v2 uintptr + _, _, _ = ii, y, v2 + y = x + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii == 0 { + v2 = __ccgo_ts + 1010 + } else { + v2 = __ccgo_ts + 1015 + } + x += uintptr(Xsprintf(tls, x, v2, VaList(bp+8, int32(*(*Tuint8_t)(unsafe.Pointer(p_a + uintptr(ii))))))) + goto _1 + _1: + ; + ii++ + } + return y +} + +func Xether_ntoa(tls *TLS, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v, (%v:)", tls, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_ntoa_r(tls, p_a, uintptr(unsafe.Pointer(&_x))) +} + +var _x [18]uint8 + +func Xether_line(tls *TLS, l uintptr, e uintptr, hostname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v l=%v e=%v hostname=%v, (%v:)", tls, l, e, hostname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_ntohost(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_hostton(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xfreeaddrinfo(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + var b, p2 uintptr + var cnt Tsize_t + _, _, _ = b, cnt, p2 + cnt = uint64(1) + for { + if !((*Taddrinfo)(unsafe.Pointer(p)).Fai_next != 0) { + break + } + goto _1 + _1: + ; + cnt++ + p = (*Taddrinfo)(unsafe.Pointer(p)).Fai_next + } + b = p - uintptr(uint64(UintptrFromInt32(0))) + b -= uintptr((*Taibuf)(unsafe.Pointer(b)).Fslot) * 88 + ___lock(tls, b+76) + p2 = b + 82 + *(*int16)(unsafe.Pointer(p2)) = int16(uint64(*(*int16)(unsafe.Pointer(p2))) - cnt) + if !(*(*int16)(unsafe.Pointer(p2)) != 0) { + Xfree(tls, b) + } else { + ___unlock(tls, b+76) + } +} + +var _msgs = [252]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'f', 'l', 'a', 'g', 's', 0, 'N', 'a', 'm', 'e', ' ', 'd', 'o', 'e', 's', ' ', 'n', 'o', 't', ' ', 'r', 'e', 's', 'o', 'l', 'v', 'e', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'a', 'm', 'e', ' ', 'h', 'a', 's', ' ', 'n', 'o', ' ', 'u', 's', 'a', 'b', 'l', 'e', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'o', 'r', ' ', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'l', 'e', 'n', 'g', 't', 'h', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'S', 'y', 's', 't', 'e', 'm', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xgai_strerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs)) + ecode++ + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode++ + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1616) + defer tls.Free(1616) + var canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, proto, r, s, saved_errno, socktype, v3 int32 + var out, outcanon uintptr + var ta [2]uintptr + var tf [2]int32 + var tl [2]Tsocklen_t + var v5 uint64 + var _ /* addrs at bp+8 */ [48]Taddress + var _ /* canon at bp+1352 */ [256]uint8 + var _ /* cs at bp+1608 */ int32 + var _ /* ports at bp+0 */ [2]Tservice + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, out, outcanon, proto, r, s, saved_errno, socktype, ta, tf, tl, v3, v5 + family = PF_UNSPEC + flags = 0 + proto = 0 + socktype = 0 + no_family = 0 + if !(host != 0) && !(serv != 0) { + return -int32(2) + } + if hint != 0 { + family = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_family + flags = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_flags + proto = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_protocol + socktype = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_socktype + mask = Int32FromInt32(AI_PASSIVE) | Int32FromInt32(AI_CANONNAME) | Int32FromInt32(AI_NUMERICHOST) | Int32FromInt32(AI_V4MAPPED) | Int32FromInt32(AI_ALL) | Int32FromInt32(AI_ADDRCONFIG) | Int32FromInt32(AI_NUMERICSERV) + if flags&mask != flags { + return -int32(1) + } + switch family { + case int32(PF_INET): + fallthrough + case int32(PF_INET6): + fallthrough + case PF_UNSPEC: + default: + return -int32(6) + } + } + if flags&int32(AI_ADDRCONFIG) != 0 { + tf = [2]int32{ + 0: int32(PF_INET), + 1: int32(PF_INET6), + } + ta = [2]uintptr{ + 0: uintptr(unsafe.Pointer(&_lo4)), + 1: uintptr(unsafe.Pointer(&_lo6)), + } + tl = [2]Tsocklen_t{ + 0: uint32(16), + 1: uint32(28), + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family == tf[int32(1)-i] { + goto _1 + } + s = Xsocket(tls, tf[i], Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_DGRAM), int32(IPPROTO_UDP)) + if s >= 0 { + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+1608) + r = Xconnect(tls, s, ta[i], tl[i]) + saved_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 1608)), uintptr(0)) + Xclose(tls, s) + if !(r != 0) { + goto _1 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = saved_errno + } + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EADDRNOTAVAIL): + fallthrough + case int32(EAFNOSUPPORT): + fallthrough + case int32(EHOSTUNREACH): + fallthrough + case int32(ENETDOWN): + fallthrough + case int32(ENETUNREACH): + default: + return -int32(11) + } + if family == tf[i] { + no_family = int32(1) + } + family = tf[int32(1)-i] + goto _1 + _1: + ; + i++ + } + } + nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) + if nservs < 0 { + return nservs + } + naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) + if naddrs < 0 { + return naddrs + } + if no_family != 0 { + return -int32(5) + } + nais = nservs * naddrs + canon_len = int32(Xstrlen(tls, bp+1352)) + out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(88)+uint64(canon_len)+uint64(1)) + if !(out != 0) { + return -int32(10) + } + if canon_len != 0 { + outcanon = out + uintptr(nais)*88 + Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+int32(1))) + } else { + outcanon = uintptr(0) + } + v3 = Int32FromInt32(0) + i = v3 + k = v3 + for { + if !(i < naddrs) { + break + } + j = 0 + for { + if !(j < nservs) { + break + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fslot = int16(k) + if (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily == int32(PF_INET) { + v5 = uint64(16) + } else { + v5 = uint64(28) + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fai = Taddrinfo{ + Fai_family: (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily, + Fai_socktype: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fsocktype), + Fai_protocol: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fproto), + Fai_addrlen: uint32(v5), + Fai_addr: out + uintptr(k)*88 + 48, + Fai_canonname: outcanon, + } + if k != 0 { + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k-int32(1))*88))).Fai.Fai_next = out + uintptr(k)*88 + } + switch (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily { + case int32(PF_INET): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) + case int32(PF_INET6): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET6) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + *(*Tuint32_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 24)) = (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Fscopeid + Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) + break + } + goto _4 + _4: + ; + j++ + k++ + } + goto _2 + _2: + ; + i++ + } + (*(*Taibuf)(unsafe.Pointer(out))).Fref = int16(nais) + *(*uintptr)(unsafe.Pointer(res)) = out + return 0 +} + +/* Define the "an address is configured" condition for address + * families via ability to create a socket for the family plus + * routability of the loopback address for the family. */ +var _lo4 = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + Fsin_addr: Tin_addr{ + Fs_addr: uint32(0x0100007f), + }, +} + +var _lo6 = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_addr: Tin6_addr{ + F__in6_union: *(*struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + })(unsafe.Pointer(&[16]Tuint8_t{ + 15: uint8(1), + })), + }, +} + +const EAI_ADDRFAMILY = -9 +const EAI_ALLDONE = -103 +const EAI_CANCELED = -101 +const EAI_IDN_ENCODE = -105 +const EAI_INPROGRESS = -100 +const EAI_INTR = -104 +const EAI_NOTCANCELED = -102 +const HOST_NOT_FOUND = 1 +const MCAST_BLOCK_SOURCE = 43 +const MCAST_EXCLUDE = 0 +const MCAST_INCLUDE = 1 +const MCAST_JOIN_GROUP = 42 +const MCAST_JOIN_SOURCE_GROUP = 46 +const MCAST_LEAVE_GROUP = 45 +const MCAST_LEAVE_SOURCE_GROUP = 47 +const MCAST_MSFILTER = 48 +const MCAST_UNBLOCK_SOURCE = 44 +const NI_MAXHOST = 255 +const NI_MAXSERV = 32 +const NO_ADDRESS = 4 +const NO_DATA = 4 +const NO_RECOVERY = 3 +const TRY_AGAIN = 2 +const h_errno = 0 + +type Tip_mreq = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr +} + +type Tip_mreqn = struct { + Fimr_multiaddr Tin_addr + Fimr_address Tin_addr + Fimr_ifindex int32 +} + +type Tip_mreq_source = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr + Fimr_sourceaddr Tin_addr +} + +type Tip_msfilter = struct { + Fimsf_multiaddr Tin_addr + Fimsf_interface Tin_addr + Fimsf_fmode Tuint32_t + Fimsf_numsrc Tuint32_t + Fimsf_slist [1]Tin_addr +} + +type Tgroup_req = struct { + Fgr_interface Tuint32_t + Fgr_group Tsockaddr_storage +} + +type Tgroup_source_req = struct { + Fgsr_interface Tuint32_t + Fgsr_group Tsockaddr_storage + Fgsr_source Tsockaddr_storage +} + +type Tgroup_filter = struct { + Fgf_interface Tuint32_t + Fgf_group Tsockaddr_storage + Fgf_fmode Tuint32_t + Fgf_numsrc Tuint32_t + Fgf_slist [1]Tsockaddr_storage +} + +type Tin_pktinfo = struct { + Fipi_ifindex int32 + Fipi_spec_dst Tin_addr + Fipi_addr Tin_addr +} + +type Tin6_pktinfo = struct { + Fipi6_addr Tin6_addr + Fipi6_ifindex uint32 +} + +type Tip6_mtuinfo = struct { + Fip6m_addr Tsockaddr_in6 + Fip6m_mtu Tuint32_t +} + +func Xgethostbyaddr(tls *TLS, a uintptr, l Tsocklen_t, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h) + size += size + uint64(1) + _h = Xmalloc(tls, size) + if !(_h != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyaddr_r(tls, a, l, af, _h, _h+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h uintptr + +func Xgethostbyaddr_r(tls *TLS, a uintptr, l Tsocklen_t, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var sl Tsocklen_t + var v1 uint64 + var _ /* sa at bp+0 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _ = i, sl, v1 + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp)) = uint16(af) + if af == int32(PF_INET6) { + v1 = uint64(28) + } else { + v1 = uint64(16) + } + sl = uint32(v1) + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Load address argument into sockaddr structure */ + if af == int32(PF_INET6) && l == uint32(16) { + Xmemcpy(tls, bp+8, a, uint64(16)) + } else { + if af == int32(PF_INET) && l == uint32(4) { + Xmemcpy(tls, bp+4, a, uint64(4)) + } else { + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EINVAL) + } + } + /* Align buffer and check for space for pointers and ip address */ + i = int32(uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1))) + if !(i != 0) { + i = int32(8) + } + if buflen <= Uint64FromInt32(5)*Uint64FromInt64(8)-uint64(i)+uint64(l) { + return int32(ERANGE) + } + buf += uintptr(uint64(8) - uint64(i)) + buflen -= Uint64FromInt32(5)*Uint64FromInt64(8) - uint64(i) + uint64(l) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)), a, uint64(l)) + buf += uintptr(l) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + 1*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + case -int32(12): + return int32(ERANGE) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + case 0: + break + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + (*Thostent)(unsafe.Pointer(h)).Fh_length = int32(l) + (*Thostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2(tls, name, int32(PF_INET)) +} + +func Xgethostbyname2(tls *TLS, name uintptr, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h1) + size += size + uint64(1) + _h1 = Xmalloc(tls, size) + if !(_h1 != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyname2_r(tls, name, af, _h1, _h1+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h1 uintptr + +func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1600) + defer tls.Free(1600) + var align, need Tsize_t + var cnt, i, v1 int32 + var v3 uintptr + var _ /* addrs at bp+0 */ [48]Taddress + var _ /* canon at bp+1344 */ [256]uint8 + _, _, _, _, _, _ = align, cnt, i, need, v1, v3 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + cnt = X__lookup_name(tls, bp, bp+1344, name, af, int32(AI_CANONNAME)) + if cnt < 0 { + switch cnt { + case -int32(2): + *(*int32)(unsafe.Pointer(err)) = int32(HOST_NOT_FOUND) + return 0 + case -int32(5): + *(*int32)(unsafe.Pointer(err)) = int32(NO_DATA) + return 0 + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + if af == int32(PF_INET6) { + v1 = int32(16) + } else { + v1 = int32(4) + } + (*Thostent)(unsafe.Pointer(h)).Fh_length = v1 + /* Align buffer */ + align = -uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1)) + need = Uint64FromInt32(4) * Uint64FromInt64(8) + need += uint64(cnt+Int32FromInt32(1)) * (uint64(8) + uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + need += Xstrlen(tls, name) + uint64(1) + need += Xstrlen(tls, bp+1344) + uint64(1) + need += align + if need > buflen { + return int32(ERANGE) + } + buf += uintptr(align) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(3) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(uint64(cnt+Int32FromInt32(1)) * uint64(8)) + i = 0 + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = buf + buf += uintptr((*Thostent)(unsafe.Pointer(h)).Fh_length) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + goto _2 + _2: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = uintptr(0) + v3 = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = v3 + (*Thostent)(unsafe.Pointer(h)).Fh_name = v3 + Xstrcpy(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, bp+1344) + buf += uintptr(Xstrlen(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name) + uint64(1)) + if Xstrcmp(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = buf + Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)), name) + buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8))) + uint64(1)) + } else { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 2*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2_r(tls, name, int32(PF_INET), h, buf, buflen, res, err) +} + +const IFADDRS_HASH_SIZE = 64 +const IFA_ADDRESS = 1 +const IFA_BROADCAST = 4 +const IFA_LABEL = 3 +const IFA_LOCAL = 2 +const IFF_ALLMULTI = 512 +const IFF_AUTOMEDIA = 16384 +const IFF_BROADCAST = 2 +const IFF_DEBUG = 4 +const IFF_DORMANT = 131072 +const IFF_DYNAMIC = 32768 +const IFF_ECHO = 262144 +const IFF_LOOPBACK = 8 +const IFF_LOWER_UP = 65536 +const IFF_MASTER = 1024 +const IFF_MULTICAST = 4096 +const IFF_NOARP = 128 +const IFF_NOTRAILERS = 32 +const IFF_POINTOPOINT = 16 +const IFF_PORTSEL = 8192 +const IFF_PROMISC = 256 +const IFF_RUNNING = 64 +const IFF_SLAVE = 2048 +const IFF_UP = 1 +const IFF_VOLATILE = 461914 +const IFHWADDRLEN = 6 +const IFLA_ADDRESS = 1 +const IFLA_BROADCAST = 2 +const IFLA_IFNAME = 3 +const IFLA_STATS = 7 +const IFNAMSIZ = 16 +const IF_NAMESIZE = 16 +const NETLINK_ROUTE = 0 +const NLMSG_DONE = 3 +const NLMSG_ERROR = 2 +const NLMSG_NOOP = 1 +const NLMSG_OVERRUN = 4 +const NLM_F_ACK = 4 +const NLM_F_ATOMIC = 1024 +const NLM_F_DUMP = 768 +const NLM_F_MATCH = 512 +const NLM_F_MULTI = 2 +const NLM_F_REQUEST = 1 +const NLM_F_ROOT = 256 +const RTM_GETADDR = 22 +const RTM_GETLINK = 18 +const RTM_NEWADDR = 20 +const RTM_NEWLINK = 16 +const __UAPI_DEF_IF_IFCONF = 0 +const __UAPI_DEF_IF_IFMAP = 0 +const __UAPI_DEF_IF_IFNAMSIZ = 0 +const __UAPI_DEF_IF_IFREQ = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO = 0 + +type Tifaddrs = struct { + Fifa_next uintptr + Fifa_name uintptr + Fifa_flags uint32 + Fifa_addr uintptr + Fifa_netmask uintptr + Fifa_ifu struct { + Fifu_dstaddr [0]uintptr + Fifu_broadaddr uintptr + } + Fifa_data uintptr +} + +type Tif_nameindex = struct { + Fif_index uint32 + Fif_name uintptr +} + +type Tifaddr = struct { + Fifa_addr Tsockaddr + Fifa_ifu struct { + Fifu_dstaddr [0]Tsockaddr + Fifu_broadaddr Tsockaddr + } + Fifa_ifp uintptr + Fifa_next uintptr +} + +type Tifmap = struct { + Fmem_start uint64 + Fmem_end uint64 + Fbase_addr uint16 + Firq uint8 + Fdma uint8 + Fport uint8 +} + +type Tifreq = struct { + Fifr_ifrn struct { + Fifrn_name [16]uint8 + } + Fifr_ifru struct { + Fifru_dstaddr [0]Tsockaddr + Fifru_broadaddr [0]Tsockaddr + Fifru_netmask [0]Tsockaddr + Fifru_hwaddr [0]Tsockaddr + Fifru_flags [0]int16 + Fifru_ivalue [0]int32 + Fifru_mtu [0]int32 + Fifru_map [0]Tifmap + Fifru_slave [0][16]uint8 + Fifru_newname [0][16]uint8 + Fifru_data [0]uintptr + Fifru_addr Tsockaddr + F__ccgo_pad12 [8]byte + } +} + +type Tifconf = struct { + Fifc_len int32 + Fifc_ifcu struct { + Fifcu_req [0]uintptr + Fifcu_buf uintptr + } +} + +type Tnlmsghdr = struct { + Fnlmsg_len Tuint32_t + Fnlmsg_type Tuint16_t + Fnlmsg_flags Tuint16_t + Fnlmsg_seq Tuint32_t + Fnlmsg_pid Tuint32_t +} + +type Trtattr = struct { + Frta_len uint16 + Frta_type uint16 +} + +type Trtgenmsg = struct { + Frtgen_family uint8 +} + +type Tifinfomsg = struct { + Fifi_family uint8 + F__ifi_pad uint8 + Fifi_type uint16 + Fifi_index int32 + Fifi_flags uint32 + Fifi_change uint32 +} + +type Tifaddrmsg = struct { + Fifa_family Tuint8_t + Fifa_prefixlen Tuint8_t + Fifa_flags Tuint8_t + Fifa_scope Tuint8_t + Fifa_index Tuint32_t +} + +/* getifaddrs() reports hardware addresses with PF_PACKET that implies + * struct sockaddr_ll. But e.g. Infiniband socket address length is + * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct + * to extend ssl_addr - callers should be able to still use it. */ +type Tsockaddr_ll_hack = struct { + Fsll_family uint16 + Fsll_protocol uint16 + Fsll_ifindex int32 + Fsll_hatype uint16 + Fsll_pkttype uint8 + Fsll_halen uint8 + Fsll_addr [24]uint8 +} + +type Tsockany = struct { + Fll [0]Tsockaddr_ll_hack + Fv4 [0]Tsockaddr_in + Fv6 [0]Tsockaddr_in6 + Fsa Tsockaddr + F__ccgo_pad4 [20]byte +} + +type Tifaddrs_storage = struct { + Fifa Tifaddrs + Fhash_next uintptr + Faddr Tsockany + Fnetmask Tsockany + Fifu Tsockany + Findex uint32 + Fname [17]uint8 +} + +type Tifaddrs_ctx = struct { + Ffirst uintptr + Flast uintptr + Fhash [64]uintptr +} + +func Xfreeifaddrs(tls *TLS, ifp uintptr) { + if __ccgo_strace { + trc("tls=%v ifp=%v, (%v:)", tls, ifp, origin(2)) + } + var n uintptr + _ = n + for ifp != 0 { + n = (*Tifaddrs)(unsafe.Pointer(ifp)).Fifa_next + Xfree(tls, ifp) + ifp = n + } +} + +func _copy_addr(tls *TLS, r uintptr, af int32, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32) { + var dst uintptr + var len1 int32 + _, _ = dst, len1 + switch af { + case int32(PF_INET): + dst = sa + 4 + len1 = int32(4) + case int32(PF_INET6): + dst = sa + 8 + len1 = int32(16) + if int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xf) == int32(0x2) { + (*(*Tsockaddr_in6)(unsafe.Pointer(sa))).Fsin6_scope_id = uint32(ifindex) + } + default: + return + } + if addrlen < uint64(len1) { + return + } + (*Tsockany)(unsafe.Pointer(sa)).Fsa.Fsa_family = uint16(af) + Xmemcpy(tls, dst, addr, uint64(len1)) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _gen_netmask(tls *TLS, r uintptr, af int32, sa uintptr, prefixlen int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v1 int32 + var _ /* addr at bp+0 */ [16]Tuint8_t + _, _ = i, v1 + *(*[16]Tuint8_t)(unsafe.Pointer(bp)) = [16]Tuint8_t{} + if uint64(prefixlen) > Uint64FromInt32(8)*Uint64FromInt64(16) { + prefixlen = int32(Uint64FromInt32(8) * Uint64FromInt64(16)) + } + i = prefixlen / int32(8) + Xmemset(tls, bp, int32(0xff), uint64(i)) + if uint64(i) < uint64(16) { + v1 = i + i++ + (*(*[16]Tuint8_t)(unsafe.Pointer(bp)))[v1] = uint8(int32(0xff) << (int32(8) - prefixlen%int32(8))) + } + _copy_addr(tls, r, af, sa, bp, uint64(16), 0) +} + +func _copy_lladdr(tls *TLS, r uintptr, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32, hatype uint16) { + if addrlen > uint64(24) { + return + } + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_family = uint16(PF_PACKET) + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_ifindex = ifindex + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_hatype = hatype + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_halen = uint8(addrlen) + Xmemcpy(tls, sa+12, addr, addrlen) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _netlink_msg_to_ifaddr(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var bucket uint32 + var ctx, ifa, ifi, ifs, ifs0, rta uintptr + var stats_len int32 + _, _, _, _, _, _, _, _ = bucket, ctx, ifa, ifi, ifs, ifs0, rta, stats_len + ctx = pctx + ifi = h + UintptrFromInt64(16) + ifa = h + UintptrFromInt64(16) + stats_len = 0 + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != int32(IFLA_STATS) { + goto _1 + } + stats_len = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - Uint64FromInt64(4)) + break + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + } else { + ifs0 = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index%uint32(IFADDRS_HASH_SIZE))*8)) + for { + if !(ifs0 != 0) { + break + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Findex == (*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index { + break + } + goto _2 + _2: + ; + ifs0 = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fhash_next + } + if !(ifs0 != 0) { + return 0 + } + } + ifs = Xcalloc(tls, uint64(1), uint64(200)+uint64(stats_len)) + if ifs == uintptr(0) { + return -int32(1) + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex = uint32((*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFLA_IFNAME): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + case int32(IFLA_ADDRESS): + _copy_lladdr(tls, ifs+24, ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_BROADCAST): + _copy_lladdr(tls, ifs+40, ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_STATS): + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data = ifs + UintptrFromInt32(1)*200 + Xmemcpy(tls, (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + break + } + goto _3 + _3: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + bucket = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex % uint32(IFADDRS_HASH_SIZE) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fhash_next = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) + *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) = ifs + } + } else { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_name + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFA_ADDRESS): + /* If ifa_addr is already set we, received an IFA_LOCAL before + * so treat this as destination address */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } else { + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } + case int32(IFA_BROADCAST): + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LOCAL): + /* If ifa_addr is set and we get IFA_LOCAL, assume we have + * a point-to-point network. Move address to correct field. */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifu = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Faddr + *(*uintptr)(unsafe.Pointer(ifs + 40)) = ifs + 136 + Xmemset(tls, ifs+64, 0, uint64(36)) + } + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LABEL): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + break + } + goto _4 + _4: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _gen_netmask(tls, ifs+32, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+100, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_prefixlen)) + } + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + if !((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst != 0) { + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst = ifs + } + if (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast != 0 { + (*Tifaddrs)(unsafe.Pointer((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast)).Fifa_next = ifs + } + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast = ifs + } else { + Xfree(tls, ifs) + } + return 0 +} + +func Xgetifaddrs(tls *TLS, ifap uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ifap=%v, (%v:)", tls, ifap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var ctx uintptr + var r int32 + var _ /* _ctx at bp+0 */ Tifaddrs_ctx + _, _ = ctx, r + ctx = bp + Xmemset(tls, ctx, 0, uint64(528)) + r = X__rtnetlink_enumerate(tls, PF_UNSPEC, PF_UNSPEC, __ccgo_fp(_netlink_msg_to_ifaddr), ctx) + if r == 0 { + *(*uintptr)(unsafe.Pointer(ifap)) = (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst + } else { + Xfreeifaddrs(tls, (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst) + } + return r +} + +const RR_PTR = 12 + +func _itoa(tls *TLS, p uintptr, x uint32) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + p += uintptr(Uint64FromInt32(3) * Uint64FromInt64(4)) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func _mkptr4(tls *TLS, s uintptr, ip uintptr) { + bp := tls.Alloc(48) + defer tls.Free(48) + Xsprintf(tls, s, __ccgo_ts+1021, VaList(bp+8, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) +} + +func _mkptr6(tls *TLS, s uintptr, ip uintptr) { + var i int32 + var v2, v3, v4, v5 uintptr + _, _, _, _, _ = i, v2, v3, v4, v5 + i = int32(15) + for { + if !(i >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&int32(15)] + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>int32(4)] + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('.') + goto _1 + _1: + ; + i-- + } + Xstrcpy(tls, s, __ccgo_ts+1046) +} + +var _xdigits = [17]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + +func _reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { + bp := tls.Alloc(1824) + defer tls.Free(1824) + var f, p, z, v1, v2, v8 uintptr + var v10, v11, v15, v16, v4, v5 int32 + var v13, v18, v7 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1592 */ TFILE + var _ /* atmp at bp+1544 */ [16]uint8 + var _ /* iplit at bp+1560 */ Taddress + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, p, z, v1, v10, v11, v13, v15, v16, v18, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1055, bp+1592, bp+512, uint64(1032)) + if !(f != 0) { + return + } + if family == int32(PF_INET) { + Xmemcpy(tls, bp+1544+uintptr(12), a, uint64(4)) + Xmemcpy(tls, bp+1544, __ccgo_ts+1066, uint64(12)) + a = bp + 1544 + } + for Xfgets(tls, bp, int32(512), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + if X__lookup_ipliteral(tls, bp+1560, bp, PF_UNSPEC) <= 0 { + continue + } + if (*(*Taddress)(unsafe.Pointer(bp + 1560))).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+1560+8+uintptr(12), bp+1560+8, uint64(4)) + Xmemcpy(tls, bp+1560+8, __ccgo_ts+1066, uint64(12)) + (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid = uint32(0) + } + if Xmemcmp(tls, a, bp+1560+8, uint64(16)) != 0 || (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid != scopeid { + continue + } + for { + if v13 = *(*uint8)(unsafe.Pointer(p)) != 0; v13 { + v10 = int32(*(*uint8)(unsafe.Pointer(p))) + v11 = BoolInt32(v10 == int32(' ') || uint32(v10)-uint32('\t') < uint32(5)) + goto _12 + _12: + } + if !(v13 && v11 != 0) { + break + } + goto _9 + _9: + ; + p++ + } + z = p + for { + if v18 = *(*uint8)(unsafe.Pointer(z)) != 0; v18 { + v15 = int32(*(*uint8)(unsafe.Pointer(z))) + v16 = BoolInt32(v15 == int32(' ') || uint32(v15)-uint32('\t') < uint32(5)) + goto _17 + _17: + } + if !(v18 && !(v16 != 0)) { + break + } + goto _14 + _14: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if int64(z)-int64(p) < int64(256) { + Xmemcpy(tls, buf, p, uint64(int64(z)-int64(p)+int64(1))) + break + } + } + X__fclose_ca(tls, f) +} + +func _reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { + bp := tls.Alloc(1408) + defer tls.Free(1408) + var f, p, v1, v2, v8 uintptr + var svport uint64 + var v4, v5 int32 + var v7 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _ = f, p, svport, v1, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1079, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + return + } + for Xfgets(tls, bp, int32(128), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + svport = Xstrtoul(tls, p, bp+128, int32(10)) + if svport != uint64(port) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if dgram != 0 && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1093, uint64(4)) != 0 { + continue + } + if !(dgram != 0) && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1098, uint64(4)) != 0 { + continue + } + if int64(p)-t__predefined_ptrdiff_t(bp) > int64(32) { + continue + } + Xmemcpy(tls, buf, bp, uint64(int64(p)-t__predefined_ptrdiff_t(bp))) + break + } + X__fclose_ca(tls, f) +} + +func _dns_parse_callback(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + if rr != int32(RR_PTR) { + return 0 + } + if X__dn_expand(tls, packet, packet+uintptr(plen), data, c, int32(256)) <= 0 { + *(*uint8)(unsafe.Pointer(c)) = uint8(0) + } + return 0 +} + +func Xgetnameinfo(tls *TLS, sa uintptr, sl Tsocklen_t, node uintptr, nodelen Tsocklen_t, serv uintptr, servlen Tsocklen_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sa=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa, sl, node, nodelen, serv, servlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(976) + defer tls.Free(976) + var a, p, p1, v1 uintptr + var af, port, qlen, rlen int32 + var scopeid uint32 + var _ /* buf at bp+78 */ [256]uint8 + var _ /* num at bp+334 */ [13]uint8 + var _ /* ptr at bp+0 */ [78]uint8 + var _ /* query at bp+347 */ [96]uint8 + var _ /* reply at bp+443 */ [512]uint8 + var _ /* tmp at bp+955 */ [17]uint8 + _, _, _, _, _, _, _, _, _ = a, af, p, p1, port, qlen, rlen, scopeid, v1 + af = int32((*Tsockaddr)(unsafe.Pointer(sa)).Fsa_family) + switch af { + case int32(PF_INET): + a = sa + 4 + if uint64(sl) < uint64(16) { + return -int32(6) + } + _mkptr4(tls, bp, a) + scopeid = uint32(0) + case int32(PF_INET6): + a = sa + 8 + if uint64(sl) < uint64(28) { + return -int32(6) + } + if Xmemcmp(tls, a, __ccgo_ts+1066, uint64(12)) != 0 { + _mkptr6(tls, bp, a) + } else { + _mkptr4(tls, bp, a+uintptr(12)) + } + scopeid = (*Tsockaddr_in6)(unsafe.Pointer(sa)).Fsin6_scope_id + default: + return -int32(6) + } + if node != 0 && nodelen != 0 { + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + _reverse_hosts(tls, bp+78, a, scopeid, af) + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) && !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + qlen = X__res_mkquery(tls, 0, bp, int32(1), int32(RR_PTR), uintptr(0), 0, uintptr(0), bp+347, int32(96)) + (*(*[96]uint8)(unsafe.Pointer(bp + 347)))[int32(3)] = uint8(0) /* don't need AD flag */ + rlen = X__res_send(tls, bp+347, qlen, bp+443, int32(512)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if rlen > 0 { + if uint64(rlen) > uint64(512) { + rlen = int32(512) + } + X__dns_parse(tls, bp+443, rlen, __ccgo_fp(_dns_parse_callback), bp+78) + } + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) { + if flags&int32(NI_NAMEREQD) != 0 { + return -int32(2) + } + Xinet_ntop(tls, af, a, bp+78, uint32(256)) + if scopeid != 0 { + p = uintptr(0) + if !(flags&Int32FromInt32(NI_NUMERICSCOPE) != 0) && (int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xf) == int32(0x2)) { + p = Xif_indextoname(tls, scopeid, bp+955+uintptr(1)) + } + if !(p != 0) { + p = _itoa(tls, bp+334, scopeid) + } + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8('%') + Xstrcat(tls, bp+78, p) + } + } + if Xstrlen(tls, bp+78) >= uint64(nodelen) { + return -int32(12) + } + Xstrcpy(tls, node, bp+78) + } + if serv != 0 && servlen != 0 { + p1 = bp + 78 + port = int32(Xntohs(tls, (*Tsockaddr_in)(unsafe.Pointer(sa)).Fsin_port)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICSERV) != 0) { + _reverse_services(tls, bp+78, port, flags&int32(NI_DGRAM)) + } + if !(*(*uint8)(unsafe.Pointer(p1)) != 0) { + p1 = _itoa(tls, bp+334, uint32(port)) + } + if Xstrlen(tls, p1) >= uint64(servlen) { + return -int32(12) + } + Xstrcpy(tls, serv, p1) + } + return 0 +} + +func Xgetpeername(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getpeername) + _ = int32(__SC_getpeername) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +func Xgetservbyname(tls *TLS, name uintptr, prots uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v, (%v:)", tls, name, prots, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if Xgetservbyname_r(tls, name, prots, uintptr(unsafe.Pointer(&_se)), uintptr(unsafe.Pointer(&_buf3)), uint64(16), bp) != 0 { + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_se)) +} + +var _se Tservent + +var _buf3 [2]uintptr + +const ALIGN = 0 + +func Xgetservbyname_r(tls *TLS, name uintptr, prots uintptr, se uintptr, buf uintptr, buflen Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v se=%v buf=%v buflen=%v res=%v, (%v:)", tls, name, prots, se, buf, buflen, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var align, cnt, proto int32 + var v1 uintptr + var _ /* end at bp+8 */ uintptr + var _ /* servs at bp+0 */ [2]Tservice + _, _, _, _ = align, cnt, proto, v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Don't treat numeric port number strings as service records. */ + *(*uintptr)(unsafe.Pointer(bp + 8)) = __ccgo_ts + Xstrtoul(tls, name, bp+8, int32(10)) + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + return int32(ENOENT) + } + /* Align buffer */ + align = int32(-uint64(buf) & (Uint64FromInt64(16) - Uint64FromInt64(8) - Uint64FromInt32(1))) + if buflen < Uint64FromInt32(2)*Uint64FromInt64(8)+uint64(align) { + return int32(ERANGE) + } + buf += uintptr(align) + if !(prots != 0) { + proto = 0 + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1103) != 0) { + proto = int32(IPPROTO_TCP) + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1107) != 0) { + proto = int32(IPPROTO_UDP) + } else { + return int32(EINVAL) + } + } + } + cnt = X__lookup_serv(tls, bp, name, proto, 0, 0) + if cnt < 0 { + switch cnt { + case -int32(10): + fallthrough + case -int32(11): + return int32(ENOMEM) + default: + return int32(ENOENT) + } + } + (*Tservent)(unsafe.Pointer(se)).Fs_name = name + (*Tservent)(unsafe.Pointer(se)).Fs_aliases = buf + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases)) = (*Tservent)(unsafe.Pointer(se)).Fs_name + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases + 1*8)) = uintptr(0) + (*Tservent)(unsafe.Pointer(se)).Fs_port = int32(Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fport)) + if int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fproto) == int32(IPPROTO_TCP) { + v1 = __ccgo_ts + 1103 + } else { + v1 = __ccgo_ts + 1107 + } + (*Tservent)(unsafe.Pointer(se)).Fs_proto = v1 + *(*uintptr)(unsafe.Pointer(res)) = se + return 0 +} + +func Xgetsockname(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getsockname) + _ = int32(__SC_getsockname) + v2 = int64(fd) + v3 = int64(addr) + v4 = int64(len1) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +func Xgetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, v17, v26, v8 int64 + var r1, v1, v10, v19 int32 + var tv uintptr + var v11, v12, v13, v14, v15, v16, v2, v20, v21, v22, v23, v24, v25, v3, v4, v5, v6, v7 Tsyscall_arg_t + var _ /* tv32 at bp+8 */ [2]int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, tv, v1, v10, v11, v12, v13, v14, v15, v16, v17, v19, v2, v20, v21, v22, v23, v24, v25, v26, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v2 = int64(fd) + v3 = int64(level) + v4 = int64(optname) + v5 = int64(optval) + v6 = int64(optlen) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = int32(v8) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if true { + break + } + if uint64(*(*Tsocklen_t)(unsafe.Pointer(optlen))) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + *(*[1]Tsocklen_t)(unsafe.Pointer(bp)) = [1]Tsocklen_t{ + 0: uint32(16), + } + v10 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v11 = int64(fd) + v12 = int64(level) + v13 = int64(optname) + v14 = int64(bp + 8) + v15 = int64(bp) + v16 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + r1 = int32(v17) + if r1 < 0 { + break + } + tv = optval + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*[2]int64)(unsafe.Pointer(bp + 8)))[0] + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = (*(*[2]int64)(unsafe.Pointer(bp + 8)))[int32(1)] + *(*Tsocklen_t)(unsafe.Pointer(optlen)) = uint32(16) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v19 = int32(SYS_getsockopt) + _ = int32(__SC_getsockopt) + v20 = int64(fd) + v21 = int64(level) + v22 = int64(optname) + v23 = int64(optval) + v24 = int64(optlen) + v25 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v19), v20, v21, v22, v23, v24, v25) + } else { + r = X__syscall6(tls, int64(v19), v20, v21, v22, v23, v24, v25) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v26 = r + goto _27 + } + v26 = r + goto _27 + _27: + r1 = int32(v26) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func X__h_errno_location(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstack != 0) { + return uintptr(unsafe.Pointer(&Xh_errno)) + } + return ___get_tp(tls) + 144 +} + +func Xherror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1, v2 uintptr + _, _ = v1, v2 + if msg != 0 { + v1 = msg + } else { + v1 = __ccgo_ts + } + if msg != 0 { + v2 = __ccgo_ts + 289 + } else { + v2 = __ccgo_ts + } + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+1111, VaList(bp+8, v1, v2, Xhstrerror(tls, *(*int32)(unsafe.Pointer(X__h_errno_location(tls)))))) +} + +type Tcpu_set_t1 = struct { + F__bits [16]uint64 +} + +var _msgs1 = [84]uint8{'H', 'o', 's', 't', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xhstrerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs1)) + ecode-- + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode-- + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xhtonl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +func Xif_freenameindex(tls *TLS, idx uintptr) { + if __ccgo_strace { + trc("tls=%v idx=%v, (%v:)", tls, idx, origin(2)) + } + Xfree(tls, idx) +} + +func Xif_indextoname(tls *TLS, index uint32, name uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v index=%v name=%v, (%v:)", tls, index, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _ = fd, r, v1 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(bp + 16)) = int32(index) + r = Xioctl(tls, fd, int32(SIOCGIFNAME), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENODEV) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENXIO) + } + return uintptr(0) + } + return Xstrncpy(tls, name, bp, uint64(IF_NAMESIZE)) +} + +type Tifnamemap = struct { + Fhash_next uint32 + Findex uint32 + Fnamelen uint8 + Fname [16]uint8 +} + +type Tifnameindexctx = struct { + Fnum uint32 + Fallocated uint32 + Fstr_bytes uint32 + Flist uintptr + Fhash [64]uint32 +} + +func _netlink_msg_to_nameindex(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var a Tsize_t + var bucket, index, namelen, type1 int32 + var ctx, ifa, ifi, map1, rta uintptr + var i, v2 uint32 + _, _, _, _, _, _, _, _, _, _, _, _ = a, bucket, ctx, i, ifa, ifi, index, map1, namelen, rta, type1, v2 + ctx = pctx + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + ifi = h + UintptrFromInt64(16) + index = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index + type1 = int32(IFLA_IFNAME) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } else { + ifa = h + UintptrFromInt64(16) + index = int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index) + type1 = int32(IFA_LABEL) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != type1 { + goto _1 + } + namelen = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - uint64(4) - uint64(1)) + if namelen > int32(IF_NAMESIZE) { + return 0 + } + /* suppress duplicates */ + bucket = index % int32(IFADDRS_HASH_SIZE) + i = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + for i != 0 { + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr(i-uint32(1))*28 + if (*Tifnamemap)(unsafe.Pointer(map1)).Findex == uint32(index) && int32((*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen) == namelen && Xmemcmp(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) == 0 { + return 0 + } + i = (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next + } + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum >= (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated { + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated != 0 { + v2 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated*uint32(2) + uint32(1) + } else { + v2 = uint32(8) + } + a = uint64(v2) + if a > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(28) { + return -int32(1) + } + map1 = Xrealloc(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist, a*uint64(28)) + if !(map1 != 0) { + return -int32(1) + } + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist = map1 + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated = uint32(a) + } + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*28 + (*Tifnamemap)(unsafe.Pointer(map1)).Findex = uint32(index) + (*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen = uint8(namelen) + Xmemcpy(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) + *(*uint32)(unsafe.Pointer(ctx + 8)) += uint32(namelen + int32(1)) + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum++ + (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum + return 0 + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + return 0 +} + +func Xif_nameindex(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var ctx, d, ifs, p, s, v2 uintptr + var i int32 + var _ /* _ctx at bp+0 */ Tifnameindexctx + var _ /* cs at bp+280 */ int32 + _, _, _, _, _, _, _ = ctx, d, i, ifs, p, s, v2 + ctx = bp + ifs = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+280) + Xmemset(tls, ctx, 0, uint64(280)) + if X__rtnetlink_enumerate(tls, PF_UNSPEC, int32(PF_INET), __ccgo_fp(_netlink_msg_to_nameindex), ctx) < 0 { + goto err + } + ifs = Xmalloc(tls, uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum+Uint32FromInt32(1))*16+uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fstr_bytes)) + if !(ifs != 0) { + goto err + } + p = ifs + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*16 + UintptrFromInt32(1)*16 + i = int32((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum) + d = ifs + s = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + for { + if !(i != 0) { + break + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = (*Tifnamemap)(unsafe.Pointer(s)).Findex + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = p + Xmemcpy(tls, p, s+9, uint64((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen)) + p += uintptr((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen) + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + goto _1 + _1: + ; + i-- + s += 28 + d += 16 + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = uint32(0) + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = uintptr(0) + goto err +err: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 280)), uintptr(0)) + Xfree(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOBUFS) + return ifs +} + +func Xif_nametoindex(tls *TLS, name uintptr) (r1 uint32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1, v2 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _, _ = fd, r, v1, v2 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uint32(0) + } + Xstrncpy(tls, bp, name, uint64(16)) + r = Xioctl(tls, fd, int32(SIOCGIFINDEX), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + v2 = 0 + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 16)) + } + return uint32(v2) +} + +func Xinet_addr(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* a at bp+0 */ Tin_addr + if !(X__inet_aton(tls, p, bp) != 0) { + return uint32(-Int32FromInt32(1)) + } + return (*(*Tin_addr)(unsafe.Pointer(bp))).Fs_addr +} + +func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var d, s uintptr + var i int32 + var _ /* a at bp+0 */ [4]uint64 + var _ /* z at bp+32 */ uintptr + _, _, _ = d, i, s + s = s0 + d = dest + *(*[4]uint64)(unsafe.Pointer(bp)) = [4]uint64{} + i = 0 + for { + if !(i < int32(4)) { + break + } + (*(*[4]uint64)(unsafe.Pointer(bp)))[i] = Xstrtoul(tls, s, bp+32, 0) + if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != int32('.') || !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return 0 + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0) { + break + } + s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) + goto _1 + _1: + ; + i++ + } + if i == int32(4) { + return 0 + } + switch i { + case 0: + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[0] & uint64(0xffffff) + *(*uint64)(unsafe.Pointer(bp)) >>= uint64(24) + fallthrough + case int32(1): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] & uint64(0xffff) + *(*uint64)(unsafe.Pointer(bp + 1*8)) >>= uint64(16) + fallthrough + case int32(2): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(3)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] & uint64(0xff) + *(*uint64)(unsafe.Pointer(bp + 2*8)) >>= uint64(8) + } + i = 0 + for { + if !(i < int32(4)) { + break + } + if (*(*[4]uint64)(unsafe.Pointer(bp)))[i] > uint64(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8((*(*[4]uint64)(unsafe.Pointer(bp)))[i]) + goto _2 + _2: + ; + i++ + } + return int32(1) +} + +func Xinet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__inet_aton(tls, s0, dest) +} + +func Xinet_network(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xntohl(tls, Xinet_addr(tls, p)) +} + +func Xinet_makeaddr(tls *TLS, n Tin_addr_t, h Tin_addr_t) (r Tin_addr) { + if __ccgo_strace { + trc("tls=%v n=%v h=%v, (%v:)", tls, n, h, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n < uint32(256) { + h |= n << int32(24) + } else { + if n < uint32(65536) { + h |= n << int32(16) + } else { + h |= n << int32(8) + } + } + return Tin_addr{ + Fs_addr: h, + } +} + +func Xinet_lnaof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h & uint32(0xffffff) + } + if h>>int32(24) < uint32(192) { + return h & uint32(0xffff) + } + return h & uint32(0xff) +} + +func Xinet_netof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h >> int32(24) + } + if h>>int32(24) < uint32(192) { + return h >> int32(16) + } + return h >> int32(8) +} + +func Xinet_ntoa(tls *TLS, _in Tin_addr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v _in=%v, (%v:)", tls, _in, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + *(*Tin_addr)(unsafe.Pointer(bp)) = _in + var a uintptr + _ = a + a = bp + Xsnprintf(tls, uintptr(unsafe.Pointer(&_buf4)), uint64(16), __ccgo_ts+1119, VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3))))) + return uintptr(unsafe.Pointer(&_buf4)) +} + +var _buf4 [16]uint8 + +func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l Tsocklen_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var a uintptr + var best, i, j, max, v2 int32 + var v3 uint8 + var _ /* buf at bp+0 */ [100]uint8 + _, _, _, _, _, _, _ = a, best, i, j, max, v2, v3 + a = a0 + switch af { + case int32(PF_INET): + if uint32(Xsnprintf(tls, s, uint64(l), __ccgo_ts+1119, VaList(bp+112, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { + return s + } + case int32(PF_INET6): + if Xmemcmp(tls, a, __ccgo_ts+1066, uint64(12)) != 0 { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1131, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } else { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1155, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } + /* Replace longest /(^0|:)[:0]{2,}/ with "::" */ + v2 = Int32FromInt32(0) + best = v2 + i = v2 + max = Int32FromInt32(2) + for { + if !((*(*[100]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + if i != 0 && int32((*(*[100]uint8)(unsafe.Pointer(bp)))[i]) != int32(':') { + goto _1 + } + j = int32(Xstrspn(tls, bp+uintptr(i), __ccgo_ts+1185)) + if j > max { + best = i + max = j + } + goto _1 + _1: + ; + i++ + } + if max > int32(3) { + v3 = Uint8FromUint8(':') + (*(*[100]uint8)(unsafe.Pointer(bp)))[best+int32(1)] = v3 + (*(*[100]uint8)(unsafe.Pointer(bp)))[best] = v3 + Xmemmove(tls, bp+uintptr(best)+uintptr(2), bp+uintptr(best)+uintptr(max), uint64(i-best-max+int32(1))) + } + if Xstrlen(tls, bp) < uint64(l) { + Xstrcpy(tls, s, bp) + return s + } + default: + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return uintptr(0) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOSPC) + return uintptr(0) +} + +func _hexval(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, v14, v15, v4, v7 uintptr + var brk, d, i, j, need_v4, v, v10, v3, v9 int32 + var v11, v5 bool + var _ /* ip at bp+0 */ [8]Tuint16_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, brk, d, i, j, need_v4, v, v10, v11, v14, v15, v3, v4, v5, v7, v9 + a = a0 + brk = -int32(1) + need_v4 = 0 + if af == int32(PF_INET) { + i = 0 + for { + if !(i < int32(4)) { + break + } + v3 = Int32FromInt32(0) + j = v3 + v = v3 + for { + if !(j < int32(3) && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + v = int32(10)*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - int32('0') + goto _2 + _2: + ; + j++ + } + if j == 0 || j > int32(1) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('0') || v > int32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == int32(3) { + return int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') { + return 0 + } + s += uintptr(j + int32(1)) + goto _1 + _1: + ; + i++ + } + return 0 + } else { + if af != int32(PF_INET6) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return -int32(1) + } + } + if v5 = int32(*(*uint8)(unsafe.Pointer(s))) == int32(':'); v5 { + s++ + v4 = s + } + if v5 && int32(*(*uint8)(unsafe.Pointer(v4))) != int32(':') { + return 0 + } + i = 0 + for { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(':') && brk < 0 { + brk = i + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + s++ + v7 = s + if !(*(*uint8)(unsafe.Pointer(v7)) != 0) { + break + } + if i == int32(7) { + return 0 + } + goto _6 + } + v9 = Int32FromInt32(0) + j = v9 + v = v9 + for { + if v11 = j < int32(4); v11 { + v10 = _hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) + d = v10 + } + if !(v11 && v10 >= 0) { + break + } + v = int32(16)*v + d + goto _8 + _8: + ; + j++ + } + if j == 0 { + return 0 + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(v) + if !(*(*uint8)(unsafe.Pointer(s + uintptr(j))) != 0) && (brk >= 0 || i == int32(7)) { + break + } + if i == int32(7) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32(':') { + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') || i < int32(6) && brk < 0 { + return 0 + } + need_v4 = int32(1) + i++ + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + break + } + s += uintptr(j + int32(1)) + goto _6 + _6: + ; + i++ + } + if brk >= 0 { + Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(int32(2)*(i+int32(1)-brk))) + j = 0 + for { + if !(j < int32(7)-i) { + break + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[brk+j] = uint16(0) + goto _12 + _12: + ; + j++ + } + } + j = 0 + for { + if !(j < int32(8)) { + break + } + v14 = a + a++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) >> int32(8)) + v15 = a + a++ + *(*uint8)(unsafe.Pointer(v15)) = uint8((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) + goto _13 + _13: + ; + j++ + } + if need_v4 != 0 && Xinet_pton(tls, int32(PF_INET), s, a-uintptr(4)) <= 0 { + return 0 + } + return int32(1) +} + +func Xlisten(tls *TLS, fd int32, backlog int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v backlog=%v, (%v:)", tls, fd, backlog, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_listen) + _ = int32(__SC_listen) + v2 = int64(fd) + v3 = int64(backlog) + v4 = int64(Int32FromInt32(0)) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var p, v1 uintptr + var scopeid uint64 + var _ /* a4 at bp+0 */ Tin_addr + var _ /* a6 at bp+4 */ Tin6_addr + var _ /* tmp at bp+20 */ [64]uint8 + var _ /* z at bp+88 */ uintptr + _, _, _ = p, scopeid, v1 + if X__inet_aton(tls, name, bp) > 0 { + if family == int32(PF_INET6) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp, uint64(4)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET) + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(0) + return int32(1) + } + p = Xstrchr(tls, name, int32('%')) + scopeid = uint64(0) + if p != 0 && int64(p)-int64(name) < int64(64) { + Xmemcpy(tls, bp+20, name, uint64(int64(p)-int64(name))) + (*(*[64]uint8)(unsafe.Pointer(bp + 20)))[int64(p)-int64(name)] = uint8(0) + name = bp + 20 + } + if Xinet_pton(tls, int32(PF_INET6), name, bp+4) <= 0 { + return 0 + } + if family == int32(PF_INET) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp+4, uint64(16)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET6) + if p != 0 { + p++ + v1 = p + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(v1)))-uint32('0') < uint32(10)) != 0 { + scopeid = Xstrtoull(tls, p, bp+88, int32(10)) + } else { + *(*uintptr)(unsafe.Pointer(bp + 88)) = p - uintptr(1) + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { + if !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xc0) == int32(0x80)) && !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xf) == int32(0x2)) { + return -int32(2) + } + scopeid = uint64(Xif_nametoindex(tls, p)) + if !(scopeid != 0) { + return -int32(2) + } + } + if scopeid > uint64(0xffffffff) { + return -int32(2) + } + } + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(scopeid) + return int32(1) +} + +const ABUF_SIZE = 4800 +const DAS_MATCHINGLABEL = 268435456 +const DAS_MATCHINGSCOPE = 536870912 +const DAS_ORDER_SHIFT = 0 +const DAS_PREC_SHIFT = 20 +const DAS_PREFIX_SHIFT = 8 +const DAS_SCOPE_SHIFT = 16 +const DAS_USABLE = 1073741824 +const RR_A = 1 +const RR_AAAA = 28 +const RR_CNAME = 5 + +func _is_valid_hostname(tls *TLS, host uintptr) (r int32) { + var s uintptr + _ = s + if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) || Xmbstowcs(tls, uintptr(0), host, uint64(0)) == uint64(-Int32FromInt32(1)) { + return 0 + } + s = host + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) >= int32(0x80) || int32(*(*uint8)(unsafe.Pointer(s))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0) { + break + } + goto _1 + _1: + ; + s++ + } + return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) +} + +func _name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) (r int32) { + var cnt, v1, v2, v3, v4 int32 + _, _, _, _, _ = cnt, v1, v2, v3, v4 + cnt = 0 + if name != 0 { + return 0 + } + if flags&int32(AI_PASSIVE) != 0 { + if family != int32(PF_INET6) { + v1 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v1)*28)) = Taddress{ + Ffamily: int32(PF_INET), + } + } + if family != int32(PF_INET) { + v2 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v2)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + } + } + } else { + if family != int32(PF_INET6) { + v3 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v3)*28)) = Taddress{ + Ffamily: int32(PF_INET), + Faddr: [16]Tuint8_t{ + 0: uint8(127), + 3: uint8(1), + }, + } + } + if family != int32(PF_INET) { + v4 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + Faddr: [16]Tuint8_t{ + 15: uint8(1), + }, + } + } + } + return cnt +} + +func _name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + return X__lookup_ipliteral(tls, buf, name, family) +} + +func _name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(1776) + defer tls.Free(1776) + var badfam, cnt, have_canon, v14, v15, v20, v21, v25, v26, v29, v5, v6, v8, v9 int32 + var f, p, z, v1, v18, v2, v4 uintptr + var l Tsize_t + var v11, v12, v17, v23, v28 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1544 */ TFILE + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = badfam, cnt, f, have_canon, l, p, z, v1, v11, v12, v14, v15, v17, v18, v2, v20, v21, v23, v25, v26, v28, v29, v4, v5, v6, v8, v9 + l = Xstrlen(tls, name) + cnt = 0 + badfam = 0 + have_canon = 0 + f = X__fopen_rb_ca(tls, __ccgo_ts+1055, bp+1544, bp+512, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return 0 + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(512), f) != 0 && cnt < int32(MAXADDRS) { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + uintptr(1) + for { + v4 = Xstrstr(tls, p, name) + p = v4 + if v12 = v4 != 0; v12 { + v5 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + ; + if v11 = !(v6 != 0); !v11 { + v8 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + } + if !(v12 && (v11 || !(v9 != 0))) { + break + } + goto _3 + _3: + ; + p++ + } + if !(p != 0) { + continue + } + /* Isolate IP address to parse */ + p = bp + for { + if v17 = *(*uint8)(unsafe.Pointer(p)) != 0; v17 { + v14 = int32(*(*uint8)(unsafe.Pointer(p))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + } + if !(v17 && !(v15 != 0)) { + break + } + goto _13 + _13: + ; + p++ + } + v18 = p + p++ + *(*uint8)(unsafe.Pointer(v18)) = uint8(0) + switch _name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { + case int32(1): + cnt++ + case 0: + continue + default: + badfam = -int32(5) + break + } + if have_canon != 0 { + continue + } + /* Extract first name as canonical name */ + for { + if v23 = *(*uint8)(unsafe.Pointer(p)) != 0; v23 { + v20 = int32(*(*uint8)(unsafe.Pointer(p))) + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + } + if !(v23 && v21 != 0) { + break + } + goto _19 + _19: + ; + p++ + } + z = p + for { + if v28 = *(*uint8)(unsafe.Pointer(z)) != 0; v28 { + v25 = int32(*(*uint8)(unsafe.Pointer(z))) + v26 = BoolInt32(v25 == int32(' ') || uint32(v25)-uint32('\t') < uint32(5)) + goto _27 + _27: + } + if !(v28 && !(v26 != 0)) { + break + } + goto _24 + _24: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if _is_valid_hostname(tls, p) != 0 { + have_canon = int32(1) + Xmemcpy(tls, canon, p, uint64(int64(z)-int64(p)+int64(1))) + } + } + X__fclose_ca(tls, f) + if cnt != 0 { + v29 = cnt + } else { + v29 = badfam + } + return v29 +} + +type Tdpc_ctx = struct { + Faddrs uintptr + Fcanon uintptr + Fcnt int32 + Frrtype int32 +} + +func _dns_parse_callback1(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ctx, v2 uintptr + var family, v1 int32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _, _ = ctx, family, v1, v2 + ctx = c + if rr == int32(RR_CNAME) { + if X__dn_expand(tls, packet, packet+uintptr(plen), data, bp, int32(256)) > 0 && _is_valid_hostname(tls, bp) != 0 { + Xstrcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcanon, bp) + } + return 0 + } + if (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt >= int32(MAXADDRS) { + return 0 + } + if rr != (*Tdpc_ctx)(unsafe.Pointer(ctx)).Frrtype { + return 0 + } + switch rr { + case int32(RR_A): + if len1 != int32(4) { + return -int32(1) + } + family = int32(PF_INET) + case int32(RR_AAAA): + if len1 != int32(16) { + return -int32(1) + } + family = int32(PF_INET6) + break + } + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Ffamily = family + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Fscopeid = uint32(0) + v2 = ctx + 16 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + Xmemcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs+uintptr(v1)*28+8, data, uint64(len1)) + return 0 +} + +func _name_from_dns(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, conf uintptr) (r int32) { + bp := tls.Alloc(10240) + defer tls.Free(10240) + var i, nq int32 + var qtypes [2]int32 + var _ /* abuf at bp+560 */ [2][4800]uint8 + var _ /* alens at bp+10200 */ [2]int32 + var _ /* ap at bp+10176 */ [2]uintptr + var _ /* ctx at bp+10208 */ Tdpc_ctx + var _ /* qbuf at bp+0 */ [2][280]uint8 + var _ /* qlens at bp+10192 */ [2]int32 + var _ /* qp at bp+10160 */ [2]uintptr + _, _, _ = i, nq, qtypes + *(*[2]uintptr)(unsafe.Pointer(bp + 10160)) = [2]uintptr{ + 0: bp, + 1: bp + 1*280, + } + *(*[2]uintptr)(unsafe.Pointer(bp + 10176)) = [2]uintptr{ + 0: bp + 560, + 1: bp + 560 + 1*4800, + } + nq = 0 + *(*Tdpc_ctx)(unsafe.Pointer(bp + 10208)) = Tdpc_ctx{ + Faddrs: buf, + Fcanon: canon, + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family != _afrr[i].Faf { + (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] = X__res_mkquery(tls, 0, name, int32(1), _afrr[i].Frr, uintptr(0), 0, uintptr(0), bp+uintptr(nq)*280, int32(280)) + if (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] == -int32(1) { + return 0 + } + qtypes[nq] = _afrr[i].Frr + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280 + 3)) = uint8(0) /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if nq != 0 && int32(*(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))) == int32(*(*uint8)(unsafe.Pointer(bp))) { + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))++ + } + nq++ + } + goto _1 + _1: + ; + i++ + } + if X__res_msend_rc(tls, nq, bp+10160, bp+10192, bp+10176, bp+10200, int32(4800), conf) < 0 { + return -int32(11) + } + i = 0 + for { + if !(i < nq) { + break + } + if (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] < int32(4) || int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(2) { + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(3) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) != 0 { + return -int32(4) + } + goto _2 + _2: + ; + i++ + } + i = nq - int32(1) + for { + if !(i >= 0) { + break + } + (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Frrtype = qtypes[i] + if uint64((*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i]) > uint64(4800) { + (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] = int32(4800) + } + X__dns_parse(tls, bp+560+uintptr(i)*4800, (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i], __ccgo_fp(_dns_parse_callback1), bp+10208) + goto _3 + _3: + ; + i-- + } + if (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt != 0 { + return (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt + } + return -int32(5) +} + +var _afrr = [2]struct { + Faf int32 + Frr int32 +}{ + 0: { + Faf: int32(PF_INET6), + Frr: int32(RR_A), + }, + 1: { + Faf: int32(PF_INET), + Frr: int32(RR_AAAA), + }, +} + +func _name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(368) + defer tls.Free(368) + var cnt, v10, v5, v6, v9 int32 + var dots, l, v2 Tsize_t + var p, z uintptr + var v12 bool + var _ /* conf at bp+256 */ Tresolvconf + var _ /* search at bp+0 */ [256]uint8 + _, _, _, _, _, _, _, _, _, _, _ = cnt, dots, l, p, z, v10, v12, v2, v5, v6, v9 + if X__get_resolv_conf(tls, bp+256, bp, uint64(256)) < 0 { + return -int32(1) + } + /* Count dots, suppress search when >=ndots or name ends in + * a dot, which is an explicit request for global scope. */ + v2 = Uint64FromInt32(0) + l = v2 + dots = v2 + for { + if !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l)))) == int32('.') { + dots++ + } + goto _1 + _1: + ; + l++ + } + if dots >= uint64((*(*Tresolvconf)(unsafe.Pointer(bp + 256))).Fndots) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + *(*uint8)(unsafe.Pointer(bp)) = uint8(0) + } + /* Strip final dot for canon, fail if multiple trailing dots. */ + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if !(l != 0) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + return -int32(2) + } + /* This can never happen; the caller already checked length. */ + if l >= uint64(256) { + return -int32(2) + } + /* Name with search domain appended is setup in canon[]. This both + * provides the desired default canonical name (if the requested + * name is not a CNAME record) and serves as a buffer for passing + * the full requested name to name_from_dns. */ + Xmemcpy(tls, canon, name, l) + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8('.') + p = bp + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + for { + v5 = int32(*(*uint8)(unsafe.Pointer(p))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + goto _4 + _4: + ; + p++ + } + z = p + for { + if v12 = *(*uint8)(unsafe.Pointer(z)) != 0; v12 { + v9 = int32(*(*uint8)(unsafe.Pointer(z))) + v10 = BoolInt32(v9 == int32(' ') || uint32(v9)-uint32('\t') < uint32(5)) + goto _11 + _11: + } + if !(v12 && !(v10 != 0)) { + break + } + goto _8 + _8: + ; + z++ + } + if z == p { + break + } + if uint64(int64(z)-int64(p)) < uint64(256)-l-uint64(1) { + Xmemcpy(tls, canon+uintptr(l)+uintptr(1), p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Pointer(canon + uintptr(uint64(int64(z)-int64(p)+int64(1))+l))) = uint8(0) + cnt = _name_from_dns(tls, buf, canon, canon, family, bp+256) + if cnt != 0 { + return cnt + } + } + goto _3 + _3: + ; + p = z + } + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8(0) + return _name_from_dns(tls, buf, canon, name, family, bp+256) +} + +type Tpolicy = struct { + Faddr [16]uint8 + Flen1 uint8 + Fmask uint8 + Fprec uint8 + Flabel uint8 +} + +var _defpolicy = [6]Tpolicy{ + 0: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + Flen1: uint8(15), + Fmask: uint8(0xff), + Fprec: uint8(50), + }, + 1: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}, + Flen1: uint8(11), + Fmask: uint8(0xff), + Fprec: uint8(35), + Flabel: uint8(4), + }, + 2: { + Faddr: [16]uint8{' ', 2}, + Flen1: uint8(1), + Fmask: uint8(0xff), + Fprec: uint8(30), + Flabel: uint8(2), + }, + 3: { + Faddr: [16]uint8{' ', 1}, + Flen1: uint8(3), + Fmask: uint8(0xff), + Fprec: uint8(5), + Flabel: uint8(5), + }, + 4: { + Faddr: [16]uint8{252}, + Fmask: uint8(0xfe), + Fprec: uint8(3), + Flabel: uint8(13), + }, + 5: { + Faddr: [16]uint8{}, + Fprec: uint8(40), + Flabel: uint8(1), + }, +} + +func _policyof(tls *TLS, a uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&_defpolicy))+uintptr(i)*20, uint64(_defpolicy[i].Flen1)) != 0 { + goto _1 + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a + uintptr(_defpolicy[i].Flen1))))&int32(_defpolicy[i].Fmask) != int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + uintptr(_defpolicy[i].Flen1)))) { + goto _1 + } + return uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + goto _1 + _1: + ; + i++ + } + return r +} + +func _labelof(tls *TLS, a uintptr) (r int32) { + return int32((*Tpolicy)(unsafe.Pointer(_policyof(tls, a))).Flabel) +} + +func _scopeof(tls *TLS, a uintptr) (r int32) { + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) { + return int32(*(*Tuint8_t)(unsafe.Pointer(a + 1))) & int32(15) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) { + return int32(2) + } + if *(*Tuint32_t)(unsafe.Pointer(a)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 1*4)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 2*4)) == uint32(0) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 15))) == int32(1) { + return int32(2) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0xc0) { + return int32(5) + } + return int32(14) +} + +func _prefixmatch(tls *TLS, s uintptr, d uintptr) (r int32) { + var i uint32 + _ = i + i = uint32(0) + for { + if !(i < uint32(128) && !((int32(*(*Tuint8_t)(unsafe.Pointer(s + uintptr(i/uint32(8)))))^int32(*(*Tuint8_t)(unsafe.Pointer(d + uintptr(i/uint32(8))))))&(Int32FromInt32(128)>>(i%Uint32FromInt32(8))) != 0)) { + break + } + goto _1 + _1: + ; + i++ + } + return int32(i) +} + +func _addrcmp(tls *TLS, _a uintptr, _b uintptr) (r int32) { + var a, b uintptr + _, _ = a, b + a = _a + b = _b + return (*Taddress)(unsafe.Pointer(b)).Fsortkey - (*Taddress)(unsafe.Pointer(a)).Fsortkey +} + +func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var cnt, dlabel, dprec, dscope, family1, fd, i, j, key, prefixlen, v1, v4, v5 int32 + var da, dpolicy, sa uintptr + var dalen Tsocklen_t + var l Tsize_t + var _ /* cs at bp+0 */ int32 + var _ /* da4 at bp+76 */ Tsockaddr_in + var _ /* da6 at bp+32 */ Tsockaddr_in6 + var _ /* sa4 at bp+60 */ Tsockaddr_in + var _ /* sa6 at bp+4 */ Tsockaddr_in6 + var _ /* salen at bp+92 */ Tsocklen_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, da, dalen, dlabel, dpolicy, dprec, dscope, family1, fd, i, j, key, l, prefixlen, sa, v1, v4, v5 + cnt = 0 + *(*uint8)(unsafe.Pointer(canon)) = uint8(0) + if name != 0 { + /* reject empty name and check len so it fits into temp bufs */ + l = Xstrnlen(tls, name, uint64(255)) + if l-uint64(1) >= uint64(254) { + return -int32(2) + } + Xmemcpy(tls, canon, name, l+uint64(1)) + } + /* Procedurally, a request for v6 addresses with the v4-mapped + * flag set is like a request for unspecified family, followed + * by filtering of the results. */ + if flags&int32(AI_V4MAPPED) != 0 { + if family == int32(PF_INET6) { + family = PF_UNSPEC + } else { + flags -= int32(AI_V4MAPPED) + } + } + /* Try each backend until there's at least one result. */ + cnt = _name_from_null(tls, buf, name, family, flags) + if !(cnt != 0) { + cnt = _name_from_numeric(tls, buf, name, family) + } + if !(cnt != 0) && !(flags&Int32FromInt32(AI_NUMERICHOST) != 0) { + cnt = _name_from_hosts(tls, buf, canon, name, family) + if !(cnt != 0) { + cnt = _name_from_dns_search(tls, buf, canon, name, family) + } + } + if cnt <= 0 { + if cnt != 0 { + v1 = cnt + } else { + v1 = -int32(2) + } + return v1 + } + /* Filter/transform results for v4-mapped lookup, if requested. */ + if flags&int32(AI_V4MAPPED) != 0 { + if !(flags&Int32FromInt32(AI_ALL) != 0) { + /* If any v6 results exist, remove v4 results. */ + i = 0 + for { + if !(i < cnt && (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET6)) { + break + } + goto _2 + _2: + ; + i++ + } + if i < cnt { + j = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily == int32(PF_INET6) { + v4 = j + j++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = *(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28)) + } + goto _3 + _3: + ; + i++ + } + v5 = j + i = v5 + cnt = v5 + } + } + /* Translate any remaining v4 results to v6 */ + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + goto _6 + } + Xmemcpy(tls, buf+uintptr(i)*28+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, buf+uintptr(i)*28+8, __ccgo_ts+1066, uint64(12)) + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily = int32(PF_INET6) + goto _6 + _6: + ; + i++ + } + } + /* No further processing is needed if there are fewer than 2 + * results or if there are only IPv4 results. */ + if cnt < int32(2) || family == int32(PF_INET) { + return cnt + } + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + break + } + goto _7 + _7: + ; + i++ + } + if i == cnt { + return cnt + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + /* The following implements a subset of RFC 3484/6724 destination + * address selection by generating a single 31-bit sort key for + * each address. Rules 3, 4, and 7 are omitted for having + * excessive runtime and code size cost and dubious benefit. + * So far the label/precedence table cannot be customized. */ + i = 0 + for { + if !(i < cnt) { + break + } + family1 = (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily + key = 0 + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 4)) = Tsockaddr_in6{} + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 32)) = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_scope_id: (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fscopeid, + } + *(*Tsockaddr_in)(unsafe.Pointer(bp + 60)) = Tsockaddr_in{} + *(*Tsockaddr_in)(unsafe.Pointer(bp + 76)) = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + } + if family1 == int32(PF_INET6) { + Xmemcpy(tls, bp+32+8, buf+uintptr(i)*28+8, uint64(16)) + da = bp + 32 + dalen = uint32(28) + sa = bp + 4 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(28) + } else { + Xmemcpy(tls, bp+4+8, __ccgo_ts+1066, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+32+8, __ccgo_ts+1066, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+76+4, buf+uintptr(i)*28+8, uint64(4)) + da = bp + 76 + dalen = uint32(16) + sa = bp + 60 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(16) + } + dpolicy = _policyof(tls, bp+32+8) + dscope = _scopeof(tls, bp+32+8) + dlabel = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Flabel) + dprec = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Fprec) + prefixlen = 0 + fd = Xsocket(tls, family1, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), int32(IPPROTO_UDP)) + if fd >= 0 { + if !(Xconnect(tls, fd, da, dalen) != 0) { + key |= int32(DAS_USABLE) + if !(Xgetsockname(tls, fd, sa, bp+92) != 0) { + if family1 == int32(PF_INET) { + Xmemcpy(tls, bp+4+8+uintptr(12), bp+60+4, uint64(4)) + } + if dscope == _scopeof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGSCOPE) + } + if dlabel == _labelof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGLABEL) + } + prefixlen = _prefixmatch(tls, bp+4+8, bp+32+8) + } + } + Xclose(tls, fd) + } + key |= dprec << int32(DAS_PREC_SHIFT) + key |= (int32(15) - dscope) << int32(DAS_SCOPE_SHIFT) + key |= prefixlen << int32(DAS_PREFIX_SHIFT) + key |= (int32(MAXADDRS) - i) << DAS_ORDER_SHIFT + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fsortkey = key + goto _8 + _8: + ; + i++ + } + Xqsort(tls, buf, uint64(cnt), uint64(28), __ccgo_fp(_addrcmp)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return cnt +} + +func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1408) + defer tls.Free(1408) + var cnt, v1, v11, v12, v16, v17, v2, v20, v21, v22, v7, v8 int32 + var f, p, v3, v4, v6 uintptr + var l Tsize_t + var port uint64 + var v10, v14, v19 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, f, l, p, port, v1, v10, v11, v12, v14, v16, v17, v19, v2, v20, v21, v22, v3, v4, v6, v7, v8 + cnt = 0 + *(*uintptr)(unsafe.Pointer(bp + 128)) = __ccgo_ts + port = uint64(0) + switch socktype { + case int32(SOCK_STREAM): + switch proto { + case 0: + proto = int32(IPPROTO_TCP) + fallthrough + case int32(IPPROTO_TCP): + default: + return -int32(8) + } + case int32(SOCK_DGRAM): + switch proto { + case 0: + proto = int32(IPPROTO_UDP) + fallthrough + case int32(IPPROTO_UDP): + default: + return -int32(8) + } + fallthrough + case 0: + default: + if name != 0 { + return -int32(8) + } + (*(*Tservice)(unsafe.Pointer(buf))).Fport = uint16(0) + (*(*Tservice)(unsafe.Pointer(buf))).Fproto = uint8(proto) + (*(*Tservice)(unsafe.Pointer(buf))).Fsocktype = uint8(socktype) + return int32(1) + } + if name != 0 { + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + return -int32(8) + } + port = Xstrtoul(tls, name, bp+128, int32(10)) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 128)))) != 0) { + if port > uint64(65535) { + return -int32(8) + } + if proto != int32(IPPROTO_UDP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v1 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v1)*4))).Fproto = uint8(IPPROTO_TCP) + } + if proto != int32(IPPROTO_TCP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v2 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v2)*4))).Fproto = uint8(IPPROTO_UDP) + } + return cnt + } + if flags&int32(AI_NUMERICSERV) != 0 { + return -int32(2) + } + l = Xstrlen(tls, name) + f = X__fopen_rb_ca(tls, __ccgo_ts+1079, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return -int32(8) + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(128), f) != 0 && cnt < int32(MAXSERVS) { + v3 = Xstrchr(tls, bp, int32('#')) + p = v3 + if v3 != 0 { + v4 = p + p++ + *(*uint8)(unsafe.Pointer(v4)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + /* Find service name */ + p = bp + for { + v6 = Xstrstr(tls, p, name) + p = v6 + if !(v6 != 0) { + break + } + if v10 = p > bp; v10 { + v7 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v8 = BoolInt32(v7 == int32(' ') || uint32(v7)-uint32('\t') < uint32(5)) + goto _9 + _9: + } + if v10 && !(v8 != 0) { + goto _5 + } + if v14 = *(*uint8)(unsafe.Pointer(p + uintptr(l))) != 0; v14 { + v11 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + } + if v14 && !(v12 != 0) { + goto _5 + } + break + goto _5 + _5: + ; + p++ + } + if !(p != 0) { + continue + } + /* Skip past canonical name at beginning of line */ + p = bp + for { + if v19 = *(*uint8)(unsafe.Pointer(p)) != 0; v19 { + v16 = int32(*(*uint8)(unsafe.Pointer(p))) + v17 = BoolInt32(v16 == int32(' ') || uint32(v16)-uint32('\t') < uint32(5)) + goto _18 + _18: + } + if !(v19 && !(v17 != 0)) { + break + } + goto _15 + _15: + ; + p++ + } + port = Xstrtoul(tls, p, bp+128, int32(10)) + if port > uint64(65535) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1093, uint64(4)) != 0) { + if proto == int32(IPPROTO_TCP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v20 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v20)*4))).Fproto = uint8(IPPROTO_UDP) + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1098, uint64(4)) != 0) { + if proto == int32(IPPROTO_UDP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v21 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v21)*4))).Fproto = uint8(IPPROTO_TCP) + } + } + X__fclose_ca(tls, f) + if cnt > 0 { + v22 = cnt + } else { + v22 = -int32(8) + } + return v22 +} + +func ___netlink_enumerate(tls *TLS, fd int32, seq uint32, type1 int32, af int32, cb uintptr, ctx uintptr) (r1 int32) { + bp := tls.Alloc(8192) + defer tls.Free(8192) + var h uintptr + var r, ret int32 + var _ /* u at bp+0 */ struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + } + _, _, _ = h, r, ret + Xmemset(tls, bp, 0, uint64(20)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_len = uint32(20) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_type = uint16(type1) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_flags = uint16(Int32FromInt32(NLM_F_ROOT) | Int32FromInt32(NLM_F_MATCH) | Int32FromInt32(NLM_F_REQUEST)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_seq = seq + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fg.Frtgen_family = uint8(af) + r = int32(Xsend(tls, fd, bp, uint64(20), 0)) + if r < 0 { + return r + } + for int32(1) != 0 { + r = int32(Xrecv(tls, fd, bp, uint64(8192), int32(MSG_DONTWAIT))) + if r <= 0 { + return -int32(1) + } + h = bp + for { + if !(uint64(int64(bp+uintptr(r))-int64(h)) >= uint64(16)) { + break + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_DONE) { + return 0 + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_ERROR) { + return -int32(1) + } + ret = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cb})))(tls, ctx, h) + if ret != 0 { + return ret + } + goto _1 + _1: + ; + h = h + uintptr(((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + } + return r1 +} + +func X__rtnetlink_enumerate(tls *TLS, link_af int32, addr_af int32, cb uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v link_af=%v addr_af=%v cb=%v ctx=%v, (%v:)", tls, link_af, addr_af, cb, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var fd, r int32 + _, _ = fd, r + fd = Xsocket(tls, int32(PF_NETLINK), Int32FromInt32(SOCK_RAW)|Int32FromInt32(SOCK_CLOEXEC), NETLINK_ROUTE) + if fd < 0 { + return -int32(1) + } + r = ___netlink_enumerate(tls, fd, uint32(1), int32(RTM_GETLINK), link_af, cb, ctx) + if !(r != 0) { + r = ___netlink_enumerate(tls, fd, uint32(2), int32(RTM_GETADDR), addr_af, cb, ctx) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return r +} + +func Xgetnetbyaddr(tls *TLS, net Tuint32_t, type1 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v net=%v type1=%v, (%v:)", tls, net, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xns_get16(tls *TLS, cp uintptr) (r uint32) { + if __ccgo_strace { + trc("tls=%v cp=%v, (%v:)", tls, cp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(int32(*(*uint8)(unsafe.Pointer(cp)))< %v", r) }() + } + return uint64(uint32(*(*uint8)(unsafe.Pointer(cp)))<> int32(8)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(s) +} + +func Xns_put32(tls *TLS, l uint64, cp uintptr) { + if __ccgo_strace { + trc("tls=%v l=%v cp=%v, (%v:)", tls, l, cp, origin(2)) + } + var v1, v2, v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + v1 = cp + cp++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(l >> int32(24)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(l >> int32(16)) + v3 = cp + cp++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(l >> int32(8)) + v4 = cp + cp++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(l) +} + +func Xns_initparse(tls *TLS, msg uintptr, msglen int32, handle uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v msglen=%v handle=%v, (%v:)", tls, msg, msglen, handle, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, r int32 + _, _ = i, r + (*Tns_msg)(unsafe.Pointer(handle)).F_msg = msg + (*Tns_msg)(unsafe.Pointer(handle)).F_eom = msg + uintptr(msglen) + if msglen < (Int32FromInt32(2)+int32(_ns_s_max))*Int32FromInt32(NS_INT16SZ) { + goto bad + } + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_id = uint16(Xns_get16(tls, msg-uintptr(2))) + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_flags = uint16(Xns_get16(tls, msg-uintptr(2))) + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + msg += uintptr(2) + *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) = uint16(Xns_get16(tls, msg-uintptr(2))) + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + if *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) != 0 { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = msg + r = Xns_skiprr(tls, msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, i, int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)))) + if r < 0 { + return -int32(1) + } + msg += uintptr(r) + } else { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = UintptrFromInt32(0) + } + goto _2 + _2: + ; + i++ + } + if msg != (*Tns_msg)(unsafe.Pointer(handle)).F_eom { + goto bad + } + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = int32(_ns_s_max) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_skiprr(tls *TLS, ptr uintptr, eom uintptr, section Tns_sect, count int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ptr=%v eom=%v section=%v count=%v, (%v:)", tls, ptr, eom, section, count, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var p uintptr + var r, v1 int32 + _, _, _ = p, r, v1 + p = ptr + for { + v1 = count + count-- + if !(v1 != 0) { + break + } + r = Xdn_skipname(tls, p, eom) + if r < 0 { + goto bad + } + if int64(r+Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r + Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(NS_INT32SZ) + p += uintptr(2) + r = int32(Xns_get16(tls, p-uintptr(2))) + if int64(r) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r) + } + } + return int32(int64(p) - int64(ptr)) + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_parserr(tls *TLS, handle uintptr, section Tns_sect, rrnum int32, rr uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v handle=%v section=%v rrnum=%v rr=%v, (%v:)", tls, handle, section, rrnum, rr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + var p1, p2, p3, p4 uintptr + _, _, _, _, _ = r, p1, p2, p3, p4 + if section < 0 || section >= int32(_ns_s_max) { + goto bad + } + if section != (*Tns_msg)(unsafe.Pointer(handle)).F_sect { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum == -int32(1) { + rrnum = (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum + } + if rrnum < 0 || rrnum >= int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + goto bad + } + if rrnum < (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum > (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + r = Xns_skiprr(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, section, rrnum-(*Tns_msg)(unsafe.Pointer(handle)).F_rrnum) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = rrnum + } + r = Xns_name_uncompress(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, rr, uint64(NS_MAXDNAME)) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + if int64(Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p1 = handle + 72 + *(*uintptr)(unsafe.Pointer(p1)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Ftype1 = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p1))-uintptr(2))) + p2 = handle + 72 + *(*uintptr)(unsafe.Pointer(p2)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frr_class = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p2))-uintptr(2))) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p3 = handle + 72 + *(*uintptr)(unsafe.Pointer(p3)) += uintptr(4) + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(Xns_get32(tls, *(*uintptr)(unsafe.Pointer(p3))-uintptr(4))) + p4 = handle + 72 + *(*uintptr)(unsafe.Pointer(p4)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p4))-uintptr(2))) + if int64((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) + } else { + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = UintptrFromInt32(0) + } + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum++ + if (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum > int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + int32(1) + if (*Tns_msg)(unsafe.Pointer(handle)).F_sect == int32(_ns_s_max) { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + } else { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + } + } + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENODEV) + return -int32(1) + goto size +size: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_name_uncompress(tls *TLS, msg uintptr, eom uintptr, src uintptr, dst uintptr, dstsiz Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v eom=%v src=%v dst=%v dstsiz=%v, (%v:)", tls, msg, eom, src, dst, dstsiz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xdn_expand(tls, msg, eom, src, dst, int32(dstsiz)) + if r < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + } + return r +} + +func Xntohl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +/* do we really need all these?? */ + +var _idx int32 +var _protos = [239]uint8{0, 'i', 'p', 0, 1, 'i', 'c', 'm', 'p', 0, 2, 'i', 'g', 'm', 'p', 0, 3, 'g', 'g', 'p', 0, 4, 'i', 'p', 'e', 'n', 'c', 'a', 'p', 0, 5, 's', 't', 0, 6, 't', 'c', 'p', 0, 8, 'e', 'g', 'p', 0, 12, 'p', 'u', 'p', 0, 17, 'u', 'd', 'p', 0, 20, 'h', 'm', 'p', 0, 22, 'x', 'n', 's', '-', 'i', 'd', 'p', 0, 27, 'r', 'd', 'p', 0, 29, 'i', 's', 'o', '-', 't', 'p', '4', 0, '$', 'x', 't', 'p', 0, '%', 'd', 'd', 'p', 0, '&', 'i', 'd', 'p', 'r', '-', 'c', 'm', 't', 'p', 0, ')', 'i', 'p', 'v', '6', 0, '+', 'i', 'p', 'v', '6', '-', 'r', 'o', 'u', 't', 'e', 0, ',', 'i', 'p', 'v', '6', '-', 'f', 'r', 'a', 'g', 0, '-', 'i', 'd', 'r', 'p', 0, '.', 'r', 's', 'v', 'p', 0, '/', 'g', 'r', 'e', 0, '2', 'e', 's', 'p', 0, '3', 'a', 'h', 0, '9', 's', 'k', 'i', 'p', 0, ':', 'i', 'p', 'v', '6', '-', 'i', 'c', 'm', 'p', 0, ';', 'i', 'p', 'v', '6', '-', 'n', 'o', 'n', 'x', 't', 0, '<', 'i', 'p', 'v', '6', '-', 'o', 'p', 't', 's', 0, 'I', 'r', 's', 'p', 'f', 0, 'Q', 'v', 'm', 't', 'p', 0, 'Y', 'o', 's', 'p', 'f', 0, '^', 'i', 'p', 'i', 'p', 0, 'b', 'e', 'n', 'c', 'a', 'p', 0, 'g', 'p', 'i', 'm', 0, 255, 'r', 'a', 'w'} + +func Xendprotoent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _idx = 0 +} + +func Xsetprotoent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } + _idx = 0 +} + +func Xgetprotoent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(_idx) >= uint64(239) { + return UintptrFromInt32(0) + } + _p.Fp_proto = int32(_protos[_idx]) + _p.Fp_name = uintptr(unsafe.Pointer(&_protos)) + uintptr(_idx+int32(1)) + _p.Fp_aliases = uintptr(unsafe.Pointer(&_aliases)) + _idx = int32(uint64(_idx) + (Xstrlen(tls, _p.Fp_name) + Uint64FromInt32(2))) + return uintptr(unsafe.Pointer(&_p)) +} + +var _p Tprotoent + +var _aliases uintptr + +func Xgetprotobyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && Xstrcmp(tls, name, (*Tprotoent)(unsafe.Pointer(p)).Fp_name) != 0 { + p = Xgetprotoent(tls) + } + return p +} + +func Xgetprotobynumber(tls *TLS, num int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v num=%v, (%v:)", tls, num, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && (*Tprotoent)(unsafe.Pointer(p)).Fp_proto != num { + p = Xgetprotoent(tls) + } + return p +} + +func Xrecv(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrecvfrom(tls, fd, buf, len1, flags, uintptr(0), uintptr(0)) +} + +func Xrecvfrom(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen uintptr) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_recvfrom) + _ = int32(__SC_recvfrom) + v2 = int64(fd) + v3 = int64(buf) + v4 = int64(len1) + v5 = int64(flags) + v6 = int64(addr) + v7 = int64(alen) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint64(v8)) +} + +func Xrecvmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v timeout=%v, (%v:)", tls, fd, msgvec, vlen, flags, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i uint32 + var mh uintptr + var v2 int32 + _, _, _ = i, mh, v2 + mh = msgvec + i = vlen + for { + if !(i != 0) { + break + } + v2 = Int32FromInt32(0) + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad2 = v2 + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad1 = v2 + goto _1 + _1: + ; + i-- + mh += 64 + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_recvmmsg), int64(fd), int64(msgvec), int64(vlen), int64(flags), int64(timeout), 0)))) +} + +func X__convert_scm_timestamps(tls *TLS, msg uintptr, csize Tsocklen_t) { + if __ccgo_strace { + trc("tls=%v msg=%v csize=%v, (%v:)", tls, msg, csize, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cmsg, last, v2, v6, v8, p7 uintptr + var type1 int32 + var _ /* tmp at bp+0 */ int64 + var _ /* tvts at bp+8 */ [2]int64 + _, _, _, _, _, _, _ = cmsg, last, type1, v2, v6, v8, p7 + if true { + return + } + if !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control != 0) || !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen != 0) { + return + } + last = uintptr(0) + type1 = 0 + if uint64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) >= uint64(16) { + v2 = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control + } else { + v2 = UintptrFromInt32(0) + } + cmsg = v2 + for { + if !(cmsg != 0) { + break + } + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level == int32(SOL_SOCKET) { + switch (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type { + case int32(SO_TIMESTAMP_OLD): + goto _3 + case int32(SO_TIMESTAMPNS_OLD): + goto _4 + } + goto _5 + _3: + ; + if type1 != 0 { + goto _5 + } + type1 = int32(SO_TIMESTAMP) + goto common + _4: + ; + type1 = int32(SO_TIMESTAMPNS) + goto common + common: + ; + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16, uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[0] = *(*int64)(unsafe.Pointer(bp)) + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16+uintptr(8), uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[int32(1)] = *(*int64)(unsafe.Pointer(bp)) + goto _5 + _5: + } + last = cmsg + goto _1 + _1: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(cmsg)) { + v6 = uintptr(0) + } else { + v6 = cmsg + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v6 + } + if !(last != 0) || !(type1 != 0) { + return + } + if (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) > uint64(csize-(*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) { + *(*int32)(unsafe.Pointer(msg + 48)) |= int32(MSG_CTRUNC) + return + } + p7 = msg + 40 + *(*Tsocklen_t)(unsafe.Pointer(p7)) = Tsocklen_t(uint64(*(*Tsocklen_t)(unsafe.Pointer(p7))) + ((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)))) + if uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(last)) { + v8 = uintptr(0) + } else { + v8 = last + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v8 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level = int32(SOL_SOCKET) + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type = type1 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len = uint32((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + Uint64FromInt64(16)) + Xmemcpy(tls, cmsg+UintptrFromInt32(1)*16, bp+8, uint64(16)) +} + +func Xrecvmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r2 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var orig uintptr + var orig_controllen Tsocklen_t + var r, v9 int64 + var r1 Tssize_t + var v1, v2 int32 + var v3, v4, v5, v6, v7, v8 Tsyscall_arg_t + var _ /* h at bp+0 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _ = orig, orig_controllen, r, r1, v1, v2, v3, v4, v5, v6, v7, v8, v9 + orig_controllen = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen + orig = msg + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp))).F__pad1 = v1 + msg = bp + } + v2 = int32(SYS_recvmsg) + _ = int32(__SC_recvmsg) + v3 = int64(fd) + v4 = int64(msg) + v5 = int64(flags) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v2), v3, v4, v5, v6, v7, v8) + } else { + r = X__syscall6(tls, int64(v2), v3, v4, v5, v6, v7, v8) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v9 = r + goto _10 + } + v9 = r + goto _10 +_10: + r1 = X__syscall_ret(tls, uint64(v9)) + if r1 >= 0 { + X__convert_scm_timestamps(tls, msg, orig_controllen) + } + if orig != 0 { + *(*Tmsghdr)(unsafe.Pointer(orig)) = *(*Tmsghdr)(unsafe.Pointer(bp)) + } + return r1 +} + +func Xres_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__res_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var i, id, j, n int32 + var l Tsize_t + var _ /* q at bp+0 */ [280]uint8 + var _ /* ts at bp+280 */ Ttimespec + _, _, _, _, _ = i, id, j, l, n + l = Xstrnlen(tls, dname, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + return -int32(1) + } + n = int32(uint64(17) + l + BoolUint64(!!(l != 0))) + if l > uint64(253) || buflen < n || uint32(op) > uint32(15) || uint32(class) > uint32(255) || uint32(type1) > uint32(255) { + return -int32(1) + } + /* Construct query template - ID will be filled later */ + Xmemset(tls, bp, 0, uint64(n)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(2)] = uint8(op*int32(8) + int32(1)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(3)] = uint8(32) /* AD */ + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(5)] = uint8(1) + Xmemcpy(tls, bp+uintptr(13), dname, l) + i = int32(13) + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + j = i + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[j] != 0 && int32((*(*[280]uint8)(unsafe.Pointer(bp)))[j]) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-i)-uint32(1) > uint32(62) { + return -int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i-int32(1)] = uint8(j - i) + goto _1 + _1: + ; + i = j + int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(1)] = uint8(type1) + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(3)] = uint8(class) + /* Make a reasonably unpredictable id */ + Xclock_gettime(tls, CLOCK_REALTIME, bp+280) + id = int32((uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec) + uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec)/uint64(65536)) & uint64(0xffff)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[0] = uint8(id / int32(256)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(1)] = uint8(id) + Xmemcpy(tls, buf, bp, uint64(n)) + return n +} + +func Xres_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_mkquery(tls, op, dname, class, type1, data, datalen, newrr, buf, buflen) +} + +const POLLERR = 8 +const POLLHUP = 16 +const POLLIN = 1 +const POLLMSG = 1024 +const POLLNVAL = 32 +const POLLOUT = 4 +const POLLPRI = 2 +const POLLRDBAND = 128 +const POLLRDHUP = 8192 +const POLLRDNORM = 64 +const POLLWRBAND = 512 +const POLLWRNORM = 256 +const TCP_CC_INFO = 26 +const TCP_CLOSE = 7 +const TCP_CLOSE_WAIT = 8 +const TCP_CLOSING = 11 +const TCP_CM_INQ = 36 +const TCP_CONGESTION = 13 +const TCP_CORK = 3 +const TCP_DEFER_ACCEPT = 9 +const TCP_ESTABLISHED = 1 +const TCP_FASTOPEN = 23 +const TCP_FASTOPEN_CONNECT = 30 +const TCP_FASTOPEN_KEY = 33 +const TCP_FASTOPEN_NO_COOKIE = 34 +const TCP_FIN_WAIT1 = 4 +const TCP_FIN_WAIT2 = 5 +const TCP_INFO = 11 +const TCP_INQ = 36 +const TCP_KEEPCNT = 6 +const TCP_KEEPIDLE = 4 +const TCP_KEEPINTVL = 5 +const TCP_LAST_ACK = 9 +const TCP_LINGER2 = 8 +const TCP_LISTEN = 10 +const TCP_MAXSEG = 2 +const TCP_MD5SIG = 14 +const TCP_MD5SIG_EXT = 32 +const TCP_NODELAY = 1 +const TCP_NOTSENT_LOWAT = 25 +const TCP_QUEUE_SEQ = 21 +const TCP_QUICKACK = 12 +const TCP_REPAIR = 19 +const TCP_REPAIR_OPTIONS = 22 +const TCP_REPAIR_QUEUE = 20 +const TCP_REPAIR_WINDOW = 29 +const TCP_SAVED_SYN = 28 +const TCP_SAVE_SYN = 27 +const TCP_SYNCNT = 7 +const TCP_SYN_RECV = 3 +const TCP_SYN_SENT = 2 +const TCP_THIN_DUPACK = 17 +const TCP_THIN_LINEAR_TIMEOUTS = 16 +const TCP_TIMESTAMP = 24 +const TCP_TIME_WAIT = 6 +const TCP_TX_DELAY = 37 +const TCP_ULP = 31 +const TCP_USER_TIMEOUT = 18 +const TCP_WINDOW_CLAMP = 10 +const TCP_ZEROCOPY_RECEIVE = 35 + +const _TCP_NLA_PAD = 0 +const _TCP_NLA_BUSY = 1 +const _TCP_NLA_RWND_LIMITED = 2 +const _TCP_NLA_SNDBUF_LIMITED = 3 +const _TCP_NLA_DATA_SEGS_OUT = 4 +const _TCP_NLA_TOTAL_RETRANS = 5 +const _TCP_NLA_PACING_RATE = 6 +const _TCP_NLA_DELIVERY_RATE = 7 +const _TCP_NLA_SND_CWND = 8 +const _TCP_NLA_REORDERING = 9 +const _TCP_NLA_MIN_RTT = 10 +const _TCP_NLA_RECUR_RETRANS = 11 +const _TCP_NLA_DELIVERY_RATE_APP_LMT = 12 +const _TCP_NLA_SNDQ_SIZE = 13 +const _TCP_NLA_CA_STATE = 14 +const _TCP_NLA_SND_SSTHRESH = 15 +const _TCP_NLA_DELIVERED = 16 +const _TCP_NLA_DELIVERED_CE = 17 +const _TCP_NLA_BYTES_SENT = 18 +const _TCP_NLA_BYTES_RETRANS = 19 +const _TCP_NLA_DSACK_DUPS = 20 +const _TCP_NLA_REORD_SEEN = 21 +const _TCP_NLA_SRTT = 22 +const _TCP_NLA_TIMEOUT_REHASH = 23 +const _TCP_NLA_BYTES_NOTSENT = 24 +const _TCP_NLA_EDT = 25 +const _TCP_NLA_TTL = 26 + +type Tnfds_t = uint64 + +type Tpollfd = struct { + Ffd int32 + Fevents int16 + Frevents int16 +} + +func _cleanup(tls *TLS, p uintptr) { + var i int32 + var pfd uintptr + _, _ = i, pfd + pfd = p + i = 0 + for { + if !((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= -int32(1)) { + break + } + if (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= 0 { + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd)) + } + goto _1 + _1: + ; + i++ + } +} + +func _mtime(tls *TLS) (r uint64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if Xclock_gettime(tls, int32(CLOCK_MONOTONIC), bp) < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSYS) { + Xclock_gettime(tls, CLOCK_REALTIME, bp) + } + return uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec)*uint64(1000) + uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000000)) +} + +func _start_tcp(tls *TLS, pfd uintptr, family int32, sa uintptr, sl Tsocklen_t, q uintptr, ql int32) (r1 int32) { + bp := tls.Alloc(96) + defer tls.Free(96) + var fd, r int32 + var _ /* mh at bp+40 */ Tmsghdr + _, _ = fd, r + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 32)) = [2]Tuint8_t{ + 0: uint8(ql >> int32(8)), + 1: uint8(ql), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: q, + Fiov_len: uint64(ql), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 40)) = Tmsghdr{ + Fmsg_name: sa, + Fmsg_namelen: sl, + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + fd = Xsocket(tls, family, Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = fd + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLOUT) + *(*int32)(unsafe.Pointer(bp + 36)) = int32(1) + if !(Xsetsockopt(tls, fd, int32(IPPROTO_TCP), int32(TCP_FASTOPEN_CONNECT), bp+36, uint32(4)) != 0) { + r = int32(Xsendmsg(tls, fd, bp+40, Int32FromInt32(MSG_FASTOPEN)|Int32FromInt32(MSG_NOSIGNAL))) + if r == ql+int32(2) { + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLIN) + } + if r >= 0 { + return r + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + } + r = Xconnect(tls, fd, sa, sl) + if !(r != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + Xclose(tls, fd) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = -int32(1) + return -int32(1) +} + +func _step_mh(tls *TLS, mh uintptr, n Tsize_t) { + /* Adjust iovec in msghdr to skip first n bytes. */ + for (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0 && n >= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len { + n -= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov += 16 + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen-- + } + if !((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0) { + return + } + (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base = (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base + uintptr(n) + *(*Tsize_t)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov + 8)) -= n +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + +func X__res_msend_rc(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32, conf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v conf=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, conf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var alen, attempts, family, fd, i, j, next, nns, r, rcode, retry_interval, rlen, servfail_retry, timeout, v17, v6 int32 + var alen_buf, apos, iplit, pfd, qpos uintptr + var sl Tsocklen_t + var t0, t1, t2, v10 uint64 + var v1, v2, v3, v4 t__predefined_size_t + var v18 bool + var _ /* __cb at bp+208 */ t__ptcb + var _ /* cs at bp+200 */ int32 + var _ /* mh at bp+232 */ Tmsghdr + var _ /* mh at bp+288 */ Tmsghdr + var _ /* mh at bp+344 */ Tmsghdr + var _ /* ns at bp+116 */ [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + var _ /* sa at bp+88 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alen, alen_buf, apos, attempts, family, fd, i, iplit, j, next, nns, pfd, qpos, r, rcode, retry_interval, rlen, servfail_retry, sl, t0, t1, t2, timeout, v1, v10, v17, v18, v2, v3, v4, v6 + defer func() { + Xrealloc(tls, alen_buf, 0) + Xrealloc(tls, apos, 0) + Xrealloc(tls, pfd, 0) + Xrealloc(tls, qpos, 0) + }() + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp + 88)) = uint16(0) + *(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)) = [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + sl = uint32(16) + nns = 0 + family = int32(PF_INET) + v1 = uint64(nqueries+int32(2)) * 8 + pfd = Xrealloc(tls, pfd, v1) + v2 = uint64(nqueries) * 4 + qpos = Xrealloc(tls, qpos, v2) + v3 = uint64(nqueries) * 4 + apos = Xrealloc(tls, apos, v3) + v4 = uint64(nqueries) * 2 + alen_buf = Xrealloc(tls, alen_buf, v4) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+200) + timeout = int32(uint32(1000) * (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout) + attempts = int32((*Tresolvconf)(unsafe.Pointer(conf)).Fattempts) + nns = 0 + for { + if !(uint32(nns) < (*Tresolvconf)(unsafe.Pointer(conf)).Fnns) { + break + } + iplit = conf + uintptr(nns)*28 + if (*Taddress)(unsafe.Pointer(iplit)).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+116+uintptr(nns)*28+4, iplit+8, uint64(4)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_port = Xhtons(tls, uint16(53)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_family = uint16(PF_INET) + } else { + sl = uint32(28) + Xmemcpy(tls, bp+116+uintptr(nns)*28+8, iplit+8, uint64(16)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_port = Xhtons(tls, uint16(53)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_scope_id = (*Taddress)(unsafe.Pointer(iplit)).Fscopeid + v6 = Int32FromInt32(PF_INET6) + family = v6 + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_family = uint16(v6) + } + goto _5 + _5: + ; + nns++ + } + /* Get local address and open/bind a socket */ + fd = Xsocket(tls, family, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + /* Handle case where system lacks IPv6 support */ + if fd < 0 && family == int32(PF_INET6) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + i = 0 + for { + if !(i < nns && (*(*Taddress)(unsafe.Pointer(conf + uintptr(nns)*28))).Ffamily == int32(PF_INET6)) { + break + } + goto _7 + _7: + ; + i++ + } + if i == nns { + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + fd = Xsocket(tls, int32(PF_INET), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + family = int32(PF_INET) + sl = uint32(16) + } + /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ + if fd >= 0 && family == int32(PF_INET6) { + *(*int32)(unsafe.Pointer(bp)) = 0 + Xsetsockopt(tls, fd, int32(IPPROTO_IPV6), int32(IPV6_V6ONLY), bp, uint32(4)) + i = 0 + for { + if !(i < nns) { + break + } + if int32((*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[i].Fsin.Fsin_family) != int32(PF_INET) { + goto _8 + } + Xmemcpy(tls, bp+116+uintptr(i)*28+8+uintptr(12), bp+116+uintptr(i)*28+4, uint64(4)) + Xmemcpy(tls, bp+116+uintptr(i)*28+8, __ccgo_ts+1066, uint64(12)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_family = uint16(PF_INET6) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_flowinfo = uint32(0) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_scope_id = uint32(0) + goto _8 + _8: + ; + i++ + } + } + (*(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88))).Fsin.Fsin_family = uint16(family) + if fd < 0 || Xbind(tls, fd, bp+88, sl) < 0 { + if fd >= 0 { + Xclose(tls, fd) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + i = 0 + for { + if !(i < nqueries) { + break + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + goto _9 + _9: + ; + i++ + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Ffd = fd + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = int16(POLLIN) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), (nqueries+int32(1))*8))).Ffd = -int32(2) + __pthread_cleanup_push(tls, bp+208, __ccgo_fp(_cleanup), pfd) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + Xmemset(tls, alens, 0, uint64(4)*uint64(nqueries)) + retry_interval = timeout / attempts + next = 0 + v10 = _mtime(tls) + t2 = v10 + t0 = v10 + t1 = t2 - uint64(retry_interval) + for { + if !(t2-t0 < uint64(timeout)) { + break + } + /* This is the loop exit condition: that all queries + * have an accepted answer. */ + i = 0 + for { + if !(i < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) > 0) { + break + } + goto _12 + _12: + ; + i++ + } + if i == nqueries { + break + } + if t2-t1 >= uint64(retry_interval) { + /* Query all configured namservers in parallel */ + i = 0 + for { + if !(i < nqueries) { + break + } + if !(*(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0) { + j = 0 + for { + if !(j < nns) { + break + } + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + goto _14 + _14: + ; + j++ + } + } + goto _13 + _13: + ; + i++ + } + t1 = t2 + servfail_retry = int32(2) * nqueries + } + /* Wait for a response, or until time to retry */ + if Xpoll(tls, pfd, uint64(nqueries+int32(1)), int32(t1+uint64(retry_interval)-t2)) <= 0 { + goto _11 + } + for next < nqueries { + *(*[1]Tiovec)(unsafe.Pointer(bp + 8)) = [1]Tiovec{ + 0: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 232)) = Tmsghdr{ + Fmsg_name: bp + 88, + Fmsg_namelen: sl, + Fmsg_iov: bp + 8, + Fmsg_iovlen: int32(1), + } + rlen = int32(Xrecvmsg(tls, fd, bp+232, 0)) + if rlen < 0 { + break + } + /* Ignore non-identifiable packets */ + if rlen < int32(4) { + continue + } + /* Ignore replies from addresses we didn't send to */ + j = 0 + for { + if !(j < nns && Xmemcmp(tls, bp+116+uintptr(j)*28, bp+88, uint64(sl)) != 0) { + break + } + goto _15 + _15: + ; + j++ + } + if j == nns { + continue + } + /* Find which query this answer goes with, if any */ + i = next + for { + if !(i < nqueries && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8))))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8))))) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 1))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)) + 1))))) { + break + } + goto _16 + _16: + ; + i++ + } + if i == nqueries { + continue + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0 { + continue + } + /* Only accept positive or negative responses; + * retry immediately on server failure, and ignore + * all other codes such as refusal. */ + switch int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 3))) & Int32FromInt32(15) { + case 0: + fallthrough + case int32(3): + case int32(2): + if v18 = servfail_retry != 0; v18 { + v17 = servfail_retry + servfail_retry-- + } + if v18 && v17 != 0 { + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + } + fallthrough + default: + continue + } + /* Store answer in the right slot, or update next + * available temp slot if it's already in place. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = rlen + if i == next { + for { + if !(next < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(next)*4)) != 0) { + break + } + goto _19 + _19: + ; + next++ + } + } else { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), uint64(rlen)) + } + /* Ignore further UDP if all slots full or TCP-mode */ + if next == nqueries { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = 0 + } + /* If answer is truncated (TC bit), fallback to TCP */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 2)))&int32(2) != 0 || (*(*Tmsghdr)(unsafe.Pointer(bp + 232))).Fmsg_flags&int32(MSG_TRUNC) != 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = -int32(1) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), uintptr(0)) + r = _start_tcp(tls, pfd+uintptr(i)*8, family, bp+116+uintptr(j)*28, sl, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + if r >= 0 { + *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) = r + *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) = 0 + } + continue + } + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLOUT) != 0 { + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 52)) = [2]Tuint8_t{ + 0: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4)) >> int32(8)), + 1: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + } + *(*[2]Tiovec)(unsafe.Pointer(bp + 24)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 52, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), + Fiov_len: uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 288)) = Tmsghdr{ + Fmsg_iov: bp + 24, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+288, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)))) + r = int32(Xsendmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+288, int32(MSG_NOSIGNAL))) + if r < 0 { + goto out + } + *(*int32)(unsafe.Pointer(qpos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) == *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))+int32(2) { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Fevents = int16(POLLIN) + } + } + goto _20 + _20: + ; + i++ + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLIN) != 0 { + *(*[2]Tiovec)(unsafe.Pointer(bp + 56)) = [2]Tiovec{ + 0: { + Fiov_base: alen_buf + uintptr(i)*2, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 344)) = Tmsghdr{ + Fmsg_iov: bp + 56, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+344, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)))) + r = int32(Xrecvmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+344, 0)) + if r <= 0 { + goto out + } + *(*int32)(unsafe.Pointer(apos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < int32(2) { + goto _21 + } + alen = int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2 + 1))) + if alen < int32(13) { + goto out + } + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < alen+int32(2) && *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < asize+int32(2) { + goto _21 + } + rcode = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 3))) & int32(15) + if rcode != 0 && rcode != int32(3) { + goto out + } + /* Storing the length here commits the accepted answer. + * Immediately close TCP socket so as not to consume + * resources we no longer need. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = alen + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd)) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + } + goto _21 + _21: + ; + i++ + } + goto _11 + _11: + ; + t2 = _mtime(tls) + } + goto out +out: + ; + __pthread_cleanup_pop(tls, bp+208, int32(1)) + /* Disregard any incomplete TCP results */ + i = 0 + for { + if !(i < nqueries) { + break + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = 0 + } + goto _22 + _22: + ; + i++ + } + return 0 +} + +func X__res_msend(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var _ /* conf at bp+0 */ Tresolvconf + if X__get_resolv_conf(tls, bp, uintptr(0), uint64(0)) < 0 { + return -int32(1) + } + return X__res_msend_rc(tls, nqueries, queries, qlens, answers, alens, asize, bp) +} + +func X__res_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(544) + defer tls.Free(544) + *(*uintptr)(unsafe.Pointer(bp)) = _msg + *(*int32)(unsafe.Pointer(bp + 8)) = _msglen + *(*uintptr)(unsafe.Pointer(bp + 16)) = _answer + *(*int32)(unsafe.Pointer(bp + 24)) = _anslen + var r, v1, v2 int32 + var _ /* buf at bp+28 */ [512]uint8 + _, _, _ = r, v1, v2 + if *(*int32)(unsafe.Pointer(bp + 24)) < int32(512) { + r = X__res_send(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+28, int32(512)) + if r >= 0 { + if r < *(*int32)(unsafe.Pointer(bp + 24)) { + v1 = r + } else { + v1 = *(*int32)(unsafe.Pointer(bp + 24)) + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), bp+28, uint64(v1)) + } + return r + } + r = X__res_msend(tls, int32(1), bp, bp+8, bp+16, bp+24, *(*int32)(unsafe.Pointer(bp + 24))) + if r < 0 || !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { + v2 = -int32(1) + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 24)) + } + return v2 +} + +func Xres_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_send(tls, _msg, _msglen, _answer, _anslen) +} + +/* This is completely unused, and exists purely to satisfy broken apps. */ + +func X__res_state(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_res1)) +} + +var _res1 t__res_state + +func X__get_resolv_conf(tls *TLS, conf uintptr, search uintptr, search_sz Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v conf=%v search=%v search_sz=%v, (%v:)", tls, conf, search, search_sz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(752) + defer tls.Free(752) + var c, nns, v1, v13, v14, v17, v18, v2, v21, v22, v26, v27, v8, v9 int32 + var f, p uintptr + var l Tsize_t + var x, x1, x2, v5, v6, v7 uint64 + var v11, v20, v24, v4 bool + var _ /* _buf at bp+256 */ [256]uint8 + var _ /* _f at bp+512 */ TFILE + var _ /* line at bp+0 */ [256]uint8 + var _ /* z at bp+744 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, f, l, nns, p, x, x1, x2, v1, v11, v13, v14, v17, v18, v2, v20, v21, v22, v24, v26, v27, v4, v5, v6, v7, v8, v9 + nns = 0 + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(1) + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(5) + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(2) + if search != 0 { + *(*uint8)(unsafe.Pointer(search)) = uint8(0) + } + f = X__fopen_rb_ca(tls, __ccgo_ts+1188, bp+512, bp+256, uint64(256)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + goto no_resolv_conf + default: + return -int32(1) + } + } + for Xfgets(tls, bp, int32(256), f) != 0 { + if !(Xstrchr(tls, bp, int32('\n')) != 0) && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + for cond := true; cond; cond = c != int32('\n') && c != -int32(1) { + c = Xgetc(tls, f) + } + continue + } + if v4 = !(Xstrncmp(tls, bp, __ccgo_ts+1205, uint64(7)) != 0); v4 { + v1 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(7)]) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + } + if v4 && v2 != 0 { + p = Xstrstr(tls, bp, __ccgo_ts+1213) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 6)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(6) + x = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x > uint64(15) { + v5 = uint64(15) + } else { + v5 = x + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(v5) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1220) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 9)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(9) + x1 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x1 > uint64(10) { + v6 = uint64(10) + } else { + v6 = x1 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(v6) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1230) + if p != 0 && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 8)))-uint32('0') < uint32(10)) != 0 || int32(*(*uint8)(unsafe.Pointer(p + 8))) == int32('.')) { + p += uintptr(8) + x2 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x2 > uint64(60) { + v7 = uint64(60) + } else { + v7 = x2 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(v7) + } + } + continue + } + if v11 = !(Xstrncmp(tls, bp, __ccgo_ts+1239, uint64(10)) != 0); v11 { + v8 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(10)]) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + if v11 && v9 != 0 { + if nns >= int32(MAXNS) { + continue + } + p = bp + uintptr(11) + for { + v13 = int32(*(*uint8)(unsafe.Pointer(p))) + v14 = BoolInt32(v13 == int32(' ') || uint32(v13)-uint32('\t') < uint32(5)) + goto _15 + _15: + if !(v14 != 0) { + break + } + goto _12 + _12: + ; + p++ + } + *(*uintptr)(unsafe.Pointer(bp + 744)) = p + for { + if v20 = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) != 0; v20 { + v17 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744))))) + v18 = BoolInt32(v17 == int32(' ') || uint32(v17)-uint32('\t') < uint32(5)) + goto _19 + _19: + } + if !(v20 && !(v18 != 0)) { + break + } + goto _16 + _16: + ; + *(*uintptr)(unsafe.Pointer(bp + 744))++ + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) = uint8(0) + if X__lookup_ipliteral(tls, conf+uintptr(nns)*28, p, PF_UNSPEC) > 0 { + nns++ + } + continue + } + if !(search != 0) { + continue + } + if v24 = Xstrncmp(tls, bp, __ccgo_ts+1250, uint64(6)) != 0 && Xstrncmp(tls, bp, __ccgo_ts+1257, uint64(6)) != 0; !v24 { + v21 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(6)]) + v22 = BoolInt32(v21 == int32(' ') || uint32(v21)-uint32('\t') < uint32(5)) + goto _23 + _23: + } + if v24 || !(v22 != 0) { + continue + } + p = bp + uintptr(7) + for { + v26 = int32(*(*uint8)(unsafe.Pointer(p))) + v27 = BoolInt32(v26 == int32(' ') || uint32(v26)-uint32('\t') < uint32(5)) + goto _28 + _28: + if !(v27 != 0) { + break + } + goto _25 + _25: + ; + p++ + } + l = Xstrlen(tls, p) + /* This can never happen anyway with chosen buffer sizes. */ + if l >= search_sz { + continue + } + Xmemcpy(tls, search, p, l+uint64(1)) + } + X__fclose_ca(tls, f) + goto no_resolv_conf +no_resolv_conf: + ; + if !(nns != 0) { + X__lookup_ipliteral(tls, conf, __ccgo_ts+1264, PF_UNSPEC) + nns = int32(1) + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fnns = uint32(nns) + return 0 +} + +func Xsend(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsendto(tls, fd, buf, len1, flags, uintptr(0), uint32(0)) +} + +func Xsendmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v, (%v:)", tls, fd, msgvec, vlen, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, v2 int32 + var r Tssize_t + _, _, _ = i, r, v2 + if vlen > uint32(IOV_MAX) { + vlen = uint32(IOV_MAX) + } /* This matches the kernel. */ + if !(vlen != 0) { + return 0 + } + i = 0 + for { + if !(uint32(i) < vlen) { + break + } + /* As an unfortunate inconsistency, the sendmmsg API uses + * unsigned int for the resulting msg_len, despite sendmsg + * returning ssize_t. However Linux limits the total bytes + * sent by sendmsg to INT_MAX, so the assignment is safe. */ + r = Xsendmsg(tls, fd, msgvec+uintptr(i)*64, int32(flags)) + if r < 0 { + goto error + } + (*(*Tmmsghdr)(unsafe.Pointer(msgvec + uintptr(i)*64))).Fmsg_len = uint32(r) + goto _1 + _1: + ; + i++ + } + goto error +error: + ; + if i != 0 { + v2 = i + } else { + v2 = -int32(1) + } + return v2 + return r1 +} + +func Xsendmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1120) + defer tls.Free(1120) + var c1, v3, v4 uintptr + var r, v12 int64 + var v1, v5 int32 + var v10, v11, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* chbuf at bp+56 */ [66]Tcmsghdr + var _ /* h at bp+0 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, r, v1, v10, v11, v12, v3, v4, v5, v6, v7, v8, v9 + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp))).F__pad1 = v1 + msg = bp + if (*(*Tmsghdr)(unsafe.Pointer(bp))).Fmsg_controllen != 0 { + if uint64((*(*Tmsghdr)(unsafe.Pointer(bp))).Fmsg_controllen) > uint64(1056) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + Xmemcpy(tls, bp+56, (*(*Tmsghdr)(unsafe.Pointer(bp))).Fmsg_control, uint64((*(*Tmsghdr)(unsafe.Pointer(bp))).Fmsg_controllen)) + (*(*Tmsghdr)(unsafe.Pointer(bp))).Fmsg_control = bp + 56 + if uint64((*Tmsghdr)(unsafe.Pointer(bp)).Fmsg_controllen) >= uint64(16) { + v3 = (*Tmsghdr)(unsafe.Pointer(bp)).Fmsg_control + } else { + v3 = UintptrFromInt32(0) + } + c1 = v3 + for { + if !(c1 != 0) { + break + } + (*Tcmsghdr)(unsafe.Pointer(c1)).F__pad1 = 0 + goto _2 + _2: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(bp)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(bp)).Fmsg_controllen))-int64(c1)) { + v4 = uintptr(0) + } else { + v4 = c1 + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + c1 = v4 + } + } + } + v5 = int32(SYS_sendmsg) + _ = int32(__SC_sendmsg) + v6 = int64(fd) + v7 = int64(msg) + v8 = int64(flags) + v9 = int64(Int32FromInt32(0)) + v10 = int64(Int32FromInt32(0)) + v11 = int64(Int32FromInt32(0)) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v5), v6, v7, v8, v9, v10, v11) + } else { + r = X__syscall6(tls, int64(v5), v6, v7, v8, v9, v10, v11) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v12 = r + goto _13 + } + v12 = r + goto _13 +_13: + return X__syscall_ret(tls, uint64(v12)) +} + +func Xsendto(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen Tsocklen_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_sendto) + _ = int32(__SC_sendto) + v2 = int64(fd) + v3 = int64(buf) + v4 = int64(len1) + v5 = int64(flags) + v6 = int64(addr) + v7 = int64(alen) + if int32(1) != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return X__syscall_ret(tls, uint64(v8)) +} + +func Xendservent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetservent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } +} + +func Xgetservent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xsetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen Tsocklen_t) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r, v18, v27, v8 int64 + var r1, v1, v11, v20 int32 + var s Ttime_t + var tv uintptr + var us Tsuseconds_t + var v10 uint64 + var v12, v13, v14, v15, v16, v17, v2, v21, v22, v23, v24, v25, v26, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, s, tv, us, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v2, v20, v21, v22, v23, v24, v25, v26, v27, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v2 = int64(fd) + v3 = int64(level) + v4 = int64(optname) + v5 = int64(optval) + v6 = int64(optlen) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = int32(v8) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if true { + break + } + if uint64(optlen) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + tv = optval + s = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + us = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + if !((uint64(us)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v10 = uint64(us) + } else { + v10 = uint64(0x7fffffff) + (0+uint64(us))>>int32(63) + } + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: int64(int32(v10)), + } + v11 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v12 = int64(fd) + v13 = int64(level) + v14 = int64(optname) + v15 = int64(bp) + v16 = int64(Uint64FromInt32(2) * Uint64FromInt64(8)) + v17 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v11), v12, v13, v14, v15, v16, v17) + } else { + r = X__syscall6(tls, int64(v11), v12, v13, v14, v15, v16, v17) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v18 = r + goto _19 + } + v18 = r + goto _19 + _19: + r1 = int32(v18) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v20 = int32(SYS_setsockopt) + _ = int32(__SC_setsockopt) + v21 = int64(fd) + v22 = int64(level) + v23 = int64(optname) + v24 = int64(optval) + v25 = int64(optlen) + v26 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v20), v21, v22, v23, v24, v25, v26) + } else { + r = X__syscall6(tls, int64(v20), v21, v22, v23, v24, v25, v26) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v27 = r + goto _28 + } + v27 = r + goto _28 + _28: + r1 = int32(v27) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func Xshutdown(tls *TLS, fd int32, how int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v how=%v, (%v:)", tls, fd, how, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v8 int64 + var v1 int32 + var v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _ = r, v1, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_shutdown) + _ = int32(__SC_shutdown) + v2 = int64(fd) + v3 = int64(how) + v4 = int64(Int32FromInt32(0)) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + return int32(X__syscall_ret(tls, uint64(v8))) +} + +func Xsockatmark(tls *TLS, s int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* ret at bp+0 */ int32 + if Xioctl(tls, s, int32(SIOCATMARK), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xsocket(tls *TLS, domain int32, type1 int32, protocol int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v, (%v:)", tls, domain, type1, protocol, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v17, v8 int64 + var s, v1, v10 int32 + var v11, v12, v13, v14, v15, v16, v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, s, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_socket) + _ = int32(__SC_socket) + v2 = int64(domain) + v3 = int64(type1) + v4 = int64(protocol) + v5 = int64(Int32FromInt32(0)) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + s = int32(v8) + if (s == -int32(EINVAL) || s == -int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v10 = int32(SYS_socket) + _ = int32(__SC_socket) + v11 = int64(domain) + v12 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v13 = int64(protocol) + v14 = int64(Int32FromInt32(0)) + v15 = int64(Int32FromInt32(0)) + v16 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + s = int32(v17) + if s < 0 { + return int32(X__syscall_ret(tls, uint64(s))) + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return int32(X__syscall_ret(tls, uint64(s))) +} + +func Xsocketpair(tls *TLS, domain int32, type1 int32, protocol int32, fd uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v fd=%v, (%v:)", tls, domain, type1, protocol, fd, origin(2)) + defer func() { trc("-> %v", r2) }() + } + var r, v17, v8 int64 + var r1, v1, v10 int32 + var v11, v12, v13, v14, v15, v16, v2, v3, v4, v5, v6, v7 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + v1 = int32(SYS_socketpair) + _ = int32(__SC_socketpair) + v2 = int64(domain) + v3 = int64(type1) + v4 = int64(protocol) + v5 = int64(fd) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } else { + r = X__syscall6(tls, int64(v1), v2, v3, v4, v5, v6, v7) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v8 = r + goto _9 + } + v8 = r + goto _9 +_9: + r1 = int32(X__syscall_ret(tls, uint64(v8))) + if r1 < 0 && (*(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINVAL) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v10 = int32(SYS_socketpair) + _ = int32(__SC_socketpair) + v11 = int64(domain) + v12 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v13 = int64(protocol) + v14 = int64(fd) + v15 = int64(Int32FromInt32(0)) + v16 = int64(Int32FromInt32(0)) + if 0 != 0 { + r = ___syscall_cp(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } else { + r = X__syscall6(tls, int64(v10), v11, v12, v13, v14, v15, v16) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v17 = r + goto _18 + } + v17 = r + goto _18 + _18: + r1 = int32(X__syscall_ret(tls, uint64(v17))) + if r1 < 0 { + return r1 + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return r1 +} + +const SHADOW = "/etc/shadow" + +type Tgroup = struct { + Fgr_name uintptr + Fgr_passwd uintptr + Fgr_gid Tgid_t + Fgr_mem uintptr +} + +type Tspwd = struct { + Fsp_namp uintptr + Fsp_pwdp uintptr + Fsp_lstchg int64 + Fsp_min int64 + Fsp_max int64 + Fsp_warn int64 + Fsp_inact int64 + Fsp_expire int64 + Fsp_flag uint64 +} + +func Xfgetgrent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgrent_a(tls, f, uintptr(unsafe.Pointer(&_gr)), uintptr(unsafe.Pointer(&_line1)), bp+8, uintptr(unsafe.Pointer(&_mem)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _line1 uintptr + +var _mem uintptr + +var _gr Tgroup + +func Xfgetpwent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+8 */ uintptr + var _ /* size at bp+0 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + X__getpwent_a(tls, f, uintptr(unsafe.Pointer(&_pw)), uintptr(unsafe.Pointer(&_line2)), bp, bp+8) + return *(*uintptr)(unsafe.Pointer(bp + 8)) +} + +var _line2 uintptr + +var _pw Tpasswd + +const GETGRBYGID = 3 +const GETGRBYNAME = 2 +const GETINITGR = 15 +const GETPWBYNAME = 0 +const GETPWBYUID = 1 +const GRFOUND = 1 +const GRGID = 4 +const GRMEMCNT = 5 +const GRNAMELEN = 2 +const GRPASSWDLEN = 3 +const GRVERSION = 0 +const GR_LEN = 6 +const INITGRFOUND = 1 +const INITGRNGRPS = 2 +const INITGRVERSION = 0 +const INITGR_LEN = 3 +const NSCDVERSION = 2 +const PWDIRLEN = 7 +const PWFOUND = 1 +const PWGECOSLEN = 6 +const PWGID = 5 +const PWNAMELEN = 2 +const PWPASSWDLEN = 3 +const PWSHELLLEN = 8 +const PWUID = 4 +const PWVERSION = 0 +const PW_LEN = 9 +const REQKEYLEN = 2 +const REQTYPE = 1 +const REQVERSION = 0 +const REQ_LEN = 3 + +func _itoa1(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getgr_a(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gid=%v gr=%v buf=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, name, gid, gr, buf, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var f, key, ptr, tmp, tmp1 uintptr + var grlist_len, len1 Tsize_t + var i, req, v10 Tint32_t + var rv, v1, v2, v4, v8 int32 + var v5, v6 Tuint32_t + var _ /* cs at bp+0 */ int32 + var _ /* gidbuf at bp+28 */ [11]uint8 + var _ /* groupbuf at bp+4 */ [6]Tint32_t + var _ /* name_len at bp+44 */ Tuint32_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, grlist_len, i, key, len1, ptr, req, rv, tmp, tmp1, v1, v10, v2, v4, v5, v6, v8 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + f = Xfopen(tls, __ccgo_ts+1274, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getgrent_a(tls, f, gr, buf, size, mem, nmem, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_name) != 0) || !(name != 0) && (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_gid == gid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = int32(GETGRBYNAME) + } else { + v2 = int32(GETGRBYGID) + } + req = v2 + *(*[6]Tint32_t)(unsafe.Pointer(bp + 4)) = [6]Tint32_t{} + len1 = uint64(0) + grlist_len = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 28)) = [11]uint8{} + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + if name != 0 { + key = name + } else { + if gid < uint32(0) || gid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa1(tls, bp+28, gid) + } + f = X__nscd_query(tls, req, key, bp+4, uint64(24), bp+40) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] != 0) || !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) > uint64(0xffffffffffffffff)-uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] + (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + i = 0 + for { + if !(i < (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]) { + break + } + if Xfread(tls, bp+44, uint64(4), uint64(1), f) < uint64(1) { + if Xferror(tls, f) != 0 { + v4 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v4 = int32(EIO) + } + rv = v4 + goto cleanup_f + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + v5 = *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + v6 = v5>>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< uint64(0xffffffffffffffff)-grlist_len || uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) > uint64(0xffffffffffffffff)-len1 { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + grlist_len += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + goto _3 + _3: + ; + i++ + } + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v8 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v8 = int32(EIO) + } + rv = v8 + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > *(*Tsize_t)(unsafe.Pointer(nmem)) { + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + tmp1 = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(mem)), uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+Int32FromInt32(1))*uint64(8)) + if !(tmp1 != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(mem)) = tmp1 + *(*Tsize_t)(unsafe.Pointer(nmem)) = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] + int32(1)) + } + if (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = *(*uintptr)(unsafe.Pointer(buf)) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + ptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) + i = Int32FromInt32(0) + for { + if !(ptr != *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem))))+uintptr(grlist_len)) { + break + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + i++ + v10 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v10)*8)) = ptr + uintptr(1) + } + goto _9 + _9: + ; + ptr++ + } + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(i)*8)) = uintptr(0) + if i != (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] { + rv = int32(EIO) + goto cleanup_f + } + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = (*Tgroup)(unsafe.Pointer(gr)).Fgr_name + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRGID)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + if *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name) != 0 || !(name != 0) && gid != (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = gr + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getgr_r(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i Tsize_t + var rv int32 + var _ /* cs at bp+32 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + var _ /* mem at bp+16 */ uintptr + var _ /* nmem at bp+24 */ Tsize_t + _, _ = i, rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 24)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+32) + rv = X__getgr_a(tls, name, gid, gr, bp, bp+8, bp+16, bp+24, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8))+(*(*Tsize_t)(unsafe.Pointer(bp + 24))+uint64(1))*uint64(8)+uint64(32) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + buf += uintptr((uint64(16) - uint64(buf)) % uint64(16)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = buf + buf += uintptr((*(*Tsize_t)(unsafe.Pointer(bp + 24)) + uint64(1)) * uint64(8)) + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)) != 0) { + break + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(int64(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)))-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + goto _1 + _1: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(0) + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 32)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrnam_r(tls *TLS, name uintptr, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, name, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, name, uint32(0), gr, buf, size, res) +} + +func Xgetgrgid_r(tls *TLS, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, gid, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, uintptr(0), gid, gr, buf, size, res) +} + +var _f1 uintptr +var _line3 uintptr +var _mem1 uintptr +var _gr1 Tgroup + +func Xsetgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f1 != 0 { + Xfclose(tls, _f1) + } + _f1 = uintptr(0) +} + +func Xgetgrent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + if !(_f1 != 0) { + _f1 = Xfopen(tls, __ccgo_ts+1274, __ccgo_ts+315) + } + if !(_f1 != 0) { + return uintptr(0) + } + X__getgrent_a(tls, _f1, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrgid(tls *TLS, gid Tgid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, uintptr(0), gid, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetgrent(tls) +} + +func _atou(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getgrent_a(tls *TLS, f uintptr, gr uintptr, line uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v gr=%v line=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, f, gr, line, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v13, v14 Tsize_t + var l, v2 Tssize_t + var mems, v12, v4, v5, v6, v7, v8, v9 uintptr + var rv, v3 int32 + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, mems, rv, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = _atou(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + mems = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + *(*Tsize_t)(unsafe.Pointer(nmem)) = BoolUint64(!!(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + *(*Tsize_t)(unsafe.Pointer(nmem))++ + } + goto _10 + _10: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(mem))) + *(*uintptr)(unsafe.Pointer(mem)) = Xcalloc(tls, uint64(8), *(*Tsize_t)(unsafe.Pointer(nmem))+uint64(1)) + if !(*(*uintptr)(unsafe.Pointer(mem)) != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + if *(*uint8)(unsafe.Pointer(mems)) != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = mems + *(*uintptr)(unsafe.Pointer(bp)) = mems + i = Uint64FromInt32(0) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + i++ + v13 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v13)*8)) = *(*uintptr)(unsafe.Pointer(bp)) + } + goto _11 + _11: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + i++ + v14 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v14)*8)) = uintptr(0) + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + goto end +end: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = gr + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrouplist(tls *TLS, user uintptr, gid Tgid_t, groups uintptr, ngroups uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v user=%v gid=%v groups=%v ngroups=%v, (%v:)", tls, user, gid, groups, ngroups, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var f, nscdbuf, v1, v10, v13 uintptr + var i, n, v12, v9 Tssize_t + var nbytes Tsize_t + var nlim, ret, rv, v6 int32 + var v14 int64 + var v3, v4 Tuint32_t + var _ /* buf at bp+56 */ uintptr + var _ /* gr at bp+0 */ Tgroup + var _ /* mem at bp+64 */ uintptr + var _ /* nmem at bp+72 */ Tsize_t + var _ /* res at bp+32 */ uintptr + var _ /* resp at bp+44 */ [3]Tint32_t + var _ /* size at bp+80 */ Tsize_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, n, nbytes, nlim, nscdbuf, ret, rv, v1, v10, v12, v13, v14, v3, v4, v6, v9 + ret = -int32(1) + n = int64(1) + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + nscdbuf = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 72)) = uint64(0) + nlim = *(*int32)(unsafe.Pointer(ngroups)) + if nlim >= int32(1) { + v1 = groups + groups += 4 + *(*Tgid_t)(unsafe.Pointer(v1)) = gid + } + f = X__nscd_query(tls, int32(GETINITGR), user, bp+44, uint64(12), bp+40) + if !(f != 0) { + goto cleanup + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRFOUND)] != 0 { + nscdbuf = Xcalloc(tls, uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]), uint64(4)) + if !(nscdbuf != 0) { + goto cleanup + } + nbytes = uint64(4) * uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]) + if nbytes != 0 && !(Xfread(tls, nscdbuf, nbytes, uint64(1), f) != 0) { + if !(Xferror(tls, f) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + } + goto cleanup + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + i = 0 + for { + if !(i < int64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)])) { + break + } + v3 = *(*Tuint32_t)(unsafe.Pointer(nscdbuf + uintptr(i)*4)) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3< int64(nlim) { + v14 = int64(-int32(1)) + } else { + v14 = n + } + ret = int32(v14) + *(*int32)(unsafe.Pointer(ngroups)) = int32(n) + goto cleanup +cleanup: + ; + if f != 0 { + Xfclose(tls, f) + } + Xfree(tls, nscdbuf) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) + return ret +} + +func _itoa2(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getpw_a(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, key, tmp uintptr + var len1 Tsize_t + var req Tint32_t + var rv, v1, v2, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* passwdbuf at bp+8 */ [9]Tint32_t + var _ /* uidbuf at bp+44 */ [11]uint8 + _, _, _, _, _, _, _, _, _ = f, key, len1, req, rv, tmp, v1, v2, v3 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + f = Xfopen(tls, __ccgo_ts+1285, __ccgo_ts+315) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getpwent_a(tls, f, pw, buf, size, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_name) != 0) || !(name != 0) && (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_uid == uid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = GETPWBYNAME + } else { + v2 = int32(GETPWBYUID) + } + req = v2 + *(*[9]Tint32_t)(unsafe.Pointer(bp + 8)) = [9]Tint32_t{} + len1 = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 44)) = [11]uint8{} + if name != 0 { + key = name + } else { + /* uid outside of this range can't be queried with the + * nscd interface, but might happen if uid_t ever + * happens to be a larger type (this is not true as of + * now) + */ + if uid < uint32(0) || uid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa2(tls, bp+44, uid) + } + *(*[1]int32)(unsafe.Pointer(bp)) = [1]int32{} + f = X__nscd_query(tls, req, key, bp+8, uint64(36), bp) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + /* A zero length response from nscd is invalid. We ignore + * invalid responses and just report an error, rather than + * trying to do something with them. + */ + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) >= Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = int32(EIO) + } + rv = v3 + goto cleanup_f + } + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWUID)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGID)]) + /* Don't assume that nscd made sure to null terminate strings. + * It's supposed to, but malicious nscd should be ignored + * rather than causing a crash. + */ + if *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name) != 0 || !(name != 0) && uid != (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = pw + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getpw_r(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var rv int32 + var _ /* cs at bp+16 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + _ = rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+16) + rv = X__getpw_a(tls, name, uid, pw, bp, bp+8, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8)) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 16)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetpwnam_r(tls *TLS, name uintptr, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, name, uint32(0), pw, buf, size, res) +} + +func Xgetpwuid_r(tls *TLS, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, uintptr(0), uid, pw, buf, size, res) +} + +var _f2 uintptr +var _line4 uintptr +var _pw1 Tpasswd +var _size Tsize_t + +func Xsetpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f2 != 0 { + Xfclose(tls, _f2) + } + _f2 = uintptr(0) +} + +func Xgetpwent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if !(_f2 != 0) { + _f2 = Xfopen(tls, __ccgo_ts+1285, __ccgo_ts+315) + } + if !(_f2 != 0) { + return uintptr(0) + } + X__getpwent_a(tls, _f2, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwuid(tls *TLS, uid Tuid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, uintptr(0), uid, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetpwent(tls) +} + +func _atou1(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getpwent_a(tls *TLS, f uintptr, pw uintptr, line uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pw=%v line=%v size=%v res=%v, (%v:)", tls, f, pw, line, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v2 Tssize_t + var rv, v3 int32 + var v10, v11, v12, v13, v14, v4, v5, v6, v7, v8, v9 uintptr + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = l, rv, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + pw = uintptr(0) + break + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v10 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v10)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = *(*uintptr)(unsafe.Pointer(bp)) + v11 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v11 + if !(v11 != 0) { + goto _1 + } + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = *(*uintptr)(unsafe.Pointer(bp)) + v13 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v13 + if !(v13 != 0) { + goto _1 + } + v14 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = pw + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xsetspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetspent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xlckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xulckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +var _addr = struct { + Fsun_family int16 + Fsun_path [21]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [21]uint8{'/', 'v', 'a', 'r', '/', 'r', 'u', 'n', '/', 'n', 's', 'c', 'd', '/', 's', 'o', 'c', 'k', 'e', 't'}, +} + +func X__nscd_query(tls *TLS, req Tint32_t, key uintptr, buf uintptr, len1 Tsize_t, swap uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v req=%v key=%v buf=%v len1=%v swap=%v, (%v:)", tls, req, key, buf, len1, swap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var errno_save, fd int32 + var f, v1 uintptr + var i Tsize_t + var v3, v4, v7, v8 Tuint32_t + var _ /* msg at bp+48 */ Tmsghdr + var _ /* req_buf at bp+32 */ [3]Tint32_t + _, _, _, _, _, _, _, _, _ = errno_save, f, fd, i, v1, v3, v4, v7, v8 + f = uintptr(0) + *(*[3]Tint32_t)(unsafe.Pointer(bp + 32)) = [3]Tint32_t{ + 0: int32(NSCDVERSION), + 1: req, + 2: int32(Xstrnlen(tls, key, uint64(LOGIN_NAME_MAX)) + uint64(1)), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(12), + }, + 1: { + Fiov_base: key, + Fiov_len: Xstrlen(tls, key) + uint64(1), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 48)) = Tmsghdr{ + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + *(*int32)(unsafe.Pointer(swap)) = 0 + goto retry +retry: + ; + Xmemset(tls, buf, 0, len1) + *(*Tint32_t)(unsafe.Pointer(buf)) = int32(NSCDVERSION) + fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if fd < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + f = Xfopen(tls, __ccgo_ts+1297, __ccgo_ts+1307) + if f != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + } + return f + } + return uintptr(0) + } + v1 = Xfdopen(tls, fd, __ccgo_ts+1310) + f = v1 + if !(v1 != 0) { + Xclose(tls, fd) + return uintptr(0) + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[int32(2)] > int32(LOGIN_NAME_MAX) { + return f + } + if Xconnect(tls, fd, uintptr(unsafe.Pointer(&_addr)), uint32(24)) < 0 { + /* If there isn't a running nscd we simulate a "not found" + * result and the caller is responsible for calling + * fclose on the (unconnected) socket. The value of + * errno must be left unchanged in this case. */ + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ECONNREFUSED) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + return f + } + goto error + } + if Xsendmsg(tls, fd, bp+48, int32(MSG_NOSIGNAL)) < 0 { + goto error + } + if !(Xfread(tls, buf, len1, uint64(1), f) != 0) { + /* If the VERSION entry mismatches nscd will disconnect. The + * most likely cause is that the endianness mismatched. So, we + * byteswap and try once more. (if we already swapped, just + * fail out) + */ + if Xferror(tls, f) != 0 { + goto error + } + if !(*(*int32)(unsafe.Pointer(swap)) != 0) { + Xfclose(tls, f) + i = uint64(0) + for { + if !(i < Uint64FromInt64(12)/Uint64FromInt64(4)) { + break + } + v3 = uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[i]) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7< %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var r, v1, v3, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = i, r, v1, v3, v4, v5 + Xflockfile(tls, f) + v1 = Xfprintf(tls, f, __ccgo_ts+1312, VaList(bp+8, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd, (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid)) + r = v1 + if v1 < 0 { + goto done + } + if (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem != 0 { + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) != 0) { + break + } + if i != 0 { + v4 = __ccgo_ts + 1322 + } else { + v4 = __ccgo_ts + } + v3 = Xfprintf(tls, f, __ccgo_ts+1324, VaList(bp+8, v4, *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)))) + r = v3 + if v3 < 0 { + goto done + } + goto _2 + _2: + ; + i++ + } + } + r = Xfputc(tls, int32('\n'), f) + goto done +done: + ; + Xfunlockfile(tls, f) + if r < 0 { + v5 = -int32(1) + } else { + v5 = 0 + } + return v5 +} + +func Xputpwent(tls *TLS, pw uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pw=%v f=%v, (%v:)", tls, pw, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var v1 int32 + _ = v1 + if Xfprintf(tls, f, __ccgo_ts+1329, VaList(bp+8, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xputspent(tls *TLS, sp uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sp=%v f=%v, (%v:)", tls, sp, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1, v10, v12, v14, v16, v4, v6, v8 int32 + var v11, v13, v15, v5, v7, v9 int64 + var v17 uint64 + var v2, v3 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8, v9 + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp != 0 { + v2 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp + } else { + v2 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp != 0 { + v3 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp + } else { + v3 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v4 = 0 + } else { + v4 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v5 = 0 + } else { + v5 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v6 = 0 + } else { + v6 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v7 = 0 + } else { + v7 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_min + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v8 = 0 + } else { + v8 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v9 = 0 + } else { + v9 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_max + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v10 = 0 + } else { + v10 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v11 = 0 + } else { + v11 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v12 = 0 + } else { + v12 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v13 = 0 + } else { + v13 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v14 = 0 + } else { + v14 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v15 = 0 + } else { + v15 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v16 = 0 + } else { + v16 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v17 = uint64(0) + } else { + v17 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag + } + if Xfprintf(tls, f, __ccgo_ts+1351, VaList(bp+8, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func X__rand48_step(tls *TLS, xi uintptr, lc uintptr) (r Tuint64_t) { + if __ccgo_strace { + trc("tls=%v xi=%v lc=%v, (%v:)", tls, xi, lc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, x Tuint64_t + _, _ = a, x + x = uint64(uint32(*(*uint16)(unsafe.Pointer(xi)))|(uint32(*(*uint16)(unsafe.Pointer(xi + 1*2)))+0)<> int32(16)) + *(*uint16)(unsafe.Pointer(xi + 2*2)) = uint16(x >> int32(32)) + return x & uint64(0xffffffffffff) +} + +func Xerand48(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* x at bp+0 */ struct { + Ff [0]float64 + Fu Tuint64_t + } + *(*struct { + Ff [0]float64 + Fu Tuint64_t + })(unsafe.Pointer(bp)) = struct { + Ff [0]float64 + Fu Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp)) = uint64(0x3ff0000000000000) | X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2)< %v", r) }() + } + return Xerand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xlcong48(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), p, uint64(14)) +} + +func Xnrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> int32(17)) +} + +func Xlrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xjrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> Int32FromInt32(16))) +} + +func Xmrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xjrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +var _seed Tuint64_t + +func Xsrand(tls *TLS, s uint32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + } + _seed = uint64(s - uint32(1)) +} + +func Xrand(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + _seed = uint64(6364136223846793005)*_seed + uint64(1) + return int32(_seed >> int32(33)) +} + +func _temper(tls *TLS, x uint32) (r uint32) { + x ^= x >> int32(11) + x ^= x << int32(7) & uint32(0x9D2C5680) + x ^= x << int32(15) & uint32(0xEFC60000) + x ^= x >> int32(18) + return x +} + +func Xrand_r(tls *TLS, seed uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + v1 = *(*uint32)(unsafe.Pointer(seed))*Uint32FromInt32(1103515245) + Uint32FromInt32(12345) + *(*uint32)(unsafe.Pointer(seed)) = v1 + return int32(_temper(tls, v1) / uint32(2)) +} + +/* +this code uses the same lagged fibonacci generator as the +original bsd random implementation except for the seeding +which was broken in the original +*/ + +var _init = [32]Tuint32_t{ + 1: uint32(0x5851f42d), + 2: uint32(0xc0b18ccf), + 3: uint32(0xcbb5f646), + 4: uint32(0xc7033129), + 5: uint32(0x30705b04), + 6: uint32(0x20fd5db4), + 7: uint32(0x9a8b7f78), + 8: uint32(0x502959d8), + 9: uint32(0xab894868), + 10: uint32(0x6c0356a7), + 11: uint32(0x88cdb7ff), + 12: uint32(0xb477d43f), + 13: uint32(0x70a3a52b), + 14: uint32(0xa8e4baf1), + 15: uint32(0xfd8341fc), + 16: uint32(0x8ae16fd9), + 17: uint32(0x742d2f7a), + 18: uint32(0x0d1f0796), + 19: uint32(0x76035e09), + 20: uint32(0x40f7702c), + 21: uint32(0x6fa72ca5), + 22: uint32(0xaaa84157), + 23: uint32(0x58a0df74), + 24: uint32(0xc74a0364), + 25: uint32(0xae533cc4), + 26: uint32(0x04185faf), + 27: uint32(0x6de3b115), + 28: uint32(0x0cab8628), + 29: uint32(0xf043bfa4), + 30: uint32(0x398150e9), + 31: uint32(0x37521657), +} + +var _n = int32(31) +var _i = int32(3) +var _j = int32(0) +var _x1 = uintptr(unsafe.Pointer(&_init)) + uintptr(1)*4 +var _lock3 [1]int32 + +func _lcg31(tls *TLS, x Tuint32_t) (r Tuint32_t) { + return (uint32(1103515245)*x + uint32(12345)) & uint32(0x7fffffff) +} + +func _lcg64(tls *TLS, x Tuint64_t) (r Tuint64_t) { + return uint64(6364136223846793005)*x + uint64(1) +} + +func _savestate(tls *TLS) (r uintptr) { + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) = uint32(_n<> int32(16)) + _i = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) >> Int32FromInt32(8) & uint32(0xff)) + _j = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) & uint32(0xff)) +} + +func ___srandom(tls *TLS, seed uint32) { + var k, v1 int32 + var s Tuint64_t + _, _, _ = k, s, v1 + s = uint64(seed) + if _n == 0 { + *(*Tuint32_t)(unsafe.Pointer(_x1)) = uint32(s) + return + } + if _n == int32(31) || _n == int32(7) { + v1 = int32(3) + } else { + v1 = int32(1) + } + _i = v1 + _j = 0 + k = 0 + for { + if !(k < _n) { + break + } + s = _lcg64(tls, s) + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(k)*4)) = uint32(s >> int32(32)) + goto _2 + _2: + ; + k++ + } + /* make sure x contains at least one odd number */ + *(*Tuint32_t)(unsafe.Pointer(_x1)) |= uint32(1) +} + +func Xsrandom(tls *TLS, seed uint32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + ___srandom(tls, seed) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) +} + +func Xinitstate(tls *TLS, seed uint32, state uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v seed=%v state=%v size=%v, (%v:)", tls, seed, state, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + if size < uint64(8) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + if size < uint64(32) { + _n = 0 + } else { + if size < uint64(64) { + _n = int32(7) + } else { + if size < uint64(128) { + _n = int32(15) + } else { + if size < uint64(256) { + _n = int32(31) + } else { + _n = int32(63) + } + } + } + } + _x1 = state + uintptr(1)*4 + ___srandom(tls, seed) + _savestate(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xsetstate(tls *TLS, state uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v state=%v, (%v:)", tls, state, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + _loadstate(tls, state) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xrandom(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k int64 + var v1 Tuint32_t + var v2, v3 int32 + _, _, _, _ = k, v1, v2, v3 + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + if _n == 0 { + v1 = _lcg31(tls, *(*Tuint32_t)(unsafe.Pointer(_x1))) + *(*Tuint32_t)(unsafe.Pointer(_x1)) = v1 + k = int64(v1) + goto end + } + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) += *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_j)*4)) + k = int64(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) >> int32(1)) + _i++ + v2 = _i + if v2 == _n { + _i = 0 + } + _j++ + v3 = _j + if v3 == _n { + _j = 0 + } + goto end +end: + ; + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return k +} + +func Xseed48(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&_p1)), uintptr(unsafe.Pointer(&X__seed48)), uint64(6)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), s, uint64(6)) + return uintptr(unsafe.Pointer(&_p1)) +} + +var _p1 [3]uint16 + +func Xsrand48(tls *TLS, seed int64) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[3]uint16)(unsafe.Pointer(bp)) = [3]uint16{ + 0: uint16(0x330e), + 1: uint16(seed), + 2: uint16(seed >> int32(16)), + } + Xseed48(tls, bp) +} + +func Xexecl(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecv(tls, path, argv) + return r +} + +func Xexecle(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv, envp uintptr + var v2 t__predefined_size_t + _, _, _, _, _, _ = ap, argc, argv, envp, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i <= argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + envp = VaUintptr(&ap) + _ = ap + return Xexecve(tls, path, argv, envp) + return r +} + +func Xexeclp(tls *TLS, file uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv0=%v va=%v, (%v:)", tls, file, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecvp(tls, file, argv) + return r +} + +func Xexecv(tls *TLS, path uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v, (%v:)", tls, path, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexecve(tls, path, argv, Xenviron) +} + +func Xexecve(tls *TLS, path uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v envp=%v, (%v:)", tls, path, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* do we need to use environ if envp is null? */ + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_execve), int64(path), int64(argv), int64(envp))))) +} + +func X__execvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, p, path, z, v3, v4 uintptr + var k, l Tsize_t + var seen_eacces int32 + var v2 t__predefined_size_t + _, _, _, _, _, _, _, _, _, _ = b, k, l, p, path, seen_eacces, z, v2, v3, v4 + defer func() { Xrealloc(tls, b, 0) }() + path = Xgetenv(tls, __ccgo_ts+1400) + seen_eacces = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + if !(*(*uint8)(unsafe.Pointer(file)) != 0) { + return -int32(1) + } + if Xstrchr(tls, file, int32('/')) != 0 { + return Xexecve(tls, file, argv, envp) + } + if !(path != 0) { + path = __ccgo_ts + 1405 + } + k = Xstrnlen(tls, file, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if k > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + l = Xstrnlen(tls, path, uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(1))) + uint64(1) + p = path + for { + v2 = l + k + uint64(1) + b = Xrealloc(tls, b, v2) + z = X__strchrnul(tls, p, int32(':')) + if uint64(int64(z)-int64(p)) >= l { + v3 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v3)) != 0) { + break + } + goto _1 + } + Xmemcpy(tls, b, p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Add(unsafe.Pointer(b), int64(z)-int64(p))) = uint8('/') + Xmemcpy(tls, b+uintptr(int64(z)-int64(p))+BoolUintptr(z > p), file, k+uint64(1)) + Xexecve(tls, b, argv, envp) + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EACCES): + seen_eacces = int32(1) + fallthrough + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + default: + return -int32(1) + } + v4 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v4)) != 0) { + break + } + goto _1 + _1: + ; + p = z + } + if seen_eacces != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + } + return -int32(1) +} + +func Xexecvp(tls *TLS, file uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v, (%v:)", tls, file, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, Xenviron) +} + +func Xexecvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, envp) +} + +func Xfexecve(tls *TLS, fd int32, argv uintptr, envp uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v argv=%v envp=%v, (%v:)", tls, fd, argv, envp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = r + r = int32(X__syscall5(tls, int64(SYS_execveat), int64(fd), int64(__ccgo_ts), int64(argv), int64(envp), int64(Int32FromInt32(AT_EMPTY_PATH)))) + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + X__procfdname(tls, bp, uint32(fd)) + Xexecve(tls, bp, argv, envp) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + } + return -int32(1) +} + +var _dummy_lockptr = uintptr(0) + +var _atfork_locks = [10]uintptr{ + 0: uintptr(unsafe.Pointer(&X__at_quick_exit_lockptr)), + 1: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 2: uintptr(unsafe.Pointer(&X__gettext_lockptr)), + 3: uintptr(unsafe.Pointer(&X__locale_lockptr)), + 4: uintptr(unsafe.Pointer(&X__random_lockptr)), + 5: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 6: uintptr(unsafe.Pointer(&X__stdio_ofl_lockptr)), + 7: uintptr(unsafe.Pointer(&X__syslog_lockptr)), + 8: uintptr(unsafe.Pointer(&X__timezone_lockptr)), + 9: uintptr(unsafe.Pointer(&_dummy_lockptr)), +} + +func _dummy8(tls *TLS, x int32) { +} + +func _dummy_0(tls *TLS) { +} + +const FDOP_CHDIR = 4 +const FDOP_CLOSE = 1 +const FDOP_DUP2 = 2 +const FDOP_FCHDIR = 5 +const FDOP_OPEN = 3 +const POSIX_SPAWN_RESETIDS = 1 +const POSIX_SPAWN_SETPGROUP = 2 +const POSIX_SPAWN_SETSCHEDPARAM = 16 +const POSIX_SPAWN_SETSCHEDULER = 32 +const POSIX_SPAWN_SETSID = 128 +const POSIX_SPAWN_SETSIGDEF = 4 +const POSIX_SPAWN_SETSIGMASK = 8 +const POSIX_SPAWN_USEVFORK = 64 + +type Tposix_spawnattr_t = struct { + F__flags int32 + F__pgrp Tpid_t + F__def Tsigset_t + F__mask Tsigset_t + F__prio int32 + F__pol int32 + F__fn uintptr + F__pad [56]uint8 +} + +type Tposix_spawn_file_actions_t = struct { + F__pad0 [2]int32 + F__actions uintptr + F__pad [16]int32 +} + +type Tfdop = struct { + Fnext uintptr + Fprev uintptr + Fcmd int32 + Ffd int32 + Fsrcfd int32 + Foflag int32 + Fmode Tmode_t +} + +func Xposix_spawn_file_actions_addchdir_np(tls *TLS, fa uintptr, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v path=%v, (%v:)", tls, fa, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = -int32(1) + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addclose(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CLOSE) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_adddup2(tls *TLS, fa uintptr, srcfd int32, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v srcfd=%v fd=%v, (%v:)", tls, fa, srcfd, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if srcfd < 0 || fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_DUP2) + (*Tfdop)(unsafe.Pointer(op)).Fsrcfd = srcfd + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addfchdir_np(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_FCHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addopen(tls *TLS, fa uintptr, fd int32, path uintptr, flags int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v path=%v flags=%v mode=%v, (%v:)", tls, fa, fd, path, flags, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_OPEN) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + (*Tfdop)(unsafe.Pointer(op)).Foflag = flags + (*Tfdop)(unsafe.Pointer(op)).Fmode = mode + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_destroy(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + var next, op uintptr + _, _ = next, op + op = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + for op != 0 { + next = (*Tfdop)(unsafe.Pointer(op)).Fnext + Xfree(tls, op) + op = next + } + return 0 +} + +func Xposix_spawn_file_actions_init(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = uintptr(0) + return 0 +} + +func Xposix_spawnattr_destroy(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xposix_spawnattr_getflags(tls *TLS, attr uintptr, flags uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*int16)(unsafe.Pointer(flags)) = int16((*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags) + return 0 +} + +func Xposix_spawnattr_getpgroup(tls *TLS, attr uintptr, pgrp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tpid_t)(unsafe.Pointer(pgrp)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp + return 0 +} + +func Xposix_spawnattr_getsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(def)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def + return 0 +} + +func Xposix_spawnattr_getsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(mask)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask + return 0 +} + +func Xposix_spawnattr_init(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tposix_spawnattr_t)(unsafe.Pointer(attr)) = Tposix_spawnattr_t{} + return 0 +} + +func Xposix_spawnattr_getschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_getschedpolicy(tls *TLS, attr uintptr, policy uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedpolicy(tls *TLS, attr uintptr, policy int32) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setflags(tls *TLS, attr uintptr, flags int16) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var all_flags uint32 + _ = all_flags + all_flags = uint32(Int32FromInt32(POSIX_SPAWN_RESETIDS) | Int32FromInt32(POSIX_SPAWN_SETPGROUP) | Int32FromInt32(POSIX_SPAWN_SETSIGDEF) | Int32FromInt32(POSIX_SPAWN_SETSIGMASK) | Int32FromInt32(POSIX_SPAWN_SETSCHEDPARAM) | Int32FromInt32(POSIX_SPAWN_SETSCHEDULER) | Int32FromInt32(POSIX_SPAWN_USEVFORK) | Int32FromInt32(POSIX_SPAWN_SETSID)) + if uint32(flags) & ^all_flags != 0 { + return int32(EINVAL) + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags = int32(flags) + return 0 +} + +func Xposix_spawnattr_setpgroup(tls *TLS, attr uintptr, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp = pgrp + return 0 +} + +func Xposix_spawnattr_setsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def = *(*Tsigset_t)(unsafe.Pointer(def)) + return 0 +} + +func Xposix_spawnattr_setsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask = *(*Tsigset_t)(unsafe.Pointer(mask)) + return 0 +} + +func Xvfork(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* vfork syscall cannot be made from C code */ + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clone), int64(Int32FromInt32(SIGCHLD)), int64(Int32FromInt32(0)))))) +} + +func Xwait(tls *TLS, status uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwaitpid(tls, -Int32FromInt32(1), status, 0) +} + +func Xwaitid(tls *TLS, type1 Tidtype_t, id Tid_t, info uintptr, options int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v id=%v info=%v options=%v, (%v:)", tls, type1, id, info, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_waitid), int64(type1), int64(id), int64(info), int64(options), int64(Int32FromInt32(0)), 0)))) +} + +func Xwaitpid(tls *TLS, pid Tpid_t, status uintptr, options int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v, (%v:)", tls, pid, status, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(Int32FromInt32(0)), 0, 0)))) +} + +const BRACKET = -3 +const END = 0 +const FNM_CASEFOLD = 16 +const FNM_FILE_NAME = 1 +const FNM_LEADING_DIR = 8 +const FNM_NOESCAPE = 2 +const FNM_NOMATCH = 1 +const FNM_NOSYS = -1 +const FNM_PATHNAME = 1 +const FNM_PERIOD = 4 +const QUESTION = -4 +const STAR = -5 +const UNMATCHABLE = -2 + +func _str_next(tls *TLS, str uintptr, n Tsize_t, step uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k int32 + var _ /* wc at bp+0 */ Twchar_t + _ = k + if !(n != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return 0 + } + if uint32(*(*uint8)(unsafe.Pointer(str))) >= uint32(128) { + k = Xmbtowc(tls, bp, str, n) + if k < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return -int32(1) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32(*(*uint8)(unsafe.Pointer(str))) +} + +func _pat_next(tls *TLS, pat uintptr, m Tsize_t, step uintptr, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var esc, k1, z int32 + var k Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _ = esc, k, k1, z + esc = 0 + if !(m != 0) || !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return END + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('\\') && *(*uint8)(unsafe.Pointer(pat + 1)) != 0 && !(flags&Int32FromInt32(FNM_NOESCAPE) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(2) + pat++ + esc = int32(1) + goto escaped + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('[') { + k = uint64(1) + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('!') { + k++ + } + } + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32(']') { + k++ + } + } + for { + if !(k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + break + } + if k+uint64(1) < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1)))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('=')) { + z = int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) + k += uint64(2) + if k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 { + k++ + } + for k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k-uint64(1))))) != z || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + break + } + } + goto _1 + _1: + ; + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32('[') + } + *(*Tsize_t)(unsafe.Pointer(step)) = k + uint64(1) + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('*') { + return -int32(5) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('?') { + return -int32(4) + } + goto escaped +escaped: + ; + if uint32(*(*uint8)(unsafe.Pointer(pat))) >= uint32(128) { + k1 = Xmbtowc(tls, bp, pat, m) + if k1 < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return -int32(2) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k1 + esc) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + return int32(*(*uint8)(unsafe.Pointer(pat))) +} + +func _casefold(tls *TLS, k int32) (r int32) { + var c int32 + var v1 uint32 + _, _ = c, v1 + c = int32(Xtowupper(tls, uint32(k))) + if c == k { + v1 = Xtowlower(tls, uint32(k)) + } else { + v1 = uint32(c) + } + return int32(v1) +} + +func _match_bracket(tls *TLS, p uintptr, k int32, kfold int32) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var inv, l, l1, z int32 + var p0 uintptr + var _ /* buf at bp+8 */ [16]uint8 + var _ /* wc at bp+0 */ Twchar_t + var _ /* wc2 at bp+4 */ Twchar_t + _, _, _, _, _ = inv, l, l1, p0, z + inv = 0 + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(p))) == int32('!') { + inv = int32(1) + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + if k == int32(']') { + return BoolInt32(!(inv != 0)) + } + p++ + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + if k == int32('-') { + return BoolInt32(!(inv != 0)) + } + p++ + } + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + l = Xmbtowc(tls, bp+4, p+uintptr(1), uint64(4)) + if l < 0 { + return 0 + } + if *(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4)) { + if uint32(k)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) || uint32(kfold)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) { + return BoolInt32(!(inv != 0)) + } + } + p += uintptr(l - int32(1)) + goto _1 + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('=')) { + p0 = p + uintptr(2) + z = int32(*(*uint8)(unsafe.Pointer(p + 1))) + p += uintptr(3) + for int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) != z || int32(*(*uint8)(unsafe.Pointer(p))) != int32(']') { + p++ + } + if z == int32(':') && int64(p-uintptr(1))-int64(p0) < int64(16) { + Xmemcpy(tls, bp+8, p0, uint64(int64(p-uintptr(1))-int64(p0))) + (*(*[16]uint8)(unsafe.Pointer(bp + 8)))[int64(p-uintptr(1))-int64(p0)] = uint8(0) + if Xiswctype(tls, uint32(k), Xwctype(tls, bp+8)) != 0 || Xiswctype(tls, uint32(kfold), Xwctype(tls, bp+8)) != 0 { + return BoolInt32(!(inv != 0)) + } + } + goto _1 + } + if uint32(*(*uint8)(unsafe.Pointer(p))) < uint32(128) { + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p))) + } else { + l1 = Xmbtowc(tls, bp, p, uint64(4)) + if l1 < 0 { + return 0 + } + p += uintptr(l1 - int32(1)) + } + if *(*Twchar_t)(unsafe.Pointer(bp)) == k || *(*Twchar_t)(unsafe.Pointer(bp)) == kfold { + return BoolInt32(!(inv != 0)) + } + goto _1 + _1: + ; + p++ + } + return inv +} + +func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, k, kfold, v12, v13, v15, v2, v3, v4, v8 int32 + var endpat, endstr, p, ptail, s, stail, v10, v6 uintptr + var tailcnt Tsize_t + var v9 bool + var _ /* pinc at bp+0 */ Tsize_t + var _ /* sinc at bp+8 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, endpat, endstr, k, kfold, p, ptail, s, stail, tailcnt, v10, v12, v13, v15, v2, v3, v4, v6, v8, v9 + tailcnt = uint64(0) + if flags&int32(FNM_PERIOD) != 0 { + if int32(*(*uint8)(unsafe.Pointer(str))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(pat))) != int32('.') { + return int32(FNM_NOMATCH) + } + } + for { + v2 = _pat_next(tls, pat, m, bp, flags) + c = v2 + switch v2 { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + pat++ + m-- + default: + k = _str_next(tls, str, n, bp+8) + if k <= 0 { + if c == END { + v3 = 0 + } else { + v3 = int32(FNM_NOMATCH) + } + return v3 + } + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + n -= *(*Tsize_t)(unsafe.Pointer(bp + 8)) + if flags&int32(FNM_CASEFOLD) != 0 { + v4 = _casefold(tls, k) + } else { + v4 = k + } + kfold = v4 + if c == -int32(3) { + if !(_match_bracket(tls, pat, k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + pat += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + m -= *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + } + break + goto _1 + _1: + } + /* Compute real pat length if it was initially unknown/-1 */ + m = Xstrnlen(tls, pat, m) + endpat = pat + uintptr(m) + /* Find the last * in pat and count chars needed after it */ + v6 = pat + ptail = v6 + p = v6 + for { + if !(p < endpat) { + break + } + switch _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + tailcnt = uint64(0) + ptail = p + uintptr(1) + default: + tailcnt++ + break + } + goto _5 + _5: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + /* Past this point we need not check for UNMATCHABLE in pat, + * because all of pat has already been parsed once. */ + /* Compute real str length if it was initially unknown/-1 */ + n = Xstrnlen(tls, str, n) + endstr = str + uintptr(n) + if n < tailcnt { + return int32(FNM_NOMATCH) + } + /* Find the final tailcnt chars of str, accounting for UTF-8. + * On illegal sequences we may get it wrong, but in that case + * we necessarily have a matching failure anyway. */ + s = endstr + for { + if !(s > str && tailcnt != 0) { + break + } + if v9 = uint32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v8 = int32(4) + } else { + v8 = int32(1) + } + } + if v9 || v8 == int32(1) { + s-- + } else { + for { + s-- + v10 = s + if !(uint32(*(*uint8)(unsafe.Pointer(v10)))-uint32(0x80) < uint32(0x40) && s > str) { + break + } + } + } + goto _7 + _7: + ; + tailcnt-- + } + if tailcnt != 0 { + return int32(FNM_NOMATCH) + } + stail = s + /* Check that the pat and str tails match */ + p = ptail + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + v12 = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + k = v12 + if v12 <= 0 { + if c != END { + return int32(FNM_NOMATCH) + } + break + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + if flags&int32(FNM_CASEFOLD) != 0 { + v13 = _casefold(tls, k) + } else { + v13 = k + } + kfold = v13 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + goto _11 + _11: + } + /* We're all done with the tails now, so throw them out */ + endstr = stail + endpat = ptail + /* Match pattern components until there are none left */ + for pat < endpat { + p = pat + s = str + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + /* Encountering * completes/commits a component */ + if c == -int32(5) { + pat = p + str = s + break + } + k = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + if !(k != 0) { + return int32(FNM_NOMATCH) + } + if flags&int32(FNM_CASEFOLD) != 0 { + v15 = _casefold(tls, k) + } else { + v15 = k + } + kfold = v15 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + break + } + } else { + if c != -int32(4) && k != c && kfold != c { + break + } + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + goto _14 + _14: + } + if c == -int32(5) { + continue + } + /* If we failed, advance str, by 1 char if it's a valid + * char, or past all invalid bytes otherwise. */ + k = _str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) + if k > 0 { + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + } else { + str++ + for { + if !(_str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) < 0) { + break + } + goto _16 + _16: + ; + str++ + } + } + } + return 0 +} + +func Xfnmatch(tls *TLS, pat uintptr, str uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v str=%v flags=%v, (%v:)", tls, pat, str, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, v4 int32 + var p, s uintptr + var _ /* inc at bp+0 */ Tsize_t + _, _, _, _ = c, p, s, v4 + if flags&int32(FNM_PATHNAME) != 0 { + for { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != int32('/')) { + break + } + goto _2 + _2: + ; + s++ + } + p = pat + for { + v4 = _pat_next(tls, p, uint64(-Int32FromInt32(1)), bp, flags) + c = v4 + if !(v4 != END && c != int32('/')) { + break + } + goto _3 + _3: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + if c != int32(*(*uint8)(unsafe.Pointer(s))) && (!(*(*uint8)(unsafe.Pointer(s)) != 0) || !(flags&Int32FromInt32(FNM_LEADING_DIR) != 0)) { + return int32(FNM_NOMATCH) + } + if _fnmatch_internal(tls, pat, uint64(int64(p)-int64(pat)), str, uint64(int64(s)-int64(str)), flags) != 0 { + return int32(FNM_NOMATCH) + } + if !(c != 0) { + return 0 + } + str = s + uintptr(1) + pat = p + uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + goto _1 + _1: + } + } else { + if flags&int32(FNM_LEADING_DIR) != 0 { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('/') { + goto _5 + } + if !(_fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(int64(s)-int64(str)), flags) != 0) { + return 0 + } + goto _5 + _5: + ; + s++ + } + } + } + return _fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(-Int32FromInt32(1)), flags) +} + +const GLOB_ABORTED = 2 +const GLOB_APPEND = 32 +const GLOB_DOOFFS = 8 +const GLOB_ERR = 1 +const GLOB_MARK = 2 +const GLOB_NOCHECK = 16 +const GLOB_NOESCAPE = 64 +const GLOB_NOMATCH = 3 +const GLOB_NOSORT = 4 +const GLOB_NOSPACE = 1 +const GLOB_NOSYS = 4 +const GLOB_PERIOD = 128 +const GLOB_TILDE = 4096 +const GLOB_TILDE_CHECK = 16384 + +type Tglob_t = struct { + Fgl_pathc Tsize_t + Fgl_pathv uintptr + Fgl_offs Tsize_t + F__dummy1 int32 + F__dummy2 [5]uintptr +} + +type Tmatch = struct { + Fnext uintptr +} + +func _append(tls *TLS, tail uintptr, name uintptr, len1 Tsize_t, mark int32) (r int32) { + var new1 uintptr + _ = new1 + new1 = Xmalloc(tls, uint64(8)+len1+uint64(2)) + if !(new1 != 0) { + return -int32(1) + } + (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(tail)))).Fnext = new1 + (*Tmatch)(unsafe.Pointer(new1)).Fnext = UintptrFromInt32(0) + Xmemcpy(tls, new1+8, name, len1+uint64(1)) + if mark != 0 && len1 != 0 && int32(*(*uint8)(unsafe.Pointer(name + uintptr(len1-uint64(1))))) != int32('/') { + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1))) = uint8('/') + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1+uint64(1)))) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(tail)) = new1 + return 0 +} + +func _do_glob(tls *TLS, buf uintptr, pos Tsize_t, type1 int32, pat uintptr, flags int32, errfunc uintptr, tail uintptr) (r1 int32) { + bp := tls.Alloc(128) + defer tls.Free(128) + var de, dir, p, p2, v11, v2, v7, v8 uintptr + var fnm_flags, in_bracket, old_errno, overflow, r, readerr, v10, v9 int32 + var i, j, v4, v5 Tptrdiff_t + var l, v1 Tsize_t + var saved_sep uint8 + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = de, dir, fnm_flags, i, in_bracket, j, l, old_errno, overflow, p, p2, r, readerr, saved_sep, v1, v10, v11, v2, v4, v5, v7, v8, v9 + /* If GLOB_MARK is unused, we don't care about type. */ + if !(type1 != 0) && !(flags&Int32FromInt32(GLOB_MARK) != 0) { + type1 = int32(DT_REG) + } + /* Special-case the remaining pattern being all slashes, in + * which case we can use caller-passed type if it's a dir. */ + if *(*uint8)(unsafe.Pointer(pat)) != 0 && type1 != int32(DT_DIR) { + type1 = 0 + } + for pos+uint64(1) < uint64(PATH_MAX) && int32(*(*uint8)(unsafe.Pointer(pat))) == int32('/') { + v1 = pos + pos++ + v2 = pat + pat++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + } + /* Consume maximal [escaped-]literal prefix of pattern, copying + * and un-escaping it to the running buffer as we go. */ + i = 0 + j = 0 + in_bracket = 0 + overflow = 0 + for { + if !(int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('*') && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('?') && (!(in_bracket != 0) || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32(']'))) { + break + } + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i))) != 0) { + if overflow != 0 { + return 0 + } + pat += uintptr(i) + pos += uint64(j) + v4 = Int64FromInt32(0) + j = v4 + i = v4 + break + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('[') { + in_bracket = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('\\') && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + /* Backslashes inside a bracket are (at least by + * our interpretation) non-special, so if next + * char is ']' we have a complete expression. */ + if in_bracket != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1))))) == int32(']') { + break + } + /* Unpaired final backslash never matches. */ + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1)))) != 0) { + return 0 + } + i++ + } + } + } + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('/') { + if overflow != 0 { + return 0 + } + in_bracket = 0 + pat += uintptr(i + int64(1)) + i = int64(-int32(1)) + pos += uint64(j + int64(1)) + j = int64(-int32(1)) + } + /* Only store a character if it fits in the buffer, but if + * a potential bracket expression is open, the overflow + * must be remembered and handled later only if the bracket + * is unterminated (and thereby a literal), so as not to + * disallow long bracket expressions with short matches. */ + if pos+uint64(j+Int64FromInt32(1)) < uint64(PATH_MAX) { + v5 = j + j++ + *(*uint8)(unsafe.Pointer(buf + uintptr(pos+uint64(v5)))) = *(*uint8)(unsafe.Pointer(pat + uintptr(i))) + } else { + if in_bracket != 0 { + overflow = int32(1) + } else { + return 0 + } + } + /* If we consume any new components, the caller-passed type + * or dummy type from above is no longer valid. */ + type1 = 0 + goto _3 + _3: + ; + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(pos))) = uint8(0) + if !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + if flags&int32(GLOB_MARK) != 0 && (!(type1 != 0) || type1 == int32(DT_LNK)) && !(Xstat(tls, buf, bp) != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + type1 = int32(DT_DIR) + } else { + type1 = int32(DT_REG) + } + } + if !(type1 != 0) && Xlstat(tls, buf, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + return 0 + } + if _append(tls, tail, buf, pos, BoolInt32(flags&int32(GLOB_MARK) != 0 && type1 == int32(DT_DIR))) != 0 { + return int32(GLOB_NOSPACE) + } + return 0 + } + p2 = Xstrchr(tls, pat, int32('/')) + saved_sep = uint8('/') + /* Check if the '/' was escaped and, if so, remove the escape char + * so that it will not be unpaired when passed to fnmatch. */ + if p2 != 0 && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + p = p2 + for { + if !(p > pat && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('\\')) { + break + } + goto _6 + _6: + ; + p-- + } + if (int64(p2)-int64(p))%int64(2) != 0 { + p2-- + saved_sep = uint8('\\') + } + } + if pos != 0 { + v7 = buf + } else { + v7 = __ccgo_ts + 607 + } + dir = Xopendir(tls, v7) + if !(dir != 0) { + if (*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0 { + return int32(GLOB_ABORTED) + } + return 0 + } + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v8 = Xreaddir(tls, dir) + de = v8 + if !(v8 != 0) { + break + } + /* Quickly skip non-directories when there's pattern left. */ + if p2 != 0 && (*Tdirent)(unsafe.Pointer(de)).Fd_type != 0 && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_DIR) && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_LNK) { + continue + } + l = Xstrlen(tls, de+19) + if l >= uint64(PATH_MAX)-pos { + continue + } + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = uint8(0) + } + if flags&int32(GLOB_NOESCAPE) != 0 { + v9 = int32(FNM_NOESCAPE) + } else { + v9 = 0 + } + if !(flags&Int32FromInt32(GLOB_PERIOD) != 0) { + v10 = int32(FNM_PERIOD) + } else { + v10 = 0 + } + fnm_flags = v9 | v10 + if Xfnmatch(tls, pat, de+19, fnm_flags) != 0 { + continue + } + /* With GLOB_PERIOD, don't allow matching . or .. unless + * fnmatch would match them with FNM_PERIOD rules in effect. */ + if p2 != 0 && flags&int32(GLOB_PERIOD) != 0 && int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) && Xfnmatch(tls, pat, de+19, fnm_flags|int32(FNM_PERIOD)) != 0 { + continue + } + Xmemcpy(tls, buf+uintptr(pos), de+19, l+uint64(1)) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + if p2 != 0 { + v11 = p2 + } else { + v11 = __ccgo_ts + } + r = _do_glob(tls, buf, pos+l, int32((*Tdirent)(unsafe.Pointer(de)).Fd_type), v11, flags, errfunc, tail) + if r != 0 { + Xclosedir(tls, dir) + return r + } + } + readerr = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + Xclosedir(tls, dir) + if readerr != 0 && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return 0 +} + +func _ignore_err(tls *TLS, path uintptr, err int32) (r int32) { + return 0 +} + +func _freelist(tls *TLS, head uintptr) { + var match, next uintptr + _, _ = match, next + match = (*Tmatch)(unsafe.Pointer(head)).Fnext + for { + if !(match != 0) { + break + } + next = (*Tmatch)(unsafe.Pointer(match)).Fnext + Xfree(tls, match) + goto _1 + _1: + ; + match = next + } +} + +func _sort(tls *TLS, a uintptr, b uintptr) (r int32) { + return Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(a)), *(*uintptr)(unsafe.Pointer(b))) +} + +func _expand_tilde(tls *TLS, pat uintptr, buf uintptr, pos uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var delim, v1, v12 uint8 + var home, name_end, p, v11, v2, v3 uintptr + var i, v10, v13 Tsize_t + var v4 int32 + var _ /* pw at bp+0 */ Tpasswd + var _ /* res at bp+48 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = delim, home, i, name_end, p, v1, v10, v11, v12, v13, v2, v3, v4 + p = *(*uintptr)(unsafe.Pointer(pat)) + uintptr(1) + i = uint64(0) + name_end = X__strchrnul(tls, p, int32('/')) + v1 = *(*uint8)(unsafe.Pointer(name_end)) + delim = v1 + if v1 != 0 { + v2 = name_end + name_end++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(pat)) = name_end + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v3 = UintptrFromInt32(0) + } else { + v3 = Xgetenv(tls, __ccgo_ts+1434) + } + home = v3 + if !(home != 0) { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v4 = Xgetpwnam_r(tls, p, bp, buf, uint64(PATH_MAX), bp+48) + } else { + v4 = Xgetpwuid_r(tls, Xgetuid(tls), bp, buf, uint64(PATH_MAX), bp+48) + } + switch v4 { + case int32(ENOMEM): + goto _5 + default: + goto _6 + case 0: + goto _7 + } + goto _8 + _5: + ; + return int32(GLOB_NOSPACE) + _7: + ; + if !!(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + goto _9 + } + _6: + ; + return int32(GLOB_NOMATCH) + _9: + ; + _8: + ; + home = (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_dir + } + for i < uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(2)) && *(*uint8)(unsafe.Pointer(home)) != 0 { + v10 = i + i++ + v11 = home + home++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v10))) = *(*uint8)(unsafe.Pointer(v11)) + } + if *(*uint8)(unsafe.Pointer(home)) != 0 { + return int32(GLOB_NOMATCH) + } + v12 = delim + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v12 + if v12 != 0 { + i++ + v13 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v13))) = uint8(0) + } + *(*Tsize_t)(unsafe.Pointer(pos)) = i + return 0 +} + +func Xglob(tls *TLS, pat uintptr, flags int32, errfunc uintptr, g uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v flags=%v errfunc=%v g=%v, (%v:)", tls, pat, flags, errfunc, g, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4128) + defer tls.Free(4128) + var cnt, i, offs Tsize_t + var error1 int32 + var p, pathv uintptr + var v1 uint64 + var _ /* buf at bp+16 */ [4096]uint8 + var _ /* head at bp+0 */ Tmatch + var _ /* pos at bp+4112 */ Tsize_t + var _ /* s at bp+4120 */ uintptr + var _ /* tail at bp+8 */ uintptr + _, _, _, _, _, _, _ = cnt, error1, i, offs, p, pathv, v1 + *(*Tmatch)(unsafe.Pointer(bp)) = struct { + Fnext uintptr + }{} + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if flags&int32(GLOB_DOOFFS) != 0 { + v1 = (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs + } else { + v1 = uint64(0) + } + offs = v1 + error1 = 0 + if !(errfunc != 0) { + errfunc = __ccgo_fp(_ignore_err) + } + if !(flags&Int32FromInt32(GLOB_APPEND) != 0) { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs = offs + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) + } + if *(*uint8)(unsafe.Pointer(pat)) != 0 { + p = Xstrdup(tls, pat) + if !(p != 0) { + return int32(GLOB_NOSPACE) + } + (*(*[4096]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4112)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 4120)) = p + if flags&(Int32FromInt32(GLOB_TILDE)|Int32FromInt32(GLOB_TILDE_CHECK)) != 0 && int32(*(*uint8)(unsafe.Pointer(p))) == int32('~') { + error1 = _expand_tilde(tls, bp+4120, bp+16, bp+4112) + } + if !(error1 != 0) { + error1 = _do_glob(tls, bp+16, *(*Tsize_t)(unsafe.Pointer(bp + 4112)), 0, *(*uintptr)(unsafe.Pointer(bp + 4120)), flags, errfunc, bp+8) + } + Xfree(tls, p) + } + if error1 == int32(GLOB_NOSPACE) { + _freelist(tls, bp) + return error1 + } + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(*(*uintptr)(unsafe.Pointer(bp + 8)) != 0) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + cnt++ + } + if !(cnt != 0) { + if flags&int32(GLOB_NOCHECK) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if _append(tls, bp+8, pat, Xstrlen(tls, pat), 0) != 0 { + return int32(GLOB_NOSPACE) + } + cnt++ + } else { + if !(error1 != 0) { + return int32(GLOB_NOMATCH) + } + } + } + if flags&int32(GLOB_APPEND) != 0 { + pathv = Xrealloc(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv, (offs+(*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc+cnt+uint64(1))*uint64(8)) + if !(pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = pathv + offs += (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc + } else { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = Xmalloc(tls, (offs+cnt+uint64(1))*uint64(8)) + if !((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + i = uint64(0) + for { + if !(i < offs) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(i)*8)) = UintptrFromInt32(0) + goto _3 + _3: + ; + i++ + } + } + i = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = *(*uintptr)(unsafe.Pointer(bp + 8)) + 8 + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + i++ + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = UintptrFromInt32(0) + *(*Tsize_t)(unsafe.Pointer(g)) += cnt + if !(flags&Int32FromInt32(GLOB_NOSORT) != 0) { + Xqsort(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv+uintptr(offs)*8, cnt, uint64(8), __ccgo_fp(_sort)) + } + return error1 +} + +func Xglobfree(tls *TLS, g uintptr) { + if __ccgo_strace { + trc("tls=%v g=%v, (%v:)", tls, g, origin(2)) + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr((*Tglob_t)(unsafe.Pointer(g)).Fgl_offs+i)*8))-uintptr(uint64(UintptrFromInt32(0)+8))) + goto _1 + _1: + ; + i++ + } + Xfree(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) +} + +const ASSERTION = -2 +const ASSERT_AT_BOL = 1 +const ASSERT_AT_BOW = 16 +const ASSERT_AT_EOL = 2 +const ASSERT_AT_EOW = 32 +const ASSERT_AT_WB = 64 +const ASSERT_AT_WB_NEG = 128 +const ASSERT_BACKREF = 256 +const ASSERT_CHAR_CLASS = 4 +const ASSERT_CHAR_CLASS_NEG = 8 +const ASSERT_LAST = 256 +const BACKREF = -4 +const COPY_MAXIMIZE_FIRST_TAG = 2 +const COPY_REMOVE_TAGS = 1 +const EMPTY1 = -1 +const MAX_NEG_CLASSES = 64 +const REG_BADBR = 10 +const REG_BADPAT = 2 +const REG_BADRPT = 13 +const REG_EBRACE = 9 +const REG_EBRACK = 7 +const REG_ECOLLATE = 3 +const REG_ECTYPE = 4 +const REG_EESCAPE = 5 +const REG_ENOSYS = -1 +const REG_EPAREN = 8 +const REG_ERANGE = 11 +const REG_ESPACE = 12 +const REG_ESUBREG = 6 +const REG_EXTENDED = 1 +const REG_ICASE = 2 +const REG_NEWLINE = 4 +const REG_NOMATCH = 1 +const REG_NOSUB = 8 +const REG_NOTBOL = 1 +const REG_NOTEOL = 2 +const REG_OK = 0 +const TAG = -3 +const TRE_CHAR_MAX = 1114111 +const TRE_MEM_BLOCK_SIZE = 1024 +const TRE_REGEX_T_FIELD = 0 +const tre_ctype = 0 +const tre_isalnum = 0 +const tre_isalpha = 0 +const tre_isblank = 0 +const tre_iscntrl = 0 +const tre_isctype = 0 +const tre_isdigit = 0 +const tre_isgraph = 0 +const tre_islower = 0 +const tre_isprint = 0 +const tre_ispunct = 0 +const tre_isspace = 0 +const tre_isupper = 0 +const tre_isxdigit = 0 +const tre_mem_alloc_impl = 0 +const tre_mem_destroy = 0 +const tre_mem_new_impl = 0 +const tre_strlen = 0 +const tre_tolower = 0 +const tre_toupper = 0 +const xcalloc = 0 +const xfree = 0 +const xmalloc = 0 +const xrealloc = 0 + +type Tregoff_t = int64 + +type Tregex_t = struct { + Fre_nsub Tsize_t + F__opaque uintptr + F__padding [4]uintptr + F__nsub2 Tsize_t + F__padding2 uint8 +} + +type Tre_pattern_buffer = Tregex_t + +type Tregmatch_t = struct { + Frm_so Tregoff_t + Frm_eo Tregoff_t +} + +type Treg_errcode_t = int32 + +type Ttre_char_t = int32 + +type Ttre_cint_t = uint32 + +type Ttre_ctype_t = uint64 + +type Ttre_tnfa_transition_t = struct { + Fcode_min Ttre_cint_t + Fcode_max Ttre_cint_t + Fstate uintptr + Fstate_id int32 + Ftags uintptr + Fassertions int32 + Fu struct { + Fbackref [0]int32 + Fclass Ttre_ctype_t + } + Fneg_classes uintptr +} + +type Ttnfa_transition = Ttre_tnfa_transition_t + +type Ttre_tag_direction_t = int32 + +const _TRE_TAG_MINIMIZE = 0 +const _TRE_TAG_MAXIMIZE = 1 + +type Ttre_submatch_data = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_submatch_data_t = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_tnfa_t = struct { + Ftransitions uintptr + Fnum_transitions uint32 + Finitial uintptr + Ffinal uintptr + Fsubmatch_data uintptr + Ffirstpos_chars uintptr + Ffirst_char int32 + Fnum_submatches uint32 + Ftag_directions uintptr + Fminimal_tags uintptr + Fnum_tags int32 + Fnum_minimals int32 + Fend_tag int32 + Fnum_states int32 + Fcflags int32 + Fhave_backrefs int32 + Fhave_approx int32 +} + +type Ttnfa = Ttre_tnfa_t + +type Ttre_list_t = struct { + Fdata uintptr + Fnext uintptr +} + +type Ttre_list = Ttre_list_t + +type Ttre_mem_t = uintptr + +type Ttre_mem_struct = struct { + Fblocks uintptr + Fcurrent uintptr + Fptr uintptr + Fn Tsize_t + Ffailed int32 + Fprovided uintptr +} + +/*********************************************************************** + from tre-compile.h +***********************************************************************/ + +type Ttre_pos_and_tags_t = struct { + Fposition int32 + Fcode_min int32 + Fcode_max int32 + Ftags uintptr + Fassertions int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr + Fbackref int32 +} + +/*********************************************************************** + from tre-ast.c and tre-ast.h +***********************************************************************/ + +// C documentation +// +// /* The different AST node types. */ +type Ttre_ast_type_t = int32 + +const _LITERAL = 0 +const _CATENATION = 1 +const _ITERATION = 2 +const _UNION = 3 + +/* Special subtypes of TRE_LITERAL. */ + +// C documentation +// +// /* A generic AST node. All AST nodes consist of this node on the top +// level with `obj' pointing to the actual content. */ +type Ttre_ast_node_t = struct { + Ftype1 Ttre_ast_type_t + Fobj uintptr + Fnullable int32 + Fsubmatch_id int32 + Fnum_submatches int32 + Fnum_tags int32 + Ffirstpos uintptr + Flastpos uintptr +} + +// C documentation +// +// /* A "literal" node. These are created for assertions, back references, +// tags, matching parameter settings, and all expressions that match one +// character. */ +type Ttre_literal_t = struct { + Fcode_min int64 + Fcode_max int64 + Fposition int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr +} + +// C documentation +// +// /* A "catenation" node. These are created when two regexps are concatenated. +// If there are more than one subexpressions in sequence, the `left' part +// holds all but the last, and `right' part holds the last subexpression +// (catenation is left associative). */ +type Ttre_catenation_t = struct { + Fleft uintptr + Fright uintptr +} + +// C documentation +// +// /* An "iteration" node. These are created for the "*", "+", "?", and "{m,n}" +// operators. */ +type Ttre_iteration_t = struct { + Farg uintptr + Fmin int32 + Fmax int32 + F__ccgo16 uint8 +} + +// C documentation +// +// /* An "union" node. These are created for the "|" operator. */ +type Ttre_union_t = struct { + Fleft uintptr + Fright uintptr +} + +func _tre_ast_new_node(tls *TLS, mem Ttre_mem_t, type1 int32, obj uintptr) (r uintptr) { + var node uintptr + _ = node + node = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(48)) + if !(node != 0) || !(obj != 0) { + return uintptr(0) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = obj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = type1 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = -int32(1) + return node +} + +func _tre_ast_new_literal(tls *TLS, mem Ttre_mem_t, code_min int32, code_max int32, position int32) (r uintptr) { + var lit, node uintptr + _, _ = lit, node + lit = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(40)) + node = _tre_ast_new_node(tls, mem, int32(_LITERAL), lit) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(code_min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(code_max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = position + return node +} + +func _tre_ast_new_iter(tls *TLS, mem Ttre_mem_t, arg uintptr, min int32, max int32, minimal int32) (r uintptr) { + var iter, node uintptr + _, _ = iter, node + iter = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(24)) + node = _tre_ast_new_node(tls, mem, int32(_ITERATION), iter) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg = arg + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin = min + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax = max + SetBitFieldPtr8Uint32(iter+16, uint32(minimal), 0, 0x1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(arg)).Fnum_submatches + return node +} + +func _tre_ast_new_union(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var node, un uintptr + _, _ = node, un + if !(left != 0) { + return right + } + un = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_UNION), un) + if !(node != 0) || !(right != 0) { + return uintptr(0) + } + (*Ttre_union_t)(unsafe.Pointer(un)).Fleft = left + (*Ttre_union_t)(unsafe.Pointer(un)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +func _tre_ast_new_catenation(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var cat, node uintptr + _, _ = cat, node + if !(left != 0) { + return right + } + cat = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_CATENATION), cat) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft = left + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_t = struct { + Fsize int32 + Fmax_size int32 + Fincrement int32 + Fptr int32 + Fstack uintptr +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_rec = Ttre_stack_t + +/* Just to save some typing. */ + +type Ttre_stack_item = struct { + Fint_value [0]int32 + Fvoidptr_value uintptr +} + +func _tre_stack_new(tls *TLS, size int32, max_size int32, increment int32) (r uintptr) { + var s uintptr + _ = s + s = Xmalloc(tls, uint64(24)) + if s != UintptrFromInt32(0) { + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = Xmalloc(tls, uint64(8)*uint64(size)) + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack == UintptrFromInt32(0) { + Xfree(tls, s) + return UintptrFromInt32(0) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size = max_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement = increment + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr = 0 + } + return s +} + +func _tre_stack_destroy(tls *TLS, s uintptr) { + Xfree(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack) + Xfree(tls, s) +} + +func _tre_stack_num_objects(tls *TLS, s uintptr) (r int32) { + return (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr +} + +func _tre_stack_push(tls *TLS, s uintptr, value Ttre_stack_item) (r Treg_errcode_t) { + var new_buffer uintptr + var new_size int32 + _, _ = new_buffer, new_size + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr < (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize { + *(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr((*Ttre_stack_t)(unsafe.Pointer(s)).Fptr)*8)) = value + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr++ + } else { + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize >= (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + return int32(REG_ESPACE) + } else { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement + if new_size > (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size + } + new_buffer = Xrealloc(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack, uint64(8)*uint64(new_size)) + if new_buffer == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = new_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = new_buffer + _tre_stack_push(tls, s, value) + } + } + return REG_OK +} + +func _tre_stack_push_int(tls *TLS, s uintptr, value int32) (r Treg_errcode_t) { + var item Ttre_stack_item + _ = item + *(*int32)(unsafe.Pointer(&item)) = value + return _tre_stack_push(tls, s, item) +} + +func _tre_stack_push_voidptr(tls *TLS, s uintptr, value uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*uintptr)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_pop_int(tls *TLS, s uintptr) (r int32) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*int32)(unsafe.Pointer(&*(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)))) +} + +func _tre_stack_pop_voidptr(tls *TLS, s uintptr) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*uintptr)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)) +} + +/*********************************************************************** + from tre-parse.c and tre-parse.h +***********************************************************************/ + +// C documentation +// +// /* Parse context. */ +type Ttre_parse_ctx_t = struct { + Fmem Ttre_mem_t + Fstack uintptr + Fn uintptr + Fs uintptr + Fstart uintptr + Fsubmatch_id int32 + Fposition int32 + Fmax_backref int32 + Fcflags int32 +} + +// C documentation +// +// /* Some macros for expanding \w, \s, etc. */ +var _tre_macros = [13]struct { + Fc uint8 + Fexpansion uintptr +}{ + 0: { + Fc: uint8('t'), + Fexpansion: __ccgo_ts + 1439, + }, + 1: { + Fc: uint8('n'), + Fexpansion: __ccgo_ts + 301, + }, + 2: { + Fc: uint8('r'), + Fexpansion: __ccgo_ts + 1441, + }, + 3: { + Fc: uint8('f'), + Fexpansion: __ccgo_ts + 1443, + }, + 4: { + Fc: uint8('a'), + Fexpansion: __ccgo_ts + 1445, + }, + 5: { + Fc: uint8('e'), + Fexpansion: __ccgo_ts + 1447, + }, + 6: { + Fc: uint8('w'), + Fexpansion: __ccgo_ts + 1449, + }, + 7: { + Fc: uint8('W'), + Fexpansion: __ccgo_ts + 1462, + }, + 8: { + Fc: uint8('s'), + Fexpansion: __ccgo_ts + 1476, + }, + 9: { + Fc: uint8('S'), + Fexpansion: __ccgo_ts + 1488, + }, + 10: { + Fc: uint8('d'), + Fexpansion: __ccgo_ts + 1501, + }, + 11: { + Fc: uint8('D'), + Fexpansion: __ccgo_ts + 1513, + }, + 12: {}, +} + +// C documentation +// +// /* Expands a macro delimited by `regex' and `regex_end' to `buf', which +// must have at least `len' items. Sets buf[0] to zero if the there +// is no match in `tre_macros'. */ +func _tre_expand_macro(tls *TLS, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(_tre_macros[i].Fc != 0 && int32(_tre_macros[i].Fc) != int32(*(*uint8)(unsafe.Pointer(s)))) { + break + } + goto _1 + _1: + ; + i++ + } + return _tre_macros[i].Fexpansion +} + +func _tre_compare_lit(tls *TLS, a uintptr, b uintptr) (r int32) { + var la, lb uintptr + _, _ = la, lb + la = a + lb = b + /* assumes the range of valid code_min is < INT_MAX */ + return int32((*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(la)))).Fcode_min - (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(lb)))).Fcode_min) +} + +type Tliterals = struct { + Fmem Ttre_mem_t + Fa uintptr + Flen1 int32 + Fcap1 int32 +} + +func _tre_new_lit(tls *TLS, p uintptr) (r uintptr) { + var a, v2 uintptr + var v1 int32 + _, _, _ = a, v1, v2 + if (*Tliterals)(unsafe.Pointer(p)).Flen1 >= (*Tliterals)(unsafe.Pointer(p)).Fcap1 { + if (*Tliterals)(unsafe.Pointer(p)).Fcap1 >= Int32FromInt32(1)< max { + return int32(REG_ERANGE) + } + s += uintptr(len1) + } + } + if class != 0 && (*Tneg)(unsafe.Pointer(neg)).Fnegate != 0 { + if (*Tneg)(unsafe.Pointer(neg)).Flen1 >= int32(MAX_NEG_CLASSES) { + return int32(REG_ESPACE) + } + v6 = neg + 4 + v5 = *(*int32)(unsafe.Pointer(v6)) + *(*int32)(unsafe.Pointer(v6))++ + *(*Ttre_ctype_t)(unsafe.Pointer(neg + 8 + uintptr(v5)*8)) = class + } else { + lit = _tre_new_lit(tls, ls) + if !(lit != 0) { + return int32(REG_ESPACE) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass = class + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* Add opposite-case codepoints if REG_ICASE is present. + It seems that POSIX requires that bracket negation + should happen before case-folding, but most practical + implementations do it the other way around. Changing + the order would need efficient representation of + case-fold ranges and bracket range sets even with + simple patterns so this is ok for now. */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && !(class != 0) { + if _add_icase_literals(tls, ls, min, max) != 0 { + return int32(REG_ESPACE) + } + } + } + goto _1 + _1: + } + return r +} + +func _parse_bracket(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(544) + defer tls.Free(544) + var err Treg_errcode_t + var i, max, min, negmax, negmin, v1, v3 int32 + var lit, n, nc, node uintptr + var _ /* ls at bp+0 */ Tliterals + var _ /* neg at bp+24 */ Tneg + _, _, _, _, _, _, _, _, _, _, _, _ = err, i, lit, max, min, n, nc, negmax, negmin, node, v1, v3 + node = uintptr(0) + nc = uintptr(0) + (*(*Tliterals)(unsafe.Pointer(bp))).Fmem = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem + (*(*Tliterals)(unsafe.Pointer(bp))).Flen1 = 0 + (*(*Tliterals)(unsafe.Pointer(bp))).Fcap1 = int32(32) + (*(*Tliterals)(unsafe.Pointer(bp))).Fa = Xmalloc(tls, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Fcap1)*uint64(8)) + if !((*(*Tliterals)(unsafe.Pointer(bp))).Fa != 0) { + return int32(REG_ESPACE) + } + (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 = 0 + (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate = BoolInt32(int32(*(*uint8)(unsafe.Pointer(s))) == int32('^')) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + s++ + } + err = _parse_bracket_terms(tls, ctx, s, bp, bp+24) + if err != REG_OK { + goto parse_bracket_done + } + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + /* + * With REG_NEWLINE, POSIX requires that newlines are not matched by + * any form of a non-matching list. + */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + } + /* Sort the array if we need to negate it. */ + Xqsort(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Flen1), uint64(8), __ccgo_fp(_tre_compare_lit)) + /* extra lit for the last negated range */ + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* negated classes */ + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 != 0 { + nc = X__tre_mem_alloc_impl(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, UintptrFromInt32(0), 0, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1+Int32FromInt32(1))*uint64(8)) + if !(nc != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + Xmemcpy(tls, nc, bp+24+8, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*uint64(8)) + *(*Ttre_ctype_t)(unsafe.Pointer(nc + uintptr((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*8)) = uint64(0) + } + } + /* Build a union of the items in the array, negated if necessary. */ + v1 = Int32FromInt32(0) + negmin = v1 + negmax = v1 + i = 0 + for { + if !(i < (*(*Tliterals)(unsafe.Pointer(bp))).Flen1) { + break + } + lit = *(*uintptr)(unsafe.Pointer((*(*Tliterals)(unsafe.Pointer(bp))).Fa + uintptr(i)*8)) + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + if min <= negmin { + /* Overlap. */ + if max+int32(1) >= negmin { + v3 = max + int32(1) + } else { + v3 = negmin + } + negmin = v3 + goto _2 + } + negmax = min - int32(1) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(negmin) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(negmax) + negmin = max + int32(1) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes = nc + n = _tre_ast_new_node(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(_LITERAL), lit) + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, node, n) + if !(node != 0) { + err = int32(REG_ESPACE) + break + } + goto _2 + _2: + ; + i++ + } + goto parse_bracket_done +parse_bracket_done: + ; + Xfree(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return err +} + +func _parse_dup_count(tls *TLS, s uintptr, n uintptr) (r uintptr) { + *(*int32)(unsafe.Pointer(n)) = -int32(1) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return s + } + *(*int32)(unsafe.Pointer(n)) = 0 + for { + *(*int32)(unsafe.Pointer(n)) = int32(10)**(*int32)(unsafe.Pointer(n)) + (int32(*(*uint8)(unsafe.Pointer(s))) - int32('0')) + s++ + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) || *(*int32)(unsafe.Pointer(n)) > int32(RE_DUP_MAX) { + break + } + goto _1 + _1: + } + return s +} + +func _parse_dup(tls *TLS, s uintptr, ere int32, pmin uintptr, pmax uintptr) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v4 uintptr + var v2, v3, v5 bool + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _ = v1, v2, v3, v4, v5 + s = _parse_dup_count(tls, s, bp) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(',') { + s = _parse_dup_count(tls, s+uintptr(1), bp+4) + } else { + *(*int32)(unsafe.Pointer(bp + 4)) = *(*int32)(unsafe.Pointer(bp)) + } + if v3 = *(*int32)(unsafe.Pointer(bp + 4)) < *(*int32)(unsafe.Pointer(bp)) && *(*int32)(unsafe.Pointer(bp + 4)) >= 0 || *(*int32)(unsafe.Pointer(bp + 4)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) < 0; !v3 { + if v2 = !(ere != 0); v2 { + v1 = s + s++ + } + } + if v5 = v3 || v2 && int32(*(*uint8)(unsafe.Pointer(v1))) != int32('\\'); !v5 { + v4 = s + s++ + } + if v5 || int32(*(*uint8)(unsafe.Pointer(v4))) != int32('}') { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(pmin)) = *(*int32)(unsafe.Pointer(bp)) + *(*int32)(unsafe.Pointer(pmax)) = *(*int32)(unsafe.Pointer(bp + 4)) + return s +} + +func _hexval1(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func _marksub(tls *TLS, ctx uintptr, node uintptr, subid int32) (r Treg_errcode_t) { + var n uintptr + _ = n + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + n = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !(n != 0) { + return int32(REG_ESPACE) + } + n = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, n, node) + if !(n != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(n)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches + node = n + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = subid + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return REG_OK +} + +/* +BRE grammar: +Regex = Branch | '^' | '$' | '^$' | '^' Branch | Branch '$' | '^' Branch '$' +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '\(' Branch '\)' | back_ref +Dup = '*' | '\{' Count '\}' | '\{' Count ',\}' | '\{' Count ',' Count '\}' + +(leading ^ and trailing $ in a sub expr may be an anchor or literal as well) + +ERE grammar: +Regex = Branch | Regex '|' Branch +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '(' Regex ')' | '^' | '$' +Dup = '*' | '+' | '?' | '{' Count '}' | '{' Count ',}' | '{' Count ',' Count '}' + +(a*+?, ^*, $+, \X, {, (|a) are unspecified) +*/ + +func _parse_atom(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, ere, i, len1, v, val, v16, v18, v20, v21, v23, v25 int32 + var err Treg_errcode_t + var node, p, tmp1, tmp11, tmp2, tmp21, v14, v17, v19, v22, v24, v26 uintptr + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ere, err, i, len1, node, p, tmp1, tmp11, tmp2, tmp21, v, val, v14, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26 + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('['): + goto _1 + case int32('\\'): + goto _2 + case int32('.'): + goto _3 + case int32('^'): + goto _4 + case int32('$'): + goto _5 + case int32('?'): + goto _6 + case int32('+'): + goto _7 + case int32('{'): + goto _8 + case int32('*'): + goto _9 + case int32('|'): + goto _10 + case 0: + goto _11 + default: + goto _12 + } + goto _13 +_1: + ; + return _parse_bracket(tls, ctx, s+uintptr(1)) +_2: + ; + p = _tre_expand_macro(tls, s+uintptr(1)) + if p != 0 { + /* assume \X expansion is a single atom */ + err = _parse_atom(tls, ctx, p) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + uintptr(2) + return err + } + /* extensions: \b, \B, \<, \>, \xHH \x{HHHH} */ + s++ + v14 = s + switch int32(*(*uint8)(unsafe.Pointer(v14))) { + case 0: + return int32(REG_EESCAPE) + case int32('b'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB), -int32(1)) + case int32('B'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB_NEG), -int32(1)) + case int32('<'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOW), -int32(1)) + case int32('>'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOW), -int32(1)) + case int32('x'): + s++ + v = 0 + len1 = int32(2) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + len1 = int32(8) + s++ + } + i = 0 + for { + if !(i < len1 && v < int32(0x110000)) { + break + } + c = _hexval1(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(i))))) + if c < 0 { + break + } + v = int32(16)*v + c + goto _15 + _15: + ; + i++ + } + s += uintptr(i) + if len1 == int32(8) { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('}') { + return int32(REG_EBRACE) + } + s++ + } + v17 = ctx + 44 + v16 = *(*int32)(unsafe.Pointer(v17)) + *(*int32)(unsafe.Pointer(v17))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, v, v, v16) + s-- + case int32('{'): + fallthrough + case int32('+'): + fallthrough + case int32('?'): + /* extension: treat \+, \? as repetitions in BRE */ + /* reject repetitions after empty expression in BRE */ + if !(ere != 0) { + return int32(REG_BADRPT) + } + fallthrough + case int32('|'): + /* extension: treat \| as alternation in BRE */ + if !(ere != 0) { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + s-- + goto end + } + /* fallthrough */ + fallthrough + default: + if !(ere != 0) && uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('1') < uint32(9) { + /* back reference */ + val = int32(*(*uint8)(unsafe.Pointer(s))) - int32('0') + v19 = ctx + 44 + v18 = *(*int32)(unsafe.Pointer(v19)) + *(*int32)(unsafe.Pointer(v19))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(4), val, v18) + if val >= (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref { + v20 = val + } else { + v20 = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref = v20 + } else { + /* extension: accept unknown escaped char + as a literal */ + goto parse_literal + } + } + s++ + goto _13 +_3: + ; + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + v22 = ctx + 44 + v21 = *(*int32)(unsafe.Pointer(v22)) + *(*int32)(unsafe.Pointer(v22))++ + tmp1 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, Int32FromUint8('\n')-Int32FromInt32(1), v21) + v24 = ctx + 44 + v23 = *(*int32)(unsafe.Pointer(v24)) + *(*int32)(unsafe.Pointer(v24))++ + tmp2 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, Int32FromUint8('\n')+Int32FromInt32(1), int32(TRE_CHAR_MAX), v23) + if tmp1 != 0 && tmp2 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp1, tmp2) + } else { + node = uintptr(0) + } + } else { + v26 = ctx + 44 + v25 = *(*int32)(unsafe.Pointer(v26)) + *(*int32)(unsafe.Pointer(v26))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, int32(TRE_CHAR_MAX), v25) + } + s++ + goto _13 +_4: + ; + /* '^' has a special meaning everywhere in EREs, and at beginning of BRE. */ + if !(ere != 0) && s != (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOL), -int32(1)) + s++ + goto _13 +_5: + ; + /* '$' is special everywhere in EREs, and at the end of a BRE subexpression. */ + if !(ere != 0) && *(*uint8)(unsafe.Pointer(s + 1)) != 0 && (int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('\\') || int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32(')') && int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32('|')) { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOL), -int32(1)) + s++ + goto _13 +_9: + ; +_8: + ; +_7: + ; +_6: + ; + /* reject repetitions after empty expression in ERE */ + if ere != 0 { + return int32(REG_BADRPT) + } +_10: + ; + if !(ere != 0) { + goto parse_literal + } +_11: + ; + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + goto _13 +_12: + ; + goto parse_literal +parse_literal: + ; + len1 = Xmbtowc(tls, bp, s, uint64(-Int32FromInt32(1))) + if len1 < 0 { + return int32(REG_BADPAT) + } + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && (Xiswupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0 || Xiswlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0) { + /* multiple opposite case characters are not supported */ + tmp11 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + tmp21 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + if tmp11 != 0 && tmp21 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp11, tmp21) + } else { + node = uintptr(0) + } + } else { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, *(*Twchar_t)(unsafe.Pointer(bp)), *(*Twchar_t)(unsafe.Pointer(bp)), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + s += uintptr(len1) + goto _13 +_13: + ; + goto end +end: + ; + if !(node != 0) { + return int32(REG_ESPACE) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + return REG_OK +} + +func _tre_parse(tls *TLS, ctx uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, depth, ere, subid, v2, v7 int32 + var err, v1, v4, v5, v6 Treg_errcode_t + var nbranch, nunion, s, stack, v8 uintptr + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, depth, ere, err, nbranch, nunion, s, stack, subid, v1, v2, v4, v5, v6, v7, v8 + nbranch = uintptr(0) + nunion = uintptr(0) + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart + subid = 0 + depth = 0 + stack = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstack + v2 = subid + subid++ + v1 = _tre_stack_push_int(tls, stack, v2) + err = v1 + if v1 != REG_OK { + return err + } + for { + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('(') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + v4 = _tre_stack_push_voidptr(tls, stack, nunion) + err = v4 + if v4 != REG_OK { + return err + } + v5 = _tre_stack_push_voidptr(tls, stack, nbranch) + err = v5 + if v5 != REG_OK { + return err + } + v7 = subid + subid++ + v6 = _tre_stack_push_int(tls, stack, v7) + err = v6 + if v6 != REG_OK { + return err + } + s++ + if !(ere != 0) { + s++ + } + depth++ + v8 = UintptrFromInt32(0) + nunion = v8 + nbranch = v8 + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + goto _3 + } + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + } else { + err = _parse_atom(tls, ctx, s) + if err != REG_OK { + return err + } + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs + } + goto parse_iter + parse_iter: + ; + for { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('\\') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('*') { + if !(ere != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('{') { + break + } + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && ere != 0 { + break + } + /* extension: treat \+, \? as repetitions in BRE */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('{') { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') { + s++ + } + /* handle ^* at the start of a BRE. */ + if !(ere != 0) && s == (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart+uintptr(1) && int32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) == int32('^') { + break + } + /* extension: multiple consecutive *+?{,} is unspecified, + but (a+)+ has to be supported so accepting a++ makes + sense, note however that the RE_DUP_MAX limit can be + circumvented: (a{255}){255} uses a lot of memory.. */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + s = _parse_dup(tls, s+uintptr(1), ere, bp, bp+4) + if !(s != 0) { + return int32(REG_BADBR) + } + } else { + *(*int32)(unsafe.Pointer(bp)) = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = -int32(1) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + *(*int32)(unsafe.Pointer(bp)) = int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('?') { + *(*int32)(unsafe.Pointer(bp + 4)) = int32(1) + } + s++ + } + if *(*int32)(unsafe.Pointer(bp + 4)) == 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + } else { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_iter(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), 0) + } + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + goto _9 + _9: + } + nbranch = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nbranch, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn) + if ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('|') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + /* extension: empty branch is unspecified (), (|a), (a|) + here they are not rejected but match on empty string */ + c = int32(*(*uint8)(unsafe.Pointer(s))) + nunion = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nunion, nbranch) + nbranch = uintptr(0) + if c == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') { + s += uintptr(2) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('|') { + s++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('\\') { + if !(depth != 0) { + return int32(REG_EPAREN) + } + s += uintptr(2) + } else { + if c == int32(')') { + s++ + } + } + depth-- + err = _marksub(tls, ctx, nunion, _tre_stack_pop_int(tls, stack)) + if err != REG_OK { + return err + } + if !(c != 0) && depth < 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fsubmatch_id = subid + return REG_OK + } + if !(c != 0) || depth < 0 { + return int32(REG_EPAREN) + } + nbranch = _tre_stack_pop_voidptr(tls, stack) + nunion = _tre_stack_pop_voidptr(tls, stack) + goto parse_iter + } + } + } + goto _3 + _3: + } + return r +} + +/*********************************************************************** + from tre-compile.c +***********************************************************************/ + +/* + TODO: + - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive + function calls. +*/ + +/* + Algorithms to setup tags so that submatch addressing can be done. +*/ + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the left child a new tag with number `tag_id' to `node' is added, +// and the right child is the old root. */ +func _tre_add_tag_left(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the right child a new tag with number `tag_id' to `node' is added, +// and the left child is the old root. */ +func _tre_add_tag_right(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +type Ttre_addtags_symbol_t = int32 + +const _ADDTAGS_RECURSE = 0 +const _ADDTAGS_AFTER_ITERATION = 1 +const _ADDTAGS_AFTER_UNION_LEFT = 2 +const _ADDTAGS_AFTER_UNION_RIGHT = 3 +const _ADDTAGS_AFTER_CAT_LEFT = 4 +const _ADDTAGS_AFTER_CAT_RIGHT = 5 +const _ADDTAGS_SET_SUBMATCH_END = 6 + +type Ttre_tag_states_t = struct { + Ftag int32 + Fnext_tag int32 +} + +// C documentation +// +// /* Go through `regset' and set submatch data for submatches that are +// using this tag. */ +func _tre_purge_regset(tls *TLS, regset uintptr, tnfa uintptr, tag int32) { + var i, id, start int32 + _, _, _ = i, id, start + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) >= 0) { + break + } + id = *(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) / int32(2) + start = BoolInt32(!(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4))%Int32FromInt32(2) != 0)) + if start != 0 { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Fso_tag = tag + } else { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Feo_tag = tag + } + goto _1 + _1: + ; + i++ + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) +} + +// C documentation +// +// /* Adds tags to appropriate locations in the parse tree in `tree', so that +// subexpressions marked for submatch addressing can be traced. */ +func _tre_add_tags(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr, tnfa uintptr) (r Treg_errcode_t) { + var added_tags, bottom, enter_tag, first_pass, i1, i2, i3, i4, i5, i6, i7, id, id1, left_tag, minimal, minimal_tag, new_tag, next_tag, num_minimals, num_tags, reserved_tag, right_tag, tag, tag_left, tag_right, v22 int32 + var cat, iter, left, left1, left2, lit, node, orig_regset, p, parents, regset, right, right1, right2, saved_states, uni uintptr + var direction Ttre_tag_direction_t + var i uint32 + var status Treg_errcode_t + var symbol Ttre_addtags_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = added_tags, bottom, cat, direction, enter_tag, first_pass, i, i1, i2, i3, i4, i5, i6, i7, id, id1, iter, left, left1, left2, left_tag, lit, minimal, minimal_tag, new_tag, next_tag, node, num_minimals, num_tags, orig_regset, p, parents, regset, reserved_tag, right, right1, right2, right_tag, saved_states, status, symbol, tag, tag_left, tag_right, uni, v22 + status = REG_OK + node = tree /* Tree node we are currently looking at. */ + bottom = _tre_stack_num_objects(tls, stack) + /* True for first pass (counting number of needed tags) */ + first_pass = BoolInt32(mem == UintptrFromInt32(0) || tnfa == UintptrFromInt32(0)) + num_tags = 0 /* Total number of tags. */ + num_minimals = 0 /* Number of special minimal tags. */ + tag = 0 /* The tag that is to be added next. */ + next_tag = int32(1) /* Stack of submatches the current submatch is + contained in. */ + minimal_tag = -int32(1) + direction = int32(_TRE_TAG_MINIMIZE) + if !(first_pass != 0) { + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = 0 + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags)) = -int32(1) + } + regset = Xmalloc(tls, uint64(4)*uint64(((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))*Uint32FromInt32(2))) + if regset == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + orig_regset = regset + parents = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if parents == UintptrFromInt32(0) { + Xfree(tls, regset) + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(parents)) = -int32(1) + saved_states = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if saved_states == UintptrFromInt32(0) { + Xfree(tls, regset) + Xfree(tls, parents) + return int32(REG_ESPACE) + } else { + i = uint32(0) + for { + if !(i <= (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + (*(*Ttre_tag_states_t)(unsafe.Pointer(saved_states + uintptr(i)*8))).Ftag = -int32(1) + goto _1 + _1: + ; + i++ + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + for _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_ADDTAGS_SET_SUBMATCH_END): + goto _2 + case int32(_ADDTAGS_RECURSE): + goto _3 + case int32(_ADDTAGS_AFTER_ITERATION): + goto _4 + case int32(_ADDTAGS_AFTER_CAT_LEFT): + goto _5 + case int32(_ADDTAGS_AFTER_CAT_RIGHT): + goto _6 + case int32(_ADDTAGS_AFTER_UNION_LEFT): + goto _7 + case int32(_ADDTAGS_AFTER_UNION_RIGHT): + goto _8 + default: + goto _9 + } + goto _10 + _2: + ; + id = _tre_stack_pop_int(tls, stack) + /* Add end of this submatch to regset. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) >= 0) { + break + } + goto _11 + _11: + ; + i1++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) = id*int32(2) + int32(1) + *(*int32)(unsafe.Pointer(regset + uintptr(i1+int32(1))*4)) = -int32(1) + /* Pop this submatch from the parents stack. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i1)*4)) >= 0) { + break + } + goto _12 + _12: + ; + i1++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i1-int32(1))*4)) = -int32(1) + goto _10 + _3: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + id1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + /* Add start of this submatch to regset. */ + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) >= 0) { + break + } + goto _13 + _13: + ; + i2++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) = id1 * int32(2) + *(*int32)(unsafe.Pointer(regset + uintptr(i2+int32(1))*4)) = -int32(1) + if !(first_pass != 0) { + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + goto _14 + _14: + ; + i2++ + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = UintptrFromInt32(0) + if i2 > 0 { + p = Xmalloc(tls, uint64(4)*uint64(i2+Int32FromInt32(1))) + if p == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + goto _10 + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = p + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = *(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) + goto _15 + _15: + ; + i2++ + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = -int32(1) + } + } + /* Add end of this submatch to regset after processing this + node. */ + status = _tre_stack_push_int(tls, stack, (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id) + if status != REG_OK { + goto _10 + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_SET_SUBMATCH_END)) + if status != REG_OK { + goto _10 + } + } + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + /* Regset is not empty, so add a tag before the + literal or backref. */ + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i3 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) >= 0) { + break + } + goto _16 + _16: + ; + i3++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = int32(1) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + } else { + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft + right = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright + reserved_tag = -int32(1) + /* After processing right child. */ + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, next_tag+(*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags) + if status != REG_OK { + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags > 0 && (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_tags > 0 { + /* Reserve the next tag to the right child. */ + reserved_tag = next_tag + next_tag++ + } + status = _tre_stack_push_int(tls, stack, reserved_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if first_pass != 0 { + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0)) + if status != REG_OK { + break + } + } else { + status = _tre_stack_push_int(tls, stack, tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if status != REG_OK { + break + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_ITERATION)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + if int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = int32(_TRE_TAG_MAXIMIZE) + } else { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + } + if minimal_tag >= 0 { + i4 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) >= 0) { + break + } + goto _17 + _17: + ; + i4++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + direction = int32(_TRE_TAG_MINIMIZE) + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft + right1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fright + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + left_tag = next_tag + right_tag = next_tag + int32(1) + } else { + left_tag = tag + right_tag = next_tag + } + /* After processing right child. */ + status = _tre_stack_push_int(tls, stack, right_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, left_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, regset) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i5 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) >= 0) { + break + } + goto _18 + _18: + ; + i5++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + /* The next two tags are reserved for markers. */ + next_tag++ + tag = next_tag + next_tag++ + } + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + /* Push this submatch on the parents stack. */ + i6 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) >= 0) { + break + } + goto _19 + _19: + ; + i6++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + *(*int32)(unsafe.Pointer(parents + uintptr(i6+int32(1))*4)) = -int32(1) + } + goto _10 /* end case: ADDTAGS_RECURSE */ + _4: + ; + minimal = 0 + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg)).Fnum_tags + _tre_stack_pop_int(tls, stack) + minimal_tag = -int32(1) + } else { + minimal = _tre_stack_pop_int(tls, stack) + enter_tag = _tre_stack_pop_int(tls, stack) + if minimal != 0 { + minimal_tag = enter_tag + } + } + if !(first_pass != 0) { + if minimal != 0 { + direction = int32(_TRE_TAG_MINIMIZE) + } else { + direction = int32(_TRE_TAG_MAXIMIZE) + } + } + goto _10 + _5: + ; + new_tag = _tre_stack_pop_int(tls, stack) + next_tag = _tre_stack_pop_int(tls, stack) + if new_tag >= 0 { + tag = new_tag + } + goto _10 + _6: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + } + goto _10 + _7: + ; + /* Lift the bottom of the `regset' array so that when processing + the right operand the items currently in the array are + invisible. The original bottom was saved at ADDTAGS_UNION and + will be restored at ADDTAGS_AFTER_UNION_RIGHT below. */ + _21: + ; + if !(*(*int32)(unsafe.Pointer(regset)) >= 0) { + goto _20 + } + regset += 4 + goto _21 + _20: + ; + goto _10 + _8: + ; + left2 = _tre_stack_pop_voidptr(tls, stack) + right2 = _tre_stack_pop_voidptr(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + added_tags = _tre_stack_pop_int(tls, stack) + if first_pass != 0 { + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + v22 = int32(2) + } else { + v22 = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + added_tags + v22 + } + regset = _tre_stack_pop_voidptr(tls, stack) + tag_left = _tre_stack_pop_int(tls, stack) + tag_right = _tre_stack_pop_int(tls, stack) + /* Add tags after both children, the left child gets a smaller + tag than the right child. This guarantees that we prefer + the left child over the right child. */ + /* XXX - This is not always necessary (if the children have + tags which must be seen for every match of that child). */ + /* XXX - Check if this is the only place where tre_add_tag_right + is used. If so, use tre_add_tag_left (putting the tag before + the child as opposed after the child) and throw away + tre_add_tag_right. */ + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + if !(first_pass != 0) { + status = _tre_add_tag_right(tls, mem, left2, tag_left) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_left)*4)) = int32(_TRE_TAG_MAXIMIZE) + if status == REG_OK { + status = _tre_add_tag_right(tls, mem, right2, tag_right) + } + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_right)*4)) = int32(_TRE_TAG_MAXIMIZE) + } + num_tags += int32(2) + } + direction = int32(_TRE_TAG_MAXIMIZE) + goto _10 + _9: + ; + goto _10 + _10: + /* end switch(symbol) */ + } /* end while(tre_stack_num_objects(stack) > bottom) */ + if !(first_pass != 0) { + _tre_purge_regset(tls, regset, tnfa, tag) + } + if !(first_pass != 0) && minimal_tag >= 0 { + i7 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) >= 0) { + break + } + goto _23 + _23: + ; + i7++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals = num_minimals + Xfree(tls, orig_regset) + Xfree(tls, parents) + Xfree(tls, saved_states) + return status +} + +/* + AST to TNFA compilation routines. +*/ + +type Ttre_copyast_symbol_t = int32 + +const _COPY_RECURSE = 0 +const _COPY_SET_RESULT_PTR = 1 + +/* Flags for tre_copy_ast(). */ + +func _tre_copy_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, flags int32, pos_add uintptr, tag_directions uintptr, copy1 uintptr, max_pos uintptr) (r Treg_errcode_t) { + var bottom, first_tag, max, min, num_copied, pos, v1 int32 + var cat, iter, lit, node, p, result, tmp, tmp1, uni uintptr + var status Treg_errcode_t + var symbol Ttre_copyast_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bottom, cat, first_tag, iter, lit, max, min, node, num_copied, p, pos, result, status, symbol, tmp, tmp1, uni, v1 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + num_copied = 0 + first_tag = int32(1) + result = copy1 + status = _tre_stack_push_voidptr(tls, stack, ast) + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_COPY_SET_RESULT_PTR): + result = _tre_stack_pop_voidptr(tls, stack) + case int32(_COPY_RECURSE): + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + pos = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* XXX - e.g. [ab] has only one position but two + nodes, so we are creating holes in the state space + here. Not fatal, just wastes memory. */ + pos += *(*int32)(unsafe.Pointer(pos_add)) + num_copied++ + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_REMOVE_TAGS) != 0 { + /* Change this tag to empty. */ + min = -int32(1) + v1 = -Int32FromInt32(1) + pos = v1 + max = v1 + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_MAXIMIZE_FIRST_TAG) != 0 && first_tag != 0 { + /* Maximize the first tag. */ + *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(max)*4)) = int32(_TRE_TAG_MAXIMIZE) + first_tag = 0 + } + } + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_literal(tls, mem, min, max, pos) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + } else { + p = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_literal_t)(unsafe.Pointer(p)).Fclass = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass + (*Ttre_literal_t)(unsafe.Pointer(p)).Fneg_classes = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes + } + if pos > *(*int32)(unsafe.Pointer(max_pos)) { + *(*int32)(unsafe.Pointer(max_pos)) = pos + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_union(tls, mem, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = tmp + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_catenation(tls, mem, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp1 = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fleft = UintptrFromInt32(0) + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fright = UintptrFromInt32(0) + result = tmp1 + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp1+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_iter(tls, mem, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + iter = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = iter + default: + break + } + break + } + } + *(*int32)(unsafe.Pointer(pos_add)) += num_copied + return status +} + +type Ttre_expand_ast_symbol_t = int32 + +const _EXPAND_RECURSE = 0 +const _EXPAND_AFTER_ITER = 1 + +// C documentation +// +// /* Expands each iteration node that has a finite nonzero minimum or maximum +// iteration count to a catenated sequence of copies of the node. */ +func _tre_expand_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, position uintptr, tag_directions uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var _status, _status1, status Treg_errcode_t + var bottom, flags, iter_depth, j, pos_add_last, pos_add_save, pos_add_total, v2 int32 + var cat, iter, iter1, lit, node, seq1, tmp, uni uintptr + var symbol Ttre_expand_ast_symbol_t + var _ /* copy at bp+16 */ uintptr + var _ /* copy at bp+24 */ uintptr + var _ /* max_pos at bp+4 */ int32 + var _ /* pos_add at bp+0 */ int32 + var _ /* seq2 at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, bottom, cat, flags, iter, iter1, iter_depth, j, lit, node, pos_add_last, pos_add_save, pos_add_total, seq1, status, symbol, tmp, uni, v2 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + *(*int32)(unsafe.Pointer(bp)) = 0 + pos_add_total = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + iter_depth = 0 + _status = _tre_stack_push_voidptr(tls, stack, ast) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_EXPAND_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + *(*int32)(unsafe.Pointer(lit + 16)) += *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition > *(*int32)(unsafe.Pointer(bp + 4)) { + *(*int32)(unsafe.Pointer(bp + 4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + } + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_int(tls, stack, *(*int32)(unsafe.Pointer(bp))) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_AFTER_ITER)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + /* If we are going to expand this node at EXPAND_AFTER_ITER + then don't increase the `pos' fields of the nodes now, it + will get done when expanding. */ + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax > int32(1) { + *(*int32)(unsafe.Pointer(bp)) = 0 + } + iter_depth++ + default: + break + } + case int32(_EXPAND_AFTER_ITER): + iter1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*int32)(unsafe.Pointer(bp)) = _tre_stack_pop_int(tls, stack) + pos_add_last = *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax > int32(1) { + seq1 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = UintptrFromInt32(0) + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + /* Create a catenated sequence of copies of the node. */ + j = 0 + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin) { + break + } + if j+int32(1) < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin { + v2 = int32(COPY_REMOVE_TAGS) + } else { + v2 = int32(COPY_MAXIMIZE_FIRST_TAG) + } + /* Remove tags from all but the last copy. */ + flags = v2 + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, flags, bp, tag_directions, bp+16, bp+4) + if status != REG_OK { + return status + } + if seq1 != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 16))) + } else { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 16)) + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _1 + _1: + ; + j++ + } + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax == -int32(1) { + /* No upper limit. */ + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+8, bp+4) + if status != REG_OK { + return status + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_iter(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, -int32(1), 0) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } else { + j = (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax) { + break + } + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+24, bp+4) + if status != REG_OK { + return status + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_catenation(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*uintptr)(unsafe.Pointer(bp + 8))) + } else { + *(*uintptr)(unsafe.Pointer(bp + 8)) = *(*uintptr)(unsafe.Pointer(bp + 24)) + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + tmp = _tre_ast_new_literal(tls, mem, -int32(1), -int32(1), -int32(1)) + if tmp == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_union(tls, mem, tmp, *(*uintptr)(unsafe.Pointer(bp + 8))) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _3 + _3: + ; + j++ + } + } + *(*int32)(unsafe.Pointer(bp)) = pos_add_save + if seq1 == UintptrFromInt32(0) { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 8))) + } + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Ftype1 + } + iter_depth-- + pos_add_total += *(*int32)(unsafe.Pointer(bp)) - pos_add_last + if iter_depth == 0 { + *(*int32)(unsafe.Pointer(bp)) = pos_add_total + } + default: + break + } + } + *(*int32)(unsafe.Pointer(position)) += pos_add_total + /* `max_pos' should never be larger than `*position' if the above + code works, but just an extra safeguard let's make sure + `*position' is set large enough so enough memory will be + allocated for the transition table. */ + if *(*int32)(unsafe.Pointer(bp + 4)) > *(*int32)(unsafe.Pointer(position)) { + *(*int32)(unsafe.Pointer(position)) = *(*int32)(unsafe.Pointer(bp + 4)) + } + return status +} + +func _tre_set_empty(tls *TLS, mem Ttre_mem_t) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_one(tls *TLS, mem Ttre_mem_t, position int32, code_min int32, code_max int32, class Ttre_ctype_t, neg_classes uintptr, backref int32) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), Uint64FromInt64(56)*Uint64FromInt32(2)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = position + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = code_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = code_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fclass = class + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fneg_classes = neg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fbackref = backref + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_union(tls *TLS, mem Ttre_mem_t, set1 uintptr, set2 uintptr, tags uintptr, assertions int32) (r uintptr) { + var i, j, num_tags, s1, s2 int32 + var new_set, new_tags uintptr + _, _, _, _, _, _, _ = i, j, new_set, new_tags, num_tags, s1, s2 + num_tags = 0 + for { + if !(tags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer(tags + uintptr(num_tags)*4)) >= 0) { + break + } + goto _1 + _1: + ; + num_tags++ + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + goto _2 + _2: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + goto _3 + _3: + ; + s2++ + } + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)*uint64(s1+s2+Int32FromInt32(1))) + if !(new_set != 0) { + return UintptrFromInt32(0) + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fassertions | assertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags == UintptrFromInt32(0) && tags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _5 + _5: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, Uint64FromInt64(4)*uint64(i+num_tags+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(j)*4)) + goto _6 + _6: + ; + j++ + } + i = 0 + for { + if !(i < num_tags) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) + goto _7 + _7: + ; + i++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = new_tags + } + goto _4 + _4: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_max + /* XXX - why not | assertions here as well? */ + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fassertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _9 + _9: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(4)*uint64(i+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(j)*4)) + goto _10 + _10: + ; + j++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = new_tags + } + goto _8 + _8: + ; + s2++ + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = -int32(1) + return new_set +} + +// C documentation +// +// /* Finds the empty path through `node' which is the one that should be +// taken according to POSIX.2 rules, and adds the tags on that path to +// `tags'. `tags' may be NULL. If `num_tags_seen' is not NULL, it is +// set to the number of tags seen on the path. */ +func _tre_match_empty(tls *TLS, stack uintptr, node uintptr, tags uintptr, assertions uintptr, num_tags_seen uintptr) (r Treg_errcode_t) { + var bottom, i int32 + var cat, iter, lit, uni, p2 uintptr + var status Treg_errcode_t + _, _, _, _, _, _, _, _ = bottom, cat, i, iter, lit, status, uni, p2 + bottom = _tre_stack_num_objects(tls, stack) + status = REG_OK + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen)) = 0 + } + status = _tre_stack_push_voidptr(tls, stack, node) + /* Walk through the tree recursively. */ + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + switch (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min { + case int64(-int32(3)): + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max >= 0 { + if tags != UintptrFromInt32(0) { + /* Add the tag to `tags'. */ + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) >= 0) { + break + } + if int64(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4))) == (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max { + break + } + goto _1 + _1: + ; + i++ + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + *(*int32)(unsafe.Pointer(tags + uintptr(i+int32(1))*4)) = -int32(1) + } + } + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen))++ + } + } + case int64(-int32(2)): + if assertions != UintptrFromInt32(0) { + p2 = assertions + *(*int32)(unsafe.Pointer(p2)) = int32(int64(*(*int32)(unsafe.Pointer(p2))) | (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + } + case int64(-int32(1)): + default: + break + } + case int32(_UNION): + /* Subexpressions starting earlier take priority over ones + starting later, so we prefer the left subexpression over the + right subexpression. */ + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + } else { + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + } else { + } + } + case int32(_CATENATION): + /* The path must go through both children. */ + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + case int32(_ITERATION): + /* A match with an empty string is preferred over no match at + all, so we go through the argument if possible. */ + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + } + default: + break + } + } + return status +} + +type Ttre_nfl_stack_symbol_t = int32 + +const _NFL_RECURSE = 0 +const _NFL_POST_UNION = 1 +const _NFL_POST_CATENATION = 2 +const _NFL_POST_ITERATION = 3 + +// C documentation +// +// /* Computes and fills in the fields `nullable', `firstpos', and `lastpos' for +// the nodes of the AST `tree'. */ +func _tre_compute_nfl(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, status Treg_errcode_t + var bottom int32 + var cat, iter, lit, node, tags, uni uintptr + var symbol Ttre_nfl_stack_symbol_t + var _ /* assertions at bp+4 */ int32 + var _ /* num_tags at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, bottom, cat, iter, lit, node, status, symbol, tags, uni + bottom = _tre_stack_num_objects(tls, stack) + _status = _tre_stack_push_voidptr(tls, stack, tree) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for _tre_stack_num_objects(tls, stack) > bottom { + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_NFL_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* Back references: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < 0 { + /* Tags, empty strings, params, and zero width assertions: + nullable = true, firstpos = {}, and lastpos = {}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + /* Literal at position i: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes, -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } + } + case int32(_UNION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status2 = _tre_stack_push_voidptr(tls, stack, node) + if _status2 != REG_OK { + return _status2 + } + _status3 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_UNION)) + if _status3 != REG_OK { + return _status3 + } + _status4 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status4 != REG_OK { + return _status4 + } + _status5 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status5 != REG_OK { + return _status5 + } + _status6 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status6 != REG_OK { + return _status6 + } + _status7 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status7 != REG_OK { + return _status7 + } + case int32(_CATENATION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status8 = _tre_stack_push_voidptr(tls, stack, node) + if _status8 != REG_OK { + return _status8 + } + _status9 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_CATENATION)) + if _status9 != REG_OK { + return _status9 + } + _status10 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status10 != REG_OK { + return _status10 + } + _status11 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status11 != REG_OK { + return _status11 + } + _status12 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status12 != REG_OK { + return _status12 + } + _status13 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status13 != REG_OK { + return _status13 + } + case int32(_ITERATION): + /* Compute the attributes for the subtree, and after that for + this node. */ + _status14 = _tre_stack_push_voidptr(tls, stack, node) + if _status14 != REG_OK { + return _status14 + } + _status15 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_ITERATION)) + if _status15 != REG_OK { + return _status15 + } + _status16 = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg) + if _status16 != REG_OK { + return _status16 + } + _status17 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status17 != REG_OK { + return _status17 + } + break + } + case int32(_NFL_POST_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Ffirstpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Flastpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + case int32(_NFL_POST_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin == 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos + case int32(_NFL_POST_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 && (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0) + /* Compute firstpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 { + /* The left side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos + } + /* Compute lastpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0 { + /* The right side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos + } + default: + break + } + } + return REG_OK +} + +// C documentation +// +// /* Adds a transition from each position in `p1' to each position in `p2'. */ +func _tre_make_trans(tls *TLS, p1 uintptr, p2 uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var dup, i, j, k, l, prev_p2_pos, v1, v2, v6 int32 + var orig_p2, trans uintptr + _, _, _, _, _, _, _, _, _, _, _ = dup, i, j, k, l, orig_p2, prev_p2_pos, trans, v1, v2, v6 + orig_p2 = p2 + if transitions != UintptrFromInt32(0) { + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + prev_p2_pos = -int32(1) + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + /* Optimization: if this position was already handled, skip it. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition == prev_p2_pos { + p2 += 56 + continue + } + prev_p2_pos = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + /* Set `trans' to point to the next unused transition from + position `p1->position'. */ + trans = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4)))*56 + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != UintptrFromInt32(0) { + trans += 56 + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate == UintptrFromInt32(0) { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans + UintptrFromInt32(1)*56)).Fstate = UintptrFromInt32(0) + } + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_min = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_min) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_max = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_max) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition)*4)))*56 + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass != 0 { + v1 = int32(ASSERT_CHAR_CLASS) + } else { + v1 = 0 + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + v2 = int32(ASSERT_CHAR_CLASS_NEG) + } else { + v2 = 0 + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fassertions | (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fassertions | v1 | v2 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref >= 0 { + *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fu)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref + *(*int32)(unsafe.Pointer(trans + 32)) |= int32(ASSERT_BACKREF) + } else { + *(*Ttre_ctype_t)(unsafe.Pointer(trans + 40)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + goto _3 + _3: + ; + i++ + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = Xmalloc(tls, uint64(8)*uint64(i+Int32FromInt32(1))) + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) + goto _4 + _4: + ; + i++ + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = Uint64FromInt32(0) + } else { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = UintptrFromInt32(0) + } + /* Find out how many tags this transition has. */ + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + i++ + } + } + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + j++ + } + } + /* If we are overwriting a transition, free the old tag array. */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = UintptrFromInt32(0) + /* If there were any tags, allocate an array and fill it. */ + if i+j > 0 { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = Xmalloc(tls, uint64(4)*uint64(i+j+Int32FromInt32(1))) + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0) { + return int32(REG_ESPACE) + } + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) + i++ + } + } + l = i + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + /* Don't add duplicates. */ + dup = 0 + k = 0 + for { + if !(k < i) { + break + } + if *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(k)*4)) == *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) { + dup = int32(1) + break + } + goto _5 + _5: + ; + k++ + } + if !(dup != 0) { + v6 = l + l++ + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(v6)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) + } + j++ + } + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(l)*4)) = -int32(1) + } + p2 += 56 + } + p1 += 56 + } + } else { + /* Compute a maximum limit for the number of transitions leaving + from each state. */ + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + *(*int32)(unsafe.Pointer(counts + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4))++ + p2 += 56 + } + p1 += 56 + } + } + return REG_OK +} + +// C documentation +// +// /* Converts the syntax tree to a TNFA. All the transitions in the TNFA are +// labelled with one character range (there are no transitions on empty +// strings). The TNFA takes O(n^2) space in the worst case, `n' is size of +// the regexp. */ +func _tre_ast_to_tnfa(tls *TLS, node uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var cat, iter, uni uintptr + var errcode Treg_errcode_t + _, _, _, _ = cat, errcode, iter, uni + errcode = REG_OK + /* XXX - recurse using a stack!. */ + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright, transitions, counts, offs) + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + /* Add a transition from each position in cat->left->lastpos + to each position in cat->right->firstpos. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, transitions, counts, offs) + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax == -int32(1) { + /* Add a transition from each last position in the iterated + expression to each first position. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, transitions, counts, offs) + break + } + return errcode +} + +func Xregcomp(tls *TLS, preg uintptr, regex uintptr, cflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v regex=%v cflags=%v, (%v:)", tls, preg, regex, cflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var add, i, j, v1 int32 + var counts, initial, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v2 uintptr + var errcode Treg_errcode_t + var mem Ttre_mem_t + var _ /* parse_ctx at bp+0 */ Ttre_parse_ctx_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = add, counts, errcode, i, initial, j, mem, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v1, v2 + counts = UintptrFromInt32(0) + offs = UintptrFromInt32(0) + add = 0 + tnfa = UintptrFromInt32(0) + tag_directions = UintptrFromInt32(0) + /* Allocate a stack used throughout the compilation process for various + purposes. */ + stack = _tre_stack_new(tls, int32(512), int32(1024000), int32(128)) + if !(stack != 0) { + return int32(REG_ESPACE) + } + /* Allocate a fast memory allocator. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + if !(mem != 0) { + _tre_stack_destroy(tls, stack) + return int32(REG_ESPACE) + } + /* Parse the regexp. */ + Xmemset(tls, bp, 0, uint64(56)) + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmem = mem + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstack = stack + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstart = regex + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fcflags = cflags + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref = -int32(1) + errcode = _tre_parse(tls, bp) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub = uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id - int32(1)) + tree = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fn + /* Referring to nonexistent subexpressions is illegal. */ + if (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref > int32((*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub) { + errcode = int32(REG_ESUBREG) + if int32(1) != 0 { + goto error_exit + } + } + /* Allocate the TNFA struct. */ + tnfa = Xcalloc(tls, uint64(1), uint64(104)) + if tnfa == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs = BoolInt32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref >= 0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_approx = 0 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id) + /* Set up tags for submatch addressing. If REG_NOSUB is set and the + regexp does not have back references, this can be skipped. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 || !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Figure out how many tags we will need. */ + errcode = _tre_add_tags(tls, UintptrFromInt32(0), stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 { + tag_directions = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + if tag_directions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions = tag_directions + Xmemset(tls, tag_directions, -int32(1), uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags = Xcalloc(tls, uint64(uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)*uint32(2)+uint32(1)), uint64(4)) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + submatch_data = Xcalloc(tls, uint64(uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id)), uint64(16)) + if submatch_data == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data = submatch_data + errcode = _tre_add_tags(tls, mem, stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + } + /* Expand iteration nodes. */ + errcode = _tre_expand_ast(tls, mem, stack, tree, bp+44, tag_directions) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + /* Add a dummy node for the final state. + XXX - For certain patterns this dummy node can be optimized away, + for example "a*" or "ab*". Figure out a simple way to detect + this possibility. */ + tmp_ast_l = tree + v2 = bp + 44 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + tmp_ast_r = _tre_ast_new_literal(tls, mem, 0, 0, v1) + if tmp_ast_r == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + tree = _tre_ast_new_catenation(tls, mem, tmp_ast_l, tmp_ast_r) + if tree == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + errcode = _tre_compute_nfl(tls, mem, stack, tree) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + counts = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if counts == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + offs = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if offs == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _3 + _3: + ; + i++ + } + _tre_ast_to_tnfa(tls, tree, UintptrFromInt32(0), counts, UintptrFromInt32(0)) + add = 0 + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(offs + uintptr(i)*4)) = add + add += *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) + int32(1) + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _4 + _4: + ; + i++ + } + transitions = Xcalloc(tls, uint64(uint32(add)+uint32(1)), uint64(56)) + if transitions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions = transitions + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + errcode = _tre_ast_to_tnfa(tls, tree, transitions, counts, offs) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars = UintptrFromInt32(0) + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + i = 0 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0 { + i++ + p += 56 + } + initial = Xcalloc(tls, uint64(uint32(i)+uint32(1)), uint64(56)) + if initial == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial = initial + i = 0 + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + for { + if !((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0) { + break + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition)*4)))*56 + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = UintptrFromInt32(0) + /* Copy the arrays p->tags, and p->params, they are allocated + from a tre_mem object. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags != 0 { + j = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags + uintptr(j)*4)) >= 0) { + break + } + goto _6 + _6: + ; + j++ + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = Xmalloc(tls, uint64(4)*uint64(j+Int32FromInt32(1))) + if !((*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags != 0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + Xmemcpy(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags, (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags, uint64(4)*uint64(j+Int32FromInt32(1))) + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fassertions + i++ + goto _5 + _5: + ; + p += 56 + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = UintptrFromInt32(0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*(*Ttre_pos_and_tags_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(tree)).Flastpos))).Fposition)*4)))*56 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags = cflags + X__tre_mem_destroy(tls, mem) + _tre_stack_destroy(tls, stack) + Xfree(tls, counts) + Xfree(tls, offs) + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + return REG_OK + goto error_exit +error_exit: + ; + /* Free everything that was allocated and return the error code. */ + X__tre_mem_destroy(tls, mem) + if stack != UintptrFromInt32(0) { + _tre_stack_destroy(tls, stack) + } + if counts != UintptrFromInt32(0) { + Xfree(tls, counts) + } + if offs != UintptrFromInt32(0) { + Xfree(tls, offs) + } + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + Xregfree(tls, preg) + return errcode +} + +func Xregfree(tls *TLS, preg uintptr) { + if __ccgo_strace { + trc("tls=%v preg=%v, (%v:)", tls, preg, origin(2)) + } + var i uint32 + var tnfa, trans uintptr + _, _, _ = i, tnfa, trans + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + if !(tnfa != 0) { + return + } + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions) { + break + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fstate != 0 { + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags) + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes) + } + } + goto _1 + _1: + ; + i++ + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial != 0 { + trans = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0 { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + goto _2 + _2: + ; + trans += 56 + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data != 0 { + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents != 0 { + Xfree(tls, (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents) + } + goto _3 + _3: + ; + i++ + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags) + } + Xfree(tls, tnfa) +} + +/* Error message strings for error codes listed in `regex.h'. This list + needs to be in sync with the codes listed there, naturally. */ + +/* Converted to single string by Rich Felker to remove the need for + * data relocations at runtime, 27 Feb 2006. */ + +var _messages = [286]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'o', ' ', 'm', 'a', 't', 'c', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'r', 'e', 'g', 'e', 'x', 'p', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'o', 'l', 'l', 'a', 't', 'i', 'n', 'g', ' ', 'e', 'l', 'e', 'm', 'e', 'n', 't', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'c', 'l', 'a', 's', 's', ' ', 'n', 'a', 'm', 'e', 0, 'T', 'r', 'a', 'i', 'l', 'i', 'n', 'g', ' ', 'b', 'a', 'c', 'k', 's', 'l', 'a', 's', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'b', 'a', 'c', 'k', ' ', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ']', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ')', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', '}', '\'', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', ' ', 'o', 'f', ' ', '{', '}', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'r', 'a', 'n', 'g', 'e', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'R', 'e', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'd', ' ', 'b', 'y', ' ', 'v', 'a', 'l', 'i', 'd', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xregerror(tls *TLS, e int32, preg uintptr, buf uintptr, size Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v e=%v preg=%v buf=%v size=%v, (%v:)", tls, e, preg, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_messages)) + for { + if !(e != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + e-- + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + s = X__lctrans_cur(tls, s) + return uint64(int32(1) + Xsnprintf(tls, buf, size, __ccgo_ts+15, VaList(bp+8, s))) +} + +const tre_bt_mem_alloc = 0 +const tre_bt_mem_destroy = 0 +const tre_bt_mem_new = 0 + +/*********************************************************************** + from tre-match-utils.h +***********************************************************************/ + +// C documentation +// +// /* Returns 1 if `t1' wins `t2', 0 otherwise. */ +func _tre_tag_order(tls *TLS, num_tags int32, tag_directions uintptr, t1 uintptr, t2 uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(i < num_tags) { + break + } + if *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(i)*4)) == int32(_TRE_TAG_MINIMIZE) { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } else { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } + goto _1 + _1: + ; + i++ + } + /* assert(0);*/ + return 0 +} + +func _tre_neg_char_classes_match(tls *TLS, classes uintptr, wc Ttre_cint_t, icase int32) (r int32) { + for *(*Ttre_ctype_t)(unsafe.Pointer(classes)) != Uint64FromInt32(0) { + if !(icase != 0) && Xiswctype(tls, wc, *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || icase != 0 && (Xiswctype(tls, Xtowupper(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || Xiswctype(tls, Xtowlower(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0) { + return int32(1) + } else { + classes += 8 + } + } + return 0 /* No match. */ +} + +/*********************************************************************** + from tre-match-parallel.c +***********************************************************************/ + +/* + This algorithm searches for matches basically by reading characters + in the searched string one by one, starting at the beginning. All + matching paths in the TNFA are traversed in parallel. When two or + more paths reach the same state, exactly one is chosen according to + tag ordering rules; if returning submatches is not required it does + not matter which path is chosen. + + The worst case time required for finding the leftmost and longest + match, or determining that there is no match, is always linearly + dependent on the length of the text being searched. + + This algorithm cannot handle TNFAs with back referencing nodes. + See `tre-match-backtrack.c'. +*/ + +type Ttre_tnfa_reach_t = struct { + Fstate uintptr + Ftags uintptr +} + +type Ttre_reach_pos_t = struct { + Fpos Tregoff_t + Ftags uintptr +} + +func _tre_tnfa_run_parallel(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var buf, reach, reach_i, reach_next, reach_next_i, reach_pos, str_byte, tag_i, tmp_buf, tmp_iptr, tmp_tags, trans_i uintptr + var end, i, new_match, num_tags, reg_newline, reg_notbol, reg_noteol, skip, start, v18 int32 + var match_eo, pos, pos_add_next, v10, v7 Tregoff_t + var pbytes, rbytes, tbytes, total_bytes, xbytes Tsize_t + var prev_c Ttre_char_t + var ret Treg_errcode_t + var v1, v2, v3, v4 uint64 + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = buf, end, i, match_eo, new_match, num_tags, pbytes, pos, pos_add_next, prev_c, rbytes, reach, reach_i, reach_next, reach_next_i, reach_pos, reg_newline, reg_notbol, reg_noteol, ret, skip, start, str_byte, tag_i, tbytes, tmp_buf, tmp_iptr, tmp_tags, total_bytes, trans_i, xbytes, v1, v10, v18, v2, v3, v4, v7 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = int64(-int32(1)) + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + match_eo = int64(-int32(1)) /* end offset of match (-1 if no match found yet) */ + new_match = 0 + tmp_tags = UintptrFromInt32(0) + if !(match_tags != 0) { + num_tags = 0 + } else { + num_tags = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags + } + /* Allocate memory for temporary data required for matching. This needs to + be done for every matching operation to be thread safe. This allocates + everything in a single large block with calloc(). */ + /* Ensure that tbytes and xbytes*num_states cannot overflow, and that + * they don't contribute more than 1/8 of SIZE_MAX to total_bytes. */ + if uint64(num_tags) > uint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) { + return int32(REG_ESPACE) + } + /* Likewise check rbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Likewise check pbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Compute the length of the block we need. */ + tbytes = uint64(8) * uint64(num_tags) + rbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+Int32FromInt32(1)) + pbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) + xbytes = uint64(8) * uint64(num_tags) + total_bytes = (Uint64FromInt64(8)-Uint64FromInt32(1))*Uint64FromInt32(4) + (rbytes+xbytes*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states))*uint64(2) + tbytes + pbytes + /* Allocate the memory. */ + buf = Xcalloc(tls, total_bytes, uint64(1)) + if buf == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + /* Get the various pointers within tmp_buf (properly aligned). */ + tmp_tags = buf + tmp_buf = buf + uintptr(tbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v1 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v1 = uint64(0) + } + tmp_buf += uintptr(v1) + reach_next = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v2 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v2 = uint64(0) + } + tmp_buf += uintptr(v2) + reach = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v3 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v3 = uint64(0) + } + tmp_buf += uintptr(v3) + reach_pos = tmp_buf + tmp_buf += uintptr(pbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v4 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v4 = uint64(0) + } + tmp_buf += uintptr(v4) + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + goto _5 + _5: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr(i)*16))).Fpos = int64(-int32(1)) + goto _6 + _6: + ; + i++ + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v7 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v7 + if v7 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos = 0 + reach_next_i = reach_next + for int32(1) != 0 { + /* If no match found yet, add the initial states to `reach_next'. */ + if match_eo < 0 { + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != UintptrFromInt32(0) { + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + trans_i += 56 + continue + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) = int64(-int32(1)) + goto _8 + _8: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != 0 { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _9 + _9: + ; + i++ + } + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + reach_next_i += 16 + } + trans_i += 56 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } else { + if num_tags == 0 || reach_next_i == reach_next { + /* We have found a match. */ + break + } + } + /* Check for end of string. */ + if !(*(*Ttre_char_t)(unsafe.Pointer(bp)) != 0) { + break + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v10 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v10 + if v10 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + /* For each state in `reach', weed out states that don't fulfill the + minimal matching conditions. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals != 0 && new_match != 0 { + new_match = 0 + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + skip = 0 + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) >= 0) { + break + } + end = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) + start = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i+int32(1))*4)) + if end >= num_tags { + skip = int32(1) + break + } else { + if *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(start)*8)) == *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(start)*8)) && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(end)*8)) < *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(end)*8)) { + skip = int32(1) + break + } + } + goto _12 + _12: + ; + i += int32(2) + } + if !(skip != 0) { + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags = tmp_iptr + reach_next_i += 16 + } + goto _11 + _11: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + } + /* For each state in `reach' see if there is a transition leaving with + the current input symbol to a state not yet in `reach_next', and + add the destination states to `reach_next'. */ + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + trans_i = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + /* Does this transition match the input symbol? */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _14 + } + /* Compute the tags after this transition. */ + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(i)*8)) + goto _15 + _15: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + /* Found an unvisited node. */ + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = tmp_tags + tmp_tags = tmp_iptr + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal && (match_eo == int64(-int32(1)) || num_tags > 0 && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags)) <= *(*Tregoff_t)(unsafe.Pointer(match_tags))) { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _16 + _16: + ; + i++ + } + } + reach_next_i += 16 + } else { + /* Another path has also reached this state. We choose + the winner by examining the tag values for both + paths. */ + if _tre_tag_order(tls, num_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tmp_tags, *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags))) != 0 { + /* The new path wins. */ + tmp_iptr = *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) + *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) = tmp_tags + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) + goto _17 + _17: + ; + i++ + } + } + tmp_tags = tmp_iptr + } + } + } + goto _14 + _14: + ; + trans_i += 56 + } + goto _13 + _13: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + if match_eo >= 0 { + v18 = REG_OK + } else { + v18 = int32(REG_NOMATCH) + } + ret = v18 + goto error_exit +error_exit: + ; + Xfree(tls, buf) + return ret +} + +/*********************************************************************** + from tre-match-backtrack.c +***********************************************************************/ + +/* + This matcher is for regexps that use back referencing. Regexp matching + with back referencing is an NP-complete problem on the number of back + references. The easiest way to match them is to use a backtracking + routine which basically goes through all possible paths in the TNFA + and chooses the one which results in the best (leftmost and longest) + match. This can be spectacularly expensive and may run out of stack + space, but there really is no better known generic algorithm. Quoting + Henry Spencer from comp.compilers: + + + POSIX.2 REs require longest match, which is really exciting to + implement since the obsolete ("basic") variant also includes + \. I haven't found a better way of tackling this than doing + a preliminary match using a DFA (or simulation) on a modified RE + that just replicates subREs for \, and then doing a + backtracking match to determine whether the subRE matches were + right. This can be rather slow, but I console myself with the + thought that people who use \ deserve very slow execution. + (Pun unintentional but very appropriate.) + +*/ + +type Ttre_backtrack_item_t = struct { + Fpos Tregoff_t + Fstr_byte uintptr + Fstate uintptr + Fstate_id int32 + Fnext_c int32 + Ftags uintptr +} + +type Ttre_backtrack_t = uintptr + +type Ttre_backtrack_struct = struct { + Fitem Ttre_backtrack_item_t + Fprev uintptr + Fnext uintptr +} + +func _tre_tnfa_run_backtrack(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bt, empty_br_match, i, i1, i2, i3, i4, next_c_start, reg_newline, reg_notbol, reg_noteol, result, ret, v20 int32 + var bt_len, eo, match_eo, pos, pos_add_next, pos_start, so, v11, v12, v3 Tregoff_t + var mem Ttre_mem_t + var next_state, next_tags, pmatch, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v18, v6 uintptr + var prev_c Ttre_char_t + var s, s1, stack Ttre_backtrack_t + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bt, bt_len, empty_br_match, eo, i, i1, i2, i3, i4, match_eo, mem, next_c_start, next_state, next_tags, pmatch, pos, pos_add_next, pos_start, prev_c, reg_newline, reg_notbol, reg_noteol, result, ret, s, s1, so, stack, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v11, v12, v18, v20, v3, v6 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = 0 + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + pos_start = int64(-int32(1)) + /* End offset of best match so far, or -1 if no match found yet. */ + match_eo = int64(-int32(1)) + tags = UintptrFromInt32(0) + states_seen = UintptrFromInt32(0) + /* Memory allocator to for allocating the backtracking stack. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + pmatch = UintptrFromInt32(0) + if !(mem != 0) { + return int32(REG_ESPACE) + } + stack = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(stack != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags != 0 { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !(tags != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches != 0 { + pmatch = Xmalloc(tls, uint64(16)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches)) + if !(pmatch != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states != 0 { + states_seen = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) + if !(states_seen != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + goto retry +retry: + ; + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i)*8)) = int64(-int32(1)) + if match_tags != 0 { + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = int64(-int32(1)) + } + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + *(*int32)(unsafe.Pointer(states_seen + uintptr(i)*4)) = 0 + goto _2 + _2: + ; + i++ + } + state = UintptrFromInt32(0) + pos = pos_start + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v3 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v3 + if v3 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos_start = pos + next_c_start = *(*Ttre_char_t)(unsafe.Pointer(bp)) + str_byte_start = str_byte + /* Handle initial states. */ + next_tags = UintptrFromInt32(0) + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + goto _4 + } + if state == UintptrFromInt32(0) { + /* Start from this state. */ + state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Backtrack to this state. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s + stack = s + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i1 = 0 + for { + if !(i1 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i1)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i1)*8)) + goto _5 + _5: + ; + i1++ + } + tmp = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tmp != 0 { + for *(*int32)(unsafe.Pointer(tmp)) >= 0 { + v6 = tmp + tmp += 4 + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(v6)))*8)) = pos + } + } + } + goto _4 + _4: + ; + trans_i += 56 + } + if next_tags != 0 { + for { + if !(*(*int32)(unsafe.Pointer(next_tags)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(next_tags)))*8)) = pos + goto _7 + _7: + ; + next_tags += 4 + } + } + if state == UintptrFromInt32(0) { + goto backtrack + } +_9: + ; + if !(int32(1) != 0) { + goto _8 + } + if state == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + if match_eo < pos || match_eo == pos && match_tags != 0 && _tre_tag_order(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tags, match_tags) != 0 { + /* This match wins the previous match. */ + match_eo = pos + if match_tags != 0 { + i2 = 0 + for { + if !(i2 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i2)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i2)*8)) + goto _10 + _10: + ; + i2++ + } + } + } + /* Our TNFAs never have transitions leaving from the final state, + so we jump right to backtracking. */ + goto backtrack + } + /* Go to the next character in the input string. */ + empty_br_match = 0 + trans_i = state + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0 && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_BACKREF) != 0 { + bt = *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fu)) + /* Get the substring we need to match against. Remember to + turn off REG_NOSUB temporarily. */ + _tre_fill_pmatch(tls, uint64(bt+int32(1)), pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & ^Int32FromInt32(REG_NOSUB), tnfa, tags, pos) + so = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_so + eo = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_eo + bt_len = eo - so + result = Xstrncmp(tls, string1+uintptr(so), str_byte-uintptr(1), uint64(bt_len)) + if result == 0 { + /* Back reference matched. Check for infinite loop. */ + if bt_len == 0 { + empty_br_match = int32(1) + } + if empty_br_match != 0 && *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) != 0 { + goto backtrack + } + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) = empty_br_match + /* Advance in input string and resync `prev_c', `next_c' + and pos. */ + str_byte += uintptr(bt_len - int64(1)) + pos += bt_len - int64(1) + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v11 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v11 + if v11 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } else { + goto backtrack + } + } else { + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto backtrack + } + /* Read the next character. */ + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v12 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v12 + if v12 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } + next_state = UintptrFromInt32(0) + trans_i = state + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _13 + } + if next_state == UintptrFromInt32(0) { + /* First matching transition. */ + next_state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Second matching transition. We may need to backtrack here + to take this transition instead of the first one, so we + push this transition in the backtracking stack so we can + jump back here if needed. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s1 = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s1 != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s1 + stack = s1 + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i3 = 0 + for { + if !(i3 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i3)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i3)*8)) + goto _14 + _14: + ; + i3++ + } + tmp1 = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + for { + if !(tmp1 != 0 && *(*int32)(unsafe.Pointer(tmp1)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(tmp1)))*8)) = pos + goto _15 + _15: + ; + tmp1 += 4 + } + } + } + goto _13 + _13: + ; + trans_i += 56 + } + if !(next_state != UintptrFromInt32(0)) { + goto _16 + } + /* Matching transitions were found. Take the first one. */ + state = next_state + /* Update the tag values. */ + if next_tags != 0 { + for *(*int32)(unsafe.Pointer(next_tags)) >= 0 { + v18 = next_tags + next_tags += 4 + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(v18)))*8)) = pos + } + } + goto _17 +_16: + ; + goto backtrack +backtrack: + ; + /* A matching transition was not found. Try to backtrack. */ + if (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev != 0 { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate)).Fassertions&int32(ASSERT_BACKREF) != 0 { + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id)*4)) = 0 + } + pos = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos + str_byte = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte + state = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate + *(*Ttre_char_t)(unsafe.Pointer(bp)) = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c + i4 = 0 + for { + if !(i4 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i4)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i4)*8)) + goto _19 + _19: + ; + i4++ + } + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev + } else { + if match_eo < 0 { + /* Try starting from a later position in the input string. */ + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto _8 + } + *(*Ttre_char_t)(unsafe.Pointer(bp)) = next_c_start + str_byte = str_byte_start + goto retry + } else { + goto _8 + } + } +_17: + ; + goto _9 +_8: + ; + if match_eo >= 0 { + v20 = REG_OK + } else { + v20 = int32(REG_NOMATCH) + } + ret = v20 + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + goto error_exit +error_exit: + ; + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return ret +} + +/*********************************************************************** + from regexec.c +***********************************************************************/ + +// C documentation +// +// /* Fills the POSIX.2 regmatch_t array according to the TNFA tag and match +// endpoint values. */ +func _tre_fill_pmatch(tls *TLS, nmatch Tsize_t, pmatch uintptr, cflags int32, tnfa uintptr, tags uintptr, match_eo Tregoff_t) { + var i, j uint32 + var parents, submatch_data uintptr + var v1, v3 Tregoff_t + _, _, _, _, _, _ = i, j, parents, submatch_data, v1, v3 + i = uint32(0) + if match_eo >= 0 && !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Construct submatch offsets from the tags. */ + submatch_data = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag)*8)) + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag)*8)) + } + /* If either of the endpoints were not used, this submatch + was not part of the match. */ + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so == int64(-int32(1)) || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + v1 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v1 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v1 + } + i++ + } + /* Reset all submatches that are not within all of their parent + submatches. */ + i = uint32(0) + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + } + parents = (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fparents + if parents != UintptrFromInt32(0) { + j = uint32(0) + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)) >= 0) { + break + } + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so < (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_so || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo > (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_eo { + v3 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v3 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v3 + } + goto _2 + _2: + ; + j++ + } + } + i++ + } + } + for uint64(i) < nmatch { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = int64(-int32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = int64(-int32(1)) + i++ + } +} + +/* + Wrapper functions for POSIX compatible regexp matching. +*/ + +func Xregexec(tls *TLS, preg uintptr, string1 uintptr, nmatch Tsize_t, pmatch uintptr, eflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v string1=%v nmatch=%v pmatch=%v eflags=%v, (%v:)", tls, preg, string1, nmatch, pmatch, eflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var status Treg_errcode_t + var tags, tnfa uintptr + var _ /* eo at bp+0 */ Tregoff_t + _, _, _ = status, tags, tnfa + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + tags = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_NOSUB) != 0 { + nmatch = uint64(0) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 && nmatch > uint64(0) { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if tags == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } + /* Dispatch to the appropriate matcher. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 { + /* The regex has back references, use the backtracking matcher. */ + status = _tre_tnfa_run_backtrack(tls, tnfa, string1, tags, eflags, bp) + } else { + /* Exact matching, no back references, use the parallel matcher. */ + status = _tre_tnfa_run_parallel(tls, tnfa, string1, tags, eflags, bp) + } + if status == REG_OK { + /* A match was found, so fill the submatch registers. */ + _tre_fill_pmatch(tls, nmatch, pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags, tnfa, tags, *(*Tregoff_t)(unsafe.Pointer(bp))) + } + if tags != 0 { + Xfree(tls, tags) + } + return status +} + +/* + This memory allocator is for allocating small memory blocks efficiently + in terms of memory overhead and execution speed. The allocated blocks + cannot be freed individually, only all at once. There can be multiple + allocators, though. +*/ + +// C documentation +// +// /* Returns a new memory allocator or NULL if out of memory. */ +func X__tre_mem_new_impl(tls *TLS, provided int32, provided_block uintptr) (r Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v provided=%v provided_block=%v, (%v:)", tls, provided, provided_block, origin(2)) + defer func() { trc("-> %v", r) }() + } + var mem Ttre_mem_t + _ = mem + if provided != 0 { + mem = provided_block + Xmemset(tls, mem, 0, uint64(48)) + } else { + mem = Xcalloc(tls, uint64(1), uint64(48)) + } + if mem == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + return mem +} + +// C documentation +// +// /* Frees the memory allocator and all memory allocated with it. */ +func X__tre_mem_destroy(tls *TLS, mem Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v mem=%v, (%v:)", tls, mem, origin(2)) + } + var l, tmp uintptr + _, _ = l, tmp + l = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks + for l != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_list_t)(unsafe.Pointer(l)).Fdata) + tmp = (*Ttre_list_t)(unsafe.Pointer(l)).Fnext + Xfree(tls, l) + l = tmp + } + Xfree(tls, mem) +} + +// C documentation +// +// /* Allocates a block of `size' bytes from `mem'. Returns a pointer to the +// allocated block or NULL if an underlying malloc() failed. */ +func X__tre_mem_alloc_impl(tls *TLS, mem Ttre_mem_t, provided int32, provided_block uintptr, zero int32, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mem=%v provided=%v provided_block=%v zero=%v size=%v, (%v:)", tls, mem, provided, provided_block, zero, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var block_size int32 + var l, ptr uintptr + var v1 uint64 + _, _, _, _ = block_size, l, ptr, v1 + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed != 0 { + return UintptrFromInt32(0) + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn < size { + if provided != 0 { + if provided_block == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = provided_block + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(TRE_MEM_BLOCK_SIZE) + } else { + if size*uint64(8) > uint64(TRE_MEM_BLOCK_SIZE) { + block_size = int32(size * uint64(8)) + } else { + block_size = int32(TRE_MEM_BLOCK_SIZE) + } + l = Xmalloc(tls, uint64(16)) + if l == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fdata = Xmalloc(tls, uint64(block_size)) + if (*Ttre_list_t)(unsafe.Pointer(l)).Fdata == UintptrFromInt32(0) { + Xfree(tls, l) + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fnext = UintptrFromInt32(0) + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent != UintptrFromInt32(0) { + (*Ttre_list_t)(unsafe.Pointer((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent)).Fnext = l + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks = l + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent = l + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = (*Ttre_list_t)(unsafe.Pointer(l)).Fdata + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(block_size) + } + } + /* Make sure the next pointer will be aligned. */ + if (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) != 0 { + v1 = uint64(8) - (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) + } else { + v1 = uint64(0) + } + size += v1 + /* Allocate from current block. */ + ptr = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr + *(*uintptr)(unsafe.Pointer(mem + 16)) += uintptr(size) + *(*Tsize_t)(unsafe.Pointer(mem + 24)) -= size + /* Set to zero if needed. */ + if zero != 0 { + Xmemset(tls, ptr, 0, size) + } + return ptr +} + +const MAXSIZE = 1 +const MINSIZE = 8 + +type TACTION = int32 + +const _FIND = 0 +const _ENTER = 1 + +type TVISIT = int32 + +const _preorder = 0 +const _postorder = 1 +const _endorder = 2 +const _leaf = 3 + +type TENTRY = struct { + Fkey uintptr + Fdata uintptr +} + +type Tentry = TENTRY + +type Thsearch_data = struct { + F__tab uintptr + F__unused1 uint32 + F__unused2 uint32 +} + +type Tqelem = struct { + Fq_forw uintptr + Fq_back uintptr + Fq_data [1]uint8 +} + +/* +open addressing hash table with 2^n table size +quadratic probing is used in case of hash collision +tab indices and hash are size_t +after resize fails with ENOMEM the state of tab is still usable + +with the posix api items cannot be iterated and length cannot be queried +*/ + +type t__tab = struct { + Fentries uintptr + Fmask Tsize_t + Fused Tsize_t +} + +var _htab Thsearch_data + +func _keyhash(tls *TLS, k uintptr) (r Tsize_t) { + var h Tsize_t + var p, v1 uintptr + _, _, _ = h, p, v1 + p = k + h = uint64(0) + for *(*uint8)(unsafe.Pointer(p)) != 0 { + v1 = p + p++ + h = uint64(31)*h + uint64(*(*uint8)(unsafe.Pointer(v1))) + } + return h +} + +func _resize(tls *TLS, nel Tsize_t, htab uintptr) (r int32) { + var e, newe, oldtab uintptr + var i, j, newsize, oldsize, v4 Tsize_t + _, _, _, _, _, _, _, _ = e, i, j, newe, newsize, oldsize, oldtab, v4 + oldsize = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask + uint64(1) + oldtab = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + if nel > uint64(-Int32FromInt32(1))/Uint64FromInt32(2)+Uint64FromInt32(1) { + nel = uint64(-Int32FromInt32(1))/Uint64FromInt32(2) + Uint64FromInt32(1) + } + newsize = uint64(MINSIZE) + for { + if !(newsize < nel) { + break + } + goto _1 + _1: + ; + newsize *= uint64(2) + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = Xcalloc(tls, newsize, uint64(16)) + if !((*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = oldtab + return 0 + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask = newsize - uint64(1) + if !(oldtab != 0) { + return int32(1) + } + e = oldtab + for { + if !(e < oldtab+uintptr(oldsize)*16) { + break + } + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + i = _keyhash(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey) + j = Uint64FromInt32(1) + for { + newe = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(newe)).Fkey != 0) { + break + } + goto _3 + _3: + ; + v4 = j + j++ + i += v4 + } + *(*TENTRY)(unsafe.Pointer(newe)) = *(*TENTRY)(unsafe.Pointer(e)) + } + goto _2 + _2: + ; + e += 16 + } + Xfree(tls, oldtab) + return int32(1) +} + +func Xhcreate(tls *TLS, nel Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v nel=%v, (%v:)", tls, nel, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___hcreate_r(tls, nel, uintptr(unsafe.Pointer(&_htab))) +} + +func Xhdestroy(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___hdestroy_r(tls, uintptr(unsafe.Pointer(&_htab))) +} + +func _lookup(tls *TLS, key uintptr, hash Tsize_t, htab uintptr) (r uintptr) { + var e uintptr + var i, j, v2 Tsize_t + _, _, _, _ = e, i, j, v2 + i = hash + j = Uint64FromInt32(1) + for { + e = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(e)).Fkey != 0) || Xstrcmp(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey, key) == 0 { + break + } + goto _1 + _1: + ; + v2 = j + j++ + i += v2 + } + return e +} + +func Xhsearch(tls *TLS, item TENTRY, action TACTION) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v action=%v, (%v:)", tls, item, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* e at bp+0 */ uintptr + ___hsearch_r(tls, item, action, bp, uintptr(unsafe.Pointer(&_htab))) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func ___hcreate_r(tls *TLS, nel Tsize_t, htab uintptr) (r1 int32) { + var r int32 + _ = r + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = Xcalloc(tls, uint64(1), uint64(24)) + if !((*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0) { + return 0 + } + r = _resize(tls, nel, htab) + if r == 0 { + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) + } + return r +} + +func ___hdestroy_r(tls *TLS, htab uintptr) { + if (*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0 { + Xfree(tls, (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries) + } + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) +} + +func ___hsearch_r(tls *TLS, item TENTRY, action TACTION, retval uintptr, htab uintptr) (r int32) { + var e, v2 uintptr + var hash, v1 Tsize_t + _, _, _, _ = e, hash, v1, v2 + hash = _keyhash(tls, item.Fkey) + e = _lookup(tls, item.Fkey, hash, htab) + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) + } + if action == int32(_FIND) { + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + *(*TENTRY)(unsafe.Pointer(e)) = item + v2 = (*Thsearch_data)(unsafe.Pointer(htab)).F__tab + 16 + *(*Tsize_t)(unsafe.Pointer(v2))++ + v1 = *(*Tsize_t)(unsafe.Pointer(v2)) + if v1 > (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask-(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask/uint64(4) { + if !(_resize(tls, uint64(2)*(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused, htab) != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused-- + (*TENTRY)(unsafe.Pointer(e)).Fkey = uintptr(0) + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + e = _lookup(tls, item.Fkey, hash, htab) + } + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) +} + +type Tnode = struct { + Fnext uintptr + Fprev uintptr +} + +func Xinsque(tls *TLS, element uintptr, pred uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v pred=%v, (%v:)", tls, element, pred, origin(2)) + } + var e, p, v1 uintptr + _, _, _ = e, p, v1 + e = element + p = pred + if !(p != 0) { + v1 = UintptrFromInt32(0) + (*Tnode)(unsafe.Pointer(e)).Fprev = v1 + (*Tnode)(unsafe.Pointer(e)).Fnext = v1 + return + } + (*Tnode)(unsafe.Pointer(e)).Fnext = (*Tnode)(unsafe.Pointer(p)).Fnext + (*Tnode)(unsafe.Pointer(e)).Fprev = p + (*Tnode)(unsafe.Pointer(p)).Fnext = e + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = e + } +} + +func Xremque(tls *TLS, element uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v, (%v:)", tls, element, origin(2)) + } + var e uintptr + _ = e + e = element + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = (*Tnode)(unsafe.Pointer(e)).Fprev + } + if (*Tnode)(unsafe.Pointer(e)).Fprev != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fprev)).Fnext = (*Tnode)(unsafe.Pointer(e)).Fnext + } +} + +func Xlsearch(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + *(*Tsize_t)(unsafe.Pointer(nelp)) = n + uint64(1) + return Xmemcpy(tls, p+uintptr(n)*uintptr(v1), key, width) +} + +func Xlfind(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + return uintptr(0) +} + +const MAXH = 0 + +type Tnode1 = struct { + Fkey uintptr + Fa [2]uintptr + Fh int32 +} + +func Xtdelete(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a [97]uintptr + var c, i, v1, v2, v4, v5, v6, v7, v8 int32 + var child, deleted, n, parent uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, c, child, deleted, i, n, parent, v1, v2, v4, v5, v6, v7, v8 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + /* *a[0] is an arbitrary non-null pointer that is returned when + the root node is deleted. */ + v1 = i + i++ + a[v1] = rootp + v2 = i + i++ + a[v2] = rootp + for { + if !(n != 0) { + return uintptr(0) + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + v4 = i + i++ + a[v4] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _3 + _3: + } + parent = *(*uintptr)(unsafe.Pointer(a[i-int32(2)])) + if *(*uintptr)(unsafe.Pointer(n + 8)) != 0 { + /* free the preceding node instead of the deleted one. */ + deleted = n + v5 = i + i++ + a[v5] = n + 8 + n = *(*uintptr)(unsafe.Pointer(n + 8)) + for *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) != 0 { + v6 = i + i++ + a[v6] = n + 8 + 1*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + (*Tnode1)(unsafe.Pointer(deleted)).Fkey = (*Tnode1)(unsafe.Pointer(n)).Fkey + child = *(*uintptr)(unsafe.Pointer(n + 8)) + } else { + child = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + /* freed node has at most one child, move it up and rebalance. */ + Xfree(tls, n) + i-- + v7 = i + *(*uintptr)(unsafe.Pointer(a[v7])) = child + for { + i-- + v8 = i + if !(v8 != 0 && X__tsearch_balance(tls, a[i]) != 0) { + break + } + } + return parent +} + +func Xtdestroy(tls *TLS, root uintptr, freekey uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v freekey=%v, (%v:)", tls, root, freekey, origin(2)) + } + var r uintptr + _ = r + r = root + if r == uintptr(0) { + return + } + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8)), freekey) + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), freekey) + if freekey != 0 { + (*(*func(*TLS, uintptr))(unsafe.Pointer(&struct{ uintptr }{freekey})))(tls, (*Tnode1)(unsafe.Pointer(r)).Fkey) + } + Xfree(tls, r) +} + +func Xtfind(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c int32 + var n uintptr + _, _ = c, n + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _1 + _1: + } + return n +} + +func _height(tls *TLS, n uintptr) (r int32) { + var v1 int32 + _ = v1 + if n != 0 { + v1 = (*Tnode1)(unsafe.Pointer(n)).Fh + } else { + v1 = 0 + } + return v1 +} + +func _rot(tls *TLS, p uintptr, x uintptr, dir int32) (r int32) { + var hx, hz int32 + var y, z uintptr + _, _, _, _ = hx, hz, y, z + y = *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) + z = *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) + hx = (*Tnode1)(unsafe.Pointer(x)).Fh + hz = _height(tls, z) + if hz > _height(tls, *(*uintptr)(unsafe.Pointer(y + 8 + uintptr(dir)*8))) { + /* + * x + * / \ dir z + * A y / * / \ --> x y + * z D /| | * / \ A B C D + * B C + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) + *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) = x + *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) = y + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + (*Tnode1)(unsafe.Pointer(z)).Fh = hz + int32(1) + } else { + /* + * x y + * / \ / * A y --> x D + * / \ / * z D A z + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = z + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = x + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + int32(1) + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + int32(2) + z = y + } + *(*uintptr)(unsafe.Pointer(p)) = z + return (*Tnode1)(unsafe.Pointer(z)).Fh - hx +} + +// C documentation +// +// /* balance *p, return 0 if height is unchanged. */ +func X__tsearch_balance(tls *TLS, p uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h0, h1, old, v1 int32 + var n uintptr + _, _, _, _, _ = h0, h1, n, old, v1 + n = *(*uintptr)(unsafe.Pointer(p)) + h0 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8))) + h1 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8 + 1*8))) + if uint32(h0-h1)+uint32(1) < uint32(3) { + old = (*Tnode1)(unsafe.Pointer(n)).Fh + if h0 < h1 { + v1 = h1 + int32(1) + } else { + v1 = h0 + int32(1) + } + (*Tnode1)(unsafe.Pointer(n)).Fh = v1 + return (*Tnode1)(unsafe.Pointer(n)).Fh - old + } + return _rot(tls, p, n, BoolInt32(h0 < h1)) +} + +func Xtsearch(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a [96]uintptr + var c, i, v1, v3, v5, v6 int32 + var n, r, v4 uintptr + var v7 bool + _, _, _, _, _, _, _, _, _, _, _ = a, c, i, n, r, v1, v3, v4, v5, v6, v7 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + v1 = i + i++ + a[v1] = rootp + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + return n + } + v3 = i + i++ + a[v3] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _2 + _2: + } + r = Xmalloc(tls, uint64(32)) + if !(r != 0) { + return uintptr(0) + } + (*Tnode1)(unsafe.Pointer(r)).Fkey = key + v4 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)) = v4 + *(*uintptr)(unsafe.Pointer(r + 8)) = v4 + (*Tnode1)(unsafe.Pointer(r)).Fh = int32(1) + /* insert new node, rebalance ancestors. */ + i-- + v5 = i + *(*uintptr)(unsafe.Pointer(a[v5])) = r + for { + if v7 = i != 0; v7 { + i-- + v6 = i + } + if !(v7 && X__tsearch_balance(tls, a[v6]) != 0) { + break + } + } + return r +} + +func _walk(tls *TLS, r uintptr, action uintptr, d int32) { + if !(r != 0) { + return + } + if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) + } else { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) + } +} + +func Xtwalk(tls *TLS, root uintptr, action uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v action=%v, (%v:)", tls, root, action, origin(2)) + } + _walk(tls, root, action, 0) +} + +func Xpoll(tls *TLS, fds uintptr, n Tnfds_t, timeout int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v timeout=%v, (%v:)", tls, fds, n, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uintptr + _ = v1 + if timeout >= 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: int64(timeout / int32(1000)), + 1: int64(timeout % int32(1000) * int32(1000000)), + } + v1 = bp + } else { + v1 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ppoll), int64(fds), int64(n), int64(v1), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)))) +} + +func Xppoll(tls *TLS, fds uintptr, n Tnfds_t, to uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v to=%v mask=%v, (%v:)", tls, fds, n, to, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + _, _, _, _, _ = ns, s, v1, v2, v3 + if to != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if to != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if to != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ppoll), int64(fds), int64(n), int64(v3), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)))) +} + +func Xpselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + var _ /* data at bp+16 */ [2]Tsyscall_arg_t + _, _, _, _, _ = ns, s, v1, v2, v3 + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 0: int64(uint64(mask)), + 1: int64(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pselect6), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), int64(bp+16))))) +} + +func Xselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv=%v, (%v:)", tls, n, rfds, wfds, efds, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var max_time, s Ttime_t + var ns, v1, v2 int64 + var us Tsuseconds_t + var v3 uintptr + _, _, _, _, _, _, _ = max_time, ns, s, us, v1, v2, v3 + if tv != 0 { + v1 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if tv != 0 { + v2 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + } else { + v2 = 0 + } + us = v2 + max_time = int64(Uint64FromUint64(1)<<(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)) - Uint64FromInt32(1)) + if s < 0 || us < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if us/int64(1000000) > max_time-s { + s = max_time + us = int64(999999) + ns = int64(999999999) + } else { + s += us / int64(1000000) + us %= int64(1000000) + ns = us * int64(1000) + } + if tv != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 1: int64(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pselect6), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), int64(bp+16))))) +} + +var _all_mask = [1]uint64{ + 0: -Uint64FromUint64(1), +} + +var _app_mask = [1]uint64{ + 0: uint64(0xfffffffc7fffffff), +} + +func X__block_all_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_all_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__block_app_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_app_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__restore_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_SETMASK)), int64(set), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func Xgetitimer(tls *TLS, which int32, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old=%v, (%v:)", tls, which, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old32 at bp+0 */ [4]int64 + _ = r + if uint64(8) > uint64(8) { + r = int32(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(bp))) + if !(r != 0) { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(old))))) +} + +func Xkill(tls *TLS, pid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v, (%v:)", tls, pid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_kill), int64(pid), int64(sig))))) +} + +func Xkillpg(tls *TLS, pgid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pgid=%v sig=%v, (%v:)", tls, pgid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + if pgid < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xkill(tls, -pgid, sig) +} + +func Xpsiginfo(tls *TLS, si uintptr, msg uintptr) { + if __ccgo_strace { + trc("tls=%v si=%v msg=%v, (%v:)", tls, si, msg, origin(2)) + } + Xpsignal(tls, (*Tsiginfo_t)(unsafe.Pointer(si)).Fsi_signo, msg) +} + +func Xpsignal(tls *TLS, sig int32, msg uintptr) { + if __ccgo_strace { + trc("tls=%v sig=%v msg=%v, (%v:)", tls, sig, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var __need_unlock, old_errno, old_mode, v1 int32 + var f, old_locale, s, v2, v3 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, f, old_errno, old_locale, old_mode, s, v1, v2, v3 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + s = Xstrsignal(tls, sig) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since psignal is not + * permitted to change them. Save errno and restore it if there is no + * error since fprintf might change it even on success but psignal is + * not permitted to do so. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if msg != 0 { + v2 = msg + } else { + v2 = __ccgo_ts + } + if msg != 0 { + v3 = __ccgo_ts + 289 + } else { + v3 = __ccgo_ts + } + if Xfprintf(tls, f, __ccgo_ts+1111, VaList(bp+8, v2, v3, s)) >= 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + } + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xraise(tls *TLS, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v, (%v:)", tls, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* set at bp+0 */ Tsigset_t + _ = ret + X__block_app_sigs(tls, bp) + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid), int64(sig))))) + X__restore_sigs(tls, bp) + return ret +} + +/* These functions will not work, but suffice for targets where the + * kernel sigaction structure does not actually use sa_restorer. */ +func X__restore(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func X__restore_rt(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetitimer(tls *TLS, which int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new1=%v old=%v, (%v:)", tls, which, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var is, vs Ttime_t + var ius, vus int64 + var r int32 + var _ /* old32 at bp+32 */ [4]int64 + _, _, _, _, _ = is, ius, r, vs, vus + if uint64(8) > uint64(8) { + is = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ius = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_usec + vus = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_usec + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: ius, + 2: vs, + 3: vus, + } + r = int32(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(bp), int64(bp+32))) + if !(r != 0) && old != 0 { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(new1), int64(old))))) +} + +type Tk_sigaction = struct { + Fhandler uintptr + Fflags uint64 + Fmask [2]uint32 + Funused uintptr +} + +var _unmask_done int32 +var _handler_set [1]uint64 + +func X__get_handler_set(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + Xmemcpy(tls, set, uintptr(unsafe.Pointer(&_handler_set)), uint64(8)) +} + +func X__libc_sigaction(tls *TLS, sig int32, sa uintptr, old2 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old2=%v, (%v:)", tls, sig, sa, old2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var old, old1, r, tmp, v10, v15, v4 int32 + var v1, v14, v19, v20, v3, v8, v9 uintptr + var v2 int64 + var _ /* ksa at bp+16 */ Tk_sigaction + var _ /* ksa_old at bp+48 */ Tk_sigaction + var _ /* u at bp+8 */ struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, r, tmp, v1, v10, v14, v15, v19, v2, v20, v3, v4, v8, v9 + if sa != 0 { + if uint64(*(*uintptr)(unsafe.Pointer(sa))) > uint64(1) { + v1 = uintptr(unsafe.Pointer(&_handler_set)) + uintptr(uint64(sig-Int32FromInt32(1))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + v2 = int64(uint64(1) << (uint64(sig-Int32FromInt32(1)) % (Uint64FromInt32(8) * Uint64FromInt64(8)))) + if Uint64FromInt64(8) == Uint64FromInt64(4) { + v3 = v1 + for { + old1 = AtomicLoadPInt32(v3) + goto _6 + _6: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1526) + v4 = old + goto _5 + _5: + ; + if !(v4 != old1) { + break + } + } + _ = old1 + goto _7 + _7: + } else { + v8 = v1 + *(*struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + })(unsafe.Pointer(bp + 8)) = struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp + 8)) = uint64(v2) + if *(*Tuint32_t)(unsafe.Pointer(bp + 8)) != 0 { + v9 = v8 + for { + old1 = AtomicLoadPInt32(v9) + goto _12 + _12: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1526) + v10 = old + goto _11 + _11: + ; + if !(v10 != old1) { + break + } + } + _ = old1 + goto _13 + _13: + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)) != 0 { + v14 = v8 + uintptr(1)*4 + for { + old1 = AtomicLoadPInt32(v14) + goto _17 + _17: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1526) + v15 = old + goto _16 + _16: + ; + if !(v15 != old1) { + break + } + } + _ = old1 + goto _18 + _18: + } + } + /* If pthread_create has not yet been called, + * implementation-internal signals might not + * yet have been unblocked. They must be + * unblocked before any signal handler is + * installed, so that an application cannot + * receive an illegal sigset_t (with them + * blocked) as part of the ucontext_t passed + * to the signal handler. */ + if !(X__libc.Fthreaded != 0) && !(_unmask_done != 0) { + *(*[1]uint64)(unsafe.Pointer(bp)) = [1]uint64{ + 0: Uint64FromUint64(3) << (Int32FromInt32(32) * BoolInt32(Uint64FromInt64(8) > Uint64FromInt32(4))), + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_UNBLOCK)), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + _unmask_done = int32(1) + } + if !((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags&Int32FromInt32(SA_RESTART) != 0) { + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1526) + AtomicStorePInt32(uintptr(unsafe.Pointer(&X__eintr_valid_flag)), int32(1)) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1526) + } + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fhandler = *(*uintptr)(unsafe.Pointer(sa)) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags = uint64((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags) + Xmemcpy(tls, bp+16+16, sa+8, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + if sa != 0 { + v19 = bp + 16 + } else { + v19 = uintptr(0) + } + if old2 != 0 { + v20 = bp + 48 + } else { + v20 = uintptr(0) + } + r = int32(X__syscall4(tls, int64(SYS_rt_sigaction), int64(sig), int64(v19), int64(v20), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if old2 != 0 && !(r != 0) { + *(*uintptr)(unsafe.Pointer(old2)) = (*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fhandler + (*Tsigaction)(unsafe.Pointer(old2)).Fsa_flags = int32((*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fflags) + Xmemcpy(tls, old2+8, bp+48+16, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* set at bp+0 */ [1]uint64 + _ = r + if uint32(sig)-uint32(32) < uint32(3) || uint32(sig)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Doing anything with the disposition of SIGABRT requires a lock, + * so that it cannot be changed while abort is terminating the + * process and so any change made by abort can't be observed. */ + if sig == int32(SIGABRT) { + X__block_all_sigs(tls, bp) + ___lock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + } + r = X__libc_sigaction(tls, sig, sa, old) + if sig == int32(SIGABRT) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + X__restore_sigs(tls, bp) + } + return r +} + +func Xsigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__sigaction(tls, sig, sa, old) +} + +func Xsigaddset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) |= uint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1))) + return 0 +} + +func Xsigaltstack(tls *TLS, ss uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ss=%v old=%v, (%v:)", tls, ss, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + if ss != 0 { + if !((*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&Int32FromInt32(SS_DISABLE) != 0) && (*Tstack_t)(unsafe.Pointer(ss)).Fss_size < uint64(MINSIGSTKSZ) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + if (*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&int32(SS_ONSTACK) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sigaltstack), int64(ss), int64(old))))) +} + +const SST_SIZE = 8 + +func Xsigandset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) & *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigdelset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) &= ^(Uint64FromUint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1)))) + return 0 +} + +func Xsigemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0) + if Bool(uint64(8) == uint64(4)) || Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0) + } + if Bool(uint64(8) == uint64(4)) && Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 2*8)) = uint64(0) + *(*uint64)(unsafe.Pointer(set + 3*8)) = uint64(0) + } + return 0 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xsigfillset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0xfffffffc7fffffff) + if int32(_NSIG) > int32(65) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0xffffffffffffffff) + } + return 0 +} + +func Xsigisemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + if *(*uint64)(unsafe.Pointer(set + uintptr(i)*8)) != 0 { + return 0 + } + goto _1 + _1: + ; + i++ + } + return int32(1) +} + +func Xsigismember(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + return 0 + } + return BoolInt32(!!(*(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8))&(Uint64FromUint64(1)<<(uint64(s)&(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)))) != 0)) +} + +func Xsigorset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) | *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigpending(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_rt_sigpending), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))))) +} + +func Xsigprocmask(tls *TLS, how int32, set uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v how=%v set=%v old=%v, (%v:)", tls, how, set, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = _pthread_sigmask(tls, how, set, old) + if !(r != 0) { + return r + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = r + return -int32(1) +} + +func Xsigqueue(tls *TLS, pid Tpid_t, sig int32, value Tsigval) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v value=%v, (%v:)", tls, pid, sig, value, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var r int32 + var _ /* set at bp+128 */ Tsigset_t + var _ /* si at bp+0 */ Tsiginfo_t + _ = r + Xmemset(tls, bp, 0, uint64(128)) + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo = sig + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_code = -int32(1) + *(*Tsigval)(unsafe.Pointer(bp + 16 + 8)) = value + *(*Tuid_t)(unsafe.Pointer(bp + 16 + 4)) = Xgetuid(tls) + X__block_app_sigs(tls, bp+128) + *(*Tpid_t)(unsafe.Pointer(bp + 16)) = Xgetpid(tls) + r = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_rt_sigqueueinfo), int64(pid), int64(sig), int64(bp))))) + X__restore_sigs(tls, bp+128) + return r +} + +func X__libc_current_sigrtmax(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Int32FromInt32(_NSIG) - Int32FromInt32(1) +} + +func X__libc_current_sigrtmin(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(35) +} + +type t__jmp_buf = [26]uint64 + +type Tjmp_buf = [1]t__jmp_buf_tag + +type t__jmp_buf_tag = struct { + F__jb t__jmp_buf + F__fl uint64 + F__ss [16]uint64 +} + +type Tsigjmp_buf = [1]t__jmp_buf_tag + +func X__sigsetjmp_tail(tls *TLS, jb uintptr, ret int32) (r int32) { + if __ccgo_strace { + trc("tls=%v jb=%v ret=%v, (%v:)", tls, jb, ret, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1, v2 uintptr + _, _, _ = p, v1, v2 + p = jb + 216 + if ret != 0 { + v1 = p + } else { + v1 = uintptr(0) + } + if ret != 0 { + v2 = uintptr(0) + } else { + v2 = p + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_SETMASK)), int64(v1), int64(v2), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + return ret +} + +func Xsigsuspend(tls *TLS, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_rt_sigsuspend), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0, 0, 0)))) +} + +func _do_sigtimedwait(tls *TLS, mask uintptr, si uintptr, ts uintptr) (r int32) { + return int32(___syscall_cp(tls, int64(SYS_rt_sigtimedwait), int64(mask), int64(si), int64(ts), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) +} + +func Xsigtimedwait(tls *TLS, mask uintptr, si uintptr, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v timeout=%v, (%v:)", tls, mask, si, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + for cond := true; cond; cond = ret == -int32(EINTR) { + ret = _do_sigtimedwait(tls, mask, si, timeout) + } + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsigwait(tls *TLS, mask uintptr, sig uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v sig=%v, (%v:)", tls, mask, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* si at bp+0 */ Tsiginfo_t + if Xsigtimedwait(tls, mask, bp, uintptr(0)) < 0 { + return -int32(1) + } + *(*int32)(unsafe.Pointer(sig)) = (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo + return 0 +} + +func Xsigwaitinfo(tls *TLS, mask uintptr, si uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v, (%v:)", tls, mask, si, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsigtimedwait(tls, mask, si, uintptr(0)) +} + +func X__fxstat(tls *TLS, ver int32, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v buf=%v, (%v:)", tls, ver, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstat(tls, fd, buf) +} + +func X__fxstatat(tls *TLS, ver int32, fd int32, path uintptr, buf uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v buf=%v flag=%v, (%v:)", tls, ver, fd, path, buf, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, fd, path, buf, flag) +} + +func X__lxstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlstat(tls, path, buf) +} + +func X__xstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstat(tls, path, buf) +} + +func X__xmknod(tls *TLS, ver int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func X__xmknodat(tls *TLS, ver int32, fd int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func Xchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(-Int32FromInt32(100)), int64(path), int64(mode))))) +} + +func Xfchmod(tls *TLS, fd int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall2(tls, int64(SYS_fchmod), int64(fd), int64(mode))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(-Int32FromInt32(100)), int64(bp), int64(mode))))) +} + +func Xfchmodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v flag=%v, (%v:)", tls, fd, path, mode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var fd2, ret, v1 int32 + var _ /* proc at bp+128 */ [27]uint8 + var _ /* st at bp+0 */ Tstat + _, _, _ = fd2, ret, v1 + if !(flag != 0) { + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(fd), int64(path), int64(mode))))) + } + ret = int32(X__syscall4(tls, int64(SYS_fchmodat2), int64(fd), int64(path), int64(mode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag != int32(AT_SYMLINK_NOFOLLOW) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if Xfstatat(tls, fd, path, bp, flag) != 0 { + return -int32(1) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + v1 = int32(X__syscall3(tls, int64(SYS_openat), int64(fd), int64(path), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_PATH)|Int32FromInt32(O_NOFOLLOW)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC)))) + fd2 = v1 + if v1 < 0 { + if fd2 == -int32(ELOOP) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + return int32(X__syscall_ret(tls, uint64(fd2))) + } + X__procfdname(tls, bp+128, uint32(fd2)) + ret = Xstat(tls, bp+128, bp) + if !(ret != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + ret = int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } else { + ret = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(-Int32FromInt32(100)), int64(bp+128), int64(mode))))) + } + } + X__syscall1(tls, int64(SYS_close), int64(fd2)) + return ret +} + +func X__fstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + if fd < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EBADF)))) + } + return X__fstatat(tls, fd, __ccgo_ts, st, int32(AT_EMPTY_PATH)) +} + +func Xfstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat(tls, fd, st) +} + +type Tstatx1 = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + Fpad1 Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_btime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_ctime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_mtime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + Fspare [14]Tuint64_t +} + +func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ret int32 + var _ /* stx at bp+0 */ Tstatx1 + _ = ret + flag |= int32(AT_NO_AUTOMOUNT) + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(fd), int64(path), int64(flag), int64(Int32FromInt32(0x7ff)), int64(bp))) + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 && !(*(*uint8)(unsafe.Pointer(path)) != 0) { + ret = int32(X__syscall2(tls, int64(SYS_fstat), int64(fd), int64(bp))) + if ret == -int32(EBADF) && X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) >= 0 { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + if ret == -int32(EINVAL) { + X__procfdname(tls, bp+128, uint32(fd)) + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(-Int32FromInt32(100)), int64(bp+128), int64(bp), int64(Int32FromInt32(0)))) + } + } + } else { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + } + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_dev, + Fst_ino: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ino, + Fst_mode: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mode, + Fst_nlink: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_nlink, + Fst_uid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_uid, + Fst_gid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_gid, + Fst_rdev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_rdev, + Fst_size: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_size, + Fst_blksize: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blksize, + Fst_blocks: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blocks, + Fst_atim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + Fst_mtim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + Fst_ctim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + } + return 0 +} + +func X__fstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint64(8) < uint64(8) { + ret = _fstatat_statx(tls, fd, path, st, flag) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + ret = _fstatat_kstat(tls, fd, path, st, flag) + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xfstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat(tls, fd, path, st, flag) +} + +func Xfutimens(tls *TLS, fd int32, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times=%v, (%v:)", tls, fd, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xutimensat(tls, fd, uintptr(0), times, 0) +} + +func X__futimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var v2 uintptr + var _ /* ts at bp+0 */ [2]Ttimespec + _, _ = i, v2 + if times != 0 { + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec * int64(1000) + goto _1 + _1: + ; + i++ + } + } + if times != 0 { + v2 = bp + } else { + v2 = uintptr(0) + } + return Xutimensat(tls, dirfd, pathname, v2, 0) +} + +func Xfutimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, dirfd, pathname, times) +} + +func Xlchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfchmodat(tls, -int32(100), path, mode, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xlstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xmkdir(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mkdirat), int64(-Int32FromInt32(100)), int64(path), int64(mode))))) +} + +func Xmkdirat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mkdirat), int64(fd), int64(path), int64(mode))))) +} + +func Xmkfifo(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmkfifoat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmknod(tls *TLS, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v dev=%v, (%v:)", tls, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_mknodat), int64(-Int32FromInt32(100)), int64(path), int64(mode), int64(dev))))) +} + +func Xmknodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_mknodat), int64(fd), int64(path), int64(mode), int64(dev))))) +} + +func Xstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, 0) +} + +func ___statfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_statfs), int64(path), int64(buf))))) +} + +func Xfstatfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fstatfs), int64(fd), int64(buf))))) +} + +func _fixup(tls *TLS, out uintptr, in uintptr) { + var v1 uint64 + _ = v1 + *(*Tstatvfs)(unsafe.Pointer(out)) = Tstatvfs{} + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bsize = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + if (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize != 0 { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize + } else { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + } + (*Tstatvfs)(unsafe.Pointer(out)).Ff_frsize = v1 + (*Tstatvfs)(unsafe.Pointer(out)).Ff_blocks = (*Tstatfs)(unsafe.Pointer(in)).Ff_blocks + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bfree = (*Tstatfs)(unsafe.Pointer(in)).Ff_bfree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bavail = (*Tstatfs)(unsafe.Pointer(in)).Ff_bavail + (*Tstatvfs)(unsafe.Pointer(out)).Ff_files = (*Tstatfs)(unsafe.Pointer(in)).Ff_files + (*Tstatvfs)(unsafe.Pointer(out)).Ff_ffree = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_favail = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_fsid = uint64(*(*int32)(unsafe.Pointer(in + 56))) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_flag = (*Tstatfs)(unsafe.Pointer(in)).Ff_flags + (*Tstatvfs)(unsafe.Pointer(out)).Ff_namemax = (*Tstatfs)(unsafe.Pointer(in)).Ff_namelen + (*Tstatvfs)(unsafe.Pointer(out)).Ff_type = uint32((*Tstatfs)(unsafe.Pointer(in)).Ff_type) +} + +func Xstatvfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* kbuf at bp+0 */ Tstatfs + if ___statfs(tls, path, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xfstatvfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* kbuf at bp+0 */ Tstatfs + if Xfstatfs(tls, fd, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xumask(tls *TLS, mode Tmode_t) (r Tmode_t) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_umask), int64(mode))))) +} + +func Xutimensat(tls *TLS, fd int32, path uintptr, times uintptr, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times=%v flags=%v, (%v:)", tls, fd, path, times, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + if times != 0 && (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec == int64(UTIME_NOW) && (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec == int64(UTIME_NOW) { + times = uintptr(0) + } + r = int32(X__syscall4(tls, int64(SYS_utimensat), int64(fd), int64(path), int64(times), int64(flags))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__fclose_ca(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) +} + +func X__fdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var f, v1 uintptr + var flags, v2 int32 + var _ /* wsz at bp+0 */ Twinsize + _, _, _, _ = f, flags, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1543, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+buffer or fail */ + v1 = Xmalloc(tls, Uint64FromInt64(232)+Uint64FromInt32(UNGET)+Uint64FromInt32(BUFSIZ)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(v2) + } + /* Apply close-on-exec flag */ + if Xstrchr(tls, mode, int32('e')) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + /* Set append mode on fd if opened for append */ + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags = int32(X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFL)))) + if !(flags&Int32FromInt32(O_APPEND) != 0) { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFL)), int64(flags|Int32FromInt32(O_APPEND))) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_APP) + } + (*TFILE)(unsafe.Pointer(f)).Ffd = fd + (*TFILE)(unsafe.Pointer(f)).Fbuf = f + uintptr(232) + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(BUFSIZ) + /* Activate line buffered mode for terminals */ + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0) && !(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp)) != 0) { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + /* Initialize op ptrs. No problem if some are unneeded. */ + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fdopen(tls, fd, mode) +} + +func X__fmodeflags(tls *TLS, mode uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var flags int32 + _ = flags + if Xstrchr(tls, mode, int32('+')) != 0 { + flags = int32(O_RDWR) + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + flags = O_RDONLY + } else { + flags = int32(O_WRONLY) + } + } + if Xstrchr(tls, mode, int32('x')) != 0 { + flags |= int32(O_EXCL) + } + if Xstrchr(tls, mode, int32('e')) != 0 { + flags |= int32(O_CLOEXEC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) != int32('r') { + flags |= int32(O_CREAT) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('w') { + flags |= int32(O_TRUNC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags |= int32(O_APPEND) + } + return flags +} + +func X__fopen_rb_ca(tls *TLS, filename uintptr, f uintptr, buf uintptr, len1 Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v f=%v buf=%v len1=%v, (%v:)", tls, filename, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemset(tls, f, 0, uint64(232)) + (*TFILE)(unsafe.Pointer(f)).Ffd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_openat), int64(-Int32FromInt32(100)), int64(filename), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_LARGEFILE)))))) + if (*TFILE)(unsafe.Pointer(f)).Ffd < 0 { + return uintptr(0) + } + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(Int32FromInt32(F_NOWR) | Int32FromInt32(F_PERM)) + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = len1 - uint64(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + AtomicStorePInt32(f+140, -int32(1)) + return f +} + +func X__overflow(tls *TLS, f uintptr, _c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v _c=%v, (%v:)", tls, f, _c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint8 + var v2, v3 uintptr + var _ /* c at bp+0 */ uint8 + _, _, _ = v1, v2, v3 + *(*uint8)(unsafe.Pointer(bp)) = uint8(_c) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return -int32(1) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend && int32(*(*uint8)(unsafe.Pointer(bp))) != (*TFILE)(unsafe.Pointer(f)).Flbf { + v1 = *(*uint8)(unsafe.Pointer(bp)) + v3 = f + 40 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(v2)) = v1 + return int32(v1) + } + if (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, bp, uint64(1)) != uint64(1) { + return -int32(1) + } + return int32(*(*uint8)(unsafe.Pointer(bp))) +} + +func _dummy9(tls *TLS, fd int32) (r int32) { + return fd +} + +func X__stdio_close(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_close), int64(_dummy9(tls, (*TFILE)(unsafe.Pointer(f)).Ffd)))))) +} + +var _dummy_file = uintptr(0) + +func _close_file(tls *TLS, f uintptr) { + if !(f != 0) { + return + } + if AtomicLoadPInt32(f+140) >= 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } +} + +func X__stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + _close_file(tls, f) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdin_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) +} + +func X__stdio_exit_needed(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit(tls) +} + +func X__stdio_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var v1 int64 + var v2 int32 + var v3, v4 uintptr + var _ /* iov at bp+0 */ [2]Tiovec + _, _, _, _, _ = cnt, v1, v2, v3, v4 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: buf, + Fiov_len: len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)), + }, + 1: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fbuf, + Fiov_len: (*TFILE)(unsafe.Pointer(f)).Fbuf_size, + }, + } + if (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len != 0 { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readv), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(bp), int64(Int32FromInt32(2))))) + } else { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_read), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_base), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_len)))) + } + cnt = v1 + if cnt <= 0 { + if cnt != 0 { + v2 = int32(F_ERR) + } else { + v2 = int32(F_EOF) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v2) + return uint64(0) + } + if uint64(cnt) <= (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len { + return uint64(cnt) + } + cnt = Tssize_t(uint64(cnt) - (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len) + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(cnt) + if (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(len1-uint64(1)))) = *(*uint8)(unsafe.Pointer(v3)) + } + return len1 +} + +func X__stdio_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, (*TFILE)(unsafe.Pointer(f)).Ffd, off, whence) +} + +func X__stdio_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var iov, v2, v3, v4 uintptr + var iovcnt int32 + var rem Tsize_t + var v5 uint64 + var _ /* iovs at bp+0 */ [2]Tiovec + _, _, _, _, _, _, _, _ = cnt, iov, iovcnt, rem, v2, v3, v4, v5 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fwbase, + Fiov_len: uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)), + }, + 1: { + Fiov_base: buf, + Fiov_len: len1, + }, + } + iov = bp + rem = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + (*(*Tiovec)(unsafe.Pointer(iov + 1*16))).Fiov_len + iovcnt = int32(2) + for { + cnt = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_writev), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(iov), int64(iovcnt)))) + if uint64(cnt) == rem { + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + return len1 + } + if cnt < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if iovcnt == int32(2) { + v5 = uint64(0) + } else { + v5 = len1 - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + } + return v5 + } + rem -= uint64(cnt) + if uint64(cnt) > (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len { + cnt = Tssize_t(uint64(cnt) - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len) + iov += 16 + iovcnt-- + } + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base + uintptr(cnt) + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len -= uint64(cnt) + goto _1 + _1: + } + return r +} + +func X__stdout_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* wsz at bp+0 */ Twinsize + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_SVB) != 0) && X__syscall3(tls, int64(SYS_ioctl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp)) != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + } + return X__stdio_write(tls, f, buf, len1) +} + +func X__toread(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + var v4 int32 + _, _, _, _ = v1, v2, v3, v4 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_EOF) != 0 { + v4 = -int32(1) + } else { + v4 = 0 + } + return v4 +} + +func X__toread_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +func X__towrite(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 uintptr + _, _ = v1, v2 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + /* Clear read buffer (easier than summoning nasal demons) */ + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + /* Activate write through the buffer. */ + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + return 0 +} + +func X__towrite_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +/* This function assumes it will never be called if there is already + * data buffered for reading. */ + +func X__uflow(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* c at bp+0 */ uint8 + if !(X__toread(tls, f) != 0) && (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, bp, uint64(1)) == uint64(1) { + return int32(*(*uint8)(unsafe.Pointer(bp))) + } + return -int32(1) +} + +func Xasprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvasprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xclearerr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^(Int32FromInt32(F_EOF) | Int32FromInt32(F_ERR))) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xclearerr_unlocked(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xclearerr(tls, f) +} + +func Xdprintf(tls *TLS, fd int32, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v va=%v, (%v:)", tls, fd, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvdprintf(tls, fd, fmt, ap) + _ = ap + return ret +} + +const FSETLOCKING_BYCALLER = 2 +const FSETLOCKING_INTERNAL = 1 +const FSETLOCKING_QUERY = 0 + +func X_flushlbf(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xfflush(tls, uintptr(0)) +} + +func X__fsetlocking(tls *TLS, f uintptr, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v type1=%v, (%v:)", tls, f, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__fwriting(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 || (*TFILE)(unsafe.Pointer(f)).Fwend != 0) +} + +func X__freading(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 || (*TFILE)(unsafe.Pointer(f)).Frend != 0) +} + +func X__freadable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NORD) != 0)) +} + +func X__fwritable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0)) +} + +func X__flbf(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Flbf >= 0) +} + +func X__fbufsize(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TFILE)(unsafe.Pointer(f)).Fbuf_size +} + +func X__fpending(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Fwend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__fpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + if !(f != 0) { // libbsd fpurge test fails w/o this. + return int32(1) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + return 0 +} + +func Xfpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fpurge(tls, f) +} + +func X__freadahead(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__freadptr(tls *TLS, f uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v sizep=%v, (%v:)", tls, f, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + if (*TFILE)(unsafe.Pointer(f)).Frpos == (*TFILE)(unsafe.Pointer(f)).Frend { + return uintptr(0) + } + *(*Tsize_t)(unsafe.Pointer(sizep)) = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + return (*TFILE)(unsafe.Pointer(f)).Frpos +} + +func X__freadptrinc(tls *TLS, f uintptr, inc Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v inc=%v, (%v:)", tls, f, inc, origin(2)) + } + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(inc) +} + +func X__fseterr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) +} + +func _dummy10(tls *TLS, f uintptr) { +} + +func Xfclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1 int32 + var head uintptr + _, _, _, _ = __need_unlock, head, r, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + r = Xfflush(tls, f) + r |= (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + /* Past this point, f is closed and any further explict access + * to it is undefined. However, it still exists as an entry in + * the open file list and possibly in the thread's locked files + * list, if it was closed while explicitly locked. Functions + * which process these lists must tolerate dead FILE objects + * (which necessarily have inactive buffer pointers) without + * producing any side effects. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) != 0 { + return r + } + X__unlist_locked_file(tls, f) + head = X__ofl_lock(tls) + if (*TFILE)(unsafe.Pointer(f)).Fprev != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev)).Fnext = (*TFILE)(unsafe.Pointer(f)).Fnext + } + if (*TFILE)(unsafe.Pointer(f)).Fnext != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext)).Fprev = (*TFILE)(unsafe.Pointer(f)).Fprev + } + if *(*uintptr)(unsafe.Pointer(head)) == f { + *(*uintptr)(unsafe.Pointer(head)) = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + Xfree(tls, (*TFILE)(unsafe.Pointer(f)).Fgetln_buf) + Xfree(tls, f) + return r +} + +func Xfeof(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_feof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xfeof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xferror(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_ferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +func Xferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +// C documentation +// +// /* stdout.c will override this if linked */ +var _dummy11 = uintptr(0) + +func Xfflush(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, __need_unlock1, r, v2, v3 int32 + var v4, v5, v6 uintptr + _, _, _, _, _, _, _, _ = __need_unlock, __need_unlock1, r, v2, v3, v4, v5, v6 + if !(f != 0) { + r = 0 + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + } + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) + } + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + r |= Xfflush(tls, f) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + return r + } + if AtomicLoadPInt32(f+140) >= 0 { + v3 = ___lockfile(tls, f) + } else { + v3 = 0 + } + __need_unlock1 = v3 + /* If writing, flush output */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + } + /* If reading, sync position, per POSIX */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } + /* Clear read and write modes */ + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + v6 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v6 + (*TFILE)(unsafe.Pointer(f)).Frpos = v6 + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return 0 +} + +func Xfflush_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfflush(tls, f) +} + +func _locking_getc(tls *TLS, f uintptr) (r int32) { + var c, old, old1, tmp, v1, v10, v13, v14, v3, v7 int32 + var v12, v4, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, tmp, v1, v10, v12, v13, v14, v3, v4, v5, v6, v7 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v5 = f + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, f) + } + c = v3 + v6 = f + 140 + for { + old1 = AtomicLoadPInt32(v6) + goto _9 + _9: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v7 = old + goto _8 + _8: + ; + if !(v7 != old1) { + break + } + } + v10 = old1 + goto _11 +_11: + if v10&int32(MAYBE_WAITERS) != 0 { + v12 = f + 140 + v13 = int32(1) + v14 = int32(1) + if v14 != 0 { + v14 = int32(FUTEX_PRIVATE) + } + if v13 < Int32FromInt32(0) { + v13 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)|v14), int64(v13)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)), int64(v13)) != 0 + } + return c +} + +func Xfgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc(tls, v1) + goto _3 +_3: + return v2 +} + +func Xfgetln(tls *TLS, f uintptr, plen uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v plen=%v, (%v:)", tls, f, plen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, v1, v2 int32 + var l, v8 Tssize_t + var ret, z, v3, v4, v5, v7 uintptr + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, ret, z, v1, v2, v3, v4, v5, v6, v7, v8 + ret = uintptr(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + Xungetc(tls, v2, f) + if v6 = (*TFILE)(unsafe.Pointer(f)).Frend != 0; v6 { + v5 = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + z = v5 + } + if v6 && v5 != 0 { + ret = (*TFILE)(unsafe.Pointer(f)).Frpos + z++ + v7 = z + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(int64(v7) - int64(ret)) + (*TFILE)(unsafe.Pointer(f)).Frpos = z + } else { + *(*[1]Tsize_t)(unsafe.Pointer(bp)) = [1]Tsize_t{} + v8 = Xgetline(tls, f+168, bp, f) + l = v8 + if v8 > 0 { + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(l) + ret = (*TFILE)(unsafe.Pointer(f)).Fgetln_buf + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func Xfgetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + var off Toff_t + _ = off + off = X__ftello(tls, f) + if off < 0 { + return -int32(1) + } + *(*int64)(unsafe.Pointer(pos)) = off + return 0 +} + +func Xfgets(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var k Tsize_t + var p, z, v6, v7, v9 uintptr + var v2 int64 + var v3 uint64 + var v8 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, k, p, z, v1, v2, v3, v4, v5, v6, v7, v8, v9 + p = s + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if n <= int32(1) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if n < int32(1) { + return uintptr(0) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + return s + } + n-- + for n != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v2 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v2 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v2) + if k < uint64(n) { + v3 = k + } else { + v3 = uint64(n) + } + k = v3 + Xmemcpy(tls, p, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + p += uintptr(k) + n = int32(uint64(n) - k) + if z != 0 || !(n != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 < 0 { + if p == s || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + s = uintptr(0) + } + break + } + n-- + v8 = uint8(c) + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = v8 + if int32(v8) == int32('\n') { + break + } + } + if s != 0 { + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return s +} + +func Xfgets_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgets(tls, s, n, f) +} + +func ___fgetwc_unlocked_internal(tls *TLS, f uintptr) (r Twint_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var c, first, v1, v2 int32 + var l Tsize_t + var v3, v4 uintptr + var _ /* b at bp+16 */ uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = c, first, l, v1, v2, v3, v4 + /* Convert character from buffer if possible */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + l = uint64(Xmbtowc(tls, bp, (*TFILE)(unsafe.Pointer(f)).Frpos, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)))) + if l+uint64(1) >= uint64(1) { + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(l + BoolUint64(!(l != 0))) /* l==0 means 1 byte, null */ + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + /* Convert character byte-by-byte */ + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + first = int32(1) + for cond := true; cond; cond = l == uint64(-Int32FromInt32(2)) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + v1 = v2 + c = v1 + *(*uint8)(unsafe.Pointer(bp + 16)) = uint8(v1) + if c < 0 { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + } + return uint32(0xffffffff) + } + l = Xmbrtowc(tls, bp, bp+16, uint64(1), bp+8) + if l == uint64(-Int32FromInt32(1)) { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + Xungetc(tls, int32(*(*uint8)(unsafe.Pointer(bp + 16))), f) + } + return uint32(0xffffffff) + } + first = 0 + } + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) +} + +func X__fgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var loc Tlocale_t + var ploc uintptr + var wc Twchar_t + _, _, _ = loc, ploc, wc + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + wc = int32(___fgetwc_unlocked_internal(tls, f)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(wc) +} + +func Xfgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var c Twint_t + _, _, _ = __need_unlock, c, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fgetwc_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xfgetws(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v2 int32 + var c Twint_t + var p, v4, v5 uintptr + _, _, _, _, _, _, _ = __need_unlock, c, p, v1, v2, v4, v5 + p = s + v1 = n + n-- + if !(v1 != 0) { + return s + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + for { + if !(n != 0) { + break + } + c = X__fgetwc_unlocked(tls, f) + if c == uint32(0xffffffff) { + break + } + v4 = p + p += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = int32(c) + if c == uint32('\n') { + break + } + goto _3 + _3: + ; + n-- + } + *(*Twchar_t)(unsafe.Pointer(p)) = 0 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + p = s + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if p == s { + v5 = UintptrFromInt32(0) + } else { + v5 = s + } + return v5 +} + +func Xfgetws_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetws(tls, s, n, f) +} + +func Xfileno(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fd, v1 int32 + _, _, _ = __need_unlock, fd, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + fd = (*TFILE)(unsafe.Pointer(f)).Ffd + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if fd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return -int32(1) + } + return fd +} + +func Xfileno_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfileno(tls, f) +} + +func Xflockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if !(Xftrylockfile(tls, f) != 0) { + return + } + ___lockfile(tls, f) + X__register_locked_file(tls, f, ___get_tp(tls)) +} + +type Tcookie = struct { + Fpos Tsize_t + Flen1 Tsize_t + Fsize Tsize_t + Fbuf uintptr + Fmode int32 +} + +type Tmem_FILE = struct { + Ff TFILE + Fc Tcookie + Fbuf [1032]uint8 +} + +func _mseek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64((*Tcookie)(unsafe.Pointer(c)).Fsize)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _mread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var rem Tsize_t + _, _ = c, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + rem = (*Tcookie)(unsafe.Pointer(c)).Flen1 - (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + rem = uint64(0) + } + if len1 > rem { + len1 = rem + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_EOF) + } + Xmemcpy(tls, buf, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + rem -= len1 + if rem > (*TFILE)(unsafe.Pointer(f)).Fbuf_size { + rem = (*TFILE)(unsafe.Pointer(f)).Fbuf_size + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(rem) + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), rem) + *(*Tsize_t)(unsafe.Pointer(c)) += rem + return len1 +} + +func _mwrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var len2, rem Tsize_t + _, _, _ = c, len2, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _mwrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + if (*Tcookie)(unsafe.Pointer(c)).Fmode == int32('a') { + (*Tcookie)(unsafe.Pointer(c)).Fpos = (*Tcookie)(unsafe.Pointer(c)).Flen1 + } + rem = (*Tcookie)(unsafe.Pointer(c)).Fsize - (*Tcookie)(unsafe.Pointer(c)).Fpos + if len1 > rem { + len1 = rem + } + Xmemcpy(tls, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + (*Tcookie)(unsafe.Pointer(c)).Flen1 = (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Flen1 < (*Tcookie)(unsafe.Pointer(c)).Fsize { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Flen1))) = uint8(0) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 && (*Tcookie)(unsafe.Pointer(c)).Fsize != 0 { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Fsize-uint64(1)))) = uint8(0) + } + } + } + return len1 +} + +func _mclose(tls *TLS, m uintptr) (r int32) { + return 0 +} + +func Xfmemopen(tls *TLS, buf uintptr, size Tsize_t, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v mode=%v, (%v:)", tls, buf, size, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var plus, v2 int32 + var v1 uint64 + var v3 Tsize_t + _, _, _, _, _ = f, plus, v1, v2, v3 + plus = BoolInt32(!!(Xstrchr(tls, mode, int32('+')) != 0)) + if !(Xstrchr(tls, __ccgo_ts+1543, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(buf != 0) && size > uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + if buf != 0 { + v1 = uint64(0) + } else { + v1 = size + } + f = Xmalloc(tls, uint64(1304)+v1) + if !(f != 0) { + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(UintptrFromInt32(0)+272)) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + if !(buf != 0) { + buf = f + 1304 + Xmemset(tls, buf, 0, size) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf = buf + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fsize = size + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fmode = int32(*(*uint8)(unsafe.Pointer(mode))) + if !(plus != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = size + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + v3 = Xstrnlen(tls, buf, size) + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + } else { + if plus != 0 { + *(*uint8)(unsafe.Pointer((*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf)) = uint8(0) + } + } + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_mread) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_mwrite) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_mseek) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_mclose) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +func Xfopen(tls *TLS, filename uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var fd, flags int32 + _, _, _ = f, fd, flags + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1543, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Compute the flags to pass to open() */ + flags = X__fmodeflags(tls, mode) + fd = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_openat), int64(-Int32FromInt32(100)), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0666)))))) + if fd < 0 { + return uintptr(0) + } + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + f = X__fdopen(tls, fd, mode) + if f != 0 { + return f + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) +} + +type Tfcookie = struct { + Fcookie uintptr + Fiofuncs Tcookie_io_functions_t +} + +type Tcookie_FILE = struct { + Ff TFILE + Ffc Tfcookie + Fbuf [1032]uint8 +} + +func _cookieread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v2, v3, v5 uintptr + var len2, readlen, remain, v1 Tsize_t + var ret Tssize_t + var v4 int32 + _, _, _, _, _, _, _, _, _, _ = fc, len2, readlen, remain, ret, v1, v2, v3, v4, v5 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + ret = int64(-int32(1)) + remain = len1 + readlen = uint64(0) + len2 = len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread != 0) { + goto bail + } + if len2 != 0 { + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len2) + if ret <= 0 { + goto bail + } + readlen += uint64(ret) + remain -= uint64(ret) + } + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) || remain > BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) { + return readlen + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, (*TFILE)(unsafe.Pointer(f)).Frpos, (*TFILE)(unsafe.Pointer(f)).Fbuf_size) + if ret <= 0 { + goto bail + } + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(ret) + v1 = readlen + readlen++ + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + return readlen + goto bail +bail: + ; + if ret == 0 { + v4 = int32(F_EOF) + } else { + v4 = int32(F_ERR) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v4) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = v5 + (*TFILE)(unsafe.Pointer(f)).Frpos = v5 + return readlen +} + +func _cookiewrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v1, v2 uintptr + var len2 Tsize_t + var ret Tssize_t + _, _, _, _, _ = fc, len2, ret, v1, v2 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite != 0) { + return len1 + } + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _cookiewrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len1) + if ret < 0 { + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(0) + } + return uint64(ret) +} + +func _cookieseek(tls *TLS, f uintptr, _off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Toff_t)(unsafe.Pointer(bp)) = _off + var fc uintptr + var res int32 + _, _ = fc, res + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if uint32(whence) > uint32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return int64(-int32(1)) + } + res = (*(*func(*TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, bp, whence) + if res < 0 { + return int64(res) + } + return *(*Toff_t)(unsafe.Pointer(bp)) +} + +func _cookieclose(tls *TLS, f uintptr) (r int32) { + var fc uintptr + _ = fc + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1 != 0 { + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie) + } + return 0 +} + +func Xfopencookie(tls *TLS, cookie uintptr, mode uintptr, iofuncs Tcookie_io_functions_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cookie=%v mode=%v iofuncs=%v, (%v:)", tls, cookie, mode, iofuncs, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f, v1 uintptr + var v2 int32 + _, _, _ = f, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1543, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+fcookie+buffer or fail */ + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + /* Set up our fcookie */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fcookie = cookie + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fiofuncs = iofuncs + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + /* Initialize op ptrs. No problem if some are unneeded. */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_cookieread) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_cookiewrite) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_cookieseek) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_cookieclose) + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func _locking_putc(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, tmp, v1, v11, v14, v15, v3, v8 int32 + var v13, v5, v6, v7 uintptr + var v4 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, tmp, v1, v11, v13, v14, v15, v3, v4, v5, v6, v7, v8 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v4 = uint8(c) + v6 = f + 40 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + *(*uint8)(unsafe.Pointer(v5)) = v4 + v3 = int32(v4) + } else { + v3 = X__overflow(tls, f, int32(uint8(c))) + } + c = v3 + v7 = f + 140 + for { + old1 = AtomicLoadPInt32(v7) + goto _10 + _10: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v8 = old + goto _9 + _9: + ; + if !(v8 != old1) { + break + } + } + v11 = old1 + goto _12 +_12: + if v11&int32(MAYBE_WAITERS) != 0 { + v13 = f + 140 + v14 = int32(1) + v15 = int32(1) + if v15 != 0 { + v15 = int32(FUTEX_PRIVATE) + } + if v14 < Int32FromInt32(0) { + v14 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)|v15), int64(v14)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)), int64(v14)) != 0 + } + return c +} + +func Xfputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xfputs(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, s) + return BoolInt32(Xfwrite(tls, s, uint64(1), l, f) == l) - int32(1) +} + +func Xfputs_unlocked(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputs(tls, s, f) +} + +func X__fputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v1 int32 + var loc Tlocale_t + var ploc, v3, v4 uintptr + var v2 uint8 + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _ = l, loc, ploc, v1, v2, v3, v4 + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if BoolInt32(uint32(c) < uint32(128)) != 0 { + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwpos+uintptr(MB_LEN_MAX) < (*TFILE)(unsafe.Pointer(f)).Fwend { + l = Xwctomb(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, c) + if l < 0 { + c = Int32FromUint32(0xffffffff) + } else { + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + } + } else { + l = Xwctomb(tls, bp, c) + if l < 0 || X__fwritex(tls, bp, uint64(l), f) < uint64(l) { + c = Int32FromUint32(0xffffffff) + } + } + } + if uint32(c) == uint32(0xffffffff) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(c) +} + +func Xfputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = int32(X__fputwc_unlocked(tls, c, f)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return uint32(c) +} + +func Xfputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xfputws(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + *(*uintptr)(unsafe.Pointer(bp)) = _ws + var __need_unlock, v1 int32 + var l, v2 Tsize_t + var loc Tlocale_t + var ploc uintptr + var v3 bool + var _ /* buf at bp+8 */ [1024]uint8 + _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3 + l = uint64(0) + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + for { + if v3 = *(*uintptr)(unsafe.Pointer(bp)) != 0; v3 { + v2 = Xwcsrtombs(tls, bp+8, bp, uint64(1024), uintptr(0)) + l = v2 + } + if !(v3 && v2+uint64(1) > uint64(1)) { + break + } + if X__fwritex(tls, bp+8, l, f) < l { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return -int32(1) + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return int32(l) /* 0 or -1 */ +} + +func Xfputws_unlocked(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputws(tls, _ws, f) +} + +func Xfread(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var dest uintptr + var k, l, len1 Tsize_t + var v2, v4 uint64 + _, _, _, _, _, _, _, _ = __need_unlock, dest, k, l, len1, v1, v2, v4 + dest = destv + len1 = size * nmemb + l = len1 + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + /* First exhaust the buffer. */ + if uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)) < l { + v2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + } else { + v2 = l + } + k = v2 + Xmemcpy(tls, dest, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + dest += uintptr(k) + l -= k + } + /* Read the remainder directly */ + for { + if !(l != 0) { + break + } + if X__toread(tls, f) != 0 { + v4 = uint64(0) + } else { + v4 = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, dest, l) + } + k = v4 + if !(k != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return (len1 - l) / size + } + goto _3 + _3: + ; + l -= k + dest += uintptr(k) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return nmemb +} + +func Xfread_unlocked(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfread(tls, destv, size, nmemb, f) +} + +/* The basic idea of this implementation is to open a new FILE, + * hack the necessary parts of the new FILE into the old one, then + * close the new FILE. */ + +/* Locking IS necessary because another thread may provably hold the + * lock, via flockfile or otherwise, when freopen is called, and in that + * case, freopen cannot act until the lock is released. */ + +func Xfreopen(tls *TLS, filename uintptr, mode uintptr, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v f=%v, (%v:)", tls, filename, mode, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fl, v1 int32 + var f2 uintptr + _, _, _, _ = __need_unlock, f2, fl, v1 + fl = X__fmodeflags(tls, mode) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfflush(tls, f) + if !(filename != 0) { + if fl&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + fl &= ^(Int32FromInt32(O_CREAT) | Int32FromInt32(O_EXCL) | Int32FromInt32(O_CLOEXEC)) + if X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFL)), int64(fl)))) < 0 { + goto fail + } + } else { + f2 = Xfopen(tls, filename, mode) + if !(f2 != 0) { + goto fail + } + if (*TFILE)(unsafe.Pointer(f2)).Ffd == (*TFILE)(unsafe.Pointer(f)).Ffd { + (*TFILE)(unsafe.Pointer(f2)).Ffd = -int32(1) + } else { + if X__dup3(tls, (*TFILE)(unsafe.Pointer(f2)).Ffd, (*TFILE)(unsafe.Pointer(f)).Ffd, fl&int32(O_CLOEXEC)) < 0 { + goto fail2 + } + } + (*TFILE)(unsafe.Pointer(f)).Fflags = (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) | (*TFILE)(unsafe.Pointer(f2)).Fflags + (*TFILE)(unsafe.Pointer(f)).Fread = (*TFILE)(unsafe.Pointer(f2)).Fread + (*TFILE)(unsafe.Pointer(f)).Fwrite = (*TFILE)(unsafe.Pointer(f2)).Fwrite + (*TFILE)(unsafe.Pointer(f)).Fseek = (*TFILE)(unsafe.Pointer(f2)).Fseek + (*TFILE)(unsafe.Pointer(f)).Fclose1 = (*TFILE)(unsafe.Pointer(f2)).Fclose1 + Xfclose(tls, f2) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = 0 + (*TFILE)(unsafe.Pointer(f)).Flocale = uintptr(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return f + goto fail2 +fail2: + ; + Xfclose(tls, f2) + goto fail +fail: + ; + Xfclose(tls, f) + return UintptrFromInt32(0) +} + +func Xfscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfscanf(tls, f, fmt, va) +} + +func X__fseeko_unlocked(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + /* Fail immediately for invalid whence argument. */ + if whence != int32(1) && whence != 0 && whence != int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Adjust relative offset for unread data in buffer, if any. */ + if whence == int32(1) && (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + off -= int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + /* Flush write buffer, and report error on failure. */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + return -int32(1) + } + } + /* Leave writing mode */ + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + /* Perform the underlying seek. */ + if (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, off, whence) < 0 { + return -int32(1) + } + /* If seek succeeded, file is seekable and we discard read buffer. */ + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + return 0 +} + +func X__fseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, result, v1 int32 + _, _, _ = __need_unlock, result, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + result = X__fseeko_unlocked(tls, f, off, whence) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return result +} + +func Xfseek(tls *TLS, f uintptr, off int64, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfsetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, *(*int64)(unsafe.Pointer(pos)), 0) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__ftello_unlocked(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + var v1 int32 + _, _ = pos, v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_APP) != 0 && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + v1 = int32(2) + } else { + v1 = int32(1) + } + pos = (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, 0, v1) + if pos < 0 { + return pos + } + /* Adjust for data in buffer. */ + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Frend) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwbase != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } + } + return pos +} + +func X__ftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var pos Toff_t + _, _, _ = __need_unlock, pos, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + pos = X__ftello_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return pos +} + +func Xftell(tls *TLS, f uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + _ = pos + pos = X__ftello(tls, f) + if pos > int64(0x7fffffffffffffff) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + return pos +} + +func Xftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ftello(tls, f) +} + +func X__do_orphaned_stdio_locks(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks + for { + if !(f != 0) { + break + } + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1573) + AtomicStorePInt32(f+140, int32(0x40000000)) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1573) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } +} + +func X__unlist_locked_file(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = (*TFILE)(unsafe.Pointer(f)).Fprev_locked + } + if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } else { + (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } + } +} + +func X__register_locked_file(tls *TLS, f uintptr, self Tpthread_t) { + if __ccgo_strace { + trc("tls=%v f=%v self=%v, (%v:)", tls, f, self, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount = int64(1) + (*TFILE)(unsafe.Pointer(f)).Fprev_locked = uintptr(0) + (*TFILE)(unsafe.Pointer(f)).Fnext_locked = (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = f + } + (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks = f +} + +func Xftrylockfile(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old, owner, tid, tmp, v1, v2 int32 + var self Tpthread_t + var v4 bool + _, _, _, _, _, _, _, _ = old, owner, self, tid, tmp, v1, v2, v4 + self = ___get_tp(tls) + tid = (*t__pthread)(unsafe.Pointer(self)).Ftid + owner = AtomicLoadPInt32(f + 140) + if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(0x7fffffffffffffff) { + return -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount++ + return 0 + } + if owner < 0 { + v1 = Int32FromInt32(0) + owner = v1 + AtomicStorePInt32(f+140, v1) + } + if v4 = owner != 0; !v4 { + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1599) + v2 = old + goto _3 + _3: + } + if v4 || v2 != 0 { + return -int32(1) + } + X__register_locked_file(tls, f, self) + return 0 +} + +func Xfunlockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(1) { + X__unlist_locked_file(tls, f) + (*TFILE)(unsafe.Pointer(f)).Flockcount = 0 + ___unlockfile(tls, f) + } else { + (*TFILE)(unsafe.Pointer(f)).Flockcount-- + } +} + +func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mode=%v, (%v:)", tls, f, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v3, v4 int32 + var v2 Tlocale_t + _, _, _, _, _ = __need_unlock, v1, v2, v3, v4 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if mode != 0 { + if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + v2 = uintptr(unsafe.Pointer(&X__c_locale)) + } else { + v2 = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + } + (*TFILE)(unsafe.Pointer(f)).Flocale = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fmode != 0) { + if mode > 0 { + v4 = int32(1) + } else { + v4 = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = v4 + } + } + mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return mode +} + +func Xfwprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__fwritex(tls *TLS, s uintptr, l Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v, (%v:)", tls, s, l, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + _, _ = i, n + i = uint64(0) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return uint64(0) + } + if l > uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwend)-int64((*TFILE)(unsafe.Pointer(f)).Fwpos)) { + return (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, l) + } + if (*TFILE)(unsafe.Pointer(f)).Flbf >= 0 { + /* Match /^(.*\n|)/ */ + i = l + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('\n')) { + break + } + goto _1 + _1: + ; + i-- + } + if i != 0 { + n = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, i) + if n < i { + return n + } + s += uintptr(i) + l -= i + } + } + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, s, l) + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + return l + i +} + +func Xfwrite(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var k, l Tsize_t + var v2 uint64 + _, _, _, _, _ = __need_unlock, k, l, v1, v2 + l = size * nmemb + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + k = X__fwritex(tls, src, l, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if k == l { + v2 = nmemb + } else { + v2 = k / size + } + return v2 +} + +func Xfwrite_unlocked(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwrite(tls, src, size, nmemb, f) +} + +func Xfwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwscanf(tls, f, fmt, va) +} + +func _locking_getc1(tls *TLS, f uintptr) (r int32) { + var c, old, old1, tmp, v1, v10, v13, v14, v3, v7 int32 + var v12, v4, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, tmp, v1, v10, v12, v13, v14, v3, v4, v5, v6, v7 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v5 = f + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, f) + } + c = v3 + v6 = f + 140 + for { + old1 = AtomicLoadPInt32(v6) + goto _9 + _9: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v7 = old + goto _8 + _8: + ; + if !(v7 != old1) { + break + } + } + v10 = old1 + goto _11 +_11: + if v10&int32(MAYBE_WAITERS) != 0 { + v12 = f + 140 + v13 = int32(1) + v14 = int32(1) + if v14 != 0 { + v14 = int32(FUTEX_PRIVATE) + } + if v13 < Int32FromInt32(0) { + v13 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)|v14), int64(v13)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)), int64(v13)) != 0 + } + return c +} + +func Xgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc1(tls, v1) + goto _3 +_3: + return v2 +} + +func X_IO_getc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc(tls, f1) +} + +func Xgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + return v1 +} + +func X_IO_getc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func Xfgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func _locking_getc2(tls *TLS, f uintptr) (r int32) { + var c, old, old1, tmp, v1, v10, v13, v14, v3, v7 int32 + var v12, v4, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, old1, tmp, v1, v10, v12, v13, v14, v3, v4, v5, v6, v7 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v5 = f + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, f) + } + c = v3 + v6 = f + 140 + for { + old1 = AtomicLoadPInt32(v6) + goto _9 + _9: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1547) + v7 = old + goto _8 + _8: + ; + if !(v7 != old1) { + break + } + } + v10 = old1 + goto _11 +_11: + if v10&int32(MAYBE_WAITERS) != 0 { + v12 = f + 140 + v13 = int32(1) + v14 = int32(1) + if v14 != 0 { + v14 = int32(FUTEX_PRIVATE) + } + if v13 < Int32FromInt32(0) { + v13 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)|v14), int64(v13)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v12), int64(Int32FromInt32(FUTEX_WAKE)), int64(v13)) != 0 + } + return c +} + +func Xgetchar(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc2(tls, v1) + goto _3 +_3: + return v2 +} + +func Xgetchar_unlocked(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v3 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return v1 +} + +func Xgetdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var i, k, m, v11 Tsize_t + var tmp, z, v6, v7, v8, v9 uintptr + var v10 uint8 + var v3 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, k, m, tmp, z, v1, v10, v11, v3, v4, v5, v6, v7, v8, v9 + i = uint64(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !(n != 0) || !(s != 0) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !(*(*uintptr)(unsafe.Pointer(s)) != 0) { + *(*Tsize_t)(unsafe.Pointer(n)) = uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, delim, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v3 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v3 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v3) + } else { + z = uintptr(0) + k = uint64(0) + } + if i+k >= *(*Tsize_t)(unsafe.Pointer(n)) { + m = i + k + uint64(2) + if !(z != 0) && m < Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(4) { + m += m / uint64(2) + } + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + m = i + k + uint64(2) + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + /* Copy as much as fits and ensure no + * pushback remains in the FILE buf. */ + k = *(*Tsize_t)(unsafe.Pointer(n)) - i + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + } + *(*uintptr)(unsafe.Pointer(s)) = tmp + *(*Tsize_t)(unsafe.Pointer(n)) = m + } + if k != 0 { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + i += k + } + if z != 0 { + break + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 == -int32(1) { + if !(i != 0) || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(-int32(1)) + } + break + } + /* If the byte read by getc won't fit without growing the + * output buffer, push it back for next iteration. */ + if i+uint64(1) >= *(*Tsize_t)(unsafe.Pointer(n)) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + *(*uint8)(unsafe.Pointer(v8)) = uint8(c) + } else { + v10 = uint8(c) + v11 = i + i++ + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(v11))) = v10 + if int32(v10) == delim { + break + } + } + goto _2 + _2: + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(i))) = uint8(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(i) +} + +func X__getdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, delim, f) +} + +func Xgetline(tls *TLS, s uintptr, n uintptr, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, int32('\n'), f) +} + +func Xgets(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v3 int32 + var i, v6 Tsize_t + var v4, v5 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, v1, v2, v3, v4, v5, v6 + i = uint64(0) + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdin_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + for { + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v5 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + v2 = v3 + c = v2 + if !(v2 != -int32(1) && c != int32('\n')) { + break + } + v6 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v6))) = uint8(c) + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + if c != int32('\n') && (!((*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Fflags&Uint32FromInt32(F_EOF) != 0) || !(i != 0)) { + s = uintptr(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return s +} + +func Xgetw(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* x at bp+0 */ int32 + _ = v1 + if Xfread(tls, bp, uint64(4), uint64(1), f) != 0 { + v1 = *(*int32)(unsafe.Pointer(bp)) + } else { + v1 = -int32(1) + } + return v1 +} + +func Xgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, f) +} + +func Xgetwchar(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) +} + +func Xgetwchar_unlocked(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetwchar(tls) +} + +var _ofl_head uintptr +var _ofl_lock [1]int32 + +func X__ofl_lock(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) + return uintptr(unsafe.Pointer(&_ofl_head)) +} + +func X__ofl_unlock(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) +} + +func X__ofl_add(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var head uintptr + _ = head + head = X__ofl_lock(tls) + (*TFILE)(unsafe.Pointer(f)).Fnext = *(*uintptr)(unsafe.Pointer(head)) + if *(*uintptr)(unsafe.Pointer(head)) != 0 { + (*TFILE)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(head)))).Fprev = f + } + *(*uintptr)(unsafe.Pointer(head)) = f + X__ofl_unlock(tls) + return f +} + +type Tcookie1 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t +} + +type Tms_FILE = struct { + Ff TFILE + Fc Tcookie1 + Fbuf [1024]uint8 +} + +func _ms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie1)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie1)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64(0x7fffffffffffffff)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie1)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _ms_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _ms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie1)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie1)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + newbuf = Xrealloc(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf, len2) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie1)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fspace), 0, len2-(*Tcookie1)(unsafe.Pointer(c)).Fspace) + (*Tcookie1)(unsafe.Pointer(c)).Fspace = len2 + } + Xmemcpy(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len1 + if (*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Flen1 { + (*Tcookie1)(unsafe.Pointer(c)).Flen1 = (*Tcookie1)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie1)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _ms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_memstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(1)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(48)) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 280 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(1024) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_ms_write) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_ms_seek) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_ms_close) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fmode = -int32(1) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +type Tcookie2 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t + Fmbs Tmbstate_t +} + +type Twms_FILE = struct { + Ff TFILE + Fc Tcookie2 + Fbuf [1]uint8 +} + +func _wms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie2)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie2)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)-base { + goto fail + } + Xmemset(tls, c+48, 0, uint64(8)) + v2 = uint64(base + off) + (*Tcookie2)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _wms_write(tls *TLS, f uintptr, _buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _buf + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _wms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie2)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie2)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + if len2 > uint64(Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)) { + return uint64(0) + } + newbuf = Xrealloc(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf, len2*uint64(4)) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie2)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fspace)*4, 0, uint64(4)*(len2-(*Tcookie2)(unsafe.Pointer(c)).Fspace)) + (*Tcookie2)(unsafe.Pointer(c)).Fspace = len2 + } + len2 = Xmbsnrtowcs(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fpos)*4, bp, len1, (*Tcookie2)(unsafe.Pointer(c)).Fspace-(*Tcookie2)(unsafe.Pointer(c)).Fpos, c+48) + if len2 == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len2 + if (*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Flen1 { + (*Tcookie2)(unsafe.Pointer(c)).Flen1 = (*Tcookie2)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie2)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _wms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_wmemstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(296)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(4)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(56)) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*Twchar_t)(unsafe.Pointer(buf)) = 0 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 288 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_wms_write) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_wms_seek) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_wms_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + Xfwide(tls, f, int32(1)) + return X__ofl_add(tls, f) +} + +func Xpclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pid Tpid_t + var r, v1 int32 + var _ /* status at bp+0 */ int32 + _, _, _ = pid, r, v1 + pid = (*TFILE)(unsafe.Pointer(f)).Fpipe_pid + Xfclose(tls, f) + for { + v1 = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EINTR)) { + break + } + } + if r < 0 { + return int32(X__syscall_ret(tls, uint64(r))) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xperror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + var __need_unlock, old_mode, v1 int32 + var errstr, f, old_locale uintptr + _, _, _, _, _, _ = __need_unlock, errstr, f, old_locale, old_mode, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + errstr = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if msg != 0 && *(*uint8)(unsafe.Pointer(msg)) != 0 { + Xfwrite(tls, msg, Xstrlen(tls, msg), uint64(1), f) + Xfputc(tls, int32(':'), f) + Xfputc(tls, int32(' '), f) + } + Xfwrite(tls, errstr, Xstrlen(tls, errstr), uint64(1), f) + Xfputc(tls, int32('\n'), f) + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) + _ = ap + return ret +} + +func _locking_putc1(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, tmp, v1, v11, v14, v15, v3, v8 int32 + var v13, v5, v6, v7 uintptr + var v4 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, tmp, v1, v11, v13, v14, v15, v3, v4, v5, v6, v7, v8 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v4 = uint8(c) + v6 = f + 40 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + *(*uint8)(unsafe.Pointer(v5)) = v4 + v3 = int32(v4) + } else { + v3 = X__overflow(tls, f, int32(uint8(c))) + } + c = v3 + v7 = f + 140 + for { + old1 = AtomicLoadPInt32(v7) + goto _10 + _10: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v8 = old + goto _9 + _9: + ; + if !(v8 != old1) { + break + } + } + v11 = old1 + goto _12 +_12: + if v11&int32(MAYBE_WAITERS) != 0 { + v13 = f + 140 + v14 = int32(1) + v15 = int32(1) + if v15 != 0 { + v15 = int32(FUTEX_PRIVATE) + } + if v14 < Int32FromInt32(0) { + v14 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)|v15), int64(v14)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)), int64(v14)) != 0 + } + return c +} + +func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc1(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func X_IO_putc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc(tls, c1, f1) +} + +func Xputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + return v1 +} + +func X_IO_putc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func Xfputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func _locking_putc2(tls *TLS, c int32, f uintptr) (r int32) { + var old, old1, tmp, v1, v11, v14, v15, v3, v8 int32 + var v13, v5, v6, v7 uintptr + var v4 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, old1, tmp, v1, v11, v13, v14, v15, v3, v4, v5, v6, v7, v8 + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v1 = old + goto _2 +_2: + if v1 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v4 = uint8(c) + v6 = f + 40 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + *(*uint8)(unsafe.Pointer(v5)) = v4 + v3 = int32(v4) + } else { + v3 = X__overflow(tls, f, int32(uint8(c))) + } + c = v3 + v7 = f + 140 + for { + old1 = AtomicLoadPInt32(v7) + goto _10 + _10: + ; + // __asm__ __volatile__ ( + // + // "\n1: lr.w.aqrl %0, (%2)\n bne %0, %3, 1f\n sc.w.aqrl %1, %4, (%2)\n bnez %1, 1b\n1:" + // : "=&r"(old), "=&r"(tmp) + // : "r"(p), "r"((long)t), "r"((long)s) + // : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 11, __ccgo_ts+1560) + v8 = old + goto _9 + _9: + ; + if !(v8 != old1) { + break + } + } + v11 = old1 + goto _12 +_12: + if v11&int32(MAYBE_WAITERS) != 0 { + v13 = f + 140 + v14 = int32(1) + v15 = int32(1) + if v15 != 0 { + v15 = int32(FUTEX_PRIVATE) + } + if v14 < Int32FromInt32(0) { + v14 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)|v15), int64(v14)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v13), int64(Int32FromInt32(FUTEX_WAKE)), int64(v14)) != 0 + } + return c +} + +func Xputchar(tls *TLS, c1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v, (%v:)", tls, c1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc2(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xputchar_unlocked(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v2 = uint8(c) + v4 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(c))) + } + return v1 +} + +func Xputs(tls *TLS, s uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1, v2 int32 + var v3 uint8 + var v4, v5 uintptr + var v6 bool + _, _, _, _, _, _, _, _ = __need_unlock, r, v1, v2, v3, v4, v5, v6 + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdout_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + if v6 = Xfputs(tls, s, uintptr(unsafe.Pointer(&X__stdout_FILE))) < 0; !v6 { + if int32(uint8(Int32FromUint8('\n'))) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v3 = uint8(Int32FromUint8('\n')) + v5 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = v3 + v2 = int32(v3) + } else { + v2 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(Int32FromUint8('\n')))) + } + } + r = -BoolInt32(v6 || v2 < 0) + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } + return r +} + +func Xputw(tls *TLS, _x int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _x=%v f=%v, (%v:)", tls, _x, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*int32)(unsafe.Pointer(bp)) = _x + return int32(Xfwrite(tls, bp, uint64(4), uint64(1), f)) - int32(1) +} + +func Xputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, f) +} + +func Xputwchar(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, uintptr(unsafe.Pointer(&X__stdout_FILE))) +} + +func Xputwchar_unlocked(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputwchar(tls, c) +} + +func Xremove(tls *TLS, path uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall3(tls, int64(SYS_unlinkat), int64(-Int32FromInt32(100)), int64(path), int64(Int32FromInt32(0)))) + if r == -int32(EISDIR) { + r = int32(X__syscall3(tls, int64(SYS_unlinkat), int64(-Int32FromInt32(100)), int64(path), int64(Int32FromInt32(AT_REMOVEDIR)))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xrename(tls *TLS, old uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_renameat2), int64(-Int32FromInt32(100)), int64(old), int64(-Int32FromInt32(100)), int64(new1), int64(Int32FromInt32(0)))))) +} + +func Xrewind(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + X__fseeko_unlocked(tls, f, 0, 0) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_scanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscanf(tls, fmt, va) +} + +func Xsetbuf(tls *TLS, f uintptr, buf uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v, (%v:)", tls, f, buf, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, uint64(BUFSIZ)) +} + +func Xsetbuffer(tls *TLS, f uintptr, buf uintptr, size Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v size=%v, (%v:)", tls, f, buf, size, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, size) +} + +func Xsetlinebuf(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xsetvbuf(tls, f, uintptr(0), int32(_IOLBF), uint64(0)) +} + +/* The behavior of this function is undefined except when it is the first + * operation on the stream, so the presence or absence of locking is not + * observable in a program whose behavior is defined. Thus no locking is + * performed here. No allocation of buffers is performed, but a buffer + * provided by the caller is used as long as it is suitably sized. */ + +func Xsetvbuf(tls *TLS, f uintptr, buf uintptr, type1 int32, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v type1=%v size=%v, (%v:)", tls, f, buf, type1, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if type1 == int32(_IONBF) { + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + } else { + if type1 == int32(_IOLBF) || type1 == _IOFBF { + if buf != 0 && size >= uint64(UNGET) { + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + UintptrFromInt32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = size - uint64(UNGET) + } + if type1 == int32(_IOLBF) && (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + } else { + return -int32(1) + } + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_SVB) + return 0 +} + +func Xsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsnprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xsprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_sscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsscanf(tls, s, fmt, va) +} + +var _buf5 [8]uint8 + +func init() { + p := unsafe.Pointer(&X__stderr_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdio_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf6 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdin_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 64)) = __ccgo_fp(X__stdio_read) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf7 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdout_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdout_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +func Xswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xswscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_swscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xswscanf(tls, s, fmt, va) +} + +const MAXTRIES = 100 + +func Xtempnam(tls *TLS, dir uintptr, pfx uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v pfx=%v, (%v:)", tls, dir, pfx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var dl, l, pl Tsize_t + var r, try int32 + var _ /* s at bp+1 */ [4096]uint8 + _, _, _, _, _ = dl, l, pl, r, try + if !(dir != 0) { + dir = __ccgo_ts + 1612 + } + if !(pfx != 0) { + pfx = __ccgo_ts + 1617 + } + dl = Xstrlen(tls, dir) + pl = Xstrlen(tls, pfx) + l = dl + uint64(1) + pl + uint64(1) + uint64(6) + if l >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, bp+1, dir, dl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl] = uint8('/') + Xmemcpy(tls, bp+1+uintptr(dl)+uintptr(1), pfx, pl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl+uint64(1)+pl] = uint8('_') + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[l] = uint8(0) + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(l)-uintptr(6)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(-Int32FromInt32(100)), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + return Xstrdup(tls, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpfile(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var f uintptr + var fd, try int32 + var _ /* s at bp+0 */ [20]uint8 + _, _, _ = f, fd, try + *(*[20]uint8)(unsafe.Pointer(bp)) = [20]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'f', 'i', 'l', 'e', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+uintptr(13)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_openat), int64(-Int32FromInt32(100)), int64(bp), int64(Int32FromInt32(O_RDWR)|Int32FromInt32(O_CREAT)|Int32FromInt32(O_EXCL)|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0600)))))) + if fd >= 0 { + X__syscall3(tls, int64(SYS_unlinkat), int64(-Int32FromInt32(100)), int64(bp), int64(Int32FromInt32(0))) + f = X__fdopen(tls, fd, __ccgo_ts+1622) + if !(f != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + } + return f + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpnam(tls *TLS, buf uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, try int32 + var v2 uintptr + var _ /* s at bp+1 */ [19]uint8 + _, _, _ = r, try, v2 + *(*[19]uint8)(unsafe.Pointer(bp + 1)) = [19]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'n', 'a', 'm', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(12)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(-Int32FromInt32(100)), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + if buf != 0 { + v2 = buf + } else { + v2 = uintptr(unsafe.Pointer(&_internal1)) + } + return Xstrcpy(tls, v2, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +var _internal1 [20]uint8 + +func Xungetc(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var v2, v3 uintptr + _, _, _, _ = __need_unlock, v1, v2, v3 + if c == -int32(1) { + return c + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + v3 = f + 8 + *(*uintptr)(unsafe.Pointer(v3))-- + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uint8)(unsafe.Pointer(v2)) = uint8(c) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(uint8(c)) +} + +func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, l, v1, v2 int32 + var loc Tlocale_t + var ploc, v4, v5, p6 uintptr + var v3 bool + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 + ploc = ___get_tp(tls) + 152 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if v3 = !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || c == uint32(0xffffffff); !v3 { + v2 = int32(Xwcrtomb(tls, bp, int32(c), uintptr(0))) + l = v2 + } + if v3 || v2 < 0 || (*TFILE)(unsafe.Pointer(f)).Frpos < (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET)+uintptr(l) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(0xffffffff) + } + if BoolInt32(c < uint32(128)) != 0 { + v5 = f + 8 + *(*uintptr)(unsafe.Pointer(v5))-- + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uint8)(unsafe.Pointer(v4)) = uint8(c) + } else { + p6 = f + 8 + *(*uintptr)(unsafe.Pointer(p6)) -= uintptr(l) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(p6)), bp, uint64(l)) + } + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xvasprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap2 Tva_list + var l int32 + var v1 uintptr + var v2 bool + _, _, _, _ = ap2, l, v1, v2 + ap2 = ap + l = Xvsnprintf(tls, uintptr(0), uint64(0), fmt, ap2) + _ = ap2 + if v2 = l < 0; !v2 { + v1 = Xmalloc(tls, uint64(uint32(l)+uint32(1))) + *(*uintptr)(unsafe.Pointer(s)) = v1 + } + if v2 || !(v1 != 0) { + return -int32(1) + } + return Xvsnprintf(tls, *(*uintptr)(unsafe.Pointer(s)), uint64(uint32(l)+uint32(1)), fmt, ap) +} + +func Xvdprintf(tls *TLS, fd int32, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v ap=%v, (%v:)", tls, fd, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fwrite: __ccgo_fp(X__stdio_write), + Fbuf: fmt, + Ffd: fd, + Flock: -int32(1), + Flbf: -int32(1), + } + return Xvfprintf(tls, bp, fmt, ap) +} + +const ALT_FORM = 8 +const FLAGMASK = 75913 +const GROUPED = 128 +const LDBL_EPSILON3 = 2.22044604925031308085e-16 +const LEFT_ADJ = 8192 +const MARK_POS = 2048 +const PAD_POS = 1 +const ZERO_PAD = 65536 + +const _BARE = 0 +const _LPRE = 1 +const _LLPRE = 2 +const _HPRE = 3 +const _HHPRE = 4 +const _BIGLPRE = 5 +const _ZTPRE = 6 +const _JPRE = 7 +const _STOP = 8 +const _PTR = 9 +const _INT = 10 +const _UINT = 11 +const _ULLONG = 12 +const _LONG = 13 +const _ULONG = 14 +const _SHORT = 15 +const _USHORT = 16 +const _CHAR = 17 +const _UCHAR = 18 +const _LLONG = 19 +const _SIZET = 20 +const _IMAX = 21 +const _UMAX = 22 +const _PDIFF = 23 +const _UIPTR = 24 +const _DBL = 25 +const _LDBL = 26 +const _NOARG = 27 +const _MAXSTATE = 28 + +var _states = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +type Targ = struct { + Ff [0]float64 + Fp [0]uintptr + Fi Tuintmax_t +} + +func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0) { + X__fwritex(tls, s, l, f) + } +} + +func _pad3(tls *TLS, f uintptr, c uint8, w int32, l int32, fl int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uint64 + var _ /* pad at bp+0 */ [256]uint8 + _ = v1 + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0 || l >= w { + return + } + l = w - l + if uint64(l) > uint64(256) { + v1 = uint64(256) + } else { + v1 = uint64(l) + } + Xmemset(tls, bp, int32(c), v1) + for { + if !(uint64(l) >= uint64(256)) { + break + } + _out(tls, f, bp, uint64(256)) + goto _2 + _2: + ; + l = int32(uint64(l) - Uint64FromInt64(256)) + } + _out(tls, f, bp, uint64(l)) +} + +var _xdigits1 = [16]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} + +func _fmt_x(tls *TLS, x Tuintmax_t, s uintptr, lower int32) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(_xdigits1[x&uint64(15)]) | lower) + goto _1 + _1: + ; + x >>= uint64(4) + } + return s +} + +func _fmt_o(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x&uint64(7)) + goto _1 + _1: + ; + x >>= uint64(3) + } + return s +} + +func _fmt_u(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var y uint64 + var v2, v4 uintptr + _, _, _ = y, v2, v4 + for { + if !(x > Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x%uint64(10)) + goto _1 + _1: + ; + x /= uint64(10) + } + y = x + for { + if !(y != 0) { + break + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(uint64('0') + y%uint64(10)) + goto _3 + _3: + ; + y /= uint64(10) + } + return s +} + +// C documentation +// +// /* Do not override this check. The floating point printing code below +// * depends on the float.h constants being right. If they are wrong, it +// * may overflow the stack. */ +type Tcompiler_defines_long_double_incorrectly = [1]uint8 + +func _fmt_fp(tls *TLS, f uintptr, y float64, w int32, p int32, fl int32, t int32) (r1 int32) { + bp := tls.Alloc(560) + defer tls.Free(560) + var a, b, d, ebuf, estr, prefix, r, s, s1, s2, s3, s4, z, v10, v11, v13, v14, v15, v17, v18, v19, v20, v21, v24, v27, v28, v31, v32, v43, v44, v46, v48, v49, v5, v51, v54, v55, v56, v6 uintptr + var carry, carry1, rm, x2 Tuint32_t + var e, i, j, l, need, pl, re, sh, sh1, x, v12, v16, v22, v25, v42, v45, v52, v58, v7, v8, v9 int32 + var round, round1, small float64 + var x1 Tuint64_t + var v1, v3 uint64 + var v36, v37, v38, v39, v40, v41, v57 int64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* big at bp+8 */ [126]Tuint32_t + var _ /* buf at bp+516 */ [22]uint8 + var _ /* e2 at bp+512 */ int32 + var _ /* ebuf0 at bp+538 */ [12]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, carry, carry1, d, e, ebuf, estr, i, j, l, need, pl, prefix, r, re, rm, round, round1, s, s1, s2, s3, s4, sh, sh1, small, x, x1, x2, z, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v24, v25, v27, v28, v3, v31, v32, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v48, v49, v5, v51, v52, v54, v55, v56, v57, v58, v6, v7, v8, v9 + *(*int32)(unsafe.Pointer(bp + 512)) = 0 + prefix = __ccgo_ts + 1625 + ebuf = bp + 538 + uintptr(Uint64FromInt32(3)*Uint64FromInt64(4)) + pl = int32(1) + *(*float64)(unsafe.Pointer(bp)) = y + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if int32(v1>>Int32FromInt32(63)) != 0 { + y = -y + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(3) + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(6) + } else { + prefix++ + pl = Int32FromInt32(0) + } + } + } + *(*float64)(unsafe.Pointer(bp)) = y + v3 = *(*uint64)(unsafe.Pointer(bp)) + goto _4 +_4: + if !(BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< int32(3)+pl { + v7 = w + } else { + v7 = int32(3) + pl + } + return v7 + } + y = Xfrexpl(tls, y, bp+512) * Float64FromInt32(2) + if y != 0 { + *(*int32)(unsafe.Pointer(bp + 512))-- + } + if t|int32(32) == int32('a') { + round = Float64FromFloat64(8) + if t&int32(32) != 0 { + prefix += uintptr(9) + } + pl += int32(2) + if p < 0 || p >= Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)-Int32FromInt32(1) { + re = 0 + } else { + re = Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4) - Int32FromInt32(1) - p + } + if re != 0 { + round *= float64(Int32FromInt32(1) << (Int32FromInt32(LDBL_MANT_DIG) % Int32FromInt32(4))) + for { + v8 = re + re-- + if !(v8 != 0) { + break + } + round *= Float64FromInt32(16) + } + if int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + y = -y + y -= round + y += round + y = -y + } else { + y += round + y -= round + } + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v9 = -*(*int32)(unsafe.Pointer(bp + 512)) + } else { + v9 = *(*int32)(unsafe.Pointer(bp + 512)) + } + estr = _fmt_u(tls, uint64(v9), ebuf) + if estr == ebuf { + estr-- + v10 = estr + *(*uint8)(unsafe.Pointer(v10)) = uint8('0') + } + estr-- + v11 = estr + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v12 = int32('-') + } else { + v12 = int32('+') + } + *(*uint8)(unsafe.Pointer(v11)) = uint8(v12) + estr-- + v13 = estr + *(*uint8)(unsafe.Pointer(v13)) = uint8(t + (Int32FromUint8('p') - Int32FromUint8('a'))) + s = bp + 516 + for cond := true; cond; cond = y != 0 { + x = int32(y) + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32(_xdigits1[x]) | t&int32(32)) + y = Float64FromInt32(16) * (y - float64(x)) + if int64(s)-t__predefined_ptrdiff_t(bp+516) == int64(1) && (y != 0 || p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + v15 = s + s++ + *(*uint8)(unsafe.Pointer(v15)) = uint8('.') + } + } + if int64(p) > int64(Int32FromInt32(INT_MAX)-Int32FromInt32(2))-(int64(ebuf)-int64(estr))-int64(pl) { + return -int32(1) + } + if p != 0 && int64(s)-t__predefined_ptrdiff_t(bp+516)-int64(2) < int64(p) { + l = int32(int64(p+Int32FromInt32(2)) + (int64(ebuf) - int64(estr))) + } else { + l = int32(int64(s) - t__predefined_ptrdiff_t(bp+516) + (int64(ebuf) - int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _out(tls, f, bp+516, uint64(int64(s)-t__predefined_ptrdiff_t(bp+516))) + _pad3(tls, f, uint8('0'), int32(int64(l)-(int64(ebuf)-int64(estr))-(int64(s)-t__predefined_ptrdiff_t(bp+516))), 0, 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v16 = w + } else { + v16 = pl + l + } + return v16 + } + if p < 0 { + p = int32(6) + } + if y != 0 { + y *= Float64FromFloat64(2.68435456e+08) + *(*int32)(unsafe.Pointer(bp + 512)) -= int32(28) + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v18 = bp + 8 + z = v18 + v17 = v18 + r = v17 + a = v17 + } else { + v20 = bp + 8 + uintptr(Uint64FromInt64(504)/Uint64FromInt64(4))*4 - UintptrFromInt32(LDBL_MANT_DIG)*4 - UintptrFromInt32(1)*4 + z = v20 + v19 = v20 + r = v19 + a = v19 + } + for cond := true; cond; cond = y != 0 { + *(*Tuint32_t)(unsafe.Pointer(z)) = uint32(y) + v21 = z + z += 4 + y = Float64FromInt32(1000000000) * (y - float64(*(*Tuint32_t)(unsafe.Pointer(v21)))) + } + for *(*int32)(unsafe.Pointer(bp + 512)) > 0 { + carry = uint32(0) + if int32(29) < *(*int32)(unsafe.Pointer(bp + 512)) { + v22 = int32(29) + } else { + v22 = *(*int32)(unsafe.Pointer(bp + 512)) + } + sh = v22 + d = z - uintptr(1)*4 + for { + if !(d >= a) { + break + } + x1 = uint64(*(*Tuint32_t)(unsafe.Pointer(d)))< a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0) { + z -= 4 + } + *(*int32)(unsafe.Pointer(bp + 512)) -= sh + } + for *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + carry1 = uint32(0) + if int32(9) < -*(*int32)(unsafe.Pointer(bp + 512)) { + v25 = int32(9) + } else { + v25 = -*(*int32)(unsafe.Pointer(bp + 512)) + } + sh1 = v25 + need = int32(uint32(1) + (uint32(p)+Uint32FromInt32(LDBL_MANT_DIG)/Uint32FromUint32(3)+uint32(8))/uint32(9)) + d = a + for { + if !(d < z) { + break + } + rm = *(*Tuint32_t)(unsafe.Pointer(d)) & uint32(int32(1)<>sh1 + carry1 + carry1 = uint32(Int32FromInt32(1000000000)>>sh1) * rm + goto _26 + _26: + ; + d += 4 + } + if !(*(*Tuint32_t)(unsafe.Pointer(a)) != 0) { + a += 4 + } + if carry1 != 0 { + v27 = z + z += 4 + *(*Tuint32_t)(unsafe.Pointer(v27)) = carry1 + } + /* Avoid (slow!) computation past requested precision */ + if t|int32(32) == int32('f') { + v28 = r + } else { + v28 = a + } + b = v28 + if (int64(z)-int64(b))/4 > int64(need) { + z = b + uintptr(need)*4 + } + *(*int32)(unsafe.Pointer(bp + 512)) += sh1 + } + if a < z { + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _29 + _29: + ; + i *= int32(10) + e++ + } + } else { + e = 0 + } + /* Perform rounding: j is precision after the radix (possibly neg) */ + j = p - BoolInt32(t|int32(32) != int32('f'))*e - BoolInt32(t|int32(32) == int32('g') && p != 0) + if int64(j) < int64(9)*((int64(z)-int64(r))/4-int64(1)) { + /* We avoid C's broken division of negative numbers */ + d = r + uintptr(1)*4 + uintptr((j+Int32FromInt32(9)*Int32FromInt32(LDBL_MAX_EXP))/Int32FromInt32(9)-Int32FromInt32(LDBL_MAX_EXP))*4 + j += Int32FromInt32(9) * Int32FromInt32(LDBL_MAX_EXP) + j %= int32(9) + i = int32(10) + j++ + for { + if !(j < int32(9)) { + break + } + goto _30 + _30: + ; + i *= int32(10) + j++ + } + x2 = *(*Tuint32_t)(unsafe.Pointer(d)) % uint32(i) + /* Are there any significant digits past j? */ + if x2 != 0 || d+uintptr(1)*4 != z { + round1 = Float64FromInt32(2) / Float64FromFloat64(2.22044604925031308085e-16) + if *(*Tuint32_t)(unsafe.Pointer(d))/uint32(i)&uint32(1) != 0 || i == int32(1000000000) && d > a && *(*Tuint32_t)(unsafe.Pointer(d + uintptr(-Int32FromInt32(1))*4))&uint32(1) != 0 { + round1 += Float64FromInt32(2) + } + if x2 < uint32(i/int32(2)) { + small = Float64FromFloat64(0.5) + } else { + if x2 == uint32(i/int32(2)) && d+uintptr(1)*4 == z { + small = Float64FromFloat64(1) + } else { + small = Float64FromFloat64(1.5) + } + } + if pl != 0 && int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + round1 *= float64(-Int32FromInt32(1)) + small *= float64(-Int32FromInt32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(d)) -= x2 + /* Decide whether to round by probing round+small */ + if round1+small != round1 { + *(*Tuint32_t)(unsafe.Pointer(d)) = *(*Tuint32_t)(unsafe.Pointer(d)) + uint32(i) + for *(*Tuint32_t)(unsafe.Pointer(d)) > uint32(999999999) { + v31 = d + d -= 4 + *(*Tuint32_t)(unsafe.Pointer(v31)) = uint32(0) + if d < a { + a -= 4 + v32 = a + *(*Tuint32_t)(unsafe.Pointer(v32)) = uint32(0) + } + *(*Tuint32_t)(unsafe.Pointer(d))++ + } + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _33 + _33: + ; + i *= int32(10) + e++ + } + } + } + if z > d+uintptr(1)*4 { + z = d + uintptr(1)*4 + } + } + for { + if !(z > a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0)) { + break + } + goto _34 + _34: + ; + z -= 4 + } + if t|int32(32) == int32('g') { + if !(p != 0) { + p++ + } + if p > e && e >= -int32(4) { + t-- + p -= e + int32(1) + } else { + t -= int32(2) + p-- + } + if !(uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + /* Count trailing zeros in last place */ + if z > a && *(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0 { + i = int32(10) + j = Int32FromInt32(0) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4))%uint32(i) == uint32(0)) { + break + } + goto _35 + _35: + ; + i *= int32(10) + j++ + } + } else { + j = int32(9) + } + if t|int32(32) == int32('f') { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v37 = int64(Int32FromInt32(0)) + } else { + v37 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + if int64(p) < v37 { + v36 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v38 = int64(Int32FromInt32(0)) + } else { + v38 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + v36 = v38 + } + p = int32(v36) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v40 = int64(Int32FromInt32(0)) + } else { + v40 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + if int64(p) < v40 { + v39 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v41 = int64(Int32FromInt32(0)) + } else { + v41 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + v39 = v41 + } + p = int32(v39) + } + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(1)-BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + return -int32(1) + } + l = int32(1) + p + BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) + if t|int32(32) == int32('f') { + if e > int32(INT_MAX)-l { + return -int32(1) + } + if e > 0 { + l += e + } + } else { + if e < 0 { + v42 = -e + } else { + v42 = e + } + estr = _fmt_u(tls, uint64(v42), ebuf) + for int64(ebuf)-int64(estr) < int64(2) { + estr-- + v43 = estr + *(*uint8)(unsafe.Pointer(v43)) = uint8('0') + } + estr-- + v44 = estr + if e < 0 { + v45 = int32('-') + } else { + v45 = int32('+') + } + *(*uint8)(unsafe.Pointer(v44)) = uint8(v45) + estr-- + v46 = estr + *(*uint8)(unsafe.Pointer(v46)) = uint8(t) + if int64(ebuf)-int64(estr) > int64(int32(INT_MAX)-l) { + return -int32(1) + } + l = int32(int64(l) + (int64(ebuf) - int64(estr))) + } + if l > int32(INT_MAX)-pl { + return -int32(1) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + if t|int32(32) == int32('f') { + if a > r { + a = r + } + d = a + for { + if !(d <= r) { + break + } + s2 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if d != a { + for s2 > bp+516 { + s2-- + v48 = s2 + *(*uint8)(unsafe.Pointer(v48)) = uint8('0') + } + } else { + if s2 == bp+516+uintptr(9) { + s2-- + v49 = s2 + *(*uint8)(unsafe.Pointer(v49)) = uint8('0') + } + } + _out(tls, f, s2, uint64(int64(bp+516+uintptr(9))-int64(s2))) + goto _47 + _47: + ; + d += 4 + } + if p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+607, uint64(1)) + } + for { + if !(d < z && p > 0) { + break + } + s3 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + for s3 > bp+516 { + s3-- + v51 = s3 + *(*uint8)(unsafe.Pointer(v51)) = uint8('0') + } + if int32(9) < p { + v52 = int32(9) + } else { + v52 = p + } + _out(tls, f, s3, uint64(v52)) + goto _50 + _50: + ; + d += 4 + p -= int32(9) + } + _pad3(tls, f, uint8('0'), p+int32(9), int32(9), 0) + } else { + if z <= a { + z = a + uintptr(1)*4 + } + d = a + for { + if !(d < z && p >= 0) { + break + } + s4 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if s4 == bp+516+uintptr(9) { + s4-- + v54 = s4 + *(*uint8)(unsafe.Pointer(v54)) = uint8('0') + } + if d != a { + for s4 > bp+516 { + s4-- + v55 = s4 + *(*uint8)(unsafe.Pointer(v55)) = uint8('0') + } + } else { + v56 = s4 + s4++ + _out(tls, f, v56, uint64(1)) + if p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+607, uint64(1)) + } + } + if int64(bp+516+UintptrFromInt32(9))-int64(s4) < int64(p) { + v57 = int64(bp+516+UintptrFromInt32(9)) - int64(s4) + } else { + v57 = int64(p) + } + _out(tls, f, s4, uint64(v57)) + p = int32(int64(p) - (int64(bp+516+UintptrFromInt32(9)) - int64(s4))) + goto _53 + _53: + ; + d += 4 + } + _pad3(tls, f, uint8('0'), p+int32(18), int32(18), 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v58 = w + } else { + v58 = pl + l + } + return v58 +} + +func _getint(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return i +} + +func _printf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, prefix, ws, z, v35, v39, v44, v48, v8 uintptr + var argpos, cnt, l, p, pl, t, w, xp, v36, v40, v42, v43, v47, v5, v50, v6, v7 int32 + var fl, l10n, ps, st uint32 + var i Tsize_t + var v31 uint64 + var v34 int64 + var v45, v49 bool + var _ /* arg at bp+8 */ Targ + var _ /* buf at bp+16 */ [24]uint8 + var _ /* mb at bp+48 */ [4]uint8 + var _ /* s at bp+0 */ uintptr + var _ /* wc at bp+40 */ [2]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, cnt, fl, i, l, l10n, p, pl, prefix, ps, st, t, w, ws, xp, z, v31, v34, v35, v36, v39, v40, v42, v43, v44, v45, v47, v48, v49, v5, v50, v6, v7, v8 + *(*uintptr)(unsafe.Pointer(bp)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + z = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('%') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('%')) { + break + } + goto _3 + _3: + ; + z++ + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } + if int64(z)-int64(a) > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32(int64(z) - int64(a)) + if f != 0 { + _out(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + argpos = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) - int32('0') + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read field width */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*4)) = int32(_INT) + w = Int32FromInt32(0) + } else { + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp))++ + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint(tls, bp) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 3))) == int32('$') { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*4)) = int32(_INT) + p = Int32FromInt32(0) + } else { + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(4) + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp))++ + p = _getint(tls, bp) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states)) + uintptr(st)*58 + uintptr(int32(*(*uint8)(unsafe.Pointer(v8)))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + } else { + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } + } else { + if f != 0 { + _pop_arg(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + z = bp + 16 + uintptr(24) + prefix = __ccgo_ts + 1656 + pl = 0 + t = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + uintptr(-Int32FromInt32(1))))) + /* Transform ls,lc -> S,C */ + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + /* - and 0 flags are mutually exclusive */ + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + switch t { + case int32('n'): + goto _9 + case int32('p'): + goto _10 + case int32('X'): + goto _11 + case int32('x'): + goto _12 + case int32('o'): + goto _13 + case int32('i'): + goto _14 + case int32('d'): + goto _15 + case int32('u'): + goto _16 + case int32('c'): + goto _17 + case int32('s'): + goto _18 + case int32('m'): + goto _19 + case int32('C'): + goto _20 + case int32('S'): + goto _21 + case int32('A'): + goto _22 + case int32('G'): + goto _23 + case int32('F'): + goto _24 + case int32('E'): + goto _25 + case int32('a'): + goto _26 + case int32('g'): + goto _27 + case int32('f'): + goto _28 + case int32('e'): + goto _29 + } + goto _30 + _9: + ; + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + break + } + goto _1 + _10: + ; + if uint64(p) > Uint64FromInt32(2)*Uint64FromInt64(8) { + v31 = uint64(p) + } else { + v31 = Uint64FromInt32(2) * Uint64FromInt64(8) + } + p = int32(v31) + t = int32('x') + fl |= Uint32FromUint32(1) << (Int32FromUint8('#') - Int32FromUint8(' ')) + _12: + ; + _11: + ; + a = _fmt_x(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z, t&int32(32)) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0 && fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(t >> Int32FromInt32(4)) + pl = Int32FromInt32(2) + } + if !(0 != 0) { + goto _32 + } + _13: + ; + a = _fmt_o(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 && int64(p) < int64(z)-int64(a)+int64(1) { + p = int32(int64(z) - int64(a) + int64(1)) + } + _32: + ; + if !(0 != 0) { + goto _33 + } + _15: + ; + _14: + ; + pl = int32(1) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) > uint64(Int64FromInt64(INT64_MAX)) { + *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) = -*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix++ + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(2) + } else { + pl = 0 + } + } + } + _16: + ; + a = _fmt_u(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + _33: + ; + if xp != 0 && p < 0 { + goto overflow + } + if xp != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) && !(p != 0) { + a = z + goto _30 + } + if int64(p) > int64(z)-int64(a)+BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) { + v34 = int64(p) + } else { + v34 = int64(z) - int64(a) + BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) + } + p = int32(v34) + goto _30 + goto narrow_c + narrow_c: + ; + _17: + ; + v36 = Int32FromInt32(1) + p = v36 + v35 = z - uintptr(v36) + a = v35 + *(*uint8)(unsafe.Pointer(v35)) = uint8(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _19: + ; + if !(int32(1) != 0) { + goto _37 + } + a = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + goto _38 + _37: + ; + _18: + ; + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v39 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + v39 = __ccgo_ts + 1666 + } + a = v39 + _38: + ; + if p < 0 { + v40 = int32(INT_MAX) + } else { + v40 = p + } + z = a + uintptr(Xstrnlen(tls, a, uint64(v40))) + if p < 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32(int64(z) - int64(a)) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _20: + ; + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) { + goto narrow_c + } + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[0] = int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[int32(1)] = 0 + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + 40 + p = -int32(1) + _21: + ; + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + v42 = Int32FromInt32(0) + l = v42 + i = uint64(v42) + for { + if v45 = i < uint64(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v45 { + v44 = ws + ws += 4 + v43 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v44))) + l = v43 + } + if !(v45 && v43 >= 0 && uint64(l) <= uint64(p)-i) { + break + } + goto _41 + _41: + ; + i += uint64(l) + } + if l < 0 { + return -int32(1) + } + if i > uint64(INT_MAX) { + goto overflow + } + p = int32(i) + _pad3(tls, f, uint8(' '), w, p, int32(fl)) + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + i = uint64(0) + for { + if v49 = i < uint64(0+uint32(p)) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v49 { + v48 = ws + ws += 4 + v47 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v48))) + l = v47 + } + if !(v49 && i+uint64(v47) <= uint64(p)) { + break + } + _out(tls, f, bp+48, uint64(l)) + goto _46 + _46: + ; + i += uint64(l) + } + _pad3(tls, f, uint8(' '), w, p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > p { + v50 = w + } else { + v50 = p + } + l = v50 + goto _1 + _29: + ; + _28: + ; + _27: + ; + _26: + ; + _25: + ; + _24: + ; + _23: + ; + _22: + ; + if xp != 0 && p < 0 { + goto overflow + } + l = _fmt_fp(tls, f, *(*float64)(unsafe.Pointer(bp + 8)), w, p, int32(fl), t) + if l < 0 { + goto overflow + } + goto _1 + _30: + ; + if int64(p) < int64(z)-int64(a) { + p = int32(int64(z) - int64(a)) + } + if p > int32(INT_MAX)-pl { + goto overflow + } + if w < pl+p { + w = pl + p + } + if w > int32(INT_MAX)-cnt { + goto overflow + } + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl)) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _pad3(tls, f, uint8('0'), p, int32(int64(z)-int64(a)), 0) + _out(tls, f, a, uint64(int64(z)-int64(a))) + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = uint64(1) + for { + if !(i <= uint64(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _51 + _51: + ; + i++ + } + for { + if !(i <= uint64(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _52 + _52: + ; + i++ + } + if i <= uint64(NL_ARGMAX) { + goto inval + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var __need_unlock, olderr, ret, v1 int32 + var saved_buf, v2, v3, v4, v5 uintptr + var _ /* ap2 at bp+0 */ Tva_list + var _ /* internal_buf at bp+128 */ [80]uint8 + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _, _, _, _, _, _ = __need_unlock, olderr, ret, saved_buf, v1, v2, v3, v4, v5 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + saved_buf = uintptr(0) + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _printf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) { + saved_buf = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fbuf = bp + 128 + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(80) + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v3 + v2 = v3 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + ret = -int32(1) + } else { + ret = _printf_core(tls, f, fmt, bp, bp+48, bp+8) + } + if saved_buf != 0 { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + ret = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fbuf = saved_buf + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + } + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +const SIZE_L = 2 +const SIZE_def = 0 +const SIZE_h = -1 +const SIZE_hh = -2 +const SIZE_l = 1 +const SIZE_ll = 3 + +func _store_int(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var __need_unlock, alloc, base, c, invert, matches, size, t, width, v1, v12, v13, v16, v17, v20, v21, v23, v29, v3, v32, v33, v36, v4, v6, v64, v65, v69, v7, v70, v75, v76, v80, v81, v9 int32 + var dest, p, s, tmp, tmp1, wcs, v10, v11, v18, v19, v24, v25, v28, v30, v31, v37, v38, v59, v62, v66, v67, v71, v72, v74, v77, v78, v82, v83 uintptr + var i, k, v68, v73, v79 Tsize_t + var pos Toff_t + var x uint64 + var y float64 + var v63 uint32 + var _ /* scanset at bp+16 */ [257]uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+276 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, base, c, dest, i, invert, k, matches, p, pos, s, size, t, tmp, tmp1, wcs, width, x, y, v1, v10, v11, v12, v13, v16, v17, v18, v19, v20, v21, v23, v24, v25, v28, v29, v3, v30, v31, v32, v33, v36, v37, v38, v4, v59, v6, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v9 + alloc = 0 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + goto input_fail + } + p = fmt + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + v3 = int32(*(*uint8)(unsafe.Pointer(p))) + v4 = BoolInt32(v3 == int32(' ') || uint32(v3)-uint32('\t') < uint32(5)) + goto _5 + _5: + if v4 != 0 { + for { + v6 = int32(*(*uint8)(unsafe.Pointer(p + 1))) + v7 = BoolInt32(v6 == int32(' ') || uint32(v6)-uint32('\t') < uint32(5)) + goto _8 + _8: + if !(v7 != 0) { + break + } + p++ + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + v12 = v9 + v13 = BoolInt32(v12 == int32(' ') || uint32(v12)-uint32('\t') < uint32(5)) + goto _14 + _14: + if !(v13 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + if int32(*(*uint8)(unsafe.Pointer(p))) != int32('%') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('%') { + X__shlim(tls, f, int64(Int32FromInt32(0))) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('%') { + p++ + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v19 = f + 8 + v18 = *(*uintptr)(unsafe.Pointer(v19)) + *(*uintptr)(unsafe.Pointer(v19))++ + v17 = int32(*(*uint8)(unsafe.Pointer(v18))) + } else { + v17 = X__shgetc(tls, f) + } + v16 = v17 + c = v16 + v20 = v16 + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + if !(v21 != 0) { + break + } + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = int32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = X__shgetc(tls, f) + } + c = v23 + } + if c != int32(*(*uint8)(unsafe.Pointer(p))) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('*') { + dest = uintptr(0) + p++ + } else { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('$') { + dest = _arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-int32('0'))) + p += uintptr(2) + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + int32(*(*uint8)(unsafe.Pointer(p))) - int32('0') + goto _27 + _27: + ; + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p++ + } else { + alloc = 0 + } + size = SIZE_def + v28 = p + p++ + switch int32(*(*uint8)(unsafe.Pointer(v28))) { + case int32('h'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('h') { + p++ + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('l') { + p++ + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p-- + default: + goto fmt_fail + } + t = int32(*(*uint8)(unsafe.Pointer(p))) + /* C or S */ + if t&int32(0x2f) == int32(3) { + t |= int32(32) + size = int32(SIZE_l) + } + switch t { + case int32('c'): + if width < int32(1) { + width = int32(1) + } + fallthrough + case int32('['): + case int32('n'): + _store_int(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + default: + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v31 = f + 8 + v30 = *(*uintptr)(unsafe.Pointer(v31)) + *(*uintptr)(unsafe.Pointer(v31))++ + v29 = int32(*(*uint8)(unsafe.Pointer(v30))) + } else { + v29 = X__shgetc(tls, f) + } + v32 = v29 + v33 = BoolInt32(v32 == int32(' ') || uint32(v32)-uint32('\t') < uint32(5)) + goto _34 + _34: + if !(v33 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + } + X__shlim(tls, f, int64(width)) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v38 = f + 8 + v37 = *(*uintptr)(unsafe.Pointer(v38)) + *(*uintptr)(unsafe.Pointer(v38))++ + v36 = int32(*(*uint8)(unsafe.Pointer(v37))) + } else { + v36 = X__shgetc(tls, f) + } + if v36 < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + switch t { + case int32('['): + goto _40 + case int32('c'): + goto _41 + case int32('s'): + goto _42 + case int32('x'): + goto _43 + case int32('X'): + goto _44 + case int32('p'): + goto _45 + case int32('o'): + goto _46 + case int32('u'): + goto _47 + case int32('d'): + goto _48 + case int32('i'): + goto _49 + case int32('G'): + goto _50 + case int32('g'): + goto _51 + case int32('F'): + goto _52 + case int32('f'): + goto _53 + case int32('E'): + goto _54 + case int32('e'): + goto _55 + case int32('A'): + goto _56 + case int32('a'): + goto _57 + } + goto _58 + _42: + ; + _41: + ; + _40: + ; + if t == int32('c') || t == int32('s') { + Xmemset(tls, bp+16, -int32(1), uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if t == int32('s') { + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\t')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\n')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\v')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\f')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\r')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(' ')] = uint8(0) + } + } else { + p++ + v59 = p + if int32(*(*uint8)(unsafe.Pointer(v59))) == int32('^') { + p++ + invert = Int32FromInt32(1) + } else { + invert = 0 + } + Xmemset(tls, bp+16, invert, uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('-')] = uint8(Int32FromInt32(1) - invert) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(']')] = uint8(Int32FromInt32(1) - invert) + } + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + v62 = p + p++ + c = int32(*(*uint8)(unsafe.Pointer(v62 + uintptr(-Int32FromInt32(1))))) + for { + if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { + break + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+c] = uint8(int32(1) - invert) + goto _61 + _61: + ; + c++ + } + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+int32(*(*uint8)(unsafe.Pointer(p)))] = uint8(int32(1) - invert) + goto _60 + _60: + ; + p++ + } + } + wcs = uintptr(0) + s = uintptr(0) + i = uint64(0) + if t == int32('c') { + v63 = uint32(width) + uint32(1) + } else { + v63 = uint32(31) + } + k = uint64(v63) + if size == int32(SIZE_l) { + if alloc != 0 { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + wcs = dest + } + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v67 = f + 8 + v66 = *(*uintptr)(unsafe.Pointer(v67)) + *(*uintptr)(unsafe.Pointer(v67))++ + v65 = int32(*(*uint8)(unsafe.Pointer(v66))) + } else { + v65 = X__shgetc(tls, f) + } + v64 = v65 + c = v64 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v64+int32(1)] != 0) { + break + } + *(*uint8)(unsafe.Pointer(bp)) = uint8(c) + switch Xmbrtowc(tls, bp+276, bp, uint64(1), bp+8) { + case uint64(-Int32FromInt32(1)): + goto input_fail + case uint64(-Int32FromInt32(2)): + continue + } + if wcs != 0 { + v68 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v68)*4)) = *(*Twchar_t)(unsafe.Pointer(bp + 276)) + } + if alloc != 0 && i == k { + k += k + uint64(1) + tmp = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp != 0) { + goto alloc_fail + } + wcs = tmp + } + } + if !(Xmbsinit(tls, bp+8) != 0) { + goto input_fail + } + } else { + if alloc != 0 { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v72 = f + 8 + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + v70 = int32(*(*uint8)(unsafe.Pointer(v71))) + } else { + v70 = X__shgetc(tls, f) + } + v69 = v70 + c = v69 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v69+int32(1)] != 0) { + break + } + v73 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v73))) = uint8(c) + if i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, s, k) + if !(tmp1 != 0) { + goto alloc_fail + } + s = tmp1 + } + } + } else { + v74 = dest + s = v74 + if v74 != 0 { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v78 = f + 8 + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + v76 = int32(*(*uint8)(unsafe.Pointer(v77))) + } else { + v76 = X__shgetc(tls, f) + } + v75 = v76 + c = v75 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v75+int32(1)] != 0) { + break + } + v79 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v79))) = uint8(c) + } + } else { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v83 = f + 8 + v82 = *(*uintptr)(unsafe.Pointer(v83)) + *(*uintptr)(unsafe.Pointer(v83))++ + v81 = int32(*(*uint8)(unsafe.Pointer(v82))) + } else { + v81 = X__shgetc(tls, f) + } + v80 = v81 + c = v80 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v80+int32(1)] != 0) { + break + } + } + } + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('c') && (*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != int64(width) { + goto match_fail + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + goto _58 + _45: + ; + _44: + ; + _43: + ; + base = int32(16) + goto int_common + _46: + ; + base = int32(8) + goto int_common + _48: + ; + _47: + ; + base = int32(10) + goto int_common + _49: + ; + base = 0 + goto int_common + int_common: + ; + x = X__intscan(tls, f, uint32(base), 0, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('p') && dest != 0 { + *(*uintptr)(unsafe.Pointer(dest)) = uintptr(x) + } else { + _store_int(tls, dest, size, x) + } + goto _58 + _57: + ; + _56: + ; + _55: + ; + _54: + ; + _53: + ; + _52: + ; + _51: + ; + _50: + ; + y = X__floatscan(tls, f, size, 0) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if dest != 0 { + switch size { + case SIZE_def: + *(*float32)(unsafe.Pointer(dest)) = float32(y) + case int32(SIZE_l): + *(*float64)(unsafe.Pointer(dest)) = y + case int32(SIZE_L): + *(*float64)(unsafe.Pointer(dest)) = y + break + } + } + goto _58 + _58: + ; + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p++ + } + if !(0 != 0) { + goto _85 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_85: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +func X__isoc99_vfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, f, fmt, ap) +} + +var _states1 = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out1(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + var v1 Tsize_t + var v2 uintptr + _, _ = v1, v2 + for { + v1 = l + l-- + if !(v1 != 0 && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) { + break + } + v2 = s + s += 4 + Xfputwc(tls, *(*Twchar_t)(unsafe.Pointer(v2)), f) + } +} + +func _pad4(tls *TLS, f uintptr, n int32, fl int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 || !(n != 0) || (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return + } + Xfprintf(tls, f, __ccgo_ts+1673, VaList(bp+8, n, __ccgo_ts)) +} + +func _getint1(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s)) += 4 + } + return i +} + +var _sizeprefix = [24]uint8{ + 0: uint8('L'), + 3: uint8('j'), + 4: uint8('L'), + 5: uint8('L'), + 6: uint8('L'), + 8: uint8('j'), + 14: uint8('j'), + 15: uint8('j'), + 20: uint8('j'), + 23: uint8('j'), +} + +func _wprintf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(112) + defer tls.Free(112) + var a, bs, z, v8 uintptr + var argpos, cnt, i, l, p, t, w, xp, v10, v12, v13, v14, v16, v5, v6, v7 int32 + var fl, l10n, ps, st uint32 + var v15 bool + var v9 uint64 + var _ /* arg at bp+16 */ Targ + var _ /* charfmt at bp+24 */ [16]uint8 + var _ /* s at bp+8 */ uintptr + var _ /* wc at bp+40 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, bs, cnt, fl, i, l, l10n, p, ps, st, t, w, xp, z, v10, v12, v13, v14, v15, v16, v5, v6, v7, v8, v9 + *(*uintptr)(unsafe.Pointer(bp + 8)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + z = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('%') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('%')) { + break + } + goto _3 + _3: + ; + z += 4 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } + if (int64(z)-int64(a))/4 > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32((int64(z) - int64(a)) / 4) + if f != 0 { + _out1(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + argpos = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) - int32('0') + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read field width */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*4)) = int32(_INT) + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint1(tls, bp+8) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 3*4)) == int32('$') { + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*4)) = int32(_INT) + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(4) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + p = _getint1(tls, bp+8) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp + 8)) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states1)) + uintptr(st)*58 + uintptr(*(*Twchar_t)(unsafe.Pointer(v8))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + *(*Targ)(unsafe.Pointer(bp + 16)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } else { + if f != 0 { + _pop_arg1(tls, bp+16, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + t = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(-Int32FromInt32(1))*4)) + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + switch t { + case int32('n'): + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + break + } + goto _1 + case int32('c'): + fallthrough + case int32('C'): + if w < int32(1) { + w = int32(1) + } + _pad4(tls, f, w-int32(1), int32(fl)) + if t == int32('C') { + v9 = *(*Tuintmax_t)(unsafe.Pointer(bp + 16)) + } else { + v9 = uint64(Xbtowc(tls, int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 16))))) + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(v9) + _out1(tls, f, bp, uint64(1)) + _pad4(tls, f, w-int32(1), int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('S'): + a = *(*uintptr)(unsafe.Pointer(bp + 16)) + if p < 0 { + v10 = int32(INT_MAX) + } else { + v10 = p + } + z = a + uintptr(Xwcsnlen(tls, a, uint64(v10)))*4 + if p < 0 && *(*Twchar_t)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32((int64(z) - int64(a)) / 4) + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + _out1(tls, f, a, uint64(p)) + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('m'): + *(*uintptr)(unsafe.Pointer(bp + 16)) = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + fallthrough + case int32('s'): + if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { + *(*uintptr)(unsafe.Pointer(bp + 16)) = __ccgo_ts + 1666 + } + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + v12 = Int32FromInt32(0) + l = v12 + i = v12 + for { + if p < 0 { + v13 = int32(INT_MAX) + } else { + v13 = p + } + if v15 = l < v13; v15 { + v14 = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + i = v14 + } + if !(v15 && v14 > 0) { + break + } + goto _11 + _11: + ; + bs += uintptr(i) + l++ + } + if i < 0 { + return -int32(1) + } + if p < 0 && *(*uint8)(unsafe.Pointer(bs)) != 0 { + goto overflow + } + p = l + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + for { + v16 = l + l-- + if !(v16 != 0) { + break + } + i = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + bs += uintptr(i) + _out1(tls, f, bp+40, uint64(1)) + } + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + } + if xp != 0 && p < 0 { + goto overflow + } + Xsnprintf(tls, bp+24, uint64(16), __ccgo_ts+1677, VaList(bp+56, __ccgo_ts+1697+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1699+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1701+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0)), __ccgo_ts+711+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1703+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0)), int32(_sizeprefix[t|int32(32)-int32('a')]), t)) + switch t | Int32FromInt32(32) { + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*float64)(unsafe.Pointer(bp + 16)))) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('p'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*Tuintmax_t)(unsafe.Pointer(bp + 16)))) + break + } + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = int32(1) + for { + if !(i <= int32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg1(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _17 + _17: + ; + i++ + } + for { + if !(i <= int32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _18 + _18: + ; + i++ + } + if i <= int32(NL_ARGMAX) { + return -int32(1) + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfwprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var __need_unlock, olderr, ret, v1 int32 + var _ /* ap2 at bp+0 */ Tva_list + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _ = __need_unlock, olderr, ret, v1 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _wprintf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + ret = _wprintf_core(tls, f, fmt, bp, bp+48, bp+8) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +func _store_int1(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n1(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func _in_set(tls *TLS, set uintptr, c int32) (r int32) { + var j int32 + var p, v3 uintptr + _, _, _ = j, p, v3 + p = set + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') { + if c == int32('-') { + return int32(1) + } + p += 4 + } else { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + if c == int32(']') { + return int32(1) + } + p += 4 + } + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0 && *(*Twchar_t)(unsafe.Pointer(p)) != int32(']')) { + break + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != int32(']') { + v3 = p + p += 4 + j = *(*Twchar_t)(unsafe.Pointer(v3 + uintptr(-Int32FromInt32(1))*4)) + for { + if !(j < *(*Twchar_t)(unsafe.Pointer(p))) { + break + } + if c == j { + return int32(1) + } + goto _2 + _2: + ; + j++ + } + } + if c == *(*Twchar_t)(unsafe.Pointer(p)) { + return int32(1) + } + goto _1 + _1: + ; + p += 4 + } + return 0 +} + +func Xvfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var __need_unlock, alloc, c, gotmatch, invert, l, matches, size, t, width, v1, v10, v22, v3, v36 int32 + var dest, p, s, set, tmp1, tmp2, wcs, v12, v13, v15, v16, v18, v19, v21, v24, v25, v27, v28, v30, v31, v32, v33, v34, v38, v39, v41, v43, v44, v45, v5, v6, v8, v9 uintptr + var i, k, v40 Tsize_t + var pos Toff_t + var v11, v14, v23, v26, v35, v37, v4 uint32 + var _ /* cnt at bp+0 */ Toff_t + var _ /* tmp at bp+8 */ [22]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, c, dest, gotmatch, i, invert, k, l, matches, p, pos, s, set, size, t, tmp1, tmp2, wcs, width, v1, v10, v11, v12, v13, v14, v15, v16, v18, v19, v21, v22, v23, v24, v25, v26, v27, v28, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v4, v40, v41, v43, v44, v45, v5, v6, v8, v9 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + p = fmt + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + if Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p)))) != 0 { + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p + 1*4)))) != 0 { + p += 4 + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = uint32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = Xgetwc(tls, f) + } + v3 = int32(v4) + c = v3 + if !(Xiswspace(tls, uint32(v3)) != 0) { + break + } + pos++ + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + _ = *(*uint8)(unsafe.Pointer(v8)) + } else { + Xungetwc(tls, uint32(c), f) + } + goto _2 + } + if *(*Twchar_t)(unsafe.Pointer(p)) != int32('%') || *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('%') { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('%') { + p += 4 + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = uint32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = Xgetwc(tls, f) + } + v10 = int32(v11) + c = v10 + if !(Xiswspace(tls, uint32(v10)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = uint32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = Xgetwc(tls, f) + } + c = int32(v14) + } + if c != *(*Twchar_t)(unsafe.Pointer(p)) { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v19 = f + 8 + *(*uintptr)(unsafe.Pointer(v19))-- + v18 = *(*uintptr)(unsafe.Pointer(v19)) + _ = *(*uint8)(unsafe.Pointer(v18)) + } else { + Xungetwc(tls, uint32(c), f) + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos++ + goto _2 + } + p += 4 + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('*') { + dest = uintptr(0) + p += 4 + } else { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('$') { + dest = _arg_n1(tls, ap, uint32(*(*Twchar_t)(unsafe.Pointer(p))-int32('0'))) + p += uintptr(2) * 4 + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + *(*Twchar_t)(unsafe.Pointer(p)) - int32('0') + goto _20 + _20: + ; + p += 4 + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p += 4 + } else { + alloc = 0 + } + size = SIZE_def + v21 = p + p += 4 + switch *(*Twchar_t)(unsafe.Pointer(v21)) { + case int32('h'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('h') { + p += 4 + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('l') { + p += 4 + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p -= 4 + default: + goto fmt_fail + } + t = *(*Twchar_t)(unsafe.Pointer(p)) + /* Transform S,C -> ls,lc */ + if t&int32(0x2f) == int32(3) { + size = int32(SIZE_l) + t |= int32(32) + } + if t != int32('n') { + if t != int32('[') && t|int32(32) != int32('c') { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = uint32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = Xgetwc(tls, f) + } + v22 = int32(v23) + c = v22 + if !(Xiswspace(tls, uint32(v22)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v28 = f + 8 + v27 = *(*uintptr)(unsafe.Pointer(v28)) + *(*uintptr)(unsafe.Pointer(v28))++ + v26 = uint32(*(*uint8)(unsafe.Pointer(v27))) + } else { + v26 = Xgetwc(tls, f) + } + c = int32(v26) + } + if c < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v31 = f + 8 + *(*uintptr)(unsafe.Pointer(v31))-- + v30 = *(*uintptr)(unsafe.Pointer(v31)) + _ = *(*uint8)(unsafe.Pointer(v30)) + } else { + Xungetwc(tls, uint32(c), f) + } + } + switch t { + case int32('n'): + _store_int1(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + if t == int32('c') { + if width < int32(1) { + width = int32(1) + } + invert = int32(1) + set = __ccgo_ts + 1705 + } else { + if t == int32('s') { + invert = int32(1) + set = uintptr(unsafe.Pointer(&_spaces1)) + } else { + p += 4 + v32 = p + if *(*Twchar_t)(unsafe.Pointer(v32)) == int32('^') { + p += 4 + invert = Int32FromInt32(1) + } else { + invert = 0 + } + set = p + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + p += 4 + } + for *(*Twchar_t)(unsafe.Pointer(p)) != int32(']') { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + p += 4 + } + } + } + if size == SIZE_def { + v33 = dest + } else { + v33 = uintptr(0) + } + s = v33 + if size == int32(SIZE_l) { + v34 = dest + } else { + v34 = uintptr(0) + } + wcs = v34 + gotmatch = 0 + if width < int32(1) { + width = -int32(1) + } + i = uint64(0) + if alloc != 0 { + if t == int32('c') { + v35 = uint32(width) + uint32(1) + } else { + v35 = uint32(31) + } + k = uint64(v35) + if size == int32(SIZE_l) { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + } + } + for width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v39 = f + 8 + v38 = *(*uintptr)(unsafe.Pointer(v39)) + *(*uintptr)(unsafe.Pointer(v39))++ + v37 = uint32(*(*uint8)(unsafe.Pointer(v38))) + } else { + v37 = Xgetwc(tls, f) + } + v36 = int32(v37) + c = v36 + if v36 < 0 { + break + } + if _in_set(tls, set, c) == invert { + break + } + if wcs != 0 { + v40 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v40)*4)) = c + if alloc != 0 && i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp1 != 0) { + goto alloc_fail + } + wcs = tmp1 + } + } else { + if size != int32(SIZE_l) { + if s != 0 { + v41 = s + uintptr(i) + } else { + v41 = bp + 8 + } + l = Xwctomb(tls, v41, c) + if l < 0 { + goto input_fail + } + i += uint64(l) + if alloc != 0 && i > k-uint64(4) { + k += k + uint64(1) + tmp2 = Xrealloc(tls, s, k) + if !(tmp2 != 0) { + goto alloc_fail + } + s = tmp2 + } + } + } + pos++ + width -= BoolInt32(width > 0) + gotmatch = int32(1) + } + if width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v44 = f + 8 + *(*uintptr)(unsafe.Pointer(v44))-- + v43 = *(*uintptr)(unsafe.Pointer(v44)) + _ = *(*uint8)(unsafe.Pointer(v43)) + } else { + Xungetwc(tls, uint32(c), f) + } + if t == int32('c') || !(gotmatch != 0) { + goto match_fail + } + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('p'): + if width < int32(1) { + width = 0 + } + Xsnprintf(tls, bp+8, uint64(22), __ccgo_ts+1709, VaList(bp+40, int32(1)+BoolInt32(!(dest != 0)), __ccgo_ts+1727, width, uintptr(unsafe.Pointer(&_size_pfx))+uintptr(size+int32(2))*3, t)) + *(*Toff_t)(unsafe.Pointer(bp)) = 0 + if dest != 0 { + v45 = dest + } else { + v45 = bp + } + if Xfscanf(tls, f, bp+8, VaList(bp+40, v45, bp)) == -int32(1) { + goto input_fail + } else { + if !(*(*Toff_t)(unsafe.Pointer(bp)) != 0) { + goto match_fail + } + } + pos += *(*Toff_t)(unsafe.Pointer(bp)) + default: + goto fmt_fail + } + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p += 4 + } + if !(0 != 0) { + goto _46 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_46: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +var _size_pfx = [6][3]uint8{ + 0: {'h', 'h'}, + 1: {'h'}, + 2: {}, + 3: {'l'}, + 4: {'L'}, + 5: {'l', 'l'}, +} + +var _spaces1 = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__isoc99_vfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, f, fmt, ap) +} + +func Xvprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvscanf(tls, fmt, ap) +} + +type Tcookie3 = struct { + Fs uintptr + Fn Tsize_t +} + +func _sn_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3 uintptr + var k Tsize_t + var v1, v2 uint64 + _, _, _, _, _ = c, k, v1, v2, v3 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tcookie3)(unsafe.Pointer(c)).Fn < uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) { + v1 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v1 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + k = v1 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, (*TFILE)(unsafe.Pointer(f)).Fwbase, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + if (*Tcookie3)(unsafe.Pointer(c)).Fn < l { + v2 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v2 = l + } + k = v2 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, s, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + *(*uint8)(unsafe.Pointer((*Tcookie3)(unsafe.Pointer(c)).Fs)) = uint8(0) + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + /* pretend to succeed, even if we discarded extra data */ + return l +} + +func Xvsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uintptr + var v2 uint64 + var _ /* buf at bp+0 */ [1]uint8 + var _ /* c at bp+8 */ Tcookie3 + var _ /* dummy at bp+1 */ [1]uint8 + var _ /* f at bp+24 */ TFILE + _, _ = v1, v2 + if n != 0 { + v1 = s + } else { + v1 = bp + 1 + } + if n != 0 { + v2 = n - uint64(1) + } else { + v2 = uint64(0) + } + *(*Tcookie3)(unsafe.Pointer(bp + 8)) = Tcookie3{ + Fs: v1, + Fn: v2, + } + *(*TFILE)(unsafe.Pointer(bp + 24)) = TFILE{ + Fwrite: __ccgo_fp(_sn_write), + Fbuf: bp, + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 8, + } + *(*uint8)(unsafe.Pointer((*(*Tcookie3)(unsafe.Pointer(bp + 8))).Fs)) = uint8(0) + return Xvfprintf(tls, bp+24, fmt, ap) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xvsprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsnprintf(tls, s, uint64(INT_MAX), fmt, ap) +} + +func _string_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var end, src uintptr + var k Tsize_t + _, _, _ = end, k, src + src = (*TFILE)(unsafe.Pointer(f)).Fcookie + k = len1 + uint64(256) + end = Xmemchr(tls, src, 0, k) + if end != 0 { + k = uint64(int64(end) - int64(src)) + } + if k < len1 { + len1 = k + } + Xmemcpy(tls, buf, src, len1) + (*TFILE)(unsafe.Pointer(f)).Frpos = src + uintptr(len1) + (*TFILE)(unsafe.Pointer(f)).Frend = src + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = src + uintptr(k) + return len1 +} + +func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fread: __ccgo_fp(_string_read), + Fbuf: s, + Flock: -int32(1), + Fcookie: s, + } + return Xvfscanf(tls, bp, fmt, ap) +} + +func X__isoc99_vsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsscanf(tls, s, fmt, ap) +} + +type Tcookie4 = struct { + Fws uintptr + Fl Tsize_t +} + +func _sw_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3, v4, v5 uintptr + var i, v1 int32 + var l0 Tsize_t + var v2 bool + _, _, _, _, _, _, _, _ = c, i, l0, v1, v2, v3, v4, v5 + l0 = l + i = 0 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if s != (*TFILE)(unsafe.Pointer(f)).Fwbase && _sw_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase))) == uint64(-Int32FromInt32(1)) { + return uint64(-Int32FromInt32(1)) + } + for { + if v2 = (*Tcookie4)(unsafe.Pointer(c)).Fl != 0 && l != 0; v2 { + v1 = Xmbtowc(tls, (*Tcookie4)(unsafe.Pointer(c)).Fws, s, l) + i = v1 + } + if !(v2 && v1 >= 0) { + break + } + if !(i != 0) { + i = int32(1) + } + s += uintptr(i) + l -= uint64(i) + (*Tcookie4)(unsafe.Pointer(c)).Fl-- + (*Tcookie4)(unsafe.Pointer(c)).Fws += 4 + } + *(*Twchar_t)(unsafe.Pointer((*Tcookie4)(unsafe.Pointer(c)).Fws)) = 0 + if i < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(i) + } + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v5 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v5 + return l0 +} + +func Xvswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var r, v1 int32 + var _ /* buf at bp+0 */ [256]uint8 + var _ /* c at bp+256 */ Tcookie4 + var _ /* f at bp+272 */ TFILE + _, _ = r, v1 + *(*Tcookie4)(unsafe.Pointer(bp + 256)) = Tcookie4{ + Fws: s, + Fl: n - uint64(1), + } + *(*TFILE)(unsafe.Pointer(bp + 272)) = TFILE{ + Fwrite: __ccgo_fp(_sw_write), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 256, + } + if !(n != 0) { + return -int32(1) + } + r = Xvfwprintf(tls, bp+272, fmt, ap) + _sw_write(tls, bp+272, uintptr(0), uint64(0)) + if uint64(r) >= n { + v1 = -int32(1) + } else { + v1 = r + } + return v1 +} + +func _wstring_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k Tsize_t + var v1, v2, v3 uintptr + var _ /* src at bp+0 */ uintptr + _, _, _, _ = k, v1, v2, v3 + *(*uintptr)(unsafe.Pointer(bp)) = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*uintptr)(unsafe.Pointer(bp)) != 0) { + return uint64(0) + } + k = Xwcsrtombs(tls, (*TFILE)(unsafe.Pointer(f)).Fbuf, bp, (*TFILE)(unsafe.Pointer(f)).Fbuf_size, uintptr(0)) + if k == uint64(-Int32FromInt32(1)) { + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + return uint64(0) + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = *(*uintptr)(unsafe.Pointer(bp)) + if !(len1 != 0) || !(k != 0) { + return uint64(0) + } + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v2)) + return uint64(1) +} + +func Xvswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(496) + defer tls.Free(496) + var _ /* buf at bp+0 */ [256]uint8 + var _ /* f at bp+256 */ TFILE + *(*TFILE)(unsafe.Pointer(bp + 256)) = TFILE{ + Fread: __ccgo_fp(_wstring_read), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Fcookie: s, + } + return Xvfwscanf(tls, bp+256, fmt, ap) +} + +func X__isoc99_vswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvswscanf(tls, s, fmt, ap) +} + +func Xvwprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvwscanf(tls, fmt, ap) +} + +func Xwprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwprintf(tls, fmt, ap) + _ = ap + return ret +} + +func Xwscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_wscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwscanf(tls, fmt, va) +} + +func Xabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xatof(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, uintptr(0)) +} + +func Xatoi(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on INT_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - (int32(*(*uint8)(unsafe.Pointer(v4))) - int32('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatol(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatoll(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LLONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xbsearch(tls *TLS, key uintptr, base uintptr, nel Tsize_t, width Tsize_t, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var sign int32 + var try uintptr + _, _ = sign, try + for nel > uint64(0) { + try = base + uintptr(width*(nel/uint64(2))) + sign = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, try) + if sign < 0 { + nel /= uint64(2) + } else { + if sign > 0 { + base = try + uintptr(width) + nel -= nel/uint64(2) + uint64(1) + } else { + return try + } + } + } + return UintptrFromInt32(0) +} + +func Xdiv(tls *TLS, num int32, den int32) (r Tdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xecvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, j, v1, v3 int32 + var _ /* tmp at bp+0 */ [32]uint8 + _, _, _, _ = i, j, v1, v3 + if uint32(n)-uint32(1) > uint32(15) { + n = int32(15) + } + Xsprintf(tls, bp, __ccgo_ts+1730, VaList(bp+40, n-int32(1), x)) + v1 = BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[0]) == Int32FromUint8('-')) + *(*int32)(unsafe.Pointer(sign)) = v1 + i = v1 + j = 0 + for { + if !(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[i]) != int32('e')) { + break + } + _buf8[j] = (*(*[32]uint8)(unsafe.Pointer(bp)))[i] + goto _2 + _2: + ; + v3 = i + i++ + j += BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[v3]) != int32('.')) + } + _buf8[j] = uint8(0) + *(*int32)(unsafe.Pointer(dp)) = Xatoi(tls, bp+uintptr(i)+uintptr(1)) + int32(1) + return uintptr(unsafe.Pointer(&_buf8)) +} + +var _buf8 [16]uint8 + +func Xfcvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1536) + defer tls.Free(1536) + var i, lz int32 + var _ /* tmp at bp+0 */ [1500]uint8 + _, _ = i, lz + if uint32(n) > uint32(1400) { + n = int32(1400) + } + Xsprintf(tls, bp, __ccgo_ts+1735, VaList(bp+1512, n, x)) + i = BoolInt32(int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[0]) == int32('-')) + if int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[i]) == int32('0') { + lz = int32(Xstrspn(tls, bp+uintptr(i)+uintptr(2), __ccgo_ts+1703)) + } else { + lz = -int32(Xstrcspn(tls, bp+uintptr(i), __ccgo_ts+607)) + } + if n <= lz { + *(*int32)(unsafe.Pointer(sign)) = i + *(*int32)(unsafe.Pointer(dp)) = int32(1) + if uint32(n) > uint32(14) { + n = int32(14) + } + return __ccgo_ts + 1740 + UintptrFromInt32(14) - uintptr(n) + } + return Xecvt(tls, x, n-lz, dp, sign) +} + +func Xgcvt(tls *TLS, x float64, n int32, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v b=%v, (%v:)", tls, x, n, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + Xsprintf(tls, b, __ccgo_ts+1756, VaList(bp+8, n, x)) + return b +} + +func Ximaxabs(tls *TLS, a Tintmax_t) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Ximaxdiv(tls *TLS, num Tintmax_t, den Tintmax_t) (r Timaxdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Timaxdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xlabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xldiv(tls *TLS, num int64, den int64) (r Tldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xllabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xlldiv(tls *TLS, num int64, den int64) (r Tlldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tlldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +type Tcmpfun = uintptr + +func _pntz(tls *TLS, p uintptr) (r1 int32) { + var r, v1 int32 + var v2 bool + _, _, _ = r, v1, v2 + r = _a_ctz_l(tls, *(*Tsize_t)(unsafe.Pointer(p))-uint64(1)) + if v2 = r != 0; !v2 { + v1 = int32(Uint64FromInt32(8)*Uint64FromInt64(8) + uint64(_a_ctz_l(tls, *(*Tsize_t)(unsafe.Pointer(p + 1*8))))) + r = v1 + } + if v2 || uint64(v1) != Uint64FromInt32(8)*Uint64FromInt64(8) { + return r + } + return 0 +} + +func _cycle(tls *TLS, width Tsize_t, ar uintptr, n int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i int32 + var l Tsize_t + var v1 uint64 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _ = i, l, v1 + if n < int32(2) { + return + } + *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)) = bp + for width != 0 { + if uint64(256) < width { + v1 = uint64(256) + } else { + v1 = width + } + l = v1 + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)), *(*uintptr)(unsafe.Pointer(ar)), l) + i = 0 + for { + if !(i < n) { + break + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(ar + uintptr(i+int32(1))*8)), l) + *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)) += uintptr(l) + goto _2 + _2: + ; + i++ + } + width -= l + } +} + +// C documentation +// +// /* shl() and shr() need n > 0 */ +func _shl(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = *(*Tsize_t)(unsafe.Pointer(p)) + *(*Tsize_t)(unsafe.Pointer(p)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) <<= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) |= *(*Tsize_t)(unsafe.Pointer(p)) >> (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p)) <<= uint64(n) +} + +func _shr(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p)) = *(*Tsize_t)(unsafe.Pointer(p + 1*8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p)) >>= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p)) |= *(*Tsize_t)(unsafe.Pointer(p + 1*8)) << (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) >>= uint64(n) +} + +func _sift(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pshift int32, lp uintptr) { + bp := tls.Alloc(912) + defer tls.Free(912) + var i, v1, v2 int32 + var lf, rt uintptr + var _ /* ar at bp+0 */ [113]uintptr + _, _, _, _, _ = i, lf, rt, v1, v2 + i = int32(1) + (*(*[113]uintptr)(unsafe.Pointer(bp)))[0] = head + for pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], lf, arg) >= 0 && (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], rt, arg) >= 0 { + break + } + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, rt, arg) >= 0 { + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v1] = lf + head = lf + pshift -= int32(1) + } else { + v2 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v2] = rt + head = rt + pshift -= int32(2) + } + } + _cycle(tls, width, bp, i) +} + +func _trinkle(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pp uintptr, pshift int32, trusty int32, lp uintptr) { + bp := tls.Alloc(928) + defer tls.Free(928) + var i, trail, v1 int32 + var lf, rt, stepson uintptr + var _ /* ar at bp+16 */ [113]uintptr + var _ /* p at bp+0 */ [2]Tsize_t + _, _, _, _, _, _ = i, lf, rt, stepson, trail, v1 + i = int32(1) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] = *(*Tsize_t)(unsafe.Pointer(pp)) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = *(*Tsize_t)(unsafe.Pointer(pp + 1*8)) + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0] = head + for (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] != uint64(0) { + stepson = head - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift)*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, stepson, (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0], arg) <= 0 { + break + } + if !(trusty != 0) && pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, rt, stepson, arg) >= 0 || (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, stepson, arg) >= 0 { + break + } + } + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[v1] = stepson + head = stepson + trail = _pntz(tls, bp) + _shr(tls, bp, trail) + pshift += trail + trusty = 0 + } + if !(trusty != 0) { + _cycle(tls, width, bp+16, i) + _sift(tls, head, width, cmp, arg, pshift, lp) + } +} + +func X__qsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + bp := tls.Alloc(784) + defer tls.Free(784) + var head, high uintptr + var i, size, v2, v3 Tsize_t + var pshift, trail int32 + var _ /* lp at bp+0 */ [96]Tsize_t + var _ /* p at bp+768 */ [2]Tsize_t + _, _, _, _, _, _, _, _ = head, high, i, pshift, size, trail, v2, v3 + size = width * nel + *(*[2]Tsize_t)(unsafe.Pointer(bp + 768)) = [2]Tsize_t{ + 0: uint64(1), + } + pshift = int32(1) + if !(size != 0) { + return + } + head = base + high = head + uintptr(size) - uintptr(width) + /* Precompute Leonardo numbers, scaled by element width */ + v2 = width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = v2 + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[0] = v2 + i = Uint64FromInt32(2) + for { + v3 = (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(2)] + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(1)] + width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i] = v3 + if !(v3 < size) { + break + } + goto _1 + _1: + ; + i++ + } + for head < high { + if (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0]&uint64(3) == uint64(3) { + _sift(tls, head, width, cmp, arg, pshift, bp) + _shr(tls, bp+768, int32(2)) + pshift += int32(2) + } else { + if (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift-int32(1)] >= uint64(int64(high)-int64(head)) { + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + } else { + _sift(tls, head, width, cmp, arg, pshift, bp) + } + if pshift == int32(1) { + _shl(tls, bp+768, int32(1)) + pshift = 0 + } else { + _shl(tls, bp+768, pshift-int32(1)) + pshift = int32(1) + } + } + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + head += uintptr(width) + } + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + for pshift != int32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[int32(1)] != uint64(0) { + if pshift <= int32(1) { + trail = _pntz(tls, bp+768) + _shr(tls, bp+768, trail) + pshift += trail + } else { + _shl(tls, bp+768, int32(2)) + pshift -= int32(2) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) ^= uint64(7) + _shr(tls, bp+768, int32(1)) + _trinkle(tls, head-uintptr((*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift])-uintptr(width), width, cmp, arg, bp+768, pshift+int32(1), int32(1), bp) + _shl(tls, bp+768, int32(1)) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + _trinkle(tls, head-uintptr(width), width, cmp, arg, bp+768, pshift, int32(1), bp) + } + head -= uintptr(width) + } +} + +func Xqsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + X__qsort_r(tls, base, nel, width, cmp, arg) +} + +func _wrapper_cmp(tls *TLS, v1 uintptr, v2 uintptr, cmp uintptr) (r int32) { + return (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, v1, v2) +} + +func Xqsort(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, base, nel, width, cmp, origin(2)) + } + X__qsort_r(tls, base, nel, width, __ccgo_fp(_wrapper_cmp), cmp) +} + +func _strtox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Toff_t + var y float64 + var v1, v2 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _, _ = cnt, y, v1, v2 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp, prec, int32(1)) + cnt = (*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf)) + if p != 0 { + if cnt != 0 { + v2 = s + uintptr(cnt) + } else { + v2 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v2 + } + return y +} + +func Xstrtof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_strtox(tls, s, p, 0)) +} + +func Xstrtod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(1)) +} + +func Xstrtold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(2)) +} + +func _strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Tsize_t + var y uint64 + var v1 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _ = cnt, y, v1 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf))) + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) + } + return y +} + +func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoimax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoimax(tls, s, p, base) +} + +func X__strtol_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtol(tls, s, p, base) +} + +func X__strtoll_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func X__strtoul_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoul(tls, s, p, base) +} + +func X__strtoull_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoumax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoumax(tls, s, p, base) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1761 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y float64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp+64, prec, int32(1)) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_wcstox(tls, s, p, 0)) +} + +func Xwcstod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(1)) +} + +func Xwcstold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(2)) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read1(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1761 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y uint64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read1) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp+64, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoll(tls, s, p, base) +} + +func Xwcstoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoull(tls, s, p, base) +} + +func Xbcmp(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcmp(tls, s1, s2, n) +} + +func Xbcopy(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + } + Xmemmove(tls, s2, s1, n) +} + +func Xbzero(tls *TLS, s uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + } + Xmemset(tls, s, 0, n) +} + +func Xexplicit_bzero(tls *TLS, d uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v n=%v, (%v:)", tls, d, n, origin(2)) + } + d = Xmemset(tls, d, 0, n) +} + +func Xindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrchr(tls, s, c) +} + +const ALIGN1 = -1 +const HIGHS = 0 +const ONES = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemccpy(tls *TLS, dest uintptr, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v c=%v n=%v, (%v:)", tls, dest, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, wd, ws uintptr + var k Tsize_t + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _, _, _, _ = d, k, s, wd, ws, v2, v3, v6, v7 + d = dest + s = src + c = int32(uint8(c)) + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && int32(v2) != c) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 { + goto tail + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(ws))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && int32(v6) != c) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + if n != 0 { + return d + uintptr(1) + } + return uintptr(0) +} + +const SS = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemchr(tls *TLS, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v src=%v c=%v n=%v, (%v:)", tls, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var s, w, v4 uintptr + _, _, _, _ = k, s, w, v4 + s = src + c = int32(uint8(c)) + for { + if !(uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _1 + _1: + ; + s++ + n-- + } + if n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c { + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(n >= Uint64FromInt64(8) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + n -= Uint64FromInt64(8) + } + s = w + } + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + n-- + } + if n != 0 { + v4 = s + } else { + v4 = uintptr(0) + } + return v4 +} + +func Xmemcmp(tls *TLS, vl uintptr, vr uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v vl=%v vr=%v n=%v, (%v:)", tls, vl, vr, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v2 int32 + _, _, _ = l, r, v2 + l = vl + r = vr + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _1 + _1: + ; + n-- + l++ + r++ + } + if n != 0 { + v2 = int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) + } else { + v2 = 0 + } + return v2 +} + +const LS = 0 +const RS = 0 + +func Xmemcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 uintptr + var w, x Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, s, w, x, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 + d = dest + s = src + for { + if !(uint64(s)%uint64(4) != 0 && n != 0) { + break + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + goto _1 + _1: + ; + n-- + } + if uint64(d)%uint64(4) == uint64(0) { + for { + if !(n >= uint64(16)) { + break + } + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) + goto _4 + _4: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + if n&uint64(8) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + d += uintptr(8) + s += uintptr(8) + } + if n&uint64(4) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + d += uintptr(4) + s += uintptr(4) + } + if n&uint64(2) != 0 { + v5 = d + d++ + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + v7 = d + d++ + v8 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = *(*uint8)(unsafe.Pointer(v8)) + } + if n&uint64(1) != 0 { + *(*uint8)(unsafe.Pointer(d)) = *(*uint8)(unsafe.Pointer(s)) + } + return dest + } + if n >= uint64(32) { + switch uint64(d) % Uint64FromInt32(4) { + case uint64(1): + w = *(*uint32)(unsafe.Pointer(s)) + v9 = d + d++ + v10 = s + s++ + *(*uint8)(unsafe.Pointer(v9)) = *(*uint8)(unsafe.Pointer(v10)) + v11 = d + d++ + v12 = s + s++ + *(*uint8)(unsafe.Pointer(v11)) = *(*uint8)(unsafe.Pointer(v12)) + v13 = d + d++ + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v13)) = *(*uint8)(unsafe.Pointer(v14)) + n -= uint64(3) + for { + if !(n >= uint64(17)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(1))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<>Int32FromInt32(24) | x<>Int32FromInt32(24) | w<= uint64(18)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(2))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<>Int32FromInt32(16) | x<>Int32FromInt32(16) | w<= uint64(19)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(3))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w>>Int32FromInt32(8) | x<>Int32FromInt32(8) | w<>Int32FromInt32(8) | x<>Int32FromInt32(8) | w< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Search loop */ + for { + /* If remainder of haystack is shorter than needle, done */ + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(k < l && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if k < l { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xmemmem(tls *TLS, h0 uintptr, k Tsize_t, n0 uintptr, l Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h0=%v k=%v n0=%v l=%v, (%v:)", tls, h0, k, n0, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, n uintptr + _, _ = h, n + h = h0 + n = n0 + /* Return immediately on empty needle */ + if !(l != 0) { + return h + } + /* Return immediately when needle is longer than haystack */ + if k < l { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xmemchr(tls, h0, int32(*(*uint8)(unsafe.Pointer(n))), k) + if !(h != 0) || l == uint64(1) { + return h + } + k -= uint64(int64(h) - int64(h0)) + if k < l { + return uintptr(0) + } + if l == uint64(2) { + return _twobyte_memmem(tls, h, k, n) + } + if l == uint64(3) { + return _threebyte_memmem(tls, h, k, n) + } + if l == uint64(4) { + return _fourbyte_memmem(tls, h, k, n) + } + return _twoway_memmem(tls, h, h+uintptr(k), n, l) +} + +const WS = 0 + +type TWT = uint64 + +func Xmemmove(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v2, v3, v6, v7 uintptr + var v1, v8 Tsize_t + _, _, _, _, _, _, _, _ = d, s, v1, v2, v3, v6, v7, v8 + d = dest + s = src + if d == s { + return d + } + if uint64(s)-uint64(d)-n <= uint64(-Int32FromInt32(2))*n { + return Xmemcpy(tls, d, s, n) + } + if d < s { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d)%Uint64FromInt64(8) != 0 { + v1 = n + n-- + if !(v1 != 0) { + return dest + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + } + for { + if !(n >= Uint64FromInt64(8)) { + break + } + *(*TWT)(unsafe.Pointer(d)) = *(*TWT)(unsafe.Pointer(s)) + goto _4 + _4: + ; + n -= Uint64FromInt64(8) + d += uintptr(Uint64FromInt64(8)) + s += uintptr(Uint64FromInt64(8)) + } + } + for { + if !(n != 0) { + break + } + v6 = d + d++ + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + goto _5 + _5: + ; + n-- + } + } else { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d+uintptr(n))%Uint64FromInt64(8) != 0 { + v8 = n + n-- + if !(v8 != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + for n >= Uint64FromInt64(8) { + n -= Uint64FromInt64(8) + *(*TWT)(unsafe.Pointer(d + uintptr(n))) = *(*TWT)(unsafe.Pointer(s + uintptr(n))) + } + } + for n != 0 { + n-- + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + } + return dest +} + +func Xmempcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcpy(tls, dest, src, n) + uintptr(n) +} + +func X__memrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v1 Tsize_t + _, _ = s, v1 + s = m + c = int32(uint8(c)) + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(n)))) == c { + return s + uintptr(n) + } + } + return uintptr(0) +} + +func Xmemrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, m, c, n) +} + +func Xmemset(tls *TLS, dest uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v c=%v n=%v, (%v:)", tls, dest, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c32 uint32 + var c64 uint64 + var k Tsize_t + var s uintptr + _, _, _, _ = c32, c64, k, s + s = dest + /* Fill head and tail with minimal branching. Each + * conditional ensures that all the subsequently used + * offsets are well-defined and in the dest region. */ + if !(n != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(s)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(1)))) = uint8(c) + if n <= uint64(2) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 1)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + 2)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(2)))) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(3)))) = uint8(c) + if n <= uint64(6) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 3)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(4)))) = uint8(c) + if n <= uint64(8) { + return dest + } + /* Advance pointer to align it at a 4-byte boundary, + * and truncate n to a multiple of 4. The previous code + * already took care of any head/tail that get cut off + * by the alignment. */ + k = -uint64(s) & uint64(3) + s += uintptr(k) + n -= k + n &= uint64(-Int32FromInt32(4)) + c32 = uint32(-Int32FromInt32(1)) / Uint32FromInt32(255) * uint32(uint8(c)) + /* In preparation to copy 32 bytes at a time, aligned on + * an 8-byte bounary, fill head/tail up to 28 bytes each. + * As in the initial byte-based head/tail fill, each + * conditional below ensures that the subsequent offsets + * are valid (e.g. !(n<=24) implies n>=28). */ + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(4))) = c32 + if n <= uint64(8) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(8))) = c32 + if n <= uint64(24) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(16))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(28))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(16))) = c32 + /* Align to a multiple of 8 so we can fill 64 bits at a time, + * and avoid writing the same bytes twice as much as is + * practical without introducing additional branching. */ + k = uint64(24) + uint64(s)&uint64(4) + s += uintptr(k) + n -= k + /* If this loop is reached, 28 tail bytes have already been + * filled, so any remainder when n drops below 32 can be + * safely ignored. */ + c64 = uint64(c32) | uint64(c32)<= uint64(32)) { + break + } + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(0))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(8))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(16))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(24))) = c64 + goto _1 + _1: + ; + n -= uint64(32) + s += uintptr(32) + } + return dest +} + +func Xrindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrrchr(tls, s, c) +} + +const ALIGN2 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws, v4, v5 uintptr + var v2, v7 uint8 + _, _, _, _, _, _ = wd, ws, v2, v4, v5, v7 + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + if !(v2 != 0) { + return d + } + goto _1 + _1: + ; + s++ + d++ + } + wd = d + ws = s + for { + if !!((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _3 + _3: + ; + v4 = wd + wd += 8 + v5 = ws + ws += 8 + *(*uint64)(unsafe.Pointer(v4)) = *(*uint64)(unsafe.Pointer(v5)) + } + d = wd + s = ws + } + for { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + if !(v7 != 0) { + break + } + goto _6 + _6: + ; + s++ + d++ + } + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpcpy(tls, d, s) +} + +const ALIGN3 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws uintptr + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _ = wd, ws, v2, v3, v6, v7 + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if !(n != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + goto tail + } + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && v6 != 0) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + Xmemset(tls, d, 0, n) + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpncpy(tls, d, s, n) +} + +func Xstrcasecmp(tls *TLS, _l uintptr, _r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v, (%v:)", tls, _l, _r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + _, _ = l, r + l = _l + r = _r + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcasecmp(tls, l, r) +} + +func Xstrcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcasecmp_l(tls, l, r, loc) +} + +func Xstrcasestr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, n) + for { + if !(*(*uint8)(unsafe.Pointer(h)) != 0) { + break + } + if !(Xstrncasecmp(tls, h, n, l) != 0) { + return h + } + goto _1 + _1: + ; + h++ + } + return uintptr(0) +} + +func Xstrcat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xstrcpy(tls, dest+uintptr(Xstrlen(tls, dest)), src) + return dest +} + +func Xstrchr(tls *TLS, s uintptr, c int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 uintptr + _, _ = r, v1 + r = X__strchrnul(tls, s, c) + if int32(*(*uint8)(unsafe.Pointer(r))) == int32(uint8(c)) { + v1 = r + } else { + v1 = uintptr(0) + } + return v1 +} + +const ALIGN4 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__strchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var w uintptr + _, _ = k, w + c = int32(uint8(c)) + if !(c != 0) { + return s + uintptr(Xstrlen(tls, s)) + } + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { + return s + } + goto _1 + _1: + ; + s++ + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + } + return s +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strchrnul(tls, s, c) +} + +func Xstrcmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) && *(*uint8)(unsafe.Pointer(l)) != 0) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrcpy(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpcpy(tls, dest, src) + return dest +} + +func Xstrcspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p2 uintptr + var v3 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v3, p2 + a = s + if !(*(*uint8)(unsafe.Pointer(c)) != 0) || !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + return uint64(int64(X__strchrnul(tls, s, int32(*(*uint8)(unsafe.Pointer(c))))) - int64(a)) + } + Xmemset(tls, bp, 0, uint64(32)) + for { + if v3 = *(*uint8)(unsafe.Pointer(c)) != 0; v3 { + p2 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p2)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v3 && *(*Tsize_t)(unsafe.Pointer(p2)) != 0) { + break + } + goto _1 + _1: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && !((*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0)) { + break + } + goto _4 + _4: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrlen(tls, s) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xmemcpy(tls, d, s, l+uint64(1)) +} + +func Xstrerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var msg uintptr + _, _ = l, msg + msg = Xstrerror(tls, err) + l = Xstrlen(tls, msg) + if l >= buflen { + if buflen != 0 { + Xmemcpy(tls, buf, msg, buflen-uint64(1)) + *(*uint8)(unsafe.Pointer(buf + uintptr(buflen-uint64(1)))) = uint8(0) + } + return int32(ERANGE) + } + Xmemcpy(tls, buf, msg, l+uint64(1)) + return 0 +} + +func X__xpg_strerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrerror_r(tls, err, buf, buflen) +} + +func Xstrlcat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrnlen(tls, d, n) + if l == n { + return l + Xstrlen(tls, s) + } + return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) +} + +const ALIGN5 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, wd, ws uintptr + var v1 Tsize_t + var v3, v7 uint8 + var v4, v8 bool + _, _, _, _, _, _, _, _ = d0, wd, ws, v1, v3, v4, v7, v8 + d0 = d + v1 = n + n-- + if !(v1 != 0) { + goto finish + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v4 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v4 { + v3 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v3 + } + if !(v4 && v3 != 0) { + break + } + goto _2 + _2: + ; + n-- + s++ + d++ + } + if n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*Tsize_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _5 + _5: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + } + for { + if v8 = n != 0; v8 { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + } + if !(v8 && v7 != 0) { + break + } + goto _6 + _6: + ; + n-- + s++ + d++ + } + *(*uint8)(unsafe.Pointer(d)) = uint8(0) + goto finish +finish: + ; + return uint64(int64(d)-int64(d0)) + Xstrlen(tls, s) + return r +} + +const ALIGN6 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, w uintptr + _, _ = a, w + a = s + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return uint64(int64(s) - int64(a)) + } + goto _1 + _1: + ; + s++ + } + w = s + for { + if !!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrncasecmp(tls, l, r, n) +} + +func Xstrncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strncasecmp_l(tls, l, r, n, loc) +} + +func Xstrncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xstrlen(tls, d)) + for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d++ + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + } + v3 = d + d++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(0) + return a +} + +func Xstrncmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpncpy(tls, d, s, n) + return d +} + +func Xstrndup(tls *TLS, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrnlen(tls, s, n) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + Xmemcpy(tls, d, s, l) + *(*uint8)(unsafe.Pointer(d + uintptr(l))) = uint8(0) + return d +} + +func Xstrnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var v1 uint64 + _, _ = p, v1 + p = Xmemchr(tls, s, 0, n) + if p != 0 { + v1 = uint64(int64(p) - int64(s)) + } else { + v1 = n + } + return v1 +} + +func Xstrpbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xstrcspn(tls, s, b)) + if *(*uint8)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xstrrchr(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, s, c, Xstrlen(tls, s)+uint64(1)) +} + +func Xstrsep(tls *TLS, str uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v str=%v sep=%v, (%v:)", tls, str, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, s, v1 uintptr + _, _, _ = end, s, v1 + s = *(*uintptr)(unsafe.Pointer(str)) + if !(s != 0) { + return UintptrFromInt32(0) + } + end = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(end)) != 0 { + v1 = end + end++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + end = uintptr(0) + } + *(*uintptr)(unsafe.Pointer(str)) = end + return s +} + +var _strings = [671]uint8{'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', 0, 'H', 'a', 'n', 'g', 'u', 'p', 0, 'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 0, 'Q', 'u', 'i', 't', 0, 'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'i', 'n', 's', 't', 'r', 'u', 'c', 't', 'i', 'o', 'n', 0, 'T', 'r', 'a', 'c', 'e', '/', 'b', 'r', 'e', 'a', 'k', 'p', 'o', 'i', 'n', 't', ' ', 't', 'r', 'a', 'p', 0, 'A', 'b', 'o', 'r', 't', 'e', 'd', 0, 'B', 'u', 's', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'r', 'i', 't', 'h', 'm', 'e', 't', 'i', 'c', ' ', 'e', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n', 0, 'K', 'i', 'l', 'l', 'e', 'd', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '1', 0, 'S', 'e', 'g', 'm', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', ' ', 'f', 'a', 'u', 'l', 't', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '2', 0, 'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e', 0, 'A', 'l', 'a', 'r', 'm', ' ', 'c', 'l', 'o', 'c', 'k', 0, 'T', 'e', 'r', 'm', 'i', 'n', 'a', 't', 'e', 'd', 0, 'S', 't', 'a', 'c', 'k', ' ', 'f', 'a', 'u', 'l', 't', 0, 'C', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 't', 'u', 's', 0, 'C', 'o', 'n', 't', 'i', 'n', 'u', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 's', 'i', 'g', 'n', 'a', 'l', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'i', 'n', 'p', 'u', 't', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'o', 'u', 't', 'p', 'u', 't', ')', 0, 'U', 'r', 'g', 'e', 'n', 't', ' ', 'I', '/', 'O', ' ', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', 0, 'C', 'P', 'U', ' ', 't', 'i', 'm', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'F', 'i', 'l', 'e', ' ', 's', 'i', 'z', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'P', 'r', 'o', 'f', 'i', 'l', 'i', 'n', 'g', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'W', 'i', 'n', 'd', 'o', 'w', ' ', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 0, 'I', '/', 'O', ' ', 'p', 'o', 's', 's', 'i', 'b', 'l', 'e', 0, 'P', 'o', 'w', 'e', 'r', ' ', 'f', 'a', 'i', 'l', 'u', 'r', 'e', 0, 'B', 'a', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l', 0, 'R', 'T', '3', '2', 0, 'R', 'T', '3', '3', 0, 'R', 'T', '3', '4', 0, 'R', 'T', '3', '5', 0, 'R', 'T', '3', '6', 0, 'R', 'T', '3', '7', 0, 'R', 'T', '3', '8', 0, 'R', 'T', '3', '9', 0, 'R', 'T', '4', '0', 0, 'R', 'T', '4', '1', 0, 'R', 'T', '4', '2', 0, 'R', 'T', '4', '3', 0, 'R', 'T', '4', '4', 0, 'R', 'T', '4', '5', 0, 'R', 'T', '4', '6', 0, 'R', 'T', '4', '7', 0, 'R', 'T', '4', '8', 0, 'R', 'T', '4', '9', 0, 'R', 'T', '5', '0', 0, 'R', 'T', '5', '1', 0, 'R', 'T', '5', '2', 0, 'R', 'T', '5', '3', 0, 'R', 'T', '5', '4', 0, 'R', 'T', '5', '5', 0, 'R', 'T', '5', '6', 0, 'R', 'T', '5', '7', 0, 'R', 'T', '5', '8', 0, 'R', 'T', '5', '9', 0, 'R', 'T', '6', '0', 0, 'R', 'T', '6', '1', 0, 'R', 'T', '6', '2', 0, 'R', 'T', '6', '3', 0, 'R', 'T', '6', '4'} + +func Xstrsignal(tls *TLS, signum int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v signum=%v, (%v:)", tls, signum, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v2 int32 + _, _ = s, v2 + s = uintptr(unsafe.Pointer(&_strings)) + signum = signum + if uint32(signum)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + signum = 0 + } + for { + v2 = signum + signum-- + if !(v2 != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + goto _1 + _1: + ; + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xstrspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p3 uintptr + var v4 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v4, p3 + a = s + *(*[4]Tsize_t)(unsafe.Pointer(bp)) = [4]Tsize_t{} + if !(*(*uint8)(unsafe.Pointer(c)) != 0) { + return uint64(0) + } + if !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c)))) { + break + } + goto _1 + _1: + ; + s++ + } + return uint64(int64(s) - int64(a)) + } + for { + if v4 = *(*uint8)(unsafe.Pointer(c)) != 0; v4 { + p3 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p3)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v4 && *(*Tsize_t)(unsafe.Pointer(p3)) != 0) { + break + } + goto _2 + _2: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0) { + break + } + goto _5 + _5: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func _twobyte_strstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64(int64(z)-int64(h)) < l { + /* Fast estimate for MAX(l,63) */ + grow = l | uint64(63) + z2 = Xmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) + } + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xstrstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle */ + if !(*(*uint8)(unsafe.Pointer(n)) != 0) { + return h + } + /* Use faster algorithms for short needles */ + h = Xstrchr(tls, h, int32(*(*uint8)(unsafe.Pointer(n)))) + if !(h != 0) || !(*(*uint8)(unsafe.Pointer(n + 1)) != 0) { + return h + } + if !(*(*uint8)(unsafe.Pointer(h + 1)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 2)) != 0) { + return _twobyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 2)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 3)) != 0) { + return _threebyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 3)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 4)) != 0) { + return _fourbyte_strstr(tls, h, n) + } + return _twoway_strstr(tls, h, n) +} + +func Xstrtok(tls *TLS, s uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4 uintptr + var v2 bool + _, _, _, _ = v1, v2, v3, v4 + if v2 = !(s != 0); v2 { + v1 = _p2 + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + _p2 = v3 + return v3 + } + _p2 = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(_p2)) != 0 { + v4 = _p2 + _p2++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + _p2 = uintptr(0) + } + return s +} + +var _p2 uintptr + +func Xstrtok_r(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xstrverscmp(tls *TLS, l0 uintptr, r0 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l0=%v r0=%v, (%v:)", tls, l0, r0, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, z int32 + var dp, i, j, v2 Tsize_t + var l, r uintptr + _, _, _, _, _, _, _, _ = c, dp, i, j, l, r, z, v2 + l = l0 + r = r0 + z = int32(1) + /* Find maximal matching prefix and track its maximal digit + * suffix and whether those digits are all zeros. */ + v2 = Uint64FromInt32(0) + i = v2 + dp = v2 + for { + if !(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))) { + break + } + c = int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) + if !(c != 0) { + return 0 + } + if !(BoolInt32(uint32(c)-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + dp = i + uint64(1) + z = Int32FromInt32(1) + } else { + if c != int32('0') { + z = 0 + } + } + goto _1 + _1: + ; + i++ + } + if uint32(int32(*(*uint8)(unsafe.Pointer(l + uintptr(dp))))-int32('1')) < uint32(9) && uint32(int32(*(*uint8)(unsafe.Pointer(r + uintptr(dp))))-int32('1')) < uint32(9) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ + j = i + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return int32(1) + } + goto _3 + _3: + ; + j++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-uint32('0') < uint32(10)) != 0 { + return -int32(1) + } + } else { + if z != 0 && dp < i && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-uint32('0') < uint32(10)) != 0 || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-uint32('0') < uint32(10)) != 0) { + /* Otherwise, if common prefix of digit sequence is + * all zeros, digits order less than non-digits. */ + return int32(uint8(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-Int32FromUint8('0'))) - int32(uint8(int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-Int32FromUint8('0'))) + } + } + return int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(r + uintptr(i)))) +} + +func Xswab(tls *TLS, _src uintptr, _dest uintptr, n Tssize_t) { + if __ccgo_strace { + trc("tls=%v _src=%v _dest=%v n=%v, (%v:)", tls, _src, _dest, n, origin(2)) + } + var dest, src uintptr + _, _ = dest, src + src = _src + dest = _dest + for { + if !(n > int64(1)) { + break + } + *(*uint8)(unsafe.Pointer(dest)) = *(*uint8)(unsafe.Pointer(src + 1)) + *(*uint8)(unsafe.Pointer(dest + 1)) = *(*uint8)(unsafe.Pointer(src)) + dest += uintptr(2) + src += uintptr(2) + goto _1 + _1: + ; + n -= int64(2) + } +} + +func Xwcpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcscpy(tls, d, s) + uintptr(Xwcslen(tls, s))*4 +} + +func Xwcpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsncpy(tls, d, s, n) + uintptr(Xwcsnlen(tls, s, n))*4 +} + +func Xwcscasecmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, uint64(-Int32FromInt32(1))) +} + +func Xwcscasecmp_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscasecmp(tls, l, r) +} + +func Xwcscat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xwcscpy(tls, dest+uintptr(Xwcslen(tls, dest))*4, src) + return dest +} + +func Xwcschr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + if !(c != 0) { + return s + uintptr(Xwcslen(tls, s))*4 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + s += 4 + } + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcscmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2 int32 + _ = v2 + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + l += 4 + r += 4 + } + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v2 = -int32(1) + } else { + v2 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + return v2 +} + +func Xwcscpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Twchar_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v2 = s + s += 4 + v1 = *(*Twchar_t)(unsafe.Pointer(v2)) + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = v1 + if !(v1 != 0) { + break + } + } + return a +} + +func Xwcscspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 uint64 + _, _, _, _ = a, v1, v2, v3 + if !(*(*Twchar_t)(unsafe.Pointer(c)) != 0) { + return Xwcslen(tls, s) + } + if !(*(*Twchar_t)(unsafe.Pointer(c + 1*4)) != 0) { + v3 = s + a = v3 + v2 = Xwcschr(tls, v3, *(*Twchar_t)(unsafe.Pointer(c))) + s = v2 + if v2 != 0 { + v1 = uint64((int64(s) - int64(a)) / 4) + } else { + v1 = Xwcslen(tls, a) + } + return v1 + } + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && !(Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0)) { + break + } + goto _4 + _4: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xwcslen(tls, s) + d = Xmalloc(tls, (l+uint64(1))*uint64(4)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xwmemcpy(tls, d, s, l+uint64(1)) +} + +func Xwcslen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsncasecmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v1 Tsize_t + _ = v1 + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0 && n != 0 && (*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) || Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) == Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l += 4 + r += 4 + n-- + } + return int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) - Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r))))) +} + +func Xwcsncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v locale=%v, (%v:)", tls, l, r, n, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, n) +} + +func Xwcsncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xwcslen(tls, d)) * 4 + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = 0 + return a +} + +func Xwcsncmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwcsncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2 uintptr + _, _, _ = a, v1, v2 + a = d + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + Xwmemset(tls, d, 0, n) + return a +} + +func Xwcsnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var z uintptr + _ = z + z = Xwmemchr(tls, s, 0, n) + if z != 0 { + n = uint64((int64(z) - int64(s)) / 4) + } + return n +} + +func Xwcspbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xwcscspn(tls, s, b)) * 4 + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = UintptrFromInt32(0) + } + return v1 +} + +func Xwcsrchr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v2 uintptr + _, _ = p, v2 + p = s + uintptr(Xwcslen(tls, s))*4 + for { + if !(p >= s && *(*Twchar_t)(unsafe.Pointer(p)) != c) { + break + } + goto _1 + _1: + ; + p -= 4 + } + if p >= s { + v2 = p + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcsspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func _twoway_wcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var grow, ip, jp, k, l, mem, mem0, ms, p, p0, v2, v3, v4, v5, v6, v7 Tsize_t + var z, z2 uintptr + var v11, v8 uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = grow, ip, jp, k, l, mem, mem0, ms, p, p0, z, z2, v11, v2, v3, v4, v5, v6, v7, v8 + /* Computing length of needle */ + l = uint64(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(h + uintptr(l)*4)) != 0) { + break + } + goto _1 + _1: + ; + l++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 { + return uintptr(0) + } /* hit the end of h */ + /* Compute maximal suffix */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v2 = Uint64FromInt32(1) + p = v2 + k = v2 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) > *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) < *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xwmemcmp(tls, n, n+uintptr(p)*4, ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64((int64(z)-int64(h))/4) < l { + /* Fast estimate for MIN(l,63) */ + grow = l | uint64(63) + z2 = Xwmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64((int64(z)-int64(h))/4) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) * 4 + } + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k)*4))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 { + h += uintptr(k-ms) * 4 + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k-uint64(1))*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k-uint64(1))*4))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) * 4 + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xwcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle or haystack */ + if !(*(*Twchar_t)(unsafe.Pointer(n)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h)) != 0) { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xwcschr(tls, h, *(*Twchar_t)(unsafe.Pointer(n))) + if !(h != 0) || !(*(*Twchar_t)(unsafe.Pointer(n + 1*4)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h + 1*4)) != 0) { + return uintptr(0) + } + return _twoway_wcsstr(tls, h, n) +} + +func Xwcstok(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xwcsspn(tls, s, sep)) * 4 + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xwcscspn(tls, s, sep))*4 + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5)) += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xwcswcs(tls *TLS, haystack uintptr, needle uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v haystack=%v needle=%v, (%v:)", tls, haystack, needle, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsstr(tls, haystack, needle) +} + +func Xwmemchr(tls *TLS, s uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v n=%v, (%v:)", tls, s, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + n-- + s += 4 + } + if n != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwmemcmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r))) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwmemcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Tsize_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + v3 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = *(*Twchar_t)(unsafe.Pointer(v3)) + } + return a +} + +func Xwmemmove(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, v3, v4 uintptr + var v1, v2 Tsize_t + _, _, _, _, _ = d0, v1, v2, v3, v4 + d0 = d + if d == s { + return d + } + if uint64(d)-uint64(s) < n*uint64(4) { + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + *(*Twchar_t)(unsafe.Pointer(d + uintptr(n)*4)) = *(*Twchar_t)(unsafe.Pointer(s + uintptr(n)*4)) + } + } else { + for { + v2 = n + n-- + if !(v2 != 0) { + break + } + v3 = d + d += 4 + v4 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = *(*Twchar_t)(unsafe.Pointer(v4)) + } + } + return d0 +} + +func Xwmemset(tls *TLS, d uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v c=%v n=%v, (%v:)", tls, d, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 uintptr + var v1 Tsize_t + _, _, _ = ret, v1, v2 + ret = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = c + } + return ret +} + +func Xmkdtemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var retries, v1 int32 + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1769, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if !(Xmkdir(tls, template, uint32(0700)) != 0) { + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1769, uint64(6)) + return uintptr(0) +} + +func Xmkostemp(tls *TLS, template uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v flags=%v, (%v:)", tls, template, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, flags) +} + +func X__mkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var fd, retries, v1, v3 int32 + var l Tsize_t + _, _, _, _, _ = fd, l, retries, v1, v3 + l = Xstrlen(tls, template) + if l < uint64(6) || uint64(len1) > l-uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1769, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + flags -= flags & (Int32FromInt32(03) | Int32FromInt32(O_PATH)) + retries = int32(100) + for { + ___randname(tls, template+uintptr(l)-uintptr(len1)-uintptr(6)) + v3 = Xopen(tls, template, flags|int32(O_RDWR)|int32(O_CREAT)|int32(O_EXCL), VaList(bp+8, int32(0600))) + fd = v3 + if v3 >= 0 { + return fd + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1769, uint64(6)) + return -int32(1) +} + +func Xmkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, flags) +} + +func Xmkstemp(tls *TLS, template uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, 0) +} + +func Xmkstemps(tls *TLS, template uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v, (%v:)", tls, template, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, 0) +} + +func Xmktemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var l Tsize_t + var retries, v1 int32 + var _ /* st at bp+0 */ Tstat + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1769, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + return template + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if Xstat(tls, template, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) { + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + } + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0) { + break + } + } + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EEXIST) + return template +} + +func Xcfgetospeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*Ttermios)(unsafe.Pointer(tio)).Fc_cflag & uint32(CBAUD) +} + +func Xcfgetispeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfgetospeed(tls, tio) +} + +func Xcfmakeraw(tls *TLS, t uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + } + *(*Ttcflag_t)(unsafe.Pointer(t)) &= uint32(^(Int32FromInt32(IGNBRK) | Int32FromInt32(BRKINT) | Int32FromInt32(PARMRK) | Int32FromInt32(ISTRIP) | Int32FromInt32(INLCR) | Int32FromInt32(IGNCR) | Int32FromInt32(ICRNL) | Int32FromInt32(IXON))) + *(*Ttcflag_t)(unsafe.Pointer(t + 4)) &= uint32(^Int32FromInt32(OPOST)) + *(*Ttcflag_t)(unsafe.Pointer(t + 12)) &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ECHONL) | Int32FromInt32(ICANON) | Int32FromInt32(ISIG) | Int32FromInt32(IEXTEN))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) &= uint32(^(Int32FromInt32(CSIZE) | Int32FromInt32(PARENB))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) |= uint32(CS8) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 6)) = uint8(1) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 5)) = uint8(0) +} + +func Xcfsetospeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + if speed&uint32(^Int32FromInt32(CBAUD)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) &= uint32(^Int32FromInt32(CBAUD)) + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) |= speed + return 0 +} + +func Xcfsetispeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if speed != 0 { + v1 = Xcfsetospeed(tls, tio, speed) + } else { + v1 = 0 + } + return v1 +} + +func Xcfsetspeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfsetospeed(tls, tio, speed) +} + +func Xtcdrain(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TCSBRK)), int64(Int32FromInt32(1)), 0, 0, 0)))) +} + +func Xtcflow(tls *TLS, fd int32, action int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v action=%v, (%v:)", tls, fd, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCXONC), VaList(bp+8, action)) +} + +func Xtcflush(tls *TLS, fd int32, queue int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v queue=%v, (%v:)", tls, fd, queue, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCFLSH), VaList(bp+8, queue)) +} + +func Xtcgetattr(tls *TLS, fd int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tio=%v, (%v:)", tls, fd, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if Xioctl(tls, fd, int32(TCGETS), VaList(bp+8, tio)) != 0 { + return -int32(1) + } + return 0 +} + +func Xtcgetsid(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* sid at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGSID), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcgetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(wsz))))) +} + +func Xtcsendbreak(tls *TLS, fd int32, dur int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v dur=%v, (%v:)", tls, fd, dur, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + /* nonzero duration is implementation-defined, so ignore it */ + return Xioctl(tls, fd, int32(TCSBRK), VaList(bp+8, 0)) +} + +func Xtcsetattr(tls *TLS, fd int32, act int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v act=%v tio=%v, (%v:)", tls, fd, act, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if act < 0 || act > int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xioctl(tls, fd, int32(TCSETS)+act, VaList(bp+8, tio)) +} + +func Xtcsetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCSWINSZ)), int64(wsz))))) +} + +func X__map_file(tls *TLS, pathname uintptr, size uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v pathname=%v size=%v, (%v:)", tls, pathname, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var fd int32 + var map1, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _, _ = fd, map1, v1 + map1 = uintptr(-Int32FromInt32(1)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_openat), int64(-Int32FromInt32(100)), int64(pathname), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)|Int32FromInt32(O_LARGEFILE)))))) + if fd < 0 { + return uintptr(0) + } + if !(X__fstat(tls, fd, bp) != 0) { + map1 = X__mmap(tls, uintptr(0), uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size), int32(PROT_READ), int32(MAP_SHARED), fd, 0) + *(*Tsize_t)(unsafe.Pointer(size)) = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + if map1 == uintptr(-Int32FromInt32(1)) { + v1 = uintptr(0) + } else { + v1 = map1 + } + return v1 +} + +func X__month_to_secs(tls *TLS, month int32, is_leap int32) (r int32) { + if __ccgo_strace { + trc("tls=%v month=%v is_leap=%v, (%v:)", tls, month, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t int32 + _ = t + t = _secs_through_month[month] + if is_leap != 0 && month >= int32(2) { + t += int32(86400) + } + return t +} + +var _secs_through_month = [12]int32{ + 1: Int32FromInt32(31) * Int32FromInt32(86400), + 2: Int32FromInt32(59) * Int32FromInt32(86400), + 3: Int32FromInt32(90) * Int32FromInt32(86400), + 4: Int32FromInt32(120) * Int32FromInt32(86400), + 5: Int32FromInt32(151) * Int32FromInt32(86400), + 6: Int32FromInt32(181) * Int32FromInt32(86400), + 7: Int32FromInt32(212) * Int32FromInt32(86400), + 8: Int32FromInt32(243) * Int32FromInt32(86400), + 9: Int32FromInt32(273) * Int32FromInt32(86400), + 10: Int32FromInt32(304) * Int32FromInt32(86400), + 11: Int32FromInt32(334) * Int32FromInt32(86400), +} + +const DAYS_PER_100Y = 36524 +const DAYS_PER_400Y = 146097 +const DAYS_PER_4Y = 1461 +const LEAPOCH = 951868800 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +/* 2000-03-01 (mod 400 year, immediately after feb29 */ + +func X__secs_to_tm(tls *TLS, t int64, tm uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c_cycles, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, wday, yday int32 + var days, secs, years int64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = c_cycles, days, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, secs, wday, yday, years + /* Reject time_t values whose year would overflow int */ + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || t > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + return -int32(1) + } + secs = t - (Int64FromInt64(946684800) + int64(Int32FromInt32(86400)*(Int32FromInt32(31)+Int32FromInt32(29)))) + days = secs / int64(86400) + remsecs = int32(secs % int64(86400)) + if remsecs < 0 { + remsecs += int32(86400) + days-- + } + wday = int32((int64(3) + days) % int64(7)) + if wday < 0 { + wday += int32(7) + } + qc_cycles = int32(days / int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + remdays = int32(days % int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + if remdays < 0 { + remdays += Int32FromInt32(365)*Int32FromInt32(400) + Int32FromInt32(97) + qc_cycles-- + } + c_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + if c_cycles == int32(4) { + c_cycles-- + } + remdays -= c_cycles * (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + q_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + if q_cycles == int32(25) { + q_cycles-- + } + remdays -= q_cycles * (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + remyears = remdays / int32(365) + if remyears == int32(4) { + remyears-- + } + remdays -= remyears * int32(365) + leap = BoolInt32(!(remyears != 0) && (q_cycles != 0 || !(c_cycles != 0))) + yday = remdays + int32(31) + int32(28) + leap + if yday >= int32(365)+leap { + yday -= int32(365) + leap + } + years = int64(remyears+int32(4)*q_cycles+int32(100)*c_cycles) + int64(400)*int64(qc_cycles) + months = 0 + for { + if !(int32(_days_in_month[months]) <= remdays) { + break + } + remdays -= int32(_days_in_month[months]) + goto _1 + _1: + ; + months++ + } + if months >= int32(10) { + months -= int32(12) + years++ + } + if years+int64(100) > int64(INT_MAX) || years+int64(100) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + return -int32(1) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = int32(years + int64(100)) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon = months + int32(2) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mday = remdays + int32(1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday = wday + (*Ttm)(unsafe.Pointer(tm)).Ftm_yday = yday + (*Ttm)(unsafe.Pointer(tm)).Ftm_hour = remsecs / int32(3600) + (*Ttm)(unsafe.Pointer(tm)).Ftm_min = remsecs / int32(60) % int32(60) + (*Ttm)(unsafe.Pointer(tm)).Ftm_sec = remsecs % int32(60) + return 0 +} + +var _days_in_month = [12]uint8{ + 0: uint8(31), + 1: uint8(30), + 2: uint8(31), + 3: uint8(30), + 4: uint8(31), + 5: uint8(31), + 6: uint8(30), + 7: uint8(31), + 8: uint8(30), + 9: uint8(31), + 10: uint8(31), + 11: uint8(29), +} + +func X__tm_to_secs(tls *TLS, tm uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, month int32 + var t, year int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _ = adj, month, t, year + year = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + month = (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + if month >= int32(12) || month < 0 { + adj = month / int32(12) + month %= int32(12) + if month < 0 { + adj-- + month += int32(12) + } + year += int64(adj) + } + t = X__year_to_secs(tls, year, bp) + t += int64(X__month_to_secs(tls, month, *(*int32)(unsafe.Pointer(bp)))) + t += int64(86400) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday-Int32FromInt32(1)) + t += int64(3600) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + t += int64(60) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + t += int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + return t +} + +var _std_name [7]uint8 +var _dst_name [7]uint8 + +var _dst_off int32 +var _r0 [5]int32 +var _r12 [5]int32 + +var _zi uintptr +var _trans uintptr +var _index uintptr +var _types uintptr +var _abbrevs uintptr +var _abbrevs_end uintptr +var _map_size Tsize_t + +var _old_tz_buf [32]uint8 +var _old_tz = uintptr(unsafe.Pointer(&_old_tz_buf)) +var _old_tz_size = uint64(32) + +var _lock4 [1]int32 + +func _getint2(tls *TLS, p uintptr) (r int32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) + uint32(10)*x + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(p))++ + } + return int32(x) +} + +func _getoff(tls *TLS, p uintptr) (r int32) { + var neg, off, v1 int32 + _, _, _ = neg, off, v1 + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('-') { + *(*uintptr)(unsafe.Pointer(p))++ + neg = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('+') { + *(*uintptr)(unsafe.Pointer(p))++ + } + } + off = int32(3600) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += int32(60) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += _getint2(tls, p) + } + } + if neg != 0 { + v1 = -off + } else { + v1 = off + } + return v1 +} + +func _getrule(tls *TLS, p uintptr, rule uintptr) { + var r, v1 int32 + _, _ = r, v1 + v1 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) + *(*int32)(unsafe.Pointer(rule)) = v1 + r = v1 + if r != int32('M') { + if r == int32('J') { + *(*uintptr)(unsafe.Pointer(p))++ + } else { + *(*int32)(unsafe.Pointer(rule)) = 0 + } + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + } else { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 2*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 3*4)) = _getint2(tls, p) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('/') { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 4*4)) = _getoff(tls, p) + } else { + *(*int32)(unsafe.Pointer(rule + 4*4)) = int32(7200) + } +} + +func _getname(tls *TLS, d uintptr, p uintptr) { + var i, v3 int32 + _, _ = i, v3 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('<') { + *(*uintptr)(unsafe.Pointer(p))++ + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i)))) != int32('>')) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _1 + _1: + ; + i++ + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 { + *(*uintptr)(unsafe.Pointer(p))++ + } + } else { + i = 0 + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))))|int32(32)-int32('a')) < uint32(26)) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _2 + _2: + ; + i++ + } + } + *(*uintptr)(unsafe.Pointer(p)) += uintptr(i) + if i < int32(TZNAME_MAX) { + v3 = i + } else { + v3 = int32(TZNAME_MAX) + } + *(*uint8)(unsafe.Pointer(d + uintptr(v3))) = uint8(0) +} + +func _zi_read32(tls *TLS, z uintptr) (r Tuint32_t) { + return uint32(*(*uint8)(unsafe.Pointer(z)))< uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(1)) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + i = Uint64FromInt32(3) + } + if i >= _old_tz_size { + _old_tz_size *= uint64(2) + if i >= _old_tz_size { + _old_tz_size = i + uint64(1) + } + if _old_tz_size > uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(2)) { + _old_tz_size = uint64(Int32FromInt32(PATH_MAX) + Int32FromInt32(2)) + } + _old_tz = Xmalloc(tls, _old_tz_size) + } + if _old_tz != 0 { + Xmemcpy(tls, _old_tz, *(*uintptr)(unsafe.Pointer(bp + 288)), i+uint64(1)) + } + posix_form = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) != int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 296)) = *(*uintptr)(unsafe.Pointer(bp + 288)) + _getname(tls, bp+308, bp+296) + if *(*uintptr)(unsafe.Pointer(bp + 296)) != *(*uintptr)(unsafe.Pointer(bp + 288)) && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('-') || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)))))-uint32('0') < uint32(10)) != 0 || !(Xstrcmp(tls, bp+308, __ccgo_ts+1794) != 0) || !(Xstrcmp(tls, bp+308, __ccgo_ts+1798) != 0)) { + posix_form = int32(1) + } + } + /* Non-suid can use an absolute tzfile pathname or a relative + * pathame beginning with "."; in secure mode, only the + * standard path will be searched. */ + if !(posix_form != 0) { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 288))++ + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('/') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('.') { + if !(X__libc.Fsecure != 0) || !(Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), __ccgo_ts+1779) != 0) { + map1 = X__map_file(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), uintptr(unsafe.Pointer(&_map_size))) + } + } else { + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) + if l <= uint64(NAME_MAX) && !(Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), int32('.')) != 0) { + Xmemcpy(tls, pathname, *(*uintptr)(unsafe.Pointer(bp + 288)), l+uint64(1)) + *(*uint8)(unsafe.Pointer(pathname + uintptr(l))) = uint8(0) + try = uintptr(unsafe.Pointer(&_search)) + for { + if !(!(map1 != 0) && *(*uint8)(unsafe.Pointer(try)) != 0) { + break + } + l = Xstrlen(tls, try) + Xmemcpy(tls, pathname-uintptr(l), try, l) + map1 = X__map_file(tls, pathname-uintptr(l), uintptr(unsafe.Pointer(&_map_size))) + goto _3 + _3: + ; + try += uintptr(l + uint64(1)) + } + } + } + if !(map1 != 0) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + } + if map1 != 0 && (_map_size < uint64(44) || Xmemcmp(tls, map1, __ccgo_ts+1802, uint64(4)) != 0) { + X__munmap(tls, map1, _map_size) + map1 = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + _zi = map1 + if map1 != 0 { + scale = int32(2) + if int32(*(*uint8)(unsafe.Pointer(map1 + 4))) != int32('1') { + *(*[6]uint8)(unsafe.Pointer(bp)) = [6]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(8), + 3: uint8(5), + 4: uint8(6), + 5: uint8(1), + } + skip = _zi_dotprod(tls, _zi+uintptr(20), bp, uint64(6)) + _trans = _zi + uintptr(skip) + uintptr(44) + uintptr(44) + scale++ + } else { + _trans = _zi + uintptr(44) + } + _index = _trans + uintptr(_zi_read32(tls, _trans-uintptr(12))<> scale) + if !(n != 0) { + if alt != 0 { + *(*Tsize_t)(unsafe.Pointer(alt)) = uint64(0) + } + return uint64(0) + } + /* Binary search for 'most-recent rule before t'. */ + for n > uint64(1) { + m = a + n/uint64(2) + x = uint64(_zi_read32(tls, _trans+uintptr(m<> scale) + if a == n-uint64(1) { + return uint64(-Int32FromInt32(1)) + } + if a == uint64(0) { + x = uint64(_zi_read32(tls, _trans)) + if scale == int32(3) { + x = x<>(m-int32(1))&int32(1) + } + return r +} + +/* Convert a POSIX DST rule plus year to seconds since epoch. */ + +func _rule_to_secs(tls *TLS, rule uintptr, year int32) (r int64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var d, days, m, n, wday, x int32 + var t int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _, _, _, _ = d, days, m, n, t, wday, x + t = X__year_to_secs(tls, int64(year), bp) + if *(*int32)(unsafe.Pointer(rule)) != int32('M') { + x = *(*int32)(unsafe.Pointer(rule + 1*4)) + if *(*int32)(unsafe.Pointer(rule)) == int32('J') && (x < int32(60) || !(*(*int32)(unsafe.Pointer(bp)) != 0)) { + x-- + } + t += int64(int32(86400) * x) + } else { + m = *(*int32)(unsafe.Pointer(rule + 1*4)) + n = *(*int32)(unsafe.Pointer(rule + 2*4)) + d = *(*int32)(unsafe.Pointer(rule + 3*4)) + t += int64(X__month_to_secs(tls, m-int32(1), *(*int32)(unsafe.Pointer(bp)))) + wday = int32((t+int64(Int32FromInt32(4)*Int32FromInt32(86400)))%int64(Int32FromInt32(7)*Int32FromInt32(86400))) / int32(86400) + days = d - wday + if days < 0 { + days += int32(7) + } + if n == int32(5) && days+int32(28) >= _days_in_month1(tls, m, *(*int32)(unsafe.Pointer(bp))) { + n = int32(4) + } + t += int64(int32(86400) * (days + int32(7)*(n-int32(1)))) + } + t += int64(*(*int32)(unsafe.Pointer(rule + 4*4))) + return t +} + +/* Determine the time zone in effect for a given time in seconds since the + * epoch. It can be given in local or universal time. The results will + * indicate whether DST is in effect at the queried time, and will give both + * the GMT offset for the active zone/DST rule and the opposite DST. This + * enables a caller to efficiently adjust for the case where an explicit + * DST specification mismatches what would be in effect at the time. */ + +func X__secs_to_zone(tls *TLS, t int64, local int32, isdst uintptr, offset uintptr, oppoff uintptr, zonename uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v local=%v isdst=%v offset=%v oppoff=%v zonename=%v, (%v:)", tls, t, local, isdst, offset, oppoff, zonename, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tsize_t + var t0, t1, y int64 + var _ /* alt at bp+0 */ Tsize_t + _, _, _, _ = i, t0, t1, y + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if _zi != 0 { + i = _scan_trans(tls, t, local, bp) + if i != uint64(-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(isdst)) = int32(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(4))))) + *(*int64)(unsafe.Pointer(offset)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)*i)))) + *(*uintptr)(unsafe.Pointer(zonename)) = _abbrevs + uintptr(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(5))))) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)**(*Tsize_t)(unsafe.Pointer(bp)))))) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + } + } + if !(Xdaylight != 0) { + goto std + } + /* FIXME: may be broken if DST changes right at year boundary? + * Also, this could be more efficient.*/ + y = t/int64(31556952) + int64(70) + for X__year_to_secs(tls, y, uintptr(0)) > t { + y-- + } + for X__year_to_secs(tls, y+int64(1), uintptr(0)) < t { + y++ + } + t0 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r0)), int32(y)) + t1 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r12)), int32(y)) + if !(local != 0) { + t0 += Xtimezone + t1 += int64(_dst_off) + } + if t0 < t1 { + if t >= t0 && t < t1 { + goto dst + } + goto std + } else { + if t >= t1 && t < t0 { + goto std + } + goto dst + } + goto std +std: + ; + *(*int32)(unsafe.Pointer(isdst)) = 0 + *(*int64)(unsafe.Pointer(offset)) = -Xtimezone + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(-_dst_off) + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[0] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + goto dst +dst: + ; + *(*int32)(unsafe.Pointer(isdst)) = int32(1) + *(*int64)(unsafe.Pointer(offset)) = int64(-_dst_off) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = -Xtimezone + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[int32(1)] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func ___tzset(tls *TLS) { + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func X__tm_to_tzname(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = (*Ttm)(unsafe.Pointer(tm)).F__tm_zone + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if p != uintptr(unsafe.Pointer(&X__utc)) && p != Xtzname[0] && p != Xtzname[int32(1)] && (!(_zi != 0) || uint64(p)-uint64(_abbrevs) >= uint64(int64(_abbrevs_end)-int64(_abbrevs))) { + p = __ccgo_ts + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return p +} + +func X__year_to_secs(tls *TLS, year int64, is_leap uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v year=%v is_leap=%v, (%v:)", tls, year, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var centuries, cycles, leaps, leaps1, rem, y int32 + var _ /* dummy at bp+0 */ int32 + _, _, _, _, _, _ = centuries, cycles, leaps, leaps1, rem, y + if uint64(year)-uint64(2) <= uint64(136) { + y = int32(year) + leaps = (y - int32(68)) >> int32(2) + if !((y-Int32FromInt32(68))&Int32FromInt32(3) != 0) { + leaps-- + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + } + } else { + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + } + } + return int64(int32(31536000)*(y-int32(70)) + int32(86400)*leaps) + } + if !(is_leap != 0) { + is_leap = bp + } + cycles = int32((year - int64(100)) / int64(400)) + rem = int32((year - int64(100)) % int64(400)) + if rem < 0 { + cycles-- + rem += int32(400) + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + centuries = 0 + leaps1 = 0 + } else { + if rem >= int32(200) { + if rem >= int32(300) { + centuries = int32(3) + rem -= int32(300) + } else { + centuries = int32(2) + rem -= int32(200) + } + } else { + if rem >= int32(100) { + centuries = int32(1) + rem -= int32(100) + } else { + centuries = 0 + } + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + leaps1 = 0 + } else { + leaps1 = int32(uint32(rem) / uint32(4)) + rem = int32(uint32(rem) % Uint32FromUint32(4)) + *(*int32)(unsafe.Pointer(is_leap)) = BoolInt32(!(rem != 0)) + } + } + leaps1 += int32(97)*cycles + int32(24)*centuries - *(*int32)(unsafe.Pointer(is_leap)) + return (year-int64(100))*int64(31536000) + int64(leaps1)*int64(86400) + int64(946684800) + int64(86400) +} + +func Xasctime(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, uintptr(unsafe.Pointer(&_buf9))) +} + +var _buf9 [26]uint8 + +func X__asctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xsnprintf(tls, buf, uint64(26), __ccgo_ts+1807, VaList(bp+8, X__nl_langinfo_l(tls, int32(ABDAY_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_wday, uintptr(unsafe.Pointer(&X__c_locale))), X__nl_langinfo_l(tls, int32(ABMON_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_mon, uintptr(unsafe.Pointer(&X__c_locale))), (*Ttm)(unsafe.Pointer(tm)).Ftm_mday, (*Ttm)(unsafe.Pointer(tm)).Ftm_hour, (*Ttm)(unsafe.Pointer(tm)).Ftm_min, (*Ttm)(unsafe.Pointer(tm)).Ftm_sec, int32(1900)+(*Ttm)(unsafe.Pointer(tm)).Ftm_year)) >= int32(26) { + /* ISO C requires us to use the above format string, + * even if it will not fit in the buffer. Thus asctime_r + * is _supposed_ to crash if the fields in tm are too large. + * We follow this behavior and crash "gracefully" to warn + * application developers that they may not be so lucky + * on other implementations (e.g. stack smashing..). + */ + *(*uint8)(unsafe.Pointer(UintptrFromInt32(0))) = uint8(0) + } + return buf +} + +func Xasctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, buf) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xclock(tls *TLS) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if X__clock_gettime(tls, int32(CLOCK_PROCESS_CPUTIME_ID), bp) != 0 { + return int64(-int32(1)) + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(1000000) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) > int64(0x7fffffffffffffff)-int64(1000000)*(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec { + return int64(-int32(1)) + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec*int64(1000000) + (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) +} + +func Xclock_getcpuclockid(tls *TLS, pid Tpid_t, clk uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v clk=%v, (%v:)", tls, pid, clk, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id Tclockid_t + var ret int32 + var _ /* ts at bp+0 */ Ttimespec + _, _ = id, ret + id = int32(uint32(-pid-Int32FromInt32(1))*uint32(8) + uint32(2)) + ret = int32(X__syscall2(tls, int64(SYS_clock_getres), int64(id), int64(bp))) + if ret == -int32(EINVAL) { + ret = -int32(ESRCH) + } + if ret != 0 { + return -ret + } + *(*Tclockid_t)(unsafe.Pointer(clk)) = id + return 0 +} + +func Xclock_getres(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* If reaching this point, it's a 64-bit arch or time64-only + * 32-bit arch and we can get result directly into timespec. */ + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_getres), int64(clk), int64(ts))))) +} + +func X__clock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_clock_gettime), int64(clk), int64(ts))) + if r == -int32(ENOSYS) { + if clk == CLOCK_REALTIME { + X__syscall2(tls, int64(SYS_gettimeofday), int64(ts), int64(Int32FromInt32(0))) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = int64(int32((*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec) * int32(1000)) + return 0 + } + r = -int32(EINVAL) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xclock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_gettime(tls, clk, ts) +} + +func X__clock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + if clk == int32(CLOCK_THREAD_CPUTIME_ID) { + return int32(EINVAL) + } + if clk == CLOCK_REALTIME && !(flags != 0) { + return int32(-___syscall_cp(tls, int64(SYS_nanosleep), int64(req), int64(rem), 0, 0, 0, 0)) + } + return int32(-___syscall_cp(tls, int64(SYS_clock_nanosleep), int64(clk), int64(flags), int64(req), int64(rem), 0, 0)) +} + +func Xclock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_nanosleep(tls, clk, flags, req, rem) +} + +func Xclock_settime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_settime), int64(clk), int64(ts))))) +} + +func Xctime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var tm uintptr + _ = tm + tm = Xlocaltime(tls, t) + if !(tm != 0) { + return uintptr(0) + } + return Xasctime(tls, tm) +} + +func Xctime_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var tm_p, v1 uintptr + var _ /* tm at bp+0 */ Ttm + _, _ = tm_p, v1 + tm_p = Xlocaltime_r(tls, t, bp) + if tm_p != 0 { + v1 = Xasctime_r(tls, tm_p, buf) + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xdifftime(tls *TLS, t1 Ttime_t, t0 Ttime_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t0=%v, (%v:)", tls, t1, t0, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(t1 - t0) +} + +type Ttimeb = struct { + Ftime Ttime_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func Xftime(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int16 + var _ /* ts at bp+0 */ Ttimespec + _ = v1 + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeb)(unsafe.Pointer(tp)).Ftime = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeb)(unsafe.Pointer(tp)).Fmillitm = uint16((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int64(1000000)) + v1 = Int16FromInt32(0) + (*Ttimeb)(unsafe.Pointer(tp)).Fdstflag = v1 + (*Ttimeb)(unsafe.Pointer(tp)).Ftimezone = v1 + return 0 +} + +func Xgetdate(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var datemsk, f, p, ret uintptr + var _ /* cs at bp+100 */ int32 + var _ /* fmt at bp+0 */ [100]uint8 + _, _, _, _ = datemsk, f, p, ret + ret = uintptr(0) + datemsk = Xgetenv(tls, __ccgo_ts+1839) + f = uintptr(0) + _pthread_setcancelstate(tls, PTHREAD_CANCEL_DEFERRED, bp+100) + if !(datemsk != 0) { + Xgetdate_err = int32(1) + goto out + } + f = Xfopen(tls, datemsk, __ccgo_ts+315) + if !(f != 0) { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOMEM) { + Xgetdate_err = int32(6) + } else { + Xgetdate_err = int32(2) + } + goto out + } + for Xfgets(tls, bp, int32(100), f) != 0 { + p = Xstrptime(tls, s, bp, uintptr(unsafe.Pointer(&_tmbuf))) + if p != 0 && !(*(*uint8)(unsafe.Pointer(p)) != 0) { + ret = uintptr(unsafe.Pointer(&_tmbuf)) + goto out + } + } + if Xferror(tls, f) != 0 { + Xgetdate_err = int32(5) + } else { + Xgetdate_err = int32(7) + } + goto out +out: + ; + if f != 0 { + Xfclose(tls, f) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 100)), uintptr(0)) + return ret +} + +var _tmbuf Ttm + +func Xgettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if !(tv != 0) { + return 0 + } + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64(int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec) / int32(1000)) + return 0 +} + +func Xgmtime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, uintptr(unsafe.Pointer(&_tm))) +} + +var _tm Ttm + +func X__gmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t)), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_zone = uintptr(unsafe.Pointer(&X__utc)) + return tm +} + +func Xgmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, tm) +} + +func Xlocaltime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, uintptr(unsafe.Pointer(&_tm1))) +} + +var _tm1 Ttm + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__localtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Reject time_t values whose year would overflow int because + * __secs_to_zone cannot safely handle them. */ + if *(*Ttime_t)(unsafe.Pointer(t)) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || *(*Ttime_t)(unsafe.Pointer(t)) > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + X__secs_to_zone(tls, *(*Ttime_t)(unsafe.Pointer(t)), 0, tm+32, tm+40, uintptr(0), tm+48) + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t))+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff, tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + return tm +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xlocaltime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, tm) +} + +func Xmktime(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm + var _ /* opp at bp+56 */ int64 + _ = t + t = X__tm_to_secs(tls, tm) + X__secs_to_zone(tls, t, int32(1), bp+32, bp+40, bp+56, bp+48) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst >= 0 && (*(*Ttm)(unsafe.Pointer(bp))).Ftm_isdst != (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst { + t -= *(*int64)(unsafe.Pointer(bp + 56)) - (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + } + t -= (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + if t != t { + goto error + } + X__secs_to_zone(tls, t, 0, bp+32, bp+40, bp+56, bp+48) + if X__secs_to_tm(tls, t+(*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff, bp) < 0 { + goto error + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return t + goto error +error: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) +} + +func Xnanosleep(tls *TLS, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v rem=%v, (%v:)", tls, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-X__clock_nanosleep(tls, CLOCK_REALTIME, 0, req, rem)))) +} + +func _is_leap(tls *TLS, y int32) (r int32) { + /* Avoid overflow */ + if y > Int32FromInt32(INT_MAX)-Int32FromInt32(1900) { + y -= int32(2000) + } + y += int32(1900) + return BoolInt32(!(y%Int32FromInt32(4) != 0) && (y%int32(100) != 0 || !(y%Int32FromInt32(400) != 0))) +} + +func _week_num(tls *TLS, tm uintptr) (r int32) { + var dec31, jan1, val int32 + _, _, _ = dec31, jan1, val + val = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + /* If 1 Jan is just 1-3 days past Monday, + * the previous week is also in this year. */ + if (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(371)-uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)-uint32(2))%uint32(7) <= uint32(2) { + val++ + } + if !(val != 0) { + val = int32(52) + /* If 31 December of prev year a Thursday, + * or Friday of a leap year, then the + * prev year has 53 weeks. */ + dec31 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) - uint32(1)) % uint32(7)) + if dec31 == int32(4) || dec31 == int32(5) && _is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year%int32(400)-int32(1)) != 0 { + val++ + } + } else { + if val == int32(53) { + /* If 1 January is not a Thursday, and not + * a Wednesday of a leap year, then this + * year has only 52 weeks. */ + jan1 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(371) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)) % uint32(7)) + if jan1 != int32(4) && (jan1 != int32(3) || !(_is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year) != 0)) { + val = int32(1) + } + } + } + return val +} + +func X__strftime_fmt_1(tls *TLS, s uintptr, l uintptr, f int32, tm uintptr, loc Tlocale_t, pad int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v tm=%v loc=%v pad=%v, (%v:)", tls, s, l, f, tm, loc, pad, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, fmt, v4, v5 uintptr + var def_pad, width, v1, v2, v6, v7 int32 + var item Tnl_item + var val int64 + _, _, _, _, _, _, _, _, _, _, _, _ = d, def_pad, fmt, item, val, width, v1, v2, v4, v5, v6, v7 + fmt = __ccgo_ts + 1701 + width = int32(2) + def_pad = int32('0') + switch f { + case int32('a'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(ABDAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('A'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(DAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('h'): + fallthrough + case int32('b'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(ABMON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('B'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(MON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('c'): + item = int32(D_T_FMT) + goto nl_strftime + case int32('C'): + val = (int64(1900) + int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year)) / int64(100) + goto number + case int32('e'): + def_pad = int32('_') + fallthrough + case int32('d'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday) + goto number + case int32('D'): + fmt = __ccgo_ts + 1847 + goto recu_strftime + case int32('F'): + fmt = __ccgo_ts + 1856 + goto recu_strftime + case int32('g'): + fallthrough + case int32('G'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday < int32(3) && _week_num(tls, tm) != int32(1) { + val-- + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday > int32(360) && _week_num(tls, tm) == int32(1) { + val++ + } + } + if f == int32('g') { + val %= int64(100) + } else { + width = int32(4) + } + goto number + case int32('H'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + goto number + case int32('l'): + def_pad = int32('_') + fallthrough + case int32('I'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + if !(val != 0) { + val = int64(12) + } else { + if val > int64(12) { + val -= int64(12) + } + } + goto number + case int32('j'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_yday + int32(1)) + width = int32(3) + goto number + case int32('k'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + def_pad = int32('_') + goto number + case int32('m'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mon + int32(1)) + goto number + case int32('M'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + goto number + case int32('n'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 301 + case int32('p'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v1 = int32(PM_STR) + } else { + v1 = int32(AM_STR) + } + item = v1 + goto nl_strcat + case int32('P'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v2 = int32(PM_STR) + } else { + v2 = int32(AM_STR) + } + item = v2 + fmt = X__nl_langinfo_l(tls, item, loc) + d = s + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + for { + if !(*(*uint8)(unsafe.Pointer(fmt)) != 0) { + break + } + v4 = d + d++ + v5 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(v5))))) + goto _3 + _3: + ; + *(*Tsize_t)(unsafe.Pointer(l))++ + } + return s + case int32('r'): + item = int32(T_FMT_AMPM) + goto nl_strftime + case int32('R'): + fmt = __ccgo_ts + 1865 + goto recu_strftime + case int32('s'): + val = X__tm_to_secs(tls, tm) - (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff + width = int32(1) + goto number + case int32('S'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + goto number + case int32('t'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 1439 + case int32('T'): + fmt = __ccgo_ts + 1871 + goto recu_strftime + case int32('u'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_wday != 0 { + v6 = (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + } else { + v6 = int32(7) + } + val = int64(v6) + width = int32(1) + goto number + case int32('U'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)) / uint32(7)) + goto number + case int32('W'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + goto number + case int32('V'): + val = int64(_week_num(tls, tm)) + goto number + case int32('w'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + width = int32(1) + goto number + case int32('x'): + item = int32(D_FMT) + goto nl_strftime + case int32('X'): + item = int32(T_FMT) + goto nl_strftime + case int32('y'): + val = (int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900)) % int64(100) + if val < 0 { + val = -val + } + goto number + case int32('Y'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if val >= int64(10000) { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1880, VaList(bp+8, val))) + return s + } + width = int32(4) + goto number + case int32('z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1886, VaList(bp+8, (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff/int64(3600)*int64(100)+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff%int64(3600)/int64(60)))) + return s + case int32('Z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + fmt = X__tm_to_tzname(tls, tm) + goto string + case int32('%'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 446 + default: + return uintptr(0) + } + goto number +number: + ; + if pad != 0 { + v7 = pad + } else { + v7 = def_pad + } + switch v7 { + case int32('-'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1893, VaList(bp+8, val))) + case int32('_'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1898, VaList(bp+8, width, val))) + case int32('0'): + fallthrough + default: + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1904, VaList(bp+8, width, val))) + break + } + return s + goto nl_strcat +nl_strcat: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto string +string: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = Xstrlen(tls, fmt) + return fmt + goto nl_strftime +nl_strftime: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto recu_strftime +recu_strftime: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = X__strftime_l(tls, s, uint64(100), fmt, tm, loc) + if !(*(*Tsize_t)(unsafe.Pointer(l)) != 0) { + return uintptr(0) + } + return s +} + +func X__strftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var d, l, v10, v12, v2, v7 Tsize_t + var pad, plus, v4, v8 int32 + var t, v3 uintptr + var width uint64 + var v9 bool + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+112 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, l, pad, plus, t, width, v10, v12, v2, v3, v4, v7, v8, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*uint8)(unsafe.Pointer(f)) != 0) { + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + return l + } + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v2 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v2))) = *(*uint8)(unsafe.Pointer(f)) + goto _1 + } + f++ + pad = 0 + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('_') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('0') { + v3 = f + f++ + pad = int32(*(*uint8)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(int32(*(*uint8)(unsafe.Pointer(f))) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + width = Xstrtoul(tls, f, bp+112, int32(10)) + } else { + width = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 112)) = f + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('F') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('G') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 112)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 112)) + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('E') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('O') { + f++ + } + t = X__strftime_fmt_1(tls, bp+8, bp, int32(*(*uint8)(unsafe.Pointer(f))), tm, loc, pad) + if !(t != 0) { + break + } + if width != 0 { + /* Trim off any sign and leading zeros, then + * count remaining digits to determine behavior + * for the + flag. */ + if int32(*(*uint8)(unsafe.Pointer(t))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(t))) == int32('-') { + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(t))) == int32('0') && uint32(int32(*(*uint8)(unsafe.Pointer(t + 1)))-int32('0')) < uint32(10)) { + break + } + goto _5 + _5: + ; + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + if width < *(*Tsize_t)(unsafe.Pointer(bp)) { + width = *(*Tsize_t)(unsafe.Pointer(bp)) + } + d = uint64(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(t + uintptr(d))))-int32('0')) < uint32(10)) { + break + } + goto _6 + _6: + ; + d++ + } + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v7))) = uint8('-') + width-- + } else { + if v9 = plus != 0; v9 { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') { + v8 = int32(3) + } else { + v8 = int32(5) + } + } + if v9 && d+(width-*(*Tsize_t)(unsafe.Pointer(bp))) >= uint64(v8) { + v10 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v10))) = uint8('+') + width-- + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v12 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v12))) = uint8('0') + goto _11 + _11: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) > n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xmemcpy(tls, s+uintptr(l), t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f++ + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + } + return uint64(0) +} + +func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, loc) +} + +func Xstrptime(tls *TLS, s uintptr, f uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v tm=%v, (%v:)", tls, s, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var adj, i, min, neg, range1, w, want_century, v1, v2, v45, v46, v5, v53, v6 int32 + var dest, ex, v49, v51, v54, v9 uintptr + var len1 Tsize_t + var v48, v8 bool + var _ /* century at bp+4 */ int32 + var _ /* dummy at bp+0 */ int32 + var _ /* new_f at bp+16 */ uintptr + var _ /* relyear at bp+8 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = adj, dest, ex, i, len1, min, neg, range1, w, want_century, v1, v2, v45, v46, v48, v49, v5, v51, v53, v54, v6, v8, v9 + want_century = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + *(*int32)(unsafe.Pointer(bp + 8)) = 0 + for *(*uint8)(unsafe.Pointer(f)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v1 = int32(*(*uint8)(unsafe.Pointer(f))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if v2 != 0 { + for { + if v8 = *(*uint8)(unsafe.Pointer(s)) != 0; v8 { + v5 = int32(*(*uint8)(unsafe.Pointer(s))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + } + if !(v8 && v6 != 0) { + break + } + goto _4 + _4: + ; + s++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(*(*uint8)(unsafe.Pointer(f))) { + return uintptr(0) + } else { + s++ + } + } + f++ + continue + } + f++ + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('+') { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + w = int32(Xstrtoul(tls, f, bp+16, int32(10))) + f = *(*uintptr)(unsafe.Pointer(bp + 16)) + } else { + w = -int32(1) + } + adj = 0 + v9 = f + f++ + switch int32(*(*uint8)(unsafe.Pointer(v9))) { + case int32('A'): + goto _10 + case int32('a'): + goto _11 + case int32('h'): + goto _12 + case int32('B'): + goto _13 + case int32('b'): + goto _14 + case int32('c'): + goto _15 + case int32('C'): + goto _16 + case int32('e'): + goto _17 + case int32('d'): + goto _18 + case int32('D'): + goto _19 + case int32('H'): + goto _20 + case int32('I'): + goto _21 + case int32('j'): + goto _22 + case int32('m'): + goto _23 + case int32('M'): + goto _24 + case int32('t'): + goto _25 + case int32('n'): + goto _26 + case int32('p'): + goto _27 + case int32('r'): + goto _28 + case int32('R'): + goto _29 + case int32('S'): + goto _30 + case int32('T'): + goto _31 + case int32('W'): + goto _32 + case int32('U'): + goto _33 + case int32('w'): + goto _34 + case int32('x'): + goto _35 + case int32('X'): + goto _36 + case int32('y'): + goto _37 + case int32('Y'): + goto _38 + case int32('%'): + goto _39 + default: + goto _40 + } + goto _41 + _11: + ; + _10: + ; + dest = tm + 24 + min = int32(ABDAY_1) + range1 = int32(7) + goto symbolic_range + _14: + ; + _13: + ; + _12: + ; + dest = tm + 16 + min = int32(ABMON_1) + range1 = int32(12) + goto symbolic_range + _15: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _16: + ; + dest = bp + 4 + if w < 0 { + w = int32(2) + } + want_century |= int32(2) + goto numeric_digits + _18: + ; + _17: + ; + dest = tm + 12 + min = int32(1) + range1 = int32(31) + goto numeric_range + _19: + ; + s = Xstrptime(tls, s, __ccgo_ts+1847, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _20: + ; + dest = tm + 8 + min = 0 + range1 = int32(24) + goto numeric_range + _21: + ; + dest = tm + 8 + min = int32(1) + range1 = int32(12) + goto numeric_range + _22: + ; + dest = tm + 28 + min = int32(1) + range1 = int32(366) + adj = int32(1) + goto numeric_range + _23: + ; + dest = tm + 16 + min = int32(1) + range1 = int32(12) + adj = int32(1) + goto numeric_range + _24: + ; + dest = tm + 4 + min = 0 + range1 = int32(60) + goto numeric_range + _26: + ; + _25: + ; + _44: + ; + if v48 = *(*uint8)(unsafe.Pointer(s)) != 0; v48 { + v45 = int32(*(*uint8)(unsafe.Pointer(s))) + v46 = BoolInt32(v45 == int32(' ') || uint32(v45)-uint32('\t') < uint32(5)) + goto _47 + _47: + } + if !(v48 && v46 != 0) { + goto _42 + } + goto _43 + _43: + ; + s++ + goto _44 + goto _42 + _42: + ; + goto _41 + _27: + ; + ex = Xnl_langinfo(tls, int32(AM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + s += uintptr(len1) + goto _41 + } + ex = Xnl_langinfo(tls, int32(PM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + *(*int32)(unsafe.Pointer(tm + 8)) += int32(12) + s += uintptr(len1) + goto _41 + } + return uintptr(0) + _28: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT_AMPM)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _29: + ; + s = Xstrptime(tls, s, __ccgo_ts+1865, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _30: + ; + dest = tm + min = 0 + range1 = int32(61) + goto numeric_range + _31: + ; + s = Xstrptime(tls, s, __ccgo_ts+1871, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _33: + ; + _32: + ; + /* Throw away result, for now. (FIXME?) */ + dest = bp + min = 0 + range1 = int32(54) + goto numeric_range + _34: + ; + dest = tm + 24 + min = 0 + range1 = int32(7) + goto numeric_range + _35: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _36: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _37: + ; + dest = bp + 8 + w = int32(2) + want_century |= int32(1) + goto numeric_digits + _38: + ; + dest = tm + 20 + if w < 0 { + w = int32(4) + } + adj = int32(1900) + want_century = 0 + goto numeric_digits + _39: + ; + v49 = s + s++ + if int32(*(*uint8)(unsafe.Pointer(v49))) != int32('%') { + return uintptr(0) + } + goto _41 + _40: + ; + return uintptr(0) + goto numeric_range + numeric_range: + ; + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) = 0 + i = int32(1) + for { + if !(i <= min+range1 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v51 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v51))) - int32('0') + goto _50 + _50: + ; + i *= int32(10) + } + if uint32(*(*int32)(unsafe.Pointer(dest))-min) >= uint32(range1) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + switch int64(dest) - int64(tm) { + case int64(uint64(UintptrFromInt32(0) + 28)): + } + goto update + goto numeric_digits + numeric_digits: + ; + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + s++ + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') { + neg = int32(1) + s++ + } + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + v53 = Int32FromInt32(0) + i = v53 + *(*int32)(unsafe.Pointer(dest)) = v53 + for { + if !(i < w && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v54 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v54))) - int32('0') + goto _52 + _52: + ; + i++ + } + if neg != 0 { + *(*int32)(unsafe.Pointer(dest)) = -*(*int32)(unsafe.Pointer(dest)) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + goto update + goto symbolic_range + symbolic_range: + ; + i = int32(2)*range1 - int32(1) + for { + if !(i >= 0) { + break + } + ex = Xnl_langinfo(tls, min+i) + len1 = Xstrlen(tls, ex) + if Xstrncasecmp(tls, s, ex, len1) != 0 { + goto _55 + } + s += uintptr(len1) + *(*int32)(unsafe.Pointer(dest)) = i % range1 + break + goto _55 + _55: + ; + i-- + } + if i < 0 { + return uintptr(0) + } + goto update + goto update + update: + ; + //FIXME + _41: + } + if want_century != 0 { + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = *(*int32)(unsafe.Pointer(bp + 8)) + if want_century&int32(2) != 0 { + *(*int32)(unsafe.Pointer(tm + 20)) += *(*int32)(unsafe.Pointer(bp + 4))*int32(100) - int32(1900) + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year <= int32(68) { + *(*int32)(unsafe.Pointer(tm + 20)) += int32(100) + } + } + } + return s +} + +func Xtime(tls *TLS, t uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + X__clock_gettime(tls, CLOCK_REALTIME, bp) + if t != 0 { + *(*Ttime_t)(unsafe.Pointer(t)) = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec +} + +func Xtimegm(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm1 + _ = t + t = X__tm_to_secs(tls, tm) + if X__secs_to_tm(tls, t, bp) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + *(*Ttm1)(unsafe.Pointer(tm)) = *(*Ttm1)(unsafe.Pointer(bp)) + (*Ttm1)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_gmtoff = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_zone = uintptr(unsafe.Pointer(&X__utc)) + return t +} + +func Xtimer_delete(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1911) + AtomicStorePInt32(td+148, AtomicLoadPInt32(td+148)|(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))) + // __asm__ __volatile__ ("fence rw,rw" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+353, __ccgo_ts+388, 4, __ccgo_ts+1911) + X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(td)).Ftid), int64(Int32FromInt32(SIGTIMER))) + return 0 + } + return int32(X__syscall1(tls, int64(SYS_timer_delete), int64(t))) +} + +func Xtimer_getoverrun(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_timer_getoverrun), int64(t))))) +} + +func Xtimer_gettime(tls *TLS, t Ttimer_t, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v val=%v, (%v:)", tls, t, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timer_gettime), int64(t), int64(val))))) +} + +func Xtimer_settime(tls *TLS, t Ttimer_t, flags int32, val uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val=%v old=%v, (%v:)", tls, t, flags, val, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+148) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timer_settime), int64(t), int64(flags), int64(val), int64(old))))) +} + +type Ttms = struct { + Ftms_utime Tclock_t + Ftms_stime Tclock_t + Ftms_cutime Tclock_t + Ftms_cstime Tclock_t +} + +func Xtimes(tls *TLS, tms uintptr) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v tms=%v, (%v:)", tls, tms, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall1(tls, int64(SYS_times), int64(tms)) +} + +// C documentation +// +// /* There is no other implemented value than TIME_UTC; all other values +// * are considered erroneous. */ +func Xtimespec_get(tls *TLS, ts uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ts=%v base=%v, (%v:)", tls, ts, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v1 int32 + _, _ = ret, v1 + if base != int32(TIME_UTC) { + return 0 + } + ret = X__clock_gettime(tls, CLOCK_REALTIME, ts) + if ret < 0 { + v1 = 0 + } else { + v1 = base + } + return v1 +} + +type Tutimbuf = struct { + Factime Ttime_t + Fmodtime Ttime_t +} + +func Xutime(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if times != 0 { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Factime, + }, + 1: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Fmodtime, + }, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), path, v1, 0) +} + +func X__wcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var l, v2, v6, v7, v9 Tsize_t + var pad, plus, v4 int32 + var t, t_mb, v3 uintptr + var width uint64 + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+512 */ uintptr + var _ /* wbuf at bp+108 */ [100]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _ = l, pad, plus, t, t_mb, width, v2, v3, v4, v6, v7, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*Twchar_t)(unsafe.Pointer(f)) != 0) { + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + return l + } + if *(*Twchar_t)(unsafe.Pointer(f)) != int32('%') { + v2 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v2)*4)) = *(*Twchar_t)(unsafe.Pointer(f)) + goto _1 + } + f += 4 + pad = 0 + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('_') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('0') { + v3 = f + f += 4 + pad = *(*Twchar_t)(unsafe.Pointer(v3)) + } + v4 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(f)) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f += 4 + } + width = Xwcstoul(tls, f, bp+512, int32(10)) + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('C') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('F') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('G') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 512)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 512)) + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('E') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('O') { + f += 4 + } + t_mb = X__strftime_fmt_1(tls, bp+8, bp, *(*Twchar_t)(unsafe.Pointer(f)), tm, loc, pad) + if !(t_mb != 0) { + break + } + *(*Tsize_t)(unsafe.Pointer(bp)) = Xmbstowcs(tls, bp+108, t_mb, Uint64FromInt64(400)/Uint64FromInt64(4)) + if *(*Tsize_t)(unsafe.Pointer(bp)) == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + t = bp + 108 + if width != 0 { + for { + if !(*(*Twchar_t)(unsafe.Pointer(t)) == int32('+') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('0') && *(*Twchar_t)(unsafe.Pointer(t + 1*4)) != 0) { + break + } + goto _5 + _5: + ; + t += 4 + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + width-- + if plus != 0 && (*Ttm)(unsafe.Pointer(tm)).Ftm_year >= Int32FromInt32(10000)-Int32FromInt32(1900) { + v6 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v6)*4)) = int32('+') + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v7)*4)) = int32('-') + } else { + width++ + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v9 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v9)*4)) = int32('0') + goto _8 + _8: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) >= n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xwmemcpy(tls, s+uintptr(l)*4, t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f += 4 + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + } + return uint64(0) +} + +func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(___get_tp(tls))).Flocale) +} + +func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, s, n, f, tm, loc) +} + +func X_exit(tls *TLS, status int32) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + } + X_Exit(tls, status) +} + +func Xaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_faccessat), int64(-Int32FromInt32(100)), int64(filename), int64(amode), int64(Int32FromInt32(0)))))) +} + +func Xacct(tls *TLS, filename uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v, (%v:)", tls, filename, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_acct), int64(filename))))) +} + +func Xalarm(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_value: Ttimeval{ + Ftv_sec: int64(seconds), + }, + } + *(*Titimerval)(unsafe.Pointer(bp + 32)) = Titimerval{} + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec + BoolInt64(!!((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec != 0))) +} + +func Xchdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(path))))) +} + +func Xchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(-Int32FromInt32(100)), int64(path), int64(uid), int64(gid), int64(Int32FromInt32(0)))))) +} + +func _dummy12(tls *TLS, fd int32) (r int32) { + return fd +} + +func Xclose(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + fd = _dummy12(tls, fd) + r = int32(___syscall_cp(tls, int64(SYS_close), int64(fd), 0, 0, 0, 0, 0)) + if r == -int32(EINTR) { + r = 0 + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xctermid(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if s != 0 { + v1 = Xstrcpy(tls, s, __ccgo_ts+292) + } else { + v1 = __ccgo_ts + 292 + } + return v1 +} + +func Xdup(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_dup), int64(fd))))) +} + +func Xdup2(tls *TLS, old int32, new1 int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + if old == new1 { + r = int32(X__syscall2(tls, int64(SYS_fcntl), int64(old), int64(Int32FromInt32(F_GETFD)))) + if r >= 0 { + return old + } + } else { + for { + v1 = int32(X__syscall3(tls, int64(SYS_dup3), int64(old), int64(new1), int64(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__dup3(tls *TLS, old int32, new1 int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + for { + v1 = int32(X__syscall3(tls, int64(SYS_dup3), int64(old), int64(new1), int64(flags))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xdup3(tls *TLS, old int32, new1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dup3(tls, old, new1, flags) +} + +type Tctx1 = struct { + Ffd int32 + Ffilename uintptr + Famode int32 + Fp int32 +} + +func _checker(tls *TLS, p uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c uintptr + var _ /* ret at bp+0 */ int32 + _ = c + c = p + if X__syscall2(tls, int64(SYS_setregid), X__syscall0(tls, int64(SYS_getegid)), int64(-Int32FromInt32(1))) != 0 || X__syscall2(tls, int64(SYS_setreuid), X__syscall0(tls, int64(SYS_geteuid)), int64(-Int32FromInt32(1))) != 0 { + X__syscall1(tls, int64(SYS_exit), int64(Int32FromInt32(1))) + } + *(*int32)(unsafe.Pointer(bp)) = int32(X__syscall4(tls, int64(SYS_faccessat), int64((*Tctx1)(unsafe.Pointer(c)).Ffd), int64((*Tctx1)(unsafe.Pointer(c)).Ffilename), int64((*Tctx1)(unsafe.Pointer(c)).Famode), int64(Int32FromInt32(0)))) + X__syscall3(tls, int64(SYS_write), int64((*Tctx1)(unsafe.Pointer(c)).Fp), int64(bp), int64(Uint64FromInt64(4))) + return 0 +} + +func Xfaccessat(tls *TLS, fd int32, filename uintptr, amode int32, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v amode=%v flag=%v, (%v:)", tls, fd, filename, amode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if flag != 0 { + ret = int32(X__syscall4(tls, int64(SYS_faccessat2), int64(fd), int64(filename), int64(amode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + if flag & ^Int32FromInt32(AT_EACCESS) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_faccessat), int64(fd), int64(filename), int64(amode))))) +} + +func Xfchdir(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall1(tls, int64(SYS_fchdir), int64(fd))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(bp))))) +} + +func Xfchown(tls *TLS, fd int32, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v uid=%v gid=%v, (%v:)", tls, fd, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall3(tls, int64(SYS_fchown), int64(fd), int64(uid), int64(gid))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(-Int32FromInt32(100)), int64(bp), int64(uid), int64(gid), int64(Int32FromInt32(0)))))) +} + +func Xfchownat(tls *TLS, fd int32, path uintptr, uid Tuid_t, gid Tgid_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v uid=%v gid=%v flag=%v, (%v:)", tls, fd, path, uid, gid, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(fd), int64(path), int64(uid), int64(gid), int64(flag))))) +} + +func Xfdatasync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fdatasync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xfsync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fsync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xftruncate(tls *TLS, fd int32, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v length=%v, (%v:)", tls, fd, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_ftruncate), int64(fd), length)))) +} + +func Xgetcwd(tls *TLS, buf uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v, (%v:)", tls, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int64 + var tmp, v3 uintptr + var v1 t__predefined_size_t + var v2 int32 + _, _, _, _, _ = ret, tmp, v1, v2, v3 + defer func() { Xrealloc(tls, tmp, 0) }() + if buf != 0 { + v2 = int32(1) + } else { + v2 = int32(PATH_MAX) + } + v1 = uint64(v2) + tmp = Xrealloc(tls, tmp, v1) + if !(buf != 0) { + buf = tmp + size = v1 + } else { + if !(size != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + } + ret = X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getcwd), int64(buf), int64(size)))) + if ret < 0 { + return uintptr(0) + } + if ret == 0 || int32(*(*uint8)(unsafe.Pointer(buf))) != int32('/') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if buf == tmp { + v3 = Xstrdup(tls, buf) + } else { + v3 = buf + } + return v3 +} + +func Xgetegid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getegid))) +} + +func Xgeteuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_geteuid))) +} + +func Xgetgid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getgid))) +} + +func Xgetgroups(tls *TLS, count int32, list uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v count=%v list=%v, (%v:)", tls, count, list, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getgroups), int64(count), int64(list))))) +} + +func Xgethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var i Tsize_t + var v2 uint8 + var v3 bool + var _ /* uts at bp+0 */ Tutsname1 + _, _, _ = i, v2, v3 + if Xuname(tls, bp) != 0 { + return -int32(1) + } + if len1 > uint64(65) { + len1 = uint64(65) + } + i = uint64(0) + for { + if v3 = i < len1; v3 { + v2 = *(*uint8)(unsafe.Pointer(bp + 65 + uintptr(i))) + *(*uint8)(unsafe.Pointer(name + uintptr(i))) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i != 0 && i == len1 { + *(*uint8)(unsafe.Pointer(name + uintptr(i-uint64(1)))) = uint8(0) + } + return 0 +} + +func Xgetlogin(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetenv(tls, __ccgo_ts+1924) +} + +func Xgetlogin_r(tls *TLS, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v size=%v, (%v:)", tls, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var logname uintptr + _ = logname + logname = Xgetlogin(tls) + if !(logname != 0) { + return int32(ENXIO) + } /* or...? */ + if Xstrlen(tls, logname) >= size { + return int32(ERANGE) + } + Xstrcpy(tls, name, logname) + return 0 +} + +func Xgetpgid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getpgid), int64(pid))))) +} + +func Xgetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall1(tls, int64(SYS_getpgid), int64(Int32FromInt32(0)))) +} + +func Xgetpid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getpid))) +} + +func Xgetppid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getppid))) +} + +func Xgetsid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getsid), int64(pid))))) +} + +func Xgetuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getuid))) +} + +func Xisatty(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r uint64 + var _ /* wsz at bp+0 */ Twinsize + _ = r + r = uint64(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp))))) + if r == uint64(0) { + return int32(1) + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EBADF) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTTY) + } + return 0 +} + +func Xlchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(-Int32FromInt32(100)), int64(path), int64(uid), int64(gid), int64(Int32FromInt32(AT_SYMLINK_NOFOLLOW)))))) +} + +func Xlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_linkat), int64(-Int32FromInt32(100)), int64(existing), int64(-Int32FromInt32(100)), int64(new1), int64(Int32FromInt32(0)))))) +} + +func Xlinkat(tls *TLS, fd1 int32, existing uintptr, fd2 int32, new1 uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd1=%v existing=%v fd2=%v new1=%v flag=%v, (%v:)", tls, fd1, existing, fd2, new1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_linkat), int64(fd1), int64(existing), int64(fd2), int64(new1), int64(flag))))) +} + +func X__lseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_lseek), int64(fd), offset, int64(whence)))) +} + +func Xlseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, fd, offset, whence) +} + +func Xnice(tls *TLS, inc int32) (r int32) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var prio int32 + _ = prio + prio = inc + // Only query old priority if it can affect the result. + // This also avoids issues with integer overflow. + if inc > -Int32FromInt32(2)*Int32FromInt32(NZERO) && inc < Int32FromInt32(2)*Int32FromInt32(NZERO) { + prio += Xgetpriority(tls, PRIO_PROCESS, uint32(0)) + } + if prio > Int32FromInt32(NZERO)-Int32FromInt32(1) { + prio = Int32FromInt32(NZERO) - Int32FromInt32(1) + } + if prio < -int32(NZERO) { + prio = -int32(NZERO) + } + if Xsetpriority(tls, PRIO_PROCESS, uint32(0), prio) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EPERM) + } + return -int32(1) + } else { + return prio + } + return r +} + +func Xpause(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ppoll), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), 0, 0)))) +} + +func Xpipe(tls *TLS, fd uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_pipe2), int64(fd), int64(Int32FromInt32(0)))))) +} + +func Xpipe2(tls *TLS, fd uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flag=%v, (%v:)", tls, fd, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if !(flag != 0) { + return Xpipe(tls, fd) + } + ret = int32(X__syscall2(tls, int64(SYS_pipe2), int64(fd), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag & ^(Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret = Xpipe(tls, fd) + if ret != 0 { + return ret + } + if flag&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flag&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return 0 +} + +func Xposix_close(tls *TLS, fd int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v, (%v:)", tls, fd, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclose(tls, fd) +} + +func Xpread(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pread64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpreadv(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xpwrite(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwrite64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpwritev(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xread(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_read), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xreadlink(tls *TLS, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v bufsize=%v, (%v:)", tls, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(-Int32FromInt32(100)), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadlinkat(tls *TLS, fd int32, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v buf=%v bufsize=%v, (%v:)", tls, fd, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(fd), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadv(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_readv), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func Xrenameat(tls *TLS, oldfd int32, old uintptr, newfd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v oldfd=%v old=%v newfd=%v new1=%v, (%v:)", tls, oldfd, old, newfd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_renameat2), int64(oldfd), int64(old), int64(newfd), int64(new1), int64(Int32FromInt32(0)))))) +} + +func Xrmdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_unlinkat), int64(-Int32FromInt32(100)), int64(path), int64(Int32FromInt32(AT_REMOVEDIR)))))) +} + +func Xsetgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setgid), int32(gid), 0, 0) +} + +func Xsetpgid(tls *TLS, pid Tpid_t, pgid Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v pgid=%v, (%v:)", tls, pid, pgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setpgid), int64(pid), int64(pgid))))) +} + +func Xsetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsetpgid(tls, 0, 0) +} + +func Xsetsid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_setsid))))) +} + +func Xsetuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setuid), int32(uid), 0, 0) +} + +type Tctx2 = struct { + Fid int32 + Feid int32 + Fsid int32 + Fnr int32 + Fret int32 +} + +func _do_setxid(tls *TLS, p uintptr) { + var c uintptr + var ret int32 + _, _ = c, ret + c = p + if (*Tctx2)(unsafe.Pointer(c)).Fret < 0 { + return + } + ret = int32(X__syscall3(tls, int64((*Tctx2)(unsafe.Pointer(c)).Fnr), int64((*Tctx2)(unsafe.Pointer(c)).Fid), int64((*Tctx2)(unsafe.Pointer(c)).Feid), int64((*Tctx2)(unsafe.Pointer(c)).Fsid))) + if ret != 0 && !((*Tctx2)(unsafe.Pointer(c)).Fret != 0) { + /* If one thread fails to set ids after another has already + * succeeded, forcibly killing the process is the only safe + * thing to do. State is inconsistent and dangerous. Use + * SIGKILL because it is uncatchable. */ + X__block_all_sigs(tls, uintptr(0)) + X__syscall2(tls, int64(SYS_kill), X__syscall0(tls, int64(SYS_getpid)), int64(Int32FromInt32(SIGKILL))) + } + (*Tctx2)(unsafe.Pointer(c)).Fret = ret +} + +func X__setxid(tls *TLS, nr int32, id int32, eid int32, sid int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nr=%v id=%v eid=%v sid=%v, (%v:)", tls, nr, id, eid, sid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 int32 + var _ /* c at bp+0 */ Tctx2 + _ = v1 + /* ret is initially nonzero so that failure of the first thread does not + * trigger the safety kill above. */ + *(*Tctx2)(unsafe.Pointer(bp)) = Tctx2{ + Fid: id, + Feid: eid, + Fsid: sid, + Fnr: nr, + Fret: int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setxid), bp) + if (*(*Tctx2)(unsafe.Pointer(bp))).Fret > 0 { + v1 = -int32(EAGAIN) + } else { + v1 = (*(*Tctx2)(unsafe.Pointer(bp))).Fret + } + return int32(X__syscall_ret(tls, uint64(v1))) +} + +func Xsleep(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(seconds), + } + if Xnanosleep(tls, bp, bp) != 0 { + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + } + return uint32(0) +} + +func Xsymlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_symlinkat), int64(existing), int64(-Int32FromInt32(100)), int64(new1))))) +} + +func Xsymlinkat(tls *TLS, existing uintptr, fd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v fd=%v new1=%v, (%v:)", tls, existing, fd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_symlinkat), int64(existing), int64(fd), int64(new1))))) +} + +func Xsync(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__syscall0(tls, int64(SYS_sync)) +} + +func Xtcgetpgrp(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGPGRP), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcsetpgrp(tls *TLS, fd int32, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pgrp=%v, (%v:)", tls, fd, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp_int at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = pgrp + return Xioctl(tls, fd, int32(TIOCSPGRP), VaList(bp+16, bp)) +} + +func Xtruncate(tls *TLS, path uintptr, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v length=%v, (%v:)", tls, path, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_truncate), int64(path), length)))) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xttyname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var result, v1 int32 + _, _ = result, v1 + v1 = Xttyname_r(tls, fd, uintptr(unsafe.Pointer(&_buf10)), uint64(32)) + result = v1 + if v1 != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = result + return UintptrFromInt32(0) + } + return uintptr(unsafe.Pointer(&_buf10)) +} + +var _buf10 [32]uint8 + +func Xttyname_r(tls *TLS, fd int32, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v size=%v, (%v:)", tls, fd, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var l Tssize_t + var _ /* procname at bp+256 */ [29]uint8 + var _ /* st1 at bp+0 */ Tstat + var _ /* st2 at bp+128 */ Tstat + _ = l + if !(Xisatty(tls, fd) != 0) { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + X__procfdname(tls, bp+256, uint32(fd)) + l = Xreadlink(tls, bp+256, name, size) + if l < 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + if uint64(l) == size { + return int32(ERANGE) + } + } + *(*uint8)(unsafe.Pointer(name + uintptr(l))) = uint8(0) + if Xstat(tls, name, bp) != 0 || Xfstat(tls, fd, bp+128) != 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*(*Tstat)(unsafe.Pointer(bp + 128))).Fst_dev || (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino != (*(*Tstat)(unsafe.Pointer(bp + 128))).Fst_ino { + return int32(ENODEV) + } + return 0 +} + +func Xualarm(tls *TLS, value uint32, interval uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v value=%v interval=%v, (%v:)", tls, value, interval, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* it_old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_usec: int64(interval), + }, + Fit_value: Ttimeval{ + Ftv_usec: int64(value), + }, + } + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec*int64(1000000) + (*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) +} + +func Xunlink(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_unlinkat), int64(-Int32FromInt32(100)), int64(path), int64(Int32FromInt32(0)))))) +} + +func Xunlinkat(tls *TLS, fd int32, path uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v flag=%v, (%v:)", tls, fd, path, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_unlinkat), int64(fd), int64(path), int64(flag))))) +} + +func Xusleep(tls *TLS, useconds uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v useconds=%v, (%v:)", tls, useconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(useconds / uint32(1000000)), + Ftv_nsec: int64(useconds % uint32(1000000) * uint32(1000)), + } + return Xnanosleep(tls, bp, bp) +} + +func Xwrite(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_write), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xwritev(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_writev), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func __ccgo_fp(f interface{}) uintptr { + type iface [2]uintptr + return (*iface)(unsafe.Pointer(&f))[1] +} + +var X__abort_lock [1]int32 + +var X__at_quick_exit_lockptr = uintptr(unsafe.Pointer(&_lock)) + +var X__c_dot_utf8 = t__locale_map{ + Fmap1: uintptr(unsafe.Pointer(&_empty_mo)), + Fmap_size: uint64(20), + Fname: [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'}, +} + +var X__c_dot_utf8_locale = t__locale_struct{ + Fcat: [6]uintptr{ + 0: uintptr(unsafe.Pointer(&X__c_dot_utf8)), + }, +} + +var X__c_locale = t__locale_struct{} + +var Xdaylight int32 + +var X__eintr_valid_flag int32 + +var Xenviron uintptr + +var X__exp2f_data = Texp2f_data{ + Ftab: [32]Tuint64_t{ + 0: uint64(0x3ff0000000000000), + 1: uint64(0x3fefd9b0d3158574), + 2: uint64(0x3fefb5586cf9890f), + 3: uint64(0x3fef9301d0125b51), + 4: uint64(0x3fef72b83c7d517b), + 5: uint64(0x3fef54873168b9aa), + 6: uint64(0x3fef387a6e756238), + 7: uint64(0x3fef1e9df51fdee1), + 8: uint64(0x3fef06fe0a31b715), + 9: uint64(0x3feef1a7373aa9cb), + 10: uint64(0x3feedea64c123422), + 11: uint64(0x3feece086061892d), + 12: uint64(0x3feebfdad5362a27), + 13: uint64(0x3feeb42b569d4f82), + 14: uint64(0x3feeab07dd485429), + 15: uint64(0x3feea47eb03a5585), + 16: uint64(0x3feea09e667f3bcd), + 17: uint64(0x3fee9f75e8ec5f74), + 18: uint64(0x3feea11473eb0187), + 19: uint64(0x3feea589994cce13), + 20: uint64(0x3feeace5422aa0db), + 21: uint64(0x3feeb737b0cdc5e5), + 22: uint64(0x3feec49182a3f090), + 23: uint64(0x3feed503b23e255d), + 24: uint64(0x3feee89f995ad3ad), + 25: uint64(0x3feeff76f2fb5e47), + 26: uint64(0x3fef199bdd85529c), + 27: uint64(0x3fef3720dcef9069), + 28: uint64(0x3fef5818dcfba487), + 29: uint64(0x3fef7c97337b9b5f), + 30: uint64(0x3fefa4afa2a490da), + 31: uint64(0x3fefd0765b6e4540), + }, + Fshift_scaled: Float64FromFloat64(6.755399441055744e+15) / float64(Int32FromInt32(1)<>Int32FromInt32(6) | Uint32FromInt32(0x0), + 31: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x1), + 32: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x2), + 33: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x3), + 34: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x4), + 35: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x5), + 36: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x6), + 37: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x7), + 38: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x8), + 39: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x9), + 40: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xa), + 41: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xb), + 42: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xc), + 43: (Uint32FromUint32(0x40)-Uint32FromInt32(0xa0))<>Int32FromInt32(6) | Uint32FromInt32(0xd), + 44: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xe), + 45: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xf), + 46: (Uint32FromUint32(0)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x0), + 47: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x1), + 48: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x2), + 49: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x3), + 50: (Uint32FromUint32(0x40)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x4), +} + +var X__gettext_lockptr = uintptr(unsafe.Pointer(&_lock1)) + +var X__hwcap Tsize_t + +var X__libc t__libc + +var X__libc_version = [6]uint8{'1', '.', '2', '.', '5'} + +var X__locale_lock [1]int32 + +var X__locale_lockptr = uintptr(unsafe.Pointer(&X__locale_lock)) + +var X__log2_data = Tlog2_data{ + Finvln2hi: float64(1.4426950407214463), + Finvln2lo: float64(1.6751713164886512e-10), + Fpoly: [6]float64{ + 0: -Float64FromFloat64(0.7213475204444882), + 1: float64(0.4808983469629985), + 2: -Float64FromFloat64(0.36067375954075914), + 3: float64(0.2885390073180969), + 4: -Float64FromFloat64(0.2404693555628422), + 5: float64(0.2061202382173603), + }, + Fpoly1: [10]float64{ + 0: -Float64FromFloat64(0.7213475204444817), + 1: float64(0.48089834696298744), + 2: -Float64FromFloat64(0.360673760222145), + 3: float64(0.2885390081805197), + 4: -Float64FromFloat64(0.24044917405728863), + 5: float64(0.2060992861022954), + 6: -Float64FromFloat64(0.18033596705327856), + 7: float64(0.1603032746063156), + 8: -Float64FromFloat64(0.14483316576701266), + 9: float64(0.13046826811283835), + }, + Ftab: [64]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4463276106642393), + Flogc: -Float64FromFloat64(0.5323943771486483), + }, + 1: { + Finvc: float64(1.4301675812282968), + Flogc: -Float64FromFloat64(0.516184206053822), + }, + 2: { + Finvc: float64(1.4143648676229383), + Flogc: -Float64FromFloat64(0.5001543441974263), + }, + 3: { + Finvc: float64(1.3989068970611538), + Flogc: -Float64FromFloat64(0.4842999484799293), + }, + 4: { + Finvc: float64(1.3837838957784339), + Flogc: -Float64FromFloat64(0.46861865624623533), + }, + 5: { + Finvc: float64(1.368983882697786), + Flogc: -Float64FromFloat64(0.4531054615783887), + }, + 6: { + Finvc: float64(1.3544972916324536), + Flogc: -Float64FromFloat64(0.43775750882059583), + }, + 7: { + Finvc: float64(1.3403139676437443), + Flogc: -Float64FromFloat64(0.4225709906127122), + }, + 8: { + Finvc: float64(1.3264249304188642), + Flogc: -Float64FromFloat64(0.40754302793970965), + }, + 9: { + Finvc: float64(1.3128203652112156), + Flogc: -Float64FromFloat64(0.3926695240384106), + }, + 10: { + Finvc: float64(1.299492412370217), + Flogc: -Float64FromFloat64(0.3779482100565019), + }, + 11: { + Finvc: float64(1.28643198385998), + Flogc: -Float64FromFloat64(0.36337518101890964), + }, + 12: { + Finvc: float64(1.2736319291846832), + Flogc: -Float64FromFloat64(0.3489484089425332), + }, + 13: { + Finvc: float64(1.2610838968062879), + Flogc: -Float64FromFloat64(0.33466425780738973), + }, + 14: { + Finvc: float64(1.248780314313572), + Flogc: -Float64FromFloat64(0.3205197000629596), + }, + 15: { + Finvc: float64(1.2367150450059063), + Flogc: -Float64FromFloat64(0.3065131231801388), + }, + 16: { + Finvc: float64(1.2248804968401878), + Flogc: -Float64FromFloat64(0.2926410022678283), + }, + 17: { + Finvc: float64(1.2132702353497795), + Flogc: -Float64FromFloat64(0.2789009220805383), + }, + 18: { + Finvc: float64(1.2018780785715362), + Flogc: -Float64FromFloat64(0.2652905529862437), + }, + 19: { + Finvc: float64(1.190697765061355), + Flogc: -Float64FromFloat64(0.2518072602367738), + }, + 20: { + Finvc: float64(1.1797235410550593), + Flogc: -Float64FromFloat64(0.23844881494437686), + }, + 21: { + Finvc: float64(1.1689498986205256), + Flogc: -Float64FromFloat64(0.22521309705462045), + }, + 22: { + Finvc: float64(1.158371137408455), + Flogc: -Float64FromFloat64(0.21209756102439314), + }, + 23: { + Finvc: float64(1.1479820146386086), + Flogc: -Float64FromFloat64(0.1991000395789797), + }, + 24: { + Finvc: float64(1.1377775576851088), + Flogc: -Float64FromFloat64(0.18621852970682085), + }, + 25: { + Finvc: float64(1.127753150630225), + Flogc: -Float64FromFloat64(0.17345131655361), + }, + 26: { + Finvc: float64(1.1179037012282074), + Flogc: -Float64FromFloat64(0.16079591649577196), + }, + 27: { + Finvc: float64(1.1082251967632821), + Flogc: -Float64FromFloat64(0.14825107384353942), + }, + 28: { + Finvc: float64(1.098712461056607), + Flogc: -Float64FromFloat64(0.13581387465410444), + }, + 29: { + Finvc: float64(1.0893619091634283), + Flogc: -Float64FromFloat64(0.12348332762257996), + }, + 30: { + Finvc: float64(1.0801689912316736), + Flogc: -Float64FromFloat64(0.11125703807351783), + }, + 31: { + Finvc: float64(1.071129489697672), + Flogc: -Float64FromFloat64(0.09913289918449664), + }, + 32: { + Finvc: float64(1.0622406576750423), + Flogc: -Float64FromFloat64(0.08711065531497297), + }, + 33: { + Finvc: float64(1.0534977607927976), + Flogc: -Float64FromFloat64(0.07518724771330199), + }, + 34: { + Finvc: float64(1.044897877982342), + Flogc: -Float64FromFloat64(0.06336194888240243), + }, + 35: { + Finvc: float64(1.0364370289499079), + Flogc: -Float64FromFloat64(0.0516324649456692), + }, + 36: { + Finvc: float64(1.0281122132034575), + Flogc: -Float64FromFloat64(0.039997735929773626), + }, + 37: { + Finvc: float64(1.0199202450036955), + Flogc: -Float64FromFloat64(0.028456341769015125), + }, + 38: { + Finvc: float64(1.0118577522306755), + Flogc: -Float64FromFloat64(0.017006489068080555), + }, + 39: { + Finvc: float64(1.003921649236766), + Flogc: -Float64FromFloat64(0.005646678981520381), + }, + 40: { + Finvc: float64(0.9922480467550775), + Flogc: float64(0.011227277611396858), + }, + 41: { + Finvc: float64(0.9770993366178549), + Flogc: float64(0.033422853921138085), + }, + 42: { + Finvc: float64(0.9624059787315814), + Flogc: float64(0.05528248992573026), + }, + 43: { + Finvc: float64(0.9481480598286369), + Flogc: float64(0.07681573143713649), + }, + 44: { + Finvc: float64(0.9343065931261065), + Flogc: float64(0.09803204623631245), + }, + 45: { + Finvc: float64(0.9208633936884979), + Flogc: float64(0.11894094059630334), + }, + 46: { + Finvc: float64(0.9078013641840602), + Flogc: float64(0.13955143862290242), + }, + 47: { + Finvc: float64(0.8951048181512927), + Flogc: float64(0.15987146080919956), + }, + 48: { + Finvc: float64(0.882758574260473), + Flogc: float64(0.17990916589428707), + }, + 49: { + Finvc: float64(0.8707481902241709), + Flogc: float64(0.19967252559081317), + }, + 50: { + Finvc: float64(0.8590602881746972), + Flogc: float64(0.2191687127685782), + }, + 51: { + Finvc: float64(0.8476822044336688), + Flogc: float64(0.23840459427242422), + }, + 52: { + Finvc: float64(0.8366013284053287), + Flogc: float64(0.25738780610663525), + }, + 53: { + Finvc: float64(0.8258064913621258), + Flogc: float64(0.27612433583180973), + }, + 54: { + Finvc: float64(0.8152865101579193), + Flogc: float64(0.2946209507022104), + }, + 55: { + Finvc: float64(0.8050314363208223), + Flogc: float64(0.31288297359969874), + }, + 56: { + Finvc: float64(0.7950310492640542), + Flogc: float64(0.33091689015759584), + }, + 57: { + Finvc: float64(0.7852760432487271), + Flogc: float64(0.3487282100279572), + }, + 58: { + Finvc: float64(0.7757575660314712), + Flogc: float64(0.36632223233368677), + }, + 59: { + Finvc: float64(0.7664670566588946), + Flogc: float64(0.383704309808536), + }, + 60: { + Finvc: float64(0.7573965608078645), + Flogc: float64(0.4008792246509074), + }, + 61: { + Finvc: float64(0.7485380168514022), + Flogc: float64(0.41785250494945103), + }, + 62: { + Finvc: float64(0.7398844213755009), + Flogc: float64(0.4346281724315304), + }, + 63: { + Finvc: float64(0.7314286113178112), + Flogc: float64(0.45121103315341315), + }, + }, +} + +var X__log2f_data = Tlog2f_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.42257122959194704), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.3633754347673556), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.30651309567405577), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.25180720160537634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.19910014943794563), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.14825100623281615), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.09913323807318392), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.051632812977629436), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.07508531937943004), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.15987125980713107), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.2384046664317681), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.31288288605863257), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.38370422656453185), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.451211048935815), + }, + }, + Fpoly: [4]float64{ + 0: -Float64FromFloat64(0.36051725506874704), + 1: float64(0.4811247078767291), + 2: -Float64FromFloat64(0.7213476299867769), + 3: float64(1.4426950186867042), + }, +} + +var X__log_data = Tlog_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [5]float64{ + 0: -Float64FromFloat64(0.5000000000000001), + 1: float64(0.33333333331825593), + 2: -Float64FromFloat64(0.2499999999622955), + 3: float64(0.20000304511814496), + 4: -Float64FromFloat64(0.16667054827627667), + }, + Fpoly1: [11]float64{ + 0: -Float64FromFloat64(0.5), + 1: float64(0.3333333333333352), + 2: -Float64FromFloat64(0.24999999999998432), + 3: float64(0.19999999999320328), + 4: -Float64FromFloat64(0.16666666669929706), + 5: float64(0.14285715076560868), + 6: -Float64FromFloat64(0.12499997863982555), + 7: float64(0.11110712032936046), + 8: -Float64FromFloat64(0.10000486757818193), + 9: float64(0.09181994006195467), + 10: -Float64FromFloat64(0.08328363062289341), + }, + Ftab: [128]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4504249240398293), + Flogc: -Float64FromFloat64(0.3718565645633589), + }, + 1: { + Finvc: float64(1.442253508327276), + Flogc: -Float64FromFloat64(0.36620682668944937), + }, + 2: { + Finvc: float64(1.4341736174350004), + Flogc: -Float64FromFloat64(0.3605888069791945), + }, + 3: { + Finvc: float64(1.426183816329995), + Flogc: -Float64FromFloat64(0.3550022171419869), + }, + 4: { + Finvc: float64(1.4182825527052965), + Flogc: -Float64FromFloat64(0.34944666968829097), + }, + 5: { + Finvc: float64(1.4104682921759335), + Flogc: -Float64FromFloat64(0.3439217713603284), + }, + 6: { + Finvc: float64(1.4027396147468003), + Flogc: -Float64FromFloat64(0.3384271921261188), + }, + 7: { + Finvc: float64(1.3950954438932313), + Flogc: -Float64FromFloat64(0.332962831494342), + }, + 8: { + Finvc: float64(1.3875338232485754), + Flogc: -Float64FromFloat64(0.32752794345742586), + }, + 9: { + Finvc: float64(1.3800539211058593), + Flogc: -Float64FromFloat64(0.32212257167088865), + }, + 10: { + Finvc: float64(1.3726542695419708), + Flogc: -Float64FromFloat64(0.3167462884799761), + }, + 11: { + Finvc: float64(1.3653332798446802), + Flogc: -Float64FromFloat64(0.3113985598928366), + }, + 12: { + Finvc: float64(1.358090204587874), + Flogc: -Float64FromFloat64(0.3060794515165526), + }, + 13: { + Finvc: float64(1.3509234892132138), + Flogc: -Float64FromFloat64(0.300788424667644), + }, + 14: { + Finvc: float64(1.3438320840699889), + Flogc: -Float64FromFloat64(0.2955252968476998), + }, + 15: { + Finvc: float64(1.3368146974742003), + Flogc: -Float64FromFloat64(0.29028969275850613), + }, + 16: { + Finvc: float64(1.329870114677736), + Flogc: -Float64FromFloat64(0.2850812793277555), + }, + 17: { + Finvc: float64(1.322997339161106), + Flogc: -Float64FromFloat64(0.27989987391470095), + }, + 18: { + Finvc: float64(1.316195352741367), + Flogc: -Float64FromFloat64(0.27474526621870154), + }, + 19: { + Finvc: float64(1.3094628125672239), + Flogc: -Float64FromFloat64(0.2696169863701243), + }, + 20: { + Finvc: float64(1.3027990455471041), + Flogc: -Float64FromFloat64(0.26451506180308115), + }, + 21: { + Finvc: float64(1.2962024229438942), + Flogc: -Float64FromFloat64(0.2594387762767383), + }, + 22: { + Finvc: float64(1.2896726275815547), + Flogc: -Float64FromFloat64(0.2543884090981692), + }, + 23: { + Finvc: float64(1.2832080305745537), + Flogc: -Float64FromFloat64(0.24936321635129843), + }, + 24: { + Finvc: float64(1.276807885983376), + Flogc: -Float64FromFloat64(0.24436312405975968), + }, + 25: { + Finvc: float64(1.2704714060687552), + Flogc: -Float64FromFloat64(0.23938801747897287), + }, + 26: { + Finvc: float64(1.2641976054949482), + Flogc: -Float64FromFloat64(0.23443761696705678), + }, + 27: { + Finvc: float64(1.257985357514882), + Flogc: -Float64FromFloat64(0.22951151871518505), + }, + 28: { + Finvc: float64(1.2518337750655457), + Flogc: -Float64FromFloat64(0.2246094963439873), + }, + 29: { + Finvc: float64(1.2457421919097305), + Flogc: -Float64FromFloat64(0.21973149037705753), + }, + 30: { + Finvc: float64(1.2397094966625508), + Flogc: -Float64FromFloat64(0.2148770752847895), + }, + 31: { + Finvc: float64(1.2337348463589233), + Flogc: -Float64FromFloat64(0.210046029103637), + }, + 32: { + Finvc: float64(1.2278176973028803), + Flogc: -Float64FromFloat64(0.20523836373934046), + }, + 33: { + Finvc: float64(1.2219570190618474), + Flogc: -Float64FromFloat64(0.20045368751368642), + }, + 34: { + Finvc: float64(1.2161519732977757), + Flogc: -Float64FromFloat64(0.1956917537758045), + }, + 35: { + Finvc: float64(1.2104018095009725), + Flogc: -Float64FromFloat64(0.19095237845203883), + }, + 36: { + Finvc: float64(1.204705805718973), + Flogc: -Float64FromFloat64(0.18623539250290833), + }, + 37: { + Finvc: float64(1.1990631185441964), + Flogc: -Float64FromFloat64(0.18154051731551135), + }, + 38: { + Finvc: float64(1.1934733004462308), + Flogc: -Float64FromFloat64(0.1768677957431919), + }, + 39: { + Finvc: float64(1.1879350812847385), + Flogc: -Float64FromFloat64(0.17221657406412305), + }, + 40: { + Finvc: float64(1.1824481322833125), + Flogc: -Float64FromFloat64(0.16758697765942543), + }, + 41: { + Finvc: float64(1.1770114976921955), + Flogc: -Float64FromFloat64(0.16297859687290384), + }, + 42: { + Finvc: float64(1.1716248121809465), + Flogc: -Float64FromFloat64(0.15839151377804228), + }, + 43: { + Finvc: float64(1.1662869231674715), + Flogc: -Float64FromFloat64(0.15382513241456763), + }, + 44: { + Finvc: float64(1.1609977486762766), + Flogc: -Float64FromFloat64(0.14927976358922024), + }, + 45: { + Finvc: float64(1.1557563220795803), + Flogc: -Float64FromFloat64(0.14475495398119165), + }, + 46: { + Finvc: float64(1.1505619105480347), + Flogc: -Float64FromFloat64(0.14025044090817573), + }, + 47: { + Finvc: float64(1.1454138888505974), + Flogc: -Float64FromFloat64(0.1357660466685502), + }, + 48: { + Finvc: float64(1.140311877374656), + Flogc: -Float64FromFloat64(0.1313018016355727), + }, + 49: { + Finvc: float64(1.1352550225747513), + Flogc: -Float64FromFloat64(0.12685731518763532), + }, + 50: { + Finvc: float64(1.1302429094831266), + Flogc: -Float64FromFloat64(0.1224325737671279), + }, + 51: { + Finvc: float64(1.1252747693068048), + Flogc: -Float64FromFloat64(0.11802724521862729), + }, + 52: { + Finvc: float64(1.1203501571039876), + Flogc: -Float64FromFloat64(0.11364127671663482), + }, + 53: { + Finvc: float64(1.1154683327680124), + Flogc: -Float64FromFloat64(0.10927434611278386), + }, + 54: { + Finvc: float64(1.1106291463292157), + Flogc: -Float64FromFloat64(0.10492665324943573), + }, + 55: { + Finvc: float64(1.1058315813301596), + Flogc: -Float64FromFloat64(0.10059761422644442), + }, + 56: { + Finvc: float64(1.1010752177696026), + Flogc: -Float64FromFloat64(0.09628717309055901), + }, + 57: { + Finvc: float64(1.0963597137952512), + Flogc: -Float64FromFloat64(0.09199534069557558), + }, + 58: { + Finvc: float64(1.0916844827550398), + Flogc: -Float64FromFloat64(0.08772190036688698), + }, + 59: { + Finvc: float64(1.0870487291277784), + Flogc: -Float64FromFloat64(0.08346643613867855), + }, + 60: { + Finvc: float64(1.082452357388312), + Flogc: -Float64FromFloat64(0.07922916827544668), + }, + 61: { + Finvc: float64(1.0778948225025884), + Flogc: -Float64FromFloat64(0.0750099004750382), + }, + 62: { + Finvc: float64(1.0733751731601076), + Flogc: -Float64FromFloat64(0.07080805133352897), + }, + 63: { + Finvc: float64(1.068893585073351), + Flogc: -Float64FromFloat64(0.06662408085151128), + }, + 64: { + Finvc: float64(1.0644491706655506), + Flogc: -Float64FromFloat64(0.06245745471915143), + }, + 65: { + Finvc: float64(1.0600414846328305), + Flogc: -Float64FromFloat64(0.0583080438042316), + }, + 66: { + Finvc: float64(1.0556701316181605), + Flogc: -Float64FromFloat64(0.05417576112313327), + }, + 67: { + Finvc: float64(1.051334750556926), + Flogc: -Float64FromFloat64(0.050060547896805474), + }, + 68: { + Finvc: float64(1.0470347288442157), + Flogc: -Float64FromFloat64(0.045962101199052086), + }, + 69: { + Finvc: float64(1.0427699229652954), + Flogc: -Float64FromFloat64(0.04188056008865715), + }, + 70: { + Finvc: float64(1.0385395013738175), + Flogc: -Float64FromFloat64(0.03781540056183985), + }, + 71: { + Finvc: float64(1.034343418940345), + Flogc: -Float64FromFloat64(0.03376684757915882), + }, + 72: { + Finvc: float64(1.0301811073173315), + Flogc: -Float64FromFloat64(0.029734619131772888), + }, + 73: { + Finvc: float64(1.026052043621297), + Flogc: -Float64FromFloat64(0.025718470239212365), + }, + 74: { + Finvc: float64(1.0219561082336197), + Flogc: -Float64FromFloat64(0.021718543925430822), + }, + 75: { + Finvc: float64(1.0178926505784922), + Flogc: -Float64FromFloat64(0.01773446126981071), + }, + 76: { + Finvc: float64(1.0138614436244586), + Flogc: -Float64FromFloat64(0.013766252464051831), + }, + 77: { + Finvc: float64(1.0098620186501341), + Flogc: -Float64FromFloat64(0.009813706322574944), + }, + 78: { + Finvc: float64(1.0058938559734134), + Flogc: -Float64FromFloat64(0.005876555150052809), + }, + 79: { + Finvc: float64(1.00195696235014), + Flogc: -Float64FromFloat64(0.0019550499938532084), + }, + 80: { + Finvc: float64(0.9961089923088509), + Flogc: float64(0.0038985973556009412), + }, + 81: { + Finvc: float64(0.9884170338185201), + Flogc: float64(0.011650571286395461), + }, + 82: { + Finvc: float64(0.9808429191005297), + Flogc: float64(0.019342955478919066), + }, + 83: { + Finvc: float64(0.9733840169987446), + Flogc: float64(0.0269766014846482), + }, + 84: { + Finvc: float64(0.9660377568876556), + Flogc: float64(0.034552359728422744), + }, + 85: { + Finvc: float64(0.9588014945307369), + Flogc: float64(0.04207121767183253), + }, + 86: { + Finvc: float64(0.9516728569073111), + Flogc: float64(0.049533940950141186), + }, + 87: { + Finvc: float64(0.9446494635965822), + Flogc: float64(0.056941358295944156), + }, + 88: { + Finvc: float64(0.9377288993026223), + Flogc: float64(0.06429439168346107), + }, + 89: { + Finvc: float64(0.9309091073790681), + Flogc: float64(0.0715936354946507), + }, + 90: { + Finvc: float64(0.924187681612722), + Flogc: float64(0.07884010933776153), + }, + 91: { + Finvc: float64(0.9175626765599192), + Flogc: float64(0.08603438905970506), + }, + 92: { + Finvc: float64(0.9110320403624034), + Flogc: float64(0.09317721180013905), + }, + 93: { + Finvc: float64(0.9045935839762024), + Flogc: float64(0.10026951462748457), + }, + 94: { + Finvc: float64(0.8982456375922825), + Flogc: float64(0.10731170956330516), + }, + 95: { + Finvc: float64(0.8919860966782501), + Flogc: float64(0.11430473320717738), + }, + 96: { + Finvc: float64(0.8858131121185129), + Flogc: float64(0.12124928503033061), + }, + 97: { + Finvc: float64(0.879725075760676), + Flogc: float64(0.12814583422959913), + }, + 98: { + Finvc: float64(0.8737201372634685), + Flogc: float64(0.1349951636851756), + }, + 99: { + Finvc: float64(0.8677966405782273), + Flogc: float64(0.1417978768189414), + }, + 100: { + Finvc: float64(0.8619528050060739), + Flogc: float64(0.14855476039031146), + }, + 101: { + Finvc: float64(0.8561872354420692), + Flogc: float64(0.1552661937658968), + }, + 102: { + Finvc: float64(0.8504983927816893), + Flogc: float64(0.16193275688146969), + }, + 103: { + Finvc: float64(0.8448844572790304), + Flogc: float64(0.16855539792220497), + }, + 104: { + Finvc: float64(0.8393442741575965), + Flogc: float64(0.1751343179947753), + }, + 105: { + Finvc: float64(0.8338762249349438), + Flogc: float64(0.1816702989864325), + }, + 106: { + Finvc: float64(0.8284789320557778), + Flogc: float64(0.18816387146023317), + }, + 107: { + Finvc: float64(0.8231510800065832), + Flogc: float64(0.1946155228479256), + }, + 108: { + Finvc: float64(0.8178913903778707), + Flogc: float64(0.20102572579389744), + }, + 109: { + Finvc: float64(0.8126984007245374), + Flogc: float64(0.2073952090795501), + }, + 110: { + Finvc: float64(0.8075710029460227), + Flogc: float64(0.21372429840596396), + }, + 111: { + Finvc: float64(0.8025078881160415), + Flogc: float64(0.2200135945981856), + }, + 112: { + Finvc: float64(0.7975077379364331), + Flogc: float64(0.22626374162859975), + }, + 113: { + Finvc: float64(0.792569604966373), + Flogc: float64(0.23247494747693054), + }, + 114: { + Finvc: float64(0.7876923641254114), + Flogc: float64(0.23864766620658884), + }, + 115: { + Finvc: float64(0.7828746724940998), + Flogc: float64(0.24478265647405806), + }, + 116: { + Finvc: float64(0.7781155388790811), + Flogc: float64(0.25088025827324145), + }, + 117: { + Finvc: float64(0.7734139557869777), + Flogc: float64(0.2569408552510595), + }, + 118: { + Finvc: float64(0.7687687179914933), + Flogc: float64(0.26296511155101143), + }, + 119: { + Finvc: float64(0.7641790698041854), + Flogc: float64(0.2689531327189343), + }, + 120: { + Finvc: float64(0.7596438763692399), + Flogc: float64(0.27490553924610595), + }, + 121: { + Finvc: float64(0.7551621951078668), + Flogc: float64(0.2808227248478943), + }, + 122: { + Finvc: float64(0.7507331780216866), + Flogc: float64(0.286704979267256), + }, + 123: { + Finvc: float64(0.7463557196361751), + Flogc: float64(0.29255295645509705), + }, + 124: { + Finvc: float64(0.7420289364869653), + Flogc: float64(0.2983670386142876), + }, + 125: { + Finvc: float64(0.7377521537065876), + Flogc: float64(0.30414734587282055), + }, + 126: { + Finvc: float64(0.7335242966002608), + Flogc: float64(0.30989455774829366), + }, + 127: { + Finvc: float64(0.729344777457841), + Flogc: float64(0.31560871301871884), + }, + }, +} + +var X__logf_data = Tlogf_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.33569133332882284), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.2929040563774074), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.2518726580937369), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.21245868807117255), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.17453945183745634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.1380057072319758), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.10275976698545139), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.06871392447020525), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.0357891387398228), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.05204517742929496), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.11081431298787942), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.1652495223695143), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.21687389031699977), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.2659635028121397), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.3127556664073557), + }, + }, + Fln2: float64(0.6931471805599453), + Fpoly: [3]float64{ + 0: -Float64FromFloat64(0.25089342214237154), + 1: float64(0.333456765744066), + 2: -Float64FromFloat64(0.4999997485802103), + }, +} + +var X__optpos int32 + +var Xoptreset int32 + +var X__pow_log_data = Tpow_log_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [7]float64{ + 0: -Float64FromFloat64(0.5), + 1: Float64FromFloat64(0.3333333333333339) * float64(-Int32FromInt32(2)), + 2: -Float64FromFloat64(0.25000000000000033) * float64(-Int32FromInt32(2)), + 3: Float64FromFloat64(0.1999999998830994) * Float64FromInt32(4), + 4: -Float64FromFloat64(0.16666666658719348) * Float64FromInt32(4), + 5: Float64FromFloat64(0.14286370355743763) * float64(-Int32FromInt32(8)), + 6: -Float64FromFloat64(0.12500519079594427) * float64(-Int32FromInt32(8)), + }, + Ftab: [128]struct { + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + }{ + 0: { + Finvc: float64(1.4140625), + Flogc: -Float64FromFloat64(0.3464667673462145), + Flogctail: float64(5.929407345889625e-15), + }, + 1: { + Finvc: float64(1.40625), + Flogc: -Float64FromFloat64(0.34092658697056777), + Flogctail: -Float64FromFloat64(2.544157440035963e-14), + }, + 2: { + Finvc: float64(1.3984375), + Flogc: -Float64FromFloat64(0.3353555419211034), + Flogctail: -Float64FromFloat64(3.443525940775045e-14), + }, + 3: { + Finvc: float64(1.390625), + Flogc: -Float64FromFloat64(0.3297532863724655), + Flogctail: -Float64FromFloat64(2.500123826022799e-15), + }, + 4: { + Finvc: float64(1.3828125), + Flogc: -Float64FromFloat64(0.32411946865420305), + Flogctail: -Float64FromFloat64(8.929337133850617e-15), + }, + 5: { + Finvc: float64(1.375), + Flogc: -Float64FromFloat64(0.31845373111855224), + Flogctail: float64(1.7625431312172662e-14), + }, + 6: { + Finvc: float64(1.3671875), + Flogc: -Float64FromFloat64(0.31275571000389846), + Flogctail: float64(1.5688303180062087e-15), + }, + 7: { + Finvc: float64(1.359375), + Flogc: -Float64FromFloat64(0.3070250352949415), + Flogctail: float64(2.9655274673691784e-14), + }, + 8: { + Finvc: float64(1.3515625), + Flogc: -Float64FromFloat64(0.3012613305781997), + Flogctail: float64(3.7923164802093147e-14), + }, + 9: { + Finvc: float64(1.34375), + Flogc: -Float64FromFloat64(0.2954642128938758), + Flogctail: float64(3.993416384387844e-14), + }, + 10: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 11: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 12: { + Finvc: float64(1.328125), + Flogc: -Float64FromFloat64(0.28376817313062475), + Flogctail: -Float64FromFloat64(1.9852665484979036e-14), + }, + 13: { + Finvc: float64(1.3203125), + Flogc: -Float64FromFloat64(0.27786845100342816), + Flogctail: -Float64FromFloat64(2.814323765595281e-14), + }, + 14: { + Finvc: float64(1.3125), + Flogc: -Float64FromFloat64(0.2719337154836694), + Flogctail: float64(2.7643769993528702e-14), + }, + 15: { + Finvc: float64(1.3046875), + Flogc: -Float64FromFloat64(0.2659635484970977), + Flogctail: -Float64FromFloat64(4.025092402293806e-14), + }, + 16: { + Finvc: float64(1.296875), + Flogc: -Float64FromFloat64(0.25995752443691345), + Flogctail: -Float64FromFloat64(1.2621729398885316e-14), + }, + 17: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 18: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 19: { + Finvc: float64(1.28125), + Flogc: -Float64FromFloat64(0.2478361639045943), + Flogctail: float64(1.3029797173308663e-14), + }, + 20: { + Finvc: float64(1.2734375), + Flogc: -Float64FromFloat64(0.2417199368871934), + Flogctail: float64(4.8230289429940886e-14), + }, + 21: { + Finvc: float64(1.265625), + Flogc: -Float64FromFloat64(0.23556607131274632), + Flogctail: -Float64FromFloat64(2.0592242769647135e-14), + }, + 22: { + Finvc: float64(1.2578125), + Flogc: -Float64FromFloat64(0.22937410106487732), + Flogctail: float64(3.149265065191484e-14), + }, + 23: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 24: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 25: { + Finvc: float64(1.2421875), + Flogc: -Float64FromFloat64(0.21687393830063684), + Flogctail: float64(2.2477465222466186e-14), + }, + 26: { + Finvc: float64(1.234375), + Flogc: -Float64FromFloat64(0.21056476910735), + Flogctail: float64(3.6507188831790577e-16), + }, + 27: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 28: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 29: { + Finvc: float64(1.21875), + Flogc: -Float64FromFloat64(0.19782574332987224), + Flogctail: -Float64FromFloat64(4.7641388950792196e-14), + }, + 30: { + Finvc: float64(1.2109375), + Flogc: -Float64FromFloat64(0.19139485299967873), + Flogctail: float64(4.9278276214647115e-14), + }, + 31: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 32: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 33: { + Finvc: float64(1.1953125), + Flogc: -Float64FromFloat64(0.1784076574728033), + Flogctail: -Float64FromFloat64(1.5003333854266542e-14), + }, + 34: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 35: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 36: { + Finvc: float64(1.1796875), + Flogc: -Float64FromFloat64(0.1652495728952772), + Flogctail: -Float64FromFloat64(2.99659267292569e-14), + }, + 37: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 38: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 39: { + Finvc: float64(1.1640625), + Flogc: -Float64FromFloat64(0.15191604202584585), + Flogctail: float64(3.879296723063646e-15), + }, + 40: { + Finvc: float64(1.15625), + Flogc: -Float64FromFloat64(0.1451820098444614), + Flogctail: -Float64FromFloat64(3.6506824353335045e-14), + }, + 41: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 42: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 43: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 44: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 45: { + Finvc: float64(1.1328125), + Flogc: -Float64FromFloat64(0.12470347850091912), + Flogctail: -Float64FromFloat64(3.811763084710266e-14), + }, + 46: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 47: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 48: { + Finvc: float64(1.1171875), + Flogc: -Float64FromFloat64(0.11081436634026431), + Flogctail: -Float64FromFloat64(2.5799991283069902e-14), + }, + 49: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 50: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 51: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 52: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 53: { + Finvc: float64(1.09375), + Flogc: -Float64FromFloat64(0.089612158689647), + Flogctail: -Float64FromFloat64(4.012913552726574e-14), + }, + 54: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 55: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 56: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 57: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 58: { + Finvc: float64(1.0703125), + Flogc: -Float64FromFloat64(0.06795066190852594), + Flogctail: float64(1.8195060030168815e-14), + }, + 59: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 60: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 61: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 62: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 63: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 64: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 65: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 66: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 67: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 68: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 69: { + Finvc: float64(1.0234375), + Flogc: -Float64FromFloat64(0.023167059281490765), + Flogctail: -Float64FromFloat64(4.361324067851568e-14), + }, + 70: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 71: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 72: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 73: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 74: { + Finvc: float64(1), + }, + 75: { + Finvc: float64(1), + }, + 76: { + Finvc: float64(0.9921875), + Flogc: float64(0.007843177461040796), + Flogctail: -Float64FromFloat64(1.4902732911301337e-14), + }, + 77: { + Finvc: float64(0.984375), + Flogc: float64(0.01574835696817445), + Flogctail: -Float64FromFloat64(3.527980389655325e-14), + }, + 78: { + Finvc: float64(0.9765625), + Flogc: float64(0.023716526617363343), + Flogctail: -Float64FromFloat64(4.730054772033249e-14), + }, + 79: { + Finvc: float64(0.96875), + Flogc: float64(0.03174869831457272), + Flogctail: float64(7.580310369375161e-15), + }, + 80: { + Finvc: float64(0.9609375), + Flogc: float64(0.039845908547249564), + Flogctail: -Float64FromFloat64(4.9893776716773285e-14), + }, + 81: { + Finvc: float64(0.953125), + Flogc: float64(0.048009219186383234), + Flogctail: -Float64FromFloat64(2.262629393030674e-14), + }, + 82: { + Finvc: float64(0.9453125), + Flogc: float64(0.056239718322899535), + Flogctail: -Float64FromFloat64(2.345674491018699e-14), + }, + 83: { + Finvc: float64(0.94140625), + Flogc: float64(0.06038051098892083), + Flogctail: -Float64FromFloat64(1.3352588834854848e-14), + }, + 84: { + Finvc: float64(0.93359375), + Flogc: float64(0.06871389254808946), + Flogctail: -Float64FromFloat64(3.765296820388875e-14), + }, + 85: { + Finvc: float64(0.92578125), + Flogc: float64(0.07711730334438016), + Flogctail: float64(5.1128335719851986e-14), + }, + 86: { + Finvc: float64(0.91796875), + Flogc: float64(0.08559193033545398), + Flogctail: -Float64FromFloat64(5.046674438470119e-14), + }, + 87: { + Finvc: float64(0.9140625), + Flogc: float64(0.08985632912185793), + Flogctail: float64(3.1218748807418837e-15), + }, + 88: { + Finvc: float64(0.90625), + Flogc: float64(0.09844007281321865), + Flogctail: float64(3.3871241029241416e-14), + }, + 89: { + Finvc: float64(0.8984375), + Flogc: float64(0.10709813555638448), + Flogctail: -Float64FromFloat64(1.7376727386423858e-14), + }, + 90: { + Finvc: float64(0.89453125), + Flogc: float64(0.11145544092528326), + Flogctail: float64(3.957125899799804e-14), + }, + 91: { + Finvc: float64(0.88671875), + Flogc: float64(0.12022742699821265), + Flogctail: -Float64FromFloat64(5.2849453521890294e-14), + }, + 92: { + Finvc: float64(0.8828125), + Flogc: float64(0.12464244520731427), + Flogctail: -Float64FromFloat64(3.767012502308738e-14), + }, + 93: { + Finvc: float64(0.875), + Flogc: float64(0.13353139262449076), + Flogctail: float64(3.1859736349078334e-14), + }, + 94: { + Finvc: float64(0.87109375), + Flogc: float64(0.13800567301939282), + Flogctail: float64(5.0900642926060466e-14), + }, + 95: { + Finvc: float64(0.86328125), + Flogc: float64(0.14701474296180095), + Flogctail: float64(8.710783796122478e-15), + }, + 96: { + Finvc: float64(0.859375), + Flogc: float64(0.15154989812720032), + Flogctail: float64(6.157896229122976e-16), + }, + 97: { + Finvc: float64(0.8515625), + Flogc: float64(0.16068238169043525), + Flogctail: float64(3.821577743916796e-14), + }, + 98: { + Finvc: float64(0.84765625), + Flogc: float64(0.16528009093906348), + Flogctail: float64(3.9440046718453496e-14), + }, + 99: { + Finvc: float64(0.83984375), + Flogc: float64(0.17453941635187675), + Flogctail: float64(2.2924522154618074e-14), + }, + 100: { + Finvc: float64(0.8359375), + Flogc: float64(0.17920142945774842), + Flogctail: -Float64FromFloat64(3.742530094732263e-14), + }, + 101: { + Finvc: float64(0.83203125), + Flogc: float64(0.18388527877016259), + Flogctail: -Float64FromFloat64(2.5223102140407338e-14), + }, + 102: { + Finvc: float64(0.82421875), + Flogc: float64(0.1933193110035063), + Flogctail: -Float64FromFloat64(1.0320443688698849e-14), + }, + 103: { + Finvc: float64(0.8203125), + Flogc: float64(0.19806991376208316), + Flogctail: float64(1.0634128304268335e-14), + }, + 104: { + Finvc: float64(0.8125), + Flogc: float64(0.20763936477828793), + Flogctail: -Float64FromFloat64(4.3425422595242564e-14), + }, + 105: { + Finvc: float64(0.80859375), + Flogc: float64(0.21245865121420593), + Flogctail: -Float64FromFloat64(1.2527395755711364e-14), + }, + 106: { + Finvc: float64(0.8046875), + Flogc: float64(0.21730127569003344), + Flogctail: -Float64FromFloat64(5.204008743405884e-14), + }, + 107: { + Finvc: float64(0.80078125), + Flogc: float64(0.22216746534115828), + Flogctail: -Float64FromFloat64(3.979844515951702e-15), + }, + 108: { + Finvc: float64(0.79296875), + Flogc: float64(0.2319714654378231), + Flogctail: -Float64FromFloat64(4.7955860343296286e-14), + }, + 109: { + Finvc: float64(0.7890625), + Flogc: float64(0.2369097470783572), + Flogctail: float64(5.015686013791602e-16), + }, + 110: { + Finvc: float64(0.78515625), + Flogc: float64(0.24187253642048745), + Flogctail: -Float64FromFloat64(7.252318953240293e-16), + }, + 111: { + Finvc: float64(0.78125), + Flogc: float64(0.2468600779315011), + Flogctail: float64(2.4688324156011588e-14), + }, + 112: { + Finvc: float64(0.7734375), + Flogc: float64(0.2569104137850218), + Flogctail: float64(5.465121253624792e-15), + }, + 113: { + Finvc: float64(0.76953125), + Flogc: float64(0.26197371574153294), + Flogctail: float64(4.102651071698446e-14), + }, + 114: { + Finvc: float64(0.765625), + Flogc: float64(0.2670627852490952), + Flogctail: -Float64FromFloat64(4.996736502345936e-14), + }, + 115: { + Finvc: float64(0.76171875), + Flogc: float64(0.27217788591576664), + Flogctail: float64(4.903580708156347e-14), + }, + 116: { + Finvc: float64(0.7578125), + Flogc: float64(0.27731928541618345), + Flogctail: float64(5.089628039500759e-14), + }, + 117: { + Finvc: float64(0.75390625), + Flogc: float64(0.28248725557466514), + Flogctail: float64(1.1782016386565151e-14), + }, + 118: { + Finvc: float64(0.74609375), + Flogc: float64(0.29290401643288533), + Flogctail: float64(4.727452940514406e-14), + }, + 119: { + Finvc: float64(0.7421875), + Flogc: float64(0.29815337231912054), + Flogctail: -Float64FromFloat64(4.4204083338755686e-14), + }, + 120: { + Finvc: float64(0.73828125), + Flogc: float64(0.3034304294199046), + Flogctail: float64(1.548345993498083e-14), + }, + 121: { + Finvc: float64(0.734375), + Flogc: float64(0.30873548164959175), + Flogctail: float64(2.1522127491642888e-14), + }, + 122: { + Finvc: float64(0.73046875), + Flogc: float64(0.3140688276249648), + Flogctail: float64(1.1054030169005386e-14), + }, + 123: { + Finvc: float64(0.7265625), + Flogc: float64(0.31943077076641657), + Flogctail: -Float64FromFloat64(5.534326352070679e-14), + }, + 124: { + Finvc: float64(0.72265625), + Flogc: float64(0.3248216194012912), + Flogctail: -Float64FromFloat64(5.351646604259541e-14), + }, + 125: { + Finvc: float64(0.71875), + Flogc: float64(0.33024168687052224), + Flogctail: float64(5.4612144489920215e-14), + }, + 126: { + Finvc: float64(0.71484375), + Flogc: float64(0.3356912916381134), + Flogctail: float64(2.8136969901227338e-14), + }, + 127: { + Finvc: float64(0.7109375), + Flogc: float64(0.3411707574027787), + Flogctail: -Float64FromFloat64(1.156568624616423e-14), + }, + }, +} + +var X__powf_log2_data = Tpowf_log2_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673) * float64(Int32FromInt32(1)<> int32(32)) + *(*int32)(unsafe.Pointer(expt)) = int32(hx>>Int32FromInt32(20) - uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1023)) + _k) + v1 = uint64(hx&Uint32FromInt32(0xfffff)|uint32((Int32FromInt32(0x3ff)+Int32FromInt32(1023))<= ln(DBL_MAX)) +// * where care is needed to avoid overflow. +// * +// * The present implementation is narrowly tailored for our hyperbolic and +// * exponential functions. We assume expt is small (0 or -1), and the caller +// * has filtered out very large x, for which overflow would be inevitable. +// */ +func X__ldexp_cexp(tls *TLS, z complex128, expt int32) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v expt=%v, (%v:)", tls, z, expt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float64 + var half_expt int32 + var v1, v2 Tuint64_t + var v3 [2]float64 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_exp(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + /* + * Arrange so that scale1 * scale2 == 2**expt. We use this to + * compensate for scalbn being horrendously slow. + */ + half_expt = expt / int32(2) + v1 = uint64((Int32FromInt32(0x3ff)+half_expt)<>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(127)) + _k1) + v1 = hx&uint32(0x7fffff) | uint32((Int32FromInt32(0x7f)+Int32FromInt32(127))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var exp_x, scale1, scale2, x, y float32 + var half_expt int32 + var v1, v2 Tuint32_t + var v3 [2]float32 + var _ /* ex_expt at bp+0 */ int32 + _, _, _, _, _, _, _, _, _ = exp_x, half_expt, scale1, scale2, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + exp_x = ___frexp_expf(tls, x, bp) + expt += *(*int32)(unsafe.Pointer(bp)) + half_expt = expt / int32(2) + v1 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale1 = *(*float32)(unsafe.Pointer(&v1)) + half_expt = expt - half_expt + v2 = uint32((int32(0x7f) + half_expt) << int32(23)) + scale2 = *(*float32)(unsafe.Pointer(&v2)) + v3 = [2]float32{ + 0: Xcosf(tls, y) * exp_x * scale1 * scale2, + 1: Xsinf(tls, y) * exp_x * scale1 * scale2, + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +func Xcabs(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypot(tls, Float64FromComplex128(z), +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xhypotf(tls, Float32FromComplex64(z), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]) +} + +func Xcabsl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcabs(tls, Complex128FromComplex128(z)) +} + +const M_PI_21 = 1.5707963267948966 + +// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 + +/* acos(z) = pi/2 - asin(z) */ + +func Xcacos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + z = Xcasin(tls, z) + v1 = [2]float64{ + 0: float64(1.5707963267948966) - Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +var _float_pi_2 = float32(1.5707963267948966) + +func Xcacosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + z = Xcasinf(tls, z) + v1 = [2]float32{ + 0: _float_pi_2 - Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +const M_PI_22 = 0 + +/* acosh(z) = i acos(z) */ + +func Xcacosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint64 + var v3, v4 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float64)(unsafe.Pointer(bp)) = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(63)) + z = Xcacos(tls, z) + if zineg != 0 { + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var zineg int32 + var v1 uint32 + var v3, v4 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = zineg, v1, v3, v4 + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + zineg = int32(v1 >> Int32FromInt32(31)) + z = Xcacosf(tls, z) + if zineg != 0 { + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + v4 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + return r +} + +func Xcacoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacosh(tls, Complex128FromComplex128(z))) +} + +func Xcacosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcacos(tls, Complex128FromComplex128(z))) +} + +func Xcarg(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2(tls, +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], Float64FromComplex128(z)) +} + +func Xcargf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan2f(tls, +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], Float32FromComplex64(z)) +} + +func Xcargl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcarg(tls, Complex128FromComplex128(z)) +} + +// FIXME + +/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ + +func Xcasin(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex128 + var x, y float64 + var v1, v2, v3 [2]float64 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float64{ + 0: float64(1) - (x-y)*(x+y), + 1: -Float64FromFloat64(2) * x * y, + } + w = *(*complex128)(unsafe.Pointer(&v1)) + v2 = [2]float64{ + 0: -y, + 1: x, + } + r = Xclog(tls, *(*complex128)(unsafe.Pointer(&v2))+Xcsqrt(tls, w)) + v3 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float64FromComplex128(r), + } + return *(*complex128)(unsafe.Pointer(&v3)) +} + +// FIXME + +func Xcasinf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w complex64 + var x, y float32 + var v1, v2, v3 [2]float32 + _, _, _, _, _, _, _ = r, w, x, y, v1, v2, v3 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v1 = [2]float32{ + 0: float32(Float64FromFloat64(1) - float64((x-y)*(x+y))), + 1: float32(-Float64FromFloat64(2) * float64(x) * float64(y)), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + v2 = [2]float32{ + 0: -y, + 1: x, + } + r = Xclogf(tls, *(*complex64)(unsafe.Pointer(&v2))+Xcsqrtf(tls, w)) + v3 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&r)))[int32(1)], + 1: -Float32FromComplex64(r), + } + return *(*complex64)(unsafe.Pointer(&v3)) +} + +/* asinh(z) = -i asin(i z) */ + +func Xcasinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcasin(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcasinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcasinf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcasinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasinh(tls, Complex128FromComplex128(z))) +} + +func Xcasinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcasin(tls, Complex128FromComplex128(z))) +} + +const MAXNUM = 0 +const M_PI1 = 3.141592653589793 + +var _DP1 = float64(3.141592651605606) +var _DP2 = float64(1.9841871479187034e-09) +var _DP3 = float64(1.1442377452219664e-17) + +func __redupi(tls *TLS, x float64) (r float64) { + var i int64 + var t float64 + _, _ = i, t + t = x / float64(3.141592653589793) + if t >= float64(0) { + t += float64(0.5) + } else { + t -= float64(0.5) + } + i = int64(t) /* the multiple */ + t = float64(i) + t = x - t*_DP1 - t*_DP2 - t*_DP3 + return t +} + +func Xcatan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float64 + var w complex128 + var v1 [2]float64 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = float64(1) - x2 - y*y + t = float64(0.5) * Xatan2(tls, float64(2)*x, a) + w = Complex128FromFloat64(__redupi(tls, t)) + t = y - float64(1) + a = x2 + t*t + t = y + float64(1) + a = (x2 + t*t) / a + v1 = [2]float64{ + 0: Float64FromComplex128(w), + 1: float64(0.25) * Xlog(tls, a), + } + w = *(*complex128)(unsafe.Pointer(&v1)) + return w +} + +const MAXNUMF = 0 + +var _DP11 = float64(3.140625) +var _DP21 = float64(0.0009675025939941406) +var _DP31 = float64(1.5099579909783765e-07) + +var _float_pi = float32(3.141592653589793) + +func __redupif(tls *TLS, xx float32) (r float32) { + var i int64 + var t, x float32 + _, _, _ = i, t, x + x = xx + t = x / _float_pi + if t >= Float32FromFloat32(0) { + t += Float32FromFloat32(0.5) + } else { + t -= Float32FromFloat32(0.5) + } + i = int64(t) /* the multiple */ + t = float32(i) + t = float32(float64(x) - float64(t)*_DP11 - float64(t)*_DP21 - float64(t)*_DP31) + return t +} + +func Xcatanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, t, x, x2, y float32 + var w complex64 + var v1 [2]float32 + _, _, _, _, _, _, _ = a, t, w, x, x2, y, v1 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + x2 = x * x + a = Float32FromFloat32(1) - x2 - y*y + t = Float32FromFloat32(0.5) * Xatan2f(tls, Float32FromFloat32(2)*x, a) + w = Complex64FromFloat32(__redupif(tls, t)) + t = y - Float32FromFloat32(1) + a = x2 + t*t + t = y + Float32FromFloat32(1) + a = (x2 + t*t) / a + v1 = [2]float32{ + 0: Float32FromComplex64(w), + 1: Float32FromFloat32(0.25) * Xlogf(tls, a), + } + w = *(*complex64)(unsafe.Pointer(&v1)) + return w +} + +const M_PI2 = 0 + +/* atanh = -i atan(i z) */ + +func Xcatanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcatan(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcatanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcatanf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xcatanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatanh(tls, Complex128FromComplex128(z))) +} + +func Xcatanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcatan(tls, Complex128FromComplex128(z))) +} + +/* cos(z) = cosh(i z) */ + +func Xccos(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + return Xccosh(tls, *(*complex128)(unsafe.Pointer(&v1))) +} + +func Xccosf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + return Xccoshf(tls, *(*complex64)(unsafe.Pointer(&v1))) +} + +var _huge = float64(8.98846567431158e+307) + +func Xccosh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xcosh(tls, x), + 1: x * y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xcosh(tls, x) * Xcos(tls, y), + 1: Xsinh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: h * Xcos(tls, y), + 1: Xcopysign(tls, h, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] * Xcopysign(tls, Float64FromInt32(1), x), + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge * x + v6 = [2]float64{ + 0: h * h * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: y - y, + 1: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. + * + * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. + * The sign of 0 in the result is unspecified. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), x) * y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x * x, + 1: Xcopysign(tls, Float64FromInt32(0), (x+x)*y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * cosh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * cosh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * cosh(+-Inf + I NaN) = +Inf + I d(NaN). + * + * cosh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * x * Xcos(tls, y), + 1: x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * cosh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * cosh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge1 = float32(1.7014118346046923e+38) + +func Xccoshf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xcoshf(tls, x), + 1: x * y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xcoshf(tls, x) * Xcosf(tls, y), + 1: Xsinhf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: Xcopysignf(tls, h, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] * Xcopysignf(tls, Float32FromInt32(1), x), + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge1 * x + v6 = [2]float32{ + 0: h * h * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: y - y, + 1: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), x) * y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x * x, + 1: Xcopysignf(tls, Float32FromInt32(0), (x+x)*y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * x * Xcosf(tls, y), + 1: x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xccoshl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccosh(tls, Complex128FromComplex128(z))) +} + +func Xccosl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xccos(tls, Complex128FromComplex128(z))) +} + +var _exp_ovfl = uint32(0x40862e42) /* high bits of MAX_EXP * ln2 ~= 710 */ +var _cexp_ovfl = uint32(0x4096b8e4) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexp(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var exp_x, x, y float64 + var hx, hy, lx, ly Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, exp_x, hx, hy, lx, ly, x, y, v1, v2, v3, v4, v5, v6 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = uint32(__u >> int32(32)) + ly = uint32(__u) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy|ly == uint32(0) { + v1 = [2]float64{ + 0: Xexp(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff)|lx == uint32(0) { + v2 = [2]float64{ + 0: Xcos(tls, y), + 1: Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7ff00000) { + if lx != uint32(0) || hx&uint32(0x7fffffff) != uint32(0x7ff00000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float64{ + 0: y - y, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float64{} + return *(*complex128)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float64{ + 0: x, + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl && hx <= _cexp_ovfl { + /* + * x is between 709.7 and 1454.3, so we must scale to avoid + * overflow in exp(x). + */ + return X__ldexp_cexp(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexp(tls, x) + v6 = [2]float64{ + 0: exp_x * Xcos(tls, y), + 1: exp_x * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + return r +} + +var _exp_ovfl1 = uint32(0x42b17218) /* MAX_EXP * ln2 ~= 88.722839355 */ +var _cexp_ovfl1 = uint32(0x43400074) /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ + +func Xcexpf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var exp_x, x, y float32 + var hx, hy Tuint32_t + var v1, v2, v3, v4, v5, v6 [2]float32 + _, _, _, _, _, _, _, _, _, _, _ = exp_x, hx, hy, x, y, v1, v2, v3, v4, v5, v6 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hy = *(*Tuint32_t)(unsafe.Pointer(&y)) + hy &= uint32(0x7fffffff) + /* cexp(x + I 0) = exp(x) + I 0 */ + if hy == uint32(0) { + v1 = [2]float32{ + 0: Xexpf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + /* cexp(0 + I y) = cos(y) + I sin(y) */ + if hx&uint32(0x7fffffff) == uint32(0) { + v2 = [2]float32{ + 0: Xcosf(tls, y), + 1: Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + if hy >= uint32(0x7f800000) { + if hx&uint32(0x7fffffff) != uint32(0x7f800000) { + /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ + v3 = [2]float32{ + 0: y - y, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if hx&uint32(0x80000000) != 0 { + /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ + v4 = [2]float32{} + return *(*complex64)(unsafe.Pointer(&v4)) + } else { + /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ + v5 = [2]float32{ + 0: x, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v5)) + } + } + } + if hx >= _exp_ovfl1 && hx <= _cexp_ovfl1 { + /* + * x is between 88.7 and 192, so we must scale to avoid + * overflow in expf(x). + */ + return X__ldexp_cexpf(tls, z, 0) + } else { + /* + * Cases covered here: + * - x < exp_ovfl and exp(x) won't overflow (common case) + * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 + * - x = +-Inf (generated by exp()) + * - x = NaN (spurious inexact exception from y) + */ + exp_x = Xexpf(tls, x) + v6 = [2]float32{ + 0: exp_x * Xcosf(tls, y), + 1: exp_x * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcexpl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcexp(tls, Complex128FromComplex128(z))) +} + +func Xcimag(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] +} + +func Xcimagl(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] +} + +// FIXME + +/* log(z) = log(|z|) + i arg(z) */ + +func Xclog(tls *TLS, z complex128) (r1 complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float64 + var v1 [2]float64 + _, _, _ = phi, r, v1 + r = Xcabs(tls, z) + phi = Xcarg(tls, z) + v1 = [2]float64{ + 0: Xlog(tls, r), + 1: phi, + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +// FIXME + +func Xclogf(tls *TLS, z complex64) (r1 complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var phi, r float32 + var v1 [2]float32 + _, _, _ = phi, r, v1 + r = Xcabsf(tls, z) + phi = Xcargf(tls, z) + v1 = [2]float32{ + 0: Xlogf(tls, r), + 1: phi, + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xclogl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xclog(tls, Complex128FromComplex128(z))) +} + +func Xconj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +func Xconjf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float32 + _ = v1 + v1 = [2]float32{ + 0: Float32FromComplex64(z), + 1: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v1)) +} + +func Xconjl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 [2]float64 + _ = v1 + v1 = [2]float64{ + 0: Float64FromComplex128(z), + 1: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v1)) +} + +/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ + +func Xcpow(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexp(tls, c*Xclog(tls, z)) +} + +func Xcpowf(tls *TLS, z complex64, c complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcexpf(tls, c*Xclogf(tls, z)) +} + +func Xcpowl(tls *TLS, z complex128, c complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v c=%v, (%v:)", tls, z, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcpow(tls, Complex128FromComplex128(z), Complex128FromComplex128(c))) +} + +func Xcproj(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 bool + var v6 [2]float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = Float64FromComplex128(z) + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 bool + var v6 [2]float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = Float32FromComplex64(z) + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) == uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v6 = [2]float32{ + 0: X__builtin_inff(tls), + 1: Xcopysignf(tls, float32(0), +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)]), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + return z +} + +func Xcprojl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcproj(tls, Complex128FromComplex128(z))) +} + +func Xcreal(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +func Xcrealf(tls *TLS, z complex64) (r float32) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float32FromComplex64(z) +} + +func Xcreall(tls *TLS, z complex128) (r float64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Float64FromComplex128(z) +} + +/* sin(z) = -i sinh(i z) */ + +func Xcsin(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xcsinh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xcsinf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xcsinhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +var _huge2 = float64(8.98846567431158e+307) + +func Xcsinh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u, __u1 Tuint64_t + var h, x, y float64 + var hx, hy, ix, iy, lx, ly Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, __u1, h, hx, hy, ix, iy, lx, ly, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = int32(__u >> int32(32)) + lx = int32(uint32(__u)) + __u1 = *(*Tuint64_t)(unsafe.Pointer(&y)) + hy = int32(__u1 >> int32(32)) + ly = int32(uint32(__u1)) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + /* Handle the nearly-non-exceptional cases where x and y are finite. */ + if ix < int32(0x7ff00000) && iy < int32(0x7ff00000) { + if iy|ly == 0 { + v1 = [2]float64{ + 0: Xsinh(tls, x), + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + if ix < int32(0x40360000) { /* small x: normal case */ + v2 = [2]float64{ + 0: Xsinh(tls, x) * Xcos(tls, y), + 1: Xcosh(tls, x) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v2)) + } + /* |x| >= 22, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x40862e42) { + /* x < 710: exp(|x|) won't overflow */ + h = Xexp(tls, Xfabs(tls, x)) * float64(0.5) + v3 = [2]float64{ + 0: Xcopysign(tls, h, x) * Xcos(tls, y), + 1: h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4096bbaa) { + /* x < 1455: scale to avoid overflow */ + v4 = [2]float64{ + 0: Xfabs(tls, x), + 1: y, + } + z = X__ldexp_cexp(tls, *(*complex128)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float64{ + 0: Float64FromComplex128(z) * Xcopysign(tls, Float64FromInt32(1), x), + 1: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex128)(unsafe.Pointer(&v5)) + } else { + /* x >= 1455: the result always overflows */ + h = _huge2 * x + v6 = [2]float64{ + 0: h * Xcos(tls, y), + 1: h * h * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v6)) + } + } + } + /* + * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. + * The sign of 0 in the result is unspecified. Choice = normally + * the same as dNaN. Raise the invalid floating-point exception. + * + * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). + * The sign of 0 in the result is unspecified. Choice = normally + * the same as d(NaN). + */ + if ix|lx == 0 && iy >= int32(0x7ff00000) { + v7 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex128)(unsafe.Pointer(&v7)) + } + /* + * sinh(+-Inf +- I 0) = +-Inf + I +-0. + * + * sinh(NaN +- I 0) = d(NaN) + I +-0. + */ + if iy|ly == 0 && ix >= int32(0x7ff00000) { + if hx&int32(0xfffff)|lx == 0 { + v8 = [2]float64{ + 0: x, + 1: y, + } + return *(*complex128)(unsafe.Pointer(&v8)) + } + v9 = [2]float64{ + 0: x, + 1: Xcopysign(tls, Float64FromInt32(0), y), + } + return *(*complex128)(unsafe.Pointer(&v9)) + } + /* + * sinh(x +- I Inf) = dNaN + I dNaN. + * Raise the invalid floating-point exception for finite nonzero x. + * + * sinh(x + I NaN) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero x. Choice = don't raise (except for signaling NaNs). + */ + if ix < int32(0x7ff00000) && iy >= int32(0x7ff00000) { + v10 = [2]float64{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v10)) + } + /* + * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). + * The sign of Inf in the result is unspecified. Choice = normally + * the same as d(NaN). + * + * sinh(+-Inf +- I Inf) = +Inf + I dNaN. + * The sign of Inf in the result is unspecified. Choice = always +. + * Raise the invalid floating-point exception. + * + * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) + */ + if ix >= int32(0x7ff00000) && hx&int32(0xfffff)|lx == 0 { + if iy >= int32(0x7ff00000) { + v11 = [2]float64{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v11)) + } + v12 = [2]float64{ + 0: x * Xcos(tls, y), + 1: float64(X__builtin_inff(tls)) * Xsin(tls, y), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* + * sinh(NaN + I NaN) = d(NaN) + I d(NaN). + * + * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception. + * Choice = raise. + * + * sinh(NaN + I y) = d(NaN) + I d(NaN). + * Optionally raises the invalid floating-point exception for finite + * nonzero y. Choice = don't raise (except for signaling NaNs). + */ + v13 = [2]float64{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +var _huge3 = float32(1.7014118346046923e+38) + +func Xcsinhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, x, y float32 + var hx, hy, ix, iy Tint32_t + var v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 [2]float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = h, hx, hy, ix, iy, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v7, v8, v9 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = int32(*(*Tuint32_t)(unsafe.Pointer(&x))) + hy = int32(*(*Tuint32_t)(unsafe.Pointer(&y))) + ix = int32(0x7fffffff) & hx + iy = int32(0x7fffffff) & hy + if ix < int32(0x7f800000) && iy < int32(0x7f800000) { + if iy == 0 { + v1 = [2]float32{ + 0: Xsinhf(tls, x), + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + if ix < int32(0x41100000) { /* small x: normal case */ + v2 = [2]float32{ + 0: Xsinhf(tls, x) * Xcosf(tls, y), + 1: Xcoshf(tls, x) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v2)) + } + /* |x| >= 9, so cosh(x) ~= exp(|x|) */ + if ix < int32(0x42b17218) { + /* x < 88.7: expf(|x|) won't overflow */ + h = Xexpf(tls, Xfabsf(tls, x)) * Float32FromFloat32(0.5) + v3 = [2]float32{ + 0: Xcopysignf(tls, h, x) * Xcosf(tls, y), + 1: h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v3)) + } else { + if ix < int32(0x4340b1e7) { + /* x < 192.7: scale to avoid overflow */ + v4 = [2]float32{ + 0: Xfabsf(tls, x), + 1: y, + } + z = X__ldexp_cexpf(tls, *(*complex64)(unsafe.Pointer(&v4)), -int32(1)) + v5 = [2]float32{ + 0: Float32FromComplex64(z) * Xcopysignf(tls, Float32FromInt32(1), x), + 1: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + } + return *(*complex64)(unsafe.Pointer(&v5)) + } else { + /* x >= 192.7: the result always overflows */ + h = _huge3 * x + v6 = [2]float32{ + 0: h * Xcosf(tls, y), + 1: h * h * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v6)) + } + } + } + if ix == 0 && iy >= int32(0x7f800000) { + v7 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(0), x*(y-y)), + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v7)) + } + if iy == 0 && ix >= int32(0x7f800000) { + if hx&int32(0x7fffff) == 0 { + v8 = [2]float32{ + 0: x, + 1: y, + } + return *(*complex64)(unsafe.Pointer(&v8)) + } + v9 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), y), + } + return *(*complex64)(unsafe.Pointer(&v9)) + } + if ix < int32(0x7f800000) && iy >= int32(0x7f800000) { + v10 = [2]float32{ + 0: y - y, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= int32(0x7f800000) && hx&int32(0x7fffff) == 0 { + if iy >= int32(0x7f800000) { + v11 = [2]float32{ + 0: x * x, + 1: x * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v11)) + } + v12 = [2]float32{ + 0: x * Xcosf(tls, y), + 1: X__builtin_inff(tls) * Xsinf(tls, y), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + v13 = [2]float32{ + 0: x * x * (y - y), + 1: (x + x) * (y - y), + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xcsinhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsinh(tls, Complex128FromComplex128(z))) +} + +func Xcsinl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsin(tls, Complex128FromComplex128(z))) +} + +const THRESH = 7.446288774449766e+307 + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ + +func Xcsqrt(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b, t float64 + var result complex128 + var scale int32 + var v1, v12, v13, v14, v15, v4, v7 [2]float64 + var v10, v2, v5, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, result, scale, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float64FromComplex128(z) + b = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex128FromInt32(0) { + v1 = [2]float64{ + 1: b, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + *(*float64)(unsafe.Pointer(bp)) = b + v2 = *(*uint64)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&(-Uint64FromUint64(1)>>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + v12 = [2]float64{ + 0: Xfabs(tls, b-b), + 1: Xcopysign(tls, a, b), + } + return *(*complex128)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float64{ + 0: a, + 1: Xcopysign(tls, b-b, b), + } + return *(*complex128)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* Scale to avoid overflow. */ + if Xfabs(tls, a) >= float64(7.446288774449766e+307) || Xfabs(tls, b) >= float64(7.446288774449766e+307) { + a *= float64(0.25) + b *= float64(0.25) + scale = int32(1) + } else { + scale = 0 + } + /* Algorithm 312, CACM vol 10, Oct 1967. */ + if a >= Float64FromInt32(0) { + t = Xsqrt(tls, (a+Xhypot(tls, a, b))*float64(0.5)) + v14 = [2]float64{ + 0: t, + 1: b / (Float64FromInt32(2) * t), + } + result = *(*complex128)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (-a+Xhypot(tls, a, b))*float64(0.5)) + v15 = [2]float64{ + 0: Xfabs(tls, b) / (Float64FromInt32(2) * t), + 1: Xcopysign(tls, t, b), + } + result = *(*complex128)(unsafe.Pointer(&v15)) + } + /* Rescale. */ + if scale != 0 { + result *= Complex128FromInt32(2) + } + return result +} + +/* + * gcc doesn't implement complex multiplication or division correctly, + * so we need to handle infinities specially. We turn on this pragma to + * notify conforming c99 compilers that the fast-but-incorrect code that + * gcc generates is acceptable, since the special cases have already been + * handled. + */ + +func Xcsqrtf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, b float32 + var t float64 + var v1, v12, v13, v14, v15, v4, v7 [2]float32 + var v10, v2, v5, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, t, v1, v10, v12, v13, v14, v15, v2, v4, v5, v7, v8 + a = Float32FromComplex64(z) + b = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + /* Handle special cases. */ + if z == Complex64FromInt32(0) { + v1 = [2]float32{ + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + *(*float32)(unsafe.Pointer(bp)) = b + v2 = *(*uint32)(unsafe.Pointer(bp)) + goto _3 +_3: + if BoolInt32(v2&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v4 = [2]float32{ + 0: X__builtin_inff(tls), + 1: b, + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = a + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + if BoolInt32(v5&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + t = float64((b - b) / (b - b)) /* raise invalid if b is not a NaN */ + v7 = [2]float32{ + 0: a, + 1: float32(t), + } + return *(*complex64)(unsafe.Pointer(&v7)) /* return NaN + NaN i */ + } + *(*float32)(unsafe.Pointer(bp)) = a + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if BoolInt32(v8&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + /* + * csqrtf(inf + NaN i) = inf + NaN i + * csqrtf(inf + y i) = inf + 0 i + * csqrtf(-inf + NaN i) = NaN +- inf i + * csqrtf(-inf + y i) = 0 + inf i + */ + *(*float32)(unsafe.Pointer(bp)) = a + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v12 = [2]float32{ + 0: Xfabsf(tls, b-b), + 1: Xcopysignf(tls, a, b), + } + return *(*complex64)(unsafe.Pointer(&v12)) + } else { + v13 = [2]float32{ + 0: a, + 1: Xcopysignf(tls, b-b, b), + } + return *(*complex64)(unsafe.Pointer(&v13)) + } + } + /* + * The remaining special case (b is NaN) is handled just fine by + * the normal code path below. + */ + /* + * We compute t in double precision to avoid overflow and to + * provide correct rounding in nearly all cases. + * This is Algorithm 312, CACM vol 10, Oct 1967. + */ + if a >= Float32FromInt32(0) { + t = Xsqrt(tls, (float64(a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v14 = [2]float32{ + 0: float32(t), + 1: float32(float64(b) / (Float64FromFloat64(2) * t)), + } + return *(*complex64)(unsafe.Pointer(&v14)) + } else { + t = Xsqrt(tls, (float64(-a)+Xhypot(tls, float64(a), float64(b)))*float64(0.5)) + v15 = [2]float32{ + 0: float32(float64(Xfabsf(tls, b)) / (Float64FromFloat64(2) * t)), + 1: Xcopysignf(tls, float32(t), b), + } + return *(*complex64)(unsafe.Pointer(&v15)) + } + return r +} + +// C documentation +// +// //FIXME +func Xcsqrtl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xcsqrt(tls, Complex128FromComplex128(z))) +} + +/* tan(z) = -i tanh(i z) */ + +func Xctan(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float64 + _, _ = v1, v2 + v1 = [2]float64{ + 0: -+(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: Float64FromComplex128(z), + } + z = Xctanh(tls, *(*complex128)(unsafe.Pointer(&v1))) + v2 = [2]float64{ + 0: +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float64FromComplex128(z), + } + return *(*complex128)(unsafe.Pointer(&v2)) +} + +func Xctanf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 [2]float32 + _, _ = v1, v2 + v1 = [2]float32{ + 0: -+(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: Float32FromComplex64(z), + } + z = Xctanhf(tls, *(*complex64)(unsafe.Pointer(&v1))) + v2 = [2]float32{ + 0: +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)], + 1: -Float32FromComplex64(z), + } + return *(*complex64)(unsafe.Pointer(&v2)) +} + +func Xctanh(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, v3 Tuint64_t + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float64 + var hx, ix, lx Tuint32_t + var v1, v10, v12, v13, v4 [2]float64 + var v6, v8 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, beta, denom, exp_mx, hx, ix, lx, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float64FromComplex128(z) + y = +(*(*[2]float64)(unsafe.Pointer(&z)))[int32(1)] + __u1 = *(*Tuint64_t)(unsafe.Pointer(&x)) + hx = uint32(__u1 >> int32(32)) + lx = uint32(__u1) + ix = hx & uint32(0x7fffffff) + /* + * ctanh(NaN + i 0) = NaN + i 0 + * + * ctanh(NaN + i y) = NaN + i NaN for y != 0 + * + * The imaginary part has the sign of x*sin(2*y), but there's no + * special effort to get this right. + * + * ctanh(+-Inf +- i Inf) = +-1 +- 0 + * + * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite + * + * The imaginary part of the sign is unspecified. This special + * case is only needed to avoid a spurious invalid exception when + * y is infinite. + */ + if ix >= uint32(0x7ff00000) { + if ix&uint32(0xfffff)|lx != 0 { /* x is NaN */ + if y == Float64FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float64{ + 0: x, + 1: v2, + } + return *(*complex128)(unsafe.Pointer(&v1)) + } + v3 = uint64(hx-Uint32FromInt32(0x40000000))<>Int32FromInt32(1)) == Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)<= uint32(0x40360000) { /* x >= 22 */ + exp_mx = Xexp(tls, -Xfabs(tls, x)) + v12 = [2]float64{ + 0: Xcopysign(tls, Float64FromInt32(1), x), + 1: Float64FromInt32(4) * Xsin(tls, y) * Xcos(tls, y) * exp_mx * exp_mx, + } + return *(*complex128)(unsafe.Pointer(&v12)) + } + /* Kahan's algorithm */ + t = Xtan(tls, y) + beta = float64(1) + t*t /* = 1 / cos^2(y) */ + s = Xsinh(tls, x) + rho = Xsqrt(tls, Float64FromInt32(1)+s*s) /* = cosh(x) */ + denom = Float64FromInt32(1) + beta*s*s + v13 = [2]float64{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex128)(unsafe.Pointer(&v13)) +} + +func Xctanhf(tls *TLS, z complex64) (r complex64) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var beta, denom, exp_mx, rho, s, t, x, y, v11, v2, v5 float32 + var hx, ix, v3 Tuint32_t + var v1, v10, v12, v13, v4 [2]float32 + var v6, v8 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = beta, denom, exp_mx, hx, ix, rho, s, t, x, y, v1, v10, v11, v12, v13, v2, v3, v4, v5, v6, v8 + x = Float32FromComplex64(z) + y = +(*(*[2]float32)(unsafe.Pointer(&z)))[int32(1)] + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + if ix&uint32(0x7fffff) != 0 { + if y == Float32FromInt32(0) { + v2 = y + } else { + v2 = x * y + } + v1 = [2]float32{ + 0: x, + 1: v2, + } + return *(*complex64)(unsafe.Pointer(&v1)) + } + v3 = hx - uint32(0x40000000) + x = *(*float32)(unsafe.Pointer(&v3)) + *(*float32)(unsafe.Pointer(bp)) = y + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 + _7: + if BoolInt32(v6&uint32(0x7fffffff) == uint32(0x7f800000)) != 0 { + v5 = y + } else { + v5 = Xsinf(tls, y) * Xcosf(tls, y) + } + v4 = [2]float32{ + 0: x, + 1: Xcopysignf(tls, Float32FromInt32(0), v5), + } + return *(*complex64)(unsafe.Pointer(&v4)) + } + *(*float32)(unsafe.Pointer(bp)) = y + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 +_9: + if !(BoolInt32(v8&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if ix != 0 { + v11 = y - y + } else { + v11 = x + } + v10 = [2]float32{ + 0: v11, + 1: y - y, + } + return *(*complex64)(unsafe.Pointer(&v10)) + } + if ix >= uint32(0x41300000) { /* x >= 11 */ + exp_mx = Xexpf(tls, -Xfabsf(tls, x)) + v12 = [2]float32{ + 0: Xcopysignf(tls, Float32FromInt32(1), x), + 1: Float32FromInt32(4) * Xsinf(tls, y) * Xcosf(tls, y) * exp_mx * exp_mx, + } + return *(*complex64)(unsafe.Pointer(&v12)) + } + t = Xtanf(tls, y) + beta = float32(float64(1) + float64(t*t)) + s = Xsinhf(tls, x) + rho = Xsqrtf(tls, Float32FromInt32(1)+s*s) + denom = Float32FromInt32(1) + beta*s*s + v13 = [2]float32{ + 0: beta * rho * s / denom, + 1: t / denom, + } + return *(*complex64)(unsafe.Pointer(&v13)) +} + +// C documentation +// +// //FIXME +func Xctanhl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctanh(tls, Complex128FromComplex128(z))) +} + +func Xctanl(tls *TLS, z complex128) (r complex128) { + if __ccgo_strace { + trc("tls=%v z=%v, (%v:)", tls, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Complex128FromComplex128(Xctan(tls, Complex128FromComplex128(z))) +} + +const BUFSIZ = 1024 +const E2BIG = 7 +const EACCES = 13 +const EADDRINUSE = 98 +const EADDRNOTAVAIL = 99 +const EADV = 68 +const EAFNOSUPPORT = 97 +const EAGAIN = 11 +const EALREADY = 114 +const EBADE = 52 +const EBADF = 9 +const EBADFD = 77 +const EBADMSG = 74 +const EBADR = 53 +const EBADRQC = 56 +const EBADSLT = 57 +const EBFONT = 59 +const EBUSY = 16 +const ECANCELED = 125 +const ECHILD = 10 +const ECHRNG = 44 +const ECOMM = 70 +const ECONNABORTED = 103 +const ECONNREFUSED = 111 +const ECONNRESET = 104 +const EDEADLK = 35 +const EDEADLOCK = 35 +const EDESTADDRREQ = 89 +const EDOM = 33 +const EDOTDOT = 73 +const EDQUOT = 122 +const EEXIST = 17 +const EFAULT = 14 +const EFBIG = 27 +const EHOSTDOWN = 112 +const EHOSTUNREACH = 113 +const EHWPOISON = 133 +const EIDRM = 43 +const EILSEQ = 84 +const EINPROGRESS = 115 +const EINTR = 4 +const EINVAL = 22 +const EIO = 5 +const EISCONN = 106 +const EISDIR = 21 +const EISNAM = 120 +const EKEYEXPIRED = 127 +const EKEYREJECTED = 129 +const EKEYREVOKED = 128 +const EL2HLT = 51 +const EL2NSYNC = 45 +const EL3HLT = 46 +const EL3RST = 47 +const ELIBACC = 79 +const ELIBBAD = 80 +const ELIBEXEC = 83 +const ELIBMAX = 82 +const ELIBSCN = 81 +const ELNRNG = 48 +const ELOOP = 40 +const EMEDIUMTYPE = 124 +const EMFILE = 24 +const EMLINK = 31 +const EMSGSIZE = 90 +const EMULTIHOP = 72 +const ENAMETOOLONG = 36 +const ENAVAIL = 119 +const ENETDOWN = 100 +const ENETRESET = 102 +const ENETUNREACH = 101 +const ENFILE = 23 +const ENOANO = 55 +const ENOBUFS = 105 +const ENOCSI = 50 +const ENODATA = 61 +const ENODEV = 19 +const ENOENT = 2 +const ENOEXEC = 8 +const ENOKEY = 126 +const ENOLCK = 37 +const ENOLINK = 67 +const ENOMEDIUM = 123 +const ENOMEM = 12 +const ENOMSG = 42 +const ENONET = 64 +const ENOPKG = 65 +const ENOPROTOOPT = 92 +const ENOSPC = 28 +const ENOSR = 63 +const ENOSTR = 60 +const ENOSYS = 38 +const ENOTBLK = 15 +const ENOTCONN = 107 +const ENOTDIR = 20 +const ENOTEMPTY = 39 +const ENOTNAM = 118 +const ENOTRECOVERABLE = 131 +const ENOTSOCK = 88 +const ENOTSUP = 95 +const ENOTTY = 25 +const ENOTUNIQ = 76 +const ENXIO = 6 +const EOPNOTSUPP = 95 +const EOVERFLOW = 75 +const EOWNERDEAD = 130 +const EPERM = 1 +const EPFNOSUPPORT = 96 +const EPIPE = 32 +const EPROTO = 71 +const EPROTONOSUPPORT = 93 +const EPROTOTYPE = 91 +const ERANGE = 34 +const EREMCHG = 78 +const EREMOTE = 66 +const EREMOTEIO = 121 +const ERESTART = 85 +const ERFKILL = 132 +const EROFS = 30 +const ESHUTDOWN = 108 +const ESOCKTNOSUPPORT = 94 +const ESPIPE = 29 +const ESRCH = 3 +const ESRMNT = 69 +const ESTALE = 116 +const ESTRPIPE = 86 +const ETIME = 62 +const ETIMEDOUT = 110 +const ETOOMANYREFS = 109 +const ETXTBSY = 26 +const EUCLEAN = 117 +const EUNATCH = 49 +const EUSERS = 87 +const EWOULDBLOCK = 11 +const EXDEV = 18 +const EXFULL = 54 +const FILENAME_MAX = 4096 +const FOPEN_MAX = 1000 +const F_LOCK = 1 +const F_OK = 0 +const F_TEST = 3 +const F_TLOCK = 2 +const F_ULOCK = 0 +const L_ctermid = 20 +const L_tmpnam = 20 +const POSIX_CLOSE_RESTART = 0 +const P_tmpdir = "/tmp" +const R_OK = 4 +const SEEK_DATA = 3 +const SEEK_HOLE = 4 +const STDERR_FILENO = 2 +const STDIN_FILENO = 0 +const STDOUT_FILENO = 1 +const TMP_MAX = 10000 +const W_OK = 2 +const X_OK = 1 +const _CS_GNU_LIBC_VERSION = 2 +const _CS_GNU_LIBPTHREAD_VERSION = 3 +const _CS_PATH = 0 +const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = 4 +const _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 +const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 +const _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 +const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 +const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 +const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 +const _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 +const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 +const _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 +const _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 +const _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 +const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 +const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 +const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 +const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 +const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 +const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 1 +const _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 +const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 +const _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 +const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 +const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 +const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 +const _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 +const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 +const _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 +const _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 +const _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 +const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 +const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 +const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 +const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 +const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 +const _CS_POSIX_V7_THREADS_CFLAGS = 1150 +const _CS_POSIX_V7_THREADS_LDFLAGS = 1151 +const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = 5 +const _CS_V6_ENV = 1148 +const _CS_V7_ENV = 1149 +const _IOFBF = 0 +const _IOLBF = 1 +const _IONBF = 2 +const _PC_2_SYMLINKS = 20 +const _PC_ALLOC_SIZE_MIN = 18 +const _PC_ASYNC_IO = 10 +const _PC_CHOWN_RESTRICTED = 6 +const _PC_FILESIZEBITS = 13 +const _PC_LINK_MAX = 0 +const _PC_MAX_CANON = 1 +const _PC_MAX_INPUT = 2 +const _PC_NAME_MAX = 3 +const _PC_NO_TRUNC = 7 +const _PC_PATH_MAX = 4 +const _PC_PIPE_BUF = 5 +const _PC_PRIO_IO = 11 +const _PC_REC_INCR_XFER_SIZE = 14 +const _PC_REC_MAX_XFER_SIZE = 15 +const _PC_REC_MIN_XFER_SIZE = 16 +const _PC_REC_XFER_ALIGN = 17 +const _PC_SOCK_MAXBUF = 12 +const _PC_SYMLINK_MAX = 19 +const _PC_SYNC_IO = 9 +const _PC_VDISABLE = 8 +const _POSIX2_C_BIND = 200809 +const _POSIX2_VERSION = 200809 +const _POSIX_ADVISORY_INFO = 200809 +const _POSIX_ASYNCHRONOUS_IO = 200809 +const _POSIX_BARRIERS = 200809 +const _POSIX_CHOWN_RESTRICTED = 1 +const _POSIX_CLOCK_SELECTION = 200809 +const _POSIX_CPUTIME = 200809 +const _POSIX_FSYNC = 200809 +const _POSIX_IPV6 = 200809 +const _POSIX_JOB_CONTROL = 1 +const _POSIX_MAPPED_FILES = 200809 +const _POSIX_MEMLOCK = 200809 +const _POSIX_MEMLOCK_RANGE = 200809 +const _POSIX_MEMORY_PROTECTION = 200809 +const _POSIX_MESSAGE_PASSING = 200809 +const _POSIX_MONOTONIC_CLOCK = 200809 +const _POSIX_NO_TRUNC = 1 +const _POSIX_RAW_SOCKETS = 200809 +const _POSIX_READER_WRITER_LOCKS = 200809 +const _POSIX_REALTIME_SIGNALS = 200809 +const _POSIX_REGEXP = 1 +const _POSIX_SAVED_IDS = 1 +const _POSIX_SEMAPHORES = 200809 +const _POSIX_SHARED_MEMORY_OBJECTS = 200809 +const _POSIX_SHELL = 1 +const _POSIX_SPAWN = 200809 +const _POSIX_SPIN_LOCKS = 200809 +const _POSIX_THREADS = 200809 +const _POSIX_THREAD_ATTR_STACKADDR = 200809 +const _POSIX_THREAD_ATTR_STACKSIZE = 200809 +const _POSIX_THREAD_CPUTIME = 200809 +const _POSIX_THREAD_PRIORITY_SCHEDULING = 200809 +const _POSIX_THREAD_PROCESS_SHARED = 200809 +const _POSIX_THREAD_SAFE_FUNCTIONS = 200809 +const _POSIX_TIMEOUTS = 200809 +const _POSIX_TIMERS = 200809 +const _POSIX_V6_LP64_OFF64 = 1 +const _POSIX_V7_LP64_OFF64 = 1 +const _POSIX_VDISABLE = 0 +const _POSIX_VERSION = 200809 +const _SC_2_CHAR_TERM = 95 +const _SC_2_C_BIND = 47 +const _SC_2_C_DEV = 48 +const _SC_2_FORT_DEV = 49 +const _SC_2_FORT_RUN = 50 +const _SC_2_LOCALEDEF = 52 +const _SC_2_PBS = 168 +const _SC_2_PBS_ACCOUNTING = 169 +const _SC_2_PBS_CHECKPOINT = 175 +const _SC_2_PBS_LOCATE = 170 +const _SC_2_PBS_MESSAGE = 171 +const _SC_2_PBS_TRACK = 172 +const _SC_2_SW_DEV = 51 +const _SC_2_UPE = 97 +const _SC_2_VERSION = 46 +const _SC_ADVISORY_INFO = 132 +const _SC_AIO_LISTIO_MAX = 23 +const _SC_AIO_MAX = 24 +const _SC_AIO_PRIO_DELTA_MAX = 25 +const _SC_ARG_MAX = 0 +const _SC_ASYNCHRONOUS_IO = 12 +const _SC_ATEXIT_MAX = 87 +const _SC_AVPHYS_PAGES = 86 +const _SC_BARRIERS = 133 +const _SC_BC_BASE_MAX = 36 +const _SC_BC_DIM_MAX = 37 +const _SC_BC_SCALE_MAX = 38 +const _SC_BC_STRING_MAX = 39 +const _SC_CHILD_MAX = 1 +const _SC_CLK_TCK = 2 +const _SC_CLOCK_SELECTION = 137 +const _SC_COLL_WEIGHTS_MAX = 40 +const _SC_CPUTIME = 138 +const _SC_DELAYTIMER_MAX = 26 +const _SC_EXPR_NEST_MAX = 42 +const _SC_FSYNC = 15 +const _SC_GETGR_R_SIZE_MAX = 69 +const _SC_GETPW_R_SIZE_MAX = 70 +const _SC_HOST_NAME_MAX = 180 +const _SC_IOV_MAX = 60 +const _SC_IPV6 = 235 +const _SC_JOB_CONTROL = 7 +const _SC_LINE_MAX = 43 +const _SC_LOGIN_NAME_MAX = 71 +const _SC_MAPPED_FILES = 16 +const _SC_MEMLOCK = 17 +const _SC_MEMLOCK_RANGE = 18 +const _SC_MEMORY_PROTECTION = 19 +const _SC_MESSAGE_PASSING = 20 +const _SC_MINSIGSTKSZ = 249 +const _SC_MONOTONIC_CLOCK = 149 +const _SC_MQ_OPEN_MAX = 27 +const _SC_MQ_PRIO_MAX = 28 +const _SC_NGROUPS_MAX = 3 +const _SC_NPROCESSORS_CONF = 83 +const _SC_NPROCESSORS_ONLN = 84 +const _SC_NZERO = 109 +const _SC_OPEN_MAX = 4 +const _SC_PAGESIZE = 30 +const _SC_PAGE_SIZE = 30 +const _SC_PASS_MAX = 88 +const _SC_PHYS_PAGES = 85 +const _SC_PRIORITIZED_IO = 13 +const _SC_PRIORITY_SCHEDULING = 10 +const _SC_RAW_SOCKETS = 236 +const _SC_READER_WRITER_LOCKS = 153 +const _SC_REALTIME_SIGNALS = 9 +const _SC_REGEXP = 155 +const _SC_RE_DUP_MAX = 44 +const _SC_RTSIG_MAX = 31 +const _SC_SAVED_IDS = 8 +const _SC_SEMAPHORES = 21 +const _SC_SEM_NSEMS_MAX = 32 +const _SC_SEM_VALUE_MAX = 33 +const _SC_SHARED_MEMORY_OBJECTS = 22 +const _SC_SHELL = 157 +const _SC_SIGQUEUE_MAX = 34 +const _SC_SIGSTKSZ = 250 +const _SC_SPAWN = 159 +const _SC_SPIN_LOCKS = 154 +const _SC_SPORADIC_SERVER = 160 +const _SC_SS_REPL_MAX = 241 +const _SC_STREAMS = 174 +const _SC_STREAM_MAX = 5 +const _SC_SYMLOOP_MAX = 173 +const _SC_SYNCHRONIZED_IO = 14 +const _SC_THREADS = 67 +const _SC_THREAD_ATTR_STACKADDR = 77 +const _SC_THREAD_ATTR_STACKSIZE = 78 +const _SC_THREAD_CPUTIME = 139 +const _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 +const _SC_THREAD_KEYS_MAX = 74 +const _SC_THREAD_PRIORITY_SCHEDULING = 79 +const _SC_THREAD_PRIO_INHERIT = 80 +const _SC_THREAD_PRIO_PROTECT = 81 +const _SC_THREAD_PROCESS_SHARED = 82 +const _SC_THREAD_ROBUST_PRIO_INHERIT = 247 +const _SC_THREAD_ROBUST_PRIO_PROTECT = 248 +const _SC_THREAD_SAFE_FUNCTIONS = 68 +const _SC_THREAD_SPORADIC_SERVER = 161 +const _SC_THREAD_STACK_MIN = 75 +const _SC_THREAD_THREADS_MAX = 76 +const _SC_TIMEOUTS = 164 +const _SC_TIMERS = 11 +const _SC_TIMER_MAX = 35 +const _SC_TRACE = 181 +const _SC_TRACE_EVENT_FILTER = 182 +const _SC_TRACE_EVENT_NAME_MAX = 242 +const _SC_TRACE_INHERIT = 183 +const _SC_TRACE_LOG = 184 +const _SC_TRACE_NAME_MAX = 243 +const _SC_TRACE_SYS_MAX = 244 +const _SC_TRACE_USER_EVENT_MAX = 245 +const _SC_TTY_NAME_MAX = 72 +const _SC_TYPED_MEMORY_OBJECTS = 165 +const _SC_TZNAME_MAX = 6 +const _SC_UIO_MAXIOV = 60 +const _SC_V6_ILP32_OFF32 = 176 +const _SC_V6_ILP32_OFFBIG = 177 +const _SC_V6_LP64_OFF64 = 178 +const _SC_V6_LPBIG_OFFBIG = 179 +const _SC_V7_ILP32_OFF32 = 237 +const _SC_V7_ILP32_OFFBIG = 238 +const _SC_V7_LP64_OFF64 = 239 +const _SC_V7_LPBIG_OFFBIG = 240 +const _SC_VERSION = 29 +const _SC_XBS5_ILP32_OFF32 = 125 +const _SC_XBS5_ILP32_OFFBIG = 126 +const _SC_XBS5_LP64_OFF64 = 127 +const _SC_XBS5_LPBIG_OFFBIG = 128 +const _SC_XOPEN_CRYPT = 92 +const _SC_XOPEN_ENH_I18N = 93 +const _SC_XOPEN_LEGACY = 129 +const _SC_XOPEN_REALTIME = 130 +const _SC_XOPEN_REALTIME_THREADS = 131 +const _SC_XOPEN_SHM = 94 +const _SC_XOPEN_STREAMS = 246 +const _SC_XOPEN_UNIX = 91 +const _SC_XOPEN_VERSION = 89 +const _SC_XOPEN_XCU_VERSION = 90 +const _SC_XOPEN_XPG2 = 98 +const _SC_XOPEN_XPG3 = 99 +const _SC_XOPEN_XPG4 = 100 +const _XOPEN_ENH_I18N = 1 +const _XOPEN_UNIX = 1 +const _XOPEN_VERSION = 700 + +type Tsize_t = uint64 + +type Tssize_t = int64 + +type Toff_t = int64 + +type Tpid_t = int32 + +type Tuid_t = uint32 + +type Tgid_t = uint32 + +type Tuseconds_t = uint32 + +type Tva_list = uintptr + +type t__isoc_va_list = uintptr + +type Tfpos_t = struct { + F__lldata [0]int64 + F__align [0]float64 + F__opaque [16]uint8 +} + +type T_G_fpos64_t = Tfpos_t + +func Xconfstr(tls *TLS, name int32, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v len1=%v, (%v:)", tls, name, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = __ccgo_ts + if !(name != 0) { + s = __ccgo_ts + 1 + } else { + if uint32(name) & ^Uint32FromUint32(4) != uint32(1) && uint32(name-int32(_CS_POSIX_V6_ILP32_OFF32_CFLAGS)) > uint32(35) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + // snprintf is overkill but avoid wasting code size to implement + // this completely useless function and its truncation semantics + return uint64(Xsnprintf(tls, buf, len1, __ccgo_ts+15, VaList(bp+8, s)) + int32(1)) +} + +const ARG_MAX = 131072 +const BC_BASE_MAX = 99 +const BC_DIM_MAX = 2048 +const BC_SCALE_MAX = 99 +const BC_STRING_MAX = 1000 +const CHARCLASS_NAME_MAX = 14 +const CHAR_BIT = 8 +const CHAR_MAX = 255 +const CHAR_MIN = 0 +const COLL_WEIGHTS_MAX = 2 +const DELAYTIMER_MAX = 2147483647 +const EXPR_NEST_MAX = 32 +const FILESIZEBITS = 64 +const HOST_NAME_MAX = 255 +const INT_MAX = 2147483647 +const INT_MIN = -2147483648 +const IOV_MAX = 1024 +const LINE_MAX = 4096 +const LLONG_MAX = 9223372036854775807 +const LLONG_MIN = -9223372036854775808 +const LOGIN_NAME_MAX = 256 +const LONG_BIT = 64 +const LONG_MAX = 9223372036854775807 +const LONG_MIN = -9223372036854775808 +const MB_LEN_MAX = 4 +const MQ_PRIO_MAX = 32768 +const NAME_MAX = 255 +const NGROUPS_MAX = 32 +const NL_ARGMAX = 9 +const NL_LANGMAX = 32 +const NL_MSGMAX = 32767 +const NL_SETMAX = 255 +const NL_TEXTMAX = 2048 +const NZERO = 20 +const PAGESIZE = 4096 +const PAGE_SIZE = 4096 +const PATH_MAX = 4096 +const PIPE_BUF = 4096 +const PTHREAD_DESTRUCTOR_ITERATIONS = 4 +const PTHREAD_KEYS_MAX = 128 +const PTHREAD_STACK_MIN = 2048 +const RE_DUP_MAX = 255 +const SCHAR_MAX = 127 +const SCHAR_MIN = -128 +const SEEK_CUR = 1 +const SEEK_END = 2 +const SEEK_SET = 0 +const SEM_NSEMS_MAX = 256 +const SEM_VALUE_MAX = 2147483647 +const SHRT_MAX = 32767 +const SHRT_MIN = -32768 +const SSIZE_MAX = 9223372036854775807 +const SYMLOOP_MAX = 40 +const TTY_NAME_MAX = 32 +const TZNAME_MAX = 6 +const UCHAR_MAX = 255 +const UINT_MAX = 4294967295 +const ULLONG_MAX = 18446744073709551615 +const ULONG_MAX = 18446744073709551615 +const USHRT_MAX = 65535 +const WORD_BIT = 32 +const _POSIX2_BC_BASE_MAX = 99 +const _POSIX2_BC_DIM_MAX = 2048 +const _POSIX2_BC_SCALE_MAX = 99 +const _POSIX2_BC_STRING_MAX = 1000 +const _POSIX2_CHARCLASS_NAME_MAX = 14 +const _POSIX2_COLL_WEIGHTS_MAX = 2 +const _POSIX2_EXPR_NEST_MAX = 32 +const _POSIX2_LINE_MAX = 2048 +const _POSIX2_RE_DUP_MAX = 255 +const _POSIX_AIO_LISTIO_MAX = 2 +const _POSIX_AIO_MAX = 1 +const _POSIX_ARG_MAX = 4096 +const _POSIX_CHILD_MAX = 25 +const _POSIX_CLOCKRES_MIN = 20000000 +const _POSIX_DELAYTIMER_MAX = 32 +const _POSIX_HOST_NAME_MAX = 255 +const _POSIX_LINK_MAX = 8 +const _POSIX_LOGIN_NAME_MAX = 9 +const _POSIX_MAX_CANON = 255 +const _POSIX_MAX_INPUT = 255 +const _POSIX_MQ_OPEN_MAX = 8 +const _POSIX_MQ_PRIO_MAX = 32 +const _POSIX_NAME_MAX = 14 +const _POSIX_NGROUPS_MAX = 8 +const _POSIX_OPEN_MAX = 20 +const _POSIX_PATH_MAX = 256 +const _POSIX_PIPE_BUF = 512 +const _POSIX_RE_DUP_MAX = 255 +const _POSIX_RTSIG_MAX = 8 +const _POSIX_SEM_NSEMS_MAX = 256 +const _POSIX_SEM_VALUE_MAX = 32767 +const _POSIX_SIGQUEUE_MAX = 32 +const _POSIX_SSIZE_MAX = 32767 +const _POSIX_SS_REPL_MAX = 4 +const _POSIX_STREAM_MAX = 8 +const _POSIX_SYMLINK_MAX = 255 +const _POSIX_SYMLOOP_MAX = 8 +const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 +const _POSIX_THREAD_KEYS_MAX = 128 +const _POSIX_THREAD_THREADS_MAX = 64 +const _POSIX_TIMER_MAX = 32 +const _POSIX_TRACE_EVENT_NAME_MAX = 30 +const _POSIX_TRACE_NAME_MAX = 8 +const _POSIX_TRACE_SYS_MAX = 8 +const _POSIX_TRACE_USER_EVENT_MAX = 32 +const _POSIX_TTY_NAME_MAX = 9 +const _POSIX_TZNAME_MAX = 6 +const _XOPEN_IOV_MAX = 16 +const _XOPEN_NAME_MAX = 255 +const _XOPEN_PATH_MAX = 1024 + +func Xfpathconf(tls *TLS, fd int32, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(name) >= Uint64FromInt64(42)/Uint64FromInt64(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + return int64(_values[name]) +} + +var _values = [21]int16{ + 0: int16(_POSIX_LINK_MAX), + 1: int16(_POSIX_MAX_CANON), + 2: int16(_POSIX_MAX_INPUT), + 3: int16(NAME_MAX), + 4: int16(PATH_MAX), + 5: int16(PIPE_BUF), + 6: int16(1), + 7: int16(1), + 9: int16(1), + 10: int16(-int32(1)), + 11: int16(-int32(1)), + 12: int16(-int32(1)), + 13: int16(FILESIZEBITS), + 14: int16(4096), + 15: int16(4096), + 16: int16(4096), + 17: int16(4096), + 18: int16(4096), + 19: int16(-int32(1)), + 20: int16(1), +} + +const SI_LOAD_SHIFT = 16 + +type Tsysinfo = struct { + Fuptime uint64 + Floads [3]uint64 + Ftotalram uint64 + Ffreeram uint64 + Fsharedram uint64 + Fbufferram uint64 + Ftotalswap uint64 + Ffreeswap uint64 + Fprocs uint16 + Fpad uint16 + Ftotalhigh uint64 + Ffreehigh uint64 + Fmem_unit uint32 + F__reserved [256]uint8 +} + +func Xget_nprocs_conf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_CONF))) +} + +func Xget_nprocs(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(Xsysconf(tls, int32(_SC_NPROCESSORS_ONLN))) +} + +func Xget_phys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_PHYS_PAGES)) +} + +func Xget_avphys_pages(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsysconf(tls, int32(_SC_AVPHYS_PAGES)) +} + +func Xpathconf(tls *TLS, path uintptr, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfpathconf(tls, -int32(1), name) +} + +const AT_BASE = 7 +const AT_BASE_PLATFORM = 24 +const AT_CLKTCK = 17 +const AT_DCACHEBSIZE = 19 +const AT_EGID = 14 +const AT_ENTRY = 9 +const AT_EUID = 12 +const AT_EXECFD = 2 +const AT_EXECFN = 31 +const AT_FLAGS = 8 +const AT_FPUCW = 18 +const AT_GID = 13 +const AT_HWCAP = 16 +const AT_HWCAP2 = 26 +const AT_ICACHEBSIZE = 20 +const AT_IGNORE = 1 +const AT_IGNOREPPC = 22 +const AT_L1D_CACHEGEOMETRY = 43 +const AT_L1D_CACHESHAPE = 35 +const AT_L1D_CACHESIZE = 42 +const AT_L1I_CACHEGEOMETRY = 41 +const AT_L1I_CACHESHAPE = 34 +const AT_L1I_CACHESIZE = 40 +const AT_L2_CACHEGEOMETRY = 45 +const AT_L2_CACHESHAPE = 36 +const AT_L2_CACHESIZE = 44 +const AT_L3_CACHEGEOMETRY = 47 +const AT_L3_CACHESHAPE = 37 +const AT_L3_CACHESIZE = 46 +const AT_MINSIGSTKSZ = 51 +const AT_NOTELF = 10 +const AT_NULL = 0 +const AT_PAGESZ = 6 +const AT_PHDR = 3 +const AT_PHENT = 4 +const AT_PHNUM = 5 +const AT_PLATFORM = 15 +const AT_RANDOM = 25 +const AT_SECURE = 23 +const AT_SYSINFO = 32 +const AT_SYSINFO_EHDR = 33 +const AT_UCACHEBSIZE = 21 +const AT_UID = 11 +const BUS_ADRALN = 1 +const BUS_ADRERR = 2 +const BUS_MCEERR_AO = 5 +const BUS_MCEERR_AR = 4 +const BUS_OBJERR = 3 +const CLD_CONTINUED = 6 +const CLD_DUMPED = 3 +const CLD_EXITED = 1 +const CLD_KILLED = 2 +const CLD_STOPPED = 5 +const CLD_TRAPPED = 4 +const DF_1_CONFALT = 8192 +const DF_1_DIRECT = 256 +const DF_1_DISPRELDNE = 32768 +const DF_1_DISPRELPND = 65536 +const DF_1_EDITED = 2097152 +const DF_1_ENDFILTEE = 16384 +const DF_1_GLOBAL = 2 +const DF_1_GLOBAUDIT = 16777216 +const DF_1_GROUP = 4 +const DF_1_IGNMULDEF = 262144 +const DF_1_INITFIRST = 32 +const DF_1_INTERPOSE = 1024 +const DF_1_LOADFLTR = 16 +const DF_1_NODEFLIB = 2048 +const DF_1_NODELETE = 8 +const DF_1_NODIRECT = 131072 +const DF_1_NODUMP = 4096 +const DF_1_NOHDR = 1048576 +const DF_1_NOKSYMS = 524288 +const DF_1_NOOPEN = 64 +const DF_1_NORELOC = 4194304 +const DF_1_NOW = 1 +const DF_1_ORIGIN = 128 +const DF_1_PIE = 134217728 +const DF_1_SINGLETON = 33554432 +const DF_1_STUB = 67108864 +const DF_1_SYMINTPOSE = 8388608 +const DF_1_TRANS = 512 +const DF_BIND_NOW = 8 +const DF_ORIGIN = 1 +const DF_P1_GROUPPERM = 2 +const DF_P1_LAZYLOAD = 1 +const DF_STATIC_TLS = 16 +const DF_SYMBOLIC = 2 +const DF_TEXTREL = 4 +const DTF_1_CONFEXP = 2 +const DTF_1_PARINIT = 1 +const DT_ADDRNUM = 11 +const DT_ADDRRNGHI = 1879047935 +const DT_ADDRRNGLO = 1879047680 +const DT_ALPHA_NUM = 1 +const DT_ALPHA_PLTRO = 1879048192 +const DT_AUDIT = 1879047932 +const DT_AUXILIARY = 2147483645 +const DT_BIND_NOW = 24 +const DT_CHECKSUM = 1879047672 +const DT_CONFIG = 1879047930 +const DT_DEBUG = 21 +const DT_DEPAUDIT = 1879047931 +const DT_ENCODING = 32 +const DT_EXTRANUM = 3 +const DT_FEATURE_1 = 1879047676 +const DT_FILTER = 2147483647 +const DT_FINI = 13 +const DT_FINI_ARRAY = 26 +const DT_FINI_ARRAYSZ = 28 +const DT_FLAGS = 30 +const DT_FLAGS_1 = 1879048187 +const DT_GNU_CONFLICT = 1879047928 +const DT_GNU_CONFLICTSZ = 1879047670 +const DT_GNU_HASH = 1879047925 +const DT_GNU_LIBLIST = 1879047929 +const DT_GNU_LIBLISTSZ = 1879047671 +const DT_GNU_PRELINKED = 1879047669 +const DT_HASH = 4 +const DT_HIOS = 1879044096 +const DT_HIPROC = 2147483647 +const DT_IA_64_NUM = 1 +const DT_IA_64_PLT_RESERVE = 1879048192 +const DT_INIT = 12 +const DT_INIT_ARRAY = 25 +const DT_INIT_ARRAYSZ = 27 +const DT_JMPREL = 23 +const DT_LOOS = 1610612749 +const DT_LOPROC = 1879048192 +const DT_MIPS_AUX_DYNAMIC = 1879048241 +const DT_MIPS_BASE_ADDRESS = 1879048198 +const DT_MIPS_COMPACT_SIZE = 1879048239 +const DT_MIPS_CONFLICT = 1879048200 +const DT_MIPS_CONFLICTNO = 1879048203 +const DT_MIPS_CXX_FLAGS = 1879048226 +const DT_MIPS_DELTA_CLASS = 1879048215 +const DT_MIPS_DELTA_CLASSSYM = 1879048224 +const DT_MIPS_DELTA_CLASSSYM_NO = 1879048225 +const DT_MIPS_DELTA_CLASS_NO = 1879048216 +const DT_MIPS_DELTA_INSTANCE = 1879048217 +const DT_MIPS_DELTA_INSTANCE_NO = 1879048218 +const DT_MIPS_DELTA_RELOC = 1879048219 +const DT_MIPS_DELTA_RELOC_NO = 1879048220 +const DT_MIPS_DELTA_SYM = 1879048221 +const DT_MIPS_DELTA_SYM_NO = 1879048222 +const DT_MIPS_DYNSTR_ALIGN = 1879048235 +const DT_MIPS_FLAGS = 1879048197 +const DT_MIPS_GOTSYM = 1879048211 +const DT_MIPS_GP_VALUE = 1879048240 +const DT_MIPS_HIDDEN_GOTIDX = 1879048231 +const DT_MIPS_HIPAGENO = 1879048212 +const DT_MIPS_ICHECKSUM = 1879048195 +const DT_MIPS_INTERFACE = 1879048234 +const DT_MIPS_INTERFACE_SIZE = 1879048236 +const DT_MIPS_IVERSION = 1879048196 +const DT_MIPS_LIBLIST = 1879048201 +const DT_MIPS_LIBLISTNO = 1879048208 +const DT_MIPS_LOCALPAGE_GOTIDX = 1879048229 +const DT_MIPS_LOCAL_GOTIDX = 1879048230 +const DT_MIPS_LOCAL_GOTNO = 1879048202 +const DT_MIPS_MSYM = 1879048199 +const DT_MIPS_NUM = 54 +const DT_MIPS_OPTIONS = 1879048233 +const DT_MIPS_PERF_SUFFIX = 1879048238 +const DT_MIPS_PIXIE_INIT = 1879048227 +const DT_MIPS_PLTGOT = 1879048242 +const DT_MIPS_PROTECTED_GOTIDX = 1879048232 +const DT_MIPS_RLD_MAP = 1879048214 +const DT_MIPS_RLD_MAP_REL = 1879048245 +const DT_MIPS_RLD_TEXT_RESOLVE_ADDR = 1879048237 +const DT_MIPS_RLD_VERSION = 1879048193 +const DT_MIPS_RWPLT = 1879048244 +const DT_MIPS_SYMBOL_LIB = 1879048228 +const DT_MIPS_SYMTABNO = 1879048209 +const DT_MIPS_TIME_STAMP = 1879048194 +const DT_MIPS_UNREFEXTNO = 1879048210 +const DT_MOVEENT = 1879047674 +const DT_MOVESZ = 1879047675 +const DT_MOVETAB = 1879047934 +const DT_NEEDED = 1 +const DT_NIOS2_GP = 1879048194 +const DT_NULL = 0 +const DT_NUM = 38 +const DT_PLTGOT = 3 +const DT_PLTPAD = 1879047933 +const DT_PLTPADSZ = 1879047673 +const DT_PLTREL = 20 +const DT_PLTRELSZ = 2 +const DT_POSFLAG_1 = 1879047677 +const DT_PPC64_GLINK = 1879048192 +const DT_PPC64_NUM = 4 +const DT_PPC64_OPD = 1879048193 +const DT_PPC64_OPDSZ = 1879048194 +const DT_PPC64_OPT = 1879048195 +const DT_PPC_GOT = 1879048192 +const DT_PPC_NUM = 2 +const DT_PPC_OPT = 1879048193 +const DT_PREINIT_ARRAY = 32 +const DT_PREINIT_ARRAYSZ = 33 +const DT_PROCNUM = 54 +const DT_REL = 17 +const DT_RELA = 7 +const DT_RELACOUNT = 1879048185 +const DT_RELAENT = 9 +const DT_RELASZ = 8 +const DT_RELCOUNT = 1879048186 +const DT_RELENT = 19 +const DT_RELR = 36 +const DT_RELRENT = 37 +const DT_RELRSZ = 35 +const DT_RELSZ = 18 +const DT_RPATH = 15 +const DT_RUNPATH = 29 +const DT_SONAME = 14 +const DT_SPARC_NUM = 2 +const DT_SPARC_REGISTER = 1879048193 +const DT_STRSZ = 10 +const DT_STRTAB = 5 +const DT_SYMBOLIC = 16 +const DT_SYMENT = 11 +const DT_SYMINENT = 1879047679 +const DT_SYMINFO = 1879047935 +const DT_SYMINSZ = 1879047678 +const DT_SYMTAB = 6 +const DT_SYMTAB_SHNDX = 34 +const DT_TEXTREL = 22 +const DT_TLSDESC_GOT = 1879047927 +const DT_TLSDESC_PLT = 1879047926 +const DT_VALNUM = 12 +const DT_VALRNGHI = 1879047679 +const DT_VALRNGLO = 1879047424 +const DT_VERDEF = 1879048188 +const DT_VERDEFNUM = 1879048189 +const DT_VERNEED = 1879048190 +const DT_VERNEEDNUM = 1879048191 +const DT_VERSIONTAGNUM = 16 +const DT_VERSYM = 1879048176 +const EFA_PARISC_1_0 = 523 +const EFA_PARISC_1_1 = 528 +const EFA_PARISC_2_0 = 532 +const EF_ALPHA_32BIT = 1 +const EF_ALPHA_CANRELAX = 2 +const EF_ARM_ABI_FLOAT_HARD = 1024 +const EF_ARM_ABI_FLOAT_SOFT = 512 +const EF_ARM_ALIGN8 = 64 +const EF_ARM_APCS_26 = 8 +const EF_ARM_APCS_FLOAT = 16 +const EF_ARM_BE8 = 8388608 +const EF_ARM_DYNSYMSUSESEGIDX = 8 +const EF_ARM_EABIMASK = 4278190080 +const EF_ARM_EABI_UNKNOWN = 0 +const EF_ARM_EABI_VER1 = 16777216 +const EF_ARM_EABI_VER2 = 33554432 +const EF_ARM_EABI_VER3 = 50331648 +const EF_ARM_EABI_VER4 = 67108864 +const EF_ARM_EABI_VER5 = 83886080 +const EF_ARM_HASENTRY = 2 +const EF_ARM_INTERWORK = 4 +const EF_ARM_LE8 = 4194304 +const EF_ARM_MAPSYMSFIRST = 16 +const EF_ARM_MAVERICK_FLOAT = 2048 +const EF_ARM_NEW_ABI = 128 +const EF_ARM_OLD_ABI = 256 +const EF_ARM_PIC = 32 +const EF_ARM_RELEXEC = 1 +const EF_ARM_SOFT_FLOAT = 512 +const EF_ARM_SYMSARESORTED = 4 +const EF_ARM_VFP_FLOAT = 1024 +const EF_CPU32 = 8454144 +const EF_IA_64_ABI64 = 16 +const EF_IA_64_ARCH = 4278190080 +const EF_IA_64_MASKOS = 15 +const EF_LARCH_ABI_DOUBLE_FLOAT = 3 +const EF_LARCH_ABI_MODIFIER_MASK = 7 +const EF_LARCH_ABI_SINGLE_FLOAT = 2 +const EF_LARCH_ABI_SOFT_FLOAT = 1 +const EF_LARCH_OBJABI_V1 = 64 +const EF_MIPS_64BIT_WHIRL = 16 +const EF_MIPS_ABI2 = 32 +const EF_MIPS_ABI_ON32 = 64 +const EF_MIPS_ARCH = 4026531840 +const EF_MIPS_ARCH_1 = 0 +const EF_MIPS_ARCH_2 = 268435456 +const EF_MIPS_ARCH_3 = 536870912 +const EF_MIPS_ARCH_32 = 1342177280 +const EF_MIPS_ARCH_32R2 = 1879048192 +const EF_MIPS_ARCH_4 = 805306368 +const EF_MIPS_ARCH_5 = 1073741824 +const EF_MIPS_ARCH_64 = 1610612736 +const EF_MIPS_ARCH_64R2 = 2147483648 +const EF_MIPS_CPIC = 4 +const EF_MIPS_FP64 = 512 +const EF_MIPS_NAN2008 = 1024 +const EF_MIPS_NOREORDER = 1 +const EF_MIPS_PIC = 2 +const EF_MIPS_XGOT = 8 +const EF_PARISC_ARCH = 65535 +const EF_PARISC_EXT = 131072 +const EF_PARISC_LAZYSWAP = 4194304 +const EF_PARISC_LSB = 262144 +const EF_PARISC_NO_KABP = 1048576 +const EF_PARISC_TRAPNIL = 65536 +const EF_PARISC_WIDE = 524288 +const EF_PPC64_ABI = 3 +const EF_PPC_EMB = 2147483648 +const EF_PPC_RELOCATABLE = 65536 +const EF_PPC_RELOCATABLE_LIB = 32768 +const EF_SH1 = 1 +const EF_SH2 = 2 +const EF_SH2A = 13 +const EF_SH2A_NOFPU = 19 +const EF_SH2A_SH3E = 24 +const EF_SH2A_SH3_NOFPU = 22 +const EF_SH2A_SH4 = 23 +const EF_SH2A_SH4_NOFPU = 21 +const EF_SH2E = 11 +const EF_SH3 = 3 +const EF_SH3E = 8 +const EF_SH3_DSP = 5 +const EF_SH3_NOMMU = 20 +const EF_SH4 = 9 +const EF_SH4A = 12 +const EF_SH4AL_DSP = 6 +const EF_SH4A_NOFPU = 17 +const EF_SH4_NOFPU = 16 +const EF_SH4_NOMMU_NOFPU = 18 +const EF_SH_DSP = 4 +const EF_SH_MACH_MASK = 31 +const EF_SH_UNKNOWN = 0 +const EF_SPARCV9_MM = 3 +const EF_SPARCV9_PSO = 1 +const EF_SPARCV9_RMO = 2 +const EF_SPARCV9_TSO = 0 +const EF_SPARC_32PLUS = 256 +const EF_SPARC_EXT_MASK = 16776960 +const EF_SPARC_HAL_R1 = 1024 +const EF_SPARC_LEDATA = 8388608 +const EF_SPARC_SUN_US1 = 512 +const EF_SPARC_SUN_US3 = 2048 +const EI_ABIVERSION = 8 +const EI_CLASS = 4 +const EI_DATA = 5 +const EI_MAG0 = 0 +const EI_MAG1 = 1 +const EI_MAG2 = 2 +const EI_MAG3 = 3 +const EI_NIDENT = 16 +const EI_OSABI = 7 +const EI_PAD = 9 +const EI_VERSION = 6 +const ELFCLASS32 = 1 +const ELFCLASS64 = 2 +const ELFCLASSNONE = 0 +const ELFCLASSNUM = 3 +const ELFCOMPRESS_HIOS = 1879048191 +const ELFCOMPRESS_HIPROC = 2147483647 +const ELFCOMPRESS_LOOS = 1610612736 +const ELFCOMPRESS_LOPROC = 1879048192 +const ELFCOMPRESS_ZLIB = 1 +const ELFCOMPRESS_ZSTD = 2 +const ELFDATA2LSB = 1 +const ELFDATA2MSB = 2 +const ELFDATANONE = 0 +const ELFDATANUM = 3 +const ELFMAG = "\\177ELF" +const ELFMAG0 = 127 +const ELFMAG1 = 69 +const ELFMAG2 = 76 +const ELFMAG3 = 70 +const ELFOSABI_AIX = 7 +const ELFOSABI_ARM = 97 +const ELFOSABI_FREEBSD = 9 +const ELFOSABI_GNU = 3 +const ELFOSABI_HPUX = 1 +const ELFOSABI_IRIX = 8 +const ELFOSABI_LINUX = 3 +const ELFOSABI_MODESTO = 11 +const ELFOSABI_NETBSD = 2 +const ELFOSABI_NONE = 0 +const ELFOSABI_OPENBSD = 12 +const ELFOSABI_SOLARIS = 6 +const ELFOSABI_STANDALONE = 255 +const ELFOSABI_SYSV = 0 +const ELFOSABI_TRU64 = 10 +const ELF_NOTE_ABI = 1 +const ELF_NOTE_GNU = "GNU" +const ELF_NOTE_OS_FREEBSD = 3 +const ELF_NOTE_OS_GNU = 1 +const ELF_NOTE_OS_LINUX = 0 +const ELF_NOTE_OS_SOLARIS2 = 2 +const ELF_NOTE_PAGESIZE_HINT = 1 +const ELF_NOTE_SOLARIS = "SUNW Solaris" +const EM_386 = 3 +const EM_56800EX = 200 +const EM_68HC05 = 72 +const EM_68HC08 = 71 +const EM_68HC11 = 70 +const EM_68HC12 = 53 +const EM_68HC16 = 69 +const EM_68K = 4 +const EM_78KOR = 199 +const EM_8051 = 165 +const EM_860 = 7 +const EM_88K = 5 +const EM_960 = 19 +const EM_AARCH64 = 183 +const EM_ALPHA = 36902 +const EM_ALTERA_NIOS2 = 113 +const EM_AMDGPU = 224 +const EM_ARC = 45 +const EM_ARCA = 109 +const EM_ARC_A5 = 93 +const EM_ARC_COMPACT = 93 +const EM_ARC_COMPACT2 = 195 +const EM_ARM = 40 +const EM_AVR = 83 +const EM_AVR32 = 185 +const EM_BA1 = 201 +const EM_BA2 = 202 +const EM_BLACKFIN = 106 +const EM_BPF = 247 +const EM_C166 = 116 +const EM_CDP = 215 +const EM_CE = 119 +const EM_CLOUDSHIELD = 192 +const EM_COGE = 216 +const EM_COLDFIRE = 52 +const EM_COOL = 217 +const EM_COREA_1ST = 193 +const EM_COREA_2ND = 194 +const EM_CR = 103 +const EM_CR16 = 177 +const EM_CRAYNV2 = 172 +const EM_CRIS = 76 +const EM_CRX = 114 +const EM_CSKY = 252 +const EM_CSR_KALIMBA = 219 +const EM_CUDA = 190 +const EM_CYPRESS_M8C = 161 +const EM_D10V = 85 +const EM_D30V = 86 +const EM_DSP24 = 136 +const EM_DSPIC30F = 118 +const EM_DXP = 112 +const EM_ECOG16 = 176 +const EM_ECOG1X = 168 +const EM_ECOG2 = 134 +const EM_EMX16 = 212 +const EM_EMX8 = 213 +const EM_ETPU = 178 +const EM_EXCESS = 111 +const EM_F2MC16 = 104 +const EM_FAKE_ALPHA = 41 +const EM_FIREPATH = 78 +const EM_FR20 = 37 +const EM_FR30 = 84 +const EM_FT32 = 222 +const EM_FX66 = 66 +const EM_H8S = 48 +const EM_H8_300 = 46 +const EM_H8_300H = 47 +const EM_H8_500 = 49 +const EM_HUANY = 81 +const EM_IA_64 = 50 +const EM_IP2K = 101 +const EM_JAVELIN = 77 +const EM_K10M = 181 +const EM_KM32 = 210 +const EM_KMX32 = 211 +const EM_KVARC = 214 +const EM_L10M = 180 +const EM_LATTICEMICO32 = 138 +const EM_LOONGARCH = 258 +const EM_M16C = 117 +const EM_M32 = 1 +const EM_M32C = 120 +const EM_M32R = 88 +const EM_MANIK = 171 +const EM_MAX = 102 +const EM_MAXQ30 = 169 +const EM_MCHP_PIC = 204 +const EM_MCST_ELBRUS = 175 +const EM_ME16 = 59 +const EM_METAG = 174 +const EM_MICROBLAZE = 189 +const EM_MIPS = 8 +const EM_MIPS_RS3_LE = 10 +const EM_MIPS_X = 51 +const EM_MMA = 54 +const EM_MMDSP_PLUS = 160 +const EM_MMIX = 80 +const EM_MN10200 = 90 +const EM_MN10300 = 89 +const EM_MOXIE = 223 +const EM_MSP430 = 105 +const EM_NCPU = 56 +const EM_NDR1 = 57 +const EM_NDS32 = 167 +const EM_NONE = 0 +const EM_NORC = 218 +const EM_NS32K = 97 +const EM_NUM = 259 +const EM_OPEN8 = 196 +const EM_OPENRISC = 92 +const EM_OR1K = 92 +const EM_PARISC = 15 +const EM_PCP = 55 +const EM_PDSP = 63 +const EM_PJ = 91 +const EM_PPC = 20 +const EM_PPC64 = 21 +const EM_PRISM = 82 +const EM_QDSP6 = 164 +const EM_R32C = 162 +const EM_RCE = 39 +const EM_RH32 = 38 +const EM_RISCV = 243 +const EM_RL78 = 197 +const EM_RS08 = 132 +const EM_RX = 173 +const EM_S370 = 9 +const EM_S390 = 22 +const EM_SCORE7 = 135 +const EM_SEP = 108 +const EM_SE_C17 = 139 +const EM_SE_C33 = 107 +const EM_SH = 42 +const EM_SHARC = 133 +const EM_SLE9X = 179 +const EM_SNP1K = 99 +const EM_SPARC = 2 +const EM_SPARC32PLUS = 18 +const EM_SPARCV9 = 43 +const EM_ST100 = 60 +const EM_ST19 = 74 +const EM_ST200 = 100 +const EM_ST7 = 68 +const EM_ST9PLUS = 67 +const EM_STARCORE = 58 +const EM_STM8 = 186 +const EM_STXP7X = 166 +const EM_SVX = 73 +const EM_TILE64 = 187 +const EM_TILEGX = 191 +const EM_TILEPRO = 188 +const EM_TINYJ = 61 +const EM_TI_ARP32 = 143 +const EM_TI_C2000 = 141 +const EM_TI_C5500 = 142 +const EM_TI_C6000 = 140 +const EM_TI_PRU = 144 +const EM_TMM_GPP = 96 +const EM_TPC = 98 +const EM_TRICORE = 44 +const EM_TRIMEDIA = 163 +const EM_TSK3000 = 131 +const EM_UNICORE = 110 +const EM_V800 = 36 +const EM_V850 = 87 +const EM_VAX = 75 +const EM_VIDEOCORE = 95 +const EM_VIDEOCORE3 = 137 +const EM_VIDEOCORE5 = 198 +const EM_VISIUM = 221 +const EM_VPP500 = 17 +const EM_X86_64 = 62 +const EM_XCORE = 203 +const EM_XGATE = 115 +const EM_XIMO16 = 170 +const EM_XTENSA = 94 +const EM_Z80 = 220 +const EM_ZSP = 79 +const ET_CORE = 4 +const ET_DYN = 3 +const ET_EXEC = 2 +const ET_HIOS = 65279 +const ET_HIPROC = 65535 +const ET_LOOS = 65024 +const ET_LOPROC = 65280 +const ET_NONE = 0 +const ET_NUM = 5 +const ET_REL = 1 +const EV_CURRENT = 1 +const EV_NONE = 0 +const EV_NUM = 2 +const EXIT_FAILURE = 1 +const EXIT_SUCCESS = 0 +const E_MIPS_ARCH_1 = 0 +const E_MIPS_ARCH_2 = 268435456 +const E_MIPS_ARCH_3 = 536870912 +const E_MIPS_ARCH_32 = 1342177280 +const E_MIPS_ARCH_4 = 805306368 +const E_MIPS_ARCH_5 = 1073741824 +const E_MIPS_ARCH_64 = 1610612736 +const FD_SETSIZE = 1024 +const FPE_FLTDIV = 3 +const FPE_FLTINV = 7 +const FPE_FLTOVF = 4 +const FPE_FLTRES = 6 +const FPE_FLTSUB = 8 +const FPE_FLTUND = 5 +const FPE_INTDIV = 1 +const FPE_INTOVF = 2 +const GRP_COMDAT = 1 +const HWCAP_S390_DFP = 64 +const HWCAP_S390_EIMM = 32 +const HWCAP_S390_ESAN3 = 1 +const HWCAP_S390_ETF3EH = 256 +const HWCAP_S390_GS = 16384 +const HWCAP_S390_HIGH_GPRS = 512 +const HWCAP_S390_HPAGE = 128 +const HWCAP_S390_LDISP = 16 +const HWCAP_S390_MSA = 8 +const HWCAP_S390_STFLE = 4 +const HWCAP_S390_TE = 1024 +const HWCAP_S390_VXRS = 2048 +const HWCAP_S390_VXRS_BCD = 4096 +const HWCAP_S390_VXRS_EXT = 8192 +const HWCAP_S390_ZARCH = 2 +const ILL_BADSTK = 8 +const ILL_COPROC = 7 +const ILL_ILLADR = 3 +const ILL_ILLOPC = 1 +const ILL_ILLOPN = 2 +const ILL_ILLTRP = 4 +const ILL_PRVOPC = 5 +const ILL_PRVREG = 6 +const ITIMER_PROF = 2 +const ITIMER_REAL = 0 +const ITIMER_VIRTUAL = 1 +const JT_ARG_MAX = -254 +const JT_AVPHYS_PAGES = -247 +const JT_DELAYTIMER_MAX = -245 +const JT_MINSIGSTKSZ = -244 +const JT_MQ_PRIO_MAX = -253 +const JT_NPROCESSORS_CONF = -250 +const JT_NPROCESSORS_ONLN = -249 +const JT_PAGE_SIZE = -252 +const JT_PHYS_PAGES = -248 +const JT_SEM_VALUE_MAX = -251 +const JT_SIGSTKSZ = -243 +const JT_ZERO = -246 +const LITUSE_ALPHA_ADDR = 0 +const LITUSE_ALPHA_BASE = 1 +const LITUSE_ALPHA_BYTOFF = 2 +const LITUSE_ALPHA_JSR = 3 +const LITUSE_ALPHA_TLS_GD = 4 +const LITUSE_ALPHA_TLS_LDM = 5 +const LL_DELAY_LOAD = 16 +const LL_DELTA = 32 +const LL_EXACT_MATCH = 1 +const LL_EXPORTS = 8 +const LL_IGNORE_INT_VER = 2 +const LL_NONE = 0 +const LL_REQUIRE_MINOR = 4 +const MB_CUR_MAX = 0 +const MINSIGSTKSZ = 4096 +const MIPS_AFL_ASE_DSP = 1 +const MIPS_AFL_ASE_DSPR2 = 2 +const MIPS_AFL_ASE_EVA = 4 +const MIPS_AFL_ASE_MASK = 8191 +const MIPS_AFL_ASE_MCU = 8 +const MIPS_AFL_ASE_MDMX = 16 +const MIPS_AFL_ASE_MICROMIPS = 2048 +const MIPS_AFL_ASE_MIPS16 = 1024 +const MIPS_AFL_ASE_MIPS3D = 32 +const MIPS_AFL_ASE_MSA = 512 +const MIPS_AFL_ASE_MT = 64 +const MIPS_AFL_ASE_SMARTMIPS = 128 +const MIPS_AFL_ASE_VIRT = 256 +const MIPS_AFL_ASE_XPA = 4096 +const MIPS_AFL_EXT_10000 = 11 +const MIPS_AFL_EXT_3900 = 10 +const MIPS_AFL_EXT_4010 = 8 +const MIPS_AFL_EXT_4100 = 9 +const MIPS_AFL_EXT_4111 = 13 +const MIPS_AFL_EXT_4120 = 14 +const MIPS_AFL_EXT_4650 = 7 +const MIPS_AFL_EXT_5400 = 15 +const MIPS_AFL_EXT_5500 = 16 +const MIPS_AFL_EXT_5900 = 6 +const MIPS_AFL_EXT_LOONGSON_2E = 17 +const MIPS_AFL_EXT_LOONGSON_2F = 18 +const MIPS_AFL_EXT_LOONGSON_3A = 4 +const MIPS_AFL_EXT_OCTEON = 5 +const MIPS_AFL_EXT_OCTEON2 = 2 +const MIPS_AFL_EXT_OCTEONP = 3 +const MIPS_AFL_EXT_SB1 = 12 +const MIPS_AFL_EXT_XLR = 1 +const MIPS_AFL_FLAGS1_ODDSPREG = 1 +const MIPS_AFL_REG_128 = 3 +const MIPS_AFL_REG_32 = 1 +const MIPS_AFL_REG_64 = 2 +const MIPS_AFL_REG_NONE = 0 +const NT_386_IOPERM = 513 +const NT_386_TLS = 512 +const NT_ARC_V2 = 1536 +const NT_ARM_HW_BREAK = 1026 +const NT_ARM_HW_WATCH = 1027 +const NT_ARM_PACA_KEYS = 1031 +const NT_ARM_PACG_KEYS = 1032 +const NT_ARM_PAC_ENABLED_KEYS = 1034 +const NT_ARM_PAC_MASK = 1030 +const NT_ARM_SVE = 1029 +const NT_ARM_SYSTEM_CALL = 1028 +const NT_ARM_TAGGED_ADDR_CTRL = 1033 +const NT_ARM_TLS = 1025 +const NT_ARM_VFP = 1024 +const NT_ASRS = 8 +const NT_AUXV = 6 +const NT_FILE = 1179208773 +const NT_FPREGSET = 2 +const NT_GNU_ABI_TAG = 1 +const NT_GNU_BUILD_ID = 3 +const NT_GNU_GOLD_VERSION = 4 +const NT_GNU_PROPERTY_TYPE_0 = 5 +const NT_GWINDOWS = 7 +const NT_LOONGARCH_CPUCFG = 2560 +const NT_LOONGARCH_CSR = 2561 +const NT_LOONGARCH_LASX = 2563 +const NT_LOONGARCH_LBT = 2564 +const NT_LOONGARCH_LSX = 2562 +const NT_LWPSINFO = 17 +const NT_LWPSTATUS = 16 +const NT_METAG_CBUF = 1280 +const NT_METAG_RPIPE = 1281 +const NT_METAG_TLS = 1282 +const NT_MIPS_DSP = 2048 +const NT_MIPS_FP_MODE = 2049 +const NT_MIPS_MSA = 2050 +const NT_PLATFORM = 5 +const NT_PPC_DSCR = 261 +const NT_PPC_EBB = 262 +const NT_PPC_PMU = 263 +const NT_PPC_PPR = 260 +const NT_PPC_SPE = 257 +const NT_PPC_TAR = 259 +const NT_PPC_TM_CDSCR = 271 +const NT_PPC_TM_CFPR = 265 +const NT_PPC_TM_CGPR = 264 +const NT_PPC_TM_CPPR = 270 +const NT_PPC_TM_CTAR = 269 +const NT_PPC_TM_CVMX = 266 +const NT_PPC_TM_CVSX = 267 +const NT_PPC_TM_SPR = 268 +const NT_PPC_VMX = 256 +const NT_PPC_VSX = 258 +const NT_PRCRED = 14 +const NT_PRFPREG = 2 +const NT_PRFPXREG = 20 +const NT_PRPSINFO = 3 +const NT_PRSTATUS = 1 +const NT_PRXFPREG = 1189489535 +const NT_PRXREG = 4 +const NT_PSINFO = 13 +const NT_PSTATUS = 10 +const NT_RISCV_CSR = 2304 +const NT_RISCV_VECTOR = 2305 +const NT_S390_CTRS = 772 +const NT_S390_GS_BC = 780 +const NT_S390_GS_CB = 779 +const NT_S390_HIGH_GPRS = 768 +const NT_S390_LAST_BREAK = 774 +const NT_S390_PREFIX = 773 +const NT_S390_RI_CB = 781 +const NT_S390_SYSTEM_CALL = 775 +const NT_S390_TDB = 776 +const NT_S390_TIMER = 769 +const NT_S390_TODCMP = 770 +const NT_S390_TODPREG = 771 +const NT_S390_VXRS_HIGH = 778 +const NT_S390_VXRS_LOW = 777 +const NT_SIGINFO = 1397311305 +const NT_TASKSTRUCT = 4 +const NT_UTSNAME = 15 +const NT_VERSION = 1 +const NT_VMCOREDD = 1792 +const NT_X86_XSTATE = 514 +const ODK_EXCEPTIONS = 2 +const ODK_FILL = 5 +const ODK_HWAND = 7 +const ODK_HWOR = 8 +const ODK_HWPATCH = 4 +const ODK_NULL = 0 +const ODK_PAD = 3 +const ODK_REGINFO = 1 +const ODK_TAGS = 6 +const OEX_DISMISS = 524288 +const OEX_FPDBUG = 262144 +const OEX_FPU_DIV0 = 8 +const OEX_FPU_INEX = 1 +const OEX_FPU_INVAL = 16 +const OEX_FPU_MAX = 7936 +const OEX_FPU_MIN = 31 +const OEX_FPU_OFLO = 4 +const OEX_FPU_UFLO = 2 +const OEX_PAGE0 = 65536 +const OEX_PRECISEFP = 262144 +const OEX_SMM = 131072 +const OHWA0_R4KEOP_CHECKED = 1 +const OHWA1_R4KEOP_CLEAN = 2 +const OHW_R4KEOP = 1 +const OHW_R5KCVTL = 8 +const OHW_R5KEOP = 4 +const OHW_R8KPFETCH = 2 +const OPAD_POSTFIX = 2 +const OPAD_PREFIX = 1 +const OPAD_SYMBOL = 4 +const PF_ARM_ABS = 1073741824 +const PF_ARM_PI = 536870912 +const PF_ARM_SB = 268435456 +const PF_HP_CODE = 16777216 +const PF_HP_FAR_SHARED = 2097152 +const PF_HP_LAZYSWAP = 67108864 +const PF_HP_MODIFY = 33554432 +const PF_HP_NEAR_SHARED = 4194304 +const PF_HP_PAGE_SIZE = 1048576 +const PF_HP_SBP = 134217728 +const PF_IA_64_NORECOV = 2147483648 +const PF_MASKOS = 267386880 +const PF_MASKPROC = 4026531840 +const PF_MIPS_LOCAL = 268435456 +const PF_PARISC_SBP = 134217728 +const PF_R = 4 +const PF_W = 2 +const PF_X = 1 +const PN_XNUM = 65535 +const POLL_ERR = 4 +const POLL_HUP = 6 +const POLL_IN = 1 +const POLL_MSG = 3 +const POLL_OUT = 2 +const POLL_PRI = 5 +const PPC64_OPT_LOCALENTRY = 4 +const PPC64_OPT_MULTI_TOC = 2 +const PPC64_OPT_TLS = 1 +const PPC_OPT_TLS = 1 +const PRIO_MAX = 20 +const PRIO_MIN = -20 +const PRIO_PGRP = 1 +const PRIO_PROCESS = 0 +const PRIO_USER = 2 +const PT_ARM_EXIDX = 1879048193 +const PT_DYNAMIC = 2 +const PT_GNU_EH_FRAME = 1685382480 +const PT_GNU_PROPERTY = 1685382483 +const PT_GNU_RELRO = 1685382482 +const PT_GNU_STACK = 1685382481 +const PT_HIOS = 1879048191 +const PT_HIPROC = 2147483647 +const PT_HISUNW = 1879048191 +const PT_HP_CORE_COMM = 1610612740 +const PT_HP_CORE_KERNEL = 1610612739 +const PT_HP_CORE_LOADABLE = 1610612742 +const PT_HP_CORE_MMF = 1610612745 +const PT_HP_CORE_NONE = 1610612737 +const PT_HP_CORE_PROC = 1610612741 +const PT_HP_CORE_SHM = 1610612744 +const PT_HP_CORE_STACK = 1610612743 +const PT_HP_CORE_VERSION = 1610612738 +const PT_HP_FASTBIND = 1610612753 +const PT_HP_HSL_ANNOT = 1610612755 +const PT_HP_OPT_ANNOT = 1610612754 +const PT_HP_PARALLEL = 1610612752 +const PT_HP_STACK = 1610612756 +const PT_HP_TLS = 1610612736 +const PT_IA_64_ARCHEXT = 1879048192 +const PT_IA_64_HP_HSL_ANOT = 1610612755 +const PT_IA_64_HP_OPT_ANOT = 1610612754 +const PT_IA_64_HP_STACK = 1610612756 +const PT_IA_64_UNWIND = 1879048193 +const PT_INTERP = 3 +const PT_LOAD = 1 +const PT_LOOS = 1610612736 +const PT_LOPROC = 1879048192 +const PT_LOSUNW = 1879048186 +const PT_MIPS_ABIFLAGS = 1879048195 +const PT_MIPS_OPTIONS = 1879048194 +const PT_MIPS_REGINFO = 1879048192 +const PT_MIPS_RTPROC = 1879048193 +const PT_NOTE = 4 +const PT_NULL = 0 +const PT_NUM = 8 +const PT_PARISC_ARCHEXT = 1879048192 +const PT_PARISC_UNWIND = 1879048193 +const PT_PHDR = 6 +const PT_SHLIB = 5 +const PT_SUNWBSS = 1879048186 +const PT_SUNWSTACK = 1879048187 +const PT_TLS = 7 +const RAND_MAX = 2147483647 +const RHF_CORD = 4096 +const RHF_DEFAULT_DELAY_LOAD = 512 +const RHF_DELTA_C_PLUS_PLUS = 64 +const RHF_GUARANTEE_INIT = 32 +const RHF_GUARANTEE_START_INIT = 128 +const RHF_NONE = 0 +const RHF_NOTPOT = 2 +const RHF_NO_LIBRARY_REPLACEMENT = 4 +const RHF_NO_MOVE = 8 +const RHF_NO_UNRES_UNDEF = 8192 +const RHF_PIXIE = 256 +const RHF_QUICKSTART = 1 +const RHF_REQUICKSTART = 1024 +const RHF_REQUICKSTARTED = 2048 +const RHF_RLD_ORDER_SAFE = 16384 +const RHF_SGI_ONLY = 16 +const RLIMIT_AS = 9 +const RLIMIT_CORE = 4 +const RLIMIT_CPU = 0 +const RLIMIT_DATA = 2 +const RLIMIT_FSIZE = 1 +const RLIMIT_LOCKS = 10 +const RLIMIT_MEMLOCK = 8 +const RLIMIT_MSGQUEUE = 12 +const RLIMIT_NICE = 13 +const RLIMIT_NLIMITS = 16 +const RLIMIT_NOFILE = 7 +const RLIMIT_NPROC = 6 +const RLIMIT_RSS = 5 +const RLIMIT_RTPRIO = 14 +const RLIMIT_RTTIME = 15 +const RLIMIT_SIGPENDING = 11 +const RLIMIT_STACK = 3 +const RLIM_INFINITY = 18446744073709551615 +const RLIM_NLIMITS = 16 +const RLIM_SAVED_CUR = 18446744073709551615 +const RLIM_SAVED_MAX = 18446744073709551615 +const RUSAGE_CHILDREN = -1 +const RUSAGE_SELF = 0 +const RUSAGE_THREAD = 1 +const R_386_16 = 20 +const R_386_32 = 1 +const R_386_32PLT = 11 +const R_386_8 = 22 +const R_386_COPY = 5 +const R_386_GLOB_DAT = 6 +const R_386_GOT32 = 3 +const R_386_GOT32X = 43 +const R_386_GOTOFF = 9 +const R_386_GOTPC = 10 +const R_386_IRELATIVE = 42 +const R_386_JMP_SLOT = 7 +const R_386_NONE = 0 +const R_386_NUM = 44 +const R_386_PC16 = 21 +const R_386_PC32 = 2 +const R_386_PC8 = 23 +const R_386_PLT32 = 4 +const R_386_RELATIVE = 8 +const R_386_SIZE32 = 38 +const R_386_TLS_DESC = 41 +const R_386_TLS_DESC_CALL = 40 +const R_386_TLS_DTPMOD32 = 35 +const R_386_TLS_DTPOFF32 = 36 +const R_386_TLS_GD = 18 +const R_386_TLS_GD_32 = 24 +const R_386_TLS_GD_CALL = 26 +const R_386_TLS_GD_POP = 27 +const R_386_TLS_GD_PUSH = 25 +const R_386_TLS_GOTDESC = 39 +const R_386_TLS_GOTIE = 16 +const R_386_TLS_IE = 15 +const R_386_TLS_IE_32 = 33 +const R_386_TLS_LDM = 19 +const R_386_TLS_LDM_32 = 28 +const R_386_TLS_LDM_CALL = 30 +const R_386_TLS_LDM_POP = 31 +const R_386_TLS_LDM_PUSH = 29 +const R_386_TLS_LDO_32 = 32 +const R_386_TLS_LE = 17 +const R_386_TLS_LE_32 = 34 +const R_386_TLS_TPOFF = 14 +const R_386_TLS_TPOFF32 = 37 +const R_390_12 = 2 +const R_390_16 = 3 +const R_390_20 = 57 +const R_390_32 = 4 +const R_390_64 = 22 +const R_390_8 = 1 +const R_390_COPY = 9 +const R_390_GLOB_DAT = 10 +const R_390_GOT12 = 6 +const R_390_GOT16 = 15 +const R_390_GOT20 = 58 +const R_390_GOT32 = 7 +const R_390_GOT64 = 24 +const R_390_GOTENT = 26 +const R_390_GOTOFF16 = 27 +const R_390_GOTOFF32 = 13 +const R_390_GOTOFF64 = 28 +const R_390_GOTPC = 14 +const R_390_GOTPCDBL = 21 +const R_390_GOTPLT12 = 29 +const R_390_GOTPLT16 = 30 +const R_390_GOTPLT20 = 59 +const R_390_GOTPLT32 = 31 +const R_390_GOTPLT64 = 32 +const R_390_GOTPLTENT = 33 +const R_390_JMP_SLOT = 11 +const R_390_NONE = 0 +const R_390_NUM = 61 +const R_390_PC16 = 16 +const R_390_PC16DBL = 17 +const R_390_PC32 = 5 +const R_390_PC32DBL = 19 +const R_390_PC64 = 23 +const R_390_PLT16DBL = 18 +const R_390_PLT32 = 8 +const R_390_PLT32DBL = 20 +const R_390_PLT64 = 25 +const R_390_PLTOFF16 = 34 +const R_390_PLTOFF32 = 35 +const R_390_PLTOFF64 = 36 +const R_390_RELATIVE = 12 +const R_390_TLS_DTPMOD = 54 +const R_390_TLS_DTPOFF = 55 +const R_390_TLS_GD32 = 40 +const R_390_TLS_GD64 = 41 +const R_390_TLS_GDCALL = 38 +const R_390_TLS_GOTIE12 = 42 +const R_390_TLS_GOTIE20 = 60 +const R_390_TLS_GOTIE32 = 43 +const R_390_TLS_GOTIE64 = 44 +const R_390_TLS_IE32 = 47 +const R_390_TLS_IE64 = 48 +const R_390_TLS_IEENT = 49 +const R_390_TLS_LDCALL = 39 +const R_390_TLS_LDM32 = 45 +const R_390_TLS_LDM64 = 46 +const R_390_TLS_LDO32 = 52 +const R_390_TLS_LDO64 = 53 +const R_390_TLS_LE32 = 50 +const R_390_TLS_LE64 = 51 +const R_390_TLS_LOAD = 37 +const R_390_TLS_TPOFF = 56 +const R_68K_16 = 2 +const R_68K_32 = 1 +const R_68K_8 = 3 +const R_68K_COPY = 19 +const R_68K_GLOB_DAT = 20 +const R_68K_GOT16 = 8 +const R_68K_GOT16O = 11 +const R_68K_GOT32 = 7 +const R_68K_GOT32O = 10 +const R_68K_GOT8 = 9 +const R_68K_GOT8O = 12 +const R_68K_JMP_SLOT = 21 +const R_68K_NONE = 0 +const R_68K_NUM = 43 +const R_68K_PC16 = 5 +const R_68K_PC32 = 4 +const R_68K_PC8 = 6 +const R_68K_PLT16 = 14 +const R_68K_PLT16O = 17 +const R_68K_PLT32 = 13 +const R_68K_PLT32O = 16 +const R_68K_PLT8 = 15 +const R_68K_PLT8O = 18 +const R_68K_RELATIVE = 22 +const R_68K_TLS_DTPMOD32 = 40 +const R_68K_TLS_DTPREL32 = 41 +const R_68K_TLS_GD16 = 26 +const R_68K_TLS_GD32 = 25 +const R_68K_TLS_GD8 = 27 +const R_68K_TLS_IE16 = 35 +const R_68K_TLS_IE32 = 34 +const R_68K_TLS_IE8 = 36 +const R_68K_TLS_LDM16 = 29 +const R_68K_TLS_LDM32 = 28 +const R_68K_TLS_LDM8 = 30 +const R_68K_TLS_LDO16 = 32 +const R_68K_TLS_LDO32 = 31 +const R_68K_TLS_LDO8 = 33 +const R_68K_TLS_LE16 = 38 +const R_68K_TLS_LE32 = 37 +const R_68K_TLS_LE8 = 39 +const R_68K_TLS_TPREL32 = 42 +const R_AARCH64_ABS16 = 259 +const R_AARCH64_ABS32 = 258 +const R_AARCH64_ABS64 = 257 +const R_AARCH64_ADD_ABS_LO12_NC = 277 +const R_AARCH64_ADR_GOT_PAGE = 311 +const R_AARCH64_ADR_PREL_LO21 = 274 +const R_AARCH64_ADR_PREL_PG_HI21 = 275 +const R_AARCH64_ADR_PREL_PG_HI21_NC = 276 +const R_AARCH64_CALL26 = 283 +const R_AARCH64_CONDBR19 = 280 +const R_AARCH64_COPY = 1024 +const R_AARCH64_GLOB_DAT = 1025 +const R_AARCH64_GOTREL32 = 308 +const R_AARCH64_GOTREL64 = 307 +const R_AARCH64_GOT_LD_PREL19 = 309 +const R_AARCH64_JUMP26 = 282 +const R_AARCH64_JUMP_SLOT = 1026 +const R_AARCH64_LD64_GOTOFF_LO15 = 310 +const R_AARCH64_LD64_GOTPAGE_LO15 = 313 +const R_AARCH64_LD64_GOT_LO12_NC = 312 +const R_AARCH64_LDST128_ABS_LO12_NC = 299 +const R_AARCH64_LDST16_ABS_LO12_NC = 284 +const R_AARCH64_LDST32_ABS_LO12_NC = 285 +const R_AARCH64_LDST64_ABS_LO12_NC = 286 +const R_AARCH64_LDST8_ABS_LO12_NC = 278 +const R_AARCH64_LD_PREL_LO19 = 273 +const R_AARCH64_MOVW_GOTOFF_G0 = 300 +const R_AARCH64_MOVW_GOTOFF_G0_NC = 301 +const R_AARCH64_MOVW_GOTOFF_G1 = 302 +const R_AARCH64_MOVW_GOTOFF_G1_NC = 303 +const R_AARCH64_MOVW_GOTOFF_G2 = 304 +const R_AARCH64_MOVW_GOTOFF_G2_NC = 305 +const R_AARCH64_MOVW_GOTOFF_G3 = 306 +const R_AARCH64_MOVW_PREL_G0 = 287 +const R_AARCH64_MOVW_PREL_G0_NC = 288 +const R_AARCH64_MOVW_PREL_G1 = 289 +const R_AARCH64_MOVW_PREL_G1_NC = 290 +const R_AARCH64_MOVW_PREL_G2 = 291 +const R_AARCH64_MOVW_PREL_G2_NC = 292 +const R_AARCH64_MOVW_PREL_G3 = 293 +const R_AARCH64_MOVW_SABS_G0 = 270 +const R_AARCH64_MOVW_SABS_G1 = 271 +const R_AARCH64_MOVW_SABS_G2 = 272 +const R_AARCH64_MOVW_UABS_G0 = 263 +const R_AARCH64_MOVW_UABS_G0_NC = 264 +const R_AARCH64_MOVW_UABS_G1 = 265 +const R_AARCH64_MOVW_UABS_G1_NC = 266 +const R_AARCH64_MOVW_UABS_G2 = 267 +const R_AARCH64_MOVW_UABS_G2_NC = 268 +const R_AARCH64_MOVW_UABS_G3 = 269 +const R_AARCH64_NONE = 0 +const R_AARCH64_P32_ABS32 = 1 +const R_AARCH64_P32_COPY = 180 +const R_AARCH64_P32_GLOB_DAT = 181 +const R_AARCH64_P32_IRELATIVE = 188 +const R_AARCH64_P32_JUMP_SLOT = 182 +const R_AARCH64_P32_RELATIVE = 183 +const R_AARCH64_P32_TLSDESC = 187 +const R_AARCH64_P32_TLS_DTPMOD = 184 +const R_AARCH64_P32_TLS_DTPREL = 185 +const R_AARCH64_P32_TLS_TPREL = 186 +const R_AARCH64_PREL16 = 262 +const R_AARCH64_PREL32 = 261 +const R_AARCH64_PREL64 = 260 +const R_AARCH64_RELATIVE = 1027 +const R_AARCH64_TLSDESC = 1031 +const R_AARCH64_TLSDESC_ADD = 568 +const R_AARCH64_TLSDESC_ADD_LO12 = 564 +const R_AARCH64_TLSDESC_ADR_PAGE21 = 562 +const R_AARCH64_TLSDESC_ADR_PREL21 = 561 +const R_AARCH64_TLSDESC_CALL = 569 +const R_AARCH64_TLSDESC_LD64_LO12 = 563 +const R_AARCH64_TLSDESC_LDR = 567 +const R_AARCH64_TLSDESC_LD_PREL19 = 560 +const R_AARCH64_TLSDESC_OFF_G0_NC = 566 +const R_AARCH64_TLSDESC_OFF_G1 = 565 +const R_AARCH64_TLSGD_ADD_LO12_NC = 514 +const R_AARCH64_TLSGD_ADR_PAGE21 = 513 +const R_AARCH64_TLSGD_ADR_PREL21 = 512 +const R_AARCH64_TLSGD_MOVW_G0_NC = 516 +const R_AARCH64_TLSGD_MOVW_G1 = 515 +const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 541 +const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 542 +const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 543 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 540 +const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 539 +const R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 528 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 529 +const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 530 +const R_AARCH64_TLSLD_ADD_LO12_NC = 519 +const R_AARCH64_TLSLD_ADR_PAGE21 = 518 +const R_AARCH64_TLSLD_ADR_PREL21 = 517 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 572 +const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 573 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 533 +const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 534 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 535 +const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 536 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 537 +const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 538 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 531 +const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 532 +const R_AARCH64_TLSLD_LD_PREL19 = 522 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 526 +const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 527 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 524 +const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 525 +const R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 523 +const R_AARCH64_TLSLD_MOVW_G0_NC = 521 +const R_AARCH64_TLSLD_MOVW_G1 = 520 +const R_AARCH64_TLSLE_ADD_TPREL_HI12 = 549 +const R_AARCH64_TLSLE_ADD_TPREL_LO12 = 550 +const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 551 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 570 +const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 571 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 554 +const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 555 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 556 +const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 557 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 558 +const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 559 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 552 +const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 553 +const R_AARCH64_TLSLE_MOVW_TPREL_G0 = 547 +const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 548 +const R_AARCH64_TLSLE_MOVW_TPREL_G1 = 545 +const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 546 +const R_AARCH64_TLSLE_MOVW_TPREL_G2 = 544 +const R_AARCH64_TLS_DTPMOD = 1028 +const R_AARCH64_TLS_DTPMOD64 = 1028 +const R_AARCH64_TLS_DTPREL = 1029 +const R_AARCH64_TLS_DTPREL64 = 1029 +const R_AARCH64_TLS_TPREL = 1030 +const R_AARCH64_TLS_TPREL64 = 1030 +const R_AARCH64_TSTBR14 = 279 +const R_ALPHA_BRADDR = 7 +const R_ALPHA_COPY = 24 +const R_ALPHA_DTPMOD64 = 31 +const R_ALPHA_DTPREL16 = 36 +const R_ALPHA_DTPREL64 = 33 +const R_ALPHA_DTPRELHI = 34 +const R_ALPHA_DTPRELLO = 35 +const R_ALPHA_GLOB_DAT = 25 +const R_ALPHA_GOTDTPREL = 32 +const R_ALPHA_GOTTPREL = 37 +const R_ALPHA_GPDISP = 6 +const R_ALPHA_GPREL16 = 19 +const R_ALPHA_GPREL32 = 3 +const R_ALPHA_GPRELHIGH = 17 +const R_ALPHA_GPRELLOW = 18 +const R_ALPHA_HINT = 8 +const R_ALPHA_JMP_SLOT = 26 +const R_ALPHA_LITERAL = 4 +const R_ALPHA_LITUSE = 5 +const R_ALPHA_NONE = 0 +const R_ALPHA_NUM = 46 +const R_ALPHA_REFLONG = 1 +const R_ALPHA_REFQUAD = 2 +const R_ALPHA_RELATIVE = 27 +const R_ALPHA_SREL16 = 9 +const R_ALPHA_SREL32 = 10 +const R_ALPHA_SREL64 = 11 +const R_ALPHA_TLSGD = 29 +const R_ALPHA_TLS_GD_HI = 28 +const R_ALPHA_TLS_LDM = 30 +const R_ALPHA_TPREL16 = 41 +const R_ALPHA_TPREL64 = 38 +const R_ALPHA_TPRELHI = 39 +const R_ALPHA_TPRELLO = 40 +const R_ARM_ABS12 = 6 +const R_ARM_ABS16 = 5 +const R_ARM_ABS32 = 2 +const R_ARM_ABS32_NOI = 55 +const R_ARM_ABS8 = 8 +const R_ARM_ALU_PCREL_15_8 = 33 +const R_ARM_ALU_PCREL_23_15 = 34 +const R_ARM_ALU_PCREL_7_0 = 32 +const R_ARM_ALU_PC_G0 = 58 +const R_ARM_ALU_PC_G0_NC = 57 +const R_ARM_ALU_PC_G1 = 60 +const R_ARM_ALU_PC_G1_NC = 59 +const R_ARM_ALU_PC_G2 = 61 +const R_ARM_ALU_SBREL_19_12 = 36 +const R_ARM_ALU_SBREL_27_20 = 37 +const R_ARM_ALU_SB_G0 = 71 +const R_ARM_ALU_SB_G0_NC = 70 +const R_ARM_ALU_SB_G1 = 73 +const R_ARM_ALU_SB_G1_NC = 72 +const R_ARM_ALU_SB_G2 = 74 +const R_ARM_AMP_VCALL9 = 12 +const R_ARM_BASE_ABS = 31 +const R_ARM_CALL = 28 +const R_ARM_COPY = 20 +const R_ARM_GLOB_DAT = 21 +const R_ARM_GNU_VTENTRY = 100 +const R_ARM_GNU_VTINHERIT = 101 +const R_ARM_GOT32 = 26 +const R_ARM_GOTOFF = 24 +const R_ARM_GOTOFF12 = 98 +const R_ARM_GOTPC = 25 +const R_ARM_GOTRELAX = 99 +const R_ARM_GOT_ABS = 95 +const R_ARM_GOT_BREL12 = 97 +const R_ARM_GOT_PREL = 96 +const R_ARM_IRELATIVE = 160 +const R_ARM_JUMP24 = 29 +const R_ARM_JUMP_SLOT = 22 +const R_ARM_LDC_PC_G0 = 67 +const R_ARM_LDC_PC_G1 = 68 +const R_ARM_LDC_PC_G2 = 69 +const R_ARM_LDC_SB_G0 = 81 +const R_ARM_LDC_SB_G1 = 82 +const R_ARM_LDC_SB_G2 = 83 +const R_ARM_LDRS_PC_G0 = 64 +const R_ARM_LDRS_PC_G1 = 65 +const R_ARM_LDRS_PC_G2 = 66 +const R_ARM_LDRS_SB_G0 = 78 +const R_ARM_LDRS_SB_G1 = 79 +const R_ARM_LDRS_SB_G2 = 80 +const R_ARM_LDR_PC_G1 = 62 +const R_ARM_LDR_PC_G2 = 63 +const R_ARM_LDR_SBREL_11_0 = 35 +const R_ARM_LDR_SB_G0 = 75 +const R_ARM_LDR_SB_G1 = 76 +const R_ARM_LDR_SB_G2 = 77 +const R_ARM_ME_TOO = 128 +const R_ARM_MOVT_ABS = 44 +const R_ARM_MOVT_BREL = 85 +const R_ARM_MOVT_PREL = 46 +const R_ARM_MOVW_ABS_NC = 43 +const R_ARM_MOVW_BREL = 86 +const R_ARM_MOVW_BREL_NC = 84 +const R_ARM_MOVW_PREL_NC = 45 +const R_ARM_NONE = 0 +const R_ARM_NUM = 256 +const R_ARM_PC13 = 4 +const R_ARM_PC24 = 1 +const R_ARM_PLT32 = 27 +const R_ARM_PLT32_ABS = 94 +const R_ARM_PREL31 = 42 +const R_ARM_RABS22 = 253 +const R_ARM_RBASE = 255 +const R_ARM_REL32 = 3 +const R_ARM_REL32_NOI = 56 +const R_ARM_RELATIVE = 23 +const R_ARM_RPC24 = 254 +const R_ARM_RREL32 = 252 +const R_ARM_RSBREL32 = 250 +const R_ARM_RXPC25 = 249 +const R_ARM_SBREL31 = 39 +const R_ARM_SBREL32 = 9 +const R_ARM_TARGET1 = 38 +const R_ARM_TARGET2 = 41 +const R_ARM_THM_ABS5 = 7 +const R_ARM_THM_ALU_PREL_11_0 = 53 +const R_ARM_THM_GOT_BREL12 = 131 +const R_ARM_THM_JUMP19 = 51 +const R_ARM_THM_JUMP24 = 30 +const R_ARM_THM_JUMP6 = 52 +const R_ARM_THM_MOVT_ABS = 48 +const R_ARM_THM_MOVT_BREL = 88 +const R_ARM_THM_MOVT_PREL = 50 +const R_ARM_THM_MOVW_ABS_NC = 47 +const R_ARM_THM_MOVW_BREL = 89 +const R_ARM_THM_MOVW_BREL_NC = 87 +const R_ARM_THM_MOVW_PREL_NC = 49 +const R_ARM_THM_PC11 = 102 +const R_ARM_THM_PC12 = 54 +const R_ARM_THM_PC22 = 10 +const R_ARM_THM_PC8 = 11 +const R_ARM_THM_PC9 = 103 +const R_ARM_THM_RPC22 = 251 +const R_ARM_THM_SWI8 = 14 +const R_ARM_THM_TLS_CALL = 93 +const R_ARM_THM_TLS_DESCSEQ = 129 +const R_ARM_THM_TLS_DESCSEQ16 = 129 +const R_ARM_THM_TLS_DESCSEQ32 = 130 +const R_ARM_THM_XPC22 = 16 +const R_ARM_TLS_CALL = 91 +const R_ARM_TLS_DESC = 13 +const R_ARM_TLS_DESCSEQ = 92 +const R_ARM_TLS_DTPMOD32 = 17 +const R_ARM_TLS_DTPOFF32 = 18 +const R_ARM_TLS_GD32 = 104 +const R_ARM_TLS_GOTDESC = 90 +const R_ARM_TLS_IE12GP = 111 +const R_ARM_TLS_IE32 = 107 +const R_ARM_TLS_LDM32 = 105 +const R_ARM_TLS_LDO12 = 109 +const R_ARM_TLS_LDO32 = 106 +const R_ARM_TLS_LE12 = 110 +const R_ARM_TLS_LE32 = 108 +const R_ARM_TLS_TPOFF32 = 19 +const R_ARM_V4BX = 40 +const R_ARM_XPC25 = 15 +const R_BPF_MAP_FD = 1 +const R_BPF_NONE = 0 +const R_CKCORE_ADDR32 = 1 +const R_CKCORE_ADDRGOT = 17 +const R_CKCORE_ADDRGOT_HI16 = 36 +const R_CKCORE_ADDRGOT_LO16 = 37 +const R_CKCORE_ADDRPLT = 18 +const R_CKCORE_ADDRPLT_HI16 = 38 +const R_CKCORE_ADDRPLT_LO16 = 39 +const R_CKCORE_ADDR_HI16 = 24 +const R_CKCORE_ADDR_LO16 = 25 +const R_CKCORE_COPY = 10 +const R_CKCORE_DOFFSET_IMM18 = 44 +const R_CKCORE_DOFFSET_IMM18BY2 = 45 +const R_CKCORE_DOFFSET_IMM18BY4 = 46 +const R_CKCORE_DOFFSET_LO16 = 42 +const R_CKCORE_GLOB_DAT = 11 +const R_CKCORE_GOT12 = 30 +const R_CKCORE_GOT32 = 15 +const R_CKCORE_GOTOFF = 13 +const R_CKCORE_GOTOFF_HI16 = 28 +const R_CKCORE_GOTOFF_LO16 = 29 +const R_CKCORE_GOTPC = 14 +const R_CKCORE_GOTPC_HI16 = 26 +const R_CKCORE_GOTPC_LO16 = 27 +const R_CKCORE_GOT_HI16 = 31 +const R_CKCORE_GOT_IMM18BY4 = 48 +const R_CKCORE_GOT_LO16 = 32 +const R_CKCORE_JUMP_SLOT = 12 +const R_CKCORE_NONE = 0 +const R_CKCORE_PCREL32 = 5 +const R_CKCORE_PCRELIMM11BY2 = 3 +const R_CKCORE_PCRELIMM8BY4 = 2 +const R_CKCORE_PCRELJSR_IMM11BY2 = 6 +const R_CKCORE_PCREL_IMM10BY2 = 22 +const R_CKCORE_PCREL_IMM10BY4 = 23 +const R_CKCORE_PCREL_IMM16BY2 = 20 +const R_CKCORE_PCREL_IMM16BY4 = 21 +const R_CKCORE_PCREL_IMM18BY2 = 43 +const R_CKCORE_PCREL_IMM26BY2 = 19 +const R_CKCORE_PCREL_IMM7BY4 = 50 +const R_CKCORE_PCREL_JSR_IMM26BY2 = 40 +const R_CKCORE_PLT12 = 33 +const R_CKCORE_PLT32 = 16 +const R_CKCORE_PLT_HI16 = 34 +const R_CKCORE_PLT_IMM18BY4 = 49 +const R_CKCORE_PLT_LO16 = 35 +const R_CKCORE_RELATIVE = 9 +const R_CKCORE_TLS_DTPMOD32 = 56 +const R_CKCORE_TLS_DTPOFF32 = 57 +const R_CKCORE_TLS_GD32 = 53 +const R_CKCORE_TLS_IE32 = 52 +const R_CKCORE_TLS_LDM32 = 54 +const R_CKCORE_TLS_LDO32 = 55 +const R_CKCORE_TLS_LE32 = 51 +const R_CKCORE_TLS_TPOFF32 = 58 +const R_CKCORE_TOFFSET_LO16 = 41 +const R_CRIS_16 = 2 +const R_CRIS_16_GOT = 13 +const R_CRIS_16_GOTPLT = 15 +const R_CRIS_16_PCREL = 5 +const R_CRIS_32 = 3 +const R_CRIS_32_GOT = 14 +const R_CRIS_32_GOTPLT = 16 +const R_CRIS_32_GOTREL = 17 +const R_CRIS_32_PCREL = 6 +const R_CRIS_32_PLT_GOTREL = 18 +const R_CRIS_32_PLT_PCREL = 19 +const R_CRIS_8 = 1 +const R_CRIS_8_PCREL = 4 +const R_CRIS_COPY = 9 +const R_CRIS_GLOB_DAT = 10 +const R_CRIS_GNU_VTENTRY = 8 +const R_CRIS_GNU_VTINHERIT = 7 +const R_CRIS_JUMP_SLOT = 11 +const R_CRIS_NONE = 0 +const R_CRIS_NUM = 20 +const R_CRIS_RELATIVE = 12 +const R_IA64_COPY = 132 +const R_IA64_DIR32LSB = 37 +const R_IA64_DIR32MSB = 36 +const R_IA64_DIR64LSB = 39 +const R_IA64_DIR64MSB = 38 +const R_IA64_DTPMOD64LSB = 167 +const R_IA64_DTPMOD64MSB = 166 +const R_IA64_DTPREL14 = 177 +const R_IA64_DTPREL22 = 178 +const R_IA64_DTPREL32LSB = 181 +const R_IA64_DTPREL32MSB = 180 +const R_IA64_DTPREL64I = 179 +const R_IA64_DTPREL64LSB = 183 +const R_IA64_DTPREL64MSB = 182 +const R_IA64_FPTR32LSB = 69 +const R_IA64_FPTR32MSB = 68 +const R_IA64_FPTR64I = 67 +const R_IA64_FPTR64LSB = 71 +const R_IA64_FPTR64MSB = 70 +const R_IA64_GPREL22 = 42 +const R_IA64_GPREL32LSB = 45 +const R_IA64_GPREL32MSB = 44 +const R_IA64_GPREL64I = 43 +const R_IA64_GPREL64LSB = 47 +const R_IA64_GPREL64MSB = 46 +const R_IA64_IMM14 = 33 +const R_IA64_IMM22 = 34 +const R_IA64_IMM64 = 35 +const R_IA64_IPLTLSB = 129 +const R_IA64_IPLTMSB = 128 +const R_IA64_LDXMOV = 135 +const R_IA64_LTOFF22 = 50 +const R_IA64_LTOFF22X = 134 +const R_IA64_LTOFF64I = 51 +const R_IA64_LTOFF_DTPMOD22 = 170 +const R_IA64_LTOFF_DTPREL22 = 186 +const R_IA64_LTOFF_FPTR22 = 82 +const R_IA64_LTOFF_FPTR32LSB = 85 +const R_IA64_LTOFF_FPTR32MSB = 84 +const R_IA64_LTOFF_FPTR64I = 83 +const R_IA64_LTOFF_FPTR64LSB = 87 +const R_IA64_LTOFF_FPTR64MSB = 86 +const R_IA64_LTOFF_TPREL22 = 154 +const R_IA64_LTV32LSB = 117 +const R_IA64_LTV32MSB = 116 +const R_IA64_LTV64LSB = 119 +const R_IA64_LTV64MSB = 118 +const R_IA64_NONE = 0 +const R_IA64_PCREL21B = 73 +const R_IA64_PCREL21BI = 121 +const R_IA64_PCREL21F = 75 +const R_IA64_PCREL21M = 74 +const R_IA64_PCREL22 = 122 +const R_IA64_PCREL32LSB = 77 +const R_IA64_PCREL32MSB = 76 +const R_IA64_PCREL60B = 72 +const R_IA64_PCREL64I = 123 +const R_IA64_PCREL64LSB = 79 +const R_IA64_PCREL64MSB = 78 +const R_IA64_PLTOFF22 = 58 +const R_IA64_PLTOFF64I = 59 +const R_IA64_PLTOFF64LSB = 63 +const R_IA64_PLTOFF64MSB = 62 +const R_IA64_REL32LSB = 109 +const R_IA64_REL32MSB = 108 +const R_IA64_REL64LSB = 111 +const R_IA64_REL64MSB = 110 +const R_IA64_SECREL32LSB = 101 +const R_IA64_SECREL32MSB = 100 +const R_IA64_SECREL64LSB = 103 +const R_IA64_SECREL64MSB = 102 +const R_IA64_SEGREL32LSB = 93 +const R_IA64_SEGREL32MSB = 92 +const R_IA64_SEGREL64LSB = 95 +const R_IA64_SEGREL64MSB = 94 +const R_IA64_SUB = 133 +const R_IA64_TPREL14 = 145 +const R_IA64_TPREL22 = 146 +const R_IA64_TPREL64I = 147 +const R_IA64_TPREL64LSB = 151 +const R_IA64_TPREL64MSB = 150 +const R_LARCH_32 = 1 +const R_LARCH_32_PCREL = 99 +const R_LARCH_64 = 2 +const R_LARCH_ABS64_HI12 = 70 +const R_LARCH_ABS64_LO20 = 69 +const R_LARCH_ABS_HI20 = 67 +const R_LARCH_ABS_LO12 = 68 +const R_LARCH_ADD16 = 48 +const R_LARCH_ADD24 = 49 +const R_LARCH_ADD32 = 50 +const R_LARCH_ADD64 = 51 +const R_LARCH_ADD8 = 47 +const R_LARCH_B16 = 64 +const R_LARCH_B21 = 65 +const R_LARCH_B26 = 66 +const R_LARCH_COPY = 4 +const R_LARCH_GNU_VTENTRY = 58 +const R_LARCH_GNU_VTINHERIT = 57 +const R_LARCH_GOT64_HI12 = 82 +const R_LARCH_GOT64_LO20 = 81 +const R_LARCH_GOT64_PC_HI12 = 78 +const R_LARCH_GOT64_PC_LO20 = 77 +const R_LARCH_GOT_HI20 = 79 +const R_LARCH_GOT_LO12 = 80 +const R_LARCH_GOT_PC_HI20 = 75 +const R_LARCH_GOT_PC_LO12 = 76 +const R_LARCH_IRELATIVE = 12 +const R_LARCH_JUMP_SLOT = 5 +const R_LARCH_MARK_LA = 20 +const R_LARCH_MARK_PCREL = 21 +const R_LARCH_NONE = 0 +const R_LARCH_PCALA64_HI12 = 74 +const R_LARCH_PCALA64_LO20 = 73 +const R_LARCH_PCALA_HI20 = 71 +const R_LARCH_PCALA_LO12 = 72 +const R_LARCH_RELATIVE = 3 +const R_LARCH_RELAX = 100 +const R_LARCH_SOP_ADD = 35 +const R_LARCH_SOP_AND = 36 +const R_LARCH_SOP_ASSERT = 30 +const R_LARCH_SOP_IF_ELSE = 37 +const R_LARCH_SOP_NOT = 31 +const R_LARCH_SOP_POP_32_S_0_10_10_16_S2 = 45 +const R_LARCH_SOP_POP_32_S_0_5_10_16_S2 = 44 +const R_LARCH_SOP_POP_32_S_10_12 = 40 +const R_LARCH_SOP_POP_32_S_10_16 = 41 +const R_LARCH_SOP_POP_32_S_10_16_S2 = 42 +const R_LARCH_SOP_POP_32_S_10_5 = 38 +const R_LARCH_SOP_POP_32_S_5_20 = 43 +const R_LARCH_SOP_POP_32_U = 46 +const R_LARCH_SOP_POP_32_U_10_12 = 39 +const R_LARCH_SOP_PUSH_ABSOLUTE = 23 +const R_LARCH_SOP_PUSH_DUP = 24 +const R_LARCH_SOP_PUSH_GPREL = 25 +const R_LARCH_SOP_PUSH_PCREL = 22 +const R_LARCH_SOP_PUSH_PLT_PCREL = 29 +const R_LARCH_SOP_PUSH_TLS_GD = 28 +const R_LARCH_SOP_PUSH_TLS_GOT = 27 +const R_LARCH_SOP_PUSH_TLS_TPREL = 26 +const R_LARCH_SOP_SL = 33 +const R_LARCH_SOP_SR = 34 +const R_LARCH_SOP_SUB = 32 +const R_LARCH_SUB16 = 53 +const R_LARCH_SUB24 = 54 +const R_LARCH_SUB32 = 55 +const R_LARCH_SUB64 = 56 +const R_LARCH_SUB8 = 52 +const R_LARCH_TLS_DTPMOD32 = 6 +const R_LARCH_TLS_DTPMOD64 = 7 +const R_LARCH_TLS_DTPREL32 = 8 +const R_LARCH_TLS_DTPREL64 = 9 +const R_LARCH_TLS_GD_HI20 = 98 +const R_LARCH_TLS_GD_PC_HI20 = 97 +const R_LARCH_TLS_IE64_HI12 = 94 +const R_LARCH_TLS_IE64_LO20 = 93 +const R_LARCH_TLS_IE64_PC_HI12 = 90 +const R_LARCH_TLS_IE64_PC_LO20 = 89 +const R_LARCH_TLS_IE_HI20 = 91 +const R_LARCH_TLS_IE_LO12 = 92 +const R_LARCH_TLS_IE_PC_HI20 = 87 +const R_LARCH_TLS_IE_PC_LO12 = 88 +const R_LARCH_TLS_LD_HI20 = 96 +const R_LARCH_TLS_LD_PC_HI20 = 95 +const R_LARCH_TLS_LE64_HI12 = 86 +const R_LARCH_TLS_LE64_LO20 = 85 +const R_LARCH_TLS_LE_HI20 = 83 +const R_LARCH_TLS_LE_LO12 = 84 +const R_LARCH_TLS_TPREL32 = 10 +const R_LARCH_TLS_TPREL64 = 11 +const R_M32R_10_PCREL = 4 +const R_M32R_10_PCREL_RELA = 36 +const R_M32R_16 = 1 +const R_M32R_16_RELA = 33 +const R_M32R_18_PCREL = 5 +const R_M32R_18_PCREL_RELA = 37 +const R_M32R_24 = 3 +const R_M32R_24_RELA = 35 +const R_M32R_26_PCREL = 6 +const R_M32R_26_PCREL_RELA = 38 +const R_M32R_26_PLTREL = 49 +const R_M32R_32 = 2 +const R_M32R_32_RELA = 34 +const R_M32R_COPY = 50 +const R_M32R_GLOB_DAT = 51 +const R_M32R_GNU_VTENTRY = 12 +const R_M32R_GNU_VTINHERIT = 11 +const R_M32R_GOT16_HI_SLO = 57 +const R_M32R_GOT16_HI_ULO = 56 +const R_M32R_GOT16_LO = 58 +const R_M32R_GOT24 = 48 +const R_M32R_GOTOFF = 54 +const R_M32R_GOTOFF_HI_SLO = 63 +const R_M32R_GOTOFF_HI_ULO = 62 +const R_M32R_GOTOFF_LO = 64 +const R_M32R_GOTPC24 = 55 +const R_M32R_GOTPC_HI_SLO = 60 +const R_M32R_GOTPC_HI_ULO = 59 +const R_M32R_GOTPC_LO = 61 +const R_M32R_HI16_SLO = 8 +const R_M32R_HI16_SLO_RELA = 40 +const R_M32R_HI16_ULO = 7 +const R_M32R_HI16_ULO_RELA = 39 +const R_M32R_JMP_SLOT = 52 +const R_M32R_LO16 = 9 +const R_M32R_LO16_RELA = 41 +const R_M32R_NONE = 0 +const R_M32R_NUM = 256 +const R_M32R_REL32 = 45 +const R_M32R_RELATIVE = 53 +const R_M32R_RELA_GNU_VTENTRY = 44 +const R_M32R_RELA_GNU_VTINHERIT = 43 +const R_M32R_SDA16 = 10 +const R_M32R_SDA16_RELA = 42 +const R_MICROBLAZE_32 = 1 +const R_MICROBLAZE_32_LO = 6 +const R_MICROBLAZE_32_PCREL = 2 +const R_MICROBLAZE_32_PCREL_LO = 4 +const R_MICROBLAZE_32_SYM_OP_SYM = 10 +const R_MICROBLAZE_64 = 5 +const R_MICROBLAZE_64_NONE = 9 +const R_MICROBLAZE_64_PCREL = 3 +const R_MICROBLAZE_COPY = 21 +const R_MICROBLAZE_GLOB_DAT = 18 +const R_MICROBLAZE_GNU_VTENTRY = 12 +const R_MICROBLAZE_GNU_VTINHERIT = 11 +const R_MICROBLAZE_GOTOFF_32 = 20 +const R_MICROBLAZE_GOTOFF_64 = 19 +const R_MICROBLAZE_GOTPC_64 = 13 +const R_MICROBLAZE_GOT_64 = 14 +const R_MICROBLAZE_JUMP_SLOT = 17 +const R_MICROBLAZE_NONE = 0 +const R_MICROBLAZE_PLT_64 = 15 +const R_MICROBLAZE_REL = 16 +const R_MICROBLAZE_SRO32 = 7 +const R_MICROBLAZE_SRW32 = 8 +const R_MICROBLAZE_TLS = 22 +const R_MICROBLAZE_TLSDTPMOD32 = 25 +const R_MICROBLAZE_TLSDTPREL32 = 26 +const R_MICROBLAZE_TLSDTPREL64 = 27 +const R_MICROBLAZE_TLSGD = 23 +const R_MICROBLAZE_TLSGOTTPREL32 = 28 +const R_MICROBLAZE_TLSLD = 24 +const R_MICROBLAZE_TLSTPREL32 = 29 +const R_MIPS_16 = 1 +const R_MIPS_26 = 4 +const R_MIPS_32 = 2 +const R_MIPS_64 = 18 +const R_MIPS_ADD_IMMEDIATE = 34 +const R_MIPS_CALL16 = 11 +const R_MIPS_CALL_HI16 = 30 +const R_MIPS_CALL_LO16 = 31 +const R_MIPS_COPY = 126 +const R_MIPS_DELETE = 27 +const R_MIPS_GLOB_DAT = 51 +const R_MIPS_GOT16 = 9 +const R_MIPS_GOT_DISP = 19 +const R_MIPS_GOT_HI16 = 22 +const R_MIPS_GOT_LO16 = 23 +const R_MIPS_GOT_OFST = 21 +const R_MIPS_GOT_PAGE = 20 +const R_MIPS_GPREL16 = 7 +const R_MIPS_GPREL32 = 12 +const R_MIPS_HI16 = 5 +const R_MIPS_HIGHER = 28 +const R_MIPS_HIGHEST = 29 +const R_MIPS_INSERT_A = 25 +const R_MIPS_INSERT_B = 26 +const R_MIPS_JALR = 37 +const R_MIPS_JUMP_SLOT = 127 +const R_MIPS_LITERAL = 8 +const R_MIPS_LO16 = 6 +const R_MIPS_NONE = 0 +const R_MIPS_NUM = 128 +const R_MIPS_PC16 = 10 +const R_MIPS_PJUMP = 35 +const R_MIPS_REL16 = 33 +const R_MIPS_REL32 = 3 +const R_MIPS_RELGOT = 36 +const R_MIPS_SCN_DISP = 32 +const R_MIPS_SHIFT5 = 16 +const R_MIPS_SHIFT6 = 17 +const R_MIPS_SUB = 24 +const R_MIPS_TLS_DTPMOD32 = 38 +const R_MIPS_TLS_DTPMOD64 = 40 +const R_MIPS_TLS_DTPREL32 = 39 +const R_MIPS_TLS_DTPREL64 = 41 +const R_MIPS_TLS_DTPREL_HI16 = 44 +const R_MIPS_TLS_DTPREL_LO16 = 45 +const R_MIPS_TLS_GD = 42 +const R_MIPS_TLS_GOTTPREL = 46 +const R_MIPS_TLS_LDM = 43 +const R_MIPS_TLS_TPREL32 = 47 +const R_MIPS_TLS_TPREL64 = 48 +const R_MIPS_TLS_TPREL_HI16 = 49 +const R_MIPS_TLS_TPREL_LO16 = 50 +const R_MN10300_16 = 2 +const R_MN10300_24 = 9 +const R_MN10300_32 = 1 +const R_MN10300_8 = 3 +const R_MN10300_COPY = 20 +const R_MN10300_GLOB_DAT = 21 +const R_MN10300_GNU_VTENTRY = 8 +const R_MN10300_GNU_VTINHERIT = 7 +const R_MN10300_GOT16 = 19 +const R_MN10300_GOT24 = 18 +const R_MN10300_GOT32 = 17 +const R_MN10300_GOTOFF16 = 14 +const R_MN10300_GOTOFF24 = 13 +const R_MN10300_GOTOFF32 = 12 +const R_MN10300_GOTPC16 = 11 +const R_MN10300_GOTPC32 = 10 +const R_MN10300_JMP_SLOT = 22 +const R_MN10300_NONE = 0 +const R_MN10300_NUM = 24 +const R_MN10300_PCREL16 = 5 +const R_MN10300_PCREL32 = 4 +const R_MN10300_PCREL8 = 6 +const R_MN10300_PLT16 = 16 +const R_MN10300_PLT32 = 15 +const R_MN10300_RELATIVE = 23 +const R_NIOS2_ALIGN = 21 +const R_NIOS2_BFD_RELOC_16 = 13 +const R_NIOS2_BFD_RELOC_32 = 12 +const R_NIOS2_BFD_RELOC_8 = 14 +const R_NIOS2_CACHE_OPX = 6 +const R_NIOS2_CALL16 = 23 +const R_NIOS2_CALL26 = 4 +const R_NIOS2_CALL26_NOAT = 41 +const R_NIOS2_CALLR = 20 +const R_NIOS2_CALL_HA = 45 +const R_NIOS2_CALL_LO = 44 +const R_NIOS2_CJMP = 19 +const R_NIOS2_COPY = 36 +const R_NIOS2_GLOB_DAT = 37 +const R_NIOS2_GNU_VTENTRY = 17 +const R_NIOS2_GNU_VTINHERIT = 16 +const R_NIOS2_GOT16 = 22 +const R_NIOS2_GOTOFF = 40 +const R_NIOS2_GOTOFF_HA = 25 +const R_NIOS2_GOTOFF_LO = 24 +const R_NIOS2_GOT_HA = 43 +const R_NIOS2_GOT_LO = 42 +const R_NIOS2_GPREL = 15 +const R_NIOS2_HI16 = 9 +const R_NIOS2_HIADJ16 = 11 +const R_NIOS2_IMM5 = 5 +const R_NIOS2_IMM6 = 7 +const R_NIOS2_IMM8 = 8 +const R_NIOS2_JUMP_SLOT = 38 +const R_NIOS2_LO16 = 10 +const R_NIOS2_NONE = 0 +const R_NIOS2_PCREL16 = 3 +const R_NIOS2_PCREL_HA = 27 +const R_NIOS2_PCREL_LO = 26 +const R_NIOS2_RELATIVE = 39 +const R_NIOS2_S16 = 1 +const R_NIOS2_TLS_DTPMOD = 33 +const R_NIOS2_TLS_DTPREL = 34 +const R_NIOS2_TLS_GD16 = 28 +const R_NIOS2_TLS_IE16 = 31 +const R_NIOS2_TLS_LDM16 = 29 +const R_NIOS2_TLS_LDO16 = 30 +const R_NIOS2_TLS_LE16 = 32 +const R_NIOS2_TLS_TPREL = 35 +const R_NIOS2_U16 = 2 +const R_NIOS2_UJMP = 18 +const R_OR1K_16 = 2 +const R_OR1K_16_PCREL = 10 +const R_OR1K_32 = 1 +const R_OR1K_32_PCREL = 9 +const R_OR1K_8 = 3 +const R_OR1K_8_PCREL = 11 +const R_OR1K_COPY = 18 +const R_OR1K_GLOB_DAT = 19 +const R_OR1K_GNU_VTENTRY = 7 +const R_OR1K_GNU_VTINHERIT = 8 +const R_OR1K_GOT16 = 14 +const R_OR1K_GOTOFF_HI16 = 16 +const R_OR1K_GOTOFF_LO16 = 17 +const R_OR1K_GOTPC_HI16 = 12 +const R_OR1K_GOTPC_LO16 = 13 +const R_OR1K_HI_16_IN_INSN = 5 +const R_OR1K_INSN_REL_26 = 6 +const R_OR1K_JMP_SLOT = 20 +const R_OR1K_LO_16_IN_INSN = 4 +const R_OR1K_NONE = 0 +const R_OR1K_PLT26 = 15 +const R_OR1K_RELATIVE = 21 +const R_OR1K_TLS_DTPMOD = 34 +const R_OR1K_TLS_DTPOFF = 33 +const R_OR1K_TLS_GD_HI16 = 22 +const R_OR1K_TLS_GD_LO16 = 23 +const R_OR1K_TLS_IE_HI16 = 28 +const R_OR1K_TLS_IE_LO16 = 29 +const R_OR1K_TLS_LDM_HI16 = 24 +const R_OR1K_TLS_LDM_LO16 = 25 +const R_OR1K_TLS_LDO_HI16 = 26 +const R_OR1K_TLS_LDO_LO16 = 27 +const R_OR1K_TLS_LE_HI16 = 30 +const R_OR1K_TLS_LE_LO16 = 31 +const R_OR1K_TLS_TPOFF = 32 +const R_PARISC_COPY = 128 +const R_PARISC_DIR14DR = 84 +const R_PARISC_DIR14R = 6 +const R_PARISC_DIR14WR = 83 +const R_PARISC_DIR16DF = 87 +const R_PARISC_DIR16F = 85 +const R_PARISC_DIR16WF = 86 +const R_PARISC_DIR17F = 4 +const R_PARISC_DIR17R = 3 +const R_PARISC_DIR21L = 2 +const R_PARISC_DIR32 = 1 +const R_PARISC_DIR64 = 80 +const R_PARISC_DPREL14R = 22 +const R_PARISC_DPREL21L = 18 +const R_PARISC_EPLT = 130 +const R_PARISC_FPTR64 = 64 +const R_PARISC_GNU_VTENTRY = 232 +const R_PARISC_GNU_VTINHERIT = 233 +const R_PARISC_GPREL14DR = 92 +const R_PARISC_GPREL14R = 30 +const R_PARISC_GPREL14WR = 91 +const R_PARISC_GPREL16DF = 95 +const R_PARISC_GPREL16F = 93 +const R_PARISC_GPREL16WF = 94 +const R_PARISC_GPREL21L = 26 +const R_PARISC_GPREL64 = 88 +const R_PARISC_HIRESERVE = 255 +const R_PARISC_IPLT = 129 +const R_PARISC_LORESERVE = 128 +const R_PARISC_LTOFF14DR = 100 +const R_PARISC_LTOFF14R = 38 +const R_PARISC_LTOFF14WR = 99 +const R_PARISC_LTOFF16DF = 103 +const R_PARISC_LTOFF16F = 101 +const R_PARISC_LTOFF16WF = 102 +const R_PARISC_LTOFF21L = 34 +const R_PARISC_LTOFF64 = 96 +const R_PARISC_LTOFF_FPTR14DR = 124 +const R_PARISC_LTOFF_FPTR14R = 62 +const R_PARISC_LTOFF_FPTR14WR = 123 +const R_PARISC_LTOFF_FPTR16DF = 127 +const R_PARISC_LTOFF_FPTR16F = 125 +const R_PARISC_LTOFF_FPTR16WF = 126 +const R_PARISC_LTOFF_FPTR21L = 58 +const R_PARISC_LTOFF_FPTR32 = 57 +const R_PARISC_LTOFF_FPTR64 = 120 +const R_PARISC_LTOFF_TP14DR = 228 +const R_PARISC_LTOFF_TP14F = 167 +const R_PARISC_LTOFF_TP14R = 166 +const R_PARISC_LTOFF_TP14WR = 227 +const R_PARISC_LTOFF_TP16DF = 231 +const R_PARISC_LTOFF_TP16F = 229 +const R_PARISC_LTOFF_TP16WF = 230 +const R_PARISC_LTOFF_TP21L = 162 +const R_PARISC_LTOFF_TP64 = 224 +const R_PARISC_NONE = 0 +const R_PARISC_PCREL14DR = 76 +const R_PARISC_PCREL14R = 14 +const R_PARISC_PCREL14WR = 75 +const R_PARISC_PCREL16DF = 79 +const R_PARISC_PCREL16F = 77 +const R_PARISC_PCREL16WF = 78 +const R_PARISC_PCREL17F = 12 +const R_PARISC_PCREL17R = 11 +const R_PARISC_PCREL21L = 10 +const R_PARISC_PCREL22F = 74 +const R_PARISC_PCREL32 = 9 +const R_PARISC_PCREL64 = 72 +const R_PARISC_PLABEL14R = 70 +const R_PARISC_PLABEL21L = 66 +const R_PARISC_PLABEL32 = 65 +const R_PARISC_PLTOFF14DR = 116 +const R_PARISC_PLTOFF14R = 54 +const R_PARISC_PLTOFF14WR = 115 +const R_PARISC_PLTOFF16DF = 119 +const R_PARISC_PLTOFF16F = 117 +const R_PARISC_PLTOFF16WF = 118 +const R_PARISC_PLTOFF21L = 50 +const R_PARISC_SECREL32 = 41 +const R_PARISC_SECREL64 = 104 +const R_PARISC_SEGBASE = 48 +const R_PARISC_SEGREL32 = 49 +const R_PARISC_SEGREL64 = 112 +const R_PARISC_TLS_DTPMOD32 = 242 +const R_PARISC_TLS_DTPMOD64 = 243 +const R_PARISC_TLS_DTPOFF32 = 244 +const R_PARISC_TLS_DTPOFF64 = 245 +const R_PARISC_TLS_GD14R = 235 +const R_PARISC_TLS_GD21L = 234 +const R_PARISC_TLS_GDCALL = 236 +const R_PARISC_TLS_IE14R = 166 +const R_PARISC_TLS_IE21L = 162 +const R_PARISC_TLS_LDM14R = 238 +const R_PARISC_TLS_LDM21L = 237 +const R_PARISC_TLS_LDMCALL = 239 +const R_PARISC_TLS_LDO14R = 241 +const R_PARISC_TLS_LDO21L = 240 +const R_PARISC_TLS_LE14R = 158 +const R_PARISC_TLS_LE21L = 154 +const R_PARISC_TLS_TPREL32 = 153 +const R_PARISC_TLS_TPREL64 = 216 +const R_PARISC_TPREL14DR = 220 +const R_PARISC_TPREL14R = 158 +const R_PARISC_TPREL14WR = 219 +const R_PARISC_TPREL16DF = 223 +const R_PARISC_TPREL16F = 221 +const R_PARISC_TPREL16WF = 222 +const R_PARISC_TPREL21L = 154 +const R_PARISC_TPREL32 = 153 +const R_PARISC_TPREL64 = 216 +const R_PPC64_ADDR14 = 7 +const R_PPC64_ADDR14_BRNTAKEN = 9 +const R_PPC64_ADDR14_BRTAKEN = 8 +const R_PPC64_ADDR16 = 3 +const R_PPC64_ADDR16_DS = 56 +const R_PPC64_ADDR16_HA = 6 +const R_PPC64_ADDR16_HI = 5 +const R_PPC64_ADDR16_HIGH = 110 +const R_PPC64_ADDR16_HIGHA = 111 +const R_PPC64_ADDR16_HIGHER = 39 +const R_PPC64_ADDR16_HIGHERA = 40 +const R_PPC64_ADDR16_HIGHEST = 41 +const R_PPC64_ADDR16_HIGHESTA = 42 +const R_PPC64_ADDR16_LO = 4 +const R_PPC64_ADDR16_LO_DS = 57 +const R_PPC64_ADDR24 = 2 +const R_PPC64_ADDR30 = 37 +const R_PPC64_ADDR32 = 1 +const R_PPC64_ADDR64 = 38 +const R_PPC64_COPY = 19 +const R_PPC64_DTPMOD64 = 68 +const R_PPC64_DTPREL16 = 74 +const R_PPC64_DTPREL16_DS = 101 +const R_PPC64_DTPREL16_HA = 77 +const R_PPC64_DTPREL16_HI = 76 +const R_PPC64_DTPREL16_HIGH = 114 +const R_PPC64_DTPREL16_HIGHA = 115 +const R_PPC64_DTPREL16_HIGHER = 103 +const R_PPC64_DTPREL16_HIGHERA = 104 +const R_PPC64_DTPREL16_HIGHEST = 105 +const R_PPC64_DTPREL16_HIGHESTA = 106 +const R_PPC64_DTPREL16_LO = 75 +const R_PPC64_DTPREL16_LO_DS = 102 +const R_PPC64_DTPREL64 = 78 +const R_PPC64_GLOB_DAT = 20 +const R_PPC64_GOT16 = 14 +const R_PPC64_GOT16_DS = 58 +const R_PPC64_GOT16_HA = 17 +const R_PPC64_GOT16_HI = 16 +const R_PPC64_GOT16_LO = 15 +const R_PPC64_GOT16_LO_DS = 59 +const R_PPC64_GOT_DTPREL16_DS = 91 +const R_PPC64_GOT_DTPREL16_HA = 94 +const R_PPC64_GOT_DTPREL16_HI = 93 +const R_PPC64_GOT_DTPREL16_LO_DS = 92 +const R_PPC64_GOT_TLSGD16 = 79 +const R_PPC64_GOT_TLSGD16_HA = 82 +const R_PPC64_GOT_TLSGD16_HI = 81 +const R_PPC64_GOT_TLSGD16_LO = 80 +const R_PPC64_GOT_TLSLD16 = 83 +const R_PPC64_GOT_TLSLD16_HA = 86 +const R_PPC64_GOT_TLSLD16_HI = 85 +const R_PPC64_GOT_TLSLD16_LO = 84 +const R_PPC64_GOT_TPREL16_DS = 87 +const R_PPC64_GOT_TPREL16_HA = 90 +const R_PPC64_GOT_TPREL16_HI = 89 +const R_PPC64_GOT_TPREL16_LO_DS = 88 +const R_PPC64_IRELATIVE = 248 +const R_PPC64_JMP_IREL = 247 +const R_PPC64_JMP_SLOT = 21 +const R_PPC64_NONE = 0 +const R_PPC64_PLT16_HA = 31 +const R_PPC64_PLT16_HI = 30 +const R_PPC64_PLT16_LO = 29 +const R_PPC64_PLT16_LO_DS = 60 +const R_PPC64_PLT32 = 27 +const R_PPC64_PLT64 = 45 +const R_PPC64_PLTGOT16 = 52 +const R_PPC64_PLTGOT16_DS = 65 +const R_PPC64_PLTGOT16_HA = 55 +const R_PPC64_PLTGOT16_HI = 54 +const R_PPC64_PLTGOT16_LO = 53 +const R_PPC64_PLTGOT16_LO_DS = 66 +const R_PPC64_PLTREL32 = 28 +const R_PPC64_PLTREL64 = 46 +const R_PPC64_REL14 = 11 +const R_PPC64_REL14_BRNTAKEN = 13 +const R_PPC64_REL14_BRTAKEN = 12 +const R_PPC64_REL16 = 249 +const R_PPC64_REL16_HA = 252 +const R_PPC64_REL16_HI = 251 +const R_PPC64_REL16_LO = 250 +const R_PPC64_REL24 = 10 +const R_PPC64_REL32 = 26 +const R_PPC64_REL64 = 44 +const R_PPC64_RELATIVE = 22 +const R_PPC64_SECTOFF = 33 +const R_PPC64_SECTOFF_DS = 61 +const R_PPC64_SECTOFF_HA = 36 +const R_PPC64_SECTOFF_HI = 35 +const R_PPC64_SECTOFF_LO = 34 +const R_PPC64_SECTOFF_LO_DS = 62 +const R_PPC64_TLS = 67 +const R_PPC64_TLSGD = 107 +const R_PPC64_TLSLD = 108 +const R_PPC64_TOC = 51 +const R_PPC64_TOC16 = 47 +const R_PPC64_TOC16_DS = 63 +const R_PPC64_TOC16_HA = 50 +const R_PPC64_TOC16_HI = 49 +const R_PPC64_TOC16_LO = 48 +const R_PPC64_TOC16_LO_DS = 64 +const R_PPC64_TOCSAVE = 109 +const R_PPC64_TPREL16 = 69 +const R_PPC64_TPREL16_DS = 95 +const R_PPC64_TPREL16_HA = 72 +const R_PPC64_TPREL16_HI = 71 +const R_PPC64_TPREL16_HIGH = 112 +const R_PPC64_TPREL16_HIGHA = 113 +const R_PPC64_TPREL16_HIGHER = 97 +const R_PPC64_TPREL16_HIGHERA = 98 +const R_PPC64_TPREL16_HIGHEST = 99 +const R_PPC64_TPREL16_HIGHESTA = 100 +const R_PPC64_TPREL16_LO = 70 +const R_PPC64_TPREL16_LO_DS = 96 +const R_PPC64_TPREL64 = 73 +const R_PPC64_UADDR16 = 25 +const R_PPC64_UADDR32 = 24 +const R_PPC64_UADDR64 = 43 +const R_PPC_ADDR14 = 7 +const R_PPC_ADDR14_BRNTAKEN = 9 +const R_PPC_ADDR14_BRTAKEN = 8 +const R_PPC_ADDR16 = 3 +const R_PPC_ADDR16_HA = 6 +const R_PPC_ADDR16_HI = 5 +const R_PPC_ADDR16_LO = 4 +const R_PPC_ADDR24 = 2 +const R_PPC_ADDR32 = 1 +const R_PPC_COPY = 19 +const R_PPC_DIAB_RELSDA_HA = 185 +const R_PPC_DIAB_RELSDA_HI = 184 +const R_PPC_DIAB_RELSDA_LO = 183 +const R_PPC_DIAB_SDA21_HA = 182 +const R_PPC_DIAB_SDA21_HI = 181 +const R_PPC_DIAB_SDA21_LO = 180 +const R_PPC_DTPMOD32 = 68 +const R_PPC_DTPREL16 = 74 +const R_PPC_DTPREL16_HA = 77 +const R_PPC_DTPREL16_HI = 76 +const R_PPC_DTPREL16_LO = 75 +const R_PPC_DTPREL32 = 78 +const R_PPC_EMB_BIT_FLD = 115 +const R_PPC_EMB_MRKREF = 110 +const R_PPC_EMB_NADDR16 = 102 +const R_PPC_EMB_NADDR16_HA = 105 +const R_PPC_EMB_NADDR16_HI = 104 +const R_PPC_EMB_NADDR16_LO = 103 +const R_PPC_EMB_NADDR32 = 101 +const R_PPC_EMB_RELSDA = 116 +const R_PPC_EMB_RELSEC16 = 111 +const R_PPC_EMB_RELST_HA = 114 +const R_PPC_EMB_RELST_HI = 113 +const R_PPC_EMB_RELST_LO = 112 +const R_PPC_EMB_SDA21 = 109 +const R_PPC_EMB_SDA2I16 = 107 +const R_PPC_EMB_SDA2REL = 108 +const R_PPC_EMB_SDAI16 = 106 +const R_PPC_GLOB_DAT = 20 +const R_PPC_GOT16 = 14 +const R_PPC_GOT16_HA = 17 +const R_PPC_GOT16_HI = 16 +const R_PPC_GOT16_LO = 15 +const R_PPC_GOT_DTPREL16 = 91 +const R_PPC_GOT_DTPREL16_HA = 94 +const R_PPC_GOT_DTPREL16_HI = 93 +const R_PPC_GOT_DTPREL16_LO = 92 +const R_PPC_GOT_TLSGD16 = 79 +const R_PPC_GOT_TLSGD16_HA = 82 +const R_PPC_GOT_TLSGD16_HI = 81 +const R_PPC_GOT_TLSGD16_LO = 80 +const R_PPC_GOT_TLSLD16 = 83 +const R_PPC_GOT_TLSLD16_HA = 86 +const R_PPC_GOT_TLSLD16_HI = 85 +const R_PPC_GOT_TLSLD16_LO = 84 +const R_PPC_GOT_TPREL16 = 87 +const R_PPC_GOT_TPREL16_HA = 90 +const R_PPC_GOT_TPREL16_HI = 89 +const R_PPC_GOT_TPREL16_LO = 88 +const R_PPC_IRELATIVE = 248 +const R_PPC_JMP_SLOT = 21 +const R_PPC_LOCAL24PC = 23 +const R_PPC_NONE = 0 +const R_PPC_PLT16_HA = 31 +const R_PPC_PLT16_HI = 30 +const R_PPC_PLT16_LO = 29 +const R_PPC_PLT32 = 27 +const R_PPC_PLTREL24 = 18 +const R_PPC_PLTREL32 = 28 +const R_PPC_REL14 = 11 +const R_PPC_REL14_BRNTAKEN = 13 +const R_PPC_REL14_BRTAKEN = 12 +const R_PPC_REL16 = 249 +const R_PPC_REL16_HA = 252 +const R_PPC_REL16_HI = 251 +const R_PPC_REL16_LO = 250 +const R_PPC_REL24 = 10 +const R_PPC_REL32 = 26 +const R_PPC_RELATIVE = 22 +const R_PPC_SDAREL16 = 32 +const R_PPC_SECTOFF = 33 +const R_PPC_SECTOFF_HA = 36 +const R_PPC_SECTOFF_HI = 35 +const R_PPC_SECTOFF_LO = 34 +const R_PPC_TLS = 67 +const R_PPC_TLSGD = 95 +const R_PPC_TLSLD = 96 +const R_PPC_TOC16 = 255 +const R_PPC_TPREL16 = 69 +const R_PPC_TPREL16_HA = 72 +const R_PPC_TPREL16_HI = 71 +const R_PPC_TPREL16_LO = 70 +const R_PPC_TPREL32 = 73 +const R_PPC_UADDR16 = 25 +const R_PPC_UADDR32 = 24 +const R_RISCV_32 = 1 +const R_RISCV_32_PCREL = 57 +const R_RISCV_64 = 2 +const R_RISCV_ADD16 = 34 +const R_RISCV_ADD32 = 35 +const R_RISCV_ADD64 = 36 +const R_RISCV_ADD8 = 33 +const R_RISCV_ALIGN = 43 +const R_RISCV_BRANCH = 16 +const R_RISCV_CALL = 18 +const R_RISCV_CALL_PLT = 19 +const R_RISCV_COPY = 4 +const R_RISCV_GOT32_PCREL = 41 +const R_RISCV_GOT_HI20 = 20 +const R_RISCV_HI20 = 26 +const R_RISCV_IRELATIVE = 58 +const R_RISCV_JAL = 17 +const R_RISCV_JUMP_SLOT = 5 +const R_RISCV_LO12_I = 27 +const R_RISCV_LO12_S = 28 +const R_RISCV_NONE = 0 +const R_RISCV_PCREL_HI20 = 23 +const R_RISCV_PCREL_LO12_I = 24 +const R_RISCV_PCREL_LO12_S = 25 +const R_RISCV_PLT32 = 59 +const R_RISCV_RELATIVE = 3 +const R_RISCV_RELAX = 51 +const R_RISCV_RVC_BRANCH = 44 +const R_RISCV_RVC_JUMP = 45 +const R_RISCV_RVC_LUI = 46 +const R_RISCV_SET16 = 55 +const R_RISCV_SET32 = 56 +const R_RISCV_SET6 = 53 +const R_RISCV_SET8 = 54 +const R_RISCV_SET_ULEB128 = 60 +const R_RISCV_SUB16 = 38 +const R_RISCV_SUB32 = 39 +const R_RISCV_SUB6 = 52 +const R_RISCV_SUB64 = 40 +const R_RISCV_SUB8 = 37 +const R_RISCV_SUB_ULEB128 = 61 +const R_RISCV_TLSDESC = 12 +const R_RISCV_TLSDESC_ADD_LO12 = 64 +const R_RISCV_TLSDESC_CALL = 65 +const R_RISCV_TLSDESC_HI20 = 62 +const R_RISCV_TLSDESC_LOAD_LO12 = 63 +const R_RISCV_TLS_DTPMOD32 = 6 +const R_RISCV_TLS_DTPMOD64 = 7 +const R_RISCV_TLS_DTPREL32 = 8 +const R_RISCV_TLS_DTPREL64 = 9 +const R_RISCV_TLS_GD_HI20 = 22 +const R_RISCV_TLS_GOT_HI20 = 21 +const R_RISCV_TLS_TPREL32 = 10 +const R_RISCV_TLS_TPREL64 = 11 +const R_RISCV_TPREL_ADD = 32 +const R_RISCV_TPREL_HI20 = 29 +const R_RISCV_TPREL_LO12_I = 30 +const R_RISCV_TPREL_LO12_S = 31 +const R_SH_ALIGN = 29 +const R_SH_CODE = 30 +const R_SH_COPY = 162 +const R_SH_COUNT = 28 +const R_SH_DATA = 31 +const R_SH_DIR32 = 1 +const R_SH_DIR8BP = 7 +const R_SH_DIR8L = 9 +const R_SH_DIR8W = 8 +const R_SH_DIR8WPL = 5 +const R_SH_DIR8WPN = 3 +const R_SH_DIR8WPZ = 6 +const R_SH_FUNCDESC = 207 +const R_SH_FUNCDESC_VALUE = 208 +const R_SH_GLOB_DAT = 163 +const R_SH_GNU_VTENTRY = 35 +const R_SH_GNU_VTINHERIT = 34 +const R_SH_GOT20 = 201 +const R_SH_GOT32 = 160 +const R_SH_GOTFUNCDESC = 203 +const R_SH_GOTFUNCDEST20 = 204 +const R_SH_GOTOFF = 166 +const R_SH_GOTOFF20 = 202 +const R_SH_GOTOFFFUNCDESC = 205 +const R_SH_GOTOFFFUNCDEST20 = 206 +const R_SH_GOTPC = 167 +const R_SH_IND12W = 4 +const R_SH_JMP_SLOT = 164 +const R_SH_LABEL = 32 +const R_SH_NONE = 0 +const R_SH_NUM = 256 +const R_SH_PLT32 = 161 +const R_SH_REL32 = 2 +const R_SH_RELATIVE = 165 +const R_SH_SWITCH16 = 25 +const R_SH_SWITCH32 = 26 +const R_SH_SWITCH8 = 33 +const R_SH_TLS_DTPMOD32 = 149 +const R_SH_TLS_DTPOFF32 = 150 +const R_SH_TLS_GD_32 = 144 +const R_SH_TLS_IE_32 = 147 +const R_SH_TLS_LDO_32 = 146 +const R_SH_TLS_LD_32 = 145 +const R_SH_TLS_LE_32 = 148 +const R_SH_TLS_TPOFF32 = 151 +const R_SH_USES = 27 +const R_SPARC_10 = 30 +const R_SPARC_11 = 31 +const R_SPARC_13 = 11 +const R_SPARC_16 = 2 +const R_SPARC_22 = 10 +const R_SPARC_32 = 3 +const R_SPARC_5 = 44 +const R_SPARC_6 = 45 +const R_SPARC_64 = 32 +const R_SPARC_7 = 43 +const R_SPARC_8 = 1 +const R_SPARC_COPY = 19 +const R_SPARC_DISP16 = 5 +const R_SPARC_DISP32 = 6 +const R_SPARC_DISP64 = 46 +const R_SPARC_DISP8 = 4 +const R_SPARC_GLOB_DAT = 20 +const R_SPARC_GLOB_JMP = 42 +const R_SPARC_GNU_VTENTRY = 251 +const R_SPARC_GNU_VTINHERIT = 250 +const R_SPARC_GOT10 = 13 +const R_SPARC_GOT13 = 14 +const R_SPARC_GOT22 = 15 +const R_SPARC_GOTDATA_HIX22 = 80 +const R_SPARC_GOTDATA_LOX10 = 81 +const R_SPARC_GOTDATA_OP = 84 +const R_SPARC_GOTDATA_OP_HIX22 = 82 +const R_SPARC_GOTDATA_OP_LOX10 = 83 +const R_SPARC_H34 = 85 +const R_SPARC_H44 = 50 +const R_SPARC_HH22 = 34 +const R_SPARC_HI22 = 9 +const R_SPARC_HIPLT22 = 25 +const R_SPARC_HIX22 = 48 +const R_SPARC_HM10 = 35 +const R_SPARC_JMP_SLOT = 21 +const R_SPARC_L44 = 52 +const R_SPARC_LM22 = 36 +const R_SPARC_LO10 = 12 +const R_SPARC_LOPLT10 = 26 +const R_SPARC_LOX10 = 49 +const R_SPARC_M44 = 51 +const R_SPARC_NONE = 0 +const R_SPARC_NUM = 253 +const R_SPARC_OLO10 = 33 +const R_SPARC_PC10 = 16 +const R_SPARC_PC22 = 17 +const R_SPARC_PCPLT10 = 29 +const R_SPARC_PCPLT22 = 28 +const R_SPARC_PCPLT32 = 27 +const R_SPARC_PC_HH22 = 37 +const R_SPARC_PC_HM10 = 38 +const R_SPARC_PC_LM22 = 39 +const R_SPARC_PLT32 = 24 +const R_SPARC_PLT64 = 47 +const R_SPARC_REGISTER = 53 +const R_SPARC_RELATIVE = 22 +const R_SPARC_REV32 = 252 +const R_SPARC_SIZE32 = 86 +const R_SPARC_SIZE64 = 87 +const R_SPARC_TLS_DTPMOD32 = 74 +const R_SPARC_TLS_DTPMOD64 = 75 +const R_SPARC_TLS_DTPOFF32 = 76 +const R_SPARC_TLS_DTPOFF64 = 77 +const R_SPARC_TLS_GD_ADD = 58 +const R_SPARC_TLS_GD_CALL = 59 +const R_SPARC_TLS_GD_HI22 = 56 +const R_SPARC_TLS_GD_LO10 = 57 +const R_SPARC_TLS_IE_ADD = 71 +const R_SPARC_TLS_IE_HI22 = 67 +const R_SPARC_TLS_IE_LD = 69 +const R_SPARC_TLS_IE_LDX = 70 +const R_SPARC_TLS_IE_LO10 = 68 +const R_SPARC_TLS_LDM_ADD = 62 +const R_SPARC_TLS_LDM_CALL = 63 +const R_SPARC_TLS_LDM_HI22 = 60 +const R_SPARC_TLS_LDM_LO10 = 61 +const R_SPARC_TLS_LDO_ADD = 66 +const R_SPARC_TLS_LDO_HIX22 = 64 +const R_SPARC_TLS_LDO_LOX10 = 65 +const R_SPARC_TLS_LE_HIX22 = 72 +const R_SPARC_TLS_LE_LOX10 = 73 +const R_SPARC_TLS_TPOFF32 = 78 +const R_SPARC_TLS_TPOFF64 = 79 +const R_SPARC_UA16 = 55 +const R_SPARC_UA32 = 23 +const R_SPARC_UA64 = 54 +const R_SPARC_WDISP16 = 40 +const R_SPARC_WDISP19 = 41 +const R_SPARC_WDISP22 = 8 +const R_SPARC_WDISP30 = 7 +const R_SPARC_WPLT30 = 18 +const R_X86_64_16 = 12 +const R_X86_64_32 = 10 +const R_X86_64_32S = 11 +const R_X86_64_64 = 1 +const R_X86_64_8 = 14 +const R_X86_64_COPY = 5 +const R_X86_64_DTPMOD64 = 16 +const R_X86_64_DTPOFF32 = 21 +const R_X86_64_DTPOFF64 = 17 +const R_X86_64_GLOB_DAT = 6 +const R_X86_64_GOT32 = 3 +const R_X86_64_GOT64 = 27 +const R_X86_64_GOTOFF64 = 25 +const R_X86_64_GOTPC32 = 26 +const R_X86_64_GOTPC32_TLSDESC = 34 +const R_X86_64_GOTPC64 = 29 +const R_X86_64_GOTPCREL = 9 +const R_X86_64_GOTPCREL64 = 28 +const R_X86_64_GOTPCRELX = 41 +const R_X86_64_GOTPLT64 = 30 +const R_X86_64_GOTTPOFF = 22 +const R_X86_64_IRELATIVE = 37 +const R_X86_64_JUMP_SLOT = 7 +const R_X86_64_NONE = 0 +const R_X86_64_NUM = 43 +const R_X86_64_PC16 = 13 +const R_X86_64_PC32 = 2 +const R_X86_64_PC64 = 24 +const R_X86_64_PC8 = 15 +const R_X86_64_PLT32 = 4 +const R_X86_64_PLTOFF64 = 31 +const R_X86_64_RELATIVE = 8 +const R_X86_64_RELATIVE64 = 38 +const R_X86_64_REX_GOTPCRELX = 42 +const R_X86_64_SIZE32 = 32 +const R_X86_64_SIZE64 = 33 +const R_X86_64_TLSDESC = 36 +const R_X86_64_TLSDESC_CALL = 35 +const R_X86_64_TLSGD = 19 +const R_X86_64_TLSLD = 20 +const R_X86_64_TPOFF32 = 23 +const R_X86_64_TPOFF64 = 18 +const SA_EXPOSE_TAGBITS = 2048 +const SA_NOCLDSTOP = 1 +const SA_NOCLDWAIT = 2 +const SA_NODEFER = 1073741824 +const SA_ONSTACK = 134217728 +const SA_RESETHAND = 2147483648 +const SA_RESTART = 268435456 +const SA_RESTORER = 67108864 +const SA_SIGINFO = 4 +const SA_UNSUPPORTED = 1024 +const SCM_TIMESTAMPING_OLD = 37 +const SCM_TIMESTAMPNS_OLD = 35 +const SCM_TIMESTAMP_OLD = 29 +const SEGV_ACCERR = 2 +const SEGV_BNDERR = 3 +const SEGV_MAPERR = 1 +const SEGV_MTEAERR = 8 +const SEGV_MTESERR = 9 +const SEGV_PKUERR = 4 +const SELFMAG = 4 +const SHF_ALLOC = 2 +const SHF_ALPHA_GPREL = 268435456 +const SHF_ARM_COMDEF = 2147483648 +const SHF_ARM_ENTRYSECT = 268435456 +const SHF_COMPRESSED = 2048 +const SHF_EXCLUDE = 2147483648 +const SHF_EXECINSTR = 4 +const SHF_GROUP = 512 +const SHF_IA_64_NORECOV = 536870912 +const SHF_IA_64_SHORT = 268435456 +const SHF_INFO_LINK = 64 +const SHF_LINK_ORDER = 128 +const SHF_MASKOS = 267386880 +const SHF_MASKPROC = 4026531840 +const SHF_MERGE = 16 +const SHF_MIPS_ADDR = 1073741824 +const SHF_MIPS_GPREL = 268435456 +const SHF_MIPS_LOCAL = 67108864 +const SHF_MIPS_MERGE = 536870912 +const SHF_MIPS_NAMES = 33554432 +const SHF_MIPS_NODUPE = 16777216 +const SHF_MIPS_NOSTRIP = 134217728 +const SHF_MIPS_STRINGS = 2147483648 +const SHF_ORDERED = 1073741824 +const SHF_OS_NONCONFORMING = 256 +const SHF_PARISC_HUGE = 1073741824 +const SHF_PARISC_SBP = 2147483648 +const SHF_PARISC_SHORT = 536870912 +const SHF_STRINGS = 32 +const SHF_TLS = 1024 +const SHF_WRITE = 1 +const SHN_ABS = 65521 +const SHN_AFTER = 65281 +const SHN_BEFORE = 65280 +const SHN_COMMON = 65522 +const SHN_HIOS = 65343 +const SHN_HIPROC = 65311 +const SHN_HIRESERVE = 65535 +const SHN_LOOS = 65312 +const SHN_LOPROC = 65280 +const SHN_LORESERVE = 65280 +const SHN_MIPS_ACOMMON = 65280 +const SHN_MIPS_DATA = 65282 +const SHN_MIPS_SCOMMON = 65283 +const SHN_MIPS_SUNDEFINED = 65284 +const SHN_MIPS_TEXT = 65281 +const SHN_PARISC_ANSI_COMMON = 65280 +const SHN_PARISC_HUGE_COMMON = 65281 +const SHN_UNDEF = 0 +const SHN_XINDEX = 65535 +const SHT_ALPHA_DEBUG = 1879048193 +const SHT_ALPHA_REGINFO = 1879048194 +const SHT_ARM_ATTRIBUTES = 1879048195 +const SHT_ARM_EXIDX = 1879048193 +const SHT_ARM_PREEMPTMAP = 1879048194 +const SHT_CHECKSUM = 1879048184 +const SHT_DYNAMIC = 6 +const SHT_DYNSYM = 11 +const SHT_FINI_ARRAY = 15 +const SHT_GNU_ATTRIBUTES = 1879048181 +const SHT_GNU_HASH = 1879048182 +const SHT_GNU_LIBLIST = 1879048183 +const SHT_GNU_verdef = 1879048189 +const SHT_GNU_verneed = 1879048190 +const SHT_GNU_versym = 1879048191 +const SHT_GROUP = 17 +const SHT_HASH = 5 +const SHT_HIOS = 1879048191 +const SHT_HIPROC = 2147483647 +const SHT_HISUNW = 1879048191 +const SHT_HIUSER = 2415919103 +const SHT_IA_64_EXT = 1879048192 +const SHT_IA_64_UNWIND = 1879048193 +const SHT_INIT_ARRAY = 14 +const SHT_LOOS = 1610612736 +const SHT_LOPROC = 1879048192 +const SHT_LOSUNW = 1879048186 +const SHT_LOUSER = 2147483648 +const SHT_MIPS_AUXSYM = 1879048214 +const SHT_MIPS_CONFLICT = 1879048194 +const SHT_MIPS_CONTENT = 1879048204 +const SHT_MIPS_DEBUG = 1879048197 +const SHT_MIPS_DELTACLASS = 1879048221 +const SHT_MIPS_DELTADECL = 1879048223 +const SHT_MIPS_DELTAINST = 1879048220 +const SHT_MIPS_DELTASYM = 1879048219 +const SHT_MIPS_DENSE = 1879048211 +const SHT_MIPS_DWARF = 1879048222 +const SHT_MIPS_EH_REGION = 1879048231 +const SHT_MIPS_EVENTS = 1879048225 +const SHT_MIPS_EXTSYM = 1879048210 +const SHT_MIPS_FDESC = 1879048209 +const SHT_MIPS_GPTAB = 1879048195 +const SHT_MIPS_IFACE = 1879048203 +const SHT_MIPS_LIBLIST = 1879048192 +const SHT_MIPS_LINE = 1879048217 +const SHT_MIPS_LOCSTR = 1879048216 +const SHT_MIPS_LOCSYM = 1879048213 +const SHT_MIPS_MSYM = 1879048193 +const SHT_MIPS_OPTIONS = 1879048205 +const SHT_MIPS_OPTSYM = 1879048215 +const SHT_MIPS_PACKAGE = 1879048199 +const SHT_MIPS_PACKSYM = 1879048200 +const SHT_MIPS_PDESC = 1879048212 +const SHT_MIPS_PDR_EXCEPTION = 1879048233 +const SHT_MIPS_PIXIE = 1879048227 +const SHT_MIPS_REGINFO = 1879048198 +const SHT_MIPS_RELD = 1879048201 +const SHT_MIPS_RFDESC = 1879048218 +const SHT_MIPS_SHDR = 1879048208 +const SHT_MIPS_SYMBOL_LIB = 1879048224 +const SHT_MIPS_TRANSLATE = 1879048226 +const SHT_MIPS_UCODE = 1879048196 +const SHT_MIPS_WHIRL = 1879048230 +const SHT_MIPS_XLATE = 1879048228 +const SHT_MIPS_XLATE_DEBUG = 1879048229 +const SHT_MIPS_XLATE_OLD = 1879048232 +const SHT_NOBITS = 8 +const SHT_NOTE = 7 +const SHT_NULL = 0 +const SHT_NUM = 20 +const SHT_PARISC_DOC = 1879048194 +const SHT_PARISC_EXT = 1879048192 +const SHT_PARISC_UNWIND = 1879048193 +const SHT_PREINIT_ARRAY = 16 +const SHT_PROGBITS = 1 +const SHT_REL = 9 +const SHT_RELA = 4 +const SHT_RELR = 19 +const SHT_SHLIB = 10 +const SHT_STRTAB = 3 +const SHT_SUNW_COMDAT = 1879048187 +const SHT_SUNW_move = 1879048186 +const SHT_SUNW_syminfo = 1879048188 +const SHT_SYMTAB = 2 +const SHT_SYMTAB_SHNDX = 18 +const SIGABRT = 6 +const SIGALRM = 14 +const SIGBUS = 7 +const SIGCHLD = 17 +const SIGCONT = 18 +const SIGEV_NONE = 1 +const SIGEV_SIGNAL = 0 +const SIGEV_THREAD = 2 +const SIGEV_THREAD_ID = 4 +const SIGFPE = 8 +const SIGHUP = 1 +const SIGILL = 4 +const SIGINT = 2 +const SIGIO = 29 +const SIGIOT = 6 +const SIGKILL = 9 +const SIGPIPE = 13 +const SIGPOLL = 29 +const SIGPROF = 27 +const SIGPWR = 30 +const SIGQUIT = 3 +const SIGRTMAX = 0 +const SIGRTMIN = 0 +const SIGSEGV = 11 +const SIGSTKFLT = 16 +const SIGSTKSZ = 10240 +const SIGSTOP = 19 +const SIGSYS = 31 +const SIGTERM = 15 +const SIGTRAP = 5 +const SIGTSTP = 20 +const SIGTTIN = 21 +const SIGTTOU = 22 +const SIGUNUSED = 31 +const SIGURG = 23 +const SIGUSR1 = 10 +const SIGUSR2 = 12 +const SIGVTALRM = 26 +const SIGWINCH = 28 +const SIGXCPU = 24 +const SIGXFSZ = 25 +const SIG_BLOCK = 0 +const SIG_SETMASK = 2 +const SIG_UNBLOCK = 1 +const SIOCGSTAMPNS_OLD = 35079 +const SIOCGSTAMP_OLD = 35078 +const SI_ASYNCIO = -4 +const SI_ASYNCNL = -60 +const SI_KERNEL = 128 +const SI_MESGQ = -3 +const SI_QUEUE = -1 +const SI_SIGIO = -5 +const SI_TIMER = -2 +const SI_TKILL = -6 +const SI_USER = 0 +const SO_RCVTIMEO_OLD = 20 +const SO_SNDTIMEO_OLD = 21 +const SO_TIMESTAMPING_OLD = 37 +const SO_TIMESTAMPNS_OLD = 35 +const SO_TIMESTAMP_OLD = 29 +const SS_AUTODISARM = 2147483648 +const SS_DISABLE = 2 +const SS_FLAG_BITS = 2147483648 +const SS_ONSTACK = 1 +const STB_GLOBAL = 1 +const STB_GNU_UNIQUE = 10 +const STB_HIOS = 12 +const STB_HIPROC = 15 +const STB_LOCAL = 0 +const STB_LOOS = 10 +const STB_LOPROC = 13 +const STB_MIPS_SPLIT_COMMON = 13 +const STB_NUM = 3 +const STB_WEAK = 2 +const STN_UNDEF = 0 +const STO_ALPHA_NOPV = 128 +const STO_ALPHA_STD_GPLOAD = 136 +const STO_MIPS_DEFAULT = 0 +const STO_MIPS_HIDDEN = 2 +const STO_MIPS_INTERNAL = 1 +const STO_MIPS_PLT = 8 +const STO_MIPS_PROTECTED = 3 +const STO_MIPS_SC_ALIGN_UNUSED = 255 +const STO_PPC64_LOCAL_BIT = 5 +const STO_PPC64_LOCAL_MASK = 224 +const STT_ARM_16BIT = 15 +const STT_ARM_TFUNC = 13 +const STT_COMMON = 5 +const STT_FILE = 4 +const STT_FUNC = 2 +const STT_GNU_IFUNC = 10 +const STT_HIOS = 12 +const STT_HIPROC = 15 +const STT_HP_OPAQUE = 11 +const STT_HP_STUB = 12 +const STT_LOOS = 10 +const STT_LOPROC = 13 +const STT_NOTYPE = 0 +const STT_NUM = 7 +const STT_OBJECT = 1 +const STT_PARISC_MILLICODE = 13 +const STT_SECTION = 3 +const STT_SPARC_REGISTER = 13 +const STT_TLS = 6 +const STV_DEFAULT = 0 +const STV_HIDDEN = 2 +const STV_INTERNAL = 1 +const STV_PROTECTED = 3 +const SYMINFO_BT_LOWRESERVE = 65280 +const SYMINFO_BT_PARENT = 65534 +const SYMINFO_BT_SELF = 65535 +const SYMINFO_CURRENT = 1 +const SYMINFO_FLG_COPY = 4 +const SYMINFO_FLG_DIRECT = 1 +const SYMINFO_FLG_LAZYLOAD = 8 +const SYMINFO_FLG_PASSTHRU = 2 +const SYMINFO_NONE = 0 +const SYMINFO_NUM = 2 +const SYSCALL_MMAP2_UNIT = 4096 +const SYSCALL_RLIM_INFINITY = 18446744073709551615 +const SYS__sysctl = 149 +const SYS_accept = 364 +const SYS_accept4 = 364 +const SYS_access = 33 +const SYS_acct = 51 +const SYS_add_key = 278 +const SYS_adjtimex = 124 +const SYS_afs_syscall = 137 +const SYS_alarm = 27 +const SYS_bdflush = 134 +const SYS_bind = 361 +const SYS_bpf = 351 +const SYS_brk = 45 +const SYS_cachestat = 451 +const SYS_capget = 184 +const SYS_capset = 185 +const SYS_chdir = 12 +const SYS_chmod = 15 +const SYS_chown = 212 +const SYS_chroot = 61 +const SYS_clock_adjtime = 337 +const SYS_clock_getres = 261 +const SYS_clock_gettime = 260 +const SYS_clock_nanosleep = 262 +const SYS_clock_settime = 259 +const SYS_clone = 120 +const SYS_clone3 = 435 +const SYS_close = 6 +const SYS_close_range = 436 +const SYS_connect = 362 +const SYS_copy_file_range = 375 +const SYS_creat = 8 +const SYS_create_module = 127 +const SYS_delete_module = 129 +const SYS_dup = 41 +const SYS_dup2 = 63 +const SYS_dup3 = 326 +const SYS_epoll_create = 249 +const SYS_epoll_create1 = 327 +const SYS_epoll_ctl = 250 +const SYS_epoll_pwait = 312 +const SYS_epoll_pwait2 = 441 +const SYS_epoll_wait = 251 +const SYS_eventfd = 318 +const SYS_eventfd2 = 323 +const SYS_execve = 11 +const SYS_execveat = 354 +const SYS_exit = 1 +const SYS_exit_group = 248 +const SYS_faccessat = 300 +const SYS_faccessat2 = 439 +const SYS_fadvise64 = 253 +const SYS_fallocate = 314 +const SYS_fanotify_init = 332 +const SYS_fanotify_mark = 333 +const SYS_fchdir = 133 +const SYS_fchmod = 94 +const SYS_fchmodat = 299 +const SYS_fchmodat2 = 452 +const SYS_fchown = 207 +const SYS_fchownat = 291 +const SYS_fcntl = 55 +const SYS_fdatasync = 148 +const SYS_fgetxattr = 229 +const SYS_finit_module = 344 +const SYS_flistxattr = 232 +const SYS_flock = 143 +const SYS_fork = 2 +const SYS_fremovexattr = 235 +const SYS_fsconfig = 431 +const SYS_fsetxattr = 226 +const SYS_fsmount = 432 +const SYS_fsopen = 430 +const SYS_fspick = 433 +const SYS_fstat = 108 +const SYS_fstatfs64 = 266 +const SYS_fsync = 118 +const SYS_ftruncate = 93 +const SYS_futex = 238 +const SYS_futex_waitv = 449 +const SYS_futimesat = 292 +const SYS_get_kernel_syms = 130 +const SYS_get_mempolicy = 269 +const SYS_get_robust_list = 305 +const SYS_getcpu = 311 +const SYS_getcwd = 183 +const SYS_getdents64 = 220 +const SYS_getegid = 202 +const SYS_geteuid = 201 +const SYS_getgid = 200 +const SYS_getgroups = 205 +const SYS_getitimer = 105 +const SYS_getpeername = 368 +const SYS_getpgid = 132 +const SYS_getpgrp = 65 +const SYS_getpid = 20 +const SYS_getpmsg = 188 +const SYS_getppid = 64 +const SYS_getpriority = 96 +const SYS_getrandom = 349 +const SYS_getresgid = 211 +const SYS_getresuid = 209 +const SYS_getrlimit = 191 +const SYS_getrusage = 77 +const SYS_getsid = 147 +const SYS_getsockname = 367 +const SYS_getsockopt = 365 +const SYS_gettid = 236 +const SYS_gettimeofday = 78 +const SYS_getuid = 199 +const SYS_getxattr = 227 +const SYS_idle = 112 +const SYS_init_module = 128 +const SYS_inotify_add_watch = 285 +const SYS_inotify_init = 284 +const SYS_inotify_init1 = 324 +const SYS_inotify_rm_watch = 286 +const SYS_io_cancel = 247 +const SYS_io_destroy = 244 +const SYS_io_getevents = 245 +const SYS_io_pgetevents = 382 +const SYS_io_setup = 243 +const SYS_io_submit = 246 +const SYS_io_uring_enter = 426 +const SYS_io_uring_register = 427 +const SYS_io_uring_setup = 425 +const SYS_ioctl = 54 +const SYS_ioprio_get = 283 +const SYS_ioprio_set = 282 +const SYS_ipc = 117 +const SYS_kcmp = 343 +const SYS_kexec_file_load = 381 +const SYS_kexec_load = 277 +const SYS_keyctl = 280 +const SYS_kill = 37 +const SYS_landlock_add_rule = 445 +const SYS_landlock_create_ruleset = 444 +const SYS_landlock_restrict_self = 446 +const SYS_lchown = 198 +const SYS_lgetxattr = 228 +const SYS_link = 9 +const SYS_linkat = 296 +const SYS_listen = 363 +const SYS_listxattr = 230 +const SYS_llistxattr = 231 +const SYS_lookup_dcookie = 110 +const SYS_lremovexattr = 234 +const SYS_lseek = 19 +const SYS_lsetxattr = 225 +const SYS_lstat = 107 +const SYS_madvise = 219 +const SYS_mbind = 268 +const SYS_membarrier = 356 +const SYS_memfd_create = 350 +const SYS_memfd_secret = 447 +const SYS_migrate_pages = 287 +const SYS_mincore = 218 +const SYS_mkdir = 39 +const SYS_mkdirat = 289 +const SYS_mknod = 14 +const SYS_mknodat = 290 +const SYS_mlock = 150 +const SYS_mlock2 = 374 +const SYS_mlockall = 152 +const SYS_mmap = 90 +const SYS_mount = 21 +const SYS_mount_setattr = 442 +const SYS_move_mount = 429 +const SYS_move_pages = 310 +const SYS_mprotect = 125 +const SYS_mq_getsetattr = 276 +const SYS_mq_notify = 275 +const SYS_mq_open = 271 +const SYS_mq_timedreceive = 274 +const SYS_mq_timedsend = 273 +const SYS_mq_unlink = 272 +const SYS_mremap = 163 +const SYS_msgctl = 402 +const SYS_msgget = 399 +const SYS_msgrcv = 401 +const SYS_msgsnd = 400 +const SYS_msync = 144 +const SYS_munlock = 151 +const SYS_munlockall = 153 +const SYS_munmap = 91 +const SYS_name_to_handle_at = 335 +const SYS_nanosleep = 162 +const SYS_newfstatat = 293 +const SYS_nfsservctl = 169 +const SYS_nice = 34 +const SYS_open = 5 +const SYS_open_by_handle_at = 336 +const SYS_open_tree = 428 +const SYS_openat = 288 +const SYS_openat2 = 437 +const SYS_pause = 29 +const SYS_perf_event_open = 331 +const SYS_personality = 136 +const SYS_pidfd_getfd = 438 +const SYS_pidfd_open = 434 +const SYS_pidfd_send_signal = 424 +const SYS_pipe = 42 +const SYS_pipe2 = 325 +const SYS_pivot_root = 217 +const SYS_pkey_alloc = 385 +const SYS_pkey_free = 386 +const SYS_pkey_mprotect = 384 +const SYS_poll = 168 +const SYS_ppoll = 302 +const SYS_prctl = 172 +const SYS_pread64 = 180 +const SYS_preadv = 328 +const SYS_preadv2 = 376 +const SYS_prlimit64 = 334 +const SYS_process_madvise = 440 +const SYS_process_mrelease = 448 +const SYS_process_vm_readv = 340 +const SYS_process_vm_writev = 341 +const SYS_pselect6 = 301 +const SYS_ptrace = 26 +const SYS_putpmsg = 189 +const SYS_pwrite64 = 181 +const SYS_pwritev = 329 +const SYS_pwritev2 = 377 +const SYS_query_module = 167 +const SYS_quotactl = 131 +const SYS_read = 3 +const SYS_readahead = 222 +const SYS_readdir = 89 +const SYS_readlink = 85 +const SYS_readlinkat = 298 +const SYS_readv = 145 +const SYS_reboot = 88 +const SYS_recvfrom = 371 +const SYS_recvmmsg = 357 +const SYS_recvmsg = 372 +const SYS_remap_file_pages = 267 +const SYS_removexattr = 233 +const SYS_rename = 38 +const SYS_renameat = 295 +const SYS_renameat2 = 347 +const SYS_request_key = 279 +const SYS_restart_syscall = 7 +const SYS_rmdir = 40 +const SYS_rseq = 383 +const SYS_rt_sigaction = 174 +const SYS_rt_sigpending = 176 +const SYS_rt_sigprocmask = 175 +const SYS_rt_sigqueueinfo = 178 +const SYS_rt_sigreturn = 173 +const SYS_rt_sigsuspend = 179 +const SYS_rt_sigtimedwait = 177 +const SYS_rt_tgsigqueueinfo = 330 +const SYS_s390_guarded_storage = 378 +const SYS_s390_pci_mmio_read = 353 +const SYS_s390_pci_mmio_write = 352 +const SYS_s390_runtime_instr = 342 +const SYS_s390_sthyi = 380 +const SYS_sched_get_priority_max = 159 +const SYS_sched_get_priority_min = 160 +const SYS_sched_getaffinity = 240 +const SYS_sched_getattr = 346 +const SYS_sched_getparam = 155 +const SYS_sched_getscheduler = 157 +const SYS_sched_rr_get_interval = 161 +const SYS_sched_setaffinity = 239 +const SYS_sched_setattr = 345 +const SYS_sched_setparam = 154 +const SYS_sched_setscheduler = 156 +const SYS_sched_yield = 158 +const SYS_seccomp = 348 +const SYS_select = 142 +const SYS_semctl = 394 +const SYS_semget = 393 +const SYS_semtimedop = 392 +const SYS_sendfile = 187 +const SYS_sendmmsg = 358 +const SYS_sendmsg = 370 +const SYS_sendto = 369 +const SYS_set_mempolicy = 270 +const SYS_set_mempolicy_home_node = 450 +const SYS_set_robust_list = 304 +const SYS_set_tid_address = 252 +const SYS_setdomainname = 121 +const SYS_setfsgid = 216 +const SYS_setfsuid = 215 +const SYS_setgid = 214 +const SYS_setgroups = 206 +const SYS_sethostname = 74 +const SYS_setitimer = 104 +const SYS_setns = 339 +const SYS_setpgid = 57 +const SYS_setpriority = 97 +const SYS_setregid = 204 +const SYS_setresgid = 210 +const SYS_setresuid = 208 +const SYS_setreuid = 203 +const SYS_setrlimit = 75 +const SYS_setsid = 66 +const SYS_setsockopt = 366 +const SYS_settimeofday = 79 +const SYS_setuid = 213 +const SYS_setxattr = 224 +const SYS_shmat = 397 +const SYS_shmctl = 396 +const SYS_shmdt = 398 +const SYS_shmget = 395 +const SYS_shutdown = 373 +const SYS_sigaction = 67 +const SYS_sigaltstack = 186 +const SYS_signal = 48 +const SYS_signalfd = 316 +const SYS_signalfd4 = 322 +const SYS_sigpending = 73 +const SYS_sigprocmask = 126 +const SYS_sigreturn = 119 +const SYS_sigsuspend = 72 +const SYS_socket = 359 +const SYS_socketcall = 102 +const SYS_socketpair = 360 +const SYS_splice = 306 +const SYS_stat = 106 +const SYS_statfs64 = 265 +const SYS_statx = 379 +const SYS_swapoff = 115 +const SYS_swapon = 87 +const SYS_symlink = 83 +const SYS_symlinkat = 297 +const SYS_sync = 36 +const SYS_sync_file_range = 307 +const SYS_syncfs = 338 +const SYS_sysfs = 135 +const SYS_sysinfo = 116 +const SYS_syslog = 103 +const SYS_tee = 308 +const SYS_tgkill = 241 +const SYS_timer_create = 254 +const SYS_timer_delete = 258 +const SYS_timer_getoverrun = 257 +const SYS_timer_gettime = 256 +const SYS_timer_settime = 255 +const SYS_timerfd = 317 +const SYS_timerfd_create = 319 +const SYS_timerfd_gettime = 321 +const SYS_timerfd_settime = 320 +const SYS_times = 43 +const SYS_tkill = 237 +const SYS_truncate = 92 +const SYS_umask = 60 +const SYS_umount = 22 +const SYS_umount2 = 52 +const SYS_uname = 122 +const SYS_unlink = 10 +const SYS_unlinkat = 294 +const SYS_unshare = 303 +const SYS_uselib = 86 +const SYS_userfaultfd = 355 +const SYS_ustat = 62 +const SYS_utime = 30 +const SYS_utimensat = 315 +const SYS_utimes = 313 +const SYS_vfork = 190 +const SYS_vhangup = 111 +const SYS_vmsplice = 309 +const SYS_wait4 = 114 +const SYS_waitid = 281 +const SYS_write = 4 +const SYS_writev = 146 +const TRAP_BRANCH = 3 +const TRAP_BRKPT = 1 +const TRAP_HWBKPT = 4 +const TRAP_TRACE = 2 +const TRAP_UNK = 5 +const VER = -255 +const VER_DEF_CURRENT = 1 +const VER_DEF_NONE = 0 +const VER_DEF_NUM = 2 +const VER_FLG_BASE = 1 +const VER_FLG_WEAK = 2 +const VER_NDX_ELIMINATE = 65281 +const VER_NDX_GLOBAL = 1 +const VER_NDX_LOCAL = 0 +const VER_NDX_LORESERVE = 65280 +const VER_NEED_CURRENT = 1 +const VER_NEED_NONE = 0 +const VER_NEED_NUM = 2 +const WNOHANG = 1 +const WUNTRACED = 2 +const _NSIG = 65 +const __NR__sysctl = 149 +const __NR_accept4 = 364 +const __NR_access = 33 +const __NR_acct = 51 +const __NR_add_key = 278 +const __NR_adjtimex = 124 +const __NR_afs_syscall = 137 +const __NR_alarm = 27 +const __NR_bdflush = 134 +const __NR_bind = 361 +const __NR_bpf = 351 +const __NR_brk = 45 +const __NR_cachestat = 451 +const __NR_capget = 184 +const __NR_capset = 185 +const __NR_chdir = 12 +const __NR_chmod = 15 +const __NR_chown = 212 +const __NR_chroot = 61 +const __NR_clock_adjtime = 337 +const __NR_clock_getres = 261 +const __NR_clock_gettime = 260 +const __NR_clock_nanosleep = 262 +const __NR_clock_settime = 259 +const __NR_clone = 120 +const __NR_clone3 = 435 +const __NR_close = 6 +const __NR_close_range = 436 +const __NR_connect = 362 +const __NR_copy_file_range = 375 +const __NR_creat = 8 +const __NR_create_module = 127 +const __NR_delete_module = 129 +const __NR_dup = 41 +const __NR_dup2 = 63 +const __NR_dup3 = 326 +const __NR_epoll_create = 249 +const __NR_epoll_create1 = 327 +const __NR_epoll_ctl = 250 +const __NR_epoll_pwait = 312 +const __NR_epoll_pwait2 = 441 +const __NR_epoll_wait = 251 +const __NR_eventfd = 318 +const __NR_eventfd2 = 323 +const __NR_execve = 11 +const __NR_execveat = 354 +const __NR_exit = 1 +const __NR_exit_group = 248 +const __NR_faccessat = 300 +const __NR_faccessat2 = 439 +const __NR_fadvise64 = 253 +const __NR_fallocate = 314 +const __NR_fanotify_init = 332 +const __NR_fanotify_mark = 333 +const __NR_fchdir = 133 +const __NR_fchmod = 94 +const __NR_fchmodat = 299 +const __NR_fchmodat2 = 452 +const __NR_fchown = 207 +const __NR_fchownat = 291 +const __NR_fcntl = 55 +const __NR_fdatasync = 148 +const __NR_fgetxattr = 229 +const __NR_finit_module = 344 +const __NR_flistxattr = 232 +const __NR_flock = 143 +const __NR_fork = 2 +const __NR_fremovexattr = 235 +const __NR_fsconfig = 431 +const __NR_fsetxattr = 226 +const __NR_fsmount = 432 +const __NR_fsopen = 430 +const __NR_fspick = 433 +const __NR_fstat = 108 +const __NR_fstatfs = 100 +const __NR_fstatfs64 = 266 +const __NR_fsync = 118 +const __NR_ftruncate = 93 +const __NR_futex = 238 +const __NR_futex_waitv = 449 +const __NR_futimesat = 292 +const __NR_get_kernel_syms = 130 +const __NR_get_mempolicy = 269 +const __NR_get_robust_list = 305 +const __NR_getcpu = 311 +const __NR_getcwd = 183 +const __NR_getdents = 141 +const __NR_getdents64 = 220 +const __NR_getegid = 202 +const __NR_geteuid = 201 +const __NR_getgid = 200 +const __NR_getgroups = 205 +const __NR_getitimer = 105 +const __NR_getpeername = 368 +const __NR_getpgid = 132 +const __NR_getpgrp = 65 +const __NR_getpid = 20 +const __NR_getpmsg = 188 +const __NR_getppid = 64 +const __NR_getpriority = 96 +const __NR_getrandom = 349 +const __NR_getresgid = 211 +const __NR_getresuid = 209 +const __NR_getrlimit = 191 +const __NR_getrusage = 77 +const __NR_getsid = 147 +const __NR_getsockname = 367 +const __NR_getsockopt = 365 +const __NR_gettid = 236 +const __NR_gettimeofday = 78 +const __NR_getuid = 199 +const __NR_getxattr = 227 +const __NR_idle = 112 +const __NR_init_module = 128 +const __NR_inotify_add_watch = 285 +const __NR_inotify_init = 284 +const __NR_inotify_init1 = 324 +const __NR_inotify_rm_watch = 286 +const __NR_io_cancel = 247 +const __NR_io_destroy = 244 +const __NR_io_getevents = 245 +const __NR_io_pgetevents = 382 +const __NR_io_setup = 243 +const __NR_io_submit = 246 +const __NR_io_uring_enter = 426 +const __NR_io_uring_register = 427 +const __NR_io_uring_setup = 425 +const __NR_ioctl = 54 +const __NR_ioprio_get = 283 +const __NR_ioprio_set = 282 +const __NR_ipc = 117 +const __NR_kcmp = 343 +const __NR_kexec_file_load = 381 +const __NR_kexec_load = 277 +const __NR_keyctl = 280 +const __NR_kill = 37 +const __NR_landlock_add_rule = 445 +const __NR_landlock_create_ruleset = 444 +const __NR_landlock_restrict_self = 446 +const __NR_lchown = 198 +const __NR_lgetxattr = 228 +const __NR_link = 9 +const __NR_linkat = 296 +const __NR_listen = 363 +const __NR_listxattr = 230 +const __NR_llistxattr = 231 +const __NR_lookup_dcookie = 110 +const __NR_lremovexattr = 234 +const __NR_lseek = 19 +const __NR_lsetxattr = 225 +const __NR_lstat = 107 +const __NR_madvise = 219 +const __NR_mbind = 268 +const __NR_membarrier = 356 +const __NR_memfd_create = 350 +const __NR_memfd_secret = 447 +const __NR_migrate_pages = 287 +const __NR_mincore = 218 +const __NR_mkdir = 39 +const __NR_mkdirat = 289 +const __NR_mknod = 14 +const __NR_mknodat = 290 +const __NR_mlock = 150 +const __NR_mlock2 = 374 +const __NR_mlockall = 152 +const __NR_mmap = 90 +const __NR_mount = 21 +const __NR_mount_setattr = 442 +const __NR_move_mount = 429 +const __NR_move_pages = 310 +const __NR_mprotect = 125 +const __NR_mq_getsetattr = 276 +const __NR_mq_notify = 275 +const __NR_mq_open = 271 +const __NR_mq_timedreceive = 274 +const __NR_mq_timedsend = 273 +const __NR_mq_unlink = 272 +const __NR_mremap = 163 +const __NR_msgctl = 402 +const __NR_msgget = 399 +const __NR_msgrcv = 401 +const __NR_msgsnd = 400 +const __NR_msync = 144 +const __NR_munlock = 151 +const __NR_munlockall = 153 +const __NR_munmap = 91 +const __NR_name_to_handle_at = 335 +const __NR_nanosleep = 162 +const __NR_newfstatat = 293 +const __NR_nfsservctl = 169 +const __NR_nice = 34 +const __NR_open = 5 +const __NR_open_by_handle_at = 336 +const __NR_open_tree = 428 +const __NR_openat = 288 +const __NR_openat2 = 437 +const __NR_pause = 29 +const __NR_perf_event_open = 331 +const __NR_personality = 136 +const __NR_pidfd_getfd = 438 +const __NR_pidfd_open = 434 +const __NR_pidfd_send_signal = 424 +const __NR_pipe = 42 +const __NR_pipe2 = 325 +const __NR_pivot_root = 217 +const __NR_pkey_alloc = 385 +const __NR_pkey_free = 386 +const __NR_pkey_mprotect = 384 +const __NR_poll = 168 +const __NR_ppoll = 302 +const __NR_prctl = 172 +const __NR_pread64 = 180 +const __NR_preadv = 328 +const __NR_preadv2 = 376 +const __NR_prlimit64 = 334 +const __NR_process_madvise = 440 +const __NR_process_mrelease = 448 +const __NR_process_vm_readv = 340 +const __NR_process_vm_writev = 341 +const __NR_pselect6 = 301 +const __NR_ptrace = 26 +const __NR_putpmsg = 189 +const __NR_pwrite64 = 181 +const __NR_pwritev = 329 +const __NR_pwritev2 = 377 +const __NR_query_module = 167 +const __NR_quotactl = 131 +const __NR_read = 3 +const __NR_readahead = 222 +const __NR_readdir = 89 +const __NR_readlink = 85 +const __NR_readlinkat = 298 +const __NR_readv = 145 +const __NR_reboot = 88 +const __NR_recvfrom = 371 +const __NR_recvmmsg = 357 +const __NR_recvmsg = 372 +const __NR_remap_file_pages = 267 +const __NR_removexattr = 233 +const __NR_rename = 38 +const __NR_renameat = 295 +const __NR_renameat2 = 347 +const __NR_request_key = 279 +const __NR_restart_syscall = 7 +const __NR_rmdir = 40 +const __NR_rseq = 383 +const __NR_rt_sigaction = 174 +const __NR_rt_sigpending = 176 +const __NR_rt_sigprocmask = 175 +const __NR_rt_sigqueueinfo = 178 +const __NR_rt_sigreturn = 173 +const __NR_rt_sigsuspend = 179 +const __NR_rt_sigtimedwait = 177 +const __NR_rt_tgsigqueueinfo = 330 +const __NR_s390_guarded_storage = 378 +const __NR_s390_pci_mmio_read = 353 +const __NR_s390_pci_mmio_write = 352 +const __NR_s390_runtime_instr = 342 +const __NR_s390_sthyi = 380 +const __NR_sched_get_priority_max = 159 +const __NR_sched_get_priority_min = 160 +const __NR_sched_getaffinity = 240 +const __NR_sched_getattr = 346 +const __NR_sched_getparam = 155 +const __NR_sched_getscheduler = 157 +const __NR_sched_rr_get_interval = 161 +const __NR_sched_setaffinity = 239 +const __NR_sched_setattr = 345 +const __NR_sched_setparam = 154 +const __NR_sched_setscheduler = 156 +const __NR_sched_yield = 158 +const __NR_seccomp = 348 +const __NR_select = 142 +const __NR_semctl = 394 +const __NR_semget = 393 +const __NR_semtimedop = 392 +const __NR_sendfile = 187 +const __NR_sendmmsg = 358 +const __NR_sendmsg = 370 +const __NR_sendto = 369 +const __NR_set_mempolicy = 270 +const __NR_set_mempolicy_home_node = 450 +const __NR_set_robust_list = 304 +const __NR_set_tid_address = 252 +const __NR_setdomainname = 121 +const __NR_setfsgid = 216 +const __NR_setfsuid = 215 +const __NR_setgid = 214 +const __NR_setgroups = 206 +const __NR_sethostname = 74 +const __NR_setitimer = 104 +const __NR_setns = 339 +const __NR_setpgid = 57 +const __NR_setpriority = 97 +const __NR_setregid = 204 +const __NR_setresgid = 210 +const __NR_setresuid = 208 +const __NR_setreuid = 203 +const __NR_setrlimit = 75 +const __NR_setsid = 66 +const __NR_setsockopt = 366 +const __NR_settimeofday = 79 +const __NR_setuid = 213 +const __NR_setxattr = 224 +const __NR_shmat = 397 +const __NR_shmctl = 396 +const __NR_shmdt = 398 +const __NR_shmget = 395 +const __NR_shutdown = 373 +const __NR_sigaction = 67 +const __NR_sigaltstack = 186 +const __NR_signal = 48 +const __NR_signalfd = 316 +const __NR_signalfd4 = 322 +const __NR_sigpending = 73 +const __NR_sigprocmask = 126 +const __NR_sigreturn = 119 +const __NR_sigsuspend = 72 +const __NR_socket = 359 +const __NR_socketcall = 102 +const __NR_socketpair = 360 +const __NR_splice = 306 +const __NR_stat = 106 +const __NR_statfs = 99 +const __NR_statfs64 = 265 +const __NR_statx = 379 +const __NR_swapoff = 115 +const __NR_swapon = 87 +const __NR_symlink = 83 +const __NR_symlinkat = 297 +const __NR_sync = 36 +const __NR_sync_file_range = 307 +const __NR_syncfs = 338 +const __NR_sysfs = 135 +const __NR_sysinfo = 116 +const __NR_syslog = 103 +const __NR_tee = 308 +const __NR_tgkill = 241 +const __NR_timer_create = 254 +const __NR_timer_delete = 258 +const __NR_timer_getoverrun = 257 +const __NR_timer_gettime = 256 +const __NR_timer_settime = 255 +const __NR_timerfd = 317 +const __NR_timerfd_create = 319 +const __NR_timerfd_gettime = 321 +const __NR_timerfd_settime = 320 +const __NR_times = 43 +const __NR_tkill = 237 +const __NR_truncate = 92 +const __NR_umask = 60 +const __NR_umount = 22 +const __NR_umount2 = 52 +const __NR_uname = 122 +const __NR_unlink = 10 +const __NR_unlinkat = 294 +const __NR_unshare = 303 +const __NR_uselib = 86 +const __NR_userfaultfd = 355 +const __NR_ustat = 62 +const __NR_utime = 30 +const __NR_utimensat = 315 +const __NR_utimes = 313 +const __NR_vfork = 190 +const __NR_vhangup = 111 +const __NR_vmsplice = 309 +const __NR_wait4 = 114 +const __NR_waitid = 281 +const __NR_write = 4 +const __NR_writev = 146 +const __SC_accept = 5 +const __SC_accept4 = 18 +const __SC_bind = 2 +const __SC_connect = 3 +const __SC_getpeername = 7 +const __SC_getsockname = 6 +const __SC_getsockopt = 15 +const __SC_listen = 4 +const __SC_recv = 10 +const __SC_recvfrom = 12 +const __SC_recvmmsg = 19 +const __SC_recvmsg = 17 +const __SC_send = 9 +const __SC_sendmmsg = 20 +const __SC_sendmsg = 16 +const __SC_sendto = 11 +const __SC_setsockopt = 14 +const __SC_shutdown = 13 +const __SC_socket = 1 +const __SC_socketpair = 8 +const libc = 0 + +type Ttime_t = int64 + +type Tsuseconds_t = int64 + +type Ttimeval = struct { + Ftv_sec Ttime_t + Ftv_usec Tsuseconds_t +} + +type Ttimespec = struct { + Ftv_sec Ttime_t + Ftv_nsec int64 +} + +type Tsigset_t = struct { + F__bits [16]uint64 +} + +type t__sigset_t = Tsigset_t + +type Tfd_mask = uint64 + +type Tfd_set = struct { + Ffds_bits [16]uint64 +} + +type Titimerval = struct { + Fit_interval Ttimeval + Fit_value Ttimeval +} + +type Tid_t = uint32 + +type Trlim_t = uint64 + +type Trlimit = struct { + Frlim_cur Trlim_t + Frlim_max Trlim_t +} + +type Trusage = struct { + Fru_utime Ttimeval + Fru_stime Ttimeval + Fru_maxrss int64 + Fru_ixrss int64 + Fru_idrss int64 + Fru_isrss int64 + Fru_minflt int64 + Fru_majflt int64 + Fru_nswap int64 + Fru_inblock int64 + Fru_oublock int64 + Fru_msgsnd int64 + Fru_msgrcv int64 + Fru_nsignals int64 + Fru_nvcsw int64 + Fru_nivcsw int64 + F__reserved [16]int64 +} + +type Tclock_t = int64 + +type Tpthread_t = uintptr + +type Tpthread_attr_t = struct { + F__u struct { + F__vi [0][14]int32 + F__s [0][7]uint64 + F__i [14]int32 + } +} + +type Tstack_t = struct { + Fss_sp uintptr + Fss_flags int32 + Fss_size Tsize_t +} + +type Tsigaltstack = Tstack_t + +type Tmcontext_t = struct { + F__regs1 [18]uint64 + F__regs2 [18]uint32 + F__regs3 [16]float64 +} + +type Tucontext_t = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t +} + +type t__ucontext = Tucontext_t + +type Tsigval = struct { + Fsival_ptr [0]uintptr + Fsival_int int32 + F__ccgo_pad2 [4]byte +} + +type Tsiginfo_t = struct { + Fsi_signo int32 + Fsi_errno int32 + Fsi_code int32 + F__si_fields struct { + F__si_common [0]struct { + F__first struct { + F__timer [0]struct { + Fsi_timerid int32 + Fsi_overrun int32 + } + F__piduid struct { + Fsi_pid Tpid_t + Fsi_uid Tuid_t + } + } + F__second struct { + F__sigchld [0]struct { + Fsi_status int32 + Fsi_utime Tclock_t + Fsi_stime Tclock_t + } + Fsi_value Tsigval + F__ccgo_pad2 [16]byte + } + } + F__sigfault [0]struct { + Fsi_addr uintptr + Fsi_addr_lsb int16 + F__first struct { + Fsi_pkey [0]uint32 + F__addr_bnd struct { + Fsi_lower uintptr + Fsi_upper uintptr + } + } + } + F__sigpoll [0]struct { + Fsi_band int64 + Fsi_fd int32 + } + F__sigsys [0]struct { + Fsi_call_addr uintptr + Fsi_syscall int32 + Fsi_arch uint32 + } + F__pad [112]uint8 + } +} + +type Tsigaction = struct { + F__sa_handler struct { + Fsa_sigaction [0]uintptr + Fsa_handler uintptr + } + Fsa_mask Tsigset_t + Fsa_flags int32 + Fsa_restorer uintptr +} + +type Tsigevent = struct { + Fsigev_value Tsigval + Fsigev_signo int32 + Fsigev_notify int32 + F__sev_fields struct { + Fsigev_notify_thread_id [0]Tpid_t + F__sev_thread [0]struct { + Fsigev_notify_function uintptr + Fsigev_notify_attributes uintptr + } + F__pad [48]uint8 + } +} + +type Tsig_atomic_t = int32 + +type TElf32_Half = uint16 + +type TElf64_Half = uint16 + +type TElf32_Word = uint32 + +type TElf32_Sword = int32 + +type TElf64_Word = uint32 + +type TElf64_Sword = int32 + +type TElf32_Xword = uint64 + +type TElf32_Sxword = int64 + +type TElf64_Xword = uint64 + +type TElf64_Sxword = int64 + +type TElf32_Addr = uint32 + +type TElf64_Addr = uint64 + +type TElf32_Off = uint32 + +type TElf64_Off = uint64 + +type TElf32_Section = uint16 + +type TElf64_Section = uint16 + +type TElf32_Versym = uint16 + +type TElf64_Versym = uint16 + +type TElf32_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf32_Half + Fe_machine TElf32_Half + Fe_version TElf32_Word + Fe_entry TElf32_Addr + Fe_phoff TElf32_Off + Fe_shoff TElf32_Off + Fe_flags TElf32_Word + Fe_ehsize TElf32_Half + Fe_phentsize TElf32_Half + Fe_phnum TElf32_Half + Fe_shentsize TElf32_Half + Fe_shnum TElf32_Half + Fe_shstrndx TElf32_Half +} + +type TElf64_Ehdr = struct { + Fe_ident [16]uint8 + Fe_type TElf64_Half + Fe_machine TElf64_Half + Fe_version TElf64_Word + Fe_entry TElf64_Addr + Fe_phoff TElf64_Off + Fe_shoff TElf64_Off + Fe_flags TElf64_Word + Fe_ehsize TElf64_Half + Fe_phentsize TElf64_Half + Fe_phnum TElf64_Half + Fe_shentsize TElf64_Half + Fe_shnum TElf64_Half + Fe_shstrndx TElf64_Half +} + +type TElf32_Shdr = struct { + Fsh_name TElf32_Word + Fsh_type TElf32_Word + Fsh_flags TElf32_Word + Fsh_addr TElf32_Addr + Fsh_offset TElf32_Off + Fsh_size TElf32_Word + Fsh_link TElf32_Word + Fsh_info TElf32_Word + Fsh_addralign TElf32_Word + Fsh_entsize TElf32_Word +} + +type TElf64_Shdr = struct { + Fsh_name TElf64_Word + Fsh_type TElf64_Word + Fsh_flags TElf64_Xword + Fsh_addr TElf64_Addr + Fsh_offset TElf64_Off + Fsh_size TElf64_Xword + Fsh_link TElf64_Word + Fsh_info TElf64_Word + Fsh_addralign TElf64_Xword + Fsh_entsize TElf64_Xword +} + +type TElf32_Chdr = struct { + Fch_type TElf32_Word + Fch_size TElf32_Word + Fch_addralign TElf32_Word +} + +type TElf64_Chdr = struct { + Fch_type TElf64_Word + Fch_reserved TElf64_Word + Fch_size TElf64_Xword + Fch_addralign TElf64_Xword +} + +type TElf32_Sym = struct { + Fst_name TElf32_Word + Fst_value TElf32_Addr + Fst_size TElf32_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf32_Section +} + +type TElf64_Sym = struct { + Fst_name TElf64_Word + Fst_info uint8 + Fst_other uint8 + Fst_shndx TElf64_Section + Fst_value TElf64_Addr + Fst_size TElf64_Xword +} + +type TElf32_Syminfo = struct { + Fsi_boundto TElf32_Half + Fsi_flags TElf32_Half +} + +type TElf64_Syminfo = struct { + Fsi_boundto TElf64_Half + Fsi_flags TElf64_Half +} + +type TElf32_Rel = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word +} + +type TElf64_Rel = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword +} + +type TElf32_Rela = struct { + Fr_offset TElf32_Addr + Fr_info TElf32_Word + Fr_addend TElf32_Sword +} + +type TElf64_Rela = struct { + Fr_offset TElf64_Addr + Fr_info TElf64_Xword + Fr_addend TElf64_Sxword +} + +type TElf32_Relr = uint32 + +type TElf64_Relr = uint64 + +type TElf32_Phdr = struct { + Fp_type TElf32_Word + Fp_offset TElf32_Off + Fp_vaddr TElf32_Addr + Fp_paddr TElf32_Addr + Fp_filesz TElf32_Word + Fp_memsz TElf32_Word + Fp_flags TElf32_Word + Fp_align TElf32_Word +} + +type TElf64_Phdr = struct { + Fp_type TElf64_Word + Fp_flags TElf64_Word + Fp_offset TElf64_Off + Fp_vaddr TElf64_Addr + Fp_paddr TElf64_Addr + Fp_filesz TElf64_Xword + Fp_memsz TElf64_Xword + Fp_align TElf64_Xword +} + +type TElf32_Dyn = struct { + Fd_tag TElf32_Sword + Fd_un struct { + Fd_ptr [0]TElf32_Addr + Fd_val TElf32_Word + } +} + +type TElf64_Dyn = struct { + Fd_tag TElf64_Sxword + Fd_un struct { + Fd_ptr [0]TElf64_Addr + Fd_val TElf64_Xword + } +} + +type TElf32_Verdef = struct { + Fvd_version TElf32_Half + Fvd_flags TElf32_Half + Fvd_ndx TElf32_Half + Fvd_cnt TElf32_Half + Fvd_hash TElf32_Word + Fvd_aux TElf32_Word + Fvd_next TElf32_Word +} + +type TElf64_Verdef = struct { + Fvd_version TElf64_Half + Fvd_flags TElf64_Half + Fvd_ndx TElf64_Half + Fvd_cnt TElf64_Half + Fvd_hash TElf64_Word + Fvd_aux TElf64_Word + Fvd_next TElf64_Word +} + +type TElf32_Verdaux = struct { + Fvda_name TElf32_Word + Fvda_next TElf32_Word +} + +type TElf64_Verdaux = struct { + Fvda_name TElf64_Word + Fvda_next TElf64_Word +} + +type TElf32_Verneed = struct { + Fvn_version TElf32_Half + Fvn_cnt TElf32_Half + Fvn_file TElf32_Word + Fvn_aux TElf32_Word + Fvn_next TElf32_Word +} + +type TElf64_Verneed = struct { + Fvn_version TElf64_Half + Fvn_cnt TElf64_Half + Fvn_file TElf64_Word + Fvn_aux TElf64_Word + Fvn_next TElf64_Word +} + +type TElf32_Vernaux = struct { + Fvna_hash TElf32_Word + Fvna_flags TElf32_Half + Fvna_other TElf32_Half + Fvna_name TElf32_Word + Fvna_next TElf32_Word +} + +type TElf64_Vernaux = struct { + Fvna_hash TElf64_Word + Fvna_flags TElf64_Half + Fvna_other TElf64_Half + Fvna_name TElf64_Word + Fvna_next TElf64_Word +} + +type TElf32_auxv_t = struct { + Fa_type Tuint32_t + Fa_un struct { + Fa_val Tuint32_t + } +} + +type TElf64_auxv_t = struct { + Fa_type Tuint64_t + Fa_un struct { + Fa_val Tuint64_t + } +} + +type TElf32_Nhdr = struct { + Fn_namesz TElf32_Word + Fn_descsz TElf32_Word + Fn_type TElf32_Word +} + +type TElf64_Nhdr = struct { + Fn_namesz TElf64_Word + Fn_descsz TElf64_Word + Fn_type TElf64_Word +} + +type TElf32_Move = struct { + Fm_value TElf32_Xword + Fm_info TElf32_Word + Fm_poffset TElf32_Word + Fm_repeat TElf32_Half + Fm_stride TElf32_Half +} + +type TElf64_Move = struct { + Fm_value TElf64_Xword + Fm_info TElf64_Xword + Fm_poffset TElf64_Xword + Fm_repeat TElf64_Half + Fm_stride TElf64_Half +} + +type TElf32_gptab = struct { + Fgt_entry [0]struct { + Fgt_g_value TElf32_Word + Fgt_bytes TElf32_Word + } + Fgt_header struct { + Fgt_current_g_value TElf32_Word + Fgt_unused TElf32_Word + } +} + +type TElf32_RegInfo = struct { + Fri_gprmask TElf32_Word + Fri_cprmask [4]TElf32_Word + Fri_gp_value TElf32_Sword +} + +type TElf_Options = struct { + Fkind uint8 + Fsize uint8 + Fsection TElf32_Section + Finfo TElf32_Word +} + +type TElf_Options_Hw = struct { + Fhwp_flags1 TElf32_Word + Fhwp_flags2 TElf32_Word +} + +type TElf32_Lib = struct { + Fl_name TElf32_Word + Fl_time_stamp TElf32_Word + Fl_checksum TElf32_Word + Fl_version TElf32_Word + Fl_flags TElf32_Word +} + +type TElf64_Lib = struct { + Fl_name TElf64_Word + Fl_time_stamp TElf64_Word + Fl_checksum TElf64_Word + Fl_version TElf64_Word + Fl_flags TElf64_Word +} + +type TElf32_Conflict = uint32 + +type TElf_MIPS_ABIFlags_v0 = struct { + Fversion TElf32_Half + Fisa_level uint8 + Fisa_rev uint8 + Fgpr_size uint8 + Fcpr1_size uint8 + Fcpr2_size uint8 + Ffp_abi uint8 + Fisa_ext TElf32_Word + Fases TElf32_Word + Fflags1 TElf32_Word + Fflags2 TElf32_Word +} + +const _Val_GNU_MIPS_ABI_FP_ANY = 0 +const _Val_GNU_MIPS_ABI_FP_DOUBLE = 1 +const _Val_GNU_MIPS_ABI_FP_SINGLE = 2 +const _Val_GNU_MIPS_ABI_FP_SOFT = 3 +const _Val_GNU_MIPS_ABI_FP_OLD_64 = 4 +const _Val_GNU_MIPS_ABI_FP_XX = 5 +const _Val_GNU_MIPS_ABI_FP_64 = 6 +const _Val_GNU_MIPS_ABI_FP_64A = 7 +const _Val_GNU_MIPS_ABI_FP_MAX = 7 + +type Tsyscall_arg_t = int64 + +type Twchar_t = int32 + +type Tdiv_t = struct { + Fquot int32 + Frem int32 +} + +type Tldiv_t = struct { + Fquot int64 + Frem int64 +} + +type Tlldiv_t = struct { + Fquot int64 + Frem int64 +} + +type t__locale_struct = struct { + Fcat [6]uintptr +} + +type Ttls_module = struct { + Fnext uintptr + Fimage uintptr + Flen1 Tsize_t + Fsize Tsize_t + Falign Tsize_t + Foffset Tsize_t +} + +type t__libc = struct { + Fcan_do_threads uint8 + Fthreaded uint8 + Fsecure uint8 + Fneed_locks int8 + Fthreads_minus_1 int32 + Fauxv uintptr + Ftls_head uintptr + Ftls_size Tsize_t + Ftls_align Tsize_t + Ftls_cnt Tsize_t + Fpage_size Tsize_t + Fglobal_locale t__locale_struct +} + +func Xsysconf(tls *TLS, name int32) (r int64) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var cnt, i, v3 int32 + var mem, v1, v6 uint64 + var val int64 + var p5 uintptr + var _ /* lim at bp+0 */ Trlimit + var _ /* set at bp+16 */ [128]uint8 + var _ /* si at bp+144 */ Tsysinfo + _, _, _, _, _, _, _, _ = cnt, i, mem, val, v1, v3, v6, p5 + if uint64(name) >= Uint64FromInt64(502)/Uint64FromInt64(2) || !(_values1[name] != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } else { + if int32(_values1[name]) >= -int32(1) { + return int64(_values1[name]) + } else { + if int32(_values1[name]) < -int32(256) { + Xgetrlimit(tls, int32(_values1[name])&int32(16383), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur == ^Uint64FromUint64(0) { + return int64(-int32(1)) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur > uint64(0x7fffffffffffffff) { + v1 = uint64(0x7fffffffffffffff) + } else { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } + return int64(v1) + } + } + } + switch int32(uint8(_values1[name])) { + case (-Int32FromInt32(256) | Int32FromInt32(1)) & Int32FromInt32(255): + return int64(200809) + case (-Int32FromInt32(256) | Int32FromInt32(2)) & Int32FromInt32(255): + return int64(ARG_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(3)) & Int32FromInt32(255): + return int64(MQ_PRIO_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(4)) & Int32FromInt32(255): + return int64(PAGESIZE) + case (-Int32FromInt32(256) | Int32FromInt32(5)) & Int32FromInt32(255): + return int64(SEM_VALUE_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(11)) & Int32FromInt32(255): + return int64(DELAYTIMER_MAX) + case (-Int32FromInt32(256) | Int32FromInt32(6)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(7)) & Int32FromInt32(255): + *(*[128]uint8)(unsafe.Pointer(bp + 16)) = [128]uint8{ + 0: uint8(1), + } + X__syscall3(tls, int64(SYS_sched_getaffinity), int64(Int32FromInt32(0)), int64(Uint64FromInt64(128)), int64(bp+16)) + v3 = Int32FromInt32(0) + cnt = v3 + i = v3 + for { + if !(uint64(i) < uint64(128)) { + break + } + for { + if !((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i] != 0) { + break + } + goto _4 + _4: + ; + p5 = bp + 16 + uintptr(i) + *(*uint8)(unsafe.Pointer(p5)) = uint8(int32(*(*uint8)(unsafe.Pointer(p5))) & (int32((*(*[128]uint8)(unsafe.Pointer(bp + 16)))[i]) - Int32FromInt32(1))) + cnt++ + } + goto _2 + _2: + ; + i++ + } + return int64(cnt) + case (-Int32FromInt32(256) | Int32FromInt32(8)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(9)) & Int32FromInt32(255): + X__lsysinfo(tls, bp+144) + if !((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit != 0) { + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit = uint32(1) + } + if name == int32(_SC_PHYS_PAGES) { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ftotalram + } else { + mem = (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Ffreeram + (*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fbufferram + } + mem *= uint64((*(*Tsysinfo)(unsafe.Pointer(bp + 144))).Fmem_unit) + mem /= uint64(PAGESIZE) + if mem > uint64(0x7fffffffffffffff) { + v6 = uint64(0x7fffffffffffffff) + } else { + v6 = mem + } + return int64(v6) + case (-Int32FromInt32(256) | Int32FromInt32(12)) & Int32FromInt32(255): + fallthrough + case (-Int32FromInt32(256) | Int32FromInt32(13)) & Int32FromInt32(255): + val = int64(X__getauxval(tls, uint64(AT_MINSIGSTKSZ))) + if val < int64(MINSIGSTKSZ) { + val = int64(MINSIGSTKSZ) + } + if int32(_values1[name]) == -Int32FromInt32(256)|Int32FromInt32(13) { + val += int64(Int32FromInt32(SIGSTKSZ) - Int32FromInt32(MINSIGSTKSZ)) + } + return val + case (-Int32FromInt32(256) | Int32FromInt32(10)) & Int32FromInt32(255): + return 0 + } + return int64(_values1[name]) +} + +var _values1 = [251]int16{ + 0: int16(-Int32FromInt32(256) | Int32FromInt32(2)), + 1: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NPROC)), + 2: int16(100), + 3: int16(32), + 4: int16(-Int32FromInt32(32768) | Int32FromInt32(RLIMIT_NOFILE)), + 5: int16(-int32(1)), + 6: int16(TZNAME_MAX), + 7: int16(1), + 8: int16(1), + 9: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 10: int16(-int32(1)), + 11: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 12: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 13: int16(-int32(1)), + 14: int16(-int32(1)), + 15: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 16: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 17: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 18: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 19: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 20: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 21: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 22: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 23: int16(-int32(1)), + 24: int16(-int32(1)), + 25: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 26: int16(-Int32FromInt32(256) | Int32FromInt32(11)), + 27: int16(-int32(1)), + 28: int16(-Int32FromInt32(256) | Int32FromInt32(3)), + 29: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 30: int16(-Int32FromInt32(256) | Int32FromInt32(4)), + 31: int16(Int32FromInt32(_NSIG) - Int32FromInt32(1) - Int32FromInt32(31) - Int32FromInt32(3)), + 32: int16(SEM_NSEMS_MAX), + 33: int16(-Int32FromInt32(256) | Int32FromInt32(5)), + 34: int16(-int32(1)), + 35: int16(-int32(1)), + 36: int16(_POSIX2_BC_BASE_MAX), + 37: int16(_POSIX2_BC_DIM_MAX), + 38: int16(_POSIX2_BC_SCALE_MAX), + 39: int16(_POSIX2_BC_STRING_MAX), + 40: int16(COLL_WEIGHTS_MAX), + 42: int16(-int32(1)), + 43: int16(-int32(1)), + 44: int16(RE_DUP_MAX), + 46: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 47: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 48: int16(-int32(1)), + 49: int16(-int32(1)), + 50: int16(-int32(1)), + 51: int16(-int32(1)), + 52: int16(-int32(1)), + 60: int16(IOV_MAX), + 67: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 68: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 69: int16(-int32(1)), + 70: int16(-int32(1)), + 71: int16(256), + 72: int16(TTY_NAME_MAX), + 73: int16(PTHREAD_DESTRUCTOR_ITERATIONS), + 74: int16(PTHREAD_KEYS_MAX), + 75: int16(PTHREAD_STACK_MIN), + 76: int16(-int32(1)), + 77: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 78: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 79: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 80: int16(-int32(1)), + 81: int16(-int32(1)), + 82: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 83: int16(-Int32FromInt32(256) | Int32FromInt32(6)), + 84: int16(-Int32FromInt32(256) | Int32FromInt32(7)), + 85: int16(-Int32FromInt32(256) | Int32FromInt32(8)), + 86: int16(-Int32FromInt32(256) | Int32FromInt32(9)), + 87: int16(-int32(1)), + 88: int16(-int32(1)), + 89: int16(_XOPEN_VERSION), + 90: int16(_XOPEN_VERSION), + 91: int16(1), + 92: int16(-int32(1)), + 93: int16(1), + 94: int16(1), + 95: int16(-int32(1)), + 97: int16(-int32(1)), + 98: int16(-int32(1)), + 99: int16(-int32(1)), + 100: int16(-int32(1)), + 109: int16(NZERO), + 125: int16(-int32(1)), + 126: int16(-int32(1)), + 127: int16(1), + 128: int16(-int32(1)), + 129: int16(-int32(1)), + 130: int16(-int32(1)), + 131: int16(-int32(1)), + 132: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 133: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 137: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 138: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 139: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 149: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 153: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 154: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 155: int16(1), + 157: int16(1), + 159: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 160: int16(-int32(1)), + 161: int16(-int32(1)), + 164: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 165: int16(-int32(1)), + 168: int16(-int32(1)), + 169: int16(-int32(1)), + 170: int16(-int32(1)), + 171: int16(-int32(1)), + 172: int16(-int32(1)), + 173: int16(SYMLOOP_MAX), + 174: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 175: int16(-int32(1)), + 176: int16(-int32(1)), + 177: int16(-int32(1)), + 178: int16(1), + 179: int16(-int32(1)), + 180: int16(HOST_NAME_MAX), + 181: int16(-int32(1)), + 182: int16(-int32(1)), + 183: int16(-int32(1)), + 184: int16(-int32(1)), + 235: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 236: int16(-Int32FromInt32(256) | Int32FromInt32(1)), + 237: int16(-int32(1)), + 238: int16(-int32(1)), + 239: int16(1), + 240: int16(-int32(1)), + 241: int16(-int32(1)), + 242: int16(-int32(1)), + 243: int16(-int32(1)), + 244: int16(-int32(1)), + 245: int16(-int32(1)), + 246: int16(-Int32FromInt32(256) | Int32FromInt32(10)), + 247: int16(-int32(1)), + 248: int16(-int32(1)), + 249: int16(-Int32FromInt32(256) | Int32FromInt32(12)), + 250: int16(-Int32FromInt32(256) | Int32FromInt32(13)), +} + +type Tcrypt_data = struct { + Finitialized int32 + F__buf [256]uint8 +} + +func Xcrypt(tls *TLS, key uintptr, salt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v, (%v:)", tls, key, salt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, uintptr(unsafe.Pointer(&_buf))) +} + +/* This buffer is sufficiently large for all + * currently-supported hash types. It needs to be updated if + * longer hashes are added. The cast to struct crypt_data * is + * purely to meet the public API requirements of the crypt_r + * function; the implementation of crypt_r uses the object + * purely as a char buffer. */ +var _buf [128]uint8 + +const BF_N = 16 + +type Tlocale_t = uintptr + +type TBF_word = uint32 + +type TBF_word_signed = int32 + +/* Number of Blowfish rounds, this is also hardcoded into a few places */ + +type TBF_key = [18]TBF_word + +type TBF_ctx = struct { + FPS [0][1042]TBF_word + Fs struct { + FP TBF_key + FS [4][256]TBF_word + } +} + +// C documentation +// +// /* +// * Magic IV for 64 Blowfish encryptions that we do at the end. +// * The string is "OrpheanBeholderScryDoubt" on big-endian. +// */ +var _BF_magic_w = [6]TBF_word{ + 0: uint32(0x4F727068), + 1: uint32(0x65616E42), + 2: uint32(0x65686F6C), + 3: uint32(0x64657253), + 4: uint32(0x63727944), + 5: uint32(0x6F756274), +} + +// C documentation +// +// /* +// * P-box and S-box tables initialized with digits of Pi. +// */ +var _BF_init_state = *(*TBF_ctx)(unsafe.Pointer(&struct { + FP TBF_key + FS [4][256]TBF_word +}{ + FP: TBF_key{ + 0: uint32(0x243f6a88), + 1: uint32(0x85a308d3), + 2: uint32(0x13198a2e), + 3: uint32(0x03707344), + 4: uint32(0xa4093822), + 5: uint32(0x299f31d0), + 6: uint32(0x082efa98), + 7: uint32(0xec4e6c89), + 8: uint32(0x452821e6), + 9: uint32(0x38d01377), + 10: uint32(0xbe5466cf), + 11: uint32(0x34e90c6c), + 12: uint32(0xc0ac29b7), + 13: uint32(0xc97c50dd), + 14: uint32(0x3f84d5b5), + 15: uint32(0xb5470917), + 16: uint32(0x9216d5d9), + 17: uint32(0x8979fb1b), + }, + FS: [4][256]TBF_word{ + 0: { + 0: uint32(0xd1310ba6), + 1: uint32(0x98dfb5ac), + 2: uint32(0x2ffd72db), + 3: uint32(0xd01adfb7), + 4: uint32(0xb8e1afed), + 5: uint32(0x6a267e96), + 6: uint32(0xba7c9045), + 7: uint32(0xf12c7f99), + 8: uint32(0x24a19947), + 9: uint32(0xb3916cf7), + 10: uint32(0x0801f2e2), + 11: uint32(0x858efc16), + 12: uint32(0x636920d8), + 13: uint32(0x71574e69), + 14: uint32(0xa458fea3), + 15: uint32(0xf4933d7e), + 16: uint32(0x0d95748f), + 17: uint32(0x728eb658), + 18: uint32(0x718bcd58), + 19: uint32(0x82154aee), + 20: uint32(0x7b54a41d), + 21: uint32(0xc25a59b5), + 22: uint32(0x9c30d539), + 23: uint32(0x2af26013), + 24: uint32(0xc5d1b023), + 25: uint32(0x286085f0), + 26: uint32(0xca417918), + 27: uint32(0xb8db38ef), + 28: uint32(0x8e79dcb0), + 29: uint32(0x603a180e), + 30: uint32(0x6c9e0e8b), + 31: uint32(0xb01e8a3e), + 32: uint32(0xd71577c1), + 33: uint32(0xbd314b27), + 34: uint32(0x78af2fda), + 35: uint32(0x55605c60), + 36: uint32(0xe65525f3), + 37: uint32(0xaa55ab94), + 38: uint32(0x57489862), + 39: uint32(0x63e81440), + 40: uint32(0x55ca396a), + 41: uint32(0x2aab10b6), + 42: uint32(0xb4cc5c34), + 43: uint32(0x1141e8ce), + 44: uint32(0xa15486af), + 45: uint32(0x7c72e993), + 46: uint32(0xb3ee1411), + 47: uint32(0x636fbc2a), + 48: uint32(0x2ba9c55d), + 49: uint32(0x741831f6), + 50: uint32(0xce5c3e16), + 51: uint32(0x9b87931e), + 52: uint32(0xafd6ba33), + 53: uint32(0x6c24cf5c), + 54: uint32(0x7a325381), + 55: uint32(0x28958677), + 56: uint32(0x3b8f4898), + 57: uint32(0x6b4bb9af), + 58: uint32(0xc4bfe81b), + 59: uint32(0x66282193), + 60: uint32(0x61d809cc), + 61: uint32(0xfb21a991), + 62: uint32(0x487cac60), + 63: uint32(0x5dec8032), + 64: uint32(0xef845d5d), + 65: uint32(0xe98575b1), + 66: uint32(0xdc262302), + 67: uint32(0xeb651b88), + 68: uint32(0x23893e81), + 69: uint32(0xd396acc5), + 70: uint32(0x0f6d6ff3), + 71: uint32(0x83f44239), + 72: uint32(0x2e0b4482), + 73: uint32(0xa4842004), + 74: uint32(0x69c8f04a), + 75: uint32(0x9e1f9b5e), + 76: uint32(0x21c66842), + 77: uint32(0xf6e96c9a), + 78: uint32(0x670c9c61), + 79: uint32(0xabd388f0), + 80: uint32(0x6a51a0d2), + 81: uint32(0xd8542f68), + 82: uint32(0x960fa728), + 83: uint32(0xab5133a3), + 84: uint32(0x6eef0b6c), + 85: uint32(0x137a3be4), + 86: uint32(0xba3bf050), + 87: uint32(0x7efb2a98), + 88: uint32(0xa1f1651d), + 89: uint32(0x39af0176), + 90: uint32(0x66ca593e), + 91: uint32(0x82430e88), + 92: uint32(0x8cee8619), + 93: uint32(0x456f9fb4), + 94: uint32(0x7d84a5c3), + 95: uint32(0x3b8b5ebe), + 96: uint32(0xe06f75d8), + 97: uint32(0x85c12073), + 98: uint32(0x401a449f), + 99: uint32(0x56c16aa6), + 100: uint32(0x4ed3aa62), + 101: uint32(0x363f7706), + 102: uint32(0x1bfedf72), + 103: uint32(0x429b023d), + 104: uint32(0x37d0d724), + 105: uint32(0xd00a1248), + 106: uint32(0xdb0fead3), + 107: uint32(0x49f1c09b), + 108: uint32(0x075372c9), + 109: uint32(0x80991b7b), + 110: uint32(0x25d479d8), + 111: uint32(0xf6e8def7), + 112: uint32(0xe3fe501a), + 113: uint32(0xb6794c3b), + 114: uint32(0x976ce0bd), + 115: uint32(0x04c006ba), + 116: uint32(0xc1a94fb6), + 117: uint32(0x409f60c4), + 118: uint32(0x5e5c9ec2), + 119: uint32(0x196a2463), + 120: uint32(0x68fb6faf), + 121: uint32(0x3e6c53b5), + 122: uint32(0x1339b2eb), + 123: uint32(0x3b52ec6f), + 124: uint32(0x6dfc511f), + 125: uint32(0x9b30952c), + 126: uint32(0xcc814544), + 127: uint32(0xaf5ebd09), + 128: uint32(0xbee3d004), + 129: uint32(0xde334afd), + 130: uint32(0x660f2807), + 131: uint32(0x192e4bb3), + 132: uint32(0xc0cba857), + 133: uint32(0x45c8740f), + 134: uint32(0xd20b5f39), + 135: uint32(0xb9d3fbdb), + 136: uint32(0x5579c0bd), + 137: uint32(0x1a60320a), + 138: uint32(0xd6a100c6), + 139: uint32(0x402c7279), + 140: uint32(0x679f25fe), + 141: uint32(0xfb1fa3cc), + 142: uint32(0x8ea5e9f8), + 143: uint32(0xdb3222f8), + 144: uint32(0x3c7516df), + 145: uint32(0xfd616b15), + 146: uint32(0x2f501ec8), + 147: uint32(0xad0552ab), + 148: uint32(0x323db5fa), + 149: uint32(0xfd238760), + 150: uint32(0x53317b48), + 151: uint32(0x3e00df82), + 152: uint32(0x9e5c57bb), + 153: uint32(0xca6f8ca0), + 154: uint32(0x1a87562e), + 155: uint32(0xdf1769db), + 156: uint32(0xd542a8f6), + 157: uint32(0x287effc3), + 158: uint32(0xac6732c6), + 159: uint32(0x8c4f5573), + 160: uint32(0x695b27b0), + 161: uint32(0xbbca58c8), + 162: uint32(0xe1ffa35d), + 163: uint32(0xb8f011a0), + 164: uint32(0x10fa3d98), + 165: uint32(0xfd2183b8), + 166: uint32(0x4afcb56c), + 167: uint32(0x2dd1d35b), + 168: uint32(0x9a53e479), + 169: uint32(0xb6f84565), + 170: uint32(0xd28e49bc), + 171: uint32(0x4bfb9790), + 172: uint32(0xe1ddf2da), + 173: uint32(0xa4cb7e33), + 174: uint32(0x62fb1341), + 175: uint32(0xcee4c6e8), + 176: uint32(0xef20cada), + 177: uint32(0x36774c01), + 178: uint32(0xd07e9efe), + 179: uint32(0x2bf11fb4), + 180: uint32(0x95dbda4d), + 181: uint32(0xae909198), + 182: uint32(0xeaad8e71), + 183: uint32(0x6b93d5a0), + 184: uint32(0xd08ed1d0), + 185: uint32(0xafc725e0), + 186: uint32(0x8e3c5b2f), + 187: uint32(0x8e7594b7), + 188: uint32(0x8ff6e2fb), + 189: uint32(0xf2122b64), + 190: uint32(0x8888b812), + 191: uint32(0x900df01c), + 192: uint32(0x4fad5ea0), + 193: uint32(0x688fc31c), + 194: uint32(0xd1cff191), + 195: uint32(0xb3a8c1ad), + 196: uint32(0x2f2f2218), + 197: uint32(0xbe0e1777), + 198: uint32(0xea752dfe), + 199: uint32(0x8b021fa1), + 200: uint32(0xe5a0cc0f), + 201: uint32(0xb56f74e8), + 202: uint32(0x18acf3d6), + 203: uint32(0xce89e299), + 204: uint32(0xb4a84fe0), + 205: uint32(0xfd13e0b7), + 206: uint32(0x7cc43b81), + 207: uint32(0xd2ada8d9), + 208: uint32(0x165fa266), + 209: uint32(0x80957705), + 210: uint32(0x93cc7314), + 211: uint32(0x211a1477), + 212: uint32(0xe6ad2065), + 213: uint32(0x77b5fa86), + 214: uint32(0xc75442f5), + 215: uint32(0xfb9d35cf), + 216: uint32(0xebcdaf0c), + 217: uint32(0x7b3e89a0), + 218: uint32(0xd6411bd3), + 219: uint32(0xae1e7e49), + 220: uint32(0x00250e2d), + 221: uint32(0x2071b35e), + 222: uint32(0x226800bb), + 223: uint32(0x57b8e0af), + 224: uint32(0x2464369b), + 225: uint32(0xf009b91e), + 226: uint32(0x5563911d), + 227: uint32(0x59dfa6aa), + 228: uint32(0x78c14389), + 229: uint32(0xd95a537f), + 230: uint32(0x207d5ba2), + 231: uint32(0x02e5b9c5), + 232: uint32(0x83260376), + 233: uint32(0x6295cfa9), + 234: uint32(0x11c81968), + 235: uint32(0x4e734a41), + 236: uint32(0xb3472dca), + 237: uint32(0x7b14a94a), + 238: uint32(0x1b510052), + 239: uint32(0x9a532915), + 240: uint32(0xd60f573f), + 241: uint32(0xbc9bc6e4), + 242: uint32(0x2b60a476), + 243: uint32(0x81e67400), + 244: uint32(0x08ba6fb5), + 245: uint32(0x571be91f), + 246: uint32(0xf296ec6b), + 247: uint32(0x2a0dd915), + 248: uint32(0xb6636521), + 249: uint32(0xe7b9f9b6), + 250: uint32(0xff34052e), + 251: uint32(0xc5855664), + 252: uint32(0x53b02d5d), + 253: uint32(0xa99f8fa1), + 254: uint32(0x08ba4799), + 255: uint32(0x6e85076a), + }, + 1: { + 0: uint32(0x4b7a70e9), + 1: uint32(0xb5b32944), + 2: uint32(0xdb75092e), + 3: uint32(0xc4192623), + 4: uint32(0xad6ea6b0), + 5: uint32(0x49a7df7d), + 6: uint32(0x9cee60b8), + 7: uint32(0x8fedb266), + 8: uint32(0xecaa8c71), + 9: uint32(0x699a17ff), + 10: uint32(0x5664526c), + 11: uint32(0xc2b19ee1), + 12: uint32(0x193602a5), + 13: uint32(0x75094c29), + 14: uint32(0xa0591340), + 15: uint32(0xe4183a3e), + 16: uint32(0x3f54989a), + 17: uint32(0x5b429d65), + 18: uint32(0x6b8fe4d6), + 19: uint32(0x99f73fd6), + 20: uint32(0xa1d29c07), + 21: uint32(0xefe830f5), + 22: uint32(0x4d2d38e6), + 23: uint32(0xf0255dc1), + 24: uint32(0x4cdd2086), + 25: uint32(0x8470eb26), + 26: uint32(0x6382e9c6), + 27: uint32(0x021ecc5e), + 28: uint32(0x09686b3f), + 29: uint32(0x3ebaefc9), + 30: uint32(0x3c971814), + 31: uint32(0x6b6a70a1), + 32: uint32(0x687f3584), + 33: uint32(0x52a0e286), + 34: uint32(0xb79c5305), + 35: uint32(0xaa500737), + 36: uint32(0x3e07841c), + 37: uint32(0x7fdeae5c), + 38: uint32(0x8e7d44ec), + 39: uint32(0x5716f2b8), + 40: uint32(0xb03ada37), + 41: uint32(0xf0500c0d), + 42: uint32(0xf01c1f04), + 43: uint32(0x0200b3ff), + 44: uint32(0xae0cf51a), + 45: uint32(0x3cb574b2), + 46: uint32(0x25837a58), + 47: uint32(0xdc0921bd), + 48: uint32(0xd19113f9), + 49: uint32(0x7ca92ff6), + 50: uint32(0x94324773), + 51: uint32(0x22f54701), + 52: uint32(0x3ae5e581), + 53: uint32(0x37c2dadc), + 54: uint32(0xc8b57634), + 55: uint32(0x9af3dda7), + 56: uint32(0xa9446146), + 57: uint32(0x0fd0030e), + 58: uint32(0xecc8c73e), + 59: uint32(0xa4751e41), + 60: uint32(0xe238cd99), + 61: uint32(0x3bea0e2f), + 62: uint32(0x3280bba1), + 63: uint32(0x183eb331), + 64: uint32(0x4e548b38), + 65: uint32(0x4f6db908), + 66: uint32(0x6f420d03), + 67: uint32(0xf60a04bf), + 68: uint32(0x2cb81290), + 69: uint32(0x24977c79), + 70: uint32(0x5679b072), + 71: uint32(0xbcaf89af), + 72: uint32(0xde9a771f), + 73: uint32(0xd9930810), + 74: uint32(0xb38bae12), + 75: uint32(0xdccf3f2e), + 76: uint32(0x5512721f), + 77: uint32(0x2e6b7124), + 78: uint32(0x501adde6), + 79: uint32(0x9f84cd87), + 80: uint32(0x7a584718), + 81: uint32(0x7408da17), + 82: uint32(0xbc9f9abc), + 83: uint32(0xe94b7d8c), + 84: uint32(0xec7aec3a), + 85: uint32(0xdb851dfa), + 86: uint32(0x63094366), + 87: uint32(0xc464c3d2), + 88: uint32(0xef1c1847), + 89: uint32(0x3215d908), + 90: uint32(0xdd433b37), + 91: uint32(0x24c2ba16), + 92: uint32(0x12a14d43), + 93: uint32(0x2a65c451), + 94: uint32(0x50940002), + 95: uint32(0x133ae4dd), + 96: uint32(0x71dff89e), + 97: uint32(0x10314e55), + 98: uint32(0x81ac77d6), + 99: uint32(0x5f11199b), + 100: uint32(0x043556f1), + 101: uint32(0xd7a3c76b), + 102: uint32(0x3c11183b), + 103: uint32(0x5924a509), + 104: uint32(0xf28fe6ed), + 105: uint32(0x97f1fbfa), + 106: uint32(0x9ebabf2c), + 107: uint32(0x1e153c6e), + 108: uint32(0x86e34570), + 109: uint32(0xeae96fb1), + 110: uint32(0x860e5e0a), + 111: uint32(0x5a3e2ab3), + 112: uint32(0x771fe71c), + 113: uint32(0x4e3d06fa), + 114: uint32(0x2965dcb9), + 115: uint32(0x99e71d0f), + 116: uint32(0x803e89d6), + 117: uint32(0x5266c825), + 118: uint32(0x2e4cc978), + 119: uint32(0x9c10b36a), + 120: uint32(0xc6150eba), + 121: uint32(0x94e2ea78), + 122: uint32(0xa5fc3c53), + 123: uint32(0x1e0a2df4), + 124: uint32(0xf2f74ea7), + 125: uint32(0x361d2b3d), + 126: uint32(0x1939260f), + 127: uint32(0x19c27960), + 128: uint32(0x5223a708), + 129: uint32(0xf71312b6), + 130: uint32(0xebadfe6e), + 131: uint32(0xeac31f66), + 132: uint32(0xe3bc4595), + 133: uint32(0xa67bc883), + 134: uint32(0xb17f37d1), + 135: uint32(0x018cff28), + 136: uint32(0xc332ddef), + 137: uint32(0xbe6c5aa5), + 138: uint32(0x65582185), + 139: uint32(0x68ab9802), + 140: uint32(0xeecea50f), + 141: uint32(0xdb2f953b), + 142: uint32(0x2aef7dad), + 143: uint32(0x5b6e2f84), + 144: uint32(0x1521b628), + 145: uint32(0x29076170), + 146: uint32(0xecdd4775), + 147: uint32(0x619f1510), + 148: uint32(0x13cca830), + 149: uint32(0xeb61bd96), + 150: uint32(0x0334fe1e), + 151: uint32(0xaa0363cf), + 152: uint32(0xb5735c90), + 153: uint32(0x4c70a239), + 154: uint32(0xd59e9e0b), + 155: uint32(0xcbaade14), + 156: uint32(0xeecc86bc), + 157: uint32(0x60622ca7), + 158: uint32(0x9cab5cab), + 159: uint32(0xb2f3846e), + 160: uint32(0x648b1eaf), + 161: uint32(0x19bdf0ca), + 162: uint32(0xa02369b9), + 163: uint32(0x655abb50), + 164: uint32(0x40685a32), + 165: uint32(0x3c2ab4b3), + 166: uint32(0x319ee9d5), + 167: uint32(0xc021b8f7), + 168: uint32(0x9b540b19), + 169: uint32(0x875fa099), + 170: uint32(0x95f7997e), + 171: uint32(0x623d7da8), + 172: uint32(0xf837889a), + 173: uint32(0x97e32d77), + 174: uint32(0x11ed935f), + 175: uint32(0x16681281), + 176: uint32(0x0e358829), + 177: uint32(0xc7e61fd6), + 178: uint32(0x96dedfa1), + 179: uint32(0x7858ba99), + 180: uint32(0x57f584a5), + 181: uint32(0x1b227263), + 182: uint32(0x9b83c3ff), + 183: uint32(0x1ac24696), + 184: uint32(0xcdb30aeb), + 185: uint32(0x532e3054), + 186: uint32(0x8fd948e4), + 187: uint32(0x6dbc3128), + 188: uint32(0x58ebf2ef), + 189: uint32(0x34c6ffea), + 190: uint32(0xfe28ed61), + 191: uint32(0xee7c3c73), + 192: uint32(0x5d4a14d9), + 193: uint32(0xe864b7e3), + 194: uint32(0x42105d14), + 195: uint32(0x203e13e0), + 196: uint32(0x45eee2b6), + 197: uint32(0xa3aaabea), + 198: uint32(0xdb6c4f15), + 199: uint32(0xfacb4fd0), + 200: uint32(0xc742f442), + 201: uint32(0xef6abbb5), + 202: uint32(0x654f3b1d), + 203: uint32(0x41cd2105), + 204: uint32(0xd81e799e), + 205: uint32(0x86854dc7), + 206: uint32(0xe44b476a), + 207: uint32(0x3d816250), + 208: uint32(0xcf62a1f2), + 209: uint32(0x5b8d2646), + 210: uint32(0xfc8883a0), + 211: uint32(0xc1c7b6a3), + 212: uint32(0x7f1524c3), + 213: uint32(0x69cb7492), + 214: uint32(0x47848a0b), + 215: uint32(0x5692b285), + 216: uint32(0x095bbf00), + 217: uint32(0xad19489d), + 218: uint32(0x1462b174), + 219: uint32(0x23820e00), + 220: uint32(0x58428d2a), + 221: uint32(0x0c55f5ea), + 222: uint32(0x1dadf43e), + 223: uint32(0x233f7061), + 224: uint32(0x3372f092), + 225: uint32(0x8d937e41), + 226: uint32(0xd65fecf1), + 227: uint32(0x6c223bdb), + 228: uint32(0x7cde3759), + 229: uint32(0xcbee7460), + 230: uint32(0x4085f2a7), + 231: uint32(0xce77326e), + 232: uint32(0xa6078084), + 233: uint32(0x19f8509e), + 234: uint32(0xe8efd855), + 235: uint32(0x61d99735), + 236: uint32(0xa969a7aa), + 237: uint32(0xc50c06c2), + 238: uint32(0x5a04abfc), + 239: uint32(0x800bcadc), + 240: uint32(0x9e447a2e), + 241: uint32(0xc3453484), + 242: uint32(0xfdd56705), + 243: uint32(0x0e1e9ec9), + 244: uint32(0xdb73dbd3), + 245: uint32(0x105588cd), + 246: uint32(0x675fda79), + 247: uint32(0xe3674340), + 248: uint32(0xc5c43465), + 249: uint32(0x713e38d8), + 250: uint32(0x3d28f89e), + 251: uint32(0xf16dff20), + 252: uint32(0x153e21e7), + 253: uint32(0x8fb03d4a), + 254: uint32(0xe6e39f2b), + 255: uint32(0xdb83adf7), + }, + 2: { + 0: uint32(0xe93d5a68), + 1: uint32(0x948140f7), + 2: uint32(0xf64c261c), + 3: uint32(0x94692934), + 4: uint32(0x411520f7), + 5: uint32(0x7602d4f7), + 6: uint32(0xbcf46b2e), + 7: uint32(0xd4a20068), + 8: uint32(0xd4082471), + 9: uint32(0x3320f46a), + 10: uint32(0x43b7d4b7), + 11: uint32(0x500061af), + 12: uint32(0x1e39f62e), + 13: uint32(0x97244546), + 14: uint32(0x14214f74), + 15: uint32(0xbf8b8840), + 16: uint32(0x4d95fc1d), + 17: uint32(0x96b591af), + 18: uint32(0x70f4ddd3), + 19: uint32(0x66a02f45), + 20: uint32(0xbfbc09ec), + 21: uint32(0x03bd9785), + 22: uint32(0x7fac6dd0), + 23: uint32(0x31cb8504), + 24: uint32(0x96eb27b3), + 25: uint32(0x55fd3941), + 26: uint32(0xda2547e6), + 27: uint32(0xabca0a9a), + 28: uint32(0x28507825), + 29: uint32(0x530429f4), + 30: uint32(0x0a2c86da), + 31: uint32(0xe9b66dfb), + 32: uint32(0x68dc1462), + 33: uint32(0xd7486900), + 34: uint32(0x680ec0a4), + 35: uint32(0x27a18dee), + 36: uint32(0x4f3ffea2), + 37: uint32(0xe887ad8c), + 38: uint32(0xb58ce006), + 39: uint32(0x7af4d6b6), + 40: uint32(0xaace1e7c), + 41: uint32(0xd3375fec), + 42: uint32(0xce78a399), + 43: uint32(0x406b2a42), + 44: uint32(0x20fe9e35), + 45: uint32(0xd9f385b9), + 46: uint32(0xee39d7ab), + 47: uint32(0x3b124e8b), + 48: uint32(0x1dc9faf7), + 49: uint32(0x4b6d1856), + 50: uint32(0x26a36631), + 51: uint32(0xeae397b2), + 52: uint32(0x3a6efa74), + 53: uint32(0xdd5b4332), + 54: uint32(0x6841e7f7), + 55: uint32(0xca7820fb), + 56: uint32(0xfb0af54e), + 57: uint32(0xd8feb397), + 58: uint32(0x454056ac), + 59: uint32(0xba489527), + 60: uint32(0x55533a3a), + 61: uint32(0x20838d87), + 62: uint32(0xfe6ba9b7), + 63: uint32(0xd096954b), + 64: uint32(0x55a867bc), + 65: uint32(0xa1159a58), + 66: uint32(0xcca92963), + 67: uint32(0x99e1db33), + 68: uint32(0xa62a4a56), + 69: uint32(0x3f3125f9), + 70: uint32(0x5ef47e1c), + 71: uint32(0x9029317c), + 72: uint32(0xfdf8e802), + 73: uint32(0x04272f70), + 74: uint32(0x80bb155c), + 75: uint32(0x05282ce3), + 76: uint32(0x95c11548), + 77: uint32(0xe4c66d22), + 78: uint32(0x48c1133f), + 79: uint32(0xc70f86dc), + 80: uint32(0x07f9c9ee), + 81: uint32(0x41041f0f), + 82: uint32(0x404779a4), + 83: uint32(0x5d886e17), + 84: uint32(0x325f51eb), + 85: uint32(0xd59bc0d1), + 86: uint32(0xf2bcc18f), + 87: uint32(0x41113564), + 88: uint32(0x257b7834), + 89: uint32(0x602a9c60), + 90: uint32(0xdff8e8a3), + 91: uint32(0x1f636c1b), + 92: uint32(0x0e12b4c2), + 93: uint32(0x02e1329e), + 94: uint32(0xaf664fd1), + 95: uint32(0xcad18115), + 96: uint32(0x6b2395e0), + 97: uint32(0x333e92e1), + 98: uint32(0x3b240b62), + 99: uint32(0xeebeb922), + 100: uint32(0x85b2a20e), + 101: uint32(0xe6ba0d99), + 102: uint32(0xde720c8c), + 103: uint32(0x2da2f728), + 104: uint32(0xd0127845), + 105: uint32(0x95b794fd), + 106: uint32(0x647d0862), + 107: uint32(0xe7ccf5f0), + 108: uint32(0x5449a36f), + 109: uint32(0x877d48fa), + 110: uint32(0xc39dfd27), + 111: uint32(0xf33e8d1e), + 112: uint32(0x0a476341), + 113: uint32(0x992eff74), + 114: uint32(0x3a6f6eab), + 115: uint32(0xf4f8fd37), + 116: uint32(0xa812dc60), + 117: uint32(0xa1ebddf8), + 118: uint32(0x991be14c), + 119: uint32(0xdb6e6b0d), + 120: uint32(0xc67b5510), + 121: uint32(0x6d672c37), + 122: uint32(0x2765d43b), + 123: uint32(0xdcd0e804), + 124: uint32(0xf1290dc7), + 125: uint32(0xcc00ffa3), + 126: uint32(0xb5390f92), + 127: uint32(0x690fed0b), + 128: uint32(0x667b9ffb), + 129: uint32(0xcedb7d9c), + 130: uint32(0xa091cf0b), + 131: uint32(0xd9155ea3), + 132: uint32(0xbb132f88), + 133: uint32(0x515bad24), + 134: uint32(0x7b9479bf), + 135: uint32(0x763bd6eb), + 136: uint32(0x37392eb3), + 137: uint32(0xcc115979), + 138: uint32(0x8026e297), + 139: uint32(0xf42e312d), + 140: uint32(0x6842ada7), + 141: uint32(0xc66a2b3b), + 142: uint32(0x12754ccc), + 143: uint32(0x782ef11c), + 144: uint32(0x6a124237), + 145: uint32(0xb79251e7), + 146: uint32(0x06a1bbe6), + 147: uint32(0x4bfb6350), + 148: uint32(0x1a6b1018), + 149: uint32(0x11caedfa), + 150: uint32(0x3d25bdd8), + 151: uint32(0xe2e1c3c9), + 152: uint32(0x44421659), + 153: uint32(0x0a121386), + 154: uint32(0xd90cec6e), + 155: uint32(0xd5abea2a), + 156: uint32(0x64af674e), + 157: uint32(0xda86a85f), + 158: uint32(0xbebfe988), + 159: uint32(0x64e4c3fe), + 160: uint32(0x9dbc8057), + 161: uint32(0xf0f7c086), + 162: uint32(0x60787bf8), + 163: uint32(0x6003604d), + 164: uint32(0xd1fd8346), + 165: uint32(0xf6381fb0), + 166: uint32(0x7745ae04), + 167: uint32(0xd736fccc), + 168: uint32(0x83426b33), + 169: uint32(0xf01eab71), + 170: uint32(0xb0804187), + 171: uint32(0x3c005e5f), + 172: uint32(0x77a057be), + 173: uint32(0xbde8ae24), + 174: uint32(0x55464299), + 175: uint32(0xbf582e61), + 176: uint32(0x4e58f48f), + 177: uint32(0xf2ddfda2), + 178: uint32(0xf474ef38), + 179: uint32(0x8789bdc2), + 180: uint32(0x5366f9c3), + 181: uint32(0xc8b38e74), + 182: uint32(0xb475f255), + 183: uint32(0x46fcd9b9), + 184: uint32(0x7aeb2661), + 185: uint32(0x8b1ddf84), + 186: uint32(0x846a0e79), + 187: uint32(0x915f95e2), + 188: uint32(0x466e598e), + 189: uint32(0x20b45770), + 190: uint32(0x8cd55591), + 191: uint32(0xc902de4c), + 192: uint32(0xb90bace1), + 193: uint32(0xbb8205d0), + 194: uint32(0x11a86248), + 195: uint32(0x7574a99e), + 196: uint32(0xb77f19b6), + 197: uint32(0xe0a9dc09), + 198: uint32(0x662d09a1), + 199: uint32(0xc4324633), + 200: uint32(0xe85a1f02), + 201: uint32(0x09f0be8c), + 202: uint32(0x4a99a025), + 203: uint32(0x1d6efe10), + 204: uint32(0x1ab93d1d), + 205: uint32(0x0ba5a4df), + 206: uint32(0xa186f20f), + 207: uint32(0x2868f169), + 208: uint32(0xdcb7da83), + 209: uint32(0x573906fe), + 210: uint32(0xa1e2ce9b), + 211: uint32(0x4fcd7f52), + 212: uint32(0x50115e01), + 213: uint32(0xa70683fa), + 214: uint32(0xa002b5c4), + 215: uint32(0x0de6d027), + 216: uint32(0x9af88c27), + 217: uint32(0x773f8641), + 218: uint32(0xc3604c06), + 219: uint32(0x61a806b5), + 220: uint32(0xf0177a28), + 221: uint32(0xc0f586e0), + 222: uint32(0x006058aa), + 223: uint32(0x30dc7d62), + 224: uint32(0x11e69ed7), + 225: uint32(0x2338ea63), + 226: uint32(0x53c2dd94), + 227: uint32(0xc2c21634), + 228: uint32(0xbbcbee56), + 229: uint32(0x90bcb6de), + 230: uint32(0xebfc7da1), + 231: uint32(0xce591d76), + 232: uint32(0x6f05e409), + 233: uint32(0x4b7c0188), + 234: uint32(0x39720a3d), + 235: uint32(0x7c927c24), + 236: uint32(0x86e3725f), + 237: uint32(0x724d9db9), + 238: uint32(0x1ac15bb4), + 239: uint32(0xd39eb8fc), + 240: uint32(0xed545578), + 241: uint32(0x08fca5b5), + 242: uint32(0xd83d7cd3), + 243: uint32(0x4dad0fc4), + 244: uint32(0x1e50ef5e), + 245: uint32(0xb161e6f8), + 246: uint32(0xa28514d9), + 247: uint32(0x6c51133c), + 248: uint32(0x6fd5c7e7), + 249: uint32(0x56e14ec4), + 250: uint32(0x362abfce), + 251: uint32(0xddc6c837), + 252: uint32(0xd79a3234), + 253: uint32(0x92638212), + 254: uint32(0x670efa8e), + 255: uint32(0x406000e0), + }, + 3: { + 0: uint32(0x3a39ce37), + 1: uint32(0xd3faf5cf), + 2: uint32(0xabc27737), + 3: uint32(0x5ac52d1b), + 4: uint32(0x5cb0679e), + 5: uint32(0x4fa33742), + 6: uint32(0xd3822740), + 7: uint32(0x99bc9bbe), + 8: uint32(0xd5118e9d), + 9: uint32(0xbf0f7315), + 10: uint32(0xd62d1c7e), + 11: uint32(0xc700c47b), + 12: uint32(0xb78c1b6b), + 13: uint32(0x21a19045), + 14: uint32(0xb26eb1be), + 15: uint32(0x6a366eb4), + 16: uint32(0x5748ab2f), + 17: uint32(0xbc946e79), + 18: uint32(0xc6a376d2), + 19: uint32(0x6549c2c8), + 20: uint32(0x530ff8ee), + 21: uint32(0x468dde7d), + 22: uint32(0xd5730a1d), + 23: uint32(0x4cd04dc6), + 24: uint32(0x2939bbdb), + 25: uint32(0xa9ba4650), + 26: uint32(0xac9526e8), + 27: uint32(0xbe5ee304), + 28: uint32(0xa1fad5f0), + 29: uint32(0x6a2d519a), + 30: uint32(0x63ef8ce2), + 31: uint32(0x9a86ee22), + 32: uint32(0xc089c2b8), + 33: uint32(0x43242ef6), + 34: uint32(0xa51e03aa), + 35: uint32(0x9cf2d0a4), + 36: uint32(0x83c061ba), + 37: uint32(0x9be96a4d), + 38: uint32(0x8fe51550), + 39: uint32(0xba645bd6), + 40: uint32(0x2826a2f9), + 41: uint32(0xa73a3ae1), + 42: uint32(0x4ba99586), + 43: uint32(0xef5562e9), + 44: uint32(0xc72fefd3), + 45: uint32(0xf752f7da), + 46: uint32(0x3f046f69), + 47: uint32(0x77fa0a59), + 48: uint32(0x80e4a915), + 49: uint32(0x87b08601), + 50: uint32(0x9b09e6ad), + 51: uint32(0x3b3ee593), + 52: uint32(0xe990fd5a), + 53: uint32(0x9e34d797), + 54: uint32(0x2cf0b7d9), + 55: uint32(0x022b8b51), + 56: uint32(0x96d5ac3a), + 57: uint32(0x017da67d), + 58: uint32(0xd1cf3ed6), + 59: uint32(0x7c7d2d28), + 60: uint32(0x1f9f25cf), + 61: uint32(0xadf2b89b), + 62: uint32(0x5ad6b472), + 63: uint32(0x5a88f54c), + 64: uint32(0xe029ac71), + 65: uint32(0xe019a5e6), + 66: uint32(0x47b0acfd), + 67: uint32(0xed93fa9b), + 68: uint32(0xe8d3c48d), + 69: uint32(0x283b57cc), + 70: uint32(0xf8d56629), + 71: uint32(0x79132e28), + 72: uint32(0x785f0191), + 73: uint32(0xed756055), + 74: uint32(0xf7960e44), + 75: uint32(0xe3d35e8c), + 76: uint32(0x15056dd4), + 77: uint32(0x88f46dba), + 78: uint32(0x03a16125), + 79: uint32(0x0564f0bd), + 80: uint32(0xc3eb9e15), + 81: uint32(0x3c9057a2), + 82: uint32(0x97271aec), + 83: uint32(0xa93a072a), + 84: uint32(0x1b3f6d9b), + 85: uint32(0x1e6321f5), + 86: uint32(0xf59c66fb), + 87: uint32(0x26dcf319), + 88: uint32(0x7533d928), + 89: uint32(0xb155fdf5), + 90: uint32(0x03563482), + 91: uint32(0x8aba3cbb), + 92: uint32(0x28517711), + 93: uint32(0xc20ad9f8), + 94: uint32(0xabcc5167), + 95: uint32(0xccad925f), + 96: uint32(0x4de81751), + 97: uint32(0x3830dc8e), + 98: uint32(0x379d5862), + 99: uint32(0x9320f991), + 100: uint32(0xea7a90c2), + 101: uint32(0xfb3e7bce), + 102: uint32(0x5121ce64), + 103: uint32(0x774fbe32), + 104: uint32(0xa8b6e37e), + 105: uint32(0xc3293d46), + 106: uint32(0x48de5369), + 107: uint32(0x6413e680), + 108: uint32(0xa2ae0810), + 109: uint32(0xdd6db224), + 110: uint32(0x69852dfd), + 111: uint32(0x09072166), + 112: uint32(0xb39a460a), + 113: uint32(0x6445c0dd), + 114: uint32(0x586cdecf), + 115: uint32(0x1c20c8ae), + 116: uint32(0x5bbef7dd), + 117: uint32(0x1b588d40), + 118: uint32(0xccd2017f), + 119: uint32(0x6bb4e3bb), + 120: uint32(0xdda26a7e), + 121: uint32(0x3a59ff45), + 122: uint32(0x3e350a44), + 123: uint32(0xbcb4cdd5), + 124: uint32(0x72eacea8), + 125: uint32(0xfa6484bb), + 126: uint32(0x8d6612ae), + 127: uint32(0xbf3c6f47), + 128: uint32(0xd29be463), + 129: uint32(0x542f5d9e), + 130: uint32(0xaec2771b), + 131: uint32(0xf64e6370), + 132: uint32(0x740e0d8d), + 133: uint32(0xe75b1357), + 134: uint32(0xf8721671), + 135: uint32(0xaf537d5d), + 136: uint32(0x4040cb08), + 137: uint32(0x4eb4e2cc), + 138: uint32(0x34d2466a), + 139: uint32(0x0115af84), + 140: uint32(0xe1b00428), + 141: uint32(0x95983a1d), + 142: uint32(0x06b89fb4), + 143: uint32(0xce6ea048), + 144: uint32(0x6f3f3b82), + 145: uint32(0x3520ab82), + 146: uint32(0x011a1d4b), + 147: uint32(0x277227f8), + 148: uint32(0x611560b1), + 149: uint32(0xe7933fdc), + 150: uint32(0xbb3a792b), + 151: uint32(0x344525bd), + 152: uint32(0xa08839e1), + 153: uint32(0x51ce794b), + 154: uint32(0x2f32c9b7), + 155: uint32(0xa01fbac9), + 156: uint32(0xe01cc87e), + 157: uint32(0xbcc7d1f6), + 158: uint32(0xcf0111c3), + 159: uint32(0xa1e8aac7), + 160: uint32(0x1a908749), + 161: uint32(0xd44fbd9a), + 162: uint32(0xd0dadecb), + 163: uint32(0xd50ada38), + 164: uint32(0x0339c32a), + 165: uint32(0xc6913667), + 166: uint32(0x8df9317c), + 167: uint32(0xe0b12b4f), + 168: uint32(0xf79e59b7), + 169: uint32(0x43f5bb3a), + 170: uint32(0xf2d519ff), + 171: uint32(0x27d9459c), + 172: uint32(0xbf97222c), + 173: uint32(0x15e6fc2a), + 174: uint32(0x0f91fc71), + 175: uint32(0x9b941525), + 176: uint32(0xfae59361), + 177: uint32(0xceb69ceb), + 178: uint32(0xc2a86459), + 179: uint32(0x12baa8d1), + 180: uint32(0xb6c1075e), + 181: uint32(0xe3056a0c), + 182: uint32(0x10d25065), + 183: uint32(0xcb03a442), + 184: uint32(0xe0ec6e0e), + 185: uint32(0x1698db3b), + 186: uint32(0x4c98a0be), + 187: uint32(0x3278e964), + 188: uint32(0x9f1f9532), + 189: uint32(0xe0d392df), + 190: uint32(0xd3a0342b), + 191: uint32(0x8971f21e), + 192: uint32(0x1b0a7441), + 193: uint32(0x4ba3348c), + 194: uint32(0xc5be7120), + 195: uint32(0xc37632d8), + 196: uint32(0xdf359f8d), + 197: uint32(0x9b992f2e), + 198: uint32(0xe60b6f47), + 199: uint32(0x0fe3f11d), + 200: uint32(0xe54cda54), + 201: uint32(0x1edad891), + 202: uint32(0xce6279cf), + 203: uint32(0xcd3e7e6f), + 204: uint32(0x1618b166), + 205: uint32(0xfd2c1d05), + 206: uint32(0x848fd2c5), + 207: uint32(0xf6fb2299), + 208: uint32(0xf523f357), + 209: uint32(0xa6327623), + 210: uint32(0x93a83531), + 211: uint32(0x56cccd02), + 212: uint32(0xacf08162), + 213: uint32(0x5a75ebb5), + 214: uint32(0x6e163697), + 215: uint32(0x88d273cc), + 216: uint32(0xde966292), + 217: uint32(0x81b949d0), + 218: uint32(0x4c50901b), + 219: uint32(0x71c65614), + 220: uint32(0xe6c6c7bd), + 221: uint32(0x327a140a), + 222: uint32(0x45e1d006), + 223: uint32(0xc3f27b9a), + 224: uint32(0xc9aa53fd), + 225: uint32(0x62a80f00), + 226: uint32(0xbb25bfe2), + 227: uint32(0x35bdd2f6), + 228: uint32(0x71126905), + 229: uint32(0xb2040222), + 230: uint32(0xb6cbcf7c), + 231: uint32(0xcd769c2b), + 232: uint32(0x53113ec0), + 233: uint32(0x1640e3d3), + 234: uint32(0x38abbd60), + 235: uint32(0x2547adf0), + 236: uint32(0xba38209c), + 237: uint32(0xf746ce76), + 238: uint32(0x77afa1c5), + 239: uint32(0x20756060), + 240: uint32(0x85cbfe4e), + 241: uint32(0x8ae88dd8), + 242: uint32(0x7aaaf9b0), + 243: uint32(0x4cf9aa7e), + 244: uint32(0x1948c25c), + 245: uint32(0x02fb8a8c), + 246: uint32(0x01c36ae4), + 247: uint32(0xd6ebe1f9), + 248: uint32(0x90d4f869), + 249: uint32(0xa65cdea0), + 250: uint32(0x3f09252d), + 251: uint32(0xc208e69f), + 252: uint32(0xb74e6132), + 253: uint32(0xce77e25b), + 254: uint32(0x578fdfe3), + 255: uint32(0x3ac372e6), + }, + }, +})) + +var _BF_itoa64 = [65]uint8{'.', '/', '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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +var _BF_atoi64 = [96]uint8{ + 0: uint8(64), + 1: uint8(64), + 2: uint8(64), + 3: uint8(64), + 4: uint8(64), + 5: uint8(64), + 6: uint8(64), + 7: uint8(64), + 8: uint8(64), + 9: uint8(64), + 10: uint8(64), + 11: uint8(64), + 12: uint8(64), + 13: uint8(64), + 15: uint8(1), + 16: uint8(54), + 17: uint8(55), + 18: uint8(56), + 19: uint8(57), + 20: uint8(58), + 21: uint8(59), + 22: uint8(60), + 23: uint8(61), + 24: uint8(62), + 25: uint8(63), + 26: uint8(64), + 27: uint8(64), + 28: uint8(64), + 29: uint8(64), + 30: uint8(64), + 31: uint8(64), + 32: uint8(64), + 33: uint8(2), + 34: uint8(3), + 35: uint8(4), + 36: uint8(5), + 37: uint8(6), + 38: uint8(7), + 39: uint8(8), + 40: uint8(9), + 41: uint8(10), + 42: uint8(11), + 43: uint8(12), + 44: uint8(13), + 45: uint8(14), + 46: uint8(15), + 47: uint8(16), + 48: uint8(17), + 49: uint8(18), + 50: uint8(19), + 51: uint8(20), + 52: uint8(21), + 53: uint8(22), + 54: uint8(23), + 55: uint8(24), + 56: uint8(25), + 57: uint8(26), + 58: uint8(27), + 59: uint8(64), + 60: uint8(64), + 61: uint8(64), + 62: uint8(64), + 63: uint8(64), + 64: uint8(64), + 65: uint8(28), + 66: uint8(29), + 67: uint8(30), + 68: uint8(31), + 69: uint8(32), + 70: uint8(33), + 71: uint8(34), + 72: uint8(35), + 73: uint8(36), + 74: uint8(37), + 75: uint8(38), + 76: uint8(39), + 77: uint8(40), + 78: uint8(41), + 79: uint8(42), + 80: uint8(43), + 81: uint8(44), + 82: uint8(45), + 83: uint8(46), + 84: uint8(47), + 85: uint8(48), + 86: uint8(49), + 87: uint8(50), + 88: uint8(51), + 89: uint8(52), + 90: uint8(53), + 91: uint8(64), + 92: uint8(64), + 93: uint8(64), + 94: uint8(64), + 95: uint8(64), +} + +func _BF_decode(tls *TLS, dst uintptr, src uintptr, size int32) (r int32) { + var c1, c2, c3, c4, tmp uint32 + var dptr, end, sptr, v1, v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, c2, c3, c4, dptr, end, sptr, tmp, v1, v2, v3, v4, v5, v6, v7 + dptr = dst + end = dptr + uintptr(size) + sptr = src + for cond := true; cond; cond = dptr < end { + v1 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v1))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c1 = tmp + v2 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v2))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c2 = tmp + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(c1<>int32(4)) + if dptr >= end { + break + } + v4 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v4))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c3 = tmp + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(c2&uint32(0x0F)<>int32(2)) + if dptr >= end { + break + } + v6 = sptr + sptr++ + tmp = uint32(*(*uint8)(unsafe.Pointer(v6))) + tmp -= uint32(0x20) + if tmp >= uint32(0x60) { + return -int32(1) + } + tmp = uint32(_BF_atoi64[tmp]) + if tmp > uint32(63) { + return -int32(1) + } + c4 = tmp + v7 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(c3&uint32(0x03)<>int32(2)] + c1 = c1 & uint32(0x03) << int32(4) + if sptr >= end { + v3 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v3)) = _BF_itoa64[c1] + break + } + v4 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v4))) + c1 |= c2 >> int32(4) + v5 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v5)) = _BF_itoa64[c1] + c1 = c2 & uint32(0x0f) << int32(2) + if sptr >= end { + v6 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v6)) = _BF_itoa64[c1] + break + } + v7 = sptr + sptr++ + c2 = uint32(*(*uint8)(unsafe.Pointer(v7))) + c1 |= c2 >> int32(6) + v8 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v8)) = _BF_itoa64[c1] + v9 = dptr + dptr++ + *(*uint8)(unsafe.Pointer(v9)) = _BF_itoa64[c2&uint32(0x3f)] + } +} + +func _BF_swap(tls *TLS, x uintptr, count int32) { + var tmp TBF_word + var v1, v2 int32 + var v4 uintptr + _, _, _, _ = tmp, v1, v2, v4 + v1 = int32(1) + if *(*uint8)(unsafe.Pointer(&v1)) != 0 { + for { + tmp = *(*TBF_word)(unsafe.Pointer(x)) + tmp = tmp<>Int32FromInt32(16) + v4 = x + x += 4 + *(*TBF_word)(unsafe.Pointer(v4)) = tmp&uint32(0x00FF00FF)<>Int32FromInt32(8)&uint32(0x00FF00FF) + goto _3 + _3: + ; + count-- + v2 = count + if !(v2 != 0) { + break + } + } + } +} + +func _BF_encrypt(tls *TLS, ctx uintptr, L TBF_word, R TBF_word, start uintptr, end uintptr) (r TBF_word) { + var i int32 + var ptr, v2, v3 uintptr + var tmp1, tmp2, tmp3, tmp4 TBF_word + _, _, _, _, _, _, _, _ = i, ptr, tmp1, tmp2, tmp3, tmp4, v2, v3 + ptr = start + for cond := true; cond; cond = ptr < end { + L ^= *(*TBF_word)(unsafe.Pointer(ctx)) + i = 0 + for { + if !(i < int32(16)) { + break + } + tmp1 = L & uint32(0xFF) + tmp2 = L >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = L >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = L >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + R ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1))*4)) + tmp3 += tmp1 + R ^= tmp3 + tmp1 = R & uint32(0xFF) + tmp2 = R >> int32(8) + tmp2 &= uint32(0xFF) + tmp3 = R >> int32(16) + tmp3 &= uint32(0xFF) + tmp4 = R >> int32(24) + tmp1 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 3*1024 + uintptr(tmp1)*4)) + tmp2 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 2*1024 + uintptr(tmp2)*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(ctx + 72 + 1*1024 + uintptr(tmp3)*4)) + tmp3 += *(*TBF_word)(unsafe.Pointer(ctx + 72 + uintptr(tmp4)*4)) + tmp3 ^= tmp2 + L ^= *(*TBF_word)(unsafe.Pointer(ctx + uintptr(i+int32(1)+int32(1))*4)) + tmp3 += tmp1 + L ^= tmp3 + goto _1 + _1: + ; + i += int32(2) + } + tmp4 = R + R = L + L = tmp4 ^ *(*TBF_word)(unsafe.Pointer(ctx + uintptr(Int32FromInt32(BF_N)+Int32FromInt32(1))*4)) + v2 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v2)) = L + v3 = ptr + ptr += 4 + *(*TBF_word)(unsafe.Pointer(v3)) = R + } + return L +} + +func _BF_set_key(tls *TLS, key uintptr, expanded uintptr, initial uintptr, flags uint8) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bug, i, j uint32 + var diff, safety, sign, v1, v3 TBF_word + var ptr uintptr + var _ /* tmp at bp+0 */ [2]TBF_word + _, _, _, _, _, _, _, _, _ = bug, diff, i, j, ptr, safety, sign, v1, v3 + ptr = key + /* + * There was a sign extension bug in older revisions of this function. While + * we would have liked to simply fix the bug and move on, we have to provide + * a backwards compatibility feature (essentially the bug) for some systems and + * a safety measure for some others. The latter is needed because for certain + * multiple inputs to the buggy algorithm there exist easily found inputs to + * the correct algorithm that produce the same hash. Thus, we optionally + * deviate from the correct algorithm just enough to avoid such collisions. + * While the bug itself affected the majority of passwords containing + * characters with the 8th bit set (although only a percentage of those in a + * collision-producing way), the anti-collision safety measure affects + * only a subset of passwords containing the '\xff' character (not even all of + * those passwords, just some of them). This character is not found in valid + * UTF-8 sequences and is rarely used in popular 8-bit character encodings. + * Thus, the safety measure is unlikely to cause much annoyance, and is a + * reasonable tradeoff to use when authenticating against existing hashes that + * are not reliably known to have been computed with the correct algorithm. + * + * We use an approach that tries to minimize side-channel leaks of password + * information - that is, we mostly use fixed-cost bitwise operations instead + * of branches or table lookups. (One conditional branch based on password + * length remains. It is not part of the bug aftermath, though, and is + * difficult and possibly unreasonable to avoid given the use of C strings by + * the caller, which results in similar timing leaks anyway.) + * + * For actual implementation, we set an array index in the variable "bug" + * (0 means no bug, 1 means sign extension bug emulation) and a flag in the + * variable "safety" (bit 16 is set when the safety measure is requested). + * Valid combinations of settings are: + * + * Prefix "$2a$": bug = 0, safety = 0x10000 + * Prefix "$2b$": bug = 0, safety = 0 + * Prefix "$2x$": bug = 1, safety = 0 + * Prefix "$2y$": bug = 0, safety = 0 + */ + bug = uint32(int32(flags) & int32(1)) + safety = uint32(flags) & uint32(2) << int32(15) + v1 = Uint32FromInt32(0) + diff = v1 + sign = v1 + i = uint32(0) + for { + if !(i < uint32(Int32FromInt32(BF_N)+Int32FromInt32(2))) { + break + } + v3 = Uint32FromInt32(0) + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] = v3 + (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] = v3 + j = uint32(0) + for { + if !(j < uint32(4)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp)) |= uint32(*(*uint8)(unsafe.Pointer(ptr))) /* correct */ + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) <<= uint32(8) + *(*TBF_word)(unsafe.Pointer(bp + 1*4)) |= uint32(int8(*(*uint8)(unsafe.Pointer(ptr)))) /* bug */ + /* + * Sign extension in the first char has no effect - nothing to overwrite yet, + * and those extra 24 bits will be fully shifted out of the 32-bit word. For + * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign + * extension in tmp[1] occurs. Once this flag is set, it remains set. + */ + if j != 0 { + sign |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] & uint32(0x80) + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + ptr = key + } else { + ptr++ + } + goto _4 + _4: + ; + j++ + } + diff |= (*(*[2]TBF_word)(unsafe.Pointer(bp)))[0] ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[int32(1)] /* Non-zero on any differences */ + *(*TBF_word)(unsafe.Pointer(expanded + uintptr(i)*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + *(*TBF_word)(unsafe.Pointer(initial + uintptr(i)*4)) = *(*TBF_word)(unsafe.Pointer(uintptr(unsafe.Pointer(&_BF_init_state)) + uintptr(i)*4)) ^ (*(*[2]TBF_word)(unsafe.Pointer(bp)))[bug] + goto _2 + _2: + ; + i++ + } + /* + * At this point, "diff" is zero iff the correct and buggy algorithms produced + * exactly the same result. If so and if "sign" is non-zero, which indicates + * that there was a non-benign sign extension, this means that we have a + * collision between the correctly computed hash for this password and a set of + * passwords that could be supplied to the buggy algorithm. Our safety measure + * is meant to protect from such many-buggy to one-correct collisions, by + * deviating from the correct algorithm in such cases. Let's check for this. + */ + diff |= diff >> int32(16) /* still zero iff exact match */ + diff &= uint32(0xffff) /* ditto */ + diff += uint32(0xffff) /* bit 16 set iff "diff" was non-zero (on non-match) */ + sign <<= uint32(9) /* move the non-benign sign extension flag to bit 16 */ + sign &= ^diff & safety /* action needed? */ + /* + * If we have determined that we need to deviate from the correct algorithm, + * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but + * let's stick to it now. It came out of the approach we used above, and it's + * not any worse than any other choice we could make.) + * + * It is crucial that we don't do the same to the expanded key used in the main + * Eksblowfish loop. By doing it to only one of these two, we deviate from a + * state that could be directly specified by a password to the buggy algorithm + * (and to the fully correct one as well, but that's a side-effect). + */ + *(*TBF_word)(unsafe.Pointer(initial)) ^= sign +} + +var _flags_by_subtype = [26]uint8{ + 0: uint8(2), + 1: uint8(4), + 23: uint8(1), + 24: uint8(4), +} + +func _BF_crypt(tls *TLS, key uintptr, setting uintptr, output uintptr, min TBF_word) (r uintptr) { + bp := tls.Alloc(4272) + defer tls.Free(4272) + var L, L1, R, count, tmp1, tmp2, tmp3, tmp4, v1, v6 TBF_word + var done, i int32 + var ptr uintptr + var _ /* LR at bp+4264 */ [2]TBF_word + var _ /* data at bp+0 */ struct { + Fctx TBF_ctx + Fexpanded_key TBF_key + Fbinary struct { + Foutput [0][6]TBF_word + Fsalt [4]TBF_word + F__ccgo_pad2 [8]byte + } + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = L, L1, R, count, done, i, ptr, tmp1, tmp2, tmp3, tmp4, v1, v6 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('$') || int32(*(*uint8)(unsafe.Pointer(setting + 1))) != int32('2') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')) > uint32(25) || !(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')] != 0) || int32(*(*uint8)(unsafe.Pointer(setting + 3))) != int32('$') || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0')) > uint32(1) || uint32(int32(*(*uint8)(unsafe.Pointer(setting + 5)))-int32('0')) > uint32(9) || int32(*(*uint8)(unsafe.Pointer(setting + 6))) != int32('$') { + return UintptrFromInt32(0) + } + count = Uint32FromInt32(1) << ((int32(*(*uint8)(unsafe.Pointer(setting + 4)))-int32('0'))*int32(10) + (int32(*(*uint8)(unsafe.Pointer(setting + 5))) - int32('0'))) + if count < min || _BF_decode(tls, bp+4240, setting+7, int32(16)) != 0 { + return UintptrFromInt32(0) + } + _BF_swap(tls, bp+4240, int32(4)) + _BF_set_key(tls, key, bp+4168, bp, _flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + Xmemcpy(tls, bp+72, uintptr(unsafe.Pointer(&_BF_init_state))+72, uint64(4096)) + L = uint32(0) + R = uint32(0) + ptr = bp + for cond := true; cond; cond = int32(1) != 0 { + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + if ptr >= bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4 { + break + } + L = _BF_encrypt(tls, bp, L^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)), R^*(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)), ptr, ptr) + R = *(*TBF_word)(unsafe.Pointer(ptr + UintptrFromInt32(1)*4)) + ptr += uintptr(2) * 4 + } + for { + i = 0 + for { + if !(i < Int32FromInt32(BF_N)+Int32FromInt32(2)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i)*4)) + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= *(*TBF_word)(unsafe.Pointer(bp + 4168 + uintptr(i+int32(1))*4)) + goto _3 + _3: + ; + i += int32(2) + } + done = 0 + for cond := true; cond; cond = int32(1) != 0 { + _BF_encrypt(tls, bp, uint32(0), uint32(0), bp, bp+uintptr(Int32FromInt32(BF_N)+Int32FromInt32(2)+Int32FromInt32(4)*Int32FromInt32(0x100))*4) + if done != 0 { + break + } + done = int32(1) + tmp1 = *(*TBF_word)(unsafe.Pointer(bp + 4240)) + tmp2 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 1*4)) + tmp3 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 2*4)) + tmp4 = *(*TBF_word)(unsafe.Pointer(bp + 4240 + 3*4)) + i = 0 + for { + if !(i < int32(BF_N)) { + break + } + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i)*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(1))*4)) ^= tmp2 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(2))*4)) ^= tmp3 + *(*TBF_word)(unsafe.Pointer(bp + uintptr(i+int32(3))*4)) ^= tmp4 + goto _4 + _4: + ; + i += int32(4) + } + *(*TBF_word)(unsafe.Pointer(bp + 16*4)) ^= tmp1 + *(*TBF_word)(unsafe.Pointer(bp + 17*4)) ^= tmp2 + } + goto _2 + _2: + ; + count-- + v1 = count + if !(v1 != 0) { + break + } + } + i = 0 + for { + if !(i < int32(6)) { + break + } + L1 = _BF_magic_w[i] + (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] = _BF_magic_w[i+int32(1)] + count = uint32(64) + for { + L1 = _BF_encrypt(tls, bp, L1, (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)], bp+4264, bp+4264) + goto _7 + _7: + ; + count-- + v6 = count + if !(v6 != 0) { + break + } + } + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i)*4)) = L1 + *(*TBF_word)(unsafe.Pointer(bp + 4240 + uintptr(i+int32(1))*4)) = (*(*[2]TBF_word)(unsafe.Pointer(bp + 4264)))[int32(1)] + goto _5 + _5: + ; + i += int32(2) + } + Xmemcpy(tls, output, setting, uint64(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1))) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))) = _BF_itoa64[int32(_BF_atoi64[int32(*(*uint8)(unsafe.Pointer(setting + uintptr(Int32FromInt32(7)+Int32FromInt32(22)-Int32FromInt32(1)))))-int32(0x20)])&int32(0x30)] + /* This has to be bug-compatible with the original implementation, so + * only encode 23 of the 24 bytes. :-) */ + _BF_swap(tls, bp+4240, int32(6)) + _BF_encode(tls, output+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), bp+4240, int32(23)) + *(*uint8)(unsafe.Pointer(output + uintptr(Int32FromInt32(7)+Int32FromInt32(22)+Int32FromInt32(31)))) = uint8('\000') + return output +} + +// C documentation +// +// /* +// * Please preserve the runtime self-test. It serves two purposes at once: +// * +// * 1. We really can't afford the risk of producing incompatible hashes e.g. +// * when there's something like gcc bug 26587 again, whereas an application or +// * library integrating this code might not also integrate our external tests or +// * it might not run them after every build. Even if it does, the miscompile +// * might only occur on the production build, but not on a testing build (such +// * as because of different optimization settings). It is painful to recover +// * from incorrectly-computed hashes - merely fixing whatever broke is not +// * enough. Thus, a proactive measure like this self-test is needed. +// * +// * 2. We don't want to leave sensitive data from our actual password hash +// * computation on the stack or in registers. Previous revisions of the code +// * would do explicit cleanups, but simply running the self-test after hash +// * computation is more reliable. +// * +// * The performance cost of this quick self-test is around 0.6% at the "$2a$08" +// * setting. +// */ +func X__crypt_blowfish(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(384) + defer tls.Free(384) + var flags uint32 + var k, p, retval, test_hash, test_key, test_setting uintptr + var ok int32 + var _ /* ae at bp+96 */ TBF_key + var _ /* ai at bp+168 */ TBF_key + var _ /* buf at bp+0 */ struct { + Fs [30]uint8 + Fo [63]uint8 + } + var _ /* ye at bp+240 */ TBF_key + var _ /* yi at bp+312 */ TBF_key + _, _, _, _, _, _, _, _ = flags, k, ok, p, retval, test_hash, test_key, test_setting + test_key = __ccgo_ts + 18 + test_setting = __ccgo_ts + 28 + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + /* Hash the supplied password */ + retval = _BF_crypt(tls, key, setting, output, uint32(16)) + /* + * Do a quick self-test. It is important that we make both calls to BF_crypt() + * from the same scope such that they likely use the same stack locations, + * which makes the second call overwrite the first call's sensitive data on the + * stack and makes it more likely that any alignment related issues would be + * detected by the self-test. + */ + Xmemcpy(tls, bp, test_setting, uint64(30)) + if retval != 0 { + flags = uint32(_flags_by_subtype[int32(*(*uint8)(unsafe.Pointer(setting + 2)))-int32('a')]) + test_hash = uintptr(unsafe.Pointer(&_test_hashes)) + uintptr(flags&uint32(1))*34 + *(*uint8)(unsafe.Pointer(bp + 2)) = *(*uint8)(unsafe.Pointer(setting + 2)) + } + Xmemset(tls, bp+30, int32(0x55), uint64(63)) + *(*uint8)(unsafe.Pointer(bp + 30 + uintptr(Uint64FromInt64(63)-Uint64FromInt32(1)))) = uint8(0) + p = _BF_crypt(tls, test_key, bp, bp+30, uint32(1)) + ok = BoolInt32(p == bp+30 && !(Xmemcmp(tls, p, bp, uint64(Int32FromInt32(7)+Int32FromInt32(22))) != 0) && !(Xmemcmp(tls, p+uintptr(Int32FromInt32(7)+Int32FromInt32(22)), test_hash, uint64(Int32FromInt32(31)+Int32FromInt32(1)+Int32FromInt32(1)+Int32FromInt32(1))) != 0)) + k = __ccgo_ts + 58 + _BF_set_key(tls, k, bp+96, bp+168, uint8(2)) /* $2a$ */ + _BF_set_key(tls, k, bp+240, bp+312, uint8(4)) /* $2y$ */ + *(*TBF_word)(unsafe.Pointer(bp + 168)) ^= uint32(0x10000) /* undo the safety (for comparison) */ + ok = BoolInt32(ok != 0 && (*(*TBF_key)(unsafe.Pointer(bp + 168)))[0] == uint32(0xdb9c59bc) && (*(*TBF_key)(unsafe.Pointer(bp + 240)))[int32(17)] == uint32(0x33343500) && !(Xmemcmp(tls, bp+96, bp+240, uint64(72)) != 0) && !(Xmemcmp(tls, bp+168, bp+312, uint64(72)) != 0)) + if ok != 0 && retval != 0 { + return retval + } + return __ccgo_ts + 70 +} + +var _test_hashes = [2][34]uint8{ + 0: {'i', '1', 'D', '7', '0', '9', 'v', 'f', 'a', 'm', 'u', 'l', 'i', 'm', 'l', 'G', 'c', 'q', '0', 'q', 'q', '3', 'U', 'v', 'u', 'U', 'a', 's', 'v', 'E', 'a', 0, 'U'}, + 1: {'V', 'U', 'r', 'P', 'm', 'X', 'D', '6', 'q', '/', 'n', 'V', 'S', 'S', 'p', '7', 'p', 'N', 'D', 'h', 'C', 'R', '9', '0', '7', '1', 'I', 'f', 'I', 'R', 'e', 0, 'U'}, +} + +const _PASSWORD_EFMT1 = 95 + +type Texpanded_key = struct { + Fl [16]Tuint32_t + Fr [16]Tuint32_t +} + +var _key_shifts = [16]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(2), + 3: uint8(2), + 4: uint8(2), + 5: uint8(2), + 6: uint8(2), + 7: uint8(2), + 8: uint8(1), + 9: uint8(2), + 10: uint8(2), + 11: uint8(2), + 12: uint8(2), + 13: uint8(2), + 14: uint8(2), + 15: uint8(1), +} + +var _psbox = [8][64]Tuint32_t{ + 0: { + 0: uint32(0x00808200), + 2: uint32(0x00008000), + 3: uint32(0x00808202), + 4: uint32(0x00808002), + 5: uint32(0x00008202), + 6: uint32(0x00000002), + 7: uint32(0x00008000), + 8: uint32(0x00000200), + 9: uint32(0x00808200), + 10: uint32(0x00808202), + 11: uint32(0x00000200), + 12: uint32(0x00800202), + 13: uint32(0x00808002), + 14: uint32(0x00800000), + 15: uint32(0x00000002), + 16: uint32(0x00000202), + 17: uint32(0x00800200), + 18: uint32(0x00800200), + 19: uint32(0x00008200), + 20: uint32(0x00008200), + 21: uint32(0x00808000), + 22: uint32(0x00808000), + 23: uint32(0x00800202), + 24: uint32(0x00008002), + 25: uint32(0x00800002), + 26: uint32(0x00800002), + 27: uint32(0x00008002), + 29: uint32(0x00000202), + 30: uint32(0x00008202), + 31: uint32(0x00800000), + 32: uint32(0x00008000), + 33: uint32(0x00808202), + 34: uint32(0x00000002), + 35: uint32(0x00808000), + 36: uint32(0x00808200), + 37: uint32(0x00800000), + 38: uint32(0x00800000), + 39: uint32(0x00000200), + 40: uint32(0x00808002), + 41: uint32(0x00008000), + 42: uint32(0x00008200), + 43: uint32(0x00800002), + 44: uint32(0x00000200), + 45: uint32(0x00000002), + 46: uint32(0x00800202), + 47: uint32(0x00008202), + 48: uint32(0x00808202), + 49: uint32(0x00008002), + 50: uint32(0x00808000), + 51: uint32(0x00800202), + 52: uint32(0x00800002), + 53: uint32(0x00000202), + 54: uint32(0x00008202), + 55: uint32(0x00808200), + 56: uint32(0x00000202), + 57: uint32(0x00800200), + 58: uint32(0x00800200), + 60: uint32(0x00008002), + 61: uint32(0x00008200), + 63: uint32(0x00808002), + }, + 1: { + 0: uint32(0x40084010), + 1: uint32(0x40004000), + 2: uint32(0x00004000), + 3: uint32(0x00084010), + 4: uint32(0x00080000), + 5: uint32(0x00000010), + 6: uint32(0x40080010), + 7: uint32(0x40004010), + 8: uint32(0x40000010), + 9: uint32(0x40084010), + 10: uint32(0x40084000), + 11: uint32(0x40000000), + 12: uint32(0x40004000), + 13: uint32(0x00080000), + 14: uint32(0x00000010), + 15: uint32(0x40080010), + 16: uint32(0x00084000), + 17: uint32(0x00080010), + 18: uint32(0x40004010), + 20: uint32(0x40000000), + 21: uint32(0x00004000), + 22: uint32(0x00084010), + 23: uint32(0x40080000), + 24: uint32(0x00080010), + 25: uint32(0x40000010), + 27: uint32(0x00084000), + 28: uint32(0x00004010), + 29: uint32(0x40084000), + 30: uint32(0x40080000), + 31: uint32(0x00004010), + 33: uint32(0x00084010), + 34: uint32(0x40080010), + 35: uint32(0x00080000), + 36: uint32(0x40004010), + 37: uint32(0x40080000), + 38: uint32(0x40084000), + 39: uint32(0x00004000), + 40: uint32(0x40080000), + 41: uint32(0x40004000), + 42: uint32(0x00000010), + 43: uint32(0x40084010), + 44: uint32(0x00084010), + 45: uint32(0x00000010), + 46: uint32(0x00004000), + 47: uint32(0x40000000), + 48: uint32(0x00004010), + 49: uint32(0x40084000), + 50: uint32(0x00080000), + 51: uint32(0x40000010), + 52: uint32(0x00080010), + 53: uint32(0x40004010), + 54: uint32(0x40000010), + 55: uint32(0x00080010), + 56: uint32(0x00084000), + 58: uint32(0x40004000), + 59: uint32(0x00004010), + 60: uint32(0x40000000), + 61: uint32(0x40080010), + 62: uint32(0x40084010), + 63: uint32(0x00084000), + }, + 2: { + 0: uint32(0x00000104), + 1: uint32(0x04010100), + 3: uint32(0x04010004), + 4: uint32(0x04000100), + 6: uint32(0x00010104), + 7: uint32(0x04000100), + 8: uint32(0x00010004), + 9: uint32(0x04000004), + 10: uint32(0x04000004), + 11: uint32(0x00010000), + 12: uint32(0x04010104), + 13: uint32(0x00010004), + 14: uint32(0x04010000), + 15: uint32(0x00000104), + 16: uint32(0x04000000), + 17: uint32(0x00000004), + 18: uint32(0x04010100), + 19: uint32(0x00000100), + 20: uint32(0x00010100), + 21: uint32(0x04010000), + 22: uint32(0x04010004), + 23: uint32(0x00010104), + 24: uint32(0x04000104), + 25: uint32(0x00010100), + 26: uint32(0x00010000), + 27: uint32(0x04000104), + 28: uint32(0x00000004), + 29: uint32(0x04010104), + 30: uint32(0x00000100), + 31: uint32(0x04000000), + 32: uint32(0x04010100), + 33: uint32(0x04000000), + 34: uint32(0x00010004), + 35: uint32(0x00000104), + 36: uint32(0x00010000), + 37: uint32(0x04010100), + 38: uint32(0x04000100), + 40: uint32(0x00000100), + 41: uint32(0x00010004), + 42: uint32(0x04010104), + 43: uint32(0x04000100), + 44: uint32(0x04000004), + 45: uint32(0x00000100), + 47: uint32(0x04010004), + 48: uint32(0x04000104), + 49: uint32(0x00010000), + 50: uint32(0x04000000), + 51: uint32(0x04010104), + 52: uint32(0x00000004), + 53: uint32(0x00010104), + 54: uint32(0x00010100), + 55: uint32(0x04000004), + 56: uint32(0x04010000), + 57: uint32(0x04000104), + 58: uint32(0x00000104), + 59: uint32(0x04010000), + 60: uint32(0x00010104), + 61: uint32(0x00000004), + 62: uint32(0x04010004), + 63: uint32(0x00010100), + }, + 3: { + 0: uint32(0x80401000), + 1: uint32(0x80001040), + 2: uint32(0x80001040), + 3: uint32(0x00000040), + 4: uint32(0x00401040), + 5: uint32(0x80400040), + 6: uint32(0x80400000), + 7: uint32(0x80001000), + 9: uint32(0x00401000), + 10: uint32(0x00401000), + 11: uint32(0x80401040), + 12: uint32(0x80000040), + 14: uint32(0x00400040), + 15: uint32(0x80400000), + 16: uint32(0x80000000), + 17: uint32(0x00001000), + 18: uint32(0x00400000), + 19: uint32(0x80401000), + 20: uint32(0x00000040), + 21: uint32(0x00400000), + 22: uint32(0x80001000), + 23: uint32(0x00001040), + 24: uint32(0x80400040), + 25: uint32(0x80000000), + 26: uint32(0x00001040), + 27: uint32(0x00400040), + 28: uint32(0x00001000), + 29: uint32(0x00401040), + 30: uint32(0x80401040), + 31: uint32(0x80000040), + 32: uint32(0x00400040), + 33: uint32(0x80400000), + 34: uint32(0x00401000), + 35: uint32(0x80401040), + 36: uint32(0x80000040), + 39: uint32(0x00401000), + 40: uint32(0x00001040), + 41: uint32(0x00400040), + 42: uint32(0x80400040), + 43: uint32(0x80000000), + 44: uint32(0x80401000), + 45: uint32(0x80001040), + 46: uint32(0x80001040), + 47: uint32(0x00000040), + 48: uint32(0x80401040), + 49: uint32(0x80000040), + 50: uint32(0x80000000), + 51: uint32(0x00001000), + 52: uint32(0x80400000), + 53: uint32(0x80001000), + 54: uint32(0x00401040), + 55: uint32(0x80400040), + 56: uint32(0x80001000), + 57: uint32(0x00001040), + 58: uint32(0x00400000), + 59: uint32(0x80401000), + 60: uint32(0x00000040), + 61: uint32(0x00400000), + 62: uint32(0x00001000), + 63: uint32(0x00401040), + }, + 4: { + 0: uint32(0x00000080), + 1: uint32(0x01040080), + 2: uint32(0x01040000), + 3: uint32(0x21000080), + 4: uint32(0x00040000), + 5: uint32(0x00000080), + 6: uint32(0x20000000), + 7: uint32(0x01040000), + 8: uint32(0x20040080), + 9: uint32(0x00040000), + 10: uint32(0x01000080), + 11: uint32(0x20040080), + 12: uint32(0x21000080), + 13: uint32(0x21040000), + 14: uint32(0x00040080), + 15: uint32(0x20000000), + 16: uint32(0x01000000), + 17: uint32(0x20040000), + 18: uint32(0x20040000), + 20: uint32(0x20000080), + 21: uint32(0x21040080), + 22: uint32(0x21040080), + 23: uint32(0x01000080), + 24: uint32(0x21040000), + 25: uint32(0x20000080), + 27: uint32(0x21000000), + 28: uint32(0x01040080), + 29: uint32(0x01000000), + 30: uint32(0x21000000), + 31: uint32(0x00040080), + 32: uint32(0x00040000), + 33: uint32(0x21000080), + 34: uint32(0x00000080), + 35: uint32(0x01000000), + 36: uint32(0x20000000), + 37: uint32(0x01040000), + 38: uint32(0x21000080), + 39: uint32(0x20040080), + 40: uint32(0x01000080), + 41: uint32(0x20000000), + 42: uint32(0x21040000), + 43: uint32(0x01040080), + 44: uint32(0x20040080), + 45: uint32(0x00000080), + 46: uint32(0x01000000), + 47: uint32(0x21040000), + 48: uint32(0x21040080), + 49: uint32(0x00040080), + 50: uint32(0x21000000), + 51: uint32(0x21040080), + 52: uint32(0x01040000), + 54: uint32(0x20040000), + 55: uint32(0x21000000), + 56: uint32(0x00040080), + 57: uint32(0x01000080), + 58: uint32(0x20000080), + 59: uint32(0x00040000), + 61: uint32(0x20040000), + 62: uint32(0x01040080), + 63: uint32(0x20000080), + }, + 5: { + 0: uint32(0x10000008), + 1: uint32(0x10200000), + 2: uint32(0x00002000), + 3: uint32(0x10202008), + 4: uint32(0x10200000), + 5: uint32(0x00000008), + 6: uint32(0x10202008), + 7: uint32(0x00200000), + 8: uint32(0x10002000), + 9: uint32(0x00202008), + 10: uint32(0x00200000), + 11: uint32(0x10000008), + 12: uint32(0x00200008), + 13: uint32(0x10002000), + 14: uint32(0x10000000), + 15: uint32(0x00002008), + 17: uint32(0x00200008), + 18: uint32(0x10002008), + 19: uint32(0x00002000), + 20: uint32(0x00202000), + 21: uint32(0x10002008), + 22: uint32(0x00000008), + 23: uint32(0x10200008), + 24: uint32(0x10200008), + 26: uint32(0x00202008), + 27: uint32(0x10202000), + 28: uint32(0x00002008), + 29: uint32(0x00202000), + 30: uint32(0x10202000), + 31: uint32(0x10000000), + 32: uint32(0x10002000), + 33: uint32(0x00000008), + 34: uint32(0x10200008), + 35: uint32(0x00202000), + 36: uint32(0x10202008), + 37: uint32(0x00200000), + 38: uint32(0x00002008), + 39: uint32(0x10000008), + 40: uint32(0x00200000), + 41: uint32(0x10002000), + 42: uint32(0x10000000), + 43: uint32(0x00002008), + 44: uint32(0x10000008), + 45: uint32(0x10202008), + 46: uint32(0x00202000), + 47: uint32(0x10200000), + 48: uint32(0x00202008), + 49: uint32(0x10202000), + 51: uint32(0x10200008), + 52: uint32(0x00000008), + 53: uint32(0x00002000), + 54: uint32(0x10200000), + 55: uint32(0x00202008), + 56: uint32(0x00002000), + 57: uint32(0x00200008), + 58: uint32(0x10002008), + 60: uint32(0x10202000), + 61: uint32(0x10000000), + 62: uint32(0x00200008), + 63: uint32(0x10002008), + }, + 6: { + 0: uint32(0x00100000), + 1: uint32(0x02100001), + 2: uint32(0x02000401), + 4: uint32(0x00000400), + 5: uint32(0x02000401), + 6: uint32(0x00100401), + 7: uint32(0x02100400), + 8: uint32(0x02100401), + 9: uint32(0x00100000), + 11: uint32(0x02000001), + 12: uint32(0x00000001), + 13: uint32(0x02000000), + 14: uint32(0x02100001), + 15: uint32(0x00000401), + 16: uint32(0x02000400), + 17: uint32(0x00100401), + 18: uint32(0x00100001), + 19: uint32(0x02000400), + 20: uint32(0x02000001), + 21: uint32(0x02100000), + 22: uint32(0x02100400), + 23: uint32(0x00100001), + 24: uint32(0x02100000), + 25: uint32(0x00000400), + 26: uint32(0x00000401), + 27: uint32(0x02100401), + 28: uint32(0x00100400), + 29: uint32(0x00000001), + 30: uint32(0x02000000), + 31: uint32(0x00100400), + 32: uint32(0x02000000), + 33: uint32(0x00100400), + 34: uint32(0x00100000), + 35: uint32(0x02000401), + 36: uint32(0x02000401), + 37: uint32(0x02100001), + 38: uint32(0x02100001), + 39: uint32(0x00000001), + 40: uint32(0x00100001), + 41: uint32(0x02000000), + 42: uint32(0x02000400), + 43: uint32(0x00100000), + 44: uint32(0x02100400), + 45: uint32(0x00000401), + 46: uint32(0x00100401), + 47: uint32(0x02100400), + 48: uint32(0x00000401), + 49: uint32(0x02000001), + 50: uint32(0x02100401), + 51: uint32(0x02100000), + 52: uint32(0x00100400), + 54: uint32(0x00000001), + 55: uint32(0x02100401), + 57: uint32(0x00100401), + 58: uint32(0x02100000), + 59: uint32(0x00000400), + 60: uint32(0x02000001), + 61: uint32(0x02000400), + 62: uint32(0x00000400), + 63: uint32(0x00100001), + }, + 7: { + 0: uint32(0x08000820), + 1: uint32(0x00000800), + 2: uint32(0x00020000), + 3: uint32(0x08020820), + 4: uint32(0x08000000), + 5: uint32(0x08000820), + 6: uint32(0x00000020), + 7: uint32(0x08000000), + 8: uint32(0x00020020), + 9: uint32(0x08020000), + 10: uint32(0x08020820), + 11: uint32(0x00020800), + 12: uint32(0x08020800), + 13: uint32(0x00020820), + 14: uint32(0x00000800), + 15: uint32(0x00000020), + 16: uint32(0x08020000), + 17: uint32(0x08000020), + 18: uint32(0x08000800), + 19: uint32(0x00000820), + 20: uint32(0x00020800), + 21: uint32(0x00020020), + 22: uint32(0x08020020), + 23: uint32(0x08020800), + 24: uint32(0x00000820), + 27: uint32(0x08020020), + 28: uint32(0x08000020), + 29: uint32(0x08000800), + 30: uint32(0x00020820), + 31: uint32(0x00020000), + 32: uint32(0x00020820), + 33: uint32(0x00020000), + 34: uint32(0x08020800), + 35: uint32(0x00000800), + 36: uint32(0x00000020), + 37: uint32(0x08020020), + 38: uint32(0x00000800), + 39: uint32(0x00020820), + 40: uint32(0x08000800), + 41: uint32(0x00000020), + 42: uint32(0x08000020), + 43: uint32(0x08020000), + 44: uint32(0x08020020), + 45: uint32(0x08000000), + 46: uint32(0x00020000), + 47: uint32(0x08000820), + 49: uint32(0x08020820), + 50: uint32(0x00020020), + 51: uint32(0x08000020), + 52: uint32(0x08020000), + 53: uint32(0x08000800), + 54: uint32(0x08000820), + 56: uint32(0x08020820), + 57: uint32(0x00020800), + 58: uint32(0x00020800), + 59: uint32(0x00000820), + 60: uint32(0x00000820), + 61: uint32(0x00020020), + 62: uint32(0x08000000), + 63: uint32(0x08020800), + }, +} +var _ip_maskl = [16][16]Tuint32_t{ + 0: { + 1: uint32(0x00010000), + 3: uint32(0x00010000), + 4: uint32(0x01000000), + 5: uint32(0x01010000), + 6: uint32(0x01000000), + 7: uint32(0x01010000), + 9: uint32(0x00010000), + 11: uint32(0x00010000), + 12: uint32(0x01000000), + 13: uint32(0x01010000), + 14: uint32(0x01000000), + 15: uint32(0x01010000), + }, + 1: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 4: uint32(0x00000100), + 5: uint32(0x00000101), + 6: uint32(0x00000100), + 7: uint32(0x00000101), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 12: uint32(0x00000100), + 13: uint32(0x00000101), + 14: uint32(0x00000100), + 15: uint32(0x00000101), + }, + 2: { + 1: uint32(0x00020000), + 3: uint32(0x00020000), + 4: uint32(0x02000000), + 5: uint32(0x02020000), + 6: uint32(0x02000000), + 7: uint32(0x02020000), + 9: uint32(0x00020000), + 11: uint32(0x00020000), + 12: uint32(0x02000000), + 13: uint32(0x02020000), + 14: uint32(0x02000000), + 15: uint32(0x02020000), + }, + 3: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 4: uint32(0x00000200), + 5: uint32(0x00000202), + 6: uint32(0x00000200), + 7: uint32(0x00000202), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 12: uint32(0x00000200), + 13: uint32(0x00000202), + 14: uint32(0x00000200), + 15: uint32(0x00000202), + }, + 4: { + 1: uint32(0x00040000), + 3: uint32(0x00040000), + 4: uint32(0x04000000), + 5: uint32(0x04040000), + 6: uint32(0x04000000), + 7: uint32(0x04040000), + 9: uint32(0x00040000), + 11: uint32(0x00040000), + 12: uint32(0x04000000), + 13: uint32(0x04040000), + 14: uint32(0x04000000), + 15: uint32(0x04040000), + }, + 5: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 4: uint32(0x00000400), + 5: uint32(0x00000404), + 6: uint32(0x00000400), + 7: uint32(0x00000404), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 12: uint32(0x00000400), + 13: uint32(0x00000404), + 14: uint32(0x00000400), + 15: uint32(0x00000404), + }, + 6: { + 1: uint32(0x00080000), + 3: uint32(0x00080000), + 4: uint32(0x08000000), + 5: uint32(0x08080000), + 6: uint32(0x08000000), + 7: uint32(0x08080000), + 9: uint32(0x00080000), + 11: uint32(0x00080000), + 12: uint32(0x08000000), + 13: uint32(0x08080000), + 14: uint32(0x08000000), + 15: uint32(0x08080000), + }, + 7: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 4: uint32(0x00000800), + 5: uint32(0x00000808), + 6: uint32(0x00000800), + 7: uint32(0x00000808), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 12: uint32(0x00000800), + 13: uint32(0x00000808), + 14: uint32(0x00000800), + 15: uint32(0x00000808), + }, + 8: { + 1: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x10000000), + 5: uint32(0x10100000), + 6: uint32(0x10000000), + 7: uint32(0x10100000), + 9: uint32(0x00100000), + 11: uint32(0x00100000), + 12: uint32(0x10000000), + 13: uint32(0x10100000), + 14: uint32(0x10000000), + 15: uint32(0x10100000), + }, + 9: { + 1: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001010), + 6: uint32(0x00001000), + 7: uint32(0x00001010), + 9: uint32(0x00000010), + 11: uint32(0x00000010), + 12: uint32(0x00001000), + 13: uint32(0x00001010), + 14: uint32(0x00001000), + 15: uint32(0x00001010), + }, + 10: { + 1: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x20000000), + 5: uint32(0x20200000), + 6: uint32(0x20000000), + 7: uint32(0x20200000), + 9: uint32(0x00200000), + 11: uint32(0x00200000), + 12: uint32(0x20000000), + 13: uint32(0x20200000), + 14: uint32(0x20000000), + 15: uint32(0x20200000), + }, + 11: { + 1: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002020), + 6: uint32(0x00002000), + 7: uint32(0x00002020), + 9: uint32(0x00000020), + 11: uint32(0x00000020), + 12: uint32(0x00002000), + 13: uint32(0x00002020), + 14: uint32(0x00002000), + 15: uint32(0x00002020), + }, + 12: { + 1: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x40000000), + 5: uint32(0x40400000), + 6: uint32(0x40000000), + 7: uint32(0x40400000), + 9: uint32(0x00400000), + 11: uint32(0x00400000), + 12: uint32(0x40000000), + 13: uint32(0x40400000), + 14: uint32(0x40000000), + 15: uint32(0x40400000), + }, + 13: { + 1: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004040), + 6: uint32(0x00004000), + 7: uint32(0x00004040), + 9: uint32(0x00000040), + 11: uint32(0x00000040), + 12: uint32(0x00004000), + 13: uint32(0x00004040), + 14: uint32(0x00004000), + 15: uint32(0x00004040), + }, + 14: { + 1: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x80000000), + 5: uint32(0x80800000), + 6: uint32(0x80000000), + 7: uint32(0x80800000), + 9: uint32(0x00800000), + 11: uint32(0x00800000), + 12: uint32(0x80000000), + 13: uint32(0x80800000), + 14: uint32(0x80000000), + 15: uint32(0x80800000), + }, + 15: { + 1: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008080), + 6: uint32(0x00008000), + 7: uint32(0x00008080), + 9: uint32(0x00000080), + 11: uint32(0x00000080), + 12: uint32(0x00008000), + 13: uint32(0x00008080), + 14: uint32(0x00008000), + 15: uint32(0x00008080), + }, +} +var _ip_maskr = [16][16]Tuint32_t{ + 0: { + 2: uint32(0x00010000), + 3: uint32(0x00010000), + 6: uint32(0x00010000), + 7: uint32(0x00010000), + 8: uint32(0x01000000), + 9: uint32(0x01000000), + 10: uint32(0x01010000), + 11: uint32(0x01010000), + 12: uint32(0x01000000), + 13: uint32(0x01000000), + 14: uint32(0x01010000), + 15: uint32(0x01010000), + }, + 1: { + 2: uint32(0x00000001), + 3: uint32(0x00000001), + 6: uint32(0x00000001), + 7: uint32(0x00000001), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x00000101), + 11: uint32(0x00000101), + 12: uint32(0x00000100), + 13: uint32(0x00000100), + 14: uint32(0x00000101), + 15: uint32(0x00000101), + }, + 2: { + 2: uint32(0x00020000), + 3: uint32(0x00020000), + 6: uint32(0x00020000), + 7: uint32(0x00020000), + 8: uint32(0x02000000), + 9: uint32(0x02000000), + 10: uint32(0x02020000), + 11: uint32(0x02020000), + 12: uint32(0x02000000), + 13: uint32(0x02000000), + 14: uint32(0x02020000), + 15: uint32(0x02020000), + }, + 3: { + 2: uint32(0x00000002), + 3: uint32(0x00000002), + 6: uint32(0x00000002), + 7: uint32(0x00000002), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x00000202), + 11: uint32(0x00000202), + 12: uint32(0x00000200), + 13: uint32(0x00000200), + 14: uint32(0x00000202), + 15: uint32(0x00000202), + }, + 4: { + 2: uint32(0x00040000), + 3: uint32(0x00040000), + 6: uint32(0x00040000), + 7: uint32(0x00040000), + 8: uint32(0x04000000), + 9: uint32(0x04000000), + 10: uint32(0x04040000), + 11: uint32(0x04040000), + 12: uint32(0x04000000), + 13: uint32(0x04000000), + 14: uint32(0x04040000), + 15: uint32(0x04040000), + }, + 5: { + 2: uint32(0x00000004), + 3: uint32(0x00000004), + 6: uint32(0x00000004), + 7: uint32(0x00000004), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x00000404), + 11: uint32(0x00000404), + 12: uint32(0x00000400), + 13: uint32(0x00000400), + 14: uint32(0x00000404), + 15: uint32(0x00000404), + }, + 6: { + 2: uint32(0x00080000), + 3: uint32(0x00080000), + 6: uint32(0x00080000), + 7: uint32(0x00080000), + 8: uint32(0x08000000), + 9: uint32(0x08000000), + 10: uint32(0x08080000), + 11: uint32(0x08080000), + 12: uint32(0x08000000), + 13: uint32(0x08000000), + 14: uint32(0x08080000), + 15: uint32(0x08080000), + }, + 7: { + 2: uint32(0x00000008), + 3: uint32(0x00000008), + 6: uint32(0x00000008), + 7: uint32(0x00000008), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x00000808), + 11: uint32(0x00000808), + 12: uint32(0x00000800), + 13: uint32(0x00000800), + 14: uint32(0x00000808), + 15: uint32(0x00000808), + }, + 8: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 6: uint32(0x00100000), + 7: uint32(0x00100000), + 8: uint32(0x10000000), + 9: uint32(0x10000000), + 10: uint32(0x10100000), + 11: uint32(0x10100000), + 12: uint32(0x10000000), + 13: uint32(0x10000000), + 14: uint32(0x10100000), + 15: uint32(0x10100000), + }, + 9: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 6: uint32(0x00000010), + 7: uint32(0x00000010), + 8: uint32(0x00001000), + 9: uint32(0x00001000), + 10: uint32(0x00001010), + 11: uint32(0x00001010), + 12: uint32(0x00001000), + 13: uint32(0x00001000), + 14: uint32(0x00001010), + 15: uint32(0x00001010), + }, + 10: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 6: uint32(0x00200000), + 7: uint32(0x00200000), + 8: uint32(0x20000000), + 9: uint32(0x20000000), + 10: uint32(0x20200000), + 11: uint32(0x20200000), + 12: uint32(0x20000000), + 13: uint32(0x20000000), + 14: uint32(0x20200000), + 15: uint32(0x20200000), + }, + 11: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 6: uint32(0x00000020), + 7: uint32(0x00000020), + 8: uint32(0x00002000), + 9: uint32(0x00002000), + 10: uint32(0x00002020), + 11: uint32(0x00002020), + 12: uint32(0x00002000), + 13: uint32(0x00002000), + 14: uint32(0x00002020), + 15: uint32(0x00002020), + }, + 12: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 6: uint32(0x00400000), + 7: uint32(0x00400000), + 8: uint32(0x40000000), + 9: uint32(0x40000000), + 10: uint32(0x40400000), + 11: uint32(0x40400000), + 12: uint32(0x40000000), + 13: uint32(0x40000000), + 14: uint32(0x40400000), + 15: uint32(0x40400000), + }, + 13: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 6: uint32(0x00000040), + 7: uint32(0x00000040), + 8: uint32(0x00004000), + 9: uint32(0x00004000), + 10: uint32(0x00004040), + 11: uint32(0x00004040), + 12: uint32(0x00004000), + 13: uint32(0x00004000), + 14: uint32(0x00004040), + 15: uint32(0x00004040), + }, + 14: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 6: uint32(0x00800000), + 7: uint32(0x00800000), + 8: uint32(0x80000000), + 9: uint32(0x80000000), + 10: uint32(0x80800000), + 11: uint32(0x80800000), + 12: uint32(0x80000000), + 13: uint32(0x80000000), + 14: uint32(0x80800000), + 15: uint32(0x80800000), + }, + 15: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 6: uint32(0x00000080), + 7: uint32(0x00000080), + 8: uint32(0x00008000), + 9: uint32(0x00008000), + 10: uint32(0x00008080), + 11: uint32(0x00008080), + 12: uint32(0x00008000), + 13: uint32(0x00008000), + 14: uint32(0x00008080), + 15: uint32(0x00008080), + }, +} +var _fp_maskl = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _fp_maskr = [8][16]Tuint32_t{ + 0: { + 1: uint32(0x40000000), + 2: uint32(0x00400000), + 3: uint32(0x40400000), + 4: uint32(0x00004000), + 5: uint32(0x40004000), + 6: uint32(0x00404000), + 7: uint32(0x40404000), + 8: uint32(0x00000040), + 9: uint32(0x40000040), + 10: uint32(0x00400040), + 11: uint32(0x40400040), + 12: uint32(0x00004040), + 13: uint32(0x40004040), + 14: uint32(0x00404040), + 15: uint32(0x40404040), + }, + 1: { + 1: uint32(0x10000000), + 2: uint32(0x00100000), + 3: uint32(0x10100000), + 4: uint32(0x00001000), + 5: uint32(0x10001000), + 6: uint32(0x00101000), + 7: uint32(0x10101000), + 8: uint32(0x00000010), + 9: uint32(0x10000010), + 10: uint32(0x00100010), + 11: uint32(0x10100010), + 12: uint32(0x00001010), + 13: uint32(0x10001010), + 14: uint32(0x00101010), + 15: uint32(0x10101010), + }, + 2: { + 1: uint32(0x04000000), + 2: uint32(0x00040000), + 3: uint32(0x04040000), + 4: uint32(0x00000400), + 5: uint32(0x04000400), + 6: uint32(0x00040400), + 7: uint32(0x04040400), + 8: uint32(0x00000004), + 9: uint32(0x04000004), + 10: uint32(0x00040004), + 11: uint32(0x04040004), + 12: uint32(0x00000404), + 13: uint32(0x04000404), + 14: uint32(0x00040404), + 15: uint32(0x04040404), + }, + 3: { + 1: uint32(0x01000000), + 2: uint32(0x00010000), + 3: uint32(0x01010000), + 4: uint32(0x00000100), + 5: uint32(0x01000100), + 6: uint32(0x00010100), + 7: uint32(0x01010100), + 8: uint32(0x00000001), + 9: uint32(0x01000001), + 10: uint32(0x00010001), + 11: uint32(0x01010001), + 12: uint32(0x00000101), + 13: uint32(0x01000101), + 14: uint32(0x00010101), + 15: uint32(0x01010101), + }, + 4: { + 1: uint32(0x80000000), + 2: uint32(0x00800000), + 3: uint32(0x80800000), + 4: uint32(0x00008000), + 5: uint32(0x80008000), + 6: uint32(0x00808000), + 7: uint32(0x80808000), + 8: uint32(0x00000080), + 9: uint32(0x80000080), + 10: uint32(0x00800080), + 11: uint32(0x80800080), + 12: uint32(0x00008080), + 13: uint32(0x80008080), + 14: uint32(0x00808080), + 15: uint32(0x80808080), + }, + 5: { + 1: uint32(0x20000000), + 2: uint32(0x00200000), + 3: uint32(0x20200000), + 4: uint32(0x00002000), + 5: uint32(0x20002000), + 6: uint32(0x00202000), + 7: uint32(0x20202000), + 8: uint32(0x00000020), + 9: uint32(0x20000020), + 10: uint32(0x00200020), + 11: uint32(0x20200020), + 12: uint32(0x00002020), + 13: uint32(0x20002020), + 14: uint32(0x00202020), + 15: uint32(0x20202020), + }, + 6: { + 1: uint32(0x08000000), + 2: uint32(0x00080000), + 3: uint32(0x08080000), + 4: uint32(0x00000800), + 5: uint32(0x08000800), + 6: uint32(0x00080800), + 7: uint32(0x08080800), + 8: uint32(0x00000008), + 9: uint32(0x08000008), + 10: uint32(0x00080008), + 11: uint32(0x08080008), + 12: uint32(0x00000808), + 13: uint32(0x08000808), + 14: uint32(0x00080808), + 15: uint32(0x08080808), + }, + 7: { + 1: uint32(0x02000000), + 2: uint32(0x00020000), + 3: uint32(0x02020000), + 4: uint32(0x00000200), + 5: uint32(0x02000200), + 6: uint32(0x00020200), + 7: uint32(0x02020200), + 8: uint32(0x00000002), + 9: uint32(0x02000002), + 10: uint32(0x00020002), + 11: uint32(0x02020002), + 12: uint32(0x00000202), + 13: uint32(0x02000202), + 14: uint32(0x00020202), + 15: uint32(0x02020202), + }, +} +var _key_perm_maskl = [8][16]Tuint32_t{ + 0: { + 2: uint32(0x00000010), + 3: uint32(0x00000010), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00001010), + 7: uint32(0x00001010), + 8: uint32(0x00100000), + 9: uint32(0x00100000), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00101000), + 13: uint32(0x00101000), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 1: { + 2: uint32(0x00000020), + 3: uint32(0x00000020), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002020), + 7: uint32(0x00002020), + 8: uint32(0x00200000), + 9: uint32(0x00200000), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00202000), + 13: uint32(0x00202000), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 2: { + 2: uint32(0x00000040), + 3: uint32(0x00000040), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00004040), + 7: uint32(0x00004040), + 8: uint32(0x00400000), + 9: uint32(0x00400000), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00404000), + 13: uint32(0x00404000), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 3: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00008080), + 7: uint32(0x00008080), + 8: uint32(0x00800000), + 9: uint32(0x00800000), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00808000), + 13: uint32(0x00808000), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 4: { + 1: uint32(0x00000001), + 2: uint32(0x00000100), + 3: uint32(0x00000101), + 4: uint32(0x00010000), + 5: uint32(0x00010001), + 6: uint32(0x00010100), + 7: uint32(0x00010101), + 8: uint32(0x01000000), + 9: uint32(0x01000001), + 10: uint32(0x01000100), + 11: uint32(0x01000101), + 12: uint32(0x01010000), + 13: uint32(0x01010001), + 14: uint32(0x01010100), + 15: uint32(0x01010101), + }, + 5: { + 1: uint32(0x00000002), + 2: uint32(0x00000200), + 3: uint32(0x00000202), + 4: uint32(0x00020000), + 5: uint32(0x00020002), + 6: uint32(0x00020200), + 7: uint32(0x00020202), + 8: uint32(0x02000000), + 9: uint32(0x02000002), + 10: uint32(0x02000200), + 11: uint32(0x02000202), + 12: uint32(0x02020000), + 13: uint32(0x02020002), + 14: uint32(0x02020200), + 15: uint32(0x02020202), + }, + 6: { + 1: uint32(0x00000004), + 2: uint32(0x00000400), + 3: uint32(0x00000404), + 4: uint32(0x00040000), + 5: uint32(0x00040004), + 6: uint32(0x00040400), + 7: uint32(0x00040404), + 8: uint32(0x04000000), + 9: uint32(0x04000004), + 10: uint32(0x04000400), + 11: uint32(0x04000404), + 12: uint32(0x04040000), + 13: uint32(0x04040004), + 14: uint32(0x04040400), + 15: uint32(0x04040404), + }, + 7: { + 1: uint32(0x00000008), + 2: uint32(0x00000800), + 3: uint32(0x00000808), + 4: uint32(0x00080000), + 5: uint32(0x00080008), + 6: uint32(0x00080800), + 7: uint32(0x00080808), + 8: uint32(0x08000000), + 9: uint32(0x08000008), + 10: uint32(0x08000800), + 11: uint32(0x08000808), + 12: uint32(0x08080000), + 13: uint32(0x08080008), + 14: uint32(0x08080800), + 15: uint32(0x08080808), + }, +} +var _key_perm_maskr = [12][16]Tuint32_t{ + 0: { + 1: uint32(0x00000001), + 3: uint32(0x00000001), + 5: uint32(0x00000001), + 7: uint32(0x00000001), + 9: uint32(0x00000001), + 11: uint32(0x00000001), + 13: uint32(0x00000001), + 15: uint32(0x00000001), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00001000), + 5: uint32(0x00001000), + 6: uint32(0x00101000), + 7: uint32(0x00101000), + 8: uint32(0x00000010), + 9: uint32(0x00000010), + 10: uint32(0x00100010), + 11: uint32(0x00100010), + 12: uint32(0x00001010), + 13: uint32(0x00001010), + 14: uint32(0x00101010), + 15: uint32(0x00101010), + }, + 2: { + 1: uint32(0x00000002), + 3: uint32(0x00000002), + 5: uint32(0x00000002), + 7: uint32(0x00000002), + 9: uint32(0x00000002), + 11: uint32(0x00000002), + 13: uint32(0x00000002), + 15: uint32(0x00000002), + }, + 3: { + 2: uint32(0x00200000), + 3: uint32(0x00200000), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00202000), + 7: uint32(0x00202000), + 8: uint32(0x00000020), + 9: uint32(0x00000020), + 10: uint32(0x00200020), + 11: uint32(0x00200020), + 12: uint32(0x00002020), + 13: uint32(0x00002020), + 14: uint32(0x00202020), + 15: uint32(0x00202020), + }, + 4: { + 1: uint32(0x00000004), + 3: uint32(0x00000004), + 5: uint32(0x00000004), + 7: uint32(0x00000004), + 9: uint32(0x00000004), + 11: uint32(0x00000004), + 13: uint32(0x00000004), + 15: uint32(0x00000004), + }, + 5: { + 2: uint32(0x00400000), + 3: uint32(0x00400000), + 4: uint32(0x00004000), + 5: uint32(0x00004000), + 6: uint32(0x00404000), + 7: uint32(0x00404000), + 8: uint32(0x00000040), + 9: uint32(0x00000040), + 10: uint32(0x00400040), + 11: uint32(0x00400040), + 12: uint32(0x00004040), + 13: uint32(0x00004040), + 14: uint32(0x00404040), + 15: uint32(0x00404040), + }, + 6: { + 1: uint32(0x00000008), + 3: uint32(0x00000008), + 5: uint32(0x00000008), + 7: uint32(0x00000008), + 9: uint32(0x00000008), + 11: uint32(0x00000008), + 13: uint32(0x00000008), + 15: uint32(0x00000008), + }, + 7: { + 2: uint32(0x00800000), + 3: uint32(0x00800000), + 4: uint32(0x00008000), + 5: uint32(0x00008000), + 6: uint32(0x00808000), + 7: uint32(0x00808000), + 8: uint32(0x00000080), + 9: uint32(0x00000080), + 10: uint32(0x00800080), + 11: uint32(0x00800080), + 12: uint32(0x00008080), + 13: uint32(0x00008080), + 14: uint32(0x00808080), + 15: uint32(0x00808080), + }, + 8: { + 2: uint32(0x01000000), + 3: uint32(0x01000000), + 4: uint32(0x00010000), + 5: uint32(0x00010000), + 6: uint32(0x01010000), + 7: uint32(0x01010000), + 8: uint32(0x00000100), + 9: uint32(0x00000100), + 10: uint32(0x01000100), + 11: uint32(0x01000100), + 12: uint32(0x00010100), + 13: uint32(0x00010100), + 14: uint32(0x01010100), + 15: uint32(0x01010100), + }, + 9: { + 2: uint32(0x02000000), + 3: uint32(0x02000000), + 4: uint32(0x00020000), + 5: uint32(0x00020000), + 6: uint32(0x02020000), + 7: uint32(0x02020000), + 8: uint32(0x00000200), + 9: uint32(0x00000200), + 10: uint32(0x02000200), + 11: uint32(0x02000200), + 12: uint32(0x00020200), + 13: uint32(0x00020200), + 14: uint32(0x02020200), + 15: uint32(0x02020200), + }, + 10: { + 2: uint32(0x04000000), + 3: uint32(0x04000000), + 4: uint32(0x00040000), + 5: uint32(0x00040000), + 6: uint32(0x04040000), + 7: uint32(0x04040000), + 8: uint32(0x00000400), + 9: uint32(0x00000400), + 10: uint32(0x04000400), + 11: uint32(0x04000400), + 12: uint32(0x00040400), + 13: uint32(0x00040400), + 14: uint32(0x04040400), + 15: uint32(0x04040400), + }, + 11: { + 2: uint32(0x08000000), + 3: uint32(0x08000000), + 4: uint32(0x00080000), + 5: uint32(0x00080000), + 6: uint32(0x08080000), + 7: uint32(0x08080000), + 8: uint32(0x00000800), + 9: uint32(0x00000800), + 10: uint32(0x08000800), + 11: uint32(0x08000800), + 12: uint32(0x00080800), + 13: uint32(0x00080800), + 14: uint32(0x08080800), + 15: uint32(0x08080800), + }, +} +var _comp_maskl0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00020000), + 2: uint32(0x00000001), + 3: uint32(0x00020001), + 4: uint32(0x00080000), + 5: uint32(0x000a0000), + 6: uint32(0x00080001), + 7: uint32(0x000a0001), + }, + 1: { + 1: uint32(0x00001000), + 3: uint32(0x00001000), + 4: uint32(0x00000040), + 5: uint32(0x00001040), + 6: uint32(0x00000040), + 7: uint32(0x00001040), + }, + 2: { + 1: uint32(0x00400000), + 2: uint32(0x00000020), + 3: uint32(0x00400020), + 4: uint32(0x00008000), + 5: uint32(0x00408000), + 6: uint32(0x00008020), + 7: uint32(0x00408020), + }, + 3: { + 1: uint32(0x00100000), + 2: uint32(0x00000800), + 3: uint32(0x00100800), + 5: uint32(0x00100000), + 6: uint32(0x00000800), + 7: uint32(0x00100800), + }, +} +var _comp_maskr0 = [4][8]Tuint32_t{ + 0: { + 1: uint32(0x00200000), + 2: uint32(0x00020000), + 3: uint32(0x00220000), + 4: uint32(0x00000002), + 5: uint32(0x00200002), + 6: uint32(0x00020002), + 7: uint32(0x00220002), + }, + 1: { + 2: uint32(0x00100000), + 3: uint32(0x00100000), + 4: uint32(0x00000004), + 5: uint32(0x00000004), + 6: uint32(0x00100004), + 7: uint32(0x00100004), + }, + 2: { + 1: uint32(0x00004000), + 2: uint32(0x00000800), + 3: uint32(0x00004800), + 5: uint32(0x00004000), + 6: uint32(0x00000800), + 7: uint32(0x00004800), + }, + 3: { + 1: uint32(0x00400000), + 2: uint32(0x00008000), + 3: uint32(0x00408000), + 4: uint32(0x00000008), + 5: uint32(0x00400008), + 6: uint32(0x00008008), + 7: uint32(0x00408008), + }, +} +var _comp_maskl1 = [4][16]Tuint32_t{ + 0: { + 1: uint32(0x00000010), + 2: uint32(0x00004000), + 3: uint32(0x00004010), + 4: uint32(0x00040000), + 5: uint32(0x00040010), + 6: uint32(0x00044000), + 7: uint32(0x00044010), + 8: uint32(0x00000100), + 9: uint32(0x00000110), + 10: uint32(0x00004100), + 11: uint32(0x00004110), + 12: uint32(0x00040100), + 13: uint32(0x00040110), + 14: uint32(0x00044100), + 15: uint32(0x00044110), + }, + 1: { + 1: uint32(0x00800000), + 2: uint32(0x00000002), + 3: uint32(0x00800002), + 4: uint32(0x00000200), + 5: uint32(0x00800200), + 6: uint32(0x00000202), + 7: uint32(0x00800202), + 8: uint32(0x00200000), + 9: uint32(0x00a00000), + 10: uint32(0x00200002), + 11: uint32(0x00a00002), + 12: uint32(0x00200200), + 13: uint32(0x00a00200), + 14: uint32(0x00200202), + 15: uint32(0x00a00202), + }, + 2: { + 1: uint32(0x00002000), + 2: uint32(0x00000004), + 3: uint32(0x00002004), + 4: uint32(0x00000400), + 5: uint32(0x00002400), + 6: uint32(0x00000404), + 7: uint32(0x00002404), + 9: uint32(0x00002000), + 10: uint32(0x00000004), + 11: uint32(0x00002004), + 12: uint32(0x00000400), + 13: uint32(0x00002400), + 14: uint32(0x00000404), + 15: uint32(0x00002404), + }, + 3: { + 1: uint32(0x00010000), + 2: uint32(0x00000008), + 3: uint32(0x00010008), + 4: uint32(0x00000080), + 5: uint32(0x00010080), + 6: uint32(0x00000088), + 7: uint32(0x00010088), + 9: uint32(0x00010000), + 10: uint32(0x00000008), + 11: uint32(0x00010008), + 12: uint32(0x00000080), + 13: uint32(0x00010080), + 14: uint32(0x00000088), + 15: uint32(0x00010088), + }, +} +var _comp_maskr1 = [4][16]Tuint32_t{ + 0: { + 2: uint32(0x00000080), + 3: uint32(0x00000080), + 4: uint32(0x00002000), + 5: uint32(0x00002000), + 6: uint32(0x00002080), + 7: uint32(0x00002080), + 8: uint32(0x00000001), + 9: uint32(0x00000001), + 10: uint32(0x00000081), + 11: uint32(0x00000081), + 12: uint32(0x00002001), + 13: uint32(0x00002001), + 14: uint32(0x00002081), + 15: uint32(0x00002081), + }, + 1: { + 1: uint32(0x00000010), + 2: uint32(0x00800000), + 3: uint32(0x00800010), + 4: uint32(0x00010000), + 5: uint32(0x00010010), + 6: uint32(0x00810000), + 7: uint32(0x00810010), + 8: uint32(0x00000200), + 9: uint32(0x00000210), + 10: uint32(0x00800200), + 11: uint32(0x00800210), + 12: uint32(0x00010200), + 13: uint32(0x00010210), + 14: uint32(0x00810200), + 15: uint32(0x00810210), + }, + 2: { + 1: uint32(0x00000400), + 2: uint32(0x00001000), + 3: uint32(0x00001400), + 4: uint32(0x00080000), + 5: uint32(0x00080400), + 6: uint32(0x00081000), + 7: uint32(0x00081400), + 8: uint32(0x00000020), + 9: uint32(0x00000420), + 10: uint32(0x00001020), + 11: uint32(0x00001420), + 12: uint32(0x00080020), + 13: uint32(0x00080420), + 14: uint32(0x00081020), + 15: uint32(0x00081420), + }, + 3: { + 1: uint32(0x00000100), + 2: uint32(0x00040000), + 3: uint32(0x00040100), + 5: uint32(0x00000100), + 6: uint32(0x00040000), + 7: uint32(0x00040100), + 8: uint32(0x00000040), + 9: uint32(0x00000140), + 10: uint32(0x00040040), + 11: uint32(0x00040140), + 12: uint32(0x00000040), + 13: uint32(0x00000140), + 14: uint32(0x00040040), + 15: uint32(0x00040140), + }, +} + +var _ascii64 = [65]uint8{'.', '/', '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', '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'} + +/* 0000000000111111111122222222223333333333444444444455555555556666 */ +/* 0123456789012345678901234567890123456789012345678901234567890123 */ + +// C documentation +// +// /* +// * We match the behavior of UFC-crypt on systems where "char" is signed by +// * default (the majority), regardless of char's signedness on our system. +// */ +func _ascii_to_bin(tls *TLS, ch int32) (r Tuint32_t) { + var retval, sch, v1 int32 + _, _, _ = retval, sch, v1 + if ch < int32(0x80) { + v1 = ch + } else { + v1 = -(int32(0x100) - ch) + } + sch = v1 + retval = sch - int32('.') + if sch >= int32('A') { + retval = sch - (Int32FromUint8('A') - Int32FromInt32(12)) + if sch >= int32('a') { + retval = sch - (Int32FromUint8('a') - Int32FromInt32(38)) + } + } + retval &= int32(0x3f) + return uint32(retval) +} + +// C documentation +// +// /* +// * When we choose to "support" invalid salts, nevertheless disallow those +// * containing characters that would violate the passwd file format. +// */ +func _ascii_is_unsafe(tls *TLS, ch uint8) (r int32) { + return BoolInt32(!(ch != 0) || int32(ch) == int32('\n') || int32(ch) == int32(':')) +} + +func _setup_salt(tls *TLS, salt Tuint32_t) (r Tuint32_t) { + var i uint32 + var obit, saltbit, saltbits Tuint32_t + _, _, _, _ = i, obit, saltbit, saltbits + saltbits = uint32(0) + saltbit = uint32(1) + obit = uint32(0x800000) + i = uint32(0) + for { + if !(i < uint32(24)) { + break + } + if salt&saltbit != 0 { + saltbits |= obit + } + saltbit <<= uint32(1) + obit >>= uint32(1) + goto _1 + _1: + ; + i++ + } + return saltbits +} + +func X__des_setkey(tls *TLS, key uintptr, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v ekey=%v, (%v:)", tls, key, ekey, origin(2)) + } + var i, ibit, j, round, shifts uint32 + var k0, k1, kl, kr, rawkey0, rawkey1, t0, t1, v1, v4 Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ibit, j, k0, k1, kl, kr, rawkey0, rawkey1, round, shifts, t0, t1, v1, v4 + rawkey0 = uint32(*(*uint8)(unsafe.Pointer(key + 3))) | uint32(*(*uint8)(unsafe.Pointer(key + 2)))<>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskl)) + uintptr(i+uint32(4))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j)*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) + ibit -= uint32(4) + k1 |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(j+uint32(1))*64 + uintptr(rawkey0>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_key_perm_maskr)) + uintptr(i+uint32(8))*64 + uintptr(rawkey1>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + /* + * Rotate subkeys and do compression permutation. + */ + shifts = uint32(0) + round = uint32(0) + for { + if !(round < uint32(16)) { + break + } + shifts += uint32(_key_shifts[round]) + t0 = k0<>(Uint32FromInt32(28)-shifts) + t1 = k1<>(Uint32FromInt32(28)-shifts) + v4 = Uint32FromInt32(0) + kr = v4 + kl = v4 + ibit = uint32(25) + i = uint32(0) + for { + if !(i < uint32(4)) { + break + } + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl0)) + uintptr(i)*32 + uintptr(t0>>ibit&uint32(7))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr0)) + uintptr(i)*32 + uintptr(t1>>ibit&uint32(7))*4)) + ibit -= uint32(4) + kl |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskl1)) + uintptr(i)*64 + uintptr(t0>>ibit&uint32(0xf))*4)) + kr |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_comp_maskr1)) + uintptr(i)*64 + uintptr(t1>>ibit&uint32(0xf))*4)) + ibit -= uint32(3) + goto _5 + _5: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(ekey + uintptr(round)*4)) = kl + *(*Tuint32_t)(unsafe.Pointer(ekey + 64 + uintptr(round)*4)) = kr + goto _3 + _3: + ; + round++ + } +} + +// C documentation +// +// /* +// * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format. +// */ +func X__do_des(tls *TLS, l_in Tuint32_t, r_in Tuint32_t, l_out uintptr, r_out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + if __ccgo_strace { + trc("tls=%v l_in=%v r_in=%v l_out=%v r_out=%v count=%v saltbits=%v ekey=%v, (%v:)", tls, l_in, r_in, l_out, r_out, count, saltbits, ekey, origin(2)) + } + var f, l, lo, r, r48l, r48r, ro, v1, v3, v7 Tuint32_t + var i, i1, ibit, ibit1, round, v4 uint32 + var kl, kr, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, i1, ibit, ibit1, kl, kr, l, lo, r, r48l, r48r, ro, round, v1, v3, v4, v5, v6, v7 + /* + * Do initial permutation (IP). + */ + v1 = Uint32FromInt32(0) + r = v1 + l = v1 + if l_in|r_in != 0 { + i = uint32(0) + ibit = Uint32FromInt32(28) + for { + if !(i < uint32(8)) { + break + } + l |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskl)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + r |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i)*64 + uintptr(l_in>>ibit&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ip_maskr)) + uintptr(i+uint32(8))*64 + uintptr(r_in>>ibit&uint32(0xf))*4)) + goto _2 + _2: + ; + i++ + ibit -= uint32(4) + } + } + for { + v3 = count + count-- + if !(v3 != 0) { + break + } + /* + * Do each round. + */ + round = uint32(16) + kl = ekey + kr = ekey + 64 + for { + v4 = round + round-- + if !(v4 != 0) { + break + } + /* + * Expand R to 48 bits (simulate the E-box). + */ + r48l = r&uint32(0x00000001)<>int32(9) | r&uint32(0x1f800000)>>int32(11) | r&uint32(0x01f80000)>>int32(13) | r&uint32(0x001f8000)>>int32(15) + r48r = r&uint32(0x0001f800)<>int32(31) + /* + * Do salting for crypt() and friends, and + * XOR with the permuted key. + */ + f = (r48l ^ r48r) & saltbits + v5 = kl + kl += 4 + r48l ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v5)) + v6 = kr + kr += 4 + r48r ^= f ^ *(*Tuint32_t)(unsafe.Pointer(v6)) + /* + * Do S-box lookups (which shrink it back to 32 bits) + * and do the P-box permutation at the same time. + */ + f = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + uintptr(r48l>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 1*256 + uintptr(r48l>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 2*256 + uintptr(r48l>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 3*256 + uintptr(r48l&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 4*256 + uintptr(r48r>>int32(18))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 5*256 + uintptr(r48r>>Int32FromInt32(12)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 6*256 + uintptr(r48r>>Int32FromInt32(6)&uint32(0x3f))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_psbox)) + 7*256 + uintptr(r48r&uint32(0x3f))*4)) + /* + * Now that we've permuted things, complete f(). + */ + f ^= l + l = r + r = f + } + r = l + l = f + } + /* + * Do final permutation (inverse of IP). + */ + v7 = Uint32FromInt32(0) + ro = v7 + lo = v7 + i1 = uint32(0) + ibit1 = Uint32FromInt32(28) + for { + if !(i1 < uint32(4)) { + break + } + ro |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskr)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + ibit1 -= uint32(4) + lo |= *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1)*64 + uintptr(l>>ibit1&uint32(0xf))*4)) | *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&_fp_maskl)) + uintptr(i1+uint32(4))*64 + uintptr(r>>ibit1&uint32(0xf))*4)) + goto _8 + _8: + ; + i1++ + ibit1 -= uint32(4) + } + *(*Tuint32_t)(unsafe.Pointer(l_out)) = lo + *(*Tuint32_t)(unsafe.Pointer(r_out)) = ro +} + +func _des_cipher(tls *TLS, in uintptr, out uintptr, count Tuint32_t, saltbits Tuint32_t, ekey uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var rawl, rawr Tuint32_t + var _ /* l_out at bp+0 */ Tuint32_t + var _ /* r_out at bp+4 */ Tuint32_t + _, _ = rawl, rawr + rawl = uint32(*(*uint8)(unsafe.Pointer(in + 3))) | uint32(*(*uint8)(unsafe.Pointer(in + 2)))<> int32(24)) + *(*uint8)(unsafe.Pointer(out + 1)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 2)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 3)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp))) + *(*uint8)(unsafe.Pointer(out + 4)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(24)) + *(*uint8)(unsafe.Pointer(out + 5)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(16)) + *(*uint8)(unsafe.Pointer(out + 6)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(8)) + *(*uint8)(unsafe.Pointer(out + 7)) = uint8(*(*Tuint32_t)(unsafe.Pointer(bp + 4))) +} + +func __crypt_extended_r_uut(tls *TLS, _key uintptr, _setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(144) + defer tls.Free(144) + var count, l, salt, value, value1 Tuint32_t + var i uint32 + var key, p, q, setting, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 uintptr + var _ /* ekey at bp+0 */ Texpanded_key + var _ /* keybuf at bp+128 */ [8]uint8 + var _ /* r0 at bp+136 */ Tuint32_t + var _ /* r1 at bp+140 */ Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = count, i, key, l, p, q, salt, setting, value, value1, v1, v10, v11, v12, v13, v14, v15, v16, v17, v5, v6, v7, v8, v9, p4 + key = _key + setting = _setting + /* + * Copy the key, shifting each character left by one bit and padding + * with zeroes. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) { + v1 = q + q++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(int32(*(*uint8)(unsafe.Pointer(key))) << int32(1)) + if *(*uint8)(unsafe.Pointer(key)) != 0 { + key++ + } + } + X__des_setkey(tls, bp+128, bp) + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('_') { + /* + * "new"-style: + * setting - underscore, 4 chars of count, 4 chars of salt + * key - unlimited characters + */ + i = uint32(1) + count = Uint32FromInt32(0) + for { + if !(i < uint32(5)) { + break + } + value = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + count |= value << ((i - uint32(1)) * uint32(6)) + goto _2 + _2: + ; + i++ + } + if !(count != 0) { + return UintptrFromInt32(0) + } + i = uint32(5) + salt = Uint32FromInt32(0) + for { + if !(i < uint32(9)) { + break + } + value1 = _ascii_to_bin(tls, int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i))))) + if int32(_ascii64[value1]) != int32(*(*uint8)(unsafe.Pointer(setting + uintptr(i)))) { + return UintptrFromInt32(0) + } + salt |= value1 << ((i - uint32(5)) * uint32(6)) + goto _3 + _3: + ; + i++ + } + for *(*uint8)(unsafe.Pointer(key)) != 0 { + /* + * Encrypt the key with itself. + */ + _des_cipher(tls, bp+128, bp+128, uint32(1), uint32(0), bp) + /* + * And XOR with the next 8 characters of the key. + */ + q = bp + 128 + for q <= bp+128+uintptr(Uint64FromInt64(8)-Uint64FromInt32(1)) && *(*uint8)(unsafe.Pointer(key)) != 0 { + v5 = q + q++ + p4 = v5 + v6 = key + key++ + *(*uint8)(unsafe.Pointer(p4)) = uint8(int32(*(*uint8)(unsafe.Pointer(p4))) ^ int32(*(*uint8)(unsafe.Pointer(v6)))<> int32(8) + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v7)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v10 = p + p++ + *(*uint8)(unsafe.Pointer(v10)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 136))<>Int32FromInt32(16)&uint32(0xffff) + v11 = p + p++ + *(*uint8)(unsafe.Pointer(v11)) = _ascii64[l>>Int32FromInt32(18)&uint32(0x3f)] + v12 = p + p++ + *(*uint8)(unsafe.Pointer(v12)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v13 = p + p++ + *(*uint8)(unsafe.Pointer(v13)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v14 = p + p++ + *(*uint8)(unsafe.Pointer(v14)) = _ascii64[l&uint32(0x3f)] + l = *(*Tuint32_t)(unsafe.Pointer(bp + 140)) << int32(2) + v15 = p + p++ + *(*uint8)(unsafe.Pointer(v15)) = _ascii64[l>>Int32FromInt32(12)&uint32(0x3f)] + v16 = p + p++ + *(*uint8)(unsafe.Pointer(v16)) = _ascii64[l>>Int32FromInt32(6)&uint32(0x3f)] + v17 = p + p++ + *(*uint8)(unsafe.Pointer(v17)) = _ascii64[l&uint32(0x3f)] + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return output +} + +func X__crypt_des(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v setting=%v output=%v, (%v:)", tls, key, setting, output, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var p, retval, test_hash, test_key, test_setting, v1 uintptr + var _ /* test_buf at bp+0 */ [21]uint8 + _, _, _, _, _, _ = p, retval, test_hash, test_key, test_setting, v1 + test_key = __ccgo_ts + 72 + test_setting = __ccgo_ts + 93 + test_hash = __ccgo_ts + 103 + if int32(*(*uint8)(unsafe.Pointer(setting))) != int32('_') { + test_setting = __ccgo_ts + 124 + test_hash = __ccgo_ts + 127 + } + /* + * Hash the supplied password. + */ + retval = __crypt_extended_r_uut(tls, key, setting, output) + /* + * Perform a quick self-test. It is important that we make both calls + * to _crypt_extended_r_uut() from the same scope such that they likely + * use the same stack locations, which makes the second call overwrite + * the first call's sensitive data on the stack and makes it more + * likely that any alignment related issues would be detected. + */ + p = __crypt_extended_r_uut(tls, test_key, test_setting, bp) + if p != 0 && !(Xstrcmp(tls, p, test_hash) != 0) && retval != 0 { + return retval + } + if int32(*(*uint8)(unsafe.Pointer(setting))) == int32('*') { + v1 = __ccgo_ts + 141 + } else { + v1 = __ccgo_ts + 70 + } + return v1 +} + +const KEY_MAX = 30000 +const SALT_MAX = 8 + +/* public domain md5 implementation based on rfc1321 and libtomcrypt */ + +type Tmd5 = struct { + Flen1 Tuint64_t + Fh [4]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _rol(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n<>(Int32FromInt32(32)-k) +} + +var _tab = [64]Tuint32_t{ + 0: uint32(0xd76aa478), + 1: uint32(0xe8c7b756), + 2: uint32(0x242070db), + 3: uint32(0xc1bdceee), + 4: uint32(0xf57c0faf), + 5: uint32(0x4787c62a), + 6: uint32(0xa8304613), + 7: uint32(0xfd469501), + 8: uint32(0x698098d8), + 9: uint32(0x8b44f7af), + 10: uint32(0xffff5bb1), + 11: uint32(0x895cd7be), + 12: uint32(0x6b901122), + 13: uint32(0xfd987193), + 14: uint32(0xa679438e), + 15: uint32(0x49b40821), + 16: uint32(0xf61e2562), + 17: uint32(0xc040b340), + 18: uint32(0x265e5a51), + 19: uint32(0xe9b6c7aa), + 20: uint32(0xd62f105d), + 21: uint32(0x02441453), + 22: uint32(0xd8a1e681), + 23: uint32(0xe7d3fbc8), + 24: uint32(0x21e1cde6), + 25: uint32(0xc33707d6), + 26: uint32(0xf4d50d87), + 27: uint32(0x455a14ed), + 28: uint32(0xa9e3e905), + 29: uint32(0xfcefa3f8), + 30: uint32(0x676f02d9), + 31: uint32(0x8d2a4c8a), + 32: uint32(0xfffa3942), + 33: uint32(0x8771f681), + 34: uint32(0x6d9d6122), + 35: uint32(0xfde5380c), + 36: uint32(0xa4beea44), + 37: uint32(0x4bdecfa9), + 38: uint32(0xf6bb4b60), + 39: uint32(0xbebfbc70), + 40: uint32(0x289b7ec6), + 41: uint32(0xeaa127fa), + 42: uint32(0xd4ef3085), + 43: uint32(0x04881d05), + 44: uint32(0xd9d4d039), + 45: uint32(0xe6db99e5), + 46: uint32(0x1fa27cf8), + 47: uint32(0xc4ac5665), + 48: uint32(0xf4292244), + 49: uint32(0x432aff97), + 50: uint32(0xab9423a7), + 51: uint32(0xfc93a039), + 52: uint32(0x655b59c3), + 53: uint32(0x8f0ccc92), + 54: uint32(0xffeff47d), + 55: uint32(0x85845dd1), + 56: uint32(0x6fa87e4f), + 57: uint32(0xfe2ce6e0), + 58: uint32(0xa3014314), + 59: uint32(0x4e0811a1), + 60: uint32(0xf7537e82), + 61: uint32(0xbd3af235), + 62: uint32(0x2ad7d2bb), + 63: uint32(0xeb86d391), +} + +func _processblock(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, b, c, d, i Tuint32_t + var _ /* W at bp+0 */ [16]Tuint32_t + _, _, _, _, _ = a, b, c, d, i + i = uint32(0) + for { + if !(i < uint32(16)) { + break + } + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i)))) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(1))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(2))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(uint32(4)*i+uint32(3))))) << int32(24) + goto _1 + _1: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + i = uint32(0) + for i < uint32(16) { + a += d ^ b&(c^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + a = _rol(tls, a, int32(7)) + b + i++ + d += c ^ a&(b^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + d = _rol(tls, d, int32(12)) + a + i++ + c += b ^ d&(a^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + c = _rol(tls, c, int32(17)) + d + i++ + b += a ^ c&(d^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[i] + _tab[i] + b = _rol(tls, b, int32(22)) + c + i++ + } + for i < uint32(32) { + a += c ^ d&(c^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(5)) + b + i++ + d += b ^ c&(b^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(9)) + a + i++ + c += a ^ b&(a^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(14)) + d + i++ + b += d ^ a&(d^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(5)*i+uint32(1))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(20)) + c + i++ + } + for i < uint32(48) { + a += b ^ c ^ d + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(4)) + b + i++ + d += a ^ b ^ c + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(11)) + a + i++ + c += d ^ a ^ b + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(16)) + d + i++ + b += c ^ d ^ a + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[(uint32(3)*i+uint32(5))%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(23)) + c + i++ + } + for i < uint32(64) { + a += c ^ (b | ^d) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + a = _rol(tls, a, int32(6)) + b + i++ + d += b ^ (a | ^c) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + d = _rol(tls, d, int32(10)) + a + i++ + c += a ^ (d | ^b) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + c = _rol(tls, c, int32(15)) + d + i++ + b += d ^ (c | ^a) + (*(*[16]Tuint32_t)(unsafe.Pointer(bp)))[uint32(7)*i%uint32(16)] + _tab[i] + b = _rol(tls, b, int32(21)) + c + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d +} + +func _pad(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 24 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock(tls, s, s+24) + } + Xmemset(tls, s+24+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 56)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 57)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 58)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 59)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 60)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 61)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 62)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 24 + 63)) = uint8((*Tmd5)(unsafe.Pointer(s)).Flen1 >> int32(56)) + _processblock(tls, s, s+24) +} + +func _md5_init(tls *TLS, s uintptr) { + (*Tmd5)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x67452301) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xefcdab89) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x98badcfe) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0x10325476) +} + +func _md5_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad(tls, s) + i = 0 + for { + if !(i < int32(4)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + goto _1 + _1: + ; + i++ + } +} + +func _md5_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tmd5)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+24+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+24+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock(tls, s, s+24) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+24, p, len1) +} + +/*- + * Copyright (c) 2003 Poul-Henning Kamp + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* key limit is not part of the original design, added for DoS protection */ + +var _b64 = [65]uint8{'.', '/', '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', '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'} + +func _to64(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b64[u%uint32(64)] + u /= uint32(64) + } + return s +} + +func _md5crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r uintptr) { + bp := tls.Alloc(112) + defer tls.Free(112) + var i, klen, slen uint32 + var p, salt, v5 uintptr + var _ /* ctx at bp+0 */ Tmd5 + var _ /* md at bp+88 */ [16]uint8 + _, _, _, _, _, _ = i, klen, p, salt, slen, v5 + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX) { + return uintptr(0) + } + /* setting: $1$salt$ (closing $ is optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+143, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + i = uint32(0) + for { + if !(i < uint32(SALT_MAX) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + goto _1 + _1: + ; + i++ + } + slen = i + /* md5(key salt key) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, salt, uint64(slen)) + _md5_update(tls, bp, key, uint64(klen)) + _md5_sum(tls, bp, bp+88) + /* md5(key $1$ salt repeated-md weird-key[0]-0) */ + _md5_init(tls, bp) + _md5_update(tls, bp, key, uint64(klen)) + _md5_update(tls, bp, setting, uint64(uint32(3)+slen)) + i = klen + for { + if !(uint64(i) > uint64(16)) { + break + } + _md5_update(tls, bp, bp+88, uint64(16)) + goto _2 + _2: + ; + i = uint32(uint64(i) - Uint64FromInt64(16)) + } + _md5_update(tls, bp, bp+88, uint64(i)) + (*(*[16]uint8)(unsafe.Pointer(bp + 88)))[0] = uint8(0) + i = klen + for { + if !(i != 0) { + break + } + if i&uint32(1) != 0 { + _md5_update(tls, bp, bp+88, uint64(1)) + } else { + _md5_update(tls, bp, key, uint64(1)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _md5_sum(tls, bp, bp+88) + /* md = f(md, key, salt) iteration */ + i = uint32(0) + for { + if !(i < uint32(1000)) { + break + } + _md5_init(tls, bp) + if i%uint32(2) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } else { + _md5_update(tls, bp, bp+88, uint64(16)) + } + if i%uint32(3) != 0 { + _md5_update(tls, bp, salt, uint64(slen)) + } + if i%uint32(7) != 0 { + _md5_update(tls, bp, key, uint64(klen)) + } + if i%uint32(2) != 0 { + _md5_update(tls, bp, bp+88, uint64(16)) + } else { + _md5_update(tls, bp, key, uint64(klen)) + } + _md5_sum(tls, bp, bp+88) + goto _4 + _4: + ; + i++ + } + /* output is $1$salt$hash */ + Xmemcpy(tls, output, setting, uint64(uint32(3)+slen)) + p = output + uintptr(3) + uintptr(slen) + v5 = p + p++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('$') + i = uint32(0) + for { + if !(i < uint32(5)) { + break + } + p = _to64(tls, p, uint32(int32((*(*[16]uint8)(unsafe.Pointer(bp + 88)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var p, q uintptr + var _ /* testbuf at bp+0 */ [64]uint8 + _, _ = p, q + p = _md5crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _md5crypt(tls, uintptr(unsafe.Pointer(&_testkey)), uintptr(unsafe.Pointer(&_testsetting)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash)), uint64(35)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting = [13]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$'} + +var _testhash = [35]uint8{'$', '1', '$', 'a', 'b', 'c', 'd', '0', '1', '2', '3', '$', '9', 'Q', 'c', 'g', '8', 'D', 'y', 'v', 'i', 'e', 'k', 'V', '3', 't', 'D', 'G', 'M', 'Z', 'y', 'n', 'J', '1'} + +func X__crypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + var output uintptr + _ = output + /* Per the crypt_r API, the caller has provided a pointer to + * struct crypt_data; however, this implementation does not + * use the structure to store any internal state, and treats + * it purely as a char buffer for storing the result. */ + output = data + if int32(*(*uint8)(unsafe.Pointer(salt))) == int32('$') && *(*uint8)(unsafe.Pointer(salt + 1)) != 0 && *(*uint8)(unsafe.Pointer(salt + 2)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('1') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_md5(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('2') && int32(*(*uint8)(unsafe.Pointer(salt + 3))) == int32('$') { + return X__crypt_blowfish(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('5') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha256(tls, key, salt, output) + } + if int32(*(*uint8)(unsafe.Pointer(salt + 1))) == int32('6') && int32(*(*uint8)(unsafe.Pointer(salt + 2))) == int32('$') { + return X__crypt_sha512(tls, key, salt, output) + } + } + return X__crypt_des(tls, key, salt, output) +} + +func Xcrypt_r(tls *TLS, key uintptr, salt uintptr, data uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v salt=%v data=%v, (%v:)", tls, key, salt, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__crypt_r(tls, key, salt, data) +} + +const KEY_MAX1 = 256 +const ROUNDS_DEFAULT = 5000 +const ROUNDS_MAX = 9999999 +const ROUNDS_MIN = 1000 +const SALT_MAX1 = 16 + +/* public domain sha256 implementation based on fips180-3 */ + +type Tsha256 = struct { + Flen1 Tuint64_t + Fh [8]Tuint32_t + Fbuf [64]Tuint8_t +} + +func _ror(tls *TLS, n Tuint32_t, k int32) (r Tuint32_t) { + return n>>k | n<<(Int32FromInt32(32)-k) +} + +var _K = [64]Tuint32_t{ + 0: uint32(0x428a2f98), + 1: uint32(0x71374491), + 2: uint32(0xb5c0fbcf), + 3: uint32(0xe9b5dba5), + 4: uint32(0x3956c25b), + 5: uint32(0x59f111f1), + 6: uint32(0x923f82a4), + 7: uint32(0xab1c5ed5), + 8: uint32(0xd807aa98), + 9: uint32(0x12835b01), + 10: uint32(0x243185be), + 11: uint32(0x550c7dc3), + 12: uint32(0x72be5d74), + 13: uint32(0x80deb1fe), + 14: uint32(0x9bdc06a7), + 15: uint32(0xc19bf174), + 16: uint32(0xe49b69c1), + 17: uint32(0xefbe4786), + 18: uint32(0x0fc19dc6), + 19: uint32(0x240ca1cc), + 20: uint32(0x2de92c6f), + 21: uint32(0x4a7484aa), + 22: uint32(0x5cb0a9dc), + 23: uint32(0x76f988da), + 24: uint32(0x983e5152), + 25: uint32(0xa831c66d), + 26: uint32(0xb00327c8), + 27: uint32(0xbf597fc7), + 28: uint32(0xc6e00bf3), + 29: uint32(0xd5a79147), + 30: uint32(0x06ca6351), + 31: uint32(0x14292967), + 32: uint32(0x27b70a85), + 33: uint32(0x2e1b2138), + 34: uint32(0x4d2c6dfc), + 35: uint32(0x53380d13), + 36: uint32(0x650a7354), + 37: uint32(0x766a0abb), + 38: uint32(0x81c2c92e), + 39: uint32(0x92722c85), + 40: uint32(0xa2bfe8a1), + 41: uint32(0xa81a664b), + 42: uint32(0xc24b8b70), + 43: uint32(0xc76c51a3), + 44: uint32(0xd192e819), + 45: uint32(0xd6990624), + 46: uint32(0xf40e3585), + 47: uint32(0x106aa070), + 48: uint32(0x19a4c116), + 49: uint32(0x1e376c08), + 50: uint32(0x2748774c), + 51: uint32(0x34b0bcb5), + 52: uint32(0x391c0cb3), + 53: uint32(0x4ed8aa4a), + 54: uint32(0x5b9cca4f), + 55: uint32(0x682e6ff3), + 56: uint32(0x748f82ee), + 57: uint32(0x78a5636f), + 58: uint32(0x84c87814), + 59: uint32(0x8cc70208), + 60: uint32(0x90befffa), + 61: uint32(0xa4506ceb), + 62: uint32(0xbef9a3f7), + 63: uint32(0xc67178f2), +} + +func _processblock1(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(256) + defer tls.Free(256) + var a, b, c, d, e, f, g, h, t1, t2 Tuint32_t + var i int32 + var _ /* W at bp+0 */ [64]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i)))) << int32(24) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(1))))) << int32(16) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(2))))) << int32(8) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) |= uint32(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(4)*i+int32(3))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(64)) { + break + } + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] = _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(17)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(10) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(7)) ^ _ror(tls, (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(18)) ^ (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(3)) + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint32_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) + c = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) + d = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) + e = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) + f = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) + g = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) + h = *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) + i = 0 + for { + if !(i < int32(64)) { + break + } + t1 = h + (_ror(tls, e, int32(6)) ^ _ror(tls, e, int32(11)) ^ _ror(tls, e, int32(25))) + (g ^ e&(f^g)) + _K[i] + (*(*[64]Tuint32_t)(unsafe.Pointer(bp)))[i] + t2 = _ror(tls, a, int32(2)) ^ _ror(tls, a, int32(13)) ^ _ror(tls, a, int32(22)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint32_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) += b + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) += c + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) += d + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) += e + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) += f + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) += g + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) += h +} + +func _pad1(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 40 + uintptr(v1))) = uint8(0x80) + if r > uint32(56) { + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(64)-r)) + r = uint32(0) + _processblock1(tls, s, s+40) + } + Xmemset(tls, s+40+uintptr(r), 0, uint64(uint32(56)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 56)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 57)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 58)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 59)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 60)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 61)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 62)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 40 + 63)) = uint8((*Tsha256)(unsafe.Pointer(s)).Flen1) + _processblock1(tls, s, s+40) +} + +func _sha256_init(tls *TLS, s uintptr) { + (*Tsha256)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint32_t)(unsafe.Pointer(s + 8)) = uint32(0x6a09e667) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 1*4)) = uint32(0xbb67ae85) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 2*4)) = uint32(0x3c6ef372) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 3*4)) = uint32(0xa54ff53a) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 4*4)) = uint32(0x510e527f) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 5*4)) = uint32(0x9b05688c) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 6*4)) = uint32(0x1f83d9ab) + *(*Tuint32_t)(unsafe.Pointer(s + 8 + 7*4)) = uint32(0x5be0cd19) +} + +func _sha256_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad1(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(1)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(2)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(4)*i+int32(3)))) = uint8(*(*Tuint32_t)(unsafe.Pointer(s + 8 + uintptr(i)*4))) + goto _1 + _1: + ; + i++ + } +} + +func _sha256_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha256)(unsafe.Pointer(s)).Flen1 % uint64(64)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(64)-r) { + Xmemcpy(tls, s+40+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+40+uintptr(r), p, uint64(uint32(64)-r)) + len1 -= uint64(uint32(64) - r) + p += uintptr(uint32(64) - r) + _processblock1(tls, s, s+40) + } + for { + if !(len1 >= uint64(64)) { + break + } + _processblock1(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(64) + p += uintptr(64) + } + Xmemcpy(tls, s+40, p, len1) +} + +var _b641 = [65]uint8{'.', '/', '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', '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'} + +func _to641(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b641[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(32)) { + break + } + _sha256_update(tls, s, md, uint64(32)) + goto _1 + _1: + ; + i -= uint32(32) + } + _sha256_update(tls, s, md, uint64(i)) +} + +func _sha256crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(272) + defer tls.Free(272) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha256 + var _ /* end at bp+224 */ uintptr + var _ /* kmd at bp+136 */ [32]uint8 + var _ /* md at bp+104 */ [32]uint8 + var _ /* rounds at bp+200 */ [20]uint8 + var _ /* smd at bp+168 */ [32]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 200)) = [20]uint8{} + /* reject large keys */ + klen = uint32(Xstrnlen(tls, key, uint64(Int32FromInt32(KEY_MAX1)+Int32FromInt32(1)))) + if klen > uint32(KEY_MAX1) { + return uintptr(0) + } + /* setting: $5$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+147, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+224, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 224))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 224)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+200, __ccgo_ts+159, VaList(bp+240, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _1 + _1: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_sum(tls, bp, bp+104) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha256_init(tls, bp) + _sha256_update(tls, bp, key, uint64(klen)) + _sha256_update(tls, bp, salt, uint64(slen)) + _hashmd(tls, bp, klen, bp+104) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _sha256_update(tls, bp, key, uint64(klen)) + } + goto _2 + _2: + ; + i >>= uint32(1) + } + _sha256_sum(tls, bp, bp+104) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha256_update(tls, bp, key, uint64(klen)) + goto _3 + _3: + ; + i++ + } + _sha256_sum(tls, bp, bp+136) + /* DS = sha(repeat-salt) */ + _sha256_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[0]))) { + break + } + _sha256_update(tls, bp, salt, uint64(slen)) + goto _4 + _4: + ; + i++ + } + _sha256_sum(tls, bp, bp+168) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha256_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd(tls, bp, klen, bp+136) + } else { + _sha256_update(tls, bp, bp+104, uint64(32)) + } + if i%uint32(3) != 0 { + _sha256_update(tls, bp, bp+168, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd(tls, bp, klen, bp+136) + } + if i%uint32(2) != 0 { + _sha256_update(tls, bp, bp+104, uint64(32)) + } else { + _hashmd(tls, bp, klen, bp+136) + } + _sha256_sum(tls, bp, bp+104) + goto _5 + _5: + ; + i++ + } + /* output is $5$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+170, VaList(bp+240, bp+200, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(10)) { + break + } + p = _to641(tls, p, uint32(int32((*(*[32]uint8)(unsafe.Pointer(bp + 104)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm1)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha256crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha256crypt(tls, uintptr(unsafe.Pointer(&_testkey1)), uintptr(unsafe.Pointer(&_testsetting1)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash1)), uint64(73)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey1 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting1 = [30]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash1 = [73]uint8{'$', '5', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '3', 'V', 'f', 'D', 'j', 'P', 't', '0', '5', 'V', 'H', 'F', 'n', '4', '7', 'C', '/', 'o', 'j', 'F', 'Z', '6', 'K', 'R', 'P', 'Y', 'r', 'O', 'j', 'j', '1', 'l', 'L', 'b', 'H', '.', 'd', 'k', 'F', '3', 'b', 'Z', '6'} + +/* public domain sha512 implementation based on fips180-3 */ +/* >=2^64 bits messages are not supported (about 2000 peta bytes) */ + +type Tsha512 = struct { + Flen1 Tuint64_t + Fh [8]Tuint64_t + Fbuf [128]Tuint8_t +} + +func _ror1(tls *TLS, n Tuint64_t, k int32) (r Tuint64_t) { + return n>>k | n<<(Int32FromInt32(64)-k) +} + +var _K1 = [80]Tuint64_t{ + 0: uint64(0x428a2f98d728ae22), + 1: uint64(0x7137449123ef65cd), + 2: uint64(0xb5c0fbcfec4d3b2f), + 3: uint64(0xe9b5dba58189dbbc), + 4: uint64(0x3956c25bf348b538), + 5: uint64(0x59f111f1b605d019), + 6: uint64(0x923f82a4af194f9b), + 7: uint64(0xab1c5ed5da6d8118), + 8: uint64(0xd807aa98a3030242), + 9: uint64(0x12835b0145706fbe), + 10: uint64(0x243185be4ee4b28c), + 11: uint64(0x550c7dc3d5ffb4e2), + 12: uint64(0x72be5d74f27b896f), + 13: uint64(0x80deb1fe3b1696b1), + 14: uint64(0x9bdc06a725c71235), + 15: uint64(0xc19bf174cf692694), + 16: uint64(0xe49b69c19ef14ad2), + 17: uint64(0xefbe4786384f25e3), + 18: uint64(0x0fc19dc68b8cd5b5), + 19: uint64(0x240ca1cc77ac9c65), + 20: uint64(0x2de92c6f592b0275), + 21: uint64(0x4a7484aa6ea6e483), + 22: uint64(0x5cb0a9dcbd41fbd4), + 23: uint64(0x76f988da831153b5), + 24: uint64(0x983e5152ee66dfab), + 25: uint64(0xa831c66d2db43210), + 26: uint64(0xb00327c898fb213f), + 27: uint64(0xbf597fc7beef0ee4), + 28: uint64(0xc6e00bf33da88fc2), + 29: uint64(0xd5a79147930aa725), + 30: uint64(0x06ca6351e003826f), + 31: uint64(0x142929670a0e6e70), + 32: uint64(0x27b70a8546d22ffc), + 33: uint64(0x2e1b21385c26c926), + 34: uint64(0x4d2c6dfc5ac42aed), + 35: uint64(0x53380d139d95b3df), + 36: uint64(0x650a73548baf63de), + 37: uint64(0x766a0abb3c77b2a8), + 38: uint64(0x81c2c92e47edaee6), + 39: uint64(0x92722c851482353b), + 40: uint64(0xa2bfe8a14cf10364), + 41: uint64(0xa81a664bbc423001), + 42: uint64(0xc24b8b70d0f89791), + 43: uint64(0xc76c51a30654be30), + 44: uint64(0xd192e819d6ef5218), + 45: uint64(0xd69906245565a910), + 46: uint64(0xf40e35855771202a), + 47: uint64(0x106aa07032bbd1b8), + 48: uint64(0x19a4c116b8d2d0c8), + 49: uint64(0x1e376c085141ab53), + 50: uint64(0x2748774cdf8eeb99), + 51: uint64(0x34b0bcb5e19b48a8), + 52: uint64(0x391c0cb3c5c95a63), + 53: uint64(0x4ed8aa4ae3418acb), + 54: uint64(0x5b9cca4f7763e373), + 55: uint64(0x682e6ff3d6b2b8a3), + 56: uint64(0x748f82ee5defb2fc), + 57: uint64(0x78a5636f43172f60), + 58: uint64(0x84c87814a1f0ab72), + 59: uint64(0x8cc702081a6439ec), + 60: uint64(0x90befffa23631e28), + 61: uint64(0xa4506cebde82bde9), + 62: uint64(0xbef9a3f7b2c67915), + 63: uint64(0xc67178f2e372532b), + 64: uint64(0xca273eceea26619c), + 65: uint64(0xd186b8c721c0c207), + 66: uint64(0xeada7dd6cde0eb1e), + 67: uint64(0xf57d4f7fee6ed178), + 68: uint64(0x06f067aa72176fba), + 69: uint64(0x0a637dc5a2c898a6), + 70: uint64(0x113f9804bef90dae), + 71: uint64(0x1b710b35131c471b), + 72: uint64(0x28db77f523047d84), + 73: uint64(0x32caab7b40c72493), + 74: uint64(0x3c9ebe0a15c9bebc), + 75: uint64(0x431d67c49c100d4c), + 76: uint64(0x4cc5d4becb3e42b6), + 77: uint64(0x597f299cfc657e2a), + 78: uint64(0x5fcb6fab3ad6faec), + 79: uint64(0x6c44198c4a475817), +} + +func _processblock2(tls *TLS, s uintptr, buf uintptr) { + bp := tls.Alloc(640) + defer tls.Free(640) + var a, b, c, d, e, f, g, h, t1, t2 Tuint64_t + var i int32 + var _ /* W at bp+0 */ [80]Tuint64_t + _, _, _, _, _, _, _, _, _, _, _ = a, b, c, d, e, f, g, h, i, t1, t2 + i = 0 + for { + if !(i < int32(16)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i)))) << int32(56) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(1))))) << int32(48) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(2))))) << int32(40) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(3))))) << int32(32) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(4))))) << int32(24) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(5))))) << int32(16) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(6))))) << int32(8) + *(*Tuint64_t)(unsafe.Pointer(bp + uintptr(i)*8)) |= uint64(*(*Tuint8_t)(unsafe.Pointer(buf + uintptr(int32(8)*i+int32(7))))) + goto _1 + _1: + ; + i++ + } + for { + if !(i < int32(80)) { + break + } + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] = _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(19)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)], int32(61)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(2)]>>Int32FromInt32(6) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(7)] + (_ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(1)) ^ _ror1(tls, (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)], int32(8)) ^ (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(15)]>>Int32FromInt32(7)) + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i-int32(16)] + goto _2 + _2: + ; + i++ + } + a = *(*Tuint64_t)(unsafe.Pointer(s + 8)) + b = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) + c = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) + d = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) + e = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) + f = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) + g = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) + h = *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) + i = 0 + for { + if !(i < int32(80)) { + break + } + t1 = h + (_ror1(tls, e, int32(14)) ^ _ror1(tls, e, int32(18)) ^ _ror1(tls, e, int32(41))) + (g ^ e&(f^g)) + _K1[i] + (*(*[80]Tuint64_t)(unsafe.Pointer(bp)))[i] + t2 = _ror1(tls, a, int32(28)) ^ _ror1(tls, a, int32(34)) ^ _ror1(tls, a, int32(39)) + (a&b | c&(a|b)) + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + goto _3 + _3: + ; + i++ + } + *(*Tuint64_t)(unsafe.Pointer(s + 8)) += a + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) += b + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) += c + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) += d + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) += e + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) += f + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) += g + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) += h +} + +func _pad2(tls *TLS, s uintptr) { + var r, v1 uint32 + _, _ = r, v1 + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + v1 = r + r++ + *(*Tuint8_t)(unsafe.Pointer(s + 72 + uintptr(v1))) = uint8(0x80) + if r > uint32(112) { + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(128)-r)) + r = uint32(0) + _processblock2(tls, s, s+72) + } + Xmemset(tls, s+72+uintptr(r), 0, uint64(uint32(120)-r)) + *(*Tuint64_t)(unsafe.Pointer(s)) *= uint64(8) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 120)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 121)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 122)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 123)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 124)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 125)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 126)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1 >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(s + 72 + 127)) = uint8((*Tsha512)(unsafe.Pointer(s)).Flen1) + _processblock2(tls, s, s+72) +} + +func _sha512_init(tls *TLS, s uintptr) { + (*Tsha512)(unsafe.Pointer(s)).Flen1 = uint64(0) + *(*Tuint64_t)(unsafe.Pointer(s + 8)) = uint64(0x6a09e667f3bcc908) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 1*8)) = uint64(0xbb67ae8584caa73b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 2*8)) = uint64(0x3c6ef372fe94f82b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 3*8)) = uint64(0xa54ff53a5f1d36f1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 4*8)) = uint64(0x510e527fade682d1) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 5*8)) = uint64(0x9b05688c2b3e6c1f) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 6*8)) = uint64(0x1f83d9abfb41bd6b) + *(*Tuint64_t)(unsafe.Pointer(s + 8 + 7*8)) = uint64(0x5be0cd19137e2179) +} + +func _sha512_sum(tls *TLS, s uintptr, md uintptr) { + var i int32 + _ = i + _pad2(tls, s) + i = 0 + for { + if !(i < int32(8)) { + break + } + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(56)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(1)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(48)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(2)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(40)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(3)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(32)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(4)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(24)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(5)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(16)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(6)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8)) >> int32(8)) + *(*Tuint8_t)(unsafe.Pointer(md + uintptr(int32(8)*i+int32(7)))) = uint8(*(*Tuint64_t)(unsafe.Pointer(s + 8 + uintptr(i)*8))) + goto _1 + _1: + ; + i++ + } +} + +func _sha512_update(tls *TLS, s uintptr, m uintptr, len1 uint64) { + var p uintptr + var r uint32 + _, _ = p, r + p = m + r = uint32((*Tsha512)(unsafe.Pointer(s)).Flen1 % uint64(128)) + *(*Tuint64_t)(unsafe.Pointer(s)) += len1 + if r != 0 { + if len1 < uint64(uint32(128)-r) { + Xmemcpy(tls, s+72+uintptr(r), p, len1) + return + } + Xmemcpy(tls, s+72+uintptr(r), p, uint64(uint32(128)-r)) + len1 -= uint64(uint32(128) - r) + p += uintptr(uint32(128) - r) + _processblock2(tls, s, s+72) + } + for { + if !(len1 >= uint64(128)) { + break + } + _processblock2(tls, s, p) + goto _1 + _1: + ; + len1 -= uint64(128) + p += uintptr(128) + } + Xmemcpy(tls, s+72, p, len1) +} + +var _b642 = [65]uint8{'.', '/', '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', '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'} + +func _to642(tls *TLS, s uintptr, u uint32, n int32) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + for { + n-- + v1 = n + if !(v1 >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _b642[u%uint32(64)] + u /= uint32(64) + } + return s +} + +/* key limit is not part of the original design, added for DoS protection. + * rounds limit has been lowered (versus the reference/spec), also for DoS + * protection. runtime is O(klen^2 + klen*rounds) */ + +// C documentation +// +// /* hash n bytes of the repeated md message digest */ +func _hashmd1(tls *TLS, s uintptr, n uint32, md uintptr) { + var i uint32 + _ = i + i = n + for { + if !(i > uint32(64)) { + break + } + _sha512_update(tls, s, md, uint64(64)) + goto _1 + _1: + ; + i -= uint32(64) + } + _sha512_update(tls, s, md, uint64(i)) +} + +func _sha512crypt(tls *TLS, key uintptr, setting uintptr, output uintptr) (r1 uintptr) { + bp := tls.Alloc(464) + defer tls.Free(464) + var i, klen, r, slen uint32 + var p, salt uintptr + var u uint64 + var _ /* ctx at bp+0 */ Tsha512 + var _ /* end at bp+416 */ uintptr + var _ /* kmd at bp+264 */ [64]uint8 + var _ /* md at bp+200 */ [64]uint8 + var _ /* rounds at bp+392 */ [20]uint8 + var _ /* smd at bp+328 */ [64]uint8 + _, _, _, _, _, _, _ = i, klen, p, r, salt, slen, u + *(*[20]uint8)(unsafe.Pointer(bp + 392)) = [20]uint8{} + /* reject large keys */ + i = uint32(0) + for { + if !(i <= uint32(KEY_MAX1) && *(*uint8)(unsafe.Pointer(key + uintptr(i))) != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i > uint32(KEY_MAX1) { + return uintptr(0) + } + klen = i + /* setting: $6$rounds=n$salt$ (rounds=n$ and closing $ are optional) */ + if Xstrncmp(tls, setting, __ccgo_ts+181, uint64(3)) != 0 { + return uintptr(0) + } + salt = setting + uintptr(3) + r = uint32(ROUNDS_DEFAULT) + if Xstrncmp(tls, salt, __ccgo_ts+151, Uint64FromInt64(8)-Uint64FromInt32(1)) == 0 { + /* + * this is a deviation from the reference: + * bad rounds setting is rejected if it is + * - empty + * - unterminated (missing '$') + * - begins with anything but a decimal digit + * the reference implementation treats these bad + * rounds as part of the salt or parse them with + * strtoul semantics which may cause problems + * including non-portable hashes that depend on + * the host's value of ULONG_MAX. + */ + salt += uintptr(Uint64FromInt64(8) - Uint64FromInt32(1)) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(salt)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + u = Xstrtoul(tls, salt, bp+416, int32(10)) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 416))))) != int32('$') { + return uintptr(0) + } + salt = *(*uintptr)(unsafe.Pointer(bp + 416)) + uintptr(1) + if u < uint64(ROUNDS_MIN) { + r = uint32(ROUNDS_MIN) + } else { + if u > uint64(ROUNDS_MAX) { + return uintptr(0) + } else { + r = uint32(u) + } + } + /* needed when rounds is zero prefixed or out of bounds */ + Xsprintf(tls, bp+392, __ccgo_ts+159, VaList(bp+432, r)) + } + i = uint32(0) + for { + if !(i < uint32(SALT_MAX1) && *(*uint8)(unsafe.Pointer(salt + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) != int32('$')) { + break + } + /* reject characters that interfere with /etc/shadow parsing */ + if int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32('\n') || int32(*(*uint8)(unsafe.Pointer(salt + uintptr(i)))) == int32(':') { + return uintptr(0) + } + goto _2 + _2: + ; + i++ + } + slen = i + /* B = sha(key salt key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_sum(tls, bp, bp+200) + /* A = sha(key salt repeat-B alternate-B-key) */ + _sha512_init(tls, bp) + _sha512_update(tls, bp, key, uint64(klen)) + _sha512_update(tls, bp, salt, uint64(slen)) + _hashmd1(tls, bp, klen, bp+200) + i = klen + for { + if !(i > uint32(0)) { + break + } + if i&uint32(1) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _sha512_update(tls, bp, key, uint64(klen)) + } + goto _3 + _3: + ; + i >>= uint32(1) + } + _sha512_sum(tls, bp, bp+200) + /* DP = sha(repeat-key), this step takes O(klen^2) time */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < klen) { + break + } + _sha512_update(tls, bp, key, uint64(klen)) + goto _4 + _4: + ; + i++ + } + _sha512_sum(tls, bp, bp+264) + /* DS = sha(repeat-salt) */ + _sha512_init(tls, bp) + i = uint32(0) + for { + if !(i < uint32(int32(16)+int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[0]))) { + break + } + _sha512_update(tls, bp, salt, uint64(slen)) + goto _5 + _5: + ; + i++ + } + _sha512_sum(tls, bp, bp+328) + /* iterate A = f(A,DP,DS), this step takes O(rounds*klen) time */ + i = uint32(0) + for { + if !(i < r) { + break + } + _sha512_init(tls, bp) + if i%uint32(2) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } else { + _sha512_update(tls, bp, bp+200, uint64(64)) + } + if i%uint32(3) != 0 { + _sha512_update(tls, bp, bp+328, uint64(slen)) + } + if i%uint32(7) != 0 { + _hashmd1(tls, bp, klen, bp+264) + } + if i%uint32(2) != 0 { + _sha512_update(tls, bp, bp+200, uint64(64)) + } else { + _hashmd1(tls, bp, klen, bp+264) + } + _sha512_sum(tls, bp, bp+200) + goto _6 + _6: + ; + i++ + } + /* output is $6$rounds=n$salt$hash */ + p = output + p += uintptr(Xsprintf(tls, p, __ccgo_ts+185, VaList(bp+432, bp+392, slen, salt))) + i = uint32(0) + for { + if !(i < uint32(21)) { + break + } + p = _to642(tls, p, uint32(int32((*(*[64]uint8)(unsafe.Pointer(bp + 200)))[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_perm2)) + uintptr(i)*3))])< %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var p, q uintptr + var _ /* testbuf at bp+0 */ [128]uint8 + _, _ = p, q + p = _sha512crypt(tls, key, setting, output) + /* self test and stack cleanup */ + q = _sha512crypt(tls, uintptr(unsafe.Pointer(&_testkey2)), uintptr(unsafe.Pointer(&_testsetting2)), bp) + if !(p != 0) || q != bp || Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&_testhash2)), uint64(116)) != 0 { + return __ccgo_ts + 70 + } + return p +} + +var _testkey2 = [18]uint8{'X', 'y', '0', '1', '@', '#', 1, 2, 128, 127, 255, 13, 10, 129, 9, ' ', '!'} + +var _testsetting2 = [30]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$'} + +var _testhash2 = [116]uint8{'$', '6', '$', 'r', 'o', 'u', 'n', 'd', 's', '=', '1', '2', '3', '4', '$', 'a', 'b', 'c', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', 'B', 'C', 'p', 't', '8', 'z', 'L', 'r', 'c', '/', 'R', 'c', 'y', 'u', 'X', 'm', 'C', 'D', 'O', 'E', '1', 'A', 'L', 'q', 'M', 'X', 'B', '2', 'M', 'H', '6', 'n', '1', 'g', '8', '9', '1', 'H', 'h', 'F', 'j', '8', '.', 'w', '7', 'L', 'x', 'G', 'v', '.', 'F', 'T', 'k', 'q', 'q', '6', 'V', 'x', 'c', '/', 'k', 'm', '3', 'Y', '0', 'j', 'E', '0', 'j', '2', '4', 'j', 'Y', '5', 'P', 'I', 'v', '/', 'o', 'O', 'u', '6', 'r', 'e', 'g', '1'} + +var ___encrypt_key Texpanded_key + +func Xsetkey(tls *TLS, key uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v, (%v:)", tls, key, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, j int32 + var p3 uintptr + var _ /* bkey at bp+0 */ [8]uint8 + _, _, _ = i, j, p3 + i = 0 + for { + if !(i < int32(8)) { + break + } + (*(*[8]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + j = int32(7) + for { + if !(j >= 0) { + break + } + p3 = bp + uintptr(i) + *(*uint8)(unsafe.Pointer(p3)) = uint8(uint32(*(*uint8)(unsafe.Pointer(p3))) | uint32(int32(*(*uint8)(unsafe.Pointer(key)))&Int32FromInt32(1))<= 0) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + 128 + uintptr(i)*4)) |= uint32(int32(*(*uint8)(unsafe.Pointer(p)))&Int32FromInt32(1)) << j + goto _2 + _2: + ; + j-- + p++ + } + goto _1 + _1: + ; + i++ + } + key = uintptr(unsafe.Pointer(&___encrypt_key)) + if edflag != 0 { + key = bp + i = 0 + for { + if !(i < int32(16)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + uintptr(int32(15)-i)*4)) + *(*Tuint32_t)(unsafe.Pointer(bp + 64 + uintptr(i)*4)) = *(*Tuint32_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&___encrypt_key)) + 64 + uintptr(int32(15)-i)*4)) + goto _3 + _3: + ; + i++ + } + } + X__do_des(tls, (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[0], (*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[int32(1)], bp+128, bp+128+uintptr(1)*4, uint32(1), uint32(0), key) + p = block + i = 0 + for { + if !(i < int32(2)) { + break + } + j = int32(31) + for { + if !(j >= 0) { + break + } + v6 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = uint8((*(*[2]Tuint32_t)(unsafe.Pointer(bp + 128)))[i] >> j & uint32(1)) + goto _5 + _5: + ; + j-- + } + goto _4 + _4: + ; + i++ + } +} + +var _table = [384]uint16{ + 128: uint16(0x200), + 129: uint16(0x200), + 130: uint16(0x200), + 131: uint16(0x200), + 132: uint16(0x200), + 133: uint16(0x200), + 134: uint16(0x200), + 135: uint16(0x200), + 136: uint16(0x200), + 137: uint16(0x320), + 138: uint16(0x220), + 139: uint16(0x220), + 140: uint16(0x220), + 141: uint16(0x220), + 142: uint16(0x200), + 143: uint16(0x200), + 144: uint16(0x200), + 145: uint16(0x200), + 146: uint16(0x200), + 147: uint16(0x200), + 148: uint16(0x200), + 149: uint16(0x200), + 150: uint16(0x200), + 151: uint16(0x200), + 152: uint16(0x200), + 153: uint16(0x200), + 154: uint16(0x200), + 155: uint16(0x200), + 156: uint16(0x200), + 157: uint16(0x200), + 158: uint16(0x200), + 159: uint16(0x200), + 160: uint16(0x160), + 161: uint16(0x4c0), + 162: uint16(0x4c0), + 163: uint16(0x4c0), + 164: uint16(0x4c0), + 165: uint16(0x4c0), + 166: uint16(0x4c0), + 167: uint16(0x4c0), + 168: uint16(0x4c0), + 169: uint16(0x4c0), + 170: uint16(0x4c0), + 171: uint16(0x4c0), + 172: uint16(0x4c0), + 173: uint16(0x4c0), + 174: uint16(0x4c0), + 175: uint16(0x4c0), + 176: uint16(0x8d8), + 177: uint16(0x8d8), + 178: uint16(0x8d8), + 179: uint16(0x8d8), + 180: uint16(0x8d8), + 181: uint16(0x8d8), + 182: uint16(0x8d8), + 183: uint16(0x8d8), + 184: uint16(0x8d8), + 185: uint16(0x8d8), + 186: uint16(0x4c0), + 187: uint16(0x4c0), + 188: uint16(0x4c0), + 189: uint16(0x4c0), + 190: uint16(0x4c0), + 191: uint16(0x4c0), + 192: uint16(0x4c0), + 193: uint16(0x8d5), + 194: uint16(0x8d5), + 195: uint16(0x8d5), + 196: uint16(0x8d5), + 197: uint16(0x8d5), + 198: uint16(0x8d5), + 199: uint16(0x8c5), + 200: uint16(0x8c5), + 201: uint16(0x8c5), + 202: uint16(0x8c5), + 203: uint16(0x8c5), + 204: uint16(0x8c5), + 205: uint16(0x8c5), + 206: uint16(0x8c5), + 207: uint16(0x8c5), + 208: uint16(0x8c5), + 209: uint16(0x8c5), + 210: uint16(0x8c5), + 211: uint16(0x8c5), + 212: uint16(0x8c5), + 213: uint16(0x8c5), + 214: uint16(0x8c5), + 215: uint16(0x8c5), + 216: uint16(0x8c5), + 217: uint16(0x8c5), + 218: uint16(0x8c5), + 219: uint16(0x4c0), + 220: uint16(0x4c0), + 221: uint16(0x4c0), + 222: uint16(0x4c0), + 223: uint16(0x4c0), + 224: uint16(0x4c0), + 225: uint16(0x8d6), + 226: uint16(0x8d6), + 227: uint16(0x8d6), + 228: uint16(0x8d6), + 229: uint16(0x8d6), + 230: uint16(0x8d6), + 231: uint16(0x8c6), + 232: uint16(0x8c6), + 233: uint16(0x8c6), + 234: uint16(0x8c6), + 235: uint16(0x8c6), + 236: uint16(0x8c6), + 237: uint16(0x8c6), + 238: uint16(0x8c6), + 239: uint16(0x8c6), + 240: uint16(0x8c6), + 241: uint16(0x8c6), + 242: uint16(0x8c6), + 243: uint16(0x8c6), + 244: uint16(0x8c6), + 245: uint16(0x8c6), + 246: uint16(0x8c6), + 247: uint16(0x8c6), + 248: uint16(0x8c6), + 249: uint16(0x8c6), + 250: uint16(0x8c6), + 251: uint16(0x4c0), + 252: uint16(0x4c0), + 253: uint16(0x4c0), + 254: uint16(0x4c0), + 255: uint16(0x200), +} + +var _ptable = uintptr(unsafe.Pointer(&_table)) + uintptr(128)*2 + +func X__ctype_b_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable)) +} + +const CLOCKS_PER_SEC = 1000000 +const CLOCK_BOOTTIME = 7 +const CLOCK_BOOTTIME_ALARM = 9 +const CLOCK_MONOTONIC = 1 +const CLOCK_MONOTONIC_COARSE = 6 +const CLOCK_MONOTONIC_RAW = 4 +const CLOCK_PROCESS_CPUTIME_ID = 2 +const CLOCK_REALTIME = 0 +const CLOCK_REALTIME_ALARM = 8 +const CLOCK_REALTIME_COARSE = 5 +const CLOCK_SGI_CYCLE = 10 +const CLOCK_TAI = 11 +const CLOCK_THREAD_CPUTIME_ID = 3 +const C_LOCALE = 0 +const DEFAULT_GUARD_MAX = 1048576 +const DEFAULT_GUARD_SIZE = 8192 +const DEFAULT_STACK_MAX = 8388608 +const DEFAULT_STACK_SIZE = 131072 +const DTP_OFFSET = 0 +const FUTEX_CLOCK_REALTIME = 256 +const FUTEX_CMP_REQUEUE = 4 +const FUTEX_FD = 2 +const FUTEX_LOCK_PI = 6 +const FUTEX_PRIVATE = 128 +const FUTEX_REQUEUE = 3 +const FUTEX_TRYLOCK_PI = 8 +const FUTEX_UNLOCK_PI = 7 +const FUTEX_WAIT = 0 +const FUTEX_WAIT_BITSET = 9 +const FUTEX_WAKE = 1 +const FUTEX_WAKE_OP = 5 +const LC_ALL = 6 +const LC_ALL_MASK = 2147483647 +const LC_COLLATE = 3 +const LC_COLLATE_MASK = 8 +const LC_CTYPE = 0 +const LC_CTYPE_MASK = 1 +const LC_GLOBAL_LOCALE = -1 +const LC_MESSAGES = 5 +const LC_MESSAGES_MASK = 32 +const LC_MONETARY = 4 +const LC_MONETARY_MASK = 16 +const LC_NUMERIC = 1 +const LC_NUMERIC_MASK = 2 +const LC_TIME = 2 +const LC_TIME_MASK = 4 +const LOCALE_NAME_MAX = 23 +const MAP_ANON = 32 +const MAP_ANONYMOUS = 32 +const MAP_DENYWRITE = 2048 +const MAP_EXECUTABLE = 4096 +const MAP_FAILED = -1 +const MAP_FILE = 0 +const MAP_FIXED = 16 +const MAP_FIXED_NOREPLACE = 1048576 +const MAP_GROWSDOWN = 256 +const MAP_HUGETLB = 262144 +const MAP_HUGE_16GB = 2281701376 +const MAP_HUGE_16KB = 939524096 +const MAP_HUGE_16MB = 1610612736 +const MAP_HUGE_1GB = 2013265920 +const MAP_HUGE_1MB = 1342177280 +const MAP_HUGE_256MB = 1879048192 +const MAP_HUGE_2GB = 2080374784 +const MAP_HUGE_2MB = 1409286144 +const MAP_HUGE_32MB = 1677721600 +const MAP_HUGE_512KB = 1275068416 +const MAP_HUGE_512MB = 1946157056 +const MAP_HUGE_64KB = 1073741824 +const MAP_HUGE_8MB = 1543503872 +const MAP_HUGE_MASK = 63 +const MAP_HUGE_SHIFT = 26 +const MAP_LOCKED = 8192 +const MAP_NONBLOCK = 65536 +const MAP_NORESERVE = 16384 +const MAP_POPULATE = 32768 +const MAP_PRIVATE = 2 +const MAP_SHARED = 1 +const MAP_SHARED_VALIDATE = 3 +const MAP_STACK = 131072 +const MAP_SYNC = 524288 +const MAP_TYPE = 15 +const MCL_CURRENT = 1 +const MCL_FUTURE = 2 +const MCL_ONFAULT = 4 +const MS_ASYNC = 1 +const MS_INVALIDATE = 2 +const MS_SYNC = 4 +const POSIX_MADV_DONTNEED = 4 +const POSIX_MADV_NORMAL = 0 +const POSIX_MADV_RANDOM = 1 +const POSIX_MADV_SEQUENTIAL = 2 +const POSIX_MADV_WILLNEED = 3 +const PROT_EXEC = 4 +const PROT_GROWSDOWN = 16777216 +const PROT_GROWSUP = 33554432 +const PROT_NONE = 0 +const PROT_READ = 1 +const PROT_WRITE = 2 +const PTHREAD_BARRIER_SERIAL_THREAD = -1 +const PTHREAD_CANCELED = -1 +const PTHREAD_CANCEL_ASYNCHRONOUS = 1 +const PTHREAD_CANCEL_DEFERRED = 0 +const PTHREAD_CANCEL_DISABLE = 1 +const PTHREAD_CANCEL_ENABLE = 0 +const PTHREAD_CANCEL_MASKED = 2 +const PTHREAD_CREATE_DETACHED = 1 +const PTHREAD_CREATE_JOINABLE = 0 +const PTHREAD_EXPLICIT_SCHED = 1 +const PTHREAD_INHERIT_SCHED = 0 +const PTHREAD_MUTEX_DEFAULT = 0 +const PTHREAD_MUTEX_ERRORCHECK = 2 +const PTHREAD_MUTEX_NORMAL = 0 +const PTHREAD_MUTEX_RECURSIVE = 1 +const PTHREAD_MUTEX_ROBUST = 1 +const PTHREAD_MUTEX_STALLED = 0 +const PTHREAD_ONCE_INIT = 0 +const PTHREAD_PRIO_INHERIT = 1 +const PTHREAD_PRIO_NONE = 0 +const PTHREAD_PRIO_PROTECT = 2 +const PTHREAD_PROCESS_PRIVATE = 0 +const PTHREAD_PROCESS_SHARED = 1 +const PTHREAD_SCOPE_PROCESS = 1 +const PTHREAD_SCOPE_SYSTEM = 0 +const SCHED_BATCH = 3 +const SCHED_DEADLINE = 6 +const SCHED_FIFO = 1 +const SCHED_IDLE = 5 +const SCHED_OTHER = 0 +const SCHED_RESET_ON_FORK = 1073741824 +const SCHED_RR = 2 +const SIGCANCEL = 33 +const SIGSYNCCALL = 34 +const SIGTIMER = 32 +const TIMER_ABSTIME = 1 +const TIME_UTC = 1 +const TP_OFFSET = 0 +const UTF8_LOCALE = 0 +const __CCGO_SIZEOF_GO_MUTEX = 8 +const __SU = 0 +const a_spin = 0 +const pthread = 0 +const tls_mod_off_t = 0 + +type Tlconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits uint8 + Ffrac_digits uint8 + Fp_cs_precedes uint8 + Fp_sep_by_space uint8 + Fn_cs_precedes uint8 + Fn_sep_by_space uint8 + Fp_sign_posn uint8 + Fn_sign_posn uint8 + Fint_p_cs_precedes uint8 + Fint_p_sep_by_space uint8 + Fint_n_cs_precedes uint8 + Fint_n_sep_by_space uint8 + Fint_p_sign_posn uint8 + Fint_n_sign_posn uint8 +} + +type t__locale_map = struct { + Fmap1 uintptr + Fmap_size Tsize_t + Fname [24]uint8 + Fnext uintptr +} + +type Tclockid_t = int32 + +type t__pthread = struct { + Fself uintptr + Fdtv uintptr + Fprev uintptr + Fnext uintptr + Fsysinfo Tuintptr_t + Fcanary Tuintptr_t + Ftid int32 + Ferrno_val int32 + Fdetach_state int32 + Fcancel int32 + Fcanceldisable uint8 + Fcancelasync uint8 + F__ccgo66 uint8 + Fmap_base uintptr + Fmap_size Tsize_t + Fstack uintptr + Fstack_size Tsize_t + Fguard_size Tsize_t + Fresult uintptr + Fcancelbuf uintptr + Ftsd uintptr + Frobust_list struct { + Fhead uintptr + Foff int64 + Fpending uintptr + } + Fh_errno_val int32 + Ftimer_id int32 + Flocale Tlocale_t + Fkilllock [1]int32 + Fdlerror_buf uintptr + Fstdio_locks uintptr + F__ccgo_join_mutex [1]int64 +} + +type Tpthread_once_t = int32 + +type Tpthread_key_t = uint32 + +type Tpthread_spinlock_t = int32 + +type Tpthread_mutexattr_t = struct { + F__attr uint32 +} + +type Tpthread_condattr_t = struct { + F__attr uint32 +} + +type Tpthread_barrierattr_t = struct { + F__attr uint32 +} + +type Tpthread_rwlockattr_t = struct { + F__attr [2]uint32 +} + +type Tpthread_mutex_t = struct { + F__u struct { + F__vi [0][10]int32 + F__p [0][5]uintptr + F__i [10]int32 + } +} + +type Tpthread_cond_t = struct { + F__u struct { + F__vi [0][12]int32 + F__p [0][6]uintptr + F__i [12]int32 + } +} + +type Tpthread_rwlock_t = struct { + F__u struct { + F__vi [0][14]int32 + F__p [0][7]uintptr + F__i [14]int32 + } +} + +type Tpthread_barrier_t = struct { + F__u struct { + F__vi [0][8]int32 + F__p [0][4]uintptr + F__i [8]int32 + } +} + +type Tsched_param = struct { + Fsched_priority int32 + F__reserved1 int32 + F__reserved2 [2]struct { + F__reserved1 Ttime_t + F__reserved2 int64 + } + F__reserved3 int32 +} + +type Ttimer_t = uintptr + +type Ttm = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + F__tm_gmtoff int64 + F__tm_zone uintptr +} + +type Titimerspec = struct { + Fit_interval Ttimespec + Fit_value Ttimespec +} + +type t__ptcb = struct { + F__f uintptr + F__x uintptr + F__next uintptr +} + +type Tmode_t = uint32 + +const _DT_EXITED = 0 +const _DT_EXITING = 1 +const _DT_JOINABLE = 2 +const _DT_DETACHED = 3 + +func X__ctype_get_mb_cur_max(tls *TLS) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + return uint64(v1) +} + +var _table1 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('a'), + 194: int32('b'), + 195: int32('c'), + 196: int32('d'), + 197: int32('e'), + 198: int32('f'), + 199: int32('g'), + 200: int32('h'), + 201: int32('i'), + 202: int32('j'), + 203: int32('k'), + 204: int32('l'), + 205: int32('m'), + 206: int32('n'), + 207: int32('o'), + 208: int32('p'), + 209: int32('q'), + 210: int32('r'), + 211: int32('s'), + 212: int32('t'), + 213: int32('u'), + 214: int32('v'), + 215: int32('w'), + 216: int32('x'), + 217: int32('y'), + 218: int32('z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('a'), + 226: int32('b'), + 227: int32('c'), + 228: int32('d'), + 229: int32('e'), + 230: int32('f'), + 231: int32('g'), + 232: int32('h'), + 233: int32('i'), + 234: int32('j'), + 235: int32('k'), + 236: int32('l'), + 237: int32('m'), + 238: int32('n'), + 239: int32('o'), + 240: int32('p'), + 241: int32('q'), + 242: int32('r'), + 243: int32('s'), + 244: int32('t'), + 245: int32('u'), + 246: int32('v'), + 247: int32('w'), + 248: int32('x'), + 249: int32('y'), + 250: int32('z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 + +func X__ctype_tolower_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable1)) +} + +var _table2 = [384]Tint32_t{ + 129: int32(1), + 130: int32(2), + 131: int32(3), + 132: int32(4), + 133: int32(5), + 134: int32(6), + 135: int32(7), + 136: int32(8), + 137: int32(9), + 138: int32(10), + 139: int32(11), + 140: int32(12), + 141: int32(13), + 142: int32(14), + 143: int32(15), + 144: int32(16), + 145: int32(17), + 146: int32(18), + 147: int32(19), + 148: int32(20), + 149: int32(21), + 150: int32(22), + 151: int32(23), + 152: int32(24), + 153: int32(25), + 154: int32(26), + 155: int32(27), + 156: int32(28), + 157: int32(29), + 158: int32(30), + 159: int32(31), + 160: int32(32), + 161: int32(33), + 162: int32(34), + 163: int32(35), + 164: int32(36), + 165: int32(37), + 166: int32(38), + 167: int32(39), + 168: int32(40), + 169: int32(41), + 170: int32(42), + 171: int32(43), + 172: int32(44), + 173: int32(45), + 174: int32(46), + 175: int32(47), + 176: int32(48), + 177: int32(49), + 178: int32(50), + 179: int32(51), + 180: int32(52), + 181: int32(53), + 182: int32(54), + 183: int32(55), + 184: int32(56), + 185: int32(57), + 186: int32(58), + 187: int32(59), + 188: int32(60), + 189: int32(61), + 190: int32(62), + 191: int32(63), + 192: int32(64), + 193: int32('A'), + 194: int32('B'), + 195: int32('C'), + 196: int32('D'), + 197: int32('E'), + 198: int32('F'), + 199: int32('G'), + 200: int32('H'), + 201: int32('I'), + 202: int32('J'), + 203: int32('K'), + 204: int32('L'), + 205: int32('M'), + 206: int32('N'), + 207: int32('O'), + 208: int32('P'), + 209: int32('Q'), + 210: int32('R'), + 211: int32('S'), + 212: int32('T'), + 213: int32('U'), + 214: int32('V'), + 215: int32('W'), + 216: int32('X'), + 217: int32('Y'), + 218: int32('Z'), + 219: int32(91), + 220: int32(92), + 221: int32(93), + 222: int32(94), + 223: int32(95), + 224: int32(96), + 225: int32('A'), + 226: int32('B'), + 227: int32('C'), + 228: int32('D'), + 229: int32('E'), + 230: int32('F'), + 231: int32('G'), + 232: int32('H'), + 233: int32('I'), + 234: int32('J'), + 235: int32('K'), + 236: int32('L'), + 237: int32('M'), + 238: int32('N'), + 239: int32('O'), + 240: int32('P'), + 241: int32('Q'), + 242: int32('R'), + 243: int32('S'), + 244: int32('T'), + 245: int32('U'), + 246: int32('V'), + 247: int32('W'), + 248: int32('X'), + 249: int32('Y'), + 250: int32('Z'), + 251: int32(123), + 252: int32(124), + 253: int32(125), + 254: int32(126), + 255: int32(127), +} + +var _ptable2 = uintptr(unsafe.Pointer(&_table2)) + uintptr(128)*4 + +func X__ctype_toupper_loc(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_ptable2)) +} + +func Xisalnum(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) != 0 || BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0) +} + +func X__isalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalnum(tls, c) +} + +func Xisalnum_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalnum_l(tls, c, l) +} + +func Xisalpha(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) +} + +func X__isalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisalpha(tls, c) +} + +func Xisalpha_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isalpha_l(tls, c, l) +} + +func Xisascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(c & ^Int32FromInt32(0x7f) != 0)) +} + +func Xisblank(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || c == int32('\t')) +} + +func X__isblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, c) +} + +func Xisblank_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isblank_l(tls, c, l) +} + +func Xiscntrl(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c) < uint32(0x20) || c == int32(0x7f)) +} + +func X__iscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiscntrl(tls, c) +} + +func Xiscntrl_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iscntrl_l(tls, c, l) +} + +func Xisdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('0') < uint32(10)) +} + +func X__isdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisdigit(tls, c) +} + +func Xisdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isdigit_l(tls, c, l) +} + +func Xisgraph(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) +} + +func X__isgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisgraph(tls, c) +} + +func Xisgraph_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isgraph_l(tls, c, l) +} + +func Xislower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('a') < uint32(26)) +} + +func X__islower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xislower(tls, c) +} + +func Xislower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__islower_l(tls, c, l) +} + +func Xisprint(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32(0x20) < uint32(0x5f)) +} + +func X__isprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisprint(tls, c) +} + +func Xisprint_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isprint_l(tls, c, l) +} + +func Xispunct(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32(0x21) < uint32(0x5e)) != 0 && !(Xisalnum(tls, c) != 0)) +} + +func X__ispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xispunct(tls, c) +} + +func Xispunct_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ispunct_l(tls, c, l) +} + +func Xisspace(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(c == int32(' ') || uint32(c)-uint32('\t') < uint32(5)) +} + +func X__isspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisspace(tls, c) +} + +func Xisspace_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isspace_l(tls, c, l) +} + +func Xisupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(uint32(c)-uint32('A') < uint32(26)) +} + +func X__isupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisupper(tls, c) +} + +func Xisupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isupper_l(tls, c, l) +} + +type Twint_t = uint32 + +type Twctype_t = uint64 + +type Twctrans_t = uintptr + +func Xiswalnum(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(wc-uint32('0') < uint32(10)) != 0 || Xiswalpha(tls, wc) != 0) +} + +func X__iswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalnum(tls, c) +} + +func Xiswalnum_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalnum_l(tls, c, l) +} + +var _table3 = [3904]uint8{ + 0: uint8(18), + 1: uint8(17), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(17), + 18: uint8(34), + 19: uint8(35), + 20: uint8(36), + 21: uint8(17), + 22: uint8(37), + 23: uint8(38), + 24: uint8(39), + 25: uint8(40), + 26: uint8(41), + 27: uint8(42), + 28: uint8(43), + 29: uint8(44), + 30: uint8(17), + 31: uint8(45), + 32: uint8(46), + 33: uint8(47), + 34: uint8(16), + 35: uint8(16), + 36: uint8(48), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(16), + 48: uint8(52), + 49: uint8(53), + 50: uint8(16), + 51: uint8(16), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(54), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(55), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(56), + 165: uint8(17), + 166: uint8(57), + 167: uint8(58), + 168: uint8(59), + 169: uint8(60), + 170: uint8(61), + 171: uint8(62), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(63), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(64), + 251: uint8(65), + 252: uint8(17), + 253: uint8(66), + 254: uint8(67), + 255: uint8(68), + 256: uint8(69), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(73), + 261: uint8(74), + 262: uint8(17), + 263: uint8(75), + 264: uint8(76), + 265: uint8(77), + 266: uint8(78), + 267: uint8(79), + 268: uint8(80), + 269: uint8(81), + 270: uint8(16), + 271: uint8(82), + 272: uint8(83), + 273: uint8(84), + 274: uint8(85), + 275: uint8(86), + 276: uint8(87), + 277: uint8(88), + 278: uint8(89), + 279: uint8(90), + 280: uint8(91), + 281: uint8(92), + 282: uint8(93), + 283: uint8(16), + 284: uint8(94), + 285: uint8(95), + 286: uint8(96), + 287: uint8(16), + 288: uint8(17), + 289: uint8(17), + 290: uint8(17), + 291: uint8(97), + 292: uint8(98), + 293: uint8(99), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(17), + 305: uint8(17), + 306: uint8(17), + 307: uint8(17), + 308: uint8(100), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(17), + 325: uint8(17), + 326: uint8(101), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(17), + 361: uint8(17), + 362: uint8(102), + 363: uint8(103), + 364: uint8(16), + 365: uint8(16), + 366: uint8(104), + 367: uint8(105), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(106), + 392: uint8(17), + 393: uint8(17), + 394: uint8(107), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(108), + 434: uint8(109), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(110), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(111), + 469: uint8(112), + 470: uint8(113), + 471: uint8(114), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(115), + 481: uint8(116), + 482: uint8(117), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(118), + 489: uint8(119), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(120), + 495: uint8(16), + 496: uint8(16), + 497: uint8(121), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 584: uint8(254), + 585: uint8(255), + 586: uint8(255), + 587: uint8(7), + 588: uint8(254), + 589: uint8(255), + 590: uint8(255), + 591: uint8(7), + 597: uint8(4), + 598: uint8(32), + 599: uint8(4), + 600: uint8(255), + 601: uint8(255), + 602: uint8(127), + 603: uint8(255), + 604: uint8(255), + 605: uint8(255), + 606: uint8(127), + 607: uint8(255), + 608: uint8(255), + 609: uint8(255), + 610: uint8(255), + 611: uint8(255), + 612: uint8(255), + 613: uint8(255), + 614: uint8(255), + 615: uint8(255), + 616: uint8(255), + 617: uint8(255), + 618: uint8(255), + 619: uint8(255), + 620: uint8(255), + 621: uint8(255), + 622: uint8(255), + 623: uint8(255), + 624: uint8(255), + 625: uint8(255), + 626: uint8(255), + 627: uint8(255), + 628: uint8(255), + 629: uint8(255), + 630: uint8(255), + 631: uint8(255), + 632: uint8(195), + 633: uint8(255), + 634: uint8(3), + 636: uint8(31), + 637: uint8(80), + 648: uint8(32), + 654: uint8(223), + 655: uint8(188), + 656: uint8(64), + 657: uint8(215), + 658: uint8(255), + 659: uint8(255), + 660: uint8(251), + 661: uint8(255), + 662: uint8(255), + 663: uint8(255), + 664: uint8(255), + 665: uint8(255), + 666: uint8(255), + 667: uint8(255), + 668: uint8(255), + 669: uint8(255), + 670: uint8(191), + 671: uint8(255), + 672: uint8(255), + 673: uint8(255), + 674: uint8(255), + 675: uint8(255), + 676: uint8(255), + 677: uint8(255), + 678: uint8(255), + 679: uint8(255), + 680: uint8(255), + 681: uint8(255), + 682: uint8(255), + 683: uint8(255), + 684: uint8(255), + 685: uint8(255), + 686: uint8(255), + 687: uint8(255), + 688: uint8(3), + 689: uint8(252), + 690: uint8(255), + 691: uint8(255), + 692: uint8(255), + 693: uint8(255), + 694: uint8(255), + 695: uint8(255), + 696: uint8(255), + 697: uint8(255), + 698: uint8(255), + 699: uint8(255), + 700: uint8(255), + 701: uint8(255), + 702: uint8(255), + 703: uint8(255), + 704: uint8(255), + 705: uint8(255), + 706: uint8(255), + 707: uint8(255), + 708: uint8(255), + 709: uint8(255), + 710: uint8(254), + 711: uint8(255), + 712: uint8(255), + 713: uint8(255), + 714: uint8(127), + 715: uint8(2), + 716: uint8(255), + 717: uint8(255), + 718: uint8(255), + 719: uint8(255), + 720: uint8(255), + 721: uint8(1), + 726: uint8(255), + 727: uint8(191), + 728: uint8(182), + 730: uint8(255), + 731: uint8(255), + 732: uint8(255), + 733: uint8(135), + 734: uint8(7), + 738: uint8(255), + 739: uint8(7), + 740: uint8(255), + 741: uint8(255), + 742: uint8(255), + 743: uint8(255), + 744: uint8(255), + 745: uint8(255), + 746: uint8(255), + 747: uint8(254), + 748: uint8(255), + 749: uint8(195), + 750: uint8(255), + 751: uint8(255), + 752: uint8(255), + 753: uint8(255), + 754: uint8(255), + 755: uint8(255), + 756: uint8(255), + 757: uint8(255), + 758: uint8(255), + 759: uint8(255), + 760: uint8(255), + 761: uint8(255), + 762: uint8(239), + 763: uint8(31), + 764: uint8(254), + 765: uint8(225), + 766: uint8(255), + 767: uint8(159), + 770: uint8(255), + 771: uint8(255), + 772: uint8(255), + 773: uint8(255), + 774: uint8(255), + 775: uint8(255), + 777: uint8(224), + 778: uint8(255), + 779: uint8(255), + 780: uint8(255), + 781: uint8(255), + 782: uint8(255), + 783: uint8(255), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(255), + 788: uint8(255), + 789: uint8(255), + 790: uint8(3), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(7), + 798: uint8(48), + 799: uint8(4), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(252), + 804: uint8(255), + 805: uint8(31), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(1), + 812: uint8(255), + 813: uint8(7), + 820: uint8(255), + 821: uint8(255), + 822: uint8(223), + 823: uint8(63), + 826: uint8(240), + 827: uint8(255), + 828: uint8(248), + 829: uint8(3), + 830: uint8(255), + 831: uint8(255), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(239), + 840: uint8(255), + 841: uint8(223), + 842: uint8(225), + 843: uint8(255), + 844: uint8(207), + 845: uint8(255), + 846: uint8(254), + 847: uint8(255), + 848: uint8(239), + 849: uint8(159), + 850: uint8(249), + 851: uint8(255), + 852: uint8(255), + 853: uint8(253), + 854: uint8(197), + 855: uint8(227), + 856: uint8(159), + 857: uint8(89), + 858: uint8(128), + 859: uint8(176), + 860: uint8(207), + 861: uint8(255), + 862: uint8(3), + 863: uint8(16), + 864: uint8(238), + 865: uint8(135), + 866: uint8(249), + 867: uint8(255), + 868: uint8(255), + 869: uint8(253), + 870: uint8(109), + 871: uint8(195), + 872: uint8(135), + 873: uint8(25), + 874: uint8(2), + 875: uint8(94), + 876: uint8(192), + 877: uint8(255), + 878: uint8(63), + 880: uint8(238), + 881: uint8(191), + 882: uint8(251), + 883: uint8(255), + 884: uint8(255), + 885: uint8(253), + 886: uint8(237), + 887: uint8(227), + 888: uint8(191), + 889: uint8(27), + 890: uint8(1), + 892: uint8(207), + 893: uint8(255), + 895: uint8(30), + 896: uint8(238), + 897: uint8(159), + 898: uint8(249), + 899: uint8(255), + 900: uint8(255), + 901: uint8(253), + 902: uint8(237), + 903: uint8(227), + 904: uint8(159), + 905: uint8(25), + 906: uint8(192), + 907: uint8(176), + 908: uint8(207), + 909: uint8(255), + 910: uint8(2), + 912: uint8(236), + 913: uint8(199), + 914: uint8(61), + 915: uint8(214), + 916: uint8(24), + 917: uint8(199), + 918: uint8(255), + 919: uint8(195), + 920: uint8(199), + 921: uint8(29), + 922: uint8(129), + 924: uint8(192), + 925: uint8(255), + 928: uint8(239), + 929: uint8(223), + 930: uint8(253), + 931: uint8(255), + 932: uint8(255), + 933: uint8(253), + 934: uint8(255), + 935: uint8(227), + 936: uint8(223), + 937: uint8(29), + 938: uint8(96), + 939: uint8(7), + 940: uint8(207), + 941: uint8(255), + 944: uint8(239), + 945: uint8(223), + 946: uint8(253), + 947: uint8(255), + 948: uint8(255), + 949: uint8(253), + 950: uint8(239), + 951: uint8(227), + 952: uint8(223), + 953: uint8(29), + 954: uint8(96), + 955: uint8(64), + 956: uint8(207), + 957: uint8(255), + 958: uint8(6), + 960: uint8(239), + 961: uint8(223), + 962: uint8(253), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(231), + 968: uint8(223), + 969: uint8(93), + 970: uint8(240), + 971: uint8(128), + 972: uint8(207), + 973: uint8(255), + 975: uint8(252), + 976: uint8(236), + 977: uint8(255), + 978: uint8(127), + 979: uint8(252), + 980: uint8(255), + 981: uint8(255), + 982: uint8(251), + 983: uint8(47), + 984: uint8(127), + 985: uint8(128), + 986: uint8(95), + 987: uint8(255), + 988: uint8(192), + 989: uint8(255), + 990: uint8(12), + 992: uint8(254), + 993: uint8(255), + 994: uint8(255), + 995: uint8(255), + 996: uint8(255), + 997: uint8(127), + 998: uint8(255), + 999: uint8(7), + 1000: uint8(63), + 1001: uint8(32), + 1002: uint8(255), + 1003: uint8(3), + 1008: uint8(214), + 1009: uint8(247), + 1010: uint8(255), + 1011: uint8(255), + 1012: uint8(175), + 1013: uint8(255), + 1014: uint8(255), + 1015: uint8(59), + 1016: uint8(95), + 1017: uint8(32), + 1018: uint8(255), + 1019: uint8(243), + 1024: uint8(1), + 1028: uint8(255), + 1029: uint8(3), + 1032: uint8(255), + 1033: uint8(254), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(31), + 1038: uint8(254), + 1039: uint8(255), + 1040: uint8(3), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(254), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(31), + 1056: uint8(255), + 1057: uint8(255), + 1058: uint8(255), + 1059: uint8(255), + 1060: uint8(255), + 1061: uint8(255), + 1062: uint8(127), + 1063: uint8(249), + 1064: uint8(255), + 1065: uint8(3), + 1066: uint8(255), + 1067: uint8(255), + 1068: uint8(255), + 1069: uint8(255), + 1070: uint8(255), + 1071: uint8(255), + 1072: uint8(255), + 1073: uint8(255), + 1074: uint8(255), + 1075: uint8(63), + 1076: uint8(255), + 1077: uint8(255), + 1078: uint8(255), + 1079: uint8(255), + 1080: uint8(191), + 1081: uint8(32), + 1082: uint8(255), + 1083: uint8(255), + 1084: uint8(255), + 1085: uint8(255), + 1086: uint8(255), + 1087: uint8(247), + 1088: uint8(255), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(61), + 1098: uint8(127), + 1099: uint8(61), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(255), + 1104: uint8(255), + 1105: uint8(61), + 1106: uint8(255), + 1107: uint8(255), + 1108: uint8(255), + 1109: uint8(255), + 1110: uint8(61), + 1111: uint8(127), + 1112: uint8(61), + 1113: uint8(255), + 1114: uint8(127), + 1115: uint8(255), + 1116: uint8(255), + 1117: uint8(255), + 1118: uint8(255), + 1119: uint8(255), + 1120: uint8(255), + 1121: uint8(255), + 1122: uint8(61), + 1123: uint8(255), + 1124: uint8(255), + 1125: uint8(255), + 1126: uint8(255), + 1127: uint8(255), + 1128: uint8(255), + 1129: uint8(255), + 1130: uint8(255), + 1131: uint8(7), + 1136: uint8(255), + 1137: uint8(255), + 1140: uint8(255), + 1141: uint8(255), + 1142: uint8(255), + 1143: uint8(255), + 1144: uint8(255), + 1145: uint8(255), + 1146: uint8(255), + 1147: uint8(255), + 1148: uint8(255), + 1149: uint8(255), + 1150: uint8(63), + 1151: uint8(63), + 1152: uint8(254), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1183: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(159), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(254), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(7), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(199), + 1214: uint8(255), + 1215: uint8(1), + 1216: uint8(255), + 1217: uint8(223), + 1218: uint8(15), + 1220: uint8(255), + 1221: uint8(255), + 1222: uint8(15), + 1224: uint8(255), + 1225: uint8(255), + 1226: uint8(15), + 1228: uint8(255), + 1229: uint8(223), + 1230: uint8(13), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(207), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(1), + 1242: uint8(128), + 1243: uint8(16), + 1244: uint8(255), + 1245: uint8(3), + 1250: uint8(255), + 1251: uint8(3), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(1), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(7), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(63), + 1280: uint8(255), + 1281: uint8(255), + 1282: uint8(255), + 1283: uint8(127), + 1284: uint8(255), + 1285: uint8(15), + 1286: uint8(255), + 1287: uint8(1), + 1288: uint8(192), + 1289: uint8(255), + 1290: uint8(255), + 1291: uint8(255), + 1292: uint8(255), + 1293: uint8(63), + 1294: uint8(31), + 1296: uint8(255), + 1297: uint8(255), + 1298: uint8(255), + 1299: uint8(255), + 1300: uint8(255), + 1301: uint8(15), + 1302: uint8(255), + 1303: uint8(255), + 1304: uint8(255), + 1305: uint8(3), + 1306: uint8(255), + 1307: uint8(3), + 1312: uint8(255), + 1313: uint8(255), + 1314: uint8(255), + 1315: uint8(15), + 1316: uint8(255), + 1317: uint8(255), + 1318: uint8(255), + 1319: uint8(255), + 1320: uint8(255), + 1321: uint8(255), + 1322: uint8(255), + 1323: uint8(127), + 1324: uint8(254), + 1325: uint8(255), + 1326: uint8(31), + 1328: uint8(255), + 1329: uint8(3), + 1330: uint8(255), + 1331: uint8(3), + 1332: uint8(128), + 1344: uint8(255), + 1345: uint8(255), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(239), + 1351: uint8(255), + 1352: uint8(239), + 1353: uint8(15), + 1354: uint8(255), + 1355: uint8(3), + 1360: uint8(255), + 1361: uint8(255), + 1362: uint8(255), + 1363: uint8(255), + 1364: uint8(255), + 1365: uint8(243), + 1366: uint8(255), + 1367: uint8(255), + 1368: uint8(255), + 1369: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(191), + 1373: uint8(255), + 1374: uint8(3), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(255), + 1381: uint8(255), + 1382: uint8(127), + 1384: uint8(255), + 1385: uint8(227), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(63), + 1392: uint8(255), + 1393: uint8(1), + 1394: uint8(255), + 1395: uint8(255), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(231), + 1405: uint8(222), + 1406: uint8(111), + 1407: uint8(4), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(255), + 1416: uint8(255), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1436: uint8(128), + 1437: uint8(255), + 1438: uint8(31), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(63), + 1443: uint8(63), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(63), + 1449: uint8(63), + 1450: uint8(255), + 1451: uint8(170), + 1452: uint8(255), + 1453: uint8(255), + 1454: uint8(255), + 1455: uint8(63), + 1456: uint8(255), + 1457: uint8(255), + 1458: uint8(255), + 1459: uint8(255), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(223), + 1463: uint8(95), + 1464: uint8(220), + 1465: uint8(31), + 1466: uint8(207), + 1467: uint8(15), + 1468: uint8(255), + 1469: uint8(31), + 1470: uint8(220), + 1471: uint8(31), + 1486: uint8(2), + 1487: uint8(128), + 1490: uint8(255), + 1491: uint8(31), + 1504: uint8(132), + 1505: uint8(252), + 1506: uint8(47), + 1507: uint8(62), + 1508: uint8(80), + 1509: uint8(189), + 1510: uint8(255), + 1511: uint8(243), + 1512: uint8(224), + 1513: uint8(67), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(1), + 1558: uint8(192), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(3), + 1568: uint8(255), + 1569: uint8(255), + 1570: uint8(255), + 1571: uint8(255), + 1572: uint8(255), + 1573: uint8(127), + 1574: uint8(255), + 1575: uint8(255), + 1576: uint8(255), + 1577: uint8(255), + 1578: uint8(255), + 1579: uint8(127), + 1580: uint8(255), + 1581: uint8(255), + 1582: uint8(255), + 1583: uint8(255), + 1584: uint8(255), + 1585: uint8(255), + 1586: uint8(255), + 1587: uint8(255), + 1588: uint8(255), + 1589: uint8(255), + 1590: uint8(255), + 1591: uint8(255), + 1592: uint8(255), + 1593: uint8(255), + 1594: uint8(255), + 1595: uint8(255), + 1596: uint8(31), + 1597: uint8(120), + 1598: uint8(12), + 1600: uint8(255), + 1601: uint8(255), + 1602: uint8(255), + 1603: uint8(255), + 1604: uint8(191), + 1605: uint8(32), + 1606: uint8(255), + 1607: uint8(255), + 1608: uint8(255), + 1609: uint8(255), + 1610: uint8(255), + 1611: uint8(255), + 1612: uint8(255), + 1613: uint8(128), + 1616: uint8(255), + 1617: uint8(255), + 1618: uint8(127), + 1620: uint8(127), + 1621: uint8(127), + 1622: uint8(127), + 1623: uint8(127), + 1624: uint8(127), + 1625: uint8(127), + 1626: uint8(127), + 1627: uint8(127), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1637: uint8(128), + 1664: uint8(224), + 1668: uint8(254), + 1669: uint8(3), + 1670: uint8(62), + 1671: uint8(31), + 1672: uint8(254), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(127), + 1683: uint8(224), + 1684: uint8(254), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(255), + 1691: uint8(255), + 1692: uint8(255), + 1693: uint8(255), + 1694: uint8(255), + 1695: uint8(247), + 1696: uint8(224), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(255), + 1701: uint8(255), + 1702: uint8(254), + 1703: uint8(255), + 1704: uint8(255), + 1705: uint8(255), + 1706: uint8(255), + 1707: uint8(255), + 1708: uint8(255), + 1709: uint8(255), + 1710: uint8(255), + 1711: uint8(255), + 1712: uint8(255), + 1713: uint8(127), + 1716: uint8(255), + 1717: uint8(255), + 1718: uint8(255), + 1719: uint8(7), + 1726: uint8(255), + 1727: uint8(255), + 1728: uint8(255), + 1729: uint8(255), + 1730: uint8(255), + 1731: uint8(255), + 1732: uint8(255), + 1733: uint8(255), + 1734: uint8(255), + 1735: uint8(255), + 1736: uint8(255), + 1737: uint8(255), + 1738: uint8(255), + 1739: uint8(255), + 1740: uint8(255), + 1741: uint8(255), + 1742: uint8(255), + 1743: uint8(255), + 1744: uint8(255), + 1745: uint8(255), + 1746: uint8(255), + 1747: uint8(255), + 1748: uint8(255), + 1749: uint8(255), + 1750: uint8(63), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(255), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1792: uint8(255), + 1793: uint8(255), + 1794: uint8(255), + 1795: uint8(255), + 1796: uint8(255), + 1797: uint8(255), + 1798: uint8(255), + 1799: uint8(255), + 1800: uint8(255), + 1801: uint8(255), + 1802: uint8(255), + 1803: uint8(255), + 1804: uint8(255), + 1805: uint8(255), + 1806: uint8(255), + 1807: uint8(255), + 1808: uint8(255), + 1809: uint8(31), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(63), + 1824: uint8(255), + 1825: uint8(31), + 1826: uint8(255), + 1827: uint8(255), + 1828: uint8(255), + 1829: uint8(15), + 1832: uint8(255), + 1833: uint8(255), + 1834: uint8(255), + 1835: uint8(255), + 1836: uint8(255), + 1837: uint8(127), + 1838: uint8(240), + 1839: uint8(143), + 1840: uint8(255), + 1841: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(255), + 1849: uint8(255), + 1850: uint8(255), + 1851: uint8(255), + 1852: uint8(255), + 1853: uint8(255), + 1858: uint8(128), + 1859: uint8(255), + 1860: uint8(252), + 1861: uint8(255), + 1862: uint8(255), + 1863: uint8(255), + 1864: uint8(255), + 1865: uint8(255), + 1866: uint8(255), + 1867: uint8(255), + 1868: uint8(255), + 1869: uint8(255), + 1870: uint8(255), + 1871: uint8(255), + 1872: uint8(255), + 1873: uint8(249), + 1874: uint8(255), + 1875: uint8(255), + 1876: uint8(255), + 1877: uint8(255), + 1878: uint8(255), + 1879: uint8(255), + 1880: uint8(124), + 1886: uint8(128), + 1887: uint8(255), + 1888: uint8(191), + 1889: uint8(255), + 1890: uint8(255), + 1891: uint8(255), + 1892: uint8(255), + 1896: uint8(255), + 1897: uint8(255), + 1898: uint8(255), + 1899: uint8(255), + 1900: uint8(255), + 1901: uint8(255), + 1902: uint8(15), + 1904: uint8(255), + 1905: uint8(255), + 1906: uint8(255), + 1907: uint8(255), + 1908: uint8(255), + 1909: uint8(255), + 1910: uint8(255), + 1911: uint8(255), + 1912: uint8(47), + 1914: uint8(255), + 1915: uint8(3), + 1918: uint8(252), + 1919: uint8(232), + 1920: uint8(255), + 1921: uint8(255), + 1922: uint8(255), + 1923: uint8(255), + 1924: uint8(255), + 1925: uint8(7), + 1926: uint8(255), + 1927: uint8(255), + 1928: uint8(255), + 1929: uint8(255), + 1930: uint8(7), + 1932: uint8(255), + 1933: uint8(255), + 1934: uint8(255), + 1935: uint8(31), + 1936: uint8(255), + 1937: uint8(255), + 1938: uint8(255), + 1939: uint8(255), + 1940: uint8(255), + 1941: uint8(255), + 1942: uint8(247), + 1943: uint8(255), + 1945: uint8(128), + 1946: uint8(255), + 1947: uint8(3), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(255), + 1951: uint8(127), + 1952: uint8(255), + 1953: uint8(255), + 1954: uint8(255), + 1955: uint8(255), + 1956: uint8(255), + 1957: uint8(255), + 1958: uint8(127), + 1960: uint8(255), + 1961: uint8(63), + 1962: uint8(255), + 1963: uint8(3), + 1964: uint8(255), + 1965: uint8(255), + 1966: uint8(127), + 1967: uint8(252), + 1968: uint8(255), + 1969: uint8(255), + 1970: uint8(255), + 1971: uint8(255), + 1972: uint8(255), + 1973: uint8(255), + 1974: uint8(255), + 1975: uint8(127), + 1976: uint8(5), + 1979: uint8(56), + 1980: uint8(255), + 1981: uint8(255), + 1982: uint8(60), + 1984: uint8(126), + 1985: uint8(126), + 1986: uint8(126), + 1988: uint8(127), + 1989: uint8(127), + 1990: uint8(255), + 1991: uint8(255), + 1992: uint8(255), + 1993: uint8(255), + 1994: uint8(255), + 1995: uint8(247), + 1996: uint8(255), + 1998: uint8(255), + 1999: uint8(255), + 2000: uint8(255), + 2001: uint8(255), + 2002: uint8(255), + 2003: uint8(255), + 2004: uint8(255), + 2005: uint8(255), + 2006: uint8(255), + 2007: uint8(255), + 2008: uint8(255), + 2009: uint8(255), + 2010: uint8(255), + 2011: uint8(255), + 2012: uint8(255), + 2013: uint8(7), + 2014: uint8(255), + 2015: uint8(3), + 2016: uint8(255), + 2017: uint8(255), + 2018: uint8(255), + 2019: uint8(255), + 2020: uint8(255), + 2021: uint8(255), + 2022: uint8(255), + 2023: uint8(255), + 2024: uint8(255), + 2025: uint8(255), + 2026: uint8(255), + 2027: uint8(255), + 2028: uint8(255), + 2029: uint8(255), + 2030: uint8(255), + 2031: uint8(255), + 2032: uint8(255), + 2033: uint8(255), + 2034: uint8(255), + 2035: uint8(255), + 2036: uint8(15), + 2038: uint8(255), + 2039: uint8(255), + 2040: uint8(127), + 2041: uint8(248), + 2042: uint8(255), + 2043: uint8(255), + 2044: uint8(255), + 2045: uint8(255), + 2046: uint8(255), + 2047: uint8(15), + 2048: uint8(255), + 2049: uint8(255), + 2050: uint8(255), + 2051: uint8(255), + 2052: uint8(255), + 2053: uint8(255), + 2054: uint8(255), + 2055: uint8(255), + 2056: uint8(255), + 2057: uint8(255), + 2058: uint8(255), + 2059: uint8(255), + 2060: uint8(255), + 2061: uint8(63), + 2062: uint8(255), + 2063: uint8(255), + 2064: uint8(255), + 2065: uint8(255), + 2066: uint8(255), + 2067: uint8(255), + 2068: uint8(255), + 2069: uint8(255), + 2070: uint8(255), + 2071: uint8(255), + 2072: uint8(255), + 2073: uint8(255), + 2074: uint8(255), + 2075: uint8(3), + 2080: uint8(127), + 2082: uint8(248), + 2083: uint8(224), + 2084: uint8(255), + 2085: uint8(253), + 2086: uint8(127), + 2087: uint8(95), + 2088: uint8(219), + 2089: uint8(255), + 2090: uint8(255), + 2091: uint8(255), + 2092: uint8(255), + 2093: uint8(255), + 2094: uint8(255), + 2095: uint8(255), + 2096: uint8(255), + 2097: uint8(255), + 2098: uint8(255), + 2099: uint8(255), + 2100: uint8(255), + 2101: uint8(255), + 2102: uint8(3), + 2106: uint8(248), + 2107: uint8(255), + 2108: uint8(255), + 2109: uint8(255), + 2110: uint8(255), + 2111: uint8(255), + 2112: uint8(255), + 2113: uint8(255), + 2114: uint8(255), + 2115: uint8(255), + 2116: uint8(255), + 2117: uint8(255), + 2118: uint8(255), + 2119: uint8(63), + 2122: uint8(255), + 2123: uint8(255), + 2124: uint8(255), + 2125: uint8(255), + 2126: uint8(255), + 2127: uint8(255), + 2128: uint8(255), + 2129: uint8(255), + 2130: uint8(252), + 2131: uint8(255), + 2132: uint8(255), + 2133: uint8(255), + 2134: uint8(255), + 2135: uint8(255), + 2136: uint8(255), + 2142: uint8(255), + 2143: uint8(15), + 2158: uint8(223), + 2159: uint8(255), + 2160: uint8(255), + 2161: uint8(255), + 2162: uint8(255), + 2163: uint8(255), + 2164: uint8(255), + 2165: uint8(255), + 2166: uint8(255), + 2167: uint8(255), + 2168: uint8(255), + 2169: uint8(255), + 2170: uint8(255), + 2171: uint8(255), + 2172: uint8(255), + 2173: uint8(255), + 2174: uint8(255), + 2175: uint8(31), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(254), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(7), + 2184: uint8(254), + 2185: uint8(255), + 2186: uint8(255), + 2187: uint8(7), + 2188: uint8(192), + 2189: uint8(255), + 2190: uint8(255), + 2191: uint8(255), + 2192: uint8(255), + 2193: uint8(255), + 2194: uint8(255), + 2195: uint8(255), + 2196: uint8(255), + 2197: uint8(255), + 2198: uint8(255), + 2199: uint8(127), + 2200: uint8(252), + 2201: uint8(252), + 2202: uint8(252), + 2203: uint8(28), + 2208: uint8(255), + 2209: uint8(239), + 2210: uint8(255), + 2211: uint8(255), + 2212: uint8(127), + 2213: uint8(255), + 2214: uint8(255), + 2215: uint8(183), + 2216: uint8(255), + 2217: uint8(63), + 2218: uint8(255), + 2219: uint8(63), + 2224: uint8(255), + 2225: uint8(255), + 2226: uint8(255), + 2227: uint8(255), + 2228: uint8(255), + 2229: uint8(255), + 2230: uint8(255), + 2231: uint8(255), + 2232: uint8(255), + 2233: uint8(255), + 2234: uint8(255), + 2235: uint8(255), + 2236: uint8(255), + 2237: uint8(255), + 2238: uint8(255), + 2239: uint8(7), + 2248: uint8(255), + 2249: uint8(255), + 2250: uint8(255), + 2251: uint8(255), + 2252: uint8(255), + 2253: uint8(255), + 2254: uint8(31), + 2288: uint8(255), + 2289: uint8(255), + 2290: uint8(255), + 2291: uint8(31), + 2292: uint8(255), + 2293: uint8(255), + 2294: uint8(255), + 2295: uint8(255), + 2296: uint8(255), + 2297: uint8(255), + 2298: uint8(1), + 2304: uint8(255), + 2305: uint8(255), + 2306: uint8(255), + 2307: uint8(255), + 2309: uint8(224), + 2310: uint8(255), + 2311: uint8(255), + 2312: uint8(255), + 2313: uint8(7), + 2314: uint8(255), + 2315: uint8(255), + 2316: uint8(255), + 2317: uint8(255), + 2318: uint8(255), + 2319: uint8(7), + 2320: uint8(255), + 2321: uint8(255), + 2322: uint8(255), + 2323: uint8(63), + 2324: uint8(255), + 2325: uint8(255), + 2326: uint8(255), + 2327: uint8(255), + 2328: uint8(15), + 2329: uint8(255), + 2330: uint8(62), + 2336: uint8(255), + 2337: uint8(255), + 2338: uint8(255), + 2339: uint8(255), + 2340: uint8(255), + 2341: uint8(255), + 2342: uint8(255), + 2343: uint8(255), + 2344: uint8(255), + 2345: uint8(255), + 2346: uint8(255), + 2347: uint8(255), + 2348: uint8(255), + 2349: uint8(255), + 2350: uint8(255), + 2351: uint8(255), + 2352: uint8(255), + 2353: uint8(255), + 2354: uint8(255), + 2355: uint8(63), + 2356: uint8(255), + 2357: uint8(3), + 2358: uint8(255), + 2359: uint8(255), + 2360: uint8(255), + 2361: uint8(255), + 2362: uint8(15), + 2363: uint8(255), + 2364: uint8(255), + 2365: uint8(255), + 2366: uint8(255), + 2367: uint8(15), + 2368: uint8(255), + 2369: uint8(255), + 2370: uint8(255), + 2371: uint8(255), + 2372: uint8(255), + 2374: uint8(255), + 2375: uint8(255), + 2376: uint8(255), + 2377: uint8(255), + 2378: uint8(255), + 2379: uint8(255), + 2380: uint8(15), + 2400: uint8(255), + 2401: uint8(255), + 2402: uint8(255), + 2403: uint8(255), + 2404: uint8(255), + 2405: uint8(255), + 2406: uint8(127), + 2408: uint8(255), + 2409: uint8(255), + 2410: uint8(63), + 2412: uint8(255), + 2432: uint8(63), + 2433: uint8(253), + 2434: uint8(255), + 2435: uint8(255), + 2436: uint8(255), + 2437: uint8(255), + 2438: uint8(191), + 2439: uint8(145), + 2440: uint8(255), + 2441: uint8(255), + 2442: uint8(63), + 2444: uint8(255), + 2445: uint8(255), + 2446: uint8(127), + 2448: uint8(255), + 2449: uint8(255), + 2450: uint8(255), + 2451: uint8(127), + 2460: uint8(255), + 2461: uint8(255), + 2462: uint8(55), + 2464: uint8(255), + 2465: uint8(255), + 2466: uint8(63), + 2468: uint8(255), + 2469: uint8(255), + 2470: uint8(255), + 2471: uint8(3), + 2480: uint8(255), + 2481: uint8(255), + 2482: uint8(255), + 2483: uint8(255), + 2484: uint8(255), + 2485: uint8(255), + 2486: uint8(255), + 2487: uint8(192), + 2496: uint8(111), + 2497: uint8(240), + 2498: uint8(239), + 2499: uint8(254), + 2500: uint8(255), + 2501: uint8(255), + 2502: uint8(63), + 2508: uint8(255), + 2509: uint8(255), + 2510: uint8(255), + 2511: uint8(31), + 2512: uint8(255), + 2513: uint8(255), + 2514: uint8(255), + 2515: uint8(31), + 2520: uint8(255), + 2521: uint8(254), + 2522: uint8(255), + 2523: uint8(255), + 2524: uint8(31), + 2528: uint8(255), + 2529: uint8(255), + 2530: uint8(255), + 2531: uint8(255), + 2532: uint8(255), + 2533: uint8(255), + 2534: uint8(63), + 2536: uint8(255), + 2537: uint8(255), + 2538: uint8(63), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(7), + 2544: uint8(255), + 2545: uint8(255), + 2546: uint8(3), + 2560: uint8(255), + 2561: uint8(255), + 2562: uint8(255), + 2563: uint8(255), + 2564: uint8(255), + 2565: uint8(255), + 2566: uint8(255), + 2567: uint8(255), + 2568: uint8(255), + 2569: uint8(1), + 2576: uint8(255), + 2577: uint8(255), + 2578: uint8(255), + 2579: uint8(255), + 2580: uint8(255), + 2581: uint8(255), + 2582: uint8(7), + 2584: uint8(255), + 2585: uint8(255), + 2586: uint8(255), + 2587: uint8(255), + 2588: uint8(255), + 2589: uint8(255), + 2590: uint8(7), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2598: uint8(255), + 2599: uint8(3), + 2624: uint8(255), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(31), + 2628: uint8(128), + 2630: uint8(255), + 2631: uint8(255), + 2632: uint8(63), + 2652: uint8(255), + 2653: uint8(255), + 2654: uint8(127), + 2656: uint8(255), + 2657: uint8(255), + 2658: uint8(255), + 2659: uint8(255), + 2660: uint8(255), + 2661: uint8(255), + 2662: uint8(255), + 2663: uint8(255), + 2664: uint8(63), + 2668: uint8(192), + 2669: uint8(255), + 2672: uint8(252), + 2673: uint8(255), + 2674: uint8(255), + 2675: uint8(255), + 2676: uint8(255), + 2677: uint8(255), + 2678: uint8(255), + 2679: uint8(1), + 2682: uint8(255), + 2683: uint8(255), + 2684: uint8(255), + 2685: uint8(1), + 2686: uint8(255), + 2687: uint8(3), + 2688: uint8(255), + 2689: uint8(255), + 2690: uint8(255), + 2691: uint8(255), + 2692: uint8(255), + 2693: uint8(255), + 2694: uint8(199), + 2695: uint8(255), + 2696: uint8(112), + 2698: uint8(255), + 2699: uint8(255), + 2700: uint8(255), + 2701: uint8(255), + 2702: uint8(71), + 2704: uint8(255), + 2705: uint8(255), + 2706: uint8(255), + 2707: uint8(255), + 2708: uint8(255), + 2709: uint8(255), + 2710: uint8(255), + 2711: uint8(255), + 2712: uint8(30), + 2714: uint8(255), + 2715: uint8(23), + 2720: uint8(255), + 2721: uint8(255), + 2722: uint8(251), + 2723: uint8(255), + 2724: uint8(255), + 2725: uint8(255), + 2726: uint8(159), + 2727: uint8(64), + 2736: uint8(127), + 2737: uint8(189), + 2738: uint8(255), + 2739: uint8(191), + 2740: uint8(255), + 2741: uint8(1), + 2742: uint8(255), + 2743: uint8(255), + 2744: uint8(255), + 2745: uint8(255), + 2746: uint8(255), + 2747: uint8(255), + 2748: uint8(255), + 2749: uint8(1), + 2750: uint8(255), + 2751: uint8(3), + 2752: uint8(239), + 2753: uint8(159), + 2754: uint8(249), + 2755: uint8(255), + 2756: uint8(255), + 2757: uint8(253), + 2758: uint8(237), + 2759: uint8(227), + 2760: uint8(159), + 2761: uint8(25), + 2762: uint8(129), + 2763: uint8(224), + 2764: uint8(15), + 2784: uint8(255), + 2785: uint8(255), + 2786: uint8(255), + 2787: uint8(255), + 2788: uint8(255), + 2789: uint8(255), + 2790: uint8(255), + 2791: uint8(255), + 2792: uint8(187), + 2793: uint8(7), + 2794: uint8(255), + 2795: uint8(131), + 2800: uint8(255), + 2801: uint8(255), + 2802: uint8(255), + 2803: uint8(255), + 2804: uint8(255), + 2805: uint8(255), + 2806: uint8(255), + 2807: uint8(255), + 2808: uint8(179), + 2810: uint8(255), + 2811: uint8(3), + 2832: uint8(255), + 2833: uint8(255), + 2834: uint8(255), + 2835: uint8(255), + 2836: uint8(255), + 2837: uint8(255), + 2838: uint8(63), + 2839: uint8(127), + 2843: uint8(63), + 2848: uint8(255), + 2849: uint8(255), + 2850: uint8(255), + 2851: uint8(255), + 2852: uint8(255), + 2853: uint8(255), + 2854: uint8(255), + 2855: uint8(127), + 2856: uint8(17), + 2858: uint8(255), + 2859: uint8(3), + 2864: uint8(255), + 2865: uint8(255), + 2866: uint8(255), + 2867: uint8(255), + 2868: uint8(255), + 2869: uint8(255), + 2870: uint8(63), + 2871: uint8(1), + 2872: uint8(255), + 2873: uint8(3), + 2880: uint8(255), + 2881: uint8(255), + 2882: uint8(255), + 2883: uint8(231), + 2884: uint8(255), + 2885: uint8(7), + 2886: uint8(255), + 2887: uint8(3), + 2912: uint8(255), + 2913: uint8(255), + 2914: uint8(255), + 2915: uint8(255), + 2916: uint8(255), + 2917: uint8(255), + 2918: uint8(255), + 2919: uint8(1), + 2932: uint8(255), + 2933: uint8(255), + 2934: uint8(255), + 2935: uint8(255), + 2936: uint8(255), + 2937: uint8(255), + 2938: uint8(255), + 2939: uint8(255), + 2940: uint8(255), + 2941: uint8(3), + 2943: uint8(128), + 2964: uint8(255), + 2965: uint8(252), + 2966: uint8(255), + 2967: uint8(255), + 2968: uint8(255), + 2969: uint8(255), + 2970: uint8(255), + 2971: uint8(252), + 2972: uint8(26), + 2976: uint8(255), + 2977: uint8(255), + 2978: uint8(255), + 2979: uint8(255), + 2980: uint8(255), + 2981: uint8(255), + 2982: uint8(231), + 2983: uint8(127), + 2986: uint8(255), + 2987: uint8(255), + 2988: uint8(255), + 2989: uint8(255), + 2990: uint8(255), + 2991: uint8(255), + 2992: uint8(255), + 2993: uint8(255), + 2994: uint8(255), + 2995: uint8(32), + 3000: uint8(255), + 3001: uint8(255), + 3002: uint8(255), + 3003: uint8(255), + 3004: uint8(255), + 3005: uint8(255), + 3006: uint8(255), + 3007: uint8(1), + 3008: uint8(255), + 3009: uint8(253), + 3010: uint8(255), + 3011: uint8(255), + 3012: uint8(255), + 3013: uint8(255), + 3014: uint8(127), + 3015: uint8(127), + 3016: uint8(1), + 3018: uint8(255), + 3019: uint8(3), + 3022: uint8(252), + 3023: uint8(255), + 3024: uint8(255), + 3025: uint8(255), + 3026: uint8(252), + 3027: uint8(255), + 3028: uint8(255), + 3029: uint8(254), + 3030: uint8(127), + 3040: uint8(127), + 3041: uint8(251), + 3042: uint8(255), + 3043: uint8(255), + 3044: uint8(255), + 3045: uint8(255), + 3046: uint8(127), + 3047: uint8(180), + 3048: uint8(203), + 3050: uint8(255), + 3051: uint8(3), + 3052: uint8(191), + 3053: uint8(253), + 3054: uint8(255), + 3055: uint8(255), + 3056: uint8(255), + 3057: uint8(127), + 3058: uint8(123), + 3059: uint8(1), + 3060: uint8(255), + 3061: uint8(3), + 3100: uint8(255), + 3101: uint8(255), + 3102: uint8(127), + 3104: uint8(255), + 3105: uint8(255), + 3106: uint8(255), + 3107: uint8(255), + 3108: uint8(255), + 3109: uint8(255), + 3110: uint8(255), + 3111: uint8(255), + 3112: uint8(255), + 3113: uint8(255), + 3114: uint8(255), + 3115: uint8(255), + 3116: uint8(255), + 3117: uint8(255), + 3118: uint8(255), + 3119: uint8(255), + 3120: uint8(255), + 3121: uint8(255), + 3122: uint8(255), + 3123: uint8(3), + 3136: uint8(255), + 3137: uint8(255), + 3138: uint8(255), + 3139: uint8(255), + 3140: uint8(255), + 3141: uint8(255), + 3142: uint8(255), + 3143: uint8(255), + 3144: uint8(255), + 3145: uint8(255), + 3146: uint8(255), + 3147: uint8(255), + 3148: uint8(255), + 3149: uint8(127), + 3152: uint8(255), + 3153: uint8(255), + 3154: uint8(255), + 3155: uint8(255), + 3156: uint8(255), + 3157: uint8(255), + 3158: uint8(255), + 3159: uint8(255), + 3160: uint8(255), + 3161: uint8(255), + 3162: uint8(255), + 3163: uint8(255), + 3164: uint8(255), + 3165: uint8(255), + 3166: uint8(255), + 3167: uint8(255), + 3168: uint8(255), + 3169: uint8(255), + 3170: uint8(255), + 3171: uint8(255), + 3172: uint8(255), + 3173: uint8(255), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(15), + 3200: uint8(255), + 3201: uint8(255), + 3202: uint8(255), + 3203: uint8(255), + 3204: uint8(255), + 3205: uint8(127), + 3232: uint8(255), + 3233: uint8(255), + 3234: uint8(255), + 3235: uint8(255), + 3236: uint8(255), + 3237: uint8(255), + 3238: uint8(255), + 3239: uint8(255), + 3240: uint8(127), + 3264: uint8(255), + 3265: uint8(255), + 3266: uint8(255), + 3267: uint8(255), + 3268: uint8(255), + 3269: uint8(255), + 3270: uint8(255), + 3271: uint8(1), + 3272: uint8(255), + 3273: uint8(255), + 3274: uint8(255), + 3275: uint8(127), + 3276: uint8(255), + 3277: uint8(3), + 3290: uint8(255), + 3291: uint8(255), + 3292: uint8(255), + 3293: uint8(63), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3304: uint8(15), + 3306: uint8(255), + 3307: uint8(3), + 3308: uint8(248), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(224), + 3312: uint8(255), + 3313: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(255), + 3369: uint8(135), + 3370: uint8(255), + 3371: uint8(255), + 3372: uint8(255), + 3373: uint8(255), + 3374: uint8(255), + 3375: uint8(255), + 3376: uint8(255), + 3377: uint8(128), + 3378: uint8(255), + 3379: uint8(255), + 3388: uint8(11), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(255), + 3403: uint8(255), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(255), + 3408: uint8(255), + 3409: uint8(255), + 3410: uint8(255), + 3411: uint8(255), + 3412: uint8(255), + 3413: uint8(255), + 3414: uint8(255), + 3415: uint8(255), + 3416: uint8(255), + 3417: uint8(255), + 3418: uint8(255), + 3419: uint8(255), + 3420: uint8(255), + 3421: uint8(255), + 3422: uint8(255), + 3424: uint8(255), + 3425: uint8(255), + 3426: uint8(255), + 3427: uint8(255), + 3428: uint8(255), + 3429: uint8(255), + 3430: uint8(255), + 3431: uint8(255), + 3432: uint8(255), + 3433: uint8(255), + 3434: uint8(255), + 3435: uint8(255), + 3436: uint8(255), + 3437: uint8(255), + 3438: uint8(255), + 3439: uint8(255), + 3440: uint8(255), + 3441: uint8(255), + 3442: uint8(255), + 3443: uint8(255), + 3444: uint8(255), + 3445: uint8(255), + 3446: uint8(255), + 3447: uint8(255), + 3448: uint8(255), + 3449: uint8(255), + 3450: uint8(255), + 3451: uint8(255), + 3452: uint8(255), + 3453: uint8(255), + 3454: uint8(7), + 3456: uint8(255), + 3457: uint8(255), + 3458: uint8(255), + 3459: uint8(127), + 3466: uint8(7), + 3468: uint8(240), + 3470: uint8(255), + 3471: uint8(255), + 3472: uint8(255), + 3473: uint8(255), + 3474: uint8(255), + 3475: uint8(255), + 3476: uint8(255), + 3477: uint8(255), + 3478: uint8(255), + 3479: uint8(255), + 3480: uint8(255), + 3481: uint8(255), + 3482: uint8(255), + 3483: uint8(255), + 3484: uint8(255), + 3485: uint8(255), + 3486: uint8(255), + 3487: uint8(255), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(255), + 3506: uint8(255), + 3507: uint8(255), + 3508: uint8(255), + 3509: uint8(255), + 3510: uint8(255), + 3511: uint8(255), + 3512: uint8(255), + 3513: uint8(255), + 3514: uint8(255), + 3515: uint8(255), + 3516: uint8(255), + 3517: uint8(255), + 3518: uint8(255), + 3519: uint8(15), + 3520: uint8(255), + 3521: uint8(255), + 3522: uint8(255), + 3523: uint8(255), + 3524: uint8(255), + 3525: uint8(255), + 3526: uint8(255), + 3527: uint8(255), + 3528: uint8(255), + 3529: uint8(255), + 3530: uint8(255), + 3531: uint8(255), + 3532: uint8(255), + 3533: uint8(7), + 3534: uint8(255), + 3535: uint8(31), + 3536: uint8(255), + 3537: uint8(1), + 3538: uint8(255), + 3539: uint8(67), + 3552: uint8(255), + 3553: uint8(255), + 3554: uint8(255), + 3555: uint8(255), + 3556: uint8(255), + 3557: uint8(255), + 3558: uint8(255), + 3559: uint8(255), + 3560: uint8(255), + 3561: uint8(255), + 3562: uint8(223), + 3563: uint8(255), + 3564: uint8(255), + 3565: uint8(255), + 3566: uint8(255), + 3567: uint8(255), + 3568: uint8(255), + 3569: uint8(255), + 3570: uint8(255), + 3571: uint8(223), + 3572: uint8(100), + 3573: uint8(222), + 3574: uint8(255), + 3575: uint8(235), + 3576: uint8(239), + 3577: uint8(255), + 3578: uint8(255), + 3579: uint8(255), + 3580: uint8(255), + 3581: uint8(255), + 3582: uint8(255), + 3583: uint8(255), + 3584: uint8(191), + 3585: uint8(231), + 3586: uint8(223), + 3587: uint8(223), + 3588: uint8(255), + 3589: uint8(255), + 3590: uint8(255), + 3591: uint8(123), + 3592: uint8(95), + 3593: uint8(252), + 3594: uint8(253), + 3595: uint8(255), + 3596: uint8(255), + 3597: uint8(255), + 3598: uint8(255), + 3599: uint8(255), + 3600: uint8(255), + 3601: uint8(255), + 3602: uint8(255), + 3603: uint8(255), + 3604: uint8(255), + 3605: uint8(255), + 3606: uint8(255), + 3607: uint8(255), + 3608: uint8(255), + 3609: uint8(255), + 3610: uint8(255), + 3611: uint8(255), + 3612: uint8(255), + 3613: uint8(255), + 3614: uint8(255), + 3615: uint8(255), + 3616: uint8(255), + 3617: uint8(255), + 3618: uint8(255), + 3619: uint8(255), + 3620: uint8(255), + 3621: uint8(255), + 3622: uint8(255), + 3623: uint8(255), + 3624: uint8(255), + 3625: uint8(255), + 3626: uint8(255), + 3627: uint8(255), + 3628: uint8(255), + 3629: uint8(255), + 3630: uint8(255), + 3631: uint8(255), + 3632: uint8(255), + 3633: uint8(255), + 3634: uint8(255), + 3635: uint8(255), + 3636: uint8(63), + 3637: uint8(255), + 3638: uint8(255), + 3639: uint8(255), + 3640: uint8(253), + 3641: uint8(255), + 3642: uint8(255), + 3643: uint8(247), + 3644: uint8(255), + 3645: uint8(255), + 3646: uint8(255), + 3647: uint8(247), + 3648: uint8(255), + 3649: uint8(255), + 3650: uint8(223), + 3651: uint8(255), + 3652: uint8(255), + 3653: uint8(255), + 3654: uint8(223), + 3655: uint8(255), + 3656: uint8(255), + 3657: uint8(127), + 3658: uint8(255), + 3659: uint8(255), + 3660: uint8(255), + 3661: uint8(127), + 3662: uint8(255), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(253), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(253), + 3670: uint8(255), + 3671: uint8(255), + 3672: uint8(247), + 3673: uint8(207), + 3674: uint8(255), + 3675: uint8(255), + 3676: uint8(255), + 3677: uint8(255), + 3678: uint8(255), + 3679: uint8(255), + 3680: uint8(127), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(249), + 3684: uint8(219), + 3685: uint8(7), + 3712: uint8(255), + 3713: uint8(255), + 3714: uint8(255), + 3715: uint8(255), + 3716: uint8(255), + 3717: uint8(31), + 3718: uint8(128), + 3719: uint8(63), + 3720: uint8(255), + 3721: uint8(67), + 3768: uint8(255), + 3769: uint8(255), + 3770: uint8(255), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(15), + 3774: uint8(255), + 3775: uint8(3), + 3776: uint8(255), + 3777: uint8(255), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3782: uint8(255), + 3783: uint8(255), + 3784: uint8(255), + 3785: uint8(255), + 3786: uint8(255), + 3787: uint8(255), + 3788: uint8(255), + 3789: uint8(255), + 3790: uint8(255), + 3791: uint8(255), + 3792: uint8(255), + 3793: uint8(255), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(255), + 3798: uint8(255), + 3799: uint8(255), + 3800: uint8(31), + 3808: uint8(255), + 3809: uint8(255), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(255), + 3816: uint8(143), + 3817: uint8(8), + 3818: uint8(255), + 3819: uint8(3), + 3840: uint8(239), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(150), + 3845: uint8(254), + 3846: uint8(247), + 3847: uint8(10), + 3848: uint8(132), + 3849: uint8(234), + 3850: uint8(150), + 3851: uint8(170), + 3852: uint8(150), + 3853: uint8(247), + 3854: uint8(247), + 3855: uint8(94), + 3856: uint8(255), + 3857: uint8(251), + 3858: uint8(255), + 3859: uint8(15), + 3860: uint8(238), + 3861: uint8(251), + 3862: uint8(255), + 3863: uint8(15), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(3), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(3), + 3886: uint8(255), + 3887: uint8(255), + 3888: uint8(255), + 3889: uint8(3), +} + +func Xiswalpha(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table3[uint32(int32(_table3[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + if wc < uint32(0x2fffe) { + return int32(1) + } + return 0 +} + +func X__iswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswalpha(tls, c) +} + +func Xiswalpha_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswalpha_l(tls, c, l) +} + +func Xiswblank(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisblank(tls, int32(wc)) +} + +func X__iswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswblank(tls, c) +} + +func Xiswblank_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswblank_l(tls, c, l) +} + +func Xiswcntrl(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc < uint32(32) || wc-Uint32FromInt32(0x7f) < uint32(33) || wc-Uint32FromInt32(0x2028) < uint32(2) || wc-Uint32FromInt32(0xfff9) < uint32(3)) +} + +func X__iswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswcntrl(tls, c) +} + +func Xiswcntrl_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswcntrl_l(tls, c, l) +} + +const WCTYPE_ALNUM = 1 +const WCTYPE_ALPHA = 2 +const WCTYPE_BLANK = 3 +const WCTYPE_CNTRL = 4 +const WCTYPE_DIGIT = 5 +const WCTYPE_GRAPH = 6 +const WCTYPE_LOWER = 7 +const WCTYPE_PRINT = 8 +const WCTYPE_PUNCT = 9 +const WCTYPE_SPACE = 10 +const WCTYPE_UPPER = 11 +const WCTYPE_XDIGIT = 12 + +func Xiswctype(tls *TLS, wc Twint_t, type1 Twctype_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v type1=%v, (%v:)", tls, wc, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + switch type1 { + case uint64(WCTYPE_ALNUM): + return Xiswalnum(tls, wc) + case uint64(WCTYPE_ALPHA): + return Xiswalpha(tls, wc) + case uint64(WCTYPE_BLANK): + return Xiswblank(tls, wc) + case uint64(WCTYPE_CNTRL): + return Xiswcntrl(tls, wc) + case uint64(WCTYPE_DIGIT): + return BoolInt32(wc-uint32('0') < uint32(10)) + case uint64(WCTYPE_GRAPH): + return Xiswgraph(tls, wc) + case uint64(WCTYPE_LOWER): + return Xiswlower(tls, wc) + case uint64(WCTYPE_PRINT): + return Xiswprint(tls, wc) + case uint64(WCTYPE_PUNCT): + return Xiswpunct(tls, wc) + case uint64(WCTYPE_SPACE): + return Xiswspace(tls, wc) + case uint64(WCTYPE_UPPER): + return Xiswupper(tls, wc) + case uint64(WCTYPE_XDIGIT): + return Xiswxdigit(tls, wc) + } + return 0 +} + +func Xwctype(tls *TLS, s uintptr) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var p uintptr + _, _ = i, p + i = int32(1) + p = uintptr(unsafe.Pointer(&_names)) + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(p))) && !(Xstrcmp(tls, s, p) != 0) { + return uint64(i) + } + goto _1 + _1: + ; + i++ + p += uintptr(6) + } + return uint64(0) +} + +/* order must match! */ +var _names = [73]uint8{'a', 'l', 'n', 'u', 'm', 0, 'a', 'l', 'p', 'h', 'a', 0, 'b', 'l', 'a', 'n', 'k', 0, 'c', 'n', 't', 'r', 'l', 0, 'd', 'i', 'g', 'i', 't', 0, 'g', 'r', 'a', 'p', 'h', 0, 'l', 'o', 'w', 'e', 'r', 0, 'p', 'r', 'i', 'n', 't', 0, 'p', 'u', 'n', 'c', 't', 0, 's', 'p', 'a', 'c', 'e', 0, 'u', 'p', 'p', 'e', 'r', 0, 'x', 'd', 'i', 'g', 'i', 't'} + +func X__iswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswctype(tls, c, t) +} + +func X__wctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctype(tls, s) +} + +func Xiswctype_l(tls *TLS, c Twint_t, t Twctype_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswctype_l(tls, c, t, l) +} + +func Xwctype_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctype_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctype_l(tls, s, l) +} + +func Xiswdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-uint32('0') < uint32(10)) +} + +func X__iswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswdigit(tls, c) +} + +func Xiswdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswdigit_l(tls, c, l) +} + +func Xiswgraph(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* ISO C defines this function as: */ + return BoolInt32(!(Xiswspace(tls, wc) != 0) && Xiswprint(tls, wc) != 0) +} + +func X__iswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswgraph(tls, c) +} + +func Xiswgraph_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswgraph_l(tls, c, l) +} + +func Xiswlower(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowupper(tls, wc) != wc) +} + +func X__iswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswlower(tls, c) +} + +func Xiswlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswlower_l(tls, c, l) +} + +/* Consider all legal codepoints as printable except for: + * - C0 and C1 control characters + * - U+2028 and U+2029 (line/para break) + * - U+FFF9 through U+FFFB (interlinear annotation controls) + * The following code is optimized heavily to make hot paths for the + * expected printable characters. */ + +func Xiswprint(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0xff) { + return BoolInt32((wc+uint32(1))&uint32(0x7f) >= uint32(0x21)) + } + if wc < uint32(0x2028) || wc-uint32(0x202a) < uint32(Int32FromInt32(0xd800)-Int32FromInt32(0x202a)) || wc-uint32(0xe000) < uint32(Int32FromInt32(0xfff9)-Int32FromInt32(0xe000)) { + return int32(1) + } + if wc-uint32(0xfffc) > uint32(Int32FromInt32(0x10ffff)-Int32FromInt32(0xfffc)) || wc&uint32(0xfffe) == uint32(0xfffe) { + return 0 + } + return int32(1) +} + +func X__iswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswprint(tls, c) +} + +func Xiswprint_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswprint_l(tls, c, l) +} + +var _table4 = [4000]uint8{ + 0: uint8(18), + 1: uint8(16), + 2: uint8(19), + 3: uint8(20), + 4: uint8(21), + 5: uint8(22), + 6: uint8(23), + 7: uint8(24), + 8: uint8(25), + 9: uint8(26), + 10: uint8(27), + 11: uint8(28), + 12: uint8(29), + 13: uint8(30), + 14: uint8(31), + 15: uint8(32), + 16: uint8(33), + 17: uint8(16), + 18: uint8(16), + 19: uint8(34), + 20: uint8(35), + 21: uint8(16), + 22: uint8(36), + 23: uint8(37), + 24: uint8(38), + 25: uint8(39), + 26: uint8(40), + 27: uint8(41), + 28: uint8(42), + 29: uint8(43), + 30: uint8(16), + 31: uint8(44), + 32: uint8(45), + 33: uint8(46), + 34: uint8(17), + 35: uint8(17), + 36: uint8(47), + 37: uint8(17), + 38: uint8(17), + 39: uint8(17), + 40: uint8(17), + 41: uint8(17), + 42: uint8(17), + 43: uint8(48), + 44: uint8(49), + 45: uint8(50), + 46: uint8(51), + 47: uint8(52), + 48: uint8(53), + 49: uint8(54), + 50: uint8(55), + 51: uint8(17), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(56), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(57), + 165: uint8(16), + 166: uint8(58), + 167: uint8(59), + 168: uint8(60), + 169: uint8(61), + 170: uint8(62), + 171: uint8(63), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(16), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(64), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(65), + 249: uint8(16), + 250: uint8(16), + 251: uint8(66), + 252: uint8(16), + 253: uint8(67), + 254: uint8(68), + 255: uint8(69), + 256: uint8(16), + 257: uint8(70), + 258: uint8(71), + 259: uint8(72), + 260: uint8(16), + 261: uint8(73), + 262: uint8(16), + 263: uint8(16), + 264: uint8(74), + 265: uint8(75), + 266: uint8(76), + 267: uint8(77), + 268: uint8(78), + 269: uint8(16), + 270: uint8(79), + 271: uint8(80), + 272: uint8(81), + 273: uint8(82), + 274: uint8(83), + 275: uint8(84), + 276: uint8(85), + 277: uint8(86), + 278: uint8(87), + 279: uint8(88), + 280: uint8(89), + 281: uint8(90), + 282: uint8(91), + 283: uint8(16), + 284: uint8(92), + 285: uint8(93), + 286: uint8(94), + 287: uint8(95), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(96), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(97), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(98), + 363: uint8(99), + 364: uint8(16), + 365: uint8(16), + 366: uint8(100), + 367: uint8(101), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(102), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(103), + 465: uint8(104), + 466: uint8(105), + 467: uint8(106), + 468: uint8(16), + 469: uint8(16), + 470: uint8(107), + 471: uint8(108), + 472: uint8(17), + 473: uint8(17), + 474: uint8(109), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(110), + 482: uint8(111), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(112), + 489: uint8(113), + 490: uint8(16), + 491: uint8(16), + 492: uint8(114), + 493: uint8(115), + 494: uint8(116), + 495: uint8(16), + 496: uint8(117), + 497: uint8(118), + 498: uint8(119), + 499: uint8(17), + 500: uint8(17), + 501: uint8(17), + 502: uint8(120), + 503: uint8(121), + 504: uint8(122), + 505: uint8(123), + 506: uint8(124), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 580: uint8(254), + 581: uint8(255), + 583: uint8(252), + 584: uint8(1), + 587: uint8(248), + 588: uint8(1), + 591: uint8(120), + 596: uint8(255), + 597: uint8(251), + 598: uint8(223), + 599: uint8(251), + 602: uint8(128), + 606: uint8(128), + 632: uint8(60), + 634: uint8(252), + 635: uint8(255), + 636: uint8(224), + 637: uint8(175), + 638: uint8(255), + 639: uint8(255), + 640: uint8(255), + 641: uint8(255), + 642: uint8(255), + 643: uint8(255), + 644: uint8(255), + 645: uint8(255), + 646: uint8(255), + 647: uint8(255), + 648: uint8(223), + 649: uint8(255), + 650: uint8(255), + 651: uint8(255), + 652: uint8(255), + 653: uint8(255), + 654: uint8(32), + 655: uint8(64), + 656: uint8(176), + 670: uint8(64), + 688: uint8(252), + 689: uint8(3), + 715: uint8(252), + 721: uint8(230), + 722: uint8(254), + 723: uint8(255), + 724: uint8(255), + 725: uint8(255), + 727: uint8(64), + 728: uint8(73), + 734: uint8(24), + 736: uint8(255), + 737: uint8(255), + 739: uint8(216), + 747: uint8(1), + 749: uint8(60), + 762: uint8(16), + 763: uint8(224), + 764: uint8(1), + 765: uint8(30), + 767: uint8(96), + 768: uint8(255), + 769: uint8(191), + 776: uint8(255), + 777: uint8(7), + 797: uint8(248), + 798: uint8(207), + 799: uint8(227), + 803: uint8(3), + 805: uint8(32), + 806: uint8(255), + 807: uint8(127), + 811: uint8(78), + 826: uint8(8), + 828: uint8(7), + 829: uint8(252), + 839: uint8(16), + 841: uint8(32), + 842: uint8(30), + 844: uint8(48), + 846: uint8(1), + 855: uint8(16), + 857: uint8(32), + 862: uint8(252), + 863: uint8(111), + 871: uint8(16), + 873: uint8(32), + 878: uint8(64), + 887: uint8(16), + 889: uint8(32), + 894: uint8(3), + 895: uint8(224), + 903: uint8(16), + 905: uint8(32), + 910: uint8(253), + 921: uint8(32), + 926: uint8(255), + 927: uint8(7), + 928: uint8(16), + 937: uint8(32), + 942: uint8(128), + 943: uint8(255), + 944: uint8(16), + 951: uint8(16), + 953: uint8(32), + 967: uint8(24), + 969: uint8(160), + 971: uint8(127), + 974: uint8(255), + 975: uint8(3), + 985: uint8(4), + 990: uint8(16), + 997: uint8(128), + 999: uint8(128), + 1000: uint8(192), + 1001: uint8(223), + 1003: uint8(12), + 1015: uint8(4), + 1017: uint8(31), + 1024: uint8(254), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1029: uint8(252), + 1030: uint8(255), + 1031: uint8(255), + 1040: uint8(252), + 1047: uint8(192), + 1048: uint8(255), + 1049: uint8(223), + 1050: uint8(255), + 1051: uint8(7), + 1062: uint8(128), + 1063: uint8(6), + 1065: uint8(252), + 1075: uint8(192), + 1087: uint8(8), + 1099: uint8(224), + 1100: uint8(255), + 1101: uint8(255), + 1102: uint8(255), + 1103: uint8(31), + 1106: uint8(255), + 1107: uint8(3), + 1120: uint8(1), + 1165: uint8(96), + 1168: uint8(1), + 1171: uint8(24), + 1181: uint8(56), + 1186: uint8(16), + 1190: uint8(112), + 1206: uint8(48), + 1209: uint8(254), + 1210: uint8(127), + 1211: uint8(47), + 1214: uint8(255), + 1215: uint8(3), + 1216: uint8(255), + 1217: uint8(127), + 1255: uint8(14), + 1256: uint8(49), + 1275: uint8(196), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(255), + 1283: uint8(192), + 1292: uint8(1), + 1294: uint8(224), + 1295: uint8(159), + 1300: uint8(127), + 1301: uint8(63), + 1302: uint8(255), + 1303: uint8(127), + 1318: uint8(16), + 1320: uint8(16), + 1323: uint8(252), + 1324: uint8(255), + 1325: uint8(255), + 1326: uint8(255), + 1327: uint8(31), + 1333: uint8(12), + 1340: uint8(64), + 1342: uint8(12), + 1343: uint8(240), + 1350: uint8(128), + 1351: uint8(248), + 1359: uint8(192), + 1368: uint8(255), + 1370: uint8(255), + 1371: uint8(255), + 1372: uint8(255), + 1373: uint8(33), + 1374: uint8(144), + 1375: uint8(3), + 1400: uint8(255), + 1401: uint8(255), + 1402: uint8(255), + 1403: uint8(255), + 1404: uint8(127), + 1406: uint8(224), + 1407: uint8(251), + 1431: uint8(160), + 1432: uint8(3), + 1433: uint8(224), + 1435: uint8(224), + 1437: uint8(224), + 1439: uint8(96), + 1440: uint8(128), + 1441: uint8(248), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(252), + 1446: uint8(255), + 1447: uint8(255), + 1448: uint8(255), + 1449: uint8(255), + 1450: uint8(255), + 1451: uint8(127), + 1452: uint8(223), + 1453: uint8(255), + 1454: uint8(241), + 1455: uint8(127), + 1456: uint8(255), + 1457: uint8(127), + 1460: uint8(255), + 1461: uint8(255), + 1462: uint8(255), + 1463: uint8(255), + 1466: uint8(255), + 1467: uint8(255), + 1468: uint8(255), + 1469: uint8(255), + 1470: uint8(1), + 1472: uint8(123), + 1473: uint8(3), + 1474: uint8(208), + 1475: uint8(193), + 1476: uint8(175), + 1477: uint8(66), + 1479: uint8(12), + 1480: uint8(31), + 1481: uint8(188), + 1482: uint8(255), + 1483: uint8(255), + 1489: uint8(14), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(255), + 1497: uint8(255), + 1498: uint8(255), + 1499: uint8(255), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(255), + 1503: uint8(255), + 1504: uint8(255), + 1505: uint8(255), + 1506: uint8(255), + 1507: uint8(255), + 1508: uint8(127), + 1512: uint8(255), + 1513: uint8(7), + 1516: uint8(255), + 1517: uint8(255), + 1518: uint8(255), + 1519: uint8(255), + 1520: uint8(255), + 1521: uint8(255), + 1522: uint8(255), + 1523: uint8(255), + 1524: uint8(255), + 1525: uint8(255), + 1526: uint8(63), + 1533: uint8(252), + 1534: uint8(255), + 1535: uint8(255), + 1536: uint8(255), + 1537: uint8(255), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(207), + 1551: uint8(255), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(63), + 1555: uint8(255), + 1556: uint8(255), + 1557: uint8(255), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(255), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1596: uint8(224), + 1597: uint8(135), + 1598: uint8(3), + 1599: uint8(254), + 1614: uint8(1), + 1615: uint8(128), + 1632: uint8(255), + 1633: uint8(255), + 1634: uint8(255), + 1635: uint8(255), + 1636: uint8(255), + 1637: uint8(127), + 1638: uint8(255), + 1639: uint8(255), + 1640: uint8(255), + 1641: uint8(255), + 1648: uint8(255), + 1649: uint8(255), + 1650: uint8(255), + 1651: uint8(251), + 1652: uint8(255), + 1653: uint8(255), + 1654: uint8(255), + 1655: uint8(255), + 1656: uint8(255), + 1657: uint8(255), + 1658: uint8(255), + 1659: uint8(255), + 1660: uint8(255), + 1661: uint8(255), + 1662: uint8(15), + 1664: uint8(255), + 1665: uint8(255), + 1666: uint8(255), + 1667: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1670: uint8(255), + 1671: uint8(255), + 1672: uint8(255), + 1673: uint8(255), + 1674: uint8(255), + 1675: uint8(255), + 1676: uint8(255), + 1677: uint8(255), + 1678: uint8(255), + 1679: uint8(255), + 1680: uint8(255), + 1681: uint8(255), + 1682: uint8(255), + 1683: uint8(255), + 1684: uint8(255), + 1685: uint8(255), + 1686: uint8(255), + 1687: uint8(255), + 1688: uint8(255), + 1689: uint8(255), + 1690: uint8(63), + 1694: uint8(255), + 1695: uint8(15), + 1696: uint8(30), + 1697: uint8(255), + 1698: uint8(255), + 1699: uint8(255), + 1700: uint8(1), + 1701: uint8(252), + 1702: uint8(193), + 1703: uint8(224), + 1715: uint8(30), + 1716: uint8(1), + 1727: uint8(8), + 1746: uint8(255), + 1747: uint8(255), + 1752: uint8(255), + 1753: uint8(255), + 1754: uint8(255), + 1755: uint8(255), + 1756: uint8(15), + 1760: uint8(255), + 1761: uint8(255), + 1762: uint8(255), + 1763: uint8(127), + 1764: uint8(255), + 1765: uint8(255), + 1766: uint8(255), + 1767: uint8(255), + 1768: uint8(255), + 1769: uint8(255), + 1770: uint8(255), + 1771: uint8(255), + 1772: uint8(255), + 1773: uint8(255), + 1774: uint8(255), + 1775: uint8(255), + 1776: uint8(255), + 1777: uint8(255), + 1778: uint8(255), + 1779: uint8(255), + 1780: uint8(255), + 1781: uint8(255), + 1782: uint8(255), + 1783: uint8(255), + 1784: uint8(255), + 1785: uint8(255), + 1786: uint8(255), + 1787: uint8(255), + 1788: uint8(255), + 1789: uint8(255), + 1790: uint8(255), + 1791: uint8(255), + 1816: uint8(255), + 1817: uint8(255), + 1818: uint8(255), + 1819: uint8(255), + 1820: uint8(255), + 1821: uint8(255), + 1822: uint8(255), + 1823: uint8(255), + 1842: uint8(255), + 1843: uint8(255), + 1844: uint8(255), + 1845: uint8(255), + 1846: uint8(255), + 1847: uint8(255), + 1848: uint8(127), + 1855: uint8(192), + 1857: uint8(224), + 1869: uint8(128), + 1870: uint8(15), + 1871: uint8(112), + 1886: uint8(255), + 1888: uint8(255), + 1889: uint8(255), + 1890: uint8(127), + 1892: uint8(3), + 1905: uint8(6), + 1920: uint8(64), + 1925: uint8(15), + 1926: uint8(255), + 1927: uint8(3), + 1934: uint8(240), + 1944: uint8(16), + 1945: uint8(192), + 1948: uint8(255), + 1949: uint8(255), + 1950: uint8(3), + 1951: uint8(23), + 1957: uint8(248), + 1962: uint8(8), + 1963: uint8(128), + 1974: uint8(8), + 1976: uint8(255), + 1977: uint8(63), + 1979: uint8(192), + 1995: uint8(240), + 1998: uint8(128), + 1999: uint8(3), + 2007: uint8(128), + 2008: uint8(2), + 2011: uint8(192), + 2014: uint8(67), + 2027: uint8(8), + 2045: uint8(56), + 2048: uint8(1), + 2111: uint8(128), + 2117: uint8(2), + 2134: uint8(252), + 2135: uint8(255), + 2136: uint8(3), + 2151: uint8(192), + 2175: uint8(48), + 2176: uint8(255), + 2177: uint8(255), + 2178: uint8(255), + 2179: uint8(3), + 2180: uint8(255), + 2181: uint8(255), + 2182: uint8(255), + 2183: uint8(255), + 2184: uint8(255), + 2185: uint8(255), + 2186: uint8(247), + 2187: uint8(255), + 2188: uint8(127), + 2189: uint8(15), + 2207: uint8(128), + 2208: uint8(254), + 2209: uint8(255), + 2211: uint8(252), + 2212: uint8(1), + 2215: uint8(248), + 2216: uint8(1), + 2219: uint8(248), + 2220: uint8(63), + 2236: uint8(127), + 2237: uint8(127), + 2239: uint8(48), + 2240: uint8(135), + 2241: uint8(255), + 2242: uint8(255), + 2243: uint8(255), + 2244: uint8(255), + 2245: uint8(255), + 2246: uint8(143), + 2247: uint8(255), + 2254: uint8(224), + 2255: uint8(255), + 2256: uint8(255), + 2257: uint8(127), + 2258: uint8(255), + 2259: uint8(15), + 2260: uint8(1), + 2266: uint8(255), + 2267: uint8(255), + 2268: uint8(255), + 2269: uint8(255), + 2270: uint8(255), + 2271: uint8(63), + 2300: uint8(255), + 2301: uint8(255), + 2302: uint8(255), + 2303: uint8(15), + 2308: uint8(15), + 2323: uint8(128), + 2330: uint8(1), + 2349: uint8(128), + 2378: uint8(128), + 2379: uint8(255), + 2382: uint8(128), + 2383: uint8(255), + 2388: uint8(128), + 2389: uint8(255), + 2399: uint8(248), + 2402: uint8(192), + 2403: uint8(143), + 2407: uint8(128), + 2423: uint8(48), + 2424: uint8(255), + 2425: uint8(255), + 2426: uint8(252), + 2427: uint8(255), + 2428: uint8(255), + 2429: uint8(255), + 2430: uint8(255), + 2431: uint8(255), + 2439: uint8(135), + 2440: uint8(255), + 2441: uint8(1), + 2442: uint8(255), + 2443: uint8(1), + 2447: uint8(224), + 2451: uint8(224), + 2457: uint8(1), + 2460: uint8(96), + 2461: uint8(248), + 2462: uint8(127), + 2471: uint8(254), + 2475: uint8(255), + 2479: uint8(255), + 2483: uint8(30), + 2485: uint8(254), + 2527: uint8(252), + 2540: uint8(255), + 2541: uint8(255), + 2542: uint8(255), + 2543: uint8(127), + 2563: uint8(224), + 2564: uint8(127), + 2568: uint8(192), + 2569: uint8(255), + 2570: uint8(255), + 2571: uint8(3), + 2600: uint8(192), + 2601: uint8(63), + 2602: uint8(252), + 2603: uint8(255), + 2604: uint8(63), + 2607: uint8(128), + 2608: uint8(3), + 2615: uint8(254), + 2616: uint8(3), + 2617: uint8(32), + 2630: uint8(24), + 2632: uint8(15), + 2638: uint8(56), + 2648: uint8(225), + 2649: uint8(63), + 2651: uint8(232), + 2652: uint8(254), + 2653: uint8(255), + 2654: uint8(31), + 2662: uint8(96), + 2663: uint8(63), + 2677: uint8(2), + 2685: uint8(6), + 2695: uint8(24), + 2697: uint8(32), + 2700: uint8(192), + 2701: uint8(31), + 2702: uint8(31), + 2728: uint8(68), + 2729: uint8(248), + 2731: uint8(104), + 2744: uint8(76), + 2775: uint8(128), + 2776: uint8(255), + 2777: uint8(255), + 2778: uint8(255), + 2791: uint8(128), + 2792: uint8(14), + 2796: uint8(255), + 2797: uint8(31), + 2806: uint8(192), + 2821: uint8(8), + 2823: uint8(252), + 2855: uint8(14), + 2877: uint8(252), + 2878: uint8(7), + 2908: uint8(5), + 2918: uint8(24), + 2919: uint8(128), + 2920: uint8(255), + 2931: uint8(223), + 2932: uint8(7), + 2951: uint8(128), + 2952: uint8(62), + 2955: uint8(252), + 2956: uint8(255), + 2957: uint8(31), + 2958: uint8(3), + 2984: uint8(52), + 2994: uint8(128), + 3038: uint8(128), + 3039: uint8(1), + 3064: uint8(255), + 3065: uint8(255), + 3066: uint8(255), + 3067: uint8(255), + 3068: uint8(255), + 3069: uint8(255), + 3070: uint8(3), + 3071: uint8(128), + 3086: uint8(31), + 3110: uint8(255), + 3111: uint8(1), + 3149: uint8(192), + 3166: uint8(63), + 3174: uint8(255), + 3175: uint8(255), + 3176: uint8(48), + 3179: uint8(248), + 3180: uint8(3), + 3216: uint8(255), + 3217: uint8(255), + 3218: uint8(255), + 3219: uint8(7), + 3260: uint8(4), + 3283: uint8(176), + 3284: uint8(15), + 3296: uint8(255), + 3297: uint8(255), + 3298: uint8(255), + 3299: uint8(255), + 3300: uint8(255), + 3301: uint8(255), + 3302: uint8(255), + 3303: uint8(255), + 3304: uint8(255), + 3305: uint8(255), + 3306: uint8(255), + 3307: uint8(255), + 3308: uint8(255), + 3309: uint8(255), + 3310: uint8(255), + 3311: uint8(255), + 3312: uint8(255), + 3313: uint8(255), + 3314: uint8(255), + 3315: uint8(255), + 3316: uint8(255), + 3317: uint8(255), + 3318: uint8(255), + 3319: uint8(255), + 3320: uint8(255), + 3321: uint8(255), + 3322: uint8(255), + 3323: uint8(255), + 3324: uint8(255), + 3325: uint8(255), + 3326: uint8(63), + 3328: uint8(255), + 3329: uint8(255), + 3330: uint8(255), + 3331: uint8(255), + 3332: uint8(127), + 3333: uint8(254), + 3334: uint8(255), + 3335: uint8(255), + 3336: uint8(255), + 3337: uint8(255), + 3338: uint8(255), + 3339: uint8(255), + 3340: uint8(255), + 3341: uint8(255), + 3342: uint8(255), + 3343: uint8(255), + 3344: uint8(255), + 3345: uint8(255), + 3346: uint8(255), + 3347: uint8(255), + 3348: uint8(255), + 3349: uint8(255), + 3350: uint8(255), + 3351: uint8(255), + 3352: uint8(255), + 3353: uint8(255), + 3354: uint8(255), + 3355: uint8(255), + 3356: uint8(255), + 3357: uint8(1), + 3360: uint8(255), + 3361: uint8(255), + 3362: uint8(255), + 3363: uint8(255), + 3364: uint8(255), + 3365: uint8(255), + 3366: uint8(255), + 3367: uint8(255), + 3368: uint8(63), + 3388: uint8(255), + 3389: uint8(255), + 3390: uint8(15), + 3392: uint8(255), + 3393: uint8(255), + 3394: uint8(255), + 3395: uint8(255), + 3396: uint8(255), + 3397: uint8(255), + 3398: uint8(255), + 3399: uint8(255), + 3400: uint8(255), + 3401: uint8(255), + 3402: uint8(127), + 3404: uint8(255), + 3405: uint8(255), + 3406: uint8(255), + 3407: uint8(1), + 3448: uint8(2), + 3451: uint8(8), + 3455: uint8(8), + 3458: uint8(32), + 3462: uint8(32), + 3465: uint8(128), + 3469: uint8(128), + 3473: uint8(2), + 3477: uint8(2), + 3480: uint8(8), + 3488: uint8(255), + 3489: uint8(255), + 3490: uint8(255), + 3491: uint8(255), + 3492: uint8(255), + 3493: uint8(255), + 3494: uint8(255), + 3495: uint8(255), + 3496: uint8(255), + 3497: uint8(255), + 3498: uint8(255), + 3499: uint8(255), + 3500: uint8(255), + 3501: uint8(255), + 3502: uint8(255), + 3503: uint8(255), + 3504: uint8(255), + 3505: uint8(15), + 3507: uint8(248), + 3508: uint8(254), + 3509: uint8(255), + 3526: uint8(127), + 3529: uint8(128), + 3581: uint8(240), + 3583: uint8(128), + 3608: uint8(128), + 3609: uint8(255), + 3610: uint8(127), + 3624: uint8(112), + 3625: uint8(7), + 3627: uint8(192), + 3662: uint8(254), + 3663: uint8(255), + 3664: uint8(255), + 3665: uint8(255), + 3666: uint8(255), + 3667: uint8(255), + 3668: uint8(255), + 3669: uint8(255), + 3670: uint8(31), + 3680: uint8(254), + 3681: uint8(255), + 3682: uint8(255), + 3683: uint8(255), + 3684: uint8(255), + 3685: uint8(255), + 3686: uint8(255), + 3687: uint8(63), + 3742: uint8(3), + 3744: uint8(255), + 3745: uint8(255), + 3746: uint8(255), + 3747: uint8(255), + 3748: uint8(255), + 3749: uint8(15), + 3750: uint8(255), + 3751: uint8(255), + 3752: uint8(255), + 3753: uint8(255), + 3754: uint8(255), + 3755: uint8(255), + 3756: uint8(255), + 3757: uint8(255), + 3758: uint8(255), + 3759: uint8(255), + 3760: uint8(255), + 3761: uint8(255), + 3762: uint8(15), + 3764: uint8(255), + 3765: uint8(127), + 3766: uint8(254), + 3767: uint8(255), + 3768: uint8(254), + 3769: uint8(255), + 3770: uint8(254), + 3771: uint8(255), + 3772: uint8(255), + 3773: uint8(255), + 3774: uint8(63), + 3776: uint8(255), + 3777: uint8(31), + 3778: uint8(255), + 3779: uint8(255), + 3780: uint8(255), + 3781: uint8(255), + 3785: uint8(252), + 3789: uint8(28), + 3793: uint8(252), + 3794: uint8(255), + 3795: uint8(255), + 3796: uint8(255), + 3797: uint8(31), + 3804: uint8(192), + 3805: uint8(255), + 3806: uint8(255), + 3807: uint8(255), + 3808: uint8(7), + 3810: uint8(255), + 3811: uint8(255), + 3812: uint8(255), + 3813: uint8(255), + 3814: uint8(255), + 3815: uint8(15), + 3816: uint8(255), + 3817: uint8(1), + 3818: uint8(3), + 3820: uint8(63), + 3840: uint8(255), + 3841: uint8(255), + 3842: uint8(255), + 3843: uint8(255), + 3844: uint8(255), + 3845: uint8(255), + 3846: uint8(255), + 3847: uint8(255), + 3848: uint8(255), + 3849: uint8(255), + 3850: uint8(255), + 3851: uint8(255), + 3852: uint8(255), + 3853: uint8(255), + 3854: uint8(255), + 3855: uint8(255), + 3856: uint8(255), + 3857: uint8(255), + 3858: uint8(255), + 3859: uint8(255), + 3860: uint8(255), + 3861: uint8(255), + 3862: uint8(255), + 3863: uint8(255), + 3864: uint8(255), + 3865: uint8(255), + 3866: uint8(63), + 3868: uint8(255), + 3869: uint8(31), + 3870: uint8(255), + 3871: uint8(7), + 3872: uint8(255), + 3873: uint8(255), + 3874: uint8(255), + 3875: uint8(255), + 3876: uint8(255), + 3877: uint8(255), + 3878: uint8(255), + 3879: uint8(255), + 3880: uint8(255), + 3881: uint8(255), + 3882: uint8(255), + 3883: uint8(255), + 3884: uint8(255), + 3885: uint8(255), + 3886: uint8(15), + 3888: uint8(255), + 3889: uint8(255), + 3890: uint8(255), + 3891: uint8(255), + 3892: uint8(255), + 3893: uint8(255), + 3894: uint8(255), + 3895: uint8(255), + 3896: uint8(255), + 3897: uint8(255), + 3898: uint8(255), + 3899: uint8(1), + 3900: uint8(255), + 3901: uint8(15), + 3904: uint8(255), + 3905: uint8(15), + 3906: uint8(255), + 3907: uint8(255), + 3908: uint8(255), + 3909: uint8(255), + 3910: uint8(255), + 3911: uint8(255), + 3912: uint8(255), + 3914: uint8(255), + 3915: uint8(3), + 3916: uint8(255), + 3917: uint8(255), + 3918: uint8(255), + 3919: uint8(255), + 3920: uint8(255), + 3922: uint8(255), + 3923: uint8(255), + 3924: uint8(255), + 3925: uint8(63), + 3936: uint8(255), + 3937: uint8(239), + 3938: uint8(255), + 3939: uint8(255), + 3940: uint8(255), + 3941: uint8(255), + 3942: uint8(255), + 3943: uint8(255), + 3944: uint8(255), + 3945: uint8(255), + 3946: uint8(255), + 3947: uint8(255), + 3948: uint8(255), + 3949: uint8(255), + 3950: uint8(123), + 3951: uint8(252), + 3952: uint8(255), + 3953: uint8(255), + 3954: uint8(255), + 3955: uint8(255), + 3956: uint8(231), + 3957: uint8(199), + 3958: uint8(255), + 3959: uint8(255), + 3960: uint8(255), + 3961: uint8(231), + 3962: uint8(255), + 3963: uint8(255), + 3964: uint8(255), + 3965: uint8(255), + 3966: uint8(255), + 3967: uint8(255), + 3968: uint8(255), + 3969: uint8(255), + 3970: uint8(255), + 3971: uint8(255), + 3972: uint8(255), + 3973: uint8(255), + 3974: uint8(255), + 3975: uint8(255), + 3976: uint8(255), + 3977: uint8(255), + 3978: uint8(15), + 3980: uint8(255), + 3981: uint8(63), + 3982: uint8(15), + 3983: uint8(7), + 3984: uint8(7), + 3986: uint8(63), +} + +func Xiswpunct(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if wc < uint32(0x20000) { + return int32(_table4[uint32(int32(_table4[wc>>int32(8)])*int32(32))+wc&uint32(255)>>int32(3)]) >> (wc & uint32(7)) & int32(1) + } + return 0 +} + +func X__iswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswpunct(tls, c) +} + +func Xiswpunct_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswpunct_l(tls, c, l) +} + +type Tmbstate_t = struct { + F__opaque1 uint32 + F__opaque2 uint32 +} + +type t__mbstate_t = Tmbstate_t + +/* Our definition of whitespace is the Unicode White_Space property, + * minus non-breaking spaces (U+00A0, U+2007, and U+202F) and script- + * specific characters with non-blank glyphs (U+1680 and U+180E). */ + +func Xiswspace(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc != 0 && Xwcschr(tls, uintptr(unsafe.Pointer(&_spaces)), int32(wc)) != 0) +} + +var _spaces = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__iswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswspace(tls, c) +} + +func Xiswspace_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswspace_l(tls, c, l) +} + +func Xiswupper(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(Xtowlower(tls, wc) != wc) +} + +func X__iswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswupper(tls, c) +} + +func Xiswupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswupper_l(tls, c, l) +} + +func Xiswxdigit(tls *TLS, wc Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(wc-Uint32FromUint8('0') < uint32(10) || wc|Uint32FromInt32(32)-Uint32FromUint8('a') < uint32(6)) +} + +func X__iswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xiswxdigit(tls, c) +} + +func Xiswxdigit_l(tls *TLS, c Twint_t, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__iswxdigit_l(tls, c, l) +} + +func Xisxdigit(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(BoolInt32(uint32(c)-uint32('0') < uint32(10)) != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) +} + +func X__isxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xisxdigit(tls, c) +} + +func Xisxdigit_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__isxdigit_l(tls, c, l) +} + +// C documentation +// +// /* nonsense function that should NEVER be used! */ +func Xtoascii(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return c & int32(0x7f) +} + +func Xtolower(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('A') < uint32(26)) != 0 { + return c | int32(32) + } + return c +} + +func X__tolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtolower(tls, c) +} + +func Xtolower_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__tolower_l(tls, c, l) +} + +func Xtoupper(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + if BoolInt32(uint32(c)-uint32('a') < uint32(26)) != 0 { + return c & int32(0x5f) + } + return c +} + +func X__toupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtoupper(tls, c) +} + +func Xtoupper_l(tls *TLS, c int32, l Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__toupper_l(tls, c, l) +} + +var _tab1 = [2666]uint8{ + 0: uint8(7), + 1: uint8(8), + 2: uint8(9), + 3: uint8(10), + 4: uint8(11), + 5: uint8(12), + 6: uint8(6), + 7: uint8(6), + 8: uint8(6), + 9: uint8(6), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), + 13: uint8(6), + 14: uint8(6), + 15: uint8(6), + 16: uint8(13), + 17: uint8(6), + 18: uint8(6), + 19: uint8(14), + 20: uint8(6), + 21: uint8(6), + 22: uint8(6), + 23: uint8(6), + 24: uint8(6), + 25: uint8(6), + 26: uint8(6), + 27: uint8(6), + 28: uint8(15), + 29: uint8(16), + 30: uint8(17), + 31: uint8(18), + 32: uint8(6), + 33: uint8(19), + 34: uint8(6), + 35: uint8(6), + 36: uint8(6), + 37: uint8(6), + 38: uint8(6), + 39: uint8(6), + 40: uint8(6), + 41: uint8(6), + 42: uint8(6), + 43: uint8(6), + 44: uint8(20), + 45: uint8(21), + 46: uint8(6), + 47: uint8(6), + 48: uint8(6), + 49: uint8(6), + 50: uint8(6), + 51: uint8(6), + 52: uint8(6), + 53: uint8(6), + 54: uint8(6), + 55: uint8(6), + 56: uint8(6), + 57: uint8(6), + 58: uint8(6), + 59: uint8(6), + 60: uint8(6), + 61: uint8(6), + 62: uint8(6), + 63: uint8(6), + 64: uint8(6), + 65: uint8(6), + 66: uint8(6), + 67: uint8(6), + 68: uint8(6), + 69: uint8(6), + 70: uint8(6), + 71: uint8(6), + 72: uint8(6), + 73: uint8(6), + 74: uint8(6), + 75: uint8(6), + 76: uint8(6), + 77: uint8(6), + 78: uint8(6), + 79: uint8(6), + 80: uint8(6), + 81: uint8(6), + 82: uint8(6), + 83: uint8(6), + 84: uint8(6), + 85: uint8(6), + 86: uint8(6), + 87: uint8(6), + 88: uint8(6), + 89: uint8(6), + 90: uint8(6), + 91: uint8(6), + 92: uint8(6), + 93: uint8(6), + 94: uint8(6), + 95: uint8(6), + 96: uint8(6), + 97: uint8(6), + 98: uint8(6), + 99: uint8(6), + 100: uint8(6), + 101: uint8(6), + 102: uint8(6), + 103: uint8(6), + 104: uint8(6), + 105: uint8(6), + 106: uint8(6), + 107: uint8(6), + 108: uint8(6), + 109: uint8(6), + 110: uint8(6), + 111: uint8(6), + 112: uint8(6), + 113: uint8(6), + 114: uint8(6), + 115: uint8(6), + 116: uint8(6), + 117: uint8(6), + 118: uint8(6), + 119: uint8(6), + 120: uint8(6), + 121: uint8(6), + 122: uint8(6), + 123: uint8(6), + 124: uint8(6), + 125: uint8(6), + 126: uint8(6), + 127: uint8(6), + 128: uint8(6), + 129: uint8(6), + 130: uint8(6), + 131: uint8(6), + 132: uint8(6), + 133: uint8(6), + 134: uint8(6), + 135: uint8(6), + 136: uint8(6), + 137: uint8(6), + 138: uint8(6), + 139: uint8(6), + 140: uint8(6), + 141: uint8(6), + 142: uint8(6), + 143: uint8(6), + 144: uint8(6), + 145: uint8(6), + 146: uint8(6), + 147: uint8(6), + 148: uint8(6), + 149: uint8(6), + 150: uint8(6), + 151: uint8(6), + 152: uint8(6), + 153: uint8(6), + 154: uint8(6), + 155: uint8(6), + 156: uint8(6), + 157: uint8(6), + 158: uint8(6), + 159: uint8(6), + 160: uint8(6), + 161: uint8(6), + 162: uint8(6), + 163: uint8(6), + 164: uint8(6), + 165: uint8(6), + 166: uint8(22), + 167: uint8(23), + 168: uint8(6), + 169: uint8(6), + 170: uint8(6), + 171: uint8(24), + 172: uint8(6), + 173: uint8(6), + 174: uint8(6), + 175: uint8(6), + 176: uint8(6), + 177: uint8(6), + 178: uint8(6), + 179: uint8(6), + 180: uint8(6), + 181: uint8(6), + 182: uint8(6), + 183: uint8(6), + 184: uint8(6), + 185: uint8(6), + 186: uint8(6), + 187: uint8(6), + 188: uint8(6), + 189: uint8(6), + 190: uint8(6), + 191: uint8(6), + 192: uint8(6), + 193: uint8(6), + 194: uint8(6), + 195: uint8(6), + 196: uint8(6), + 197: uint8(6), + 198: uint8(6), + 199: uint8(6), + 200: uint8(6), + 201: uint8(6), + 202: uint8(6), + 203: uint8(6), + 204: uint8(6), + 205: uint8(6), + 206: uint8(6), + 207: uint8(6), + 208: uint8(6), + 209: uint8(6), + 210: uint8(6), + 211: uint8(6), + 212: uint8(6), + 213: uint8(6), + 214: uint8(6), + 215: uint8(6), + 216: uint8(6), + 217: uint8(6), + 218: uint8(6), + 219: uint8(6), + 220: uint8(6), + 221: uint8(6), + 222: uint8(6), + 223: uint8(6), + 224: uint8(6), + 225: uint8(6), + 226: uint8(6), + 227: uint8(6), + 228: uint8(6), + 229: uint8(6), + 230: uint8(6), + 231: uint8(6), + 232: uint8(6), + 233: uint8(6), + 234: uint8(6), + 235: uint8(6), + 236: uint8(6), + 237: uint8(6), + 238: uint8(6), + 239: uint8(6), + 240: uint8(6), + 241: uint8(6), + 242: uint8(6), + 243: uint8(6), + 244: uint8(6), + 245: uint8(6), + 246: uint8(6), + 247: uint8(6), + 248: uint8(6), + 249: uint8(6), + 250: uint8(6), + 251: uint8(6), + 252: uint8(6), + 253: uint8(6), + 254: uint8(6), + 255: uint8(25), + 256: uint8(6), + 257: uint8(6), + 258: uint8(6), + 259: uint8(6), + 260: uint8(26), + 261: uint8(6), + 262: uint8(6), + 263: uint8(6), + 264: uint8(6), + 265: uint8(6), + 266: uint8(6), + 267: uint8(6), + 268: uint8(27), + 269: uint8(6), + 270: uint8(6), + 271: uint8(6), + 272: uint8(6), + 273: uint8(6), + 274: uint8(6), + 275: uint8(6), + 276: uint8(6), + 277: uint8(6), + 278: uint8(6), + 279: uint8(6), + 280: uint8(28), + 281: uint8(6), + 282: uint8(6), + 283: uint8(6), + 284: uint8(6), + 285: uint8(6), + 286: uint8(6), + 287: uint8(6), + 288: uint8(6), + 289: uint8(6), + 290: uint8(6), + 291: uint8(6), + 292: uint8(6), + 293: uint8(6), + 294: uint8(6), + 295: uint8(6), + 296: uint8(6), + 297: uint8(6), + 298: uint8(6), + 299: uint8(6), + 300: uint8(6), + 301: uint8(6), + 302: uint8(6), + 303: uint8(6), + 304: uint8(6), + 305: uint8(6), + 306: uint8(6), + 307: uint8(6), + 308: uint8(6), + 309: uint8(6), + 310: uint8(6), + 311: uint8(6), + 312: uint8(6), + 313: uint8(6), + 314: uint8(6), + 315: uint8(6), + 316: uint8(6), + 317: uint8(6), + 318: uint8(6), + 319: uint8(6), + 320: uint8(6), + 321: uint8(6), + 322: uint8(6), + 323: uint8(6), + 324: uint8(6), + 325: uint8(6), + 326: uint8(6), + 327: uint8(6), + 328: uint8(6), + 329: uint8(6), + 330: uint8(6), + 331: uint8(6), + 332: uint8(6), + 333: uint8(6), + 334: uint8(6), + 335: uint8(6), + 336: uint8(6), + 337: uint8(6), + 338: uint8(6), + 339: uint8(6), + 340: uint8(6), + 341: uint8(6), + 342: uint8(6), + 343: uint8(6), + 344: uint8(6), + 345: uint8(6), + 346: uint8(6), + 347: uint8(6), + 348: uint8(6), + 349: uint8(6), + 350: uint8(6), + 351: uint8(6), + 352: uint8(6), + 353: uint8(6), + 354: uint8(6), + 355: uint8(6), + 356: uint8(6), + 357: uint8(6), + 358: uint8(6), + 359: uint8(6), + 360: uint8(6), + 361: uint8(6), + 362: uint8(6), + 363: uint8(6), + 364: uint8(6), + 365: uint8(6), + 366: uint8(29), + 367: uint8(6), + 368: uint8(6), + 369: uint8(6), + 370: uint8(6), + 371: uint8(6), + 372: uint8(6), + 373: uint8(6), + 374: uint8(6), + 375: uint8(6), + 376: uint8(6), + 377: uint8(6), + 378: uint8(6), + 379: uint8(6), + 380: uint8(6), + 381: uint8(6), + 382: uint8(6), + 383: uint8(6), + 384: uint8(6), + 385: uint8(6), + 386: uint8(6), + 387: uint8(6), + 388: uint8(6), + 389: uint8(6), + 390: uint8(6), + 391: uint8(6), + 392: uint8(6), + 393: uint8(6), + 394: uint8(6), + 395: uint8(6), + 396: uint8(6), + 397: uint8(6), + 398: uint8(6), + 399: uint8(6), + 400: uint8(6), + 401: uint8(6), + 402: uint8(6), + 403: uint8(6), + 404: uint8(6), + 405: uint8(6), + 406: uint8(6), + 407: uint8(6), + 408: uint8(6), + 409: uint8(6), + 410: uint8(6), + 411: uint8(6), + 412: uint8(6), + 413: uint8(6), + 414: uint8(6), + 415: uint8(6), + 416: uint8(6), + 417: uint8(6), + 418: uint8(6), + 419: uint8(6), + 420: uint8(6), + 421: uint8(6), + 422: uint8(6), + 423: uint8(6), + 424: uint8(6), + 425: uint8(6), + 426: uint8(6), + 427: uint8(6), + 428: uint8(6), + 429: uint8(6), + 430: uint8(6), + 431: uint8(6), + 432: uint8(6), + 433: uint8(6), + 434: uint8(6), + 435: uint8(6), + 436: uint8(6), + 437: uint8(6), + 438: uint8(6), + 439: uint8(6), + 440: uint8(6), + 441: uint8(6), + 442: uint8(6), + 443: uint8(6), + 444: uint8(6), + 445: uint8(6), + 446: uint8(6), + 447: uint8(6), + 448: uint8(6), + 449: uint8(6), + 450: uint8(6), + 451: uint8(6), + 452: uint8(6), + 453: uint8(6), + 454: uint8(6), + 455: uint8(6), + 456: uint8(6), + 457: uint8(6), + 458: uint8(6), + 459: uint8(6), + 460: uint8(6), + 461: uint8(6), + 462: uint8(6), + 463: uint8(6), + 464: uint8(6), + 465: uint8(6), + 466: uint8(6), + 467: uint8(6), + 468: uint8(6), + 469: uint8(6), + 470: uint8(6), + 471: uint8(6), + 472: uint8(6), + 473: uint8(6), + 474: uint8(6), + 475: uint8(6), + 476: uint8(6), + 477: uint8(6), + 478: uint8(6), + 479: uint8(6), + 480: uint8(6), + 481: uint8(6), + 482: uint8(6), + 483: uint8(6), + 484: uint8(6), + 485: uint8(6), + 486: uint8(6), + 487: uint8(6), + 488: uint8(6), + 489: uint8(30), + 490: uint8(6), + 491: uint8(6), + 492: uint8(6), + 493: uint8(6), + 494: uint8(6), + 495: uint8(6), + 496: uint8(6), + 497: uint8(6), + 498: uint8(6), + 499: uint8(6), + 500: uint8(6), + 501: uint8(6), + 502: uint8(6), + 503: uint8(6), + 504: uint8(6), + 505: uint8(6), + 506: uint8(6), + 507: uint8(6), + 508: uint8(6), + 509: uint8(6), + 510: uint8(6), + 511: uint8(6), + 623: uint8(36), + 624: uint8(43), + 625: uint8(43), + 626: uint8(43), + 627: uint8(43), + 628: uint8(43), + 629: uint8(43), + 630: uint8(43), + 631: uint8(43), + 632: uint8(1), + 634: uint8(84), + 635: uint8(86), + 636: uint8(86), + 637: uint8(86), + 638: uint8(86), + 639: uint8(86), + 640: uint8(86), + 641: uint8(86), + 642: uint8(86), + 662: uint8(24), + 666: uint8(43), + 667: uint8(43), + 668: uint8(43), + 669: uint8(43), + 670: uint8(43), + 671: uint8(43), + 672: uint8(43), + 673: uint8(7), + 674: uint8(43), + 675: uint8(43), + 676: uint8(91), + 677: uint8(86), + 678: uint8(86), + 679: uint8(86), + 680: uint8(86), + 681: uint8(86), + 682: uint8(86), + 683: uint8(86), + 684: uint8(74), + 685: uint8(86), + 686: uint8(86), + 687: uint8(5), + 688: uint8(49), + 689: uint8(80), + 690: uint8(49), + 691: uint8(80), + 692: uint8(49), + 693: uint8(80), + 694: uint8(49), + 695: uint8(80), + 696: uint8(49), + 697: uint8(80), + 698: uint8(49), + 699: uint8(80), + 700: uint8(49), + 701: uint8(80), + 702: uint8(49), + 703: uint8(80), + 704: uint8(36), + 705: uint8(80), + 706: uint8(121), + 707: uint8(49), + 708: uint8(80), + 709: uint8(49), + 710: uint8(80), + 711: uint8(49), + 712: uint8(56), + 713: uint8(80), + 714: uint8(49), + 715: uint8(80), + 716: uint8(49), + 717: uint8(80), + 718: uint8(49), + 719: uint8(80), + 720: uint8(49), + 721: uint8(80), + 722: uint8(49), + 723: uint8(80), + 724: uint8(49), + 725: uint8(80), + 726: uint8(49), + 727: uint8(80), + 728: uint8(78), + 729: uint8(49), + 730: uint8(2), + 731: uint8(78), + 732: uint8(13), + 733: uint8(13), + 734: uint8(78), + 735: uint8(3), + 736: uint8(78), + 738: uint8(36), + 739: uint8(110), + 741: uint8(78), + 742: uint8(49), + 743: uint8(38), + 744: uint8(110), + 745: uint8(81), + 746: uint8(78), + 747: uint8(36), + 748: uint8(80), + 749: uint8(78), + 750: uint8(57), + 751: uint8(20), + 752: uint8(129), + 753: uint8(27), + 754: uint8(29), + 755: uint8(29), + 756: uint8(83), + 757: uint8(49), + 758: uint8(80), + 759: uint8(49), + 760: uint8(80), + 761: uint8(13), + 762: uint8(49), + 763: uint8(80), + 764: uint8(49), + 765: uint8(80), + 766: uint8(49), + 767: uint8(80), + 768: uint8(27), + 769: uint8(83), + 770: uint8(36), + 771: uint8(80), + 772: uint8(49), + 773: uint8(2), + 774: uint8(92), + 775: uint8(123), + 776: uint8(92), + 777: uint8(123), + 778: uint8(92), + 779: uint8(123), + 780: uint8(92), + 781: uint8(123), + 782: uint8(92), + 783: uint8(123), + 784: uint8(20), + 785: uint8(121), + 786: uint8(92), + 787: uint8(123), + 788: uint8(92), + 789: uint8(123), + 790: uint8(92), + 791: uint8(45), + 792: uint8(43), + 793: uint8(73), + 794: uint8(3), + 795: uint8(72), + 796: uint8(3), + 797: uint8(120), + 798: uint8(92), + 799: uint8(123), + 800: uint8(20), + 802: uint8(150), + 803: uint8(10), + 804: uint8(1), + 805: uint8(43), + 806: uint8(40), + 807: uint8(6), + 808: uint8(6), + 810: uint8(42), + 811: uint8(6), + 812: uint8(42), + 813: uint8(42), + 814: uint8(43), + 815: uint8(7), + 816: uint8(187), + 817: uint8(181), + 818: uint8(43), + 819: uint8(30), + 821: uint8(43), + 822: uint8(7), + 823: uint8(43), + 824: uint8(43), + 825: uint8(43), + 826: uint8(1), + 827: uint8(43), + 828: uint8(43), + 829: uint8(43), + 830: uint8(43), + 831: uint8(43), + 832: uint8(43), + 833: uint8(43), + 834: uint8(43), + 835: uint8(43), + 836: uint8(43), + 837: uint8(43), + 838: uint8(43), + 839: uint8(43), + 840: uint8(43), + 841: uint8(43), + 842: uint8(43), + 843: uint8(43), + 844: uint8(43), + 845: uint8(43), + 846: uint8(43), + 847: uint8(43), + 848: uint8(43), + 849: uint8(43), + 850: uint8(43), + 851: uint8(43), + 852: uint8(43), + 853: uint8(43), + 854: uint8(43), + 855: uint8(43), + 856: uint8(43), + 857: uint8(43), + 858: uint8(43), + 859: uint8(1), + 860: uint8(43), + 861: uint8(43), + 862: uint8(43), + 863: uint8(43), + 864: uint8(43), + 865: uint8(43), + 866: uint8(43), + 867: uint8(43), + 868: uint8(43), + 869: uint8(43), + 870: uint8(43), + 871: uint8(43), + 872: uint8(43), + 873: uint8(43), + 874: uint8(43), + 875: uint8(43), + 876: uint8(43), + 877: uint8(43), + 878: uint8(43), + 879: uint8(43), + 880: uint8(43), + 881: uint8(43), + 882: uint8(43), + 883: uint8(42), + 884: uint8(43), + 885: uint8(43), + 886: uint8(43), + 887: uint8(43), + 888: uint8(43), + 889: uint8(43), + 890: uint8(43), + 891: uint8(43), + 892: uint8(43), + 893: uint8(43), + 894: uint8(43), + 895: uint8(43), + 896: uint8(43), + 897: uint8(205), + 898: uint8(70), + 899: uint8(205), + 900: uint8(43), + 902: uint8(37), + 903: uint8(43), + 904: uint8(7), + 905: uint8(1), + 906: uint8(6), + 907: uint8(1), + 908: uint8(85), + 909: uint8(86), + 910: uint8(86), + 911: uint8(86), + 912: uint8(86), + 913: uint8(86), + 914: uint8(85), + 915: uint8(86), + 916: uint8(86), + 917: uint8(2), + 918: uint8(36), + 919: uint8(129), + 920: uint8(129), + 921: uint8(129), + 922: uint8(129), + 923: uint8(129), + 924: uint8(21), + 925: uint8(129), + 926: uint8(129), + 927: uint8(129), + 930: uint8(43), + 932: uint8(178), + 933: uint8(209), + 934: uint8(178), + 935: uint8(209), + 936: uint8(178), + 937: uint8(209), + 938: uint8(178), + 939: uint8(209), + 942: uint8(205), + 943: uint8(204), + 944: uint8(1), + 946: uint8(215), + 947: uint8(215), + 948: uint8(215), + 949: uint8(215), + 950: uint8(215), + 951: uint8(131), + 952: uint8(129), + 953: uint8(129), + 954: uint8(129), + 955: uint8(129), + 956: uint8(129), + 957: uint8(129), + 958: uint8(129), + 959: uint8(129), + 960: uint8(129), + 961: uint8(129), + 962: uint8(172), + 963: uint8(172), + 964: uint8(172), + 965: uint8(172), + 966: uint8(172), + 967: uint8(172), + 968: uint8(172), + 969: uint8(172), + 970: uint8(172), + 971: uint8(172), + 972: uint8(28), + 978: uint8(49), + 979: uint8(80), + 980: uint8(49), + 981: uint8(80), + 982: uint8(49), + 983: uint8(80), + 984: uint8(49), + 985: uint8(80), + 986: uint8(49), + 987: uint8(80), + 988: uint8(49), + 989: uint8(2), + 992: uint8(49), + 993: uint8(80), + 994: uint8(49), + 995: uint8(80), + 996: uint8(49), + 997: uint8(80), + 998: uint8(49), + 999: uint8(80), + 1000: uint8(49), + 1001: uint8(80), + 1002: uint8(49), + 1003: uint8(80), + 1004: uint8(49), + 1005: uint8(80), + 1006: uint8(49), + 1007: uint8(80), + 1008: uint8(49), + 1009: uint8(80), + 1010: uint8(78), + 1011: uint8(49), + 1012: uint8(80), + 1013: uint8(49), + 1014: uint8(80), + 1015: uint8(78), + 1016: uint8(49), + 1017: uint8(80), + 1018: uint8(49), + 1019: uint8(80), + 1020: uint8(49), + 1021: uint8(80), + 1022: uint8(49), + 1023: uint8(80), + 1024: uint8(49), + 1025: uint8(80), + 1026: uint8(49), + 1027: uint8(80), + 1028: uint8(49), + 1029: uint8(80), + 1030: uint8(49), + 1031: uint8(2), + 1032: uint8(135), + 1033: uint8(166), + 1034: uint8(135), + 1035: uint8(166), + 1036: uint8(135), + 1037: uint8(166), + 1038: uint8(135), + 1039: uint8(166), + 1040: uint8(135), + 1041: uint8(166), + 1042: uint8(135), + 1043: uint8(166), + 1044: uint8(135), + 1045: uint8(166), + 1046: uint8(135), + 1047: uint8(166), + 1048: uint8(42), + 1049: uint8(43), + 1050: uint8(43), + 1051: uint8(43), + 1052: uint8(43), + 1053: uint8(43), + 1054: uint8(43), + 1055: uint8(43), + 1056: uint8(43), + 1057: uint8(43), + 1058: uint8(43), + 1059: uint8(43), + 1060: uint8(43), + 1064: uint8(84), + 1065: uint8(86), + 1066: uint8(86), + 1067: uint8(86), + 1068: uint8(86), + 1069: uint8(86), + 1070: uint8(86), + 1071: uint8(86), + 1072: uint8(86), + 1073: uint8(86), + 1074: uint8(86), + 1075: uint8(86), + 1076: uint8(86), + 1171: uint8(84), + 1172: uint8(86), + 1173: uint8(86), + 1174: uint8(86), + 1175: uint8(86), + 1176: uint8(86), + 1177: uint8(86), + 1178: uint8(86), + 1179: uint8(86), + 1180: uint8(86), + 1181: uint8(86), + 1182: uint8(86), + 1183: uint8(86), + 1184: uint8(12), + 1186: uint8(12), + 1187: uint8(42), + 1188: uint8(43), + 1189: uint8(43), + 1190: uint8(43), + 1191: uint8(43), + 1192: uint8(43), + 1193: uint8(43), + 1194: uint8(43), + 1195: uint8(43), + 1196: uint8(43), + 1197: uint8(43), + 1198: uint8(43), + 1199: uint8(43), + 1200: uint8(43), + 1201: uint8(7), + 1202: uint8(42), + 1203: uint8(1), + 1257: uint8(42), + 1258: uint8(43), + 1259: uint8(43), + 1260: uint8(43), + 1261: uint8(43), + 1262: uint8(43), + 1263: uint8(43), + 1264: uint8(43), + 1265: uint8(43), + 1266: uint8(43), + 1267: uint8(43), + 1268: uint8(43), + 1269: uint8(43), + 1270: uint8(43), + 1271: uint8(43), + 1272: uint8(43), + 1273: uint8(43), + 1274: uint8(43), + 1275: uint8(43), + 1276: uint8(43), + 1277: uint8(43), + 1278: uint8(43), + 1279: uint8(43), + 1280: uint8(43), + 1281: uint8(43), + 1282: uint8(43), + 1283: uint8(43), + 1284: uint8(86), + 1285: uint8(86), + 1286: uint8(108), + 1287: uint8(129), + 1288: uint8(21), + 1290: uint8(43), + 1291: uint8(43), + 1292: uint8(43), + 1293: uint8(43), + 1294: uint8(43), + 1295: uint8(43), + 1296: uint8(43), + 1297: uint8(43), + 1298: uint8(43), + 1299: uint8(43), + 1300: uint8(43), + 1301: uint8(43), + 1302: uint8(43), + 1303: uint8(43), + 1304: uint8(43), + 1305: uint8(43), + 1306: uint8(43), + 1307: uint8(43), + 1308: uint8(43), + 1309: uint8(43), + 1310: uint8(43), + 1311: uint8(43), + 1312: uint8(43), + 1313: uint8(43), + 1314: uint8(43), + 1315: uint8(43), + 1316: uint8(43), + 1317: uint8(43), + 1318: uint8(43), + 1319: uint8(43), + 1320: uint8(43), + 1321: uint8(43), + 1322: uint8(43), + 1323: uint8(43), + 1324: uint8(43), + 1325: uint8(43), + 1326: uint8(43), + 1327: uint8(43), + 1328: uint8(43), + 1329: uint8(43), + 1330: uint8(43), + 1331: uint8(43), + 1332: uint8(7), + 1333: uint8(108), + 1334: uint8(3), + 1335: uint8(65), + 1336: uint8(43), + 1337: uint8(43), + 1338: uint8(86), + 1339: uint8(86), + 1340: uint8(86), + 1341: uint8(86), + 1342: uint8(86), + 1343: uint8(86), + 1344: uint8(86), + 1345: uint8(86), + 1346: uint8(86), + 1347: uint8(86), + 1348: uint8(86), + 1349: uint8(86), + 1350: uint8(86), + 1351: uint8(86), + 1352: uint8(44), + 1353: uint8(86), + 1354: uint8(43), + 1355: uint8(43), + 1356: uint8(43), + 1357: uint8(43), + 1358: uint8(43), + 1359: uint8(43), + 1360: uint8(43), + 1361: uint8(43), + 1362: uint8(43), + 1363: uint8(43), + 1364: uint8(43), + 1365: uint8(43), + 1366: uint8(43), + 1367: uint8(43), + 1368: uint8(43), + 1369: uint8(43), + 1370: uint8(43), + 1371: uint8(43), + 1372: uint8(43), + 1373: uint8(43), + 1374: uint8(43), + 1375: uint8(1), + 1416: uint8(12), + 1417: uint8(108), + 1423: uint8(6), + 1462: uint8(6), + 1463: uint8(37), + 1464: uint8(6), + 1465: uint8(37), + 1466: uint8(6), + 1467: uint8(37), + 1468: uint8(6), + 1469: uint8(37), + 1470: uint8(6), + 1471: uint8(37), + 1472: uint8(6), + 1473: uint8(37), + 1474: uint8(6), + 1475: uint8(37), + 1476: uint8(6), + 1477: uint8(37), + 1478: uint8(6), + 1479: uint8(37), + 1480: uint8(6), + 1481: uint8(37), + 1482: uint8(6), + 1483: uint8(37), + 1484: uint8(6), + 1485: uint8(37), + 1486: uint8(6), + 1487: uint8(37), + 1488: uint8(6), + 1489: uint8(37), + 1490: uint8(6), + 1491: uint8(37), + 1492: uint8(6), + 1493: uint8(37), + 1494: uint8(6), + 1495: uint8(37), + 1496: uint8(6), + 1497: uint8(37), + 1498: uint8(6), + 1499: uint8(37), + 1500: uint8(6), + 1501: uint8(37), + 1502: uint8(6), + 1503: uint8(37), + 1504: uint8(6), + 1505: uint8(37), + 1506: uint8(6), + 1507: uint8(37), + 1508: uint8(6), + 1509: uint8(37), + 1510: uint8(6), + 1511: uint8(37), + 1512: uint8(86), + 1513: uint8(122), + 1514: uint8(158), + 1515: uint8(38), + 1516: uint8(6), + 1517: uint8(37), + 1518: uint8(6), + 1519: uint8(37), + 1520: uint8(6), + 1521: uint8(37), + 1522: uint8(6), + 1523: uint8(37), + 1524: uint8(6), + 1525: uint8(37), + 1526: uint8(6), + 1527: uint8(37), + 1528: uint8(6), + 1529: uint8(37), + 1530: uint8(6), + 1531: uint8(37), + 1532: uint8(6), + 1533: uint8(37), + 1534: uint8(6), + 1535: uint8(37), + 1536: uint8(6), + 1537: uint8(37), + 1538: uint8(6), + 1539: uint8(37), + 1540: uint8(6), + 1541: uint8(37), + 1542: uint8(6), + 1543: uint8(37), + 1544: uint8(6), + 1545: uint8(37), + 1546: uint8(6), + 1547: uint8(1), + 1548: uint8(43), + 1549: uint8(43), + 1550: uint8(79), + 1551: uint8(86), + 1552: uint8(86), + 1553: uint8(44), + 1554: uint8(43), + 1555: uint8(127), + 1556: uint8(86), + 1557: uint8(86), + 1558: uint8(57), + 1559: uint8(43), + 1560: uint8(43), + 1561: uint8(85), + 1562: uint8(86), + 1563: uint8(86), + 1564: uint8(43), + 1565: uint8(43), + 1566: uint8(79), + 1567: uint8(86), + 1568: uint8(86), + 1569: uint8(44), + 1570: uint8(43), + 1571: uint8(127), + 1572: uint8(86), + 1573: uint8(86), + 1574: uint8(129), + 1575: uint8(55), + 1576: uint8(117), + 1577: uint8(91), + 1578: uint8(123), + 1579: uint8(92), + 1580: uint8(43), + 1581: uint8(43), + 1582: uint8(79), + 1583: uint8(86), + 1584: uint8(86), + 1585: uint8(2), + 1586: uint8(172), + 1587: uint8(4), + 1590: uint8(57), + 1591: uint8(43), + 1592: uint8(43), + 1593: uint8(85), + 1594: uint8(86), + 1595: uint8(86), + 1596: uint8(43), + 1597: uint8(43), + 1598: uint8(79), + 1599: uint8(86), + 1600: uint8(86), + 1601: uint8(44), + 1602: uint8(43), + 1603: uint8(43), + 1604: uint8(86), + 1605: uint8(86), + 1606: uint8(50), + 1607: uint8(19), + 1608: uint8(129), + 1609: uint8(87), + 1611: uint8(111), + 1612: uint8(129), + 1613: uint8(126), + 1614: uint8(201), + 1615: uint8(215), + 1616: uint8(126), + 1617: uint8(45), + 1618: uint8(129), + 1619: uint8(129), + 1620: uint8(14), + 1621: uint8(126), + 1622: uint8(57), + 1623: uint8(127), + 1624: uint8(111), + 1625: uint8(87), + 1627: uint8(129), + 1628: uint8(129), + 1629: uint8(126), + 1630: uint8(21), + 1632: uint8(126), + 1633: uint8(3), + 1634: uint8(43), + 1635: uint8(43), + 1636: uint8(43), + 1637: uint8(43), + 1638: uint8(43), + 1639: uint8(43), + 1640: uint8(43), + 1641: uint8(43), + 1642: uint8(43), + 1643: uint8(43), + 1644: uint8(43), + 1645: uint8(43), + 1646: uint8(7), + 1647: uint8(43), + 1648: uint8(36), + 1649: uint8(43), + 1650: uint8(151), + 1651: uint8(43), + 1652: uint8(43), + 1653: uint8(43), + 1654: uint8(43), + 1655: uint8(43), + 1656: uint8(43), + 1657: uint8(43), + 1658: uint8(43), + 1659: uint8(43), + 1660: uint8(42), + 1661: uint8(43), + 1662: uint8(43), + 1663: uint8(43), + 1664: uint8(43), + 1665: uint8(43), + 1666: uint8(86), + 1667: uint8(86), + 1668: uint8(86), + 1669: uint8(86), + 1670: uint8(86), + 1671: uint8(128), + 1672: uint8(129), + 1673: uint8(129), + 1674: uint8(129), + 1675: uint8(129), + 1676: uint8(57), + 1677: uint8(187), + 1678: uint8(42), + 1679: uint8(43), + 1680: uint8(43), + 1681: uint8(43), + 1682: uint8(43), + 1683: uint8(43), + 1684: uint8(43), + 1685: uint8(43), + 1686: uint8(43), + 1687: uint8(43), + 1688: uint8(43), + 1689: uint8(43), + 1690: uint8(43), + 1691: uint8(43), + 1692: uint8(43), + 1693: uint8(43), + 1694: uint8(43), + 1695: uint8(43), + 1696: uint8(43), + 1697: uint8(43), + 1698: uint8(43), + 1699: uint8(43), + 1700: uint8(43), + 1701: uint8(43), + 1702: uint8(43), + 1703: uint8(43), + 1704: uint8(43), + 1705: uint8(43), + 1706: uint8(43), + 1707: uint8(43), + 1708: uint8(43), + 1709: uint8(43), + 1710: uint8(43), + 1711: uint8(43), + 1712: uint8(43), + 1713: uint8(43), + 1714: uint8(43), + 1715: uint8(43), + 1716: uint8(43), + 1717: uint8(43), + 1718: uint8(43), + 1719: uint8(1), + 1720: uint8(129), + 1721: uint8(129), + 1722: uint8(129), + 1723: uint8(129), + 1724: uint8(129), + 1725: uint8(129), + 1726: uint8(129), + 1727: uint8(129), + 1728: uint8(129), + 1729: uint8(129), + 1730: uint8(129), + 1731: uint8(129), + 1732: uint8(129), + 1733: uint8(129), + 1734: uint8(129), + 1735: uint8(201), + 1736: uint8(172), + 1737: uint8(172), + 1738: uint8(172), + 1739: uint8(172), + 1740: uint8(172), + 1741: uint8(172), + 1742: uint8(172), + 1743: uint8(172), + 1744: uint8(172), + 1745: uint8(172), + 1746: uint8(172), + 1747: uint8(172), + 1748: uint8(172), + 1749: uint8(172), + 1750: uint8(172), + 1751: uint8(208), + 1752: uint8(13), + 1754: uint8(78), + 1755: uint8(49), + 1756: uint8(2), + 1757: uint8(180), + 1758: uint8(193), + 1759: uint8(193), + 1760: uint8(215), + 1761: uint8(215), + 1762: uint8(36), + 1763: uint8(80), + 1764: uint8(49), + 1765: uint8(80), + 1766: uint8(49), + 1767: uint8(80), + 1768: uint8(49), + 1769: uint8(80), + 1770: uint8(49), + 1771: uint8(80), + 1772: uint8(49), + 1773: uint8(80), + 1774: uint8(49), + 1775: uint8(80), + 1776: uint8(49), + 1777: uint8(80), + 1778: uint8(49), + 1779: uint8(80), + 1780: uint8(49), + 1781: uint8(80), + 1782: uint8(49), + 1783: uint8(80), + 1784: uint8(49), + 1785: uint8(80), + 1786: uint8(49), + 1787: uint8(80), + 1788: uint8(49), + 1789: uint8(80), + 1790: uint8(49), + 1791: uint8(80), + 1792: uint8(49), + 1793: uint8(80), + 1794: uint8(49), + 1795: uint8(80), + 1796: uint8(215), + 1797: uint8(215), + 1798: uint8(83), + 1799: uint8(193), + 1800: uint8(71), + 1801: uint8(212), + 1802: uint8(215), + 1803: uint8(215), + 1804: uint8(215), + 1805: uint8(5), + 1806: uint8(43), + 1807: uint8(43), + 1808: uint8(43), + 1809: uint8(43), + 1810: uint8(43), + 1811: uint8(43), + 1812: uint8(43), + 1813: uint8(43), + 1814: uint8(43), + 1815: uint8(43), + 1816: uint8(43), + 1817: uint8(43), + 1818: uint8(7), + 1819: uint8(1), + 1821: uint8(1), + 1913: uint8(78), + 1914: uint8(49), + 1915: uint8(80), + 1916: uint8(49), + 1917: uint8(80), + 1918: uint8(49), + 1919: uint8(80), + 1920: uint8(49), + 1921: uint8(80), + 1922: uint8(49), + 1923: uint8(80), + 1924: uint8(49), + 1925: uint8(80), + 1926: uint8(49), + 1927: uint8(80), + 1928: uint8(13), + 1934: uint8(36), + 1935: uint8(80), + 1936: uint8(49), + 1937: uint8(80), + 1938: uint8(49), + 1939: uint8(80), + 1940: uint8(49), + 1941: uint8(80), + 1942: uint8(49), + 1943: uint8(80), + 1978: uint8(43), + 1979: uint8(43), + 1980: uint8(43), + 1981: uint8(43), + 1982: uint8(43), + 1983: uint8(43), + 1984: uint8(43), + 1985: uint8(43), + 1986: uint8(43), + 1987: uint8(43), + 1988: uint8(43), + 1989: uint8(121), + 1990: uint8(92), + 1991: uint8(123), + 1992: uint8(92), + 1993: uint8(123), + 1994: uint8(79), + 1995: uint8(123), + 1996: uint8(92), + 1997: uint8(123), + 1998: uint8(92), + 1999: uint8(123), + 2000: uint8(92), + 2001: uint8(123), + 2002: uint8(92), + 2003: uint8(123), + 2004: uint8(92), + 2005: uint8(123), + 2006: uint8(92), + 2007: uint8(123), + 2008: uint8(92), + 2009: uint8(123), + 2010: uint8(92), + 2011: uint8(123), + 2012: uint8(92), + 2013: uint8(123), + 2014: uint8(92), + 2015: uint8(45), + 2016: uint8(43), + 2017: uint8(43), + 2018: uint8(121), + 2019: uint8(20), + 2020: uint8(92), + 2021: uint8(123), + 2022: uint8(92), + 2023: uint8(45), + 2024: uint8(121), + 2025: uint8(42), + 2026: uint8(92), + 2027: uint8(39), + 2028: uint8(92), + 2029: uint8(123), + 2030: uint8(92), + 2031: uint8(123), + 2032: uint8(92), + 2033: uint8(123), + 2034: uint8(164), + 2036: uint8(10), + 2037: uint8(180), + 2038: uint8(92), + 2039: uint8(123), + 2040: uint8(92), + 2041: uint8(123), + 2042: uint8(79), + 2043: uint8(3), + 2044: uint8(42), + 2045: uint8(43), + 2046: uint8(43), + 2047: uint8(43), + 2048: uint8(43), + 2049: uint8(43), + 2050: uint8(43), + 2051: uint8(43), + 2052: uint8(43), + 2053: uint8(43), + 2054: uint8(43), + 2055: uint8(43), + 2056: uint8(43), + 2057: uint8(43), + 2058: uint8(43), + 2059: uint8(43), + 2060: uint8(43), + 2061: uint8(43), + 2062: uint8(43), + 2063: uint8(1), + 2091: uint8(72), + 2101: uint8(42), + 2102: uint8(43), + 2103: uint8(43), + 2104: uint8(43), + 2105: uint8(43), + 2106: uint8(43), + 2107: uint8(43), + 2108: uint8(43), + 2109: uint8(43), + 2110: uint8(43), + 2111: uint8(43), + 2112: uint8(43), + 2113: uint8(43), + 2114: uint8(43), + 2115: uint8(43), + 2116: uint8(43), + 2117: uint8(43), + 2118: uint8(43), + 2119: uint8(43), + 2120: uint8(43), + 2121: uint8(43), + 2122: uint8(43), + 2123: uint8(43), + 2124: uint8(43), + 2125: uint8(43), + 2126: uint8(43), + 2127: uint8(43), + 2161: uint8(43), + 2162: uint8(43), + 2163: uint8(43), + 2164: uint8(43), + 2165: uint8(43), + 2166: uint8(43), + 2167: uint8(43), + 2168: uint8(43), + 2169: uint8(7), + 2171: uint8(72), + 2172: uint8(86), + 2173: uint8(86), + 2174: uint8(86), + 2175: uint8(86), + 2176: uint8(86), + 2177: uint8(86), + 2178: uint8(86), + 2179: uint8(86), + 2180: uint8(2), + 2236: uint8(43), + 2237: uint8(43), + 2238: uint8(43), + 2239: uint8(43), + 2240: uint8(43), + 2241: uint8(43), + 2242: uint8(43), + 2243: uint8(43), + 2244: uint8(43), + 2245: uint8(43), + 2246: uint8(43), + 2247: uint8(43), + 2248: uint8(43), + 2249: uint8(85), + 2250: uint8(86), + 2251: uint8(86), + 2252: uint8(86), + 2253: uint8(86), + 2254: uint8(86), + 2255: uint8(86), + 2256: uint8(86), + 2257: uint8(86), + 2258: uint8(86), + 2259: uint8(86), + 2260: uint8(86), + 2261: uint8(86), + 2262: uint8(14), + 2294: uint8(36), + 2295: uint8(43), + 2296: uint8(43), + 2297: uint8(43), + 2298: uint8(43), + 2299: uint8(43), + 2300: uint8(43), + 2301: uint8(43), + 2302: uint8(43), + 2303: uint8(43), + 2304: uint8(43), + 2305: uint8(43), + 2306: uint8(7), + 2308: uint8(86), + 2309: uint8(86), + 2310: uint8(86), + 2311: uint8(86), + 2312: uint8(86), + 2313: uint8(86), + 2314: uint8(86), + 2315: uint8(86), + 2316: uint8(86), + 2317: uint8(86), + 2318: uint8(86), + 2319: uint8(86), + 2364: uint8(36), + 2365: uint8(43), + 2366: uint8(43), + 2367: uint8(43), + 2368: uint8(43), + 2369: uint8(43), + 2370: uint8(43), + 2371: uint8(43), + 2372: uint8(43), + 2373: uint8(43), + 2374: uint8(43), + 2375: uint8(43), + 2376: uint8(43), + 2377: uint8(43), + 2378: uint8(43), + 2379: uint8(43), + 2380: uint8(43), + 2381: uint8(7), + 2386: uint8(86), + 2387: uint8(86), + 2388: uint8(86), + 2389: uint8(86), + 2390: uint8(86), + 2391: uint8(86), + 2392: uint8(86), + 2393: uint8(86), + 2394: uint8(86), + 2395: uint8(86), + 2396: uint8(86), + 2397: uint8(86), + 2398: uint8(86), + 2399: uint8(86), + 2400: uint8(86), + 2401: uint8(86), + 2402: uint8(86), + 2461: uint8(42), + 2462: uint8(43), + 2463: uint8(43), + 2464: uint8(43), + 2465: uint8(43), + 2466: uint8(43), + 2467: uint8(43), + 2468: uint8(43), + 2469: uint8(43), + 2470: uint8(43), + 2471: uint8(43), + 2472: uint8(86), + 2473: uint8(86), + 2474: uint8(86), + 2475: uint8(86), + 2476: uint8(86), + 2477: uint8(86), + 2478: uint8(86), + 2479: uint8(86), + 2480: uint8(86), + 2481: uint8(86), + 2482: uint8(14), + 2515: uint8(42), + 2516: uint8(43), + 2517: uint8(43), + 2518: uint8(43), + 2519: uint8(43), + 2520: uint8(43), + 2521: uint8(43), + 2522: uint8(43), + 2523: uint8(43), + 2524: uint8(43), + 2525: uint8(43), + 2526: uint8(86), + 2527: uint8(86), + 2528: uint8(86), + 2529: uint8(86), + 2530: uint8(86), + 2531: uint8(86), + 2532: uint8(86), + 2533: uint8(86), + 2534: uint8(86), + 2535: uint8(86), + 2536: uint8(14), + 2580: uint8(43), + 2581: uint8(43), + 2582: uint8(43), + 2583: uint8(43), + 2584: uint8(43), + 2585: uint8(43), + 2586: uint8(43), + 2587: uint8(43), + 2588: uint8(43), + 2589: uint8(43), + 2590: uint8(43), + 2591: uint8(85), + 2592: uint8(86), + 2593: uint8(86), + 2594: uint8(86), + 2595: uint8(86), + 2596: uint8(86), + 2597: uint8(86), + 2598: uint8(86), + 2599: uint8(86), + 2600: uint8(86), + 2601: uint8(86), + 2602: uint8(14), +} +var _rules = [240]int32{ + 1: int32(0x2001), + 2: -int32(0x2000), + 3: int32(0x1dbf00), + 4: int32(0x2e700), + 5: int32(0x7900), + 6: int32(0x2402), + 7: int32(0x101), + 8: -int32(0x100), + 10: int32(0x201), + 11: -int32(0x200), + 12: -int32(0xc6ff), + 13: -int32(0xe800), + 14: -int32(0x78ff), + 15: -int32(0x12c00), + 16: int32(0xc300), + 17: int32(0xd201), + 18: int32(0xce01), + 19: int32(0xcd01), + 20: int32(0x4f01), + 21: int32(0xca01), + 22: int32(0xcb01), + 23: int32(0xcf01), + 24: int32(0x6100), + 25: int32(0xd301), + 26: int32(0xd101), + 27: int32(0xa300), + 28: int32(0xd501), + 29: int32(0x8200), + 30: int32(0xd601), + 31: int32(0xda01), + 32: int32(0xd901), + 33: int32(0xdb01), + 34: int32(0x3800), + 35: int32(0x3), + 36: -int32(0x4f00), + 37: -int32(0x60ff), + 38: -int32(0x37ff), + 39: int32(0x242802), + 41: int32(0x101), + 42: -int32(0x100), + 43: -int32(0xcd00), + 44: -int32(0xda00), + 45: -int32(0x81ff), + 46: int32(0x2a2b01), + 47: -int32(0xa2ff), + 48: int32(0x2a2801), + 49: int32(0x2a3f00), + 50: -int32(0xc2ff), + 51: int32(0x4501), + 52: int32(0x4701), + 53: int32(0x2a1f00), + 54: int32(0x2a1c00), + 55: int32(0x2a1e00), + 56: -int32(0xd200), + 57: -int32(0xce00), + 58: -int32(0xca00), + 59: -int32(0xcb00), + 60: int32(0xa54f00), + 61: int32(0xa54b00), + 62: -int32(0xcf00), + 63: int32(0xa52800), + 64: int32(0xa54400), + 65: -int32(0xd100), + 66: -int32(0xd300), + 67: int32(0x29f700), + 68: int32(0xa54100), + 69: int32(0x29fd00), + 70: -int32(0xd500), + 71: -int32(0xd600), + 72: int32(0x29e700), + 73: int32(0xa54300), + 74: int32(0xa52a00), + 75: -int32(0x4500), + 76: -int32(0xd900), + 77: -int32(0x4700), + 78: -int32(0xdb00), + 79: int32(0xa51500), + 80: int32(0xa51200), + 81: int32(0x4c2402), + 83: int32(0x2001), + 84: -int32(0x2000), + 85: int32(0x101), + 86: -int32(0x100), + 87: int32(0x5400), + 88: int32(0x7401), + 89: int32(0x2601), + 90: int32(0x2501), + 91: int32(0x4001), + 92: int32(0x3f01), + 93: -int32(0x2600), + 94: -int32(0x2500), + 95: -int32(0x1f00), + 96: -int32(0x4000), + 97: -int32(0x3f00), + 98: int32(0x801), + 99: -int32(0x3e00), + 100: -int32(0x3900), + 101: -int32(0x2f00), + 102: -int32(0x3600), + 103: -int32(0x800), + 104: -int32(0x5600), + 105: -int32(0x5000), + 106: int32(0x700), + 107: -int32(0x7400), + 108: -int32(0x3bff), + 109: -int32(0x6000), + 110: -int32(0x6ff), + 111: int32(0x701a02), + 112: int32(0x101), + 113: -int32(0x100), + 114: int32(0x2001), + 115: -int32(0x2000), + 116: int32(0x5001), + 117: int32(0xf01), + 118: -int32(0xf00), + 120: int32(0x3001), + 121: -int32(0x3000), + 122: int32(0x101), + 123: -int32(0x100), + 125: int32(0xbc000), + 126: int32(0x1c6001), + 128: int32(0x97d001), + 129: int32(0x801), + 130: -int32(0x800), + 131: int32(0x8a0502), + 133: -int32(0xbbfff), + 134: -int32(0x186200), + 135: int32(0x89c200), + 136: -int32(0x182500), + 137: -int32(0x186e00), + 138: -int32(0x186d00), + 139: -int32(0x186400), + 140: -int32(0x186300), + 141: -int32(0x185c00), + 143: int32(0x8a3800), + 144: int32(0x8a0400), + 145: int32(0xee600), + 146: int32(0x101), + 147: -int32(0x100), + 149: -int32(0x3b00), + 150: -int32(0x1dbeff), + 151: int32(0x8f1d02), + 152: int32(0x800), + 153: -int32(0x7ff), + 155: int32(0x5600), + 156: -int32(0x55ff), + 157: int32(0x4a00), + 158: int32(0x6400), + 159: int32(0x8000), + 160: int32(0x7000), + 161: int32(0x7e00), + 162: int32(0x900), + 163: -int32(0x49ff), + 164: -int32(0x8ff), + 165: -int32(0x1c2500), + 166: -int32(0x63ff), + 167: -int32(0x6fff), + 168: -int32(0x7fff), + 169: -int32(0x7dff), + 170: int32(0xac0502), + 172: int32(0x1001), + 173: -int32(0x1000), + 174: int32(0x1c01), + 175: int32(0x101), + 176: -int32(0x1d5cff), + 177: -int32(0x20beff), + 178: -int32(0x2045ff), + 179: -int32(0x1c00), + 180: int32(0xb10b02), + 181: int32(0x101), + 182: -int32(0x100), + 183: int32(0x3001), + 184: -int32(0x3000), + 186: -int32(0x29f6ff), + 187: -int32(0xee5ff), + 188: -int32(0x29e6ff), + 189: -int32(0x2a2b00), + 190: -int32(0x2a2800), + 191: -int32(0x2a1bff), + 192: -int32(0x29fcff), + 193: -int32(0x2a1eff), + 194: -int32(0x2a1dff), + 195: -int32(0x2a3eff), + 197: -int32(0x1c6000), + 199: int32(0x101), + 200: -int32(0x100), + 201: int32(0xbc0c02), + 203: int32(0x101), + 204: -int32(0x100), + 205: -int32(0xa543ff), + 206: int32(0x3a001), + 207: -int32(0x8a03ff), + 208: -int32(0xa527ff), + 209: int32(0x3000), + 210: -int32(0xa54eff), + 211: -int32(0xa54aff), + 212: -int32(0xa540ff), + 213: -int32(0xa511ff), + 214: -int32(0xa529ff), + 215: -int32(0xa514ff), + 216: -int32(0x2fff), + 217: -int32(0xa542ff), + 218: -int32(0x8a37ff), + 220: -int32(0x97d000), + 221: -int32(0x3a000), + 223: int32(0x2001), + 224: -int32(0x2000), + 226: int32(0x2801), + 227: -int32(0x2800), + 229: int32(0x4001), + 230: -int32(0x4000), + 232: int32(0x2001), + 233: -int32(0x2000), + 235: int32(0x2001), + 236: -int32(0x2000), + 238: int32(0x2201), + 239: -int32(0x2200), +} +var _rulebases = [512]uint8{ + 1: uint8(6), + 2: uint8(39), + 3: uint8(81), + 4: uint8(111), + 5: uint8(119), + 16: uint8(124), + 19: uint8(127), + 28: uint8(131), + 29: uint8(142), + 30: uint8(146), + 31: uint8(151), + 33: uint8(170), + 44: uint8(180), + 45: uint8(196), + 166: uint8(198), + 167: uint8(201), + 171: uint8(219), + 255: uint8(222), + 260: uint8(225), + 268: uint8(228), + 280: uint8(231), + 366: uint8(234), + 489: uint8(237), +} +var _exceptions = [200][2]uint8{ + 0: { + 0: uint8(48), + 1: uint8(12), + }, + 1: { + 0: uint8(49), + 1: uint8(13), + }, + 2: { + 0: uint8(120), + 1: uint8(14), + }, + 3: { + 0: uint8(127), + 1: uint8(15), + }, + 4: { + 0: uint8(128), + 1: uint8(16), + }, + 5: { + 0: uint8(129), + 1: uint8(17), + }, + 6: { + 0: uint8(134), + 1: uint8(18), + }, + 7: { + 0: uint8(137), + 1: uint8(19), + }, + 8: { + 0: uint8(138), + 1: uint8(19), + }, + 9: { + 0: uint8(142), + 1: uint8(20), + }, + 10: { + 0: uint8(143), + 1: uint8(21), + }, + 11: { + 0: uint8(144), + 1: uint8(22), + }, + 12: { + 0: uint8(147), + 1: uint8(19), + }, + 13: { + 0: uint8(148), + 1: uint8(23), + }, + 14: { + 0: uint8(149), + 1: uint8(24), + }, + 15: { + 0: uint8(150), + 1: uint8(25), + }, + 16: { + 0: uint8(151), + 1: uint8(26), + }, + 17: { + 0: uint8(154), + 1: uint8(27), + }, + 18: { + 0: uint8(156), + 1: uint8(25), + }, + 19: { + 0: uint8(157), + 1: uint8(28), + }, + 20: { + 0: uint8(158), + 1: uint8(29), + }, + 21: { + 0: uint8(159), + 1: uint8(30), + }, + 22: { + 0: uint8(166), + 1: uint8(31), + }, + 23: { + 0: uint8(169), + 1: uint8(31), + }, + 24: { + 0: uint8(174), + 1: uint8(31), + }, + 25: { + 0: uint8(177), + 1: uint8(32), + }, + 26: { + 0: uint8(178), + 1: uint8(32), + }, + 27: { + 0: uint8(183), + 1: uint8(33), + }, + 28: { + 0: uint8(191), + 1: uint8(34), + }, + 29: { + 0: uint8(197), + 1: uint8(35), + }, + 30: { + 0: uint8(200), + 1: uint8(35), + }, + 31: { + 0: uint8(203), + 1: uint8(35), + }, + 32: { + 0: uint8(221), + 1: uint8(36), + }, + 33: { + 0: uint8(242), + 1: uint8(35), + }, + 34: { + 0: uint8(246), + 1: uint8(37), + }, + 35: { + 0: uint8(247), + 1: uint8(38), + }, + 36: { + 0: uint8(32), + 1: uint8(45), + }, + 37: { + 0: uint8(58), + 1: uint8(46), + }, + 38: { + 0: uint8(61), + 1: uint8(47), + }, + 39: { + 0: uint8(62), + 1: uint8(48), + }, + 40: { + 0: uint8(63), + 1: uint8(49), + }, + 41: { + 0: uint8(64), + 1: uint8(49), + }, + 42: { + 0: uint8(67), + 1: uint8(50), + }, + 43: { + 0: uint8(68), + 1: uint8(51), + }, + 44: { + 0: uint8(69), + 1: uint8(52), + }, + 45: { + 0: uint8(80), + 1: uint8(53), + }, + 46: { + 0: uint8(81), + 1: uint8(54), + }, + 47: { + 0: uint8(82), + 1: uint8(55), + }, + 48: { + 0: uint8(83), + 1: uint8(56), + }, + 49: { + 0: uint8(84), + 1: uint8(57), + }, + 50: { + 0: uint8(89), + 1: uint8(58), + }, + 51: { + 0: uint8(91), + 1: uint8(59), + }, + 52: { + 0: uint8(92), + 1: uint8(60), + }, + 53: { + 0: uint8(97), + 1: uint8(61), + }, + 54: { + 0: uint8(99), + 1: uint8(62), + }, + 55: { + 0: uint8(101), + 1: uint8(63), + }, + 56: { + 0: uint8(102), + 1: uint8(64), + }, + 57: { + 0: uint8(104), + 1: uint8(65), + }, + 58: { + 0: uint8(105), + 1: uint8(66), + }, + 59: { + 0: uint8(106), + 1: uint8(64), + }, + 60: { + 0: uint8(107), + 1: uint8(67), + }, + 61: { + 0: uint8(108), + 1: uint8(68), + }, + 62: { + 0: uint8(111), + 1: uint8(66), + }, + 63: { + 0: uint8(113), + 1: uint8(69), + }, + 64: { + 0: uint8(114), + 1: uint8(70), + }, + 65: { + 0: uint8(117), + 1: uint8(71), + }, + 66: { + 0: uint8(125), + 1: uint8(72), + }, + 67: { + 0: uint8(130), + 1: uint8(73), + }, + 68: { + 0: uint8(135), + 1: uint8(74), + }, + 69: { + 0: uint8(137), + 1: uint8(75), + }, + 70: { + 0: uint8(138), + 1: uint8(76), + }, + 71: { + 0: uint8(139), + 1: uint8(76), + }, + 72: { + 0: uint8(140), + 1: uint8(77), + }, + 73: { + 0: uint8(146), + 1: uint8(78), + }, + 74: { + 0: uint8(157), + 1: uint8(79), + }, + 75: { + 0: uint8(158), + 1: uint8(80), + }, + 76: { + 0: uint8(69), + 1: uint8(87), + }, + 77: { + 0: uint8(123), + 1: uint8(29), + }, + 78: { + 0: uint8(124), + 1: uint8(29), + }, + 79: { + 0: uint8(125), + 1: uint8(29), + }, + 80: { + 0: uint8(127), + 1: uint8(88), + }, + 81: { + 0: uint8(134), + 1: uint8(89), + }, + 82: { + 0: uint8(136), + 1: uint8(90), + }, + 83: { + 0: uint8(137), + 1: uint8(90), + }, + 84: { + 0: uint8(138), + 1: uint8(90), + }, + 85: { + 0: uint8(140), + 1: uint8(91), + }, + 86: { + 0: uint8(142), + 1: uint8(92), + }, + 87: { + 0: uint8(143), + 1: uint8(92), + }, + 88: { + 0: uint8(172), + 1: uint8(93), + }, + 89: { + 0: uint8(173), + 1: uint8(94), + }, + 90: { + 0: uint8(174), + 1: uint8(94), + }, + 91: { + 0: uint8(175), + 1: uint8(94), + }, + 92: { + 0: uint8(194), + 1: uint8(95), + }, + 93: { + 0: uint8(204), + 1: uint8(96), + }, + 94: { + 0: uint8(205), + 1: uint8(97), + }, + 95: { + 0: uint8(206), + 1: uint8(97), + }, + 96: { + 0: uint8(207), + 1: uint8(98), + }, + 97: { + 0: uint8(208), + 1: uint8(99), + }, + 98: { + 0: uint8(209), + 1: uint8(100), + }, + 99: { + 0: uint8(213), + 1: uint8(101), + }, + 100: { + 0: uint8(214), + 1: uint8(102), + }, + 101: { + 0: uint8(215), + 1: uint8(103), + }, + 102: { + 0: uint8(240), + 1: uint8(104), + }, + 103: { + 0: uint8(241), + 1: uint8(105), + }, + 104: { + 0: uint8(242), + 1: uint8(106), + }, + 105: { + 0: uint8(243), + 1: uint8(107), + }, + 106: { + 0: uint8(244), + 1: uint8(108), + }, + 107: { + 0: uint8(245), + 1: uint8(109), + }, + 108: { + 0: uint8(249), + 1: uint8(110), + }, + 109: { + 0: uint8(253), + 1: uint8(45), + }, + 110: { + 0: uint8(254), + 1: uint8(45), + }, + 111: { + 0: uint8(255), + 1: uint8(45), + }, + 112: { + 0: uint8(80), + 1: uint8(105), + }, + 113: { + 0: uint8(81), + 1: uint8(105), + }, + 114: { + 0: uint8(82), + 1: uint8(105), + }, + 115: { + 0: uint8(83), + 1: uint8(105), + }, + 116: { + 0: uint8(84), + 1: uint8(105), + }, + 117: { + 0: uint8(85), + 1: uint8(105), + }, + 118: { + 0: uint8(86), + 1: uint8(105), + }, + 119: { + 0: uint8(87), + 1: uint8(105), + }, + 120: { + 0: uint8(88), + 1: uint8(105), + }, + 121: { + 0: uint8(89), + 1: uint8(105), + }, + 122: { + 0: uint8(90), + 1: uint8(105), + }, + 123: { + 0: uint8(91), + 1: uint8(105), + }, + 124: { + 0: uint8(92), + 1: uint8(105), + }, + 125: { + 0: uint8(93), + 1: uint8(105), + }, + 126: { + 0: uint8(94), + 1: uint8(105), + }, + 127: { + 0: uint8(95), + 1: uint8(105), + }, + 128: { + 0: uint8(130), + }, + 129: { + 0: uint8(131), + }, + 130: { + 0: uint8(132), + }, + 131: { + 0: uint8(133), + }, + 132: { + 0: uint8(134), + }, + 133: { + 0: uint8(135), + }, + 134: { + 0: uint8(136), + }, + 135: { + 0: uint8(137), + }, + 136: { + 0: uint8(192), + 1: uint8(117), + }, + 137: { + 0: uint8(207), + 1: uint8(118), + }, + 138: { + 0: uint8(128), + 1: uint8(137), + }, + 139: { + 0: uint8(129), + 1: uint8(138), + }, + 140: { + 0: uint8(130), + 1: uint8(139), + }, + 141: { + 0: uint8(133), + 1: uint8(140), + }, + 142: { + 0: uint8(134), + 1: uint8(141), + }, + 143: { + 0: uint8(112), + 1: uint8(157), + }, + 144: { + 0: uint8(113), + 1: uint8(157), + }, + 145: { + 0: uint8(118), + 1: uint8(158), + }, + 146: { + 0: uint8(119), + 1: uint8(158), + }, + 147: { + 0: uint8(120), + 1: uint8(159), + }, + 148: { + 0: uint8(121), + 1: uint8(159), + }, + 149: { + 0: uint8(122), + 1: uint8(160), + }, + 150: { + 0: uint8(123), + 1: uint8(160), + }, + 151: { + 0: uint8(124), + 1: uint8(161), + }, + 152: { + 0: uint8(125), + 1: uint8(161), + }, + 153: { + 0: uint8(179), + 1: uint8(162), + }, + 154: { + 0: uint8(186), + 1: uint8(163), + }, + 155: { + 0: uint8(187), + 1: uint8(163), + }, + 156: { + 0: uint8(188), + 1: uint8(164), + }, + 157: { + 0: uint8(190), + 1: uint8(165), + }, + 158: { + 0: uint8(195), + 1: uint8(162), + }, + 159: { + 0: uint8(204), + 1: uint8(164), + }, + 160: { + 0: uint8(218), + 1: uint8(166), + }, + 161: { + 0: uint8(219), + 1: uint8(166), + }, + 162: { + 0: uint8(229), + 1: uint8(106), + }, + 163: { + 0: uint8(234), + 1: uint8(167), + }, + 164: { + 0: uint8(235), + 1: uint8(167), + }, + 165: { + 0: uint8(236), + 1: uint8(110), + }, + 166: { + 0: uint8(243), + 1: uint8(162), + }, + 167: { + 0: uint8(248), + 1: uint8(168), + }, + 168: { + 0: uint8(249), + 1: uint8(168), + }, + 169: { + 0: uint8(250), + 1: uint8(169), + }, + 170: { + 0: uint8(251), + 1: uint8(169), + }, + 171: { + 0: uint8(252), + 1: uint8(164), + }, + 172: { + 0: uint8(38), + 1: uint8(176), + }, + 173: { + 0: uint8(42), + 1: uint8(177), + }, + 174: { + 0: uint8(43), + 1: uint8(178), + }, + 175: { + 0: uint8(78), + 1: uint8(179), + }, + 176: { + 0: uint8(132), + 1: uint8(8), + }, + 177: { + 0: uint8(98), + 1: uint8(186), + }, + 178: { + 0: uint8(99), + 1: uint8(187), + }, + 179: { + 0: uint8(100), + 1: uint8(188), + }, + 180: { + 0: uint8(101), + 1: uint8(189), + }, + 181: { + 0: uint8(102), + 1: uint8(190), + }, + 182: { + 0: uint8(109), + 1: uint8(191), + }, + 183: { + 0: uint8(110), + 1: uint8(192), + }, + 184: { + 0: uint8(111), + 1: uint8(193), + }, + 185: { + 0: uint8(112), + 1: uint8(194), + }, + 186: { + 0: uint8(126), + 1: uint8(195), + }, + 187: { + 0: uint8(127), + 1: uint8(195), + }, + 188: { + 0: uint8(125), + 1: uint8(207), + }, + 189: { + 0: uint8(141), + 1: uint8(208), + }, + 190: { + 0: uint8(148), + 1: uint8(209), + }, + 191: { + 0: uint8(171), + 1: uint8(210), + }, + 192: { + 0: uint8(172), + 1: uint8(211), + }, + 193: { + 0: uint8(173), + 1: uint8(212), + }, + 194: { + 0: uint8(176), + 1: uint8(213), + }, + 195: { + 0: uint8(177), + 1: uint8(214), + }, + 196: { + 0: uint8(178), + 1: uint8(215), + }, + 197: { + 0: uint8(196), + 1: uint8(216), + }, + 198: { + 0: uint8(197), + 1: uint8(217), + }, + 199: { + 0: uint8(198), + 1: uint8(218), + }, +} + +func _casemap(tls *TLS, c uint32, dir int32) (r1 int32) { + var b, rt, try, v, x, xb, xn, y uint32 + var c0, r, rd, v1 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = b, c0, r, rd, rt, try, v, x, xb, xn, y, v1 + c0 = int32(c) + if c >= uint32(0x20000) { + return int32(c) + } + b = c >> int32(8) + c &= uint32(255) + x = c / uint32(3) + y = c % uint32(3) + /* lookup entry in two-level base-6 table */ + v = uint32(_tab1[uint32(int32(_tab1[b])*int32(86))+x]) + v = v * uint32(_mt[y]) >> int32(11) % uint32(6) + /* use the bit vector out of the tables as an index into + * a block-specific set of rules and decode the rule into + * a type and a case-mapping delta. */ + r = _rules[uint32(_rulebases[b])+v] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + /* rules 0/1 are simple lower/upper case with a delta. + * apply according to desired mapping direction. */ + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* binary search. endpoints of the binary search for + * this block are stored in the rule delta field. */ + xn = uint32(rd & int32(0xff)) + xb = uint32(rd) >> int32(8) + for xn != 0 { + try = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2))) + if try == c { + r = _rules[*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_exceptions)) + uintptr(xb+xn/uint32(2))*2 + 1))] + rt = uint32(r & int32(255)) + rd = r >> int32(8) + if rt < uint32(2) { + return int32(uint32(c0) + uint32(rd)&-(rt^uint32(dir))) + } + /* Hard-coded for the four exceptional titlecase */ + if dir != 0 { + v1 = -int32(1) + } else { + v1 = int32(1) + } + return c0 + v1 + } else { + if try > c { + xn /= uint32(2) + } else { + xb += xn / uint32(2) + xn -= xn / uint32(2) + } + } + } + return c0 +} + +var _mt = [3]int32{ + 0: int32(2048), + 1: int32(342), + 2: int32(57), +} + +func Xtowlower(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, 0)) +} + +func Xtowupper(tls *TLS, wc Twint_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(_casemap(tls, wc, int32(1))) +} + +func X__towupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowupper(tls, c) +} + +func X__towlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowlower(tls, c) +} + +func Xtowlower_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towlower_l(tls, c, l) +} + +func Xtowupper_l(tls *TLS, c Twint_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towupper_l(tls, c, l) +} + +func Xwcswidth(tls *TLS, wcs uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v, (%v:)", tls, wcs, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k, l, v3, v5 int32 + var v2 Tsize_t + var v4 bool + _, _, _, _, _, _ = k, l, v2, v3, v4, v5 + l = 0 + k = 0 + for { + v2 = n + n-- + if v4 = v2 != 0 && *(*Twchar_t)(unsafe.Pointer(wcs)) != 0; v4 { + v3 = Xwcwidth(tls, *(*Twchar_t)(unsafe.Pointer(wcs))) + k = v3 + } + if !(v4 && v3 >= 0) { + break + } + goto _1 + _1: + ; + l += k + wcs += 4 + } + if k < 0 { + v5 = k + } else { + v5 = l + } + return v5 +} + +func Xwctrans(tls *TLS, class uintptr) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v class=%v, (%v:)", tls, class, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(Xstrcmp(tls, class, __ccgo_ts+196) != 0) { + return UintptrFromInt32(1) + } + if !(Xstrcmp(tls, class, __ccgo_ts+204) != 0) { + return UintptrFromInt32(2) + } + return uintptr(0) +} + +func Xtowctrans(tls *TLS, wc Twint_t, trans Twctrans_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v wc=%v trans=%v, (%v:)", tls, wc, trans, origin(2)) + defer func() { trc("-> %v", r) }() + } + if trans == UintptrFromInt32(1) { + return Xtowupper(tls, wc) + } + if trans == UintptrFromInt32(2) { + return Xtowlower(tls, wc) + } + return wc +} + +func X__wctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwctrans(tls, s) +} + +func X__towctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtowctrans(tls, c, t) +} + +func Xtowctrans_l(tls *TLS, c Twint_t, t Twctrans_t, l Tlocale_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v t=%v l=%v, (%v:)", tls, c, t, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__towctrans_l(tls, c, t, l) +} + +func Xwctrans_l(tls *TLS, s uintptr, l Tlocale_t) (r Twctrans_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v, (%v:)", tls, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wctrans_l(tls, s, l) +} + +var _table5 = [2784]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(18), + 4: uint8(19), + 5: uint8(20), + 6: uint8(21), + 7: uint8(22), + 8: uint8(23), + 9: uint8(24), + 10: uint8(25), + 11: uint8(26), + 12: uint8(27), + 13: uint8(28), + 14: uint8(29), + 15: uint8(30), + 16: uint8(31), + 17: uint8(32), + 18: uint8(16), + 19: uint8(33), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(34), + 24: uint8(35), + 25: uint8(36), + 26: uint8(37), + 27: uint8(38), + 28: uint8(39), + 29: uint8(40), + 30: uint8(16), + 31: uint8(16), + 32: uint8(41), + 33: uint8(16), + 34: uint8(16), + 35: uint8(16), + 36: uint8(16), + 37: uint8(16), + 38: uint8(16), + 39: uint8(16), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(16), + 44: uint8(42), + 45: uint8(43), + 46: uint8(16), + 47: uint8(16), + 48: uint8(44), + 49: uint8(16), + 50: uint8(16), + 51: uint8(16), + 52: uint8(16), + 53: uint8(16), + 54: uint8(16), + 55: uint8(16), + 56: uint8(16), + 57: uint8(16), + 58: uint8(16), + 59: uint8(16), + 60: uint8(16), + 61: uint8(16), + 62: uint8(16), + 63: uint8(16), + 64: uint8(16), + 65: uint8(16), + 66: uint8(16), + 67: uint8(16), + 68: uint8(16), + 69: uint8(16), + 70: uint8(16), + 71: uint8(16), + 72: uint8(16), + 73: uint8(16), + 74: uint8(16), + 75: uint8(16), + 76: uint8(16), + 77: uint8(16), + 78: uint8(16), + 79: uint8(16), + 80: uint8(16), + 81: uint8(16), + 82: uint8(16), + 83: uint8(16), + 84: uint8(16), + 85: uint8(16), + 86: uint8(16), + 87: uint8(16), + 88: uint8(16), + 89: uint8(16), + 90: uint8(16), + 91: uint8(16), + 92: uint8(16), + 93: uint8(16), + 94: uint8(16), + 95: uint8(16), + 96: uint8(16), + 97: uint8(16), + 98: uint8(16), + 99: uint8(16), + 100: uint8(16), + 101: uint8(16), + 102: uint8(16), + 103: uint8(16), + 104: uint8(16), + 105: uint8(16), + 106: uint8(16), + 107: uint8(16), + 108: uint8(16), + 109: uint8(16), + 110: uint8(16), + 111: uint8(16), + 112: uint8(16), + 113: uint8(16), + 114: uint8(16), + 115: uint8(16), + 116: uint8(16), + 117: uint8(16), + 118: uint8(16), + 119: uint8(16), + 120: uint8(16), + 121: uint8(16), + 122: uint8(16), + 123: uint8(16), + 124: uint8(16), + 125: uint8(16), + 126: uint8(16), + 127: uint8(16), + 128: uint8(16), + 129: uint8(16), + 130: uint8(16), + 131: uint8(16), + 132: uint8(16), + 133: uint8(16), + 134: uint8(16), + 135: uint8(16), + 136: uint8(16), + 137: uint8(16), + 138: uint8(16), + 139: uint8(16), + 140: uint8(16), + 141: uint8(16), + 142: uint8(16), + 143: uint8(16), + 144: uint8(16), + 145: uint8(16), + 146: uint8(16), + 147: uint8(16), + 148: uint8(16), + 149: uint8(16), + 150: uint8(16), + 151: uint8(16), + 152: uint8(16), + 153: uint8(16), + 154: uint8(16), + 155: uint8(16), + 156: uint8(16), + 157: uint8(16), + 158: uint8(16), + 159: uint8(16), + 160: uint8(16), + 161: uint8(16), + 162: uint8(16), + 163: uint8(16), + 164: uint8(16), + 165: uint8(16), + 166: uint8(45), + 167: uint8(16), + 168: uint8(46), + 169: uint8(47), + 170: uint8(48), + 171: uint8(49), + 172: uint8(16), + 173: uint8(16), + 174: uint8(16), + 175: uint8(16), + 176: uint8(16), + 177: uint8(16), + 178: uint8(16), + 179: uint8(16), + 180: uint8(16), + 181: uint8(16), + 182: uint8(16), + 183: uint8(16), + 184: uint8(16), + 185: uint8(16), + 186: uint8(16), + 187: uint8(16), + 188: uint8(16), + 189: uint8(16), + 190: uint8(16), + 191: uint8(16), + 192: uint8(16), + 193: uint8(16), + 194: uint8(16), + 195: uint8(16), + 196: uint8(16), + 197: uint8(16), + 198: uint8(16), + 199: uint8(16), + 200: uint8(16), + 201: uint8(16), + 202: uint8(16), + 203: uint8(16), + 204: uint8(16), + 205: uint8(16), + 206: uint8(16), + 207: uint8(16), + 208: uint8(16), + 209: uint8(16), + 210: uint8(16), + 211: uint8(16), + 212: uint8(16), + 213: uint8(16), + 214: uint8(16), + 215: uint8(50), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(16), + 250: uint8(16), + 251: uint8(51), + 252: uint8(16), + 253: uint8(16), + 254: uint8(52), + 255: uint8(53), + 256: uint8(16), + 257: uint8(54), + 258: uint8(55), + 259: uint8(56), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(57), + 267: uint8(16), + 268: uint8(16), + 269: uint8(58), + 270: uint8(16), + 271: uint8(59), + 272: uint8(60), + 273: uint8(61), + 274: uint8(62), + 275: uint8(63), + 276: uint8(64), + 277: uint8(65), + 278: uint8(66), + 279: uint8(67), + 280: uint8(68), + 281: uint8(69), + 282: uint8(70), + 283: uint8(16), + 284: uint8(71), + 285: uint8(72), + 286: uint8(73), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(74), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(75), + 363: uint8(76), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(77), + 368: uint8(16), + 369: uint8(16), + 370: uint8(16), + 371: uint8(16), + 372: uint8(16), + 373: uint8(16), + 374: uint8(16), + 375: uint8(16), + 376: uint8(16), + 377: uint8(16), + 378: uint8(16), + 379: uint8(16), + 380: uint8(16), + 381: uint8(16), + 382: uint8(16), + 383: uint8(16), + 384: uint8(16), + 385: uint8(16), + 386: uint8(16), + 387: uint8(16), + 388: uint8(16), + 389: uint8(16), + 390: uint8(16), + 391: uint8(16), + 392: uint8(16), + 393: uint8(16), + 394: uint8(16), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(16), + 433: uint8(16), + 434: uint8(16), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(78), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(79), + 466: uint8(80), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(81), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(82), + 481: uint8(83), + 482: uint8(84), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(85), + 489: uint8(86), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(16), + 497: uint8(16), + 498: uint8(16), + 499: uint8(16), + 500: uint8(16), + 501: uint8(16), + 502: uint8(16), + 503: uint8(16), + 504: uint8(16), + 505: uint8(16), + 506: uint8(16), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 588: uint8(255), + 589: uint8(255), + 624: uint8(248), + 625: uint8(3), + 658: uint8(254), + 659: uint8(255), + 660: uint8(255), + 661: uint8(255), + 662: uint8(255), + 663: uint8(191), + 664: uint8(182), + 672: uint8(63), + 674: uint8(255), + 675: uint8(23), + 681: uint8(248), + 682: uint8(255), + 683: uint8(255), + 686: uint8(1), + 698: uint8(192), + 699: uint8(191), + 700: uint8(159), + 701: uint8(61), + 705: uint8(128), + 706: uint8(2), + 710: uint8(255), + 711: uint8(255), + 712: uint8(255), + 713: uint8(7), + 724: uint8(192), + 725: uint8(255), + 726: uint8(1), + 733: uint8(248), + 734: uint8(15), + 735: uint8(32), + 738: uint8(192), + 739: uint8(251), + 740: uint8(239), + 741: uint8(62), + 747: uint8(14), + 762: uint8(248), + 763: uint8(255), + 764: uint8(255), + 765: uint8(255), + 766: uint8(255), + 767: uint8(255), + 768: uint8(7), + 775: uint8(20), + 776: uint8(254), + 777: uint8(33), + 778: uint8(254), + 780: uint8(12), + 784: uint8(2), + 791: uint8(16), + 792: uint8(30), + 793: uint8(32), + 796: uint8(12), + 799: uint8(64), + 800: uint8(6), + 807: uint8(16), + 808: uint8(134), + 809: uint8(57), + 810: uint8(2), + 814: uint8(35), + 816: uint8(6), + 823: uint8(16), + 824: uint8(190), + 825: uint8(33), + 828: uint8(12), + 831: uint8(252), + 832: uint8(2), + 839: uint8(144), + 840: uint8(30), + 841: uint8(32), + 842: uint8(64), + 844: uint8(12), + 848: uint8(4), + 856: uint8(1), + 857: uint8(32), + 864: uint8(17), + 871: uint8(192), + 872: uint8(193), + 873: uint8(61), + 874: uint8(96), + 876: uint8(12), + 880: uint8(2), + 887: uint8(144), + 888: uint8(64), + 889: uint8(48), + 892: uint8(12), + 896: uint8(3), + 903: uint8(24), + 904: uint8(30), + 905: uint8(32), + 908: uint8(12), + 921: uint8(4), + 922: uint8(92), + 934: uint8(242), + 935: uint8(7), + 936: uint8(128), + 937: uint8(127), + 950: uint8(242), + 951: uint8(31), + 953: uint8(63), + 963: uint8(3), + 966: uint8(160), + 967: uint8(2), + 974: uint8(254), + 975: uint8(127), + 976: uint8(223), + 977: uint8(224), + 978: uint8(255), + 979: uint8(254), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(31), + 984: uint8(64), + 997: uint8(224), + 998: uint8(253), + 999: uint8(102), + 1003: uint8(195), + 1004: uint8(1), + 1006: uint8(30), + 1008: uint8(100), + 1009: uint8(32), + 1011: uint8(32), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(255), + 1045: uint8(255), + 1046: uint8(255), + 1047: uint8(255), + 1048: uint8(255), + 1049: uint8(255), + 1050: uint8(255), + 1051: uint8(255), + 1052: uint8(255), + 1053: uint8(255), + 1054: uint8(255), + 1055: uint8(255), + 1067: uint8(224), + 1090: uint8(28), + 1094: uint8(28), + 1098: uint8(12), + 1102: uint8(12), + 1110: uint8(176), + 1111: uint8(63), + 1112: uint8(64), + 1113: uint8(254), + 1114: uint8(15), + 1115: uint8(32), + 1121: uint8(120), + 1136: uint8(96), + 1141: uint8(2), + 1156: uint8(135), + 1157: uint8(1), + 1158: uint8(4), + 1159: uint8(14), + 1186: uint8(128), + 1187: uint8(9), + 1194: uint8(64), + 1195: uint8(127), + 1196: uint8(229), + 1197: uint8(31), + 1198: uint8(248), + 1199: uint8(159), + 1206: uint8(255), + 1207: uint8(127), + 1216: uint8(15), + 1222: uint8(208), + 1223: uint8(23), + 1224: uint8(4), + 1229: uint8(248), + 1230: uint8(15), + 1232: uint8(3), + 1236: uint8(60), + 1237: uint8(59), + 1244: uint8(64), + 1245: uint8(163), + 1246: uint8(3), + 1253: uint8(240), + 1254: uint8(207), + 1274: uint8(247), + 1275: uint8(255), + 1276: uint8(253), + 1277: uint8(33), + 1278: uint8(16), + 1279: uint8(3), + 1304: uint8(255), + 1305: uint8(255), + 1306: uint8(255), + 1307: uint8(255), + 1308: uint8(255), + 1309: uint8(255), + 1310: uint8(255), + 1311: uint8(251), + 1313: uint8(248), + 1317: uint8(124), + 1324: uint8(223), + 1325: uint8(255), + 1338: uint8(255), + 1339: uint8(255), + 1340: uint8(255), + 1341: uint8(255), + 1342: uint8(1), + 1373: uint8(128), + 1374: uint8(3), + 1391: uint8(128), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(255), + 1407: uint8(255), + 1413: uint8(60), + 1427: uint8(6), + 1453: uint8(128), + 1454: uint8(247), + 1455: uint8(63), + 1459: uint8(192), + 1470: uint8(3), + 1472: uint8(68), + 1473: uint8(8), + 1476: uint8(96), + 1496: uint8(48), + 1500: uint8(255), + 1501: uint8(255), + 1502: uint8(3), + 1503: uint8(128), + 1508: uint8(192), + 1509: uint8(63), + 1512: uint8(128), + 1513: uint8(255), + 1514: uint8(3), + 1520: uint8(7), + 1526: uint8(200), + 1527: uint8(51), + 1532: uint8(32), + 1541: uint8(126), + 1542: uint8(102), + 1544: uint8(8), + 1545: uint8(16), + 1551: uint8(16), + 1558: uint8(157), + 1559: uint8(193), + 1560: uint8(2), + 1565: uint8(48), + 1566: uint8(64), + 1596: uint8(32), + 1597: uint8(33), + 1622: uint8(255), + 1623: uint8(255), + 1624: uint8(255), + 1625: uint8(255), + 1626: uint8(255), + 1627: uint8(255), + 1628: uint8(255), + 1629: uint8(255), + 1630: uint8(255), + 1631: uint8(255), + 1635: uint8(64), + 1664: uint8(255), + 1665: uint8(255), + 1668: uint8(255), + 1669: uint8(255), + 1695: uint8(128), + 1727: uint8(14), + 1759: uint8(32), + 1788: uint8(1), + 1806: uint8(192), + 1807: uint8(7), + 1824: uint8(110), + 1825: uint8(240), + 1831: uint8(135), + 1852: uint8(96), + 1860: uint8(240), + 1896: uint8(192), + 1897: uint8(255), + 1898: uint8(1), + 1920: uint8(2), + 1927: uint8(255), + 1928: uint8(127), + 1935: uint8(128), + 1936: uint8(3), + 1942: uint8(120), + 1943: uint8(38), + 1945: uint8(32), + 1952: uint8(7), + 1956: uint8(128), + 1957: uint8(239), + 1958: uint8(31), + 1966: uint8(8), + 1968: uint8(3), + 1974: uint8(192), + 1975: uint8(127), + 1977: uint8(30), + 1989: uint8(128), + 1990: uint8(211), + 1991: uint8(64), + 2011: uint8(128), + 2012: uint8(248), + 2013: uint8(7), + 2016: uint8(3), + 2023: uint8(24), + 2024: uint8(1), + 2028: uint8(192), + 2029: uint8(31), + 2030: uint8(31), + 2055: uint8(255), + 2056: uint8(92), + 2059: uint8(64), + 2070: uint8(248), + 2071: uint8(133), + 2072: uint8(13), + 2102: uint8(60), + 2103: uint8(176), + 2104: uint8(1), + 2107: uint8(48), + 2118: uint8(248), + 2119: uint8(167), + 2120: uint8(1), + 2133: uint8(40), + 2134: uint8(191), + 2147: uint8(224), + 2148: uint8(188), + 2149: uint8(15), + 2181: uint8(128), + 2182: uint8(255), + 2183: uint8(6), + 2234: uint8(240), + 2235: uint8(12), + 2236: uint8(1), + 2240: uint8(254), + 2241: uint8(7), + 2246: uint8(248), + 2247: uint8(121), + 2248: uint8(128), + 2250: uint8(126), + 2251: uint8(14), + 2257: uint8(252), + 2258: uint8(127), + 2259: uint8(3), + 2278: uint8(127), + 2279: uint8(191), + 2290: uint8(252), + 2291: uint8(255), + 2292: uint8(255), + 2293: uint8(252), + 2294: uint8(109), + 2310: uint8(126), + 2311: uint8(180), + 2312: uint8(191), + 2322: uint8(163), + 2366: uint8(24), + 2374: uint8(255), + 2375: uint8(1), + 2430: uint8(31), + 2438: uint8(127), + 2473: uint8(128), + 2481: uint8(128), + 2482: uint8(7), + 2515: uint8(96), + 2516: uint8(15), + 2540: uint8(128), + 2541: uint8(3), + 2542: uint8(248), + 2543: uint8(255), + 2544: uint8(231), + 2545: uint8(15), + 2549: uint8(60), + 2568: uint8(28), + 2592: uint8(255), + 2593: uint8(255), + 2594: uint8(255), + 2595: uint8(255), + 2596: uint8(255), + 2597: uint8(255), + 2598: uint8(127), + 2599: uint8(248), + 2600: uint8(255), + 2601: uint8(255), + 2602: uint8(255), + 2603: uint8(255), + 2604: uint8(255), + 2605: uint8(31), + 2606: uint8(32), + 2608: uint8(16), + 2611: uint8(248), + 2612: uint8(254), + 2613: uint8(255), + 2624: uint8(127), + 2625: uint8(255), + 2626: uint8(255), + 2627: uint8(249), + 2628: uint8(219), + 2629: uint8(7), + 2662: uint8(127), + 2717: uint8(240), + 2746: uint8(127), + 2760: uint8(240), + 2761: uint8(7), +} + +var _wtable = [1600]uint8{ + 0: uint8(16), + 1: uint8(16), + 2: uint8(16), + 3: uint8(16), + 4: uint8(16), + 5: uint8(16), + 6: uint8(16), + 7: uint8(16), + 8: uint8(16), + 9: uint8(16), + 10: uint8(16), + 11: uint8(16), + 12: uint8(16), + 13: uint8(16), + 14: uint8(16), + 15: uint8(16), + 16: uint8(16), + 17: uint8(18), + 18: uint8(16), + 19: uint8(16), + 20: uint8(16), + 21: uint8(16), + 22: uint8(16), + 23: uint8(16), + 24: uint8(16), + 25: uint8(16), + 26: uint8(16), + 27: uint8(16), + 28: uint8(16), + 29: uint8(16), + 30: uint8(16), + 31: uint8(16), + 32: uint8(16), + 33: uint8(16), + 34: uint8(16), + 35: uint8(19), + 36: uint8(16), + 37: uint8(20), + 38: uint8(21), + 39: uint8(22), + 40: uint8(16), + 41: uint8(16), + 42: uint8(16), + 43: uint8(23), + 44: uint8(16), + 45: uint8(16), + 46: uint8(24), + 47: uint8(25), + 48: uint8(26), + 49: uint8(27), + 50: uint8(28), + 51: uint8(17), + 52: uint8(17), + 53: uint8(17), + 54: uint8(17), + 55: uint8(17), + 56: uint8(17), + 57: uint8(17), + 58: uint8(17), + 59: uint8(17), + 60: uint8(17), + 61: uint8(17), + 62: uint8(17), + 63: uint8(17), + 64: uint8(17), + 65: uint8(17), + 66: uint8(17), + 67: uint8(17), + 68: uint8(17), + 69: uint8(17), + 70: uint8(17), + 71: uint8(17), + 72: uint8(17), + 73: uint8(17), + 74: uint8(17), + 75: uint8(17), + 76: uint8(17), + 77: uint8(29), + 78: uint8(17), + 79: uint8(17), + 80: uint8(17), + 81: uint8(17), + 82: uint8(17), + 83: uint8(17), + 84: uint8(17), + 85: uint8(17), + 86: uint8(17), + 87: uint8(17), + 88: uint8(17), + 89: uint8(17), + 90: uint8(17), + 91: uint8(17), + 92: uint8(17), + 93: uint8(17), + 94: uint8(17), + 95: uint8(17), + 96: uint8(17), + 97: uint8(17), + 98: uint8(17), + 99: uint8(17), + 100: uint8(17), + 101: uint8(17), + 102: uint8(17), + 103: uint8(17), + 104: uint8(17), + 105: uint8(17), + 106: uint8(17), + 107: uint8(17), + 108: uint8(17), + 109: uint8(17), + 110: uint8(17), + 111: uint8(17), + 112: uint8(17), + 113: uint8(17), + 114: uint8(17), + 115: uint8(17), + 116: uint8(17), + 117: uint8(17), + 118: uint8(17), + 119: uint8(17), + 120: uint8(17), + 121: uint8(17), + 122: uint8(17), + 123: uint8(17), + 124: uint8(17), + 125: uint8(17), + 126: uint8(17), + 127: uint8(17), + 128: uint8(17), + 129: uint8(17), + 130: uint8(17), + 131: uint8(17), + 132: uint8(17), + 133: uint8(17), + 134: uint8(17), + 135: uint8(17), + 136: uint8(17), + 137: uint8(17), + 138: uint8(17), + 139: uint8(17), + 140: uint8(17), + 141: uint8(17), + 142: uint8(17), + 143: uint8(17), + 144: uint8(17), + 145: uint8(17), + 146: uint8(17), + 147: uint8(17), + 148: uint8(17), + 149: uint8(17), + 150: uint8(17), + 151: uint8(17), + 152: uint8(17), + 153: uint8(17), + 154: uint8(17), + 155: uint8(17), + 156: uint8(17), + 157: uint8(17), + 158: uint8(17), + 159: uint8(17), + 160: uint8(17), + 161: uint8(17), + 162: uint8(17), + 163: uint8(17), + 164: uint8(30), + 165: uint8(16), + 166: uint8(16), + 167: uint8(16), + 168: uint8(16), + 169: uint8(31), + 170: uint8(16), + 171: uint8(16), + 172: uint8(17), + 173: uint8(17), + 174: uint8(17), + 175: uint8(17), + 176: uint8(17), + 177: uint8(17), + 178: uint8(17), + 179: uint8(17), + 180: uint8(17), + 181: uint8(17), + 182: uint8(17), + 183: uint8(17), + 184: uint8(17), + 185: uint8(17), + 186: uint8(17), + 187: uint8(17), + 188: uint8(17), + 189: uint8(17), + 190: uint8(17), + 191: uint8(17), + 192: uint8(17), + 193: uint8(17), + 194: uint8(17), + 195: uint8(17), + 196: uint8(17), + 197: uint8(17), + 198: uint8(17), + 199: uint8(17), + 200: uint8(17), + 201: uint8(17), + 202: uint8(17), + 203: uint8(17), + 204: uint8(17), + 205: uint8(17), + 206: uint8(17), + 207: uint8(17), + 208: uint8(17), + 209: uint8(17), + 210: uint8(17), + 211: uint8(17), + 212: uint8(17), + 213: uint8(17), + 214: uint8(17), + 215: uint8(32), + 216: uint8(16), + 217: uint8(16), + 218: uint8(16), + 219: uint8(16), + 220: uint8(16), + 221: uint8(16), + 222: uint8(16), + 223: uint8(16), + 224: uint8(16), + 225: uint8(16), + 226: uint8(16), + 227: uint8(16), + 228: uint8(16), + 229: uint8(16), + 230: uint8(16), + 231: uint8(16), + 232: uint8(16), + 233: uint8(16), + 234: uint8(16), + 235: uint8(16), + 236: uint8(16), + 237: uint8(16), + 238: uint8(16), + 239: uint8(16), + 240: uint8(16), + 241: uint8(16), + 242: uint8(16), + 243: uint8(16), + 244: uint8(16), + 245: uint8(16), + 246: uint8(16), + 247: uint8(16), + 248: uint8(16), + 249: uint8(17), + 250: uint8(17), + 251: uint8(16), + 252: uint8(16), + 253: uint8(16), + 254: uint8(33), + 255: uint8(34), + 256: uint8(16), + 257: uint8(16), + 258: uint8(16), + 259: uint8(16), + 260: uint8(16), + 261: uint8(16), + 262: uint8(16), + 263: uint8(16), + 264: uint8(16), + 265: uint8(16), + 266: uint8(16), + 267: uint8(16), + 268: uint8(16), + 269: uint8(16), + 270: uint8(16), + 271: uint8(16), + 272: uint8(16), + 273: uint8(16), + 274: uint8(16), + 275: uint8(16), + 276: uint8(16), + 277: uint8(16), + 278: uint8(16), + 279: uint8(16), + 280: uint8(16), + 281: uint8(16), + 282: uint8(16), + 283: uint8(16), + 284: uint8(16), + 285: uint8(16), + 286: uint8(16), + 287: uint8(16), + 288: uint8(16), + 289: uint8(16), + 290: uint8(16), + 291: uint8(16), + 292: uint8(16), + 293: uint8(16), + 294: uint8(16), + 295: uint8(16), + 296: uint8(16), + 297: uint8(16), + 298: uint8(16), + 299: uint8(16), + 300: uint8(16), + 301: uint8(16), + 302: uint8(16), + 303: uint8(16), + 304: uint8(16), + 305: uint8(16), + 306: uint8(16), + 307: uint8(16), + 308: uint8(16), + 309: uint8(16), + 310: uint8(16), + 311: uint8(16), + 312: uint8(16), + 313: uint8(16), + 314: uint8(16), + 315: uint8(16), + 316: uint8(16), + 317: uint8(16), + 318: uint8(16), + 319: uint8(16), + 320: uint8(16), + 321: uint8(16), + 322: uint8(16), + 323: uint8(16), + 324: uint8(16), + 325: uint8(16), + 326: uint8(16), + 327: uint8(16), + 328: uint8(16), + 329: uint8(16), + 330: uint8(16), + 331: uint8(16), + 332: uint8(16), + 333: uint8(16), + 334: uint8(16), + 335: uint8(16), + 336: uint8(16), + 337: uint8(16), + 338: uint8(16), + 339: uint8(16), + 340: uint8(16), + 341: uint8(16), + 342: uint8(16), + 343: uint8(16), + 344: uint8(16), + 345: uint8(16), + 346: uint8(16), + 347: uint8(16), + 348: uint8(16), + 349: uint8(16), + 350: uint8(16), + 351: uint8(16), + 352: uint8(16), + 353: uint8(16), + 354: uint8(16), + 355: uint8(16), + 356: uint8(16), + 357: uint8(16), + 358: uint8(16), + 359: uint8(16), + 360: uint8(16), + 361: uint8(16), + 362: uint8(16), + 363: uint8(16), + 364: uint8(16), + 365: uint8(16), + 366: uint8(16), + 367: uint8(35), + 368: uint8(17), + 369: uint8(17), + 370: uint8(17), + 371: uint8(17), + 372: uint8(17), + 373: uint8(17), + 374: uint8(17), + 375: uint8(17), + 376: uint8(17), + 377: uint8(17), + 378: uint8(17), + 379: uint8(17), + 380: uint8(17), + 381: uint8(17), + 382: uint8(17), + 383: uint8(17), + 384: uint8(17), + 385: uint8(17), + 386: uint8(17), + 387: uint8(17), + 388: uint8(17), + 389: uint8(17), + 390: uint8(17), + 391: uint8(36), + 392: uint8(17), + 393: uint8(17), + 394: uint8(37), + 395: uint8(16), + 396: uint8(16), + 397: uint8(16), + 398: uint8(16), + 399: uint8(16), + 400: uint8(16), + 401: uint8(16), + 402: uint8(16), + 403: uint8(16), + 404: uint8(16), + 405: uint8(16), + 406: uint8(16), + 407: uint8(16), + 408: uint8(16), + 409: uint8(16), + 410: uint8(16), + 411: uint8(16), + 412: uint8(16), + 413: uint8(16), + 414: uint8(16), + 415: uint8(16), + 416: uint8(16), + 417: uint8(16), + 418: uint8(16), + 419: uint8(16), + 420: uint8(16), + 421: uint8(16), + 422: uint8(16), + 423: uint8(16), + 424: uint8(16), + 425: uint8(16), + 426: uint8(16), + 427: uint8(16), + 428: uint8(16), + 429: uint8(16), + 430: uint8(16), + 431: uint8(16), + 432: uint8(17), + 433: uint8(38), + 434: uint8(39), + 435: uint8(16), + 436: uint8(16), + 437: uint8(16), + 438: uint8(16), + 439: uint8(16), + 440: uint8(16), + 441: uint8(16), + 442: uint8(16), + 443: uint8(16), + 444: uint8(16), + 445: uint8(16), + 446: uint8(16), + 447: uint8(16), + 448: uint8(16), + 449: uint8(16), + 450: uint8(16), + 451: uint8(16), + 452: uint8(16), + 453: uint8(16), + 454: uint8(16), + 455: uint8(16), + 456: uint8(16), + 457: uint8(16), + 458: uint8(16), + 459: uint8(16), + 460: uint8(16), + 461: uint8(16), + 462: uint8(16), + 463: uint8(16), + 464: uint8(16), + 465: uint8(16), + 466: uint8(16), + 467: uint8(16), + 468: uint8(16), + 469: uint8(16), + 470: uint8(16), + 471: uint8(16), + 472: uint8(16), + 473: uint8(16), + 474: uint8(16), + 475: uint8(16), + 476: uint8(16), + 477: uint8(16), + 478: uint8(16), + 479: uint8(16), + 480: uint8(16), + 481: uint8(16), + 482: uint8(16), + 483: uint8(16), + 484: uint8(16), + 485: uint8(16), + 486: uint8(16), + 487: uint8(16), + 488: uint8(16), + 489: uint8(16), + 490: uint8(16), + 491: uint8(16), + 492: uint8(16), + 493: uint8(16), + 494: uint8(16), + 495: uint8(16), + 496: uint8(40), + 497: uint8(41), + 498: uint8(42), + 499: uint8(43), + 500: uint8(44), + 501: uint8(45), + 502: uint8(46), + 503: uint8(47), + 504: uint8(16), + 505: uint8(48), + 506: uint8(49), + 507: uint8(16), + 508: uint8(16), + 509: uint8(16), + 510: uint8(16), + 511: uint8(16), + 544: uint8(255), + 545: uint8(255), + 546: uint8(255), + 547: uint8(255), + 548: uint8(255), + 549: uint8(255), + 550: uint8(255), + 551: uint8(255), + 552: uint8(255), + 553: uint8(255), + 554: uint8(255), + 555: uint8(255), + 556: uint8(255), + 557: uint8(255), + 558: uint8(255), + 559: uint8(255), + 560: uint8(255), + 561: uint8(255), + 562: uint8(255), + 563: uint8(255), + 564: uint8(255), + 565: uint8(255), + 566: uint8(255), + 567: uint8(255), + 568: uint8(255), + 569: uint8(255), + 570: uint8(255), + 571: uint8(255), + 572: uint8(255), + 573: uint8(255), + 574: uint8(255), + 575: uint8(255), + 576: uint8(255), + 577: uint8(255), + 578: uint8(255), + 579: uint8(255), + 580: uint8(255), + 581: uint8(255), + 582: uint8(255), + 583: uint8(255), + 584: uint8(255), + 585: uint8(255), + 586: uint8(255), + 587: uint8(255), + 611: uint8(12), + 613: uint8(6), + 637: uint8(30), + 638: uint8(9), + 671: uint8(96), + 674: uint8(48), + 681: uint8(255), + 682: uint8(15), + 687: uint8(128), + 690: uint8(8), + 692: uint8(2), + 693: uint8(12), + 695: uint8(96), + 696: uint8(48), + 697: uint8(64), + 698: uint8(16), + 701: uint8(4), + 702: uint8(44), + 703: uint8(36), + 704: uint8(32), + 705: uint8(12), + 709: uint8(1), + 713: uint8(80), + 714: uint8(184), + 722: uint8(224), + 726: uint8(1), + 727: uint8(128), + 739: uint8(24), + 746: uint8(33), + 784: uint8(255), + 785: uint8(255), + 786: uint8(255), + 787: uint8(251), + 788: uint8(255), + 789: uint8(255), + 790: uint8(255), + 791: uint8(255), + 792: uint8(255), + 793: uint8(255), + 794: uint8(255), + 795: uint8(255), + 796: uint8(255), + 797: uint8(255), + 798: uint8(15), + 800: uint8(255), + 801: uint8(255), + 802: uint8(255), + 803: uint8(255), + 804: uint8(255), + 805: uint8(255), + 806: uint8(255), + 807: uint8(255), + 808: uint8(255), + 809: uint8(255), + 810: uint8(255), + 811: uint8(255), + 812: uint8(255), + 813: uint8(255), + 814: uint8(255), + 815: uint8(255), + 816: uint8(255), + 817: uint8(255), + 818: uint8(255), + 819: uint8(255), + 820: uint8(255), + 821: uint8(255), + 822: uint8(255), + 823: uint8(255), + 824: uint8(255), + 825: uint8(255), + 826: uint8(63), + 830: uint8(255), + 831: uint8(15), + 832: uint8(255), + 833: uint8(255), + 834: uint8(255), + 835: uint8(255), + 836: uint8(255), + 837: uint8(255), + 838: uint8(255), + 839: uint8(127), + 840: uint8(254), + 841: uint8(255), + 842: uint8(255), + 843: uint8(255), + 844: uint8(255), + 845: uint8(255), + 846: uint8(255), + 847: uint8(255), + 848: uint8(255), + 849: uint8(255), + 850: uint8(127), + 851: uint8(254), + 852: uint8(255), + 853: uint8(255), + 854: uint8(255), + 855: uint8(255), + 856: uint8(255), + 857: uint8(255), + 858: uint8(255), + 859: uint8(255), + 860: uint8(255), + 861: uint8(255), + 862: uint8(255), + 863: uint8(255), + 864: uint8(224), + 865: uint8(255), + 866: uint8(255), + 867: uint8(255), + 868: uint8(255), + 869: uint8(255), + 870: uint8(254), + 871: uint8(255), + 872: uint8(255), + 873: uint8(255), + 874: uint8(255), + 875: uint8(255), + 876: uint8(255), + 877: uint8(255), + 878: uint8(255), + 879: uint8(255), + 880: uint8(255), + 881: uint8(127), + 882: uint8(255), + 883: uint8(255), + 884: uint8(255), + 885: uint8(255), + 886: uint8(255), + 887: uint8(7), + 888: uint8(255), + 889: uint8(255), + 890: uint8(255), + 891: uint8(255), + 892: uint8(15), + 894: uint8(255), + 895: uint8(255), + 896: uint8(255), + 897: uint8(255), + 898: uint8(255), + 899: uint8(127), + 900: uint8(255), + 901: uint8(255), + 902: uint8(255), + 903: uint8(255), + 904: uint8(255), + 906: uint8(255), + 907: uint8(255), + 908: uint8(255), + 909: uint8(255), + 910: uint8(255), + 911: uint8(255), + 912: uint8(255), + 913: uint8(255), + 914: uint8(255), + 915: uint8(255), + 916: uint8(255), + 917: uint8(255), + 918: uint8(255), + 919: uint8(255), + 920: uint8(255), + 921: uint8(255), + 922: uint8(255), + 923: uint8(255), + 924: uint8(255), + 925: uint8(255), + 926: uint8(255), + 927: uint8(255), + 928: uint8(255), + 929: uint8(255), + 930: uint8(255), + 931: uint8(255), + 932: uint8(255), + 933: uint8(255), + 934: uint8(255), + 935: uint8(255), + 936: uint8(255), + 937: uint8(255), + 938: uint8(255), + 939: uint8(255), + 940: uint8(255), + 941: uint8(255), + 942: uint8(255), + 943: uint8(255), + 944: uint8(255), + 945: uint8(255), + 946: uint8(255), + 947: uint8(255), + 948: uint8(255), + 949: uint8(255), + 950: uint8(255), + 951: uint8(255), + 960: uint8(255), + 961: uint8(255), + 962: uint8(255), + 963: uint8(255), + 964: uint8(255), + 965: uint8(255), + 966: uint8(255), + 967: uint8(255), + 968: uint8(255), + 969: uint8(255), + 970: uint8(255), + 971: uint8(255), + 972: uint8(255), + 973: uint8(255), + 974: uint8(255), + 975: uint8(255), + 976: uint8(255), + 977: uint8(31), + 978: uint8(255), + 979: uint8(255), + 980: uint8(255), + 981: uint8(255), + 982: uint8(255), + 983: uint8(255), + 984: uint8(127), + 1004: uint8(255), + 1005: uint8(255), + 1006: uint8(255), + 1007: uint8(31), + 1024: uint8(255), + 1025: uint8(255), + 1026: uint8(255), + 1027: uint8(255), + 1028: uint8(255), + 1029: uint8(255), + 1030: uint8(255), + 1031: uint8(255), + 1032: uint8(255), + 1033: uint8(255), + 1034: uint8(255), + 1035: uint8(255), + 1036: uint8(255), + 1037: uint8(255), + 1038: uint8(255), + 1039: uint8(255), + 1040: uint8(255), + 1041: uint8(255), + 1042: uint8(255), + 1043: uint8(255), + 1044: uint8(15), + 1058: uint8(255), + 1059: uint8(3), + 1062: uint8(255), + 1063: uint8(255), + 1064: uint8(255), + 1065: uint8(255), + 1066: uint8(247), + 1067: uint8(255), + 1068: uint8(127), + 1069: uint8(15), + 1088: uint8(254), + 1089: uint8(255), + 1090: uint8(255), + 1091: uint8(255), + 1092: uint8(255), + 1093: uint8(255), + 1094: uint8(255), + 1095: uint8(255), + 1096: uint8(255), + 1097: uint8(255), + 1098: uint8(255), + 1099: uint8(255), + 1100: uint8(1), + 1116: uint8(127), + 1148: uint8(15), + 1152: uint8(255), + 1153: uint8(255), + 1154: uint8(255), + 1155: uint8(255), + 1156: uint8(255), + 1157: uint8(255), + 1158: uint8(255), + 1159: uint8(255), + 1160: uint8(255), + 1161: uint8(255), + 1162: uint8(255), + 1163: uint8(255), + 1164: uint8(255), + 1165: uint8(255), + 1166: uint8(255), + 1167: uint8(255), + 1168: uint8(255), + 1169: uint8(255), + 1170: uint8(255), + 1171: uint8(255), + 1172: uint8(255), + 1173: uint8(255), + 1174: uint8(255), + 1175: uint8(255), + 1176: uint8(255), + 1177: uint8(255), + 1178: uint8(255), + 1179: uint8(255), + 1180: uint8(255), + 1181: uint8(255), + 1182: uint8(255), + 1184: uint8(255), + 1185: uint8(255), + 1186: uint8(255), + 1187: uint8(255), + 1188: uint8(255), + 1189: uint8(255), + 1190: uint8(255), + 1191: uint8(255), + 1192: uint8(255), + 1193: uint8(255), + 1194: uint8(255), + 1195: uint8(255), + 1196: uint8(255), + 1197: uint8(255), + 1198: uint8(255), + 1199: uint8(255), + 1200: uint8(255), + 1201: uint8(255), + 1202: uint8(255), + 1203: uint8(255), + 1204: uint8(255), + 1205: uint8(255), + 1206: uint8(255), + 1207: uint8(255), + 1208: uint8(255), + 1209: uint8(255), + 1210: uint8(255), + 1211: uint8(255), + 1212: uint8(255), + 1213: uint8(255), + 1214: uint8(7), + 1216: uint8(255), + 1217: uint8(255), + 1218: uint8(255), + 1219: uint8(127), + 1226: uint8(7), + 1228: uint8(240), + 1230: uint8(255), + 1231: uint8(255), + 1232: uint8(255), + 1233: uint8(255), + 1234: uint8(255), + 1235: uint8(255), + 1236: uint8(255), + 1237: uint8(255), + 1238: uint8(255), + 1239: uint8(255), + 1240: uint8(255), + 1241: uint8(255), + 1242: uint8(255), + 1243: uint8(255), + 1244: uint8(255), + 1245: uint8(255), + 1246: uint8(255), + 1247: uint8(255), + 1248: uint8(255), + 1249: uint8(255), + 1250: uint8(255), + 1251: uint8(255), + 1252: uint8(255), + 1253: uint8(255), + 1254: uint8(255), + 1255: uint8(255), + 1256: uint8(255), + 1257: uint8(255), + 1258: uint8(255), + 1259: uint8(255), + 1260: uint8(255), + 1261: uint8(255), + 1262: uint8(255), + 1263: uint8(255), + 1264: uint8(255), + 1265: uint8(255), + 1266: uint8(255), + 1267: uint8(255), + 1268: uint8(255), + 1269: uint8(255), + 1270: uint8(255), + 1271: uint8(255), + 1272: uint8(255), + 1273: uint8(255), + 1274: uint8(255), + 1275: uint8(255), + 1276: uint8(255), + 1277: uint8(255), + 1278: uint8(255), + 1279: uint8(15), + 1280: uint8(16), + 1305: uint8(128), + 1329: uint8(64), + 1330: uint8(254), + 1331: uint8(7), + 1344: uint8(7), + 1346: uint8(255), + 1347: uint8(255), + 1348: uint8(255), + 1349: uint8(255), + 1350: uint8(255), + 1351: uint8(15), + 1352: uint8(255), + 1353: uint8(1), + 1354: uint8(3), + 1356: uint8(63), + 1376: uint8(255), + 1377: uint8(255), + 1378: uint8(255), + 1379: uint8(255), + 1380: uint8(1), + 1381: uint8(224), + 1382: uint8(191), + 1383: uint8(255), + 1384: uint8(255), + 1385: uint8(255), + 1386: uint8(255), + 1387: uint8(255), + 1388: uint8(255), + 1389: uint8(255), + 1390: uint8(255), + 1391: uint8(223), + 1392: uint8(255), + 1393: uint8(255), + 1394: uint8(15), + 1396: uint8(255), + 1397: uint8(255), + 1398: uint8(255), + 1399: uint8(255), + 1400: uint8(255), + 1401: uint8(135), + 1402: uint8(15), + 1404: uint8(255), + 1405: uint8(255), + 1406: uint8(17), + 1407: uint8(255), + 1408: uint8(255), + 1409: uint8(255), + 1410: uint8(255), + 1411: uint8(255), + 1412: uint8(255), + 1413: uint8(255), + 1414: uint8(255), + 1415: uint8(127), + 1416: uint8(253), + 1417: uint8(255), + 1418: uint8(255), + 1419: uint8(255), + 1420: uint8(255), + 1421: uint8(255), + 1422: uint8(255), + 1423: uint8(255), + 1424: uint8(255), + 1425: uint8(255), + 1426: uint8(255), + 1427: uint8(255), + 1428: uint8(255), + 1429: uint8(255), + 1430: uint8(255), + 1431: uint8(255), + 1432: uint8(255), + 1433: uint8(255), + 1434: uint8(255), + 1435: uint8(255), + 1436: uint8(255), + 1437: uint8(255), + 1438: uint8(255), + 1439: uint8(159), + 1440: uint8(255), + 1441: uint8(255), + 1442: uint8(255), + 1443: uint8(255), + 1444: uint8(255), + 1445: uint8(255), + 1446: uint8(255), + 1447: uint8(63), + 1449: uint8(120), + 1450: uint8(255), + 1451: uint8(255), + 1452: uint8(255), + 1455: uint8(4), + 1458: uint8(96), + 1460: uint8(16), + 1471: uint8(248), + 1472: uint8(255), + 1473: uint8(255), + 1474: uint8(255), + 1475: uint8(255), + 1476: uint8(255), + 1477: uint8(255), + 1478: uint8(255), + 1479: uint8(255), + 1480: uint8(255), + 1481: uint8(255), + 1488: uint8(255), + 1489: uint8(255), + 1490: uint8(255), + 1491: uint8(255), + 1492: uint8(255), + 1493: uint8(255), + 1494: uint8(255), + 1495: uint8(255), + 1496: uint8(63), + 1497: uint8(16), + 1498: uint8(39), + 1501: uint8(24), + 1502: uint8(240), + 1503: uint8(7), + 1532: uint8(255), + 1533: uint8(15), + 1537: uint8(224), + 1538: uint8(255), + 1539: uint8(255), + 1540: uint8(255), + 1541: uint8(255), + 1542: uint8(255), + 1543: uint8(255), + 1544: uint8(255), + 1545: uint8(255), + 1546: uint8(255), + 1547: uint8(255), + 1548: uint8(255), + 1549: uint8(255), + 1550: uint8(123), + 1551: uint8(252), + 1552: uint8(255), + 1553: uint8(255), + 1554: uint8(255), + 1555: uint8(255), + 1556: uint8(231), + 1557: uint8(199), + 1558: uint8(255), + 1559: uint8(255), + 1560: uint8(255), + 1561: uint8(231), + 1562: uint8(255), + 1563: uint8(255), + 1564: uint8(255), + 1565: uint8(255), + 1566: uint8(255), + 1567: uint8(255), + 1582: uint8(15), + 1583: uint8(7), + 1584: uint8(7), + 1586: uint8(63), +} + +func Xwcwidth(tls *TLS, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v, (%v:)", tls, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 int32 + _, _ = v1, v2 + if uint32(wc) < uint32(0xff) { + if (wc+int32(1))&int32(0x7f) >= int32(0x21) { + v1 = int32(1) + } else { + if wc != 0 { + v2 = -int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 + } + if uint32(wc)&uint32(0xfffeffff) < uint32(0xfffe) { + if int32(_table5[int32(_table5[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return 0 + } + if int32(_wtable[int32(_wtable[wc>>int32(8)])*int32(32)+wc&int32(255)>>int32(3)])>>(wc&int32(7))&int32(1) != 0 { + return int32(2) + } + return int32(1) + } + if wc&int32(0xfffe) == int32(0xfffe) { + return -int32(1) + } + if uint32(wc)-uint32(0x20000) < uint32(0x20000) { + return int32(2) + } + if wc == int32(0xe0001) || uint32(wc)-uint32(0xe0020) < uint32(0x5f) || uint32(wc)-uint32(0xe0100) < uint32(0xef) { + return 0 + } + return int32(1) +} + +const d_fileno = 0 + +type Tino_t = uint64 + +type Tdirent = struct { + Fd_ino Tino_t + Fd_off Toff_t + Fd_reclen uint16 + Fd_type uint8 + Fd_name [256]uint8 +} + +func Xalphasort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrcoll(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +type TDIR = struct { + Ftell Toff_t + Ffd int32 + Fbuf_pos int32 + Fbuf_end int32 + Flock [1]int32 + Fbuf [2048]uint8 +} + +type t__dirstream = TDIR + +func Xclosedir(tls *TLS, dir uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = Xclose(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd) + Xfree(tls, dir) + return ret +} + +func Xdirfd(tls *TLS, d uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(d)).Ffd +} + +const AT_EACCESS = 512 +const AT_FDCWD = -100 +const AT_REMOVEDIR = 512 +const AT_SYMLINK_FOLLOW = 1024 +const AT_SYMLINK_NOFOLLOW = 256 +const FD_CLOEXEC = 1 +const F_DUPFD = 0 +const F_DUPFD_CLOEXEC = 1030 +const F_GETFD = 1 +const F_GETFL = 3 +const F_GETLK = 5 +const F_GETOWN = 9 +const F_GETOWNER_UIDS = 17 +const F_GETOWN_EX = 16 +const F_GETSIG = 11 +const F_OFD_GETLK = 36 +const F_OFD_SETLK = 37 +const F_OFD_SETLKW = 38 +const F_RDLCK = 0 +const F_SETFD = 2 +const F_SETFL = 4 +const F_SETLK = 6 +const F_SETLKW = 7 +const F_SETOWN = 8 +const F_SETOWN_EX = 15 +const F_SETSIG = 10 +const F_UNLCK = 2 +const F_WRLCK = 1 +const O_ACCMODE = 2097155 +const O_APPEND = 1024 +const O_ASYNC = 8192 +const O_CLOEXEC = 524288 +const O_CREAT = 64 +const O_DIRECT = 16384 +const O_DIRECTORY = 65536 +const O_DSYNC = 4096 +const O_EXCL = 128 +const O_EXEC = 2097152 +const O_LARGEFILE = 32768 +const O_NDELAY = 2048 +const O_NOATIME = 262144 +const O_NOCTTY = 256 +const O_NOFOLLOW = 131072 +const O_NONBLOCK = 2048 +const O_PATH = 2097152 +const O_RDONLY = 0 +const O_RDWR = 2 +const O_RSYNC = 1052672 +const O_SEARCH = 2097152 +const O_SYNC = 1052672 +const O_TMPFILE = 4259840 +const O_TRUNC = 512 +const O_TTY_INIT = 0 +const O_WRONLY = 1 +const POSIX_FADV_DONTNEED = 6 +const POSIX_FADV_NOREUSE = 7 +const POSIX_FADV_NORMAL = 0 +const POSIX_FADV_RANDOM = 1 +const POSIX_FADV_SEQUENTIAL = 2 +const POSIX_FADV_WILLNEED = 3 +const S_IFBLK = 24576 +const S_IFCHR = 8192 +const S_IFDIR = 16384 +const S_IFIFO = 4096 +const S_IFLNK = 40960 +const S_IFMT = 61440 +const S_IFREG = 32768 +const S_IFSOCK = 49152 +const S_IRGRP = 32 +const S_IROTH = 4 +const S_IRUSR = 256 +const S_IRWXG = 56 +const S_IRWXO = 7 +const S_IRWXU = 448 +const S_ISGID = 1024 +const S_ISUID = 2048 +const S_ISVTX = 512 +const S_IWGRP = 16 +const S_IWOTH = 2 +const S_IWUSR = 128 +const S_IXGRP = 8 +const S_IXOTH = 1 +const S_IXUSR = 64 +const UTIME_NOW = 1073741823 +const UTIME_OMIT = 1073741822 + +type Tflock = struct { + Fl_type int16 + Fl_whence int16 + Fl_start Toff_t + Fl_len Toff_t + Fl_pid Tpid_t +} + +type Tnlink_t = uint64 + +type Tdev_t = uint64 + +type Tblksize_t = int64 + +type Tblkcnt_t = int64 + +type Tstat = struct { + Fst_dev Tdev_t + Fst_ino Tino_t + Fst_nlink Tnlink_t + Fst_mode Tmode_t + Fst_uid Tuid_t + Fst_gid Tgid_t + Fst_rdev Tdev_t + Fst_size Toff_t + Fst_atim Ttimespec + Fst_mtim Ttimespec + Fst_ctim Ttimespec + Fst_blksize Tblksize_t + Fst_blocks Tblkcnt_t + F__unused [3]uint64 +} + +func Xfdopendir(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var dir, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _ = dir, v1 + if Xfstat(tls, fd, bp) < 0 { + return uintptr(0) + } + if Xfcntl(tls, fd, int32(F_GETFL), 0)&int32(O_PATH) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return uintptr(0) + } + if !((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&Uint32FromInt32(S_IFMT) == Uint32FromInt32(S_IFDIR)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTDIR) + return uintptr(0) + } + v1 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v1 + if !(v1 != 0) { + return uintptr(0) + } + Xfcntl(tls, fd, int32(F_SETFD), VaList(bp+152, int32(FD_CLOEXEC))) + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +const AT_EMPTY_PATH = 4096 +const AT_NO_AUTOMOUNT = 2048 +const AT_RECURSIVE = 32768 +const AT_STATX_DONT_SYNC = 16384 +const AT_STATX_FORCE_SYNC = 8192 +const AT_STATX_SYNC_AS_STAT = 0 +const AT_STATX_SYNC_TYPE = 24576 +const DN_ACCESS = 1 +const DN_ATTRIB = 32 +const DN_CREATE = 4 +const DN_DELETE = 8 +const DN_MODIFY = 2 +const DN_MULTISHOT = 2147483648 +const DN_RENAME = 16 +const DT_BLK = 6 +const DT_CHR = 2 +const DT_DIR = 4 +const DT_FIFO = 1 +const DT_LNK = 10 +const DT_REG = 8 +const DT_SOCK = 12 +const DT_UNKNOWN = 0 +const DT_WHT = 14 +const FALLOC_FL_KEEP_SIZE = 1 +const FALLOC_FL_PUNCH_HOLE = 2 +const FAPPEND = 1024 +const FASYNC = 8192 +const FFSYNC = 1052672 +const FNDELAY = 2048 +const FNONBLOCK = 2048 +const F_ADD_SEALS = 1033 +const F_CANCELLK = 1029 +const F_GETLEASE = 1025 +const F_GETPIPE_SZ = 1032 +const F_GET_FILE_RW_HINT = 1037 +const F_GET_RW_HINT = 1035 +const F_GET_SEALS = 1034 +const F_NOTIFY = 1026 +const F_OWNER_GID = 2 +const F_OWNER_PGRP = 2 +const F_OWNER_PID = 1 +const F_OWNER_TID = 0 +const F_SEAL_FUTURE_WRITE = 16 +const F_SEAL_GROW = 4 +const F_SEAL_SEAL = 1 +const F_SEAL_SHRINK = 2 +const F_SEAL_WRITE = 8 +const F_SETLEASE = 1024 +const F_SETPIPE_SZ = 1031 +const F_SET_FILE_RW_HINT = 1038 +const F_SET_RW_HINT = 1036 +const MAX_HANDLE_SZ = 128 +const RWF_WRITE_LIFE_NOT_SET = 0 +const RWH_WRITE_LIFE_EXTREME = 5 +const RWH_WRITE_LIFE_LONG = 4 +const RWH_WRITE_LIFE_MEDIUM = 3 +const RWH_WRITE_LIFE_NONE = 1 +const RWH_WRITE_LIFE_SHORT = 2 +const SPLICE_F_GIFT = 8 +const SPLICE_F_MORE = 4 +const SPLICE_F_MOVE = 1 +const SPLICE_F_NONBLOCK = 2 +const SYNC_FILE_RANGE_WAIT_AFTER = 4 +const SYNC_FILE_RANGE_WAIT_BEFORE = 1 +const SYNC_FILE_RANGE_WRITE = 2 +const alloca = 0 +const loff_t = 0 + +type Tiovec = struct { + Fiov_base uintptr + Fiov_len Tsize_t +} + +type Tfile_handle = struct { + Fhandle_bytes uint32 + Fhandle_type int32 +} + +type Tf_owner_ex = struct { + Ftype1 int32 + Fpid Tpid_t +} + +func Xopendir(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dir, v2 uintptr + var fd, v1 int32 + _, _, _, _ = dir, fd, v1, v2 + v1 = Xopen(tls, name, Int32FromInt32(O_RDONLY)|Int32FromInt32(O_DIRECTORY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + v2 = Xcalloc(tls, uint64(1), uint64(2072)) + dir = v2 + if !(v2 != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Ffd = fd + return dir +} + +type Tptrdiff_t = int64 + +type Tdirstream_buf_alignment_check = [1]uint8 + +func Xreaddir(tls *TLS, dir uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var len1 int32 + _, _ = de, len1 + if (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos >= (*TDIR)(unsafe.Pointer(dir)).Fbuf_end { + len1 = int32(X__syscall3(tls, int64(SYS_getdents64), int64((*TDIR)(unsafe.Pointer(dir)).Ffd), int64(dir+24), int64(Uint64FromInt64(2048)))) + if len1 <= 0 { + if len1 < 0 && len1 != -int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = -len1 + } + return uintptr(0) + } + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = len1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = 0 + } + de = dir + 24 + uintptr((*TDIR)(unsafe.Pointer(dir)).Fbuf_pos) + *(*int32)(unsafe.Pointer(dir + 12)) += int32((*Tdirent)(unsafe.Pointer(de)).Fd_reclen) + (*TDIR)(unsafe.Pointer(dir)).Ftell = (*Tdirent)(unsafe.Pointer(de)).Fd_off + return de +} + +func Xreaddir_r(tls *TLS, dir uintptr, buf uintptr, result uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dir=%v buf=%v result=%v, (%v:)", tls, dir, buf, result, origin(2)) + defer func() { trc("-> %v", r) }() + } + var de uintptr + var errno_save, ret, v1 int32 + _, _, _, _ = de, errno_save, ret, v1 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ___lock(tls, dir+20) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + de = Xreaddir(tls, dir) + v1 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + ret = v1 + if v1 != 0 { + ___unlock(tls, dir+20) + return ret + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + if de != 0 { + Xmemcpy(tls, buf, de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } else { + buf = UintptrFromInt32(0) + } + ___unlock(tls, dir+20) + *(*uintptr)(unsafe.Pointer(result)) = buf + return 0 +} + +func Xrewinddir(tls *TLS, dir uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, 0, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + (*TDIR)(unsafe.Pointer(dir)).Ftell = 0 + ___unlock(tls, dir+20) +} + +func Xscandir(tls *TLS, path uintptr, res uintptr, sel uintptr, cmp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v res=%v sel=%v cmp=%v, (%v:)", tls, path, res, sel, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cnt, len1, v2, v3 Tsize_t + var d, de, names, tmp, v1 uintptr + var old_errno int32 + _, _, _, _, _, _, _, _, _, _ = cnt, d, de, len1, names, old_errno, tmp, v1, v2, v3 + d = Xopendir(tls, path) + names = uintptr(0) + cnt = uint64(0) + len1 = uint64(0) + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if !(d != 0) { + return -int32(1) + } + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v1 = Xreaddir(tls, d) + de = v1 + if !(v1 != 0) { + break + } + if sel != 0 && !((*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{sel})))(tls, de) != 0) { + continue + } + if cnt >= len1 { + len1 = uint64(2)*len1 + uint64(1) + if len1 > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + break + } + tmp = Xrealloc(tls, names, len1*uint64(8)) + if !(tmp != 0) { + break + } + names = tmp + } + *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) = Xmalloc(tls, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + if !(*(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8)) != 0) { + break + } + v2 = cnt + cnt++ + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(v2)*8)), de, uint64((*Tdirent)(unsafe.Pointer(de)).Fd_reclen)) + } + Xclosedir(tls, d) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != 0 { + if names != 0 { + for { + v3 = cnt + cnt-- + if !(v3 > uint64(0)) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(names + uintptr(cnt)*8))) + } + } + Xfree(tls, names) + return -int32(1) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if cmp != 0 { + Xqsort(tls, names, cnt, uint64(8), cmp) + } + *(*uintptr)(unsafe.Pointer(res)) = names + return int32(cnt) +} + +func Xseekdir(tls *TLS, dir uintptr, off int64) { + if __ccgo_strace { + trc("tls=%v dir=%v off=%v, (%v:)", tls, dir, off, origin(2)) + } + var v1 int32 + _ = v1 + ___lock(tls, dir+20) + (*TDIR)(unsafe.Pointer(dir)).Ftell = Xlseek(tls, (*TDIR)(unsafe.Pointer(dir)).Ffd, off, SEEK_SET) + v1 = Int32FromInt32(0) + (*TDIR)(unsafe.Pointer(dir)).Fbuf_end = v1 + (*TDIR)(unsafe.Pointer(dir)).Fbuf_pos = v1 + ___unlock(tls, dir+20) +} + +func Xtelldir(tls *TLS, dir uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TDIR)(unsafe.Pointer(dir)).Ftell +} + +func Xversionsort(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrverscmp(tls, *(*uintptr)(unsafe.Pointer(a))+19, *(*uintptr)(unsafe.Pointer(b))+19) +} + +func X__reset_tls(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var i, n Tsize_t + var mem, p uintptr + var self Tpthread_t + _, _, _, _, _ = i, mem, n, p, self + self = uintptr(___get_tp(tls)) + n = *(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv)) + if n != 0 { + p = X__libc.Ftls_head + i = Uint64FromInt32(1) + for { + if !(i <= n) { + break + } + mem = uintptr(*(*Tuintptr_t)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(self)).Fdtv + uintptr(i)*8)) - Uint64FromInt32(DTP_OFFSET)) + Xmemcpy(tls, mem, (*Ttls_module)(unsafe.Pointer(p)).Fimage, (*Ttls_module)(unsafe.Pointer(p)).Flen1) + Xmemset(tls, mem+uintptr((*Ttls_module)(unsafe.Pointer(p)).Flen1), 0, (*Ttls_module)(unsafe.Pointer(p)).Fsize-(*Ttls_module)(unsafe.Pointer(p)).Flen1) + goto _1 + _1: + ; + i++ + p = (*Ttls_module)(unsafe.Pointer(p)).Fnext + } + } +} + +func X__init_ssp(tls *TLS, entropy uintptr) { + if __ccgo_strace { + trc("tls=%v entropy=%v, (%v:)", tls, entropy, origin(2)) + } + if entropy != 0 { + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__stack_chk_guard)), entropy, uint64(8)) + } else { + X__stack_chk_guard = Tuintptr_t(uintptr(unsafe.Pointer(&X__stack_chk_guard))) * uint64(1103515245) + } + /* Sacrifice 8 bits of entropy on 64bit to prevent leaking/ + * overwriting the canary via string-manipulation functions. + * The NULL byte is on the second byte so that off-by-ones can + * still be detected. Endianness is taken care of + * automatically. */ + *(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stack_chk_guard)) + 1)) = uint8(0) + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fcanary = X__stack_chk_guard +} + +func X__stack_chk_fail(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + // __asm__ __volatile__ (".insn e,0"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 29, __ccgo_ts+261) +} + +func X__stack_chk_fail_local(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stack_chk_fail(tls) +} + +const L_INCR = 1 +const L_SET = 0 +const L_XTND = 2 + +func _dummy(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xclearenv(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, v1 uintptr + _, _ = e, v1 + e = Xenviron + Xenviron = uintptr(0) + if e != 0 { + for *(*uintptr)(unsafe.Pointer(e)) != 0 { + v1 = e + e += 8 + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(v1)), uintptr(0)) + } + } + return 0 +} + +func Xgetenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e uintptr + var l Tsize_t + _, _ = e, l + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if l != 0 && !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) && Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + return *(*uintptr)(unsafe.Pointer(e)) + uintptr(l) + uintptr(1) + } + goto _1 + _1: + ; + e += 8 + } + } + return uintptr(0) +} + +func _dummy1(tls *TLS, old uintptr, new1 uintptr) { +} + +func X__putenv(tls *TLS, s uintptr, l Tsize_t, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var e, newenv, tmp, v2 uintptr + var i Tsize_t + _, _, _, _, _ = e, i, newenv, tmp, v2 + i = uint64(0) + if Xenviron != 0 { + e = Xenviron + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) { + tmp = *(*uintptr)(unsafe.Pointer(e)) + *(*uintptr)(unsafe.Pointer(e)) = s + X__env_rm_add(tls, tmp, r) + return 0 + } + goto _1 + _1: + ; + e += 8 + i++ + } + } + if Xenviron == _oldenv { + newenv = Xrealloc(tls, _oldenv, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + } else { + newenv = Xmalloc(tls, uint64(8)*(i+uint64(2))) + if !(newenv != 0) { + goto oom + } + if i != 0 { + Xmemcpy(tls, newenv, Xenviron, uint64(8)*i) + } + Xfree(tls, _oldenv) + } + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s + *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0) + v2 = newenv + _oldenv = v2 + Xenviron = v2 + if r != 0 { + X__env_rm_add(tls, uintptr(0), r) + } + return 0 + goto oom +oom: + ; + Xfree(tls, r) + return -int32(1) +} + +var _oldenv uintptr + +func Xputenv(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = uint64(int64(X__strchrnul(tls, s, int32('='))) - int64(s)) + if !(l != 0) || !(*(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0) { + return Xunsetenv(tls, s) + } + return X__putenv(tls, s, l, uintptr(0)) +} + +const L_cuserid = 20 +const NL_NMAX = 16 + +type Tcookie_io_functions_t = struct { + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fclose1 uintptr +} + +type T_IO_cookie_io_functions_t = Tcookie_io_functions_t + +func Xsecure_getenv(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if X__libc.Fsecure != 0 { + v1 = UintptrFromInt32(0) + } else { + v1 = Xgetenv(tls, name) + } + return v1 +} + +func X__env_rm_add(tls *TLS, old uintptr, new1 uintptr) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + } + var i, v3 Tsize_t + var t, v2 uintptr + _, _, _, _ = i, t, v2, v3 + i = uint64(0) + for { + if !(i < _env_alloced_n) { + break + } + if *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) == old { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + Xfree(tls, old) + return + } else { + if !(*(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) != 0) && new1 != 0 { + *(*uintptr)(unsafe.Pointer(_env_alloced + uintptr(i)*8)) = new1 + new1 = uintptr(0) + } + } + goto _1 + _1: + ; + i++ + } + if !(new1 != 0) { + return + } + t = Xrealloc(tls, _env_alloced, uint64(8)*(_env_alloced_n+uint64(1))) + if !(t != 0) { + return + } + v2 = t + _env_alloced = v2 + v3 = _env_alloced_n + _env_alloced_n++ + *(*uintptr)(unsafe.Pointer(v2 + uintptr(v3)*8)) = new1 +} + +var _env_alloced uintptr + +var _env_alloced_n Tsize_t + +func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) (r int32) { + if __ccgo_strace { + trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l1, l2, v1 Tsize_t + var s uintptr + var v2 bool + _, _, _, _, _ = l1, l2, s, v1, v2 + if v2 = !(var1 != 0); !v2 { + v1 = uint64(int64(X__strchrnul(tls, var1, int32('='))) - int64(var1)) + l1 = v1 + } + if v2 || !(v1 != 0) || *(*uint8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { + return 0 + } + l2 = Xstrlen(tls, value) + s = Xmalloc(tls, l1+l2+uint64(2)) + if !(s != 0) { + return -int32(1) + } + Xmemcpy(tls, s, var1, l1) + *(*uint8)(unsafe.Pointer(s + uintptr(l1))) = uint8('=') + Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1)) + return X__putenv(tls, s, l1, s) +} + +func _dummy2(tls *TLS, old uintptr, new1 uintptr) { +} + +func Xunsetenv(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var e, eo, v2 uintptr + var l Tsize_t + _, _, _, _ = e, eo, l, v2 + l = uint64(int64(X__strchrnul(tls, name, int32('='))) - int64(name)) + if !(l != 0) || *(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + if Xenviron != 0 { + e = Xenviron + eo = e + for { + if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { + break + } + if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == int32('=') { + X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) + } else { + if eo != e { + v2 = eo + eo += 8 + *(*uintptr)(unsafe.Pointer(v2)) = *(*uintptr)(unsafe.Pointer(e)) + } else { + eo += 8 + } + } + goto _1 + _1: + ; + e += 8 + } + if eo != e { + *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) + } + } + return 0 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +type Terrmsgstr_t = struct { + Fstr0 [21]uint8 + FstrEILSEQ [22]uint8 + FstrEDOM [13]uint8 + FstrERANGE [25]uint8 + FstrENOTTY [10]uint8 + FstrEACCES [18]uint8 + FstrEPERM [24]uint8 + FstrENOENT [26]uint8 + FstrESRCH [16]uint8 + FstrEEXIST [12]uint8 + FstrEOVERFLOW [30]uint8 + FstrENOSPC [24]uint8 + FstrENOMEM [14]uint8 + FstrEBUSY [14]uint8 + FstrEINTR [24]uint8 + FstrEAGAIN [33]uint8 + FstrESPIPE [13]uint8 + FstrEXDEV [18]uint8 + FstrEROFS [22]uint8 + FstrENOTEMPTY [20]uint8 + FstrECONNRESET [25]uint8 + FstrETIMEDOUT [20]uint8 + FstrECONNREFUSED [19]uint8 + FstrEHOSTDOWN [13]uint8 + FstrEHOSTUNREACH [20]uint8 + FstrEADDRINUSE [15]uint8 + FstrEPIPE [12]uint8 + FstrEIO [10]uint8 + FstrENXIO [26]uint8 + FstrENOTBLK [22]uint8 + FstrENODEV [15]uint8 + FstrENOTDIR [16]uint8 + FstrEISDIR [15]uint8 + FstrETXTBSY [15]uint8 + FstrENOEXEC [18]uint8 + FstrEINVAL [17]uint8 + FstrE2BIG [23]uint8 + FstrELOOP [19]uint8 + FstrENAMETOOLONG [18]uint8 + FstrENFILE [30]uint8 + FstrEMFILE [30]uint8 + FstrEBADF [20]uint8 + FstrECHILD [17]uint8 + FstrEFAULT [12]uint8 + FstrEFBIG [15]uint8 + FstrEMLINK [15]uint8 + FstrENOLCK [19]uint8 + FstrEDEADLK [30]uint8 + FstrENOTRECOVERABLE [22]uint8 + FstrEOWNERDEAD [20]uint8 + FstrECANCELED [19]uint8 + FstrENOSYS [25]uint8 + FstrENOMSG [27]uint8 + FstrEIDRM [19]uint8 + FstrENOSTR [20]uint8 + FstrENODATA [18]uint8 + FstrETIME [15]uint8 + FstrENOSR [25]uint8 + FstrENOLINK [22]uint8 + FstrEPROTO [15]uint8 + FstrEBADMSG [12]uint8 + FstrEBADFD [29]uint8 + FstrENOTSOCK [13]uint8 + FstrEDESTADDRREQ [29]uint8 + FstrEMSGSIZE [18]uint8 + FstrEPROTOTYPE [31]uint8 + FstrENOPROTOOPT [23]uint8 + FstrEPROTONOSUPPORT [23]uint8 + FstrESOCKTNOSUPPORT [26]uint8 + FstrENOTSUP [14]uint8 + FstrEPFNOSUPPORT [30]uint8 + FstrEAFNOSUPPORT [41]uint8 + FstrEADDRNOTAVAIL [22]uint8 + FstrENETDOWN [16]uint8 + FstrENETUNREACH [20]uint8 + FstrENETRESET [28]uint8 + FstrECONNABORTED [19]uint8 + FstrENOBUFS [26]uint8 + FstrEISCONN [20]uint8 + FstrENOTCONN [21]uint8 + FstrESHUTDOWN [34]uint8 + FstrEALREADY [30]uint8 + FstrEINPROGRESS [22]uint8 + FstrESTALE [18]uint8 + FstrEREMOTEIO [17]uint8 + FstrEDQUOT [15]uint8 + FstrENOMEDIUM [16]uint8 + FstrEMEDIUMTYPE [18]uint8 + FstrEMULTIHOP [19]uint8 + FstrENOKEY [27]uint8 + FstrEKEYEXPIRED [16]uint8 + FstrEKEYREVOKED [21]uint8 + FstrEKEYREJECTED [28]uint8 +} + +/* mips has one error code outside of the 8-bit range due to a + * historical typo, so we just remap it. */ + +var _errmsgstr = Terrmsgstr_t{ + Fstr0: [21]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', ' ', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n'}, + FstrEILSEQ: [22]uint8{'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'b', 'y', 't', 'e', ' ', 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e'}, + FstrEDOM: [13]uint8{'D', 'o', 'm', 'a', 'i', 'n', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrERANGE: [25]uint8{'R', 'e', 's', 'u', 'l', 't', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'p', 'r', 'e', 's', 'e', 'n', 't', 'a', 'b', 'l', 'e'}, + FstrENOTTY: [10]uint8{'N', 'o', 't', ' ', 'a', ' ', 't', 't', 'y'}, + FstrEACCES: [18]uint8{'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', ' ', 'd', 'e', 'n', 'i', 'e', 'd'}, + FstrEPERM: [24]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'e', 'r', 'm', 'i', 't', 't', 'e', 'd'}, + FstrENOENT: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'f', 'i', 'l', 'e', ' ', 'o', 'r', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrESRCH: [16]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEEXIST: [12]uint8{'F', 'i', 'l', 'e', ' ', 'e', 'x', 'i', 's', 't', 's'}, + FstrEOVERFLOW: [30]uint8{'V', 'a', 'l', 'u', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'a', 't', 'a', ' ', 't', 'y', 'p', 'e'}, + FstrENOSPC: [24]uint8{'N', 'o', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'l', 'e', 'f', 't', ' ', 'o', 'n', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOMEM: [14]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y'}, + FstrEBUSY: [14]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrEINTR: [24]uint8{'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 'e', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l'}, + FstrEAGAIN: [33]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 't', 'e', 'm', 'p', 'o', 'r', 'a', 'r', 'i', 'l', 'y', ' ', 'u', 'n', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrESPIPE: [13]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 's', 'e', 'e', 'k'}, + FstrEXDEV: [18]uint8{'C', 'r', 'o', 's', 's', '-', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'l', 'i', 'n', 'k'}, + FstrEROFS: [22]uint8{'R', 'e', 'a', 'd', '-', 'o', 'n', 'l', 'y', ' ', 'f', 'i', 'l', 'e', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrENOTEMPTY: [20]uint8{'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'n', 'o', 't', ' ', 'e', 'm', 'p', 't', 'y'}, + FstrECONNRESET: [25]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'p', 'e', 'e', 'r'}, + FstrETIMEDOUT: [20]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 't', 'i', 'm', 'e', 'd', ' ', 'o', 'u', 't'}, + FstrECONNREFUSED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 'f', 'u', 's', 'e', 'd'}, + FstrEHOSTDOWN: [13]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrEHOSTUNREACH: [20]uint8{'H', 'o', 's', 't', ' ', 'i', 's', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrEADDRINUSE: [15]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'i', 'n', ' ', 'u', 's', 'e'}, + FstrEPIPE: [12]uint8{'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e'}, + FstrEIO: [10]uint8{'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrENXIO: [26]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'o', 'r', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrENOTBLK: [22]uint8{'B', 'l', 'o', 'c', 'k', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrENODEV: [15]uint8{'N', 'o', ' ', 's', 'u', 'c', 'h', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}, + FstrENOTDIR: [16]uint8{'N', 'o', 't', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrEISDIR: [15]uint8{'I', 's', ' ', 'a', ' ', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y'}, + FstrETXTBSY: [15]uint8{'T', 'e', 'x', 't', ' ', 'f', 'i', 'l', 'e', ' ', 'b', 'u', 's', 'y'}, + FstrENOEXEC: [18]uint8{'E', 'x', 'e', 'c', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEINVAL: [17]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'a', 'r', 'g', 'u', 'm', 'e', 'n', 't'}, + FstrE2BIG: [23]uint8{'A', 'r', 'g', 'u', 'm', 'e', 'n', 't', ' ', 'l', 'i', 's', 't', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrELOOP: [19]uint8{'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', ' ', 'l', 'i', 'n', 'k', ' ', 'l', 'o', 'o', 'p'}, + FstrENAMETOOLONG: [18]uint8{'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'o', 'n', 'g'}, + FstrENFILE: [30]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'o', 'p', 'e', 'n', ' ', 'f', 'i', 'l', 'e', 's', ' ', 'i', 'n', ' ', 's', 'y', 's', 't', 'e', 'm'}, + FstrEMFILE: [30]uint8{'N', 'o', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEBADF: [20]uint8{'B', 'a', 'd', ' ', 'f', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r'}, + FstrECHILD: [17]uint8{'N', 'o', ' ', 'c', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's'}, + FstrEFAULT: [12]uint8{'B', 'a', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's'}, + FstrEFBIG: [15]uint8{'F', 'i', 'l', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEMLINK: [15]uint8{'T', 'o', 'o', ' ', 'm', 'a', 'n', 'y', ' ', 'l', 'i', 'n', 'k', 's'}, + FstrENOLCK: [19]uint8{'N', 'o', ' ', 'l', 'o', 'c', 'k', 's', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEDEADLK: [30]uint8{'R', 'e', 's', 'o', 'u', 'r', 'c', 'e', ' ', 'd', 'e', 'a', 'd', 'l', 'o', 'c', 'k', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'o', 'c', 'c', 'u', 'r'}, + FstrENOTRECOVERABLE: [22]uint8{'S', 't', 'a', 't', 'e', ' ', 'n', 'o', 't', ' ', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e'}, + FstrEOWNERDEAD: [20]uint8{'P', 'r', 'e', 'v', 'i', 'o', 'u', 's', ' ', 'o', 'w', 'n', 'e', 'r', ' ', 'd', 'i', 'e', 'd'}, + FstrECANCELED: [19]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'c', 'a', 'n', 'c', 'e', 'l', 'e', 'd'}, + FstrENOSYS: [25]uint8{'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'i', 'm', 'p', 'l', 'e', 'm', 'e', 'n', 't', 'e', 'd'}, + FstrENOMSG: [27]uint8{'N', 'o', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', ' ', 'o', 'f', ' ', 'd', 'e', 's', 'i', 'r', 'e', 'd', ' ', 't', 'y', 'p', 'e'}, + FstrEIDRM: [19]uint8{'I', 'd', 'e', 'n', 't', 'i', 'f', 'i', 'e', 'r', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd'}, + FstrENOSTR: [20]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 'n', 'o', 't', ' ', 'a', ' ', 's', 't', 'r', 'e', 'a', 'm'}, + FstrENODATA: [18]uint8{'N', 'o', ' ', 'd', 'a', 't', 'a', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrETIME: [15]uint8{'D', 'e', 'v', 'i', 'c', 'e', ' ', 't', 'i', 'm', 'e', 'o', 'u', 't'}, + FstrENOSR: [25]uint8{'O', 'u', 't', ' ', 'o', 'f', ' ', 's', 't', 'r', 'e', 'a', 'm', 's', ' ', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's'}, + FstrENOLINK: [22]uint8{'L', 'i', 'n', 'k', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 's', 'e', 'v', 'e', 'r', 'e', 'd'}, + FstrEPROTO: [15]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEBADMSG: [12]uint8{'B', 'a', 'd', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'}, + FstrEBADFD: [29]uint8{'F', 'i', 'l', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', ' ', 'i', 'n', ' ', 'b', 'a', 'd', ' ', 's', 't', 'a', 't', 'e'}, + FstrENOTSOCK: [13]uint8{'N', 'o', 't', ' ', 'a', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrEDESTADDRREQ: [29]uint8{'D', 'e', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd'}, + FstrEMSGSIZE: [18]uint8{'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 't', 'o', 'o', ' ', 'l', 'a', 'r', 'g', 'e'}, + FstrEPROTOTYPE: [31]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'w', 'r', 'o', 'n', 'g', ' ', 't', 'y', 'p', 'e', ' ', 'f', 'o', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't'}, + FstrENOPROTOOPT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEPROTONOSUPPORT: [23]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrESOCKTNOSUPPORT: [26]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrENOTSUP: [14]uint8{'N', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEPFNOSUPPORT: [30]uint8{'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd'}, + FstrEAFNOSUPPORT: [41]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'n', 'o', 't', ' ', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'b', 'y', ' ', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l'}, + FstrEADDRNOTAVAIL: [22]uint8{'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrENETDOWN: [16]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'i', 's', ' ', 'd', 'o', 'w', 'n'}, + FstrENETUNREACH: [20]uint8{'N', 'e', 't', 'w', 'o', 'r', 'k', ' ', 'u', 'n', 'r', 'e', 'a', 'c', 'h', 'a', 'b', 'l', 'e'}, + FstrENETRESET: [28]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'r', 'e', 's', 'e', 't', ' ', 'b', 'y', ' ', 'n', 'e', 't', 'w', 'o', 'r', 'k'}, + FstrECONNABORTED: [19]uint8{'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ' ', 'a', 'b', 'o', 'r', 't', 'e', 'd'}, + FstrENOBUFS: [26]uint8{'N', 'o', ' ', 'b', 'u', 'f', 'f', 'e', 'r', ' ', 's', 'p', 'a', 'c', 'e', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEISCONN: [20]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'i', 's', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrENOTCONN: [21]uint8{'S', 'o', 'c', 'k', 'e', 't', ' ', 'n', 'o', 't', ' ', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd'}, + FstrESHUTDOWN: [34]uint8{'C', 'a', 'n', 'n', 'o', 't', ' ', 's', 'e', 'n', 'd', ' ', 'a', 'f', 't', 'e', 'r', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 's', 'h', 'u', 't', 'd', 'o', 'w', 'n'}, + FstrEALREADY: [30]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrEINPROGRESS: [22]uint8{'O', 'p', 'e', 'r', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'n', ' ', 'p', 'r', 'o', 'g', 'r', 'e', 's', 's'}, + FstrESTALE: [18]uint8{'S', 't', 'a', 'l', 'e', ' ', 'f', 'i', 'l', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e'}, + FstrEREMOTEIO: [17]uint8{'R', 'e', 'm', 'o', 't', 'e', ' ', 'I', '/', 'O', ' ', 'e', 'r', 'r', 'o', 'r'}, + FstrEDQUOT: [15]uint8{'Q', 'u', 'o', 't', 'a', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd'}, + FstrENOMEDIUM: [16]uint8{'N', 'o', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 'f', 'o', 'u', 'n', 'd'}, + FstrEMEDIUMTYPE: [18]uint8{'W', 'r', 'o', 'n', 'g', ' ', 'm', 'e', 'd', 'i', 'u', 'm', ' ', 't', 'y', 'p', 'e'}, + FstrEMULTIHOP: [19]uint8{'M', 'u', 'l', 't', 'i', 'h', 'o', 'p', ' ', 'a', 't', 't', 'e', 'm', 'p', 't', 'e', 'd'}, + FstrENOKEY: [27]uint8{'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd', ' ', 'k', 'e', 'y', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e'}, + FstrEKEYEXPIRED: [16]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd'}, + FstrEKEYREVOKED: [21]uint8{'K', 'e', 'y', ' ', 'h', 'a', 's', ' ', 'b', 'e', 'e', 'n', ' ', 'r', 'e', 'v', 'o', 'k', 'e', 'd'}, + FstrEKEYREJECTED: [28]uint8{'K', 'e', 'y', ' ', 'w', 'a', 's', ' ', 'r', 'e', 'j', 'e', 'c', 't', 'e', 'd', ' ', 'b', 'y', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e'}, +} + +var _errmsgidx = [132]uint16{ + 1: uint16(uint64(UintptrFromInt32(0) + 109)), + 2: uint16(uint64(UintptrFromInt32(0) + 133)), + 3: uint16(uint64(UintptrFromInt32(0) + 159)), + 4: uint16(uint64(UintptrFromInt32(0) + 269)), + 5: uint16(uint64(UintptrFromInt32(0) + 523)), + 6: uint16(uint64(UintptrFromInt32(0) + 533)), + 7: uint16(uint64(UintptrFromInt32(0) + 677)), + 8: uint16(uint64(UintptrFromInt32(0) + 642)), + 9: uint16(uint64(UintptrFromInt32(0) + 797)), + 10: uint16(uint64(UintptrFromInt32(0) + 817)), + 11: uint16(uint64(UintptrFromInt32(0) + 293)), + 12: uint16(uint64(UintptrFromInt32(0) + 241)), + 13: uint16(uint64(UintptrFromInt32(0) + 91)), + 14: uint16(uint64(UintptrFromInt32(0) + 834)), + 15: uint16(uint64(UintptrFromInt32(0) + 559)), + 16: uint16(uint64(UintptrFromInt32(0) + 255)), + 17: uint16(uint64(UintptrFromInt32(0) + 175)), + 18: uint16(uint64(UintptrFromInt32(0) + 339)), + 19: uint16(uint64(UintptrFromInt32(0) + 581)), + 20: uint16(uint64(UintptrFromInt32(0) + 596)), + 21: uint16(uint64(UintptrFromInt32(0) + 612)), + 22: uint16(uint64(UintptrFromInt32(0) + 660)), + 23: uint16(uint64(UintptrFromInt32(0) + 737)), + 24: uint16(uint64(UintptrFromInt32(0) + 767)), + 25: uint16(uint64(UintptrFromInt32(0) + 81)), + 26: uint16(uint64(UintptrFromInt32(0) + 627)), + 27: uint16(uint64(UintptrFromInt32(0) + 846)), + 28: uint16(uint64(UintptrFromInt32(0) + 217)), + 29: uint16(uint64(UintptrFromInt32(0) + 326)), + 30: uint16(uint64(UintptrFromInt32(0) + 357)), + 31: uint16(uint64(UintptrFromInt32(0) + 861)), + 32: uint16(uint64(UintptrFromInt32(0) + 511)), + 33: uint16(uint64(UintptrFromInt32(0) + 43)), + 34: uint16(uint64(UintptrFromInt32(0) + 56)), + 35: uint16(uint64(UintptrFromInt32(0) + 895)), + 36: uint16(uint64(UintptrFromInt32(0) + 719)), + 37: uint16(uint64(UintptrFromInt32(0) + 876)), + 38: uint16(uint64(UintptrFromInt32(0) + 986)), + 39: uint16(uint64(UintptrFromInt32(0) + 379)), + 40: uint16(uint64(UintptrFromInt32(0) + 700)), + 42: uint16(uint64(UintptrFromInt32(0) + 1011)), + 43: uint16(uint64(UintptrFromInt32(0) + 1038)), + 60: uint16(uint64(UintptrFromInt32(0) + 1057)), + 61: uint16(uint64(UintptrFromInt32(0) + 1077)), + 62: uint16(uint64(UintptrFromInt32(0) + 1095)), + 63: uint16(uint64(UintptrFromInt32(0) + 1110)), + 67: uint16(uint64(UintptrFromInt32(0) + 1135)), + 71: uint16(uint64(UintptrFromInt32(0) + 1157)), + 72: uint16(uint64(UintptrFromInt32(0) + 1803)), + 74: uint16(uint64(UintptrFromInt32(0) + 1172)), + 75: uint16(uint64(UintptrFromInt32(0) + 187)), + 77: uint16(uint64(UintptrFromInt32(0) + 1184)), + 84: uint16(uint64(UintptrFromInt32(0) + 21)), + 88: uint16(uint64(UintptrFromInt32(0) + 1213)), + 89: uint16(uint64(UintptrFromInt32(0) + 1226)), + 90: uint16(uint64(UintptrFromInt32(0) + 1255)), + 91: uint16(uint64(UintptrFromInt32(0) + 1273)), + 92: uint16(uint64(UintptrFromInt32(0) + 1304)), + 93: uint16(uint64(UintptrFromInt32(0) + 1327)), + 94: uint16(uint64(UintptrFromInt32(0) + 1350)), + 95: uint16(uint64(UintptrFromInt32(0) + 1376)), + 96: uint16(uint64(UintptrFromInt32(0) + 1390)), + 97: uint16(uint64(UintptrFromInt32(0) + 1420)), + 98: uint16(uint64(UintptrFromInt32(0) + 496)), + 99: uint16(uint64(UintptrFromInt32(0) + 1461)), + 100: uint16(uint64(UintptrFromInt32(0) + 1483)), + 101: uint16(uint64(UintptrFromInt32(0) + 1499)), + 102: uint16(uint64(UintptrFromInt32(0) + 1519)), + 103: uint16(uint64(UintptrFromInt32(0) + 1547)), + 104: uint16(uint64(UintptrFromInt32(0) + 399)), + 105: uint16(uint64(UintptrFromInt32(0) + 1566)), + 106: uint16(uint64(UintptrFromInt32(0) + 1592)), + 107: uint16(uint64(UintptrFromInt32(0) + 1612)), + 108: uint16(uint64(UintptrFromInt32(0) + 1633)), + 110: uint16(uint64(UintptrFromInt32(0) + 424)), + 111: uint16(uint64(UintptrFromInt32(0) + 444)), + 112: uint16(uint64(UintptrFromInt32(0) + 463)), + 113: uint16(uint64(UintptrFromInt32(0) + 476)), + 114: uint16(uint64(UintptrFromInt32(0) + 1667)), + 115: uint16(uint64(UintptrFromInt32(0) + 1697)), + 116: uint16(uint64(UintptrFromInt32(0) + 1719)), + 121: uint16(uint64(UintptrFromInt32(0) + 1737)), + 122: uint16(uint64(UintptrFromInt32(0) + 1754)), + 123: uint16(uint64(UintptrFromInt32(0) + 1769)), + 124: uint16(uint64(UintptrFromInt32(0) + 1785)), + 125: uint16(uint64(UintptrFromInt32(0) + 967)), + 126: uint16(uint64(UintptrFromInt32(0) + 1822)), + 127: uint16(uint64(UintptrFromInt32(0) + 1849)), + 128: uint16(uint64(UintptrFromInt32(0) + 1865)), + 129: uint16(uint64(UintptrFromInt32(0) + 1886)), + 130: uint16(uint64(UintptrFromInt32(0) + 947)), + 131: uint16(uint64(UintptrFromInt32(0) + 925)), +} + +func X__strerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + if uint64(e) >= Uint64FromInt64(264)/Uint64FromInt64(2) { + e = 0 + } + s = uintptr(unsafe.Pointer(&_errmsgstr)) + uintptr(_errmsgidx[e]) + return X__lctrans(tls, s, *(*uintptr)(unsafe.Pointer(loc + 5*8))) +} + +func Xstrerror(tls *TLS, e int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v, (%v:)", tls, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrerror_l(tls *TLS, e int32, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v e=%v loc=%v, (%v:)", tls, e, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strerror_l(tls, e, loc) +} + +func X_Exit(tls *TLS, ec int32) { + if __ccgo_strace { + trc("tls=%v ec=%v, (%v:)", tls, ec, origin(2)) + } + X__syscall1(tls, int64(SYS_exit_group), int64(ec)) + for { + X__syscall1(tls, int64(SYS_exit), int64(ec)) + goto _1 + _1: + } +} + +func X__assert_fail(tls *TLS, expr uintptr, file uintptr, line int32, func1 uintptr) { + if __ccgo_strace { + trc("tls=%v expr=%v file=%v line=%v func1=%v, (%v:)", tls, expr, file, line, func1, origin(2)) + } + bp := tls.Alloc(48) + defer tls.Free(48) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+278, VaList(bp+8, expr, file, func1, line)) + Xabort(tls) +} + +const COUNT = 32 + +var _funcs [32]uintptr +var _count int32 +var _lock [1]int32 + +func X__funcs_on_quick_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var func1 uintptr + var v1 int32 + _, _ = func1, v1 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + for _count > 0 { + _count-- + v1 = _count + func1 = _funcs[v1] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + (*(*func(*TLS))(unsafe.Pointer(&struct{ uintptr }{func1})))(tls) + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + } +} + +func Xat_quick_exit(tls *TLS, func1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v func1=%v, (%v:)", tls, func1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + r = 0 + ___lock(tls, uintptr(unsafe.Pointer(&_lock))) + if _count == int32(32) { + r = -int32(1) + } else { + v1 = _count + _count++ + _funcs[v1] = func1 + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock))) + return r +} + +func _dummy3(tls *TLS) { +} + +func Xquick_exit(tls *TLS, code int32) { + if __ccgo_strace { + trc("tls=%v code=%v, (%v:)", tls, code, origin(2)) + } + X__funcs_on_quick_exit(tls) + X_Exit(tls, code) +} + +func Xcreat(tls *TLS, filename uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xopen(tls, filename, Int32FromInt32(O_CREAT)|Int32FromInt32(O_WRONLY)|Int32FromInt32(O_TRUNC), VaList(bp+8, mode)) +} + +func Xfcntl(tls *TLS, fd int32, cmd int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cmd=%v va=%v, (%v:)", tls, fd, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var arg uint64 + var ret, ret1, v1 int32 + var _ /* ex at bp+0 */ Tf_owner_ex + _, _, _, _, _ = ap, arg, ret, ret1, v1 + ap = va + arg = VaUint64(&ap) + _ = ap + if cmd == int32(F_SETFL) { + arg |= uint64(O_LARGEFILE) + } + if cmd == int32(F_SETLKW) { + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)), 0, 0, 0)))) + } + if cmd == int32(F_GETOWN) { + ret = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETOWN_EX)), int64(bp))) + if ret == -int32(EINVAL) { + return int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))) + } + if ret != 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Ftype1 == int32(F_OWNER_PGRP) { + v1 = -(*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } else { + v1 = (*(*Tf_owner_ex)(unsafe.Pointer(bp))).Fpid + } + return v1 + } + if cmd == int32(F_DUPFD_CLOEXEC) { + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(arg))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD_CLOEXEC)), int64(Int32FromInt32(0)))) + if ret1 != -int32(EINVAL) { + if ret1 >= 0 { + X__syscall1(tls, int64(SYS_close), int64(ret1)) + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret1 = int32(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_DUPFD)), int64(arg))) + if ret1 >= 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(ret1))) + } + switch cmd { + case int32(F_SETLK): + fallthrough + case int32(F_GETLK): + fallthrough + case int32(F_GETOWN_EX): + fallthrough + case int32(F_SETOWN_EX): + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(uintptr(arg)))))) + default: + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(cmd), int64(arg))))) + } + return r +} + +func Xopen(tls *TLS, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v flags=%v va=%v, (%v:)", tls, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var fd int32 + var mode Tmode_t + _, _, _ = ap, fd, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + fd = int32(___syscall_cp(tls, int64(SYS_open), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0, 0)) + if fd >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(fd))) +} + +func Xopenat(tls *TLS, fd int32, filename uintptr, flags int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v flags=%v va=%v, (%v:)", tls, fd, filename, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var mode Tmode_t + _, _ = ap, mode + mode = uint32(0) + if flags&int32(O_CREAT) != 0 || flags&int32(O_TMPFILE) == int32(O_TMPFILE) { + ap = va + mode = VaUint32(&ap) + _ = ap + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_openat), int64(fd), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(mode), 0, 0)))) +} + +func Xposix_fadvise(tls *TLS, fd int32, base Toff_t, len1 Toff_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v advice=%v, (%v:)", tls, fd, base, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fadvise64), int64(fd), base, len1, int64(advice))) +} + +func Xposix_fallocate(tls *TLS, fd int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v base=%v len1=%v, (%v:)", tls, fd, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(-X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(Int32FromInt32(0)), base, len1)) +} + +const FE_ALL_EXCEPT = 16252928 +const FE_DIVBYZERO = 4194304 +const FE_DOWNWARD = 3 +const FE_INEXACT = 524288 +const FE_INVALID = 8388608 +const FE_OVERFLOW = 2097152 +const FE_TONEAREST = 0 +const FE_TOWARDZERO = 1 +const FE_UNDERFLOW = 1048576 +const FE_UPWARD = 2 + +type Tfexcept_t = uint32 + +type Tfenv_t = uint32 + +func _get_fpc(tls *TLS) (r uint32) { + var fpc uint32 + _ = fpc + // __asm__ __volatile__("efpc %0" : "=r"(fpc)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+313, 7, __ccgo_ts+320) + return fpc +} + +func _set_fpc(tls *TLS, fpc uint32) { + // __asm__ __volatile__("sfpc %0" :: "r"(fpc)); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+313, 13, __ccgo_ts+328) +} + +func Xfeclearexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + mask &= int32(FE_ALL_EXCEPT) + _set_fpc(tls, _get_fpc(tls)&uint32(^mask)) + return 0 +} + +func Xferaiseexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + mask &= int32(FE_ALL_EXCEPT) + _set_fpc(tls, _get_fpc(tls)|uint32(mask)) + return 0 +} + +func Xfetestexcept(tls *TLS, mask int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_get_fpc(tls) & uint32(mask) & uint32(FE_ALL_EXCEPT)) +} + +func Xfegetround(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(_get_fpc(tls) & uint32(3)) +} + +func X__fesetround(tls *TLS, r int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + _set_fpc(tls, uint32(int64(_get_fpc(tls)) & ^Int64FromInt64(3) | int64(r))) + return 0 +} + +func Xfegetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tfenv_t)(unsafe.Pointer(envp)) = _get_fpc(tls) + return 0 +} + +func Xfesetenv(tls *TLS, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v envp=%v, (%v:)", tls, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + if envp != uintptr(-Int32FromInt32(1)) { + v1 = *(*Tfenv_t)(unsafe.Pointer(envp)) + } else { + v1 = uint32(0) + } + _set_fpc(tls, v1) + return 0 +} + +const WCONTINUED = 8 +const WEXITED = 4 +const WNOWAIT = 16777216 +const WSTOPPED = 2 +const __WALL = 1073741824 +const __WCLONE = 2147483648 +const __WNOTHREAD = 536870912 + +type Tidtype_t = int32 + +const _P_ALL = 0 +const _P_PID = 1 +const _P_PGID = 2 +const _P_PIDFD = 3 +const F_APP = 128 +const F_EOF = 16 +const F_ERR = 32 +const F_NORD = 4 +const F_NOWR = 8 +const F_PERM = 1 +const F_SVB = 64 +const KMAX = 128 +const LDBL_EPSILON1 = 2.22044604925031308085e-16 +const LDBL_MAX1 = 1.79769313486231570815e+308 +const LDBL_MIN1 = 2.22507385850720138309e-308 +const LD_B1B_DIG = 2 +const LD_B1B_MAX = 254740991 +const MASK = 127 +const MAYBE_WAITERS = 1073741824 +const UNGET = 8 + +type TFILE = struct { + Fflags uint32 + Frpos uintptr + Frend uintptr + Fclose1 uintptr + Fwend uintptr + Fwpos uintptr + Fmustbezero_1 uintptr + Fwbase uintptr + Fread uintptr + Fwrite uintptr + Fseek uintptr + Fbuf uintptr + Fbuf_size Tsize_t + Fprev uintptr + Fnext uintptr + Ffd int32 + Fpipe_pid int32 + Flockcount int64 + Fmode int32 + Flock int32 + Flbf int32 + Fcookie uintptr + Foff Toff_t + Fgetln_buf uintptr + Fmustbezero_2 uintptr + Fshend uintptr + Fshlim Toff_t + Fshcnt Toff_t + Fprev_locked uintptr + Fnext_locked uintptr + Flocale uintptr +} + +type T_IO_FILE = TFILE + +func _scanexp(tls *TLS, f uintptr, pok int32) (r int64) { + var c, neg, x, v1, v10, v14, v18, v4 int32 + var y, v22 int64 + var v11, v12, v15, v16, v19, v2, v20, v3, v5, v6 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, neg, x, y, v1, v10, v11, v12, v14, v15, v16, v18, v19, v2, v20, v22, v3, v4, v5, v6 + neg = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + if c == int32('+') || c == int32('-') { + neg = BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__shgetc(tls, f) + } + c = v4 + if uint32(c-int32('0')) >= uint32(10) && pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if uint32(c-int32('0')) >= uint32(10) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return -Int64FromInt64(0x7fffffffffffffff) - Int64FromInt32(1) + } + x = 0 + for { + if !(uint32(c-int32('0')) < uint32(10) && x < Int32FromInt32(INT_MAX)/Int32FromInt32(10)) { + break + } + x = int32(10)*x + c - int32('0') + goto _9 + _9: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v12 = f + 8 + v11 = *(*uintptr)(unsafe.Pointer(v12)) + *(*uintptr)(unsafe.Pointer(v12))++ + v10 = int32(*(*uint8)(unsafe.Pointer(v11))) + } else { + v10 = X__shgetc(tls, f) + } + c = v10 + } + y = int64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y < Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(100)) { + break + } + y = int64(10)*y + int64(c) - int64('0') + goto _13 + _13: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + for { + if !(uint32(c-int32('0')) < uint32(10)) { + break + } + goto _17 + _17: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v20 = f + 8 + v19 = *(*uintptr)(unsafe.Pointer(v20)) + *(*uintptr)(unsafe.Pointer(v20))++ + v18 = int32(*(*uint8)(unsafe.Pointer(v19))) + } else { + v18 = X__shgetc(tls, f) + } + c = v18 + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if neg != 0 { + v22 = -y + } else { + v22 = y + } + return v22 +} + +func _decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) (r float64) { + bp := tls.Alloc(512) + defer tls.Free(512) + var a, bitlim, denormal, e2, emax, gotdig, gotrad, i, j, k, lnz, p10, rp, rpm9, sh, z, v13, v14, v2, v21, v23, v29, v30, v6, v9 int32 + var bias, frac, y float64 + var carry, carry1, carry2, t, tmp, tmp2 Tuint32_t + var dc, e10, lrp int64 + var tmp1 Tuint64_t + var v10, v11, v15, v16, v3, v4, v7, v8 uintptr + var _ /* x at bp+0 */ [128]Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, bias, bitlim, carry, carry1, carry2, dc, denormal, e10, e2, emax, frac, gotdig, gotrad, i, j, k, lnz, lrp, p10, rp, rpm9, sh, t, tmp, tmp1, tmp2, y, z, v10, v11, v13, v14, v15, v16, v2, v21, v23, v29, v3, v30, v4, v6, v7, v8, v9 + lrp = 0 + dc = 0 + e10 = 0 + lnz = 0 + gotdig = 0 + gotrad = 0 + emax = -emin - bits + int32(3) + denormal = 0 + frac = Float64FromInt32(0) + bias = Float64FromInt32(0) + j = 0 + k = 0 + /* Don't let leading zeros consume buffer space */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _1 + _1: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + c = v2 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v8 = f + 8 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + v6 = int32(*(*uint8)(unsafe.Pointer(v7))) + } else { + v6 = X__shgetc(tls, f) + } + c = v6 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + lrp-- + goto _5 + _5: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + c = v9 + } + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + gotrad = int32(1) + lrp = dc + } else { + if k < Int32FromInt32(KMAX)-Int32FromInt32(3) { + dc++ + if c != int32('0') { + lnz = int32(dc) + } + if j != 0 { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]*uint32(10) + uint32(c) - uint32('0') + } else { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(c - int32('0')) + } + j++ + v13 = j + if v13 == int32(9) { + k++ + j = 0 + } + gotdig = int32(1) + } else { + dc++ + if c != int32('0') { + lnz = (Int32FromInt32(KMAX) - Int32FromInt32(4)) * Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(Int32FromInt32(KMAX)-Int32FromInt32(4))*4)) |= uint32(1) + } + } + } + goto _12 + _12: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + } + if !(gotrad != 0) { + lrp = dc + } + if gotdig != 0 && c|int32(32) == int32('e') { + e10 = _scanexp(tls, f, pok) + if e10 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e10 = 0 + } + lrp += e10 + } else { + if c >= 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } + if !(gotdig != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + /* Handle zero specially to avoid nasty special cases later */ + if !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0] != 0) { + return float64(sign) * float64(0) + } + /* Optimize small integers (w/no exponent) and over/under-flow */ + if lrp == dc && dc < int64(10) && (bits > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bits == uint32(0)) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if lrp > int64(-emin/int32(2)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if lrp < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + /* Align incomplete final B1B digit */ + if j != 0 { + for { + if !(j < int32(9)) { + break + } + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32(10) + goto _19 + _19: + ; + j++ + } + k++ + j = 0 + } + a = 0 + z = k + e2 = 0 + rp = int32(lrp) + /* Optimize small to mid-size integers (even in exp. notation) */ + if lnz < int32(9) && lnz <= rp && rp < int32(18) { + if rp == int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) + } + if rp < int32(9) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) / float64(_p10s[int32(8)-rp]) + } + bitlim = bits - int32(3)*(rp-Int32FromInt32(9)) + if bitlim > int32(30) || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]>>bitlim == uint32(0) { + return float64(sign) * float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[0]) * float64(_p10s[rp-int32(10)]) + } + } + /* Drop trailing zeros */ + for { + if !!((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z-int32(1)] != 0) { + break + } + goto _20 + _20: + ; + z-- + } + /* Align radix point to B1B digit boundary */ + if rp%int32(9) != 0 { + if rp >= 0 { + v21 = rp % int32(9) + } else { + v21 = rp%int32(9) + int32(9) + } + rpm9 = v21 + p10 = _p10s[int32(8)-rpm9] + carry = uint32(0) + k = a + for { + if !(k != z) { + break + } + tmp = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] % uint32(p10) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k]/uint32(p10) + carry + carry = uint32(int32(1000000000)/p10) * tmp + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + rp -= int32(9) + } + goto _22 + _22: + ; + k++ + } + if carry != 0 { + v23 = z + z++ + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v23] = carry + } + rp += int32(9) - rpm9 + } + /* Upscale until desired number of bits are left of radix point */ + for rp < Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) || rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) && (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] < _th[0] { + carry1 = uint32(0) + e2 -= int32(29) + k = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + for { + tmp1 = uint64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k])< uint64(1000000000) { + carry1 = uint32(tmp1 / uint64(1000000000)) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1 % uint64(1000000000)) + } else { + carry1 = uint32(0) + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] = uint32(tmp1) + } + if k == (z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) && k != a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + z = k + } + if k == a { + break + } + goto _24 + _24: + ; + k = (k - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry1 != 0 { + rp += int32(9) + a = (a - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if a == z { + z = (z - int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] + } + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[a] = carry1 + } + } + /* Downscale until exactly number of bits are left of radix point */ + for { + carry2 = uint32(0) + sh = int32(1) + i = 0 + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + k = (a + i) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + if k == z || (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] < _th[i] { + i = int32(LD_B1B_DIG) + break + } + if (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] > _th[i] { + break + } + goto _26 + _26: + ; + i++ + } + if i == int32(LD_B1B_DIG) && rp == Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + break + } + /* FIXME: find a way to compute optimal sh */ + if rp > Int32FromInt32(9)+Int32FromInt32(9)*Int32FromInt32(LD_B1B_DIG) { + sh = int32(9) + } + e2 += sh + k = a + for { + if !(k != z) { + break + } + tmp2 = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] & uint32(int32(1)<>sh + carry2 + carry2 = uint32(Int32FromInt32(1000000000)>>sh) * tmp2 + if k == a && !((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[k] != 0) { + a = (a + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + i-- + rp -= int32(9) + } + goto _27 + _27: + ; + k = (k + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } + if carry2 != 0 { + if (z+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != a { + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[z] = carry2 + z = (z + int32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + uintptr((z-int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)))*4)) |= uint32(1) + } + } + goto _25 + _25: + } + /* Assemble desired bits into floating point variable */ + v29 = Int32FromInt32(0) + i = v29 + y = float64(v29) + for { + if !(i < int32(LD_B1B_DIG)) { + break + } + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + v30 = (z + Int32FromInt32(1)) & (Int32FromInt32(KMAX) - Int32FromInt32(1)) + z = v30 + (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[v30-int32(1)] = uint32(0) + } + y = Float64FromFloat64(1e+09)*y + float64((*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))]) + goto _28 + _28: + ; + i++ + } + y *= float64(sign) + /* Limit precision for denormal results */ + if bits > int32(LDBL_MANT_DIG)+e2-emin { + bits = int32(LDBL_MANT_DIG) + e2 - emin + if bits < 0 { + bits = 0 + } + denormal = int32(1) + } + /* Calculate bias term to force rounding, move out lower bits */ + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), y) + frac = Xfmodl(tls, y, Xscalbn(tls, Float64FromInt32(1), int32(LDBL_MANT_DIG)-bits)) + y -= frac + y += bias + } + /* Process tail of decimal input so it can affect rounding */ + if (a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z { + t = (*(*[128]Tuint32_t)(unsafe.Pointer(bp)))[(a+i)&(Int32FromInt32(KMAX)-Int32FromInt32(1))] + if t < uint32(500000000) && (t != 0 || (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) != z) { + frac += float64(0.25) * float64(sign) + } else { + if t > uint32(500000000) { + frac += float64(0.75) * float64(sign) + } else { + if t == uint32(500000000) { + if (a+i+int32(1))&(Int32FromInt32(KMAX)-Int32FromInt32(1)) == z { + frac += float64(0.5) * float64(sign) + } else { + frac += float64(0.75) * float64(sign) + } + } + } + } + if int32(LDBL_MANT_DIG)-bits >= int32(2) && !(Xfmodl(tls, frac, Float64FromInt32(1)) != 0) { + frac++ + } + } + y += frac + y -= bias + if (e2+int32(LDBL_MANT_DIG))&int32(INT_MAX) > emax-int32(5) { + if Xfabsl(tls, y) >= Float64FromInt32(2)/Float64FromFloat64(2.22044604925031308085e-16) { + if denormal != 0 && bits == int32(LDBL_MANT_DIG)+e2-emin { + denormal = 0 + } + y *= Float64FromFloat64(0.5) + e2++ + } + if e2+int32(LDBL_MANT_DIG) > emax || denormal != 0 && frac != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + } + return Xscalbnl(tls, y, e2) +} + +var _th = [2]Tuint32_t{ + 0: uint32(9007199), + 1: uint32(254740991), +} + +var _p10s = [8]int32{ + 0: int32(10), + 1: int32(100), + 2: int32(1000), + 3: int32(10000), + 4: int32(100000), + 5: int32(1000000), + 6: int32(10000000), + 7: int32(100000000), +} + +func _hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) (r float64) { + var bias, scale, y float64 + var c, d, gotdig, gotrad, gottail, v1, v12, v16, v5, v8 int32 + var dc, e2, rp int64 + var x Tuint32_t + var v10, v13, v14, v17, v18, v2, v3, v6, v7, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bias, c, d, dc, e2, gotdig, gotrad, gottail, rp, scale, x, y, v1, v10, v12, v13, v14, v16, v17, v18, v2, v3, v5, v6, v7, v8, v9 + x = uint32(0) + y = Float64FromInt32(0) + scale = Float64FromInt32(1) + bias = Float64FromInt32(0) + gottail = 0 + gotrad = 0 + gotdig = 0 + rp = 0 + dc = 0 + e2 = 0 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__shgetc(tls, f) + } + c = v1 + /* Skip leading zeros */ + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _4 + _4: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__shgetc(tls, f) + } + c = v5 + } + if c == int32('.') { + gotrad = int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + /* Count zeros after the radix point before significand */ + rp = 0 + for { + if !(c == int32('0')) { + break + } + gotdig = int32(1) + goto _11 + _11: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + rp-- + } + } + for { + if !(uint32(c-int32('0')) < uint32(10) || uint32(c|int32(32)-int32('a')) < uint32(6) || c == int32('.')) { + break + } + if c == int32('.') { + if gotrad != 0 { + break + } + rp = dc + gotrad = int32(1) + } else { + gotdig = int32(1) + if c > int32('9') { + d = c | int32(32) + int32(10) - int32('a') + } else { + d = c - int32('0') + } + if dc < int64(8) { + x = x*uint32(16) + uint32(d) + } else { + if dc < int64(Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)+Int32FromInt32(1)) { + scale /= Float64FromInt32(16) + y += float64(d) * scale + } else { + if d != 0 && !(gottail != 0) { + y += Float64FromFloat64(0.5) * scale + gottail = int32(1) + } + } + } + dc++ + } + goto _15 + _15: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v18 = f + 8 + v17 = *(*uintptr)(unsafe.Pointer(v18)) + *(*uintptr)(unsafe.Pointer(v18))++ + v16 = int32(*(*uint8)(unsafe.Pointer(v17))) + } else { + v16 = X__shgetc(tls, f) + } + c = v16 + } + if !(gotdig != 0) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if gotrad != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return float64(sign) * float64(0) + } + if !(gotrad != 0) { + rp = dc + } + for dc < int64(8) { + x *= uint32(16) + dc++ + } + if c|int32(32) == int32('p') { + e2 = _scanexp(tls, f, pok) + if e2 == -Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1) { + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + e2 = 0 + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + e2 += int64(4)*rp - int64(32) + if !(x != 0) { + return float64(sign) * float64(0) + } + if e2 > int64(-emin) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(1.79769313486231570815e+308) * Float64FromFloat64(1.79769313486231570815e+308) + } + if e2 < int64(emin-Int32FromInt32(2)*Int32FromInt32(LDBL_MANT_DIG)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return float64(sign) * Float64FromFloat64(2.22507385850720138309e-308) * Float64FromFloat64(2.22507385850720138309e-308) + } + for x < uint32(0x80000000) { + if y >= Float64FromFloat64(0.5) { + x += x + uint32(1) + y += y - Float64FromInt32(1) + } else { + x += x + y += y + } + e2-- + } + if int64(bits) > int64(32)+e2-int64(emin) { + bits = int32(int64(32) + e2 - int64(emin)) + if bits < 0 { + bits = 0 + } + } + if bits < int32(LDBL_MANT_DIG) { + bias = Xcopysignl(tls, Xscalbn(tls, Float64FromInt32(1), Int32FromInt32(32)+Int32FromInt32(LDBL_MANT_DIG)-bits-int32(1)), float64(sign)) + } + if bits < int32(32) && y != 0 && !(x&Uint32FromInt32(1) != 0) { + x++ + y = Float64FromInt32(0) + } + y = bias + float64(sign)*float64(x) + float64(sign)*y + y -= bias + if !(y != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + } + return Xscalbnl(tls, y, int32(e2)) +} + +func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) (r float64) { + if __ccgo_strace { + trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bits, c, emin, sign, v1, v12, v19, v2, v22, v27, v34, v5, v6, v8 int32 + var i, v31 Tsize_t + var v10, v13, v14, v20, v21, v23, v24, v28, v29, v3, v35, v36, v4, v9 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bits, c, emin, i, sign, v1, v10, v12, v13, v14, v19, v2, v20, v21, v22, v23, v24, v27, v28, v29, v3, v31, v34, v35, v36, v4, v5, v6, v8, v9 + sign = int32(1) + switch prec { + case 0: + bits = int32(FLT_MANT_DIG) + emin = -int32(125) - bits + case int32(1): + bits = int32(DBL_MANT_DIG) + emin = -int32(1021) - bits + case int32(2): + bits = int32(LDBL_MANT_DIG) + emin = -int32(1021) - bits + default: + return Float64FromInt32(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + sign -= int32(2) * BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + i = uint64(0) + for { + if !(i < uint64(8) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 336 + uintptr(i))))) { + break + } + if i < uint64(7) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v14 = f + 8 + v13 = *(*uintptr)(unsafe.Pointer(v14)) + *(*uintptr)(unsafe.Pointer(v14))++ + v12 = int32(*(*uint8)(unsafe.Pointer(v13))) + } else { + v12 = X__shgetc(tls, f) + } + c = v12 + } + goto _11 + _11: + ; + i++ + } + if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { + if i != uint64(8) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + for { + if !(i > uint64(3)) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + goto _16 + _16: + ; + i-- + } + } + } + return float64(float32(sign) * X__builtin_inff(tls)) + } + if !(i != 0) { + i = uint64(0) + for { + if !(i < uint64(3) && c|int32(32) == int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 345 + uintptr(i))))) { + break + } + if i < uint64(2) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v21 = f + 8 + v20 = *(*uintptr)(unsafe.Pointer(v21)) + *(*uintptr)(unsafe.Pointer(v21))++ + v19 = int32(*(*uint8)(unsafe.Pointer(v20))) + } else { + v19 = X__shgetc(tls, f) + } + c = v19 + } + goto _18 + _18: + ; + i++ + } + } + if i == uint64(3) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v24 = f + 8 + v23 = *(*uintptr)(unsafe.Pointer(v24)) + *(*uintptr)(unsafe.Pointer(v24))++ + v22 = int32(*(*uint8)(unsafe.Pointer(v23))) + } else { + v22 = X__shgetc(tls, f) + } + if v22 != int32('(') { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + i = uint64(1) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v29 = f + 8 + v28 = *(*uintptr)(unsafe.Pointer(v29)) + *(*uintptr)(unsafe.Pointer(v29))++ + v27 = int32(*(*uint8)(unsafe.Pointer(v28))) + } else { + v27 = X__shgetc(tls, f) + } + c = v27 + if uint32(c-int32('0')) < uint32(10) || uint32(c-int32('A')) < uint32(26) || uint32(c-int32('a')) < uint32(26) || c == int32('_') { + goto _26 + } + if c == int32(')') { + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !(pok != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + for { + v31 = i + i-- + if !(v31 != 0) { + break + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + goto _26 + _26: + ; + i++ + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) + } + if i != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + X__shlim(tls, f, int64(Int32FromInt32(0))) + return Float64FromInt32(0) + } + if c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v36 = f + 8 + v35 = *(*uintptr)(unsafe.Pointer(v36)) + *(*uintptr)(unsafe.Pointer(v36))++ + v34 = int32(*(*uint8)(unsafe.Pointer(v35))) + } else { + v34 = X__shgetc(tls, f) + } + c = v34 + if c|int32(32) == int32('x') { + return _hexfloat(tls, f, bits, emin, sign, pok) + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + c = int32('0') + } + return _decfloat(tls, f, c, bits, emin, sign, pok) +} + +// C documentation +// +// /* Lookup table for digit values. -1==255>=36 -> invalid */ +var _table6 = [257]uint8{ + 0: uint8(-Int32FromInt32(1)), + 1: uint8(-Int32FromInt32(1)), + 2: uint8(-Int32FromInt32(1)), + 3: uint8(-Int32FromInt32(1)), + 4: uint8(-Int32FromInt32(1)), + 5: uint8(-Int32FromInt32(1)), + 6: uint8(-Int32FromInt32(1)), + 7: uint8(-Int32FromInt32(1)), + 8: uint8(-Int32FromInt32(1)), + 9: uint8(-Int32FromInt32(1)), + 10: uint8(-Int32FromInt32(1)), + 11: uint8(-Int32FromInt32(1)), + 12: uint8(-Int32FromInt32(1)), + 13: uint8(-Int32FromInt32(1)), + 14: uint8(-Int32FromInt32(1)), + 15: uint8(-Int32FromInt32(1)), + 16: uint8(-Int32FromInt32(1)), + 17: uint8(-Int32FromInt32(1)), + 18: uint8(-Int32FromInt32(1)), + 19: uint8(-Int32FromInt32(1)), + 20: uint8(-Int32FromInt32(1)), + 21: uint8(-Int32FromInt32(1)), + 22: uint8(-Int32FromInt32(1)), + 23: uint8(-Int32FromInt32(1)), + 24: uint8(-Int32FromInt32(1)), + 25: uint8(-Int32FromInt32(1)), + 26: uint8(-Int32FromInt32(1)), + 27: uint8(-Int32FromInt32(1)), + 28: uint8(-Int32FromInt32(1)), + 29: uint8(-Int32FromInt32(1)), + 30: uint8(-Int32FromInt32(1)), + 31: uint8(-Int32FromInt32(1)), + 32: uint8(-Int32FromInt32(1)), + 33: uint8(-Int32FromInt32(1)), + 34: uint8(-Int32FromInt32(1)), + 35: uint8(-Int32FromInt32(1)), + 36: uint8(-Int32FromInt32(1)), + 37: uint8(-Int32FromInt32(1)), + 38: uint8(-Int32FromInt32(1)), + 39: uint8(-Int32FromInt32(1)), + 40: uint8(-Int32FromInt32(1)), + 41: uint8(-Int32FromInt32(1)), + 42: uint8(-Int32FromInt32(1)), + 43: uint8(-Int32FromInt32(1)), + 44: uint8(-Int32FromInt32(1)), + 45: uint8(-Int32FromInt32(1)), + 46: uint8(-Int32FromInt32(1)), + 47: uint8(-Int32FromInt32(1)), + 48: uint8(-Int32FromInt32(1)), + 50: uint8(1), + 51: uint8(2), + 52: uint8(3), + 53: uint8(4), + 54: uint8(5), + 55: uint8(6), + 56: uint8(7), + 57: uint8(8), + 58: uint8(9), + 59: uint8(-Int32FromInt32(1)), + 60: uint8(-Int32FromInt32(1)), + 61: uint8(-Int32FromInt32(1)), + 62: uint8(-Int32FromInt32(1)), + 63: uint8(-Int32FromInt32(1)), + 64: uint8(-Int32FromInt32(1)), + 65: uint8(-Int32FromInt32(1)), + 66: uint8(10), + 67: uint8(11), + 68: uint8(12), + 69: uint8(13), + 70: uint8(14), + 71: uint8(15), + 72: uint8(16), + 73: uint8(17), + 74: uint8(18), + 75: uint8(19), + 76: uint8(20), + 77: uint8(21), + 78: uint8(22), + 79: uint8(23), + 80: uint8(24), + 81: uint8(25), + 82: uint8(26), + 83: uint8(27), + 84: uint8(28), + 85: uint8(29), + 86: uint8(30), + 87: uint8(31), + 88: uint8(32), + 89: uint8(33), + 90: uint8(34), + 91: uint8(35), + 92: uint8(-Int32FromInt32(1)), + 93: uint8(-Int32FromInt32(1)), + 94: uint8(-Int32FromInt32(1)), + 95: uint8(-Int32FromInt32(1)), + 96: uint8(-Int32FromInt32(1)), + 97: uint8(-Int32FromInt32(1)), + 98: uint8(10), + 99: uint8(11), + 100: uint8(12), + 101: uint8(13), + 102: uint8(14), + 103: uint8(15), + 104: uint8(16), + 105: uint8(17), + 106: uint8(18), + 107: uint8(19), + 108: uint8(20), + 109: uint8(21), + 110: uint8(22), + 111: uint8(23), + 112: uint8(24), + 113: uint8(25), + 114: uint8(26), + 115: uint8(27), + 116: uint8(28), + 117: uint8(29), + 118: uint8(30), + 119: uint8(31), + 120: uint8(32), + 121: uint8(33), + 122: uint8(34), + 123: uint8(35), + 124: uint8(-Int32FromInt32(1)), + 125: uint8(-Int32FromInt32(1)), + 126: uint8(-Int32FromInt32(1)), + 127: uint8(-Int32FromInt32(1)), + 128: uint8(-Int32FromInt32(1)), + 129: uint8(-Int32FromInt32(1)), + 130: uint8(-Int32FromInt32(1)), + 131: uint8(-Int32FromInt32(1)), + 132: uint8(-Int32FromInt32(1)), + 133: uint8(-Int32FromInt32(1)), + 134: uint8(-Int32FromInt32(1)), + 135: uint8(-Int32FromInt32(1)), + 136: uint8(-Int32FromInt32(1)), + 137: uint8(-Int32FromInt32(1)), + 138: uint8(-Int32FromInt32(1)), + 139: uint8(-Int32FromInt32(1)), + 140: uint8(-Int32FromInt32(1)), + 141: uint8(-Int32FromInt32(1)), + 142: uint8(-Int32FromInt32(1)), + 143: uint8(-Int32FromInt32(1)), + 144: uint8(-Int32FromInt32(1)), + 145: uint8(-Int32FromInt32(1)), + 146: uint8(-Int32FromInt32(1)), + 147: uint8(-Int32FromInt32(1)), + 148: uint8(-Int32FromInt32(1)), + 149: uint8(-Int32FromInt32(1)), + 150: uint8(-Int32FromInt32(1)), + 151: uint8(-Int32FromInt32(1)), + 152: uint8(-Int32FromInt32(1)), + 153: uint8(-Int32FromInt32(1)), + 154: uint8(-Int32FromInt32(1)), + 155: uint8(-Int32FromInt32(1)), + 156: uint8(-Int32FromInt32(1)), + 157: uint8(-Int32FromInt32(1)), + 158: uint8(-Int32FromInt32(1)), + 159: uint8(-Int32FromInt32(1)), + 160: uint8(-Int32FromInt32(1)), + 161: uint8(-Int32FromInt32(1)), + 162: uint8(-Int32FromInt32(1)), + 163: uint8(-Int32FromInt32(1)), + 164: uint8(-Int32FromInt32(1)), + 165: uint8(-Int32FromInt32(1)), + 166: uint8(-Int32FromInt32(1)), + 167: uint8(-Int32FromInt32(1)), + 168: uint8(-Int32FromInt32(1)), + 169: uint8(-Int32FromInt32(1)), + 170: uint8(-Int32FromInt32(1)), + 171: uint8(-Int32FromInt32(1)), + 172: uint8(-Int32FromInt32(1)), + 173: uint8(-Int32FromInt32(1)), + 174: uint8(-Int32FromInt32(1)), + 175: uint8(-Int32FromInt32(1)), + 176: uint8(-Int32FromInt32(1)), + 177: uint8(-Int32FromInt32(1)), + 178: uint8(-Int32FromInt32(1)), + 179: uint8(-Int32FromInt32(1)), + 180: uint8(-Int32FromInt32(1)), + 181: uint8(-Int32FromInt32(1)), + 182: uint8(-Int32FromInt32(1)), + 183: uint8(-Int32FromInt32(1)), + 184: uint8(-Int32FromInt32(1)), + 185: uint8(-Int32FromInt32(1)), + 186: uint8(-Int32FromInt32(1)), + 187: uint8(-Int32FromInt32(1)), + 188: uint8(-Int32FromInt32(1)), + 189: uint8(-Int32FromInt32(1)), + 190: uint8(-Int32FromInt32(1)), + 191: uint8(-Int32FromInt32(1)), + 192: uint8(-Int32FromInt32(1)), + 193: uint8(-Int32FromInt32(1)), + 194: uint8(-Int32FromInt32(1)), + 195: uint8(-Int32FromInt32(1)), + 196: uint8(-Int32FromInt32(1)), + 197: uint8(-Int32FromInt32(1)), + 198: uint8(-Int32FromInt32(1)), + 199: uint8(-Int32FromInt32(1)), + 200: uint8(-Int32FromInt32(1)), + 201: uint8(-Int32FromInt32(1)), + 202: uint8(-Int32FromInt32(1)), + 203: uint8(-Int32FromInt32(1)), + 204: uint8(-Int32FromInt32(1)), + 205: uint8(-Int32FromInt32(1)), + 206: uint8(-Int32FromInt32(1)), + 207: uint8(-Int32FromInt32(1)), + 208: uint8(-Int32FromInt32(1)), + 209: uint8(-Int32FromInt32(1)), + 210: uint8(-Int32FromInt32(1)), + 211: uint8(-Int32FromInt32(1)), + 212: uint8(-Int32FromInt32(1)), + 213: uint8(-Int32FromInt32(1)), + 214: uint8(-Int32FromInt32(1)), + 215: uint8(-Int32FromInt32(1)), + 216: uint8(-Int32FromInt32(1)), + 217: uint8(-Int32FromInt32(1)), + 218: uint8(-Int32FromInt32(1)), + 219: uint8(-Int32FromInt32(1)), + 220: uint8(-Int32FromInt32(1)), + 221: uint8(-Int32FromInt32(1)), + 222: uint8(-Int32FromInt32(1)), + 223: uint8(-Int32FromInt32(1)), + 224: uint8(-Int32FromInt32(1)), + 225: uint8(-Int32FromInt32(1)), + 226: uint8(-Int32FromInt32(1)), + 227: uint8(-Int32FromInt32(1)), + 228: uint8(-Int32FromInt32(1)), + 229: uint8(-Int32FromInt32(1)), + 230: uint8(-Int32FromInt32(1)), + 231: uint8(-Int32FromInt32(1)), + 232: uint8(-Int32FromInt32(1)), + 233: uint8(-Int32FromInt32(1)), + 234: uint8(-Int32FromInt32(1)), + 235: uint8(-Int32FromInt32(1)), + 236: uint8(-Int32FromInt32(1)), + 237: uint8(-Int32FromInt32(1)), + 238: uint8(-Int32FromInt32(1)), + 239: uint8(-Int32FromInt32(1)), + 240: uint8(-Int32FromInt32(1)), + 241: uint8(-Int32FromInt32(1)), + 242: uint8(-Int32FromInt32(1)), + 243: uint8(-Int32FromInt32(1)), + 244: uint8(-Int32FromInt32(1)), + 245: uint8(-Int32FromInt32(1)), + 246: uint8(-Int32FromInt32(1)), + 247: uint8(-Int32FromInt32(1)), + 248: uint8(-Int32FromInt32(1)), + 249: uint8(-Int32FromInt32(1)), + 250: uint8(-Int32FromInt32(1)), + 251: uint8(-Int32FromInt32(1)), + 252: uint8(-Int32FromInt32(1)), + 253: uint8(-Int32FromInt32(1)), + 254: uint8(-Int32FromInt32(1)), + 255: uint8(-Int32FromInt32(1)), + 256: uint8(-Int32FromInt32(1)), +} + +func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) + defer func() { trc("-> %v", r) }() + } + var bs, c, neg, v1, v11, v14, v2, v21, v25, v29, v33, v37, v41, v45, v5, v6, v8 int32 + var val, v10, v12, v13, v15, v16, v22, v23, v26, v27, v3, v30, v31, v34, v35, v38, v39, v4, v42, v43, v46, v47, v9 uintptr + var x uint32 + var y uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bs, c, neg, val, x, y, v1, v10, v11, v12, v13, v14, v15, v16, v2, v21, v22, v23, v25, v26, v27, v29, v3, v30, v31, v33, v34, v35, v37, v38, v39, v4, v41, v42, v43, v45, v46, v47, v5, v6, v8, v9 + val = uintptr(unsafe.Pointer(&_table6)) + uintptr(1) + neg = 0 + if base > uint32(36) || base == uint32(1) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__shgetc(tls, f) + } + v1 = v2 + c = v1 + v5 = v1 + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + } + if c == int32('+') || c == int32('-') { + neg = -BoolInt32(c == int32('-')) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v10 = f + 8 + v9 = *(*uintptr)(unsafe.Pointer(v10)) + *(*uintptr)(unsafe.Pointer(v10))++ + v8 = int32(*(*uint8)(unsafe.Pointer(v9))) + } else { + v8 = X__shgetc(tls, f) + } + c = v8 + } + if (base == uint32(0) || base == uint32(16)) && c == int32('0') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = int32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = X__shgetc(tls, f) + } + c = v11 + if c|int32(32) == int32('x') { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = int32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = X__shgetc(tls, f) + } + c = v14 + if int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= int32(16) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if pok != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + } else { + X__shlim(tls, f, int64(Int32FromInt32(0))) + } + return uint64(0) + } + base = uint32(16) + } else { + if base == uint32(0) { + base = uint32(8) + } + } + } else { + if base == uint32(0) { + base = uint32(10) + } + if uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uint64(0) + } + } + if base == uint32(10) { + x = uint32(0) + for { + if !(uint32(c-int32('0')) < uint32(10) && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(10)-Uint32FromInt32(1)) { + break + } + x = x*uint32(10) + uint32(c-Int32FromUint8('0')) + goto _20 + _20: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v23 = f + 8 + v22 = *(*uintptr)(unsafe.Pointer(v23)) + *(*uintptr)(unsafe.Pointer(v23))++ + v21 = int32(*(*uint8)(unsafe.Pointer(v22))) + } else { + v21 = X__shgetc(tls, f) + } + c = v21 + } + y = uint64(x) + for { + if !(uint32(c-int32('0')) < uint32(10) && y <= (Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))/Uint64FromInt32(10) && uint64(10)*y <= Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)-uint64(c-Int32FromUint8('0'))) { + break + } + y = y*uint64(10) + uint64(c-Int32FromUint8('0')) + goto _24 + _24: + ; + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v27 = f + 8 + v26 = *(*uintptr)(unsafe.Pointer(v27)) + *(*uintptr)(unsafe.Pointer(v27))++ + v25 = int32(*(*uint8)(unsafe.Pointer(v26))) + } else { + v25 = X__shgetc(tls, f) + } + c = v25 + } + if uint32(c-int32('0')) >= uint32(10) { + goto done + } + } else { + if !(base&(base-Uint32FromInt32(1)) != 0) { + bs = int32(*(*uint8)(unsafe.Pointer(__ccgo_ts + 349 + uintptr(uint32(0x17)*base>>int32(5)&uint32(7))))) + x = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= Uint32FromUint32(0xffffffff)/Uint32FromInt32(32)) { + break + } + x = x<>bs) { + break + } + y = y<= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if y >= lim { + if !(lim&Uint64FromInt32(1) != 0) && !(neg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim - uint64(1) + } else { + if y > lim { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return lim + } + } + } + return y ^ uint64(neg) - uint64(neg) +} + +func X__procfdname(tls *TLS, buf uintptr, fd uint32) { + if __ccgo_strace { + trc("tls=%v buf=%v fd=%v, (%v:)", tls, buf, fd, origin(2)) + } + var i, j, v5 uint32 + var v2 uint8 + _, _, _, _ = i, j, v2, v5 + i = uint32(0) + for { + v2 = *(*uint8)(unsafe.Pointer(__ccgo_ts + 358 + uintptr(i))) + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v2 + if !(v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if !(fd != 0) { + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8('0') + *(*uint8)(unsafe.Pointer(buf + uintptr(i+uint32(1)))) = uint8(0) + return + } + j = fd + for { + if !(j != 0) { + break + } + goto _3 + _3: + ; + j /= uint32(10) + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = uint8(0) + for { + if !(fd != 0) { + break + } + i-- + v5 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v5))) = uint8(uint32('0') + fd%uint32(10)) + goto _4 + _4: + ; + fd /= uint32(10) + } +} + +/* The shcnt field stores the number of bytes read so far, offset by + * the value of buf-rpos at the last function call (__shlim or __shgetc), + * so that between calls the inline shcnt macro can add rpos-buf to get + * the actual count. */ + +func X__shlim(tls *TLS, f uintptr, lim Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Fshlim = lim + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + /* If lim is nonzero, rend must be a valid pointer. */ + if lim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > lim { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } +} + +func X__shgetc(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 int32 + var cnt Toff_t + var v2 bool + _, _, _, _ = c, cnt, v1, v2 + cnt = (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if v2 = (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*TFILE)(unsafe.Pointer(f)).Fshlim; !v2 { + v1 = X__uflow(tls, f) + c = v1 + } + if v2 || v1 < 0 { + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + (*TFILE)(unsafe.Pointer(f)).Fshlim = int64(-int32(1)) + return -int32(1) + } + cnt++ + if (*TFILE)(unsafe.Pointer(f)).Fshlim != 0 && int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos) > (*TFILE)(unsafe.Pointer(f)).Fshlim-cnt { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr((*TFILE)(unsafe.Pointer(f)).Fshlim-cnt) + } else { + (*TFILE)(unsafe.Pointer(f)).Fshend = (*TFILE)(unsafe.Pointer(f)).Frend + } + (*TFILE)(unsafe.Pointer(f)).Fshcnt = int64((*TFILE)(unsafe.Pointer(f)).Fbuf) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + cnt + if (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf { + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(-Int32FromInt32(1)))) = uint8(c) + } + return c +} + +func X__syscall_ret(tls *TLS, r uint64) (r1 int64) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + if r > -Uint64FromUint64(4096) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(-r) + return int64(-int32(1)) + } + return int64(r) +} + +type TElf_Symndx = uint64 + +type Tdl_phdr_info = struct { + Fdlpi_addr TElf64_Addr + Fdlpi_name uintptr + Fdlpi_phdr uintptr + Fdlpi_phnum TElf64_Half + Fdlpi_adds uint64 + Fdlpi_subs uint64 + Fdlpi_tls_modid Tsize_t + Fdlpi_tls_data uintptr +} + +type Tlink_map = struct { + Fl_addr TElf64_Addr + Fl_name uintptr + Fl_ld uintptr + Fl_next uintptr + Fl_prev uintptr +} + +type Tr_debug = struct { + Fr_version int32 + Fr_map uintptr + Fr_brk TElf64_Addr + Fr_state int32 + Fr_ldbase TElf64_Addr +} + +const _RT_CONSISTENT = 0 +const _RT_ADD = 1 +const _RT_DELETE = 2 +const VERSION = "1.2.5" + +const IPC_CREAT = 512 +const IPC_EXCL = 1024 +const IPC_INFO = 3 +const IPC_NOWAIT = 2048 +const IPC_RMID = 0 +const IPC_SET = 1 +const IPC_STAT = 2 +const __ipc_perm_key = 0 +const __ipc_perm_seq = 0 + +type Tkey_t = int32 + +type Tipc_perm = struct { + F__key Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + F__seq int32 + F__pad1 int64 + F__pad2 int64 +} + +func Xftok(tls *TLS, path uintptr, id int32) (r Tkey_t) { + if __ccgo_strace { + trc("tls=%v path=%v id=%v, (%v:)", tls, path, id, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var _ /* st at bp+0 */ Tstat + if Xstat(tls, path, bp) < 0 { + return -int32(1) + } + return int32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ino&Uint64FromInt32(0xffff) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0xff)< %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgctl)), int64(q), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(Int32FromInt32(0)), int64(buf), int64(Int32FromInt32(0)))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xmsgget(tls *TLS, k Tkey_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v k=%v flag=%v, (%v:)", tls, k, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgget)), int64(k), int64(flag))))) +} + +func Xmsgrcv(tls *TLS, q int32, m uintptr, len1 Tsize_t, type1 int64, flag int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v type1=%v flag=%v, (%v:)", tls, q, m, len1, type1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: int64(m), + 1: type1, + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgrcv)), int64(q), int64(len1), int64(flag), int64(bp), 0))) +} + +func Xmsgsnd(tls *TLS, q int32, m uintptr, len1 Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v q=%v m=%v len1=%v flag=%v, (%v:)", tls, q, m, len1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_msgsnd)), int64(q), int64(len1), int64(flag), int64(m), 0)))) +} + +const GETALL = 13 +const GETNCNT = 14 +const GETPID = 11 +const GETVAL = 12 +const GETZCNT = 15 +const SEM_INFO = 19 +const SEM_STAT = 18 +const SEM_STAT_ANY = 20 +const SEM_UNDO = 4096 +const SETALL = 17 +const SETVAL = 16 +const _SEM_SEMUN_UNDEFINED = 1 + +type Tsemid_ds = struct { + Fsem_perm Tipc_perm + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + F__sem_nsems_pad [6]uint8 + Fsem_nsems uint16 + F__unused3 int64 + F__unused4 int64 +} + +type Tseminfo = struct { + Fsemmap int32 + Fsemmni int32 + Fsemmns int32 + Fsemmnu int32 + Fsemmsl int32 + Fsemopm int32 + Fsemume int32 + Fsemusz int32 + Fsemvmx int32 + Fsemaem int32 +} + +type Tsembuf = struct { + Fsem_num uint16 + Fsem_op int16 + Fsem_flg int16 +} + +type Tsemun = struct { + Fbuf [0]uintptr + Farray [0]uintptr + Fval int32 + F__ccgo_pad3 [4]byte +} + +func Xsemctl(tls *TLS, id int32, num int32, cmd int32, va uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v num=%v cmd=%v va=%v, (%v:)", tls, id, num, cmd, va, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var r int32 + var _ /* arg at bp+0 */ Tsemun + _, _ = ap, r + *(*Tsemun)(unsafe.Pointer(bp)) = Tsemun{} + *(*int32)(unsafe.Pointer(bp)) = 0 + switch cmd & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)) { + case int32(SETVAL): + fallthrough + case int32(GETALL): + fallthrough + case int32(SETALL): + fallthrough + case int32(IPC_SET): + fallthrough + case int32(IPC_INFO): + fallthrough + case int32(SEM_INFO): + fallthrough + case Int32FromInt32(IPC_STAT) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(18) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + fallthrough + case (Int32FromInt32(20) | Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) & ^(Int32FromInt32(IPC_STAT) & Int32FromInt32(0x100)): + ap = va + *(*Tsemun)(unsafe.Pointer(bp)) = *(*Tsemun)(unsafe.Pointer(VaOther(&ap, 8))) + _ = ap + } + r = int32(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semctl)), int64(id), int64(num), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(bp))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xsemget(tls *TLS, key Tkey_t, n int32, fl int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v n=%v fl=%v, (%v:)", tls, key, n, fl, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The kernel uses the wrong type for the sem_nsems member + * of struct semid_ds, and thus might not check that the + * n fits in the correct (per POSIX) userspace type, so + * we have to check here. */ + if n > int32(USHRT_MAX) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semget)), int64(key), int64(n), int64(fl))))) +} + +func Xsemop(tls *TLS, id int32, buf uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v, (%v:)", tls, id, buf, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semop)), int64(id), int64(n), int64(Int32FromInt32(0)), int64(buf))))) +} + +const NO_TIME32 = 0 +const __key = 0 +const __seq = 0 + +type Tipc_perm1 = struct { + Fkey Tkey_t + Fuid Tuid_t + Fgid Tgid_t + Fcuid Tuid_t + Fcgid Tgid_t + Fmode Tmode_t + Fseq int32 + F__pad1 int64 + F__pad2 int64 +} + +type Tsemid_ds1 = struct { + Fsem_perm Tipc_perm1 + Fsem_otime Ttime_t + Fsem_ctime Ttime_t + F__sem_nsems_pad [6]uint8 + Fsem_nsems uint16 + F__unused3 int64 + F__unused4 int64 +} + +func Xsemtimedop(tls *TLS, id int32, buf uintptr, n Tsize_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v id=%v buf=%v n=%v ts=%v, (%v:)", tls, id, buf, n, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_semtimedop)), int64(id), int64(n), int64(Int32FromInt32(0)), int64(buf), int64(ts))))) +} + +const SHMLBA = 4096 +const SHM_DEST = 512 +const SHM_EXEC = 32768 +const SHM_HUGETLB = 2048 +const SHM_HUGE_16GB = 2281701376 +const SHM_HUGE_16MB = 1610612736 +const SHM_HUGE_1GB = 2013265920 +const SHM_HUGE_1MB = 1342177280 +const SHM_HUGE_256MB = 1879048192 +const SHM_HUGE_2GB = 2080374784 +const SHM_HUGE_2MB = 1409286144 +const SHM_HUGE_32MB = 1677721600 +const SHM_HUGE_512KB = 1275068416 +const SHM_HUGE_512MB = 1946157056 +const SHM_HUGE_64KB = 1073741824 +const SHM_HUGE_8MB = 1543503872 +const SHM_HUGE_MASK = 63 +const SHM_HUGE_SHIFT = 26 +const SHM_INFO = 14 +const SHM_LOCK = 11 +const SHM_LOCKED = 1024 +const SHM_NORESERVE = 4096 +const SHM_R = 256 +const SHM_RDONLY = 4096 +const SHM_REMAP = 16384 +const SHM_RND = 8192 +const SHM_STAT = 13 +const SHM_STAT_ANY = 15 +const SHM_UNLOCK = 12 +const SHM_W = 128 + +type Tshmid_ds = struct { + Fshm_perm Tipc_perm + Fshm_segsz Tsize_t + Fshm_atime Ttime_t + Fshm_dtime Ttime_t + Fshm_ctime Ttime_t + Fshm_cpid Tpid_t + Fshm_lpid Tpid_t + Fshm_nattch uint64 + F__pad1 uint64 + F__pad2 uint64 +} + +type Tshminfo = struct { + Fshmmax uint64 + Fshmmin uint64 + Fshmmni uint64 + Fshmseg uint64 + Fshmall uint64 + F__unused [4]uint64 +} + +type Tshm_info = struct { + F__used_ids int32 + Fshm_tot uint64 + Fshm_rss uint64 + Fshm_swp uint64 + F__swap_attempts uint64 + F__swap_successes uint64 +} + +type Tshmatt_t = uint64 + +func Xshmat(tls *TLS, id int32, _addr uintptr, flag int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v id=%v _addr=%v flag=%v, (%v:)", tls, id, _addr, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _addr + var ret uint64 + var v1 uintptr + _, _ = ret, v1 + ret = uint64(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmat)), int64(id), int64(flag), int64(bp), int64(*(*uintptr)(unsafe.Pointer(bp))))))) + if ret > -Uint64FromInt32(SHMLBA) { + v1 = uintptr(ret) + } else { + v1 = *(*uintptr)(unsafe.Pointer(bp)) + } + return v1 +} + +func Xshmctl(tls *TLS, id int32, cmd int32, buf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v id=%v cmd=%v buf=%v, (%v:)", tls, id, cmd, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall6(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmctl)), int64(id), int64(cmd & ^(Int32FromInt32(IPC_STAT)&Int32FromInt32(0x100)) | Int32FromInt32(IPC_64)), int64(Int32FromInt32(0)), int64(buf), int64(Int32FromInt32(0)))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xshmdt(tls *TLS, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v, (%v:)", tls, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmdt)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)), int64(addr))))) +} + +func Xshmget(tls *TLS, key Tkey_t, size Tsize_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v key=%v size=%v flag=%v, (%v:)", tls, key, size, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size > uint64(Int64FromInt64(INT64_MAX)) { + size = Uint64FromUint64(0xffffffffffffffff) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_ipc), int64(Int32FromInt32(IPCOP_shmget)), int64(key), int64(size), int64(flag))))) +} + +type Tpasswd = struct { + Fpw_name uintptr + Fpw_passwd uintptr + Fpw_uid Tuid_t + Fpw_gid Tgid_t + Fpw_gecos uintptr + Fpw_dir uintptr + Fpw_shell uintptr +} + +func Xcuserid(tls *TLS, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(2112) + defer tls.Free(2112) + var len1 Tsize_t + var _ /* ppw at bp+48 */ uintptr + var _ /* pw at bp+0 */ Tpasswd + var _ /* pwb at bp+56 */ [256]int64 + _ = len1 + if buf != 0 { + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + } + Xgetpwuid_r(tls, Xgeteuid(tls), bp, bp+56, uint64(2048), bp+48) + if !(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + return buf + } + len1 = Xstrnlen(tls, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, uint64(L_cuserid)) + if len1 == uint64(L_cuserid) { + return buf + } + if !(buf != 0) { + buf = uintptr(unsafe.Pointer(&_usridbuf)) + } + Xmemcpy(tls, buf, (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_name, len1+uint64(1)) + return buf +} + +var _usridbuf [20]uint8 + +func Xvwarn(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+373, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + Xfputs(tls, __ccgo_ts+378, uintptr(unsafe.Pointer(&X__stderr_FILE))) + } + Xperror(tls, uintptr(0)) +} + +func Xvwarnx(tls *TLS, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+373, VaList(bp+8, Xprogram_invocation_short_name)) + if fmt != 0 { + Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), fmt, ap) + } + Xputc(tls, int32('\n'), uintptr(unsafe.Pointer(&X__stderr_FILE))) +} + +func Xverr(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarn(tls, fmt, ap) + _exit(tls, status) +} + +func Xverrx(tls *TLS, status int32, fmt uintptr, ap Tva_list) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v ap=%v, (%v:)", tls, status, fmt, ap, origin(2)) + } + Xvwarnx(tls, fmt, ap) + _exit(tls, status) +} + +func Xwarn(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarn(tls, fmt, ap) + _ = ap +} + +func Xwarnx(tls *TLS, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xvwarnx(tls, fmt, ap) + _ = ap +} + +func Xerr(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverr(tls, status, fmt, ap) + _ = ap +} + +func Xerrx(tls *TLS, status int32, fmt uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v status=%v fmt=%v va=%v, (%v:)", tls, status, fmt, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + Xverrx(tls, status, fmt, ap) + _ = ap +} + +func Xeuidaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfaccessat(tls, -int32(100), filename, amode, int32(AT_EACCESS)) +} + +func Xeaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xeuidaccess(tls, filename, amode) +} + +const FTW_CHDIR = 4 +const FTW_D = 2 +const FTW_DEPTH = 8 +const FTW_DNR = 3 +const FTW_DP = 6 +const FTW_F = 1 +const FTW_MOUNT = 2 +const FTW_NS = 4 +const FTW_PHYS = 1 +const FTW_SL = 5 +const FTW_SLN = 7 + +type TFTW = struct { + Fbase int32 + Flevel int32 +} + +func Xftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v, (%v:)", tls, path, fn, fd_limit, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* The following cast assumes that calling a function with one + * argument more than it needs behaves as expected. This is + * actually undefined, but works on all real-world machines. */ + return Xnftw(tls, path, fn, fd_limit, int32(FTW_PHYS)) +} + +const STATX_ALL = 4095 +const STATX_ATIME = 32 +const STATX_BASIC_STATS = 2047 +const STATX_BLOCKS = 1024 +const STATX_BTIME = 2048 +const STATX_CTIME = 128 +const STATX_GID = 16 +const STATX_INO = 256 +const STATX_MODE = 2 +const STATX_MTIME = 64 +const STATX_NLINK = 4 +const STATX_SIZE = 512 +const STATX_TYPE = 1 +const STATX_UID = 8 +const S_IEXEC = 64 +const S_IREAD = 256 +const S_IWRITE = 128 + +type Tstatx_timestamp = struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + F__pad Tuint32_t +} + +type Tstatx = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + F__pad0 [1]Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime Tstatx_timestamp + Fstx_btime Tstatx_timestamp + Fstx_ctime Tstatx_timestamp + Fstx_mtime Tstatx_timestamp + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + F__pad1 [14]Tuint64_t +} + +type Ttimezone = struct { + Ftz_minuteswest int32 + Ftz_dsttime int32 +} + +func Xfutimes(tls *TLS, fd int32, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tv=%v, (%v:)", tls, fd, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* times at bp+0 */ [2]Ttimespec + if !(tv != 0) { + return Xfutimens(tls, fd, uintptr(0)) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + return Xfutimens(tls, fd, bp) +} + +const prlimit64 = 0 + +func Xgetdtablesize(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* rl at bp+0 */ Trlimit + _ = v1 + Xgetrlimit(tls, int32(RLIMIT_NOFILE), bp) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur < uint64(INT_MAX) { + v1 = (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur + } else { + v1 = uint64(INT_MAX) + } + return int32(v1) +} + +func Xgetloadavg(tls *TLS, a uintptr, n int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v n=%v, (%v:)", tls, a, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(368) + defer tls.Free(368) + var i, v1 int32 + var _ /* si at bp+0 */ Tsysinfo + _, _ = i, v1 + if n <= 0 { + if n != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 + } + Xsysinfo(tls, bp) + if n > int32(3) { + n = int32(3) + } + i = 0 + for { + if !(i < n) { + break + } + *(*float64)(unsafe.Pointer(a + uintptr(i)*8)) = Float64FromFloat64(1) / float64(Int32FromInt32(1)< %v", r) }() + } + return int32(PAGESIZE) +} + +const B0 = 0 +const B1000000 = 4104 +const B110 = 3 +const B115200 = 4098 +const B1152000 = 4105 +const B1200 = 9 +const B134 = 4 +const B150 = 5 +const B1500000 = 4106 +const B1800 = 10 +const B19200 = 14 +const B200 = 6 +const B2000000 = 4107 +const B230400 = 4099 +const B2400 = 11 +const B2500000 = 4108 +const B300 = 7 +const B3000000 = 4109 +const B3500000 = 4110 +const B38400 = 15 +const B4000000 = 4111 +const B460800 = 4100 +const B4800 = 12 +const B50 = 1 +const B500000 = 4101 +const B57600 = 4097 +const B576000 = 4102 +const B600 = 8 +const B75 = 2 +const B921600 = 4103 +const B9600 = 13 +const BRKINT = 2 +const BS0 = 0 +const BS1 = 8192 +const BSDLY = 8192 +const CBAUD = 4111 +const CBAUDEX = 4096 +const CIBAUD = 269418496 +const CLOCAL = 2048 +const CMSPAR = 1073741824 +const CR0 = 0 +const CR1 = 512 +const CR2 = 1024 +const CR3 = 1536 +const CRDLY = 1536 +const CREAD = 128 +const CRTSCTS = 2147483648 +const CS5 = 0 +const CS6 = 16 +const CS7 = 32 +const CS8 = 48 +const CSIZE = 48 +const CSTOPB = 64 +const ECHO = 8 +const ECHOCTL = 512 +const ECHOE = 16 +const ECHOK = 32 +const ECHOKE = 2048 +const ECHONL = 64 +const ECHOPRT = 1024 +const EXTA = 14 +const EXTB = 15 +const EXTPROC = 65536 +const FF0 = 0 +const FF1 = 32768 +const FFDLY = 32768 +const FLUSHO = 4096 +const HUPCL = 1024 +const ICANON = 2 +const ICRNL = 256 +const IEXTEN = 32768 +const IGNBRK = 1 +const IGNCR = 128 +const IGNPAR = 4 +const IMAXBEL = 8192 +const INLCR = 64 +const INPCK = 16 +const ISIG = 1 +const ISTRIP = 32 +const IUCLC = 512 +const IUTF8 = 16384 +const IXANY = 2048 +const IXOFF = 4096 +const IXON = 1024 +const NCCS = 32 +const NL0 = 0 +const NL1 = 256 +const NLDLY = 256 +const NOFLSH = 128 +const OCRNL = 8 +const OFDEL = 128 +const OFILL = 64 +const OLCUC = 2 +const ONLCR = 4 +const ONLRET = 32 +const ONOCR = 16 +const OPOST = 1 +const PARENB = 256 +const PARMRK = 8 +const PARODD = 512 +const PENDIN = 16384 +const TAB0 = 0 +const TAB1 = 2048 +const TAB2 = 4096 +const TAB3 = 6144 +const TABDLY = 6144 +const TCIFLUSH = 0 +const TCIOFF = 2 +const TCIOFLUSH = 2 +const TCION = 3 +const TCOFLUSH = 1 +const TCOOFF = 0 +const TCOON = 1 +const TCSADRAIN = 1 +const TCSAFLUSH = 2 +const TCSANOW = 0 +const TOSTOP = 256 +const VDISCARD = 13 +const VEOF = 4 +const VEOL = 11 +const VEOL2 = 16 +const VERASE = 2 +const VINTR = 0 +const VKILL = 3 +const VLNEXT = 15 +const VMIN = 6 +const VQUIT = 1 +const VREPRINT = 12 +const VSTART = 8 +const VSTOP = 9 +const VSUSP = 10 +const VSWTC = 7 +const VT0 = 0 +const VT1 = 16384 +const VTDLY = 16384 +const VTIME = 5 +const VWERASE = 14 +const XCASE = 4 +const XTABS = 6144 + +type Twinsize = struct { + Fws_row uint16 + Fws_col uint16 + Fws_xpixel uint16 + Fws_ypixel uint16 +} + +type Tcc_t = uint8 + +type Tspeed_t = uint32 + +type Ttcflag_t = uint32 + +type Ttermios = struct { + Fc_iflag Ttcflag_t + Fc_oflag Ttcflag_t + Fc_cflag Ttcflag_t + Fc_lflag Ttcflag_t + Fc_line Tcc_t + Fc_cc [32]Tcc_t + F__c_ispeed Tspeed_t + F__c_ospeed Tspeed_t +} + +func Xgetpass(tls *TLS, prompt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v prompt=%v, (%v:)", tls, prompt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd, v1 int32 + var l Tssize_t + var v2 uintptr + var _ /* s at bp+0 */ Ttermios + var _ /* t at bp+60 */ Ttermios + _, _, _, _ = fd, l, v1, v2 + v1 = Xopen(tls, __ccgo_ts+381, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + Xtcgetattr(tls, fd, bp+60) + *(*Ttermios)(unsafe.Pointer(bp)) = *(*Ttermios)(unsafe.Pointer(bp + 60)) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ISIG))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_lflag |= uint32(ICANON) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag &= uint32(^(Int32FromInt32(INLCR) | Int32FromInt32(IGNCR))) + (*(*Ttermios)(unsafe.Pointer(bp + 60))).Fc_iflag |= uint32(ICRNL) + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp+60) + Xtcdrain(tls, fd) + Xdprintf(tls, fd, __ccgo_ts+15, VaList(bp+128, prompt)) + l = Xread(tls, fd, uintptr(unsafe.Pointer(&_password)), uint64(128)) + if l >= 0 { + if l > 0 && int32(_password[l-int64(1)]) == int32('\n') || uint64(l) == uint64(128) { + l-- + } + _password[l] = uint8(0) + } + Xtcsetattr(tls, fd, int32(TCSAFLUSH), bp) + Xdprintf(tls, fd, __ccgo_ts+390, 0) + Xclose(tls, fd) + if l < 0 { + v2 = uintptr(0) + } else { + v2 = uintptr(unsafe.Pointer(&_password)) + } + return v2 +} + +var _password [128]uint8 + +var _defshells = [18]uint8{'/', 'b', 'i', 'n', '/', 's', 'h', 10, '/', 'b', 'i', 'n', '/', 'c', 's', 'h', 10} + +var _line uintptr +var _linesize Tsize_t +var _f uintptr + +func Xendusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f != 0 { + Xfclose(tls, _f) + } + _f = uintptr(0) +} + +func Xsetusershell(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if !(_f != 0) { + _f = Xfopen(tls, __ccgo_ts+392, __ccgo_ts+404) + } + if !(_f != 0) { + _f = Xfmemopen(tls, uintptr(unsafe.Pointer(&_defshells)), Uint64FromInt64(18)-Uint64FromInt32(1), __ccgo_ts+408) + } +} + +func Xgetusershell(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tssize_t + _ = l + if !(_f != 0) { + Xsetusershell(tls) + } + if !(_f != 0) { + return uintptr(0) + } + l = Xgetline(tls, uintptr(unsafe.Pointer(&_line)), uintptr(unsafe.Pointer(&_linesize)), _f) + if l <= 0 { + return uintptr(0) + } + if int32(*(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1))))) == int32('\n') { + *(*uint8)(unsafe.Pointer(_line + uintptr(l-int64(1)))) = uint8(0) + } + return _line +} + +const ANYMARK = 1 +const FLUSHBAND = 4 +const FLUSHR = 1 +const FLUSHRW = 3 +const FLUSHW = 2 +const FMNAMESZ = 8 +const I_ATMARK = 21279 +const I_CANPUT = 21282 +const I_CKBAND = 21277 +const I_FDINSERT = 21264 +const I_FIND = 21259 +const I_FLUSH = 21253 +const I_FLUSHBAND = 21276 +const I_GETBAND = 21278 +const I_GETCLTIME = 21281 +const I_GETSIG = 21258 +const I_GRDOPT = 21255 +const I_GWROPT = 21268 +const I_LINK = 21260 +const I_LIST = 21269 +const I_LOOK = 21252 +const I_NREAD = 21249 +const I_PEEK = 21263 +const I_PLINK = 21270 +const I_POP = 21251 +const I_PUNLINK = 21271 +const I_PUSH = 21250 +const I_RECVFD = 21262 +const I_SENDFD = 21265 +const I_SETCLTIME = 21280 +const I_SETSIG = 21257 +const I_SRDOPT = 21254 +const I_STR = 21256 +const I_SWROPT = 21267 +const I_UNLINK = 21261 +const LASTMARK = 2 +const MORECTL = 1 +const MOREDATA = 2 +const MSG_ANY = 2 +const MSG_BAND = 4 +const MSG_HIPRI = 1 +const MUXID_ALL = -1 +const RMSGD = 1 +const RMSGN = 2 +const RNORM = 0 +const RPROTDAT = 4 +const RPROTDIS = 8 +const RPROTMASK = 28 +const RPROTNORM = 16 +const RS_HIPRI = 1 +const SNDPIPE = 2 +const SNDZERO = 1 +const S_BANDURG = 512 +const S_ERROR = 16 +const S_HANGUP = 32 +const S_HIPRI = 2 +const S_INPUT = 1 +const S_MSG = 8 +const S_OUTPUT = 4 +const S_RDBAND = 128 +const S_RDNORM = 64 +const S_WRBAND = 256 +const S_WRNORM = 4 +const __SID = 21248 + +type Tbandinfo = struct { + Fbi_pri uint8 + Fbi_flag int32 +} + +type Tstrbuf = struct { + Fmaxlen int32 + Flen1 int32 + Fbuf uintptr +} + +type Tstrpeek = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 +} + +type Tstrfdinsert = struct { + Fctlbuf Tstrbuf + Fdatabuf Tstrbuf + Fflags uint32 + Ffildes int32 + Foffset int32 +} + +type Tstrioctl = struct { + Fic_cmd int32 + Fic_timout int32 + Fic_len int32 + Fic_dp uintptr +} + +type Tstrrecvfd = struct { + Ffd int32 + Fuid int32 + Fgid int32 + F__fill [8]uint8 +} + +type Tstr_mlist = struct { + Fl_name [9]uint8 +} + +type Tstr_list = struct { + Fsl_nmods int32 + Fsl_modlist uintptr +} + +func Xisastream(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if Xfcntl(tls, fd, int32(F_GETFD), 0) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xlutimes(tls *TLS, filename uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v tv=%v, (%v:)", tls, filename, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + var _ /* times at bp+0 */ [2]Ttimespec + _ = v1 + if tv != 0 { + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[0].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv))).Ftv_usec * int64(1000) + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[int32(1)].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(tv + 1*16))).Ftv_usec * int64(1000) + } + if tv != 0 { + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), filename, v1, int32(AT_SYMLINK_NOFOLLOW)) +} + +const UL_GETFSIZE = 1 +const UL_SETFSIZE = 2 + +func Xulimit(tls *TLS, cmd int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v cmd=%v va=%v, (%v:)", tls, cmd, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ap Tva_list + var val int64 + var _ /* rl at bp+0 */ Trlimit + _, _ = ap, val + Xgetrlimit(tls, int32(RLIMIT_FSIZE), bp) + if cmd == int32(UL_SETFSIZE) { + ap = va + val = VaInt64(&ap) + _ = ap + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = uint64(512) * uint64(val) + if Xsetrlimit(tls, int32(RLIMIT_FSIZE), bp) != 0 { + return int64(-int32(1)) + } + } + return int64((*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur / uint64(512)) +} + +const BOOT_TIME = 2 +const DEAD_PROCESS = 8 +const EMPTY = 0 +const INIT_PROCESS = 5 +const LOGIN_PROCESS = 6 +const NEW_TIME = 3 +const OLD_TIME = 4 +const RUN_LVL = 1 +const USER_PROCESS = 7 +const e_exit = 0 +const e_termination = 0 + +type Tutmpx = struct { + Fut_type int16 + F__ut_pad1 int16 + Fut_pid Tpid_t + Fut_line [32]uint8 + Fut_id [4]uint8 + Fut_user [32]uint8 + Fut_host [256]uint8 + Fut_exit struct { + F__e_termination int16 + F__e_exit int16 + } + F__ut_pad2 int32 + Fut_session int32 + Fut_tv Ttimeval + Fut_addr_v6 [4]uint32 + F__unused [20]uint8 +} + +func Xendutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetutxent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetutxent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xgetutxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xpututxline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return UintptrFromInt32(0) +} + +func Xupdwtmpx(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } +} + +func ___utmpxname(tls *TLS, f uintptr) (r int32) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return -int32(1) +} + +func Xendutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendutxent(tls) +} + +func Xgetutent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxent(tls) +} + +func Xgetutid(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxid(tls, ut) +} + +func Xgetutline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetutxline(tls, ut) +} + +func Xpututline(tls *TLS, ut uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ut=%v, (%v:)", tls, ut, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xpututxline(tls, ut) +} + +func Xsetutent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetutxent(tls) +} + +func Xupdwtmp(tls *TLS, f uintptr, u uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v u=%v, (%v:)", tls, f, u, origin(2)) + } + Xupdwtmpx(tls, f, u) +} + +const ADJ_ESTERROR = 8 +const ADJ_FREQUENCY = 2 +const ADJ_MAXERROR = 4 +const ADJ_MICRO = 4096 +const ADJ_NANO = 8192 +const ADJ_OFFSET = 1 +const ADJ_OFFSET_SINGLESHOT = 32769 +const ADJ_OFFSET_SS_READ = 40961 +const ADJ_SETOFFSET = 256 +const ADJ_STATUS = 16 +const ADJ_TAI = 128 +const ADJ_TICK = 16384 +const ADJ_TIMECONST = 32 +const MAXTC = 6 +const MOD_CLKA = 32769 +const MOD_CLKB = 16384 +const MOD_ESTERROR = 8 +const MOD_FREQUENCY = 2 +const MOD_MAXERROR = 4 +const MOD_MICRO = 4096 +const MOD_NANO = 8192 +const MOD_OFFSET = 1 +const MOD_STATUS = 16 +const MOD_TAI = 128 +const MOD_TIMECONST = 32 +const STA_CLK = 32768 +const STA_CLOCKERR = 4096 +const STA_DEL = 32 +const STA_FLL = 8 +const STA_FREQHOLD = 128 +const STA_INS = 16 +const STA_MODE = 16384 +const STA_NANO = 8192 +const STA_PLL = 1 +const STA_PPSERROR = 2048 +const STA_PPSFREQ = 2 +const STA_PPSJITTER = 512 +const STA_PPSSIGNAL = 256 +const STA_PPSTIME = 4 +const STA_PPSWANDER = 1024 +const STA_RONLY = 65280 +const STA_UNSYNC = 64 +const TIME_BAD = 5 +const TIME_DEL = 2 +const TIME_ERROR = 5 +const TIME_INS = 1 +const TIME_OK = 0 +const TIME_OOP = 3 +const TIME_WAIT = 4 + +type Tntptimeval = struct { + Ftime Ttimeval + Fmaxerror int64 + Festerror int64 +} + +type Ttimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime Ttimeval + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xadjtime(tls *TLS, in uintptr, out uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v in=%v out=%v, (%v:)", tls, in, out, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var v1 Tsuseconds_t + var _ /* tx at bp+0 */ Ttimex + _ = v1 + *(*Ttimex)(unsafe.Pointer(bp)) = Ttimex{} + if in != 0 { + if (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec > int64(1000) || (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec > int64(1000000000) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + (*(*Ttimex)(unsafe.Pointer(bp))).Foffset = (*Ttimeval)(unsafe.Pointer(in)).Ftv_sec*int64(1000000) + (*Ttimeval)(unsafe.Pointer(in)).Ftv_usec + (*(*Ttimex)(unsafe.Pointer(bp))).Fmodes = uint32(ADJ_OFFSET_SINGLESHOT) + } + if Xadjtimex(tls, bp) < 0 { + return -int32(1) + } + if out != 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset / int64(1000000) + v1 = (*(*Ttimex)(unsafe.Pointer(bp))).Foffset % Int64FromInt32(1000000) + (*Ttimeval)(unsafe.Pointer(out)).Ftv_usec = v1 + if v1 < 0 { + (*Ttimeval)(unsafe.Pointer(out)).Ftv_sec-- + *(*Tsuseconds_t)(unsafe.Pointer(out + 8)) += int64(1000000) + } + } + return 0 +} + +func Xadjtimex(tls *TLS, tx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tx=%v, (%v:)", tls, tx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclock_adjtime(tls, CLOCK_REALTIME, tx) +} + +func Xbrk(tls *TLS, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v end=%v, (%v:)", tls, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) +} + +func Xcapset(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capset), int64(a), int64(b))))) +} + +func Xcapget(tls *TLS, a uintptr, b uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_capget), int64(a), int64(b))))) +} + +func Xchroot(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chroot), int64(path))))) +} + +type Tktimex64 = struct { + Fmodes uint32 + F__ccgo4 uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + F__ccgo44 uint32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + F__ccgo116 uint32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +type Tktimex = struct { + Fmodes uint32 + Foffset int64 + Ffreq int64 + Fmaxerror int64 + Festerror int64 + Fstatus int32 + Fconstant int64 + Fprecision int64 + Ftolerance int64 + Ftime_sec int64 + Ftime_usec int64 + Ftick int64 + Fppsfreq int64 + Fjitter int64 + Fshift int32 + Fstabil int64 + Fjitcnt int64 + Fcalcnt int64 + Ferrcnt int64 + Fstbcnt int64 + Ftai int32 + F__padding [11]int32 +} + +func Xclock_adjtime(tls *TLS, clock_id Tclockid_t, utx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clock_id=%v utx=%v, (%v:)", tls, clock_id, utx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var r int32 + var _ /* ktx at bp+0 */ Tktimex + _ = r + r = -int32(ENOSYS) + if uint64(8) > uint64(8) { + *(*Tktimex)(unsafe.Pointer(bp)) = Tktimex{ + Fmodes: (*Ttimex)(unsafe.Pointer(utx)).Fmodes, + Foffset: (*Ttimex)(unsafe.Pointer(utx)).Foffset, + Ffreq: (*Ttimex)(unsafe.Pointer(utx)).Ffreq, + Fmaxerror: (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror, + Festerror: (*Ttimex)(unsafe.Pointer(utx)).Festerror, + Fstatus: (*Ttimex)(unsafe.Pointer(utx)).Fstatus, + Fconstant: (*Ttimex)(unsafe.Pointer(utx)).Fconstant, + Fprecision: (*Ttimex)(unsafe.Pointer(utx)).Fprecision, + Ftolerance: (*Ttimex)(unsafe.Pointer(utx)).Ftolerance, + Ftime_sec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec, + Ftime_usec: (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec, + Ftick: (*Ttimex)(unsafe.Pointer(utx)).Ftick, + Fppsfreq: (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq, + Fjitter: (*Ttimex)(unsafe.Pointer(utx)).Fjitter, + Fshift: (*Ttimex)(unsafe.Pointer(utx)).Fshift, + Fstabil: (*Ttimex)(unsafe.Pointer(utx)).Fstabil, + Fjitcnt: (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt, + Fcalcnt: (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt, + Ferrcnt: (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt, + Fstbcnt: (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt, + Ftai: (*Ttimex)(unsafe.Pointer(utx)).Ftai, + } + if clock_id == CLOCK_REALTIME { + r = int32(X__syscall1(tls, int64(SYS_adjtimex), int64(bp))) + } else { + r = int32(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(bp))) + } + if r >= 0 { + (*Ttimex)(unsafe.Pointer(utx)).Fmodes = (*(*Tktimex)(unsafe.Pointer(bp))).Fmodes + (*Ttimex)(unsafe.Pointer(utx)).Foffset = (*(*Tktimex)(unsafe.Pointer(bp))).Foffset + (*Ttimex)(unsafe.Pointer(utx)).Ffreq = (*(*Tktimex)(unsafe.Pointer(bp))).Ffreq + (*Ttimex)(unsafe.Pointer(utx)).Fmaxerror = (*(*Tktimex)(unsafe.Pointer(bp))).Fmaxerror + (*Ttimex)(unsafe.Pointer(utx)).Festerror = (*(*Tktimex)(unsafe.Pointer(bp))).Festerror + (*Ttimex)(unsafe.Pointer(utx)).Fstatus = (*(*Tktimex)(unsafe.Pointer(bp))).Fstatus + (*Ttimex)(unsafe.Pointer(utx)).Fconstant = (*(*Tktimex)(unsafe.Pointer(bp))).Fconstant + (*Ttimex)(unsafe.Pointer(utx)).Fprecision = (*(*Tktimex)(unsafe.Pointer(bp))).Fprecision + (*Ttimex)(unsafe.Pointer(utx)).Ftolerance = (*(*Tktimex)(unsafe.Pointer(bp))).Ftolerance + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_sec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_sec + (*Ttimex)(unsafe.Pointer(utx)).Ftime.Ftv_usec = (*(*Tktimex)(unsafe.Pointer(bp))).Ftime_usec + (*Ttimex)(unsafe.Pointer(utx)).Ftick = (*(*Tktimex)(unsafe.Pointer(bp))).Ftick + (*Ttimex)(unsafe.Pointer(utx)).Fppsfreq = (*(*Tktimex)(unsafe.Pointer(bp))).Fppsfreq + (*Ttimex)(unsafe.Pointer(utx)).Fjitter = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitter + (*Ttimex)(unsafe.Pointer(utx)).Fshift = (*(*Tktimex)(unsafe.Pointer(bp))).Fshift + (*Ttimex)(unsafe.Pointer(utx)).Fstabil = (*(*Tktimex)(unsafe.Pointer(bp))).Fstabil + (*Ttimex)(unsafe.Pointer(utx)).Fjitcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fjitcnt + (*Ttimex)(unsafe.Pointer(utx)).Fcalcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fcalcnt + (*Ttimex)(unsafe.Pointer(utx)).Ferrcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Ferrcnt + (*Ttimex)(unsafe.Pointer(utx)).Fstbcnt = (*(*Tktimex)(unsafe.Pointer(bp))).Fstbcnt + (*Ttimex)(unsafe.Pointer(utx)).Ftai = (*(*Tktimex)(unsafe.Pointer(bp))).Ftai + } + return int32(X__syscall_ret(tls, uint64(r))) + } + if clock_id == CLOCK_REALTIME { + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_adjtimex), int64(utx))))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_adjtime), int64(clock_id), int64(utx))))) +} + +func Xcopy_file_range(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_copy_file_range), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +const EPOLLERR = 8 +const EPOLLET = 2147483648 +const EPOLLEXCLUSIVE = 268435456 +const EPOLLHUP = 16 +const EPOLLIN = 1 +const EPOLLMSG = 1024 +const EPOLLNVAL = 32 +const EPOLLONESHOT = 1073741824 +const EPOLLOUT = 4 +const EPOLLPRI = 2 +const EPOLLRDBAND = 128 +const EPOLLRDHUP = 8192 +const EPOLLRDNORM = 64 +const EPOLLWAKEUP = 536870912 +const EPOLLWRBAND = 512 +const EPOLLWRNORM = 256 +const EPOLL_CLOEXEC = 524288 +const EPOLL_CTL_ADD = 1 +const EPOLL_CTL_DEL = 2 +const EPOLL_CTL_MOD = 3 +const EPOLL_NONBLOCK = 2048 + +type Tfsblkcnt_t = uint64 + +type Tfsfilcnt_t = uint64 + +type _EPOLL_EVENTS = int32 + +const ___EPOLL_DUMMY = 0 + +type Tepoll_data_t = struct { + Ffd [0]int32 + Fu32 [0]Tuint32_t + Fu64 [0]Tuint64_t + Fptr uintptr +} + +type Tepoll_data = Tepoll_data_t + +type Tepoll_event = struct { + Fevents Tuint32_t + Fdata Tepoll_data_t +} + +func Xepoll_create(tls *TLS, size int32) (r int32) { + if __ccgo_strace { + trc("tls=%v size=%v, (%v:)", tls, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + if size <= 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return Xepoll_create1(tls, 0) +} + +func Xepoll_create1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_epoll_create1), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int64(SYS_epoll_create), int64(Int32FromInt32(1)))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_ctl(tls *TLS, fd int32, op int32, fd2 int32, ev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v fd2=%v ev=%v, (%v:)", tls, fd, op, fd2, ev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_epoll_ctl), int64(fd), int64(op), int64(fd2), int64(ev))))) +} + +func Xepoll_pwait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32, sigs uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v sigs=%v, (%v:)", tls, fd, ev, cnt, to, sigs, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(___syscall_cp(tls, int64(SYS_epoll_pwait), int64(fd), int64(ev), int64(cnt), int64(to), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if r == -int32(ENOSYS) && !(sigs != 0) { + r = int32(___syscall_cp(tls, int64(SYS_epoll_wait), int64(fd), int64(ev), int64(cnt), int64(to), 0, 0)) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xepoll_wait(tls *TLS, fd int32, ev uintptr, cnt int32, to int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v ev=%v cnt=%v to=%v, (%v:)", tls, fd, ev, cnt, to, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xepoll_pwait(tls, fd, ev, cnt, to, uintptr(0)) +} + +const EFD_CLOEXEC = 524288 +const EFD_NONBLOCK = 2048 +const EFD_SEMAPHORE = 1 + +type Teventfd_t = uint64 + +func Xeventfd(tls *TLS, count uint32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v count=%v flags=%v, (%v:)", tls, count, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_eventfd2), int64(count), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall1(tls, int64(SYS_eventfd), int64(count))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xeventfd_read(tls *TLS, fd int32, value uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v value=%v, (%v:)", tls, fd, value, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xread(tls, fd, value, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xeventfd_write(tls *TLS, fd int32, _value Teventfd_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v _value=%v, (%v:)", tls, fd, _value, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Teventfd_t)(unsafe.Pointer(bp)) = _value + var v1 int32 + _ = v1 + if uint64(8) == uint64(Xwrite(tls, fd, bp, uint64(8))) { + v1 = 0 + } else { + v1 = -int32(1) + } + return v1 +} + +func Xfallocate(tls *TLS, fd int32, mode int32, base Toff_t, len1 Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v base=%v len1=%v, (%v:)", tls, fd, mode, base, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fallocate), int64(fd), int64(mode), base, len1)))) +} + +const FANOTIFY_METADATA_VERSION = 3 +const FAN_ACCESS = 1 +const FAN_ACCESS_PERM = 131072 +const FAN_ALLOW = 1 +const FAN_ALL_CLASS_BITS = 12 +const FAN_ALL_EVENTS = 59 +const FAN_ALL_INIT_FLAGS = 63 +const FAN_ALL_MARK_FLAGS = 255 +const FAN_ALL_OUTGOING_EVENTS = 213051 +const FAN_ALL_PERM_EVENTS = 196608 +const FAN_ATTRIB = 4 +const FAN_AUDIT = 16 +const FAN_CLASS_CONTENT = 4 +const FAN_CLASS_NOTIF = 0 +const FAN_CLASS_PRE_CONTENT = 8 +const FAN_CLOEXEC = 1 +const FAN_CLOSE = 24 +const FAN_CLOSE_NOWRITE = 16 +const FAN_CLOSE_WRITE = 8 +const FAN_CREATE = 256 +const FAN_DELETE = 512 +const FAN_DELETE_SELF = 1024 +const FAN_DENY = 2 +const FAN_DIR_MODIFY = 524288 +const FAN_ENABLE_AUDIT = 64 +const FAN_EVENT_INFO_TYPE_DFID = 3 +const FAN_EVENT_INFO_TYPE_DFID_NAME = 2 +const FAN_EVENT_INFO_TYPE_FID = 1 +const FAN_EVENT_METADATA_LEN = 0 +const FAN_EVENT_ON_CHILD = 134217728 +const FAN_MARK_ADD = 1 +const FAN_MARK_DONT_FOLLOW = 4 +const FAN_MARK_FILESYSTEM = 256 +const FAN_MARK_FLUSH = 128 +const FAN_MARK_IGNORED_MASK = 32 +const FAN_MARK_IGNORED_SURV_MODIFY = 64 +const FAN_MARK_INODE = 0 +const FAN_MARK_MOUNT = 16 +const FAN_MARK_ONLYDIR = 8 +const FAN_MARK_REMOVE = 2 +const FAN_MARK_TYPE_MASK = 272 +const FAN_MODIFY = 2 +const FAN_MOVE = 192 +const FAN_MOVED_FROM = 64 +const FAN_MOVED_TO = 128 +const FAN_MOVE_SELF = 2048 +const FAN_NOFD = -1 +const FAN_NONBLOCK = 2 +const FAN_ONDIR = 1073741824 +const FAN_OPEN = 32 +const FAN_OPEN_EXEC = 4096 +const FAN_OPEN_EXEC_PERM = 262144 +const FAN_OPEN_PERM = 65536 +const FAN_Q_OVERFLOW = 16384 +const FAN_REPORT_DFID_NAME = 3072 +const FAN_REPORT_DIR_FID = 1024 +const FAN_REPORT_FID = 512 +const FAN_REPORT_NAME = 2048 +const FAN_REPORT_TID = 256 +const FAN_UNLIMITED_MARKS = 32 +const FAN_UNLIMITED_QUEUE = 16 +const ST_APPEND = 256 +const ST_IMMUTABLE = 512 +const ST_MANDLOCK = 64 +const ST_NOATIME = 1024 +const ST_NODEV = 4 +const ST_NODIRATIME = 2048 +const ST_NOEXEC = 8 +const ST_NOSUID = 2 +const ST_RDONLY = 1 +const ST_RELATIME = 4096 +const ST_SYNCHRONOUS = 16 +const ST_WRITE = 128 + +type Tstatvfs = struct { + Ff_bsize uint64 + Ff_frsize uint64 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_favail Tfsfilcnt_t + Ff_fsid uint64 + Ff_flag uint64 + Ff_namemax uint64 + Ff_type uint32 + F__reserved [5]int32 +} + +type Tfsid_t = struct { + F__val [2]int32 +} + +type t__fsid_t = Tfsid_t + +type Tstatfs = struct { + Ff_type uint32 + Ff_bsize uint32 + Ff_blocks Tfsblkcnt_t + Ff_bfree Tfsblkcnt_t + Ff_bavail Tfsblkcnt_t + Ff_files Tfsfilcnt_t + Ff_ffree Tfsfilcnt_t + Ff_fsid Tfsid_t + Ff_namelen uint32 + Ff_frsize uint32 + Ff_flags uint32 + Ff_spare [4]uint32 +} + +type Tfanotify_event_metadata = struct { + Fevent_len uint32 + Fvers uint8 + Freserved uint8 + Fmetadata_len uint16 + Fmask uint64 + Ffd int32 + Fpid int32 +} + +type Tfanotify_event_info_header = struct { + Finfo_type uint8 + Fpad uint8 + Flen1 uint16 +} + +type Tfanotify_event_info_fid = struct { + Fhdr Tfanotify_event_info_header + Ffsid Tfsid_t +} + +type Tfanotify_response = struct { + Ffd int32 + Fresponse uint32 +} + +func Xfanotify_init(tls *TLS, flags uint32, event_f_flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v event_f_flags=%v, (%v:)", tls, flags, event_f_flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fanotify_init), int64(flags), int64(event_f_flags))))) +} + +func Xfanotify_mark(tls *TLS, fanotify_fd int32, flags uint32, mask uint64, dfd int32, pathname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fanotify_fd=%v flags=%v mask=%v dfd=%v pathname=%v, (%v:)", tls, fanotify_fd, flags, mask, dfd, pathname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fanotify_mark), int64(fanotify_fd), int64(flags), int64(mask), int64(dfd), int64(pathname))))) +} + +const LOCK_EX = 2 +const LOCK_NB = 4 +const LOCK_SH = 1 +const LOCK_UN = 8 + +func Xflock(tls *TLS, fd int32, op int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v, (%v:)", tls, fd, op, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_flock), int64(fd), int64(op))))) +} + +func Xgetdents(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + if len1 > uint64(INT_MAX) { + len1 = uint64(INT_MAX) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getdents64), int64(fd), int64(buf), int64(len1))))) +} + +const GRND_INSECURE = 4 +const GRND_NONBLOCK = 1 +const GRND_RANDOM = 2 + +func Xgetrandom(tls *TLS, buf uintptr, buflen Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v buf=%v buflen=%v flags=%v, (%v:)", tls, buf, buflen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_getrandom), int64(buf), int64(buflen), int64(flags), 0, 0, 0))) +} + +const IN_ACCESS = 1 +const IN_ALL_EVENTS = 4095 +const IN_ATTRIB = 4 +const IN_CLOEXEC = 524288 +const IN_CLOSE = 24 +const IN_CLOSE_NOWRITE = 16 +const IN_CLOSE_WRITE = 8 +const IN_CREATE = 256 +const IN_DELETE = 512 +const IN_DELETE_SELF = 1024 +const IN_DONT_FOLLOW = 33554432 +const IN_EXCL_UNLINK = 67108864 +const IN_IGNORED = 32768 +const IN_ISDIR = 1073741824 +const IN_MASK_ADD = 536870912 +const IN_MASK_CREATE = 268435456 +const IN_MODIFY = 2 +const IN_MOVE = 192 +const IN_MOVED_FROM = 64 +const IN_MOVED_TO = 128 +const IN_MOVE_SELF = 2048 +const IN_NONBLOCK = 2048 +const IN_ONESHOT = 2147483648 +const IN_ONLYDIR = 16777216 +const IN_OPEN = 32 +const IN_Q_OVERFLOW = 16384 +const IN_UNMOUNT = 8192 + +type Tinotify_event = struct { + Fwd int32 + Fmask Tuint32_t + Fcookie Tuint32_t + Flen1 Tuint32_t +} + +func Xinotify_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xinotify_init1(tls, 0) +} + +func Xinotify_init1(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_inotify_init1), int64(flags))) + if r == -int32(ENOSYS) && !(flags != 0) { + r = int32(X__syscall0(tls, int64(SYS_inotify_init))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xinotify_add_watch(tls *TLS, fd int32, pathname uintptr, mask Tuint32_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pathname=%v mask=%v, (%v:)", tls, fd, pathname, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_inotify_add_watch), int64(fd), int64(pathname), int64(mask))))) +} + +func Xinotify_rm_watch(tls *TLS, fd int32, wd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wd=%v, (%v:)", tls, fd, wd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_inotify_rm_watch), int64(fd), int64(wd))))) +} + +func Xklogctl(tls *TLS, type1 int32, buf uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v buf=%v len1=%v, (%v:)", tls, type1, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_syslog), int64(type1), int64(buf), int64(len1))))) +} + +const MADV_COLD = 20 +const MADV_DODUMP = 17 +const MADV_DOFORK = 11 +const MADV_DONTDUMP = 16 +const MADV_DONTFORK = 10 +const MADV_DONTNEED = 4 +const MADV_FREE = 8 +const MADV_HUGEPAGE = 14 +const MADV_HWPOISON = 100 +const MADV_KEEPONFORK = 19 +const MADV_MERGEABLE = 12 +const MADV_NOHUGEPAGE = 15 +const MADV_NORMAL = 0 +const MADV_PAGEOUT = 21 +const MADV_RANDOM = 1 +const MADV_REMOVE = 9 +const MADV_SEQUENTIAL = 2 +const MADV_SOFT_OFFLINE = 101 +const MADV_UNMERGEABLE = 13 +const MADV_WILLNEED = 3 +const MADV_WIPEONFORK = 18 +const MFD_ALLOW_SEALING = 2 +const MFD_CLOEXEC = 1 +const MFD_HUGETLB = 4 +const MLOCK_ONFAULT = 1 +const MREMAP_DONTUNMAP = 4 +const MREMAP_FIXED = 2 +const MREMAP_MAYMOVE = 1 +const _GNU_SOURCE = 1 + +func Xmemfd_create(tls *TLS, name uintptr, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flags=%v, (%v:)", tls, name, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_memfd_create), int64(name), int64(flags))))) +} + +func Xmlock2(tls *TLS, addr uintptr, len1 Tsize_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v flags=%v, (%v:)", tls, addr, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if flags == uint32(0) { + return Xmlock(tls, addr, len1) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mlock2), int64(addr), int64(len1), int64(flags))))) +} + +func Xinit_module(tls *TLS, a uintptr, b uint64, c uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v, (%v:)", tls, a, b, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_init_module), int64(a), int64(b), int64(c))))) +} + +func Xdelete_module(tls *TLS, a uintptr, b uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v, (%v:)", tls, a, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_delete_module), int64(a), int64(b))))) +} + +const BLKBSZGET = 2147488368 +const BLKBSZSET = 1073746545 +const BLKFLSBUF = 4705 +const BLKFRAGET = 4709 +const BLKFRASET = 4708 +const BLKGETSIZE = 4704 +const BLKGETSIZE64 = 2147488370 +const BLKRAGET = 4707 +const BLKRASET = 4706 +const BLKROGET = 4702 +const BLKROSET = 4701 +const BLKRRPART = 4703 +const BLKSECTGET = 4711 +const BLKSECTSET = 4710 +const BLKSSZGET = 4712 +const FIOASYNC = 21586 +const FIOCLEX = 21585 +const FIOGETOWN = 35075 +const FIONBIO = 21537 +const FIONCLEX = 21584 +const FIONREAD = 21531 +const FIOSETOWN = 35073 +const MNT_DETACH = 2 +const MNT_EXPIRE = 4 +const MNT_FORCE = 1 +const MS_ACTIVE = 1073741824 +const MS_BIND = 4096 +const MS_BORN = 536870912 +const MS_DIRSYNC = 128 +const MS_I_VERSION = 8388608 +const MS_KERNMOUNT = 4194304 +const MS_LAZYTIME = 33554432 +const MS_MANDLOCK = 64 +const MS_MGC_MSK = 4294901760 +const MS_MGC_VAL = 3236757504 +const MS_MOVE = 8192 +const MS_NOATIME = 1024 +const MS_NODEV = 4 +const MS_NODIRATIME = 2048 +const MS_NOEXEC = 8 +const MS_NOREMOTELOCK = 134217728 +const MS_NOSEC = 268435456 +const MS_NOSUID = 2 +const MS_NOSYMFOLLOW = 256 +const MS_NOUSER = 2147483648 +const MS_POSIXACL = 65536 +const MS_PRIVATE = 262144 +const MS_RDONLY = 1 +const MS_REC = 16384 +const MS_RELATIME = 2097152 +const MS_REMOUNT = 32 +const MS_RMT_MASK = 41943121 +const MS_SHARED = 1048576 +const MS_SILENT = 32768 +const MS_SLAVE = 524288 +const MS_STRICTATIME = 16777216 +const MS_SYNCHRONOUS = 16 +const MS_UNBINDABLE = 131072 +const N_6PACK = 7 +const N_AX25 = 5 +const N_CAIF = 20 +const N_GIGASET_M101 = 16 +const N_GSM0710 = 21 +const N_HCI = 15 +const N_HDLC = 13 +const N_IRDA = 11 +const N_MASC = 8 +const N_MOUSE = 2 +const N_NCI = 25 +const N_NULL = 27 +const N_PPP = 3 +const N_PPS = 18 +const N_PROFIBUS_FDL = 10 +const N_R3964 = 9 +const N_SLCAN = 17 +const N_SLIP = 1 +const N_SMSBLOCK = 12 +const N_SPEAKUP = 26 +const N_STRIP = 4 +const N_SYNC_PPP = 14 +const N_TI_WL = 22 +const N_TRACEROUTER = 24 +const N_TRACESINK = 23 +const N_TTY = 0 +const N_V253 = 19 +const N_X25 = 6 +const SIOCADDDLCI = 35200 +const SIOCADDMULTI = 35121 +const SIOCADDRT = 35083 +const SIOCATMARK = 35077 +const SIOCDARP = 35155 +const SIOCDELDLCI = 35201 +const SIOCDELMULTI = 35122 +const SIOCDELRT = 35084 +const SIOCDEVPRIVATE = 35312 +const SIOCDIFADDR = 35126 +const SIOCDRARP = 35168 +const SIOCGARP = 35156 +const SIOCGIFADDR = 35093 +const SIOCGIFBR = 35136 +const SIOCGIFBRDADDR = 35097 +const SIOCGIFCONF = 35090 +const SIOCGIFCOUNT = 35128 +const SIOCGIFDSTADDR = 35095 +const SIOCGIFENCAP = 35109 +const SIOCGIFFLAGS = 35091 +const SIOCGIFHWADDR = 35111 +const SIOCGIFINDEX = 35123 +const SIOCGIFMAP = 35184 +const SIOCGIFMEM = 35103 +const SIOCGIFMETRIC = 35101 +const SIOCGIFMTU = 35105 +const SIOCGIFNAME = 35088 +const SIOCGIFNETMASK = 35099 +const SIOCGIFPFLAGS = 35125 +const SIOCGIFSLAVE = 35113 +const SIOCGIFTXQLEN = 35138 +const SIOCGPGRP = 35076 +const SIOCGRARP = 35169 +const SIOCGSTAMP = 35078 +const SIOCGSTAMPNS = 35079 +const SIOCPROTOPRIVATE = 35296 +const SIOCRTMSG = 35085 +const SIOCSARP = 35157 +const SIOCSIFADDR = 35094 +const SIOCSIFBR = 35137 +const SIOCSIFBRDADDR = 35098 +const SIOCSIFDSTADDR = 35096 +const SIOCSIFENCAP = 35110 +const SIOCSIFFLAGS = 35092 +const SIOCSIFHWADDR = 35108 +const SIOCSIFHWBROADCAST = 35127 +const SIOCSIFLINK = 35089 +const SIOCSIFMAP = 35185 +const SIOCSIFMEM = 35104 +const SIOCSIFMETRIC = 35102 +const SIOCSIFMTU = 35106 +const SIOCSIFNAME = 35107 +const SIOCSIFNETMASK = 35100 +const SIOCSIFPFLAGS = 35124 +const SIOCSIFSLAVE = 35120 +const SIOCSIFTXQLEN = 35139 +const SIOCSPGRP = 35074 +const SIOCSRARP = 35170 +const SIOGIFINDEX = 35123 +const TCFLSH = 21515 +const TCGETA = 21509 +const TCGETS = 21505 +const TCGETX = 21554 +const TCSBRK = 21513 +const TCSBRKP = 21541 +const TCSETA = 21510 +const TCSETAF = 21512 +const TCSETAW = 21511 +const TCSETS = 21506 +const TCSETSF = 21508 +const TCSETSW = 21507 +const TCSETX = 21555 +const TCSETXF = 21556 +const TCSETXW = 21557 +const TCXONC = 21514 +const TIOCCBRK = 21544 +const TIOCCONS = 21533 +const TIOCEXCL = 21516 +const TIOCGDEV = 2147767346 +const TIOCGETD = 21540 +const TIOCGEXCL = 2147767360 +const TIOCGICOUNT = 21597 +const TIOCGISO7816 = 2150126658 +const TIOCGLCKTRMIOS = 21590 +const TIOCGPGRP = 21519 +const TIOCGPKT = 2147767352 +const TIOCGPTLCK = 2147767353 +const TIOCGPTN = 2147767344 +const TIOCGPTPEER = 21569 +const TIOCGRS485 = 21550 +const TIOCGSERIAL = 21534 +const TIOCGSID = 21545 +const TIOCGSOFTCAR = 21529 +const TIOCGWINSZ = 21523 +const TIOCINQ = 21531 +const TIOCLINUX = 21532 +const TIOCMBIC = 21527 +const TIOCMBIS = 21526 +const TIOCMGET = 21525 +const TIOCMIWAIT = 21596 +const TIOCMSET = 21528 +const TIOCM_CAR = 64 +const TIOCM_CD = 64 +const TIOCM_CTS = 32 +const TIOCM_DSR = 256 +const TIOCM_DTR = 2 +const TIOCM_LE = 1 +const TIOCM_LOOP = 32768 +const TIOCM_OUT1 = 8192 +const TIOCM_OUT2 = 16384 +const TIOCM_RI = 128 +const TIOCM_RNG = 128 +const TIOCM_RTS = 4 +const TIOCM_SR = 16 +const TIOCM_ST = 8 +const TIOCNOTTY = 21538 +const TIOCNXCL = 21517 +const TIOCOUTQ = 21521 +const TIOCPKT = 21536 +const TIOCPKT_DATA = 0 +const TIOCPKT_DOSTOP = 32 +const TIOCPKT_FLUSHREAD = 1 +const TIOCPKT_FLUSHWRITE = 2 +const TIOCPKT_IOCTL = 64 +const TIOCPKT_NOSTOP = 16 +const TIOCPKT_START = 8 +const TIOCPKT_STOP = 4 +const TIOCSBRK = 21543 +const TIOCSCTTY = 21518 +const TIOCSERCONFIG = 21587 +const TIOCSERGETLSR = 21593 +const TIOCSERGETMULTI = 21594 +const TIOCSERGSTRUCT = 21592 +const TIOCSERGWILD = 21588 +const TIOCSERSETMULTI = 21595 +const TIOCSERSWILD = 21589 +const TIOCSER_TEMT = 1 +const TIOCSETD = 21539 +const TIOCSIG = 1074025526 +const TIOCSISO7816 = 3223868483 +const TIOCSLCKTRMIOS = 21591 +const TIOCSPGRP = 21520 +const TIOCSPTLCK = 1074025521 +const TIOCSRS485 = 21551 +const TIOCSSERIAL = 21535 +const TIOCSSOFTCAR = 21530 +const TIOCSTI = 21522 +const TIOCSWINSZ = 21524 +const TIOCVHANGUP = 21559 +const UMOUNT_NOFOLLOW = 8 +const _IOC_NONE = 0 +const _IOC_READ = 2 +const _IOC_WRITE = 1 + +func Xmount(tls *TLS, special uintptr, dir uintptr, fstype uintptr, flags uint64, data uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v dir=%v fstype=%v flags=%v data=%v, (%v:)", tls, special, dir, fstype, flags, data, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mount), int64(special), int64(dir), int64(fstype), int64(flags), int64(data))))) +} + +func Xumount(tls *TLS, special uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v, (%v:)", tls, special, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(Int32FromInt32(0)))))) +} + +func Xumount2(tls *TLS, special uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v special=%v flags=%v, (%v:)", tls, special, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_umount2), int64(special), int64(flags))))) +} + +func Xname_to_handle_at(tls *TLS, dirfd int32, pathname uintptr, handle uintptr, mount_id uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v handle=%v mount_id=%v flags=%v, (%v:)", tls, dirfd, pathname, handle, mount_id, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_name_to_handle_at), int64(dirfd), int64(pathname), int64(handle), int64(mount_id), int64(flags))))) +} + +func Xopen_by_handle_at(tls *TLS, mount_fd int32, handle uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v mount_fd=%v handle=%v flags=%v, (%v:)", tls, mount_fd, handle, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open_by_handle_at), int64(mount_fd), int64(handle), int64(flags))))) +} + +const ADDR_COMPAT_LAYOUT = 2097152 +const ADDR_LIMIT_32BIT = 8388608 +const ADDR_LIMIT_3GB = 134217728 +const ADDR_NO_RANDOMIZE = 262144 +const FDPIC_FUNCPTRS = 524288 +const MMAP_PAGE_ZERO = 1048576 +const PER_BSD = 6 +const PER_HPUX = 16 +const PER_IRIX32 = 67108873 +const PER_IRIX64 = 67108875 +const PER_IRIXN32 = 67108874 +const PER_ISCR4 = 67108869 +const PER_LINUX = 0 +const PER_LINUX32 = 8 +const PER_LINUX32_3GB = 134217736 +const PER_LINUX_32BIT = 8388608 +const PER_LINUX_FDPIC = 524288 +const PER_MASK = 255 +const PER_OSF4 = 15 +const PER_OSR5 = 100663299 +const PER_RISCOS = 12 +const PER_SCOSVR3 = 117440515 +const PER_SOLARIS = 67108877 +const PER_SUNOS = 67108870 +const PER_SVR3 = 83886082 +const PER_SVR4 = 68157441 +const PER_UW7 = 68157454 +const PER_WYSEV386 = 83886084 +const PER_XENIX = 83886087 +const READ_IMPLIES_EXEC = 4194304 +const SHORT_INODE = 16777216 +const STICKY_TIMEOUTS = 67108864 +const UNAME26 = 131072 +const WHOLE_SECONDS = 33554432 + +func Xpersonality(tls *TLS, persona uint64) (r int32) { + if __ccgo_strace { + trc("tls=%v persona=%v, (%v:)", tls, persona, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_personality), int64(persona))))) +} + +func Xpivot_root(tls *TLS, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v new1=%v old=%v, (%v:)", tls, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_pivot_root), int64(new1), int64(old))))) +} + +const PR_CAPBSET_DROP = 24 +const PR_CAPBSET_READ = 23 +const PR_CAP_AMBIENT = 47 +const PR_CAP_AMBIENT_CLEAR_ALL = 4 +const PR_CAP_AMBIENT_IS_SET = 1 +const PR_CAP_AMBIENT_LOWER = 3 +const PR_CAP_AMBIENT_RAISE = 2 +const PR_ENDIAN_BIG = 0 +const PR_ENDIAN_LITTLE = 1 +const PR_ENDIAN_PPC_LITTLE = 2 +const PR_FPEMU_NOPRINT = 1 +const PR_FPEMU_SIGFPE = 2 +const PR_FP_EXC_ASYNC = 2 +const PR_FP_EXC_DISABLED = 0 +const PR_FP_EXC_DIV = 65536 +const PR_FP_EXC_INV = 1048576 +const PR_FP_EXC_NONRECOV = 1 +const PR_FP_EXC_OVF = 131072 +const PR_FP_EXC_PRECISE = 3 +const PR_FP_EXC_RES = 524288 +const PR_FP_EXC_SW_ENABLE = 128 +const PR_FP_EXC_UND = 262144 +const PR_FP_MODE_FR = 1 +const PR_FP_MODE_FRE = 2 +const PR_GET_CHILD_SUBREAPER = 37 +const PR_GET_DUMPABLE = 3 +const PR_GET_ENDIAN = 19 +const PR_GET_FPEMU = 9 +const PR_GET_FPEXC = 11 +const PR_GET_FP_MODE = 46 +const PR_GET_IO_FLUSHER = 58 +const PR_GET_KEEPCAPS = 7 +const PR_GET_NAME = 16 +const PR_GET_NO_NEW_PRIVS = 39 +const PR_GET_PDEATHSIG = 2 +const PR_GET_SECCOMP = 21 +const PR_GET_SECUREBITS = 27 +const PR_GET_SPECULATION_CTRL = 52 +const PR_GET_TAGGED_ADDR_CTRL = 56 +const PR_GET_THP_DISABLE = 42 +const PR_GET_TID_ADDRESS = 40 +const PR_GET_TIMERSLACK = 30 +const PR_GET_TIMING = 13 +const PR_GET_TSC = 25 +const PR_GET_UNALIGN = 5 +const PR_MCE_KILL = 33 +const PR_MCE_KILL_CLEAR = 0 +const PR_MCE_KILL_DEFAULT = 2 +const PR_MCE_KILL_EARLY = 1 +const PR_MCE_KILL_GET = 34 +const PR_MCE_KILL_LATE = 0 +const PR_MCE_KILL_SET = 1 +const PR_MPX_DISABLE_MANAGEMENT = 44 +const PR_MPX_ENABLE_MANAGEMENT = 43 +const PR_MTE_TAG_MASK = 524280 +const PR_MTE_TAG_SHIFT = 3 +const PR_MTE_TCF_ASYNC = 4 +const PR_MTE_TCF_MASK = 6 +const PR_MTE_TCF_NONE = 0 +const PR_MTE_TCF_SHIFT = 1 +const PR_MTE_TCF_SYNC = 2 +const PR_PAC_APDAKEY = 4 +const PR_PAC_APDBKEY = 8 +const PR_PAC_APGAKEY = 16 +const PR_PAC_APIAKEY = 1 +const PR_PAC_APIBKEY = 2 +const PR_PAC_GET_ENABLED_KEYS = 61 +const PR_PAC_RESET_KEYS = 54 +const PR_PAC_SET_ENABLED_KEYS = 60 +const PR_SET_CHILD_SUBREAPER = 36 +const PR_SET_DUMPABLE = 4 +const PR_SET_ENDIAN = 20 +const PR_SET_FPEMU = 10 +const PR_SET_FPEXC = 12 +const PR_SET_FP_MODE = 45 +const PR_SET_IO_FLUSHER = 57 +const PR_SET_KEEPCAPS = 8 +const PR_SET_MM = 35 +const PR_SET_MM_ARG_END = 9 +const PR_SET_MM_ARG_START = 8 +const PR_SET_MM_AUXV = 12 +const PR_SET_MM_BRK = 7 +const PR_SET_MM_END_CODE = 2 +const PR_SET_MM_END_DATA = 4 +const PR_SET_MM_ENV_END = 11 +const PR_SET_MM_ENV_START = 10 +const PR_SET_MM_EXE_FILE = 13 +const PR_SET_MM_MAP = 14 +const PR_SET_MM_MAP_SIZE = 15 +const PR_SET_MM_START_BRK = 6 +const PR_SET_MM_START_CODE = 1 +const PR_SET_MM_START_DATA = 3 +const PR_SET_MM_START_STACK = 5 +const PR_SET_NAME = 15 +const PR_SET_NO_NEW_PRIVS = 38 +const PR_SET_PDEATHSIG = 1 +const PR_SET_PTRACER = 1499557217 +const PR_SET_PTRACER_ANY = 18446744073709551615 +const PR_SET_SECCOMP = 22 +const PR_SET_SECUREBITS = 28 +const PR_SET_SPECULATION_CTRL = 53 +const PR_SET_SYSCALL_USER_DISPATCH = 59 +const PR_SET_TAGGED_ADDR_CTRL = 55 +const PR_SET_THP_DISABLE = 41 +const PR_SET_TIMERSLACK = 29 +const PR_SET_TIMING = 14 +const PR_SET_TSC = 26 +const PR_SET_UNALIGN = 6 +const PR_SPEC_DISABLE = 4 +const PR_SPEC_DISABLE_NOEXEC = 16 +const PR_SPEC_ENABLE = 2 +const PR_SPEC_FORCE_DISABLE = 8 +const PR_SPEC_INDIRECT_BRANCH = 1 +const PR_SPEC_NOT_AFFECTED = 0 +const PR_SPEC_PRCTL = 1 +const PR_SPEC_STORE_BYPASS = 0 +const PR_SVE_GET_VL = 51 +const PR_SVE_SET_VL = 50 +const PR_SVE_SET_VL_ONEXEC = 262144 +const PR_SVE_VL_INHERIT = 131072 +const PR_SVE_VL_LEN_MASK = 65535 +const PR_SYS_DISPATCH_OFF = 0 +const PR_SYS_DISPATCH_ON = 1 +const PR_TAGGED_ADDR_ENABLE = 1 +const PR_TASK_PERF_EVENTS_DISABLE = 31 +const PR_TASK_PERF_EVENTS_ENABLE = 32 +const PR_TIMING_STATISTICAL = 0 +const PR_TIMING_TIMESTAMP = 1 +const PR_TSC_ENABLE = 1 +const PR_TSC_SIGSEGV = 2 +const PR_UNALIGN_NOPRINT = 1 +const PR_UNALIGN_SIGBUS = 2 +const SYSCALL_DISPATCH_FILTER_ALLOW = 0 +const SYSCALL_DISPATCH_FILTER_BLOCK = 1 + +type Tprctl_mm_map = struct { + Fstart_code Tuint64_t + Fend_code Tuint64_t + Fstart_data Tuint64_t + Fend_data Tuint64_t + Fstart_brk Tuint64_t + Fbrk Tuint64_t + Fstart_stack Tuint64_t + Farg_start Tuint64_t + Farg_end Tuint64_t + Fenv_start Tuint64_t + Fenv_end Tuint64_t + Fauxv uintptr + Fauxv_size Tuint32_t + Fexe_fd Tuint32_t +} + +func Xprctl(tls *TLS, op int32, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v va=%v, (%v:)", tls, op, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var i int32 + var x [4]uint64 + _, _, _ = ap, i, x + ap = va + i = 0 + for { + if !(i < int32(4)) { + break + } + x[i] = VaUint64(&ap) + goto _1 + _1: + ; + i++ + } + _ = ap + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_prctl), int64(op), int64(x[0]), int64(x[int32(1)]), int64(x[int32(2)]), int64(x[int32(3)]))))) +} + +const RWF_APPEND = 16 +const RWF_DSYNC = 2 +const RWF_HIPRI = 1 +const RWF_NOWAIT = 8 +const RWF_SYNC = 4 +const UIO_MAXIOV = 1024 + +func Xpreadv2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xreadv(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +func Xprlimit(tls *TLS, pid Tpid_t, resource int32, new_limit uintptr, old_limit uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v resource=%v new_limit=%v old_limit=%v, (%v:)", tls, pid, resource, new_limit, old_limit, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* tmp at bp+0 */ Trlimit + _ = r + if new_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(new_limit)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + new_limit = bp + } + r = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(pid), int64(resource), int64(new_limit), int64(old_limit))))) + if !(r != 0) && old_limit != 0 && Bool(^Uint64FromUint64(0) != ^Uint64FromUint64(0)) { + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(old_limit)).Frlim_max = ^Uint64FromUint64(0) + } + } + return r +} + +func Xprocess_vm_writev(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_writev), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +func Xprocess_vm_readv(tls *TLS, pid Tpid_t, lvec uintptr, liovcnt uint64, rvec uintptr, riovcnt uint64, flags uint64) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v pid=%v lvec=%v liovcnt=%v rvec=%v riovcnt=%v flags=%v, (%v:)", tls, pid, lvec, liovcnt, rvec, riovcnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_process_vm_readv), int64(pid), int64(lvec), int64(liovcnt), int64(rvec), int64(riovcnt), int64(flags)))) +} + +const PTRACE_ATTACH = 16 +const PTRACE_CONT = 7 +const PTRACE_DETACH = 17 +const PTRACE_DISABLE_TE = 20496 +const PTRACE_ENABLE_TE = 20489 +const PTRACE_EVENT_CLONE = 3 +const PTRACE_EVENT_EXEC = 4 +const PTRACE_EVENT_EXIT = 6 +const PTRACE_EVENT_FORK = 1 +const PTRACE_EVENT_SECCOMP = 7 +const PTRACE_EVENT_STOP = 128 +const PTRACE_EVENT_VFORK = 2 +const PTRACE_EVENT_VFORK_DONE = 5 +const PTRACE_GETEVENTMSG = 16897 +const PTRACE_GETFPREGS = 14 +const PTRACE_GETFPXREGS = 18 +const PTRACE_GETREGS = 12 +const PTRACE_GETREGSET = 16900 +const PTRACE_GETSIGINFO = 16898 +const PTRACE_GETSIGMASK = 16906 +const PTRACE_GET_LAST_BREAK = 20486 +const PTRACE_GET_RSEQ_CONFIGURATION = 16911 +const PTRACE_GET_SYSCALL_INFO = 16910 +const PTRACE_INTERRUPT = 16903 +const PTRACE_KILL = 8 +const PTRACE_LISTEN = 16904 +const PTRACE_OLDSETOPTIONS = 21 +const PTRACE_O_EXITKILL = 1048576 +const PTRACE_O_MASK = 3145983 +const PTRACE_O_SUSPEND_SECCOMP = 2097152 +const PTRACE_O_TRACECLONE = 8 +const PTRACE_O_TRACEEXEC = 16 +const PTRACE_O_TRACEEXIT = 64 +const PTRACE_O_TRACEFORK = 2 +const PTRACE_O_TRACESECCOMP = 128 +const PTRACE_O_TRACESYSGOOD = 1 +const PTRACE_O_TRACEVFORK = 4 +const PTRACE_O_TRACEVFORKDONE = 32 +const PTRACE_PEEKDATA = 2 +const PTRACE_PEEKSIGINFO = 16905 +const PTRACE_PEEKSIGINFO_SHARED = 1 +const PTRACE_PEEKTEXT = 1 +const PTRACE_PEEKUSER = 3 +const PTRACE_PEEKUSR_AREA = 20480 +const PTRACE_POKEDATA = 5 +const PTRACE_POKETEXT = 4 +const PTRACE_POKEUSER = 6 +const PTRACE_POKEUSR_AREA = 20481 +const PTRACE_SECCOMP_GET_FILTER = 16908 +const PTRACE_SECCOMP_GET_METADATA = 16909 +const PTRACE_SEIZE = 16902 +const PTRACE_SETFPREGS = 15 +const PTRACE_SETFPXREGS = 19 +const PTRACE_SETOPTIONS = 16896 +const PTRACE_SETREGS = 13 +const PTRACE_SETREGSET = 16901 +const PTRACE_SETSIGINFO = 16899 +const PTRACE_SETSIGMASK = 16907 +const PTRACE_SINGLEBLOCK = 12 +const PTRACE_SINGLESTEP = 9 +const PTRACE_SYSCALL = 24 +const PTRACE_SYSCALL_INFO_ENTRY = 1 +const PTRACE_SYSCALL_INFO_EXIT = 2 +const PTRACE_SYSCALL_INFO_NONE = 0 +const PTRACE_SYSCALL_INFO_SECCOMP = 3 +const PTRACE_SYSEMU = 31 +const PTRACE_SYSEMU_SINGLESTEP = 32 +const PTRACE_TE_ABORT_RAND = 20497 +const PTRACE_TRACEME = 0 +const PT_ATTACH = 16 +const PT_CONTINUE = 7 +const PT_DETACH = 17 +const PT_GETEVENTMSG = 16897 +const PT_GETFPREGS = 14 +const PT_GETFPXREGS = 18 +const PT_GETREGS = 12 +const PT_GETSIGINFO = 16898 +const PT_KILL = 8 +const PT_READ_D = 2 +const PT_READ_I = 1 +const PT_READ_U = 3 +const PT_SETFPREGS = 15 +const PT_SETFPXREGS = 19 +const PT_SETOPTIONS = 16896 +const PT_SETREGS = 13 +const PT_SETSIGINFO = 16899 +const PT_STEP = 9 +const PT_STEPBLOCK = 12 +const PT_SYSCALL = 24 +const PT_TRACE_ME = 0 +const PT_WRITE_D = 5 +const PT_WRITE_I = 4 +const PT_WRITE_U = 6 + +type t__ptrace_peeksiginfo_args = struct { + Foff Tuint64_t + Fflags Tuint32_t + Fnr Tint32_t +} + +type t__ptrace_seccomp_metadata = struct { + Ffilter_off Tuint64_t + Fflags Tuint64_t +} + +type t__ptrace_syscall_info = struct { + Fop Tuint8_t + F__pad [3]Tuint8_t + Farch Tuint32_t + Finstruction_pointer Tuint64_t + Fstack_pointer Tuint64_t + F__ccgo5_24 struct { + Fexit [0]struct { + Frval Tint64_t + Fis_error Tuint8_t + } + Fseccomp [0]struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + Fret_data Tuint32_t + } + Fentry struct { + Fnr Tuint64_t + Fargs [6]Tuint64_t + } + F__ccgo_pad3 [8]byte + } +} + +type t__ptrace_rseq_configuration = struct { + Frseq_abi_pointer Tuint64_t + Frseq_abi_size Tuint32_t + Fsignature Tuint32_t + Fflags Tuint32_t + Fpad Tuint32_t +} + +func Xptrace(tls *TLS, req int32, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v req=%v va=%v, (%v:)", tls, req, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var addr, addr2, data uintptr + var ap Tva_list + var pid Tpid_t + var ret int64 + var _ /* result at bp+0 */ int64 + _, _, _, _, _, _ = addr, addr2, ap, data, pid, ret + addr2 = uintptr(0) + ap = va + pid = VaInt32(&ap) + addr = VaUintptr(&ap) + data = VaUintptr(&ap) + /* PTRACE_{READ,WRITE}{DATA,TEXT} (16...19) are specific to SPARC. */ + _ = ap + if uint32(req)-uint32(1) < uint32(3) { + data = bp + } + ret = X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_ptrace), int64(req), int64(pid), int64(addr), int64(data), int64(addr2)))) + if ret < 0 || uint32(req)-uint32(1) >= uint32(3) { + return ret + } + return *(*int64)(unsafe.Pointer(bp)) +} + +func Xpwritev2(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v flags=%v, (%v:)", tls, fd, iov, count, ofs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(flags != 0) { + if ofs == int64(-int32(1)) { + return Xwritev(tls, fd, iov, count) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev2), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), int64(flags)))) +} + +const GRPQUOTA = 1 +const IIF_ALL = 7 +const IIF_BGRACE = 1 +const IIF_FLAGS = 4 +const IIF_IGRACE = 2 +const MAXQUOTAS = 2 +const MAX_DQ_TIME = 604800 +const MAX_IQ_TIME = 604800 +const NR_DQHASH = 43 +const NR_DQUOTS = 256 +const QFMT_OCFS2 = 3 +const QFMT_VFS_OLD = 1 +const QFMT_VFS_V0 = 2 +const QFMT_VFS_V1 = 4 +const QIF_ALL = 63 +const QIF_BLIMITS = 1 +const QIF_BTIME = 16 +const QIF_ILIMITS = 4 +const QIF_INODES = 8 +const QIF_ITIME = 32 +const QIF_LIMITS = 5 +const QIF_SPACE = 2 +const QIF_TIMES = 48 +const QIF_USAGE = 10 +const QUOTAFILENAME = "quota" +const QUOTAGROUP = "staff" +const Q_GETFMT = 8388612 +const Q_GETINFO = 8388613 +const Q_GETQUOTA = 8388615 +const Q_QUOTAOFF = 8388611 +const Q_QUOTAON = 8388610 +const Q_SETINFO = 8388614 +const Q_SETQUOTA = 8388616 +const Q_SYNC = 8388609 +const SUBCMDMASK = 255 +const SUBCMDSHIFT = 8 +const USRQUOTA = 0 +const _LINUX_QUOTA_VERSION = 2 + +type Tdqblk = struct { + Fdqb_bhardlimit Tuint64_t + Fdqb_bsoftlimit Tuint64_t + Fdqb_curspace Tuint64_t + Fdqb_ihardlimit Tuint64_t + Fdqb_isoftlimit Tuint64_t + Fdqb_curinodes Tuint64_t + Fdqb_btime Tuint64_t + Fdqb_itime Tuint64_t + Fdqb_valid Tuint32_t +} + +type Tdqinfo = struct { + Fdqi_bgrace Tuint64_t + Fdqi_igrace Tuint64_t + Fdqi_flags Tuint32_t + Fdqi_valid Tuint32_t +} + +func Xquotactl(tls *TLS, cmd int32, special uintptr, id int32, addr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v cmd=%v special=%v id=%v addr=%v, (%v:)", tls, cmd, special, id, addr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_quotactl), int64(cmd), int64(special), int64(id), int64(addr))))) +} + +func Xreadahead(tls *TLS, fd int32, pos Toff_t, len1 Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v, (%v:)", tls, fd, pos, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readahead), int64(fd), pos, int64(len1)))) +} + +const RB_AUTOBOOT = 19088743 +const RB_DISABLE_CAD = 0 +const RB_ENABLE_CAD = 2309737967 +const RB_HALT_SYSTEM = 3454992675 +const RB_KEXEC = 1163412803 +const RB_POWER_OFF = 1126301404 +const RB_SW_SUSPEND = 3489725666 + +func Xreboot(tls *TLS, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v, (%v:)", tls, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_reboot), int64(Uint32FromUint32(0xfee1dead)), int64(Int32FromInt32(672274793)), int64(type1))))) +} + +func Xremap_file_pages(tls *TLS, addr uintptr, size Tsize_t, prot int32, pgoff Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v size=%v prot=%v pgoff=%v flags=%v, (%v:)", tls, addr, size, prot, pgoff, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_remap_file_pages), int64(addr), int64(size), int64(prot), int64(pgoff), int64(flags))))) +} + +func Xsbrk(tls *TLS, inc Tintptr_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if inc != 0 { + return uintptr(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOMEM)))) + } + return uintptr(X__syscall1(tls, int64(SYS_brk), int64(Int32FromInt32(0)))) +} + +func Xsendfile(tls *TLS, out_fd int32, in_fd int32, ofs uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v out_fd=%v in_fd=%v ofs=%v count=%v, (%v:)", tls, out_fd, in_fd, ofs, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sendfile), int64(out_fd), int64(in_fd), int64(ofs), int64(count)))) +} + +func Xsetfsgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsgid), int64(gid))))) +} + +func Xsetfsuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_setfsuid), int64(uid))))) +} + +func Xsethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sethostname), int64(name), int64(len1))))) +} + +const CLONE_CHILD_CLEARTID = 2097152 +const CLONE_CHILD_SETTID = 16777216 +const CLONE_DETACHED = 4194304 +const CLONE_FILES = 1024 +const CLONE_FS = 512 +const CLONE_IO = 2147483648 +const CLONE_NEWCGROUP = 33554432 +const CLONE_NEWIPC = 134217728 +const CLONE_NEWNET = 1073741824 +const CLONE_NEWNS = 131072 +const CLONE_NEWPID = 536870912 +const CLONE_NEWTIME = 128 +const CLONE_NEWUSER = 268435456 +const CLONE_NEWUTS = 67108864 +const CLONE_PARENT = 32768 +const CLONE_PARENT_SETTID = 1048576 +const CLONE_PIDFD = 4096 +const CLONE_PTRACE = 8192 +const CLONE_SETTLS = 524288 +const CLONE_SIGHAND = 2048 +const CLONE_SYSVSEM = 262144 +const CLONE_THREAD = 65536 +const CLONE_UNTRACED = 8388608 +const CLONE_VFORK = 16384 +const CLONE_VM = 256 +const CPU_SETSIZE = 1024 +const CSIGNAL = 255 + +type Tcpu_set_t = struct { + F__bits [16]uint64 +} + +func Xsetns(tls *TLS, fd int32, nstype int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v nstype=%v, (%v:)", tls, fd, nstype, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setns), int64(fd), int64(nstype))))) +} + +const __tm_gmtoff = 0 +const __tm_zone = 0 + +type Ttm1 = struct { + Ftm_sec int32 + Ftm_min int32 + Ftm_hour int32 + Ftm_mday int32 + Ftm_mon int32 + Ftm_year int32 + Ftm_wday int32 + Ftm_yday int32 + Ftm_isdst int32 + Ftm_gmtoff int64 + Ftm_zone uintptr +} + +func Xsettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if !(tv != 0) { + return 0 + } + if uint64((*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec, + Ftv_nsec: (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec * int64(1000), + } + return Xclock_settime(tls, CLOCK_REALTIME, bp) +} + +const SFD_CLOEXEC = 524288 +const SFD_NONBLOCK = 2048 + +type Tsignalfd_siginfo = struct { + Fssi_signo Tuint32_t + Fssi_errno Tint32_t + Fssi_code Tint32_t + Fssi_pid Tuint32_t + Fssi_uid Tuint32_t + Fssi_fd Tint32_t + Fssi_tid Tuint32_t + Fssi_band Tuint32_t + Fssi_overrun Tuint32_t + Fssi_trapno Tuint32_t + Fssi_status Tint32_t + Fssi_int Tint32_t + Fssi_ptr Tuint64_t + Fssi_utime Tuint64_t + Fssi_stime Tuint64_t + Fssi_addr Tuint64_t + Fssi_addr_lsb Tuint16_t + F__pad2 Tuint16_t + Fssi_syscall Tint32_t + Fssi_call_addr Tuint64_t + Fssi_arch Tuint32_t + F__pad [28]Tuint8_t +} + +func Xsignalfd(tls *TLS, fd int32, sigs uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v sigs=%v flags=%v, (%v:)", tls, fd, sigs, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall4(tls, int64(SYS_signalfd4), int64(fd), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), int64(flags))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + ret = int32(X__syscall3(tls, int64(SYS_signalfd), int64(fd), int64(sigs), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if ret >= 0 { + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flags&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsplice(tls *TLS, fd_in int32, off_in uintptr, fd_out int32, off_out uintptr, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd_in=%v off_in=%v fd_out=%v off_out=%v len1=%v flags=%v, (%v:)", tls, fd_in, off_in, fd_out, off_out, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall6(tls, int64(SYS_splice), int64(fd_in), int64(off_in), int64(fd_out), int64(off_out), int64(len1), int64(flags)))) +} + +func Xstatx(tls *TLS, dirfd int32, path uintptr, flags int32, mask uint32, stx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v path=%v flags=%v mask=%v stx=%v, (%v:)", tls, dirfd, path, flags, mask, stx, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var ret int32 + var _ /* st at bp+0 */ Tstat + _ = ret + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(dirfd), int64(path), int64(flags), int64(mask), int64(stx))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + ret = Xfstatat(tls, dirfd, path, bp, flags) + if ret != 0 { + return ret + } + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_major = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(31)>>Int32FromInt32(1)&Uint64FromUint32(0xfffff000) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(8)&Uint64FromInt32(0x00000fff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_dev_minor = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_dev>>Int32FromInt32(12)&Uint64FromUint32(0xffffff00) | (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev&Uint64FromInt32(0x000000ff)) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mode = uint16((*(*Tstat)(unsafe.Pointer(bp))).Fst_mode) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_nlink = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_nlink) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_uid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_uid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_gid = (*(*Tstat)(unsafe.Pointer(bp))).Fst_gid + (*Tstatx)(unsafe.Pointer(stx)).Fstx_size = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blksize = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_blksize) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_blocks = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_blocks) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_atime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_atim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mtime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_mtim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_sec = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_sec + (*Tstatx)(unsafe.Pointer(stx)).Fstx_ctime.Ftv_nsec = uint32((*(*Tstat)(unsafe.Pointer(bp))).Fst_ctim.Ftv_nsec) + (*Tstatx)(unsafe.Pointer(stx)).Fstx_btime = Tstatx_timestamp{} + (*Tstatx)(unsafe.Pointer(stx)).Fstx_mask = uint32(0x7ff) + return 0 +} + +func Xstime(tls *TLS, t uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimeval + *(*Ttimeval)(unsafe.Pointer(bp)) = Ttimeval{ + Ftv_sec: *(*Ttime_t)(unsafe.Pointer(t)), + } + return Xsettimeofday(tls, bp, UintptrFromInt32(0)) +} + +const SWAP_FLAG_DISCARD = 65536 +const SWAP_FLAG_PREFER = 32768 +const SWAP_FLAG_PRIO_MASK = 32767 +const SWAP_FLAG_PRIO_SHIFT = 0 + +func Xswapon(tls *TLS, path uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v flags=%v, (%v:)", tls, path, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_swapon), int64(path), int64(flags))))) +} + +func Xswapoff(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_swapoff), int64(path))))) +} + +func Xsync_file_range(tls *TLS, fd int32, pos Toff_t, len1 Toff_t, flags uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pos=%v len1=%v flags=%v, (%v:)", tls, fd, pos, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_sync_file_range), int64(fd), pos, len1, int64(flags))))) +} + +func Xsyncfs(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_syncfs), int64(fd))))) +} + +func X__lsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_sysinfo), int64(info))))) +} + +func Xsysinfo(tls *TLS, info uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v info=%v, (%v:)", tls, info, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lsysinfo(tls, info) +} + +func Xtee(tls *TLS, src int32, dest int32, len1 Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v src=%v dest=%v len1=%v flags=%v, (%v:)", tls, src, dest, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_tee), int64(src), int64(dest), int64(len1), int64(flags)))) +} + +const TFD_CLOEXEC = 524288 +const TFD_NONBLOCK = 2048 +const TFD_TIMER_ABSTIME = 1 +const TFD_TIMER_CANCEL_ON_SET = 2 + +func Xtimerfd_create(tls *TLS, clockid int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v clockid=%v flags=%v, (%v:)", tls, clockid, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_create), int64(clockid), int64(flags))))) +} + +func Xtimerfd_settime(tls *TLS, fd int32, flags int32, new1 uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v new1=%v old=%v, (%v:)", tls, fd, flags, new1, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timerfd_settime), int64(fd), int64(flags), int64(new1), int64(old))))) +} + +func Xtimerfd_gettime(tls *TLS, fd int32, cur uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v cur=%v, (%v:)", tls, fd, cur, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timerfd_gettime), int64(fd), int64(cur))))) +} + +func Xunshare(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_unshare), int64(flags))))) +} + +func Xutimes(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, -int32(100), path, times) +} + +func Xvhangup(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_vhangup))))) +} + +func Xvmsplice(tls *TLS, fd int32, iov uintptr, cnt Tsize_t, flags uint32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v cnt=%v flags=%v, (%v:)", tls, fd, iov, cnt, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_vmsplice), int64(fd), int64(iov), int64(cnt), int64(flags)))) +} + +const NSIG = 65 +const SA_NOMASK = 1073741824 +const SA_ONESHOT = 2147483648 +const SYS_SECCOMP = 1 +const SYS_USER_DISPATCH = 2 +const __ucontext = 0 + +type Tgreg_t = uint64 + +type Tgregset_t = [27]uint64 + +type t__psw_t = struct { + Fmask uint64 + Faddr uint64 +} + +type Tfpreg_t = struct { + Ff [0]float32 + Fd float64 +} + +type Tfpregset_t = struct { + Ffpc uint32 + Ffprs [16]Tfpreg_t +} + +type Tmcontext_t1 = struct { + Fpsw t__psw_t + Fgregs [16]uint64 + Faregs [16]uint32 + Ffpregs Tfpregset_t +} + +type Tsigcontext = struct { + Foldmask [1]uint64 + Fsregs uintptr +} + +type Tucontext_t1 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t +} + +type Tucontext = Tucontext_t1 + +type Tsig_t = uintptr + +type Tsighandler_t = uintptr + +func Xwait3(tls *TLS, status uintptr, options int32, usage uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v options=%v usage=%v, (%v:)", tls, status, options, usage, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwait4(tls, -int32(1), status, options, usage) +} + +func Xwait4(tls *TLS, pid Tpid_t, status uintptr, options int32, ru uintptr) (r1 Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v ru=%v, (%v:)", tls, pid, status, options, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest, v1 uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _, _ = dest, r, v1 + if ru != 0 { + v1 = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + } else { + v1 = uintptr(0) + } + dest = v1 + r = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(dest))) + if r > 0 && ru != 0 && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +const XATTR_CREATE = 1 +const XATTR_REPLACE = 2 +const __UAPI_DEF_XATTR = 0 + +func Xgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_getxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xlgetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v, (%v:)", tls, path, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_lgetxattr), int64(path), int64(name), int64(value), int64(size)))) +} + +func Xfgetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v, (%v:)", tls, filedes, name, value, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_fgetxattr), int64(filedes), int64(name), int64(value), int64(size)))) +} + +func Xlistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_listxattr), int64(path), int64(list), int64(size)))) +} + +func Xllistxattr(tls *TLS, path uintptr, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v list=%v size=%v, (%v:)", tls, path, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_llistxattr), int64(path), int64(list), int64(size)))) +} + +func Xflistxattr(tls *TLS, filedes int32, list uintptr, size Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v filedes=%v list=%v size=%v, (%v:)", tls, filedes, list, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_flistxattr), int64(filedes), int64(list), int64(size)))) +} + +func Xsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_setxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xlsetxattr(tls *TLS, path uintptr, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, path, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_lsetxattr), int64(path), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xfsetxattr(tls *TLS, filedes int32, name uintptr, value uintptr, size Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filedes=%v name=%v value=%v size=%v flags=%v, (%v:)", tls, filedes, name, value, size, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fsetxattr), int64(filedes), int64(name), int64(value), int64(size), int64(flags))))) +} + +func Xremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_removexattr), int64(path), int64(name))))) +} + +func Xlremovexattr(tls *TLS, path uintptr, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v name=%v, (%v:)", tls, path, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_lremovexattr), int64(path), int64(name))))) +} + +func Xfremovexattr(tls *TLS, fd int32, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v, (%v:)", tls, fd, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_fremovexattr), int64(fd), int64(name))))) +} + +type Tucontext_t2 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t +} + +func _dummy4(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + return msg +} + +func X__lctrans(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, lm) +} + +func X__lctrans_cur(tls *TLS, msg uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lctrans_impl(tls, msg, *(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + 5*8))) +} + +func _swapc(tls *TLS, x Tuint32_t, c int32) (r Tuint32_t) { + var v1 uint32 + _ = v1 + if c != 0 { + v1 = x>>int32(24) | x>>int32(8)&uint32(0xff00) | x< %v", r) }() + } + var b, n, o, ol, os, t, tl, ts Tuint32_t + var mo uintptr + var sign, sw int32 + _, _, _, _, _, _, _, _, _, _, _ = b, mo, n, o, ol, os, sign, sw, t, tl, ts + mo = p + sw = int32(*(*Tuint32_t)(unsafe.Pointer(mo)) - uint32(0x950412de)) + b = uint32(0) + n = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 2*4)), sw) + o = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 3*4)), sw) + t = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + 4*4)), sw) + if uint64(n) >= size/uint64(4) || uint64(o) >= size-uint64(uint32(4)*n) || uint64(t) >= size-uint64(uint32(4)*n) || (o|t)%uint32(4) != 0 { + return uintptr(0) + } + o /= uint32(4) + t /= uint32(4) + for { + ol = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2)))*4)), sw) + os = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(o+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(os) >= size || uint64(ol) >= size-uint64(os) || *(*uint8)(unsafe.Pointer(p + uintptr(os+ol))) != 0 { + return uintptr(0) + } + sign = Xstrcmp(tls, s, p+uintptr(os)) + if !(sign != 0) { + tl = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2)))*4)), sw) + ts = _swapc(tls, *(*Tuint32_t)(unsafe.Pointer(mo + uintptr(t+uint32(2)*(b+n/uint32(2))+uint32(1))*4)), sw) + if uint64(ts) >= size || uint64(tl) >= size-uint64(ts) || *(*uint8)(unsafe.Pointer(p + uintptr(ts+tl))) != 0 { + return uintptr(0) + } + return p + uintptr(ts) + } else { + if n == uint32(1) { + return uintptr(0) + } else { + if sign < 0 { + n /= uint32(2) + } else { + b += n / uint32(2) + n -= n / uint32(2) + } + } + } + goto _1 + _1: + } + return uintptr(0) +} + +const __USE_GNU_GETTEXT = 1 + +func Xbind_textdomain_codeset(tls *TLS, domainname uintptr, codeset uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v codeset=%v, (%v:)", tls, domainname, codeset, origin(2)) + defer func() { trc("-> %v", r) }() + } + if codeset != 0 && Xstrcasecmp(tls, codeset, __ccgo_ts+411) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + } + return UintptrFromInt32(0) +} + +var _empty_mo = [5]Tuint32_t{ + 0: uint32(0x950412de), + 2: uint32(-Int32FromInt32(1)), + 3: uint32(-Int32FromInt32(1)), + 4: uint32(-Int32FromInt32(1)), +} + +const NL_CAT_LOCALE = 1 +const NL_SETD = 1 + +type Tnl_item = int32 + +type Tnl_catd = uintptr + +func Xcatclose(tls *TLS, catd Tnl_catd) (r int32) { + if __ccgo_strace { + trc("tls=%v catd=%v, (%v:)", tls, catd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var map1 uintptr + _ = map1 + map1 = catd + Xmunmap(tls, map1, uint64(*(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8)))+uint32(20))) + return 0 +} + +func _cmp(tls *TLS, a uintptr, b uintptr) (r int32) { + var x, y Tuint32_t + var v1, v2 int32 + _, _, _, _ = x, y, v1, v2 + x = *(*Tuint32_t)(unsafe.Pointer(a)) + y = *(*Tuint32_t)(unsafe.Pointer(b)) + if x < y { + v1 = -int32(1) + } else { + if x > y { + v2 = int32(1) + } else { + v2 = 0 + } + v1 = v2 + } + return v1 +} + +func Xcatgets(tls *TLS, catd Tnl_catd, set_id int32, msg_id int32, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v catd=%v set_id=%v msg_id=%v s=%v, (%v:)", tls, catd, set_id, msg_id, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var map1, msg, msgs, set, sets, strings uintptr + var nmsgs, nsets Tuint32_t + var _ /* msg_id_be at bp+4 */ Tuint32_t + var _ /* set_id_be at bp+0 */ Tuint32_t + _, _, _, _, _, _, _, _ = map1, msg, msgs, nmsgs, nsets, set, sets, strings + map1 = catd + nsets = *(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(4))) + sets = map1 + uintptr(20) + msgs = map1 + uintptr(20) + uintptr(*(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(12)))) + strings = map1 + uintptr(20) + uintptr(*(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(16)))) + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(set_id) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uint32(msg_id) + set = Xbsearch(tls, bp, sets, uint64(nsets), uint64(12), __ccgo_fp(_cmp)) + if !(set != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMSG) + return s + } + nmsgs = *(*Tuint32_t)(unsafe.Pointer(set + UintptrFromInt32(4))) + msgs += uintptr(uint32(12) * *(*Tuint32_t)(unsafe.Pointer(set + UintptrFromInt32(8)))) + msg = Xbsearch(tls, bp+4, msgs, uint64(nmsgs), uint64(12), __ccgo_fp(_cmp)) + if !(msg != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMSG) + return s + } + return strings + uintptr(*(*Tuint32_t)(unsafe.Pointer(msg + UintptrFromInt32(8)))) +} + +const ABDAY_1 = 131072 +const ABDAY_2 = 131073 +const ABDAY_3 = 131074 +const ABDAY_4 = 131075 +const ABDAY_5 = 131076 +const ABDAY_6 = 131077 +const ABDAY_7 = 131078 +const ABMON_1 = 131086 +const ABMON_10 = 131095 +const ABMON_11 = 131096 +const ABMON_12 = 131097 +const ABMON_2 = 131087 +const ABMON_3 = 131088 +const ABMON_4 = 131089 +const ABMON_5 = 131090 +const ABMON_6 = 131091 +const ABMON_7 = 131092 +const ABMON_8 = 131093 +const ABMON_9 = 131094 +const ALT_DIGITS = 131119 +const AM_STR = 131110 +const CODESET = 14 +const CRNCYSTR = 262159 +const DAY_1 = 131079 +const DAY_2 = 131080 +const DAY_3 = 131081 +const DAY_4 = 131082 +const DAY_5 = 131083 +const DAY_6 = 131084 +const DAY_7 = 131085 +const D_FMT = 131113 +const D_T_FMT = 131112 +const ERA = 131116 +const ERA_D_FMT = 131118 +const ERA_D_T_FMT = 131120 +const ERA_T_FMT = 131121 +const MON_1 = 131098 +const MON_10 = 131107 +const MON_11 = 131108 +const MON_12 = 131109 +const MON_2 = 131099 +const MON_3 = 131100 +const MON_4 = 131101 +const MON_5 = 131102 +const MON_6 = 131103 +const MON_7 = 131104 +const MON_8 = 131105 +const MON_9 = 131106 +const NOEXPR = 327681 +const NOSTR = 327683 +const PM_STR = 131111 +const RADIXCHAR = 65536 +const THOUSEP = 65537 +const T_FMT = 131114 +const T_FMT_AMPM = 131115 +const YESEXPR = 327680 +const YESSTR = 327682 + +func _do_catopen(tls *TLS, name uintptr) (r Tnl_catd) { + bp := tls.Alloc(16) + defer tls.Free(16) + var map1 uintptr + var _ /* size at bp+0 */ Tsize_t + _ = map1 + map1 = X__map_file(tls, name, bp) + /* Size recorded in the file must match file size; otherwise + * the information needed to unmap the file will be lost. */ + if !(map1 != 0) || *(*Tuint32_t)(unsafe.Pointer(map1)) != uint32(0xff88ff89) || uint64(uint32(20)+*(*Tuint32_t)(unsafe.Pointer(map1 + UintptrFromInt32(8)))) != *(*Tsize_t)(unsafe.Pointer(bp)) { + if map1 != 0 { + Xmunmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + return map1 +} + +func Xcatopen(tls *TLS, name uintptr, oflag int32) (r Tnl_catd) { + if __ccgo_strace { + trc("tls=%v name=%v oflag=%v, (%v:)", tls, name, oflag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4096) + defer tls.Free(4096) + var catd Tnl_catd + var i, l Tsize_t + var lang, p, path, v, z, v1, v3, v6, v7 uintptr + var v2 bool + var _ /* buf at bp+0 */ [4096]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _ = catd, i, l, lang, p, path, v, z, v1, v2, v3, v6, v7 + if Xstrchr(tls, name, int32('/')) != 0 { + return _do_catopen(tls, name) + } + if v2 = X__libc.Fsecure != 0; !v2 { + v1 = Xgetenv(tls, __ccgo_ts+417) + path = v1 + } + if v2 || !(v1 != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) + } + if oflag != 0 { + v3 = Xnl_langinfo(tls, Int32FromInt32(LC_MESSAGES)<= uint64(4096)-i { + break + } + Xmemcpy(tls, bp+uintptr(i), v, l) + i += l + goto _5 + _5: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(z)) != 0) && (p < z || !(i != 0)) { + break + } + if p < z { + goto _4 + } + if *(*uint8)(unsafe.Pointer(z)) != 0 { + z++ + } + (*(*[4096]uint8)(unsafe.Pointer(bp)))[i] = uint8(0) + /* Leading : or :: in NLSPATH is same as %N */ + if i != 0 { + v7 = bp + } else { + v7 = name + } + catd = _do_catopen(tls, v7) + if catd != uintptr(-Int32FromInt32(1)) { + return catd + } + goto _4 + _4: + ; + p = z + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(-Int32FromInt32(1)) +} + +const calloc = 0 +const free = 0 +const malloc = 0 +const realloc = 0 + +type Tbinding = struct { + Fnext uintptr + Fdirlen int32 + Factive int32 + Fdomainname uintptr + Fdirname uintptr +} + +var _bindings uintptr + +func _gettextdir(tls *TLS, domainname uintptr, dirlen uintptr) (r uintptr) { + var p uintptr + _ = p + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(p+12) != 0 { + *(*Tsize_t)(unsafe.Pointer(dirlen)) = uint64((*Tbinding)(unsafe.Pointer(p)).Fdirlen) + return (*Tbinding)(unsafe.Pointer(p)).Fdirname + } + goto _1 + _1: + ; + p = (*Tbinding)(unsafe.Pointer(p)).Fnext + } + return uintptr(0) +} + +var _lock1 [1]int32 + +func Xbindtextdomain(tls *TLS, domainname uintptr, dirname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v dirname=%v, (%v:)", tls, domainname, dirname, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var dirlen, domlen Tsize_t + var p2, q, v2 uintptr + _, _, _, _, _ = dirlen, domlen, p2, q, v2 + if !(domainname != 0) { + return uintptr(0) + } + if !(dirname != 0) { + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + return _gettextdir(tls, domainname, bp) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + dirlen = Xstrnlen(tls, dirname, uint64(PATH_MAX)) + if domlen > uint64(NAME_MAX) || dirlen >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock1))) + p2 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(p2 != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdomainname, domainname) != 0) && !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdirname, dirname) != 0) { + break + } + goto _1 + _1: + ; + p2 = (*Tbinding)(unsafe.Pointer(p2)).Fnext + } + if !(p2 != 0) { + p2 = Xcalloc(tls, uint64(32)+domlen+dirlen+uint64(2), uint64(1)) + if !(p2 != 0) { + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return uintptr(0) + } + (*Tbinding)(unsafe.Pointer(p2)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + (*Tbinding)(unsafe.Pointer(p2)).Fdirlen = int32(dirlen) + (*Tbinding)(unsafe.Pointer(p2)).Fdomainname = p2 + 32 + (*Tbinding)(unsafe.Pointer(p2)).Fdirname = p2 + 32 + uintptr(domlen) + uintptr(1) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdomainname, domainname, domlen+uint64(1)) + Xmemcpy(tls, (*Tbinding)(unsafe.Pointer(p2)).Fdirname, dirname, dirlen+uint64(1)) + v2 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + // __asm__ __volatile__ ( + // + // "csg %0, %2, %1" + // : "+d"(t), "+Q"(*(void *volatile *)p) : "d"(s) + // : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+439) + _ = v2 + goto _3 + _3: + } + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+439) + AtomicStorePInt32(p2+12, int32(1)) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+439) + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && q != p2 { + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+439) + AtomicStorePInt32(q+12, 0) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+439) + } + goto _4 + _4: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock1))) + return (*Tbinding)(unsafe.Pointer(p2)).Fdirname +} + +var _catnames = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +var _catlens = [6]uint8{ + 0: uint8(8), + 1: uint8(10), + 2: uint8(7), + 3: uint8(10), + 4: uint8(11), + 5: uint8(11), +} + +type Tmsgcat = struct { + Fnext uintptr + Fmap1 uintptr + Fmap_size Tsize_t + Fplural_rule uintptr + Fnplurals int32 + Fbinding uintptr + Flm uintptr + Fcat int32 +} + +func _dummy_gettextdomain(tls *TLS) (r uintptr) { + return __ccgo_ts + 454 +} + +func Xdcngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64, category int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v category=%v, (%v:)", tls, domainname, msgid1, msgid2, n, category, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var alt_modlen, catlen, dirlen, domlen, l, loclen, modlen, rem, v5 Tsize_t + var catname, csp, dirname, lm, loc, locname, locp, map1, modname, name, old_cats, p1, q, r, rule, trans, v10, v17, v18, v3, v8, v9 uintptr + var np, plural, v21 uint64 + var old_errno, v11, v12, v14, v15 int32 + var v6 t__predefined_size_t + var _ /* map_size at bp+0 */ Tsize_t + var _ /* z at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alt_modlen, catlen, catname, csp, dirlen, dirname, domlen, l, lm, loc, loclen, locname, locp, map1, modlen, modname, name, np, old_cats, old_errno, p1, plural, q, r, rem, rule, trans, v10, v11, v12, v14, v15, v17, v18, v21, v3, v5, v6, v8, v9 + defer func() { Xrealloc(tls, name, 0) }() + loc = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + /* match gnu gettext behaviour */ + if !(msgid1 != 0) { + goto notrans + } + if uint32(category) >= uint32(LC_ALL) { + goto notrans + } + if !(domainname != 0) { + domainname = X__gettextdomain(tls) + } + domlen = Xstrnlen(tls, domainname, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if domlen > uint64(NAME_MAX) { + goto notrans + } + q = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_bindings))) + for { + if !(q != 0) { + break + } + if !(Xstrcmp(tls, (*Tbinding)(unsafe.Pointer(q)).Fdomainname, domainname) != 0) && AtomicLoadPInt32(q+12) != 0 { + break + } + goto _1 + _1: + ; + q = (*Tbinding)(unsafe.Pointer(q)).Fnext + } + if !(q != 0) { + goto notrans + } + lm = *(*uintptr)(unsafe.Pointer(loc + uintptr(category)*8)) + if !!(lm != 0) { + goto _2 + } + goto notrans +notrans: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + if n == uint64(1) { + v3 = msgid1 + } else { + v3 = msgid2 + } + return v3 +_2: + ; + p1 = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + for { + if !(p1 != 0) { + break + } + if (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding == q && (*Tmsgcat)(unsafe.Pointer(p1)).Flm == lm && (*Tmsgcat)(unsafe.Pointer(p1)).Fcat == category { + break + } + goto _4 + _4: + ; + p1 = (*Tmsgcat)(unsafe.Pointer(p1)).Fnext + } + if !(p1 != 0) { + dirname = (*Tbinding)(unsafe.Pointer(q)).Fdirname + locname = lm + 16 + catname = uintptr(unsafe.Pointer(&_catnames)) + uintptr(category)*12 + dirlen = uint64((*Tbinding)(unsafe.Pointer(q)).Fdirlen) + loclen = Xstrlen(tls, locname) + catlen = uint64(_catlens[category]) + /* Logically split @mod suffix from locale name. */ + modname = Xmemchr(tls, locname, int32('@'), loclen) + if !(modname != 0) { + modname = locname + uintptr(loclen) + } + v5 = loclen - uint64(int64(modname)-int64(locname)) + modlen = v5 + alt_modlen = v5 + loclen = uint64(int64(modname) - int64(locname)) + /* Drop .charset identifier; it is not used. */ + csp = Xmemchr(tls, locname, int32('.'), loclen) + if csp != 0 { + loclen = uint64(int64(csp) - int64(locname)) + } + v6 = dirlen + uint64(1) + loclen + modlen + uint64(1) + catlen + uint64(1) + domlen + uint64(3) + uint64(1) + name = Xrealloc(tls, name, v6) + for { + Xsnprintf(tls, name, v6, __ccgo_ts+463, VaList(bp+24, dirname, int32(loclen), locname, int32(alt_modlen), modname, catname, domainname)) + v8 = X__map_file(tls, name, bp) + map1 = v8 + if v8 != 0 { + break + } + /* Try dropping @mod, _YY, then both. */ + if alt_modlen != 0 { + alt_modlen = uint64(0) + } else { + v9 = Xmemchr(tls, locname, int32('_'), loclen) + locp = v9 + if v9 != 0 { + loclen = uint64(int64(locp) - int64(locname)) + alt_modlen = modlen + } else { + break + } + } + goto _7 + _7: + } + if !(map1 != 0) { + goto notrans + } + p1 = Xcalloc(tls, uint64(64), uint64(1)) + if !(p1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp))) + goto notrans + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fcat = category + (*Tmsgcat)(unsafe.Pointer(p1)).Fbinding = q + (*Tmsgcat)(unsafe.Pointer(p1)).Flm = lm + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1 = map1 + (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp)) + rule = __ccgo_ts + 485 + np = uint64(2) + r = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, __ccgo_ts) + for r != 0 && Xstrncmp(tls, r, __ccgo_ts+491, uint64(13)) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = Xstrchr(tls, r, int32('\n')) + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v10 = *(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(1) + } else { + v10 = uintptr(0) + } + r = v10 + } + if r != 0 { + r += uintptr(13) + for { + v11 = int32(*(*uint8)(unsafe.Pointer(r))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + if !(v12 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+505, uint64(9)) != 0) { + np = Xstrtoul(tls, r+uintptr(9), bp+8, int32(10)) + r = *(*uintptr)(unsafe.Pointer(bp + 8)) + } + for *(*uint8)(unsafe.Pointer(r)) != 0 && int32(*(*uint8)(unsafe.Pointer(r))) != int32(';') { + r++ + } + if *(*uint8)(unsafe.Pointer(r)) != 0 { + r++ + for { + v14 = int32(*(*uint8)(unsafe.Pointer(r))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + if !(v15 != 0) { + break + } + r++ + } + if !(Xstrncmp(tls, r, __ccgo_ts+515, uint64(7)) != 0) { + rule = r + uintptr(7) + } + } + } + (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals = int32(np) + (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule = rule + for { + old_cats = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_cats))) + (*Tmsgcat)(unsafe.Pointer(p1)).Fnext = old_cats + goto _20 + _20: + ; + v17 = old_cats + // __asm__ __volatile__ ( + // + // "csg %0, %2, %1" + // : "+d"(t), "+Q"(*(void *volatile *)p) : "d"(s) + // : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 13, __ccgo_ts+523) + v18 = v17 + goto _19 + _19: + ; + if !(v18 != old_cats) { + break + } + } + } + trans = X__mo_lookup(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap1, (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size, msgid1) + if !(trans != 0) { + goto notrans + } + /* Non-plural-processing gettext forms pass a null pointer as + * msgid2 to request that dcngettext suppress plural processing. */ + if msgid2 != 0 && (*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals != 0 { + plural = X__pleval(tls, (*Tmsgcat)(unsafe.Pointer(p1)).Fplural_rule, n) + if plural > uint64((*Tmsgcat)(unsafe.Pointer(p1)).Fnplurals) { + goto notrans + } + for { + v21 = plural + plural-- + if !(v21 != 0) { + break + } + rem = (*Tmsgcat)(unsafe.Pointer(p1)).Fmap_size - uint64(int64(trans)-int64((*Tmsgcat)(unsafe.Pointer(p1)).Fmap1)) + l = Xstrnlen(tls, trans, rem) + if l+uint64(1) >= rem { + goto notrans + } + trans += uintptr(l + uint64(1)) + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return trans +} + +var _cats uintptr + +func Xdcgettext(tls *TLS, domainname uintptr, msgid uintptr, category int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v category=%v, (%v:)", tls, domainname, msgid, category, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), category) +} + +func Xdngettext(tls *TLS, domainname uintptr, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, domainname, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid1, msgid2, n, int32(LC_MESSAGES)) +} + +func Xdgettext(tls *TLS, domainname uintptr, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v msgid=%v, (%v:)", tls, domainname, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdcngettext(tls, domainname, msgid, uintptr(0), uint64(1), int32(LC_MESSAGES)) +} + +func X__duplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var new1 Tlocale_t + _ = new1 + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + return uintptr(0) + } + if old == uintptr(-Int32FromInt32(1)) { + old = uintptr(unsafe.Pointer(&X__libc)) + 56 + } + *(*t__locale_struct)(unsafe.Pointer(new1)) = *(*t__locale_struct)(unsafe.Pointer(old)) + return new1 +} + +func Xduplocale(tls *TLS, old Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v old=%v, (%v:)", tls, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__duplocale(tls, old) +} + +func Xfreelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + if X__loc_is_allocated(tls, l) != 0 { + Xfree(tls, l) + } +} + +func X__freelocale(tls *TLS, l Tlocale_t) { + if __ccgo_strace { + trc("tls=%v l=%v, (%v:)", tls, l, origin(2)) + } + Xfreelocale(tls, l) +} + +const BIG5 = 224 +const EUC_JP = 208 +const EUC_KR = 232 +const GB18030 = 216 +const GB2312 = 218 +const GBK = 217 +const ISO2022_JP = 210 +const SHIFT_JIS = 209 +const UCS2 = 204 +const UCS2BE = 196 +const UCS2LE = 197 +const US_ASCII = 199 +const UTF_16 = 202 +const UTF_16BE = 194 +const UTF_16LE = 193 +const UTF_32 = 203 +const UTF_32BE = 192 +const UTF_32LE = 195 +const UTF_8 = 200 +const WCHAR_T = 198 +const mbrtowc_utf8 = 0 +const wctomb_utf8 = 0 + +type Ticonv_t = uintptr + +/* Definitions of charmaps. Each charmap consists of: + * 1. Empty-string-terminated list of null-terminated aliases. + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ + +var _charmaps = [4907]uint8{'u', 't', 'f', '8', 0, 'c', 'h', 'a', 'r', 0, 0, 200, 'w', 'c', 'h', 'a', 'r', 't', 0, 0, 198, 'u', 'c', 's', '2', 'b', 'e', 0, 0, 196, 'u', 'c', 's', '2', 'l', 'e', 0, 0, 197, 'u', 't', 'f', '1', '6', 'b', 'e', 0, 0, 194, 'u', 't', 'f', '1', '6', 'l', 'e', 0, 0, 193, 'u', 'c', 's', '4', 'b', 'e', 0, 'u', 't', 'f', '3', '2', 'b', 'e', 0, 0, 192, 'u', 'c', 's', '4', 'l', 'e', 0, 'u', 't', 'f', '3', '2', 'l', 'e', 0, 0, 195, 'a', 's', 'c', 'i', 'i', 0, 'u', 's', 'a', 's', 'c', 'i', 'i', 0, 'i', 's', 'o', '6', '4', '6', 0, 'i', 's', 'o', '6', '4', '6', 'u', 's', 0, 0, 199, 'u', 't', 'f', '1', '6', 0, 0, 202, 'u', 'c', 's', '4', 0, 'u', 't', 'f', '3', '2', 0, 0, 203, 'u', 'c', 's', '2', 0, 0, 204, 'e', 'u', 'c', 'j', 'p', 0, 0, 208, 's', 'h', 'i', 'f', 't', 'j', 'i', 's', 0, 's', 'j', 'i', 's', 0, 'c', 'p', '9', '3', '2', 0, 0, 209, 'i', 's', 'o', '2', '0', '2', '2', 'j', 'p', 0, 0, 210, 'g', 'b', '1', '8', '0', '3', '0', 0, 0, 216, 'g', 'b', 'k', 0, 'c', 'p', '9', '3', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '9', '3', '6', 0, 0, 217, 'g', 'b', '2', '3', '1', '2', 0, 0, 218, 'b', 'i', 'g', '5', 0, 'b', 'i', 'g', 'f', 'i', 'v', 'e', 0, 'c', 'p', '9', '5', '0', 0, 'b', 'i', 'g', '5', 'h', 'k', 's', 'c', 's', 0, 0, 224, 'e', 'u', 'c', 'k', 'r', 0, 'k', 's', 'c', '5', '6', '0', '1', 0, 'k', 's', 'x', '1', '0', '0', '1', 0, 'c', 'p', '9', '4', '9', 0, 0, 232, 'i', 's', 'o', '8', '8', '5', '9', '1', 0, 'l', 'a', 't', 'i', 'n', '1', 0, 0, '@', 'i', 's', 'o', '8', '8', '5', '9', '2', 0, 0, '(', 160, 16, 244, 'W', 'N', 164, 220, 244, 212, ')', 168, 'T', '5', 'U', 'V', 'n', 181, '"', 23, '\\', 176, 20, 20, 152, 'N', 180, 224, 4, 149, '_', 184, 'X', 'E', 149, 'V', 'o', 13, '6', 'W', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '3', 0, 0, '(', 160, 144, 244, 215, '(', 164, 0, ' ', 210, ')', 168, 176, '4', 21, 'G', '.', 181, 2, 0, '\\', 176, 148, '$', 203, ',', 180, 212, '2', 210, '-', 184, 180, 'D', 'U', 'G', '/', 245, 2, '@', '\\', 192, 4, '#', 12, 0, 196, '(', 132, 208, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 0, 'D', '#', 205, '4', 212, 'x', 'd', 205, '5', 26, 'e', 163, 205, '6', 220, 132, 21, 213, '7', 224, 132, '#', 14, 0, 228, ',', 148, 208, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 0, 196, '#', 207, '<', 244, '|', 'd', 207, '=', 27, 229, 163, 207, '>', 252, 136, '%', 21, '`', 'i', 's', 'o', '8', '8', '5', '9', '4', 0, 0, '(', 160, 16, '$', 211, 'R', 164, 152, 'T', 211, ')', 168, 'T', '%', 17, 'H', '[', 181, '"', 215, '+', 176, 20, 20, 24, 'S', 180, 156, 'd', 147, '_', 184, 'X', '5', 'Q', 'H', '\\', 5, '5', 151, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 12, 'J', 16, 245, '4', 20, 'L', 212, 'T', 'c', 205, '5', 216, 156, 165, 205, '6', 220, 't', 245, 213, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 'N', 'J', 17, 249, 'D', 'T', 'L', 244, 212, 'c', 207, '=', 248, 160, 165, 207, '>', 252, 'x', 5, 22, '`', 'i', 's', 'o', '8', '8', '5', '9', '5', 0, 0, '(', 160, 'D', '\'', 221, 't', 212, 'U', 'g', 221, 'u', 216, 'e', 167, 221, 'v', 220, 181, 210, 157, 'w', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, '&', 127, 8, 'b', 136, '"', 142, 'H', 'b', 137, '&', 158, 136, 'b', 138, '*', 158, 178, '"', 139, 'i', 's', 'o', '8', '8', '5', '9', '6', 0, 0, '(', 160, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'b', 182, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 152, 0, 0, 0, 0, 153, 0, 148, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, 158, '|', 246, 233, '\'', 0, 0, 0, 0, 0, 0, 127, 2, 26, 168, 160, 131, 18, 'Z', 168, 161, 135, '"', 154, 168, 162, 139, '2', 218, 168, 163, 143, 'B', 26, ')', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '7', 0, 0, '(', 160, 'L', 'L', 241, '(', '$', 151, 'l', 202, ')', 168, 164, 146, 216, '*', 172, 180, 2, '@', 196, 176, 196, '"', 203, ',', 138, '-', 198, 216, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'i', 's', 'o', '8', '8', '5', '9', '8', 0, 0, '(', 160, 0, ' ', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 196, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'i', 's', 'o', '8', '8', '5', '9', '9', 0, 0, '4', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '0', 0, 0, '(', 160, 16, '$', 17, 'H', '(', 153, 4, 211, ')', '5', 'A', 'T', 213, 'V', 'r', 181, 242, 'U', 'P', 176, 20, '4', 'Q', 'H', ')', 157, 20, 211, '-', '6', 'E', 'd', 21, 'W', 's', 'E', 12, 150, 'P', 0, 5, '#', 204, '0', 196, 20, 'c', 140, 'J', 12, '%', 'c', 209, '2', 20, '5', 227, 204, '3', 208, 244, '4', 212, '4', 212, 'T', 'c', 'M', 'W', 216, 156, 165, 205, '6', 220, 't', 227, 205, '7', 1, 133, '#', 206, '8', 228, 148, 'c', 206, 'J', 13, 165, 's', 209, ':', 21, 181, 227, 206, ';', 240, 248, 'D', 212, '<', 244, 212, 'c', 143, 'W', 248, 160, 165, 207, '>', 252, 244, 227, 143, 'L', 'i', 's', 'o', '8', '8', '5', '9', '1', '1', 0, 't', 'i', 's', '6', '2', '0', 0, 0, '(', 160, 'x', 250, ')', 168, 161, 138, ':', '*', 169, 165, 154, 'z', '*', 170, 169, 170, 186, '*', 171, 173, 186, 250, '*', 172, 177, 202, ':', '+', 173, 181, 218, 'z', '+', 174, 185, 234, 186, '+', 175, 189, 250, 250, '+', 176, 193, 10, ';', ',', 177, 197, 26, '{', ',', 178, 201, '*', 187, ',', 179, 205, ':', 251, ',', 180, 209, 'J', ';', '-', 181, 213, 'Z', '{', '-', 0, 0, 0, 0, 0, 182, 217, 'j', 187, '-', 183, 221, 'z', 251, '-', 184, 225, 138, ';', '.', 185, 229, 154, '{', '.', 186, 233, 170, 187, '.', 187, 237, 186, 251, '.', 188, 241, 202, ';', '/', 189, 0, 0, 0, 0, 0, 'i', 's', 'o', '8', '8', '5', '9', '1', '3', 0, 0, '(', 160, '\\', ',', 202, '(', 164, '`', 'l', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 22, 215, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, 197, 'i', 's', 'o', '8', '8', '5', '9', '1', '4', 0, 0, '(', 160, 212, 'k', 239, '(', 10, '-', 't', 239, ')', 3, 167, 'R', '0', 190, 9, 183, 226, 'J', '[', 249, 234, 235, 209, 'G', 251, 242, 'k', 'K', 191, 4, 251, 'k', 240, 191, 10, 31, 140, '0', 192, 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 'i', 'E', '#', 205, '4', 212, 'T', 'c', 'M', 192, 216, 'd', 163, 205, '6', 220, 't', 179, 214, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 'j', 197, '#', 207, '<', 244, 212, 'c', 143, 192, 248, 228, 163, 207, '>', 252, 244, 195, 214, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '5', 0, 'l', 'a', 't', 'i', 'n', '9', 0, 0, ')', '$', 151, 'R', 213, ')', 'V', 165, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 'r', 213, 'b', 203, '-', 's', 229, 162, 203, '.', 'G', '!', 213, 214, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'i', 's', 'o', '8', '8', '5', '9', '1', '6', 0, 0, '(', 160, 16, 'T', 'P', 'N', '$', 'c', '\\', 213, ')', 'V', 165, 146, 215, '*', 'n', 181, 242, 22, '\\', 176, 196, 194, 144, 'N', 'r', ']', 'l', 203, '-', 's', '5', 164, 215, '.', 'G', '!', 213, 'V', '\\', 192, 4, '#', 140, '@', 196, 24, 'd', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 16, 237, '$', 205, '4', 212, 20, 'e', 205, 'S', 'e', 'e', 163, 205, '6', 220, 'X', 180, 215, '7', 224, 132, '#', 206, '@', 228, 28, 'd', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 17, 241, '$', 207, '<', 244, 24, 'e', 15, 'T', 'f', 229, 163, 207, '>', 252, '\\', 196, 215, '?', 'c', 'p', '1', '2', '5', '0', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '0', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', '\\', 149, 199, 'O', 'e', '%', 151, '[', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 'l', 213, 199, 'P', 'i', '5', 215, '[', 160, 248, 245, 'W', 'N', 164, 16, 'd', 202, ')', 168, 164, '2', 213, '*', 172, 180, 226, 10, '\\', 176, 196, 18, 152, 'N', 180, 212, 'b', 203, '-', 184, 20, 'D', 213, '.', '7', 13, 134, 'S', '\\', 'I', 5, '#', 140, '@', 196, 204, 'd', 208, '1', 12, '%', 'c', 209, '2', 24, '5', 227, 140, 'C', 16, 237, 244, 211, '4', 212, 20, 'e', 205, '5', 'M', 141, 165, 'M', 'Y', 220, 't', 's', 213, '7', 'J', 133, '#', 206, '@', 228, 208, 't', 208, '9', 13, 165, 's', 209, ':', 25, 181, 227, 206, 'C', 17, 241, 4, 212, '<', 244, 24, 'e', 207, '=', 'N', 145, 165, 143, 'Y', 252, 244, 131, 21, '`', 'c', 'p', '1', '2', '5', '1', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '1', 0, 0, ' ', 210, 'M', 'W', 'q', 136, 24, 's', 156, 177, 198, '$', 'w', 156, 157, 199, 218, 'q', 183, 157, 'w', ' ', 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, '|', 226, 199, '(', 170, 152, '"', 139, 160, 't', 183, '"', 'v', 164, 180, 'h', 202, ')', 209, 165, 'B', 221, '*', 172, 180, 226, 202, 'u', 176, 196, 'b', 29, 137, '.', 214, 'b', 203, '-', 31, 154, ',', 226, '.', '&', 'V', '7', 'b', 137, 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 'c', 'p', '1', '2', '5', '2', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '2', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, ' ', 23, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, '0', 'W', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 208, 'D', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 't', 227, 205, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 240, 196, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 244, 227, 207, '?', 'c', 'p', '1', '2', '5', '3', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '3', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 0, 0, 0, 0, 160, ',', 198, 216, '(', 164, 148, 'b', 202, ')', 168, 164, 2, 192, '*', 172, 180, 226, 'J', 196, 176, 196, '"', 203, ',', 138, 213, 'b', 203, '-', 141, '9', 246, 216, '.', 144, 245, 18, 153, 'd', 147, 'Q', 'V', 153, 'e', 151, 'a', 150, 153, 'f', 155, 'q', 214, 153, 'g', 159, 129, 22, 154, 'h', 163, 145, 6, '@', 'i', 166, 157, 134, 'Z', 'j', 170, 173, 198, 'Z', 'k', 174, 189, 6, '[', 'l', 178, 205, 'F', '[', 'm', 182, 221, 134, '[', 'n', 186, 237, 198, '[', 'o', 190, 253, 6, '\\', 'p', 194, 13, 'G', '\\', 'q', 198, 29, 135, '\\', 'r', 202, '-', 199, '\\', 's', 206, '=', 7, 29, 0, 'c', 'p', '1', '2', '5', '4', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '4', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', '\\', 149, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 'l', 213, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 204, '0', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 204, '4', 227, 204, '3', 28, 'E', '#', 205, '4', 212, 'T', 'c', 205, '5', 216, 'd', 163, 205, '6', 220, 176, '4', 213, '7', 224, 132, '#', 206, '8', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 236, 180, 227, 206, ';', 29, 197, '#', 207, '<', 244, 212, 'c', 207, '=', 248, 228, 163, 207, '>', 252, 180, 'D', 213, '?', 'c', 'p', '1', '2', '5', '5', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '5', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 0, 0, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 0, 0, 0, 0, 0, 160, 132, '"', 202, '(', '"', 151, 'b', 202, ')', 168, 164, 'r', 205, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 'r', 207, '.', 188, 244, 226, 203, '/', '/', 194, 24, 163, 140, '3', 210, 'X', 163, 141, '7', 226, 8, '@', 142, ':', 238, 200, 'c', 143, '>', 254, 8, 'd', 144, ']', 'z', 249, '%', 152, 'a', 2, 0, 0, 0, 0, 0, 0, 0, 0, 'B', 14, 'I', 'd', 145, 'F', 30, 137, 'd', 146, 'J', '.', 201, 'd', 147, 'N', '>', 9, 'e', 148, 'R', 'N', 'I', 'e', 149, 'V', '^', 137, 'e', 150, 'Z', 'n', 201, '%', 0, 0, '4', 236, '0', 0, 'c', 'p', '1', '2', '5', '6', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '6', 0, 0, ' ', '$', 'O', 'Z', '1', ']', 24, 's', 156, 177, 198, '}', 'u', ',', 169, 199, 'G', 'Q', 'z', 'i', 165, 153, 'N', 'L', 177, 197, 23, 'o', 252, '0', 196, 152, 158, 'l', 233, 199, 'H', '-', 204, 176, 166, 160, 136, ')', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 178, 233, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, '2', 230, '.', 188, 244, 226, 11, 153, 156, 150, 'i', 230, 153, 'h', 166, 169, 230, 154, 'l', 182, 233, 230, 155, 'p', 198, ')', 231, 156, 't', 214, 'i', 231, 157, 'x', 230, 169, 231, '5', '{', 242, 217, 167, 159, 127, 2, 26, 168, 160, 224, 12, '*', 14, 161, 133, 26, 'z', 232, '9', 232, 164, 163, 206, ':', 136, '&', 234, 206, ';', 138, '.', 202, 'h', 163, 244, '8', 250, 232, '=', 144, 230, 19, 233, '>', 252, '4', 236, 'p', 167, 'c', 'p', '1', '2', '5', '7', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '7', 0, 0, ' ', '$', 3, 'P', '1', 0, 24, 's', 156, 177, 198, 0, 't', 12, 128, 199, 0, 160, 226, 23, '.', 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 0, 156, 12, 192, 199, 0, 188, 18, 24, 0, 160, 0, ' ', 202, '(', 164, 0, '`', 202, ')', 216, 164, 178, 212, '*', 172, 180, 226, 138, '1', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 248, 228, 194, 212, '.', 188, 244, 226, 139, '9', 4, 169, 4, 144, 'A', 196, 20, 'c', 145, 'D', 12, '%', 227, 22, 'E', ' ', 193, 132, 'R', 'M', 'U', 237, 212, 211, '4', 'C', 'U', 'c', 205, '5', 'g', 229, 244, 212, 'W', 220, 192, '%', 215, '7', 5, 173, 20, 208, 'A', 228, 148, 's', 209, 'D', 13, 165, 243, 'V', 'E', '!', 197, 148, 146, 'M', 'V', 241, 228, 211, '<', 'D', 213, 'c', 207, '=', 'h', 233, 4, 21, 'X', 252, 196, '5', 23, '`', 'c', 'p', '1', '2', '5', '8', 0, 'w', 'i', 'n', 'd', 'o', 'w', 's', '1', '2', '5', '8', 0, 0, ' ', '$', 3, 'P', '1', ']', 24, 's', 156, 177, 198, '}', 'u', 12, 128, 199, 'G', 1, 0, 0, 0, 0, 'L', 'L', 177, 197, 23, 'o', 252, '0', 196, 130, 157, 12, 192, 199, 'H', 1, 0, '@', '[', 160, 132, '"', 202, '(', 164, 148, 'b', 202, ')', 168, 164, 162, 202, '*', 172, 180, 226, 202, '+', 176, 196, '"', 203, ',', 180, 212, 'b', 203, '-', 184, 228, 162, 203, '.', 188, 244, 226, 203, '/', 192, 4, '#', 140, '@', 196, 20, 'c', 204, '1', 200, '$', 163, 204, '2', 132, '5', 227, 204, '3', 16, 'E', 's', 216, '4', 212, 212, 'e', 205, '5', 216, 'd', 163, 205, '6', 220, 220, 'e', 216, '7', 224, 132, '#', 206, '@', 228, 148, 'c', 206, '9', 232, 164, 163, 206, ':', 133, 181, 227, 206, ';', 17, 197, 131, 216, '<', 244, 216, 'e', 207, '=', 248, 228, 163, 207, '>', 252, 224, '5', 242, '?', 'k', 'o', 'i', '8', 'r', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, 'A', 11, '=', '4', 209, 'E', 27, '}', '4', 210, 'I', '+', 189, '4', 211, 'M', ';', 253, 't', 't', 'P', 'G', '-', 245, 212, 'T', 'W', 'm', 245, 213, 'X', 'g', 173, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'k', 'o', 'i', '8', 'u', 0, 0, ' ', '3', 211, '\\', 179, 205, '7', 227, 156, 179, 206, ';', 243, 220, 243, 214, '\\', 'w', 237, 245, 215, '`', 135, '-', 'v', 204, 'c', 163, 156, '2', 203, '.', 191, 12, 138, 204, 176, 200, 'r', 203, '=', '>', 255, 12, 244, 135, '"', 10, 'M', 'b', 137, 'E', 27, '}', '4', 210, 'I', 187, 184, '4', 211, 'M', ';', 253, 't', 't', 212, 'E', 'm', 221, 'u', 'T', 'W', 'm', 245, 213, 'X', 183, 168, 'u', '*', 29, 254, 7, '`', 133, 3, 18, '8', 161, 128, 20, 30, 136, '`', 130, 10, '.', 200, '`', 131, 14, 'z', 248, ' ', 132, 17, 'J', 'X', '`', 128, 27, 'j', 'h', 224, 133, 28, 'b', 'h', 'a', 134, 253, '}', 7, '^', '}', 227, 145, '7', 159, 'x', 244, 157, 135, '^', 'z', 234, 173, 199, '^', '{', 238, 249, 247, 30, '|', 241, 201, 'W', '^', 'x', 251, 233, 'g', 222, '}', 252, 225, 'g', '_', '~', 'c', 'p', '4', '3', '7', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 141, '(', 163, 148, 18, '2', ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 192, 204, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 179, '}', 'c', 153, 'p', 165, 21, 'W', 139, 'q', 168, 'm', 182, 154, 'm', '*', '#', 'w', 219, 202, '-', 199, 242, 178, 203, '1', 203, '|', 15, 203, 176, 160, '|', 'K', 202, ' ', 203, '2', '6', '(', 'c', 'p', '8', '5', '0', 0, 0, ' ', 199, 240, 147, 142, '8', 228, 128, 'S', 206, '9', 234, 172, 131, 206, ';', 238, 176, 'C', 'L', '1', 201, 152, 'c', 12, '=', 246, 200, 179, 'O', '>', 255, 'X', 195, 13, '>', 163, '`', 's', 13, ']', 225, 180, '3', 143, '>', 241, 'D', 163, 138, '.', 191, 184, 194, 'J', '/', 188, 132, 178, 202, '.', '`', 135, '-', '6', 205, ':', 7, '#', 12, '0', 169, 'D', 253, 's', 209, 'K', 139, 'R', 138, 205, '7', 243, 188, 's', 206, '3', 247, '<', 206, '0', 'H', 11, '}', '5', 213, 'N', 251, 172, '5', ')', 240, '@', 163, 204, '2', 200, 180, 212, 140, '3', 207, 224, '\\', 's', 215, '\\', 155, 194, 204, 214, 211, '|', 'C', 141, '4', 245, 'T', 'S', 139, '?', 222, 'h', 179, 'M', '6', 253, 't', 243, 10, '-', 173, 196, '"', 177, '/', 182, 156, 'r', 15, '.', 176, 160, 'r', 'K', '.', 179, 200, '2', '6', '(', 'c', 'p', '8', '6', '6', 0, 0, ' ', 223, 129, 23, 158, 'x', 227, 145, 'W', 158, 'y', 231, 161, 151, 158, 'z', 235, 177, 215, 158, '{', 239, 193, 23, 159, '|', 243, 209, 'W', 159, '}', 247, 225, 151, 159, '~', 251, 241, 215, 159, 127, 255, 1, 24, 160, 128, 3, 18, 'X', 160, 129, 7, '"', 152, 160, 130, 11, '2', 216, 160, 131, '`', 135, '-', '6', 205, ':', '?', 13, '5', 209, 'C', 'G', 253, 's', 209, 'K', '+', 157, 180, 205, '7', 243, 188, 's', 206, '3', 247, 204, 't', 211, 'H', 11, '}', '5', 213, 'N', 251, 172, 'u', 213, 'V', 'K', '=', 245, 209, 'F', 3, 29, 't', 214, 'X', 227, '\\', 's', 215, '\\', '{', 253, 245, 214, 15, 'B', 24, 161, 132, 19, 'R', 'X', 161, 133, 23, 'b', 152, 161, 134, 27, 'r', 216, 161, 135, 209, '}', 'H', 157, 136, 215, 149, 216, 221, 138, 176, 160, '|', 'K', 202, '&', 147, '2', '6', '(', 'i', 'b', 'm', '1', '0', '4', '7', 0, 'c', 'p', '1', '0', '4', '7', 0, 0, 1, 156, '$', '`', 200, 31, 151, '4', 226, 200, 2, 12, '4', 224, 192, 3, 16, 'D', ' ', 193, 4, 157, 20, 130, 192, '!', 24, 'd', ' ', 201, '#', 28, 't', 224, 193, 7, 128, 4, '"', 200, ' ', 132, '(', 'p', 193, 6, 136, '$', 162, 200, '"', 140, 20, '`', 192, 1, 144, 'D', 'b', 193, '$', 148, 'T', 'b', 9, 1, 152, 'd', 162, 201, '&', 20, 'T', 224, 137, 6, ' ', 128, '"', 14, '9', 224, 132, '3', 'N', '9', 231, 196, '#', 138, 11, '<', 160, 176, 2, 31, '&', 164, 163, 206, ':', 232, 180, 227, 206, ';', 236, '|', 19, 2, 9, '*', 164, 176, 131, 23, '-', 188, ' ', 12, '1', 192, 4, '3', 'L', '1', 199, 'D', 'c', 10, 11, '%', '|', 225, 195, 15, 248, '$', 163, 204, '2', 200, '4', 227, 204, '3', 204, 128, 161, 195, 8, '@', 156, 208, 131, 8, 216, 132, '!', 198, 24, 'd', 148, 'a', 198, 25, 'h', 164, 177, 202, '.', 240, 244, 227, 'O', ',', 176, 168, 177, 6, 27, 'm', 184, 241, 6, 28, 'q', 200, 161, 138, '.', 230, 224, 'b', 12, ')', 181, 248, '1', 7, 29, 'u', 216, 'q', 7, 30, 'y', 232, 17, 202, '/', 208, 'l', 225, 141, '+', 172, 140, 'R', 202, '-', 169, 156, 'b', 11, '/', 189, 248, 210, 13, '*', 175, 't', 'A', 203, '5', '{', 4, '!', 196, 16, 'D', 20, 'a', 196, 17, 'H', '$', 209, 10, '=', 246, 200, '3', 'O', '=', '}', '(', 177, 4, 19, 'M', '8', 241, 4, 20, 'Q', 'H', 145, 203, '>', 252, 228, 163, 207, '?', '\\', 220, '3', 5, 21, 'U', 'X', 'q', 5, 22, 'Y', 'h', '!', 11, '5', 214, 'H', '3', 'M', '5', '0', 196, ' ', 195, 12, '4', 212, '`', 195, 13, '8', 228, '0', 203, '6', 220, 'd', 163, 205, '\''} + +// C documentation +// +// /* Table of characters that appear in legacy 8-bit codepages, +// * limited to 1024 slots (10 bit indices). The first 256 entries +// * are elided since those characters are obviously all included. */ +var _legacy_chars = [612]uint16{ + 0: uint16(256), + 1: uint16(257), + 2: uint16(258), + 3: uint16(259), + 4: uint16(260), + 5: uint16(261), + 6: uint16(262), + 7: uint16(263), + 8: uint16(264), + 9: uint16(265), + 10: uint16(266), + 11: uint16(267), + 12: uint16(268), + 13: uint16(269), + 14: uint16(270), + 15: uint16(271), + 16: uint16(272), + 17: uint16(273), + 18: uint16(274), + 19: uint16(275), + 20: uint16(278), + 21: uint16(279), + 22: uint16(280), + 23: uint16(281), + 24: uint16(282), + 25: uint16(283), + 26: uint16(284), + 27: uint16(285), + 28: uint16(286), + 29: uint16(287), + 30: uint16(288), + 31: uint16(289), + 32: uint16(290), + 33: uint16(291), + 34: uint16(292), + 35: uint16(293), + 36: uint16(294), + 37: uint16(295), + 38: uint16(296), + 39: uint16(297), + 40: uint16(298), + 41: uint16(299), + 42: uint16(302), + 43: uint16(303), + 44: uint16(304), + 45: uint16(305), + 46: uint16(308), + 47: uint16(309), + 48: uint16(310), + 49: uint16(311), + 50: uint16(312), + 51: uint16(313), + 52: uint16(314), + 53: uint16(315), + 54: uint16(316), + 55: uint16(317), + 56: uint16(318), + 57: uint16(321), + 58: uint16(322), + 59: uint16(323), + 60: uint16(324), + 61: uint16(325), + 62: uint16(326), + 63: uint16(327), + 64: uint16(328), + 65: uint16(330), + 66: uint16(331), + 67: uint16(332), + 68: uint16(333), + 69: uint16(336), + 70: uint16(337), + 71: uint16(338), + 72: uint16(339), + 73: uint16(340), + 74: uint16(341), + 75: uint16(342), + 76: uint16(343), + 77: uint16(344), + 78: uint16(345), + 79: uint16(346), + 80: uint16(347), + 81: uint16(348), + 82: uint16(349), + 83: uint16(350), + 84: uint16(351), + 85: uint16(352), + 86: uint16(353), + 87: uint16(354), + 88: uint16(355), + 89: uint16(356), + 90: uint16(357), + 91: uint16(358), + 92: uint16(359), + 93: uint16(360), + 94: uint16(361), + 95: uint16(362), + 96: uint16(363), + 97: uint16(364), + 98: uint16(365), + 99: uint16(366), + 100: uint16(367), + 101: uint16(368), + 102: uint16(369), + 103: uint16(370), + 104: uint16(371), + 105: uint16(372), + 106: uint16(373), + 107: uint16(374), + 108: uint16(375), + 109: uint16(376), + 110: uint16(377), + 111: uint16(378), + 112: uint16(379), + 113: uint16(380), + 114: uint16(381), + 115: uint16(382), + 116: uint16(402), + 117: uint16(416), + 118: uint16(417), + 119: uint16(431), + 120: uint16(432), + 121: uint16(536), + 122: uint16(537), + 123: uint16(538), + 124: uint16(539), + 125: uint16(710), + 126: uint16(711), + 127: uint16(728), + 128: uint16(729), + 129: uint16(731), + 130: uint16(732), + 131: uint16(733), + 132: uint16(768), + 133: uint16(769), + 134: uint16(771), + 135: uint16(777), + 136: uint16(803), + 137: uint16(890), + 138: uint16(900), + 139: uint16(901), + 140: uint16(902), + 141: uint16(904), + 142: uint16(905), + 143: uint16(906), + 144: uint16(908), + 145: uint16(910), + 146: uint16(911), + 147: uint16(912), + 148: uint16(913), + 149: uint16(914), + 150: uint16(915), + 151: uint16(916), + 152: uint16(917), + 153: uint16(918), + 154: uint16(919), + 155: uint16(920), + 156: uint16(921), + 157: uint16(922), + 158: uint16(923), + 159: uint16(924), + 160: uint16(925), + 161: uint16(926), + 162: uint16(927), + 163: uint16(928), + 164: uint16(929), + 165: uint16(931), + 166: uint16(932), + 167: uint16(933), + 168: uint16(934), + 169: uint16(935), + 170: uint16(936), + 171: uint16(937), + 172: uint16(938), + 173: uint16(939), + 174: uint16(940), + 175: uint16(941), + 176: uint16(942), + 177: uint16(943), + 178: uint16(944), + 179: uint16(945), + 180: uint16(946), + 181: uint16(947), + 182: uint16(948), + 183: uint16(949), + 184: uint16(950), + 185: uint16(951), + 186: uint16(952), + 187: uint16(953), + 188: uint16(954), + 189: uint16(955), + 190: uint16(956), + 191: uint16(957), + 192: uint16(958), + 193: uint16(959), + 194: uint16(960), + 195: uint16(961), + 196: uint16(962), + 197: uint16(963), + 198: uint16(964), + 199: uint16(965), + 200: uint16(966), + 201: uint16(967), + 202: uint16(968), + 203: uint16(969), + 204: uint16(970), + 205: uint16(971), + 206: uint16(972), + 207: uint16(973), + 208: uint16(974), + 209: uint16(1025), + 210: uint16(1026), + 211: uint16(1027), + 212: uint16(1028), + 213: uint16(1029), + 214: uint16(1030), + 215: uint16(1031), + 216: uint16(1032), + 217: uint16(1033), + 218: uint16(1034), + 219: uint16(1035), + 220: uint16(1036), + 221: uint16(1038), + 222: uint16(1039), + 223: uint16(1040), + 224: uint16(1041), + 225: uint16(1042), + 226: uint16(1043), + 227: uint16(1044), + 228: uint16(1045), + 229: uint16(1046), + 230: uint16(1047), + 231: uint16(1048), + 232: uint16(1049), + 233: uint16(1050), + 234: uint16(1051), + 235: uint16(1052), + 236: uint16(1053), + 237: uint16(1054), + 238: uint16(1055), + 239: uint16(1056), + 240: uint16(1057), + 241: uint16(1058), + 242: uint16(1059), + 243: uint16(1060), + 244: uint16(1061), + 245: uint16(1062), + 246: uint16(1063), + 247: uint16(1064), + 248: uint16(1065), + 249: uint16(1066), + 250: uint16(1067), + 251: uint16(1068), + 252: uint16(1069), + 253: uint16(1070), + 254: uint16(1071), + 255: uint16(1072), + 256: uint16(1073), + 257: uint16(1074), + 258: uint16(1075), + 259: uint16(1076), + 260: uint16(1077), + 261: uint16(1078), + 262: uint16(1079), + 263: uint16(1080), + 264: uint16(1081), + 265: uint16(1082), + 266: uint16(1083), + 267: uint16(1084), + 268: uint16(1085), + 269: uint16(1086), + 270: uint16(1087), + 271: uint16(1088), + 272: uint16(1089), + 273: uint16(1090), + 274: uint16(1091), + 275: uint16(1092), + 276: uint16(1093), + 277: uint16(1094), + 278: uint16(1095), + 279: uint16(1096), + 280: uint16(1097), + 281: uint16(1098), + 282: uint16(1099), + 283: uint16(1100), + 284: uint16(1101), + 285: uint16(1102), + 286: uint16(1103), + 287: uint16(1105), + 288: uint16(1106), + 289: uint16(1107), + 290: uint16(1108), + 291: uint16(1109), + 292: uint16(1110), + 293: uint16(1111), + 294: uint16(1112), + 295: uint16(1113), + 296: uint16(1114), + 297: uint16(1115), + 298: uint16(1116), + 299: uint16(1118), + 300: uint16(1119), + 301: uint16(1168), + 302: uint16(1169), + 303: uint16(1456), + 304: uint16(1457), + 305: uint16(1458), + 306: uint16(1459), + 307: uint16(1460), + 308: uint16(1461), + 309: uint16(1462), + 310: uint16(1463), + 311: uint16(1464), + 312: uint16(1465), + 313: uint16(1467), + 314: uint16(1468), + 315: uint16(1469), + 316: uint16(1470), + 317: uint16(1471), + 318: uint16(1472), + 319: uint16(1473), + 320: uint16(1474), + 321: uint16(1475), + 322: uint16(1488), + 323: uint16(1489), + 324: uint16(1490), + 325: uint16(1491), + 326: uint16(1492), + 327: uint16(1493), + 328: uint16(1494), + 329: uint16(1495), + 330: uint16(1496), + 331: uint16(1497), + 332: uint16(1498), + 333: uint16(1499), + 334: uint16(1500), + 335: uint16(1501), + 336: uint16(1502), + 337: uint16(1503), + 338: uint16(1504), + 339: uint16(1505), + 340: uint16(1506), + 341: uint16(1507), + 342: uint16(1508), + 343: uint16(1509), + 344: uint16(1510), + 345: uint16(1511), + 346: uint16(1512), + 347: uint16(1513), + 348: uint16(1514), + 349: uint16(1520), + 350: uint16(1521), + 351: uint16(1522), + 352: uint16(1523), + 353: uint16(1524), + 354: uint16(1548), + 355: uint16(1563), + 356: uint16(1567), + 357: uint16(1569), + 358: uint16(1570), + 359: uint16(1571), + 360: uint16(1572), + 361: uint16(1573), + 362: uint16(1574), + 363: uint16(1575), + 364: uint16(1576), + 365: uint16(1577), + 366: uint16(1578), + 367: uint16(1579), + 368: uint16(1580), + 369: uint16(1581), + 370: uint16(1582), + 371: uint16(1583), + 372: uint16(1584), + 373: uint16(1585), + 374: uint16(1586), + 375: uint16(1587), + 376: uint16(1588), + 377: uint16(1589), + 378: uint16(1590), + 379: uint16(1591), + 380: uint16(1592), + 381: uint16(1593), + 382: uint16(1594), + 383: uint16(1600), + 384: uint16(1601), + 385: uint16(1602), + 386: uint16(1603), + 387: uint16(1604), + 388: uint16(1605), + 389: uint16(1606), + 390: uint16(1607), + 391: uint16(1608), + 392: uint16(1609), + 393: uint16(1610), + 394: uint16(1611), + 395: uint16(1612), + 396: uint16(1613), + 397: uint16(1614), + 398: uint16(1615), + 399: uint16(1616), + 400: uint16(1617), + 401: uint16(1618), + 402: uint16(1657), + 403: uint16(1662), + 404: uint16(1670), + 405: uint16(1672), + 406: uint16(1681), + 407: uint16(1688), + 408: uint16(1705), + 409: uint16(1711), + 410: uint16(1722), + 411: uint16(1726), + 412: uint16(1729), + 413: uint16(1746), + 414: uint16(3585), + 415: uint16(3586), + 416: uint16(3587), + 417: uint16(3588), + 418: uint16(3589), + 419: uint16(3590), + 420: uint16(3591), + 421: uint16(3592), + 422: uint16(3593), + 423: uint16(3594), + 424: uint16(3595), + 425: uint16(3596), + 426: uint16(3597), + 427: uint16(3598), + 428: uint16(3599), + 429: uint16(3600), + 430: uint16(3601), + 431: uint16(3602), + 432: uint16(3603), + 433: uint16(3604), + 434: uint16(3605), + 435: uint16(3606), + 436: uint16(3607), + 437: uint16(3608), + 438: uint16(3609), + 439: uint16(3610), + 440: uint16(3611), + 441: uint16(3612), + 442: uint16(3613), + 443: uint16(3614), + 444: uint16(3615), + 445: uint16(3616), + 446: uint16(3617), + 447: uint16(3618), + 448: uint16(3619), + 449: uint16(3620), + 450: uint16(3621), + 451: uint16(3622), + 452: uint16(3623), + 453: uint16(3624), + 454: uint16(3625), + 455: uint16(3626), + 456: uint16(3627), + 457: uint16(3628), + 458: uint16(3629), + 459: uint16(3630), + 460: uint16(3631), + 461: uint16(3632), + 462: uint16(3633), + 463: uint16(3634), + 464: uint16(3635), + 465: uint16(3636), + 466: uint16(3637), + 467: uint16(3638), + 468: uint16(3639), + 469: uint16(3640), + 470: uint16(3641), + 471: uint16(3642), + 472: uint16(3647), + 473: uint16(3648), + 474: uint16(3649), + 475: uint16(3650), + 476: uint16(3651), + 477: uint16(3652), + 478: uint16(3653), + 479: uint16(3654), + 480: uint16(3655), + 481: uint16(3656), + 482: uint16(3657), + 483: uint16(3658), + 484: uint16(3659), + 485: uint16(3660), + 486: uint16(3661), + 487: uint16(3662), + 488: uint16(3663), + 489: uint16(3664), + 490: uint16(3665), + 491: uint16(3666), + 492: uint16(3667), + 493: uint16(3668), + 494: uint16(3669), + 495: uint16(3670), + 496: uint16(3671), + 497: uint16(3672), + 498: uint16(3673), + 499: uint16(3674), + 500: uint16(3675), + 501: uint16(7682), + 502: uint16(7683), + 503: uint16(7690), + 504: uint16(7691), + 505: uint16(7710), + 506: uint16(7711), + 507: uint16(7744), + 508: uint16(7745), + 509: uint16(7766), + 510: uint16(7767), + 511: uint16(7776), + 512: uint16(7777), + 513: uint16(7786), + 514: uint16(7787), + 515: uint16(7808), + 516: uint16(7809), + 517: uint16(7810), + 518: uint16(7811), + 519: uint16(7812), + 520: uint16(7813), + 521: uint16(7922), + 522: uint16(7923), + 523: uint16(8204), + 524: uint16(8205), + 525: uint16(8206), + 526: uint16(8207), + 527: uint16(8211), + 528: uint16(8212), + 529: uint16(8213), + 530: uint16(8215), + 531: uint16(8216), + 532: uint16(8217), + 533: uint16(8218), + 534: uint16(8220), + 535: uint16(8221), + 536: uint16(8222), + 537: uint16(8224), + 538: uint16(8225), + 539: uint16(8226), + 540: uint16(8230), + 541: uint16(8240), + 542: uint16(8249), + 543: uint16(8250), + 544: uint16(8319), + 545: uint16(8359), + 546: uint16(8362), + 547: uint16(8363), + 548: uint16(8364), + 549: uint16(8367), + 550: uint16(8470), + 551: uint16(8482), + 552: uint16(8729), + 553: uint16(8730), + 554: uint16(8734), + 555: uint16(8745), + 556: uint16(8776), + 557: uint16(8801), + 558: uint16(8804), + 559: uint16(8805), + 560: uint16(8976), + 561: uint16(8992), + 562: uint16(8993), + 563: uint16(9472), + 564: uint16(9474), + 565: uint16(9484), + 566: uint16(9488), + 567: uint16(9492), + 568: uint16(9496), + 569: uint16(9500), + 570: uint16(9508), + 571: uint16(9516), + 572: uint16(9524), + 573: uint16(9532), + 574: uint16(9552), + 575: uint16(9553), + 576: uint16(9554), + 577: uint16(9555), + 578: uint16(9556), + 579: uint16(9557), + 580: uint16(9558), + 581: uint16(9559), + 582: uint16(9560), + 583: uint16(9561), + 584: uint16(9562), + 585: uint16(9563), + 586: uint16(9564), + 587: uint16(9565), + 588: uint16(9566), + 589: uint16(9567), + 590: uint16(9568), + 591: uint16(9569), + 592: uint16(9570), + 593: uint16(9571), + 594: uint16(9572), + 595: uint16(9573), + 596: uint16(9574), + 597: uint16(9575), + 598: uint16(9576), + 599: uint16(9577), + 600: uint16(9578), + 601: uint16(9579), + 602: uint16(9580), + 603: uint16(9600), + 604: uint16(9604), + 605: uint16(9608), + 606: uint16(9612), + 607: uint16(9616), + 608: uint16(9617), + 609: uint16(9618), + 610: uint16(9619), + 611: uint16(9632), +} + +var _jis0208 = [84][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(65292), + 4: uint16(65294), + 5: uint16(12539), + 6: uint16(65306), + 7: uint16(65307), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(12443), + 11: uint16(12444), + 12: uint16(180), + 13: uint16(65344), + 14: uint16(168), + 15: uint16(65342), + 16: uint16(65507), + 17: uint16(65343), + 18: uint16(12541), + 19: uint16(12542), + 20: uint16(12445), + 21: uint16(12446), + 22: uint16(12291), + 23: uint16(20189), + 24: uint16(12293), + 25: uint16(12294), + 26: uint16(12295), + 27: uint16(12540), + 28: uint16(8213), + 29: uint16(8208), + 30: uint16(65295), + 31: uint16(92), + 32: uint16(12316), + 33: uint16(8214), + 34: uint16(65372), + 35: uint16(8230), + 36: uint16(8229), + 37: uint16(8216), + 38: uint16(8217), + 39: uint16(8220), + 40: uint16(8221), + 41: uint16(65288), + 42: uint16(65289), + 43: uint16(12308), + 44: uint16(12309), + 45: uint16(65339), + 46: uint16(65341), + 47: uint16(65371), + 48: uint16(65373), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(12298), + 52: uint16(12299), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(12302), + 56: uint16(12303), + 57: uint16(12304), + 58: uint16(12305), + 59: uint16(65291), + 60: uint16(8722), + 61: uint16(177), + 62: uint16(215), + 63: uint16(247), + 64: uint16(65309), + 65: uint16(8800), + 66: uint16(65308), + 67: uint16(65310), + 68: uint16(8806), + 69: uint16(8807), + 70: uint16(8734), + 71: uint16(8756), + 72: uint16(9794), + 73: uint16(9792), + 74: uint16(176), + 75: uint16(8242), + 76: uint16(8243), + 77: uint16(8451), + 78: uint16(65509), + 79: uint16(65284), + 80: uint16(162), + 81: uint16(163), + 82: uint16(65285), + 83: uint16(65283), + 84: uint16(65286), + 85: uint16(65290), + 86: uint16(65312), + 87: uint16(167), + 88: uint16(9734), + 89: uint16(9733), + 90: uint16(9675), + 91: uint16(9679), + 92: uint16(9678), + 93: uint16(9671), + }, + 1: { + 0: uint16(9670), + 1: uint16(9633), + 2: uint16(9632), + 3: uint16(9651), + 4: uint16(9650), + 5: uint16(9661), + 6: uint16(9660), + 7: uint16(8251), + 8: uint16(12306), + 9: uint16(8594), + 10: uint16(8592), + 11: uint16(8593), + 12: uint16(8595), + 13: uint16(12307), + 25: uint16(8712), + 26: uint16(8715), + 27: uint16(8838), + 28: uint16(8839), + 29: uint16(8834), + 30: uint16(8835), + 31: uint16(8746), + 32: uint16(8745), + 41: uint16(8743), + 42: uint16(8744), + 43: uint16(172), + 44: uint16(8658), + 45: uint16(8660), + 46: uint16(8704), + 47: uint16(8707), + 59: uint16(8736), + 60: uint16(8869), + 61: uint16(8978), + 62: uint16(8706), + 63: uint16(8711), + 64: uint16(8801), + 65: uint16(8786), + 66: uint16(8810), + 67: uint16(8811), + 68: uint16(8730), + 69: uint16(8765), + 70: uint16(8733), + 71: uint16(8757), + 72: uint16(8747), + 73: uint16(8748), + 81: uint16(8491), + 82: uint16(8240), + 83: uint16(9839), + 84: uint16(9837), + 85: uint16(9834), + 86: uint16(8224), + 87: uint16(8225), + 88: uint16(182), + 93: uint16(9711), + }, + 2: { + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + }, + 3: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 4: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 5: { + 0: uint16(913), + 1: uint16(914), + 2: uint16(915), + 3: uint16(916), + 4: uint16(917), + 5: uint16(918), + 6: uint16(919), + 7: uint16(920), + 8: uint16(921), + 9: uint16(922), + 10: uint16(923), + 11: uint16(924), + 12: uint16(925), + 13: uint16(926), + 14: uint16(927), + 15: uint16(928), + 16: uint16(929), + 17: uint16(931), + 18: uint16(932), + 19: uint16(933), + 20: uint16(934), + 21: uint16(935), + 22: uint16(936), + 23: uint16(937), + 32: uint16(945), + 33: uint16(946), + 34: uint16(947), + 35: uint16(948), + 36: uint16(949), + 37: uint16(950), + 38: uint16(951), + 39: uint16(952), + 40: uint16(953), + 41: uint16(954), + 42: uint16(955), + 43: uint16(956), + 44: uint16(957), + 45: uint16(958), + 46: uint16(959), + 47: uint16(960), + 48: uint16(961), + 49: uint16(963), + 50: uint16(964), + 51: uint16(965), + 52: uint16(966), + 53: uint16(967), + 54: uint16(968), + 55: uint16(969), + }, + 6: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 7: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + }, + 8: {}, + 9: {}, + 10: {}, + 11: {}, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(20124), + 1: uint16(21782), + 2: uint16(23043), + 3: uint16(38463), + 4: uint16(21696), + 5: uint16(24859), + 6: uint16(25384), + 7: uint16(23030), + 8: uint16(36898), + 9: uint16(33909), + 10: uint16(33564), + 11: uint16(31312), + 12: uint16(24746), + 13: uint16(25569), + 14: uint16(28197), + 15: uint16(26093), + 16: uint16(33894), + 17: uint16(33446), + 18: uint16(39925), + 19: uint16(26771), + 20: uint16(22311), + 21: uint16(26017), + 22: uint16(25201), + 23: uint16(23451), + 24: uint16(22992), + 25: uint16(34427), + 26: uint16(39156), + 27: uint16(32098), + 28: uint16(32190), + 29: uint16(39822), + 30: uint16(25110), + 31: uint16(31903), + 32: uint16(34999), + 33: uint16(23433), + 34: uint16(24245), + 35: uint16(25353), + 36: uint16(26263), + 37: uint16(26696), + 38: uint16(38343), + 39: uint16(38797), + 40: uint16(26447), + 41: uint16(20197), + 42: uint16(20234), + 43: uint16(20301), + 44: uint16(20381), + 45: uint16(20553), + 46: uint16(22258), + 47: uint16(22839), + 48: uint16(22996), + 49: uint16(23041), + 50: uint16(23561), + 51: uint16(24799), + 52: uint16(24847), + 53: uint16(24944), + 54: uint16(26131), + 55: uint16(26885), + 56: uint16(28858), + 57: uint16(30031), + 58: uint16(30064), + 59: uint16(31227), + 60: uint16(32173), + 61: uint16(32239), + 62: uint16(32963), + 63: uint16(33806), + 64: uint16(34915), + 65: uint16(35586), + 66: uint16(36949), + 67: uint16(36986), + 68: uint16(21307), + 69: uint16(20117), + 70: uint16(20133), + 71: uint16(22495), + 72: uint16(32946), + 73: uint16(37057), + 74: uint16(30959), + 75: uint16(19968), + 76: uint16(22769), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(31282), + 80: uint16(33576), + 81: uint16(33419), + 82: uint16(39983), + 83: uint16(20801), + 84: uint16(21360), + 85: uint16(21693), + 86: uint16(21729), + 87: uint16(22240), + 88: uint16(23035), + 89: uint16(24341), + 90: uint16(39154), + 91: uint16(28139), + 92: uint16(32996), + 93: uint16(34093), + }, + 16: { + 0: uint16(38498), + 1: uint16(38512), + 2: uint16(38560), + 3: uint16(38907), + 4: uint16(21515), + 5: uint16(21491), + 6: uint16(23431), + 7: uint16(28879), + 8: uint16(32701), + 9: uint16(36802), + 10: uint16(38632), + 11: uint16(21359), + 12: uint16(40284), + 13: uint16(31418), + 14: uint16(19985), + 15: uint16(30867), + 16: uint16(33276), + 17: uint16(28198), + 18: uint16(22040), + 19: uint16(21764), + 20: uint16(27421), + 21: uint16(34074), + 22: uint16(39995), + 23: uint16(23013), + 24: uint16(21417), + 25: uint16(28006), + 26: uint16(29916), + 27: uint16(38287), + 28: uint16(22082), + 29: uint16(20113), + 30: uint16(36939), + 31: uint16(38642), + 32: uint16(33615), + 33: uint16(39180), + 34: uint16(21473), + 35: uint16(21942), + 36: uint16(23344), + 37: uint16(24433), + 38: uint16(26144), + 39: uint16(26355), + 40: uint16(26628), + 41: uint16(27704), + 42: uint16(27891), + 43: uint16(27945), + 44: uint16(29787), + 45: uint16(30408), + 46: uint16(31310), + 47: uint16(38964), + 48: uint16(33521), + 49: uint16(34907), + 50: uint16(35424), + 51: uint16(37613), + 52: uint16(28082), + 53: uint16(30123), + 54: uint16(30410), + 55: uint16(39365), + 56: uint16(24742), + 57: uint16(35585), + 58: uint16(36234), + 59: uint16(38322), + 60: uint16(27022), + 61: uint16(21421), + 62: uint16(20870), + 63: uint16(22290), + 64: uint16(22576), + 65: uint16(22852), + 66: uint16(23476), + 67: uint16(24310), + 68: uint16(24616), + 69: uint16(25513), + 70: uint16(25588), + 71: uint16(27839), + 72: uint16(28436), + 73: uint16(28814), + 74: uint16(28948), + 75: uint16(29017), + 76: uint16(29141), + 77: uint16(29503), + 78: uint16(32257), + 79: uint16(33398), + 80: uint16(33489), + 81: uint16(34199), + 82: uint16(36960), + 83: uint16(37467), + 84: uint16(40219), + 85: uint16(22633), + 86: uint16(26044), + 87: uint16(27738), + 88: uint16(29989), + 89: uint16(20985), + 90: uint16(22830), + 91: uint16(22885), + 92: uint16(24448), + 93: uint16(24540), + }, + 17: { + 0: uint16(25276), + 1: uint16(26106), + 2: uint16(27178), + 3: uint16(27431), + 4: uint16(27572), + 5: uint16(29579), + 6: uint16(32705), + 7: uint16(35158), + 8: uint16(40236), + 9: uint16(40206), + 10: uint16(40644), + 11: uint16(23713), + 12: uint16(27798), + 13: uint16(33659), + 14: uint16(20740), + 15: uint16(23627), + 16: uint16(25014), + 17: uint16(33222), + 18: uint16(26742), + 19: uint16(29281), + 20: uint16(20057), + 21: uint16(20474), + 22: uint16(21368), + 23: uint16(24681), + 24: uint16(28201), + 25: uint16(31311), + 26: uint16(38899), + 27: uint16(19979), + 28: uint16(21270), + 29: uint16(20206), + 30: uint16(20309), + 31: uint16(20285), + 32: uint16(20385), + 33: uint16(20339), + 34: uint16(21152), + 35: uint16(21487), + 36: uint16(22025), + 37: uint16(22799), + 38: uint16(23233), + 39: uint16(23478), + 40: uint16(23521), + 41: uint16(31185), + 42: uint16(26247), + 43: uint16(26524), + 44: uint16(26550), + 45: uint16(27468), + 46: uint16(27827), + 47: uint16(28779), + 48: uint16(29634), + 49: uint16(31117), + 50: uint16(31166), + 51: uint16(31292), + 52: uint16(31623), + 53: uint16(33457), + 54: uint16(33499), + 55: uint16(33540), + 56: uint16(33655), + 57: uint16(33775), + 58: uint16(33747), + 59: uint16(34662), + 60: uint16(35506), + 61: uint16(22057), + 62: uint16(36008), + 63: uint16(36838), + 64: uint16(36942), + 65: uint16(38686), + 66: uint16(34442), + 67: uint16(20420), + 68: uint16(23784), + 69: uint16(25105), + 70: uint16(29273), + 71: uint16(30011), + 72: uint16(33253), + 73: uint16(33469), + 74: uint16(34558), + 75: uint16(36032), + 76: uint16(38597), + 77: uint16(39187), + 78: uint16(39381), + 79: uint16(20171), + 80: uint16(20250), + 81: uint16(35299), + 82: uint16(22238), + 83: uint16(22602), + 84: uint16(22730), + 85: uint16(24315), + 86: uint16(24555), + 87: uint16(24618), + 88: uint16(24724), + 89: uint16(24674), + 90: uint16(25040), + 91: uint16(25106), + 92: uint16(25296), + 93: uint16(25913), + }, + 18: { + 0: uint16(39745), + 1: uint16(26214), + 2: uint16(26800), + 3: uint16(28023), + 4: uint16(28784), + 5: uint16(30028), + 6: uint16(30342), + 7: uint16(32117), + 8: uint16(33445), + 9: uint16(34809), + 10: uint16(38283), + 11: uint16(38542), + 12: uint16(35997), + 13: uint16(20977), + 14: uint16(21182), + 15: uint16(22806), + 16: uint16(21683), + 17: uint16(23475), + 18: uint16(23830), + 19: uint16(24936), + 20: uint16(27010), + 21: uint16(28079), + 22: uint16(30861), + 23: uint16(33995), + 24: uint16(34903), + 25: uint16(35442), + 26: uint16(37799), + 27: uint16(39608), + 28: uint16(28012), + 29: uint16(39336), + 30: uint16(34521), + 31: uint16(22435), + 32: uint16(26623), + 33: uint16(34510), + 34: uint16(37390), + 35: uint16(21123), + 36: uint16(22151), + 37: uint16(21508), + 38: uint16(24275), + 39: uint16(25313), + 40: uint16(25785), + 41: uint16(26684), + 42: uint16(26680), + 43: uint16(27579), + 44: uint16(29554), + 45: uint16(30906), + 46: uint16(31339), + 47: uint16(35226), + 48: uint16(35282), + 49: uint16(36203), + 50: uint16(36611), + 51: uint16(37101), + 52: uint16(38307), + 53: uint16(38548), + 54: uint16(38761), + 55: uint16(23398), + 56: uint16(23731), + 57: uint16(27005), + 58: uint16(38989), + 59: uint16(38990), + 60: uint16(25499), + 61: uint16(31520), + 62: uint16(27179), + 63: uint16(27263), + 64: uint16(26806), + 65: uint16(39949), + 66: uint16(28511), + 67: uint16(21106), + 68: uint16(21917), + 69: uint16(24688), + 70: uint16(25324), + 71: uint16(27963), + 72: uint16(28167), + 73: uint16(28369), + 74: uint16(33883), + 75: uint16(35088), + 76: uint16(36676), + 77: uint16(19988), + 78: uint16(39993), + 79: uint16(21494), + 80: uint16(26907), + 81: uint16(27194), + 82: uint16(38788), + 83: uint16(26666), + 84: uint16(20828), + 85: uint16(31427), + 86: uint16(33970), + 87: uint16(37340), + 88: uint16(37772), + 89: uint16(22107), + 90: uint16(40232), + 91: uint16(26658), + 92: uint16(33541), + 93: uint16(33841), + }, + 19: { + 0: uint16(31909), + 1: uint16(21000), + 2: uint16(33477), + 3: uint16(29926), + 4: uint16(20094), + 5: uint16(20355), + 6: uint16(20896), + 7: uint16(23506), + 8: uint16(21002), + 9: uint16(21208), + 10: uint16(21223), + 11: uint16(24059), + 12: uint16(21914), + 13: uint16(22570), + 14: uint16(23014), + 15: uint16(23436), + 16: uint16(23448), + 17: uint16(23515), + 18: uint16(24178), + 19: uint16(24185), + 20: uint16(24739), + 21: uint16(24863), + 22: uint16(24931), + 23: uint16(25022), + 24: uint16(25563), + 25: uint16(25954), + 26: uint16(26577), + 27: uint16(26707), + 28: uint16(26874), + 29: uint16(27454), + 30: uint16(27475), + 31: uint16(27735), + 32: uint16(28450), + 33: uint16(28567), + 34: uint16(28485), + 35: uint16(29872), + 36: uint16(29976), + 37: uint16(30435), + 38: uint16(30475), + 39: uint16(31487), + 40: uint16(31649), + 41: uint16(31777), + 42: uint16(32233), + 43: uint16(32566), + 44: uint16(32752), + 45: uint16(32925), + 46: uint16(33382), + 47: uint16(33694), + 48: uint16(35251), + 49: uint16(35532), + 50: uint16(36011), + 51: uint16(36996), + 52: uint16(37969), + 53: uint16(38291), + 54: uint16(38289), + 55: uint16(38306), + 56: uint16(38501), + 57: uint16(38867), + 58: uint16(39208), + 59: uint16(33304), + 60: uint16(20024), + 61: uint16(21547), + 62: uint16(23736), + 63: uint16(24012), + 64: uint16(29609), + 65: uint16(30284), + 66: uint16(30524), + 67: uint16(23721), + 68: uint16(32747), + 69: uint16(36107), + 70: uint16(38593), + 71: uint16(38929), + 72: uint16(38996), + 73: uint16(39000), + 74: uint16(20225), + 75: uint16(20238), + 76: uint16(21361), + 77: uint16(21916), + 78: uint16(22120), + 79: uint16(22522), + 80: uint16(22855), + 81: uint16(23305), + 82: uint16(23492), + 83: uint16(23696), + 84: uint16(24076), + 85: uint16(24190), + 86: uint16(24524), + 87: uint16(25582), + 88: uint16(26426), + 89: uint16(26071), + 90: uint16(26082), + 91: uint16(26399), + 92: uint16(26827), + 93: uint16(26820), + }, + 20: { + 0: uint16(27231), + 1: uint16(24112), + 2: uint16(27589), + 3: uint16(27671), + 4: uint16(27773), + 5: uint16(30079), + 6: uint16(31048), + 7: uint16(23395), + 8: uint16(31232), + 9: uint16(32000), + 10: uint16(24509), + 11: uint16(35215), + 12: uint16(35352), + 13: uint16(36020), + 14: uint16(36215), + 15: uint16(36556), + 16: uint16(36637), + 17: uint16(39138), + 18: uint16(39438), + 19: uint16(39740), + 20: uint16(20096), + 21: uint16(20605), + 22: uint16(20736), + 23: uint16(22931), + 24: uint16(23452), + 25: uint16(25135), + 26: uint16(25216), + 27: uint16(25836), + 28: uint16(27450), + 29: uint16(29344), + 30: uint16(30097), + 31: uint16(31047), + 32: uint16(32681), + 33: uint16(34811), + 34: uint16(35516), + 35: uint16(35696), + 36: uint16(25516), + 37: uint16(33738), + 38: uint16(38816), + 39: uint16(21513), + 40: uint16(21507), + 41: uint16(21931), + 42: uint16(26708), + 43: uint16(27224), + 44: uint16(35440), + 45: uint16(30759), + 46: uint16(26485), + 47: uint16(40653), + 48: uint16(21364), + 49: uint16(23458), + 50: uint16(33050), + 51: uint16(34384), + 52: uint16(36870), + 53: uint16(19992), + 54: uint16(20037), + 55: uint16(20167), + 56: uint16(20241), + 57: uint16(21450), + 58: uint16(21560), + 59: uint16(23470), + 60: uint16(24339), + 61: uint16(24613), + 62: uint16(25937), + 63: uint16(26429), + 64: uint16(27714), + 65: uint16(27762), + 66: uint16(27875), + 67: uint16(28792), + 68: uint16(29699), + 69: uint16(31350), + 70: uint16(31406), + 71: uint16(31496), + 72: uint16(32026), + 73: uint16(31998), + 74: uint16(32102), + 75: uint16(26087), + 76: uint16(29275), + 77: uint16(21435), + 78: uint16(23621), + 79: uint16(24040), + 80: uint16(25298), + 81: uint16(25312), + 82: uint16(25369), + 83: uint16(28192), + 84: uint16(34394), + 85: uint16(35377), + 86: uint16(36317), + 87: uint16(37624), + 88: uint16(28417), + 89: uint16(31142), + 90: uint16(39770), + 91: uint16(20136), + 92: uint16(20139), + 93: uint16(20140), + }, + 21: { + 0: uint16(20379), + 1: uint16(20384), + 2: uint16(20689), + 3: uint16(20807), + 4: uint16(31478), + 5: uint16(20849), + 6: uint16(20982), + 7: uint16(21332), + 8: uint16(21281), + 9: uint16(21375), + 10: uint16(21483), + 11: uint16(21932), + 12: uint16(22659), + 13: uint16(23777), + 14: uint16(24375), + 15: uint16(24394), + 16: uint16(24623), + 17: uint16(24656), + 18: uint16(24685), + 19: uint16(25375), + 20: uint16(25945), + 21: uint16(27211), + 22: uint16(27841), + 23: uint16(29378), + 24: uint16(29421), + 25: uint16(30703), + 26: uint16(33016), + 27: uint16(33029), + 28: uint16(33288), + 29: uint16(34126), + 30: uint16(37111), + 31: uint16(37857), + 32: uint16(38911), + 33: uint16(39255), + 34: uint16(39514), + 35: uint16(20208), + 36: uint16(20957), + 37: uint16(23597), + 38: uint16(26241), + 39: uint16(26989), + 40: uint16(23616), + 41: uint16(26354), + 42: uint16(26997), + 43: uint16(29577), + 44: uint16(26704), + 45: uint16(31873), + 46: uint16(20677), + 47: uint16(21220), + 48: uint16(22343), + 49: uint16(24062), + 50: uint16(37670), + 51: uint16(26020), + 52: uint16(27427), + 53: uint16(27453), + 54: uint16(29748), + 55: uint16(31105), + 56: uint16(31165), + 57: uint16(31563), + 58: uint16(32202), + 59: uint16(33465), + 60: uint16(33740), + 61: uint16(34943), + 62: uint16(35167), + 63: uint16(35641), + 64: uint16(36817), + 65: uint16(37329), + 66: uint16(21535), + 67: uint16(37504), + 68: uint16(20061), + 69: uint16(20534), + 70: uint16(21477), + 71: uint16(21306), + 72: uint16(29399), + 73: uint16(29590), + 74: uint16(30697), + 75: uint16(33510), + 76: uint16(36527), + 77: uint16(39366), + 78: uint16(39368), + 79: uint16(39378), + 80: uint16(20855), + 81: uint16(24858), + 82: uint16(34398), + 83: uint16(21936), + 84: uint16(31354), + 85: uint16(20598), + 86: uint16(23507), + 87: uint16(36935), + 88: uint16(38533), + 89: uint16(20018), + 90: uint16(27355), + 91: uint16(37351), + 92: uint16(23633), + 93: uint16(23624), + }, + 22: { + 0: uint16(25496), + 1: uint16(31391), + 2: uint16(27795), + 3: uint16(38772), + 4: uint16(36705), + 5: uint16(31402), + 6: uint16(29066), + 7: uint16(38536), + 8: uint16(31874), + 9: uint16(26647), + 10: uint16(32368), + 11: uint16(26705), + 12: uint16(37740), + 13: uint16(21234), + 14: uint16(21531), + 15: uint16(34219), + 16: uint16(35347), + 17: uint16(32676), + 18: uint16(36557), + 19: uint16(37089), + 20: uint16(21350), + 21: uint16(34952), + 22: uint16(31041), + 23: uint16(20418), + 24: uint16(20670), + 25: uint16(21009), + 26: uint16(20804), + 27: uint16(21843), + 28: uint16(22317), + 29: uint16(29674), + 30: uint16(22411), + 31: uint16(22865), + 32: uint16(24418), + 33: uint16(24452), + 34: uint16(24693), + 35: uint16(24950), + 36: uint16(24935), + 37: uint16(25001), + 38: uint16(25522), + 39: uint16(25658), + 40: uint16(25964), + 41: uint16(26223), + 42: uint16(26690), + 43: uint16(28179), + 44: uint16(30054), + 45: uint16(31293), + 46: uint16(31995), + 47: uint16(32076), + 48: uint16(32153), + 49: uint16(32331), + 50: uint16(32619), + 51: uint16(33550), + 52: uint16(33610), + 53: uint16(34509), + 54: uint16(35336), + 55: uint16(35427), + 56: uint16(35686), + 57: uint16(36605), + 58: uint16(38938), + 59: uint16(40335), + 60: uint16(33464), + 61: uint16(36814), + 62: uint16(39912), + 63: uint16(21127), + 64: uint16(25119), + 65: uint16(25731), + 66: uint16(28608), + 67: uint16(38553), + 68: uint16(26689), + 69: uint16(20625), + 70: uint16(27424), + 71: uint16(27770), + 72: uint16(28500), + 73: uint16(31348), + 74: uint16(32080), + 75: uint16(34880), + 76: uint16(35363), + 77: uint16(26376), + 78: uint16(20214), + 79: uint16(20537), + 80: uint16(20518), + 81: uint16(20581), + 82: uint16(20860), + 83: uint16(21048), + 84: uint16(21091), + 85: uint16(21927), + 86: uint16(22287), + 87: uint16(22533), + 88: uint16(23244), + 89: uint16(24314), + 90: uint16(25010), + 91: uint16(25080), + 92: uint16(25331), + 93: uint16(25458), + }, + 23: { + 0: uint16(26908), + 1: uint16(27177), + 2: uint16(29309), + 3: uint16(29356), + 4: uint16(29486), + 5: uint16(30740), + 6: uint16(30831), + 7: uint16(32121), + 8: uint16(30476), + 9: uint16(32937), + 10: uint16(35211), + 11: uint16(35609), + 12: uint16(36066), + 13: uint16(36562), + 14: uint16(36963), + 15: uint16(37749), + 16: uint16(38522), + 17: uint16(38997), + 18: uint16(39443), + 19: uint16(40568), + 20: uint16(20803), + 21: uint16(21407), + 22: uint16(21427), + 23: uint16(24187), + 24: uint16(24358), + 25: uint16(28187), + 26: uint16(28304), + 27: uint16(29572), + 28: uint16(29694), + 29: uint16(32067), + 30: uint16(33335), + 31: uint16(35328), + 32: uint16(35578), + 33: uint16(38480), + 34: uint16(20046), + 35: uint16(20491), + 36: uint16(21476), + 37: uint16(21628), + 38: uint16(22266), + 39: uint16(22993), + 40: uint16(23396), + 41: uint16(24049), + 42: uint16(24235), + 43: uint16(24359), + 44: uint16(25144), + 45: uint16(25925), + 46: uint16(26543), + 47: uint16(28246), + 48: uint16(29392), + 49: uint16(31946), + 50: uint16(34996), + 51: uint16(32929), + 52: uint16(32993), + 53: uint16(33776), + 54: uint16(34382), + 55: uint16(35463), + 56: uint16(36328), + 57: uint16(37431), + 58: uint16(38599), + 59: uint16(39015), + 60: uint16(40723), + 61: uint16(20116), + 62: uint16(20114), + 63: uint16(20237), + 64: uint16(21320), + 65: uint16(21577), + 66: uint16(21566), + 67: uint16(23087), + 68: uint16(24460), + 69: uint16(24481), + 70: uint16(24735), + 71: uint16(26791), + 72: uint16(27278), + 73: uint16(29786), + 74: uint16(30849), + 75: uint16(35486), + 76: uint16(35492), + 77: uint16(35703), + 78: uint16(37264), + 79: uint16(20062), + 80: uint16(39881), + 81: uint16(20132), + 82: uint16(20348), + 83: uint16(20399), + 84: uint16(20505), + 85: uint16(20502), + 86: uint16(20809), + 87: uint16(20844), + 88: uint16(21151), + 89: uint16(21177), + 90: uint16(21246), + 91: uint16(21402), + 92: uint16(21475), + 93: uint16(21521), + }, + 24: { + 0: uint16(21518), + 1: uint16(21897), + 2: uint16(22353), + 3: uint16(22434), + 4: uint16(22909), + 5: uint16(23380), + 6: uint16(23389), + 7: uint16(23439), + 8: uint16(24037), + 9: uint16(24039), + 10: uint16(24055), + 11: uint16(24184), + 12: uint16(24195), + 13: uint16(24218), + 14: uint16(24247), + 15: uint16(24344), + 16: uint16(24658), + 17: uint16(24908), + 18: uint16(25239), + 19: uint16(25304), + 20: uint16(25511), + 21: uint16(25915), + 22: uint16(26114), + 23: uint16(26179), + 24: uint16(26356), + 25: uint16(26477), + 26: uint16(26657), + 27: uint16(26775), + 28: uint16(27083), + 29: uint16(27743), + 30: uint16(27946), + 31: uint16(28009), + 32: uint16(28207), + 33: uint16(28317), + 34: uint16(30002), + 35: uint16(30343), + 36: uint16(30828), + 37: uint16(31295), + 38: uint16(31968), + 39: uint16(32005), + 40: uint16(32024), + 41: uint16(32094), + 42: uint16(32177), + 43: uint16(32789), + 44: uint16(32771), + 45: uint16(32943), + 46: uint16(32945), + 47: uint16(33108), + 48: uint16(33167), + 49: uint16(33322), + 50: uint16(33618), + 51: uint16(34892), + 52: uint16(34913), + 53: uint16(35611), + 54: uint16(36002), + 55: uint16(36092), + 56: uint16(37066), + 57: uint16(37237), + 58: uint16(37489), + 59: uint16(30783), + 60: uint16(37628), + 61: uint16(38308), + 62: uint16(38477), + 63: uint16(38917), + 64: uint16(39321), + 65: uint16(39640), + 66: uint16(40251), + 67: uint16(21083), + 68: uint16(21163), + 69: uint16(21495), + 70: uint16(21512), + 71: uint16(22741), + 72: uint16(25335), + 73: uint16(28640), + 74: uint16(35946), + 75: uint16(36703), + 76: uint16(40633), + 77: uint16(20811), + 78: uint16(21051), + 79: uint16(21578), + 80: uint16(22269), + 81: uint16(31296), + 82: uint16(37239), + 83: uint16(40288), + 84: uint16(40658), + 85: uint16(29508), + 86: uint16(28425), + 87: uint16(33136), + 88: uint16(29969), + 89: uint16(24573), + 90: uint16(24794), + 91: uint16(39592), + 92: uint16(29403), + 93: uint16(36796), + }, + 25: { + 0: uint16(27492), + 1: uint16(38915), + 2: uint16(20170), + 3: uint16(22256), + 4: uint16(22372), + 5: uint16(22718), + 6: uint16(23130), + 7: uint16(24680), + 8: uint16(25031), + 9: uint16(26127), + 10: uint16(26118), + 11: uint16(26681), + 12: uint16(26801), + 13: uint16(28151), + 14: uint16(30165), + 15: uint16(32058), + 16: uint16(33390), + 17: uint16(39746), + 18: uint16(20123), + 19: uint16(20304), + 20: uint16(21449), + 21: uint16(21766), + 22: uint16(23919), + 23: uint16(24038), + 24: uint16(24046), + 25: uint16(26619), + 26: uint16(27801), + 27: uint16(29811), + 28: uint16(30722), + 29: uint16(35408), + 30: uint16(37782), + 31: uint16(35039), + 32: uint16(22352), + 33: uint16(24231), + 34: uint16(25387), + 35: uint16(20661), + 36: uint16(20652), + 37: uint16(20877), + 38: uint16(26368), + 39: uint16(21705), + 40: uint16(22622), + 41: uint16(22971), + 42: uint16(23472), + 43: uint16(24425), + 44: uint16(25165), + 45: uint16(25505), + 46: uint16(26685), + 47: uint16(27507), + 48: uint16(28168), + 49: uint16(28797), + 50: uint16(37319), + 51: uint16(29312), + 52: uint16(30741), + 53: uint16(30758), + 54: uint16(31085), + 55: uint16(25998), + 56: uint16(32048), + 57: uint16(33756), + 58: uint16(35009), + 59: uint16(36617), + 60: uint16(38555), + 61: uint16(21092), + 62: uint16(22312), + 63: uint16(26448), + 64: uint16(32618), + 65: uint16(36001), + 66: uint16(20916), + 67: uint16(22338), + 68: uint16(38442), + 69: uint16(22586), + 70: uint16(27018), + 71: uint16(32948), + 72: uint16(21682), + 73: uint16(23822), + 74: uint16(22524), + 75: uint16(30869), + 76: uint16(40442), + 77: uint16(20316), + 78: uint16(21066), + 79: uint16(21643), + 80: uint16(25662), + 81: uint16(26152), + 82: uint16(26388), + 83: uint16(26613), + 84: uint16(31364), + 85: uint16(31574), + 86: uint16(32034), + 87: uint16(37679), + 88: uint16(26716), + 89: uint16(39853), + 90: uint16(31545), + 91: uint16(21273), + 92: uint16(20874), + 93: uint16(21047), + }, + 26: { + 0: uint16(23519), + 1: uint16(25334), + 2: uint16(25774), + 3: uint16(25830), + 4: uint16(26413), + 5: uint16(27578), + 6: uint16(34217), + 7: uint16(38609), + 8: uint16(30352), + 9: uint16(39894), + 10: uint16(25420), + 11: uint16(37638), + 12: uint16(39851), + 13: uint16(30399), + 14: uint16(26194), + 15: uint16(19977), + 16: uint16(20632), + 17: uint16(21442), + 18: uint16(23665), + 19: uint16(24808), + 20: uint16(25746), + 21: uint16(25955), + 22: uint16(26719), + 23: uint16(29158), + 24: uint16(29642), + 25: uint16(29987), + 26: uint16(31639), + 27: uint16(32386), + 28: uint16(34453), + 29: uint16(35715), + 30: uint16(36059), + 31: uint16(37240), + 32: uint16(39184), + 33: uint16(26028), + 34: uint16(26283), + 35: uint16(27531), + 36: uint16(20181), + 37: uint16(20180), + 38: uint16(20282), + 39: uint16(20351), + 40: uint16(21050), + 41: uint16(21496), + 42: uint16(21490), + 43: uint16(21987), + 44: uint16(22235), + 45: uint16(22763), + 46: uint16(22987), + 47: uint16(22985), + 48: uint16(23039), + 49: uint16(23376), + 50: uint16(23629), + 51: uint16(24066), + 52: uint16(24107), + 53: uint16(24535), + 54: uint16(24605), + 55: uint16(25351), + 56: uint16(25903), + 57: uint16(23388), + 58: uint16(26031), + 59: uint16(26045), + 60: uint16(26088), + 61: uint16(26525), + 62: uint16(27490), + 63: uint16(27515), + 64: uint16(27663), + 65: uint16(29509), + 66: uint16(31049), + 67: uint16(31169), + 68: uint16(31992), + 69: uint16(32025), + 70: uint16(32043), + 71: uint16(32930), + 72: uint16(33026), + 73: uint16(33267), + 74: uint16(35222), + 75: uint16(35422), + 76: uint16(35433), + 77: uint16(35430), + 78: uint16(35468), + 79: uint16(35566), + 80: uint16(36039), + 81: uint16(36060), + 82: uint16(38604), + 83: uint16(39164), + 84: uint16(27503), + 85: uint16(20107), + 86: uint16(20284), + 87: uint16(20365), + 88: uint16(20816), + 89: uint16(23383), + 90: uint16(23546), + 91: uint16(24904), + 92: uint16(25345), + 93: uint16(26178), + }, + 27: { + 0: uint16(27425), + 1: uint16(28363), + 2: uint16(27835), + 3: uint16(29246), + 4: uint16(29885), + 5: uint16(30164), + 6: uint16(30913), + 7: uint16(31034), + 8: uint16(32780), + 9: uint16(32819), + 10: uint16(33258), + 11: uint16(33940), + 12: uint16(36766), + 13: uint16(27728), + 14: uint16(40575), + 15: uint16(24335), + 16: uint16(35672), + 17: uint16(40235), + 18: uint16(31482), + 19: uint16(36600), + 20: uint16(23437), + 21: uint16(38635), + 22: uint16(19971), + 23: uint16(21489), + 24: uint16(22519), + 25: uint16(22833), + 26: uint16(23241), + 27: uint16(23460), + 28: uint16(24713), + 29: uint16(28287), + 30: uint16(28422), + 31: uint16(30142), + 32: uint16(36074), + 33: uint16(23455), + 34: uint16(34048), + 35: uint16(31712), + 36: uint16(20594), + 37: uint16(26612), + 38: uint16(33437), + 39: uint16(23649), + 40: uint16(34122), + 41: uint16(32286), + 42: uint16(33294), + 43: uint16(20889), + 44: uint16(23556), + 45: uint16(25448), + 46: uint16(36198), + 47: uint16(26012), + 48: uint16(29038), + 49: uint16(31038), + 50: uint16(32023), + 51: uint16(32773), + 52: uint16(35613), + 53: uint16(36554), + 54: uint16(36974), + 55: uint16(34503), + 56: uint16(37034), + 57: uint16(20511), + 58: uint16(21242), + 59: uint16(23610), + 60: uint16(26451), + 61: uint16(28796), + 62: uint16(29237), + 63: uint16(37196), + 64: uint16(37320), + 65: uint16(37675), + 66: uint16(33509), + 67: uint16(23490), + 68: uint16(24369), + 69: uint16(24825), + 70: uint16(20027), + 71: uint16(21462), + 72: uint16(23432), + 73: uint16(25163), + 74: uint16(26417), + 75: uint16(27530), + 76: uint16(29417), + 77: uint16(29664), + 78: uint16(31278), + 79: uint16(33131), + 80: uint16(36259), + 81: uint16(37202), + 82: uint16(39318), + 83: uint16(20754), + 84: uint16(21463), + 85: uint16(21610), + 86: uint16(23551), + 87: uint16(25480), + 88: uint16(27193), + 89: uint16(32172), + 90: uint16(38656), + 91: uint16(22234), + 92: uint16(21454), + 93: uint16(21608), + }, + 28: { + 0: uint16(23447), + 1: uint16(23601), + 2: uint16(24030), + 3: uint16(20462), + 4: uint16(24833), + 5: uint16(25342), + 6: uint16(27954), + 7: uint16(31168), + 8: uint16(31179), + 9: uint16(32066), + 10: uint16(32333), + 11: uint16(32722), + 12: uint16(33261), + 13: uint16(33311), + 14: uint16(33936), + 15: uint16(34886), + 16: uint16(35186), + 17: uint16(35728), + 18: uint16(36468), + 19: uint16(36655), + 20: uint16(36913), + 21: uint16(37195), + 22: uint16(37228), + 23: uint16(38598), + 24: uint16(37276), + 25: uint16(20160), + 26: uint16(20303), + 27: uint16(20805), + 28: uint16(21313), + 29: uint16(24467), + 30: uint16(25102), + 31: uint16(26580), + 32: uint16(27713), + 33: uint16(28171), + 34: uint16(29539), + 35: uint16(32294), + 36: uint16(37325), + 37: uint16(37507), + 38: uint16(21460), + 39: uint16(22809), + 40: uint16(23487), + 41: uint16(28113), + 42: uint16(31069), + 43: uint16(32302), + 44: uint16(31899), + 45: uint16(22654), + 46: uint16(29087), + 47: uint16(20986), + 48: uint16(34899), + 49: uint16(36848), + 50: uint16(20426), + 51: uint16(23803), + 52: uint16(26149), + 53: uint16(30636), + 54: uint16(31459), + 55: uint16(33308), + 56: uint16(39423), + 57: uint16(20934), + 58: uint16(24490), + 59: uint16(26092), + 60: uint16(26991), + 61: uint16(27529), + 62: uint16(28147), + 63: uint16(28310), + 64: uint16(28516), + 65: uint16(30462), + 66: uint16(32020), + 67: uint16(24033), + 68: uint16(36981), + 69: uint16(37255), + 70: uint16(38918), + 71: uint16(20966), + 72: uint16(21021), + 73: uint16(25152), + 74: uint16(26257), + 75: uint16(26329), + 76: uint16(28186), + 77: uint16(24246), + 78: uint16(32210), + 79: uint16(32626), + 80: uint16(26360), + 81: uint16(34223), + 82: uint16(34295), + 83: uint16(35576), + 84: uint16(21161), + 85: uint16(21465), + 86: uint16(22899), + 87: uint16(24207), + 88: uint16(24464), + 89: uint16(24661), + 90: uint16(37604), + 91: uint16(38500), + 92: uint16(20663), + 93: uint16(20767), + }, + 29: { + 0: uint16(21213), + 1: uint16(21280), + 2: uint16(21319), + 3: uint16(21484), + 4: uint16(21736), + 5: uint16(21830), + 6: uint16(21809), + 7: uint16(22039), + 8: uint16(22888), + 9: uint16(22974), + 10: uint16(23100), + 11: uint16(23477), + 12: uint16(23558), + 13: uint16(23567), + 14: uint16(23569), + 15: uint16(23578), + 16: uint16(24196), + 17: uint16(24202), + 18: uint16(24288), + 19: uint16(24432), + 20: uint16(25215), + 21: uint16(25220), + 22: uint16(25307), + 23: uint16(25484), + 24: uint16(25463), + 25: uint16(26119), + 26: uint16(26124), + 27: uint16(26157), + 28: uint16(26230), + 29: uint16(26494), + 30: uint16(26786), + 31: uint16(27167), + 32: uint16(27189), + 33: uint16(27836), + 34: uint16(28040), + 35: uint16(28169), + 36: uint16(28248), + 37: uint16(28988), + 38: uint16(28966), + 39: uint16(29031), + 40: uint16(30151), + 41: uint16(30465), + 42: uint16(30813), + 43: uint16(30977), + 44: uint16(31077), + 45: uint16(31216), + 46: uint16(31456), + 47: uint16(31505), + 48: uint16(31911), + 49: uint16(32057), + 50: uint16(32918), + 51: uint16(33750), + 52: uint16(33931), + 53: uint16(34121), + 54: uint16(34909), + 55: uint16(35059), + 56: uint16(35359), + 57: uint16(35388), + 58: uint16(35412), + 59: uint16(35443), + 60: uint16(35937), + 61: uint16(36062), + 62: uint16(37284), + 63: uint16(37478), + 64: uint16(37758), + 65: uint16(37912), + 66: uint16(38556), + 67: uint16(38808), + 68: uint16(19978), + 69: uint16(19976), + 70: uint16(19998), + 71: uint16(20055), + 72: uint16(20887), + 73: uint16(21104), + 74: uint16(22478), + 75: uint16(22580), + 76: uint16(22732), + 77: uint16(23330), + 78: uint16(24120), + 79: uint16(24773), + 80: uint16(25854), + 81: uint16(26465), + 82: uint16(26454), + 83: uint16(27972), + 84: uint16(29366), + 85: uint16(30067), + 86: uint16(31331), + 87: uint16(33976), + 88: uint16(35698), + 89: uint16(37304), + 90: uint16(37664), + 91: uint16(22065), + 92: uint16(22516), + 93: uint16(39166), + }, + 30: { + 0: uint16(25325), + 1: uint16(26893), + 2: uint16(27542), + 3: uint16(29165), + 4: uint16(32340), + 5: uint16(32887), + 6: uint16(33394), + 7: uint16(35302), + 8: uint16(39135), + 9: uint16(34645), + 10: uint16(36785), + 11: uint16(23611), + 12: uint16(20280), + 13: uint16(20449), + 14: uint16(20405), + 15: uint16(21767), + 16: uint16(23072), + 17: uint16(23517), + 18: uint16(23529), + 19: uint16(24515), + 20: uint16(24910), + 21: uint16(25391), + 22: uint16(26032), + 23: uint16(26187), + 24: uint16(26862), + 25: uint16(27035), + 26: uint16(28024), + 27: uint16(28145), + 28: uint16(30003), + 29: uint16(30137), + 30: uint16(30495), + 31: uint16(31070), + 32: uint16(31206), + 33: uint16(32051), + 34: uint16(33251), + 35: uint16(33455), + 36: uint16(34218), + 37: uint16(35242), + 38: uint16(35386), + 39: uint16(36523), + 40: uint16(36763), + 41: uint16(36914), + 42: uint16(37341), + 43: uint16(38663), + 44: uint16(20154), + 45: uint16(20161), + 46: uint16(20995), + 47: uint16(22645), + 48: uint16(22764), + 49: uint16(23563), + 50: uint16(29978), + 51: uint16(23613), + 52: uint16(33102), + 53: uint16(35338), + 54: uint16(36805), + 55: uint16(38499), + 56: uint16(38765), + 57: uint16(31525), + 58: uint16(35535), + 59: uint16(38920), + 60: uint16(37218), + 61: uint16(22259), + 62: uint16(21416), + 63: uint16(36887), + 64: uint16(21561), + 65: uint16(22402), + 66: uint16(24101), + 67: uint16(25512), + 68: uint16(27700), + 69: uint16(28810), + 70: uint16(30561), + 71: uint16(31883), + 72: uint16(32736), + 73: uint16(34928), + 74: uint16(36930), + 75: uint16(37204), + 76: uint16(37648), + 77: uint16(37656), + 78: uint16(38543), + 79: uint16(29790), + 80: uint16(39620), + 81: uint16(23815), + 82: uint16(23913), + 83: uint16(25968), + 84: uint16(26530), + 85: uint16(36264), + 86: uint16(38619), + 87: uint16(25454), + 88: uint16(26441), + 89: uint16(26905), + 90: uint16(33733), + 91: uint16(38935), + 92: uint16(38592), + 93: uint16(35070), + }, + 31: { + 0: uint16(28548), + 1: uint16(25722), + 2: uint16(23544), + 3: uint16(19990), + 4: uint16(28716), + 5: uint16(30045), + 6: uint16(26159), + 7: uint16(20932), + 8: uint16(21046), + 9: uint16(21218), + 10: uint16(22995), + 11: uint16(24449), + 12: uint16(24615), + 13: uint16(25104), + 14: uint16(25919), + 15: uint16(25972), + 16: uint16(26143), + 17: uint16(26228), + 18: uint16(26866), + 19: uint16(26646), + 20: uint16(27491), + 21: uint16(28165), + 22: uint16(29298), + 23: uint16(29983), + 24: uint16(30427), + 25: uint16(31934), + 26: uint16(32854), + 27: uint16(22768), + 28: uint16(35069), + 29: uint16(35199), + 30: uint16(35488), + 31: uint16(35475), + 32: uint16(35531), + 33: uint16(36893), + 34: uint16(37266), + 35: uint16(38738), + 36: uint16(38745), + 37: uint16(25993), + 38: uint16(31246), + 39: uint16(33030), + 40: uint16(38587), + 41: uint16(24109), + 42: uint16(24796), + 43: uint16(25114), + 44: uint16(26021), + 45: uint16(26132), + 46: uint16(26512), + 47: uint16(30707), + 48: uint16(31309), + 49: uint16(31821), + 50: uint16(32318), + 51: uint16(33034), + 52: uint16(36012), + 53: uint16(36196), + 54: uint16(36321), + 55: uint16(36447), + 56: uint16(30889), + 57: uint16(20999), + 58: uint16(25305), + 59: uint16(25509), + 60: uint16(25666), + 61: uint16(25240), + 62: uint16(35373), + 63: uint16(31363), + 64: uint16(31680), + 65: uint16(35500), + 66: uint16(38634), + 67: uint16(32118), + 68: uint16(33292), + 69: uint16(34633), + 70: uint16(20185), + 71: uint16(20808), + 72: uint16(21315), + 73: uint16(21344), + 74: uint16(23459), + 75: uint16(23554), + 76: uint16(23574), + 77: uint16(24029), + 78: uint16(25126), + 79: uint16(25159), + 80: uint16(25776), + 81: uint16(26643), + 82: uint16(26676), + 83: uint16(27849), + 84: uint16(27973), + 85: uint16(27927), + 86: uint16(26579), + 87: uint16(28508), + 88: uint16(29006), + 89: uint16(29053), + 90: uint16(26059), + 91: uint16(31359), + 92: uint16(31661), + 93: uint16(32218), + }, + 32: { + 0: uint16(32330), + 1: uint16(32680), + 2: uint16(33146), + 3: uint16(33307), + 4: uint16(33337), + 5: uint16(34214), + 6: uint16(35438), + 7: uint16(36046), + 8: uint16(36341), + 9: uint16(36984), + 10: uint16(36983), + 11: uint16(37549), + 12: uint16(37521), + 13: uint16(38275), + 14: uint16(39854), + 15: uint16(21069), + 16: uint16(21892), + 17: uint16(28472), + 18: uint16(28982), + 19: uint16(20840), + 20: uint16(31109), + 21: uint16(32341), + 22: uint16(33203), + 23: uint16(31950), + 24: uint16(22092), + 25: uint16(22609), + 26: uint16(23720), + 27: uint16(25514), + 28: uint16(26366), + 29: uint16(26365), + 30: uint16(26970), + 31: uint16(29401), + 32: uint16(30095), + 33: uint16(30094), + 34: uint16(30990), + 35: uint16(31062), + 36: uint16(31199), + 37: uint16(31895), + 38: uint16(32032), + 39: uint16(32068), + 40: uint16(34311), + 41: uint16(35380), + 42: uint16(38459), + 43: uint16(36961), + 44: uint16(40736), + 45: uint16(20711), + 46: uint16(21109), + 47: uint16(21452), + 48: uint16(21474), + 49: uint16(20489), + 50: uint16(21930), + 51: uint16(22766), + 52: uint16(22863), + 53: uint16(29245), + 54: uint16(23435), + 55: uint16(23652), + 56: uint16(21277), + 57: uint16(24803), + 58: uint16(24819), + 59: uint16(25436), + 60: uint16(25475), + 61: uint16(25407), + 62: uint16(25531), + 63: uint16(25805), + 64: uint16(26089), + 65: uint16(26361), + 66: uint16(24035), + 67: uint16(27085), + 68: uint16(27133), + 69: uint16(28437), + 70: uint16(29157), + 71: uint16(20105), + 72: uint16(30185), + 73: uint16(30456), + 74: uint16(31379), + 75: uint16(31967), + 76: uint16(32207), + 77: uint16(32156), + 78: uint16(32865), + 79: uint16(33609), + 80: uint16(33624), + 81: uint16(33900), + 82: uint16(33980), + 83: uint16(34299), + 84: uint16(35013), + 85: uint16(36208), + 86: uint16(36865), + 87: uint16(36973), + 88: uint16(37783), + 89: uint16(38684), + 90: uint16(39442), + 91: uint16(20687), + 92: uint16(22679), + 93: uint16(24974), + }, + 33: { + 0: uint16(33235), + 1: uint16(34101), + 2: uint16(36104), + 3: uint16(36896), + 4: uint16(20419), + 5: uint16(20596), + 6: uint16(21063), + 7: uint16(21363), + 8: uint16(24687), + 9: uint16(25417), + 10: uint16(26463), + 11: uint16(28204), + 12: uint16(36275), + 13: uint16(36895), + 14: uint16(20439), + 15: uint16(23646), + 16: uint16(36042), + 17: uint16(26063), + 18: uint16(32154), + 19: uint16(21330), + 20: uint16(34966), + 21: uint16(20854), + 22: uint16(25539), + 23: uint16(23384), + 24: uint16(23403), + 25: uint16(23562), + 26: uint16(25613), + 27: uint16(26449), + 28: uint16(36956), + 29: uint16(20182), + 30: uint16(22810), + 31: uint16(22826), + 32: uint16(27760), + 33: uint16(35409), + 34: uint16(21822), + 35: uint16(22549), + 36: uint16(22949), + 37: uint16(24816), + 38: uint16(25171), + 39: uint16(26561), + 40: uint16(33333), + 41: uint16(26965), + 42: uint16(38464), + 43: uint16(39364), + 44: uint16(39464), + 45: uint16(20307), + 46: uint16(22534), + 47: uint16(23550), + 48: uint16(32784), + 49: uint16(23729), + 50: uint16(24111), + 51: uint16(24453), + 52: uint16(24608), + 53: uint16(24907), + 54: uint16(25140), + 55: uint16(26367), + 56: uint16(27888), + 57: uint16(28382), + 58: uint16(32974), + 59: uint16(33151), + 60: uint16(33492), + 61: uint16(34955), + 62: uint16(36024), + 63: uint16(36864), + 64: uint16(36910), + 65: uint16(38538), + 66: uint16(40667), + 67: uint16(39899), + 68: uint16(20195), + 69: uint16(21488), + 70: uint16(22823), + 71: uint16(31532), + 72: uint16(37261), + 73: uint16(38988), + 74: uint16(40441), + 75: uint16(28381), + 76: uint16(28711), + 77: uint16(21331), + 78: uint16(21828), + 79: uint16(23429), + 80: uint16(25176), + 81: uint16(25246), + 82: uint16(25299), + 83: uint16(27810), + 84: uint16(28655), + 85: uint16(29730), + 86: uint16(35351), + 87: uint16(37944), + 88: uint16(28609), + 89: uint16(35582), + 90: uint16(33592), + 91: uint16(20967), + 92: uint16(34552), + 93: uint16(21482), + }, + 34: { + 0: uint16(21481), + 1: uint16(20294), + 2: uint16(36948), + 3: uint16(36784), + 4: uint16(22890), + 5: uint16(33073), + 6: uint16(24061), + 7: uint16(31466), + 8: uint16(36799), + 9: uint16(26842), + 10: uint16(35895), + 11: uint16(29432), + 12: uint16(40008), + 13: uint16(27197), + 14: uint16(35504), + 15: uint16(20025), + 16: uint16(21336), + 17: uint16(22022), + 18: uint16(22374), + 19: uint16(25285), + 20: uint16(25506), + 21: uint16(26086), + 22: uint16(27470), + 23: uint16(28129), + 24: uint16(28251), + 25: uint16(28845), + 26: uint16(30701), + 27: uint16(31471), + 28: uint16(31658), + 29: uint16(32187), + 30: uint16(32829), + 31: uint16(32966), + 32: uint16(34507), + 33: uint16(35477), + 34: uint16(37723), + 35: uint16(22243), + 36: uint16(22727), + 37: uint16(24382), + 38: uint16(26029), + 39: uint16(26262), + 40: uint16(27264), + 41: uint16(27573), + 42: uint16(30007), + 43: uint16(35527), + 44: uint16(20516), + 45: uint16(30693), + 46: uint16(22320), + 47: uint16(24347), + 48: uint16(24677), + 49: uint16(26234), + 50: uint16(27744), + 51: uint16(30196), + 52: uint16(31258), + 53: uint16(32622), + 54: uint16(33268), + 55: uint16(34584), + 56: uint16(36933), + 57: uint16(39347), + 58: uint16(31689), + 59: uint16(30044), + 60: uint16(31481), + 61: uint16(31569), + 62: uint16(33988), + 63: uint16(36880), + 64: uint16(31209), + 65: uint16(31378), + 66: uint16(33590), + 67: uint16(23265), + 68: uint16(30528), + 69: uint16(20013), + 70: uint16(20210), + 71: uint16(23449), + 72: uint16(24544), + 73: uint16(25277), + 74: uint16(26172), + 75: uint16(26609), + 76: uint16(27880), + 77: uint16(34411), + 78: uint16(34935), + 79: uint16(35387), + 80: uint16(37198), + 81: uint16(37619), + 82: uint16(39376), + 83: uint16(27159), + 84: uint16(28710), + 85: uint16(29482), + 86: uint16(33511), + 87: uint16(33879), + 88: uint16(36015), + 89: uint16(19969), + 90: uint16(20806), + 91: uint16(20939), + 92: uint16(21899), + 93: uint16(23541), + }, + 35: { + 0: uint16(24086), + 1: uint16(24115), + 2: uint16(24193), + 3: uint16(24340), + 4: uint16(24373), + 5: uint16(24427), + 6: uint16(24500), + 7: uint16(25074), + 8: uint16(25361), + 9: uint16(26274), + 10: uint16(26397), + 11: uint16(28526), + 12: uint16(29266), + 13: uint16(30010), + 14: uint16(30522), + 15: uint16(32884), + 16: uint16(33081), + 17: uint16(33144), + 18: uint16(34678), + 19: uint16(35519), + 20: uint16(35548), + 21: uint16(36229), + 22: uint16(36339), + 23: uint16(37530), + 24: uint16(38263), + 25: uint16(38914), + 26: uint16(40165), + 27: uint16(21189), + 28: uint16(25431), + 29: uint16(30452), + 30: uint16(26389), + 31: uint16(27784), + 32: uint16(29645), + 33: uint16(36035), + 34: uint16(37806), + 35: uint16(38515), + 36: uint16(27941), + 37: uint16(22684), + 38: uint16(26894), + 39: uint16(27084), + 40: uint16(36861), + 41: uint16(37786), + 42: uint16(30171), + 43: uint16(36890), + 44: uint16(22618), + 45: uint16(26626), + 46: uint16(25524), + 47: uint16(27131), + 48: uint16(20291), + 49: uint16(28460), + 50: uint16(26584), + 51: uint16(36795), + 52: uint16(34086), + 53: uint16(32180), + 54: uint16(37716), + 55: uint16(26943), + 56: uint16(28528), + 57: uint16(22378), + 58: uint16(22775), + 59: uint16(23340), + 60: uint16(32044), + 61: uint16(29226), + 62: uint16(21514), + 63: uint16(37347), + 64: uint16(40372), + 65: uint16(20141), + 66: uint16(20302), + 67: uint16(20572), + 68: uint16(20597), + 69: uint16(21059), + 70: uint16(35998), + 71: uint16(21576), + 72: uint16(22564), + 73: uint16(23450), + 74: uint16(24093), + 75: uint16(24213), + 76: uint16(24237), + 77: uint16(24311), + 78: uint16(24351), + 79: uint16(24716), + 80: uint16(25269), + 81: uint16(25402), + 82: uint16(25552), + 83: uint16(26799), + 84: uint16(27712), + 85: uint16(30855), + 86: uint16(31118), + 87: uint16(31243), + 88: uint16(32224), + 89: uint16(33351), + 90: uint16(35330), + 91: uint16(35558), + 92: uint16(36420), + 93: uint16(36883), + }, + 36: { + 0: uint16(37048), + 1: uint16(37165), + 2: uint16(37336), + 3: uint16(40718), + 4: uint16(27877), + 5: uint16(25688), + 6: uint16(25826), + 7: uint16(25973), + 8: uint16(28404), + 9: uint16(30340), + 10: uint16(31515), + 11: uint16(36969), + 12: uint16(37841), + 13: uint16(28346), + 14: uint16(21746), + 15: uint16(24505), + 16: uint16(25764), + 17: uint16(36685), + 18: uint16(36845), + 19: uint16(37444), + 20: uint16(20856), + 21: uint16(22635), + 22: uint16(22825), + 23: uint16(23637), + 24: uint16(24215), + 25: uint16(28155), + 26: uint16(32399), + 27: uint16(29980), + 28: uint16(36028), + 29: uint16(36578), + 30: uint16(39003), + 31: uint16(28857), + 32: uint16(20253), + 33: uint16(27583), + 34: uint16(28593), + 35: uint16(30000), + 36: uint16(38651), + 37: uint16(20814), + 38: uint16(21520), + 39: uint16(22581), + 40: uint16(22615), + 41: uint16(22956), + 42: uint16(23648), + 43: uint16(24466), + 44: uint16(26007), + 45: uint16(26460), + 46: uint16(28193), + 47: uint16(30331), + 48: uint16(33759), + 49: uint16(36077), + 50: uint16(36884), + 51: uint16(37117), + 52: uint16(37709), + 53: uint16(30757), + 54: uint16(30778), + 55: uint16(21162), + 56: uint16(24230), + 57: uint16(22303), + 58: uint16(22900), + 59: uint16(24594), + 60: uint16(20498), + 61: uint16(20826), + 62: uint16(20908), + 63: uint16(20941), + 64: uint16(20992), + 65: uint16(21776), + 66: uint16(22612), + 67: uint16(22616), + 68: uint16(22871), + 69: uint16(23445), + 70: uint16(23798), + 71: uint16(23947), + 72: uint16(24764), + 73: uint16(25237), + 74: uint16(25645), + 75: uint16(26481), + 76: uint16(26691), + 77: uint16(26812), + 78: uint16(26847), + 79: uint16(30423), + 80: uint16(28120), + 81: uint16(28271), + 82: uint16(28059), + 83: uint16(28783), + 84: uint16(29128), + 85: uint16(24403), + 86: uint16(30168), + 87: uint16(31095), + 88: uint16(31561), + 89: uint16(31572), + 90: uint16(31570), + 91: uint16(31958), + 92: uint16(32113), + 93: uint16(21040), + }, + 37: { + 0: uint16(33891), + 1: uint16(34153), + 2: uint16(34276), + 3: uint16(35342), + 4: uint16(35588), + 5: uint16(35910), + 6: uint16(36367), + 7: uint16(36867), + 8: uint16(36879), + 9: uint16(37913), + 10: uint16(38518), + 11: uint16(38957), + 12: uint16(39472), + 13: uint16(38360), + 14: uint16(20685), + 15: uint16(21205), + 16: uint16(21516), + 17: uint16(22530), + 18: uint16(23566), + 19: uint16(24999), + 20: uint16(25758), + 21: uint16(27934), + 22: uint16(30643), + 23: uint16(31461), + 24: uint16(33012), + 25: uint16(33796), + 26: uint16(36947), + 27: uint16(37509), + 28: uint16(23776), + 29: uint16(40199), + 30: uint16(21311), + 31: uint16(24471), + 32: uint16(24499), + 33: uint16(28060), + 34: uint16(29305), + 35: uint16(30563), + 36: uint16(31167), + 37: uint16(31716), + 38: uint16(27602), + 39: uint16(29420), + 40: uint16(35501), + 41: uint16(26627), + 42: uint16(27233), + 43: uint16(20984), + 44: uint16(31361), + 45: uint16(26932), + 46: uint16(23626), + 47: uint16(40182), + 48: uint16(33515), + 49: uint16(23493), + 50: uint16(37193), + 51: uint16(28702), + 52: uint16(22136), + 53: uint16(23663), + 54: uint16(24775), + 55: uint16(25958), + 56: uint16(27788), + 57: uint16(35930), + 58: uint16(36929), + 59: uint16(38931), + 60: uint16(21585), + 61: uint16(26311), + 62: uint16(37389), + 63: uint16(22856), + 64: uint16(37027), + 65: uint16(20869), + 66: uint16(20045), + 67: uint16(20970), + 68: uint16(34201), + 69: uint16(35598), + 70: uint16(28760), + 71: uint16(25466), + 72: uint16(37707), + 73: uint16(26978), + 74: uint16(39348), + 75: uint16(32260), + 76: uint16(30071), + 77: uint16(21335), + 78: uint16(26976), + 79: uint16(36575), + 80: uint16(38627), + 81: uint16(27741), + 82: uint16(20108), + 83: uint16(23612), + 84: uint16(24336), + 85: uint16(36841), + 86: uint16(21250), + 87: uint16(36049), + 88: uint16(32905), + 89: uint16(34425), + 90: uint16(24319), + 91: uint16(26085), + 92: uint16(20083), + 93: uint16(20837), + }, + 38: { + 0: uint16(22914), + 1: uint16(23615), + 2: uint16(38894), + 3: uint16(20219), + 4: uint16(22922), + 5: uint16(24525), + 6: uint16(35469), + 7: uint16(28641), + 8: uint16(31152), + 9: uint16(31074), + 10: uint16(23527), + 11: uint16(33905), + 12: uint16(29483), + 13: uint16(29105), + 14: uint16(24180), + 15: uint16(24565), + 16: uint16(25467), + 17: uint16(25754), + 18: uint16(29123), + 19: uint16(31896), + 20: uint16(20035), + 21: uint16(24316), + 22: uint16(20043), + 23: uint16(22492), + 24: uint16(22178), + 25: uint16(24745), + 26: uint16(28611), + 27: uint16(32013), + 28: uint16(33021), + 29: uint16(33075), + 30: uint16(33215), + 31: uint16(36786), + 32: uint16(35223), + 33: uint16(34468), + 34: uint16(24052), + 35: uint16(25226), + 36: uint16(25773), + 37: uint16(35207), + 38: uint16(26487), + 39: uint16(27874), + 40: uint16(27966), + 41: uint16(29750), + 42: uint16(30772), + 43: uint16(23110), + 44: uint16(32629), + 45: uint16(33453), + 46: uint16(39340), + 47: uint16(20467), + 48: uint16(24259), + 49: uint16(25309), + 50: uint16(25490), + 51: uint16(25943), + 52: uint16(26479), + 53: uint16(30403), + 54: uint16(29260), + 55: uint16(32972), + 56: uint16(32954), + 57: uint16(36649), + 58: uint16(37197), + 59: uint16(20493), + 60: uint16(22521), + 61: uint16(23186), + 62: uint16(26757), + 63: uint16(26995), + 64: uint16(29028), + 65: uint16(29437), + 66: uint16(36023), + 67: uint16(22770), + 68: uint16(36064), + 69: uint16(38506), + 70: uint16(36889), + 71: uint16(34687), + 72: uint16(31204), + 73: uint16(30695), + 74: uint16(33833), + 75: uint16(20271), + 76: uint16(21093), + 77: uint16(21338), + 78: uint16(25293), + 79: uint16(26575), + 80: uint16(27850), + 81: uint16(30333), + 82: uint16(31636), + 83: uint16(31893), + 84: uint16(33334), + 85: uint16(34180), + 86: uint16(36843), + 87: uint16(26333), + 88: uint16(28448), + 89: uint16(29190), + 90: uint16(32283), + 91: uint16(33707), + 92: uint16(39361), + 93: uint16(40614), + }, + 39: { + 0: uint16(20989), + 1: uint16(31665), + 2: uint16(30834), + 3: uint16(31672), + 4: uint16(32903), + 5: uint16(31560), + 6: uint16(27368), + 7: uint16(24161), + 8: uint16(32908), + 9: uint16(30033), + 10: uint16(30048), + 11: uint16(20843), + 12: uint16(37474), + 13: uint16(28300), + 14: uint16(30330), + 15: uint16(37271), + 16: uint16(39658), + 17: uint16(20240), + 18: uint16(32624), + 19: uint16(25244), + 20: uint16(31567), + 21: uint16(38309), + 22: uint16(40169), + 23: uint16(22138), + 24: uint16(22617), + 25: uint16(34532), + 26: uint16(38588), + 27: uint16(20276), + 28: uint16(21028), + 29: uint16(21322), + 30: uint16(21453), + 31: uint16(21467), + 32: uint16(24070), + 33: uint16(25644), + 34: uint16(26001), + 35: uint16(26495), + 36: uint16(27710), + 37: uint16(27726), + 38: uint16(29256), + 39: uint16(29359), + 40: uint16(29677), + 41: uint16(30036), + 42: uint16(32321), + 43: uint16(33324), + 44: uint16(34281), + 45: uint16(36009), + 46: uint16(31684), + 47: uint16(37318), + 48: uint16(29033), + 49: uint16(38930), + 50: uint16(39151), + 51: uint16(25405), + 52: uint16(26217), + 53: uint16(30058), + 54: uint16(30436), + 55: uint16(30928), + 56: uint16(34115), + 57: uint16(34542), + 58: uint16(21290), + 59: uint16(21329), + 60: uint16(21542), + 61: uint16(22915), + 62: uint16(24199), + 63: uint16(24444), + 64: uint16(24754), + 65: uint16(25161), + 66: uint16(25209), + 67: uint16(25259), + 68: uint16(26000), + 69: uint16(27604), + 70: uint16(27852), + 71: uint16(30130), + 72: uint16(30382), + 73: uint16(30865), + 74: uint16(31192), + 75: uint16(32203), + 76: uint16(32631), + 77: uint16(32933), + 78: uint16(34987), + 79: uint16(35513), + 80: uint16(36027), + 81: uint16(36991), + 82: uint16(38750), + 83: uint16(39131), + 84: uint16(27147), + 85: uint16(31800), + 86: uint16(20633), + 87: uint16(23614), + 88: uint16(24494), + 89: uint16(26503), + 90: uint16(27608), + 91: uint16(29749), + 92: uint16(30473), + 93: uint16(32654), + }, + 40: { + 0: uint16(40763), + 1: uint16(26570), + 2: uint16(31255), + 3: uint16(21305), + 4: uint16(30091), + 5: uint16(39661), + 6: uint16(24422), + 7: uint16(33181), + 8: uint16(33777), + 9: uint16(32920), + 10: uint16(24380), + 11: uint16(24517), + 12: uint16(30050), + 13: uint16(31558), + 14: uint16(36924), + 15: uint16(26727), + 16: uint16(23019), + 17: uint16(23195), + 18: uint16(32016), + 19: uint16(30334), + 20: uint16(35628), + 21: uint16(20469), + 22: uint16(24426), + 23: uint16(27161), + 24: uint16(27703), + 25: uint16(28418), + 26: uint16(29922), + 27: uint16(31080), + 28: uint16(34920), + 29: uint16(35413), + 30: uint16(35961), + 31: uint16(24287), + 32: uint16(25551), + 33: uint16(30149), + 34: uint16(31186), + 35: uint16(33495), + 36: uint16(37672), + 37: uint16(37618), + 38: uint16(33948), + 39: uint16(34541), + 40: uint16(39981), + 41: uint16(21697), + 42: uint16(24428), + 43: uint16(25996), + 44: uint16(27996), + 45: uint16(28693), + 46: uint16(36007), + 47: uint16(36051), + 48: uint16(38971), + 49: uint16(25935), + 50: uint16(29942), + 51: uint16(19981), + 52: uint16(20184), + 53: uint16(22496), + 54: uint16(22827), + 55: uint16(23142), + 56: uint16(23500), + 57: uint16(20904), + 58: uint16(24067), + 59: uint16(24220), + 60: uint16(24598), + 61: uint16(25206), + 62: uint16(25975), + 63: uint16(26023), + 64: uint16(26222), + 65: uint16(28014), + 66: uint16(29238), + 67: uint16(31526), + 68: uint16(33104), + 69: uint16(33178), + 70: uint16(33433), + 71: uint16(35676), + 72: uint16(36000), + 73: uint16(36070), + 74: uint16(36212), + 75: uint16(38428), + 76: uint16(38468), + 77: uint16(20398), + 78: uint16(25771), + 79: uint16(27494), + 80: uint16(33310), + 81: uint16(33889), + 82: uint16(34154), + 83: uint16(37096), + 84: uint16(23553), + 85: uint16(26963), + 86: uint16(39080), + 87: uint16(33914), + 88: uint16(34135), + 89: uint16(20239), + 90: uint16(21103), + 91: uint16(24489), + 92: uint16(24133), + 93: uint16(26381), + }, + 41: { + 0: uint16(31119), + 1: uint16(33145), + 2: uint16(35079), + 3: uint16(35206), + 4: uint16(28149), + 5: uint16(24343), + 6: uint16(25173), + 7: uint16(27832), + 8: uint16(20175), + 9: uint16(29289), + 10: uint16(39826), + 11: uint16(20998), + 12: uint16(21563), + 13: uint16(22132), + 14: uint16(22707), + 15: uint16(24996), + 16: uint16(25198), + 17: uint16(28954), + 18: uint16(22894), + 19: uint16(31881), + 20: uint16(31966), + 21: uint16(32027), + 22: uint16(38640), + 23: uint16(25991), + 24: uint16(32862), + 25: uint16(19993), + 26: uint16(20341), + 27: uint16(20853), + 28: uint16(22592), + 29: uint16(24163), + 30: uint16(24179), + 31: uint16(24330), + 32: uint16(26564), + 33: uint16(20006), + 34: uint16(34109), + 35: uint16(38281), + 36: uint16(38491), + 37: uint16(31859), + 38: uint16(38913), + 39: uint16(20731), + 40: uint16(22721), + 41: uint16(30294), + 42: uint16(30887), + 43: uint16(21029), + 44: uint16(30629), + 45: uint16(34065), + 46: uint16(31622), + 47: uint16(20559), + 48: uint16(22793), + 49: uint16(29255), + 50: uint16(31687), + 51: uint16(32232), + 52: uint16(36794), + 53: uint16(36820), + 54: uint16(36941), + 55: uint16(20415), + 56: uint16(21193), + 57: uint16(23081), + 58: uint16(24321), + 59: uint16(38829), + 60: uint16(20445), + 61: uint16(33303), + 62: uint16(37610), + 63: uint16(22275), + 64: uint16(25429), + 65: uint16(27497), + 66: uint16(29995), + 67: uint16(35036), + 68: uint16(36628), + 69: uint16(31298), + 70: uint16(21215), + 71: uint16(22675), + 72: uint16(24917), + 73: uint16(25098), + 74: uint16(26286), + 75: uint16(27597), + 76: uint16(31807), + 77: uint16(33769), + 78: uint16(20515), + 79: uint16(20472), + 80: uint16(21253), + 81: uint16(21574), + 82: uint16(22577), + 83: uint16(22857), + 84: uint16(23453), + 85: uint16(23792), + 86: uint16(23791), + 87: uint16(23849), + 88: uint16(24214), + 89: uint16(25265), + 90: uint16(25447), + 91: uint16(25918), + 92: uint16(26041), + 93: uint16(26379), + }, + 42: { + 0: uint16(27861), + 1: uint16(27873), + 2: uint16(28921), + 3: uint16(30770), + 4: uint16(32299), + 5: uint16(32990), + 6: uint16(33459), + 7: uint16(33804), + 8: uint16(34028), + 9: uint16(34562), + 10: uint16(35090), + 11: uint16(35370), + 12: uint16(35914), + 13: uint16(37030), + 14: uint16(37586), + 15: uint16(39165), + 16: uint16(40179), + 17: uint16(40300), + 18: uint16(20047), + 19: uint16(20129), + 20: uint16(20621), + 21: uint16(21078), + 22: uint16(22346), + 23: uint16(22952), + 24: uint16(24125), + 25: uint16(24536), + 26: uint16(24537), + 27: uint16(25151), + 28: uint16(26292), + 29: uint16(26395), + 30: uint16(26576), + 31: uint16(26834), + 32: uint16(20882), + 33: uint16(32033), + 34: uint16(32938), + 35: uint16(33192), + 36: uint16(35584), + 37: uint16(35980), + 38: uint16(36031), + 39: uint16(37502), + 40: uint16(38450), + 41: uint16(21536), + 42: uint16(38956), + 43: uint16(21271), + 44: uint16(20693), + 45: uint16(21340), + 46: uint16(22696), + 47: uint16(25778), + 48: uint16(26420), + 49: uint16(29287), + 50: uint16(30566), + 51: uint16(31302), + 52: uint16(37350), + 53: uint16(21187), + 54: uint16(27809), + 55: uint16(27526), + 56: uint16(22528), + 57: uint16(24140), + 58: uint16(22868), + 59: uint16(26412), + 60: uint16(32763), + 61: uint16(20961), + 62: uint16(30406), + 63: uint16(25705), + 64: uint16(30952), + 65: uint16(39764), + 66: uint16(40635), + 67: uint16(22475), + 68: uint16(22969), + 69: uint16(26151), + 70: uint16(26522), + 71: uint16(27598), + 72: uint16(21737), + 73: uint16(27097), + 74: uint16(24149), + 75: uint16(33180), + 76: uint16(26517), + 77: uint16(39850), + 78: uint16(26622), + 79: uint16(40018), + 80: uint16(26717), + 81: uint16(20134), + 82: uint16(20451), + 83: uint16(21448), + 84: uint16(25273), + 85: uint16(26411), + 86: uint16(27819), + 87: uint16(36804), + 88: uint16(20397), + 89: uint16(32365), + 90: uint16(40639), + 91: uint16(19975), + 92: uint16(24930), + 93: uint16(28288), + }, + 43: { + 0: uint16(28459), + 1: uint16(34067), + 2: uint16(21619), + 3: uint16(26410), + 4: uint16(39749), + 5: uint16(24051), + 6: uint16(31637), + 7: uint16(23724), + 8: uint16(23494), + 9: uint16(34588), + 10: uint16(28234), + 11: uint16(34001), + 12: uint16(31252), + 13: uint16(33032), + 14: uint16(22937), + 15: uint16(31885), + 16: uint16(27665), + 17: uint16(30496), + 18: uint16(21209), + 19: uint16(22818), + 20: uint16(28961), + 21: uint16(29279), + 22: uint16(30683), + 23: uint16(38695), + 24: uint16(40289), + 25: uint16(26891), + 26: uint16(23167), + 27: uint16(23064), + 28: uint16(20901), + 29: uint16(21517), + 30: uint16(21629), + 31: uint16(26126), + 32: uint16(30431), + 33: uint16(36855), + 34: uint16(37528), + 35: uint16(40180), + 36: uint16(23018), + 37: uint16(29277), + 38: uint16(28357), + 39: uint16(20813), + 40: uint16(26825), + 41: uint16(32191), + 42: uint16(32236), + 43: uint16(38754), + 44: uint16(40634), + 45: uint16(25720), + 46: uint16(27169), + 47: uint16(33538), + 48: uint16(22916), + 49: uint16(23391), + 50: uint16(27611), + 51: uint16(29467), + 52: uint16(30450), + 53: uint16(32178), + 54: uint16(32791), + 55: uint16(33945), + 56: uint16(20786), + 57: uint16(26408), + 58: uint16(40665), + 59: uint16(30446), + 60: uint16(26466), + 61: uint16(21247), + 62: uint16(39173), + 63: uint16(23588), + 64: uint16(25147), + 65: uint16(31870), + 66: uint16(36016), + 67: uint16(21839), + 68: uint16(24758), + 69: uint16(32011), + 70: uint16(38272), + 71: uint16(21249), + 72: uint16(20063), + 73: uint16(20918), + 74: uint16(22812), + 75: uint16(29242), + 76: uint16(32822), + 77: uint16(37326), + 78: uint16(24357), + 79: uint16(30690), + 80: uint16(21380), + 81: uint16(24441), + 82: uint16(32004), + 83: uint16(34220), + 84: uint16(35379), + 85: uint16(36493), + 86: uint16(38742), + 87: uint16(26611), + 88: uint16(34222), + 89: uint16(37971), + 90: uint16(24841), + 91: uint16(24840), + 92: uint16(27833), + 93: uint16(30290), + }, + 44: { + 0: uint16(35565), + 1: uint16(36664), + 2: uint16(21807), + 3: uint16(20305), + 4: uint16(20778), + 5: uint16(21191), + 6: uint16(21451), + 7: uint16(23461), + 8: uint16(24189), + 9: uint16(24736), + 10: uint16(24962), + 11: uint16(25558), + 12: uint16(26377), + 13: uint16(26586), + 14: uint16(28263), + 15: uint16(28044), + 16: uint16(29494), + 17: uint16(29495), + 18: uint16(30001), + 19: uint16(31056), + 20: uint16(35029), + 21: uint16(35480), + 22: uint16(36938), + 23: uint16(37009), + 24: uint16(37109), + 25: uint16(38596), + 26: uint16(34701), + 27: uint16(22805), + 28: uint16(20104), + 29: uint16(20313), + 30: uint16(19982), + 31: uint16(35465), + 32: uint16(36671), + 33: uint16(38928), + 34: uint16(20653), + 35: uint16(24188), + 36: uint16(22934), + 37: uint16(23481), + 38: uint16(24248), + 39: uint16(25562), + 40: uint16(25594), + 41: uint16(25793), + 42: uint16(26332), + 43: uint16(26954), + 44: uint16(27096), + 45: uint16(27915), + 46: uint16(28342), + 47: uint16(29076), + 48: uint16(29992), + 49: uint16(31407), + 50: uint16(32650), + 51: uint16(32768), + 52: uint16(33865), + 53: uint16(33993), + 54: uint16(35201), + 55: uint16(35617), + 56: uint16(36362), + 57: uint16(36965), + 58: uint16(38525), + 59: uint16(39178), + 60: uint16(24958), + 61: uint16(25233), + 62: uint16(27442), + 63: uint16(27779), + 64: uint16(28020), + 65: uint16(32716), + 66: uint16(32764), + 67: uint16(28096), + 68: uint16(32645), + 69: uint16(34746), + 70: uint16(35064), + 71: uint16(26469), + 72: uint16(33713), + 73: uint16(38972), + 74: uint16(38647), + 75: uint16(27931), + 76: uint16(32097), + 77: uint16(33853), + 78: uint16(37226), + 79: uint16(20081), + 80: uint16(21365), + 81: uint16(23888), + 82: uint16(27396), + 83: uint16(28651), + 84: uint16(34253), + 85: uint16(34349), + 86: uint16(35239), + 87: uint16(21033), + 88: uint16(21519), + 89: uint16(23653), + 90: uint16(26446), + 91: uint16(26792), + 92: uint16(29702), + 93: uint16(29827), + }, + 45: { + 0: uint16(30178), + 1: uint16(35023), + 2: uint16(35041), + 3: uint16(37324), + 4: uint16(38626), + 5: uint16(38520), + 6: uint16(24459), + 7: uint16(29575), + 8: uint16(31435), + 9: uint16(33870), + 10: uint16(25504), + 11: uint16(30053), + 12: uint16(21129), + 13: uint16(27969), + 14: uint16(28316), + 15: uint16(29705), + 16: uint16(30041), + 17: uint16(30827), + 18: uint16(31890), + 19: uint16(38534), + 20: uint16(31452), + 21: uint16(40845), + 22: uint16(20406), + 23: uint16(24942), + 24: uint16(26053), + 25: uint16(34396), + 26: uint16(20102), + 27: uint16(20142), + 28: uint16(20698), + 29: uint16(20001), + 30: uint16(20940), + 31: uint16(23534), + 32: uint16(26009), + 33: uint16(26753), + 34: uint16(28092), + 35: uint16(29471), + 36: uint16(30274), + 37: uint16(30637), + 38: uint16(31260), + 39: uint16(31975), + 40: uint16(33391), + 41: uint16(35538), + 42: uint16(36988), + 43: uint16(37327), + 44: uint16(38517), + 45: uint16(38936), + 46: uint16(21147), + 47: uint16(32209), + 48: uint16(20523), + 49: uint16(21400), + 50: uint16(26519), + 51: uint16(28107), + 52: uint16(29136), + 53: uint16(29747), + 54: uint16(33256), + 55: uint16(36650), + 56: uint16(38563), + 57: uint16(40023), + 58: uint16(40607), + 59: uint16(29792), + 60: uint16(22593), + 61: uint16(28057), + 62: uint16(32047), + 63: uint16(39006), + 64: uint16(20196), + 65: uint16(20278), + 66: uint16(20363), + 67: uint16(20919), + 68: uint16(21169), + 69: uint16(23994), + 70: uint16(24604), + 71: uint16(29618), + 72: uint16(31036), + 73: uint16(33491), + 74: uint16(37428), + 75: uint16(38583), + 76: uint16(38646), + 77: uint16(38666), + 78: uint16(40599), + 79: uint16(40802), + 80: uint16(26278), + 81: uint16(27508), + 82: uint16(21015), + 83: uint16(21155), + 84: uint16(28872), + 85: uint16(35010), + 86: uint16(24265), + 87: uint16(24651), + 88: uint16(24976), + 89: uint16(28451), + 90: uint16(29001), + 91: uint16(31806), + 92: uint16(32244), + 93: uint16(32879), + }, + 46: { + 0: uint16(34030), + 1: uint16(36899), + 2: uint16(37676), + 3: uint16(21570), + 4: uint16(39791), + 5: uint16(27347), + 6: uint16(28809), + 7: uint16(36034), + 8: uint16(36335), + 9: uint16(38706), + 10: uint16(21172), + 11: uint16(23105), + 12: uint16(24266), + 13: uint16(24324), + 14: uint16(26391), + 15: uint16(27004), + 16: uint16(27028), + 17: uint16(28010), + 18: uint16(28431), + 19: uint16(29282), + 20: uint16(29436), + 21: uint16(31725), + 22: uint16(32769), + 23: uint16(32894), + 24: uint16(34635), + 25: uint16(37070), + 26: uint16(20845), + 27: uint16(40595), + 28: uint16(31108), + 29: uint16(32907), + 30: uint16(37682), + 31: uint16(35542), + 32: uint16(20525), + 33: uint16(21644), + 34: uint16(35441), + 35: uint16(27498), + 36: uint16(36036), + 37: uint16(33031), + 38: uint16(24785), + 39: uint16(26528), + 40: uint16(40434), + 41: uint16(20121), + 42: uint16(20120), + 43: uint16(39952), + 44: uint16(35435), + 45: uint16(34241), + 46: uint16(34152), + 47: uint16(26880), + 48: uint16(28286), + 49: uint16(30871), + 50: uint16(33109), + }, + 47: { + 0: uint16(24332), + 1: uint16(19984), + 2: uint16(19989), + 3: uint16(20010), + 4: uint16(20017), + 5: uint16(20022), + 6: uint16(20028), + 7: uint16(20031), + 8: uint16(20034), + 9: uint16(20054), + 10: uint16(20056), + 11: uint16(20098), + 12: uint16(20101), + 13: uint16(35947), + 14: uint16(20106), + 15: uint16(33298), + 16: uint16(24333), + 17: uint16(20110), + 18: uint16(20126), + 19: uint16(20127), + 20: uint16(20128), + 21: uint16(20130), + 22: uint16(20144), + 23: uint16(20147), + 24: uint16(20150), + 25: uint16(20174), + 26: uint16(20173), + 27: uint16(20164), + 28: uint16(20166), + 29: uint16(20162), + 30: uint16(20183), + 31: uint16(20190), + 32: uint16(20205), + 33: uint16(20191), + 34: uint16(20215), + 35: uint16(20233), + 36: uint16(20314), + 37: uint16(20272), + 38: uint16(20315), + 39: uint16(20317), + 40: uint16(20311), + 41: uint16(20295), + 42: uint16(20342), + 43: uint16(20360), + 44: uint16(20367), + 45: uint16(20376), + 46: uint16(20347), + 47: uint16(20329), + 48: uint16(20336), + 49: uint16(20369), + 50: uint16(20335), + 51: uint16(20358), + 52: uint16(20374), + 53: uint16(20760), + 54: uint16(20436), + 55: uint16(20447), + 56: uint16(20430), + 57: uint16(20440), + 58: uint16(20443), + 59: uint16(20433), + 60: uint16(20442), + 61: uint16(20432), + 62: uint16(20452), + 63: uint16(20453), + 64: uint16(20506), + 65: uint16(20520), + 66: uint16(20500), + 67: uint16(20522), + 68: uint16(20517), + 69: uint16(20485), + 70: uint16(20252), + 71: uint16(20470), + 72: uint16(20513), + 73: uint16(20521), + 74: uint16(20524), + 75: uint16(20478), + 76: uint16(20463), + 77: uint16(20497), + 78: uint16(20486), + 79: uint16(20547), + 80: uint16(20551), + 81: uint16(26371), + 82: uint16(20565), + 83: uint16(20560), + 84: uint16(20552), + 85: uint16(20570), + 86: uint16(20566), + 87: uint16(20588), + 88: uint16(20600), + 89: uint16(20608), + 90: uint16(20634), + 91: uint16(20613), + 92: uint16(20660), + 93: uint16(20658), + }, + 48: { + 0: uint16(20681), + 1: uint16(20682), + 2: uint16(20659), + 3: uint16(20674), + 4: uint16(20694), + 5: uint16(20702), + 6: uint16(20709), + 7: uint16(20717), + 8: uint16(20707), + 9: uint16(20718), + 10: uint16(20729), + 11: uint16(20725), + 12: uint16(20745), + 13: uint16(20737), + 14: uint16(20738), + 15: uint16(20758), + 16: uint16(20757), + 17: uint16(20756), + 18: uint16(20762), + 19: uint16(20769), + 20: uint16(20794), + 21: uint16(20791), + 22: uint16(20796), + 23: uint16(20795), + 24: uint16(20799), + 25: uint16(20800), + 26: uint16(20818), + 27: uint16(20812), + 28: uint16(20820), + 29: uint16(20834), + 30: uint16(31480), + 31: uint16(20841), + 32: uint16(20842), + 33: uint16(20846), + 34: uint16(20864), + 35: uint16(20866), + 36: uint16(22232), + 37: uint16(20876), + 38: uint16(20873), + 39: uint16(20879), + 40: uint16(20881), + 41: uint16(20883), + 42: uint16(20885), + 43: uint16(20886), + 44: uint16(20900), + 45: uint16(20902), + 46: uint16(20898), + 47: uint16(20905), + 48: uint16(20906), + 49: uint16(20907), + 50: uint16(20915), + 51: uint16(20913), + 52: uint16(20914), + 53: uint16(20912), + 54: uint16(20917), + 55: uint16(20925), + 56: uint16(20933), + 57: uint16(20937), + 58: uint16(20955), + 59: uint16(20960), + 60: uint16(34389), + 61: uint16(20969), + 62: uint16(20973), + 63: uint16(20976), + 64: uint16(20981), + 65: uint16(20990), + 66: uint16(20996), + 67: uint16(21003), + 68: uint16(21012), + 69: uint16(21006), + 70: uint16(21031), + 71: uint16(21034), + 72: uint16(21038), + 73: uint16(21043), + 74: uint16(21049), + 75: uint16(21071), + 76: uint16(21060), + 77: uint16(21067), + 78: uint16(21068), + 79: uint16(21086), + 80: uint16(21076), + 81: uint16(21098), + 82: uint16(21108), + 83: uint16(21097), + 84: uint16(21107), + 85: uint16(21119), + 86: uint16(21117), + 87: uint16(21133), + 88: uint16(21140), + 89: uint16(21138), + 90: uint16(21105), + 91: uint16(21128), + 92: uint16(21137), + 93: uint16(36776), + }, + 49: { + 0: uint16(36775), + 1: uint16(21164), + 2: uint16(21165), + 3: uint16(21180), + 4: uint16(21173), + 5: uint16(21185), + 6: uint16(21197), + 7: uint16(21207), + 8: uint16(21214), + 9: uint16(21219), + 10: uint16(21222), + 11: uint16(39149), + 12: uint16(21216), + 13: uint16(21235), + 14: uint16(21237), + 15: uint16(21240), + 16: uint16(21241), + 17: uint16(21254), + 18: uint16(21256), + 19: uint16(30008), + 20: uint16(21261), + 21: uint16(21264), + 22: uint16(21263), + 23: uint16(21269), + 24: uint16(21274), + 25: uint16(21283), + 26: uint16(21295), + 27: uint16(21297), + 28: uint16(21299), + 29: uint16(21304), + 30: uint16(21312), + 31: uint16(21318), + 32: uint16(21317), + 33: uint16(19991), + 34: uint16(21321), + 35: uint16(21325), + 36: uint16(20950), + 37: uint16(21342), + 38: uint16(21353), + 39: uint16(21358), + 40: uint16(22808), + 41: uint16(21371), + 42: uint16(21367), + 43: uint16(21378), + 44: uint16(21398), + 45: uint16(21408), + 46: uint16(21414), + 47: uint16(21413), + 48: uint16(21422), + 49: uint16(21424), + 50: uint16(21430), + 51: uint16(21443), + 52: uint16(31762), + 53: uint16(38617), + 54: uint16(21471), + 55: uint16(26364), + 56: uint16(29166), + 57: uint16(21486), + 58: uint16(21480), + 59: uint16(21485), + 60: uint16(21498), + 61: uint16(21505), + 62: uint16(21565), + 63: uint16(21568), + 64: uint16(21548), + 65: uint16(21549), + 66: uint16(21564), + 67: uint16(21550), + 68: uint16(21558), + 69: uint16(21545), + 70: uint16(21533), + 71: uint16(21582), + 72: uint16(21647), + 73: uint16(21621), + 74: uint16(21646), + 75: uint16(21599), + 76: uint16(21617), + 77: uint16(21623), + 78: uint16(21616), + 79: uint16(21650), + 80: uint16(21627), + 81: uint16(21632), + 82: uint16(21622), + 83: uint16(21636), + 84: uint16(21648), + 85: uint16(21638), + 86: uint16(21703), + 87: uint16(21666), + 88: uint16(21688), + 89: uint16(21669), + 90: uint16(21676), + 91: uint16(21700), + 92: uint16(21704), + 93: uint16(21672), + }, + 50: { + 0: uint16(21675), + 1: uint16(21698), + 2: uint16(21668), + 3: uint16(21694), + 4: uint16(21692), + 5: uint16(21720), + 6: uint16(21733), + 7: uint16(21734), + 8: uint16(21775), + 9: uint16(21780), + 10: uint16(21757), + 11: uint16(21742), + 12: uint16(21741), + 13: uint16(21754), + 14: uint16(21730), + 15: uint16(21817), + 16: uint16(21824), + 17: uint16(21859), + 18: uint16(21836), + 19: uint16(21806), + 20: uint16(21852), + 21: uint16(21829), + 22: uint16(21846), + 23: uint16(21847), + 24: uint16(21816), + 25: uint16(21811), + 26: uint16(21853), + 27: uint16(21913), + 28: uint16(21888), + 29: uint16(21679), + 30: uint16(21898), + 31: uint16(21919), + 32: uint16(21883), + 33: uint16(21886), + 34: uint16(21912), + 35: uint16(21918), + 36: uint16(21934), + 37: uint16(21884), + 38: uint16(21891), + 39: uint16(21929), + 40: uint16(21895), + 41: uint16(21928), + 42: uint16(21978), + 43: uint16(21957), + 44: uint16(21983), + 45: uint16(21956), + 46: uint16(21980), + 47: uint16(21988), + 48: uint16(21972), + 49: uint16(22036), + 50: uint16(22007), + 51: uint16(22038), + 52: uint16(22014), + 53: uint16(22013), + 54: uint16(22043), + 55: uint16(22009), + 56: uint16(22094), + 57: uint16(22096), + 58: uint16(29151), + 59: uint16(22068), + 60: uint16(22070), + 61: uint16(22066), + 62: uint16(22072), + 63: uint16(22123), + 64: uint16(22116), + 65: uint16(22063), + 66: uint16(22124), + 67: uint16(22122), + 68: uint16(22150), + 69: uint16(22144), + 70: uint16(22154), + 71: uint16(22176), + 72: uint16(22164), + 73: uint16(22159), + 74: uint16(22181), + 75: uint16(22190), + 76: uint16(22198), + 77: uint16(22196), + 78: uint16(22210), + 79: uint16(22204), + 80: uint16(22209), + 81: uint16(22211), + 82: uint16(22208), + 83: uint16(22216), + 84: uint16(22222), + 85: uint16(22225), + 86: uint16(22227), + 87: uint16(22231), + 88: uint16(22254), + 89: uint16(22265), + 90: uint16(22272), + 91: uint16(22271), + 92: uint16(22276), + 93: uint16(22281), + }, + 51: { + 0: uint16(22280), + 1: uint16(22283), + 2: uint16(22285), + 3: uint16(22291), + 4: uint16(22296), + 5: uint16(22294), + 6: uint16(21959), + 7: uint16(22300), + 8: uint16(22310), + 9: uint16(22327), + 10: uint16(22328), + 11: uint16(22350), + 12: uint16(22331), + 13: uint16(22336), + 14: uint16(22351), + 15: uint16(22377), + 16: uint16(22464), + 17: uint16(22408), + 18: uint16(22369), + 19: uint16(22399), + 20: uint16(22409), + 21: uint16(22419), + 22: uint16(22432), + 23: uint16(22451), + 24: uint16(22436), + 25: uint16(22442), + 26: uint16(22448), + 27: uint16(22467), + 28: uint16(22470), + 29: uint16(22484), + 30: uint16(22482), + 31: uint16(22483), + 32: uint16(22538), + 33: uint16(22486), + 34: uint16(22499), + 35: uint16(22539), + 36: uint16(22553), + 37: uint16(22557), + 38: uint16(22642), + 39: uint16(22561), + 40: uint16(22626), + 41: uint16(22603), + 42: uint16(22640), + 43: uint16(27584), + 44: uint16(22610), + 45: uint16(22589), + 46: uint16(22649), + 47: uint16(22661), + 48: uint16(22713), + 49: uint16(22687), + 50: uint16(22699), + 51: uint16(22714), + 52: uint16(22750), + 53: uint16(22715), + 54: uint16(22712), + 55: uint16(22702), + 56: uint16(22725), + 57: uint16(22739), + 58: uint16(22737), + 59: uint16(22743), + 60: uint16(22745), + 61: uint16(22744), + 62: uint16(22757), + 63: uint16(22748), + 64: uint16(22756), + 65: uint16(22751), + 66: uint16(22767), + 67: uint16(22778), + 68: uint16(22777), + 69: uint16(22779), + 70: uint16(22780), + 71: uint16(22781), + 72: uint16(22786), + 73: uint16(22794), + 74: uint16(22800), + 75: uint16(22811), + 76: uint16(26790), + 77: uint16(22821), + 78: uint16(22828), + 79: uint16(22829), + 80: uint16(22834), + 81: uint16(22840), + 82: uint16(22846), + 83: uint16(31442), + 84: uint16(22869), + 85: uint16(22864), + 86: uint16(22862), + 87: uint16(22874), + 88: uint16(22872), + 89: uint16(22882), + 90: uint16(22880), + 91: uint16(22887), + 92: uint16(22892), + 93: uint16(22889), + }, + 52: { + 0: uint16(22904), + 1: uint16(22913), + 2: uint16(22941), + 3: uint16(20318), + 4: uint16(20395), + 5: uint16(22947), + 6: uint16(22962), + 7: uint16(22982), + 8: uint16(23016), + 9: uint16(23004), + 10: uint16(22925), + 11: uint16(23001), + 12: uint16(23002), + 13: uint16(23077), + 14: uint16(23071), + 15: uint16(23057), + 16: uint16(23068), + 17: uint16(23049), + 18: uint16(23066), + 19: uint16(23104), + 20: uint16(23148), + 21: uint16(23113), + 22: uint16(23093), + 23: uint16(23094), + 24: uint16(23138), + 25: uint16(23146), + 26: uint16(23194), + 27: uint16(23228), + 28: uint16(23230), + 29: uint16(23243), + 30: uint16(23234), + 31: uint16(23229), + 32: uint16(23267), + 33: uint16(23255), + 34: uint16(23270), + 35: uint16(23273), + 36: uint16(23254), + 37: uint16(23290), + 38: uint16(23291), + 39: uint16(23308), + 40: uint16(23307), + 41: uint16(23318), + 42: uint16(23346), + 43: uint16(23248), + 44: uint16(23338), + 45: uint16(23350), + 46: uint16(23358), + 47: uint16(23363), + 48: uint16(23365), + 49: uint16(23360), + 50: uint16(23377), + 51: uint16(23381), + 52: uint16(23386), + 53: uint16(23387), + 54: uint16(23397), + 55: uint16(23401), + 56: uint16(23408), + 57: uint16(23411), + 58: uint16(23413), + 59: uint16(23416), + 60: uint16(25992), + 61: uint16(23418), + 62: uint16(23424), + 63: uint16(23427), + 64: uint16(23462), + 65: uint16(23480), + 66: uint16(23491), + 67: uint16(23495), + 68: uint16(23497), + 69: uint16(23508), + 70: uint16(23504), + 71: uint16(23524), + 72: uint16(23526), + 73: uint16(23522), + 74: uint16(23518), + 75: uint16(23525), + 76: uint16(23531), + 77: uint16(23536), + 78: uint16(23542), + 79: uint16(23539), + 80: uint16(23557), + 81: uint16(23559), + 82: uint16(23560), + 83: uint16(23565), + 84: uint16(23571), + 85: uint16(23584), + 86: uint16(23586), + 87: uint16(23592), + 88: uint16(23608), + 89: uint16(23609), + 90: uint16(23617), + 91: uint16(23622), + 92: uint16(23630), + 93: uint16(23635), + }, + 53: { + 0: uint16(23632), + 1: uint16(23631), + 2: uint16(23409), + 3: uint16(23660), + 4: uint16(23662), + 5: uint16(20066), + 6: uint16(23670), + 7: uint16(23673), + 8: uint16(23692), + 9: uint16(23697), + 10: uint16(23700), + 11: uint16(22939), + 12: uint16(23723), + 13: uint16(23739), + 14: uint16(23734), + 15: uint16(23740), + 16: uint16(23735), + 17: uint16(23749), + 18: uint16(23742), + 19: uint16(23751), + 20: uint16(23769), + 21: uint16(23785), + 22: uint16(23805), + 23: uint16(23802), + 24: uint16(23789), + 25: uint16(23948), + 26: uint16(23786), + 27: uint16(23819), + 28: uint16(23829), + 29: uint16(23831), + 30: uint16(23900), + 31: uint16(23839), + 32: uint16(23835), + 33: uint16(23825), + 34: uint16(23828), + 35: uint16(23842), + 36: uint16(23834), + 37: uint16(23833), + 38: uint16(23832), + 39: uint16(23884), + 40: uint16(23890), + 41: uint16(23886), + 42: uint16(23883), + 43: uint16(23916), + 44: uint16(23923), + 45: uint16(23926), + 46: uint16(23943), + 47: uint16(23940), + 48: uint16(23938), + 49: uint16(23970), + 50: uint16(23965), + 51: uint16(23980), + 52: uint16(23982), + 53: uint16(23997), + 54: uint16(23952), + 55: uint16(23991), + 56: uint16(23996), + 57: uint16(24009), + 58: uint16(24013), + 59: uint16(24019), + 60: uint16(24018), + 61: uint16(24022), + 62: uint16(24027), + 63: uint16(24043), + 64: uint16(24050), + 65: uint16(24053), + 66: uint16(24075), + 67: uint16(24090), + 68: uint16(24089), + 69: uint16(24081), + 70: uint16(24091), + 71: uint16(24118), + 72: uint16(24119), + 73: uint16(24132), + 74: uint16(24131), + 75: uint16(24128), + 76: uint16(24142), + 77: uint16(24151), + 78: uint16(24148), + 79: uint16(24159), + 80: uint16(24162), + 81: uint16(24164), + 82: uint16(24135), + 83: uint16(24181), + 84: uint16(24182), + 85: uint16(24186), + 86: uint16(40636), + 87: uint16(24191), + 88: uint16(24224), + 89: uint16(24257), + 90: uint16(24258), + 91: uint16(24264), + 92: uint16(24272), + 93: uint16(24271), + }, + 54: { + 0: uint16(24278), + 1: uint16(24291), + 2: uint16(24285), + 3: uint16(24282), + 4: uint16(24283), + 5: uint16(24290), + 6: uint16(24289), + 7: uint16(24296), + 8: uint16(24297), + 9: uint16(24300), + 10: uint16(24305), + 11: uint16(24307), + 12: uint16(24304), + 13: uint16(24308), + 14: uint16(24312), + 15: uint16(24318), + 16: uint16(24323), + 17: uint16(24329), + 18: uint16(24413), + 19: uint16(24412), + 20: uint16(24331), + 21: uint16(24337), + 22: uint16(24342), + 23: uint16(24361), + 24: uint16(24365), + 25: uint16(24376), + 26: uint16(24385), + 27: uint16(24392), + 28: uint16(24396), + 29: uint16(24398), + 30: uint16(24367), + 31: uint16(24401), + 32: uint16(24406), + 33: uint16(24407), + 34: uint16(24409), + 35: uint16(24417), + 36: uint16(24429), + 37: uint16(24435), + 38: uint16(24439), + 39: uint16(24451), + 40: uint16(24450), + 41: uint16(24447), + 42: uint16(24458), + 43: uint16(24456), + 44: uint16(24465), + 45: uint16(24455), + 46: uint16(24478), + 47: uint16(24473), + 48: uint16(24472), + 49: uint16(24480), + 50: uint16(24488), + 51: uint16(24493), + 52: uint16(24508), + 53: uint16(24534), + 54: uint16(24571), + 55: uint16(24548), + 56: uint16(24568), + 57: uint16(24561), + 58: uint16(24541), + 59: uint16(24755), + 60: uint16(24575), + 61: uint16(24609), + 62: uint16(24672), + 63: uint16(24601), + 64: uint16(24592), + 65: uint16(24617), + 66: uint16(24590), + 67: uint16(24625), + 68: uint16(24603), + 69: uint16(24597), + 70: uint16(24619), + 71: uint16(24614), + 72: uint16(24591), + 73: uint16(24634), + 74: uint16(24666), + 75: uint16(24641), + 76: uint16(24682), + 77: uint16(24695), + 78: uint16(24671), + 79: uint16(24650), + 80: uint16(24646), + 81: uint16(24653), + 82: uint16(24675), + 83: uint16(24643), + 84: uint16(24676), + 85: uint16(24642), + 86: uint16(24684), + 87: uint16(24683), + 88: uint16(24665), + 89: uint16(24705), + 90: uint16(24717), + 91: uint16(24807), + 92: uint16(24707), + 93: uint16(24730), + }, + 55: { + 0: uint16(24708), + 1: uint16(24731), + 2: uint16(24726), + 3: uint16(24727), + 4: uint16(24722), + 5: uint16(24743), + 6: uint16(24715), + 7: uint16(24801), + 8: uint16(24760), + 9: uint16(24800), + 10: uint16(24787), + 11: uint16(24756), + 12: uint16(24560), + 13: uint16(24765), + 14: uint16(24774), + 15: uint16(24757), + 16: uint16(24792), + 17: uint16(24909), + 18: uint16(24853), + 19: uint16(24838), + 20: uint16(24822), + 21: uint16(24823), + 22: uint16(24832), + 23: uint16(24820), + 24: uint16(24826), + 25: uint16(24835), + 26: uint16(24865), + 27: uint16(24827), + 28: uint16(24817), + 29: uint16(24845), + 30: uint16(24846), + 31: uint16(24903), + 32: uint16(24894), + 33: uint16(24872), + 34: uint16(24871), + 35: uint16(24906), + 36: uint16(24895), + 37: uint16(24892), + 38: uint16(24876), + 39: uint16(24884), + 40: uint16(24893), + 41: uint16(24898), + 42: uint16(24900), + 43: uint16(24947), + 44: uint16(24951), + 45: uint16(24920), + 46: uint16(24921), + 47: uint16(24922), + 48: uint16(24939), + 49: uint16(24948), + 50: uint16(24943), + 51: uint16(24933), + 52: uint16(24945), + 53: uint16(24927), + 54: uint16(24925), + 55: uint16(24915), + 56: uint16(24949), + 57: uint16(24985), + 58: uint16(24982), + 59: uint16(24967), + 60: uint16(25004), + 61: uint16(24980), + 62: uint16(24986), + 63: uint16(24970), + 64: uint16(24977), + 65: uint16(25003), + 66: uint16(25006), + 67: uint16(25036), + 68: uint16(25034), + 69: uint16(25033), + 70: uint16(25079), + 71: uint16(25032), + 72: uint16(25027), + 73: uint16(25030), + 74: uint16(25018), + 75: uint16(25035), + 76: uint16(32633), + 77: uint16(25037), + 78: uint16(25062), + 79: uint16(25059), + 80: uint16(25078), + 81: uint16(25082), + 82: uint16(25076), + 83: uint16(25087), + 84: uint16(25085), + 85: uint16(25084), + 86: uint16(25086), + 87: uint16(25088), + 88: uint16(25096), + 89: uint16(25097), + 90: uint16(25101), + 91: uint16(25100), + 92: uint16(25108), + 93: uint16(25115), + }, + 56: { + 0: uint16(25118), + 1: uint16(25121), + 2: uint16(25130), + 3: uint16(25134), + 4: uint16(25136), + 5: uint16(25138), + 6: uint16(25139), + 7: uint16(25153), + 8: uint16(25166), + 9: uint16(25182), + 10: uint16(25187), + 11: uint16(25179), + 12: uint16(25184), + 13: uint16(25192), + 14: uint16(25212), + 15: uint16(25218), + 16: uint16(25225), + 17: uint16(25214), + 18: uint16(25234), + 19: uint16(25235), + 20: uint16(25238), + 21: uint16(25300), + 22: uint16(25219), + 23: uint16(25236), + 24: uint16(25303), + 25: uint16(25297), + 26: uint16(25275), + 27: uint16(25295), + 28: uint16(25343), + 29: uint16(25286), + 30: uint16(25812), + 31: uint16(25288), + 32: uint16(25308), + 33: uint16(25292), + 34: uint16(25290), + 35: uint16(25282), + 36: uint16(25287), + 37: uint16(25243), + 38: uint16(25289), + 39: uint16(25356), + 40: uint16(25326), + 41: uint16(25329), + 42: uint16(25383), + 43: uint16(25346), + 44: uint16(25352), + 45: uint16(25327), + 46: uint16(25333), + 47: uint16(25424), + 48: uint16(25406), + 49: uint16(25421), + 50: uint16(25628), + 51: uint16(25423), + 52: uint16(25494), + 53: uint16(25486), + 54: uint16(25472), + 55: uint16(25515), + 56: uint16(25462), + 57: uint16(25507), + 58: uint16(25487), + 59: uint16(25481), + 60: uint16(25503), + 61: uint16(25525), + 62: uint16(25451), + 63: uint16(25449), + 64: uint16(25534), + 65: uint16(25577), + 66: uint16(25536), + 67: uint16(25542), + 68: uint16(25571), + 69: uint16(25545), + 70: uint16(25554), + 71: uint16(25590), + 72: uint16(25540), + 73: uint16(25622), + 74: uint16(25652), + 75: uint16(25606), + 76: uint16(25619), + 77: uint16(25638), + 78: uint16(25654), + 79: uint16(25885), + 80: uint16(25623), + 81: uint16(25640), + 82: uint16(25615), + 83: uint16(25703), + 84: uint16(25711), + 85: uint16(25718), + 86: uint16(25678), + 87: uint16(25898), + 88: uint16(25749), + 89: uint16(25747), + 90: uint16(25765), + 91: uint16(25769), + 92: uint16(25736), + 93: uint16(25788), + }, + 57: { + 0: uint16(25818), + 1: uint16(25810), + 2: uint16(25797), + 3: uint16(25799), + 4: uint16(25787), + 5: uint16(25816), + 6: uint16(25794), + 7: uint16(25841), + 8: uint16(25831), + 9: uint16(33289), + 10: uint16(25824), + 11: uint16(25825), + 12: uint16(25260), + 13: uint16(25827), + 14: uint16(25839), + 15: uint16(25900), + 16: uint16(25846), + 17: uint16(25844), + 18: uint16(25842), + 19: uint16(25850), + 20: uint16(25856), + 21: uint16(25853), + 22: uint16(25880), + 23: uint16(25884), + 24: uint16(25861), + 25: uint16(25892), + 26: uint16(25891), + 27: uint16(25899), + 28: uint16(25908), + 29: uint16(25909), + 30: uint16(25911), + 31: uint16(25910), + 32: uint16(25912), + 33: uint16(30027), + 34: uint16(25928), + 35: uint16(25942), + 36: uint16(25941), + 37: uint16(25933), + 38: uint16(25944), + 39: uint16(25950), + 40: uint16(25949), + 41: uint16(25970), + 42: uint16(25976), + 43: uint16(25986), + 44: uint16(25987), + 45: uint16(35722), + 46: uint16(26011), + 47: uint16(26015), + 48: uint16(26027), + 49: uint16(26039), + 50: uint16(26051), + 51: uint16(26054), + 52: uint16(26049), + 53: uint16(26052), + 54: uint16(26060), + 55: uint16(26066), + 56: uint16(26075), + 57: uint16(26073), + 58: uint16(26080), + 59: uint16(26081), + 60: uint16(26097), + 61: uint16(26482), + 62: uint16(26122), + 63: uint16(26115), + 64: uint16(26107), + 65: uint16(26483), + 66: uint16(26165), + 67: uint16(26166), + 68: uint16(26164), + 69: uint16(26140), + 70: uint16(26191), + 71: uint16(26180), + 72: uint16(26185), + 73: uint16(26177), + 74: uint16(26206), + 75: uint16(26205), + 76: uint16(26212), + 77: uint16(26215), + 78: uint16(26216), + 79: uint16(26207), + 80: uint16(26210), + 81: uint16(26224), + 82: uint16(26243), + 83: uint16(26248), + 84: uint16(26254), + 85: uint16(26249), + 86: uint16(26244), + 87: uint16(26264), + 88: uint16(26269), + 89: uint16(26305), + 90: uint16(26297), + 91: uint16(26313), + 92: uint16(26302), + 93: uint16(26300), + }, + 58: { + 0: uint16(26308), + 1: uint16(26296), + 2: uint16(26326), + 3: uint16(26330), + 4: uint16(26336), + 5: uint16(26175), + 6: uint16(26342), + 7: uint16(26345), + 8: uint16(26352), + 9: uint16(26357), + 10: uint16(26359), + 11: uint16(26383), + 12: uint16(26390), + 13: uint16(26398), + 14: uint16(26406), + 15: uint16(26407), + 16: uint16(38712), + 17: uint16(26414), + 18: uint16(26431), + 19: uint16(26422), + 20: uint16(26433), + 21: uint16(26424), + 22: uint16(26423), + 23: uint16(26438), + 24: uint16(26462), + 25: uint16(26464), + 26: uint16(26457), + 27: uint16(26467), + 28: uint16(26468), + 29: uint16(26505), + 30: uint16(26480), + 31: uint16(26537), + 32: uint16(26492), + 33: uint16(26474), + 34: uint16(26508), + 35: uint16(26507), + 36: uint16(26534), + 37: uint16(26529), + 38: uint16(26501), + 39: uint16(26551), + 40: uint16(26607), + 41: uint16(26548), + 42: uint16(26604), + 43: uint16(26547), + 44: uint16(26601), + 45: uint16(26552), + 46: uint16(26596), + 47: uint16(26590), + 48: uint16(26589), + 49: uint16(26594), + 50: uint16(26606), + 51: uint16(26553), + 52: uint16(26574), + 53: uint16(26566), + 54: uint16(26599), + 55: uint16(27292), + 56: uint16(26654), + 57: uint16(26694), + 58: uint16(26665), + 59: uint16(26688), + 60: uint16(26701), + 61: uint16(26674), + 62: uint16(26702), + 63: uint16(26803), + 64: uint16(26667), + 65: uint16(26713), + 66: uint16(26723), + 67: uint16(26743), + 68: uint16(26751), + 69: uint16(26783), + 70: uint16(26767), + 71: uint16(26797), + 72: uint16(26772), + 73: uint16(26781), + 74: uint16(26779), + 75: uint16(26755), + 76: uint16(27310), + 77: uint16(26809), + 78: uint16(26740), + 79: uint16(26805), + 80: uint16(26784), + 81: uint16(26810), + 82: uint16(26895), + 83: uint16(26765), + 84: uint16(26750), + 85: uint16(26881), + 86: uint16(26826), + 87: uint16(26888), + 88: uint16(26840), + 89: uint16(26914), + 90: uint16(26918), + 91: uint16(26849), + 92: uint16(26892), + 93: uint16(26829), + }, + 59: { + 0: uint16(26836), + 1: uint16(26855), + 2: uint16(26837), + 3: uint16(26934), + 4: uint16(26898), + 5: uint16(26884), + 6: uint16(26839), + 7: uint16(26851), + 8: uint16(26917), + 9: uint16(26873), + 10: uint16(26848), + 11: uint16(26863), + 12: uint16(26920), + 13: uint16(26922), + 14: uint16(26906), + 15: uint16(26915), + 16: uint16(26913), + 17: uint16(26822), + 18: uint16(27001), + 19: uint16(26999), + 20: uint16(26972), + 21: uint16(27000), + 22: uint16(26987), + 23: uint16(26964), + 24: uint16(27006), + 25: uint16(26990), + 26: uint16(26937), + 27: uint16(26996), + 28: uint16(26941), + 29: uint16(26969), + 30: uint16(26928), + 31: uint16(26977), + 32: uint16(26974), + 33: uint16(26973), + 34: uint16(27009), + 35: uint16(26986), + 36: uint16(27058), + 37: uint16(27054), + 38: uint16(27088), + 39: uint16(27071), + 40: uint16(27073), + 41: uint16(27091), + 42: uint16(27070), + 43: uint16(27086), + 44: uint16(23528), + 45: uint16(27082), + 46: uint16(27101), + 47: uint16(27067), + 48: uint16(27075), + 49: uint16(27047), + 50: uint16(27182), + 51: uint16(27025), + 52: uint16(27040), + 53: uint16(27036), + 54: uint16(27029), + 55: uint16(27060), + 56: uint16(27102), + 57: uint16(27112), + 58: uint16(27138), + 59: uint16(27163), + 60: uint16(27135), + 61: uint16(27402), + 62: uint16(27129), + 63: uint16(27122), + 64: uint16(27111), + 65: uint16(27141), + 66: uint16(27057), + 67: uint16(27166), + 68: uint16(27117), + 69: uint16(27156), + 70: uint16(27115), + 71: uint16(27146), + 72: uint16(27154), + 73: uint16(27329), + 74: uint16(27171), + 75: uint16(27155), + 76: uint16(27204), + 77: uint16(27148), + 78: uint16(27250), + 79: uint16(27190), + 80: uint16(27256), + 81: uint16(27207), + 82: uint16(27234), + 83: uint16(27225), + 84: uint16(27238), + 85: uint16(27208), + 86: uint16(27192), + 87: uint16(27170), + 88: uint16(27280), + 89: uint16(27277), + 90: uint16(27296), + 91: uint16(27268), + 92: uint16(27298), + 93: uint16(27299), + }, + 60: { + 0: uint16(27287), + 1: uint16(34327), + 2: uint16(27323), + 3: uint16(27331), + 4: uint16(27330), + 5: uint16(27320), + 6: uint16(27315), + 7: uint16(27308), + 8: uint16(27358), + 9: uint16(27345), + 10: uint16(27359), + 11: uint16(27306), + 12: uint16(27354), + 13: uint16(27370), + 14: uint16(27387), + 15: uint16(27397), + 16: uint16(34326), + 17: uint16(27386), + 18: uint16(27410), + 19: uint16(27414), + 20: uint16(39729), + 21: uint16(27423), + 22: uint16(27448), + 23: uint16(27447), + 24: uint16(30428), + 25: uint16(27449), + 26: uint16(39150), + 27: uint16(27463), + 28: uint16(27459), + 29: uint16(27465), + 30: uint16(27472), + 31: uint16(27481), + 32: uint16(27476), + 33: uint16(27483), + 34: uint16(27487), + 35: uint16(27489), + 36: uint16(27512), + 37: uint16(27513), + 38: uint16(27519), + 39: uint16(27520), + 40: uint16(27524), + 41: uint16(27523), + 42: uint16(27533), + 43: uint16(27544), + 44: uint16(27541), + 45: uint16(27550), + 46: uint16(27556), + 47: uint16(27562), + 48: uint16(27563), + 49: uint16(27567), + 50: uint16(27570), + 51: uint16(27569), + 52: uint16(27571), + 53: uint16(27575), + 54: uint16(27580), + 55: uint16(27590), + 56: uint16(27595), + 57: uint16(27603), + 58: uint16(27615), + 59: uint16(27628), + 60: uint16(27627), + 61: uint16(27635), + 62: uint16(27631), + 63: uint16(40638), + 64: uint16(27656), + 65: uint16(27667), + 66: uint16(27668), + 67: uint16(27675), + 68: uint16(27684), + 69: uint16(27683), + 70: uint16(27742), + 71: uint16(27733), + 72: uint16(27746), + 73: uint16(27754), + 74: uint16(27778), + 75: uint16(27789), + 76: uint16(27802), + 77: uint16(27777), + 78: uint16(27803), + 79: uint16(27774), + 80: uint16(27752), + 81: uint16(27763), + 82: uint16(27794), + 83: uint16(27792), + 84: uint16(27844), + 85: uint16(27889), + 86: uint16(27859), + 87: uint16(27837), + 88: uint16(27863), + 89: uint16(27845), + 90: uint16(27869), + 91: uint16(27822), + 92: uint16(27825), + 93: uint16(27838), + }, + 61: { + 0: uint16(27834), + 1: uint16(27867), + 2: uint16(27887), + 3: uint16(27865), + 4: uint16(27882), + 5: uint16(27935), + 6: uint16(34893), + 7: uint16(27958), + 8: uint16(27947), + 9: uint16(27965), + 10: uint16(27960), + 11: uint16(27929), + 12: uint16(27957), + 13: uint16(27955), + 14: uint16(27922), + 15: uint16(27916), + 16: uint16(28003), + 17: uint16(28051), + 18: uint16(28004), + 19: uint16(27994), + 20: uint16(28025), + 21: uint16(27993), + 22: uint16(28046), + 23: uint16(28053), + 24: uint16(28644), + 25: uint16(28037), + 26: uint16(28153), + 27: uint16(28181), + 28: uint16(28170), + 29: uint16(28085), + 30: uint16(28103), + 31: uint16(28134), + 32: uint16(28088), + 33: uint16(28102), + 34: uint16(28140), + 35: uint16(28126), + 36: uint16(28108), + 37: uint16(28136), + 38: uint16(28114), + 39: uint16(28101), + 40: uint16(28154), + 41: uint16(28121), + 42: uint16(28132), + 43: uint16(28117), + 44: uint16(28138), + 45: uint16(28142), + 46: uint16(28205), + 47: uint16(28270), + 48: uint16(28206), + 49: uint16(28185), + 50: uint16(28274), + 51: uint16(28255), + 52: uint16(28222), + 53: uint16(28195), + 54: uint16(28267), + 55: uint16(28203), + 56: uint16(28278), + 57: uint16(28237), + 58: uint16(28191), + 59: uint16(28227), + 60: uint16(28218), + 61: uint16(28238), + 62: uint16(28196), + 63: uint16(28415), + 64: uint16(28189), + 65: uint16(28216), + 66: uint16(28290), + 67: uint16(28330), + 68: uint16(28312), + 69: uint16(28361), + 70: uint16(28343), + 71: uint16(28371), + 72: uint16(28349), + 73: uint16(28335), + 74: uint16(28356), + 75: uint16(28338), + 76: uint16(28372), + 77: uint16(28373), + 78: uint16(28303), + 79: uint16(28325), + 80: uint16(28354), + 81: uint16(28319), + 82: uint16(28481), + 83: uint16(28433), + 84: uint16(28748), + 85: uint16(28396), + 86: uint16(28408), + 87: uint16(28414), + 88: uint16(28479), + 89: uint16(28402), + 90: uint16(28465), + 91: uint16(28399), + 92: uint16(28466), + 93: uint16(28364), + }, + 62: { + 0: uint16(28478), + 1: uint16(28435), + 2: uint16(28407), + 3: uint16(28550), + 4: uint16(28538), + 5: uint16(28536), + 6: uint16(28545), + 7: uint16(28544), + 8: uint16(28527), + 9: uint16(28507), + 10: uint16(28659), + 11: uint16(28525), + 12: uint16(28546), + 13: uint16(28540), + 14: uint16(28504), + 15: uint16(28558), + 16: uint16(28561), + 17: uint16(28610), + 18: uint16(28518), + 19: uint16(28595), + 20: uint16(28579), + 21: uint16(28577), + 22: uint16(28580), + 23: uint16(28601), + 24: uint16(28614), + 25: uint16(28586), + 26: uint16(28639), + 27: uint16(28629), + 28: uint16(28652), + 29: uint16(28628), + 30: uint16(28632), + 31: uint16(28657), + 32: uint16(28654), + 33: uint16(28635), + 34: uint16(28681), + 35: uint16(28683), + 36: uint16(28666), + 37: uint16(28689), + 38: uint16(28673), + 39: uint16(28687), + 40: uint16(28670), + 41: uint16(28699), + 42: uint16(28698), + 43: uint16(28532), + 44: uint16(28701), + 45: uint16(28696), + 46: uint16(28703), + 47: uint16(28720), + 48: uint16(28734), + 49: uint16(28722), + 50: uint16(28753), + 51: uint16(28771), + 52: uint16(28825), + 53: uint16(28818), + 54: uint16(28847), + 55: uint16(28913), + 56: uint16(28844), + 57: uint16(28856), + 58: uint16(28851), + 59: uint16(28846), + 60: uint16(28895), + 61: uint16(28875), + 62: uint16(28893), + 63: uint16(28889), + 64: uint16(28937), + 65: uint16(28925), + 66: uint16(28956), + 67: uint16(28953), + 68: uint16(29029), + 69: uint16(29013), + 70: uint16(29064), + 71: uint16(29030), + 72: uint16(29026), + 73: uint16(29004), + 74: uint16(29014), + 75: uint16(29036), + 76: uint16(29071), + 77: uint16(29179), + 78: uint16(29060), + 79: uint16(29077), + 80: uint16(29096), + 81: uint16(29100), + 82: uint16(29143), + 83: uint16(29113), + 84: uint16(29118), + 85: uint16(29138), + 86: uint16(29129), + 87: uint16(29140), + 88: uint16(29134), + 89: uint16(29152), + 90: uint16(29164), + 91: uint16(29159), + 92: uint16(29173), + 93: uint16(29180), + }, + 63: { + 0: uint16(29177), + 1: uint16(29183), + 2: uint16(29197), + 3: uint16(29200), + 4: uint16(29211), + 5: uint16(29224), + 6: uint16(29229), + 7: uint16(29228), + 8: uint16(29232), + 9: uint16(29234), + 10: uint16(29243), + 11: uint16(29244), + 12: uint16(29247), + 13: uint16(29248), + 14: uint16(29254), + 15: uint16(29259), + 16: uint16(29272), + 17: uint16(29300), + 18: uint16(29310), + 19: uint16(29314), + 20: uint16(29313), + 21: uint16(29319), + 22: uint16(29330), + 23: uint16(29334), + 24: uint16(29346), + 25: uint16(29351), + 26: uint16(29369), + 27: uint16(29362), + 28: uint16(29379), + 29: uint16(29382), + 30: uint16(29380), + 31: uint16(29390), + 32: uint16(29394), + 33: uint16(29410), + 34: uint16(29408), + 35: uint16(29409), + 36: uint16(29433), + 37: uint16(29431), + 38: uint16(20495), + 39: uint16(29463), + 40: uint16(29450), + 41: uint16(29468), + 42: uint16(29462), + 43: uint16(29469), + 44: uint16(29492), + 45: uint16(29487), + 46: uint16(29481), + 47: uint16(29477), + 48: uint16(29502), + 49: uint16(29518), + 50: uint16(29519), + 51: uint16(40664), + 52: uint16(29527), + 53: uint16(29546), + 54: uint16(29544), + 55: uint16(29552), + 56: uint16(29560), + 57: uint16(29557), + 58: uint16(29563), + 59: uint16(29562), + 60: uint16(29640), + 61: uint16(29619), + 62: uint16(29646), + 63: uint16(29627), + 64: uint16(29632), + 65: uint16(29669), + 66: uint16(29678), + 67: uint16(29662), + 68: uint16(29858), + 69: uint16(29701), + 70: uint16(29807), + 71: uint16(29733), + 72: uint16(29688), + 73: uint16(29746), + 74: uint16(29754), + 75: uint16(29781), + 76: uint16(29759), + 77: uint16(29791), + 78: uint16(29785), + 79: uint16(29761), + 80: uint16(29788), + 81: uint16(29801), + 82: uint16(29808), + 83: uint16(29795), + 84: uint16(29802), + 85: uint16(29814), + 86: uint16(29822), + 87: uint16(29835), + 88: uint16(29854), + 89: uint16(29863), + 90: uint16(29898), + 91: uint16(29903), + 92: uint16(29908), + 93: uint16(29681), + }, + 64: { + 0: uint16(29920), + 1: uint16(29923), + 2: uint16(29927), + 3: uint16(29929), + 4: uint16(29934), + 5: uint16(29938), + 6: uint16(29936), + 7: uint16(29937), + 8: uint16(29944), + 9: uint16(29943), + 10: uint16(29956), + 11: uint16(29955), + 12: uint16(29957), + 13: uint16(29964), + 14: uint16(29966), + 15: uint16(29965), + 16: uint16(29973), + 17: uint16(29971), + 18: uint16(29982), + 19: uint16(29990), + 20: uint16(29996), + 21: uint16(30012), + 22: uint16(30020), + 23: uint16(30029), + 24: uint16(30026), + 25: uint16(30025), + 26: uint16(30043), + 27: uint16(30022), + 28: uint16(30042), + 29: uint16(30057), + 30: uint16(30052), + 31: uint16(30055), + 32: uint16(30059), + 33: uint16(30061), + 34: uint16(30072), + 35: uint16(30070), + 36: uint16(30086), + 37: uint16(30087), + 38: uint16(30068), + 39: uint16(30090), + 40: uint16(30089), + 41: uint16(30082), + 42: uint16(30100), + 43: uint16(30106), + 44: uint16(30109), + 45: uint16(30117), + 46: uint16(30115), + 47: uint16(30146), + 48: uint16(30131), + 49: uint16(30147), + 50: uint16(30133), + 51: uint16(30141), + 52: uint16(30136), + 53: uint16(30140), + 54: uint16(30129), + 55: uint16(30157), + 56: uint16(30154), + 57: uint16(30162), + 58: uint16(30169), + 59: uint16(30179), + 60: uint16(30174), + 61: uint16(30206), + 62: uint16(30207), + 63: uint16(30204), + 64: uint16(30209), + 65: uint16(30192), + 66: uint16(30202), + 67: uint16(30194), + 68: uint16(30195), + 69: uint16(30219), + 70: uint16(30221), + 71: uint16(30217), + 72: uint16(30239), + 73: uint16(30247), + 74: uint16(30240), + 75: uint16(30241), + 76: uint16(30242), + 77: uint16(30244), + 78: uint16(30260), + 79: uint16(30256), + 80: uint16(30267), + 81: uint16(30279), + 82: uint16(30280), + 83: uint16(30278), + 84: uint16(30300), + 85: uint16(30296), + 86: uint16(30305), + 87: uint16(30306), + 88: uint16(30312), + 89: uint16(30313), + 90: uint16(30314), + 91: uint16(30311), + 92: uint16(30316), + 93: uint16(30320), + }, + 65: { + 0: uint16(30322), + 1: uint16(30326), + 2: uint16(30328), + 3: uint16(30332), + 4: uint16(30336), + 5: uint16(30339), + 6: uint16(30344), + 7: uint16(30347), + 8: uint16(30350), + 9: uint16(30358), + 10: uint16(30355), + 11: uint16(30361), + 12: uint16(30362), + 13: uint16(30384), + 14: uint16(30388), + 15: uint16(30392), + 16: uint16(30393), + 17: uint16(30394), + 18: uint16(30402), + 19: uint16(30413), + 20: uint16(30422), + 21: uint16(30418), + 22: uint16(30430), + 23: uint16(30433), + 24: uint16(30437), + 25: uint16(30439), + 26: uint16(30442), + 27: uint16(34351), + 28: uint16(30459), + 29: uint16(30472), + 30: uint16(30471), + 31: uint16(30468), + 32: uint16(30505), + 33: uint16(30500), + 34: uint16(30494), + 35: uint16(30501), + 36: uint16(30502), + 37: uint16(30491), + 38: uint16(30519), + 39: uint16(30520), + 40: uint16(30535), + 41: uint16(30554), + 42: uint16(30568), + 43: uint16(30571), + 44: uint16(30555), + 45: uint16(30565), + 46: uint16(30591), + 47: uint16(30590), + 48: uint16(30585), + 49: uint16(30606), + 50: uint16(30603), + 51: uint16(30609), + 52: uint16(30624), + 53: uint16(30622), + 54: uint16(30640), + 55: uint16(30646), + 56: uint16(30649), + 57: uint16(30655), + 58: uint16(30652), + 59: uint16(30653), + 60: uint16(30651), + 61: uint16(30663), + 62: uint16(30669), + 63: uint16(30679), + 64: uint16(30682), + 65: uint16(30684), + 66: uint16(30691), + 67: uint16(30702), + 68: uint16(30716), + 69: uint16(30732), + 70: uint16(30738), + 71: uint16(31014), + 72: uint16(30752), + 73: uint16(31018), + 74: uint16(30789), + 75: uint16(30862), + 76: uint16(30836), + 77: uint16(30854), + 78: uint16(30844), + 79: uint16(30874), + 80: uint16(30860), + 81: uint16(30883), + 82: uint16(30901), + 83: uint16(30890), + 84: uint16(30895), + 85: uint16(30929), + 86: uint16(30918), + 87: uint16(30923), + 88: uint16(30932), + 89: uint16(30910), + 90: uint16(30908), + 91: uint16(30917), + 92: uint16(30922), + 93: uint16(30956), + }, + 66: { + 0: uint16(30951), + 1: uint16(30938), + 2: uint16(30973), + 3: uint16(30964), + 4: uint16(30983), + 5: uint16(30994), + 6: uint16(30993), + 7: uint16(31001), + 8: uint16(31020), + 9: uint16(31019), + 10: uint16(31040), + 11: uint16(31072), + 12: uint16(31063), + 13: uint16(31071), + 14: uint16(31066), + 15: uint16(31061), + 16: uint16(31059), + 17: uint16(31098), + 18: uint16(31103), + 19: uint16(31114), + 20: uint16(31133), + 21: uint16(31143), + 22: uint16(40779), + 23: uint16(31146), + 24: uint16(31150), + 25: uint16(31155), + 26: uint16(31161), + 27: uint16(31162), + 28: uint16(31177), + 29: uint16(31189), + 30: uint16(31207), + 31: uint16(31212), + 32: uint16(31201), + 33: uint16(31203), + 34: uint16(31240), + 35: uint16(31245), + 36: uint16(31256), + 37: uint16(31257), + 38: uint16(31264), + 39: uint16(31263), + 40: uint16(31104), + 41: uint16(31281), + 42: uint16(31291), + 43: uint16(31294), + 44: uint16(31287), + 45: uint16(31299), + 46: uint16(31319), + 47: uint16(31305), + 48: uint16(31329), + 49: uint16(31330), + 50: uint16(31337), + 51: uint16(40861), + 52: uint16(31344), + 53: uint16(31353), + 54: uint16(31357), + 55: uint16(31368), + 56: uint16(31383), + 57: uint16(31381), + 58: uint16(31384), + 59: uint16(31382), + 60: uint16(31401), + 61: uint16(31432), + 62: uint16(31408), + 63: uint16(31414), + 64: uint16(31429), + 65: uint16(31428), + 66: uint16(31423), + 67: uint16(36995), + 68: uint16(31431), + 69: uint16(31434), + 70: uint16(31437), + 71: uint16(31439), + 72: uint16(31445), + 73: uint16(31443), + 74: uint16(31449), + 75: uint16(31450), + 76: uint16(31453), + 77: uint16(31457), + 78: uint16(31458), + 79: uint16(31462), + 80: uint16(31469), + 81: uint16(31472), + 82: uint16(31490), + 83: uint16(31503), + 84: uint16(31498), + 85: uint16(31494), + 86: uint16(31539), + 87: uint16(31512), + 88: uint16(31513), + 89: uint16(31518), + 90: uint16(31541), + 91: uint16(31528), + 92: uint16(31542), + 93: uint16(31568), + }, + 67: { + 0: uint16(31610), + 1: uint16(31492), + 2: uint16(31565), + 3: uint16(31499), + 4: uint16(31564), + 5: uint16(31557), + 6: uint16(31605), + 7: uint16(31589), + 8: uint16(31604), + 9: uint16(31591), + 10: uint16(31600), + 11: uint16(31601), + 12: uint16(31596), + 13: uint16(31598), + 14: uint16(31645), + 15: uint16(31640), + 16: uint16(31647), + 17: uint16(31629), + 18: uint16(31644), + 19: uint16(31642), + 20: uint16(31627), + 21: uint16(31634), + 22: uint16(31631), + 23: uint16(31581), + 24: uint16(31641), + 25: uint16(31691), + 26: uint16(31681), + 27: uint16(31692), + 28: uint16(31695), + 29: uint16(31668), + 30: uint16(31686), + 31: uint16(31709), + 32: uint16(31721), + 33: uint16(31761), + 34: uint16(31764), + 35: uint16(31718), + 36: uint16(31717), + 37: uint16(31840), + 38: uint16(31744), + 39: uint16(31751), + 40: uint16(31763), + 41: uint16(31731), + 42: uint16(31735), + 43: uint16(31767), + 44: uint16(31757), + 45: uint16(31734), + 46: uint16(31779), + 47: uint16(31783), + 48: uint16(31786), + 49: uint16(31775), + 50: uint16(31799), + 51: uint16(31787), + 52: uint16(31805), + 53: uint16(31820), + 54: uint16(31811), + 55: uint16(31828), + 56: uint16(31823), + 57: uint16(31808), + 58: uint16(31824), + 59: uint16(31832), + 60: uint16(31839), + 61: uint16(31844), + 62: uint16(31830), + 63: uint16(31845), + 64: uint16(31852), + 65: uint16(31861), + 66: uint16(31875), + 67: uint16(31888), + 68: uint16(31908), + 69: uint16(31917), + 70: uint16(31906), + 71: uint16(31915), + 72: uint16(31905), + 73: uint16(31912), + 74: uint16(31923), + 75: uint16(31922), + 76: uint16(31921), + 77: uint16(31918), + 78: uint16(31929), + 79: uint16(31933), + 80: uint16(31936), + 81: uint16(31941), + 82: uint16(31938), + 83: uint16(31960), + 84: uint16(31954), + 85: uint16(31964), + 86: uint16(31970), + 87: uint16(39739), + 88: uint16(31983), + 89: uint16(31986), + 90: uint16(31988), + 91: uint16(31990), + 92: uint16(31994), + 93: uint16(32006), + }, + 68: { + 0: uint16(32002), + 1: uint16(32028), + 2: uint16(32021), + 3: uint16(32010), + 4: uint16(32069), + 5: uint16(32075), + 6: uint16(32046), + 7: uint16(32050), + 8: uint16(32063), + 9: uint16(32053), + 10: uint16(32070), + 11: uint16(32115), + 12: uint16(32086), + 13: uint16(32078), + 14: uint16(32114), + 15: uint16(32104), + 16: uint16(32110), + 17: uint16(32079), + 18: uint16(32099), + 19: uint16(32147), + 20: uint16(32137), + 21: uint16(32091), + 22: uint16(32143), + 23: uint16(32125), + 24: uint16(32155), + 25: uint16(32186), + 26: uint16(32174), + 27: uint16(32163), + 28: uint16(32181), + 29: uint16(32199), + 30: uint16(32189), + 31: uint16(32171), + 32: uint16(32317), + 33: uint16(32162), + 34: uint16(32175), + 35: uint16(32220), + 36: uint16(32184), + 37: uint16(32159), + 38: uint16(32176), + 39: uint16(32216), + 40: uint16(32221), + 41: uint16(32228), + 42: uint16(32222), + 43: uint16(32251), + 44: uint16(32242), + 45: uint16(32225), + 46: uint16(32261), + 47: uint16(32266), + 48: uint16(32291), + 49: uint16(32289), + 50: uint16(32274), + 51: uint16(32305), + 52: uint16(32287), + 53: uint16(32265), + 54: uint16(32267), + 55: uint16(32290), + 56: uint16(32326), + 57: uint16(32358), + 58: uint16(32315), + 59: uint16(32309), + 60: uint16(32313), + 61: uint16(32323), + 62: uint16(32311), + 63: uint16(32306), + 64: uint16(32314), + 65: uint16(32359), + 66: uint16(32349), + 67: uint16(32342), + 68: uint16(32350), + 69: uint16(32345), + 70: uint16(32346), + 71: uint16(32377), + 72: uint16(32362), + 73: uint16(32361), + 74: uint16(32380), + 75: uint16(32379), + 76: uint16(32387), + 77: uint16(32213), + 78: uint16(32381), + 79: uint16(36782), + 80: uint16(32383), + 81: uint16(32392), + 82: uint16(32393), + 83: uint16(32396), + 84: uint16(32402), + 85: uint16(32400), + 86: uint16(32403), + 87: uint16(32404), + 88: uint16(32406), + 89: uint16(32398), + 90: uint16(32411), + 91: uint16(32412), + 92: uint16(32568), + 93: uint16(32570), + }, + 69: { + 0: uint16(32581), + 1: uint16(32588), + 2: uint16(32589), + 3: uint16(32590), + 4: uint16(32592), + 5: uint16(32593), + 6: uint16(32597), + 7: uint16(32596), + 8: uint16(32600), + 9: uint16(32607), + 10: uint16(32608), + 11: uint16(32616), + 12: uint16(32617), + 13: uint16(32615), + 14: uint16(32632), + 15: uint16(32642), + 16: uint16(32646), + 17: uint16(32643), + 18: uint16(32648), + 19: uint16(32647), + 20: uint16(32652), + 21: uint16(32660), + 22: uint16(32670), + 23: uint16(32669), + 24: uint16(32666), + 25: uint16(32675), + 26: uint16(32687), + 27: uint16(32690), + 28: uint16(32697), + 29: uint16(32686), + 30: uint16(32694), + 31: uint16(32696), + 32: uint16(35697), + 33: uint16(32709), + 34: uint16(32710), + 35: uint16(32714), + 36: uint16(32725), + 37: uint16(32724), + 38: uint16(32737), + 39: uint16(32742), + 40: uint16(32745), + 41: uint16(32755), + 42: uint16(32761), + 43: uint16(39132), + 44: uint16(32774), + 45: uint16(32772), + 46: uint16(32779), + 47: uint16(32786), + 48: uint16(32792), + 49: uint16(32793), + 50: uint16(32796), + 51: uint16(32801), + 52: uint16(32808), + 53: uint16(32831), + 54: uint16(32827), + 55: uint16(32842), + 56: uint16(32838), + 57: uint16(32850), + 58: uint16(32856), + 59: uint16(32858), + 60: uint16(32863), + 61: uint16(32866), + 62: uint16(32872), + 63: uint16(32883), + 64: uint16(32882), + 65: uint16(32880), + 66: uint16(32886), + 67: uint16(32889), + 68: uint16(32893), + 69: uint16(32895), + 70: uint16(32900), + 71: uint16(32902), + 72: uint16(32901), + 73: uint16(32923), + 74: uint16(32915), + 75: uint16(32922), + 76: uint16(32941), + 77: uint16(20880), + 78: uint16(32940), + 79: uint16(32987), + 80: uint16(32997), + 81: uint16(32985), + 82: uint16(32989), + 83: uint16(32964), + 84: uint16(32986), + 85: uint16(32982), + 86: uint16(33033), + 87: uint16(33007), + 88: uint16(33009), + 89: uint16(33051), + 90: uint16(33065), + 91: uint16(33059), + 92: uint16(33071), + 93: uint16(33099), + }, + 70: { + 0: uint16(38539), + 1: uint16(33094), + 2: uint16(33086), + 3: uint16(33107), + 4: uint16(33105), + 5: uint16(33020), + 6: uint16(33137), + 7: uint16(33134), + 8: uint16(33125), + 9: uint16(33126), + 10: uint16(33140), + 11: uint16(33155), + 12: uint16(33160), + 13: uint16(33162), + 14: uint16(33152), + 15: uint16(33154), + 16: uint16(33184), + 17: uint16(33173), + 18: uint16(33188), + 19: uint16(33187), + 20: uint16(33119), + 21: uint16(33171), + 22: uint16(33193), + 23: uint16(33200), + 24: uint16(33205), + 25: uint16(33214), + 26: uint16(33208), + 27: uint16(33213), + 28: uint16(33216), + 29: uint16(33218), + 30: uint16(33210), + 31: uint16(33225), + 32: uint16(33229), + 33: uint16(33233), + 34: uint16(33241), + 35: uint16(33240), + 36: uint16(33224), + 37: uint16(33242), + 38: uint16(33247), + 39: uint16(33248), + 40: uint16(33255), + 41: uint16(33274), + 42: uint16(33275), + 43: uint16(33278), + 44: uint16(33281), + 45: uint16(33282), + 46: uint16(33285), + 47: uint16(33287), + 48: uint16(33290), + 49: uint16(33293), + 50: uint16(33296), + 51: uint16(33302), + 52: uint16(33321), + 53: uint16(33323), + 54: uint16(33336), + 55: uint16(33331), + 56: uint16(33344), + 57: uint16(33369), + 58: uint16(33368), + 59: uint16(33373), + 60: uint16(33370), + 61: uint16(33375), + 62: uint16(33380), + 63: uint16(33378), + 64: uint16(33384), + 65: uint16(33386), + 66: uint16(33387), + 67: uint16(33326), + 68: uint16(33393), + 69: uint16(33399), + 70: uint16(33400), + 71: uint16(33406), + 72: uint16(33421), + 73: uint16(33426), + 74: uint16(33451), + 75: uint16(33439), + 76: uint16(33467), + 77: uint16(33452), + 78: uint16(33505), + 79: uint16(33507), + 80: uint16(33503), + 81: uint16(33490), + 82: uint16(33524), + 83: uint16(33523), + 84: uint16(33530), + 85: uint16(33683), + 86: uint16(33539), + 87: uint16(33531), + 88: uint16(33529), + 89: uint16(33502), + 90: uint16(33542), + 91: uint16(33500), + 92: uint16(33545), + 93: uint16(33497), + }, + 71: { + 0: uint16(33589), + 1: uint16(33588), + 2: uint16(33558), + 3: uint16(33586), + 4: uint16(33585), + 5: uint16(33600), + 6: uint16(33593), + 7: uint16(33616), + 8: uint16(33605), + 9: uint16(33583), + 10: uint16(33579), + 11: uint16(33559), + 12: uint16(33560), + 13: uint16(33669), + 14: uint16(33690), + 15: uint16(33706), + 16: uint16(33695), + 17: uint16(33698), + 18: uint16(33686), + 19: uint16(33571), + 20: uint16(33678), + 21: uint16(33671), + 22: uint16(33674), + 23: uint16(33660), + 24: uint16(33717), + 25: uint16(33651), + 26: uint16(33653), + 27: uint16(33696), + 28: uint16(33673), + 29: uint16(33704), + 30: uint16(33780), + 31: uint16(33811), + 32: uint16(33771), + 33: uint16(33742), + 34: uint16(33789), + 35: uint16(33795), + 36: uint16(33752), + 37: uint16(33803), + 38: uint16(33729), + 39: uint16(33783), + 40: uint16(33799), + 41: uint16(33760), + 42: uint16(33778), + 43: uint16(33805), + 44: uint16(33826), + 45: uint16(33824), + 46: uint16(33725), + 47: uint16(33848), + 48: uint16(34054), + 49: uint16(33787), + 50: uint16(33901), + 51: uint16(33834), + 52: uint16(33852), + 53: uint16(34138), + 54: uint16(33924), + 55: uint16(33911), + 56: uint16(33899), + 57: uint16(33965), + 58: uint16(33902), + 59: uint16(33922), + 60: uint16(33897), + 61: uint16(33862), + 62: uint16(33836), + 63: uint16(33903), + 64: uint16(33913), + 65: uint16(33845), + 66: uint16(33994), + 67: uint16(33890), + 68: uint16(33977), + 69: uint16(33983), + 70: uint16(33951), + 71: uint16(34009), + 72: uint16(33997), + 73: uint16(33979), + 74: uint16(34010), + 75: uint16(34000), + 76: uint16(33985), + 77: uint16(33990), + 78: uint16(34006), + 79: uint16(33953), + 80: uint16(34081), + 81: uint16(34047), + 82: uint16(34036), + 83: uint16(34071), + 84: uint16(34072), + 85: uint16(34092), + 86: uint16(34079), + 87: uint16(34069), + 88: uint16(34068), + 89: uint16(34044), + 90: uint16(34112), + 91: uint16(34147), + 92: uint16(34136), + 93: uint16(34120), + }, + 72: { + 0: uint16(34113), + 1: uint16(34306), + 2: uint16(34123), + 3: uint16(34133), + 4: uint16(34176), + 5: uint16(34212), + 6: uint16(34184), + 7: uint16(34193), + 8: uint16(34186), + 9: uint16(34216), + 10: uint16(34157), + 11: uint16(34196), + 12: uint16(34203), + 13: uint16(34282), + 14: uint16(34183), + 15: uint16(34204), + 16: uint16(34167), + 17: uint16(34174), + 18: uint16(34192), + 19: uint16(34249), + 20: uint16(34234), + 21: uint16(34255), + 22: uint16(34233), + 23: uint16(34256), + 24: uint16(34261), + 25: uint16(34269), + 26: uint16(34277), + 27: uint16(34268), + 28: uint16(34297), + 29: uint16(34314), + 30: uint16(34323), + 31: uint16(34315), + 32: uint16(34302), + 33: uint16(34298), + 34: uint16(34310), + 35: uint16(34338), + 36: uint16(34330), + 37: uint16(34352), + 38: uint16(34367), + 39: uint16(34381), + 40: uint16(20053), + 41: uint16(34388), + 42: uint16(34399), + 43: uint16(34407), + 44: uint16(34417), + 45: uint16(34451), + 46: uint16(34467), + 47: uint16(34473), + 48: uint16(34474), + 49: uint16(34443), + 50: uint16(34444), + 51: uint16(34486), + 52: uint16(34479), + 53: uint16(34500), + 54: uint16(34502), + 55: uint16(34480), + 56: uint16(34505), + 57: uint16(34851), + 58: uint16(34475), + 59: uint16(34516), + 60: uint16(34526), + 61: uint16(34537), + 62: uint16(34540), + 63: uint16(34527), + 64: uint16(34523), + 65: uint16(34543), + 66: uint16(34578), + 67: uint16(34566), + 68: uint16(34568), + 69: uint16(34560), + 70: uint16(34563), + 71: uint16(34555), + 72: uint16(34577), + 73: uint16(34569), + 74: uint16(34573), + 75: uint16(34553), + 76: uint16(34570), + 77: uint16(34612), + 78: uint16(34623), + 79: uint16(34615), + 80: uint16(34619), + 81: uint16(34597), + 82: uint16(34601), + 83: uint16(34586), + 84: uint16(34656), + 85: uint16(34655), + 86: uint16(34680), + 87: uint16(34636), + 88: uint16(34638), + 89: uint16(34676), + 90: uint16(34647), + 91: uint16(34664), + 92: uint16(34670), + 93: uint16(34649), + }, + 73: { + 0: uint16(34643), + 1: uint16(34659), + 2: uint16(34666), + 3: uint16(34821), + 4: uint16(34722), + 5: uint16(34719), + 6: uint16(34690), + 7: uint16(34735), + 8: uint16(34763), + 9: uint16(34749), + 10: uint16(34752), + 11: uint16(34768), + 12: uint16(38614), + 13: uint16(34731), + 14: uint16(34756), + 15: uint16(34739), + 16: uint16(34759), + 17: uint16(34758), + 18: uint16(34747), + 19: uint16(34799), + 20: uint16(34802), + 21: uint16(34784), + 22: uint16(34831), + 23: uint16(34829), + 24: uint16(34814), + 25: uint16(34806), + 26: uint16(34807), + 27: uint16(34830), + 28: uint16(34770), + 29: uint16(34833), + 30: uint16(34838), + 31: uint16(34837), + 32: uint16(34850), + 33: uint16(34849), + 34: uint16(34865), + 35: uint16(34870), + 36: uint16(34873), + 37: uint16(34855), + 38: uint16(34875), + 39: uint16(34884), + 40: uint16(34882), + 41: uint16(34898), + 42: uint16(34905), + 43: uint16(34910), + 44: uint16(34914), + 45: uint16(34923), + 46: uint16(34945), + 47: uint16(34942), + 48: uint16(34974), + 49: uint16(34933), + 50: uint16(34941), + 51: uint16(34997), + 52: uint16(34930), + 53: uint16(34946), + 54: uint16(34967), + 55: uint16(34962), + 56: uint16(34990), + 57: uint16(34969), + 58: uint16(34978), + 59: uint16(34957), + 60: uint16(34980), + 61: uint16(34992), + 62: uint16(35007), + 63: uint16(34993), + 64: uint16(35011), + 65: uint16(35012), + 66: uint16(35028), + 67: uint16(35032), + 68: uint16(35033), + 69: uint16(35037), + 70: uint16(35065), + 71: uint16(35074), + 72: uint16(35068), + 73: uint16(35060), + 74: uint16(35048), + 75: uint16(35058), + 76: uint16(35076), + 77: uint16(35084), + 78: uint16(35082), + 79: uint16(35091), + 80: uint16(35139), + 81: uint16(35102), + 82: uint16(35109), + 83: uint16(35114), + 84: uint16(35115), + 85: uint16(35137), + 86: uint16(35140), + 87: uint16(35131), + 88: uint16(35126), + 89: uint16(35128), + 90: uint16(35148), + 91: uint16(35101), + 92: uint16(35168), + 93: uint16(35166), + }, + 74: { + 0: uint16(35174), + 1: uint16(35172), + 2: uint16(35181), + 3: uint16(35178), + 4: uint16(35183), + 5: uint16(35188), + 6: uint16(35191), + 7: uint16(35198), + 8: uint16(35203), + 9: uint16(35208), + 10: uint16(35210), + 11: uint16(35219), + 12: uint16(35224), + 13: uint16(35233), + 14: uint16(35241), + 15: uint16(35238), + 16: uint16(35244), + 17: uint16(35247), + 18: uint16(35250), + 19: uint16(35258), + 20: uint16(35261), + 21: uint16(35263), + 22: uint16(35264), + 23: uint16(35290), + 24: uint16(35292), + 25: uint16(35293), + 26: uint16(35303), + 27: uint16(35316), + 28: uint16(35320), + 29: uint16(35331), + 30: uint16(35350), + 31: uint16(35344), + 32: uint16(35340), + 33: uint16(35355), + 34: uint16(35357), + 35: uint16(35365), + 36: uint16(35382), + 37: uint16(35393), + 38: uint16(35419), + 39: uint16(35410), + 40: uint16(35398), + 41: uint16(35400), + 42: uint16(35452), + 43: uint16(35437), + 44: uint16(35436), + 45: uint16(35426), + 46: uint16(35461), + 47: uint16(35458), + 48: uint16(35460), + 49: uint16(35496), + 50: uint16(35489), + 51: uint16(35473), + 52: uint16(35493), + 53: uint16(35494), + 54: uint16(35482), + 55: uint16(35491), + 56: uint16(35524), + 57: uint16(35533), + 58: uint16(35522), + 59: uint16(35546), + 60: uint16(35563), + 61: uint16(35571), + 62: uint16(35559), + 63: uint16(35556), + 64: uint16(35569), + 65: uint16(35604), + 66: uint16(35552), + 67: uint16(35554), + 68: uint16(35575), + 69: uint16(35550), + 70: uint16(35547), + 71: uint16(35596), + 72: uint16(35591), + 73: uint16(35610), + 74: uint16(35553), + 75: uint16(35606), + 76: uint16(35600), + 77: uint16(35607), + 78: uint16(35616), + 79: uint16(35635), + 80: uint16(38827), + 81: uint16(35622), + 82: uint16(35627), + 83: uint16(35646), + 84: uint16(35624), + 85: uint16(35649), + 86: uint16(35660), + 87: uint16(35663), + 88: uint16(35662), + 89: uint16(35657), + 90: uint16(35670), + 91: uint16(35675), + 92: uint16(35674), + 93: uint16(35691), + }, + 75: { + 0: uint16(35679), + 1: uint16(35692), + 2: uint16(35695), + 3: uint16(35700), + 4: uint16(35709), + 5: uint16(35712), + 6: uint16(35724), + 7: uint16(35726), + 8: uint16(35730), + 9: uint16(35731), + 10: uint16(35734), + 11: uint16(35737), + 12: uint16(35738), + 13: uint16(35898), + 14: uint16(35905), + 15: uint16(35903), + 16: uint16(35912), + 17: uint16(35916), + 18: uint16(35918), + 19: uint16(35920), + 20: uint16(35925), + 21: uint16(35938), + 22: uint16(35948), + 23: uint16(35960), + 24: uint16(35962), + 25: uint16(35970), + 26: uint16(35977), + 27: uint16(35973), + 28: uint16(35978), + 29: uint16(35981), + 30: uint16(35982), + 31: uint16(35988), + 32: uint16(35964), + 33: uint16(35992), + 34: uint16(25117), + 35: uint16(36013), + 36: uint16(36010), + 37: uint16(36029), + 38: uint16(36018), + 39: uint16(36019), + 40: uint16(36014), + 41: uint16(36022), + 42: uint16(36040), + 43: uint16(36033), + 44: uint16(36068), + 45: uint16(36067), + 46: uint16(36058), + 47: uint16(36093), + 48: uint16(36090), + 49: uint16(36091), + 50: uint16(36100), + 51: uint16(36101), + 52: uint16(36106), + 53: uint16(36103), + 54: uint16(36111), + 55: uint16(36109), + 56: uint16(36112), + 57: uint16(40782), + 58: uint16(36115), + 59: uint16(36045), + 60: uint16(36116), + 61: uint16(36118), + 62: uint16(36199), + 63: uint16(36205), + 64: uint16(36209), + 65: uint16(36211), + 66: uint16(36225), + 67: uint16(36249), + 68: uint16(36290), + 69: uint16(36286), + 70: uint16(36282), + 71: uint16(36303), + 72: uint16(36314), + 73: uint16(36310), + 74: uint16(36300), + 75: uint16(36315), + 76: uint16(36299), + 77: uint16(36330), + 78: uint16(36331), + 79: uint16(36319), + 80: uint16(36323), + 81: uint16(36348), + 82: uint16(36360), + 83: uint16(36361), + 84: uint16(36351), + 85: uint16(36381), + 86: uint16(36382), + 87: uint16(36368), + 88: uint16(36383), + 89: uint16(36418), + 90: uint16(36405), + 91: uint16(36400), + 92: uint16(36404), + 93: uint16(36426), + }, + 76: { + 0: uint16(36423), + 1: uint16(36425), + 2: uint16(36428), + 3: uint16(36432), + 4: uint16(36424), + 5: uint16(36441), + 6: uint16(36452), + 7: uint16(36448), + 8: uint16(36394), + 9: uint16(36451), + 10: uint16(36437), + 11: uint16(36470), + 12: uint16(36466), + 13: uint16(36476), + 14: uint16(36481), + 15: uint16(36487), + 16: uint16(36485), + 17: uint16(36484), + 18: uint16(36491), + 19: uint16(36490), + 20: uint16(36499), + 21: uint16(36497), + 22: uint16(36500), + 23: uint16(36505), + 24: uint16(36522), + 25: uint16(36513), + 26: uint16(36524), + 27: uint16(36528), + 28: uint16(36550), + 29: uint16(36529), + 30: uint16(36542), + 31: uint16(36549), + 32: uint16(36552), + 33: uint16(36555), + 34: uint16(36571), + 35: uint16(36579), + 36: uint16(36604), + 37: uint16(36603), + 38: uint16(36587), + 39: uint16(36606), + 40: uint16(36618), + 41: uint16(36613), + 42: uint16(36629), + 43: uint16(36626), + 44: uint16(36633), + 45: uint16(36627), + 46: uint16(36636), + 47: uint16(36639), + 48: uint16(36635), + 49: uint16(36620), + 50: uint16(36646), + 51: uint16(36659), + 52: uint16(36667), + 53: uint16(36665), + 54: uint16(36677), + 55: uint16(36674), + 56: uint16(36670), + 57: uint16(36684), + 58: uint16(36681), + 59: uint16(36678), + 60: uint16(36686), + 61: uint16(36695), + 62: uint16(36700), + 63: uint16(36706), + 64: uint16(36707), + 65: uint16(36708), + 66: uint16(36764), + 67: uint16(36767), + 68: uint16(36771), + 69: uint16(36781), + 70: uint16(36783), + 71: uint16(36791), + 72: uint16(36826), + 73: uint16(36837), + 74: uint16(36834), + 75: uint16(36842), + 76: uint16(36847), + 77: uint16(36999), + 78: uint16(36852), + 79: uint16(36869), + 80: uint16(36857), + 81: uint16(36858), + 82: uint16(36881), + 83: uint16(36885), + 84: uint16(36897), + 85: uint16(36877), + 86: uint16(36894), + 87: uint16(36886), + 88: uint16(36875), + 89: uint16(36903), + 90: uint16(36918), + 91: uint16(36917), + 92: uint16(36921), + 93: uint16(36856), + }, + 77: { + 0: uint16(36943), + 1: uint16(36944), + 2: uint16(36945), + 3: uint16(36946), + 4: uint16(36878), + 5: uint16(36937), + 6: uint16(36926), + 7: uint16(36950), + 8: uint16(36952), + 9: uint16(36958), + 10: uint16(36968), + 11: uint16(36975), + 12: uint16(36982), + 13: uint16(38568), + 14: uint16(36978), + 15: uint16(36994), + 16: uint16(36989), + 17: uint16(36993), + 18: uint16(36992), + 19: uint16(37002), + 20: uint16(37001), + 21: uint16(37007), + 22: uint16(37032), + 23: uint16(37039), + 24: uint16(37041), + 25: uint16(37045), + 26: uint16(37090), + 27: uint16(37092), + 28: uint16(25160), + 29: uint16(37083), + 30: uint16(37122), + 31: uint16(37138), + 32: uint16(37145), + 33: uint16(37170), + 34: uint16(37168), + 35: uint16(37194), + 36: uint16(37206), + 37: uint16(37208), + 38: uint16(37219), + 39: uint16(37221), + 40: uint16(37225), + 41: uint16(37235), + 42: uint16(37234), + 43: uint16(37259), + 44: uint16(37257), + 45: uint16(37250), + 46: uint16(37282), + 47: uint16(37291), + 48: uint16(37295), + 49: uint16(37290), + 50: uint16(37301), + 51: uint16(37300), + 52: uint16(37306), + 53: uint16(37312), + 54: uint16(37313), + 55: uint16(37321), + 56: uint16(37323), + 57: uint16(37328), + 58: uint16(37334), + 59: uint16(37343), + 60: uint16(37345), + 61: uint16(37339), + 62: uint16(37372), + 63: uint16(37365), + 64: uint16(37366), + 65: uint16(37406), + 66: uint16(37375), + 67: uint16(37396), + 68: uint16(37420), + 69: uint16(37397), + 70: uint16(37393), + 71: uint16(37470), + 72: uint16(37463), + 73: uint16(37445), + 74: uint16(37449), + 75: uint16(37476), + 76: uint16(37448), + 77: uint16(37525), + 78: uint16(37439), + 79: uint16(37451), + 80: uint16(37456), + 81: uint16(37532), + 82: uint16(37526), + 83: uint16(37523), + 84: uint16(37531), + 85: uint16(37466), + 86: uint16(37583), + 87: uint16(37561), + 88: uint16(37559), + 89: uint16(37609), + 90: uint16(37647), + 91: uint16(37626), + 92: uint16(37700), + 93: uint16(37678), + }, + 78: { + 0: uint16(37657), + 1: uint16(37666), + 2: uint16(37658), + 3: uint16(37667), + 4: uint16(37690), + 5: uint16(37685), + 6: uint16(37691), + 7: uint16(37724), + 8: uint16(37728), + 9: uint16(37756), + 10: uint16(37742), + 11: uint16(37718), + 12: uint16(37808), + 13: uint16(37804), + 14: uint16(37805), + 15: uint16(37780), + 16: uint16(37817), + 17: uint16(37846), + 18: uint16(37847), + 19: uint16(37864), + 20: uint16(37861), + 21: uint16(37848), + 22: uint16(37827), + 23: uint16(37853), + 24: uint16(37840), + 25: uint16(37832), + 26: uint16(37860), + 27: uint16(37914), + 28: uint16(37908), + 29: uint16(37907), + 30: uint16(37891), + 31: uint16(37895), + 32: uint16(37904), + 33: uint16(37942), + 34: uint16(37931), + 35: uint16(37941), + 36: uint16(37921), + 37: uint16(37946), + 38: uint16(37953), + 39: uint16(37970), + 40: uint16(37956), + 41: uint16(37979), + 42: uint16(37984), + 43: uint16(37986), + 44: uint16(37982), + 45: uint16(37994), + 46: uint16(37417), + 47: uint16(38000), + 48: uint16(38005), + 49: uint16(38007), + 50: uint16(38013), + 51: uint16(37978), + 52: uint16(38012), + 53: uint16(38014), + 54: uint16(38017), + 55: uint16(38015), + 56: uint16(38274), + 57: uint16(38279), + 58: uint16(38282), + 59: uint16(38292), + 60: uint16(38294), + 61: uint16(38296), + 62: uint16(38297), + 63: uint16(38304), + 64: uint16(38312), + 65: uint16(38311), + 66: uint16(38317), + 67: uint16(38332), + 68: uint16(38331), + 69: uint16(38329), + 70: uint16(38334), + 71: uint16(38346), + 72: uint16(28662), + 73: uint16(38339), + 74: uint16(38349), + 75: uint16(38348), + 76: uint16(38357), + 77: uint16(38356), + 78: uint16(38358), + 79: uint16(38364), + 80: uint16(38369), + 81: uint16(38373), + 82: uint16(38370), + 83: uint16(38433), + 84: uint16(38440), + 85: uint16(38446), + 86: uint16(38447), + 87: uint16(38466), + 88: uint16(38476), + 89: uint16(38479), + 90: uint16(38475), + 91: uint16(38519), + 92: uint16(38492), + 93: uint16(38494), + }, + 79: { + 0: uint16(38493), + 1: uint16(38495), + 2: uint16(38502), + 3: uint16(38514), + 4: uint16(38508), + 5: uint16(38541), + 6: uint16(38552), + 7: uint16(38549), + 8: uint16(38551), + 9: uint16(38570), + 10: uint16(38567), + 11: uint16(38577), + 12: uint16(38578), + 13: uint16(38576), + 14: uint16(38580), + 15: uint16(38582), + 16: uint16(38584), + 17: uint16(38585), + 18: uint16(38606), + 19: uint16(38603), + 20: uint16(38601), + 21: uint16(38605), + 22: uint16(35149), + 23: uint16(38620), + 24: uint16(38669), + 25: uint16(38613), + 26: uint16(38649), + 27: uint16(38660), + 28: uint16(38662), + 29: uint16(38664), + 30: uint16(38675), + 31: uint16(38670), + 32: uint16(38673), + 33: uint16(38671), + 34: uint16(38678), + 35: uint16(38681), + 36: uint16(38692), + 37: uint16(38698), + 38: uint16(38704), + 39: uint16(38713), + 40: uint16(38717), + 41: uint16(38718), + 42: uint16(38724), + 43: uint16(38726), + 44: uint16(38728), + 45: uint16(38722), + 46: uint16(38729), + 47: uint16(38748), + 48: uint16(38752), + 49: uint16(38756), + 50: uint16(38758), + 51: uint16(38760), + 52: uint16(21202), + 53: uint16(38763), + 54: uint16(38769), + 55: uint16(38777), + 56: uint16(38789), + 57: uint16(38780), + 58: uint16(38785), + 59: uint16(38778), + 60: uint16(38790), + 61: uint16(38795), + 62: uint16(38799), + 63: uint16(38800), + 64: uint16(38812), + 65: uint16(38824), + 66: uint16(38822), + 67: uint16(38819), + 68: uint16(38835), + 69: uint16(38836), + 70: uint16(38851), + 71: uint16(38854), + 72: uint16(38856), + 73: uint16(38859), + 74: uint16(38876), + 75: uint16(38893), + 76: uint16(40783), + 77: uint16(38898), + 78: uint16(31455), + 79: uint16(38902), + 80: uint16(38901), + 81: uint16(38927), + 82: uint16(38924), + 83: uint16(38968), + 84: uint16(38948), + 85: uint16(38945), + 86: uint16(38967), + 87: uint16(38973), + 88: uint16(38982), + 89: uint16(38991), + 90: uint16(38987), + 91: uint16(39019), + 92: uint16(39023), + 93: uint16(39024), + }, + 80: { + 0: uint16(39025), + 1: uint16(39028), + 2: uint16(39027), + 3: uint16(39082), + 4: uint16(39087), + 5: uint16(39089), + 6: uint16(39094), + 7: uint16(39108), + 8: uint16(39107), + 9: uint16(39110), + 10: uint16(39145), + 11: uint16(39147), + 12: uint16(39171), + 13: uint16(39177), + 14: uint16(39186), + 15: uint16(39188), + 16: uint16(39192), + 17: uint16(39201), + 18: uint16(39197), + 19: uint16(39198), + 20: uint16(39204), + 21: uint16(39200), + 22: uint16(39212), + 23: uint16(39214), + 24: uint16(39229), + 25: uint16(39230), + 26: uint16(39234), + 27: uint16(39241), + 28: uint16(39237), + 29: uint16(39248), + 30: uint16(39243), + 31: uint16(39249), + 32: uint16(39250), + 33: uint16(39244), + 34: uint16(39253), + 35: uint16(39319), + 36: uint16(39320), + 37: uint16(39333), + 38: uint16(39341), + 39: uint16(39342), + 40: uint16(39356), + 41: uint16(39391), + 42: uint16(39387), + 43: uint16(39389), + 44: uint16(39384), + 45: uint16(39377), + 46: uint16(39405), + 47: uint16(39406), + 48: uint16(39409), + 49: uint16(39410), + 50: uint16(39419), + 51: uint16(39416), + 52: uint16(39425), + 53: uint16(39439), + 54: uint16(39429), + 55: uint16(39394), + 56: uint16(39449), + 57: uint16(39467), + 58: uint16(39479), + 59: uint16(39493), + 60: uint16(39490), + 61: uint16(39488), + 62: uint16(39491), + 63: uint16(39486), + 64: uint16(39509), + 65: uint16(39501), + 66: uint16(39515), + 67: uint16(39511), + 68: uint16(39519), + 69: uint16(39522), + 70: uint16(39525), + 71: uint16(39524), + 72: uint16(39529), + 73: uint16(39531), + 74: uint16(39530), + 75: uint16(39597), + 76: uint16(39600), + 77: uint16(39612), + 78: uint16(39616), + 79: uint16(39631), + 80: uint16(39633), + 81: uint16(39635), + 82: uint16(39636), + 83: uint16(39646), + 84: uint16(39647), + 85: uint16(39650), + 86: uint16(39651), + 87: uint16(39654), + 88: uint16(39663), + 89: uint16(39659), + 90: uint16(39662), + 91: uint16(39668), + 92: uint16(39665), + 93: uint16(39671), + }, + 81: { + 0: uint16(39675), + 1: uint16(39686), + 2: uint16(39704), + 3: uint16(39706), + 4: uint16(39711), + 5: uint16(39714), + 6: uint16(39715), + 7: uint16(39717), + 8: uint16(39719), + 9: uint16(39720), + 10: uint16(39721), + 11: uint16(39722), + 12: uint16(39726), + 13: uint16(39727), + 14: uint16(39730), + 15: uint16(39748), + 16: uint16(39747), + 17: uint16(39759), + 18: uint16(39757), + 19: uint16(39758), + 20: uint16(39761), + 21: uint16(39768), + 22: uint16(39796), + 23: uint16(39827), + 24: uint16(39811), + 25: uint16(39825), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39839), + 29: uint16(39840), + 30: uint16(39848), + 31: uint16(39860), + 32: uint16(39872), + 33: uint16(39882), + 34: uint16(39865), + 35: uint16(39878), + 36: uint16(39887), + 37: uint16(39889), + 38: uint16(39890), + 39: uint16(39907), + 40: uint16(39906), + 41: uint16(39908), + 42: uint16(39892), + 43: uint16(39905), + 44: uint16(39994), + 45: uint16(39922), + 46: uint16(39921), + 47: uint16(39920), + 48: uint16(39957), + 49: uint16(39956), + 50: uint16(39945), + 51: uint16(39955), + 52: uint16(39948), + 53: uint16(39942), + 54: uint16(39944), + 55: uint16(39954), + 56: uint16(39946), + 57: uint16(39940), + 58: uint16(39982), + 59: uint16(39963), + 60: uint16(39973), + 61: uint16(39972), + 62: uint16(39969), + 63: uint16(39984), + 64: uint16(40007), + 65: uint16(39986), + 66: uint16(40006), + 67: uint16(39998), + 68: uint16(40026), + 69: uint16(40032), + 70: uint16(40039), + 71: uint16(40054), + 72: uint16(40056), + 73: uint16(40167), + 74: uint16(40172), + 75: uint16(40176), + 76: uint16(40201), + 77: uint16(40200), + 78: uint16(40171), + 79: uint16(40195), + 80: uint16(40198), + 81: uint16(40234), + 82: uint16(40230), + 83: uint16(40367), + 84: uint16(40227), + 85: uint16(40223), + 86: uint16(40260), + 87: uint16(40213), + 88: uint16(40210), + 89: uint16(40257), + 90: uint16(40255), + 91: uint16(40254), + 92: uint16(40262), + 93: uint16(40264), + }, + 82: { + 0: uint16(40285), + 1: uint16(40286), + 2: uint16(40292), + 3: uint16(40273), + 4: uint16(40272), + 5: uint16(40281), + 6: uint16(40306), + 7: uint16(40329), + 8: uint16(40327), + 9: uint16(40363), + 10: uint16(40303), + 11: uint16(40314), + 12: uint16(40346), + 13: uint16(40356), + 14: uint16(40361), + 15: uint16(40370), + 16: uint16(40388), + 17: uint16(40385), + 18: uint16(40379), + 19: uint16(40376), + 20: uint16(40378), + 21: uint16(40390), + 22: uint16(40399), + 23: uint16(40386), + 24: uint16(40409), + 25: uint16(40403), + 26: uint16(40440), + 27: uint16(40422), + 28: uint16(40429), + 29: uint16(40431), + 30: uint16(40445), + 31: uint16(40474), + 32: uint16(40475), + 33: uint16(40478), + 34: uint16(40565), + 35: uint16(40569), + 36: uint16(40573), + 37: uint16(40577), + 38: uint16(40584), + 39: uint16(40587), + 40: uint16(40588), + 41: uint16(40594), + 42: uint16(40597), + 43: uint16(40593), + 44: uint16(40605), + 45: uint16(40613), + 46: uint16(40617), + 47: uint16(40632), + 48: uint16(40618), + 49: uint16(40621), + 50: uint16(38753), + 51: uint16(40652), + 52: uint16(40654), + 53: uint16(40655), + 54: uint16(40656), + 55: uint16(40660), + 56: uint16(40668), + 57: uint16(40670), + 58: uint16(40669), + 59: uint16(40672), + 60: uint16(40677), + 61: uint16(40680), + 62: uint16(40687), + 63: uint16(40692), + 64: uint16(40694), + 65: uint16(40695), + 66: uint16(40697), + 67: uint16(40699), + 68: uint16(40700), + 69: uint16(40701), + 70: uint16(40711), + 71: uint16(40712), + 72: uint16(30391), + 73: uint16(40725), + 74: uint16(40737), + 75: uint16(40748), + 76: uint16(40766), + 77: uint16(40778), + 78: uint16(40786), + 79: uint16(40788), + 80: uint16(40803), + 81: uint16(40799), + 82: uint16(40800), + 83: uint16(40801), + 84: uint16(40806), + 85: uint16(40807), + 86: uint16(40812), + 87: uint16(40810), + 88: uint16(40823), + 89: uint16(40818), + 90: uint16(40822), + 91: uint16(40853), + 92: uint16(40860), + 93: uint16(40864), + }, + 83: { + 0: uint16(22575), + 1: uint16(27079), + 2: uint16(36953), + 3: uint16(29796), + 4: uint16(20956), + 5: uint16(29081), + }, +} + +var _gb18030 = [126][190]uint16{ + 0: { + 0: uint16(19970), + 1: uint16(19972), + 2: uint16(19973), + 3: uint16(19974), + 4: uint16(19983), + 5: uint16(19986), + 6: uint16(19991), + 7: uint16(19999), + 8: uint16(20000), + 9: uint16(20001), + 10: uint16(20003), + 11: uint16(20006), + 12: uint16(20009), + 13: uint16(20014), + 14: uint16(20015), + 15: uint16(20017), + 16: uint16(20019), + 17: uint16(20021), + 18: uint16(20023), + 19: uint16(20028), + 20: uint16(20032), + 21: uint16(20033), + 22: uint16(20034), + 23: uint16(20036), + 24: uint16(20038), + 25: uint16(20042), + 26: uint16(20049), + 27: uint16(20053), + 28: uint16(20055), + 29: uint16(20058), + 30: uint16(20059), + 31: uint16(20066), + 32: uint16(20067), + 33: uint16(20068), + 34: uint16(20069), + 35: uint16(20071), + 36: uint16(20072), + 37: uint16(20074), + 38: uint16(20075), + 39: uint16(20076), + 40: uint16(20077), + 41: uint16(20078), + 42: uint16(20079), + 43: uint16(20082), + 44: uint16(20084), + 45: uint16(20085), + 46: uint16(20086), + 47: uint16(20087), + 48: uint16(20088), + 49: uint16(20089), + 50: uint16(20090), + 51: uint16(20091), + 52: uint16(20092), + 53: uint16(20093), + 54: uint16(20095), + 55: uint16(20096), + 56: uint16(20097), + 57: uint16(20098), + 58: uint16(20099), + 59: uint16(20100), + 60: uint16(20101), + 61: uint16(20103), + 62: uint16(20106), + 63: uint16(20112), + 64: uint16(20118), + 65: uint16(20119), + 66: uint16(20121), + 67: uint16(20124), + 68: uint16(20125), + 69: uint16(20126), + 70: uint16(20131), + 71: uint16(20138), + 72: uint16(20143), + 73: uint16(20144), + 74: uint16(20145), + 75: uint16(20148), + 76: uint16(20150), + 77: uint16(20151), + 78: uint16(20152), + 79: uint16(20153), + 80: uint16(20156), + 81: uint16(20157), + 82: uint16(20158), + 83: uint16(20168), + 84: uint16(20172), + 85: uint16(20175), + 86: uint16(20176), + 87: uint16(20178), + 88: uint16(20186), + 89: uint16(20187), + 90: uint16(20188), + 91: uint16(20192), + 92: uint16(20194), + 93: uint16(20198), + 94: uint16(20199), + 95: uint16(20201), + 96: uint16(20205), + 97: uint16(20206), + 98: uint16(20207), + 99: uint16(20209), + 100: uint16(20212), + 101: uint16(20216), + 102: uint16(20217), + 103: uint16(20218), + 104: uint16(20220), + 105: uint16(20222), + 106: uint16(20224), + 107: uint16(20226), + 108: uint16(20227), + 109: uint16(20228), + 110: uint16(20229), + 111: uint16(20230), + 112: uint16(20231), + 113: uint16(20232), + 114: uint16(20235), + 115: uint16(20236), + 116: uint16(20242), + 117: uint16(20243), + 118: uint16(20244), + 119: uint16(20245), + 120: uint16(20246), + 121: uint16(20252), + 122: uint16(20253), + 123: uint16(20257), + 124: uint16(20259), + 125: uint16(20264), + 126: uint16(20265), + 127: uint16(20268), + 128: uint16(20269), + 129: uint16(20270), + 130: uint16(20273), + 131: uint16(20275), + 132: uint16(20277), + 133: uint16(20279), + 134: uint16(20281), + 135: uint16(20283), + 136: uint16(20286), + 137: uint16(20287), + 138: uint16(20288), + 139: uint16(20289), + 140: uint16(20290), + 141: uint16(20292), + 142: uint16(20293), + 143: uint16(20295), + 144: uint16(20296), + 145: uint16(20297), + 146: uint16(20298), + 147: uint16(20299), + 148: uint16(20300), + 149: uint16(20306), + 150: uint16(20308), + 151: uint16(20310), + 152: uint16(20321), + 153: uint16(20322), + 154: uint16(20326), + 155: uint16(20328), + 156: uint16(20330), + 157: uint16(20331), + 158: uint16(20333), + 159: uint16(20334), + 160: uint16(20337), + 161: uint16(20338), + 162: uint16(20341), + 163: uint16(20343), + 164: uint16(20344), + 165: uint16(20345), + 166: uint16(20346), + 167: uint16(20349), + 168: uint16(20352), + 169: uint16(20353), + 170: uint16(20354), + 171: uint16(20357), + 172: uint16(20358), + 173: uint16(20359), + 174: uint16(20362), + 175: uint16(20364), + 176: uint16(20366), + 177: uint16(20368), + 178: uint16(20370), + 179: uint16(20371), + 180: uint16(20373), + 181: uint16(20374), + 182: uint16(20376), + 183: uint16(20377), + 184: uint16(20378), + 185: uint16(20380), + 186: uint16(20382), + 187: uint16(20383), + 188: uint16(20385), + 189: uint16(20386), + }, + 1: { + 0: uint16(20388), + 1: uint16(20395), + 2: uint16(20397), + 3: uint16(20400), + 4: uint16(20401), + 5: uint16(20402), + 6: uint16(20403), + 7: uint16(20404), + 8: uint16(20406), + 9: uint16(20407), + 10: uint16(20408), + 11: uint16(20409), + 12: uint16(20410), + 13: uint16(20411), + 14: uint16(20412), + 15: uint16(20413), + 16: uint16(20414), + 17: uint16(20416), + 18: uint16(20417), + 19: uint16(20418), + 20: uint16(20422), + 21: uint16(20423), + 22: uint16(20424), + 23: uint16(20425), + 24: uint16(20427), + 25: uint16(20428), + 26: uint16(20429), + 27: uint16(20434), + 28: uint16(20435), + 29: uint16(20436), + 30: uint16(20437), + 31: uint16(20438), + 32: uint16(20441), + 33: uint16(20443), + 34: uint16(20448), + 35: uint16(20450), + 36: uint16(20452), + 37: uint16(20453), + 38: uint16(20455), + 39: uint16(20459), + 40: uint16(20460), + 41: uint16(20464), + 42: uint16(20466), + 43: uint16(20468), + 44: uint16(20469), + 45: uint16(20470), + 46: uint16(20471), + 47: uint16(20473), + 48: uint16(20475), + 49: uint16(20476), + 50: uint16(20477), + 51: uint16(20479), + 52: uint16(20480), + 53: uint16(20481), + 54: uint16(20482), + 55: uint16(20483), + 56: uint16(20484), + 57: uint16(20485), + 58: uint16(20486), + 59: uint16(20487), + 60: uint16(20488), + 61: uint16(20489), + 62: uint16(20490), + 63: uint16(20491), + 64: uint16(20494), + 65: uint16(20496), + 66: uint16(20497), + 67: uint16(20499), + 68: uint16(20501), + 69: uint16(20502), + 70: uint16(20503), + 71: uint16(20507), + 72: uint16(20509), + 73: uint16(20510), + 74: uint16(20512), + 75: uint16(20514), + 76: uint16(20515), + 77: uint16(20516), + 78: uint16(20519), + 79: uint16(20523), + 80: uint16(20527), + 81: uint16(20528), + 82: uint16(20529), + 83: uint16(20530), + 84: uint16(20531), + 85: uint16(20532), + 86: uint16(20533), + 87: uint16(20534), + 88: uint16(20535), + 89: uint16(20536), + 90: uint16(20537), + 91: uint16(20539), + 92: uint16(20541), + 93: uint16(20543), + 94: uint16(20544), + 95: uint16(20545), + 96: uint16(20546), + 97: uint16(20548), + 98: uint16(20549), + 99: uint16(20550), + 100: uint16(20553), + 101: uint16(20554), + 102: uint16(20555), + 103: uint16(20557), + 104: uint16(20560), + 105: uint16(20561), + 106: uint16(20562), + 107: uint16(20563), + 108: uint16(20564), + 109: uint16(20566), + 110: uint16(20567), + 111: uint16(20568), + 112: uint16(20569), + 113: uint16(20571), + 114: uint16(20573), + 115: uint16(20574), + 116: uint16(20575), + 117: uint16(20576), + 118: uint16(20577), + 119: uint16(20578), + 120: uint16(20579), + 121: uint16(20580), + 122: uint16(20582), + 123: uint16(20583), + 124: uint16(20584), + 125: uint16(20585), + 126: uint16(20586), + 127: uint16(20587), + 128: uint16(20589), + 129: uint16(20590), + 130: uint16(20591), + 131: uint16(20592), + 132: uint16(20593), + 133: uint16(20594), + 134: uint16(20595), + 135: uint16(20596), + 136: uint16(20597), + 137: uint16(20600), + 138: uint16(20601), + 139: uint16(20602), + 140: uint16(20604), + 141: uint16(20605), + 142: uint16(20609), + 143: uint16(20610), + 144: uint16(20611), + 145: uint16(20612), + 146: uint16(20614), + 147: uint16(20615), + 148: uint16(20617), + 149: uint16(20618), + 150: uint16(20619), + 151: uint16(20620), + 152: uint16(20622), + 153: uint16(20623), + 154: uint16(20624), + 155: uint16(20625), + 156: uint16(20626), + 157: uint16(20627), + 158: uint16(20628), + 159: uint16(20629), + 160: uint16(20630), + 161: uint16(20631), + 162: uint16(20632), + 163: uint16(20633), + 164: uint16(20634), + 165: uint16(20635), + 166: uint16(20636), + 167: uint16(20637), + 168: uint16(20638), + 169: uint16(20639), + 170: uint16(20640), + 171: uint16(20641), + 172: uint16(20642), + 173: uint16(20644), + 174: uint16(20646), + 175: uint16(20650), + 176: uint16(20651), + 177: uint16(20653), + 178: uint16(20654), + 179: uint16(20655), + 180: uint16(20656), + 181: uint16(20657), + 182: uint16(20659), + 183: uint16(20660), + 184: uint16(20661), + 185: uint16(20662), + 186: uint16(20663), + 187: uint16(20664), + 188: uint16(20665), + 189: uint16(20668), + }, + 2: { + 0: uint16(20669), + 1: uint16(20670), + 2: uint16(20671), + 3: uint16(20672), + 4: uint16(20673), + 5: uint16(20674), + 6: uint16(20675), + 7: uint16(20676), + 8: uint16(20677), + 9: uint16(20678), + 10: uint16(20679), + 11: uint16(20680), + 12: uint16(20681), + 13: uint16(20682), + 14: uint16(20683), + 15: uint16(20684), + 16: uint16(20685), + 17: uint16(20686), + 18: uint16(20688), + 19: uint16(20689), + 20: uint16(20690), + 21: uint16(20691), + 22: uint16(20692), + 23: uint16(20693), + 24: uint16(20695), + 25: uint16(20696), + 26: uint16(20697), + 27: uint16(20699), + 28: uint16(20700), + 29: uint16(20701), + 30: uint16(20702), + 31: uint16(20703), + 32: uint16(20704), + 33: uint16(20705), + 34: uint16(20706), + 35: uint16(20707), + 36: uint16(20708), + 37: uint16(20709), + 38: uint16(20712), + 39: uint16(20713), + 40: uint16(20714), + 41: uint16(20715), + 42: uint16(20719), + 43: uint16(20720), + 44: uint16(20721), + 45: uint16(20722), + 46: uint16(20724), + 47: uint16(20726), + 48: uint16(20727), + 49: uint16(20728), + 50: uint16(20729), + 51: uint16(20730), + 52: uint16(20732), + 53: uint16(20733), + 54: uint16(20734), + 55: uint16(20735), + 56: uint16(20736), + 57: uint16(20737), + 58: uint16(20738), + 59: uint16(20739), + 60: uint16(20740), + 61: uint16(20741), + 62: uint16(20744), + 63: uint16(20745), + 64: uint16(20746), + 65: uint16(20748), + 66: uint16(20749), + 67: uint16(20750), + 68: uint16(20751), + 69: uint16(20752), + 70: uint16(20753), + 71: uint16(20755), + 72: uint16(20756), + 73: uint16(20757), + 74: uint16(20758), + 75: uint16(20759), + 76: uint16(20760), + 77: uint16(20761), + 78: uint16(20762), + 79: uint16(20763), + 80: uint16(20764), + 81: uint16(20765), + 82: uint16(20766), + 83: uint16(20767), + 84: uint16(20768), + 85: uint16(20770), + 86: uint16(20771), + 87: uint16(20772), + 88: uint16(20773), + 89: uint16(20774), + 90: uint16(20775), + 91: uint16(20776), + 92: uint16(20777), + 93: uint16(20778), + 94: uint16(20779), + 95: uint16(20780), + 96: uint16(20781), + 97: uint16(20782), + 98: uint16(20783), + 99: uint16(20784), + 100: uint16(20785), + 101: uint16(20786), + 102: uint16(20787), + 103: uint16(20788), + 104: uint16(20789), + 105: uint16(20790), + 106: uint16(20791), + 107: uint16(20792), + 108: uint16(20793), + 109: uint16(20794), + 110: uint16(20795), + 111: uint16(20796), + 112: uint16(20797), + 113: uint16(20798), + 114: uint16(20802), + 115: uint16(20807), + 116: uint16(20810), + 117: uint16(20812), + 118: uint16(20814), + 119: uint16(20815), + 120: uint16(20816), + 121: uint16(20818), + 122: uint16(20819), + 123: uint16(20823), + 124: uint16(20824), + 125: uint16(20825), + 126: uint16(20827), + 127: uint16(20829), + 128: uint16(20830), + 129: uint16(20831), + 130: uint16(20832), + 131: uint16(20833), + 132: uint16(20835), + 133: uint16(20836), + 134: uint16(20838), + 135: uint16(20839), + 136: uint16(20841), + 137: uint16(20842), + 138: uint16(20847), + 139: uint16(20850), + 140: uint16(20858), + 141: uint16(20862), + 142: uint16(20863), + 143: uint16(20867), + 144: uint16(20868), + 145: uint16(20870), + 146: uint16(20871), + 147: uint16(20874), + 148: uint16(20875), + 149: uint16(20878), + 150: uint16(20879), + 151: uint16(20880), + 152: uint16(20881), + 153: uint16(20883), + 154: uint16(20884), + 155: uint16(20888), + 156: uint16(20890), + 157: uint16(20893), + 158: uint16(20894), + 159: uint16(20895), + 160: uint16(20897), + 161: uint16(20899), + 162: uint16(20902), + 163: uint16(20903), + 164: uint16(20904), + 165: uint16(20905), + 166: uint16(20906), + 167: uint16(20909), + 168: uint16(20910), + 169: uint16(20916), + 170: uint16(20920), + 171: uint16(20921), + 172: uint16(20922), + 173: uint16(20926), + 174: uint16(20927), + 175: uint16(20929), + 176: uint16(20930), + 177: uint16(20931), + 178: uint16(20933), + 179: uint16(20936), + 180: uint16(20938), + 181: uint16(20941), + 182: uint16(20942), + 183: uint16(20944), + 184: uint16(20946), + 185: uint16(20947), + 186: uint16(20948), + 187: uint16(20949), + 188: uint16(20950), + 189: uint16(20951), + }, + 3: { + 0: uint16(20952), + 1: uint16(20953), + 2: uint16(20954), + 3: uint16(20956), + 4: uint16(20958), + 5: uint16(20959), + 6: uint16(20962), + 7: uint16(20963), + 8: uint16(20965), + 9: uint16(20966), + 10: uint16(20967), + 11: uint16(20968), + 12: uint16(20969), + 13: uint16(20970), + 14: uint16(20972), + 15: uint16(20974), + 16: uint16(20977), + 17: uint16(20978), + 18: uint16(20980), + 19: uint16(20983), + 20: uint16(20990), + 21: uint16(20996), + 22: uint16(20997), + 23: uint16(21001), + 24: uint16(21003), + 25: uint16(21004), + 26: uint16(21007), + 27: uint16(21008), + 28: uint16(21011), + 29: uint16(21012), + 30: uint16(21013), + 31: uint16(21020), + 32: uint16(21022), + 33: uint16(21023), + 34: uint16(21025), + 35: uint16(21026), + 36: uint16(21027), + 37: uint16(21029), + 38: uint16(21030), + 39: uint16(21031), + 40: uint16(21034), + 41: uint16(21036), + 42: uint16(21039), + 43: uint16(21041), + 44: uint16(21042), + 45: uint16(21044), + 46: uint16(21045), + 47: uint16(21052), + 48: uint16(21054), + 49: uint16(21060), + 50: uint16(21061), + 51: uint16(21062), + 52: uint16(21063), + 53: uint16(21064), + 54: uint16(21065), + 55: uint16(21067), + 56: uint16(21070), + 57: uint16(21071), + 58: uint16(21074), + 59: uint16(21075), + 60: uint16(21077), + 61: uint16(21079), + 62: uint16(21080), + 63: uint16(21081), + 64: uint16(21082), + 65: uint16(21083), + 66: uint16(21085), + 67: uint16(21087), + 68: uint16(21088), + 69: uint16(21090), + 70: uint16(21091), + 71: uint16(21092), + 72: uint16(21094), + 73: uint16(21096), + 74: uint16(21099), + 75: uint16(21100), + 76: uint16(21101), + 77: uint16(21102), + 78: uint16(21104), + 79: uint16(21105), + 80: uint16(21107), + 81: uint16(21108), + 82: uint16(21109), + 83: uint16(21110), + 84: uint16(21111), + 85: uint16(21112), + 86: uint16(21113), + 87: uint16(21114), + 88: uint16(21115), + 89: uint16(21116), + 90: uint16(21118), + 91: uint16(21120), + 92: uint16(21123), + 93: uint16(21124), + 94: uint16(21125), + 95: uint16(21126), + 96: uint16(21127), + 97: uint16(21129), + 98: uint16(21130), + 99: uint16(21131), + 100: uint16(21132), + 101: uint16(21133), + 102: uint16(21134), + 103: uint16(21135), + 104: uint16(21137), + 105: uint16(21138), + 106: uint16(21140), + 107: uint16(21141), + 108: uint16(21142), + 109: uint16(21143), + 110: uint16(21144), + 111: uint16(21145), + 112: uint16(21146), + 113: uint16(21148), + 114: uint16(21156), + 115: uint16(21157), + 116: uint16(21158), + 117: uint16(21159), + 118: uint16(21166), + 119: uint16(21167), + 120: uint16(21168), + 121: uint16(21172), + 122: uint16(21173), + 123: uint16(21174), + 124: uint16(21175), + 125: uint16(21176), + 126: uint16(21177), + 127: uint16(21178), + 128: uint16(21179), + 129: uint16(21180), + 130: uint16(21181), + 131: uint16(21184), + 132: uint16(21185), + 133: uint16(21186), + 134: uint16(21188), + 135: uint16(21189), + 136: uint16(21190), + 137: uint16(21192), + 138: uint16(21194), + 139: uint16(21196), + 140: uint16(21197), + 141: uint16(21198), + 142: uint16(21199), + 143: uint16(21201), + 144: uint16(21203), + 145: uint16(21204), + 146: uint16(21205), + 147: uint16(21207), + 148: uint16(21209), + 149: uint16(21210), + 150: uint16(21211), + 151: uint16(21212), + 152: uint16(21213), + 153: uint16(21214), + 154: uint16(21216), + 155: uint16(21217), + 156: uint16(21218), + 157: uint16(21219), + 158: uint16(21221), + 159: uint16(21222), + 160: uint16(21223), + 161: uint16(21224), + 162: uint16(21225), + 163: uint16(21226), + 164: uint16(21227), + 165: uint16(21228), + 166: uint16(21229), + 167: uint16(21230), + 168: uint16(21231), + 169: uint16(21233), + 170: uint16(21234), + 171: uint16(21235), + 172: uint16(21236), + 173: uint16(21237), + 174: uint16(21238), + 175: uint16(21239), + 176: uint16(21240), + 177: uint16(21243), + 178: uint16(21244), + 179: uint16(21245), + 180: uint16(21249), + 181: uint16(21250), + 182: uint16(21251), + 183: uint16(21252), + 184: uint16(21255), + 185: uint16(21257), + 186: uint16(21258), + 187: uint16(21259), + 188: uint16(21260), + 189: uint16(21262), + }, + 4: { + 0: uint16(21265), + 1: uint16(21266), + 2: uint16(21267), + 3: uint16(21268), + 4: uint16(21272), + 5: uint16(21275), + 6: uint16(21276), + 7: uint16(21278), + 8: uint16(21279), + 9: uint16(21282), + 10: uint16(21284), + 11: uint16(21285), + 12: uint16(21287), + 13: uint16(21288), + 14: uint16(21289), + 15: uint16(21291), + 16: uint16(21292), + 17: uint16(21293), + 18: uint16(21295), + 19: uint16(21296), + 20: uint16(21297), + 21: uint16(21298), + 22: uint16(21299), + 23: uint16(21300), + 24: uint16(21301), + 25: uint16(21302), + 26: uint16(21303), + 27: uint16(21304), + 28: uint16(21308), + 29: uint16(21309), + 30: uint16(21312), + 31: uint16(21314), + 32: uint16(21316), + 33: uint16(21318), + 34: uint16(21323), + 35: uint16(21324), + 36: uint16(21325), + 37: uint16(21328), + 38: uint16(21332), + 39: uint16(21336), + 40: uint16(21337), + 41: uint16(21339), + 42: uint16(21341), + 43: uint16(21349), + 44: uint16(21352), + 45: uint16(21354), + 46: uint16(21356), + 47: uint16(21357), + 48: uint16(21362), + 49: uint16(21366), + 50: uint16(21369), + 51: uint16(21371), + 52: uint16(21372), + 53: uint16(21373), + 54: uint16(21374), + 55: uint16(21376), + 56: uint16(21377), + 57: uint16(21379), + 58: uint16(21383), + 59: uint16(21384), + 60: uint16(21386), + 61: uint16(21390), + 62: uint16(21391), + 63: uint16(21392), + 64: uint16(21393), + 65: uint16(21394), + 66: uint16(21395), + 67: uint16(21396), + 68: uint16(21398), + 69: uint16(21399), + 70: uint16(21401), + 71: uint16(21403), + 72: uint16(21404), + 73: uint16(21406), + 74: uint16(21408), + 75: uint16(21409), + 76: uint16(21412), + 77: uint16(21415), + 78: uint16(21418), + 79: uint16(21419), + 80: uint16(21420), + 81: uint16(21421), + 82: uint16(21423), + 83: uint16(21424), + 84: uint16(21425), + 85: uint16(21426), + 86: uint16(21427), + 87: uint16(21428), + 88: uint16(21429), + 89: uint16(21431), + 90: uint16(21432), + 91: uint16(21433), + 92: uint16(21434), + 93: uint16(21436), + 94: uint16(21437), + 95: uint16(21438), + 96: uint16(21440), + 97: uint16(21443), + 98: uint16(21444), + 99: uint16(21445), + 100: uint16(21446), + 101: uint16(21447), + 102: uint16(21454), + 103: uint16(21455), + 104: uint16(21456), + 105: uint16(21458), + 106: uint16(21459), + 107: uint16(21461), + 108: uint16(21466), + 109: uint16(21468), + 110: uint16(21469), + 111: uint16(21470), + 112: uint16(21473), + 113: uint16(21474), + 114: uint16(21479), + 115: uint16(21492), + 116: uint16(21498), + 117: uint16(21502), + 118: uint16(21503), + 119: uint16(21504), + 120: uint16(21506), + 121: uint16(21509), + 122: uint16(21511), + 123: uint16(21515), + 124: uint16(21524), + 125: uint16(21528), + 126: uint16(21529), + 127: uint16(21530), + 128: uint16(21532), + 129: uint16(21538), + 130: uint16(21540), + 131: uint16(21541), + 132: uint16(21546), + 133: uint16(21552), + 134: uint16(21555), + 135: uint16(21558), + 136: uint16(21559), + 137: uint16(21562), + 138: uint16(21565), + 139: uint16(21567), + 140: uint16(21569), + 141: uint16(21570), + 142: uint16(21572), + 143: uint16(21573), + 144: uint16(21575), + 145: uint16(21577), + 146: uint16(21580), + 147: uint16(21581), + 148: uint16(21582), + 149: uint16(21583), + 150: uint16(21585), + 151: uint16(21594), + 152: uint16(21597), + 153: uint16(21598), + 154: uint16(21599), + 155: uint16(21600), + 156: uint16(21601), + 157: uint16(21603), + 158: uint16(21605), + 159: uint16(21607), + 160: uint16(21609), + 161: uint16(21610), + 162: uint16(21611), + 163: uint16(21612), + 164: uint16(21613), + 165: uint16(21614), + 166: uint16(21615), + 167: uint16(21616), + 168: uint16(21620), + 169: uint16(21625), + 170: uint16(21626), + 171: uint16(21630), + 172: uint16(21631), + 173: uint16(21633), + 174: uint16(21635), + 175: uint16(21637), + 176: uint16(21639), + 177: uint16(21640), + 178: uint16(21641), + 179: uint16(21642), + 180: uint16(21645), + 181: uint16(21649), + 182: uint16(21651), + 183: uint16(21655), + 184: uint16(21656), + 185: uint16(21660), + 186: uint16(21662), + 187: uint16(21663), + 188: uint16(21664), + 189: uint16(21665), + }, + 5: { + 0: uint16(21666), + 1: uint16(21669), + 2: uint16(21678), + 3: uint16(21680), + 4: uint16(21682), + 5: uint16(21685), + 6: uint16(21686), + 7: uint16(21687), + 8: uint16(21689), + 9: uint16(21690), + 10: uint16(21692), + 11: uint16(21694), + 12: uint16(21699), + 13: uint16(21701), + 14: uint16(21706), + 15: uint16(21707), + 16: uint16(21718), + 17: uint16(21720), + 18: uint16(21723), + 19: uint16(21728), + 20: uint16(21729), + 21: uint16(21730), + 22: uint16(21731), + 23: uint16(21732), + 24: uint16(21739), + 25: uint16(21740), + 26: uint16(21743), + 27: uint16(21744), + 28: uint16(21745), + 29: uint16(21748), + 30: uint16(21749), + 31: uint16(21750), + 32: uint16(21751), + 33: uint16(21752), + 34: uint16(21753), + 35: uint16(21755), + 36: uint16(21758), + 37: uint16(21760), + 38: uint16(21762), + 39: uint16(21763), + 40: uint16(21764), + 41: uint16(21765), + 42: uint16(21768), + 43: uint16(21770), + 44: uint16(21771), + 45: uint16(21772), + 46: uint16(21773), + 47: uint16(21774), + 48: uint16(21778), + 49: uint16(21779), + 50: uint16(21781), + 51: uint16(21782), + 52: uint16(21783), + 53: uint16(21784), + 54: uint16(21785), + 55: uint16(21786), + 56: uint16(21788), + 57: uint16(21789), + 58: uint16(21790), + 59: uint16(21791), + 60: uint16(21793), + 61: uint16(21797), + 62: uint16(21798), + 63: uint16(21800), + 64: uint16(21801), + 65: uint16(21803), + 66: uint16(21805), + 67: uint16(21810), + 68: uint16(21812), + 69: uint16(21813), + 70: uint16(21814), + 71: uint16(21816), + 72: uint16(21817), + 73: uint16(21818), + 74: uint16(21819), + 75: uint16(21821), + 76: uint16(21824), + 77: uint16(21826), + 78: uint16(21829), + 79: uint16(21831), + 80: uint16(21832), + 81: uint16(21835), + 82: uint16(21836), + 83: uint16(21837), + 84: uint16(21838), + 85: uint16(21839), + 86: uint16(21841), + 87: uint16(21842), + 88: uint16(21843), + 89: uint16(21844), + 90: uint16(21847), + 91: uint16(21848), + 92: uint16(21849), + 93: uint16(21850), + 94: uint16(21851), + 95: uint16(21853), + 96: uint16(21854), + 97: uint16(21855), + 98: uint16(21856), + 99: uint16(21858), + 100: uint16(21859), + 101: uint16(21864), + 102: uint16(21865), + 103: uint16(21867), + 104: uint16(21871), + 105: uint16(21872), + 106: uint16(21873), + 107: uint16(21874), + 108: uint16(21875), + 109: uint16(21876), + 110: uint16(21881), + 111: uint16(21882), + 112: uint16(21885), + 113: uint16(21887), + 114: uint16(21893), + 115: uint16(21894), + 116: uint16(21900), + 117: uint16(21901), + 118: uint16(21902), + 119: uint16(21904), + 120: uint16(21906), + 121: uint16(21907), + 122: uint16(21909), + 123: uint16(21910), + 124: uint16(21911), + 125: uint16(21914), + 126: uint16(21915), + 127: uint16(21918), + 128: uint16(21920), + 129: uint16(21921), + 130: uint16(21922), + 131: uint16(21923), + 132: uint16(21924), + 133: uint16(21925), + 134: uint16(21926), + 135: uint16(21928), + 136: uint16(21929), + 137: uint16(21930), + 138: uint16(21931), + 139: uint16(21932), + 140: uint16(21933), + 141: uint16(21934), + 142: uint16(21935), + 143: uint16(21936), + 144: uint16(21938), + 145: uint16(21940), + 146: uint16(21942), + 147: uint16(21944), + 148: uint16(21946), + 149: uint16(21948), + 150: uint16(21951), + 151: uint16(21952), + 152: uint16(21953), + 153: uint16(21954), + 154: uint16(21955), + 155: uint16(21958), + 156: uint16(21959), + 157: uint16(21960), + 158: uint16(21962), + 159: uint16(21963), + 160: uint16(21966), + 161: uint16(21967), + 162: uint16(21968), + 163: uint16(21973), + 164: uint16(21975), + 165: uint16(21976), + 166: uint16(21977), + 167: uint16(21978), + 168: uint16(21979), + 169: uint16(21982), + 170: uint16(21984), + 171: uint16(21986), + 172: uint16(21991), + 173: uint16(21993), + 174: uint16(21997), + 175: uint16(21998), + 176: uint16(22000), + 177: uint16(22001), + 178: uint16(22004), + 179: uint16(22006), + 180: uint16(22008), + 181: uint16(22009), + 182: uint16(22010), + 183: uint16(22011), + 184: uint16(22012), + 185: uint16(22015), + 186: uint16(22018), + 187: uint16(22019), + 188: uint16(22020), + 189: uint16(22021), + }, + 6: { + 0: uint16(22022), + 1: uint16(22023), + 2: uint16(22026), + 3: uint16(22027), + 4: uint16(22029), + 5: uint16(22032), + 6: uint16(22033), + 7: uint16(22034), + 8: uint16(22035), + 9: uint16(22036), + 10: uint16(22037), + 11: uint16(22038), + 12: uint16(22039), + 13: uint16(22041), + 14: uint16(22042), + 15: uint16(22044), + 16: uint16(22045), + 17: uint16(22048), + 18: uint16(22049), + 19: uint16(22050), + 20: uint16(22053), + 21: uint16(22054), + 22: uint16(22056), + 23: uint16(22057), + 24: uint16(22058), + 25: uint16(22059), + 26: uint16(22062), + 27: uint16(22063), + 28: uint16(22064), + 29: uint16(22067), + 30: uint16(22069), + 31: uint16(22071), + 32: uint16(22072), + 33: uint16(22074), + 34: uint16(22076), + 35: uint16(22077), + 36: uint16(22078), + 37: uint16(22080), + 38: uint16(22081), + 39: uint16(22082), + 40: uint16(22083), + 41: uint16(22084), + 42: uint16(22085), + 43: uint16(22086), + 44: uint16(22087), + 45: uint16(22088), + 46: uint16(22089), + 47: uint16(22090), + 48: uint16(22091), + 49: uint16(22095), + 50: uint16(22096), + 51: uint16(22097), + 52: uint16(22098), + 53: uint16(22099), + 54: uint16(22101), + 55: uint16(22102), + 56: uint16(22106), + 57: uint16(22107), + 58: uint16(22109), + 59: uint16(22110), + 60: uint16(22111), + 61: uint16(22112), + 62: uint16(22113), + 63: uint16(22115), + 64: uint16(22117), + 65: uint16(22118), + 66: uint16(22119), + 67: uint16(22125), + 68: uint16(22126), + 69: uint16(22127), + 70: uint16(22128), + 71: uint16(22130), + 72: uint16(22131), + 73: uint16(22132), + 74: uint16(22133), + 75: uint16(22135), + 76: uint16(22136), + 77: uint16(22137), + 78: uint16(22138), + 79: uint16(22141), + 80: uint16(22142), + 81: uint16(22143), + 82: uint16(22144), + 83: uint16(22145), + 84: uint16(22146), + 85: uint16(22147), + 86: uint16(22148), + 87: uint16(22151), + 88: uint16(22152), + 89: uint16(22153), + 90: uint16(22154), + 91: uint16(22155), + 92: uint16(22156), + 93: uint16(22157), + 94: uint16(22160), + 95: uint16(22161), + 96: uint16(22162), + 97: uint16(22164), + 98: uint16(22165), + 99: uint16(22166), + 100: uint16(22167), + 101: uint16(22168), + 102: uint16(22169), + 103: uint16(22170), + 104: uint16(22171), + 105: uint16(22172), + 106: uint16(22173), + 107: uint16(22174), + 108: uint16(22175), + 109: uint16(22176), + 110: uint16(22177), + 111: uint16(22178), + 112: uint16(22180), + 113: uint16(22181), + 114: uint16(22182), + 115: uint16(22183), + 116: uint16(22184), + 117: uint16(22185), + 118: uint16(22186), + 119: uint16(22187), + 120: uint16(22188), + 121: uint16(22189), + 122: uint16(22190), + 123: uint16(22192), + 124: uint16(22193), + 125: uint16(22194), + 126: uint16(22195), + 127: uint16(22196), + 128: uint16(22197), + 129: uint16(22198), + 130: uint16(22200), + 131: uint16(22201), + 132: uint16(22202), + 133: uint16(22203), + 134: uint16(22205), + 135: uint16(22206), + 136: uint16(22207), + 137: uint16(22208), + 138: uint16(22209), + 139: uint16(22210), + 140: uint16(22211), + 141: uint16(22212), + 142: uint16(22213), + 143: uint16(22214), + 144: uint16(22215), + 145: uint16(22216), + 146: uint16(22217), + 147: uint16(22219), + 148: uint16(22220), + 149: uint16(22221), + 150: uint16(22222), + 151: uint16(22223), + 152: uint16(22224), + 153: uint16(22225), + 154: uint16(22226), + 155: uint16(22227), + 156: uint16(22229), + 157: uint16(22230), + 158: uint16(22232), + 159: uint16(22233), + 160: uint16(22236), + 161: uint16(22243), + 162: uint16(22245), + 163: uint16(22246), + 164: uint16(22247), + 165: uint16(22248), + 166: uint16(22249), + 167: uint16(22250), + 168: uint16(22252), + 169: uint16(22254), + 170: uint16(22255), + 171: uint16(22258), + 172: uint16(22259), + 173: uint16(22262), + 174: uint16(22263), + 175: uint16(22264), + 176: uint16(22267), + 177: uint16(22268), + 178: uint16(22272), + 179: uint16(22273), + 180: uint16(22274), + 181: uint16(22277), + 182: uint16(22279), + 183: uint16(22283), + 184: uint16(22284), + 185: uint16(22285), + 186: uint16(22286), + 187: uint16(22287), + 188: uint16(22288), + 189: uint16(22289), + }, + 7: { + 0: uint16(22290), + 1: uint16(22291), + 2: uint16(22292), + 3: uint16(22293), + 4: uint16(22294), + 5: uint16(22295), + 6: uint16(22296), + 7: uint16(22297), + 8: uint16(22298), + 9: uint16(22299), + 10: uint16(22301), + 11: uint16(22302), + 12: uint16(22304), + 13: uint16(22305), + 14: uint16(22306), + 15: uint16(22308), + 16: uint16(22309), + 17: uint16(22310), + 18: uint16(22311), + 19: uint16(22315), + 20: uint16(22321), + 21: uint16(22322), + 22: uint16(22324), + 23: uint16(22325), + 24: uint16(22326), + 25: uint16(22327), + 26: uint16(22328), + 27: uint16(22332), + 28: uint16(22333), + 29: uint16(22335), + 30: uint16(22337), + 31: uint16(22339), + 32: uint16(22340), + 33: uint16(22341), + 34: uint16(22342), + 35: uint16(22344), + 36: uint16(22345), + 37: uint16(22347), + 38: uint16(22354), + 39: uint16(22355), + 40: uint16(22356), + 41: uint16(22357), + 42: uint16(22358), + 43: uint16(22360), + 44: uint16(22361), + 45: uint16(22370), + 46: uint16(22371), + 47: uint16(22373), + 48: uint16(22375), + 49: uint16(22380), + 50: uint16(22382), + 51: uint16(22384), + 52: uint16(22385), + 53: uint16(22386), + 54: uint16(22388), + 55: uint16(22389), + 56: uint16(22392), + 57: uint16(22393), + 58: uint16(22394), + 59: uint16(22397), + 60: uint16(22398), + 61: uint16(22399), + 62: uint16(22400), + 63: uint16(22401), + 64: uint16(22407), + 65: uint16(22408), + 66: uint16(22409), + 67: uint16(22410), + 68: uint16(22413), + 69: uint16(22414), + 70: uint16(22415), + 71: uint16(22416), + 72: uint16(22417), + 73: uint16(22420), + 74: uint16(22421), + 75: uint16(22422), + 76: uint16(22423), + 77: uint16(22424), + 78: uint16(22425), + 79: uint16(22426), + 80: uint16(22428), + 81: uint16(22429), + 82: uint16(22430), + 83: uint16(22431), + 84: uint16(22437), + 85: uint16(22440), + 86: uint16(22442), + 87: uint16(22444), + 88: uint16(22447), + 89: uint16(22448), + 90: uint16(22449), + 91: uint16(22451), + 92: uint16(22453), + 93: uint16(22454), + 94: uint16(22455), + 95: uint16(22457), + 96: uint16(22458), + 97: uint16(22459), + 98: uint16(22460), + 99: uint16(22461), + 100: uint16(22462), + 101: uint16(22463), + 102: uint16(22464), + 103: uint16(22465), + 104: uint16(22468), + 105: uint16(22469), + 106: uint16(22470), + 107: uint16(22471), + 108: uint16(22472), + 109: uint16(22473), + 110: uint16(22474), + 111: uint16(22476), + 112: uint16(22477), + 113: uint16(22480), + 114: uint16(22481), + 115: uint16(22483), + 116: uint16(22486), + 117: uint16(22487), + 118: uint16(22491), + 119: uint16(22492), + 120: uint16(22494), + 121: uint16(22497), + 122: uint16(22498), + 123: uint16(22499), + 124: uint16(22501), + 125: uint16(22502), + 126: uint16(22503), + 127: uint16(22504), + 128: uint16(22505), + 129: uint16(22506), + 130: uint16(22507), + 131: uint16(22508), + 132: uint16(22510), + 133: uint16(22512), + 134: uint16(22513), + 135: uint16(22514), + 136: uint16(22515), + 137: uint16(22517), + 138: uint16(22518), + 139: uint16(22519), + 140: uint16(22523), + 141: uint16(22524), + 142: uint16(22526), + 143: uint16(22527), + 144: uint16(22529), + 145: uint16(22531), + 146: uint16(22532), + 147: uint16(22533), + 148: uint16(22536), + 149: uint16(22537), + 150: uint16(22538), + 151: uint16(22540), + 152: uint16(22542), + 153: uint16(22543), + 154: uint16(22544), + 155: uint16(22546), + 156: uint16(22547), + 157: uint16(22548), + 158: uint16(22550), + 159: uint16(22551), + 160: uint16(22552), + 161: uint16(22554), + 162: uint16(22555), + 163: uint16(22556), + 164: uint16(22557), + 165: uint16(22559), + 166: uint16(22562), + 167: uint16(22563), + 168: uint16(22565), + 169: uint16(22566), + 170: uint16(22567), + 171: uint16(22568), + 172: uint16(22569), + 173: uint16(22571), + 174: uint16(22572), + 175: uint16(22573), + 176: uint16(22574), + 177: uint16(22575), + 178: uint16(22577), + 179: uint16(22578), + 180: uint16(22579), + 181: uint16(22580), + 182: uint16(22582), + 183: uint16(22583), + 184: uint16(22584), + 185: uint16(22585), + 186: uint16(22586), + 187: uint16(22587), + 188: uint16(22588), + 189: uint16(22589), + }, + 8: { + 0: uint16(22590), + 1: uint16(22591), + 2: uint16(22592), + 3: uint16(22593), + 4: uint16(22594), + 5: uint16(22595), + 6: uint16(22597), + 7: uint16(22598), + 8: uint16(22599), + 9: uint16(22600), + 10: uint16(22601), + 11: uint16(22602), + 12: uint16(22603), + 13: uint16(22606), + 14: uint16(22607), + 15: uint16(22608), + 16: uint16(22610), + 17: uint16(22611), + 18: uint16(22613), + 19: uint16(22614), + 20: uint16(22615), + 21: uint16(22617), + 22: uint16(22618), + 23: uint16(22619), + 24: uint16(22620), + 25: uint16(22621), + 26: uint16(22623), + 27: uint16(22624), + 28: uint16(22625), + 29: uint16(22626), + 30: uint16(22627), + 31: uint16(22628), + 32: uint16(22630), + 33: uint16(22631), + 34: uint16(22632), + 35: uint16(22633), + 36: uint16(22634), + 37: uint16(22637), + 38: uint16(22638), + 39: uint16(22639), + 40: uint16(22640), + 41: uint16(22641), + 42: uint16(22642), + 43: uint16(22643), + 44: uint16(22644), + 45: uint16(22645), + 46: uint16(22646), + 47: uint16(22647), + 48: uint16(22648), + 49: uint16(22649), + 50: uint16(22650), + 51: uint16(22651), + 52: uint16(22652), + 53: uint16(22653), + 54: uint16(22655), + 55: uint16(22658), + 56: uint16(22660), + 57: uint16(22662), + 58: uint16(22663), + 59: uint16(22664), + 60: uint16(22666), + 61: uint16(22667), + 62: uint16(22668), + 63: uint16(22669), + 64: uint16(22670), + 65: uint16(22671), + 66: uint16(22672), + 67: uint16(22673), + 68: uint16(22676), + 69: uint16(22677), + 70: uint16(22678), + 71: uint16(22679), + 72: uint16(22680), + 73: uint16(22683), + 74: uint16(22684), + 75: uint16(22685), + 76: uint16(22688), + 77: uint16(22689), + 78: uint16(22690), + 79: uint16(22691), + 80: uint16(22692), + 81: uint16(22693), + 82: uint16(22694), + 83: uint16(22695), + 84: uint16(22698), + 85: uint16(22699), + 86: uint16(22700), + 87: uint16(22701), + 88: uint16(22702), + 89: uint16(22703), + 90: uint16(22704), + 91: uint16(22705), + 92: uint16(22706), + 93: uint16(22707), + 94: uint16(22708), + 95: uint16(22709), + 96: uint16(22710), + 97: uint16(22711), + 98: uint16(22712), + 99: uint16(22713), + 100: uint16(22714), + 101: uint16(22715), + 102: uint16(22717), + 103: uint16(22718), + 104: uint16(22719), + 105: uint16(22720), + 106: uint16(22722), + 107: uint16(22723), + 108: uint16(22724), + 109: uint16(22726), + 110: uint16(22727), + 111: uint16(22728), + 112: uint16(22729), + 113: uint16(22730), + 114: uint16(22731), + 115: uint16(22732), + 116: uint16(22733), + 117: uint16(22734), + 118: uint16(22735), + 119: uint16(22736), + 120: uint16(22738), + 121: uint16(22739), + 122: uint16(22740), + 123: uint16(22742), + 124: uint16(22743), + 125: uint16(22744), + 126: uint16(22745), + 127: uint16(22746), + 128: uint16(22747), + 129: uint16(22748), + 130: uint16(22749), + 131: uint16(22750), + 132: uint16(22751), + 133: uint16(22752), + 134: uint16(22753), + 135: uint16(22754), + 136: uint16(22755), + 137: uint16(22757), + 138: uint16(22758), + 139: uint16(22759), + 140: uint16(22760), + 141: uint16(22761), + 142: uint16(22762), + 143: uint16(22765), + 144: uint16(22767), + 145: uint16(22769), + 146: uint16(22770), + 147: uint16(22772), + 148: uint16(22773), + 149: uint16(22775), + 150: uint16(22776), + 151: uint16(22778), + 152: uint16(22779), + 153: uint16(22780), + 154: uint16(22781), + 155: uint16(22782), + 156: uint16(22783), + 157: uint16(22784), + 158: uint16(22785), + 159: uint16(22787), + 160: uint16(22789), + 161: uint16(22790), + 162: uint16(22792), + 163: uint16(22793), + 164: uint16(22794), + 165: uint16(22795), + 166: uint16(22796), + 167: uint16(22798), + 168: uint16(22800), + 169: uint16(22801), + 170: uint16(22802), + 171: uint16(22803), + 172: uint16(22807), + 173: uint16(22808), + 174: uint16(22811), + 175: uint16(22813), + 176: uint16(22814), + 177: uint16(22816), + 178: uint16(22817), + 179: uint16(22818), + 180: uint16(22819), + 181: uint16(22822), + 182: uint16(22824), + 183: uint16(22828), + 184: uint16(22832), + 185: uint16(22834), + 186: uint16(22835), + 187: uint16(22837), + 188: uint16(22838), + 189: uint16(22843), + }, + 9: { + 0: uint16(22845), + 1: uint16(22846), + 2: uint16(22847), + 3: uint16(22848), + 4: uint16(22851), + 5: uint16(22853), + 6: uint16(22854), + 7: uint16(22858), + 8: uint16(22860), + 9: uint16(22861), + 10: uint16(22864), + 11: uint16(22866), + 12: uint16(22867), + 13: uint16(22873), + 14: uint16(22875), + 15: uint16(22876), + 16: uint16(22877), + 17: uint16(22878), + 18: uint16(22879), + 19: uint16(22881), + 20: uint16(22883), + 21: uint16(22884), + 22: uint16(22886), + 23: uint16(22887), + 24: uint16(22888), + 25: uint16(22889), + 26: uint16(22890), + 27: uint16(22891), + 28: uint16(22892), + 29: uint16(22893), + 30: uint16(22894), + 31: uint16(22895), + 32: uint16(22896), + 33: uint16(22897), + 34: uint16(22898), + 35: uint16(22901), + 36: uint16(22903), + 37: uint16(22906), + 38: uint16(22907), + 39: uint16(22908), + 40: uint16(22910), + 41: uint16(22911), + 42: uint16(22912), + 43: uint16(22917), + 44: uint16(22921), + 45: uint16(22923), + 46: uint16(22924), + 47: uint16(22926), + 48: uint16(22927), + 49: uint16(22928), + 50: uint16(22929), + 51: uint16(22932), + 52: uint16(22933), + 53: uint16(22936), + 54: uint16(22938), + 55: uint16(22939), + 56: uint16(22940), + 57: uint16(22941), + 58: uint16(22943), + 59: uint16(22944), + 60: uint16(22945), + 61: uint16(22946), + 62: uint16(22950), + 63: uint16(22951), + 64: uint16(22956), + 65: uint16(22957), + 66: uint16(22960), + 67: uint16(22961), + 68: uint16(22963), + 69: uint16(22964), + 70: uint16(22965), + 71: uint16(22966), + 72: uint16(22967), + 73: uint16(22968), + 74: uint16(22970), + 75: uint16(22972), + 76: uint16(22973), + 77: uint16(22975), + 78: uint16(22976), + 79: uint16(22977), + 80: uint16(22978), + 81: uint16(22979), + 82: uint16(22980), + 83: uint16(22981), + 84: uint16(22983), + 85: uint16(22984), + 86: uint16(22985), + 87: uint16(22988), + 88: uint16(22989), + 89: uint16(22990), + 90: uint16(22991), + 91: uint16(22997), + 92: uint16(22998), + 93: uint16(23001), + 94: uint16(23003), + 95: uint16(23006), + 96: uint16(23007), + 97: uint16(23008), + 98: uint16(23009), + 99: uint16(23010), + 100: uint16(23012), + 101: uint16(23014), + 102: uint16(23015), + 103: uint16(23017), + 104: uint16(23018), + 105: uint16(23019), + 106: uint16(23021), + 107: uint16(23022), + 108: uint16(23023), + 109: uint16(23024), + 110: uint16(23025), + 111: uint16(23026), + 112: uint16(23027), + 113: uint16(23028), + 114: uint16(23029), + 115: uint16(23030), + 116: uint16(23031), + 117: uint16(23032), + 118: uint16(23034), + 119: uint16(23036), + 120: uint16(23037), + 121: uint16(23038), + 122: uint16(23040), + 123: uint16(23042), + 124: uint16(23050), + 125: uint16(23051), + 126: uint16(23053), + 127: uint16(23054), + 128: uint16(23055), + 129: uint16(23056), + 130: uint16(23058), + 131: uint16(23060), + 132: uint16(23061), + 133: uint16(23062), + 134: uint16(23063), + 135: uint16(23065), + 136: uint16(23066), + 137: uint16(23067), + 138: uint16(23069), + 139: uint16(23070), + 140: uint16(23073), + 141: uint16(23074), + 142: uint16(23076), + 143: uint16(23078), + 144: uint16(23079), + 145: uint16(23080), + 146: uint16(23082), + 147: uint16(23083), + 148: uint16(23084), + 149: uint16(23085), + 150: uint16(23086), + 151: uint16(23087), + 152: uint16(23088), + 153: uint16(23091), + 154: uint16(23093), + 155: uint16(23095), + 156: uint16(23096), + 157: uint16(23097), + 158: uint16(23098), + 159: uint16(23099), + 160: uint16(23101), + 161: uint16(23102), + 162: uint16(23103), + 163: uint16(23105), + 164: uint16(23106), + 165: uint16(23107), + 166: uint16(23108), + 167: uint16(23109), + 168: uint16(23111), + 169: uint16(23112), + 170: uint16(23115), + 171: uint16(23116), + 172: uint16(23117), + 173: uint16(23118), + 174: uint16(23119), + 175: uint16(23120), + 176: uint16(23121), + 177: uint16(23122), + 178: uint16(23123), + 179: uint16(23124), + 180: uint16(23126), + 181: uint16(23127), + 182: uint16(23128), + 183: uint16(23129), + 184: uint16(23131), + 185: uint16(23132), + 186: uint16(23133), + 187: uint16(23134), + 188: uint16(23135), + 189: uint16(23136), + }, + 10: { + 0: uint16(23137), + 1: uint16(23139), + 2: uint16(23140), + 3: uint16(23141), + 4: uint16(23142), + 5: uint16(23144), + 6: uint16(23145), + 7: uint16(23147), + 8: uint16(23148), + 9: uint16(23149), + 10: uint16(23150), + 11: uint16(23151), + 12: uint16(23152), + 13: uint16(23153), + 14: uint16(23154), + 15: uint16(23155), + 16: uint16(23160), + 17: uint16(23161), + 18: uint16(23163), + 19: uint16(23164), + 20: uint16(23165), + 21: uint16(23166), + 22: uint16(23168), + 23: uint16(23169), + 24: uint16(23170), + 25: uint16(23171), + 26: uint16(23172), + 27: uint16(23173), + 28: uint16(23174), + 29: uint16(23175), + 30: uint16(23176), + 31: uint16(23177), + 32: uint16(23178), + 33: uint16(23179), + 34: uint16(23180), + 35: uint16(23181), + 36: uint16(23182), + 37: uint16(23183), + 38: uint16(23184), + 39: uint16(23185), + 40: uint16(23187), + 41: uint16(23188), + 42: uint16(23189), + 43: uint16(23190), + 44: uint16(23191), + 45: uint16(23192), + 46: uint16(23193), + 47: uint16(23196), + 48: uint16(23197), + 49: uint16(23198), + 50: uint16(23199), + 51: uint16(23200), + 52: uint16(23201), + 53: uint16(23202), + 54: uint16(23203), + 55: uint16(23204), + 56: uint16(23205), + 57: uint16(23206), + 58: uint16(23207), + 59: uint16(23208), + 60: uint16(23209), + 61: uint16(23211), + 62: uint16(23212), + 63: uint16(23213), + 64: uint16(23214), + 65: uint16(23215), + 66: uint16(23216), + 67: uint16(23217), + 68: uint16(23220), + 69: uint16(23222), + 70: uint16(23223), + 71: uint16(23225), + 72: uint16(23226), + 73: uint16(23227), + 74: uint16(23228), + 75: uint16(23229), + 76: uint16(23231), + 77: uint16(23232), + 78: uint16(23235), + 79: uint16(23236), + 80: uint16(23237), + 81: uint16(23238), + 82: uint16(23239), + 83: uint16(23240), + 84: uint16(23242), + 85: uint16(23243), + 86: uint16(23245), + 87: uint16(23246), + 88: uint16(23247), + 89: uint16(23248), + 90: uint16(23249), + 91: uint16(23251), + 92: uint16(23253), + 93: uint16(23255), + 94: uint16(23257), + 95: uint16(23258), + 96: uint16(23259), + 97: uint16(23261), + 98: uint16(23262), + 99: uint16(23263), + 100: uint16(23266), + 101: uint16(23268), + 102: uint16(23269), + 103: uint16(23271), + 104: uint16(23272), + 105: uint16(23274), + 106: uint16(23276), + 107: uint16(23277), + 108: uint16(23278), + 109: uint16(23279), + 110: uint16(23280), + 111: uint16(23282), + 112: uint16(23283), + 113: uint16(23284), + 114: uint16(23285), + 115: uint16(23286), + 116: uint16(23287), + 117: uint16(23288), + 118: uint16(23289), + 119: uint16(23290), + 120: uint16(23291), + 121: uint16(23292), + 122: uint16(23293), + 123: uint16(23294), + 124: uint16(23295), + 125: uint16(23296), + 126: uint16(23297), + 127: uint16(23298), + 128: uint16(23299), + 129: uint16(23300), + 130: uint16(23301), + 131: uint16(23302), + 132: uint16(23303), + 133: uint16(23304), + 134: uint16(23306), + 135: uint16(23307), + 136: uint16(23308), + 137: uint16(23309), + 138: uint16(23310), + 139: uint16(23311), + 140: uint16(23312), + 141: uint16(23313), + 142: uint16(23314), + 143: uint16(23315), + 144: uint16(23316), + 145: uint16(23317), + 146: uint16(23320), + 147: uint16(23321), + 148: uint16(23322), + 149: uint16(23323), + 150: uint16(23324), + 151: uint16(23325), + 152: uint16(23326), + 153: uint16(23327), + 154: uint16(23328), + 155: uint16(23329), + 156: uint16(23330), + 157: uint16(23331), + 158: uint16(23332), + 159: uint16(23333), + 160: uint16(23334), + 161: uint16(23335), + 162: uint16(23336), + 163: uint16(23337), + 164: uint16(23338), + 165: uint16(23339), + 166: uint16(23340), + 167: uint16(23341), + 168: uint16(23342), + 169: uint16(23343), + 170: uint16(23344), + 171: uint16(23345), + 172: uint16(23347), + 173: uint16(23349), + 174: uint16(23350), + 175: uint16(23352), + 176: uint16(23353), + 177: uint16(23354), + 178: uint16(23355), + 179: uint16(23356), + 180: uint16(23357), + 181: uint16(23358), + 182: uint16(23359), + 183: uint16(23361), + 184: uint16(23362), + 185: uint16(23363), + 186: uint16(23364), + 187: uint16(23365), + 188: uint16(23366), + 189: uint16(23367), + }, + 11: { + 0: uint16(23368), + 1: uint16(23369), + 2: uint16(23370), + 3: uint16(23371), + 4: uint16(23372), + 5: uint16(23373), + 6: uint16(23374), + 7: uint16(23375), + 8: uint16(23378), + 9: uint16(23382), + 10: uint16(23390), + 11: uint16(23392), + 12: uint16(23393), + 13: uint16(23399), + 14: uint16(23400), + 15: uint16(23403), + 16: uint16(23405), + 17: uint16(23406), + 18: uint16(23407), + 19: uint16(23410), + 20: uint16(23412), + 21: uint16(23414), + 22: uint16(23415), + 23: uint16(23416), + 24: uint16(23417), + 25: uint16(23419), + 26: uint16(23420), + 27: uint16(23422), + 28: uint16(23423), + 29: uint16(23426), + 30: uint16(23430), + 31: uint16(23434), + 32: uint16(23437), + 33: uint16(23438), + 34: uint16(23440), + 35: uint16(23441), + 36: uint16(23442), + 37: uint16(23444), + 38: uint16(23446), + 39: uint16(23455), + 40: uint16(23463), + 41: uint16(23464), + 42: uint16(23465), + 43: uint16(23468), + 44: uint16(23469), + 45: uint16(23470), + 46: uint16(23471), + 47: uint16(23473), + 48: uint16(23474), + 49: uint16(23479), + 50: uint16(23482), + 51: uint16(23483), + 52: uint16(23484), + 53: uint16(23488), + 54: uint16(23489), + 55: uint16(23491), + 56: uint16(23496), + 57: uint16(23497), + 58: uint16(23498), + 59: uint16(23499), + 60: uint16(23501), + 61: uint16(23502), + 62: uint16(23503), + 63: uint16(23505), + 64: uint16(23508), + 65: uint16(23509), + 66: uint16(23510), + 67: uint16(23511), + 68: uint16(23512), + 69: uint16(23513), + 70: uint16(23514), + 71: uint16(23515), + 72: uint16(23516), + 73: uint16(23520), + 74: uint16(23522), + 75: uint16(23523), + 76: uint16(23526), + 77: uint16(23527), + 78: uint16(23529), + 79: uint16(23530), + 80: uint16(23531), + 81: uint16(23532), + 82: uint16(23533), + 83: uint16(23535), + 84: uint16(23537), + 85: uint16(23538), + 86: uint16(23539), + 87: uint16(23540), + 88: uint16(23541), + 89: uint16(23542), + 90: uint16(23543), + 91: uint16(23549), + 92: uint16(23550), + 93: uint16(23552), + 94: uint16(23554), + 95: uint16(23555), + 96: uint16(23557), + 97: uint16(23559), + 98: uint16(23560), + 99: uint16(23563), + 100: uint16(23564), + 101: uint16(23565), + 102: uint16(23566), + 103: uint16(23568), + 104: uint16(23570), + 105: uint16(23571), + 106: uint16(23575), + 107: uint16(23577), + 108: uint16(23579), + 109: uint16(23582), + 110: uint16(23583), + 111: uint16(23584), + 112: uint16(23585), + 113: uint16(23587), + 114: uint16(23590), + 115: uint16(23592), + 116: uint16(23593), + 117: uint16(23594), + 118: uint16(23595), + 119: uint16(23597), + 120: uint16(23598), + 121: uint16(23599), + 122: uint16(23600), + 123: uint16(23602), + 124: uint16(23603), + 125: uint16(23605), + 126: uint16(23606), + 127: uint16(23607), + 128: uint16(23619), + 129: uint16(23620), + 130: uint16(23622), + 131: uint16(23623), + 132: uint16(23628), + 133: uint16(23629), + 134: uint16(23634), + 135: uint16(23635), + 136: uint16(23636), + 137: uint16(23638), + 138: uint16(23639), + 139: uint16(23640), + 140: uint16(23642), + 141: uint16(23643), + 142: uint16(23644), + 143: uint16(23645), + 144: uint16(23647), + 145: uint16(23650), + 146: uint16(23652), + 147: uint16(23655), + 148: uint16(23656), + 149: uint16(23657), + 150: uint16(23658), + 151: uint16(23659), + 152: uint16(23660), + 153: uint16(23661), + 154: uint16(23664), + 155: uint16(23666), + 156: uint16(23667), + 157: uint16(23668), + 158: uint16(23669), + 159: uint16(23670), + 160: uint16(23671), + 161: uint16(23672), + 162: uint16(23675), + 163: uint16(23676), + 164: uint16(23677), + 165: uint16(23678), + 166: uint16(23680), + 167: uint16(23683), + 168: uint16(23684), + 169: uint16(23685), + 170: uint16(23686), + 171: uint16(23687), + 172: uint16(23689), + 173: uint16(23690), + 174: uint16(23691), + 175: uint16(23694), + 176: uint16(23695), + 177: uint16(23698), + 178: uint16(23699), + 179: uint16(23701), + 180: uint16(23709), + 181: uint16(23710), + 182: uint16(23711), + 183: uint16(23712), + 184: uint16(23713), + 185: uint16(23716), + 186: uint16(23717), + 187: uint16(23718), + 188: uint16(23719), + 189: uint16(23720), + }, + 12: { + 0: uint16(23722), + 1: uint16(23726), + 2: uint16(23727), + 3: uint16(23728), + 4: uint16(23730), + 5: uint16(23732), + 6: uint16(23734), + 7: uint16(23737), + 8: uint16(23738), + 9: uint16(23739), + 10: uint16(23740), + 11: uint16(23742), + 12: uint16(23744), + 13: uint16(23746), + 14: uint16(23747), + 15: uint16(23749), + 16: uint16(23750), + 17: uint16(23751), + 18: uint16(23752), + 19: uint16(23753), + 20: uint16(23754), + 21: uint16(23756), + 22: uint16(23757), + 23: uint16(23758), + 24: uint16(23759), + 25: uint16(23760), + 26: uint16(23761), + 27: uint16(23763), + 28: uint16(23764), + 29: uint16(23765), + 30: uint16(23766), + 31: uint16(23767), + 32: uint16(23768), + 33: uint16(23770), + 34: uint16(23771), + 35: uint16(23772), + 36: uint16(23773), + 37: uint16(23774), + 38: uint16(23775), + 39: uint16(23776), + 40: uint16(23778), + 41: uint16(23779), + 42: uint16(23783), + 43: uint16(23785), + 44: uint16(23787), + 45: uint16(23788), + 46: uint16(23790), + 47: uint16(23791), + 48: uint16(23793), + 49: uint16(23794), + 50: uint16(23795), + 51: uint16(23796), + 52: uint16(23797), + 53: uint16(23798), + 54: uint16(23799), + 55: uint16(23800), + 56: uint16(23801), + 57: uint16(23802), + 58: uint16(23804), + 59: uint16(23805), + 60: uint16(23806), + 61: uint16(23807), + 62: uint16(23808), + 63: uint16(23809), + 64: uint16(23812), + 65: uint16(23813), + 66: uint16(23816), + 67: uint16(23817), + 68: uint16(23818), + 69: uint16(23819), + 70: uint16(23820), + 71: uint16(23821), + 72: uint16(23823), + 73: uint16(23824), + 74: uint16(23825), + 75: uint16(23826), + 76: uint16(23827), + 77: uint16(23829), + 78: uint16(23831), + 79: uint16(23832), + 80: uint16(23833), + 81: uint16(23834), + 82: uint16(23836), + 83: uint16(23837), + 84: uint16(23839), + 85: uint16(23840), + 86: uint16(23841), + 87: uint16(23842), + 88: uint16(23843), + 89: uint16(23845), + 90: uint16(23848), + 91: uint16(23850), + 92: uint16(23851), + 93: uint16(23852), + 94: uint16(23855), + 95: uint16(23856), + 96: uint16(23857), + 97: uint16(23858), + 98: uint16(23859), + 99: uint16(23861), + 100: uint16(23862), + 101: uint16(23863), + 102: uint16(23864), + 103: uint16(23865), + 104: uint16(23866), + 105: uint16(23867), + 106: uint16(23868), + 107: uint16(23871), + 108: uint16(23872), + 109: uint16(23873), + 110: uint16(23874), + 111: uint16(23875), + 112: uint16(23876), + 113: uint16(23877), + 114: uint16(23878), + 115: uint16(23880), + 116: uint16(23881), + 117: uint16(23885), + 118: uint16(23886), + 119: uint16(23887), + 120: uint16(23888), + 121: uint16(23889), + 122: uint16(23890), + 123: uint16(23891), + 124: uint16(23892), + 125: uint16(23893), + 126: uint16(23894), + 127: uint16(23895), + 128: uint16(23897), + 129: uint16(23898), + 130: uint16(23900), + 131: uint16(23902), + 132: uint16(23903), + 133: uint16(23904), + 134: uint16(23905), + 135: uint16(23906), + 136: uint16(23907), + 137: uint16(23908), + 138: uint16(23909), + 139: uint16(23910), + 140: uint16(23911), + 141: uint16(23912), + 142: uint16(23914), + 143: uint16(23917), + 144: uint16(23918), + 145: uint16(23920), + 146: uint16(23921), + 147: uint16(23922), + 148: uint16(23923), + 149: uint16(23925), + 150: uint16(23926), + 151: uint16(23927), + 152: uint16(23928), + 153: uint16(23929), + 154: uint16(23930), + 155: uint16(23931), + 156: uint16(23932), + 157: uint16(23933), + 158: uint16(23934), + 159: uint16(23935), + 160: uint16(23936), + 161: uint16(23937), + 162: uint16(23939), + 163: uint16(23940), + 164: uint16(23941), + 165: uint16(23942), + 166: uint16(23943), + 167: uint16(23944), + 168: uint16(23945), + 169: uint16(23946), + 170: uint16(23947), + 171: uint16(23948), + 172: uint16(23949), + 173: uint16(23950), + 174: uint16(23951), + 175: uint16(23952), + 176: uint16(23953), + 177: uint16(23954), + 178: uint16(23955), + 179: uint16(23956), + 180: uint16(23957), + 181: uint16(23958), + 182: uint16(23959), + 183: uint16(23960), + 184: uint16(23962), + 185: uint16(23963), + 186: uint16(23964), + 187: uint16(23966), + 188: uint16(23967), + 189: uint16(23968), + }, + 13: { + 0: uint16(23969), + 1: uint16(23970), + 2: uint16(23971), + 3: uint16(23972), + 4: uint16(23973), + 5: uint16(23974), + 6: uint16(23975), + 7: uint16(23976), + 8: uint16(23977), + 9: uint16(23978), + 10: uint16(23979), + 11: uint16(23980), + 12: uint16(23981), + 13: uint16(23982), + 14: uint16(23983), + 15: uint16(23984), + 16: uint16(23985), + 17: uint16(23986), + 18: uint16(23987), + 19: uint16(23988), + 20: uint16(23989), + 21: uint16(23990), + 22: uint16(23992), + 23: uint16(23993), + 24: uint16(23994), + 25: uint16(23995), + 26: uint16(23996), + 27: uint16(23997), + 28: uint16(23998), + 29: uint16(23999), + 30: uint16(24000), + 31: uint16(24001), + 32: uint16(24002), + 33: uint16(24003), + 34: uint16(24004), + 35: uint16(24006), + 36: uint16(24007), + 37: uint16(24008), + 38: uint16(24009), + 39: uint16(24010), + 40: uint16(24011), + 41: uint16(24012), + 42: uint16(24014), + 43: uint16(24015), + 44: uint16(24016), + 45: uint16(24017), + 46: uint16(24018), + 47: uint16(24019), + 48: uint16(24020), + 49: uint16(24021), + 50: uint16(24022), + 51: uint16(24023), + 52: uint16(24024), + 53: uint16(24025), + 54: uint16(24026), + 55: uint16(24028), + 56: uint16(24031), + 57: uint16(24032), + 58: uint16(24035), + 59: uint16(24036), + 60: uint16(24042), + 61: uint16(24044), + 62: uint16(24045), + 63: uint16(24048), + 64: uint16(24053), + 65: uint16(24054), + 66: uint16(24056), + 67: uint16(24057), + 68: uint16(24058), + 69: uint16(24059), + 70: uint16(24060), + 71: uint16(24063), + 72: uint16(24064), + 73: uint16(24068), + 74: uint16(24071), + 75: uint16(24073), + 76: uint16(24074), + 77: uint16(24075), + 78: uint16(24077), + 79: uint16(24078), + 80: uint16(24082), + 81: uint16(24083), + 82: uint16(24087), + 83: uint16(24094), + 84: uint16(24095), + 85: uint16(24096), + 86: uint16(24097), + 87: uint16(24098), + 88: uint16(24099), + 89: uint16(24100), + 90: uint16(24101), + 91: uint16(24104), + 92: uint16(24105), + 93: uint16(24106), + 94: uint16(24107), + 95: uint16(24108), + 96: uint16(24111), + 97: uint16(24112), + 98: uint16(24114), + 99: uint16(24115), + 100: uint16(24116), + 101: uint16(24117), + 102: uint16(24118), + 103: uint16(24121), + 104: uint16(24122), + 105: uint16(24126), + 106: uint16(24127), + 107: uint16(24128), + 108: uint16(24129), + 109: uint16(24131), + 110: uint16(24134), + 111: uint16(24135), + 112: uint16(24136), + 113: uint16(24137), + 114: uint16(24138), + 115: uint16(24139), + 116: uint16(24141), + 117: uint16(24142), + 118: uint16(24143), + 119: uint16(24144), + 120: uint16(24145), + 121: uint16(24146), + 122: uint16(24147), + 123: uint16(24150), + 124: uint16(24151), + 125: uint16(24152), + 126: uint16(24153), + 127: uint16(24154), + 128: uint16(24156), + 129: uint16(24157), + 130: uint16(24159), + 131: uint16(24160), + 132: uint16(24163), + 133: uint16(24164), + 134: uint16(24165), + 135: uint16(24166), + 136: uint16(24167), + 137: uint16(24168), + 138: uint16(24169), + 139: uint16(24170), + 140: uint16(24171), + 141: uint16(24172), + 142: uint16(24173), + 143: uint16(24174), + 144: uint16(24175), + 145: uint16(24176), + 146: uint16(24177), + 147: uint16(24181), + 148: uint16(24183), + 149: uint16(24185), + 150: uint16(24190), + 151: uint16(24193), + 152: uint16(24194), + 153: uint16(24195), + 154: uint16(24197), + 155: uint16(24200), + 156: uint16(24201), + 157: uint16(24204), + 158: uint16(24205), + 159: uint16(24206), + 160: uint16(24210), + 161: uint16(24216), + 162: uint16(24219), + 163: uint16(24221), + 164: uint16(24225), + 165: uint16(24226), + 166: uint16(24227), + 167: uint16(24228), + 168: uint16(24232), + 169: uint16(24233), + 170: uint16(24234), + 171: uint16(24235), + 172: uint16(24236), + 173: uint16(24238), + 174: uint16(24239), + 175: uint16(24240), + 176: uint16(24241), + 177: uint16(24242), + 178: uint16(24244), + 179: uint16(24250), + 180: uint16(24251), + 181: uint16(24252), + 182: uint16(24253), + 183: uint16(24255), + 184: uint16(24256), + 185: uint16(24257), + 186: uint16(24258), + 187: uint16(24259), + 188: uint16(24260), + 189: uint16(24261), + }, + 14: { + 0: uint16(24262), + 1: uint16(24263), + 2: uint16(24264), + 3: uint16(24267), + 4: uint16(24268), + 5: uint16(24269), + 6: uint16(24270), + 7: uint16(24271), + 8: uint16(24272), + 9: uint16(24276), + 10: uint16(24277), + 11: uint16(24279), + 12: uint16(24280), + 13: uint16(24281), + 14: uint16(24282), + 15: uint16(24284), + 16: uint16(24285), + 17: uint16(24286), + 18: uint16(24287), + 19: uint16(24288), + 20: uint16(24289), + 21: uint16(24290), + 22: uint16(24291), + 23: uint16(24292), + 24: uint16(24293), + 25: uint16(24294), + 26: uint16(24295), + 27: uint16(24297), + 28: uint16(24299), + 29: uint16(24300), + 30: uint16(24301), + 31: uint16(24302), + 32: uint16(24303), + 33: uint16(24304), + 34: uint16(24305), + 35: uint16(24306), + 36: uint16(24307), + 37: uint16(24309), + 38: uint16(24312), + 39: uint16(24313), + 40: uint16(24315), + 41: uint16(24316), + 42: uint16(24317), + 43: uint16(24325), + 44: uint16(24326), + 45: uint16(24327), + 46: uint16(24329), + 47: uint16(24332), + 48: uint16(24333), + 49: uint16(24334), + 50: uint16(24336), + 51: uint16(24338), + 52: uint16(24340), + 53: uint16(24342), + 54: uint16(24345), + 55: uint16(24346), + 56: uint16(24348), + 57: uint16(24349), + 58: uint16(24350), + 59: uint16(24353), + 60: uint16(24354), + 61: uint16(24355), + 62: uint16(24356), + 63: uint16(24360), + 64: uint16(24363), + 65: uint16(24364), + 66: uint16(24366), + 67: uint16(24368), + 68: uint16(24370), + 69: uint16(24371), + 70: uint16(24372), + 71: uint16(24373), + 72: uint16(24374), + 73: uint16(24375), + 74: uint16(24376), + 75: uint16(24379), + 76: uint16(24381), + 77: uint16(24382), + 78: uint16(24383), + 79: uint16(24385), + 80: uint16(24386), + 81: uint16(24387), + 82: uint16(24388), + 83: uint16(24389), + 84: uint16(24390), + 85: uint16(24391), + 86: uint16(24392), + 87: uint16(24393), + 88: uint16(24394), + 89: uint16(24395), + 90: uint16(24396), + 91: uint16(24397), + 92: uint16(24398), + 93: uint16(24399), + 94: uint16(24401), + 95: uint16(24404), + 96: uint16(24409), + 97: uint16(24410), + 98: uint16(24411), + 99: uint16(24412), + 100: uint16(24414), + 101: uint16(24415), + 102: uint16(24416), + 103: uint16(24419), + 104: uint16(24421), + 105: uint16(24423), + 106: uint16(24424), + 107: uint16(24427), + 108: uint16(24430), + 109: uint16(24431), + 110: uint16(24434), + 111: uint16(24436), + 112: uint16(24437), + 113: uint16(24438), + 114: uint16(24440), + 115: uint16(24442), + 116: uint16(24445), + 117: uint16(24446), + 118: uint16(24447), + 119: uint16(24451), + 120: uint16(24454), + 121: uint16(24461), + 122: uint16(24462), + 123: uint16(24463), + 124: uint16(24465), + 125: uint16(24467), + 126: uint16(24468), + 127: uint16(24470), + 128: uint16(24474), + 129: uint16(24475), + 130: uint16(24477), + 131: uint16(24478), + 132: uint16(24479), + 133: uint16(24480), + 134: uint16(24482), + 135: uint16(24483), + 136: uint16(24484), + 137: uint16(24485), + 138: uint16(24486), + 139: uint16(24487), + 140: uint16(24489), + 141: uint16(24491), + 142: uint16(24492), + 143: uint16(24495), + 144: uint16(24496), + 145: uint16(24497), + 146: uint16(24498), + 147: uint16(24499), + 148: uint16(24500), + 149: uint16(24502), + 150: uint16(24504), + 151: uint16(24505), + 152: uint16(24506), + 153: uint16(24507), + 154: uint16(24510), + 155: uint16(24511), + 156: uint16(24512), + 157: uint16(24513), + 158: uint16(24514), + 159: uint16(24519), + 160: uint16(24520), + 161: uint16(24522), + 162: uint16(24523), + 163: uint16(24526), + 164: uint16(24531), + 165: uint16(24532), + 166: uint16(24533), + 167: uint16(24538), + 168: uint16(24539), + 169: uint16(24540), + 170: uint16(24542), + 171: uint16(24543), + 172: uint16(24546), + 173: uint16(24547), + 174: uint16(24549), + 175: uint16(24550), + 176: uint16(24552), + 177: uint16(24553), + 178: uint16(24556), + 179: uint16(24559), + 180: uint16(24560), + 181: uint16(24562), + 182: uint16(24563), + 183: uint16(24564), + 184: uint16(24566), + 185: uint16(24567), + 186: uint16(24569), + 187: uint16(24570), + 188: uint16(24572), + 189: uint16(24583), + }, + 15: { + 0: uint16(24584), + 1: uint16(24585), + 2: uint16(24587), + 3: uint16(24588), + 4: uint16(24592), + 5: uint16(24593), + 6: uint16(24595), + 7: uint16(24599), + 8: uint16(24600), + 9: uint16(24602), + 10: uint16(24606), + 11: uint16(24607), + 12: uint16(24610), + 13: uint16(24611), + 14: uint16(24612), + 15: uint16(24620), + 16: uint16(24621), + 17: uint16(24622), + 18: uint16(24624), + 19: uint16(24625), + 20: uint16(24626), + 21: uint16(24627), + 22: uint16(24628), + 23: uint16(24630), + 24: uint16(24631), + 25: uint16(24632), + 26: uint16(24633), + 27: uint16(24634), + 28: uint16(24637), + 29: uint16(24638), + 30: uint16(24640), + 31: uint16(24644), + 32: uint16(24645), + 33: uint16(24646), + 34: uint16(24647), + 35: uint16(24648), + 36: uint16(24649), + 37: uint16(24650), + 38: uint16(24652), + 39: uint16(24654), + 40: uint16(24655), + 41: uint16(24657), + 42: uint16(24659), + 43: uint16(24660), + 44: uint16(24662), + 45: uint16(24663), + 46: uint16(24664), + 47: uint16(24667), + 48: uint16(24668), + 49: uint16(24670), + 50: uint16(24671), + 51: uint16(24672), + 52: uint16(24673), + 53: uint16(24677), + 54: uint16(24678), + 55: uint16(24686), + 56: uint16(24689), + 57: uint16(24690), + 58: uint16(24692), + 59: uint16(24693), + 60: uint16(24695), + 61: uint16(24702), + 62: uint16(24704), + 63: uint16(24705), + 64: uint16(24706), + 65: uint16(24709), + 66: uint16(24710), + 67: uint16(24711), + 68: uint16(24712), + 69: uint16(24714), + 70: uint16(24715), + 71: uint16(24718), + 72: uint16(24719), + 73: uint16(24720), + 74: uint16(24721), + 75: uint16(24723), + 76: uint16(24725), + 77: uint16(24727), + 78: uint16(24728), + 79: uint16(24729), + 80: uint16(24732), + 81: uint16(24734), + 82: uint16(24737), + 83: uint16(24738), + 84: uint16(24740), + 85: uint16(24741), + 86: uint16(24743), + 87: uint16(24745), + 88: uint16(24746), + 89: uint16(24750), + 90: uint16(24752), + 91: uint16(24755), + 92: uint16(24757), + 93: uint16(24758), + 94: uint16(24759), + 95: uint16(24761), + 96: uint16(24762), + 97: uint16(24765), + 98: uint16(24766), + 99: uint16(24767), + 100: uint16(24768), + 101: uint16(24769), + 102: uint16(24770), + 103: uint16(24771), + 104: uint16(24772), + 105: uint16(24775), + 106: uint16(24776), + 107: uint16(24777), + 108: uint16(24780), + 109: uint16(24781), + 110: uint16(24782), + 111: uint16(24783), + 112: uint16(24784), + 113: uint16(24786), + 114: uint16(24787), + 115: uint16(24788), + 116: uint16(24790), + 117: uint16(24791), + 118: uint16(24793), + 119: uint16(24795), + 120: uint16(24798), + 121: uint16(24801), + 122: uint16(24802), + 123: uint16(24803), + 124: uint16(24804), + 125: uint16(24805), + 126: uint16(24810), + 127: uint16(24817), + 128: uint16(24818), + 129: uint16(24821), + 130: uint16(24823), + 131: uint16(24824), + 132: uint16(24827), + 133: uint16(24828), + 134: uint16(24829), + 135: uint16(24830), + 136: uint16(24831), + 137: uint16(24834), + 138: uint16(24835), + 139: uint16(24836), + 140: uint16(24837), + 141: uint16(24839), + 142: uint16(24842), + 143: uint16(24843), + 144: uint16(24844), + 145: uint16(24848), + 146: uint16(24849), + 147: uint16(24850), + 148: uint16(24851), + 149: uint16(24852), + 150: uint16(24854), + 151: uint16(24855), + 152: uint16(24856), + 153: uint16(24857), + 154: uint16(24859), + 155: uint16(24860), + 156: uint16(24861), + 157: uint16(24862), + 158: uint16(24865), + 159: uint16(24866), + 160: uint16(24869), + 161: uint16(24872), + 162: uint16(24873), + 163: uint16(24874), + 164: uint16(24876), + 165: uint16(24877), + 166: uint16(24878), + 167: uint16(24879), + 168: uint16(24880), + 169: uint16(24881), + 170: uint16(24882), + 171: uint16(24883), + 172: uint16(24884), + 173: uint16(24885), + 174: uint16(24886), + 175: uint16(24887), + 176: uint16(24888), + 177: uint16(24889), + 178: uint16(24890), + 179: uint16(24891), + 180: uint16(24892), + 181: uint16(24893), + 182: uint16(24894), + 183: uint16(24896), + 184: uint16(24897), + 185: uint16(24898), + 186: uint16(24899), + 187: uint16(24900), + 188: uint16(24901), + 189: uint16(24902), + }, + 16: { + 0: uint16(24903), + 1: uint16(24905), + 2: uint16(24907), + 3: uint16(24909), + 4: uint16(24911), + 5: uint16(24912), + 6: uint16(24914), + 7: uint16(24915), + 8: uint16(24916), + 9: uint16(24918), + 10: uint16(24919), + 11: uint16(24920), + 12: uint16(24921), + 13: uint16(24922), + 14: uint16(24923), + 15: uint16(24924), + 16: uint16(24926), + 17: uint16(24927), + 18: uint16(24928), + 19: uint16(24929), + 20: uint16(24931), + 21: uint16(24932), + 22: uint16(24933), + 23: uint16(24934), + 24: uint16(24937), + 25: uint16(24938), + 26: uint16(24939), + 27: uint16(24940), + 28: uint16(24941), + 29: uint16(24942), + 30: uint16(24943), + 31: uint16(24945), + 32: uint16(24946), + 33: uint16(24947), + 34: uint16(24948), + 35: uint16(24950), + 36: uint16(24952), + 37: uint16(24953), + 38: uint16(24954), + 39: uint16(24955), + 40: uint16(24956), + 41: uint16(24957), + 42: uint16(24958), + 43: uint16(24959), + 44: uint16(24960), + 45: uint16(24961), + 46: uint16(24962), + 47: uint16(24963), + 48: uint16(24964), + 49: uint16(24965), + 50: uint16(24966), + 51: uint16(24967), + 52: uint16(24968), + 53: uint16(24969), + 54: uint16(24970), + 55: uint16(24972), + 56: uint16(24973), + 57: uint16(24975), + 58: uint16(24976), + 59: uint16(24977), + 60: uint16(24978), + 61: uint16(24979), + 62: uint16(24981), + 63: uint16(24982), + 64: uint16(24983), + 65: uint16(24984), + 66: uint16(24985), + 67: uint16(24986), + 68: uint16(24987), + 69: uint16(24988), + 70: uint16(24990), + 71: uint16(24991), + 72: uint16(24992), + 73: uint16(24993), + 74: uint16(24994), + 75: uint16(24995), + 76: uint16(24996), + 77: uint16(24997), + 78: uint16(24998), + 79: uint16(25002), + 80: uint16(25003), + 81: uint16(25005), + 82: uint16(25006), + 83: uint16(25007), + 84: uint16(25008), + 85: uint16(25009), + 86: uint16(25010), + 87: uint16(25011), + 88: uint16(25012), + 89: uint16(25013), + 90: uint16(25014), + 91: uint16(25016), + 92: uint16(25017), + 93: uint16(25018), + 94: uint16(25019), + 95: uint16(25020), + 96: uint16(25021), + 97: uint16(25023), + 98: uint16(25024), + 99: uint16(25025), + 100: uint16(25027), + 101: uint16(25028), + 102: uint16(25029), + 103: uint16(25030), + 104: uint16(25031), + 105: uint16(25033), + 106: uint16(25036), + 107: uint16(25037), + 108: uint16(25038), + 109: uint16(25039), + 110: uint16(25040), + 111: uint16(25043), + 112: uint16(25045), + 113: uint16(25046), + 114: uint16(25047), + 115: uint16(25048), + 116: uint16(25049), + 117: uint16(25050), + 118: uint16(25051), + 119: uint16(25052), + 120: uint16(25053), + 121: uint16(25054), + 122: uint16(25055), + 123: uint16(25056), + 124: uint16(25057), + 125: uint16(25058), + 126: uint16(25059), + 127: uint16(25060), + 128: uint16(25061), + 129: uint16(25063), + 130: uint16(25064), + 131: uint16(25065), + 132: uint16(25066), + 133: uint16(25067), + 134: uint16(25068), + 135: uint16(25069), + 136: uint16(25070), + 137: uint16(25071), + 138: uint16(25072), + 139: uint16(25073), + 140: uint16(25074), + 141: uint16(25075), + 142: uint16(25076), + 143: uint16(25078), + 144: uint16(25079), + 145: uint16(25080), + 146: uint16(25081), + 147: uint16(25082), + 148: uint16(25083), + 149: uint16(25084), + 150: uint16(25085), + 151: uint16(25086), + 152: uint16(25088), + 153: uint16(25089), + 154: uint16(25090), + 155: uint16(25091), + 156: uint16(25092), + 157: uint16(25093), + 158: uint16(25095), + 159: uint16(25097), + 160: uint16(25107), + 161: uint16(25108), + 162: uint16(25113), + 163: uint16(25116), + 164: uint16(25117), + 165: uint16(25118), + 166: uint16(25120), + 167: uint16(25123), + 168: uint16(25126), + 169: uint16(25127), + 170: uint16(25128), + 171: uint16(25129), + 172: uint16(25131), + 173: uint16(25133), + 174: uint16(25135), + 175: uint16(25136), + 176: uint16(25137), + 177: uint16(25138), + 178: uint16(25141), + 179: uint16(25142), + 180: uint16(25144), + 181: uint16(25145), + 182: uint16(25146), + 183: uint16(25147), + 184: uint16(25148), + 185: uint16(25154), + 186: uint16(25156), + 187: uint16(25157), + 188: uint16(25158), + 189: uint16(25162), + }, + 17: { + 0: uint16(25167), + 1: uint16(25168), + 2: uint16(25173), + 3: uint16(25174), + 4: uint16(25175), + 5: uint16(25177), + 6: uint16(25178), + 7: uint16(25180), + 8: uint16(25181), + 9: uint16(25182), + 10: uint16(25183), + 11: uint16(25184), + 12: uint16(25185), + 13: uint16(25186), + 14: uint16(25188), + 15: uint16(25189), + 16: uint16(25192), + 17: uint16(25201), + 18: uint16(25202), + 19: uint16(25204), + 20: uint16(25205), + 21: uint16(25207), + 22: uint16(25208), + 23: uint16(25210), + 24: uint16(25211), + 25: uint16(25213), + 26: uint16(25217), + 27: uint16(25218), + 28: uint16(25219), + 29: uint16(25221), + 30: uint16(25222), + 31: uint16(25223), + 32: uint16(25224), + 33: uint16(25227), + 34: uint16(25228), + 35: uint16(25229), + 36: uint16(25230), + 37: uint16(25231), + 38: uint16(25232), + 39: uint16(25236), + 40: uint16(25241), + 41: uint16(25244), + 42: uint16(25245), + 43: uint16(25246), + 44: uint16(25251), + 45: uint16(25254), + 46: uint16(25255), + 47: uint16(25257), + 48: uint16(25258), + 49: uint16(25261), + 50: uint16(25262), + 51: uint16(25263), + 52: uint16(25264), + 53: uint16(25266), + 54: uint16(25267), + 55: uint16(25268), + 56: uint16(25270), + 57: uint16(25271), + 58: uint16(25272), + 59: uint16(25274), + 60: uint16(25278), + 61: uint16(25280), + 62: uint16(25281), + 63: uint16(25283), + 64: uint16(25291), + 65: uint16(25295), + 66: uint16(25297), + 67: uint16(25301), + 68: uint16(25309), + 69: uint16(25310), + 70: uint16(25312), + 71: uint16(25313), + 72: uint16(25316), + 73: uint16(25322), + 74: uint16(25323), + 75: uint16(25328), + 76: uint16(25330), + 77: uint16(25333), + 78: uint16(25336), + 79: uint16(25337), + 80: uint16(25338), + 81: uint16(25339), + 82: uint16(25344), + 83: uint16(25347), + 84: uint16(25348), + 85: uint16(25349), + 86: uint16(25350), + 87: uint16(25354), + 88: uint16(25355), + 89: uint16(25356), + 90: uint16(25357), + 91: uint16(25359), + 92: uint16(25360), + 93: uint16(25362), + 94: uint16(25363), + 95: uint16(25364), + 96: uint16(25365), + 97: uint16(25367), + 98: uint16(25368), + 99: uint16(25369), + 100: uint16(25372), + 101: uint16(25382), + 102: uint16(25383), + 103: uint16(25385), + 104: uint16(25388), + 105: uint16(25389), + 106: uint16(25390), + 107: uint16(25392), + 108: uint16(25393), + 109: uint16(25395), + 110: uint16(25396), + 111: uint16(25397), + 112: uint16(25398), + 113: uint16(25399), + 114: uint16(25400), + 115: uint16(25403), + 116: uint16(25404), + 117: uint16(25406), + 118: uint16(25407), + 119: uint16(25408), + 120: uint16(25409), + 121: uint16(25412), + 122: uint16(25415), + 123: uint16(25416), + 124: uint16(25418), + 125: uint16(25425), + 126: uint16(25426), + 127: uint16(25427), + 128: uint16(25428), + 129: uint16(25430), + 130: uint16(25431), + 131: uint16(25432), + 132: uint16(25433), + 133: uint16(25434), + 134: uint16(25435), + 135: uint16(25436), + 136: uint16(25437), + 137: uint16(25440), + 138: uint16(25444), + 139: uint16(25445), + 140: uint16(25446), + 141: uint16(25448), + 142: uint16(25450), + 143: uint16(25451), + 144: uint16(25452), + 145: uint16(25455), + 146: uint16(25456), + 147: uint16(25458), + 148: uint16(25459), + 149: uint16(25460), + 150: uint16(25461), + 151: uint16(25464), + 152: uint16(25465), + 153: uint16(25468), + 154: uint16(25469), + 155: uint16(25470), + 156: uint16(25471), + 157: uint16(25473), + 158: uint16(25475), + 159: uint16(25476), + 160: uint16(25477), + 161: uint16(25478), + 162: uint16(25483), + 163: uint16(25485), + 164: uint16(25489), + 165: uint16(25491), + 166: uint16(25492), + 167: uint16(25493), + 168: uint16(25495), + 169: uint16(25497), + 170: uint16(25498), + 171: uint16(25499), + 172: uint16(25500), + 173: uint16(25501), + 174: uint16(25502), + 175: uint16(25503), + 176: uint16(25505), + 177: uint16(25508), + 178: uint16(25510), + 179: uint16(25515), + 180: uint16(25519), + 181: uint16(25521), + 182: uint16(25522), + 183: uint16(25525), + 184: uint16(25526), + 185: uint16(25529), + 186: uint16(25531), + 187: uint16(25533), + 188: uint16(25535), + 189: uint16(25536), + }, + 18: { + 0: uint16(25537), + 1: uint16(25538), + 2: uint16(25539), + 3: uint16(25541), + 4: uint16(25543), + 5: uint16(25544), + 6: uint16(25546), + 7: uint16(25547), + 8: uint16(25548), + 9: uint16(25553), + 10: uint16(25555), + 11: uint16(25556), + 12: uint16(25557), + 13: uint16(25559), + 14: uint16(25560), + 15: uint16(25561), + 16: uint16(25562), + 17: uint16(25563), + 18: uint16(25564), + 19: uint16(25565), + 20: uint16(25567), + 21: uint16(25570), + 22: uint16(25572), + 23: uint16(25573), + 24: uint16(25574), + 25: uint16(25575), + 26: uint16(25576), + 27: uint16(25579), + 28: uint16(25580), + 29: uint16(25582), + 30: uint16(25583), + 31: uint16(25584), + 32: uint16(25585), + 33: uint16(25587), + 34: uint16(25589), + 35: uint16(25591), + 36: uint16(25593), + 37: uint16(25594), + 38: uint16(25595), + 39: uint16(25596), + 40: uint16(25598), + 41: uint16(25603), + 42: uint16(25604), + 43: uint16(25606), + 44: uint16(25607), + 45: uint16(25608), + 46: uint16(25609), + 47: uint16(25610), + 48: uint16(25613), + 49: uint16(25614), + 50: uint16(25617), + 51: uint16(25618), + 52: uint16(25621), + 53: uint16(25622), + 54: uint16(25623), + 55: uint16(25624), + 56: uint16(25625), + 57: uint16(25626), + 58: uint16(25629), + 59: uint16(25631), + 60: uint16(25634), + 61: uint16(25635), + 62: uint16(25636), + 63: uint16(25637), + 64: uint16(25639), + 65: uint16(25640), + 66: uint16(25641), + 67: uint16(25643), + 68: uint16(25646), + 69: uint16(25647), + 70: uint16(25648), + 71: uint16(25649), + 72: uint16(25650), + 73: uint16(25651), + 74: uint16(25653), + 75: uint16(25654), + 76: uint16(25655), + 77: uint16(25656), + 78: uint16(25657), + 79: uint16(25659), + 80: uint16(25660), + 81: uint16(25662), + 82: uint16(25664), + 83: uint16(25666), + 84: uint16(25667), + 85: uint16(25673), + 86: uint16(25675), + 87: uint16(25676), + 88: uint16(25677), + 89: uint16(25678), + 90: uint16(25679), + 91: uint16(25680), + 92: uint16(25681), + 93: uint16(25683), + 94: uint16(25685), + 95: uint16(25686), + 96: uint16(25687), + 97: uint16(25689), + 98: uint16(25690), + 99: uint16(25691), + 100: uint16(25692), + 101: uint16(25693), + 102: uint16(25695), + 103: uint16(25696), + 104: uint16(25697), + 105: uint16(25698), + 106: uint16(25699), + 107: uint16(25700), + 108: uint16(25701), + 109: uint16(25702), + 110: uint16(25704), + 111: uint16(25706), + 112: uint16(25707), + 113: uint16(25708), + 114: uint16(25710), + 115: uint16(25711), + 116: uint16(25712), + 117: uint16(25713), + 118: uint16(25714), + 119: uint16(25715), + 120: uint16(25716), + 121: uint16(25717), + 122: uint16(25718), + 123: uint16(25719), + 124: uint16(25723), + 125: uint16(25724), + 126: uint16(25725), + 127: uint16(25726), + 128: uint16(25727), + 129: uint16(25728), + 130: uint16(25729), + 131: uint16(25731), + 132: uint16(25734), + 133: uint16(25736), + 134: uint16(25737), + 135: uint16(25738), + 136: uint16(25739), + 137: uint16(25740), + 138: uint16(25741), + 139: uint16(25742), + 140: uint16(25743), + 141: uint16(25744), + 142: uint16(25747), + 143: uint16(25748), + 144: uint16(25751), + 145: uint16(25752), + 146: uint16(25754), + 147: uint16(25755), + 148: uint16(25756), + 149: uint16(25757), + 150: uint16(25759), + 151: uint16(25760), + 152: uint16(25761), + 153: uint16(25762), + 154: uint16(25763), + 155: uint16(25765), + 156: uint16(25766), + 157: uint16(25767), + 158: uint16(25768), + 159: uint16(25770), + 160: uint16(25771), + 161: uint16(25775), + 162: uint16(25777), + 163: uint16(25778), + 164: uint16(25779), + 165: uint16(25780), + 166: uint16(25782), + 167: uint16(25785), + 168: uint16(25787), + 169: uint16(25789), + 170: uint16(25790), + 171: uint16(25791), + 172: uint16(25793), + 173: uint16(25795), + 174: uint16(25796), + 175: uint16(25798), + 176: uint16(25799), + 177: uint16(25800), + 178: uint16(25801), + 179: uint16(25802), + 180: uint16(25803), + 181: uint16(25804), + 182: uint16(25807), + 183: uint16(25809), + 184: uint16(25811), + 185: uint16(25812), + 186: uint16(25813), + 187: uint16(25814), + 188: uint16(25817), + 189: uint16(25818), + }, + 19: { + 0: uint16(25819), + 1: uint16(25820), + 2: uint16(25821), + 3: uint16(25823), + 4: uint16(25824), + 5: uint16(25825), + 6: uint16(25827), + 7: uint16(25829), + 8: uint16(25831), + 9: uint16(25832), + 10: uint16(25833), + 11: uint16(25834), + 12: uint16(25835), + 13: uint16(25836), + 14: uint16(25837), + 15: uint16(25838), + 16: uint16(25839), + 17: uint16(25840), + 18: uint16(25841), + 19: uint16(25842), + 20: uint16(25843), + 21: uint16(25844), + 22: uint16(25845), + 23: uint16(25846), + 24: uint16(25847), + 25: uint16(25848), + 26: uint16(25849), + 27: uint16(25850), + 28: uint16(25851), + 29: uint16(25852), + 30: uint16(25853), + 31: uint16(25854), + 32: uint16(25855), + 33: uint16(25857), + 34: uint16(25858), + 35: uint16(25859), + 36: uint16(25860), + 37: uint16(25861), + 38: uint16(25862), + 39: uint16(25863), + 40: uint16(25864), + 41: uint16(25866), + 42: uint16(25867), + 43: uint16(25868), + 44: uint16(25869), + 45: uint16(25870), + 46: uint16(25871), + 47: uint16(25872), + 48: uint16(25873), + 49: uint16(25875), + 50: uint16(25876), + 51: uint16(25877), + 52: uint16(25878), + 53: uint16(25879), + 54: uint16(25881), + 55: uint16(25882), + 56: uint16(25883), + 57: uint16(25884), + 58: uint16(25885), + 59: uint16(25886), + 60: uint16(25887), + 61: uint16(25888), + 62: uint16(25889), + 63: uint16(25890), + 64: uint16(25891), + 65: uint16(25892), + 66: uint16(25894), + 67: uint16(25895), + 68: uint16(25896), + 69: uint16(25897), + 70: uint16(25898), + 71: uint16(25900), + 72: uint16(25901), + 73: uint16(25904), + 74: uint16(25905), + 75: uint16(25906), + 76: uint16(25907), + 77: uint16(25911), + 78: uint16(25914), + 79: uint16(25916), + 80: uint16(25917), + 81: uint16(25920), + 82: uint16(25921), + 83: uint16(25922), + 84: uint16(25923), + 85: uint16(25924), + 86: uint16(25926), + 87: uint16(25927), + 88: uint16(25930), + 89: uint16(25931), + 90: uint16(25933), + 91: uint16(25934), + 92: uint16(25936), + 93: uint16(25938), + 94: uint16(25939), + 95: uint16(25940), + 96: uint16(25943), + 97: uint16(25944), + 98: uint16(25946), + 99: uint16(25948), + 100: uint16(25951), + 101: uint16(25952), + 102: uint16(25953), + 103: uint16(25956), + 104: uint16(25957), + 105: uint16(25959), + 106: uint16(25960), + 107: uint16(25961), + 108: uint16(25962), + 109: uint16(25965), + 110: uint16(25966), + 111: uint16(25967), + 112: uint16(25969), + 113: uint16(25971), + 114: uint16(25973), + 115: uint16(25974), + 116: uint16(25976), + 117: uint16(25977), + 118: uint16(25978), + 119: uint16(25979), + 120: uint16(25980), + 121: uint16(25981), + 122: uint16(25982), + 123: uint16(25983), + 124: uint16(25984), + 125: uint16(25985), + 126: uint16(25986), + 127: uint16(25987), + 128: uint16(25988), + 129: uint16(25989), + 130: uint16(25990), + 131: uint16(25992), + 132: uint16(25993), + 133: uint16(25994), + 134: uint16(25997), + 135: uint16(25998), + 136: uint16(25999), + 137: uint16(26002), + 138: uint16(26004), + 139: uint16(26005), + 140: uint16(26006), + 141: uint16(26008), + 142: uint16(26010), + 143: uint16(26013), + 144: uint16(26014), + 145: uint16(26016), + 146: uint16(26018), + 147: uint16(26019), + 148: uint16(26022), + 149: uint16(26024), + 150: uint16(26026), + 151: uint16(26028), + 152: uint16(26030), + 153: uint16(26033), + 154: uint16(26034), + 155: uint16(26035), + 156: uint16(26036), + 157: uint16(26037), + 158: uint16(26038), + 159: uint16(26039), + 160: uint16(26040), + 161: uint16(26042), + 162: uint16(26043), + 163: uint16(26046), + 164: uint16(26047), + 165: uint16(26048), + 166: uint16(26050), + 167: uint16(26055), + 168: uint16(26056), + 169: uint16(26057), + 170: uint16(26058), + 171: uint16(26061), + 172: uint16(26064), + 173: uint16(26065), + 174: uint16(26067), + 175: uint16(26068), + 176: uint16(26069), + 177: uint16(26072), + 178: uint16(26073), + 179: uint16(26074), + 180: uint16(26075), + 181: uint16(26076), + 182: uint16(26077), + 183: uint16(26078), + 184: uint16(26079), + 185: uint16(26081), + 186: uint16(26083), + 187: uint16(26084), + 188: uint16(26090), + 189: uint16(26091), + }, + 20: { + 0: uint16(26098), + 1: uint16(26099), + 2: uint16(26100), + 3: uint16(26101), + 4: uint16(26104), + 5: uint16(26105), + 6: uint16(26107), + 7: uint16(26108), + 8: uint16(26109), + 9: uint16(26110), + 10: uint16(26111), + 11: uint16(26113), + 12: uint16(26116), + 13: uint16(26117), + 14: uint16(26119), + 15: uint16(26120), + 16: uint16(26121), + 17: uint16(26123), + 18: uint16(26125), + 19: uint16(26128), + 20: uint16(26129), + 21: uint16(26130), + 22: uint16(26134), + 23: uint16(26135), + 24: uint16(26136), + 25: uint16(26138), + 26: uint16(26139), + 27: uint16(26140), + 28: uint16(26142), + 29: uint16(26145), + 30: uint16(26146), + 31: uint16(26147), + 32: uint16(26148), + 33: uint16(26150), + 34: uint16(26153), + 35: uint16(26154), + 36: uint16(26155), + 37: uint16(26156), + 38: uint16(26158), + 39: uint16(26160), + 40: uint16(26162), + 41: uint16(26163), + 42: uint16(26167), + 43: uint16(26168), + 44: uint16(26169), + 45: uint16(26170), + 46: uint16(26171), + 47: uint16(26173), + 48: uint16(26175), + 49: uint16(26176), + 50: uint16(26178), + 51: uint16(26180), + 52: uint16(26181), + 53: uint16(26182), + 54: uint16(26183), + 55: uint16(26184), + 56: uint16(26185), + 57: uint16(26186), + 58: uint16(26189), + 59: uint16(26190), + 60: uint16(26192), + 61: uint16(26193), + 62: uint16(26200), + 63: uint16(26201), + 64: uint16(26203), + 65: uint16(26204), + 66: uint16(26205), + 67: uint16(26206), + 68: uint16(26208), + 69: uint16(26210), + 70: uint16(26211), + 71: uint16(26213), + 72: uint16(26215), + 73: uint16(26217), + 74: uint16(26218), + 75: uint16(26219), + 76: uint16(26220), + 77: uint16(26221), + 78: uint16(26225), + 79: uint16(26226), + 80: uint16(26227), + 81: uint16(26229), + 82: uint16(26232), + 83: uint16(26233), + 84: uint16(26235), + 85: uint16(26236), + 86: uint16(26237), + 87: uint16(26239), + 88: uint16(26240), + 89: uint16(26241), + 90: uint16(26243), + 91: uint16(26245), + 92: uint16(26246), + 93: uint16(26248), + 94: uint16(26249), + 95: uint16(26250), + 96: uint16(26251), + 97: uint16(26253), + 98: uint16(26254), + 99: uint16(26255), + 100: uint16(26256), + 101: uint16(26258), + 102: uint16(26259), + 103: uint16(26260), + 104: uint16(26261), + 105: uint16(26264), + 106: uint16(26265), + 107: uint16(26266), + 108: uint16(26267), + 109: uint16(26268), + 110: uint16(26270), + 111: uint16(26271), + 112: uint16(26272), + 113: uint16(26273), + 114: uint16(26274), + 115: uint16(26275), + 116: uint16(26276), + 117: uint16(26277), + 118: uint16(26278), + 119: uint16(26281), + 120: uint16(26282), + 121: uint16(26283), + 122: uint16(26284), + 123: uint16(26285), + 124: uint16(26287), + 125: uint16(26288), + 126: uint16(26289), + 127: uint16(26290), + 128: uint16(26291), + 129: uint16(26293), + 130: uint16(26294), + 131: uint16(26295), + 132: uint16(26296), + 133: uint16(26298), + 134: uint16(26299), + 135: uint16(26300), + 136: uint16(26301), + 137: uint16(26303), + 138: uint16(26304), + 139: uint16(26305), + 140: uint16(26306), + 141: uint16(26307), + 142: uint16(26308), + 143: uint16(26309), + 144: uint16(26310), + 145: uint16(26311), + 146: uint16(26312), + 147: uint16(26313), + 148: uint16(26314), + 149: uint16(26315), + 150: uint16(26316), + 151: uint16(26317), + 152: uint16(26318), + 153: uint16(26319), + 154: uint16(26320), + 155: uint16(26321), + 156: uint16(26322), + 157: uint16(26323), + 158: uint16(26324), + 159: uint16(26325), + 160: uint16(26326), + 161: uint16(26327), + 162: uint16(26328), + 163: uint16(26330), + 164: uint16(26334), + 165: uint16(26335), + 166: uint16(26336), + 167: uint16(26337), + 168: uint16(26338), + 169: uint16(26339), + 170: uint16(26340), + 171: uint16(26341), + 172: uint16(26343), + 173: uint16(26344), + 174: uint16(26346), + 175: uint16(26347), + 176: uint16(26348), + 177: uint16(26349), + 178: uint16(26350), + 179: uint16(26351), + 180: uint16(26353), + 181: uint16(26357), + 182: uint16(26358), + 183: uint16(26360), + 184: uint16(26362), + 185: uint16(26363), + 186: uint16(26365), + 187: uint16(26369), + 188: uint16(26370), + 189: uint16(26371), + }, + 21: { + 0: uint16(26372), + 1: uint16(26373), + 2: uint16(26374), + 3: uint16(26375), + 4: uint16(26380), + 5: uint16(26382), + 6: uint16(26383), + 7: uint16(26385), + 8: uint16(26386), + 9: uint16(26387), + 10: uint16(26390), + 11: uint16(26392), + 12: uint16(26393), + 13: uint16(26394), + 14: uint16(26396), + 15: uint16(26398), + 16: uint16(26400), + 17: uint16(26401), + 18: uint16(26402), + 19: uint16(26403), + 20: uint16(26404), + 21: uint16(26405), + 22: uint16(26407), + 23: uint16(26409), + 24: uint16(26414), + 25: uint16(26416), + 26: uint16(26418), + 27: uint16(26419), + 28: uint16(26422), + 29: uint16(26423), + 30: uint16(26424), + 31: uint16(26425), + 32: uint16(26427), + 33: uint16(26428), + 34: uint16(26430), + 35: uint16(26431), + 36: uint16(26433), + 37: uint16(26436), + 38: uint16(26437), + 39: uint16(26439), + 40: uint16(26442), + 41: uint16(26443), + 42: uint16(26445), + 43: uint16(26450), + 44: uint16(26452), + 45: uint16(26453), + 46: uint16(26455), + 47: uint16(26456), + 48: uint16(26457), + 49: uint16(26458), + 50: uint16(26459), + 51: uint16(26461), + 52: uint16(26466), + 53: uint16(26467), + 54: uint16(26468), + 55: uint16(26470), + 56: uint16(26471), + 57: uint16(26475), + 58: uint16(26476), + 59: uint16(26478), + 60: uint16(26481), + 61: uint16(26484), + 62: uint16(26486), + 63: uint16(26488), + 64: uint16(26489), + 65: uint16(26490), + 66: uint16(26491), + 67: uint16(26493), + 68: uint16(26496), + 69: uint16(26498), + 70: uint16(26499), + 71: uint16(26501), + 72: uint16(26502), + 73: uint16(26504), + 74: uint16(26506), + 75: uint16(26508), + 76: uint16(26509), + 77: uint16(26510), + 78: uint16(26511), + 79: uint16(26513), + 80: uint16(26514), + 81: uint16(26515), + 82: uint16(26516), + 83: uint16(26518), + 84: uint16(26521), + 85: uint16(26523), + 86: uint16(26527), + 87: uint16(26528), + 88: uint16(26529), + 89: uint16(26532), + 90: uint16(26534), + 91: uint16(26537), + 92: uint16(26540), + 93: uint16(26542), + 94: uint16(26545), + 95: uint16(26546), + 96: uint16(26548), + 97: uint16(26553), + 98: uint16(26554), + 99: uint16(26555), + 100: uint16(26556), + 101: uint16(26557), + 102: uint16(26558), + 103: uint16(26559), + 104: uint16(26560), + 105: uint16(26562), + 106: uint16(26565), + 107: uint16(26566), + 108: uint16(26567), + 109: uint16(26568), + 110: uint16(26569), + 111: uint16(26570), + 112: uint16(26571), + 113: uint16(26572), + 114: uint16(26573), + 115: uint16(26574), + 116: uint16(26581), + 117: uint16(26582), + 118: uint16(26583), + 119: uint16(26587), + 120: uint16(26591), + 121: uint16(26593), + 122: uint16(26595), + 123: uint16(26596), + 124: uint16(26598), + 125: uint16(26599), + 126: uint16(26600), + 127: uint16(26602), + 128: uint16(26603), + 129: uint16(26605), + 130: uint16(26606), + 131: uint16(26610), + 132: uint16(26613), + 133: uint16(26614), + 134: uint16(26615), + 135: uint16(26616), + 136: uint16(26617), + 137: uint16(26618), + 138: uint16(26619), + 139: uint16(26620), + 140: uint16(26622), + 141: uint16(26625), + 142: uint16(26626), + 143: uint16(26627), + 144: uint16(26628), + 145: uint16(26630), + 146: uint16(26637), + 147: uint16(26640), + 148: uint16(26642), + 149: uint16(26644), + 150: uint16(26645), + 151: uint16(26648), + 152: uint16(26649), + 153: uint16(26650), + 154: uint16(26651), + 155: uint16(26652), + 156: uint16(26654), + 157: uint16(26655), + 158: uint16(26656), + 159: uint16(26658), + 160: uint16(26659), + 161: uint16(26660), + 162: uint16(26661), + 163: uint16(26662), + 164: uint16(26663), + 165: uint16(26664), + 166: uint16(26667), + 167: uint16(26668), + 168: uint16(26669), + 169: uint16(26670), + 170: uint16(26671), + 171: uint16(26672), + 172: uint16(26673), + 173: uint16(26676), + 174: uint16(26677), + 175: uint16(26678), + 176: uint16(26682), + 177: uint16(26683), + 178: uint16(26687), + 179: uint16(26695), + 180: uint16(26699), + 181: uint16(26701), + 182: uint16(26703), + 183: uint16(26706), + 184: uint16(26710), + 185: uint16(26711), + 186: uint16(26712), + 187: uint16(26713), + 188: uint16(26714), + 189: uint16(26715), + }, + 22: { + 0: uint16(26716), + 1: uint16(26717), + 2: uint16(26718), + 3: uint16(26719), + 4: uint16(26730), + 5: uint16(26732), + 6: uint16(26733), + 7: uint16(26734), + 8: uint16(26735), + 9: uint16(26736), + 10: uint16(26737), + 11: uint16(26738), + 12: uint16(26739), + 13: uint16(26741), + 14: uint16(26744), + 15: uint16(26745), + 16: uint16(26746), + 17: uint16(26747), + 18: uint16(26748), + 19: uint16(26749), + 20: uint16(26750), + 21: uint16(26751), + 22: uint16(26752), + 23: uint16(26754), + 24: uint16(26756), + 25: uint16(26759), + 26: uint16(26760), + 27: uint16(26761), + 28: uint16(26762), + 29: uint16(26763), + 30: uint16(26764), + 31: uint16(26765), + 32: uint16(26766), + 33: uint16(26768), + 34: uint16(26769), + 35: uint16(26770), + 36: uint16(26772), + 37: uint16(26773), + 38: uint16(26774), + 39: uint16(26776), + 40: uint16(26777), + 41: uint16(26778), + 42: uint16(26779), + 43: uint16(26780), + 44: uint16(26781), + 45: uint16(26782), + 46: uint16(26783), + 47: uint16(26784), + 48: uint16(26785), + 49: uint16(26787), + 50: uint16(26788), + 51: uint16(26789), + 52: uint16(26793), + 53: uint16(26794), + 54: uint16(26795), + 55: uint16(26796), + 56: uint16(26798), + 57: uint16(26801), + 58: uint16(26802), + 59: uint16(26804), + 60: uint16(26806), + 61: uint16(26807), + 62: uint16(26808), + 63: uint16(26809), + 64: uint16(26810), + 65: uint16(26811), + 66: uint16(26812), + 67: uint16(26813), + 68: uint16(26814), + 69: uint16(26815), + 70: uint16(26817), + 71: uint16(26819), + 72: uint16(26820), + 73: uint16(26821), + 74: uint16(26822), + 75: uint16(26823), + 76: uint16(26824), + 77: uint16(26826), + 78: uint16(26828), + 79: uint16(26830), + 80: uint16(26831), + 81: uint16(26832), + 82: uint16(26833), + 83: uint16(26835), + 84: uint16(26836), + 85: uint16(26838), + 86: uint16(26839), + 87: uint16(26841), + 88: uint16(26843), + 89: uint16(26844), + 90: uint16(26845), + 91: uint16(26846), + 92: uint16(26847), + 93: uint16(26849), + 94: uint16(26850), + 95: uint16(26852), + 96: uint16(26853), + 97: uint16(26854), + 98: uint16(26855), + 99: uint16(26856), + 100: uint16(26857), + 101: uint16(26858), + 102: uint16(26859), + 103: uint16(26860), + 104: uint16(26861), + 105: uint16(26863), + 106: uint16(26866), + 107: uint16(26867), + 108: uint16(26868), + 109: uint16(26870), + 110: uint16(26871), + 111: uint16(26872), + 112: uint16(26875), + 113: uint16(26877), + 114: uint16(26878), + 115: uint16(26879), + 116: uint16(26880), + 117: uint16(26882), + 118: uint16(26883), + 119: uint16(26884), + 120: uint16(26886), + 121: uint16(26887), + 122: uint16(26888), + 123: uint16(26889), + 124: uint16(26890), + 125: uint16(26892), + 126: uint16(26895), + 127: uint16(26897), + 128: uint16(26899), + 129: uint16(26900), + 130: uint16(26901), + 131: uint16(26902), + 132: uint16(26903), + 133: uint16(26904), + 134: uint16(26905), + 135: uint16(26906), + 136: uint16(26907), + 137: uint16(26908), + 138: uint16(26909), + 139: uint16(26910), + 140: uint16(26913), + 141: uint16(26914), + 142: uint16(26915), + 143: uint16(26917), + 144: uint16(26918), + 145: uint16(26919), + 146: uint16(26920), + 147: uint16(26921), + 148: uint16(26922), + 149: uint16(26923), + 150: uint16(26924), + 151: uint16(26926), + 152: uint16(26927), + 153: uint16(26929), + 154: uint16(26930), + 155: uint16(26931), + 156: uint16(26933), + 157: uint16(26934), + 158: uint16(26935), + 159: uint16(26936), + 160: uint16(26938), + 161: uint16(26939), + 162: uint16(26940), + 163: uint16(26942), + 164: uint16(26944), + 165: uint16(26945), + 166: uint16(26947), + 167: uint16(26948), + 168: uint16(26949), + 169: uint16(26950), + 170: uint16(26951), + 171: uint16(26952), + 172: uint16(26953), + 173: uint16(26954), + 174: uint16(26955), + 175: uint16(26956), + 176: uint16(26957), + 177: uint16(26958), + 178: uint16(26959), + 179: uint16(26960), + 180: uint16(26961), + 181: uint16(26962), + 182: uint16(26963), + 183: uint16(26965), + 184: uint16(26966), + 185: uint16(26968), + 186: uint16(26969), + 187: uint16(26971), + 188: uint16(26972), + 189: uint16(26975), + }, + 23: { + 0: uint16(26977), + 1: uint16(26978), + 2: uint16(26980), + 3: uint16(26981), + 4: uint16(26983), + 5: uint16(26984), + 6: uint16(26985), + 7: uint16(26986), + 8: uint16(26988), + 9: uint16(26989), + 10: uint16(26991), + 11: uint16(26992), + 12: uint16(26994), + 13: uint16(26995), + 14: uint16(26996), + 15: uint16(26997), + 16: uint16(26998), + 17: uint16(27002), + 18: uint16(27003), + 19: uint16(27005), + 20: uint16(27006), + 21: uint16(27007), + 22: uint16(27009), + 23: uint16(27011), + 24: uint16(27013), + 25: uint16(27018), + 26: uint16(27019), + 27: uint16(27020), + 28: uint16(27022), + 29: uint16(27023), + 30: uint16(27024), + 31: uint16(27025), + 32: uint16(27026), + 33: uint16(27027), + 34: uint16(27030), + 35: uint16(27031), + 36: uint16(27033), + 37: uint16(27034), + 38: uint16(27037), + 39: uint16(27038), + 40: uint16(27039), + 41: uint16(27040), + 42: uint16(27041), + 43: uint16(27042), + 44: uint16(27043), + 45: uint16(27044), + 46: uint16(27045), + 47: uint16(27046), + 48: uint16(27049), + 49: uint16(27050), + 50: uint16(27052), + 51: uint16(27054), + 52: uint16(27055), + 53: uint16(27056), + 54: uint16(27058), + 55: uint16(27059), + 56: uint16(27061), + 57: uint16(27062), + 58: uint16(27064), + 59: uint16(27065), + 60: uint16(27066), + 61: uint16(27068), + 62: uint16(27069), + 63: uint16(27070), + 64: uint16(27071), + 65: uint16(27072), + 66: uint16(27074), + 67: uint16(27075), + 68: uint16(27076), + 69: uint16(27077), + 70: uint16(27078), + 71: uint16(27079), + 72: uint16(27080), + 73: uint16(27081), + 74: uint16(27083), + 75: uint16(27085), + 76: uint16(27087), + 77: uint16(27089), + 78: uint16(27090), + 79: uint16(27091), + 80: uint16(27093), + 81: uint16(27094), + 82: uint16(27095), + 83: uint16(27096), + 84: uint16(27097), + 85: uint16(27098), + 86: uint16(27100), + 87: uint16(27101), + 88: uint16(27102), + 89: uint16(27105), + 90: uint16(27106), + 91: uint16(27107), + 92: uint16(27108), + 93: uint16(27109), + 94: uint16(27110), + 95: uint16(27111), + 96: uint16(27112), + 97: uint16(27113), + 98: uint16(27114), + 99: uint16(27115), + 100: uint16(27116), + 101: uint16(27118), + 102: uint16(27119), + 103: uint16(27120), + 104: uint16(27121), + 105: uint16(27123), + 106: uint16(27124), + 107: uint16(27125), + 108: uint16(27126), + 109: uint16(27127), + 110: uint16(27128), + 111: uint16(27129), + 112: uint16(27130), + 113: uint16(27131), + 114: uint16(27132), + 115: uint16(27134), + 116: uint16(27136), + 117: uint16(27137), + 118: uint16(27138), + 119: uint16(27139), + 120: uint16(27140), + 121: uint16(27141), + 122: uint16(27142), + 123: uint16(27143), + 124: uint16(27144), + 125: uint16(27145), + 126: uint16(27147), + 127: uint16(27148), + 128: uint16(27149), + 129: uint16(27150), + 130: uint16(27151), + 131: uint16(27152), + 132: uint16(27153), + 133: uint16(27154), + 134: uint16(27155), + 135: uint16(27156), + 136: uint16(27157), + 137: uint16(27158), + 138: uint16(27161), + 139: uint16(27162), + 140: uint16(27163), + 141: uint16(27164), + 142: uint16(27165), + 143: uint16(27166), + 144: uint16(27168), + 145: uint16(27170), + 146: uint16(27171), + 147: uint16(27172), + 148: uint16(27173), + 149: uint16(27174), + 150: uint16(27175), + 151: uint16(27177), + 152: uint16(27179), + 153: uint16(27180), + 154: uint16(27181), + 155: uint16(27182), + 156: uint16(27184), + 157: uint16(27186), + 158: uint16(27187), + 159: uint16(27188), + 160: uint16(27190), + 161: uint16(27191), + 162: uint16(27192), + 163: uint16(27193), + 164: uint16(27194), + 165: uint16(27195), + 166: uint16(27196), + 167: uint16(27199), + 168: uint16(27200), + 169: uint16(27201), + 170: uint16(27202), + 171: uint16(27203), + 172: uint16(27205), + 173: uint16(27206), + 174: uint16(27208), + 175: uint16(27209), + 176: uint16(27210), + 177: uint16(27211), + 178: uint16(27212), + 179: uint16(27213), + 180: uint16(27214), + 181: uint16(27215), + 182: uint16(27217), + 183: uint16(27218), + 184: uint16(27219), + 185: uint16(27220), + 186: uint16(27221), + 187: uint16(27222), + 188: uint16(27223), + 189: uint16(27226), + }, + 24: { + 0: uint16(27228), + 1: uint16(27229), + 2: uint16(27230), + 3: uint16(27231), + 4: uint16(27232), + 5: uint16(27234), + 6: uint16(27235), + 7: uint16(27236), + 8: uint16(27238), + 9: uint16(27239), + 10: uint16(27240), + 11: uint16(27241), + 12: uint16(27242), + 13: uint16(27243), + 14: uint16(27244), + 15: uint16(27245), + 16: uint16(27246), + 17: uint16(27247), + 18: uint16(27248), + 19: uint16(27250), + 20: uint16(27251), + 21: uint16(27252), + 22: uint16(27253), + 23: uint16(27254), + 24: uint16(27255), + 25: uint16(27256), + 26: uint16(27258), + 27: uint16(27259), + 28: uint16(27261), + 29: uint16(27262), + 30: uint16(27263), + 31: uint16(27265), + 32: uint16(27266), + 33: uint16(27267), + 34: uint16(27269), + 35: uint16(27270), + 36: uint16(27271), + 37: uint16(27272), + 38: uint16(27273), + 39: uint16(27274), + 40: uint16(27275), + 41: uint16(27276), + 42: uint16(27277), + 43: uint16(27279), + 44: uint16(27282), + 45: uint16(27283), + 46: uint16(27284), + 47: uint16(27285), + 48: uint16(27286), + 49: uint16(27288), + 50: uint16(27289), + 51: uint16(27290), + 52: uint16(27291), + 53: uint16(27292), + 54: uint16(27293), + 55: uint16(27294), + 56: uint16(27295), + 57: uint16(27297), + 58: uint16(27298), + 59: uint16(27299), + 60: uint16(27300), + 61: uint16(27301), + 62: uint16(27302), + 63: uint16(27303), + 64: uint16(27304), + 65: uint16(27306), + 66: uint16(27309), + 67: uint16(27310), + 68: uint16(27311), + 69: uint16(27312), + 70: uint16(27313), + 71: uint16(27314), + 72: uint16(27315), + 73: uint16(27316), + 74: uint16(27317), + 75: uint16(27318), + 76: uint16(27319), + 77: uint16(27320), + 78: uint16(27321), + 79: uint16(27322), + 80: uint16(27323), + 81: uint16(27324), + 82: uint16(27325), + 83: uint16(27326), + 84: uint16(27327), + 85: uint16(27328), + 86: uint16(27329), + 87: uint16(27330), + 88: uint16(27331), + 89: uint16(27332), + 90: uint16(27333), + 91: uint16(27334), + 92: uint16(27335), + 93: uint16(27336), + 94: uint16(27337), + 95: uint16(27338), + 96: uint16(27339), + 97: uint16(27340), + 98: uint16(27341), + 99: uint16(27342), + 100: uint16(27343), + 101: uint16(27344), + 102: uint16(27345), + 103: uint16(27346), + 104: uint16(27347), + 105: uint16(27348), + 106: uint16(27349), + 107: uint16(27350), + 108: uint16(27351), + 109: uint16(27352), + 110: uint16(27353), + 111: uint16(27354), + 112: uint16(27355), + 113: uint16(27356), + 114: uint16(27357), + 115: uint16(27358), + 116: uint16(27359), + 117: uint16(27360), + 118: uint16(27361), + 119: uint16(27362), + 120: uint16(27363), + 121: uint16(27364), + 122: uint16(27365), + 123: uint16(27366), + 124: uint16(27367), + 125: uint16(27368), + 126: uint16(27369), + 127: uint16(27370), + 128: uint16(27371), + 129: uint16(27372), + 130: uint16(27373), + 131: uint16(27374), + 132: uint16(27375), + 133: uint16(27376), + 134: uint16(27377), + 135: uint16(27378), + 136: uint16(27379), + 137: uint16(27380), + 138: uint16(27381), + 139: uint16(27382), + 140: uint16(27383), + 141: uint16(27384), + 142: uint16(27385), + 143: uint16(27386), + 144: uint16(27387), + 145: uint16(27388), + 146: uint16(27389), + 147: uint16(27390), + 148: uint16(27391), + 149: uint16(27392), + 150: uint16(27393), + 151: uint16(27394), + 152: uint16(27395), + 153: uint16(27396), + 154: uint16(27397), + 155: uint16(27398), + 156: uint16(27399), + 157: uint16(27400), + 158: uint16(27401), + 159: uint16(27402), + 160: uint16(27403), + 161: uint16(27404), + 162: uint16(27405), + 163: uint16(27406), + 164: uint16(27407), + 165: uint16(27408), + 166: uint16(27409), + 167: uint16(27410), + 168: uint16(27411), + 169: uint16(27412), + 170: uint16(27413), + 171: uint16(27414), + 172: uint16(27415), + 173: uint16(27416), + 174: uint16(27417), + 175: uint16(27418), + 176: uint16(27419), + 177: uint16(27420), + 178: uint16(27421), + 179: uint16(27422), + 180: uint16(27423), + 181: uint16(27429), + 182: uint16(27430), + 183: uint16(27432), + 184: uint16(27433), + 185: uint16(27434), + 186: uint16(27435), + 187: uint16(27436), + 188: uint16(27437), + 189: uint16(27438), + }, + 25: { + 0: uint16(27439), + 1: uint16(27440), + 2: uint16(27441), + 3: uint16(27443), + 4: uint16(27444), + 5: uint16(27445), + 6: uint16(27446), + 7: uint16(27448), + 8: uint16(27451), + 9: uint16(27452), + 10: uint16(27453), + 11: uint16(27455), + 12: uint16(27456), + 13: uint16(27457), + 14: uint16(27458), + 15: uint16(27460), + 16: uint16(27461), + 17: uint16(27464), + 18: uint16(27466), + 19: uint16(27467), + 20: uint16(27469), + 21: uint16(27470), + 22: uint16(27471), + 23: uint16(27472), + 24: uint16(27473), + 25: uint16(27474), + 26: uint16(27475), + 27: uint16(27476), + 28: uint16(27477), + 29: uint16(27478), + 30: uint16(27479), + 31: uint16(27480), + 32: uint16(27482), + 33: uint16(27483), + 34: uint16(27484), + 35: uint16(27485), + 36: uint16(27486), + 37: uint16(27487), + 38: uint16(27488), + 39: uint16(27489), + 40: uint16(27496), + 41: uint16(27497), + 42: uint16(27499), + 43: uint16(27500), + 44: uint16(27501), + 45: uint16(27502), + 46: uint16(27503), + 47: uint16(27504), + 48: uint16(27505), + 49: uint16(27506), + 50: uint16(27507), + 51: uint16(27508), + 52: uint16(27509), + 53: uint16(27510), + 54: uint16(27511), + 55: uint16(27512), + 56: uint16(27514), + 57: uint16(27517), + 58: uint16(27518), + 59: uint16(27519), + 60: uint16(27520), + 61: uint16(27525), + 62: uint16(27528), + 63: uint16(27532), + 64: uint16(27534), + 65: uint16(27535), + 66: uint16(27536), + 67: uint16(27537), + 68: uint16(27540), + 69: uint16(27541), + 70: uint16(27543), + 71: uint16(27544), + 72: uint16(27545), + 73: uint16(27548), + 74: uint16(27549), + 75: uint16(27550), + 76: uint16(27551), + 77: uint16(27552), + 78: uint16(27554), + 79: uint16(27555), + 80: uint16(27556), + 81: uint16(27557), + 82: uint16(27558), + 83: uint16(27559), + 84: uint16(27560), + 85: uint16(27561), + 86: uint16(27563), + 87: uint16(27564), + 88: uint16(27565), + 89: uint16(27566), + 90: uint16(27567), + 91: uint16(27568), + 92: uint16(27569), + 93: uint16(27570), + 94: uint16(27574), + 95: uint16(27576), + 96: uint16(27577), + 97: uint16(27578), + 98: uint16(27579), + 99: uint16(27580), + 100: uint16(27581), + 101: uint16(27582), + 102: uint16(27584), + 103: uint16(27587), + 104: uint16(27588), + 105: uint16(27590), + 106: uint16(27591), + 107: uint16(27592), + 108: uint16(27593), + 109: uint16(27594), + 110: uint16(27596), + 111: uint16(27598), + 112: uint16(27600), + 113: uint16(27601), + 114: uint16(27608), + 115: uint16(27610), + 116: uint16(27612), + 117: uint16(27613), + 118: uint16(27614), + 119: uint16(27615), + 120: uint16(27616), + 121: uint16(27618), + 122: uint16(27619), + 123: uint16(27620), + 124: uint16(27621), + 125: uint16(27622), + 126: uint16(27623), + 127: uint16(27624), + 128: uint16(27625), + 129: uint16(27628), + 130: uint16(27629), + 131: uint16(27630), + 132: uint16(27632), + 133: uint16(27633), + 134: uint16(27634), + 135: uint16(27636), + 136: uint16(27638), + 137: uint16(27639), + 138: uint16(27640), + 139: uint16(27642), + 140: uint16(27643), + 141: uint16(27644), + 142: uint16(27646), + 143: uint16(27647), + 144: uint16(27648), + 145: uint16(27649), + 146: uint16(27650), + 147: uint16(27651), + 148: uint16(27652), + 149: uint16(27656), + 150: uint16(27657), + 151: uint16(27658), + 152: uint16(27659), + 153: uint16(27660), + 154: uint16(27662), + 155: uint16(27666), + 156: uint16(27671), + 157: uint16(27676), + 158: uint16(27677), + 159: uint16(27678), + 160: uint16(27680), + 161: uint16(27683), + 162: uint16(27685), + 163: uint16(27691), + 164: uint16(27692), + 165: uint16(27693), + 166: uint16(27697), + 167: uint16(27699), + 168: uint16(27702), + 169: uint16(27703), + 170: uint16(27705), + 171: uint16(27706), + 172: uint16(27707), + 173: uint16(27708), + 174: uint16(27710), + 175: uint16(27711), + 176: uint16(27715), + 177: uint16(27716), + 178: uint16(27717), + 179: uint16(27720), + 180: uint16(27723), + 181: uint16(27724), + 182: uint16(27725), + 183: uint16(27726), + 184: uint16(27727), + 185: uint16(27729), + 186: uint16(27730), + 187: uint16(27731), + 188: uint16(27734), + 189: uint16(27736), + }, + 26: { + 0: uint16(27737), + 1: uint16(27738), + 2: uint16(27746), + 3: uint16(27747), + 4: uint16(27749), + 5: uint16(27750), + 6: uint16(27751), + 7: uint16(27755), + 8: uint16(27756), + 9: uint16(27757), + 10: uint16(27758), + 11: uint16(27759), + 12: uint16(27761), + 13: uint16(27763), + 14: uint16(27765), + 15: uint16(27767), + 16: uint16(27768), + 17: uint16(27770), + 18: uint16(27771), + 19: uint16(27772), + 20: uint16(27775), + 21: uint16(27776), + 22: uint16(27780), + 23: uint16(27783), + 24: uint16(27786), + 25: uint16(27787), + 26: uint16(27789), + 27: uint16(27790), + 28: uint16(27793), + 29: uint16(27794), + 30: uint16(27797), + 31: uint16(27798), + 32: uint16(27799), + 33: uint16(27800), + 34: uint16(27802), + 35: uint16(27804), + 36: uint16(27805), + 37: uint16(27806), + 38: uint16(27808), + 39: uint16(27810), + 40: uint16(27816), + 41: uint16(27820), + 42: uint16(27823), + 43: uint16(27824), + 44: uint16(27828), + 45: uint16(27829), + 46: uint16(27830), + 47: uint16(27831), + 48: uint16(27834), + 49: uint16(27840), + 50: uint16(27841), + 51: uint16(27842), + 52: uint16(27843), + 53: uint16(27846), + 54: uint16(27847), + 55: uint16(27848), + 56: uint16(27851), + 57: uint16(27853), + 58: uint16(27854), + 59: uint16(27855), + 60: uint16(27857), + 61: uint16(27858), + 62: uint16(27864), + 63: uint16(27865), + 64: uint16(27866), + 65: uint16(27868), + 66: uint16(27869), + 67: uint16(27871), + 68: uint16(27876), + 69: uint16(27878), + 70: uint16(27879), + 71: uint16(27881), + 72: uint16(27884), + 73: uint16(27885), + 74: uint16(27890), + 75: uint16(27892), + 76: uint16(27897), + 77: uint16(27903), + 78: uint16(27904), + 79: uint16(27906), + 80: uint16(27907), + 81: uint16(27909), + 82: uint16(27910), + 83: uint16(27912), + 84: uint16(27913), + 85: uint16(27914), + 86: uint16(27917), + 87: uint16(27919), + 88: uint16(27920), + 89: uint16(27921), + 90: uint16(27923), + 91: uint16(27924), + 92: uint16(27925), + 93: uint16(27926), + 94: uint16(27928), + 95: uint16(27932), + 96: uint16(27933), + 97: uint16(27935), + 98: uint16(27936), + 99: uint16(27937), + 100: uint16(27938), + 101: uint16(27939), + 102: uint16(27940), + 103: uint16(27942), + 104: uint16(27944), + 105: uint16(27945), + 106: uint16(27948), + 107: uint16(27949), + 108: uint16(27951), + 109: uint16(27952), + 110: uint16(27956), + 111: uint16(27958), + 112: uint16(27959), + 113: uint16(27960), + 114: uint16(27962), + 115: uint16(27967), + 116: uint16(27968), + 117: uint16(27970), + 118: uint16(27972), + 119: uint16(27977), + 120: uint16(27980), + 121: uint16(27984), + 122: uint16(27989), + 123: uint16(27990), + 124: uint16(27991), + 125: uint16(27992), + 126: uint16(27995), + 127: uint16(27997), + 128: uint16(27999), + 129: uint16(28001), + 130: uint16(28002), + 131: uint16(28004), + 132: uint16(28005), + 133: uint16(28007), + 134: uint16(28008), + 135: uint16(28011), + 136: uint16(28012), + 137: uint16(28013), + 138: uint16(28016), + 139: uint16(28017), + 140: uint16(28018), + 141: uint16(28019), + 142: uint16(28021), + 143: uint16(28022), + 144: uint16(28025), + 145: uint16(28026), + 146: uint16(28027), + 147: uint16(28029), + 148: uint16(28030), + 149: uint16(28031), + 150: uint16(28032), + 151: uint16(28033), + 152: uint16(28035), + 153: uint16(28036), + 154: uint16(28038), + 155: uint16(28039), + 156: uint16(28042), + 157: uint16(28043), + 158: uint16(28045), + 159: uint16(28047), + 160: uint16(28048), + 161: uint16(28050), + 162: uint16(28054), + 163: uint16(28055), + 164: uint16(28056), + 165: uint16(28057), + 166: uint16(28058), + 167: uint16(28060), + 168: uint16(28066), + 169: uint16(28069), + 170: uint16(28076), + 171: uint16(28077), + 172: uint16(28080), + 173: uint16(28081), + 174: uint16(28083), + 175: uint16(28084), + 176: uint16(28086), + 177: uint16(28087), + 178: uint16(28089), + 179: uint16(28090), + 180: uint16(28091), + 181: uint16(28092), + 182: uint16(28093), + 183: uint16(28094), + 184: uint16(28097), + 185: uint16(28098), + 186: uint16(28099), + 187: uint16(28104), + 188: uint16(28105), + 189: uint16(28106), + }, + 27: { + 0: uint16(28109), + 1: uint16(28110), + 2: uint16(28111), + 3: uint16(28112), + 4: uint16(28114), + 5: uint16(28115), + 6: uint16(28116), + 7: uint16(28117), + 8: uint16(28119), + 9: uint16(28122), + 10: uint16(28123), + 11: uint16(28124), + 12: uint16(28127), + 13: uint16(28130), + 14: uint16(28131), + 15: uint16(28133), + 16: uint16(28135), + 17: uint16(28136), + 18: uint16(28137), + 19: uint16(28138), + 20: uint16(28141), + 21: uint16(28143), + 22: uint16(28144), + 23: uint16(28146), + 24: uint16(28148), + 25: uint16(28149), + 26: uint16(28150), + 27: uint16(28152), + 28: uint16(28154), + 29: uint16(28157), + 30: uint16(28158), + 31: uint16(28159), + 32: uint16(28160), + 33: uint16(28161), + 34: uint16(28162), + 35: uint16(28163), + 36: uint16(28164), + 37: uint16(28166), + 38: uint16(28167), + 39: uint16(28168), + 40: uint16(28169), + 41: uint16(28171), + 42: uint16(28175), + 43: uint16(28178), + 44: uint16(28179), + 45: uint16(28181), + 46: uint16(28184), + 47: uint16(28185), + 48: uint16(28187), + 49: uint16(28188), + 50: uint16(28190), + 51: uint16(28191), + 52: uint16(28194), + 53: uint16(28198), + 54: uint16(28199), + 55: uint16(28200), + 56: uint16(28202), + 57: uint16(28204), + 58: uint16(28206), + 59: uint16(28208), + 60: uint16(28209), + 61: uint16(28211), + 62: uint16(28213), + 63: uint16(28214), + 64: uint16(28215), + 65: uint16(28217), + 66: uint16(28219), + 67: uint16(28220), + 68: uint16(28221), + 69: uint16(28222), + 70: uint16(28223), + 71: uint16(28224), + 72: uint16(28225), + 73: uint16(28226), + 74: uint16(28229), + 75: uint16(28230), + 76: uint16(28231), + 77: uint16(28232), + 78: uint16(28233), + 79: uint16(28234), + 80: uint16(28235), + 81: uint16(28236), + 82: uint16(28239), + 83: uint16(28240), + 84: uint16(28241), + 85: uint16(28242), + 86: uint16(28245), + 87: uint16(28247), + 88: uint16(28249), + 89: uint16(28250), + 90: uint16(28252), + 91: uint16(28253), + 92: uint16(28254), + 93: uint16(28256), + 94: uint16(28257), + 95: uint16(28258), + 96: uint16(28259), + 97: uint16(28260), + 98: uint16(28261), + 99: uint16(28262), + 100: uint16(28263), + 101: uint16(28264), + 102: uint16(28265), + 103: uint16(28266), + 104: uint16(28268), + 105: uint16(28269), + 106: uint16(28271), + 107: uint16(28272), + 108: uint16(28273), + 109: uint16(28274), + 110: uint16(28275), + 111: uint16(28276), + 112: uint16(28277), + 113: uint16(28278), + 114: uint16(28279), + 115: uint16(28280), + 116: uint16(28281), + 117: uint16(28282), + 118: uint16(28283), + 119: uint16(28284), + 120: uint16(28285), + 121: uint16(28288), + 122: uint16(28289), + 123: uint16(28290), + 124: uint16(28292), + 125: uint16(28295), + 126: uint16(28296), + 127: uint16(28298), + 128: uint16(28299), + 129: uint16(28300), + 130: uint16(28301), + 131: uint16(28302), + 132: uint16(28305), + 133: uint16(28306), + 134: uint16(28307), + 135: uint16(28308), + 136: uint16(28309), + 137: uint16(28310), + 138: uint16(28311), + 139: uint16(28313), + 140: uint16(28314), + 141: uint16(28315), + 142: uint16(28317), + 143: uint16(28318), + 144: uint16(28320), + 145: uint16(28321), + 146: uint16(28323), + 147: uint16(28324), + 148: uint16(28326), + 149: uint16(28328), + 150: uint16(28329), + 151: uint16(28331), + 152: uint16(28332), + 153: uint16(28333), + 154: uint16(28334), + 155: uint16(28336), + 156: uint16(28339), + 157: uint16(28341), + 158: uint16(28344), + 159: uint16(28345), + 160: uint16(28348), + 161: uint16(28350), + 162: uint16(28351), + 163: uint16(28352), + 164: uint16(28355), + 165: uint16(28356), + 166: uint16(28357), + 167: uint16(28358), + 168: uint16(28360), + 169: uint16(28361), + 170: uint16(28362), + 171: uint16(28364), + 172: uint16(28365), + 173: uint16(28366), + 174: uint16(28368), + 175: uint16(28370), + 176: uint16(28374), + 177: uint16(28376), + 178: uint16(28377), + 179: uint16(28379), + 180: uint16(28380), + 181: uint16(28381), + 182: uint16(28387), + 183: uint16(28391), + 184: uint16(28394), + 185: uint16(28395), + 186: uint16(28396), + 187: uint16(28397), + 188: uint16(28398), + 189: uint16(28399), + }, + 28: { + 0: uint16(28400), + 1: uint16(28401), + 2: uint16(28402), + 3: uint16(28403), + 4: uint16(28405), + 5: uint16(28406), + 6: uint16(28407), + 7: uint16(28408), + 8: uint16(28410), + 9: uint16(28411), + 10: uint16(28412), + 11: uint16(28413), + 12: uint16(28414), + 13: uint16(28415), + 14: uint16(28416), + 15: uint16(28417), + 16: uint16(28419), + 17: uint16(28420), + 18: uint16(28421), + 19: uint16(28423), + 20: uint16(28424), + 21: uint16(28426), + 22: uint16(28427), + 23: uint16(28428), + 24: uint16(28429), + 25: uint16(28430), + 26: uint16(28432), + 27: uint16(28433), + 28: uint16(28434), + 29: uint16(28438), + 30: uint16(28439), + 31: uint16(28440), + 32: uint16(28441), + 33: uint16(28442), + 34: uint16(28443), + 35: uint16(28444), + 36: uint16(28445), + 37: uint16(28446), + 38: uint16(28447), + 39: uint16(28449), + 40: uint16(28450), + 41: uint16(28451), + 42: uint16(28453), + 43: uint16(28454), + 44: uint16(28455), + 45: uint16(28456), + 46: uint16(28460), + 47: uint16(28462), + 48: uint16(28464), + 49: uint16(28466), + 50: uint16(28468), + 51: uint16(28469), + 52: uint16(28471), + 53: uint16(28472), + 54: uint16(28473), + 55: uint16(28474), + 56: uint16(28475), + 57: uint16(28476), + 58: uint16(28477), + 59: uint16(28479), + 60: uint16(28480), + 61: uint16(28481), + 62: uint16(28482), + 63: uint16(28483), + 64: uint16(28484), + 65: uint16(28485), + 66: uint16(28488), + 67: uint16(28489), + 68: uint16(28490), + 69: uint16(28492), + 70: uint16(28494), + 71: uint16(28495), + 72: uint16(28496), + 73: uint16(28497), + 74: uint16(28498), + 75: uint16(28499), + 76: uint16(28500), + 77: uint16(28501), + 78: uint16(28502), + 79: uint16(28503), + 80: uint16(28505), + 81: uint16(28506), + 82: uint16(28507), + 83: uint16(28509), + 84: uint16(28511), + 85: uint16(28512), + 86: uint16(28513), + 87: uint16(28515), + 88: uint16(28516), + 89: uint16(28517), + 90: uint16(28519), + 91: uint16(28520), + 92: uint16(28521), + 93: uint16(28522), + 94: uint16(28523), + 95: uint16(28524), + 96: uint16(28527), + 97: uint16(28528), + 98: uint16(28529), + 99: uint16(28531), + 100: uint16(28533), + 101: uint16(28534), + 102: uint16(28535), + 103: uint16(28537), + 104: uint16(28539), + 105: uint16(28541), + 106: uint16(28542), + 107: uint16(28543), + 108: uint16(28544), + 109: uint16(28545), + 110: uint16(28546), + 111: uint16(28547), + 112: uint16(28549), + 113: uint16(28550), + 114: uint16(28551), + 115: uint16(28554), + 116: uint16(28555), + 117: uint16(28559), + 118: uint16(28560), + 119: uint16(28561), + 120: uint16(28562), + 121: uint16(28563), + 122: uint16(28564), + 123: uint16(28565), + 124: uint16(28566), + 125: uint16(28567), + 126: uint16(28568), + 127: uint16(28569), + 128: uint16(28570), + 129: uint16(28571), + 130: uint16(28573), + 131: uint16(28574), + 132: uint16(28575), + 133: uint16(28576), + 134: uint16(28578), + 135: uint16(28579), + 136: uint16(28580), + 137: uint16(28581), + 138: uint16(28582), + 139: uint16(28584), + 140: uint16(28585), + 141: uint16(28586), + 142: uint16(28587), + 143: uint16(28588), + 144: uint16(28589), + 145: uint16(28590), + 146: uint16(28591), + 147: uint16(28592), + 148: uint16(28593), + 149: uint16(28594), + 150: uint16(28596), + 151: uint16(28597), + 152: uint16(28599), + 153: uint16(28600), + 154: uint16(28602), + 155: uint16(28603), + 156: uint16(28604), + 157: uint16(28605), + 158: uint16(28606), + 159: uint16(28607), + 160: uint16(28609), + 161: uint16(28611), + 162: uint16(28612), + 163: uint16(28613), + 164: uint16(28614), + 165: uint16(28615), + 166: uint16(28616), + 167: uint16(28618), + 168: uint16(28619), + 169: uint16(28620), + 170: uint16(28621), + 171: uint16(28622), + 172: uint16(28623), + 173: uint16(28624), + 174: uint16(28627), + 175: uint16(28628), + 176: uint16(28629), + 177: uint16(28630), + 178: uint16(28631), + 179: uint16(28632), + 180: uint16(28633), + 181: uint16(28634), + 182: uint16(28635), + 183: uint16(28636), + 184: uint16(28637), + 185: uint16(28639), + 186: uint16(28642), + 187: uint16(28643), + 188: uint16(28644), + 189: uint16(28645), + }, + 29: { + 0: uint16(28646), + 1: uint16(28647), + 2: uint16(28648), + 3: uint16(28649), + 4: uint16(28650), + 5: uint16(28651), + 6: uint16(28652), + 7: uint16(28653), + 8: uint16(28656), + 9: uint16(28657), + 10: uint16(28658), + 11: uint16(28659), + 12: uint16(28660), + 13: uint16(28661), + 14: uint16(28662), + 15: uint16(28663), + 16: uint16(28664), + 17: uint16(28665), + 18: uint16(28666), + 19: uint16(28667), + 20: uint16(28668), + 21: uint16(28669), + 22: uint16(28670), + 23: uint16(28671), + 24: uint16(28672), + 25: uint16(28673), + 26: uint16(28674), + 27: uint16(28675), + 28: uint16(28676), + 29: uint16(28677), + 30: uint16(28678), + 31: uint16(28679), + 32: uint16(28680), + 33: uint16(28681), + 34: uint16(28682), + 35: uint16(28683), + 36: uint16(28684), + 37: uint16(28685), + 38: uint16(28686), + 39: uint16(28687), + 40: uint16(28688), + 41: uint16(28690), + 42: uint16(28691), + 43: uint16(28692), + 44: uint16(28693), + 45: uint16(28694), + 46: uint16(28695), + 47: uint16(28696), + 48: uint16(28697), + 49: uint16(28700), + 50: uint16(28701), + 51: uint16(28702), + 52: uint16(28703), + 53: uint16(28704), + 54: uint16(28705), + 55: uint16(28706), + 56: uint16(28708), + 57: uint16(28709), + 58: uint16(28710), + 59: uint16(28711), + 60: uint16(28712), + 61: uint16(28713), + 62: uint16(28714), + 63: uint16(28715), + 64: uint16(28716), + 65: uint16(28717), + 66: uint16(28718), + 67: uint16(28719), + 68: uint16(28720), + 69: uint16(28721), + 70: uint16(28722), + 71: uint16(28723), + 72: uint16(28724), + 73: uint16(28726), + 74: uint16(28727), + 75: uint16(28728), + 76: uint16(28730), + 77: uint16(28731), + 78: uint16(28732), + 79: uint16(28733), + 80: uint16(28734), + 81: uint16(28735), + 82: uint16(28736), + 83: uint16(28737), + 84: uint16(28738), + 85: uint16(28739), + 86: uint16(28740), + 87: uint16(28741), + 88: uint16(28742), + 89: uint16(28743), + 90: uint16(28744), + 91: uint16(28745), + 92: uint16(28746), + 93: uint16(28747), + 94: uint16(28749), + 95: uint16(28750), + 96: uint16(28752), + 97: uint16(28753), + 98: uint16(28754), + 99: uint16(28755), + 100: uint16(28756), + 101: uint16(28757), + 102: uint16(28758), + 103: uint16(28759), + 104: uint16(28760), + 105: uint16(28761), + 106: uint16(28762), + 107: uint16(28763), + 108: uint16(28764), + 109: uint16(28765), + 110: uint16(28767), + 111: uint16(28768), + 112: uint16(28769), + 113: uint16(28770), + 114: uint16(28771), + 115: uint16(28772), + 116: uint16(28773), + 117: uint16(28774), + 118: uint16(28775), + 119: uint16(28776), + 120: uint16(28777), + 121: uint16(28778), + 122: uint16(28782), + 123: uint16(28785), + 124: uint16(28786), + 125: uint16(28787), + 126: uint16(28788), + 127: uint16(28791), + 128: uint16(28793), + 129: uint16(28794), + 130: uint16(28795), + 131: uint16(28797), + 132: uint16(28801), + 133: uint16(28802), + 134: uint16(28803), + 135: uint16(28804), + 136: uint16(28806), + 137: uint16(28807), + 138: uint16(28808), + 139: uint16(28811), + 140: uint16(28812), + 141: uint16(28813), + 142: uint16(28815), + 143: uint16(28816), + 144: uint16(28817), + 145: uint16(28819), + 146: uint16(28823), + 147: uint16(28824), + 148: uint16(28826), + 149: uint16(28827), + 150: uint16(28830), + 151: uint16(28831), + 152: uint16(28832), + 153: uint16(28833), + 154: uint16(28834), + 155: uint16(28835), + 156: uint16(28836), + 157: uint16(28837), + 158: uint16(28838), + 159: uint16(28839), + 160: uint16(28840), + 161: uint16(28841), + 162: uint16(28842), + 163: uint16(28848), + 164: uint16(28850), + 165: uint16(28852), + 166: uint16(28853), + 167: uint16(28854), + 168: uint16(28858), + 169: uint16(28862), + 170: uint16(28863), + 171: uint16(28868), + 172: uint16(28869), + 173: uint16(28870), + 174: uint16(28871), + 175: uint16(28873), + 176: uint16(28875), + 177: uint16(28876), + 178: uint16(28877), + 179: uint16(28878), + 180: uint16(28879), + 181: uint16(28880), + 182: uint16(28881), + 183: uint16(28882), + 184: uint16(28883), + 185: uint16(28884), + 186: uint16(28885), + 187: uint16(28886), + 188: uint16(28887), + 189: uint16(28890), + }, + 30: { + 0: uint16(28892), + 1: uint16(28893), + 2: uint16(28894), + 3: uint16(28896), + 4: uint16(28897), + 5: uint16(28898), + 6: uint16(28899), + 7: uint16(28901), + 8: uint16(28906), + 9: uint16(28910), + 10: uint16(28912), + 11: uint16(28913), + 12: uint16(28914), + 13: uint16(28915), + 14: uint16(28916), + 15: uint16(28917), + 16: uint16(28918), + 17: uint16(28920), + 18: uint16(28922), + 19: uint16(28923), + 20: uint16(28924), + 21: uint16(28926), + 22: uint16(28927), + 23: uint16(28928), + 24: uint16(28929), + 25: uint16(28930), + 26: uint16(28931), + 27: uint16(28932), + 28: uint16(28933), + 29: uint16(28934), + 30: uint16(28935), + 31: uint16(28936), + 32: uint16(28939), + 33: uint16(28940), + 34: uint16(28941), + 35: uint16(28942), + 36: uint16(28943), + 37: uint16(28945), + 38: uint16(28946), + 39: uint16(28948), + 40: uint16(28951), + 41: uint16(28955), + 42: uint16(28956), + 43: uint16(28957), + 44: uint16(28958), + 45: uint16(28959), + 46: uint16(28960), + 47: uint16(28961), + 48: uint16(28962), + 49: uint16(28963), + 50: uint16(28964), + 51: uint16(28965), + 52: uint16(28967), + 53: uint16(28968), + 54: uint16(28969), + 55: uint16(28970), + 56: uint16(28971), + 57: uint16(28972), + 58: uint16(28973), + 59: uint16(28974), + 60: uint16(28978), + 61: uint16(28979), + 62: uint16(28980), + 63: uint16(28981), + 64: uint16(28983), + 65: uint16(28984), + 66: uint16(28985), + 67: uint16(28986), + 68: uint16(28987), + 69: uint16(28988), + 70: uint16(28989), + 71: uint16(28990), + 72: uint16(28991), + 73: uint16(28992), + 74: uint16(28993), + 75: uint16(28994), + 76: uint16(28995), + 77: uint16(28996), + 78: uint16(28998), + 79: uint16(28999), + 80: uint16(29000), + 81: uint16(29001), + 82: uint16(29003), + 83: uint16(29005), + 84: uint16(29007), + 85: uint16(29008), + 86: uint16(29009), + 87: uint16(29010), + 88: uint16(29011), + 89: uint16(29012), + 90: uint16(29013), + 91: uint16(29014), + 92: uint16(29015), + 93: uint16(29016), + 94: uint16(29017), + 95: uint16(29018), + 96: uint16(29019), + 97: uint16(29021), + 98: uint16(29023), + 99: uint16(29024), + 100: uint16(29025), + 101: uint16(29026), + 102: uint16(29027), + 103: uint16(29029), + 104: uint16(29033), + 105: uint16(29034), + 106: uint16(29035), + 107: uint16(29036), + 108: uint16(29037), + 109: uint16(29039), + 110: uint16(29040), + 111: uint16(29041), + 112: uint16(29044), + 113: uint16(29045), + 114: uint16(29046), + 115: uint16(29047), + 116: uint16(29049), + 117: uint16(29051), + 118: uint16(29052), + 119: uint16(29054), + 120: uint16(29055), + 121: uint16(29056), + 122: uint16(29057), + 123: uint16(29058), + 124: uint16(29059), + 125: uint16(29061), + 126: uint16(29062), + 127: uint16(29063), + 128: uint16(29064), + 129: uint16(29065), + 130: uint16(29067), + 131: uint16(29068), + 132: uint16(29069), + 133: uint16(29070), + 134: uint16(29072), + 135: uint16(29073), + 136: uint16(29074), + 137: uint16(29075), + 138: uint16(29077), + 139: uint16(29078), + 140: uint16(29079), + 141: uint16(29082), + 142: uint16(29083), + 143: uint16(29084), + 144: uint16(29085), + 145: uint16(29086), + 146: uint16(29089), + 147: uint16(29090), + 148: uint16(29091), + 149: uint16(29092), + 150: uint16(29093), + 151: uint16(29094), + 152: uint16(29095), + 153: uint16(29097), + 154: uint16(29098), + 155: uint16(29099), + 156: uint16(29101), + 157: uint16(29102), + 158: uint16(29103), + 159: uint16(29104), + 160: uint16(29105), + 161: uint16(29106), + 162: uint16(29108), + 163: uint16(29110), + 164: uint16(29111), + 165: uint16(29112), + 166: uint16(29114), + 167: uint16(29115), + 168: uint16(29116), + 169: uint16(29117), + 170: uint16(29118), + 171: uint16(29119), + 172: uint16(29120), + 173: uint16(29121), + 174: uint16(29122), + 175: uint16(29124), + 176: uint16(29125), + 177: uint16(29126), + 178: uint16(29127), + 179: uint16(29128), + 180: uint16(29129), + 181: uint16(29130), + 182: uint16(29131), + 183: uint16(29132), + 184: uint16(29133), + 185: uint16(29135), + 186: uint16(29136), + 187: uint16(29137), + 188: uint16(29138), + 189: uint16(29139), + }, + 31: { + 0: uint16(29142), + 1: uint16(29143), + 2: uint16(29144), + 3: uint16(29145), + 4: uint16(29146), + 5: uint16(29147), + 6: uint16(29148), + 7: uint16(29149), + 8: uint16(29150), + 9: uint16(29151), + 10: uint16(29153), + 11: uint16(29154), + 12: uint16(29155), + 13: uint16(29156), + 14: uint16(29158), + 15: uint16(29160), + 16: uint16(29161), + 17: uint16(29162), + 18: uint16(29163), + 19: uint16(29164), + 20: uint16(29165), + 21: uint16(29167), + 22: uint16(29168), + 23: uint16(29169), + 24: uint16(29170), + 25: uint16(29171), + 26: uint16(29172), + 27: uint16(29173), + 28: uint16(29174), + 29: uint16(29175), + 30: uint16(29176), + 31: uint16(29178), + 32: uint16(29179), + 33: uint16(29180), + 34: uint16(29181), + 35: uint16(29182), + 36: uint16(29183), + 37: uint16(29184), + 38: uint16(29185), + 39: uint16(29186), + 40: uint16(29187), + 41: uint16(29188), + 42: uint16(29189), + 43: uint16(29191), + 44: uint16(29192), + 45: uint16(29193), + 46: uint16(29194), + 47: uint16(29195), + 48: uint16(29196), + 49: uint16(29197), + 50: uint16(29198), + 51: uint16(29199), + 52: uint16(29200), + 53: uint16(29201), + 54: uint16(29202), + 55: uint16(29203), + 56: uint16(29204), + 57: uint16(29205), + 58: uint16(29206), + 59: uint16(29207), + 60: uint16(29208), + 61: uint16(29209), + 62: uint16(29210), + 63: uint16(29211), + 64: uint16(29212), + 65: uint16(29214), + 66: uint16(29215), + 67: uint16(29216), + 68: uint16(29217), + 69: uint16(29218), + 70: uint16(29219), + 71: uint16(29220), + 72: uint16(29221), + 73: uint16(29222), + 74: uint16(29223), + 75: uint16(29225), + 76: uint16(29227), + 77: uint16(29229), + 78: uint16(29230), + 79: uint16(29231), + 80: uint16(29234), + 81: uint16(29235), + 82: uint16(29236), + 83: uint16(29242), + 84: uint16(29244), + 85: uint16(29246), + 86: uint16(29248), + 87: uint16(29249), + 88: uint16(29250), + 89: uint16(29251), + 90: uint16(29252), + 91: uint16(29253), + 92: uint16(29254), + 93: uint16(29257), + 94: uint16(29258), + 95: uint16(29259), + 96: uint16(29262), + 97: uint16(29263), + 98: uint16(29264), + 99: uint16(29265), + 100: uint16(29267), + 101: uint16(29268), + 102: uint16(29269), + 103: uint16(29271), + 104: uint16(29272), + 105: uint16(29274), + 106: uint16(29276), + 107: uint16(29278), + 108: uint16(29280), + 109: uint16(29283), + 110: uint16(29284), + 111: uint16(29285), + 112: uint16(29288), + 113: uint16(29290), + 114: uint16(29291), + 115: uint16(29292), + 116: uint16(29293), + 117: uint16(29296), + 118: uint16(29297), + 119: uint16(29299), + 120: uint16(29300), + 121: uint16(29302), + 122: uint16(29303), + 123: uint16(29304), + 124: uint16(29307), + 125: uint16(29308), + 126: uint16(29309), + 127: uint16(29314), + 128: uint16(29315), + 129: uint16(29317), + 130: uint16(29318), + 131: uint16(29319), + 132: uint16(29320), + 133: uint16(29321), + 134: uint16(29324), + 135: uint16(29326), + 136: uint16(29328), + 137: uint16(29329), + 138: uint16(29331), + 139: uint16(29332), + 140: uint16(29333), + 141: uint16(29334), + 142: uint16(29335), + 143: uint16(29336), + 144: uint16(29337), + 145: uint16(29338), + 146: uint16(29339), + 147: uint16(29340), + 148: uint16(29341), + 149: uint16(29342), + 150: uint16(29344), + 151: uint16(29345), + 152: uint16(29346), + 153: uint16(29347), + 154: uint16(29348), + 155: uint16(29349), + 156: uint16(29350), + 157: uint16(29351), + 158: uint16(29352), + 159: uint16(29353), + 160: uint16(29354), + 161: uint16(29355), + 162: uint16(29358), + 163: uint16(29361), + 164: uint16(29362), + 165: uint16(29363), + 166: uint16(29365), + 167: uint16(29370), + 168: uint16(29371), + 169: uint16(29372), + 170: uint16(29373), + 171: uint16(29374), + 172: uint16(29375), + 173: uint16(29376), + 174: uint16(29381), + 175: uint16(29382), + 176: uint16(29383), + 177: uint16(29385), + 178: uint16(29386), + 179: uint16(29387), + 180: uint16(29388), + 181: uint16(29391), + 182: uint16(29393), + 183: uint16(29395), + 184: uint16(29396), + 185: uint16(29397), + 186: uint16(29398), + 187: uint16(29400), + 188: uint16(29402), + 189: uint16(29403), + }, + 32: { + 0: uint16(58566), + 1: uint16(58567), + 2: uint16(58568), + 3: uint16(58569), + 4: uint16(58570), + 5: uint16(58571), + 6: uint16(58572), + 7: uint16(58573), + 8: uint16(58574), + 9: uint16(58575), + 10: uint16(58576), + 11: uint16(58577), + 12: uint16(58578), + 13: uint16(58579), + 14: uint16(58580), + 15: uint16(58581), + 16: uint16(58582), + 17: uint16(58583), + 18: uint16(58584), + 19: uint16(58585), + 20: uint16(58586), + 21: uint16(58587), + 22: uint16(58588), + 23: uint16(58589), + 24: uint16(58590), + 25: uint16(58591), + 26: uint16(58592), + 27: uint16(58593), + 28: uint16(58594), + 29: uint16(58595), + 30: uint16(58596), + 31: uint16(58597), + 32: uint16(58598), + 33: uint16(58599), + 34: uint16(58600), + 35: uint16(58601), + 36: uint16(58602), + 37: uint16(58603), + 38: uint16(58604), + 39: uint16(58605), + 40: uint16(58606), + 41: uint16(58607), + 42: uint16(58608), + 43: uint16(58609), + 44: uint16(58610), + 45: uint16(58611), + 46: uint16(58612), + 47: uint16(58613), + 48: uint16(58614), + 49: uint16(58615), + 50: uint16(58616), + 51: uint16(58617), + 52: uint16(58618), + 53: uint16(58619), + 54: uint16(58620), + 55: uint16(58621), + 56: uint16(58622), + 57: uint16(58623), + 58: uint16(58624), + 59: uint16(58625), + 60: uint16(58626), + 61: uint16(58627), + 62: uint16(58628), + 63: uint16(58629), + 64: uint16(58630), + 65: uint16(58631), + 66: uint16(58632), + 67: uint16(58633), + 68: uint16(58634), + 69: uint16(58635), + 70: uint16(58636), + 71: uint16(58637), + 72: uint16(58638), + 73: uint16(58639), + 74: uint16(58640), + 75: uint16(58641), + 76: uint16(58642), + 77: uint16(58643), + 78: uint16(58644), + 79: uint16(58645), + 80: uint16(58646), + 81: uint16(58647), + 82: uint16(58648), + 83: uint16(58649), + 84: uint16(58650), + 85: uint16(58651), + 86: uint16(58652), + 87: uint16(58653), + 88: uint16(58654), + 89: uint16(58655), + 90: uint16(58656), + 91: uint16(58657), + 92: uint16(58658), + 93: uint16(58659), + 94: uint16(58660), + 95: uint16(58661), + 96: uint16(12288), + 97: uint16(12289), + 98: uint16(12290), + 99: uint16(183), + 100: uint16(713), + 101: uint16(711), + 102: uint16(168), + 103: uint16(12291), + 104: uint16(12293), + 105: uint16(8212), + 106: uint16(65374), + 107: uint16(8214), + 108: uint16(8230), + 109: uint16(8216), + 110: uint16(8217), + 111: uint16(8220), + 112: uint16(8221), + 113: uint16(12308), + 114: uint16(12309), + 115: uint16(12296), + 116: uint16(12297), + 117: uint16(12298), + 118: uint16(12299), + 119: uint16(12300), + 120: uint16(12301), + 121: uint16(12302), + 122: uint16(12303), + 123: uint16(12310), + 124: uint16(12311), + 125: uint16(12304), + 126: uint16(12305), + 127: uint16(177), + 128: uint16(215), + 129: uint16(247), + 130: uint16(8758), + 131: uint16(8743), + 132: uint16(8744), + 133: uint16(8721), + 134: uint16(8719), + 135: uint16(8746), + 136: uint16(8745), + 137: uint16(8712), + 138: uint16(8759), + 139: uint16(8730), + 140: uint16(8869), + 141: uint16(8741), + 142: uint16(8736), + 143: uint16(8978), + 144: uint16(8857), + 145: uint16(8747), + 146: uint16(8750), + 147: uint16(8801), + 148: uint16(8780), + 149: uint16(8776), + 150: uint16(8765), + 151: uint16(8733), + 152: uint16(8800), + 153: uint16(8814), + 154: uint16(8815), + 155: uint16(8804), + 156: uint16(8805), + 157: uint16(8734), + 158: uint16(8757), + 159: uint16(8756), + 160: uint16(9794), + 161: uint16(9792), + 162: uint16(176), + 163: uint16(8242), + 164: uint16(8243), + 165: uint16(8451), + 166: uint16(65284), + 167: uint16(164), + 168: uint16(65504), + 169: uint16(65505), + 170: uint16(8240), + 171: uint16(167), + 172: uint16(8470), + 173: uint16(9734), + 174: uint16(9733), + 175: uint16(9675), + 176: uint16(9679), + 177: uint16(9678), + 178: uint16(9671), + 179: uint16(9670), + 180: uint16(9633), + 181: uint16(9632), + 182: uint16(9651), + 183: uint16(9650), + 184: uint16(8251), + 185: uint16(8594), + 186: uint16(8592), + 187: uint16(8593), + 188: uint16(8595), + 189: uint16(12307), + }, + 33: { + 0: uint16(58662), + 1: uint16(58663), + 2: uint16(58664), + 3: uint16(58665), + 4: uint16(58666), + 5: uint16(58667), + 6: uint16(58668), + 7: uint16(58669), + 8: uint16(58670), + 9: uint16(58671), + 10: uint16(58672), + 11: uint16(58673), + 12: uint16(58674), + 13: uint16(58675), + 14: uint16(58676), + 15: uint16(58677), + 16: uint16(58678), + 17: uint16(58679), + 18: uint16(58680), + 19: uint16(58681), + 20: uint16(58682), + 21: uint16(58683), + 22: uint16(58684), + 23: uint16(58685), + 24: uint16(58686), + 25: uint16(58687), + 26: uint16(58688), + 27: uint16(58689), + 28: uint16(58690), + 29: uint16(58691), + 30: uint16(58692), + 31: uint16(58693), + 32: uint16(58694), + 33: uint16(58695), + 34: uint16(58696), + 35: uint16(58697), + 36: uint16(58698), + 37: uint16(58699), + 38: uint16(58700), + 39: uint16(58701), + 40: uint16(58702), + 41: uint16(58703), + 42: uint16(58704), + 43: uint16(58705), + 44: uint16(58706), + 45: uint16(58707), + 46: uint16(58708), + 47: uint16(58709), + 48: uint16(58710), + 49: uint16(58711), + 50: uint16(58712), + 51: uint16(58713), + 52: uint16(58714), + 53: uint16(58715), + 54: uint16(58716), + 55: uint16(58717), + 56: uint16(58718), + 57: uint16(58719), + 58: uint16(58720), + 59: uint16(58721), + 60: uint16(58722), + 61: uint16(58723), + 62: uint16(58724), + 63: uint16(58725), + 64: uint16(58726), + 65: uint16(58727), + 66: uint16(58728), + 67: uint16(58729), + 68: uint16(58730), + 69: uint16(58731), + 70: uint16(58732), + 71: uint16(58733), + 72: uint16(58734), + 73: uint16(58735), + 74: uint16(58736), + 75: uint16(58737), + 76: uint16(58738), + 77: uint16(58739), + 78: uint16(58740), + 79: uint16(58741), + 80: uint16(58742), + 81: uint16(58743), + 82: uint16(58744), + 83: uint16(58745), + 84: uint16(58746), + 85: uint16(58747), + 86: uint16(58748), + 87: uint16(58749), + 88: uint16(58750), + 89: uint16(58751), + 90: uint16(58752), + 91: uint16(58753), + 92: uint16(58754), + 93: uint16(58755), + 94: uint16(58756), + 95: uint16(58757), + 96: uint16(8560), + 97: uint16(8561), + 98: uint16(8562), + 99: uint16(8563), + 100: uint16(8564), + 101: uint16(8565), + 102: uint16(8566), + 103: uint16(8567), + 104: uint16(8568), + 105: uint16(8569), + 106: uint16(59238), + 107: uint16(59239), + 108: uint16(59240), + 109: uint16(59241), + 110: uint16(59242), + 111: uint16(59243), + 112: uint16(9352), + 113: uint16(9353), + 114: uint16(9354), + 115: uint16(9355), + 116: uint16(9356), + 117: uint16(9357), + 118: uint16(9358), + 119: uint16(9359), + 120: uint16(9360), + 121: uint16(9361), + 122: uint16(9362), + 123: uint16(9363), + 124: uint16(9364), + 125: uint16(9365), + 126: uint16(9366), + 127: uint16(9367), + 128: uint16(9368), + 129: uint16(9369), + 130: uint16(9370), + 131: uint16(9371), + 132: uint16(9332), + 133: uint16(9333), + 134: uint16(9334), + 135: uint16(9335), + 136: uint16(9336), + 137: uint16(9337), + 138: uint16(9338), + 139: uint16(9339), + 140: uint16(9340), + 141: uint16(9341), + 142: uint16(9342), + 143: uint16(9343), + 144: uint16(9344), + 145: uint16(9345), + 146: uint16(9346), + 147: uint16(9347), + 148: uint16(9348), + 149: uint16(9349), + 150: uint16(9350), + 151: uint16(9351), + 152: uint16(9312), + 153: uint16(9313), + 154: uint16(9314), + 155: uint16(9315), + 156: uint16(9316), + 157: uint16(9317), + 158: uint16(9318), + 159: uint16(9319), + 160: uint16(9320), + 161: uint16(9321), + 162: uint16(8364), + 163: uint16(59245), + 164: uint16(12832), + 165: uint16(12833), + 166: uint16(12834), + 167: uint16(12835), + 168: uint16(12836), + 169: uint16(12837), + 170: uint16(12838), + 171: uint16(12839), + 172: uint16(12840), + 173: uint16(12841), + 174: uint16(59246), + 175: uint16(59247), + 176: uint16(8544), + 177: uint16(8545), + 178: uint16(8546), + 179: uint16(8547), + 180: uint16(8548), + 181: uint16(8549), + 182: uint16(8550), + 183: uint16(8551), + 184: uint16(8552), + 185: uint16(8553), + 186: uint16(8554), + 187: uint16(8555), + 188: uint16(59248), + 189: uint16(59249), + }, + 34: { + 0: uint16(58758), + 1: uint16(58759), + 2: uint16(58760), + 3: uint16(58761), + 4: uint16(58762), + 5: uint16(58763), + 6: uint16(58764), + 7: uint16(58765), + 8: uint16(58766), + 9: uint16(58767), + 10: uint16(58768), + 11: uint16(58769), + 12: uint16(58770), + 13: uint16(58771), + 14: uint16(58772), + 15: uint16(58773), + 16: uint16(58774), + 17: uint16(58775), + 18: uint16(58776), + 19: uint16(58777), + 20: uint16(58778), + 21: uint16(58779), + 22: uint16(58780), + 23: uint16(58781), + 24: uint16(58782), + 25: uint16(58783), + 26: uint16(58784), + 27: uint16(58785), + 28: uint16(58786), + 29: uint16(58787), + 30: uint16(58788), + 31: uint16(58789), + 32: uint16(58790), + 33: uint16(58791), + 34: uint16(58792), + 35: uint16(58793), + 36: uint16(58794), + 37: uint16(58795), + 38: uint16(58796), + 39: uint16(58797), + 40: uint16(58798), + 41: uint16(58799), + 42: uint16(58800), + 43: uint16(58801), + 44: uint16(58802), + 45: uint16(58803), + 46: uint16(58804), + 47: uint16(58805), + 48: uint16(58806), + 49: uint16(58807), + 50: uint16(58808), + 51: uint16(58809), + 52: uint16(58810), + 53: uint16(58811), + 54: uint16(58812), + 55: uint16(58813), + 56: uint16(58814), + 57: uint16(58815), + 58: uint16(58816), + 59: uint16(58817), + 60: uint16(58818), + 61: uint16(58819), + 62: uint16(58820), + 63: uint16(58821), + 64: uint16(58822), + 65: uint16(58823), + 66: uint16(58824), + 67: uint16(58825), + 68: uint16(58826), + 69: uint16(58827), + 70: uint16(58828), + 71: uint16(58829), + 72: uint16(58830), + 73: uint16(58831), + 74: uint16(58832), + 75: uint16(58833), + 76: uint16(58834), + 77: uint16(58835), + 78: uint16(58836), + 79: uint16(58837), + 80: uint16(58838), + 81: uint16(58839), + 82: uint16(58840), + 83: uint16(58841), + 84: uint16(58842), + 85: uint16(58843), + 86: uint16(58844), + 87: uint16(58845), + 88: uint16(58846), + 89: uint16(58847), + 90: uint16(58848), + 91: uint16(58849), + 92: uint16(58850), + 93: uint16(58851), + 94: uint16(58852), + 95: uint16(58853), + 96: uint16(65281), + 97: uint16(65282), + 98: uint16(65283), + 99: uint16(65509), + 100: uint16(65285), + 101: uint16(65286), + 102: uint16(65287), + 103: uint16(65288), + 104: uint16(65289), + 105: uint16(65290), + 106: uint16(65291), + 107: uint16(65292), + 108: uint16(65293), + 109: uint16(65294), + 110: uint16(65295), + 111: uint16(65296), + 112: uint16(65297), + 113: uint16(65298), + 114: uint16(65299), + 115: uint16(65300), + 116: uint16(65301), + 117: uint16(65302), + 118: uint16(65303), + 119: uint16(65304), + 120: uint16(65305), + 121: uint16(65306), + 122: uint16(65307), + 123: uint16(65308), + 124: uint16(65309), + 125: uint16(65310), + 126: uint16(65311), + 127: uint16(65312), + 128: uint16(65313), + 129: uint16(65314), + 130: uint16(65315), + 131: uint16(65316), + 132: uint16(65317), + 133: uint16(65318), + 134: uint16(65319), + 135: uint16(65320), + 136: uint16(65321), + 137: uint16(65322), + 138: uint16(65323), + 139: uint16(65324), + 140: uint16(65325), + 141: uint16(65326), + 142: uint16(65327), + 143: uint16(65328), + 144: uint16(65329), + 145: uint16(65330), + 146: uint16(65331), + 147: uint16(65332), + 148: uint16(65333), + 149: uint16(65334), + 150: uint16(65335), + 151: uint16(65336), + 152: uint16(65337), + 153: uint16(65338), + 154: uint16(65339), + 155: uint16(65340), + 156: uint16(65341), + 157: uint16(65342), + 158: uint16(65343), + 159: uint16(65344), + 160: uint16(65345), + 161: uint16(65346), + 162: uint16(65347), + 163: uint16(65348), + 164: uint16(65349), + 165: uint16(65350), + 166: uint16(65351), + 167: uint16(65352), + 168: uint16(65353), + 169: uint16(65354), + 170: uint16(65355), + 171: uint16(65356), + 172: uint16(65357), + 173: uint16(65358), + 174: uint16(65359), + 175: uint16(65360), + 176: uint16(65361), + 177: uint16(65362), + 178: uint16(65363), + 179: uint16(65364), + 180: uint16(65365), + 181: uint16(65366), + 182: uint16(65367), + 183: uint16(65368), + 184: uint16(65369), + 185: uint16(65370), + 186: uint16(65371), + 187: uint16(65372), + 188: uint16(65373), + 189: uint16(65507), + }, + 35: { + 0: uint16(58854), + 1: uint16(58855), + 2: uint16(58856), + 3: uint16(58857), + 4: uint16(58858), + 5: uint16(58859), + 6: uint16(58860), + 7: uint16(58861), + 8: uint16(58862), + 9: uint16(58863), + 10: uint16(58864), + 11: uint16(58865), + 12: uint16(58866), + 13: uint16(58867), + 14: uint16(58868), + 15: uint16(58869), + 16: uint16(58870), + 17: uint16(58871), + 18: uint16(58872), + 19: uint16(58873), + 20: uint16(58874), + 21: uint16(58875), + 22: uint16(58876), + 23: uint16(58877), + 24: uint16(58878), + 25: uint16(58879), + 26: uint16(58880), + 27: uint16(58881), + 28: uint16(58882), + 29: uint16(58883), + 30: uint16(58884), + 31: uint16(58885), + 32: uint16(58886), + 33: uint16(58887), + 34: uint16(58888), + 35: uint16(58889), + 36: uint16(58890), + 37: uint16(58891), + 38: uint16(58892), + 39: uint16(58893), + 40: uint16(58894), + 41: uint16(58895), + 42: uint16(58896), + 43: uint16(58897), + 44: uint16(58898), + 45: uint16(58899), + 46: uint16(58900), + 47: uint16(58901), + 48: uint16(58902), + 49: uint16(58903), + 50: uint16(58904), + 51: uint16(58905), + 52: uint16(58906), + 53: uint16(58907), + 54: uint16(58908), + 55: uint16(58909), + 56: uint16(58910), + 57: uint16(58911), + 58: uint16(58912), + 59: uint16(58913), + 60: uint16(58914), + 61: uint16(58915), + 62: uint16(58916), + 63: uint16(58917), + 64: uint16(58918), + 65: uint16(58919), + 66: uint16(58920), + 67: uint16(58921), + 68: uint16(58922), + 69: uint16(58923), + 70: uint16(58924), + 71: uint16(58925), + 72: uint16(58926), + 73: uint16(58927), + 74: uint16(58928), + 75: uint16(58929), + 76: uint16(58930), + 77: uint16(58931), + 78: uint16(58932), + 79: uint16(58933), + 80: uint16(58934), + 81: uint16(58935), + 82: uint16(58936), + 83: uint16(58937), + 84: uint16(58938), + 85: uint16(58939), + 86: uint16(58940), + 87: uint16(58941), + 88: uint16(58942), + 89: uint16(58943), + 90: uint16(58944), + 91: uint16(58945), + 92: uint16(58946), + 93: uint16(58947), + 94: uint16(58948), + 95: uint16(58949), + 96: uint16(12353), + 97: uint16(12354), + 98: uint16(12355), + 99: uint16(12356), + 100: uint16(12357), + 101: uint16(12358), + 102: uint16(12359), + 103: uint16(12360), + 104: uint16(12361), + 105: uint16(12362), + 106: uint16(12363), + 107: uint16(12364), + 108: uint16(12365), + 109: uint16(12366), + 110: uint16(12367), + 111: uint16(12368), + 112: uint16(12369), + 113: uint16(12370), + 114: uint16(12371), + 115: uint16(12372), + 116: uint16(12373), + 117: uint16(12374), + 118: uint16(12375), + 119: uint16(12376), + 120: uint16(12377), + 121: uint16(12378), + 122: uint16(12379), + 123: uint16(12380), + 124: uint16(12381), + 125: uint16(12382), + 126: uint16(12383), + 127: uint16(12384), + 128: uint16(12385), + 129: uint16(12386), + 130: uint16(12387), + 131: uint16(12388), + 132: uint16(12389), + 133: uint16(12390), + 134: uint16(12391), + 135: uint16(12392), + 136: uint16(12393), + 137: uint16(12394), + 138: uint16(12395), + 139: uint16(12396), + 140: uint16(12397), + 141: uint16(12398), + 142: uint16(12399), + 143: uint16(12400), + 144: uint16(12401), + 145: uint16(12402), + 146: uint16(12403), + 147: uint16(12404), + 148: uint16(12405), + 149: uint16(12406), + 150: uint16(12407), + 151: uint16(12408), + 152: uint16(12409), + 153: uint16(12410), + 154: uint16(12411), + 155: uint16(12412), + 156: uint16(12413), + 157: uint16(12414), + 158: uint16(12415), + 159: uint16(12416), + 160: uint16(12417), + 161: uint16(12418), + 162: uint16(12419), + 163: uint16(12420), + 164: uint16(12421), + 165: uint16(12422), + 166: uint16(12423), + 167: uint16(12424), + 168: uint16(12425), + 169: uint16(12426), + 170: uint16(12427), + 171: uint16(12428), + 172: uint16(12429), + 173: uint16(12430), + 174: uint16(12431), + 175: uint16(12432), + 176: uint16(12433), + 177: uint16(12434), + 178: uint16(12435), + 179: uint16(59250), + 180: uint16(59251), + 181: uint16(59252), + 182: uint16(59253), + 183: uint16(59254), + 184: uint16(59255), + 185: uint16(59256), + 186: uint16(59257), + 187: uint16(59258), + 188: uint16(59259), + 189: uint16(59260), + }, + 36: { + 0: uint16(58950), + 1: uint16(58951), + 2: uint16(58952), + 3: uint16(58953), + 4: uint16(58954), + 5: uint16(58955), + 6: uint16(58956), + 7: uint16(58957), + 8: uint16(58958), + 9: uint16(58959), + 10: uint16(58960), + 11: uint16(58961), + 12: uint16(58962), + 13: uint16(58963), + 14: uint16(58964), + 15: uint16(58965), + 16: uint16(58966), + 17: uint16(58967), + 18: uint16(58968), + 19: uint16(58969), + 20: uint16(58970), + 21: uint16(58971), + 22: uint16(58972), + 23: uint16(58973), + 24: uint16(58974), + 25: uint16(58975), + 26: uint16(58976), + 27: uint16(58977), + 28: uint16(58978), + 29: uint16(58979), + 30: uint16(58980), + 31: uint16(58981), + 32: uint16(58982), + 33: uint16(58983), + 34: uint16(58984), + 35: uint16(58985), + 36: uint16(58986), + 37: uint16(58987), + 38: uint16(58988), + 39: uint16(58989), + 40: uint16(58990), + 41: uint16(58991), + 42: uint16(58992), + 43: uint16(58993), + 44: uint16(58994), + 45: uint16(58995), + 46: uint16(58996), + 47: uint16(58997), + 48: uint16(58998), + 49: uint16(58999), + 50: uint16(59000), + 51: uint16(59001), + 52: uint16(59002), + 53: uint16(59003), + 54: uint16(59004), + 55: uint16(59005), + 56: uint16(59006), + 57: uint16(59007), + 58: uint16(59008), + 59: uint16(59009), + 60: uint16(59010), + 61: uint16(59011), + 62: uint16(59012), + 63: uint16(59013), + 64: uint16(59014), + 65: uint16(59015), + 66: uint16(59016), + 67: uint16(59017), + 68: uint16(59018), + 69: uint16(59019), + 70: uint16(59020), + 71: uint16(59021), + 72: uint16(59022), + 73: uint16(59023), + 74: uint16(59024), + 75: uint16(59025), + 76: uint16(59026), + 77: uint16(59027), + 78: uint16(59028), + 79: uint16(59029), + 80: uint16(59030), + 81: uint16(59031), + 82: uint16(59032), + 83: uint16(59033), + 84: uint16(59034), + 85: uint16(59035), + 86: uint16(59036), + 87: uint16(59037), + 88: uint16(59038), + 89: uint16(59039), + 90: uint16(59040), + 91: uint16(59041), + 92: uint16(59042), + 93: uint16(59043), + 94: uint16(59044), + 95: uint16(59045), + 96: uint16(12449), + 97: uint16(12450), + 98: uint16(12451), + 99: uint16(12452), + 100: uint16(12453), + 101: uint16(12454), + 102: uint16(12455), + 103: uint16(12456), + 104: uint16(12457), + 105: uint16(12458), + 106: uint16(12459), + 107: uint16(12460), + 108: uint16(12461), + 109: uint16(12462), + 110: uint16(12463), + 111: uint16(12464), + 112: uint16(12465), + 113: uint16(12466), + 114: uint16(12467), + 115: uint16(12468), + 116: uint16(12469), + 117: uint16(12470), + 118: uint16(12471), + 119: uint16(12472), + 120: uint16(12473), + 121: uint16(12474), + 122: uint16(12475), + 123: uint16(12476), + 124: uint16(12477), + 125: uint16(12478), + 126: uint16(12479), + 127: uint16(12480), + 128: uint16(12481), + 129: uint16(12482), + 130: uint16(12483), + 131: uint16(12484), + 132: uint16(12485), + 133: uint16(12486), + 134: uint16(12487), + 135: uint16(12488), + 136: uint16(12489), + 137: uint16(12490), + 138: uint16(12491), + 139: uint16(12492), + 140: uint16(12493), + 141: uint16(12494), + 142: uint16(12495), + 143: uint16(12496), + 144: uint16(12497), + 145: uint16(12498), + 146: uint16(12499), + 147: uint16(12500), + 148: uint16(12501), + 149: uint16(12502), + 150: uint16(12503), + 151: uint16(12504), + 152: uint16(12505), + 153: uint16(12506), + 154: uint16(12507), + 155: uint16(12508), + 156: uint16(12509), + 157: uint16(12510), + 158: uint16(12511), + 159: uint16(12512), + 160: uint16(12513), + 161: uint16(12514), + 162: uint16(12515), + 163: uint16(12516), + 164: uint16(12517), + 165: uint16(12518), + 166: uint16(12519), + 167: uint16(12520), + 168: uint16(12521), + 169: uint16(12522), + 170: uint16(12523), + 171: uint16(12524), + 172: uint16(12525), + 173: uint16(12526), + 174: uint16(12527), + 175: uint16(12528), + 176: uint16(12529), + 177: uint16(12530), + 178: uint16(12531), + 179: uint16(12532), + 180: uint16(12533), + 181: uint16(12534), + 182: uint16(59261), + 183: uint16(59262), + 184: uint16(59263), + 185: uint16(59264), + 186: uint16(59265), + 187: uint16(59266), + 188: uint16(59267), + 189: uint16(59268), + }, + 37: { + 0: uint16(59046), + 1: uint16(59047), + 2: uint16(59048), + 3: uint16(59049), + 4: uint16(59050), + 5: uint16(59051), + 6: uint16(59052), + 7: uint16(59053), + 8: uint16(59054), + 9: uint16(59055), + 10: uint16(59056), + 11: uint16(59057), + 12: uint16(59058), + 13: uint16(59059), + 14: uint16(59060), + 15: uint16(59061), + 16: uint16(59062), + 17: uint16(59063), + 18: uint16(59064), + 19: uint16(59065), + 20: uint16(59066), + 21: uint16(59067), + 22: uint16(59068), + 23: uint16(59069), + 24: uint16(59070), + 25: uint16(59071), + 26: uint16(59072), + 27: uint16(59073), + 28: uint16(59074), + 29: uint16(59075), + 30: uint16(59076), + 31: uint16(59077), + 32: uint16(59078), + 33: uint16(59079), + 34: uint16(59080), + 35: uint16(59081), + 36: uint16(59082), + 37: uint16(59083), + 38: uint16(59084), + 39: uint16(59085), + 40: uint16(59086), + 41: uint16(59087), + 42: uint16(59088), + 43: uint16(59089), + 44: uint16(59090), + 45: uint16(59091), + 46: uint16(59092), + 47: uint16(59093), + 48: uint16(59094), + 49: uint16(59095), + 50: uint16(59096), + 51: uint16(59097), + 52: uint16(59098), + 53: uint16(59099), + 54: uint16(59100), + 55: uint16(59101), + 56: uint16(59102), + 57: uint16(59103), + 58: uint16(59104), + 59: uint16(59105), + 60: uint16(59106), + 61: uint16(59107), + 62: uint16(59108), + 63: uint16(59109), + 64: uint16(59110), + 65: uint16(59111), + 66: uint16(59112), + 67: uint16(59113), + 68: uint16(59114), + 69: uint16(59115), + 70: uint16(59116), + 71: uint16(59117), + 72: uint16(59118), + 73: uint16(59119), + 74: uint16(59120), + 75: uint16(59121), + 76: uint16(59122), + 77: uint16(59123), + 78: uint16(59124), + 79: uint16(59125), + 80: uint16(59126), + 81: uint16(59127), + 82: uint16(59128), + 83: uint16(59129), + 84: uint16(59130), + 85: uint16(59131), + 86: uint16(59132), + 87: uint16(59133), + 88: uint16(59134), + 89: uint16(59135), + 90: uint16(59136), + 91: uint16(59137), + 92: uint16(59138), + 93: uint16(59139), + 94: uint16(59140), + 95: uint16(59141), + 96: uint16(913), + 97: uint16(914), + 98: uint16(915), + 99: uint16(916), + 100: uint16(917), + 101: uint16(918), + 102: uint16(919), + 103: uint16(920), + 104: uint16(921), + 105: uint16(922), + 106: uint16(923), + 107: uint16(924), + 108: uint16(925), + 109: uint16(926), + 110: uint16(927), + 111: uint16(928), + 112: uint16(929), + 113: uint16(931), + 114: uint16(932), + 115: uint16(933), + 116: uint16(934), + 117: uint16(935), + 118: uint16(936), + 119: uint16(937), + 120: uint16(59269), + 121: uint16(59270), + 122: uint16(59271), + 123: uint16(59272), + 124: uint16(59273), + 125: uint16(59274), + 126: uint16(59275), + 127: uint16(59276), + 128: uint16(945), + 129: uint16(946), + 130: uint16(947), + 131: uint16(948), + 132: uint16(949), + 133: uint16(950), + 134: uint16(951), + 135: uint16(952), + 136: uint16(953), + 137: uint16(954), + 138: uint16(955), + 139: uint16(956), + 140: uint16(957), + 141: uint16(958), + 142: uint16(959), + 143: uint16(960), + 144: uint16(961), + 145: uint16(963), + 146: uint16(964), + 147: uint16(965), + 148: uint16(966), + 149: uint16(967), + 150: uint16(968), + 151: uint16(969), + 152: uint16(59277), + 153: uint16(59278), + 154: uint16(59279), + 155: uint16(59280), + 156: uint16(59281), + 157: uint16(59282), + 158: uint16(59283), + 159: uint16(65077), + 160: uint16(65078), + 161: uint16(65081), + 162: uint16(65082), + 163: uint16(65087), + 164: uint16(65088), + 165: uint16(65085), + 166: uint16(65086), + 167: uint16(65089), + 168: uint16(65090), + 169: uint16(65091), + 170: uint16(65092), + 171: uint16(59284), + 172: uint16(59285), + 173: uint16(65083), + 174: uint16(65084), + 175: uint16(65079), + 176: uint16(65080), + 177: uint16(65073), + 178: uint16(59286), + 179: uint16(65075), + 180: uint16(65076), + 181: uint16(59287), + 182: uint16(59288), + 183: uint16(59289), + 184: uint16(59290), + 185: uint16(59291), + 186: uint16(59292), + 187: uint16(59293), + 188: uint16(59294), + 189: uint16(59295), + }, + 38: { + 0: uint16(59142), + 1: uint16(59143), + 2: uint16(59144), + 3: uint16(59145), + 4: uint16(59146), + 5: uint16(59147), + 6: uint16(59148), + 7: uint16(59149), + 8: uint16(59150), + 9: uint16(59151), + 10: uint16(59152), + 11: uint16(59153), + 12: uint16(59154), + 13: uint16(59155), + 14: uint16(59156), + 15: uint16(59157), + 16: uint16(59158), + 17: uint16(59159), + 18: uint16(59160), + 19: uint16(59161), + 20: uint16(59162), + 21: uint16(59163), + 22: uint16(59164), + 23: uint16(59165), + 24: uint16(59166), + 25: uint16(59167), + 26: uint16(59168), + 27: uint16(59169), + 28: uint16(59170), + 29: uint16(59171), + 30: uint16(59172), + 31: uint16(59173), + 32: uint16(59174), + 33: uint16(59175), + 34: uint16(59176), + 35: uint16(59177), + 36: uint16(59178), + 37: uint16(59179), + 38: uint16(59180), + 39: uint16(59181), + 40: uint16(59182), + 41: uint16(59183), + 42: uint16(59184), + 43: uint16(59185), + 44: uint16(59186), + 45: uint16(59187), + 46: uint16(59188), + 47: uint16(59189), + 48: uint16(59190), + 49: uint16(59191), + 50: uint16(59192), + 51: uint16(59193), + 52: uint16(59194), + 53: uint16(59195), + 54: uint16(59196), + 55: uint16(59197), + 56: uint16(59198), + 57: uint16(59199), + 58: uint16(59200), + 59: uint16(59201), + 60: uint16(59202), + 61: uint16(59203), + 62: uint16(59204), + 63: uint16(59205), + 64: uint16(59206), + 65: uint16(59207), + 66: uint16(59208), + 67: uint16(59209), + 68: uint16(59210), + 69: uint16(59211), + 70: uint16(59212), + 71: uint16(59213), + 72: uint16(59214), + 73: uint16(59215), + 74: uint16(59216), + 75: uint16(59217), + 76: uint16(59218), + 77: uint16(59219), + 78: uint16(59220), + 79: uint16(59221), + 80: uint16(59222), + 81: uint16(59223), + 82: uint16(59224), + 83: uint16(59225), + 84: uint16(59226), + 85: uint16(59227), + 86: uint16(59228), + 87: uint16(59229), + 88: uint16(59230), + 89: uint16(59231), + 90: uint16(59232), + 91: uint16(59233), + 92: uint16(59234), + 93: uint16(59235), + 94: uint16(59236), + 95: uint16(59237), + 96: uint16(1040), + 97: uint16(1041), + 98: uint16(1042), + 99: uint16(1043), + 100: uint16(1044), + 101: uint16(1045), + 102: uint16(1025), + 103: uint16(1046), + 104: uint16(1047), + 105: uint16(1048), + 106: uint16(1049), + 107: uint16(1050), + 108: uint16(1051), + 109: uint16(1052), + 110: uint16(1053), + 111: uint16(1054), + 112: uint16(1055), + 113: uint16(1056), + 114: uint16(1057), + 115: uint16(1058), + 116: uint16(1059), + 117: uint16(1060), + 118: uint16(1061), + 119: uint16(1062), + 120: uint16(1063), + 121: uint16(1064), + 122: uint16(1065), + 123: uint16(1066), + 124: uint16(1067), + 125: uint16(1068), + 126: uint16(1069), + 127: uint16(1070), + 128: uint16(1071), + 129: uint16(59296), + 130: uint16(59297), + 131: uint16(59298), + 132: uint16(59299), + 133: uint16(59300), + 134: uint16(59301), + 135: uint16(59302), + 136: uint16(59303), + 137: uint16(59304), + 138: uint16(59305), + 139: uint16(59306), + 140: uint16(59307), + 141: uint16(59308), + 142: uint16(59309), + 143: uint16(59310), + 144: uint16(1072), + 145: uint16(1073), + 146: uint16(1074), + 147: uint16(1075), + 148: uint16(1076), + 149: uint16(1077), + 150: uint16(1105), + 151: uint16(1078), + 152: uint16(1079), + 153: uint16(1080), + 154: uint16(1081), + 155: uint16(1082), + 156: uint16(1083), + 157: uint16(1084), + 158: uint16(1085), + 159: uint16(1086), + 160: uint16(1087), + 161: uint16(1088), + 162: uint16(1089), + 163: uint16(1090), + 164: uint16(1091), + 165: uint16(1092), + 166: uint16(1093), + 167: uint16(1094), + 168: uint16(1095), + 169: uint16(1096), + 170: uint16(1097), + 171: uint16(1098), + 172: uint16(1099), + 173: uint16(1100), + 174: uint16(1101), + 175: uint16(1102), + 176: uint16(1103), + 177: uint16(59311), + 178: uint16(59312), + 179: uint16(59313), + 180: uint16(59314), + 181: uint16(59315), + 182: uint16(59316), + 183: uint16(59317), + 184: uint16(59318), + 185: uint16(59319), + 186: uint16(59320), + 187: uint16(59321), + 188: uint16(59322), + 189: uint16(59323), + }, + 39: { + 0: uint16(714), + 1: uint16(715), + 2: uint16(729), + 3: uint16(8211), + 4: uint16(8213), + 5: uint16(8229), + 6: uint16(8245), + 7: uint16(8453), + 8: uint16(8457), + 9: uint16(8598), + 10: uint16(8599), + 11: uint16(8600), + 12: uint16(8601), + 13: uint16(8725), + 14: uint16(8735), + 15: uint16(8739), + 16: uint16(8786), + 17: uint16(8806), + 18: uint16(8807), + 19: uint16(8895), + 20: uint16(9552), + 21: uint16(9553), + 22: uint16(9554), + 23: uint16(9555), + 24: uint16(9556), + 25: uint16(9557), + 26: uint16(9558), + 27: uint16(9559), + 28: uint16(9560), + 29: uint16(9561), + 30: uint16(9562), + 31: uint16(9563), + 32: uint16(9564), + 33: uint16(9565), + 34: uint16(9566), + 35: uint16(9567), + 36: uint16(9568), + 37: uint16(9569), + 38: uint16(9570), + 39: uint16(9571), + 40: uint16(9572), + 41: uint16(9573), + 42: uint16(9574), + 43: uint16(9575), + 44: uint16(9576), + 45: uint16(9577), + 46: uint16(9578), + 47: uint16(9579), + 48: uint16(9580), + 49: uint16(9581), + 50: uint16(9582), + 51: uint16(9583), + 52: uint16(9584), + 53: uint16(9585), + 54: uint16(9586), + 55: uint16(9587), + 56: uint16(9601), + 57: uint16(9602), + 58: uint16(9603), + 59: uint16(9604), + 60: uint16(9605), + 61: uint16(9606), + 62: uint16(9607), + 63: uint16(9608), + 64: uint16(9609), + 65: uint16(9610), + 66: uint16(9611), + 67: uint16(9612), + 68: uint16(9613), + 69: uint16(9614), + 70: uint16(9615), + 71: uint16(9619), + 72: uint16(9620), + 73: uint16(9621), + 74: uint16(9660), + 75: uint16(9661), + 76: uint16(9698), + 77: uint16(9699), + 78: uint16(9700), + 79: uint16(9701), + 80: uint16(9737), + 81: uint16(8853), + 82: uint16(12306), + 83: uint16(12317), + 84: uint16(12318), + 85: uint16(59324), + 86: uint16(59325), + 87: uint16(59326), + 88: uint16(59327), + 89: uint16(59328), + 90: uint16(59329), + 91: uint16(59330), + 92: uint16(59331), + 93: uint16(59332), + 94: uint16(59333), + 95: uint16(59334), + 96: uint16(257), + 97: uint16(225), + 98: uint16(462), + 99: uint16(224), + 100: uint16(275), + 101: uint16(233), + 102: uint16(283), + 103: uint16(232), + 104: uint16(299), + 105: uint16(237), + 106: uint16(464), + 107: uint16(236), + 108: uint16(333), + 109: uint16(243), + 110: uint16(466), + 111: uint16(242), + 112: uint16(363), + 113: uint16(250), + 114: uint16(468), + 115: uint16(249), + 116: uint16(470), + 117: uint16(472), + 118: uint16(474), + 119: uint16(476), + 120: uint16(252), + 121: uint16(234), + 122: uint16(593), + 123: uint16(59335), + 124: uint16(324), + 125: uint16(328), + 126: uint16(505), + 127: uint16(609), + 128: uint16(59337), + 129: uint16(59338), + 130: uint16(59339), + 131: uint16(59340), + 132: uint16(12549), + 133: uint16(12550), + 134: uint16(12551), + 135: uint16(12552), + 136: uint16(12553), + 137: uint16(12554), + 138: uint16(12555), + 139: uint16(12556), + 140: uint16(12557), + 141: uint16(12558), + 142: uint16(12559), + 143: uint16(12560), + 144: uint16(12561), + 145: uint16(12562), + 146: uint16(12563), + 147: uint16(12564), + 148: uint16(12565), + 149: uint16(12566), + 150: uint16(12567), + 151: uint16(12568), + 152: uint16(12569), + 153: uint16(12570), + 154: uint16(12571), + 155: uint16(12572), + 156: uint16(12573), + 157: uint16(12574), + 158: uint16(12575), + 159: uint16(12576), + 160: uint16(12577), + 161: uint16(12578), + 162: uint16(12579), + 163: uint16(12580), + 164: uint16(12581), + 165: uint16(12582), + 166: uint16(12583), + 167: uint16(12584), + 168: uint16(12585), + 169: uint16(59341), + 170: uint16(59342), + 171: uint16(59343), + 172: uint16(59344), + 173: uint16(59345), + 174: uint16(59346), + 175: uint16(59347), + 176: uint16(59348), + 177: uint16(59349), + 178: uint16(59350), + 179: uint16(59351), + 180: uint16(59352), + 181: uint16(59353), + 182: uint16(59354), + 183: uint16(59355), + 184: uint16(59356), + 185: uint16(59357), + 186: uint16(59358), + 187: uint16(59359), + 188: uint16(59360), + 189: uint16(59361), + }, + 40: { + 0: uint16(12321), + 1: uint16(12322), + 2: uint16(12323), + 3: uint16(12324), + 4: uint16(12325), + 5: uint16(12326), + 6: uint16(12327), + 7: uint16(12328), + 8: uint16(12329), + 9: uint16(12963), + 10: uint16(13198), + 11: uint16(13199), + 12: uint16(13212), + 13: uint16(13213), + 14: uint16(13214), + 15: uint16(13217), + 16: uint16(13252), + 17: uint16(13262), + 18: uint16(13265), + 19: uint16(13266), + 20: uint16(13269), + 21: uint16(65072), + 22: uint16(65506), + 23: uint16(65508), + 24: uint16(59362), + 25: uint16(8481), + 26: uint16(12849), + 27: uint16(59363), + 28: uint16(8208), + 29: uint16(59364), + 30: uint16(59365), + 31: uint16(59366), + 32: uint16(12540), + 33: uint16(12443), + 34: uint16(12444), + 35: uint16(12541), + 36: uint16(12542), + 37: uint16(12294), + 38: uint16(12445), + 39: uint16(12446), + 40: uint16(65097), + 41: uint16(65098), + 42: uint16(65099), + 43: uint16(65100), + 44: uint16(65101), + 45: uint16(65102), + 46: uint16(65103), + 47: uint16(65104), + 48: uint16(65105), + 49: uint16(65106), + 50: uint16(65108), + 51: uint16(65109), + 52: uint16(65110), + 53: uint16(65111), + 54: uint16(65113), + 55: uint16(65114), + 56: uint16(65115), + 57: uint16(65116), + 58: uint16(65117), + 59: uint16(65118), + 60: uint16(65119), + 61: uint16(65120), + 62: uint16(65121), + 63: uint16(65122), + 64: uint16(65123), + 65: uint16(65124), + 66: uint16(65125), + 67: uint16(65126), + 68: uint16(65128), + 69: uint16(65129), + 70: uint16(65130), + 71: uint16(65131), + 72: uint16(12350), + 73: uint16(12272), + 74: uint16(12273), + 75: uint16(12274), + 76: uint16(12275), + 77: uint16(12276), + 78: uint16(12277), + 79: uint16(12278), + 80: uint16(12279), + 81: uint16(12280), + 82: uint16(12281), + 83: uint16(12282), + 84: uint16(12283), + 85: uint16(12295), + 86: uint16(59380), + 87: uint16(59381), + 88: uint16(59382), + 89: uint16(59383), + 90: uint16(59384), + 91: uint16(59385), + 92: uint16(59386), + 93: uint16(59387), + 94: uint16(59388), + 95: uint16(59389), + 96: uint16(59390), + 97: uint16(59391), + 98: uint16(59392), + 99: uint16(9472), + 100: uint16(9473), + 101: uint16(9474), + 102: uint16(9475), + 103: uint16(9476), + 104: uint16(9477), + 105: uint16(9478), + 106: uint16(9479), + 107: uint16(9480), + 108: uint16(9481), + 109: uint16(9482), + 110: uint16(9483), + 111: uint16(9484), + 112: uint16(9485), + 113: uint16(9486), + 114: uint16(9487), + 115: uint16(9488), + 116: uint16(9489), + 117: uint16(9490), + 118: uint16(9491), + 119: uint16(9492), + 120: uint16(9493), + 121: uint16(9494), + 122: uint16(9495), + 123: uint16(9496), + 124: uint16(9497), + 125: uint16(9498), + 126: uint16(9499), + 127: uint16(9500), + 128: uint16(9501), + 129: uint16(9502), + 130: uint16(9503), + 131: uint16(9504), + 132: uint16(9505), + 133: uint16(9506), + 134: uint16(9507), + 135: uint16(9508), + 136: uint16(9509), + 137: uint16(9510), + 138: uint16(9511), + 139: uint16(9512), + 140: uint16(9513), + 141: uint16(9514), + 142: uint16(9515), + 143: uint16(9516), + 144: uint16(9517), + 145: uint16(9518), + 146: uint16(9519), + 147: uint16(9520), + 148: uint16(9521), + 149: uint16(9522), + 150: uint16(9523), + 151: uint16(9524), + 152: uint16(9525), + 153: uint16(9526), + 154: uint16(9527), + 155: uint16(9528), + 156: uint16(9529), + 157: uint16(9530), + 158: uint16(9531), + 159: uint16(9532), + 160: uint16(9533), + 161: uint16(9534), + 162: uint16(9535), + 163: uint16(9536), + 164: uint16(9537), + 165: uint16(9538), + 166: uint16(9539), + 167: uint16(9540), + 168: uint16(9541), + 169: uint16(9542), + 170: uint16(9543), + 171: uint16(9544), + 172: uint16(9545), + 173: uint16(9546), + 174: uint16(9547), + 175: uint16(59393), + 176: uint16(59394), + 177: uint16(59395), + 178: uint16(59396), + 179: uint16(59397), + 180: uint16(59398), + 181: uint16(59399), + 182: uint16(59400), + 183: uint16(59401), + 184: uint16(59402), + 185: uint16(59403), + 186: uint16(59404), + 187: uint16(59405), + 188: uint16(59406), + 189: uint16(59407), + }, + 41: { + 0: uint16(29404), + 1: uint16(29405), + 2: uint16(29407), + 3: uint16(29410), + 4: uint16(29411), + 5: uint16(29412), + 6: uint16(29413), + 7: uint16(29414), + 8: uint16(29415), + 9: uint16(29418), + 10: uint16(29419), + 11: uint16(29429), + 12: uint16(29430), + 13: uint16(29433), + 14: uint16(29437), + 15: uint16(29438), + 16: uint16(29439), + 17: uint16(29440), + 18: uint16(29442), + 19: uint16(29444), + 20: uint16(29445), + 21: uint16(29446), + 22: uint16(29447), + 23: uint16(29448), + 24: uint16(29449), + 25: uint16(29451), + 26: uint16(29452), + 27: uint16(29453), + 28: uint16(29455), + 29: uint16(29456), + 30: uint16(29457), + 31: uint16(29458), + 32: uint16(29460), + 33: uint16(29464), + 34: uint16(29465), + 35: uint16(29466), + 36: uint16(29471), + 37: uint16(29472), + 38: uint16(29475), + 39: uint16(29476), + 40: uint16(29478), + 41: uint16(29479), + 42: uint16(29480), + 43: uint16(29485), + 44: uint16(29487), + 45: uint16(29488), + 46: uint16(29490), + 47: uint16(29491), + 48: uint16(29493), + 49: uint16(29494), + 50: uint16(29498), + 51: uint16(29499), + 52: uint16(29500), + 53: uint16(29501), + 54: uint16(29504), + 55: uint16(29505), + 56: uint16(29506), + 57: uint16(29507), + 58: uint16(29508), + 59: uint16(29509), + 60: uint16(29510), + 61: uint16(29511), + 62: uint16(29512), + 63: uint16(29513), + 64: uint16(29514), + 65: uint16(29515), + 66: uint16(29516), + 67: uint16(29518), + 68: uint16(29519), + 69: uint16(29521), + 70: uint16(29523), + 71: uint16(29524), + 72: uint16(29525), + 73: uint16(29526), + 74: uint16(29528), + 75: uint16(29529), + 76: uint16(29530), + 77: uint16(29531), + 78: uint16(29532), + 79: uint16(29533), + 80: uint16(29534), + 81: uint16(29535), + 82: uint16(29537), + 83: uint16(29538), + 84: uint16(29539), + 85: uint16(29540), + 86: uint16(29541), + 87: uint16(29542), + 88: uint16(29543), + 89: uint16(29544), + 90: uint16(29545), + 91: uint16(29546), + 92: uint16(29547), + 93: uint16(29550), + 94: uint16(29552), + 95: uint16(29553), + 96: uint16(57344), + 97: uint16(57345), + 98: uint16(57346), + 99: uint16(57347), + 100: uint16(57348), + 101: uint16(57349), + 102: uint16(57350), + 103: uint16(57351), + 104: uint16(57352), + 105: uint16(57353), + 106: uint16(57354), + 107: uint16(57355), + 108: uint16(57356), + 109: uint16(57357), + 110: uint16(57358), + 111: uint16(57359), + 112: uint16(57360), + 113: uint16(57361), + 114: uint16(57362), + 115: uint16(57363), + 116: uint16(57364), + 117: uint16(57365), + 118: uint16(57366), + 119: uint16(57367), + 120: uint16(57368), + 121: uint16(57369), + 122: uint16(57370), + 123: uint16(57371), + 124: uint16(57372), + 125: uint16(57373), + 126: uint16(57374), + 127: uint16(57375), + 128: uint16(57376), + 129: uint16(57377), + 130: uint16(57378), + 131: uint16(57379), + 132: uint16(57380), + 133: uint16(57381), + 134: uint16(57382), + 135: uint16(57383), + 136: uint16(57384), + 137: uint16(57385), + 138: uint16(57386), + 139: uint16(57387), + 140: uint16(57388), + 141: uint16(57389), + 142: uint16(57390), + 143: uint16(57391), + 144: uint16(57392), + 145: uint16(57393), + 146: uint16(57394), + 147: uint16(57395), + 148: uint16(57396), + 149: uint16(57397), + 150: uint16(57398), + 151: uint16(57399), + 152: uint16(57400), + 153: uint16(57401), + 154: uint16(57402), + 155: uint16(57403), + 156: uint16(57404), + 157: uint16(57405), + 158: uint16(57406), + 159: uint16(57407), + 160: uint16(57408), + 161: uint16(57409), + 162: uint16(57410), + 163: uint16(57411), + 164: uint16(57412), + 165: uint16(57413), + 166: uint16(57414), + 167: uint16(57415), + 168: uint16(57416), + 169: uint16(57417), + 170: uint16(57418), + 171: uint16(57419), + 172: uint16(57420), + 173: uint16(57421), + 174: uint16(57422), + 175: uint16(57423), + 176: uint16(57424), + 177: uint16(57425), + 178: uint16(57426), + 179: uint16(57427), + 180: uint16(57428), + 181: uint16(57429), + 182: uint16(57430), + 183: uint16(57431), + 184: uint16(57432), + 185: uint16(57433), + 186: uint16(57434), + 187: uint16(57435), + 188: uint16(57436), + 189: uint16(57437), + }, + 42: { + 0: uint16(29554), + 1: uint16(29555), + 2: uint16(29556), + 3: uint16(29557), + 4: uint16(29558), + 5: uint16(29559), + 6: uint16(29560), + 7: uint16(29561), + 8: uint16(29562), + 9: uint16(29563), + 10: uint16(29564), + 11: uint16(29565), + 12: uint16(29567), + 13: uint16(29568), + 14: uint16(29569), + 15: uint16(29570), + 16: uint16(29571), + 17: uint16(29573), + 18: uint16(29574), + 19: uint16(29576), + 20: uint16(29578), + 21: uint16(29580), + 22: uint16(29581), + 23: uint16(29583), + 24: uint16(29584), + 25: uint16(29586), + 26: uint16(29587), + 27: uint16(29588), + 28: uint16(29589), + 29: uint16(29591), + 30: uint16(29592), + 31: uint16(29593), + 32: uint16(29594), + 33: uint16(29596), + 34: uint16(29597), + 35: uint16(29598), + 36: uint16(29600), + 37: uint16(29601), + 38: uint16(29603), + 39: uint16(29604), + 40: uint16(29605), + 41: uint16(29606), + 42: uint16(29607), + 43: uint16(29608), + 44: uint16(29610), + 45: uint16(29612), + 46: uint16(29613), + 47: uint16(29617), + 48: uint16(29620), + 49: uint16(29621), + 50: uint16(29622), + 51: uint16(29624), + 52: uint16(29625), + 53: uint16(29628), + 54: uint16(29629), + 55: uint16(29630), + 56: uint16(29631), + 57: uint16(29633), + 58: uint16(29635), + 59: uint16(29636), + 60: uint16(29637), + 61: uint16(29638), + 62: uint16(29639), + 63: uint16(29643), + 64: uint16(29644), + 65: uint16(29646), + 66: uint16(29650), + 67: uint16(29651), + 68: uint16(29652), + 69: uint16(29653), + 70: uint16(29654), + 71: uint16(29655), + 72: uint16(29656), + 73: uint16(29658), + 74: uint16(29659), + 75: uint16(29660), + 76: uint16(29661), + 77: uint16(29663), + 78: uint16(29665), + 79: uint16(29666), + 80: uint16(29667), + 81: uint16(29668), + 82: uint16(29670), + 83: uint16(29672), + 84: uint16(29674), + 85: uint16(29675), + 86: uint16(29676), + 87: uint16(29678), + 88: uint16(29679), + 89: uint16(29680), + 90: uint16(29681), + 91: uint16(29683), + 92: uint16(29684), + 93: uint16(29685), + 94: uint16(29686), + 95: uint16(29687), + 96: uint16(57438), + 97: uint16(57439), + 98: uint16(57440), + 99: uint16(57441), + 100: uint16(57442), + 101: uint16(57443), + 102: uint16(57444), + 103: uint16(57445), + 104: uint16(57446), + 105: uint16(57447), + 106: uint16(57448), + 107: uint16(57449), + 108: uint16(57450), + 109: uint16(57451), + 110: uint16(57452), + 111: uint16(57453), + 112: uint16(57454), + 113: uint16(57455), + 114: uint16(57456), + 115: uint16(57457), + 116: uint16(57458), + 117: uint16(57459), + 118: uint16(57460), + 119: uint16(57461), + 120: uint16(57462), + 121: uint16(57463), + 122: uint16(57464), + 123: uint16(57465), + 124: uint16(57466), + 125: uint16(57467), + 126: uint16(57468), + 127: uint16(57469), + 128: uint16(57470), + 129: uint16(57471), + 130: uint16(57472), + 131: uint16(57473), + 132: uint16(57474), + 133: uint16(57475), + 134: uint16(57476), + 135: uint16(57477), + 136: uint16(57478), + 137: uint16(57479), + 138: uint16(57480), + 139: uint16(57481), + 140: uint16(57482), + 141: uint16(57483), + 142: uint16(57484), + 143: uint16(57485), + 144: uint16(57486), + 145: uint16(57487), + 146: uint16(57488), + 147: uint16(57489), + 148: uint16(57490), + 149: uint16(57491), + 150: uint16(57492), + 151: uint16(57493), + 152: uint16(57494), + 153: uint16(57495), + 154: uint16(57496), + 155: uint16(57497), + 156: uint16(57498), + 157: uint16(57499), + 158: uint16(57500), + 159: uint16(57501), + 160: uint16(57502), + 161: uint16(57503), + 162: uint16(57504), + 163: uint16(57505), + 164: uint16(57506), + 165: uint16(57507), + 166: uint16(57508), + 167: uint16(57509), + 168: uint16(57510), + 169: uint16(57511), + 170: uint16(57512), + 171: uint16(57513), + 172: uint16(57514), + 173: uint16(57515), + 174: uint16(57516), + 175: uint16(57517), + 176: uint16(57518), + 177: uint16(57519), + 178: uint16(57520), + 179: uint16(57521), + 180: uint16(57522), + 181: uint16(57523), + 182: uint16(57524), + 183: uint16(57525), + 184: uint16(57526), + 185: uint16(57527), + 186: uint16(57528), + 187: uint16(57529), + 188: uint16(57530), + 189: uint16(57531), + }, + 43: { + 0: uint16(29688), + 1: uint16(29689), + 2: uint16(29690), + 3: uint16(29691), + 4: uint16(29692), + 5: uint16(29693), + 6: uint16(29694), + 7: uint16(29695), + 8: uint16(29696), + 9: uint16(29697), + 10: uint16(29698), + 11: uint16(29700), + 12: uint16(29703), + 13: uint16(29704), + 14: uint16(29707), + 15: uint16(29708), + 16: uint16(29709), + 17: uint16(29710), + 18: uint16(29713), + 19: uint16(29714), + 20: uint16(29715), + 21: uint16(29716), + 22: uint16(29717), + 23: uint16(29718), + 24: uint16(29719), + 25: uint16(29720), + 26: uint16(29721), + 27: uint16(29724), + 28: uint16(29725), + 29: uint16(29726), + 30: uint16(29727), + 31: uint16(29728), + 32: uint16(29729), + 33: uint16(29731), + 34: uint16(29732), + 35: uint16(29735), + 36: uint16(29737), + 37: uint16(29739), + 38: uint16(29741), + 39: uint16(29743), + 40: uint16(29745), + 41: uint16(29746), + 42: uint16(29751), + 43: uint16(29752), + 44: uint16(29753), + 45: uint16(29754), + 46: uint16(29755), + 47: uint16(29757), + 48: uint16(29758), + 49: uint16(29759), + 50: uint16(29760), + 51: uint16(29762), + 52: uint16(29763), + 53: uint16(29764), + 54: uint16(29765), + 55: uint16(29766), + 56: uint16(29767), + 57: uint16(29768), + 58: uint16(29769), + 59: uint16(29770), + 60: uint16(29771), + 61: uint16(29772), + 62: uint16(29773), + 63: uint16(29774), + 64: uint16(29775), + 65: uint16(29776), + 66: uint16(29777), + 67: uint16(29778), + 68: uint16(29779), + 69: uint16(29780), + 70: uint16(29782), + 71: uint16(29784), + 72: uint16(29789), + 73: uint16(29792), + 74: uint16(29793), + 75: uint16(29794), + 76: uint16(29795), + 77: uint16(29796), + 78: uint16(29797), + 79: uint16(29798), + 80: uint16(29799), + 81: uint16(29800), + 82: uint16(29801), + 83: uint16(29802), + 84: uint16(29803), + 85: uint16(29804), + 86: uint16(29806), + 87: uint16(29807), + 88: uint16(29809), + 89: uint16(29810), + 90: uint16(29811), + 91: uint16(29812), + 92: uint16(29813), + 93: uint16(29816), + 94: uint16(29817), + 95: uint16(29818), + 96: uint16(57532), + 97: uint16(57533), + 98: uint16(57534), + 99: uint16(57535), + 100: uint16(57536), + 101: uint16(57537), + 102: uint16(57538), + 103: uint16(57539), + 104: uint16(57540), + 105: uint16(57541), + 106: uint16(57542), + 107: uint16(57543), + 108: uint16(57544), + 109: uint16(57545), + 110: uint16(57546), + 111: uint16(57547), + 112: uint16(57548), + 113: uint16(57549), + 114: uint16(57550), + 115: uint16(57551), + 116: uint16(57552), + 117: uint16(57553), + 118: uint16(57554), + 119: uint16(57555), + 120: uint16(57556), + 121: uint16(57557), + 122: uint16(57558), + 123: uint16(57559), + 124: uint16(57560), + 125: uint16(57561), + 126: uint16(57562), + 127: uint16(57563), + 128: uint16(57564), + 129: uint16(57565), + 130: uint16(57566), + 131: uint16(57567), + 132: uint16(57568), + 133: uint16(57569), + 134: uint16(57570), + 135: uint16(57571), + 136: uint16(57572), + 137: uint16(57573), + 138: uint16(57574), + 139: uint16(57575), + 140: uint16(57576), + 141: uint16(57577), + 142: uint16(57578), + 143: uint16(57579), + 144: uint16(57580), + 145: uint16(57581), + 146: uint16(57582), + 147: uint16(57583), + 148: uint16(57584), + 149: uint16(57585), + 150: uint16(57586), + 151: uint16(57587), + 152: uint16(57588), + 153: uint16(57589), + 154: uint16(57590), + 155: uint16(57591), + 156: uint16(57592), + 157: uint16(57593), + 158: uint16(57594), + 159: uint16(57595), + 160: uint16(57596), + 161: uint16(57597), + 162: uint16(57598), + 163: uint16(57599), + 164: uint16(57600), + 165: uint16(57601), + 166: uint16(57602), + 167: uint16(57603), + 168: uint16(57604), + 169: uint16(57605), + 170: uint16(57606), + 171: uint16(57607), + 172: uint16(57608), + 173: uint16(57609), + 174: uint16(57610), + 175: uint16(57611), + 176: uint16(57612), + 177: uint16(57613), + 178: uint16(57614), + 179: uint16(57615), + 180: uint16(57616), + 181: uint16(57617), + 182: uint16(57618), + 183: uint16(57619), + 184: uint16(57620), + 185: uint16(57621), + 186: uint16(57622), + 187: uint16(57623), + 188: uint16(57624), + 189: uint16(57625), + }, + 44: { + 0: uint16(29819), + 1: uint16(29820), + 2: uint16(29821), + 3: uint16(29823), + 4: uint16(29826), + 5: uint16(29828), + 6: uint16(29829), + 7: uint16(29830), + 8: uint16(29832), + 9: uint16(29833), + 10: uint16(29834), + 11: uint16(29836), + 12: uint16(29837), + 13: uint16(29839), + 14: uint16(29841), + 15: uint16(29842), + 16: uint16(29843), + 17: uint16(29844), + 18: uint16(29845), + 19: uint16(29846), + 20: uint16(29847), + 21: uint16(29848), + 22: uint16(29849), + 23: uint16(29850), + 24: uint16(29851), + 25: uint16(29853), + 26: uint16(29855), + 27: uint16(29856), + 28: uint16(29857), + 29: uint16(29858), + 30: uint16(29859), + 31: uint16(29860), + 32: uint16(29861), + 33: uint16(29862), + 34: uint16(29866), + 35: uint16(29867), + 36: uint16(29868), + 37: uint16(29869), + 38: uint16(29870), + 39: uint16(29871), + 40: uint16(29872), + 41: uint16(29873), + 42: uint16(29874), + 43: uint16(29875), + 44: uint16(29876), + 45: uint16(29877), + 46: uint16(29878), + 47: uint16(29879), + 48: uint16(29880), + 49: uint16(29881), + 50: uint16(29883), + 51: uint16(29884), + 52: uint16(29885), + 53: uint16(29886), + 54: uint16(29887), + 55: uint16(29888), + 56: uint16(29889), + 57: uint16(29890), + 58: uint16(29891), + 59: uint16(29892), + 60: uint16(29893), + 61: uint16(29894), + 62: uint16(29895), + 63: uint16(29896), + 64: uint16(29897), + 65: uint16(29898), + 66: uint16(29899), + 67: uint16(29900), + 68: uint16(29901), + 69: uint16(29902), + 70: uint16(29903), + 71: uint16(29904), + 72: uint16(29905), + 73: uint16(29907), + 74: uint16(29908), + 75: uint16(29909), + 76: uint16(29910), + 77: uint16(29911), + 78: uint16(29912), + 79: uint16(29913), + 80: uint16(29914), + 81: uint16(29915), + 82: uint16(29917), + 83: uint16(29919), + 84: uint16(29921), + 85: uint16(29925), + 86: uint16(29927), + 87: uint16(29928), + 88: uint16(29929), + 89: uint16(29930), + 90: uint16(29931), + 91: uint16(29932), + 92: uint16(29933), + 93: uint16(29936), + 94: uint16(29937), + 95: uint16(29938), + 96: uint16(57626), + 97: uint16(57627), + 98: uint16(57628), + 99: uint16(57629), + 100: uint16(57630), + 101: uint16(57631), + 102: uint16(57632), + 103: uint16(57633), + 104: uint16(57634), + 105: uint16(57635), + 106: uint16(57636), + 107: uint16(57637), + 108: uint16(57638), + 109: uint16(57639), + 110: uint16(57640), + 111: uint16(57641), + 112: uint16(57642), + 113: uint16(57643), + 114: uint16(57644), + 115: uint16(57645), + 116: uint16(57646), + 117: uint16(57647), + 118: uint16(57648), + 119: uint16(57649), + 120: uint16(57650), + 121: uint16(57651), + 122: uint16(57652), + 123: uint16(57653), + 124: uint16(57654), + 125: uint16(57655), + 126: uint16(57656), + 127: uint16(57657), + 128: uint16(57658), + 129: uint16(57659), + 130: uint16(57660), + 131: uint16(57661), + 132: uint16(57662), + 133: uint16(57663), + 134: uint16(57664), + 135: uint16(57665), + 136: uint16(57666), + 137: uint16(57667), + 138: uint16(57668), + 139: uint16(57669), + 140: uint16(57670), + 141: uint16(57671), + 142: uint16(57672), + 143: uint16(57673), + 144: uint16(57674), + 145: uint16(57675), + 146: uint16(57676), + 147: uint16(57677), + 148: uint16(57678), + 149: uint16(57679), + 150: uint16(57680), + 151: uint16(57681), + 152: uint16(57682), + 153: uint16(57683), + 154: uint16(57684), + 155: uint16(57685), + 156: uint16(57686), + 157: uint16(57687), + 158: uint16(57688), + 159: uint16(57689), + 160: uint16(57690), + 161: uint16(57691), + 162: uint16(57692), + 163: uint16(57693), + 164: uint16(57694), + 165: uint16(57695), + 166: uint16(57696), + 167: uint16(57697), + 168: uint16(57698), + 169: uint16(57699), + 170: uint16(57700), + 171: uint16(57701), + 172: uint16(57702), + 173: uint16(57703), + 174: uint16(57704), + 175: uint16(57705), + 176: uint16(57706), + 177: uint16(57707), + 178: uint16(57708), + 179: uint16(57709), + 180: uint16(57710), + 181: uint16(57711), + 182: uint16(57712), + 183: uint16(57713), + 184: uint16(57714), + 185: uint16(57715), + 186: uint16(57716), + 187: uint16(57717), + 188: uint16(57718), + 189: uint16(57719), + }, + 45: { + 0: uint16(29939), + 1: uint16(29941), + 2: uint16(29944), + 3: uint16(29945), + 4: uint16(29946), + 5: uint16(29947), + 6: uint16(29948), + 7: uint16(29949), + 8: uint16(29950), + 9: uint16(29952), + 10: uint16(29953), + 11: uint16(29954), + 12: uint16(29955), + 13: uint16(29957), + 14: uint16(29958), + 15: uint16(29959), + 16: uint16(29960), + 17: uint16(29961), + 18: uint16(29962), + 19: uint16(29963), + 20: uint16(29964), + 21: uint16(29966), + 22: uint16(29968), + 23: uint16(29970), + 24: uint16(29972), + 25: uint16(29973), + 26: uint16(29974), + 27: uint16(29975), + 28: uint16(29979), + 29: uint16(29981), + 30: uint16(29982), + 31: uint16(29984), + 32: uint16(29985), + 33: uint16(29986), + 34: uint16(29987), + 35: uint16(29988), + 36: uint16(29990), + 37: uint16(29991), + 38: uint16(29994), + 39: uint16(29998), + 40: uint16(30004), + 41: uint16(30006), + 42: uint16(30009), + 43: uint16(30012), + 44: uint16(30013), + 45: uint16(30015), + 46: uint16(30017), + 47: uint16(30018), + 48: uint16(30019), + 49: uint16(30020), + 50: uint16(30022), + 51: uint16(30023), + 52: uint16(30025), + 53: uint16(30026), + 54: uint16(30029), + 55: uint16(30032), + 56: uint16(30033), + 57: uint16(30034), + 58: uint16(30035), + 59: uint16(30037), + 60: uint16(30038), + 61: uint16(30039), + 62: uint16(30040), + 63: uint16(30045), + 64: uint16(30046), + 65: uint16(30047), + 66: uint16(30048), + 67: uint16(30049), + 68: uint16(30050), + 69: uint16(30051), + 70: uint16(30052), + 71: uint16(30055), + 72: uint16(30056), + 73: uint16(30057), + 74: uint16(30059), + 75: uint16(30060), + 76: uint16(30061), + 77: uint16(30062), + 78: uint16(30063), + 79: uint16(30064), + 80: uint16(30065), + 81: uint16(30067), + 82: uint16(30069), + 83: uint16(30070), + 84: uint16(30071), + 85: uint16(30074), + 86: uint16(30075), + 87: uint16(30076), + 88: uint16(30077), + 89: uint16(30078), + 90: uint16(30080), + 91: uint16(30081), + 92: uint16(30082), + 93: uint16(30084), + 94: uint16(30085), + 95: uint16(30087), + 96: uint16(57720), + 97: uint16(57721), + 98: uint16(57722), + 99: uint16(57723), + 100: uint16(57724), + 101: uint16(57725), + 102: uint16(57726), + 103: uint16(57727), + 104: uint16(57728), + 105: uint16(57729), + 106: uint16(57730), + 107: uint16(57731), + 108: uint16(57732), + 109: uint16(57733), + 110: uint16(57734), + 111: uint16(57735), + 112: uint16(57736), + 113: uint16(57737), + 114: uint16(57738), + 115: uint16(57739), + 116: uint16(57740), + 117: uint16(57741), + 118: uint16(57742), + 119: uint16(57743), + 120: uint16(57744), + 121: uint16(57745), + 122: uint16(57746), + 123: uint16(57747), + 124: uint16(57748), + 125: uint16(57749), + 126: uint16(57750), + 127: uint16(57751), + 128: uint16(57752), + 129: uint16(57753), + 130: uint16(57754), + 131: uint16(57755), + 132: uint16(57756), + 133: uint16(57757), + 134: uint16(57758), + 135: uint16(57759), + 136: uint16(57760), + 137: uint16(57761), + 138: uint16(57762), + 139: uint16(57763), + 140: uint16(57764), + 141: uint16(57765), + 142: uint16(57766), + 143: uint16(57767), + 144: uint16(57768), + 145: uint16(57769), + 146: uint16(57770), + 147: uint16(57771), + 148: uint16(57772), + 149: uint16(57773), + 150: uint16(57774), + 151: uint16(57775), + 152: uint16(57776), + 153: uint16(57777), + 154: uint16(57778), + 155: uint16(57779), + 156: uint16(57780), + 157: uint16(57781), + 158: uint16(57782), + 159: uint16(57783), + 160: uint16(57784), + 161: uint16(57785), + 162: uint16(57786), + 163: uint16(57787), + 164: uint16(57788), + 165: uint16(57789), + 166: uint16(57790), + 167: uint16(57791), + 168: uint16(57792), + 169: uint16(57793), + 170: uint16(57794), + 171: uint16(57795), + 172: uint16(57796), + 173: uint16(57797), + 174: uint16(57798), + 175: uint16(57799), + 176: uint16(57800), + 177: uint16(57801), + 178: uint16(57802), + 179: uint16(57803), + 180: uint16(57804), + 181: uint16(57805), + 182: uint16(57806), + 183: uint16(57807), + 184: uint16(57808), + 185: uint16(57809), + 186: uint16(57810), + 187: uint16(57811), + 188: uint16(57812), + 189: uint16(57813), + }, + 46: { + 0: uint16(30088), + 1: uint16(30089), + 2: uint16(30090), + 3: uint16(30092), + 4: uint16(30093), + 5: uint16(30094), + 6: uint16(30096), + 7: uint16(30099), + 8: uint16(30101), + 9: uint16(30104), + 10: uint16(30107), + 11: uint16(30108), + 12: uint16(30110), + 13: uint16(30114), + 14: uint16(30118), + 15: uint16(30119), + 16: uint16(30120), + 17: uint16(30121), + 18: uint16(30122), + 19: uint16(30125), + 20: uint16(30134), + 21: uint16(30135), + 22: uint16(30138), + 23: uint16(30139), + 24: uint16(30143), + 25: uint16(30144), + 26: uint16(30145), + 27: uint16(30150), + 28: uint16(30155), + 29: uint16(30156), + 30: uint16(30158), + 31: uint16(30159), + 32: uint16(30160), + 33: uint16(30161), + 34: uint16(30163), + 35: uint16(30167), + 36: uint16(30169), + 37: uint16(30170), + 38: uint16(30172), + 39: uint16(30173), + 40: uint16(30175), + 41: uint16(30176), + 42: uint16(30177), + 43: uint16(30181), + 44: uint16(30185), + 45: uint16(30188), + 46: uint16(30189), + 47: uint16(30190), + 48: uint16(30191), + 49: uint16(30194), + 50: uint16(30195), + 51: uint16(30197), + 52: uint16(30198), + 53: uint16(30199), + 54: uint16(30200), + 55: uint16(30202), + 56: uint16(30203), + 57: uint16(30205), + 58: uint16(30206), + 59: uint16(30210), + 60: uint16(30212), + 61: uint16(30214), + 62: uint16(30215), + 63: uint16(30216), + 64: uint16(30217), + 65: uint16(30219), + 66: uint16(30221), + 67: uint16(30222), + 68: uint16(30223), + 69: uint16(30225), + 70: uint16(30226), + 71: uint16(30227), + 72: uint16(30228), + 73: uint16(30230), + 74: uint16(30234), + 75: uint16(30236), + 76: uint16(30237), + 77: uint16(30238), + 78: uint16(30241), + 79: uint16(30243), + 80: uint16(30247), + 81: uint16(30248), + 82: uint16(30252), + 83: uint16(30254), + 84: uint16(30255), + 85: uint16(30257), + 86: uint16(30258), + 87: uint16(30262), + 88: uint16(30263), + 89: uint16(30265), + 90: uint16(30266), + 91: uint16(30267), + 92: uint16(30269), + 93: uint16(30273), + 94: uint16(30274), + 95: uint16(30276), + 96: uint16(57814), + 97: uint16(57815), + 98: uint16(57816), + 99: uint16(57817), + 100: uint16(57818), + 101: uint16(57819), + 102: uint16(57820), + 103: uint16(57821), + 104: uint16(57822), + 105: uint16(57823), + 106: uint16(57824), + 107: uint16(57825), + 108: uint16(57826), + 109: uint16(57827), + 110: uint16(57828), + 111: uint16(57829), + 112: uint16(57830), + 113: uint16(57831), + 114: uint16(57832), + 115: uint16(57833), + 116: uint16(57834), + 117: uint16(57835), + 118: uint16(57836), + 119: uint16(57837), + 120: uint16(57838), + 121: uint16(57839), + 122: uint16(57840), + 123: uint16(57841), + 124: uint16(57842), + 125: uint16(57843), + 126: uint16(57844), + 127: uint16(57845), + 128: uint16(57846), + 129: uint16(57847), + 130: uint16(57848), + 131: uint16(57849), + 132: uint16(57850), + 133: uint16(57851), + 134: uint16(57852), + 135: uint16(57853), + 136: uint16(57854), + 137: uint16(57855), + 138: uint16(57856), + 139: uint16(57857), + 140: uint16(57858), + 141: uint16(57859), + 142: uint16(57860), + 143: uint16(57861), + 144: uint16(57862), + 145: uint16(57863), + 146: uint16(57864), + 147: uint16(57865), + 148: uint16(57866), + 149: uint16(57867), + 150: uint16(57868), + 151: uint16(57869), + 152: uint16(57870), + 153: uint16(57871), + 154: uint16(57872), + 155: uint16(57873), + 156: uint16(57874), + 157: uint16(57875), + 158: uint16(57876), + 159: uint16(57877), + 160: uint16(57878), + 161: uint16(57879), + 162: uint16(57880), + 163: uint16(57881), + 164: uint16(57882), + 165: uint16(57883), + 166: uint16(57884), + 167: uint16(57885), + 168: uint16(57886), + 169: uint16(57887), + 170: uint16(57888), + 171: uint16(57889), + 172: uint16(57890), + 173: uint16(57891), + 174: uint16(57892), + 175: uint16(57893), + 176: uint16(57894), + 177: uint16(57895), + 178: uint16(57896), + 179: uint16(57897), + 180: uint16(57898), + 181: uint16(57899), + 182: uint16(57900), + 183: uint16(57901), + 184: uint16(57902), + 185: uint16(57903), + 186: uint16(57904), + 187: uint16(57905), + 188: uint16(57906), + 189: uint16(57907), + }, + 47: { + 0: uint16(30277), + 1: uint16(30278), + 2: uint16(30279), + 3: uint16(30280), + 4: uint16(30281), + 5: uint16(30282), + 6: uint16(30283), + 7: uint16(30286), + 8: uint16(30287), + 9: uint16(30288), + 10: uint16(30289), + 11: uint16(30290), + 12: uint16(30291), + 13: uint16(30293), + 14: uint16(30295), + 15: uint16(30296), + 16: uint16(30297), + 17: uint16(30298), + 18: uint16(30299), + 19: uint16(30301), + 20: uint16(30303), + 21: uint16(30304), + 22: uint16(30305), + 23: uint16(30306), + 24: uint16(30308), + 25: uint16(30309), + 26: uint16(30310), + 27: uint16(30311), + 28: uint16(30312), + 29: uint16(30313), + 30: uint16(30314), + 31: uint16(30316), + 32: uint16(30317), + 33: uint16(30318), + 34: uint16(30320), + 35: uint16(30321), + 36: uint16(30322), + 37: uint16(30323), + 38: uint16(30324), + 39: uint16(30325), + 40: uint16(30326), + 41: uint16(30327), + 42: uint16(30329), + 43: uint16(30330), + 44: uint16(30332), + 45: uint16(30335), + 46: uint16(30336), + 47: uint16(30337), + 48: uint16(30339), + 49: uint16(30341), + 50: uint16(30345), + 51: uint16(30346), + 52: uint16(30348), + 53: uint16(30349), + 54: uint16(30351), + 55: uint16(30352), + 56: uint16(30354), + 57: uint16(30356), + 58: uint16(30357), + 59: uint16(30359), + 60: uint16(30360), + 61: uint16(30362), + 62: uint16(30363), + 63: uint16(30364), + 64: uint16(30365), + 65: uint16(30366), + 66: uint16(30367), + 67: uint16(30368), + 68: uint16(30369), + 69: uint16(30370), + 70: uint16(30371), + 71: uint16(30373), + 72: uint16(30374), + 73: uint16(30375), + 74: uint16(30376), + 75: uint16(30377), + 76: uint16(30378), + 77: uint16(30379), + 78: uint16(30380), + 79: uint16(30381), + 80: uint16(30383), + 81: uint16(30384), + 82: uint16(30387), + 83: uint16(30389), + 84: uint16(30390), + 85: uint16(30391), + 86: uint16(30392), + 87: uint16(30393), + 88: uint16(30394), + 89: uint16(30395), + 90: uint16(30396), + 91: uint16(30397), + 92: uint16(30398), + 93: uint16(30400), + 94: uint16(30401), + 95: uint16(30403), + 96: uint16(21834), + 97: uint16(38463), + 98: uint16(22467), + 99: uint16(25384), + 100: uint16(21710), + 101: uint16(21769), + 102: uint16(21696), + 103: uint16(30353), + 104: uint16(30284), + 105: uint16(34108), + 106: uint16(30702), + 107: uint16(33406), + 108: uint16(30861), + 109: uint16(29233), + 110: uint16(38552), + 111: uint16(38797), + 112: uint16(27688), + 113: uint16(23433), + 114: uint16(20474), + 115: uint16(25353), + 116: uint16(26263), + 117: uint16(23736), + 118: uint16(33018), + 119: uint16(26696), + 120: uint16(32942), + 121: uint16(26114), + 122: uint16(30414), + 123: uint16(20985), + 124: uint16(25942), + 125: uint16(29100), + 126: uint16(32753), + 127: uint16(34948), + 128: uint16(20658), + 129: uint16(22885), + 130: uint16(25034), + 131: uint16(28595), + 132: uint16(33453), + 133: uint16(25420), + 134: uint16(25170), + 135: uint16(21485), + 136: uint16(21543), + 137: uint16(31494), + 138: uint16(20843), + 139: uint16(30116), + 140: uint16(24052), + 141: uint16(25300), + 142: uint16(36299), + 143: uint16(38774), + 144: uint16(25226), + 145: uint16(32793), + 146: uint16(22365), + 147: uint16(38712), + 148: uint16(32610), + 149: uint16(29240), + 150: uint16(30333), + 151: uint16(26575), + 152: uint16(30334), + 153: uint16(25670), + 154: uint16(20336), + 155: uint16(36133), + 156: uint16(25308), + 157: uint16(31255), + 158: uint16(26001), + 159: uint16(29677), + 160: uint16(25644), + 161: uint16(25203), + 162: uint16(33324), + 163: uint16(39041), + 164: uint16(26495), + 165: uint16(29256), + 166: uint16(25198), + 167: uint16(25292), + 168: uint16(20276), + 169: uint16(29923), + 170: uint16(21322), + 171: uint16(21150), + 172: uint16(32458), + 173: uint16(37030), + 174: uint16(24110), + 175: uint16(26758), + 176: uint16(27036), + 177: uint16(33152), + 178: uint16(32465), + 179: uint16(26834), + 180: uint16(30917), + 181: uint16(34444), + 182: uint16(38225), + 183: uint16(20621), + 184: uint16(35876), + 185: uint16(33502), + 186: uint16(32990), + 187: uint16(21253), + 188: uint16(35090), + 189: uint16(21093), + }, + 48: { + 0: uint16(30404), + 1: uint16(30407), + 2: uint16(30409), + 3: uint16(30411), + 4: uint16(30412), + 5: uint16(30419), + 6: uint16(30421), + 7: uint16(30425), + 8: uint16(30426), + 9: uint16(30428), + 10: uint16(30429), + 11: uint16(30430), + 12: uint16(30432), + 13: uint16(30433), + 14: uint16(30434), + 15: uint16(30435), + 16: uint16(30436), + 17: uint16(30438), + 18: uint16(30439), + 19: uint16(30440), + 20: uint16(30441), + 21: uint16(30442), + 22: uint16(30443), + 23: uint16(30444), + 24: uint16(30445), + 25: uint16(30448), + 26: uint16(30451), + 27: uint16(30453), + 28: uint16(30454), + 29: uint16(30455), + 30: uint16(30458), + 31: uint16(30459), + 32: uint16(30461), + 33: uint16(30463), + 34: uint16(30464), + 35: uint16(30466), + 36: uint16(30467), + 37: uint16(30469), + 38: uint16(30470), + 39: uint16(30474), + 40: uint16(30476), + 41: uint16(30478), + 42: uint16(30479), + 43: uint16(30480), + 44: uint16(30481), + 45: uint16(30482), + 46: uint16(30483), + 47: uint16(30484), + 48: uint16(30485), + 49: uint16(30486), + 50: uint16(30487), + 51: uint16(30488), + 52: uint16(30491), + 53: uint16(30492), + 54: uint16(30493), + 55: uint16(30494), + 56: uint16(30497), + 57: uint16(30499), + 58: uint16(30500), + 59: uint16(30501), + 60: uint16(30503), + 61: uint16(30506), + 62: uint16(30507), + 63: uint16(30508), + 64: uint16(30510), + 65: uint16(30512), + 66: uint16(30513), + 67: uint16(30514), + 68: uint16(30515), + 69: uint16(30516), + 70: uint16(30521), + 71: uint16(30523), + 72: uint16(30525), + 73: uint16(30526), + 74: uint16(30527), + 75: uint16(30530), + 76: uint16(30532), + 77: uint16(30533), + 78: uint16(30534), + 79: uint16(30536), + 80: uint16(30537), + 81: uint16(30538), + 82: uint16(30539), + 83: uint16(30540), + 84: uint16(30541), + 85: uint16(30542), + 86: uint16(30543), + 87: uint16(30546), + 88: uint16(30547), + 89: uint16(30548), + 90: uint16(30549), + 91: uint16(30550), + 92: uint16(30551), + 93: uint16(30552), + 94: uint16(30553), + 95: uint16(30556), + 96: uint16(34180), + 97: uint16(38649), + 98: uint16(20445), + 99: uint16(22561), + 100: uint16(39281), + 101: uint16(23453), + 102: uint16(25265), + 103: uint16(25253), + 104: uint16(26292), + 105: uint16(35961), + 106: uint16(40077), + 107: uint16(29190), + 108: uint16(26479), + 109: uint16(30865), + 110: uint16(24754), + 111: uint16(21329), + 112: uint16(21271), + 113: uint16(36744), + 114: uint16(32972), + 115: uint16(36125), + 116: uint16(38049), + 117: uint16(20493), + 118: uint16(29384), + 119: uint16(22791), + 120: uint16(24811), + 121: uint16(28953), + 122: uint16(34987), + 123: uint16(22868), + 124: uint16(33519), + 125: uint16(26412), + 126: uint16(31528), + 127: uint16(23849), + 128: uint16(32503), + 129: uint16(29997), + 130: uint16(27893), + 131: uint16(36454), + 132: uint16(36856), + 133: uint16(36924), + 134: uint16(40763), + 135: uint16(27604), + 136: uint16(37145), + 137: uint16(31508), + 138: uint16(24444), + 139: uint16(30887), + 140: uint16(34006), + 141: uint16(34109), + 142: uint16(27605), + 143: uint16(27609), + 144: uint16(27606), + 145: uint16(24065), + 146: uint16(24199), + 147: uint16(30201), + 148: uint16(38381), + 149: uint16(25949), + 150: uint16(24330), + 151: uint16(24517), + 152: uint16(36767), + 153: uint16(22721), + 154: uint16(33218), + 155: uint16(36991), + 156: uint16(38491), + 157: uint16(38829), + 158: uint16(36793), + 159: uint16(32534), + 160: uint16(36140), + 161: uint16(25153), + 162: uint16(20415), + 163: uint16(21464), + 164: uint16(21342), + 165: uint16(36776), + 166: uint16(36777), + 167: uint16(36779), + 168: uint16(36941), + 169: uint16(26631), + 170: uint16(24426), + 171: uint16(33176), + 172: uint16(34920), + 173: uint16(40150), + 174: uint16(24971), + 175: uint16(21035), + 176: uint16(30250), + 177: uint16(24428), + 178: uint16(25996), + 179: uint16(28626), + 180: uint16(28392), + 181: uint16(23486), + 182: uint16(25672), + 183: uint16(20853), + 184: uint16(20912), + 185: uint16(26564), + 186: uint16(19993), + 187: uint16(31177), + 188: uint16(39292), + 189: uint16(28851), + }, + 49: { + 0: uint16(30557), + 1: uint16(30558), + 2: uint16(30559), + 3: uint16(30560), + 4: uint16(30564), + 5: uint16(30567), + 6: uint16(30569), + 7: uint16(30570), + 8: uint16(30573), + 9: uint16(30574), + 10: uint16(30575), + 11: uint16(30576), + 12: uint16(30577), + 13: uint16(30578), + 14: uint16(30579), + 15: uint16(30580), + 16: uint16(30581), + 17: uint16(30582), + 18: uint16(30583), + 19: uint16(30584), + 20: uint16(30586), + 21: uint16(30587), + 22: uint16(30588), + 23: uint16(30593), + 24: uint16(30594), + 25: uint16(30595), + 26: uint16(30598), + 27: uint16(30599), + 28: uint16(30600), + 29: uint16(30601), + 30: uint16(30602), + 31: uint16(30603), + 32: uint16(30607), + 33: uint16(30608), + 34: uint16(30611), + 35: uint16(30612), + 36: uint16(30613), + 37: uint16(30614), + 38: uint16(30615), + 39: uint16(30616), + 40: uint16(30617), + 41: uint16(30618), + 42: uint16(30619), + 43: uint16(30620), + 44: uint16(30621), + 45: uint16(30622), + 46: uint16(30625), + 47: uint16(30627), + 48: uint16(30628), + 49: uint16(30630), + 50: uint16(30632), + 51: uint16(30635), + 52: uint16(30637), + 53: uint16(30638), + 54: uint16(30639), + 55: uint16(30641), + 56: uint16(30642), + 57: uint16(30644), + 58: uint16(30646), + 59: uint16(30647), + 60: uint16(30648), + 61: uint16(30649), + 62: uint16(30650), + 63: uint16(30652), + 64: uint16(30654), + 65: uint16(30656), + 66: uint16(30657), + 67: uint16(30658), + 68: uint16(30659), + 69: uint16(30660), + 70: uint16(30661), + 71: uint16(30662), + 72: uint16(30663), + 73: uint16(30664), + 74: uint16(30665), + 75: uint16(30666), + 76: uint16(30667), + 77: uint16(30668), + 78: uint16(30670), + 79: uint16(30671), + 80: uint16(30672), + 81: uint16(30673), + 82: uint16(30674), + 83: uint16(30675), + 84: uint16(30676), + 85: uint16(30677), + 86: uint16(30678), + 87: uint16(30680), + 88: uint16(30681), + 89: uint16(30682), + 90: uint16(30685), + 91: uint16(30686), + 92: uint16(30687), + 93: uint16(30688), + 94: uint16(30689), + 95: uint16(30692), + 96: uint16(30149), + 97: uint16(24182), + 98: uint16(29627), + 99: uint16(33760), + 100: uint16(25773), + 101: uint16(25320), + 102: uint16(38069), + 103: uint16(27874), + 104: uint16(21338), + 105: uint16(21187), + 106: uint16(25615), + 107: uint16(38082), + 108: uint16(31636), + 109: uint16(20271), + 110: uint16(24091), + 111: uint16(33334), + 112: uint16(33046), + 113: uint16(33162), + 114: uint16(28196), + 115: uint16(27850), + 116: uint16(39539), + 117: uint16(25429), + 118: uint16(21340), + 119: uint16(21754), + 120: uint16(34917), + 121: uint16(22496), + 122: uint16(19981), + 123: uint16(24067), + 124: uint16(27493), + 125: uint16(31807), + 126: uint16(37096), + 127: uint16(24598), + 128: uint16(25830), + 129: uint16(29468), + 130: uint16(35009), + 131: uint16(26448), + 132: uint16(25165), + 133: uint16(36130), + 134: uint16(30572), + 135: uint16(36393), + 136: uint16(37319), + 137: uint16(24425), + 138: uint16(33756), + 139: uint16(34081), + 140: uint16(39184), + 141: uint16(21442), + 142: uint16(34453), + 143: uint16(27531), + 144: uint16(24813), + 145: uint16(24808), + 146: uint16(28799), + 147: uint16(33485), + 148: uint16(33329), + 149: uint16(20179), + 150: uint16(27815), + 151: uint16(34255), + 152: uint16(25805), + 153: uint16(31961), + 154: uint16(27133), + 155: uint16(26361), + 156: uint16(33609), + 157: uint16(21397), + 158: uint16(31574), + 159: uint16(20391), + 160: uint16(20876), + 161: uint16(27979), + 162: uint16(23618), + 163: uint16(36461), + 164: uint16(25554), + 165: uint16(21449), + 166: uint16(33580), + 167: uint16(33590), + 168: uint16(26597), + 169: uint16(30900), + 170: uint16(25661), + 171: uint16(23519), + 172: uint16(23700), + 173: uint16(24046), + 174: uint16(35815), + 175: uint16(25286), + 176: uint16(26612), + 177: uint16(35962), + 178: uint16(25600), + 179: uint16(25530), + 180: uint16(34633), + 181: uint16(39307), + 182: uint16(35863), + 183: uint16(32544), + 184: uint16(38130), + 185: uint16(20135), + 186: uint16(38416), + 187: uint16(39076), + 188: uint16(26124), + 189: uint16(29462), + }, + 50: { + 0: uint16(30694), + 1: uint16(30696), + 2: uint16(30698), + 3: uint16(30703), + 4: uint16(30704), + 5: uint16(30705), + 6: uint16(30706), + 7: uint16(30708), + 8: uint16(30709), + 9: uint16(30711), + 10: uint16(30713), + 11: uint16(30714), + 12: uint16(30715), + 13: uint16(30716), + 14: uint16(30723), + 15: uint16(30724), + 16: uint16(30725), + 17: uint16(30726), + 18: uint16(30727), + 19: uint16(30728), + 20: uint16(30730), + 21: uint16(30731), + 22: uint16(30734), + 23: uint16(30735), + 24: uint16(30736), + 25: uint16(30739), + 26: uint16(30741), + 27: uint16(30745), + 28: uint16(30747), + 29: uint16(30750), + 30: uint16(30752), + 31: uint16(30753), + 32: uint16(30754), + 33: uint16(30756), + 34: uint16(30760), + 35: uint16(30762), + 36: uint16(30763), + 37: uint16(30766), + 38: uint16(30767), + 39: uint16(30769), + 40: uint16(30770), + 41: uint16(30771), + 42: uint16(30773), + 43: uint16(30774), + 44: uint16(30781), + 45: uint16(30783), + 46: uint16(30785), + 47: uint16(30786), + 48: uint16(30787), + 49: uint16(30788), + 50: uint16(30790), + 51: uint16(30792), + 52: uint16(30793), + 53: uint16(30794), + 54: uint16(30795), + 55: uint16(30797), + 56: uint16(30799), + 57: uint16(30801), + 58: uint16(30803), + 59: uint16(30804), + 60: uint16(30808), + 61: uint16(30809), + 62: uint16(30810), + 63: uint16(30811), + 64: uint16(30812), + 65: uint16(30814), + 66: uint16(30815), + 67: uint16(30816), + 68: uint16(30817), + 69: uint16(30818), + 70: uint16(30819), + 71: uint16(30820), + 72: uint16(30821), + 73: uint16(30822), + 74: uint16(30823), + 75: uint16(30824), + 76: uint16(30825), + 77: uint16(30831), + 78: uint16(30832), + 79: uint16(30833), + 80: uint16(30834), + 81: uint16(30835), + 82: uint16(30836), + 83: uint16(30837), + 84: uint16(30838), + 85: uint16(30840), + 86: uint16(30841), + 87: uint16(30842), + 88: uint16(30843), + 89: uint16(30845), + 90: uint16(30846), + 91: uint16(30847), + 92: uint16(30848), + 93: uint16(30849), + 94: uint16(30850), + 95: uint16(30851), + 96: uint16(22330), + 97: uint16(23581), + 98: uint16(24120), + 99: uint16(38271), + 100: uint16(20607), + 101: uint16(32928), + 102: uint16(21378), + 103: uint16(25950), + 104: uint16(30021), + 105: uint16(21809), + 106: uint16(20513), + 107: uint16(36229), + 108: uint16(25220), + 109: uint16(38046), + 110: uint16(26397), + 111: uint16(22066), + 112: uint16(28526), + 113: uint16(24034), + 114: uint16(21557), + 115: uint16(28818), + 116: uint16(36710), + 117: uint16(25199), + 118: uint16(25764), + 119: uint16(25507), + 120: uint16(24443), + 121: uint16(28552), + 122: uint16(37108), + 123: uint16(33251), + 124: uint16(36784), + 125: uint16(23576), + 126: uint16(26216), + 127: uint16(24561), + 128: uint16(27785), + 129: uint16(38472), + 130: uint16(36225), + 131: uint16(34924), + 132: uint16(25745), + 133: uint16(31216), + 134: uint16(22478), + 135: uint16(27225), + 136: uint16(25104), + 137: uint16(21576), + 138: uint16(20056), + 139: uint16(31243), + 140: uint16(24809), + 141: uint16(28548), + 142: uint16(35802), + 143: uint16(25215), + 144: uint16(36894), + 145: uint16(39563), + 146: uint16(31204), + 147: uint16(21507), + 148: uint16(30196), + 149: uint16(25345), + 150: uint16(21273), + 151: uint16(27744), + 152: uint16(36831), + 153: uint16(24347), + 154: uint16(39536), + 155: uint16(32827), + 156: uint16(40831), + 157: uint16(20360), + 158: uint16(23610), + 159: uint16(36196), + 160: uint16(32709), + 161: uint16(26021), + 162: uint16(28861), + 163: uint16(20805), + 164: uint16(20914), + 165: uint16(34411), + 166: uint16(23815), + 167: uint16(23456), + 168: uint16(25277), + 169: uint16(37228), + 170: uint16(30068), + 171: uint16(36364), + 172: uint16(31264), + 173: uint16(24833), + 174: uint16(31609), + 175: uint16(20167), + 176: uint16(32504), + 177: uint16(30597), + 178: uint16(19985), + 179: uint16(33261), + 180: uint16(21021), + 181: uint16(20986), + 182: uint16(27249), + 183: uint16(21416), + 184: uint16(36487), + 185: uint16(38148), + 186: uint16(38607), + 187: uint16(28353), + 188: uint16(38500), + 189: uint16(26970), + }, + 51: { + 0: uint16(30852), + 1: uint16(30853), + 2: uint16(30854), + 3: uint16(30856), + 4: uint16(30858), + 5: uint16(30859), + 6: uint16(30863), + 7: uint16(30864), + 8: uint16(30866), + 9: uint16(30868), + 10: uint16(30869), + 11: uint16(30870), + 12: uint16(30873), + 13: uint16(30877), + 14: uint16(30878), + 15: uint16(30880), + 16: uint16(30882), + 17: uint16(30884), + 18: uint16(30886), + 19: uint16(30888), + 20: uint16(30889), + 21: uint16(30890), + 22: uint16(30891), + 23: uint16(30892), + 24: uint16(30893), + 25: uint16(30894), + 26: uint16(30895), + 27: uint16(30901), + 28: uint16(30902), + 29: uint16(30903), + 30: uint16(30904), + 31: uint16(30906), + 32: uint16(30907), + 33: uint16(30908), + 34: uint16(30909), + 35: uint16(30911), + 36: uint16(30912), + 37: uint16(30914), + 38: uint16(30915), + 39: uint16(30916), + 40: uint16(30918), + 41: uint16(30919), + 42: uint16(30920), + 43: uint16(30924), + 44: uint16(30925), + 45: uint16(30926), + 46: uint16(30927), + 47: uint16(30929), + 48: uint16(30930), + 49: uint16(30931), + 50: uint16(30934), + 51: uint16(30935), + 52: uint16(30936), + 53: uint16(30938), + 54: uint16(30939), + 55: uint16(30940), + 56: uint16(30941), + 57: uint16(30942), + 58: uint16(30943), + 59: uint16(30944), + 60: uint16(30945), + 61: uint16(30946), + 62: uint16(30947), + 63: uint16(30948), + 64: uint16(30949), + 65: uint16(30950), + 66: uint16(30951), + 67: uint16(30953), + 68: uint16(30954), + 69: uint16(30955), + 70: uint16(30957), + 71: uint16(30958), + 72: uint16(30959), + 73: uint16(30960), + 74: uint16(30961), + 75: uint16(30963), + 76: uint16(30965), + 77: uint16(30966), + 78: uint16(30968), + 79: uint16(30969), + 80: uint16(30971), + 81: uint16(30972), + 82: uint16(30973), + 83: uint16(30974), + 84: uint16(30975), + 85: uint16(30976), + 86: uint16(30978), + 87: uint16(30979), + 88: uint16(30980), + 89: uint16(30982), + 90: uint16(30983), + 91: uint16(30984), + 92: uint16(30985), + 93: uint16(30986), + 94: uint16(30987), + 95: uint16(30988), + 96: uint16(30784), + 97: uint16(20648), + 98: uint16(30679), + 99: uint16(25616), + 100: uint16(35302), + 101: uint16(22788), + 102: uint16(25571), + 103: uint16(24029), + 104: uint16(31359), + 105: uint16(26941), + 106: uint16(20256), + 107: uint16(33337), + 108: uint16(21912), + 109: uint16(20018), + 110: uint16(30126), + 111: uint16(31383), + 112: uint16(24162), + 113: uint16(24202), + 114: uint16(38383), + 115: uint16(21019), + 116: uint16(21561), + 117: uint16(28810), + 118: uint16(25462), + 119: uint16(38180), + 120: uint16(22402), + 121: uint16(26149), + 122: uint16(26943), + 123: uint16(37255), + 124: uint16(21767), + 125: uint16(28147), + 126: uint16(32431), + 127: uint16(34850), + 128: uint16(25139), + 129: uint16(32496), + 130: uint16(30133), + 131: uint16(33576), + 132: uint16(30913), + 133: uint16(38604), + 134: uint16(36766), + 135: uint16(24904), + 136: uint16(29943), + 137: uint16(35789), + 138: uint16(27492), + 139: uint16(21050), + 140: uint16(36176), + 141: uint16(27425), + 142: uint16(32874), + 143: uint16(33905), + 144: uint16(22257), + 145: uint16(21254), + 146: uint16(20174), + 147: uint16(19995), + 148: uint16(20945), + 149: uint16(31895), + 150: uint16(37259), + 151: uint16(31751), + 152: uint16(20419), + 153: uint16(36479), + 154: uint16(31713), + 155: uint16(31388), + 156: uint16(25703), + 157: uint16(23828), + 158: uint16(20652), + 159: uint16(33030), + 160: uint16(30209), + 161: uint16(31929), + 162: uint16(28140), + 163: uint16(32736), + 164: uint16(26449), + 165: uint16(23384), + 166: uint16(23544), + 167: uint16(30923), + 168: uint16(25774), + 169: uint16(25619), + 170: uint16(25514), + 171: uint16(25387), + 172: uint16(38169), + 173: uint16(25645), + 174: uint16(36798), + 175: uint16(31572), + 176: uint16(30249), + 177: uint16(25171), + 178: uint16(22823), + 179: uint16(21574), + 180: uint16(27513), + 181: uint16(20643), + 182: uint16(25140), + 183: uint16(24102), + 184: uint16(27526), + 185: uint16(20195), + 186: uint16(36151), + 187: uint16(34955), + 188: uint16(24453), + 189: uint16(36910), + }, + 52: { + 0: uint16(30989), + 1: uint16(30990), + 2: uint16(30991), + 3: uint16(30992), + 4: uint16(30993), + 5: uint16(30994), + 6: uint16(30996), + 7: uint16(30997), + 8: uint16(30998), + 9: uint16(30999), + 10: uint16(31000), + 11: uint16(31001), + 12: uint16(31002), + 13: uint16(31003), + 14: uint16(31004), + 15: uint16(31005), + 16: uint16(31007), + 17: uint16(31008), + 18: uint16(31009), + 19: uint16(31010), + 20: uint16(31011), + 21: uint16(31013), + 22: uint16(31014), + 23: uint16(31015), + 24: uint16(31016), + 25: uint16(31017), + 26: uint16(31018), + 27: uint16(31019), + 28: uint16(31020), + 29: uint16(31021), + 30: uint16(31022), + 31: uint16(31023), + 32: uint16(31024), + 33: uint16(31025), + 34: uint16(31026), + 35: uint16(31027), + 36: uint16(31029), + 37: uint16(31030), + 38: uint16(31031), + 39: uint16(31032), + 40: uint16(31033), + 41: uint16(31037), + 42: uint16(31039), + 43: uint16(31042), + 44: uint16(31043), + 45: uint16(31044), + 46: uint16(31045), + 47: uint16(31047), + 48: uint16(31050), + 49: uint16(31051), + 50: uint16(31052), + 51: uint16(31053), + 52: uint16(31054), + 53: uint16(31055), + 54: uint16(31056), + 55: uint16(31057), + 56: uint16(31058), + 57: uint16(31060), + 58: uint16(31061), + 59: uint16(31064), + 60: uint16(31065), + 61: uint16(31073), + 62: uint16(31075), + 63: uint16(31076), + 64: uint16(31078), + 65: uint16(31081), + 66: uint16(31082), + 67: uint16(31083), + 68: uint16(31084), + 69: uint16(31086), + 70: uint16(31088), + 71: uint16(31089), + 72: uint16(31090), + 73: uint16(31091), + 74: uint16(31092), + 75: uint16(31093), + 76: uint16(31094), + 77: uint16(31097), + 78: uint16(31099), + 79: uint16(31100), + 80: uint16(31101), + 81: uint16(31102), + 82: uint16(31103), + 83: uint16(31106), + 84: uint16(31107), + 85: uint16(31110), + 86: uint16(31111), + 87: uint16(31112), + 88: uint16(31113), + 89: uint16(31115), + 90: uint16(31116), + 91: uint16(31117), + 92: uint16(31118), + 93: uint16(31120), + 94: uint16(31121), + 95: uint16(31122), + 96: uint16(24608), + 97: uint16(32829), + 98: uint16(25285), + 99: uint16(20025), + 100: uint16(21333), + 101: uint16(37112), + 102: uint16(25528), + 103: uint16(32966), + 104: uint16(26086), + 105: uint16(27694), + 106: uint16(20294), + 107: uint16(24814), + 108: uint16(28129), + 109: uint16(35806), + 110: uint16(24377), + 111: uint16(34507), + 112: uint16(24403), + 113: uint16(25377), + 114: uint16(20826), + 115: uint16(33633), + 116: uint16(26723), + 117: uint16(20992), + 118: uint16(25443), + 119: uint16(36424), + 120: uint16(20498), + 121: uint16(23707), + 122: uint16(31095), + 123: uint16(23548), + 124: uint16(21040), + 125: uint16(31291), + 126: uint16(24764), + 127: uint16(36947), + 128: uint16(30423), + 129: uint16(24503), + 130: uint16(24471), + 131: uint16(30340), + 132: uint16(36460), + 133: uint16(28783), + 134: uint16(30331), + 135: uint16(31561), + 136: uint16(30634), + 137: uint16(20979), + 138: uint16(37011), + 139: uint16(22564), + 140: uint16(20302), + 141: uint16(28404), + 142: uint16(36842), + 143: uint16(25932), + 144: uint16(31515), + 145: uint16(29380), + 146: uint16(28068), + 147: uint16(32735), + 148: uint16(23265), + 149: uint16(25269), + 150: uint16(24213), + 151: uint16(22320), + 152: uint16(33922), + 153: uint16(31532), + 154: uint16(24093), + 155: uint16(24351), + 156: uint16(36882), + 157: uint16(32532), + 158: uint16(39072), + 159: uint16(25474), + 160: uint16(28359), + 161: uint16(30872), + 162: uint16(28857), + 163: uint16(20856), + 164: uint16(38747), + 165: uint16(22443), + 166: uint16(30005), + 167: uint16(20291), + 168: uint16(30008), + 169: uint16(24215), + 170: uint16(24806), + 171: uint16(22880), + 172: uint16(28096), + 173: uint16(27583), + 174: uint16(30857), + 175: uint16(21500), + 176: uint16(38613), + 177: uint16(20939), + 178: uint16(20993), + 179: uint16(25481), + 180: uint16(21514), + 181: uint16(38035), + 182: uint16(35843), + 183: uint16(36300), + 184: uint16(29241), + 185: uint16(30879), + 186: uint16(34678), + 187: uint16(36845), + 188: uint16(35853), + 189: uint16(21472), + }, + 53: { + 0: uint16(31123), + 1: uint16(31124), + 2: uint16(31125), + 3: uint16(31126), + 4: uint16(31127), + 5: uint16(31128), + 6: uint16(31129), + 7: uint16(31131), + 8: uint16(31132), + 9: uint16(31133), + 10: uint16(31134), + 11: uint16(31135), + 12: uint16(31136), + 13: uint16(31137), + 14: uint16(31138), + 15: uint16(31139), + 16: uint16(31140), + 17: uint16(31141), + 18: uint16(31142), + 19: uint16(31144), + 20: uint16(31145), + 21: uint16(31146), + 22: uint16(31147), + 23: uint16(31148), + 24: uint16(31149), + 25: uint16(31150), + 26: uint16(31151), + 27: uint16(31152), + 28: uint16(31153), + 29: uint16(31154), + 30: uint16(31156), + 31: uint16(31157), + 32: uint16(31158), + 33: uint16(31159), + 34: uint16(31160), + 35: uint16(31164), + 36: uint16(31167), + 37: uint16(31170), + 38: uint16(31172), + 39: uint16(31173), + 40: uint16(31175), + 41: uint16(31176), + 42: uint16(31178), + 43: uint16(31180), + 44: uint16(31182), + 45: uint16(31183), + 46: uint16(31184), + 47: uint16(31187), + 48: uint16(31188), + 49: uint16(31190), + 50: uint16(31191), + 51: uint16(31193), + 52: uint16(31194), + 53: uint16(31195), + 54: uint16(31196), + 55: uint16(31197), + 56: uint16(31198), + 57: uint16(31200), + 58: uint16(31201), + 59: uint16(31202), + 60: uint16(31205), + 61: uint16(31208), + 62: uint16(31210), + 63: uint16(31212), + 64: uint16(31214), + 65: uint16(31217), + 66: uint16(31218), + 67: uint16(31219), + 68: uint16(31220), + 69: uint16(31221), + 70: uint16(31222), + 71: uint16(31223), + 72: uint16(31225), + 73: uint16(31226), + 74: uint16(31228), + 75: uint16(31230), + 76: uint16(31231), + 77: uint16(31233), + 78: uint16(31236), + 79: uint16(31237), + 80: uint16(31239), + 81: uint16(31240), + 82: uint16(31241), + 83: uint16(31242), + 84: uint16(31244), + 85: uint16(31247), + 86: uint16(31248), + 87: uint16(31249), + 88: uint16(31250), + 89: uint16(31251), + 90: uint16(31253), + 91: uint16(31254), + 92: uint16(31256), + 93: uint16(31257), + 94: uint16(31259), + 95: uint16(31260), + 96: uint16(19969), + 97: uint16(30447), + 98: uint16(21486), + 99: uint16(38025), + 100: uint16(39030), + 101: uint16(40718), + 102: uint16(38189), + 103: uint16(23450), + 104: uint16(35746), + 105: uint16(20002), + 106: uint16(19996), + 107: uint16(20908), + 108: uint16(33891), + 109: uint16(25026), + 110: uint16(21160), + 111: uint16(26635), + 112: uint16(20375), + 113: uint16(24683), + 114: uint16(20923), + 115: uint16(27934), + 116: uint16(20828), + 117: uint16(25238), + 118: uint16(26007), + 119: uint16(38497), + 120: uint16(35910), + 121: uint16(36887), + 122: uint16(30168), + 123: uint16(37117), + 124: uint16(30563), + 125: uint16(27602), + 126: uint16(29322), + 127: uint16(29420), + 128: uint16(35835), + 129: uint16(22581), + 130: uint16(30585), + 131: uint16(36172), + 132: uint16(26460), + 133: uint16(38208), + 134: uint16(32922), + 135: uint16(24230), + 136: uint16(28193), + 137: uint16(22930), + 138: uint16(31471), + 139: uint16(30701), + 140: uint16(38203), + 141: uint16(27573), + 142: uint16(26029), + 143: uint16(32526), + 144: uint16(22534), + 145: uint16(20817), + 146: uint16(38431), + 147: uint16(23545), + 148: uint16(22697), + 149: uint16(21544), + 150: uint16(36466), + 151: uint16(25958), + 152: uint16(39039), + 153: uint16(22244), + 154: uint16(38045), + 155: uint16(30462), + 156: uint16(36929), + 157: uint16(25479), + 158: uint16(21702), + 159: uint16(22810), + 160: uint16(22842), + 161: uint16(22427), + 162: uint16(36530), + 163: uint16(26421), + 164: uint16(36346), + 165: uint16(33333), + 166: uint16(21057), + 167: uint16(24816), + 168: uint16(22549), + 169: uint16(34558), + 170: uint16(23784), + 171: uint16(40517), + 172: uint16(20420), + 173: uint16(39069), + 174: uint16(35769), + 175: uint16(23077), + 176: uint16(24694), + 177: uint16(21380), + 178: uint16(25212), + 179: uint16(36943), + 180: uint16(37122), + 181: uint16(39295), + 182: uint16(24681), + 183: uint16(32780), + 184: uint16(20799), + 185: uint16(32819), + 186: uint16(23572), + 187: uint16(39285), + 188: uint16(27953), + 189: uint16(20108), + }, + 54: { + 0: uint16(31261), + 1: uint16(31263), + 2: uint16(31265), + 3: uint16(31266), + 4: uint16(31268), + 5: uint16(31269), + 6: uint16(31270), + 7: uint16(31271), + 8: uint16(31272), + 9: uint16(31273), + 10: uint16(31274), + 11: uint16(31275), + 12: uint16(31276), + 13: uint16(31277), + 14: uint16(31278), + 15: uint16(31279), + 16: uint16(31280), + 17: uint16(31281), + 18: uint16(31282), + 19: uint16(31284), + 20: uint16(31285), + 21: uint16(31286), + 22: uint16(31288), + 23: uint16(31290), + 24: uint16(31294), + 25: uint16(31296), + 26: uint16(31297), + 27: uint16(31298), + 28: uint16(31299), + 29: uint16(31300), + 30: uint16(31301), + 31: uint16(31303), + 32: uint16(31304), + 33: uint16(31305), + 34: uint16(31306), + 35: uint16(31307), + 36: uint16(31308), + 37: uint16(31309), + 38: uint16(31310), + 39: uint16(31311), + 40: uint16(31312), + 41: uint16(31314), + 42: uint16(31315), + 43: uint16(31316), + 44: uint16(31317), + 45: uint16(31318), + 46: uint16(31320), + 47: uint16(31321), + 48: uint16(31322), + 49: uint16(31323), + 50: uint16(31324), + 51: uint16(31325), + 52: uint16(31326), + 53: uint16(31327), + 54: uint16(31328), + 55: uint16(31329), + 56: uint16(31330), + 57: uint16(31331), + 58: uint16(31332), + 59: uint16(31333), + 60: uint16(31334), + 61: uint16(31335), + 62: uint16(31336), + 63: uint16(31337), + 64: uint16(31338), + 65: uint16(31339), + 66: uint16(31340), + 67: uint16(31341), + 68: uint16(31342), + 69: uint16(31343), + 70: uint16(31345), + 71: uint16(31346), + 72: uint16(31347), + 73: uint16(31349), + 74: uint16(31355), + 75: uint16(31356), + 76: uint16(31357), + 77: uint16(31358), + 78: uint16(31362), + 79: uint16(31365), + 80: uint16(31367), + 81: uint16(31369), + 82: uint16(31370), + 83: uint16(31371), + 84: uint16(31372), + 85: uint16(31374), + 86: uint16(31375), + 87: uint16(31376), + 88: uint16(31379), + 89: uint16(31380), + 90: uint16(31385), + 91: uint16(31386), + 92: uint16(31387), + 93: uint16(31390), + 94: uint16(31393), + 95: uint16(31394), + 96: uint16(36144), + 97: uint16(21457), + 98: uint16(32602), + 99: uint16(31567), + 100: uint16(20240), + 101: uint16(20047), + 102: uint16(38400), + 103: uint16(27861), + 104: uint16(29648), + 105: uint16(34281), + 106: uint16(24070), + 107: uint16(30058), + 108: uint16(32763), + 109: uint16(27146), + 110: uint16(30718), + 111: uint16(38034), + 112: uint16(32321), + 113: uint16(20961), + 114: uint16(28902), + 115: uint16(21453), + 116: uint16(36820), + 117: uint16(33539), + 118: uint16(36137), + 119: uint16(29359), + 120: uint16(39277), + 121: uint16(27867), + 122: uint16(22346), + 123: uint16(33459), + 124: uint16(26041), + 125: uint16(32938), + 126: uint16(25151), + 127: uint16(38450), + 128: uint16(22952), + 129: uint16(20223), + 130: uint16(35775), + 131: uint16(32442), + 132: uint16(25918), + 133: uint16(33778), + 134: uint16(38750), + 135: uint16(21857), + 136: uint16(39134), + 137: uint16(32933), + 138: uint16(21290), + 139: uint16(35837), + 140: uint16(21536), + 141: uint16(32954), + 142: uint16(24223), + 143: uint16(27832), + 144: uint16(36153), + 145: uint16(33452), + 146: uint16(37210), + 147: uint16(21545), + 148: uint16(27675), + 149: uint16(20998), + 150: uint16(32439), + 151: uint16(22367), + 152: uint16(28954), + 153: uint16(27774), + 154: uint16(31881), + 155: uint16(22859), + 156: uint16(20221), + 157: uint16(24575), + 158: uint16(24868), + 159: uint16(31914), + 160: uint16(20016), + 161: uint16(23553), + 162: uint16(26539), + 163: uint16(34562), + 164: uint16(23792), + 165: uint16(38155), + 166: uint16(39118), + 167: uint16(30127), + 168: uint16(28925), + 169: uint16(36898), + 170: uint16(20911), + 171: uint16(32541), + 172: uint16(35773), + 173: uint16(22857), + 174: uint16(20964), + 175: uint16(20315), + 176: uint16(21542), + 177: uint16(22827), + 178: uint16(25975), + 179: uint16(32932), + 180: uint16(23413), + 181: uint16(25206), + 182: uint16(25282), + 183: uint16(36752), + 184: uint16(24133), + 185: uint16(27679), + 186: uint16(31526), + 187: uint16(20239), + 188: uint16(20440), + 189: uint16(26381), + }, + 55: { + 0: uint16(31395), + 1: uint16(31396), + 2: uint16(31399), + 3: uint16(31401), + 4: uint16(31402), + 5: uint16(31403), + 6: uint16(31406), + 7: uint16(31407), + 8: uint16(31408), + 9: uint16(31409), + 10: uint16(31410), + 11: uint16(31412), + 12: uint16(31413), + 13: uint16(31414), + 14: uint16(31415), + 15: uint16(31416), + 16: uint16(31417), + 17: uint16(31418), + 18: uint16(31419), + 19: uint16(31420), + 20: uint16(31421), + 21: uint16(31422), + 22: uint16(31424), + 23: uint16(31425), + 24: uint16(31426), + 25: uint16(31427), + 26: uint16(31428), + 27: uint16(31429), + 28: uint16(31430), + 29: uint16(31431), + 30: uint16(31432), + 31: uint16(31433), + 32: uint16(31434), + 33: uint16(31436), + 34: uint16(31437), + 35: uint16(31438), + 36: uint16(31439), + 37: uint16(31440), + 38: uint16(31441), + 39: uint16(31442), + 40: uint16(31443), + 41: uint16(31444), + 42: uint16(31445), + 43: uint16(31447), + 44: uint16(31448), + 45: uint16(31450), + 46: uint16(31451), + 47: uint16(31452), + 48: uint16(31453), + 49: uint16(31457), + 50: uint16(31458), + 51: uint16(31460), + 52: uint16(31463), + 53: uint16(31464), + 54: uint16(31465), + 55: uint16(31466), + 56: uint16(31467), + 57: uint16(31468), + 58: uint16(31470), + 59: uint16(31472), + 60: uint16(31473), + 61: uint16(31474), + 62: uint16(31475), + 63: uint16(31476), + 64: uint16(31477), + 65: uint16(31478), + 66: uint16(31479), + 67: uint16(31480), + 68: uint16(31483), + 69: uint16(31484), + 70: uint16(31486), + 71: uint16(31488), + 72: uint16(31489), + 73: uint16(31490), + 74: uint16(31493), + 75: uint16(31495), + 76: uint16(31497), + 77: uint16(31500), + 78: uint16(31501), + 79: uint16(31502), + 80: uint16(31504), + 81: uint16(31506), + 82: uint16(31507), + 83: uint16(31510), + 84: uint16(31511), + 85: uint16(31512), + 86: uint16(31514), + 87: uint16(31516), + 88: uint16(31517), + 89: uint16(31519), + 90: uint16(31521), + 91: uint16(31522), + 92: uint16(31523), + 93: uint16(31527), + 94: uint16(31529), + 95: uint16(31533), + 96: uint16(28014), + 97: uint16(28074), + 98: uint16(31119), + 99: uint16(34993), + 100: uint16(24343), + 101: uint16(29995), + 102: uint16(25242), + 103: uint16(36741), + 104: uint16(20463), + 105: uint16(37340), + 106: uint16(26023), + 107: uint16(33071), + 108: uint16(33105), + 109: uint16(24220), + 110: uint16(33104), + 111: uint16(36212), + 112: uint16(21103), + 113: uint16(35206), + 114: uint16(36171), + 115: uint16(22797), + 116: uint16(20613), + 117: uint16(20184), + 118: uint16(38428), + 119: uint16(29238), + 120: uint16(33145), + 121: uint16(36127), + 122: uint16(23500), + 123: uint16(35747), + 124: uint16(38468), + 125: uint16(22919), + 126: uint16(32538), + 127: uint16(21648), + 128: uint16(22134), + 129: uint16(22030), + 130: uint16(35813), + 131: uint16(25913), + 132: uint16(27010), + 133: uint16(38041), + 134: uint16(30422), + 135: uint16(28297), + 136: uint16(24178), + 137: uint16(29976), + 138: uint16(26438), + 139: uint16(26577), + 140: uint16(31487), + 141: uint16(32925), + 142: uint16(36214), + 143: uint16(24863), + 144: uint16(31174), + 145: uint16(25954), + 146: uint16(36195), + 147: uint16(20872), + 148: uint16(21018), + 149: uint16(38050), + 150: uint16(32568), + 151: uint16(32923), + 152: uint16(32434), + 153: uint16(23703), + 154: uint16(28207), + 155: uint16(26464), + 156: uint16(31705), + 157: uint16(30347), + 158: uint16(39640), + 159: uint16(33167), + 160: uint16(32660), + 161: uint16(31957), + 162: uint16(25630), + 163: uint16(38224), + 164: uint16(31295), + 165: uint16(21578), + 166: uint16(21733), + 167: uint16(27468), + 168: uint16(25601), + 169: uint16(25096), + 170: uint16(40509), + 171: uint16(33011), + 172: uint16(30105), + 173: uint16(21106), + 174: uint16(38761), + 175: uint16(33883), + 176: uint16(26684), + 177: uint16(34532), + 178: uint16(38401), + 179: uint16(38548), + 180: uint16(38124), + 181: uint16(20010), + 182: uint16(21508), + 183: uint16(32473), + 184: uint16(26681), + 185: uint16(36319), + 186: uint16(32789), + 187: uint16(26356), + 188: uint16(24218), + 189: uint16(32697), + }, + 56: { + 0: uint16(31535), + 1: uint16(31536), + 2: uint16(31538), + 3: uint16(31540), + 4: uint16(31541), + 5: uint16(31542), + 6: uint16(31543), + 7: uint16(31545), + 8: uint16(31547), + 9: uint16(31549), + 10: uint16(31551), + 11: uint16(31552), + 12: uint16(31553), + 13: uint16(31554), + 14: uint16(31555), + 15: uint16(31556), + 16: uint16(31558), + 17: uint16(31560), + 18: uint16(31562), + 19: uint16(31565), + 20: uint16(31566), + 21: uint16(31571), + 22: uint16(31573), + 23: uint16(31575), + 24: uint16(31577), + 25: uint16(31580), + 26: uint16(31582), + 27: uint16(31583), + 28: uint16(31585), + 29: uint16(31587), + 30: uint16(31588), + 31: uint16(31589), + 32: uint16(31590), + 33: uint16(31591), + 34: uint16(31592), + 35: uint16(31593), + 36: uint16(31594), + 37: uint16(31595), + 38: uint16(31596), + 39: uint16(31597), + 40: uint16(31599), + 41: uint16(31600), + 42: uint16(31603), + 43: uint16(31604), + 44: uint16(31606), + 45: uint16(31608), + 46: uint16(31610), + 47: uint16(31612), + 48: uint16(31613), + 49: uint16(31615), + 50: uint16(31617), + 51: uint16(31618), + 52: uint16(31619), + 53: uint16(31620), + 54: uint16(31622), + 55: uint16(31623), + 56: uint16(31624), + 57: uint16(31625), + 58: uint16(31626), + 59: uint16(31627), + 60: uint16(31628), + 61: uint16(31630), + 62: uint16(31631), + 63: uint16(31633), + 64: uint16(31634), + 65: uint16(31635), + 66: uint16(31638), + 67: uint16(31640), + 68: uint16(31641), + 69: uint16(31642), + 70: uint16(31643), + 71: uint16(31646), + 72: uint16(31647), + 73: uint16(31648), + 74: uint16(31651), + 75: uint16(31652), + 76: uint16(31653), + 77: uint16(31662), + 78: uint16(31663), + 79: uint16(31664), + 80: uint16(31666), + 81: uint16(31667), + 82: uint16(31669), + 83: uint16(31670), + 84: uint16(31671), + 85: uint16(31673), + 86: uint16(31674), + 87: uint16(31675), + 88: uint16(31676), + 89: uint16(31677), + 90: uint16(31678), + 91: uint16(31679), + 92: uint16(31680), + 93: uint16(31682), + 94: uint16(31683), + 95: uint16(31684), + 96: uint16(22466), + 97: uint16(32831), + 98: uint16(26775), + 99: uint16(24037), + 100: uint16(25915), + 101: uint16(21151), + 102: uint16(24685), + 103: uint16(40858), + 104: uint16(20379), + 105: uint16(36524), + 106: uint16(20844), + 107: uint16(23467), + 108: uint16(24339), + 109: uint16(24041), + 110: uint16(27742), + 111: uint16(25329), + 112: uint16(36129), + 113: uint16(20849), + 114: uint16(38057), + 115: uint16(21246), + 116: uint16(27807), + 117: uint16(33503), + 118: uint16(29399), + 119: uint16(22434), + 120: uint16(26500), + 121: uint16(36141), + 122: uint16(22815), + 123: uint16(36764), + 124: uint16(33735), + 125: uint16(21653), + 126: uint16(31629), + 127: uint16(20272), + 128: uint16(27837), + 129: uint16(23396), + 130: uint16(22993), + 131: uint16(40723), + 132: uint16(21476), + 133: uint16(34506), + 134: uint16(39592), + 135: uint16(35895), + 136: uint16(32929), + 137: uint16(25925), + 138: uint16(39038), + 139: uint16(22266), + 140: uint16(38599), + 141: uint16(21038), + 142: uint16(29916), + 143: uint16(21072), + 144: uint16(23521), + 145: uint16(25346), + 146: uint16(35074), + 147: uint16(20054), + 148: uint16(25296), + 149: uint16(24618), + 150: uint16(26874), + 151: uint16(20851), + 152: uint16(23448), + 153: uint16(20896), + 154: uint16(35266), + 155: uint16(31649), + 156: uint16(39302), + 157: uint16(32592), + 158: uint16(24815), + 159: uint16(28748), + 160: uint16(36143), + 161: uint16(20809), + 162: uint16(24191), + 163: uint16(36891), + 164: uint16(29808), + 165: uint16(35268), + 166: uint16(22317), + 167: uint16(30789), + 168: uint16(24402), + 169: uint16(40863), + 170: uint16(38394), + 171: uint16(36712), + 172: uint16(39740), + 173: uint16(35809), + 174: uint16(30328), + 175: uint16(26690), + 176: uint16(26588), + 177: uint16(36330), + 178: uint16(36149), + 179: uint16(21053), + 180: uint16(36746), + 181: uint16(28378), + 182: uint16(26829), + 183: uint16(38149), + 184: uint16(37101), + 185: uint16(22269), + 186: uint16(26524), + 187: uint16(35065), + 188: uint16(36807), + 189: uint16(21704), + }, + 57: { + 0: uint16(31685), + 1: uint16(31688), + 2: uint16(31689), + 3: uint16(31690), + 4: uint16(31691), + 5: uint16(31693), + 6: uint16(31694), + 7: uint16(31695), + 8: uint16(31696), + 9: uint16(31698), + 10: uint16(31700), + 11: uint16(31701), + 12: uint16(31702), + 13: uint16(31703), + 14: uint16(31704), + 15: uint16(31707), + 16: uint16(31708), + 17: uint16(31710), + 18: uint16(31711), + 19: uint16(31712), + 20: uint16(31714), + 21: uint16(31715), + 22: uint16(31716), + 23: uint16(31719), + 24: uint16(31720), + 25: uint16(31721), + 26: uint16(31723), + 27: uint16(31724), + 28: uint16(31725), + 29: uint16(31727), + 30: uint16(31728), + 31: uint16(31730), + 32: uint16(31731), + 33: uint16(31732), + 34: uint16(31733), + 35: uint16(31734), + 36: uint16(31736), + 37: uint16(31737), + 38: uint16(31738), + 39: uint16(31739), + 40: uint16(31741), + 41: uint16(31743), + 42: uint16(31744), + 43: uint16(31745), + 44: uint16(31746), + 45: uint16(31747), + 46: uint16(31748), + 47: uint16(31749), + 48: uint16(31750), + 49: uint16(31752), + 50: uint16(31753), + 51: uint16(31754), + 52: uint16(31757), + 53: uint16(31758), + 54: uint16(31760), + 55: uint16(31761), + 56: uint16(31762), + 57: uint16(31763), + 58: uint16(31764), + 59: uint16(31765), + 60: uint16(31767), + 61: uint16(31768), + 62: uint16(31769), + 63: uint16(31770), + 64: uint16(31771), + 65: uint16(31772), + 66: uint16(31773), + 67: uint16(31774), + 68: uint16(31776), + 69: uint16(31777), + 70: uint16(31778), + 71: uint16(31779), + 72: uint16(31780), + 73: uint16(31781), + 74: uint16(31784), + 75: uint16(31785), + 76: uint16(31787), + 77: uint16(31788), + 78: uint16(31789), + 79: uint16(31790), + 80: uint16(31791), + 81: uint16(31792), + 82: uint16(31793), + 83: uint16(31794), + 84: uint16(31795), + 85: uint16(31796), + 86: uint16(31797), + 87: uint16(31798), + 88: uint16(31799), + 89: uint16(31801), + 90: uint16(31802), + 91: uint16(31803), + 92: uint16(31804), + 93: uint16(31805), + 94: uint16(31806), + 95: uint16(31810), + 96: uint16(39608), + 97: uint16(23401), + 98: uint16(28023), + 99: uint16(27686), + 100: uint16(20133), + 101: uint16(23475), + 102: uint16(39559), + 103: uint16(37219), + 104: uint16(25000), + 105: uint16(37039), + 106: uint16(38889), + 107: uint16(21547), + 108: uint16(28085), + 109: uint16(23506), + 110: uint16(20989), + 111: uint16(21898), + 112: uint16(32597), + 113: uint16(32752), + 114: uint16(25788), + 115: uint16(25421), + 116: uint16(26097), + 117: uint16(25022), + 118: uint16(24717), + 119: uint16(28938), + 120: uint16(27735), + 121: uint16(27721), + 122: uint16(22831), + 123: uint16(26477), + 124: uint16(33322), + 125: uint16(22741), + 126: uint16(22158), + 127: uint16(35946), + 128: uint16(27627), + 129: uint16(37085), + 130: uint16(22909), + 131: uint16(32791), + 132: uint16(21495), + 133: uint16(28009), + 134: uint16(21621), + 135: uint16(21917), + 136: uint16(33655), + 137: uint16(33743), + 138: uint16(26680), + 139: uint16(31166), + 140: uint16(21644), + 141: uint16(20309), + 142: uint16(21512), + 143: uint16(30418), + 144: uint16(35977), + 145: uint16(38402), + 146: uint16(27827), + 147: uint16(28088), + 148: uint16(36203), + 149: uint16(35088), + 150: uint16(40548), + 151: uint16(36154), + 152: uint16(22079), + 153: uint16(40657), + 154: uint16(30165), + 155: uint16(24456), + 156: uint16(29408), + 157: uint16(24680), + 158: uint16(21756), + 159: uint16(20136), + 160: uint16(27178), + 161: uint16(34913), + 162: uint16(24658), + 163: uint16(36720), + 164: uint16(21700), + 165: uint16(28888), + 166: uint16(34425), + 167: uint16(40511), + 168: uint16(27946), + 169: uint16(23439), + 170: uint16(24344), + 171: uint16(32418), + 172: uint16(21897), + 173: uint16(20399), + 174: uint16(29492), + 175: uint16(21564), + 176: uint16(21402), + 177: uint16(20505), + 178: uint16(21518), + 179: uint16(21628), + 180: uint16(20046), + 181: uint16(24573), + 182: uint16(29786), + 183: uint16(22774), + 184: uint16(33899), + 185: uint16(32993), + 186: uint16(34676), + 187: uint16(29392), + 188: uint16(31946), + 189: uint16(28246), + }, + 58: { + 0: uint16(31811), + 1: uint16(31812), + 2: uint16(31813), + 3: uint16(31814), + 4: uint16(31815), + 5: uint16(31816), + 6: uint16(31817), + 7: uint16(31818), + 8: uint16(31819), + 9: uint16(31820), + 10: uint16(31822), + 11: uint16(31823), + 12: uint16(31824), + 13: uint16(31825), + 14: uint16(31826), + 15: uint16(31827), + 16: uint16(31828), + 17: uint16(31829), + 18: uint16(31830), + 19: uint16(31831), + 20: uint16(31832), + 21: uint16(31833), + 22: uint16(31834), + 23: uint16(31835), + 24: uint16(31836), + 25: uint16(31837), + 26: uint16(31838), + 27: uint16(31839), + 28: uint16(31840), + 29: uint16(31841), + 30: uint16(31842), + 31: uint16(31843), + 32: uint16(31844), + 33: uint16(31845), + 34: uint16(31846), + 35: uint16(31847), + 36: uint16(31848), + 37: uint16(31849), + 38: uint16(31850), + 39: uint16(31851), + 40: uint16(31852), + 41: uint16(31853), + 42: uint16(31854), + 43: uint16(31855), + 44: uint16(31856), + 45: uint16(31857), + 46: uint16(31858), + 47: uint16(31861), + 48: uint16(31862), + 49: uint16(31863), + 50: uint16(31864), + 51: uint16(31865), + 52: uint16(31866), + 53: uint16(31870), + 54: uint16(31871), + 55: uint16(31872), + 56: uint16(31873), + 57: uint16(31874), + 58: uint16(31875), + 59: uint16(31876), + 60: uint16(31877), + 61: uint16(31878), + 62: uint16(31879), + 63: uint16(31880), + 64: uint16(31882), + 65: uint16(31883), + 66: uint16(31884), + 67: uint16(31885), + 68: uint16(31886), + 69: uint16(31887), + 70: uint16(31888), + 71: uint16(31891), + 72: uint16(31892), + 73: uint16(31894), + 74: uint16(31897), + 75: uint16(31898), + 76: uint16(31899), + 77: uint16(31904), + 78: uint16(31905), + 79: uint16(31907), + 80: uint16(31910), + 81: uint16(31911), + 82: uint16(31912), + 83: uint16(31913), + 84: uint16(31915), + 85: uint16(31916), + 86: uint16(31917), + 87: uint16(31919), + 88: uint16(31920), + 89: uint16(31924), + 90: uint16(31925), + 91: uint16(31926), + 92: uint16(31927), + 93: uint16(31928), + 94: uint16(31930), + 95: uint16(31931), + 96: uint16(24359), + 97: uint16(34382), + 98: uint16(21804), + 99: uint16(25252), + 100: uint16(20114), + 101: uint16(27818), + 102: uint16(25143), + 103: uint16(33457), + 104: uint16(21719), + 105: uint16(21326), + 106: uint16(29502), + 107: uint16(28369), + 108: uint16(30011), + 109: uint16(21010), + 110: uint16(21270), + 111: uint16(35805), + 112: uint16(27088), + 113: uint16(24458), + 114: uint16(24576), + 115: uint16(28142), + 116: uint16(22351), + 117: uint16(27426), + 118: uint16(29615), + 119: uint16(26707), + 120: uint16(36824), + 121: uint16(32531), + 122: uint16(25442), + 123: uint16(24739), + 124: uint16(21796), + 125: uint16(30186), + 126: uint16(35938), + 127: uint16(28949), + 128: uint16(28067), + 129: uint16(23462), + 130: uint16(24187), + 131: uint16(33618), + 132: uint16(24908), + 133: uint16(40644), + 134: uint16(30970), + 135: uint16(34647), + 136: uint16(31783), + 137: uint16(30343), + 138: uint16(20976), + 139: uint16(24822), + 140: uint16(29004), + 141: uint16(26179), + 142: uint16(24140), + 143: uint16(24653), + 144: uint16(35854), + 145: uint16(28784), + 146: uint16(25381), + 147: uint16(36745), + 148: uint16(24509), + 149: uint16(24674), + 150: uint16(34516), + 151: uint16(22238), + 152: uint16(27585), + 153: uint16(24724), + 154: uint16(24935), + 155: uint16(21321), + 156: uint16(24800), + 157: uint16(26214), + 158: uint16(36159), + 159: uint16(31229), + 160: uint16(20250), + 161: uint16(28905), + 162: uint16(27719), + 163: uint16(35763), + 164: uint16(35826), + 165: uint16(32472), + 166: uint16(33636), + 167: uint16(26127), + 168: uint16(23130), + 169: uint16(39746), + 170: uint16(27985), + 171: uint16(28151), + 172: uint16(35905), + 173: uint16(27963), + 174: uint16(20249), + 175: uint16(28779), + 176: uint16(33719), + 177: uint16(25110), + 178: uint16(24785), + 179: uint16(38669), + 180: uint16(36135), + 181: uint16(31096), + 182: uint16(20987), + 183: uint16(22334), + 184: uint16(22522), + 185: uint16(26426), + 186: uint16(30072), + 187: uint16(31293), + 188: uint16(31215), + 189: uint16(31637), + }, + 59: { + 0: uint16(31935), + 1: uint16(31936), + 2: uint16(31938), + 3: uint16(31939), + 4: uint16(31940), + 5: uint16(31942), + 6: uint16(31945), + 7: uint16(31947), + 8: uint16(31950), + 9: uint16(31951), + 10: uint16(31952), + 11: uint16(31953), + 12: uint16(31954), + 13: uint16(31955), + 14: uint16(31956), + 15: uint16(31960), + 16: uint16(31962), + 17: uint16(31963), + 18: uint16(31965), + 19: uint16(31966), + 20: uint16(31969), + 21: uint16(31970), + 22: uint16(31971), + 23: uint16(31972), + 24: uint16(31973), + 25: uint16(31974), + 26: uint16(31975), + 27: uint16(31977), + 28: uint16(31978), + 29: uint16(31979), + 30: uint16(31980), + 31: uint16(31981), + 32: uint16(31982), + 33: uint16(31984), + 34: uint16(31985), + 35: uint16(31986), + 36: uint16(31987), + 37: uint16(31988), + 38: uint16(31989), + 39: uint16(31990), + 40: uint16(31991), + 41: uint16(31993), + 42: uint16(31994), + 43: uint16(31996), + 44: uint16(31997), + 45: uint16(31998), + 46: uint16(31999), + 47: uint16(32000), + 48: uint16(32001), + 49: uint16(32002), + 50: uint16(32003), + 51: uint16(32004), + 52: uint16(32005), + 53: uint16(32006), + 54: uint16(32007), + 55: uint16(32008), + 56: uint16(32009), + 57: uint16(32011), + 58: uint16(32012), + 59: uint16(32013), + 60: uint16(32014), + 61: uint16(32015), + 62: uint16(32016), + 63: uint16(32017), + 64: uint16(32018), + 65: uint16(32019), + 66: uint16(32020), + 67: uint16(32021), + 68: uint16(32022), + 69: uint16(32023), + 70: uint16(32024), + 71: uint16(32025), + 72: uint16(32026), + 73: uint16(32027), + 74: uint16(32028), + 75: uint16(32029), + 76: uint16(32030), + 77: uint16(32031), + 78: uint16(32033), + 79: uint16(32035), + 80: uint16(32036), + 81: uint16(32037), + 82: uint16(32038), + 83: uint16(32040), + 84: uint16(32041), + 85: uint16(32042), + 86: uint16(32044), + 87: uint16(32045), + 88: uint16(32046), + 89: uint16(32048), + 90: uint16(32049), + 91: uint16(32050), + 92: uint16(32051), + 93: uint16(32052), + 94: uint16(32053), + 95: uint16(32054), + 96: uint16(32908), + 97: uint16(39269), + 98: uint16(36857), + 99: uint16(28608), + 100: uint16(35749), + 101: uint16(40481), + 102: uint16(23020), + 103: uint16(32489), + 104: uint16(32521), + 105: uint16(21513), + 106: uint16(26497), + 107: uint16(26840), + 108: uint16(36753), + 109: uint16(31821), + 110: uint16(38598), + 111: uint16(21450), + 112: uint16(24613), + 113: uint16(30142), + 114: uint16(27762), + 115: uint16(21363), + 116: uint16(23241), + 117: uint16(32423), + 118: uint16(25380), + 119: uint16(20960), + 120: uint16(33034), + 121: uint16(24049), + 122: uint16(34015), + 123: uint16(25216), + 124: uint16(20864), + 125: uint16(23395), + 126: uint16(20238), + 127: uint16(31085), + 128: uint16(21058), + 129: uint16(24760), + 130: uint16(27982), + 131: uint16(23492), + 132: uint16(23490), + 133: uint16(35745), + 134: uint16(35760), + 135: uint16(26082), + 136: uint16(24524), + 137: uint16(38469), + 138: uint16(22931), + 139: uint16(32487), + 140: uint16(32426), + 141: uint16(22025), + 142: uint16(26551), + 143: uint16(22841), + 144: uint16(20339), + 145: uint16(23478), + 146: uint16(21152), + 147: uint16(33626), + 148: uint16(39050), + 149: uint16(36158), + 150: uint16(30002), + 151: uint16(38078), + 152: uint16(20551), + 153: uint16(31292), + 154: uint16(20215), + 155: uint16(26550), + 156: uint16(39550), + 157: uint16(23233), + 158: uint16(27516), + 159: uint16(30417), + 160: uint16(22362), + 161: uint16(23574), + 162: uint16(31546), + 163: uint16(38388), + 164: uint16(29006), + 165: uint16(20860), + 166: uint16(32937), + 167: uint16(33392), + 168: uint16(22904), + 169: uint16(32516), + 170: uint16(33575), + 171: uint16(26816), + 172: uint16(26604), + 173: uint16(30897), + 174: uint16(30839), + 175: uint16(25315), + 176: uint16(25441), + 177: uint16(31616), + 178: uint16(20461), + 179: uint16(21098), + 180: uint16(20943), + 181: uint16(33616), + 182: uint16(27099), + 183: uint16(37492), + 184: uint16(36341), + 185: uint16(36145), + 186: uint16(35265), + 187: uint16(38190), + 188: uint16(31661), + 189: uint16(20214), + }, + 60: { + 0: uint16(32055), + 1: uint16(32056), + 2: uint16(32057), + 3: uint16(32058), + 4: uint16(32059), + 5: uint16(32060), + 6: uint16(32061), + 7: uint16(32062), + 8: uint16(32063), + 9: uint16(32064), + 10: uint16(32065), + 11: uint16(32066), + 12: uint16(32067), + 13: uint16(32068), + 14: uint16(32069), + 15: uint16(32070), + 16: uint16(32071), + 17: uint16(32072), + 18: uint16(32073), + 19: uint16(32074), + 20: uint16(32075), + 21: uint16(32076), + 22: uint16(32077), + 23: uint16(32078), + 24: uint16(32079), + 25: uint16(32080), + 26: uint16(32081), + 27: uint16(32082), + 28: uint16(32083), + 29: uint16(32084), + 30: uint16(32085), + 31: uint16(32086), + 32: uint16(32087), + 33: uint16(32088), + 34: uint16(32089), + 35: uint16(32090), + 36: uint16(32091), + 37: uint16(32092), + 38: uint16(32093), + 39: uint16(32094), + 40: uint16(32095), + 41: uint16(32096), + 42: uint16(32097), + 43: uint16(32098), + 44: uint16(32099), + 45: uint16(32100), + 46: uint16(32101), + 47: uint16(32102), + 48: uint16(32103), + 49: uint16(32104), + 50: uint16(32105), + 51: uint16(32106), + 52: uint16(32107), + 53: uint16(32108), + 54: uint16(32109), + 55: uint16(32111), + 56: uint16(32112), + 57: uint16(32113), + 58: uint16(32114), + 59: uint16(32115), + 60: uint16(32116), + 61: uint16(32117), + 62: uint16(32118), + 63: uint16(32120), + 64: uint16(32121), + 65: uint16(32122), + 66: uint16(32123), + 67: uint16(32124), + 68: uint16(32125), + 69: uint16(32126), + 70: uint16(32127), + 71: uint16(32128), + 72: uint16(32129), + 73: uint16(32130), + 74: uint16(32131), + 75: uint16(32132), + 76: uint16(32133), + 77: uint16(32134), + 78: uint16(32135), + 79: uint16(32136), + 80: uint16(32137), + 81: uint16(32138), + 82: uint16(32139), + 83: uint16(32140), + 84: uint16(32141), + 85: uint16(32142), + 86: uint16(32143), + 87: uint16(32144), + 88: uint16(32145), + 89: uint16(32146), + 90: uint16(32147), + 91: uint16(32148), + 92: uint16(32149), + 93: uint16(32150), + 94: uint16(32151), + 95: uint16(32152), + 96: uint16(20581), + 97: uint16(33328), + 98: uint16(21073), + 99: uint16(39279), + 100: uint16(28176), + 101: uint16(28293), + 102: uint16(28071), + 103: uint16(24314), + 104: uint16(20725), + 105: uint16(23004), + 106: uint16(23558), + 107: uint16(27974), + 108: uint16(27743), + 109: uint16(30086), + 110: uint16(33931), + 111: uint16(26728), + 112: uint16(22870), + 113: uint16(35762), + 114: uint16(21280), + 115: uint16(37233), + 116: uint16(38477), + 117: uint16(34121), + 118: uint16(26898), + 119: uint16(30977), + 120: uint16(28966), + 121: uint16(33014), + 122: uint16(20132), + 123: uint16(37066), + 124: uint16(27975), + 125: uint16(39556), + 126: uint16(23047), + 127: uint16(22204), + 128: uint16(25605), + 129: uint16(38128), + 130: uint16(30699), + 131: uint16(20389), + 132: uint16(33050), + 133: uint16(29409), + 134: uint16(35282), + 135: uint16(39290), + 136: uint16(32564), + 137: uint16(32478), + 138: uint16(21119), + 139: uint16(25945), + 140: uint16(37237), + 141: uint16(36735), + 142: uint16(36739), + 143: uint16(21483), + 144: uint16(31382), + 145: uint16(25581), + 146: uint16(25509), + 147: uint16(30342), + 148: uint16(31224), + 149: uint16(34903), + 150: uint16(38454), + 151: uint16(25130), + 152: uint16(21163), + 153: uint16(33410), + 154: uint16(26708), + 155: uint16(26480), + 156: uint16(25463), + 157: uint16(30571), + 158: uint16(31469), + 159: uint16(27905), + 160: uint16(32467), + 161: uint16(35299), + 162: uint16(22992), + 163: uint16(25106), + 164: uint16(34249), + 165: uint16(33445), + 166: uint16(30028), + 167: uint16(20511), + 168: uint16(20171), + 169: uint16(30117), + 170: uint16(35819), + 171: uint16(23626), + 172: uint16(24062), + 173: uint16(31563), + 174: uint16(26020), + 175: uint16(37329), + 176: uint16(20170), + 177: uint16(27941), + 178: uint16(35167), + 179: uint16(32039), + 180: uint16(38182), + 181: uint16(20165), + 182: uint16(35880), + 183: uint16(36827), + 184: uint16(38771), + 185: uint16(26187), + 186: uint16(31105), + 187: uint16(36817), + 188: uint16(28908), + 189: uint16(28024), + }, + 61: { + 0: uint16(32153), + 1: uint16(32154), + 2: uint16(32155), + 3: uint16(32156), + 4: uint16(32157), + 5: uint16(32158), + 6: uint16(32159), + 7: uint16(32160), + 8: uint16(32161), + 9: uint16(32162), + 10: uint16(32163), + 11: uint16(32164), + 12: uint16(32165), + 13: uint16(32167), + 14: uint16(32168), + 15: uint16(32169), + 16: uint16(32170), + 17: uint16(32171), + 18: uint16(32172), + 19: uint16(32173), + 20: uint16(32175), + 21: uint16(32176), + 22: uint16(32177), + 23: uint16(32178), + 24: uint16(32179), + 25: uint16(32180), + 26: uint16(32181), + 27: uint16(32182), + 28: uint16(32183), + 29: uint16(32184), + 30: uint16(32185), + 31: uint16(32186), + 32: uint16(32187), + 33: uint16(32188), + 34: uint16(32189), + 35: uint16(32190), + 36: uint16(32191), + 37: uint16(32192), + 38: uint16(32193), + 39: uint16(32194), + 40: uint16(32195), + 41: uint16(32196), + 42: uint16(32197), + 43: uint16(32198), + 44: uint16(32199), + 45: uint16(32200), + 46: uint16(32201), + 47: uint16(32202), + 48: uint16(32203), + 49: uint16(32204), + 50: uint16(32205), + 51: uint16(32206), + 52: uint16(32207), + 53: uint16(32208), + 54: uint16(32209), + 55: uint16(32210), + 56: uint16(32211), + 57: uint16(32212), + 58: uint16(32213), + 59: uint16(32214), + 60: uint16(32215), + 61: uint16(32216), + 62: uint16(32217), + 63: uint16(32218), + 64: uint16(32219), + 65: uint16(32220), + 66: uint16(32221), + 67: uint16(32222), + 68: uint16(32223), + 69: uint16(32224), + 70: uint16(32225), + 71: uint16(32226), + 72: uint16(32227), + 73: uint16(32228), + 74: uint16(32229), + 75: uint16(32230), + 76: uint16(32231), + 77: uint16(32232), + 78: uint16(32233), + 79: uint16(32234), + 80: uint16(32235), + 81: uint16(32236), + 82: uint16(32237), + 83: uint16(32238), + 84: uint16(32239), + 85: uint16(32240), + 86: uint16(32241), + 87: uint16(32242), + 88: uint16(32243), + 89: uint16(32244), + 90: uint16(32245), + 91: uint16(32246), + 92: uint16(32247), + 93: uint16(32248), + 94: uint16(32249), + 95: uint16(32250), + 96: uint16(23613), + 97: uint16(21170), + 98: uint16(33606), + 99: uint16(20834), + 100: uint16(33550), + 101: uint16(30555), + 102: uint16(26230), + 103: uint16(40120), + 104: uint16(20140), + 105: uint16(24778), + 106: uint16(31934), + 107: uint16(31923), + 108: uint16(32463), + 109: uint16(20117), + 110: uint16(35686), + 111: uint16(26223), + 112: uint16(39048), + 113: uint16(38745), + 114: uint16(22659), + 115: uint16(25964), + 116: uint16(38236), + 117: uint16(24452), + 118: uint16(30153), + 119: uint16(38742), + 120: uint16(31455), + 121: uint16(31454), + 122: uint16(20928), + 123: uint16(28847), + 124: uint16(31384), + 125: uint16(25578), + 126: uint16(31350), + 127: uint16(32416), + 128: uint16(29590), + 129: uint16(38893), + 130: uint16(20037), + 131: uint16(28792), + 132: uint16(20061), + 133: uint16(37202), + 134: uint16(21417), + 135: uint16(25937), + 136: uint16(26087), + 137: uint16(33276), + 138: uint16(33285), + 139: uint16(21646), + 140: uint16(23601), + 141: uint16(30106), + 142: uint16(38816), + 143: uint16(25304), + 144: uint16(29401), + 145: uint16(30141), + 146: uint16(23621), + 147: uint16(39545), + 148: uint16(33738), + 149: uint16(23616), + 150: uint16(21632), + 151: uint16(30697), + 152: uint16(20030), + 153: uint16(27822), + 154: uint16(32858), + 155: uint16(25298), + 156: uint16(25454), + 157: uint16(24040), + 158: uint16(20855), + 159: uint16(36317), + 160: uint16(36382), + 161: uint16(38191), + 162: uint16(20465), + 163: uint16(21477), + 164: uint16(24807), + 165: uint16(28844), + 166: uint16(21095), + 167: uint16(25424), + 168: uint16(40515), + 169: uint16(23071), + 170: uint16(20518), + 171: uint16(30519), + 172: uint16(21367), + 173: uint16(32482), + 174: uint16(25733), + 175: uint16(25899), + 176: uint16(25225), + 177: uint16(25496), + 178: uint16(20500), + 179: uint16(29237), + 180: uint16(35273), + 181: uint16(20915), + 182: uint16(35776), + 183: uint16(32477), + 184: uint16(22343), + 185: uint16(33740), + 186: uint16(38055), + 187: uint16(20891), + 188: uint16(21531), + 189: uint16(23803), + }, + 62: { + 0: uint16(32251), + 1: uint16(32252), + 2: uint16(32253), + 3: uint16(32254), + 4: uint16(32255), + 5: uint16(32256), + 6: uint16(32257), + 7: uint16(32258), + 8: uint16(32259), + 9: uint16(32260), + 10: uint16(32261), + 11: uint16(32262), + 12: uint16(32263), + 13: uint16(32264), + 14: uint16(32265), + 15: uint16(32266), + 16: uint16(32267), + 17: uint16(32268), + 18: uint16(32269), + 19: uint16(32270), + 20: uint16(32271), + 21: uint16(32272), + 22: uint16(32273), + 23: uint16(32274), + 24: uint16(32275), + 25: uint16(32276), + 26: uint16(32277), + 27: uint16(32278), + 28: uint16(32279), + 29: uint16(32280), + 30: uint16(32281), + 31: uint16(32282), + 32: uint16(32283), + 33: uint16(32284), + 34: uint16(32285), + 35: uint16(32286), + 36: uint16(32287), + 37: uint16(32288), + 38: uint16(32289), + 39: uint16(32290), + 40: uint16(32291), + 41: uint16(32292), + 42: uint16(32293), + 43: uint16(32294), + 44: uint16(32295), + 45: uint16(32296), + 46: uint16(32297), + 47: uint16(32298), + 48: uint16(32299), + 49: uint16(32300), + 50: uint16(32301), + 51: uint16(32302), + 52: uint16(32303), + 53: uint16(32304), + 54: uint16(32305), + 55: uint16(32306), + 56: uint16(32307), + 57: uint16(32308), + 58: uint16(32309), + 59: uint16(32310), + 60: uint16(32311), + 61: uint16(32312), + 62: uint16(32313), + 63: uint16(32314), + 64: uint16(32316), + 65: uint16(32317), + 66: uint16(32318), + 67: uint16(32319), + 68: uint16(32320), + 69: uint16(32322), + 70: uint16(32323), + 71: uint16(32324), + 72: uint16(32325), + 73: uint16(32326), + 74: uint16(32328), + 75: uint16(32329), + 76: uint16(32330), + 77: uint16(32331), + 78: uint16(32332), + 79: uint16(32333), + 80: uint16(32334), + 81: uint16(32335), + 82: uint16(32336), + 83: uint16(32337), + 84: uint16(32338), + 85: uint16(32339), + 86: uint16(32340), + 87: uint16(32341), + 88: uint16(32342), + 89: uint16(32343), + 90: uint16(32344), + 91: uint16(32345), + 92: uint16(32346), + 93: uint16(32347), + 94: uint16(32348), + 95: uint16(32349), + 96: uint16(20426), + 97: uint16(31459), + 98: uint16(27994), + 99: uint16(37089), + 100: uint16(39567), + 101: uint16(21888), + 102: uint16(21654), + 103: uint16(21345), + 104: uint16(21679), + 105: uint16(24320), + 106: uint16(25577), + 107: uint16(26999), + 108: uint16(20975), + 109: uint16(24936), + 110: uint16(21002), + 111: uint16(22570), + 112: uint16(21208), + 113: uint16(22350), + 114: uint16(30733), + 115: uint16(30475), + 116: uint16(24247), + 117: uint16(24951), + 118: uint16(31968), + 119: uint16(25179), + 120: uint16(25239), + 121: uint16(20130), + 122: uint16(28821), + 123: uint16(32771), + 124: uint16(25335), + 125: uint16(28900), + 126: uint16(38752), + 127: uint16(22391), + 128: uint16(33499), + 129: uint16(26607), + 130: uint16(26869), + 131: uint16(30933), + 132: uint16(39063), + 133: uint16(31185), + 134: uint16(22771), + 135: uint16(21683), + 136: uint16(21487), + 137: uint16(28212), + 138: uint16(20811), + 139: uint16(21051), + 140: uint16(23458), + 141: uint16(35838), + 142: uint16(32943), + 143: uint16(21827), + 144: uint16(22438), + 145: uint16(24691), + 146: uint16(22353), + 147: uint16(21549), + 148: uint16(31354), + 149: uint16(24656), + 150: uint16(23380), + 151: uint16(25511), + 152: uint16(25248), + 153: uint16(21475), + 154: uint16(25187), + 155: uint16(23495), + 156: uint16(26543), + 157: uint16(21741), + 158: uint16(31391), + 159: uint16(33510), + 160: uint16(37239), + 161: uint16(24211), + 162: uint16(35044), + 163: uint16(22840), + 164: uint16(22446), + 165: uint16(25358), + 166: uint16(36328), + 167: uint16(33007), + 168: uint16(22359), + 169: uint16(31607), + 170: uint16(20393), + 171: uint16(24555), + 172: uint16(23485), + 173: uint16(27454), + 174: uint16(21281), + 175: uint16(31568), + 176: uint16(29378), + 177: uint16(26694), + 178: uint16(30719), + 179: uint16(30518), + 180: uint16(26103), + 181: uint16(20917), + 182: uint16(20111), + 183: uint16(30420), + 184: uint16(23743), + 185: uint16(31397), + 186: uint16(33909), + 187: uint16(22862), + 188: uint16(39745), + 189: uint16(20608), + }, + 63: { + 0: uint16(32350), + 1: uint16(32351), + 2: uint16(32352), + 3: uint16(32353), + 4: uint16(32354), + 5: uint16(32355), + 6: uint16(32356), + 7: uint16(32357), + 8: uint16(32358), + 9: uint16(32359), + 10: uint16(32360), + 11: uint16(32361), + 12: uint16(32362), + 13: uint16(32363), + 14: uint16(32364), + 15: uint16(32365), + 16: uint16(32366), + 17: uint16(32367), + 18: uint16(32368), + 19: uint16(32369), + 20: uint16(32370), + 21: uint16(32371), + 22: uint16(32372), + 23: uint16(32373), + 24: uint16(32374), + 25: uint16(32375), + 26: uint16(32376), + 27: uint16(32377), + 28: uint16(32378), + 29: uint16(32379), + 30: uint16(32380), + 31: uint16(32381), + 32: uint16(32382), + 33: uint16(32383), + 34: uint16(32384), + 35: uint16(32385), + 36: uint16(32387), + 37: uint16(32388), + 38: uint16(32389), + 39: uint16(32390), + 40: uint16(32391), + 41: uint16(32392), + 42: uint16(32393), + 43: uint16(32394), + 44: uint16(32395), + 45: uint16(32396), + 46: uint16(32397), + 47: uint16(32398), + 48: uint16(32399), + 49: uint16(32400), + 50: uint16(32401), + 51: uint16(32402), + 52: uint16(32403), + 53: uint16(32404), + 54: uint16(32405), + 55: uint16(32406), + 56: uint16(32407), + 57: uint16(32408), + 58: uint16(32409), + 59: uint16(32410), + 60: uint16(32412), + 61: uint16(32413), + 62: uint16(32414), + 63: uint16(32430), + 64: uint16(32436), + 65: uint16(32443), + 66: uint16(32444), + 67: uint16(32470), + 68: uint16(32484), + 69: uint16(32492), + 70: uint16(32505), + 71: uint16(32522), + 72: uint16(32528), + 73: uint16(32542), + 74: uint16(32567), + 75: uint16(32569), + 76: uint16(32571), + 77: uint16(32572), + 78: uint16(32573), + 79: uint16(32574), + 80: uint16(32575), + 81: uint16(32576), + 82: uint16(32577), + 83: uint16(32579), + 84: uint16(32582), + 85: uint16(32583), + 86: uint16(32584), + 87: uint16(32585), + 88: uint16(32586), + 89: uint16(32587), + 90: uint16(32588), + 91: uint16(32589), + 92: uint16(32590), + 93: uint16(32591), + 94: uint16(32594), + 95: uint16(32595), + 96: uint16(39304), + 97: uint16(24871), + 98: uint16(28291), + 99: uint16(22372), + 100: uint16(26118), + 101: uint16(25414), + 102: uint16(22256), + 103: uint16(25324), + 104: uint16(25193), + 105: uint16(24275), + 106: uint16(38420), + 107: uint16(22403), + 108: uint16(25289), + 109: uint16(21895), + 110: uint16(34593), + 111: uint16(33098), + 112: uint16(36771), + 113: uint16(21862), + 114: uint16(33713), + 115: uint16(26469), + 116: uint16(36182), + 117: uint16(34013), + 118: uint16(23146), + 119: uint16(26639), + 120: uint16(25318), + 121: uint16(31726), + 122: uint16(38417), + 123: uint16(20848), + 124: uint16(28572), + 125: uint16(35888), + 126: uint16(25597), + 127: uint16(35272), + 128: uint16(25042), + 129: uint16(32518), + 130: uint16(28866), + 131: uint16(28389), + 132: uint16(29701), + 133: uint16(27028), + 134: uint16(29436), + 135: uint16(24266), + 136: uint16(37070), + 137: uint16(26391), + 138: uint16(28010), + 139: uint16(25438), + 140: uint16(21171), + 141: uint16(29282), + 142: uint16(32769), + 143: uint16(20332), + 144: uint16(23013), + 145: uint16(37226), + 146: uint16(28889), + 147: uint16(28061), + 148: uint16(21202), + 149: uint16(20048), + 150: uint16(38647), + 151: uint16(38253), + 152: uint16(34174), + 153: uint16(30922), + 154: uint16(32047), + 155: uint16(20769), + 156: uint16(22418), + 157: uint16(25794), + 158: uint16(32907), + 159: uint16(31867), + 160: uint16(27882), + 161: uint16(26865), + 162: uint16(26974), + 163: uint16(20919), + 164: uint16(21400), + 165: uint16(26792), + 166: uint16(29313), + 167: uint16(40654), + 168: uint16(31729), + 169: uint16(29432), + 170: uint16(31163), + 171: uint16(28435), + 172: uint16(29702), + 173: uint16(26446), + 174: uint16(37324), + 175: uint16(40100), + 176: uint16(31036), + 177: uint16(33673), + 178: uint16(33620), + 179: uint16(21519), + 180: uint16(26647), + 181: uint16(20029), + 182: uint16(21385), + 183: uint16(21169), + 184: uint16(30782), + 185: uint16(21382), + 186: uint16(21033), + 187: uint16(20616), + 188: uint16(20363), + 189: uint16(20432), + }, + 64: { + 0: uint16(32598), + 1: uint16(32601), + 2: uint16(32603), + 3: uint16(32604), + 4: uint16(32605), + 5: uint16(32606), + 6: uint16(32608), + 7: uint16(32611), + 8: uint16(32612), + 9: uint16(32613), + 10: uint16(32614), + 11: uint16(32615), + 12: uint16(32619), + 13: uint16(32620), + 14: uint16(32621), + 15: uint16(32623), + 16: uint16(32624), + 17: uint16(32627), + 18: uint16(32629), + 19: uint16(32630), + 20: uint16(32631), + 21: uint16(32632), + 22: uint16(32634), + 23: uint16(32635), + 24: uint16(32636), + 25: uint16(32637), + 26: uint16(32639), + 27: uint16(32640), + 28: uint16(32642), + 29: uint16(32643), + 30: uint16(32644), + 31: uint16(32645), + 32: uint16(32646), + 33: uint16(32647), + 34: uint16(32648), + 35: uint16(32649), + 36: uint16(32651), + 37: uint16(32653), + 38: uint16(32655), + 39: uint16(32656), + 40: uint16(32657), + 41: uint16(32658), + 42: uint16(32659), + 43: uint16(32661), + 44: uint16(32662), + 45: uint16(32663), + 46: uint16(32664), + 47: uint16(32665), + 48: uint16(32667), + 49: uint16(32668), + 50: uint16(32672), + 51: uint16(32674), + 52: uint16(32675), + 53: uint16(32677), + 54: uint16(32678), + 55: uint16(32680), + 56: uint16(32681), + 57: uint16(32682), + 58: uint16(32683), + 59: uint16(32684), + 60: uint16(32685), + 61: uint16(32686), + 62: uint16(32689), + 63: uint16(32691), + 64: uint16(32692), + 65: uint16(32693), + 66: uint16(32694), + 67: uint16(32695), + 68: uint16(32698), + 69: uint16(32699), + 70: uint16(32702), + 71: uint16(32704), + 72: uint16(32706), + 73: uint16(32707), + 74: uint16(32708), + 75: uint16(32710), + 76: uint16(32711), + 77: uint16(32712), + 78: uint16(32713), + 79: uint16(32715), + 80: uint16(32717), + 81: uint16(32719), + 82: uint16(32720), + 83: uint16(32721), + 84: uint16(32722), + 85: uint16(32723), + 86: uint16(32726), + 87: uint16(32727), + 88: uint16(32729), + 89: uint16(32730), + 90: uint16(32731), + 91: uint16(32732), + 92: uint16(32733), + 93: uint16(32734), + 94: uint16(32738), + 95: uint16(32739), + 96: uint16(30178), + 97: uint16(31435), + 98: uint16(31890), + 99: uint16(27813), + 100: uint16(38582), + 101: uint16(21147), + 102: uint16(29827), + 103: uint16(21737), + 104: uint16(20457), + 105: uint16(32852), + 106: uint16(33714), + 107: uint16(36830), + 108: uint16(38256), + 109: uint16(24265), + 110: uint16(24604), + 111: uint16(28063), + 112: uint16(24088), + 113: uint16(25947), + 114: uint16(33080), + 115: uint16(38142), + 116: uint16(24651), + 117: uint16(28860), + 118: uint16(32451), + 119: uint16(31918), + 120: uint16(20937), + 121: uint16(26753), + 122: uint16(31921), + 123: uint16(33391), + 124: uint16(20004), + 125: uint16(36742), + 126: uint16(37327), + 127: uint16(26238), + 128: uint16(20142), + 129: uint16(35845), + 130: uint16(25769), + 131: uint16(32842), + 132: uint16(20698), + 133: uint16(30103), + 134: uint16(29134), + 135: uint16(23525), + 136: uint16(36797), + 137: uint16(28518), + 138: uint16(20102), + 139: uint16(25730), + 140: uint16(38243), + 141: uint16(24278), + 142: uint16(26009), + 143: uint16(21015), + 144: uint16(35010), + 145: uint16(28872), + 146: uint16(21155), + 147: uint16(29454), + 148: uint16(29747), + 149: uint16(26519), + 150: uint16(30967), + 151: uint16(38678), + 152: uint16(20020), + 153: uint16(37051), + 154: uint16(40158), + 155: uint16(28107), + 156: uint16(20955), + 157: uint16(36161), + 158: uint16(21533), + 159: uint16(25294), + 160: uint16(29618), + 161: uint16(33777), + 162: uint16(38646), + 163: uint16(40836), + 164: uint16(38083), + 165: uint16(20278), + 166: uint16(32666), + 167: uint16(20940), + 168: uint16(28789), + 169: uint16(38517), + 170: uint16(23725), + 171: uint16(39046), + 172: uint16(21478), + 173: uint16(20196), + 174: uint16(28316), + 175: uint16(29705), + 176: uint16(27060), + 177: uint16(30827), + 178: uint16(39311), + 179: uint16(30041), + 180: uint16(21016), + 181: uint16(30244), + 182: uint16(27969), + 183: uint16(26611), + 184: uint16(20845), + 185: uint16(40857), + 186: uint16(32843), + 187: uint16(21657), + 188: uint16(31548), + 189: uint16(31423), + }, + 65: { + 0: uint16(32740), + 1: uint16(32743), + 2: uint16(32744), + 3: uint16(32746), + 4: uint16(32747), + 5: uint16(32748), + 6: uint16(32749), + 7: uint16(32751), + 8: uint16(32754), + 9: uint16(32756), + 10: uint16(32757), + 11: uint16(32758), + 12: uint16(32759), + 13: uint16(32760), + 14: uint16(32761), + 15: uint16(32762), + 16: uint16(32765), + 17: uint16(32766), + 18: uint16(32767), + 19: uint16(32770), + 20: uint16(32775), + 21: uint16(32776), + 22: uint16(32777), + 23: uint16(32778), + 24: uint16(32782), + 25: uint16(32783), + 26: uint16(32785), + 27: uint16(32787), + 28: uint16(32794), + 29: uint16(32795), + 30: uint16(32797), + 31: uint16(32798), + 32: uint16(32799), + 33: uint16(32801), + 34: uint16(32803), + 35: uint16(32804), + 36: uint16(32811), + 37: uint16(32812), + 38: uint16(32813), + 39: uint16(32814), + 40: uint16(32815), + 41: uint16(32816), + 42: uint16(32818), + 43: uint16(32820), + 44: uint16(32825), + 45: uint16(32826), + 46: uint16(32828), + 47: uint16(32830), + 48: uint16(32832), + 49: uint16(32833), + 50: uint16(32836), + 51: uint16(32837), + 52: uint16(32839), + 53: uint16(32840), + 54: uint16(32841), + 55: uint16(32846), + 56: uint16(32847), + 57: uint16(32848), + 58: uint16(32849), + 59: uint16(32851), + 60: uint16(32853), + 61: uint16(32854), + 62: uint16(32855), + 63: uint16(32857), + 64: uint16(32859), + 65: uint16(32860), + 66: uint16(32861), + 67: uint16(32862), + 68: uint16(32863), + 69: uint16(32864), + 70: uint16(32865), + 71: uint16(32866), + 72: uint16(32867), + 73: uint16(32868), + 74: uint16(32869), + 75: uint16(32870), + 76: uint16(32871), + 77: uint16(32872), + 78: uint16(32875), + 79: uint16(32876), + 80: uint16(32877), + 81: uint16(32878), + 82: uint16(32879), + 83: uint16(32880), + 84: uint16(32882), + 85: uint16(32883), + 86: uint16(32884), + 87: uint16(32885), + 88: uint16(32886), + 89: uint16(32887), + 90: uint16(32888), + 91: uint16(32889), + 92: uint16(32890), + 93: uint16(32891), + 94: uint16(32892), + 95: uint16(32893), + 96: uint16(38534), + 97: uint16(22404), + 98: uint16(25314), + 99: uint16(38471), + 100: uint16(27004), + 101: uint16(23044), + 102: uint16(25602), + 103: uint16(31699), + 104: uint16(28431), + 105: uint16(38475), + 106: uint16(33446), + 107: uint16(21346), + 108: uint16(39045), + 109: uint16(24208), + 110: uint16(28809), + 111: uint16(25523), + 112: uint16(21348), + 113: uint16(34383), + 114: uint16(40065), + 115: uint16(40595), + 116: uint16(30860), + 117: uint16(38706), + 118: uint16(36335), + 119: uint16(36162), + 120: uint16(40575), + 121: uint16(28510), + 122: uint16(31108), + 123: uint16(24405), + 124: uint16(38470), + 125: uint16(25134), + 126: uint16(39540), + 127: uint16(21525), + 128: uint16(38109), + 129: uint16(20387), + 130: uint16(26053), + 131: uint16(23653), + 132: uint16(23649), + 133: uint16(32533), + 134: uint16(34385), + 135: uint16(27695), + 136: uint16(24459), + 137: uint16(29575), + 138: uint16(28388), + 139: uint16(32511), + 140: uint16(23782), + 141: uint16(25371), + 142: uint16(23402), + 143: uint16(28390), + 144: uint16(21365), + 145: uint16(20081), + 146: uint16(25504), + 147: uint16(30053), + 148: uint16(25249), + 149: uint16(36718), + 150: uint16(20262), + 151: uint16(20177), + 152: uint16(27814), + 153: uint16(32438), + 154: uint16(35770), + 155: uint16(33821), + 156: uint16(34746), + 157: uint16(32599), + 158: uint16(36923), + 159: uint16(38179), + 160: uint16(31657), + 161: uint16(39585), + 162: uint16(35064), + 163: uint16(33853), + 164: uint16(27931), + 165: uint16(39558), + 166: uint16(32476), + 167: uint16(22920), + 168: uint16(40635), + 169: uint16(29595), + 170: uint16(30721), + 171: uint16(34434), + 172: uint16(39532), + 173: uint16(39554), + 174: uint16(22043), + 175: uint16(21527), + 176: uint16(22475), + 177: uint16(20080), + 178: uint16(40614), + 179: uint16(21334), + 180: uint16(36808), + 181: uint16(33033), + 182: uint16(30610), + 183: uint16(39314), + 184: uint16(34542), + 185: uint16(28385), + 186: uint16(34067), + 187: uint16(26364), + 188: uint16(24930), + 189: uint16(28459), + }, + 66: { + 0: uint16(32894), + 1: uint16(32897), + 2: uint16(32898), + 3: uint16(32901), + 4: uint16(32904), + 5: uint16(32906), + 6: uint16(32909), + 7: uint16(32910), + 8: uint16(32911), + 9: uint16(32912), + 10: uint16(32913), + 11: uint16(32914), + 12: uint16(32916), + 13: uint16(32917), + 14: uint16(32919), + 15: uint16(32921), + 16: uint16(32926), + 17: uint16(32931), + 18: uint16(32934), + 19: uint16(32935), + 20: uint16(32936), + 21: uint16(32940), + 22: uint16(32944), + 23: uint16(32947), + 24: uint16(32949), + 25: uint16(32950), + 26: uint16(32952), + 27: uint16(32953), + 28: uint16(32955), + 29: uint16(32965), + 30: uint16(32967), + 31: uint16(32968), + 32: uint16(32969), + 33: uint16(32970), + 34: uint16(32971), + 35: uint16(32975), + 36: uint16(32976), + 37: uint16(32977), + 38: uint16(32978), + 39: uint16(32979), + 40: uint16(32980), + 41: uint16(32981), + 42: uint16(32984), + 43: uint16(32991), + 44: uint16(32992), + 45: uint16(32994), + 46: uint16(32995), + 47: uint16(32998), + 48: uint16(33006), + 49: uint16(33013), + 50: uint16(33015), + 51: uint16(33017), + 52: uint16(33019), + 53: uint16(33022), + 54: uint16(33023), + 55: uint16(33024), + 56: uint16(33025), + 57: uint16(33027), + 58: uint16(33028), + 59: uint16(33029), + 60: uint16(33031), + 61: uint16(33032), + 62: uint16(33035), + 63: uint16(33036), + 64: uint16(33045), + 65: uint16(33047), + 66: uint16(33049), + 67: uint16(33051), + 68: uint16(33052), + 69: uint16(33053), + 70: uint16(33055), + 71: uint16(33056), + 72: uint16(33057), + 73: uint16(33058), + 74: uint16(33059), + 75: uint16(33060), + 76: uint16(33061), + 77: uint16(33062), + 78: uint16(33063), + 79: uint16(33064), + 80: uint16(33065), + 81: uint16(33066), + 82: uint16(33067), + 83: uint16(33069), + 84: uint16(33070), + 85: uint16(33072), + 86: uint16(33075), + 87: uint16(33076), + 88: uint16(33077), + 89: uint16(33079), + 90: uint16(33081), + 91: uint16(33082), + 92: uint16(33083), + 93: uint16(33084), + 94: uint16(33085), + 95: uint16(33087), + 96: uint16(35881), + 97: uint16(33426), + 98: uint16(33579), + 99: uint16(30450), + 100: uint16(27667), + 101: uint16(24537), + 102: uint16(33725), + 103: uint16(29483), + 104: uint16(33541), + 105: uint16(38170), + 106: uint16(27611), + 107: uint16(30683), + 108: uint16(38086), + 109: uint16(21359), + 110: uint16(33538), + 111: uint16(20882), + 112: uint16(24125), + 113: uint16(35980), + 114: uint16(36152), + 115: uint16(20040), + 116: uint16(29611), + 117: uint16(26522), + 118: uint16(26757), + 119: uint16(37238), + 120: uint16(38665), + 121: uint16(29028), + 122: uint16(27809), + 123: uint16(30473), + 124: uint16(23186), + 125: uint16(38209), + 126: uint16(27599), + 127: uint16(32654), + 128: uint16(26151), + 129: uint16(23504), + 130: uint16(22969), + 131: uint16(23194), + 132: uint16(38376), + 133: uint16(38391), + 134: uint16(20204), + 135: uint16(33804), + 136: uint16(33945), + 137: uint16(27308), + 138: uint16(30431), + 139: uint16(38192), + 140: uint16(29467), + 141: uint16(26790), + 142: uint16(23391), + 143: uint16(30511), + 144: uint16(37274), + 145: uint16(38753), + 146: uint16(31964), + 147: uint16(36855), + 148: uint16(35868), + 149: uint16(24357), + 150: uint16(31859), + 151: uint16(31192), + 152: uint16(35269), + 153: uint16(27852), + 154: uint16(34588), + 155: uint16(23494), + 156: uint16(24130), + 157: uint16(26825), + 158: uint16(30496), + 159: uint16(32501), + 160: uint16(20885), + 161: uint16(20813), + 162: uint16(21193), + 163: uint16(23081), + 164: uint16(32517), + 165: uint16(38754), + 166: uint16(33495), + 167: uint16(25551), + 168: uint16(30596), + 169: uint16(34256), + 170: uint16(31186), + 171: uint16(28218), + 172: uint16(24217), + 173: uint16(22937), + 174: uint16(34065), + 175: uint16(28781), + 176: uint16(27665), + 177: uint16(25279), + 178: uint16(30399), + 179: uint16(25935), + 180: uint16(24751), + 181: uint16(38397), + 182: uint16(26126), + 183: uint16(34719), + 184: uint16(40483), + 185: uint16(38125), + 186: uint16(21517), + 187: uint16(21629), + 188: uint16(35884), + 189: uint16(25720), + }, + 67: { + 0: uint16(33088), + 1: uint16(33089), + 2: uint16(33090), + 3: uint16(33091), + 4: uint16(33092), + 5: uint16(33093), + 6: uint16(33095), + 7: uint16(33097), + 8: uint16(33101), + 9: uint16(33102), + 10: uint16(33103), + 11: uint16(33106), + 12: uint16(33110), + 13: uint16(33111), + 14: uint16(33112), + 15: uint16(33115), + 16: uint16(33116), + 17: uint16(33117), + 18: uint16(33118), + 19: uint16(33119), + 20: uint16(33121), + 21: uint16(33122), + 22: uint16(33123), + 23: uint16(33124), + 24: uint16(33126), + 25: uint16(33128), + 26: uint16(33130), + 27: uint16(33131), + 28: uint16(33132), + 29: uint16(33135), + 30: uint16(33138), + 31: uint16(33139), + 32: uint16(33141), + 33: uint16(33142), + 34: uint16(33143), + 35: uint16(33144), + 36: uint16(33153), + 37: uint16(33155), + 38: uint16(33156), + 39: uint16(33157), + 40: uint16(33158), + 41: uint16(33159), + 42: uint16(33161), + 43: uint16(33163), + 44: uint16(33164), + 45: uint16(33165), + 46: uint16(33166), + 47: uint16(33168), + 48: uint16(33170), + 49: uint16(33171), + 50: uint16(33172), + 51: uint16(33173), + 52: uint16(33174), + 53: uint16(33175), + 54: uint16(33177), + 55: uint16(33178), + 56: uint16(33182), + 57: uint16(33183), + 58: uint16(33184), + 59: uint16(33185), + 60: uint16(33186), + 61: uint16(33188), + 62: uint16(33189), + 63: uint16(33191), + 64: uint16(33193), + 65: uint16(33195), + 66: uint16(33196), + 67: uint16(33197), + 68: uint16(33198), + 69: uint16(33199), + 70: uint16(33200), + 71: uint16(33201), + 72: uint16(33202), + 73: uint16(33204), + 74: uint16(33205), + 75: uint16(33206), + 76: uint16(33207), + 77: uint16(33208), + 78: uint16(33209), + 79: uint16(33212), + 80: uint16(33213), + 81: uint16(33214), + 82: uint16(33215), + 83: uint16(33220), + 84: uint16(33221), + 85: uint16(33223), + 86: uint16(33224), + 87: uint16(33225), + 88: uint16(33227), + 89: uint16(33229), + 90: uint16(33230), + 91: uint16(33231), + 92: uint16(33232), + 93: uint16(33233), + 94: uint16(33234), + 95: uint16(33235), + 96: uint16(25721), + 97: uint16(34321), + 98: uint16(27169), + 99: uint16(33180), + 100: uint16(30952), + 101: uint16(25705), + 102: uint16(39764), + 103: uint16(25273), + 104: uint16(26411), + 105: uint16(33707), + 106: uint16(22696), + 107: uint16(40664), + 108: uint16(27819), + 109: uint16(28448), + 110: uint16(23518), + 111: uint16(38476), + 112: uint16(35851), + 113: uint16(29279), + 114: uint16(26576), + 115: uint16(25287), + 116: uint16(29281), + 117: uint16(20137), + 118: uint16(22982), + 119: uint16(27597), + 120: uint16(22675), + 121: uint16(26286), + 122: uint16(24149), + 123: uint16(21215), + 124: uint16(24917), + 125: uint16(26408), + 126: uint16(30446), + 127: uint16(30566), + 128: uint16(29287), + 129: uint16(31302), + 130: uint16(25343), + 131: uint16(21738), + 132: uint16(21584), + 133: uint16(38048), + 134: uint16(37027), + 135: uint16(23068), + 136: uint16(32435), + 137: uint16(27670), + 138: uint16(20035), + 139: uint16(22902), + 140: uint16(32784), + 141: uint16(22856), + 142: uint16(21335), + 143: uint16(30007), + 144: uint16(38590), + 145: uint16(22218), + 146: uint16(25376), + 147: uint16(33041), + 148: uint16(24700), + 149: uint16(38393), + 150: uint16(28118), + 151: uint16(21602), + 152: uint16(39297), + 153: uint16(20869), + 154: uint16(23273), + 155: uint16(33021), + 156: uint16(22958), + 157: uint16(38675), + 158: uint16(20522), + 159: uint16(27877), + 160: uint16(23612), + 161: uint16(25311), + 162: uint16(20320), + 163: uint16(21311), + 164: uint16(33147), + 165: uint16(36870), + 166: uint16(28346), + 167: uint16(34091), + 168: uint16(25288), + 169: uint16(24180), + 170: uint16(30910), + 171: uint16(25781), + 172: uint16(25467), + 173: uint16(24565), + 174: uint16(23064), + 175: uint16(37247), + 176: uint16(40479), + 177: uint16(23615), + 178: uint16(25423), + 179: uint16(32834), + 180: uint16(23421), + 181: uint16(21870), + 182: uint16(38218), + 183: uint16(38221), + 184: uint16(28037), + 185: uint16(24744), + 186: uint16(26592), + 187: uint16(29406), + 188: uint16(20957), + 189: uint16(23425), + }, + 68: { + 0: uint16(33236), + 1: uint16(33237), + 2: uint16(33238), + 3: uint16(33239), + 4: uint16(33240), + 5: uint16(33241), + 6: uint16(33242), + 7: uint16(33243), + 8: uint16(33244), + 9: uint16(33245), + 10: uint16(33246), + 11: uint16(33247), + 12: uint16(33248), + 13: uint16(33249), + 14: uint16(33250), + 15: uint16(33252), + 16: uint16(33253), + 17: uint16(33254), + 18: uint16(33256), + 19: uint16(33257), + 20: uint16(33259), + 21: uint16(33262), + 22: uint16(33263), + 23: uint16(33264), + 24: uint16(33265), + 25: uint16(33266), + 26: uint16(33269), + 27: uint16(33270), + 28: uint16(33271), + 29: uint16(33272), + 30: uint16(33273), + 31: uint16(33274), + 32: uint16(33277), + 33: uint16(33279), + 34: uint16(33283), + 35: uint16(33287), + 36: uint16(33288), + 37: uint16(33289), + 38: uint16(33290), + 39: uint16(33291), + 40: uint16(33294), + 41: uint16(33295), + 42: uint16(33297), + 43: uint16(33299), + 44: uint16(33301), + 45: uint16(33302), + 46: uint16(33303), + 47: uint16(33304), + 48: uint16(33305), + 49: uint16(33306), + 50: uint16(33309), + 51: uint16(33312), + 52: uint16(33316), + 53: uint16(33317), + 54: uint16(33318), + 55: uint16(33319), + 56: uint16(33321), + 57: uint16(33326), + 58: uint16(33330), + 59: uint16(33338), + 60: uint16(33340), + 61: uint16(33341), + 62: uint16(33343), + 63: uint16(33344), + 64: uint16(33345), + 65: uint16(33346), + 66: uint16(33347), + 67: uint16(33349), + 68: uint16(33350), + 69: uint16(33352), + 70: uint16(33354), + 71: uint16(33356), + 72: uint16(33357), + 73: uint16(33358), + 74: uint16(33360), + 75: uint16(33361), + 76: uint16(33362), + 77: uint16(33363), + 78: uint16(33364), + 79: uint16(33365), + 80: uint16(33366), + 81: uint16(33367), + 82: uint16(33369), + 83: uint16(33371), + 84: uint16(33372), + 85: uint16(33373), + 86: uint16(33374), + 87: uint16(33376), + 88: uint16(33377), + 89: uint16(33378), + 90: uint16(33379), + 91: uint16(33380), + 92: uint16(33381), + 93: uint16(33382), + 94: uint16(33383), + 95: uint16(33385), + 96: uint16(25319), + 97: uint16(27870), + 98: uint16(29275), + 99: uint16(25197), + 100: uint16(38062), + 101: uint16(32445), + 102: uint16(33043), + 103: uint16(27987), + 104: uint16(20892), + 105: uint16(24324), + 106: uint16(22900), + 107: uint16(21162), + 108: uint16(24594), + 109: uint16(22899), + 110: uint16(26262), + 111: uint16(34384), + 112: uint16(30111), + 113: uint16(25386), + 114: uint16(25062), + 115: uint16(31983), + 116: uint16(35834), + 117: uint16(21734), + 118: uint16(27431), + 119: uint16(40485), + 120: uint16(27572), + 121: uint16(34261), + 122: uint16(21589), + 123: uint16(20598), + 124: uint16(27812), + 125: uint16(21866), + 126: uint16(36276), + 127: uint16(29228), + 128: uint16(24085), + 129: uint16(24597), + 130: uint16(29750), + 131: uint16(25293), + 132: uint16(25490), + 133: uint16(29260), + 134: uint16(24472), + 135: uint16(28227), + 136: uint16(27966), + 137: uint16(25856), + 138: uint16(28504), + 139: uint16(30424), + 140: uint16(30928), + 141: uint16(30460), + 142: uint16(30036), + 143: uint16(21028), + 144: uint16(21467), + 145: uint16(20051), + 146: uint16(24222), + 147: uint16(26049), + 148: uint16(32810), + 149: uint16(32982), + 150: uint16(25243), + 151: uint16(21638), + 152: uint16(21032), + 153: uint16(28846), + 154: uint16(34957), + 155: uint16(36305), + 156: uint16(27873), + 157: uint16(21624), + 158: uint16(32986), + 159: uint16(22521), + 160: uint16(35060), + 161: uint16(36180), + 162: uint16(38506), + 163: uint16(37197), + 164: uint16(20329), + 165: uint16(27803), + 166: uint16(21943), + 167: uint16(30406), + 168: uint16(30768), + 169: uint16(25256), + 170: uint16(28921), + 171: uint16(28558), + 172: uint16(24429), + 173: uint16(34028), + 174: uint16(26842), + 175: uint16(30844), + 176: uint16(31735), + 177: uint16(33192), + 178: uint16(26379), + 179: uint16(40527), + 180: uint16(25447), + 181: uint16(30896), + 182: uint16(22383), + 183: uint16(30738), + 184: uint16(38713), + 185: uint16(25209), + 186: uint16(25259), + 187: uint16(21128), + 188: uint16(29749), + 189: uint16(27607), + }, + 69: { + 0: uint16(33386), + 1: uint16(33387), + 2: uint16(33388), + 3: uint16(33389), + 4: uint16(33393), + 5: uint16(33397), + 6: uint16(33398), + 7: uint16(33399), + 8: uint16(33400), + 9: uint16(33403), + 10: uint16(33404), + 11: uint16(33408), + 12: uint16(33409), + 13: uint16(33411), + 14: uint16(33413), + 15: uint16(33414), + 16: uint16(33415), + 17: uint16(33417), + 18: uint16(33420), + 19: uint16(33424), + 20: uint16(33427), + 21: uint16(33428), + 22: uint16(33429), + 23: uint16(33430), + 24: uint16(33434), + 25: uint16(33435), + 26: uint16(33438), + 27: uint16(33440), + 28: uint16(33442), + 29: uint16(33443), + 30: uint16(33447), + 31: uint16(33458), + 32: uint16(33461), + 33: uint16(33462), + 34: uint16(33466), + 35: uint16(33467), + 36: uint16(33468), + 37: uint16(33471), + 38: uint16(33472), + 39: uint16(33474), + 40: uint16(33475), + 41: uint16(33477), + 42: uint16(33478), + 43: uint16(33481), + 44: uint16(33488), + 45: uint16(33494), + 46: uint16(33497), + 47: uint16(33498), + 48: uint16(33501), + 49: uint16(33506), + 50: uint16(33511), + 51: uint16(33512), + 52: uint16(33513), + 53: uint16(33514), + 54: uint16(33516), + 55: uint16(33517), + 56: uint16(33518), + 57: uint16(33520), + 58: uint16(33522), + 59: uint16(33523), + 60: uint16(33525), + 61: uint16(33526), + 62: uint16(33528), + 63: uint16(33530), + 64: uint16(33532), + 65: uint16(33533), + 66: uint16(33534), + 67: uint16(33535), + 68: uint16(33536), + 69: uint16(33546), + 70: uint16(33547), + 71: uint16(33549), + 72: uint16(33552), + 73: uint16(33554), + 74: uint16(33555), + 75: uint16(33558), + 76: uint16(33560), + 77: uint16(33561), + 78: uint16(33565), + 79: uint16(33566), + 80: uint16(33567), + 81: uint16(33568), + 82: uint16(33569), + 83: uint16(33570), + 84: uint16(33571), + 85: uint16(33572), + 86: uint16(33573), + 87: uint16(33574), + 88: uint16(33577), + 89: uint16(33578), + 90: uint16(33582), + 91: uint16(33584), + 92: uint16(33586), + 93: uint16(33591), + 94: uint16(33595), + 95: uint16(33597), + 96: uint16(21860), + 97: uint16(33086), + 98: uint16(30130), + 99: uint16(30382), + 100: uint16(21305), + 101: uint16(30174), + 102: uint16(20731), + 103: uint16(23617), + 104: uint16(35692), + 105: uint16(31687), + 106: uint16(20559), + 107: uint16(29255), + 108: uint16(39575), + 109: uint16(39128), + 110: uint16(28418), + 111: uint16(29922), + 112: uint16(31080), + 113: uint16(25735), + 114: uint16(30629), + 115: uint16(25340), + 116: uint16(39057), + 117: uint16(36139), + 118: uint16(21697), + 119: uint16(32856), + 120: uint16(20050), + 121: uint16(22378), + 122: uint16(33529), + 123: uint16(33805), + 124: uint16(24179), + 125: uint16(20973), + 126: uint16(29942), + 127: uint16(35780), + 128: uint16(23631), + 129: uint16(22369), + 130: uint16(27900), + 131: uint16(39047), + 132: uint16(23110), + 133: uint16(30772), + 134: uint16(39748), + 135: uint16(36843), + 136: uint16(31893), + 137: uint16(21078), + 138: uint16(25169), + 139: uint16(38138), + 140: uint16(20166), + 141: uint16(33670), + 142: uint16(33889), + 143: uint16(33769), + 144: uint16(33970), + 145: uint16(22484), + 146: uint16(26420), + 147: uint16(22275), + 148: uint16(26222), + 149: uint16(28006), + 150: uint16(35889), + 151: uint16(26333), + 152: uint16(28689), + 153: uint16(26399), + 154: uint16(27450), + 155: uint16(26646), + 156: uint16(25114), + 157: uint16(22971), + 158: uint16(19971), + 159: uint16(20932), + 160: uint16(28422), + 161: uint16(26578), + 162: uint16(27791), + 163: uint16(20854), + 164: uint16(26827), + 165: uint16(22855), + 166: uint16(27495), + 167: uint16(30054), + 168: uint16(23822), + 169: uint16(33040), + 170: uint16(40784), + 171: uint16(26071), + 172: uint16(31048), + 173: uint16(31041), + 174: uint16(39569), + 175: uint16(36215), + 176: uint16(23682), + 177: uint16(20062), + 178: uint16(20225), + 179: uint16(21551), + 180: uint16(22865), + 181: uint16(30732), + 182: uint16(22120), + 183: uint16(27668), + 184: uint16(36804), + 185: uint16(24323), + 186: uint16(27773), + 187: uint16(27875), + 188: uint16(35755), + 189: uint16(25488), + }, + 70: { + 0: uint16(33598), + 1: uint16(33599), + 2: uint16(33601), + 3: uint16(33602), + 4: uint16(33604), + 5: uint16(33605), + 6: uint16(33608), + 7: uint16(33610), + 8: uint16(33611), + 9: uint16(33612), + 10: uint16(33613), + 11: uint16(33614), + 12: uint16(33619), + 13: uint16(33621), + 14: uint16(33622), + 15: uint16(33623), + 16: uint16(33624), + 17: uint16(33625), + 18: uint16(33629), + 19: uint16(33634), + 20: uint16(33648), + 21: uint16(33649), + 22: uint16(33650), + 23: uint16(33651), + 24: uint16(33652), + 25: uint16(33653), + 26: uint16(33654), + 27: uint16(33657), + 28: uint16(33658), + 29: uint16(33662), + 30: uint16(33663), + 31: uint16(33664), + 32: uint16(33665), + 33: uint16(33666), + 34: uint16(33667), + 35: uint16(33668), + 36: uint16(33671), + 37: uint16(33672), + 38: uint16(33674), + 39: uint16(33675), + 40: uint16(33676), + 41: uint16(33677), + 42: uint16(33679), + 43: uint16(33680), + 44: uint16(33681), + 45: uint16(33684), + 46: uint16(33685), + 47: uint16(33686), + 48: uint16(33687), + 49: uint16(33689), + 50: uint16(33690), + 51: uint16(33693), + 52: uint16(33695), + 53: uint16(33697), + 54: uint16(33698), + 55: uint16(33699), + 56: uint16(33700), + 57: uint16(33701), + 58: uint16(33702), + 59: uint16(33703), + 60: uint16(33708), + 61: uint16(33709), + 62: uint16(33710), + 63: uint16(33711), + 64: uint16(33717), + 65: uint16(33723), + 66: uint16(33726), + 67: uint16(33727), + 68: uint16(33730), + 69: uint16(33731), + 70: uint16(33732), + 71: uint16(33734), + 72: uint16(33736), + 73: uint16(33737), + 74: uint16(33739), + 75: uint16(33741), + 76: uint16(33742), + 77: uint16(33744), + 78: uint16(33745), + 79: uint16(33746), + 80: uint16(33747), + 81: uint16(33749), + 82: uint16(33751), + 83: uint16(33753), + 84: uint16(33754), + 85: uint16(33755), + 86: uint16(33758), + 87: uint16(33762), + 88: uint16(33763), + 89: uint16(33764), + 90: uint16(33766), + 91: uint16(33767), + 92: uint16(33768), + 93: uint16(33771), + 94: uint16(33772), + 95: uint16(33773), + 96: uint16(24688), + 97: uint16(27965), + 98: uint16(29301), + 99: uint16(25190), + 100: uint16(38030), + 101: uint16(38085), + 102: uint16(21315), + 103: uint16(36801), + 104: uint16(31614), + 105: uint16(20191), + 106: uint16(35878), + 107: uint16(20094), + 108: uint16(40660), + 109: uint16(38065), + 110: uint16(38067), + 111: uint16(21069), + 112: uint16(28508), + 113: uint16(36963), + 114: uint16(27973), + 115: uint16(35892), + 116: uint16(22545), + 117: uint16(23884), + 118: uint16(27424), + 119: uint16(27465), + 120: uint16(26538), + 121: uint16(21595), + 122: uint16(33108), + 123: uint16(32652), + 124: uint16(22681), + 125: uint16(34103), + 126: uint16(24378), + 127: uint16(25250), + 128: uint16(27207), + 129: uint16(38201), + 130: uint16(25970), + 131: uint16(24708), + 132: uint16(26725), + 133: uint16(30631), + 134: uint16(20052), + 135: uint16(20392), + 136: uint16(24039), + 137: uint16(38808), + 138: uint16(25772), + 139: uint16(32728), + 140: uint16(23789), + 141: uint16(20431), + 142: uint16(31373), + 143: uint16(20999), + 144: uint16(33540), + 145: uint16(19988), + 146: uint16(24623), + 147: uint16(31363), + 148: uint16(38054), + 149: uint16(20405), + 150: uint16(20146), + 151: uint16(31206), + 152: uint16(29748), + 153: uint16(21220), + 154: uint16(33465), + 155: uint16(25810), + 156: uint16(31165), + 157: uint16(23517), + 158: uint16(27777), + 159: uint16(38738), + 160: uint16(36731), + 161: uint16(27682), + 162: uint16(20542), + 163: uint16(21375), + 164: uint16(28165), + 165: uint16(25806), + 166: uint16(26228), + 167: uint16(27696), + 168: uint16(24773), + 169: uint16(39031), + 170: uint16(35831), + 171: uint16(24198), + 172: uint16(29756), + 173: uint16(31351), + 174: uint16(31179), + 175: uint16(19992), + 176: uint16(37041), + 177: uint16(29699), + 178: uint16(27714), + 179: uint16(22234), + 180: uint16(37195), + 181: uint16(27845), + 182: uint16(36235), + 183: uint16(21306), + 184: uint16(34502), + 185: uint16(26354), + 186: uint16(36527), + 187: uint16(23624), + 188: uint16(39537), + 189: uint16(28192), + }, + 71: { + 0: uint16(33774), + 1: uint16(33775), + 2: uint16(33779), + 3: uint16(33780), + 4: uint16(33781), + 5: uint16(33782), + 6: uint16(33783), + 7: uint16(33786), + 8: uint16(33787), + 9: uint16(33788), + 10: uint16(33790), + 11: uint16(33791), + 12: uint16(33792), + 13: uint16(33794), + 14: uint16(33797), + 15: uint16(33799), + 16: uint16(33800), + 17: uint16(33801), + 18: uint16(33802), + 19: uint16(33808), + 20: uint16(33810), + 21: uint16(33811), + 22: uint16(33812), + 23: uint16(33813), + 24: uint16(33814), + 25: uint16(33815), + 26: uint16(33817), + 27: uint16(33818), + 28: uint16(33819), + 29: uint16(33822), + 30: uint16(33823), + 31: uint16(33824), + 32: uint16(33825), + 33: uint16(33826), + 34: uint16(33827), + 35: uint16(33833), + 36: uint16(33834), + 37: uint16(33835), + 38: uint16(33836), + 39: uint16(33837), + 40: uint16(33838), + 41: uint16(33839), + 42: uint16(33840), + 43: uint16(33842), + 44: uint16(33843), + 45: uint16(33844), + 46: uint16(33845), + 47: uint16(33846), + 48: uint16(33847), + 49: uint16(33849), + 50: uint16(33850), + 51: uint16(33851), + 52: uint16(33854), + 53: uint16(33855), + 54: uint16(33856), + 55: uint16(33857), + 56: uint16(33858), + 57: uint16(33859), + 58: uint16(33860), + 59: uint16(33861), + 60: uint16(33863), + 61: uint16(33864), + 62: uint16(33865), + 63: uint16(33866), + 64: uint16(33867), + 65: uint16(33868), + 66: uint16(33869), + 67: uint16(33870), + 68: uint16(33871), + 69: uint16(33872), + 70: uint16(33874), + 71: uint16(33875), + 72: uint16(33876), + 73: uint16(33877), + 74: uint16(33878), + 75: uint16(33880), + 76: uint16(33885), + 77: uint16(33886), + 78: uint16(33887), + 79: uint16(33888), + 80: uint16(33890), + 81: uint16(33892), + 82: uint16(33893), + 83: uint16(33894), + 84: uint16(33895), + 85: uint16(33896), + 86: uint16(33898), + 87: uint16(33902), + 88: uint16(33903), + 89: uint16(33904), + 90: uint16(33906), + 91: uint16(33908), + 92: uint16(33911), + 93: uint16(33913), + 94: uint16(33915), + 95: uint16(33916), + 96: uint16(21462), + 97: uint16(23094), + 98: uint16(40843), + 99: uint16(36259), + 100: uint16(21435), + 101: uint16(22280), + 102: uint16(39079), + 103: uint16(26435), + 104: uint16(37275), + 105: uint16(27849), + 106: uint16(20840), + 107: uint16(30154), + 108: uint16(25331), + 109: uint16(29356), + 110: uint16(21048), + 111: uint16(21149), + 112: uint16(32570), + 113: uint16(28820), + 114: uint16(30264), + 115: uint16(21364), + 116: uint16(40522), + 117: uint16(27063), + 118: uint16(30830), + 119: uint16(38592), + 120: uint16(35033), + 121: uint16(32676), + 122: uint16(28982), + 123: uint16(29123), + 124: uint16(20873), + 125: uint16(26579), + 126: uint16(29924), + 127: uint16(22756), + 128: uint16(25880), + 129: uint16(22199), + 130: uint16(35753), + 131: uint16(39286), + 132: uint16(25200), + 133: uint16(32469), + 134: uint16(24825), + 135: uint16(28909), + 136: uint16(22764), + 137: uint16(20161), + 138: uint16(20154), + 139: uint16(24525), + 140: uint16(38887), + 141: uint16(20219), + 142: uint16(35748), + 143: uint16(20995), + 144: uint16(22922), + 145: uint16(32427), + 146: uint16(25172), + 147: uint16(20173), + 148: uint16(26085), + 149: uint16(25102), + 150: uint16(33592), + 151: uint16(33993), + 152: uint16(33635), + 153: uint16(34701), + 154: uint16(29076), + 155: uint16(28342), + 156: uint16(23481), + 157: uint16(32466), + 158: uint16(20887), + 159: uint16(25545), + 160: uint16(26580), + 161: uint16(32905), + 162: uint16(33593), + 163: uint16(34837), + 164: uint16(20754), + 165: uint16(23418), + 166: uint16(22914), + 167: uint16(36785), + 168: uint16(20083), + 169: uint16(27741), + 170: uint16(20837), + 171: uint16(35109), + 172: uint16(36719), + 173: uint16(38446), + 174: uint16(34122), + 175: uint16(29790), + 176: uint16(38160), + 177: uint16(38384), + 178: uint16(28070), + 179: uint16(33509), + 180: uint16(24369), + 181: uint16(25746), + 182: uint16(27922), + 183: uint16(33832), + 184: uint16(33134), + 185: uint16(40131), + 186: uint16(22622), + 187: uint16(36187), + 188: uint16(19977), + 189: uint16(21441), + }, + 72: { + 0: uint16(33917), + 1: uint16(33918), + 2: uint16(33919), + 3: uint16(33920), + 4: uint16(33921), + 5: uint16(33923), + 6: uint16(33924), + 7: uint16(33925), + 8: uint16(33926), + 9: uint16(33930), + 10: uint16(33933), + 11: uint16(33935), + 12: uint16(33936), + 13: uint16(33937), + 14: uint16(33938), + 15: uint16(33939), + 16: uint16(33940), + 17: uint16(33941), + 18: uint16(33942), + 19: uint16(33944), + 20: uint16(33946), + 21: uint16(33947), + 22: uint16(33949), + 23: uint16(33950), + 24: uint16(33951), + 25: uint16(33952), + 26: uint16(33954), + 27: uint16(33955), + 28: uint16(33956), + 29: uint16(33957), + 30: uint16(33958), + 31: uint16(33959), + 32: uint16(33960), + 33: uint16(33961), + 34: uint16(33962), + 35: uint16(33963), + 36: uint16(33964), + 37: uint16(33965), + 38: uint16(33966), + 39: uint16(33968), + 40: uint16(33969), + 41: uint16(33971), + 42: uint16(33973), + 43: uint16(33974), + 44: uint16(33975), + 45: uint16(33979), + 46: uint16(33980), + 47: uint16(33982), + 48: uint16(33984), + 49: uint16(33986), + 50: uint16(33987), + 51: uint16(33989), + 52: uint16(33990), + 53: uint16(33991), + 54: uint16(33992), + 55: uint16(33995), + 56: uint16(33996), + 57: uint16(33998), + 58: uint16(33999), + 59: uint16(34002), + 60: uint16(34004), + 61: uint16(34005), + 62: uint16(34007), + 63: uint16(34008), + 64: uint16(34009), + 65: uint16(34010), + 66: uint16(34011), + 67: uint16(34012), + 68: uint16(34014), + 69: uint16(34017), + 70: uint16(34018), + 71: uint16(34020), + 72: uint16(34023), + 73: uint16(34024), + 74: uint16(34025), + 75: uint16(34026), + 76: uint16(34027), + 77: uint16(34029), + 78: uint16(34030), + 79: uint16(34031), + 80: uint16(34033), + 81: uint16(34034), + 82: uint16(34035), + 83: uint16(34036), + 84: uint16(34037), + 85: uint16(34038), + 86: uint16(34039), + 87: uint16(34040), + 88: uint16(34041), + 89: uint16(34042), + 90: uint16(34043), + 91: uint16(34045), + 92: uint16(34046), + 93: uint16(34048), + 94: uint16(34049), + 95: uint16(34050), + 96: uint16(20254), + 97: uint16(25955), + 98: uint16(26705), + 99: uint16(21971), + 100: uint16(20007), + 101: uint16(25620), + 102: uint16(39578), + 103: uint16(25195), + 104: uint16(23234), + 105: uint16(29791), + 106: uint16(33394), + 107: uint16(28073), + 108: uint16(26862), + 109: uint16(20711), + 110: uint16(33678), + 111: uint16(30722), + 112: uint16(26432), + 113: uint16(21049), + 114: uint16(27801), + 115: uint16(32433), + 116: uint16(20667), + 117: uint16(21861), + 118: uint16(29022), + 119: uint16(31579), + 120: uint16(26194), + 121: uint16(29642), + 122: uint16(33515), + 123: uint16(26441), + 124: uint16(23665), + 125: uint16(21024), + 126: uint16(29053), + 127: uint16(34923), + 128: uint16(38378), + 129: uint16(38485), + 130: uint16(25797), + 131: uint16(36193), + 132: uint16(33203), + 133: uint16(21892), + 134: uint16(27733), + 135: uint16(25159), + 136: uint16(32558), + 137: uint16(22674), + 138: uint16(20260), + 139: uint16(21830), + 140: uint16(36175), + 141: uint16(26188), + 142: uint16(19978), + 143: uint16(23578), + 144: uint16(35059), + 145: uint16(26786), + 146: uint16(25422), + 147: uint16(31245), + 148: uint16(28903), + 149: uint16(33421), + 150: uint16(21242), + 151: uint16(38902), + 152: uint16(23569), + 153: uint16(21736), + 154: uint16(37045), + 155: uint16(32461), + 156: uint16(22882), + 157: uint16(36170), + 158: uint16(34503), + 159: uint16(33292), + 160: uint16(33293), + 161: uint16(36198), + 162: uint16(25668), + 163: uint16(23556), + 164: uint16(24913), + 165: uint16(28041), + 166: uint16(31038), + 167: uint16(35774), + 168: uint16(30775), + 169: uint16(30003), + 170: uint16(21627), + 171: uint16(20280), + 172: uint16(36523), + 173: uint16(28145), + 174: uint16(23072), + 175: uint16(32453), + 176: uint16(31070), + 177: uint16(27784), + 178: uint16(23457), + 179: uint16(23158), + 180: uint16(29978), + 181: uint16(32958), + 182: uint16(24910), + 183: uint16(28183), + 184: uint16(22768), + 185: uint16(29983), + 186: uint16(29989), + 187: uint16(29298), + 188: uint16(21319), + 189: uint16(32499), + }, + 73: { + 0: uint16(34051), + 1: uint16(34052), + 2: uint16(34053), + 3: uint16(34054), + 4: uint16(34055), + 5: uint16(34056), + 6: uint16(34057), + 7: uint16(34058), + 8: uint16(34059), + 9: uint16(34061), + 10: uint16(34062), + 11: uint16(34063), + 12: uint16(34064), + 13: uint16(34066), + 14: uint16(34068), + 15: uint16(34069), + 16: uint16(34070), + 17: uint16(34072), + 18: uint16(34073), + 19: uint16(34075), + 20: uint16(34076), + 21: uint16(34077), + 22: uint16(34078), + 23: uint16(34080), + 24: uint16(34082), + 25: uint16(34083), + 26: uint16(34084), + 27: uint16(34085), + 28: uint16(34086), + 29: uint16(34087), + 30: uint16(34088), + 31: uint16(34089), + 32: uint16(34090), + 33: uint16(34093), + 34: uint16(34094), + 35: uint16(34095), + 36: uint16(34096), + 37: uint16(34097), + 38: uint16(34098), + 39: uint16(34099), + 40: uint16(34100), + 41: uint16(34101), + 42: uint16(34102), + 43: uint16(34110), + 44: uint16(34111), + 45: uint16(34112), + 46: uint16(34113), + 47: uint16(34114), + 48: uint16(34116), + 49: uint16(34117), + 50: uint16(34118), + 51: uint16(34119), + 52: uint16(34123), + 53: uint16(34124), + 54: uint16(34125), + 55: uint16(34126), + 56: uint16(34127), + 57: uint16(34128), + 58: uint16(34129), + 59: uint16(34130), + 60: uint16(34131), + 61: uint16(34132), + 62: uint16(34133), + 63: uint16(34135), + 64: uint16(34136), + 65: uint16(34138), + 66: uint16(34139), + 67: uint16(34140), + 68: uint16(34141), + 69: uint16(34143), + 70: uint16(34144), + 71: uint16(34145), + 72: uint16(34146), + 73: uint16(34147), + 74: uint16(34149), + 75: uint16(34150), + 76: uint16(34151), + 77: uint16(34153), + 78: uint16(34154), + 79: uint16(34155), + 80: uint16(34156), + 81: uint16(34157), + 82: uint16(34158), + 83: uint16(34159), + 84: uint16(34160), + 85: uint16(34161), + 86: uint16(34163), + 87: uint16(34165), + 88: uint16(34166), + 89: uint16(34167), + 90: uint16(34168), + 91: uint16(34172), + 92: uint16(34173), + 93: uint16(34175), + 94: uint16(34176), + 95: uint16(34177), + 96: uint16(30465), + 97: uint16(30427), + 98: uint16(21097), + 99: uint16(32988), + 100: uint16(22307), + 101: uint16(24072), + 102: uint16(22833), + 103: uint16(29422), + 104: uint16(26045), + 105: uint16(28287), + 106: uint16(35799), + 107: uint16(23608), + 108: uint16(34417), + 109: uint16(21313), + 110: uint16(30707), + 111: uint16(25342), + 112: uint16(26102), + 113: uint16(20160), + 114: uint16(39135), + 115: uint16(34432), + 116: uint16(23454), + 117: uint16(35782), + 118: uint16(21490), + 119: uint16(30690), + 120: uint16(20351), + 121: uint16(23630), + 122: uint16(39542), + 123: uint16(22987), + 124: uint16(24335), + 125: uint16(31034), + 126: uint16(22763), + 127: uint16(19990), + 128: uint16(26623), + 129: uint16(20107), + 130: uint16(25325), + 131: uint16(35475), + 132: uint16(36893), + 133: uint16(21183), + 134: uint16(26159), + 135: uint16(21980), + 136: uint16(22124), + 137: uint16(36866), + 138: uint16(20181), + 139: uint16(20365), + 140: uint16(37322), + 141: uint16(39280), + 142: uint16(27663), + 143: uint16(24066), + 144: uint16(24643), + 145: uint16(23460), + 146: uint16(35270), + 147: uint16(35797), + 148: uint16(25910), + 149: uint16(25163), + 150: uint16(39318), + 151: uint16(23432), + 152: uint16(23551), + 153: uint16(25480), + 154: uint16(21806), + 155: uint16(21463), + 156: uint16(30246), + 157: uint16(20861), + 158: uint16(34092), + 159: uint16(26530), + 160: uint16(26803), + 161: uint16(27530), + 162: uint16(25234), + 163: uint16(36755), + 164: uint16(21460), + 165: uint16(33298), + 166: uint16(28113), + 167: uint16(30095), + 168: uint16(20070), + 169: uint16(36174), + 170: uint16(23408), + 171: uint16(29087), + 172: uint16(34223), + 173: uint16(26257), + 174: uint16(26329), + 175: uint16(32626), + 176: uint16(34560), + 177: uint16(40653), + 178: uint16(40736), + 179: uint16(23646), + 180: uint16(26415), + 181: uint16(36848), + 182: uint16(26641), + 183: uint16(26463), + 184: uint16(25101), + 185: uint16(31446), + 186: uint16(22661), + 187: uint16(24246), + 188: uint16(25968), + 189: uint16(28465), + }, + 74: { + 0: uint16(34178), + 1: uint16(34179), + 2: uint16(34182), + 3: uint16(34184), + 4: uint16(34185), + 5: uint16(34186), + 6: uint16(34187), + 7: uint16(34188), + 8: uint16(34189), + 9: uint16(34190), + 10: uint16(34192), + 11: uint16(34193), + 12: uint16(34194), + 13: uint16(34195), + 14: uint16(34196), + 15: uint16(34197), + 16: uint16(34198), + 17: uint16(34199), + 18: uint16(34200), + 19: uint16(34201), + 20: uint16(34202), + 21: uint16(34205), + 22: uint16(34206), + 23: uint16(34207), + 24: uint16(34208), + 25: uint16(34209), + 26: uint16(34210), + 27: uint16(34211), + 28: uint16(34213), + 29: uint16(34214), + 30: uint16(34215), + 31: uint16(34217), + 32: uint16(34219), + 33: uint16(34220), + 34: uint16(34221), + 35: uint16(34225), + 36: uint16(34226), + 37: uint16(34227), + 38: uint16(34228), + 39: uint16(34229), + 40: uint16(34230), + 41: uint16(34232), + 42: uint16(34234), + 43: uint16(34235), + 44: uint16(34236), + 45: uint16(34237), + 46: uint16(34238), + 47: uint16(34239), + 48: uint16(34240), + 49: uint16(34242), + 50: uint16(34243), + 51: uint16(34244), + 52: uint16(34245), + 53: uint16(34246), + 54: uint16(34247), + 55: uint16(34248), + 56: uint16(34250), + 57: uint16(34251), + 58: uint16(34252), + 59: uint16(34253), + 60: uint16(34254), + 61: uint16(34257), + 62: uint16(34258), + 63: uint16(34260), + 64: uint16(34262), + 65: uint16(34263), + 66: uint16(34264), + 67: uint16(34265), + 68: uint16(34266), + 69: uint16(34267), + 70: uint16(34269), + 71: uint16(34270), + 72: uint16(34271), + 73: uint16(34272), + 74: uint16(34273), + 75: uint16(34274), + 76: uint16(34275), + 77: uint16(34277), + 78: uint16(34278), + 79: uint16(34279), + 80: uint16(34280), + 81: uint16(34282), + 82: uint16(34283), + 83: uint16(34284), + 84: uint16(34285), + 85: uint16(34286), + 86: uint16(34287), + 87: uint16(34288), + 88: uint16(34289), + 89: uint16(34290), + 90: uint16(34291), + 91: uint16(34292), + 92: uint16(34293), + 93: uint16(34294), + 94: uint16(34295), + 95: uint16(34296), + 96: uint16(24661), + 97: uint16(21047), + 98: uint16(32781), + 99: uint16(25684), + 100: uint16(34928), + 101: uint16(29993), + 102: uint16(24069), + 103: uint16(26643), + 104: uint16(25332), + 105: uint16(38684), + 106: uint16(21452), + 107: uint16(29245), + 108: uint16(35841), + 109: uint16(27700), + 110: uint16(30561), + 111: uint16(31246), + 112: uint16(21550), + 113: uint16(30636), + 114: uint16(39034), + 115: uint16(33308), + 116: uint16(35828), + 117: uint16(30805), + 118: uint16(26388), + 119: uint16(28865), + 120: uint16(26031), + 121: uint16(25749), + 122: uint16(22070), + 123: uint16(24605), + 124: uint16(31169), + 125: uint16(21496), + 126: uint16(19997), + 127: uint16(27515), + 128: uint16(32902), + 129: uint16(23546), + 130: uint16(21987), + 131: uint16(22235), + 132: uint16(20282), + 133: uint16(20284), + 134: uint16(39282), + 135: uint16(24051), + 136: uint16(26494), + 137: uint16(32824), + 138: uint16(24578), + 139: uint16(39042), + 140: uint16(36865), + 141: uint16(23435), + 142: uint16(35772), + 143: uint16(35829), + 144: uint16(25628), + 145: uint16(33368), + 146: uint16(25822), + 147: uint16(22013), + 148: uint16(33487), + 149: uint16(37221), + 150: uint16(20439), + 151: uint16(32032), + 152: uint16(36895), + 153: uint16(31903), + 154: uint16(20723), + 155: uint16(22609), + 156: uint16(28335), + 157: uint16(23487), + 158: uint16(35785), + 159: uint16(32899), + 160: uint16(37240), + 161: uint16(33948), + 162: uint16(31639), + 163: uint16(34429), + 164: uint16(38539), + 165: uint16(38543), + 166: uint16(32485), + 167: uint16(39635), + 168: uint16(30862), + 169: uint16(23681), + 170: uint16(31319), + 171: uint16(36930), + 172: uint16(38567), + 173: uint16(31071), + 174: uint16(23385), + 175: uint16(25439), + 176: uint16(31499), + 177: uint16(34001), + 178: uint16(26797), + 179: uint16(21766), + 180: uint16(32553), + 181: uint16(29712), + 182: uint16(32034), + 183: uint16(38145), + 184: uint16(25152), + 185: uint16(22604), + 186: uint16(20182), + 187: uint16(23427), + 188: uint16(22905), + 189: uint16(22612), + }, + 75: { + 0: uint16(34297), + 1: uint16(34298), + 2: uint16(34300), + 3: uint16(34301), + 4: uint16(34302), + 5: uint16(34304), + 6: uint16(34305), + 7: uint16(34306), + 8: uint16(34307), + 9: uint16(34308), + 10: uint16(34310), + 11: uint16(34311), + 12: uint16(34312), + 13: uint16(34313), + 14: uint16(34314), + 15: uint16(34315), + 16: uint16(34316), + 17: uint16(34317), + 18: uint16(34318), + 19: uint16(34319), + 20: uint16(34320), + 21: uint16(34322), + 22: uint16(34323), + 23: uint16(34324), + 24: uint16(34325), + 25: uint16(34327), + 26: uint16(34328), + 27: uint16(34329), + 28: uint16(34330), + 29: uint16(34331), + 30: uint16(34332), + 31: uint16(34333), + 32: uint16(34334), + 33: uint16(34335), + 34: uint16(34336), + 35: uint16(34337), + 36: uint16(34338), + 37: uint16(34339), + 38: uint16(34340), + 39: uint16(34341), + 40: uint16(34342), + 41: uint16(34344), + 42: uint16(34346), + 43: uint16(34347), + 44: uint16(34348), + 45: uint16(34349), + 46: uint16(34350), + 47: uint16(34351), + 48: uint16(34352), + 49: uint16(34353), + 50: uint16(34354), + 51: uint16(34355), + 52: uint16(34356), + 53: uint16(34357), + 54: uint16(34358), + 55: uint16(34359), + 56: uint16(34361), + 57: uint16(34362), + 58: uint16(34363), + 59: uint16(34365), + 60: uint16(34366), + 61: uint16(34367), + 62: uint16(34368), + 63: uint16(34369), + 64: uint16(34370), + 65: uint16(34371), + 66: uint16(34372), + 67: uint16(34373), + 68: uint16(34374), + 69: uint16(34375), + 70: uint16(34376), + 71: uint16(34377), + 72: uint16(34378), + 73: uint16(34379), + 74: uint16(34380), + 75: uint16(34386), + 76: uint16(34387), + 77: uint16(34389), + 78: uint16(34390), + 79: uint16(34391), + 80: uint16(34392), + 81: uint16(34393), + 82: uint16(34395), + 83: uint16(34396), + 84: uint16(34397), + 85: uint16(34399), + 86: uint16(34400), + 87: uint16(34401), + 88: uint16(34403), + 89: uint16(34404), + 90: uint16(34405), + 91: uint16(34406), + 92: uint16(34407), + 93: uint16(34408), + 94: uint16(34409), + 95: uint16(34410), + 96: uint16(29549), + 97: uint16(25374), + 98: uint16(36427), + 99: uint16(36367), + 100: uint16(32974), + 101: uint16(33492), + 102: uint16(25260), + 103: uint16(21488), + 104: uint16(27888), + 105: uint16(37214), + 106: uint16(22826), + 107: uint16(24577), + 108: uint16(27760), + 109: uint16(22349), + 110: uint16(25674), + 111: uint16(36138), + 112: uint16(30251), + 113: uint16(28393), + 114: uint16(22363), + 115: uint16(27264), + 116: uint16(30192), + 117: uint16(28525), + 118: uint16(35885), + 119: uint16(35848), + 120: uint16(22374), + 121: uint16(27631), + 122: uint16(34962), + 123: uint16(30899), + 124: uint16(25506), + 125: uint16(21497), + 126: uint16(28845), + 127: uint16(27748), + 128: uint16(22616), + 129: uint16(25642), + 130: uint16(22530), + 131: uint16(26848), + 132: uint16(33179), + 133: uint16(21776), + 134: uint16(31958), + 135: uint16(20504), + 136: uint16(36538), + 137: uint16(28108), + 138: uint16(36255), + 139: uint16(28907), + 140: uint16(25487), + 141: uint16(28059), + 142: uint16(28372), + 143: uint16(32486), + 144: uint16(33796), + 145: uint16(26691), + 146: uint16(36867), + 147: uint16(28120), + 148: uint16(38518), + 149: uint16(35752), + 150: uint16(22871), + 151: uint16(29305), + 152: uint16(34276), + 153: uint16(33150), + 154: uint16(30140), + 155: uint16(35466), + 156: uint16(26799), + 157: uint16(21076), + 158: uint16(36386), + 159: uint16(38161), + 160: uint16(25552), + 161: uint16(39064), + 162: uint16(36420), + 163: uint16(21884), + 164: uint16(20307), + 165: uint16(26367), + 166: uint16(22159), + 167: uint16(24789), + 168: uint16(28053), + 169: uint16(21059), + 170: uint16(23625), + 171: uint16(22825), + 172: uint16(28155), + 173: uint16(22635), + 174: uint16(30000), + 175: uint16(29980), + 176: uint16(24684), + 177: uint16(33300), + 178: uint16(33094), + 179: uint16(25361), + 180: uint16(26465), + 181: uint16(36834), + 182: uint16(30522), + 183: uint16(36339), + 184: uint16(36148), + 185: uint16(38081), + 186: uint16(24086), + 187: uint16(21381), + 188: uint16(21548), + 189: uint16(28867), + }, + 76: { + 0: uint16(34413), + 1: uint16(34415), + 2: uint16(34416), + 3: uint16(34418), + 4: uint16(34419), + 5: uint16(34420), + 6: uint16(34421), + 7: uint16(34422), + 8: uint16(34423), + 9: uint16(34424), + 10: uint16(34435), + 11: uint16(34436), + 12: uint16(34437), + 13: uint16(34438), + 14: uint16(34439), + 15: uint16(34440), + 16: uint16(34441), + 17: uint16(34446), + 18: uint16(34447), + 19: uint16(34448), + 20: uint16(34449), + 21: uint16(34450), + 22: uint16(34452), + 23: uint16(34454), + 24: uint16(34455), + 25: uint16(34456), + 26: uint16(34457), + 27: uint16(34458), + 28: uint16(34459), + 29: uint16(34462), + 30: uint16(34463), + 31: uint16(34464), + 32: uint16(34465), + 33: uint16(34466), + 34: uint16(34469), + 35: uint16(34470), + 36: uint16(34475), + 37: uint16(34477), + 38: uint16(34478), + 39: uint16(34482), + 40: uint16(34483), + 41: uint16(34487), + 42: uint16(34488), + 43: uint16(34489), + 44: uint16(34491), + 45: uint16(34492), + 46: uint16(34493), + 47: uint16(34494), + 48: uint16(34495), + 49: uint16(34497), + 50: uint16(34498), + 51: uint16(34499), + 52: uint16(34501), + 53: uint16(34504), + 54: uint16(34508), + 55: uint16(34509), + 56: uint16(34514), + 57: uint16(34515), + 58: uint16(34517), + 59: uint16(34518), + 60: uint16(34519), + 61: uint16(34522), + 62: uint16(34524), + 63: uint16(34525), + 64: uint16(34528), + 65: uint16(34529), + 66: uint16(34530), + 67: uint16(34531), + 68: uint16(34533), + 69: uint16(34534), + 70: uint16(34535), + 71: uint16(34536), + 72: uint16(34538), + 73: uint16(34539), + 74: uint16(34540), + 75: uint16(34543), + 76: uint16(34549), + 77: uint16(34550), + 78: uint16(34551), + 79: uint16(34554), + 80: uint16(34555), + 81: uint16(34556), + 82: uint16(34557), + 83: uint16(34559), + 84: uint16(34561), + 85: uint16(34564), + 86: uint16(34565), + 87: uint16(34566), + 88: uint16(34571), + 89: uint16(34572), + 90: uint16(34574), + 91: uint16(34575), + 92: uint16(34576), + 93: uint16(34577), + 94: uint16(34580), + 95: uint16(34582), + 96: uint16(27712), + 97: uint16(24311), + 98: uint16(20572), + 99: uint16(20141), + 100: uint16(24237), + 101: uint16(25402), + 102: uint16(33351), + 103: uint16(36890), + 104: uint16(26704), + 105: uint16(37230), + 106: uint16(30643), + 107: uint16(21516), + 108: uint16(38108), + 109: uint16(24420), + 110: uint16(31461), + 111: uint16(26742), + 112: uint16(25413), + 113: uint16(31570), + 114: uint16(32479), + 115: uint16(30171), + 116: uint16(20599), + 117: uint16(25237), + 118: uint16(22836), + 119: uint16(36879), + 120: uint16(20984), + 121: uint16(31171), + 122: uint16(31361), + 123: uint16(22270), + 124: uint16(24466), + 125: uint16(36884), + 126: uint16(28034), + 127: uint16(23648), + 128: uint16(22303), + 129: uint16(21520), + 130: uint16(20820), + 131: uint16(28237), + 132: uint16(22242), + 133: uint16(25512), + 134: uint16(39059), + 135: uint16(33151), + 136: uint16(34581), + 137: uint16(35114), + 138: uint16(36864), + 139: uint16(21534), + 140: uint16(23663), + 141: uint16(33216), + 142: uint16(25302), + 143: uint16(25176), + 144: uint16(33073), + 145: uint16(40501), + 146: uint16(38464), + 147: uint16(39534), + 148: uint16(39548), + 149: uint16(26925), + 150: uint16(22949), + 151: uint16(25299), + 152: uint16(21822), + 153: uint16(25366), + 154: uint16(21703), + 155: uint16(34521), + 156: uint16(27964), + 157: uint16(23043), + 158: uint16(29926), + 159: uint16(34972), + 160: uint16(27498), + 161: uint16(22806), + 162: uint16(35916), + 163: uint16(24367), + 164: uint16(28286), + 165: uint16(29609), + 166: uint16(39037), + 167: uint16(20024), + 168: uint16(28919), + 169: uint16(23436), + 170: uint16(30871), + 171: uint16(25405), + 172: uint16(26202), + 173: uint16(30358), + 174: uint16(24779), + 175: uint16(23451), + 176: uint16(23113), + 177: uint16(19975), + 178: uint16(33109), + 179: uint16(27754), + 180: uint16(29579), + 181: uint16(20129), + 182: uint16(26505), + 183: uint16(32593), + 184: uint16(24448), + 185: uint16(26106), + 186: uint16(26395), + 187: uint16(24536), + 188: uint16(22916), + 189: uint16(23041), + }, + 77: { + 0: uint16(34585), + 1: uint16(34587), + 2: uint16(34589), + 3: uint16(34591), + 4: uint16(34592), + 5: uint16(34596), + 6: uint16(34598), + 7: uint16(34599), + 8: uint16(34600), + 9: uint16(34602), + 10: uint16(34603), + 11: uint16(34604), + 12: uint16(34605), + 13: uint16(34607), + 14: uint16(34608), + 15: uint16(34610), + 16: uint16(34611), + 17: uint16(34613), + 18: uint16(34614), + 19: uint16(34616), + 20: uint16(34617), + 21: uint16(34618), + 22: uint16(34620), + 23: uint16(34621), + 24: uint16(34624), + 25: uint16(34625), + 26: uint16(34626), + 27: uint16(34627), + 28: uint16(34628), + 29: uint16(34629), + 30: uint16(34630), + 31: uint16(34634), + 32: uint16(34635), + 33: uint16(34637), + 34: uint16(34639), + 35: uint16(34640), + 36: uint16(34641), + 37: uint16(34642), + 38: uint16(34644), + 39: uint16(34645), + 40: uint16(34646), + 41: uint16(34648), + 42: uint16(34650), + 43: uint16(34651), + 44: uint16(34652), + 45: uint16(34653), + 46: uint16(34654), + 47: uint16(34655), + 48: uint16(34657), + 49: uint16(34658), + 50: uint16(34662), + 51: uint16(34663), + 52: uint16(34664), + 53: uint16(34665), + 54: uint16(34666), + 55: uint16(34667), + 56: uint16(34668), + 57: uint16(34669), + 58: uint16(34671), + 59: uint16(34673), + 60: uint16(34674), + 61: uint16(34675), + 62: uint16(34677), + 63: uint16(34679), + 64: uint16(34680), + 65: uint16(34681), + 66: uint16(34682), + 67: uint16(34687), + 68: uint16(34688), + 69: uint16(34689), + 70: uint16(34692), + 71: uint16(34694), + 72: uint16(34695), + 73: uint16(34697), + 74: uint16(34698), + 75: uint16(34700), + 76: uint16(34702), + 77: uint16(34703), + 78: uint16(34704), + 79: uint16(34705), + 80: uint16(34706), + 81: uint16(34708), + 82: uint16(34709), + 83: uint16(34710), + 84: uint16(34712), + 85: uint16(34713), + 86: uint16(34714), + 87: uint16(34715), + 88: uint16(34716), + 89: uint16(34717), + 90: uint16(34718), + 91: uint16(34720), + 92: uint16(34721), + 93: uint16(34722), + 94: uint16(34723), + 95: uint16(34724), + 96: uint16(24013), + 97: uint16(24494), + 98: uint16(21361), + 99: uint16(38886), + 100: uint16(36829), + 101: uint16(26693), + 102: uint16(22260), + 103: uint16(21807), + 104: uint16(24799), + 105: uint16(20026), + 106: uint16(28493), + 107: uint16(32500), + 108: uint16(33479), + 109: uint16(33806), + 110: uint16(22996), + 111: uint16(20255), + 112: uint16(20266), + 113: uint16(23614), + 114: uint16(32428), + 115: uint16(26410), + 116: uint16(34074), + 117: uint16(21619), + 118: uint16(30031), + 119: uint16(32963), + 120: uint16(21890), + 121: uint16(39759), + 122: uint16(20301), + 123: uint16(28205), + 124: uint16(35859), + 125: uint16(23561), + 126: uint16(24944), + 127: uint16(21355), + 128: uint16(30239), + 129: uint16(28201), + 130: uint16(34442), + 131: uint16(25991), + 132: uint16(38395), + 133: uint16(32441), + 134: uint16(21563), + 135: uint16(31283), + 136: uint16(32010), + 137: uint16(38382), + 138: uint16(21985), + 139: uint16(32705), + 140: uint16(29934), + 141: uint16(25373), + 142: uint16(34583), + 143: uint16(28065), + 144: uint16(31389), + 145: uint16(25105), + 146: uint16(26017), + 147: uint16(21351), + 148: uint16(25569), + 149: uint16(27779), + 150: uint16(24043), + 151: uint16(21596), + 152: uint16(38056), + 153: uint16(20044), + 154: uint16(27745), + 155: uint16(35820), + 156: uint16(23627), + 157: uint16(26080), + 158: uint16(33436), + 159: uint16(26791), + 160: uint16(21566), + 161: uint16(21556), + 162: uint16(27595), + 163: uint16(27494), + 164: uint16(20116), + 165: uint16(25410), + 166: uint16(21320), + 167: uint16(33310), + 168: uint16(20237), + 169: uint16(20398), + 170: uint16(22366), + 171: uint16(25098), + 172: uint16(38654), + 173: uint16(26212), + 174: uint16(29289), + 175: uint16(21247), + 176: uint16(21153), + 177: uint16(24735), + 178: uint16(35823), + 179: uint16(26132), + 180: uint16(29081), + 181: uint16(26512), + 182: uint16(35199), + 183: uint16(30802), + 184: uint16(30717), + 185: uint16(26224), + 186: uint16(22075), + 187: uint16(21560), + 188: uint16(38177), + 189: uint16(29306), + }, + 78: { + 0: uint16(34725), + 1: uint16(34726), + 2: uint16(34727), + 3: uint16(34729), + 4: uint16(34730), + 5: uint16(34734), + 6: uint16(34736), + 7: uint16(34737), + 8: uint16(34738), + 9: uint16(34740), + 10: uint16(34742), + 11: uint16(34743), + 12: uint16(34744), + 13: uint16(34745), + 14: uint16(34747), + 15: uint16(34748), + 16: uint16(34750), + 17: uint16(34751), + 18: uint16(34753), + 19: uint16(34754), + 20: uint16(34755), + 21: uint16(34756), + 22: uint16(34757), + 23: uint16(34759), + 24: uint16(34760), + 25: uint16(34761), + 26: uint16(34764), + 27: uint16(34765), + 28: uint16(34766), + 29: uint16(34767), + 30: uint16(34768), + 31: uint16(34772), + 32: uint16(34773), + 33: uint16(34774), + 34: uint16(34775), + 35: uint16(34776), + 36: uint16(34777), + 37: uint16(34778), + 38: uint16(34780), + 39: uint16(34781), + 40: uint16(34782), + 41: uint16(34783), + 42: uint16(34785), + 43: uint16(34786), + 44: uint16(34787), + 45: uint16(34788), + 46: uint16(34790), + 47: uint16(34791), + 48: uint16(34792), + 49: uint16(34793), + 50: uint16(34795), + 51: uint16(34796), + 52: uint16(34797), + 53: uint16(34799), + 54: uint16(34800), + 55: uint16(34801), + 56: uint16(34802), + 57: uint16(34803), + 58: uint16(34804), + 59: uint16(34805), + 60: uint16(34806), + 61: uint16(34807), + 62: uint16(34808), + 63: uint16(34810), + 64: uint16(34811), + 65: uint16(34812), + 66: uint16(34813), + 67: uint16(34815), + 68: uint16(34816), + 69: uint16(34817), + 70: uint16(34818), + 71: uint16(34820), + 72: uint16(34821), + 73: uint16(34822), + 74: uint16(34823), + 75: uint16(34824), + 76: uint16(34825), + 77: uint16(34827), + 78: uint16(34828), + 79: uint16(34829), + 80: uint16(34830), + 81: uint16(34831), + 82: uint16(34832), + 83: uint16(34833), + 84: uint16(34834), + 85: uint16(34836), + 86: uint16(34839), + 87: uint16(34840), + 88: uint16(34841), + 89: uint16(34842), + 90: uint16(34844), + 91: uint16(34845), + 92: uint16(34846), + 93: uint16(34847), + 94: uint16(34848), + 95: uint16(34851), + 96: uint16(31232), + 97: uint16(24687), + 98: uint16(24076), + 99: uint16(24713), + 100: uint16(33181), + 101: uint16(22805), + 102: uint16(24796), + 103: uint16(29060), + 104: uint16(28911), + 105: uint16(28330), + 106: uint16(27728), + 107: uint16(29312), + 108: uint16(27268), + 109: uint16(34989), + 110: uint16(24109), + 111: uint16(20064), + 112: uint16(23219), + 113: uint16(21916), + 114: uint16(38115), + 115: uint16(27927), + 116: uint16(31995), + 117: uint16(38553), + 118: uint16(25103), + 119: uint16(32454), + 120: uint16(30606), + 121: uint16(34430), + 122: uint16(21283), + 123: uint16(38686), + 124: uint16(36758), + 125: uint16(26247), + 126: uint16(23777), + 127: uint16(20384), + 128: uint16(29421), + 129: uint16(19979), + 130: uint16(21414), + 131: uint16(22799), + 132: uint16(21523), + 133: uint16(25472), + 134: uint16(38184), + 135: uint16(20808), + 136: uint16(20185), + 137: uint16(40092), + 138: uint16(32420), + 139: uint16(21688), + 140: uint16(36132), + 141: uint16(34900), + 142: uint16(33335), + 143: uint16(38386), + 144: uint16(28046), + 145: uint16(24358), + 146: uint16(23244), + 147: uint16(26174), + 148: uint16(38505), + 149: uint16(29616), + 150: uint16(29486), + 151: uint16(21439), + 152: uint16(33146), + 153: uint16(39301), + 154: uint16(32673), + 155: uint16(23466), + 156: uint16(38519), + 157: uint16(38480), + 158: uint16(32447), + 159: uint16(30456), + 160: uint16(21410), + 161: uint16(38262), + 162: uint16(39321), + 163: uint16(31665), + 164: uint16(35140), + 165: uint16(28248), + 166: uint16(20065), + 167: uint16(32724), + 168: uint16(31077), + 169: uint16(35814), + 170: uint16(24819), + 171: uint16(21709), + 172: uint16(20139), + 173: uint16(39033), + 174: uint16(24055), + 175: uint16(27233), + 176: uint16(20687), + 177: uint16(21521), + 178: uint16(35937), + 179: uint16(33831), + 180: uint16(30813), + 181: uint16(38660), + 182: uint16(21066), + 183: uint16(21742), + 184: uint16(22179), + 185: uint16(38144), + 186: uint16(28040), + 187: uint16(23477), + 188: uint16(28102), + 189: uint16(26195), + }, + 79: { + 0: uint16(34852), + 1: uint16(34853), + 2: uint16(34854), + 3: uint16(34855), + 4: uint16(34856), + 5: uint16(34857), + 6: uint16(34858), + 7: uint16(34859), + 8: uint16(34860), + 9: uint16(34861), + 10: uint16(34862), + 11: uint16(34863), + 12: uint16(34864), + 13: uint16(34865), + 14: uint16(34867), + 15: uint16(34868), + 16: uint16(34869), + 17: uint16(34870), + 18: uint16(34871), + 19: uint16(34872), + 20: uint16(34874), + 21: uint16(34875), + 22: uint16(34877), + 23: uint16(34878), + 24: uint16(34879), + 25: uint16(34881), + 26: uint16(34882), + 27: uint16(34883), + 28: uint16(34886), + 29: uint16(34887), + 30: uint16(34888), + 31: uint16(34889), + 32: uint16(34890), + 33: uint16(34891), + 34: uint16(34894), + 35: uint16(34895), + 36: uint16(34896), + 37: uint16(34897), + 38: uint16(34898), + 39: uint16(34899), + 40: uint16(34901), + 41: uint16(34902), + 42: uint16(34904), + 43: uint16(34906), + 44: uint16(34907), + 45: uint16(34908), + 46: uint16(34909), + 47: uint16(34910), + 48: uint16(34911), + 49: uint16(34912), + 50: uint16(34918), + 51: uint16(34919), + 52: uint16(34922), + 53: uint16(34925), + 54: uint16(34927), + 55: uint16(34929), + 56: uint16(34931), + 57: uint16(34932), + 58: uint16(34933), + 59: uint16(34934), + 60: uint16(34936), + 61: uint16(34937), + 62: uint16(34938), + 63: uint16(34939), + 64: uint16(34940), + 65: uint16(34944), + 66: uint16(34947), + 67: uint16(34950), + 68: uint16(34951), + 69: uint16(34953), + 70: uint16(34954), + 71: uint16(34956), + 72: uint16(34958), + 73: uint16(34959), + 74: uint16(34960), + 75: uint16(34961), + 76: uint16(34963), + 77: uint16(34964), + 78: uint16(34965), + 79: uint16(34967), + 80: uint16(34968), + 81: uint16(34969), + 82: uint16(34970), + 83: uint16(34971), + 84: uint16(34973), + 85: uint16(34974), + 86: uint16(34975), + 87: uint16(34976), + 88: uint16(34977), + 89: uint16(34979), + 90: uint16(34981), + 91: uint16(34982), + 92: uint16(34983), + 93: uint16(34984), + 94: uint16(34985), + 95: uint16(34986), + 96: uint16(23567), + 97: uint16(23389), + 98: uint16(26657), + 99: uint16(32918), + 100: uint16(21880), + 101: uint16(31505), + 102: uint16(25928), + 103: uint16(26964), + 104: uint16(20123), + 105: uint16(27463), + 106: uint16(34638), + 107: uint16(38795), + 108: uint16(21327), + 109: uint16(25375), + 110: uint16(25658), + 111: uint16(37034), + 112: uint16(26012), + 113: uint16(32961), + 114: uint16(35856), + 115: uint16(20889), + 116: uint16(26800), + 117: uint16(21368), + 118: uint16(34809), + 119: uint16(25032), + 120: uint16(27844), + 121: uint16(27899), + 122: uint16(35874), + 123: uint16(23633), + 124: uint16(34218), + 125: uint16(33455), + 126: uint16(38156), + 127: uint16(27427), + 128: uint16(36763), + 129: uint16(26032), + 130: uint16(24571), + 131: uint16(24515), + 132: uint16(20449), + 133: uint16(34885), + 134: uint16(26143), + 135: uint16(33125), + 136: uint16(29481), + 137: uint16(24826), + 138: uint16(20852), + 139: uint16(21009), + 140: uint16(22411), + 141: uint16(24418), + 142: uint16(37026), + 143: uint16(34892), + 144: uint16(37266), + 145: uint16(24184), + 146: uint16(26447), + 147: uint16(24615), + 148: uint16(22995), + 149: uint16(20804), + 150: uint16(20982), + 151: uint16(33016), + 152: uint16(21256), + 153: uint16(27769), + 154: uint16(38596), + 155: uint16(29066), + 156: uint16(20241), + 157: uint16(20462), + 158: uint16(32670), + 159: uint16(26429), + 160: uint16(21957), + 161: uint16(38152), + 162: uint16(31168), + 163: uint16(34966), + 164: uint16(32483), + 165: uint16(22687), + 166: uint16(25100), + 167: uint16(38656), + 168: uint16(34394), + 169: uint16(22040), + 170: uint16(39035), + 171: uint16(24464), + 172: uint16(35768), + 173: uint16(33988), + 174: uint16(37207), + 175: uint16(21465), + 176: uint16(26093), + 177: uint16(24207), + 178: uint16(30044), + 179: uint16(24676), + 180: uint16(32110), + 181: uint16(23167), + 182: uint16(32490), + 183: uint16(32493), + 184: uint16(36713), + 185: uint16(21927), + 186: uint16(23459), + 187: uint16(24748), + 188: uint16(26059), + 189: uint16(29572), + }, + 80: { + 0: uint16(34988), + 1: uint16(34990), + 2: uint16(34991), + 3: uint16(34992), + 4: uint16(34994), + 5: uint16(34995), + 6: uint16(34996), + 7: uint16(34997), + 8: uint16(34998), + 9: uint16(35000), + 10: uint16(35001), + 11: uint16(35002), + 12: uint16(35003), + 13: uint16(35005), + 14: uint16(35006), + 15: uint16(35007), + 16: uint16(35008), + 17: uint16(35011), + 18: uint16(35012), + 19: uint16(35015), + 20: uint16(35016), + 21: uint16(35018), + 22: uint16(35019), + 23: uint16(35020), + 24: uint16(35021), + 25: uint16(35023), + 26: uint16(35024), + 27: uint16(35025), + 28: uint16(35027), + 29: uint16(35030), + 30: uint16(35031), + 31: uint16(35034), + 32: uint16(35035), + 33: uint16(35036), + 34: uint16(35037), + 35: uint16(35038), + 36: uint16(35040), + 37: uint16(35041), + 38: uint16(35046), + 39: uint16(35047), + 40: uint16(35049), + 41: uint16(35050), + 42: uint16(35051), + 43: uint16(35052), + 44: uint16(35053), + 45: uint16(35054), + 46: uint16(35055), + 47: uint16(35058), + 48: uint16(35061), + 49: uint16(35062), + 50: uint16(35063), + 51: uint16(35066), + 52: uint16(35067), + 53: uint16(35069), + 54: uint16(35071), + 55: uint16(35072), + 56: uint16(35073), + 57: uint16(35075), + 58: uint16(35076), + 59: uint16(35077), + 60: uint16(35078), + 61: uint16(35079), + 62: uint16(35080), + 63: uint16(35081), + 64: uint16(35083), + 65: uint16(35084), + 66: uint16(35085), + 67: uint16(35086), + 68: uint16(35087), + 69: uint16(35089), + 70: uint16(35092), + 71: uint16(35093), + 72: uint16(35094), + 73: uint16(35095), + 74: uint16(35096), + 75: uint16(35100), + 76: uint16(35101), + 77: uint16(35102), + 78: uint16(35103), + 79: uint16(35104), + 80: uint16(35106), + 81: uint16(35107), + 82: uint16(35108), + 83: uint16(35110), + 84: uint16(35111), + 85: uint16(35112), + 86: uint16(35113), + 87: uint16(35116), + 88: uint16(35117), + 89: uint16(35118), + 90: uint16(35119), + 91: uint16(35121), + 92: uint16(35122), + 93: uint16(35123), + 94: uint16(35125), + 95: uint16(35127), + 96: uint16(36873), + 97: uint16(30307), + 98: uint16(30505), + 99: uint16(32474), + 100: uint16(38772), + 101: uint16(34203), + 102: uint16(23398), + 103: uint16(31348), + 104: uint16(38634), + 105: uint16(34880), + 106: uint16(21195), + 107: uint16(29071), + 108: uint16(24490), + 109: uint16(26092), + 110: uint16(35810), + 111: uint16(23547), + 112: uint16(39535), + 113: uint16(24033), + 114: uint16(27529), + 115: uint16(27739), + 116: uint16(35757), + 117: uint16(35759), + 118: uint16(36874), + 119: uint16(36805), + 120: uint16(21387), + 121: uint16(25276), + 122: uint16(40486), + 123: uint16(40493), + 124: uint16(21568), + 125: uint16(20011), + 126: uint16(33469), + 127: uint16(29273), + 128: uint16(34460), + 129: uint16(23830), + 130: uint16(34905), + 131: uint16(28079), + 132: uint16(38597), + 133: uint16(21713), + 134: uint16(20122), + 135: uint16(35766), + 136: uint16(28937), + 137: uint16(21693), + 138: uint16(38409), + 139: uint16(28895), + 140: uint16(28153), + 141: uint16(30416), + 142: uint16(20005), + 143: uint16(30740), + 144: uint16(34578), + 145: uint16(23721), + 146: uint16(24310), + 147: uint16(35328), + 148: uint16(39068), + 149: uint16(38414), + 150: uint16(28814), + 151: uint16(27839), + 152: uint16(22852), + 153: uint16(25513), + 154: uint16(30524), + 155: uint16(34893), + 156: uint16(28436), + 157: uint16(33395), + 158: uint16(22576), + 159: uint16(29141), + 160: uint16(21388), + 161: uint16(30746), + 162: uint16(38593), + 163: uint16(21761), + 164: uint16(24422), + 165: uint16(28976), + 166: uint16(23476), + 167: uint16(35866), + 168: uint16(39564), + 169: uint16(27523), + 170: uint16(22830), + 171: uint16(40495), + 172: uint16(31207), + 173: uint16(26472), + 174: uint16(25196), + 175: uint16(20335), + 176: uint16(30113), + 177: uint16(32650), + 178: uint16(27915), + 179: uint16(38451), + 180: uint16(27687), + 181: uint16(20208), + 182: uint16(30162), + 183: uint16(20859), + 184: uint16(26679), + 185: uint16(28478), + 186: uint16(36992), + 187: uint16(33136), + 188: uint16(22934), + 189: uint16(29814), + }, + 81: { + 0: uint16(35128), + 1: uint16(35129), + 2: uint16(35130), + 3: uint16(35131), + 4: uint16(35132), + 5: uint16(35133), + 6: uint16(35134), + 7: uint16(35135), + 8: uint16(35136), + 9: uint16(35138), + 10: uint16(35139), + 11: uint16(35141), + 12: uint16(35142), + 13: uint16(35143), + 14: uint16(35144), + 15: uint16(35145), + 16: uint16(35146), + 17: uint16(35147), + 18: uint16(35148), + 19: uint16(35149), + 20: uint16(35150), + 21: uint16(35151), + 22: uint16(35152), + 23: uint16(35153), + 24: uint16(35154), + 25: uint16(35155), + 26: uint16(35156), + 27: uint16(35157), + 28: uint16(35158), + 29: uint16(35159), + 30: uint16(35160), + 31: uint16(35161), + 32: uint16(35162), + 33: uint16(35163), + 34: uint16(35164), + 35: uint16(35165), + 36: uint16(35168), + 37: uint16(35169), + 38: uint16(35170), + 39: uint16(35171), + 40: uint16(35172), + 41: uint16(35173), + 42: uint16(35175), + 43: uint16(35176), + 44: uint16(35177), + 45: uint16(35178), + 46: uint16(35179), + 47: uint16(35180), + 48: uint16(35181), + 49: uint16(35182), + 50: uint16(35183), + 51: uint16(35184), + 52: uint16(35185), + 53: uint16(35186), + 54: uint16(35187), + 55: uint16(35188), + 56: uint16(35189), + 57: uint16(35190), + 58: uint16(35191), + 59: uint16(35192), + 60: uint16(35193), + 61: uint16(35194), + 62: uint16(35196), + 63: uint16(35197), + 64: uint16(35198), + 65: uint16(35200), + 66: uint16(35202), + 67: uint16(35204), + 68: uint16(35205), + 69: uint16(35207), + 70: uint16(35208), + 71: uint16(35209), + 72: uint16(35210), + 73: uint16(35211), + 74: uint16(35212), + 75: uint16(35213), + 76: uint16(35214), + 77: uint16(35215), + 78: uint16(35216), + 79: uint16(35217), + 80: uint16(35218), + 81: uint16(35219), + 82: uint16(35220), + 83: uint16(35221), + 84: uint16(35222), + 85: uint16(35223), + 86: uint16(35224), + 87: uint16(35225), + 88: uint16(35226), + 89: uint16(35227), + 90: uint16(35228), + 91: uint16(35229), + 92: uint16(35230), + 93: uint16(35231), + 94: uint16(35232), + 95: uint16(35233), + 96: uint16(25671), + 97: uint16(23591), + 98: uint16(36965), + 99: uint16(31377), + 100: uint16(35875), + 101: uint16(23002), + 102: uint16(21676), + 103: uint16(33280), + 104: uint16(33647), + 105: uint16(35201), + 106: uint16(32768), + 107: uint16(26928), + 108: uint16(22094), + 109: uint16(32822), + 110: uint16(29239), + 111: uint16(37326), + 112: uint16(20918), + 113: uint16(20063), + 114: uint16(39029), + 115: uint16(25494), + 116: uint16(19994), + 117: uint16(21494), + 118: uint16(26355), + 119: uint16(33099), + 120: uint16(22812), + 121: uint16(28082), + 122: uint16(19968), + 123: uint16(22777), + 124: uint16(21307), + 125: uint16(25558), + 126: uint16(38129), + 127: uint16(20381), + 128: uint16(20234), + 129: uint16(34915), + 130: uint16(39056), + 131: uint16(22839), + 132: uint16(36951), + 133: uint16(31227), + 134: uint16(20202), + 135: uint16(33008), + 136: uint16(30097), + 137: uint16(27778), + 138: uint16(23452), + 139: uint16(23016), + 140: uint16(24413), + 141: uint16(26885), + 142: uint16(34433), + 143: uint16(20506), + 144: uint16(24050), + 145: uint16(20057), + 146: uint16(30691), + 147: uint16(20197), + 148: uint16(33402), + 149: uint16(25233), + 150: uint16(26131), + 151: uint16(37009), + 152: uint16(23673), + 153: uint16(20159), + 154: uint16(24441), + 155: uint16(33222), + 156: uint16(36920), + 157: uint16(32900), + 158: uint16(30123), + 159: uint16(20134), + 160: uint16(35028), + 161: uint16(24847), + 162: uint16(27589), + 163: uint16(24518), + 164: uint16(20041), + 165: uint16(30410), + 166: uint16(28322), + 167: uint16(35811), + 168: uint16(35758), + 169: uint16(35850), + 170: uint16(35793), + 171: uint16(24322), + 172: uint16(32764), + 173: uint16(32716), + 174: uint16(32462), + 175: uint16(33589), + 176: uint16(33643), + 177: uint16(22240), + 178: uint16(27575), + 179: uint16(38899), + 180: uint16(38452), + 181: uint16(23035), + 182: uint16(21535), + 183: uint16(38134), + 184: uint16(28139), + 185: uint16(23493), + 186: uint16(39278), + 187: uint16(23609), + 188: uint16(24341), + 189: uint16(38544), + }, + 82: { + 0: uint16(35234), + 1: uint16(35235), + 2: uint16(35236), + 3: uint16(35237), + 4: uint16(35238), + 5: uint16(35239), + 6: uint16(35240), + 7: uint16(35241), + 8: uint16(35242), + 9: uint16(35243), + 10: uint16(35244), + 11: uint16(35245), + 12: uint16(35246), + 13: uint16(35247), + 14: uint16(35248), + 15: uint16(35249), + 16: uint16(35250), + 17: uint16(35251), + 18: uint16(35252), + 19: uint16(35253), + 20: uint16(35254), + 21: uint16(35255), + 22: uint16(35256), + 23: uint16(35257), + 24: uint16(35258), + 25: uint16(35259), + 26: uint16(35260), + 27: uint16(35261), + 28: uint16(35262), + 29: uint16(35263), + 30: uint16(35264), + 31: uint16(35267), + 32: uint16(35277), + 33: uint16(35283), + 34: uint16(35284), + 35: uint16(35285), + 36: uint16(35287), + 37: uint16(35288), + 38: uint16(35289), + 39: uint16(35291), + 40: uint16(35293), + 41: uint16(35295), + 42: uint16(35296), + 43: uint16(35297), + 44: uint16(35298), + 45: uint16(35300), + 46: uint16(35303), + 47: uint16(35304), + 48: uint16(35305), + 49: uint16(35306), + 50: uint16(35308), + 51: uint16(35309), + 52: uint16(35310), + 53: uint16(35312), + 54: uint16(35313), + 55: uint16(35314), + 56: uint16(35316), + 57: uint16(35317), + 58: uint16(35318), + 59: uint16(35319), + 60: uint16(35320), + 61: uint16(35321), + 62: uint16(35322), + 63: uint16(35323), + 64: uint16(35324), + 65: uint16(35325), + 66: uint16(35326), + 67: uint16(35327), + 68: uint16(35329), + 69: uint16(35330), + 70: uint16(35331), + 71: uint16(35332), + 72: uint16(35333), + 73: uint16(35334), + 74: uint16(35336), + 75: uint16(35337), + 76: uint16(35338), + 77: uint16(35339), + 78: uint16(35340), + 79: uint16(35341), + 80: uint16(35342), + 81: uint16(35343), + 82: uint16(35344), + 83: uint16(35345), + 84: uint16(35346), + 85: uint16(35347), + 86: uint16(35348), + 87: uint16(35349), + 88: uint16(35350), + 89: uint16(35351), + 90: uint16(35352), + 91: uint16(35353), + 92: uint16(35354), + 93: uint16(35355), + 94: uint16(35356), + 95: uint16(35357), + 96: uint16(21360), + 97: uint16(33521), + 98: uint16(27185), + 99: uint16(23156), + 100: uint16(40560), + 101: uint16(24212), + 102: uint16(32552), + 103: uint16(33721), + 104: uint16(33828), + 105: uint16(33829), + 106: uint16(33639), + 107: uint16(34631), + 108: uint16(36814), + 109: uint16(36194), + 110: uint16(30408), + 111: uint16(24433), + 112: uint16(39062), + 113: uint16(30828), + 114: uint16(26144), + 115: uint16(21727), + 116: uint16(25317), + 117: uint16(20323), + 118: uint16(33219), + 119: uint16(30152), + 120: uint16(24248), + 121: uint16(38605), + 122: uint16(36362), + 123: uint16(34553), + 124: uint16(21647), + 125: uint16(27891), + 126: uint16(28044), + 127: uint16(27704), + 128: uint16(24703), + 129: uint16(21191), + 130: uint16(29992), + 131: uint16(24189), + 132: uint16(20248), + 133: uint16(24736), + 134: uint16(24551), + 135: uint16(23588), + 136: uint16(30001), + 137: uint16(37038), + 138: uint16(38080), + 139: uint16(29369), + 140: uint16(27833), + 141: uint16(28216), + 142: uint16(37193), + 143: uint16(26377), + 144: uint16(21451), + 145: uint16(21491), + 146: uint16(20305), + 147: uint16(37321), + 148: uint16(35825), + 149: uint16(21448), + 150: uint16(24188), + 151: uint16(36802), + 152: uint16(28132), + 153: uint16(20110), + 154: uint16(30402), + 155: uint16(27014), + 156: uint16(34398), + 157: uint16(24858), + 158: uint16(33286), + 159: uint16(20313), + 160: uint16(20446), + 161: uint16(36926), + 162: uint16(40060), + 163: uint16(24841), + 164: uint16(28189), + 165: uint16(28180), + 166: uint16(38533), + 167: uint16(20104), + 168: uint16(23089), + 169: uint16(38632), + 170: uint16(19982), + 171: uint16(23679), + 172: uint16(31161), + 173: uint16(23431), + 174: uint16(35821), + 175: uint16(32701), + 176: uint16(29577), + 177: uint16(22495), + 178: uint16(33419), + 179: uint16(37057), + 180: uint16(21505), + 181: uint16(36935), + 182: uint16(21947), + 183: uint16(23786), + 184: uint16(24481), + 185: uint16(24840), + 186: uint16(27442), + 187: uint16(29425), + 188: uint16(32946), + 189: uint16(35465), + }, + 83: { + 0: uint16(35358), + 1: uint16(35359), + 2: uint16(35360), + 3: uint16(35361), + 4: uint16(35362), + 5: uint16(35363), + 6: uint16(35364), + 7: uint16(35365), + 8: uint16(35366), + 9: uint16(35367), + 10: uint16(35368), + 11: uint16(35369), + 12: uint16(35370), + 13: uint16(35371), + 14: uint16(35372), + 15: uint16(35373), + 16: uint16(35374), + 17: uint16(35375), + 18: uint16(35376), + 19: uint16(35377), + 20: uint16(35378), + 21: uint16(35379), + 22: uint16(35380), + 23: uint16(35381), + 24: uint16(35382), + 25: uint16(35383), + 26: uint16(35384), + 27: uint16(35385), + 28: uint16(35386), + 29: uint16(35387), + 30: uint16(35388), + 31: uint16(35389), + 32: uint16(35391), + 33: uint16(35392), + 34: uint16(35393), + 35: uint16(35394), + 36: uint16(35395), + 37: uint16(35396), + 38: uint16(35397), + 39: uint16(35398), + 40: uint16(35399), + 41: uint16(35401), + 42: uint16(35402), + 43: uint16(35403), + 44: uint16(35404), + 45: uint16(35405), + 46: uint16(35406), + 47: uint16(35407), + 48: uint16(35408), + 49: uint16(35409), + 50: uint16(35410), + 51: uint16(35411), + 52: uint16(35412), + 53: uint16(35413), + 54: uint16(35414), + 55: uint16(35415), + 56: uint16(35416), + 57: uint16(35417), + 58: uint16(35418), + 59: uint16(35419), + 60: uint16(35420), + 61: uint16(35421), + 62: uint16(35422), + 63: uint16(35423), + 64: uint16(35424), + 65: uint16(35425), + 66: uint16(35426), + 67: uint16(35427), + 68: uint16(35428), + 69: uint16(35429), + 70: uint16(35430), + 71: uint16(35431), + 72: uint16(35432), + 73: uint16(35433), + 74: uint16(35434), + 75: uint16(35435), + 76: uint16(35436), + 77: uint16(35437), + 78: uint16(35438), + 79: uint16(35439), + 80: uint16(35440), + 81: uint16(35441), + 82: uint16(35442), + 83: uint16(35443), + 84: uint16(35444), + 85: uint16(35445), + 86: uint16(35446), + 87: uint16(35447), + 88: uint16(35448), + 89: uint16(35450), + 90: uint16(35451), + 91: uint16(35452), + 92: uint16(35453), + 93: uint16(35454), + 94: uint16(35455), + 95: uint16(35456), + 96: uint16(28020), + 97: uint16(23507), + 98: uint16(35029), + 99: uint16(39044), + 100: uint16(35947), + 101: uint16(39533), + 102: uint16(40499), + 103: uint16(28170), + 104: uint16(20900), + 105: uint16(20803), + 106: uint16(22435), + 107: uint16(34945), + 108: uint16(21407), + 109: uint16(25588), + 110: uint16(36757), + 111: uint16(22253), + 112: uint16(21592), + 113: uint16(22278), + 114: uint16(29503), + 115: uint16(28304), + 116: uint16(32536), + 117: uint16(36828), + 118: uint16(33489), + 119: uint16(24895), + 120: uint16(24616), + 121: uint16(38498), + 122: uint16(26352), + 123: uint16(32422), + 124: uint16(36234), + 125: uint16(36291), + 126: uint16(38053), + 127: uint16(23731), + 128: uint16(31908), + 129: uint16(26376), + 130: uint16(24742), + 131: uint16(38405), + 132: uint16(32792), + 133: uint16(20113), + 134: uint16(37095), + 135: uint16(21248), + 136: uint16(38504), + 137: uint16(20801), + 138: uint16(36816), + 139: uint16(34164), + 140: uint16(37213), + 141: uint16(26197), + 142: uint16(38901), + 143: uint16(23381), + 144: uint16(21277), + 145: uint16(30776), + 146: uint16(26434), + 147: uint16(26685), + 148: uint16(21705), + 149: uint16(28798), + 150: uint16(23472), + 151: uint16(36733), + 152: uint16(20877), + 153: uint16(22312), + 154: uint16(21681), + 155: uint16(25874), + 156: uint16(26242), + 157: uint16(36190), + 158: uint16(36163), + 159: uint16(33039), + 160: uint16(33900), + 161: uint16(36973), + 162: uint16(31967), + 163: uint16(20991), + 164: uint16(34299), + 165: uint16(26531), + 166: uint16(26089), + 167: uint16(28577), + 168: uint16(34468), + 169: uint16(36481), + 170: uint16(22122), + 171: uint16(36896), + 172: uint16(30338), + 173: uint16(28790), + 174: uint16(29157), + 175: uint16(36131), + 176: uint16(25321), + 177: uint16(21017), + 178: uint16(27901), + 179: uint16(36156), + 180: uint16(24590), + 181: uint16(22686), + 182: uint16(24974), + 183: uint16(26366), + 184: uint16(36192), + 185: uint16(25166), + 186: uint16(21939), + 187: uint16(28195), + 188: uint16(26413), + 189: uint16(36711), + }, + 84: { + 0: uint16(35457), + 1: uint16(35458), + 2: uint16(35459), + 3: uint16(35460), + 4: uint16(35461), + 5: uint16(35462), + 6: uint16(35463), + 7: uint16(35464), + 8: uint16(35467), + 9: uint16(35468), + 10: uint16(35469), + 11: uint16(35470), + 12: uint16(35471), + 13: uint16(35472), + 14: uint16(35473), + 15: uint16(35474), + 16: uint16(35476), + 17: uint16(35477), + 18: uint16(35478), + 19: uint16(35479), + 20: uint16(35480), + 21: uint16(35481), + 22: uint16(35482), + 23: uint16(35483), + 24: uint16(35484), + 25: uint16(35485), + 26: uint16(35486), + 27: uint16(35487), + 28: uint16(35488), + 29: uint16(35489), + 30: uint16(35490), + 31: uint16(35491), + 32: uint16(35492), + 33: uint16(35493), + 34: uint16(35494), + 35: uint16(35495), + 36: uint16(35496), + 37: uint16(35497), + 38: uint16(35498), + 39: uint16(35499), + 40: uint16(35500), + 41: uint16(35501), + 42: uint16(35502), + 43: uint16(35503), + 44: uint16(35504), + 45: uint16(35505), + 46: uint16(35506), + 47: uint16(35507), + 48: uint16(35508), + 49: uint16(35509), + 50: uint16(35510), + 51: uint16(35511), + 52: uint16(35512), + 53: uint16(35513), + 54: uint16(35514), + 55: uint16(35515), + 56: uint16(35516), + 57: uint16(35517), + 58: uint16(35518), + 59: uint16(35519), + 60: uint16(35520), + 61: uint16(35521), + 62: uint16(35522), + 63: uint16(35523), + 64: uint16(35524), + 65: uint16(35525), + 66: uint16(35526), + 67: uint16(35527), + 68: uint16(35528), + 69: uint16(35529), + 70: uint16(35530), + 71: uint16(35531), + 72: uint16(35532), + 73: uint16(35533), + 74: uint16(35534), + 75: uint16(35535), + 76: uint16(35536), + 77: uint16(35537), + 78: uint16(35538), + 79: uint16(35539), + 80: uint16(35540), + 81: uint16(35541), + 82: uint16(35542), + 83: uint16(35543), + 84: uint16(35544), + 85: uint16(35545), + 86: uint16(35546), + 87: uint16(35547), + 88: uint16(35548), + 89: uint16(35549), + 90: uint16(35550), + 91: uint16(35551), + 92: uint16(35552), + 93: uint16(35553), + 94: uint16(35554), + 95: uint16(35555), + 96: uint16(38113), + 97: uint16(38392), + 98: uint16(30504), + 99: uint16(26629), + 100: uint16(27048), + 101: uint16(21643), + 102: uint16(20045), + 103: uint16(28856), + 104: uint16(35784), + 105: uint16(25688), + 106: uint16(25995), + 107: uint16(23429), + 108: uint16(31364), + 109: uint16(20538), + 110: uint16(23528), + 111: uint16(30651), + 112: uint16(27617), + 113: uint16(35449), + 114: uint16(31896), + 115: uint16(27838), + 116: uint16(30415), + 117: uint16(26025), + 118: uint16(36759), + 119: uint16(23853), + 120: uint16(23637), + 121: uint16(34360), + 122: uint16(26632), + 123: uint16(21344), + 124: uint16(25112), + 125: uint16(31449), + 126: uint16(28251), + 127: uint16(32509), + 128: uint16(27167), + 129: uint16(31456), + 130: uint16(24432), + 131: uint16(28467), + 132: uint16(24352), + 133: uint16(25484), + 134: uint16(28072), + 135: uint16(26454), + 136: uint16(19976), + 137: uint16(24080), + 138: uint16(36134), + 139: uint16(20183), + 140: uint16(32960), + 141: uint16(30260), + 142: uint16(38556), + 143: uint16(25307), + 144: uint16(26157), + 145: uint16(25214), + 146: uint16(27836), + 147: uint16(36213), + 148: uint16(29031), + 149: uint16(32617), + 150: uint16(20806), + 151: uint16(32903), + 152: uint16(21484), + 153: uint16(36974), + 154: uint16(25240), + 155: uint16(21746), + 156: uint16(34544), + 157: uint16(36761), + 158: uint16(32773), + 159: uint16(38167), + 160: uint16(34071), + 161: uint16(36825), + 162: uint16(27993), + 163: uint16(29645), + 164: uint16(26015), + 165: uint16(30495), + 166: uint16(29956), + 167: uint16(30759), + 168: uint16(33275), + 169: uint16(36126), + 170: uint16(38024), + 171: uint16(20390), + 172: uint16(26517), + 173: uint16(30137), + 174: uint16(35786), + 175: uint16(38663), + 176: uint16(25391), + 177: uint16(38215), + 178: uint16(38453), + 179: uint16(33976), + 180: uint16(25379), + 181: uint16(30529), + 182: uint16(24449), + 183: uint16(29424), + 184: uint16(20105), + 185: uint16(24596), + 186: uint16(25972), + 187: uint16(25327), + 188: uint16(27491), + 189: uint16(25919), + }, + 85: { + 0: uint16(35556), + 1: uint16(35557), + 2: uint16(35558), + 3: uint16(35559), + 4: uint16(35560), + 5: uint16(35561), + 6: uint16(35562), + 7: uint16(35563), + 8: uint16(35564), + 9: uint16(35565), + 10: uint16(35566), + 11: uint16(35567), + 12: uint16(35568), + 13: uint16(35569), + 14: uint16(35570), + 15: uint16(35571), + 16: uint16(35572), + 17: uint16(35573), + 18: uint16(35574), + 19: uint16(35575), + 20: uint16(35576), + 21: uint16(35577), + 22: uint16(35578), + 23: uint16(35579), + 24: uint16(35580), + 25: uint16(35581), + 26: uint16(35582), + 27: uint16(35583), + 28: uint16(35584), + 29: uint16(35585), + 30: uint16(35586), + 31: uint16(35587), + 32: uint16(35588), + 33: uint16(35589), + 34: uint16(35590), + 35: uint16(35592), + 36: uint16(35593), + 37: uint16(35594), + 38: uint16(35595), + 39: uint16(35596), + 40: uint16(35597), + 41: uint16(35598), + 42: uint16(35599), + 43: uint16(35600), + 44: uint16(35601), + 45: uint16(35602), + 46: uint16(35603), + 47: uint16(35604), + 48: uint16(35605), + 49: uint16(35606), + 50: uint16(35607), + 51: uint16(35608), + 52: uint16(35609), + 53: uint16(35610), + 54: uint16(35611), + 55: uint16(35612), + 56: uint16(35613), + 57: uint16(35614), + 58: uint16(35615), + 59: uint16(35616), + 60: uint16(35617), + 61: uint16(35618), + 62: uint16(35619), + 63: uint16(35620), + 64: uint16(35621), + 65: uint16(35623), + 66: uint16(35624), + 67: uint16(35625), + 68: uint16(35626), + 69: uint16(35627), + 70: uint16(35628), + 71: uint16(35629), + 72: uint16(35630), + 73: uint16(35631), + 74: uint16(35632), + 75: uint16(35633), + 76: uint16(35634), + 77: uint16(35635), + 78: uint16(35636), + 79: uint16(35637), + 80: uint16(35638), + 81: uint16(35639), + 82: uint16(35640), + 83: uint16(35641), + 84: uint16(35642), + 85: uint16(35643), + 86: uint16(35644), + 87: uint16(35645), + 88: uint16(35646), + 89: uint16(35647), + 90: uint16(35648), + 91: uint16(35649), + 92: uint16(35650), + 93: uint16(35651), + 94: uint16(35652), + 95: uint16(35653), + 96: uint16(24103), + 97: uint16(30151), + 98: uint16(37073), + 99: uint16(35777), + 100: uint16(33437), + 101: uint16(26525), + 102: uint16(25903), + 103: uint16(21553), + 104: uint16(34584), + 105: uint16(30693), + 106: uint16(32930), + 107: uint16(33026), + 108: uint16(27713), + 109: uint16(20043), + 110: uint16(32455), + 111: uint16(32844), + 112: uint16(30452), + 113: uint16(26893), + 114: uint16(27542), + 115: uint16(25191), + 116: uint16(20540), + 117: uint16(20356), + 118: uint16(22336), + 119: uint16(25351), + 120: uint16(27490), + 121: uint16(36286), + 122: uint16(21482), + 123: uint16(26088), + 124: uint16(32440), + 125: uint16(24535), + 126: uint16(25370), + 127: uint16(25527), + 128: uint16(33267), + 129: uint16(33268), + 130: uint16(32622), + 131: uint16(24092), + 132: uint16(23769), + 133: uint16(21046), + 134: uint16(26234), + 135: uint16(31209), + 136: uint16(31258), + 137: uint16(36136), + 138: uint16(28825), + 139: uint16(30164), + 140: uint16(28382), + 141: uint16(27835), + 142: uint16(31378), + 143: uint16(20013), + 144: uint16(30405), + 145: uint16(24544), + 146: uint16(38047), + 147: uint16(34935), + 148: uint16(32456), + 149: uint16(31181), + 150: uint16(32959), + 151: uint16(37325), + 152: uint16(20210), + 153: uint16(20247), + 154: uint16(33311), + 155: uint16(21608), + 156: uint16(24030), + 157: uint16(27954), + 158: uint16(35788), + 159: uint16(31909), + 160: uint16(36724), + 161: uint16(32920), + 162: uint16(24090), + 163: uint16(21650), + 164: uint16(30385), + 165: uint16(23449), + 166: uint16(26172), + 167: uint16(39588), + 168: uint16(29664), + 169: uint16(26666), + 170: uint16(34523), + 171: uint16(26417), + 172: uint16(29482), + 173: uint16(35832), + 174: uint16(35803), + 175: uint16(36880), + 176: uint16(31481), + 177: uint16(28891), + 178: uint16(29038), + 179: uint16(25284), + 180: uint16(30633), + 181: uint16(22065), + 182: uint16(20027), + 183: uint16(33879), + 184: uint16(26609), + 185: uint16(21161), + 186: uint16(34496), + 187: uint16(36142), + 188: uint16(38136), + 189: uint16(31569), + }, + 86: { + 0: uint16(35654), + 1: uint16(35655), + 2: uint16(35656), + 3: uint16(35657), + 4: uint16(35658), + 5: uint16(35659), + 6: uint16(35660), + 7: uint16(35661), + 8: uint16(35662), + 9: uint16(35663), + 10: uint16(35664), + 11: uint16(35665), + 12: uint16(35666), + 13: uint16(35667), + 14: uint16(35668), + 15: uint16(35669), + 16: uint16(35670), + 17: uint16(35671), + 18: uint16(35672), + 19: uint16(35673), + 20: uint16(35674), + 21: uint16(35675), + 22: uint16(35676), + 23: uint16(35677), + 24: uint16(35678), + 25: uint16(35679), + 26: uint16(35680), + 27: uint16(35681), + 28: uint16(35682), + 29: uint16(35683), + 30: uint16(35684), + 31: uint16(35685), + 32: uint16(35687), + 33: uint16(35688), + 34: uint16(35689), + 35: uint16(35690), + 36: uint16(35691), + 37: uint16(35693), + 38: uint16(35694), + 39: uint16(35695), + 40: uint16(35696), + 41: uint16(35697), + 42: uint16(35698), + 43: uint16(35699), + 44: uint16(35700), + 45: uint16(35701), + 46: uint16(35702), + 47: uint16(35703), + 48: uint16(35704), + 49: uint16(35705), + 50: uint16(35706), + 51: uint16(35707), + 52: uint16(35708), + 53: uint16(35709), + 54: uint16(35710), + 55: uint16(35711), + 56: uint16(35712), + 57: uint16(35713), + 58: uint16(35714), + 59: uint16(35715), + 60: uint16(35716), + 61: uint16(35717), + 62: uint16(35718), + 63: uint16(35719), + 64: uint16(35720), + 65: uint16(35721), + 66: uint16(35722), + 67: uint16(35723), + 68: uint16(35724), + 69: uint16(35725), + 70: uint16(35726), + 71: uint16(35727), + 72: uint16(35728), + 73: uint16(35729), + 74: uint16(35730), + 75: uint16(35731), + 76: uint16(35732), + 77: uint16(35733), + 78: uint16(35734), + 79: uint16(35735), + 80: uint16(35736), + 81: uint16(35737), + 82: uint16(35738), + 83: uint16(35739), + 84: uint16(35740), + 85: uint16(35741), + 86: uint16(35742), + 87: uint16(35743), + 88: uint16(35756), + 89: uint16(35761), + 90: uint16(35771), + 91: uint16(35783), + 92: uint16(35792), + 93: uint16(35818), + 94: uint16(35849), + 95: uint16(35870), + 96: uint16(20303), + 97: uint16(27880), + 98: uint16(31069), + 99: uint16(39547), + 100: uint16(25235), + 101: uint16(29226), + 102: uint16(25341), + 103: uint16(19987), + 104: uint16(30742), + 105: uint16(36716), + 106: uint16(25776), + 107: uint16(36186), + 108: uint16(31686), + 109: uint16(26729), + 110: uint16(24196), + 111: uint16(35013), + 112: uint16(22918), + 113: uint16(25758), + 114: uint16(22766), + 115: uint16(29366), + 116: uint16(26894), + 117: uint16(38181), + 118: uint16(36861), + 119: uint16(36184), + 120: uint16(22368), + 121: uint16(32512), + 122: uint16(35846), + 123: uint16(20934), + 124: uint16(25417), + 125: uint16(25305), + 126: uint16(21331), + 127: uint16(26700), + 128: uint16(29730), + 129: uint16(33537), + 130: uint16(37196), + 131: uint16(21828), + 132: uint16(30528), + 133: uint16(28796), + 134: uint16(27978), + 135: uint16(20857), + 136: uint16(21672), + 137: uint16(36164), + 138: uint16(23039), + 139: uint16(28363), + 140: uint16(28100), + 141: uint16(23388), + 142: uint16(32043), + 143: uint16(20180), + 144: uint16(31869), + 145: uint16(28371), + 146: uint16(23376), + 147: uint16(33258), + 148: uint16(28173), + 149: uint16(23383), + 150: uint16(39683), + 151: uint16(26837), + 152: uint16(36394), + 153: uint16(23447), + 154: uint16(32508), + 155: uint16(24635), + 156: uint16(32437), + 157: uint16(37049), + 158: uint16(36208), + 159: uint16(22863), + 160: uint16(25549), + 161: uint16(31199), + 162: uint16(36275), + 163: uint16(21330), + 164: uint16(26063), + 165: uint16(31062), + 166: uint16(35781), + 167: uint16(38459), + 168: uint16(32452), + 169: uint16(38075), + 170: uint16(32386), + 171: uint16(22068), + 172: uint16(37257), + 173: uint16(26368), + 174: uint16(32618), + 175: uint16(23562), + 176: uint16(36981), + 177: uint16(26152), + 178: uint16(24038), + 179: uint16(20304), + 180: uint16(26590), + 181: uint16(20570), + 182: uint16(20316), + 183: uint16(22352), + 184: uint16(24231), + 185: uint16(59408), + 186: uint16(59409), + 187: uint16(59410), + 188: uint16(59411), + 189: uint16(59412), + }, + 87: { + 0: uint16(35896), + 1: uint16(35897), + 2: uint16(35898), + 3: uint16(35899), + 4: uint16(35900), + 5: uint16(35901), + 6: uint16(35902), + 7: uint16(35903), + 8: uint16(35904), + 9: uint16(35906), + 10: uint16(35907), + 11: uint16(35908), + 12: uint16(35909), + 13: uint16(35912), + 14: uint16(35914), + 15: uint16(35915), + 16: uint16(35917), + 17: uint16(35918), + 18: uint16(35919), + 19: uint16(35920), + 20: uint16(35921), + 21: uint16(35922), + 22: uint16(35923), + 23: uint16(35924), + 24: uint16(35926), + 25: uint16(35927), + 26: uint16(35928), + 27: uint16(35929), + 28: uint16(35931), + 29: uint16(35932), + 30: uint16(35933), + 31: uint16(35934), + 32: uint16(35935), + 33: uint16(35936), + 34: uint16(35939), + 35: uint16(35940), + 36: uint16(35941), + 37: uint16(35942), + 38: uint16(35943), + 39: uint16(35944), + 40: uint16(35945), + 41: uint16(35948), + 42: uint16(35949), + 43: uint16(35950), + 44: uint16(35951), + 45: uint16(35952), + 46: uint16(35953), + 47: uint16(35954), + 48: uint16(35956), + 49: uint16(35957), + 50: uint16(35958), + 51: uint16(35959), + 52: uint16(35963), + 53: uint16(35964), + 54: uint16(35965), + 55: uint16(35966), + 56: uint16(35967), + 57: uint16(35968), + 58: uint16(35969), + 59: uint16(35971), + 60: uint16(35972), + 61: uint16(35974), + 62: uint16(35975), + 63: uint16(35976), + 64: uint16(35979), + 65: uint16(35981), + 66: uint16(35982), + 67: uint16(35983), + 68: uint16(35984), + 69: uint16(35985), + 70: uint16(35986), + 71: uint16(35987), + 72: uint16(35989), + 73: uint16(35990), + 74: uint16(35991), + 75: uint16(35993), + 76: uint16(35994), + 77: uint16(35995), + 78: uint16(35996), + 79: uint16(35997), + 80: uint16(35998), + 81: uint16(35999), + 82: uint16(36000), + 83: uint16(36001), + 84: uint16(36002), + 85: uint16(36003), + 86: uint16(36004), + 87: uint16(36005), + 88: uint16(36006), + 89: uint16(36007), + 90: uint16(36008), + 91: uint16(36009), + 92: uint16(36010), + 93: uint16(36011), + 94: uint16(36012), + 95: uint16(36013), + 96: uint16(20109), + 97: uint16(19980), + 98: uint16(20800), + 99: uint16(19984), + 100: uint16(24319), + 101: uint16(21317), + 102: uint16(19989), + 103: uint16(20120), + 104: uint16(19998), + 105: uint16(39730), + 106: uint16(23404), + 107: uint16(22121), + 108: uint16(20008), + 109: uint16(31162), + 110: uint16(20031), + 111: uint16(21269), + 112: uint16(20039), + 113: uint16(22829), + 114: uint16(29243), + 115: uint16(21358), + 116: uint16(27664), + 117: uint16(22239), + 118: uint16(32996), + 119: uint16(39319), + 120: uint16(27603), + 121: uint16(30590), + 122: uint16(40727), + 123: uint16(20022), + 124: uint16(20127), + 125: uint16(40720), + 126: uint16(20060), + 127: uint16(20073), + 128: uint16(20115), + 129: uint16(33416), + 130: uint16(23387), + 131: uint16(21868), + 132: uint16(22031), + 133: uint16(20164), + 134: uint16(21389), + 135: uint16(21405), + 136: uint16(21411), + 137: uint16(21413), + 138: uint16(21422), + 139: uint16(38757), + 140: uint16(36189), + 141: uint16(21274), + 142: uint16(21493), + 143: uint16(21286), + 144: uint16(21294), + 145: uint16(21310), + 146: uint16(36188), + 147: uint16(21350), + 148: uint16(21347), + 149: uint16(20994), + 150: uint16(21000), + 151: uint16(21006), + 152: uint16(21037), + 153: uint16(21043), + 154: uint16(21055), + 155: uint16(21056), + 156: uint16(21068), + 157: uint16(21086), + 158: uint16(21089), + 159: uint16(21084), + 160: uint16(33967), + 161: uint16(21117), + 162: uint16(21122), + 163: uint16(21121), + 164: uint16(21136), + 165: uint16(21139), + 166: uint16(20866), + 167: uint16(32596), + 168: uint16(20155), + 169: uint16(20163), + 170: uint16(20169), + 171: uint16(20162), + 172: uint16(20200), + 173: uint16(20193), + 174: uint16(20203), + 175: uint16(20190), + 176: uint16(20251), + 177: uint16(20211), + 178: uint16(20258), + 179: uint16(20324), + 180: uint16(20213), + 181: uint16(20261), + 182: uint16(20263), + 183: uint16(20233), + 184: uint16(20267), + 185: uint16(20318), + 186: uint16(20327), + 187: uint16(25912), + 188: uint16(20314), + 189: uint16(20317), + }, + 88: { + 0: uint16(36014), + 1: uint16(36015), + 2: uint16(36016), + 3: uint16(36017), + 4: uint16(36018), + 5: uint16(36019), + 6: uint16(36020), + 7: uint16(36021), + 8: uint16(36022), + 9: uint16(36023), + 10: uint16(36024), + 11: uint16(36025), + 12: uint16(36026), + 13: uint16(36027), + 14: uint16(36028), + 15: uint16(36029), + 16: uint16(36030), + 17: uint16(36031), + 18: uint16(36032), + 19: uint16(36033), + 20: uint16(36034), + 21: uint16(36035), + 22: uint16(36036), + 23: uint16(36037), + 24: uint16(36038), + 25: uint16(36039), + 26: uint16(36040), + 27: uint16(36041), + 28: uint16(36042), + 29: uint16(36043), + 30: uint16(36044), + 31: uint16(36045), + 32: uint16(36046), + 33: uint16(36047), + 34: uint16(36048), + 35: uint16(36049), + 36: uint16(36050), + 37: uint16(36051), + 38: uint16(36052), + 39: uint16(36053), + 40: uint16(36054), + 41: uint16(36055), + 42: uint16(36056), + 43: uint16(36057), + 44: uint16(36058), + 45: uint16(36059), + 46: uint16(36060), + 47: uint16(36061), + 48: uint16(36062), + 49: uint16(36063), + 50: uint16(36064), + 51: uint16(36065), + 52: uint16(36066), + 53: uint16(36067), + 54: uint16(36068), + 55: uint16(36069), + 56: uint16(36070), + 57: uint16(36071), + 58: uint16(36072), + 59: uint16(36073), + 60: uint16(36074), + 61: uint16(36075), + 62: uint16(36076), + 63: uint16(36077), + 64: uint16(36078), + 65: uint16(36079), + 66: uint16(36080), + 67: uint16(36081), + 68: uint16(36082), + 69: uint16(36083), + 70: uint16(36084), + 71: uint16(36085), + 72: uint16(36086), + 73: uint16(36087), + 74: uint16(36088), + 75: uint16(36089), + 76: uint16(36090), + 77: uint16(36091), + 78: uint16(36092), + 79: uint16(36093), + 80: uint16(36094), + 81: uint16(36095), + 82: uint16(36096), + 83: uint16(36097), + 84: uint16(36098), + 85: uint16(36099), + 86: uint16(36100), + 87: uint16(36101), + 88: uint16(36102), + 89: uint16(36103), + 90: uint16(36104), + 91: uint16(36105), + 92: uint16(36106), + 93: uint16(36107), + 94: uint16(36108), + 95: uint16(36109), + 96: uint16(20319), + 97: uint16(20311), + 98: uint16(20274), + 99: uint16(20285), + 100: uint16(20342), + 101: uint16(20340), + 102: uint16(20369), + 103: uint16(20361), + 104: uint16(20355), + 105: uint16(20367), + 106: uint16(20350), + 107: uint16(20347), + 108: uint16(20394), + 109: uint16(20348), + 110: uint16(20396), + 111: uint16(20372), + 112: uint16(20454), + 113: uint16(20456), + 114: uint16(20458), + 115: uint16(20421), + 116: uint16(20442), + 117: uint16(20451), + 118: uint16(20444), + 119: uint16(20433), + 120: uint16(20447), + 121: uint16(20472), + 122: uint16(20521), + 123: uint16(20556), + 124: uint16(20467), + 125: uint16(20524), + 126: uint16(20495), + 127: uint16(20526), + 128: uint16(20525), + 129: uint16(20478), + 130: uint16(20508), + 131: uint16(20492), + 132: uint16(20517), + 133: uint16(20520), + 134: uint16(20606), + 135: uint16(20547), + 136: uint16(20565), + 137: uint16(20552), + 138: uint16(20558), + 139: uint16(20588), + 140: uint16(20603), + 141: uint16(20645), + 142: uint16(20647), + 143: uint16(20649), + 144: uint16(20666), + 145: uint16(20694), + 146: uint16(20742), + 147: uint16(20717), + 148: uint16(20716), + 149: uint16(20710), + 150: uint16(20718), + 151: uint16(20743), + 152: uint16(20747), + 153: uint16(20189), + 154: uint16(27709), + 155: uint16(20312), + 156: uint16(20325), + 157: uint16(20430), + 158: uint16(40864), + 159: uint16(27718), + 160: uint16(31860), + 161: uint16(20846), + 162: uint16(24061), + 163: uint16(40649), + 164: uint16(39320), + 165: uint16(20865), + 166: uint16(22804), + 167: uint16(21241), + 168: uint16(21261), + 169: uint16(35335), + 170: uint16(21264), + 171: uint16(20971), + 172: uint16(22809), + 173: uint16(20821), + 174: uint16(20128), + 175: uint16(20822), + 176: uint16(20147), + 177: uint16(34926), + 178: uint16(34980), + 179: uint16(20149), + 180: uint16(33044), + 181: uint16(35026), + 182: uint16(31104), + 183: uint16(23348), + 184: uint16(34819), + 185: uint16(32696), + 186: uint16(20907), + 187: uint16(20913), + 188: uint16(20925), + 189: uint16(20924), + }, + 89: { + 0: uint16(36110), + 1: uint16(36111), + 2: uint16(36112), + 3: uint16(36113), + 4: uint16(36114), + 5: uint16(36115), + 6: uint16(36116), + 7: uint16(36117), + 8: uint16(36118), + 9: uint16(36119), + 10: uint16(36120), + 11: uint16(36121), + 12: uint16(36122), + 13: uint16(36123), + 14: uint16(36124), + 15: uint16(36128), + 16: uint16(36177), + 17: uint16(36178), + 18: uint16(36183), + 19: uint16(36191), + 20: uint16(36197), + 21: uint16(36200), + 22: uint16(36201), + 23: uint16(36202), + 24: uint16(36204), + 25: uint16(36206), + 26: uint16(36207), + 27: uint16(36209), + 28: uint16(36210), + 29: uint16(36216), + 30: uint16(36217), + 31: uint16(36218), + 32: uint16(36219), + 33: uint16(36220), + 34: uint16(36221), + 35: uint16(36222), + 36: uint16(36223), + 37: uint16(36224), + 38: uint16(36226), + 39: uint16(36227), + 40: uint16(36230), + 41: uint16(36231), + 42: uint16(36232), + 43: uint16(36233), + 44: uint16(36236), + 45: uint16(36237), + 46: uint16(36238), + 47: uint16(36239), + 48: uint16(36240), + 49: uint16(36242), + 50: uint16(36243), + 51: uint16(36245), + 52: uint16(36246), + 53: uint16(36247), + 54: uint16(36248), + 55: uint16(36249), + 56: uint16(36250), + 57: uint16(36251), + 58: uint16(36252), + 59: uint16(36253), + 60: uint16(36254), + 61: uint16(36256), + 62: uint16(36257), + 63: uint16(36258), + 64: uint16(36260), + 65: uint16(36261), + 66: uint16(36262), + 67: uint16(36263), + 68: uint16(36264), + 69: uint16(36265), + 70: uint16(36266), + 71: uint16(36267), + 72: uint16(36268), + 73: uint16(36269), + 74: uint16(36270), + 75: uint16(36271), + 76: uint16(36272), + 77: uint16(36274), + 78: uint16(36278), + 79: uint16(36279), + 80: uint16(36281), + 81: uint16(36283), + 82: uint16(36285), + 83: uint16(36288), + 84: uint16(36289), + 85: uint16(36290), + 86: uint16(36293), + 87: uint16(36295), + 88: uint16(36296), + 89: uint16(36297), + 90: uint16(36298), + 91: uint16(36301), + 92: uint16(36304), + 93: uint16(36306), + 94: uint16(36307), + 95: uint16(36308), + 96: uint16(20935), + 97: uint16(20886), + 98: uint16(20898), + 99: uint16(20901), + 100: uint16(35744), + 101: uint16(35750), + 102: uint16(35751), + 103: uint16(35754), + 104: uint16(35764), + 105: uint16(35765), + 106: uint16(35767), + 107: uint16(35778), + 108: uint16(35779), + 109: uint16(35787), + 110: uint16(35791), + 111: uint16(35790), + 112: uint16(35794), + 113: uint16(35795), + 114: uint16(35796), + 115: uint16(35798), + 116: uint16(35800), + 117: uint16(35801), + 118: uint16(35804), + 119: uint16(35807), + 120: uint16(35808), + 121: uint16(35812), + 122: uint16(35816), + 123: uint16(35817), + 124: uint16(35822), + 125: uint16(35824), + 126: uint16(35827), + 127: uint16(35830), + 128: uint16(35833), + 129: uint16(35836), + 130: uint16(35839), + 131: uint16(35840), + 132: uint16(35842), + 133: uint16(35844), + 134: uint16(35847), + 135: uint16(35852), + 136: uint16(35855), + 137: uint16(35857), + 138: uint16(35858), + 139: uint16(35860), + 140: uint16(35861), + 141: uint16(35862), + 142: uint16(35865), + 143: uint16(35867), + 144: uint16(35864), + 145: uint16(35869), + 146: uint16(35871), + 147: uint16(35872), + 148: uint16(35873), + 149: uint16(35877), + 150: uint16(35879), + 151: uint16(35882), + 152: uint16(35883), + 153: uint16(35886), + 154: uint16(35887), + 155: uint16(35890), + 156: uint16(35891), + 157: uint16(35893), + 158: uint16(35894), + 159: uint16(21353), + 160: uint16(21370), + 161: uint16(38429), + 162: uint16(38434), + 163: uint16(38433), + 164: uint16(38449), + 165: uint16(38442), + 166: uint16(38461), + 167: uint16(38460), + 168: uint16(38466), + 169: uint16(38473), + 170: uint16(38484), + 171: uint16(38495), + 172: uint16(38503), + 173: uint16(38508), + 174: uint16(38514), + 175: uint16(38516), + 176: uint16(38536), + 177: uint16(38541), + 178: uint16(38551), + 179: uint16(38576), + 180: uint16(37015), + 181: uint16(37019), + 182: uint16(37021), + 183: uint16(37017), + 184: uint16(37036), + 185: uint16(37025), + 186: uint16(37044), + 187: uint16(37043), + 188: uint16(37046), + 189: uint16(37050), + }, + 90: { + 0: uint16(36309), + 1: uint16(36312), + 2: uint16(36313), + 3: uint16(36316), + 4: uint16(36320), + 5: uint16(36321), + 6: uint16(36322), + 7: uint16(36325), + 8: uint16(36326), + 9: uint16(36327), + 10: uint16(36329), + 11: uint16(36333), + 12: uint16(36334), + 13: uint16(36336), + 14: uint16(36337), + 15: uint16(36338), + 16: uint16(36340), + 17: uint16(36342), + 18: uint16(36348), + 19: uint16(36350), + 20: uint16(36351), + 21: uint16(36352), + 22: uint16(36353), + 23: uint16(36354), + 24: uint16(36355), + 25: uint16(36356), + 26: uint16(36358), + 27: uint16(36359), + 28: uint16(36360), + 29: uint16(36363), + 30: uint16(36365), + 31: uint16(36366), + 32: uint16(36368), + 33: uint16(36369), + 34: uint16(36370), + 35: uint16(36371), + 36: uint16(36373), + 37: uint16(36374), + 38: uint16(36375), + 39: uint16(36376), + 40: uint16(36377), + 41: uint16(36378), + 42: uint16(36379), + 43: uint16(36380), + 44: uint16(36384), + 45: uint16(36385), + 46: uint16(36388), + 47: uint16(36389), + 48: uint16(36390), + 49: uint16(36391), + 50: uint16(36392), + 51: uint16(36395), + 52: uint16(36397), + 53: uint16(36400), + 54: uint16(36402), + 55: uint16(36403), + 56: uint16(36404), + 57: uint16(36406), + 58: uint16(36407), + 59: uint16(36408), + 60: uint16(36411), + 61: uint16(36412), + 62: uint16(36414), + 63: uint16(36415), + 64: uint16(36419), + 65: uint16(36421), + 66: uint16(36422), + 67: uint16(36428), + 68: uint16(36429), + 69: uint16(36430), + 70: uint16(36431), + 71: uint16(36432), + 72: uint16(36435), + 73: uint16(36436), + 74: uint16(36437), + 75: uint16(36438), + 76: uint16(36439), + 77: uint16(36440), + 78: uint16(36442), + 79: uint16(36443), + 80: uint16(36444), + 81: uint16(36445), + 82: uint16(36446), + 83: uint16(36447), + 84: uint16(36448), + 85: uint16(36449), + 86: uint16(36450), + 87: uint16(36451), + 88: uint16(36452), + 89: uint16(36453), + 90: uint16(36455), + 91: uint16(36456), + 92: uint16(36458), + 93: uint16(36459), + 94: uint16(36462), + 95: uint16(36465), + 96: uint16(37048), + 97: uint16(37040), + 98: uint16(37071), + 99: uint16(37061), + 100: uint16(37054), + 101: uint16(37072), + 102: uint16(37060), + 103: uint16(37063), + 104: uint16(37075), + 105: uint16(37094), + 106: uint16(37090), + 107: uint16(37084), + 108: uint16(37079), + 109: uint16(37083), + 110: uint16(37099), + 111: uint16(37103), + 112: uint16(37118), + 113: uint16(37124), + 114: uint16(37154), + 115: uint16(37150), + 116: uint16(37155), + 117: uint16(37169), + 118: uint16(37167), + 119: uint16(37177), + 120: uint16(37187), + 121: uint16(37190), + 122: uint16(21005), + 123: uint16(22850), + 124: uint16(21154), + 125: uint16(21164), + 126: uint16(21165), + 127: uint16(21182), + 128: uint16(21759), + 129: uint16(21200), + 130: uint16(21206), + 131: uint16(21232), + 132: uint16(21471), + 133: uint16(29166), + 134: uint16(30669), + 135: uint16(24308), + 136: uint16(20981), + 137: uint16(20988), + 138: uint16(39727), + 139: uint16(21430), + 140: uint16(24321), + 141: uint16(30042), + 142: uint16(24047), + 143: uint16(22348), + 144: uint16(22441), + 145: uint16(22433), + 146: uint16(22654), + 147: uint16(22716), + 148: uint16(22725), + 149: uint16(22737), + 150: uint16(22313), + 151: uint16(22316), + 152: uint16(22314), + 153: uint16(22323), + 154: uint16(22329), + 155: uint16(22318), + 156: uint16(22319), + 157: uint16(22364), + 158: uint16(22331), + 159: uint16(22338), + 160: uint16(22377), + 161: uint16(22405), + 162: uint16(22379), + 163: uint16(22406), + 164: uint16(22396), + 165: uint16(22395), + 166: uint16(22376), + 167: uint16(22381), + 168: uint16(22390), + 169: uint16(22387), + 170: uint16(22445), + 171: uint16(22436), + 172: uint16(22412), + 173: uint16(22450), + 174: uint16(22479), + 175: uint16(22439), + 176: uint16(22452), + 177: uint16(22419), + 178: uint16(22432), + 179: uint16(22485), + 180: uint16(22488), + 181: uint16(22490), + 182: uint16(22489), + 183: uint16(22482), + 184: uint16(22456), + 185: uint16(22516), + 186: uint16(22511), + 187: uint16(22520), + 188: uint16(22500), + 189: uint16(22493), + }, + 91: { + 0: uint16(36467), + 1: uint16(36469), + 2: uint16(36471), + 3: uint16(36472), + 4: uint16(36473), + 5: uint16(36474), + 6: uint16(36475), + 7: uint16(36477), + 8: uint16(36478), + 9: uint16(36480), + 10: uint16(36482), + 11: uint16(36483), + 12: uint16(36484), + 13: uint16(36486), + 14: uint16(36488), + 15: uint16(36489), + 16: uint16(36490), + 17: uint16(36491), + 18: uint16(36492), + 19: uint16(36493), + 20: uint16(36494), + 21: uint16(36497), + 22: uint16(36498), + 23: uint16(36499), + 24: uint16(36501), + 25: uint16(36502), + 26: uint16(36503), + 27: uint16(36504), + 28: uint16(36505), + 29: uint16(36506), + 30: uint16(36507), + 31: uint16(36509), + 32: uint16(36511), + 33: uint16(36512), + 34: uint16(36513), + 35: uint16(36514), + 36: uint16(36515), + 37: uint16(36516), + 38: uint16(36517), + 39: uint16(36518), + 40: uint16(36519), + 41: uint16(36520), + 42: uint16(36521), + 43: uint16(36522), + 44: uint16(36525), + 45: uint16(36526), + 46: uint16(36528), + 47: uint16(36529), + 48: uint16(36531), + 49: uint16(36532), + 50: uint16(36533), + 51: uint16(36534), + 52: uint16(36535), + 53: uint16(36536), + 54: uint16(36537), + 55: uint16(36539), + 56: uint16(36540), + 57: uint16(36541), + 58: uint16(36542), + 59: uint16(36543), + 60: uint16(36544), + 61: uint16(36545), + 62: uint16(36546), + 63: uint16(36547), + 64: uint16(36548), + 65: uint16(36549), + 66: uint16(36550), + 67: uint16(36551), + 68: uint16(36552), + 69: uint16(36553), + 70: uint16(36554), + 71: uint16(36555), + 72: uint16(36556), + 73: uint16(36557), + 74: uint16(36559), + 75: uint16(36560), + 76: uint16(36561), + 77: uint16(36562), + 78: uint16(36563), + 79: uint16(36564), + 80: uint16(36565), + 81: uint16(36566), + 82: uint16(36567), + 83: uint16(36568), + 84: uint16(36569), + 85: uint16(36570), + 86: uint16(36571), + 87: uint16(36572), + 88: uint16(36573), + 89: uint16(36574), + 90: uint16(36575), + 91: uint16(36576), + 92: uint16(36577), + 93: uint16(36578), + 94: uint16(36579), + 95: uint16(36580), + 96: uint16(22539), + 97: uint16(22541), + 98: uint16(22525), + 99: uint16(22509), + 100: uint16(22528), + 101: uint16(22558), + 102: uint16(22553), + 103: uint16(22596), + 104: uint16(22560), + 105: uint16(22629), + 106: uint16(22636), + 107: uint16(22657), + 108: uint16(22665), + 109: uint16(22682), + 110: uint16(22656), + 111: uint16(39336), + 112: uint16(40729), + 113: uint16(25087), + 114: uint16(33401), + 115: uint16(33405), + 116: uint16(33407), + 117: uint16(33423), + 118: uint16(33418), + 119: uint16(33448), + 120: uint16(33412), + 121: uint16(33422), + 122: uint16(33425), + 123: uint16(33431), + 124: uint16(33433), + 125: uint16(33451), + 126: uint16(33464), + 127: uint16(33470), + 128: uint16(33456), + 129: uint16(33480), + 130: uint16(33482), + 131: uint16(33507), + 132: uint16(33432), + 133: uint16(33463), + 134: uint16(33454), + 135: uint16(33483), + 136: uint16(33484), + 137: uint16(33473), + 138: uint16(33449), + 139: uint16(33460), + 140: uint16(33441), + 141: uint16(33450), + 142: uint16(33439), + 143: uint16(33476), + 144: uint16(33486), + 145: uint16(33444), + 146: uint16(33505), + 147: uint16(33545), + 148: uint16(33527), + 149: uint16(33508), + 150: uint16(33551), + 151: uint16(33543), + 152: uint16(33500), + 153: uint16(33524), + 154: uint16(33490), + 155: uint16(33496), + 156: uint16(33548), + 157: uint16(33531), + 158: uint16(33491), + 159: uint16(33553), + 160: uint16(33562), + 161: uint16(33542), + 162: uint16(33556), + 163: uint16(33557), + 164: uint16(33504), + 165: uint16(33493), + 166: uint16(33564), + 167: uint16(33617), + 168: uint16(33627), + 169: uint16(33628), + 170: uint16(33544), + 171: uint16(33682), + 172: uint16(33596), + 173: uint16(33588), + 174: uint16(33585), + 175: uint16(33691), + 176: uint16(33630), + 177: uint16(33583), + 178: uint16(33615), + 179: uint16(33607), + 180: uint16(33603), + 181: uint16(33631), + 182: uint16(33600), + 183: uint16(33559), + 184: uint16(33632), + 185: uint16(33581), + 186: uint16(33594), + 187: uint16(33587), + 188: uint16(33638), + 189: uint16(33637), + }, + 92: { + 0: uint16(36581), + 1: uint16(36582), + 2: uint16(36583), + 3: uint16(36584), + 4: uint16(36585), + 5: uint16(36586), + 6: uint16(36587), + 7: uint16(36588), + 8: uint16(36589), + 9: uint16(36590), + 10: uint16(36591), + 11: uint16(36592), + 12: uint16(36593), + 13: uint16(36594), + 14: uint16(36595), + 15: uint16(36596), + 16: uint16(36597), + 17: uint16(36598), + 18: uint16(36599), + 19: uint16(36600), + 20: uint16(36601), + 21: uint16(36602), + 22: uint16(36603), + 23: uint16(36604), + 24: uint16(36605), + 25: uint16(36606), + 26: uint16(36607), + 27: uint16(36608), + 28: uint16(36609), + 29: uint16(36610), + 30: uint16(36611), + 31: uint16(36612), + 32: uint16(36613), + 33: uint16(36614), + 34: uint16(36615), + 35: uint16(36616), + 36: uint16(36617), + 37: uint16(36618), + 38: uint16(36619), + 39: uint16(36620), + 40: uint16(36621), + 41: uint16(36622), + 42: uint16(36623), + 43: uint16(36624), + 44: uint16(36625), + 45: uint16(36626), + 46: uint16(36627), + 47: uint16(36628), + 48: uint16(36629), + 49: uint16(36630), + 50: uint16(36631), + 51: uint16(36632), + 52: uint16(36633), + 53: uint16(36634), + 54: uint16(36635), + 55: uint16(36636), + 56: uint16(36637), + 57: uint16(36638), + 58: uint16(36639), + 59: uint16(36640), + 60: uint16(36641), + 61: uint16(36642), + 62: uint16(36643), + 63: uint16(36644), + 64: uint16(36645), + 65: uint16(36646), + 66: uint16(36647), + 67: uint16(36648), + 68: uint16(36649), + 69: uint16(36650), + 70: uint16(36651), + 71: uint16(36652), + 72: uint16(36653), + 73: uint16(36654), + 74: uint16(36655), + 75: uint16(36656), + 76: uint16(36657), + 77: uint16(36658), + 78: uint16(36659), + 79: uint16(36660), + 80: uint16(36661), + 81: uint16(36662), + 82: uint16(36663), + 83: uint16(36664), + 84: uint16(36665), + 85: uint16(36666), + 86: uint16(36667), + 87: uint16(36668), + 88: uint16(36669), + 89: uint16(36670), + 90: uint16(36671), + 91: uint16(36672), + 92: uint16(36673), + 93: uint16(36674), + 94: uint16(36675), + 95: uint16(36676), + 96: uint16(33640), + 97: uint16(33563), + 98: uint16(33641), + 99: uint16(33644), + 100: uint16(33642), + 101: uint16(33645), + 102: uint16(33646), + 103: uint16(33712), + 104: uint16(33656), + 105: uint16(33715), + 106: uint16(33716), + 107: uint16(33696), + 108: uint16(33706), + 109: uint16(33683), + 110: uint16(33692), + 111: uint16(33669), + 112: uint16(33660), + 113: uint16(33718), + 114: uint16(33705), + 115: uint16(33661), + 116: uint16(33720), + 117: uint16(33659), + 118: uint16(33688), + 119: uint16(33694), + 120: uint16(33704), + 121: uint16(33722), + 122: uint16(33724), + 123: uint16(33729), + 124: uint16(33793), + 125: uint16(33765), + 126: uint16(33752), + 127: uint16(22535), + 128: uint16(33816), + 129: uint16(33803), + 130: uint16(33757), + 131: uint16(33789), + 132: uint16(33750), + 133: uint16(33820), + 134: uint16(33848), + 135: uint16(33809), + 136: uint16(33798), + 137: uint16(33748), + 138: uint16(33759), + 139: uint16(33807), + 140: uint16(33795), + 141: uint16(33784), + 142: uint16(33785), + 143: uint16(33770), + 144: uint16(33733), + 145: uint16(33728), + 146: uint16(33830), + 147: uint16(33776), + 148: uint16(33761), + 149: uint16(33884), + 150: uint16(33873), + 151: uint16(33882), + 152: uint16(33881), + 153: uint16(33907), + 154: uint16(33927), + 155: uint16(33928), + 156: uint16(33914), + 157: uint16(33929), + 158: uint16(33912), + 159: uint16(33852), + 160: uint16(33862), + 161: uint16(33897), + 162: uint16(33910), + 163: uint16(33932), + 164: uint16(33934), + 165: uint16(33841), + 166: uint16(33901), + 167: uint16(33985), + 168: uint16(33997), + 169: uint16(34000), + 170: uint16(34022), + 171: uint16(33981), + 172: uint16(34003), + 173: uint16(33994), + 174: uint16(33983), + 175: uint16(33978), + 176: uint16(34016), + 177: uint16(33953), + 178: uint16(33977), + 179: uint16(33972), + 180: uint16(33943), + 181: uint16(34021), + 182: uint16(34019), + 183: uint16(34060), + 184: uint16(29965), + 185: uint16(34104), + 186: uint16(34032), + 187: uint16(34105), + 188: uint16(34079), + 189: uint16(34106), + }, + 93: { + 0: uint16(36677), + 1: uint16(36678), + 2: uint16(36679), + 3: uint16(36680), + 4: uint16(36681), + 5: uint16(36682), + 6: uint16(36683), + 7: uint16(36684), + 8: uint16(36685), + 9: uint16(36686), + 10: uint16(36687), + 11: uint16(36688), + 12: uint16(36689), + 13: uint16(36690), + 14: uint16(36691), + 15: uint16(36692), + 16: uint16(36693), + 17: uint16(36694), + 18: uint16(36695), + 19: uint16(36696), + 20: uint16(36697), + 21: uint16(36698), + 22: uint16(36699), + 23: uint16(36700), + 24: uint16(36701), + 25: uint16(36702), + 26: uint16(36703), + 27: uint16(36704), + 28: uint16(36705), + 29: uint16(36706), + 30: uint16(36707), + 31: uint16(36708), + 32: uint16(36709), + 33: uint16(36714), + 34: uint16(36736), + 35: uint16(36748), + 36: uint16(36754), + 37: uint16(36765), + 38: uint16(36768), + 39: uint16(36769), + 40: uint16(36770), + 41: uint16(36772), + 42: uint16(36773), + 43: uint16(36774), + 44: uint16(36775), + 45: uint16(36778), + 46: uint16(36780), + 47: uint16(36781), + 48: uint16(36782), + 49: uint16(36783), + 50: uint16(36786), + 51: uint16(36787), + 52: uint16(36788), + 53: uint16(36789), + 54: uint16(36791), + 55: uint16(36792), + 56: uint16(36794), + 57: uint16(36795), + 58: uint16(36796), + 59: uint16(36799), + 60: uint16(36800), + 61: uint16(36803), + 62: uint16(36806), + 63: uint16(36809), + 64: uint16(36810), + 65: uint16(36811), + 66: uint16(36812), + 67: uint16(36813), + 68: uint16(36815), + 69: uint16(36818), + 70: uint16(36822), + 71: uint16(36823), + 72: uint16(36826), + 73: uint16(36832), + 74: uint16(36833), + 75: uint16(36835), + 76: uint16(36839), + 77: uint16(36844), + 78: uint16(36847), + 79: uint16(36849), + 80: uint16(36850), + 81: uint16(36852), + 82: uint16(36853), + 83: uint16(36854), + 84: uint16(36858), + 85: uint16(36859), + 86: uint16(36860), + 87: uint16(36862), + 88: uint16(36863), + 89: uint16(36871), + 90: uint16(36872), + 91: uint16(36876), + 92: uint16(36878), + 93: uint16(36883), + 94: uint16(36885), + 95: uint16(36888), + 96: uint16(34134), + 97: uint16(34107), + 98: uint16(34047), + 99: uint16(34044), + 100: uint16(34137), + 101: uint16(34120), + 102: uint16(34152), + 103: uint16(34148), + 104: uint16(34142), + 105: uint16(34170), + 106: uint16(30626), + 107: uint16(34115), + 108: uint16(34162), + 109: uint16(34171), + 110: uint16(34212), + 111: uint16(34216), + 112: uint16(34183), + 113: uint16(34191), + 114: uint16(34169), + 115: uint16(34222), + 116: uint16(34204), + 117: uint16(34181), + 118: uint16(34233), + 119: uint16(34231), + 120: uint16(34224), + 121: uint16(34259), + 122: uint16(34241), + 123: uint16(34268), + 124: uint16(34303), + 125: uint16(34343), + 126: uint16(34309), + 127: uint16(34345), + 128: uint16(34326), + 129: uint16(34364), + 130: uint16(24318), + 131: uint16(24328), + 132: uint16(22844), + 133: uint16(22849), + 134: uint16(32823), + 135: uint16(22869), + 136: uint16(22874), + 137: uint16(22872), + 138: uint16(21263), + 139: uint16(23586), + 140: uint16(23589), + 141: uint16(23596), + 142: uint16(23604), + 143: uint16(25164), + 144: uint16(25194), + 145: uint16(25247), + 146: uint16(25275), + 147: uint16(25290), + 148: uint16(25306), + 149: uint16(25303), + 150: uint16(25326), + 151: uint16(25378), + 152: uint16(25334), + 153: uint16(25401), + 154: uint16(25419), + 155: uint16(25411), + 156: uint16(25517), + 157: uint16(25590), + 158: uint16(25457), + 159: uint16(25466), + 160: uint16(25486), + 161: uint16(25524), + 162: uint16(25453), + 163: uint16(25516), + 164: uint16(25482), + 165: uint16(25449), + 166: uint16(25518), + 167: uint16(25532), + 168: uint16(25586), + 169: uint16(25592), + 170: uint16(25568), + 171: uint16(25599), + 172: uint16(25540), + 173: uint16(25566), + 174: uint16(25550), + 175: uint16(25682), + 176: uint16(25542), + 177: uint16(25534), + 178: uint16(25669), + 179: uint16(25665), + 180: uint16(25611), + 181: uint16(25627), + 182: uint16(25632), + 183: uint16(25612), + 184: uint16(25638), + 185: uint16(25633), + 186: uint16(25694), + 187: uint16(25732), + 188: uint16(25709), + 189: uint16(25750), + }, + 94: { + 0: uint16(36889), + 1: uint16(36892), + 2: uint16(36899), + 3: uint16(36900), + 4: uint16(36901), + 5: uint16(36903), + 6: uint16(36904), + 7: uint16(36905), + 8: uint16(36906), + 9: uint16(36907), + 10: uint16(36908), + 11: uint16(36912), + 12: uint16(36913), + 13: uint16(36914), + 14: uint16(36915), + 15: uint16(36916), + 16: uint16(36919), + 17: uint16(36921), + 18: uint16(36922), + 19: uint16(36925), + 20: uint16(36927), + 21: uint16(36928), + 22: uint16(36931), + 23: uint16(36933), + 24: uint16(36934), + 25: uint16(36936), + 26: uint16(36937), + 27: uint16(36938), + 28: uint16(36939), + 29: uint16(36940), + 30: uint16(36942), + 31: uint16(36948), + 32: uint16(36949), + 33: uint16(36950), + 34: uint16(36953), + 35: uint16(36954), + 36: uint16(36956), + 37: uint16(36957), + 38: uint16(36958), + 39: uint16(36959), + 40: uint16(36960), + 41: uint16(36961), + 42: uint16(36964), + 43: uint16(36966), + 44: uint16(36967), + 45: uint16(36969), + 46: uint16(36970), + 47: uint16(36971), + 48: uint16(36972), + 49: uint16(36975), + 50: uint16(36976), + 51: uint16(36977), + 52: uint16(36978), + 53: uint16(36979), + 54: uint16(36982), + 55: uint16(36983), + 56: uint16(36984), + 57: uint16(36985), + 58: uint16(36986), + 59: uint16(36987), + 60: uint16(36988), + 61: uint16(36990), + 62: uint16(36993), + 63: uint16(36996), + 64: uint16(36997), + 65: uint16(36998), + 66: uint16(36999), + 67: uint16(37001), + 68: uint16(37002), + 69: uint16(37004), + 70: uint16(37005), + 71: uint16(37006), + 72: uint16(37007), + 73: uint16(37008), + 74: uint16(37010), + 75: uint16(37012), + 76: uint16(37014), + 77: uint16(37016), + 78: uint16(37018), + 79: uint16(37020), + 80: uint16(37022), + 81: uint16(37023), + 82: uint16(37024), + 83: uint16(37028), + 84: uint16(37029), + 85: uint16(37031), + 86: uint16(37032), + 87: uint16(37033), + 88: uint16(37035), + 89: uint16(37037), + 90: uint16(37042), + 91: uint16(37047), + 92: uint16(37052), + 93: uint16(37053), + 94: uint16(37055), + 95: uint16(37056), + 96: uint16(25722), + 97: uint16(25783), + 98: uint16(25784), + 99: uint16(25753), + 100: uint16(25786), + 101: uint16(25792), + 102: uint16(25808), + 103: uint16(25815), + 104: uint16(25828), + 105: uint16(25826), + 106: uint16(25865), + 107: uint16(25893), + 108: uint16(25902), + 109: uint16(24331), + 110: uint16(24530), + 111: uint16(29977), + 112: uint16(24337), + 113: uint16(21343), + 114: uint16(21489), + 115: uint16(21501), + 116: uint16(21481), + 117: uint16(21480), + 118: uint16(21499), + 119: uint16(21522), + 120: uint16(21526), + 121: uint16(21510), + 122: uint16(21579), + 123: uint16(21586), + 124: uint16(21587), + 125: uint16(21588), + 126: uint16(21590), + 127: uint16(21571), + 128: uint16(21537), + 129: uint16(21591), + 130: uint16(21593), + 131: uint16(21539), + 132: uint16(21554), + 133: uint16(21634), + 134: uint16(21652), + 135: uint16(21623), + 136: uint16(21617), + 137: uint16(21604), + 138: uint16(21658), + 139: uint16(21659), + 140: uint16(21636), + 141: uint16(21622), + 142: uint16(21606), + 143: uint16(21661), + 144: uint16(21712), + 145: uint16(21677), + 146: uint16(21698), + 147: uint16(21684), + 148: uint16(21714), + 149: uint16(21671), + 150: uint16(21670), + 151: uint16(21715), + 152: uint16(21716), + 153: uint16(21618), + 154: uint16(21667), + 155: uint16(21717), + 156: uint16(21691), + 157: uint16(21695), + 158: uint16(21708), + 159: uint16(21721), + 160: uint16(21722), + 161: uint16(21724), + 162: uint16(21673), + 163: uint16(21674), + 164: uint16(21668), + 165: uint16(21725), + 166: uint16(21711), + 167: uint16(21726), + 168: uint16(21787), + 169: uint16(21735), + 170: uint16(21792), + 171: uint16(21757), + 172: uint16(21780), + 173: uint16(21747), + 174: uint16(21794), + 175: uint16(21795), + 176: uint16(21775), + 177: uint16(21777), + 178: uint16(21799), + 179: uint16(21802), + 180: uint16(21863), + 181: uint16(21903), + 182: uint16(21941), + 183: uint16(21833), + 184: uint16(21869), + 185: uint16(21825), + 186: uint16(21845), + 187: uint16(21823), + 188: uint16(21840), + 189: uint16(21820), + }, + 95: { + 0: uint16(37058), + 1: uint16(37059), + 2: uint16(37062), + 3: uint16(37064), + 4: uint16(37065), + 5: uint16(37067), + 6: uint16(37068), + 7: uint16(37069), + 8: uint16(37074), + 9: uint16(37076), + 10: uint16(37077), + 11: uint16(37078), + 12: uint16(37080), + 13: uint16(37081), + 14: uint16(37082), + 15: uint16(37086), + 16: uint16(37087), + 17: uint16(37088), + 18: uint16(37091), + 19: uint16(37092), + 20: uint16(37093), + 21: uint16(37097), + 22: uint16(37098), + 23: uint16(37100), + 24: uint16(37102), + 25: uint16(37104), + 26: uint16(37105), + 27: uint16(37106), + 28: uint16(37107), + 29: uint16(37109), + 30: uint16(37110), + 31: uint16(37111), + 32: uint16(37113), + 33: uint16(37114), + 34: uint16(37115), + 35: uint16(37116), + 36: uint16(37119), + 37: uint16(37120), + 38: uint16(37121), + 39: uint16(37123), + 40: uint16(37125), + 41: uint16(37126), + 42: uint16(37127), + 43: uint16(37128), + 44: uint16(37129), + 45: uint16(37130), + 46: uint16(37131), + 47: uint16(37132), + 48: uint16(37133), + 49: uint16(37134), + 50: uint16(37135), + 51: uint16(37136), + 52: uint16(37137), + 53: uint16(37138), + 54: uint16(37139), + 55: uint16(37140), + 56: uint16(37141), + 57: uint16(37142), + 58: uint16(37143), + 59: uint16(37144), + 60: uint16(37146), + 61: uint16(37147), + 62: uint16(37148), + 63: uint16(37149), + 64: uint16(37151), + 65: uint16(37152), + 66: uint16(37153), + 67: uint16(37156), + 68: uint16(37157), + 69: uint16(37158), + 70: uint16(37159), + 71: uint16(37160), + 72: uint16(37161), + 73: uint16(37162), + 74: uint16(37163), + 75: uint16(37164), + 76: uint16(37165), + 77: uint16(37166), + 78: uint16(37168), + 79: uint16(37170), + 80: uint16(37171), + 81: uint16(37172), + 82: uint16(37173), + 83: uint16(37174), + 84: uint16(37175), + 85: uint16(37176), + 86: uint16(37178), + 87: uint16(37179), + 88: uint16(37180), + 89: uint16(37181), + 90: uint16(37182), + 91: uint16(37183), + 92: uint16(37184), + 93: uint16(37185), + 94: uint16(37186), + 95: uint16(37188), + 96: uint16(21815), + 97: uint16(21846), + 98: uint16(21877), + 99: uint16(21878), + 100: uint16(21879), + 101: uint16(21811), + 102: uint16(21808), + 103: uint16(21852), + 104: uint16(21899), + 105: uint16(21970), + 106: uint16(21891), + 107: uint16(21937), + 108: uint16(21945), + 109: uint16(21896), + 110: uint16(21889), + 111: uint16(21919), + 112: uint16(21886), + 113: uint16(21974), + 114: uint16(21905), + 115: uint16(21883), + 116: uint16(21983), + 117: uint16(21949), + 118: uint16(21950), + 119: uint16(21908), + 120: uint16(21913), + 121: uint16(21994), + 122: uint16(22007), + 123: uint16(21961), + 124: uint16(22047), + 125: uint16(21969), + 126: uint16(21995), + 127: uint16(21996), + 128: uint16(21972), + 129: uint16(21990), + 130: uint16(21981), + 131: uint16(21956), + 132: uint16(21999), + 133: uint16(21989), + 134: uint16(22002), + 135: uint16(22003), + 136: uint16(21964), + 137: uint16(21965), + 138: uint16(21992), + 139: uint16(22005), + 140: uint16(21988), + 141: uint16(36756), + 142: uint16(22046), + 143: uint16(22024), + 144: uint16(22028), + 145: uint16(22017), + 146: uint16(22052), + 147: uint16(22051), + 148: uint16(22014), + 149: uint16(22016), + 150: uint16(22055), + 151: uint16(22061), + 152: uint16(22104), + 153: uint16(22073), + 154: uint16(22103), + 155: uint16(22060), + 156: uint16(22093), + 157: uint16(22114), + 158: uint16(22105), + 159: uint16(22108), + 160: uint16(22092), + 161: uint16(22100), + 162: uint16(22150), + 163: uint16(22116), + 164: uint16(22129), + 165: uint16(22123), + 166: uint16(22139), + 167: uint16(22140), + 168: uint16(22149), + 169: uint16(22163), + 170: uint16(22191), + 171: uint16(22228), + 172: uint16(22231), + 173: uint16(22237), + 174: uint16(22241), + 175: uint16(22261), + 176: uint16(22251), + 177: uint16(22265), + 178: uint16(22271), + 179: uint16(22276), + 180: uint16(22282), + 181: uint16(22281), + 182: uint16(22300), + 183: uint16(24079), + 184: uint16(24089), + 185: uint16(24084), + 186: uint16(24081), + 187: uint16(24113), + 188: uint16(24123), + 189: uint16(24124), + }, + 96: { + 0: uint16(37189), + 1: uint16(37191), + 2: uint16(37192), + 3: uint16(37201), + 4: uint16(37203), + 5: uint16(37204), + 6: uint16(37205), + 7: uint16(37206), + 8: uint16(37208), + 9: uint16(37209), + 10: uint16(37211), + 11: uint16(37212), + 12: uint16(37215), + 13: uint16(37216), + 14: uint16(37222), + 15: uint16(37223), + 16: uint16(37224), + 17: uint16(37227), + 18: uint16(37229), + 19: uint16(37235), + 20: uint16(37242), + 21: uint16(37243), + 22: uint16(37244), + 23: uint16(37248), + 24: uint16(37249), + 25: uint16(37250), + 26: uint16(37251), + 27: uint16(37252), + 28: uint16(37254), + 29: uint16(37256), + 30: uint16(37258), + 31: uint16(37262), + 32: uint16(37263), + 33: uint16(37267), + 34: uint16(37268), + 35: uint16(37269), + 36: uint16(37270), + 37: uint16(37271), + 38: uint16(37272), + 39: uint16(37273), + 40: uint16(37276), + 41: uint16(37277), + 42: uint16(37278), + 43: uint16(37279), + 44: uint16(37280), + 45: uint16(37281), + 46: uint16(37284), + 47: uint16(37285), + 48: uint16(37286), + 49: uint16(37287), + 50: uint16(37288), + 51: uint16(37289), + 52: uint16(37291), + 53: uint16(37292), + 54: uint16(37296), + 55: uint16(37297), + 56: uint16(37298), + 57: uint16(37299), + 58: uint16(37302), + 59: uint16(37303), + 60: uint16(37304), + 61: uint16(37305), + 62: uint16(37307), + 63: uint16(37308), + 64: uint16(37309), + 65: uint16(37310), + 66: uint16(37311), + 67: uint16(37312), + 68: uint16(37313), + 69: uint16(37314), + 70: uint16(37315), + 71: uint16(37316), + 72: uint16(37317), + 73: uint16(37318), + 74: uint16(37320), + 75: uint16(37323), + 76: uint16(37328), + 77: uint16(37330), + 78: uint16(37331), + 79: uint16(37332), + 80: uint16(37333), + 81: uint16(37334), + 82: uint16(37335), + 83: uint16(37336), + 84: uint16(37337), + 85: uint16(37338), + 86: uint16(37339), + 87: uint16(37341), + 88: uint16(37342), + 89: uint16(37343), + 90: uint16(37344), + 91: uint16(37345), + 92: uint16(37346), + 93: uint16(37347), + 94: uint16(37348), + 95: uint16(37349), + 96: uint16(24119), + 97: uint16(24132), + 98: uint16(24148), + 99: uint16(24155), + 100: uint16(24158), + 101: uint16(24161), + 102: uint16(23692), + 103: uint16(23674), + 104: uint16(23693), + 105: uint16(23696), + 106: uint16(23702), + 107: uint16(23688), + 108: uint16(23704), + 109: uint16(23705), + 110: uint16(23697), + 111: uint16(23706), + 112: uint16(23708), + 113: uint16(23733), + 114: uint16(23714), + 115: uint16(23741), + 116: uint16(23724), + 117: uint16(23723), + 118: uint16(23729), + 119: uint16(23715), + 120: uint16(23745), + 121: uint16(23735), + 122: uint16(23748), + 123: uint16(23762), + 124: uint16(23780), + 125: uint16(23755), + 126: uint16(23781), + 127: uint16(23810), + 128: uint16(23811), + 129: uint16(23847), + 130: uint16(23846), + 131: uint16(23854), + 132: uint16(23844), + 133: uint16(23838), + 134: uint16(23814), + 135: uint16(23835), + 136: uint16(23896), + 137: uint16(23870), + 138: uint16(23860), + 139: uint16(23869), + 140: uint16(23916), + 141: uint16(23899), + 142: uint16(23919), + 143: uint16(23901), + 144: uint16(23915), + 145: uint16(23883), + 146: uint16(23882), + 147: uint16(23913), + 148: uint16(23924), + 149: uint16(23938), + 150: uint16(23961), + 151: uint16(23965), + 152: uint16(35955), + 153: uint16(23991), + 154: uint16(24005), + 155: uint16(24435), + 156: uint16(24439), + 157: uint16(24450), + 158: uint16(24455), + 159: uint16(24457), + 160: uint16(24460), + 161: uint16(24469), + 162: uint16(24473), + 163: uint16(24476), + 164: uint16(24488), + 165: uint16(24493), + 166: uint16(24501), + 167: uint16(24508), + 168: uint16(34914), + 169: uint16(24417), + 170: uint16(29357), + 171: uint16(29360), + 172: uint16(29364), + 173: uint16(29367), + 174: uint16(29368), + 175: uint16(29379), + 176: uint16(29377), + 177: uint16(29390), + 178: uint16(29389), + 179: uint16(29394), + 180: uint16(29416), + 181: uint16(29423), + 182: uint16(29417), + 183: uint16(29426), + 184: uint16(29428), + 185: uint16(29431), + 186: uint16(29441), + 187: uint16(29427), + 188: uint16(29443), + 189: uint16(29434), + }, + 97: { + 0: uint16(37350), + 1: uint16(37351), + 2: uint16(37352), + 3: uint16(37353), + 4: uint16(37354), + 5: uint16(37355), + 6: uint16(37356), + 7: uint16(37357), + 8: uint16(37358), + 9: uint16(37359), + 10: uint16(37360), + 11: uint16(37361), + 12: uint16(37362), + 13: uint16(37363), + 14: uint16(37364), + 15: uint16(37365), + 16: uint16(37366), + 17: uint16(37367), + 18: uint16(37368), + 19: uint16(37369), + 20: uint16(37370), + 21: uint16(37371), + 22: uint16(37372), + 23: uint16(37373), + 24: uint16(37374), + 25: uint16(37375), + 26: uint16(37376), + 27: uint16(37377), + 28: uint16(37378), + 29: uint16(37379), + 30: uint16(37380), + 31: uint16(37381), + 32: uint16(37382), + 33: uint16(37383), + 34: uint16(37384), + 35: uint16(37385), + 36: uint16(37386), + 37: uint16(37387), + 38: uint16(37388), + 39: uint16(37389), + 40: uint16(37390), + 41: uint16(37391), + 42: uint16(37392), + 43: uint16(37393), + 44: uint16(37394), + 45: uint16(37395), + 46: uint16(37396), + 47: uint16(37397), + 48: uint16(37398), + 49: uint16(37399), + 50: uint16(37400), + 51: uint16(37401), + 52: uint16(37402), + 53: uint16(37403), + 54: uint16(37404), + 55: uint16(37405), + 56: uint16(37406), + 57: uint16(37407), + 58: uint16(37408), + 59: uint16(37409), + 60: uint16(37410), + 61: uint16(37411), + 62: uint16(37412), + 63: uint16(37413), + 64: uint16(37414), + 65: uint16(37415), + 66: uint16(37416), + 67: uint16(37417), + 68: uint16(37418), + 69: uint16(37419), + 70: uint16(37420), + 71: uint16(37421), + 72: uint16(37422), + 73: uint16(37423), + 74: uint16(37424), + 75: uint16(37425), + 76: uint16(37426), + 77: uint16(37427), + 78: uint16(37428), + 79: uint16(37429), + 80: uint16(37430), + 81: uint16(37431), + 82: uint16(37432), + 83: uint16(37433), + 84: uint16(37434), + 85: uint16(37435), + 86: uint16(37436), + 87: uint16(37437), + 88: uint16(37438), + 89: uint16(37439), + 90: uint16(37440), + 91: uint16(37441), + 92: uint16(37442), + 93: uint16(37443), + 94: uint16(37444), + 95: uint16(37445), + 96: uint16(29435), + 97: uint16(29463), + 98: uint16(29459), + 99: uint16(29473), + 100: uint16(29450), + 101: uint16(29470), + 102: uint16(29469), + 103: uint16(29461), + 104: uint16(29474), + 105: uint16(29497), + 106: uint16(29477), + 107: uint16(29484), + 108: uint16(29496), + 109: uint16(29489), + 110: uint16(29520), + 111: uint16(29517), + 112: uint16(29527), + 113: uint16(29536), + 114: uint16(29548), + 115: uint16(29551), + 116: uint16(29566), + 117: uint16(33307), + 118: uint16(22821), + 119: uint16(39143), + 120: uint16(22820), + 121: uint16(22786), + 122: uint16(39267), + 123: uint16(39271), + 124: uint16(39272), + 125: uint16(39273), + 126: uint16(39274), + 127: uint16(39275), + 128: uint16(39276), + 129: uint16(39284), + 130: uint16(39287), + 131: uint16(39293), + 132: uint16(39296), + 133: uint16(39300), + 134: uint16(39303), + 135: uint16(39306), + 136: uint16(39309), + 137: uint16(39312), + 138: uint16(39313), + 139: uint16(39315), + 140: uint16(39316), + 141: uint16(39317), + 142: uint16(24192), + 143: uint16(24209), + 144: uint16(24203), + 145: uint16(24214), + 146: uint16(24229), + 147: uint16(24224), + 148: uint16(24249), + 149: uint16(24245), + 150: uint16(24254), + 151: uint16(24243), + 152: uint16(36179), + 153: uint16(24274), + 154: uint16(24273), + 155: uint16(24283), + 156: uint16(24296), + 157: uint16(24298), + 158: uint16(33210), + 159: uint16(24516), + 160: uint16(24521), + 161: uint16(24534), + 162: uint16(24527), + 163: uint16(24579), + 164: uint16(24558), + 165: uint16(24580), + 166: uint16(24545), + 167: uint16(24548), + 168: uint16(24574), + 169: uint16(24581), + 170: uint16(24582), + 171: uint16(24554), + 172: uint16(24557), + 173: uint16(24568), + 174: uint16(24601), + 175: uint16(24629), + 176: uint16(24614), + 177: uint16(24603), + 178: uint16(24591), + 179: uint16(24589), + 180: uint16(24617), + 181: uint16(24619), + 182: uint16(24586), + 183: uint16(24639), + 184: uint16(24609), + 185: uint16(24696), + 186: uint16(24697), + 187: uint16(24699), + 188: uint16(24698), + 189: uint16(24642), + }, + 98: { + 0: uint16(37446), + 1: uint16(37447), + 2: uint16(37448), + 3: uint16(37449), + 4: uint16(37450), + 5: uint16(37451), + 6: uint16(37452), + 7: uint16(37453), + 8: uint16(37454), + 9: uint16(37455), + 10: uint16(37456), + 11: uint16(37457), + 12: uint16(37458), + 13: uint16(37459), + 14: uint16(37460), + 15: uint16(37461), + 16: uint16(37462), + 17: uint16(37463), + 18: uint16(37464), + 19: uint16(37465), + 20: uint16(37466), + 21: uint16(37467), + 22: uint16(37468), + 23: uint16(37469), + 24: uint16(37470), + 25: uint16(37471), + 26: uint16(37472), + 27: uint16(37473), + 28: uint16(37474), + 29: uint16(37475), + 30: uint16(37476), + 31: uint16(37477), + 32: uint16(37478), + 33: uint16(37479), + 34: uint16(37480), + 35: uint16(37481), + 36: uint16(37482), + 37: uint16(37483), + 38: uint16(37484), + 39: uint16(37485), + 40: uint16(37486), + 41: uint16(37487), + 42: uint16(37488), + 43: uint16(37489), + 44: uint16(37490), + 45: uint16(37491), + 46: uint16(37493), + 47: uint16(37494), + 48: uint16(37495), + 49: uint16(37496), + 50: uint16(37497), + 51: uint16(37498), + 52: uint16(37499), + 53: uint16(37500), + 54: uint16(37501), + 55: uint16(37502), + 56: uint16(37503), + 57: uint16(37504), + 58: uint16(37505), + 59: uint16(37506), + 60: uint16(37507), + 61: uint16(37508), + 62: uint16(37509), + 63: uint16(37510), + 64: uint16(37511), + 65: uint16(37512), + 66: uint16(37513), + 67: uint16(37514), + 68: uint16(37515), + 69: uint16(37516), + 70: uint16(37517), + 71: uint16(37519), + 72: uint16(37520), + 73: uint16(37521), + 74: uint16(37522), + 75: uint16(37523), + 76: uint16(37524), + 77: uint16(37525), + 78: uint16(37526), + 79: uint16(37527), + 80: uint16(37528), + 81: uint16(37529), + 82: uint16(37530), + 83: uint16(37531), + 84: uint16(37532), + 85: uint16(37533), + 86: uint16(37534), + 87: uint16(37535), + 88: uint16(37536), + 89: uint16(37537), + 90: uint16(37538), + 91: uint16(37539), + 92: uint16(37540), + 93: uint16(37541), + 94: uint16(37542), + 95: uint16(37543), + 96: uint16(24682), + 97: uint16(24701), + 98: uint16(24726), + 99: uint16(24730), + 100: uint16(24749), + 101: uint16(24733), + 102: uint16(24707), + 103: uint16(24722), + 104: uint16(24716), + 105: uint16(24731), + 106: uint16(24812), + 107: uint16(24763), + 108: uint16(24753), + 109: uint16(24797), + 110: uint16(24792), + 111: uint16(24774), + 112: uint16(24794), + 113: uint16(24756), + 114: uint16(24864), + 115: uint16(24870), + 116: uint16(24853), + 117: uint16(24867), + 118: uint16(24820), + 119: uint16(24832), + 120: uint16(24846), + 121: uint16(24875), + 122: uint16(24906), + 123: uint16(24949), + 124: uint16(25004), + 125: uint16(24980), + 126: uint16(24999), + 127: uint16(25015), + 128: uint16(25044), + 129: uint16(25077), + 130: uint16(24541), + 131: uint16(38579), + 132: uint16(38377), + 133: uint16(38379), + 134: uint16(38385), + 135: uint16(38387), + 136: uint16(38389), + 137: uint16(38390), + 138: uint16(38396), + 139: uint16(38398), + 140: uint16(38403), + 141: uint16(38404), + 142: uint16(38406), + 143: uint16(38408), + 144: uint16(38410), + 145: uint16(38411), + 146: uint16(38412), + 147: uint16(38413), + 148: uint16(38415), + 149: uint16(38418), + 150: uint16(38421), + 151: uint16(38422), + 152: uint16(38423), + 153: uint16(38425), + 154: uint16(38426), + 155: uint16(20012), + 156: uint16(29247), + 157: uint16(25109), + 158: uint16(27701), + 159: uint16(27732), + 160: uint16(27740), + 161: uint16(27722), + 162: uint16(27811), + 163: uint16(27781), + 164: uint16(27792), + 165: uint16(27796), + 166: uint16(27788), + 167: uint16(27752), + 168: uint16(27753), + 169: uint16(27764), + 170: uint16(27766), + 171: uint16(27782), + 172: uint16(27817), + 173: uint16(27856), + 174: uint16(27860), + 175: uint16(27821), + 176: uint16(27895), + 177: uint16(27896), + 178: uint16(27889), + 179: uint16(27863), + 180: uint16(27826), + 181: uint16(27872), + 182: uint16(27862), + 183: uint16(27898), + 184: uint16(27883), + 185: uint16(27886), + 186: uint16(27825), + 187: uint16(27859), + 188: uint16(27887), + 189: uint16(27902), + }, + 99: { + 0: uint16(37544), + 1: uint16(37545), + 2: uint16(37546), + 3: uint16(37547), + 4: uint16(37548), + 5: uint16(37549), + 6: uint16(37551), + 7: uint16(37552), + 8: uint16(37553), + 9: uint16(37554), + 10: uint16(37555), + 11: uint16(37556), + 12: uint16(37557), + 13: uint16(37558), + 14: uint16(37559), + 15: uint16(37560), + 16: uint16(37561), + 17: uint16(37562), + 18: uint16(37563), + 19: uint16(37564), + 20: uint16(37565), + 21: uint16(37566), + 22: uint16(37567), + 23: uint16(37568), + 24: uint16(37569), + 25: uint16(37570), + 26: uint16(37571), + 27: uint16(37572), + 28: uint16(37573), + 29: uint16(37574), + 30: uint16(37575), + 31: uint16(37577), + 32: uint16(37578), + 33: uint16(37579), + 34: uint16(37580), + 35: uint16(37581), + 36: uint16(37582), + 37: uint16(37583), + 38: uint16(37584), + 39: uint16(37585), + 40: uint16(37586), + 41: uint16(37587), + 42: uint16(37588), + 43: uint16(37589), + 44: uint16(37590), + 45: uint16(37591), + 46: uint16(37592), + 47: uint16(37593), + 48: uint16(37594), + 49: uint16(37595), + 50: uint16(37596), + 51: uint16(37597), + 52: uint16(37598), + 53: uint16(37599), + 54: uint16(37600), + 55: uint16(37601), + 56: uint16(37602), + 57: uint16(37603), + 58: uint16(37604), + 59: uint16(37605), + 60: uint16(37606), + 61: uint16(37607), + 62: uint16(37608), + 63: uint16(37609), + 64: uint16(37610), + 65: uint16(37611), + 66: uint16(37612), + 67: uint16(37613), + 68: uint16(37614), + 69: uint16(37615), + 70: uint16(37616), + 71: uint16(37617), + 72: uint16(37618), + 73: uint16(37619), + 74: uint16(37620), + 75: uint16(37621), + 76: uint16(37622), + 77: uint16(37623), + 78: uint16(37624), + 79: uint16(37625), + 80: uint16(37626), + 81: uint16(37627), + 82: uint16(37628), + 83: uint16(37629), + 84: uint16(37630), + 85: uint16(37631), + 86: uint16(37632), + 87: uint16(37633), + 88: uint16(37634), + 89: uint16(37635), + 90: uint16(37636), + 91: uint16(37637), + 92: uint16(37638), + 93: uint16(37639), + 94: uint16(37640), + 95: uint16(37641), + 96: uint16(27961), + 97: uint16(27943), + 98: uint16(27916), + 99: uint16(27971), + 100: uint16(27976), + 101: uint16(27911), + 102: uint16(27908), + 103: uint16(27929), + 104: uint16(27918), + 105: uint16(27947), + 106: uint16(27981), + 107: uint16(27950), + 108: uint16(27957), + 109: uint16(27930), + 110: uint16(27983), + 111: uint16(27986), + 112: uint16(27988), + 113: uint16(27955), + 114: uint16(28049), + 115: uint16(28015), + 116: uint16(28062), + 117: uint16(28064), + 118: uint16(27998), + 119: uint16(28051), + 120: uint16(28052), + 121: uint16(27996), + 122: uint16(28000), + 123: uint16(28028), + 124: uint16(28003), + 125: uint16(28186), + 126: uint16(28103), + 127: uint16(28101), + 128: uint16(28126), + 129: uint16(28174), + 130: uint16(28095), + 131: uint16(28128), + 132: uint16(28177), + 133: uint16(28134), + 134: uint16(28125), + 135: uint16(28121), + 136: uint16(28182), + 137: uint16(28075), + 138: uint16(28172), + 139: uint16(28078), + 140: uint16(28203), + 141: uint16(28270), + 142: uint16(28238), + 143: uint16(28267), + 144: uint16(28338), + 145: uint16(28255), + 146: uint16(28294), + 147: uint16(28243), + 148: uint16(28244), + 149: uint16(28210), + 150: uint16(28197), + 151: uint16(28228), + 152: uint16(28383), + 153: uint16(28337), + 154: uint16(28312), + 155: uint16(28384), + 156: uint16(28461), + 157: uint16(28386), + 158: uint16(28325), + 159: uint16(28327), + 160: uint16(28349), + 161: uint16(28347), + 162: uint16(28343), + 163: uint16(28375), + 164: uint16(28340), + 165: uint16(28367), + 166: uint16(28303), + 167: uint16(28354), + 168: uint16(28319), + 169: uint16(28514), + 170: uint16(28486), + 171: uint16(28487), + 172: uint16(28452), + 173: uint16(28437), + 174: uint16(28409), + 175: uint16(28463), + 176: uint16(28470), + 177: uint16(28491), + 178: uint16(28532), + 179: uint16(28458), + 180: uint16(28425), + 181: uint16(28457), + 182: uint16(28553), + 183: uint16(28557), + 184: uint16(28556), + 185: uint16(28536), + 186: uint16(28530), + 187: uint16(28540), + 188: uint16(28538), + 189: uint16(28625), + }, + 100: { + 0: uint16(37642), + 1: uint16(37643), + 2: uint16(37644), + 3: uint16(37645), + 4: uint16(37646), + 5: uint16(37647), + 6: uint16(37648), + 7: uint16(37649), + 8: uint16(37650), + 9: uint16(37651), + 10: uint16(37652), + 11: uint16(37653), + 12: uint16(37654), + 13: uint16(37655), + 14: uint16(37656), + 15: uint16(37657), + 16: uint16(37658), + 17: uint16(37659), + 18: uint16(37660), + 19: uint16(37661), + 20: uint16(37662), + 21: uint16(37663), + 22: uint16(37664), + 23: uint16(37665), + 24: uint16(37666), + 25: uint16(37667), + 26: uint16(37668), + 27: uint16(37669), + 28: uint16(37670), + 29: uint16(37671), + 30: uint16(37672), + 31: uint16(37673), + 32: uint16(37674), + 33: uint16(37675), + 34: uint16(37676), + 35: uint16(37677), + 36: uint16(37678), + 37: uint16(37679), + 38: uint16(37680), + 39: uint16(37681), + 40: uint16(37682), + 41: uint16(37683), + 42: uint16(37684), + 43: uint16(37685), + 44: uint16(37686), + 45: uint16(37687), + 46: uint16(37688), + 47: uint16(37689), + 48: uint16(37690), + 49: uint16(37691), + 50: uint16(37692), + 51: uint16(37693), + 52: uint16(37695), + 53: uint16(37696), + 54: uint16(37697), + 55: uint16(37698), + 56: uint16(37699), + 57: uint16(37700), + 58: uint16(37701), + 59: uint16(37702), + 60: uint16(37703), + 61: uint16(37704), + 62: uint16(37705), + 63: uint16(37706), + 64: uint16(37707), + 65: uint16(37708), + 66: uint16(37709), + 67: uint16(37710), + 68: uint16(37711), + 69: uint16(37712), + 70: uint16(37713), + 71: uint16(37714), + 72: uint16(37715), + 73: uint16(37716), + 74: uint16(37717), + 75: uint16(37718), + 76: uint16(37719), + 77: uint16(37720), + 78: uint16(37721), + 79: uint16(37722), + 80: uint16(37723), + 81: uint16(37724), + 82: uint16(37725), + 83: uint16(37726), + 84: uint16(37727), + 85: uint16(37728), + 86: uint16(37729), + 87: uint16(37730), + 88: uint16(37731), + 89: uint16(37732), + 90: uint16(37733), + 91: uint16(37734), + 92: uint16(37735), + 93: uint16(37736), + 94: uint16(37737), + 95: uint16(37739), + 96: uint16(28617), + 97: uint16(28583), + 98: uint16(28601), + 99: uint16(28598), + 100: uint16(28610), + 101: uint16(28641), + 102: uint16(28654), + 103: uint16(28638), + 104: uint16(28640), + 105: uint16(28655), + 106: uint16(28698), + 107: uint16(28707), + 108: uint16(28699), + 109: uint16(28729), + 110: uint16(28725), + 111: uint16(28751), + 112: uint16(28766), + 113: uint16(23424), + 114: uint16(23428), + 115: uint16(23445), + 116: uint16(23443), + 117: uint16(23461), + 118: uint16(23480), + 119: uint16(29999), + 120: uint16(39582), + 121: uint16(25652), + 122: uint16(23524), + 123: uint16(23534), + 124: uint16(35120), + 125: uint16(23536), + 126: uint16(36423), + 127: uint16(35591), + 128: uint16(36790), + 129: uint16(36819), + 130: uint16(36821), + 131: uint16(36837), + 132: uint16(36846), + 133: uint16(36836), + 134: uint16(36841), + 135: uint16(36838), + 136: uint16(36851), + 137: uint16(36840), + 138: uint16(36869), + 139: uint16(36868), + 140: uint16(36875), + 141: uint16(36902), + 142: uint16(36881), + 143: uint16(36877), + 144: uint16(36886), + 145: uint16(36897), + 146: uint16(36917), + 147: uint16(36918), + 148: uint16(36909), + 149: uint16(36911), + 150: uint16(36932), + 151: uint16(36945), + 152: uint16(36946), + 153: uint16(36944), + 154: uint16(36968), + 155: uint16(36952), + 156: uint16(36962), + 157: uint16(36955), + 158: uint16(26297), + 159: uint16(36980), + 160: uint16(36989), + 161: uint16(36994), + 162: uint16(37000), + 163: uint16(36995), + 164: uint16(37003), + 165: uint16(24400), + 166: uint16(24407), + 167: uint16(24406), + 168: uint16(24408), + 169: uint16(23611), + 170: uint16(21675), + 171: uint16(23632), + 172: uint16(23641), + 173: uint16(23409), + 174: uint16(23651), + 175: uint16(23654), + 176: uint16(32700), + 177: uint16(24362), + 178: uint16(24361), + 179: uint16(24365), + 180: uint16(33396), + 181: uint16(24380), + 182: uint16(39739), + 183: uint16(23662), + 184: uint16(22913), + 185: uint16(22915), + 186: uint16(22925), + 187: uint16(22953), + 188: uint16(22954), + 189: uint16(22947), + }, + 101: { + 0: uint16(37740), + 1: uint16(37741), + 2: uint16(37742), + 3: uint16(37743), + 4: uint16(37744), + 5: uint16(37745), + 6: uint16(37746), + 7: uint16(37747), + 8: uint16(37748), + 9: uint16(37749), + 10: uint16(37750), + 11: uint16(37751), + 12: uint16(37752), + 13: uint16(37753), + 14: uint16(37754), + 15: uint16(37755), + 16: uint16(37756), + 17: uint16(37757), + 18: uint16(37758), + 19: uint16(37759), + 20: uint16(37760), + 21: uint16(37761), + 22: uint16(37762), + 23: uint16(37763), + 24: uint16(37764), + 25: uint16(37765), + 26: uint16(37766), + 27: uint16(37767), + 28: uint16(37768), + 29: uint16(37769), + 30: uint16(37770), + 31: uint16(37771), + 32: uint16(37772), + 33: uint16(37773), + 34: uint16(37774), + 35: uint16(37776), + 36: uint16(37777), + 37: uint16(37778), + 38: uint16(37779), + 39: uint16(37780), + 40: uint16(37781), + 41: uint16(37782), + 42: uint16(37783), + 43: uint16(37784), + 44: uint16(37785), + 45: uint16(37786), + 46: uint16(37787), + 47: uint16(37788), + 48: uint16(37789), + 49: uint16(37790), + 50: uint16(37791), + 51: uint16(37792), + 52: uint16(37793), + 53: uint16(37794), + 54: uint16(37795), + 55: uint16(37796), + 56: uint16(37797), + 57: uint16(37798), + 58: uint16(37799), + 59: uint16(37800), + 60: uint16(37801), + 61: uint16(37802), + 62: uint16(37803), + 63: uint16(37804), + 64: uint16(37805), + 65: uint16(37806), + 66: uint16(37807), + 67: uint16(37808), + 68: uint16(37809), + 69: uint16(37810), + 70: uint16(37811), + 71: uint16(37812), + 72: uint16(37813), + 73: uint16(37814), + 74: uint16(37815), + 75: uint16(37816), + 76: uint16(37817), + 77: uint16(37818), + 78: uint16(37819), + 79: uint16(37820), + 80: uint16(37821), + 81: uint16(37822), + 82: uint16(37823), + 83: uint16(37824), + 84: uint16(37825), + 85: uint16(37826), + 86: uint16(37827), + 87: uint16(37828), + 88: uint16(37829), + 89: uint16(37830), + 90: uint16(37831), + 91: uint16(37832), + 92: uint16(37833), + 93: uint16(37835), + 94: uint16(37836), + 95: uint16(37837), + 96: uint16(22935), + 97: uint16(22986), + 98: uint16(22955), + 99: uint16(22942), + 100: uint16(22948), + 101: uint16(22994), + 102: uint16(22962), + 103: uint16(22959), + 104: uint16(22999), + 105: uint16(22974), + 106: uint16(23045), + 107: uint16(23046), + 108: uint16(23005), + 109: uint16(23048), + 110: uint16(23011), + 111: uint16(23000), + 112: uint16(23033), + 113: uint16(23052), + 114: uint16(23049), + 115: uint16(23090), + 116: uint16(23092), + 117: uint16(23057), + 118: uint16(23075), + 119: uint16(23059), + 120: uint16(23104), + 121: uint16(23143), + 122: uint16(23114), + 123: uint16(23125), + 124: uint16(23100), + 125: uint16(23138), + 126: uint16(23157), + 127: uint16(33004), + 128: uint16(23210), + 129: uint16(23195), + 130: uint16(23159), + 131: uint16(23162), + 132: uint16(23230), + 133: uint16(23275), + 134: uint16(23218), + 135: uint16(23250), + 136: uint16(23252), + 137: uint16(23224), + 138: uint16(23264), + 139: uint16(23267), + 140: uint16(23281), + 141: uint16(23254), + 142: uint16(23270), + 143: uint16(23256), + 144: uint16(23260), + 145: uint16(23305), + 146: uint16(23319), + 147: uint16(23318), + 148: uint16(23346), + 149: uint16(23351), + 150: uint16(23360), + 151: uint16(23573), + 152: uint16(23580), + 153: uint16(23386), + 154: uint16(23397), + 155: uint16(23411), + 156: uint16(23377), + 157: uint16(23379), + 158: uint16(23394), + 159: uint16(39541), + 160: uint16(39543), + 161: uint16(39544), + 162: uint16(39546), + 163: uint16(39551), + 164: uint16(39549), + 165: uint16(39552), + 166: uint16(39553), + 167: uint16(39557), + 168: uint16(39560), + 169: uint16(39562), + 170: uint16(39568), + 171: uint16(39570), + 172: uint16(39571), + 173: uint16(39574), + 174: uint16(39576), + 175: uint16(39579), + 176: uint16(39580), + 177: uint16(39581), + 178: uint16(39583), + 179: uint16(39584), + 180: uint16(39586), + 181: uint16(39587), + 182: uint16(39589), + 183: uint16(39591), + 184: uint16(32415), + 185: uint16(32417), + 186: uint16(32419), + 187: uint16(32421), + 188: uint16(32424), + 189: uint16(32425), + }, + 102: { + 0: uint16(37838), + 1: uint16(37839), + 2: uint16(37840), + 3: uint16(37841), + 4: uint16(37842), + 5: uint16(37843), + 6: uint16(37844), + 7: uint16(37845), + 8: uint16(37847), + 9: uint16(37848), + 10: uint16(37849), + 11: uint16(37850), + 12: uint16(37851), + 13: uint16(37852), + 14: uint16(37853), + 15: uint16(37854), + 16: uint16(37855), + 17: uint16(37856), + 18: uint16(37857), + 19: uint16(37858), + 20: uint16(37859), + 21: uint16(37860), + 22: uint16(37861), + 23: uint16(37862), + 24: uint16(37863), + 25: uint16(37864), + 26: uint16(37865), + 27: uint16(37866), + 28: uint16(37867), + 29: uint16(37868), + 30: uint16(37869), + 31: uint16(37870), + 32: uint16(37871), + 33: uint16(37872), + 34: uint16(37873), + 35: uint16(37874), + 36: uint16(37875), + 37: uint16(37876), + 38: uint16(37877), + 39: uint16(37878), + 40: uint16(37879), + 41: uint16(37880), + 42: uint16(37881), + 43: uint16(37882), + 44: uint16(37883), + 45: uint16(37884), + 46: uint16(37885), + 47: uint16(37886), + 48: uint16(37887), + 49: uint16(37888), + 50: uint16(37889), + 51: uint16(37890), + 52: uint16(37891), + 53: uint16(37892), + 54: uint16(37893), + 55: uint16(37894), + 56: uint16(37895), + 57: uint16(37896), + 58: uint16(37897), + 59: uint16(37898), + 60: uint16(37899), + 61: uint16(37900), + 62: uint16(37901), + 63: uint16(37902), + 64: uint16(37903), + 65: uint16(37904), + 66: uint16(37905), + 67: uint16(37906), + 68: uint16(37907), + 69: uint16(37908), + 70: uint16(37909), + 71: uint16(37910), + 72: uint16(37911), + 73: uint16(37912), + 74: uint16(37913), + 75: uint16(37914), + 76: uint16(37915), + 77: uint16(37916), + 78: uint16(37917), + 79: uint16(37918), + 80: uint16(37919), + 81: uint16(37920), + 82: uint16(37921), + 83: uint16(37922), + 84: uint16(37923), + 85: uint16(37924), + 86: uint16(37925), + 87: uint16(37926), + 88: uint16(37927), + 89: uint16(37928), + 90: uint16(37929), + 91: uint16(37930), + 92: uint16(37931), + 93: uint16(37932), + 94: uint16(37933), + 95: uint16(37934), + 96: uint16(32429), + 97: uint16(32432), + 98: uint16(32446), + 99: uint16(32448), + 100: uint16(32449), + 101: uint16(32450), + 102: uint16(32457), + 103: uint16(32459), + 104: uint16(32460), + 105: uint16(32464), + 106: uint16(32468), + 107: uint16(32471), + 108: uint16(32475), + 109: uint16(32480), + 110: uint16(32481), + 111: uint16(32488), + 112: uint16(32491), + 113: uint16(32494), + 114: uint16(32495), + 115: uint16(32497), + 116: uint16(32498), + 117: uint16(32525), + 118: uint16(32502), + 119: uint16(32506), + 120: uint16(32507), + 121: uint16(32510), + 122: uint16(32513), + 123: uint16(32514), + 124: uint16(32515), + 125: uint16(32519), + 126: uint16(32520), + 127: uint16(32523), + 128: uint16(32524), + 129: uint16(32527), + 130: uint16(32529), + 131: uint16(32530), + 132: uint16(32535), + 133: uint16(32537), + 134: uint16(32540), + 135: uint16(32539), + 136: uint16(32543), + 137: uint16(32545), + 138: uint16(32546), + 139: uint16(32547), + 140: uint16(32548), + 141: uint16(32549), + 142: uint16(32550), + 143: uint16(32551), + 144: uint16(32554), + 145: uint16(32555), + 146: uint16(32556), + 147: uint16(32557), + 148: uint16(32559), + 149: uint16(32560), + 150: uint16(32561), + 151: uint16(32562), + 152: uint16(32563), + 153: uint16(32565), + 154: uint16(24186), + 155: uint16(30079), + 156: uint16(24027), + 157: uint16(30014), + 158: uint16(37013), + 159: uint16(29582), + 160: uint16(29585), + 161: uint16(29614), + 162: uint16(29602), + 163: uint16(29599), + 164: uint16(29647), + 165: uint16(29634), + 166: uint16(29649), + 167: uint16(29623), + 168: uint16(29619), + 169: uint16(29632), + 170: uint16(29641), + 171: uint16(29640), + 172: uint16(29669), + 173: uint16(29657), + 174: uint16(39036), + 175: uint16(29706), + 176: uint16(29673), + 177: uint16(29671), + 178: uint16(29662), + 179: uint16(29626), + 180: uint16(29682), + 181: uint16(29711), + 182: uint16(29738), + 183: uint16(29787), + 184: uint16(29734), + 185: uint16(29733), + 186: uint16(29736), + 187: uint16(29744), + 188: uint16(29742), + 189: uint16(29740), + }, + 103: { + 0: uint16(37935), + 1: uint16(37936), + 2: uint16(37937), + 3: uint16(37938), + 4: uint16(37939), + 5: uint16(37940), + 6: uint16(37941), + 7: uint16(37942), + 8: uint16(37943), + 9: uint16(37944), + 10: uint16(37945), + 11: uint16(37946), + 12: uint16(37947), + 13: uint16(37948), + 14: uint16(37949), + 15: uint16(37951), + 16: uint16(37952), + 17: uint16(37953), + 18: uint16(37954), + 19: uint16(37955), + 20: uint16(37956), + 21: uint16(37957), + 22: uint16(37958), + 23: uint16(37959), + 24: uint16(37960), + 25: uint16(37961), + 26: uint16(37962), + 27: uint16(37963), + 28: uint16(37964), + 29: uint16(37965), + 30: uint16(37966), + 31: uint16(37967), + 32: uint16(37968), + 33: uint16(37969), + 34: uint16(37970), + 35: uint16(37971), + 36: uint16(37972), + 37: uint16(37973), + 38: uint16(37974), + 39: uint16(37975), + 40: uint16(37976), + 41: uint16(37977), + 42: uint16(37978), + 43: uint16(37979), + 44: uint16(37980), + 45: uint16(37981), + 46: uint16(37982), + 47: uint16(37983), + 48: uint16(37984), + 49: uint16(37985), + 50: uint16(37986), + 51: uint16(37987), + 52: uint16(37988), + 53: uint16(37989), + 54: uint16(37990), + 55: uint16(37991), + 56: uint16(37992), + 57: uint16(37993), + 58: uint16(37994), + 59: uint16(37996), + 60: uint16(37997), + 61: uint16(37998), + 62: uint16(37999), + 63: uint16(38000), + 64: uint16(38001), + 65: uint16(38002), + 66: uint16(38003), + 67: uint16(38004), + 68: uint16(38005), + 69: uint16(38006), + 70: uint16(38007), + 71: uint16(38008), + 72: uint16(38009), + 73: uint16(38010), + 74: uint16(38011), + 75: uint16(38012), + 76: uint16(38013), + 77: uint16(38014), + 78: uint16(38015), + 79: uint16(38016), + 80: uint16(38017), + 81: uint16(38018), + 82: uint16(38019), + 83: uint16(38020), + 84: uint16(38033), + 85: uint16(38038), + 86: uint16(38040), + 87: uint16(38087), + 88: uint16(38095), + 89: uint16(38099), + 90: uint16(38100), + 91: uint16(38106), + 92: uint16(38118), + 93: uint16(38139), + 94: uint16(38172), + 95: uint16(38176), + 96: uint16(29723), + 97: uint16(29722), + 98: uint16(29761), + 99: uint16(29788), + 100: uint16(29783), + 101: uint16(29781), + 102: uint16(29785), + 103: uint16(29815), + 104: uint16(29805), + 105: uint16(29822), + 106: uint16(29852), + 107: uint16(29838), + 108: uint16(29824), + 109: uint16(29825), + 110: uint16(29831), + 111: uint16(29835), + 112: uint16(29854), + 113: uint16(29864), + 114: uint16(29865), + 115: uint16(29840), + 116: uint16(29863), + 117: uint16(29906), + 118: uint16(29882), + 119: uint16(38890), + 120: uint16(38891), + 121: uint16(38892), + 122: uint16(26444), + 123: uint16(26451), + 124: uint16(26462), + 125: uint16(26440), + 126: uint16(26473), + 127: uint16(26533), + 128: uint16(26503), + 129: uint16(26474), + 130: uint16(26483), + 131: uint16(26520), + 132: uint16(26535), + 133: uint16(26485), + 134: uint16(26536), + 135: uint16(26526), + 136: uint16(26541), + 137: uint16(26507), + 138: uint16(26487), + 139: uint16(26492), + 140: uint16(26608), + 141: uint16(26633), + 142: uint16(26584), + 143: uint16(26634), + 144: uint16(26601), + 145: uint16(26544), + 146: uint16(26636), + 147: uint16(26585), + 148: uint16(26549), + 149: uint16(26586), + 150: uint16(26547), + 151: uint16(26589), + 152: uint16(26624), + 153: uint16(26563), + 154: uint16(26552), + 155: uint16(26594), + 156: uint16(26638), + 157: uint16(26561), + 158: uint16(26621), + 159: uint16(26674), + 160: uint16(26675), + 161: uint16(26720), + 162: uint16(26721), + 163: uint16(26702), + 164: uint16(26722), + 165: uint16(26692), + 166: uint16(26724), + 167: uint16(26755), + 168: uint16(26653), + 169: uint16(26709), + 170: uint16(26726), + 171: uint16(26689), + 172: uint16(26727), + 173: uint16(26688), + 174: uint16(26686), + 175: uint16(26698), + 176: uint16(26697), + 177: uint16(26665), + 178: uint16(26805), + 179: uint16(26767), + 180: uint16(26740), + 181: uint16(26743), + 182: uint16(26771), + 183: uint16(26731), + 184: uint16(26818), + 185: uint16(26990), + 186: uint16(26876), + 187: uint16(26911), + 188: uint16(26912), + 189: uint16(26873), + }, + 104: { + 0: uint16(38183), + 1: uint16(38195), + 2: uint16(38205), + 3: uint16(38211), + 4: uint16(38216), + 5: uint16(38219), + 6: uint16(38229), + 7: uint16(38234), + 8: uint16(38240), + 9: uint16(38254), + 10: uint16(38260), + 11: uint16(38261), + 12: uint16(38263), + 13: uint16(38264), + 14: uint16(38265), + 15: uint16(38266), + 16: uint16(38267), + 17: uint16(38268), + 18: uint16(38269), + 19: uint16(38270), + 20: uint16(38272), + 21: uint16(38273), + 22: uint16(38274), + 23: uint16(38275), + 24: uint16(38276), + 25: uint16(38277), + 26: uint16(38278), + 27: uint16(38279), + 28: uint16(38280), + 29: uint16(38281), + 30: uint16(38282), + 31: uint16(38283), + 32: uint16(38284), + 33: uint16(38285), + 34: uint16(38286), + 35: uint16(38287), + 36: uint16(38288), + 37: uint16(38289), + 38: uint16(38290), + 39: uint16(38291), + 40: uint16(38292), + 41: uint16(38293), + 42: uint16(38294), + 43: uint16(38295), + 44: uint16(38296), + 45: uint16(38297), + 46: uint16(38298), + 47: uint16(38299), + 48: uint16(38300), + 49: uint16(38301), + 50: uint16(38302), + 51: uint16(38303), + 52: uint16(38304), + 53: uint16(38305), + 54: uint16(38306), + 55: uint16(38307), + 56: uint16(38308), + 57: uint16(38309), + 58: uint16(38310), + 59: uint16(38311), + 60: uint16(38312), + 61: uint16(38313), + 62: uint16(38314), + 63: uint16(38315), + 64: uint16(38316), + 65: uint16(38317), + 66: uint16(38318), + 67: uint16(38319), + 68: uint16(38320), + 69: uint16(38321), + 70: uint16(38322), + 71: uint16(38323), + 72: uint16(38324), + 73: uint16(38325), + 74: uint16(38326), + 75: uint16(38327), + 76: uint16(38328), + 77: uint16(38329), + 78: uint16(38330), + 79: uint16(38331), + 80: uint16(38332), + 81: uint16(38333), + 82: uint16(38334), + 83: uint16(38335), + 84: uint16(38336), + 85: uint16(38337), + 86: uint16(38338), + 87: uint16(38339), + 88: uint16(38340), + 89: uint16(38341), + 90: uint16(38342), + 91: uint16(38343), + 92: uint16(38344), + 93: uint16(38345), + 94: uint16(38346), + 95: uint16(38347), + 96: uint16(26916), + 97: uint16(26864), + 98: uint16(26891), + 99: uint16(26881), + 100: uint16(26967), + 101: uint16(26851), + 102: uint16(26896), + 103: uint16(26993), + 104: uint16(26937), + 105: uint16(26976), + 106: uint16(26946), + 107: uint16(26973), + 108: uint16(27012), + 109: uint16(26987), + 110: uint16(27008), + 111: uint16(27032), + 112: uint16(27000), + 113: uint16(26932), + 114: uint16(27084), + 115: uint16(27015), + 116: uint16(27016), + 117: uint16(27086), + 118: uint16(27017), + 119: uint16(26982), + 120: uint16(26979), + 121: uint16(27001), + 122: uint16(27035), + 123: uint16(27047), + 124: uint16(27067), + 125: uint16(27051), + 126: uint16(27053), + 127: uint16(27092), + 128: uint16(27057), + 129: uint16(27073), + 130: uint16(27082), + 131: uint16(27103), + 132: uint16(27029), + 133: uint16(27104), + 134: uint16(27021), + 135: uint16(27135), + 136: uint16(27183), + 137: uint16(27117), + 138: uint16(27159), + 139: uint16(27160), + 140: uint16(27237), + 141: uint16(27122), + 142: uint16(27204), + 143: uint16(27198), + 144: uint16(27296), + 145: uint16(27216), + 146: uint16(27227), + 147: uint16(27189), + 148: uint16(27278), + 149: uint16(27257), + 150: uint16(27197), + 151: uint16(27176), + 152: uint16(27224), + 153: uint16(27260), + 154: uint16(27281), + 155: uint16(27280), + 156: uint16(27305), + 157: uint16(27287), + 158: uint16(27307), + 159: uint16(29495), + 160: uint16(29522), + 161: uint16(27521), + 162: uint16(27522), + 163: uint16(27527), + 164: uint16(27524), + 165: uint16(27538), + 166: uint16(27539), + 167: uint16(27533), + 168: uint16(27546), + 169: uint16(27547), + 170: uint16(27553), + 171: uint16(27562), + 172: uint16(36715), + 173: uint16(36717), + 174: uint16(36721), + 175: uint16(36722), + 176: uint16(36723), + 177: uint16(36725), + 178: uint16(36726), + 179: uint16(36728), + 180: uint16(36727), + 181: uint16(36729), + 182: uint16(36730), + 183: uint16(36732), + 184: uint16(36734), + 185: uint16(36737), + 186: uint16(36738), + 187: uint16(36740), + 188: uint16(36743), + 189: uint16(36747), + }, + 105: { + 0: uint16(38348), + 1: uint16(38349), + 2: uint16(38350), + 3: uint16(38351), + 4: uint16(38352), + 5: uint16(38353), + 6: uint16(38354), + 7: uint16(38355), + 8: uint16(38356), + 9: uint16(38357), + 10: uint16(38358), + 11: uint16(38359), + 12: uint16(38360), + 13: uint16(38361), + 14: uint16(38362), + 15: uint16(38363), + 16: uint16(38364), + 17: uint16(38365), + 18: uint16(38366), + 19: uint16(38367), + 20: uint16(38368), + 21: uint16(38369), + 22: uint16(38370), + 23: uint16(38371), + 24: uint16(38372), + 25: uint16(38373), + 26: uint16(38374), + 27: uint16(38375), + 28: uint16(38380), + 29: uint16(38399), + 30: uint16(38407), + 31: uint16(38419), + 32: uint16(38424), + 33: uint16(38427), + 34: uint16(38430), + 35: uint16(38432), + 36: uint16(38435), + 37: uint16(38436), + 38: uint16(38437), + 39: uint16(38438), + 40: uint16(38439), + 41: uint16(38440), + 42: uint16(38441), + 43: uint16(38443), + 44: uint16(38444), + 45: uint16(38445), + 46: uint16(38447), + 47: uint16(38448), + 48: uint16(38455), + 49: uint16(38456), + 50: uint16(38457), + 51: uint16(38458), + 52: uint16(38462), + 53: uint16(38465), + 54: uint16(38467), + 55: uint16(38474), + 56: uint16(38478), + 57: uint16(38479), + 58: uint16(38481), + 59: uint16(38482), + 60: uint16(38483), + 61: uint16(38486), + 62: uint16(38487), + 63: uint16(38488), + 64: uint16(38489), + 65: uint16(38490), + 66: uint16(38492), + 67: uint16(38493), + 68: uint16(38494), + 69: uint16(38496), + 70: uint16(38499), + 71: uint16(38501), + 72: uint16(38502), + 73: uint16(38507), + 74: uint16(38509), + 75: uint16(38510), + 76: uint16(38511), + 77: uint16(38512), + 78: uint16(38513), + 79: uint16(38515), + 80: uint16(38520), + 81: uint16(38521), + 82: uint16(38522), + 83: uint16(38523), + 84: uint16(38524), + 85: uint16(38525), + 86: uint16(38526), + 87: uint16(38527), + 88: uint16(38528), + 89: uint16(38529), + 90: uint16(38530), + 91: uint16(38531), + 92: uint16(38532), + 93: uint16(38535), + 94: uint16(38537), + 95: uint16(38538), + 96: uint16(36749), + 97: uint16(36750), + 98: uint16(36751), + 99: uint16(36760), + 100: uint16(36762), + 101: uint16(36558), + 102: uint16(25099), + 103: uint16(25111), + 104: uint16(25115), + 105: uint16(25119), + 106: uint16(25122), + 107: uint16(25121), + 108: uint16(25125), + 109: uint16(25124), + 110: uint16(25132), + 111: uint16(33255), + 112: uint16(29935), + 113: uint16(29940), + 114: uint16(29951), + 115: uint16(29967), + 116: uint16(29969), + 117: uint16(29971), + 118: uint16(25908), + 119: uint16(26094), + 120: uint16(26095), + 121: uint16(26096), + 122: uint16(26122), + 123: uint16(26137), + 124: uint16(26482), + 125: uint16(26115), + 126: uint16(26133), + 127: uint16(26112), + 128: uint16(28805), + 129: uint16(26359), + 130: uint16(26141), + 131: uint16(26164), + 132: uint16(26161), + 133: uint16(26166), + 134: uint16(26165), + 135: uint16(32774), + 136: uint16(26207), + 137: uint16(26196), + 138: uint16(26177), + 139: uint16(26191), + 140: uint16(26198), + 141: uint16(26209), + 142: uint16(26199), + 143: uint16(26231), + 144: uint16(26244), + 145: uint16(26252), + 146: uint16(26279), + 147: uint16(26269), + 148: uint16(26302), + 149: uint16(26331), + 150: uint16(26332), + 151: uint16(26342), + 152: uint16(26345), + 153: uint16(36146), + 154: uint16(36147), + 155: uint16(36150), + 156: uint16(36155), + 157: uint16(36157), + 158: uint16(36160), + 159: uint16(36165), + 160: uint16(36166), + 161: uint16(36168), + 162: uint16(36169), + 163: uint16(36167), + 164: uint16(36173), + 165: uint16(36181), + 166: uint16(36185), + 167: uint16(35271), + 168: uint16(35274), + 169: uint16(35275), + 170: uint16(35276), + 171: uint16(35278), + 172: uint16(35279), + 173: uint16(35280), + 174: uint16(35281), + 175: uint16(29294), + 176: uint16(29343), + 177: uint16(29277), + 178: uint16(29286), + 179: uint16(29295), + 180: uint16(29310), + 181: uint16(29311), + 182: uint16(29316), + 183: uint16(29323), + 184: uint16(29325), + 185: uint16(29327), + 186: uint16(29330), + 187: uint16(25352), + 188: uint16(25394), + 189: uint16(25520), + }, + 106: { + 0: uint16(38540), + 1: uint16(38542), + 2: uint16(38545), + 3: uint16(38546), + 4: uint16(38547), + 5: uint16(38549), + 6: uint16(38550), + 7: uint16(38554), + 8: uint16(38555), + 9: uint16(38557), + 10: uint16(38558), + 11: uint16(38559), + 12: uint16(38560), + 13: uint16(38561), + 14: uint16(38562), + 15: uint16(38563), + 16: uint16(38564), + 17: uint16(38565), + 18: uint16(38566), + 19: uint16(38568), + 20: uint16(38569), + 21: uint16(38570), + 22: uint16(38571), + 23: uint16(38572), + 24: uint16(38573), + 25: uint16(38574), + 26: uint16(38575), + 27: uint16(38577), + 28: uint16(38578), + 29: uint16(38580), + 30: uint16(38581), + 31: uint16(38583), + 32: uint16(38584), + 33: uint16(38586), + 34: uint16(38587), + 35: uint16(38591), + 36: uint16(38594), + 37: uint16(38595), + 38: uint16(38600), + 39: uint16(38602), + 40: uint16(38603), + 41: uint16(38608), + 42: uint16(38609), + 43: uint16(38611), + 44: uint16(38612), + 45: uint16(38614), + 46: uint16(38615), + 47: uint16(38616), + 48: uint16(38617), + 49: uint16(38618), + 50: uint16(38619), + 51: uint16(38620), + 52: uint16(38621), + 53: uint16(38622), + 54: uint16(38623), + 55: uint16(38625), + 56: uint16(38626), + 57: uint16(38627), + 58: uint16(38628), + 59: uint16(38629), + 60: uint16(38630), + 61: uint16(38631), + 62: uint16(38635), + 63: uint16(38636), + 64: uint16(38637), + 65: uint16(38638), + 66: uint16(38640), + 67: uint16(38641), + 68: uint16(38642), + 69: uint16(38644), + 70: uint16(38645), + 71: uint16(38648), + 72: uint16(38650), + 73: uint16(38651), + 74: uint16(38652), + 75: uint16(38653), + 76: uint16(38655), + 77: uint16(38658), + 78: uint16(38659), + 79: uint16(38661), + 80: uint16(38666), + 81: uint16(38667), + 82: uint16(38668), + 83: uint16(38672), + 84: uint16(38673), + 85: uint16(38674), + 86: uint16(38676), + 87: uint16(38677), + 88: uint16(38679), + 89: uint16(38680), + 90: uint16(38681), + 91: uint16(38682), + 92: uint16(38683), + 93: uint16(38685), + 94: uint16(38687), + 95: uint16(38688), + 96: uint16(25663), + 97: uint16(25816), + 98: uint16(32772), + 99: uint16(27626), + 100: uint16(27635), + 101: uint16(27645), + 102: uint16(27637), + 103: uint16(27641), + 104: uint16(27653), + 105: uint16(27655), + 106: uint16(27654), + 107: uint16(27661), + 108: uint16(27669), + 109: uint16(27672), + 110: uint16(27673), + 111: uint16(27674), + 112: uint16(27681), + 113: uint16(27689), + 114: uint16(27684), + 115: uint16(27690), + 116: uint16(27698), + 117: uint16(25909), + 118: uint16(25941), + 119: uint16(25963), + 120: uint16(29261), + 121: uint16(29266), + 122: uint16(29270), + 123: uint16(29232), + 124: uint16(34402), + 125: uint16(21014), + 126: uint16(32927), + 127: uint16(32924), + 128: uint16(32915), + 129: uint16(32956), + 130: uint16(26378), + 131: uint16(32957), + 132: uint16(32945), + 133: uint16(32939), + 134: uint16(32941), + 135: uint16(32948), + 136: uint16(32951), + 137: uint16(32999), + 138: uint16(33000), + 139: uint16(33001), + 140: uint16(33002), + 141: uint16(32987), + 142: uint16(32962), + 143: uint16(32964), + 144: uint16(32985), + 145: uint16(32973), + 146: uint16(32983), + 147: uint16(26384), + 148: uint16(32989), + 149: uint16(33003), + 150: uint16(33009), + 151: uint16(33012), + 152: uint16(33005), + 153: uint16(33037), + 154: uint16(33038), + 155: uint16(33010), + 156: uint16(33020), + 157: uint16(26389), + 158: uint16(33042), + 159: uint16(35930), + 160: uint16(33078), + 161: uint16(33054), + 162: uint16(33068), + 163: uint16(33048), + 164: uint16(33074), + 165: uint16(33096), + 166: uint16(33100), + 167: uint16(33107), + 168: uint16(33140), + 169: uint16(33113), + 170: uint16(33114), + 171: uint16(33137), + 172: uint16(33120), + 173: uint16(33129), + 174: uint16(33148), + 175: uint16(33149), + 176: uint16(33133), + 177: uint16(33127), + 178: uint16(22605), + 179: uint16(23221), + 180: uint16(33160), + 181: uint16(33154), + 182: uint16(33169), + 183: uint16(28373), + 184: uint16(33187), + 185: uint16(33194), + 186: uint16(33228), + 187: uint16(26406), + 188: uint16(33226), + 189: uint16(33211), + }, + 107: { + 0: uint16(38689), + 1: uint16(38690), + 2: uint16(38691), + 3: uint16(38692), + 4: uint16(38693), + 5: uint16(38694), + 6: uint16(38695), + 7: uint16(38696), + 8: uint16(38697), + 9: uint16(38699), + 10: uint16(38700), + 11: uint16(38702), + 12: uint16(38703), + 13: uint16(38705), + 14: uint16(38707), + 15: uint16(38708), + 16: uint16(38709), + 17: uint16(38710), + 18: uint16(38711), + 19: uint16(38714), + 20: uint16(38715), + 21: uint16(38716), + 22: uint16(38717), + 23: uint16(38719), + 24: uint16(38720), + 25: uint16(38721), + 26: uint16(38722), + 27: uint16(38723), + 28: uint16(38724), + 29: uint16(38725), + 30: uint16(38726), + 31: uint16(38727), + 32: uint16(38728), + 33: uint16(38729), + 34: uint16(38730), + 35: uint16(38731), + 36: uint16(38732), + 37: uint16(38733), + 38: uint16(38734), + 39: uint16(38735), + 40: uint16(38736), + 41: uint16(38737), + 42: uint16(38740), + 43: uint16(38741), + 44: uint16(38743), + 45: uint16(38744), + 46: uint16(38746), + 47: uint16(38748), + 48: uint16(38749), + 49: uint16(38751), + 50: uint16(38755), + 51: uint16(38756), + 52: uint16(38758), + 53: uint16(38759), + 54: uint16(38760), + 55: uint16(38762), + 56: uint16(38763), + 57: uint16(38764), + 58: uint16(38765), + 59: uint16(38766), + 60: uint16(38767), + 61: uint16(38768), + 62: uint16(38769), + 63: uint16(38770), + 64: uint16(38773), + 65: uint16(38775), + 66: uint16(38776), + 67: uint16(38777), + 68: uint16(38778), + 69: uint16(38779), + 70: uint16(38781), + 71: uint16(38782), + 72: uint16(38783), + 73: uint16(38784), + 74: uint16(38785), + 75: uint16(38786), + 76: uint16(38787), + 77: uint16(38788), + 78: uint16(38790), + 79: uint16(38791), + 80: uint16(38792), + 81: uint16(38793), + 82: uint16(38794), + 83: uint16(38796), + 84: uint16(38798), + 85: uint16(38799), + 86: uint16(38800), + 87: uint16(38803), + 88: uint16(38805), + 89: uint16(38806), + 90: uint16(38807), + 91: uint16(38809), + 92: uint16(38810), + 93: uint16(38811), + 94: uint16(38812), + 95: uint16(38813), + 96: uint16(33217), + 97: uint16(33190), + 98: uint16(27428), + 99: uint16(27447), + 100: uint16(27449), + 101: uint16(27459), + 102: uint16(27462), + 103: uint16(27481), + 104: uint16(39121), + 105: uint16(39122), + 106: uint16(39123), + 107: uint16(39125), + 108: uint16(39129), + 109: uint16(39130), + 110: uint16(27571), + 111: uint16(24384), + 112: uint16(27586), + 113: uint16(35315), + 114: uint16(26000), + 115: uint16(40785), + 116: uint16(26003), + 117: uint16(26044), + 118: uint16(26054), + 119: uint16(26052), + 120: uint16(26051), + 121: uint16(26060), + 122: uint16(26062), + 123: uint16(26066), + 124: uint16(26070), + 125: uint16(28800), + 126: uint16(28828), + 127: uint16(28822), + 128: uint16(28829), + 129: uint16(28859), + 130: uint16(28864), + 131: uint16(28855), + 132: uint16(28843), + 133: uint16(28849), + 134: uint16(28904), + 135: uint16(28874), + 136: uint16(28944), + 137: uint16(28947), + 138: uint16(28950), + 139: uint16(28975), + 140: uint16(28977), + 141: uint16(29043), + 142: uint16(29020), + 143: uint16(29032), + 144: uint16(28997), + 145: uint16(29042), + 146: uint16(29002), + 147: uint16(29048), + 148: uint16(29050), + 149: uint16(29080), + 150: uint16(29107), + 151: uint16(29109), + 152: uint16(29096), + 153: uint16(29088), + 154: uint16(29152), + 155: uint16(29140), + 156: uint16(29159), + 157: uint16(29177), + 158: uint16(29213), + 159: uint16(29224), + 160: uint16(28780), + 161: uint16(28952), + 162: uint16(29030), + 163: uint16(29113), + 164: uint16(25150), + 165: uint16(25149), + 166: uint16(25155), + 167: uint16(25160), + 168: uint16(25161), + 169: uint16(31035), + 170: uint16(31040), + 171: uint16(31046), + 172: uint16(31049), + 173: uint16(31067), + 174: uint16(31068), + 175: uint16(31059), + 176: uint16(31066), + 177: uint16(31074), + 178: uint16(31063), + 179: uint16(31072), + 180: uint16(31087), + 181: uint16(31079), + 182: uint16(31098), + 183: uint16(31109), + 184: uint16(31114), + 185: uint16(31130), + 186: uint16(31143), + 187: uint16(31155), + 188: uint16(24529), + 189: uint16(24528), + }, + 108: { + 0: uint16(38814), + 1: uint16(38815), + 2: uint16(38817), + 3: uint16(38818), + 4: uint16(38820), + 5: uint16(38821), + 6: uint16(38822), + 7: uint16(38823), + 8: uint16(38824), + 9: uint16(38825), + 10: uint16(38826), + 11: uint16(38828), + 12: uint16(38830), + 13: uint16(38832), + 14: uint16(38833), + 15: uint16(38835), + 16: uint16(38837), + 17: uint16(38838), + 18: uint16(38839), + 19: uint16(38840), + 20: uint16(38841), + 21: uint16(38842), + 22: uint16(38843), + 23: uint16(38844), + 24: uint16(38845), + 25: uint16(38846), + 26: uint16(38847), + 27: uint16(38848), + 28: uint16(38849), + 29: uint16(38850), + 30: uint16(38851), + 31: uint16(38852), + 32: uint16(38853), + 33: uint16(38854), + 34: uint16(38855), + 35: uint16(38856), + 36: uint16(38857), + 37: uint16(38858), + 38: uint16(38859), + 39: uint16(38860), + 40: uint16(38861), + 41: uint16(38862), + 42: uint16(38863), + 43: uint16(38864), + 44: uint16(38865), + 45: uint16(38866), + 46: uint16(38867), + 47: uint16(38868), + 48: uint16(38869), + 49: uint16(38870), + 50: uint16(38871), + 51: uint16(38872), + 52: uint16(38873), + 53: uint16(38874), + 54: uint16(38875), + 55: uint16(38876), + 56: uint16(38877), + 57: uint16(38878), + 58: uint16(38879), + 59: uint16(38880), + 60: uint16(38881), + 61: uint16(38882), + 62: uint16(38883), + 63: uint16(38884), + 64: uint16(38885), + 65: uint16(38888), + 66: uint16(38894), + 67: uint16(38895), + 68: uint16(38896), + 69: uint16(38897), + 70: uint16(38898), + 71: uint16(38900), + 72: uint16(38903), + 73: uint16(38904), + 74: uint16(38905), + 75: uint16(38906), + 76: uint16(38907), + 77: uint16(38908), + 78: uint16(38909), + 79: uint16(38910), + 80: uint16(38911), + 81: uint16(38912), + 82: uint16(38913), + 83: uint16(38914), + 84: uint16(38915), + 85: uint16(38916), + 86: uint16(38917), + 87: uint16(38918), + 88: uint16(38919), + 89: uint16(38920), + 90: uint16(38921), + 91: uint16(38922), + 92: uint16(38923), + 93: uint16(38924), + 94: uint16(38925), + 95: uint16(38926), + 96: uint16(24636), + 97: uint16(24669), + 98: uint16(24666), + 99: uint16(24679), + 100: uint16(24641), + 101: uint16(24665), + 102: uint16(24675), + 103: uint16(24747), + 104: uint16(24838), + 105: uint16(24845), + 106: uint16(24925), + 107: uint16(25001), + 108: uint16(24989), + 109: uint16(25035), + 110: uint16(25041), + 111: uint16(25094), + 112: uint16(32896), + 113: uint16(32895), + 114: uint16(27795), + 115: uint16(27894), + 116: uint16(28156), + 117: uint16(30710), + 118: uint16(30712), + 119: uint16(30720), + 120: uint16(30729), + 121: uint16(30743), + 122: uint16(30744), + 123: uint16(30737), + 124: uint16(26027), + 125: uint16(30765), + 126: uint16(30748), + 127: uint16(30749), + 128: uint16(30777), + 129: uint16(30778), + 130: uint16(30779), + 131: uint16(30751), + 132: uint16(30780), + 133: uint16(30757), + 134: uint16(30764), + 135: uint16(30755), + 136: uint16(30761), + 137: uint16(30798), + 138: uint16(30829), + 139: uint16(30806), + 140: uint16(30807), + 141: uint16(30758), + 142: uint16(30800), + 143: uint16(30791), + 144: uint16(30796), + 145: uint16(30826), + 146: uint16(30875), + 147: uint16(30867), + 148: uint16(30874), + 149: uint16(30855), + 150: uint16(30876), + 151: uint16(30881), + 152: uint16(30883), + 153: uint16(30898), + 154: uint16(30905), + 155: uint16(30885), + 156: uint16(30932), + 157: uint16(30937), + 158: uint16(30921), + 159: uint16(30956), + 160: uint16(30962), + 161: uint16(30981), + 162: uint16(30964), + 163: uint16(30995), + 164: uint16(31012), + 165: uint16(31006), + 166: uint16(31028), + 167: uint16(40859), + 168: uint16(40697), + 169: uint16(40699), + 170: uint16(40700), + 171: uint16(30449), + 172: uint16(30468), + 173: uint16(30477), + 174: uint16(30457), + 175: uint16(30471), + 176: uint16(30472), + 177: uint16(30490), + 178: uint16(30498), + 179: uint16(30489), + 180: uint16(30509), + 181: uint16(30502), + 182: uint16(30517), + 183: uint16(30520), + 184: uint16(30544), + 185: uint16(30545), + 186: uint16(30535), + 187: uint16(30531), + 188: uint16(30554), + 189: uint16(30568), + }, + 109: { + 0: uint16(38927), + 1: uint16(38928), + 2: uint16(38929), + 3: uint16(38930), + 4: uint16(38931), + 5: uint16(38932), + 6: uint16(38933), + 7: uint16(38934), + 8: uint16(38935), + 9: uint16(38936), + 10: uint16(38937), + 11: uint16(38938), + 12: uint16(38939), + 13: uint16(38940), + 14: uint16(38941), + 15: uint16(38942), + 16: uint16(38943), + 17: uint16(38944), + 18: uint16(38945), + 19: uint16(38946), + 20: uint16(38947), + 21: uint16(38948), + 22: uint16(38949), + 23: uint16(38950), + 24: uint16(38951), + 25: uint16(38952), + 26: uint16(38953), + 27: uint16(38954), + 28: uint16(38955), + 29: uint16(38956), + 30: uint16(38957), + 31: uint16(38958), + 32: uint16(38959), + 33: uint16(38960), + 34: uint16(38961), + 35: uint16(38962), + 36: uint16(38963), + 37: uint16(38964), + 38: uint16(38965), + 39: uint16(38966), + 40: uint16(38967), + 41: uint16(38968), + 42: uint16(38969), + 43: uint16(38970), + 44: uint16(38971), + 45: uint16(38972), + 46: uint16(38973), + 47: uint16(38974), + 48: uint16(38975), + 49: uint16(38976), + 50: uint16(38977), + 51: uint16(38978), + 52: uint16(38979), + 53: uint16(38980), + 54: uint16(38981), + 55: uint16(38982), + 56: uint16(38983), + 57: uint16(38984), + 58: uint16(38985), + 59: uint16(38986), + 60: uint16(38987), + 61: uint16(38988), + 62: uint16(38989), + 63: uint16(38990), + 64: uint16(38991), + 65: uint16(38992), + 66: uint16(38993), + 67: uint16(38994), + 68: uint16(38995), + 69: uint16(38996), + 70: uint16(38997), + 71: uint16(38998), + 72: uint16(38999), + 73: uint16(39000), + 74: uint16(39001), + 75: uint16(39002), + 76: uint16(39003), + 77: uint16(39004), + 78: uint16(39005), + 79: uint16(39006), + 80: uint16(39007), + 81: uint16(39008), + 82: uint16(39009), + 83: uint16(39010), + 84: uint16(39011), + 85: uint16(39012), + 86: uint16(39013), + 87: uint16(39014), + 88: uint16(39015), + 89: uint16(39016), + 90: uint16(39017), + 91: uint16(39018), + 92: uint16(39019), + 93: uint16(39020), + 94: uint16(39021), + 95: uint16(39022), + 96: uint16(30562), + 97: uint16(30565), + 98: uint16(30591), + 99: uint16(30605), + 100: uint16(30589), + 101: uint16(30592), + 102: uint16(30604), + 103: uint16(30609), + 104: uint16(30623), + 105: uint16(30624), + 106: uint16(30640), + 107: uint16(30645), + 108: uint16(30653), + 109: uint16(30010), + 110: uint16(30016), + 111: uint16(30030), + 112: uint16(30027), + 113: uint16(30024), + 114: uint16(30043), + 115: uint16(30066), + 116: uint16(30073), + 117: uint16(30083), + 118: uint16(32600), + 119: uint16(32609), + 120: uint16(32607), + 121: uint16(35400), + 122: uint16(32616), + 123: uint16(32628), + 124: uint16(32625), + 125: uint16(32633), + 126: uint16(32641), + 127: uint16(32638), + 128: uint16(30413), + 129: uint16(30437), + 130: uint16(34866), + 131: uint16(38021), + 132: uint16(38022), + 133: uint16(38023), + 134: uint16(38027), + 135: uint16(38026), + 136: uint16(38028), + 137: uint16(38029), + 138: uint16(38031), + 139: uint16(38032), + 140: uint16(38036), + 141: uint16(38039), + 142: uint16(38037), + 143: uint16(38042), + 144: uint16(38043), + 145: uint16(38044), + 146: uint16(38051), + 147: uint16(38052), + 148: uint16(38059), + 149: uint16(38058), + 150: uint16(38061), + 151: uint16(38060), + 152: uint16(38063), + 153: uint16(38064), + 154: uint16(38066), + 155: uint16(38068), + 156: uint16(38070), + 157: uint16(38071), + 158: uint16(38072), + 159: uint16(38073), + 160: uint16(38074), + 161: uint16(38076), + 162: uint16(38077), + 163: uint16(38079), + 164: uint16(38084), + 165: uint16(38088), + 166: uint16(38089), + 167: uint16(38090), + 168: uint16(38091), + 169: uint16(38092), + 170: uint16(38093), + 171: uint16(38094), + 172: uint16(38096), + 173: uint16(38097), + 174: uint16(38098), + 175: uint16(38101), + 176: uint16(38102), + 177: uint16(38103), + 178: uint16(38105), + 179: uint16(38104), + 180: uint16(38107), + 181: uint16(38110), + 182: uint16(38111), + 183: uint16(38112), + 184: uint16(38114), + 185: uint16(38116), + 186: uint16(38117), + 187: uint16(38119), + 188: uint16(38120), + 189: uint16(38122), + }, + 110: { + 0: uint16(39023), + 1: uint16(39024), + 2: uint16(39025), + 3: uint16(39026), + 4: uint16(39027), + 5: uint16(39028), + 6: uint16(39051), + 7: uint16(39054), + 8: uint16(39058), + 9: uint16(39061), + 10: uint16(39065), + 11: uint16(39075), + 12: uint16(39080), + 13: uint16(39081), + 14: uint16(39082), + 15: uint16(39083), + 16: uint16(39084), + 17: uint16(39085), + 18: uint16(39086), + 19: uint16(39087), + 20: uint16(39088), + 21: uint16(39089), + 22: uint16(39090), + 23: uint16(39091), + 24: uint16(39092), + 25: uint16(39093), + 26: uint16(39094), + 27: uint16(39095), + 28: uint16(39096), + 29: uint16(39097), + 30: uint16(39098), + 31: uint16(39099), + 32: uint16(39100), + 33: uint16(39101), + 34: uint16(39102), + 35: uint16(39103), + 36: uint16(39104), + 37: uint16(39105), + 38: uint16(39106), + 39: uint16(39107), + 40: uint16(39108), + 41: uint16(39109), + 42: uint16(39110), + 43: uint16(39111), + 44: uint16(39112), + 45: uint16(39113), + 46: uint16(39114), + 47: uint16(39115), + 48: uint16(39116), + 49: uint16(39117), + 50: uint16(39119), + 51: uint16(39120), + 52: uint16(39124), + 53: uint16(39126), + 54: uint16(39127), + 55: uint16(39131), + 56: uint16(39132), + 57: uint16(39133), + 58: uint16(39136), + 59: uint16(39137), + 60: uint16(39138), + 61: uint16(39139), + 62: uint16(39140), + 63: uint16(39141), + 64: uint16(39142), + 65: uint16(39145), + 66: uint16(39146), + 67: uint16(39147), + 68: uint16(39148), + 69: uint16(39149), + 70: uint16(39150), + 71: uint16(39151), + 72: uint16(39152), + 73: uint16(39153), + 74: uint16(39154), + 75: uint16(39155), + 76: uint16(39156), + 77: uint16(39157), + 78: uint16(39158), + 79: uint16(39159), + 80: uint16(39160), + 81: uint16(39161), + 82: uint16(39162), + 83: uint16(39163), + 84: uint16(39164), + 85: uint16(39165), + 86: uint16(39166), + 87: uint16(39167), + 88: uint16(39168), + 89: uint16(39169), + 90: uint16(39170), + 91: uint16(39171), + 92: uint16(39172), + 93: uint16(39173), + 94: uint16(39174), + 95: uint16(39175), + 96: uint16(38121), + 97: uint16(38123), + 98: uint16(38126), + 99: uint16(38127), + 100: uint16(38131), + 101: uint16(38132), + 102: uint16(38133), + 103: uint16(38135), + 104: uint16(38137), + 105: uint16(38140), + 106: uint16(38141), + 107: uint16(38143), + 108: uint16(38147), + 109: uint16(38146), + 110: uint16(38150), + 111: uint16(38151), + 112: uint16(38153), + 113: uint16(38154), + 114: uint16(38157), + 115: uint16(38158), + 116: uint16(38159), + 117: uint16(38162), + 118: uint16(38163), + 119: uint16(38164), + 120: uint16(38165), + 121: uint16(38166), + 122: uint16(38168), + 123: uint16(38171), + 124: uint16(38173), + 125: uint16(38174), + 126: uint16(38175), + 127: uint16(38178), + 128: uint16(38186), + 129: uint16(38187), + 130: uint16(38185), + 131: uint16(38188), + 132: uint16(38193), + 133: uint16(38194), + 134: uint16(38196), + 135: uint16(38198), + 136: uint16(38199), + 137: uint16(38200), + 138: uint16(38204), + 139: uint16(38206), + 140: uint16(38207), + 141: uint16(38210), + 142: uint16(38197), + 143: uint16(38212), + 144: uint16(38213), + 145: uint16(38214), + 146: uint16(38217), + 147: uint16(38220), + 148: uint16(38222), + 149: uint16(38223), + 150: uint16(38226), + 151: uint16(38227), + 152: uint16(38228), + 153: uint16(38230), + 154: uint16(38231), + 155: uint16(38232), + 156: uint16(38233), + 157: uint16(38235), + 158: uint16(38238), + 159: uint16(38239), + 160: uint16(38237), + 161: uint16(38241), + 162: uint16(38242), + 163: uint16(38244), + 164: uint16(38245), + 165: uint16(38246), + 166: uint16(38247), + 167: uint16(38248), + 168: uint16(38249), + 169: uint16(38250), + 170: uint16(38251), + 171: uint16(38252), + 172: uint16(38255), + 173: uint16(38257), + 174: uint16(38258), + 175: uint16(38259), + 176: uint16(38202), + 177: uint16(30695), + 178: uint16(30700), + 179: uint16(38601), + 180: uint16(31189), + 181: uint16(31213), + 182: uint16(31203), + 183: uint16(31211), + 184: uint16(31238), + 185: uint16(23879), + 186: uint16(31235), + 187: uint16(31234), + 188: uint16(31262), + 189: uint16(31252), + }, + 111: { + 0: uint16(39176), + 1: uint16(39177), + 2: uint16(39178), + 3: uint16(39179), + 4: uint16(39180), + 5: uint16(39182), + 6: uint16(39183), + 7: uint16(39185), + 8: uint16(39186), + 9: uint16(39187), + 10: uint16(39188), + 11: uint16(39189), + 12: uint16(39190), + 13: uint16(39191), + 14: uint16(39192), + 15: uint16(39193), + 16: uint16(39194), + 17: uint16(39195), + 18: uint16(39196), + 19: uint16(39197), + 20: uint16(39198), + 21: uint16(39199), + 22: uint16(39200), + 23: uint16(39201), + 24: uint16(39202), + 25: uint16(39203), + 26: uint16(39204), + 27: uint16(39205), + 28: uint16(39206), + 29: uint16(39207), + 30: uint16(39208), + 31: uint16(39209), + 32: uint16(39210), + 33: uint16(39211), + 34: uint16(39212), + 35: uint16(39213), + 36: uint16(39215), + 37: uint16(39216), + 38: uint16(39217), + 39: uint16(39218), + 40: uint16(39219), + 41: uint16(39220), + 42: uint16(39221), + 43: uint16(39222), + 44: uint16(39223), + 45: uint16(39224), + 46: uint16(39225), + 47: uint16(39226), + 48: uint16(39227), + 49: uint16(39228), + 50: uint16(39229), + 51: uint16(39230), + 52: uint16(39231), + 53: uint16(39232), + 54: uint16(39233), + 55: uint16(39234), + 56: uint16(39235), + 57: uint16(39236), + 58: uint16(39237), + 59: uint16(39238), + 60: uint16(39239), + 61: uint16(39240), + 62: uint16(39241), + 63: uint16(39242), + 64: uint16(39243), + 65: uint16(39244), + 66: uint16(39245), + 67: uint16(39246), + 68: uint16(39247), + 69: uint16(39248), + 70: uint16(39249), + 71: uint16(39250), + 72: uint16(39251), + 73: uint16(39254), + 74: uint16(39255), + 75: uint16(39256), + 76: uint16(39257), + 77: uint16(39258), + 78: uint16(39259), + 79: uint16(39260), + 80: uint16(39261), + 81: uint16(39262), + 82: uint16(39263), + 83: uint16(39264), + 84: uint16(39265), + 85: uint16(39266), + 86: uint16(39268), + 87: uint16(39270), + 88: uint16(39283), + 89: uint16(39288), + 90: uint16(39289), + 91: uint16(39291), + 92: uint16(39294), + 93: uint16(39298), + 94: uint16(39299), + 95: uint16(39305), + 96: uint16(31289), + 97: uint16(31287), + 98: uint16(31313), + 99: uint16(40655), + 100: uint16(39333), + 101: uint16(31344), + 102: uint16(30344), + 103: uint16(30350), + 104: uint16(30355), + 105: uint16(30361), + 106: uint16(30372), + 107: uint16(29918), + 108: uint16(29920), + 109: uint16(29996), + 110: uint16(40480), + 111: uint16(40482), + 112: uint16(40488), + 113: uint16(40489), + 114: uint16(40490), + 115: uint16(40491), + 116: uint16(40492), + 117: uint16(40498), + 118: uint16(40497), + 119: uint16(40502), + 120: uint16(40504), + 121: uint16(40503), + 122: uint16(40505), + 123: uint16(40506), + 124: uint16(40510), + 125: uint16(40513), + 126: uint16(40514), + 127: uint16(40516), + 128: uint16(40518), + 129: uint16(40519), + 130: uint16(40520), + 131: uint16(40521), + 132: uint16(40523), + 133: uint16(40524), + 134: uint16(40526), + 135: uint16(40529), + 136: uint16(40533), + 137: uint16(40535), + 138: uint16(40538), + 139: uint16(40539), + 140: uint16(40540), + 141: uint16(40542), + 142: uint16(40547), + 143: uint16(40550), + 144: uint16(40551), + 145: uint16(40552), + 146: uint16(40553), + 147: uint16(40554), + 148: uint16(40555), + 149: uint16(40556), + 150: uint16(40561), + 151: uint16(40557), + 152: uint16(40563), + 153: uint16(30098), + 154: uint16(30100), + 155: uint16(30102), + 156: uint16(30112), + 157: uint16(30109), + 158: uint16(30124), + 159: uint16(30115), + 160: uint16(30131), + 161: uint16(30132), + 162: uint16(30136), + 163: uint16(30148), + 164: uint16(30129), + 165: uint16(30128), + 166: uint16(30147), + 167: uint16(30146), + 168: uint16(30166), + 169: uint16(30157), + 170: uint16(30179), + 171: uint16(30184), + 172: uint16(30182), + 173: uint16(30180), + 174: uint16(30187), + 175: uint16(30183), + 176: uint16(30211), + 177: uint16(30193), + 178: uint16(30204), + 179: uint16(30207), + 180: uint16(30224), + 181: uint16(30208), + 182: uint16(30213), + 183: uint16(30220), + 184: uint16(30231), + 185: uint16(30218), + 186: uint16(30245), + 187: uint16(30232), + 188: uint16(30229), + 189: uint16(30233), + }, + 112: { + 0: uint16(39308), + 1: uint16(39310), + 2: uint16(39322), + 3: uint16(39323), + 4: uint16(39324), + 5: uint16(39325), + 6: uint16(39326), + 7: uint16(39327), + 8: uint16(39328), + 9: uint16(39329), + 10: uint16(39330), + 11: uint16(39331), + 12: uint16(39332), + 13: uint16(39334), + 14: uint16(39335), + 15: uint16(39337), + 16: uint16(39338), + 17: uint16(39339), + 18: uint16(39340), + 19: uint16(39341), + 20: uint16(39342), + 21: uint16(39343), + 22: uint16(39344), + 23: uint16(39345), + 24: uint16(39346), + 25: uint16(39347), + 26: uint16(39348), + 27: uint16(39349), + 28: uint16(39350), + 29: uint16(39351), + 30: uint16(39352), + 31: uint16(39353), + 32: uint16(39354), + 33: uint16(39355), + 34: uint16(39356), + 35: uint16(39357), + 36: uint16(39358), + 37: uint16(39359), + 38: uint16(39360), + 39: uint16(39361), + 40: uint16(39362), + 41: uint16(39363), + 42: uint16(39364), + 43: uint16(39365), + 44: uint16(39366), + 45: uint16(39367), + 46: uint16(39368), + 47: uint16(39369), + 48: uint16(39370), + 49: uint16(39371), + 50: uint16(39372), + 51: uint16(39373), + 52: uint16(39374), + 53: uint16(39375), + 54: uint16(39376), + 55: uint16(39377), + 56: uint16(39378), + 57: uint16(39379), + 58: uint16(39380), + 59: uint16(39381), + 60: uint16(39382), + 61: uint16(39383), + 62: uint16(39384), + 63: uint16(39385), + 64: uint16(39386), + 65: uint16(39387), + 66: uint16(39388), + 67: uint16(39389), + 68: uint16(39390), + 69: uint16(39391), + 70: uint16(39392), + 71: uint16(39393), + 72: uint16(39394), + 73: uint16(39395), + 74: uint16(39396), + 75: uint16(39397), + 76: uint16(39398), + 77: uint16(39399), + 78: uint16(39400), + 79: uint16(39401), + 80: uint16(39402), + 81: uint16(39403), + 82: uint16(39404), + 83: uint16(39405), + 84: uint16(39406), + 85: uint16(39407), + 86: uint16(39408), + 87: uint16(39409), + 88: uint16(39410), + 89: uint16(39411), + 90: uint16(39412), + 91: uint16(39413), + 92: uint16(39414), + 93: uint16(39415), + 94: uint16(39416), + 95: uint16(39417), + 96: uint16(30235), + 97: uint16(30268), + 98: uint16(30242), + 99: uint16(30240), + 100: uint16(30272), + 101: uint16(30253), + 102: uint16(30256), + 103: uint16(30271), + 104: uint16(30261), + 105: uint16(30275), + 106: uint16(30270), + 107: uint16(30259), + 108: uint16(30285), + 109: uint16(30302), + 110: uint16(30292), + 111: uint16(30300), + 112: uint16(30294), + 113: uint16(30315), + 114: uint16(30319), + 115: uint16(32714), + 116: uint16(31462), + 117: uint16(31352), + 118: uint16(31353), + 119: uint16(31360), + 120: uint16(31366), + 121: uint16(31368), + 122: uint16(31381), + 123: uint16(31398), + 124: uint16(31392), + 125: uint16(31404), + 126: uint16(31400), + 127: uint16(31405), + 128: uint16(31411), + 129: uint16(34916), + 130: uint16(34921), + 131: uint16(34930), + 132: uint16(34941), + 133: uint16(34943), + 134: uint16(34946), + 135: uint16(34978), + 136: uint16(35014), + 137: uint16(34999), + 138: uint16(35004), + 139: uint16(35017), + 140: uint16(35042), + 141: uint16(35022), + 142: uint16(35043), + 143: uint16(35045), + 144: uint16(35057), + 145: uint16(35098), + 146: uint16(35068), + 147: uint16(35048), + 148: uint16(35070), + 149: uint16(35056), + 150: uint16(35105), + 151: uint16(35097), + 152: uint16(35091), + 153: uint16(35099), + 154: uint16(35082), + 155: uint16(35124), + 156: uint16(35115), + 157: uint16(35126), + 158: uint16(35137), + 159: uint16(35174), + 160: uint16(35195), + 161: uint16(30091), + 162: uint16(32997), + 163: uint16(30386), + 164: uint16(30388), + 165: uint16(30684), + 166: uint16(32786), + 167: uint16(32788), + 168: uint16(32790), + 169: uint16(32796), + 170: uint16(32800), + 171: uint16(32802), + 172: uint16(32805), + 173: uint16(32806), + 174: uint16(32807), + 175: uint16(32809), + 176: uint16(32808), + 177: uint16(32817), + 178: uint16(32779), + 179: uint16(32821), + 180: uint16(32835), + 181: uint16(32838), + 182: uint16(32845), + 183: uint16(32850), + 184: uint16(32873), + 185: uint16(32881), + 186: uint16(35203), + 187: uint16(39032), + 188: uint16(39040), + 189: uint16(39043), + }, + 113: { + 0: uint16(39418), + 1: uint16(39419), + 2: uint16(39420), + 3: uint16(39421), + 4: uint16(39422), + 5: uint16(39423), + 6: uint16(39424), + 7: uint16(39425), + 8: uint16(39426), + 9: uint16(39427), + 10: uint16(39428), + 11: uint16(39429), + 12: uint16(39430), + 13: uint16(39431), + 14: uint16(39432), + 15: uint16(39433), + 16: uint16(39434), + 17: uint16(39435), + 18: uint16(39436), + 19: uint16(39437), + 20: uint16(39438), + 21: uint16(39439), + 22: uint16(39440), + 23: uint16(39441), + 24: uint16(39442), + 25: uint16(39443), + 26: uint16(39444), + 27: uint16(39445), + 28: uint16(39446), + 29: uint16(39447), + 30: uint16(39448), + 31: uint16(39449), + 32: uint16(39450), + 33: uint16(39451), + 34: uint16(39452), + 35: uint16(39453), + 36: uint16(39454), + 37: uint16(39455), + 38: uint16(39456), + 39: uint16(39457), + 40: uint16(39458), + 41: uint16(39459), + 42: uint16(39460), + 43: uint16(39461), + 44: uint16(39462), + 45: uint16(39463), + 46: uint16(39464), + 47: uint16(39465), + 48: uint16(39466), + 49: uint16(39467), + 50: uint16(39468), + 51: uint16(39469), + 52: uint16(39470), + 53: uint16(39471), + 54: uint16(39472), + 55: uint16(39473), + 56: uint16(39474), + 57: uint16(39475), + 58: uint16(39476), + 59: uint16(39477), + 60: uint16(39478), + 61: uint16(39479), + 62: uint16(39480), + 63: uint16(39481), + 64: uint16(39482), + 65: uint16(39483), + 66: uint16(39484), + 67: uint16(39485), + 68: uint16(39486), + 69: uint16(39487), + 70: uint16(39488), + 71: uint16(39489), + 72: uint16(39490), + 73: uint16(39491), + 74: uint16(39492), + 75: uint16(39493), + 76: uint16(39494), + 77: uint16(39495), + 78: uint16(39496), + 79: uint16(39497), + 80: uint16(39498), + 81: uint16(39499), + 82: uint16(39500), + 83: uint16(39501), + 84: uint16(39502), + 85: uint16(39503), + 86: uint16(39504), + 87: uint16(39505), + 88: uint16(39506), + 89: uint16(39507), + 90: uint16(39508), + 91: uint16(39509), + 92: uint16(39510), + 93: uint16(39511), + 94: uint16(39512), + 95: uint16(39513), + 96: uint16(39049), + 97: uint16(39052), + 98: uint16(39053), + 99: uint16(39055), + 100: uint16(39060), + 101: uint16(39066), + 102: uint16(39067), + 103: uint16(39070), + 104: uint16(39071), + 105: uint16(39073), + 106: uint16(39074), + 107: uint16(39077), + 108: uint16(39078), + 109: uint16(34381), + 110: uint16(34388), + 111: uint16(34412), + 112: uint16(34414), + 113: uint16(34431), + 114: uint16(34426), + 115: uint16(34428), + 116: uint16(34427), + 117: uint16(34472), + 118: uint16(34445), + 119: uint16(34443), + 120: uint16(34476), + 121: uint16(34461), + 122: uint16(34471), + 123: uint16(34467), + 124: uint16(34474), + 125: uint16(34451), + 126: uint16(34473), + 127: uint16(34486), + 128: uint16(34500), + 129: uint16(34485), + 130: uint16(34510), + 131: uint16(34480), + 132: uint16(34490), + 133: uint16(34481), + 134: uint16(34479), + 135: uint16(34505), + 136: uint16(34511), + 137: uint16(34484), + 138: uint16(34537), + 139: uint16(34545), + 140: uint16(34546), + 141: uint16(34541), + 142: uint16(34547), + 143: uint16(34512), + 144: uint16(34579), + 145: uint16(34526), + 146: uint16(34548), + 147: uint16(34527), + 148: uint16(34520), + 149: uint16(34513), + 150: uint16(34563), + 151: uint16(34567), + 152: uint16(34552), + 153: uint16(34568), + 154: uint16(34570), + 155: uint16(34573), + 156: uint16(34569), + 157: uint16(34595), + 158: uint16(34619), + 159: uint16(34590), + 160: uint16(34597), + 161: uint16(34606), + 162: uint16(34586), + 163: uint16(34622), + 164: uint16(34632), + 165: uint16(34612), + 166: uint16(34609), + 167: uint16(34601), + 168: uint16(34615), + 169: uint16(34623), + 170: uint16(34690), + 171: uint16(34594), + 172: uint16(34685), + 173: uint16(34686), + 174: uint16(34683), + 175: uint16(34656), + 176: uint16(34672), + 177: uint16(34636), + 178: uint16(34670), + 179: uint16(34699), + 180: uint16(34643), + 181: uint16(34659), + 182: uint16(34684), + 183: uint16(34660), + 184: uint16(34649), + 185: uint16(34661), + 186: uint16(34707), + 187: uint16(34735), + 188: uint16(34728), + 189: uint16(34770), + }, + 114: { + 0: uint16(39514), + 1: uint16(39515), + 2: uint16(39516), + 3: uint16(39517), + 4: uint16(39518), + 5: uint16(39519), + 6: uint16(39520), + 7: uint16(39521), + 8: uint16(39522), + 9: uint16(39523), + 10: uint16(39524), + 11: uint16(39525), + 12: uint16(39526), + 13: uint16(39527), + 14: uint16(39528), + 15: uint16(39529), + 16: uint16(39530), + 17: uint16(39531), + 18: uint16(39538), + 19: uint16(39555), + 20: uint16(39561), + 21: uint16(39565), + 22: uint16(39566), + 23: uint16(39572), + 24: uint16(39573), + 25: uint16(39577), + 26: uint16(39590), + 27: uint16(39593), + 28: uint16(39594), + 29: uint16(39595), + 30: uint16(39596), + 31: uint16(39597), + 32: uint16(39598), + 33: uint16(39599), + 34: uint16(39602), + 35: uint16(39603), + 36: uint16(39604), + 37: uint16(39605), + 38: uint16(39609), + 39: uint16(39611), + 40: uint16(39613), + 41: uint16(39614), + 42: uint16(39615), + 43: uint16(39619), + 44: uint16(39620), + 45: uint16(39622), + 46: uint16(39623), + 47: uint16(39624), + 48: uint16(39625), + 49: uint16(39626), + 50: uint16(39629), + 51: uint16(39630), + 52: uint16(39631), + 53: uint16(39632), + 54: uint16(39634), + 55: uint16(39636), + 56: uint16(39637), + 57: uint16(39638), + 58: uint16(39639), + 59: uint16(39641), + 60: uint16(39642), + 61: uint16(39643), + 62: uint16(39644), + 63: uint16(39645), + 64: uint16(39646), + 65: uint16(39648), + 66: uint16(39650), + 67: uint16(39651), + 68: uint16(39652), + 69: uint16(39653), + 70: uint16(39655), + 71: uint16(39656), + 72: uint16(39657), + 73: uint16(39658), + 74: uint16(39660), + 75: uint16(39662), + 76: uint16(39664), + 77: uint16(39665), + 78: uint16(39666), + 79: uint16(39667), + 80: uint16(39668), + 81: uint16(39669), + 82: uint16(39670), + 83: uint16(39671), + 84: uint16(39672), + 85: uint16(39674), + 86: uint16(39676), + 87: uint16(39677), + 88: uint16(39678), + 89: uint16(39679), + 90: uint16(39680), + 91: uint16(39681), + 92: uint16(39682), + 93: uint16(39684), + 94: uint16(39685), + 95: uint16(39686), + 96: uint16(34758), + 97: uint16(34696), + 98: uint16(34693), + 99: uint16(34733), + 100: uint16(34711), + 101: uint16(34691), + 102: uint16(34731), + 103: uint16(34789), + 104: uint16(34732), + 105: uint16(34741), + 106: uint16(34739), + 107: uint16(34763), + 108: uint16(34771), + 109: uint16(34749), + 110: uint16(34769), + 111: uint16(34752), + 112: uint16(34762), + 113: uint16(34779), + 114: uint16(34794), + 115: uint16(34784), + 116: uint16(34798), + 117: uint16(34838), + 118: uint16(34835), + 119: uint16(34814), + 120: uint16(34826), + 121: uint16(34843), + 122: uint16(34849), + 123: uint16(34873), + 124: uint16(34876), + 125: uint16(32566), + 126: uint16(32578), + 127: uint16(32580), + 128: uint16(32581), + 129: uint16(33296), + 130: uint16(31482), + 131: uint16(31485), + 132: uint16(31496), + 133: uint16(31491), + 134: uint16(31492), + 135: uint16(31509), + 136: uint16(31498), + 137: uint16(31531), + 138: uint16(31503), + 139: uint16(31559), + 140: uint16(31544), + 141: uint16(31530), + 142: uint16(31513), + 143: uint16(31534), + 144: uint16(31537), + 145: uint16(31520), + 146: uint16(31525), + 147: uint16(31524), + 148: uint16(31539), + 149: uint16(31550), + 150: uint16(31518), + 151: uint16(31576), + 152: uint16(31578), + 153: uint16(31557), + 154: uint16(31605), + 155: uint16(31564), + 156: uint16(31581), + 157: uint16(31584), + 158: uint16(31598), + 159: uint16(31611), + 160: uint16(31586), + 161: uint16(31602), + 162: uint16(31601), + 163: uint16(31632), + 164: uint16(31654), + 165: uint16(31655), + 166: uint16(31672), + 167: uint16(31660), + 168: uint16(31645), + 169: uint16(31656), + 170: uint16(31621), + 171: uint16(31658), + 172: uint16(31644), + 173: uint16(31650), + 174: uint16(31659), + 175: uint16(31668), + 176: uint16(31697), + 177: uint16(31681), + 178: uint16(31692), + 179: uint16(31709), + 180: uint16(31706), + 181: uint16(31717), + 182: uint16(31718), + 183: uint16(31722), + 184: uint16(31756), + 185: uint16(31742), + 186: uint16(31740), + 187: uint16(31759), + 188: uint16(31766), + 189: uint16(31755), + }, + 115: { + 0: uint16(39687), + 1: uint16(39689), + 2: uint16(39690), + 3: uint16(39691), + 4: uint16(39692), + 5: uint16(39693), + 6: uint16(39694), + 7: uint16(39696), + 8: uint16(39697), + 9: uint16(39698), + 10: uint16(39700), + 11: uint16(39701), + 12: uint16(39702), + 13: uint16(39703), + 14: uint16(39704), + 15: uint16(39705), + 16: uint16(39706), + 17: uint16(39707), + 18: uint16(39708), + 19: uint16(39709), + 20: uint16(39710), + 21: uint16(39712), + 22: uint16(39713), + 23: uint16(39714), + 24: uint16(39716), + 25: uint16(39717), + 26: uint16(39718), + 27: uint16(39719), + 28: uint16(39720), + 29: uint16(39721), + 30: uint16(39722), + 31: uint16(39723), + 32: uint16(39724), + 33: uint16(39725), + 34: uint16(39726), + 35: uint16(39728), + 36: uint16(39729), + 37: uint16(39731), + 38: uint16(39732), + 39: uint16(39733), + 40: uint16(39734), + 41: uint16(39735), + 42: uint16(39736), + 43: uint16(39737), + 44: uint16(39738), + 45: uint16(39741), + 46: uint16(39742), + 47: uint16(39743), + 48: uint16(39744), + 49: uint16(39750), + 50: uint16(39754), + 51: uint16(39755), + 52: uint16(39756), + 53: uint16(39758), + 54: uint16(39760), + 55: uint16(39762), + 56: uint16(39763), + 57: uint16(39765), + 58: uint16(39766), + 59: uint16(39767), + 60: uint16(39768), + 61: uint16(39769), + 62: uint16(39770), + 63: uint16(39771), + 64: uint16(39772), + 65: uint16(39773), + 66: uint16(39774), + 67: uint16(39775), + 68: uint16(39776), + 69: uint16(39777), + 70: uint16(39778), + 71: uint16(39779), + 72: uint16(39780), + 73: uint16(39781), + 74: uint16(39782), + 75: uint16(39783), + 76: uint16(39784), + 77: uint16(39785), + 78: uint16(39786), + 79: uint16(39787), + 80: uint16(39788), + 81: uint16(39789), + 82: uint16(39790), + 83: uint16(39791), + 84: uint16(39792), + 85: uint16(39793), + 86: uint16(39794), + 87: uint16(39795), + 88: uint16(39796), + 89: uint16(39797), + 90: uint16(39798), + 91: uint16(39799), + 92: uint16(39800), + 93: uint16(39801), + 94: uint16(39802), + 95: uint16(39803), + 96: uint16(31775), + 97: uint16(31786), + 98: uint16(31782), + 99: uint16(31800), + 100: uint16(31809), + 101: uint16(31808), + 102: uint16(33278), + 103: uint16(33281), + 104: uint16(33282), + 105: uint16(33284), + 106: uint16(33260), + 107: uint16(34884), + 108: uint16(33313), + 109: uint16(33314), + 110: uint16(33315), + 111: uint16(33325), + 112: uint16(33327), + 113: uint16(33320), + 114: uint16(33323), + 115: uint16(33336), + 116: uint16(33339), + 117: uint16(33331), + 118: uint16(33332), + 119: uint16(33342), + 120: uint16(33348), + 121: uint16(33353), + 122: uint16(33355), + 123: uint16(33359), + 124: uint16(33370), + 125: uint16(33375), + 126: uint16(33384), + 127: uint16(34942), + 128: uint16(34949), + 129: uint16(34952), + 130: uint16(35032), + 131: uint16(35039), + 132: uint16(35166), + 133: uint16(32669), + 134: uint16(32671), + 135: uint16(32679), + 136: uint16(32687), + 137: uint16(32688), + 138: uint16(32690), + 139: uint16(31868), + 140: uint16(25929), + 141: uint16(31889), + 142: uint16(31901), + 143: uint16(31900), + 144: uint16(31902), + 145: uint16(31906), + 146: uint16(31922), + 147: uint16(31932), + 148: uint16(31933), + 149: uint16(31937), + 150: uint16(31943), + 151: uint16(31948), + 152: uint16(31949), + 153: uint16(31944), + 154: uint16(31941), + 155: uint16(31959), + 156: uint16(31976), + 157: uint16(33390), + 158: uint16(26280), + 159: uint16(32703), + 160: uint16(32718), + 161: uint16(32725), + 162: uint16(32741), + 163: uint16(32737), + 164: uint16(32742), + 165: uint16(32745), + 166: uint16(32750), + 167: uint16(32755), + 168: uint16(31992), + 169: uint16(32119), + 170: uint16(32166), + 171: uint16(32174), + 172: uint16(32327), + 173: uint16(32411), + 174: uint16(40632), + 175: uint16(40628), + 176: uint16(36211), + 177: uint16(36228), + 178: uint16(36244), + 179: uint16(36241), + 180: uint16(36273), + 181: uint16(36199), + 182: uint16(36205), + 183: uint16(35911), + 184: uint16(35913), + 185: uint16(37194), + 186: uint16(37200), + 187: uint16(37198), + 188: uint16(37199), + 189: uint16(37220), + }, + 116: { + 0: uint16(39804), + 1: uint16(39805), + 2: uint16(39806), + 3: uint16(39807), + 4: uint16(39808), + 5: uint16(39809), + 6: uint16(39810), + 7: uint16(39811), + 8: uint16(39812), + 9: uint16(39813), + 10: uint16(39814), + 11: uint16(39815), + 12: uint16(39816), + 13: uint16(39817), + 14: uint16(39818), + 15: uint16(39819), + 16: uint16(39820), + 17: uint16(39821), + 18: uint16(39822), + 19: uint16(39823), + 20: uint16(39824), + 21: uint16(39825), + 22: uint16(39826), + 23: uint16(39827), + 24: uint16(39828), + 25: uint16(39829), + 26: uint16(39830), + 27: uint16(39831), + 28: uint16(39832), + 29: uint16(39833), + 30: uint16(39834), + 31: uint16(39835), + 32: uint16(39836), + 33: uint16(39837), + 34: uint16(39838), + 35: uint16(39839), + 36: uint16(39840), + 37: uint16(39841), + 38: uint16(39842), + 39: uint16(39843), + 40: uint16(39844), + 41: uint16(39845), + 42: uint16(39846), + 43: uint16(39847), + 44: uint16(39848), + 45: uint16(39849), + 46: uint16(39850), + 47: uint16(39851), + 48: uint16(39852), + 49: uint16(39853), + 50: uint16(39854), + 51: uint16(39855), + 52: uint16(39856), + 53: uint16(39857), + 54: uint16(39858), + 55: uint16(39859), + 56: uint16(39860), + 57: uint16(39861), + 58: uint16(39862), + 59: uint16(39863), + 60: uint16(39864), + 61: uint16(39865), + 62: uint16(39866), + 63: uint16(39867), + 64: uint16(39868), + 65: uint16(39869), + 66: uint16(39870), + 67: uint16(39871), + 68: uint16(39872), + 69: uint16(39873), + 70: uint16(39874), + 71: uint16(39875), + 72: uint16(39876), + 73: uint16(39877), + 74: uint16(39878), + 75: uint16(39879), + 76: uint16(39880), + 77: uint16(39881), + 78: uint16(39882), + 79: uint16(39883), + 80: uint16(39884), + 81: uint16(39885), + 82: uint16(39886), + 83: uint16(39887), + 84: uint16(39888), + 85: uint16(39889), + 86: uint16(39890), + 87: uint16(39891), + 88: uint16(39892), + 89: uint16(39893), + 90: uint16(39894), + 91: uint16(39895), + 92: uint16(39896), + 93: uint16(39897), + 94: uint16(39898), + 95: uint16(39899), + 96: uint16(37218), + 97: uint16(37217), + 98: uint16(37232), + 99: uint16(37225), + 100: uint16(37231), + 101: uint16(37245), + 102: uint16(37246), + 103: uint16(37234), + 104: uint16(37236), + 105: uint16(37241), + 106: uint16(37260), + 107: uint16(37253), + 108: uint16(37264), + 109: uint16(37261), + 110: uint16(37265), + 111: uint16(37282), + 112: uint16(37283), + 113: uint16(37290), + 114: uint16(37293), + 115: uint16(37294), + 116: uint16(37295), + 117: uint16(37301), + 118: uint16(37300), + 119: uint16(37306), + 120: uint16(35925), + 121: uint16(40574), + 122: uint16(36280), + 123: uint16(36331), + 124: uint16(36357), + 125: uint16(36441), + 126: uint16(36457), + 127: uint16(36277), + 128: uint16(36287), + 129: uint16(36284), + 130: uint16(36282), + 131: uint16(36292), + 132: uint16(36310), + 133: uint16(36311), + 134: uint16(36314), + 135: uint16(36318), + 136: uint16(36302), + 137: uint16(36303), + 138: uint16(36315), + 139: uint16(36294), + 140: uint16(36332), + 141: uint16(36343), + 142: uint16(36344), + 143: uint16(36323), + 144: uint16(36345), + 145: uint16(36347), + 146: uint16(36324), + 147: uint16(36361), + 148: uint16(36349), + 149: uint16(36372), + 150: uint16(36381), + 151: uint16(36383), + 152: uint16(36396), + 153: uint16(36398), + 154: uint16(36387), + 155: uint16(36399), + 156: uint16(36410), + 157: uint16(36416), + 158: uint16(36409), + 159: uint16(36405), + 160: uint16(36413), + 161: uint16(36401), + 162: uint16(36425), + 163: uint16(36417), + 164: uint16(36418), + 165: uint16(36433), + 166: uint16(36434), + 167: uint16(36426), + 168: uint16(36464), + 169: uint16(36470), + 170: uint16(36476), + 171: uint16(36463), + 172: uint16(36468), + 173: uint16(36485), + 174: uint16(36495), + 175: uint16(36500), + 176: uint16(36496), + 177: uint16(36508), + 178: uint16(36510), + 179: uint16(35960), + 180: uint16(35970), + 181: uint16(35978), + 182: uint16(35973), + 183: uint16(35992), + 184: uint16(35988), + 185: uint16(26011), + 186: uint16(35286), + 187: uint16(35294), + 188: uint16(35290), + 189: uint16(35292), + }, + 117: { + 0: uint16(39900), + 1: uint16(39901), + 2: uint16(39902), + 3: uint16(39903), + 4: uint16(39904), + 5: uint16(39905), + 6: uint16(39906), + 7: uint16(39907), + 8: uint16(39908), + 9: uint16(39909), + 10: uint16(39910), + 11: uint16(39911), + 12: uint16(39912), + 13: uint16(39913), + 14: uint16(39914), + 15: uint16(39915), + 16: uint16(39916), + 17: uint16(39917), + 18: uint16(39918), + 19: uint16(39919), + 20: uint16(39920), + 21: uint16(39921), + 22: uint16(39922), + 23: uint16(39923), + 24: uint16(39924), + 25: uint16(39925), + 26: uint16(39926), + 27: uint16(39927), + 28: uint16(39928), + 29: uint16(39929), + 30: uint16(39930), + 31: uint16(39931), + 32: uint16(39932), + 33: uint16(39933), + 34: uint16(39934), + 35: uint16(39935), + 36: uint16(39936), + 37: uint16(39937), + 38: uint16(39938), + 39: uint16(39939), + 40: uint16(39940), + 41: uint16(39941), + 42: uint16(39942), + 43: uint16(39943), + 44: uint16(39944), + 45: uint16(39945), + 46: uint16(39946), + 47: uint16(39947), + 48: uint16(39948), + 49: uint16(39949), + 50: uint16(39950), + 51: uint16(39951), + 52: uint16(39952), + 53: uint16(39953), + 54: uint16(39954), + 55: uint16(39955), + 56: uint16(39956), + 57: uint16(39957), + 58: uint16(39958), + 59: uint16(39959), + 60: uint16(39960), + 61: uint16(39961), + 62: uint16(39962), + 63: uint16(39963), + 64: uint16(39964), + 65: uint16(39965), + 66: uint16(39966), + 67: uint16(39967), + 68: uint16(39968), + 69: uint16(39969), + 70: uint16(39970), + 71: uint16(39971), + 72: uint16(39972), + 73: uint16(39973), + 74: uint16(39974), + 75: uint16(39975), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39978), + 79: uint16(39979), + 80: uint16(39980), + 81: uint16(39981), + 82: uint16(39982), + 83: uint16(39983), + 84: uint16(39984), + 85: uint16(39985), + 86: uint16(39986), + 87: uint16(39987), + 88: uint16(39988), + 89: uint16(39989), + 90: uint16(39990), + 91: uint16(39991), + 92: uint16(39992), + 93: uint16(39993), + 94: uint16(39994), + 95: uint16(39995), + 96: uint16(35301), + 97: uint16(35307), + 98: uint16(35311), + 99: uint16(35390), + 100: uint16(35622), + 101: uint16(38739), + 102: uint16(38633), + 103: uint16(38643), + 104: uint16(38639), + 105: uint16(38662), + 106: uint16(38657), + 107: uint16(38664), + 108: uint16(38671), + 109: uint16(38670), + 110: uint16(38698), + 111: uint16(38701), + 112: uint16(38704), + 113: uint16(38718), + 114: uint16(40832), + 115: uint16(40835), + 116: uint16(40837), + 117: uint16(40838), + 118: uint16(40839), + 119: uint16(40840), + 120: uint16(40841), + 121: uint16(40842), + 122: uint16(40844), + 123: uint16(40702), + 124: uint16(40715), + 125: uint16(40717), + 126: uint16(38585), + 127: uint16(38588), + 128: uint16(38589), + 129: uint16(38606), + 130: uint16(38610), + 131: uint16(30655), + 132: uint16(38624), + 133: uint16(37518), + 134: uint16(37550), + 135: uint16(37576), + 136: uint16(37694), + 137: uint16(37738), + 138: uint16(37834), + 139: uint16(37775), + 140: uint16(37950), + 141: uint16(37995), + 142: uint16(40063), + 143: uint16(40066), + 144: uint16(40069), + 145: uint16(40070), + 146: uint16(40071), + 147: uint16(40072), + 148: uint16(31267), + 149: uint16(40075), + 150: uint16(40078), + 151: uint16(40080), + 152: uint16(40081), + 153: uint16(40082), + 154: uint16(40084), + 155: uint16(40085), + 156: uint16(40090), + 157: uint16(40091), + 158: uint16(40094), + 159: uint16(40095), + 160: uint16(40096), + 161: uint16(40097), + 162: uint16(40098), + 163: uint16(40099), + 164: uint16(40101), + 165: uint16(40102), + 166: uint16(40103), + 167: uint16(40104), + 168: uint16(40105), + 169: uint16(40107), + 170: uint16(40109), + 171: uint16(40110), + 172: uint16(40112), + 173: uint16(40113), + 174: uint16(40114), + 175: uint16(40115), + 176: uint16(40116), + 177: uint16(40117), + 178: uint16(40118), + 179: uint16(40119), + 180: uint16(40122), + 181: uint16(40123), + 182: uint16(40124), + 183: uint16(40125), + 184: uint16(40132), + 185: uint16(40133), + 186: uint16(40134), + 187: uint16(40135), + 188: uint16(40138), + 189: uint16(40139), + }, + 118: { + 0: uint16(39996), + 1: uint16(39997), + 2: uint16(39998), + 3: uint16(39999), + 4: uint16(40000), + 5: uint16(40001), + 6: uint16(40002), + 7: uint16(40003), + 8: uint16(40004), + 9: uint16(40005), + 10: uint16(40006), + 11: uint16(40007), + 12: uint16(40008), + 13: uint16(40009), + 14: uint16(40010), + 15: uint16(40011), + 16: uint16(40012), + 17: uint16(40013), + 18: uint16(40014), + 19: uint16(40015), + 20: uint16(40016), + 21: uint16(40017), + 22: uint16(40018), + 23: uint16(40019), + 24: uint16(40020), + 25: uint16(40021), + 26: uint16(40022), + 27: uint16(40023), + 28: uint16(40024), + 29: uint16(40025), + 30: uint16(40026), + 31: uint16(40027), + 32: uint16(40028), + 33: uint16(40029), + 34: uint16(40030), + 35: uint16(40031), + 36: uint16(40032), + 37: uint16(40033), + 38: uint16(40034), + 39: uint16(40035), + 40: uint16(40036), + 41: uint16(40037), + 42: uint16(40038), + 43: uint16(40039), + 44: uint16(40040), + 45: uint16(40041), + 46: uint16(40042), + 47: uint16(40043), + 48: uint16(40044), + 49: uint16(40045), + 50: uint16(40046), + 51: uint16(40047), + 52: uint16(40048), + 53: uint16(40049), + 54: uint16(40050), + 55: uint16(40051), + 56: uint16(40052), + 57: uint16(40053), + 58: uint16(40054), + 59: uint16(40055), + 60: uint16(40056), + 61: uint16(40057), + 62: uint16(40058), + 63: uint16(40059), + 64: uint16(40061), + 65: uint16(40062), + 66: uint16(40064), + 67: uint16(40067), + 68: uint16(40068), + 69: uint16(40073), + 70: uint16(40074), + 71: uint16(40076), + 72: uint16(40079), + 73: uint16(40083), + 74: uint16(40086), + 75: uint16(40087), + 76: uint16(40088), + 77: uint16(40089), + 78: uint16(40093), + 79: uint16(40106), + 80: uint16(40108), + 81: uint16(40111), + 82: uint16(40121), + 83: uint16(40126), + 84: uint16(40127), + 85: uint16(40128), + 86: uint16(40129), + 87: uint16(40130), + 88: uint16(40136), + 89: uint16(40137), + 90: uint16(40145), + 91: uint16(40146), + 92: uint16(40154), + 93: uint16(40155), + 94: uint16(40160), + 95: uint16(40161), + 96: uint16(40140), + 97: uint16(40141), + 98: uint16(40142), + 99: uint16(40143), + 100: uint16(40144), + 101: uint16(40147), + 102: uint16(40148), + 103: uint16(40149), + 104: uint16(40151), + 105: uint16(40152), + 106: uint16(40153), + 107: uint16(40156), + 108: uint16(40157), + 109: uint16(40159), + 110: uint16(40162), + 111: uint16(38780), + 112: uint16(38789), + 113: uint16(38801), + 114: uint16(38802), + 115: uint16(38804), + 116: uint16(38831), + 117: uint16(38827), + 118: uint16(38819), + 119: uint16(38834), + 120: uint16(38836), + 121: uint16(39601), + 122: uint16(39600), + 123: uint16(39607), + 124: uint16(40536), + 125: uint16(39606), + 126: uint16(39610), + 127: uint16(39612), + 128: uint16(39617), + 129: uint16(39616), + 130: uint16(39621), + 131: uint16(39618), + 132: uint16(39627), + 133: uint16(39628), + 134: uint16(39633), + 135: uint16(39749), + 136: uint16(39747), + 137: uint16(39751), + 138: uint16(39753), + 139: uint16(39752), + 140: uint16(39757), + 141: uint16(39761), + 142: uint16(39144), + 143: uint16(39181), + 144: uint16(39214), + 145: uint16(39253), + 146: uint16(39252), + 147: uint16(39647), + 148: uint16(39649), + 149: uint16(39654), + 150: uint16(39663), + 151: uint16(39659), + 152: uint16(39675), + 153: uint16(39661), + 154: uint16(39673), + 155: uint16(39688), + 156: uint16(39695), + 157: uint16(39699), + 158: uint16(39711), + 159: uint16(39715), + 160: uint16(40637), + 161: uint16(40638), + 162: uint16(32315), + 163: uint16(40578), + 164: uint16(40583), + 165: uint16(40584), + 166: uint16(40587), + 167: uint16(40594), + 168: uint16(37846), + 169: uint16(40605), + 170: uint16(40607), + 171: uint16(40667), + 172: uint16(40668), + 173: uint16(40669), + 174: uint16(40672), + 175: uint16(40671), + 176: uint16(40674), + 177: uint16(40681), + 178: uint16(40679), + 179: uint16(40677), + 180: uint16(40682), + 181: uint16(40687), + 182: uint16(40738), + 183: uint16(40748), + 184: uint16(40751), + 185: uint16(40761), + 186: uint16(40759), + 187: uint16(40765), + 188: uint16(40766), + 189: uint16(40772), + }, + 119: { + 0: uint16(40163), + 1: uint16(40164), + 2: uint16(40165), + 3: uint16(40166), + 4: uint16(40167), + 5: uint16(40168), + 6: uint16(40169), + 7: uint16(40170), + 8: uint16(40171), + 9: uint16(40172), + 10: uint16(40173), + 11: uint16(40174), + 12: uint16(40175), + 13: uint16(40176), + 14: uint16(40177), + 15: uint16(40178), + 16: uint16(40179), + 17: uint16(40180), + 18: uint16(40181), + 19: uint16(40182), + 20: uint16(40183), + 21: uint16(40184), + 22: uint16(40185), + 23: uint16(40186), + 24: uint16(40187), + 25: uint16(40188), + 26: uint16(40189), + 27: uint16(40190), + 28: uint16(40191), + 29: uint16(40192), + 30: uint16(40193), + 31: uint16(40194), + 32: uint16(40195), + 33: uint16(40196), + 34: uint16(40197), + 35: uint16(40198), + 36: uint16(40199), + 37: uint16(40200), + 38: uint16(40201), + 39: uint16(40202), + 40: uint16(40203), + 41: uint16(40204), + 42: uint16(40205), + 43: uint16(40206), + 44: uint16(40207), + 45: uint16(40208), + 46: uint16(40209), + 47: uint16(40210), + 48: uint16(40211), + 49: uint16(40212), + 50: uint16(40213), + 51: uint16(40214), + 52: uint16(40215), + 53: uint16(40216), + 54: uint16(40217), + 55: uint16(40218), + 56: uint16(40219), + 57: uint16(40220), + 58: uint16(40221), + 59: uint16(40222), + 60: uint16(40223), + 61: uint16(40224), + 62: uint16(40225), + 63: uint16(40226), + 64: uint16(40227), + 65: uint16(40228), + 66: uint16(40229), + 67: uint16(40230), + 68: uint16(40231), + 69: uint16(40232), + 70: uint16(40233), + 71: uint16(40234), + 72: uint16(40235), + 73: uint16(40236), + 74: uint16(40237), + 75: uint16(40238), + 76: uint16(40239), + 77: uint16(40240), + 78: uint16(40241), + 79: uint16(40242), + 80: uint16(40243), + 81: uint16(40244), + 82: uint16(40245), + 83: uint16(40246), + 84: uint16(40247), + 85: uint16(40248), + 86: uint16(40249), + 87: uint16(40250), + 88: uint16(40251), + 89: uint16(40252), + 90: uint16(40253), + 91: uint16(40254), + 92: uint16(40255), + 93: uint16(40256), + 94: uint16(40257), + 95: uint16(40258), + 96: uint16(57908), + 97: uint16(57909), + 98: uint16(57910), + 99: uint16(57911), + 100: uint16(57912), + 101: uint16(57913), + 102: uint16(57914), + 103: uint16(57915), + 104: uint16(57916), + 105: uint16(57917), + 106: uint16(57918), + 107: uint16(57919), + 108: uint16(57920), + 109: uint16(57921), + 110: uint16(57922), + 111: uint16(57923), + 112: uint16(57924), + 113: uint16(57925), + 114: uint16(57926), + 115: uint16(57927), + 116: uint16(57928), + 117: uint16(57929), + 118: uint16(57930), + 119: uint16(57931), + 120: uint16(57932), + 121: uint16(57933), + 122: uint16(57934), + 123: uint16(57935), + 124: uint16(57936), + 125: uint16(57937), + 126: uint16(57938), + 127: uint16(57939), + 128: uint16(57940), + 129: uint16(57941), + 130: uint16(57942), + 131: uint16(57943), + 132: uint16(57944), + 133: uint16(57945), + 134: uint16(57946), + 135: uint16(57947), + 136: uint16(57948), + 137: uint16(57949), + 138: uint16(57950), + 139: uint16(57951), + 140: uint16(57952), + 141: uint16(57953), + 142: uint16(57954), + 143: uint16(57955), + 144: uint16(57956), + 145: uint16(57957), + 146: uint16(57958), + 147: uint16(57959), + 148: uint16(57960), + 149: uint16(57961), + 150: uint16(57962), + 151: uint16(57963), + 152: uint16(57964), + 153: uint16(57965), + 154: uint16(57966), + 155: uint16(57967), + 156: uint16(57968), + 157: uint16(57969), + 158: uint16(57970), + 159: uint16(57971), + 160: uint16(57972), + 161: uint16(57973), + 162: uint16(57974), + 163: uint16(57975), + 164: uint16(57976), + 165: uint16(57977), + 166: uint16(57978), + 167: uint16(57979), + 168: uint16(57980), + 169: uint16(57981), + 170: uint16(57982), + 171: uint16(57983), + 172: uint16(57984), + 173: uint16(57985), + 174: uint16(57986), + 175: uint16(57987), + 176: uint16(57988), + 177: uint16(57989), + 178: uint16(57990), + 179: uint16(57991), + 180: uint16(57992), + 181: uint16(57993), + 182: uint16(57994), + 183: uint16(57995), + 184: uint16(57996), + 185: uint16(57997), + 186: uint16(57998), + 187: uint16(57999), + 188: uint16(58000), + 189: uint16(58001), + }, + 120: { + 0: uint16(40259), + 1: uint16(40260), + 2: uint16(40261), + 3: uint16(40262), + 4: uint16(40263), + 5: uint16(40264), + 6: uint16(40265), + 7: uint16(40266), + 8: uint16(40267), + 9: uint16(40268), + 10: uint16(40269), + 11: uint16(40270), + 12: uint16(40271), + 13: uint16(40272), + 14: uint16(40273), + 15: uint16(40274), + 16: uint16(40275), + 17: uint16(40276), + 18: uint16(40277), + 19: uint16(40278), + 20: uint16(40279), + 21: uint16(40280), + 22: uint16(40281), + 23: uint16(40282), + 24: uint16(40283), + 25: uint16(40284), + 26: uint16(40285), + 27: uint16(40286), + 28: uint16(40287), + 29: uint16(40288), + 30: uint16(40289), + 31: uint16(40290), + 32: uint16(40291), + 33: uint16(40292), + 34: uint16(40293), + 35: uint16(40294), + 36: uint16(40295), + 37: uint16(40296), + 38: uint16(40297), + 39: uint16(40298), + 40: uint16(40299), + 41: uint16(40300), + 42: uint16(40301), + 43: uint16(40302), + 44: uint16(40303), + 45: uint16(40304), + 46: uint16(40305), + 47: uint16(40306), + 48: uint16(40307), + 49: uint16(40308), + 50: uint16(40309), + 51: uint16(40310), + 52: uint16(40311), + 53: uint16(40312), + 54: uint16(40313), + 55: uint16(40314), + 56: uint16(40315), + 57: uint16(40316), + 58: uint16(40317), + 59: uint16(40318), + 60: uint16(40319), + 61: uint16(40320), + 62: uint16(40321), + 63: uint16(40322), + 64: uint16(40323), + 65: uint16(40324), + 66: uint16(40325), + 67: uint16(40326), + 68: uint16(40327), + 69: uint16(40328), + 70: uint16(40329), + 71: uint16(40330), + 72: uint16(40331), + 73: uint16(40332), + 74: uint16(40333), + 75: uint16(40334), + 76: uint16(40335), + 77: uint16(40336), + 78: uint16(40337), + 79: uint16(40338), + 80: uint16(40339), + 81: uint16(40340), + 82: uint16(40341), + 83: uint16(40342), + 84: uint16(40343), + 85: uint16(40344), + 86: uint16(40345), + 87: uint16(40346), + 88: uint16(40347), + 89: uint16(40348), + 90: uint16(40349), + 91: uint16(40350), + 92: uint16(40351), + 93: uint16(40352), + 94: uint16(40353), + 95: uint16(40354), + 96: uint16(58002), + 97: uint16(58003), + 98: uint16(58004), + 99: uint16(58005), + 100: uint16(58006), + 101: uint16(58007), + 102: uint16(58008), + 103: uint16(58009), + 104: uint16(58010), + 105: uint16(58011), + 106: uint16(58012), + 107: uint16(58013), + 108: uint16(58014), + 109: uint16(58015), + 110: uint16(58016), + 111: uint16(58017), + 112: uint16(58018), + 113: uint16(58019), + 114: uint16(58020), + 115: uint16(58021), + 116: uint16(58022), + 117: uint16(58023), + 118: uint16(58024), + 119: uint16(58025), + 120: uint16(58026), + 121: uint16(58027), + 122: uint16(58028), + 123: uint16(58029), + 124: uint16(58030), + 125: uint16(58031), + 126: uint16(58032), + 127: uint16(58033), + 128: uint16(58034), + 129: uint16(58035), + 130: uint16(58036), + 131: uint16(58037), + 132: uint16(58038), + 133: uint16(58039), + 134: uint16(58040), + 135: uint16(58041), + 136: uint16(58042), + 137: uint16(58043), + 138: uint16(58044), + 139: uint16(58045), + 140: uint16(58046), + 141: uint16(58047), + 142: uint16(58048), + 143: uint16(58049), + 144: uint16(58050), + 145: uint16(58051), + 146: uint16(58052), + 147: uint16(58053), + 148: uint16(58054), + 149: uint16(58055), + 150: uint16(58056), + 151: uint16(58057), + 152: uint16(58058), + 153: uint16(58059), + 154: uint16(58060), + 155: uint16(58061), + 156: uint16(58062), + 157: uint16(58063), + 158: uint16(58064), + 159: uint16(58065), + 160: uint16(58066), + 161: uint16(58067), + 162: uint16(58068), + 163: uint16(58069), + 164: uint16(58070), + 165: uint16(58071), + 166: uint16(58072), + 167: uint16(58073), + 168: uint16(58074), + 169: uint16(58075), + 170: uint16(58076), + 171: uint16(58077), + 172: uint16(58078), + 173: uint16(58079), + 174: uint16(58080), + 175: uint16(58081), + 176: uint16(58082), + 177: uint16(58083), + 178: uint16(58084), + 179: uint16(58085), + 180: uint16(58086), + 181: uint16(58087), + 182: uint16(58088), + 183: uint16(58089), + 184: uint16(58090), + 185: uint16(58091), + 186: uint16(58092), + 187: uint16(58093), + 188: uint16(58094), + 189: uint16(58095), + }, + 121: { + 0: uint16(40355), + 1: uint16(40356), + 2: uint16(40357), + 3: uint16(40358), + 4: uint16(40359), + 5: uint16(40360), + 6: uint16(40361), + 7: uint16(40362), + 8: uint16(40363), + 9: uint16(40364), + 10: uint16(40365), + 11: uint16(40366), + 12: uint16(40367), + 13: uint16(40368), + 14: uint16(40369), + 15: uint16(40370), + 16: uint16(40371), + 17: uint16(40372), + 18: uint16(40373), + 19: uint16(40374), + 20: uint16(40375), + 21: uint16(40376), + 22: uint16(40377), + 23: uint16(40378), + 24: uint16(40379), + 25: uint16(40380), + 26: uint16(40381), + 27: uint16(40382), + 28: uint16(40383), + 29: uint16(40384), + 30: uint16(40385), + 31: uint16(40386), + 32: uint16(40387), + 33: uint16(40388), + 34: uint16(40389), + 35: uint16(40390), + 36: uint16(40391), + 37: uint16(40392), + 38: uint16(40393), + 39: uint16(40394), + 40: uint16(40395), + 41: uint16(40396), + 42: uint16(40397), + 43: uint16(40398), + 44: uint16(40399), + 45: uint16(40400), + 46: uint16(40401), + 47: uint16(40402), + 48: uint16(40403), + 49: uint16(40404), + 50: uint16(40405), + 51: uint16(40406), + 52: uint16(40407), + 53: uint16(40408), + 54: uint16(40409), + 55: uint16(40410), + 56: uint16(40411), + 57: uint16(40412), + 58: uint16(40413), + 59: uint16(40414), + 60: uint16(40415), + 61: uint16(40416), + 62: uint16(40417), + 63: uint16(40418), + 64: uint16(40419), + 65: uint16(40420), + 66: uint16(40421), + 67: uint16(40422), + 68: uint16(40423), + 69: uint16(40424), + 70: uint16(40425), + 71: uint16(40426), + 72: uint16(40427), + 73: uint16(40428), + 74: uint16(40429), + 75: uint16(40430), + 76: uint16(40431), + 77: uint16(40432), + 78: uint16(40433), + 79: uint16(40434), + 80: uint16(40435), + 81: uint16(40436), + 82: uint16(40437), + 83: uint16(40438), + 84: uint16(40439), + 85: uint16(40440), + 86: uint16(40441), + 87: uint16(40442), + 88: uint16(40443), + 89: uint16(40444), + 90: uint16(40445), + 91: uint16(40446), + 92: uint16(40447), + 93: uint16(40448), + 94: uint16(40449), + 95: uint16(40450), + 96: uint16(58096), + 97: uint16(58097), + 98: uint16(58098), + 99: uint16(58099), + 100: uint16(58100), + 101: uint16(58101), + 102: uint16(58102), + 103: uint16(58103), + 104: uint16(58104), + 105: uint16(58105), + 106: uint16(58106), + 107: uint16(58107), + 108: uint16(58108), + 109: uint16(58109), + 110: uint16(58110), + 111: uint16(58111), + 112: uint16(58112), + 113: uint16(58113), + 114: uint16(58114), + 115: uint16(58115), + 116: uint16(58116), + 117: uint16(58117), + 118: uint16(58118), + 119: uint16(58119), + 120: uint16(58120), + 121: uint16(58121), + 122: uint16(58122), + 123: uint16(58123), + 124: uint16(58124), + 125: uint16(58125), + 126: uint16(58126), + 127: uint16(58127), + 128: uint16(58128), + 129: uint16(58129), + 130: uint16(58130), + 131: uint16(58131), + 132: uint16(58132), + 133: uint16(58133), + 134: uint16(58134), + 135: uint16(58135), + 136: uint16(58136), + 137: uint16(58137), + 138: uint16(58138), + 139: uint16(58139), + 140: uint16(58140), + 141: uint16(58141), + 142: uint16(58142), + 143: uint16(58143), + 144: uint16(58144), + 145: uint16(58145), + 146: uint16(58146), + 147: uint16(58147), + 148: uint16(58148), + 149: uint16(58149), + 150: uint16(58150), + 151: uint16(58151), + 152: uint16(58152), + 153: uint16(58153), + 154: uint16(58154), + 155: uint16(58155), + 156: uint16(58156), + 157: uint16(58157), + 158: uint16(58158), + 159: uint16(58159), + 160: uint16(58160), + 161: uint16(58161), + 162: uint16(58162), + 163: uint16(58163), + 164: uint16(58164), + 165: uint16(58165), + 166: uint16(58166), + 167: uint16(58167), + 168: uint16(58168), + 169: uint16(58169), + 170: uint16(58170), + 171: uint16(58171), + 172: uint16(58172), + 173: uint16(58173), + 174: uint16(58174), + 175: uint16(58175), + 176: uint16(58176), + 177: uint16(58177), + 178: uint16(58178), + 179: uint16(58179), + 180: uint16(58180), + 181: uint16(58181), + 182: uint16(58182), + 183: uint16(58183), + 184: uint16(58184), + 185: uint16(58185), + 186: uint16(58186), + 187: uint16(58187), + 188: uint16(58188), + 189: uint16(58189), + }, + 122: { + 0: uint16(40451), + 1: uint16(40452), + 2: uint16(40453), + 3: uint16(40454), + 4: uint16(40455), + 5: uint16(40456), + 6: uint16(40457), + 7: uint16(40458), + 8: uint16(40459), + 9: uint16(40460), + 10: uint16(40461), + 11: uint16(40462), + 12: uint16(40463), + 13: uint16(40464), + 14: uint16(40465), + 15: uint16(40466), + 16: uint16(40467), + 17: uint16(40468), + 18: uint16(40469), + 19: uint16(40470), + 20: uint16(40471), + 21: uint16(40472), + 22: uint16(40473), + 23: uint16(40474), + 24: uint16(40475), + 25: uint16(40476), + 26: uint16(40477), + 27: uint16(40478), + 28: uint16(40484), + 29: uint16(40487), + 30: uint16(40494), + 31: uint16(40496), + 32: uint16(40500), + 33: uint16(40507), + 34: uint16(40508), + 35: uint16(40512), + 36: uint16(40525), + 37: uint16(40528), + 38: uint16(40530), + 39: uint16(40531), + 40: uint16(40532), + 41: uint16(40534), + 42: uint16(40537), + 43: uint16(40541), + 44: uint16(40543), + 45: uint16(40544), + 46: uint16(40545), + 47: uint16(40546), + 48: uint16(40549), + 49: uint16(40558), + 50: uint16(40559), + 51: uint16(40562), + 52: uint16(40564), + 53: uint16(40565), + 54: uint16(40566), + 55: uint16(40567), + 56: uint16(40568), + 57: uint16(40569), + 58: uint16(40570), + 59: uint16(40571), + 60: uint16(40572), + 61: uint16(40573), + 62: uint16(40576), + 63: uint16(40577), + 64: uint16(40579), + 65: uint16(40580), + 66: uint16(40581), + 67: uint16(40582), + 68: uint16(40585), + 69: uint16(40586), + 70: uint16(40588), + 71: uint16(40589), + 72: uint16(40590), + 73: uint16(40591), + 74: uint16(40592), + 75: uint16(40593), + 76: uint16(40596), + 77: uint16(40597), + 78: uint16(40598), + 79: uint16(40599), + 80: uint16(40600), + 81: uint16(40601), + 82: uint16(40602), + 83: uint16(40603), + 84: uint16(40604), + 85: uint16(40606), + 86: uint16(40608), + 87: uint16(40609), + 88: uint16(40610), + 89: uint16(40611), + 90: uint16(40612), + 91: uint16(40613), + 92: uint16(40615), + 93: uint16(40616), + 94: uint16(40617), + 95: uint16(40618), + 96: uint16(58190), + 97: uint16(58191), + 98: uint16(58192), + 99: uint16(58193), + 100: uint16(58194), + 101: uint16(58195), + 102: uint16(58196), + 103: uint16(58197), + 104: uint16(58198), + 105: uint16(58199), + 106: uint16(58200), + 107: uint16(58201), + 108: uint16(58202), + 109: uint16(58203), + 110: uint16(58204), + 111: uint16(58205), + 112: uint16(58206), + 113: uint16(58207), + 114: uint16(58208), + 115: uint16(58209), + 116: uint16(58210), + 117: uint16(58211), + 118: uint16(58212), + 119: uint16(58213), + 120: uint16(58214), + 121: uint16(58215), + 122: uint16(58216), + 123: uint16(58217), + 124: uint16(58218), + 125: uint16(58219), + 126: uint16(58220), + 127: uint16(58221), + 128: uint16(58222), + 129: uint16(58223), + 130: uint16(58224), + 131: uint16(58225), + 132: uint16(58226), + 133: uint16(58227), + 134: uint16(58228), + 135: uint16(58229), + 136: uint16(58230), + 137: uint16(58231), + 138: uint16(58232), + 139: uint16(58233), + 140: uint16(58234), + 141: uint16(58235), + 142: uint16(58236), + 143: uint16(58237), + 144: uint16(58238), + 145: uint16(58239), + 146: uint16(58240), + 147: uint16(58241), + 148: uint16(58242), + 149: uint16(58243), + 150: uint16(58244), + 151: uint16(58245), + 152: uint16(58246), + 153: uint16(58247), + 154: uint16(58248), + 155: uint16(58249), + 156: uint16(58250), + 157: uint16(58251), + 158: uint16(58252), + 159: uint16(58253), + 160: uint16(58254), + 161: uint16(58255), + 162: uint16(58256), + 163: uint16(58257), + 164: uint16(58258), + 165: uint16(58259), + 166: uint16(58260), + 167: uint16(58261), + 168: uint16(58262), + 169: uint16(58263), + 170: uint16(58264), + 171: uint16(58265), + 172: uint16(58266), + 173: uint16(58267), + 174: uint16(58268), + 175: uint16(58269), + 176: uint16(58270), + 177: uint16(58271), + 178: uint16(58272), + 179: uint16(58273), + 180: uint16(58274), + 181: uint16(58275), + 182: uint16(58276), + 183: uint16(58277), + 184: uint16(58278), + 185: uint16(58279), + 186: uint16(58280), + 187: uint16(58281), + 188: uint16(58282), + 189: uint16(58283), + }, + 123: { + 0: uint16(40619), + 1: uint16(40620), + 2: uint16(40621), + 3: uint16(40622), + 4: uint16(40623), + 5: uint16(40624), + 6: uint16(40625), + 7: uint16(40626), + 8: uint16(40627), + 9: uint16(40629), + 10: uint16(40630), + 11: uint16(40631), + 12: uint16(40633), + 13: uint16(40634), + 14: uint16(40636), + 15: uint16(40639), + 16: uint16(40640), + 17: uint16(40641), + 18: uint16(40642), + 19: uint16(40643), + 20: uint16(40645), + 21: uint16(40646), + 22: uint16(40647), + 23: uint16(40648), + 24: uint16(40650), + 25: uint16(40651), + 26: uint16(40652), + 27: uint16(40656), + 28: uint16(40658), + 29: uint16(40659), + 30: uint16(40661), + 31: uint16(40662), + 32: uint16(40663), + 33: uint16(40665), + 34: uint16(40666), + 35: uint16(40670), + 36: uint16(40673), + 37: uint16(40675), + 38: uint16(40676), + 39: uint16(40678), + 40: uint16(40680), + 41: uint16(40683), + 42: uint16(40684), + 43: uint16(40685), + 44: uint16(40686), + 45: uint16(40688), + 46: uint16(40689), + 47: uint16(40690), + 48: uint16(40691), + 49: uint16(40692), + 50: uint16(40693), + 51: uint16(40694), + 52: uint16(40695), + 53: uint16(40696), + 54: uint16(40698), + 55: uint16(40701), + 56: uint16(40703), + 57: uint16(40704), + 58: uint16(40705), + 59: uint16(40706), + 60: uint16(40707), + 61: uint16(40708), + 62: uint16(40709), + 63: uint16(40710), + 64: uint16(40711), + 65: uint16(40712), + 66: uint16(40713), + 67: uint16(40714), + 68: uint16(40716), + 69: uint16(40719), + 70: uint16(40721), + 71: uint16(40722), + 72: uint16(40724), + 73: uint16(40725), + 74: uint16(40726), + 75: uint16(40728), + 76: uint16(40730), + 77: uint16(40731), + 78: uint16(40732), + 79: uint16(40733), + 80: uint16(40734), + 81: uint16(40735), + 82: uint16(40737), + 83: uint16(40739), + 84: uint16(40740), + 85: uint16(40741), + 86: uint16(40742), + 87: uint16(40743), + 88: uint16(40744), + 89: uint16(40745), + 90: uint16(40746), + 91: uint16(40747), + 92: uint16(40749), + 93: uint16(40750), + 94: uint16(40752), + 95: uint16(40753), + 96: uint16(58284), + 97: uint16(58285), + 98: uint16(58286), + 99: uint16(58287), + 100: uint16(58288), + 101: uint16(58289), + 102: uint16(58290), + 103: uint16(58291), + 104: uint16(58292), + 105: uint16(58293), + 106: uint16(58294), + 107: uint16(58295), + 108: uint16(58296), + 109: uint16(58297), + 110: uint16(58298), + 111: uint16(58299), + 112: uint16(58300), + 113: uint16(58301), + 114: uint16(58302), + 115: uint16(58303), + 116: uint16(58304), + 117: uint16(58305), + 118: uint16(58306), + 119: uint16(58307), + 120: uint16(58308), + 121: uint16(58309), + 122: uint16(58310), + 123: uint16(58311), + 124: uint16(58312), + 125: uint16(58313), + 126: uint16(58314), + 127: uint16(58315), + 128: uint16(58316), + 129: uint16(58317), + 130: uint16(58318), + 131: uint16(58319), + 132: uint16(58320), + 133: uint16(58321), + 134: uint16(58322), + 135: uint16(58323), + 136: uint16(58324), + 137: uint16(58325), + 138: uint16(58326), + 139: uint16(58327), + 140: uint16(58328), + 141: uint16(58329), + 142: uint16(58330), + 143: uint16(58331), + 144: uint16(58332), + 145: uint16(58333), + 146: uint16(58334), + 147: uint16(58335), + 148: uint16(58336), + 149: uint16(58337), + 150: uint16(58338), + 151: uint16(58339), + 152: uint16(58340), + 153: uint16(58341), + 154: uint16(58342), + 155: uint16(58343), + 156: uint16(58344), + 157: uint16(58345), + 158: uint16(58346), + 159: uint16(58347), + 160: uint16(58348), + 161: uint16(58349), + 162: uint16(58350), + 163: uint16(58351), + 164: uint16(58352), + 165: uint16(58353), + 166: uint16(58354), + 167: uint16(58355), + 168: uint16(58356), + 169: uint16(58357), + 170: uint16(58358), + 171: uint16(58359), + 172: uint16(58360), + 173: uint16(58361), + 174: uint16(58362), + 175: uint16(58363), + 176: uint16(58364), + 177: uint16(58365), + 178: uint16(58366), + 179: uint16(58367), + 180: uint16(58368), + 181: uint16(58369), + 182: uint16(58370), + 183: uint16(58371), + 184: uint16(58372), + 185: uint16(58373), + 186: uint16(58374), + 187: uint16(58375), + 188: uint16(58376), + 189: uint16(58377), + }, + 124: { + 0: uint16(40754), + 1: uint16(40755), + 2: uint16(40756), + 3: uint16(40757), + 4: uint16(40758), + 5: uint16(40760), + 6: uint16(40762), + 7: uint16(40764), + 8: uint16(40767), + 9: uint16(40768), + 10: uint16(40769), + 11: uint16(40770), + 12: uint16(40771), + 13: uint16(40773), + 14: uint16(40774), + 15: uint16(40775), + 16: uint16(40776), + 17: uint16(40777), + 18: uint16(40778), + 19: uint16(40779), + 20: uint16(40780), + 21: uint16(40781), + 22: uint16(40782), + 23: uint16(40783), + 24: uint16(40786), + 25: uint16(40787), + 26: uint16(40788), + 27: uint16(40789), + 28: uint16(40790), + 29: uint16(40791), + 30: uint16(40792), + 31: uint16(40793), + 32: uint16(40794), + 33: uint16(40795), + 34: uint16(40796), + 35: uint16(40797), + 36: uint16(40798), + 37: uint16(40799), + 38: uint16(40800), + 39: uint16(40801), + 40: uint16(40802), + 41: uint16(40803), + 42: uint16(40804), + 43: uint16(40805), + 44: uint16(40806), + 45: uint16(40807), + 46: uint16(40808), + 47: uint16(40809), + 48: uint16(40810), + 49: uint16(40811), + 50: uint16(40812), + 51: uint16(40813), + 52: uint16(40814), + 53: uint16(40815), + 54: uint16(40816), + 55: uint16(40817), + 56: uint16(40818), + 57: uint16(40819), + 58: uint16(40820), + 59: uint16(40821), + 60: uint16(40822), + 61: uint16(40823), + 62: uint16(40824), + 63: uint16(40825), + 64: uint16(40826), + 65: uint16(40827), + 66: uint16(40828), + 67: uint16(40829), + 68: uint16(40830), + 69: uint16(40833), + 70: uint16(40834), + 71: uint16(40845), + 72: uint16(40846), + 73: uint16(40847), + 74: uint16(40848), + 75: uint16(40849), + 76: uint16(40850), + 77: uint16(40851), + 78: uint16(40852), + 79: uint16(40853), + 80: uint16(40854), + 81: uint16(40855), + 82: uint16(40856), + 83: uint16(40860), + 84: uint16(40861), + 85: uint16(40862), + 86: uint16(40865), + 87: uint16(40866), + 88: uint16(40867), + 89: uint16(40868), + 90: uint16(40869), + 91: uint16(63788), + 92: uint16(63865), + 93: uint16(63893), + 94: uint16(63975), + 95: uint16(63985), + 96: uint16(58378), + 97: uint16(58379), + 98: uint16(58380), + 99: uint16(58381), + 100: uint16(58382), + 101: uint16(58383), + 102: uint16(58384), + 103: uint16(58385), + 104: uint16(58386), + 105: uint16(58387), + 106: uint16(58388), + 107: uint16(58389), + 108: uint16(58390), + 109: uint16(58391), + 110: uint16(58392), + 111: uint16(58393), + 112: uint16(58394), + 113: uint16(58395), + 114: uint16(58396), + 115: uint16(58397), + 116: uint16(58398), + 117: uint16(58399), + 118: uint16(58400), + 119: uint16(58401), + 120: uint16(58402), + 121: uint16(58403), + 122: uint16(58404), + 123: uint16(58405), + 124: uint16(58406), + 125: uint16(58407), + 126: uint16(58408), + 127: uint16(58409), + 128: uint16(58410), + 129: uint16(58411), + 130: uint16(58412), + 131: uint16(58413), + 132: uint16(58414), + 133: uint16(58415), + 134: uint16(58416), + 135: uint16(58417), + 136: uint16(58418), + 137: uint16(58419), + 138: uint16(58420), + 139: uint16(58421), + 140: uint16(58422), + 141: uint16(58423), + 142: uint16(58424), + 143: uint16(58425), + 144: uint16(58426), + 145: uint16(58427), + 146: uint16(58428), + 147: uint16(58429), + 148: uint16(58430), + 149: uint16(58431), + 150: uint16(58432), + 151: uint16(58433), + 152: uint16(58434), + 153: uint16(58435), + 154: uint16(58436), + 155: uint16(58437), + 156: uint16(58438), + 157: uint16(58439), + 158: uint16(58440), + 159: uint16(58441), + 160: uint16(58442), + 161: uint16(58443), + 162: uint16(58444), + 163: uint16(58445), + 164: uint16(58446), + 165: uint16(58447), + 166: uint16(58448), + 167: uint16(58449), + 168: uint16(58450), + 169: uint16(58451), + 170: uint16(58452), + 171: uint16(58453), + 172: uint16(58454), + 173: uint16(58455), + 174: uint16(58456), + 175: uint16(58457), + 176: uint16(58458), + 177: uint16(58459), + 178: uint16(58460), + 179: uint16(58461), + 180: uint16(58462), + 181: uint16(58463), + 182: uint16(58464), + 183: uint16(58465), + 184: uint16(58466), + 185: uint16(58467), + 186: uint16(58468), + 187: uint16(58469), + 188: uint16(58470), + 189: uint16(58471), + }, + 125: { + 0: uint16(64012), + 1: uint16(64013), + 2: uint16(64014), + 3: uint16(64015), + 4: uint16(64017), + 5: uint16(64019), + 6: uint16(64020), + 7: uint16(64024), + 8: uint16(64031), + 9: uint16(64032), + 10: uint16(64033), + 11: uint16(64035), + 12: uint16(64036), + 13: uint16(64039), + 14: uint16(64040), + 15: uint16(64041), + 16: uint16(11905), + 17: uint16(59414), + 18: uint16(59415), + 19: uint16(59416), + 20: uint16(11908), + 21: uint16(13427), + 22: uint16(13383), + 23: uint16(11912), + 24: uint16(11915), + 25: uint16(59422), + 26: uint16(13726), + 27: uint16(13850), + 28: uint16(13838), + 29: uint16(11916), + 30: uint16(11927), + 31: uint16(14702), + 32: uint16(14616), + 33: uint16(59430), + 34: uint16(14799), + 35: uint16(14815), + 36: uint16(14963), + 37: uint16(14800), + 38: uint16(59435), + 39: uint16(59436), + 40: uint16(15182), + 41: uint16(15470), + 42: uint16(15584), + 43: uint16(11943), + 44: uint16(59441), + 45: uint16(59442), + 46: uint16(11946), + 47: uint16(16470), + 48: uint16(16735), + 49: uint16(11950), + 50: uint16(17207), + 51: uint16(11955), + 52: uint16(11958), + 53: uint16(11959), + 54: uint16(59451), + 55: uint16(17329), + 56: uint16(17324), + 57: uint16(11963), + 58: uint16(17373), + 59: uint16(17622), + 60: uint16(18017), + 61: uint16(17996), + 62: uint16(59459), + 63: uint16(18211), + 64: uint16(18217), + 65: uint16(18300), + 66: uint16(18317), + 67: uint16(11978), + 68: uint16(18759), + 69: uint16(18810), + 70: uint16(18813), + 71: uint16(18818), + 72: uint16(18819), + 73: uint16(18821), + 74: uint16(18822), + 75: uint16(18847), + 76: uint16(18843), + 77: uint16(18871), + 78: uint16(18870), + 79: uint16(59476), + 80: uint16(59477), + 81: uint16(19619), + 82: uint16(19615), + 83: uint16(19616), + 84: uint16(19617), + 85: uint16(19575), + 86: uint16(19618), + 87: uint16(19731), + 88: uint16(19732), + 89: uint16(19733), + 90: uint16(19734), + 91: uint16(19735), + 92: uint16(19736), + 93: uint16(19737), + 94: uint16(19886), + 95: uint16(59492), + 96: uint16(58472), + 97: uint16(58473), + 98: uint16(58474), + 99: uint16(58475), + 100: uint16(58476), + 101: uint16(58477), + 102: uint16(58478), + 103: uint16(58479), + 104: uint16(58480), + 105: uint16(58481), + 106: uint16(58482), + 107: uint16(58483), + 108: uint16(58484), + 109: uint16(58485), + 110: uint16(58486), + 111: uint16(58487), + 112: uint16(58488), + 113: uint16(58489), + 114: uint16(58490), + 115: uint16(58491), + 116: uint16(58492), + 117: uint16(58493), + 118: uint16(58494), + 119: uint16(58495), + 120: uint16(58496), + 121: uint16(58497), + 122: uint16(58498), + 123: uint16(58499), + 124: uint16(58500), + 125: uint16(58501), + 126: uint16(58502), + 127: uint16(58503), + 128: uint16(58504), + 129: uint16(58505), + 130: uint16(58506), + 131: uint16(58507), + 132: uint16(58508), + 133: uint16(58509), + 134: uint16(58510), + 135: uint16(58511), + 136: uint16(58512), + 137: uint16(58513), + 138: uint16(58514), + 139: uint16(58515), + 140: uint16(58516), + 141: uint16(58517), + 142: uint16(58518), + 143: uint16(58519), + 144: uint16(58520), + 145: uint16(58521), + 146: uint16(58522), + 147: uint16(58523), + 148: uint16(58524), + 149: uint16(58525), + 150: uint16(58526), + 151: uint16(58527), + 152: uint16(58528), + 153: uint16(58529), + 154: uint16(58530), + 155: uint16(58531), + 156: uint16(58532), + 157: uint16(58533), + 158: uint16(58534), + 159: uint16(58535), + 160: uint16(58536), + 161: uint16(58537), + 162: uint16(58538), + 163: uint16(58539), + 164: uint16(58540), + 165: uint16(58541), + 166: uint16(58542), + 167: uint16(58543), + 168: uint16(58544), + 169: uint16(58545), + 170: uint16(58546), + 171: uint16(58547), + 172: uint16(58548), + 173: uint16(58549), + 174: uint16(58550), + 175: uint16(58551), + 176: uint16(58552), + 177: uint16(58553), + 178: uint16(58554), + 179: uint16(58555), + 180: uint16(58556), + 181: uint16(58557), + 182: uint16(58558), + 183: uint16(58559), + 184: uint16(58560), + 185: uint16(58561), + 186: uint16(58562), + 187: uint16(58563), + 188: uint16(58564), + 189: uint16(58565), + }, +} + +var _big5 = [89][157]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(65292), + 2: uint16(12289), + 3: uint16(12290), + 4: uint16(65294), + 5: uint16(8231), + 6: uint16(65307), + 7: uint16(65306), + 8: uint16(65311), + 9: uint16(65281), + 10: uint16(65072), + 11: uint16(8230), + 12: uint16(8229), + 13: uint16(65104), + 14: uint16(65105), + 15: uint16(65106), + 16: uint16(183), + 17: uint16(65108), + 18: uint16(65109), + 19: uint16(65110), + 20: uint16(65111), + 21: uint16(65372), + 22: uint16(8211), + 23: uint16(65073), + 24: uint16(8212), + 25: uint16(65075), + 26: uint16(9588), + 27: uint16(65076), + 28: uint16(65103), + 29: uint16(65288), + 30: uint16(65289), + 31: uint16(65077), + 32: uint16(65078), + 33: uint16(65371), + 34: uint16(65373), + 35: uint16(65079), + 36: uint16(65080), + 37: uint16(12308), + 38: uint16(12309), + 39: uint16(65081), + 40: uint16(65082), + 41: uint16(12304), + 42: uint16(12305), + 43: uint16(65083), + 44: uint16(65084), + 45: uint16(12298), + 46: uint16(12299), + 47: uint16(65085), + 48: uint16(65086), + 49: uint16(12296), + 50: uint16(12297), + 51: uint16(65087), + 52: uint16(65088), + 53: uint16(12300), + 54: uint16(12301), + 55: uint16(65089), + 56: uint16(65090), + 57: uint16(12302), + 58: uint16(12303), + 59: uint16(65091), + 60: uint16(65092), + 61: uint16(65113), + 62: uint16(65114), + 63: uint16(65115), + 64: uint16(65116), + 65: uint16(65117), + 66: uint16(65118), + 67: uint16(8216), + 68: uint16(8217), + 69: uint16(8220), + 70: uint16(8221), + 71: uint16(12317), + 72: uint16(12318), + 73: uint16(8245), + 74: uint16(8242), + 75: uint16(65283), + 76: uint16(65286), + 77: uint16(65290), + 78: uint16(8251), + 79: uint16(167), + 80: uint16(12291), + 81: uint16(9675), + 82: uint16(9679), + 83: uint16(9651), + 84: uint16(9650), + 85: uint16(9678), + 86: uint16(9734), + 87: uint16(9733), + 88: uint16(9671), + 89: uint16(9670), + 90: uint16(9633), + 91: uint16(9632), + 92: uint16(9661), + 93: uint16(9660), + 94: uint16(12963), + 95: uint16(8453), + 96: uint16(175), + 97: uint16(65507), + 98: uint16(65343), + 99: uint16(717), + 100: uint16(65097), + 101: uint16(65098), + 102: uint16(65101), + 103: uint16(65102), + 104: uint16(65099), + 105: uint16(65100), + 106: uint16(65119), + 107: uint16(65120), + 108: uint16(65121), + 109: uint16(65291), + 110: uint16(65293), + 111: uint16(215), + 112: uint16(247), + 113: uint16(177), + 114: uint16(8730), + 115: uint16(65308), + 116: uint16(65310), + 117: uint16(65309), + 118: uint16(8806), + 119: uint16(8807), + 120: uint16(8800), + 121: uint16(8734), + 122: uint16(8786), + 123: uint16(8801), + 124: uint16(65122), + 125: uint16(65123), + 126: uint16(65124), + 127: uint16(65125), + 128: uint16(65126), + 129: uint16(65374), + 130: uint16(8745), + 131: uint16(8746), + 132: uint16(8869), + 133: uint16(8736), + 134: uint16(8735), + 135: uint16(8895), + 136: uint16(13266), + 137: uint16(13265), + 138: uint16(8747), + 139: uint16(8750), + 140: uint16(8757), + 141: uint16(8756), + 142: uint16(9792), + 143: uint16(9794), + 144: uint16(8853), + 145: uint16(8857), + 146: uint16(8593), + 147: uint16(8595), + 148: uint16(8592), + 149: uint16(8594), + 150: uint16(8598), + 151: uint16(8599), + 152: uint16(8601), + 153: uint16(8600), + 154: uint16(8741), + 155: uint16(8739), + 156: uint16(65295), + }, + 1: { + 0: uint16(65340), + 1: uint16(8725), + 2: uint16(65128), + 3: uint16(65284), + 4: uint16(65509), + 5: uint16(12306), + 6: uint16(65504), + 7: uint16(65505), + 8: uint16(65285), + 9: uint16(65312), + 10: uint16(8451), + 11: uint16(8457), + 12: uint16(65129), + 13: uint16(65130), + 14: uint16(65131), + 15: uint16(13269), + 16: uint16(13212), + 17: uint16(13213), + 18: uint16(13214), + 19: uint16(13262), + 20: uint16(13217), + 21: uint16(13198), + 22: uint16(13199), + 23: uint16(13252), + 24: uint16(176), + 25: uint16(20825), + 26: uint16(20827), + 27: uint16(20830), + 28: uint16(20829), + 29: uint16(20833), + 30: uint16(20835), + 31: uint16(21991), + 32: uint16(29929), + 33: uint16(31950), + 34: uint16(9601), + 35: uint16(9602), + 36: uint16(9603), + 37: uint16(9604), + 38: uint16(9605), + 39: uint16(9606), + 40: uint16(9607), + 41: uint16(9608), + 42: uint16(9615), + 43: uint16(9614), + 44: uint16(9613), + 45: uint16(9612), + 46: uint16(9611), + 47: uint16(9610), + 48: uint16(9609), + 49: uint16(9532), + 50: uint16(9524), + 51: uint16(9516), + 52: uint16(9508), + 53: uint16(9500), + 54: uint16(9620), + 55: uint16(9472), + 56: uint16(9474), + 57: uint16(9621), + 58: uint16(9484), + 59: uint16(9488), + 60: uint16(9492), + 61: uint16(9496), + 62: uint16(9581), + 63: uint16(9582), + 64: uint16(9584), + 65: uint16(9583), + 66: uint16(9552), + 67: uint16(9566), + 68: uint16(9578), + 69: uint16(9569), + 70: uint16(9698), + 71: uint16(9699), + 72: uint16(9701), + 73: uint16(9700), + 74: uint16(9585), + 75: uint16(9586), + 76: uint16(9587), + 77: uint16(65296), + 78: uint16(65297), + 79: uint16(65298), + 80: uint16(65299), + 81: uint16(65300), + 82: uint16(65301), + 83: uint16(65302), + 84: uint16(65303), + 85: uint16(65304), + 86: uint16(65305), + 87: uint16(8544), + 88: uint16(8545), + 89: uint16(8546), + 90: uint16(8547), + 91: uint16(8548), + 92: uint16(8549), + 93: uint16(8550), + 94: uint16(8551), + 95: uint16(8552), + 96: uint16(8553), + 97: uint16(12321), + 98: uint16(12322), + 99: uint16(12323), + 100: uint16(12324), + 101: uint16(12325), + 102: uint16(12326), + 103: uint16(12327), + 104: uint16(12328), + 105: uint16(12329), + 106: uint16(21313), + 107: uint16(21316), + 108: uint16(21317), + 109: uint16(65313), + 110: uint16(65314), + 111: uint16(65315), + 112: uint16(65316), + 113: uint16(65317), + 114: uint16(65318), + 115: uint16(65319), + 116: uint16(65320), + 117: uint16(65321), + 118: uint16(65322), + 119: uint16(65323), + 120: uint16(65324), + 121: uint16(65325), + 122: uint16(65326), + 123: uint16(65327), + 124: uint16(65328), + 125: uint16(65329), + 126: uint16(65330), + 127: uint16(65331), + 128: uint16(65332), + 129: uint16(65333), + 130: uint16(65334), + 131: uint16(65335), + 132: uint16(65336), + 133: uint16(65337), + 134: uint16(65338), + 135: uint16(65345), + 136: uint16(65346), + 137: uint16(65347), + 138: uint16(65348), + 139: uint16(65349), + 140: uint16(65350), + 141: uint16(65351), + 142: uint16(65352), + 143: uint16(65353), + 144: uint16(65354), + 145: uint16(65355), + 146: uint16(65356), + 147: uint16(65357), + 148: uint16(65358), + 149: uint16(65359), + 150: uint16(65360), + 151: uint16(65361), + 152: uint16(65362), + 153: uint16(65363), + 154: uint16(65364), + 155: uint16(65365), + 156: uint16(65366), + }, + 2: { + 0: uint16(65367), + 1: uint16(65368), + 2: uint16(65369), + 3: uint16(65370), + 4: uint16(913), + 5: uint16(914), + 6: uint16(915), + 7: uint16(916), + 8: uint16(917), + 9: uint16(918), + 10: uint16(919), + 11: uint16(920), + 12: uint16(921), + 13: uint16(922), + 14: uint16(923), + 15: uint16(924), + 16: uint16(925), + 17: uint16(926), + 18: uint16(927), + 19: uint16(928), + 20: uint16(929), + 21: uint16(931), + 22: uint16(932), + 23: uint16(933), + 24: uint16(934), + 25: uint16(935), + 26: uint16(936), + 27: uint16(937), + 28: uint16(945), + 29: uint16(946), + 30: uint16(947), + 31: uint16(948), + 32: uint16(949), + 33: uint16(950), + 34: uint16(951), + 35: uint16(952), + 36: uint16(953), + 37: uint16(954), + 38: uint16(955), + 39: uint16(956), + 40: uint16(957), + 41: uint16(958), + 42: uint16(959), + 43: uint16(960), + 44: uint16(961), + 45: uint16(963), + 46: uint16(964), + 47: uint16(965), + 48: uint16(966), + 49: uint16(967), + 50: uint16(968), + 51: uint16(969), + 52: uint16(12549), + 53: uint16(12550), + 54: uint16(12551), + 55: uint16(12552), + 56: uint16(12553), + 57: uint16(12554), + 58: uint16(12555), + 59: uint16(12556), + 60: uint16(12557), + 61: uint16(12558), + 62: uint16(12559), + 63: uint16(12560), + 64: uint16(12561), + 65: uint16(12562), + 66: uint16(12563), + 67: uint16(12564), + 68: uint16(12565), + 69: uint16(12566), + 70: uint16(12567), + 71: uint16(12568), + 72: uint16(12569), + 73: uint16(12570), + 74: uint16(12571), + 75: uint16(12572), + 76: uint16(12573), + 77: uint16(12574), + 78: uint16(12575), + 79: uint16(12576), + 80: uint16(12577), + 81: uint16(12578), + 82: uint16(12579), + 83: uint16(12580), + 84: uint16(12581), + 85: uint16(12582), + 86: uint16(12583), + 87: uint16(12584), + 88: uint16(12585), + 89: uint16(729), + 90: uint16(713), + 91: uint16(714), + 92: uint16(711), + 93: uint16(715), + 94: uint16(9216), + 95: uint16(9217), + 96: uint16(9218), + 97: uint16(9219), + 98: uint16(9220), + 99: uint16(9221), + 100: uint16(9222), + 101: uint16(9223), + 102: uint16(9224), + 103: uint16(9225), + 104: uint16(9226), + 105: uint16(9227), + 106: uint16(9228), + 107: uint16(9229), + 108: uint16(9230), + 109: uint16(9231), + 110: uint16(9232), + 111: uint16(9233), + 112: uint16(9234), + 113: uint16(9235), + 114: uint16(9236), + 115: uint16(9237), + 116: uint16(9238), + 117: uint16(9239), + 118: uint16(9240), + 119: uint16(9241), + 120: uint16(9242), + 121: uint16(9243), + 122: uint16(9244), + 123: uint16(9245), + 124: uint16(9246), + 125: uint16(9247), + 126: uint16(9249), + 127: uint16(8364), + }, + 3: { + 0: uint16(19968), + 1: uint16(20057), + 2: uint16(19969), + 3: uint16(19971), + 4: uint16(20035), + 5: uint16(20061), + 6: uint16(20102), + 7: uint16(20108), + 8: uint16(20154), + 9: uint16(20799), + 10: uint16(20837), + 11: uint16(20843), + 12: uint16(20960), + 13: uint16(20992), + 14: uint16(20993), + 15: uint16(21147), + 16: uint16(21269), + 17: uint16(21313), + 18: uint16(21340), + 19: uint16(21448), + 20: uint16(19977), + 21: uint16(19979), + 22: uint16(19976), + 23: uint16(19978), + 24: uint16(20011), + 25: uint16(20024), + 26: uint16(20961), + 27: uint16(20037), + 28: uint16(20040), + 29: uint16(20063), + 30: uint16(20062), + 31: uint16(20110), + 32: uint16(20129), + 33: uint16(20800), + 34: uint16(20995), + 35: uint16(21242), + 36: uint16(21315), + 37: uint16(21449), + 38: uint16(21475), + 39: uint16(22303), + 40: uint16(22763), + 41: uint16(22805), + 42: uint16(22823), + 43: uint16(22899), + 44: uint16(23376), + 45: uint16(23377), + 46: uint16(23379), + 47: uint16(23544), + 48: uint16(23567), + 49: uint16(23586), + 50: uint16(23608), + 51: uint16(23665), + 52: uint16(24029), + 53: uint16(24037), + 54: uint16(24049), + 55: uint16(24050), + 56: uint16(24051), + 57: uint16(24062), + 58: uint16(24178), + 59: uint16(24318), + 60: uint16(24331), + 61: uint16(24339), + 62: uint16(25165), + 63: uint16(19985), + 64: uint16(19984), + 65: uint16(19981), + 66: uint16(20013), + 67: uint16(20016), + 68: uint16(20025), + 69: uint16(20043), + 70: uint16(23609), + 71: uint16(20104), + 72: uint16(20113), + 73: uint16(20117), + 74: uint16(20114), + 75: uint16(20116), + 76: uint16(20130), + 77: uint16(20161), + 78: uint16(20160), + 79: uint16(20163), + 80: uint16(20166), + 81: uint16(20167), + 82: uint16(20173), + 83: uint16(20170), + 84: uint16(20171), + 85: uint16(20164), + 86: uint16(20803), + 87: uint16(20801), + 88: uint16(20839), + 89: uint16(20845), + 90: uint16(20846), + 91: uint16(20844), + 92: uint16(20887), + 93: uint16(20982), + 94: uint16(20998), + 95: uint16(20999), + 96: uint16(21000), + 97: uint16(21243), + 98: uint16(21246), + 99: uint16(21247), + 100: uint16(21270), + 101: uint16(21305), + 102: uint16(21320), + 103: uint16(21319), + 104: uint16(21317), + 105: uint16(21342), + 106: uint16(21380), + 107: uint16(21451), + 108: uint16(21450), + 109: uint16(21453), + 110: uint16(22764), + 111: uint16(22825), + 112: uint16(22827), + 113: uint16(22826), + 114: uint16(22829), + 115: uint16(23380), + 116: uint16(23569), + 117: uint16(23588), + 118: uint16(23610), + 119: uint16(23663), + 120: uint16(24052), + 121: uint16(24187), + 122: uint16(24319), + 123: uint16(24340), + 124: uint16(24341), + 125: uint16(24515), + 126: uint16(25096), + 127: uint16(25142), + 128: uint16(25163), + 129: uint16(25166), + 130: uint16(25903), + 131: uint16(25991), + 132: uint16(26007), + 133: uint16(26020), + 134: uint16(26041), + 135: uint16(26085), + 136: uint16(26352), + 137: uint16(26376), + 138: uint16(26408), + 139: uint16(27424), + 140: uint16(27490), + 141: uint16(27513), + 142: uint16(27595), + 143: uint16(27604), + 144: uint16(27611), + 145: uint16(27663), + 146: uint16(27700), + 147: uint16(28779), + 148: uint16(29226), + 149: uint16(29238), + 150: uint16(29243), + 151: uint16(29255), + 152: uint16(29273), + 153: uint16(29275), + 154: uint16(29356), + 155: uint16(29579), + 156: uint16(19993), + }, + 4: { + 0: uint16(19990), + 1: uint16(19989), + 2: uint16(19988), + 3: uint16(19992), + 4: uint16(20027), + 5: uint16(20045), + 6: uint16(20047), + 7: uint16(20046), + 8: uint16(20197), + 9: uint16(20184), + 10: uint16(20180), + 11: uint16(20181), + 12: uint16(20182), + 13: uint16(20183), + 14: uint16(20195), + 15: uint16(20196), + 16: uint16(20185), + 17: uint16(20190), + 18: uint16(20805), + 19: uint16(20804), + 20: uint16(20873), + 21: uint16(20874), + 22: uint16(20908), + 23: uint16(20985), + 24: uint16(20986), + 25: uint16(20984), + 26: uint16(21002), + 27: uint16(21152), + 28: uint16(21151), + 29: uint16(21253), + 30: uint16(21254), + 31: uint16(21271), + 32: uint16(21277), + 33: uint16(20191), + 34: uint16(21322), + 35: uint16(21321), + 36: uint16(21345), + 37: uint16(21344), + 38: uint16(21359), + 39: uint16(21358), + 40: uint16(21435), + 41: uint16(21487), + 42: uint16(21476), + 43: uint16(21491), + 44: uint16(21484), + 45: uint16(21486), + 46: uint16(21481), + 47: uint16(21480), + 48: uint16(21500), + 49: uint16(21496), + 50: uint16(21493), + 51: uint16(21483), + 52: uint16(21478), + 53: uint16(21482), + 54: uint16(21490), + 55: uint16(21489), + 56: uint16(21488), + 57: uint16(21477), + 58: uint16(21485), + 59: uint16(21499), + 60: uint16(22235), + 61: uint16(22234), + 62: uint16(22806), + 63: uint16(22830), + 64: uint16(22833), + 65: uint16(22900), + 66: uint16(22902), + 67: uint16(23381), + 68: uint16(23427), + 69: uint16(23612), + 70: uint16(24040), + 71: uint16(24039), + 72: uint16(24038), + 73: uint16(24066), + 74: uint16(24067), + 75: uint16(24179), + 76: uint16(24188), + 77: uint16(24321), + 78: uint16(24344), + 79: uint16(24343), + 80: uint16(24517), + 81: uint16(25098), + 82: uint16(25171), + 83: uint16(25172), + 84: uint16(25170), + 85: uint16(25169), + 86: uint16(26021), + 87: uint16(26086), + 88: uint16(26414), + 89: uint16(26412), + 90: uint16(26410), + 91: uint16(26411), + 92: uint16(26413), + 93: uint16(27491), + 94: uint16(27597), + 95: uint16(27665), + 96: uint16(27664), + 97: uint16(27704), + 98: uint16(27713), + 99: uint16(27712), + 100: uint16(27710), + 101: uint16(29359), + 102: uint16(29572), + 103: uint16(29577), + 104: uint16(29916), + 105: uint16(29926), + 106: uint16(29976), + 107: uint16(29983), + 108: uint16(29992), + 109: uint16(29993), + 110: uint16(30000), + 111: uint16(30001), + 112: uint16(30002), + 113: uint16(30003), + 114: uint16(30091), + 115: uint16(30333), + 116: uint16(30382), + 117: uint16(30399), + 118: uint16(30446), + 119: uint16(30683), + 120: uint16(30690), + 121: uint16(30707), + 122: uint16(31034), + 123: uint16(31166), + 124: uint16(31348), + 125: uint16(31435), + 126: uint16(19998), + 127: uint16(19999), + 128: uint16(20050), + 129: uint16(20051), + 130: uint16(20073), + 131: uint16(20121), + 132: uint16(20132), + 133: uint16(20134), + 134: uint16(20133), + 135: uint16(20223), + 136: uint16(20233), + 137: uint16(20249), + 138: uint16(20234), + 139: uint16(20245), + 140: uint16(20237), + 141: uint16(20240), + 142: uint16(20241), + 143: uint16(20239), + 144: uint16(20210), + 145: uint16(20214), + 146: uint16(20219), + 147: uint16(20208), + 148: uint16(20211), + 149: uint16(20221), + 150: uint16(20225), + 151: uint16(20235), + 152: uint16(20809), + 153: uint16(20807), + 154: uint16(20806), + 155: uint16(20808), + 156: uint16(20840), + }, + 5: { + 0: uint16(20849), + 1: uint16(20877), + 2: uint16(20912), + 3: uint16(21015), + 4: uint16(21009), + 5: uint16(21010), + 6: uint16(21006), + 7: uint16(21014), + 8: uint16(21155), + 9: uint16(21256), + 10: uint16(21281), + 11: uint16(21280), + 12: uint16(21360), + 13: uint16(21361), + 14: uint16(21513), + 15: uint16(21519), + 16: uint16(21516), + 17: uint16(21514), + 18: uint16(21520), + 19: uint16(21505), + 20: uint16(21515), + 21: uint16(21508), + 22: uint16(21521), + 23: uint16(21517), + 24: uint16(21512), + 25: uint16(21507), + 26: uint16(21518), + 27: uint16(21510), + 28: uint16(21522), + 29: uint16(22240), + 30: uint16(22238), + 31: uint16(22237), + 32: uint16(22323), + 33: uint16(22320), + 34: uint16(22312), + 35: uint16(22317), + 36: uint16(22316), + 37: uint16(22319), + 38: uint16(22313), + 39: uint16(22809), + 40: uint16(22810), + 41: uint16(22839), + 42: uint16(22840), + 43: uint16(22916), + 44: uint16(22904), + 45: uint16(22915), + 46: uint16(22909), + 47: uint16(22905), + 48: uint16(22914), + 49: uint16(22913), + 50: uint16(23383), + 51: uint16(23384), + 52: uint16(23431), + 53: uint16(23432), + 54: uint16(23429), + 55: uint16(23433), + 56: uint16(23546), + 57: uint16(23574), + 58: uint16(23673), + 59: uint16(24030), + 60: uint16(24070), + 61: uint16(24182), + 62: uint16(24180), + 63: uint16(24335), + 64: uint16(24347), + 65: uint16(24537), + 66: uint16(24534), + 67: uint16(25102), + 68: uint16(25100), + 69: uint16(25101), + 70: uint16(25104), + 71: uint16(25187), + 72: uint16(25179), + 73: uint16(25176), + 74: uint16(25910), + 75: uint16(26089), + 76: uint16(26088), + 77: uint16(26092), + 78: uint16(26093), + 79: uint16(26354), + 80: uint16(26355), + 81: uint16(26377), + 82: uint16(26429), + 83: uint16(26420), + 84: uint16(26417), + 85: uint16(26421), + 86: uint16(27425), + 87: uint16(27492), + 88: uint16(27515), + 89: uint16(27670), + 90: uint16(27741), + 91: uint16(27735), + 92: uint16(27737), + 93: uint16(27743), + 94: uint16(27744), + 95: uint16(27728), + 96: uint16(27733), + 97: uint16(27745), + 98: uint16(27739), + 99: uint16(27725), + 100: uint16(27726), + 101: uint16(28784), + 102: uint16(29279), + 103: uint16(29277), + 104: uint16(30334), + 105: uint16(31481), + 106: uint16(31859), + 107: uint16(31992), + 108: uint16(32566), + 109: uint16(32650), + 110: uint16(32701), + 111: uint16(32769), + 112: uint16(32771), + 113: uint16(32780), + 114: uint16(32786), + 115: uint16(32819), + 116: uint16(32895), + 117: uint16(32905), + 118: uint16(32907), + 119: uint16(32908), + 120: uint16(33251), + 121: uint16(33258), + 122: uint16(33267), + 123: uint16(33276), + 124: uint16(33292), + 125: uint16(33307), + 126: uint16(33311), + 127: uint16(33390), + 128: uint16(33394), + 129: uint16(33406), + 130: uint16(34411), + 131: uint16(34880), + 132: uint16(34892), + 133: uint16(34915), + 134: uint16(35199), + 135: uint16(38433), + 136: uint16(20018), + 137: uint16(20136), + 138: uint16(20301), + 139: uint16(20303), + 140: uint16(20295), + 141: uint16(20311), + 142: uint16(20318), + 143: uint16(20276), + 144: uint16(20315), + 145: uint16(20309), + 146: uint16(20272), + 147: uint16(20304), + 148: uint16(20305), + 149: uint16(20285), + 150: uint16(20282), + 151: uint16(20280), + 152: uint16(20291), + 153: uint16(20308), + 154: uint16(20284), + 155: uint16(20294), + 156: uint16(20323), + }, + 6: { + 0: uint16(20316), + 1: uint16(20320), + 2: uint16(20271), + 3: uint16(20302), + 4: uint16(20278), + 5: uint16(20313), + 6: uint16(20317), + 7: uint16(20296), + 8: uint16(20314), + 9: uint16(20812), + 10: uint16(20811), + 11: uint16(20813), + 12: uint16(20853), + 13: uint16(20918), + 14: uint16(20919), + 15: uint16(21029), + 16: uint16(21028), + 17: uint16(21033), + 18: uint16(21034), + 19: uint16(21032), + 20: uint16(21163), + 21: uint16(21161), + 22: uint16(21162), + 23: uint16(21164), + 24: uint16(21283), + 25: uint16(21363), + 26: uint16(21365), + 27: uint16(21533), + 28: uint16(21549), + 29: uint16(21534), + 30: uint16(21566), + 31: uint16(21542), + 32: uint16(21582), + 33: uint16(21543), + 34: uint16(21574), + 35: uint16(21571), + 36: uint16(21555), + 37: uint16(21576), + 38: uint16(21570), + 39: uint16(21531), + 40: uint16(21545), + 41: uint16(21578), + 42: uint16(21561), + 43: uint16(21563), + 44: uint16(21560), + 45: uint16(21550), + 46: uint16(21557), + 47: uint16(21558), + 48: uint16(21536), + 49: uint16(21564), + 50: uint16(21568), + 51: uint16(21553), + 52: uint16(21547), + 53: uint16(21535), + 54: uint16(21548), + 55: uint16(22250), + 56: uint16(22256), + 57: uint16(22244), + 58: uint16(22251), + 59: uint16(22346), + 60: uint16(22353), + 61: uint16(22336), + 62: uint16(22349), + 63: uint16(22343), + 64: uint16(22350), + 65: uint16(22334), + 66: uint16(22352), + 67: uint16(22351), + 68: uint16(22331), + 69: uint16(22767), + 70: uint16(22846), + 71: uint16(22941), + 72: uint16(22930), + 73: uint16(22952), + 74: uint16(22942), + 75: uint16(22947), + 76: uint16(22937), + 77: uint16(22934), + 78: uint16(22925), + 79: uint16(22948), + 80: uint16(22931), + 81: uint16(22922), + 82: uint16(22949), + 83: uint16(23389), + 84: uint16(23388), + 85: uint16(23386), + 86: uint16(23387), + 87: uint16(23436), + 88: uint16(23435), + 89: uint16(23439), + 90: uint16(23596), + 91: uint16(23616), + 92: uint16(23617), + 93: uint16(23615), + 94: uint16(23614), + 95: uint16(23696), + 96: uint16(23697), + 97: uint16(23700), + 98: uint16(23692), + 99: uint16(24043), + 100: uint16(24076), + 101: uint16(24207), + 102: uint16(24199), + 103: uint16(24202), + 104: uint16(24311), + 105: uint16(24324), + 106: uint16(24351), + 107: uint16(24420), + 108: uint16(24418), + 109: uint16(24439), + 110: uint16(24441), + 111: uint16(24536), + 112: uint16(24524), + 113: uint16(24535), + 114: uint16(24525), + 115: uint16(24561), + 116: uint16(24555), + 117: uint16(24568), + 118: uint16(24554), + 119: uint16(25106), + 120: uint16(25105), + 121: uint16(25220), + 122: uint16(25239), + 123: uint16(25238), + 124: uint16(25216), + 125: uint16(25206), + 126: uint16(25225), + 127: uint16(25197), + 128: uint16(25226), + 129: uint16(25212), + 130: uint16(25214), + 131: uint16(25209), + 132: uint16(25203), + 133: uint16(25234), + 134: uint16(25199), + 135: uint16(25240), + 136: uint16(25198), + 137: uint16(25237), + 138: uint16(25235), + 139: uint16(25233), + 140: uint16(25222), + 141: uint16(25913), + 142: uint16(25915), + 143: uint16(25912), + 144: uint16(26097), + 145: uint16(26356), + 146: uint16(26463), + 147: uint16(26446), + 148: uint16(26447), + 149: uint16(26448), + 150: uint16(26449), + 151: uint16(26460), + 152: uint16(26454), + 153: uint16(26462), + 154: uint16(26441), + 155: uint16(26438), + 156: uint16(26464), + }, + 7: { + 0: uint16(26451), + 1: uint16(26455), + 2: uint16(27493), + 3: uint16(27599), + 4: uint16(27714), + 5: uint16(27742), + 6: uint16(27801), + 7: uint16(27777), + 8: uint16(27784), + 9: uint16(27785), + 10: uint16(27781), + 11: uint16(27803), + 12: uint16(27754), + 13: uint16(27770), + 14: uint16(27792), + 15: uint16(27760), + 16: uint16(27788), + 17: uint16(27752), + 18: uint16(27798), + 19: uint16(27794), + 20: uint16(27773), + 21: uint16(27779), + 22: uint16(27762), + 23: uint16(27774), + 24: uint16(27764), + 25: uint16(27782), + 26: uint16(27766), + 27: uint16(27789), + 28: uint16(27796), + 29: uint16(27800), + 30: uint16(27778), + 31: uint16(28790), + 32: uint16(28796), + 33: uint16(28797), + 34: uint16(28792), + 35: uint16(29282), + 36: uint16(29281), + 37: uint16(29280), + 38: uint16(29380), + 39: uint16(29378), + 40: uint16(29590), + 41: uint16(29996), + 42: uint16(29995), + 43: uint16(30007), + 44: uint16(30008), + 45: uint16(30338), + 46: uint16(30447), + 47: uint16(30691), + 48: uint16(31169), + 49: uint16(31168), + 50: uint16(31167), + 51: uint16(31350), + 52: uint16(31995), + 53: uint16(32597), + 54: uint16(32918), + 55: uint16(32915), + 56: uint16(32925), + 57: uint16(32920), + 58: uint16(32923), + 59: uint16(32922), + 60: uint16(32946), + 61: uint16(33391), + 62: uint16(33426), + 63: uint16(33419), + 64: uint16(33421), + 65: uint16(35211), + 66: uint16(35282), + 67: uint16(35328), + 68: uint16(35895), + 69: uint16(35910), + 70: uint16(35925), + 71: uint16(35997), + 72: uint16(36196), + 73: uint16(36208), + 74: uint16(36275), + 75: uint16(36523), + 76: uint16(36554), + 77: uint16(36763), + 78: uint16(36784), + 79: uint16(36802), + 80: uint16(36806), + 81: uint16(36805), + 82: uint16(36804), + 83: uint16(24033), + 84: uint16(37009), + 85: uint16(37026), + 86: uint16(37034), + 87: uint16(37030), + 88: uint16(37027), + 89: uint16(37193), + 90: uint16(37318), + 91: uint16(37324), + 92: uint16(38450), + 93: uint16(38446), + 94: uint16(38449), + 95: uint16(38442), + 96: uint16(38444), + 97: uint16(20006), + 98: uint16(20054), + 99: uint16(20083), + 100: uint16(20107), + 101: uint16(20123), + 102: uint16(20126), + 103: uint16(20139), + 104: uint16(20140), + 105: uint16(20335), + 106: uint16(20381), + 107: uint16(20365), + 108: uint16(20339), + 109: uint16(20351), + 110: uint16(20332), + 111: uint16(20379), + 112: uint16(20363), + 113: uint16(20358), + 114: uint16(20355), + 115: uint16(20336), + 116: uint16(20341), + 117: uint16(20360), + 118: uint16(20329), + 119: uint16(20347), + 120: uint16(20374), + 121: uint16(20350), + 122: uint16(20367), + 123: uint16(20369), + 124: uint16(20346), + 125: uint16(20820), + 126: uint16(20818), + 127: uint16(20821), + 128: uint16(20841), + 129: uint16(20855), + 130: uint16(20854), + 131: uint16(20856), + 132: uint16(20925), + 133: uint16(20989), + 134: uint16(21051), + 135: uint16(21048), + 136: uint16(21047), + 137: uint16(21050), + 138: uint16(21040), + 139: uint16(21038), + 140: uint16(21046), + 141: uint16(21057), + 142: uint16(21182), + 143: uint16(21179), + 144: uint16(21330), + 145: uint16(21332), + 146: uint16(21331), + 147: uint16(21329), + 148: uint16(21350), + 149: uint16(21367), + 150: uint16(21368), + 151: uint16(21369), + 152: uint16(21462), + 153: uint16(21460), + 154: uint16(21463), + 155: uint16(21619), + 156: uint16(21621), + }, + 8: { + 0: uint16(21654), + 1: uint16(21624), + 2: uint16(21653), + 3: uint16(21632), + 4: uint16(21627), + 5: uint16(21623), + 6: uint16(21636), + 7: uint16(21650), + 8: uint16(21638), + 9: uint16(21628), + 10: uint16(21648), + 11: uint16(21617), + 12: uint16(21622), + 13: uint16(21644), + 14: uint16(21658), + 15: uint16(21602), + 16: uint16(21608), + 17: uint16(21643), + 18: uint16(21629), + 19: uint16(21646), + 20: uint16(22266), + 21: uint16(22403), + 22: uint16(22391), + 23: uint16(22378), + 24: uint16(22377), + 25: uint16(22369), + 26: uint16(22374), + 27: uint16(22372), + 28: uint16(22396), + 29: uint16(22812), + 30: uint16(22857), + 31: uint16(22855), + 32: uint16(22856), + 33: uint16(22852), + 34: uint16(22868), + 35: uint16(22974), + 36: uint16(22971), + 37: uint16(22996), + 38: uint16(22969), + 39: uint16(22958), + 40: uint16(22993), + 41: uint16(22982), + 42: uint16(22992), + 43: uint16(22989), + 44: uint16(22987), + 45: uint16(22995), + 46: uint16(22986), + 47: uint16(22959), + 48: uint16(22963), + 49: uint16(22994), + 50: uint16(22981), + 51: uint16(23391), + 52: uint16(23396), + 53: uint16(23395), + 54: uint16(23447), + 55: uint16(23450), + 56: uint16(23448), + 57: uint16(23452), + 58: uint16(23449), + 59: uint16(23451), + 60: uint16(23578), + 61: uint16(23624), + 62: uint16(23621), + 63: uint16(23622), + 64: uint16(23735), + 65: uint16(23713), + 66: uint16(23736), + 67: uint16(23721), + 68: uint16(23723), + 69: uint16(23729), + 70: uint16(23731), + 71: uint16(24088), + 72: uint16(24090), + 73: uint16(24086), + 74: uint16(24085), + 75: uint16(24091), + 76: uint16(24081), + 77: uint16(24184), + 78: uint16(24218), + 79: uint16(24215), + 80: uint16(24220), + 81: uint16(24213), + 82: uint16(24214), + 83: uint16(24310), + 84: uint16(24358), + 85: uint16(24359), + 86: uint16(24361), + 87: uint16(24448), + 88: uint16(24449), + 89: uint16(24447), + 90: uint16(24444), + 91: uint16(24541), + 92: uint16(24544), + 93: uint16(24573), + 94: uint16(24565), + 95: uint16(24575), + 96: uint16(24591), + 97: uint16(24596), + 98: uint16(24623), + 99: uint16(24629), + 100: uint16(24598), + 101: uint16(24618), + 102: uint16(24597), + 103: uint16(24609), + 104: uint16(24615), + 105: uint16(24617), + 106: uint16(24619), + 107: uint16(24603), + 108: uint16(25110), + 109: uint16(25109), + 110: uint16(25151), + 111: uint16(25150), + 112: uint16(25152), + 113: uint16(25215), + 114: uint16(25289), + 115: uint16(25292), + 116: uint16(25284), + 117: uint16(25279), + 118: uint16(25282), + 119: uint16(25273), + 120: uint16(25298), + 121: uint16(25307), + 122: uint16(25259), + 123: uint16(25299), + 124: uint16(25300), + 125: uint16(25291), + 126: uint16(25288), + 127: uint16(25256), + 128: uint16(25277), + 129: uint16(25276), + 130: uint16(25296), + 131: uint16(25305), + 132: uint16(25287), + 133: uint16(25293), + 134: uint16(25269), + 135: uint16(25306), + 136: uint16(25265), + 137: uint16(25304), + 138: uint16(25302), + 139: uint16(25303), + 140: uint16(25286), + 141: uint16(25260), + 142: uint16(25294), + 143: uint16(25918), + 144: uint16(26023), + 145: uint16(26044), + 146: uint16(26106), + 147: uint16(26132), + 148: uint16(26131), + 149: uint16(26124), + 150: uint16(26118), + 151: uint16(26114), + 152: uint16(26126), + 153: uint16(26112), + 154: uint16(26127), + 155: uint16(26133), + 156: uint16(26122), + }, + 9: { + 0: uint16(26119), + 1: uint16(26381), + 2: uint16(26379), + 3: uint16(26477), + 4: uint16(26507), + 5: uint16(26517), + 6: uint16(26481), + 7: uint16(26524), + 8: uint16(26483), + 9: uint16(26487), + 10: uint16(26503), + 11: uint16(26525), + 12: uint16(26519), + 13: uint16(26479), + 14: uint16(26480), + 15: uint16(26495), + 16: uint16(26505), + 17: uint16(26494), + 18: uint16(26512), + 19: uint16(26485), + 20: uint16(26522), + 21: uint16(26515), + 22: uint16(26492), + 23: uint16(26474), + 24: uint16(26482), + 25: uint16(27427), + 26: uint16(27494), + 27: uint16(27495), + 28: uint16(27519), + 29: uint16(27667), + 30: uint16(27675), + 31: uint16(27875), + 32: uint16(27880), + 33: uint16(27891), + 34: uint16(27825), + 35: uint16(27852), + 36: uint16(27877), + 37: uint16(27827), + 38: uint16(27837), + 39: uint16(27838), + 40: uint16(27836), + 41: uint16(27874), + 42: uint16(27819), + 43: uint16(27861), + 44: uint16(27859), + 45: uint16(27832), + 46: uint16(27844), + 47: uint16(27833), + 48: uint16(27841), + 49: uint16(27822), + 50: uint16(27863), + 51: uint16(27845), + 52: uint16(27889), + 53: uint16(27839), + 54: uint16(27835), + 55: uint16(27873), + 56: uint16(27867), + 57: uint16(27850), + 58: uint16(27820), + 59: uint16(27887), + 60: uint16(27868), + 61: uint16(27862), + 62: uint16(27872), + 63: uint16(28821), + 64: uint16(28814), + 65: uint16(28818), + 66: uint16(28810), + 67: uint16(28825), + 68: uint16(29228), + 69: uint16(29229), + 70: uint16(29240), + 71: uint16(29256), + 72: uint16(29287), + 73: uint16(29289), + 74: uint16(29376), + 75: uint16(29390), + 76: uint16(29401), + 77: uint16(29399), + 78: uint16(29392), + 79: uint16(29609), + 80: uint16(29608), + 81: uint16(29599), + 82: uint16(29611), + 83: uint16(29605), + 84: uint16(30013), + 85: uint16(30109), + 86: uint16(30105), + 87: uint16(30106), + 88: uint16(30340), + 89: uint16(30402), + 90: uint16(30450), + 91: uint16(30452), + 92: uint16(30693), + 93: uint16(30717), + 94: uint16(31038), + 95: uint16(31040), + 96: uint16(31041), + 97: uint16(31177), + 98: uint16(31176), + 99: uint16(31354), + 100: uint16(31353), + 101: uint16(31482), + 102: uint16(31998), + 103: uint16(32596), + 104: uint16(32652), + 105: uint16(32651), + 106: uint16(32773), + 107: uint16(32954), + 108: uint16(32933), + 109: uint16(32930), + 110: uint16(32945), + 111: uint16(32929), + 112: uint16(32939), + 113: uint16(32937), + 114: uint16(32948), + 115: uint16(32938), + 116: uint16(32943), + 117: uint16(33253), + 118: uint16(33278), + 119: uint16(33293), + 120: uint16(33459), + 121: uint16(33437), + 122: uint16(33433), + 123: uint16(33453), + 124: uint16(33469), + 125: uint16(33439), + 126: uint16(33465), + 127: uint16(33457), + 128: uint16(33452), + 129: uint16(33445), + 130: uint16(33455), + 131: uint16(33464), + 132: uint16(33443), + 133: uint16(33456), + 134: uint16(33470), + 135: uint16(33463), + 136: uint16(34382), + 137: uint16(34417), + 138: uint16(21021), + 139: uint16(34920), + 140: uint16(36555), + 141: uint16(36814), + 142: uint16(36820), + 143: uint16(36817), + 144: uint16(37045), + 145: uint16(37048), + 146: uint16(37041), + 147: uint16(37046), + 148: uint16(37319), + 149: uint16(37329), + 150: uint16(38263), + 151: uint16(38272), + 152: uint16(38428), + 153: uint16(38464), + 154: uint16(38463), + 155: uint16(38459), + 156: uint16(38468), + }, + 10: { + 0: uint16(38466), + 1: uint16(38585), + 2: uint16(38632), + 3: uint16(38738), + 4: uint16(38750), + 5: uint16(20127), + 6: uint16(20141), + 7: uint16(20142), + 8: uint16(20449), + 9: uint16(20405), + 10: uint16(20399), + 11: uint16(20415), + 12: uint16(20448), + 13: uint16(20433), + 14: uint16(20431), + 15: uint16(20445), + 16: uint16(20419), + 17: uint16(20406), + 18: uint16(20440), + 19: uint16(20447), + 20: uint16(20426), + 21: uint16(20439), + 22: uint16(20398), + 23: uint16(20432), + 24: uint16(20420), + 25: uint16(20418), + 26: uint16(20442), + 27: uint16(20430), + 28: uint16(20446), + 29: uint16(20407), + 30: uint16(20823), + 31: uint16(20882), + 32: uint16(20881), + 33: uint16(20896), + 34: uint16(21070), + 35: uint16(21059), + 36: uint16(21066), + 37: uint16(21069), + 38: uint16(21068), + 39: uint16(21067), + 40: uint16(21063), + 41: uint16(21191), + 42: uint16(21193), + 43: uint16(21187), + 44: uint16(21185), + 45: uint16(21261), + 46: uint16(21335), + 47: uint16(21371), + 48: uint16(21402), + 49: uint16(21467), + 50: uint16(21676), + 51: uint16(21696), + 52: uint16(21672), + 53: uint16(21710), + 54: uint16(21705), + 55: uint16(21688), + 56: uint16(21670), + 57: uint16(21683), + 58: uint16(21703), + 59: uint16(21698), + 60: uint16(21693), + 61: uint16(21674), + 62: uint16(21697), + 63: uint16(21700), + 64: uint16(21704), + 65: uint16(21679), + 66: uint16(21675), + 67: uint16(21681), + 68: uint16(21691), + 69: uint16(21673), + 70: uint16(21671), + 71: uint16(21695), + 72: uint16(22271), + 73: uint16(22402), + 74: uint16(22411), + 75: uint16(22432), + 76: uint16(22435), + 77: uint16(22434), + 78: uint16(22478), + 79: uint16(22446), + 80: uint16(22419), + 81: uint16(22869), + 82: uint16(22865), + 83: uint16(22863), + 84: uint16(22862), + 85: uint16(22864), + 86: uint16(23004), + 87: uint16(23000), + 88: uint16(23039), + 89: uint16(23011), + 90: uint16(23016), + 91: uint16(23043), + 92: uint16(23013), + 93: uint16(23018), + 94: uint16(23002), + 95: uint16(23014), + 96: uint16(23041), + 97: uint16(23035), + 98: uint16(23401), + 99: uint16(23459), + 100: uint16(23462), + 101: uint16(23460), + 102: uint16(23458), + 103: uint16(23461), + 104: uint16(23553), + 105: uint16(23630), + 106: uint16(23631), + 107: uint16(23629), + 108: uint16(23627), + 109: uint16(23769), + 110: uint16(23762), + 111: uint16(24055), + 112: uint16(24093), + 113: uint16(24101), + 114: uint16(24095), + 115: uint16(24189), + 116: uint16(24224), + 117: uint16(24230), + 118: uint16(24314), + 119: uint16(24328), + 120: uint16(24365), + 121: uint16(24421), + 122: uint16(24456), + 123: uint16(24453), + 124: uint16(24458), + 125: uint16(24459), + 126: uint16(24455), + 127: uint16(24460), + 128: uint16(24457), + 129: uint16(24594), + 130: uint16(24605), + 131: uint16(24608), + 132: uint16(24613), + 133: uint16(24590), + 134: uint16(24616), + 135: uint16(24653), + 136: uint16(24688), + 137: uint16(24680), + 138: uint16(24674), + 139: uint16(24646), + 140: uint16(24643), + 141: uint16(24684), + 142: uint16(24683), + 143: uint16(24682), + 144: uint16(24676), + 145: uint16(25153), + 146: uint16(25308), + 147: uint16(25366), + 148: uint16(25353), + 149: uint16(25340), + 150: uint16(25325), + 151: uint16(25345), + 152: uint16(25326), + 153: uint16(25341), + 154: uint16(25351), + 155: uint16(25329), + 156: uint16(25335), + }, + 11: { + 0: uint16(25327), + 1: uint16(25324), + 2: uint16(25342), + 3: uint16(25332), + 4: uint16(25361), + 5: uint16(25346), + 6: uint16(25919), + 7: uint16(25925), + 8: uint16(26027), + 9: uint16(26045), + 10: uint16(26082), + 11: uint16(26149), + 12: uint16(26157), + 13: uint16(26144), + 14: uint16(26151), + 15: uint16(26159), + 16: uint16(26143), + 17: uint16(26152), + 18: uint16(26161), + 19: uint16(26148), + 20: uint16(26359), + 21: uint16(26623), + 22: uint16(26579), + 23: uint16(26609), + 24: uint16(26580), + 25: uint16(26576), + 26: uint16(26604), + 27: uint16(26550), + 28: uint16(26543), + 29: uint16(26613), + 30: uint16(26601), + 31: uint16(26607), + 32: uint16(26564), + 33: uint16(26577), + 34: uint16(26548), + 35: uint16(26586), + 36: uint16(26597), + 37: uint16(26552), + 38: uint16(26575), + 39: uint16(26590), + 40: uint16(26611), + 41: uint16(26544), + 42: uint16(26585), + 43: uint16(26594), + 44: uint16(26589), + 45: uint16(26578), + 46: uint16(27498), + 47: uint16(27523), + 48: uint16(27526), + 49: uint16(27573), + 50: uint16(27602), + 51: uint16(27607), + 52: uint16(27679), + 53: uint16(27849), + 54: uint16(27915), + 55: uint16(27954), + 56: uint16(27946), + 57: uint16(27969), + 58: uint16(27941), + 59: uint16(27916), + 60: uint16(27953), + 61: uint16(27934), + 62: uint16(27927), + 63: uint16(27963), + 64: uint16(27965), + 65: uint16(27966), + 66: uint16(27958), + 67: uint16(27931), + 68: uint16(27893), + 69: uint16(27961), + 70: uint16(27943), + 71: uint16(27960), + 72: uint16(27945), + 73: uint16(27950), + 74: uint16(27957), + 75: uint16(27918), + 76: uint16(27947), + 77: uint16(28843), + 78: uint16(28858), + 79: uint16(28851), + 80: uint16(28844), + 81: uint16(28847), + 82: uint16(28845), + 83: uint16(28856), + 84: uint16(28846), + 85: uint16(28836), + 86: uint16(29232), + 87: uint16(29298), + 88: uint16(29295), + 89: uint16(29300), + 90: uint16(29417), + 91: uint16(29408), + 92: uint16(29409), + 93: uint16(29623), + 94: uint16(29642), + 95: uint16(29627), + 96: uint16(29618), + 97: uint16(29645), + 98: uint16(29632), + 99: uint16(29619), + 100: uint16(29978), + 101: uint16(29997), + 102: uint16(30031), + 103: uint16(30028), + 104: uint16(30030), + 105: uint16(30027), + 106: uint16(30123), + 107: uint16(30116), + 108: uint16(30117), + 109: uint16(30114), + 110: uint16(30115), + 111: uint16(30328), + 112: uint16(30342), + 113: uint16(30343), + 114: uint16(30344), + 115: uint16(30408), + 116: uint16(30406), + 117: uint16(30403), + 118: uint16(30405), + 119: uint16(30465), + 120: uint16(30457), + 121: uint16(30456), + 122: uint16(30473), + 123: uint16(30475), + 124: uint16(30462), + 125: uint16(30460), + 126: uint16(30471), + 127: uint16(30684), + 128: uint16(30722), + 129: uint16(30740), + 130: uint16(30732), + 131: uint16(30733), + 132: uint16(31046), + 133: uint16(31049), + 134: uint16(31048), + 135: uint16(31047), + 136: uint16(31161), + 137: uint16(31162), + 138: uint16(31185), + 139: uint16(31186), + 140: uint16(31179), + 141: uint16(31359), + 142: uint16(31361), + 143: uint16(31487), + 144: uint16(31485), + 145: uint16(31869), + 146: uint16(32002), + 147: uint16(32005), + 148: uint16(32000), + 149: uint16(32009), + 150: uint16(32007), + 151: uint16(32004), + 152: uint16(32006), + 153: uint16(32568), + 154: uint16(32654), + 155: uint16(32703), + 156: uint16(32772), + }, + 12: { + 0: uint16(32784), + 1: uint16(32781), + 2: uint16(32785), + 3: uint16(32822), + 4: uint16(32982), + 5: uint16(32997), + 6: uint16(32986), + 7: uint16(32963), + 8: uint16(32964), + 9: uint16(32972), + 10: uint16(32993), + 11: uint16(32987), + 12: uint16(32974), + 13: uint16(32990), + 14: uint16(32996), + 15: uint16(32989), + 16: uint16(33268), + 17: uint16(33314), + 18: uint16(33511), + 19: uint16(33539), + 20: uint16(33541), + 21: uint16(33507), + 22: uint16(33499), + 23: uint16(33510), + 24: uint16(33540), + 25: uint16(33509), + 26: uint16(33538), + 27: uint16(33545), + 28: uint16(33490), + 29: uint16(33495), + 30: uint16(33521), + 31: uint16(33537), + 32: uint16(33500), + 33: uint16(33492), + 34: uint16(33489), + 35: uint16(33502), + 36: uint16(33491), + 37: uint16(33503), + 38: uint16(33519), + 39: uint16(33542), + 40: uint16(34384), + 41: uint16(34425), + 42: uint16(34427), + 43: uint16(34426), + 44: uint16(34893), + 45: uint16(34923), + 46: uint16(35201), + 47: uint16(35284), + 48: uint16(35336), + 49: uint16(35330), + 50: uint16(35331), + 51: uint16(35998), + 52: uint16(36000), + 53: uint16(36212), + 54: uint16(36211), + 55: uint16(36276), + 56: uint16(36557), + 57: uint16(36556), + 58: uint16(36848), + 59: uint16(36838), + 60: uint16(36834), + 61: uint16(36842), + 62: uint16(36837), + 63: uint16(36845), + 64: uint16(36843), + 65: uint16(36836), + 66: uint16(36840), + 67: uint16(37066), + 68: uint16(37070), + 69: uint16(37057), + 70: uint16(37059), + 71: uint16(37195), + 72: uint16(37194), + 73: uint16(37325), + 74: uint16(38274), + 75: uint16(38480), + 76: uint16(38475), + 77: uint16(38476), + 78: uint16(38477), + 79: uint16(38754), + 80: uint16(38761), + 81: uint16(38859), + 82: uint16(38893), + 83: uint16(38899), + 84: uint16(38913), + 85: uint16(39080), + 86: uint16(39131), + 87: uint16(39135), + 88: uint16(39318), + 89: uint16(39321), + 90: uint16(20056), + 91: uint16(20147), + 92: uint16(20492), + 93: uint16(20493), + 94: uint16(20515), + 95: uint16(20463), + 96: uint16(20518), + 97: uint16(20517), + 98: uint16(20472), + 99: uint16(20521), + 100: uint16(20502), + 101: uint16(20486), + 102: uint16(20540), + 103: uint16(20511), + 104: uint16(20506), + 105: uint16(20498), + 106: uint16(20497), + 107: uint16(20474), + 108: uint16(20480), + 109: uint16(20500), + 110: uint16(20520), + 111: uint16(20465), + 112: uint16(20513), + 113: uint16(20491), + 114: uint16(20505), + 115: uint16(20504), + 116: uint16(20467), + 117: uint16(20462), + 118: uint16(20525), + 119: uint16(20522), + 120: uint16(20478), + 121: uint16(20523), + 122: uint16(20489), + 123: uint16(20860), + 124: uint16(20900), + 125: uint16(20901), + 126: uint16(20898), + 127: uint16(20941), + 128: uint16(20940), + 129: uint16(20934), + 130: uint16(20939), + 131: uint16(21078), + 132: uint16(21084), + 133: uint16(21076), + 134: uint16(21083), + 135: uint16(21085), + 136: uint16(21290), + 137: uint16(21375), + 138: uint16(21407), + 139: uint16(21405), + 140: uint16(21471), + 141: uint16(21736), + 142: uint16(21776), + 143: uint16(21761), + 144: uint16(21815), + 145: uint16(21756), + 146: uint16(21733), + 147: uint16(21746), + 148: uint16(21766), + 149: uint16(21754), + 150: uint16(21780), + 151: uint16(21737), + 152: uint16(21741), + 153: uint16(21729), + 154: uint16(21769), + 155: uint16(21742), + 156: uint16(21738), + }, + 13: { + 0: uint16(21734), + 1: uint16(21799), + 2: uint16(21767), + 3: uint16(21757), + 4: uint16(21775), + 5: uint16(22275), + 6: uint16(22276), + 7: uint16(22466), + 8: uint16(22484), + 9: uint16(22475), + 10: uint16(22467), + 11: uint16(22537), + 12: uint16(22799), + 13: uint16(22871), + 14: uint16(22872), + 15: uint16(22874), + 16: uint16(23057), + 17: uint16(23064), + 18: uint16(23068), + 19: uint16(23071), + 20: uint16(23067), + 21: uint16(23059), + 22: uint16(23020), + 23: uint16(23072), + 24: uint16(23075), + 25: uint16(23081), + 26: uint16(23077), + 27: uint16(23052), + 28: uint16(23049), + 29: uint16(23403), + 30: uint16(23640), + 31: uint16(23472), + 32: uint16(23475), + 33: uint16(23478), + 34: uint16(23476), + 35: uint16(23470), + 36: uint16(23477), + 37: uint16(23481), + 38: uint16(23480), + 39: uint16(23556), + 40: uint16(23633), + 41: uint16(23637), + 42: uint16(23632), + 43: uint16(23789), + 44: uint16(23805), + 45: uint16(23803), + 46: uint16(23786), + 47: uint16(23784), + 48: uint16(23792), + 49: uint16(23798), + 50: uint16(23809), + 51: uint16(23796), + 52: uint16(24046), + 53: uint16(24109), + 54: uint16(24107), + 55: uint16(24235), + 56: uint16(24237), + 57: uint16(24231), + 58: uint16(24369), + 59: uint16(24466), + 60: uint16(24465), + 61: uint16(24464), + 62: uint16(24665), + 63: uint16(24675), + 64: uint16(24677), + 65: uint16(24656), + 66: uint16(24661), + 67: uint16(24685), + 68: uint16(24681), + 69: uint16(24687), + 70: uint16(24708), + 71: uint16(24735), + 72: uint16(24730), + 73: uint16(24717), + 74: uint16(24724), + 75: uint16(24716), + 76: uint16(24709), + 77: uint16(24726), + 78: uint16(25159), + 79: uint16(25331), + 80: uint16(25352), + 81: uint16(25343), + 82: uint16(25422), + 83: uint16(25406), + 84: uint16(25391), + 85: uint16(25429), + 86: uint16(25410), + 87: uint16(25414), + 88: uint16(25423), + 89: uint16(25417), + 90: uint16(25402), + 91: uint16(25424), + 92: uint16(25405), + 93: uint16(25386), + 94: uint16(25387), + 95: uint16(25384), + 96: uint16(25421), + 97: uint16(25420), + 98: uint16(25928), + 99: uint16(25929), + 100: uint16(26009), + 101: uint16(26049), + 102: uint16(26053), + 103: uint16(26178), + 104: uint16(26185), + 105: uint16(26191), + 106: uint16(26179), + 107: uint16(26194), + 108: uint16(26188), + 109: uint16(26181), + 110: uint16(26177), + 111: uint16(26360), + 112: uint16(26388), + 113: uint16(26389), + 114: uint16(26391), + 115: uint16(26657), + 116: uint16(26680), + 117: uint16(26696), + 118: uint16(26694), + 119: uint16(26707), + 120: uint16(26681), + 121: uint16(26690), + 122: uint16(26708), + 123: uint16(26665), + 124: uint16(26803), + 125: uint16(26647), + 126: uint16(26700), + 127: uint16(26705), + 128: uint16(26685), + 129: uint16(26612), + 130: uint16(26704), + 131: uint16(26688), + 132: uint16(26684), + 133: uint16(26691), + 134: uint16(26666), + 135: uint16(26693), + 136: uint16(26643), + 137: uint16(26648), + 138: uint16(26689), + 139: uint16(27530), + 140: uint16(27529), + 141: uint16(27575), + 142: uint16(27683), + 143: uint16(27687), + 144: uint16(27688), + 145: uint16(27686), + 146: uint16(27684), + 147: uint16(27888), + 148: uint16(28010), + 149: uint16(28053), + 150: uint16(28040), + 151: uint16(28039), + 152: uint16(28006), + 153: uint16(28024), + 154: uint16(28023), + 155: uint16(27993), + 156: uint16(28051), + }, + 14: { + 0: uint16(28012), + 1: uint16(28041), + 2: uint16(28014), + 3: uint16(27994), + 4: uint16(28020), + 5: uint16(28009), + 6: uint16(28044), + 7: uint16(28042), + 8: uint16(28025), + 9: uint16(28037), + 10: uint16(28005), + 11: uint16(28052), + 12: uint16(28874), + 13: uint16(28888), + 14: uint16(28900), + 15: uint16(28889), + 16: uint16(28872), + 17: uint16(28879), + 18: uint16(29241), + 19: uint16(29305), + 20: uint16(29436), + 21: uint16(29433), + 22: uint16(29437), + 23: uint16(29432), + 24: uint16(29431), + 25: uint16(29574), + 26: uint16(29677), + 27: uint16(29705), + 28: uint16(29678), + 29: uint16(29664), + 30: uint16(29674), + 31: uint16(29662), + 32: uint16(30036), + 33: uint16(30045), + 34: uint16(30044), + 35: uint16(30042), + 36: uint16(30041), + 37: uint16(30142), + 38: uint16(30149), + 39: uint16(30151), + 40: uint16(30130), + 41: uint16(30131), + 42: uint16(30141), + 43: uint16(30140), + 44: uint16(30137), + 45: uint16(30146), + 46: uint16(30136), + 47: uint16(30347), + 48: uint16(30384), + 49: uint16(30410), + 50: uint16(30413), + 51: uint16(30414), + 52: uint16(30505), + 53: uint16(30495), + 54: uint16(30496), + 55: uint16(30504), + 56: uint16(30697), + 57: uint16(30768), + 58: uint16(30759), + 59: uint16(30776), + 60: uint16(30749), + 61: uint16(30772), + 62: uint16(30775), + 63: uint16(30757), + 64: uint16(30765), + 65: uint16(30752), + 66: uint16(30751), + 67: uint16(30770), + 68: uint16(31061), + 69: uint16(31056), + 70: uint16(31072), + 71: uint16(31071), + 72: uint16(31062), + 73: uint16(31070), + 74: uint16(31069), + 75: uint16(31063), + 76: uint16(31066), + 77: uint16(31204), + 78: uint16(31203), + 79: uint16(31207), + 80: uint16(31199), + 81: uint16(31206), + 82: uint16(31209), + 83: uint16(31192), + 84: uint16(31364), + 85: uint16(31368), + 86: uint16(31449), + 87: uint16(31494), + 88: uint16(31505), + 89: uint16(31881), + 90: uint16(32033), + 91: uint16(32023), + 92: uint16(32011), + 93: uint16(32010), + 94: uint16(32032), + 95: uint16(32034), + 96: uint16(32020), + 97: uint16(32016), + 98: uint16(32021), + 99: uint16(32026), + 100: uint16(32028), + 101: uint16(32013), + 102: uint16(32025), + 103: uint16(32027), + 104: uint16(32570), + 105: uint16(32607), + 106: uint16(32660), + 107: uint16(32709), + 108: uint16(32705), + 109: uint16(32774), + 110: uint16(32792), + 111: uint16(32789), + 112: uint16(32793), + 113: uint16(32791), + 114: uint16(32829), + 115: uint16(32831), + 116: uint16(33009), + 117: uint16(33026), + 118: uint16(33008), + 119: uint16(33029), + 120: uint16(33005), + 121: uint16(33012), + 122: uint16(33030), + 123: uint16(33016), + 124: uint16(33011), + 125: uint16(33032), + 126: uint16(33021), + 127: uint16(33034), + 128: uint16(33020), + 129: uint16(33007), + 130: uint16(33261), + 131: uint16(33260), + 132: uint16(33280), + 133: uint16(33296), + 134: uint16(33322), + 135: uint16(33323), + 136: uint16(33320), + 137: uint16(33324), + 138: uint16(33467), + 139: uint16(33579), + 140: uint16(33618), + 141: uint16(33620), + 142: uint16(33610), + 143: uint16(33592), + 144: uint16(33616), + 145: uint16(33609), + 146: uint16(33589), + 147: uint16(33588), + 148: uint16(33615), + 149: uint16(33586), + 150: uint16(33593), + 151: uint16(33590), + 152: uint16(33559), + 153: uint16(33600), + 154: uint16(33585), + 155: uint16(33576), + 156: uint16(33603), + }, + 15: { + 0: uint16(34388), + 1: uint16(34442), + 2: uint16(34474), + 3: uint16(34451), + 4: uint16(34468), + 5: uint16(34473), + 6: uint16(34444), + 7: uint16(34467), + 8: uint16(34460), + 9: uint16(34928), + 10: uint16(34935), + 11: uint16(34945), + 12: uint16(34946), + 13: uint16(34941), + 14: uint16(34937), + 15: uint16(35352), + 16: uint16(35344), + 17: uint16(35342), + 18: uint16(35340), + 19: uint16(35349), + 20: uint16(35338), + 21: uint16(35351), + 22: uint16(35347), + 23: uint16(35350), + 24: uint16(35343), + 25: uint16(35345), + 26: uint16(35912), + 27: uint16(35962), + 28: uint16(35961), + 29: uint16(36001), + 30: uint16(36002), + 31: uint16(36215), + 32: uint16(36524), + 33: uint16(36562), + 34: uint16(36564), + 35: uint16(36559), + 36: uint16(36785), + 37: uint16(36865), + 38: uint16(36870), + 39: uint16(36855), + 40: uint16(36864), + 41: uint16(36858), + 42: uint16(36852), + 43: uint16(36867), + 44: uint16(36861), + 45: uint16(36869), + 46: uint16(36856), + 47: uint16(37013), + 48: uint16(37089), + 49: uint16(37085), + 50: uint16(37090), + 51: uint16(37202), + 52: uint16(37197), + 53: uint16(37196), + 54: uint16(37336), + 55: uint16(37341), + 56: uint16(37335), + 57: uint16(37340), + 58: uint16(37337), + 59: uint16(38275), + 60: uint16(38498), + 61: uint16(38499), + 62: uint16(38497), + 63: uint16(38491), + 64: uint16(38493), + 65: uint16(38500), + 66: uint16(38488), + 67: uint16(38494), + 68: uint16(38587), + 69: uint16(39138), + 70: uint16(39340), + 71: uint16(39592), + 72: uint16(39640), + 73: uint16(39717), + 74: uint16(39730), + 75: uint16(39740), + 76: uint16(20094), + 77: uint16(20602), + 78: uint16(20605), + 79: uint16(20572), + 80: uint16(20551), + 81: uint16(20547), + 82: uint16(20556), + 83: uint16(20570), + 84: uint16(20553), + 85: uint16(20581), + 86: uint16(20598), + 87: uint16(20558), + 88: uint16(20565), + 89: uint16(20597), + 90: uint16(20596), + 91: uint16(20599), + 92: uint16(20559), + 93: uint16(20495), + 94: uint16(20591), + 95: uint16(20589), + 96: uint16(20828), + 97: uint16(20885), + 98: uint16(20976), + 99: uint16(21098), + 100: uint16(21103), + 101: uint16(21202), + 102: uint16(21209), + 103: uint16(21208), + 104: uint16(21205), + 105: uint16(21264), + 106: uint16(21263), + 107: uint16(21273), + 108: uint16(21311), + 109: uint16(21312), + 110: uint16(21310), + 111: uint16(21443), + 112: uint16(26364), + 113: uint16(21830), + 114: uint16(21866), + 115: uint16(21862), + 116: uint16(21828), + 117: uint16(21854), + 118: uint16(21857), + 119: uint16(21827), + 120: uint16(21834), + 121: uint16(21809), + 122: uint16(21846), + 123: uint16(21839), + 124: uint16(21845), + 125: uint16(21807), + 126: uint16(21860), + 127: uint16(21816), + 128: uint16(21806), + 129: uint16(21852), + 130: uint16(21804), + 131: uint16(21859), + 132: uint16(21811), + 133: uint16(21825), + 134: uint16(21847), + 135: uint16(22280), + 136: uint16(22283), + 137: uint16(22281), + 138: uint16(22495), + 139: uint16(22533), + 140: uint16(22538), + 141: uint16(22534), + 142: uint16(22496), + 143: uint16(22500), + 144: uint16(22522), + 145: uint16(22530), + 146: uint16(22581), + 147: uint16(22519), + 148: uint16(22521), + 149: uint16(22816), + 150: uint16(22882), + 151: uint16(23094), + 152: uint16(23105), + 153: uint16(23113), + 154: uint16(23142), + 155: uint16(23146), + 156: uint16(23104), + }, + 16: { + 0: uint16(23100), + 1: uint16(23138), + 2: uint16(23130), + 3: uint16(23110), + 4: uint16(23114), + 5: uint16(23408), + 6: uint16(23495), + 7: uint16(23493), + 8: uint16(23492), + 9: uint16(23490), + 10: uint16(23487), + 11: uint16(23494), + 12: uint16(23561), + 13: uint16(23560), + 14: uint16(23559), + 15: uint16(23648), + 16: uint16(23644), + 17: uint16(23645), + 18: uint16(23815), + 19: uint16(23814), + 20: uint16(23822), + 21: uint16(23835), + 22: uint16(23830), + 23: uint16(23842), + 24: uint16(23825), + 25: uint16(23849), + 26: uint16(23828), + 27: uint16(23833), + 28: uint16(23844), + 29: uint16(23847), + 30: uint16(23831), + 31: uint16(24034), + 32: uint16(24120), + 33: uint16(24118), + 34: uint16(24115), + 35: uint16(24119), + 36: uint16(24247), + 37: uint16(24248), + 38: uint16(24246), + 39: uint16(24245), + 40: uint16(24254), + 41: uint16(24373), + 42: uint16(24375), + 43: uint16(24407), + 44: uint16(24428), + 45: uint16(24425), + 46: uint16(24427), + 47: uint16(24471), + 48: uint16(24473), + 49: uint16(24478), + 50: uint16(24472), + 51: uint16(24481), + 52: uint16(24480), + 53: uint16(24476), + 54: uint16(24703), + 55: uint16(24739), + 56: uint16(24713), + 57: uint16(24736), + 58: uint16(24744), + 59: uint16(24779), + 60: uint16(24756), + 61: uint16(24806), + 62: uint16(24765), + 63: uint16(24773), + 64: uint16(24763), + 65: uint16(24757), + 66: uint16(24796), + 67: uint16(24764), + 68: uint16(24792), + 69: uint16(24789), + 70: uint16(24774), + 71: uint16(24799), + 72: uint16(24760), + 73: uint16(24794), + 74: uint16(24775), + 75: uint16(25114), + 76: uint16(25115), + 77: uint16(25160), + 78: uint16(25504), + 79: uint16(25511), + 80: uint16(25458), + 81: uint16(25494), + 82: uint16(25506), + 83: uint16(25509), + 84: uint16(25463), + 85: uint16(25447), + 86: uint16(25496), + 87: uint16(25514), + 88: uint16(25457), + 89: uint16(25513), + 90: uint16(25481), + 91: uint16(25475), + 92: uint16(25499), + 93: uint16(25451), + 94: uint16(25512), + 95: uint16(25476), + 96: uint16(25480), + 97: uint16(25497), + 98: uint16(25505), + 99: uint16(25516), + 100: uint16(25490), + 101: uint16(25487), + 102: uint16(25472), + 103: uint16(25467), + 104: uint16(25449), + 105: uint16(25448), + 106: uint16(25466), + 107: uint16(25949), + 108: uint16(25942), + 109: uint16(25937), + 110: uint16(25945), + 111: uint16(25943), + 112: uint16(21855), + 113: uint16(25935), + 114: uint16(25944), + 115: uint16(25941), + 116: uint16(25940), + 117: uint16(26012), + 118: uint16(26011), + 119: uint16(26028), + 120: uint16(26063), + 121: uint16(26059), + 122: uint16(26060), + 123: uint16(26062), + 124: uint16(26205), + 125: uint16(26202), + 126: uint16(26212), + 127: uint16(26216), + 128: uint16(26214), + 129: uint16(26206), + 130: uint16(26361), + 131: uint16(21207), + 132: uint16(26395), + 133: uint16(26753), + 134: uint16(26799), + 135: uint16(26786), + 136: uint16(26771), + 137: uint16(26805), + 138: uint16(26751), + 139: uint16(26742), + 140: uint16(26801), + 141: uint16(26791), + 142: uint16(26775), + 143: uint16(26800), + 144: uint16(26755), + 145: uint16(26820), + 146: uint16(26797), + 147: uint16(26758), + 148: uint16(26757), + 149: uint16(26772), + 150: uint16(26781), + 151: uint16(26792), + 152: uint16(26783), + 153: uint16(26785), + 154: uint16(26754), + 155: uint16(27442), + 156: uint16(27578), + }, + 17: { + 0: uint16(27627), + 1: uint16(27628), + 2: uint16(27691), + 3: uint16(28046), + 4: uint16(28092), + 5: uint16(28147), + 6: uint16(28121), + 7: uint16(28082), + 8: uint16(28129), + 9: uint16(28108), + 10: uint16(28132), + 11: uint16(28155), + 12: uint16(28154), + 13: uint16(28165), + 14: uint16(28103), + 15: uint16(28107), + 16: uint16(28079), + 17: uint16(28113), + 18: uint16(28078), + 19: uint16(28126), + 20: uint16(28153), + 21: uint16(28088), + 22: uint16(28151), + 23: uint16(28149), + 24: uint16(28101), + 25: uint16(28114), + 26: uint16(28186), + 27: uint16(28085), + 28: uint16(28122), + 29: uint16(28139), + 30: uint16(28120), + 31: uint16(28138), + 32: uint16(28145), + 33: uint16(28142), + 34: uint16(28136), + 35: uint16(28102), + 36: uint16(28100), + 37: uint16(28074), + 38: uint16(28140), + 39: uint16(28095), + 40: uint16(28134), + 41: uint16(28921), + 42: uint16(28937), + 43: uint16(28938), + 44: uint16(28925), + 45: uint16(28911), + 46: uint16(29245), + 47: uint16(29309), + 48: uint16(29313), + 49: uint16(29468), + 50: uint16(29467), + 51: uint16(29462), + 52: uint16(29459), + 53: uint16(29465), + 54: uint16(29575), + 55: uint16(29701), + 56: uint16(29706), + 57: uint16(29699), + 58: uint16(29702), + 59: uint16(29694), + 60: uint16(29709), + 61: uint16(29920), + 62: uint16(29942), + 63: uint16(29943), + 64: uint16(29980), + 65: uint16(29986), + 66: uint16(30053), + 67: uint16(30054), + 68: uint16(30050), + 69: uint16(30064), + 70: uint16(30095), + 71: uint16(30164), + 72: uint16(30165), + 73: uint16(30133), + 74: uint16(30154), + 75: uint16(30157), + 76: uint16(30350), + 77: uint16(30420), + 78: uint16(30418), + 79: uint16(30427), + 80: uint16(30519), + 81: uint16(30526), + 82: uint16(30524), + 83: uint16(30518), + 84: uint16(30520), + 85: uint16(30522), + 86: uint16(30827), + 87: uint16(30787), + 88: uint16(30798), + 89: uint16(31077), + 90: uint16(31080), + 91: uint16(31085), + 92: uint16(31227), + 93: uint16(31378), + 94: uint16(31381), + 95: uint16(31520), + 96: uint16(31528), + 97: uint16(31515), + 98: uint16(31532), + 99: uint16(31526), + 100: uint16(31513), + 101: uint16(31518), + 102: uint16(31534), + 103: uint16(31890), + 104: uint16(31895), + 105: uint16(31893), + 106: uint16(32070), + 107: uint16(32067), + 108: uint16(32113), + 109: uint16(32046), + 110: uint16(32057), + 111: uint16(32060), + 112: uint16(32064), + 113: uint16(32048), + 114: uint16(32051), + 115: uint16(32068), + 116: uint16(32047), + 117: uint16(32066), + 118: uint16(32050), + 119: uint16(32049), + 120: uint16(32573), + 121: uint16(32670), + 122: uint16(32666), + 123: uint16(32716), + 124: uint16(32718), + 125: uint16(32722), + 126: uint16(32796), + 127: uint16(32842), + 128: uint16(32838), + 129: uint16(33071), + 130: uint16(33046), + 131: uint16(33059), + 132: uint16(33067), + 133: uint16(33065), + 134: uint16(33072), + 135: uint16(33060), + 136: uint16(33282), + 137: uint16(33333), + 138: uint16(33335), + 139: uint16(33334), + 140: uint16(33337), + 141: uint16(33678), + 142: uint16(33694), + 143: uint16(33688), + 144: uint16(33656), + 145: uint16(33698), + 146: uint16(33686), + 147: uint16(33725), + 148: uint16(33707), + 149: uint16(33682), + 150: uint16(33674), + 151: uint16(33683), + 152: uint16(33673), + 153: uint16(33696), + 154: uint16(33655), + 155: uint16(33659), + 156: uint16(33660), + }, + 18: { + 0: uint16(33670), + 1: uint16(33703), + 2: uint16(34389), + 3: uint16(24426), + 4: uint16(34503), + 5: uint16(34496), + 6: uint16(34486), + 7: uint16(34500), + 8: uint16(34485), + 9: uint16(34502), + 10: uint16(34507), + 11: uint16(34481), + 12: uint16(34479), + 13: uint16(34505), + 14: uint16(34899), + 15: uint16(34974), + 16: uint16(34952), + 17: uint16(34987), + 18: uint16(34962), + 19: uint16(34966), + 20: uint16(34957), + 21: uint16(34955), + 22: uint16(35219), + 23: uint16(35215), + 24: uint16(35370), + 25: uint16(35357), + 26: uint16(35363), + 27: uint16(35365), + 28: uint16(35377), + 29: uint16(35373), + 30: uint16(35359), + 31: uint16(35355), + 32: uint16(35362), + 33: uint16(35913), + 34: uint16(35930), + 35: uint16(36009), + 36: uint16(36012), + 37: uint16(36011), + 38: uint16(36008), + 39: uint16(36010), + 40: uint16(36007), + 41: uint16(36199), + 42: uint16(36198), + 43: uint16(36286), + 44: uint16(36282), + 45: uint16(36571), + 46: uint16(36575), + 47: uint16(36889), + 48: uint16(36877), + 49: uint16(36890), + 50: uint16(36887), + 51: uint16(36899), + 52: uint16(36895), + 53: uint16(36893), + 54: uint16(36880), + 55: uint16(36885), + 56: uint16(36894), + 57: uint16(36896), + 58: uint16(36879), + 59: uint16(36898), + 60: uint16(36886), + 61: uint16(36891), + 62: uint16(36884), + 63: uint16(37096), + 64: uint16(37101), + 65: uint16(37117), + 66: uint16(37207), + 67: uint16(37326), + 68: uint16(37365), + 69: uint16(37350), + 70: uint16(37347), + 71: uint16(37351), + 72: uint16(37357), + 73: uint16(37353), + 74: uint16(38281), + 75: uint16(38506), + 76: uint16(38517), + 77: uint16(38515), + 78: uint16(38520), + 79: uint16(38512), + 80: uint16(38516), + 81: uint16(38518), + 82: uint16(38519), + 83: uint16(38508), + 84: uint16(38592), + 85: uint16(38634), + 86: uint16(38633), + 87: uint16(31456), + 88: uint16(31455), + 89: uint16(38914), + 90: uint16(38915), + 91: uint16(39770), + 92: uint16(40165), + 93: uint16(40565), + 94: uint16(40575), + 95: uint16(40613), + 96: uint16(40635), + 97: uint16(20642), + 98: uint16(20621), + 99: uint16(20613), + 100: uint16(20633), + 101: uint16(20625), + 102: uint16(20608), + 103: uint16(20630), + 104: uint16(20632), + 105: uint16(20634), + 106: uint16(26368), + 107: uint16(20977), + 108: uint16(21106), + 109: uint16(21108), + 110: uint16(21109), + 111: uint16(21097), + 112: uint16(21214), + 113: uint16(21213), + 114: uint16(21211), + 115: uint16(21338), + 116: uint16(21413), + 117: uint16(21883), + 118: uint16(21888), + 119: uint16(21927), + 120: uint16(21884), + 121: uint16(21898), + 122: uint16(21917), + 123: uint16(21912), + 124: uint16(21890), + 125: uint16(21916), + 126: uint16(21930), + 127: uint16(21908), + 128: uint16(21895), + 129: uint16(21899), + 130: uint16(21891), + 131: uint16(21939), + 132: uint16(21934), + 133: uint16(21919), + 134: uint16(21822), + 135: uint16(21938), + 136: uint16(21914), + 137: uint16(21947), + 138: uint16(21932), + 139: uint16(21937), + 140: uint16(21886), + 141: uint16(21897), + 142: uint16(21931), + 143: uint16(21913), + 144: uint16(22285), + 145: uint16(22575), + 146: uint16(22570), + 147: uint16(22580), + 148: uint16(22564), + 149: uint16(22576), + 150: uint16(22577), + 151: uint16(22561), + 152: uint16(22557), + 153: uint16(22560), + 154: uint16(22777), + 155: uint16(22778), + 156: uint16(22880), + }, + 19: { + 0: uint16(23159), + 1: uint16(23194), + 2: uint16(23167), + 3: uint16(23186), + 4: uint16(23195), + 5: uint16(23207), + 6: uint16(23411), + 7: uint16(23409), + 8: uint16(23506), + 9: uint16(23500), + 10: uint16(23507), + 11: uint16(23504), + 12: uint16(23562), + 13: uint16(23563), + 14: uint16(23601), + 15: uint16(23884), + 16: uint16(23888), + 17: uint16(23860), + 18: uint16(23879), + 19: uint16(24061), + 20: uint16(24133), + 21: uint16(24125), + 22: uint16(24128), + 23: uint16(24131), + 24: uint16(24190), + 25: uint16(24266), + 26: uint16(24257), + 27: uint16(24258), + 28: uint16(24260), + 29: uint16(24380), + 30: uint16(24429), + 31: uint16(24489), + 32: uint16(24490), + 33: uint16(24488), + 34: uint16(24785), + 35: uint16(24801), + 36: uint16(24754), + 37: uint16(24758), + 38: uint16(24800), + 39: uint16(24860), + 40: uint16(24867), + 41: uint16(24826), + 42: uint16(24853), + 43: uint16(24816), + 44: uint16(24827), + 45: uint16(24820), + 46: uint16(24936), + 47: uint16(24817), + 48: uint16(24846), + 49: uint16(24822), + 50: uint16(24841), + 51: uint16(24832), + 52: uint16(24850), + 53: uint16(25119), + 54: uint16(25161), + 55: uint16(25507), + 56: uint16(25484), + 57: uint16(25551), + 58: uint16(25536), + 59: uint16(25577), + 60: uint16(25545), + 61: uint16(25542), + 62: uint16(25549), + 63: uint16(25554), + 64: uint16(25571), + 65: uint16(25552), + 66: uint16(25569), + 67: uint16(25558), + 68: uint16(25581), + 69: uint16(25582), + 70: uint16(25462), + 71: uint16(25588), + 72: uint16(25578), + 73: uint16(25563), + 74: uint16(25682), + 75: uint16(25562), + 76: uint16(25593), + 77: uint16(25950), + 78: uint16(25958), + 79: uint16(25954), + 80: uint16(25955), + 81: uint16(26001), + 82: uint16(26000), + 83: uint16(26031), + 84: uint16(26222), + 85: uint16(26224), + 86: uint16(26228), + 87: uint16(26230), + 88: uint16(26223), + 89: uint16(26257), + 90: uint16(26234), + 91: uint16(26238), + 92: uint16(26231), + 93: uint16(26366), + 94: uint16(26367), + 95: uint16(26399), + 96: uint16(26397), + 97: uint16(26874), + 98: uint16(26837), + 99: uint16(26848), + 100: uint16(26840), + 101: uint16(26839), + 102: uint16(26885), + 103: uint16(26847), + 104: uint16(26869), + 105: uint16(26862), + 106: uint16(26855), + 107: uint16(26873), + 108: uint16(26834), + 109: uint16(26866), + 110: uint16(26851), + 111: uint16(26827), + 112: uint16(26829), + 113: uint16(26893), + 114: uint16(26898), + 115: uint16(26894), + 116: uint16(26825), + 117: uint16(26842), + 118: uint16(26990), + 119: uint16(26875), + 120: uint16(27454), + 121: uint16(27450), + 122: uint16(27453), + 123: uint16(27544), + 124: uint16(27542), + 125: uint16(27580), + 126: uint16(27631), + 127: uint16(27694), + 128: uint16(27695), + 129: uint16(27692), + 130: uint16(28207), + 131: uint16(28216), + 132: uint16(28244), + 133: uint16(28193), + 134: uint16(28210), + 135: uint16(28263), + 136: uint16(28234), + 137: uint16(28192), + 138: uint16(28197), + 139: uint16(28195), + 140: uint16(28187), + 141: uint16(28251), + 142: uint16(28248), + 143: uint16(28196), + 144: uint16(28246), + 145: uint16(28270), + 146: uint16(28205), + 147: uint16(28198), + 148: uint16(28271), + 149: uint16(28212), + 150: uint16(28237), + 151: uint16(28218), + 152: uint16(28204), + 153: uint16(28227), + 154: uint16(28189), + 155: uint16(28222), + 156: uint16(28363), + }, + 20: { + 0: uint16(28297), + 1: uint16(28185), + 2: uint16(28238), + 3: uint16(28259), + 4: uint16(28228), + 5: uint16(28274), + 6: uint16(28265), + 7: uint16(28255), + 8: uint16(28953), + 9: uint16(28954), + 10: uint16(28966), + 11: uint16(28976), + 12: uint16(28961), + 13: uint16(28982), + 14: uint16(29038), + 15: uint16(28956), + 16: uint16(29260), + 17: uint16(29316), + 18: uint16(29312), + 19: uint16(29494), + 20: uint16(29477), + 21: uint16(29492), + 22: uint16(29481), + 23: uint16(29754), + 24: uint16(29738), + 25: uint16(29747), + 26: uint16(29730), + 27: uint16(29733), + 28: uint16(29749), + 29: uint16(29750), + 30: uint16(29748), + 31: uint16(29743), + 32: uint16(29723), + 33: uint16(29734), + 34: uint16(29736), + 35: uint16(29989), + 36: uint16(29990), + 37: uint16(30059), + 38: uint16(30058), + 39: uint16(30178), + 40: uint16(30171), + 41: uint16(30179), + 42: uint16(30169), + 43: uint16(30168), + 44: uint16(30174), + 45: uint16(30176), + 46: uint16(30331), + 47: uint16(30332), + 48: uint16(30358), + 49: uint16(30355), + 50: uint16(30388), + 51: uint16(30428), + 52: uint16(30543), + 53: uint16(30701), + 54: uint16(30813), + 55: uint16(30828), + 56: uint16(30831), + 57: uint16(31245), + 58: uint16(31240), + 59: uint16(31243), + 60: uint16(31237), + 61: uint16(31232), + 62: uint16(31384), + 63: uint16(31383), + 64: uint16(31382), + 65: uint16(31461), + 66: uint16(31459), + 67: uint16(31561), + 68: uint16(31574), + 69: uint16(31558), + 70: uint16(31568), + 71: uint16(31570), + 72: uint16(31572), + 73: uint16(31565), + 74: uint16(31563), + 75: uint16(31567), + 76: uint16(31569), + 77: uint16(31903), + 78: uint16(31909), + 79: uint16(32094), + 80: uint16(32080), + 81: uint16(32104), + 82: uint16(32085), + 83: uint16(32043), + 84: uint16(32110), + 85: uint16(32114), + 86: uint16(32097), + 87: uint16(32102), + 88: uint16(32098), + 89: uint16(32112), + 90: uint16(32115), + 91: uint16(21892), + 92: uint16(32724), + 93: uint16(32725), + 94: uint16(32779), + 95: uint16(32850), + 96: uint16(32901), + 97: uint16(33109), + 98: uint16(33108), + 99: uint16(33099), + 100: uint16(33105), + 101: uint16(33102), + 102: uint16(33081), + 103: uint16(33094), + 104: uint16(33086), + 105: uint16(33100), + 106: uint16(33107), + 107: uint16(33140), + 108: uint16(33298), + 109: uint16(33308), + 110: uint16(33769), + 111: uint16(33795), + 112: uint16(33784), + 113: uint16(33805), + 114: uint16(33760), + 115: uint16(33733), + 116: uint16(33803), + 117: uint16(33729), + 118: uint16(33775), + 119: uint16(33777), + 120: uint16(33780), + 121: uint16(33879), + 122: uint16(33802), + 123: uint16(33776), + 124: uint16(33804), + 125: uint16(33740), + 126: uint16(33789), + 127: uint16(33778), + 128: uint16(33738), + 129: uint16(33848), + 130: uint16(33806), + 131: uint16(33796), + 132: uint16(33756), + 133: uint16(33799), + 134: uint16(33748), + 135: uint16(33759), + 136: uint16(34395), + 137: uint16(34527), + 138: uint16(34521), + 139: uint16(34541), + 140: uint16(34516), + 141: uint16(34523), + 142: uint16(34532), + 143: uint16(34512), + 144: uint16(34526), + 145: uint16(34903), + 146: uint16(35009), + 147: uint16(35010), + 148: uint16(34993), + 149: uint16(35203), + 150: uint16(35222), + 151: uint16(35387), + 152: uint16(35424), + 153: uint16(35413), + 154: uint16(35422), + 155: uint16(35388), + 156: uint16(35393), + }, + 21: { + 0: uint16(35412), + 1: uint16(35419), + 2: uint16(35408), + 3: uint16(35398), + 4: uint16(35380), + 5: uint16(35386), + 6: uint16(35382), + 7: uint16(35414), + 8: uint16(35937), + 9: uint16(35970), + 10: uint16(36015), + 11: uint16(36028), + 12: uint16(36019), + 13: uint16(36029), + 14: uint16(36033), + 15: uint16(36027), + 16: uint16(36032), + 17: uint16(36020), + 18: uint16(36023), + 19: uint16(36022), + 20: uint16(36031), + 21: uint16(36024), + 22: uint16(36234), + 23: uint16(36229), + 24: uint16(36225), + 25: uint16(36302), + 26: uint16(36317), + 27: uint16(36299), + 28: uint16(36314), + 29: uint16(36305), + 30: uint16(36300), + 31: uint16(36315), + 32: uint16(36294), + 33: uint16(36603), + 34: uint16(36600), + 35: uint16(36604), + 36: uint16(36764), + 37: uint16(36910), + 38: uint16(36917), + 39: uint16(36913), + 40: uint16(36920), + 41: uint16(36914), + 42: uint16(36918), + 43: uint16(37122), + 44: uint16(37109), + 45: uint16(37129), + 46: uint16(37118), + 47: uint16(37219), + 48: uint16(37221), + 49: uint16(37327), + 50: uint16(37396), + 51: uint16(37397), + 52: uint16(37411), + 53: uint16(37385), + 54: uint16(37406), + 55: uint16(37389), + 56: uint16(37392), + 57: uint16(37383), + 58: uint16(37393), + 59: uint16(38292), + 60: uint16(38287), + 61: uint16(38283), + 62: uint16(38289), + 63: uint16(38291), + 64: uint16(38290), + 65: uint16(38286), + 66: uint16(38538), + 67: uint16(38542), + 68: uint16(38539), + 69: uint16(38525), + 70: uint16(38533), + 71: uint16(38534), + 72: uint16(38541), + 73: uint16(38514), + 74: uint16(38532), + 75: uint16(38593), + 76: uint16(38597), + 77: uint16(38596), + 78: uint16(38598), + 79: uint16(38599), + 80: uint16(38639), + 81: uint16(38642), + 82: uint16(38860), + 83: uint16(38917), + 84: uint16(38918), + 85: uint16(38920), + 86: uint16(39143), + 87: uint16(39146), + 88: uint16(39151), + 89: uint16(39145), + 90: uint16(39154), + 91: uint16(39149), + 92: uint16(39342), + 93: uint16(39341), + 94: uint16(40643), + 95: uint16(40653), + 96: uint16(40657), + 97: uint16(20098), + 98: uint16(20653), + 99: uint16(20661), + 100: uint16(20658), + 101: uint16(20659), + 102: uint16(20677), + 103: uint16(20670), + 104: uint16(20652), + 105: uint16(20663), + 106: uint16(20667), + 107: uint16(20655), + 108: uint16(20679), + 109: uint16(21119), + 110: uint16(21111), + 111: uint16(21117), + 112: uint16(21215), + 113: uint16(21222), + 114: uint16(21220), + 115: uint16(21218), + 116: uint16(21219), + 117: uint16(21295), + 118: uint16(21983), + 119: uint16(21992), + 120: uint16(21971), + 121: uint16(21990), + 122: uint16(21966), + 123: uint16(21980), + 124: uint16(21959), + 125: uint16(21969), + 126: uint16(21987), + 127: uint16(21988), + 128: uint16(21999), + 129: uint16(21978), + 130: uint16(21985), + 131: uint16(21957), + 132: uint16(21958), + 133: uint16(21989), + 134: uint16(21961), + 135: uint16(22290), + 136: uint16(22291), + 137: uint16(22622), + 138: uint16(22609), + 139: uint16(22616), + 140: uint16(22615), + 141: uint16(22618), + 142: uint16(22612), + 143: uint16(22635), + 144: uint16(22604), + 145: uint16(22637), + 146: uint16(22602), + 147: uint16(22626), + 148: uint16(22610), + 149: uint16(22603), + 150: uint16(22887), + 151: uint16(23233), + 152: uint16(23241), + 153: uint16(23244), + 154: uint16(23230), + 155: uint16(23229), + 156: uint16(23228), + }, + 22: { + 0: uint16(23219), + 1: uint16(23234), + 2: uint16(23218), + 3: uint16(23913), + 4: uint16(23919), + 5: uint16(24140), + 6: uint16(24185), + 7: uint16(24265), + 8: uint16(24264), + 9: uint16(24338), + 10: uint16(24409), + 11: uint16(24492), + 12: uint16(24494), + 13: uint16(24858), + 14: uint16(24847), + 15: uint16(24904), + 16: uint16(24863), + 17: uint16(24819), + 18: uint16(24859), + 19: uint16(24825), + 20: uint16(24833), + 21: uint16(24840), + 22: uint16(24910), + 23: uint16(24908), + 24: uint16(24900), + 25: uint16(24909), + 26: uint16(24894), + 27: uint16(24884), + 28: uint16(24871), + 29: uint16(24845), + 30: uint16(24838), + 31: uint16(24887), + 32: uint16(25121), + 33: uint16(25122), + 34: uint16(25619), + 35: uint16(25662), + 36: uint16(25630), + 37: uint16(25642), + 38: uint16(25645), + 39: uint16(25661), + 40: uint16(25644), + 41: uint16(25615), + 42: uint16(25628), + 43: uint16(25620), + 44: uint16(25613), + 45: uint16(25654), + 46: uint16(25622), + 47: uint16(25623), + 48: uint16(25606), + 49: uint16(25964), + 50: uint16(26015), + 51: uint16(26032), + 52: uint16(26263), + 53: uint16(26249), + 54: uint16(26247), + 55: uint16(26248), + 56: uint16(26262), + 57: uint16(26244), + 58: uint16(26264), + 59: uint16(26253), + 60: uint16(26371), + 61: uint16(27028), + 62: uint16(26989), + 63: uint16(26970), + 64: uint16(26999), + 65: uint16(26976), + 66: uint16(26964), + 67: uint16(26997), + 68: uint16(26928), + 69: uint16(27010), + 70: uint16(26954), + 71: uint16(26984), + 72: uint16(26987), + 73: uint16(26974), + 74: uint16(26963), + 75: uint16(27001), + 76: uint16(27014), + 77: uint16(26973), + 78: uint16(26979), + 79: uint16(26971), + 80: uint16(27463), + 81: uint16(27506), + 82: uint16(27584), + 83: uint16(27583), + 84: uint16(27603), + 85: uint16(27645), + 86: uint16(28322), + 87: uint16(28335), + 88: uint16(28371), + 89: uint16(28342), + 90: uint16(28354), + 91: uint16(28304), + 92: uint16(28317), + 93: uint16(28359), + 94: uint16(28357), + 95: uint16(28325), + 96: uint16(28312), + 97: uint16(28348), + 98: uint16(28346), + 99: uint16(28331), + 100: uint16(28369), + 101: uint16(28310), + 102: uint16(28316), + 103: uint16(28356), + 104: uint16(28372), + 105: uint16(28330), + 106: uint16(28327), + 107: uint16(28340), + 108: uint16(29006), + 109: uint16(29017), + 110: uint16(29033), + 111: uint16(29028), + 112: uint16(29001), + 113: uint16(29031), + 114: uint16(29020), + 115: uint16(29036), + 116: uint16(29030), + 117: uint16(29004), + 118: uint16(29029), + 119: uint16(29022), + 120: uint16(28998), + 121: uint16(29032), + 122: uint16(29014), + 123: uint16(29242), + 124: uint16(29266), + 125: uint16(29495), + 126: uint16(29509), + 127: uint16(29503), + 128: uint16(29502), + 129: uint16(29807), + 130: uint16(29786), + 131: uint16(29781), + 132: uint16(29791), + 133: uint16(29790), + 134: uint16(29761), + 135: uint16(29759), + 136: uint16(29785), + 137: uint16(29787), + 138: uint16(29788), + 139: uint16(30070), + 140: uint16(30072), + 141: uint16(30208), + 142: uint16(30192), + 143: uint16(30209), + 144: uint16(30194), + 145: uint16(30193), + 146: uint16(30202), + 147: uint16(30207), + 148: uint16(30196), + 149: uint16(30195), + 150: uint16(30430), + 151: uint16(30431), + 152: uint16(30555), + 153: uint16(30571), + 154: uint16(30566), + 155: uint16(30558), + 156: uint16(30563), + }, + 23: { + 0: uint16(30585), + 1: uint16(30570), + 2: uint16(30572), + 3: uint16(30556), + 4: uint16(30565), + 5: uint16(30568), + 6: uint16(30562), + 7: uint16(30702), + 8: uint16(30862), + 9: uint16(30896), + 10: uint16(30871), + 11: uint16(30872), + 12: uint16(30860), + 13: uint16(30857), + 14: uint16(30844), + 15: uint16(30865), + 16: uint16(30867), + 17: uint16(30847), + 18: uint16(31098), + 19: uint16(31103), + 20: uint16(31105), + 21: uint16(33836), + 22: uint16(31165), + 23: uint16(31260), + 24: uint16(31258), + 25: uint16(31264), + 26: uint16(31252), + 27: uint16(31263), + 28: uint16(31262), + 29: uint16(31391), + 30: uint16(31392), + 31: uint16(31607), + 32: uint16(31680), + 33: uint16(31584), + 34: uint16(31598), + 35: uint16(31591), + 36: uint16(31921), + 37: uint16(31923), + 38: uint16(31925), + 39: uint16(32147), + 40: uint16(32121), + 41: uint16(32145), + 42: uint16(32129), + 43: uint16(32143), + 44: uint16(32091), + 45: uint16(32622), + 46: uint16(32617), + 47: uint16(32618), + 48: uint16(32626), + 49: uint16(32681), + 50: uint16(32680), + 51: uint16(32676), + 52: uint16(32854), + 53: uint16(32856), + 54: uint16(32902), + 55: uint16(32900), + 56: uint16(33137), + 57: uint16(33136), + 58: uint16(33144), + 59: uint16(33125), + 60: uint16(33134), + 61: uint16(33139), + 62: uint16(33131), + 63: uint16(33145), + 64: uint16(33146), + 65: uint16(33126), + 66: uint16(33285), + 67: uint16(33351), + 68: uint16(33922), + 69: uint16(33911), + 70: uint16(33853), + 71: uint16(33841), + 72: uint16(33909), + 73: uint16(33894), + 74: uint16(33899), + 75: uint16(33865), + 76: uint16(33900), + 77: uint16(33883), + 78: uint16(33852), + 79: uint16(33845), + 80: uint16(33889), + 81: uint16(33891), + 82: uint16(33897), + 83: uint16(33901), + 84: uint16(33862), + 85: uint16(34398), + 86: uint16(34396), + 87: uint16(34399), + 88: uint16(34553), + 89: uint16(34579), + 90: uint16(34568), + 91: uint16(34567), + 92: uint16(34560), + 93: uint16(34558), + 94: uint16(34555), + 95: uint16(34562), + 96: uint16(34563), + 97: uint16(34566), + 98: uint16(34570), + 99: uint16(34905), + 100: uint16(35039), + 101: uint16(35028), + 102: uint16(35033), + 103: uint16(35036), + 104: uint16(35032), + 105: uint16(35037), + 106: uint16(35041), + 107: uint16(35018), + 108: uint16(35029), + 109: uint16(35026), + 110: uint16(35228), + 111: uint16(35299), + 112: uint16(35435), + 113: uint16(35442), + 114: uint16(35443), + 115: uint16(35430), + 116: uint16(35433), + 117: uint16(35440), + 118: uint16(35463), + 119: uint16(35452), + 120: uint16(35427), + 121: uint16(35488), + 122: uint16(35441), + 123: uint16(35461), + 124: uint16(35437), + 125: uint16(35426), + 126: uint16(35438), + 127: uint16(35436), + 128: uint16(35449), + 129: uint16(35451), + 130: uint16(35390), + 131: uint16(35432), + 132: uint16(35938), + 133: uint16(35978), + 134: uint16(35977), + 135: uint16(36042), + 136: uint16(36039), + 137: uint16(36040), + 138: uint16(36036), + 139: uint16(36018), + 140: uint16(36035), + 141: uint16(36034), + 142: uint16(36037), + 143: uint16(36321), + 144: uint16(36319), + 145: uint16(36328), + 146: uint16(36335), + 147: uint16(36339), + 148: uint16(36346), + 149: uint16(36330), + 150: uint16(36324), + 151: uint16(36326), + 152: uint16(36530), + 153: uint16(36611), + 154: uint16(36617), + 155: uint16(36606), + 156: uint16(36618), + }, + 24: { + 0: uint16(36767), + 1: uint16(36786), + 2: uint16(36939), + 3: uint16(36938), + 4: uint16(36947), + 5: uint16(36930), + 6: uint16(36948), + 7: uint16(36924), + 8: uint16(36949), + 9: uint16(36944), + 10: uint16(36935), + 11: uint16(36943), + 12: uint16(36942), + 13: uint16(36941), + 14: uint16(36945), + 15: uint16(36926), + 16: uint16(36929), + 17: uint16(37138), + 18: uint16(37143), + 19: uint16(37228), + 20: uint16(37226), + 21: uint16(37225), + 22: uint16(37321), + 23: uint16(37431), + 24: uint16(37463), + 25: uint16(37432), + 26: uint16(37437), + 27: uint16(37440), + 28: uint16(37438), + 29: uint16(37467), + 30: uint16(37451), + 31: uint16(37476), + 32: uint16(37457), + 33: uint16(37428), + 34: uint16(37449), + 35: uint16(37453), + 36: uint16(37445), + 37: uint16(37433), + 38: uint16(37439), + 39: uint16(37466), + 40: uint16(38296), + 41: uint16(38552), + 42: uint16(38548), + 43: uint16(38549), + 44: uint16(38605), + 45: uint16(38603), + 46: uint16(38601), + 47: uint16(38602), + 48: uint16(38647), + 49: uint16(38651), + 50: uint16(38649), + 51: uint16(38646), + 52: uint16(38742), + 53: uint16(38772), + 54: uint16(38774), + 55: uint16(38928), + 56: uint16(38929), + 57: uint16(38931), + 58: uint16(38922), + 59: uint16(38930), + 60: uint16(38924), + 61: uint16(39164), + 62: uint16(39156), + 63: uint16(39165), + 64: uint16(39166), + 65: uint16(39347), + 66: uint16(39345), + 67: uint16(39348), + 68: uint16(39649), + 69: uint16(40169), + 70: uint16(40578), + 71: uint16(40718), + 72: uint16(40723), + 73: uint16(40736), + 74: uint16(20711), + 75: uint16(20718), + 76: uint16(20709), + 77: uint16(20694), + 78: uint16(20717), + 79: uint16(20698), + 80: uint16(20693), + 81: uint16(20687), + 82: uint16(20689), + 83: uint16(20721), + 84: uint16(20686), + 85: uint16(20713), + 86: uint16(20834), + 87: uint16(20979), + 88: uint16(21123), + 89: uint16(21122), + 90: uint16(21297), + 91: uint16(21421), + 92: uint16(22014), + 93: uint16(22016), + 94: uint16(22043), + 95: uint16(22039), + 96: uint16(22013), + 97: uint16(22036), + 98: uint16(22022), + 99: uint16(22025), + 100: uint16(22029), + 101: uint16(22030), + 102: uint16(22007), + 103: uint16(22038), + 104: uint16(22047), + 105: uint16(22024), + 106: uint16(22032), + 107: uint16(22006), + 108: uint16(22296), + 109: uint16(22294), + 110: uint16(22645), + 111: uint16(22654), + 112: uint16(22659), + 113: uint16(22675), + 114: uint16(22666), + 115: uint16(22649), + 116: uint16(22661), + 117: uint16(22653), + 118: uint16(22781), + 119: uint16(22821), + 120: uint16(22818), + 121: uint16(22820), + 122: uint16(22890), + 123: uint16(22889), + 124: uint16(23265), + 125: uint16(23270), + 126: uint16(23273), + 127: uint16(23255), + 128: uint16(23254), + 129: uint16(23256), + 130: uint16(23267), + 131: uint16(23413), + 132: uint16(23518), + 133: uint16(23527), + 134: uint16(23521), + 135: uint16(23525), + 136: uint16(23526), + 137: uint16(23528), + 138: uint16(23522), + 139: uint16(23524), + 140: uint16(23519), + 141: uint16(23565), + 142: uint16(23650), + 143: uint16(23940), + 144: uint16(23943), + 145: uint16(24155), + 146: uint16(24163), + 147: uint16(24149), + 148: uint16(24151), + 149: uint16(24148), + 150: uint16(24275), + 151: uint16(24278), + 152: uint16(24330), + 153: uint16(24390), + 154: uint16(24432), + 155: uint16(24505), + 156: uint16(24903), + }, + 25: { + 0: uint16(24895), + 1: uint16(24907), + 2: uint16(24951), + 3: uint16(24930), + 4: uint16(24931), + 5: uint16(24927), + 6: uint16(24922), + 7: uint16(24920), + 8: uint16(24949), + 9: uint16(25130), + 10: uint16(25735), + 11: uint16(25688), + 12: uint16(25684), + 13: uint16(25764), + 14: uint16(25720), + 15: uint16(25695), + 16: uint16(25722), + 17: uint16(25681), + 18: uint16(25703), + 19: uint16(25652), + 20: uint16(25709), + 21: uint16(25723), + 22: uint16(25970), + 23: uint16(26017), + 24: uint16(26071), + 25: uint16(26070), + 26: uint16(26274), + 27: uint16(26280), + 28: uint16(26269), + 29: uint16(27036), + 30: uint16(27048), + 31: uint16(27029), + 32: uint16(27073), + 33: uint16(27054), + 34: uint16(27091), + 35: uint16(27083), + 36: uint16(27035), + 37: uint16(27063), + 38: uint16(27067), + 39: uint16(27051), + 40: uint16(27060), + 41: uint16(27088), + 42: uint16(27085), + 43: uint16(27053), + 44: uint16(27084), + 45: uint16(27046), + 46: uint16(27075), + 47: uint16(27043), + 48: uint16(27465), + 49: uint16(27468), + 50: uint16(27699), + 51: uint16(28467), + 52: uint16(28436), + 53: uint16(28414), + 54: uint16(28435), + 55: uint16(28404), + 56: uint16(28457), + 57: uint16(28478), + 58: uint16(28448), + 59: uint16(28460), + 60: uint16(28431), + 61: uint16(28418), + 62: uint16(28450), + 63: uint16(28415), + 64: uint16(28399), + 65: uint16(28422), + 66: uint16(28465), + 67: uint16(28472), + 68: uint16(28466), + 69: uint16(28451), + 70: uint16(28437), + 71: uint16(28459), + 72: uint16(28463), + 73: uint16(28552), + 74: uint16(28458), + 75: uint16(28396), + 76: uint16(28417), + 77: uint16(28402), + 78: uint16(28364), + 79: uint16(28407), + 80: uint16(29076), + 81: uint16(29081), + 82: uint16(29053), + 83: uint16(29066), + 84: uint16(29060), + 85: uint16(29074), + 86: uint16(29246), + 87: uint16(29330), + 88: uint16(29334), + 89: uint16(29508), + 90: uint16(29520), + 91: uint16(29796), + 92: uint16(29795), + 93: uint16(29802), + 94: uint16(29808), + 95: uint16(29805), + 96: uint16(29956), + 97: uint16(30097), + 98: uint16(30247), + 99: uint16(30221), + 100: uint16(30219), + 101: uint16(30217), + 102: uint16(30227), + 103: uint16(30433), + 104: uint16(30435), + 105: uint16(30596), + 106: uint16(30589), + 107: uint16(30591), + 108: uint16(30561), + 109: uint16(30913), + 110: uint16(30879), + 111: uint16(30887), + 112: uint16(30899), + 113: uint16(30889), + 114: uint16(30883), + 115: uint16(31118), + 116: uint16(31119), + 117: uint16(31117), + 118: uint16(31278), + 119: uint16(31281), + 120: uint16(31402), + 121: uint16(31401), + 122: uint16(31469), + 123: uint16(31471), + 124: uint16(31649), + 125: uint16(31637), + 126: uint16(31627), + 127: uint16(31605), + 128: uint16(31639), + 129: uint16(31645), + 130: uint16(31636), + 131: uint16(31631), + 132: uint16(31672), + 133: uint16(31623), + 134: uint16(31620), + 135: uint16(31929), + 136: uint16(31933), + 137: uint16(31934), + 138: uint16(32187), + 139: uint16(32176), + 140: uint16(32156), + 141: uint16(32189), + 142: uint16(32190), + 143: uint16(32160), + 144: uint16(32202), + 145: uint16(32180), + 146: uint16(32178), + 147: uint16(32177), + 148: uint16(32186), + 149: uint16(32162), + 150: uint16(32191), + 151: uint16(32181), + 152: uint16(32184), + 153: uint16(32173), + 154: uint16(32210), + 155: uint16(32199), + 156: uint16(32172), + }, + 26: { + 0: uint16(32624), + 1: uint16(32736), + 2: uint16(32737), + 3: uint16(32735), + 4: uint16(32862), + 5: uint16(32858), + 6: uint16(32903), + 7: uint16(33104), + 8: uint16(33152), + 9: uint16(33167), + 10: uint16(33160), + 11: uint16(33162), + 12: uint16(33151), + 13: uint16(33154), + 14: uint16(33255), + 15: uint16(33274), + 16: uint16(33287), + 17: uint16(33300), + 18: uint16(33310), + 19: uint16(33355), + 20: uint16(33993), + 21: uint16(33983), + 22: uint16(33990), + 23: uint16(33988), + 24: uint16(33945), + 25: uint16(33950), + 26: uint16(33970), + 27: uint16(33948), + 28: uint16(33995), + 29: uint16(33976), + 30: uint16(33984), + 31: uint16(34003), + 32: uint16(33936), + 33: uint16(33980), + 34: uint16(34001), + 35: uint16(33994), + 36: uint16(34623), + 37: uint16(34588), + 38: uint16(34619), + 39: uint16(34594), + 40: uint16(34597), + 41: uint16(34612), + 42: uint16(34584), + 43: uint16(34645), + 44: uint16(34615), + 45: uint16(34601), + 46: uint16(35059), + 47: uint16(35074), + 48: uint16(35060), + 49: uint16(35065), + 50: uint16(35064), + 51: uint16(35069), + 52: uint16(35048), + 53: uint16(35098), + 54: uint16(35055), + 55: uint16(35494), + 56: uint16(35468), + 57: uint16(35486), + 58: uint16(35491), + 59: uint16(35469), + 60: uint16(35489), + 61: uint16(35475), + 62: uint16(35492), + 63: uint16(35498), + 64: uint16(35493), + 65: uint16(35496), + 66: uint16(35480), + 67: uint16(35473), + 68: uint16(35482), + 69: uint16(35495), + 70: uint16(35946), + 71: uint16(35981), + 72: uint16(35980), + 73: uint16(36051), + 74: uint16(36049), + 75: uint16(36050), + 76: uint16(36203), + 77: uint16(36249), + 78: uint16(36245), + 79: uint16(36348), + 80: uint16(36628), + 81: uint16(36626), + 82: uint16(36629), + 83: uint16(36627), + 84: uint16(36771), + 85: uint16(36960), + 86: uint16(36952), + 87: uint16(36956), + 88: uint16(36963), + 89: uint16(36953), + 90: uint16(36958), + 91: uint16(36962), + 92: uint16(36957), + 93: uint16(36955), + 94: uint16(37145), + 95: uint16(37144), + 96: uint16(37150), + 97: uint16(37237), + 98: uint16(37240), + 99: uint16(37239), + 100: uint16(37236), + 101: uint16(37496), + 102: uint16(37504), + 103: uint16(37509), + 104: uint16(37528), + 105: uint16(37526), + 106: uint16(37499), + 107: uint16(37523), + 108: uint16(37532), + 109: uint16(37544), + 110: uint16(37500), + 111: uint16(37521), + 112: uint16(38305), + 113: uint16(38312), + 114: uint16(38313), + 115: uint16(38307), + 116: uint16(38309), + 117: uint16(38308), + 118: uint16(38553), + 119: uint16(38556), + 120: uint16(38555), + 121: uint16(38604), + 122: uint16(38610), + 123: uint16(38656), + 124: uint16(38780), + 125: uint16(38789), + 126: uint16(38902), + 127: uint16(38935), + 128: uint16(38936), + 129: uint16(39087), + 130: uint16(39089), + 131: uint16(39171), + 132: uint16(39173), + 133: uint16(39180), + 134: uint16(39177), + 135: uint16(39361), + 136: uint16(39599), + 137: uint16(39600), + 138: uint16(39654), + 139: uint16(39745), + 140: uint16(39746), + 141: uint16(40180), + 142: uint16(40182), + 143: uint16(40179), + 144: uint16(40636), + 145: uint16(40763), + 146: uint16(40778), + 147: uint16(20740), + 148: uint16(20736), + 149: uint16(20731), + 150: uint16(20725), + 151: uint16(20729), + 152: uint16(20738), + 153: uint16(20744), + 154: uint16(20745), + 155: uint16(20741), + 156: uint16(20956), + }, + 27: { + 0: uint16(21127), + 1: uint16(21128), + 2: uint16(21129), + 3: uint16(21133), + 4: uint16(21130), + 5: uint16(21232), + 6: uint16(21426), + 7: uint16(22062), + 8: uint16(22075), + 9: uint16(22073), + 10: uint16(22066), + 11: uint16(22079), + 12: uint16(22068), + 13: uint16(22057), + 14: uint16(22099), + 15: uint16(22094), + 16: uint16(22103), + 17: uint16(22132), + 18: uint16(22070), + 19: uint16(22063), + 20: uint16(22064), + 21: uint16(22656), + 22: uint16(22687), + 23: uint16(22686), + 24: uint16(22707), + 25: uint16(22684), + 26: uint16(22702), + 27: uint16(22697), + 28: uint16(22694), + 29: uint16(22893), + 30: uint16(23305), + 31: uint16(23291), + 32: uint16(23307), + 33: uint16(23285), + 34: uint16(23308), + 35: uint16(23304), + 36: uint16(23534), + 37: uint16(23532), + 38: uint16(23529), + 39: uint16(23531), + 40: uint16(23652), + 41: uint16(23653), + 42: uint16(23965), + 43: uint16(23956), + 44: uint16(24162), + 45: uint16(24159), + 46: uint16(24161), + 47: uint16(24290), + 48: uint16(24282), + 49: uint16(24287), + 50: uint16(24285), + 51: uint16(24291), + 52: uint16(24288), + 53: uint16(24392), + 54: uint16(24433), + 55: uint16(24503), + 56: uint16(24501), + 57: uint16(24950), + 58: uint16(24935), + 59: uint16(24942), + 60: uint16(24925), + 61: uint16(24917), + 62: uint16(24962), + 63: uint16(24956), + 64: uint16(24944), + 65: uint16(24939), + 66: uint16(24958), + 67: uint16(24999), + 68: uint16(24976), + 69: uint16(25003), + 70: uint16(24974), + 71: uint16(25004), + 72: uint16(24986), + 73: uint16(24996), + 74: uint16(24980), + 75: uint16(25006), + 76: uint16(25134), + 77: uint16(25705), + 78: uint16(25711), + 79: uint16(25721), + 80: uint16(25758), + 81: uint16(25778), + 82: uint16(25736), + 83: uint16(25744), + 84: uint16(25776), + 85: uint16(25765), + 86: uint16(25747), + 87: uint16(25749), + 88: uint16(25769), + 89: uint16(25746), + 90: uint16(25774), + 91: uint16(25773), + 92: uint16(25771), + 93: uint16(25754), + 94: uint16(25772), + 95: uint16(25753), + 96: uint16(25762), + 97: uint16(25779), + 98: uint16(25973), + 99: uint16(25975), + 100: uint16(25976), + 101: uint16(26286), + 102: uint16(26283), + 103: uint16(26292), + 104: uint16(26289), + 105: uint16(27171), + 106: uint16(27167), + 107: uint16(27112), + 108: uint16(27137), + 109: uint16(27166), + 110: uint16(27161), + 111: uint16(27133), + 112: uint16(27169), + 113: uint16(27155), + 114: uint16(27146), + 115: uint16(27123), + 116: uint16(27138), + 117: uint16(27141), + 118: uint16(27117), + 119: uint16(27153), + 120: uint16(27472), + 121: uint16(27470), + 122: uint16(27556), + 123: uint16(27589), + 124: uint16(27590), + 125: uint16(28479), + 126: uint16(28540), + 127: uint16(28548), + 128: uint16(28497), + 129: uint16(28518), + 130: uint16(28500), + 131: uint16(28550), + 132: uint16(28525), + 133: uint16(28507), + 134: uint16(28536), + 135: uint16(28526), + 136: uint16(28558), + 137: uint16(28538), + 138: uint16(28528), + 139: uint16(28516), + 140: uint16(28567), + 141: uint16(28504), + 142: uint16(28373), + 143: uint16(28527), + 144: uint16(28512), + 145: uint16(28511), + 146: uint16(29087), + 147: uint16(29100), + 148: uint16(29105), + 149: uint16(29096), + 150: uint16(29270), + 151: uint16(29339), + 152: uint16(29518), + 153: uint16(29527), + 154: uint16(29801), + 155: uint16(29835), + 156: uint16(29827), + }, + 28: { + 0: uint16(29822), + 1: uint16(29824), + 2: uint16(30079), + 3: uint16(30240), + 4: uint16(30249), + 5: uint16(30239), + 6: uint16(30244), + 7: uint16(30246), + 8: uint16(30241), + 9: uint16(30242), + 10: uint16(30362), + 11: uint16(30394), + 12: uint16(30436), + 13: uint16(30606), + 14: uint16(30599), + 15: uint16(30604), + 16: uint16(30609), + 17: uint16(30603), + 18: uint16(30923), + 19: uint16(30917), + 20: uint16(30906), + 21: uint16(30922), + 22: uint16(30910), + 23: uint16(30933), + 24: uint16(30908), + 25: uint16(30928), + 26: uint16(31295), + 27: uint16(31292), + 28: uint16(31296), + 29: uint16(31293), + 30: uint16(31287), + 31: uint16(31291), + 32: uint16(31407), + 33: uint16(31406), + 34: uint16(31661), + 35: uint16(31665), + 36: uint16(31684), + 37: uint16(31668), + 38: uint16(31686), + 39: uint16(31687), + 40: uint16(31681), + 41: uint16(31648), + 42: uint16(31692), + 43: uint16(31946), + 44: uint16(32224), + 45: uint16(32244), + 46: uint16(32239), + 47: uint16(32251), + 48: uint16(32216), + 49: uint16(32236), + 50: uint16(32221), + 51: uint16(32232), + 52: uint16(32227), + 53: uint16(32218), + 54: uint16(32222), + 55: uint16(32233), + 56: uint16(32158), + 57: uint16(32217), + 58: uint16(32242), + 59: uint16(32249), + 60: uint16(32629), + 61: uint16(32631), + 62: uint16(32687), + 63: uint16(32745), + 64: uint16(32806), + 65: uint16(33179), + 66: uint16(33180), + 67: uint16(33181), + 68: uint16(33184), + 69: uint16(33178), + 70: uint16(33176), + 71: uint16(34071), + 72: uint16(34109), + 73: uint16(34074), + 74: uint16(34030), + 75: uint16(34092), + 76: uint16(34093), + 77: uint16(34067), + 78: uint16(34065), + 79: uint16(34083), + 80: uint16(34081), + 81: uint16(34068), + 82: uint16(34028), + 83: uint16(34085), + 84: uint16(34047), + 85: uint16(34054), + 86: uint16(34690), + 87: uint16(34676), + 88: uint16(34678), + 89: uint16(34656), + 90: uint16(34662), + 91: uint16(34680), + 92: uint16(34664), + 93: uint16(34649), + 94: uint16(34647), + 95: uint16(34636), + 96: uint16(34643), + 97: uint16(34907), + 98: uint16(34909), + 99: uint16(35088), + 100: uint16(35079), + 101: uint16(35090), + 102: uint16(35091), + 103: uint16(35093), + 104: uint16(35082), + 105: uint16(35516), + 106: uint16(35538), + 107: uint16(35527), + 108: uint16(35524), + 109: uint16(35477), + 110: uint16(35531), + 111: uint16(35576), + 112: uint16(35506), + 113: uint16(35529), + 114: uint16(35522), + 115: uint16(35519), + 116: uint16(35504), + 117: uint16(35542), + 118: uint16(35533), + 119: uint16(35510), + 120: uint16(35513), + 121: uint16(35547), + 122: uint16(35916), + 123: uint16(35918), + 124: uint16(35948), + 125: uint16(36064), + 126: uint16(36062), + 127: uint16(36070), + 128: uint16(36068), + 129: uint16(36076), + 130: uint16(36077), + 131: uint16(36066), + 132: uint16(36067), + 133: uint16(36060), + 134: uint16(36074), + 135: uint16(36065), + 136: uint16(36205), + 137: uint16(36255), + 138: uint16(36259), + 139: uint16(36395), + 140: uint16(36368), + 141: uint16(36381), + 142: uint16(36386), + 143: uint16(36367), + 144: uint16(36393), + 145: uint16(36383), + 146: uint16(36385), + 147: uint16(36382), + 148: uint16(36538), + 149: uint16(36637), + 150: uint16(36635), + 151: uint16(36639), + 152: uint16(36649), + 153: uint16(36646), + 154: uint16(36650), + 155: uint16(36636), + 156: uint16(36638), + }, + 29: { + 0: uint16(36645), + 1: uint16(36969), + 2: uint16(36974), + 3: uint16(36968), + 4: uint16(36973), + 5: uint16(36983), + 6: uint16(37168), + 7: uint16(37165), + 8: uint16(37159), + 9: uint16(37169), + 10: uint16(37255), + 11: uint16(37257), + 12: uint16(37259), + 13: uint16(37251), + 14: uint16(37573), + 15: uint16(37563), + 16: uint16(37559), + 17: uint16(37610), + 18: uint16(37548), + 19: uint16(37604), + 20: uint16(37569), + 21: uint16(37555), + 22: uint16(37564), + 23: uint16(37586), + 24: uint16(37575), + 25: uint16(37616), + 26: uint16(37554), + 27: uint16(38317), + 28: uint16(38321), + 29: uint16(38660), + 30: uint16(38662), + 31: uint16(38663), + 32: uint16(38665), + 33: uint16(38752), + 34: uint16(38797), + 35: uint16(38795), + 36: uint16(38799), + 37: uint16(38945), + 38: uint16(38955), + 39: uint16(38940), + 40: uint16(39091), + 41: uint16(39178), + 42: uint16(39187), + 43: uint16(39186), + 44: uint16(39192), + 45: uint16(39389), + 46: uint16(39376), + 47: uint16(39391), + 48: uint16(39387), + 49: uint16(39377), + 50: uint16(39381), + 51: uint16(39378), + 52: uint16(39385), + 53: uint16(39607), + 54: uint16(39662), + 55: uint16(39663), + 56: uint16(39719), + 57: uint16(39749), + 58: uint16(39748), + 59: uint16(39799), + 60: uint16(39791), + 61: uint16(40198), + 62: uint16(40201), + 63: uint16(40195), + 64: uint16(40617), + 65: uint16(40638), + 66: uint16(40654), + 67: uint16(22696), + 68: uint16(40786), + 69: uint16(20754), + 70: uint16(20760), + 71: uint16(20756), + 72: uint16(20752), + 73: uint16(20757), + 74: uint16(20864), + 75: uint16(20906), + 76: uint16(20957), + 77: uint16(21137), + 78: uint16(21139), + 79: uint16(21235), + 80: uint16(22105), + 81: uint16(22123), + 82: uint16(22137), + 83: uint16(22121), + 84: uint16(22116), + 85: uint16(22136), + 86: uint16(22122), + 87: uint16(22120), + 88: uint16(22117), + 89: uint16(22129), + 90: uint16(22127), + 91: uint16(22124), + 92: uint16(22114), + 93: uint16(22134), + 94: uint16(22721), + 95: uint16(22718), + 96: uint16(22727), + 97: uint16(22725), + 98: uint16(22894), + 99: uint16(23325), + 100: uint16(23348), + 101: uint16(23416), + 102: uint16(23536), + 103: uint16(23566), + 104: uint16(24394), + 105: uint16(25010), + 106: uint16(24977), + 107: uint16(25001), + 108: uint16(24970), + 109: uint16(25037), + 110: uint16(25014), + 111: uint16(25022), + 112: uint16(25034), + 113: uint16(25032), + 114: uint16(25136), + 115: uint16(25797), + 116: uint16(25793), + 117: uint16(25803), + 118: uint16(25787), + 119: uint16(25788), + 120: uint16(25818), + 121: uint16(25796), + 122: uint16(25799), + 123: uint16(25794), + 124: uint16(25805), + 125: uint16(25791), + 126: uint16(25810), + 127: uint16(25812), + 128: uint16(25790), + 129: uint16(25972), + 130: uint16(26310), + 131: uint16(26313), + 132: uint16(26297), + 133: uint16(26308), + 134: uint16(26311), + 135: uint16(26296), + 136: uint16(27197), + 137: uint16(27192), + 138: uint16(27194), + 139: uint16(27225), + 140: uint16(27243), + 141: uint16(27224), + 142: uint16(27193), + 143: uint16(27204), + 144: uint16(27234), + 145: uint16(27233), + 146: uint16(27211), + 147: uint16(27207), + 148: uint16(27189), + 149: uint16(27231), + 150: uint16(27208), + 151: uint16(27481), + 152: uint16(27511), + 153: uint16(27653), + 154: uint16(28610), + 155: uint16(28593), + 156: uint16(28577), + }, + 30: { + 0: uint16(28611), + 1: uint16(28580), + 2: uint16(28609), + 3: uint16(28583), + 4: uint16(28595), + 5: uint16(28608), + 6: uint16(28601), + 7: uint16(28598), + 8: uint16(28582), + 9: uint16(28576), + 10: uint16(28596), + 11: uint16(29118), + 12: uint16(29129), + 13: uint16(29136), + 14: uint16(29138), + 15: uint16(29128), + 16: uint16(29141), + 17: uint16(29113), + 18: uint16(29134), + 19: uint16(29145), + 20: uint16(29148), + 21: uint16(29123), + 22: uint16(29124), + 23: uint16(29544), + 24: uint16(29852), + 25: uint16(29859), + 26: uint16(29848), + 27: uint16(29855), + 28: uint16(29854), + 29: uint16(29922), + 30: uint16(29964), + 31: uint16(29965), + 32: uint16(30260), + 33: uint16(30264), + 34: uint16(30266), + 35: uint16(30439), + 36: uint16(30437), + 37: uint16(30624), + 38: uint16(30622), + 39: uint16(30623), + 40: uint16(30629), + 41: uint16(30952), + 42: uint16(30938), + 43: uint16(30956), + 44: uint16(30951), + 45: uint16(31142), + 46: uint16(31309), + 47: uint16(31310), + 48: uint16(31302), + 49: uint16(31308), + 50: uint16(31307), + 51: uint16(31418), + 52: uint16(31705), + 53: uint16(31761), + 54: uint16(31689), + 55: uint16(31716), + 56: uint16(31707), + 57: uint16(31713), + 58: uint16(31721), + 59: uint16(31718), + 60: uint16(31957), + 61: uint16(31958), + 62: uint16(32266), + 63: uint16(32273), + 64: uint16(32264), + 65: uint16(32283), + 66: uint16(32291), + 67: uint16(32286), + 68: uint16(32285), + 69: uint16(32265), + 70: uint16(32272), + 71: uint16(32633), + 72: uint16(32690), + 73: uint16(32752), + 74: uint16(32753), + 75: uint16(32750), + 76: uint16(32808), + 77: uint16(33203), + 78: uint16(33193), + 79: uint16(33192), + 80: uint16(33275), + 81: uint16(33288), + 82: uint16(33368), + 83: uint16(33369), + 84: uint16(34122), + 85: uint16(34137), + 86: uint16(34120), + 87: uint16(34152), + 88: uint16(34153), + 89: uint16(34115), + 90: uint16(34121), + 91: uint16(34157), + 92: uint16(34154), + 93: uint16(34142), + 94: uint16(34691), + 95: uint16(34719), + 96: uint16(34718), + 97: uint16(34722), + 98: uint16(34701), + 99: uint16(34913), + 100: uint16(35114), + 101: uint16(35122), + 102: uint16(35109), + 103: uint16(35115), + 104: uint16(35105), + 105: uint16(35242), + 106: uint16(35238), + 107: uint16(35558), + 108: uint16(35578), + 109: uint16(35563), + 110: uint16(35569), + 111: uint16(35584), + 112: uint16(35548), + 113: uint16(35559), + 114: uint16(35566), + 115: uint16(35582), + 116: uint16(35585), + 117: uint16(35586), + 118: uint16(35575), + 119: uint16(35565), + 120: uint16(35571), + 121: uint16(35574), + 122: uint16(35580), + 123: uint16(35947), + 124: uint16(35949), + 125: uint16(35987), + 126: uint16(36084), + 127: uint16(36420), + 128: uint16(36401), + 129: uint16(36404), + 130: uint16(36418), + 131: uint16(36409), + 132: uint16(36405), + 133: uint16(36667), + 134: uint16(36655), + 135: uint16(36664), + 136: uint16(36659), + 137: uint16(36776), + 138: uint16(36774), + 139: uint16(36981), + 140: uint16(36980), + 141: uint16(36984), + 142: uint16(36978), + 143: uint16(36988), + 144: uint16(36986), + 145: uint16(37172), + 146: uint16(37266), + 147: uint16(37664), + 148: uint16(37686), + 149: uint16(37624), + 150: uint16(37683), + 151: uint16(37679), + 152: uint16(37666), + 153: uint16(37628), + 154: uint16(37675), + 155: uint16(37636), + 156: uint16(37658), + }, + 31: { + 0: uint16(37648), + 1: uint16(37670), + 2: uint16(37665), + 3: uint16(37653), + 4: uint16(37678), + 5: uint16(37657), + 6: uint16(38331), + 7: uint16(38567), + 8: uint16(38568), + 9: uint16(38570), + 10: uint16(38613), + 11: uint16(38670), + 12: uint16(38673), + 13: uint16(38678), + 14: uint16(38669), + 15: uint16(38675), + 16: uint16(38671), + 17: uint16(38747), + 18: uint16(38748), + 19: uint16(38758), + 20: uint16(38808), + 21: uint16(38960), + 22: uint16(38968), + 23: uint16(38971), + 24: uint16(38967), + 25: uint16(38957), + 26: uint16(38969), + 27: uint16(38948), + 28: uint16(39184), + 29: uint16(39208), + 30: uint16(39198), + 31: uint16(39195), + 32: uint16(39201), + 33: uint16(39194), + 34: uint16(39405), + 35: uint16(39394), + 36: uint16(39409), + 37: uint16(39608), + 38: uint16(39612), + 39: uint16(39675), + 40: uint16(39661), + 41: uint16(39720), + 42: uint16(39825), + 43: uint16(40213), + 44: uint16(40227), + 45: uint16(40230), + 46: uint16(40232), + 47: uint16(40210), + 48: uint16(40219), + 49: uint16(40664), + 50: uint16(40660), + 51: uint16(40845), + 52: uint16(40860), + 53: uint16(20778), + 54: uint16(20767), + 55: uint16(20769), + 56: uint16(20786), + 57: uint16(21237), + 58: uint16(22158), + 59: uint16(22144), + 60: uint16(22160), + 61: uint16(22149), + 62: uint16(22151), + 63: uint16(22159), + 64: uint16(22741), + 65: uint16(22739), + 66: uint16(22737), + 67: uint16(22734), + 68: uint16(23344), + 69: uint16(23338), + 70: uint16(23332), + 71: uint16(23418), + 72: uint16(23607), + 73: uint16(23656), + 74: uint16(23996), + 75: uint16(23994), + 76: uint16(23997), + 77: uint16(23992), + 78: uint16(24171), + 79: uint16(24396), + 80: uint16(24509), + 81: uint16(25033), + 82: uint16(25026), + 83: uint16(25031), + 84: uint16(25062), + 85: uint16(25035), + 86: uint16(25138), + 87: uint16(25140), + 88: uint16(25806), + 89: uint16(25802), + 90: uint16(25816), + 91: uint16(25824), + 92: uint16(25840), + 93: uint16(25830), + 94: uint16(25836), + 95: uint16(25841), + 96: uint16(25826), + 97: uint16(25837), + 98: uint16(25986), + 99: uint16(25987), + 100: uint16(26329), + 101: uint16(26326), + 102: uint16(27264), + 103: uint16(27284), + 104: uint16(27268), + 105: uint16(27298), + 106: uint16(27292), + 107: uint16(27355), + 108: uint16(27299), + 109: uint16(27262), + 110: uint16(27287), + 111: uint16(27280), + 112: uint16(27296), + 113: uint16(27484), + 114: uint16(27566), + 115: uint16(27610), + 116: uint16(27656), + 117: uint16(28632), + 118: uint16(28657), + 119: uint16(28639), + 120: uint16(28640), + 121: uint16(28635), + 122: uint16(28644), + 123: uint16(28651), + 124: uint16(28655), + 125: uint16(28544), + 126: uint16(28652), + 127: uint16(28641), + 128: uint16(28649), + 129: uint16(28629), + 130: uint16(28654), + 131: uint16(28656), + 132: uint16(29159), + 133: uint16(29151), + 134: uint16(29166), + 135: uint16(29158), + 136: uint16(29157), + 137: uint16(29165), + 138: uint16(29164), + 139: uint16(29172), + 140: uint16(29152), + 141: uint16(29237), + 142: uint16(29254), + 143: uint16(29552), + 144: uint16(29554), + 145: uint16(29865), + 146: uint16(29872), + 147: uint16(29862), + 148: uint16(29864), + 149: uint16(30278), + 150: uint16(30274), + 151: uint16(30284), + 152: uint16(30442), + 153: uint16(30643), + 154: uint16(30634), + 155: uint16(30640), + 156: uint16(30636), + }, + 32: { + 0: uint16(30631), + 1: uint16(30637), + 2: uint16(30703), + 3: uint16(30967), + 4: uint16(30970), + 5: uint16(30964), + 6: uint16(30959), + 7: uint16(30977), + 8: uint16(31143), + 9: uint16(31146), + 10: uint16(31319), + 11: uint16(31423), + 12: uint16(31751), + 13: uint16(31757), + 14: uint16(31742), + 15: uint16(31735), + 16: uint16(31756), + 17: uint16(31712), + 18: uint16(31968), + 19: uint16(31964), + 20: uint16(31966), + 21: uint16(31970), + 22: uint16(31967), + 23: uint16(31961), + 24: uint16(31965), + 25: uint16(32302), + 26: uint16(32318), + 27: uint16(32326), + 28: uint16(32311), + 29: uint16(32306), + 30: uint16(32323), + 31: uint16(32299), + 32: uint16(32317), + 33: uint16(32305), + 34: uint16(32325), + 35: uint16(32321), + 36: uint16(32308), + 37: uint16(32313), + 38: uint16(32328), + 39: uint16(32309), + 40: uint16(32319), + 41: uint16(32303), + 42: uint16(32580), + 43: uint16(32755), + 44: uint16(32764), + 45: uint16(32881), + 46: uint16(32882), + 47: uint16(32880), + 48: uint16(32879), + 49: uint16(32883), + 50: uint16(33222), + 51: uint16(33219), + 52: uint16(33210), + 53: uint16(33218), + 54: uint16(33216), + 55: uint16(33215), + 56: uint16(33213), + 57: uint16(33225), + 58: uint16(33214), + 59: uint16(33256), + 60: uint16(33289), + 61: uint16(33393), + 62: uint16(34218), + 63: uint16(34180), + 64: uint16(34174), + 65: uint16(34204), + 66: uint16(34193), + 67: uint16(34196), + 68: uint16(34223), + 69: uint16(34203), + 70: uint16(34183), + 71: uint16(34216), + 72: uint16(34186), + 73: uint16(34407), + 74: uint16(34752), + 75: uint16(34769), + 76: uint16(34739), + 77: uint16(34770), + 78: uint16(34758), + 79: uint16(34731), + 80: uint16(34747), + 81: uint16(34746), + 82: uint16(34760), + 83: uint16(34763), + 84: uint16(35131), + 85: uint16(35126), + 86: uint16(35140), + 87: uint16(35128), + 88: uint16(35133), + 89: uint16(35244), + 90: uint16(35598), + 91: uint16(35607), + 92: uint16(35609), + 93: uint16(35611), + 94: uint16(35594), + 95: uint16(35616), + 96: uint16(35613), + 97: uint16(35588), + 98: uint16(35600), + 99: uint16(35905), + 100: uint16(35903), + 101: uint16(35955), + 102: uint16(36090), + 103: uint16(36093), + 104: uint16(36092), + 105: uint16(36088), + 106: uint16(36091), + 107: uint16(36264), + 108: uint16(36425), + 109: uint16(36427), + 110: uint16(36424), + 111: uint16(36426), + 112: uint16(36676), + 113: uint16(36670), + 114: uint16(36674), + 115: uint16(36677), + 116: uint16(36671), + 117: uint16(36991), + 118: uint16(36989), + 119: uint16(36996), + 120: uint16(36993), + 121: uint16(36994), + 122: uint16(36992), + 123: uint16(37177), + 124: uint16(37283), + 125: uint16(37278), + 126: uint16(37276), + 127: uint16(37709), + 128: uint16(37762), + 129: uint16(37672), + 130: uint16(37749), + 131: uint16(37706), + 132: uint16(37733), + 133: uint16(37707), + 134: uint16(37656), + 135: uint16(37758), + 136: uint16(37740), + 137: uint16(37723), + 138: uint16(37744), + 139: uint16(37722), + 140: uint16(37716), + 141: uint16(38346), + 142: uint16(38347), + 143: uint16(38348), + 144: uint16(38344), + 145: uint16(38342), + 146: uint16(38577), + 147: uint16(38584), + 148: uint16(38614), + 149: uint16(38684), + 150: uint16(38686), + 151: uint16(38816), + 152: uint16(38867), + 153: uint16(38982), + 154: uint16(39094), + 155: uint16(39221), + 156: uint16(39425), + }, + 33: { + 0: uint16(39423), + 1: uint16(39854), + 2: uint16(39851), + 3: uint16(39850), + 4: uint16(39853), + 5: uint16(40251), + 6: uint16(40255), + 7: uint16(40587), + 8: uint16(40655), + 9: uint16(40670), + 10: uint16(40668), + 11: uint16(40669), + 12: uint16(40667), + 13: uint16(40766), + 14: uint16(40779), + 15: uint16(21474), + 16: uint16(22165), + 17: uint16(22190), + 18: uint16(22745), + 19: uint16(22744), + 20: uint16(23352), + 21: uint16(24413), + 22: uint16(25059), + 23: uint16(25139), + 24: uint16(25844), + 25: uint16(25842), + 26: uint16(25854), + 27: uint16(25862), + 28: uint16(25850), + 29: uint16(25851), + 30: uint16(25847), + 31: uint16(26039), + 32: uint16(26332), + 33: uint16(26406), + 34: uint16(27315), + 35: uint16(27308), + 36: uint16(27331), + 37: uint16(27323), + 38: uint16(27320), + 39: uint16(27330), + 40: uint16(27310), + 41: uint16(27311), + 42: uint16(27487), + 43: uint16(27512), + 44: uint16(27567), + 45: uint16(28681), + 46: uint16(28683), + 47: uint16(28670), + 48: uint16(28678), + 49: uint16(28666), + 50: uint16(28689), + 51: uint16(28687), + 52: uint16(29179), + 53: uint16(29180), + 54: uint16(29182), + 55: uint16(29176), + 56: uint16(29559), + 57: uint16(29557), + 58: uint16(29863), + 59: uint16(29887), + 60: uint16(29973), + 61: uint16(30294), + 62: uint16(30296), + 63: uint16(30290), + 64: uint16(30653), + 65: uint16(30655), + 66: uint16(30651), + 67: uint16(30652), + 68: uint16(30990), + 69: uint16(31150), + 70: uint16(31329), + 71: uint16(31330), + 72: uint16(31328), + 73: uint16(31428), + 74: uint16(31429), + 75: uint16(31787), + 76: uint16(31783), + 77: uint16(31786), + 78: uint16(31774), + 79: uint16(31779), + 80: uint16(31777), + 81: uint16(31975), + 82: uint16(32340), + 83: uint16(32341), + 84: uint16(32350), + 85: uint16(32346), + 86: uint16(32353), + 87: uint16(32338), + 88: uint16(32345), + 89: uint16(32584), + 90: uint16(32761), + 91: uint16(32763), + 92: uint16(32887), + 93: uint16(32886), + 94: uint16(33229), + 95: uint16(33231), + 96: uint16(33290), + 97: uint16(34255), + 98: uint16(34217), + 99: uint16(34253), + 100: uint16(34256), + 101: uint16(34249), + 102: uint16(34224), + 103: uint16(34234), + 104: uint16(34233), + 105: uint16(34214), + 106: uint16(34799), + 107: uint16(34796), + 108: uint16(34802), + 109: uint16(34784), + 110: uint16(35206), + 111: uint16(35250), + 112: uint16(35316), + 113: uint16(35624), + 114: uint16(35641), + 115: uint16(35628), + 116: uint16(35627), + 117: uint16(35920), + 118: uint16(36101), + 119: uint16(36441), + 120: uint16(36451), + 121: uint16(36454), + 122: uint16(36452), + 123: uint16(36447), + 124: uint16(36437), + 125: uint16(36544), + 126: uint16(36681), + 127: uint16(36685), + 128: uint16(36999), + 129: uint16(36995), + 130: uint16(37000), + 131: uint16(37291), + 132: uint16(37292), + 133: uint16(37328), + 134: uint16(37780), + 135: uint16(37770), + 136: uint16(37782), + 137: uint16(37794), + 138: uint16(37811), + 139: uint16(37806), + 140: uint16(37804), + 141: uint16(37808), + 142: uint16(37784), + 143: uint16(37786), + 144: uint16(37783), + 145: uint16(38356), + 146: uint16(38358), + 147: uint16(38352), + 148: uint16(38357), + 149: uint16(38626), + 150: uint16(38620), + 151: uint16(38617), + 152: uint16(38619), + 153: uint16(38622), + 154: uint16(38692), + 155: uint16(38819), + 156: uint16(38822), + }, + 34: { + 0: uint16(38829), + 1: uint16(38905), + 2: uint16(38989), + 3: uint16(38991), + 4: uint16(38988), + 5: uint16(38990), + 6: uint16(38995), + 7: uint16(39098), + 8: uint16(39230), + 9: uint16(39231), + 10: uint16(39229), + 11: uint16(39214), + 12: uint16(39333), + 13: uint16(39438), + 14: uint16(39617), + 15: uint16(39683), + 16: uint16(39686), + 17: uint16(39759), + 18: uint16(39758), + 19: uint16(39757), + 20: uint16(39882), + 21: uint16(39881), + 22: uint16(39933), + 23: uint16(39880), + 24: uint16(39872), + 25: uint16(40273), + 26: uint16(40285), + 27: uint16(40288), + 28: uint16(40672), + 29: uint16(40725), + 30: uint16(40748), + 31: uint16(20787), + 32: uint16(22181), + 33: uint16(22750), + 34: uint16(22751), + 35: uint16(22754), + 36: uint16(23541), + 37: uint16(40848), + 38: uint16(24300), + 39: uint16(25074), + 40: uint16(25079), + 41: uint16(25078), + 42: uint16(25077), + 43: uint16(25856), + 44: uint16(25871), + 45: uint16(26336), + 46: uint16(26333), + 47: uint16(27365), + 48: uint16(27357), + 49: uint16(27354), + 50: uint16(27347), + 51: uint16(28699), + 52: uint16(28703), + 53: uint16(28712), + 54: uint16(28698), + 55: uint16(28701), + 56: uint16(28693), + 57: uint16(28696), + 58: uint16(29190), + 59: uint16(29197), + 60: uint16(29272), + 61: uint16(29346), + 62: uint16(29560), + 63: uint16(29562), + 64: uint16(29885), + 65: uint16(29898), + 66: uint16(29923), + 67: uint16(30087), + 68: uint16(30086), + 69: uint16(30303), + 70: uint16(30305), + 71: uint16(30663), + 72: uint16(31001), + 73: uint16(31153), + 74: uint16(31339), + 75: uint16(31337), + 76: uint16(31806), + 77: uint16(31807), + 78: uint16(31800), + 79: uint16(31805), + 80: uint16(31799), + 81: uint16(31808), + 82: uint16(32363), + 83: uint16(32365), + 84: uint16(32377), + 85: uint16(32361), + 86: uint16(32362), + 87: uint16(32645), + 88: uint16(32371), + 89: uint16(32694), + 90: uint16(32697), + 91: uint16(32696), + 92: uint16(33240), + 93: uint16(34281), + 94: uint16(34269), + 95: uint16(34282), + 96: uint16(34261), + 97: uint16(34276), + 98: uint16(34277), + 99: uint16(34295), + 100: uint16(34811), + 101: uint16(34821), + 102: uint16(34829), + 103: uint16(34809), + 104: uint16(34814), + 105: uint16(35168), + 106: uint16(35167), + 107: uint16(35158), + 108: uint16(35166), + 109: uint16(35649), + 110: uint16(35676), + 111: uint16(35672), + 112: uint16(35657), + 113: uint16(35674), + 114: uint16(35662), + 115: uint16(35663), + 116: uint16(35654), + 117: uint16(35673), + 118: uint16(36104), + 119: uint16(36106), + 120: uint16(36476), + 121: uint16(36466), + 122: uint16(36487), + 123: uint16(36470), + 124: uint16(36460), + 125: uint16(36474), + 126: uint16(36468), + 127: uint16(36692), + 128: uint16(36686), + 129: uint16(36781), + 130: uint16(37002), + 131: uint16(37003), + 132: uint16(37297), + 133: uint16(37294), + 134: uint16(37857), + 135: uint16(37841), + 136: uint16(37855), + 137: uint16(37827), + 138: uint16(37832), + 139: uint16(37852), + 140: uint16(37853), + 141: uint16(37846), + 142: uint16(37858), + 143: uint16(37837), + 144: uint16(37848), + 145: uint16(37860), + 146: uint16(37847), + 147: uint16(37864), + 148: uint16(38364), + 149: uint16(38580), + 150: uint16(38627), + 151: uint16(38698), + 152: uint16(38695), + 153: uint16(38753), + 154: uint16(38876), + 155: uint16(38907), + 156: uint16(39006), + }, + 35: { + 0: uint16(39000), + 1: uint16(39003), + 2: uint16(39100), + 3: uint16(39237), + 4: uint16(39241), + 5: uint16(39446), + 6: uint16(39449), + 7: uint16(39693), + 8: uint16(39912), + 9: uint16(39911), + 10: uint16(39894), + 11: uint16(39899), + 12: uint16(40329), + 13: uint16(40289), + 14: uint16(40306), + 15: uint16(40298), + 16: uint16(40300), + 17: uint16(40594), + 18: uint16(40599), + 19: uint16(40595), + 20: uint16(40628), + 21: uint16(21240), + 22: uint16(22184), + 23: uint16(22199), + 24: uint16(22198), + 25: uint16(22196), + 26: uint16(22204), + 27: uint16(22756), + 28: uint16(23360), + 29: uint16(23363), + 30: uint16(23421), + 31: uint16(23542), + 32: uint16(24009), + 33: uint16(25080), + 34: uint16(25082), + 35: uint16(25880), + 36: uint16(25876), + 37: uint16(25881), + 38: uint16(26342), + 39: uint16(26407), + 40: uint16(27372), + 41: uint16(28734), + 42: uint16(28720), + 43: uint16(28722), + 44: uint16(29200), + 45: uint16(29563), + 46: uint16(29903), + 47: uint16(30306), + 48: uint16(30309), + 49: uint16(31014), + 50: uint16(31018), + 51: uint16(31020), + 52: uint16(31019), + 53: uint16(31431), + 54: uint16(31478), + 55: uint16(31820), + 56: uint16(31811), + 57: uint16(31821), + 58: uint16(31983), + 59: uint16(31984), + 60: uint16(36782), + 61: uint16(32381), + 62: uint16(32380), + 63: uint16(32386), + 64: uint16(32588), + 65: uint16(32768), + 66: uint16(33242), + 67: uint16(33382), + 68: uint16(34299), + 69: uint16(34297), + 70: uint16(34321), + 71: uint16(34298), + 72: uint16(34310), + 73: uint16(34315), + 74: uint16(34311), + 75: uint16(34314), + 76: uint16(34836), + 77: uint16(34837), + 78: uint16(35172), + 79: uint16(35258), + 80: uint16(35320), + 81: uint16(35696), + 82: uint16(35692), + 83: uint16(35686), + 84: uint16(35695), + 85: uint16(35679), + 86: uint16(35691), + 87: uint16(36111), + 88: uint16(36109), + 89: uint16(36489), + 90: uint16(36481), + 91: uint16(36485), + 92: uint16(36482), + 93: uint16(37300), + 94: uint16(37323), + 95: uint16(37912), + 96: uint16(37891), + 97: uint16(37885), + 98: uint16(38369), + 99: uint16(38704), + 100: uint16(39108), + 101: uint16(39250), + 102: uint16(39249), + 103: uint16(39336), + 104: uint16(39467), + 105: uint16(39472), + 106: uint16(39479), + 107: uint16(39477), + 108: uint16(39955), + 109: uint16(39949), + 110: uint16(40569), + 111: uint16(40629), + 112: uint16(40680), + 113: uint16(40751), + 114: uint16(40799), + 115: uint16(40803), + 116: uint16(40801), + 117: uint16(20791), + 118: uint16(20792), + 119: uint16(22209), + 120: uint16(22208), + 121: uint16(22210), + 122: uint16(22804), + 123: uint16(23660), + 124: uint16(24013), + 125: uint16(25084), + 126: uint16(25086), + 127: uint16(25885), + 128: uint16(25884), + 129: uint16(26005), + 130: uint16(26345), + 131: uint16(27387), + 132: uint16(27396), + 133: uint16(27386), + 134: uint16(27570), + 135: uint16(28748), + 136: uint16(29211), + 137: uint16(29351), + 138: uint16(29910), + 139: uint16(29908), + 140: uint16(30313), + 141: uint16(30675), + 142: uint16(31824), + 143: uint16(32399), + 144: uint16(32396), + 145: uint16(32700), + 146: uint16(34327), + 147: uint16(34349), + 148: uint16(34330), + 149: uint16(34851), + 150: uint16(34850), + 151: uint16(34849), + 152: uint16(34847), + 153: uint16(35178), + 154: uint16(35180), + 155: uint16(35261), + 156: uint16(35700), + }, + 36: { + 0: uint16(35703), + 1: uint16(35709), + 2: uint16(36115), + 3: uint16(36490), + 4: uint16(36493), + 5: uint16(36491), + 6: uint16(36703), + 7: uint16(36783), + 8: uint16(37306), + 9: uint16(37934), + 10: uint16(37939), + 11: uint16(37941), + 12: uint16(37946), + 13: uint16(37944), + 14: uint16(37938), + 15: uint16(37931), + 16: uint16(38370), + 17: uint16(38712), + 18: uint16(38713), + 19: uint16(38706), + 20: uint16(38911), + 21: uint16(39015), + 22: uint16(39013), + 23: uint16(39255), + 24: uint16(39493), + 25: uint16(39491), + 26: uint16(39488), + 27: uint16(39486), + 28: uint16(39631), + 29: uint16(39764), + 30: uint16(39761), + 31: uint16(39981), + 32: uint16(39973), + 33: uint16(40367), + 34: uint16(40372), + 35: uint16(40386), + 36: uint16(40376), + 37: uint16(40605), + 38: uint16(40687), + 39: uint16(40729), + 40: uint16(40796), + 41: uint16(40806), + 42: uint16(40807), + 43: uint16(20796), + 44: uint16(20795), + 45: uint16(22216), + 46: uint16(22218), + 47: uint16(22217), + 48: uint16(23423), + 49: uint16(24020), + 50: uint16(24018), + 51: uint16(24398), + 52: uint16(25087), + 53: uint16(25892), + 54: uint16(27402), + 55: uint16(27489), + 56: uint16(28753), + 57: uint16(28760), + 58: uint16(29568), + 59: uint16(29924), + 60: uint16(30090), + 61: uint16(30318), + 62: uint16(30316), + 63: uint16(31155), + 64: uint16(31840), + 65: uint16(31839), + 66: uint16(32894), + 67: uint16(32893), + 68: uint16(33247), + 69: uint16(35186), + 70: uint16(35183), + 71: uint16(35324), + 72: uint16(35712), + 73: uint16(36118), + 74: uint16(36119), + 75: uint16(36497), + 76: uint16(36499), + 77: uint16(36705), + 78: uint16(37192), + 79: uint16(37956), + 80: uint16(37969), + 81: uint16(37970), + 82: uint16(38717), + 83: uint16(38718), + 84: uint16(38851), + 85: uint16(38849), + 86: uint16(39019), + 87: uint16(39253), + 88: uint16(39509), + 89: uint16(39501), + 90: uint16(39634), + 91: uint16(39706), + 92: uint16(40009), + 93: uint16(39985), + 94: uint16(39998), + 95: uint16(39995), + 96: uint16(40403), + 97: uint16(40407), + 98: uint16(40756), + 99: uint16(40812), + 100: uint16(40810), + 101: uint16(40852), + 102: uint16(22220), + 103: uint16(24022), + 104: uint16(25088), + 105: uint16(25891), + 106: uint16(25899), + 107: uint16(25898), + 108: uint16(26348), + 109: uint16(27408), + 110: uint16(29914), + 111: uint16(31434), + 112: uint16(31844), + 113: uint16(31843), + 114: uint16(31845), + 115: uint16(32403), + 116: uint16(32406), + 117: uint16(32404), + 118: uint16(33250), + 119: uint16(34360), + 120: uint16(34367), + 121: uint16(34865), + 122: uint16(35722), + 123: uint16(37008), + 124: uint16(37007), + 125: uint16(37987), + 126: uint16(37984), + 127: uint16(37988), + 128: uint16(38760), + 129: uint16(39023), + 130: uint16(39260), + 131: uint16(39514), + 132: uint16(39515), + 133: uint16(39511), + 134: uint16(39635), + 135: uint16(39636), + 136: uint16(39633), + 137: uint16(40020), + 138: uint16(40023), + 139: uint16(40022), + 140: uint16(40421), + 141: uint16(40607), + 142: uint16(40692), + 143: uint16(22225), + 144: uint16(22761), + 145: uint16(25900), + 146: uint16(28766), + 147: uint16(30321), + 148: uint16(30322), + 149: uint16(30679), + 150: uint16(32592), + 151: uint16(32648), + 152: uint16(34870), + 153: uint16(34873), + 154: uint16(34914), + 155: uint16(35731), + 156: uint16(35730), + }, + 37: { + 0: uint16(35734), + 1: uint16(33399), + 2: uint16(36123), + 3: uint16(37312), + 4: uint16(37994), + 5: uint16(38722), + 6: uint16(38728), + 7: uint16(38724), + 8: uint16(38854), + 9: uint16(39024), + 10: uint16(39519), + 11: uint16(39714), + 12: uint16(39768), + 13: uint16(40031), + 14: uint16(40441), + 15: uint16(40442), + 16: uint16(40572), + 17: uint16(40573), + 18: uint16(40711), + 19: uint16(40823), + 20: uint16(40818), + 21: uint16(24307), + 22: uint16(27414), + 23: uint16(28771), + 24: uint16(31852), + 25: uint16(31854), + 26: uint16(34875), + 27: uint16(35264), + 28: uint16(36513), + 29: uint16(37313), + 30: uint16(38002), + 31: uint16(38000), + 32: uint16(39025), + 33: uint16(39262), + 34: uint16(39638), + 35: uint16(39715), + 36: uint16(40652), + 37: uint16(28772), + 38: uint16(30682), + 39: uint16(35738), + 40: uint16(38007), + 41: uint16(38857), + 42: uint16(39522), + 43: uint16(39525), + 44: uint16(32412), + 45: uint16(35740), + 46: uint16(36522), + 47: uint16(37317), + 48: uint16(38013), + 49: uint16(38014), + 50: uint16(38012), + 51: uint16(40055), + 52: uint16(40056), + 53: uint16(40695), + 54: uint16(35924), + 55: uint16(38015), + 56: uint16(40474), + 57: uint16(29224), + 58: uint16(39530), + 59: uint16(39729), + 60: uint16(40475), + 61: uint16(40478), + 62: uint16(31858), + 63: uint16(9312), + 64: uint16(9313), + 65: uint16(9314), + 66: uint16(9315), + 67: uint16(9316), + 68: uint16(9317), + 69: uint16(9318), + 70: uint16(9319), + 71: uint16(9320), + 72: uint16(9321), + 73: uint16(9332), + 74: uint16(9333), + 75: uint16(9334), + 76: uint16(9335), + 77: uint16(9336), + 78: uint16(9337), + 79: uint16(9338), + 80: uint16(9339), + 81: uint16(9340), + 82: uint16(9341), + 83: uint16(8560), + 84: uint16(8561), + 85: uint16(8562), + 86: uint16(8563), + 87: uint16(8564), + 88: uint16(8565), + 89: uint16(8566), + 90: uint16(8567), + 91: uint16(8568), + 92: uint16(8569), + 93: uint16(20022), + 94: uint16(20031), + 95: uint16(20101), + 96: uint16(20128), + 97: uint16(20866), + 98: uint16(20886), + 99: uint16(20907), + 100: uint16(21241), + 101: uint16(21304), + 102: uint16(21353), + 103: uint16(21430), + 104: uint16(22794), + 105: uint16(23424), + 106: uint16(24027), + 107: uint16(24186), + 108: uint16(24191), + 109: uint16(24308), + 110: uint16(24400), + 111: uint16(24417), + 112: uint16(25908), + 113: uint16(26080), + 114: uint16(30098), + 115: uint16(30326), + 116: uint16(36789), + 117: uint16(38582), + 118: uint16(168), + 119: uint16(710), + 120: uint16(12541), + 121: uint16(12542), + 122: uint16(12445), + 123: uint16(12446), + 126: uint16(12293), + 127: uint16(12294), + 128: uint16(12295), + 129: uint16(12540), + 130: uint16(65339), + 131: uint16(65341), + 132: uint16(10045), + 133: uint16(12353), + 134: uint16(12354), + 135: uint16(12355), + 136: uint16(12356), + 137: uint16(12357), + 138: uint16(12358), + 139: uint16(12359), + 140: uint16(12360), + 141: uint16(12361), + 142: uint16(12362), + 143: uint16(12363), + 144: uint16(12364), + 145: uint16(12365), + 146: uint16(12366), + 147: uint16(12367), + 148: uint16(12368), + 149: uint16(12369), + 150: uint16(12370), + 151: uint16(12371), + 152: uint16(12372), + 153: uint16(12373), + 154: uint16(12374), + 155: uint16(12375), + 156: uint16(12376), + }, + 38: { + 0: uint16(12377), + 1: uint16(12378), + 2: uint16(12379), + 3: uint16(12380), + 4: uint16(12381), + 5: uint16(12382), + 6: uint16(12383), + 7: uint16(12384), + 8: uint16(12385), + 9: uint16(12386), + 10: uint16(12387), + 11: uint16(12388), + 12: uint16(12389), + 13: uint16(12390), + 14: uint16(12391), + 15: uint16(12392), + 16: uint16(12393), + 17: uint16(12394), + 18: uint16(12395), + 19: uint16(12396), + 20: uint16(12397), + 21: uint16(12398), + 22: uint16(12399), + 23: uint16(12400), + 24: uint16(12401), + 25: uint16(12402), + 26: uint16(12403), + 27: uint16(12404), + 28: uint16(12405), + 29: uint16(12406), + 30: uint16(12407), + 31: uint16(12408), + 32: uint16(12409), + 33: uint16(12410), + 34: uint16(12411), + 35: uint16(12412), + 36: uint16(12413), + 37: uint16(12414), + 38: uint16(12415), + 39: uint16(12416), + 40: uint16(12417), + 41: uint16(12418), + 42: uint16(12419), + 43: uint16(12420), + 44: uint16(12421), + 45: uint16(12422), + 46: uint16(12423), + 47: uint16(12424), + 48: uint16(12425), + 49: uint16(12426), + 50: uint16(12427), + 51: uint16(12428), + 52: uint16(12429), + 53: uint16(12430), + 54: uint16(12431), + 55: uint16(12432), + 56: uint16(12433), + 57: uint16(12434), + 58: uint16(12435), + 59: uint16(12449), + 60: uint16(12450), + 61: uint16(12451), + 62: uint16(12452), + 63: uint16(12453), + 64: uint16(12454), + 65: uint16(12455), + 66: uint16(12456), + 67: uint16(12457), + 68: uint16(12458), + 69: uint16(12459), + 70: uint16(12460), + 71: uint16(12461), + 72: uint16(12462), + 73: uint16(12463), + 74: uint16(12464), + 75: uint16(12465), + 76: uint16(12466), + 77: uint16(12467), + 78: uint16(12468), + 79: uint16(12469), + 80: uint16(12470), + 81: uint16(12471), + 82: uint16(12472), + 83: uint16(12473), + 84: uint16(12474), + 85: uint16(12475), + 86: uint16(12476), + 87: uint16(12477), + 88: uint16(12478), + 89: uint16(12479), + 90: uint16(12480), + 91: uint16(12481), + 92: uint16(12482), + 93: uint16(12483), + 94: uint16(12484), + 95: uint16(12485), + 96: uint16(12486), + 97: uint16(12487), + 98: uint16(12488), + 99: uint16(12489), + 100: uint16(12490), + 101: uint16(12491), + 102: uint16(12492), + 103: uint16(12493), + 104: uint16(12494), + 105: uint16(12495), + 106: uint16(12496), + 107: uint16(12497), + 108: uint16(12498), + 109: uint16(12499), + 110: uint16(12500), + 111: uint16(12501), + 112: uint16(12502), + 113: uint16(12503), + 114: uint16(12504), + 115: uint16(12505), + 116: uint16(12506), + 117: uint16(12507), + 118: uint16(12508), + 119: uint16(12509), + 120: uint16(12510), + 121: uint16(12511), + 122: uint16(12512), + 123: uint16(12513), + 124: uint16(12514), + 125: uint16(12515), + 126: uint16(12516), + 127: uint16(12517), + 128: uint16(12518), + 129: uint16(12519), + 130: uint16(12520), + 131: uint16(12521), + 132: uint16(12522), + 133: uint16(12523), + 134: uint16(12524), + 135: uint16(12525), + 136: uint16(12526), + 137: uint16(12527), + 138: uint16(12528), + 139: uint16(12529), + 140: uint16(12530), + 141: uint16(12531), + 142: uint16(12532), + 143: uint16(12533), + 144: uint16(12534), + 145: uint16(1040), + 146: uint16(1041), + 147: uint16(1042), + 148: uint16(1043), + 149: uint16(1044), + 150: uint16(1045), + 151: uint16(1025), + 152: uint16(1046), + 153: uint16(1047), + 154: uint16(1048), + 155: uint16(1049), + 156: uint16(1050), + }, + 39: { + 0: uint16(1051), + 1: uint16(1052), + 2: uint16(1053), + 3: uint16(1054), + 4: uint16(1055), + 5: uint16(1056), + 6: uint16(1057), + 7: uint16(1058), + 8: uint16(1059), + 9: uint16(1060), + 10: uint16(1061), + 11: uint16(1062), + 12: uint16(1063), + 13: uint16(1064), + 14: uint16(1065), + 15: uint16(1066), + 16: uint16(1067), + 17: uint16(1068), + 18: uint16(1069), + 19: uint16(1070), + 20: uint16(1071), + 21: uint16(1072), + 22: uint16(1073), + 23: uint16(1074), + 24: uint16(1075), + 25: uint16(1076), + 26: uint16(1077), + 27: uint16(1105), + 28: uint16(1078), + 29: uint16(1079), + 30: uint16(1080), + 31: uint16(1081), + 32: uint16(1082), + 33: uint16(1083), + 34: uint16(1084), + 35: uint16(1085), + 36: uint16(1086), + 37: uint16(1087), + 38: uint16(1088), + 39: uint16(1089), + 40: uint16(1090), + 41: uint16(1091), + 42: uint16(1092), + 43: uint16(1093), + 44: uint16(1094), + 45: uint16(1095), + 46: uint16(1096), + 47: uint16(1097), + 48: uint16(1098), + 49: uint16(1099), + 50: uint16(1100), + 51: uint16(1101), + 52: uint16(1102), + 53: uint16(1103), + 54: uint16(8679), + 55: uint16(8632), + 56: uint16(8633), + 57: uint16(12751), + 58: uint16(204), + 59: uint16(20058), + 60: uint16(138), + 61: uint16(20994), + 62: uint16(17553), + 63: uint16(40880), + 64: uint16(20872), + 65: uint16(40881), + 66: uint16(30215), + 107: uint16(65506), + 108: uint16(65508), + 109: uint16(65287), + 110: uint16(65282), + 111: uint16(12849), + 112: uint16(8470), + 113: uint16(8481), + 114: uint16(12443), + 115: uint16(12444), + 116: uint16(11904), + 117: uint16(11908), + 118: uint16(11910), + 119: uint16(11911), + 120: uint16(11912), + 121: uint16(11914), + 122: uint16(11916), + 123: uint16(11917), + 124: uint16(11925), + 125: uint16(11932), + 126: uint16(11933), + 127: uint16(11941), + 128: uint16(11943), + 129: uint16(11946), + 130: uint16(11948), + 131: uint16(11950), + 132: uint16(11958), + 133: uint16(11964), + 134: uint16(11966), + 135: uint16(11974), + 136: uint16(11978), + 137: uint16(11980), + 138: uint16(11981), + 139: uint16(11983), + 140: uint16(11990), + 141: uint16(11991), + 142: uint16(11998), + 143: uint16(12003), + 147: uint16(643), + 148: uint16(592), + 149: uint16(603), + 150: uint16(596), + 151: uint16(629), + 152: uint16(339), + 153: uint16(248), + 154: uint16(331), + 155: uint16(650), + 156: uint16(618), + }, + 40: { + 0: uint16(20034), + 1: uint16(20060), + 2: uint16(20981), + 3: uint16(21274), + 4: uint16(21378), + 5: uint16(19975), + 6: uint16(19980), + 7: uint16(20039), + 8: uint16(20109), + 9: uint16(22231), + 10: uint16(64012), + 11: uint16(23662), + 12: uint16(24435), + 13: uint16(19983), + 14: uint16(20871), + 15: uint16(19982), + 16: uint16(20014), + 17: uint16(20115), + 18: uint16(20162), + 19: uint16(20169), + 20: uint16(20168), + 21: uint16(20888), + 22: uint16(21244), + 23: uint16(21356), + 24: uint16(21433), + 25: uint16(22304), + 26: uint16(22787), + 27: uint16(22828), + 28: uint16(23568), + 29: uint16(24063), + 30: uint16(26081), + 31: uint16(27571), + 32: uint16(27596), + 33: uint16(27668), + 34: uint16(29247), + 35: uint16(20017), + 36: uint16(20028), + 37: uint16(20200), + 38: uint16(20188), + 39: uint16(20201), + 40: uint16(20193), + 41: uint16(20189), + 42: uint16(20186), + 43: uint16(21004), + 44: uint16(21276), + 45: uint16(21324), + 46: uint16(22306), + 47: uint16(22307), + 48: uint16(22807), + 49: uint16(22831), + 50: uint16(23425), + 51: uint16(23428), + 52: uint16(23570), + 53: uint16(23611), + 54: uint16(23668), + 55: uint16(23667), + 56: uint16(24068), + 57: uint16(24192), + 58: uint16(24194), + 59: uint16(24521), + 60: uint16(25097), + 61: uint16(25168), + 62: uint16(27669), + 63: uint16(27702), + 64: uint16(27715), + 65: uint16(27711), + 66: uint16(27707), + 67: uint16(29358), + 68: uint16(29360), + 69: uint16(29578), + 70: uint16(31160), + 71: uint16(32906), + 72: uint16(38430), + 73: uint16(20238), + 74: uint16(20248), + 75: uint16(20268), + 76: uint16(20213), + 77: uint16(20244), + 78: uint16(20209), + 79: uint16(20224), + 80: uint16(20215), + 81: uint16(20232), + 82: uint16(20253), + 83: uint16(20226), + 84: uint16(20229), + 85: uint16(20258), + 86: uint16(20243), + 87: uint16(20228), + 88: uint16(20212), + 89: uint16(20242), + 90: uint16(20913), + 91: uint16(21011), + 92: uint16(21001), + 93: uint16(21008), + 94: uint16(21158), + 95: uint16(21282), + 96: uint16(21279), + 97: uint16(21325), + 98: uint16(21386), + 99: uint16(21511), + 100: uint16(22241), + 101: uint16(22239), + 102: uint16(22318), + 103: uint16(22314), + 104: uint16(22324), + 105: uint16(22844), + 106: uint16(22912), + 107: uint16(22908), + 108: uint16(22917), + 109: uint16(22907), + 110: uint16(22910), + 111: uint16(22903), + 112: uint16(22911), + 113: uint16(23382), + 114: uint16(23573), + 115: uint16(23589), + 116: uint16(23676), + 117: uint16(23674), + 118: uint16(23675), + 119: uint16(23678), + 120: uint16(24031), + 121: uint16(24181), + 122: uint16(24196), + 123: uint16(24322), + 124: uint16(24346), + 125: uint16(24436), + 126: uint16(24533), + 127: uint16(24532), + 128: uint16(24527), + 129: uint16(25180), + 130: uint16(25182), + 131: uint16(25188), + 132: uint16(25185), + 133: uint16(25190), + 134: uint16(25186), + 135: uint16(25177), + 136: uint16(25184), + 137: uint16(25178), + 138: uint16(25189), + 139: uint16(26095), + 140: uint16(26094), + 141: uint16(26430), + 142: uint16(26425), + 143: uint16(26424), + 144: uint16(26427), + 145: uint16(26426), + 146: uint16(26431), + 147: uint16(26428), + 148: uint16(26419), + 149: uint16(27672), + 150: uint16(27718), + 151: uint16(27730), + 152: uint16(27740), + 153: uint16(27727), + 154: uint16(27722), + 155: uint16(27732), + 156: uint16(27723), + }, + 41: { + 0: uint16(27724), + 1: uint16(28785), + 2: uint16(29278), + 3: uint16(29364), + 4: uint16(29365), + 5: uint16(29582), + 6: uint16(29994), + 7: uint16(30335), + 8: uint16(31349), + 9: uint16(32593), + 10: uint16(33400), + 11: uint16(33404), + 12: uint16(33408), + 13: uint16(33405), + 14: uint16(33407), + 15: uint16(34381), + 16: uint16(35198), + 17: uint16(37017), + 18: uint16(37015), + 19: uint16(37016), + 20: uint16(37019), + 21: uint16(37012), + 22: uint16(38434), + 23: uint16(38436), + 24: uint16(38432), + 25: uint16(38435), + 26: uint16(20310), + 27: uint16(20283), + 28: uint16(20322), + 29: uint16(20297), + 30: uint16(20307), + 31: uint16(20324), + 32: uint16(20286), + 33: uint16(20327), + 34: uint16(20306), + 35: uint16(20319), + 36: uint16(20289), + 37: uint16(20312), + 38: uint16(20269), + 39: uint16(20275), + 40: uint16(20287), + 41: uint16(20321), + 42: uint16(20879), + 43: uint16(20921), + 44: uint16(21020), + 45: uint16(21022), + 46: uint16(21025), + 47: uint16(21165), + 48: uint16(21166), + 49: uint16(21257), + 50: uint16(21347), + 51: uint16(21362), + 52: uint16(21390), + 53: uint16(21391), + 54: uint16(21552), + 55: uint16(21559), + 56: uint16(21546), + 57: uint16(21588), + 58: uint16(21573), + 59: uint16(21529), + 60: uint16(21532), + 61: uint16(21541), + 62: uint16(21528), + 63: uint16(21565), + 64: uint16(21583), + 65: uint16(21569), + 66: uint16(21544), + 67: uint16(21540), + 68: uint16(21575), + 69: uint16(22254), + 70: uint16(22247), + 71: uint16(22245), + 72: uint16(22337), + 73: uint16(22341), + 74: uint16(22348), + 75: uint16(22345), + 76: uint16(22347), + 77: uint16(22354), + 78: uint16(22790), + 79: uint16(22848), + 80: uint16(22950), + 81: uint16(22936), + 82: uint16(22944), + 83: uint16(22935), + 84: uint16(22926), + 85: uint16(22946), + 86: uint16(22928), + 87: uint16(22927), + 88: uint16(22951), + 89: uint16(22945), + 90: uint16(23438), + 91: uint16(23442), + 92: uint16(23592), + 93: uint16(23594), + 94: uint16(23693), + 95: uint16(23695), + 96: uint16(23688), + 97: uint16(23691), + 98: uint16(23689), + 99: uint16(23698), + 100: uint16(23690), + 101: uint16(23686), + 102: uint16(23699), + 103: uint16(23701), + 104: uint16(24032), + 105: uint16(24074), + 106: uint16(24078), + 107: uint16(24203), + 108: uint16(24201), + 109: uint16(24204), + 110: uint16(24200), + 111: uint16(24205), + 112: uint16(24325), + 113: uint16(24349), + 114: uint16(24440), + 115: uint16(24438), + 116: uint16(24530), + 117: uint16(24529), + 118: uint16(24528), + 119: uint16(24557), + 120: uint16(24552), + 121: uint16(24558), + 122: uint16(24563), + 123: uint16(24545), + 124: uint16(24548), + 125: uint16(24547), + 126: uint16(24570), + 127: uint16(24559), + 128: uint16(24567), + 129: uint16(24571), + 130: uint16(24576), + 131: uint16(24564), + 132: uint16(25146), + 133: uint16(25219), + 134: uint16(25228), + 135: uint16(25230), + 136: uint16(25231), + 137: uint16(25236), + 138: uint16(25223), + 139: uint16(25201), + 140: uint16(25211), + 141: uint16(25210), + 142: uint16(25200), + 143: uint16(25217), + 144: uint16(25224), + 145: uint16(25207), + 146: uint16(25213), + 147: uint16(25202), + 148: uint16(25204), + 149: uint16(25911), + 150: uint16(26096), + 151: uint16(26100), + 152: uint16(26099), + 153: uint16(26098), + 154: uint16(26101), + 155: uint16(26437), + 156: uint16(26439), + }, + 42: { + 0: uint16(26457), + 1: uint16(26453), + 2: uint16(26444), + 3: uint16(26440), + 4: uint16(26461), + 5: uint16(26445), + 6: uint16(26458), + 7: uint16(26443), + 8: uint16(27600), + 9: uint16(27673), + 10: uint16(27674), + 11: uint16(27768), + 12: uint16(27751), + 13: uint16(27755), + 14: uint16(27780), + 15: uint16(27787), + 16: uint16(27791), + 17: uint16(27761), + 18: uint16(27759), + 19: uint16(27753), + 20: uint16(27802), + 21: uint16(27757), + 22: uint16(27783), + 23: uint16(27797), + 24: uint16(27804), + 25: uint16(27750), + 26: uint16(27763), + 27: uint16(27749), + 28: uint16(27771), + 29: uint16(27790), + 30: uint16(28788), + 31: uint16(28794), + 32: uint16(29283), + 33: uint16(29375), + 34: uint16(29373), + 35: uint16(29379), + 36: uint16(29382), + 37: uint16(29377), + 38: uint16(29370), + 39: uint16(29381), + 40: uint16(29589), + 41: uint16(29591), + 42: uint16(29587), + 43: uint16(29588), + 44: uint16(29586), + 45: uint16(30010), + 46: uint16(30009), + 47: uint16(30100), + 48: uint16(30101), + 49: uint16(30337), + 50: uint16(31037), + 51: uint16(32820), + 52: uint16(32917), + 53: uint16(32921), + 54: uint16(32912), + 55: uint16(32914), + 56: uint16(32924), + 57: uint16(33424), + 58: uint16(33423), + 59: uint16(33413), + 60: uint16(33422), + 61: uint16(33425), + 62: uint16(33427), + 63: uint16(33418), + 64: uint16(33411), + 65: uint16(33412), + 66: uint16(35960), + 67: uint16(36809), + 68: uint16(36799), + 69: uint16(37023), + 70: uint16(37025), + 71: uint16(37029), + 72: uint16(37022), + 73: uint16(37031), + 74: uint16(37024), + 75: uint16(38448), + 76: uint16(38440), + 77: uint16(38447), + 78: uint16(38445), + 79: uint16(20019), + 80: uint16(20376), + 81: uint16(20348), + 82: uint16(20357), + 83: uint16(20349), + 84: uint16(20352), + 85: uint16(20359), + 86: uint16(20342), + 87: uint16(20340), + 88: uint16(20361), + 89: uint16(20356), + 90: uint16(20343), + 91: uint16(20300), + 92: uint16(20375), + 93: uint16(20330), + 94: uint16(20378), + 95: uint16(20345), + 96: uint16(20353), + 97: uint16(20344), + 98: uint16(20368), + 99: uint16(20380), + 100: uint16(20372), + 101: uint16(20382), + 102: uint16(20370), + 103: uint16(20354), + 104: uint16(20373), + 105: uint16(20331), + 106: uint16(20334), + 107: uint16(20894), + 108: uint16(20924), + 109: uint16(20926), + 110: uint16(21045), + 111: uint16(21042), + 112: uint16(21043), + 113: uint16(21062), + 114: uint16(21041), + 115: uint16(21180), + 116: uint16(21258), + 117: uint16(21259), + 118: uint16(21308), + 119: uint16(21394), + 120: uint16(21396), + 121: uint16(21639), + 122: uint16(21631), + 123: uint16(21633), + 124: uint16(21649), + 125: uint16(21634), + 126: uint16(21640), + 127: uint16(21611), + 128: uint16(21626), + 129: uint16(21630), + 130: uint16(21605), + 131: uint16(21612), + 132: uint16(21620), + 133: uint16(21606), + 134: uint16(21645), + 135: uint16(21615), + 136: uint16(21601), + 137: uint16(21600), + 138: uint16(21656), + 139: uint16(21603), + 140: uint16(21607), + 141: uint16(21604), + 142: uint16(22263), + 143: uint16(22265), + 144: uint16(22383), + 145: uint16(22386), + 146: uint16(22381), + 147: uint16(22379), + 148: uint16(22385), + 149: uint16(22384), + 150: uint16(22390), + 151: uint16(22400), + 152: uint16(22389), + 153: uint16(22395), + 154: uint16(22387), + 155: uint16(22388), + 156: uint16(22370), + }, + 43: { + 0: uint16(22376), + 1: uint16(22397), + 2: uint16(22796), + 3: uint16(22853), + 4: uint16(22965), + 5: uint16(22970), + 6: uint16(22991), + 7: uint16(22990), + 8: uint16(22962), + 9: uint16(22988), + 10: uint16(22977), + 11: uint16(22966), + 12: uint16(22972), + 13: uint16(22979), + 14: uint16(22998), + 15: uint16(22961), + 16: uint16(22973), + 17: uint16(22976), + 18: uint16(22984), + 19: uint16(22964), + 20: uint16(22983), + 21: uint16(23394), + 22: uint16(23397), + 23: uint16(23443), + 24: uint16(23445), + 25: uint16(23620), + 26: uint16(23623), + 27: uint16(23726), + 28: uint16(23716), + 29: uint16(23712), + 30: uint16(23733), + 31: uint16(23727), + 32: uint16(23720), + 33: uint16(23724), + 34: uint16(23711), + 35: uint16(23715), + 36: uint16(23725), + 37: uint16(23714), + 38: uint16(23722), + 39: uint16(23719), + 40: uint16(23709), + 41: uint16(23717), + 42: uint16(23734), + 43: uint16(23728), + 44: uint16(23718), + 45: uint16(24087), + 46: uint16(24084), + 47: uint16(24089), + 48: uint16(24360), + 49: uint16(24354), + 50: uint16(24355), + 51: uint16(24356), + 52: uint16(24404), + 53: uint16(24450), + 54: uint16(24446), + 55: uint16(24445), + 56: uint16(24542), + 57: uint16(24549), + 58: uint16(24621), + 59: uint16(24614), + 60: uint16(24601), + 61: uint16(24626), + 62: uint16(24587), + 63: uint16(24628), + 64: uint16(24586), + 65: uint16(24599), + 66: uint16(24627), + 67: uint16(24602), + 68: uint16(24606), + 69: uint16(24620), + 70: uint16(24610), + 71: uint16(24589), + 72: uint16(24592), + 73: uint16(24622), + 74: uint16(24595), + 75: uint16(24593), + 76: uint16(24588), + 77: uint16(24585), + 78: uint16(24604), + 79: uint16(25108), + 80: uint16(25149), + 81: uint16(25261), + 82: uint16(25268), + 83: uint16(25297), + 84: uint16(25278), + 85: uint16(25258), + 86: uint16(25270), + 87: uint16(25290), + 88: uint16(25262), + 89: uint16(25267), + 90: uint16(25263), + 91: uint16(25275), + 92: uint16(25257), + 93: uint16(25264), + 94: uint16(25272), + 95: uint16(25917), + 96: uint16(26024), + 97: uint16(26043), + 98: uint16(26121), + 99: uint16(26108), + 100: uint16(26116), + 101: uint16(26130), + 102: uint16(26120), + 103: uint16(26107), + 104: uint16(26115), + 105: uint16(26123), + 106: uint16(26125), + 107: uint16(26117), + 108: uint16(26109), + 109: uint16(26129), + 110: uint16(26128), + 111: uint16(26358), + 112: uint16(26378), + 113: uint16(26501), + 114: uint16(26476), + 115: uint16(26510), + 116: uint16(26514), + 117: uint16(26486), + 118: uint16(26491), + 119: uint16(26520), + 120: uint16(26502), + 121: uint16(26500), + 122: uint16(26484), + 123: uint16(26509), + 124: uint16(26508), + 125: uint16(26490), + 126: uint16(26527), + 127: uint16(26513), + 128: uint16(26521), + 129: uint16(26499), + 130: uint16(26493), + 131: uint16(26497), + 132: uint16(26488), + 133: uint16(26489), + 134: uint16(26516), + 135: uint16(27429), + 136: uint16(27520), + 137: uint16(27518), + 138: uint16(27614), + 139: uint16(27677), + 140: uint16(27795), + 141: uint16(27884), + 142: uint16(27883), + 143: uint16(27886), + 144: uint16(27865), + 145: uint16(27830), + 146: uint16(27860), + 147: uint16(27821), + 148: uint16(27879), + 149: uint16(27831), + 150: uint16(27856), + 151: uint16(27842), + 152: uint16(27834), + 153: uint16(27843), + 154: uint16(27846), + 155: uint16(27885), + 156: uint16(27890), + }, + 44: { + 0: uint16(27858), + 1: uint16(27869), + 2: uint16(27828), + 3: uint16(27786), + 4: uint16(27805), + 5: uint16(27776), + 6: uint16(27870), + 7: uint16(27840), + 8: uint16(27952), + 9: uint16(27853), + 10: uint16(27847), + 11: uint16(27824), + 12: uint16(27897), + 13: uint16(27855), + 14: uint16(27881), + 15: uint16(27857), + 16: uint16(28820), + 17: uint16(28824), + 18: uint16(28805), + 19: uint16(28819), + 20: uint16(28806), + 21: uint16(28804), + 22: uint16(28817), + 23: uint16(28822), + 24: uint16(28802), + 25: uint16(28826), + 26: uint16(28803), + 27: uint16(29290), + 28: uint16(29398), + 29: uint16(29387), + 30: uint16(29400), + 31: uint16(29385), + 32: uint16(29404), + 33: uint16(29394), + 34: uint16(29396), + 35: uint16(29402), + 36: uint16(29388), + 37: uint16(29393), + 38: uint16(29604), + 39: uint16(29601), + 40: uint16(29613), + 41: uint16(29606), + 42: uint16(29602), + 43: uint16(29600), + 44: uint16(29612), + 45: uint16(29597), + 46: uint16(29917), + 47: uint16(29928), + 48: uint16(30015), + 49: uint16(30016), + 50: uint16(30014), + 51: uint16(30092), + 52: uint16(30104), + 53: uint16(30383), + 54: uint16(30451), + 55: uint16(30449), + 56: uint16(30448), + 57: uint16(30453), + 58: uint16(30712), + 59: uint16(30716), + 60: uint16(30713), + 61: uint16(30715), + 62: uint16(30714), + 63: uint16(30711), + 64: uint16(31042), + 65: uint16(31039), + 66: uint16(31173), + 67: uint16(31352), + 68: uint16(31355), + 69: uint16(31483), + 70: uint16(31861), + 71: uint16(31997), + 72: uint16(32821), + 73: uint16(32911), + 74: uint16(32942), + 75: uint16(32931), + 76: uint16(32952), + 77: uint16(32949), + 78: uint16(32941), + 79: uint16(33312), + 80: uint16(33440), + 81: uint16(33472), + 82: uint16(33451), + 83: uint16(33434), + 84: uint16(33432), + 85: uint16(33435), + 86: uint16(33461), + 87: uint16(33447), + 88: uint16(33454), + 89: uint16(33468), + 90: uint16(33438), + 91: uint16(33466), + 92: uint16(33460), + 93: uint16(33448), + 94: uint16(33441), + 95: uint16(33449), + 96: uint16(33474), + 97: uint16(33444), + 98: uint16(33475), + 99: uint16(33462), + 100: uint16(33442), + 101: uint16(34416), + 102: uint16(34415), + 103: uint16(34413), + 104: uint16(34414), + 105: uint16(35926), + 106: uint16(36818), + 107: uint16(36811), + 108: uint16(36819), + 109: uint16(36813), + 110: uint16(36822), + 111: uint16(36821), + 112: uint16(36823), + 113: uint16(37042), + 114: uint16(37044), + 115: uint16(37039), + 116: uint16(37043), + 117: uint16(37040), + 118: uint16(38457), + 119: uint16(38461), + 120: uint16(38460), + 121: uint16(38458), + 122: uint16(38467), + 123: uint16(20429), + 124: uint16(20421), + 125: uint16(20435), + 126: uint16(20402), + 127: uint16(20425), + 128: uint16(20427), + 129: uint16(20417), + 130: uint16(20436), + 131: uint16(20444), + 132: uint16(20441), + 133: uint16(20411), + 134: uint16(20403), + 135: uint16(20443), + 136: uint16(20423), + 137: uint16(20438), + 138: uint16(20410), + 139: uint16(20416), + 140: uint16(20409), + 141: uint16(20460), + 142: uint16(21060), + 143: uint16(21065), + 144: uint16(21184), + 145: uint16(21186), + 146: uint16(21309), + 147: uint16(21372), + 148: uint16(21399), + 149: uint16(21398), + 150: uint16(21401), + 151: uint16(21400), + 152: uint16(21690), + 153: uint16(21665), + 154: uint16(21677), + 155: uint16(21669), + 156: uint16(21711), + }, + 45: { + 0: uint16(21699), + 1: uint16(33549), + 2: uint16(21687), + 3: uint16(21678), + 4: uint16(21718), + 5: uint16(21686), + 6: uint16(21701), + 7: uint16(21702), + 8: uint16(21664), + 9: uint16(21616), + 10: uint16(21692), + 11: uint16(21666), + 12: uint16(21694), + 13: uint16(21618), + 14: uint16(21726), + 15: uint16(21680), + 16: uint16(22453), + 17: uint16(22430), + 18: uint16(22431), + 19: uint16(22436), + 20: uint16(22412), + 21: uint16(22423), + 22: uint16(22429), + 23: uint16(22427), + 24: uint16(22420), + 25: uint16(22424), + 26: uint16(22415), + 27: uint16(22425), + 28: uint16(22437), + 29: uint16(22426), + 30: uint16(22421), + 31: uint16(22772), + 32: uint16(22797), + 33: uint16(22867), + 34: uint16(23009), + 35: uint16(23006), + 36: uint16(23022), + 37: uint16(23040), + 38: uint16(23025), + 39: uint16(23005), + 40: uint16(23034), + 41: uint16(23037), + 42: uint16(23036), + 43: uint16(23030), + 44: uint16(23012), + 45: uint16(23026), + 46: uint16(23031), + 47: uint16(23003), + 48: uint16(23017), + 49: uint16(23027), + 50: uint16(23029), + 51: uint16(23008), + 52: uint16(23038), + 53: uint16(23028), + 54: uint16(23021), + 55: uint16(23464), + 56: uint16(23628), + 57: uint16(23760), + 58: uint16(23768), + 59: uint16(23756), + 60: uint16(23767), + 61: uint16(23755), + 62: uint16(23771), + 63: uint16(23774), + 64: uint16(23770), + 65: uint16(23753), + 66: uint16(23751), + 67: uint16(23754), + 68: uint16(23766), + 69: uint16(23763), + 70: uint16(23764), + 71: uint16(23759), + 72: uint16(23752), + 73: uint16(23750), + 74: uint16(23758), + 75: uint16(23775), + 76: uint16(23800), + 77: uint16(24057), + 78: uint16(24097), + 79: uint16(24098), + 80: uint16(24099), + 81: uint16(24096), + 82: uint16(24100), + 83: uint16(24240), + 84: uint16(24228), + 85: uint16(24226), + 86: uint16(24219), + 87: uint16(24227), + 88: uint16(24229), + 89: uint16(24327), + 90: uint16(24366), + 91: uint16(24406), + 92: uint16(24454), + 93: uint16(24631), + 94: uint16(24633), + 95: uint16(24660), + 96: uint16(24690), + 97: uint16(24670), + 98: uint16(24645), + 99: uint16(24659), + 100: uint16(24647), + 101: uint16(24649), + 102: uint16(24667), + 103: uint16(24652), + 104: uint16(24640), + 105: uint16(24642), + 106: uint16(24671), + 107: uint16(24612), + 108: uint16(24644), + 109: uint16(24664), + 110: uint16(24678), + 111: uint16(24686), + 112: uint16(25154), + 113: uint16(25155), + 114: uint16(25295), + 115: uint16(25357), + 116: uint16(25355), + 117: uint16(25333), + 118: uint16(25358), + 119: uint16(25347), + 120: uint16(25323), + 121: uint16(25337), + 122: uint16(25359), + 123: uint16(25356), + 124: uint16(25336), + 125: uint16(25334), + 126: uint16(25344), + 127: uint16(25363), + 128: uint16(25364), + 129: uint16(25338), + 130: uint16(25365), + 131: uint16(25339), + 132: uint16(25328), + 133: uint16(25921), + 134: uint16(25923), + 135: uint16(26026), + 136: uint16(26047), + 137: uint16(26166), + 138: uint16(26145), + 139: uint16(26162), + 140: uint16(26165), + 141: uint16(26140), + 142: uint16(26150), + 143: uint16(26146), + 144: uint16(26163), + 145: uint16(26155), + 146: uint16(26170), + 147: uint16(26141), + 148: uint16(26164), + 149: uint16(26169), + 150: uint16(26158), + 151: uint16(26383), + 152: uint16(26384), + 153: uint16(26561), + 154: uint16(26610), + 155: uint16(26568), + 156: uint16(26554), + }, + 46: { + 0: uint16(26588), + 1: uint16(26555), + 2: uint16(26616), + 3: uint16(26584), + 4: uint16(26560), + 5: uint16(26551), + 6: uint16(26565), + 7: uint16(26603), + 8: uint16(26596), + 9: uint16(26591), + 10: uint16(26549), + 11: uint16(26573), + 12: uint16(26547), + 13: uint16(26615), + 14: uint16(26614), + 15: uint16(26606), + 16: uint16(26595), + 17: uint16(26562), + 18: uint16(26553), + 19: uint16(26574), + 20: uint16(26599), + 21: uint16(26608), + 22: uint16(26546), + 23: uint16(26620), + 24: uint16(26566), + 25: uint16(26605), + 26: uint16(26572), + 27: uint16(26542), + 28: uint16(26598), + 29: uint16(26587), + 30: uint16(26618), + 31: uint16(26569), + 32: uint16(26570), + 33: uint16(26563), + 34: uint16(26602), + 35: uint16(26571), + 36: uint16(27432), + 37: uint16(27522), + 38: uint16(27524), + 39: uint16(27574), + 40: uint16(27606), + 41: uint16(27608), + 42: uint16(27616), + 43: uint16(27680), + 44: uint16(27681), + 45: uint16(27944), + 46: uint16(27956), + 47: uint16(27949), + 48: uint16(27935), + 49: uint16(27964), + 50: uint16(27967), + 51: uint16(27922), + 52: uint16(27914), + 53: uint16(27866), + 54: uint16(27955), + 55: uint16(27908), + 56: uint16(27929), + 57: uint16(27962), + 58: uint16(27930), + 59: uint16(27921), + 60: uint16(27904), + 61: uint16(27933), + 62: uint16(27970), + 63: uint16(27905), + 64: uint16(27928), + 65: uint16(27959), + 66: uint16(27907), + 67: uint16(27919), + 68: uint16(27968), + 69: uint16(27911), + 70: uint16(27936), + 71: uint16(27948), + 72: uint16(27912), + 73: uint16(27938), + 74: uint16(27913), + 75: uint16(27920), + 76: uint16(28855), + 77: uint16(28831), + 78: uint16(28862), + 79: uint16(28849), + 80: uint16(28848), + 81: uint16(28833), + 82: uint16(28852), + 83: uint16(28853), + 84: uint16(28841), + 85: uint16(29249), + 86: uint16(29257), + 87: uint16(29258), + 88: uint16(29292), + 89: uint16(29296), + 90: uint16(29299), + 91: uint16(29294), + 92: uint16(29386), + 93: uint16(29412), + 94: uint16(29416), + 95: uint16(29419), + 96: uint16(29407), + 97: uint16(29418), + 98: uint16(29414), + 99: uint16(29411), + 100: uint16(29573), + 101: uint16(29644), + 102: uint16(29634), + 103: uint16(29640), + 104: uint16(29637), + 105: uint16(29625), + 106: uint16(29622), + 107: uint16(29621), + 108: uint16(29620), + 109: uint16(29675), + 110: uint16(29631), + 111: uint16(29639), + 112: uint16(29630), + 113: uint16(29635), + 114: uint16(29638), + 115: uint16(29624), + 116: uint16(29643), + 117: uint16(29932), + 118: uint16(29934), + 119: uint16(29998), + 120: uint16(30023), + 121: uint16(30024), + 122: uint16(30119), + 123: uint16(30122), + 124: uint16(30329), + 125: uint16(30404), + 126: uint16(30472), + 127: uint16(30467), + 128: uint16(30468), + 129: uint16(30469), + 130: uint16(30474), + 131: uint16(30455), + 132: uint16(30459), + 133: uint16(30458), + 134: uint16(30695), + 135: uint16(30696), + 136: uint16(30726), + 137: uint16(30737), + 138: uint16(30738), + 139: uint16(30725), + 140: uint16(30736), + 141: uint16(30735), + 142: uint16(30734), + 143: uint16(30729), + 144: uint16(30723), + 145: uint16(30739), + 146: uint16(31050), + 147: uint16(31052), + 148: uint16(31051), + 149: uint16(31045), + 150: uint16(31044), + 151: uint16(31189), + 152: uint16(31181), + 153: uint16(31183), + 154: uint16(31190), + 155: uint16(31182), + 156: uint16(31360), + }, + 47: { + 0: uint16(31358), + 1: uint16(31441), + 2: uint16(31488), + 3: uint16(31489), + 4: uint16(31866), + 5: uint16(31864), + 6: uint16(31865), + 7: uint16(31871), + 8: uint16(31872), + 9: uint16(31873), + 10: uint16(32003), + 11: uint16(32008), + 12: uint16(32001), + 13: uint16(32600), + 14: uint16(32657), + 15: uint16(32653), + 16: uint16(32702), + 17: uint16(32775), + 18: uint16(32782), + 19: uint16(32783), + 20: uint16(32788), + 21: uint16(32823), + 22: uint16(32984), + 23: uint16(32967), + 24: uint16(32992), + 25: uint16(32977), + 26: uint16(32968), + 27: uint16(32962), + 28: uint16(32976), + 29: uint16(32965), + 30: uint16(32995), + 31: uint16(32985), + 32: uint16(32988), + 33: uint16(32970), + 34: uint16(32981), + 35: uint16(32969), + 36: uint16(32975), + 37: uint16(32983), + 38: uint16(32998), + 39: uint16(32973), + 40: uint16(33279), + 41: uint16(33313), + 42: uint16(33428), + 43: uint16(33497), + 44: uint16(33534), + 45: uint16(33529), + 46: uint16(33543), + 47: uint16(33512), + 48: uint16(33536), + 49: uint16(33493), + 50: uint16(33594), + 51: uint16(33515), + 52: uint16(33494), + 53: uint16(33524), + 54: uint16(33516), + 55: uint16(33505), + 56: uint16(33522), + 57: uint16(33525), + 58: uint16(33548), + 59: uint16(33531), + 60: uint16(33526), + 61: uint16(33520), + 62: uint16(33514), + 63: uint16(33508), + 64: uint16(33504), + 65: uint16(33530), + 66: uint16(33523), + 67: uint16(33517), + 68: uint16(34423), + 69: uint16(34420), + 70: uint16(34428), + 71: uint16(34419), + 72: uint16(34881), + 73: uint16(34894), + 74: uint16(34919), + 75: uint16(34922), + 76: uint16(34921), + 77: uint16(35283), + 78: uint16(35332), + 79: uint16(35335), + 80: uint16(36210), + 81: uint16(36835), + 82: uint16(36833), + 83: uint16(36846), + 84: uint16(36832), + 85: uint16(37105), + 86: uint16(37053), + 87: uint16(37055), + 88: uint16(37077), + 89: uint16(37061), + 90: uint16(37054), + 91: uint16(37063), + 92: uint16(37067), + 93: uint16(37064), + 94: uint16(37332), + 95: uint16(37331), + 96: uint16(38484), + 97: uint16(38479), + 98: uint16(38481), + 99: uint16(38483), + 100: uint16(38474), + 101: uint16(38478), + 102: uint16(20510), + 103: uint16(20485), + 104: uint16(20487), + 105: uint16(20499), + 106: uint16(20514), + 107: uint16(20528), + 108: uint16(20507), + 109: uint16(20469), + 110: uint16(20468), + 111: uint16(20531), + 112: uint16(20535), + 113: uint16(20524), + 114: uint16(20470), + 115: uint16(20471), + 116: uint16(20503), + 117: uint16(20508), + 118: uint16(20512), + 119: uint16(20519), + 120: uint16(20533), + 121: uint16(20527), + 122: uint16(20529), + 123: uint16(20494), + 124: uint16(20826), + 125: uint16(20884), + 126: uint16(20883), + 127: uint16(20938), + 128: uint16(20932), + 129: uint16(20933), + 130: uint16(20936), + 131: uint16(20942), + 132: uint16(21089), + 133: uint16(21082), + 134: uint16(21074), + 135: uint16(21086), + 136: uint16(21087), + 137: uint16(21077), + 138: uint16(21090), + 139: uint16(21197), + 140: uint16(21262), + 141: uint16(21406), + 142: uint16(21798), + 143: uint16(21730), + 144: uint16(21783), + 145: uint16(21778), + 146: uint16(21735), + 147: uint16(21747), + 148: uint16(21732), + 149: uint16(21786), + 150: uint16(21759), + 151: uint16(21764), + 152: uint16(21768), + 153: uint16(21739), + 154: uint16(21777), + 155: uint16(21765), + 156: uint16(21745), + }, + 48: { + 0: uint16(21770), + 1: uint16(21755), + 2: uint16(21751), + 3: uint16(21752), + 4: uint16(21728), + 5: uint16(21774), + 6: uint16(21763), + 7: uint16(21771), + 8: uint16(22273), + 9: uint16(22274), + 10: uint16(22476), + 11: uint16(22578), + 12: uint16(22485), + 13: uint16(22482), + 14: uint16(22458), + 15: uint16(22470), + 16: uint16(22461), + 17: uint16(22460), + 18: uint16(22456), + 19: uint16(22454), + 20: uint16(22463), + 21: uint16(22471), + 22: uint16(22480), + 23: uint16(22457), + 24: uint16(22465), + 25: uint16(22798), + 26: uint16(22858), + 27: uint16(23065), + 28: uint16(23062), + 29: uint16(23085), + 30: uint16(23086), + 31: uint16(23061), + 32: uint16(23055), + 33: uint16(23063), + 34: uint16(23050), + 35: uint16(23070), + 36: uint16(23091), + 37: uint16(23404), + 38: uint16(23463), + 39: uint16(23469), + 40: uint16(23468), + 41: uint16(23555), + 42: uint16(23638), + 43: uint16(23636), + 44: uint16(23788), + 45: uint16(23807), + 46: uint16(23790), + 47: uint16(23793), + 48: uint16(23799), + 49: uint16(23808), + 50: uint16(23801), + 51: uint16(24105), + 52: uint16(24104), + 53: uint16(24232), + 54: uint16(24238), + 55: uint16(24234), + 56: uint16(24236), + 57: uint16(24371), + 58: uint16(24368), + 59: uint16(24423), + 60: uint16(24669), + 61: uint16(24666), + 62: uint16(24679), + 63: uint16(24641), + 64: uint16(24738), + 65: uint16(24712), + 66: uint16(24704), + 67: uint16(24722), + 68: uint16(24705), + 69: uint16(24733), + 70: uint16(24707), + 71: uint16(24725), + 72: uint16(24731), + 73: uint16(24727), + 74: uint16(24711), + 75: uint16(24732), + 76: uint16(24718), + 77: uint16(25113), + 78: uint16(25158), + 79: uint16(25330), + 80: uint16(25360), + 81: uint16(25430), + 82: uint16(25388), + 83: uint16(25412), + 84: uint16(25413), + 85: uint16(25398), + 86: uint16(25411), + 87: uint16(25572), + 88: uint16(25401), + 89: uint16(25419), + 90: uint16(25418), + 91: uint16(25404), + 92: uint16(25385), + 93: uint16(25409), + 94: uint16(25396), + 95: uint16(25432), + 96: uint16(25428), + 97: uint16(25433), + 98: uint16(25389), + 99: uint16(25415), + 100: uint16(25395), + 101: uint16(25434), + 102: uint16(25425), + 103: uint16(25400), + 104: uint16(25431), + 105: uint16(25408), + 106: uint16(25416), + 107: uint16(25930), + 108: uint16(25926), + 109: uint16(26054), + 110: uint16(26051), + 111: uint16(26052), + 112: uint16(26050), + 113: uint16(26186), + 114: uint16(26207), + 115: uint16(26183), + 116: uint16(26193), + 117: uint16(26386), + 118: uint16(26387), + 119: uint16(26655), + 120: uint16(26650), + 121: uint16(26697), + 122: uint16(26674), + 123: uint16(26675), + 124: uint16(26683), + 125: uint16(26699), + 126: uint16(26703), + 127: uint16(26646), + 128: uint16(26673), + 129: uint16(26652), + 130: uint16(26677), + 131: uint16(26667), + 132: uint16(26669), + 133: uint16(26671), + 134: uint16(26702), + 135: uint16(26692), + 136: uint16(26676), + 137: uint16(26653), + 138: uint16(26642), + 139: uint16(26644), + 140: uint16(26662), + 141: uint16(26664), + 142: uint16(26670), + 143: uint16(26701), + 144: uint16(26682), + 145: uint16(26661), + 146: uint16(26656), + 147: uint16(27436), + 148: uint16(27439), + 149: uint16(27437), + 150: uint16(27441), + 151: uint16(27444), + 152: uint16(27501), + 153: uint16(32898), + 154: uint16(27528), + 155: uint16(27622), + 156: uint16(27620), + }, + 49: { + 0: uint16(27624), + 1: uint16(27619), + 2: uint16(27618), + 3: uint16(27623), + 4: uint16(27685), + 5: uint16(28026), + 6: uint16(28003), + 7: uint16(28004), + 8: uint16(28022), + 9: uint16(27917), + 10: uint16(28001), + 11: uint16(28050), + 12: uint16(27992), + 13: uint16(28002), + 14: uint16(28013), + 15: uint16(28015), + 16: uint16(28049), + 17: uint16(28045), + 18: uint16(28143), + 19: uint16(28031), + 20: uint16(28038), + 21: uint16(27998), + 22: uint16(28007), + 23: uint16(28000), + 24: uint16(28055), + 25: uint16(28016), + 26: uint16(28028), + 27: uint16(27999), + 28: uint16(28034), + 29: uint16(28056), + 30: uint16(27951), + 31: uint16(28008), + 32: uint16(28043), + 33: uint16(28030), + 34: uint16(28032), + 35: uint16(28036), + 36: uint16(27926), + 37: uint16(28035), + 38: uint16(28027), + 39: uint16(28029), + 40: uint16(28021), + 41: uint16(28048), + 42: uint16(28892), + 43: uint16(28883), + 44: uint16(28881), + 45: uint16(28893), + 46: uint16(28875), + 47: uint16(32569), + 48: uint16(28898), + 49: uint16(28887), + 50: uint16(28882), + 51: uint16(28894), + 52: uint16(28896), + 53: uint16(28884), + 54: uint16(28877), + 55: uint16(28869), + 56: uint16(28870), + 57: uint16(28871), + 58: uint16(28890), + 59: uint16(28878), + 60: uint16(28897), + 61: uint16(29250), + 62: uint16(29304), + 63: uint16(29303), + 64: uint16(29302), + 65: uint16(29440), + 66: uint16(29434), + 67: uint16(29428), + 68: uint16(29438), + 69: uint16(29430), + 70: uint16(29427), + 71: uint16(29435), + 72: uint16(29441), + 73: uint16(29651), + 74: uint16(29657), + 75: uint16(29669), + 76: uint16(29654), + 77: uint16(29628), + 78: uint16(29671), + 79: uint16(29667), + 80: uint16(29673), + 81: uint16(29660), + 82: uint16(29650), + 83: uint16(29659), + 84: uint16(29652), + 85: uint16(29661), + 86: uint16(29658), + 87: uint16(29655), + 88: uint16(29656), + 89: uint16(29672), + 90: uint16(29918), + 91: uint16(29919), + 92: uint16(29940), + 93: uint16(29941), + 94: uint16(29985), + 95: uint16(30043), + 96: uint16(30047), + 97: uint16(30128), + 98: uint16(30145), + 99: uint16(30139), + 100: uint16(30148), + 101: uint16(30144), + 102: uint16(30143), + 103: uint16(30134), + 104: uint16(30138), + 105: uint16(30346), + 106: uint16(30409), + 107: uint16(30493), + 108: uint16(30491), + 109: uint16(30480), + 110: uint16(30483), + 111: uint16(30482), + 112: uint16(30499), + 113: uint16(30481), + 114: uint16(30485), + 115: uint16(30489), + 116: uint16(30490), + 117: uint16(30498), + 118: uint16(30503), + 119: uint16(30755), + 120: uint16(30764), + 121: uint16(30754), + 122: uint16(30773), + 123: uint16(30767), + 124: uint16(30760), + 125: uint16(30766), + 126: uint16(30763), + 127: uint16(30753), + 128: uint16(30761), + 129: uint16(30771), + 130: uint16(30762), + 131: uint16(30769), + 132: uint16(31060), + 133: uint16(31067), + 134: uint16(31055), + 135: uint16(31068), + 136: uint16(31059), + 137: uint16(31058), + 138: uint16(31057), + 139: uint16(31211), + 140: uint16(31212), + 141: uint16(31200), + 142: uint16(31214), + 143: uint16(31213), + 144: uint16(31210), + 145: uint16(31196), + 146: uint16(31198), + 147: uint16(31197), + 148: uint16(31366), + 149: uint16(31369), + 150: uint16(31365), + 151: uint16(31371), + 152: uint16(31372), + 153: uint16(31370), + 154: uint16(31367), + 155: uint16(31448), + 156: uint16(31504), + }, + 50: { + 0: uint16(31492), + 1: uint16(31507), + 2: uint16(31493), + 3: uint16(31503), + 4: uint16(31496), + 5: uint16(31498), + 6: uint16(31502), + 7: uint16(31497), + 8: uint16(31506), + 9: uint16(31876), + 10: uint16(31889), + 11: uint16(31882), + 12: uint16(31884), + 13: uint16(31880), + 14: uint16(31885), + 15: uint16(31877), + 16: uint16(32030), + 17: uint16(32029), + 18: uint16(32017), + 19: uint16(32014), + 20: uint16(32024), + 21: uint16(32022), + 22: uint16(32019), + 23: uint16(32031), + 24: uint16(32018), + 25: uint16(32015), + 26: uint16(32012), + 27: uint16(32604), + 28: uint16(32609), + 29: uint16(32606), + 30: uint16(32608), + 31: uint16(32605), + 32: uint16(32603), + 33: uint16(32662), + 34: uint16(32658), + 35: uint16(32707), + 36: uint16(32706), + 37: uint16(32704), + 38: uint16(32790), + 39: uint16(32830), + 40: uint16(32825), + 41: uint16(33018), + 42: uint16(33010), + 43: uint16(33017), + 44: uint16(33013), + 45: uint16(33025), + 46: uint16(33019), + 47: uint16(33024), + 48: uint16(33281), + 49: uint16(33327), + 50: uint16(33317), + 51: uint16(33587), + 52: uint16(33581), + 53: uint16(33604), + 54: uint16(33561), + 55: uint16(33617), + 56: uint16(33573), + 57: uint16(33622), + 58: uint16(33599), + 59: uint16(33601), + 60: uint16(33574), + 61: uint16(33564), + 62: uint16(33570), + 63: uint16(33602), + 64: uint16(33614), + 65: uint16(33563), + 66: uint16(33578), + 67: uint16(33544), + 68: uint16(33596), + 69: uint16(33613), + 70: uint16(33558), + 71: uint16(33572), + 72: uint16(33568), + 73: uint16(33591), + 74: uint16(33583), + 75: uint16(33577), + 76: uint16(33607), + 77: uint16(33605), + 78: uint16(33612), + 79: uint16(33619), + 80: uint16(33566), + 81: uint16(33580), + 82: uint16(33611), + 83: uint16(33575), + 84: uint16(33608), + 85: uint16(34387), + 86: uint16(34386), + 87: uint16(34466), + 88: uint16(34472), + 89: uint16(34454), + 90: uint16(34445), + 91: uint16(34449), + 92: uint16(34462), + 93: uint16(34439), + 94: uint16(34455), + 95: uint16(34438), + 96: uint16(34443), + 97: uint16(34458), + 98: uint16(34437), + 99: uint16(34469), + 100: uint16(34457), + 101: uint16(34465), + 102: uint16(34471), + 103: uint16(34453), + 104: uint16(34456), + 105: uint16(34446), + 106: uint16(34461), + 107: uint16(34448), + 108: uint16(34452), + 109: uint16(34883), + 110: uint16(34884), + 111: uint16(34925), + 112: uint16(34933), + 113: uint16(34934), + 114: uint16(34930), + 115: uint16(34944), + 116: uint16(34929), + 117: uint16(34943), + 118: uint16(34927), + 119: uint16(34947), + 120: uint16(34942), + 121: uint16(34932), + 122: uint16(34940), + 123: uint16(35346), + 124: uint16(35911), + 125: uint16(35927), + 126: uint16(35963), + 127: uint16(36004), + 128: uint16(36003), + 129: uint16(36214), + 130: uint16(36216), + 131: uint16(36277), + 132: uint16(36279), + 133: uint16(36278), + 134: uint16(36561), + 135: uint16(36563), + 136: uint16(36862), + 137: uint16(36853), + 138: uint16(36866), + 139: uint16(36863), + 140: uint16(36859), + 141: uint16(36868), + 142: uint16(36860), + 143: uint16(36854), + 144: uint16(37078), + 145: uint16(37088), + 146: uint16(37081), + 147: uint16(37082), + 148: uint16(37091), + 149: uint16(37087), + 150: uint16(37093), + 151: uint16(37080), + 152: uint16(37083), + 153: uint16(37079), + 154: uint16(37084), + 155: uint16(37092), + 156: uint16(37200), + }, + 51: { + 0: uint16(37198), + 1: uint16(37199), + 2: uint16(37333), + 3: uint16(37346), + 4: uint16(37338), + 5: uint16(38492), + 6: uint16(38495), + 7: uint16(38588), + 8: uint16(39139), + 9: uint16(39647), + 10: uint16(39727), + 11: uint16(20095), + 12: uint16(20592), + 13: uint16(20586), + 14: uint16(20577), + 15: uint16(20574), + 16: uint16(20576), + 17: uint16(20563), + 18: uint16(20555), + 19: uint16(20573), + 20: uint16(20594), + 21: uint16(20552), + 22: uint16(20557), + 23: uint16(20545), + 24: uint16(20571), + 25: uint16(20554), + 26: uint16(20578), + 27: uint16(20501), + 28: uint16(20549), + 29: uint16(20575), + 30: uint16(20585), + 31: uint16(20587), + 32: uint16(20579), + 33: uint16(20580), + 34: uint16(20550), + 35: uint16(20544), + 36: uint16(20590), + 37: uint16(20595), + 38: uint16(20567), + 39: uint16(20561), + 40: uint16(20944), + 41: uint16(21099), + 42: uint16(21101), + 43: uint16(21100), + 44: uint16(21102), + 45: uint16(21206), + 46: uint16(21203), + 47: uint16(21293), + 48: uint16(21404), + 49: uint16(21877), + 50: uint16(21878), + 51: uint16(21820), + 52: uint16(21837), + 53: uint16(21840), + 54: uint16(21812), + 55: uint16(21802), + 56: uint16(21841), + 57: uint16(21858), + 58: uint16(21814), + 59: uint16(21813), + 60: uint16(21808), + 61: uint16(21842), + 62: uint16(21829), + 63: uint16(21772), + 64: uint16(21810), + 65: uint16(21861), + 66: uint16(21838), + 67: uint16(21817), + 68: uint16(21832), + 69: uint16(21805), + 70: uint16(21819), + 71: uint16(21824), + 72: uint16(21835), + 73: uint16(22282), + 74: uint16(22279), + 75: uint16(22523), + 76: uint16(22548), + 77: uint16(22498), + 78: uint16(22518), + 79: uint16(22492), + 80: uint16(22516), + 81: uint16(22528), + 82: uint16(22509), + 83: uint16(22525), + 84: uint16(22536), + 85: uint16(22520), + 86: uint16(22539), + 87: uint16(22515), + 88: uint16(22479), + 89: uint16(22535), + 90: uint16(22510), + 91: uint16(22499), + 92: uint16(22514), + 93: uint16(22501), + 94: uint16(22508), + 95: uint16(22497), + 96: uint16(22542), + 97: uint16(22524), + 98: uint16(22544), + 99: uint16(22503), + 100: uint16(22529), + 101: uint16(22540), + 102: uint16(22513), + 103: uint16(22505), + 104: uint16(22512), + 105: uint16(22541), + 106: uint16(22532), + 107: uint16(22876), + 108: uint16(23136), + 109: uint16(23128), + 110: uint16(23125), + 111: uint16(23143), + 112: uint16(23134), + 113: uint16(23096), + 114: uint16(23093), + 115: uint16(23149), + 116: uint16(23120), + 117: uint16(23135), + 118: uint16(23141), + 119: uint16(23148), + 120: uint16(23123), + 121: uint16(23140), + 122: uint16(23127), + 123: uint16(23107), + 124: uint16(23133), + 125: uint16(23122), + 126: uint16(23108), + 127: uint16(23131), + 128: uint16(23112), + 129: uint16(23182), + 130: uint16(23102), + 131: uint16(23117), + 132: uint16(23097), + 133: uint16(23116), + 134: uint16(23152), + 135: uint16(23145), + 136: uint16(23111), + 137: uint16(23121), + 138: uint16(23126), + 139: uint16(23106), + 140: uint16(23132), + 141: uint16(23410), + 142: uint16(23406), + 143: uint16(23489), + 144: uint16(23488), + 145: uint16(23641), + 146: uint16(23838), + 147: uint16(23819), + 148: uint16(23837), + 149: uint16(23834), + 150: uint16(23840), + 151: uint16(23820), + 152: uint16(23848), + 153: uint16(23821), + 154: uint16(23846), + 155: uint16(23845), + 156: uint16(23823), + }, + 52: { + 0: uint16(23856), + 1: uint16(23826), + 2: uint16(23843), + 3: uint16(23839), + 4: uint16(23854), + 5: uint16(24126), + 6: uint16(24116), + 7: uint16(24241), + 8: uint16(24244), + 9: uint16(24249), + 10: uint16(24242), + 11: uint16(24243), + 12: uint16(24374), + 13: uint16(24376), + 14: uint16(24475), + 15: uint16(24470), + 16: uint16(24479), + 17: uint16(24714), + 18: uint16(24720), + 19: uint16(24710), + 20: uint16(24766), + 21: uint16(24752), + 22: uint16(24762), + 23: uint16(24787), + 24: uint16(24788), + 25: uint16(24783), + 26: uint16(24804), + 27: uint16(24793), + 28: uint16(24797), + 29: uint16(24776), + 30: uint16(24753), + 31: uint16(24795), + 32: uint16(24759), + 33: uint16(24778), + 34: uint16(24767), + 35: uint16(24771), + 36: uint16(24781), + 37: uint16(24768), + 38: uint16(25394), + 39: uint16(25445), + 40: uint16(25482), + 41: uint16(25474), + 42: uint16(25469), + 43: uint16(25533), + 44: uint16(25502), + 45: uint16(25517), + 46: uint16(25501), + 47: uint16(25495), + 48: uint16(25515), + 49: uint16(25486), + 50: uint16(25455), + 51: uint16(25479), + 52: uint16(25488), + 53: uint16(25454), + 54: uint16(25519), + 55: uint16(25461), + 56: uint16(25500), + 57: uint16(25453), + 58: uint16(25518), + 59: uint16(25468), + 60: uint16(25508), + 61: uint16(25403), + 62: uint16(25503), + 63: uint16(25464), + 64: uint16(25477), + 65: uint16(25473), + 66: uint16(25489), + 67: uint16(25485), + 68: uint16(25456), + 69: uint16(25939), + 70: uint16(26061), + 71: uint16(26213), + 72: uint16(26209), + 73: uint16(26203), + 74: uint16(26201), + 75: uint16(26204), + 76: uint16(26210), + 77: uint16(26392), + 78: uint16(26745), + 79: uint16(26759), + 80: uint16(26768), + 81: uint16(26780), + 82: uint16(26733), + 83: uint16(26734), + 84: uint16(26798), + 85: uint16(26795), + 86: uint16(26966), + 87: uint16(26735), + 88: uint16(26787), + 89: uint16(26796), + 90: uint16(26793), + 91: uint16(26741), + 92: uint16(26740), + 93: uint16(26802), + 94: uint16(26767), + 95: uint16(26743), + 96: uint16(26770), + 97: uint16(26748), + 98: uint16(26731), + 99: uint16(26738), + 100: uint16(26794), + 101: uint16(26752), + 102: uint16(26737), + 103: uint16(26750), + 104: uint16(26779), + 105: uint16(26774), + 106: uint16(26763), + 107: uint16(26784), + 108: uint16(26761), + 109: uint16(26788), + 110: uint16(26744), + 111: uint16(26747), + 112: uint16(26769), + 113: uint16(26764), + 114: uint16(26762), + 115: uint16(26749), + 116: uint16(27446), + 117: uint16(27443), + 118: uint16(27447), + 119: uint16(27448), + 120: uint16(27537), + 121: uint16(27535), + 122: uint16(27533), + 123: uint16(27534), + 124: uint16(27532), + 125: uint16(27690), + 126: uint16(28096), + 127: uint16(28075), + 128: uint16(28084), + 129: uint16(28083), + 130: uint16(28276), + 131: uint16(28076), + 132: uint16(28137), + 133: uint16(28130), + 134: uint16(28087), + 135: uint16(28150), + 136: uint16(28116), + 137: uint16(28160), + 138: uint16(28104), + 139: uint16(28128), + 140: uint16(28127), + 141: uint16(28118), + 142: uint16(28094), + 143: uint16(28133), + 144: uint16(28124), + 145: uint16(28125), + 146: uint16(28123), + 147: uint16(28148), + 148: uint16(28106), + 149: uint16(28093), + 150: uint16(28141), + 151: uint16(28144), + 152: uint16(28090), + 153: uint16(28117), + 154: uint16(28098), + 155: uint16(28111), + 156: uint16(28105), + }, + 53: { + 0: uint16(28112), + 1: uint16(28146), + 2: uint16(28115), + 3: uint16(28157), + 4: uint16(28119), + 5: uint16(28109), + 6: uint16(28131), + 7: uint16(28091), + 8: uint16(28922), + 9: uint16(28941), + 10: uint16(28919), + 11: uint16(28951), + 12: uint16(28916), + 13: uint16(28940), + 14: uint16(28912), + 15: uint16(28932), + 16: uint16(28915), + 17: uint16(28944), + 18: uint16(28924), + 19: uint16(28927), + 20: uint16(28934), + 21: uint16(28947), + 22: uint16(28928), + 23: uint16(28920), + 24: uint16(28918), + 25: uint16(28939), + 26: uint16(28930), + 27: uint16(28942), + 28: uint16(29310), + 29: uint16(29307), + 30: uint16(29308), + 31: uint16(29311), + 32: uint16(29469), + 33: uint16(29463), + 34: uint16(29447), + 35: uint16(29457), + 36: uint16(29464), + 37: uint16(29450), + 38: uint16(29448), + 39: uint16(29439), + 40: uint16(29455), + 41: uint16(29470), + 42: uint16(29576), + 43: uint16(29686), + 44: uint16(29688), + 45: uint16(29685), + 46: uint16(29700), + 47: uint16(29697), + 48: uint16(29693), + 49: uint16(29703), + 50: uint16(29696), + 51: uint16(29690), + 52: uint16(29692), + 53: uint16(29695), + 54: uint16(29708), + 55: uint16(29707), + 56: uint16(29684), + 57: uint16(29704), + 58: uint16(30052), + 59: uint16(30051), + 60: uint16(30158), + 61: uint16(30162), + 62: uint16(30159), + 63: uint16(30155), + 64: uint16(30156), + 65: uint16(30161), + 66: uint16(30160), + 67: uint16(30351), + 68: uint16(30345), + 69: uint16(30419), + 70: uint16(30521), + 71: uint16(30511), + 72: uint16(30509), + 73: uint16(30513), + 74: uint16(30514), + 75: uint16(30516), + 76: uint16(30515), + 77: uint16(30525), + 78: uint16(30501), + 79: uint16(30523), + 80: uint16(30517), + 81: uint16(30792), + 82: uint16(30802), + 83: uint16(30793), + 84: uint16(30797), + 85: uint16(30794), + 86: uint16(30796), + 87: uint16(30758), + 88: uint16(30789), + 89: uint16(30800), + 90: uint16(31076), + 91: uint16(31079), + 92: uint16(31081), + 93: uint16(31082), + 94: uint16(31075), + 95: uint16(31083), + 96: uint16(31073), + 97: uint16(31163), + 98: uint16(31226), + 99: uint16(31224), + 100: uint16(31222), + 101: uint16(31223), + 102: uint16(31375), + 103: uint16(31380), + 104: uint16(31376), + 105: uint16(31541), + 106: uint16(31559), + 107: uint16(31540), + 108: uint16(31525), + 109: uint16(31536), + 110: uint16(31522), + 111: uint16(31524), + 112: uint16(31539), + 113: uint16(31512), + 114: uint16(31530), + 115: uint16(31517), + 116: uint16(31537), + 117: uint16(31531), + 118: uint16(31533), + 119: uint16(31535), + 120: uint16(31538), + 121: uint16(31544), + 122: uint16(31514), + 123: uint16(31523), + 124: uint16(31892), + 125: uint16(31896), + 126: uint16(31894), + 127: uint16(31907), + 128: uint16(32053), + 129: uint16(32061), + 130: uint16(32056), + 131: uint16(32054), + 132: uint16(32058), + 133: uint16(32069), + 134: uint16(32044), + 135: uint16(32041), + 136: uint16(32065), + 137: uint16(32071), + 138: uint16(32062), + 139: uint16(32063), + 140: uint16(32074), + 141: uint16(32059), + 142: uint16(32040), + 143: uint16(32611), + 144: uint16(32661), + 145: uint16(32668), + 146: uint16(32669), + 147: uint16(32667), + 148: uint16(32714), + 149: uint16(32715), + 150: uint16(32717), + 151: uint16(32720), + 152: uint16(32721), + 153: uint16(32711), + 154: uint16(32719), + 155: uint16(32713), + 156: uint16(32799), + }, + 54: { + 0: uint16(32798), + 1: uint16(32795), + 2: uint16(32839), + 3: uint16(32835), + 4: uint16(32840), + 5: uint16(33048), + 6: uint16(33061), + 7: uint16(33049), + 8: uint16(33051), + 9: uint16(33069), + 10: uint16(33055), + 11: uint16(33068), + 12: uint16(33054), + 13: uint16(33057), + 14: uint16(33045), + 15: uint16(33063), + 16: uint16(33053), + 17: uint16(33058), + 18: uint16(33297), + 19: uint16(33336), + 20: uint16(33331), + 21: uint16(33338), + 22: uint16(33332), + 23: uint16(33330), + 24: uint16(33396), + 25: uint16(33680), + 26: uint16(33699), + 27: uint16(33704), + 28: uint16(33677), + 29: uint16(33658), + 30: uint16(33651), + 31: uint16(33700), + 32: uint16(33652), + 33: uint16(33679), + 34: uint16(33665), + 35: uint16(33685), + 36: uint16(33689), + 37: uint16(33653), + 38: uint16(33684), + 39: uint16(33705), + 40: uint16(33661), + 41: uint16(33667), + 42: uint16(33676), + 43: uint16(33693), + 44: uint16(33691), + 45: uint16(33706), + 46: uint16(33675), + 47: uint16(33662), + 48: uint16(33701), + 49: uint16(33711), + 50: uint16(33672), + 51: uint16(33687), + 52: uint16(33712), + 53: uint16(33663), + 54: uint16(33702), + 55: uint16(33671), + 56: uint16(33710), + 57: uint16(33654), + 58: uint16(33690), + 59: uint16(34393), + 60: uint16(34390), + 61: uint16(34495), + 62: uint16(34487), + 63: uint16(34498), + 64: uint16(34497), + 65: uint16(34501), + 66: uint16(34490), + 67: uint16(34480), + 68: uint16(34504), + 69: uint16(34489), + 70: uint16(34483), + 71: uint16(34488), + 72: uint16(34508), + 73: uint16(34484), + 74: uint16(34491), + 75: uint16(34492), + 76: uint16(34499), + 77: uint16(34493), + 78: uint16(34494), + 79: uint16(34898), + 80: uint16(34953), + 81: uint16(34965), + 82: uint16(34984), + 83: uint16(34978), + 84: uint16(34986), + 85: uint16(34970), + 86: uint16(34961), + 87: uint16(34977), + 88: uint16(34975), + 89: uint16(34968), + 90: uint16(34983), + 91: uint16(34969), + 92: uint16(34971), + 93: uint16(34967), + 94: uint16(34980), + 95: uint16(34988), + 96: uint16(34956), + 97: uint16(34963), + 98: uint16(34958), + 99: uint16(35202), + 100: uint16(35286), + 101: uint16(35289), + 102: uint16(35285), + 103: uint16(35376), + 104: uint16(35367), + 105: uint16(35372), + 106: uint16(35358), + 107: uint16(35897), + 108: uint16(35899), + 109: uint16(35932), + 110: uint16(35933), + 111: uint16(35965), + 112: uint16(36005), + 113: uint16(36221), + 114: uint16(36219), + 115: uint16(36217), + 116: uint16(36284), + 117: uint16(36290), + 118: uint16(36281), + 119: uint16(36287), + 120: uint16(36289), + 121: uint16(36568), + 122: uint16(36574), + 123: uint16(36573), + 124: uint16(36572), + 125: uint16(36567), + 126: uint16(36576), + 127: uint16(36577), + 128: uint16(36900), + 129: uint16(36875), + 130: uint16(36881), + 131: uint16(36892), + 132: uint16(36876), + 133: uint16(36897), + 134: uint16(37103), + 135: uint16(37098), + 136: uint16(37104), + 137: uint16(37108), + 138: uint16(37106), + 139: uint16(37107), + 140: uint16(37076), + 141: uint16(37099), + 142: uint16(37100), + 143: uint16(37097), + 144: uint16(37206), + 145: uint16(37208), + 146: uint16(37210), + 147: uint16(37203), + 148: uint16(37205), + 149: uint16(37356), + 150: uint16(37364), + 151: uint16(37361), + 152: uint16(37363), + 153: uint16(37368), + 154: uint16(37348), + 155: uint16(37369), + 156: uint16(37354), + }, + 55: { + 0: uint16(37355), + 1: uint16(37367), + 2: uint16(37352), + 3: uint16(37358), + 4: uint16(38266), + 5: uint16(38278), + 6: uint16(38280), + 7: uint16(38524), + 8: uint16(38509), + 9: uint16(38507), + 10: uint16(38513), + 11: uint16(38511), + 12: uint16(38591), + 13: uint16(38762), + 14: uint16(38916), + 15: uint16(39141), + 16: uint16(39319), + 17: uint16(20635), + 18: uint16(20629), + 19: uint16(20628), + 20: uint16(20638), + 21: uint16(20619), + 22: uint16(20643), + 23: uint16(20611), + 24: uint16(20620), + 25: uint16(20622), + 26: uint16(20637), + 27: uint16(20584), + 28: uint16(20636), + 29: uint16(20626), + 30: uint16(20610), + 31: uint16(20615), + 32: uint16(20831), + 33: uint16(20948), + 34: uint16(21266), + 35: uint16(21265), + 36: uint16(21412), + 37: uint16(21415), + 38: uint16(21905), + 39: uint16(21928), + 40: uint16(21925), + 41: uint16(21933), + 42: uint16(21879), + 43: uint16(22085), + 44: uint16(21922), + 45: uint16(21907), + 46: uint16(21896), + 47: uint16(21903), + 48: uint16(21941), + 49: uint16(21889), + 50: uint16(21923), + 51: uint16(21906), + 52: uint16(21924), + 53: uint16(21885), + 54: uint16(21900), + 55: uint16(21926), + 56: uint16(21887), + 57: uint16(21909), + 58: uint16(21921), + 59: uint16(21902), + 60: uint16(22284), + 61: uint16(22569), + 62: uint16(22583), + 63: uint16(22553), + 64: uint16(22558), + 65: uint16(22567), + 66: uint16(22563), + 67: uint16(22568), + 68: uint16(22517), + 69: uint16(22600), + 70: uint16(22565), + 71: uint16(22556), + 72: uint16(22555), + 73: uint16(22579), + 74: uint16(22591), + 75: uint16(22582), + 76: uint16(22574), + 77: uint16(22585), + 78: uint16(22584), + 79: uint16(22573), + 80: uint16(22572), + 81: uint16(22587), + 82: uint16(22881), + 83: uint16(23215), + 84: uint16(23188), + 85: uint16(23199), + 86: uint16(23162), + 87: uint16(23202), + 88: uint16(23198), + 89: uint16(23160), + 90: uint16(23206), + 91: uint16(23164), + 92: uint16(23205), + 93: uint16(23212), + 94: uint16(23189), + 95: uint16(23214), + 96: uint16(23095), + 97: uint16(23172), + 98: uint16(23178), + 99: uint16(23191), + 100: uint16(23171), + 101: uint16(23179), + 102: uint16(23209), + 103: uint16(23163), + 104: uint16(23165), + 105: uint16(23180), + 106: uint16(23196), + 107: uint16(23183), + 108: uint16(23187), + 109: uint16(23197), + 110: uint16(23530), + 111: uint16(23501), + 112: uint16(23499), + 113: uint16(23508), + 114: uint16(23505), + 115: uint16(23498), + 116: uint16(23502), + 117: uint16(23564), + 118: uint16(23600), + 119: uint16(23863), + 120: uint16(23875), + 121: uint16(23915), + 122: uint16(23873), + 123: uint16(23883), + 124: uint16(23871), + 125: uint16(23861), + 126: uint16(23889), + 127: uint16(23886), + 128: uint16(23893), + 129: uint16(23859), + 130: uint16(23866), + 131: uint16(23890), + 132: uint16(23869), + 133: uint16(23857), + 134: uint16(23897), + 135: uint16(23874), + 136: uint16(23865), + 137: uint16(23881), + 138: uint16(23864), + 139: uint16(23868), + 140: uint16(23858), + 141: uint16(23862), + 142: uint16(23872), + 143: uint16(23877), + 144: uint16(24132), + 145: uint16(24129), + 146: uint16(24408), + 147: uint16(24486), + 148: uint16(24485), + 149: uint16(24491), + 150: uint16(24777), + 151: uint16(24761), + 152: uint16(24780), + 153: uint16(24802), + 154: uint16(24782), + 155: uint16(24772), + 156: uint16(24852), + }, + 56: { + 0: uint16(24818), + 1: uint16(24842), + 2: uint16(24854), + 3: uint16(24837), + 4: uint16(24821), + 5: uint16(24851), + 6: uint16(24824), + 7: uint16(24828), + 8: uint16(24830), + 9: uint16(24769), + 10: uint16(24835), + 11: uint16(24856), + 12: uint16(24861), + 13: uint16(24848), + 14: uint16(24831), + 15: uint16(24836), + 16: uint16(24843), + 17: uint16(25162), + 18: uint16(25492), + 19: uint16(25521), + 20: uint16(25520), + 21: uint16(25550), + 22: uint16(25573), + 23: uint16(25576), + 24: uint16(25583), + 25: uint16(25539), + 26: uint16(25757), + 27: uint16(25587), + 28: uint16(25546), + 29: uint16(25568), + 30: uint16(25590), + 31: uint16(25557), + 32: uint16(25586), + 33: uint16(25589), + 34: uint16(25697), + 35: uint16(25567), + 36: uint16(25534), + 37: uint16(25565), + 38: uint16(25564), + 39: uint16(25540), + 40: uint16(25560), + 41: uint16(25555), + 42: uint16(25538), + 43: uint16(25543), + 44: uint16(25548), + 45: uint16(25547), + 46: uint16(25544), + 47: uint16(25584), + 48: uint16(25559), + 49: uint16(25561), + 50: uint16(25906), + 51: uint16(25959), + 52: uint16(25962), + 53: uint16(25956), + 54: uint16(25948), + 55: uint16(25960), + 56: uint16(25957), + 57: uint16(25996), + 58: uint16(26013), + 59: uint16(26014), + 60: uint16(26030), + 61: uint16(26064), + 62: uint16(26066), + 63: uint16(26236), + 64: uint16(26220), + 65: uint16(26235), + 66: uint16(26240), + 67: uint16(26225), + 68: uint16(26233), + 69: uint16(26218), + 70: uint16(26226), + 71: uint16(26369), + 72: uint16(26892), + 73: uint16(26835), + 74: uint16(26884), + 75: uint16(26844), + 76: uint16(26922), + 77: uint16(26860), + 78: uint16(26858), + 79: uint16(26865), + 80: uint16(26895), + 81: uint16(26838), + 82: uint16(26871), + 83: uint16(26859), + 84: uint16(26852), + 85: uint16(26870), + 86: uint16(26899), + 87: uint16(26896), + 88: uint16(26867), + 89: uint16(26849), + 90: uint16(26887), + 91: uint16(26828), + 92: uint16(26888), + 93: uint16(26992), + 94: uint16(26804), + 95: uint16(26897), + 96: uint16(26863), + 97: uint16(26822), + 98: uint16(26900), + 99: uint16(26872), + 100: uint16(26832), + 101: uint16(26877), + 102: uint16(26876), + 103: uint16(26856), + 104: uint16(26891), + 105: uint16(26890), + 106: uint16(26903), + 107: uint16(26830), + 108: uint16(26824), + 109: uint16(26845), + 110: uint16(26846), + 111: uint16(26854), + 112: uint16(26868), + 113: uint16(26833), + 114: uint16(26886), + 115: uint16(26836), + 116: uint16(26857), + 117: uint16(26901), + 118: uint16(26917), + 119: uint16(26823), + 120: uint16(27449), + 121: uint16(27451), + 122: uint16(27455), + 123: uint16(27452), + 124: uint16(27540), + 125: uint16(27543), + 126: uint16(27545), + 127: uint16(27541), + 128: uint16(27581), + 129: uint16(27632), + 130: uint16(27634), + 131: uint16(27635), + 132: uint16(27696), + 133: uint16(28156), + 134: uint16(28230), + 135: uint16(28231), + 136: uint16(28191), + 137: uint16(28233), + 138: uint16(28296), + 139: uint16(28220), + 140: uint16(28221), + 141: uint16(28229), + 142: uint16(28258), + 143: uint16(28203), + 144: uint16(28223), + 145: uint16(28225), + 146: uint16(28253), + 147: uint16(28275), + 148: uint16(28188), + 149: uint16(28211), + 150: uint16(28235), + 151: uint16(28224), + 152: uint16(28241), + 153: uint16(28219), + 154: uint16(28163), + 155: uint16(28206), + 156: uint16(28254), + }, + 57: { + 0: uint16(28264), + 1: uint16(28252), + 2: uint16(28257), + 3: uint16(28209), + 4: uint16(28200), + 5: uint16(28256), + 6: uint16(28273), + 7: uint16(28267), + 8: uint16(28217), + 9: uint16(28194), + 10: uint16(28208), + 11: uint16(28243), + 12: uint16(28261), + 13: uint16(28199), + 14: uint16(28280), + 15: uint16(28260), + 16: uint16(28279), + 17: uint16(28245), + 18: uint16(28281), + 19: uint16(28242), + 20: uint16(28262), + 21: uint16(28213), + 22: uint16(28214), + 23: uint16(28250), + 24: uint16(28960), + 25: uint16(28958), + 26: uint16(28975), + 27: uint16(28923), + 28: uint16(28974), + 29: uint16(28977), + 30: uint16(28963), + 31: uint16(28965), + 32: uint16(28962), + 33: uint16(28978), + 34: uint16(28959), + 35: uint16(28968), + 36: uint16(28986), + 37: uint16(28955), + 38: uint16(29259), + 39: uint16(29274), + 40: uint16(29320), + 41: uint16(29321), + 42: uint16(29318), + 43: uint16(29317), + 44: uint16(29323), + 45: uint16(29458), + 46: uint16(29451), + 47: uint16(29488), + 48: uint16(29474), + 49: uint16(29489), + 50: uint16(29491), + 51: uint16(29479), + 52: uint16(29490), + 53: uint16(29485), + 54: uint16(29478), + 55: uint16(29475), + 56: uint16(29493), + 57: uint16(29452), + 58: uint16(29742), + 59: uint16(29740), + 60: uint16(29744), + 61: uint16(29739), + 62: uint16(29718), + 63: uint16(29722), + 64: uint16(29729), + 65: uint16(29741), + 66: uint16(29745), + 67: uint16(29732), + 68: uint16(29731), + 69: uint16(29725), + 70: uint16(29737), + 71: uint16(29728), + 72: uint16(29746), + 73: uint16(29947), + 74: uint16(29999), + 75: uint16(30063), + 76: uint16(30060), + 77: uint16(30183), + 78: uint16(30170), + 79: uint16(30177), + 80: uint16(30182), + 81: uint16(30173), + 82: uint16(30175), + 83: uint16(30180), + 84: uint16(30167), + 85: uint16(30357), + 86: uint16(30354), + 87: uint16(30426), + 88: uint16(30534), + 89: uint16(30535), + 90: uint16(30532), + 91: uint16(30541), + 92: uint16(30533), + 93: uint16(30538), + 94: uint16(30542), + 95: uint16(30539), + 96: uint16(30540), + 97: uint16(30686), + 98: uint16(30700), + 99: uint16(30816), + 100: uint16(30820), + 101: uint16(30821), + 102: uint16(30812), + 103: uint16(30829), + 104: uint16(30833), + 105: uint16(30826), + 106: uint16(30830), + 107: uint16(30832), + 108: uint16(30825), + 109: uint16(30824), + 110: uint16(30814), + 111: uint16(30818), + 112: uint16(31092), + 113: uint16(31091), + 114: uint16(31090), + 115: uint16(31088), + 116: uint16(31234), + 117: uint16(31242), + 118: uint16(31235), + 119: uint16(31244), + 120: uint16(31236), + 121: uint16(31385), + 122: uint16(31462), + 123: uint16(31460), + 124: uint16(31562), + 125: uint16(31547), + 126: uint16(31556), + 127: uint16(31560), + 128: uint16(31564), + 129: uint16(31566), + 130: uint16(31552), + 131: uint16(31576), + 132: uint16(31557), + 133: uint16(31906), + 134: uint16(31902), + 135: uint16(31912), + 136: uint16(31905), + 137: uint16(32088), + 138: uint16(32111), + 139: uint16(32099), + 140: uint16(32083), + 141: uint16(32086), + 142: uint16(32103), + 143: uint16(32106), + 144: uint16(32079), + 145: uint16(32109), + 146: uint16(32092), + 147: uint16(32107), + 148: uint16(32082), + 149: uint16(32084), + 150: uint16(32105), + 151: uint16(32081), + 152: uint16(32095), + 153: uint16(32078), + 154: uint16(32574), + 155: uint16(32575), + 156: uint16(32613), + }, + 58: { + 0: uint16(32614), + 1: uint16(32674), + 2: uint16(32672), + 3: uint16(32673), + 4: uint16(32727), + 5: uint16(32849), + 6: uint16(32847), + 7: uint16(32848), + 8: uint16(33022), + 9: uint16(32980), + 10: uint16(33091), + 11: uint16(33098), + 12: uint16(33106), + 13: uint16(33103), + 14: uint16(33095), + 15: uint16(33085), + 16: uint16(33101), + 17: uint16(33082), + 18: uint16(33254), + 19: uint16(33262), + 20: uint16(33271), + 21: uint16(33272), + 22: uint16(33273), + 23: uint16(33284), + 24: uint16(33340), + 25: uint16(33341), + 26: uint16(33343), + 27: uint16(33397), + 28: uint16(33595), + 29: uint16(33743), + 30: uint16(33785), + 31: uint16(33827), + 32: uint16(33728), + 33: uint16(33768), + 34: uint16(33810), + 35: uint16(33767), + 36: uint16(33764), + 37: uint16(33788), + 38: uint16(33782), + 39: uint16(33808), + 40: uint16(33734), + 41: uint16(33736), + 42: uint16(33771), + 43: uint16(33763), + 44: uint16(33727), + 45: uint16(33793), + 46: uint16(33757), + 47: uint16(33765), + 48: uint16(33752), + 49: uint16(33791), + 50: uint16(33761), + 51: uint16(33739), + 52: uint16(33742), + 53: uint16(33750), + 54: uint16(33781), + 55: uint16(33737), + 56: uint16(33801), + 57: uint16(33807), + 58: uint16(33758), + 59: uint16(33809), + 60: uint16(33798), + 61: uint16(33730), + 62: uint16(33779), + 63: uint16(33749), + 64: uint16(33786), + 65: uint16(33735), + 66: uint16(33745), + 67: uint16(33770), + 68: uint16(33811), + 69: uint16(33731), + 70: uint16(33772), + 71: uint16(33774), + 72: uint16(33732), + 73: uint16(33787), + 74: uint16(33751), + 75: uint16(33762), + 76: uint16(33819), + 77: uint16(33755), + 78: uint16(33790), + 79: uint16(34520), + 80: uint16(34530), + 81: uint16(34534), + 82: uint16(34515), + 83: uint16(34531), + 84: uint16(34522), + 85: uint16(34538), + 86: uint16(34525), + 87: uint16(34539), + 88: uint16(34524), + 89: uint16(34540), + 90: uint16(34537), + 91: uint16(34519), + 92: uint16(34536), + 93: uint16(34513), + 94: uint16(34888), + 95: uint16(34902), + 96: uint16(34901), + 97: uint16(35002), + 98: uint16(35031), + 99: uint16(35001), + 100: uint16(35000), + 101: uint16(35008), + 102: uint16(35006), + 103: uint16(34998), + 104: uint16(35004), + 105: uint16(34999), + 106: uint16(35005), + 107: uint16(34994), + 108: uint16(35073), + 109: uint16(35017), + 110: uint16(35221), + 111: uint16(35224), + 112: uint16(35223), + 113: uint16(35293), + 114: uint16(35290), + 115: uint16(35291), + 116: uint16(35406), + 117: uint16(35405), + 118: uint16(35385), + 119: uint16(35417), + 120: uint16(35392), + 121: uint16(35415), + 122: uint16(35416), + 123: uint16(35396), + 124: uint16(35397), + 125: uint16(35410), + 126: uint16(35400), + 127: uint16(35409), + 128: uint16(35402), + 129: uint16(35404), + 130: uint16(35407), + 131: uint16(35935), + 132: uint16(35969), + 133: uint16(35968), + 134: uint16(36026), + 135: uint16(36030), + 136: uint16(36016), + 137: uint16(36025), + 138: uint16(36021), + 139: uint16(36228), + 140: uint16(36224), + 141: uint16(36233), + 142: uint16(36312), + 143: uint16(36307), + 144: uint16(36301), + 145: uint16(36295), + 146: uint16(36310), + 147: uint16(36316), + 148: uint16(36303), + 149: uint16(36309), + 150: uint16(36313), + 151: uint16(36296), + 152: uint16(36311), + 153: uint16(36293), + 154: uint16(36591), + 155: uint16(36599), + 156: uint16(36602), + }, + 59: { + 0: uint16(36601), + 1: uint16(36582), + 2: uint16(36590), + 3: uint16(36581), + 4: uint16(36597), + 5: uint16(36583), + 6: uint16(36584), + 7: uint16(36598), + 8: uint16(36587), + 9: uint16(36593), + 10: uint16(36588), + 11: uint16(36596), + 12: uint16(36585), + 13: uint16(36909), + 14: uint16(36916), + 15: uint16(36911), + 16: uint16(37126), + 17: uint16(37164), + 18: uint16(37124), + 19: uint16(37119), + 20: uint16(37116), + 21: uint16(37128), + 22: uint16(37113), + 23: uint16(37115), + 24: uint16(37121), + 25: uint16(37120), + 26: uint16(37127), + 27: uint16(37125), + 28: uint16(37123), + 29: uint16(37217), + 30: uint16(37220), + 31: uint16(37215), + 32: uint16(37218), + 33: uint16(37216), + 34: uint16(37377), + 35: uint16(37386), + 36: uint16(37413), + 37: uint16(37379), + 38: uint16(37402), + 39: uint16(37414), + 40: uint16(37391), + 41: uint16(37388), + 42: uint16(37376), + 43: uint16(37394), + 44: uint16(37375), + 45: uint16(37373), + 46: uint16(37382), + 47: uint16(37380), + 48: uint16(37415), + 49: uint16(37378), + 50: uint16(37404), + 51: uint16(37412), + 52: uint16(37401), + 53: uint16(37399), + 54: uint16(37381), + 55: uint16(37398), + 56: uint16(38267), + 57: uint16(38285), + 58: uint16(38284), + 59: uint16(38288), + 60: uint16(38535), + 61: uint16(38526), + 62: uint16(38536), + 63: uint16(38537), + 64: uint16(38531), + 65: uint16(38528), + 66: uint16(38594), + 67: uint16(38600), + 68: uint16(38595), + 69: uint16(38641), + 70: uint16(38640), + 71: uint16(38764), + 72: uint16(38768), + 73: uint16(38766), + 74: uint16(38919), + 75: uint16(39081), + 76: uint16(39147), + 77: uint16(40166), + 78: uint16(40697), + 79: uint16(20099), + 80: uint16(20100), + 81: uint16(20150), + 82: uint16(20669), + 83: uint16(20671), + 84: uint16(20678), + 85: uint16(20654), + 86: uint16(20676), + 87: uint16(20682), + 88: uint16(20660), + 89: uint16(20680), + 90: uint16(20674), + 91: uint16(20656), + 92: uint16(20673), + 93: uint16(20666), + 94: uint16(20657), + 95: uint16(20683), + 96: uint16(20681), + 97: uint16(20662), + 98: uint16(20664), + 99: uint16(20951), + 100: uint16(21114), + 101: uint16(21112), + 102: uint16(21115), + 103: uint16(21116), + 104: uint16(21955), + 105: uint16(21979), + 106: uint16(21964), + 107: uint16(21968), + 108: uint16(21963), + 109: uint16(21962), + 110: uint16(21981), + 111: uint16(21952), + 112: uint16(21972), + 113: uint16(21956), + 114: uint16(21993), + 115: uint16(21951), + 116: uint16(21970), + 117: uint16(21901), + 118: uint16(21967), + 119: uint16(21973), + 120: uint16(21986), + 121: uint16(21974), + 122: uint16(21960), + 123: uint16(22002), + 124: uint16(21965), + 125: uint16(21977), + 126: uint16(21954), + 127: uint16(22292), + 128: uint16(22611), + 129: uint16(22632), + 130: uint16(22628), + 131: uint16(22607), + 132: uint16(22605), + 133: uint16(22601), + 134: uint16(22639), + 135: uint16(22613), + 136: uint16(22606), + 137: uint16(22621), + 138: uint16(22617), + 139: uint16(22629), + 140: uint16(22619), + 141: uint16(22589), + 142: uint16(22627), + 143: uint16(22641), + 144: uint16(22780), + 145: uint16(23239), + 146: uint16(23236), + 147: uint16(23243), + 148: uint16(23226), + 149: uint16(23224), + 150: uint16(23217), + 151: uint16(23221), + 152: uint16(23216), + 153: uint16(23231), + 154: uint16(23240), + 155: uint16(23227), + 156: uint16(23238), + }, + 60: { + 0: uint16(23223), + 1: uint16(23232), + 2: uint16(23242), + 3: uint16(23220), + 4: uint16(23222), + 5: uint16(23245), + 6: uint16(23225), + 7: uint16(23184), + 8: uint16(23510), + 9: uint16(23512), + 10: uint16(23513), + 11: uint16(23583), + 12: uint16(23603), + 13: uint16(23921), + 14: uint16(23907), + 15: uint16(23882), + 16: uint16(23909), + 17: uint16(23922), + 18: uint16(23916), + 19: uint16(23902), + 20: uint16(23912), + 21: uint16(23911), + 22: uint16(23906), + 23: uint16(24048), + 24: uint16(24143), + 25: uint16(24142), + 26: uint16(24138), + 27: uint16(24141), + 28: uint16(24139), + 29: uint16(24261), + 30: uint16(24268), + 31: uint16(24262), + 32: uint16(24267), + 33: uint16(24263), + 34: uint16(24384), + 35: uint16(24495), + 36: uint16(24493), + 37: uint16(24823), + 38: uint16(24905), + 39: uint16(24906), + 40: uint16(24875), + 41: uint16(24901), + 42: uint16(24886), + 43: uint16(24882), + 44: uint16(24878), + 45: uint16(24902), + 46: uint16(24879), + 47: uint16(24911), + 48: uint16(24873), + 49: uint16(24896), + 50: uint16(25120), + 51: uint16(37224), + 52: uint16(25123), + 53: uint16(25125), + 54: uint16(25124), + 55: uint16(25541), + 56: uint16(25585), + 57: uint16(25579), + 58: uint16(25616), + 59: uint16(25618), + 60: uint16(25609), + 61: uint16(25632), + 62: uint16(25636), + 63: uint16(25651), + 64: uint16(25667), + 65: uint16(25631), + 66: uint16(25621), + 67: uint16(25624), + 68: uint16(25657), + 69: uint16(25655), + 70: uint16(25634), + 71: uint16(25635), + 72: uint16(25612), + 73: uint16(25638), + 74: uint16(25648), + 75: uint16(25640), + 76: uint16(25665), + 77: uint16(25653), + 78: uint16(25647), + 79: uint16(25610), + 80: uint16(25626), + 81: uint16(25664), + 82: uint16(25637), + 83: uint16(25639), + 84: uint16(25611), + 85: uint16(25575), + 86: uint16(25627), + 87: uint16(25646), + 88: uint16(25633), + 89: uint16(25614), + 90: uint16(25967), + 91: uint16(26002), + 92: uint16(26067), + 93: uint16(26246), + 94: uint16(26252), + 95: uint16(26261), + 96: uint16(26256), + 97: uint16(26251), + 98: uint16(26250), + 99: uint16(26265), + 100: uint16(26260), + 101: uint16(26232), + 102: uint16(26400), + 103: uint16(26982), + 104: uint16(26975), + 105: uint16(26936), + 106: uint16(26958), + 107: uint16(26978), + 108: uint16(26993), + 109: uint16(26943), + 110: uint16(26949), + 111: uint16(26986), + 112: uint16(26937), + 113: uint16(26946), + 114: uint16(26967), + 115: uint16(26969), + 116: uint16(27002), + 117: uint16(26952), + 118: uint16(26953), + 119: uint16(26933), + 120: uint16(26988), + 121: uint16(26931), + 122: uint16(26941), + 123: uint16(26981), + 124: uint16(26864), + 125: uint16(27000), + 126: uint16(26932), + 127: uint16(26985), + 128: uint16(26944), + 129: uint16(26991), + 130: uint16(26948), + 131: uint16(26998), + 132: uint16(26968), + 133: uint16(26945), + 134: uint16(26996), + 135: uint16(26956), + 136: uint16(26939), + 137: uint16(26955), + 138: uint16(26935), + 139: uint16(26972), + 140: uint16(26959), + 141: uint16(26961), + 142: uint16(26930), + 143: uint16(26962), + 144: uint16(26927), + 145: uint16(27003), + 146: uint16(26940), + 147: uint16(27462), + 148: uint16(27461), + 149: uint16(27459), + 150: uint16(27458), + 151: uint16(27464), + 152: uint16(27457), + 153: uint16(27547), + 154: uint16(64013), + 155: uint16(27643), + 156: uint16(27644), + }, + 61: { + 0: uint16(27641), + 1: uint16(27639), + 2: uint16(27640), + 3: uint16(28315), + 4: uint16(28374), + 5: uint16(28360), + 6: uint16(28303), + 7: uint16(28352), + 8: uint16(28319), + 9: uint16(28307), + 10: uint16(28308), + 11: uint16(28320), + 12: uint16(28337), + 13: uint16(28345), + 14: uint16(28358), + 15: uint16(28370), + 16: uint16(28349), + 17: uint16(28353), + 18: uint16(28318), + 19: uint16(28361), + 20: uint16(28343), + 21: uint16(28336), + 22: uint16(28365), + 23: uint16(28326), + 24: uint16(28367), + 25: uint16(28338), + 26: uint16(28350), + 27: uint16(28355), + 28: uint16(28380), + 29: uint16(28376), + 30: uint16(28313), + 31: uint16(28306), + 32: uint16(28302), + 33: uint16(28301), + 34: uint16(28324), + 35: uint16(28321), + 36: uint16(28351), + 37: uint16(28339), + 38: uint16(28368), + 39: uint16(28362), + 40: uint16(28311), + 41: uint16(28334), + 42: uint16(28323), + 43: uint16(28999), + 44: uint16(29012), + 45: uint16(29010), + 46: uint16(29027), + 47: uint16(29024), + 48: uint16(28993), + 49: uint16(29021), + 50: uint16(29026), + 51: uint16(29042), + 52: uint16(29048), + 53: uint16(29034), + 54: uint16(29025), + 55: uint16(28994), + 56: uint16(29016), + 57: uint16(28995), + 58: uint16(29003), + 59: uint16(29040), + 60: uint16(29023), + 61: uint16(29008), + 62: uint16(29011), + 63: uint16(28996), + 64: uint16(29005), + 65: uint16(29018), + 66: uint16(29263), + 67: uint16(29325), + 68: uint16(29324), + 69: uint16(29329), + 70: uint16(29328), + 71: uint16(29326), + 72: uint16(29500), + 73: uint16(29506), + 74: uint16(29499), + 75: uint16(29498), + 76: uint16(29504), + 77: uint16(29514), + 78: uint16(29513), + 79: uint16(29764), + 80: uint16(29770), + 81: uint16(29771), + 82: uint16(29778), + 83: uint16(29777), + 84: uint16(29783), + 85: uint16(29760), + 86: uint16(29775), + 87: uint16(29776), + 88: uint16(29774), + 89: uint16(29762), + 90: uint16(29766), + 91: uint16(29773), + 92: uint16(29780), + 93: uint16(29921), + 94: uint16(29951), + 95: uint16(29950), + 96: uint16(29949), + 97: uint16(29981), + 98: uint16(30073), + 99: uint16(30071), + 100: uint16(27011), + 101: uint16(30191), + 102: uint16(30223), + 103: uint16(30211), + 104: uint16(30199), + 105: uint16(30206), + 106: uint16(30204), + 107: uint16(30201), + 108: uint16(30200), + 109: uint16(30224), + 110: uint16(30203), + 111: uint16(30198), + 112: uint16(30189), + 113: uint16(30197), + 114: uint16(30205), + 115: uint16(30361), + 116: uint16(30389), + 117: uint16(30429), + 118: uint16(30549), + 119: uint16(30559), + 120: uint16(30560), + 121: uint16(30546), + 122: uint16(30550), + 123: uint16(30554), + 124: uint16(30569), + 125: uint16(30567), + 126: uint16(30548), + 127: uint16(30553), + 128: uint16(30573), + 129: uint16(30688), + 130: uint16(30855), + 131: uint16(30874), + 132: uint16(30868), + 133: uint16(30863), + 134: uint16(30852), + 135: uint16(30869), + 136: uint16(30853), + 137: uint16(30854), + 138: uint16(30881), + 139: uint16(30851), + 140: uint16(30841), + 141: uint16(30873), + 142: uint16(30848), + 143: uint16(30870), + 144: uint16(30843), + 145: uint16(31100), + 146: uint16(31106), + 147: uint16(31101), + 148: uint16(31097), + 149: uint16(31249), + 150: uint16(31256), + 151: uint16(31257), + 152: uint16(31250), + 153: uint16(31255), + 154: uint16(31253), + 155: uint16(31266), + 156: uint16(31251), + }, + 62: { + 0: uint16(31259), + 1: uint16(31248), + 2: uint16(31395), + 3: uint16(31394), + 4: uint16(31390), + 5: uint16(31467), + 6: uint16(31590), + 7: uint16(31588), + 8: uint16(31597), + 9: uint16(31604), + 10: uint16(31593), + 11: uint16(31602), + 12: uint16(31589), + 13: uint16(31603), + 14: uint16(31601), + 15: uint16(31600), + 16: uint16(31585), + 17: uint16(31608), + 18: uint16(31606), + 19: uint16(31587), + 20: uint16(31922), + 21: uint16(31924), + 22: uint16(31919), + 23: uint16(32136), + 24: uint16(32134), + 25: uint16(32128), + 26: uint16(32141), + 27: uint16(32127), + 28: uint16(32133), + 29: uint16(32122), + 30: uint16(32142), + 31: uint16(32123), + 32: uint16(32131), + 33: uint16(32124), + 34: uint16(32140), + 35: uint16(32148), + 36: uint16(32132), + 37: uint16(32125), + 38: uint16(32146), + 39: uint16(32621), + 40: uint16(32619), + 41: uint16(32615), + 42: uint16(32616), + 43: uint16(32620), + 44: uint16(32678), + 45: uint16(32677), + 46: uint16(32679), + 47: uint16(32731), + 48: uint16(32732), + 49: uint16(32801), + 50: uint16(33124), + 51: uint16(33120), + 52: uint16(33143), + 53: uint16(33116), + 54: uint16(33129), + 55: uint16(33115), + 56: uint16(33122), + 57: uint16(33138), + 58: uint16(26401), + 59: uint16(33118), + 60: uint16(33142), + 61: uint16(33127), + 62: uint16(33135), + 63: uint16(33092), + 64: uint16(33121), + 65: uint16(33309), + 66: uint16(33353), + 67: uint16(33348), + 68: uint16(33344), + 69: uint16(33346), + 70: uint16(33349), + 71: uint16(34033), + 72: uint16(33855), + 73: uint16(33878), + 74: uint16(33910), + 75: uint16(33913), + 76: uint16(33935), + 77: uint16(33933), + 78: uint16(33893), + 79: uint16(33873), + 80: uint16(33856), + 81: uint16(33926), + 82: uint16(33895), + 83: uint16(33840), + 84: uint16(33869), + 85: uint16(33917), + 86: uint16(33882), + 87: uint16(33881), + 88: uint16(33908), + 89: uint16(33907), + 90: uint16(33885), + 91: uint16(34055), + 92: uint16(33886), + 93: uint16(33847), + 94: uint16(33850), + 95: uint16(33844), + 96: uint16(33914), + 97: uint16(33859), + 98: uint16(33912), + 99: uint16(33842), + 100: uint16(33861), + 101: uint16(33833), + 102: uint16(33753), + 103: uint16(33867), + 104: uint16(33839), + 105: uint16(33858), + 106: uint16(33837), + 107: uint16(33887), + 108: uint16(33904), + 109: uint16(33849), + 110: uint16(33870), + 111: uint16(33868), + 112: uint16(33874), + 113: uint16(33903), + 114: uint16(33989), + 115: uint16(33934), + 116: uint16(33851), + 117: uint16(33863), + 118: uint16(33846), + 119: uint16(33843), + 120: uint16(33896), + 121: uint16(33918), + 122: uint16(33860), + 123: uint16(33835), + 124: uint16(33888), + 125: uint16(33876), + 126: uint16(33902), + 127: uint16(33872), + 128: uint16(34571), + 129: uint16(34564), + 130: uint16(34551), + 131: uint16(34572), + 132: uint16(34554), + 133: uint16(34518), + 134: uint16(34549), + 135: uint16(34637), + 136: uint16(34552), + 137: uint16(34574), + 138: uint16(34569), + 139: uint16(34561), + 140: uint16(34550), + 141: uint16(34573), + 142: uint16(34565), + 143: uint16(35030), + 144: uint16(35019), + 145: uint16(35021), + 146: uint16(35022), + 147: uint16(35038), + 148: uint16(35035), + 149: uint16(35034), + 150: uint16(35020), + 151: uint16(35024), + 152: uint16(35205), + 153: uint16(35227), + 154: uint16(35295), + 155: uint16(35301), + 156: uint16(35300), + }, + 63: { + 0: uint16(35297), + 1: uint16(35296), + 2: uint16(35298), + 3: uint16(35292), + 4: uint16(35302), + 5: uint16(35446), + 6: uint16(35462), + 7: uint16(35455), + 8: uint16(35425), + 9: uint16(35391), + 10: uint16(35447), + 11: uint16(35458), + 12: uint16(35460), + 13: uint16(35445), + 14: uint16(35459), + 15: uint16(35457), + 16: uint16(35444), + 17: uint16(35450), + 18: uint16(35900), + 19: uint16(35915), + 20: uint16(35914), + 21: uint16(35941), + 22: uint16(35940), + 23: uint16(35942), + 24: uint16(35974), + 25: uint16(35972), + 26: uint16(35973), + 27: uint16(36044), + 28: uint16(36200), + 29: uint16(36201), + 30: uint16(36241), + 31: uint16(36236), + 32: uint16(36238), + 33: uint16(36239), + 34: uint16(36237), + 35: uint16(36243), + 36: uint16(36244), + 37: uint16(36240), + 38: uint16(36242), + 39: uint16(36336), + 40: uint16(36320), + 41: uint16(36332), + 42: uint16(36337), + 43: uint16(36334), + 44: uint16(36304), + 45: uint16(36329), + 46: uint16(36323), + 47: uint16(36322), + 48: uint16(36327), + 49: uint16(36338), + 50: uint16(36331), + 51: uint16(36340), + 52: uint16(36614), + 53: uint16(36607), + 54: uint16(36609), + 55: uint16(36608), + 56: uint16(36613), + 57: uint16(36615), + 58: uint16(36616), + 59: uint16(36610), + 60: uint16(36619), + 61: uint16(36946), + 62: uint16(36927), + 63: uint16(36932), + 64: uint16(36937), + 65: uint16(36925), + 66: uint16(37136), + 67: uint16(37133), + 68: uint16(37135), + 69: uint16(37137), + 70: uint16(37142), + 71: uint16(37140), + 72: uint16(37131), + 73: uint16(37134), + 74: uint16(37230), + 75: uint16(37231), + 76: uint16(37448), + 77: uint16(37458), + 78: uint16(37424), + 79: uint16(37434), + 80: uint16(37478), + 81: uint16(37427), + 82: uint16(37477), + 83: uint16(37470), + 84: uint16(37507), + 85: uint16(37422), + 86: uint16(37450), + 87: uint16(37446), + 88: uint16(37485), + 89: uint16(37484), + 90: uint16(37455), + 91: uint16(37472), + 92: uint16(37479), + 93: uint16(37487), + 94: uint16(37430), + 95: uint16(37473), + 96: uint16(37488), + 97: uint16(37425), + 98: uint16(37460), + 99: uint16(37475), + 100: uint16(37456), + 101: uint16(37490), + 102: uint16(37454), + 103: uint16(37459), + 104: uint16(37452), + 105: uint16(37462), + 106: uint16(37426), + 107: uint16(38303), + 108: uint16(38300), + 109: uint16(38302), + 110: uint16(38299), + 111: uint16(38546), + 112: uint16(38547), + 113: uint16(38545), + 114: uint16(38551), + 115: uint16(38606), + 116: uint16(38650), + 117: uint16(38653), + 118: uint16(38648), + 119: uint16(38645), + 120: uint16(38771), + 121: uint16(38775), + 122: uint16(38776), + 123: uint16(38770), + 124: uint16(38927), + 125: uint16(38925), + 126: uint16(38926), + 127: uint16(39084), + 128: uint16(39158), + 129: uint16(39161), + 130: uint16(39343), + 131: uint16(39346), + 132: uint16(39344), + 133: uint16(39349), + 134: uint16(39597), + 135: uint16(39595), + 136: uint16(39771), + 137: uint16(40170), + 138: uint16(40173), + 139: uint16(40167), + 140: uint16(40576), + 141: uint16(40701), + 142: uint16(20710), + 143: uint16(20692), + 144: uint16(20695), + 145: uint16(20712), + 146: uint16(20723), + 147: uint16(20699), + 148: uint16(20714), + 149: uint16(20701), + 150: uint16(20708), + 151: uint16(20691), + 152: uint16(20716), + 153: uint16(20720), + 154: uint16(20719), + 155: uint16(20707), + 156: uint16(20704), + }, + 64: { + 0: uint16(20952), + 1: uint16(21120), + 2: uint16(21121), + 3: uint16(21225), + 4: uint16(21227), + 5: uint16(21296), + 6: uint16(21420), + 7: uint16(22055), + 8: uint16(22037), + 9: uint16(22028), + 10: uint16(22034), + 11: uint16(22012), + 12: uint16(22031), + 13: uint16(22044), + 14: uint16(22017), + 15: uint16(22035), + 16: uint16(22018), + 17: uint16(22010), + 18: uint16(22045), + 19: uint16(22020), + 20: uint16(22015), + 21: uint16(22009), + 22: uint16(22665), + 23: uint16(22652), + 24: uint16(22672), + 25: uint16(22680), + 26: uint16(22662), + 27: uint16(22657), + 28: uint16(22655), + 29: uint16(22644), + 30: uint16(22667), + 31: uint16(22650), + 32: uint16(22663), + 33: uint16(22673), + 34: uint16(22670), + 35: uint16(22646), + 36: uint16(22658), + 37: uint16(22664), + 38: uint16(22651), + 39: uint16(22676), + 40: uint16(22671), + 41: uint16(22782), + 42: uint16(22891), + 43: uint16(23260), + 44: uint16(23278), + 45: uint16(23269), + 46: uint16(23253), + 47: uint16(23274), + 48: uint16(23258), + 49: uint16(23277), + 50: uint16(23275), + 51: uint16(23283), + 52: uint16(23266), + 53: uint16(23264), + 54: uint16(23259), + 55: uint16(23276), + 56: uint16(23262), + 57: uint16(23261), + 58: uint16(23257), + 59: uint16(23272), + 60: uint16(23263), + 61: uint16(23415), + 62: uint16(23520), + 63: uint16(23523), + 64: uint16(23651), + 65: uint16(23938), + 66: uint16(23936), + 67: uint16(23933), + 68: uint16(23942), + 69: uint16(23930), + 70: uint16(23937), + 71: uint16(23927), + 72: uint16(23946), + 73: uint16(23945), + 74: uint16(23944), + 75: uint16(23934), + 76: uint16(23932), + 77: uint16(23949), + 78: uint16(23929), + 79: uint16(23935), + 80: uint16(24152), + 81: uint16(24153), + 82: uint16(24147), + 83: uint16(24280), + 84: uint16(24273), + 85: uint16(24279), + 86: uint16(24270), + 87: uint16(24284), + 88: uint16(24277), + 89: uint16(24281), + 90: uint16(24274), + 91: uint16(24276), + 92: uint16(24388), + 93: uint16(24387), + 94: uint16(24431), + 95: uint16(24502), + 96: uint16(24876), + 97: uint16(24872), + 98: uint16(24897), + 99: uint16(24926), + 100: uint16(24945), + 101: uint16(24947), + 102: uint16(24914), + 103: uint16(24915), + 104: uint16(24946), + 105: uint16(24940), + 106: uint16(24960), + 107: uint16(24948), + 108: uint16(24916), + 109: uint16(24954), + 110: uint16(24923), + 111: uint16(24933), + 112: uint16(24891), + 113: uint16(24938), + 114: uint16(24929), + 115: uint16(24918), + 116: uint16(25129), + 117: uint16(25127), + 118: uint16(25131), + 119: uint16(25643), + 120: uint16(25677), + 121: uint16(25691), + 122: uint16(25693), + 123: uint16(25716), + 124: uint16(25718), + 125: uint16(25714), + 126: uint16(25715), + 127: uint16(25725), + 128: uint16(25717), + 129: uint16(25702), + 130: uint16(25766), + 131: uint16(25678), + 132: uint16(25730), + 133: uint16(25694), + 134: uint16(25692), + 135: uint16(25675), + 136: uint16(25683), + 137: uint16(25696), + 138: uint16(25680), + 139: uint16(25727), + 140: uint16(25663), + 141: uint16(25708), + 142: uint16(25707), + 143: uint16(25689), + 144: uint16(25701), + 145: uint16(25719), + 146: uint16(25971), + 147: uint16(26016), + 148: uint16(26273), + 149: uint16(26272), + 150: uint16(26271), + 151: uint16(26373), + 152: uint16(26372), + 153: uint16(26402), + 154: uint16(27057), + 155: uint16(27062), + 156: uint16(27081), + }, + 65: { + 0: uint16(27040), + 1: uint16(27086), + 2: uint16(27030), + 3: uint16(27056), + 4: uint16(27052), + 5: uint16(27068), + 6: uint16(27025), + 7: uint16(27033), + 8: uint16(27022), + 9: uint16(27047), + 10: uint16(27021), + 11: uint16(27049), + 12: uint16(27070), + 13: uint16(27055), + 14: uint16(27071), + 15: uint16(27076), + 16: uint16(27069), + 17: uint16(27044), + 18: uint16(27092), + 19: uint16(27065), + 20: uint16(27082), + 21: uint16(27034), + 22: uint16(27087), + 23: uint16(27059), + 24: uint16(27027), + 25: uint16(27050), + 26: uint16(27041), + 27: uint16(27038), + 28: uint16(27097), + 29: uint16(27031), + 30: uint16(27024), + 31: uint16(27074), + 32: uint16(27061), + 33: uint16(27045), + 34: uint16(27078), + 35: uint16(27466), + 36: uint16(27469), + 37: uint16(27467), + 38: uint16(27550), + 39: uint16(27551), + 40: uint16(27552), + 41: uint16(27587), + 42: uint16(27588), + 43: uint16(27646), + 44: uint16(28366), + 45: uint16(28405), + 46: uint16(28401), + 47: uint16(28419), + 48: uint16(28453), + 49: uint16(28408), + 50: uint16(28471), + 51: uint16(28411), + 52: uint16(28462), + 53: uint16(28425), + 54: uint16(28494), + 55: uint16(28441), + 56: uint16(28442), + 57: uint16(28455), + 58: uint16(28440), + 59: uint16(28475), + 60: uint16(28434), + 61: uint16(28397), + 62: uint16(28426), + 63: uint16(28470), + 64: uint16(28531), + 65: uint16(28409), + 66: uint16(28398), + 67: uint16(28461), + 68: uint16(28480), + 69: uint16(28464), + 70: uint16(28476), + 71: uint16(28469), + 72: uint16(28395), + 73: uint16(28423), + 74: uint16(28430), + 75: uint16(28483), + 76: uint16(28421), + 77: uint16(28413), + 78: uint16(28406), + 79: uint16(28473), + 80: uint16(28444), + 81: uint16(28412), + 82: uint16(28474), + 83: uint16(28447), + 84: uint16(28429), + 85: uint16(28446), + 86: uint16(28424), + 87: uint16(28449), + 88: uint16(29063), + 89: uint16(29072), + 90: uint16(29065), + 91: uint16(29056), + 92: uint16(29061), + 93: uint16(29058), + 94: uint16(29071), + 95: uint16(29051), + 96: uint16(29062), + 97: uint16(29057), + 98: uint16(29079), + 99: uint16(29252), + 100: uint16(29267), + 101: uint16(29335), + 102: uint16(29333), + 103: uint16(29331), + 104: uint16(29507), + 105: uint16(29517), + 106: uint16(29521), + 107: uint16(29516), + 108: uint16(29794), + 109: uint16(29811), + 110: uint16(29809), + 111: uint16(29813), + 112: uint16(29810), + 113: uint16(29799), + 114: uint16(29806), + 115: uint16(29952), + 116: uint16(29954), + 117: uint16(29955), + 118: uint16(30077), + 119: uint16(30096), + 120: uint16(30230), + 121: uint16(30216), + 122: uint16(30220), + 123: uint16(30229), + 124: uint16(30225), + 125: uint16(30218), + 126: uint16(30228), + 127: uint16(30392), + 128: uint16(30593), + 129: uint16(30588), + 130: uint16(30597), + 131: uint16(30594), + 132: uint16(30574), + 133: uint16(30592), + 134: uint16(30575), + 135: uint16(30590), + 136: uint16(30595), + 137: uint16(30898), + 138: uint16(30890), + 139: uint16(30900), + 140: uint16(30893), + 141: uint16(30888), + 142: uint16(30846), + 143: uint16(30891), + 144: uint16(30878), + 145: uint16(30885), + 146: uint16(30880), + 147: uint16(30892), + 148: uint16(30882), + 149: uint16(30884), + 150: uint16(31128), + 151: uint16(31114), + 152: uint16(31115), + 153: uint16(31126), + 154: uint16(31125), + 155: uint16(31124), + 156: uint16(31123), + }, + 66: { + 0: uint16(31127), + 1: uint16(31112), + 2: uint16(31122), + 3: uint16(31120), + 4: uint16(31275), + 5: uint16(31306), + 6: uint16(31280), + 7: uint16(31279), + 8: uint16(31272), + 9: uint16(31270), + 10: uint16(31400), + 11: uint16(31403), + 12: uint16(31404), + 13: uint16(31470), + 14: uint16(31624), + 15: uint16(31644), + 16: uint16(31626), + 17: uint16(31633), + 18: uint16(31632), + 19: uint16(31638), + 20: uint16(31629), + 21: uint16(31628), + 22: uint16(31643), + 23: uint16(31630), + 24: uint16(31621), + 25: uint16(31640), + 26: uint16(21124), + 27: uint16(31641), + 28: uint16(31652), + 29: uint16(31618), + 30: uint16(31931), + 31: uint16(31935), + 32: uint16(31932), + 33: uint16(31930), + 34: uint16(32167), + 35: uint16(32183), + 36: uint16(32194), + 37: uint16(32163), + 38: uint16(32170), + 39: uint16(32193), + 40: uint16(32192), + 41: uint16(32197), + 42: uint16(32157), + 43: uint16(32206), + 44: uint16(32196), + 45: uint16(32198), + 46: uint16(32203), + 47: uint16(32204), + 48: uint16(32175), + 49: uint16(32185), + 50: uint16(32150), + 51: uint16(32188), + 52: uint16(32159), + 53: uint16(32166), + 54: uint16(32174), + 55: uint16(32169), + 56: uint16(32161), + 57: uint16(32201), + 58: uint16(32627), + 59: uint16(32738), + 60: uint16(32739), + 61: uint16(32741), + 62: uint16(32734), + 63: uint16(32804), + 64: uint16(32861), + 65: uint16(32860), + 66: uint16(33161), + 67: uint16(33158), + 68: uint16(33155), + 69: uint16(33159), + 70: uint16(33165), + 71: uint16(33164), + 72: uint16(33163), + 73: uint16(33301), + 74: uint16(33943), + 75: uint16(33956), + 76: uint16(33953), + 77: uint16(33951), + 78: uint16(33978), + 79: uint16(33998), + 80: uint16(33986), + 81: uint16(33964), + 82: uint16(33966), + 83: uint16(33963), + 84: uint16(33977), + 85: uint16(33972), + 86: uint16(33985), + 87: uint16(33997), + 88: uint16(33962), + 89: uint16(33946), + 90: uint16(33969), + 91: uint16(34000), + 92: uint16(33949), + 93: uint16(33959), + 94: uint16(33979), + 95: uint16(33954), + 96: uint16(33940), + 97: uint16(33991), + 98: uint16(33996), + 99: uint16(33947), + 100: uint16(33961), + 101: uint16(33967), + 102: uint16(33960), + 103: uint16(34006), + 104: uint16(33944), + 105: uint16(33974), + 106: uint16(33999), + 107: uint16(33952), + 108: uint16(34007), + 109: uint16(34004), + 110: uint16(34002), + 111: uint16(34011), + 112: uint16(33968), + 113: uint16(33937), + 114: uint16(34401), + 115: uint16(34611), + 116: uint16(34595), + 117: uint16(34600), + 118: uint16(34667), + 119: uint16(34624), + 120: uint16(34606), + 121: uint16(34590), + 122: uint16(34593), + 123: uint16(34585), + 124: uint16(34587), + 125: uint16(34627), + 126: uint16(34604), + 127: uint16(34625), + 128: uint16(34622), + 129: uint16(34630), + 130: uint16(34592), + 131: uint16(34610), + 132: uint16(34602), + 133: uint16(34605), + 134: uint16(34620), + 135: uint16(34578), + 136: uint16(34618), + 137: uint16(34609), + 138: uint16(34613), + 139: uint16(34626), + 140: uint16(34598), + 141: uint16(34599), + 142: uint16(34616), + 143: uint16(34596), + 144: uint16(34586), + 145: uint16(34608), + 146: uint16(34577), + 147: uint16(35063), + 148: uint16(35047), + 149: uint16(35057), + 150: uint16(35058), + 151: uint16(35066), + 152: uint16(35070), + 153: uint16(35054), + 154: uint16(35068), + 155: uint16(35062), + 156: uint16(35067), + }, + 67: { + 0: uint16(35056), + 1: uint16(35052), + 2: uint16(35051), + 3: uint16(35229), + 4: uint16(35233), + 5: uint16(35231), + 6: uint16(35230), + 7: uint16(35305), + 8: uint16(35307), + 9: uint16(35304), + 10: uint16(35499), + 11: uint16(35481), + 12: uint16(35467), + 13: uint16(35474), + 14: uint16(35471), + 15: uint16(35478), + 16: uint16(35901), + 17: uint16(35944), + 18: uint16(35945), + 19: uint16(36053), + 20: uint16(36047), + 21: uint16(36055), + 22: uint16(36246), + 23: uint16(36361), + 24: uint16(36354), + 25: uint16(36351), + 26: uint16(36365), + 27: uint16(36349), + 28: uint16(36362), + 29: uint16(36355), + 30: uint16(36359), + 31: uint16(36358), + 32: uint16(36357), + 33: uint16(36350), + 34: uint16(36352), + 35: uint16(36356), + 36: uint16(36624), + 37: uint16(36625), + 38: uint16(36622), + 39: uint16(36621), + 40: uint16(37155), + 41: uint16(37148), + 42: uint16(37152), + 43: uint16(37154), + 44: uint16(37151), + 45: uint16(37149), + 46: uint16(37146), + 47: uint16(37156), + 48: uint16(37153), + 49: uint16(37147), + 50: uint16(37242), + 51: uint16(37234), + 52: uint16(37241), + 53: uint16(37235), + 54: uint16(37541), + 55: uint16(37540), + 56: uint16(37494), + 57: uint16(37531), + 58: uint16(37498), + 59: uint16(37536), + 60: uint16(37524), + 61: uint16(37546), + 62: uint16(37517), + 63: uint16(37542), + 64: uint16(37530), + 65: uint16(37547), + 66: uint16(37497), + 67: uint16(37527), + 68: uint16(37503), + 69: uint16(37539), + 70: uint16(37614), + 71: uint16(37518), + 72: uint16(37506), + 73: uint16(37525), + 74: uint16(37538), + 75: uint16(37501), + 76: uint16(37512), + 77: uint16(37537), + 78: uint16(37514), + 79: uint16(37510), + 80: uint16(37516), + 81: uint16(37529), + 82: uint16(37543), + 83: uint16(37502), + 84: uint16(37511), + 85: uint16(37545), + 86: uint16(37533), + 87: uint16(37515), + 88: uint16(37421), + 89: uint16(38558), + 90: uint16(38561), + 91: uint16(38655), + 92: uint16(38744), + 93: uint16(38781), + 94: uint16(38778), + 95: uint16(38782), + 96: uint16(38787), + 97: uint16(38784), + 98: uint16(38786), + 99: uint16(38779), + 100: uint16(38788), + 101: uint16(38785), + 102: uint16(38783), + 103: uint16(38862), + 104: uint16(38861), + 105: uint16(38934), + 106: uint16(39085), + 107: uint16(39086), + 108: uint16(39170), + 109: uint16(39168), + 110: uint16(39175), + 111: uint16(39325), + 112: uint16(39324), + 113: uint16(39363), + 114: uint16(39353), + 115: uint16(39355), + 116: uint16(39354), + 117: uint16(39362), + 118: uint16(39357), + 119: uint16(39367), + 120: uint16(39601), + 121: uint16(39651), + 122: uint16(39655), + 123: uint16(39742), + 124: uint16(39743), + 125: uint16(39776), + 126: uint16(39777), + 127: uint16(39775), + 128: uint16(40177), + 129: uint16(40178), + 130: uint16(40181), + 131: uint16(40615), + 132: uint16(20735), + 133: uint16(20739), + 134: uint16(20784), + 135: uint16(20728), + 136: uint16(20742), + 137: uint16(20743), + 138: uint16(20726), + 139: uint16(20734), + 140: uint16(20747), + 141: uint16(20748), + 142: uint16(20733), + 143: uint16(20746), + 144: uint16(21131), + 145: uint16(21132), + 146: uint16(21233), + 147: uint16(21231), + 148: uint16(22088), + 149: uint16(22082), + 150: uint16(22092), + 151: uint16(22069), + 152: uint16(22081), + 153: uint16(22090), + 154: uint16(22089), + 155: uint16(22086), + 156: uint16(22104), + }, + 68: { + 0: uint16(22106), + 1: uint16(22080), + 2: uint16(22067), + 3: uint16(22077), + 4: uint16(22060), + 5: uint16(22078), + 6: uint16(22072), + 7: uint16(22058), + 8: uint16(22074), + 9: uint16(22298), + 10: uint16(22699), + 11: uint16(22685), + 12: uint16(22705), + 13: uint16(22688), + 14: uint16(22691), + 15: uint16(22703), + 16: uint16(22700), + 17: uint16(22693), + 18: uint16(22689), + 19: uint16(22783), + 20: uint16(23295), + 21: uint16(23284), + 22: uint16(23293), + 23: uint16(23287), + 24: uint16(23286), + 25: uint16(23299), + 26: uint16(23288), + 27: uint16(23298), + 28: uint16(23289), + 29: uint16(23297), + 30: uint16(23303), + 31: uint16(23301), + 32: uint16(23311), + 33: uint16(23655), + 34: uint16(23961), + 35: uint16(23959), + 36: uint16(23967), + 37: uint16(23954), + 38: uint16(23970), + 39: uint16(23955), + 40: uint16(23957), + 41: uint16(23968), + 42: uint16(23964), + 43: uint16(23969), + 44: uint16(23962), + 45: uint16(23966), + 46: uint16(24169), + 47: uint16(24157), + 48: uint16(24160), + 49: uint16(24156), + 50: uint16(32243), + 51: uint16(24283), + 52: uint16(24286), + 53: uint16(24289), + 54: uint16(24393), + 55: uint16(24498), + 56: uint16(24971), + 57: uint16(24963), + 58: uint16(24953), + 59: uint16(25009), + 60: uint16(25008), + 61: uint16(24994), + 62: uint16(24969), + 63: uint16(24987), + 64: uint16(24979), + 65: uint16(25007), + 66: uint16(25005), + 67: uint16(24991), + 68: uint16(24978), + 69: uint16(25002), + 70: uint16(24993), + 71: uint16(24973), + 72: uint16(24934), + 73: uint16(25011), + 74: uint16(25133), + 75: uint16(25710), + 76: uint16(25712), + 77: uint16(25750), + 78: uint16(25760), + 79: uint16(25733), + 80: uint16(25751), + 81: uint16(25756), + 82: uint16(25743), + 83: uint16(25739), + 84: uint16(25738), + 85: uint16(25740), + 86: uint16(25763), + 87: uint16(25759), + 88: uint16(25704), + 89: uint16(25777), + 90: uint16(25752), + 91: uint16(25974), + 92: uint16(25978), + 93: uint16(25977), + 94: uint16(25979), + 95: uint16(26034), + 96: uint16(26035), + 97: uint16(26293), + 98: uint16(26288), + 99: uint16(26281), + 100: uint16(26290), + 101: uint16(26295), + 102: uint16(26282), + 103: uint16(26287), + 104: uint16(27136), + 105: uint16(27142), + 106: uint16(27159), + 107: uint16(27109), + 108: uint16(27128), + 109: uint16(27157), + 110: uint16(27121), + 111: uint16(27108), + 112: uint16(27168), + 113: uint16(27135), + 114: uint16(27116), + 115: uint16(27106), + 116: uint16(27163), + 117: uint16(27165), + 118: uint16(27134), + 119: uint16(27175), + 120: uint16(27122), + 121: uint16(27118), + 122: uint16(27156), + 123: uint16(27127), + 124: uint16(27111), + 125: uint16(27200), + 126: uint16(27144), + 127: uint16(27110), + 128: uint16(27131), + 129: uint16(27149), + 130: uint16(27132), + 131: uint16(27115), + 132: uint16(27145), + 133: uint16(27140), + 134: uint16(27160), + 135: uint16(27173), + 136: uint16(27151), + 137: uint16(27126), + 138: uint16(27174), + 139: uint16(27143), + 140: uint16(27124), + 141: uint16(27158), + 142: uint16(27473), + 143: uint16(27557), + 144: uint16(27555), + 145: uint16(27554), + 146: uint16(27558), + 147: uint16(27649), + 148: uint16(27648), + 149: uint16(27647), + 150: uint16(27650), + 151: uint16(28481), + 152: uint16(28454), + 153: uint16(28542), + 154: uint16(28551), + 155: uint16(28614), + 156: uint16(28562), + }, + 69: { + 0: uint16(28557), + 1: uint16(28553), + 2: uint16(28556), + 3: uint16(28514), + 4: uint16(28495), + 5: uint16(28549), + 6: uint16(28506), + 7: uint16(28566), + 8: uint16(28534), + 9: uint16(28524), + 10: uint16(28546), + 11: uint16(28501), + 12: uint16(28530), + 13: uint16(28498), + 14: uint16(28496), + 15: uint16(28503), + 16: uint16(28564), + 17: uint16(28563), + 18: uint16(28509), + 19: uint16(28416), + 20: uint16(28513), + 21: uint16(28523), + 22: uint16(28541), + 23: uint16(28519), + 24: uint16(28560), + 25: uint16(28499), + 26: uint16(28555), + 27: uint16(28521), + 28: uint16(28543), + 29: uint16(28565), + 30: uint16(28515), + 31: uint16(28535), + 32: uint16(28522), + 33: uint16(28539), + 34: uint16(29106), + 35: uint16(29103), + 36: uint16(29083), + 37: uint16(29104), + 38: uint16(29088), + 39: uint16(29082), + 40: uint16(29097), + 41: uint16(29109), + 42: uint16(29085), + 43: uint16(29093), + 44: uint16(29086), + 45: uint16(29092), + 46: uint16(29089), + 47: uint16(29098), + 48: uint16(29084), + 49: uint16(29095), + 50: uint16(29107), + 51: uint16(29336), + 52: uint16(29338), + 53: uint16(29528), + 54: uint16(29522), + 55: uint16(29534), + 56: uint16(29535), + 57: uint16(29536), + 58: uint16(29533), + 59: uint16(29531), + 60: uint16(29537), + 61: uint16(29530), + 62: uint16(29529), + 63: uint16(29538), + 64: uint16(29831), + 65: uint16(29833), + 66: uint16(29834), + 67: uint16(29830), + 68: uint16(29825), + 69: uint16(29821), + 70: uint16(29829), + 71: uint16(29832), + 72: uint16(29820), + 73: uint16(29817), + 74: uint16(29960), + 75: uint16(29959), + 76: uint16(30078), + 77: uint16(30245), + 78: uint16(30238), + 79: uint16(30233), + 80: uint16(30237), + 81: uint16(30236), + 82: uint16(30243), + 83: uint16(30234), + 84: uint16(30248), + 85: uint16(30235), + 86: uint16(30364), + 87: uint16(30365), + 88: uint16(30366), + 89: uint16(30363), + 90: uint16(30605), + 91: uint16(30607), + 92: uint16(30601), + 93: uint16(30600), + 94: uint16(30925), + 95: uint16(30907), + 96: uint16(30927), + 97: uint16(30924), + 98: uint16(30929), + 99: uint16(30926), + 100: uint16(30932), + 101: uint16(30920), + 102: uint16(30915), + 103: uint16(30916), + 104: uint16(30921), + 105: uint16(31130), + 106: uint16(31137), + 107: uint16(31136), + 108: uint16(31132), + 109: uint16(31138), + 110: uint16(31131), + 111: uint16(27510), + 112: uint16(31289), + 113: uint16(31410), + 114: uint16(31412), + 115: uint16(31411), + 116: uint16(31671), + 117: uint16(31691), + 118: uint16(31678), + 119: uint16(31660), + 120: uint16(31694), + 121: uint16(31663), + 122: uint16(31673), + 123: uint16(31690), + 124: uint16(31669), + 125: uint16(31941), + 126: uint16(31944), + 127: uint16(31948), + 128: uint16(31947), + 129: uint16(32247), + 130: uint16(32219), + 131: uint16(32234), + 132: uint16(32231), + 133: uint16(32215), + 134: uint16(32225), + 135: uint16(32259), + 136: uint16(32250), + 137: uint16(32230), + 138: uint16(32246), + 139: uint16(32241), + 140: uint16(32240), + 141: uint16(32238), + 142: uint16(32223), + 143: uint16(32630), + 144: uint16(32684), + 145: uint16(32688), + 146: uint16(32685), + 147: uint16(32749), + 148: uint16(32747), + 149: uint16(32746), + 150: uint16(32748), + 151: uint16(32742), + 152: uint16(32744), + 153: uint16(32868), + 154: uint16(32871), + 155: uint16(33187), + 156: uint16(33183), + }, + 70: { + 0: uint16(33182), + 1: uint16(33173), + 2: uint16(33186), + 3: uint16(33177), + 4: uint16(33175), + 5: uint16(33302), + 6: uint16(33359), + 7: uint16(33363), + 8: uint16(33362), + 9: uint16(33360), + 10: uint16(33358), + 11: uint16(33361), + 12: uint16(34084), + 13: uint16(34107), + 14: uint16(34063), + 15: uint16(34048), + 16: uint16(34089), + 17: uint16(34062), + 18: uint16(34057), + 19: uint16(34061), + 20: uint16(34079), + 21: uint16(34058), + 22: uint16(34087), + 23: uint16(34076), + 24: uint16(34043), + 25: uint16(34091), + 26: uint16(34042), + 27: uint16(34056), + 28: uint16(34060), + 29: uint16(34036), + 30: uint16(34090), + 31: uint16(34034), + 32: uint16(34069), + 33: uint16(34039), + 34: uint16(34027), + 35: uint16(34035), + 36: uint16(34044), + 37: uint16(34066), + 38: uint16(34026), + 39: uint16(34025), + 40: uint16(34070), + 41: uint16(34046), + 42: uint16(34088), + 43: uint16(34077), + 44: uint16(34094), + 45: uint16(34050), + 46: uint16(34045), + 47: uint16(34078), + 48: uint16(34038), + 49: uint16(34097), + 50: uint16(34086), + 51: uint16(34023), + 52: uint16(34024), + 53: uint16(34032), + 54: uint16(34031), + 55: uint16(34041), + 56: uint16(34072), + 57: uint16(34080), + 58: uint16(34096), + 59: uint16(34059), + 60: uint16(34073), + 61: uint16(34095), + 62: uint16(34402), + 63: uint16(34646), + 64: uint16(34659), + 65: uint16(34660), + 66: uint16(34679), + 67: uint16(34785), + 68: uint16(34675), + 69: uint16(34648), + 70: uint16(34644), + 71: uint16(34651), + 72: uint16(34642), + 73: uint16(34657), + 74: uint16(34650), + 75: uint16(34641), + 76: uint16(34654), + 77: uint16(34669), + 78: uint16(34666), + 79: uint16(34640), + 80: uint16(34638), + 81: uint16(34655), + 82: uint16(34653), + 83: uint16(34671), + 84: uint16(34668), + 85: uint16(34682), + 86: uint16(34670), + 87: uint16(34652), + 88: uint16(34661), + 89: uint16(34639), + 90: uint16(34683), + 91: uint16(34677), + 92: uint16(34658), + 93: uint16(34663), + 94: uint16(34665), + 95: uint16(34906), + 96: uint16(35077), + 97: uint16(35084), + 98: uint16(35092), + 99: uint16(35083), + 100: uint16(35095), + 101: uint16(35096), + 102: uint16(35097), + 103: uint16(35078), + 104: uint16(35094), + 105: uint16(35089), + 106: uint16(35086), + 107: uint16(35081), + 108: uint16(35234), + 109: uint16(35236), + 110: uint16(35235), + 111: uint16(35309), + 112: uint16(35312), + 113: uint16(35308), + 114: uint16(35535), + 115: uint16(35526), + 116: uint16(35512), + 117: uint16(35539), + 118: uint16(35537), + 119: uint16(35540), + 120: uint16(35541), + 121: uint16(35515), + 122: uint16(35543), + 123: uint16(35518), + 124: uint16(35520), + 125: uint16(35525), + 126: uint16(35544), + 127: uint16(35523), + 128: uint16(35514), + 129: uint16(35517), + 130: uint16(35545), + 131: uint16(35902), + 132: uint16(35917), + 133: uint16(35983), + 134: uint16(36069), + 135: uint16(36063), + 136: uint16(36057), + 137: uint16(36072), + 138: uint16(36058), + 139: uint16(36061), + 140: uint16(36071), + 141: uint16(36256), + 142: uint16(36252), + 143: uint16(36257), + 144: uint16(36251), + 145: uint16(36384), + 146: uint16(36387), + 147: uint16(36389), + 148: uint16(36388), + 149: uint16(36398), + 150: uint16(36373), + 151: uint16(36379), + 152: uint16(36374), + 153: uint16(36369), + 154: uint16(36377), + 155: uint16(36390), + 156: uint16(36391), + }, + 71: { + 0: uint16(36372), + 1: uint16(36370), + 2: uint16(36376), + 3: uint16(36371), + 4: uint16(36380), + 5: uint16(36375), + 6: uint16(36378), + 7: uint16(36652), + 8: uint16(36644), + 9: uint16(36632), + 10: uint16(36634), + 11: uint16(36640), + 12: uint16(36643), + 13: uint16(36630), + 14: uint16(36631), + 15: uint16(36979), + 16: uint16(36976), + 17: uint16(36975), + 18: uint16(36967), + 19: uint16(36971), + 20: uint16(37167), + 21: uint16(37163), + 22: uint16(37161), + 23: uint16(37162), + 24: uint16(37170), + 25: uint16(37158), + 26: uint16(37166), + 27: uint16(37253), + 28: uint16(37254), + 29: uint16(37258), + 30: uint16(37249), + 31: uint16(37250), + 32: uint16(37252), + 33: uint16(37248), + 34: uint16(37584), + 35: uint16(37571), + 36: uint16(37572), + 37: uint16(37568), + 38: uint16(37593), + 39: uint16(37558), + 40: uint16(37583), + 41: uint16(37617), + 42: uint16(37599), + 43: uint16(37592), + 44: uint16(37609), + 45: uint16(37591), + 46: uint16(37597), + 47: uint16(37580), + 48: uint16(37615), + 49: uint16(37570), + 50: uint16(37608), + 51: uint16(37578), + 52: uint16(37576), + 53: uint16(37582), + 54: uint16(37606), + 55: uint16(37581), + 56: uint16(37589), + 57: uint16(37577), + 58: uint16(37600), + 59: uint16(37598), + 60: uint16(37607), + 61: uint16(37585), + 62: uint16(37587), + 63: uint16(37557), + 64: uint16(37601), + 65: uint16(37574), + 66: uint16(37556), + 67: uint16(38268), + 68: uint16(38316), + 69: uint16(38315), + 70: uint16(38318), + 71: uint16(38320), + 72: uint16(38564), + 73: uint16(38562), + 74: uint16(38611), + 75: uint16(38661), + 76: uint16(38664), + 77: uint16(38658), + 78: uint16(38746), + 79: uint16(38794), + 80: uint16(38798), + 81: uint16(38792), + 82: uint16(38864), + 83: uint16(38863), + 84: uint16(38942), + 85: uint16(38941), + 86: uint16(38950), + 87: uint16(38953), + 88: uint16(38952), + 89: uint16(38944), + 90: uint16(38939), + 91: uint16(38951), + 92: uint16(39090), + 93: uint16(39176), + 94: uint16(39162), + 95: uint16(39185), + 96: uint16(39188), + 97: uint16(39190), + 98: uint16(39191), + 99: uint16(39189), + 100: uint16(39388), + 101: uint16(39373), + 102: uint16(39375), + 103: uint16(39379), + 104: uint16(39380), + 105: uint16(39374), + 106: uint16(39369), + 107: uint16(39382), + 108: uint16(39384), + 109: uint16(39371), + 110: uint16(39383), + 111: uint16(39372), + 112: uint16(39603), + 113: uint16(39660), + 114: uint16(39659), + 115: uint16(39667), + 116: uint16(39666), + 117: uint16(39665), + 118: uint16(39750), + 119: uint16(39747), + 120: uint16(39783), + 121: uint16(39796), + 122: uint16(39793), + 123: uint16(39782), + 124: uint16(39798), + 125: uint16(39797), + 126: uint16(39792), + 127: uint16(39784), + 128: uint16(39780), + 129: uint16(39788), + 130: uint16(40188), + 131: uint16(40186), + 132: uint16(40189), + 133: uint16(40191), + 134: uint16(40183), + 135: uint16(40199), + 136: uint16(40192), + 137: uint16(40185), + 138: uint16(40187), + 139: uint16(40200), + 140: uint16(40197), + 141: uint16(40196), + 142: uint16(40579), + 143: uint16(40659), + 144: uint16(40719), + 145: uint16(40720), + 146: uint16(20764), + 147: uint16(20755), + 148: uint16(20759), + 149: uint16(20762), + 150: uint16(20753), + 151: uint16(20958), + 152: uint16(21300), + 153: uint16(21473), + 154: uint16(22128), + 155: uint16(22112), + 156: uint16(22126), + }, + 72: { + 0: uint16(22131), + 1: uint16(22118), + 2: uint16(22115), + 3: uint16(22125), + 4: uint16(22130), + 5: uint16(22110), + 6: uint16(22135), + 7: uint16(22300), + 8: uint16(22299), + 9: uint16(22728), + 10: uint16(22717), + 11: uint16(22729), + 12: uint16(22719), + 13: uint16(22714), + 14: uint16(22722), + 15: uint16(22716), + 16: uint16(22726), + 17: uint16(23319), + 18: uint16(23321), + 19: uint16(23323), + 20: uint16(23329), + 21: uint16(23316), + 22: uint16(23315), + 23: uint16(23312), + 24: uint16(23318), + 25: uint16(23336), + 26: uint16(23322), + 27: uint16(23328), + 28: uint16(23326), + 29: uint16(23535), + 30: uint16(23980), + 31: uint16(23985), + 32: uint16(23977), + 33: uint16(23975), + 34: uint16(23989), + 35: uint16(23984), + 36: uint16(23982), + 37: uint16(23978), + 38: uint16(23976), + 39: uint16(23986), + 40: uint16(23981), + 41: uint16(23983), + 42: uint16(23988), + 43: uint16(24167), + 44: uint16(24168), + 45: uint16(24166), + 46: uint16(24175), + 47: uint16(24297), + 48: uint16(24295), + 49: uint16(24294), + 50: uint16(24296), + 51: uint16(24293), + 52: uint16(24395), + 53: uint16(24508), + 54: uint16(24989), + 55: uint16(25000), + 56: uint16(24982), + 57: uint16(25029), + 58: uint16(25012), + 59: uint16(25030), + 60: uint16(25025), + 61: uint16(25036), + 62: uint16(25018), + 63: uint16(25023), + 64: uint16(25016), + 65: uint16(24972), + 66: uint16(25815), + 67: uint16(25814), + 68: uint16(25808), + 69: uint16(25807), + 70: uint16(25801), + 71: uint16(25789), + 72: uint16(25737), + 73: uint16(25795), + 74: uint16(25819), + 75: uint16(25843), + 76: uint16(25817), + 77: uint16(25907), + 78: uint16(25983), + 79: uint16(25980), + 80: uint16(26018), + 81: uint16(26312), + 82: uint16(26302), + 83: uint16(26304), + 84: uint16(26314), + 85: uint16(26315), + 86: uint16(26319), + 87: uint16(26301), + 88: uint16(26299), + 89: uint16(26298), + 90: uint16(26316), + 91: uint16(26403), + 92: uint16(27188), + 93: uint16(27238), + 94: uint16(27209), + 95: uint16(27239), + 96: uint16(27186), + 97: uint16(27240), + 98: uint16(27198), + 99: uint16(27229), + 100: uint16(27245), + 101: uint16(27254), + 102: uint16(27227), + 103: uint16(27217), + 104: uint16(27176), + 105: uint16(27226), + 106: uint16(27195), + 107: uint16(27199), + 108: uint16(27201), + 109: uint16(27242), + 110: uint16(27236), + 111: uint16(27216), + 112: uint16(27215), + 113: uint16(27220), + 114: uint16(27247), + 115: uint16(27241), + 116: uint16(27232), + 117: uint16(27196), + 118: uint16(27230), + 119: uint16(27222), + 120: uint16(27221), + 121: uint16(27213), + 122: uint16(27214), + 123: uint16(27206), + 124: uint16(27477), + 125: uint16(27476), + 126: uint16(27478), + 127: uint16(27559), + 128: uint16(27562), + 129: uint16(27563), + 130: uint16(27592), + 131: uint16(27591), + 132: uint16(27652), + 133: uint16(27651), + 134: uint16(27654), + 135: uint16(28589), + 136: uint16(28619), + 137: uint16(28579), + 138: uint16(28615), + 139: uint16(28604), + 140: uint16(28622), + 141: uint16(28616), + 142: uint16(28510), + 143: uint16(28612), + 144: uint16(28605), + 145: uint16(28574), + 146: uint16(28618), + 147: uint16(28584), + 148: uint16(28676), + 149: uint16(28581), + 150: uint16(28590), + 151: uint16(28602), + 152: uint16(28588), + 153: uint16(28586), + 154: uint16(28623), + 155: uint16(28607), + 156: uint16(28600), + }, + 73: { + 0: uint16(28578), + 1: uint16(28617), + 2: uint16(28587), + 3: uint16(28621), + 4: uint16(28591), + 5: uint16(28594), + 6: uint16(28592), + 7: uint16(29125), + 8: uint16(29122), + 9: uint16(29119), + 10: uint16(29112), + 11: uint16(29142), + 12: uint16(29120), + 13: uint16(29121), + 14: uint16(29131), + 15: uint16(29140), + 16: uint16(29130), + 17: uint16(29127), + 18: uint16(29135), + 19: uint16(29117), + 20: uint16(29144), + 21: uint16(29116), + 22: uint16(29126), + 23: uint16(29146), + 24: uint16(29147), + 25: uint16(29341), + 26: uint16(29342), + 27: uint16(29545), + 28: uint16(29542), + 29: uint16(29543), + 30: uint16(29548), + 31: uint16(29541), + 32: uint16(29547), + 33: uint16(29546), + 34: uint16(29823), + 35: uint16(29850), + 36: uint16(29856), + 37: uint16(29844), + 38: uint16(29842), + 39: uint16(29845), + 40: uint16(29857), + 41: uint16(29963), + 42: uint16(30080), + 43: uint16(30255), + 44: uint16(30253), + 45: uint16(30257), + 46: uint16(30269), + 47: uint16(30259), + 48: uint16(30268), + 49: uint16(30261), + 50: uint16(30258), + 51: uint16(30256), + 52: uint16(30395), + 53: uint16(30438), + 54: uint16(30618), + 55: uint16(30621), + 56: uint16(30625), + 57: uint16(30620), + 58: uint16(30619), + 59: uint16(30626), + 60: uint16(30627), + 61: uint16(30613), + 62: uint16(30617), + 63: uint16(30615), + 64: uint16(30941), + 65: uint16(30953), + 66: uint16(30949), + 67: uint16(30954), + 68: uint16(30942), + 69: uint16(30947), + 70: uint16(30939), + 71: uint16(30945), + 72: uint16(30946), + 73: uint16(30957), + 74: uint16(30943), + 75: uint16(30944), + 76: uint16(31140), + 77: uint16(31300), + 78: uint16(31304), + 79: uint16(31303), + 80: uint16(31414), + 81: uint16(31416), + 82: uint16(31413), + 83: uint16(31409), + 84: uint16(31415), + 85: uint16(31710), + 86: uint16(31715), + 87: uint16(31719), + 88: uint16(31709), + 89: uint16(31701), + 90: uint16(31717), + 91: uint16(31706), + 92: uint16(31720), + 93: uint16(31737), + 94: uint16(31700), + 95: uint16(31722), + 96: uint16(31714), + 97: uint16(31708), + 98: uint16(31723), + 99: uint16(31704), + 100: uint16(31711), + 101: uint16(31954), + 102: uint16(31956), + 103: uint16(31959), + 104: uint16(31952), + 105: uint16(31953), + 106: uint16(32274), + 107: uint16(32289), + 108: uint16(32279), + 109: uint16(32268), + 110: uint16(32287), + 111: uint16(32288), + 112: uint16(32275), + 113: uint16(32270), + 114: uint16(32284), + 115: uint16(32277), + 116: uint16(32282), + 117: uint16(32290), + 118: uint16(32267), + 119: uint16(32271), + 120: uint16(32278), + 121: uint16(32269), + 122: uint16(32276), + 123: uint16(32293), + 124: uint16(32292), + 125: uint16(32579), + 126: uint16(32635), + 127: uint16(32636), + 128: uint16(32634), + 129: uint16(32689), + 130: uint16(32751), + 131: uint16(32810), + 132: uint16(32809), + 133: uint16(32876), + 134: uint16(33201), + 135: uint16(33190), + 136: uint16(33198), + 137: uint16(33209), + 138: uint16(33205), + 139: uint16(33195), + 140: uint16(33200), + 141: uint16(33196), + 142: uint16(33204), + 143: uint16(33202), + 144: uint16(33207), + 145: uint16(33191), + 146: uint16(33266), + 147: uint16(33365), + 148: uint16(33366), + 149: uint16(33367), + 150: uint16(34134), + 151: uint16(34117), + 152: uint16(34155), + 153: uint16(34125), + 154: uint16(34131), + 155: uint16(34145), + 156: uint16(34136), + }, + 74: { + 0: uint16(34112), + 1: uint16(34118), + 2: uint16(34148), + 3: uint16(34113), + 4: uint16(34146), + 5: uint16(34116), + 6: uint16(34129), + 7: uint16(34119), + 8: uint16(34147), + 9: uint16(34110), + 10: uint16(34139), + 11: uint16(34161), + 12: uint16(34126), + 13: uint16(34158), + 14: uint16(34165), + 15: uint16(34133), + 16: uint16(34151), + 17: uint16(34144), + 18: uint16(34188), + 19: uint16(34150), + 20: uint16(34141), + 21: uint16(34132), + 22: uint16(34149), + 23: uint16(34156), + 24: uint16(34403), + 25: uint16(34405), + 26: uint16(34404), + 27: uint16(34715), + 28: uint16(34703), + 29: uint16(34711), + 30: uint16(34707), + 31: uint16(34706), + 32: uint16(34696), + 33: uint16(34689), + 34: uint16(34710), + 35: uint16(34712), + 36: uint16(34681), + 37: uint16(34695), + 38: uint16(34723), + 39: uint16(34693), + 40: uint16(34704), + 41: uint16(34705), + 42: uint16(34717), + 43: uint16(34692), + 44: uint16(34708), + 45: uint16(34716), + 46: uint16(34714), + 47: uint16(34697), + 48: uint16(35102), + 49: uint16(35110), + 50: uint16(35120), + 51: uint16(35117), + 52: uint16(35118), + 53: uint16(35111), + 54: uint16(35121), + 55: uint16(35106), + 56: uint16(35113), + 57: uint16(35107), + 58: uint16(35119), + 59: uint16(35116), + 60: uint16(35103), + 61: uint16(35313), + 62: uint16(35552), + 63: uint16(35554), + 64: uint16(35570), + 65: uint16(35572), + 66: uint16(35573), + 67: uint16(35549), + 68: uint16(35604), + 69: uint16(35556), + 70: uint16(35551), + 71: uint16(35568), + 72: uint16(35528), + 73: uint16(35550), + 74: uint16(35553), + 75: uint16(35560), + 76: uint16(35583), + 77: uint16(35567), + 78: uint16(35579), + 79: uint16(35985), + 80: uint16(35986), + 81: uint16(35984), + 82: uint16(36085), + 83: uint16(36078), + 84: uint16(36081), + 85: uint16(36080), + 86: uint16(36083), + 87: uint16(36204), + 88: uint16(36206), + 89: uint16(36261), + 90: uint16(36263), + 91: uint16(36403), + 92: uint16(36414), + 93: uint16(36408), + 94: uint16(36416), + 95: uint16(36421), + 96: uint16(36406), + 97: uint16(36412), + 98: uint16(36413), + 99: uint16(36417), + 100: uint16(36400), + 101: uint16(36415), + 102: uint16(36541), + 103: uint16(36662), + 104: uint16(36654), + 105: uint16(36661), + 106: uint16(36658), + 107: uint16(36665), + 108: uint16(36663), + 109: uint16(36660), + 110: uint16(36982), + 111: uint16(36985), + 112: uint16(36987), + 113: uint16(36998), + 114: uint16(37114), + 115: uint16(37171), + 116: uint16(37173), + 117: uint16(37174), + 118: uint16(37267), + 119: uint16(37264), + 120: uint16(37265), + 121: uint16(37261), + 122: uint16(37263), + 123: uint16(37671), + 124: uint16(37662), + 125: uint16(37640), + 126: uint16(37663), + 127: uint16(37638), + 128: uint16(37647), + 129: uint16(37754), + 130: uint16(37688), + 131: uint16(37692), + 132: uint16(37659), + 133: uint16(37667), + 134: uint16(37650), + 135: uint16(37633), + 136: uint16(37702), + 137: uint16(37677), + 138: uint16(37646), + 139: uint16(37645), + 140: uint16(37579), + 141: uint16(37661), + 142: uint16(37626), + 143: uint16(37669), + 144: uint16(37651), + 145: uint16(37625), + 146: uint16(37623), + 147: uint16(37684), + 148: uint16(37634), + 149: uint16(37668), + 150: uint16(37631), + 151: uint16(37673), + 152: uint16(37689), + 153: uint16(37685), + 154: uint16(37674), + 155: uint16(37652), + 156: uint16(37644), + }, + 75: { + 0: uint16(37643), + 1: uint16(37630), + 2: uint16(37641), + 3: uint16(37632), + 4: uint16(37627), + 5: uint16(37654), + 6: uint16(38332), + 7: uint16(38349), + 8: uint16(38334), + 9: uint16(38329), + 10: uint16(38330), + 11: uint16(38326), + 12: uint16(38335), + 13: uint16(38325), + 14: uint16(38333), + 15: uint16(38569), + 16: uint16(38612), + 17: uint16(38667), + 18: uint16(38674), + 19: uint16(38672), + 20: uint16(38809), + 21: uint16(38807), + 22: uint16(38804), + 23: uint16(38896), + 24: uint16(38904), + 25: uint16(38965), + 26: uint16(38959), + 27: uint16(38962), + 28: uint16(39204), + 29: uint16(39199), + 30: uint16(39207), + 31: uint16(39209), + 32: uint16(39326), + 33: uint16(39406), + 34: uint16(39404), + 35: uint16(39397), + 36: uint16(39396), + 37: uint16(39408), + 38: uint16(39395), + 39: uint16(39402), + 40: uint16(39401), + 41: uint16(39399), + 42: uint16(39609), + 43: uint16(39615), + 44: uint16(39604), + 45: uint16(39611), + 46: uint16(39670), + 47: uint16(39674), + 48: uint16(39673), + 49: uint16(39671), + 50: uint16(39731), + 51: uint16(39808), + 52: uint16(39813), + 53: uint16(39815), + 54: uint16(39804), + 55: uint16(39806), + 56: uint16(39803), + 57: uint16(39810), + 58: uint16(39827), + 59: uint16(39826), + 60: uint16(39824), + 61: uint16(39802), + 62: uint16(39829), + 63: uint16(39805), + 64: uint16(39816), + 65: uint16(40229), + 66: uint16(40215), + 67: uint16(40224), + 68: uint16(40222), + 69: uint16(40212), + 70: uint16(40233), + 71: uint16(40221), + 72: uint16(40216), + 73: uint16(40226), + 74: uint16(40208), + 75: uint16(40217), + 76: uint16(40223), + 77: uint16(40584), + 78: uint16(40582), + 79: uint16(40583), + 80: uint16(40622), + 81: uint16(40621), + 82: uint16(40661), + 83: uint16(40662), + 84: uint16(40698), + 85: uint16(40722), + 86: uint16(40765), + 87: uint16(20774), + 88: uint16(20773), + 89: uint16(20770), + 90: uint16(20772), + 91: uint16(20768), + 92: uint16(20777), + 93: uint16(21236), + 94: uint16(22163), + 95: uint16(22156), + 96: uint16(22157), + 97: uint16(22150), + 98: uint16(22148), + 99: uint16(22147), + 100: uint16(22142), + 101: uint16(22146), + 102: uint16(22143), + 103: uint16(22145), + 104: uint16(22742), + 105: uint16(22740), + 106: uint16(22735), + 107: uint16(22738), + 108: uint16(23341), + 109: uint16(23333), + 110: uint16(23346), + 111: uint16(23331), + 112: uint16(23340), + 113: uint16(23335), + 114: uint16(23334), + 115: uint16(23343), + 116: uint16(23342), + 117: uint16(23419), + 118: uint16(23537), + 119: uint16(23538), + 120: uint16(23991), + 121: uint16(24172), + 122: uint16(24170), + 123: uint16(24510), + 124: uint16(24507), + 125: uint16(25027), + 126: uint16(25013), + 127: uint16(25020), + 128: uint16(25063), + 129: uint16(25056), + 130: uint16(25061), + 131: uint16(25060), + 132: uint16(25064), + 133: uint16(25054), + 134: uint16(25839), + 135: uint16(25833), + 136: uint16(25827), + 137: uint16(25835), + 138: uint16(25828), + 139: uint16(25832), + 140: uint16(25985), + 141: uint16(25984), + 142: uint16(26038), + 143: uint16(26074), + 144: uint16(26322), + 145: uint16(27277), + 146: uint16(27286), + 147: uint16(27265), + 148: uint16(27301), + 149: uint16(27273), + 150: uint16(27295), + 151: uint16(27291), + 152: uint16(27297), + 153: uint16(27294), + 154: uint16(27271), + 155: uint16(27283), + 156: uint16(27278), + }, + 76: { + 0: uint16(27285), + 1: uint16(27267), + 2: uint16(27304), + 3: uint16(27300), + 4: uint16(27281), + 5: uint16(27263), + 6: uint16(27302), + 7: uint16(27290), + 8: uint16(27269), + 9: uint16(27276), + 10: uint16(27282), + 11: uint16(27483), + 12: uint16(27565), + 13: uint16(27657), + 14: uint16(28620), + 15: uint16(28585), + 16: uint16(28660), + 17: uint16(28628), + 18: uint16(28643), + 19: uint16(28636), + 20: uint16(28653), + 21: uint16(28647), + 22: uint16(28646), + 23: uint16(28638), + 24: uint16(28658), + 25: uint16(28637), + 26: uint16(28642), + 27: uint16(28648), + 28: uint16(29153), + 29: uint16(29169), + 30: uint16(29160), + 31: uint16(29170), + 32: uint16(29156), + 33: uint16(29168), + 34: uint16(29154), + 35: uint16(29555), + 36: uint16(29550), + 37: uint16(29551), + 38: uint16(29847), + 39: uint16(29874), + 40: uint16(29867), + 41: uint16(29840), + 42: uint16(29866), + 43: uint16(29869), + 44: uint16(29873), + 45: uint16(29861), + 46: uint16(29871), + 47: uint16(29968), + 48: uint16(29969), + 49: uint16(29970), + 50: uint16(29967), + 51: uint16(30084), + 52: uint16(30275), + 53: uint16(30280), + 54: uint16(30281), + 55: uint16(30279), + 56: uint16(30372), + 57: uint16(30441), + 58: uint16(30645), + 59: uint16(30635), + 60: uint16(30642), + 61: uint16(30647), + 62: uint16(30646), + 63: uint16(30644), + 64: uint16(30641), + 65: uint16(30632), + 66: uint16(30704), + 67: uint16(30963), + 68: uint16(30973), + 69: uint16(30978), + 70: uint16(30971), + 71: uint16(30972), + 72: uint16(30962), + 73: uint16(30981), + 74: uint16(30969), + 75: uint16(30974), + 76: uint16(30980), + 77: uint16(31147), + 78: uint16(31144), + 79: uint16(31324), + 80: uint16(31323), + 81: uint16(31318), + 82: uint16(31320), + 83: uint16(31316), + 84: uint16(31322), + 85: uint16(31422), + 86: uint16(31424), + 87: uint16(31425), + 88: uint16(31749), + 89: uint16(31759), + 90: uint16(31730), + 91: uint16(31744), + 92: uint16(31743), + 93: uint16(31739), + 94: uint16(31758), + 95: uint16(31732), + 96: uint16(31755), + 97: uint16(31731), + 98: uint16(31746), + 99: uint16(31753), + 100: uint16(31747), + 101: uint16(31745), + 102: uint16(31736), + 103: uint16(31741), + 104: uint16(31750), + 105: uint16(31728), + 106: uint16(31729), + 107: uint16(31760), + 108: uint16(31754), + 109: uint16(31976), + 110: uint16(32301), + 111: uint16(32316), + 112: uint16(32322), + 113: uint16(32307), + 114: uint16(38984), + 115: uint16(32312), + 116: uint16(32298), + 117: uint16(32329), + 118: uint16(32320), + 119: uint16(32327), + 120: uint16(32297), + 121: uint16(32332), + 122: uint16(32304), + 123: uint16(32315), + 124: uint16(32310), + 125: uint16(32324), + 126: uint16(32314), + 127: uint16(32581), + 128: uint16(32639), + 129: uint16(32638), + 130: uint16(32637), + 131: uint16(32756), + 132: uint16(32754), + 133: uint16(32812), + 134: uint16(33211), + 135: uint16(33220), + 136: uint16(33228), + 137: uint16(33226), + 138: uint16(33221), + 139: uint16(33223), + 140: uint16(33212), + 141: uint16(33257), + 142: uint16(33371), + 143: uint16(33370), + 144: uint16(33372), + 145: uint16(34179), + 146: uint16(34176), + 147: uint16(34191), + 148: uint16(34215), + 149: uint16(34197), + 150: uint16(34208), + 151: uint16(34187), + 152: uint16(34211), + 153: uint16(34171), + 154: uint16(34212), + 155: uint16(34202), + 156: uint16(34206), + }, + 77: { + 0: uint16(34167), + 1: uint16(34172), + 2: uint16(34185), + 3: uint16(34209), + 4: uint16(34170), + 5: uint16(34168), + 6: uint16(34135), + 7: uint16(34190), + 8: uint16(34198), + 9: uint16(34182), + 10: uint16(34189), + 11: uint16(34201), + 12: uint16(34205), + 13: uint16(34177), + 14: uint16(34210), + 15: uint16(34178), + 16: uint16(34184), + 17: uint16(34181), + 18: uint16(34169), + 19: uint16(34166), + 20: uint16(34200), + 21: uint16(34192), + 22: uint16(34207), + 23: uint16(34408), + 24: uint16(34750), + 25: uint16(34730), + 26: uint16(34733), + 27: uint16(34757), + 28: uint16(34736), + 29: uint16(34732), + 30: uint16(34745), + 31: uint16(34741), + 32: uint16(34748), + 33: uint16(34734), + 34: uint16(34761), + 35: uint16(34755), + 36: uint16(34754), + 37: uint16(34764), + 38: uint16(34743), + 39: uint16(34735), + 40: uint16(34756), + 41: uint16(34762), + 42: uint16(34740), + 43: uint16(34742), + 44: uint16(34751), + 45: uint16(34744), + 46: uint16(34749), + 47: uint16(34782), + 48: uint16(34738), + 49: uint16(35125), + 50: uint16(35123), + 51: uint16(35132), + 52: uint16(35134), + 53: uint16(35137), + 54: uint16(35154), + 55: uint16(35127), + 56: uint16(35138), + 57: uint16(35245), + 58: uint16(35247), + 59: uint16(35246), + 60: uint16(35314), + 61: uint16(35315), + 62: uint16(35614), + 63: uint16(35608), + 64: uint16(35606), + 65: uint16(35601), + 66: uint16(35589), + 67: uint16(35595), + 68: uint16(35618), + 69: uint16(35599), + 70: uint16(35602), + 71: uint16(35605), + 72: uint16(35591), + 73: uint16(35597), + 74: uint16(35592), + 75: uint16(35590), + 76: uint16(35612), + 77: uint16(35603), + 78: uint16(35610), + 79: uint16(35919), + 80: uint16(35952), + 81: uint16(35954), + 82: uint16(35953), + 83: uint16(35951), + 84: uint16(35989), + 85: uint16(35988), + 86: uint16(36089), + 87: uint16(36207), + 88: uint16(36430), + 89: uint16(36429), + 90: uint16(36435), + 91: uint16(36432), + 92: uint16(36428), + 93: uint16(36423), + 94: uint16(36675), + 95: uint16(36672), + 96: uint16(36997), + 97: uint16(36990), + 98: uint16(37176), + 99: uint16(37274), + 100: uint16(37282), + 101: uint16(37275), + 102: uint16(37273), + 103: uint16(37279), + 104: uint16(37281), + 105: uint16(37277), + 106: uint16(37280), + 107: uint16(37793), + 108: uint16(37763), + 109: uint16(37807), + 110: uint16(37732), + 111: uint16(37718), + 112: uint16(37703), + 113: uint16(37756), + 114: uint16(37720), + 115: uint16(37724), + 116: uint16(37750), + 117: uint16(37705), + 118: uint16(37712), + 119: uint16(37713), + 120: uint16(37728), + 121: uint16(37741), + 122: uint16(37775), + 123: uint16(37708), + 124: uint16(37738), + 125: uint16(37753), + 126: uint16(37719), + 127: uint16(37717), + 128: uint16(37714), + 129: uint16(37711), + 130: uint16(37745), + 131: uint16(37751), + 132: uint16(37755), + 133: uint16(37729), + 134: uint16(37726), + 135: uint16(37731), + 136: uint16(37735), + 137: uint16(37760), + 138: uint16(37710), + 139: uint16(37721), + 140: uint16(38343), + 141: uint16(38336), + 142: uint16(38345), + 143: uint16(38339), + 144: uint16(38341), + 145: uint16(38327), + 146: uint16(38574), + 147: uint16(38576), + 148: uint16(38572), + 149: uint16(38688), + 150: uint16(38687), + 151: uint16(38680), + 152: uint16(38685), + 153: uint16(38681), + 154: uint16(38810), + 155: uint16(38817), + 156: uint16(38812), + }, + 78: { + 0: uint16(38814), + 1: uint16(38813), + 2: uint16(38869), + 3: uint16(38868), + 4: uint16(38897), + 5: uint16(38977), + 6: uint16(38980), + 7: uint16(38986), + 8: uint16(38985), + 9: uint16(38981), + 10: uint16(38979), + 11: uint16(39205), + 12: uint16(39211), + 13: uint16(39212), + 14: uint16(39210), + 15: uint16(39219), + 16: uint16(39218), + 17: uint16(39215), + 18: uint16(39213), + 19: uint16(39217), + 20: uint16(39216), + 21: uint16(39320), + 22: uint16(39331), + 23: uint16(39329), + 24: uint16(39426), + 25: uint16(39418), + 26: uint16(39412), + 27: uint16(39415), + 28: uint16(39417), + 29: uint16(39416), + 30: uint16(39414), + 31: uint16(39419), + 32: uint16(39421), + 33: uint16(39422), + 34: uint16(39420), + 35: uint16(39427), + 36: uint16(39614), + 37: uint16(39678), + 38: uint16(39677), + 39: uint16(39681), + 40: uint16(39676), + 41: uint16(39752), + 42: uint16(39834), + 43: uint16(39848), + 44: uint16(39838), + 45: uint16(39835), + 46: uint16(39846), + 47: uint16(39841), + 48: uint16(39845), + 49: uint16(39844), + 50: uint16(39814), + 51: uint16(39842), + 52: uint16(39840), + 53: uint16(39855), + 54: uint16(40243), + 55: uint16(40257), + 56: uint16(40295), + 57: uint16(40246), + 58: uint16(40238), + 59: uint16(40239), + 60: uint16(40241), + 61: uint16(40248), + 62: uint16(40240), + 63: uint16(40261), + 64: uint16(40258), + 65: uint16(40259), + 66: uint16(40254), + 67: uint16(40247), + 68: uint16(40256), + 69: uint16(40253), + 70: uint16(32757), + 71: uint16(40237), + 72: uint16(40586), + 73: uint16(40585), + 74: uint16(40589), + 75: uint16(40624), + 76: uint16(40648), + 77: uint16(40666), + 78: uint16(40699), + 79: uint16(40703), + 80: uint16(40740), + 81: uint16(40739), + 82: uint16(40738), + 83: uint16(40788), + 84: uint16(40864), + 85: uint16(20785), + 86: uint16(20781), + 87: uint16(20782), + 88: uint16(22168), + 89: uint16(22172), + 90: uint16(22167), + 91: uint16(22170), + 92: uint16(22173), + 93: uint16(22169), + 94: uint16(22896), + 95: uint16(23356), + 96: uint16(23657), + 97: uint16(23658), + 98: uint16(24000), + 99: uint16(24173), + 100: uint16(24174), + 101: uint16(25048), + 102: uint16(25055), + 103: uint16(25069), + 104: uint16(25070), + 105: uint16(25073), + 106: uint16(25066), + 107: uint16(25072), + 108: uint16(25067), + 109: uint16(25046), + 110: uint16(25065), + 111: uint16(25855), + 112: uint16(25860), + 113: uint16(25853), + 114: uint16(25848), + 115: uint16(25857), + 116: uint16(25859), + 117: uint16(25852), + 118: uint16(26004), + 119: uint16(26075), + 120: uint16(26330), + 121: uint16(26331), + 122: uint16(26328), + 123: uint16(27333), + 124: uint16(27321), + 125: uint16(27325), + 126: uint16(27361), + 127: uint16(27334), + 128: uint16(27322), + 129: uint16(27318), + 130: uint16(27319), + 131: uint16(27335), + 132: uint16(27316), + 133: uint16(27309), + 134: uint16(27486), + 135: uint16(27593), + 136: uint16(27659), + 137: uint16(28679), + 138: uint16(28684), + 139: uint16(28685), + 140: uint16(28673), + 141: uint16(28677), + 142: uint16(28692), + 143: uint16(28686), + 144: uint16(28671), + 145: uint16(28672), + 146: uint16(28667), + 147: uint16(28710), + 148: uint16(28668), + 149: uint16(28663), + 150: uint16(28682), + 151: uint16(29185), + 152: uint16(29183), + 153: uint16(29177), + 154: uint16(29187), + 155: uint16(29181), + 156: uint16(29558), + }, + 79: { + 0: uint16(29880), + 1: uint16(29888), + 2: uint16(29877), + 3: uint16(29889), + 4: uint16(29886), + 5: uint16(29878), + 6: uint16(29883), + 7: uint16(29890), + 8: uint16(29972), + 9: uint16(29971), + 10: uint16(30300), + 11: uint16(30308), + 12: uint16(30297), + 13: uint16(30288), + 14: uint16(30291), + 15: uint16(30295), + 16: uint16(30298), + 17: uint16(30374), + 18: uint16(30397), + 19: uint16(30444), + 20: uint16(30658), + 21: uint16(30650), + 22: uint16(30975), + 23: uint16(30988), + 24: uint16(30995), + 25: uint16(30996), + 26: uint16(30985), + 27: uint16(30992), + 28: uint16(30994), + 29: uint16(30993), + 30: uint16(31149), + 31: uint16(31148), + 32: uint16(31327), + 33: uint16(31772), + 34: uint16(31785), + 35: uint16(31769), + 36: uint16(31776), + 37: uint16(31775), + 38: uint16(31789), + 39: uint16(31773), + 40: uint16(31782), + 41: uint16(31784), + 42: uint16(31778), + 43: uint16(31781), + 44: uint16(31792), + 45: uint16(32348), + 46: uint16(32336), + 47: uint16(32342), + 48: uint16(32355), + 49: uint16(32344), + 50: uint16(32354), + 51: uint16(32351), + 52: uint16(32337), + 53: uint16(32352), + 54: uint16(32343), + 55: uint16(32339), + 56: uint16(32693), + 57: uint16(32691), + 58: uint16(32759), + 59: uint16(32760), + 60: uint16(32885), + 61: uint16(33233), + 62: uint16(33234), + 63: uint16(33232), + 64: uint16(33375), + 65: uint16(33374), + 66: uint16(34228), + 67: uint16(34246), + 68: uint16(34240), + 69: uint16(34243), + 70: uint16(34242), + 71: uint16(34227), + 72: uint16(34229), + 73: uint16(34237), + 74: uint16(34247), + 75: uint16(34244), + 76: uint16(34239), + 77: uint16(34251), + 78: uint16(34254), + 79: uint16(34248), + 80: uint16(34245), + 81: uint16(34225), + 82: uint16(34230), + 83: uint16(34258), + 84: uint16(34340), + 85: uint16(34232), + 86: uint16(34231), + 87: uint16(34238), + 88: uint16(34409), + 89: uint16(34791), + 90: uint16(34790), + 91: uint16(34786), + 92: uint16(34779), + 93: uint16(34795), + 94: uint16(34794), + 95: uint16(34789), + 96: uint16(34783), + 97: uint16(34803), + 98: uint16(34788), + 99: uint16(34772), + 100: uint16(34780), + 101: uint16(34771), + 102: uint16(34797), + 103: uint16(34776), + 104: uint16(34787), + 105: uint16(34724), + 106: uint16(34775), + 107: uint16(34777), + 108: uint16(34817), + 109: uint16(34804), + 110: uint16(34792), + 111: uint16(34781), + 112: uint16(35155), + 113: uint16(35147), + 114: uint16(35151), + 115: uint16(35148), + 116: uint16(35142), + 117: uint16(35152), + 118: uint16(35153), + 119: uint16(35145), + 120: uint16(35626), + 121: uint16(35623), + 122: uint16(35619), + 123: uint16(35635), + 124: uint16(35632), + 125: uint16(35637), + 126: uint16(35655), + 127: uint16(35631), + 128: uint16(35644), + 129: uint16(35646), + 130: uint16(35633), + 131: uint16(35621), + 132: uint16(35639), + 133: uint16(35622), + 134: uint16(35638), + 135: uint16(35630), + 136: uint16(35620), + 137: uint16(35643), + 138: uint16(35645), + 139: uint16(35642), + 140: uint16(35906), + 141: uint16(35957), + 142: uint16(35993), + 143: uint16(35992), + 144: uint16(35991), + 145: uint16(36094), + 146: uint16(36100), + 147: uint16(36098), + 148: uint16(36096), + 149: uint16(36444), + 150: uint16(36450), + 151: uint16(36448), + 152: uint16(36439), + 153: uint16(36438), + 154: uint16(36446), + 155: uint16(36453), + 156: uint16(36455), + }, + 80: { + 0: uint16(36443), + 1: uint16(36442), + 2: uint16(36449), + 3: uint16(36445), + 4: uint16(36457), + 5: uint16(36436), + 6: uint16(36678), + 7: uint16(36679), + 8: uint16(36680), + 9: uint16(36683), + 10: uint16(37160), + 11: uint16(37178), + 12: uint16(37179), + 13: uint16(37182), + 14: uint16(37288), + 15: uint16(37285), + 16: uint16(37287), + 17: uint16(37295), + 18: uint16(37290), + 19: uint16(37813), + 20: uint16(37772), + 21: uint16(37778), + 22: uint16(37815), + 23: uint16(37787), + 24: uint16(37789), + 25: uint16(37769), + 26: uint16(37799), + 27: uint16(37774), + 28: uint16(37802), + 29: uint16(37790), + 30: uint16(37798), + 31: uint16(37781), + 32: uint16(37768), + 33: uint16(37785), + 34: uint16(37791), + 35: uint16(37773), + 36: uint16(37809), + 37: uint16(37777), + 38: uint16(37810), + 39: uint16(37796), + 40: uint16(37800), + 41: uint16(37812), + 42: uint16(37795), + 43: uint16(37797), + 44: uint16(38354), + 45: uint16(38355), + 46: uint16(38353), + 47: uint16(38579), + 48: uint16(38615), + 49: uint16(38618), + 50: uint16(24002), + 51: uint16(38623), + 52: uint16(38616), + 53: uint16(38621), + 54: uint16(38691), + 55: uint16(38690), + 56: uint16(38693), + 57: uint16(38828), + 58: uint16(38830), + 59: uint16(38824), + 60: uint16(38827), + 61: uint16(38820), + 62: uint16(38826), + 63: uint16(38818), + 64: uint16(38821), + 65: uint16(38871), + 66: uint16(38873), + 67: uint16(38870), + 68: uint16(38872), + 69: uint16(38906), + 70: uint16(38992), + 71: uint16(38993), + 72: uint16(38994), + 73: uint16(39096), + 74: uint16(39233), + 75: uint16(39228), + 76: uint16(39226), + 77: uint16(39439), + 78: uint16(39435), + 79: uint16(39433), + 80: uint16(39437), + 81: uint16(39428), + 82: uint16(39441), + 83: uint16(39434), + 84: uint16(39429), + 85: uint16(39431), + 86: uint16(39430), + 87: uint16(39616), + 88: uint16(39644), + 89: uint16(39688), + 90: uint16(39684), + 91: uint16(39685), + 92: uint16(39721), + 93: uint16(39733), + 94: uint16(39754), + 95: uint16(39756), + 96: uint16(39755), + 97: uint16(39879), + 98: uint16(39878), + 99: uint16(39875), + 100: uint16(39871), + 101: uint16(39873), + 102: uint16(39861), + 103: uint16(39864), + 104: uint16(39891), + 105: uint16(39862), + 106: uint16(39876), + 107: uint16(39865), + 108: uint16(39869), + 109: uint16(40284), + 110: uint16(40275), + 111: uint16(40271), + 112: uint16(40266), + 113: uint16(40283), + 114: uint16(40267), + 115: uint16(40281), + 116: uint16(40278), + 117: uint16(40268), + 118: uint16(40279), + 119: uint16(40274), + 120: uint16(40276), + 121: uint16(40287), + 122: uint16(40280), + 123: uint16(40282), + 124: uint16(40590), + 125: uint16(40588), + 126: uint16(40671), + 127: uint16(40705), + 128: uint16(40704), + 129: uint16(40726), + 130: uint16(40741), + 131: uint16(40747), + 132: uint16(40746), + 133: uint16(40745), + 134: uint16(40744), + 135: uint16(40780), + 136: uint16(40789), + 137: uint16(20788), + 138: uint16(20789), + 139: uint16(21142), + 140: uint16(21239), + 141: uint16(21428), + 142: uint16(22187), + 143: uint16(22189), + 144: uint16(22182), + 145: uint16(22183), + 146: uint16(22186), + 147: uint16(22188), + 148: uint16(22746), + 149: uint16(22749), + 150: uint16(22747), + 151: uint16(22802), + 152: uint16(23357), + 153: uint16(23358), + 154: uint16(23359), + 155: uint16(24003), + 156: uint16(24176), + }, + 81: { + 0: uint16(24511), + 1: uint16(25083), + 2: uint16(25863), + 3: uint16(25872), + 4: uint16(25869), + 5: uint16(25865), + 6: uint16(25868), + 7: uint16(25870), + 8: uint16(25988), + 9: uint16(26078), + 10: uint16(26077), + 11: uint16(26334), + 12: uint16(27367), + 13: uint16(27360), + 14: uint16(27340), + 15: uint16(27345), + 16: uint16(27353), + 17: uint16(27339), + 18: uint16(27359), + 19: uint16(27356), + 20: uint16(27344), + 21: uint16(27371), + 22: uint16(27343), + 23: uint16(27341), + 24: uint16(27358), + 25: uint16(27488), + 26: uint16(27568), + 27: uint16(27660), + 28: uint16(28697), + 29: uint16(28711), + 30: uint16(28704), + 31: uint16(28694), + 32: uint16(28715), + 33: uint16(28705), + 34: uint16(28706), + 35: uint16(28707), + 36: uint16(28713), + 37: uint16(28695), + 38: uint16(28708), + 39: uint16(28700), + 40: uint16(28714), + 41: uint16(29196), + 42: uint16(29194), + 43: uint16(29191), + 44: uint16(29186), + 45: uint16(29189), + 46: uint16(29349), + 47: uint16(29350), + 48: uint16(29348), + 49: uint16(29347), + 50: uint16(29345), + 51: uint16(29899), + 52: uint16(29893), + 53: uint16(29879), + 54: uint16(29891), + 55: uint16(29974), + 56: uint16(30304), + 57: uint16(30665), + 58: uint16(30666), + 59: uint16(30660), + 60: uint16(30705), + 61: uint16(31005), + 62: uint16(31003), + 63: uint16(31009), + 64: uint16(31004), + 65: uint16(30999), + 66: uint16(31006), + 67: uint16(31152), + 68: uint16(31335), + 69: uint16(31336), + 70: uint16(31795), + 71: uint16(31804), + 72: uint16(31801), + 73: uint16(31788), + 74: uint16(31803), + 75: uint16(31980), + 76: uint16(31978), + 77: uint16(32374), + 78: uint16(32373), + 79: uint16(32376), + 80: uint16(32368), + 81: uint16(32375), + 82: uint16(32367), + 83: uint16(32378), + 84: uint16(32370), + 85: uint16(32372), + 86: uint16(32360), + 87: uint16(32587), + 88: uint16(32586), + 89: uint16(32643), + 90: uint16(32646), + 91: uint16(32695), + 92: uint16(32765), + 93: uint16(32766), + 94: uint16(32888), + 95: uint16(33239), + 96: uint16(33237), + 97: uint16(33380), + 98: uint16(33377), + 99: uint16(33379), + 100: uint16(34283), + 101: uint16(34289), + 102: uint16(34285), + 103: uint16(34265), + 104: uint16(34273), + 105: uint16(34280), + 106: uint16(34266), + 107: uint16(34263), + 108: uint16(34284), + 109: uint16(34290), + 110: uint16(34296), + 111: uint16(34264), + 112: uint16(34271), + 113: uint16(34275), + 114: uint16(34268), + 115: uint16(34257), + 116: uint16(34288), + 117: uint16(34278), + 118: uint16(34287), + 119: uint16(34270), + 120: uint16(34274), + 121: uint16(34816), + 122: uint16(34810), + 123: uint16(34819), + 124: uint16(34806), + 125: uint16(34807), + 126: uint16(34825), + 127: uint16(34828), + 128: uint16(34827), + 129: uint16(34822), + 130: uint16(34812), + 131: uint16(34824), + 132: uint16(34815), + 133: uint16(34826), + 134: uint16(34818), + 135: uint16(35170), + 136: uint16(35162), + 137: uint16(35163), + 138: uint16(35159), + 139: uint16(35169), + 140: uint16(35164), + 141: uint16(35160), + 142: uint16(35165), + 143: uint16(35161), + 144: uint16(35208), + 145: uint16(35255), + 146: uint16(35254), + 147: uint16(35318), + 148: uint16(35664), + 149: uint16(35656), + 150: uint16(35658), + 151: uint16(35648), + 152: uint16(35667), + 153: uint16(35670), + 154: uint16(35668), + 155: uint16(35659), + 156: uint16(35669), + }, + 82: { + 0: uint16(35665), + 1: uint16(35650), + 2: uint16(35666), + 3: uint16(35671), + 4: uint16(35907), + 5: uint16(35959), + 6: uint16(35958), + 7: uint16(35994), + 8: uint16(36102), + 9: uint16(36103), + 10: uint16(36105), + 11: uint16(36268), + 12: uint16(36266), + 13: uint16(36269), + 14: uint16(36267), + 15: uint16(36461), + 16: uint16(36472), + 17: uint16(36467), + 18: uint16(36458), + 19: uint16(36463), + 20: uint16(36475), + 21: uint16(36546), + 22: uint16(36690), + 23: uint16(36689), + 24: uint16(36687), + 25: uint16(36688), + 26: uint16(36691), + 27: uint16(36788), + 28: uint16(37184), + 29: uint16(37183), + 30: uint16(37296), + 31: uint16(37293), + 32: uint16(37854), + 33: uint16(37831), + 34: uint16(37839), + 35: uint16(37826), + 36: uint16(37850), + 37: uint16(37840), + 38: uint16(37881), + 39: uint16(37868), + 40: uint16(37836), + 41: uint16(37849), + 42: uint16(37801), + 43: uint16(37862), + 44: uint16(37834), + 45: uint16(37844), + 46: uint16(37870), + 47: uint16(37859), + 48: uint16(37845), + 49: uint16(37828), + 50: uint16(37838), + 51: uint16(37824), + 52: uint16(37842), + 53: uint16(37863), + 54: uint16(38269), + 55: uint16(38362), + 56: uint16(38363), + 57: uint16(38625), + 58: uint16(38697), + 59: uint16(38699), + 60: uint16(38700), + 61: uint16(38696), + 62: uint16(38694), + 63: uint16(38835), + 64: uint16(38839), + 65: uint16(38838), + 66: uint16(38877), + 67: uint16(38878), + 68: uint16(38879), + 69: uint16(39004), + 70: uint16(39001), + 71: uint16(39005), + 72: uint16(38999), + 73: uint16(39103), + 74: uint16(39101), + 75: uint16(39099), + 76: uint16(39102), + 77: uint16(39240), + 78: uint16(39239), + 79: uint16(39235), + 80: uint16(39334), + 81: uint16(39335), + 82: uint16(39450), + 83: uint16(39445), + 84: uint16(39461), + 85: uint16(39453), + 86: uint16(39460), + 87: uint16(39451), + 88: uint16(39458), + 89: uint16(39456), + 90: uint16(39463), + 91: uint16(39459), + 92: uint16(39454), + 93: uint16(39452), + 94: uint16(39444), + 95: uint16(39618), + 96: uint16(39691), + 97: uint16(39690), + 98: uint16(39694), + 99: uint16(39692), + 100: uint16(39735), + 101: uint16(39914), + 102: uint16(39915), + 103: uint16(39904), + 104: uint16(39902), + 105: uint16(39908), + 106: uint16(39910), + 107: uint16(39906), + 108: uint16(39920), + 109: uint16(39892), + 110: uint16(39895), + 111: uint16(39916), + 112: uint16(39900), + 113: uint16(39897), + 114: uint16(39909), + 115: uint16(39893), + 116: uint16(39905), + 117: uint16(39898), + 118: uint16(40311), + 119: uint16(40321), + 120: uint16(40330), + 121: uint16(40324), + 122: uint16(40328), + 123: uint16(40305), + 124: uint16(40320), + 125: uint16(40312), + 126: uint16(40326), + 127: uint16(40331), + 128: uint16(40332), + 129: uint16(40317), + 130: uint16(40299), + 131: uint16(40308), + 132: uint16(40309), + 133: uint16(40304), + 134: uint16(40297), + 135: uint16(40325), + 136: uint16(40307), + 137: uint16(40315), + 138: uint16(40322), + 139: uint16(40303), + 140: uint16(40313), + 141: uint16(40319), + 142: uint16(40327), + 143: uint16(40296), + 144: uint16(40596), + 145: uint16(40593), + 146: uint16(40640), + 147: uint16(40700), + 148: uint16(40749), + 149: uint16(40768), + 150: uint16(40769), + 151: uint16(40781), + 152: uint16(40790), + 153: uint16(40791), + 154: uint16(40792), + 155: uint16(21303), + 156: uint16(22194), + }, + 83: { + 0: uint16(22197), + 1: uint16(22195), + 2: uint16(22755), + 3: uint16(23365), + 4: uint16(24006), + 5: uint16(24007), + 6: uint16(24302), + 7: uint16(24303), + 8: uint16(24512), + 9: uint16(24513), + 10: uint16(25081), + 11: uint16(25879), + 12: uint16(25878), + 13: uint16(25877), + 14: uint16(25875), + 15: uint16(26079), + 16: uint16(26344), + 17: uint16(26339), + 18: uint16(26340), + 19: uint16(27379), + 20: uint16(27376), + 21: uint16(27370), + 22: uint16(27368), + 23: uint16(27385), + 24: uint16(27377), + 25: uint16(27374), + 26: uint16(27375), + 27: uint16(28732), + 28: uint16(28725), + 29: uint16(28719), + 30: uint16(28727), + 31: uint16(28724), + 32: uint16(28721), + 33: uint16(28738), + 34: uint16(28728), + 35: uint16(28735), + 36: uint16(28730), + 37: uint16(28729), + 38: uint16(28736), + 39: uint16(28731), + 40: uint16(28723), + 41: uint16(28737), + 42: uint16(29203), + 43: uint16(29204), + 44: uint16(29352), + 45: uint16(29565), + 46: uint16(29564), + 47: uint16(29882), + 48: uint16(30379), + 49: uint16(30378), + 50: uint16(30398), + 51: uint16(30445), + 52: uint16(30668), + 53: uint16(30670), + 54: uint16(30671), + 55: uint16(30669), + 56: uint16(30706), + 57: uint16(31013), + 58: uint16(31011), + 59: uint16(31015), + 60: uint16(31016), + 61: uint16(31012), + 62: uint16(31017), + 63: uint16(31154), + 64: uint16(31342), + 65: uint16(31340), + 66: uint16(31341), + 67: uint16(31479), + 68: uint16(31817), + 69: uint16(31816), + 70: uint16(31818), + 71: uint16(31815), + 72: uint16(31813), + 73: uint16(31982), + 74: uint16(32379), + 75: uint16(32382), + 76: uint16(32385), + 77: uint16(32384), + 78: uint16(32698), + 79: uint16(32767), + 80: uint16(32889), + 81: uint16(33243), + 82: uint16(33241), + 83: uint16(33291), + 84: uint16(33384), + 85: uint16(33385), + 86: uint16(34338), + 87: uint16(34303), + 88: uint16(34305), + 89: uint16(34302), + 90: uint16(34331), + 91: uint16(34304), + 92: uint16(34294), + 93: uint16(34308), + 94: uint16(34313), + 95: uint16(34309), + 96: uint16(34316), + 97: uint16(34301), + 98: uint16(34841), + 99: uint16(34832), + 100: uint16(34833), + 101: uint16(34839), + 102: uint16(34835), + 103: uint16(34838), + 104: uint16(35171), + 105: uint16(35174), + 106: uint16(35257), + 107: uint16(35319), + 108: uint16(35680), + 109: uint16(35690), + 110: uint16(35677), + 111: uint16(35688), + 112: uint16(35683), + 113: uint16(35685), + 114: uint16(35687), + 115: uint16(35693), + 116: uint16(36270), + 117: uint16(36486), + 118: uint16(36488), + 119: uint16(36484), + 120: uint16(36697), + 121: uint16(36694), + 122: uint16(36695), + 123: uint16(36693), + 124: uint16(36696), + 125: uint16(36698), + 126: uint16(37005), + 127: uint16(37187), + 128: uint16(37185), + 129: uint16(37303), + 130: uint16(37301), + 131: uint16(37298), + 132: uint16(37299), + 133: uint16(37899), + 134: uint16(37907), + 135: uint16(37883), + 136: uint16(37920), + 137: uint16(37903), + 138: uint16(37908), + 139: uint16(37886), + 140: uint16(37909), + 141: uint16(37904), + 142: uint16(37928), + 143: uint16(37913), + 144: uint16(37901), + 145: uint16(37877), + 146: uint16(37888), + 147: uint16(37879), + 148: uint16(37895), + 149: uint16(37902), + 150: uint16(37910), + 151: uint16(37906), + 152: uint16(37882), + 153: uint16(37897), + 154: uint16(37880), + 155: uint16(37898), + 156: uint16(37887), + }, + 84: { + 0: uint16(37884), + 1: uint16(37900), + 2: uint16(37878), + 3: uint16(37905), + 4: uint16(37894), + 5: uint16(38366), + 6: uint16(38368), + 7: uint16(38367), + 8: uint16(38702), + 9: uint16(38703), + 10: uint16(38841), + 11: uint16(38843), + 12: uint16(38909), + 13: uint16(38910), + 14: uint16(39008), + 15: uint16(39010), + 16: uint16(39011), + 17: uint16(39007), + 18: uint16(39105), + 19: uint16(39106), + 20: uint16(39248), + 21: uint16(39246), + 22: uint16(39257), + 23: uint16(39244), + 24: uint16(39243), + 25: uint16(39251), + 26: uint16(39474), + 27: uint16(39476), + 28: uint16(39473), + 29: uint16(39468), + 30: uint16(39466), + 31: uint16(39478), + 32: uint16(39465), + 33: uint16(39470), + 34: uint16(39480), + 35: uint16(39469), + 36: uint16(39623), + 37: uint16(39626), + 38: uint16(39622), + 39: uint16(39696), + 40: uint16(39698), + 41: uint16(39697), + 42: uint16(39947), + 43: uint16(39944), + 44: uint16(39927), + 45: uint16(39941), + 46: uint16(39954), + 47: uint16(39928), + 48: uint16(40000), + 49: uint16(39943), + 50: uint16(39950), + 51: uint16(39942), + 52: uint16(39959), + 53: uint16(39956), + 54: uint16(39945), + 55: uint16(40351), + 56: uint16(40345), + 57: uint16(40356), + 58: uint16(40349), + 59: uint16(40338), + 60: uint16(40344), + 61: uint16(40336), + 62: uint16(40347), + 63: uint16(40352), + 64: uint16(40340), + 65: uint16(40348), + 66: uint16(40362), + 67: uint16(40343), + 68: uint16(40353), + 69: uint16(40346), + 70: uint16(40354), + 71: uint16(40360), + 72: uint16(40350), + 73: uint16(40355), + 74: uint16(40383), + 75: uint16(40361), + 76: uint16(40342), + 77: uint16(40358), + 78: uint16(40359), + 79: uint16(40601), + 80: uint16(40603), + 81: uint16(40602), + 82: uint16(40677), + 83: uint16(40676), + 84: uint16(40679), + 85: uint16(40678), + 86: uint16(40752), + 87: uint16(40750), + 88: uint16(40795), + 89: uint16(40800), + 90: uint16(40798), + 91: uint16(40797), + 92: uint16(40793), + 93: uint16(40849), + 94: uint16(20794), + 95: uint16(20793), + 96: uint16(21144), + 97: uint16(21143), + 98: uint16(22211), + 99: uint16(22205), + 100: uint16(22206), + 101: uint16(23368), + 102: uint16(23367), + 103: uint16(24011), + 104: uint16(24015), + 105: uint16(24305), + 106: uint16(25085), + 107: uint16(25883), + 108: uint16(27394), + 109: uint16(27388), + 110: uint16(27395), + 111: uint16(27384), + 112: uint16(27392), + 113: uint16(28739), + 114: uint16(28740), + 115: uint16(28746), + 116: uint16(28744), + 117: uint16(28745), + 118: uint16(28741), + 119: uint16(28742), + 120: uint16(29213), + 121: uint16(29210), + 122: uint16(29209), + 123: uint16(29566), + 124: uint16(29975), + 125: uint16(30314), + 126: uint16(30672), + 127: uint16(31021), + 128: uint16(31025), + 129: uint16(31023), + 130: uint16(31828), + 131: uint16(31827), + 132: uint16(31986), + 133: uint16(32394), + 134: uint16(32391), + 135: uint16(32392), + 136: uint16(32395), + 137: uint16(32390), + 138: uint16(32397), + 139: uint16(32589), + 140: uint16(32699), + 141: uint16(32816), + 142: uint16(33245), + 143: uint16(34328), + 144: uint16(34346), + 145: uint16(34342), + 146: uint16(34335), + 147: uint16(34339), + 148: uint16(34332), + 149: uint16(34329), + 150: uint16(34343), + 151: uint16(34350), + 152: uint16(34337), + 153: uint16(34336), + 154: uint16(34345), + 155: uint16(34334), + 156: uint16(34341), + }, + 85: { + 0: uint16(34857), + 1: uint16(34845), + 2: uint16(34843), + 3: uint16(34848), + 4: uint16(34852), + 5: uint16(34844), + 6: uint16(34859), + 7: uint16(34890), + 8: uint16(35181), + 9: uint16(35177), + 10: uint16(35182), + 11: uint16(35179), + 12: uint16(35322), + 13: uint16(35705), + 14: uint16(35704), + 15: uint16(35653), + 16: uint16(35706), + 17: uint16(35707), + 18: uint16(36112), + 19: uint16(36116), + 20: uint16(36271), + 21: uint16(36494), + 22: uint16(36492), + 23: uint16(36702), + 24: uint16(36699), + 25: uint16(36701), + 26: uint16(37190), + 27: uint16(37188), + 28: uint16(37189), + 29: uint16(37305), + 30: uint16(37951), + 31: uint16(37947), + 32: uint16(37942), + 33: uint16(37929), + 34: uint16(37949), + 35: uint16(37948), + 36: uint16(37936), + 37: uint16(37945), + 38: uint16(37930), + 39: uint16(37943), + 40: uint16(37932), + 41: uint16(37952), + 42: uint16(37937), + 43: uint16(38373), + 44: uint16(38372), + 45: uint16(38371), + 46: uint16(38709), + 47: uint16(38714), + 48: uint16(38847), + 49: uint16(38881), + 50: uint16(39012), + 51: uint16(39113), + 52: uint16(39110), + 53: uint16(39104), + 54: uint16(39256), + 55: uint16(39254), + 56: uint16(39481), + 57: uint16(39485), + 58: uint16(39494), + 59: uint16(39492), + 60: uint16(39490), + 61: uint16(39489), + 62: uint16(39482), + 63: uint16(39487), + 64: uint16(39629), + 65: uint16(39701), + 66: uint16(39703), + 67: uint16(39704), + 68: uint16(39702), + 69: uint16(39738), + 70: uint16(39762), + 71: uint16(39979), + 72: uint16(39965), + 73: uint16(39964), + 74: uint16(39980), + 75: uint16(39971), + 76: uint16(39976), + 77: uint16(39977), + 78: uint16(39972), + 79: uint16(39969), + 80: uint16(40375), + 81: uint16(40374), + 82: uint16(40380), + 83: uint16(40385), + 84: uint16(40391), + 85: uint16(40394), + 86: uint16(40399), + 87: uint16(40382), + 88: uint16(40389), + 89: uint16(40387), + 90: uint16(40379), + 91: uint16(40373), + 92: uint16(40398), + 93: uint16(40377), + 94: uint16(40378), + 95: uint16(40364), + 96: uint16(40392), + 97: uint16(40369), + 98: uint16(40365), + 99: uint16(40396), + 100: uint16(40371), + 101: uint16(40397), + 102: uint16(40370), + 103: uint16(40570), + 104: uint16(40604), + 105: uint16(40683), + 106: uint16(40686), + 107: uint16(40685), + 108: uint16(40731), + 109: uint16(40728), + 110: uint16(40730), + 111: uint16(40753), + 112: uint16(40782), + 113: uint16(40805), + 114: uint16(40804), + 115: uint16(40850), + 116: uint16(20153), + 117: uint16(22214), + 118: uint16(22213), + 119: uint16(22219), + 120: uint16(22897), + 121: uint16(23371), + 122: uint16(23372), + 123: uint16(24021), + 124: uint16(24017), + 125: uint16(24306), + 126: uint16(25889), + 127: uint16(25888), + 128: uint16(25894), + 129: uint16(25890), + 130: uint16(27403), + 131: uint16(27400), + 132: uint16(27401), + 133: uint16(27661), + 134: uint16(28757), + 135: uint16(28758), + 136: uint16(28759), + 137: uint16(28754), + 138: uint16(29214), + 139: uint16(29215), + 140: uint16(29353), + 141: uint16(29567), + 142: uint16(29912), + 143: uint16(29909), + 144: uint16(29913), + 145: uint16(29911), + 146: uint16(30317), + 147: uint16(30381), + 148: uint16(31029), + 149: uint16(31156), + 150: uint16(31344), + 151: uint16(31345), + 152: uint16(31831), + 153: uint16(31836), + 154: uint16(31833), + 155: uint16(31835), + 156: uint16(31834), + }, + 86: { + 0: uint16(31988), + 1: uint16(31985), + 2: uint16(32401), + 3: uint16(32591), + 4: uint16(32647), + 5: uint16(33246), + 6: uint16(33387), + 7: uint16(34356), + 8: uint16(34357), + 9: uint16(34355), + 10: uint16(34348), + 11: uint16(34354), + 12: uint16(34358), + 13: uint16(34860), + 14: uint16(34856), + 15: uint16(34854), + 16: uint16(34858), + 17: uint16(34853), + 18: uint16(35185), + 19: uint16(35263), + 20: uint16(35262), + 21: uint16(35323), + 22: uint16(35710), + 23: uint16(35716), + 24: uint16(35714), + 25: uint16(35718), + 26: uint16(35717), + 27: uint16(35711), + 28: uint16(36117), + 29: uint16(36501), + 30: uint16(36500), + 31: uint16(36506), + 32: uint16(36498), + 33: uint16(36496), + 34: uint16(36502), + 35: uint16(36503), + 36: uint16(36704), + 37: uint16(36706), + 38: uint16(37191), + 39: uint16(37964), + 40: uint16(37968), + 41: uint16(37962), + 42: uint16(37963), + 43: uint16(37967), + 44: uint16(37959), + 45: uint16(37957), + 46: uint16(37960), + 47: uint16(37961), + 48: uint16(37958), + 49: uint16(38719), + 50: uint16(38883), + 51: uint16(39018), + 52: uint16(39017), + 53: uint16(39115), + 54: uint16(39252), + 55: uint16(39259), + 56: uint16(39502), + 57: uint16(39507), + 58: uint16(39508), + 59: uint16(39500), + 60: uint16(39503), + 61: uint16(39496), + 62: uint16(39498), + 63: uint16(39497), + 64: uint16(39506), + 65: uint16(39504), + 66: uint16(39632), + 67: uint16(39705), + 68: uint16(39723), + 69: uint16(39739), + 70: uint16(39766), + 71: uint16(39765), + 72: uint16(40006), + 73: uint16(40008), + 74: uint16(39999), + 75: uint16(40004), + 76: uint16(39993), + 77: uint16(39987), + 78: uint16(40001), + 79: uint16(39996), + 80: uint16(39991), + 81: uint16(39988), + 82: uint16(39986), + 83: uint16(39997), + 84: uint16(39990), + 85: uint16(40411), + 86: uint16(40402), + 87: uint16(40414), + 88: uint16(40410), + 89: uint16(40395), + 90: uint16(40400), + 91: uint16(40412), + 92: uint16(40401), + 93: uint16(40415), + 94: uint16(40425), + 95: uint16(40409), + 96: uint16(40408), + 97: uint16(40406), + 98: uint16(40437), + 99: uint16(40405), + 100: uint16(40413), + 101: uint16(40630), + 102: uint16(40688), + 103: uint16(40757), + 104: uint16(40755), + 105: uint16(40754), + 106: uint16(40770), + 107: uint16(40811), + 108: uint16(40853), + 109: uint16(40866), + 110: uint16(20797), + 111: uint16(21145), + 112: uint16(22760), + 113: uint16(22759), + 114: uint16(22898), + 115: uint16(23373), + 116: uint16(24024), + 117: uint16(34863), + 118: uint16(24399), + 119: uint16(25089), + 120: uint16(25091), + 121: uint16(25092), + 122: uint16(25897), + 123: uint16(25893), + 124: uint16(26006), + 125: uint16(26347), + 126: uint16(27409), + 127: uint16(27410), + 128: uint16(27407), + 129: uint16(27594), + 130: uint16(28763), + 131: uint16(28762), + 132: uint16(29218), + 133: uint16(29570), + 134: uint16(29569), + 135: uint16(29571), + 136: uint16(30320), + 137: uint16(30676), + 138: uint16(31847), + 139: uint16(31846), + 140: uint16(32405), + 141: uint16(33388), + 142: uint16(34362), + 143: uint16(34368), + 144: uint16(34361), + 145: uint16(34364), + 146: uint16(34353), + 147: uint16(34363), + 148: uint16(34366), + 149: uint16(34864), + 150: uint16(34866), + 151: uint16(34862), + 152: uint16(34867), + 153: uint16(35190), + 154: uint16(35188), + 155: uint16(35187), + 156: uint16(35326), + }, + 87: { + 0: uint16(35724), + 1: uint16(35726), + 2: uint16(35723), + 3: uint16(35720), + 4: uint16(35909), + 5: uint16(36121), + 6: uint16(36504), + 7: uint16(36708), + 8: uint16(36707), + 9: uint16(37308), + 10: uint16(37986), + 11: uint16(37973), + 12: uint16(37981), + 13: uint16(37975), + 14: uint16(37982), + 15: uint16(38852), + 16: uint16(38853), + 17: uint16(38912), + 18: uint16(39510), + 19: uint16(39513), + 20: uint16(39710), + 21: uint16(39711), + 22: uint16(39712), + 23: uint16(40018), + 24: uint16(40024), + 25: uint16(40016), + 26: uint16(40010), + 27: uint16(40013), + 28: uint16(40011), + 29: uint16(40021), + 30: uint16(40025), + 31: uint16(40012), + 32: uint16(40014), + 33: uint16(40443), + 34: uint16(40439), + 35: uint16(40431), + 36: uint16(40419), + 37: uint16(40427), + 38: uint16(40440), + 39: uint16(40420), + 40: uint16(40438), + 41: uint16(40417), + 42: uint16(40430), + 43: uint16(40422), + 44: uint16(40434), + 45: uint16(40432), + 46: uint16(40418), + 47: uint16(40428), + 48: uint16(40436), + 49: uint16(40435), + 50: uint16(40424), + 51: uint16(40429), + 52: uint16(40642), + 53: uint16(40656), + 54: uint16(40690), + 55: uint16(40691), + 56: uint16(40710), + 57: uint16(40732), + 58: uint16(40760), + 59: uint16(40759), + 60: uint16(40758), + 61: uint16(40771), + 62: uint16(40783), + 63: uint16(40817), + 64: uint16(40816), + 65: uint16(40814), + 66: uint16(40815), + 67: uint16(22227), + 68: uint16(22221), + 69: uint16(23374), + 70: uint16(23661), + 71: uint16(25901), + 72: uint16(26349), + 73: uint16(26350), + 74: uint16(27411), + 75: uint16(28767), + 76: uint16(28769), + 77: uint16(28765), + 78: uint16(28768), + 79: uint16(29219), + 80: uint16(29915), + 81: uint16(29925), + 82: uint16(30677), + 83: uint16(31032), + 84: uint16(31159), + 85: uint16(31158), + 86: uint16(31850), + 87: uint16(32407), + 88: uint16(32649), + 89: uint16(33389), + 90: uint16(34371), + 91: uint16(34872), + 92: uint16(34871), + 93: uint16(34869), + 94: uint16(34891), + 95: uint16(35732), + 96: uint16(35733), + 97: uint16(36510), + 98: uint16(36511), + 99: uint16(36512), + 100: uint16(36509), + 101: uint16(37310), + 102: uint16(37309), + 103: uint16(37314), + 104: uint16(37995), + 105: uint16(37992), + 106: uint16(37993), + 107: uint16(38629), + 108: uint16(38726), + 109: uint16(38723), + 110: uint16(38727), + 111: uint16(38855), + 112: uint16(38885), + 113: uint16(39518), + 114: uint16(39637), + 115: uint16(39769), + 116: uint16(40035), + 117: uint16(40039), + 118: uint16(40038), + 119: uint16(40034), + 120: uint16(40030), + 121: uint16(40032), + 122: uint16(40450), + 123: uint16(40446), + 124: uint16(40455), + 125: uint16(40451), + 126: uint16(40454), + 127: uint16(40453), + 128: uint16(40448), + 129: uint16(40449), + 130: uint16(40457), + 131: uint16(40447), + 132: uint16(40445), + 133: uint16(40452), + 134: uint16(40608), + 135: uint16(40734), + 136: uint16(40774), + 137: uint16(40820), + 138: uint16(40821), + 139: uint16(40822), + 140: uint16(22228), + 141: uint16(25902), + 142: uint16(26040), + 143: uint16(27416), + 144: uint16(27417), + 145: uint16(27415), + 146: uint16(27418), + 147: uint16(28770), + 148: uint16(29222), + 149: uint16(29354), + 150: uint16(30680), + 151: uint16(30681), + 152: uint16(31033), + 153: uint16(31849), + 154: uint16(31851), + 155: uint16(31990), + 156: uint16(32410), + }, + 88: { + 0: uint16(32408), + 1: uint16(32411), + 2: uint16(32409), + 3: uint16(33248), + 4: uint16(33249), + 5: uint16(34374), + 6: uint16(34375), + 7: uint16(34376), + 8: uint16(35193), + 9: uint16(35194), + 10: uint16(35196), + 11: uint16(35195), + 12: uint16(35327), + 13: uint16(35736), + 14: uint16(35737), + 15: uint16(36517), + 16: uint16(36516), + 17: uint16(36515), + 18: uint16(37998), + 19: uint16(37997), + 20: uint16(37999), + 21: uint16(38001), + 22: uint16(38003), + 23: uint16(38729), + 24: uint16(39026), + 25: uint16(39263), + 26: uint16(40040), + 27: uint16(40046), + 28: uint16(40045), + 29: uint16(40459), + 30: uint16(40461), + 31: uint16(40464), + 32: uint16(40463), + 33: uint16(40466), + 34: uint16(40465), + 35: uint16(40609), + 36: uint16(40693), + 37: uint16(40713), + 38: uint16(40775), + 39: uint16(40824), + 40: uint16(40827), + 41: uint16(40826), + 42: uint16(40825), + 43: uint16(22302), + 44: uint16(28774), + 45: uint16(31855), + 46: uint16(34876), + 47: uint16(36274), + 48: uint16(36518), + 49: uint16(37315), + 50: uint16(38004), + 51: uint16(38008), + 52: uint16(38006), + 53: uint16(38005), + 54: uint16(39520), + 55: uint16(40052), + 56: uint16(40051), + 57: uint16(40049), + 58: uint16(40053), + 59: uint16(40468), + 60: uint16(40467), + 61: uint16(40694), + 62: uint16(40714), + 63: uint16(40868), + 64: uint16(28776), + 65: uint16(28773), + 66: uint16(31991), + 67: uint16(34410), + 68: uint16(34878), + 69: uint16(34877), + 70: uint16(34879), + 71: uint16(35742), + 72: uint16(35996), + 73: uint16(36521), + 74: uint16(36553), + 75: uint16(38731), + 76: uint16(39027), + 77: uint16(39028), + 78: uint16(39116), + 79: uint16(39265), + 80: uint16(39339), + 81: uint16(39524), + 82: uint16(39526), + 83: uint16(39527), + 84: uint16(39716), + 85: uint16(40469), + 86: uint16(40471), + 87: uint16(40776), + 88: uint16(25095), + 89: uint16(27422), + 90: uint16(29223), + 91: uint16(34380), + 92: uint16(36520), + 93: uint16(38018), + 94: uint16(38016), + 95: uint16(38017), + 96: uint16(39529), + 97: uint16(39528), + 98: uint16(39726), + 99: uint16(40473), + 100: uint16(29225), + 101: uint16(34379), + 102: uint16(35743), + 103: uint16(38019), + 104: uint16(40057), + 105: uint16(40631), + 106: uint16(30325), + 107: uint16(39531), + 108: uint16(40058), + 109: uint16(40477), + 110: uint16(28777), + 111: uint16(28778), + 112: uint16(40612), + 113: uint16(40830), + 114: uint16(40777), + 115: uint16(40856), + 116: uint16(30849), + 117: uint16(37561), + 118: uint16(35023), + 119: uint16(22715), + 120: uint16(24658), + 121: uint16(31911), + 122: uint16(23290), + 123: uint16(9556), + 124: uint16(9574), + 125: uint16(9559), + 126: uint16(9568), + 127: uint16(9580), + 128: uint16(9571), + 129: uint16(9562), + 130: uint16(9577), + 131: uint16(9565), + 132: uint16(9554), + 133: uint16(9572), + 134: uint16(9557), + 135: uint16(9566), + 136: uint16(9578), + 137: uint16(9569), + 138: uint16(9560), + 139: uint16(9575), + 140: uint16(9563), + 141: uint16(9555), + 142: uint16(9573), + 143: uint16(9558), + 144: uint16(9567), + 145: uint16(9579), + 146: uint16(9570), + 147: uint16(9561), + 148: uint16(9576), + 149: uint16(9564), + 150: uint16(9553), + 151: uint16(9552), + 152: uint16(9581), + 153: uint16(9582), + 154: uint16(9584), + 155: uint16(9583), + 156: uint16(9619), + }, +} + +var _hkscs = [5172]uint16{ + 0: uint16(17392), + 1: uint16(19506), + 2: uint16(17923), + 3: uint16(17830), + 4: uint16(17784), + 5: uint16(29287), + 6: uint16(19831), + 7: uint16(17843), + 8: uint16(31921), + 9: uint16(19682), + 10: uint16(31941), + 11: uint16(15253), + 12: uint16(18230), + 13: uint16(18244), + 14: uint16(19527), + 15: uint16(19520), + 16: uint16(17087), + 17: uint16(13847), + 18: uint16(29522), + 19: uint16(28299), + 20: uint16(28882), + 21: uint16(19543), + 22: uint16(41809), + 23: uint16(18255), + 24: uint16(17882), + 25: uint16(19589), + 26: uint16(31852), + 27: uint16(19719), + 28: uint16(19108), + 29: uint16(18081), + 30: uint16(27427), + 31: uint16(29221), + 32: uint16(23124), + 33: uint16(6755), + 34: uint16(15878), + 35: uint16(16225), + 36: uint16(26189), + 37: uint16(22267), + 39: uint16(32149), + 40: uint16(22813), + 41: uint16(35769), + 42: uint16(15860), + 43: uint16(38708), + 44: uint16(31727), + 45: uint16(23515), + 46: uint16(7518), + 47: uint16(23204), + 48: uint16(13861), + 49: uint16(40624), + 50: uint16(23249), + 51: uint16(23479), + 52: uint16(23804), + 53: uint16(26478), + 54: uint16(34195), + 55: uint16(39237), + 56: uint16(29793), + 57: uint16(29853), + 58: uint16(14453), + 59: uint16(7507), + 60: uint16(13982), + 61: uint16(24609), + 62: uint16(16108), + 63: uint16(22750), + 64: uint16(15093), + 65: uint16(31484), + 66: uint16(40855), + 67: uint16(16737), + 68: uint16(35085), + 69: uint16(12778), + 70: uint16(2698), + 71: uint16(12894), + 72: uint16(17162), + 73: uint16(33924), + 74: uint16(40854), + 75: uint16(37935), + 76: uint16(18736), + 77: uint16(34323), + 78: uint16(22678), + 79: uint16(38730), + 80: uint16(37400), + 81: uint16(31184), + 82: uint16(31282), + 83: uint16(26208), + 84: uint16(27177), + 85: uint16(34973), + 86: uint16(29772), + 87: uint16(31685), + 88: uint16(26498), + 89: uint16(31276), + 90: uint16(21071), + 91: uint16(36934), + 92: uint16(13542), + 93: uint16(29636), + 94: uint16(23993), + 95: uint16(29894), + 96: uint16(40903), + 97: uint16(22451), + 98: uint16(18735), + 99: uint16(21580), + 100: uint16(16689), + 101: uint16(13966), + 102: uint16(22552), + 103: uint16(31346), + 104: uint16(31589), + 105: uint16(35727), + 106: uint16(18094), + 107: uint16(28296), + 108: uint16(16769), + 109: uint16(23961), + 110: uint16(31662), + 111: uint16(9404), + 112: uint16(40904), + 113: uint16(9409), + 114: uint16(9417), + 115: uint16(9420), + 116: uint16(40905), + 117: uint16(34052), + 118: uint16(13755), + 119: uint16(16564), + 120: uint16(40906), + 121: uint16(17633), + 122: uint16(44543), + 123: uint16(25281), + 124: uint16(28782), + 125: uint16(40907), + 157: uint16(12736), + 158: uint16(12737), + 159: uint16(12738), + 160: uint16(12739), + 161: uint16(12740), + 162: uint16(268), + 163: uint16(12741), + 164: uint16(209), + 165: uint16(205), + 166: uint16(12742), + 167: uint16(12743), + 168: uint16(203), + 169: uint16(8168), + 170: uint16(12744), + 171: uint16(202), + 172: uint16(12745), + 173: uint16(12746), + 174: uint16(12747), + 175: uint16(12748), + 176: uint16(270), + 177: uint16(12749), + 178: uint16(12750), + 179: uint16(256), + 180: uint16(193), + 181: uint16(461), + 182: uint16(192), + 183: uint16(274), + 184: uint16(201), + 185: uint16(282), + 186: uint16(200), + 187: uint16(332), + 188: uint16(211), + 189: uint16(465), + 190: uint16(210), + 191: uint16(56320), + 192: uint16(7870), + 193: uint16(56324), + 194: uint16(7872), + 195: uint16(202), + 196: uint16(257), + 197: uint16(225), + 198: uint16(462), + 199: uint16(224), + 200: uint16(593), + 201: uint16(275), + 202: uint16(233), + 203: uint16(283), + 204: uint16(232), + 205: uint16(299), + 206: uint16(237), + 207: uint16(464), + 208: uint16(236), + 209: uint16(333), + 210: uint16(243), + 211: uint16(466), + 212: uint16(242), + 213: uint16(363), + 214: uint16(250), + 215: uint16(468), + 216: uint16(249), + 217: uint16(470), + 218: uint16(472), + 219: uint16(474), + 220: uint16(476), + 221: uint16(252), + 222: uint16(56328), + 223: uint16(7871), + 224: uint16(56332), + 225: uint16(7873), + 226: uint16(234), + 227: uint16(609), + 228: uint16(9178), + 229: uint16(9179), + 314: uint16(41897), + 315: uint16(4421), + 317: uint16(25866), + 320: uint16(20029), + 321: uint16(28381), + 322: uint16(40270), + 323: uint16(37343), + 326: uint16(30517), + 327: uint16(25745), + 328: uint16(20250), + 329: uint16(20264), + 330: uint16(20392), + 331: uint16(20822), + 332: uint16(20852), + 333: uint16(20892), + 334: uint16(20964), + 335: uint16(21153), + 336: uint16(21160), + 337: uint16(21307), + 338: uint16(21326), + 339: uint16(21457), + 340: uint16(21464), + 341: uint16(22242), + 342: uint16(22768), + 343: uint16(22788), + 344: uint16(22791), + 345: uint16(22834), + 346: uint16(22836), + 347: uint16(23398), + 348: uint16(23454), + 349: uint16(23455), + 350: uint16(23706), + 351: uint16(24198), + 352: uint16(24635), + 353: uint16(25993), + 354: uint16(26622), + 355: uint16(26628), + 356: uint16(26725), + 357: uint16(27982), + 358: uint16(28860), + 359: uint16(30005), + 360: uint16(32420), + 361: uint16(32428), + 362: uint16(32442), + 363: uint16(32455), + 364: uint16(32463), + 365: uint16(32479), + 366: uint16(32518), + 367: uint16(32567), + 368: uint16(33402), + 369: uint16(33487), + 370: uint16(33647), + 371: uint16(35270), + 372: uint16(35774), + 373: uint16(35810), + 374: uint16(36710), + 375: uint16(36711), + 376: uint16(36718), + 377: uint16(29713), + 378: uint16(31996), + 379: uint16(32205), + 380: uint16(26950), + 381: uint16(31433), + 382: uint16(21031), + 387: uint16(37260), + 388: uint16(30904), + 389: uint16(37214), + 390: uint16(32956), + 392: uint16(36107), + 393: uint16(33014), + 394: uint16(2535), + 397: uint16(32927), + 398: uint16(40647), + 399: uint16(19661), + 400: uint16(40393), + 401: uint16(40460), + 402: uint16(19518), + 403: uint16(40438), + 404: uint16(28686), + 405: uint16(40458), + 406: uint16(41267), + 407: uint16(13761), + 409: uint16(28314), + 410: uint16(33342), + 411: uint16(29977), + 413: uint16(18705), + 414: uint16(39532), + 415: uint16(39567), + 416: uint16(40857), + 417: uint16(31111), + 418: uint16(33900), + 419: uint16(7626), + 420: uint16(1488), + 421: uint16(10982), + 422: uint16(20004), + 423: uint16(20097), + 424: uint16(20096), + 425: uint16(20103), + 426: uint16(20159), + 427: uint16(20203), + 428: uint16(20279), + 429: uint16(13388), + 430: uint16(20413), + 431: uint16(15944), + 432: uint16(20483), + 433: uint16(20616), + 434: uint16(13437), + 435: uint16(13459), + 436: uint16(13477), + 437: uint16(20870), + 438: uint16(22789), + 439: uint16(20955), + 440: uint16(20988), + 441: uint16(20997), + 442: uint16(20105), + 443: uint16(21113), + 444: uint16(21136), + 445: uint16(21287), + 446: uint16(13767), + 447: uint16(21417), + 448: uint16(13649), + 449: uint16(21424), + 450: uint16(13651), + 451: uint16(21442), + 452: uint16(21539), + 453: uint16(13677), + 454: uint16(13682), + 455: uint16(13953), + 456: uint16(21651), + 457: uint16(21667), + 458: uint16(21684), + 459: uint16(21689), + 460: uint16(21712), + 461: uint16(21743), + 462: uint16(21784), + 463: uint16(21795), + 464: uint16(21800), + 465: uint16(13720), + 466: uint16(21823), + 467: uint16(13733), + 468: uint16(13759), + 469: uint16(21975), + 470: uint16(13765), + 471: uint16(32132), + 472: uint16(21797), + 474: uint16(3138), + 475: uint16(3349), + 476: uint16(20779), + 477: uint16(21904), + 478: uint16(11462), + 479: uint16(14828), + 480: uint16(833), + 481: uint16(36422), + 482: uint16(19896), + 483: uint16(38117), + 484: uint16(16467), + 485: uint16(32958), + 486: uint16(30586), + 487: uint16(11320), + 488: uint16(14900), + 489: uint16(18389), + 490: uint16(33117), + 491: uint16(27122), + 492: uint16(19946), + 493: uint16(25821), + 494: uint16(3452), + 495: uint16(4020), + 496: uint16(3285), + 497: uint16(4340), + 498: uint16(25741), + 499: uint16(36478), + 500: uint16(3734), + 501: uint16(3083), + 502: uint16(3940), + 503: uint16(11433), + 504: uint16(33366), + 505: uint16(17619), + 507: uint16(3398), + 508: uint16(39501), + 509: uint16(33001), + 510: uint16(18420), + 511: uint16(20135), + 512: uint16(11458), + 513: uint16(39602), + 514: uint16(14951), + 515: uint16(38388), + 516: uint16(16365), + 517: uint16(13574), + 518: uint16(21191), + 519: uint16(38868), + 520: uint16(30920), + 521: uint16(11588), + 522: uint16(40302), + 523: uint16(38933), + 525: uint16(17369), + 526: uint16(24741), + 527: uint16(25780), + 528: uint16(21731), + 529: uint16(11596), + 530: uint16(11210), + 531: uint16(4215), + 532: uint16(14843), + 533: uint16(4207), + 534: uint16(26330), + 535: uint16(26390), + 536: uint16(31136), + 537: uint16(25834), + 538: uint16(20562), + 539: uint16(3139), + 540: uint16(36456), + 541: uint16(8609), + 542: uint16(35660), + 543: uint16(1841), + 545: uint16(18443), + 546: uint16(425), + 547: uint16(16378), + 548: uint16(22643), + 549: uint16(11661), + 551: uint16(17864), + 552: uint16(1276), + 553: uint16(24727), + 554: uint16(3916), + 555: uint16(3478), + 556: uint16(21881), + 557: uint16(16571), + 558: uint16(17338), + 560: uint16(19124), + 561: uint16(10854), + 562: uint16(4253), + 563: uint16(33194), + 564: uint16(39157), + 565: uint16(3484), + 566: uint16(25465), + 567: uint16(14846), + 568: uint16(10101), + 569: uint16(36288), + 570: uint16(22177), + 571: uint16(25724), + 572: uint16(15939), + 574: uint16(42497), + 575: uint16(3593), + 576: uint16(10959), + 577: uint16(11465), + 579: uint16(4296), + 580: uint16(14786), + 581: uint16(14738), + 582: uint16(14854), + 583: uint16(33435), + 584: uint16(13688), + 585: uint16(24137), + 586: uint16(8391), + 587: uint16(22098), + 588: uint16(3889), + 589: uint16(11442), + 590: uint16(38688), + 591: uint16(13500), + 592: uint16(27709), + 593: uint16(20027), + 596: uint16(30068), + 597: uint16(11915), + 598: uint16(8712), + 599: uint16(42587), + 600: uint16(36045), + 601: uint16(3706), + 602: uint16(3124), + 603: uint16(26652), + 604: uint16(32659), + 605: uint16(4303), + 606: uint16(10243), + 607: uint16(10553), + 608: uint16(13819), + 609: uint16(20963), + 610: uint16(3724), + 611: uint16(3981), + 612: uint16(3754), + 613: uint16(16275), + 614: uint16(3888), + 615: uint16(3399), + 616: uint16(4431), + 617: uint16(3660), + 619: uint16(3755), + 620: uint16(2985), + 621: uint16(3400), + 622: uint16(4288), + 623: uint16(4413), + 624: uint16(16377), + 625: uint16(9878), + 626: uint16(25650), + 627: uint16(4013), + 628: uint16(13300), + 629: uint16(30265), + 630: uint16(11214), + 631: uint16(3454), + 632: uint16(3455), + 633: uint16(11345), + 634: uint16(11349), + 635: uint16(14872), + 636: uint16(3736), + 637: uint16(4295), + 638: uint16(3886), + 639: uint16(42546), + 640: uint16(27472), + 641: uint16(36050), + 642: uint16(36249), + 643: uint16(36042), + 644: uint16(38314), + 645: uint16(21708), + 646: uint16(33476), + 647: uint16(21945), + 649: uint16(40643), + 650: uint16(39974), + 651: uint16(39606), + 652: uint16(30558), + 653: uint16(11758), + 654: uint16(28992), + 655: uint16(33133), + 656: uint16(33004), + 657: uint16(23580), + 658: uint16(25970), + 659: uint16(33076), + 660: uint16(14231), + 661: uint16(21343), + 662: uint16(32957), + 663: uint16(37302), + 664: uint16(3834), + 665: uint16(3599), + 666: uint16(3703), + 667: uint16(3835), + 668: uint16(13789), + 669: uint16(19947), + 670: uint16(13833), + 671: uint16(3286), + 672: uint16(22191), + 673: uint16(10165), + 674: uint16(4297), + 675: uint16(3600), + 676: uint16(3704), + 677: uint16(4216), + 678: uint16(4424), + 679: uint16(33287), + 680: uint16(5205), + 681: uint16(3705), + 682: uint16(20048), + 683: uint16(11684), + 684: uint16(23124), + 685: uint16(4125), + 686: uint16(4126), + 687: uint16(4341), + 688: uint16(4342), + 689: uint16(22428), + 690: uint16(3601), + 691: uint16(30356), + 692: uint16(33485), + 693: uint16(4021), + 694: uint16(3707), + 695: uint16(20862), + 696: uint16(14083), + 697: uint16(4022), + 698: uint16(4480), + 699: uint16(21208), + 700: uint16(41661), + 701: uint16(18906), + 702: uint16(6202), + 703: uint16(16759), + 704: uint16(33404), + 705: uint16(22681), + 706: uint16(21096), + 707: uint16(13850), + 708: uint16(22333), + 709: uint16(31666), + 710: uint16(23400), + 711: uint16(18432), + 712: uint16(19244), + 713: uint16(40743), + 714: uint16(18919), + 715: uint16(39967), + 716: uint16(39821), + 717: uint16(23412), + 718: uint16(12605), + 719: uint16(22011), + 720: uint16(13810), + 721: uint16(22153), + 722: uint16(20008), + 723: uint16(22786), + 724: uint16(7105), + 725: uint16(63608), + 726: uint16(38737), + 727: uint16(134), + 728: uint16(20059), + 729: uint16(20155), + 730: uint16(13630), + 731: uint16(23587), + 732: uint16(24401), + 733: uint16(24516), + 734: uint16(14586), + 735: uint16(25164), + 736: uint16(25909), + 737: uint16(27514), + 738: uint16(27701), + 739: uint16(27706), + 740: uint16(28780), + 741: uint16(29227), + 742: uint16(20012), + 743: uint16(29357), + 744: uint16(18665), + 745: uint16(32594), + 746: uint16(31035), + 747: uint16(31993), + 748: uint16(32595), + 749: uint16(25194), + 750: uint16(13505), + 752: uint16(25419), + 753: uint16(32770), + 754: uint16(32896), + 755: uint16(26130), + 756: uint16(26961), + 757: uint16(21341), + 758: uint16(34916), + 759: uint16(35265), + 760: uint16(30898), + 761: uint16(35744), + 762: uint16(36125), + 763: uint16(38021), + 764: uint16(38264), + 765: uint16(38271), + 766: uint16(38376), + 767: uint16(36367), + 768: uint16(38886), + 769: uint16(39029), + 770: uint16(39118), + 771: uint16(39134), + 772: uint16(39267), + 773: uint16(38928), + 774: uint16(40060), + 775: uint16(40479), + 776: uint16(40644), + 777: uint16(27503), + 778: uint16(63751), + 779: uint16(20023), + 780: uint16(135), + 781: uint16(38429), + 782: uint16(25143), + 783: uint16(38050), + 785: uint16(20539), + 786: uint16(28158), + 787: uint16(40051), + 788: uint16(40870), + 789: uint16(15817), + 790: uint16(34959), + 791: uint16(16718), + 792: uint16(28791), + 793: uint16(23797), + 794: uint16(19232), + 795: uint16(20941), + 796: uint16(13657), + 797: uint16(23856), + 798: uint16(24866), + 799: uint16(35378), + 800: uint16(36775), + 801: uint16(37366), + 802: uint16(29073), + 803: uint16(26393), + 804: uint16(29626), + 805: uint16(12929), + 806: uint16(41223), + 807: uint16(15499), + 808: uint16(6528), + 809: uint16(19216), + 810: uint16(30948), + 811: uint16(29698), + 812: uint16(20910), + 813: uint16(34575), + 814: uint16(16393), + 815: uint16(27235), + 816: uint16(41658), + 817: uint16(16931), + 818: uint16(34319), + 819: uint16(2671), + 820: uint16(31274), + 821: uint16(39239), + 822: uint16(35562), + 823: uint16(38741), + 824: uint16(28749), + 825: uint16(21284), + 826: uint16(8318), + 827: uint16(37876), + 828: uint16(30425), + 829: uint16(35299), + 830: uint16(40871), + 831: uint16(30685), + 832: uint16(20131), + 833: uint16(20464), + 834: uint16(20668), + 835: uint16(20015), + 836: uint16(20247), + 837: uint16(40872), + 838: uint16(21556), + 839: uint16(32139), + 840: uint16(22674), + 841: uint16(22736), + 842: uint16(7606), + 843: uint16(24210), + 844: uint16(24217), + 845: uint16(24514), + 846: uint16(10002), + 847: uint16(25995), + 848: uint16(13305), + 849: uint16(26905), + 850: uint16(27203), + 851: uint16(15459), + 852: uint16(27903), + 854: uint16(29184), + 855: uint16(17669), + 856: uint16(29580), + 857: uint16(16091), + 858: uint16(18963), + 859: uint16(23317), + 860: uint16(29881), + 861: uint16(35715), + 862: uint16(23716), + 863: uint16(22165), + 864: uint16(31379), + 865: uint16(31724), + 866: uint16(31939), + 867: uint16(32364), + 868: uint16(33528), + 869: uint16(34199), + 870: uint16(40873), + 871: uint16(34960), + 872: uint16(40874), + 873: uint16(36537), + 874: uint16(40875), + 875: uint16(36815), + 876: uint16(34143), + 877: uint16(39392), + 878: uint16(37409), + 879: uint16(40876), + 880: uint16(36281), + 881: uint16(5183), + 882: uint16(16497), + 883: uint16(17058), + 884: uint16(23066), + 888: uint16(39016), + 889: uint16(26475), + 890: uint16(17014), + 891: uint16(22333), + 893: uint16(34262), + 894: uint16(18811), + 895: uint16(33471), + 896: uint16(28941), + 897: uint16(19585), + 898: uint16(28020), + 899: uint16(23931), + 900: uint16(27413), + 901: uint16(28606), + 902: uint16(40877), + 903: uint16(40878), + 904: uint16(23446), + 905: uint16(40879), + 906: uint16(26343), + 907: uint16(32347), + 908: uint16(28247), + 909: uint16(31178), + 910: uint16(15752), + 911: uint16(17603), + 912: uint16(12886), + 913: uint16(10134), + 914: uint16(17306), + 915: uint16(17718), + 917: uint16(23765), + 918: uint16(15130), + 919: uint16(35577), + 920: uint16(23672), + 921: uint16(15634), + 922: uint16(13649), + 923: uint16(23928), + 924: uint16(40882), + 925: uint16(29015), + 926: uint16(17752), + 927: uint16(16620), + 928: uint16(7715), + 929: uint16(19575), + 930: uint16(14712), + 931: uint16(13386), + 932: uint16(420), + 933: uint16(27713), + 934: uint16(35532), + 935: uint16(20404), + 936: uint16(569), + 937: uint16(22975), + 938: uint16(33132), + 939: uint16(38998), + 940: uint16(39162), + 941: uint16(24379), + 942: uint16(2975), + 944: uint16(8641), + 945: uint16(35181), + 946: uint16(16642), + 947: uint16(18107), + 948: uint16(36985), + 949: uint16(16135), + 950: uint16(40883), + 951: uint16(41397), + 952: uint16(16632), + 953: uint16(14294), + 954: uint16(18167), + 955: uint16(27718), + 956: uint16(16764), + 957: uint16(34482), + 958: uint16(29695), + 959: uint16(17773), + 960: uint16(14548), + 961: uint16(21658), + 962: uint16(17761), + 963: uint16(17691), + 964: uint16(19849), + 965: uint16(19579), + 966: uint16(19830), + 967: uint16(17898), + 968: uint16(16328), + 969: uint16(19215), + 970: uint16(13921), + 971: uint16(17630), + 972: uint16(17597), + 973: uint16(16877), + 974: uint16(23870), + 975: uint16(23880), + 976: uint16(23894), + 977: uint16(15868), + 978: uint16(14351), + 979: uint16(23972), + 980: uint16(23993), + 981: uint16(14368), + 982: uint16(14392), + 983: uint16(24130), + 984: uint16(24253), + 985: uint16(24357), + 986: uint16(24451), + 987: uint16(14600), + 988: uint16(14612), + 989: uint16(14655), + 990: uint16(14669), + 991: uint16(24791), + 992: uint16(24893), + 993: uint16(23781), + 994: uint16(14729), + 995: uint16(25015), + 996: uint16(25017), + 997: uint16(25039), + 998: uint16(14776), + 999: uint16(25132), + 1000: uint16(25232), + 1001: uint16(25317), + 1002: uint16(25368), + 1003: uint16(14840), + 1004: uint16(22193), + 1005: uint16(14851), + 1006: uint16(25570), + 1007: uint16(25595), + 1008: uint16(25607), + 1009: uint16(25690), + 1010: uint16(14923), + 1011: uint16(25792), + 1012: uint16(23829), + 1013: uint16(22049), + 1014: uint16(40863), + 1015: uint16(14999), + 1016: uint16(25990), + 1017: uint16(15037), + 1018: uint16(26111), + 1019: uint16(26195), + 1020: uint16(15090), + 1021: uint16(26258), + 1022: uint16(15138), + 1023: uint16(26390), + 1024: uint16(15170), + 1025: uint16(26532), + 1026: uint16(26624), + 1027: uint16(15192), + 1028: uint16(26698), + 1029: uint16(26756), + 1030: uint16(15218), + 1031: uint16(15217), + 1032: uint16(15227), + 1033: uint16(26889), + 1034: uint16(26947), + 1035: uint16(29276), + 1036: uint16(26980), + 1037: uint16(27039), + 1038: uint16(27013), + 1039: uint16(15292), + 1040: uint16(27094), + 1041: uint16(15325), + 1042: uint16(27237), + 1043: uint16(27252), + 1044: uint16(27249), + 1045: uint16(27266), + 1046: uint16(15340), + 1047: uint16(27289), + 1048: uint16(15346), + 1049: uint16(27307), + 1050: uint16(27317), + 1051: uint16(27348), + 1052: uint16(27382), + 1053: uint16(27521), + 1054: uint16(27585), + 1055: uint16(27626), + 1056: uint16(27765), + 1057: uint16(27818), + 1058: uint16(15563), + 1059: uint16(27906), + 1060: uint16(27910), + 1061: uint16(27942), + 1062: uint16(28033), + 1063: uint16(15599), + 1064: uint16(28068), + 1065: uint16(28081), + 1066: uint16(28181), + 1067: uint16(28184), + 1068: uint16(28201), + 1069: uint16(28294), + 1070: uint16(35264), + 1071: uint16(28347), + 1072: uint16(28386), + 1073: uint16(28378), + 1074: uint16(40831), + 1075: uint16(28392), + 1076: uint16(28393), + 1077: uint16(28452), + 1078: uint16(28468), + 1079: uint16(15686), + 1080: uint16(16193), + 1081: uint16(28545), + 1082: uint16(28606), + 1083: uint16(15722), + 1084: uint16(15733), + 1085: uint16(29111), + 1086: uint16(23705), + 1087: uint16(15754), + 1088: uint16(28716), + 1089: uint16(15761), + 1090: uint16(28752), + 1091: uint16(28756), + 1092: uint16(28783), + 1093: uint16(28799), + 1094: uint16(28809), + 1095: uint16(805), + 1096: uint16(17345), + 1097: uint16(13809), + 1098: uint16(3800), + 1099: uint16(16087), + 1100: uint16(22462), + 1101: uint16(28371), + 1102: uint16(28990), + 1103: uint16(22496), + 1104: uint16(13902), + 1105: uint16(27042), + 1106: uint16(35817), + 1107: uint16(23412), + 1108: uint16(31305), + 1109: uint16(22753), + 1110: uint16(38105), + 1111: uint16(31333), + 1112: uint16(31357), + 1113: uint16(22956), + 1114: uint16(31419), + 1115: uint16(31408), + 1116: uint16(31426), + 1117: uint16(31427), + 1118: uint16(29137), + 1119: uint16(25741), + 1120: uint16(16842), + 1121: uint16(31450), + 1122: uint16(31453), + 1123: uint16(31466), + 1124: uint16(16879), + 1125: uint16(21682), + 1126: uint16(23553), + 1127: uint16(31499), + 1128: uint16(31573), + 1129: uint16(31529), + 1130: uint16(21262), + 1131: uint16(23806), + 1132: uint16(31650), + 1133: uint16(31599), + 1134: uint16(33692), + 1135: uint16(23476), + 1136: uint16(27775), + 1137: uint16(31696), + 1138: uint16(33825), + 1139: uint16(31634), + 1141: uint16(23840), + 1142: uint16(15789), + 1143: uint16(23653), + 1144: uint16(33938), + 1145: uint16(31738), + 1147: uint16(31797), + 1148: uint16(23745), + 1149: uint16(31812), + 1150: uint16(31875), + 1151: uint16(18562), + 1152: uint16(31910), + 1153: uint16(26237), + 1154: uint16(17784), + 1155: uint16(31945), + 1156: uint16(31943), + 1157: uint16(31974), + 1158: uint16(31860), + 1159: uint16(31987), + 1160: uint16(31989), + 1162: uint16(32359), + 1163: uint16(17693), + 1164: uint16(28228), + 1165: uint16(32093), + 1166: uint16(28374), + 1167: uint16(29837), + 1168: uint16(32137), + 1169: uint16(32171), + 1170: uint16(28981), + 1171: uint16(32179), + 1173: uint16(16471), + 1174: uint16(24617), + 1175: uint16(32228), + 1176: uint16(15635), + 1177: uint16(32245), + 1178: uint16(6137), + 1179: uint16(32229), + 1180: uint16(33645), + 1182: uint16(24865), + 1183: uint16(24922), + 1184: uint16(32366), + 1185: uint16(32402), + 1186: uint16(17195), + 1187: uint16(37996), + 1188: uint16(32295), + 1189: uint16(32576), + 1190: uint16(32577), + 1191: uint16(32583), + 1192: uint16(31030), + 1193: uint16(25296), + 1194: uint16(39393), + 1195: uint16(32663), + 1196: uint16(25425), + 1197: uint16(32675), + 1198: uint16(5729), + 1199: uint16(104), + 1200: uint16(17756), + 1201: uint16(14182), + 1202: uint16(17667), + 1203: uint16(33594), + 1204: uint16(32762), + 1205: uint16(25737), + 1207: uint16(32776), + 1208: uint16(32797), + 1210: uint16(32815), + 1211: uint16(41095), + 1212: uint16(27843), + 1213: uint16(32827), + 1214: uint16(32828), + 1215: uint16(32865), + 1216: uint16(10004), + 1217: uint16(18825), + 1218: uint16(26150), + 1219: uint16(15843), + 1220: uint16(26344), + 1221: uint16(26405), + 1222: uint16(32935), + 1223: uint16(35400), + 1224: uint16(33031), + 1225: uint16(33050), + 1226: uint16(22704), + 1227: uint16(9974), + 1228: uint16(27775), + 1229: uint16(25752), + 1230: uint16(20408), + 1231: uint16(25831), + 1232: uint16(5258), + 1233: uint16(33304), + 1234: uint16(6238), + 1235: uint16(27219), + 1236: uint16(19045), + 1237: uint16(19093), + 1238: uint16(17530), + 1239: uint16(33321), + 1240: uint16(2829), + 1241: uint16(27218), + 1242: uint16(15742), + 1243: uint16(20473), + 1244: uint16(5373), + 1245: uint16(34018), + 1246: uint16(33634), + 1247: uint16(27402), + 1248: uint16(18855), + 1249: uint16(13616), + 1250: uint16(6003), + 1251: uint16(15864), + 1252: uint16(33450), + 1253: uint16(26907), + 1254: uint16(63892), + 1255: uint16(16859), + 1256: uint16(34123), + 1257: uint16(33488), + 1258: uint16(33562), + 1259: uint16(3606), + 1260: uint16(6068), + 1261: uint16(14017), + 1262: uint16(12669), + 1263: uint16(13658), + 1264: uint16(33403), + 1265: uint16(33506), + 1266: uint16(33560), + 1267: uint16(16011), + 1268: uint16(28067), + 1269: uint16(27397), + 1270: uint16(27543), + 1271: uint16(13774), + 1272: uint16(15807), + 1273: uint16(33565), + 1274: uint16(21996), + 1275: uint16(33669), + 1276: uint16(17675), + 1277: uint16(28069), + 1278: uint16(33708), + 1280: uint16(33747), + 1281: uint16(13438), + 1282: uint16(28372), + 1283: uint16(27223), + 1284: uint16(34138), + 1285: uint16(13462), + 1286: uint16(28226), + 1287: uint16(12015), + 1288: uint16(33880), + 1289: uint16(23524), + 1290: uint16(33905), + 1291: uint16(15827), + 1292: uint16(17636), + 1293: uint16(27303), + 1294: uint16(33866), + 1295: uint16(15541), + 1296: uint16(31064), + 1298: uint16(27542), + 1299: uint16(28279), + 1300: uint16(28227), + 1301: uint16(34014), + 1303: uint16(33681), + 1304: uint16(17568), + 1305: uint16(33939), + 1306: uint16(34020), + 1307: uint16(23697), + 1308: uint16(16960), + 1309: uint16(23744), + 1310: uint16(17731), + 1311: uint16(34100), + 1312: uint16(23282), + 1313: uint16(28313), + 1314: uint16(17703), + 1315: uint16(34163), + 1316: uint16(17686), + 1317: uint16(26559), + 1318: uint16(34326), + 1319: uint16(34341), + 1320: uint16(34363), + 1321: uint16(34241), + 1322: uint16(28808), + 1323: uint16(34306), + 1324: uint16(5506), + 1325: uint16(28877), + 1326: uint16(63922), + 1327: uint16(17770), + 1328: uint16(34344), + 1329: uint16(13896), + 1330: uint16(6306), + 1331: uint16(21495), + 1332: uint16(29594), + 1333: uint16(34430), + 1334: uint16(34673), + 1335: uint16(41208), + 1336: uint16(34798), + 1337: uint16(11303), + 1338: uint16(34737), + 1339: uint16(34778), + 1340: uint16(34831), + 1341: uint16(22113), + 1342: uint16(34412), + 1343: uint16(26710), + 1344: uint16(17935), + 1345: uint16(34885), + 1346: uint16(34886), + 1347: uint16(30176), + 1348: uint16(15801), + 1349: uint16(30180), + 1350: uint16(34910), + 1351: uint16(34972), + 1352: uint16(18011), + 1353: uint16(34996), + 1354: uint16(34997), + 1355: uint16(25537), + 1356: uint16(35013), + 1357: uint16(30583), + 1358: uint16(30479), + 1359: uint16(35207), + 1360: uint16(35210), + 1363: uint16(35239), + 1364: uint16(35260), + 1365: uint16(35365), + 1366: uint16(35303), + 1367: uint16(31012), + 1368: uint16(31421), + 1369: uint16(35484), + 1370: uint16(30611), + 1371: uint16(37374), + 1372: uint16(35472), + 1373: uint16(31321), + 1374: uint16(31465), + 1375: uint16(31546), + 1376: uint16(16271), + 1377: uint16(18195), + 1378: uint16(31544), + 1379: uint16(29052), + 1380: uint16(35596), + 1381: uint16(35615), + 1382: uint16(21552), + 1383: uint16(21861), + 1384: uint16(35647), + 1385: uint16(35660), + 1386: uint16(35661), + 1387: uint16(35497), + 1388: uint16(19066), + 1389: uint16(35728), + 1390: uint16(35739), + 1391: uint16(35503), + 1392: uint16(5855), + 1393: uint16(17941), + 1394: uint16(34895), + 1395: uint16(35995), + 1396: uint16(32084), + 1397: uint16(32143), + 1398: uint16(63956), + 1399: uint16(14117), + 1400: uint16(32083), + 1401: uint16(36054), + 1402: uint16(32152), + 1403: uint16(32189), + 1404: uint16(36114), + 1405: uint16(36099), + 1406: uint16(6416), + 1407: uint16(36059), + 1408: uint16(28764), + 1409: uint16(36113), + 1410: uint16(19657), + 1411: uint16(16080), + 1413: uint16(36265), + 1414: uint16(32770), + 1415: uint16(4116), + 1416: uint16(18826), + 1417: uint16(15228), + 1418: uint16(33212), + 1419: uint16(28940), + 1420: uint16(31463), + 1421: uint16(36525), + 1422: uint16(36534), + 1423: uint16(36547), + 1424: uint16(37588), + 1425: uint16(36633), + 1426: uint16(36653), + 1427: uint16(33637), + 1428: uint16(33810), + 1429: uint16(36773), + 1430: uint16(37635), + 1431: uint16(41631), + 1432: uint16(2640), + 1433: uint16(36787), + 1434: uint16(18730), + 1435: uint16(35294), + 1436: uint16(34109), + 1437: uint16(15803), + 1438: uint16(24312), + 1439: uint16(12898), + 1440: uint16(36857), + 1441: uint16(40980), + 1442: uint16(34492), + 1443: uint16(34049), + 1444: uint16(8997), + 1445: uint16(14720), + 1446: uint16(28375), + 1447: uint16(36919), + 1448: uint16(34108), + 1449: uint16(31422), + 1450: uint16(36961), + 1451: uint16(34156), + 1452: uint16(34315), + 1453: uint16(37032), + 1454: uint16(34579), + 1455: uint16(37060), + 1456: uint16(34534), + 1457: uint16(37038), + 1459: uint16(37223), + 1460: uint16(15088), + 1461: uint16(37289), + 1462: uint16(37316), + 1463: uint16(31916), + 1464: uint16(35123), + 1465: uint16(7817), + 1466: uint16(37390), + 1467: uint16(27807), + 1468: uint16(37441), + 1469: uint16(37474), + 1470: uint16(21945), + 1472: uint16(35526), + 1473: uint16(15515), + 1474: uint16(35596), + 1475: uint16(21979), + 1476: uint16(3377), + 1477: uint16(37676), + 1478: uint16(37739), + 1479: uint16(35553), + 1480: uint16(35819), + 1481: uint16(28815), + 1482: uint16(23235), + 1483: uint16(35554), + 1484: uint16(35557), + 1485: uint16(18789), + 1486: uint16(37444), + 1487: uint16(35820), + 1488: uint16(35897), + 1489: uint16(35839), + 1490: uint16(37747), + 1491: uint16(37979), + 1492: uint16(36540), + 1493: uint16(38277), + 1494: uint16(38310), + 1495: uint16(37926), + 1496: uint16(38304), + 1497: uint16(28662), + 1498: uint16(17081), + 1499: uint16(9850), + 1500: uint16(34520), + 1501: uint16(4732), + 1502: uint16(15918), + 1503: uint16(18911), + 1504: uint16(27676), + 1505: uint16(38523), + 1506: uint16(38550), + 1507: uint16(16748), + 1508: uint16(38563), + 1509: uint16(28373), + 1510: uint16(25050), + 1511: uint16(38582), + 1512: uint16(30965), + 1513: uint16(35552), + 1514: uint16(38589), + 1515: uint16(21452), + 1516: uint16(18849), + 1517: uint16(27832), + 1518: uint16(628), + 1519: uint16(25616), + 1520: uint16(37039), + 1521: uint16(37093), + 1522: uint16(19153), + 1523: uint16(6421), + 1524: uint16(13066), + 1525: uint16(38705), + 1526: uint16(34370), + 1527: uint16(38710), + 1528: uint16(18959), + 1529: uint16(17725), + 1530: uint16(17797), + 1531: uint16(19177), + 1532: uint16(28789), + 1533: uint16(23361), + 1534: uint16(38683), + 1536: uint16(37333), + 1537: uint16(38743), + 1538: uint16(23370), + 1539: uint16(37355), + 1540: uint16(38751), + 1541: uint16(37925), + 1542: uint16(20688), + 1543: uint16(12471), + 1544: uint16(12476), + 1545: uint16(38793), + 1546: uint16(38815), + 1547: uint16(38833), + 1548: uint16(38846), + 1549: uint16(38848), + 1550: uint16(38866), + 1551: uint16(38880), + 1552: uint16(21612), + 1553: uint16(38894), + 1554: uint16(29724), + 1555: uint16(37939), + 1557: uint16(38901), + 1558: uint16(37917), + 1559: uint16(31098), + 1560: uint16(19153), + 1561: uint16(38964), + 1562: uint16(38963), + 1563: uint16(38987), + 1564: uint16(39014), + 1565: uint16(15118), + 1566: uint16(29045), + 1567: uint16(15697), + 1568: uint16(1584), + 1569: uint16(16732), + 1570: uint16(22278), + 1571: uint16(39114), + 1572: uint16(39095), + 1573: uint16(39112), + 1574: uint16(39111), + 1575: uint16(19199), + 1576: uint16(27943), + 1577: uint16(5843), + 1578: uint16(21936), + 1579: uint16(39137), + 1580: uint16(39142), + 1581: uint16(39148), + 1582: uint16(37752), + 1583: uint16(39225), + 1584: uint16(18985), + 1585: uint16(19314), + 1586: uint16(38999), + 1587: uint16(39173), + 1588: uint16(39413), + 1589: uint16(39436), + 1590: uint16(39483), + 1591: uint16(39440), + 1592: uint16(39512), + 1593: uint16(22309), + 1594: uint16(14020), + 1595: uint16(37041), + 1596: uint16(39893), + 1597: uint16(39648), + 1598: uint16(39650), + 1599: uint16(39685), + 1600: uint16(39668), + 1601: uint16(19470), + 1602: uint16(39700), + 1603: uint16(39725), + 1604: uint16(34304), + 1605: uint16(20532), + 1606: uint16(39732), + 1607: uint16(27048), + 1608: uint16(14531), + 1609: uint16(12413), + 1610: uint16(39760), + 1611: uint16(39744), + 1612: uint16(40254), + 1613: uint16(23109), + 1614: uint16(6243), + 1615: uint16(39822), + 1616: uint16(16971), + 1617: uint16(39938), + 1618: uint16(39935), + 1619: uint16(39948), + 1620: uint16(40552), + 1621: uint16(40404), + 1622: uint16(40887), + 1623: uint16(41362), + 1624: uint16(41387), + 1625: uint16(41185), + 1626: uint16(41251), + 1627: uint16(41439), + 1628: uint16(40318), + 1629: uint16(40323), + 1630: uint16(41268), + 1631: uint16(40462), + 1632: uint16(26760), + 1633: uint16(40388), + 1634: uint16(8539), + 1635: uint16(41363), + 1636: uint16(41504), + 1637: uint16(6459), + 1638: uint16(41523), + 1639: uint16(40249), + 1640: uint16(41145), + 1641: uint16(41652), + 1642: uint16(40592), + 1643: uint16(40597), + 1644: uint16(40606), + 1645: uint16(40610), + 1646: uint16(19764), + 1647: uint16(40618), + 1648: uint16(40623), + 1649: uint16(17252), + 1650: uint16(40641), + 1651: uint16(15200), + 1652: uint16(14821), + 1653: uint16(15645), + 1654: uint16(20274), + 1655: uint16(14270), + 1656: uint16(35883), + 1657: uint16(40706), + 1658: uint16(40712), + 1659: uint16(19350), + 1660: uint16(37924), + 1661: uint16(28066), + 1662: uint16(40727), + 1664: uint16(40761), + 1665: uint16(22175), + 1666: uint16(22154), + 1667: uint16(40773), + 1668: uint16(39352), + 1669: uint16(37003), + 1670: uint16(38898), + 1671: uint16(33919), + 1672: uint16(40802), + 1673: uint16(40809), + 1674: uint16(31452), + 1675: uint16(40846), + 1676: uint16(29206), + 1677: uint16(19390), + 1678: uint16(18805), + 1679: uint16(18875), + 1680: uint16(29047), + 1681: uint16(18936), + 1682: uint16(17224), + 1683: uint16(19025), + 1684: uint16(29598), + 1685: uint16(35802), + 1686: uint16(6394), + 1687: uint16(31135), + 1688: uint16(35198), + 1689: uint16(36406), + 1690: uint16(37737), + 1691: uint16(37875), + 1692: uint16(35396), + 1693: uint16(37612), + 1694: uint16(37761), + 1695: uint16(37835), + 1696: uint16(35180), + 1697: uint16(17593), + 1698: uint16(29207), + 1699: uint16(16107), + 1700: uint16(30578), + 1701: uint16(31299), + 1702: uint16(28880), + 1703: uint16(17523), + 1704: uint16(17400), + 1705: uint16(29054), + 1706: uint16(6127), + 1707: uint16(28835), + 1708: uint16(6334), + 1709: uint16(13721), + 1710: uint16(16071), + 1711: uint16(6277), + 1712: uint16(21551), + 1713: uint16(6136), + 1714: uint16(14114), + 1715: uint16(5883), + 1716: uint16(6201), + 1717: uint16(14049), + 1718: uint16(6004), + 1719: uint16(6353), + 1720: uint16(24395), + 1721: uint16(14115), + 1722: uint16(5824), + 1723: uint16(22363), + 1724: uint16(18981), + 1725: uint16(5118), + 1726: uint16(4776), + 1727: uint16(5062), + 1728: uint16(5302), + 1729: uint16(34051), + 1730: uint16(13990), + 1732: uint16(33877), + 1733: uint16(18836), + 1734: uint16(29029), + 1735: uint16(15921), + 1736: uint16(21852), + 1737: uint16(16123), + 1738: uint16(28754), + 1739: uint16(17652), + 1740: uint16(14062), + 1741: uint16(39325), + 1742: uint16(28454), + 1743: uint16(26617), + 1744: uint16(14131), + 1745: uint16(15381), + 1746: uint16(15847), + 1747: uint16(22636), + 1748: uint16(6434), + 1749: uint16(26640), + 1750: uint16(16471), + 1751: uint16(14143), + 1752: uint16(16609), + 1753: uint16(16523), + 1754: uint16(16655), + 1755: uint16(27681), + 1756: uint16(21707), + 1757: uint16(22174), + 1758: uint16(26289), + 1759: uint16(22162), + 1760: uint16(4063), + 1761: uint16(2984), + 1762: uint16(3597), + 1763: uint16(37830), + 1764: uint16(35603), + 1765: uint16(37788), + 1766: uint16(20216), + 1767: uint16(20779), + 1768: uint16(14361), + 1769: uint16(17462), + 1770: uint16(20156), + 1771: uint16(1125), + 1772: uint16(895), + 1773: uint16(20299), + 1774: uint16(20362), + 1775: uint16(22097), + 1776: uint16(23144), + 1777: uint16(427), + 1778: uint16(971), + 1779: uint16(14745), + 1780: uint16(778), + 1781: uint16(1044), + 1782: uint16(13365), + 1783: uint16(20265), + 1784: uint16(704), + 1785: uint16(36531), + 1786: uint16(629), + 1787: uint16(35546), + 1788: uint16(524), + 1789: uint16(20120), + 1790: uint16(20685), + 1791: uint16(20749), + 1792: uint16(20386), + 1793: uint16(20227), + 1794: uint16(18958), + 1795: uint16(16010), + 1796: uint16(20290), + 1797: uint16(20526), + 1798: uint16(20588), + 1799: uint16(20609), + 1800: uint16(20428), + 1801: uint16(20453), + 1802: uint16(20568), + 1803: uint16(20732), + 1808: uint16(28278), + 1809: uint16(13717), + 1810: uint16(15929), + 1811: uint16(16063), + 1812: uint16(28018), + 1813: uint16(6276), + 1814: uint16(16009), + 1815: uint16(20904), + 1816: uint16(20931), + 1817: uint16(1504), + 1818: uint16(17629), + 1819: uint16(1187), + 1820: uint16(1170), + 1821: uint16(1169), + 1822: uint16(36218), + 1823: uint16(35484), + 1824: uint16(1806), + 1825: uint16(21081), + 1826: uint16(21156), + 1827: uint16(2163), + 1828: uint16(21217), + 1830: uint16(18042), + 1831: uint16(29068), + 1832: uint16(17292), + 1833: uint16(3104), + 1834: uint16(18860), + 1835: uint16(4324), + 1836: uint16(27089), + 1837: uint16(3613), + 1839: uint16(16094), + 1840: uint16(29849), + 1841: uint16(29716), + 1842: uint16(29782), + 1843: uint16(29592), + 1844: uint16(19342), + 1845: uint16(19132), + 1846: uint16(16525), + 1847: uint16(21456), + 1848: uint16(13700), + 1849: uint16(29199), + 1850: uint16(16585), + 1851: uint16(21940), + 1852: uint16(837), + 1853: uint16(21709), + 1854: uint16(3014), + 1855: uint16(22301), + 1856: uint16(37469), + 1857: uint16(38644), + 1858: uint16(37734), + 1859: uint16(22493), + 1860: uint16(22413), + 1861: uint16(22399), + 1862: uint16(13886), + 1863: uint16(22731), + 1864: uint16(23193), + 1865: uint16(35398), + 1866: uint16(5882), + 1867: uint16(5999), + 1868: uint16(5904), + 1869: uint16(23084), + 1870: uint16(22968), + 1871: uint16(37519), + 1872: uint16(23166), + 1873: uint16(23247), + 1874: uint16(23058), + 1875: uint16(22854), + 1876: uint16(6643), + 1877: uint16(6241), + 1878: uint16(17045), + 1879: uint16(14069), + 1880: uint16(27909), + 1881: uint16(29763), + 1882: uint16(23073), + 1883: uint16(24195), + 1884: uint16(23169), + 1885: uint16(35799), + 1886: uint16(1043), + 1887: uint16(37856), + 1888: uint16(29836), + 1889: uint16(4867), + 1890: uint16(28933), + 1891: uint16(18802), + 1892: uint16(37896), + 1893: uint16(35323), + 1894: uint16(37821), + 1895: uint16(14240), + 1896: uint16(23582), + 1897: uint16(23710), + 1898: uint16(24158), + 1899: uint16(24136), + 1900: uint16(6550), + 1901: uint16(6524), + 1902: uint16(15086), + 1903: uint16(24269), + 1904: uint16(23375), + 1905: uint16(6403), + 1906: uint16(6404), + 1907: uint16(14081), + 1908: uint16(6304), + 1909: uint16(14045), + 1910: uint16(5886), + 1911: uint16(14035), + 1912: uint16(33066), + 1913: uint16(35399), + 1914: uint16(7610), + 1915: uint16(13426), + 1916: uint16(35240), + 1917: uint16(24332), + 1918: uint16(24334), + 1919: uint16(6439), + 1920: uint16(6059), + 1921: uint16(23147), + 1922: uint16(5947), + 1923: uint16(23364), + 1924: uint16(34324), + 1925: uint16(30205), + 1926: uint16(34912), + 1927: uint16(24702), + 1928: uint16(10336), + 1929: uint16(9771), + 1930: uint16(24539), + 1931: uint16(16056), + 1932: uint16(9647), + 1933: uint16(9662), + 1934: uint16(37000), + 1935: uint16(28531), + 1936: uint16(25024), + 1937: uint16(62), + 1938: uint16(70), + 1939: uint16(9755), + 1940: uint16(24985), + 1941: uint16(24984), + 1942: uint16(24693), + 1943: uint16(11419), + 1944: uint16(11527), + 1945: uint16(18132), + 1946: uint16(37197), + 1947: uint16(25713), + 1948: uint16(18021), + 1949: uint16(11114), + 1950: uint16(14889), + 1951: uint16(11042), + 1952: uint16(13392), + 1953: uint16(39146), + 1954: uint16(11896), + 1955: uint16(25399), + 1956: uint16(42075), + 1957: uint16(25782), + 1958: uint16(25393), + 1959: uint16(25553), + 1960: uint16(18915), + 1961: uint16(11623), + 1962: uint16(25252), + 1963: uint16(11425), + 1964: uint16(25659), + 1965: uint16(25963), + 1966: uint16(26994), + 1967: uint16(15348), + 1968: uint16(12430), + 1969: uint16(12973), + 1970: uint16(18825), + 1971: uint16(12971), + 1972: uint16(21773), + 1973: uint16(13024), + 1974: uint16(6361), + 1975: uint16(37951), + 1976: uint16(26318), + 1977: uint16(12937), + 1978: uint16(12723), + 1979: uint16(15072), + 1980: uint16(16784), + 1981: uint16(21892), + 1982: uint16(35618), + 1983: uint16(21903), + 1984: uint16(5884), + 1985: uint16(21851), + 1986: uint16(21541), + 1987: uint16(30958), + 1988: uint16(12547), + 1989: uint16(6186), + 1990: uint16(12852), + 1991: uint16(13412), + 1992: uint16(12815), + 1993: uint16(12674), + 1994: uint16(17097), + 1995: uint16(26254), + 1996: uint16(27940), + 1997: uint16(26219), + 1998: uint16(19347), + 1999: uint16(26160), + 2000: uint16(30832), + 2001: uint16(7659), + 2002: uint16(26211), + 2003: uint16(13010), + 2004: uint16(13025), + 2005: uint16(26142), + 2006: uint16(22642), + 2007: uint16(14545), + 2008: uint16(14394), + 2009: uint16(14268), + 2010: uint16(15257), + 2011: uint16(14242), + 2012: uint16(13310), + 2013: uint16(29904), + 2014: uint16(15254), + 2015: uint16(26511), + 2016: uint16(17962), + 2017: uint16(26806), + 2018: uint16(26654), + 2019: uint16(15300), + 2020: uint16(27326), + 2021: uint16(14435), + 2022: uint16(14293), + 2023: uint16(17543), + 2024: uint16(27187), + 2025: uint16(27218), + 2026: uint16(27337), + 2027: uint16(27397), + 2028: uint16(6418), + 2029: uint16(25873), + 2030: uint16(26776), + 2031: uint16(27212), + 2032: uint16(15319), + 2033: uint16(27258), + 2034: uint16(27479), + 2035: uint16(16320), + 2036: uint16(15514), + 2037: uint16(37792), + 2038: uint16(37618), + 2039: uint16(35818), + 2040: uint16(35531), + 2041: uint16(37513), + 2042: uint16(32798), + 2043: uint16(35292), + 2044: uint16(37991), + 2045: uint16(28069), + 2046: uint16(28427), + 2047: uint16(18924), + 2049: uint16(16255), + 2050: uint16(15759), + 2051: uint16(28164), + 2052: uint16(16444), + 2053: uint16(23101), + 2054: uint16(28170), + 2055: uint16(22599), + 2056: uint16(27940), + 2057: uint16(30786), + 2058: uint16(28987), + 2059: uint16(17178), + 2060: uint16(17014), + 2061: uint16(28913), + 2062: uint16(29264), + 2063: uint16(29319), + 2064: uint16(29332), + 2065: uint16(18319), + 2066: uint16(18213), + 2067: uint16(20857), + 2068: uint16(19108), + 2069: uint16(1515), + 2070: uint16(29818), + 2071: uint16(16120), + 2072: uint16(13919), + 2073: uint16(19018), + 2074: uint16(18711), + 2075: uint16(24545), + 2076: uint16(16134), + 2077: uint16(16049), + 2078: uint16(19167), + 2079: uint16(35875), + 2080: uint16(16181), + 2081: uint16(24743), + 2082: uint16(16115), + 2083: uint16(29900), + 2084: uint16(29756), + 2085: uint16(37767), + 2086: uint16(29751), + 2087: uint16(17567), + 2088: uint16(28138), + 2089: uint16(17745), + 2090: uint16(30083), + 2091: uint16(16227), + 2092: uint16(19673), + 2093: uint16(19718), + 2094: uint16(16216), + 2095: uint16(30037), + 2096: uint16(30323), + 2097: uint16(42438), + 2098: uint16(15129), + 2099: uint16(29800), + 2100: uint16(35532), + 2101: uint16(18859), + 2102: uint16(18830), + 2103: uint16(15099), + 2104: uint16(15821), + 2105: uint16(19022), + 2106: uint16(16127), + 2107: uint16(18885), + 2108: uint16(18675), + 2109: uint16(37370), + 2110: uint16(22322), + 2111: uint16(37698), + 2112: uint16(35555), + 2113: uint16(6244), + 2114: uint16(20703), + 2115: uint16(21025), + 2116: uint16(20967), + 2117: uint16(30584), + 2118: uint16(12850), + 2119: uint16(30478), + 2120: uint16(30479), + 2121: uint16(30587), + 2122: uint16(18071), + 2123: uint16(14209), + 2124: uint16(14942), + 2125: uint16(18672), + 2126: uint16(29752), + 2127: uint16(29851), + 2128: uint16(16063), + 2129: uint16(19130), + 2130: uint16(19143), + 2131: uint16(16584), + 2132: uint16(19094), + 2133: uint16(25006), + 2134: uint16(37639), + 2135: uint16(21889), + 2136: uint16(30750), + 2137: uint16(30861), + 2138: uint16(30856), + 2139: uint16(30930), + 2140: uint16(29648), + 2141: uint16(31065), + 2142: uint16(30529), + 2143: uint16(22243), + 2144: uint16(16654), + 2146: uint16(33942), + 2147: uint16(31141), + 2148: uint16(27181), + 2149: uint16(16122), + 2150: uint16(31290), + 2151: uint16(31220), + 2152: uint16(16750), + 2153: uint16(5862), + 2154: uint16(16690), + 2155: uint16(37429), + 2156: uint16(31217), + 2157: uint16(3404), + 2158: uint16(18828), + 2159: uint16(665), + 2160: uint16(15802), + 2161: uint16(5998), + 2162: uint16(13719), + 2163: uint16(21867), + 2164: uint16(13680), + 2165: uint16(13994), + 2166: uint16(468), + 2167: uint16(3085), + 2168: uint16(31458), + 2169: uint16(23129), + 2170: uint16(9973), + 2171: uint16(23215), + 2172: uint16(23196), + 2173: uint16(23053), + 2174: uint16(603), + 2175: uint16(30960), + 2176: uint16(23082), + 2177: uint16(23494), + 2178: uint16(31486), + 2179: uint16(16889), + 2180: uint16(31837), + 2181: uint16(31853), + 2182: uint16(16913), + 2183: uint16(23475), + 2184: uint16(24252), + 2185: uint16(24230), + 2186: uint16(31949), + 2187: uint16(18937), + 2188: uint16(6064), + 2189: uint16(31886), + 2190: uint16(31868), + 2191: uint16(31918), + 2192: uint16(27314), + 2193: uint16(32220), + 2194: uint16(32263), + 2195: uint16(32211), + 2196: uint16(32590), + 2197: uint16(25185), + 2198: uint16(24924), + 2199: uint16(31560), + 2200: uint16(32151), + 2201: uint16(24194), + 2202: uint16(17002), + 2203: uint16(27509), + 2204: uint16(2326), + 2205: uint16(26582), + 2206: uint16(78), + 2207: uint16(13775), + 2208: uint16(22468), + 2209: uint16(25618), + 2210: uint16(25592), + 2211: uint16(18786), + 2212: uint16(32733), + 2213: uint16(31527), + 2214: uint16(2092), + 2215: uint16(23273), + 2216: uint16(23875), + 2217: uint16(31500), + 2218: uint16(24078), + 2219: uint16(39398), + 2220: uint16(34373), + 2221: uint16(39523), + 2222: uint16(27164), + 2223: uint16(13375), + 2224: uint16(14818), + 2225: uint16(18935), + 2226: uint16(26029), + 2227: uint16(39455), + 2228: uint16(26016), + 2229: uint16(33920), + 2230: uint16(28967), + 2231: uint16(27857), + 2232: uint16(17642), + 2233: uint16(33079), + 2234: uint16(17410), + 2235: uint16(32966), + 2236: uint16(33033), + 2237: uint16(33090), + 2238: uint16(26548), + 2239: uint16(39107), + 2240: uint16(27202), + 2241: uint16(33378), + 2242: uint16(33381), + 2243: uint16(27217), + 2244: uint16(33875), + 2245: uint16(28071), + 2246: uint16(34320), + 2247: uint16(29211), + 2248: uint16(23174), + 2249: uint16(16767), + 2250: uint16(6208), + 2251: uint16(23339), + 2252: uint16(6305), + 2253: uint16(23268), + 2254: uint16(6360), + 2255: uint16(34464), + 2256: uint16(63932), + 2257: uint16(15759), + 2258: uint16(34861), + 2259: uint16(29730), + 2260: uint16(23042), + 2261: uint16(34926), + 2262: uint16(20293), + 2263: uint16(34951), + 2264: uint16(35007), + 2265: uint16(35046), + 2266: uint16(35173), + 2267: uint16(35149), + 2268: uint16(22147), + 2269: uint16(35156), + 2270: uint16(30597), + 2271: uint16(30596), + 2272: uint16(35829), + 2273: uint16(35801), + 2274: uint16(35740), + 2275: uint16(35321), + 2276: uint16(16045), + 2277: uint16(33955), + 2278: uint16(18165), + 2279: uint16(18127), + 2280: uint16(14322), + 2281: uint16(35389), + 2282: uint16(35356), + 2283: uint16(37960), + 2284: uint16(24397), + 2285: uint16(37419), + 2286: uint16(17028), + 2287: uint16(26068), + 2288: uint16(28969), + 2289: uint16(28868), + 2290: uint16(6213), + 2291: uint16(40301), + 2292: uint16(35999), + 2293: uint16(36073), + 2294: uint16(32220), + 2295: uint16(22938), + 2296: uint16(30659), + 2297: uint16(23024), + 2298: uint16(17262), + 2299: uint16(14036), + 2300: uint16(36394), + 2301: uint16(36519), + 2302: uint16(19465), + 2303: uint16(36656), + 2304: uint16(36682), + 2305: uint16(17140), + 2306: uint16(27736), + 2307: uint16(28603), + 2308: uint16(8993), + 2309: uint16(18587), + 2310: uint16(28537), + 2311: uint16(28299), + 2312: uint16(6106), + 2313: uint16(39913), + 2314: uint16(14005), + 2315: uint16(18735), + 2316: uint16(37051), + 2318: uint16(21873), + 2319: uint16(18694), + 2320: uint16(37307), + 2321: uint16(37892), + 2322: uint16(35403), + 2323: uint16(16482), + 2324: uint16(35580), + 2325: uint16(37927), + 2326: uint16(35869), + 2327: uint16(35899), + 2328: uint16(34021), + 2329: uint16(35371), + 2330: uint16(38297), + 2331: uint16(38311), + 2332: uint16(38295), + 2333: uint16(38294), + 2334: uint16(36148), + 2335: uint16(29765), + 2336: uint16(16066), + 2337: uint16(18687), + 2338: uint16(19010), + 2339: uint16(17386), + 2340: uint16(16103), + 2341: uint16(12837), + 2342: uint16(38543), + 2343: uint16(36583), + 2344: uint16(36454), + 2345: uint16(36453), + 2346: uint16(16076), + 2347: uint16(18925), + 2348: uint16(19064), + 2349: uint16(16366), + 2350: uint16(29714), + 2351: uint16(29803), + 2352: uint16(16124), + 2353: uint16(38721), + 2354: uint16(37040), + 2355: uint16(26695), + 2356: uint16(18973), + 2357: uint16(37011), + 2358: uint16(22495), + 2360: uint16(37736), + 2361: uint16(35209), + 2362: uint16(35878), + 2363: uint16(35631), + 2364: uint16(25534), + 2365: uint16(37562), + 2366: uint16(23313), + 2367: uint16(35689), + 2368: uint16(18748), + 2369: uint16(29689), + 2370: uint16(16923), + 2371: uint16(38811), + 2372: uint16(38769), + 2373: uint16(39224), + 2374: uint16(3878), + 2375: uint16(24001), + 2376: uint16(35781), + 2377: uint16(19122), + 2378: uint16(38943), + 2379: uint16(38106), + 2380: uint16(37622), + 2381: uint16(38359), + 2382: uint16(37349), + 2383: uint16(17600), + 2384: uint16(35664), + 2385: uint16(19047), + 2386: uint16(35684), + 2387: uint16(39132), + 2388: uint16(35397), + 2389: uint16(16128), + 2390: uint16(37418), + 2391: uint16(18725), + 2392: uint16(33812), + 2393: uint16(39227), + 2394: uint16(39245), + 2395: uint16(31494), + 2396: uint16(15869), + 2397: uint16(39323), + 2398: uint16(19311), + 2399: uint16(39338), + 2400: uint16(39516), + 2401: uint16(35685), + 2402: uint16(22728), + 2403: uint16(27279), + 2404: uint16(39457), + 2405: uint16(23294), + 2406: uint16(39471), + 2407: uint16(39153), + 2408: uint16(19344), + 2409: uint16(39240), + 2410: uint16(39356), + 2411: uint16(19389), + 2412: uint16(19351), + 2413: uint16(37757), + 2414: uint16(22642), + 2415: uint16(4866), + 2416: uint16(22562), + 2417: uint16(18872), + 2418: uint16(5352), + 2419: uint16(30788), + 2420: uint16(10015), + 2421: uint16(15800), + 2422: uint16(26821), + 2423: uint16(15741), + 2424: uint16(37976), + 2425: uint16(14631), + 2426: uint16(24912), + 2427: uint16(10113), + 2428: uint16(10603), + 2429: uint16(24839), + 2430: uint16(40015), + 2431: uint16(40019), + 2432: uint16(40059), + 2433: uint16(39989), + 2434: uint16(39952), + 2435: uint16(39807), + 2436: uint16(39887), + 2437: uint16(40493), + 2438: uint16(39839), + 2439: uint16(41461), + 2440: uint16(41214), + 2441: uint16(40225), + 2442: uint16(19630), + 2443: uint16(16644), + 2444: uint16(40472), + 2445: uint16(19632), + 2446: uint16(40204), + 2447: uint16(41396), + 2448: uint16(41197), + 2449: uint16(41203), + 2450: uint16(39215), + 2451: uint16(40357), + 2452: uint16(33981), + 2453: uint16(28178), + 2454: uint16(28639), + 2455: uint16(27522), + 2456: uint16(34300), + 2457: uint16(17715), + 2458: uint16(28068), + 2459: uint16(28292), + 2460: uint16(28144), + 2461: uint16(33824), + 2462: uint16(34286), + 2463: uint16(28160), + 2464: uint16(14295), + 2465: uint16(24676), + 2466: uint16(31202), + 2467: uint16(13724), + 2468: uint16(13888), + 2469: uint16(18733), + 2470: uint16(18910), + 2471: uint16(15714), + 2472: uint16(37851), + 2473: uint16(37566), + 2474: uint16(37704), + 2475: uint16(703), + 2476: uint16(30905), + 2477: uint16(37495), + 2478: uint16(37965), + 2479: uint16(20452), + 2480: uint16(13376), + 2481: uint16(36964), + 2482: uint16(21853), + 2483: uint16(30781), + 2484: uint16(30804), + 2485: uint16(30902), + 2486: uint16(30795), + 2487: uint16(5975), + 2488: uint16(12745), + 2489: uint16(18753), + 2490: uint16(13978), + 2491: uint16(20338), + 2492: uint16(28634), + 2493: uint16(28633), + 2495: uint16(28702), + 2496: uint16(21524), + 2497: uint16(16821), + 2498: uint16(22459), + 2499: uint16(22771), + 2500: uint16(22410), + 2501: uint16(40214), + 2502: uint16(22487), + 2503: uint16(28980), + 2504: uint16(13487), + 2505: uint16(16812), + 2506: uint16(29163), + 2507: uint16(27712), + 2508: uint16(20375), + 2510: uint16(6069), + 2511: uint16(35401), + 2512: uint16(24844), + 2513: uint16(23246), + 2514: uint16(23051), + 2515: uint16(17084), + 2516: uint16(17544), + 2517: uint16(14124), + 2518: uint16(19323), + 2519: uint16(35324), + 2520: uint16(37819), + 2521: uint16(37816), + 2522: uint16(6358), + 2523: uint16(3869), + 2524: uint16(33906), + 2525: uint16(27840), + 2526: uint16(5139), + 2527: uint16(17146), + 2528: uint16(11302), + 2529: uint16(17345), + 2530: uint16(22932), + 2531: uint16(15799), + 2532: uint16(26433), + 2533: uint16(32168), + 2534: uint16(24923), + 2535: uint16(24740), + 2536: uint16(18873), + 2537: uint16(18827), + 2538: uint16(35322), + 2539: uint16(37605), + 2540: uint16(29666), + 2541: uint16(16105), + 2542: uint16(29876), + 2543: uint16(35683), + 2544: uint16(6303), + 2545: uint16(16097), + 2546: uint16(19123), + 2547: uint16(27352), + 2548: uint16(29683), + 2549: uint16(29691), + 2550: uint16(16086), + 2551: uint16(19006), + 2552: uint16(19092), + 2553: uint16(6105), + 2554: uint16(19046), + 2555: uint16(935), + 2556: uint16(5156), + 2557: uint16(18917), + 2558: uint16(29768), + 2559: uint16(18710), + 2560: uint16(28837), + 2561: uint16(18806), + 2562: uint16(37508), + 2563: uint16(29670), + 2564: uint16(37727), + 2565: uint16(1278), + 2566: uint16(37681), + 2567: uint16(35534), + 2568: uint16(35350), + 2569: uint16(37766), + 2570: uint16(35815), + 2571: uint16(21973), + 2572: uint16(18741), + 2573: uint16(35458), + 2574: uint16(29035), + 2575: uint16(18755), + 2576: uint16(3327), + 2577: uint16(22180), + 2578: uint16(1562), + 2579: uint16(3051), + 2580: uint16(3256), + 2581: uint16(21762), + 2582: uint16(31172), + 2583: uint16(6138), + 2584: uint16(32254), + 2585: uint16(5826), + 2586: uint16(19024), + 2587: uint16(6226), + 2588: uint16(17710), + 2589: uint16(37889), + 2590: uint16(14090), + 2591: uint16(35520), + 2592: uint16(18861), + 2593: uint16(22960), + 2594: uint16(6335), + 2595: uint16(6275), + 2596: uint16(29828), + 2597: uint16(23201), + 2598: uint16(14050), + 2599: uint16(15707), + 2600: uint16(14000), + 2601: uint16(37471), + 2602: uint16(23161), + 2603: uint16(35457), + 2604: uint16(6242), + 2605: uint16(37748), + 2606: uint16(15565), + 2607: uint16(2740), + 2608: uint16(19094), + 2609: uint16(14730), + 2610: uint16(20724), + 2611: uint16(15721), + 2612: uint16(15692), + 2613: uint16(5020), + 2614: uint16(29045), + 2615: uint16(17147), + 2616: uint16(33304), + 2617: uint16(28175), + 2618: uint16(37092), + 2619: uint16(17643), + 2620: uint16(27991), + 2621: uint16(32335), + 2622: uint16(28775), + 2623: uint16(27823), + 2624: uint16(15574), + 2625: uint16(16365), + 2626: uint16(15917), + 2627: uint16(28162), + 2628: uint16(28428), + 2629: uint16(15727), + 2630: uint16(1013), + 2631: uint16(30033), + 2632: uint16(14012), + 2633: uint16(13512), + 2634: uint16(18048), + 2635: uint16(16090), + 2636: uint16(18545), + 2637: uint16(22980), + 2638: uint16(37486), + 2639: uint16(18750), + 2640: uint16(36673), + 2641: uint16(35868), + 2642: uint16(27584), + 2643: uint16(22546), + 2644: uint16(22472), + 2645: uint16(14038), + 2646: uint16(5202), + 2647: uint16(28926), + 2648: uint16(17250), + 2649: uint16(19057), + 2650: uint16(12259), + 2651: uint16(4784), + 2652: uint16(9149), + 2653: uint16(26809), + 2654: uint16(26983), + 2655: uint16(5016), + 2656: uint16(13541), + 2657: uint16(31732), + 2658: uint16(14047), + 2659: uint16(35459), + 2660: uint16(14294), + 2661: uint16(13306), + 2662: uint16(19615), + 2663: uint16(27162), + 2664: uint16(13997), + 2665: uint16(27831), + 2666: uint16(33854), + 2667: uint16(17631), + 2668: uint16(17614), + 2669: uint16(27942), + 2670: uint16(27985), + 2671: uint16(27778), + 2672: uint16(28638), + 2673: uint16(28439), + 2674: uint16(28937), + 2675: uint16(33597), + 2676: uint16(5946), + 2677: uint16(33773), + 2678: uint16(27776), + 2679: uint16(28755), + 2680: uint16(6107), + 2681: uint16(22921), + 2682: uint16(23170), + 2683: uint16(6067), + 2684: uint16(23137), + 2685: uint16(23153), + 2686: uint16(6405), + 2687: uint16(16892), + 2688: uint16(14125), + 2689: uint16(23023), + 2690: uint16(5948), + 2691: uint16(14023), + 2692: uint16(29070), + 2693: uint16(37776), + 2694: uint16(26266), + 2695: uint16(17061), + 2696: uint16(23150), + 2697: uint16(23083), + 2698: uint16(17043), + 2699: uint16(27179), + 2700: uint16(16121), + 2701: uint16(30518), + 2702: uint16(17499), + 2703: uint16(17098), + 2704: uint16(28957), + 2705: uint16(16985), + 2706: uint16(35297), + 2707: uint16(20400), + 2708: uint16(27944), + 2709: uint16(23746), + 2710: uint16(17614), + 2711: uint16(32333), + 2712: uint16(17341), + 2713: uint16(27148), + 2714: uint16(16982), + 2715: uint16(4868), + 2716: uint16(28838), + 2717: uint16(28979), + 2718: uint16(17385), + 2719: uint16(15781), + 2720: uint16(27871), + 2721: uint16(63525), + 2722: uint16(19023), + 2723: uint16(32357), + 2724: uint16(23019), + 2725: uint16(23855), + 2726: uint16(15859), + 2727: uint16(24412), + 2728: uint16(19037), + 2729: uint16(6111), + 2730: uint16(32164), + 2731: uint16(33830), + 2732: uint16(21637), + 2733: uint16(15098), + 2734: uint16(13056), + 2735: uint16(532), + 2736: uint16(22398), + 2737: uint16(2261), + 2738: uint16(1561), + 2739: uint16(16357), + 2740: uint16(8094), + 2741: uint16(41654), + 2742: uint16(28675), + 2743: uint16(37211), + 2744: uint16(23920), + 2745: uint16(29583), + 2746: uint16(31955), + 2747: uint16(35417), + 2748: uint16(37920), + 2749: uint16(20424), + 2750: uint16(32743), + 2751: uint16(29389), + 2752: uint16(29456), + 2753: uint16(31476), + 2754: uint16(29496), + 2755: uint16(29497), + 2756: uint16(22262), + 2757: uint16(29505), + 2758: uint16(29512), + 2759: uint16(16041), + 2760: uint16(31512), + 2761: uint16(36972), + 2762: uint16(29173), + 2763: uint16(18674), + 2764: uint16(29665), + 2765: uint16(33270), + 2766: uint16(16074), + 2767: uint16(30476), + 2768: uint16(16081), + 2769: uint16(27810), + 2770: uint16(22269), + 2771: uint16(29721), + 2772: uint16(29726), + 2773: uint16(29727), + 2774: uint16(16098), + 2775: uint16(16112), + 2776: uint16(16116), + 2777: uint16(16122), + 2778: uint16(29907), + 2779: uint16(16142), + 2780: uint16(16211), + 2781: uint16(30018), + 2782: uint16(30061), + 2783: uint16(30066), + 2784: uint16(30093), + 2785: uint16(16252), + 2786: uint16(30152), + 2787: uint16(30172), + 2788: uint16(16320), + 2789: uint16(30285), + 2790: uint16(16343), + 2791: uint16(30324), + 2792: uint16(16348), + 2793: uint16(30330), + 2794: uint16(20316), + 2795: uint16(29064), + 2796: uint16(22051), + 2797: uint16(35200), + 2798: uint16(22633), + 2799: uint16(16413), + 2800: uint16(30531), + 2801: uint16(16441), + 2802: uint16(26465), + 2803: uint16(16453), + 2804: uint16(13787), + 2805: uint16(30616), + 2806: uint16(16490), + 2807: uint16(16495), + 2808: uint16(23646), + 2809: uint16(30654), + 2810: uint16(30667), + 2811: uint16(22770), + 2812: uint16(30744), + 2813: uint16(28857), + 2814: uint16(30748), + 2815: uint16(16552), + 2816: uint16(30777), + 2817: uint16(30791), + 2818: uint16(30801), + 2819: uint16(30822), + 2820: uint16(33864), + 2821: uint16(21813), + 2822: uint16(31027), + 2823: uint16(26627), + 2824: uint16(31026), + 2825: uint16(16643), + 2826: uint16(16649), + 2827: uint16(31121), + 2828: uint16(31129), + 2829: uint16(36795), + 2830: uint16(31238), + 2831: uint16(36796), + 2832: uint16(16743), + 2833: uint16(31377), + 2834: uint16(16818), + 2835: uint16(31420), + 2836: uint16(33401), + 2837: uint16(16836), + 2838: uint16(31439), + 2839: uint16(31451), + 2840: uint16(16847), + 2841: uint16(20001), + 2842: uint16(31586), + 2843: uint16(31596), + 2844: uint16(31611), + 2845: uint16(31762), + 2846: uint16(31771), + 2847: uint16(16992), + 2848: uint16(17018), + 2849: uint16(31867), + 2850: uint16(31900), + 2851: uint16(17036), + 2852: uint16(31928), + 2853: uint16(17044), + 2854: uint16(31981), + 2855: uint16(36755), + 2856: uint16(28864), + 2857: uint16(3279), + 2858: uint16(32207), + 2859: uint16(32212), + 2860: uint16(32208), + 2861: uint16(32253), + 2862: uint16(32686), + 2863: uint16(32692), + 2864: uint16(29343), + 2865: uint16(17303), + 2866: uint16(32800), + 2867: uint16(32805), + 2868: uint16(31545), + 2869: uint16(32814), + 2870: uint16(32817), + 2871: uint16(32852), + 2872: uint16(15820), + 2873: uint16(22452), + 2874: uint16(28832), + 2875: uint16(32951), + 2876: uint16(33001), + 2877: uint16(17389), + 2878: uint16(33036), + 2879: uint16(29482), + 2880: uint16(33038), + 2881: uint16(33042), + 2882: uint16(30048), + 2883: uint16(33044), + 2884: uint16(17409), + 2885: uint16(15161), + 2886: uint16(33110), + 2887: uint16(33113), + 2888: uint16(33114), + 2889: uint16(17427), + 2890: uint16(22586), + 2891: uint16(33148), + 2892: uint16(33156), + 2893: uint16(17445), + 2894: uint16(33171), + 2895: uint16(17453), + 2896: uint16(33189), + 2897: uint16(22511), + 2898: uint16(33217), + 2899: uint16(33252), + 2900: uint16(33364), + 2901: uint16(17551), + 2902: uint16(33446), + 2903: uint16(33398), + 2904: uint16(33482), + 2905: uint16(33496), + 2906: uint16(33535), + 2907: uint16(17584), + 2908: uint16(33623), + 2909: uint16(38505), + 2910: uint16(27018), + 2911: uint16(33797), + 2912: uint16(28917), + 2913: uint16(33892), + 2914: uint16(24803), + 2915: uint16(33928), + 2916: uint16(17668), + 2917: uint16(33982), + 2918: uint16(34017), + 2919: uint16(34040), + 2920: uint16(34064), + 2921: uint16(34104), + 2922: uint16(34130), + 2923: uint16(17723), + 2924: uint16(34159), + 2925: uint16(34160), + 2926: uint16(34272), + 2927: uint16(17783), + 2928: uint16(34418), + 2929: uint16(34450), + 2930: uint16(34482), + 2931: uint16(34543), + 2932: uint16(38469), + 2933: uint16(34699), + 2934: uint16(17926), + 2935: uint16(17943), + 2936: uint16(34990), + 2937: uint16(35071), + 2938: uint16(35108), + 2939: uint16(35143), + 2940: uint16(35217), + 2941: uint16(31079), + 2942: uint16(35369), + 2943: uint16(35384), + 2944: uint16(35476), + 2945: uint16(35508), + 2946: uint16(35921), + 2947: uint16(36052), + 2948: uint16(36082), + 2949: uint16(36124), + 2950: uint16(18328), + 2951: uint16(22623), + 2952: uint16(36291), + 2953: uint16(18413), + 2954: uint16(20206), + 2955: uint16(36410), + 2956: uint16(21976), + 2957: uint16(22356), + 2958: uint16(36465), + 2959: uint16(22005), + 2960: uint16(36528), + 2961: uint16(18487), + 2962: uint16(36558), + 2963: uint16(36578), + 2964: uint16(36580), + 2965: uint16(36589), + 2966: uint16(36594), + 2967: uint16(36791), + 2968: uint16(36801), + 2969: uint16(36810), + 2970: uint16(36812), + 2971: uint16(36915), + 2972: uint16(39364), + 2973: uint16(18605), + 2974: uint16(39136), + 2975: uint16(37395), + 2976: uint16(18718), + 2977: uint16(37416), + 2978: uint16(37464), + 2979: uint16(37483), + 2980: uint16(37553), + 2981: uint16(37550), + 2982: uint16(37567), + 2983: uint16(37603), + 2984: uint16(37611), + 2985: uint16(37619), + 2986: uint16(37620), + 2987: uint16(37629), + 2988: uint16(37699), + 2989: uint16(37764), + 2990: uint16(37805), + 2991: uint16(18757), + 2992: uint16(18769), + 2993: uint16(40639), + 2994: uint16(37911), + 2995: uint16(21249), + 2996: uint16(37917), + 2997: uint16(37933), + 2998: uint16(37950), + 2999: uint16(18794), + 3000: uint16(37972), + 3001: uint16(38009), + 3002: uint16(38189), + 3003: uint16(38306), + 3004: uint16(18855), + 3005: uint16(38388), + 3006: uint16(38451), + 3007: uint16(18917), + 3008: uint16(26528), + 3009: uint16(18980), + 3010: uint16(38720), + 3011: uint16(18997), + 3012: uint16(38834), + 3013: uint16(38850), + 3014: uint16(22100), + 3015: uint16(19172), + 3016: uint16(24808), + 3017: uint16(39097), + 3018: uint16(19225), + 3019: uint16(39153), + 3020: uint16(22596), + 3021: uint16(39182), + 3022: uint16(39193), + 3023: uint16(20916), + 3024: uint16(39196), + 3025: uint16(39223), + 3026: uint16(39234), + 3027: uint16(39261), + 3028: uint16(39266), + 3029: uint16(19312), + 3030: uint16(39365), + 3031: uint16(19357), + 3032: uint16(39484), + 3033: uint16(39695), + 3034: uint16(31363), + 3035: uint16(39785), + 3036: uint16(39809), + 3037: uint16(39901), + 3038: uint16(39921), + 3039: uint16(39924), + 3040: uint16(19565), + 3041: uint16(39968), + 3042: uint16(14191), + 3043: uint16(7106), + 3044: uint16(40265), + 3045: uint16(39994), + 3046: uint16(40702), + 3047: uint16(22096), + 3048: uint16(40339), + 3049: uint16(40381), + 3050: uint16(40384), + 3051: uint16(40444), + 3052: uint16(38134), + 3053: uint16(36790), + 3054: uint16(40571), + 3055: uint16(40620), + 3056: uint16(40625), + 3057: uint16(40637), + 3058: uint16(40646), + 3059: uint16(38108), + 3060: uint16(40674), + 3061: uint16(40689), + 3062: uint16(40696), + 3063: uint16(31432), + 3064: uint16(40772), + 3065: uint16(148), + 3066: uint16(695), + 3067: uint16(928), + 3068: uint16(26906), + 3069: uint16(38083), + 3070: uint16(22956), + 3071: uint16(1239), + 3072: uint16(22592), + 3073: uint16(38081), + 3074: uint16(14265), + 3075: uint16(1493), + 3076: uint16(1557), + 3077: uint16(1654), + 3078: uint16(5818), + 3079: uint16(22359), + 3080: uint16(29043), + 3081: uint16(2754), + 3082: uint16(2765), + 3083: uint16(3007), + 3084: uint16(21610), + 3085: uint16(63547), + 3086: uint16(3019), + 3087: uint16(21662), + 3088: uint16(3067), + 3089: uint16(3131), + 3090: uint16(3155), + 3091: uint16(3173), + 3092: uint16(3196), + 3093: uint16(24807), + 3094: uint16(3213), + 3095: uint16(22138), + 3096: uint16(3253), + 3097: uint16(3293), + 3098: uint16(3309), + 3099: uint16(3439), + 3100: uint16(3506), + 3101: uint16(3528), + 3102: uint16(26965), + 3103: uint16(39983), + 3104: uint16(34725), + 3105: uint16(3588), + 3106: uint16(3598), + 3107: uint16(3799), + 3108: uint16(3984), + 3109: uint16(3885), + 3110: uint16(3699), + 3111: uint16(23584), + 3112: uint16(4028), + 3113: uint16(24075), + 3114: uint16(4188), + 3115: uint16(4175), + 3116: uint16(4214), + 3117: uint16(26398), + 3118: uint16(4219), + 3119: uint16(4232), + 3120: uint16(4246), + 3121: uint16(13895), + 3122: uint16(4287), + 3123: uint16(4307), + 3124: uint16(4399), + 3125: uint16(4411), + 3126: uint16(21348), + 3127: uint16(33965), + 3128: uint16(4835), + 3129: uint16(4981), + 3130: uint16(4918), + 3131: uint16(35713), + 3132: uint16(5495), + 3133: uint16(5657), + 3134: uint16(6083), + 3135: uint16(6087), + 3136: uint16(20088), + 3137: uint16(28859), + 3138: uint16(6189), + 3139: uint16(6506), + 3140: uint16(6701), + 3141: uint16(6725), + 3142: uint16(7210), + 3143: uint16(7280), + 3144: uint16(7340), + 3145: uint16(7880), + 3146: uint16(25283), + 3147: uint16(7893), + 3148: uint16(7957), + 3149: uint16(29080), + 3150: uint16(26709), + 3151: uint16(8261), + 3152: uint16(27113), + 3153: uint16(14024), + 3154: uint16(8828), + 3155: uint16(9175), + 3156: uint16(9210), + 3157: uint16(10026), + 3158: uint16(10353), + 3159: uint16(10575), + 3160: uint16(33533), + 3161: uint16(10599), + 3162: uint16(10643), + 3163: uint16(10965), + 3164: uint16(35237), + 3165: uint16(10984), + 3166: uint16(36768), + 3167: uint16(11022), + 3168: uint16(38840), + 3169: uint16(11071), + 3170: uint16(38983), + 3171: uint16(39613), + 3172: uint16(11340), + 3174: uint16(11400), + 3175: uint16(11447), + 3176: uint16(23528), + 3177: uint16(11528), + 3178: uint16(11538), + 3179: uint16(11703), + 3180: uint16(11669), + 3181: uint16(11842), + 3182: uint16(12148), + 3183: uint16(12236), + 3184: uint16(12339), + 3185: uint16(12390), + 3186: uint16(13087), + 3187: uint16(13278), + 3188: uint16(24497), + 3189: uint16(26184), + 3190: uint16(26303), + 3191: uint16(31353), + 3192: uint16(13671), + 3193: uint16(13811), + 3195: uint16(18874), + 3197: uint16(13850), + 3198: uint16(14102), + 3200: uint16(838), + 3201: uint16(22709), + 3202: uint16(26382), + 3203: uint16(26904), + 3204: uint16(15015), + 3205: uint16(30295), + 3206: uint16(24546), + 3207: uint16(15889), + 3208: uint16(16057), + 3209: uint16(30206), + 3210: uint16(8346), + 3211: uint16(18640), + 3212: uint16(19128), + 3213: uint16(16665), + 3214: uint16(35482), + 3215: uint16(17134), + 3216: uint16(17165), + 3217: uint16(16443), + 3218: uint16(17204), + 3219: uint16(17302), + 3220: uint16(19013), + 3221: uint16(1482), + 3222: uint16(20946), + 3223: uint16(1553), + 3224: uint16(22943), + 3225: uint16(7848), + 3226: uint16(15294), + 3227: uint16(15615), + 3228: uint16(17412), + 3229: uint16(17622), + 3230: uint16(22408), + 3231: uint16(18036), + 3232: uint16(14747), + 3233: uint16(18223), + 3234: uint16(34280), + 3235: uint16(39369), + 3236: uint16(14178), + 3237: uint16(8643), + 3238: uint16(35678), + 3239: uint16(35662), + 3241: uint16(18450), + 3242: uint16(18683), + 3243: uint16(18965), + 3244: uint16(29193), + 3245: uint16(19136), + 3246: uint16(3192), + 3247: uint16(22885), + 3248: uint16(20133), + 3249: uint16(20358), + 3250: uint16(1913), + 3251: uint16(36570), + 3252: uint16(20524), + 3253: uint16(21135), + 3254: uint16(22335), + 3255: uint16(29041), + 3256: uint16(21145), + 3257: uint16(21529), + 3258: uint16(16202), + 3259: uint16(19111), + 3260: uint16(21948), + 3261: uint16(21574), + 3262: uint16(21614), + 3263: uint16(27474), + 3265: uint16(13427), + 3266: uint16(21823), + 3267: uint16(30258), + 3268: uint16(21854), + 3269: uint16(18200), + 3270: uint16(21858), + 3271: uint16(21862), + 3272: uint16(22471), + 3273: uint16(18751), + 3274: uint16(22621), + 3275: uint16(20582), + 3276: uint16(13563), + 3277: uint16(13260), + 3279: uint16(22787), + 3280: uint16(18300), + 3281: uint16(35144), + 3282: uint16(23214), + 3283: uint16(23433), + 3284: uint16(23558), + 3285: uint16(7568), + 3286: uint16(22433), + 3287: uint16(29009), + 3289: uint16(24834), + 3290: uint16(31762), + 3291: uint16(36950), + 3292: uint16(25010), + 3293: uint16(20378), + 3294: uint16(35682), + 3295: uint16(25602), + 3296: uint16(25674), + 3297: uint16(23899), + 3298: uint16(27639), + 3300: uint16(25732), + 3301: uint16(6428), + 3302: uint16(35562), + 3303: uint16(18934), + 3304: uint16(25736), + 3305: uint16(16367), + 3306: uint16(25874), + 3307: uint16(19392), + 3308: uint16(26047), + 3309: uint16(26293), + 3310: uint16(10011), + 3311: uint16(37989), + 3312: uint16(22497), + 3313: uint16(24981), + 3314: uint16(23079), + 3315: uint16(63693), + 3317: uint16(22201), + 3318: uint16(17697), + 3319: uint16(26364), + 3320: uint16(20074), + 3321: uint16(18740), + 3322: uint16(38486), + 3323: uint16(28047), + 3324: uint16(27837), + 3325: uint16(13848), + 3326: uint16(35191), + 3327: uint16(26521), + 3328: uint16(26734), + 3329: uint16(25617), + 3330: uint16(26718), + 3332: uint16(26823), + 3333: uint16(31554), + 3334: uint16(37056), + 3335: uint16(2577), + 3336: uint16(26918), + 3338: uint16(26937), + 3339: uint16(31301), + 3341: uint16(27130), + 3342: uint16(39462), + 3343: uint16(27181), + 3344: uint16(13919), + 3345: uint16(25705), + 3346: uint16(33), + 3347: uint16(31107), + 3348: uint16(27188), + 3349: uint16(27483), + 3350: uint16(23852), + 3351: uint16(13593), + 3353: uint16(27549), + 3354: uint16(18128), + 3355: uint16(27812), + 3356: uint16(30011), + 3357: uint16(34917), + 3358: uint16(28078), + 3359: uint16(22710), + 3360: uint16(14108), + 3361: uint16(9613), + 3362: uint16(28747), + 3363: uint16(29133), + 3364: uint16(15444), + 3365: uint16(29312), + 3366: uint16(29317), + 3367: uint16(37505), + 3368: uint16(8570), + 3369: uint16(29323), + 3370: uint16(37680), + 3371: uint16(29414), + 3372: uint16(18896), + 3373: uint16(27705), + 3374: uint16(38047), + 3375: uint16(29776), + 3376: uint16(3832), + 3377: uint16(34855), + 3378: uint16(35061), + 3379: uint16(10534), + 3380: uint16(33907), + 3381: uint16(6065), + 3382: uint16(28344), + 3383: uint16(18986), + 3384: uint16(6176), + 3385: uint16(14756), + 3386: uint16(14009), + 3389: uint16(17727), + 3390: uint16(26294), + 3391: uint16(40109), + 3392: uint16(39076), + 3393: uint16(35139), + 3394: uint16(30668), + 3395: uint16(30808), + 3396: uint16(22230), + 3397: uint16(16607), + 3398: uint16(5642), + 3399: uint16(14753), + 3400: uint16(14127), + 3401: uint16(33000), + 3402: uint16(5061), + 3403: uint16(29101), + 3404: uint16(33638), + 3405: uint16(31197), + 3406: uint16(37288), + 3408: uint16(19639), + 3409: uint16(28847), + 3410: uint16(35243), + 3411: uint16(31229), + 3412: uint16(31242), + 3413: uint16(31499), + 3414: uint16(32102), + 3415: uint16(16762), + 3416: uint16(31555), + 3417: uint16(31102), + 3418: uint16(32777), + 3419: uint16(28597), + 3420: uint16(41695), + 3421: uint16(27139), + 3422: uint16(33560), + 3423: uint16(21410), + 3424: uint16(28167), + 3425: uint16(37823), + 3426: uint16(26678), + 3427: uint16(38749), + 3428: uint16(33135), + 3429: uint16(32803), + 3430: uint16(27061), + 3431: uint16(5101), + 3432: uint16(12847), + 3433: uint16(32840), + 3434: uint16(23941), + 3435: uint16(35888), + 3436: uint16(32899), + 3437: uint16(22293), + 3438: uint16(38947), + 3439: uint16(35145), + 3440: uint16(23979), + 3441: uint16(18824), + 3442: uint16(26046), + 3443: uint16(27093), + 3444: uint16(21458), + 3445: uint16(19109), + 3446: uint16(16257), + 3447: uint16(15377), + 3448: uint16(26422), + 3449: uint16(32912), + 3450: uint16(33012), + 3451: uint16(33070), + 3452: uint16(8097), + 3453: uint16(33103), + 3454: uint16(33161), + 3455: uint16(33199), + 3456: uint16(33306), + 3457: uint16(33542), + 3458: uint16(33583), + 3459: uint16(33674), + 3460: uint16(13770), + 3461: uint16(33896), + 3462: uint16(34474), + 3463: uint16(18682), + 3464: uint16(25574), + 3465: uint16(35158), + 3466: uint16(30728), + 3467: uint16(37461), + 3468: uint16(35256), + 3469: uint16(17394), + 3470: uint16(35303), + 3471: uint16(17375), + 3472: uint16(35304), + 3473: uint16(35654), + 3474: uint16(35796), + 3475: uint16(23032), + 3476: uint16(35849), + 3478: uint16(36805), + 3479: uint16(37100), + 3481: uint16(37136), + 3482: uint16(37180), + 3483: uint16(15863), + 3484: uint16(37214), + 3485: uint16(19146), + 3486: uint16(36816), + 3487: uint16(29327), + 3488: uint16(22155), + 3489: uint16(38119), + 3490: uint16(38377), + 3491: uint16(38320), + 3492: uint16(38328), + 3493: uint16(38706), + 3494: uint16(39121), + 3495: uint16(39241), + 3496: uint16(39274), + 3497: uint16(39363), + 3498: uint16(39464), + 3499: uint16(39694), + 3500: uint16(40282), + 3501: uint16(40347), + 3502: uint16(32415), + 3503: uint16(40696), + 3504: uint16(40739), + 3505: uint16(19620), + 3506: uint16(38215), + 3507: uint16(41619), + 3508: uint16(29090), + 3509: uint16(41727), + 3510: uint16(19857), + 3511: uint16(36882), + 3512: uint16(42443), + 3513: uint16(19868), + 3514: uint16(3228), + 3515: uint16(36798), + 3516: uint16(21953), + 3517: uint16(36794), + 3518: uint16(9392), + 3519: uint16(36793), + 3520: uint16(19091), + 3521: uint16(17673), + 3522: uint16(32383), + 3523: uint16(28502), + 3524: uint16(27313), + 3525: uint16(20202), + 3526: uint16(13540), + 3527: uint16(35628), + 3528: uint16(30877), + 3529: uint16(14138), + 3530: uint16(36480), + 3531: uint16(6133), + 3532: uint16(32804), + 3533: uint16(35692), + 3534: uint16(35737), + 3535: uint16(31294), + 3536: uint16(26287), + 3537: uint16(15851), + 3538: uint16(30293), + 3539: uint16(15543), + 3540: uint16(22069), + 3541: uint16(22870), + 3542: uint16(20122), + 3543: uint16(24193), + 3544: uint16(25176), + 3545: uint16(22207), + 3546: uint16(3693), + 3547: uint16(36366), + 3548: uint16(23405), + 3549: uint16(16008), + 3550: uint16(19614), + 3551: uint16(25566), + 3553: uint16(6134), + 3554: uint16(6267), + 3555: uint16(25904), + 3556: uint16(22061), + 3557: uint16(23626), + 3558: uint16(21530), + 3559: uint16(21265), + 3560: uint16(15814), + 3561: uint16(40344), + 3562: uint16(19581), + 3563: uint16(22050), + 3564: uint16(22046), + 3565: uint16(32585), + 3566: uint16(24280), + 3567: uint16(22901), + 3568: uint16(15680), + 3569: uint16(34672), + 3570: uint16(19996), + 3571: uint16(4074), + 3572: uint16(3401), + 3573: uint16(14010), + 3574: uint16(33047), + 3575: uint16(40286), + 3576: uint16(36120), + 3577: uint16(30267), + 3578: uint16(40005), + 3579: uint16(30286), + 3580: uint16(30649), + 3581: uint16(37701), + 3582: uint16(21554), + 3583: uint16(33096), + 3584: uint16(33527), + 3585: uint16(22053), + 3586: uint16(33074), + 3587: uint16(33816), + 3588: uint16(32957), + 3589: uint16(21994), + 3590: uint16(31074), + 3591: uint16(22083), + 3592: uint16(21526), + 3593: uint16(3741), + 3594: uint16(13774), + 3595: uint16(22021), + 3596: uint16(22001), + 3597: uint16(26353), + 3598: uint16(33506), + 3599: uint16(13869), + 3600: uint16(30004), + 3601: uint16(22000), + 3602: uint16(21946), + 3603: uint16(21655), + 3604: uint16(21874), + 3605: uint16(3137), + 3606: uint16(3222), + 3607: uint16(24272), + 3608: uint16(20808), + 3609: uint16(3702), + 3610: uint16(11362), + 3611: uint16(3746), + 3612: uint16(40619), + 3613: uint16(32090), + 3614: uint16(21982), + 3615: uint16(4213), + 3616: uint16(25245), + 3617: uint16(38765), + 3618: uint16(21652), + 3619: uint16(36045), + 3620: uint16(29174), + 3621: uint16(37238), + 3622: uint16(25596), + 3623: uint16(25529), + 3624: uint16(25598), + 3625: uint16(21865), + 3626: uint16(11075), + 3627: uint16(40050), + 3628: uint16(11955), + 3629: uint16(20890), + 3630: uint16(13535), + 3631: uint16(3495), + 3632: uint16(20903), + 3633: uint16(21581), + 3634: uint16(21790), + 3635: uint16(21779), + 3636: uint16(30310), + 3637: uint16(36397), + 3638: uint16(26762), + 3639: uint16(30129), + 3640: uint16(32950), + 3641: uint16(34820), + 3642: uint16(34694), + 3643: uint16(35015), + 3644: uint16(33206), + 3645: uint16(33820), + 3646: uint16(4289), + 3647: uint16(17644), + 3648: uint16(29444), + 3649: uint16(18182), + 3650: uint16(23440), + 3651: uint16(33547), + 3652: uint16(26771), + 3653: uint16(22139), + 3654: uint16(9972), + 3655: uint16(32047), + 3656: uint16(16803), + 3657: uint16(32115), + 3658: uint16(28368), + 3659: uint16(29366), + 3660: uint16(37232), + 3661: uint16(4569), + 3662: uint16(37384), + 3663: uint16(15612), + 3664: uint16(42665), + 3665: uint16(3756), + 3666: uint16(3833), + 3667: uint16(29286), + 3668: uint16(7330), + 3669: uint16(18254), + 3670: uint16(20418), + 3671: uint16(32761), + 3672: uint16(4075), + 3673: uint16(16634), + 3674: uint16(40029), + 3675: uint16(25887), + 3676: uint16(11680), + 3677: uint16(18675), + 3678: uint16(18400), + 3679: uint16(40316), + 3680: uint16(4076), + 3681: uint16(3594), + 3683: uint16(30115), + 3684: uint16(4077), + 3686: uint16(24648), + 3687: uint16(4487), + 3688: uint16(29091), + 3689: uint16(32398), + 3690: uint16(40272), + 3691: uint16(19994), + 3692: uint16(19972), + 3693: uint16(13687), + 3694: uint16(23309), + 3695: uint16(27826), + 3696: uint16(21351), + 3697: uint16(13996), + 3698: uint16(14812), + 3699: uint16(21373), + 3700: uint16(13989), + 3701: uint16(17944), + 3702: uint16(22682), + 3703: uint16(19310), + 3704: uint16(33325), + 3705: uint16(21579), + 3706: uint16(22442), + 3707: uint16(23189), + 3708: uint16(2425), + 3710: uint16(14930), + 3711: uint16(9317), + 3712: uint16(29556), + 3713: uint16(40620), + 3714: uint16(19721), + 3715: uint16(39917), + 3716: uint16(15614), + 3717: uint16(40752), + 3718: uint16(19547), + 3719: uint16(20393), + 3720: uint16(38302), + 3721: uint16(40926), + 3722: uint16(33884), + 3723: uint16(15798), + 3724: uint16(29362), + 3725: uint16(26547), + 3726: uint16(14112), + 3727: uint16(25390), + 3728: uint16(32037), + 3729: uint16(16119), + 3730: uint16(15916), + 3731: uint16(14890), + 3732: uint16(36872), + 3733: uint16(21196), + 3734: uint16(15988), + 3735: uint16(13946), + 3736: uint16(17897), + 3737: uint16(1166), + 3738: uint16(30272), + 3739: uint16(23280), + 3740: uint16(3766), + 3741: uint16(30842), + 3742: uint16(32558), + 3743: uint16(22695), + 3744: uint16(16575), + 3745: uint16(22140), + 3746: uint16(39819), + 3747: uint16(23924), + 3748: uint16(30292), + 3749: uint16(42036), + 3750: uint16(40581), + 3751: uint16(19681), + 3753: uint16(14331), + 3754: uint16(24857), + 3755: uint16(12506), + 3756: uint16(17394), + 3758: uint16(22109), + 3759: uint16(4777), + 3760: uint16(22439), + 3761: uint16(18787), + 3762: uint16(40454), + 3763: uint16(21044), + 3764: uint16(28846), + 3765: uint16(13741), + 3767: uint16(40316), + 3768: uint16(31830), + 3769: uint16(39737), + 3770: uint16(22494), + 3771: uint16(5996), + 3772: uint16(23635), + 3773: uint16(25811), + 3774: uint16(38096), + 3775: uint16(25397), + 3776: uint16(29028), + 3777: uint16(34477), + 3778: uint16(3368), + 3779: uint16(27938), + 3780: uint16(19170), + 3781: uint16(3441), + 3783: uint16(20990), + 3784: uint16(7951), + 3785: uint16(23950), + 3786: uint16(38659), + 3787: uint16(7633), + 3788: uint16(40577), + 3789: uint16(36940), + 3790: uint16(31519), + 3791: uint16(39682), + 3792: uint16(23761), + 3793: uint16(31651), + 3794: uint16(25192), + 3795: uint16(25397), + 3796: uint16(39679), + 3797: uint16(31695), + 3798: uint16(39722), + 3799: uint16(31870), + 3801: uint16(31810), + 3802: uint16(31878), + 3803: uint16(39957), + 3804: uint16(31740), + 3805: uint16(39689), + 3807: uint16(39963), + 3808: uint16(18750), + 3809: uint16(40794), + 3810: uint16(21875), + 3811: uint16(23491), + 3812: uint16(20477), + 3813: uint16(40600), + 3814: uint16(20466), + 3815: uint16(21088), + 3816: uint16(15878), + 3817: uint16(21201), + 3818: uint16(22375), + 3819: uint16(20566), + 3820: uint16(22967), + 3821: uint16(24082), + 3822: uint16(38856), + 3823: uint16(40363), + 3824: uint16(36700), + 3825: uint16(21609), + 3826: uint16(38836), + 3827: uint16(39232), + 3828: uint16(38842), + 3829: uint16(21292), + 3830: uint16(24880), + 3831: uint16(26924), + 3832: uint16(21466), + 3833: uint16(39946), + 3834: uint16(40194), + 3835: uint16(19515), + 3836: uint16(38465), + 3837: uint16(27008), + 3838: uint16(20646), + 3839: uint16(30022), + 3840: uint16(5997), + 3841: uint16(39386), + 3842: uint16(21107), + 3844: uint16(37209), + 3845: uint16(38529), + 3846: uint16(37212), + 3848: uint16(37201), + 3849: uint16(36503), + 3850: uint16(25471), + 3851: uint16(27939), + 3852: uint16(27338), + 3853: uint16(22033), + 3854: uint16(37262), + 3855: uint16(30074), + 3856: uint16(25221), + 3857: uint16(1020), + 3858: uint16(29519), + 3859: uint16(31856), + 3860: uint16(23585), + 3861: uint16(15613), + 3863: uint16(18713), + 3864: uint16(30422), + 3865: uint16(39837), + 3866: uint16(20010), + 3867: uint16(3284), + 3868: uint16(33726), + 3869: uint16(34882), + 3871: uint16(23626), + 3872: uint16(27072), + 3874: uint16(22394), + 3875: uint16(21023), + 3876: uint16(24053), + 3877: uint16(20174), + 3878: uint16(27697), + 3879: uint16(498), + 3880: uint16(20281), + 3881: uint16(21660), + 3882: uint16(21722), + 3883: uint16(21146), + 3884: uint16(36226), + 3885: uint16(13822), + 3887: uint16(13811), + 3889: uint16(27474), + 3890: uint16(37244), + 3891: uint16(40869), + 3892: uint16(39831), + 3893: uint16(38958), + 3894: uint16(39092), + 3895: uint16(39610), + 3896: uint16(40616), + 3897: uint16(40580), + 3898: uint16(29050), + 3899: uint16(31508), + 3901: uint16(27642), + 3902: uint16(34840), + 3903: uint16(32632), + 3905: uint16(22048), + 3906: uint16(42570), + 3907: uint16(36471), + 3908: uint16(40787), + 3910: uint16(36308), + 3911: uint16(36431), + 3912: uint16(40476), + 3913: uint16(36353), + 3914: uint16(25218), + 3915: uint16(33661), + 3916: uint16(36392), + 3917: uint16(36469), + 3918: uint16(31443), + 3919: uint16(19063), + 3920: uint16(31294), + 3921: uint16(30936), + 3922: uint16(27882), + 3923: uint16(35431), + 3924: uint16(30215), + 3925: uint16(35418), + 3926: uint16(40742), + 3927: uint16(27854), + 3928: uint16(34774), + 3929: uint16(30147), + 3930: uint16(41650), + 3931: uint16(30803), + 3932: uint16(63552), + 3933: uint16(36108), + 3934: uint16(29410), + 3935: uint16(29553), + 3936: uint16(35629), + 3937: uint16(29442), + 3938: uint16(29937), + 3939: uint16(36075), + 3940: uint16(19131), + 3941: uint16(34351), + 3942: uint16(24506), + 3943: uint16(34976), + 3944: uint16(17591), + 3946: uint16(6203), + 3947: uint16(28165), + 3949: uint16(35454), + 3950: uint16(9499), + 3952: uint16(24829), + 3953: uint16(30311), + 3954: uint16(39639), + 3955: uint16(40260), + 3956: uint16(37742), + 3957: uint16(39823), + 3958: uint16(34805), + 3961: uint16(36087), + 3962: uint16(29484), + 3963: uint16(38689), + 3964: uint16(39856), + 3965: uint16(13782), + 3966: uint16(29362), + 3967: uint16(19463), + 3968: uint16(31825), + 3969: uint16(39242), + 3970: uint16(24921), + 3971: uint16(24921), + 3972: uint16(19460), + 3973: uint16(40598), + 3974: uint16(24957), + 3976: uint16(22367), + 3977: uint16(24943), + 3978: uint16(25254), + 3979: uint16(25145), + 3981: uint16(14940), + 3982: uint16(25058), + 3983: uint16(21418), + 3984: uint16(13301), + 3985: uint16(25444), + 3986: uint16(26626), + 3987: uint16(13778), + 3988: uint16(23895), + 3989: uint16(35778), + 3990: uint16(36826), + 3991: uint16(36409), + 3993: uint16(20697), + 3994: uint16(7494), + 3995: uint16(30982), + 3996: uint16(21298), + 3997: uint16(38456), + 3998: uint16(3899), + 3999: uint16(16485), + 4001: uint16(30718), + 4003: uint16(31938), + 4004: uint16(24346), + 4005: uint16(31962), + 4006: uint16(31277), + 4007: uint16(32870), + 4008: uint16(32867), + 4009: uint16(32077), + 4010: uint16(29957), + 4011: uint16(29938), + 4012: uint16(35220), + 4013: uint16(33306), + 4014: uint16(26380), + 4015: uint16(32866), + 4016: uint16(29830), + 4017: uint16(32859), + 4018: uint16(29936), + 4019: uint16(33027), + 4020: uint16(30500), + 4021: uint16(35209), + 4022: uint16(26572), + 4023: uint16(30035), + 4024: uint16(28369), + 4025: uint16(34729), + 4026: uint16(34766), + 4027: uint16(33224), + 4028: uint16(34700), + 4029: uint16(35401), + 4030: uint16(36013), + 4031: uint16(35651), + 4032: uint16(30507), + 4033: uint16(29944), + 4034: uint16(34010), + 4035: uint16(13877), + 4036: uint16(27058), + 4037: uint16(36262), + 4039: uint16(35241), + 4041: uint16(28089), + 4042: uint16(34753), + 4043: uint16(16401), + 4044: uint16(29927), + 4045: uint16(15835), + 4046: uint16(29046), + 4047: uint16(24740), + 4048: uint16(24988), + 4049: uint16(15569), + 4051: uint16(24695), + 4053: uint16(32625), + 4054: uint16(35629), + 4056: uint16(24809), + 4057: uint16(19326), + 4058: uint16(21024), + 4059: uint16(15384), + 4060: uint16(15559), + 4061: uint16(24279), + 4062: uint16(30294), + 4063: uint16(21809), + 4064: uint16(6468), + 4065: uint16(4862), + 4066: uint16(39171), + 4067: uint16(28124), + 4068: uint16(28845), + 4069: uint16(23745), + 4070: uint16(25005), + 4071: uint16(35343), + 4072: uint16(13943), + 4073: uint16(238), + 4074: uint16(26694), + 4075: uint16(20238), + 4076: uint16(17762), + 4077: uint16(23327), + 4078: uint16(25420), + 4079: uint16(40784), + 4080: uint16(40614), + 4081: uint16(25195), + 4082: uint16(1351), + 4083: uint16(37595), + 4084: uint16(1503), + 4085: uint16(16325), + 4086: uint16(34124), + 4087: uint16(17077), + 4088: uint16(29679), + 4089: uint16(20917), + 4090: uint16(13897), + 4091: uint16(18754), + 4092: uint16(35300), + 4093: uint16(37700), + 4094: uint16(6619), + 4095: uint16(33518), + 4096: uint16(15560), + 4097: uint16(30780), + 4098: uint16(26436), + 4099: uint16(25311), + 4100: uint16(18739), + 4101: uint16(35242), + 4102: uint16(672), + 4103: uint16(27571), + 4104: uint16(4869), + 4105: uint16(20395), + 4106: uint16(9453), + 4107: uint16(20488), + 4108: uint16(27945), + 4109: uint16(31364), + 4110: uint16(13824), + 4111: uint16(19121), + 4112: uint16(9491), + 4114: uint16(894), + 4115: uint16(24484), + 4116: uint16(896), + 4117: uint16(839), + 4118: uint16(28379), + 4119: uint16(1055), + 4121: uint16(20737), + 4122: uint16(13434), + 4123: uint16(20750), + 4124: uint16(39020), + 4125: uint16(14147), + 4126: uint16(33814), + 4127: uint16(18852), + 4128: uint16(1159), + 4129: uint16(20832), + 4130: uint16(13236), + 4131: uint16(20842), + 4132: uint16(3071), + 4133: uint16(8444), + 4134: uint16(741), + 4135: uint16(9520), + 4136: uint16(1422), + 4137: uint16(12851), + 4138: uint16(6531), + 4139: uint16(23426), + 4140: uint16(34685), + 4141: uint16(1459), + 4142: uint16(15513), + 4143: uint16(20914), + 4144: uint16(20920), + 4145: uint16(40244), + 4146: uint16(20937), + 4147: uint16(20943), + 4148: uint16(20945), + 4149: uint16(15580), + 4150: uint16(20947), + 4151: uint16(19110), + 4152: uint16(20915), + 4153: uint16(20962), + 4154: uint16(21314), + 4155: uint16(20973), + 4156: uint16(33741), + 4157: uint16(26942), + 4158: uint16(14125), + 4159: uint16(24443), + 4160: uint16(21003), + 4161: uint16(21030), + 4162: uint16(21052), + 4163: uint16(21173), + 4164: uint16(21079), + 4165: uint16(21140), + 4166: uint16(21177), + 4167: uint16(21189), + 4168: uint16(31765), + 4169: uint16(34114), + 4170: uint16(21216), + 4171: uint16(34317), + 4172: uint16(27411), + 4174: uint16(35550), + 4175: uint16(21833), + 4176: uint16(28377), + 4177: uint16(16256), + 4178: uint16(2388), + 4179: uint16(16364), + 4180: uint16(21299), + 4182: uint16(3042), + 4183: uint16(27851), + 4184: uint16(5926), + 4185: uint16(26651), + 4186: uint16(29653), + 4187: uint16(24650), + 4188: uint16(16042), + 4189: uint16(14540), + 4190: uint16(5864), + 4191: uint16(29149), + 4192: uint16(17570), + 4193: uint16(21357), + 4194: uint16(21364), + 4195: uint16(34475), + 4196: uint16(21374), + 4198: uint16(5526), + 4199: uint16(5651), + 4200: uint16(30694), + 4201: uint16(21395), + 4202: uint16(35483), + 4203: uint16(21408), + 4204: uint16(21419), + 4205: uint16(21422), + 4206: uint16(29607), + 4207: uint16(22386), + 4208: uint16(16217), + 4209: uint16(29596), + 4210: uint16(21441), + 4211: uint16(21445), + 4212: uint16(27721), + 4213: uint16(20041), + 4214: uint16(22526), + 4215: uint16(21465), + 4216: uint16(15019), + 4217: uint16(2959), + 4218: uint16(21472), + 4219: uint16(16363), + 4220: uint16(11683), + 4221: uint16(21494), + 4222: uint16(3191), + 4223: uint16(21523), + 4224: uint16(28793), + 4225: uint16(21803), + 4226: uint16(26199), + 4227: uint16(27995), + 4228: uint16(21613), + 4229: uint16(27475), + 4230: uint16(3444), + 4231: uint16(21853), + 4232: uint16(21647), + 4233: uint16(21668), + 4234: uint16(18342), + 4235: uint16(5901), + 4236: uint16(3805), + 4237: uint16(15796), + 4238: uint16(3405), + 4239: uint16(35260), + 4240: uint16(9880), + 4241: uint16(21831), + 4242: uint16(19693), + 4243: uint16(21551), + 4244: uint16(29719), + 4245: uint16(21894), + 4246: uint16(21929), + 4248: uint16(6359), + 4249: uint16(16442), + 4250: uint16(17746), + 4251: uint16(17461), + 4252: uint16(26291), + 4253: uint16(4276), + 4254: uint16(22071), + 4255: uint16(26317), + 4256: uint16(12938), + 4257: uint16(26276), + 4258: uint16(26285), + 4259: uint16(22093), + 4260: uint16(22095), + 4261: uint16(30961), + 4262: uint16(22257), + 4263: uint16(38791), + 4264: uint16(21502), + 4265: uint16(22272), + 4266: uint16(22255), + 4267: uint16(22253), + 4268: uint16(35686), + 4269: uint16(13859), + 4270: uint16(4687), + 4271: uint16(22342), + 4272: uint16(16805), + 4273: uint16(27758), + 4274: uint16(28811), + 4275: uint16(22338), + 4276: uint16(14001), + 4277: uint16(27774), + 4278: uint16(22502), + 4279: uint16(5142), + 4280: uint16(22531), + 4281: uint16(5204), + 4282: uint16(17251), + 4283: uint16(22566), + 4284: uint16(19445), + 4285: uint16(22620), + 4286: uint16(22698), + 4287: uint16(13665), + 4288: uint16(22752), + 4289: uint16(22748), + 4290: uint16(4668), + 4291: uint16(22779), + 4292: uint16(23551), + 4293: uint16(22339), + 4294: uint16(41296), + 4295: uint16(17016), + 4296: uint16(37843), + 4297: uint16(13729), + 4298: uint16(22815), + 4299: uint16(26790), + 4300: uint16(14019), + 4301: uint16(28249), + 4302: uint16(5694), + 4303: uint16(23076), + 4304: uint16(21843), + 4305: uint16(5778), + 4306: uint16(34053), + 4307: uint16(22985), + 4308: uint16(3406), + 4309: uint16(27777), + 4310: uint16(27946), + 4311: uint16(6108), + 4312: uint16(23001), + 4313: uint16(6139), + 4314: uint16(6066), + 4315: uint16(28070), + 4316: uint16(28017), + 4317: uint16(6184), + 4318: uint16(5845), + 4319: uint16(23033), + 4320: uint16(28229), + 4321: uint16(23211), + 4322: uint16(23139), + 4323: uint16(14054), + 4324: uint16(18857), + 4326: uint16(14088), + 4327: uint16(23190), + 4328: uint16(29797), + 4329: uint16(23251), + 4330: uint16(28577), + 4331: uint16(9556), + 4332: uint16(15749), + 4333: uint16(6417), + 4334: uint16(14130), + 4335: uint16(5816), + 4336: uint16(24195), + 4337: uint16(21200), + 4338: uint16(23414), + 4339: uint16(25992), + 4340: uint16(23420), + 4341: uint16(31246), + 4342: uint16(16388), + 4343: uint16(18525), + 4344: uint16(516), + 4345: uint16(23509), + 4346: uint16(24928), + 4347: uint16(6708), + 4348: uint16(22988), + 4349: uint16(1445), + 4350: uint16(23539), + 4351: uint16(23453), + 4352: uint16(19728), + 4353: uint16(23557), + 4354: uint16(6980), + 4355: uint16(23571), + 4356: uint16(29646), + 4357: uint16(23572), + 4358: uint16(7333), + 4359: uint16(27432), + 4360: uint16(23625), + 4361: uint16(18653), + 4362: uint16(23685), + 4363: uint16(23785), + 4364: uint16(23791), + 4365: uint16(23947), + 4366: uint16(7673), + 4367: uint16(7735), + 4368: uint16(23824), + 4369: uint16(23832), + 4370: uint16(23878), + 4371: uint16(7844), + 4372: uint16(23738), + 4373: uint16(24023), + 4374: uint16(33532), + 4375: uint16(14381), + 4376: uint16(18689), + 4377: uint16(8265), + 4378: uint16(8563), + 4379: uint16(33415), + 4380: uint16(14390), + 4381: uint16(15298), + 4382: uint16(24110), + 4383: uint16(27274), + 4385: uint16(24186), + 4386: uint16(17596), + 4387: uint16(3283), + 4388: uint16(21414), + 4389: uint16(20151), + 4391: uint16(21416), + 4392: uint16(6001), + 4393: uint16(24073), + 4394: uint16(24308), + 4395: uint16(33922), + 4396: uint16(24313), + 4397: uint16(24315), + 4398: uint16(14496), + 4399: uint16(24316), + 4400: uint16(26686), + 4401: uint16(37915), + 4402: uint16(24333), + 4403: uint16(449), + 4404: uint16(63636), + 4405: uint16(15070), + 4406: uint16(18606), + 4407: uint16(4922), + 4408: uint16(24378), + 4409: uint16(26760), + 4410: uint16(9168), + 4412: uint16(9329), + 4413: uint16(24419), + 4414: uint16(38845), + 4415: uint16(28270), + 4416: uint16(24434), + 4417: uint16(37696), + 4418: uint16(35382), + 4419: uint16(24487), + 4420: uint16(23990), + 4421: uint16(15711), + 4422: uint16(21072), + 4423: uint16(8042), + 4424: uint16(28920), + 4425: uint16(9832), + 4426: uint16(37334), + 4427: uint16(670), + 4428: uint16(35369), + 4429: uint16(24625), + 4430: uint16(26245), + 4431: uint16(6263), + 4432: uint16(14691), + 4433: uint16(15815), + 4434: uint16(13881), + 4435: uint16(22416), + 4436: uint16(10164), + 4437: uint16(31089), + 4438: uint16(15936), + 4439: uint16(24734), + 4441: uint16(24755), + 4442: uint16(18818), + 4443: uint16(18831), + 4444: uint16(31315), + 4445: uint16(29860), + 4446: uint16(20705), + 4447: uint16(23200), + 4448: uint16(24932), + 4449: uint16(33828), + 4450: uint16(24898), + 4451: uint16(63654), + 4452: uint16(28370), + 4453: uint16(24961), + 4454: uint16(20980), + 4455: uint16(1622), + 4456: uint16(24967), + 4457: uint16(23466), + 4458: uint16(16311), + 4459: uint16(10335), + 4460: uint16(25043), + 4461: uint16(35741), + 4462: uint16(39261), + 4463: uint16(25040), + 4464: uint16(14642), + 4465: uint16(10624), + 4466: uint16(10433), + 4467: uint16(24611), + 4468: uint16(24924), + 4469: uint16(25886), + 4470: uint16(25483), + 4471: uint16(280), + 4472: uint16(25285), + 4473: uint16(6000), + 4474: uint16(25301), + 4475: uint16(11789), + 4476: uint16(25452), + 4477: uint16(18911), + 4478: uint16(14871), + 4479: uint16(25656), + 4480: uint16(25592), + 4481: uint16(5006), + 4482: uint16(6140), + 4484: uint16(28554), + 4485: uint16(11830), + 4486: uint16(38932), + 4487: uint16(16524), + 4488: uint16(22301), + 4489: uint16(25825), + 4490: uint16(25829), + 4491: uint16(38011), + 4492: uint16(14950), + 4493: uint16(25658), + 4494: uint16(14935), + 4495: uint16(25933), + 4496: uint16(28438), + 4497: uint16(18984), + 4498: uint16(18979), + 4499: uint16(25989), + 4500: uint16(25965), + 4501: uint16(25951), + 4502: uint16(12414), + 4503: uint16(26037), + 4504: uint16(18752), + 4505: uint16(19255), + 4506: uint16(26065), + 4507: uint16(16600), + 4508: uint16(6185), + 4509: uint16(26080), + 4510: uint16(26083), + 4511: uint16(24543), + 4512: uint16(13312), + 4513: uint16(26136), + 4514: uint16(12791), + 4515: uint16(12792), + 4516: uint16(26180), + 4517: uint16(12708), + 4518: uint16(12709), + 4519: uint16(26187), + 4520: uint16(3701), + 4521: uint16(26215), + 4522: uint16(20966), + 4523: uint16(26227), + 4525: uint16(7741), + 4526: uint16(12849), + 4527: uint16(34292), + 4528: uint16(12744), + 4529: uint16(21267), + 4530: uint16(30661), + 4531: uint16(10487), + 4532: uint16(39332), + 4533: uint16(26370), + 4534: uint16(17308), + 4535: uint16(18977), + 4536: uint16(15147), + 4537: uint16(27130), + 4538: uint16(14274), + 4540: uint16(26471), + 4541: uint16(26466), + 4542: uint16(16845), + 4543: uint16(37101), + 4544: uint16(26583), + 4545: uint16(17641), + 4546: uint16(26658), + 4547: uint16(28240), + 4548: uint16(37436), + 4549: uint16(26625), + 4550: uint16(13286), + 4551: uint16(28064), + 4552: uint16(26717), + 4553: uint16(13423), + 4554: uint16(27105), + 4555: uint16(27147), + 4556: uint16(35551), + 4557: uint16(26995), + 4558: uint16(26819), + 4559: uint16(13773), + 4560: uint16(26881), + 4561: uint16(26880), + 4562: uint16(15666), + 4563: uint16(14849), + 4564: uint16(13884), + 4565: uint16(15232), + 4566: uint16(26540), + 4567: uint16(26977), + 4568: uint16(35402), + 4569: uint16(17148), + 4570: uint16(26934), + 4571: uint16(27032), + 4572: uint16(15265), + 4573: uint16(969), + 4574: uint16(33635), + 4575: uint16(20624), + 4576: uint16(27129), + 4577: uint16(13913), + 4578: uint16(8490), + 4579: uint16(27205), + 4580: uint16(14083), + 4581: uint16(27293), + 4582: uint16(15347), + 4583: uint16(26545), + 4584: uint16(27336), + 4585: uint16(37276), + 4586: uint16(15373), + 4587: uint16(27421), + 4588: uint16(2339), + 4589: uint16(24798), + 4590: uint16(27445), + 4591: uint16(27508), + 4592: uint16(10189), + 4593: uint16(28341), + 4594: uint16(15067), + 4595: uint16(949), + 4596: uint16(6488), + 4597: uint16(14144), + 4598: uint16(21537), + 4599: uint16(15194), + 4600: uint16(27617), + 4601: uint16(16124), + 4602: uint16(27612), + 4603: uint16(27703), + 4604: uint16(9355), + 4605: uint16(18673), + 4606: uint16(27473), + 4607: uint16(27738), + 4608: uint16(33318), + 4609: uint16(27769), + 4610: uint16(15804), + 4611: uint16(17605), + 4612: uint16(15805), + 4613: uint16(16804), + 4614: uint16(18700), + 4615: uint16(18688), + 4616: uint16(15561), + 4617: uint16(14053), + 4618: uint16(15595), + 4619: uint16(3378), + 4620: uint16(39811), + 4621: uint16(12793), + 4622: uint16(9361), + 4623: uint16(32655), + 4624: uint16(26679), + 4625: uint16(27941), + 4626: uint16(28065), + 4627: uint16(28139), + 4628: uint16(28054), + 4629: uint16(27996), + 4630: uint16(28284), + 4631: uint16(28420), + 4632: uint16(18815), + 4633: uint16(16517), + 4634: uint16(28274), + 4635: uint16(34099), + 4636: uint16(28532), + 4637: uint16(20935), + 4640: uint16(33838), + 4641: uint16(35617), + 4643: uint16(15919), + 4644: uint16(29779), + 4645: uint16(16258), + 4646: uint16(31180), + 4647: uint16(28239), + 4648: uint16(23185), + 4649: uint16(12363), + 4650: uint16(28664), + 4651: uint16(14093), + 4652: uint16(28573), + 4653: uint16(15920), + 4654: uint16(28410), + 4655: uint16(5271), + 4656: uint16(16445), + 4657: uint16(17749), + 4658: uint16(37872), + 4659: uint16(28484), + 4660: uint16(28508), + 4661: uint16(15694), + 4662: uint16(28532), + 4663: uint16(37232), + 4664: uint16(15675), + 4665: uint16(28575), + 4666: uint16(16708), + 4667: uint16(28627), + 4668: uint16(16529), + 4669: uint16(16725), + 4670: uint16(16441), + 4671: uint16(16368), + 4672: uint16(16308), + 4673: uint16(16703), + 4674: uint16(20959), + 4675: uint16(16726), + 4676: uint16(16727), + 4677: uint16(16704), + 4678: uint16(25053), + 4679: uint16(28747), + 4680: uint16(28798), + 4681: uint16(28839), + 4682: uint16(28801), + 4683: uint16(28876), + 4684: uint16(28885), + 4685: uint16(28886), + 4686: uint16(28895), + 4687: uint16(16644), + 4688: uint16(15848), + 4689: uint16(29108), + 4690: uint16(29078), + 4691: uint16(17015), + 4692: uint16(28971), + 4693: uint16(28997), + 4694: uint16(23176), + 4695: uint16(29002), + 4697: uint16(23708), + 4698: uint16(17253), + 4699: uint16(29007), + 4700: uint16(37730), + 4701: uint16(17089), + 4702: uint16(28972), + 4703: uint16(17498), + 4704: uint16(18983), + 4705: uint16(18978), + 4706: uint16(29114), + 4707: uint16(35816), + 4708: uint16(28861), + 4709: uint16(29198), + 4710: uint16(37954), + 4711: uint16(29205), + 4712: uint16(22801), + 4713: uint16(37955), + 4714: uint16(29220), + 4715: uint16(37697), + 4716: uint16(22021), + 4717: uint16(29230), + 4718: uint16(29248), + 4719: uint16(18804), + 4720: uint16(26813), + 4721: uint16(29269), + 4722: uint16(29271), + 4723: uint16(15957), + 4724: uint16(12356), + 4725: uint16(26637), + 4726: uint16(28477), + 4727: uint16(29314), + 4729: uint16(29483), + 4730: uint16(18467), + 4731: uint16(34859), + 4732: uint16(18669), + 4733: uint16(34820), + 4734: uint16(29480), + 4735: uint16(29486), + 4736: uint16(29647), + 4737: uint16(29610), + 4738: uint16(3130), + 4739: uint16(27182), + 4740: uint16(29641), + 4741: uint16(29769), + 4742: uint16(16866), + 4743: uint16(5863), + 4744: uint16(18980), + 4745: uint16(26147), + 4746: uint16(14021), + 4747: uint16(18871), + 4748: uint16(18829), + 4749: uint16(18939), + 4750: uint16(29687), + 4751: uint16(29717), + 4752: uint16(26883), + 4753: uint16(18982), + 4754: uint16(29753), + 4755: uint16(1475), + 4756: uint16(16087), + 4758: uint16(10413), + 4759: uint16(29792), + 4760: uint16(36530), + 4761: uint16(29767), + 4762: uint16(29668), + 4763: uint16(29814), + 4764: uint16(33721), + 4765: uint16(29804), + 4766: uint16(14128), + 4767: uint16(29812), + 4768: uint16(37873), + 4769: uint16(27180), + 4770: uint16(29826), + 4771: uint16(18771), + 4772: uint16(19084), + 4773: uint16(16735), + 4774: uint16(19065), + 4775: uint16(35727), + 4776: uint16(23366), + 4777: uint16(35843), + 4778: uint16(6302), + 4779: uint16(29896), + 4780: uint16(6536), + 4781: uint16(29966), + 4783: uint16(29982), + 4784: uint16(36569), + 4785: uint16(6731), + 4786: uint16(23511), + 4787: uint16(36524), + 4788: uint16(37765), + 4789: uint16(30029), + 4790: uint16(30026), + 4791: uint16(30055), + 4792: uint16(30062), + 4793: uint16(20354), + 4794: uint16(16132), + 4795: uint16(19731), + 4796: uint16(30094), + 4797: uint16(29789), + 4798: uint16(30110), + 4799: uint16(30132), + 4800: uint16(30210), + 4801: uint16(30252), + 4802: uint16(30289), + 4803: uint16(30287), + 4804: uint16(30319), + 4805: uint16(30326), + 4806: uint16(25589), + 4807: uint16(30352), + 4808: uint16(33263), + 4809: uint16(14328), + 4810: uint16(26897), + 4811: uint16(26894), + 4812: uint16(30369), + 4813: uint16(30373), + 4814: uint16(30391), + 4815: uint16(30412), + 4816: uint16(28575), + 4817: uint16(33890), + 4818: uint16(20637), + 4819: uint16(20861), + 4820: uint16(7708), + 4821: uint16(30494), + 4822: uint16(30502), + 4823: uint16(30528), + 4824: uint16(25775), + 4825: uint16(21024), + 4826: uint16(30552), + 4827: uint16(12972), + 4828: uint16(30639), + 4829: uint16(35172), + 4830: uint16(35176), + 4831: uint16(5825), + 4832: uint16(30708), + 4834: uint16(4982), + 4835: uint16(18962), + 4836: uint16(26826), + 4837: uint16(30895), + 4838: uint16(30919), + 4839: uint16(30931), + 4840: uint16(38565), + 4841: uint16(31022), + 4842: uint16(21984), + 4843: uint16(30935), + 4844: uint16(31028), + 4845: uint16(30897), + 4846: uint16(30220), + 4847: uint16(36792), + 4848: uint16(34948), + 4849: uint16(35627), + 4850: uint16(24707), + 4851: uint16(9756), + 4852: uint16(31110), + 4853: uint16(35072), + 4854: uint16(26882), + 4855: uint16(31104), + 4856: uint16(22615), + 4857: uint16(31133), + 4858: uint16(31545), + 4859: uint16(31036), + 4860: uint16(31145), + 4861: uint16(28202), + 4862: uint16(28966), + 4863: uint16(16040), + 4864: uint16(31174), + 4865: uint16(37133), + 4866: uint16(31188), + 4867: uint16(1312), + 4868: uint16(17503), + 4869: uint16(21007), + 4870: uint16(47234), + 4871: uint16(248), + 4872: uint16(16384), + 4873: uint16(43296), + 4874: uint16(1102), + 4877: uint16(2868), + 4878: uint16(1), + 4886: uint16(3072), + 4887: uint16(64), + 4891: uint16(1024), + 4892: uint16(88), + 4893: uint16(60), + 4896: uint16(23680), + 4897: uint16(56493), + 4898: uint16(48115), + 4899: uint16(17353), + 4900: uint16(60910), + 4901: uint16(4004), + 4902: uint16(49446), + 4903: uint16(30363), + 4904: uint16(61426), + 4905: uint16(64478), + 4906: uint16(63482), + 4907: uint16(12815), + 4908: uint16(44868), + 4909: uint16(61438), + 4910: uint16(65277), + 4911: uint16(24593), + 4912: uint16(176), + 4913: uint16(8448), + 4914: uint16(33049), + 4915: uint16(4128), + 4916: uint16(43144), + 4917: uint16(8544), + 4918: uint16(9321), + 4919: uint16(17408), + 4920: uint16(50313), + 4922: uint16(16387), + 4923: uint16(53), + 4924: uint16(33859), + 4925: uint16(20785), + 4926: uint16(26771), + 4927: uint16(514), + 4933: uint16(16384), + 4934: uint16(256), + 4935: uint16(44160), + 4936: uint16(33380), + 4937: uint16(35904), + 4938: uint16(37025), + 4939: uint16(20484), + 4940: uint16(54368), + 4941: uint16(53760), + 4942: uint16(6186), + 4943: uint16(26781), + 4944: uint16(38709), + 4945: uint16(55375), + 4946: uint16(8440), + 4947: uint16(33476), + 4948: uint16(10268), + 4949: uint16(30082), + 4950: uint16(660), + 4951: uint16(16440), + 4952: uint16(41376), + 4953: uint16(4293), + 4954: uint16(19825), + 4955: uint16(3524), + 4956: uint16(47512), + 4957: uint16(23390), + 4958: uint16(17153), + 4959: uint16(39327), + 4960: uint16(30723), + 4961: uint16(57888), + 4962: uint16(2079), + 4963: uint16(393), + 4964: uint16(16585), + 4965: uint16(775), + 4966: uint16(39437), + 4967: uint16(21136), + 4968: uint16(20433), + 4969: uint16(892), + 4970: uint16(8450), + 4971: uint16(49184), + 4972: uint16(4974), + 4973: uint16(46467), + 4974: uint16(62939), + 4975: uint16(30693), + 4976: uint16(20368), + 4977: uint16(39447), + 4978: uint16(5942), + 4979: uint16(12), + 4980: uint16(47726), + 4981: uint16(12041), + 4982: uint16(21600), + 4983: uint16(7680), + 4984: uint16(26744), + 4985: uint16(28706), + 4986: uint16(40534), + 4987: uint16(62245), + 4988: uint16(46990), + 4989: uint16(2839), + 4990: uint16(59119), + 4991: uint16(6007), + 4992: uint16(7003), + 4993: uint16(4289), + 4994: uint16(36248), + 4995: uint16(6162), + 4996: uint16(53174), + 4997: uint16(12545), + 4998: uint16(6770), + 4999: uint16(11355), + 5000: uint16(49334), + 5001: uint16(57888), + 5002: uint16(23747), + 5003: uint16(7042), + 5004: uint16(56032), + 5005: uint16(34254), + 5006: uint16(16598), + 5007: uint16(21673), + 5008: uint16(53259), + 5009: uint16(18447), + 5010: uint16(16452), + 5011: uint16(2320), + 5012: uint16(16596), + 5013: uint16(15278), + 5014: uint16(7780), + 5015: uint16(11076), + 5016: uint16(2071), + 5017: uint16(33414), + 5018: uint16(6198), + 5019: uint16(35232), + 5020: uint16(40167), + 5021: uint16(2139), + 5022: uint16(900), + 5023: uint16(55810), + 5024: uint16(60560), + 5025: uint16(34779), + 5026: uint16(49029), + 5027: uint16(44450), + 5028: uint16(36509), + 5029: uint16(39069), + 5030: uint16(9504), + 5031: uint16(70), + 5032: uint16(40774), + 5033: uint16(58239), + 5034: uint16(51669), + 5035: uint16(62596), + 5036: uint16(19926), + 5037: uint16(58118), + 5038: uint16(6326), + 5039: uint16(2322), + 5041: uint16(1024), + 5043: uint16(32), + 5045: uint16(512), + 5050: uint16(8192), + 5057: uint16(8), + 5058: uint16(36352), + 5059: uint16(28280), + 5060: uint16(16223), + 5061: uint16(56702), + 5062: uint16(63293), + 5063: uint16(39932), + 5064: uint16(44796), + 5065: uint16(65490), + 5066: uint16(27535), + 5067: uint16(59377), + 5068: uint16(47807), + 5069: uint16(28334), + 5070: uint16(61207), + 5071: uint16(42972), + 5072: uint16(46654), + 5073: uint16(30645), + 5074: uint16(37577), + 5075: uint16(42455), + 5076: uint16(19126), + 5077: uint16(39790), + 5078: uint16(33209), + 5079: uint16(26445), + 5080: uint16(21758), + 5081: uint16(39921), + 5082: uint16(65122), + 5083: uint16(21103), + 5084: uint16(14039), + 5085: uint16(49150), + 5086: uint16(17705), + 5087: uint16(63873), + 5088: uint16(26045), + 5089: uint16(17062), + 5090: uint16(57), + 5091: uint16(16896), + 5092: uint16(36704), + 5093: uint16(37888), + 5094: uint16(16448), + 5095: uint16(45010), + 5096: uint16(53719), + 5097: uint16(219), + 5098: uint16(39072), + 5099: uint16(31666), + 5100: uint16(20998), + 5101: uint16(38944), + 5102: uint16(51222), + 5103: uint16(2365), + 5105: uint16(1), + 5107: uint16(2561), + 5108: uint16(2226), + 5109: uint16(128), + 5111: uint16(34820), + 5112: uint16(5152), + 5113: uint16(19472), + 5115: uint16(4), + 5116: uint16(17569), + 5117: uint16(16), + 5118: uint16(321), + 5119: uint16(2048), + 5120: uint16(61504), + 5121: uint16(20447), + 5122: uint16(22582), + 5123: uint16(62961), + 5124: uint16(32949), + 5125: uint16(26613), + 5126: uint16(16512), + 5127: uint16(20480), + 5128: uint16(16718), + 5129: uint16(33992), + 5130: uint16(23040), + 5131: uint16(55392), + 5132: uint16(11009), + 5133: uint16(20481), + 5134: uint16(5793), + 5135: uint16(16580), + 5136: uint16(28402), + 5137: uint16(44049), + 5138: uint16(14624), + 5139: uint16(49348), + 5140: uint16(1800), + 5141: uint16(2316), + 5142: uint16(38552), + 5143: uint16(39876), + 5144: uint16(7184), + 5145: uint16(27800), + 5146: uint16(10886), + 5147: uint16(422), + 5148: uint16(4422), + 5149: uint16(58733), + 5150: uint16(50379), + 5151: uint16(37568), + 5152: uint16(8464), + 5153: uint16(4630), + 5154: uint16(29341), + 5155: uint16(27124), + 5156: uint16(5902), + 5157: uint16(41514), + 5158: uint16(62593), + 5159: uint16(123), + 5160: uint16(41992), + 5161: uint16(36875), + 5162: uint16(11280), + 5163: uint16(14796), + 5164: uint16(330), + 5165: uint16(5872), + 5166: uint16(2571), + 5167: uint16(3136), + 5168: uint16(59933), + 5169: uint16(17420), + 5170: uint16(17678), + 5171: uint16(2), +} + +var _ksc = [93][94]uint16{ + 0: { + 0: uint16(12288), + 1: uint16(12289), + 2: uint16(12290), + 3: uint16(183), + 4: uint16(8229), + 5: uint16(8230), + 6: uint16(168), + 7: uint16(12291), + 8: uint16(173), + 9: uint16(8213), + 10: uint16(8741), + 11: uint16(65340), + 12: uint16(8764), + 13: uint16(8216), + 14: uint16(8217), + 15: uint16(8220), + 16: uint16(8221), + 17: uint16(12308), + 18: uint16(12309), + 19: uint16(12296), + 20: uint16(12297), + 21: uint16(12298), + 22: uint16(12299), + 23: uint16(12300), + 24: uint16(12301), + 25: uint16(12302), + 26: uint16(12303), + 27: uint16(12304), + 28: uint16(12305), + 29: uint16(177), + 30: uint16(215), + 31: uint16(247), + 32: uint16(8800), + 33: uint16(8804), + 34: uint16(8805), + 35: uint16(8734), + 36: uint16(8756), + 37: uint16(176), + 38: uint16(8242), + 39: uint16(8243), + 40: uint16(8451), + 41: uint16(8491), + 42: uint16(65504), + 43: uint16(65505), + 44: uint16(65509), + 45: uint16(9794), + 46: uint16(9792), + 47: uint16(8736), + 48: uint16(8869), + 49: uint16(8978), + 50: uint16(8706), + 51: uint16(8711), + 52: uint16(8801), + 53: uint16(8786), + 54: uint16(167), + 55: uint16(8251), + 56: uint16(9734), + 57: uint16(9733), + 58: uint16(9675), + 59: uint16(9679), + 60: uint16(9678), + 61: uint16(9671), + 62: uint16(9670), + 63: uint16(9633), + 64: uint16(9632), + 65: uint16(9651), + 66: uint16(9650), + 67: uint16(9661), + 68: uint16(9660), + 69: uint16(8594), + 70: uint16(8592), + 71: uint16(8593), + 72: uint16(8595), + 73: uint16(8596), + 74: uint16(12307), + 75: uint16(8810), + 76: uint16(8811), + 77: uint16(8730), + 78: uint16(8765), + 79: uint16(8733), + 80: uint16(8757), + 81: uint16(8747), + 82: uint16(8748), + 83: uint16(8712), + 84: uint16(8715), + 85: uint16(8838), + 86: uint16(8839), + 87: uint16(8834), + 88: uint16(8835), + 89: uint16(8746), + 90: uint16(8745), + 91: uint16(8743), + 92: uint16(8744), + 93: uint16(65506), + }, + 1: { + 0: uint16(8658), + 1: uint16(8660), + 2: uint16(8704), + 3: uint16(8707), + 4: uint16(180), + 5: uint16(65374), + 6: uint16(711), + 7: uint16(728), + 8: uint16(733), + 9: uint16(730), + 10: uint16(729), + 11: uint16(184), + 12: uint16(731), + 13: uint16(161), + 14: uint16(191), + 15: uint16(720), + 16: uint16(8750), + 17: uint16(8721), + 18: uint16(8719), + 19: uint16(164), + 20: uint16(8457), + 21: uint16(8240), + 22: uint16(9665), + 23: uint16(9664), + 24: uint16(9655), + 25: uint16(9654), + 26: uint16(9828), + 27: uint16(9824), + 28: uint16(9825), + 29: uint16(9829), + 30: uint16(9831), + 31: uint16(9827), + 32: uint16(8857), + 33: uint16(9672), + 34: uint16(9635), + 35: uint16(9680), + 36: uint16(9681), + 37: uint16(9618), + 38: uint16(9636), + 39: uint16(9637), + 40: uint16(9640), + 41: uint16(9639), + 42: uint16(9638), + 43: uint16(9641), + 44: uint16(9832), + 45: uint16(9743), + 46: uint16(9742), + 47: uint16(9756), + 48: uint16(9758), + 49: uint16(182), + 50: uint16(8224), + 51: uint16(8225), + 52: uint16(8597), + 53: uint16(8599), + 54: uint16(8601), + 55: uint16(8598), + 56: uint16(8600), + 57: uint16(9837), + 58: uint16(9833), + 59: uint16(9834), + 60: uint16(9836), + 61: uint16(12927), + 62: uint16(12828), + 63: uint16(8470), + 64: uint16(13255), + 65: uint16(8482), + 66: uint16(13250), + 67: uint16(13272), + 68: uint16(8481), + 69: uint16(8364), + 70: uint16(174), + }, + 2: { + 0: uint16(65281), + 1: uint16(65282), + 2: uint16(65283), + 3: uint16(65284), + 4: uint16(65285), + 5: uint16(65286), + 6: uint16(65287), + 7: uint16(65288), + 8: uint16(65289), + 9: uint16(65290), + 10: uint16(65291), + 11: uint16(65292), + 12: uint16(65293), + 13: uint16(65294), + 14: uint16(65295), + 15: uint16(65296), + 16: uint16(65297), + 17: uint16(65298), + 18: uint16(65299), + 19: uint16(65300), + 20: uint16(65301), + 21: uint16(65302), + 22: uint16(65303), + 23: uint16(65304), + 24: uint16(65305), + 25: uint16(65306), + 26: uint16(65307), + 27: uint16(65308), + 28: uint16(65309), + 29: uint16(65310), + 30: uint16(65311), + 31: uint16(65312), + 32: uint16(65313), + 33: uint16(65314), + 34: uint16(65315), + 35: uint16(65316), + 36: uint16(65317), + 37: uint16(65318), + 38: uint16(65319), + 39: uint16(65320), + 40: uint16(65321), + 41: uint16(65322), + 42: uint16(65323), + 43: uint16(65324), + 44: uint16(65325), + 45: uint16(65326), + 46: uint16(65327), + 47: uint16(65328), + 48: uint16(65329), + 49: uint16(65330), + 50: uint16(65331), + 51: uint16(65332), + 52: uint16(65333), + 53: uint16(65334), + 54: uint16(65335), + 55: uint16(65336), + 56: uint16(65337), + 57: uint16(65338), + 58: uint16(65339), + 59: uint16(65510), + 60: uint16(65341), + 61: uint16(65342), + 62: uint16(65343), + 63: uint16(65344), + 64: uint16(65345), + 65: uint16(65346), + 66: uint16(65347), + 67: uint16(65348), + 68: uint16(65349), + 69: uint16(65350), + 70: uint16(65351), + 71: uint16(65352), + 72: uint16(65353), + 73: uint16(65354), + 74: uint16(65355), + 75: uint16(65356), + 76: uint16(65357), + 77: uint16(65358), + 78: uint16(65359), + 79: uint16(65360), + 80: uint16(65361), + 81: uint16(65362), + 82: uint16(65363), + 83: uint16(65364), + 84: uint16(65365), + 85: uint16(65366), + 86: uint16(65367), + 87: uint16(65368), + 88: uint16(65369), + 89: uint16(65370), + 90: uint16(65371), + 91: uint16(65372), + 92: uint16(65373), + 93: uint16(65507), + }, + 3: { + 0: uint16(12593), + 1: uint16(12594), + 2: uint16(12595), + 3: uint16(12596), + 4: uint16(12597), + 5: uint16(12598), + 6: uint16(12599), + 7: uint16(12600), + 8: uint16(12601), + 9: uint16(12602), + 10: uint16(12603), + 11: uint16(12604), + 12: uint16(12605), + 13: uint16(12606), + 14: uint16(12607), + 15: uint16(12608), + 16: uint16(12609), + 17: uint16(12610), + 18: uint16(12611), + 19: uint16(12612), + 20: uint16(12613), + 21: uint16(12614), + 22: uint16(12615), + 23: uint16(12616), + 24: uint16(12617), + 25: uint16(12618), + 26: uint16(12619), + 27: uint16(12620), + 28: uint16(12621), + 29: uint16(12622), + 30: uint16(12623), + 31: uint16(12624), + 32: uint16(12625), + 33: uint16(12626), + 34: uint16(12627), + 35: uint16(12628), + 36: uint16(12629), + 37: uint16(12630), + 38: uint16(12631), + 39: uint16(12632), + 40: uint16(12633), + 41: uint16(12634), + 42: uint16(12635), + 43: uint16(12636), + 44: uint16(12637), + 45: uint16(12638), + 46: uint16(12639), + 47: uint16(12640), + 48: uint16(12641), + 49: uint16(12642), + 50: uint16(12643), + 51: uint16(12644), + 52: uint16(12645), + 53: uint16(12646), + 54: uint16(12647), + 55: uint16(12648), + 56: uint16(12649), + 57: uint16(12650), + 58: uint16(12651), + 59: uint16(12652), + 60: uint16(12653), + 61: uint16(12654), + 62: uint16(12655), + 63: uint16(12656), + 64: uint16(12657), + 65: uint16(12658), + 66: uint16(12659), + 67: uint16(12660), + 68: uint16(12661), + 69: uint16(12662), + 70: uint16(12663), + 71: uint16(12664), + 72: uint16(12665), + 73: uint16(12666), + 74: uint16(12667), + 75: uint16(12668), + 76: uint16(12669), + 77: uint16(12670), + 78: uint16(12671), + 79: uint16(12672), + 80: uint16(12673), + 81: uint16(12674), + 82: uint16(12675), + 83: uint16(12676), + 84: uint16(12677), + 85: uint16(12678), + 86: uint16(12679), + 87: uint16(12680), + 88: uint16(12681), + 89: uint16(12682), + 90: uint16(12683), + 91: uint16(12684), + 92: uint16(12685), + 93: uint16(12686), + }, + 4: { + 0: uint16(8560), + 1: uint16(8561), + 2: uint16(8562), + 3: uint16(8563), + 4: uint16(8564), + 5: uint16(8565), + 6: uint16(8566), + 7: uint16(8567), + 8: uint16(8568), + 9: uint16(8569), + 15: uint16(8544), + 16: uint16(8545), + 17: uint16(8546), + 18: uint16(8547), + 19: uint16(8548), + 20: uint16(8549), + 21: uint16(8550), + 22: uint16(8551), + 23: uint16(8552), + 24: uint16(8553), + 32: uint16(913), + 33: uint16(914), + 34: uint16(915), + 35: uint16(916), + 36: uint16(917), + 37: uint16(918), + 38: uint16(919), + 39: uint16(920), + 40: uint16(921), + 41: uint16(922), + 42: uint16(923), + 43: uint16(924), + 44: uint16(925), + 45: uint16(926), + 46: uint16(927), + 47: uint16(928), + 48: uint16(929), + 49: uint16(931), + 50: uint16(932), + 51: uint16(933), + 52: uint16(934), + 53: uint16(935), + 54: uint16(936), + 55: uint16(937), + 64: uint16(945), + 65: uint16(946), + 66: uint16(947), + 67: uint16(948), + 68: uint16(949), + 69: uint16(950), + 70: uint16(951), + 71: uint16(952), + 72: uint16(953), + 73: uint16(954), + 74: uint16(955), + 75: uint16(956), + 76: uint16(957), + 77: uint16(958), + 78: uint16(959), + 79: uint16(960), + 80: uint16(961), + 81: uint16(963), + 82: uint16(964), + 83: uint16(965), + 84: uint16(966), + 85: uint16(967), + 86: uint16(968), + 87: uint16(969), + }, + 5: { + 0: uint16(9472), + 1: uint16(9474), + 2: uint16(9484), + 3: uint16(9488), + 4: uint16(9496), + 5: uint16(9492), + 6: uint16(9500), + 7: uint16(9516), + 8: uint16(9508), + 9: uint16(9524), + 10: uint16(9532), + 11: uint16(9473), + 12: uint16(9475), + 13: uint16(9487), + 14: uint16(9491), + 15: uint16(9499), + 16: uint16(9495), + 17: uint16(9507), + 18: uint16(9523), + 19: uint16(9515), + 20: uint16(9531), + 21: uint16(9547), + 22: uint16(9504), + 23: uint16(9519), + 24: uint16(9512), + 25: uint16(9527), + 26: uint16(9535), + 27: uint16(9501), + 28: uint16(9520), + 29: uint16(9509), + 30: uint16(9528), + 31: uint16(9538), + 32: uint16(9490), + 33: uint16(9489), + 34: uint16(9498), + 35: uint16(9497), + 36: uint16(9494), + 37: uint16(9493), + 38: uint16(9486), + 39: uint16(9485), + 40: uint16(9502), + 41: uint16(9503), + 42: uint16(9505), + 43: uint16(9506), + 44: uint16(9510), + 45: uint16(9511), + 46: uint16(9513), + 47: uint16(9514), + 48: uint16(9517), + 49: uint16(9518), + 50: uint16(9521), + 51: uint16(9522), + 52: uint16(9525), + 53: uint16(9526), + 54: uint16(9529), + 55: uint16(9530), + 56: uint16(9533), + 57: uint16(9534), + 58: uint16(9536), + 59: uint16(9537), + 60: uint16(9539), + 61: uint16(9540), + 62: uint16(9541), + 63: uint16(9542), + 64: uint16(9543), + 65: uint16(9544), + 66: uint16(9545), + 67: uint16(9546), + }, + 6: { + 0: uint16(13205), + 1: uint16(13206), + 2: uint16(13207), + 3: uint16(8467), + 4: uint16(13208), + 5: uint16(13252), + 6: uint16(13219), + 7: uint16(13220), + 8: uint16(13221), + 9: uint16(13222), + 10: uint16(13209), + 11: uint16(13210), + 12: uint16(13211), + 13: uint16(13212), + 14: uint16(13213), + 15: uint16(13214), + 16: uint16(13215), + 17: uint16(13216), + 18: uint16(13217), + 19: uint16(13218), + 20: uint16(13258), + 21: uint16(13197), + 22: uint16(13198), + 23: uint16(13199), + 24: uint16(13263), + 25: uint16(13192), + 26: uint16(13193), + 27: uint16(13256), + 28: uint16(13223), + 29: uint16(13224), + 30: uint16(13232), + 31: uint16(13233), + 32: uint16(13234), + 33: uint16(13235), + 34: uint16(13236), + 35: uint16(13237), + 36: uint16(13238), + 37: uint16(13239), + 38: uint16(13240), + 39: uint16(13241), + 40: uint16(13184), + 41: uint16(13185), + 42: uint16(13186), + 43: uint16(13187), + 44: uint16(13188), + 45: uint16(13242), + 46: uint16(13243), + 47: uint16(13244), + 48: uint16(13245), + 49: uint16(13246), + 50: uint16(13247), + 51: uint16(13200), + 52: uint16(13201), + 53: uint16(13202), + 54: uint16(13203), + 55: uint16(13204), + 56: uint16(8486), + 57: uint16(13248), + 58: uint16(13249), + 59: uint16(13194), + 60: uint16(13195), + 61: uint16(13196), + 62: uint16(13270), + 63: uint16(13253), + 64: uint16(13229), + 65: uint16(13230), + 66: uint16(13231), + 67: uint16(13275), + 68: uint16(13225), + 69: uint16(13226), + 70: uint16(13227), + 71: uint16(13228), + 72: uint16(13277), + 73: uint16(13264), + 74: uint16(13267), + 75: uint16(13251), + 76: uint16(13257), + 77: uint16(13276), + 78: uint16(13254), + }, + 7: { + 0: uint16(198), + 1: uint16(208), + 2: uint16(170), + 3: uint16(294), + 5: uint16(306), + 7: uint16(319), + 8: uint16(321), + 9: uint16(216), + 10: uint16(338), + 11: uint16(186), + 12: uint16(222), + 13: uint16(358), + 14: uint16(330), + 16: uint16(12896), + 17: uint16(12897), + 18: uint16(12898), + 19: uint16(12899), + 20: uint16(12900), + 21: uint16(12901), + 22: uint16(12902), + 23: uint16(12903), + 24: uint16(12904), + 25: uint16(12905), + 26: uint16(12906), + 27: uint16(12907), + 28: uint16(12908), + 29: uint16(12909), + 30: uint16(12910), + 31: uint16(12911), + 32: uint16(12912), + 33: uint16(12913), + 34: uint16(12914), + 35: uint16(12915), + 36: uint16(12916), + 37: uint16(12917), + 38: uint16(12918), + 39: uint16(12919), + 40: uint16(12920), + 41: uint16(12921), + 42: uint16(12922), + 43: uint16(12923), + 44: uint16(9424), + 45: uint16(9425), + 46: uint16(9426), + 47: uint16(9427), + 48: uint16(9428), + 49: uint16(9429), + 50: uint16(9430), + 51: uint16(9431), + 52: uint16(9432), + 53: uint16(9433), + 54: uint16(9434), + 55: uint16(9435), + 56: uint16(9436), + 57: uint16(9437), + 58: uint16(9438), + 59: uint16(9439), + 60: uint16(9440), + 61: uint16(9441), + 62: uint16(9442), + 63: uint16(9443), + 64: uint16(9444), + 65: uint16(9445), + 66: uint16(9446), + 67: uint16(9447), + 68: uint16(9448), + 69: uint16(9449), + 70: uint16(9312), + 71: uint16(9313), + 72: uint16(9314), + 73: uint16(9315), + 74: uint16(9316), + 75: uint16(9317), + 76: uint16(9318), + 77: uint16(9319), + 78: uint16(9320), + 79: uint16(9321), + 80: uint16(9322), + 81: uint16(9323), + 82: uint16(9324), + 83: uint16(9325), + 84: uint16(9326), + 85: uint16(189), + 86: uint16(8531), + 87: uint16(8532), + 88: uint16(188), + 89: uint16(190), + 90: uint16(8539), + 91: uint16(8540), + 92: uint16(8541), + 93: uint16(8542), + }, + 8: { + 0: uint16(230), + 1: uint16(273), + 2: uint16(240), + 3: uint16(295), + 4: uint16(305), + 5: uint16(307), + 6: uint16(312), + 7: uint16(320), + 8: uint16(322), + 9: uint16(248), + 10: uint16(339), + 11: uint16(223), + 12: uint16(254), + 13: uint16(359), + 14: uint16(331), + 15: uint16(329), + 16: uint16(12800), + 17: uint16(12801), + 18: uint16(12802), + 19: uint16(12803), + 20: uint16(12804), + 21: uint16(12805), + 22: uint16(12806), + 23: uint16(12807), + 24: uint16(12808), + 25: uint16(12809), + 26: uint16(12810), + 27: uint16(12811), + 28: uint16(12812), + 29: uint16(12813), + 30: uint16(12814), + 31: uint16(12815), + 32: uint16(12816), + 33: uint16(12817), + 34: uint16(12818), + 35: uint16(12819), + 36: uint16(12820), + 37: uint16(12821), + 38: uint16(12822), + 39: uint16(12823), + 40: uint16(12824), + 41: uint16(12825), + 42: uint16(12826), + 43: uint16(12827), + 44: uint16(9372), + 45: uint16(9373), + 46: uint16(9374), + 47: uint16(9375), + 48: uint16(9376), + 49: uint16(9377), + 50: uint16(9378), + 51: uint16(9379), + 52: uint16(9380), + 53: uint16(9381), + 54: uint16(9382), + 55: uint16(9383), + 56: uint16(9384), + 57: uint16(9385), + 58: uint16(9386), + 59: uint16(9387), + 60: uint16(9388), + 61: uint16(9389), + 62: uint16(9390), + 63: uint16(9391), + 64: uint16(9392), + 65: uint16(9393), + 66: uint16(9394), + 67: uint16(9395), + 68: uint16(9396), + 69: uint16(9397), + 70: uint16(9332), + 71: uint16(9333), + 72: uint16(9334), + 73: uint16(9335), + 74: uint16(9336), + 75: uint16(9337), + 76: uint16(9338), + 77: uint16(9339), + 78: uint16(9340), + 79: uint16(9341), + 80: uint16(9342), + 81: uint16(9343), + 82: uint16(9344), + 83: uint16(9345), + 84: uint16(9346), + 85: uint16(185), + 86: uint16(178), + 87: uint16(179), + 88: uint16(8308), + 89: uint16(8319), + 90: uint16(8321), + 91: uint16(8322), + 92: uint16(8323), + 93: uint16(8324), + }, + 9: { + 0: uint16(12353), + 1: uint16(12354), + 2: uint16(12355), + 3: uint16(12356), + 4: uint16(12357), + 5: uint16(12358), + 6: uint16(12359), + 7: uint16(12360), + 8: uint16(12361), + 9: uint16(12362), + 10: uint16(12363), + 11: uint16(12364), + 12: uint16(12365), + 13: uint16(12366), + 14: uint16(12367), + 15: uint16(12368), + 16: uint16(12369), + 17: uint16(12370), + 18: uint16(12371), + 19: uint16(12372), + 20: uint16(12373), + 21: uint16(12374), + 22: uint16(12375), + 23: uint16(12376), + 24: uint16(12377), + 25: uint16(12378), + 26: uint16(12379), + 27: uint16(12380), + 28: uint16(12381), + 29: uint16(12382), + 30: uint16(12383), + 31: uint16(12384), + 32: uint16(12385), + 33: uint16(12386), + 34: uint16(12387), + 35: uint16(12388), + 36: uint16(12389), + 37: uint16(12390), + 38: uint16(12391), + 39: uint16(12392), + 40: uint16(12393), + 41: uint16(12394), + 42: uint16(12395), + 43: uint16(12396), + 44: uint16(12397), + 45: uint16(12398), + 46: uint16(12399), + 47: uint16(12400), + 48: uint16(12401), + 49: uint16(12402), + 50: uint16(12403), + 51: uint16(12404), + 52: uint16(12405), + 53: uint16(12406), + 54: uint16(12407), + 55: uint16(12408), + 56: uint16(12409), + 57: uint16(12410), + 58: uint16(12411), + 59: uint16(12412), + 60: uint16(12413), + 61: uint16(12414), + 62: uint16(12415), + 63: uint16(12416), + 64: uint16(12417), + 65: uint16(12418), + 66: uint16(12419), + 67: uint16(12420), + 68: uint16(12421), + 69: uint16(12422), + 70: uint16(12423), + 71: uint16(12424), + 72: uint16(12425), + 73: uint16(12426), + 74: uint16(12427), + 75: uint16(12428), + 76: uint16(12429), + 77: uint16(12430), + 78: uint16(12431), + 79: uint16(12432), + 80: uint16(12433), + 81: uint16(12434), + 82: uint16(12435), + }, + 10: { + 0: uint16(12449), + 1: uint16(12450), + 2: uint16(12451), + 3: uint16(12452), + 4: uint16(12453), + 5: uint16(12454), + 6: uint16(12455), + 7: uint16(12456), + 8: uint16(12457), + 9: uint16(12458), + 10: uint16(12459), + 11: uint16(12460), + 12: uint16(12461), + 13: uint16(12462), + 14: uint16(12463), + 15: uint16(12464), + 16: uint16(12465), + 17: uint16(12466), + 18: uint16(12467), + 19: uint16(12468), + 20: uint16(12469), + 21: uint16(12470), + 22: uint16(12471), + 23: uint16(12472), + 24: uint16(12473), + 25: uint16(12474), + 26: uint16(12475), + 27: uint16(12476), + 28: uint16(12477), + 29: uint16(12478), + 30: uint16(12479), + 31: uint16(12480), + 32: uint16(12481), + 33: uint16(12482), + 34: uint16(12483), + 35: uint16(12484), + 36: uint16(12485), + 37: uint16(12486), + 38: uint16(12487), + 39: uint16(12488), + 40: uint16(12489), + 41: uint16(12490), + 42: uint16(12491), + 43: uint16(12492), + 44: uint16(12493), + 45: uint16(12494), + 46: uint16(12495), + 47: uint16(12496), + 48: uint16(12497), + 49: uint16(12498), + 50: uint16(12499), + 51: uint16(12500), + 52: uint16(12501), + 53: uint16(12502), + 54: uint16(12503), + 55: uint16(12504), + 56: uint16(12505), + 57: uint16(12506), + 58: uint16(12507), + 59: uint16(12508), + 60: uint16(12509), + 61: uint16(12510), + 62: uint16(12511), + 63: uint16(12512), + 64: uint16(12513), + 65: uint16(12514), + 66: uint16(12515), + 67: uint16(12516), + 68: uint16(12517), + 69: uint16(12518), + 70: uint16(12519), + 71: uint16(12520), + 72: uint16(12521), + 73: uint16(12522), + 74: uint16(12523), + 75: uint16(12524), + 76: uint16(12525), + 77: uint16(12526), + 78: uint16(12527), + 79: uint16(12528), + 80: uint16(12529), + 81: uint16(12530), + 82: uint16(12531), + 83: uint16(12532), + 84: uint16(12533), + 85: uint16(12534), + }, + 11: { + 0: uint16(1040), + 1: uint16(1041), + 2: uint16(1042), + 3: uint16(1043), + 4: uint16(1044), + 5: uint16(1045), + 6: uint16(1025), + 7: uint16(1046), + 8: uint16(1047), + 9: uint16(1048), + 10: uint16(1049), + 11: uint16(1050), + 12: uint16(1051), + 13: uint16(1052), + 14: uint16(1053), + 15: uint16(1054), + 16: uint16(1055), + 17: uint16(1056), + 18: uint16(1057), + 19: uint16(1058), + 20: uint16(1059), + 21: uint16(1060), + 22: uint16(1061), + 23: uint16(1062), + 24: uint16(1063), + 25: uint16(1064), + 26: uint16(1065), + 27: uint16(1066), + 28: uint16(1067), + 29: uint16(1068), + 30: uint16(1069), + 31: uint16(1070), + 32: uint16(1071), + 48: uint16(1072), + 49: uint16(1073), + 50: uint16(1074), + 51: uint16(1075), + 52: uint16(1076), + 53: uint16(1077), + 54: uint16(1105), + 55: uint16(1078), + 56: uint16(1079), + 57: uint16(1080), + 58: uint16(1081), + 59: uint16(1082), + 60: uint16(1083), + 61: uint16(1084), + 62: uint16(1085), + 63: uint16(1086), + 64: uint16(1087), + 65: uint16(1088), + 66: uint16(1089), + 67: uint16(1090), + 68: uint16(1091), + 69: uint16(1092), + 70: uint16(1093), + 71: uint16(1094), + 72: uint16(1095), + 73: uint16(1096), + 74: uint16(1097), + 75: uint16(1098), + 76: uint16(1099), + 77: uint16(1100), + 78: uint16(1101), + 79: uint16(1102), + 80: uint16(1103), + }, + 12: {}, + 13: {}, + 14: {}, + 15: { + 0: uint16(44032), + 1: uint16(44033), + 2: uint16(44036), + 3: uint16(44039), + 4: uint16(44040), + 5: uint16(44041), + 6: uint16(44042), + 7: uint16(44048), + 8: uint16(44049), + 9: uint16(44050), + 10: uint16(44051), + 11: uint16(44052), + 12: uint16(44053), + 13: uint16(44054), + 14: uint16(44055), + 15: uint16(44057), + 16: uint16(44058), + 17: uint16(44059), + 18: uint16(44060), + 19: uint16(44061), + 20: uint16(44064), + 21: uint16(44068), + 22: uint16(44076), + 23: uint16(44077), + 24: uint16(44079), + 25: uint16(44080), + 26: uint16(44081), + 27: uint16(44088), + 28: uint16(44089), + 29: uint16(44092), + 30: uint16(44096), + 31: uint16(44107), + 32: uint16(44109), + 33: uint16(44116), + 34: uint16(44120), + 35: uint16(44124), + 36: uint16(44144), + 37: uint16(44145), + 38: uint16(44148), + 39: uint16(44151), + 40: uint16(44152), + 41: uint16(44154), + 42: uint16(44160), + 43: uint16(44161), + 44: uint16(44163), + 45: uint16(44164), + 46: uint16(44165), + 47: uint16(44166), + 48: uint16(44169), + 49: uint16(44170), + 50: uint16(44171), + 51: uint16(44172), + 52: uint16(44176), + 53: uint16(44180), + 54: uint16(44188), + 55: uint16(44189), + 56: uint16(44191), + 57: uint16(44192), + 58: uint16(44193), + 59: uint16(44200), + 60: uint16(44201), + 61: uint16(44202), + 62: uint16(44204), + 63: uint16(44207), + 64: uint16(44208), + 65: uint16(44216), + 66: uint16(44217), + 67: uint16(44219), + 68: uint16(44220), + 69: uint16(44221), + 70: uint16(44225), + 71: uint16(44228), + 72: uint16(44232), + 73: uint16(44236), + 74: uint16(44245), + 75: uint16(44247), + 76: uint16(44256), + 77: uint16(44257), + 78: uint16(44260), + 79: uint16(44263), + 80: uint16(44264), + 81: uint16(44266), + 82: uint16(44268), + 83: uint16(44271), + 84: uint16(44272), + 85: uint16(44273), + 86: uint16(44275), + 87: uint16(44277), + 88: uint16(44278), + 89: uint16(44284), + 90: uint16(44285), + 91: uint16(44288), + 92: uint16(44292), + 93: uint16(44294), + }, + 16: { + 0: uint16(44300), + 1: uint16(44301), + 2: uint16(44303), + 3: uint16(44305), + 4: uint16(44312), + 5: uint16(44316), + 6: uint16(44320), + 7: uint16(44329), + 8: uint16(44332), + 9: uint16(44333), + 10: uint16(44340), + 11: uint16(44341), + 12: uint16(44344), + 13: uint16(44348), + 14: uint16(44356), + 15: uint16(44357), + 16: uint16(44359), + 17: uint16(44361), + 18: uint16(44368), + 19: uint16(44372), + 20: uint16(44376), + 21: uint16(44385), + 22: uint16(44387), + 23: uint16(44396), + 24: uint16(44397), + 25: uint16(44400), + 26: uint16(44403), + 27: uint16(44404), + 28: uint16(44405), + 29: uint16(44406), + 30: uint16(44411), + 31: uint16(44412), + 32: uint16(44413), + 33: uint16(44415), + 34: uint16(44417), + 35: uint16(44418), + 36: uint16(44424), + 37: uint16(44425), + 38: uint16(44428), + 39: uint16(44432), + 40: uint16(44444), + 41: uint16(44445), + 42: uint16(44452), + 43: uint16(44471), + 44: uint16(44480), + 45: uint16(44481), + 46: uint16(44484), + 47: uint16(44488), + 48: uint16(44496), + 49: uint16(44497), + 50: uint16(44499), + 51: uint16(44508), + 52: uint16(44512), + 53: uint16(44516), + 54: uint16(44536), + 55: uint16(44537), + 56: uint16(44540), + 57: uint16(44543), + 58: uint16(44544), + 59: uint16(44545), + 60: uint16(44552), + 61: uint16(44553), + 62: uint16(44555), + 63: uint16(44557), + 64: uint16(44564), + 65: uint16(44592), + 66: uint16(44593), + 67: uint16(44596), + 68: uint16(44599), + 69: uint16(44600), + 70: uint16(44602), + 71: uint16(44608), + 72: uint16(44609), + 73: uint16(44611), + 74: uint16(44613), + 75: uint16(44614), + 76: uint16(44618), + 77: uint16(44620), + 78: uint16(44621), + 79: uint16(44622), + 80: uint16(44624), + 81: uint16(44628), + 82: uint16(44630), + 83: uint16(44636), + 84: uint16(44637), + 85: uint16(44639), + 86: uint16(44640), + 87: uint16(44641), + 88: uint16(44645), + 89: uint16(44648), + 90: uint16(44649), + 91: uint16(44652), + 92: uint16(44656), + 93: uint16(44664), + }, + 17: { + 0: uint16(44665), + 1: uint16(44667), + 2: uint16(44668), + 3: uint16(44669), + 4: uint16(44676), + 5: uint16(44677), + 6: uint16(44684), + 7: uint16(44732), + 8: uint16(44733), + 9: uint16(44734), + 10: uint16(44736), + 11: uint16(44740), + 12: uint16(44748), + 13: uint16(44749), + 14: uint16(44751), + 15: uint16(44752), + 16: uint16(44753), + 17: uint16(44760), + 18: uint16(44761), + 19: uint16(44764), + 20: uint16(44776), + 21: uint16(44779), + 22: uint16(44781), + 23: uint16(44788), + 24: uint16(44792), + 25: uint16(44796), + 26: uint16(44807), + 27: uint16(44808), + 28: uint16(44813), + 29: uint16(44816), + 30: uint16(44844), + 31: uint16(44845), + 32: uint16(44848), + 33: uint16(44850), + 34: uint16(44852), + 35: uint16(44860), + 36: uint16(44861), + 37: uint16(44863), + 38: uint16(44865), + 39: uint16(44866), + 40: uint16(44867), + 41: uint16(44872), + 42: uint16(44873), + 43: uint16(44880), + 44: uint16(44892), + 45: uint16(44893), + 46: uint16(44900), + 47: uint16(44901), + 48: uint16(44921), + 49: uint16(44928), + 50: uint16(44932), + 51: uint16(44936), + 52: uint16(44944), + 53: uint16(44945), + 54: uint16(44949), + 55: uint16(44956), + 56: uint16(44984), + 57: uint16(44985), + 58: uint16(44988), + 59: uint16(44992), + 60: uint16(44999), + 61: uint16(45000), + 62: uint16(45001), + 63: uint16(45003), + 64: uint16(45005), + 65: uint16(45006), + 66: uint16(45012), + 67: uint16(45020), + 68: uint16(45032), + 69: uint16(45033), + 70: uint16(45040), + 71: uint16(45041), + 72: uint16(45044), + 73: uint16(45048), + 74: uint16(45056), + 75: uint16(45057), + 76: uint16(45060), + 77: uint16(45068), + 78: uint16(45072), + 79: uint16(45076), + 80: uint16(45084), + 81: uint16(45085), + 82: uint16(45096), + 83: uint16(45124), + 84: uint16(45125), + 85: uint16(45128), + 86: uint16(45130), + 87: uint16(45132), + 88: uint16(45134), + 89: uint16(45139), + 90: uint16(45140), + 91: uint16(45141), + 92: uint16(45143), + 93: uint16(45145), + }, + 18: { + 0: uint16(45149), + 1: uint16(45180), + 2: uint16(45181), + 3: uint16(45184), + 4: uint16(45188), + 5: uint16(45196), + 6: uint16(45197), + 7: uint16(45199), + 8: uint16(45201), + 9: uint16(45208), + 10: uint16(45209), + 11: uint16(45210), + 12: uint16(45212), + 13: uint16(45215), + 14: uint16(45216), + 15: uint16(45217), + 16: uint16(45218), + 17: uint16(45224), + 18: uint16(45225), + 19: uint16(45227), + 20: uint16(45228), + 21: uint16(45229), + 22: uint16(45230), + 23: uint16(45231), + 24: uint16(45233), + 25: uint16(45235), + 26: uint16(45236), + 27: uint16(45237), + 28: uint16(45240), + 29: uint16(45244), + 30: uint16(45252), + 31: uint16(45253), + 32: uint16(45255), + 33: uint16(45256), + 34: uint16(45257), + 35: uint16(45264), + 36: uint16(45265), + 37: uint16(45268), + 38: uint16(45272), + 39: uint16(45280), + 40: uint16(45285), + 41: uint16(45320), + 42: uint16(45321), + 43: uint16(45323), + 44: uint16(45324), + 45: uint16(45328), + 46: uint16(45330), + 47: uint16(45331), + 48: uint16(45336), + 49: uint16(45337), + 50: uint16(45339), + 51: uint16(45340), + 52: uint16(45341), + 53: uint16(45347), + 54: uint16(45348), + 55: uint16(45349), + 56: uint16(45352), + 57: uint16(45356), + 58: uint16(45364), + 59: uint16(45365), + 60: uint16(45367), + 61: uint16(45368), + 62: uint16(45369), + 63: uint16(45376), + 64: uint16(45377), + 65: uint16(45380), + 66: uint16(45384), + 67: uint16(45392), + 68: uint16(45393), + 69: uint16(45396), + 70: uint16(45397), + 71: uint16(45400), + 72: uint16(45404), + 73: uint16(45408), + 74: uint16(45432), + 75: uint16(45433), + 76: uint16(45436), + 77: uint16(45440), + 78: uint16(45442), + 79: uint16(45448), + 80: uint16(45449), + 81: uint16(45451), + 82: uint16(45453), + 83: uint16(45458), + 84: uint16(45459), + 85: uint16(45460), + 86: uint16(45464), + 87: uint16(45468), + 88: uint16(45480), + 89: uint16(45516), + 90: uint16(45520), + 91: uint16(45524), + 92: uint16(45532), + 93: uint16(45533), + }, + 19: { + 0: uint16(45535), + 1: uint16(45544), + 2: uint16(45545), + 3: uint16(45548), + 4: uint16(45552), + 5: uint16(45561), + 6: uint16(45563), + 7: uint16(45565), + 8: uint16(45572), + 9: uint16(45573), + 10: uint16(45576), + 11: uint16(45579), + 12: uint16(45580), + 13: uint16(45588), + 14: uint16(45589), + 15: uint16(45591), + 16: uint16(45593), + 17: uint16(45600), + 18: uint16(45620), + 19: uint16(45628), + 20: uint16(45656), + 21: uint16(45660), + 22: uint16(45664), + 23: uint16(45672), + 24: uint16(45673), + 25: uint16(45684), + 26: uint16(45685), + 27: uint16(45692), + 28: uint16(45700), + 29: uint16(45701), + 30: uint16(45705), + 31: uint16(45712), + 32: uint16(45713), + 33: uint16(45716), + 34: uint16(45720), + 35: uint16(45721), + 36: uint16(45722), + 37: uint16(45728), + 38: uint16(45729), + 39: uint16(45731), + 40: uint16(45733), + 41: uint16(45734), + 42: uint16(45738), + 43: uint16(45740), + 44: uint16(45744), + 45: uint16(45748), + 46: uint16(45768), + 47: uint16(45769), + 48: uint16(45772), + 49: uint16(45776), + 50: uint16(45778), + 51: uint16(45784), + 52: uint16(45785), + 53: uint16(45787), + 54: uint16(45789), + 55: uint16(45794), + 56: uint16(45796), + 57: uint16(45797), + 58: uint16(45798), + 59: uint16(45800), + 60: uint16(45803), + 61: uint16(45804), + 62: uint16(45805), + 63: uint16(45806), + 64: uint16(45807), + 65: uint16(45811), + 66: uint16(45812), + 67: uint16(45813), + 68: uint16(45815), + 69: uint16(45816), + 70: uint16(45817), + 71: uint16(45818), + 72: uint16(45819), + 73: uint16(45823), + 74: uint16(45824), + 75: uint16(45825), + 76: uint16(45828), + 77: uint16(45832), + 78: uint16(45840), + 79: uint16(45841), + 80: uint16(45843), + 81: uint16(45844), + 82: uint16(45845), + 83: uint16(45852), + 84: uint16(45908), + 85: uint16(45909), + 86: uint16(45910), + 87: uint16(45912), + 88: uint16(45915), + 89: uint16(45916), + 90: uint16(45918), + 91: uint16(45919), + 92: uint16(45924), + 93: uint16(45925), + }, + 20: { + 0: uint16(45927), + 1: uint16(45929), + 2: uint16(45931), + 3: uint16(45934), + 4: uint16(45936), + 5: uint16(45937), + 6: uint16(45940), + 7: uint16(45944), + 8: uint16(45952), + 9: uint16(45953), + 10: uint16(45955), + 11: uint16(45956), + 12: uint16(45957), + 13: uint16(45964), + 14: uint16(45968), + 15: uint16(45972), + 16: uint16(45984), + 17: uint16(45985), + 18: uint16(45992), + 19: uint16(45996), + 20: uint16(46020), + 21: uint16(46021), + 22: uint16(46024), + 23: uint16(46027), + 24: uint16(46028), + 25: uint16(46030), + 26: uint16(46032), + 27: uint16(46036), + 28: uint16(46037), + 29: uint16(46039), + 30: uint16(46041), + 31: uint16(46043), + 32: uint16(46045), + 33: uint16(46048), + 34: uint16(46052), + 35: uint16(46056), + 36: uint16(46076), + 37: uint16(46096), + 38: uint16(46104), + 39: uint16(46108), + 40: uint16(46112), + 41: uint16(46120), + 42: uint16(46121), + 43: uint16(46123), + 44: uint16(46132), + 45: uint16(46160), + 46: uint16(46161), + 47: uint16(46164), + 48: uint16(46168), + 49: uint16(46176), + 50: uint16(46177), + 51: uint16(46179), + 52: uint16(46181), + 53: uint16(46188), + 54: uint16(46208), + 55: uint16(46216), + 56: uint16(46237), + 57: uint16(46244), + 58: uint16(46248), + 59: uint16(46252), + 60: uint16(46261), + 61: uint16(46263), + 62: uint16(46265), + 63: uint16(46272), + 64: uint16(46276), + 65: uint16(46280), + 66: uint16(46288), + 67: uint16(46293), + 68: uint16(46300), + 69: uint16(46301), + 70: uint16(46304), + 71: uint16(46307), + 72: uint16(46308), + 73: uint16(46310), + 74: uint16(46316), + 75: uint16(46317), + 76: uint16(46319), + 77: uint16(46321), + 78: uint16(46328), + 79: uint16(46356), + 80: uint16(46357), + 81: uint16(46360), + 82: uint16(46363), + 83: uint16(46364), + 84: uint16(46372), + 85: uint16(46373), + 86: uint16(46375), + 87: uint16(46376), + 88: uint16(46377), + 89: uint16(46378), + 90: uint16(46384), + 91: uint16(46385), + 92: uint16(46388), + 93: uint16(46392), + }, + 21: { + 0: uint16(46400), + 1: uint16(46401), + 2: uint16(46403), + 3: uint16(46404), + 4: uint16(46405), + 5: uint16(46411), + 6: uint16(46412), + 7: uint16(46413), + 8: uint16(46416), + 9: uint16(46420), + 10: uint16(46428), + 11: uint16(46429), + 12: uint16(46431), + 13: uint16(46432), + 14: uint16(46433), + 15: uint16(46496), + 16: uint16(46497), + 17: uint16(46500), + 18: uint16(46504), + 19: uint16(46506), + 20: uint16(46507), + 21: uint16(46512), + 22: uint16(46513), + 23: uint16(46515), + 24: uint16(46516), + 25: uint16(46517), + 26: uint16(46523), + 27: uint16(46524), + 28: uint16(46525), + 29: uint16(46528), + 30: uint16(46532), + 31: uint16(46540), + 32: uint16(46541), + 33: uint16(46543), + 34: uint16(46544), + 35: uint16(46545), + 36: uint16(46552), + 37: uint16(46572), + 38: uint16(46608), + 39: uint16(46609), + 40: uint16(46612), + 41: uint16(46616), + 42: uint16(46629), + 43: uint16(46636), + 44: uint16(46644), + 45: uint16(46664), + 46: uint16(46692), + 47: uint16(46696), + 48: uint16(46748), + 49: uint16(46749), + 50: uint16(46752), + 51: uint16(46756), + 52: uint16(46763), + 53: uint16(46764), + 54: uint16(46769), + 55: uint16(46804), + 56: uint16(46832), + 57: uint16(46836), + 58: uint16(46840), + 59: uint16(46848), + 60: uint16(46849), + 61: uint16(46853), + 62: uint16(46888), + 63: uint16(46889), + 64: uint16(46892), + 65: uint16(46895), + 66: uint16(46896), + 67: uint16(46904), + 68: uint16(46905), + 69: uint16(46907), + 70: uint16(46916), + 71: uint16(46920), + 72: uint16(46924), + 73: uint16(46932), + 74: uint16(46933), + 75: uint16(46944), + 76: uint16(46948), + 77: uint16(46952), + 78: uint16(46960), + 79: uint16(46961), + 80: uint16(46963), + 81: uint16(46965), + 82: uint16(46972), + 83: uint16(46973), + 84: uint16(46976), + 85: uint16(46980), + 86: uint16(46988), + 87: uint16(46989), + 88: uint16(46991), + 89: uint16(46992), + 90: uint16(46993), + 91: uint16(46994), + 92: uint16(46998), + 93: uint16(46999), + }, + 22: { + 0: uint16(47000), + 1: uint16(47001), + 2: uint16(47004), + 3: uint16(47008), + 4: uint16(47016), + 5: uint16(47017), + 6: uint16(47019), + 7: uint16(47020), + 8: uint16(47021), + 9: uint16(47028), + 10: uint16(47029), + 11: uint16(47032), + 12: uint16(47047), + 13: uint16(47049), + 14: uint16(47084), + 15: uint16(47085), + 16: uint16(47088), + 17: uint16(47092), + 18: uint16(47100), + 19: uint16(47101), + 20: uint16(47103), + 21: uint16(47104), + 22: uint16(47105), + 23: uint16(47111), + 24: uint16(47112), + 25: uint16(47113), + 26: uint16(47116), + 27: uint16(47120), + 28: uint16(47128), + 29: uint16(47129), + 30: uint16(47131), + 31: uint16(47133), + 32: uint16(47140), + 33: uint16(47141), + 34: uint16(47144), + 35: uint16(47148), + 36: uint16(47156), + 37: uint16(47157), + 38: uint16(47159), + 39: uint16(47160), + 40: uint16(47161), + 41: uint16(47168), + 42: uint16(47172), + 43: uint16(47185), + 44: uint16(47187), + 45: uint16(47196), + 46: uint16(47197), + 47: uint16(47200), + 48: uint16(47204), + 49: uint16(47212), + 50: uint16(47213), + 51: uint16(47215), + 52: uint16(47217), + 53: uint16(47224), + 54: uint16(47228), + 55: uint16(47245), + 56: uint16(47272), + 57: uint16(47280), + 58: uint16(47284), + 59: uint16(47288), + 60: uint16(47296), + 61: uint16(47297), + 62: uint16(47299), + 63: uint16(47301), + 64: uint16(47308), + 65: uint16(47312), + 66: uint16(47316), + 67: uint16(47325), + 68: uint16(47327), + 69: uint16(47329), + 70: uint16(47336), + 71: uint16(47337), + 72: uint16(47340), + 73: uint16(47344), + 74: uint16(47352), + 75: uint16(47353), + 76: uint16(47355), + 77: uint16(47357), + 78: uint16(47364), + 79: uint16(47384), + 80: uint16(47392), + 81: uint16(47420), + 82: uint16(47421), + 83: uint16(47424), + 84: uint16(47428), + 85: uint16(47436), + 86: uint16(47439), + 87: uint16(47441), + 88: uint16(47448), + 89: uint16(47449), + 90: uint16(47452), + 91: uint16(47456), + 92: uint16(47464), + 93: uint16(47465), + }, + 23: { + 0: uint16(47467), + 1: uint16(47469), + 2: uint16(47476), + 3: uint16(47477), + 4: uint16(47480), + 5: uint16(47484), + 6: uint16(47492), + 7: uint16(47493), + 8: uint16(47495), + 9: uint16(47497), + 10: uint16(47498), + 11: uint16(47501), + 12: uint16(47502), + 13: uint16(47532), + 14: uint16(47533), + 15: uint16(47536), + 16: uint16(47540), + 17: uint16(47548), + 18: uint16(47549), + 19: uint16(47551), + 20: uint16(47553), + 21: uint16(47560), + 22: uint16(47561), + 23: uint16(47564), + 24: uint16(47566), + 25: uint16(47567), + 26: uint16(47568), + 27: uint16(47569), + 28: uint16(47570), + 29: uint16(47576), + 30: uint16(47577), + 31: uint16(47579), + 32: uint16(47581), + 33: uint16(47582), + 34: uint16(47585), + 35: uint16(47587), + 36: uint16(47588), + 37: uint16(47589), + 38: uint16(47592), + 39: uint16(47596), + 40: uint16(47604), + 41: uint16(47605), + 42: uint16(47607), + 43: uint16(47608), + 44: uint16(47609), + 45: uint16(47610), + 46: uint16(47616), + 47: uint16(47617), + 48: uint16(47624), + 49: uint16(47637), + 50: uint16(47672), + 51: uint16(47673), + 52: uint16(47676), + 53: uint16(47680), + 54: uint16(47682), + 55: uint16(47688), + 56: uint16(47689), + 57: uint16(47691), + 58: uint16(47693), + 59: uint16(47694), + 60: uint16(47699), + 61: uint16(47700), + 62: uint16(47701), + 63: uint16(47704), + 64: uint16(47708), + 65: uint16(47716), + 66: uint16(47717), + 67: uint16(47719), + 68: uint16(47720), + 69: uint16(47721), + 70: uint16(47728), + 71: uint16(47729), + 72: uint16(47732), + 73: uint16(47736), + 74: uint16(47747), + 75: uint16(47748), + 76: uint16(47749), + 77: uint16(47751), + 78: uint16(47756), + 79: uint16(47784), + 80: uint16(47785), + 81: uint16(47787), + 82: uint16(47788), + 83: uint16(47792), + 84: uint16(47794), + 85: uint16(47800), + 86: uint16(47801), + 87: uint16(47803), + 88: uint16(47805), + 89: uint16(47812), + 90: uint16(47816), + 91: uint16(47832), + 92: uint16(47833), + 93: uint16(47868), + }, + 24: { + 0: uint16(47872), + 1: uint16(47876), + 2: uint16(47885), + 3: uint16(47887), + 4: uint16(47889), + 5: uint16(47896), + 6: uint16(47900), + 7: uint16(47904), + 8: uint16(47913), + 9: uint16(47915), + 10: uint16(47924), + 11: uint16(47925), + 12: uint16(47926), + 13: uint16(47928), + 14: uint16(47931), + 15: uint16(47932), + 16: uint16(47933), + 17: uint16(47934), + 18: uint16(47940), + 19: uint16(47941), + 20: uint16(47943), + 21: uint16(47945), + 22: uint16(47949), + 23: uint16(47951), + 24: uint16(47952), + 25: uint16(47956), + 26: uint16(47960), + 27: uint16(47969), + 28: uint16(47971), + 29: uint16(47980), + 30: uint16(48008), + 31: uint16(48012), + 32: uint16(48016), + 33: uint16(48036), + 34: uint16(48040), + 35: uint16(48044), + 36: uint16(48052), + 37: uint16(48055), + 38: uint16(48064), + 39: uint16(48068), + 40: uint16(48072), + 41: uint16(48080), + 42: uint16(48083), + 43: uint16(48120), + 44: uint16(48121), + 45: uint16(48124), + 46: uint16(48127), + 47: uint16(48128), + 48: uint16(48130), + 49: uint16(48136), + 50: uint16(48137), + 51: uint16(48139), + 52: uint16(48140), + 53: uint16(48141), + 54: uint16(48143), + 55: uint16(48145), + 56: uint16(48148), + 57: uint16(48149), + 58: uint16(48150), + 59: uint16(48151), + 60: uint16(48152), + 61: uint16(48155), + 62: uint16(48156), + 63: uint16(48157), + 64: uint16(48158), + 65: uint16(48159), + 66: uint16(48164), + 67: uint16(48165), + 68: uint16(48167), + 69: uint16(48169), + 70: uint16(48173), + 71: uint16(48176), + 72: uint16(48177), + 73: uint16(48180), + 74: uint16(48184), + 75: uint16(48192), + 76: uint16(48193), + 77: uint16(48195), + 78: uint16(48196), + 79: uint16(48197), + 80: uint16(48201), + 81: uint16(48204), + 82: uint16(48205), + 83: uint16(48208), + 84: uint16(48221), + 85: uint16(48260), + 86: uint16(48261), + 87: uint16(48264), + 88: uint16(48267), + 89: uint16(48268), + 90: uint16(48270), + 91: uint16(48276), + 92: uint16(48277), + 93: uint16(48279), + }, + 25: { + 0: uint16(48281), + 1: uint16(48282), + 2: uint16(48288), + 3: uint16(48289), + 4: uint16(48292), + 5: uint16(48295), + 6: uint16(48296), + 7: uint16(48304), + 8: uint16(48305), + 9: uint16(48307), + 10: uint16(48308), + 11: uint16(48309), + 12: uint16(48316), + 13: uint16(48317), + 14: uint16(48320), + 15: uint16(48324), + 16: uint16(48333), + 17: uint16(48335), + 18: uint16(48336), + 19: uint16(48337), + 20: uint16(48341), + 21: uint16(48344), + 22: uint16(48348), + 23: uint16(48372), + 24: uint16(48373), + 25: uint16(48374), + 26: uint16(48376), + 27: uint16(48380), + 28: uint16(48388), + 29: uint16(48389), + 30: uint16(48391), + 31: uint16(48393), + 32: uint16(48400), + 33: uint16(48404), + 34: uint16(48420), + 35: uint16(48428), + 36: uint16(48448), + 37: uint16(48456), + 38: uint16(48457), + 39: uint16(48460), + 40: uint16(48464), + 41: uint16(48472), + 42: uint16(48473), + 43: uint16(48484), + 44: uint16(48488), + 45: uint16(48512), + 46: uint16(48513), + 47: uint16(48516), + 48: uint16(48519), + 49: uint16(48520), + 50: uint16(48521), + 51: uint16(48522), + 52: uint16(48528), + 53: uint16(48529), + 54: uint16(48531), + 55: uint16(48533), + 56: uint16(48537), + 57: uint16(48538), + 58: uint16(48540), + 59: uint16(48548), + 60: uint16(48560), + 61: uint16(48568), + 62: uint16(48596), + 63: uint16(48597), + 64: uint16(48600), + 65: uint16(48604), + 66: uint16(48617), + 67: uint16(48624), + 68: uint16(48628), + 69: uint16(48632), + 70: uint16(48640), + 71: uint16(48643), + 72: uint16(48645), + 73: uint16(48652), + 74: uint16(48653), + 75: uint16(48656), + 76: uint16(48660), + 77: uint16(48668), + 78: uint16(48669), + 79: uint16(48671), + 80: uint16(48708), + 81: uint16(48709), + 82: uint16(48712), + 83: uint16(48716), + 84: uint16(48718), + 85: uint16(48724), + 86: uint16(48725), + 87: uint16(48727), + 88: uint16(48729), + 89: uint16(48730), + 90: uint16(48731), + 91: uint16(48736), + 92: uint16(48737), + 93: uint16(48740), + }, + 26: { + 0: uint16(48744), + 1: uint16(48746), + 2: uint16(48752), + 3: uint16(48753), + 4: uint16(48755), + 5: uint16(48756), + 6: uint16(48757), + 7: uint16(48763), + 8: uint16(48764), + 9: uint16(48765), + 10: uint16(48768), + 11: uint16(48772), + 12: uint16(48780), + 13: uint16(48781), + 14: uint16(48783), + 15: uint16(48784), + 16: uint16(48785), + 17: uint16(48792), + 18: uint16(48793), + 19: uint16(48808), + 20: uint16(48848), + 21: uint16(48849), + 22: uint16(48852), + 23: uint16(48855), + 24: uint16(48856), + 25: uint16(48864), + 26: uint16(48867), + 27: uint16(48868), + 28: uint16(48869), + 29: uint16(48876), + 30: uint16(48897), + 31: uint16(48904), + 32: uint16(48905), + 33: uint16(48920), + 34: uint16(48921), + 35: uint16(48923), + 36: uint16(48924), + 37: uint16(48925), + 38: uint16(48960), + 39: uint16(48961), + 40: uint16(48964), + 41: uint16(48968), + 42: uint16(48976), + 43: uint16(48977), + 44: uint16(48981), + 45: uint16(49044), + 46: uint16(49072), + 47: uint16(49093), + 48: uint16(49100), + 49: uint16(49101), + 50: uint16(49104), + 51: uint16(49108), + 52: uint16(49116), + 53: uint16(49119), + 54: uint16(49121), + 55: uint16(49212), + 56: uint16(49233), + 57: uint16(49240), + 58: uint16(49244), + 59: uint16(49248), + 60: uint16(49256), + 61: uint16(49257), + 62: uint16(49296), + 63: uint16(49297), + 64: uint16(49300), + 65: uint16(49304), + 66: uint16(49312), + 67: uint16(49313), + 68: uint16(49315), + 69: uint16(49317), + 70: uint16(49324), + 71: uint16(49325), + 72: uint16(49327), + 73: uint16(49328), + 74: uint16(49331), + 75: uint16(49332), + 76: uint16(49333), + 77: uint16(49334), + 78: uint16(49340), + 79: uint16(49341), + 80: uint16(49343), + 81: uint16(49344), + 82: uint16(49345), + 83: uint16(49349), + 84: uint16(49352), + 85: uint16(49353), + 86: uint16(49356), + 87: uint16(49360), + 88: uint16(49368), + 89: uint16(49369), + 90: uint16(49371), + 91: uint16(49372), + 92: uint16(49373), + 93: uint16(49380), + }, + 27: { + 0: uint16(49381), + 1: uint16(49384), + 2: uint16(49388), + 3: uint16(49396), + 4: uint16(49397), + 5: uint16(49399), + 6: uint16(49401), + 7: uint16(49408), + 8: uint16(49412), + 9: uint16(49416), + 10: uint16(49424), + 11: uint16(49429), + 12: uint16(49436), + 13: uint16(49437), + 14: uint16(49438), + 15: uint16(49439), + 16: uint16(49440), + 17: uint16(49443), + 18: uint16(49444), + 19: uint16(49446), + 20: uint16(49447), + 21: uint16(49452), + 22: uint16(49453), + 23: uint16(49455), + 24: uint16(49456), + 25: uint16(49457), + 26: uint16(49462), + 27: uint16(49464), + 28: uint16(49465), + 29: uint16(49468), + 30: uint16(49472), + 31: uint16(49480), + 32: uint16(49481), + 33: uint16(49483), + 34: uint16(49484), + 35: uint16(49485), + 36: uint16(49492), + 37: uint16(49493), + 38: uint16(49496), + 39: uint16(49500), + 40: uint16(49508), + 41: uint16(49509), + 42: uint16(49511), + 43: uint16(49512), + 44: uint16(49513), + 45: uint16(49520), + 46: uint16(49524), + 47: uint16(49528), + 48: uint16(49541), + 49: uint16(49548), + 50: uint16(49549), + 51: uint16(49550), + 52: uint16(49552), + 53: uint16(49556), + 54: uint16(49558), + 55: uint16(49564), + 56: uint16(49565), + 57: uint16(49567), + 58: uint16(49569), + 59: uint16(49573), + 60: uint16(49576), + 61: uint16(49577), + 62: uint16(49580), + 63: uint16(49584), + 64: uint16(49597), + 65: uint16(49604), + 66: uint16(49608), + 67: uint16(49612), + 68: uint16(49620), + 69: uint16(49623), + 70: uint16(49624), + 71: uint16(49632), + 72: uint16(49636), + 73: uint16(49640), + 74: uint16(49648), + 75: uint16(49649), + 76: uint16(49651), + 77: uint16(49660), + 78: uint16(49661), + 79: uint16(49664), + 80: uint16(49668), + 81: uint16(49676), + 82: uint16(49677), + 83: uint16(49679), + 84: uint16(49681), + 85: uint16(49688), + 86: uint16(49689), + 87: uint16(49692), + 88: uint16(49695), + 89: uint16(49696), + 90: uint16(49704), + 91: uint16(49705), + 92: uint16(49707), + 93: uint16(49709), + }, + 28: { + 0: uint16(49711), + 1: uint16(49713), + 2: uint16(49714), + 3: uint16(49716), + 4: uint16(49736), + 5: uint16(49744), + 6: uint16(49745), + 7: uint16(49748), + 8: uint16(49752), + 9: uint16(49760), + 10: uint16(49765), + 11: uint16(49772), + 12: uint16(49773), + 13: uint16(49776), + 14: uint16(49780), + 15: uint16(49788), + 16: uint16(49789), + 17: uint16(49791), + 18: uint16(49793), + 19: uint16(49800), + 20: uint16(49801), + 21: uint16(49808), + 22: uint16(49816), + 23: uint16(49819), + 24: uint16(49821), + 25: uint16(49828), + 26: uint16(49829), + 27: uint16(49832), + 28: uint16(49836), + 29: uint16(49837), + 30: uint16(49844), + 31: uint16(49845), + 32: uint16(49847), + 33: uint16(49849), + 34: uint16(49884), + 35: uint16(49885), + 36: uint16(49888), + 37: uint16(49891), + 38: uint16(49892), + 39: uint16(49899), + 40: uint16(49900), + 41: uint16(49901), + 42: uint16(49903), + 43: uint16(49905), + 44: uint16(49910), + 45: uint16(49912), + 46: uint16(49913), + 47: uint16(49915), + 48: uint16(49916), + 49: uint16(49920), + 50: uint16(49928), + 51: uint16(49929), + 52: uint16(49932), + 53: uint16(49933), + 54: uint16(49939), + 55: uint16(49940), + 56: uint16(49941), + 57: uint16(49944), + 58: uint16(49948), + 59: uint16(49956), + 60: uint16(49957), + 61: uint16(49960), + 62: uint16(49961), + 63: uint16(49989), + 64: uint16(50024), + 65: uint16(50025), + 66: uint16(50028), + 67: uint16(50032), + 68: uint16(50034), + 69: uint16(50040), + 70: uint16(50041), + 71: uint16(50044), + 72: uint16(50045), + 73: uint16(50052), + 74: uint16(50056), + 75: uint16(50060), + 76: uint16(50112), + 77: uint16(50136), + 78: uint16(50137), + 79: uint16(50140), + 80: uint16(50143), + 81: uint16(50144), + 82: uint16(50146), + 83: uint16(50152), + 84: uint16(50153), + 85: uint16(50157), + 86: uint16(50164), + 87: uint16(50165), + 88: uint16(50168), + 89: uint16(50184), + 90: uint16(50192), + 91: uint16(50212), + 92: uint16(50220), + 93: uint16(50224), + }, + 29: { + 0: uint16(50228), + 1: uint16(50236), + 2: uint16(50237), + 3: uint16(50248), + 4: uint16(50276), + 5: uint16(50277), + 6: uint16(50280), + 7: uint16(50284), + 8: uint16(50292), + 9: uint16(50293), + 10: uint16(50297), + 11: uint16(50304), + 12: uint16(50324), + 13: uint16(50332), + 14: uint16(50360), + 15: uint16(50364), + 16: uint16(50409), + 17: uint16(50416), + 18: uint16(50417), + 19: uint16(50420), + 20: uint16(50424), + 21: uint16(50426), + 22: uint16(50431), + 23: uint16(50432), + 24: uint16(50433), + 25: uint16(50444), + 26: uint16(50448), + 27: uint16(50452), + 28: uint16(50460), + 29: uint16(50472), + 30: uint16(50473), + 31: uint16(50476), + 32: uint16(50480), + 33: uint16(50488), + 34: uint16(50489), + 35: uint16(50491), + 36: uint16(50493), + 37: uint16(50500), + 38: uint16(50501), + 39: uint16(50504), + 40: uint16(50505), + 41: uint16(50506), + 42: uint16(50508), + 43: uint16(50509), + 44: uint16(50510), + 45: uint16(50515), + 46: uint16(50516), + 47: uint16(50517), + 48: uint16(50519), + 49: uint16(50520), + 50: uint16(50521), + 51: uint16(50525), + 52: uint16(50526), + 53: uint16(50528), + 54: uint16(50529), + 55: uint16(50532), + 56: uint16(50536), + 57: uint16(50544), + 58: uint16(50545), + 59: uint16(50547), + 60: uint16(50548), + 61: uint16(50549), + 62: uint16(50556), + 63: uint16(50557), + 64: uint16(50560), + 65: uint16(50564), + 66: uint16(50567), + 67: uint16(50572), + 68: uint16(50573), + 69: uint16(50575), + 70: uint16(50577), + 71: uint16(50581), + 72: uint16(50583), + 73: uint16(50584), + 74: uint16(50588), + 75: uint16(50592), + 76: uint16(50601), + 77: uint16(50612), + 78: uint16(50613), + 79: uint16(50616), + 80: uint16(50617), + 81: uint16(50619), + 82: uint16(50620), + 83: uint16(50621), + 84: uint16(50622), + 85: uint16(50628), + 86: uint16(50629), + 87: uint16(50630), + 88: uint16(50631), + 89: uint16(50632), + 90: uint16(50633), + 91: uint16(50634), + 92: uint16(50636), + 93: uint16(50638), + }, + 30: { + 0: uint16(50640), + 1: uint16(50641), + 2: uint16(50644), + 3: uint16(50648), + 4: uint16(50656), + 5: uint16(50657), + 6: uint16(50659), + 7: uint16(50661), + 8: uint16(50668), + 9: uint16(50669), + 10: uint16(50670), + 11: uint16(50672), + 12: uint16(50676), + 13: uint16(50678), + 14: uint16(50679), + 15: uint16(50684), + 16: uint16(50685), + 17: uint16(50686), + 18: uint16(50687), + 19: uint16(50688), + 20: uint16(50689), + 21: uint16(50693), + 22: uint16(50694), + 23: uint16(50695), + 24: uint16(50696), + 25: uint16(50700), + 26: uint16(50704), + 27: uint16(50712), + 28: uint16(50713), + 29: uint16(50715), + 30: uint16(50716), + 31: uint16(50724), + 32: uint16(50725), + 33: uint16(50728), + 34: uint16(50732), + 35: uint16(50733), + 36: uint16(50734), + 37: uint16(50736), + 38: uint16(50739), + 39: uint16(50740), + 40: uint16(50741), + 41: uint16(50743), + 42: uint16(50745), + 43: uint16(50747), + 44: uint16(50752), + 45: uint16(50753), + 46: uint16(50756), + 47: uint16(50760), + 48: uint16(50768), + 49: uint16(50769), + 50: uint16(50771), + 51: uint16(50772), + 52: uint16(50773), + 53: uint16(50780), + 54: uint16(50781), + 55: uint16(50784), + 56: uint16(50796), + 57: uint16(50799), + 58: uint16(50801), + 59: uint16(50808), + 60: uint16(50809), + 61: uint16(50812), + 62: uint16(50816), + 63: uint16(50824), + 64: uint16(50825), + 65: uint16(50827), + 66: uint16(50829), + 67: uint16(50836), + 68: uint16(50837), + 69: uint16(50840), + 70: uint16(50844), + 71: uint16(50852), + 72: uint16(50853), + 73: uint16(50855), + 74: uint16(50857), + 75: uint16(50864), + 76: uint16(50865), + 77: uint16(50868), + 78: uint16(50872), + 79: uint16(50873), + 80: uint16(50874), + 81: uint16(50880), + 82: uint16(50881), + 83: uint16(50883), + 84: uint16(50885), + 85: uint16(50892), + 86: uint16(50893), + 87: uint16(50896), + 88: uint16(50900), + 89: uint16(50908), + 90: uint16(50909), + 91: uint16(50912), + 92: uint16(50913), + 93: uint16(50920), + }, + 31: { + 0: uint16(50921), + 1: uint16(50924), + 2: uint16(50928), + 3: uint16(50936), + 4: uint16(50937), + 5: uint16(50941), + 6: uint16(50948), + 7: uint16(50949), + 8: uint16(50952), + 9: uint16(50956), + 10: uint16(50964), + 11: uint16(50965), + 12: uint16(50967), + 13: uint16(50969), + 14: uint16(50976), + 15: uint16(50977), + 16: uint16(50980), + 17: uint16(50984), + 18: uint16(50992), + 19: uint16(50993), + 20: uint16(50995), + 21: uint16(50997), + 22: uint16(50999), + 23: uint16(51004), + 24: uint16(51005), + 25: uint16(51008), + 26: uint16(51012), + 27: uint16(51018), + 28: uint16(51020), + 29: uint16(51021), + 30: uint16(51023), + 31: uint16(51025), + 32: uint16(51026), + 33: uint16(51027), + 34: uint16(51028), + 35: uint16(51029), + 36: uint16(51030), + 37: uint16(51031), + 38: uint16(51032), + 39: uint16(51036), + 40: uint16(51040), + 41: uint16(51048), + 42: uint16(51051), + 43: uint16(51060), + 44: uint16(51061), + 45: uint16(51064), + 46: uint16(51068), + 47: uint16(51069), + 48: uint16(51070), + 49: uint16(51075), + 50: uint16(51076), + 51: uint16(51077), + 52: uint16(51079), + 53: uint16(51080), + 54: uint16(51081), + 55: uint16(51082), + 56: uint16(51086), + 57: uint16(51088), + 58: uint16(51089), + 59: uint16(51092), + 60: uint16(51094), + 61: uint16(51095), + 62: uint16(51096), + 63: uint16(51098), + 64: uint16(51104), + 65: uint16(51105), + 66: uint16(51107), + 67: uint16(51108), + 68: uint16(51109), + 69: uint16(51110), + 70: uint16(51116), + 71: uint16(51117), + 72: uint16(51120), + 73: uint16(51124), + 74: uint16(51132), + 75: uint16(51133), + 76: uint16(51135), + 77: uint16(51136), + 78: uint16(51137), + 79: uint16(51144), + 80: uint16(51145), + 81: uint16(51148), + 82: uint16(51150), + 83: uint16(51152), + 84: uint16(51160), + 85: uint16(51165), + 86: uint16(51172), + 87: uint16(51176), + 88: uint16(51180), + 89: uint16(51200), + 90: uint16(51201), + 91: uint16(51204), + 92: uint16(51208), + 93: uint16(51210), + }, + 32: { + 0: uint16(51216), + 1: uint16(51217), + 2: uint16(51219), + 3: uint16(51221), + 4: uint16(51222), + 5: uint16(51228), + 6: uint16(51229), + 7: uint16(51232), + 8: uint16(51236), + 9: uint16(51244), + 10: uint16(51245), + 11: uint16(51247), + 12: uint16(51249), + 13: uint16(51256), + 14: uint16(51260), + 15: uint16(51264), + 16: uint16(51272), + 17: uint16(51273), + 18: uint16(51276), + 19: uint16(51277), + 20: uint16(51284), + 21: uint16(51312), + 22: uint16(51313), + 23: uint16(51316), + 24: uint16(51320), + 25: uint16(51322), + 26: uint16(51328), + 27: uint16(51329), + 28: uint16(51331), + 29: uint16(51333), + 30: uint16(51334), + 31: uint16(51335), + 32: uint16(51339), + 33: uint16(51340), + 34: uint16(51341), + 35: uint16(51348), + 36: uint16(51357), + 37: uint16(51359), + 38: uint16(51361), + 39: uint16(51368), + 40: uint16(51388), + 41: uint16(51389), + 42: uint16(51396), + 43: uint16(51400), + 44: uint16(51404), + 45: uint16(51412), + 46: uint16(51413), + 47: uint16(51415), + 48: uint16(51417), + 49: uint16(51424), + 50: uint16(51425), + 51: uint16(51428), + 52: uint16(51445), + 53: uint16(51452), + 54: uint16(51453), + 55: uint16(51456), + 56: uint16(51460), + 57: uint16(51461), + 58: uint16(51462), + 59: uint16(51468), + 60: uint16(51469), + 61: uint16(51471), + 62: uint16(51473), + 63: uint16(51480), + 64: uint16(51500), + 65: uint16(51508), + 66: uint16(51536), + 67: uint16(51537), + 68: uint16(51540), + 69: uint16(51544), + 70: uint16(51552), + 71: uint16(51553), + 72: uint16(51555), + 73: uint16(51564), + 74: uint16(51568), + 75: uint16(51572), + 76: uint16(51580), + 77: uint16(51592), + 78: uint16(51593), + 79: uint16(51596), + 80: uint16(51600), + 81: uint16(51608), + 82: uint16(51609), + 83: uint16(51611), + 84: uint16(51613), + 85: uint16(51648), + 86: uint16(51649), + 87: uint16(51652), + 88: uint16(51655), + 89: uint16(51656), + 90: uint16(51658), + 91: uint16(51664), + 92: uint16(51665), + 93: uint16(51667), + }, + 33: { + 0: uint16(51669), + 1: uint16(51670), + 2: uint16(51673), + 3: uint16(51674), + 4: uint16(51676), + 5: uint16(51677), + 6: uint16(51680), + 7: uint16(51682), + 8: uint16(51684), + 9: uint16(51687), + 10: uint16(51692), + 11: uint16(51693), + 12: uint16(51695), + 13: uint16(51696), + 14: uint16(51697), + 15: uint16(51704), + 16: uint16(51705), + 17: uint16(51708), + 18: uint16(51712), + 19: uint16(51720), + 20: uint16(51721), + 21: uint16(51723), + 22: uint16(51724), + 23: uint16(51725), + 24: uint16(51732), + 25: uint16(51736), + 26: uint16(51753), + 27: uint16(51788), + 28: uint16(51789), + 29: uint16(51792), + 30: uint16(51796), + 31: uint16(51804), + 32: uint16(51805), + 33: uint16(51807), + 34: uint16(51808), + 35: uint16(51809), + 36: uint16(51816), + 37: uint16(51837), + 38: uint16(51844), + 39: uint16(51864), + 40: uint16(51900), + 41: uint16(51901), + 42: uint16(51904), + 43: uint16(51908), + 44: uint16(51916), + 45: uint16(51917), + 46: uint16(51919), + 47: uint16(51921), + 48: uint16(51923), + 49: uint16(51928), + 50: uint16(51929), + 51: uint16(51936), + 52: uint16(51948), + 53: uint16(51956), + 54: uint16(51976), + 55: uint16(51984), + 56: uint16(51988), + 57: uint16(51992), + 58: uint16(52000), + 59: uint16(52001), + 60: uint16(52033), + 61: uint16(52040), + 62: uint16(52041), + 63: uint16(52044), + 64: uint16(52048), + 65: uint16(52056), + 66: uint16(52057), + 67: uint16(52061), + 68: uint16(52068), + 69: uint16(52088), + 70: uint16(52089), + 71: uint16(52124), + 72: uint16(52152), + 73: uint16(52180), + 74: uint16(52196), + 75: uint16(52199), + 76: uint16(52201), + 77: uint16(52236), + 78: uint16(52237), + 79: uint16(52240), + 80: uint16(52244), + 81: uint16(52252), + 82: uint16(52253), + 83: uint16(52257), + 84: uint16(52258), + 85: uint16(52263), + 86: uint16(52264), + 87: uint16(52265), + 88: uint16(52268), + 89: uint16(52270), + 90: uint16(52272), + 91: uint16(52280), + 92: uint16(52281), + 93: uint16(52283), + }, + 34: { + 0: uint16(52284), + 1: uint16(52285), + 2: uint16(52286), + 3: uint16(52292), + 4: uint16(52293), + 5: uint16(52296), + 6: uint16(52300), + 7: uint16(52308), + 8: uint16(52309), + 9: uint16(52311), + 10: uint16(52312), + 11: uint16(52313), + 12: uint16(52320), + 13: uint16(52324), + 14: uint16(52326), + 15: uint16(52328), + 16: uint16(52336), + 17: uint16(52341), + 18: uint16(52376), + 19: uint16(52377), + 20: uint16(52380), + 21: uint16(52384), + 22: uint16(52392), + 23: uint16(52393), + 24: uint16(52395), + 25: uint16(52396), + 26: uint16(52397), + 27: uint16(52404), + 28: uint16(52405), + 29: uint16(52408), + 30: uint16(52412), + 31: uint16(52420), + 32: uint16(52421), + 33: uint16(52423), + 34: uint16(52425), + 35: uint16(52432), + 36: uint16(52436), + 37: uint16(52452), + 38: uint16(52460), + 39: uint16(52464), + 40: uint16(52481), + 41: uint16(52488), + 42: uint16(52489), + 43: uint16(52492), + 44: uint16(52496), + 45: uint16(52504), + 46: uint16(52505), + 47: uint16(52507), + 48: uint16(52509), + 49: uint16(52516), + 50: uint16(52520), + 51: uint16(52524), + 52: uint16(52537), + 53: uint16(52572), + 54: uint16(52576), + 55: uint16(52580), + 56: uint16(52588), + 57: uint16(52589), + 58: uint16(52591), + 59: uint16(52593), + 60: uint16(52600), + 61: uint16(52616), + 62: uint16(52628), + 63: uint16(52629), + 64: uint16(52632), + 65: uint16(52636), + 66: uint16(52644), + 67: uint16(52645), + 68: uint16(52647), + 69: uint16(52649), + 70: uint16(52656), + 71: uint16(52676), + 72: uint16(52684), + 73: uint16(52688), + 74: uint16(52712), + 75: uint16(52716), + 76: uint16(52720), + 77: uint16(52728), + 78: uint16(52729), + 79: uint16(52731), + 80: uint16(52733), + 81: uint16(52740), + 82: uint16(52744), + 83: uint16(52748), + 84: uint16(52756), + 85: uint16(52761), + 86: uint16(52768), + 87: uint16(52769), + 88: uint16(52772), + 89: uint16(52776), + 90: uint16(52784), + 91: uint16(52785), + 92: uint16(52787), + 93: uint16(52789), + }, + 35: { + 0: uint16(52824), + 1: uint16(52825), + 2: uint16(52828), + 3: uint16(52831), + 4: uint16(52832), + 5: uint16(52833), + 6: uint16(52840), + 7: uint16(52841), + 8: uint16(52843), + 9: uint16(52845), + 10: uint16(52852), + 11: uint16(52853), + 12: uint16(52856), + 13: uint16(52860), + 14: uint16(52868), + 15: uint16(52869), + 16: uint16(52871), + 17: uint16(52873), + 18: uint16(52880), + 19: uint16(52881), + 20: uint16(52884), + 21: uint16(52888), + 22: uint16(52896), + 23: uint16(52897), + 24: uint16(52899), + 25: uint16(52900), + 26: uint16(52901), + 27: uint16(52908), + 28: uint16(52909), + 29: uint16(52929), + 30: uint16(52964), + 31: uint16(52965), + 32: uint16(52968), + 33: uint16(52971), + 34: uint16(52972), + 35: uint16(52980), + 36: uint16(52981), + 37: uint16(52983), + 38: uint16(52984), + 39: uint16(52985), + 40: uint16(52992), + 41: uint16(52993), + 42: uint16(52996), + 43: uint16(53000), + 44: uint16(53008), + 45: uint16(53009), + 46: uint16(53011), + 47: uint16(53013), + 48: uint16(53020), + 49: uint16(53024), + 50: uint16(53028), + 51: uint16(53036), + 52: uint16(53037), + 53: uint16(53039), + 54: uint16(53040), + 55: uint16(53041), + 56: uint16(53048), + 57: uint16(53076), + 58: uint16(53077), + 59: uint16(53080), + 60: uint16(53084), + 61: uint16(53092), + 62: uint16(53093), + 63: uint16(53095), + 64: uint16(53097), + 65: uint16(53104), + 66: uint16(53105), + 67: uint16(53108), + 68: uint16(53112), + 69: uint16(53120), + 70: uint16(53125), + 71: uint16(53132), + 72: uint16(53153), + 73: uint16(53160), + 74: uint16(53168), + 75: uint16(53188), + 76: uint16(53216), + 77: uint16(53217), + 78: uint16(53220), + 79: uint16(53224), + 80: uint16(53232), + 81: uint16(53233), + 82: uint16(53235), + 83: uint16(53237), + 84: uint16(53244), + 85: uint16(53248), + 86: uint16(53252), + 87: uint16(53265), + 88: uint16(53272), + 89: uint16(53293), + 90: uint16(53300), + 91: uint16(53301), + 92: uint16(53304), + 93: uint16(53308), + }, + 36: { + 0: uint16(53316), + 1: uint16(53317), + 2: uint16(53319), + 3: uint16(53321), + 4: uint16(53328), + 5: uint16(53332), + 6: uint16(53336), + 7: uint16(53344), + 8: uint16(53356), + 9: uint16(53357), + 10: uint16(53360), + 11: uint16(53364), + 12: uint16(53372), + 13: uint16(53373), + 14: uint16(53377), + 15: uint16(53412), + 16: uint16(53413), + 17: uint16(53416), + 18: uint16(53420), + 19: uint16(53428), + 20: uint16(53429), + 21: uint16(53431), + 22: uint16(53433), + 23: uint16(53440), + 24: uint16(53441), + 25: uint16(53444), + 26: uint16(53448), + 27: uint16(53449), + 28: uint16(53456), + 29: uint16(53457), + 30: uint16(53459), + 31: uint16(53460), + 32: uint16(53461), + 33: uint16(53468), + 34: uint16(53469), + 35: uint16(53472), + 36: uint16(53476), + 37: uint16(53484), + 38: uint16(53485), + 39: uint16(53487), + 40: uint16(53488), + 41: uint16(53489), + 42: uint16(53496), + 43: uint16(53517), + 44: uint16(53552), + 45: uint16(53553), + 46: uint16(53556), + 47: uint16(53560), + 48: uint16(53562), + 49: uint16(53568), + 50: uint16(53569), + 51: uint16(53571), + 52: uint16(53572), + 53: uint16(53573), + 54: uint16(53580), + 55: uint16(53581), + 56: uint16(53584), + 57: uint16(53588), + 58: uint16(53596), + 59: uint16(53597), + 60: uint16(53599), + 61: uint16(53601), + 62: uint16(53608), + 63: uint16(53612), + 64: uint16(53628), + 65: uint16(53636), + 66: uint16(53640), + 67: uint16(53664), + 68: uint16(53665), + 69: uint16(53668), + 70: uint16(53672), + 71: uint16(53680), + 72: uint16(53681), + 73: uint16(53683), + 74: uint16(53685), + 75: uint16(53690), + 76: uint16(53692), + 77: uint16(53696), + 78: uint16(53720), + 79: uint16(53748), + 80: uint16(53752), + 81: uint16(53767), + 82: uint16(53769), + 83: uint16(53776), + 84: uint16(53804), + 85: uint16(53805), + 86: uint16(53808), + 87: uint16(53812), + 88: uint16(53820), + 89: uint16(53821), + 90: uint16(53823), + 91: uint16(53825), + 92: uint16(53832), + 93: uint16(53852), + }, + 37: { + 0: uint16(53860), + 1: uint16(53888), + 2: uint16(53889), + 3: uint16(53892), + 4: uint16(53896), + 5: uint16(53904), + 6: uint16(53905), + 7: uint16(53909), + 8: uint16(53916), + 9: uint16(53920), + 10: uint16(53924), + 11: uint16(53932), + 12: uint16(53937), + 13: uint16(53944), + 14: uint16(53945), + 15: uint16(53948), + 16: uint16(53951), + 17: uint16(53952), + 18: uint16(53954), + 19: uint16(53960), + 20: uint16(53961), + 21: uint16(53963), + 22: uint16(53972), + 23: uint16(53976), + 24: uint16(53980), + 25: uint16(53988), + 26: uint16(53989), + 27: uint16(54000), + 28: uint16(54001), + 29: uint16(54004), + 30: uint16(54008), + 31: uint16(54016), + 32: uint16(54017), + 33: uint16(54019), + 34: uint16(54021), + 35: uint16(54028), + 36: uint16(54029), + 37: uint16(54030), + 38: uint16(54032), + 39: uint16(54036), + 40: uint16(54038), + 41: uint16(54044), + 42: uint16(54045), + 43: uint16(54047), + 44: uint16(54048), + 45: uint16(54049), + 46: uint16(54053), + 47: uint16(54056), + 48: uint16(54057), + 49: uint16(54060), + 50: uint16(54064), + 51: uint16(54072), + 52: uint16(54073), + 53: uint16(54075), + 54: uint16(54076), + 55: uint16(54077), + 56: uint16(54084), + 57: uint16(54085), + 58: uint16(54140), + 59: uint16(54141), + 60: uint16(54144), + 61: uint16(54148), + 62: uint16(54156), + 63: uint16(54157), + 64: uint16(54159), + 65: uint16(54160), + 66: uint16(54161), + 67: uint16(54168), + 68: uint16(54169), + 69: uint16(54172), + 70: uint16(54176), + 71: uint16(54184), + 72: uint16(54185), + 73: uint16(54187), + 74: uint16(54189), + 75: uint16(54196), + 76: uint16(54200), + 77: uint16(54204), + 78: uint16(54212), + 79: uint16(54213), + 80: uint16(54216), + 81: uint16(54217), + 82: uint16(54224), + 83: uint16(54232), + 84: uint16(54241), + 85: uint16(54243), + 86: uint16(54252), + 87: uint16(54253), + 88: uint16(54256), + 89: uint16(54260), + 90: uint16(54268), + 91: uint16(54269), + 92: uint16(54271), + 93: uint16(54273), + }, + 38: { + 0: uint16(54280), + 1: uint16(54301), + 2: uint16(54336), + 3: uint16(54340), + 4: uint16(54364), + 5: uint16(54368), + 6: uint16(54372), + 7: uint16(54381), + 8: uint16(54383), + 9: uint16(54392), + 10: uint16(54393), + 11: uint16(54396), + 12: uint16(54399), + 13: uint16(54400), + 14: uint16(54402), + 15: uint16(54408), + 16: uint16(54409), + 17: uint16(54411), + 18: uint16(54413), + 19: uint16(54420), + 20: uint16(54441), + 21: uint16(54476), + 22: uint16(54480), + 23: uint16(54484), + 24: uint16(54492), + 25: uint16(54495), + 26: uint16(54504), + 27: uint16(54508), + 28: uint16(54512), + 29: uint16(54520), + 30: uint16(54523), + 31: uint16(54525), + 32: uint16(54532), + 33: uint16(54536), + 34: uint16(54540), + 35: uint16(54548), + 36: uint16(54549), + 37: uint16(54551), + 38: uint16(54588), + 39: uint16(54589), + 40: uint16(54592), + 41: uint16(54596), + 42: uint16(54604), + 43: uint16(54605), + 44: uint16(54607), + 45: uint16(54609), + 46: uint16(54616), + 47: uint16(54617), + 48: uint16(54620), + 49: uint16(54624), + 50: uint16(54629), + 51: uint16(54632), + 52: uint16(54633), + 53: uint16(54635), + 54: uint16(54637), + 55: uint16(54644), + 56: uint16(54645), + 57: uint16(54648), + 58: uint16(54652), + 59: uint16(54660), + 60: uint16(54661), + 61: uint16(54663), + 62: uint16(54664), + 63: uint16(54665), + 64: uint16(54672), + 65: uint16(54693), + 66: uint16(54728), + 67: uint16(54729), + 68: uint16(54732), + 69: uint16(54736), + 70: uint16(54738), + 71: uint16(54744), + 72: uint16(54745), + 73: uint16(54747), + 74: uint16(54749), + 75: uint16(54756), + 76: uint16(54757), + 77: uint16(54760), + 78: uint16(54764), + 79: uint16(54772), + 80: uint16(54773), + 81: uint16(54775), + 82: uint16(54777), + 83: uint16(54784), + 84: uint16(54785), + 85: uint16(54788), + 86: uint16(54792), + 87: uint16(54800), + 88: uint16(54801), + 89: uint16(54803), + 90: uint16(54804), + 91: uint16(54805), + 92: uint16(54812), + 93: uint16(54816), + }, + 39: { + 0: uint16(54820), + 1: uint16(54829), + 2: uint16(54840), + 3: uint16(54841), + 4: uint16(54844), + 5: uint16(54848), + 6: uint16(54853), + 7: uint16(54856), + 8: uint16(54857), + 9: uint16(54859), + 10: uint16(54861), + 11: uint16(54865), + 12: uint16(54868), + 13: uint16(54869), + 14: uint16(54872), + 15: uint16(54876), + 16: uint16(54887), + 17: uint16(54889), + 18: uint16(54896), + 19: uint16(54897), + 20: uint16(54900), + 21: uint16(54915), + 22: uint16(54917), + 23: uint16(54924), + 24: uint16(54925), + 25: uint16(54928), + 26: uint16(54932), + 27: uint16(54941), + 28: uint16(54943), + 29: uint16(54945), + 30: uint16(54952), + 31: uint16(54956), + 32: uint16(54960), + 33: uint16(54969), + 34: uint16(54971), + 35: uint16(54980), + 36: uint16(54981), + 37: uint16(54984), + 38: uint16(54988), + 39: uint16(54993), + 40: uint16(54996), + 41: uint16(54999), + 42: uint16(55001), + 43: uint16(55008), + 44: uint16(55012), + 45: uint16(55016), + 46: uint16(55024), + 47: uint16(55029), + 48: uint16(55036), + 49: uint16(55037), + 50: uint16(55040), + 51: uint16(55044), + 52: uint16(55057), + 53: uint16(55064), + 54: uint16(55065), + 55: uint16(55068), + 56: uint16(55072), + 57: uint16(55080), + 58: uint16(55081), + 59: uint16(55083), + 60: uint16(55085), + 61: uint16(55092), + 62: uint16(55093), + 63: uint16(55096), + 64: uint16(55100), + 65: uint16(55108), + 66: uint16(55111), + 67: uint16(55113), + 68: uint16(55120), + 69: uint16(55121), + 70: uint16(55124), + 71: uint16(55126), + 72: uint16(55127), + 73: uint16(55128), + 74: uint16(55129), + 75: uint16(55136), + 76: uint16(55137), + 77: uint16(55139), + 78: uint16(55141), + 79: uint16(55145), + 80: uint16(55148), + 81: uint16(55152), + 82: uint16(55156), + 83: uint16(55164), + 84: uint16(55165), + 85: uint16(55169), + 86: uint16(55176), + 87: uint16(55177), + 88: uint16(55180), + 89: uint16(55184), + 90: uint16(55192), + 91: uint16(55193), + 92: uint16(55195), + 93: uint16(55197), + }, + 40: {}, + 41: { + 0: uint16(20285), + 1: uint16(20339), + 2: uint16(20551), + 3: uint16(20729), + 4: uint16(21152), + 5: uint16(21487), + 6: uint16(21621), + 7: uint16(21733), + 8: uint16(22025), + 9: uint16(23233), + 10: uint16(23478), + 11: uint16(26247), + 12: uint16(26550), + 13: uint16(26551), + 14: uint16(26607), + 15: uint16(27468), + 16: uint16(29634), + 17: uint16(30146), + 18: uint16(31292), + 19: uint16(33499), + 20: uint16(33540), + 21: uint16(34903), + 22: uint16(34952), + 23: uint16(35382), + 24: uint16(36040), + 25: uint16(36303), + 26: uint16(36603), + 27: uint16(36838), + 28: uint16(39381), + 29: uint16(21051), + 30: uint16(21364), + 31: uint16(21508), + 32: uint16(24682), + 33: uint16(24932), + 34: uint16(27580), + 35: uint16(29647), + 36: uint16(33050), + 37: uint16(35258), + 38: uint16(35282), + 39: uint16(38307), + 40: uint16(20355), + 41: uint16(21002), + 42: uint16(22718), + 43: uint16(22904), + 44: uint16(23014), + 45: uint16(24178), + 46: uint16(24185), + 47: uint16(25031), + 48: uint16(25536), + 49: uint16(26438), + 50: uint16(26604), + 51: uint16(26751), + 52: uint16(28567), + 53: uint16(30286), + 54: uint16(30475), + 55: uint16(30965), + 56: uint16(31240), + 57: uint16(31487), + 58: uint16(31777), + 59: uint16(32925), + 60: uint16(33390), + 61: uint16(33393), + 62: uint16(35563), + 63: uint16(38291), + 64: uint16(20075), + 65: uint16(21917), + 66: uint16(26359), + 67: uint16(28212), + 68: uint16(30883), + 69: uint16(31469), + 70: uint16(33883), + 71: uint16(35088), + 72: uint16(34638), + 73: uint16(38824), + 74: uint16(21208), + 75: uint16(22350), + 76: uint16(22570), + 77: uint16(23884), + 78: uint16(24863), + 79: uint16(25022), + 80: uint16(25121), + 81: uint16(25954), + 82: uint16(26577), + 83: uint16(27204), + 84: uint16(28187), + 85: uint16(29976), + 86: uint16(30131), + 87: uint16(30435), + 88: uint16(30640), + 89: uint16(32058), + 90: uint16(37039), + 91: uint16(37969), + 92: uint16(37970), + 93: uint16(40853), + }, + 42: { + 0: uint16(21283), + 1: uint16(23724), + 2: uint16(30002), + 3: uint16(32987), + 4: uint16(37440), + 5: uint16(38296), + 6: uint16(21083), + 7: uint16(22536), + 8: uint16(23004), + 9: uint16(23713), + 10: uint16(23831), + 11: uint16(24247), + 12: uint16(24378), + 13: uint16(24394), + 14: uint16(24951), + 15: uint16(27743), + 16: uint16(30074), + 17: uint16(30086), + 18: uint16(31968), + 19: uint16(32115), + 20: uint16(32177), + 21: uint16(32652), + 22: uint16(33108), + 23: uint16(33313), + 24: uint16(34193), + 25: uint16(35137), + 26: uint16(35611), + 27: uint16(37628), + 28: uint16(38477), + 29: uint16(40007), + 30: uint16(20171), + 31: uint16(20215), + 32: uint16(20491), + 33: uint16(20977), + 34: uint16(22607), + 35: uint16(24887), + 36: uint16(24894), + 37: uint16(24936), + 38: uint16(25913), + 39: uint16(27114), + 40: uint16(28433), + 41: uint16(30117), + 42: uint16(30342), + 43: uint16(30422), + 44: uint16(31623), + 45: uint16(33445), + 46: uint16(33995), + 47: uint16(63744), + 48: uint16(37799), + 49: uint16(38283), + 50: uint16(21888), + 51: uint16(23458), + 52: uint16(22353), + 53: uint16(63745), + 54: uint16(31923), + 55: uint16(32697), + 56: uint16(37301), + 57: uint16(20520), + 58: uint16(21435), + 59: uint16(23621), + 60: uint16(24040), + 61: uint16(25298), + 62: uint16(25454), + 63: uint16(25818), + 64: uint16(25831), + 65: uint16(28192), + 66: uint16(28844), + 67: uint16(31067), + 68: uint16(36317), + 69: uint16(36382), + 70: uint16(63746), + 71: uint16(36989), + 72: uint16(37445), + 73: uint16(37624), + 74: uint16(20094), + 75: uint16(20214), + 76: uint16(20581), + 77: uint16(24062), + 78: uint16(24314), + 79: uint16(24838), + 80: uint16(26967), + 81: uint16(33137), + 82: uint16(34388), + 83: uint16(36423), + 84: uint16(37749), + 85: uint16(39467), + 86: uint16(20062), + 87: uint16(20625), + 88: uint16(26480), + 89: uint16(26688), + 90: uint16(20745), + 91: uint16(21133), + 92: uint16(21138), + 93: uint16(27298), + }, + 43: { + 0: uint16(30652), + 1: uint16(37392), + 2: uint16(40660), + 3: uint16(21163), + 4: uint16(24623), + 5: uint16(36850), + 6: uint16(20552), + 7: uint16(25001), + 8: uint16(25581), + 9: uint16(25802), + 10: uint16(26684), + 11: uint16(27268), + 12: uint16(28608), + 13: uint16(33160), + 14: uint16(35233), + 15: uint16(38548), + 16: uint16(22533), + 17: uint16(29309), + 18: uint16(29356), + 19: uint16(29956), + 20: uint16(32121), + 21: uint16(32365), + 22: uint16(32937), + 23: uint16(35211), + 24: uint16(35700), + 25: uint16(36963), + 26: uint16(40273), + 27: uint16(25225), + 28: uint16(27770), + 29: uint16(28500), + 30: uint16(32080), + 31: uint16(32570), + 32: uint16(35363), + 33: uint16(20860), + 34: uint16(24906), + 35: uint16(31645), + 36: uint16(35609), + 37: uint16(37463), + 38: uint16(37772), + 39: uint16(20140), + 40: uint16(20435), + 41: uint16(20510), + 42: uint16(20670), + 43: uint16(20742), + 44: uint16(21185), + 45: uint16(21197), + 46: uint16(21375), + 47: uint16(22384), + 48: uint16(22659), + 49: uint16(24218), + 50: uint16(24465), + 51: uint16(24950), + 52: uint16(25004), + 53: uint16(25806), + 54: uint16(25964), + 55: uint16(26223), + 56: uint16(26299), + 57: uint16(26356), + 58: uint16(26775), + 59: uint16(28039), + 60: uint16(28805), + 61: uint16(28913), + 62: uint16(29855), + 63: uint16(29861), + 64: uint16(29898), + 65: uint16(30169), + 66: uint16(30828), + 67: uint16(30956), + 68: uint16(31455), + 69: uint16(31478), + 70: uint16(32069), + 71: uint16(32147), + 72: uint16(32789), + 73: uint16(32831), + 74: uint16(33051), + 75: uint16(33686), + 76: uint16(35686), + 77: uint16(36629), + 78: uint16(36885), + 79: uint16(37857), + 80: uint16(38915), + 81: uint16(38968), + 82: uint16(39514), + 83: uint16(39912), + 84: uint16(20418), + 85: uint16(21843), + 86: uint16(22586), + 87: uint16(22865), + 88: uint16(23395), + 89: uint16(23622), + 90: uint16(24760), + 91: uint16(25106), + 92: uint16(26690), + 93: uint16(26800), + }, + 44: { + 0: uint16(26856), + 1: uint16(28330), + 2: uint16(30028), + 3: uint16(30328), + 4: uint16(30926), + 5: uint16(31293), + 6: uint16(31995), + 7: uint16(32363), + 8: uint16(32380), + 9: uint16(35336), + 10: uint16(35489), + 11: uint16(35903), + 12: uint16(38542), + 13: uint16(40388), + 14: uint16(21476), + 15: uint16(21481), + 16: uint16(21578), + 17: uint16(21617), + 18: uint16(22266), + 19: uint16(22993), + 20: uint16(23396), + 21: uint16(23611), + 22: uint16(24235), + 23: uint16(25335), + 24: uint16(25911), + 25: uint16(25925), + 26: uint16(25970), + 27: uint16(26272), + 28: uint16(26543), + 29: uint16(27073), + 30: uint16(27837), + 31: uint16(30204), + 32: uint16(30352), + 33: uint16(30590), + 34: uint16(31295), + 35: uint16(32660), + 36: uint16(32771), + 37: uint16(32929), + 38: uint16(33167), + 39: uint16(33510), + 40: uint16(33533), + 41: uint16(33776), + 42: uint16(34241), + 43: uint16(34865), + 44: uint16(34996), + 45: uint16(35493), + 46: uint16(63747), + 47: uint16(36764), + 48: uint16(37678), + 49: uint16(38599), + 50: uint16(39015), + 51: uint16(39640), + 52: uint16(40723), + 53: uint16(21741), + 54: uint16(26011), + 55: uint16(26354), + 56: uint16(26767), + 57: uint16(31296), + 58: uint16(35895), + 59: uint16(40288), + 60: uint16(22256), + 61: uint16(22372), + 62: uint16(23825), + 63: uint16(26118), + 64: uint16(26801), + 65: uint16(26829), + 66: uint16(28414), + 67: uint16(29736), + 68: uint16(34974), + 69: uint16(39908), + 70: uint16(27752), + 71: uint16(63748), + 72: uint16(39592), + 73: uint16(20379), + 74: uint16(20844), + 75: uint16(20849), + 76: uint16(21151), + 77: uint16(23380), + 78: uint16(24037), + 79: uint16(24656), + 80: uint16(24685), + 81: uint16(25329), + 82: uint16(25511), + 83: uint16(25915), + 84: uint16(29657), + 85: uint16(31354), + 86: uint16(34467), + 87: uint16(36002), + 88: uint16(38799), + 89: uint16(20018), + 90: uint16(23521), + 91: uint16(25096), + 92: uint16(26524), + 93: uint16(29916), + }, + 45: { + 0: uint16(31185), + 1: uint16(33747), + 2: uint16(35463), + 3: uint16(35506), + 4: uint16(36328), + 5: uint16(36942), + 6: uint16(37707), + 7: uint16(38982), + 8: uint16(24275), + 9: uint16(27112), + 10: uint16(34303), + 11: uint16(37101), + 12: uint16(63749), + 13: uint16(20896), + 14: uint16(23448), + 15: uint16(23532), + 16: uint16(24931), + 17: uint16(26874), + 18: uint16(27454), + 19: uint16(28748), + 20: uint16(29743), + 21: uint16(29912), + 22: uint16(31649), + 23: uint16(32592), + 24: uint16(33733), + 25: uint16(35264), + 26: uint16(36011), + 27: uint16(38364), + 28: uint16(39208), + 29: uint16(21038), + 30: uint16(24669), + 31: uint16(25324), + 32: uint16(36866), + 33: uint16(20362), + 34: uint16(20809), + 35: uint16(21281), + 36: uint16(22745), + 37: uint16(24291), + 38: uint16(26336), + 39: uint16(27960), + 40: uint16(28826), + 41: uint16(29378), + 42: uint16(29654), + 43: uint16(31568), + 44: uint16(33009), + 45: uint16(37979), + 46: uint16(21350), + 47: uint16(25499), + 48: uint16(32619), + 49: uint16(20054), + 50: uint16(20608), + 51: uint16(22602), + 52: uint16(22750), + 53: uint16(24618), + 54: uint16(24871), + 55: uint16(25296), + 56: uint16(27088), + 57: uint16(39745), + 58: uint16(23439), + 59: uint16(32024), + 60: uint16(32945), + 61: uint16(36703), + 62: uint16(20132), + 63: uint16(20689), + 64: uint16(21676), + 65: uint16(21932), + 66: uint16(23308), + 67: uint16(23968), + 68: uint16(24039), + 69: uint16(25898), + 70: uint16(25934), + 71: uint16(26657), + 72: uint16(27211), + 73: uint16(29409), + 74: uint16(30350), + 75: uint16(30703), + 76: uint16(32094), + 77: uint16(32761), + 78: uint16(33184), + 79: uint16(34126), + 80: uint16(34527), + 81: uint16(36611), + 82: uint16(36686), + 83: uint16(37066), + 84: uint16(39171), + 85: uint16(39509), + 86: uint16(39851), + 87: uint16(19992), + 88: uint16(20037), + 89: uint16(20061), + 90: uint16(20167), + 91: uint16(20465), + 92: uint16(20855), + 93: uint16(21246), + }, + 46: { + 0: uint16(21312), + 1: uint16(21475), + 2: uint16(21477), + 3: uint16(21646), + 4: uint16(22036), + 5: uint16(22389), + 6: uint16(22434), + 7: uint16(23495), + 8: uint16(23943), + 9: uint16(24272), + 10: uint16(25084), + 11: uint16(25304), + 12: uint16(25937), + 13: uint16(26552), + 14: uint16(26601), + 15: uint16(27083), + 16: uint16(27472), + 17: uint16(27590), + 18: uint16(27628), + 19: uint16(27714), + 20: uint16(28317), + 21: uint16(28792), + 22: uint16(29399), + 23: uint16(29590), + 24: uint16(29699), + 25: uint16(30655), + 26: uint16(30697), + 27: uint16(31350), + 28: uint16(32127), + 29: uint16(32777), + 30: uint16(33276), + 31: uint16(33285), + 32: uint16(33290), + 33: uint16(33503), + 34: uint16(34914), + 35: uint16(35635), + 36: uint16(36092), + 37: uint16(36544), + 38: uint16(36881), + 39: uint16(37041), + 40: uint16(37476), + 41: uint16(37558), + 42: uint16(39378), + 43: uint16(39493), + 44: uint16(40169), + 45: uint16(40407), + 46: uint16(40860), + 47: uint16(22283), + 48: uint16(23616), + 49: uint16(33738), + 50: uint16(38816), + 51: uint16(38827), + 52: uint16(40628), + 53: uint16(21531), + 54: uint16(31384), + 55: uint16(32676), + 56: uint16(35033), + 57: uint16(36557), + 58: uint16(37089), + 59: uint16(22528), + 60: uint16(23624), + 61: uint16(25496), + 62: uint16(31391), + 63: uint16(23470), + 64: uint16(24339), + 65: uint16(31353), + 66: uint16(31406), + 67: uint16(33422), + 68: uint16(36524), + 69: uint16(20518), + 70: uint16(21048), + 71: uint16(21240), + 72: uint16(21367), + 73: uint16(22280), + 74: uint16(25331), + 75: uint16(25458), + 76: uint16(27402), + 77: uint16(28099), + 78: uint16(30519), + 79: uint16(21413), + 80: uint16(29527), + 81: uint16(34152), + 82: uint16(36470), + 83: uint16(38357), + 84: uint16(26426), + 85: uint16(27331), + 86: uint16(28528), + 87: uint16(35437), + 88: uint16(36556), + 89: uint16(39243), + 90: uint16(63750), + 91: uint16(26231), + 92: uint16(27512), + 93: uint16(36020), + }, + 47: { + 0: uint16(39740), + 1: uint16(63751), + 2: uint16(21483), + 3: uint16(22317), + 4: uint16(22862), + 5: uint16(25542), + 6: uint16(27131), + 7: uint16(29674), + 8: uint16(30789), + 9: uint16(31418), + 10: uint16(31429), + 11: uint16(31998), + 12: uint16(33909), + 13: uint16(35215), + 14: uint16(36211), + 15: uint16(36917), + 16: uint16(38312), + 17: uint16(21243), + 18: uint16(22343), + 19: uint16(30023), + 20: uint16(31584), + 21: uint16(33740), + 22: uint16(37406), + 23: uint16(63752), + 24: uint16(27224), + 25: uint16(20811), + 26: uint16(21067), + 27: uint16(21127), + 28: uint16(25119), + 29: uint16(26840), + 30: uint16(26997), + 31: uint16(38553), + 32: uint16(20677), + 33: uint16(21156), + 34: uint16(21220), + 35: uint16(25027), + 36: uint16(26020), + 37: uint16(26681), + 38: uint16(27135), + 39: uint16(29822), + 40: uint16(31563), + 41: uint16(33465), + 42: uint16(33771), + 43: uint16(35250), + 44: uint16(35641), + 45: uint16(36817), + 46: uint16(39241), + 47: uint16(63753), + 48: uint16(20170), + 49: uint16(22935), + 50: uint16(25810), + 51: uint16(26129), + 52: uint16(27278), + 53: uint16(29748), + 54: uint16(31105), + 55: uint16(31165), + 56: uint16(33449), + 57: uint16(34942), + 58: uint16(34943), + 59: uint16(35167), + 60: uint16(63754), + 61: uint16(37670), + 62: uint16(20235), + 63: uint16(21450), + 64: uint16(24613), + 65: uint16(25201), + 66: uint16(27762), + 67: uint16(32026), + 68: uint16(32102), + 69: uint16(20120), + 70: uint16(20834), + 71: uint16(30684), + 72: uint16(32943), + 73: uint16(20225), + 74: uint16(20238), + 75: uint16(20854), + 76: uint16(20864), + 77: uint16(21980), + 78: uint16(22120), + 79: uint16(22331), + 80: uint16(22522), + 81: uint16(22524), + 82: uint16(22804), + 83: uint16(22855), + 84: uint16(22931), + 85: uint16(23492), + 86: uint16(23696), + 87: uint16(23822), + 88: uint16(24049), + 89: uint16(24190), + 90: uint16(24524), + 91: uint16(25216), + 92: uint16(26071), + 93: uint16(26083), + }, + 48: { + 0: uint16(26398), + 1: uint16(26399), + 2: uint16(26462), + 3: uint16(26827), + 4: uint16(26820), + 5: uint16(27231), + 6: uint16(27450), + 7: uint16(27683), + 8: uint16(27773), + 9: uint16(27778), + 10: uint16(28103), + 11: uint16(29592), + 12: uint16(29734), + 13: uint16(29738), + 14: uint16(29826), + 15: uint16(29859), + 16: uint16(30072), + 17: uint16(30079), + 18: uint16(30849), + 19: uint16(30959), + 20: uint16(31041), + 21: uint16(31047), + 22: uint16(31048), + 23: uint16(31098), + 24: uint16(31637), + 25: uint16(32000), + 26: uint16(32186), + 27: uint16(32648), + 28: uint16(32774), + 29: uint16(32813), + 30: uint16(32908), + 31: uint16(35352), + 32: uint16(35663), + 33: uint16(35912), + 34: uint16(36215), + 35: uint16(37665), + 36: uint16(37668), + 37: uint16(39138), + 38: uint16(39249), + 39: uint16(39438), + 40: uint16(39439), + 41: uint16(39525), + 42: uint16(40594), + 43: uint16(32202), + 44: uint16(20342), + 45: uint16(21513), + 46: uint16(25326), + 47: uint16(26708), + 48: uint16(37329), + 49: uint16(21931), + 50: uint16(20794), + 51: uint16(63755), + 52: uint16(63756), + 53: uint16(23068), + 54: uint16(25062), + 55: uint16(63757), + 56: uint16(25295), + 57: uint16(25343), + 58: uint16(63758), + 59: uint16(63759), + 60: uint16(63760), + 61: uint16(63761), + 62: uint16(63762), + 63: uint16(63763), + 64: uint16(37027), + 65: uint16(63764), + 66: uint16(63765), + 67: uint16(63766), + 68: uint16(63767), + 69: uint16(63768), + 70: uint16(35582), + 71: uint16(63769), + 72: uint16(63770), + 73: uint16(63771), + 74: uint16(63772), + 75: uint16(26262), + 76: uint16(63773), + 77: uint16(29014), + 78: uint16(63774), + 79: uint16(63775), + 80: uint16(38627), + 81: uint16(63776), + 82: uint16(25423), + 83: uint16(25466), + 84: uint16(21335), + 85: uint16(63777), + 86: uint16(26511), + 87: uint16(26976), + 88: uint16(28275), + 89: uint16(63778), + 90: uint16(30007), + 91: uint16(63779), + 92: uint16(63780), + 93: uint16(63781), + }, + 49: { + 0: uint16(32013), + 1: uint16(63782), + 2: uint16(63783), + 3: uint16(34930), + 4: uint16(22218), + 5: uint16(23064), + 6: uint16(63784), + 7: uint16(63785), + 8: uint16(63786), + 9: uint16(63787), + 10: uint16(63788), + 11: uint16(20035), + 12: uint16(63789), + 13: uint16(20839), + 14: uint16(22856), + 15: uint16(26608), + 16: uint16(32784), + 17: uint16(63790), + 18: uint16(22899), + 19: uint16(24180), + 20: uint16(25754), + 21: uint16(31178), + 22: uint16(24565), + 23: uint16(24684), + 24: uint16(25288), + 25: uint16(25467), + 26: uint16(23527), + 27: uint16(23511), + 28: uint16(21162), + 29: uint16(63791), + 30: uint16(22900), + 31: uint16(24361), + 32: uint16(24594), + 33: uint16(63792), + 34: uint16(63793), + 35: uint16(63794), + 36: uint16(29785), + 37: uint16(63795), + 38: uint16(63796), + 39: uint16(63797), + 40: uint16(63798), + 41: uint16(63799), + 42: uint16(63800), + 43: uint16(39377), + 44: uint16(63801), + 45: uint16(63802), + 46: uint16(63803), + 47: uint16(63804), + 48: uint16(63805), + 49: uint16(63806), + 50: uint16(63807), + 51: uint16(63808), + 52: uint16(63809), + 53: uint16(63810), + 54: uint16(63811), + 55: uint16(28611), + 56: uint16(63812), + 57: uint16(63813), + 58: uint16(33215), + 59: uint16(36786), + 60: uint16(24817), + 61: uint16(63814), + 62: uint16(63815), + 63: uint16(33126), + 64: uint16(63816), + 65: uint16(63817), + 66: uint16(23615), + 67: uint16(63818), + 68: uint16(63819), + 69: uint16(63820), + 70: uint16(63821), + 71: uint16(63822), + 72: uint16(63823), + 73: uint16(63824), + 74: uint16(63825), + 75: uint16(23273), + 76: uint16(35365), + 77: uint16(26491), + 78: uint16(32016), + 79: uint16(63826), + 80: uint16(63827), + 81: uint16(63828), + 82: uint16(63829), + 83: uint16(63830), + 84: uint16(63831), + 85: uint16(33021), + 86: uint16(63832), + 87: uint16(63833), + 88: uint16(23612), + 89: uint16(27877), + 90: uint16(21311), + 91: uint16(28346), + 92: uint16(22810), + 93: uint16(33590), + }, + 50: { + 0: uint16(20025), + 1: uint16(20150), + 2: uint16(20294), + 3: uint16(21934), + 4: uint16(22296), + 5: uint16(22727), + 6: uint16(24406), + 7: uint16(26039), + 8: uint16(26086), + 9: uint16(27264), + 10: uint16(27573), + 11: uint16(28237), + 12: uint16(30701), + 13: uint16(31471), + 14: uint16(31774), + 15: uint16(32222), + 16: uint16(34507), + 17: uint16(34962), + 18: uint16(37170), + 19: uint16(37723), + 20: uint16(25787), + 21: uint16(28606), + 22: uint16(29562), + 23: uint16(30136), + 24: uint16(36948), + 25: uint16(21846), + 26: uint16(22349), + 27: uint16(25018), + 28: uint16(25812), + 29: uint16(26311), + 30: uint16(28129), + 31: uint16(28251), + 32: uint16(28525), + 33: uint16(28601), + 34: uint16(30192), + 35: uint16(32835), + 36: uint16(33213), + 37: uint16(34113), + 38: uint16(35203), + 39: uint16(35527), + 40: uint16(35674), + 41: uint16(37663), + 42: uint16(27795), + 43: uint16(30035), + 44: uint16(31572), + 45: uint16(36367), + 46: uint16(36957), + 47: uint16(21776), + 48: uint16(22530), + 49: uint16(22616), + 50: uint16(24162), + 51: uint16(25095), + 52: uint16(25758), + 53: uint16(26848), + 54: uint16(30070), + 55: uint16(31958), + 56: uint16(34739), + 57: uint16(40680), + 58: uint16(20195), + 59: uint16(22408), + 60: uint16(22382), + 61: uint16(22823), + 62: uint16(23565), + 63: uint16(23729), + 64: uint16(24118), + 65: uint16(24453), + 66: uint16(25140), + 67: uint16(25825), + 68: uint16(29619), + 69: uint16(33274), + 70: uint16(34955), + 71: uint16(36024), + 72: uint16(38538), + 73: uint16(40667), + 74: uint16(23429), + 75: uint16(24503), + 76: uint16(24755), + 77: uint16(20498), + 78: uint16(20992), + 79: uint16(21040), + 80: uint16(22294), + 81: uint16(22581), + 82: uint16(22615), + 83: uint16(23566), + 84: uint16(23648), + 85: uint16(23798), + 86: uint16(23947), + 87: uint16(24230), + 88: uint16(24466), + 89: uint16(24764), + 90: uint16(25361), + 91: uint16(25481), + 92: uint16(25623), + 93: uint16(26691), + }, + 51: { + 0: uint16(26873), + 1: uint16(27330), + 2: uint16(28120), + 3: uint16(28193), + 4: uint16(28372), + 5: uint16(28644), + 6: uint16(29182), + 7: uint16(30428), + 8: uint16(30585), + 9: uint16(31153), + 10: uint16(31291), + 11: uint16(33796), + 12: uint16(35241), + 13: uint16(36077), + 14: uint16(36339), + 15: uint16(36424), + 16: uint16(36867), + 17: uint16(36884), + 18: uint16(36947), + 19: uint16(37117), + 20: uint16(37709), + 21: uint16(38518), + 22: uint16(38876), + 23: uint16(27602), + 24: uint16(28678), + 25: uint16(29272), + 26: uint16(29346), + 27: uint16(29544), + 28: uint16(30563), + 29: uint16(31167), + 30: uint16(31716), + 31: uint16(32411), + 32: uint16(35712), + 33: uint16(22697), + 34: uint16(24775), + 35: uint16(25958), + 36: uint16(26109), + 37: uint16(26302), + 38: uint16(27788), + 39: uint16(28958), + 40: uint16(29129), + 41: uint16(35930), + 42: uint16(38931), + 43: uint16(20077), + 44: uint16(31361), + 45: uint16(20189), + 46: uint16(20908), + 47: uint16(20941), + 48: uint16(21205), + 49: uint16(21516), + 50: uint16(24999), + 51: uint16(26481), + 52: uint16(26704), + 53: uint16(26847), + 54: uint16(27934), + 55: uint16(28540), + 56: uint16(30140), + 57: uint16(30643), + 58: uint16(31461), + 59: uint16(33012), + 60: uint16(33891), + 61: uint16(37509), + 62: uint16(20828), + 63: uint16(26007), + 64: uint16(26460), + 65: uint16(26515), + 66: uint16(30168), + 67: uint16(31431), + 68: uint16(33651), + 69: uint16(63834), + 70: uint16(35910), + 71: uint16(36887), + 72: uint16(38957), + 73: uint16(23663), + 74: uint16(33216), + 75: uint16(33434), + 76: uint16(36929), + 77: uint16(36975), + 78: uint16(37389), + 79: uint16(24471), + 80: uint16(23965), + 81: uint16(27225), + 82: uint16(29128), + 83: uint16(30331), + 84: uint16(31561), + 85: uint16(34276), + 86: uint16(35588), + 87: uint16(37159), + 88: uint16(39472), + 89: uint16(21895), + 90: uint16(25078), + 91: uint16(63835), + 92: uint16(30313), + 93: uint16(32645), + }, + 52: { + 0: uint16(34367), + 1: uint16(34746), + 2: uint16(35064), + 3: uint16(37007), + 4: uint16(63836), + 5: uint16(27931), + 6: uint16(28889), + 7: uint16(29662), + 8: uint16(32097), + 9: uint16(33853), + 10: uint16(63837), + 11: uint16(37226), + 12: uint16(39409), + 13: uint16(63838), + 14: uint16(20098), + 15: uint16(21365), + 16: uint16(27396), + 17: uint16(27410), + 18: uint16(28734), + 19: uint16(29211), + 20: uint16(34349), + 21: uint16(40478), + 22: uint16(21068), + 23: uint16(36771), + 24: uint16(23888), + 25: uint16(25829), + 26: uint16(25900), + 27: uint16(27414), + 28: uint16(28651), + 29: uint16(31811), + 30: uint16(32412), + 31: uint16(34253), + 32: uint16(35172), + 33: uint16(35261), + 34: uint16(25289), + 35: uint16(33240), + 36: uint16(34847), + 37: uint16(24266), + 38: uint16(26391), + 39: uint16(28010), + 40: uint16(29436), + 41: uint16(29701), + 42: uint16(29807), + 43: uint16(34690), + 44: uint16(37086), + 45: uint16(20358), + 46: uint16(23821), + 47: uint16(24480), + 48: uint16(33802), + 49: uint16(20919), + 50: uint16(25504), + 51: uint16(30053), + 52: uint16(20142), + 53: uint16(20486), + 54: uint16(20841), + 55: uint16(20937), + 56: uint16(26753), + 57: uint16(27153), + 58: uint16(31918), + 59: uint16(31921), + 60: uint16(31975), + 61: uint16(33391), + 62: uint16(35538), + 63: uint16(36635), + 64: uint16(37327), + 65: uint16(20406), + 66: uint16(20791), + 67: uint16(21237), + 68: uint16(21570), + 69: uint16(24300), + 70: uint16(24942), + 71: uint16(25150), + 72: uint16(26053), + 73: uint16(27354), + 74: uint16(28670), + 75: uint16(31018), + 76: uint16(34268), + 77: uint16(34851), + 78: uint16(38317), + 79: uint16(39522), + 80: uint16(39530), + 81: uint16(40599), + 82: uint16(40654), + 83: uint16(21147), + 84: uint16(26310), + 85: uint16(27511), + 86: uint16(28701), + 87: uint16(31019), + 88: uint16(36706), + 89: uint16(38722), + 90: uint16(24976), + 91: uint16(25088), + 92: uint16(25891), + 93: uint16(28451), + }, + 53: { + 0: uint16(29001), + 1: uint16(29833), + 2: uint16(32244), + 3: uint16(32879), + 4: uint16(34030), + 5: uint16(36646), + 6: uint16(36899), + 7: uint16(37706), + 8: uint16(20925), + 9: uint16(21015), + 10: uint16(21155), + 11: uint16(27916), + 12: uint16(28872), + 13: uint16(35010), + 14: uint16(24265), + 15: uint16(25986), + 16: uint16(27566), + 17: uint16(28610), + 18: uint16(31806), + 19: uint16(29557), + 20: uint16(20196), + 21: uint16(20278), + 22: uint16(22265), + 23: uint16(63839), + 24: uint16(23738), + 25: uint16(23994), + 26: uint16(24604), + 27: uint16(29618), + 28: uint16(31533), + 29: uint16(32666), + 30: uint16(32718), + 31: uint16(32838), + 32: uint16(36894), + 33: uint16(37428), + 34: uint16(38646), + 35: uint16(38728), + 36: uint16(38936), + 37: uint16(40801), + 38: uint16(20363), + 39: uint16(28583), + 40: uint16(31150), + 41: uint16(37300), + 42: uint16(38583), + 43: uint16(21214), + 44: uint16(63840), + 45: uint16(25736), + 46: uint16(25796), + 47: uint16(27347), + 48: uint16(28510), + 49: uint16(28696), + 50: uint16(29200), + 51: uint16(30439), + 52: uint16(32769), + 53: uint16(34310), + 54: uint16(34396), + 55: uint16(36335), + 56: uint16(36613), + 57: uint16(38706), + 58: uint16(39791), + 59: uint16(40442), + 60: uint16(40565), + 61: uint16(30860), + 62: uint16(31103), + 63: uint16(32160), + 64: uint16(33737), + 65: uint16(37636), + 66: uint16(40575), + 67: uint16(40595), + 68: uint16(35542), + 69: uint16(22751), + 70: uint16(24324), + 71: uint16(26407), + 72: uint16(28711), + 73: uint16(29903), + 74: uint16(31840), + 75: uint16(32894), + 76: uint16(20769), + 77: uint16(28712), + 78: uint16(29282), + 79: uint16(30922), + 80: uint16(36034), + 81: uint16(36058), + 82: uint16(36084), + 83: uint16(38647), + 84: uint16(20102), + 85: uint16(20698), + 86: uint16(23534), + 87: uint16(24278), + 88: uint16(26009), + 89: uint16(29134), + 90: uint16(30274), + 91: uint16(30637), + 92: uint16(32842), + 93: uint16(34044), + }, + 54: { + 0: uint16(36988), + 1: uint16(39719), + 2: uint16(40845), + 3: uint16(22744), + 4: uint16(23105), + 5: uint16(23650), + 6: uint16(27155), + 7: uint16(28122), + 8: uint16(28431), + 9: uint16(30267), + 10: uint16(32047), + 11: uint16(32311), + 12: uint16(34078), + 13: uint16(35128), + 14: uint16(37860), + 15: uint16(38475), + 16: uint16(21129), + 17: uint16(26066), + 18: uint16(26611), + 19: uint16(27060), + 20: uint16(27969), + 21: uint16(28316), + 22: uint16(28687), + 23: uint16(29705), + 24: uint16(29792), + 25: uint16(30041), + 26: uint16(30244), + 27: uint16(30827), + 28: uint16(35628), + 29: uint16(39006), + 30: uint16(20845), + 31: uint16(25134), + 32: uint16(38520), + 33: uint16(20374), + 34: uint16(20523), + 35: uint16(23833), + 36: uint16(28138), + 37: uint16(32184), + 38: uint16(36650), + 39: uint16(24459), + 40: uint16(24900), + 41: uint16(26647), + 42: uint16(63841), + 43: uint16(38534), + 44: uint16(21202), + 45: uint16(32907), + 46: uint16(20956), + 47: uint16(20940), + 48: uint16(26974), + 49: uint16(31260), + 50: uint16(32190), + 51: uint16(33777), + 52: uint16(38517), + 53: uint16(20442), + 54: uint16(21033), + 55: uint16(21400), + 56: uint16(21519), + 57: uint16(21774), + 58: uint16(23653), + 59: uint16(24743), + 60: uint16(26446), + 61: uint16(26792), + 62: uint16(28012), + 63: uint16(29313), + 64: uint16(29432), + 65: uint16(29702), + 66: uint16(29827), + 67: uint16(63842), + 68: uint16(30178), + 69: uint16(31852), + 70: uint16(32633), + 71: uint16(32696), + 72: uint16(33673), + 73: uint16(35023), + 74: uint16(35041), + 75: uint16(37324), + 76: uint16(37328), + 77: uint16(38626), + 78: uint16(39881), + 79: uint16(21533), + 80: uint16(28542), + 81: uint16(29136), + 82: uint16(29848), + 83: uint16(34298), + 84: uint16(36522), + 85: uint16(38563), + 86: uint16(40023), + 87: uint16(40607), + 88: uint16(26519), + 89: uint16(28107), + 90: uint16(29747), + 91: uint16(33256), + 92: uint16(38678), + 93: uint16(30764), + }, + 55: { + 0: uint16(31435), + 1: uint16(31520), + 2: uint16(31890), + 3: uint16(25705), + 4: uint16(29802), + 5: uint16(30194), + 6: uint16(30908), + 7: uint16(30952), + 8: uint16(39340), + 9: uint16(39764), + 10: uint16(40635), + 11: uint16(23518), + 12: uint16(24149), + 13: uint16(28448), + 14: uint16(33180), + 15: uint16(33707), + 16: uint16(37000), + 17: uint16(19975), + 18: uint16(21325), + 19: uint16(23081), + 20: uint16(24018), + 21: uint16(24398), + 22: uint16(24930), + 23: uint16(25405), + 24: uint16(26217), + 25: uint16(26364), + 26: uint16(28415), + 27: uint16(28459), + 28: uint16(28771), + 29: uint16(30622), + 30: uint16(33836), + 31: uint16(34067), + 32: uint16(34875), + 33: uint16(36627), + 34: uint16(39237), + 35: uint16(39995), + 36: uint16(21788), + 37: uint16(25273), + 38: uint16(26411), + 39: uint16(27819), + 40: uint16(33545), + 41: uint16(35178), + 42: uint16(38778), + 43: uint16(20129), + 44: uint16(22916), + 45: uint16(24536), + 46: uint16(24537), + 47: uint16(26395), + 48: uint16(32178), + 49: uint16(32596), + 50: uint16(33426), + 51: uint16(33579), + 52: uint16(33725), + 53: uint16(36638), + 54: uint16(37017), + 55: uint16(22475), + 56: uint16(22969), + 57: uint16(23186), + 58: uint16(23504), + 59: uint16(26151), + 60: uint16(26522), + 61: uint16(26757), + 62: uint16(27599), + 63: uint16(29028), + 64: uint16(32629), + 65: uint16(36023), + 66: uint16(36067), + 67: uint16(36993), + 68: uint16(39749), + 69: uint16(33032), + 70: uint16(35978), + 71: uint16(38476), + 72: uint16(39488), + 73: uint16(40613), + 74: uint16(23391), + 75: uint16(27667), + 76: uint16(29467), + 77: uint16(30450), + 78: uint16(30431), + 79: uint16(33804), + 80: uint16(20906), + 81: uint16(35219), + 82: uint16(20813), + 83: uint16(20885), + 84: uint16(21193), + 85: uint16(26825), + 86: uint16(27796), + 87: uint16(30468), + 88: uint16(30496), + 89: uint16(32191), + 90: uint16(32236), + 91: uint16(38754), + 92: uint16(40629), + 93: uint16(28357), + }, + 56: { + 0: uint16(34065), + 1: uint16(20901), + 2: uint16(21517), + 3: uint16(21629), + 4: uint16(26126), + 5: uint16(26269), + 6: uint16(26919), + 7: uint16(28319), + 8: uint16(30399), + 9: uint16(30609), + 10: uint16(33559), + 11: uint16(33986), + 12: uint16(34719), + 13: uint16(37225), + 14: uint16(37528), + 15: uint16(40180), + 16: uint16(34946), + 17: uint16(20398), + 18: uint16(20882), + 19: uint16(21215), + 20: uint16(22982), + 21: uint16(24125), + 22: uint16(24917), + 23: uint16(25720), + 24: uint16(25721), + 25: uint16(26286), + 26: uint16(26576), + 27: uint16(27169), + 28: uint16(27597), + 29: uint16(27611), + 30: uint16(29279), + 31: uint16(29281), + 32: uint16(29761), + 33: uint16(30520), + 34: uint16(30683), + 35: uint16(32791), + 36: uint16(33468), + 37: uint16(33541), + 38: uint16(35584), + 39: uint16(35624), + 40: uint16(35980), + 41: uint16(26408), + 42: uint16(27792), + 43: uint16(29287), + 44: uint16(30446), + 45: uint16(30566), + 46: uint16(31302), + 47: uint16(40361), + 48: uint16(27519), + 49: uint16(27794), + 50: uint16(22818), + 51: uint16(26406), + 52: uint16(33945), + 53: uint16(21359), + 54: uint16(22675), + 55: uint16(22937), + 56: uint16(24287), + 57: uint16(25551), + 58: uint16(26164), + 59: uint16(26483), + 60: uint16(28218), + 61: uint16(29483), + 62: uint16(31447), + 63: uint16(33495), + 64: uint16(37672), + 65: uint16(21209), + 66: uint16(24043), + 67: uint16(25006), + 68: uint16(25035), + 69: uint16(25098), + 70: uint16(25287), + 71: uint16(25771), + 72: uint16(26080), + 73: uint16(26969), + 74: uint16(27494), + 75: uint16(27595), + 76: uint16(28961), + 77: uint16(29687), + 78: uint16(30045), + 79: uint16(32326), + 80: uint16(33310), + 81: uint16(33538), + 82: uint16(34154), + 83: uint16(35491), + 84: uint16(36031), + 85: uint16(38695), + 86: uint16(40289), + 87: uint16(22696), + 88: uint16(40664), + 89: uint16(20497), + 90: uint16(21006), + 91: uint16(21563), + 92: uint16(21839), + 93: uint16(25991), + }, + 57: { + 0: uint16(27766), + 1: uint16(32010), + 2: uint16(32011), + 3: uint16(32862), + 4: uint16(34442), + 5: uint16(38272), + 6: uint16(38639), + 7: uint16(21247), + 8: uint16(27797), + 9: uint16(29289), + 10: uint16(21619), + 11: uint16(23194), + 12: uint16(23614), + 13: uint16(23883), + 14: uint16(24396), + 15: uint16(24494), + 16: uint16(26410), + 17: uint16(26806), + 18: uint16(26979), + 19: uint16(28220), + 20: uint16(28228), + 21: uint16(30473), + 22: uint16(31859), + 23: uint16(32654), + 24: uint16(34183), + 25: uint16(35598), + 26: uint16(36855), + 27: uint16(38753), + 28: uint16(40692), + 29: uint16(23735), + 30: uint16(24758), + 31: uint16(24845), + 32: uint16(25003), + 33: uint16(25935), + 34: uint16(26107), + 35: uint16(26108), + 36: uint16(27665), + 37: uint16(27887), + 38: uint16(29599), + 39: uint16(29641), + 40: uint16(32225), + 41: uint16(38292), + 42: uint16(23494), + 43: uint16(34588), + 44: uint16(35600), + 45: uint16(21085), + 46: uint16(21338), + 47: uint16(25293), + 48: uint16(25615), + 49: uint16(25778), + 50: uint16(26420), + 51: uint16(27192), + 52: uint16(27850), + 53: uint16(29632), + 54: uint16(29854), + 55: uint16(31636), + 56: uint16(31893), + 57: uint16(32283), + 58: uint16(33162), + 59: uint16(33334), + 60: uint16(34180), + 61: uint16(36843), + 62: uint16(38649), + 63: uint16(39361), + 64: uint16(20276), + 65: uint16(21322), + 66: uint16(21453), + 67: uint16(21467), + 68: uint16(25292), + 69: uint16(25644), + 70: uint16(25856), + 71: uint16(26001), + 72: uint16(27075), + 73: uint16(27886), + 74: uint16(28504), + 75: uint16(29677), + 76: uint16(30036), + 77: uint16(30242), + 78: uint16(30436), + 79: uint16(30460), + 80: uint16(30928), + 81: uint16(30971), + 82: uint16(31020), + 83: uint16(32070), + 84: uint16(33324), + 85: uint16(34784), + 86: uint16(36820), + 87: uint16(38930), + 88: uint16(39151), + 89: uint16(21187), + 90: uint16(25300), + 91: uint16(25765), + 92: uint16(28196), + 93: uint16(28497), + }, + 58: { + 0: uint16(30332), + 1: uint16(36299), + 2: uint16(37297), + 3: uint16(37474), + 4: uint16(39662), + 5: uint16(39747), + 6: uint16(20515), + 7: uint16(20621), + 8: uint16(22346), + 9: uint16(22952), + 10: uint16(23592), + 11: uint16(24135), + 12: uint16(24439), + 13: uint16(25151), + 14: uint16(25918), + 15: uint16(26041), + 16: uint16(26049), + 17: uint16(26121), + 18: uint16(26507), + 19: uint16(27036), + 20: uint16(28354), + 21: uint16(30917), + 22: uint16(32033), + 23: uint16(32938), + 24: uint16(33152), + 25: uint16(33323), + 26: uint16(33459), + 27: uint16(33953), + 28: uint16(34444), + 29: uint16(35370), + 30: uint16(35607), + 31: uint16(37030), + 32: uint16(38450), + 33: uint16(40848), + 34: uint16(20493), + 35: uint16(20467), + 36: uint16(63843), + 37: uint16(22521), + 38: uint16(24472), + 39: uint16(25308), + 40: uint16(25490), + 41: uint16(26479), + 42: uint16(28227), + 43: uint16(28953), + 44: uint16(30403), + 45: uint16(32972), + 46: uint16(32986), + 47: uint16(35060), + 48: uint16(35061), + 49: uint16(35097), + 50: uint16(36064), + 51: uint16(36649), + 52: uint16(37197), + 53: uint16(38506), + 54: uint16(20271), + 55: uint16(20336), + 56: uint16(24091), + 57: uint16(26575), + 58: uint16(26658), + 59: uint16(30333), + 60: uint16(30334), + 61: uint16(39748), + 62: uint16(24161), + 63: uint16(27146), + 64: uint16(29033), + 65: uint16(29140), + 66: uint16(30058), + 67: uint16(63844), + 68: uint16(32321), + 69: uint16(34115), + 70: uint16(34281), + 71: uint16(39132), + 72: uint16(20240), + 73: uint16(31567), + 74: uint16(32624), + 75: uint16(38309), + 76: uint16(20961), + 77: uint16(24070), + 78: uint16(26805), + 79: uint16(27710), + 80: uint16(27726), + 81: uint16(27867), + 82: uint16(29359), + 83: uint16(31684), + 84: uint16(33539), + 85: uint16(27861), + 86: uint16(29754), + 87: uint16(20731), + 88: uint16(21128), + 89: uint16(22721), + 90: uint16(25816), + 91: uint16(27287), + 92: uint16(29863), + 93: uint16(30294), + }, + 59: { + 0: uint16(30887), + 1: uint16(34327), + 2: uint16(38370), + 3: uint16(38713), + 4: uint16(63845), + 5: uint16(21342), + 6: uint16(24321), + 7: uint16(35722), + 8: uint16(36776), + 9: uint16(36783), + 10: uint16(37002), + 11: uint16(21029), + 12: uint16(30629), + 13: uint16(40009), + 14: uint16(40712), + 15: uint16(19993), + 16: uint16(20482), + 17: uint16(20853), + 18: uint16(23643), + 19: uint16(24183), + 20: uint16(26142), + 21: uint16(26170), + 22: uint16(26564), + 23: uint16(26821), + 24: uint16(28851), + 25: uint16(29953), + 26: uint16(30149), + 27: uint16(31177), + 28: uint16(31453), + 29: uint16(36647), + 30: uint16(39200), + 31: uint16(39432), + 32: uint16(20445), + 33: uint16(22561), + 34: uint16(22577), + 35: uint16(23542), + 36: uint16(26222), + 37: uint16(27493), + 38: uint16(27921), + 39: uint16(28282), + 40: uint16(28541), + 41: uint16(29668), + 42: uint16(29995), + 43: uint16(33769), + 44: uint16(35036), + 45: uint16(35091), + 46: uint16(35676), + 47: uint16(36628), + 48: uint16(20239), + 49: uint16(20693), + 50: uint16(21264), + 51: uint16(21340), + 52: uint16(23443), + 53: uint16(24489), + 54: uint16(26381), + 55: uint16(31119), + 56: uint16(33145), + 57: uint16(33583), + 58: uint16(34068), + 59: uint16(35079), + 60: uint16(35206), + 61: uint16(36665), + 62: uint16(36667), + 63: uint16(39333), + 64: uint16(39954), + 65: uint16(26412), + 66: uint16(20086), + 67: uint16(20472), + 68: uint16(22857), + 69: uint16(23553), + 70: uint16(23791), + 71: uint16(23792), + 72: uint16(25447), + 73: uint16(26834), + 74: uint16(28925), + 75: uint16(29090), + 76: uint16(29739), + 77: uint16(32299), + 78: uint16(34028), + 79: uint16(34562), + 80: uint16(36898), + 81: uint16(37586), + 82: uint16(40179), + 83: uint16(19981), + 84: uint16(20184), + 85: uint16(20463), + 86: uint16(20613), + 87: uint16(21078), + 88: uint16(21103), + 89: uint16(21542), + 90: uint16(21648), + 91: uint16(22496), + 92: uint16(22827), + 93: uint16(23142), + }, + 60: { + 0: uint16(23386), + 1: uint16(23413), + 2: uint16(23500), + 3: uint16(24220), + 4: uint16(63846), + 5: uint16(25206), + 6: uint16(25975), + 7: uint16(26023), + 8: uint16(28014), + 9: uint16(28325), + 10: uint16(29238), + 11: uint16(31526), + 12: uint16(31807), + 13: uint16(32566), + 14: uint16(33104), + 15: uint16(33105), + 16: uint16(33178), + 17: uint16(33344), + 18: uint16(33433), + 19: uint16(33705), + 20: uint16(35331), + 21: uint16(36000), + 22: uint16(36070), + 23: uint16(36091), + 24: uint16(36212), + 25: uint16(36282), + 26: uint16(37096), + 27: uint16(37340), + 28: uint16(38428), + 29: uint16(38468), + 30: uint16(39385), + 31: uint16(40167), + 32: uint16(21271), + 33: uint16(20998), + 34: uint16(21545), + 35: uint16(22132), + 36: uint16(22707), + 37: uint16(22868), + 38: uint16(22894), + 39: uint16(24575), + 40: uint16(24996), + 41: uint16(25198), + 42: uint16(26128), + 43: uint16(27774), + 44: uint16(28954), + 45: uint16(30406), + 46: uint16(31881), + 47: uint16(31966), + 48: uint16(32027), + 49: uint16(33452), + 50: uint16(36033), + 51: uint16(38640), + 52: uint16(63847), + 53: uint16(20315), + 54: uint16(24343), + 55: uint16(24447), + 56: uint16(25282), + 57: uint16(23849), + 58: uint16(26379), + 59: uint16(26842), + 60: uint16(30844), + 61: uint16(32323), + 62: uint16(40300), + 63: uint16(19989), + 64: uint16(20633), + 65: uint16(21269), + 66: uint16(21290), + 67: uint16(21329), + 68: uint16(22915), + 69: uint16(23138), + 70: uint16(24199), + 71: uint16(24754), + 72: uint16(24970), + 73: uint16(25161), + 74: uint16(25209), + 75: uint16(26000), + 76: uint16(26503), + 77: uint16(27047), + 78: uint16(27604), + 79: uint16(27606), + 80: uint16(27607), + 81: uint16(27608), + 82: uint16(27832), + 83: uint16(63848), + 84: uint16(29749), + 85: uint16(30202), + 86: uint16(30738), + 87: uint16(30865), + 88: uint16(31189), + 89: uint16(31192), + 90: uint16(31875), + 91: uint16(32203), + 92: uint16(32737), + 93: uint16(32933), + }, + 61: { + 0: uint16(33086), + 1: uint16(33218), + 2: uint16(33778), + 3: uint16(34586), + 4: uint16(35048), + 5: uint16(35513), + 6: uint16(35692), + 7: uint16(36027), + 8: uint16(37145), + 9: uint16(38750), + 10: uint16(39131), + 11: uint16(40763), + 12: uint16(22188), + 13: uint16(23338), + 14: uint16(24428), + 15: uint16(25996), + 16: uint16(27315), + 17: uint16(27567), + 18: uint16(27996), + 19: uint16(28657), + 20: uint16(28693), + 21: uint16(29277), + 22: uint16(29613), + 23: uint16(36007), + 24: uint16(36051), + 25: uint16(38971), + 26: uint16(24977), + 27: uint16(27703), + 28: uint16(32856), + 29: uint16(39425), + 30: uint16(20045), + 31: uint16(20107), + 32: uint16(20123), + 33: uint16(20181), + 34: uint16(20282), + 35: uint16(20284), + 36: uint16(20351), + 37: uint16(20447), + 38: uint16(20735), + 39: uint16(21490), + 40: uint16(21496), + 41: uint16(21766), + 42: uint16(21987), + 43: uint16(22235), + 44: uint16(22763), + 45: uint16(22882), + 46: uint16(23057), + 47: uint16(23531), + 48: uint16(23546), + 49: uint16(23556), + 50: uint16(24051), + 51: uint16(24107), + 52: uint16(24473), + 53: uint16(24605), + 54: uint16(25448), + 55: uint16(26012), + 56: uint16(26031), + 57: uint16(26614), + 58: uint16(26619), + 59: uint16(26797), + 60: uint16(27515), + 61: uint16(27801), + 62: uint16(27863), + 63: uint16(28195), + 64: uint16(28681), + 65: uint16(29509), + 66: uint16(30722), + 67: uint16(31038), + 68: uint16(31040), + 69: uint16(31072), + 70: uint16(31169), + 71: uint16(31721), + 72: uint16(32023), + 73: uint16(32114), + 74: uint16(32902), + 75: uint16(33293), + 76: uint16(33678), + 77: uint16(34001), + 78: uint16(34503), + 79: uint16(35039), + 80: uint16(35408), + 81: uint16(35422), + 82: uint16(35613), + 83: uint16(36060), + 84: uint16(36198), + 85: uint16(36781), + 86: uint16(37034), + 87: uint16(39164), + 88: uint16(39391), + 89: uint16(40605), + 90: uint16(21066), + 91: uint16(63849), + 92: uint16(26388), + 93: uint16(63850), + }, + 62: { + 0: uint16(20632), + 1: uint16(21034), + 2: uint16(23665), + 3: uint16(25955), + 4: uint16(27733), + 5: uint16(29642), + 6: uint16(29987), + 7: uint16(30109), + 8: uint16(31639), + 9: uint16(33948), + 10: uint16(37240), + 11: uint16(38704), + 12: uint16(20087), + 13: uint16(25746), + 14: uint16(27578), + 15: uint16(29022), + 16: uint16(34217), + 17: uint16(19977), + 18: uint16(63851), + 19: uint16(26441), + 20: uint16(26862), + 21: uint16(28183), + 22: uint16(33439), + 23: uint16(34072), + 24: uint16(34923), + 25: uint16(25591), + 26: uint16(28545), + 27: uint16(37394), + 28: uint16(39087), + 29: uint16(19978), + 30: uint16(20663), + 31: uint16(20687), + 32: uint16(20767), + 33: uint16(21830), + 34: uint16(21930), + 35: uint16(22039), + 36: uint16(23360), + 37: uint16(23577), + 38: uint16(23776), + 39: uint16(24120), + 40: uint16(24202), + 41: uint16(24224), + 42: uint16(24258), + 43: uint16(24819), + 44: uint16(26705), + 45: uint16(27233), + 46: uint16(28248), + 47: uint16(29245), + 48: uint16(29248), + 49: uint16(29376), + 50: uint16(30456), + 51: uint16(31077), + 52: uint16(31665), + 53: uint16(32724), + 54: uint16(35059), + 55: uint16(35316), + 56: uint16(35443), + 57: uint16(35937), + 58: uint16(36062), + 59: uint16(38684), + 60: uint16(22622), + 61: uint16(29885), + 62: uint16(36093), + 63: uint16(21959), + 64: uint16(63852), + 65: uint16(31329), + 66: uint16(32034), + 67: uint16(33394), + 68: uint16(29298), + 69: uint16(29983), + 70: uint16(29989), + 71: uint16(63853), + 72: uint16(31513), + 73: uint16(22661), + 74: uint16(22779), + 75: uint16(23996), + 76: uint16(24207), + 77: uint16(24246), + 78: uint16(24464), + 79: uint16(24661), + 80: uint16(25234), + 81: uint16(25471), + 82: uint16(25933), + 83: uint16(26257), + 84: uint16(26329), + 85: uint16(26360), + 86: uint16(26646), + 87: uint16(26866), + 88: uint16(29312), + 89: uint16(29790), + 90: uint16(31598), + 91: uint16(32110), + 92: uint16(32214), + 93: uint16(32626), + }, + 63: { + 0: uint16(32997), + 1: uint16(33298), + 2: uint16(34223), + 3: uint16(35199), + 4: uint16(35475), + 5: uint16(36893), + 6: uint16(37604), + 7: uint16(40653), + 8: uint16(40736), + 9: uint16(22805), + 10: uint16(22893), + 11: uint16(24109), + 12: uint16(24796), + 13: uint16(26132), + 14: uint16(26227), + 15: uint16(26512), + 16: uint16(27728), + 17: uint16(28101), + 18: uint16(28511), + 19: uint16(30707), + 20: uint16(30889), + 21: uint16(33990), + 22: uint16(37323), + 23: uint16(37675), + 24: uint16(20185), + 25: uint16(20682), + 26: uint16(20808), + 27: uint16(21892), + 28: uint16(23307), + 29: uint16(23459), + 30: uint16(25159), + 31: uint16(25982), + 32: uint16(26059), + 33: uint16(28210), + 34: uint16(29053), + 35: uint16(29697), + 36: uint16(29764), + 37: uint16(29831), + 38: uint16(29887), + 39: uint16(30316), + 40: uint16(31146), + 41: uint16(32218), + 42: uint16(32341), + 43: uint16(32680), + 44: uint16(33146), + 45: uint16(33203), + 46: uint16(33337), + 47: uint16(34330), + 48: uint16(34796), + 49: uint16(35445), + 50: uint16(36323), + 51: uint16(36984), + 52: uint16(37521), + 53: uint16(37925), + 54: uint16(39245), + 55: uint16(39854), + 56: uint16(21352), + 57: uint16(23633), + 58: uint16(26964), + 59: uint16(27844), + 60: uint16(27945), + 61: uint16(28203), + 62: uint16(33292), + 63: uint16(34203), + 64: uint16(35131), + 65: uint16(35373), + 66: uint16(35498), + 67: uint16(38634), + 68: uint16(40807), + 69: uint16(21089), + 70: uint16(26297), + 71: uint16(27570), + 72: uint16(32406), + 73: uint16(34814), + 74: uint16(36109), + 75: uint16(38275), + 76: uint16(38493), + 77: uint16(25885), + 78: uint16(28041), + 79: uint16(29166), + 80: uint16(63854), + 81: uint16(22478), + 82: uint16(22995), + 83: uint16(23468), + 84: uint16(24615), + 85: uint16(24826), + 86: uint16(25104), + 87: uint16(26143), + 88: uint16(26207), + 89: uint16(29481), + 90: uint16(29689), + 91: uint16(30427), + 92: uint16(30465), + 93: uint16(31596), + }, + 64: { + 0: uint16(32854), + 1: uint16(32882), + 2: uint16(33125), + 3: uint16(35488), + 4: uint16(37266), + 5: uint16(19990), + 6: uint16(21218), + 7: uint16(27506), + 8: uint16(27927), + 9: uint16(31237), + 10: uint16(31545), + 11: uint16(32048), + 12: uint16(63855), + 13: uint16(36016), + 14: uint16(21484), + 15: uint16(22063), + 16: uint16(22609), + 17: uint16(23477), + 18: uint16(23567), + 19: uint16(23569), + 20: uint16(24034), + 21: uint16(25152), + 22: uint16(25475), + 23: uint16(25620), + 24: uint16(26157), + 25: uint16(26803), + 26: uint16(27836), + 27: uint16(28040), + 28: uint16(28335), + 29: uint16(28703), + 30: uint16(28836), + 31: uint16(29138), + 32: uint16(29990), + 33: uint16(30095), + 34: uint16(30094), + 35: uint16(30233), + 36: uint16(31505), + 37: uint16(31712), + 38: uint16(31787), + 39: uint16(32032), + 40: uint16(32057), + 41: uint16(34092), + 42: uint16(34157), + 43: uint16(34311), + 44: uint16(35380), + 45: uint16(36877), + 46: uint16(36961), + 47: uint16(37045), + 48: uint16(37559), + 49: uint16(38902), + 50: uint16(39479), + 51: uint16(20439), + 52: uint16(23660), + 53: uint16(26463), + 54: uint16(28049), + 55: uint16(31903), + 56: uint16(32396), + 57: uint16(35606), + 58: uint16(36118), + 59: uint16(36895), + 60: uint16(23403), + 61: uint16(24061), + 62: uint16(25613), + 63: uint16(33984), + 64: uint16(36956), + 65: uint16(39137), + 66: uint16(29575), + 67: uint16(23435), + 68: uint16(24730), + 69: uint16(26494), + 70: uint16(28126), + 71: uint16(35359), + 72: uint16(35494), + 73: uint16(36865), + 74: uint16(38924), + 75: uint16(21047), + 76: uint16(63856), + 77: uint16(28753), + 78: uint16(30862), + 79: uint16(37782), + 80: uint16(34928), + 81: uint16(37335), + 82: uint16(20462), + 83: uint16(21463), + 84: uint16(22013), + 85: uint16(22234), + 86: uint16(22402), + 87: uint16(22781), + 88: uint16(23234), + 89: uint16(23432), + 90: uint16(23723), + 91: uint16(23744), + 92: uint16(24101), + 93: uint16(24833), + }, + 65: { + 0: uint16(25101), + 1: uint16(25163), + 2: uint16(25480), + 3: uint16(25628), + 4: uint16(25910), + 5: uint16(25976), + 6: uint16(27193), + 7: uint16(27530), + 8: uint16(27700), + 9: uint16(27929), + 10: uint16(28465), + 11: uint16(29159), + 12: uint16(29417), + 13: uint16(29560), + 14: uint16(29703), + 15: uint16(29874), + 16: uint16(30246), + 17: uint16(30561), + 18: uint16(31168), + 19: uint16(31319), + 20: uint16(31466), + 21: uint16(31929), + 22: uint16(32143), + 23: uint16(32172), + 24: uint16(32353), + 25: uint16(32670), + 26: uint16(33065), + 27: uint16(33585), + 28: uint16(33936), + 29: uint16(34010), + 30: uint16(34282), + 31: uint16(34966), + 32: uint16(35504), + 33: uint16(35728), + 34: uint16(36664), + 35: uint16(36930), + 36: uint16(36995), + 37: uint16(37228), + 38: uint16(37526), + 39: uint16(37561), + 40: uint16(38539), + 41: uint16(38567), + 42: uint16(38568), + 43: uint16(38614), + 44: uint16(38656), + 45: uint16(38920), + 46: uint16(39318), + 47: uint16(39635), + 48: uint16(39706), + 49: uint16(21460), + 50: uint16(22654), + 51: uint16(22809), + 52: uint16(23408), + 53: uint16(23487), + 54: uint16(28113), + 55: uint16(28506), + 56: uint16(29087), + 57: uint16(29729), + 58: uint16(29881), + 59: uint16(32901), + 60: uint16(33789), + 61: uint16(24033), + 62: uint16(24455), + 63: uint16(24490), + 64: uint16(24642), + 65: uint16(26092), + 66: uint16(26642), + 67: uint16(26991), + 68: uint16(27219), + 69: uint16(27529), + 70: uint16(27957), + 71: uint16(28147), + 72: uint16(29667), + 73: uint16(30462), + 74: uint16(30636), + 75: uint16(31565), + 76: uint16(32020), + 77: uint16(33059), + 78: uint16(33308), + 79: uint16(33600), + 80: uint16(34036), + 81: uint16(34147), + 82: uint16(35426), + 83: uint16(35524), + 84: uint16(37255), + 85: uint16(37662), + 86: uint16(38918), + 87: uint16(39348), + 88: uint16(25100), + 89: uint16(34899), + 90: uint16(36848), + 91: uint16(37477), + 92: uint16(23815), + 93: uint16(23847), + }, + 66: { + 0: uint16(23913), + 1: uint16(29791), + 2: uint16(33181), + 3: uint16(34664), + 4: uint16(28629), + 5: uint16(25342), + 6: uint16(32722), + 7: uint16(35126), + 8: uint16(35186), + 9: uint16(19998), + 10: uint16(20056), + 11: uint16(20711), + 12: uint16(21213), + 13: uint16(21319), + 14: uint16(25215), + 15: uint16(26119), + 16: uint16(32361), + 17: uint16(34821), + 18: uint16(38494), + 19: uint16(20365), + 20: uint16(21273), + 21: uint16(22070), + 22: uint16(22987), + 23: uint16(23204), + 24: uint16(23608), + 25: uint16(23630), + 26: uint16(23629), + 27: uint16(24066), + 28: uint16(24337), + 29: uint16(24643), + 30: uint16(26045), + 31: uint16(26159), + 32: uint16(26178), + 33: uint16(26558), + 34: uint16(26612), + 35: uint16(29468), + 36: uint16(30690), + 37: uint16(31034), + 38: uint16(32709), + 39: uint16(33940), + 40: uint16(33997), + 41: uint16(35222), + 42: uint16(35430), + 43: uint16(35433), + 44: uint16(35553), + 45: uint16(35925), + 46: uint16(35962), + 47: uint16(22516), + 48: uint16(23508), + 49: uint16(24335), + 50: uint16(24687), + 51: uint16(25325), + 52: uint16(26893), + 53: uint16(27542), + 54: uint16(28252), + 55: uint16(29060), + 56: uint16(31698), + 57: uint16(34645), + 58: uint16(35672), + 59: uint16(36606), + 60: uint16(39135), + 61: uint16(39166), + 62: uint16(20280), + 63: uint16(20353), + 64: uint16(20449), + 65: uint16(21627), + 66: uint16(23072), + 67: uint16(23480), + 68: uint16(24892), + 69: uint16(26032), + 70: uint16(26216), + 71: uint16(29180), + 72: uint16(30003), + 73: uint16(31070), + 74: uint16(32051), + 75: uint16(33102), + 76: uint16(33251), + 77: uint16(33688), + 78: uint16(34218), + 79: uint16(34254), + 80: uint16(34563), + 81: uint16(35338), + 82: uint16(36523), + 83: uint16(36763), + 84: uint16(63857), + 85: uint16(36805), + 86: uint16(22833), + 87: uint16(23460), + 88: uint16(23526), + 89: uint16(24713), + 90: uint16(23529), + 91: uint16(23563), + 92: uint16(24515), + 93: uint16(27777), + }, + 67: { + 0: uint16(63858), + 1: uint16(28145), + 2: uint16(28683), + 3: uint16(29978), + 4: uint16(33455), + 5: uint16(35574), + 6: uint16(20160), + 7: uint16(21313), + 8: uint16(63859), + 9: uint16(38617), + 10: uint16(27663), + 11: uint16(20126), + 12: uint16(20420), + 13: uint16(20818), + 14: uint16(21854), + 15: uint16(23077), + 16: uint16(23784), + 17: uint16(25105), + 18: uint16(29273), + 19: uint16(33469), + 20: uint16(33706), + 21: uint16(34558), + 22: uint16(34905), + 23: uint16(35357), + 24: uint16(38463), + 25: uint16(38597), + 26: uint16(39187), + 27: uint16(40201), + 28: uint16(40285), + 29: uint16(22538), + 30: uint16(23731), + 31: uint16(23997), + 32: uint16(24132), + 33: uint16(24801), + 34: uint16(24853), + 35: uint16(25569), + 36: uint16(27138), + 37: uint16(28197), + 38: uint16(37122), + 39: uint16(37716), + 40: uint16(38990), + 41: uint16(39952), + 42: uint16(40823), + 43: uint16(23433), + 44: uint16(23736), + 45: uint16(25353), + 46: uint16(26191), + 47: uint16(26696), + 48: uint16(30524), + 49: uint16(38593), + 50: uint16(38797), + 51: uint16(38996), + 52: uint16(39839), + 53: uint16(26017), + 54: uint16(35585), + 55: uint16(36555), + 56: uint16(38332), + 57: uint16(21813), + 58: uint16(23721), + 59: uint16(24022), + 60: uint16(24245), + 61: uint16(26263), + 62: uint16(30284), + 63: uint16(33780), + 64: uint16(38343), + 65: uint16(22739), + 66: uint16(25276), + 67: uint16(29390), + 68: uint16(40232), + 69: uint16(20208), + 70: uint16(22830), + 71: uint16(24591), + 72: uint16(26171), + 73: uint16(27523), + 74: uint16(31207), + 75: uint16(40230), + 76: uint16(21395), + 77: uint16(21696), + 78: uint16(22467), + 79: uint16(23830), + 80: uint16(24859), + 81: uint16(26326), + 82: uint16(28079), + 83: uint16(30861), + 84: uint16(33406), + 85: uint16(38552), + 86: uint16(38724), + 87: uint16(21380), + 88: uint16(25212), + 89: uint16(25494), + 90: uint16(28082), + 91: uint16(32266), + 92: uint16(33099), + 93: uint16(38989), + }, + 68: { + 0: uint16(27387), + 1: uint16(32588), + 2: uint16(40367), + 3: uint16(40474), + 4: uint16(20063), + 5: uint16(20539), + 6: uint16(20918), + 7: uint16(22812), + 8: uint16(24825), + 9: uint16(25590), + 10: uint16(26928), + 11: uint16(29242), + 12: uint16(32822), + 13: uint16(63860), + 14: uint16(37326), + 15: uint16(24369), + 16: uint16(63861), + 17: uint16(63862), + 18: uint16(32004), + 19: uint16(33509), + 20: uint16(33903), + 21: uint16(33979), + 22: uint16(34277), + 23: uint16(36493), + 24: uint16(63863), + 25: uint16(20335), + 26: uint16(63864), + 27: uint16(63865), + 28: uint16(22756), + 29: uint16(23363), + 30: uint16(24665), + 31: uint16(25562), + 32: uint16(25880), + 33: uint16(25965), + 34: uint16(26264), + 35: uint16(63866), + 36: uint16(26954), + 37: uint16(27171), + 38: uint16(27915), + 39: uint16(28673), + 40: uint16(29036), + 41: uint16(30162), + 42: uint16(30221), + 43: uint16(31155), + 44: uint16(31344), + 45: uint16(63867), + 46: uint16(32650), + 47: uint16(63868), + 48: uint16(35140), + 49: uint16(63869), + 50: uint16(35731), + 51: uint16(37312), + 52: uint16(38525), + 53: uint16(63870), + 54: uint16(39178), + 55: uint16(22276), + 56: uint16(24481), + 57: uint16(26044), + 58: uint16(28417), + 59: uint16(30208), + 60: uint16(31142), + 61: uint16(35486), + 62: uint16(39341), + 63: uint16(39770), + 64: uint16(40812), + 65: uint16(20740), + 66: uint16(25014), + 67: uint16(25233), + 68: uint16(27277), + 69: uint16(33222), + 70: uint16(20547), + 71: uint16(22576), + 72: uint16(24422), + 73: uint16(28937), + 74: uint16(35328), + 75: uint16(35578), + 76: uint16(23420), + 77: uint16(34326), + 78: uint16(20474), + 79: uint16(20796), + 80: uint16(22196), + 81: uint16(22852), + 82: uint16(25513), + 83: uint16(28153), + 84: uint16(23978), + 85: uint16(26989), + 86: uint16(20870), + 87: uint16(20104), + 88: uint16(20313), + 89: uint16(63871), + 90: uint16(63872), + 91: uint16(63873), + 92: uint16(22914), + 93: uint16(63874), + }, + 69: { + 0: uint16(63875), + 1: uint16(27487), + 2: uint16(27741), + 3: uint16(63876), + 4: uint16(29877), + 5: uint16(30998), + 6: uint16(63877), + 7: uint16(33287), + 8: uint16(33349), + 9: uint16(33593), + 10: uint16(36671), + 11: uint16(36701), + 12: uint16(63878), + 13: uint16(39192), + 14: uint16(63879), + 15: uint16(63880), + 16: uint16(63881), + 17: uint16(20134), + 18: uint16(63882), + 19: uint16(22495), + 20: uint16(24441), + 21: uint16(26131), + 22: uint16(63883), + 23: uint16(63884), + 24: uint16(30123), + 25: uint16(32377), + 26: uint16(35695), + 27: uint16(63885), + 28: uint16(36870), + 29: uint16(39515), + 30: uint16(22181), + 31: uint16(22567), + 32: uint16(23032), + 33: uint16(23071), + 34: uint16(23476), + 35: uint16(63886), + 36: uint16(24310), + 37: uint16(63887), + 38: uint16(63888), + 39: uint16(25424), + 40: uint16(25403), + 41: uint16(63889), + 42: uint16(26941), + 43: uint16(27783), + 44: uint16(27839), + 45: uint16(28046), + 46: uint16(28051), + 47: uint16(28149), + 48: uint16(28436), + 49: uint16(63890), + 50: uint16(28895), + 51: uint16(28982), + 52: uint16(29017), + 53: uint16(63891), + 54: uint16(29123), + 55: uint16(29141), + 56: uint16(63892), + 57: uint16(30799), + 58: uint16(30831), + 59: uint16(63893), + 60: uint16(31605), + 61: uint16(32227), + 62: uint16(63894), + 63: uint16(32303), + 64: uint16(63895), + 65: uint16(34893), + 66: uint16(36575), + 67: uint16(63896), + 68: uint16(63897), + 69: uint16(63898), + 70: uint16(37467), + 71: uint16(63899), + 72: uint16(40182), + 73: uint16(63900), + 74: uint16(63901), + 75: uint16(63902), + 76: uint16(24709), + 77: uint16(28037), + 78: uint16(63903), + 79: uint16(29105), + 80: uint16(63904), + 81: uint16(63905), + 82: uint16(38321), + 83: uint16(21421), + 84: uint16(63906), + 85: uint16(63907), + 86: uint16(63908), + 87: uint16(26579), + 88: uint16(63909), + 89: uint16(28814), + 90: uint16(28976), + 91: uint16(29744), + 92: uint16(33398), + 93: uint16(33490), + }, + 70: { + 0: uint16(63910), + 1: uint16(38331), + 2: uint16(39653), + 3: uint16(40573), + 4: uint16(26308), + 5: uint16(63911), + 6: uint16(29121), + 7: uint16(33865), + 8: uint16(63912), + 9: uint16(63913), + 10: uint16(22603), + 11: uint16(63914), + 12: uint16(63915), + 13: uint16(23992), + 14: uint16(24433), + 15: uint16(63916), + 16: uint16(26144), + 17: uint16(26254), + 18: uint16(27001), + 19: uint16(27054), + 20: uint16(27704), + 21: uint16(27891), + 22: uint16(28214), + 23: uint16(28481), + 24: uint16(28634), + 25: uint16(28699), + 26: uint16(28719), + 27: uint16(29008), + 28: uint16(29151), + 29: uint16(29552), + 30: uint16(63917), + 31: uint16(29787), + 32: uint16(63918), + 33: uint16(29908), + 34: uint16(30408), + 35: uint16(31310), + 36: uint16(32403), + 37: uint16(63919), + 38: uint16(63920), + 39: uint16(33521), + 40: uint16(35424), + 41: uint16(36814), + 42: uint16(63921), + 43: uint16(37704), + 44: uint16(63922), + 45: uint16(38681), + 46: uint16(63923), + 47: uint16(63924), + 48: uint16(20034), + 49: uint16(20522), + 50: uint16(63925), + 51: uint16(21000), + 52: uint16(21473), + 53: uint16(26355), + 54: uint16(27757), + 55: uint16(28618), + 56: uint16(29450), + 57: uint16(30591), + 58: uint16(31330), + 59: uint16(33454), + 60: uint16(34269), + 61: uint16(34306), + 62: uint16(63926), + 63: uint16(35028), + 64: uint16(35427), + 65: uint16(35709), + 66: uint16(35947), + 67: uint16(63927), + 68: uint16(37555), + 69: uint16(63928), + 70: uint16(38675), + 71: uint16(38928), + 72: uint16(20116), + 73: uint16(20237), + 74: uint16(20425), + 75: uint16(20658), + 76: uint16(21320), + 77: uint16(21566), + 78: uint16(21555), + 79: uint16(21978), + 80: uint16(22626), + 81: uint16(22714), + 82: uint16(22887), + 83: uint16(23067), + 84: uint16(23524), + 85: uint16(24735), + 86: uint16(63929), + 87: uint16(25034), + 88: uint16(25942), + 89: uint16(26111), + 90: uint16(26212), + 91: uint16(26791), + 92: uint16(27738), + 93: uint16(28595), + }, + 71: { + 0: uint16(28879), + 1: uint16(29100), + 2: uint16(29522), + 3: uint16(31613), + 4: uint16(34568), + 5: uint16(35492), + 6: uint16(39986), + 7: uint16(40711), + 8: uint16(23627), + 9: uint16(27779), + 10: uint16(29508), + 11: uint16(29577), + 12: uint16(37434), + 13: uint16(28331), + 14: uint16(29797), + 15: uint16(30239), + 16: uint16(31337), + 17: uint16(32277), + 18: uint16(34314), + 19: uint16(20800), + 20: uint16(22725), + 21: uint16(25793), + 22: uint16(29934), + 23: uint16(29973), + 24: uint16(30320), + 25: uint16(32705), + 26: uint16(37013), + 27: uint16(38605), + 28: uint16(39252), + 29: uint16(28198), + 30: uint16(29926), + 31: uint16(31401), + 32: uint16(31402), + 33: uint16(33253), + 34: uint16(34521), + 35: uint16(34680), + 36: uint16(35355), + 37: uint16(23113), + 38: uint16(23436), + 39: uint16(23451), + 40: uint16(26785), + 41: uint16(26880), + 42: uint16(28003), + 43: uint16(29609), + 44: uint16(29715), + 45: uint16(29740), + 46: uint16(30871), + 47: uint16(32233), + 48: uint16(32747), + 49: uint16(33048), + 50: uint16(33109), + 51: uint16(33694), + 52: uint16(35916), + 53: uint16(38446), + 54: uint16(38929), + 55: uint16(26352), + 56: uint16(24448), + 57: uint16(26106), + 58: uint16(26505), + 59: uint16(27754), + 60: uint16(29579), + 61: uint16(20525), + 62: uint16(23043), + 63: uint16(27498), + 64: uint16(30702), + 65: uint16(22806), + 66: uint16(23916), + 67: uint16(24013), + 68: uint16(29477), + 69: uint16(30031), + 70: uint16(63930), + 71: uint16(63931), + 72: uint16(20709), + 73: uint16(20985), + 74: uint16(22575), + 75: uint16(22829), + 76: uint16(22934), + 77: uint16(23002), + 78: uint16(23525), + 79: uint16(63932), + 80: uint16(63933), + 81: uint16(23970), + 82: uint16(25303), + 83: uint16(25622), + 84: uint16(25747), + 85: uint16(25854), + 86: uint16(63934), + 87: uint16(26332), + 88: uint16(63935), + 89: uint16(27208), + 90: uint16(63936), + 91: uint16(29183), + 92: uint16(29796), + 93: uint16(63937), + }, + 72: { + 0: uint16(31368), + 1: uint16(31407), + 2: uint16(32327), + 3: uint16(32350), + 4: uint16(32768), + 5: uint16(33136), + 6: uint16(63938), + 7: uint16(34799), + 8: uint16(35201), + 9: uint16(35616), + 10: uint16(36953), + 11: uint16(63939), + 12: uint16(36992), + 13: uint16(39250), + 14: uint16(24958), + 15: uint16(27442), + 16: uint16(28020), + 17: uint16(32287), + 18: uint16(35109), + 19: uint16(36785), + 20: uint16(20433), + 21: uint16(20653), + 22: uint16(20887), + 23: uint16(21191), + 24: uint16(22471), + 25: uint16(22665), + 26: uint16(23481), + 27: uint16(24248), + 28: uint16(24898), + 29: uint16(27029), + 30: uint16(28044), + 31: uint16(28263), + 32: uint16(28342), + 33: uint16(29076), + 34: uint16(29794), + 35: uint16(29992), + 36: uint16(29996), + 37: uint16(32883), + 38: uint16(33592), + 39: uint16(33993), + 40: uint16(36362), + 41: uint16(37780), + 42: uint16(37854), + 43: uint16(63940), + 44: uint16(20110), + 45: uint16(20305), + 46: uint16(20598), + 47: uint16(20778), + 48: uint16(21448), + 49: uint16(21451), + 50: uint16(21491), + 51: uint16(23431), + 52: uint16(23507), + 53: uint16(23588), + 54: uint16(24858), + 55: uint16(24962), + 56: uint16(26100), + 57: uint16(29275), + 58: uint16(29591), + 59: uint16(29760), + 60: uint16(30402), + 61: uint16(31056), + 62: uint16(31121), + 63: uint16(31161), + 64: uint16(32006), + 65: uint16(32701), + 66: uint16(33419), + 67: uint16(34261), + 68: uint16(34398), + 69: uint16(36802), + 70: uint16(36935), + 71: uint16(37109), + 72: uint16(37354), + 73: uint16(38533), + 74: uint16(38632), + 75: uint16(38633), + 76: uint16(21206), + 77: uint16(24423), + 78: uint16(26093), + 79: uint16(26161), + 80: uint16(26671), + 81: uint16(29020), + 82: uint16(31286), + 83: uint16(37057), + 84: uint16(38922), + 85: uint16(20113), + 86: uint16(63941), + 87: uint16(27218), + 88: uint16(27550), + 89: uint16(28560), + 90: uint16(29065), + 91: uint16(32792), + 92: uint16(33464), + 93: uint16(34131), + }, + 73: { + 0: uint16(36939), + 1: uint16(38549), + 2: uint16(38642), + 3: uint16(38907), + 4: uint16(34074), + 5: uint16(39729), + 6: uint16(20112), + 7: uint16(29066), + 8: uint16(38596), + 9: uint16(20803), + 10: uint16(21407), + 11: uint16(21729), + 12: uint16(22291), + 13: uint16(22290), + 14: uint16(22435), + 15: uint16(23195), + 16: uint16(23236), + 17: uint16(23491), + 18: uint16(24616), + 19: uint16(24895), + 20: uint16(25588), + 21: uint16(27781), + 22: uint16(27961), + 23: uint16(28274), + 24: uint16(28304), + 25: uint16(29232), + 26: uint16(29503), + 27: uint16(29783), + 28: uint16(33489), + 29: uint16(34945), + 30: uint16(36677), + 31: uint16(36960), + 32: uint16(63942), + 33: uint16(38498), + 34: uint16(39000), + 35: uint16(40219), + 36: uint16(26376), + 37: uint16(36234), + 38: uint16(37470), + 39: uint16(20301), + 40: uint16(20553), + 41: uint16(20702), + 42: uint16(21361), + 43: uint16(22285), + 44: uint16(22996), + 45: uint16(23041), + 46: uint16(23561), + 47: uint16(24944), + 48: uint16(26256), + 49: uint16(28205), + 50: uint16(29234), + 51: uint16(29771), + 52: uint16(32239), + 53: uint16(32963), + 54: uint16(33806), + 55: uint16(33894), + 56: uint16(34111), + 57: uint16(34655), + 58: uint16(34907), + 59: uint16(35096), + 60: uint16(35586), + 61: uint16(36949), + 62: uint16(38859), + 63: uint16(39759), + 64: uint16(20083), + 65: uint16(20369), + 66: uint16(20754), + 67: uint16(20842), + 68: uint16(63943), + 69: uint16(21807), + 70: uint16(21929), + 71: uint16(23418), + 72: uint16(23461), + 73: uint16(24188), + 74: uint16(24189), + 75: uint16(24254), + 76: uint16(24736), + 77: uint16(24799), + 78: uint16(24840), + 79: uint16(24841), + 80: uint16(25540), + 81: uint16(25912), + 82: uint16(26377), + 83: uint16(63944), + 84: uint16(26580), + 85: uint16(26586), + 86: uint16(63945), + 87: uint16(26977), + 88: uint16(26978), + 89: uint16(27833), + 90: uint16(27943), + 91: uint16(63946), + 92: uint16(28216), + 93: uint16(63947), + }, + 74: { + 0: uint16(28641), + 1: uint16(29494), + 2: uint16(29495), + 3: uint16(63948), + 4: uint16(29788), + 5: uint16(30001), + 6: uint16(63949), + 7: uint16(30290), + 8: uint16(63950), + 9: uint16(63951), + 10: uint16(32173), + 11: uint16(33278), + 12: uint16(33848), + 13: uint16(35029), + 14: uint16(35480), + 15: uint16(35547), + 16: uint16(35565), + 17: uint16(36400), + 18: uint16(36418), + 19: uint16(36938), + 20: uint16(36926), + 21: uint16(36986), + 22: uint16(37193), + 23: uint16(37321), + 24: uint16(37742), + 25: uint16(63952), + 26: uint16(63953), + 27: uint16(22537), + 28: uint16(63954), + 29: uint16(27603), + 30: uint16(32905), + 31: uint16(32946), + 32: uint16(63955), + 33: uint16(63956), + 34: uint16(20801), + 35: uint16(22891), + 36: uint16(23609), + 37: uint16(63957), + 38: uint16(63958), + 39: uint16(28516), + 40: uint16(29607), + 41: uint16(32996), + 42: uint16(36103), + 43: uint16(63959), + 44: uint16(37399), + 45: uint16(38287), + 46: uint16(63960), + 47: uint16(63961), + 48: uint16(63962), + 49: uint16(63963), + 50: uint16(32895), + 51: uint16(25102), + 52: uint16(28700), + 53: uint16(32104), + 54: uint16(34701), + 55: uint16(63964), + 56: uint16(22432), + 57: uint16(24681), + 58: uint16(24903), + 59: uint16(27575), + 60: uint16(35518), + 61: uint16(37504), + 62: uint16(38577), + 63: uint16(20057), + 64: uint16(21535), + 65: uint16(28139), + 66: uint16(34093), + 67: uint16(38512), + 68: uint16(38899), + 69: uint16(39150), + 70: uint16(25558), + 71: uint16(27875), + 72: uint16(37009), + 73: uint16(20957), + 74: uint16(25033), + 75: uint16(33210), + 76: uint16(40441), + 77: uint16(20381), + 78: uint16(20506), + 79: uint16(20736), + 80: uint16(23452), + 81: uint16(24847), + 82: uint16(25087), + 83: uint16(25836), + 84: uint16(26885), + 85: uint16(27589), + 86: uint16(30097), + 87: uint16(30691), + 88: uint16(32681), + 89: uint16(33380), + 90: uint16(34191), + 91: uint16(34811), + 92: uint16(34915), + 93: uint16(35516), + }, + 75: { + 0: uint16(35696), + 1: uint16(37291), + 2: uint16(20108), + 3: uint16(20197), + 4: uint16(20234), + 5: uint16(63965), + 6: uint16(63966), + 7: uint16(22839), + 8: uint16(23016), + 9: uint16(63967), + 10: uint16(24050), + 11: uint16(24347), + 12: uint16(24411), + 13: uint16(24609), + 14: uint16(63968), + 15: uint16(63969), + 16: uint16(63970), + 17: uint16(63971), + 18: uint16(29246), + 19: uint16(29669), + 20: uint16(63972), + 21: uint16(30064), + 22: uint16(30157), + 23: uint16(63973), + 24: uint16(31227), + 25: uint16(63974), + 26: uint16(32780), + 27: uint16(32819), + 28: uint16(32900), + 29: uint16(33505), + 30: uint16(33617), + 31: uint16(63975), + 32: uint16(63976), + 33: uint16(36029), + 34: uint16(36019), + 35: uint16(36999), + 36: uint16(63977), + 37: uint16(63978), + 38: uint16(39156), + 39: uint16(39180), + 40: uint16(63979), + 41: uint16(63980), + 42: uint16(28727), + 43: uint16(30410), + 44: uint16(32714), + 45: uint16(32716), + 46: uint16(32764), + 47: uint16(35610), + 48: uint16(20154), + 49: uint16(20161), + 50: uint16(20995), + 51: uint16(21360), + 52: uint16(63981), + 53: uint16(21693), + 54: uint16(22240), + 55: uint16(23035), + 56: uint16(23493), + 57: uint16(24341), + 58: uint16(24525), + 59: uint16(28270), + 60: uint16(63982), + 61: uint16(63983), + 62: uint16(32106), + 63: uint16(33589), + 64: uint16(63984), + 65: uint16(34451), + 66: uint16(35469), + 67: uint16(63985), + 68: uint16(38765), + 69: uint16(38775), + 70: uint16(63986), + 71: uint16(63987), + 72: uint16(19968), + 73: uint16(20314), + 74: uint16(20350), + 75: uint16(22777), + 76: uint16(26085), + 77: uint16(28322), + 78: uint16(36920), + 79: uint16(37808), + 80: uint16(39353), + 81: uint16(20219), + 82: uint16(22764), + 83: uint16(22922), + 84: uint16(23001), + 85: uint16(24641), + 86: uint16(63988), + 87: uint16(63989), + 88: uint16(31252), + 89: uint16(63990), + 90: uint16(33615), + 91: uint16(36035), + 92: uint16(20837), + 93: uint16(21316), + }, + 76: { + 0: uint16(63991), + 1: uint16(63992), + 2: uint16(63993), + 3: uint16(20173), + 4: uint16(21097), + 5: uint16(23381), + 6: uint16(33471), + 7: uint16(20180), + 8: uint16(21050), + 9: uint16(21672), + 10: uint16(22985), + 11: uint16(23039), + 12: uint16(23376), + 13: uint16(23383), + 14: uint16(23388), + 15: uint16(24675), + 16: uint16(24904), + 17: uint16(28363), + 18: uint16(28825), + 19: uint16(29038), + 20: uint16(29574), + 21: uint16(29943), + 22: uint16(30133), + 23: uint16(30913), + 24: uint16(32043), + 25: uint16(32773), + 26: uint16(33258), + 27: uint16(33576), + 28: uint16(34071), + 29: uint16(34249), + 30: uint16(35566), + 31: uint16(36039), + 32: uint16(38604), + 33: uint16(20316), + 34: uint16(21242), + 35: uint16(22204), + 36: uint16(26027), + 37: uint16(26152), + 38: uint16(28796), + 39: uint16(28856), + 40: uint16(29237), + 41: uint16(32189), + 42: uint16(33421), + 43: uint16(37196), + 44: uint16(38592), + 45: uint16(40306), + 46: uint16(23409), + 47: uint16(26855), + 48: uint16(27544), + 49: uint16(28538), + 50: uint16(30430), + 51: uint16(23697), + 52: uint16(26283), + 53: uint16(28507), + 54: uint16(31668), + 55: uint16(31786), + 56: uint16(34870), + 57: uint16(38620), + 58: uint16(19976), + 59: uint16(20183), + 60: uint16(21280), + 61: uint16(22580), + 62: uint16(22715), + 63: uint16(22767), + 64: uint16(22892), + 65: uint16(23559), + 66: uint16(24115), + 67: uint16(24196), + 68: uint16(24373), + 69: uint16(25484), + 70: uint16(26290), + 71: uint16(26454), + 72: uint16(27167), + 73: uint16(27299), + 74: uint16(27404), + 75: uint16(28479), + 76: uint16(29254), + 77: uint16(63994), + 78: uint16(29520), + 79: uint16(29835), + 80: uint16(31456), + 81: uint16(31911), + 82: uint16(33144), + 83: uint16(33247), + 84: uint16(33255), + 85: uint16(33674), + 86: uint16(33900), + 87: uint16(34083), + 88: uint16(34196), + 89: uint16(34255), + 90: uint16(35037), + 91: uint16(36115), + 92: uint16(37292), + 93: uint16(38263), + }, + 77: { + 0: uint16(38556), + 1: uint16(20877), + 2: uint16(21705), + 3: uint16(22312), + 4: uint16(23472), + 5: uint16(25165), + 6: uint16(26448), + 7: uint16(26685), + 8: uint16(26771), + 9: uint16(28221), + 10: uint16(28371), + 11: uint16(28797), + 12: uint16(32289), + 13: uint16(35009), + 14: uint16(36001), + 15: uint16(36617), + 16: uint16(40779), + 17: uint16(40782), + 18: uint16(29229), + 19: uint16(31631), + 20: uint16(35533), + 21: uint16(37658), + 22: uint16(20295), + 23: uint16(20302), + 24: uint16(20786), + 25: uint16(21632), + 26: uint16(22992), + 27: uint16(24213), + 28: uint16(25269), + 29: uint16(26485), + 30: uint16(26990), + 31: uint16(27159), + 32: uint16(27822), + 33: uint16(28186), + 34: uint16(29401), + 35: uint16(29482), + 36: uint16(30141), + 37: uint16(31672), + 38: uint16(32053), + 39: uint16(33511), + 40: uint16(33785), + 41: uint16(33879), + 42: uint16(34295), + 43: uint16(35419), + 44: uint16(36015), + 45: uint16(36487), + 46: uint16(36889), + 47: uint16(37048), + 48: uint16(38606), + 49: uint16(40799), + 50: uint16(21219), + 51: uint16(21514), + 52: uint16(23265), + 53: uint16(23490), + 54: uint16(25688), + 55: uint16(25973), + 56: uint16(28404), + 57: uint16(29380), + 58: uint16(63995), + 59: uint16(30340), + 60: uint16(31309), + 61: uint16(31515), + 62: uint16(31821), + 63: uint16(32318), + 64: uint16(32735), + 65: uint16(33659), + 66: uint16(35627), + 67: uint16(36042), + 68: uint16(36196), + 69: uint16(36321), + 70: uint16(36447), + 71: uint16(36842), + 72: uint16(36857), + 73: uint16(36969), + 74: uint16(37841), + 75: uint16(20291), + 76: uint16(20346), + 77: uint16(20659), + 78: uint16(20840), + 79: uint16(20856), + 80: uint16(21069), + 81: uint16(21098), + 82: uint16(22625), + 83: uint16(22652), + 84: uint16(22880), + 85: uint16(23560), + 86: uint16(23637), + 87: uint16(24283), + 88: uint16(24731), + 89: uint16(25136), + 90: uint16(26643), + 91: uint16(27583), + 92: uint16(27656), + 93: uint16(28593), + }, + 78: { + 0: uint16(29006), + 1: uint16(29728), + 2: uint16(30000), + 3: uint16(30008), + 4: uint16(30033), + 5: uint16(30322), + 6: uint16(31564), + 7: uint16(31627), + 8: uint16(31661), + 9: uint16(31686), + 10: uint16(32399), + 11: uint16(35438), + 12: uint16(36670), + 13: uint16(36681), + 14: uint16(37439), + 15: uint16(37523), + 16: uint16(37666), + 17: uint16(37931), + 18: uint16(38651), + 19: uint16(39002), + 20: uint16(39019), + 21: uint16(39198), + 22: uint16(20999), + 23: uint16(25130), + 24: uint16(25240), + 25: uint16(27993), + 26: uint16(30308), + 27: uint16(31434), + 28: uint16(31680), + 29: uint16(32118), + 30: uint16(21344), + 31: uint16(23742), + 32: uint16(24215), + 33: uint16(28472), + 34: uint16(28857), + 35: uint16(31896), + 36: uint16(38673), + 37: uint16(39822), + 38: uint16(40670), + 39: uint16(25509), + 40: uint16(25722), + 41: uint16(34678), + 42: uint16(19969), + 43: uint16(20117), + 44: uint16(20141), + 45: uint16(20572), + 46: uint16(20597), + 47: uint16(21576), + 48: uint16(22979), + 49: uint16(23450), + 50: uint16(24128), + 51: uint16(24237), + 52: uint16(24311), + 53: uint16(24449), + 54: uint16(24773), + 55: uint16(25402), + 56: uint16(25919), + 57: uint16(25972), + 58: uint16(26060), + 59: uint16(26230), + 60: uint16(26232), + 61: uint16(26622), + 62: uint16(26984), + 63: uint16(27273), + 64: uint16(27491), + 65: uint16(27712), + 66: uint16(28096), + 67: uint16(28136), + 68: uint16(28191), + 69: uint16(28254), + 70: uint16(28702), + 71: uint16(28833), + 72: uint16(29582), + 73: uint16(29693), + 74: uint16(30010), + 75: uint16(30555), + 76: uint16(30855), + 77: uint16(31118), + 78: uint16(31243), + 79: uint16(31357), + 80: uint16(31934), + 81: uint16(32142), + 82: uint16(33351), + 83: uint16(35330), + 84: uint16(35562), + 85: uint16(35998), + 86: uint16(37165), + 87: uint16(37194), + 88: uint16(37336), + 89: uint16(37478), + 90: uint16(37580), + 91: uint16(37664), + 92: uint16(38662), + 93: uint16(38742), + }, + 79: { + 0: uint16(38748), + 1: uint16(38914), + 2: uint16(40718), + 3: uint16(21046), + 4: uint16(21137), + 5: uint16(21884), + 6: uint16(22564), + 7: uint16(24093), + 8: uint16(24351), + 9: uint16(24716), + 10: uint16(25552), + 11: uint16(26799), + 12: uint16(28639), + 13: uint16(31085), + 14: uint16(31532), + 15: uint16(33229), + 16: uint16(34234), + 17: uint16(35069), + 18: uint16(35576), + 19: uint16(36420), + 20: uint16(37261), + 21: uint16(38500), + 22: uint16(38555), + 23: uint16(38717), + 24: uint16(38988), + 25: uint16(40778), + 26: uint16(20430), + 27: uint16(20806), + 28: uint16(20939), + 29: uint16(21161), + 30: uint16(22066), + 31: uint16(24340), + 32: uint16(24427), + 33: uint16(25514), + 34: uint16(25805), + 35: uint16(26089), + 36: uint16(26177), + 37: uint16(26362), + 38: uint16(26361), + 39: uint16(26397), + 40: uint16(26781), + 41: uint16(26839), + 42: uint16(27133), + 43: uint16(28437), + 44: uint16(28526), + 45: uint16(29031), + 46: uint16(29157), + 47: uint16(29226), + 48: uint16(29866), + 49: uint16(30522), + 50: uint16(31062), + 51: uint16(31066), + 52: uint16(31199), + 53: uint16(31264), + 54: uint16(31381), + 55: uint16(31895), + 56: uint16(31967), + 57: uint16(32068), + 58: uint16(32368), + 59: uint16(32903), + 60: uint16(34299), + 61: uint16(34468), + 62: uint16(35412), + 63: uint16(35519), + 64: uint16(36249), + 65: uint16(36481), + 66: uint16(36896), + 67: uint16(36973), + 68: uint16(37347), + 69: uint16(38459), + 70: uint16(38613), + 71: uint16(40165), + 72: uint16(26063), + 73: uint16(31751), + 74: uint16(36275), + 75: uint16(37827), + 76: uint16(23384), + 77: uint16(23562), + 78: uint16(21330), + 79: uint16(25305), + 80: uint16(29469), + 81: uint16(20519), + 82: uint16(23447), + 83: uint16(24478), + 84: uint16(24752), + 85: uint16(24939), + 86: uint16(26837), + 87: uint16(28121), + 88: uint16(29742), + 89: uint16(31278), + 90: uint16(32066), + 91: uint16(32156), + 92: uint16(32305), + 93: uint16(33131), + }, + 80: { + 0: uint16(36394), + 1: uint16(36405), + 2: uint16(37758), + 3: uint16(37912), + 4: uint16(20304), + 5: uint16(22352), + 6: uint16(24038), + 7: uint16(24231), + 8: uint16(25387), + 9: uint16(32618), + 10: uint16(20027), + 11: uint16(20303), + 12: uint16(20367), + 13: uint16(20570), + 14: uint16(23005), + 15: uint16(32964), + 16: uint16(21610), + 17: uint16(21608), + 18: uint16(22014), + 19: uint16(22863), + 20: uint16(23449), + 21: uint16(24030), + 22: uint16(24282), + 23: uint16(26205), + 24: uint16(26417), + 25: uint16(26609), + 26: uint16(26666), + 27: uint16(27880), + 28: uint16(27954), + 29: uint16(28234), + 30: uint16(28557), + 31: uint16(28855), + 32: uint16(29664), + 33: uint16(30087), + 34: uint16(31820), + 35: uint16(32002), + 36: uint16(32044), + 37: uint16(32162), + 38: uint16(33311), + 39: uint16(34523), + 40: uint16(35387), + 41: uint16(35461), + 42: uint16(36208), + 43: uint16(36490), + 44: uint16(36659), + 45: uint16(36913), + 46: uint16(37198), + 47: uint16(37202), + 48: uint16(37956), + 49: uint16(39376), + 50: uint16(31481), + 51: uint16(31909), + 52: uint16(20426), + 53: uint16(20737), + 54: uint16(20934), + 55: uint16(22472), + 56: uint16(23535), + 57: uint16(23803), + 58: uint16(26201), + 59: uint16(27197), + 60: uint16(27994), + 61: uint16(28310), + 62: uint16(28652), + 63: uint16(28940), + 64: uint16(30063), + 65: uint16(31459), + 66: uint16(34850), + 67: uint16(36897), + 68: uint16(36981), + 69: uint16(38603), + 70: uint16(39423), + 71: uint16(33537), + 72: uint16(20013), + 73: uint16(20210), + 74: uint16(34886), + 75: uint16(37325), + 76: uint16(21373), + 77: uint16(27355), + 78: uint16(26987), + 79: uint16(27713), + 80: uint16(33914), + 81: uint16(22686), + 82: uint16(24974), + 83: uint16(26366), + 84: uint16(25327), + 85: uint16(28893), + 86: uint16(29969), + 87: uint16(30151), + 88: uint16(32338), + 89: uint16(33976), + 90: uint16(35657), + 91: uint16(36104), + 92: uint16(20043), + 93: uint16(21482), + }, + 81: { + 0: uint16(21675), + 1: uint16(22320), + 2: uint16(22336), + 3: uint16(24535), + 4: uint16(25345), + 5: uint16(25351), + 6: uint16(25711), + 7: uint16(25903), + 8: uint16(26088), + 9: uint16(26234), + 10: uint16(26525), + 11: uint16(26547), + 12: uint16(27490), + 13: uint16(27744), + 14: uint16(27802), + 15: uint16(28460), + 16: uint16(30693), + 17: uint16(30757), + 18: uint16(31049), + 19: uint16(31063), + 20: uint16(32025), + 21: uint16(32930), + 22: uint16(33026), + 23: uint16(33267), + 24: uint16(33437), + 25: uint16(33463), + 26: uint16(34584), + 27: uint16(35468), + 28: uint16(63996), + 29: uint16(36100), + 30: uint16(36286), + 31: uint16(36978), + 32: uint16(30452), + 33: uint16(31257), + 34: uint16(31287), + 35: uint16(32340), + 36: uint16(32887), + 37: uint16(21767), + 38: uint16(21972), + 39: uint16(22645), + 40: uint16(25391), + 41: uint16(25634), + 42: uint16(26185), + 43: uint16(26187), + 44: uint16(26733), + 45: uint16(27035), + 46: uint16(27524), + 47: uint16(27941), + 48: uint16(28337), + 49: uint16(29645), + 50: uint16(29800), + 51: uint16(29857), + 52: uint16(30043), + 53: uint16(30137), + 54: uint16(30433), + 55: uint16(30494), + 56: uint16(30603), + 57: uint16(31206), + 58: uint16(32265), + 59: uint16(32285), + 60: uint16(33275), + 61: uint16(34095), + 62: uint16(34967), + 63: uint16(35386), + 64: uint16(36049), + 65: uint16(36587), + 66: uint16(36784), + 67: uint16(36914), + 68: uint16(37805), + 69: uint16(38499), + 70: uint16(38515), + 71: uint16(38663), + 72: uint16(20356), + 73: uint16(21489), + 74: uint16(23018), + 75: uint16(23241), + 76: uint16(24089), + 77: uint16(26702), + 78: uint16(29894), + 79: uint16(30142), + 80: uint16(31209), + 81: uint16(31378), + 82: uint16(33187), + 83: uint16(34541), + 84: uint16(36074), + 85: uint16(36300), + 86: uint16(36845), + 87: uint16(26015), + 88: uint16(26389), + 89: uint16(63997), + 90: uint16(22519), + 91: uint16(28503), + 92: uint16(32221), + 93: uint16(36655), + }, + 82: { + 0: uint16(37878), + 1: uint16(38598), + 2: uint16(24501), + 3: uint16(25074), + 4: uint16(28548), + 5: uint16(19988), + 6: uint16(20376), + 7: uint16(20511), + 8: uint16(21449), + 9: uint16(21983), + 10: uint16(23919), + 11: uint16(24046), + 12: uint16(27425), + 13: uint16(27492), + 14: uint16(30923), + 15: uint16(31642), + 16: uint16(63998), + 17: uint16(36425), + 18: uint16(36554), + 19: uint16(36974), + 20: uint16(25417), + 21: uint16(25662), + 22: uint16(30528), + 23: uint16(31364), + 24: uint16(37679), + 25: uint16(38015), + 26: uint16(40810), + 27: uint16(25776), + 28: uint16(28591), + 29: uint16(29158), + 30: uint16(29864), + 31: uint16(29914), + 32: uint16(31428), + 33: uint16(31762), + 34: uint16(32386), + 35: uint16(31922), + 36: uint16(32408), + 37: uint16(35738), + 38: uint16(36106), + 39: uint16(38013), + 40: uint16(39184), + 41: uint16(39244), + 42: uint16(21049), + 43: uint16(23519), + 44: uint16(25830), + 45: uint16(26413), + 46: uint16(32046), + 47: uint16(20717), + 48: uint16(21443), + 49: uint16(22649), + 50: uint16(24920), + 51: uint16(24921), + 52: uint16(25082), + 53: uint16(26028), + 54: uint16(31449), + 55: uint16(35730), + 56: uint16(35734), + 57: uint16(20489), + 58: uint16(20513), + 59: uint16(21109), + 60: uint16(21809), + 61: uint16(23100), + 62: uint16(24288), + 63: uint16(24432), + 64: uint16(24884), + 65: uint16(25950), + 66: uint16(26124), + 67: uint16(26166), + 68: uint16(26274), + 69: uint16(27085), + 70: uint16(28356), + 71: uint16(28466), + 72: uint16(29462), + 73: uint16(30241), + 74: uint16(31379), + 75: uint16(33081), + 76: uint16(33369), + 77: uint16(33750), + 78: uint16(33980), + 79: uint16(20661), + 80: uint16(22512), + 81: uint16(23488), + 82: uint16(23528), + 83: uint16(24425), + 84: uint16(25505), + 85: uint16(30758), + 86: uint16(32181), + 87: uint16(33756), + 88: uint16(34081), + 89: uint16(37319), + 90: uint16(37365), + 91: uint16(20874), + 92: uint16(26613), + 93: uint16(31574), + }, + 83: { + 0: uint16(36012), + 1: uint16(20932), + 2: uint16(22971), + 3: uint16(24765), + 4: uint16(34389), + 5: uint16(20508), + 6: uint16(63999), + 7: uint16(21076), + 8: uint16(23610), + 9: uint16(24957), + 10: uint16(25114), + 11: uint16(25299), + 12: uint16(25842), + 13: uint16(26021), + 14: uint16(28364), + 15: uint16(30240), + 16: uint16(33034), + 17: uint16(36448), + 18: uint16(38495), + 19: uint16(38587), + 20: uint16(20191), + 21: uint16(21315), + 22: uint16(21912), + 23: uint16(22825), + 24: uint16(24029), + 25: uint16(25797), + 26: uint16(27849), + 27: uint16(28154), + 28: uint16(29588), + 29: uint16(31359), + 30: uint16(33307), + 31: uint16(34214), + 32: uint16(36068), + 33: uint16(36368), + 34: uint16(36983), + 35: uint16(37351), + 36: uint16(38369), + 37: uint16(38433), + 38: uint16(38854), + 39: uint16(20984), + 40: uint16(21746), + 41: uint16(21894), + 42: uint16(24505), + 43: uint16(25764), + 44: uint16(28552), + 45: uint16(32180), + 46: uint16(36639), + 47: uint16(36685), + 48: uint16(37941), + 49: uint16(20681), + 50: uint16(23574), + 51: uint16(27838), + 52: uint16(28155), + 53: uint16(29979), + 54: uint16(30651), + 55: uint16(31805), + 56: uint16(31844), + 57: uint16(35449), + 58: uint16(35522), + 59: uint16(22558), + 60: uint16(22974), + 61: uint16(24086), + 62: uint16(25463), + 63: uint16(29266), + 64: uint16(30090), + 65: uint16(30571), + 66: uint16(35548), + 67: uint16(36028), + 68: uint16(36626), + 69: uint16(24307), + 70: uint16(26228), + 71: uint16(28152), + 72: uint16(32893), + 73: uint16(33729), + 74: uint16(35531), + 75: uint16(38737), + 76: uint16(39894), + 77: uint16(64000), + 78: uint16(21059), + 79: uint16(26367), + 80: uint16(28053), + 81: uint16(28399), + 82: uint16(32224), + 83: uint16(35558), + 84: uint16(36910), + 85: uint16(36958), + 86: uint16(39636), + 87: uint16(21021), + 88: uint16(21119), + 89: uint16(21736), + 90: uint16(24980), + 91: uint16(25220), + 92: uint16(25307), + 93: uint16(26786), + }, + 84: { + 0: uint16(26898), + 1: uint16(26970), + 2: uint16(27189), + 3: uint16(28818), + 4: uint16(28966), + 5: uint16(30813), + 6: uint16(30977), + 7: uint16(30990), + 8: uint16(31186), + 9: uint16(31245), + 10: uint16(32918), + 11: uint16(33400), + 12: uint16(33493), + 13: uint16(33609), + 14: uint16(34121), + 15: uint16(35970), + 16: uint16(36229), + 17: uint16(37218), + 18: uint16(37259), + 19: uint16(37294), + 20: uint16(20419), + 21: uint16(22225), + 22: uint16(29165), + 23: uint16(30679), + 24: uint16(34560), + 25: uint16(35320), + 26: uint16(23544), + 27: uint16(24534), + 28: uint16(26449), + 29: uint16(37032), + 30: uint16(21474), + 31: uint16(22618), + 32: uint16(23541), + 33: uint16(24740), + 34: uint16(24961), + 35: uint16(25696), + 36: uint16(32317), + 37: uint16(32880), + 38: uint16(34085), + 39: uint16(37507), + 40: uint16(25774), + 41: uint16(20652), + 42: uint16(23828), + 43: uint16(26368), + 44: uint16(22684), + 45: uint16(25277), + 46: uint16(25512), + 47: uint16(26894), + 48: uint16(27000), + 49: uint16(27166), + 50: uint16(28267), + 51: uint16(30394), + 52: uint16(31179), + 53: uint16(33467), + 54: uint16(33833), + 55: uint16(35535), + 56: uint16(36264), + 57: uint16(36861), + 58: uint16(37138), + 59: uint16(37195), + 60: uint16(37276), + 61: uint16(37648), + 62: uint16(37656), + 63: uint16(37786), + 64: uint16(38619), + 65: uint16(39478), + 66: uint16(39949), + 67: uint16(19985), + 68: uint16(30044), + 69: uint16(31069), + 70: uint16(31482), + 71: uint16(31569), + 72: uint16(31689), + 73: uint16(32302), + 74: uint16(33988), + 75: uint16(36441), + 76: uint16(36468), + 77: uint16(36600), + 78: uint16(36880), + 79: uint16(26149), + 80: uint16(26943), + 81: uint16(29763), + 82: uint16(20986), + 83: uint16(26414), + 84: uint16(40668), + 85: uint16(20805), + 86: uint16(24544), + 87: uint16(27798), + 88: uint16(34802), + 89: uint16(34909), + 90: uint16(34935), + 91: uint16(24756), + 92: uint16(33205), + 93: uint16(33795), + }, + 85: { + 0: uint16(36101), + 1: uint16(21462), + 2: uint16(21561), + 3: uint16(22068), + 4: uint16(23094), + 5: uint16(23601), + 6: uint16(28810), + 7: uint16(32736), + 8: uint16(32858), + 9: uint16(33030), + 10: uint16(33261), + 11: uint16(36259), + 12: uint16(37257), + 13: uint16(39519), + 14: uint16(40434), + 15: uint16(20596), + 16: uint16(20164), + 17: uint16(21408), + 18: uint16(24827), + 19: uint16(28204), + 20: uint16(23652), + 21: uint16(20360), + 22: uint16(20516), + 23: uint16(21988), + 24: uint16(23769), + 25: uint16(24159), + 26: uint16(24677), + 27: uint16(26772), + 28: uint16(27835), + 29: uint16(28100), + 30: uint16(29118), + 31: uint16(30164), + 32: uint16(30196), + 33: uint16(30305), + 34: uint16(31258), + 35: uint16(31305), + 36: uint16(32199), + 37: uint16(32251), + 38: uint16(32622), + 39: uint16(33268), + 40: uint16(34473), + 41: uint16(36636), + 42: uint16(38601), + 43: uint16(39347), + 44: uint16(40786), + 45: uint16(21063), + 46: uint16(21189), + 47: uint16(39149), + 48: uint16(35242), + 49: uint16(19971), + 50: uint16(26578), + 51: uint16(28422), + 52: uint16(20405), + 53: uint16(23522), + 54: uint16(26517), + 55: uint16(27784), + 56: uint16(28024), + 57: uint16(29723), + 58: uint16(30759), + 59: uint16(37341), + 60: uint16(37756), + 61: uint16(34756), + 62: uint16(31204), + 63: uint16(31281), + 64: uint16(24555), + 65: uint16(20182), + 66: uint16(21668), + 67: uint16(21822), + 68: uint16(22702), + 69: uint16(22949), + 70: uint16(24816), + 71: uint16(25171), + 72: uint16(25302), + 73: uint16(26422), + 74: uint16(26965), + 75: uint16(33333), + 76: uint16(38464), + 77: uint16(39345), + 78: uint16(39389), + 79: uint16(20524), + 80: uint16(21331), + 81: uint16(21828), + 82: uint16(22396), + 83: uint16(64001), + 84: uint16(25176), + 85: uint16(64002), + 86: uint16(25826), + 87: uint16(26219), + 88: uint16(26589), + 89: uint16(28609), + 90: uint16(28655), + 91: uint16(29730), + 92: uint16(29752), + 93: uint16(35351), + }, + 86: { + 0: uint16(37944), + 1: uint16(21585), + 2: uint16(22022), + 3: uint16(22374), + 4: uint16(24392), + 5: uint16(24986), + 6: uint16(27470), + 7: uint16(28760), + 8: uint16(28845), + 9: uint16(32187), + 10: uint16(35477), + 11: uint16(22890), + 12: uint16(33067), + 13: uint16(25506), + 14: uint16(30472), + 15: uint16(32829), + 16: uint16(36010), + 17: uint16(22612), + 18: uint16(25645), + 19: uint16(27067), + 20: uint16(23445), + 21: uint16(24081), + 22: uint16(28271), + 23: uint16(64003), + 24: uint16(34153), + 25: uint16(20812), + 26: uint16(21488), + 27: uint16(22826), + 28: uint16(24608), + 29: uint16(24907), + 30: uint16(27526), + 31: uint16(27760), + 32: uint16(27888), + 33: uint16(31518), + 34: uint16(32974), + 35: uint16(33492), + 36: uint16(36294), + 37: uint16(37040), + 38: uint16(39089), + 39: uint16(64004), + 40: uint16(25799), + 41: uint16(28580), + 42: uint16(25745), + 43: uint16(25860), + 44: uint16(20814), + 45: uint16(21520), + 46: uint16(22303), + 47: uint16(35342), + 48: uint16(24927), + 49: uint16(26742), + 50: uint16(64005), + 51: uint16(30171), + 52: uint16(31570), + 53: uint16(32113), + 54: uint16(36890), + 55: uint16(22534), + 56: uint16(27084), + 57: uint16(33151), + 58: uint16(35114), + 59: uint16(36864), + 60: uint16(38969), + 61: uint16(20600), + 62: uint16(22871), + 63: uint16(22956), + 64: uint16(25237), + 65: uint16(36879), + 66: uint16(39722), + 67: uint16(24925), + 68: uint16(29305), + 69: uint16(38358), + 70: uint16(22369), + 71: uint16(23110), + 72: uint16(24052), + 73: uint16(25226), + 74: uint16(25773), + 75: uint16(25850), + 76: uint16(26487), + 77: uint16(27874), + 78: uint16(27966), + 79: uint16(29228), + 80: uint16(29750), + 81: uint16(30772), + 82: uint16(32631), + 83: uint16(33453), + 84: uint16(36315), + 85: uint16(38935), + 86: uint16(21028), + 87: uint16(22338), + 88: uint16(26495), + 89: uint16(29256), + 90: uint16(29923), + 91: uint16(36009), + 92: uint16(36774), + 93: uint16(37393), + }, + 87: { + 0: uint16(38442), + 1: uint16(20843), + 2: uint16(21485), + 3: uint16(25420), + 4: uint16(20329), + 5: uint16(21764), + 6: uint16(24726), + 7: uint16(25943), + 8: uint16(27803), + 9: uint16(28031), + 10: uint16(29260), + 11: uint16(29437), + 12: uint16(31255), + 13: uint16(35207), + 14: uint16(35997), + 15: uint16(24429), + 16: uint16(28558), + 17: uint16(28921), + 18: uint16(33192), + 19: uint16(24846), + 20: uint16(20415), + 21: uint16(20559), + 22: uint16(25153), + 23: uint16(29255), + 24: uint16(31687), + 25: uint16(32232), + 26: uint16(32745), + 27: uint16(36941), + 28: uint16(38829), + 29: uint16(39449), + 30: uint16(36022), + 31: uint16(22378), + 32: uint16(24179), + 33: uint16(26544), + 34: uint16(33805), + 35: uint16(35413), + 36: uint16(21536), + 37: uint16(23318), + 38: uint16(24163), + 39: uint16(24290), + 40: uint16(24330), + 41: uint16(25987), + 42: uint16(32954), + 43: uint16(34109), + 44: uint16(38281), + 45: uint16(38491), + 46: uint16(20296), + 47: uint16(21253), + 48: uint16(21261), + 49: uint16(21263), + 50: uint16(21638), + 51: uint16(21754), + 52: uint16(22275), + 53: uint16(24067), + 54: uint16(24598), + 55: uint16(25243), + 56: uint16(25265), + 57: uint16(25429), + 58: uint16(64006), + 59: uint16(27873), + 60: uint16(28006), + 61: uint16(30129), + 62: uint16(30770), + 63: uint16(32990), + 64: uint16(33071), + 65: uint16(33502), + 66: uint16(33889), + 67: uint16(33970), + 68: uint16(34957), + 69: uint16(35090), + 70: uint16(36875), + 71: uint16(37610), + 72: uint16(39165), + 73: uint16(39825), + 74: uint16(24133), + 75: uint16(26292), + 76: uint16(26333), + 77: uint16(28689), + 78: uint16(29190), + 79: uint16(64007), + 80: uint16(20469), + 81: uint16(21117), + 82: uint16(24426), + 83: uint16(24915), + 84: uint16(26451), + 85: uint16(27161), + 86: uint16(28418), + 87: uint16(29922), + 88: uint16(31080), + 89: uint16(34920), + 90: uint16(35961), + 91: uint16(39111), + 92: uint16(39108), + 93: uint16(39491), + }, + 88: { + 0: uint16(21697), + 1: uint16(31263), + 2: uint16(26963), + 3: uint16(35575), + 4: uint16(35914), + 5: uint16(39080), + 6: uint16(39342), + 7: uint16(24444), + 8: uint16(25259), + 9: uint16(30130), + 10: uint16(30382), + 11: uint16(34987), + 12: uint16(36991), + 13: uint16(38466), + 14: uint16(21305), + 15: uint16(24380), + 16: uint16(24517), + 17: uint16(27852), + 18: uint16(29644), + 19: uint16(30050), + 20: uint16(30091), + 21: uint16(31558), + 22: uint16(33534), + 23: uint16(39325), + 24: uint16(20047), + 25: uint16(36924), + 26: uint16(19979), + 27: uint16(20309), + 28: uint16(21414), + 29: uint16(22799), + 30: uint16(24264), + 31: uint16(26160), + 32: uint16(27827), + 33: uint16(29781), + 34: uint16(33655), + 35: uint16(34662), + 36: uint16(36032), + 37: uint16(36944), + 38: uint16(38686), + 39: uint16(39957), + 40: uint16(22737), + 41: uint16(23416), + 42: uint16(34384), + 43: uint16(35604), + 44: uint16(40372), + 45: uint16(23506), + 46: uint16(24680), + 47: uint16(24717), + 48: uint16(26097), + 49: uint16(27735), + 50: uint16(28450), + 51: uint16(28579), + 52: uint16(28698), + 53: uint16(32597), + 54: uint16(32752), + 55: uint16(38289), + 56: uint16(38290), + 57: uint16(38480), + 58: uint16(38867), + 59: uint16(21106), + 60: uint16(36676), + 61: uint16(20989), + 62: uint16(21547), + 63: uint16(21688), + 64: uint16(21859), + 65: uint16(21898), + 66: uint16(27323), + 67: uint16(28085), + 68: uint16(32216), + 69: uint16(33382), + 70: uint16(37532), + 71: uint16(38519), + 72: uint16(40569), + 73: uint16(21512), + 74: uint16(21704), + 75: uint16(30418), + 76: uint16(34532), + 77: uint16(38308), + 78: uint16(38356), + 79: uint16(38492), + 80: uint16(20130), + 81: uint16(20233), + 82: uint16(23022), + 83: uint16(23270), + 84: uint16(24055), + 85: uint16(24658), + 86: uint16(25239), + 87: uint16(26477), + 88: uint16(26689), + 89: uint16(27782), + 90: uint16(28207), + 91: uint16(32568), + 92: uint16(32923), + 93: uint16(33322), + }, + 89: { + 0: uint16(64008), + 1: uint16(64009), + 2: uint16(38917), + 3: uint16(20133), + 4: uint16(20565), + 5: uint16(21683), + 6: uint16(22419), + 7: uint16(22874), + 8: uint16(23401), + 9: uint16(23475), + 10: uint16(25032), + 11: uint16(26999), + 12: uint16(28023), + 13: uint16(28707), + 14: uint16(34809), + 15: uint16(35299), + 16: uint16(35442), + 17: uint16(35559), + 18: uint16(36994), + 19: uint16(39405), + 20: uint16(39608), + 21: uint16(21182), + 22: uint16(26680), + 23: uint16(20502), + 24: uint16(24184), + 25: uint16(26447), + 26: uint16(33607), + 27: uint16(34892), + 28: uint16(20139), + 29: uint16(21521), + 30: uint16(22190), + 31: uint16(29670), + 32: uint16(37141), + 33: uint16(38911), + 34: uint16(39177), + 35: uint16(39255), + 36: uint16(39321), + 37: uint16(22099), + 38: uint16(22687), + 39: uint16(34395), + 40: uint16(35377), + 41: uint16(25010), + 42: uint16(27382), + 43: uint16(29563), + 44: uint16(36562), + 45: uint16(27463), + 46: uint16(38570), + 47: uint16(39511), + 48: uint16(22869), + 49: uint16(29184), + 50: uint16(36203), + 51: uint16(38761), + 52: uint16(20436), + 53: uint16(23796), + 54: uint16(24358), + 55: uint16(25080), + 56: uint16(26203), + 57: uint16(27883), + 58: uint16(28843), + 59: uint16(29572), + 60: uint16(29625), + 61: uint16(29694), + 62: uint16(30505), + 63: uint16(30541), + 64: uint16(32067), + 65: uint16(32098), + 66: uint16(32291), + 67: uint16(33335), + 68: uint16(34898), + 69: uint16(64010), + 70: uint16(36066), + 71: uint16(37449), + 72: uint16(39023), + 73: uint16(23377), + 74: uint16(31348), + 75: uint16(34880), + 76: uint16(38913), + 77: uint16(23244), + 78: uint16(20448), + 79: uint16(21332), + 80: uint16(22846), + 81: uint16(23805), + 82: uint16(25406), + 83: uint16(28025), + 84: uint16(29433), + 85: uint16(33029), + 86: uint16(33031), + 87: uint16(33698), + 88: uint16(37583), + 89: uint16(38960), + 90: uint16(20136), + 91: uint16(20804), + 92: uint16(21009), + 93: uint16(22411), + }, + 90: { + 0: uint16(24418), + 1: uint16(27842), + 2: uint16(28366), + 3: uint16(28677), + 4: uint16(28752), + 5: uint16(28847), + 6: uint16(29074), + 7: uint16(29673), + 8: uint16(29801), + 9: uint16(33610), + 10: uint16(34722), + 11: uint16(34913), + 12: uint16(36872), + 13: uint16(37026), + 14: uint16(37795), + 15: uint16(39336), + 16: uint16(20846), + 17: uint16(24407), + 18: uint16(24800), + 19: uint16(24935), + 20: uint16(26291), + 21: uint16(34137), + 22: uint16(36426), + 23: uint16(37295), + 24: uint16(38795), + 25: uint16(20046), + 26: uint16(20114), + 27: uint16(21628), + 28: uint16(22741), + 29: uint16(22778), + 30: uint16(22909), + 31: uint16(23733), + 32: uint16(24359), + 33: uint16(25142), + 34: uint16(25160), + 35: uint16(26122), + 36: uint16(26215), + 37: uint16(27627), + 38: uint16(28009), + 39: uint16(28111), + 40: uint16(28246), + 41: uint16(28408), + 42: uint16(28564), + 43: uint16(28640), + 44: uint16(28649), + 45: uint16(28765), + 46: uint16(29392), + 47: uint16(29733), + 48: uint16(29786), + 49: uint16(29920), + 50: uint16(30355), + 51: uint16(31068), + 52: uint16(31946), + 53: uint16(32286), + 54: uint16(32993), + 55: uint16(33446), + 56: uint16(33899), + 57: uint16(33983), + 58: uint16(34382), + 59: uint16(34399), + 60: uint16(34676), + 61: uint16(35703), + 62: uint16(35946), + 63: uint16(37804), + 64: uint16(38912), + 65: uint16(39013), + 66: uint16(24785), + 67: uint16(25110), + 68: uint16(37239), + 69: uint16(23130), + 70: uint16(26127), + 71: uint16(28151), + 72: uint16(28222), + 73: uint16(29759), + 74: uint16(39746), + 75: uint16(24573), + 76: uint16(24794), + 77: uint16(31503), + 78: uint16(21700), + 79: uint16(24344), + 80: uint16(27742), + 81: uint16(27859), + 82: uint16(27946), + 83: uint16(28888), + 84: uint16(32005), + 85: uint16(34425), + 86: uint16(35340), + 87: uint16(40251), + 88: uint16(21270), + 89: uint16(21644), + 90: uint16(23301), + 91: uint16(27194), + 92: uint16(28779), + 93: uint16(30069), + }, + 91: { + 0: uint16(31117), + 1: uint16(31166), + 2: uint16(33457), + 3: uint16(33775), + 4: uint16(35441), + 5: uint16(35649), + 6: uint16(36008), + 7: uint16(38772), + 8: uint16(64011), + 9: uint16(25844), + 10: uint16(25899), + 11: uint16(30906), + 12: uint16(30907), + 13: uint16(31339), + 14: uint16(20024), + 15: uint16(21914), + 16: uint16(22864), + 17: uint16(23462), + 18: uint16(24187), + 19: uint16(24739), + 20: uint16(25563), + 21: uint16(27489), + 22: uint16(26213), + 23: uint16(26707), + 24: uint16(28185), + 25: uint16(29029), + 26: uint16(29872), + 27: uint16(32008), + 28: uint16(36996), + 29: uint16(39529), + 30: uint16(39973), + 31: uint16(27963), + 32: uint16(28369), + 33: uint16(29502), + 34: uint16(35905), + 35: uint16(38346), + 36: uint16(20976), + 37: uint16(24140), + 38: uint16(24488), + 39: uint16(24653), + 40: uint16(24822), + 41: uint16(24880), + 42: uint16(24908), + 43: uint16(26179), + 44: uint16(26180), + 45: uint16(27045), + 46: uint16(27841), + 47: uint16(28255), + 48: uint16(28361), + 49: uint16(28514), + 50: uint16(29004), + 51: uint16(29852), + 52: uint16(30343), + 53: uint16(31681), + 54: uint16(31783), + 55: uint16(33618), + 56: uint16(34647), + 57: uint16(36945), + 58: uint16(38541), + 59: uint16(40643), + 60: uint16(21295), + 61: uint16(22238), + 62: uint16(24315), + 63: uint16(24458), + 64: uint16(24674), + 65: uint16(24724), + 66: uint16(25079), + 67: uint16(26214), + 68: uint16(26371), + 69: uint16(27292), + 70: uint16(28142), + 71: uint16(28590), + 72: uint16(28784), + 73: uint16(29546), + 74: uint16(32362), + 75: uint16(33214), + 76: uint16(33588), + 77: uint16(34516), + 78: uint16(35496), + 79: uint16(36036), + 80: uint16(21123), + 81: uint16(29554), + 82: uint16(23446), + 83: uint16(27243), + 84: uint16(37892), + 85: uint16(21742), + 86: uint16(22150), + 87: uint16(23389), + 88: uint16(25928), + 89: uint16(25989), + 90: uint16(26313), + 91: uint16(26783), + 92: uint16(28045), + 93: uint16(28102), + }, + 92: { + 0: uint16(29243), + 1: uint16(32948), + 2: uint16(37237), + 3: uint16(39501), + 4: uint16(20399), + 5: uint16(20505), + 6: uint16(21402), + 7: uint16(21518), + 8: uint16(21564), + 9: uint16(21897), + 10: uint16(21957), + 11: uint16(24127), + 12: uint16(24460), + 13: uint16(26429), + 14: uint16(29030), + 15: uint16(29661), + 16: uint16(36869), + 17: uint16(21211), + 18: uint16(21235), + 19: uint16(22628), + 20: uint16(22734), + 21: uint16(28932), + 22: uint16(29071), + 23: uint16(29179), + 24: uint16(34224), + 25: uint16(35347), + 26: uint16(26248), + 27: uint16(34216), + 28: uint16(21927), + 29: uint16(26244), + 30: uint16(29002), + 31: uint16(33841), + 32: uint16(21321), + 33: uint16(21913), + 34: uint16(27585), + 35: uint16(24409), + 36: uint16(24509), + 37: uint16(25582), + 38: uint16(26249), + 39: uint16(28999), + 40: uint16(35569), + 41: uint16(36637), + 42: uint16(40638), + 43: uint16(20241), + 44: uint16(25658), + 45: uint16(28875), + 46: uint16(30054), + 47: uint16(34407), + 48: uint16(24676), + 49: uint16(35662), + 50: uint16(40440), + 51: uint16(20807), + 52: uint16(20982), + 53: uint16(21256), + 54: uint16(27958), + 55: uint16(33016), + 56: uint16(40657), + 57: uint16(26133), + 58: uint16(27427), + 59: uint16(28824), + 60: uint16(30165), + 61: uint16(21507), + 62: uint16(23673), + 63: uint16(32007), + 64: uint16(35350), + 65: uint16(27424), + 66: uint16(27453), + 67: uint16(27462), + 68: uint16(21560), + 69: uint16(24688), + 70: uint16(27965), + 71: uint16(32725), + 72: uint16(33288), + 73: uint16(20694), + 74: uint16(20958), + 75: uint16(21916), + 76: uint16(22123), + 77: uint16(22221), + 78: uint16(23020), + 79: uint16(23305), + 80: uint16(24076), + 81: uint16(24985), + 82: uint16(24984), + 83: uint16(25137), + 84: uint16(26206), + 85: uint16(26342), + 86: uint16(29081), + 87: uint16(29113), + 88: uint16(29114), + 89: uint16(29351), + 90: uint16(31143), + 91: uint16(31232), + 92: uint16(32690), + 93: uint16(35440), + }, +} + +var _rev_jis = [6879]uint16{ + 0: uint16(31), + 1: uint16(80), + 2: uint16(81), + 3: uint16(87), + 4: uint16(14), + 5: uint16(299), + 6: uint16(74), + 7: uint16(61), + 8: uint16(12), + 9: uint16(344), + 10: uint16(62), + 11: uint16(63), + 12: uint16(1280), + 13: uint16(1281), + 14: uint16(1282), + 15: uint16(1283), + 16: uint16(1284), + 17: uint16(1285), + 18: uint16(1286), + 19: uint16(1287), + 20: uint16(1288), + 21: uint16(1289), + 22: uint16(1290), + 23: uint16(1291), + 24: uint16(1292), + 25: uint16(1293), + 26: uint16(1294), + 27: uint16(1295), + 28: uint16(1296), + 29: uint16(1297), + 30: uint16(1298), + 31: uint16(1299), + 32: uint16(1300), + 33: uint16(1301), + 34: uint16(1302), + 35: uint16(1303), + 36: uint16(1312), + 37: uint16(1313), + 38: uint16(1314), + 39: uint16(1315), + 40: uint16(1316), + 41: uint16(1317), + 42: uint16(1318), + 43: uint16(1319), + 44: uint16(1320), + 45: uint16(1321), + 46: uint16(1322), + 47: uint16(1323), + 48: uint16(1324), + 49: uint16(1325), + 50: uint16(1326), + 51: uint16(1327), + 52: uint16(1328), + 53: uint16(1329), + 54: uint16(1330), + 55: uint16(1331), + 56: uint16(1332), + 57: uint16(1333), + 58: uint16(1334), + 59: uint16(1335), + 60: uint16(1542), + 61: uint16(1536), + 62: uint16(1537), + 63: uint16(1538), + 64: uint16(1539), + 65: uint16(1540), + 66: uint16(1541), + 67: uint16(1543), + 68: uint16(1544), + 69: uint16(1545), + 70: uint16(1546), + 71: uint16(1547), + 72: uint16(1548), + 73: uint16(1549), + 74: uint16(1550), + 75: uint16(1551), + 76: uint16(1552), + 77: uint16(1553), + 78: uint16(1554), + 79: uint16(1555), + 80: uint16(1556), + 81: uint16(1557), + 82: uint16(1558), + 83: uint16(1559), + 84: uint16(1560), + 85: uint16(1561), + 86: uint16(1562), + 87: uint16(1563), + 88: uint16(1564), + 89: uint16(1565), + 90: uint16(1566), + 91: uint16(1567), + 92: uint16(1568), + 93: uint16(1584), + 94: uint16(1585), + 95: uint16(1586), + 96: uint16(1587), + 97: uint16(1588), + 98: uint16(1589), + 99: uint16(1591), + 100: uint16(1592), + 101: uint16(1593), + 102: uint16(1594), + 103: uint16(1595), + 104: uint16(1596), + 105: uint16(1597), + 106: uint16(1598), + 107: uint16(1599), + 108: uint16(1600), + 109: uint16(1601), + 110: uint16(1602), + 111: uint16(1603), + 112: uint16(1604), + 113: uint16(1605), + 114: uint16(1606), + 115: uint16(1607), + 116: uint16(1608), + 117: uint16(1609), + 118: uint16(1610), + 119: uint16(1611), + 120: uint16(1612), + 121: uint16(1613), + 122: uint16(1614), + 123: uint16(1615), + 124: uint16(1616), + 125: uint16(1590), + 126: uint16(29), + 127: uint16(28), + 128: uint16(33), + 129: uint16(37), + 130: uint16(38), + 131: uint16(39), + 132: uint16(40), + 133: uint16(342), + 134: uint16(343), + 135: uint16(36), + 136: uint16(35), + 137: uint16(338), + 138: uint16(75), + 139: uint16(76), + 140: uint16(263), + 141: uint16(77), + 142: uint16(337), + 143: uint16(266), + 144: uint16(267), + 145: uint16(265), + 146: uint16(268), + 147: uint16(300), + 148: uint16(301), + 149: uint16(302), + 150: uint16(318), + 151: uint16(303), + 152: uint16(319), + 153: uint16(281), + 154: uint16(282), + 155: uint16(60), + 156: uint16(324), + 157: uint16(326), + 158: uint16(70), + 159: uint16(315), + 160: uint16(297), + 161: uint16(298), + 162: uint16(288), + 163: uint16(287), + 164: uint16(328), + 165: uint16(329), + 166: uint16(71), + 167: uint16(327), + 168: uint16(325), + 169: uint16(321), + 170: uint16(65), + 171: uint16(320), + 172: uint16(68), + 173: uint16(69), + 174: uint16(322), + 175: uint16(323), + 176: uint16(285), + 177: uint16(286), + 178: uint16(283), + 179: uint16(284), + 180: uint16(316), + 181: uint16(317), + 182: uint16(1792), + 183: uint16(1803), + 184: uint16(1793), + 185: uint16(1804), + 186: uint16(1794), + 187: uint16(1805), + 188: uint16(1795), + 189: uint16(1806), + 190: uint16(1797), + 191: uint16(1808), + 192: uint16(1796), + 193: uint16(1807), + 194: uint16(1798), + 195: uint16(1819), + 196: uint16(1814), + 197: uint16(1809), + 198: uint16(1800), + 199: uint16(1821), + 200: uint16(1816), + 201: uint16(1811), + 202: uint16(1799), + 203: uint16(1815), + 204: uint16(1820), + 205: uint16(1810), + 206: uint16(1801), + 207: uint16(1817), + 208: uint16(1822), + 209: uint16(1812), + 210: uint16(1802), + 211: uint16(1818), + 212: uint16(1823), + 213: uint16(1813), + 214: uint16(258), + 215: uint16(257), + 216: uint16(260), + 217: uint16(259), + 218: uint16(262), + 219: uint16(261), + 220: uint16(256), + 221: uint16(93), + 222: uint16(90), + 223: uint16(92), + 224: uint16(91), + 225: uint16(349), + 226: uint16(89), + 227: uint16(88), + 228: uint16(73), + 229: uint16(72), + 230: uint16(341), + 231: uint16(340), + 232: uint16(339), + 234: uint16(1), + 235: uint16(2), + 236: uint16(22), + 237: uint16(24), + 238: uint16(25), + 239: uint16(26), + 240: uint16(49), + 241: uint16(50), + 242: uint16(51), + 243: uint16(52), + 244: uint16(53), + 245: uint16(54), + 246: uint16(55), + 247: uint16(56), + 248: uint16(57), + 249: uint16(58), + 250: uint16(264), + 251: uint16(269), + 252: uint16(43), + 253: uint16(44), + 254: uint16(32), + 255: uint16(768), + 256: uint16(769), + 257: uint16(770), + 258: uint16(771), + 259: uint16(772), + 260: uint16(773), + 261: uint16(774), + 262: uint16(775), + 263: uint16(776), + 264: uint16(777), + 265: uint16(778), + 266: uint16(779), + 267: uint16(780), + 268: uint16(781), + 269: uint16(782), + 270: uint16(783), + 271: uint16(784), + 272: uint16(785), + 273: uint16(786), + 274: uint16(787), + 275: uint16(788), + 276: uint16(789), + 277: uint16(790), + 278: uint16(791), + 279: uint16(792), + 280: uint16(793), + 281: uint16(794), + 282: uint16(795), + 283: uint16(796), + 284: uint16(797), + 285: uint16(798), + 286: uint16(799), + 287: uint16(800), + 288: uint16(801), + 289: uint16(802), + 290: uint16(803), + 291: uint16(804), + 292: uint16(805), + 293: uint16(806), + 294: uint16(807), + 295: uint16(808), + 296: uint16(809), + 297: uint16(810), + 298: uint16(811), + 299: uint16(812), + 300: uint16(813), + 301: uint16(814), + 302: uint16(815), + 303: uint16(816), + 304: uint16(817), + 305: uint16(818), + 306: uint16(819), + 307: uint16(820), + 308: uint16(821), + 309: uint16(822), + 310: uint16(823), + 311: uint16(824), + 312: uint16(825), + 313: uint16(826), + 314: uint16(827), + 315: uint16(828), + 316: uint16(829), + 317: uint16(830), + 318: uint16(831), + 319: uint16(832), + 320: uint16(833), + 321: uint16(834), + 322: uint16(835), + 323: uint16(836), + 324: uint16(837), + 325: uint16(838), + 326: uint16(839), + 327: uint16(840), + 328: uint16(841), + 329: uint16(842), + 330: uint16(843), + 331: uint16(844), + 332: uint16(845), + 333: uint16(846), + 334: uint16(847), + 335: uint16(848), + 336: uint16(849), + 337: uint16(850), + 338: uint16(10), + 339: uint16(11), + 340: uint16(20), + 341: uint16(21), + 342: uint16(1024), + 343: uint16(1025), + 344: uint16(1026), + 345: uint16(1027), + 346: uint16(1028), + 347: uint16(1029), + 348: uint16(1030), + 349: uint16(1031), + 350: uint16(1032), + 351: uint16(1033), + 352: uint16(1034), + 353: uint16(1035), + 354: uint16(1036), + 355: uint16(1037), + 356: uint16(1038), + 357: uint16(1039), + 358: uint16(1040), + 359: uint16(1041), + 360: uint16(1042), + 361: uint16(1043), + 362: uint16(1044), + 363: uint16(1045), + 364: uint16(1046), + 365: uint16(1047), + 366: uint16(1048), + 367: uint16(1049), + 368: uint16(1050), + 369: uint16(1051), + 370: uint16(1052), + 371: uint16(1053), + 372: uint16(1054), + 373: uint16(1055), + 374: uint16(1056), + 375: uint16(1057), + 376: uint16(1058), + 377: uint16(1059), + 378: uint16(1060), + 379: uint16(1061), + 380: uint16(1062), + 381: uint16(1063), + 382: uint16(1064), + 383: uint16(1065), + 384: uint16(1066), + 385: uint16(1067), + 386: uint16(1068), + 387: uint16(1069), + 388: uint16(1070), + 389: uint16(1071), + 390: uint16(1072), + 391: uint16(1073), + 392: uint16(1074), + 393: uint16(1075), + 394: uint16(1076), + 395: uint16(1077), + 396: uint16(1078), + 397: uint16(1079), + 398: uint16(1080), + 399: uint16(1081), + 400: uint16(1082), + 401: uint16(1083), + 402: uint16(1084), + 403: uint16(1085), + 404: uint16(1086), + 405: uint16(1087), + 406: uint16(1088), + 407: uint16(1089), + 408: uint16(1090), + 409: uint16(1091), + 410: uint16(1092), + 411: uint16(1093), + 412: uint16(1094), + 413: uint16(1095), + 414: uint16(1096), + 415: uint16(1097), + 416: uint16(1098), + 417: uint16(1099), + 418: uint16(1100), + 419: uint16(1101), + 420: uint16(1102), + 421: uint16(1103), + 422: uint16(1104), + 423: uint16(1105), + 424: uint16(1106), + 425: uint16(1107), + 426: uint16(1108), + 427: uint16(1109), + 428: uint16(5), + 429: uint16(27), + 430: uint16(18), + 431: uint16(19), + 432: uint16(3915), + 433: uint16(8793), + 434: uint16(6934), + 435: uint16(10843), + 436: uint16(7493), + 437: uint16(6671), + 438: uint16(7492), + 439: uint16(4379), + 440: uint16(10291), + 441: uint16(11294), + 442: uint16(12033), + 443: uint16(4110), + 444: uint16(4685), + 445: uint16(12034), + 446: uint16(7939), + 447: uint16(12577), + 448: uint16(5173), + 449: uint16(10521), + 450: uint16(7494), + 451: uint16(11549), + 452: uint16(10529), + 453: uint16(12035), + 454: uint16(8773), + 455: uint16(12036), + 456: uint16(5465), + 457: uint16(12037), + 458: uint16(4924), + 459: uint16(8719), + 460: uint16(6982), + 461: uint16(12038), + 462: uint16(12039), + 463: uint16(12040), + 464: uint16(9748), + 465: uint16(5174), + 466: uint16(9750), + 467: uint16(9538), + 468: uint16(5922), + 469: uint16(10770), + 470: uint16(18472), + 471: uint16(12041), + 472: uint16(7495), + 473: uint16(12042), + 474: uint16(4372), + 475: uint16(5444), + 476: uint16(5967), + 477: uint16(11080), + 478: uint16(13573), + 479: uint16(11343), + 480: uint16(9564), + 481: uint16(4868), + 482: uint16(5140), + 483: uint16(12043), + 484: uint16(12044), + 485: uint16(11546), + 486: uint16(11292), + 487: uint16(8263), + 488: uint16(12046), + 489: uint16(6741), + 490: uint16(9554), + 491: uint16(12049), + 492: uint16(4125), + 493: uint16(5950), + 494: uint16(5949), + 495: uint16(3909), + 496: uint16(11818), + 497: uint16(11817), + 498: uint16(6418), + 499: uint16(3840), + 500: uint16(12050), + 501: uint16(12051), + 502: uint16(12052), + 503: uint16(10771), + 504: uint16(12053), + 505: uint16(5969), + 506: uint16(3910), + 507: uint16(10833), + 508: uint16(5211), + 509: uint16(5212), + 510: uint16(5213), + 511: uint16(9025), + 512: uint16(11547), + 513: uint16(12054), + 514: uint16(12055), + 515: uint16(12056), + 516: uint16(7724), + 517: uint16(7193), + 518: uint16(7725), + 519: uint16(12061), + 520: uint16(12059), + 521: uint16(12060), + 522: uint16(5175), + 523: uint16(6402), + 524: uint16(4431), + 525: uint16(12058), + 526: uint16(12057), + 527: uint16(10504), + 528: uint16(6693), + 529: uint16(6692), + 530: uint16(8477), + 531: uint16(12062), + 532: uint16(10292), + 533: uint16(8006), + 534: uint16(23), + 535: uint16(12063), + 536: uint16(12065), + 537: uint16(8516), + 538: uint16(11584), + 539: uint16(3881), + 540: uint16(12064), + 541: uint16(4381), + 542: uint16(5411), + 543: uint16(8774), + 544: uint16(5710), + 545: uint16(12066), + 546: uint16(9731), + 547: uint16(4938), + 548: uint16(12067), + 549: uint16(3882), + 550: uint16(5951), + 551: uint16(4939), + 552: uint16(10329), + 553: uint16(10001), + 554: uint16(5176), + 555: uint16(4432), + 556: uint16(12102), + 557: uint16(9248), + 558: uint16(9803), + 559: uint16(12069), + 560: uint16(10011), + 561: uint16(11585), + 562: uint16(7692), + 563: uint16(6694), + 564: uint16(6742), + 565: uint16(4383), + 566: uint16(9008), + 567: uint16(8705), + 568: uint16(12073), + 569: uint16(3883), + 570: uint16(9026), + 571: uint16(7194), + 572: uint16(6419), + 573: uint16(11267), + 574: uint16(8493), + 575: uint16(4382), + 576: uint16(12072), + 577: uint16(11293), + 578: uint16(12068), + 579: uint16(12070), + 580: uint16(6477), + 581: uint16(12071), + 582: uint16(13315), + 583: uint16(12079), + 584: uint16(12082), + 585: uint16(12080), + 586: uint16(4385), + 587: uint16(10522), + 588: uint16(12074), + 589: uint16(12078), + 590: uint16(5970), + 591: uint16(6695), + 592: uint16(4869), + 593: uint16(12083), + 594: uint16(12075), + 595: uint16(11586), + 596: uint16(6743), + 597: uint16(12076), + 598: uint16(12081), + 599: uint16(12084), + 600: uint16(12077), + 601: uint16(5376), + 602: uint16(3884), + 603: uint16(5377), + 604: uint16(4384), + 605: uint16(13316), + 606: uint16(10840), + 607: uint16(10317), + 608: uint16(5971), + 609: uint16(7694), + 610: uint16(11542), + 611: uint16(10551), + 612: uint16(5655), + 613: uint16(8452), + 614: uint16(4419), + 615: uint16(7218), + 616: uint16(12088), + 617: uint16(12093), + 618: uint16(12091), + 619: uint16(12086), + 620: uint16(8462), + 621: uint16(12089), + 622: uint16(12092), + 623: uint16(12090), + 624: uint16(10556), + 625: uint16(12087), + 626: uint16(7693), + 627: uint16(10834), + 628: uint16(12094), + 629: uint16(12095), + 630: uint16(7171), + 631: uint16(12108), + 632: uint16(9775), + 633: uint16(10261), + 634: uint16(12103), + 635: uint16(10575), + 636: uint16(4373), + 637: uint16(12107), + 638: uint16(12101), + 639: uint16(12110), + 640: uint16(8241), + 641: uint16(5923), + 642: uint16(9787), + 643: uint16(16166), + 644: uint16(12109), + 645: uint16(9276), + 646: uint16(12098), + 647: uint16(5973), + 648: uint16(5972), + 649: uint16(12096), + 650: uint16(6969), + 651: uint16(12104), + 652: uint16(10574), + 653: uint16(8748), + 654: uint16(12100), + 655: uint16(5712), + 656: uint16(12097), + 657: uint16(12105), + 658: uint16(12099), + 659: uint16(11568), + 660: uint16(12106), + 661: uint16(11808), + 662: uint16(5445), + 663: uint16(5711), + 664: uint16(12111), + 665: uint16(12112), + 666: uint16(12116), + 667: uint16(3885), + 668: uint16(10543), + 669: uint16(12115), + 670: uint16(12114), + 671: uint16(12118), + 672: uint16(12117), + 673: uint16(9027), + 674: uint16(5713), + 675: uint16(12119), + 676: uint16(6948), + 677: uint16(8453), + 678: uint16(9028), + 679: uint16(5461), + 680: uint16(12120), + 681: uint16(5141), + 682: uint16(12121), + 683: uint16(12123), + 684: uint16(10772), + 685: uint16(5701), + 686: uint16(6672), + 687: uint16(10070), + 688: uint16(12122), + 689: uint16(6436), + 690: uint16(11298), + 691: uint16(12125), + 692: uint16(12290), + 693: uint16(12124), + 694: uint16(6435), + 695: uint16(7260), + 696: uint16(5656), + 697: uint16(12291), + 698: uint16(5422), + 699: uint16(12288), + 700: uint16(12289), + 701: uint16(9486), + 702: uint16(8283), + 703: uint16(5378), + 704: uint16(10796), + 705: uint16(12292), + 706: uint16(11548), + 707: uint16(12293), + 708: uint16(12296), + 709: uint16(12294), + 710: uint16(8237), + 711: uint16(12295), + 712: uint16(12297), + 713: uint16(12299), + 714: uint16(12298), + 715: uint16(10535), + 716: uint16(5142), + 717: uint16(12301), + 718: uint16(12302), + 719: uint16(4366), + 720: uint16(12300), + 721: uint16(6995), + 722: uint16(12305), + 723: uint16(12304), + 724: uint16(12303), + 725: uint16(12085), + 726: uint16(12306), + 727: uint16(7261), + 728: uint16(12307), + 729: uint16(11268), + 730: uint16(11064), + 731: uint16(12309), + 732: uint16(12308), + 733: uint16(12311), + 734: uint16(12310), + 735: uint16(12312), + 736: uint16(12313), + 737: uint16(3923), + 738: uint16(5908), + 739: uint16(5658), + 740: uint16(7195), + 741: uint16(8794), + 742: uint16(5379), + 743: uint16(8007), + 744: uint16(5974), + 745: uint16(6221), + 746: uint16(12315), + 747: uint16(11047), + 748: uint16(9253), + 749: uint16(6744), + 750: uint16(12314), + 751: uint16(12316), + 752: uint16(9277), + 753: uint16(4692), + 754: uint16(12317), + 755: uint16(9565), + 756: uint16(8211), + 757: uint16(12319), + 758: uint16(12320), + 759: uint16(9995), + 760: uint16(5975), + 761: uint16(11802), + 762: uint16(12321), + 763: uint16(5381), + 764: uint16(10523), + 765: uint16(8469), + 766: uint16(5456), + 767: uint16(9236), + 768: uint16(5714), + 769: uint16(12322), + 770: uint16(12323), + 771: uint16(9537), + 772: uint16(4158), + 773: uint16(12326), + 774: uint16(6492), + 775: uint16(12325), + 776: uint16(6437), + 777: uint16(12327), + 778: uint16(17741), + 779: uint16(12328), + 780: uint16(10784), + 781: uint16(12329), + 782: uint16(12330), + 783: uint16(12331), + 784: uint16(7496), + 785: uint16(6955), + 786: uint16(4870), + 787: uint16(12334), + 788: uint16(12332), + 789: uint16(11036), + 790: uint16(12333), + 791: uint16(10297), + 792: uint16(12335), + 793: uint16(12336), + 794: uint16(12337), + 795: uint16(9278), + 796: uint16(12341), + 797: uint16(12339), + 798: uint16(12340), + 799: uint16(12338), + 800: uint16(6466), + 801: uint16(12342), + 802: uint16(11081), + 803: uint16(11587), + 804: uint16(12343), + 805: uint16(7943), + 806: uint16(12344), + 807: uint16(7225), + 808: uint16(12345), + 809: uint16(8795), + 810: uint16(11550), + 811: uint16(9279), + 812: uint16(12580), + 813: uint16(12346), + 814: uint16(21252), + 815: uint16(5412), + 816: uint16(12347), + 817: uint16(10813), + 818: uint16(7239), + 819: uint16(8539), + 820: uint16(12349), + 821: uint16(9539), + 822: uint16(12350), + 823: uint16(12351), + 824: uint16(4621), + 825: uint16(12352), + 826: uint16(5382), + 827: uint16(9515), + 828: uint16(4185), + 829: uint16(7215), + 830: uint16(9984), + 831: uint16(12353), + 832: uint16(9280), + 833: uint16(7726), + 834: uint16(12354), + 835: uint16(10507), + 836: uint16(7993), + 837: uint16(4865), + 838: uint16(4872), + 839: uint16(12355), + 840: uint16(12357), + 841: uint16(5657), + 842: uint16(12356), + 843: uint16(11602), + 844: uint16(7240), + 845: uint16(10012), + 846: uint16(10539), + 847: uint16(12358), + 848: uint16(11351), + 849: uint16(12359), + 850: uint16(12360), + 851: uint16(9309), + 852: uint16(12361), + 853: uint16(7944), + 854: uint16(6493), + 855: uint16(5715), + 856: uint16(12362), + 857: uint16(6696), + 858: uint16(6222), + 859: uint16(9029), + 860: uint16(12364), + 861: uint16(8454), + 862: uint16(6478), + 863: uint16(12365), + 864: uint16(12366), + 865: uint16(8207), + 866: uint16(12363), + 867: uint16(12368), + 868: uint16(10773), + 869: uint16(6211), + 870: uint16(12367), + 871: uint16(5716), + 872: uint16(6461), + 873: uint16(9804), + 874: uint16(12371), + 875: uint16(12369), + 876: uint16(10330), + 877: uint16(7497), + 878: uint16(12378), + 879: uint16(4675), + 880: uint16(12372), + 881: uint16(12370), + 882: uint16(8238), + 883: uint16(12374), + 884: uint16(12373), + 885: uint16(4643), + 886: uint16(5695), + 887: uint16(12379), + 888: uint16(11532), + 889: uint16(12375), + 890: uint16(12380), + 891: uint16(12377), + 892: uint16(12376), + 893: uint16(11566), + 894: uint16(5976), + 895: uint16(4386), + 896: uint16(11603), + 897: uint16(7252), + 898: uint16(9271), + 899: uint16(6212), + 900: uint16(12545), + 901: uint16(12546), + 902: uint16(11588), + 903: uint16(11786), + 904: uint16(12548), + 905: uint16(5977), + 906: uint16(12547), + 907: uint16(4622), + 908: uint16(12549), + 909: uint16(10805), + 910: uint16(8987), + 911: uint16(11269), + 912: uint16(10552), + 913: uint16(12550), + 914: uint16(20276), + 915: uint16(9487), + 916: uint16(12551), + 917: uint16(4873), + 918: uint16(11026), + 919: uint16(7424), + 920: uint16(12552), + 921: uint16(10566), + 922: uint16(12556), + 923: uint16(7945), + 924: uint16(12553), + 925: uint16(5423), + 926: uint16(12554), + 927: uint16(4874), + 928: uint16(5645), + 929: uint16(12557), + 930: uint16(12558), + 931: uint16(12559), + 932: uint16(12560), + 933: uint16(6970), + 934: uint16(5978), + 935: uint16(11069), + 936: uint16(11079), + 937: uint16(9558), + 938: uint16(10576), + 939: uint16(12561), + 940: uint16(12562), + 941: uint16(12564), + 942: uint16(12566), + 943: uint16(12565), + 944: uint16(12567), + 945: uint16(4380), + 946: uint16(10795), + 947: uint16(6491), + 948: uint16(12568), + 949: uint16(8248), + 950: uint16(7425), + 951: uint16(5384), + 952: uint16(12569), + 953: uint16(10042), + 954: uint16(12570), + 955: uint16(12571), + 956: uint16(12572), + 957: uint16(12573), + 958: uint16(10243), + 959: uint16(5447), + 960: uint16(3908), + 961: uint16(9502), + 962: uint16(12574), + 963: uint16(7196), + 964: uint16(8008), + 965: uint16(12576), + 966: uint16(12575), + 967: uint16(7426), + 968: uint16(5952), + 969: uint16(12578), + 970: uint16(10013), + 971: uint16(12579), + 972: uint16(10043), + 973: uint16(8467), + 974: uint16(8525), + 975: uint16(5383), + 976: uint16(9549), + 977: uint16(8720), + 978: uint16(9805), + 979: uint16(10797), + 980: uint16(12581), + 981: uint16(8009), + 982: uint16(5652), + 983: uint16(12582), + 984: uint16(12583), + 985: uint16(4107), + 986: uint16(3924), + 987: uint16(4940), + 988: uint16(8455), + 989: uint16(5168), + 990: uint16(11344), + 991: uint16(12586), + 992: uint16(4374), + 993: uint16(12585), + 994: uint16(5385), + 995: uint16(12587), + 996: uint16(11088), + 997: uint16(12588), + 998: uint16(11569), + 999: uint16(5979), + 1000: uint16(5909), + 1001: uint16(12589), + 1002: uint16(12591), + 1003: uint16(12590), + 1004: uint16(7742), + 1005: uint16(4120), + 1006: uint16(4157), + 1007: uint16(12592), + 1008: uint16(12593), + 1009: uint16(5910), + 1010: uint16(12594), + 1011: uint16(5197), + 1012: uint16(6673), + 1013: uint16(12595), + 1014: uint16(10835), + 1015: uint16(6420), + 1016: uint16(5177), + 1017: uint16(11270), + 1018: uint16(8239), + 1019: uint16(10014), + 1020: uint16(7004), + 1021: uint16(7206), + 1022: uint16(6983), + 1023: uint16(6996), + 1024: uint16(7253), + 1025: uint16(10015), + 1026: uint16(12598), + 1027: uint16(4130), + 1028: uint16(8240), + 1029: uint16(5980), + 1030: uint16(5924), + 1031: uint16(5446), + 1032: uint16(12602), + 1033: uint16(8704), + 1034: uint16(8541), + 1035: uint16(5386), + 1036: uint16(7427), + 1037: uint16(12603), + 1038: uint16(12601), + 1039: uint16(4387), + 1040: uint16(8517), + 1041: uint16(6935), + 1042: uint16(6698), + 1043: uint16(4101), + 1044: uint16(4687), + 1045: uint16(6213), + 1046: uint16(6697), + 1047: uint16(12604), + 1048: uint16(12605), + 1049: uint16(5160), + 1050: uint16(4645), + 1051: uint16(6214), + 1052: uint16(5159), + 1053: uint16(9022), + 1054: uint16(4100), + 1055: uint16(9488), + 1056: uint16(11037), + 1057: uint16(6144), + 1058: uint16(11352), + 1059: uint16(9254), + 1060: uint16(5981), + 1061: uint16(5646), + 1062: uint16(12614), + 1063: uint16(5442), + 1064: uint16(10793), + 1065: uint16(10044), + 1066: uint16(12613), + 1067: uint16(4925), + 1068: uint16(12608), + 1069: uint16(12609), + 1070: uint16(12611), + 1071: uint16(12612), + 1072: uint16(5178), + 1073: uint16(7744), + 1074: uint16(10508), + 1075: uint16(12610), + 1076: uint16(12606), + 1077: uint16(5954), + 1078: uint16(12607), + 1079: uint16(11779), + 1080: uint16(10577), + 1081: uint16(9031), + 1082: uint16(5953), + 1083: uint16(6223), + 1084: uint16(12615), + 1085: uint16(9532), + 1086: uint16(12619), + 1087: uint16(7005), + 1088: uint16(6997), + 1089: uint16(12622), + 1090: uint16(12620), + 1091: uint16(11010), + 1092: uint16(12617), + 1093: uint16(12626), + 1094: uint16(12621), + 1095: uint16(12624), + 1096: uint16(5925), + 1097: uint16(11038), + 1098: uint16(12625), + 1099: uint16(12627), + 1100: uint16(12629), + 1101: uint16(6479), + 1102: uint16(11809), + 1103: uint16(12618), + 1104: uint16(12616), + 1105: uint16(12628), + 1106: uint16(12623), + 1107: uint16(12631), + 1108: uint16(12802), + 1109: uint16(12633), + 1110: uint16(12637), + 1111: uint16(12800), + 1112: uint16(12634), + 1113: uint16(12829), + 1114: uint16(6472), + 1115: uint16(4624), + 1116: uint16(12632), + 1117: uint16(12804), + 1118: uint16(3925), + 1119: uint16(12803), + 1120: uint16(3844), + 1121: uint16(10281), + 1122: uint16(12801), + 1123: uint16(12635), + 1124: uint16(12630), + 1125: uint16(12636), + 1126: uint16(6439), + 1127: uint16(12805), + 1128: uint16(3926), + 1129: uint16(12814), + 1130: uint16(12806), + 1131: uint16(12807), + 1132: uint16(7428), + 1133: uint16(10824), + 1134: uint16(12812), + 1135: uint16(12811), + 1136: uint16(9230), + 1137: uint16(12813), + 1138: uint16(12810), + 1139: uint16(4115), + 1140: uint16(6421), + 1141: uint16(7695), + 1142: uint16(12808), + 1143: uint16(9281), + 1144: uint16(12809), + 1145: uint16(3841), + 1146: uint16(12819), + 1147: uint16(11266), + 1148: uint16(7430), + 1149: uint16(12825), + 1150: uint16(12824), + 1151: uint16(12815), + 1152: uint16(8482), + 1153: uint16(12816), + 1154: uint16(8526), + 1155: uint16(12821), + 1156: uint16(7429), + 1157: uint16(12818), + 1158: uint16(11075), + 1159: uint16(5659), + 1160: uint16(12822), + 1161: uint16(12823), + 1162: uint16(12820), + 1163: uint16(12826), + 1164: uint16(12817), + 1165: uint16(12832), + 1166: uint16(12837), + 1167: uint16(12833), + 1168: uint16(12828), + 1169: uint16(12838), + 1170: uint16(8208), + 1171: uint16(12840), + 1172: uint16(6145), + 1173: uint16(12830), + 1174: uint16(8796), + 1175: uint16(12834), + 1176: uint16(12827), + 1177: uint16(4876), + 1178: uint16(4941), + 1179: uint16(4676), + 1180: uint16(12835), + 1181: uint16(12831), + 1182: uint16(5717), + 1183: uint16(12841), + 1184: uint16(12839), + 1185: uint16(8242), + 1186: uint16(5161), + 1187: uint16(5387), + 1188: uint16(12836), + 1189: uint16(5459), + 1190: uint16(4131), + 1191: uint16(12845), + 1192: uint16(12843), + 1193: uint16(13062), + 1194: uint16(12848), + 1195: uint16(12842), + 1196: uint16(12846), + 1197: uint16(12844), + 1198: uint16(6699), + 1199: uint16(12847), + 1200: uint16(12850), + 1201: uint16(12855), + 1202: uint16(12853), + 1203: uint16(12852), + 1204: uint16(8721), + 1205: uint16(4388), + 1206: uint16(12849), + 1207: uint16(12851), + 1208: uint16(7431), + 1209: uint16(4114), + 1210: uint16(12854), + 1211: uint16(4413), + 1212: uint16(12865), + 1213: uint16(7515), + 1214: uint16(12861), + 1215: uint16(12859), + 1216: uint16(12860), + 1217: uint16(12862), + 1218: uint16(4124), + 1219: uint16(8216), + 1220: uint16(12856), + 1221: uint16(12857), + 1222: uint16(4697), + 1223: uint16(12864), + 1224: uint16(4942), + 1225: uint16(12867), + 1226: uint16(12863), + 1227: uint16(12866), + 1228: uint16(10509), + 1229: uint16(9524), + 1230: uint16(10007), + 1231: uint16(12869), + 1232: uint16(12868), + 1233: uint16(4644), + 1234: uint16(12870), + 1235: uint16(12873), + 1236: uint16(12872), + 1237: uint16(12871), + 1238: uint16(9752), + 1239: uint16(12874), + 1240: uint16(12875), + 1241: uint16(12877), + 1242: uint16(12876), + 1243: uint16(12879), + 1244: uint16(12882), + 1245: uint16(12880), + 1246: uint16(12878), + 1247: uint16(12881), + 1248: uint16(12883), + 1249: uint16(12884), + 1250: uint16(12885), + 1251: uint16(12886), + 1252: uint16(12887), + 1253: uint16(12324), + 1254: uint16(7003), + 1255: uint16(6700), + 1256: uint16(4434), + 1257: uint16(3927), + 1258: uint16(8739), + 1259: uint16(12888), + 1260: uint16(6403), + 1261: uint16(3886), + 1262: uint16(7741), + 1263: uint16(12889), + 1264: uint16(5926), + 1265: uint16(6224), + 1266: uint16(12891), + 1267: uint16(12890), + 1268: uint16(10559), + 1269: uint16(12892), + 1270: uint16(13056), + 1271: uint16(12893), + 1272: uint16(13057), + 1273: uint16(13058), + 1274: uint16(5718), + 1275: uint16(4159), + 1276: uint16(13059), + 1277: uint16(13061), + 1278: uint16(13060), + 1279: uint16(13063), + 1280: uint16(9273), + 1281: uint16(13064), + 1282: uint16(3860), + 1283: uint16(6462), + 1284: uint16(5660), + 1285: uint16(8750), + 1286: uint16(13065), + 1287: uint16(13066), + 1288: uint16(13068), + 1289: uint16(13069), + 1290: uint16(6467), + 1291: uint16(5424), + 1292: uint16(10774), + 1293: uint16(13067), + 1294: uint16(13070), + 1295: uint16(6432), + 1296: uint16(6146), + 1297: uint16(13074), + 1298: uint16(6404), + 1299: uint16(8722), + 1300: uint16(13071), + 1301: uint16(9017), + 1302: uint16(13075), + 1303: uint16(7745), + 1304: uint16(13073), + 1305: uint16(13076), + 1306: uint16(5662), + 1307: uint16(13077), + 1308: uint16(13078), + 1309: uint16(6147), + 1310: uint16(4639), + 1311: uint16(13080), + 1312: uint16(13081), + 1313: uint16(13082), + 1314: uint16(13079), + 1315: uint16(13072), + 1316: uint16(13083), + 1317: uint16(13084), + 1318: uint16(10819), + 1319: uint16(7498), + 1320: uint16(13086), + 1321: uint16(13087), + 1322: uint16(13085), + 1323: uint16(13089), + 1324: uint16(9751), + 1325: uint16(3911), + 1326: uint16(10293), + 1327: uint16(13090), + 1328: uint16(7516), + 1329: uint16(6936), + 1330: uint16(9788), + 1331: uint16(4943), + 1332: uint16(6474), + 1333: uint16(10808), + 1334: uint16(9489), + 1335: uint16(5719), + 1336: uint16(8494), + 1337: uint16(13088), + 1338: uint16(13091), + 1339: uint16(8483), + 1340: uint16(13092), + 1341: uint16(13093), + 1342: uint16(13095), + 1343: uint16(9032), + 1344: uint16(4877), + 1345: uint16(21248), + 1346: uint16(4160), + 1347: uint16(10578), + 1348: uint16(7499), + 1349: uint16(9255), + 1350: uint16(6469), + 1351: uint16(13101), + 1352: uint16(10524), + 1353: uint16(11580), + 1354: uint16(4435), + 1355: uint16(13097), + 1356: uint16(8217), + 1357: uint16(13100), + 1358: uint16(9282), + 1359: uint16(9256), + 1360: uint16(9283), + 1361: uint16(10008), + 1362: uint16(9004), + 1363: uint16(6440), + 1364: uint16(13096), + 1365: uint16(4181), + 1366: uint16(9237), + 1367: uint16(13098), + 1368: uint16(13094), + 1369: uint16(7727), + 1370: uint16(13102), + 1371: uint16(7213), + 1372: uint16(5388), + 1373: uint16(13103), + 1374: uint16(10567), + 1375: uint16(8284), + 1376: uint16(8997), + 1377: uint16(13105), + 1378: uint16(10798), + 1379: uint16(13106), + 1380: uint16(13111), + 1381: uint16(10510), + 1382: uint16(13110), + 1383: uint16(13104), + 1384: uint16(13107), + 1385: uint16(13109), + 1386: uint16(6405), + 1387: uint16(10536), + 1388: uint16(13112), + 1389: uint16(8740), + 1390: uint16(4436), + 1391: uint16(7500), + 1392: uint16(13114), + 1393: uint16(13113), + 1394: uint16(6215), + 1395: uint16(13115), + 1396: uint16(13117), + 1397: uint16(13116), + 1398: uint16(13119), + 1399: uint16(13108), + 1400: uint16(13121), + 1401: uint16(13120), + 1402: uint16(13118), + 1403: uint16(6701), + 1404: uint16(7728), + 1405: uint16(8243), + 1406: uint16(13122), + 1407: uint16(7963), + 1408: uint16(3916), + 1409: uint16(9795), + 1410: uint16(9018), + 1411: uint16(13124), + 1412: uint16(13123), + 1413: uint16(13125), + 1414: uint16(13126), + 1415: uint16(13127), + 1416: uint16(13128), + 1417: uint16(10544), + 1418: uint16(13129), + 1419: uint16(4389), + 1420: uint16(13130), + 1421: uint16(11291), + 1422: uint16(4623), + 1423: uint16(12584), + 1424: uint16(7207), + 1425: uint16(8478), + 1426: uint16(13131), + 1427: uint16(11082), + 1428: uint16(11027), + 1429: uint16(13133), + 1430: uint16(8518), + 1431: uint16(9238), + 1432: uint16(8479), + 1433: uint16(10294), + 1434: uint16(13134), + 1435: uint16(13135), + 1436: uint16(4186), + 1437: uint16(6937), + 1438: uint16(13136), + 1439: uint16(3887), + 1440: uint16(13137), + 1441: uint16(13138), + 1442: uint16(4161), + 1443: uint16(4944), + 1444: uint16(9535), + 1445: uint16(10579), + 1446: uint16(13142), + 1447: uint16(8244), + 1448: uint16(13141), + 1449: uint16(5663), + 1450: uint16(10810), + 1451: uint16(13140), + 1452: uint16(9284), + 1453: uint16(13144), + 1454: uint16(13143), + 1455: uint16(13146), + 1456: uint16(13145), + 1457: uint16(4187), + 1458: uint16(13147), + 1459: uint16(7432), + 1460: uint16(13149), + 1461: uint16(8708), + 1462: uint16(13148), + 1463: uint16(10514), + 1464: uint16(7254), + 1465: uint16(9274), + 1466: uint16(13312), + 1467: uint16(6148), + 1468: uint16(13313), + 1469: uint16(9728), + 1470: uint16(10045), + 1471: uint16(11056), + 1472: uint16(9732), + 1473: uint16(13322), + 1474: uint16(5143), + 1475: uint16(11300), + 1476: uint16(11022), + 1477: uint16(13579), + 1478: uint16(13314), + 1479: uint16(13317), + 1480: uint16(8484), + 1481: uint16(10775), + 1482: uint16(9257), + 1483: uint16(13318), + 1484: uint16(10820), + 1485: uint16(6441), + 1486: uint16(7433), + 1487: uint16(13319), + 1488: uint16(6703), + 1489: uint16(6702), + 1490: uint16(3864), + 1491: uint16(5927), + 1492: uint16(7946), + 1493: uint16(3888), + 1494: uint16(13323), + 1495: uint16(13324), + 1496: uint16(13321), + 1497: uint16(4119), + 1498: uint16(4878), + 1499: uint16(13320), + 1500: uint16(11044), + 1501: uint16(10256), + 1502: uint16(3847), + 1503: uint16(3928), + 1504: uint16(6704), + 1505: uint16(3889), + 1506: uint16(3842), + 1507: uint16(13329), + 1508: uint16(13327), + 1509: uint16(11035), + 1510: uint16(13330), + 1511: uint16(13328), + 1512: uint16(13326), + 1513: uint16(7696), + 1514: uint16(13325), + 1515: uint16(10553), + 1516: uint16(5955), + 1517: uint16(13334), + 1518: uint16(13335), + 1519: uint16(7434), + 1520: uint16(13331), + 1521: uint16(11787), + 1522: uint16(9771), + 1523: uint16(13333), + 1524: uint16(6406), + 1525: uint16(13336), + 1526: uint16(10295), + 1527: uint16(13337), + 1528: uint16(13332), + 1529: uint16(11034), + 1530: uint16(9789), + 1531: uint16(13338), + 1532: uint16(10257), + 1533: uint16(13339), + 1534: uint16(13343), + 1535: uint16(13340), + 1536: uint16(4390), + 1537: uint16(13342), + 1538: uint16(6938), + 1539: uint16(13341), + 1540: uint16(5720), + 1541: uint16(13355), + 1542: uint16(13348), + 1543: uint16(13345), + 1544: uint16(8771), + 1545: uint16(13344), + 1546: uint16(13346), + 1547: uint16(13347), + 1548: uint16(13349), + 1549: uint16(13350), + 1550: uint16(4945), + 1551: uint16(13352), + 1552: uint16(13351), + 1553: uint16(13353), + 1554: uint16(7501), + 1555: uint16(13356), + 1556: uint16(9019), + 1557: uint16(4132), + 1558: uint16(13354), + 1559: uint16(13357), + 1560: uint16(13358), + 1561: uint16(13361), + 1562: uint16(13359), + 1563: uint16(13360), + 1564: uint16(6705), + 1565: uint16(13362), + 1566: uint16(6149), + 1567: uint16(13363), + 1568: uint16(6745), + 1569: uint16(8471), + 1570: uint16(13364), + 1571: uint16(13365), + 1572: uint16(6713), + 1573: uint16(6150), + 1574: uint16(11057), + 1575: uint16(5127), + 1576: uint16(5928), + 1577: uint16(13366), + 1578: uint16(4663), + 1579: uint16(13367), + 1580: uint16(8472), + 1581: uint16(13368), + 1582: uint16(13570), + 1583: uint16(13369), + 1584: uint16(13370), + 1585: uint16(13371), + 1586: uint16(13373), + 1587: uint16(13374), + 1588: uint16(13375), + 1589: uint16(8527), + 1590: uint16(4102), + 1591: uint16(6984), + 1592: uint16(3873), + 1593: uint16(8246), + 1594: uint16(4879), + 1595: uint16(6932), + 1596: uint16(6151), + 1597: uint16(9285), + 1598: uint16(7168), + 1599: uint16(4880), + 1600: uint16(8775), + 1601: uint16(9033), + 1602: uint16(3863), + 1603: uint16(5144), + 1604: uint16(10580), + 1605: uint16(6945), + 1606: uint16(5169), + 1607: uint16(8010), + 1608: uint16(6939), + 1609: uint16(11271), + 1610: uint16(13376), + 1611: uint16(5179), + 1612: uint16(6442), + 1613: uint16(4625), + 1614: uint16(4162), + 1615: uint16(7435), + 1616: uint16(4391), + 1617: uint16(13377), + 1618: uint16(11301), + 1619: uint16(7208), + 1620: uint16(6979), + 1621: uint16(13378), + 1622: uint16(4946), + 1623: uint16(9521), + 1624: uint16(11016), + 1625: uint16(13379), + 1626: uint16(13380), + 1627: uint16(10296), + 1628: uint16(13382), + 1629: uint16(4871), + 1630: uint16(5462), + 1631: uint16(13381), + 1632: uint16(4881), + 1633: uint16(7697), + 1634: uint16(13386), + 1635: uint16(6656), + 1636: uint16(4392), + 1637: uint16(13385), + 1638: uint16(13383), + 1639: uint16(13387), + 1640: uint16(13384), + 1641: uint16(9738), + 1642: uint16(15148), + 1643: uint16(7698), + 1644: uint16(13388), + 1645: uint16(11551), + 1646: uint16(13389), + 1647: uint16(13391), + 1648: uint16(8797), + 1649: uint16(13390), + 1650: uint16(7938), + 1651: uint16(6746), + 1652: uint16(8495), + 1653: uint16(6998), + 1654: uint16(10324), + 1655: uint16(8011), + 1656: uint16(6956), + 1657: uint16(13392), + 1658: uint16(7436), + 1659: uint16(13393), + 1660: uint16(13394), + 1661: uint16(3890), + 1662: uint16(8473), + 1663: uint16(7729), + 1664: uint16(13395), + 1665: uint16(9490), + 1666: uint16(7437), + 1667: uint16(7438), + 1668: uint16(13396), + 1669: uint16(8012), + 1670: uint16(7439), + 1671: uint16(13397), + 1672: uint16(13398), + 1673: uint16(11071), + 1674: uint16(13399), + 1675: uint16(5413), + 1676: uint16(7169), + 1677: uint16(13400), + 1678: uint16(13401), + 1679: uint16(6971), + 1680: uint16(7691), + 1681: uint16(9555), + 1682: uint16(7731), + 1683: uint16(10071), + 1684: uint16(9729), + 1685: uint16(5416), + 1686: uint16(13402), + 1687: uint16(5198), + 1688: uint16(13403), + 1689: uint16(5469), + 1690: uint16(9518), + 1691: uint16(4367), + 1692: uint16(6706), + 1693: uint16(13404), + 1694: uint16(13569), + 1695: uint16(13568), + 1696: uint16(5468), + 1697: uint16(13405), + 1698: uint16(9239), + 1699: uint16(8463), + 1700: uint16(9258), + 1701: uint16(6951), + 1702: uint16(8247), + 1703: uint16(11353), + 1704: uint16(13571), + 1705: uint16(13572), + 1706: uint16(9525), + 1707: uint16(6674), + 1708: uint16(13574), + 1709: uint16(13575), + 1710: uint16(13576), + 1711: uint16(4947), + 1712: uint16(13577), + 1713: uint16(13578), + 1714: uint16(4363), + 1715: uint16(8218), + 1716: uint16(4931), + 1717: uint16(13580), + 1718: uint16(11015), + 1719: uint16(8497), + 1720: uint16(4664), + 1721: uint16(13582), + 1722: uint16(13584), + 1723: uint16(4926), + 1724: uint16(13581), + 1725: uint16(13583), + 1726: uint16(13586), + 1727: uint16(13585), + 1728: uint16(13587), + 1729: uint16(13588), + 1730: uint16(9500), + 1731: uint16(5389), + 1732: uint16(4420), + 1733: uint16(13589), + 1734: uint16(13594), + 1735: uint16(13592), + 1736: uint16(10582), + 1737: uint16(10581), + 1738: uint16(9286), + 1739: uint16(13591), + 1740: uint16(7219), + 1741: uint16(13590), + 1742: uint16(7761), + 1743: uint16(13595), + 1744: uint16(6473), + 1745: uint16(13601), + 1746: uint16(13602), + 1747: uint16(13596), + 1748: uint16(4626), + 1749: uint16(13597), + 1750: uint16(13606), + 1751: uint16(13605), + 1752: uint16(13604), + 1753: uint16(13600), + 1754: uint16(13599), + 1755: uint16(13603), + 1756: uint16(10583), + 1757: uint16(13610), + 1758: uint16(13607), + 1759: uint16(13609), + 1760: uint16(11345), + 1761: uint16(13608), + 1762: uint16(13598), + 1763: uint16(7762), + 1764: uint16(13611), + 1765: uint16(6422), + 1766: uint16(13612), + 1767: uint16(13613), + 1768: uint16(13616), + 1769: uint16(13615), + 1770: uint16(13614), + 1771: uint16(9287), + 1772: uint16(13593), + 1773: uint16(13622), + 1774: uint16(13618), + 1775: uint16(13617), + 1776: uint16(13619), + 1777: uint16(13620), + 1778: uint16(13623), + 1779: uint16(11589), + 1780: uint16(13624), + 1781: uint16(13621), + 1782: uint16(13625), + 1783: uint16(4927), + 1784: uint16(13626), + 1785: uint16(13628), + 1786: uint16(13627), + 1787: uint16(13629), + 1788: uint16(13630), + 1789: uint16(8013), + 1790: uint16(7170), + 1791: uint16(7235), + 1792: uint16(8258), + 1793: uint16(6152), + 1794: uint16(6423), + 1795: uint16(6153), + 1796: uint16(5199), + 1797: uint16(13631), + 1798: uint16(6424), + 1799: uint16(5929), + 1800: uint16(13632), + 1801: uint16(11013), + 1802: uint16(9762), + 1803: uint16(13633), + 1804: uint16(6154), + 1805: uint16(4875), + 1806: uint16(8710), + 1807: uint16(5425), + 1808: uint16(6707), + 1809: uint16(10298), + 1810: uint16(10016), + 1811: uint16(13634), + 1812: uint16(4948), + 1813: uint16(13637), + 1814: uint16(8960), + 1815: uint16(13636), + 1816: uint16(13635), + 1817: uint16(13638), + 1818: uint16(9034), + 1819: uint16(7746), + 1820: uint16(6708), + 1821: uint16(7977), + 1822: uint16(8498), + 1823: uint16(5121), + 1824: uint16(8961), + 1825: uint16(13639), + 1826: uint16(13640), + 1827: uint16(7502), + 1828: uint16(10776), + 1829: uint16(13643), + 1830: uint16(13642), + 1831: uint16(13641), + 1832: uint16(10332), + 1833: uint16(13650), + 1834: uint16(10809), + 1835: uint16(13644), + 1836: uint16(13646), + 1837: uint16(10826), + 1838: uint16(13645), + 1839: uint16(13647), + 1840: uint16(9991), + 1841: uint16(13648), + 1842: uint16(10525), + 1843: uint16(13649), + 1844: uint16(4882), + 1845: uint16(10526), + 1846: uint16(9742), + 1847: uint16(13651), + 1848: uint16(13652), + 1849: uint16(6155), + 1850: uint16(4883), + 1851: uint16(13653), + 1852: uint16(5911), + 1853: uint16(11299), + 1854: uint16(11272), + 1855: uint16(4949), + 1856: uint16(13655), + 1857: uint16(8962), + 1858: uint16(6156), + 1859: uint16(7440), + 1860: uint16(10046), + 1861: uint16(7441), + 1862: uint16(7255), + 1863: uint16(9035), + 1864: uint16(10584), + 1865: uint16(9240), + 1866: uint16(6157), + 1867: uint16(10299), + 1868: uint16(13656), + 1869: uint16(9272), + 1870: uint16(6433), + 1871: uint16(5930), + 1872: uint16(9036), + 1873: uint16(3874), + 1874: uint16(7245), + 1875: uint16(6158), + 1876: uint16(11302), + 1877: uint16(13657), + 1878: uint16(13658), + 1879: uint16(9776), + 1880: uint16(13659), + 1881: uint16(11606), + 1882: uint16(11788), + 1883: uint16(13661), + 1884: uint16(13660), + 1885: uint16(4646), + 1886: uint16(13824), + 1887: uint16(13827), + 1888: uint16(13828), + 1889: uint16(13826), + 1890: uint16(10271), + 1891: uint16(7442), + 1892: uint16(13830), + 1893: uint16(13829), + 1894: uint16(13825), + 1895: uint16(13831), + 1896: uint16(13832), + 1897: uint16(13833), + 1898: uint16(13836), + 1899: uint16(13834), + 1900: uint16(13835), + 1901: uint16(13837), + 1902: uint16(4163), + 1903: uint16(9037), + 1904: uint16(13838), + 1905: uint16(5721), + 1906: uint16(4437), + 1907: uint16(9749), + 1908: uint16(13839), + 1909: uint16(9562), + 1910: uint16(10554), + 1911: uint16(13840), + 1912: uint16(11789), + 1913: uint16(13841), + 1914: uint16(10527), + 1915: uint16(13844), + 1916: uint16(12032), + 1917: uint16(12048), + 1918: uint16(6927), + 1919: uint16(9556), + 1920: uint16(13845), + 1921: uint16(5180), + 1922: uint16(8963), + 1923: uint16(3929), + 1924: uint16(13846), + 1925: uint16(10501), + 1926: uint16(6159), + 1927: uint16(8751), + 1928: uint16(9038), + 1929: uint16(11086), + 1930: uint16(5912), + 1931: uint16(5931), + 1932: uint16(13847), + 1933: uint16(13848), + 1934: uint16(13854), + 1935: uint16(6980), + 1936: uint16(8964), + 1937: uint16(5390), + 1938: uint16(13849), + 1939: uint16(10250), + 1940: uint16(8741), + 1941: uint16(13850), + 1942: uint16(13851), + 1943: uint16(5391), + 1944: uint16(13852), + 1945: uint16(13853), + 1946: uint16(13855), + 1947: uint16(9301), + 1948: uint16(13856), + 1949: uint16(13857), + 1950: uint16(13858), + 1951: uint16(13843), + 1952: uint16(13842), + 1953: uint16(13859), + 1954: uint16(5664), + 1955: uint16(10246), + 1956: uint16(6443), + 1957: uint16(10262), + 1958: uint16(8965), + 1959: uint16(10282), + 1960: uint16(13860), + 1961: uint16(7443), + 1962: uint16(4133), + 1963: uint16(13861), + 1964: uint16(13862), + 1965: uint16(11089), + 1966: uint16(10047), + 1967: uint16(13865), + 1968: uint16(4188), + 1969: uint16(7947), + 1970: uint16(13864), + 1971: uint16(13863), + 1972: uint16(5665), + 1973: uint16(8499), + 1974: uint16(13869), + 1975: uint16(13867), + 1976: uint16(13866), + 1977: uint16(11526), + 1978: uint16(5956), + 1979: uint16(7256), + 1980: uint16(13868), + 1981: uint16(9259), + 1982: uint16(7197), + 1983: uint16(9503), + 1984: uint16(13872), + 1985: uint16(13871), + 1986: uint16(13870), + 1987: uint16(13873), + 1988: uint16(5957), + 1989: uint16(13874), + 1990: uint16(10331), + 1991: uint16(7226), + 1992: uint16(13875), + 1993: uint16(10072), + 1994: uint16(9504), + 1995: uint16(8966), + 1996: uint16(9231), + 1997: uint16(13876), + 1998: uint16(5130), + 1999: uint16(7699), + 2000: uint16(10251), + 2001: uint16(4950), + 2002: uint16(9733), + 2003: uint16(13877), + 2004: uint16(6709), + 2005: uint16(10777), + 2006: uint16(10778), + 2007: uint16(4189), + 2008: uint16(13882), + 2009: uint16(8776), + 2010: uint16(13879), + 2011: uint16(4438), + 2012: uint16(14092), + 2013: uint16(13881), + 2014: uint16(9743), + 2015: uint16(13880), + 2016: uint16(13878), + 2017: uint16(6233), + 2018: uint16(13884), + 2019: uint16(13890), + 2020: uint16(13896), + 2021: uint16(13888), + 2022: uint16(9275), + 2023: uint16(13893), + 2024: uint16(10300), + 2025: uint16(13887), + 2026: uint16(13892), + 2027: uint16(11590), + 2028: uint16(6710), + 2029: uint16(8500), + 2030: uint16(13885), + 2031: uint16(5181), + 2032: uint16(13895), + 2033: uint16(7948), + 2034: uint16(4164), + 2035: uint16(13889), + 2036: uint16(4439), + 2037: uint16(13894), + 2038: uint16(5392), + 2039: uint16(13891), + 2040: uint16(13897), + 2041: uint16(13899), + 2042: uint16(13909), + 2043: uint16(13907), + 2044: uint16(13904), + 2045: uint16(13903), + 2046: uint16(11607), + 2047: uint16(13905), + 2048: uint16(5393), + 2049: uint16(6160), + 2050: uint16(7257), + 2051: uint16(13912), + 2052: uint16(13898), + 2053: uint16(13902), + 2054: uint16(13886), + 2055: uint16(4441), + 2056: uint16(13906), + 2057: uint16(13908), + 2058: uint16(8752), + 2059: uint16(6407), + 2060: uint16(4375), + 2061: uint16(13900), + 2062: uint16(13911), + 2063: uint16(13910), + 2064: uint16(5394), + 2065: uint16(8456), + 2066: uint16(4677), + 2067: uint16(5666), + 2068: uint16(13901), + 2069: uint16(13913), + 2070: uint16(13916), + 2071: uint16(14080), + 2072: uint16(6940), + 2073: uint16(14086), + 2074: uint16(9039), + 2075: uint16(13914), + 2076: uint16(14084), + 2077: uint16(4440), + 2078: uint16(14082), + 2079: uint16(14083), + 2080: uint16(13917), + 2081: uint16(14081), + 2082: uint16(5958), + 2083: uint16(11273), + 2084: uint16(4884), + 2085: uint16(4152), + 2086: uint16(14085), + 2087: uint16(9753), + 2088: uint16(3852), + 2089: uint16(10048), + 2090: uint16(13883), + 2091: uint16(14091), + 2092: uint16(14095), + 2093: uint16(11076), + 2094: uint16(14088), + 2095: uint16(9288), + 2096: uint16(14093), + 2097: uint16(7503), + 2098: uint16(14094), + 2099: uint16(9526), + 2100: uint16(11814), + 2101: uint16(14090), + 2102: uint16(14096), + 2103: uint16(6234), + 2104: uint16(7978), + 2105: uint16(3891), + 2106: uint16(14089), + 2107: uint16(14087), + 2108: uint16(8249), + 2109: uint16(13915), + 2110: uint16(6675), + 2111: uint16(8485), + 2112: uint16(14108), + 2113: uint16(8250), + 2114: uint16(14103), + 2115: uint16(14100), + 2116: uint16(14101), + 2117: uint16(6981), + 2118: uint16(14104), + 2119: uint16(14107), + 2120: uint16(14102), + 2121: uint16(7172), + 2122: uint16(14105), + 2123: uint16(14099), + 2124: uint16(11099), + 2125: uint16(11098), + 2126: uint16(14109), + 2127: uint16(14110), + 2128: uint16(3892), + 2129: uint16(14098), + 2130: uint16(5457), + 2131: uint16(3845), + 2132: uint16(4885), + 2133: uint16(14106), + 2134: uint16(14114), + 2135: uint16(14113), + 2136: uint16(14118), + 2137: uint16(14119), + 2138: uint16(14117), + 2139: uint16(14120), + 2140: uint16(14112), + 2141: uint16(14116), + 2142: uint16(14121), + 2143: uint16(14122), + 2144: uint16(14111), + 2145: uint16(6747), + 2146: uint16(14115), + 2147: uint16(8501), + 2148: uint16(6161), + 2149: uint16(14097), + 2150: uint16(7700), + 2151: uint16(14135), + 2152: uint16(10568), + 2153: uint16(14125), + 2154: uint16(14126), + 2155: uint16(14127), + 2156: uint16(14134), + 2157: uint16(14133), + 2158: uint16(10844), + 2159: uint16(4886), + 2160: uint16(14131), + 2161: uint16(5668), + 2162: uint16(4627), + 2163: uint16(14128), + 2164: uint16(11543), + 2165: uint16(14130), + 2166: uint16(3893), + 2167: uint16(14132), + 2168: uint16(14123), + 2169: uint16(14129), + 2170: uint16(14136), + 2171: uint16(5667), + 2172: uint16(14124), + 2173: uint16(11324), + 2174: uint16(11274), + 2175: uint16(14139), + 2176: uint16(14143), + 2177: uint16(8285), + 2178: uint16(11608), + 2179: uint16(14144), + 2180: uint16(14141), + 2181: uint16(14138), + 2182: uint16(14137), + 2183: uint16(14142), + 2184: uint16(10511), + 2185: uint16(9491), + 2186: uint16(5669), + 2187: uint16(14145), + 2188: uint16(14140), + 2189: uint16(14146), + 2190: uint16(5722), + 2191: uint16(4368), + 2192: uint16(14154), + 2193: uint16(4887), + 2194: uint16(14152), + 2195: uint16(14153), + 2196: uint16(6408), + 2197: uint16(14151), + 2198: uint16(14149), + 2199: uint16(14148), + 2200: uint16(14155), + 2201: uint16(14147), + 2202: uint16(14157), + 2203: uint16(4442), + 2204: uint16(14159), + 2205: uint16(14158), + 2206: uint16(8967), + 2207: uint16(14162), + 2208: uint16(14160), + 2209: uint16(14150), + 2210: uint16(5723), + 2211: uint16(14161), + 2212: uint16(14165), + 2213: uint16(14164), + 2214: uint16(14166), + 2215: uint16(14163), + 2216: uint16(14167), + 2217: uint16(14168), + 2218: uint16(14169), + 2219: uint16(10569), + 2220: uint16(14171), + 2221: uint16(14170), + 2222: uint16(7198), + 2223: uint16(7949), + 2224: uint16(4421), + 2225: uint16(4443), + 2226: uint16(14172), + 2227: uint16(3870), + 2228: uint16(7979), + 2229: uint16(14173), + 2230: uint16(19234), + 2231: uint16(14336), + 2232: uint16(5696), + 2233: uint16(14337), + 2234: uint16(8014), + 2235: uint16(14338), + 2236: uint16(14339), + 2237: uint16(5145), + 2238: uint16(14340), + 2239: uint16(14341), + 2240: uint16(14342), + 2241: uint16(8502), + 2242: uint16(5932), + 2243: uint16(11072), + 2244: uint16(10779), + 2245: uint16(7241), + 2246: uint16(14343), + 2247: uint16(8015), + 2248: uint16(19740), + 2249: uint16(10049), + 2250: uint16(6985), + 2251: uint16(6444), + 2252: uint16(14344), + 2253: uint16(8486), + 2254: uint16(10502), + 2255: uint16(8528), + 2256: uint16(14347), + 2257: uint16(14345), + 2258: uint16(14348), + 2259: uint16(14346), + 2260: uint16(14349), + 2261: uint16(10512), + 2262: uint16(3862), + 2263: uint16(10301), + 2264: uint16(10050), + 2265: uint16(14350), + 2266: uint16(14353), + 2267: uint16(7444), + 2268: uint16(5146), + 2269: uint16(14351), + 2270: uint16(14358), + 2271: uint16(7445), + 2272: uint16(14352), + 2273: uint16(9763), + 2274: uint16(11325), + 2275: uint16(14354), + 2276: uint16(14355), + 2277: uint16(14359), + 2278: uint16(9289), + 2279: uint16(14356), + 2280: uint16(6162), + 2281: uint16(7997), + 2282: uint16(14373), + 2283: uint16(10003), + 2284: uint16(8529), + 2285: uint16(10051), + 2286: uint16(14604), + 2287: uint16(10585), + 2288: uint16(9040), + 2289: uint16(10836), + 2290: uint16(14362), + 2291: uint16(4352), + 2292: uint16(8777), + 2293: uint16(14371), + 2294: uint16(8723), + 2295: uint16(14365), + 2296: uint16(14372), + 2297: uint16(14367), + 2298: uint16(14374), + 2299: uint16(14370), + 2300: uint16(14369), + 2301: uint16(9806), + 2302: uint16(14363), + 2303: uint16(4444), + 2304: uint16(14361), + 2305: uint16(5200), + 2306: uint16(8530), + 2307: uint16(14357), + 2308: uint16(14360), + 2309: uint16(6163), + 2310: uint16(7994), + 2311: uint16(7446), + 2312: uint16(14368), + 2313: uint16(9777), + 2314: uint16(5201), + 2315: uint16(4647), + 2316: uint16(4678), + 2317: uint16(7680), + 2318: uint16(14376), + 2319: uint16(14381), + 2320: uint16(14377), + 2321: uint16(5724), + 2322: uint16(14382), + 2323: uint16(6657), + 2324: uint16(6216), + 2325: uint16(7173), + 2326: uint16(14364), + 2327: uint16(6748), + 2328: uint16(14379), + 2329: uint16(6711), + 2330: uint16(14380), + 2331: uint16(3875), + 2332: uint16(14375), + 2333: uint16(8968), + 2334: uint16(5202), + 2335: uint16(5395), + 2336: uint16(14378), + 2337: uint16(3846), + 2338: uint16(6434), + 2339: uint16(7701), + 2340: uint16(9041), + 2341: uint16(10035), + 2342: uint16(14384), + 2343: uint16(8253), + 2344: uint16(8457), + 2345: uint16(6666), + 2346: uint16(14385), + 2347: uint16(14387), + 2348: uint16(14383), + 2349: uint16(10560), + 2350: uint16(8988), + 2351: uint16(8251), + 2352: uint16(10586), + 2353: uint16(6957), + 2354: uint16(14399), + 2355: uint16(14398), + 2356: uint16(7767), + 2357: uint16(5725), + 2358: uint16(14392), + 2359: uint16(7448), + 2360: uint16(9543), + 2361: uint16(9744), + 2362: uint16(14390), + 2363: uint16(8252), + 2364: uint16(6999), + 2365: uint16(14395), + 2366: uint16(7447), + 2367: uint16(14389), + 2368: uint16(14394), + 2369: uint16(9778), + 2370: uint16(14388), + 2371: uint16(5632), + 2372: uint16(4668), + 2373: uint16(14396), + 2374: uint16(11530), + 2375: uint16(6445), + 2376: uint16(8724), + 2377: uint16(14393), + 2378: uint16(7995), + 2379: uint16(6164), + 2380: uint16(7747), + 2381: uint16(4165), + 2382: uint16(8219), + 2383: uint16(14391), + 2384: uint16(5156), + 2385: uint16(5670), + 2386: uint16(9006), + 2387: uint16(14397), + 2388: uint16(8254), + 2389: uint16(14400), + 2390: uint16(14402), + 2391: uint16(8470), + 2392: uint16(14408), + 2393: uint16(14403), + 2394: uint16(14405), + 2395: uint16(10272), + 2396: uint16(9042), + 2397: uint16(14406), + 2398: uint16(11275), + 2399: uint16(11303), + 2400: uint16(4888), + 2401: uint16(3853), + 2402: uint16(14404), + 2403: uint16(14401), + 2404: uint16(4951), + 2405: uint16(4166), + 2406: uint16(14407), + 2407: uint16(11304), + 2408: uint16(14411), + 2409: uint16(8474), + 2410: uint16(14418), + 2411: uint16(14412), + 2412: uint16(14409), + 2413: uint16(14416), + 2414: uint16(14386), + 2415: uint16(14413), + 2416: uint16(14417), + 2417: uint16(10017), + 2418: uint16(9290), + 2419: uint16(14410), + 2420: uint16(14414), + 2421: uint16(5671), + 2422: uint16(6480), + 2423: uint16(7996), + 2424: uint16(14422), + 2425: uint16(9221), + 2426: uint16(14419), + 2427: uint16(10815), + 2428: uint16(14420), + 2429: uint16(14421), + 2430: uint16(11053), + 2431: uint16(7937), + 2432: uint16(5697), + 2433: uint16(14428), + 2434: uint16(6676), + 2435: uint16(14425), + 2436: uint16(14424), + 2437: uint16(9745), + 2438: uint16(9492), + 2439: uint16(9232), + 2440: uint16(14426), + 2441: uint16(14427), + 2442: uint16(10318), + 2443: uint16(9764), + 2444: uint16(6658), + 2445: uint16(8016), + 2446: uint16(10799), + 2447: uint16(4648), + 2448: uint16(14596), + 2449: uint16(14429), + 2450: uint16(11305), + 2451: uint16(14598), + 2452: uint16(14594), + 2453: uint16(14595), + 2454: uint16(8255), + 2455: uint16(14593), + 2456: uint16(14366), + 2457: uint16(14597), + 2458: uint16(14592), + 2459: uint16(14602), + 2460: uint16(14603), + 2461: uint16(9222), + 2462: uint16(14605), + 2463: uint16(6659), + 2464: uint16(14600), + 2465: uint16(5147), + 2466: uint16(14606), + 2467: uint16(14599), + 2468: uint16(14610), + 2469: uint16(14609), + 2470: uint16(14608), + 2471: uint16(14611), + 2472: uint16(14613), + 2473: uint16(7504), + 2474: uint16(14612), + 2475: uint16(14616), + 2476: uint16(14614), + 2477: uint16(14615), + 2478: uint16(14415), + 2479: uint16(14618), + 2480: uint16(14617), + 2481: uint16(14423), + 2482: uint16(14619), + 2483: uint16(14607), + 2484: uint16(6712), + 2485: uint16(14620), + 2486: uint16(14621), + 2487: uint16(14623), + 2488: uint16(14622), + 2489: uint16(14624), + 2490: uint16(4445), + 2491: uint16(6165), + 2492: uint16(10587), + 2493: uint16(7950), + 2494: uint16(5933), + 2495: uint16(14626), + 2496: uint16(14629), + 2497: uint16(10289), + 2498: uint16(5182), + 2499: uint16(14628), + 2500: uint16(14627), + 2501: uint16(9779), + 2502: uint16(14630), + 2503: uint16(5396), + 2504: uint16(14632), + 2505: uint16(14631), + 2506: uint16(4889), + 2507: uint16(6677), + 2508: uint16(9527), + 2509: uint16(5672), + 2510: uint16(7763), + 2511: uint16(14633), + 2512: uint16(7951), + 2513: uint16(9223), + 2514: uint16(10302), + 2515: uint16(14634), + 2516: uint16(14635), + 2517: uint16(14636), + 2518: uint16(10519), + 2519: uint16(13372), + 2520: uint16(7973), + 2521: uint16(10283), + 2522: uint16(6455), + 2523: uint16(10052), + 2524: uint16(10018), + 2525: uint16(9260), + 2526: uint16(11552), + 2527: uint16(14638), + 2528: uint16(6959), + 2529: uint16(14639), + 2530: uint16(3861), + 2531: uint16(5427), + 2532: uint16(7980), + 2533: uint16(10303), + 2534: uint16(14640), + 2535: uint16(6689), + 2536: uint16(8742), + 2537: uint16(6714), + 2538: uint16(7702), + 2539: uint16(14641), + 2540: uint16(10588), + 2541: uint16(4182), + 2542: uint16(6715), + 2543: uint16(14644), + 2544: uint16(14642), + 2545: uint16(14645), + 2546: uint16(11544), + 2547: uint16(14643), + 2548: uint16(8026), + 2549: uint16(14646), + 2550: uint16(8465), + 2551: uint16(14647), + 2552: uint16(4953), + 2553: uint16(14649), + 2554: uint16(14648), + 2555: uint16(14650), + 2556: uint16(14651), + 2557: uint16(4954), + 2558: uint16(9563), + 2559: uint16(8725), + 2560: uint16(5195), + 2561: uint16(6716), + 2562: uint16(8256), + 2563: uint16(7227), + 2564: uint16(3855), + 2565: uint16(14652), + 2566: uint16(4353), + 2567: uint16(14656), + 2568: uint16(6166), + 2569: uint16(14655), + 2570: uint16(6410), + 2571: uint16(7449), + 2572: uint16(14654), + 2573: uint16(7450), + 2574: uint16(11039), + 2575: uint16(6409), + 2576: uint16(3894), + 2577: uint16(7981), + 2578: uint16(14661), + 2579: uint16(7952), + 2580: uint16(4134), + 2581: uint16(7220), + 2582: uint16(10821), + 2583: uint16(6481), + 2584: uint16(7451), + 2585: uint16(7942), + 2586: uint16(14660), + 2587: uint16(14658), + 2588: uint16(14659), + 2589: uint16(8778), + 2590: uint16(14853), + 2591: uint16(14665), + 2592: uint16(6749), + 2593: uint16(6167), + 2594: uint16(14663), + 2595: uint16(14664), + 2596: uint16(7703), + 2597: uint16(14662), + 2598: uint16(6670), + 2599: uint16(14667), + 2600: uint16(14666), + 2601: uint16(14671), + 2602: uint16(14672), + 2603: uint16(14668), + 2604: uint16(4609), + 2605: uint16(14669), + 2606: uint16(14670), + 2607: uint16(10036), + 2608: uint16(10304), + 2609: uint16(5673), + 2610: uint16(14673), + 2611: uint16(7953), + 2612: uint16(7452), + 2613: uint16(8753), + 2614: uint16(5414), + 2615: uint16(14674), + 2616: uint16(14678), + 2617: uint16(4394), + 2618: uint16(14675), + 2619: uint16(14677), + 2620: uint16(14676), + 2621: uint16(7242), + 2622: uint16(8743), + 2623: uint16(3876), + 2624: uint16(14679), + 2625: uint16(14680), + 2626: uint16(8969), + 2627: uint16(11600), + 2628: uint16(6690), + 2629: uint16(10570), + 2630: uint16(10780), + 2631: uint16(14849), + 2632: uint16(14682), + 2633: uint16(14685), + 2634: uint16(14684), + 2635: uint16(14681), + 2636: uint16(14848), + 2637: uint16(9533), + 2638: uint16(14683), + 2639: uint16(14850), + 2640: uint16(7243), + 2641: uint16(14851), + 2642: uint16(11306), + 2643: uint16(9815), + 2644: uint16(14852), + 2645: uint16(14854), + 2646: uint16(14855), + 2647: uint16(14856), + 2648: uint16(5417), + 2649: uint16(4135), + 2650: uint16(6168), + 2651: uint16(14857), + 2652: uint16(14858), + 2653: uint16(7248), + 2654: uint16(8257), + 2655: uint16(12599), + 2656: uint16(8221), + 2657: uint16(8220), + 2658: uint16(8503), + 2659: uint16(6438), + 2660: uint16(12113), + 2661: uint16(5709), + 2662: uint16(11276), + 2663: uint16(10589), + 2664: uint16(10333), + 2665: uint16(14859), + 2666: uint16(6482), + 2667: uint16(8990), + 2668: uint16(14860), + 2669: uint16(11790), + 2670: uint16(10781), + 2671: uint16(8970), + 2672: uint16(14861), + 2673: uint16(4955), + 2674: uint16(14862), + 2675: uint16(14863), + 2676: uint16(11065), + 2677: uint16(11011), + 2678: uint16(10837), + 2679: uint16(10811), + 2680: uint16(6660), + 2681: uint16(14865), + 2682: uint16(6986), + 2683: uint16(10800), + 2684: uint16(14867), + 2685: uint16(14870), + 2686: uint16(14869), + 2687: uint16(4952), + 2688: uint16(5183), + 2689: uint16(14866), + 2690: uint16(14868), + 2691: uint16(14871), + 2692: uint16(7768), + 2693: uint16(11354), + 2694: uint16(3880), + 2695: uint16(6463), + 2696: uint16(8475), + 2697: uint16(6972), + 2698: uint16(7506), + 2699: uint16(14874), + 2700: uint16(9261), + 2701: uint16(14872), + 2702: uint16(8458), + 2703: uint16(14873), + 2704: uint16(7505), + 2705: uint16(11068), + 2706: uint16(14875), + 2707: uint16(14876), + 2708: uint16(11335), + 2709: uint16(14881), + 2710: uint16(6169), + 2711: uint16(9780), + 2712: uint16(14878), + 2713: uint16(9291), + 2714: uint16(14653), + 2715: uint16(14657), + 2716: uint16(5166), + 2717: uint16(9766), + 2718: uint16(14880), + 2719: uint16(7453), + 2720: uint16(10019), + 2721: uint16(14886), + 2722: uint16(10073), + 2723: uint16(14877), + 2724: uint16(14883), + 2725: uint16(14882), + 2726: uint16(7982), + 2727: uint16(10828), + 2728: uint16(11570), + 2729: uint16(10822), + 2730: uint16(4395), + 2731: uint16(6717), + 2732: uint16(11815), + 2733: uint16(14885), + 2734: uint16(7764), + 2735: uint16(14884), + 2736: uint16(14879), + 2737: uint16(5934), + 2738: uint16(14891), + 2739: uint16(14889), + 2740: uint16(4396), + 2741: uint16(14887), + 2742: uint16(14893), + 2743: uint16(14899), + 2744: uint16(8487), + 2745: uint16(10528), + 2746: uint16(14901), + 2747: uint16(10241), + 2748: uint16(14900), + 2749: uint16(9807), + 2750: uint16(10782), + 2751: uint16(4890), + 2752: uint16(8022), + 2753: uint16(7199), + 2754: uint16(9010), + 2755: uint16(11277), + 2756: uint16(14896), + 2757: uint16(14895), + 2758: uint16(14897), + 2759: uint16(14894), + 2760: uint16(14902), + 2761: uint16(14892), + 2762: uint16(14890), + 2763: uint16(14898), + 2764: uint16(14888), + 2765: uint16(8779), + 2766: uint16(11095), + 2767: uint16(6949), + 2768: uint16(6483), + 2769: uint16(6425), + 2770: uint16(10830), + 2771: uint16(4640), + 2772: uint16(9005), + 2773: uint16(9513), + 2774: uint16(4136), + 2775: uint16(8017), + 2776: uint16(7955), + 2777: uint16(5641), + 2778: uint16(14904), + 2779: uint16(6170), + 2780: uint16(4699), + 2781: uint16(14906), + 2782: uint16(4691), + 2783: uint16(14912), + 2784: uint16(14909), + 2785: uint16(8018), + 2786: uint16(4650), + 2787: uint16(6411), + 2788: uint16(4649), + 2789: uint16(6446), + 2790: uint16(14907), + 2791: uint16(5700), + 2792: uint16(5674), + 2793: uint16(9292), + 2794: uint16(14905), + 2795: uint16(3877), + 2796: uint16(14908), + 2797: uint16(14910), + 2798: uint16(5420), + 2799: uint16(5643), + 2800: uint16(4891), + 2801: uint16(5162), + 2802: uint16(14913), + 2803: uint16(6488), + 2804: uint16(10832), + 2805: uint16(6678), + 2806: uint16(14914), + 2807: uint16(10255), + 2808: uint16(14926), + 2809: uint16(4370), + 2810: uint16(14915), + 2811: uint16(14932), + 2812: uint16(14916), + 2813: uint16(11553), + 2814: uint16(14923), + 2815: uint16(9790), + 2816: uint16(14931), + 2817: uint16(14918), + 2818: uint16(3859), + 2819: uint16(14920), + 2820: uint16(6171), + 2821: uint16(14922), + 2822: uint16(14921), + 2823: uint16(14917), + 2824: uint16(14928), + 2825: uint16(7454), + 2826: uint16(13132), + 2827: uint16(5959), + 2828: uint16(11355), + 2829: uint16(14919), + 2830: uint16(9043), + 2831: uint16(4610), + 2832: uint16(6412), + 2833: uint16(14911), + 2834: uint16(14927), + 2835: uint16(4672), + 2836: uint16(14925), + 2837: uint16(14929), + 2838: uint16(9293), + 2839: uint16(4957), + 2840: uint16(15121), + 2841: uint16(11048), + 2842: uint16(14934), + 2843: uint16(4956), + 2844: uint16(14941), + 2845: uint16(10783), + 2846: uint16(15104), + 2847: uint16(15106), + 2848: uint16(15110), + 2849: uint16(14936), + 2850: uint16(8713), + 2851: uint16(9294), + 2852: uint16(15114), + 2853: uint16(14939), + 2854: uint16(15111), + 2855: uint16(15105), + 2856: uint16(7704), + 2857: uint16(15115), + 2858: uint16(7954), + 2859: uint16(15113), + 2860: uint16(4892), + 2861: uint16(11823), + 2862: uint16(14933), + 2863: uint16(15109), + 2864: uint16(3895), + 2865: uint16(14935), + 2866: uint16(11033), + 2867: uint16(14940), + 2868: uint16(7681), + 2869: uint16(8998), + 2870: uint16(14930), + 2871: uint16(15108), + 2872: uint16(7769), + 2873: uint16(15118), + 2874: uint16(4688), + 2875: uint16(5888), + 2876: uint16(15120), + 2877: uint16(14937), + 2878: uint16(15119), + 2879: uint16(15112), + 2880: uint16(14938), + 2881: uint16(15116), + 2882: uint16(15117), + 2883: uint16(15134), + 2884: uint16(9517), + 2885: uint16(15107), + 2886: uint16(15130), + 2887: uint16(15132), + 2888: uint16(9015), + 2889: uint16(11307), + 2890: uint16(10325), + 2891: uint16(15127), + 2892: uint16(8489), + 2893: uint16(15133), + 2894: uint16(8222), + 2895: uint16(15124), + 2896: uint16(15137), + 2897: uint16(15136), + 2898: uint16(9550), + 2899: uint16(15135), + 2900: uint16(9545), + 2901: uint16(15139), + 2902: uint16(15126), + 2903: uint16(5415), + 2904: uint16(15129), + 2905: uint16(7228), + 2906: uint16(9791), + 2907: uint16(15131), + 2908: uint16(5418), + 2909: uint16(15123), + 2910: uint16(15125), + 2911: uint16(15122), + 2912: uint16(11791), + 2913: uint16(4665), + 2914: uint16(15128), + 2915: uint16(15138), + 2916: uint16(4628), + 2917: uint16(6470), + 2918: uint16(4156), + 2919: uint16(15155), + 2920: uint16(11792), + 2921: uint16(15158), + 2922: uint16(7705), + 2923: uint16(15157), + 2924: uint16(15156), + 2925: uint16(15153), + 2926: uint16(15141), + 2927: uint16(15170), + 2928: uint16(15140), + 2929: uint16(15159), + 2930: uint16(15151), + 2931: uint16(15146), + 2932: uint16(15143), + 2933: uint16(15144), + 2934: uint16(15152), + 2935: uint16(21249), + 2936: uint16(15149), + 2937: uint16(6172), + 2938: uint16(8999), + 2939: uint16(8259), + 2940: uint16(15147), + 2941: uint16(15142), + 2942: uint16(15145), + 2943: uint16(11308), + 2944: uint16(10825), + 2945: uint16(15150), + 2946: uint16(15160), + 2947: uint16(15168), + 2948: uint16(15161), + 2949: uint16(15174), + 2950: uint16(15172), + 2951: uint16(15167), + 2952: uint16(15166), + 2953: uint16(9007), + 2954: uint16(8260), + 2955: uint16(15164), + 2956: uint16(15162), + 2957: uint16(15169), + 2958: uint16(15175), + 2959: uint16(10068), + 2960: uint16(15181), + 2961: uint16(15176), + 2962: uint16(15179), + 2963: uint16(15173), + 2964: uint16(8787), + 2965: uint16(10263), + 2966: uint16(15163), + 2967: uint16(15171), + 2968: uint16(7455), + 2969: uint16(11054), + 2970: uint16(15191), + 2971: uint16(15178), + 2972: uint16(5889), + 2973: uint16(4354), + 2974: uint16(4670), + 2975: uint16(15154), + 2976: uint16(7456), + 2977: uint16(15183), + 2978: uint16(15190), + 2979: uint16(7000), + 2980: uint16(4689), + 2981: uint16(8717), + 2982: uint16(15180), + 2983: uint16(15185), + 2984: uint16(15189), + 2985: uint16(5397), + 2986: uint16(5163), + 2987: uint16(15187), + 2988: uint16(5120), + 2989: uint16(9514), + 2990: uint16(15186), + 2991: uint16(15188), + 2992: uint16(15182), + 2993: uint16(15184), + 2994: uint16(4671), + 2995: uint16(8744), + 2996: uint16(15195), + 2997: uint16(15193), + 2998: uint16(5960), + 2999: uint16(15192), + 3000: uint16(15360), + 3001: uint16(14903), + 3002: uint16(15194), + 3003: uint16(15196), + 3004: uint16(15197), + 3005: uint16(15371), + 3006: uint16(15367), + 3007: uint16(14924), + 3008: uint16(15366), + 3009: uint16(15365), + 3010: uint16(15362), + 3011: uint16(15177), + 3012: uint16(15364), + 3013: uint16(15363), + 3014: uint16(15369), + 3015: uint16(11781), + 3016: uint16(15372), + 3017: uint16(5466), + 3018: uint16(15368), + 3019: uint16(15370), + 3020: uint16(9990), + 3021: uint16(15373), + 3022: uint16(15377), + 3023: uint16(15374), + 3024: uint16(11346), + 3025: uint16(15375), + 3026: uint16(15165), + 3027: uint16(15378), + 3028: uint16(15379), + 3029: uint16(4116), + 3030: uint16(15381), + 3031: uint16(5702), + 3032: uint16(6912), + 3033: uint16(5428), + 3034: uint16(4355), + 3035: uint16(11326), + 3036: uint16(15383), + 3037: uint16(15382), + 3038: uint16(15385), + 3039: uint16(5148), + 3040: uint16(5429), + 3041: uint16(4893), + 3042: uint16(15388), + 3043: uint16(15387), + 3044: uint16(15389), + 3045: uint16(4397), + 3046: uint16(8726), + 3047: uint16(15390), + 3048: uint16(4894), + 3049: uint16(15392), + 3050: uint16(15391), + 3051: uint16(15393), + 3052: uint16(15394), + 3053: uint16(15395), + 3054: uint16(6718), + 3055: uint16(7956), + 3056: uint16(6400), + 3057: uint16(10319), + 3058: uint16(10561), + 3059: uint16(11811), + 3060: uint16(6740), + 3061: uint16(6447), + 3062: uint16(11601), + 3063: uint16(15396), + 3064: uint16(15397), + 3065: uint16(6719), + 3066: uint16(15398), + 3067: uint16(15399), + 3068: uint16(15401), + 3069: uint16(15400), + 3070: uint16(10807), + 3071: uint16(7229), + 3072: uint16(6987), + 3073: uint16(6691), + 3074: uint16(15402), + 3075: uint16(15404), + 3076: uint16(7682), + 3077: uint16(15403), + 3078: uint16(15405), + 3079: uint16(15406), + 3080: uint16(15407), + 3081: uint16(15408), + 3082: uint16(15409), + 3083: uint16(15411), + 3084: uint16(15410), + 3085: uint16(15412), + 3086: uint16(4356), + 3087: uint16(8745), + 3088: uint16(15413), + 3089: uint16(6661), + 3090: uint16(4651), + 3091: uint16(15414), + 3092: uint16(9249), + 3093: uint16(13099), + 3094: uint16(5122), + 3095: uint16(15415), + 3096: uint16(15416), + 3097: uint16(10571), + 3098: uint16(10823), + 3099: uint16(9510), + 3100: uint16(15417), + 3101: uint16(10053), + 3102: uint16(10074), + 3103: uint16(11058), + 3104: uint16(15418), + 3105: uint16(15420), + 3106: uint16(15419), + 3107: uint16(15422), + 3108: uint16(15421), + 3109: uint16(15424), + 3110: uint16(6720), + 3111: uint16(11024), + 3112: uint16(15425), + 3113: uint16(15426), + 3114: uint16(5123), + 3115: uint16(15427), + 3116: uint16(15429), + 3117: uint16(15428), + 3118: uint16(7748), + 3119: uint16(10264), + 3120: uint16(4137), + 3121: uint16(10020), + 3122: uint16(9044), + 3123: uint16(7200), + 3124: uint16(5184), + 3125: uint16(10021), + 3126: uint16(6925), + 3127: uint16(15431), + 3128: uint16(4895), + 3129: uint16(4183), + 3130: uint16(9553), + 3131: uint16(15430), + 3132: uint16(6173), + 3133: uint16(8754), + 3134: uint16(15432), + 3135: uint16(15440), + 3136: uint16(15433), + 3137: uint16(8480), + 3138: uint16(5185), + 3139: uint16(15441), + 3140: uint16(5703), + 3141: uint16(5124), + 3142: uint16(15439), + 3143: uint16(15437), + 3144: uint16(15434), + 3145: uint16(11327), + 3146: uint16(8991), + 3147: uint16(9528), + 3148: uint16(15435), + 3149: uint16(15443), + 3150: uint16(15442), + 3151: uint16(5634), + 3152: uint16(4364), + 3153: uint16(6426), + 3154: uint16(15436), + 3155: uint16(15438), + 3156: uint16(10806), + 3157: uint16(8531), + 3158: uint16(10838), + 3159: uint16(15451), + 3160: uint16(15452), + 3161: uint16(4398), + 3162: uint16(10503), + 3163: uint16(11100), + 3164: uint16(15616), + 3165: uint16(6914), + 3166: uint16(7457), + 3167: uint16(15447), + 3168: uint16(15453), + 3169: uint16(4167), + 3170: uint16(5398), + 3171: uint16(15444), + 3172: uint16(15449), + 3173: uint16(8019), + 3174: uint16(9808), + 3175: uint16(10054), + 3176: uint16(15446), + 3177: uint16(10752), + 3178: uint16(15448), + 3179: uint16(15619), + 3180: uint16(15617), + 3181: uint16(15450), + 3182: uint16(10753), + 3183: uint16(9767), + 3184: uint16(5186), + 3185: uint16(9220), + 3186: uint16(8780), + 3187: uint16(15620), + 3188: uint16(15618), + 3189: uint16(8504), + 3190: uint16(15445), + 3191: uint16(4138), + 3192: uint16(11309), + 3193: uint16(15631), + 3194: uint16(15630), + 3195: uint16(8021), + 3196: uint16(15627), + 3197: uint16(11339), + 3198: uint16(9493), + 3199: uint16(15621), + 3200: uint16(8996), + 3201: uint16(4139), + 3202: uint16(6174), + 3203: uint16(15624), + 3204: uint16(7174), + 3205: uint16(15629), + 3206: uint16(15628), + 3207: uint16(15623), + 3208: uint16(15626), + 3209: uint16(4679), + 3210: uint16(15625), + 3211: uint16(9768), + 3212: uint16(11533), + 3213: uint16(7507), + 3214: uint16(8020), + 3215: uint16(15637), + 3216: uint16(15635), + 3217: uint16(10284), + 3218: uint16(15632), + 3219: uint16(15634), + 3220: uint16(4121), + 3221: uint16(6175), + 3222: uint16(11793), + 3223: uint16(4636), + 3224: uint16(10305), + 3225: uint16(11328), + 3226: uint16(4611), + 3227: uint16(7706), + 3228: uint16(15636), + 3229: uint16(15641), + 3230: uint16(7458), + 3231: uint16(11279), + 3232: uint16(15638), + 3233: uint16(15633), + 3234: uint16(15639), + 3235: uint16(11581), + 3236: uint16(9298), + 3237: uint16(9505), + 3238: uint16(4629), + 3239: uint16(4148), + 3240: uint16(15645), + 3241: uint16(15648), + 3242: uint16(11554), + 3243: uint16(11331), + 3244: uint16(15655), + 3245: uint16(15649), + 3246: uint16(15646), + 3247: uint16(11571), + 3248: uint16(15652), + 3249: uint16(7209), + 3250: uint16(15654), + 3251: uint16(15659), + 3252: uint16(9296), + 3253: uint16(15657), + 3254: uint16(15651), + 3255: uint16(8727), + 3256: uint16(15658), + 3257: uint16(15647), + 3258: uint16(15653), + 3259: uint16(15660), + 3260: uint16(3931), + 3261: uint16(15650), + 3262: uint16(15661), + 3263: uint16(7707), + 3264: uint16(7230), + 3265: uint16(10500), + 3266: uint16(6413), + 3267: uint16(15642), + 3268: uint16(15656), + 3269: uint16(9241), + 3270: uint16(7957), + 3271: uint16(4680), + 3272: uint16(6448), + 3273: uint16(7459), + 3274: uint16(15644), + 3275: uint16(7201), + 3276: uint16(5675), + 3277: uint16(15643), + 3278: uint16(15665), + 3279: uint16(7244), + 3280: uint16(5913), + 3281: uint16(15680), + 3282: uint16(15674), + 3283: uint16(5203), + 3284: uint16(9262), + 3285: uint16(15669), + 3286: uint16(15678), + 3287: uint16(3854), + 3288: uint16(4113), + 3289: uint16(4376), + 3290: uint16(15671), + 3291: uint16(8459), + 3292: uint16(15662), + 3293: uint16(15664), + 3294: uint16(6176), + 3295: uint16(15681), + 3296: uint16(15676), + 3297: uint16(15668), + 3298: uint16(15675), + 3299: uint16(11018), + 3300: uint16(15673), + 3301: uint16(15677), + 3302: uint16(5935), + 3303: uint16(7460), + 3304: uint16(8728), + 3305: uint16(15667), + 3306: uint16(11278), + 3307: uint16(15670), + 3308: uint16(15663), + 3309: uint16(9297), + 3310: uint16(15666), + 3311: uint16(15672), + 3312: uint16(11824), + 3313: uint16(6941), + 3314: uint16(10845), + 3315: uint16(15682), + 3316: uint16(9997), + 3317: uint16(15694), + 3318: uint16(5914), + 3319: uint16(7231), + 3320: uint16(15684), + 3321: uint16(11534), + 3322: uint16(6177), + 3323: uint16(15697), + 3324: uint16(3917), + 3325: uint16(15695), + 3326: uint16(15683), + 3327: uint16(15689), + 3328: uint16(15691), + 3329: uint16(11310), + 3330: uint16(15686), + 3331: uint16(9229), + 3332: uint16(15688), + 3333: uint16(15696), + 3334: uint16(15690), + 3335: uint16(11046), + 3336: uint16(15685), + 3337: uint16(6913), + 3338: uint16(15709), + 3339: uint16(4681), + 3340: uint16(15687), + 3341: uint16(15692), + 3342: uint16(15693), + 3343: uint16(8523), + 3344: uint16(8505), + 3345: uint16(15701), + 3346: uint16(15707), + 3347: uint16(15705), + 3348: uint16(9224), + 3349: uint16(15874), + 3350: uint16(15702), + 3351: uint16(15703), + 3352: uint16(15679), + 3353: uint16(5208), + 3354: uint16(10265), + 3355: uint16(6942), + 3356: uint16(6230), + 3357: uint16(11794), + 3358: uint16(15699), + 3359: uint16(15873), + 3360: uint16(4168), + 3361: uint16(8261), + 3362: uint16(9816), + 3363: uint16(4896), + 3364: uint16(11609), + 3365: uint16(11008), + 3366: uint16(9009), + 3367: uint16(15706), + 3368: uint16(15708), + 3369: uint16(8209), + 3370: uint16(15872), + 3371: uint16(15704), + 3372: uint16(15698), + 3373: uint16(4898), + 3374: uint16(5704), + 3375: uint16(15886), + 3376: uint16(15881), + 3377: uint16(8023), + 3378: uint16(4674), + 3379: uint16(7232), + 3380: uint16(15890), + 3381: uint16(15883), + 3382: uint16(8971), + 3383: uint16(15880), + 3384: uint16(9016), + 3385: uint16(15915), + 3386: uint16(15877), + 3387: uint16(15876), + 3388: uint16(15885), + 3389: uint16(15879), + 3390: uint16(15878), + 3391: uint16(15884), + 3392: uint16(7936), + 3393: uint16(15875), + 3394: uint16(15887), + 3395: uint16(15888), + 3396: uint16(4897), + 3397: uint16(15893), + 3398: uint16(15892), + 3399: uint16(15894), + 3400: uint16(15897), + 3401: uint16(9250), + 3402: uint16(15891), + 3403: uint16(15895), + 3404: uint16(5698), + 3405: uint16(8536), + 3406: uint16(15889), + 3407: uint16(9754), + 3408: uint16(15896), + 3409: uint16(15901), + 3410: uint16(15899), + 3411: uint16(15902), + 3412: uint16(15905), + 3413: uint16(15898), + 3414: uint16(6217), + 3415: uint16(9735), + 3416: uint16(15640), + 3417: uint16(11347), + 3418: uint16(15900), + 3419: uint16(15904), + 3420: uint16(8532), + 3421: uint16(15903), + 3422: uint16(15882), + 3423: uint16(20040), + 3424: uint16(15908), + 3425: uint16(15912), + 3426: uint16(15910), + 3427: uint16(15906), + 3428: uint16(15907), + 3429: uint16(15911), + 3430: uint16(15909), + 3431: uint16(10285), + 3432: uint16(15917), + 3433: uint16(15914), + 3434: uint16(15913), + 3435: uint16(15916), + 3436: uint16(9523), + 3437: uint16(15918), + 3438: uint16(8788), + 3439: uint16(8524), + 3440: uint16(7940), + 3441: uint16(15919), + 3442: uint16(15921), + 3443: uint16(15920), + 3444: uint16(15700), + 3445: uint16(15922), + 3446: uint16(9542), + 3447: uint16(15923), + 3448: uint16(4399), + 3449: uint16(9299), + 3450: uint16(4612), + 3451: uint16(5187), + 3452: uint16(6973), + 3453: uint16(6449), + 3454: uint16(11782), + 3455: uint16(7749), + 3456: uint16(4169), + 3457: uint16(15925), + 3458: uint16(15924), + 3459: uint16(15928), + 3460: uint16(8729), + 3461: uint16(15931), + 3462: uint16(15926), + 3463: uint16(15930), + 3464: uint16(15929), + 3465: uint16(9247), + 3466: uint16(3896), + 3467: uint16(11604), + 3468: uint16(15933), + 3469: uint16(4103), + 3470: uint16(15935), + 3471: uint16(15934), + 3472: uint16(15932), + 3473: uint16(15927), + 3474: uint16(10754), + 3475: uint16(15937), + 3476: uint16(15936), + 3477: uint16(4170), + 3478: uint16(15939), + 3479: uint16(10513), + 3480: uint16(15938), + 3481: uint16(11028), + 3482: uint16(7462), + 3483: uint16(8210), + 3484: uint16(7461), + 3485: uint16(11610), + 3486: uint16(15945), + 3487: uint16(8024), + 3488: uint16(15941), + 3489: uint16(15946), + 3490: uint16(4171), + 3491: uint16(15944), + 3492: uint16(9792), + 3493: uint16(15940), + 3494: uint16(15943), + 3495: uint16(7463), + 3496: uint16(10032), + 3497: uint16(15947), + 3498: uint16(6960), + 3499: uint16(8025), + 3500: uint16(15950), + 3501: uint16(15942), + 3502: uint16(5638), + 3503: uint16(15948), + 3504: uint16(11311), + 3505: uint16(15951), + 3506: uint16(21253), + 3507: uint16(7214), + 3508: uint16(15952), + 3509: uint16(15953), + 3510: uint16(9741), + 3511: uint16(15955), + 3512: uint16(15956), + 3513: uint16(9746), + 3514: uint16(9300), + 3515: uint16(15958), + 3516: uint16(15960), + 3517: uint16(11572), + 3518: uint16(15957), + 3519: uint16(15959), + 3520: uint16(4172), + 3521: uint16(15954), + 3522: uint16(12858), + 3523: uint16(15961), + 3524: uint16(8262), + 3525: uint16(6679), + 3526: uint16(15963), + 3527: uint16(15962), + 3528: uint16(7683), + 3529: uint16(12600), + 3530: uint16(15964), + 3531: uint16(16128), + 3532: uint16(15949), + 3533: uint16(15965), + 3534: uint16(16129), + 3535: uint16(9817), + 3536: uint16(16130), + 3537: uint16(16131), + 3538: uint16(16132), + 3539: uint16(16133), + 3540: uint16(9021), + 3541: uint16(16135), + 3542: uint16(16134), + 3543: uint16(16136), + 3544: uint16(16137), + 3545: uint16(6974), + 3546: uint16(10306), + 3547: uint16(11083), + 3548: uint16(16138), + 3549: uint16(16139), + 3550: uint16(8245), + 3551: uint16(6915), + 3552: uint16(16140), + 3553: uint16(16141), + 3554: uint16(16142), + 3555: uint16(10545), + 3556: uint16(10022), + 3557: uint16(16143), + 3558: uint16(9782), + 3559: uint16(8972), + 3560: uint16(16144), + 3561: uint16(4422), + 3562: uint16(5196), + 3563: uint16(11045), + 3564: uint16(11029), + 3565: uint16(4371), + 3566: uint16(11795), + 3567: uint16(10801), + 3568: uint16(10505), + 3569: uint16(7958), + 3570: uint16(16145), + 3571: uint16(9506), + 3572: uint16(5890), + 3573: uint16(16146), + 3574: uint16(6451), + 3575: uint16(16148), + 3576: uint16(16147), + 3577: uint16(16149), + 3578: uint16(16150), + 3579: uint16(16151), + 3580: uint16(5149), + 3581: uint16(16152), + 3582: uint16(16153), + 3583: uint16(5891), + 3584: uint16(10023), + 3585: uint16(16155), + 3586: uint16(7508), + 3587: uint16(16154), + 3588: uint16(5399), + 3589: uint16(16156), + 3590: uint16(16158), + 3591: uint16(16157), + 3592: uint16(16159), + 3593: uint16(5936), + 3594: uint16(16160), + 3595: uint16(5448), + 3596: uint16(8223), + 3597: uint16(6236), + 3598: uint16(16162), + 3599: uint16(16163), + 3600: uint16(16161), + 3601: uint16(6988), + 3602: uint16(9511), + 3603: uint16(5400), + 3604: uint16(16165), + 3605: uint16(8715), + 3606: uint16(16164), + 3607: uint16(11796), + 3608: uint16(9793), + 3609: uint16(16168), + 3610: uint16(16170), + 3611: uint16(16167), + 3612: uint16(11059), + 3613: uint16(16169), + 3614: uint16(16171), + 3615: uint16(11555), + 3616: uint16(16175), + 3617: uint16(16174), + 3618: uint16(8789), + 3619: uint16(9740), + 3620: uint16(5892), + 3621: uint16(16173), + 3622: uint16(16172), + 3623: uint16(11280), + 3624: uint16(11281), + 3625: uint16(16176), + 3626: uint16(4173), + 3627: uint16(6229), + 3628: uint16(6721), + 3629: uint16(16177), + 3630: uint16(16178), + 3631: uint16(16180), + 3632: uint16(7202), + 3633: uint16(16182), + 3634: uint16(16181), + 3635: uint16(16183), + 3636: uint16(4652), + 3637: uint16(16185), + 3638: uint16(16184), + 3639: uint16(16187), + 3640: uint16(16186), + 3641: uint16(5915), + 3642: uint16(11527), + 3643: uint16(5419), + 3644: uint16(4357), + 3645: uint16(5449), + 3646: uint16(4928), + 3647: uint16(11591), + 3648: uint16(16189), + 3649: uint16(16191), + 3650: uint16(16192), + 3651: uint16(4400), + 3652: uint16(16188), + 3653: uint16(6680), + 3654: uint16(8992), + 3655: uint16(16190), + 3656: uint16(16195), + 3657: uint16(6989), + 3658: uint16(16193), + 3659: uint16(5661), + 3660: uint16(10024), + 3661: uint16(16194), + 3662: uint16(16221), + 3663: uint16(16200), + 3664: uint16(5916), + 3665: uint16(5188), + 3666: uint16(16197), + 3667: uint16(11356), + 3668: uint16(11535), + 3669: uint16(8533), + 3670: uint16(16199), + 3671: uint16(16201), + 3672: uint16(11573), + 3673: uint16(5430), + 3674: uint16(10075), + 3675: uint16(9769), + 3676: uint16(16202), + 3677: uint16(16204), + 3678: uint16(16207), + 3679: uint16(16203), + 3680: uint16(16206), + 3681: uint16(5961), + 3682: uint16(4140), + 3683: uint16(16208), + 3684: uint16(7759), + 3685: uint16(16205), + 3686: uint16(11579), + 3687: uint16(16211), + 3688: uint16(21251), + 3689: uint16(16209), + 3690: uint16(16212), + 3691: uint16(16198), + 3692: uint16(16210), + 3693: uint16(6427), + 3694: uint16(16213), + 3695: uint16(16214), + 3696: uint16(11357), + 3697: uint16(16215), + 3698: uint16(16216), + 3699: uint16(16196), + 3700: uint16(16217), + 3701: uint16(4899), + 3702: uint16(6916), + 3703: uint16(16218), + 3704: uint16(16219), + 3705: uint16(16220), + 3706: uint16(4122), + 3707: uint16(16384), + 3708: uint16(10266), + 3709: uint16(16385), + 3710: uint16(4867), + 3711: uint16(16386), + 3712: uint16(16387), + 3713: uint16(16388), + 3714: uint16(16390), + 3715: uint16(16391), + 3716: uint16(16389), + 3717: uint16(10290), + 3718: uint16(16393), + 3719: uint16(16392), + 3720: uint16(16395), + 3721: uint16(16394), + 3722: uint16(16396), + 3723: uint16(16397), + 3724: uint16(16399), + 3725: uint16(16398), + 3726: uint16(6232), + 3727: uint16(16401), + 3728: uint16(16400), + 3729: uint16(4900), + 3730: uint16(7730), + 3731: uint16(9243), + 3732: uint16(16402), + 3733: uint16(7959), + 3734: uint16(6681), + 3735: uint16(4184), + 3736: uint16(16403), + 3737: uint16(11312), + 3738: uint16(10562), + 3739: uint16(16404), + 3740: uint16(9251), + 3741: uint16(11282), + 3742: uint16(6178), + 3743: uint16(7708), + 3744: uint16(8746), + 3745: uint16(12563), + 3746: uint16(8973), + 3747: uint16(4423), + 3748: uint16(16405), + 3749: uint16(16406), + 3750: uint16(16411), + 3751: uint16(16409), + 3752: uint16(16408), + 3753: uint16(14625), + 3754: uint16(4613), + 3755: uint16(16407), + 3756: uint16(3897), + 3757: uint16(9993), + 3758: uint16(10025), + 3759: uint16(11536), + 3760: uint16(16412), + 3761: uint16(16410), + 3762: uint16(8763), + 3763: uint16(7941), + 3764: uint16(9994), + 3765: uint16(10252), + 3766: uint16(16414), + 3767: uint16(11531), + 3768: uint16(5676), + 3769: uint16(16415), + 3770: uint16(16413), + 3771: uint16(10037), + 3772: uint16(16416), + 3773: uint16(16417), + 3774: uint16(3898), + 3775: uint16(7509), + 3776: uint16(16422), + 3777: uint16(16419), + 3778: uint16(9548), + 3779: uint16(16418), + 3780: uint16(5125), + 3781: uint16(16425), + 3782: uint16(16420), + 3783: uint16(16421), + 3784: uint16(16424), + 3785: uint16(16423), + 3786: uint16(10244), + 3787: uint16(8225), + 3788: uint16(8224), + 3789: uint16(5150), + 3790: uint16(16426), + 3791: uint16(16427), + 3792: uint16(16428), + 3793: uint16(16430), + 3794: uint16(16429), + 3795: uint16(4149), + 3796: uint16(16438), + 3797: uint16(10055), + 3798: uint16(16432), + 3799: uint16(16434), + 3800: uint16(16436), + 3801: uint16(7709), + 3802: uint16(16437), + 3803: uint16(16435), + 3804: uint16(6943), + 3805: uint16(16431), + 3806: uint16(16433), + 3807: uint16(10273), + 3808: uint16(7464), + 3809: uint16(16440), + 3810: uint16(16439), + 3811: uint16(16441), + 3812: uint16(6917), + 3813: uint16(6414), + 3814: uint16(9302), + 3815: uint16(16442), + 3816: uint16(9002), + 3817: uint16(16444), + 3818: uint16(11520), + 3819: uint16(16443), + 3820: uint16(8264), + 3821: uint16(16449), + 3822: uint16(16451), + 3823: uint16(16452), + 3824: uint16(8755), + 3825: uint16(16450), + 3826: uint16(16447), + 3827: uint16(16445), + 3828: uint16(16446), + 3829: uint16(16448), + 3830: uint16(16455), + 3831: uint16(16453), + 3832: uint16(16454), + 3833: uint16(16456), + 3834: uint16(16458), + 3835: uint16(16459), + 3836: uint16(16460), + 3837: uint16(16461), + 3838: uint16(16457), + 3839: uint16(16463), + 3840: uint16(16462), + 3841: uint16(16464), + 3842: uint16(11556), + 3843: uint16(16467), + 3844: uint16(16465), + 3845: uint16(16466), + 3846: uint16(4929), + 3847: uint16(11101), + 3848: uint16(10537), + 3849: uint16(16469), + 3850: uint16(16468), + 3851: uint16(16470), + 3852: uint16(16471), + 3853: uint16(16475), + 3854: uint16(16472), + 3855: uint16(16473), + 3856: uint16(16474), + 3857: uint16(16476), + 3858: uint16(16477), + 3859: uint16(16640), + 3860: uint16(16641), + 3861: uint16(16642), + 3862: uint16(9998), + 3863: uint16(9263), + 3864: uint16(16643), + 3865: uint16(9809), + 3866: uint16(10259), + 3867: uint16(16644), + 3868: uint16(16645), + 3869: uint16(9225), + 3870: uint16(4614), + 3871: uint16(6179), + 3872: uint16(16646), + 3873: uint16(16647), + 3874: uint16(16648), + 3875: uint16(6664), + 3876: uint16(16650), + 3877: uint16(16649), + 3878: uint16(16651), + 3879: uint16(16652), + 3880: uint16(10056), + 3881: uint16(16653), + 3882: uint16(16654), + 3883: uint16(21064), + 3884: uint16(16655), + 3885: uint16(16656), + 3886: uint16(16657), + 3887: uint16(6669), + 3888: uint16(16658), + 3889: uint16(9781), + 3890: uint16(10814), + 3891: uint16(4141), + 3892: uint16(4150), + 3893: uint16(16659), + 3894: uint16(16661), + 3895: uint16(16660), + 3896: uint16(9295), + 3897: uint16(7960), + 3898: uint16(15384), + 3899: uint16(16662), + 3900: uint16(11040), + 3901: uint16(16663), + 3902: uint16(4901), + 3903: uint16(10038), + 3904: uint16(16664), + 3905: uint16(16665), + 3906: uint16(16666), + 3907: uint16(11067), + 3908: uint16(11060), + 3909: uint16(8989), + 3910: uint16(8265), + 3911: uint16(16668), + 3912: uint16(7233), + 3913: uint16(7465), + 3914: uint16(16671), + 3915: uint16(16670), + 3916: uint16(16669), + 3917: uint16(10076), + 3918: uint16(4902), + 3919: uint16(5896), + 3920: uint16(16677), + 3921: uint16(16674), + 3922: uint16(7710), + 3923: uint16(11025), + 3924: uint16(16673), + 3925: uint16(16675), + 3926: uint16(16676), + 3927: uint16(16672), + 3928: uint16(16678), + 3929: uint16(16679), + 3930: uint16(8974), + 3931: uint16(4930), + 3932: uint16(8772), + 3933: uint16(16680), + 3934: uint16(16681), + 3935: uint16(16684), + 3936: uint16(7750), + 3937: uint16(9507), + 3938: uint16(16685), + 3939: uint16(10802), + 3940: uint16(16682), + 3941: uint16(16683), + 3942: uint16(16688), + 3943: uint16(16687), + 3944: uint16(16686), + 3945: uint16(16690), + 3946: uint16(16689), + 3947: uint16(16691), + 3948: uint16(16693), + 3949: uint16(16692), + 3950: uint16(10540), + 3951: uint16(7221), + 3952: uint16(11557), + 3953: uint16(16694), + 3954: uint16(9494), + 3955: uint16(16695), + 3956: uint16(16696), + 3957: uint16(16700), + 3958: uint16(16698), + 3959: uint16(16699), + 3960: uint16(16697), + 3961: uint16(16701), + 3962: uint16(16702), + 3963: uint16(16703), + 3964: uint16(16704), + 3965: uint16(11030), + 3966: uint16(16705), + 3967: uint16(11087), + 3968: uint16(16706), + 3969: uint16(8749), + 3970: uint16(9801), + 3971: uint16(5450), + 3972: uint16(8730), + 3973: uint16(16707), + 3974: uint16(5401), + 3975: uint16(7983), + 3976: uint16(16708), + 3977: uint16(6428), + 3978: uint16(16709), + 3979: uint16(16710), + 3980: uint16(5893), + 3981: uint16(6452), + 3982: uint16(16712), + 3983: uint16(9269), + 3984: uint16(6453), + 3985: uint16(5165), + 3986: uint16(10755), + 3987: uint16(9770), + 3988: uint16(9270), + 3989: uint16(6203), + 3990: uint16(16714), + 3991: uint16(7466), + 3992: uint16(11537), + 3993: uint16(6180), + 3994: uint16(5894), + 3995: uint16(9986), + 3996: uint16(16716), + 3997: uint16(16718), + 3998: uint16(5962), + 3999: uint16(16717), + 4000: uint16(9045), + 4001: uint16(16720), + 4002: uint16(4630), + 4003: uint16(16715), + 4004: uint16(10057), + 4005: uint16(4111), + 4006: uint16(6475), + 4007: uint16(11825), + 4008: uint16(16719), + 4009: uint16(16721), + 4010: uint16(10538), + 4011: uint16(7992), + 4012: uint16(16723), + 4013: uint16(16724), + 4014: uint16(16722), + 4015: uint16(4653), + 4016: uint16(16730), + 4017: uint16(16729), + 4018: uint16(6918), + 4019: uint16(16731), + 4020: uint16(16726), + 4021: uint16(16732), + 4022: uint16(16727), + 4023: uint16(10039), + 4024: uint16(16725), + 4025: uint16(16728), + 4026: uint16(16897), + 4027: uint16(16896), + 4028: uint16(10816), + 4029: uint16(16733), + 4030: uint16(3914), + 4031: uint16(16899), + 4032: uint16(16898), + 4033: uint16(7467), + 4034: uint16(16900), + 4035: uint16(8226), + 4036: uint16(16902), + 4037: uint16(16901), + 4038: uint16(16903), + 4039: uint16(16711), + 4040: uint16(16713), + 4041: uint16(16905), + 4042: uint16(16904), + 4043: uint16(6919), + 4044: uint16(11592), + 4045: uint16(6961), + 4046: uint16(16906), + 4047: uint16(5654), + 4048: uint16(5151), + 4049: uint16(5126), + 4050: uint16(6722), + 4051: uint16(11283), + 4052: uint16(16912), + 4053: uint16(16911), + 4054: uint16(8227), + 4055: uint16(16908), + 4056: uint16(16910), + 4057: uint16(7210), + 4058: uint16(7711), + 4059: uint16(16909), + 4060: uint16(16907), + 4061: uint16(9737), + 4062: uint16(7468), + 4063: uint16(10267), + 4064: uint16(6454), + 4065: uint16(9303), + 4066: uint16(16913), + 4067: uint16(16914), + 4068: uint16(16936), + 4069: uint16(5431), + 4070: uint16(11804), + 4071: uint16(8212), + 4072: uint16(16915), + 4073: uint16(4401), + 4074: uint16(9046), + 4075: uint16(10496), + 4076: uint16(16916), + 4077: uint16(5209), + 4078: uint16(16917), + 4079: uint16(16919), + 4080: uint16(16920), + 4081: uint16(9736), + 4082: uint16(16921), + 4083: uint16(16922), + 4084: uint16(16923), + 4085: uint16(5432), + 4086: uint16(4402), + 4087: uint16(9508), + 4088: uint16(7175), + 4089: uint16(6723), + 4090: uint16(16924), + 4091: uint16(7176), + 4092: uint16(4393), + 4093: uint16(10274), + 4094: uint16(16925), + 4095: uint16(10058), + 4096: uint16(8228), + 4097: uint16(16928), + 4098: uint16(16929), + 4099: uint16(9800), + 4100: uint16(7712), + 4101: uint16(16926), + 4102: uint16(8768), + 4103: uint16(16927), + 4104: uint16(7469), + 4105: uint16(3899), + 4106: uint16(5128), + 4107: uint16(16930), + 4108: uint16(9047), + 4109: uint16(16931), + 4110: uint16(7974), + 4111: uint16(11020), + 4112: uint16(10242), + 4113: uint16(16932), + 4114: uint16(16933), + 4115: uint16(8756), + 4116: uint16(11558), + 4117: uint16(16935), + 4118: uint16(16934), + 4119: uint16(6990), + 4120: uint16(16937), + 4121: uint16(3919), + 4122: uint16(16940), + 4123: uint16(16938), + 4124: uint16(4403), + 4125: uint16(5677), + 4126: uint16(16939), + 4127: uint16(6181), + 4128: uint16(6225), + 4129: uint16(10565), + 4130: uint16(16941), + 4131: uint16(10803), + 4132: uint16(16943), + 4133: uint16(7984), + 4134: uint16(4142), + 4135: uint16(4377), + 4136: uint16(3851), + 4137: uint16(16942), + 4138: uint16(16944), + 4139: uint16(16945), + 4140: uint16(7510), + 4141: uint16(16946), + 4142: uint16(4654), + 4143: uint16(16948), + 4144: uint16(5705), + 4145: uint16(5189), + 4146: uint16(16949), + 4147: uint16(5460), + 4148: uint16(16950), + 4149: uint16(8027), + 4150: uint16(9516), + 4151: uint16(7999), + 4152: uint16(6484), + 4153: uint16(16951), + 4154: uint16(8769), + 4155: uint16(8266), + 4156: uint16(16953), + 4157: uint16(16955), + 4158: uint16(16952), + 4159: uint16(16954), + 4160: uint16(5633), + 4161: uint16(16956), + 4162: uint16(5637), + 4163: uint16(5190), + 4164: uint16(11313), + 4165: uint16(16958), + 4166: uint16(16959), + 4167: uint16(4109), + 4168: uint16(16962), + 4169: uint16(4693), + 4170: uint16(16961), + 4171: uint16(16960), + 4172: uint16(16964), + 4173: uint16(16957), + 4174: uint16(16965), + 4175: uint16(11528), + 4176: uint16(16966), + 4177: uint16(16967), + 4178: uint16(13139), + 4179: uint16(16969), + 4180: uint16(16968), + 4181: uint16(16970), + 4182: uint16(16971), + 4183: uint16(11540), + 4184: uint16(16972), + 4185: uint16(20302), + 4186: uint16(7470), + 4187: uint16(16973), + 4188: uint16(16974), + 4189: uint16(7222), + 4190: uint16(9495), + 4191: uint16(16975), + 4192: uint16(8711), + 4193: uint16(16976), + 4194: uint16(8731), + 4195: uint16(16977), + 4196: uint16(5380), + 4197: uint16(12318), + 4198: uint16(8764), + 4199: uint16(6930), + 4200: uint16(4903), + 4201: uint16(16978), + 4202: uint16(17153), + 4203: uint16(16981), + 4204: uint16(5191), + 4205: uint16(16980), + 4206: uint16(17155), + 4207: uint16(16979), + 4208: uint16(7471), + 4209: uint16(16983), + 4210: uint16(16984), + 4211: uint16(9226), + 4212: uint16(16985), + 4213: uint16(4669), + 4214: uint16(7737), + 4215: uint16(10307), + 4216: uint16(16987), + 4217: uint16(8519), + 4218: uint16(16982), + 4219: uint16(16986), + 4220: uint16(16988), + 4221: uint16(6490), + 4222: uint16(17157), + 4223: uint16(10253), + 4224: uint16(9989), + 4225: uint16(9304), + 4226: uint16(5433), + 4227: uint16(17156), + 4228: uint16(17154), + 4229: uint16(10004), + 4230: uint16(16989), + 4231: uint16(8765), + 4232: uint16(9306), + 4233: uint16(9305), + 4234: uint16(6485), + 4235: uint16(17175), + 4236: uint16(17159), + 4237: uint16(17161), + 4238: uint16(17164), + 4239: uint16(17165), + 4240: uint16(17162), + 4241: uint16(17163), + 4242: uint16(17160), + 4243: uint16(17158), + 4244: uint16(17152), + 4245: uint16(10542), + 4246: uint16(4404), + 4247: uint16(17172), + 4248: uint16(17169), + 4249: uint16(17174), + 4250: uint16(17173), + 4251: uint16(9810), + 4252: uint16(11014), + 4253: uint16(6682), + 4254: uint16(17167), + 4255: uint16(17176), + 4256: uint16(17171), + 4257: uint16(17170), + 4258: uint16(17166), + 4259: uint16(17168), + 4260: uint16(4904), + 4261: uint16(8732), + 4262: uint16(8028), + 4263: uint16(9985), + 4264: uint16(17181), + 4265: uint16(9987), + 4266: uint16(8000), + 4267: uint16(17178), + 4268: uint16(10030), + 4269: uint16(17182), + 4270: uint16(10546), + 4271: uint16(8762), + 4272: uint16(17177), + 4273: uint16(17179), + 4274: uint16(17180), + 4275: uint16(17183), + 4276: uint16(6947), + 4277: uint16(9509), + 4278: uint16(17188), + 4279: uint16(17187), + 4280: uint16(17184), + 4281: uint16(11797), + 4282: uint16(17193), + 4283: uint16(17197), + 4284: uint16(17194), + 4285: uint16(17190), + 4286: uint16(17191), + 4287: uint16(17196), + 4288: uint16(17185), + 4289: uint16(12596), + 4290: uint16(17192), + 4291: uint16(17186), + 4292: uint16(17195), + 4293: uint16(17201), + 4294: uint16(4905), + 4295: uint16(17198), + 4296: uint16(17199), + 4297: uint16(17200), + 4298: uint16(17203), + 4299: uint16(17202), + 4300: uint16(10069), + 4301: uint16(17204), + 4302: uint16(11611), + 4303: uint16(10572), + 4304: uint16(17209), + 4305: uint16(17206), + 4306: uint16(17205), + 4307: uint16(7985), + 4308: uint16(17208), + 4309: uint16(17210), + 4310: uint16(17207), + 4311: uint16(17214), + 4312: uint16(17211), + 4313: uint16(17212), + 4314: uint16(17189), + 4315: uint16(17213), + 4316: uint16(17215), + 4317: uint16(17216), + 4318: uint16(10533), + 4319: uint16(17217), + 4320: uint16(11073), + 4321: uint16(5421), + 4322: uint16(5640), + 4323: uint16(17218), + 4324: uint16(10515), + 4325: uint16(7751), + 4326: uint16(11023), + 4327: uint16(17219), + 4328: uint16(11538), + 4329: uint16(9811), + 4330: uint16(8229), + 4331: uint16(9747), + 4332: uint16(7212), + 4333: uint16(3871), + 4334: uint16(17224), + 4335: uint16(17222), + 4336: uint16(17220), + 4337: uint16(4864), + 4338: uint16(7472), + 4339: uint16(17225), + 4340: uint16(17223), + 4341: uint16(17221), + 4342: uint16(17229), + 4343: uint16(17228), + 4344: uint16(17227), + 4345: uint16(17226), + 4346: uint16(17230), + 4347: uint16(17231), + 4348: uint16(7961), + 4349: uint16(17232), + 4350: uint16(17234), + 4351: uint16(17233), + 4352: uint16(5937), + 4353: uint16(8215), + 4354: uint16(17236), + 4355: uint16(9307), + 4356: uint16(17235), + 4357: uint16(17237), + 4358: uint16(10516), + 4359: uint16(8267), + 4360: uint16(6182), + 4361: uint16(17238), + 4362: uint16(11559), + 4363: uint16(17240), + 4364: uint16(17241), + 4365: uint16(17242), + 4366: uint16(17243), + 4367: uint16(6724), + 4368: uint16(17244), + 4369: uint16(5678), + 4370: uint16(5193), + 4371: uint16(5129), + 4372: uint16(17408), + 4373: uint16(11090), + 4374: uint16(6183), + 4375: uint16(17245), + 4376: uint16(17411), + 4377: uint16(11077), + 4378: uint16(9755), + 4379: uint16(10258), + 4380: uint16(7234), + 4381: uint16(17410), + 4382: uint16(6962), + 4383: uint16(6184), + 4384: uint16(6725), + 4385: uint16(5192), + 4386: uint16(10517), + 4387: uint16(17409), + 4388: uint16(8230), + 4389: uint16(10785), + 4390: uint16(6486), + 4391: uint16(6726), + 4392: uint16(9020), + 4393: uint16(17414), + 4394: uint16(11582), + 4395: uint16(6456), + 4396: uint16(17415), + 4397: uint16(7713), + 4398: uint16(17417), + 4399: uint16(7473), + 4400: uint16(6415), + 4401: uint16(17416), + 4402: uint16(7177), + 4403: uint16(5917), + 4404: uint16(8231), + 4405: uint16(17412), + 4406: uint16(17418), + 4407: uint16(17413), + 4408: uint16(5679), + 4409: uint16(17421), + 4410: uint16(17425), + 4411: uint16(5706), + 4412: uint16(17420), + 4413: uint16(17429), + 4414: uint16(6185), + 4415: uint16(11340), + 4416: uint16(3867), + 4417: uint16(17426), + 4418: uint16(5194), + 4419: uint16(17423), + 4420: uint16(17424), + 4421: uint16(9308), + 4422: uint16(17422), + 4423: uint16(17419), + 4424: uint16(4615), + 4425: uint16(8003), + 4426: uint16(5895), + 4427: uint16(17431), + 4428: uint16(17428), + 4429: uint16(17430), + 4430: uint16(17427), + 4431: uint16(5680), + 4432: uint16(8466), + 4433: uint16(17432), + 4434: uint16(8269), + 4435: uint16(17445), + 4436: uint16(17441), + 4437: uint16(17435), + 4438: uint16(17439), + 4439: uint16(7001), + 4440: uint16(3900), + 4441: uint16(17434), + 4442: uint16(17442), + 4443: uint16(17446), + 4444: uint16(6186), + 4445: uint16(11061), + 4446: uint16(9013), + 4447: uint16(17436), + 4448: uint16(17444), + 4449: uint16(17433), + 4450: uint16(8733), + 4451: uint16(17438), + 4452: uint16(3868), + 4453: uint16(11049), + 4454: uint16(17437), + 4455: uint16(5434), + 4456: uint16(10059), + 4457: uint16(8268), + 4458: uint16(11567), + 4459: uint16(7246), + 4460: uint16(17485), + 4461: uint16(17447), + 4462: uint16(8029), + 4463: uint16(17443), + 4464: uint16(17448), + 4465: uint16(17450), + 4466: uint16(9048), + 4467: uint16(17453), + 4468: uint16(17449), + 4469: uint16(10547), + 4470: uint16(4906), + 4471: uint16(11050), + 4472: uint16(3901), + 4473: uint16(17452), + 4474: uint16(11612), + 4475: uint16(17451), + 4476: uint16(4174), + 4477: uint16(9547), + 4478: uint16(17454), + 4479: uint16(17461), + 4480: uint16(17455), + 4481: uint16(17462), + 4482: uint16(17458), + 4483: uint16(9818), + 4484: uint16(6953), + 4485: uint16(17460), + 4486: uint16(17457), + 4487: uint16(17463), + 4488: uint16(17456), + 4489: uint16(7203), + 4490: uint16(10756), + 4491: uint16(7211), + 4492: uint16(17459), + 4493: uint16(17471), + 4494: uint16(17467), + 4495: uint16(17470), + 4496: uint16(17468), + 4497: uint16(17472), + 4498: uint16(17466), + 4499: uint16(17440), + 4500: uint16(7986), + 4501: uint16(10026), + 4502: uint16(17469), + 4503: uint16(17464), + 4504: uint16(8192), + 4505: uint16(5681), + 4506: uint16(7178), + 4507: uint16(7684), + 4508: uint16(8213), + 4509: uint16(17475), + 4510: uint16(17477), + 4511: uint16(17478), + 4512: uint16(17474), + 4513: uint16(17476), + 4514: uint16(17465), + 4515: uint16(17473), + 4516: uint16(17481), + 4517: uint16(17480), + 4518: uint16(10841), + 4519: uint16(5642), + 4520: uint16(17479), + 4521: uint16(17483), + 4522: uint16(17482), + 4523: uint16(17486), + 4524: uint16(17488), + 4525: uint16(6683), + 4526: uint16(17484), + 4527: uint16(17489), + 4528: uint16(17490), + 4529: uint16(17491), + 4530: uint16(17497), + 4531: uint16(9242), + 4532: uint16(17493), + 4533: uint16(17492), + 4534: uint16(17494), + 4535: uint16(17495), + 4536: uint16(17496), + 4537: uint16(17498), + 4538: uint16(17499), + 4539: uint16(4907), + 4540: uint16(17500), + 4541: uint16(17501), + 4542: uint16(17664), + 4543: uint16(17665), + 4544: uint16(17666), + 4545: uint16(17667), + 4546: uint16(17668), + 4547: uint16(17669), + 4548: uint16(17671), + 4549: uint16(17670), + 4550: uint16(17672), + 4551: uint16(17673), + 4552: uint16(17674), + 4553: uint16(17677), + 4554: uint16(17675), + 4555: uint16(17676), + 4556: uint16(6464), + 4557: uint16(5682), + 4558: uint16(8757), + 4559: uint16(10002), + 4560: uint16(7247), + 4561: uint16(9772), + 4562: uint16(10060), + 4563: uint16(17678), + 4564: uint16(14156), + 4565: uint16(17679), + 4566: uint16(17681), + 4567: uint16(11332), + 4568: uint16(17680), + 4569: uint16(17683), + 4570: uint16(17682), + 4571: uint16(11314), + 4572: uint16(17684), + 4573: uint16(10077), + 4574: uint16(17685), + 4575: uint16(17688), + 4576: uint16(17687), + 4577: uint16(17686), + 4578: uint16(17689), + 4579: uint16(5649), + 4580: uint16(8193), + 4581: uint16(5152), + 4582: uint16(17693), + 4583: uint16(17690), + 4584: uint16(17691), + 4585: uint16(17694), + 4586: uint16(17695), + 4587: uint16(17692), + 4588: uint16(4104), + 4589: uint16(4358), + 4590: uint16(17697), + 4591: uint16(17698), + 4592: uint16(17699), + 4593: uint16(11329), + 4594: uint16(7179), + 4595: uint16(17701), + 4596: uint16(17700), + 4597: uint16(7752), + 4598: uint16(17702), + 4599: uint16(17703), + 4600: uint16(17704), + 4601: uint16(4932), + 4602: uint16(4908), + 4603: uint16(17705), + 4604: uint16(17706), + 4605: uint16(10812), + 4606: uint16(11330), + 4607: uint16(11315), + 4608: uint16(11798), + 4609: uint16(6188), + 4610: uint16(17709), + 4611: uint16(6963), + 4612: uint16(17708), + 4613: uint16(17710), + 4614: uint16(6920), + 4615: uint16(8496), + 4616: uint16(17711), + 4617: uint16(6187), + 4618: uint16(11062), + 4619: uint16(17712), + 4620: uint16(17713), + 4621: uint16(17714), + 4622: uint16(17715), + 4623: uint16(17716), + 4624: uint16(6921), + 4625: uint16(11084), + 4626: uint16(17718), + 4627: uint16(8734), + 4628: uint16(17717), + 4629: uint16(17720), + 4630: uint16(17719), + 4631: uint16(17721), + 4632: uint16(7962), + 4633: uint16(17722), + 4634: uint16(17723), + 4635: uint16(10520), + 4636: uint16(17724), + 4637: uint16(8270), + 4638: uint16(17725), + 4639: uint16(17726), + 4640: uint16(11613), + 4641: uint16(17729), + 4642: uint16(17728), + 4643: uint16(17727), + 4644: uint16(8975), + 4645: uint16(17730), + 4646: uint16(7685), + 4647: uint16(17731), + 4648: uint16(17732), + 4649: uint16(11799), + 4650: uint16(17733), + 4651: uint16(17734), + 4652: uint16(17736), + 4653: uint16(17735), + 4654: uint16(9988), + 4655: uint16(9560), + 4656: uint16(11805), + 4657: uint16(9992), + 4658: uint16(17738), + 4659: uint16(7474), + 4660: uint16(10249), + 4661: uint16(17739), + 4662: uint16(17737), + 4663: uint16(4909), + 4664: uint16(5939), + 4665: uint16(6727), + 4666: uint16(10061), + 4667: uint16(5897), + 4668: uint16(10786), + 4669: uint16(17742), + 4670: uint16(17740), + 4671: uint16(6189), + 4672: uint16(6190), + 4673: uint16(3912), + 4674: uint16(6471), + 4675: uint16(9784), + 4676: uint16(3902), + 4677: uint16(17747), + 4678: uint16(8735), + 4679: uint16(9783), + 4680: uint16(8506), + 4681: uint16(17749), + 4682: uint16(17745), + 4683: uint16(17748), + 4684: uint16(17743), + 4685: uint16(17746), + 4686: uint16(10757), + 4687: uint16(5940), + 4688: uint16(3932), + 4689: uint16(17744), + 4690: uint16(17751), + 4691: uint16(17752), + 4692: uint16(9496), + 4693: uint16(5402), + 4694: uint16(17925), + 4695: uint16(9756), + 4696: uint16(6728), + 4697: uint16(5403), + 4698: uint16(7975), + 4699: uint16(11813), + 4700: uint16(11021), + 4701: uint16(17750), + 4702: uint16(7987), + 4703: uint16(5170), + 4704: uint16(17753), + 4705: uint16(17755), + 4706: uint16(17754), + 4707: uint16(17756), + 4708: uint16(8709), + 4709: uint16(9757), + 4710: uint16(8976), + 4711: uint16(17922), + 4712: uint16(17921), + 4713: uint16(17757), + 4714: uint16(7732), + 4715: uint16(10308), + 4716: uint16(17924), + 4717: uint16(17923), + 4718: uint16(6191), + 4719: uint16(11826), + 4720: uint16(17940), + 4721: uint16(17928), + 4722: uint16(17929), + 4723: uint16(6991), + 4724: uint16(17927), + 4725: uint16(6231), + 4726: uint16(17926), + 4727: uint16(17930), + 4728: uint16(8977), + 4729: uint16(10497), + 4730: uint16(8194), + 4731: uint16(8507), + 4732: uint16(17934), + 4733: uint16(17935), + 4734: uint16(17931), + 4735: uint16(17932), + 4736: uint16(17933), + 4737: uint16(6192), + 4738: uint16(17941), + 4739: uint16(17937), + 4740: uint16(10309), + 4741: uint16(10827), + 4742: uint16(10247), + 4743: uint16(17936), + 4744: uint16(17939), + 4745: uint16(17938), + 4746: uint16(10787), + 4747: uint16(17942), + 4748: uint16(17943), + 4749: uint16(8214), + 4750: uint16(17944), + 4751: uint16(17946), + 4752: uint16(17950), + 4753: uint16(17947), + 4754: uint16(17945), + 4755: uint16(9758), + 4756: uint16(17948), + 4757: uint16(17949), + 4758: uint16(4369), + 4759: uint16(17956), + 4760: uint16(17951), + 4761: uint16(17952), + 4762: uint16(17953), + 4763: uint16(8448), + 4764: uint16(17955), + 4765: uint16(17954), + 4766: uint16(17957), + 4767: uint16(17958), + 4768: uint16(17959), + 4769: uint16(7714), + 4770: uint16(4424), + 4771: uint16(17960), + 4772: uint16(11574), + 4773: uint16(6922), + 4774: uint16(7180), + 4775: uint16(6729), + 4776: uint16(8758), + 4777: uint16(17961), + 4778: uint16(17962), + 4779: uint16(4112), + 4780: uint16(17963), + 4781: uint16(17964), + 4782: uint16(17965), + 4783: uint16(17966), + 4784: uint16(17967), + 4785: uint16(5404), + 4786: uint16(14601), + 4787: uint16(17968), + 4788: uint16(8004), + 4789: uint16(17969), + 4790: uint16(6954), + 4791: uint16(17970), + 4792: uint16(12047), + 4793: uint16(17971), + 4794: uint16(10557), + 4795: uint16(4923), + 4796: uint16(8195), + 4797: uint16(7223), + 4798: uint16(10320), + 4799: uint16(7181), + 4800: uint16(17972), + 4801: uint16(6193), + 4802: uint16(17973), + 4803: uint16(10027), + 4804: uint16(17987), + 4805: uint16(17975), + 4806: uint16(8488), + 4807: uint16(9812), + 4808: uint16(5918), + 4809: uint16(17974), + 4810: uint16(8196), + 4811: uint16(17976), + 4812: uint16(9049), + 4813: uint16(17978), + 4814: uint16(17977), + 4815: uint16(17980), + 4816: uint16(17979), + 4817: uint16(17981), + 4818: uint16(17983), + 4819: uint16(17982), + 4820: uint16(4910), + 4821: uint16(17984), + 4822: uint16(17985), + 4823: uint16(17986), + 4824: uint16(6416), + 4825: uint16(11560), + 4826: uint16(17988), + 4827: uint16(7686), + 4828: uint16(4175), + 4829: uint16(17989), + 4830: uint16(17990), + 4831: uint16(17991), + 4832: uint16(3921), + 4833: uint16(17992), + 4834: uint16(17993), + 4835: uint16(10310), + 4836: uint16(6950), + 4837: uint16(17995), + 4838: uint16(4616), + 4839: uint16(3857), + 4840: uint16(17994), + 4841: uint16(17997), + 4842: uint16(9773), + 4843: uint16(7715), + 4844: uint16(4405), + 4845: uint16(10758), + 4846: uint16(5692), + 4847: uint16(5435), + 4848: uint16(17996), + 4849: uint16(4425), + 4850: uint16(4866), + 4851: uint16(4176), + 4852: uint16(18001), + 4853: uint16(11593), + 4854: uint16(8508), + 4855: uint16(10275), + 4856: uint16(18013), + 4857: uint16(4406), + 4858: uint16(18011), + 4859: uint16(18009), + 4860: uint16(18000), + 4861: uint16(17998), + 4862: uint16(17999), + 4863: uint16(6978), + 4864: uint16(5451), + 4865: uint16(8790), + 4866: uint16(9520), + 4867: uint16(4144), + 4868: uint16(18003), + 4869: uint16(18002), + 4870: uint16(18008), + 4871: uint16(18004), + 4872: uint16(18007), + 4873: uint16(11055), + 4874: uint16(18006), + 4875: uint16(4407), + 4876: uint16(4700), + 4877: uint16(18010), + 4878: uint16(18012), + 4879: uint16(5683), + 4880: uint16(18178), + 4881: uint16(18187), + 4882: uint16(18188), + 4883: uint16(3850), + 4884: uint16(18195), + 4885: uint16(3920), + 4886: uint16(18186), + 4887: uint16(18185), + 4888: uint16(18180), + 4889: uint16(18179), + 4890: uint16(18177), + 4891: uint16(18176), + 4892: uint16(8770), + 4893: uint16(8538), + 4894: uint16(18182), + 4895: uint16(18181), + 4896: uint16(18184), + 4897: uint16(8271), + 4898: uint16(5684), + 4899: uint16(4128), + 4900: uint16(18183), + 4901: uint16(6194), + 4902: uint16(8272), + 4903: uint16(18201), + 4904: uint16(18202), + 4905: uint16(4408), + 4906: uint16(4365), + 4907: uint16(18199), + 4908: uint16(18189), + 4909: uint16(18197), + 4910: uint16(18204), + 4911: uint16(18198), + 4912: uint16(18196), + 4913: uint16(18005), + 4914: uint16(18194), + 4915: uint16(18190), + 4916: uint16(4911), + 4917: uint16(18192), + 4918: uint16(18203), + 4919: uint16(18193), + 4920: uint16(18205), + 4921: uint16(18191), + 4922: uint16(9819), + 4923: uint16(11336), + 4924: uint16(18200), + 4925: uint16(18222), + 4926: uint16(18214), + 4927: uint16(7770), + 4928: uint16(5157), + 4929: uint16(5436), + 4930: uint16(18209), + 4931: uint16(4410), + 4932: uint16(7475), + 4933: uint16(18212), + 4934: uint16(6457), + 4935: uint16(9264), + 4936: uint16(18217), + 4937: uint16(10573), + 4938: uint16(18208), + 4939: uint16(4409), + 4940: uint16(5941), + 4941: uint16(10248), + 4942: uint16(18218), + 4943: uint16(18206), + 4944: uint16(18215), + 4945: uint16(18225), + 4946: uint16(18210), + 4947: uint16(18211), + 4948: uint16(9497), + 4949: uint16(18216), + 4950: uint16(18213), + 4951: uint16(10759), + 4952: uint16(18219), + 4953: uint16(3903), + 4954: uint16(18207), + 4955: uint16(18221), + 4956: uint16(18220), + 4957: uint16(9802), + 4958: uint16(18227), + 4959: uint16(18238), + 4960: uint16(4701), + 4961: uint16(18241), + 4962: uint16(18223), + 4963: uint16(18228), + 4964: uint16(11341), + 4965: uint16(18237), + 4966: uint16(11316), + 4967: uint16(11529), + 4968: uint16(8791), + 4969: uint16(4682), + 4970: uint16(10321), + 4971: uint16(18243), + 4972: uint16(9472), + 4973: uint16(3856), + 4974: uint16(18236), + 4975: uint16(18232), + 4976: uint16(8273), + 4977: uint16(18226), + 4978: uint16(18234), + 4979: uint16(18239), + 4980: uint16(9739), + 4981: uint16(3849), + 4982: uint16(18231), + 4983: uint16(18240), + 4984: uint16(10327), + 4985: uint16(18235), + 4986: uint16(18230), + 4987: uint16(7476), + 4988: uint16(7182), + 4989: uint16(6923), + 4990: uint16(11063), + 4991: uint16(10278), + 4992: uint16(18246), + 4993: uint16(18255), + 4994: uint16(18233), + 4995: uint16(4694), + 4996: uint16(7511), + 4997: uint16(18244), + 4998: uint16(18249), + 4999: uint16(8274), + 5000: uint16(18245), + 5001: uint16(18252), + 5002: uint16(8766), + 5003: uint16(18253), + 5004: uint16(11317), + 5005: uint16(18242), + 5006: uint16(4631), + 5007: uint16(18248), + 5008: uint16(18251), + 5009: uint16(11019), + 5010: uint16(18254), + 5011: uint16(18247), + 5012: uint16(18250), + 5013: uint16(10760), + 5014: uint16(11776), + 5015: uint16(18258), + 5016: uint16(18265), + 5017: uint16(18257), + 5018: uint16(6946), + 5019: uint16(18224), + 5020: uint16(10541), + 5021: uint16(11009), + 5022: uint16(18264), + 5023: uint16(18263), + 5024: uint16(18259), + 5025: uint16(18260), + 5026: uint16(4117), + 5027: uint16(18262), + 5028: uint16(18256), + 5029: uint16(9012), + 5030: uint16(18261), + 5031: uint16(3933), + 5032: uint16(8449), + 5033: uint16(10530), + 5034: uint16(18266), + 5035: uint16(18432), + 5036: uint16(10040), + 5037: uint16(18269), + 5038: uint16(7477), + 5039: uint16(6952), + 5040: uint16(18434), + 5041: uint16(5405), + 5042: uint16(18435), + 5043: uint16(10328), + 5044: uint16(18268), + 5045: uint16(18229), + 5046: uint16(18267), + 5047: uint16(11822), + 5048: uint16(9473), + 5049: uint16(10322), + 5050: uint16(18442), + 5051: uint16(18448), + 5052: uint16(18449), + 5053: uint16(18436), + 5054: uint16(9813), + 5055: uint16(18446), + 5056: uint16(18438), + 5057: uint16(18440), + 5058: uint16(18450), + 5059: uint16(18439), + 5060: uint16(18443), + 5061: uint16(4177), + 5062: uint16(9540), + 5063: uint16(18444), + 5064: uint16(18447), + 5065: uint16(18437), + 5066: uint16(8197), + 5067: uint16(18441), + 5068: uint16(6662), + 5069: uint16(7716), + 5070: uint16(5647), + 5071: uint16(11091), + 5072: uint16(11096), + 5073: uint16(7249), + 5074: uint16(18454), + 5075: uint16(18452), + 5076: uint16(11821), + 5077: uint16(18451), + 5078: uint16(11348), + 5079: uint16(18453), + 5080: uint16(18455), + 5081: uint16(18456), + 5082: uint16(18459), + 5083: uint16(18457), + 5084: uint16(9474), + 5085: uint16(18458), + 5086: uint16(10028), + 5087: uint16(18445), + 5088: uint16(7250), + 5089: uint16(18460), + 5090: uint16(18465), + 5091: uint16(8275), + 5092: uint16(18464), + 5093: uint16(18433), + 5094: uint16(18466), + 5095: uint16(8232), + 5096: uint16(18461), + 5097: uint16(18463), + 5098: uint16(18462), + 5099: uint16(15376), + 5100: uint16(15361), + 5101: uint16(18468), + 5102: uint16(18467), + 5103: uint16(11349), + 5104: uint16(16667), + 5105: uint16(18469), + 5106: uint16(18470), + 5107: uint16(18471), + 5108: uint16(5942), + 5109: uint16(5171), + 5110: uint16(18473), + 5111: uint16(12348), + 5112: uint16(5204), + 5113: uint16(11545), + 5114: uint16(5458), + 5115: uint16(18474), + 5116: uint16(18475), + 5117: uint16(8781), + 5118: uint16(18476), + 5119: uint16(9561), + 5120: uint16(3865), + 5121: uint16(4418), + 5122: uint16(18481), + 5123: uint16(18482), + 5124: uint16(18477), + 5125: uint16(6684), + 5126: uint16(18478), + 5127: uint16(9761), + 5128: uint16(18479), + 5129: uint16(18480), + 5130: uint16(18490), + 5131: uint16(18484), + 5132: uint16(18487), + 5133: uint16(18483), + 5134: uint16(18485), + 5135: uint16(18486), + 5136: uint16(6967), + 5137: uint16(18488), + 5138: uint16(8736), + 5139: uint16(5685), + 5140: uint16(4641), + 5141: uint16(18491), + 5142: uint16(4638), + 5143: uint16(18496), + 5144: uint16(18492), + 5145: uint16(18495), + 5146: uint16(10009), + 5147: uint16(18493), + 5148: uint16(18494), + 5149: uint16(10279), + 5150: uint16(10041), + 5151: uint16(18497), + 5152: uint16(8540), + 5153: uint16(18507), + 5154: uint16(18503), + 5155: uint16(4426), + 5156: uint16(18501), + 5157: uint16(10761), + 5158: uint16(18502), + 5159: uint16(18499), + 5160: uint16(18500), + 5161: uint16(18505), + 5162: uint16(18508), + 5163: uint16(18506), + 5164: uint16(18504), + 5165: uint16(18498), + 5166: uint16(8759), + 5167: uint16(18515), + 5168: uint16(11017), + 5169: uint16(18513), + 5170: uint16(18514), + 5171: uint16(18509), + 5172: uint16(18511), + 5173: uint16(18512), + 5174: uint16(18510), + 5175: uint16(8005), + 5176: uint16(11800), + 5177: uint16(18519), + 5178: uint16(18520), + 5179: uint16(18688), + 5180: uint16(7689), + 5181: uint16(18522), + 5182: uint16(18525), + 5183: uint16(18517), + 5184: uint16(18516), + 5185: uint16(18689), + 5186: uint16(4411), + 5187: uint16(18523), + 5188: uint16(18690), + 5189: uint16(18524), + 5190: uint16(18521), + 5191: uint16(8978), + 5192: uint16(18518), + 5193: uint16(9799), + 5194: uint16(18694), + 5195: uint16(11290), + 5196: uint16(18693), + 5197: uint16(18692), + 5198: uint16(18701), + 5199: uint16(18695), + 5200: uint16(18703), + 5201: uint16(11333), + 5202: uint16(18706), + 5203: uint16(18697), + 5204: uint16(18698), + 5205: uint16(18702), + 5206: uint16(18705), + 5207: uint16(18704), + 5208: uint16(18696), + 5209: uint16(18699), + 5210: uint16(18716), + 5211: uint16(18709), + 5212: uint16(18707), + 5213: uint16(18708), + 5214: uint16(18713), + 5215: uint16(18714), + 5216: uint16(4617), + 5217: uint16(5153), + 5218: uint16(18712), + 5219: uint16(18691), + 5220: uint16(18711), + 5221: uint16(18715), + 5222: uint16(18710), + 5223: uint16(18717), + 5224: uint16(18719), + 5225: uint16(18718), + 5226: uint16(18721), + 5227: uint16(18720), + 5228: uint16(18489), + 5229: uint16(18725), + 5230: uint16(18722), + 5231: uint16(18723), + 5232: uint16(18724), + 5233: uint16(18726), + 5234: uint16(5707), + 5235: uint16(18728), + 5236: uint16(18727), + 5237: uint16(7183), + 5238: uint16(6195), + 5239: uint16(15622), + 5240: uint16(18729), + 5241: uint16(7216), + 5242: uint16(4632), + 5243: uint16(18730), + 5244: uint16(4145), + 5245: uint16(7478), + 5246: uint16(18731), + 5247: uint16(6196), + 5248: uint16(18732), + 5249: uint16(3904), + 5250: uint16(10268), + 5251: uint16(18733), + 5252: uint16(7753), + 5253: uint16(18740), + 5254: uint16(18737), + 5255: uint16(8782), + 5256: uint16(18738), + 5257: uint16(18735), + 5258: uint16(5437), + 5259: uint16(18734), + 5260: uint16(18741), + 5261: uint16(5653), + 5262: uint16(8509), + 5263: uint16(18747), + 5264: uint16(18743), + 5265: uint16(8468), + 5266: uint16(18742), + 5267: uint16(18745), + 5268: uint16(18736), + 5269: uint16(18746), + 5270: uint16(18748), + 5271: uint16(10062), + 5272: uint16(18744), + 5273: uint16(18749), + 5274: uint16(18751), + 5275: uint16(5938), + 5276: uint16(18739), + 5277: uint16(3872), + 5278: uint16(18750), + 5279: uint16(6458), + 5280: uint16(11605), + 5281: uint16(18752), + 5282: uint16(18753), + 5283: uint16(8276), + 5284: uint16(11521), + 5285: uint16(18754), + 5286: uint16(11284), + 5287: uint16(18755), + 5288: uint16(18756), + 5289: uint16(10563), + 5290: uint16(18757), + 5291: uint16(6431), + 5292: uint16(11522), + 5293: uint16(18762), + 5294: uint16(18763), + 5295: uint16(7479), + 5296: uint16(18761), + 5297: uint16(11334), + 5298: uint16(18758), + 5299: uint16(18760), + 5300: uint16(7964), + 5301: uint16(7773), + 5302: uint16(18759), + 5303: uint16(18764), + 5304: uint16(10498), + 5305: uint16(18766), + 5306: uint16(18765), + 5307: uint16(4683), + 5308: uint16(10762), + 5309: uint16(18767), + 5310: uint16(18779), + 5311: uint16(18769), + 5312: uint16(18770), + 5313: uint16(18771), + 5314: uint16(18772), + 5315: uint16(18776), + 5316: uint16(18777), + 5317: uint16(18775), + 5318: uint16(18773), + 5319: uint16(18768), + 5320: uint16(18774), + 5321: uint16(18778), + 5322: uint16(20246), + 5323: uint16(4359), + 5324: uint16(18781), + 5325: uint16(5438), + 5326: uint16(18780), + 5327: uint16(18945), + 5328: uint16(18944), + 5329: uint16(18947), + 5330: uint16(18946), + 5331: uint16(18948), + 5332: uint16(7184), + 5333: uint16(18949), + 5334: uint16(18950), + 5335: uint16(18951), + 5336: uint16(7965), + 5337: uint16(11318), + 5338: uint16(18952), + 5339: uint16(10499), + 5340: uint16(9765), + 5341: uint16(18953), + 5342: uint16(18954), + 5343: uint16(5898), + 5344: uint16(5131), + 5345: uint16(18955), + 5346: uint16(6730), + 5347: uint16(9760), + 5348: uint16(18956), + 5349: uint16(4655), + 5350: uint16(18957), + 5351: uint16(18959), + 5352: uint16(11350), + 5353: uint16(18958), + 5354: uint16(7717), + 5355: uint16(18960), + 5356: uint16(18961), + 5357: uint16(18962), + 5358: uint16(4912), + 5359: uint16(18963), + 5360: uint16(18964), + 5361: uint16(18965), + 5362: uint16(18966), + 5363: uint16(4656), + 5364: uint16(18967), + 5365: uint16(18968), + 5366: uint16(18969), + 5367: uint16(4433), + 5368: uint16(7687), + 5369: uint16(18970), + 5370: uint16(18971), + 5371: uint16(18972), + 5372: uint16(5919), + 5373: uint16(9050), + 5374: uint16(18973), + 5375: uint16(5686), + 5376: uint16(7733), + 5377: uint16(18976), + 5378: uint16(9475), + 5379: uint16(18975), + 5380: uint16(5648), + 5381: uint16(18974), + 5382: uint16(8534), + 5383: uint16(5132), + 5384: uint16(18977), + 5385: uint16(18978), + 5386: uint16(7480), + 5387: uint16(5708), + 5388: uint16(18979), + 5389: uint16(10763), + 5390: uint16(7998), + 5391: uint16(5205), + 5392: uint16(11092), + 5393: uint16(8233), + 5394: uint16(18980), + 5395: uint16(7718), + 5396: uint16(8783), + 5397: uint16(7481), + 5398: uint16(18981), + 5399: uint16(18984), + 5400: uint16(18985), + 5401: uint16(6429), + 5402: uint16(8481), + 5403: uint16(18983), + 5404: uint16(7482), + 5405: uint16(10269), + 5406: uint16(18982), + 5407: uint16(6731), + 5408: uint16(4146), + 5409: uint16(18989), + 5410: uint16(5687), + 5411: uint16(6733), + 5412: uint16(6732), + 5413: uint16(11820), + 5414: uint16(18988), + 5415: uint16(18987), + 5416: uint16(8198), + 5417: uint16(5164), + 5418: uint16(11810), + 5419: uint16(4633), + 5420: uint16(7483), + 5421: uint16(18986), + 5422: uint16(18991), + 5423: uint16(18992), + 5424: uint16(18990), + 5425: uint16(5943), + 5426: uint16(11295), + 5427: uint16(6734), + 5428: uint16(9734), + 5429: uint16(18995), + 5430: uint16(7967), + 5431: uint16(8737), + 5432: uint16(11285), + 5433: uint16(18998), + 5434: uint16(5963), + 5435: uint16(7966), + 5436: uint16(18994), + 5437: uint16(18999), + 5438: uint16(5964), + 5439: uint16(18996), + 5440: uint16(18997), + 5441: uint16(18993), + 5442: uint16(8001), + 5443: uint16(9512), + 5444: uint16(8718), + 5445: uint16(4412), + 5446: uint16(10063), + 5447: uint16(5154), + 5448: uint16(8979), + 5449: uint16(19002), + 5450: uint16(19000), + 5451: uint16(8747), + 5452: uint16(7968), + 5453: uint16(4913), + 5454: uint16(19001), + 5455: uint16(7738), + 5456: uint16(11561), + 5457: uint16(11807), + 5458: uint16(19003), + 5459: uint16(19014), + 5460: uint16(8980), + 5461: uint16(19013), + 5462: uint16(19010), + 5463: uint16(19018), + 5464: uint16(19011), + 5465: uint16(19007), + 5466: uint16(9051), + 5467: uint16(19006), + 5468: uint16(19004), + 5469: uint16(11264), + 5470: uint16(6735), + 5471: uint16(19008), + 5472: uint16(19005), + 5473: uint16(19012), + 5474: uint16(7251), + 5475: uint16(5920), + 5476: uint16(8537), + 5477: uint16(10788), + 5478: uint16(4153), + 5479: uint16(3905), + 5480: uint16(9476), + 5481: uint16(19016), + 5482: uint16(19015), + 5483: uint16(9541), + 5484: uint16(19020), + 5485: uint16(19009), + 5486: uint16(19019), + 5487: uint16(19021), + 5488: uint16(5899), + 5489: uint16(19017), + 5490: uint16(6197), + 5491: uint16(6964), + 5492: uint16(19022), + 5493: uint16(11319), + 5494: uint16(19025), + 5495: uint16(19028), + 5496: uint16(19026), + 5497: uint16(10260), + 5498: uint16(19023), + 5499: uint16(5439), + 5500: uint16(19027), + 5501: uint16(19029), + 5502: uint16(19033), + 5503: uint16(19030), + 5504: uint16(19032), + 5505: uint16(19031), + 5506: uint16(19034), + 5507: uint16(6928), + 5508: uint16(19036), + 5509: uint16(19035), + 5510: uint16(10311), + 5511: uint16(19200), + 5512: uint16(5688), + 5513: uint16(19037), + 5514: uint16(19201), + 5515: uint16(19202), + 5516: uint16(5155), + 5517: uint16(17696), + 5518: uint16(7512), + 5519: uint16(19203), + 5520: uint16(5965), + 5521: uint16(19204), + 5522: uint16(19205), + 5523: uint16(6685), + 5524: uint16(14637), + 5525: uint16(19206), + 5526: uint16(19207), + 5527: uint16(7185), + 5528: uint16(19208), + 5529: uint16(19209), + 5530: uint16(19210), + 5531: uint16(19211), + 5532: uint16(19212), + 5533: uint16(8714), + 5534: uint16(19213), + 5535: uint16(19215), + 5536: uint16(19214), + 5537: uint16(9477), + 5538: uint16(19216), + 5539: uint16(10764), + 5540: uint16(19217), + 5541: uint16(19218), + 5542: uint16(19219), + 5543: uint16(19220), + 5544: uint16(9529), + 5545: uint16(7484), + 5546: uint16(19221), + 5547: uint16(6218), + 5548: uint16(12045), + 5549: uint16(19222), + 5550: uint16(19223), + 5551: uint16(10270), + 5552: uint16(19224), + 5553: uint16(19232), + 5554: uint16(19225), + 5555: uint16(19227), + 5556: uint16(19226), + 5557: uint16(19228), + 5558: uint16(10789), + 5559: uint16(19229), + 5560: uint16(19230), + 5561: uint16(19231), + 5562: uint16(19233), + 5563: uint16(4620), + 5564: uint16(9030), + 5565: uint16(10312), + 5566: uint16(6465), + 5567: uint16(6198), + 5568: uint16(10286), + 5569: uint16(4414), + 5570: uint16(10029), + 5571: uint16(19236), + 5572: uint16(4914), + 5573: uint16(7988), + 5574: uint16(19235), + 5575: uint16(19240), + 5576: uint16(8792), + 5577: uint16(11074), + 5578: uint16(19238), + 5579: uint16(19239), + 5580: uint16(5133), + 5581: uint16(19241), + 5582: uint16(9794), + 5583: uint16(8510), + 5584: uint16(10064), + 5585: uint16(9244), + 5586: uint16(19237), + 5587: uint16(10790), + 5588: uint16(4427), + 5589: uint16(19243), + 5590: uint16(11783), + 5591: uint16(8993), + 5592: uint16(11812), + 5593: uint16(6736), + 5594: uint16(19242), + 5595: uint16(8464), + 5596: uint16(19259), + 5597: uint16(8199), + 5598: uint16(9559), + 5599: uint16(10287), + 5600: uint16(19246), + 5601: uint16(6686), + 5602: uint16(6737), + 5603: uint16(7485), + 5604: uint16(9796), + 5605: uint16(5900), + 5606: uint16(19245), + 5607: uint16(19244), + 5608: uint16(10313), + 5609: uint16(6944), + 5610: uint16(9265), + 5611: uint16(19248), + 5612: uint16(19249), + 5613: uint16(6199), + 5614: uint16(19247), + 5615: uint16(19250), + 5616: uint16(19251), + 5617: uint16(19253), + 5618: uint16(8450), + 5619: uint16(19252), + 5620: uint16(4933), + 5621: uint16(19255), + 5622: uint16(19254), + 5623: uint16(19256), + 5624: uint16(19258), + 5625: uint16(19260), + 5626: uint16(19261), + 5627: uint16(7989), + 5628: uint16(6958), + 5629: uint16(19262), + 5630: uint16(4657), + 5631: uint16(19263), + 5632: uint16(8277), + 5633: uint16(19264), + 5634: uint16(19265), + 5635: uint16(10314), + 5636: uint16(5134), + 5637: uint16(19266), + 5638: uint16(8981), + 5639: uint16(4154), + 5640: uint16(19267), + 5641: uint16(6992), + 5642: uint16(7765), + 5643: uint16(8460), + 5644: uint16(19270), + 5645: uint16(19269), + 5646: uint16(19268), + 5647: uint16(19276), + 5648: uint16(19274), + 5649: uint16(19271), + 5650: uint16(19273), + 5651: uint16(19272), + 5652: uint16(19275), + 5653: uint16(5206), + 5654: uint16(19279), + 5655: uint16(7990), + 5656: uint16(19280), + 5657: uint16(5944), + 5658: uint16(19277), + 5659: uint16(19278), + 5660: uint16(11784), + 5661: uint16(8982), + 5662: uint16(8200), + 5663: uint16(19281), + 5664: uint16(19284), + 5665: uint16(19282), + 5666: uint16(19283), + 5667: uint16(11320), + 5668: uint16(9478), + 5669: uint16(19287), + 5670: uint16(19285), + 5671: uint16(19286), + 5672: uint16(19288), + 5673: uint16(19464), + 5674: uint16(19291), + 5675: uint16(19292), + 5676: uint16(19290), + 5677: uint16(19289), + 5678: uint16(9052), + 5679: uint16(19456), + 5680: uint16(19460), + 5681: uint16(19457), + 5682: uint16(19293), + 5683: uint16(19458), + 5684: uint16(19459), + 5685: uint16(19466), + 5686: uint16(19461), + 5687: uint16(7991), + 5688: uint16(19463), + 5689: uint16(19465), + 5690: uint16(19462), + 5691: uint16(19468), + 5692: uint16(7186), + 5693: uint16(19467), + 5694: uint16(19469), + 5695: uint16(19470), + 5696: uint16(19473), + 5697: uint16(19472), + 5698: uint16(19471), + 5699: uint16(19475), + 5700: uint16(19474), + 5701: uint16(11093), + 5702: uint16(19477), + 5703: uint16(19476), + 5704: uint16(19478), + 5705: uint16(19479), + 5706: uint16(19481), + 5707: uint16(19480), + 5708: uint16(7719), + 5709: uint16(19482), + 5710: uint16(5452), + 5711: uint16(19483), + 5712: uint16(19485), + 5713: uint16(19486), + 5714: uint16(19487), + 5715: uint16(19484), + 5716: uint16(19488), + 5717: uint16(6965), + 5718: uint16(19489), + 5719: uint16(5135), + 5720: uint16(5650), + 5721: uint16(5901), + 5722: uint16(19490), + 5723: uint16(9551), + 5724: uint16(9245), + 5725: uint16(19491), + 5726: uint16(19494), + 5727: uint16(6931), + 5728: uint16(19493), + 5729: uint16(19492), + 5730: uint16(5689), + 5731: uint16(19495), + 5732: uint16(4658), + 5733: uint16(19497), + 5734: uint16(6459), + 5735: uint16(19496), + 5736: uint16(19505), + 5737: uint16(19499), + 5738: uint16(19501), + 5739: uint16(10564), + 5740: uint16(19498), + 5741: uint16(19500), + 5742: uint16(19504), + 5743: uint16(19502), + 5744: uint16(5136), + 5745: uint16(19503), + 5746: uint16(19506), + 5747: uint16(9785), + 5748: uint16(11575), + 5749: uint16(7187), + 5750: uint16(19507), + 5751: uint16(11265), + 5752: uint16(19509), + 5753: uint16(19508), + 5754: uint16(19512), + 5755: uint16(11296), + 5756: uint16(19511), + 5757: uint16(4684), + 5758: uint16(19510), + 5759: uint16(19515), + 5760: uint16(19514), + 5761: uint16(19513), + 5762: uint16(9233), + 5763: uint16(19516), + 5764: uint16(19517), + 5765: uint16(19518), + 5766: uint16(6219), + 5767: uint16(5636), + 5768: uint16(19519), + 5769: uint16(19520), + 5770: uint16(19521), + 5771: uint16(7720), + 5772: uint16(19522), + 5773: uint16(6924), + 5774: uint16(19523), + 5775: uint16(19524), + 5776: uint16(12544), + 5777: uint16(12381), + 5778: uint16(19525), + 5779: uint16(17487), + 5780: uint16(19526), + 5781: uint16(8707), + 5782: uint16(7690), + 5783: uint16(9759), + 5784: uint16(19527), + 5785: uint16(10548), + 5786: uint16(9011), + 5787: uint16(6237), + 5788: uint16(8712), + 5789: uint16(4105), + 5790: uint16(10839), + 5791: uint16(7734), + 5792: uint16(5693), + 5793: uint16(5440), + 5794: uint16(10549), + 5795: uint16(19528), + 5796: uint16(19530), + 5797: uint16(19529), + 5798: uint16(4415), + 5799: uint16(9557), + 5800: uint16(19531), + 5801: uint16(9814), + 5802: uint16(9234), + 5803: uint16(19532), + 5804: uint16(7217), + 5805: uint16(19534), + 5806: uint16(11041), + 5807: uint16(19549), + 5808: uint16(19536), + 5809: uint16(19537), + 5810: uint16(9000), + 5811: uint16(8511), + 5812: uint16(8278), + 5813: uint16(9479), + 5814: uint16(19535), + 5815: uint16(5172), + 5816: uint16(19544), + 5817: uint16(19541), + 5818: uint16(19716), + 5819: uint16(9480), + 5820: uint16(8767), + 5821: uint16(19538), + 5822: uint16(9053), + 5823: uint16(9266), + 5824: uint16(19539), + 5825: uint16(19543), + 5826: uint16(7743), + 5827: uint16(9798), + 5828: uint16(9003), + 5829: uint16(7969), + 5830: uint16(19542), + 5831: uint16(8461), + 5832: uint16(8451), + 5833: uint16(19540), + 5834: uint16(3848), + 5835: uint16(11777), + 5836: uint16(19545), + 5837: uint16(8512), + 5838: uint16(7188), + 5839: uint16(7721), + 5840: uint16(19547), + 5841: uint16(19546), + 5842: uint16(3918), + 5843: uint16(19548), + 5844: uint16(10254), + 5845: uint16(19718), + 5846: uint16(9530), + 5847: uint16(7754), + 5848: uint16(8760), + 5849: uint16(5463), + 5850: uint16(19717), + 5851: uint16(11286), + 5852: uint16(4126), + 5853: uint16(10550), + 5854: uint16(4416), + 5855: uint16(19712), + 5856: uint16(19713), + 5857: uint16(19714), + 5858: uint16(19715), + 5859: uint16(9498), + 5860: uint16(8706), + 5861: uint16(3906), + 5862: uint16(19719), + 5863: uint16(19720), + 5864: uint16(21250), + 5865: uint16(8476), + 5866: uint16(19721), + 5867: uint16(4178), + 5868: uint16(8235), + 5869: uint16(5902), + 5870: uint16(11321), + 5871: uint16(19722), + 5872: uint16(9227), + 5873: uint16(8279), + 5874: uint16(6966), + 5875: uint16(19723), + 5876: uint16(19726), + 5877: uint16(7236), + 5878: uint16(19724), + 5879: uint16(8202), + 5880: uint16(8201), + 5881: uint16(3907), + 5882: uint16(11562), + 5883: uint16(19728), + 5884: uint16(10065), + 5885: uint16(19730), + 5886: uint16(19729), + 5887: uint16(19727), + 5888: uint16(16963), + 5889: uint16(4915), + 5890: uint16(19533), + 5891: uint16(19732), + 5892: uint16(19731), + 5893: uint16(19733), + 5894: uint16(11287), + 5895: uint16(9536), + 5896: uint16(10765), + 5897: uint16(19734), + 5898: uint16(6968), + 5899: uint16(19735), + 5900: uint16(19736), + 5901: uint16(19737), + 5902: uint16(9216), + 5903: uint16(3913), + 5904: uint16(6200), + 5905: uint16(11801), + 5906: uint16(19741), + 5907: uint16(5651), + 5908: uint16(19738), + 5909: uint16(19739), + 5910: uint16(10323), + 5911: uint16(4659), + 5912: uint16(11288), + 5913: uint16(5406), + 5914: uint16(9267), + 5915: uint16(19742), + 5916: uint16(19743), + 5917: uint16(19744), + 5918: uint16(9217), + 5919: uint16(19746), + 5920: uint16(19745), + 5921: uint16(9522), + 5922: uint16(19747), + 5923: uint16(7189), + 5924: uint16(6975), + 5925: uint16(9786), + 5926: uint16(8784), + 5927: uint16(6993), + 5928: uint16(7755), + 5929: uint16(19748), + 5930: uint16(19749), + 5931: uint16(7740), + 5932: uint16(19750), + 5933: uint16(19751), + 5934: uint16(19752), + 5935: uint16(11342), + 5936: uint16(7190), + 5937: uint16(19754), + 5938: uint16(19753), + 5939: uint16(6201), + 5940: uint16(6226), + 5941: uint16(6687), + 5942: uint16(19757), + 5943: uint16(7237), + 5944: uint16(19756), + 5945: uint16(19755), + 5946: uint16(8520), + 5947: uint16(5966), + 5948: uint16(7970), + 5949: uint16(9999), + 5950: uint16(7192), + 5951: uint16(19758), + 5952: uint16(7486), + 5953: uint16(19761), + 5954: uint16(19759), + 5955: uint16(19760), + 5956: uint16(19763), + 5957: uint16(19762), + 5958: uint16(7513), + 5959: uint16(19764), + 5960: uint16(19765), + 5961: uint16(19766), + 5962: uint16(10031), + 5963: uint16(6450), + 5964: uint16(6976), + 5965: uint16(19767), + 5966: uint16(19768), + 5967: uint16(11523), + 5968: uint16(7204), + 5969: uint16(11085), + 5970: uint16(11563), + 5971: uint16(19769), + 5972: uint16(5441), + 5973: uint16(19770), + 5974: uint16(9218), + 5975: uint16(19773), + 5976: uint16(4695), + 5977: uint16(7722), + 5978: uint16(19771), + 5979: uint16(19772), + 5980: uint16(9023), + 5981: uint16(10804), + 5982: uint16(5467), + 5983: uint16(19775), + 5984: uint16(19776), + 5985: uint16(19774), + 5986: uint16(19778), + 5987: uint16(9534), + 5988: uint16(4642), + 5989: uint16(19782), + 5990: uint16(19779), + 5991: uint16(19781), + 5992: uint16(19777), + 5993: uint16(20014), + 5994: uint16(19780), + 5995: uint16(11594), + 5996: uint16(5945), + 5997: uint16(19790), + 5998: uint16(9235), + 5999: uint16(19785), + 6000: uint16(19788), + 6001: uint16(19786), + 6002: uint16(19791), + 6003: uint16(19792), + 6004: uint16(19784), + 6005: uint16(19797), + 6006: uint16(4179), + 6007: uint16(19783), + 6008: uint16(9996), + 6009: uint16(19787), + 6010: uint16(7487), + 6011: uint16(6202), + 6012: uint16(10791), + 6013: uint16(5443), + 6014: uint16(7205), + 6015: uint16(9499), + 6016: uint16(8204), + 6017: uint16(19795), + 6018: uint16(19789), + 6019: uint16(19794), + 6020: uint16(11042), + 6021: uint16(8983), + 6022: uint16(19796), + 6023: uint16(19793), + 6024: uint16(8203), + 6025: uint16(19800), + 6026: uint16(19799), + 6027: uint16(19798), + 6028: uint16(10766), + 6029: uint16(7258), + 6030: uint16(19801), + 6031: uint16(10558), + 6032: uint16(4147), + 6033: uint16(10277), + 6034: uint16(8785), + 6035: uint16(5207), + 6036: uint16(19803), + 6037: uint16(6204), + 6038: uint16(6667), + 6039: uint16(19802), + 6040: uint16(7756), + 6041: uint16(7757), + 6042: uint16(19968), + 6043: uint16(19970), + 6044: uint16(7514), + 6045: uint16(19969), + 6046: uint16(19971), + 6047: uint16(5426), + 6048: uint16(10276), + 6049: uint16(6977), + 6050: uint16(11778), + 6051: uint16(19805), + 6052: uint16(6487), + 6053: uint16(11806), + 6054: uint16(19973), + 6055: uint16(19972), + 6056: uint16(19974), + 6057: uint16(19804), + 6058: uint16(9544), + 6059: uint16(9268), + 6060: uint16(9014), + 6061: uint16(19979), + 6062: uint16(8738), + 6063: uint16(19975), + 6064: uint16(19976), + 6065: uint16(5644), + 6066: uint16(19978), + 6067: uint16(5903), + 6068: uint16(19977), + 6069: uint16(7488), + 6070: uint16(4696), + 6071: uint16(19983), + 6072: uint16(6430), + 6073: uint16(8280), + 6074: uint16(9001), + 6075: uint16(4634), + 6076: uint16(19981), + 6077: uint16(19982), + 6078: uint16(8994), + 6079: uint16(19980), + 6080: uint16(19984), + 6081: uint16(19990), + 6082: uint16(19993), + 6083: uint16(19992), + 6084: uint16(9228), + 6085: uint16(19985), + 6086: uint16(19986), + 6087: uint16(19989), + 6088: uint16(19991), + 6089: uint16(5407), + 6090: uint16(19994), + 6091: uint16(19988), + 6092: uint16(19987), + 6093: uint16(19998), + 6094: uint16(19999), + 6095: uint16(20000), + 6096: uint16(19997), + 6097: uint16(19996), + 6098: uint16(7489), + 6099: uint16(9481), + 6100: uint16(19995), + 6101: uint16(20004), + 6102: uint16(20002), + 6103: uint16(20003), + 6104: uint16(20001), + 6105: uint16(8535), + 6106: uint16(20005), + 6107: uint16(20006), + 6108: uint16(20008), + 6109: uint16(4916), + 6110: uint16(20007), + 6111: uint16(11097), + 6112: uint16(20019), + 6113: uint16(20009), + 6114: uint16(20012), + 6115: uint16(20010), + 6116: uint16(20011), + 6117: uint16(20013), + 6118: uint16(20015), + 6119: uint16(20016), + 6120: uint16(20017), + 6121: uint16(20020), + 6122: uint16(20018), + 6123: uint16(20021), + 6124: uint16(20023), + 6125: uint16(20022), + 6126: uint16(8984), + 6127: uint16(11078), + 6128: uint16(20024), + 6129: uint16(8205), + 6130: uint16(20025), + 6131: uint16(10531), + 6132: uint16(20026), + 6133: uint16(4618), + 6134: uint16(4123), + 6135: uint16(4918), + 6136: uint16(4917), + 6137: uint16(20027), + 6138: uint16(20028), + 6139: uint16(20029), + 6140: uint16(20030), + 6141: uint16(20031), + 6142: uint16(4919), + 6143: uint16(4660), + 6144: uint16(6205), + 6145: uint16(10005), + 6146: uint16(20033), + 6147: uint16(20032), + 6148: uint16(20034), + 6149: uint16(4155), + 6150: uint16(20037), + 6151: uint16(20036), + 6152: uint16(20035), + 6153: uint16(20038), + 6154: uint16(20041), + 6155: uint16(3878), + 6156: uint16(20039), + 6157: uint16(20043), + 6158: uint16(20042), + 6159: uint16(20045), + 6160: uint16(20044), + 6161: uint16(20046), + 6162: uint16(9485), + 6163: uint16(20047), + 6164: uint16(20048), + 6165: uint16(20050), + 6166: uint16(20049), + 6167: uint16(10315), + 6168: uint16(20051), + 6169: uint16(20052), + 6170: uint16(6468), + 6171: uint16(20053), + 6172: uint16(20054), + 6173: uint16(10792), + 6174: uint16(8234), + 6175: uint16(3843), + 6176: uint16(8490), + 6177: uint16(20055), + 6178: uint16(10316), + 6179: uint16(20058), + 6180: uint16(20056), + 6181: uint16(6206), + 6182: uint16(20057), + 6183: uint16(5921), + 6184: uint16(10532), + 6185: uint16(20060), + 6186: uint16(20224), + 6187: uint16(20061), + 6188: uint16(20225), + 6189: uint16(4096), + 6190: uint16(7735), + 6191: uint16(7259), + 6192: uint16(4920), + 6193: uint16(20226), + 6194: uint16(9797), + 6195: uint16(20228), + 6196: uint16(4097), + 6197: uint16(20227), + 6198: uint16(8995), + 6199: uint16(11564), + 6200: uint16(9482), + 6201: uint16(20059), + 6202: uint16(11525), + 6203: uint16(5904), + 6204: uint16(11322), + 6205: uint16(5464), + 6206: uint16(11539), + 6207: uint16(5639), + 6208: uint16(8513), + 6209: uint16(17920), + 6210: uint16(20229), + 6211: uint16(4619), + 6212: uint16(7758), + 6213: uint16(4661), + 6214: uint16(20231), + 6215: uint16(20232), + 6216: uint16(20230), + 6217: uint16(5699), + 6218: uint16(6460), + 6219: uint16(7490), + 6220: uint16(4098), + 6221: uint16(11576), + 6222: uint16(20234), + 6223: uint16(19725), + 6224: uint16(20233), + 6225: uint16(20237), + 6226: uint16(20235), + 6227: uint16(20236), + 6228: uint16(20238), + 6229: uint16(20239), + 6230: uint16(11595), + 6231: uint16(20240), + 6232: uint16(20241), + 6233: uint16(7976), + 6234: uint16(10010), + 6235: uint16(7772), + 6236: uint16(4934), + 6237: uint16(11289), + 6238: uint16(4428), + 6239: uint16(7191), + 6240: uint16(5946), + 6241: uint16(20244), + 6242: uint16(20243), + 6243: uint16(6738), + 6244: uint16(20245), + 6245: uint16(20242), + 6246: uint16(6663), + 6247: uint16(20249), + 6248: uint16(18700), + 6249: uint16(12597), + 6250: uint16(7766), + 6251: uint16(20247), + 6252: uint16(11524), + 6253: uint16(9552), + 6254: uint16(4106), + 6255: uint16(8002), + 6256: uint16(6933), + 6257: uint16(10518), + 6258: uint16(4127), + 6259: uint16(11596), + 6260: uint16(11338), + 6261: uint16(20250), + 6262: uint16(9252), + 6263: uint16(7002), + 6264: uint16(20251), + 6265: uint16(20252), + 6266: uint16(7723), + 6267: uint16(20253), + 6268: uint16(11597), + 6269: uint16(20248), + 6270: uint16(20255), + 6271: uint16(20257), + 6272: uint16(20256), + 6273: uint16(20254), + 6274: uint16(20258), + 6275: uint16(20259), + 6276: uint16(8281), + 6277: uint16(4417), + 6278: uint16(20260), + 6279: uint16(11031), + 6280: uint16(20261), + 6281: uint16(20262), + 6282: uint16(11785), + 6283: uint16(14864), + 6284: uint16(20263), + 6285: uint16(20264), + 6286: uint16(20265), + 6287: uint16(20269), + 6288: uint16(20266), + 6289: uint16(20267), + 6290: uint16(20268), + 6291: uint16(20270), + 6292: uint16(7971), + 6293: uint16(11094), + 6294: uint16(7972), + 6295: uint16(20271), + 6296: uint16(10066), + 6297: uint16(20272), + 6298: uint16(21042), + 6299: uint16(11051), + 6300: uint16(20273), + 6301: uint16(20274), + 6302: uint16(20275), + 6303: uint16(4662), + 6304: uint16(20277), + 6305: uint16(7736), + 6306: uint16(20278), + 6307: uint16(5635), + 6308: uint16(20279), + 6309: uint16(20283), + 6310: uint16(20281), + 6311: uint16(20282), + 6312: uint16(4690), + 6313: uint16(20280), + 6314: uint16(20284), + 6315: uint16(20285), + 6316: uint16(3879), + 6317: uint16(20286), + 6318: uint16(20287), + 6319: uint16(7491), + 6320: uint16(20288), + 6321: uint16(5158), + 6322: uint16(20291), + 6323: uint16(20290), + 6324: uint16(20289), + 6325: uint16(19024), + 6326: uint16(10555), + 6327: uint16(20292), + 6328: uint16(20293), + 6329: uint16(20294), + 6330: uint16(20295), + 6331: uint16(20296), + 6332: uint16(20297), + 6333: uint16(4921), + 6334: uint16(20298), + 6335: uint16(20299), + 6336: uint16(9730), + 6337: uint16(20301), + 6338: uint16(4378), + 6339: uint16(20304), + 6340: uint16(20303), + 6341: uint16(4099), + 6342: uint16(5408), + 6343: uint16(10534), + 6344: uint16(8985), + 6345: uint16(6401), + 6346: uint16(6207), + 6347: uint16(7238), + 6348: uint16(7739), + 6349: uint16(20306), + 6350: uint16(20305), + 6351: uint16(11297), + 6352: uint16(4935), + 6353: uint16(10033), + 6354: uint16(9531), + 6355: uint16(7771), + 6356: uint16(11565), + 6357: uint16(5690), + 6358: uint16(20309), + 6359: uint16(20308), + 6360: uint16(10794), + 6361: uint16(9483), + 6362: uint16(4143), + 6363: uint16(20310), + 6364: uint16(20307), + 6365: uint16(10288), + 6366: uint16(11337), + 6367: uint16(20311), + 6368: uint16(20312), + 6369: uint16(20314), + 6370: uint16(8521), + 6371: uint16(4666), + 6372: uint16(4667), + 6373: uint16(20313), + 6374: uint16(4936), + 6375: uint16(5905), + 6376: uint16(4937), + 6377: uint16(9246), + 6378: uint16(11583), + 6379: uint16(5947), + 6380: uint16(20315), + 6381: uint16(20316), + 6382: uint16(20317), + 6383: uint16(20480), + 6384: uint16(20482), + 6385: uint16(20481), + 6386: uint16(10326), + 6387: uint16(20483), + 6388: uint16(20484), + 6389: uint16(20485), + 6390: uint16(20486), + 6391: uint16(20488), + 6392: uint16(20487), + 6393: uint16(20489), + 6394: uint16(10067), + 6395: uint16(17707), + 6396: uint16(7688), + 6397: uint16(5137), + 6398: uint16(20490), + 6399: uint16(20491), + 6400: uint16(12555), + 6401: uint16(15386), + 6402: uint16(10034), + 6403: uint16(3930), + 6404: uint16(3866), + 6405: uint16(6739), + 6406: uint16(10767), + 6407: uint16(7517), + 6408: uint16(20492), + 6409: uint16(11070), + 6410: uint16(20493), + 6411: uint16(11323), + 6412: uint16(4129), + 6413: uint16(6688), + 6414: uint16(20494), + 6415: uint16(4429), + 6416: uint16(20495), + 6417: uint16(20496), + 6418: uint16(20498), + 6419: uint16(20499), + 6420: uint16(20501), + 6421: uint16(20497), + 6422: uint16(20500), + 6423: uint16(4922), + 6424: uint16(20502), + 6425: uint16(20503), + 6426: uint16(20504), + 6427: uint16(20505), + 6428: uint16(20506), + 6429: uint16(20508), + 6430: uint16(20507), + 6431: uint16(20510), + 6432: uint16(20513), + 6433: uint16(20509), + 6434: uint16(20511), + 6435: uint16(20512), + 6436: uint16(20514), + 6437: uint16(5409), + 6438: uint16(6994), + 6439: uint16(20515), + 6440: uint16(20516), + 6441: uint16(6208), + 6442: uint16(20517), + 6443: uint16(4637), + 6444: uint16(9774), + 6445: uint16(20518), + 6446: uint16(20519), + 6447: uint16(8761), + 6448: uint16(9546), + 6449: uint16(20520), + 6450: uint16(9820), + 6451: uint16(8491), + 6452: uint16(4151), + 6453: uint16(5453), + 6454: uint16(5454), + 6455: uint16(8786), + 6456: uint16(20525), + 6457: uint16(5455), + 6458: uint16(4430), + 6459: uint16(20524), + 6460: uint16(20522), + 6461: uint16(20523), + 6462: uint16(20521), + 6463: uint16(20535), + 6464: uint16(20526), + 6465: uint16(20527), + 6466: uint16(20528), + 6467: uint16(20529), + 6468: uint16(20531), + 6469: uint16(20530), + 6470: uint16(7224), + 6471: uint16(20532), + 6472: uint16(20534), + 6473: uint16(5138), + 6474: uint16(20533), + 6475: uint16(8282), + 6476: uint16(5906), + 6477: uint16(20536), + 6478: uint16(8492), + 6479: uint16(20537), + 6480: uint16(9484), + 6481: uint16(20538), + 6482: uint16(20543), + 6483: uint16(20541), + 6484: uint16(20540), + 6485: uint16(20542), + 6486: uint16(20539), + 6487: uint16(20545), + 6488: uint16(20544), + 6489: uint16(20547), + 6490: uint16(5410), + 6491: uint16(20546), + 6492: uint16(20548), + 6493: uint16(20549), + 6494: uint16(20551), + 6495: uint16(20550), + 6496: uint16(20552), + 6497: uint16(20554), + 6498: uint16(20553), + 6499: uint16(6235), + 6500: uint16(20555), + 6501: uint16(20556), + 6502: uint16(4635), + 6503: uint16(20557), + 6504: uint16(20558), + 6505: uint16(7760), + 6506: uint16(20559), + 6507: uint16(20560), + 6508: uint16(20561), + 6509: uint16(20562), + 6510: uint16(6209), + 6511: uint16(20563), + 6512: uint16(20564), + 6513: uint16(20565), + 6514: uint16(20566), + 6515: uint16(20567), + 6516: uint16(10000), + 6517: uint16(20569), + 6518: uint16(10245), + 6519: uint16(20570), + 6520: uint16(20568), + 6521: uint16(20572), + 6522: uint16(20571), + 6523: uint16(20573), + 6524: uint16(20736), + 6525: uint16(20737), + 6526: uint16(20738), + 6527: uint16(20739), + 6528: uint16(20740), + 6529: uint16(20741), + 6530: uint16(20742), + 6531: uint16(20743), + 6532: uint16(20744), + 6533: uint16(20745), + 6534: uint16(20746), + 6535: uint16(20747), + 6536: uint16(20748), + 6537: uint16(20749), + 6538: uint16(15380), + 6539: uint16(20750), + 6540: uint16(17239), + 6541: uint16(5139), + 6542: uint16(4608), + 6543: uint16(6417), + 6544: uint16(20752), + 6545: uint16(20751), + 6546: uint16(11012), + 6547: uint16(20754), + 6548: uint16(20755), + 6549: uint16(20753), + 6550: uint16(20756), + 6551: uint16(10817), + 6552: uint16(20757), + 6553: uint16(5210), + 6554: uint16(11780), + 6555: uint16(20758), + 6556: uint16(20760), + 6557: uint16(3869), + 6558: uint16(20761), + 6559: uint16(10506), + 6560: uint16(20759), + 6561: uint16(20762), + 6562: uint16(20763), + 6563: uint16(20764), + 6564: uint16(20765), + 6565: uint16(20766), + 6566: uint16(10829), + 6567: uint16(6668), + 6568: uint16(6489), + 6569: uint16(8206), + 6570: uint16(20767), + 6571: uint16(20770), + 6572: uint16(20768), + 6573: uint16(20771), + 6574: uint16(5968), + 6575: uint16(20769), + 6576: uint16(20772), + 6577: uint16(20773), + 6578: uint16(20774), + 6579: uint16(20778), + 6580: uint16(6665), + 6581: uint16(8515), + 6582: uint16(20779), + 6583: uint16(20776), + 6584: uint16(20775), + 6585: uint16(20777), + 6586: uint16(5694), + 6587: uint16(20783), + 6588: uint16(20782), + 6589: uint16(20781), + 6590: uint16(3858), + 6591: uint16(20793), + 6592: uint16(20789), + 6593: uint16(20790), + 6594: uint16(20786), + 6595: uint16(20792), + 6596: uint16(20788), + 6597: uint16(4673), + 6598: uint16(11819), + 6599: uint16(20791), + 6600: uint16(20787), + 6601: uint16(20785), + 6602: uint16(20784), + 6603: uint16(20795), + 6604: uint16(20798), + 6605: uint16(20797), + 6606: uint16(20796), + 6607: uint16(10280), + 6608: uint16(20794), + 6609: uint16(3922), + 6610: uint16(20799), + 6611: uint16(20801), + 6612: uint16(4686), + 6613: uint16(20780), + 6614: uint16(4118), + 6615: uint16(20803), + 6616: uint16(20802), + 6617: uint16(20800), + 6618: uint16(8716), + 6619: uint16(10831), + 6620: uint16(11577), + 6621: uint16(20804), + 6622: uint16(20805), + 6623: uint16(20806), + 6624: uint16(20807), + 6625: uint16(20808), + 6626: uint16(8986), + 6627: uint16(20809), + 6628: uint16(10006), + 6629: uint16(20814), + 6630: uint16(20810), + 6631: uint16(20811), + 6632: uint16(10768), + 6633: uint16(11043), + 6634: uint16(9519), + 6635: uint16(20815), + 6636: uint16(20816), + 6637: uint16(9501), + 6638: uint16(20813), + 6639: uint16(20812), + 6640: uint16(4361), + 6641: uint16(20824), + 6642: uint16(20823), + 6643: uint16(4180), + 6644: uint16(20821), + 6645: uint16(20820), + 6646: uint16(20818), + 6647: uint16(4698), + 6648: uint16(20817), + 6649: uint16(6929), + 6650: uint16(4360), + 6651: uint16(6210), + 6652: uint16(20827), + 6653: uint16(20826), + 6654: uint16(20825), + 6655: uint16(20822), + 6656: uint16(20828), + 6657: uint16(20829), + 6658: uint16(20996), + 6659: uint16(20995), + 6660: uint16(20997), + 6661: uint16(4108), + 6662: uint16(20992), + 6663: uint16(20993), + 6664: uint16(6227), + 6665: uint16(11032), + 6666: uint16(20994), + 6667: uint16(10769), + 6668: uint16(21002), + 6669: uint16(20998), + 6670: uint16(21003), + 6671: uint16(21000), + 6672: uint16(20999), + 6673: uint16(5691), + 6674: uint16(21004), + 6675: uint16(21005), + 6676: uint16(21006), + 6677: uint16(21001), + 6678: uint16(20819), + 6679: uint16(21007), + 6680: uint16(9024), + 6681: uint16(21011), + 6682: uint16(21012), + 6683: uint16(21010), + 6684: uint16(21009), + 6685: uint16(21015), + 6686: uint16(21008), + 6687: uint16(21013), + 6688: uint16(21014), + 6689: uint16(21017), + 6690: uint16(21016), + 6691: uint16(21019), + 6692: uint16(21020), + 6693: uint16(21021), + 6694: uint16(11816), + 6695: uint16(21018), + 6696: uint16(8522), + 6697: uint16(6476), + 6698: uint16(21022), + 6699: uint16(21023), + 6700: uint16(21024), + 6701: uint16(21025), + 6702: uint16(21026), + 6703: uint16(5907), + 6704: uint16(21027), + 6705: uint16(21028), + 6706: uint16(6926), + 6707: uint16(21029), + 6708: uint16(21030), + 6709: uint16(21031), + 6710: uint16(21032), + 6711: uint16(21035), + 6712: uint16(21033), + 6713: uint16(11803), + 6714: uint16(21034), + 6715: uint16(11598), + 6716: uint16(21036), + 6717: uint16(11578), + 6718: uint16(21037), + 6719: uint16(9821), + 6720: uint16(21038), + 6721: uint16(21040), + 6722: uint16(21041), + 6723: uint16(21039), + 6724: uint16(6220), + 6725: uint16(11052), + 6726: uint16(10818), + 6727: uint16(13654), + 6728: uint16(15423), + 6729: uint16(10842), + 6730: uint16(4362), + 6731: uint16(21043), + 6732: uint16(5167), + 6733: uint16(21044), + 6734: uint16(21045), + 6735: uint16(21046), + 6736: uint16(6228), + 6737: uint16(21047), + 6738: uint16(16179), + 6739: uint16(11066), + 6740: uint16(8514), + 6741: uint16(21048), + 6742: uint16(21050), + 6743: uint16(21049), + 6744: uint16(21051), + 6745: uint16(21052), + 6746: uint16(21053), + 6747: uint16(21054), + 6748: uint16(21055), + 6749: uint16(21056), + 6750: uint16(21057), + 6751: uint16(21058), + 6752: uint16(21059), + 6753: uint16(21060), + 6754: uint16(21061), + 6755: uint16(21062), + 6756: uint16(21063), + 6757: uint16(9219), + 6758: uint16(5948), + 6759: uint16(21065), + 6760: uint16(8236), + 6761: uint16(21066), + 6762: uint16(21067), + 6763: uint16(10240), + 6764: uint16(21068), + 6765: uint16(21069), + 6766: uint16(16918), + 6767: uint16(19257), + 6768: uint16(20300), + 6769: uint16(21070), + 6770: uint16(21071), + 6771: uint16(21073), + 6772: uint16(21074), + 6773: uint16(21075), + 6774: uint16(11599), + 6775: uint16(21072), + 6776: uint16(21076), + 6777: uint16(21077), + 6778: uint16(21079), + 6779: uint16(21078), + 6780: uint16(21081), + 6781: uint16(21082), + 6782: uint16(21080), + 6783: uint16(11541), + 6784: uint16(21083), + 6785: uint16(21084), + 6786: uint16(16947), + 6787: uint16(21085), + 6788: uint16(9), + 6789: uint16(83), + 6790: uint16(79), + 6791: uint16(82), + 6792: uint16(84), + 6793: uint16(41), + 6794: uint16(42), + 6795: uint16(85), + 6796: uint16(59), + 6797: uint16(3), + 6798: uint16(4), + 6799: uint16(30), + 6800: uint16(527), + 6801: uint16(528), + 6802: uint16(529), + 6803: uint16(530), + 6804: uint16(531), + 6805: uint16(532), + 6806: uint16(533), + 6807: uint16(534), + 6808: uint16(535), + 6809: uint16(536), + 6810: uint16(6), + 6811: uint16(7), + 6812: uint16(66), + 6813: uint16(64), + 6814: uint16(67), + 6815: uint16(8), + 6816: uint16(86), + 6817: uint16(544), + 6818: uint16(545), + 6819: uint16(546), + 6820: uint16(547), + 6821: uint16(548), + 6822: uint16(549), + 6823: uint16(550), + 6824: uint16(551), + 6825: uint16(552), + 6826: uint16(553), + 6827: uint16(554), + 6828: uint16(555), + 6829: uint16(556), + 6830: uint16(557), + 6831: uint16(558), + 6832: uint16(559), + 6833: uint16(560), + 6834: uint16(561), + 6835: uint16(562), + 6836: uint16(563), + 6837: uint16(564), + 6838: uint16(565), + 6839: uint16(566), + 6840: uint16(567), + 6841: uint16(568), + 6842: uint16(569), + 6843: uint16(45), + 6844: uint16(46), + 6845: uint16(15), + 6846: uint16(17), + 6847: uint16(13), + 6848: uint16(576), + 6849: uint16(577), + 6850: uint16(578), + 6851: uint16(579), + 6852: uint16(580), + 6853: uint16(581), + 6854: uint16(582), + 6855: uint16(583), + 6856: uint16(584), + 6857: uint16(585), + 6858: uint16(586), + 6859: uint16(587), + 6860: uint16(588), + 6861: uint16(589), + 6862: uint16(590), + 6863: uint16(591), + 6864: uint16(592), + 6865: uint16(593), + 6866: uint16(594), + 6867: uint16(595), + 6868: uint16(596), + 6869: uint16(597), + 6870: uint16(598), + 6871: uint16(599), + 6872: uint16(600), + 6873: uint16(601), + 6874: uint16(47), + 6875: uint16(34), + 6876: uint16(48), + 6877: uint16(16), + 6878: uint16(78), +} + +func _fuzzycmp(tls *TLS, a uintptr, b uintptr) (r int32) { + for { + if !(*(*uint8)(unsafe.Pointer(a)) != 0 && *(*uint8)(unsafe.Pointer(b)) != 0) { + break + } + for *(*uint8)(unsafe.Pointer(a)) != 0 && uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32)-uint32('a') > uint32(26) && uint32(int32(*(*uint8)(unsafe.Pointer(a)))-int32('0')) > uint32(10) { + a++ + } + if uint32(*(*uint8)(unsafe.Pointer(a)))|uint32(32) != uint32(*(*uint8)(unsafe.Pointer(b))) { + return int32(1) + } + goto _1 + _1: + ; + a++ + b++ + } + return BoolInt32(int32(*(*uint8)(unsafe.Pointer(a))) != int32(*(*uint8)(unsafe.Pointer(b)))) +} + +func _find_charmap(tls *TLS, name uintptr) (r Tsize_t) { + var s uintptr + _ = s + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + name = uintptr(unsafe.Pointer(&_charmaps)) + } /* "utf8" */ + s = uintptr(unsafe.Pointer(&_charmaps)) + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if !(_fuzzycmp(tls, name, s) != 0) { + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + return uint64(int64(s+uintptr(1)) - t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_charmaps)))) + } + s += uintptr(Xstrlen(tls, s) + uint64(1)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + if int32(*(*uint8)(unsafe.Pointer(s + 1))) > int32(0200) { + s += uintptr(2) + } else { + s += uintptr(uint32(2) + (uint32(64)-uint32(*(*uint8)(unsafe.Pointer(s + 1))))*uint32(5)) + } + } + goto _1 + _1: + } + return uint64(-Int32FromInt32(1)) +} + +type Tstateful_cd = struct { + Fbase_cd Ticonv_t + Fstate uint32 +} + +func _combine_to_from(tls *TLS, t Tsize_t, f Tsize_t) (r Ticonv_t) { + return uintptr(f<> int32(16) +} + +func _extract_to(tls *TLS, cd Ticonv_t) (r Tsize_t) { + return uint64(cd) >> int32(1) & uint64(0x7fff) +} + +func Xiconv_open(tls *TLS, to uintptr, from uintptr) (r Ticonv_t) { + if __ccgo_strace { + trc("tls=%v to=%v from=%v, (%v:)", tls, to, from, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cd Ticonv_t + var f, t, v1, v2 Tsize_t + var scd uintptr + var v3 bool + _, _, _, _, _, _, _ = cd, f, scd, t, v1, v2, v3 + v1 = _find_charmap(tls, to) + t = v1 + if v3 = v1 == uint64(-Int32FromInt32(1)); !v3 { + v2 = _find_charmap(tls, from) + f = v2 + } + if v3 || v2 == uint64(-Int32FromInt32(1)) || int32(_charmaps[t]) >= int32(0330) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(-Int32FromInt32(1)) + } + cd = _combine_to_from(tls, t, f) + switch int32(_charmaps[f]) { + case int32(UTF_16): + fallthrough + case int32(UTF_32): + fallthrough + case int32(UCS2): + fallthrough + case int32(ISO2022_JP): + scd = Xmalloc(tls, uint64(16)) + if !(scd != 0) { + return uintptr(-Int32FromInt32(1)) + } + (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd = cd + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + cd = scd + } + return cd +} + +func _get_16(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(1) + return uint32(int32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))<> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(int32(1)-e))) = uint8(c) +} + +func _get_32(tls *TLS, s uintptr, e int32) (r uint32) { + e &= int32(3) + return (uint32(*(*uint8)(unsafe.Pointer(s + uintptr(e))))+0)<> int32(24)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(1)))) = uint8(c >> int32(16)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(2)))) = uint8(c >> int32(8)) + *(*uint8)(unsafe.Pointer(s + uintptr(e^int32(3)))) = uint8(c) +} + +/* Adapt as needed */ + +func _legacy_map(tls *TLS, map1 uintptr, c uint32) (r uint32) { + var x, v1 uint32 + _, _ = x, v1 + if c < uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) { + return c + } + x = c - uint32(int32(4)*int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))))) + x = uint32(int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)))))>>(uint32(2)*x%uint32(8)) | int32(*(*uint8)(unsafe.Pointer(map1 + uintptr(x*uint32(5)/uint32(4)+uint32(1)))))<<(uint32(8)-uint32(2)*x%uint32(8))&int32(1023)) + if x < uint32(256) { + v1 = x + } else { + v1 = uint32(_legacy_chars[x-uint32(256)]) + } + return v1 +} + +func _uni_to_jis(tls *TLS, c uint32) (r uint32) { + var b, d, i, j, nel uint32 + _, _, _, _, _ = b, d, i, j, nel + nel = uint32(Uint64FromInt64(13758) / Uint64FromInt64(2)) + b = uint32(0) + for { + i = nel / uint32(2) + j = uint32(_rev_jis[b+i]) + d = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(j/uint32(256))*188 + uintptr(j%uint32(256))*2))) + if d == c { + return j + uint32(0x2121) + } else { + if nel == uint32(1) { + return uint32(0) + } else { + if c < d { + nel /= uint32(2) + } else { + b += i + nel -= nel / uint32(2) + } + } + } + goto _1 + _1: + } + return r +} + +func Xiconv(tls *TLS, cd Ticonv_t, in uintptr, inb uintptr, out uintptr, outb uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v cd=%v in=%v inb=%v out=%v outb=%v, (%v:)", tls, cd, in, inb, out, outb, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var c, d, from, to, v62 uint32 + var err, i, i1, j, j1, v25, v26, v27, v28, v59 int32 + var k, l, tmplen, tmpx, x Tsize_t + var loc Tlocale_t + var map1, ploc, scd, tomap, v100, v101, v102, v103, v104, v54, v55, v57, v58, v60, v61, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 uintptr + var totype, type1 uint8 + var _ /* ptmp at bp+48 */ uintptr + var _ /* st at bp+24 */ Tmbstate_t + var _ /* tmp at bp+40 */ struct { + Fwc [0][2]Twchar_t + Fc [8]uint8 + } + var _ /* tmp at bp+56 */ [4]uint8 + var _ /* wc at bp+32 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, err, from, i, i1, j, j1, k, l, loc, map1, ploc, scd, tmplen, tmpx, to, tomap, totype, type1, x, v100, v101, v102, v103, v104, v25, v26, v27, v28, v54, v55, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99 + x = uint64(0) + scd = uintptr(0) + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + scd = cd + cd = (*Tstateful_cd)(unsafe.Pointer(scd)).Fbase_cd + } + to = uint32(_extract_to(tls, cd)) + from = uint32(_extract_from(tls, cd)) + map1 = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(from) + uintptr(1) + tomap = uintptr(unsafe.Pointer(&_charmaps)) + uintptr(to) + uintptr(1) + *(*Tmbstate_t)(unsafe.Pointer(bp + 24)) = Tmbstate_t{} + type1 = *(*uint8)(unsafe.Pointer(map1 + uintptr(-Int32FromInt32(1)))) + totype = *(*uint8)(unsafe.Pointer(tomap + uintptr(-Int32FromInt32(1)))) + ploc = uintptr(___get_tp(tls)) + 168 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if !(in != 0) || !(*(*uintptr)(unsafe.Pointer(in)) != 0) || !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + return uint64(0) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + for { + if !(*(*Tsize_t)(unsafe.Pointer(inb)) != 0) { + break + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + l = uint64(1) + switch int32(type1) { + case int32(UTF_8): + goto _2 + case int32(US_ASCII): + goto _3 + case int32(WCHAR_T): + goto _4 + case int32(UTF_32LE): + goto _5 + case int32(UTF_32BE): + goto _6 + case int32(UTF_16LE): + goto _7 + case int32(UTF_16BE): + goto _8 + case int32(UCS2LE): + goto _9 + case int32(UCS2BE): + goto _10 + case int32(UTF_16): + goto _11 + case int32(UCS2): + goto _12 + case int32(UTF_32): + goto _13 + case int32(SHIFT_JIS): + goto _14 + case int32(EUC_JP): + goto _15 + case int32(ISO2022_JP): + goto _16 + case int32(GB2312): + goto _17 + case int32(GBK): + goto _18 + case int32(GB18030): + goto _19 + case int32(BIG5): + goto _20 + case int32(EUC_KR): + goto _21 + default: + goto _22 + } + goto _23 + _2: + ; + if c < uint32(128) { + goto _23 + } + l = Xmbrtowc(tls, bp+32, *(*uintptr)(unsafe.Pointer(in)), *(*Tsize_t)(unsafe.Pointer(inb)), bp+24) + if l == uint64(-Int32FromInt32(1)) { + goto ilseq + } + if l == uint64(-Int32FromInt32(2)) { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(bp + 32))) + goto _23 + _3: + ; + if c >= uint32(128) { + goto ilseq + } + goto _23 + _4: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < l { + goto starved + } + c = uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in))))) + if !(0 != 0) { + goto _24 + } + _6: + ; + _5: + ; + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = _get_32(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + _24: + ; + if c-uint32(0xd800) < uint32(0x800) || c >= uint32(0x110000) { + goto ilseq + } + goto _23 + _10: + ; + _9: + ; + _8: + ; + _7: + ; + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + c = _get_16(tls, *(*uintptr)(unsafe.Pointer(in)), int32(type1)) + if c-Uint32FromInt32(0xdc00) < uint32(0x400) { + goto ilseq + } + if c-Uint32FromInt32(0xd800) < uint32(0x400) { + if uint32(int32(type1)-int32(UCS2BE)) < uint32(2) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + d = _get_16(tls, *(*uintptr)(unsafe.Pointer(in))+UintptrFromInt32(2), int32(type1)) + if d-Uint32FromInt32(0xdc00) >= uint32(0x400) { + goto ilseq + } + c = (c-uint32(0xd7c0))< uint32(127) { + d-- + } + d -= uint32(64) + } else { + if d-uint32(159) <= uint32(Int32FromInt32(252)-Int32FromInt32(159)) { + c++ + d -= uint32(159) + } + } + if c >= uint32(84) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _15: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if c == uint32(0x8e) { + c = d + if c-uint32(0xa1) > uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + goto ilseq + } + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0xa1)) + goto _23 + } + c -= uint32(0xa1) + d -= uint32(0xa1) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _16: + ; + if c >= uint32(128) { + goto ilseq + } + if c == uint32('\033') { + l = uint64(3) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(3) { + goto starved + } + c = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if c != uint32('(') && c != uint32('$') { + goto ilseq + } + switch uint32(Int32FromInt32(128)*BoolInt32(c == Uint32FromUint8('$'))) + d { + case uint32('B'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(0) + goto _1 + case uint32('J'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(1) + goto _1 + case uint32('I'): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(4) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('@')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(2) + goto _1 + case uint32(Int32FromInt32(128) + Int32FromUint8('B')): + (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate = uint32(3) + goto _1 + } + goto ilseq + } + switch (*Tstateful_cd)(unsafe.Pointer(scd)).Fstate { + case uint32(1): + if c == uint32('\\') { + c = uint32(0xa5) + } + if c == uint32('~') { + c = uint32(0x203e) + } + case uint32(2): + fallthrough + case uint32(3): + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + c -= uint32(0x21) + d -= uint32(0x21) + if c >= uint32(84) || d >= uint32(94) { + goto ilseq + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_jis0208)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + case uint32(4): + if c-uint32(0x60) < uint32(0x1f) { + goto ilseq + } + if c-uint32(0x21) < uint32(0x5e) { + c += uint32(Int32FromInt32(0xff61) - Int32FromInt32(0x21)) + } + break + } + goto _23 + _17: + ; + if c < uint32(128) { + goto _23 + } + if c < uint32(0xa1) { + goto ilseq + } + _18: + ; + if c == uint32(128) { + c = uint32(0x20ac) + goto _23 + } + _19: + ; + if c < uint32(128) { + goto _23 + } + c -= uint32(0x81) + if c >= uint32(126) { + goto ilseq + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d < uint32(0xa1) && int32(type1) == int32(GB2312) { + goto ilseq + } + if d-uint32(0x40) >= uint32(191) || d == uint32(127) { + if d-uint32('0') > uint32(9) || int32(type1) != int32(GB18030) { + goto ilseq + } + l = uint64(4) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(4) { + goto starved + } + c = (uint32(10)*c + d - uint32('0')) * uint32(1260) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(2)))) + if d-uint32(0x81) > uint32(126) { + goto ilseq + } + c += uint32(10) * (d - uint32(0x81)) + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(3)))) + if d-uint32('0') > uint32(9) { + goto ilseq + } + c += d - uint32('0') + c += uint32(128) + d = uint32(0) + for { + if !(d <= c) { + break + } + k = uint64(0) + i = 0 + for { + if !(i < int32(126)) { + break + } + j = 0 + for { + if !(j < int32(190)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(i)*380 + uintptr(j)*2)))-d <= c-d { + k++ + } + goto _31 + _31: + ; + j++ + } + goto _30 + _30: + ; + i++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _29 + _29: + } + goto _23 + } + d -= uint32(0x40) + if d > uint32(63) { + d-- + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_gb18030)) + uintptr(c)*380 + uintptr(d)*2))) + goto _23 + _20: + ; + if c < uint32(128) { + goto _23 + } + l = uint64(2) + if *(*Tsize_t)(unsafe.Pointer(inb)) < uint64(2) { + goto starved + } + d = uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(in)) + UintptrFromInt32(1)))) + if d-uint32(0x40) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x40)) || d-uint32(0x7f) < uint32(Int32FromInt32(0xa1)-Int32FromInt32(0x7f)) { + goto ilseq + } + d -= uint32(0x40) + if d > uint32(0x3e) { + d -= uint32(0x22) + } + if c-uint32(0xa1) >= uint32(Int32FromInt32(0xfa)-Int32FromInt32(0xa1)) { + if c-uint32(0x87) >= uint32(Int32FromInt32(0xff)-Int32FromInt32(0x87)) { + goto ilseq + } + if c < uint32(0xa1) { + c -= uint32(0x87) + } else { + c -= uint32(Int32FromInt32(0x87) + (Int32FromInt32(0xfa) - Int32FromInt32(0xa1))) + } + c = uint32(int32(_hkscs[uint32(4867)+(c*uint32(157)+d)/uint32(16)])>>((c*uint32(157)+d)%uint32(16))%int32(2)< *(*Tsize_t)(unsafe.Pointer(outb)) { + goto toobig + } + if tmpx != 0 { + x++ + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+40, tmplen) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(tmplen) + *(*Tsize_t)(unsafe.Pointer(outb)) -= tmplen + goto _1 + } + if !(c != 0) { + goto ilseq + } + goto _23 + } + c -= uint32(0xa1) + c = uint32(int32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_big5)) + uintptr(c)*314 + uintptr(d)*2))) | BoolInt32(c == uint32(0x27) && (d == uint32(0x3a) || d == uint32(0x3c) || d == uint32(0x42)))<= uint32(93) || d >= uint32(94) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0x81)) + d += uint32(0xa1) + if c >= uint32(93) || c >= uint32(Int32FromInt32(0xc6)-Int32FromInt32(0x81)) && d > uint32(0x52) { + goto ilseq + } + if d-uint32('A') < uint32(26) { + d = d - uint32('A') + } else { + if d-uint32('a') < uint32(26) { + d = d - uint32('a') + uint32(26) + } else { + if d-uint32(0x81) < uint32(Int32FromInt32(0xff)-Int32FromInt32(0x81)) { + d = d - uint32(0x81) + uint32(52) + } else { + goto ilseq + } + } + } + if c < uint32(0x20) { + c = uint32(178)*c + d + } else { + c = uint32(Int32FromInt32(178)*Int32FromInt32(0x20)) + uint32(84)*(c-uint32(0x20)) + d + } + c += uint32(0xac00) + d = uint32(0xac00) + for { + if !(d <= c) { + break + } + k = uint64(0) + i1 = 0 + for { + if !(i1 < int32(93)) { + break + } + j1 = 0 + for { + if !(j1 < int32(94)) { + break + } + if uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(i1)*188 + uintptr(j1)*2)))-d <= c-d { + k++ + } + goto _34 + _34: + ; + j1++ + } + goto _33 + _33: + ; + i1++ + } + d = c + uint32(1) + c = uint32(uint64(c) + k) + goto _32 + _32: + } + goto _23 + } + c = uint32(*(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(&_ksc)) + uintptr(c)*188 + uintptr(d)*2))) + if !(c != 0) { + goto ilseq + } + goto _23 + _22: + ; + if !(c != 0) { + goto _23 + } + c = _legacy_map(tls, map1, c) + if !(c != 0) { + goto ilseq + } + _23: + ; + switch int32(totype) { + case int32(WCHAR_T): + goto _35 + case int32(UTF_8): + goto _36 + case int32(US_ASCII): + goto _37 + default: + goto _38 + case int32(SHIFT_JIS): + goto _39 + case int32(EUC_JP): + goto _40 + case int32(ISO2022_JP): + goto _41 + case int32(UCS2): + goto _42 + case int32(UTF_16LE): + goto _43 + case int32(UTF_16BE): + goto _44 + case int32(UTF_16): + goto _45 + case int32(UCS2LE): + goto _46 + case int32(UCS2BE): + goto _47 + case int32(UTF_32): + goto _48 + case int32(UTF_32LE): + goto _49 + case int32(UTF_32BE): + goto _50 + } + goto _51 + _35: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(out)))) = int32(c) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _36: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + k = uint64(Xwctomb(tls, bp+56, int32(c))) + if *(*Tsize_t)(unsafe.Pointer(outb)) < k { + goto toobig + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(out)), bp+56, k) + } else { + k = uint64(Xwctomb(tls, *(*uintptr)(unsafe.Pointer(out)), int32(c))) + } + *(*uintptr)(unsafe.Pointer(out)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(outb)) -= k + goto _51 + _37: + ; + if !(c > uint32(0x7f)) { + goto _52 + } + goto subst + subst: + ; + x++ + c = Uint32FromUint8('*') + _52: + ; + _38: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + if !(c < uint32(256) && c == _legacy_map(tls, tomap, c)) { + goto _53 + } + goto revout + revout: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(1) { + goto toobig + } + v55 = out + v54 = *(*uintptr)(unsafe.Pointer(v55)) + *(*uintptr)(unsafe.Pointer(v55))++ + *(*uint8)(unsafe.Pointer(v54)) = uint8(c) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(1) + goto _51 + _53: + ; + d = c + c = uint32(int32(4) * int32(totype)) + for { + if !(c < uint32(256)) { + break + } + if d == _legacy_map(tls, tomap, c) { + goto revout + } + goto _56 + _56: + ; + c++ + } + goto subst + _39: + ; + if c < uint32(128) { + goto revout + } + if c == uint32(0xa5) { + x++ + c = uint32('\\') + goto revout + } + if c == uint32(0x203e) { + x++ + c = uint32('~') + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0xa1) - Int32FromInt32(0xff61)) + goto revout + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + d = c % uint32(256) + c = c / uint32(256) + v58 = out + v57 = *(*uintptr)(unsafe.Pointer(v58)) + *(*uintptr)(unsafe.Pointer(v58))++ + if c < uint32(95) { + v59 = int32(112) + } else { + v59 = int32(176) + } + *(*uint8)(unsafe.Pointer(v57)) = uint8((c+uint32(1))/uint32(2) + uint32(v59)) + v61 = out + v60 = *(*uintptr)(unsafe.Pointer(v61)) + *(*uintptr)(unsafe.Pointer(v61))++ + if c%uint32(2) != 0 { + v62 = d + uint32(31) + d/uint32(96) + } else { + v62 = d + uint32(126) + } + *(*uint8)(unsafe.Pointer(v60)) = uint8(v62) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _40: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) { + c += uint32(Int32FromInt32(0x0e00) + Int32FromInt32(0x21) - Int32FromInt32(0xff61)) + } else { + c = _uni_to_jis(tls, c) + } + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + v64 = out + v63 = *(*uintptr)(unsafe.Pointer(v64)) + *(*uintptr)(unsafe.Pointer(v64))++ + *(*uint8)(unsafe.Pointer(v63)) = uint8(c/uint32(256) + uint32(0x80)) + v66 = out + v65 = *(*uintptr)(unsafe.Pointer(v66)) + *(*uintptr)(unsafe.Pointer(v66))++ + *(*uint8)(unsafe.Pointer(v65)) = uint8(c%uint32(256) + uint32(0x80)) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + _41: + ; + if c < uint32(128) { + goto revout + } + if c-uint32(0xff61) <= uint32(Int32FromInt32(0xdf)-Int32FromInt32(0xa1)) || c == uint32(0xa5) || c == uint32(0x203e) { + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(7) { + goto toobig + } + v68 = out + v67 = *(*uintptr)(unsafe.Pointer(v68)) + *(*uintptr)(unsafe.Pointer(v68))++ + *(*uint8)(unsafe.Pointer(v67)) = uint8('\033') + v70 = out + v69 = *(*uintptr)(unsafe.Pointer(v70)) + *(*uintptr)(unsafe.Pointer(v70))++ + *(*uint8)(unsafe.Pointer(v69)) = uint8('(') + if c == uint32(0xa5) { + v72 = out + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + *(*uint8)(unsafe.Pointer(v71)) = uint8('J') + v74 = out + v73 = *(*uintptr)(unsafe.Pointer(v74)) + *(*uintptr)(unsafe.Pointer(v74))++ + *(*uint8)(unsafe.Pointer(v73)) = uint8('\\') + } else { + if c == uint32(0x203e) { + v76 = out + v75 = *(*uintptr)(unsafe.Pointer(v76)) + *(*uintptr)(unsafe.Pointer(v76))++ + *(*uint8)(unsafe.Pointer(v75)) = uint8('J') + v78 = out + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + *(*uint8)(unsafe.Pointer(v77)) = uint8('~') + } else { + v80 = out + v79 = *(*uintptr)(unsafe.Pointer(v80)) + *(*uintptr)(unsafe.Pointer(v80))++ + *(*uint8)(unsafe.Pointer(v79)) = uint8('I') + v82 = out + v81 = *(*uintptr)(unsafe.Pointer(v82)) + *(*uintptr)(unsafe.Pointer(v82))++ + *(*uint8)(unsafe.Pointer(v81)) = uint8(c - uint32(0xff61) + uint32(0x21)) + } + } + v84 = out + v83 = *(*uintptr)(unsafe.Pointer(v84)) + *(*uintptr)(unsafe.Pointer(v84))++ + *(*uint8)(unsafe.Pointer(v83)) = uint8('\033') + v86 = out + v85 = *(*uintptr)(unsafe.Pointer(v86)) + *(*uintptr)(unsafe.Pointer(v86))++ + *(*uint8)(unsafe.Pointer(v85)) = uint8('(') + v88 = out + v87 = *(*uintptr)(unsafe.Pointer(v88)) + *(*uintptr)(unsafe.Pointer(v88))++ + *(*uint8)(unsafe.Pointer(v87)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(7) + goto _51 + } + c = _uni_to_jis(tls, c) + if !(c != 0) { + goto subst + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(8) { + goto toobig + } + v90 = out + v89 = *(*uintptr)(unsafe.Pointer(v90)) + *(*uintptr)(unsafe.Pointer(v90))++ + *(*uint8)(unsafe.Pointer(v89)) = uint8('\033') + v92 = out + v91 = *(*uintptr)(unsafe.Pointer(v92)) + *(*uintptr)(unsafe.Pointer(v92))++ + *(*uint8)(unsafe.Pointer(v91)) = uint8('$') + v94 = out + v93 = *(*uintptr)(unsafe.Pointer(v94)) + *(*uintptr)(unsafe.Pointer(v94))++ + *(*uint8)(unsafe.Pointer(v93)) = uint8('B') + v96 = out + v95 = *(*uintptr)(unsafe.Pointer(v96)) + *(*uintptr)(unsafe.Pointer(v96))++ + *(*uint8)(unsafe.Pointer(v95)) = uint8(c / uint32(256)) + v98 = out + v97 = *(*uintptr)(unsafe.Pointer(v98)) + *(*uintptr)(unsafe.Pointer(v98))++ + *(*uint8)(unsafe.Pointer(v97)) = uint8(c % uint32(256)) + v100 = out + v99 = *(*uintptr)(unsafe.Pointer(v100)) + *(*uintptr)(unsafe.Pointer(v100))++ + *(*uint8)(unsafe.Pointer(v99)) = uint8('\033') + v102 = out + v101 = *(*uintptr)(unsafe.Pointer(v102)) + *(*uintptr)(unsafe.Pointer(v102))++ + *(*uint8)(unsafe.Pointer(v101)) = uint8('(') + v104 = out + v103 = *(*uintptr)(unsafe.Pointer(v104)) + *(*uintptr)(unsafe.Pointer(v104))++ + *(*uint8)(unsafe.Pointer(v103)) = uint8('B') + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(8) + goto _51 + _42: + ; + totype = uint8(UCS2BE) + _47: + ; + _46: + ; + _45: + ; + _44: + ; + _43: + ; + if c < uint32(0x10000) || uint32(int32(totype)-int32(UCS2BE)) < uint32(2) { + if c >= uint32(0x10000) { + c = uint32(0xFFFD) + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(2) { + goto toobig + } + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(2) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(2) + goto _51 + } + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + c -= uint32(0x10000) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out)), c>>int32(10)|uint32(0xd800), int32(totype)) + _put_16(tls, *(*uintptr)(unsafe.Pointer(out))+UintptrFromInt32(2), c&uint32(0x3ff)|uint32(0xdc00), int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _48: + ; + totype = uint8(UTF_32BE) + _50: + ; + _49: + ; + if *(*Tsize_t)(unsafe.Pointer(outb)) < uint64(4) { + goto toobig + } + _put_32(tls, *(*uintptr)(unsafe.Pointer(out)), c, int32(totype)) + *(*uintptr)(unsafe.Pointer(out)) += uintptr(4) + *(*Tsize_t)(unsafe.Pointer(outb)) -= uint64(4) + goto _51 + _51: + ; + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(in)) += uintptr(l) + *(*Tsize_t)(unsafe.Pointer(inb)) -= l + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x + goto ilseq +ilseq: + ; + err = int32(EILSEQ) + x = uint64(-Int32FromInt32(1)) + goto end + goto toobig +toobig: + ; + err = int32(E2BIG) + x = uint64(-Int32FromInt32(1)) + goto end + goto starved +starved: + ; + err = int32(EINVAL) + x = uint64(-Int32FromInt32(1)) + goto end +end: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return x +} + +func Xiconv_close(tls *TLS, cd Ticonv_t) (r int32) { + if __ccgo_strace { + trc("tls=%v cd=%v, (%v:)", tls, cd, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(uint64(cd)&Uint64FromInt32(1) != 0) { + Xfree(tls, cd) + } + return 0 +} + +var _c_time = [316]uint8{'S', 'u', 'n', 0, 'M', 'o', 'n', 0, 'T', 'u', 'e', 0, 'W', 'e', 'd', 0, 'T', 'h', 'u', 0, 'F', 'r', 'i', 0, 'S', 'a', 't', 0, 'S', 'u', 'n', 'd', 'a', 'y', 0, 'M', 'o', 'n', 'd', 'a', 'y', 0, 'T', 'u', 'e', 's', 'd', 'a', 'y', 0, 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 0, 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 0, 'F', 'r', 'i', 'd', 'a', 'y', 0, 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 0, 'J', 'a', 'n', 0, 'F', 'e', 'b', 0, 'M', 'a', 'r', 0, 'A', 'p', 'r', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 0, 'J', 'u', 'l', 0, 'A', 'u', 'g', 0, 'S', 'e', 'p', 0, 'O', 'c', 't', 0, 'N', 'o', 'v', 0, 'D', 'e', 'c', 0, 'J', 'a', 'n', 'u', 'a', 'r', 'y', 0, 'F', 'e', 'b', 'r', 'u', 'a', 'r', 'y', 0, 'M', 'a', 'r', 'c', 'h', 0, 'A', 'p', 'r', 'i', 'l', 0, 'M', 'a', 'y', 0, 'J', 'u', 'n', 'e', 0, 'J', 'u', 'l', 'y', 0, 'A', 'u', 'g', 'u', 's', 't', 0, 'S', 'e', 'p', 't', 'e', 'm', 'b', 'e', 'r', 0, 'O', 'c', 't', 'o', 'b', 'e', 'r', 0, 'N', 'o', 'v', 'e', 'm', 'b', 'e', 'r', 0, 'D', 'e', 'c', 'e', 'm', 'b', 'e', 'r', 0, 'A', 'M', 0, 'P', 'M', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S', 0, '%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p', 0, 0, 0, '%', 'm', '/', '%', 'd', '/', '%', 'y', 0, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, '%', 'a', ' ', '%', 'b', ' ', '%', 'e', ' ', '%', 'T', ' ', '%', 'Y', 0, '%', 'H', ':', '%', 'M', ':', '%', 'S'} + +var _c_messages = [19]uint8{'^', '[', 'y', 'Y', ']', 0, '^', '[', 'n', 'N', ']', 0, 'y', 'e', 's', 0, 'n', 'o'} +var _c_numeric = [3]uint8{'.'} + +func X__nl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var cat, idx int32 + var str, v1, v2 uintptr + _, _, _, _, _ = cat, idx, str, v1, v2 + cat = item >> int32(16) + idx = item & int32(65535) + if item == int32(CODESET) { + if *(*uintptr)(unsafe.Pointer(loc)) != 0 { + v1 = __ccgo_ts + 411 + } else { + v1 = __ccgo_ts + 556 + } + return v1 + } + /* _NL_LOCALE_NAME extension */ + if idx == int32(65535) && cat < int32(LC_ALL) { + if *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) != 0 { + v2 = *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8)) + 16 + } else { + v2 = __ccgo_ts + 562 + } + return v2 + } + switch cat { + case int32(LC_NUMERIC): + if idx > int32(1) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_numeric)) + case int32(LC_TIME): + if idx > int32(0x31) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_time)) + case int32(LC_MONETARY): + if idx > 0 { + return __ccgo_ts + } + str = __ccgo_ts + case int32(LC_MESSAGES): + if idx > int32(3) { + return __ccgo_ts + } + str = uintptr(unsafe.Pointer(&_c_messages)) + default: + return __ccgo_ts + } + for { + if !(idx != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(str)) != 0) { + break + } + goto _4 + _4: + ; + str++ + } + goto _3 + _3: + ; + idx-- + str++ + } + if cat != int32(LC_NUMERIC) && *(*uint8)(unsafe.Pointer(str)) != 0 { + str = X__lctrans(tls, str, *(*uintptr)(unsafe.Pointer(loc + uintptr(cat)*8))) + } + return str +} + +func X__nl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xnl_langinfo(tls *TLS, item Tnl_item) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo(tls, item) +} + +func Xnl_langinfo_l(tls *TLS, item Tnl_item, loc Tlocale_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v loc=%v, (%v:)", tls, item, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__nl_langinfo_l(tls, item, loc) +} + +func X__lctrans_impl(tls *TLS, msg uintptr, lm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v lm=%v, (%v:)", tls, msg, lm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var trans, v1 uintptr + _, _ = trans, v1 + trans = uintptr(0) + if lm != 0 { + trans = X__mo_lookup(tls, (*t__locale_map)(unsafe.Pointer(lm)).Fmap1, (*t__locale_map)(unsafe.Pointer(lm)).Fmap_size, msg) + } + if trans != 0 { + v1 = trans + } else { + v1 = msg + } + return v1 +} + +var _envvars = [6][12]uint8{ + 0: {'L', 'C', '_', 'C', 'T', 'Y', 'P', 'E'}, + 1: {'L', 'C', '_', 'N', 'U', 'M', 'E', 'R', 'I', 'C'}, + 2: {'L', 'C', '_', 'T', 'I', 'M', 'E'}, + 3: {'L', 'C', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E'}, + 4: {'L', 'C', '_', 'M', 'O', 'N', 'E', 'T', 'A', 'R', 'Y'}, + 5: {'L', 'C', '_', 'M', 'E', 'S', 'S', 'A', 'G', 'E', 'S'}, +} + +func X__get_locale(tls *TLS, cat int32, val uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v val=%v, (%v:)", tls, cat, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var builtin int32 + var l, n Tsize_t + var map1, new1, p, path, z, v1, v11, v2, v4, v6 uintptr + var v12, v3, v5, v7 bool + var _ /* buf at bp+0 */ [256]uint8 + var _ /* map_size at bp+256 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = builtin, l, map1, n, new1, p, path, z, v1, v11, v12, v2, v3, v4, v5, v6, v7 + new1 = uintptr(0) + path = uintptr(0) + if !(*(*uint8)(unsafe.Pointer(val)) != 0) { + v1 = Xgetenv(tls, __ccgo_ts+564) + val = v1 + if v3 = v1 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v3 { + v2 = Xgetenv(tls, uintptr(unsafe.Pointer(&_envvars))+uintptr(cat)*12) + val = v2 + } + if v5 = v3 || v2 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v5 { + v4 = Xgetenv(tls, __ccgo_ts+425) + val = v4 + } + if v7 = v5 || v4 != 0 && *(*uint8)(unsafe.Pointer(val)) != 0; !v7 { + v6 = __ccgo_ts + 571 + val = v6 + } + _ = v7 || v6 != 0 + } + /* Limit name length and forbid leading dot or any slashes. */ + n = uint64(0) + for { + if !(n < uint64(LOCALE_NAME_MAX) && *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 && int32(*(*uint8)(unsafe.Pointer(val + uintptr(n)))) != int32('/')) { + break + } + goto _8 + _8: + ; + n++ + } + if int32(*(*uint8)(unsafe.Pointer(val))) == int32('.') || *(*uint8)(unsafe.Pointer(val + uintptr(n))) != 0 { + val = __ccgo_ts + 571 + } + builtin = BoolInt32(int32(*(*uint8)(unsafe.Pointer(val))) == int32('C') && !(*(*uint8)(unsafe.Pointer(val + 1)) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+571) != 0) || !(Xstrcmp(tls, val, __ccgo_ts+579) != 0)) + if builtin != 0 { + if cat == LC_CTYPE && int32(*(*uint8)(unsafe.Pointer(val + 1))) == int32('.') { + return uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return uintptr(0) + } + p = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + for { + if !(p != 0) { + break + } + if !(Xstrcmp(tls, val, p+16) != 0) { + return p + } + goto _9 + _9: + ; + p = (*t__locale_map)(unsafe.Pointer(p)).Fnext + } + if !(X__libc.Fsecure != 0) { + path = Xgetenv(tls, __ccgo_ts+585) + } + /* FIXME: add a default path? */ + if path != 0 { + for { + if !(*(*uint8)(unsafe.Pointer(path)) != 0) { + break + } + z = X__strchrnul(tls, path, int32(':')) + l = uint64(int64(z) - int64(path)) + if l >= uint64(256)-n-uint64(2) { + goto _10 + } + Xmemcpy(tls, bp, path, l) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l] = uint8('/') + Xmemcpy(tls, bp+uintptr(l)+uintptr(1), val, n) + (*(*[256]uint8)(unsafe.Pointer(bp)))[l+uint64(1)+n] = uint8(0) + map1 = X__map_file(tls, bp, bp+256) + if map1 != 0 { + new1 = Xmalloc(tls, uint64(48)) + if !(new1 != 0) { + X__munmap(tls, map1, *(*Tsize_t)(unsafe.Pointer(bp + 256))) + break + } + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = map1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = *(*Tsize_t)(unsafe.Pointer(bp + 256)) + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + break + } + goto _10 + _10: + ; + path = z + BoolUintptr(!!(*(*uint8)(unsafe.Pointer(z)) != 0)) + } + } + /* If no locale definition was found, make a locale map + * object anyway to store the name, which is kept for the + * sake of being able to do message translations at the + * application level. */ + if v12 = !(new1 != 0); v12 { + v11 = Xmalloc(tls, uint64(48)) + new1 = v11 + } + if v12 && v11 != 0 { + (*t__locale_map)(unsafe.Pointer(new1)).Fmap1 = X__c_dot_utf8.Fmap1 + (*t__locale_map)(unsafe.Pointer(new1)).Fmap_size = X__c_dot_utf8.Fmap_size + Xmemcpy(tls, new1+16, val, n) + *(*uint8)(unsafe.Pointer(new1 + 16 + uintptr(n))) = uint8(0) + (*t__locale_map)(unsafe.Pointer(new1)).Fnext = AtomicLoadPUintptr(uintptr(unsafe.Pointer(&_loc_head))) + AtomicStorePUintptr(uintptr(unsafe.Pointer(&_loc_head)), new1) + } + /* For LC_CTYPE, never return a null pointer unless the + * requested name was "C" or "POSIX". */ + if !(new1 != 0) && cat == LC_CTYPE { + new1 = uintptr(unsafe.Pointer(&X__c_dot_utf8)) + } + return new1 +} + +var _loc_head uintptr + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _posix_lconv = Tlconv{ + Fdecimal_point: __ccgo_ts + 598, + Fthousands_sep: __ccgo_ts, + Fgrouping: __ccgo_ts, + Fint_curr_symbol: __ccgo_ts, + Fcurrency_symbol: __ccgo_ts, + Fmon_decimal_point: __ccgo_ts, + Fmon_thousands_sep: __ccgo_ts, + Fmon_grouping: __ccgo_ts, + Fpositive_sign: __ccgo_ts, + Fnegative_sign: __ccgo_ts, + Fint_frac_digits: uint8(CHAR_MAX), + Ffrac_digits: uint8(CHAR_MAX), + Fp_cs_precedes: uint8(CHAR_MAX), + Fp_sep_by_space: uint8(CHAR_MAX), + Fn_cs_precedes: uint8(CHAR_MAX), + Fn_sep_by_space: uint8(CHAR_MAX), + Fp_sign_posn: uint8(CHAR_MAX), + Fn_sign_posn: uint8(CHAR_MAX), + Fint_p_cs_precedes: uint8(CHAR_MAX), + Fint_p_sep_by_space: uint8(CHAR_MAX), + Fint_n_cs_precedes: uint8(CHAR_MAX), + Fint_n_sep_by_space: uint8(CHAR_MAX), + Fint_p_sign_posn: uint8(CHAR_MAX), + Fint_n_sign_posn: uint8(CHAR_MAX), +} + +func Xlocaleconv(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_posix_lconv)) +} + +var _default_locale_init_done int32 +var _default_locale t__locale_struct +var _default_ctype_locale t__locale_struct + +func X__loc_is_allocated(tls *TLS, loc Tlocale_t) (r int32) { + if __ccgo_strace { + trc("tls=%v loc=%v, (%v:)", tls, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(loc != 0 && loc != uintptr(unsafe.Pointer(&X__c_locale)) && loc != uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) && loc != uintptr(unsafe.Pointer(&_default_locale)) && loc != uintptr(unsafe.Pointer(&_default_ctype_locale))) +} + +func _do_newlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i, i1 int32 + var v2, v3 uintptr + var v5 Tlocale_t + var _ /* tmp at bp+0 */ t__locale_struct + _, _, _, _, _ = i, i1, v2, v3, v5 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + if !(mask&(Int32FromInt32(1)< %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + loc = _do_newlocale(tls, mask, name, loc) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return loc +} + +func Xnewlocale(tls *TLS, mask int32, name uintptr, loc Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v mask=%v name=%v loc=%v, (%v:)", tls, mask, name, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__newlocale(tls, mask, name, loc) +} + +/* +grammar: + +Start = Expr ';' +Expr = Or | Or '?' Expr ':' Expr +Or = And | Or '||' And +And = Eq | And '&&' Eq +Eq = Rel | Eq '==' Rel | Eq '!=' Rel +Rel = Add | Rel '<=' Add | Rel '>=' Add | Rel '<' Add | Rel '>' Add +Add = Mul | Add '+' Mul | Add '-' Mul +Mul = Prim | Mul '*' Prim | Mul '/' Prim | Mul '%' Prim +Prim = '(' Expr ')' | '!' Prim | decimal | 'n' + +internals: + +recursive descent expression evaluator with stack depth limit. +for binary operators an operator-precedence parser is used. +eval* functions store the result of the parsed subexpression +and return a pointer to the next non-space character. +*/ + +type Tst = struct { + Fr uint64 + Fn uint64 + Fop int32 +} + +func _skipspace(tls *TLS, s uintptr) (r uintptr) { + var v1, v2 int32 + _, _ = v1, v2 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + return s +} + +func _evalprim(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* e at bp+0 */ uintptr + _ = v1 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _skipspace(tls, s) + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = Xstrtoul(tls, s, bp, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp)) == s || (*Tst)(unsafe.Pointer(st)).Fr == uint64(-Int32FromInt32(1)) { + return __ccgo_ts + } + return _skipspace(tls, *(*uintptr)(unsafe.Pointer(bp))) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('n') { + (*Tst)(unsafe.Pointer(st)).Fr = (*Tst)(unsafe.Pointer(st)).Fn + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(')') { + return __ccgo_ts + } + return _skipspace(tls, s+uintptr(1)) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('!') { + s = _evalprim(tls, st, s+uintptr(1), d) + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(!((*Tst)(unsafe.Pointer(st)).Fr != 0)) + return s + } + return __ccgo_ts +} + +func _binop(tls *TLS, st uintptr, op int32, left uint64) (r int32) { + var a, b uint64 + _, _ = a, b + a = left + b = (*Tst)(unsafe.Pointer(st)).Fr + switch op { + case 0: + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 || b != 0) + return 0 + case int32(1): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != 0 && b != 0) + return 0 + case int32(2): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a == b) + return 0 + case int32(3): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a != b) + return 0 + case int32(4): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a >= b) + return 0 + case int32(5): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a <= b) + return 0 + case int32(6): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a > b) + return 0 + case int32(7): + (*Tst)(unsafe.Pointer(st)).Fr = BoolUint64(a < b) + return 0 + case int32(8): + (*Tst)(unsafe.Pointer(st)).Fr = a + b + return 0 + case int32(9): + (*Tst)(unsafe.Pointer(st)).Fr = a - b + return 0 + case int32(10): + (*Tst)(unsafe.Pointer(st)).Fr = a * b + return 0 + case int32(11): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a % b + return 0 + } + return int32(1) + case int32(12): + if b != 0 { + (*Tst)(unsafe.Pointer(st)).Fr = a / b + return 0 + } + return int32(1) + } + return int32(1) +} + +func _parseop(tls *TLS, st uintptr, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(i < int32(11)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(_opch[i]) { + /* note: >,< are accepted with or without = */ + if i < int32(6) && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(_opch2[i]) { + (*Tst)(unsafe.Pointer(st)).Fop = i + return s + uintptr(2) + } + if i >= int32(4) { + (*Tst)(unsafe.Pointer(st)).Fop = i + int32(2) + return s + uintptr(1) + } + break + } + goto _1 + _1: + ; + i++ + } + (*Tst)(unsafe.Pointer(st)).Fop = int32(13) + return s +} + +var _opch = [11]uint8{'|', '&', '=', '!', '>', '<', '+', '-', '*', '%', '/'} + +var _opch2 = [6]uint8{'|', '&', '=', '=', '=', '='} + +func _evalbinop(tls *TLS, st uintptr, s uintptr, minprec int32, d int32) (r uintptr) { + var left uint64 + var op int32 + _, _ = left, op + d-- + s = _evalprim(tls, st, s, d) + s = _parseop(tls, st, s) + for { + /* + st->r (left hand side value) and st->op are now set, + get the right hand side or back out if op has low prec, + if op was missing then prec[op]==0 + */ + op = (*Tst)(unsafe.Pointer(st)).Fop + if int32(_prec[op]) <= minprec { + return s + } + left = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalbinop(tls, st, s, int32(_prec[op]), d) + if _binop(tls, st, op, left) != 0 { + return __ccgo_ts + } + goto _1 + _1: + } + return r +} + +var _prec = [14]uint8{ + 0: uint8(1), + 1: uint8(2), + 2: uint8(3), + 3: uint8(3), + 4: uint8(4), + 5: uint8(4), + 6: uint8(4), + 7: uint8(4), + 8: uint8(5), + 9: uint8(5), + 10: uint8(6), + 11: uint8(6), + 12: uint8(6), +} + +func _evalexpr(tls *TLS, st uintptr, s uintptr, d int32) (r uintptr) { + var a, b, v2 uint64 + var v1 int32 + _, _, _, _ = a, b, v1, v2 + d-- + v1 = d + if v1 < 0 { + return __ccgo_ts + } + s = _evalbinop(tls, st, s, 0, d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') { + return s + } + a = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(':') { + return __ccgo_ts + } + b = (*Tst)(unsafe.Pointer(st)).Fr + s = _evalexpr(tls, st, s+uintptr(1), d) + if a != 0 { + v2 = b + } else { + v2 = (*Tst)(unsafe.Pointer(st)).Fr + } + (*Tst)(unsafe.Pointer(st)).Fr = v2 + return s +} + +func X__pleval(tls *TLS, s uintptr, n uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uint64 + var _ /* st at bp+0 */ Tst + _ = v1 + (*(*Tst)(unsafe.Pointer(bp))).Fn = n + s = _evalexpr(tls, bp, s, int32(100)) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(';') { + v1 = (*(*Tst)(unsafe.Pointer(bp))).Fr + } else { + v1 = uint64(-Int32FromInt32(1)) + } + return v1 +} + +var _buf1 [144]uint8 + +func Xsetlocale(tls *TLS, cat int32, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cat=%v name=%v, (%v:)", tls, cat, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var i, same int32 + var l Tsize_t + var lm, lm1, p, part1, ret, s, z, v3, v4, v5, v6 uintptr + var _ /* part at bp+48 */ [24]uint8 + var _ /* tmp_locale at bp+0 */ t__locale_struct + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, lm, lm1, p, part1, ret, s, same, z, v3, v4, v5, v6 + if uint32(cat) > uint32(LC_ALL) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + /* For LC_ALL, setlocale is required to return a string which + * encodes the current setting for all categories. The format of + * this string is unspecified, and only the following code, which + * performs both the serialization and deserialization, depends + * on the format, so it can easily be changed if needed. */ + if cat == int32(LC_ALL) { + if name != 0 { + *(*[24]uint8)(unsafe.Pointer(bp + 48)) = [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'} + p = name + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + z = X__strchrnul(tls, p, int32(';')) + if int64(z)-int64(p) <= int64(LOCALE_NAME_MAX) { + Xmemcpy(tls, bp+48, p, uint64(int64(z)-int64(p))) + (*(*[24]uint8)(unsafe.Pointer(bp + 48)))[int64(z)-int64(p)] = uint8(0) + if *(*uint8)(unsafe.Pointer(z)) != 0 { + p = z + uintptr(1) + } + } + lm = X__get_locale(tls, i, bp+48) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = lm + goto _1 + _1: + ; + i++ + } + X__libc.Fglobal_locale = *(*t__locale_struct)(unsafe.Pointer(bp)) + } + s = uintptr(unsafe.Pointer(&_buf1)) + same = 0 + i = 0 + for { + if !(i < int32(LC_ALL)) { + break + } + lm1 = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(i)*8)) + if lm1 == *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56)) { + same++ + } + if lm1 != 0 { + v3 = lm1 + 16 + } else { + v3 = __ccgo_ts + 562 + } + part1 = v3 + l = Xstrlen(tls, part1) + Xmemcpy(tls, s, part1, l) + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(';') + s += uintptr(l + uint64(1)) + goto _2 + _2: + ; + i++ + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + if same == int32(LC_ALL) { + v5 = part1 + } else { + v5 = uintptr(unsafe.Pointer(&_buf1)) + } + return v5 + } + if name != 0 { + lm = X__get_locale(tls, cat, name) + if lm == uintptr(-Int32FromInt32(1)) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return uintptr(0) + } + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) = lm + } else { + lm = *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__libc)) + 56 + uintptr(cat)*8)) + } + if lm != 0 { + v6 = lm + 16 + } else { + v6 = __ccgo_ts + 562 + } + ret = v6 + ___unlock(tls, uintptr(unsafe.Pointer(&X__locale_lock))) + return ret +} + +func X__strcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcmp(tls, l, r) +} + +func Xstrcoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrcoll_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcoll_l(tls, l, r, loc) +} + +func _vstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, ap Tva_list) (r Tssize_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var fill, fw, intl, left, lp, negpar, nogrp, nosym, rp, w int32 + var l Tsize_t + var s0, v12, v5, v6, v8 uintptr + var x float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = fill, fw, intl, l, left, lp, negpar, nogrp, nosym, rp, s0, w, x, v12, v5, v6, v8 + s0 = s +_3: + ; + if !(n != 0 && *(*uint8)(unsafe.Pointer(fmt)) != 0) { + goto _1 + } + if !(int32(*(*uint8)(unsafe.Pointer(fmt))) != int32('%')) { + goto _4 + } + goto literal +literal: + ; + v5 = s + s++ + v6 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + n-- + goto _2 +_4: + ; + fmt++ + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('%') { + goto literal + } + fill = int32(' ') + nogrp = 0 + negpar = 0 + nosym = 0 + left = 0 + for { + switch int32(*(*uint8)(unsafe.Pointer(fmt))) { + case int32('='): + fmt++ + v8 = fmt + fill = int32(*(*uint8)(unsafe.Pointer(v8))) + goto _7 + case int32('^'): + nogrp = int32(1) + goto _7 + case int32('('): + negpar = int32(1) + fallthrough + case int32('+'): + goto _7 + case int32('!'): + nosym = int32(1) + goto _7 + case int32('-'): + left = int32(1) + goto _7 + } + break + goto _7 + _7: + ; + fmt++ + } + fw = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + fw = int32(10)*fw + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _9 + _9: + ; + fmt++ + } + lp = 0 + rp = int32(2) + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('#') { + lp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + lp = int32(10)*lp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _10 + _10: + ; + fmt++ + } + } + if int32(*(*uint8)(unsafe.Pointer(fmt))) == int32('.') { + rp = 0 + fmt++ + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(fmt)))-uint32('0') < uint32(10)) != 0) { + break + } + rp = int32(10)*rp + (int32(*(*uint8)(unsafe.Pointer(fmt))) - int32('0')) + goto _11 + _11: + ; + fmt++ + } + } + v12 = fmt + fmt++ + intl = BoolInt32(int32(*(*uint8)(unsafe.Pointer(v12))) == int32('i')) + w = lp + int32(1) + rp + if !(left != 0) && fw > w { + w = fw + } + x = VaFloat64(&ap) + l = uint64(Xsnprintf(tls, s, n, __ccgo_ts+600, VaList(bp+8, w, rp, x))) + if l >= n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(E2BIG) + return int64(-int32(1)) + } + s += uintptr(l) + n -= l + goto _2 +_2: + ; + goto _3 + goto _1 +_1: + ; + return int64(s) - int64(s0) +} + +func Xstrfmon_l(tls *TLS, s uintptr, n Tsize_t, loc Tlocale_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v loc=%v fmt=%v va=%v, (%v:)", tls, s, n, loc, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, loc, fmt, ap) + _ = ap + return ret +} + +func Xstrfmon(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret Tssize_t + _, _ = ap, ret + ap = va + ret = _vstrfmon_l(tls, s, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale, fmt, ap) + _ = ap + return ret +} + +func Xstrtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof(tls, s, p) +} + +func Xstrtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, p) +} + +func Xstrtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold(tls, s, p) +} + +func X__strtod_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod_l(tls, s, p, l) +} + +func X__strtof_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtof_l(tls, s, p, l) +} + +func X__strtold_l(tls *TLS, s uintptr, p uintptr, l Tlocale_t) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v l=%v, (%v:)", tls, s, p, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtold_l(tls, s, p, l) +} + +// C documentation +// +// /* collate only by code points */ +func X__strxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, src) + if n > l { + Xstrcpy(tls, dest, src) + } + return l +} + +func Xstrxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xstrxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strxfrm_l(tls, dest, src, n, loc) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _current_domain uintptr + +func X__gettextdomain(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if _current_domain != 0 { + v1 = _current_domain + } else { + v1 = __ccgo_ts + 454 + } + return v1 +} + +func Xtextdomain(tls *TLS, domainname uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v domainname=%v, (%v:)", tls, domainname, origin(2)) + defer func() { trc("-> %v", r) }() + } + var domlen Tsize_t + _ = domlen + if !(domainname != 0) { + return X__gettextdomain(tls) + } + domlen = Xstrlen(tls, domainname) + if domlen > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(_current_domain != 0) { + _current_domain = Xmalloc(tls, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if !(_current_domain != 0) { + return uintptr(0) + } + } + Xmemcpy(tls, _current_domain, domainname, domlen+uint64(1)) + return _current_domain +} + +func Xgettext(tls *TLS, msgid uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid=%v, (%v:)", tls, msgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdgettext(tls, uintptr(0), msgid) +} + +func Xngettext(tls *TLS, msgid1 uintptr, msgid2 uintptr, n uint64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v msgid1=%v msgid2=%v n=%v, (%v:)", tls, msgid1, msgid2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xdngettext(tls, uintptr(0), msgid1, msgid2, n) +} + +func X__uselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var global, old, v1, v2 Tlocale_t + var self Tpthread_t + _, _, _, _, _ = global, old, self, v1, v2 + self = uintptr(___get_tp(tls)) + old = (*t__pthread)(unsafe.Pointer(self)).Flocale + global = uintptr(unsafe.Pointer(&X__libc)) + 56 + if new1 != 0 { + if new1 == uintptr(-Int32FromInt32(1)) { + v1 = global + } else { + v1 = new1 + } + (*t__pthread)(unsafe.Pointer(self)).Flocale = v1 + } + if old == global { + v2 = uintptr(-Int32FromInt32(1)) + } else { + v2 = old + } + return v2 +} + +func Xuselocale(tls *TLS, new1 Tlocale_t) (r Tlocale_t) { + if __ccgo_strace { + trc("tls=%v new1=%v, (%v:)", tls, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__uselocale(tls, new1) +} + +// C documentation +// +// /* FIXME: stub */ +func X__wcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscmp(tls, l, r) +} + +func Xwcscoll(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* FIXME: stub */ +func Xwcscoll_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__wcscoll_l(tls, l, r, locale) +} + +// C documentation +// +// /* collate only by code points */ +func X__wcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xwcslen(tls, src) + if l < n { + Xwmemcpy(tls, dest, src, l+uint64(1)) + } else { + if n != 0 { + Xwmemcpy(tls, dest, src, n-uint64(1)) + *(*Twchar_t)(unsafe.Pointer(dest + uintptr(n-uint64(1))*4)) = 0 + } + } + return l +} + +func Xwcsxfrm(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +// C documentation +// +// /* collate only by code points */ +func Xwcsxfrm_l(tls *TLS, dest uintptr, src uintptr, n Tsize_t, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v loc=%v, (%v:)", tls, dest, src, n, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsxfrm_l(tls, dest, src, n, loc) +} + +func Xreallocarray(tls *TLS, ptr uintptr, m Tsize_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ptr=%v m=%v n=%v, (%v:)", tls, ptr, m, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n != 0 && m > uint64(-Int32FromInt32(1))/n { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + return Xrealloc(tls, ptr, m*n) +} + +const LDBL_EPSILON2 = 0 +const LDBL_MAX2 = 0 +const LDBL_MIN2 = 0 + +var _C1 = float64(0.0416666666666666) /* 0x3FA55555, 0x5555554C */ +var _C2 = -Float64FromFloat64(0.001388888888887411) /* 0xBF56C16C, 0x16C15177 */ +var _C3 = float64(2.480158728947673e-05) /* 0x3EFA01A0, 0x19CB1590 */ +var _C4 = -Float64FromFloat64(2.7557314351390663e-07) /* 0xBE927E4F, 0x809C52AD */ +var _C5 = float64(2.087572321298175e-09) /* 0x3E21EE9E, 0xBDB4B1C4 */ +var _C6 = -Float64FromFloat64(1.1359647557788195e-11) /* 0xBDA8FAE9, 0xBE8838D4 */ + +func X__cos(tls *TLS, x float64, y float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hz, r, w, z Tdouble_t + _, _, _, _ = hz, r, w, z + z = x * x + w = z * z + r = z*(_C1+z*(_C2+z*_C3)) + w*w*(_C4+z*(_C5+z*_C6)) + hz = float64(0.5) * z + w = float64(1) - hz + return w + (Float64FromFloat64(1) - w - hz + (z*r - x*y)) +} + +// C documentation +// +// /* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ + +var _C0 = -Float64FromFloat64(0.499999997251031) /* -0.499999997251031003120 */ +var _C11 = float64(0.04166662332373906) /* 0.0416666233237390631894 */ +var _C21 = -Float64FromFloat64(0.001388676377460993) /* -0.00138867637746099294692 */ +var _C31 = float64(2.439044879627741e-05) /* 0.0000243904487962774090654 */ + +func X__cosdf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, w, z Tdouble_t + _, _, _ = r, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _C21 + z*_C31 + return float32(float64(1) + z*_C0 + w*_C11 + w*z*r) +} + +// C documentation +// +// /* k is such that k*ln2 has minimal relative error and x - kln2 > log(DBL_MIN) */ +var _k2 = int32(2043) +var _kln22 = float64(1416.0996898839683) + +// C documentation +// +// /* exp(x)/2 for x >= log(DBL_MAX), slightly better than 0.5*exp(x/2)*exp(x/2) */ +func X__expo2(tls *TLS, x float64, sign float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float64 + var v1 Tuint64_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint64(uint32(Int32FromInt32(0x3ff)+_k2/Int32FromInt32(2))< log(FLT_MIN) */ +var _k3 = int32(235) +var _kln23 = Float32FromFloat32(162.88958740234375) + +// C documentation +// +// /* expf(x)/2 for x >= log(FLT_MAX), slightly better than 0.5f*expf(x/2)*expf(x/2) */ +func X__expo2f(tls *TLS, x float32, sign float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v sign=%v, (%v:)", tls, x, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var scale float32 + var v1 Tuint32_t + _, _ = scale, v1 + /* note that k is odd and scale*scale overflows */ + v1 = uint32(Int32FromInt32(0x7f)+_k3/Int32FromInt32(2)) << int32(23) + scale = *(*float32)(unsafe.Pointer(&v1)) + /* exp(x - k ln2) * 2**(k-1) */ + /* in directed rounding correct sign before rounding or overflow is important */ + return Xexpf(tls, x-_kln23) * (sign * scale) * scale +} + +func X__fpclassify(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + if *(*Tuint64_t)(unsafe.Pointer(bp))< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1, v2 int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = e, v1, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(e != 0) { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return X__fpclassify(tls, x) +} + +const pio2_hi = 0 +const pio2_lo = 0 + +func X__math_divzero(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float64 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float64FromFloat64(1) + } else { + v1 = float64(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / float64(0) +} + +func X__math_divzerof(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, v1, v2 float32 + _, _, _ = y, v1, v2 + if sign != 0 { + v1 = -Float32FromFloat32(1) + } else { + v1 = Float32FromFloat32(1) + } + y = v1 + v2 = y + goto _3 +_3: + return v2 / Float32FromFloat32(0) +} + +func X__math_invalid(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_invalidf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (x - x) / (x - x) +} + +func X__math_oflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(3.105036184601418e+231)) +} + +func X__math_oflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(1.5845632502852868e+29)) +} + +func X__math_uflow(tls *TLS, sign Tuint32_t) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflow(tls, sign, float64(1.2882297539194267e-231)) +} + +func X__math_uflowf(tls *TLS, sign Tuint32_t) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v, (%v:)", tls, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__math_xflowf(tls, sign, Float32FromFloat32(2.524354896707238e-29)) +} + +func X__math_xflow(tls *TLS, sign Tuint32_t, y2 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float64 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +func X__math_xflowf(tls *TLS, sign Tuint32_t, y2 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v sign=%v y2=%v, (%v:)", tls, sign, y2, origin(2)) + defer func() { trc("-> %v", r) }() + } + var y, y1, v1, v2, v4 float32 + _, _, _, _, _ = y, y1, v1, v2, v4 + if sign != 0 { + v1 = -y2 + } else { + v1 = y2 + } + y1 = v1 + v2 = y1 + goto _3 +_3: + y = v2 * y2 + v4 = y + goto _5 +_5: + return v4 +} + +const DBL_EPSILON1 = 2.220446049250313e-16 +const EPS = 0 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 33 bit of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// * pio2_2: second 33 bit of pi/2 +// * pio2_2t: pi/2 - (pio2_1+pio2_2) +// * pio2_3: third 33 bit of pi/2 +// * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +// */ + +var _toint = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio4 = float64(0.7853981633974483) +var _invpio2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_1 = float64(1.5707963267341256) /* 0x3FF921FB, 0x54400000 */ +var _pio2_1t = float64(6.077100506506192e-11) /* 0x3DD0B461, 0x1A626331 */ +var _pio2_2 = float64(6.077100506303966e-11) /* 0x3DD0B461, 0x1A600000 */ +var _pio2_2t = float64(2.0222662487959506e-21) /* 0x3BA3198A, 0x2E037073 */ +var _pio2_3 = float64(2.0222662487111665e-21) /* 0x3BA3198A, 0x2E000000 */ +var _pio2_3t = float64(8.4784276603689e-32) /* 0x397B839A, 0x252049C1 */ + +// C documentation +// +// /* caller must handle the case when reduction is not needed: |x| ~<= pi/4 */ +func X__rem_pio2(tls *TLS, x float64, y uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey, i, n, sign int32 + var fn, r, t, w, z Tdouble_t + var ix Tuint32_t + var v2 float64 + var _ /* tx at bp+8 */ [3]float64 + var _ /* ty at bp+32 */ [2]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, fn, i, ix, n, r, sign, t, w, z, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix <= uint32(0x400f6a7a) { /* |x| ~<= 5pi/4 */ + if ix&uint32(0xfffff) == uint32(0x921fb) { /* |x| ~= pi/2 or 2pi/2 */ + goto medium + } /* cancellation -- use medium case */ + if ix <= uint32(0x4002d97c) { /* |x| ~<= 3pi/4 */ + if !(sign != 0) { + z = x - _pio2_1 /* one round good to 85 bits */ + *(*float64)(unsafe.Pointer(y)) = z - _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - _pio2_1t + return int32(1) + } else { + z = x + _pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + _pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + _pio2_1t + return -int32(1) + } + } else { + if !(sign != 0) { + z = x - Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(2)*_pio2_1t + return int32(2) + } else { + z = x + Float64FromInt32(2)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(2)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(2)*_pio2_1t + return -int32(2) + } + } + } + if ix <= uint32(0x401c463b) { /* |x| ~<= 9pi/4 */ + if ix <= uint32(0x4015fdbc) { /* |x| ~<= 7pi/4 */ + if ix == uint32(0x4012d97c) { /* |x| ~= 3pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(3)*_pio2_1t + return int32(3) + } else { + z = x + Float64FromInt32(3)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(3)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(3)*_pio2_1t + return -int32(3) + } + } else { + if ix == uint32(0x401921fb) { /* |x| ~= 4pi/2 */ + goto medium + } + if !(sign != 0) { + z = x - Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z - Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) - Float64FromInt32(4)*_pio2_1t + return int32(4) + } else { + z = x + Float64FromInt32(4)*_pio2_1 + *(*float64)(unsafe.Pointer(y)) = z + Float64FromInt32(4)*_pio2_1t + *(*float64)(unsafe.Pointer(y + 1*8)) = z - *(*float64)(unsafe.Pointer(y)) + Float64FromInt32(4)*_pio2_1t + return -int32(4) + } + } + } + if !(ix < uint32(0x413921fb)) { + goto _1 + } /* |x| ~< 2^20*(pi/2), medium size */ + goto medium +medium: + ; + /* rint(x/(pi/2)) */ + fn = x*_invpio2 + _toint - _toint + n = int32(fn) + r = x - fn*_pio2_1 + w = fn * _pio2_1t /* 1st round, good to 85 bits */ + /* Matters with directed rounding. */ + if r-w < -_pio4 { + n-- + fn-- + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } else { + if r-w > _pio4 { + n++ + fn++ + r = x - fn*_pio2_1 + w = fn * _pio2_1t + } + } + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + ex = int32(ix >> int32(20)) + if ex-ey > int32(16) { /* 2nd round, good to 118 bits */ + t = r + w = fn * _pio2_2 + r = t - w + w = fn*_pio2_2t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + *(*float64)(unsafe.Pointer(bp)) = *(*float64)(unsafe.Pointer(y)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if ex-ey > int32(49) { /* 3rd round, good to 151 bits, covers all cases */ + t = r + w = fn * _pio2_3 + r = t - w + w = fn*_pio2_3t - (t - r - w) + *(*float64)(unsafe.Pointer(y)) = r - w + } + } + *(*float64)(unsafe.Pointer(y + 1*8)) = r - *(*float64)(unsafe.Pointer(y)) - w + return n +_1: + ; + /* + * all other (large) arguments + */ + if ix >= uint32(0x7ff00000) { /* x is inf or NaN */ + v2 = x - x + *(*float64)(unsafe.Pointer(y + 1*8)) = v2 + *(*float64)(unsafe.Pointer(y)) = v2 + return 0 + } + /* set z = scalbn(|x|,-ilogb(x)+23) */ + *(*float64)(unsafe.Pointer(bp)) = x + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) >> Int32FromInt32(12) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(Int32FromInt32(0x3ff)+Int32FromInt32(23)) << Int32FromInt32(52) + z = *(*float64)(unsafe.Pointer(bp)) + i = 0 + for { + if !(i < int32(2)) { + break + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = float64(int32(z)) + z = (z - (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i]) * float64(1.6777216e+07) + goto _3 + _3: + ; + i++ + } + (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] = z + /* skip zero terms, first term is non-zero */ + for (*(*[3]float64)(unsafe.Pointer(bp + 8)))[i] == float64(0) { + i-- + } + n = X__rem_pio2_large(tls, bp+8, bp+32, int32(ix>>Int32FromInt32(20))-(Int32FromInt32(0x3ff)+Int32FromInt32(23)), i+int32(1), int32(1)) + if sign != 0 { + *(*float64)(unsafe.Pointer(y)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return -n + } + *(*float64)(unsafe.Pointer(y)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[2]float64)(unsafe.Pointer(bp + 32)))[int32(1)] + return n +} + +const DBL_EPSILON2 = 0 + +var _init_jk = [4]int32{ + 0: int32(3), + 1: int32(4), + 2: int32(4), + 3: int32(6), +} /* initial value for jk */ + +// C documentation +// +// /* +// * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi +// * +// * integer array, contains the (24*i)-th to (24*i+23)-th +// * bit of 2/pi after binary point. The corresponding +// * floating value is +// * +// * ipio2[i] * 2^(-24(i+1)). +// * +// * NB: This table must have at least (e0-3)/24 + jk terms. +// * For quad precision (e0 <= 16360, jk = 6), this is 686. +// */ +var _ipio2 = [66]Tint32_t{ + 0: int32(0xA2F983), + 1: int32(0x6E4E44), + 2: int32(0x1529FC), + 3: int32(0x2757D1), + 4: int32(0xF534DD), + 5: int32(0xC0DB62), + 6: int32(0x95993C), + 7: int32(0x439041), + 8: int32(0xFE5163), + 9: int32(0xABDEBB), + 10: int32(0xC561B7), + 11: int32(0x246E3A), + 12: int32(0x424DD2), + 13: int32(0xE00649), + 14: int32(0x2EEA09), + 15: int32(0xD1921C), + 16: int32(0xFE1DEB), + 17: int32(0x1CB129), + 18: int32(0xA73EE8), + 19: int32(0x8235F5), + 20: int32(0x2EBB44), + 21: int32(0x84E99C), + 22: int32(0x7026B4), + 23: int32(0x5F7E41), + 24: int32(0x3991D6), + 25: int32(0x398353), + 26: int32(0x39F49C), + 27: int32(0x845F8B), + 28: int32(0xBDF928), + 29: int32(0x3B1FF8), + 30: int32(0x97FFDE), + 31: int32(0x05980F), + 32: int32(0xEF2F11), + 33: int32(0x8B5A0A), + 34: int32(0x6D1F6D), + 35: int32(0x367ECF), + 36: int32(0x27CB09), + 37: int32(0xB74F46), + 38: int32(0x3F669E), + 39: int32(0x5FEA2D), + 40: int32(0x7527BA), + 41: int32(0xC7EBE5), + 42: int32(0xF17B3D), + 43: int32(0x0739F7), + 44: int32(0x8A5292), + 45: int32(0xEA6BFB), + 46: int32(0x5FB11F), + 47: int32(0x8D5D08), + 48: int32(0x560330), + 49: int32(0x46FC7B), + 50: int32(0x6BABF0), + 51: int32(0xCFBC20), + 52: int32(0x9AF436), + 53: int32(0x1DA9E3), + 54: int32(0x91615E), + 55: int32(0xE61B08), + 56: int32(0x659985), + 57: int32(0x5F14A0), + 58: int32(0x68408D), + 59: int32(0xFFD880), + 60: int32(0x4D7327), + 61: int32(0x310606), + 62: int32(0x1556CA), + 63: int32(0x73A8C9), + 64: int32(0x60E27B), + 65: int32(0xC08C6B), +} + +var _PIo2 = [8]float64{ + 0: float64(1.570796251296997), + 1: float64(7.549789415861596e-08), + 2: float64(5.390302529957765e-15), + 3: float64(3.282003415807913e-22), + 4: float64(1.270655753080676e-29), + 5: float64(1.2293330898111133e-36), + 6: float64(2.7337005381646456e-44), + 7: float64(2.1674168387780482e-51), +} + +func X__rem_pio2_large(tls *TLS, x uintptr, y uintptr, e0 int32, nx int32, prec int32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v e0=%v nx=%v prec=%v, (%v:)", tls, x, y, e0, nx, prec, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var carry, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q0 Tint32_t + var f, q [20]float64 + var fw, z, v2, v20, v22, v24 float64 + var _ /* fq at bp+80 */ [20]float64 + var _ /* iq at bp+0 */ [20]Tint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = carry, f, fw, i, ih, j, jk, jp, jv, jx, jz, k, m, n, q, q0, z, v2, v20, v22, v24 + /* initialize jk*/ + jk = _init_jk[prec] + jp = jk + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx - int32(1) + jv = (e0 - int32(3)) / int32(24) + if jv < 0 { + jv = 0 + } + q0 = e0 - int32(24)*(jv+int32(1)) + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv - jx + m = jx + jk + i = 0 + for { + if !(i <= m) { + break + } + if j < 0 { + v2 = float64(0) + } else { + v2 = float64(_ipio2[j]) + } + f[i] = v2 + goto _1 + _1: + ; + i++ + j++ + } + /* compute q[0],q[1],...q[jk] */ + i = 0 + for { + if !(i <= jk) { + break + } + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _4 + _4: + ; + j++ + } + q[i] = fw + goto _3 + _3: + ; + i++ + } + jz = jk + goto recompute +recompute: + ; + /* distill q[] into iq[] reversingly */ + i = 0 + j = jz + z = q[jz] + for { + if !(j > 0) { + break + } + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + z = q[j-int32(1)] + fw + goto _5 + _5: + ; + i++ + j-- + } + /* compute n */ + z = Xscalbn(tls, z, q0) /* actual value of z */ + z -= float64(8) * Xfloor(tls, z*float64(0.125)) /* trim off integer >= 8 */ + n = int32(z) + z -= float64(n) + ih = 0 + if q0 > 0 { /* need iq[jz-1] to determine n */ + i = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(24) - q0) + n += i + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) -= i << (int32(24) - q0) + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> (int32(23) - q0) + } else { + if q0 == 0 { + ih = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz-int32(1)] >> int32(23) + } else { + if z >= float64(0.5) { + ih = int32(2) + } + } + } + if ih > 0 { /* q > 0.5 */ + n += int32(1) + carry = 0 + i = 0 + for { + if !(i < jz) { + break + } /* compute 1-q */ + j = (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + if carry == 0 { + if j != 0 { + carry = int32(1) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0x1000000) - j + } + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] = int32(0xffffff) - j + } + goto _6 + _6: + ; + i++ + } + if q0 > 0 { /* rare case: chance is 1 in 12 */ + switch q0 { + case int32(1): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x7fffff) + case int32(2): + *(*Tint32_t)(unsafe.Pointer(bp + uintptr(jz-int32(1))*4)) &= int32(0x3fffff) + break + } + } + if ih == int32(2) { + z = float64(1) - z + if carry != 0 { + z -= Xscalbn(tls, float64(1), q0) + } + } + } + /* check if recomputation is needed */ + if z == float64(0) { + j = 0 + i = jz - int32(1) + for { + if !(i >= jk) { + break + } + j |= (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i] + goto _7 + _7: + ; + i-- + } + if j == 0 { /* need recomputation */ + k = int32(1) + for { + if !((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jk-k] == 0) { + break + } + goto _8 + _8: + ; + k++ + } /* k = no. of terms needed */ + i = jz + int32(1) + for { + if !(i <= jz+k) { + break + } /* add q[jz+1] to q[jz+k] */ + f[jx+i] = float64(_ipio2[jv+i]) + j = 0 + fw = Float64FromFloat64(0) + for { + if !(j <= jx) { + break + } + fw += *(*float64)(unsafe.Pointer(x + uintptr(j)*8)) * f[jx+i-j] + goto _10 + _10: + ; + j++ + } + q[i] = fw + goto _9 + _9: + ; + i++ + } + jz += k + goto recompute + } + } + /* chop off zero terms */ + if z == float64(0) { + jz -= int32(1) + q0 -= int32(24) + for (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] == 0 { + jz-- + q0 -= int32(24) + } + } else { /* break z into 24-bit if necessary */ + z = Xscalbn(tls, z, -q0) + if z >= float64(1.6777216e+07) { + fw = float64(int32(Float64FromFloat64(5.960464477539063e-08) * z)) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z - Float64FromFloat64(1.6777216e+07)*fw) + jz += int32(1) + q0 += int32(24) + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(fw) + } else { + (*(*[20]Tint32_t)(unsafe.Pointer(bp)))[jz] = int32(z) + } + } + /* convert integer "bit" chunk to floating-point value */ + fw = Xscalbn(tls, float64(1), q0) + i = jz + for { + if !(i >= 0) { + break + } + q[i] = fw * float64((*(*[20]Tint32_t)(unsafe.Pointer(bp)))[i]) + fw *= float64(5.960464477539063e-08) + goto _11 + _11: + ; + i-- + } + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + i = jz + for { + if !(i >= 0) { + break + } + fw = float64(0) + k = Int32FromInt32(0) + for { + if !(k <= jp && k <= jz-i) { + break + } + fw += _PIo2[k] * q[i+k] + goto _13 + _13: + ; + k++ + } + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[jz-i] = fw + goto _12 + _12: + ; + i-- + } + /* compress fq[] into y[] */ + switch prec { + case 0: + goto _14 + case int32(2): + goto _15 + case int32(1): + goto _16 + case int32(3): + goto _17 + } + goto _18 +_14: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _19 + _19: + ; + i-- + } + if ih == 0 { + v20 = fw + } else { + v20 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v20 + goto _18 +_16: + ; +_15: + ; + fw = float64(0) + i = jz + for { + if !(i >= 0) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _21 + _21: + ; + i-- + } + // TODO: drop excess precision here once double_t is used + fw = fw + if ih == 0 { + v22 = fw + } else { + v22 = -fw + } + *(*float64)(unsafe.Pointer(y)) = v22 + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] - fw + i = int32(1) + for { + if !(i <= jz) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _23 + _23: + ; + i++ + } + if ih == 0 { + v24 = fw + } else { + v24 = -fw + } + *(*float64)(unsafe.Pointer(y + 1*8)) = v24 + goto _18 +_17: + ; /* painful */ + i = jz +_27: + ; + if !(i > 0) { + goto _25 + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _26 +_26: + ; + i-- + goto _27 + goto _25 +_25: + ; + i = jz + for { + if !(i > int32(1)) { + break + } + fw = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + *(*float64)(unsafe.Pointer(bp + 80 + uintptr(i)*8)) += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] - fw + (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i-int32(1)] = fw + goto _28 + _28: + ; + i-- + } + fw = float64(0) + i = jz + for { + if !(i >= int32(2)) { + break + } + fw += (*(*[20]float64)(unsafe.Pointer(bp + 80)))[i] + goto _29 + _29: + ; + i-- + } + if ih == 0 { + *(*float64)(unsafe.Pointer(y)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = (*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = fw + } else { + *(*float64)(unsafe.Pointer(y)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[0] + *(*float64)(unsafe.Pointer(y + 1*8)) = -(*(*[20]float64)(unsafe.Pointer(bp + 80)))[int32(1)] + *(*float64)(unsafe.Pointer(y + 2*8)) = -fw + } +_18: + ; + return n & int32(7) +} + +const DBL_EPSILON3 = 2.220446049250313e-16 + +// C documentation +// +// /* +// * invpio2: 53 bits of 2/pi +// * pio2_1: first 25 bits of pi/2 +// * pio2_1t: pi/2 - pio2_1 +// */ + +var _toint1 = Float64FromFloat64(1.5) / Float64FromFloat64(2.220446049250313e-16) +var _pio41 = float64(0.7853981852531433) +var _invpio21 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ +var _pio2_11 = float64(1.5707963109016418) /* 0x3FF921FB, 0x50000000 */ +var _pio2_1t1 = float64(1.5893254773528196e-08) /* 0x3E5110b4, 0x611A6263 */ + +func X__rem_pio2f(tls *TLS, x float32, y uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e0, n, sign int32 + var fn Tdouble_t + var ix Tuint32_t + var _ /* tx at bp+8 */ [1]float64 + var _ /* ty at bp+16 */ [1]float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e0, fn, ix, n, sign + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + /* 25+53 bit pi is good enough for medium size */ + if ix < uint32(0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */ + /* Use a specialized rint() to get fn. */ + fn = float64(x)*_invpio21 + _toint1 - _toint1 + n = int32(fn) + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + /* Matters with directed rounding. */ + if *(*float64)(unsafe.Pointer(y)) < -_pio41 { + n-- + fn-- + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } else { + if *(*float64)(unsafe.Pointer(y)) > _pio41 { + n++ + fn++ + *(*float64)(unsafe.Pointer(y)) = float64(x) - fn*_pio2_11 - fn*_pio2_1t1 + } + } + return n + } + if ix >= uint32(0x7f800000) { /* x is inf or NaN */ + *(*float64)(unsafe.Pointer(y)) = float64(x - x) + return 0 + } + /* scale x into [2^23, 2^24-1] */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + e0 = int32(ix>>Int32FromInt32(23) - uint32(Int32FromInt32(0x7f)+Int32FromInt32(23))) /* e0 = ilogb(|x|)-23, positive */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix - uint32(e0< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) +} + +// C documentation +// +// // FIXME: macro in math.h +func X__signbitf(tls *TLS, x float32) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + return int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) +} + +func X__signbitl(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__signbit(tls, x) +} + +var _S1 = -Float64FromFloat64(0.16666666666666632) /* 0xBFC55555, 0x55555549 */ +var _S2 = float64(0.00833333333332249) /* 0x3F811111, 0x1110F8A6 */ +var _S3 = -Float64FromFloat64(0.0001984126982985795) /* 0xBF2A01A0, 0x19C161D5 */ +var _S4 = float64(2.7557313707070068e-06) /* 0x3EC71DE3, 0x57B1FE7D */ +var _S5 = -Float64FromFloat64(2.5050760253406863e-08) /* 0xBE5AE5E6, 0x8A2B9CEB */ +var _S6 = float64(1.58969099521155e-10) /* 0x3DE5D93A, 0x5ACFD57C */ + +func X__sin(tls *TLS, x float64, y float64, iy int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v iy=%v, (%v:)", tls, x, y, iy, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v, w, z Tdouble_t + _, _, _, _ = r, v, w, z + z = x * x + w = z * z + r = _S2 + z*(_S3+z*_S4) + z*w*(_S5+z*_S6) + v = z * x + if iy == 0 { + return x + v*(_S1+z*r) + } else { + return x - (z*(Float64FromFloat64(0.5)*y-v*r) - y - v*_S1) + } + return r1 +} + +// C documentation +// +// /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ + +var _S11 = -Float64FromFloat64(0.16666666641626524) /* -0.166666666416265235595 */ +var _S21 = float64(0.008333329385889463) /* 0.0083333293858894631756 */ +var _S31 = -Float64FromFloat64(0.00019839334836096632) /* -0.000198393348360966317347 */ +var _S41 = float64(2.718311493989822e-06) /* 0.0000027183114939898219064 */ + +func X__sindf(tls *TLS, x float64) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, s, w, z Tdouble_t + _, _, _, _ = r, s, w, z + /* Try to optimize for parallel evaluation as in __tandf.c. */ + z = x * x + w = z * z + r = _S31 + z*_S41 + s = z * x + return float32(x + s*(_S11+z*_S21) + s*w*r) +} + +var _T = [13]float64{ + 0: float64(0.3333333333333341), + 1: float64(0.13333333333320124), + 2: float64(0.05396825397622605), + 3: float64(0.021869488294859542), + 4: float64(0.0088632398235993), + 5: float64(0.0035920791075913124), + 6: float64(0.0014562094543252903), + 7: float64(0.0005880412408202641), + 8: float64(0.0002464631348184699), + 9: float64(7.817944429395571e-05), + 10: float64(7.140724913826082e-05), + 11: -Float64FromFloat64(1.8558637485527546e-05), + 12: float64(2.590730518636337e-05), +} +var _pio42 = float64(0.7853981633974483) /* 3FE921FB, 54442D18 */ +var _pio4lo = float64(3.061616997868383e-17) /* 3C81A626, 33145C07 */ + +func X__tan(tls *TLS, x float64, y float64, odd int32) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v odd=%v, (%v:)", tls, x, y, odd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a, r, s, v, w, z, v1, v3 Tdouble_t + var a0, w0 float64 + var big, sign int32 + var hx Tuint32_t + var v2, v4 Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, a0, big, hx, r, s, sign, v, w, w0, z, v1, v2, v3, v4 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + big = BoolInt32(hx&uint32(0x7fffffff) >= uint32(0x3FE59428)) /* |x| >= 0.6744 */ + if big != 0 { + sign = int32(hx >> int32(31)) + if sign != 0 { + x = -x + y = -y + } + x = _pio42 - x + (_pio4lo - y) + y = float64(0) + } + z = x * x + w = z * z + /* + * Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = _T[int32(1)] + w*(_T[int32(3)]+w*(_T[int32(5)]+w*(_T[int32(7)]+w*(_T[int32(9)]+w*_T[int32(11)])))) + v = z * (_T[int32(2)] + w*(_T[int32(4)]+w*(_T[int32(6)]+w*(_T[int32(8)]+w*(_T[int32(10)]+w*_T[int32(12)]))))) + s = z * x + r = y + z*(s*(r+v)+y) + s*_T[0] + w = x + r + if big != 0 { + s = float64(int32(1) - int32(2)*odd) + v = s - float64(2)*(x+(r-w*w/(w+s))) + if sign != 0 { + v1 = -v + } else { + v1 = v + } + return v1 + } + if !(odd != 0) { + return w + } + /* -1.0/(x+r) has up to 2ulp error, so compute it accurately */ + w0 = w + v2 = *(*Tuint64_t)(unsafe.Pointer(&w0))>>Int32FromInt32(32)<>Int32FromInt32(32)< %v", r1) }() + } + var r, s, t, u, w, z Tdouble_t + var v1 float64 + _, _, _, _, _, _, _ = r, s, t, u, w, z, v1 + z = x * x + /* + * Split up the polynomial into small independent terms to give + * opportunities for parallel evaluation. The chosen splitting is + * micro-optimized for Athlons (XP, X64). It costs 2 multiplications + * relative to Horner's method on sequential machines. + * + * We add the small terms from lowest degree up for efficiency on + * non-sequential machines (the lowest degree terms tend to be ready + * earlier). Apart from this, we don't care about order of + * operations, and don't need to to care since we have precision to + * spare. However, the chosen splitting is good for accuracy too, + * and would give results as accurate as Horner's method if the + * small terms were added from highest degree down. + */ + r = _T1[int32(4)] + z*_T1[int32(5)] + t = _T1[int32(2)] + z*_T1[int32(3)] + w = z * z + s = z * x + u = _T1[0] + z*_T1[int32(1)] + r = x + s*u + s*w*(t+w*r) + if odd != 0 { + v1 = -Float64FromFloat64(1) / r + } else { + v1 = r + } + return float32(v1) +} + +var _pio2_hi = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +var _pS0 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS1 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS2 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS3 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS4 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS5 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS1 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS2 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS3 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS4 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS0 + z*(_pS1+z*(_pS2+z*(_pS3+z*(_pS4+z*_pS5))))) + q = float64(1) + z*(_qS1+z*(_qS2+z*(_qS3+z*_qS4))) + return p / q +} + +func Xacos(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, df, s, w, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, df, hx, ix, lx, s, w, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* acos(1)=0, acos(-1)=pi */ + if hx>>int32(31) != 0 { + return Float64FromInt32(2)*_pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + if ix <= uint32(0x3c600000) { /* |x| < 2**-57 */ + return _pio2_hi + Float64FromFloat32(7.52316384526264e-37) + } + return _pio2_hi - (x - (_pio2_lo - x*_R(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (float64(1) + x) * float64(0.5) + s = Xsqrt(tls, z) + w = _R(tls, z)*s - _pio2_lo + return Float64FromInt32(2) * (_pio2_hi - (s + w)) + } + /* x > 0.5 */ + z = (float64(1) - x) * float64(0.5) + s = Xsqrt(tls, z) + df = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&df))>>Int32FromInt32(32)< %v", r) }() + } + var c, df, s, w, z float32 + var hx, ix, v1 Tuint32_t + _, _, _, _, _, _, _, _ = c, df, hx, ix, s, w, z, v1 + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3f800000) { + if ix == uint32(0x3f800000) { + if hx>>int32(31) != 0 { + return Float32FromInt32(2)*_pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return Float32FromInt32(0) + } + return Float32FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3f000000) { + if ix <= uint32(0x32800000) { /* |x| < 2**-26 */ + return _pio2_hi1 + Float32FromFloat32(7.52316384526264e-37) + } + return _pio2_hi1 - (x - (_pio2_lo1 - x*_R1(tls, x*x))) + } + /* x < -0.5 */ + if hx>>int32(31) != 0 { + z = (Float32FromInt32(1) + x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + w = _R1(tls, z)*s - _pio2_lo1 + return Float32FromInt32(2) * (_pio2_hi1 - (s + w)) + } + /* x > 0.5 */ + z = (Float32FromInt32(1) - x) * Float32FromFloat32(0.5) + s = Xsqrtf(tls, z) + hx = *(*Tuint32_t)(unsafe.Pointer(&s)) + v1 = hx & uint32(0xfffff000) + df = *(*float32)(unsafe.Pointer(&v1)) + c = (z - df*df) / (s + df) + w = _R1(tls, z)*s + c + return Float32FromInt32(2) * (df + w) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacosh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e uint32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = e + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + /* x < 1 domain error is handled in the called functions */ + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| < 2, up to 2ulp error in [1,1.125] */ + return Xlog1p(tls, x-Float64FromInt32(1)+Xsqrt(tls, (x-Float64FromInt32(1))*(x-Float64FromInt32(1))+Float64FromInt32(2)*(x-Float64FromInt32(1)))) + } + if e < uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| < 0x1p26 */ + return Xlog(tls, Float64FromInt32(2)*x-Float64FromInt32(1)/(x+Xsqrt(tls, x*x-Float64FromInt32(1)))) + } + /* |x| >= 0x1p26 or nan */ + return Xlog(tls, x) + float64(0.6931471805599453) +} + +// C documentation +// +// /* acosh(x) = log(x + sqrt(x*x-1)) */ +func Xacoshf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = a + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + a = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if a < uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 0x1p12 or x <= -2 or nan */ + return Xlogf(tls, x) + Float32FromFloat32(0.6931471805599453) +} + +func Xacoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacosh(tls, x) +} + +func Xacosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xacos(tls, x) +} + +var _pio2_hi2 = float64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _pio2_lo2 = float64(6.123233995736766e-17) /* 0x3C91A626, 0x33145C07 */ +/* coefficients for R(x^2) */ +var _pS02 = float64(0.16666666666666666) /* 0x3FC55555, 0x55555555 */ +var _pS12 = -Float64FromFloat64(0.3255658186224009) /* 0xBFD4D612, 0x03EB6F7D */ +var _pS22 = float64(0.20121253213486293) /* 0x3FC9C155, 0x0E884455 */ +var _pS31 = -Float64FromFloat64(0.04005553450067941) /* 0xBFA48228, 0xB5688F3B */ +var _pS41 = float64(0.0007915349942898145) /* 0x3F49EFE0, 0x7501B288 */ +var _pS51 = float64(3.479331075960212e-05) /* 0x3F023DE1, 0x0DFDF709 */ +var _qS12 = -Float64FromFloat64(2.403394911734414) /* 0xC0033A27, 0x1C8A2D4B */ +var _qS21 = float64(2.0209457602335057) /* 0x40002AE5, 0x9C598AC8 */ +var _qS31 = -Float64FromFloat64(0.6882839716054533) /* 0xBFE6066C, 0x1B8D0159 */ +var _qS41 = float64(0.07703815055590194) /* 0x3FB3B8C5, 0xB12E9282 */ + +func _R2(tls *TLS, z float64) (r float64) { + var p, q Tdouble_t + _, _ = p, q + p = z * (_pS02 + z*(_pS12+z*(_pS22+z*(_pS31+z*(_pS41+z*_pS51))))) + q = float64(1) + z*(_qS12+z*(_qS21+z*(_qS31+z*_qS41))) + return p / q +} + +func Xasin(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, f, r, s, z float64 + var hx, ix, lx Tuint32_t + var v1 Tuint64_t + _, _, _, _, _, _, _, _, _ = c, f, hx, ix, lx, r, s, z, v1 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix = hx & uint32(0x7fffffff) + /* |x| >= 1 or nan */ + if ix >= uint32(0x3ff00000) { + lx = uint32(*(*Tuint64_t)(unsafe.Pointer(&x))) + if ix-uint32(0x3ff00000)|lx == uint32(0) { + /* asin(1) = +-pi/2 with inexact */ + return x*_pio2_hi2 + Float64FromFloat32(7.52316384526264e-37) + } + return Float64FromInt32(0) / (x - x) + } + /* |x| < 0.5 */ + if ix < uint32(0x3fe00000) { + /* if 0x1p-1022 <= |x| < 0x1p-26, avoid raising underflow */ + if ix < uint32(0x3e500000) && ix >= uint32(0x00100000) { + return x + } + return x + x*_R2(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float64FromInt32(1) - Xfabs(tls, x)) * float64(0.5) + s = Xsqrt(tls, z) + r = _R2(tls, z) + if ix >= uint32(0x3fef3333) { /* if |x| > 0.975 */ + x = _pio2_hi2 - (Float64FromInt32(2)*(s+s*r) - _pio2_lo2) + } else { + /* f+c = sqrt(z) */ + f = s + v1 = *(*Tuint64_t)(unsafe.Pointer(&f))>>Int32FromInt32(32)<>int32(31) != 0 { + return -x + } + return x +} + +var _pio2 = float64(1.5707963267948966) + +/* coefficients for R(x^2) */ +var _pS03 = float32(0.16666586697) +var _pS13 = float32(-Float64FromFloat64(0.042743422091)) +var _pS23 = float32(-Float64FromFloat64(0.008656363003)) +var _qS13 = float32(-Float64FromFloat64(0.7066296339)) + +func _R3(tls *TLS, z float32) (r float32) { + var p, q Tfloat_t + _, _ = p, q + p = float64(z * (_pS03 + z*(_pS13+z*_pS23))) + q = float64(Float32FromFloat32(1) + z*_qS13) + return float32(p / q) +} + +func Xasinf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var hx, ix Tuint32_t + var s float64 + var z float32 + _, _, _, _ = hx, ix, s, z + hx = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix = hx & uint32(0x7fffffff) + if ix >= uint32(0x3f800000) { /* |x| >= 1 */ + if ix == uint32(0x3f800000) { /* |x| == 1 */ + return float32(float64(x)*_pio2 + Float64FromFloat32(7.52316384526264e-37)) + } /* asin(+-1) = +-pi/2 with inexact */ + return Float32FromInt32(0) / (x - x) /* asin(|x|>1) is NaN */ + } + if ix < uint32(0x3f000000) { /* |x| < 0.5 */ + /* if 0x1p-126 <= |x| < 0x1p-12, avoid raising underflow */ + if ix < uint32(0x39800000) && ix >= uint32(0x00800000) { + return x + } + return x + x*_R3(tls, x*x) + } + /* 1 > |x| >= 0.5 */ + z = (Float32FromInt32(1) - Xfabsf(tls, x)) * Float32FromFloat32(0.5) + s = Xsqrt(tls, float64(z)) + x = float32(_pio2 - Float64FromInt32(2)*(s+s*float64(_R3(tls, z)))) + if hx>>int32(31) != 0 { + return -x + } + return x +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(26)) { + /* |x| >= 0x1p26 or inf or nan */ + x3 = Xlog(tls, x3) + float64(0.6931471805599453) + } else { + if e >= uint32(Int32FromInt32(0x3ff)+Int32FromInt32(1)) { + /* |x| >= 2 */ + x3 = Xlog(tls, Float64FromInt32(2)*x3+Float64FromInt32(1)/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+x3)) + } else { + if e >= uint32(Int32FromInt32(0x3ff)-Int32FromInt32(26)) { + /* |x| >= 0x1p-26, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1p(tls, x3+x3*x3/(Xsqrt(tls, x3*x3+Float64FromInt32(1))+Float64FromInt32(1))) + } else { + /* |x| < 0x1p-26, raise inexact if x != 0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +// C documentation +// +// /* asinh(x) = sign(x)*log(|x|+sqrt(x*x+1)) ~= x - x^3/6 + o(x^5) */ +func Xasinhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tuint32_t + var s uint32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = i, s, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) = i + x3 = *(*float32)(unsafe.Pointer(bp)) + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(12)<= 0x1p12 or inf or nan */ + x3 = Xlogf(tls, x3) + Float32FromFloat32(0.6931471805599453) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)+Int32FromInt32(1)<= 2 */ + x3 = Xlogf(tls, Float32FromInt32(2)*x3+Float32FromInt32(1)/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+x3)) + } else { + if i >= uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)<= 0x1p-12, up to 1.6ulp error in [0.125,0.5] */ + x3 = Xlog1pf(tls, x3+x3*x3/(Xsqrtf(tls, x3*x3+Float32FromInt32(1))+Float32FromInt32(1))) + } else { + /* |x| < 0x1p-12, raise inexact if x!=0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + } + } + } + if s != 0 { + v1 = -x3 + } else { + v1 = x3 + } + return v1 +} + +func Xasinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasinh(tls, x) +} + +func Xasinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xasin(tls, x) +} + +var _atanhi = [4]float64{ + 0: float64(0.4636476090008061), + 1: float64(0.7853981633974483), + 2: float64(0.982793723247329), + 3: float64(1.5707963267948966), +} + +var _atanlo = [4]float64{ + 0: float64(2.2698777452961687e-17), + 1: float64(3.061616997868383e-17), + 2: float64(1.3903311031230998e-17), + 3: float64(6.123233995736766e-17), +} + +var _aT = [11]float64{ + 0: float64(0.3333333333333293), + 1: -Float64FromFloat64(0.19999999999876483), + 2: float64(0.14285714272503466), + 3: -Float64FromFloat64(0.11111110405462356), + 4: float64(0.09090887133436507), + 5: -Float64FromFloat64(0.0769187620504483), + 6: float64(0.06661073137387531), + 7: -Float64FromFloat64(0.058335701337905735), + 8: float64(0.049768779946159324), + 9: -Float64FromFloat64(0.036531572744216916), + 10: float64(0.016285820115365782), +} + +func Xatan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tdouble_t + var y float32 + var y1, y2 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x44100000) { /* if |x| >= 2^66 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __u1, __u2 Tuint64_t + var ix, iy, lx, ly, m Tuint32_t + var z, v6, v7 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = __u1, __u2, ix, iy, lx, ly, m, z, v1, v3, v5, v6, v7 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<> int32(32)) + lx = uint32(__u1) + __u2 = *(*Tuint64_t)(unsafe.Pointer(&y)) + iy = uint32(__u2 >> int32(32)) + ly = uint32(__u2) + if ix-uint32(0x3ff00000)|lx == uint32(0) { /* x = 1.0 */ + return Xatan(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix = ix & uint32(0x7fffffff) + iy = iy & uint32(0x7fffffff) + /* when y = 0 */ + if iy|ly == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix|lx == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi / Float64FromInt32(2) + } else { + v6 = _pi / Float64FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7ff00000) { + if iy == uint32(0x7ff00000) { + switch m { + case uint32(0): + return _pi / Float64FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi / Float64FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float64FromInt32(3) * _pi / Float64FromInt32(4) /* atan(+INF,-INF) */ + case uint32(3): + return float64(-Int32FromInt32(3)) * _pi / Float64FromInt32(4) /* atan(-INF,-INF) */ + } + } else { + switch m { + case uint32(0): + return float64(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float64FromFloat64(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi /* atan(+...,-INF) */ + case uint32(3): + return -_pi /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p64 */ + if ix+uint32(Int32FromInt32(64)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix, iy, m Tuint32_t + var z, v6, v7 float32 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _ = ix, iy, m, z, v1, v3, v5, v6, v7 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + y + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y)) + if ix == uint32(0x3f800000) { /* x=1.0 */ + return Xatanf(tls, y) + } + m = iy>>Int32FromInt32(31)&uint32(1) | ix>>Int32FromInt32(30)&uint32(2) /* 2*sign(x)+sign(y) */ + ix &= uint32(0x7fffffff) + iy &= uint32(0x7fffffff) + /* when y = 0 */ + if iy == uint32(0) { + switch m { + case uint32(0): + fallthrough + case uint32(1): + return y /* atan(+-0,+anything)=+-0 */ + case uint32(2): + return _pi1 /* atan(+0,-anything) = pi */ + case uint32(3): + return -_pi1 /* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if ix == uint32(0) { + if m&uint32(1) != 0 { + v6 = -_pi1 / Float32FromInt32(2) + } else { + v6 = _pi1 / Float32FromInt32(2) + } + return v6 + } + /* when x is INF */ + if ix == uint32(0x7f800000) { + if iy == uint32(0x7f800000) { + switch m { + case uint32(0): + return _pi1 / Float32FromInt32(4) /* atan(+INF,+INF) */ + case uint32(1): + return -_pi1 / Float32FromInt32(4) /* atan(-INF,+INF) */ + case uint32(2): + return Float32FromInt32(3) * _pi1 / Float32FromInt32(4) /*atan(+INF,-INF)*/ + case uint32(3): + return float32(-Int32FromInt32(3)) * _pi1 / Float32FromInt32(4) /*atan(-INF,-INF)*/ + } + } else { + switch m { + case uint32(0): + return Float32FromFloat32(0) /* atan(+...,+INF) */ + case uint32(1): + return -Float32FromFloat32(0) /* atan(-...,+INF) */ + case uint32(2): + return _pi1 /* atan(+...,-INF) */ + case uint32(3): + return -_pi1 /* atan(-...,-INF) */ + } + } + } + /* |y/x| > 0x1p26 */ + if ix+uint32(Int32FromInt32(26)< %v", r) }() + } + return Xatan2(tls, y, x) +} + +var _atanhi1 = [4]float32{ + 0: float32(0.46364760399), + 1: float32(0.78539812565), + 2: float32(0.98279368877), + 3: float32(1.5707962513), +} + +var _atanlo1 = [4]float32{ + 0: float32(5.012158244e-09), + 1: float32(3.7748947079e-08), + 2: float32(3.447321717e-08), + 3: float32(7.5497894159e-08), +} + +var _aT1 = [5]float32{ + 0: float32(0.33333328366), + 1: float32(-Float64FromFloat64(0.19999158382)), + 2: float32(0.14253635705), + 3: float32(-Float64FromFloat64(0.10648017377)), + 4: float32(0.061687607318), +} + +func Xatanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id int32 + var ix, sign Tuint32_t + var s1, s2, w, z, v3, v4 Tfloat_t + var y float32 + var y1, y2 float64 + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = id, ix, s1, s2, sign, w, y, y1, y2, z, v1, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x4c800000) { /* if |x| >= 2**26 */ + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + } + z = float64(_atanhi1[int32(3)] + Float32FromFloat32(7.52316384526264e-37)) + if sign != 0 { + v3 = -z + } else { + v3 = z + } + return float32(v3) + } + if ix < uint32(0x3ee00000) { /* |x| < 0.4375 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + if ix < uint32(0x00800000) { + /* raise underflow for subnormal x */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } + id = -int32(1) + } else { + x3 = Xfabsf(tls, x3) + if ix < uint32(0x3f980000) { /* |x| < 1.1875 */ + if ix < uint32(0x3f300000) { /* 7/16 <= |x| < 11/16 */ + id = 0 + x3 = (Float32FromFloat32(2)*x3 - Float32FromFloat32(1)) / (Float32FromFloat32(2) + x3) + } else { /* 11/16 <= |x| < 19/16 */ + id = int32(1) + x3 = (x3 - Float32FromFloat32(1)) / (x3 + Float32FromFloat32(1)) + } + } else { + if ix < uint32(0x401c0000) { /* |x| < 2.4375 */ + id = int32(2) + x3 = (x3 - Float32FromFloat32(1.5)) / (Float32FromFloat32(1) + Float32FromFloat32(1.5)*x3) + } else { /* 2.4375 <= |x| < 2**26 */ + id = int32(3) + x3 = -Float32FromFloat32(1) / x3 + } + } + } + /* end of argument reduction */ + z = float64(x3 * x3) + w = z * z + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z * (float64(_aT1[0]) + w*(float64(_aT1[int32(2)])+w*float64(_aT1[int32(4)]))) + s2 = w * (float64(_aT1[int32(1)]) + w*float64(_aT1[int32(3)])) + if id < 0 { + return float32(float64(x3) - float64(x3)*(s1+s2)) + } + z = float64(_atanhi1[id]) - (float64(x3)*(s1+s2) - float64(_atanlo1[id]) - float64(x3)) + if sign != 0 { + v4 = -z + } else { + v4 = z + } + return float32(v4) +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = e, s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + y3 = *(*float64)(unsafe.Pointer(bp)) + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(1)) { + if e < uint32(Int32FromInt32(0x3ff)-Int32FromInt32(32)) { + /* handle underflow */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = float32(y3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(y3)) + } else { + y2 = float64(float32(y3)) + } + } + } + } else { + /* |x| < 0.5, up to 1.7ulp error */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*y3+Float64FromInt32(2)*y3*y3/(Float64FromInt32(1)-y3)) + } + } else { + /* avoid overflow */ + y3 = float64(0.5) * Xlog1p(tls, Float64FromInt32(2)*(y3/(Float64FromInt32(1)-y3))) + } + if s != 0 { + v1 = -y3 + } else { + v1 = y3 + } + return v1 +} + +// C documentation +// +// /* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */ +func Xatanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uint32 + var y float32 + var y1, y2 float64 + var y3, v1 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = s, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + s = *(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31) + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + y3 = float64(*(*float32)(unsafe.Pointer(bp))) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(1)< %v", r) }() + } + return Xatanh(tls, x) +} + +func Xatanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xatan(tls, x) +} + +var _B1 = uint32(715094163) /* B1 = (1023-1023/3-0.03306235651)*2**20 */ +var _B2 = uint32(696219795) /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */ + +// C documentation +// +// /* |1/cbrt(x) - p(x)| < 2**-23.5 (~[-7.93e-8, 7.929e-8]). */ + +var _P0 = float64(1.87595182427177) /* 0x3ffe03e6, 0x0f61e692 */ +var _P1 = -Float64FromFloat64(1.8849797954337717) /* 0xbffe28e0, 0x92f02420 */ +var _P2 = float64(1.6214297201053545) /* 0x3ff9f160, 0x4a49d6c2 */ +var _P3 = -Float64FromFloat64(0.758397934778766) /* 0xbfe844cb, 0xbee751d9 */ +var _P4 = float64(0.14599619288661245) /* 0x3fc2b000, 0xd4e4edd7 */ + +func Xcbrt(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var hx Tuint32_t + var r, s, t, w Tdouble_t + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = hx, r, s, t, w, p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx >= uint32(0x7ff00000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* + * Rough cbrt to 5 bits: + * cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3) + * where e is integral and >= 0, m is real and in [0, 1), and "/" and + * "%" are integer division and modulus with rounding towards minus + * infinity. The RHS is always >= the LHS and has a maximum relative + * error of about 1 in 16. Adding a bias of -0.03306235651 to the + * (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE + * floating point representation, for finite positive normal values, + * ordinary integer divison of the value in bits magically gives + * almost exactly the RHS of the above provided we first subtract the + * exponent bias (1023 for doubles) and later add it back. We do the + * subtraction virtually to keep e >= 0 so that ordinary integer + * division rounds towards minus infinity; this is also efficient. + */ + if hx < uint32(0x00100000) { /* zero or subnormal? */ + *(*float64)(unsafe.Pointer(bp)) = x * float64(1.8014398509481984e+16) + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if hx == uint32(0) { + return x + } /* cbrt(0) is itself */ + hx = hx/uint32(3) + _B2 + } else { + hx = hx/uint32(3) + _B1 + } + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (Uint64FromUint64(1) << Int32FromInt32(63))) + *(*Tuint64_t)(unsafe.Pointer(bp)) |= uint64(hx) << int32(32) + t = *(*float64)(unsafe.Pointer(bp)) + /* + * New cbrt to 23 bits: + * cbrt(x) = t*cbrt(x/t**3) ~= t*P(t**3/x) + * where P(r) is a polynomial of degree 4 that approximates 1/cbrt(r) + * to within 2**-23.5 when |r - 1| < 1/10. The rough approximation + * has produced t such than |t/cbrt(x) - 1| ~< 1/32, and cubing this + * gives us bounds for r = t**3/x. + * + * Try to optimize for parallel evaluation as in __tanf.c. + */ + r = t * t * (t / x) + t = t * (_P0 + r*(_P1+r*_P2) + r*r*r*(_P3+r*_P4)) + /* + * Round t away from zero to 23 bits (sloppily except for ensuring that + * the result is larger in magnitude than cbrt(x) but not much more than + * 2 23-bit ulps larger). With rounding towards zero, the error bound + * would be ~5/6 instead of ~4/6. With a maximum error of 2 23-bit ulps + * in the rounded t, the infinite-precision error in the Newton + * approximation barely affects third digit in the final error + * 0.667; the error in the rounded t can be up to about 3 23-bit ulps + * before the final error is larger than 0.667 ulps. + */ + *(*float64)(unsafe.Pointer(bp)) = t + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(*(*Tuint64_t)(unsafe.Pointer(bp))+Uint64FromUint32(0x80000000)) & uint64(0xffffffffc0000000) + t = *(*float64)(unsafe.Pointer(bp)) + /* one step Newton iteration to 53 bits with error < 0.667 ulps */ + s = t * t /* t*t is exact */ + r = x / s /* error <= 0.5 ulps; |r| < |t| */ + w = t + t /* t+t is exact */ + r = (r - t) / (w + r) /* r-t is exact; w+r ~= 3*t */ + t = t + t*r /* error <= 0.5 + 0.5/3 + epsilon */ + return t +} + +var _B11 = uint32(709958130) /* B1 = (127-127.0/3-0.03306235651)*2**23 */ +var _B21 = uint32(642849266) /* B2 = (127-127.0/3-24/3-0.03306235651)*2**23 */ + +func Xcbrtf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var T, r Tdouble_t + var hx Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = T, hx, r + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if hx >= uint32(0x7f800000) { /* cbrt(NaN,INF) is itself */ + return x + x + } + /* rough cbrt to 5 bits */ + if hx < uint32(0x00800000) { /* zero or subnormal? */ + if hx == uint32(0) { + return x + } /* cbrt(+-0) is itself */ + *(*float32)(unsafe.Pointer(bp)) = x * Float32FromFloat32(1.6777216e+07) + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + hx = hx/uint32(3) + _B21 + } else { + hx = hx/uint32(3) + _B11 + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= hx + /* + * First step Newton iteration (solving t*t-x/t == 0) to 16 bits. In + * double precision so that its terms can be arranged for efficiency + * without causing overflow or underflow. + */ + T = float64(*(*float32)(unsafe.Pointer(bp))) + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* + * Second step Newton iteration to 47 bits. In double precision for + * efficiency and accuracy. + */ + r = T * T * T + T = T * (float64(x) + float64(x) + r) / (float64(x) + r + r) + /* rounding to 24 bits is perfect in round-to-nearest mode */ + return float32(T) +} + +func Xcbrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcbrt(tls, x) +} + +const DBL_EPSILON5 = 2.220446049250313e-16 + +var _toint2 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xceil(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2, v1 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint2 + _toint2 - x3 + } else { + y3 = x3 + _toint2 - _toint2 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(1) + } + return v1 + } + if y3 < Float64FromInt32(0) { + return x3 + y3 + Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON6 = 0 + +func Xceilf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*float32)(unsafe.Pointer(bp)) = float32(-Float64FromFloat64(0)) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xceil(tls, x) +} + +func Xcopysign(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1, p2 uintptr + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _ = p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2))) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&(Uint64FromUint64(1)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + *(*Tuint32_t)(unsafe.Pointer(bp)) |= *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xcopysignl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcopysign(tls, x, y) +} + +func Xcos(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _ = ix, n, y, y1, y2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) */ + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + return float64(1) + } + return X__cos(tls, x3, Float64FromInt32(0)) + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(1): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(2): + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + default: + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + } + return r +} + +const M_PI_23 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _c1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _c2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _c3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _c4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xcosf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y float32 + var y1, y2, v1, v2 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x != 0 */ + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + return Float32FromFloat32(1) + } + return X__cosdf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix > uint32(0x4016cbe3) { /* |x| ~> 3*pi/4 */ + if sign != 0 { + v1 = float64(x3) + _c2pio2 + } else { + v1 = float64(x3) - _c2pio2 + } + return -X__cosdf(tls, v1) + } else { + if sign != 0 { + return X__sindf(tls, float64(x3)+_c1pio2) + } else { + return X__sindf(tls, _c1pio2-float64(x3)) + } + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix > uint32(0x40afeddf) { /* |x| ~> 7*pi/4 */ + if sign != 0 { + v2 = float64(x3) + _c4pio2 + } else { + v2 = float64(x3) - _c4pio2 + } + return X__cosdf(tls, v2) + } else { + if sign != 0 { + return X__sindf(tls, float64(-x3)-_c3pio2) + } else { + return X__sindf(tls, float64(x3)-_c3pio2) + } + } + } + /* cos(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case uint32(1): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + case uint32(2): + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + default: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_24 = 0 + +// C documentation +// +// /* cosh(x) = (exp(x) + 1/exp(x))/2 +// * = 1 + 0.5*(exp(x)-1)*(exp(x)-1)/exp(x) +// * = 1 + x*x/2 + o(x^4) +// */ +func Xcosh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y1, y2 float64 + var w Tuint32_t + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(2) */ + if w < uint32(0x3fe62e42) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26) then the 1/t is not needed */ + return float64(0.5) * (t + Float64FromInt32(1)/t) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, x3, float64(1)) + return t +} + +func Xcoshf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var t, y float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = t, w, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(2) */ + if w < uint32(0x3f317217) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< log(FLT_MAX) or nan */ + t = X__expo2f(tls, x3, Float32FromFloat32(1)) + return t +} + +func Xcoshl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcosh(tls, x) +} + +func Xcosl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcos(tls, x) +} + +var _erx = float64(0.8450629115104675) /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx8 = float64(1.0270333367641007) /* 0x3FF06EBA, 0x8214DB69 */ +var _pp0 = float64(0.12837916709551256) /* 0x3FC06EBA, 0x8214DB68 */ +var _pp1 = -Float64FromFloat64(0.3250421072470015) /* 0xBFD4CD7D, 0x691CB913 */ +var _pp2 = -Float64FromFloat64(0.02848174957559851) /* 0xBF9D2A51, 0xDBD7194F */ +var _pp3 = -Float64FromFloat64(0.005770270296489442) /* 0xBF77A291, 0x236668E4 */ +var _pp4 = -Float64FromFloat64(2.3763016656650163e-05) /* 0xBEF8EAD6, 0x120016AC */ +var _qq1 = float64(0.39791722395915535) /* 0x3FD97779, 0xCDDADC09 */ +var _qq2 = float64(0.0650222499887673) /* 0x3FB0A54C, 0x5536CEBA */ +var _qq3 = float64(0.005081306281875766) /* 0x3F74D022, 0xC4D36B0F */ +var _qq4 = float64(0.00013249473800432164) /* 0x3F215DC9, 0x221C1A10 */ +var _qq5 = -Float64FromFloat64(3.960228278775368e-06) /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa0 = -Float64FromFloat64(0.0023621185607526594) /* 0xBF6359B8, 0xBEF77538 */ +var _pa1 = float64(0.41485611868374833) /* 0x3FDA8D00, 0xAD92B34D */ +var _pa2 = -Float64FromFloat64(0.3722078760357013) /* 0xBFD7D240, 0xFBB8C3F1 */ +var _pa3 = float64(0.31834661990116175) /* 0x3FD45FCA, 0x805120E4 */ +var _pa4 = -Float64FromFloat64(0.11089469428239668) /* 0xBFBC6398, 0x3D3E28EC */ +var _pa5 = float64(0.035478304325618236) /* 0x3FA22A36, 0x599795EB */ +var _pa6 = -Float64FromFloat64(0.002166375594868791) /* 0xBF61BF38, 0x0A96073F */ +var _qa1 = float64(0.10642088040084423) /* 0x3FBB3E66, 0x18EEE323 */ +var _qa2 = float64(0.540397917702171) /* 0x3FE14AF0, 0x92EB6F33 */ +var _qa3 = float64(0.07182865441419627) /* 0x3FB2635C, 0xD99FE9A7 */ +var _qa4 = float64(0.12617121980876164) /* 0x3FC02660, 0xE763351F */ +var _qa5 = float64(0.01363708391202905) /* 0x3F8BEDC2, 0x6B51DD1C */ +var _qa6 = float64(0.011984499846799107) /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra0 = -Float64FromFloat64(0.009864944034847148) /* 0xBF843412, 0x600D6435 */ +var _ra1 = -Float64FromFloat64(0.6938585727071818) /* 0xBFE63416, 0xE4BA7360 */ +var _ra2 = -Float64FromFloat64(10.558626225323291) /* 0xC0251E04, 0x41B0E726 */ +var _ra3 = -Float64FromFloat64(62.375332450326006) /* 0xC04F300A, 0xE4CBA38D */ +var _ra4 = -Float64FromFloat64(162.39666946257347) /* 0xC0644CB1, 0x84282266 */ +var _ra5 = -Float64FromFloat64(184.60509290671104) /* 0xC067135C, 0xEBCCABB2 */ +var _ra6 = -Float64FromFloat64(81.2874355063066) /* 0xC0545265, 0x57E4D2F2 */ +var _ra7 = -Float64FromFloat64(9.814329344169145) /* 0xC023A0EF, 0xC69AC25C */ +var _sa1 = float64(19.651271667439257) /* 0x4033A6B9, 0xBD707687 */ +var _sa2 = float64(137.65775414351904) /* 0x4061350C, 0x526AE721 */ +var _sa3 = float64(434.56587747522923) /* 0x407B290D, 0xD58A1A71 */ +var _sa4 = float64(645.3872717332679) /* 0x40842B19, 0x21EC2868 */ +var _sa5 = float64(429.00814002756783) /* 0x407AD021, 0x57700314 */ +var _sa6 = float64(108.63500554177944) /* 0x405B28A3, 0xEE48AE2C */ +var _sa7 = float64(6.570249770319282) /* 0x401A47EF, 0x8E484A93 */ +var _sa8 = -Float64FromFloat64(0.0604244152148581) /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb0 = -Float64FromFloat64(0.0098649429247001) /* 0xBF843412, 0x39E86F4A */ +var _rb1 = -Float64FromFloat64(0.799283237680523) /* 0xBFE993BA, 0x70C285DE */ +var _rb2 = -Float64FromFloat64(17.757954917754752) /* 0xC031C209, 0x555F995A */ +var _rb3 = -Float64FromFloat64(160.63638485582192) /* 0xC064145D, 0x43C5ED98 */ +var _rb4 = -Float64FromFloat64(637.5664433683896) /* 0xC083EC88, 0x1375F228 */ +var _rb5 = -Float64FromFloat64(1025.0951316110772) /* 0xC0900461, 0x6A2E5992 */ +var _rb6 = -Float64FromFloat64(483.5191916086514) /* 0xC07E384E, 0x9BDC383F */ +var _sb1 = float64(30.33806074348246) /* 0x403E568B, 0x261D5190 */ +var _sb2 = float64(325.7925129965739) /* 0x40745CAE, 0x221B9F0A */ +var _sb3 = float64(1536.729586084437) /* 0x409802EB, 0x189D5118 */ +var _sb4 = float64(3199.8582195085955) /* 0x40A8FFB7, 0x688C246A */ +var _sb5 = float64(2553.0504064331644) /* 0x40A3F219, 0xCEDF3BE6 */ +var _sb6 = float64(474.52854120695537) /* 0x407DA874, 0xE79FE763 */ +var _sb7 = -Float64FromFloat64(22.44095244658582) /* 0xC03670E2, 0x42712D62 */ + +func _erfc1(tls *TLS, x float64) (r float64) { + var P, Q, s Tdouble_t + _, _, _ = P, Q, s + s = Xfabs(tls, x) - Float64FromInt32(1) + P = _pa0 + s*(_pa1+s*(_pa2+s*(_pa3+s*(_pa4+s*(_pa5+s*_pa6))))) + Q = Float64FromInt32(1) + s*(_qa1+s*(_qa2+s*(_qa3+s*(_qa4+s*(_qa5+s*_qa6))))) + return Float64FromInt32(1) - _erx - P/Q +} + +func _erfc2(tls *TLS, ix Tuint32_t, x float64) (r float64) { + var R, S, s Tdouble_t + var z float64 + var v1 Tuint64_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3ff40000) { /* |x| < 1.25 */ + return _erfc1(tls, x) + } + x = Xfabs(tls, x) + s = Float64FromInt32(1) / (x * x) + if ix < uint32(0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */ + R = _ra0 + s*(_ra1+s*(_ra2+s*(_ra3+s*(_ra4+s*(_ra5+s*(_ra6+s*_ra7)))))) + S = float64(1) + s*(_sa1+s*(_sa2+s*(_sa3+s*(_sa4+s*(_sa5+s*(_sa6+s*(_sa7+s*_sa8))))))) + } else { /* |x| > 1/.35 */ + R = _rb0 + s*(_rb1+s*(_rb2+s*(_rb3+s*(_rb4+s*(_rb5+s*_rb6))))) + S = float64(1) + s*(_sb1+s*(_sb2+s*(_sb3+s*(_sb4+s*(_sb5+s*(_sb6+s*_sb7)))))) + } + z = x + v1 = *(*Tuint64_t)(unsafe.Pointer(&z))>>Int32FromInt32(32)< %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float64 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float64(int32(1)-int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3e300000) { /* |x| < 2**-28 */ + /* avoid underflow */ + return float64(0.125) * (Float64FromInt32(8)*x + _efx8*x) + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40180000) { /* 0.84375 <= |x| < 6 */ + y = Float64FromInt32(1) - _erfc2(tls, ix, x) + } else { + y = Float64FromInt32(1) - Float64FromFloat64(2.2250738585072014e-308) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfc(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float64 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float64(int32(2)*sign) + Float64FromInt32(1)/x + } + if ix < uint32(0x3feb0000) { /* |x| < 0.84375 */ + if ix < uint32(0x3c700000) { /* |x| < 2**-56 */ + return float64(1) - x + } + z = x * x + r = _pp0 + z*(_pp1+z*(_pp2+z*(_pp3+z*_pp4))) + s = float64(1) + z*(_qq1+z*(_qq2+z*(_qq3+z*(_qq4+z*_qq5)))) + y = r / s + if sign != 0 || ix < uint32(0x3fd00000) { /* x < 1/4 */ + return float64(1) - (x + x*y) + } + return float64(0.5) - (x - float64(0.5) + x*y) + } + if ix < uint32(0x403c0000) { /* 0.84375 <= |x| < 28 */ + if sign != 0 { + v1 = Float64FromInt32(2) - _erfc2(tls, ix, x) + } else { + v1 = _erfc2(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float64FromInt32(2) - Float64FromFloat64(2.2250738585072014e-308) + } else { + v2 = Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(2.2250738585072014e-308) + } + return v2 +} + +var _erx1 = float32(0.84506291151) /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +var _efx81 = float32(1.027033329) /* 0x3f8375d4 */ +var _pp01 = float32(0.12837916613) /* 0x3e0375d4 */ +var _pp11 = float32(-Float64FromFloat64(0.32504209876)) /* 0xbea66beb */ +var _pp21 = float32(-Float64FromFloat64(0.028481749818)) /* 0xbce9528f */ +var _pp31 = float32(-Float64FromFloat64(0.005770270247)) /* 0xbbbd1489 */ +var _pp41 = float32(-Float64FromFloat64(2.3763017452e-05)) /* 0xb7c756b1 */ +var _qq11 = float32(0.39791721106) /* 0x3ecbbbce */ +var _qq21 = float32(0.0650222525) /* 0x3d852a63 */ +var _qq31 = float32(0.0050813062117) /* 0x3ba68116 */ +var _qq41 = float32(0.00013249473704) /* 0x390aee49 */ +var _qq51 = float32(-Float64FromFloat64(3.9602282413e-06)) /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +var _pa01 = float32(-Float64FromFloat64(0.0023621185683)) /* 0xbb1acdc6 */ +var _pa11 = float32(0.41485610604) /* 0x3ed46805 */ +var _pa21 = float32(-Float64FromFloat64(0.37220788002)) /* 0xbebe9208 */ +var _pa31 = float32(0.31834661961) /* 0x3ea2fe54 */ +var _pa41 = float32(-Float64FromFloat64(0.11089469492)) /* 0xbde31cc2 */ +var _pa51 = float32(0.035478305072) /* 0x3d1151b3 */ +var _pa61 = float32(-Float64FromFloat64(0.0021663755178)) /* 0xbb0df9c0 */ +var _qa11 = float32(0.10642088205) /* 0x3dd9f331 */ +var _qa21 = float32(0.54039794207) /* 0x3f0a5785 */ +var _qa31 = float32(0.071828655899) /* 0x3d931ae7 */ +var _qa41 = float32(0.12617121637) /* 0x3e013307 */ +var _qa51 = float32(0.013637083583) /* 0x3c5f6e13 */ +var _qa61 = float32(0.011984500103) /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +var _ra01 = float32(-Float64FromFloat64(0.0098649440333)) /* 0xbc21a093 */ +var _ra11 = float32(-Float64FromFloat64(0.6938585639)) /* 0xbf31a0b7 */ +var _ra21 = float32(-Float64FromFloat64(10.558626175)) /* 0xc128f022 */ +var _ra31 = float32(-Float64FromFloat64(62.375331879)) /* 0xc2798057 */ +var _ra41 = float32(-Float64FromFloat64(162.39666748)) /* 0xc322658c */ +var _ra51 = float32(-Float64FromFloat64(184.60508728)) /* 0xc3389ae7 */ +var _ra61 = float32(-Float64FromFloat64(81.287437439)) /* 0xc2a2932b */ +var _ra71 = float32(-Float64FromFloat64(9.8143291473)) /* 0xc11d077e */ +var _sa11 = float32(19.65127182) /* 0x419d35ce */ +var _sa21 = float32(137.65776062) /* 0x4309a863 */ +var _sa31 = float32(434.56588745) /* 0x43d9486f */ +var _sa41 = float32(645.38726807) /* 0x442158c9 */ +var _sa51 = float32(429.00814819) /* 0x43d6810b */ +var _sa61 = float32(108.63500214) /* 0x42d9451f */ +var _sa71 = float32(6.5702495575) /* 0x40d23f7c */ +var _sa81 = float32(-Float64FromFloat64(0.060424413532)) /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +var _rb01 = float32(-Float64FromFloat64(0.009864943102)) /* 0xbc21a092 */ +var _rb11 = float32(-Float64FromFloat64(0.79928326607)) /* 0xbf4c9dd4 */ +var _rb21 = float32(-Float64FromFloat64(17.757955551)) /* 0xc18e104b */ +var _rb31 = float32(-Float64FromFloat64(160.63638306)) /* 0xc320a2ea */ +var _rb41 = float32(-Float64FromFloat64(637.56646729)) /* 0xc41f6441 */ +var _rb51 = float32(-Float64FromFloat64(1025.0950928)) /* 0xc480230b */ +var _rb61 = float32(-Float64FromFloat64(483.51919556)) /* 0xc3f1c275 */ +var _sb11 = float32(30.338060379) /* 0x41f2b459 */ +var _sb21 = float32(325.79251099) /* 0x43a2e571 */ +var _sb31 = float32(1536.7296143) /* 0x44c01759 */ +var _sb41 = float32(3199.8581543) /* 0x4547fdbb */ +var _sb51 = float32(2553.050293) /* 0x451f90ce */ +var _sb61 = float32(474.52853394) /* 0x43ed43a7 */ +var _sb71 = float32(-Float64FromFloat64(22.440952301)) /* 0xc1b38712 */ + +func _erfc11(tls *TLS, x float32) (r float32) { + var P, Q, s Tfloat_t + _, _, _ = P, Q, s + s = float64(Xfabsf(tls, x) - Float32FromInt32(1)) + P = float64(_pa01) + s*(float64(_pa11)+s*(float64(_pa21)+s*(float64(_pa31)+s*(float64(_pa41)+s*(float64(_pa51)+s*float64(_pa61)))))) + Q = Float64FromInt32(1) + s*(float64(_qa11)+s*(float64(_qa21)+s*(float64(_qa31)+s*(float64(_qa41)+s*(float64(_qa51)+s*float64(_qa61)))))) + return float32(float64(Float32FromInt32(1)-_erx1) - P/Q) +} + +func _erfc21(tls *TLS, ix Tuint32_t, x float32) (r float32) { + var R, S, s Tfloat_t + var z float32 + var v1 Tuint32_t + _, _, _, _, _ = R, S, s, z, v1 + if ix < uint32(0x3fa00000) { /* |x| < 1.25 */ + return _erfc11(tls, x) + } + x = Xfabsf(tls, x) + s = float64(Float32FromInt32(1) / (x * x)) + if ix < uint32(0x4036db6d) { /* |x| < 1/0.35 */ + R = float64(_ra01) + s*(float64(_ra11)+s*(float64(_ra21)+s*(float64(_ra31)+s*(float64(_ra41)+s*(float64(_ra51)+s*(float64(_ra61)+s*float64(_ra71))))))) + S = Float64FromFloat32(1) + s*(float64(_sa11)+s*(float64(_sa21)+s*(float64(_sa31)+s*(float64(_sa41)+s*(float64(_sa51)+s*(float64(_sa61)+s*(float64(_sa71)+s*float64(_sa81)))))))) + } else { /* |x| >= 1/0.35 */ + R = float64(_rb01) + s*(float64(_rb11)+s*(float64(_rb21)+s*(float64(_rb31)+s*(float64(_rb41)+s*(float64(_rb51)+s*float64(_rb61)))))) + S = Float64FromFloat32(1) + s*(float64(_sb11)+s*(float64(_sb21)+s*(float64(_sb31)+s*(float64(_sb41)+s*(float64(_sb51)+s*(float64(_sb61)+s*float64(_sb71))))))) + } + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + v1 = ix & uint32(0xffffe000) + z = *(*float32)(unsafe.Pointer(&v1)) + return Xexpf(tls, -z*z-Float32FromFloat32(0.5625)) * Xexpf(tls, float32(float64((z-x)*(z+x))+R/S)) / x +} + +func Xerff(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1 float32 + var sign int32 + _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erf(nan)=nan, erf(+-inf)=+-1 */ + return float32(int32(1)-int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x31800000) { /* |x| < 2**-28 */ + /*avoid underflow */ + return Float32FromFloat32(0.125) * (Float32FromInt32(8)*x + _efx81*x) + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromInt32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + return x + x*y + } + if ix < uint32(0x40c00000) { /* |x| < 6 */ + y = Float32FromInt32(1) - _erfc21(tls, ix, x) + } else { + y = Float32FromInt32(1) - Float32FromFloat32(7.52316384526264e-37) + } + if sign != 0 { + v1 = -y + } else { + v1 = y + } + return v1 +} + +func Xerfcf(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, y, z, v1, v2 float32 + var sign int32 + _, _, _, _, _, _, _, _ = ix, r, s, sign, y, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + /* erfc(nan)=nan, erfc(+-inf)=0,2 */ + return float32(int32(2)*sign) + Float32FromInt32(1)/x + } + if ix < uint32(0x3f580000) { /* |x| < 0.84375 */ + if ix < uint32(0x23800000) { /* |x| < 2**-56 */ + return Float32FromFloat32(1) - x + } + z = x * x + r = _pp01 + z*(_pp11+z*(_pp21+z*(_pp31+z*_pp41))) + s = Float32FromFloat32(1) + z*(_qq11+z*(_qq21+z*(_qq31+z*(_qq41+z*_qq51)))) + y = r / s + if sign != 0 || ix < uint32(0x3e800000) { /* x < 1/4 */ + return Float32FromFloat32(1) - (x + x*y) + } + return Float32FromFloat32(0.5) - (x - Float32FromFloat32(0.5) + x*y) + } + if ix < uint32(0x41e00000) { /* |x| < 28 */ + if sign != 0 { + v1 = Float32FromInt32(2) - _erfc21(tls, ix, x) + } else { + v1 = _erfc21(tls, ix, x) + } + return v1 + } + if sign != 0 { + v2 = Float32FromInt32(2) - Float32FromFloat32(7.52316384526264e-37) + } else { + v2 = Float32FromFloat32(7.52316384526264e-37) * Float32FromFloat32(7.52316384526264e-37) + } + return v2 +} + +func Xerfl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerf(tls, x) +} + +func Xerfcl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xerfc(tls, x) +} + +const EXP2_POLY_ORDER = 5 +const EXP_POLY_ORDER = 5 +const EXP_TABLE_BITS = 7 +const EXP_USE_TOINT_NARROW = 0 +const N = 128 + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by <= 460. */ + sbits = Tuint64_t(sbits - Uint64FromUint64(1009)<> int32(52)) +} + +func Xexp(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v5 Tuint64_t + var kd, r, r2, scale, tail, tmp, z Tdouble_t + var y, v1, v2, v4, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, z, v1, v2, v4, v5, v6 + abstop = _top12(tls, x1) & uint32(0x7ff) + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= _top12(tls, float64(512))-_top12(tls, float64(5.551115123125783e-17)) { + if abstop-_top12(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top12(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top12(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if *(*Tuint64_t)(unsafe.Pointer(&x1))>>int32(63) != 0 { + return X__math_uflow(tls, uint32(0)) + } else { + return X__math_oflow(tls, uint32(0)) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v2 = y + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v6 = y + goto _7 +_7: + return v6 +} + +const HUGE = 0 + +func Xexp10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float64 + var _ /* n at bp+0 */ float64 + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = Xmodf(tls, x, bp) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = *(*float64)(unsafe.Pointer(bp)) + /* fabs(n) < 16 without raising invalid on nan */ + if *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(52)&uint64(0x7ff) < uint64(Int32FromInt32(0x3ff)+Int32FromInt32(4)) { + if !(y != 0) { + return _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + y = Xexp2(tls, float64(3.321928094887362)*y) + return y * _p10[int32(*(*float64)(unsafe.Pointer(bp)))+int32(15)] + } + return Xpow(tls, float64(10), x) +} + +var _p10 = [31]float64{ + 0: float64(1e-15), + 1: float64(1e-14), + 2: float64(1e-13), + 3: float64(1e-12), + 4: float64(1e-11), + 5: float64(1e-10), + 6: float64(1e-09), + 7: float64(1e-08), + 8: float64(1e-07), + 9: float64(1e-06), + 10: float64(1e-05), + 11: float64(0.0001), + 12: float64(0.001), + 13: float64(0.01), + 14: float64(0.1), + 15: Float64FromInt32(1), + 16: float64(10), + 17: float64(100), + 18: float64(1000), + 19: float64(10000), + 20: float64(100000), + 21: float64(1e+06), + 22: float64(1e+07), + 23: float64(1e+08), + 24: float64(1e+09), + 25: float64(1e+10), + 26: float64(1e+11), + 27: float64(1e+12), + 28: float64(1e+13), + 29: float64(1e+14), + 30: float64(1e+15), +} + +func Xpow10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xexp10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y float32 + var _ /* n at bp+0 */ float32 + var _ /* u at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = Xmodff(tls, x, bp) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = *(*float32)(unsafe.Pointer(bp)) + /* fabsf(n) < 8 without raising invalid on nan */ + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))>>int32(23)&uint32(0xff) < uint32(Int32FromInt32(0x7f)+Int32FromInt32(3)) { + if !(y != 0) { + return _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + y = Xexp2f(tls, Float32FromFloat32(3.321928094887362)*y) + return y * _p101[int32(*(*float32)(unsafe.Pointer(bp)))+int32(7)] + } + return float32(Xexp2(tls, float64(3.321928094887362)*float64(x))) +} + +var _p101 = [15]float32{ + 0: Float32FromFloat32(1e-07), + 1: Float32FromFloat32(1e-06), + 2: Float32FromFloat32(1e-05), + 3: Float32FromFloat32(0.0001), + 4: Float32FromFloat32(0.001), + 5: Float32FromFloat32(0.01), + 6: Float32FromFloat32(0.1), + 7: Float32FromInt32(1), + 8: float32(10), + 9: float32(100), + 10: float32(1000), + 11: float32(10000), + 12: float32(100000), + 13: float32(1e+06), + 14: float32(1e+07), +} + +func Xpow10f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10f(tls, x) +} + +func Xexp10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10(tls, x) +} + +func Xpow10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexp10l(tls, x) +} + +// C documentation +// +// /* Handle cases that may overflow or underflow when computing the result that +// is scale*(1+TMP) without intermediate rounding. The bit representation of +// scale is in SBITS, however it has a computed exponent that may have +// overflown into the sign bit so that needs to be adjusted before using it as +// a double. (int32_t)KI is the k used in the argument reduction and exponent +// adjustment of scale, positive k here means the result may overflow and +// negative k means the result may underflow. */ +func _specialcase1(tls *TLS, tmp Tdouble_t, sbits Tuint64_t, ki Tuint64_t) (r float64) { + var hi, lo, scale, y3 Tdouble_t + var y, y1, y2, v1, v3, v5, v7 float64 + _, _, _, _, _, _, _, _, _, _, _ = hi, lo, scale, y, y1, y2, y3, v1, v3, v5, v7 + if ki&uint64(0x80000000) == uint64(0) { + /* k > 0, the exponent of scale might have overflowed by 1. */ + sbits = Tuint64_t(sbits - Uint64FromUint64(1)<> int32(52)) +} + +func Xexp2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var idx, ki, sbits, top, v7 Tuint64_t + var kd, r, r2, scale, tail, tmp Tdouble_t + var y, v1, v2, v3, v4, v6, v8 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, idx, kd, ki, r, r2, sbits, scale, tail, tmp, top, y, v1, v2, v3, v4, v6, v7, v8 + abstop = _top121(tls, x1) & uint32(0x7ff) + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= _top121(tls, float64(512))-_top121(tls, float64(5.551115123125783e-17)) { + if abstop-_top121(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + return float64(1) + x1 + } + if abstop >= _top121(tls, float64(1024)) { + v1 = float64(-X__builtin_inff(tls)) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(0) + } + if abstop >= _top121(tls, float64(X__builtin_inff(tls))) { + return float64(1) + x1 + } + if !(*(*Tuint64_t)(unsafe.Pointer(&x1))>>Int32FromInt32(63) != 0) { + return X__math_oflow(tls, uint32(0)) + } else { + v2 = -Float64FromFloat64(1075) + if *(*Tuint64_t)(unsafe.Pointer(&x1)) >= *(*Tuint64_t)(unsafe.Pointer(&v2)) { + return X__math_uflow(tls, uint32(0)) + } + } + } + v3 = float64(928) + if uint64(2)**(*Tuint64_t)(unsafe.Pointer(&x1)) > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Large x is special cased below. */ + abstop = uint32(0) + } + } + /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */ + /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */ + y = x1 + X__exp_data.Fexp2_shift + v4 = y + goto _5 +_5: + kd = v4 + v6 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v6)) /* k. */ + kd -= X__exp_data.Fexp2_shift /* k/N for int k. */ + r = x1 - kd + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-65 and scale > 2^-928, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v8 = y + goto _9 +_9: + return v8 +} + +const EXP2F_POLY_ORDER = 3 +const EXP2F_TABLE_BITS = 5 +const N1 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.) +Wrong count: 168353 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top122(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexp2f(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top122(tls, x2) & uint32(0x7ff) + if abstop >= _top122(tls, Float32FromFloat32(128)) { + /* |x| >= 128 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top122(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(0) { + return X__math_oflowf(tls, uint32(0)) + } + if x2 <= -Float32FromFloat32(150) { + return X__math_uflowf(tls, uint32(0)) + } + } + /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ + y1 = xd + X__exp2f_data.Fshift_scaled + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift_scaled /* k/N for int k. */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp2(tls, x) +} + +const N2 = 128 + +type Texp_data = struct { + Finvln2N float64 + Fshift float64 + Fnegln2hiN float64 + Fnegln2loN float64 + Fpoly [4]float64 + Fexp2_shift float64 + Fexp2_poly [5]float64 + Ftab [256]Tuint64_t +} + +const N3 = 32 + +/* +EXP2F_TABLE_BITS = 5 +EXP2F_POLY_ORDER = 3 + +ULP error: 0.502 (nearest rounding.) +Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.) +Wrong count: 170635 (all nearest rounding wrong results with fma.) +Non-nearest ULP error: 1 (rounded ULP error) +*/ + +func _top123(tls *TLS, x float32) (r Tuint32_t) { + return *(*Tuint32_t)(unsafe.Pointer(&x)) >> int32(20) +} + +func Xexpf(tls *TLS, x2 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x2=%v, (%v:)", tls, x2, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var abstop Tuint32_t + var kd, r, r2, s, xd, y2, z Tdouble_t + var ki, t Tuint64_t + var y, v1, v5 float32 + var y1, v2, v4 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = abstop, kd, ki, r, r2, s, t, xd, y, y1, y2, z, v1, v2, v4, v5 + xd = float64(x2) + abstop = _top123(tls, x2) & uint32(0x7ff) + if abstop >= _top123(tls, Float32FromFloat32(88)) { + /* |x| >= 88 or x is nan. */ + v1 = -X__builtin_inff(tls) + if *(*Tuint32_t)(unsafe.Pointer(&x2)) == *(*Tuint32_t)(unsafe.Pointer(&v1)) { + return Float32FromFloat32(0) + } + if abstop >= _top123(tls, X__builtin_inff(tls)) { + return x2 + x2 + } + if x2 > Float32FromFloat32(88.72283172607422) { /* x > log(0x1p128) ~= 88.72 */ + return X__math_oflowf(tls, uint32(0)) + } + if x2 < -Float32FromFloat32(103.97207641601562) { /* x < log(0x1p-150) ~= -103.97 */ + return X__math_uflowf(tls, uint32(0)) + } + } + /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */ + z = X__exp2f_data.Finvln2_scaled * xd + /* Round and convert z to int, the result is in [-150*N, 128*N] and + ideally ties-to-even rule is used, otherwise the magnitude of r + can be bigger which gives larger approximation error. */ + y1 = z + X__exp2f_data.Fshift + v2 = y1 + goto _3 +_3: + kd = v2 + v4 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v4)) + kd -= X__exp2f_data.Fshift + r = z - kd + /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)< %v", r) }() + } + return Xexp(tls, x) +} + +var _o_threshold = float64(709.782712893384) /* 0x40862E42, 0xFEFA39EF */ +var _ln2_hi = float64(0.6931471803691238) /* 0x3fe62e42, 0xfee00000 */ +var _ln2_lo = float64(1.9082149292705877e-10) /* 0x3dea39ef, 0x35793c76 */ +var _invln2 = float64(1.4426950408889634) /* 0x3ff71547, 0x652b82fe */ +/* Scaled Q's: Qn_here = 2**n * Qn_above, for R(2*z) where z = hxs = x*x/2: */ +var _Q1 = -Float64FromFloat64(0.03333333333333313) /* BFA11111 111110F4 */ +var _Q2 = float64(0.0015873015872548146) /* 3F5A01A0 19FE5585 */ +var _Q3 = -Float64FromFloat64(7.93650757867488e-05) /* BF14CE19 9EAADBB7 */ +var _Q4 = float64(4.008217827329362e-06) /* 3ED0CFCA 86E65239 */ +var _Q5 = -Float64FromFloat64(2.0109921818362437e-07) /* BE8AFDB7 6E09C32D */ + +func Xexpm1(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tdouble_t + var hx Tuint32_t + var k, sign int32 + var y float32 + var y1, y2, v3 float64 + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* u at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1, v3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4043687A) { /* if |x|>=56*ln2 */ + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 + _2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< _o_threshold { + x3 *= float64(8.98846567431158e+307) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = x3 - _ln2_hi + lo = _ln2_lo + k = int32(1) + } else { + hi = x3 + _ln2_hi + lo = -_ln2_lo + k = -int32(1) + } + } else { + if sign != 0 { + v3 = -Float64FromFloat64(0.5) + } else { + v3 = float64(0.5) + } + k = int32(_invln2*x3 + v3) + t = float64(k) + hi = x3 - t*_ln2_hi /* t*ln2_hi is exact here */ + lo = t * _ln2_lo + } + x3 = hi - lo + c = hi - x3 - lo + } else { + if hx < uint32(0x3c900000) { /* |x| < 2**-54, return x */ + if hx < uint32(0x00100000) { + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(0.5) * x3 + hxs = x3 * hfx + r1 = float64(1) + hxs*(_Q1+hxs*(_Q2+hxs*(_Q3+hxs*(_Q4+hxs*_Q5)))) + t = float64(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat64(6) - x3*t)) + if k == 0 { /* c is 0 */ + return x3 - (x3*e - hxs) + } + e = x3*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float64(0.5)*(x3-e) - float64(0.5) + } + if k == int32(1) { + if x3 < -Float64FromFloat64(0.25) { + return -Float64FromFloat64(2) * (e - (x3 + Float64FromFloat64(0.5))) + } + return float64(1) + float64(2)*(x3-e) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)+k) << int32(52) /* 2^k */ + twopk = *(*float64)(unsafe.Pointer(bp + 8)) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = x3 - e + float64(1) + if k == int32(1024) { + y3 = y3 * float64(2) * float64(8.98846567431158e+307) + } else { + y3 = y3 * twopk + } + return y3 - float64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(Int32FromInt32(0x3ff)-k) << int32(52) /* 2^-k */ + if k < int32(20) { + y3 = (x3 - e + (Float64FromInt32(1) - *(*float64)(unsafe.Pointer(bp + 8)))) * twopk + } else { + y3 = (x3 - (e + *(*float64)(unsafe.Pointer(bp + 8))) + Float64FromInt32(1)) * twopk + } + return y3 +} + +var _ln2_hi1 = float32(0.69313812256) /* 0x3f317180 */ +var _ln2_lo1 = float32(9.0580006145e-06) /* 0x3717f7d1 */ +var _invln21 = float32(1.4426950216) /* 0x3fb8aa3b */ +/* + * Domain [-0.34568, 0.34568], range ~[-6.694e-10, 6.696e-10]: + * |6 / x * (1 + 2 * (1 / (exp(x) - 1) - 1 / x)) - q(x)| < 2**-30.04 + * Scaled coefficients: Qn_here = 2**n * Qn_for_q (see s_expm1.c): + */ +var _Q11 = float32(-Float64FromFloat64(0.033333212137)) /* -0x888868.0p-28 */ +var _Q21 = float32(0.0015807170421) /* 0xcf3010.0p-33 */ + +func Xexpm1f(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, e, hfx, hi, hxs, lo, r1, t, twopk, y3 Tfloat_t + var hx Tuint32_t + var k, sign int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, e, hfx, hi, hx, hxs, k, lo, r1, sign, t, twopk, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + hx = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + /* filter out huge and non-finite argument */ + if hx >= uint32(0x4195b844) { /* if |x|>=27*ln2 */ + if hx > uint32(0x7f800000) { /* NaN */ + return x3 + } + if sign != 0 { + return float32(-Int32FromInt32(1)) + } + if hx > uint32(0x42b17217) { /* x > log(FLT_MAX) */ + x3 *= Float32FromFloat32(1.7014118346046923e+38) + return x3 + } + } + /* argument reduction */ + if hx > uint32(0x3eb17218) { /* if |x| > 0.5 ln2 */ + if hx < uint32(0x3F851592) { /* and |x| < 1.5 ln2 */ + if !(sign != 0) { + hi = float64(x3 - _ln2_hi1) + lo = float64(_ln2_lo1) + k = int32(1) + } else { + hi = float64(x3 + _ln2_hi1) + lo = float64(-_ln2_lo1) + k = -int32(1) + } + } else { + if sign != 0 { + v1 = -Float32FromFloat32(0.5) + } else { + v1 = Float32FromFloat32(0.5) + } + k = int32(_invln21*x3 + v1) + t = float64(k) + hi = float64(x3) - t*float64(_ln2_hi1) /* t*ln2_hi is exact here */ + lo = t * float64(_ln2_lo1) + } + x3 = float32(hi - lo) + c = hi - float64(x3) - lo + } else { + if hx < uint32(0x33000000) { /* when |x|<2**-25, return x */ + if hx < uint32(0x00800000) { + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + } + return x3 + } else { + k = 0 + } + } + /* x is now in primary range */ + hfx = float64(Float32FromFloat32(0.5) * x3) + hxs = float64(x3) * hfx + r1 = Float64FromFloat32(1) + hxs*(float64(_Q11)+hxs*float64(_Q21)) + t = Float64FromFloat32(3) - r1*hfx + e = hxs * ((r1 - t) / (Float64FromFloat32(6) - float64(x3)*t)) + if k == 0 { /* c is 0 */ + return float32(float64(x3) - (float64(x3)*e - hxs)) + } + e = float64(x3)*(e-c) - c + e -= hxs + /* exp(x) ~ 2^k (Xreduced - e + 1) */ + if k == -int32(1) { + return float32(Float64FromFloat32(0.5)*(float64(x3)-e) - Float64FromFloat32(0.5)) + } + if k == int32(1) { + if x3 < -Float32FromFloat32(0.25) { + return float32(float64(-Float32FromFloat32(2)) * (e - float64(x3+Float32FromFloat32(0.5)))) + } + return float32(Float64FromFloat32(1) + Float64FromFloat32(2)*(float64(x3)-e)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) + k) << int32(23)) /* 2^k */ + twopk = float64(*(*float32)(unsafe.Pointer(bp))) + if k < 0 || k > int32(56) { /* suffice to return exp(x)-1 */ + y3 = float64(x3) - e + Float64FromFloat32(1) + if k == int32(128) { + y3 = y3 * Float64FromFloat32(2) * Float64FromFloat32(1.7014118346046923e+38) + } else { + y3 = y3 * twopk + } + return float32(y3 - Float64FromFloat32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32((int32(0x7f) - k) << int32(23)) /* 2^-k */ + if k < int32(23) { + y3 = (float64(x3) - e + float64(Float32FromInt32(1)-*(*float32)(unsafe.Pointer(bp)))) * twopk + } else { + y3 = (float64(x3) - (e + float64(*(*float32)(unsafe.Pointer(bp)))) + Float64FromInt32(1)) * twopk + } + return float32(y3) +} + +func Xexpm1l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexpm1(tls, x) +} + +func Xfabs(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var p1 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = p1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) / Uint64FromInt32(2))) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfabsf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfabsl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfabs(tls, x) +} + +func Xfdim(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint64 + var v5 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _ = v1, v3, v5 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< y { + v5 = x - y + } else { + v5 = Float64FromInt32(0) + } + return v5 +} + +func Xfdimf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3 uint32 + var v5 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _ = v1, v3, v5 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + if x > y { + v5 = x - y + } else { + v5 = Float32FromInt32(0) + } + return v5 +} + +func Xfdiml(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfdim(tls, x, y) +} + +func Xfinite(tls *TLS, x float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + return BoolInt32(v1&uint32(0x7fffffff) < uint32(0x7f800000)) +} + +const DBL_EPSILON7 = 2.220446049250313e-16 + +var _toint3 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xfloor(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v1 int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, y, y1, y2, y3, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) || x3 == Float64FromInt32(0) { + return x3 + } + /* y = int(x) - x, where int(x) is an integer neighbor of x */ + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = x3 - _toint3 + _toint3 - x3 + } else { + y3 = x3 + _toint3 - _toint3 - x3 + } + /* special case because of non-nearest rounding modes */ + if e <= Int32FromInt32(0x3ff)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(y3) + } else { + if uint64(8) == uint64(8) { + y1 = y3 + } else { + y2 = y3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return float64(v1) + } + if y3 > Float64FromInt32(0) { + return x3 + y3 - Float64FromInt32(1) + } + return x3 + y3 +} + +const DBL_EPSILON8 = 0 + +func Xfloorf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + if e >= int32(23) { + return x3 + } + if e >= 0 { + m = uint32(int32(0x007fffff) >> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp)) += m + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + } else { + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) == uint32(0) { + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(0) + } else { + if *(*Tuint32_t)(unsafe.Pointer(bp))< %v", r) }() + } + return Xfloor(tls, x) +} + +const DBL_MIN1 = 2.2250738585072014e-308 +const FLT_MIN1 = 1.1754943508222875e-38 +const ZEROINFNAN = 971 + +type Tnum = struct { + Fm Tuint64_t + Fe int32 + Fsign int32 +} + +func _normalize(tls *TLS, x float64) (r Tnum) { + var e, sign, v2 int32 + var ix Tuint64_t + var v1 float64 + _, _, _, _, _ = e, ix, sign, v1, v2 + ix = *(*Tuint64_t)(unsafe.Pointer(&x)) + e = int32(ix >> int32(52)) + sign = e & int32(0x800) + e &= int32(0x7ff) + if !(e != 0) { + v1 = x * float64(9.223372036854776e+18) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + e = int32(ix >> int32(52) & uint64(0x7ff)) + if e != 0 { + v2 = e - int32(63) + } else { + v2 = int32(0x800) + } + e = v2 + } + ix = Tuint64_t(ix & (Uint64FromUint64(1)<> int32(32) + ylo = uint64(uint32(y)) + yhi = y >> int32(32) + t1 = xlo * ylo + t2 = xlo*yhi + xhi*ylo + t3 = xhi * yhi + *(*Tuint64_t)(unsafe.Pointer(lo)) = t1 + t2<>Int32FromInt32(32) + BoolUint64(t1 > *(*Tuint64_t)(unsafe.Pointer(lo))) +} + +func Xfma(tls *TLS, x1 float64, y1 float64, z float64) (r2 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v z=%v, (%v:)", tls, x1, y1, z, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, r1 float64 + var d, e, nonzero, r, samesign, sign, v2, v5 int32 + var fltmin float32 + var i Tint64_t + var nx, ny, nz Tnum + var t, zhi, zlo, v1, v4 Tuint64_t + var tiny Tdouble_t + var y Tuint32_t + var _ /* rhi at bp+0 */ Tuint64_t + var _ /* rlo at bp+8 */ Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, d, e, fltmin, i, nonzero, nx, ny, nz, r, r1, samesign, sign, t, tiny, y, zhi, zlo, v1, v2, v4, v5 + nx = _normalize(tls, x1) + ny = _normalize(tls, y1) + nz = _normalize(tls, z) + if nx.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) || ny.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + return x1*y1 + z + } + if nz.Fe >= Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { + if nz.Fe > Int32FromInt32(0x7ff)-Int32FromInt32(0x3ff)-Int32FromInt32(52)-Int32FromInt32(1) { /* z==0 */ + return x1*y1 + z + } + return z + } + _mul(tls, bp, bp+8, nx.Fm, ny.Fm) + /* either top 20 or 21 bits of rhi and last 2 bits of rlo are 0 */ + /* align exponents */ + e = nx.Fe + ny.Fe + d = nz.Fe - e + /* shift bits z<<=kz, r>>=kr, so kz+kr == d, set e = e+kr (== ez-kz) */ + if d > 0 { + if d < int32(64) { + zlo = nz.Fm << d + zhi = nz.Fm >> (int32(64) - d) + } else { + zlo = uint64(0) + zhi = nz.Fm + e = nz.Fe - int32(64) + d -= int32(64) + if d == 0 { + } else { + if d < int32(64) { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = *(*Tuint64_t)(unsafe.Pointer(bp))<<(int32(64)-d) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<<(Int32FromInt32(64)-d) != 0)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) >> d + } else { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uint64(1) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(0) + } + } + } + } else { + zhi = uint64(0) + d = -d + if d == 0 { + zlo = nz.Fm + } else { + if d < int32(64) { + zlo = nz.Fm>>d | BoolUint64(!!(nz.Fm<<(Int32FromInt32(64)-d) != 0)) + } else { + zlo = uint64(1) + } + } + } + /* add */ + sign = nx.Fsign ^ ny.Fsign + samesign = BoolInt32(!(sign^nz.Fsign != 0)) + nonzero = int32(1) + if samesign != 0 { + /* r += z */ + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) += zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) += zhi + BoolUint64(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) < zlo) + } else { + /* r -= z */ + t = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) -= zlo + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp)) - zhi - BoolUint64(t < *(*Tuint64_t)(unsafe.Pointer(bp + 8))) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = -*(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*Tuint64_t)(unsafe.Pointer(bp)) = -*(*Tuint64_t)(unsafe.Pointer(bp)) - BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) != 0)) + sign = BoolInt32(!(sign != 0)) + } + nonzero = BoolInt32(!!(*(*Tuint64_t)(unsafe.Pointer(bp)) != 0)) + } + /* set rhi to top 63bit of the result (last bit is sticky) */ + if nonzero != 0 { + e += int32(64) + v1 = *(*Tuint64_t)(unsafe.Pointer(bp)) + if v1>>Int32FromInt32(32) != 0 { + y = uint32(v1 >> int32(32)) + r = Int32FromInt32(0) + } else { + y = uint32(v1) + r = Int32FromInt32(32) + } + if y>>Int32FromInt32(16) != 0 { + y >>= uint32(16) + } else { + r |= int32(16) + } + if y>>Int32FromInt32(8) != 0 { + y >>= uint32(8) + } else { + r |= int32(8) + } + if y>>Int32FromInt32(4) != 0 { + y >>= uint32(4) + } else { + r |= int32(4) + } + if y>>Int32FromInt32(2) != 0 { + y >>= uint32(2) + } else { + r |= int32(2) + } + v2 = r | BoolInt32(!(y>>Int32FromInt32(1) != 0)) + goto _3 + _3: + d = v2 - int32(1) + /* note: d > 0 */ + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp))<>(int32(64)-d) | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp + 8))<>Int32FromInt32(32) != 0 { + y = uint32(v4 >> int32(32)) + r = Int32FromInt32(0) + } else { + y = uint32(v4) + r = Int32FromInt32(32) + } + if y>>Int32FromInt32(16) != 0 { + y >>= uint32(16) + } else { + r |= int32(16) + } + if y>>Int32FromInt32(8) != 0 { + y >>= uint32(8) + } else { + r |= int32(8) + } + if y>>Int32FromInt32(4) != 0 { + y >>= uint32(4) + } else { + r |= int32(4) + } + if y>>Int32FromInt32(2) != 0 { + y >>= uint32(2) + } else { + r |= int32(2) + } + v5 = r | BoolInt32(!(y>>Int32FromInt32(1) != 0)) + goto _6 + _6: + d = v5 - int32(1) + if d < 0 { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8))>>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp + 8))&uint64(1) + } else { + *(*Tuint64_t)(unsafe.Pointer(bp)) = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) << d + } + } else { + /* exact +-0 */ + return x1*y1 + z + } + } + e -= d + /* convert to double */ + i = int64(*(*Tuint64_t)(unsafe.Pointer(bp))) /* i is in [1<<62,(1<<63)-1] */ + if sign != 0 { + i = -i + } + r1 = float64(i) /* |r| is in [0x1p62,0x1p63] */ + if e < -Int32FromInt32(1022)-Int32FromInt32(62) { + /* result is subnormal before rounding */ + if e == -Int32FromInt32(1022)-Int32FromInt32(63) { + c = float64(9.223372036854776e+18) + if sign != 0 { + c = -c + } + if r1 == c { + /* min normal after rounding, underflow depends + on arch behaviour which can be imitated by + a double to float conversion */ + fltmin = float32(Float64FromFloat64(1.0842021401737618e-19) * Float64FromFloat32(1.1754943508222875e-38) * r1) + return Float64FromFloat64(2.2250738585072014e-308) / Float64FromFloat32(1.1754943508222875e-38) * float64(fltmin) + } + /* one bit is lost when scaled, add another top bit to + only round once at conversion if it is inexact */ + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(1) | *(*Tuint64_t)(unsafe.Pointer(bp))&uint64(1) | Uint64FromUint64(1)<>d | BoolUint64(!!(*(*Tuint64_t)(unsafe.Pointer(bp))<<(Int32FromInt32(64)-d) != 0))) << d) + if sign != 0 { + i = -i + } + r1 = float64(i) + } + } + return Xscalbn(tls, r1, e) +} + +const DBL_MIN2 = 0 +const FLT_MIN2 = 0 + +func Xfmal(tls *TLS, x float64, y float64, z float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v z=%v, (%v:)", tls, x, y, z, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfma(tls, x, y, z) +} + +func Xfmax(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeroes, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = y + } else { + v9 = x + } + return v9 + } + if x < y { + v12 = y + } else { + v12 = x + } + return v12 +} + +func Xfmaxl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmax(tls, x, y) +} + +func Xfmin(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint64 + var v12, v9 float64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != int32(v7>>Int32FromInt32(63)) { + *(*float64)(unsafe.Pointer(bp)) = x + v10 = *(*uint64)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(63)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v10, v3, v5, v7 uint32 + var v12, v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _, _, _, _ = v1, v10, v12, v3, v5, v7, v9 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return y + } + *(*float32)(unsafe.Pointer(bp)) = y + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 +_4: + if BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x + } + /* handle signed zeros, see C99 Annex F.9.9.2 */ + *(*float32)(unsafe.Pointer(bp)) = x + v5 = *(*uint32)(unsafe.Pointer(bp)) + goto _6 +_6: + *(*float32)(unsafe.Pointer(bp)) = y + v7 = *(*uint32)(unsafe.Pointer(bp)) + goto _8 +_8: + if int32(v5>>Int32FromInt32(31)) != int32(v7>>Int32FromInt32(31)) { + *(*float32)(unsafe.Pointer(bp)) = x + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + v9 = x + } else { + v9 = y + } + return v9 + } + if x < y { + v12 = x + } else { + v12 = y + } + return v12 +} + +func Xfminl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmin(tls, x, y) +} + +func Xfmod(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx int32 + var i, uxi Tuint64_t + var v1 uint64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + /* in the followings uxi should be ux.i, but then gcc wrongly adds */ + /* float load/store to inner loops ruining performance and code size */ + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = Tuint64_t(uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12))) + uxi = Tuint64_t(uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12))) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + uxi <<= uint64(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + if i == uint64(0) { + return Float64FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + /* scale result */ + if ex > 0 { + uxi = Tuint64_t(uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + uxi |= uint64(sx) << int32(63) + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xfmodf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey int32 + var i, sx, uxi Tuint32_t + var v1 uint32 + var v3 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = ex, ey, i, sx, uxi, v1, v3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x80000000) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if uxi<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + uxi <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + if i == uint32(0) { + return Float32FromInt32(0) * x + } + uxi = i + } + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + /* scale result up */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + uxi |= sx + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xfmodl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfmod(tls, x, y) +} + +func Xfrexp(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint64_t + Fd float64 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Fd float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Fd float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexp(tls, x*float64(1.8446744073709552e+19), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0x7ff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x3fe) + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & Uint64FromUint64(0x800fffffffffffff)) + p2 = bp + *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) | Uint64FromUint64(0x3fe0000000000000)) + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xfrexpf(tls *TLS, x float32, e uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ee int32 + var p1, p2 uintptr + var _ /* y at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _ = ee, p1, p2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ee = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if !(ee != 0) { + if x != 0 { + x = Xfrexpf(tls, float32(float64(x)*float64(1.8446744073709552e+19)), e) + *(*int32)(unsafe.Pointer(e)) -= int32(64) + } else { + *(*int32)(unsafe.Pointer(e)) = 0 + } + return x + } else { + if ee == int32(0xff) { + return x + } + } + *(*int32)(unsafe.Pointer(e)) = ee - int32(0x7e) + p1 = bp + *(*Tuint32_t)(unsafe.Pointer(p1)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p1))) & Uint64FromUint64(0x807fffff)) + p2 = bp + *(*Tuint32_t)(unsafe.Pointer(p2)) = Tuint32_t(uint64(*(*Tuint32_t)(unsafe.Pointer(p2))) | Uint64FromUint64(0x3f000000)) + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xfrexpl(tls *TLS, x float64, e uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v e=%v, (%v:)", tls, x, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfrexp(tls, x, e) +} + +const SPLIT = 1 + +func _sq(tls *TLS, hi uintptr, lo uintptr, x float64) { + var xc, xh, xl Tdouble_t + _, _, _ = xc, xh, xl + xc = x * (Float64FromFloat64(1.34217728e+08) + Float64FromInt32(1)) + xh = x - xc + xc + xl = x - xh + *(*Tdouble_t)(unsafe.Pointer(hi)) = x * x + *(*Tdouble_t)(unsafe.Pointer(lo)) = xh*xh - *(*Tdouble_t)(unsafe.Pointer(hi)) + Float64FromInt32(2)*xh*xl + xl*xl +} + +func Xhypot(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ex, ey int32 + var ut struct { + Fi [0]Tuint64_t + Ff float64 + } + var z Tdouble_t + var p1, p2 uintptr + var _ /* hx at bp+16 */ Tdouble_t + var _ /* hy at bp+32 */ Tdouble_t + var _ /* lx at bp+24 */ Tdouble_t + var _ /* ly at bp+40 */ Tdouble_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = ex, ey, ut, z, p1, p2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = y + /* arrange |x| >= |y| */ + p1 = bp + *(*Tuint64_t)(unsafe.Pointer(p1)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p1)) & (-Uint64FromUint64(1) >> Int32FromInt32(1))) + p2 = bp + 8 + *(*Tuint64_t)(unsafe.Pointer(p2)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p2)) & (-Uint64FromUint64(1) >> Int32FromInt32(1))) + if *(*Tuint64_t)(unsafe.Pointer(bp)) < *(*Tuint64_t)(unsafe.Pointer(bp + 8)) { + ut = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = ut + } + /* special cases */ + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52)) + x = *(*float64)(unsafe.Pointer(bp)) + y = *(*float64)(unsafe.Pointer(bp + 8)) + /* note: hypot(inf,nan) == inf */ + if ey == int32(0x7ff) { + return y + } + if ex == int32(0x7ff) || *(*Tuint64_t)(unsafe.Pointer(bp + 8)) == uint64(0) { + return x + } + /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ + /* 64 difference is enough for ld80 double_t */ + if ex-ey > int32(64) { + return x + y + } + /* precise sqrt argument in nearest rounding mode without overflow */ + /* xh*xh must not overflow and xl*xl must not underflow in sq */ + z = Float64FromInt32(1) + if ex > Int32FromInt32(0x3ff)+Int32FromInt32(510) { + z = float64(5.260135901548374e+210) + x *= float64(1.90109156629516e-211) + y *= float64(1.90109156629516e-211) + } else { + if ey < Int32FromInt32(0x3ff)-Int32FromInt32(450) { + z = float64(1.90109156629516e-211) + x *= float64(5.260135901548374e+210) + y *= float64(5.260135901548374e+210) + } + } + _sq(tls, bp+16, bp+24, x) + _sq(tls, bp+32, bp+40, y) + return z * Xsqrt(tls, *(*Tdouble_t)(unsafe.Pointer(bp + 40))+*(*Tdouble_t)(unsafe.Pointer(bp + 24))+*(*Tdouble_t)(unsafe.Pointer(bp + 32))+*(*Tdouble_t)(unsafe.Pointer(bp + 16))) +} + +func Xhypotf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ut struct { + Fi [0]Tuint32_t + Ff float32 + } + var z Tfloat_t + var _ /* ux at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = ut, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = y + *(*Tuint32_t)(unsafe.Pointer(bp)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) &= -Uint32FromUint32(1) >> Int32FromInt32(1) + if *(*Tuint32_t)(unsafe.Pointer(bp)) < *(*Tuint32_t)(unsafe.Pointer(bp + 4)) { + ut = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = ut + } + x = *(*float32)(unsafe.Pointer(bp)) + y = *(*float32)(unsafe.Pointer(bp + 4)) + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(0xff)<= uint32(Int32FromInt32(25)<= uint32((Int32FromInt32(0x7f)+Int32FromInt32(60))< %v", r) }() + } + return Xhypot(tls, x, y) +} + +func Xilogb(tls *TLS, x3 float64) (r int32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint64_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(52) & uint64(0x7ff)) + if !(e != 0) { + i <<= uint64(12) + if i == uint64(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x3ff) + for { + if !(i>>int32(63) == uint64(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint64(1) + } + return e + } + if e == int32(0x7ff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, v2 int32 + var i Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _ = e, i, y, y1, y2, v2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + i = *(*Tuint32_t)(unsafe.Pointer(bp)) + e = int32(i >> int32(23) & uint32(0xff)) + if !(e != 0) { + i <<= uint32(9) + if i == uint32(0) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + return -Int32FromInt32(1) - Int32FromInt32(0x7fffffff) + } + /* subnormal x */ + e = -int32(0x7f) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _1 + _1: + ; + e-- + i <<= uint32(1) + } + return e + } + if e == int32(0xff) { + if uint64(4) == uint64(4) { + y = Float32FromInt32(0) / Float32FromFloat32(0) + } else { + if uint64(4) == uint64(8) { + y1 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } else { + y2 = float64(Float32FromInt32(0) / Float32FromFloat32(0)) + } + } + if i< %v", r) }() + } + return Xilogb(tls, x) +} + +var _invsqrtpi = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +// C documentation +// +// /* common method when |x|>=2 */ +func _common(tls *TLS, ix Tuint32_t, x float64, y0 int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x-pi/4)-q0(x)*sin(x-pi/4)) + * y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x-pi/4)+q0(x)*cos(x-pi/4)) + * + * sin(x-pi/4) = (sin(x) - cos(x))/sqrt(2) + * cos(x-pi/4) = (sin(x) + cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + c = Xcos(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + /* avoid overflow in 2*x, big ulp error when x>=0x1p1023 */ + if ix < uint32(0x7fe00000) { + ss = s - c + z = -Xcos(tls, Float64FromInt32(2)*x) + if s*c < Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y0 != 0 { + ss = -ss + } + cc = _pzero(tls, x)*cc - _qzero(tls, x)*ss + } + } + return _invsqrtpi * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R02 = float64(0.015624999999999995) /* 0x3F8FFFFF, 0xFFFFFFFD */ +var _R03 = -Float64FromFloat64(0.00018997929423885472) /* 0xBF28E6A5, 0xB61AC6E9 */ +var _R04 = float64(1.8295404953270067e-06) /* 0x3EBEB1D1, 0x0C503919 */ +var _R05 = -Float64FromFloat64(4.618326885321032e-09) /* 0xBE33D5E7, 0x73D63FCE */ +var _S01 = float64(0.015619102946489001) /* 0x3F8FFCE8, 0x82C8C2A4 */ +var _S02 = float64(0.00011692678466333745) /* 0x3F1EA6D2, 0xDD57DBF4 */ +var _S03 = float64(5.135465502073181e-07) /* 0x3EA13B54, 0xCE84D5A9 */ +var _S04 = float64(1.1661400333379e-09) /* 0x3E1408BC, 0xF4745D8F */ + +func Xj0(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + _, _, _, _ = ix, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* j0(+-inf)=0, j0(nan)=nan */ + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + x = Xfabs(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros: 2.4, 5.52, 8.6537,.. */ + return _common(tls, ix, x, 0) + } + /* 1 - x*x/4 + x*x*R(x^2)/S(x^2) */ + if ix >= uint32(0x3f200000) { /* |x| >= 2**-13 */ + /* up to 4ulp error close to 2 */ + z = x * x + r = z * (_R02 + z*(_R03+z*(_R04+z*_R05))) + s = Float64FromInt32(1) + z*(_S01+z*(_S02+z*(_S03+z*_S04))) + return (Float64FromInt32(1)+x/Float64FromInt32(2))*(Float64FromInt32(1)-x/Float64FromInt32(2)) + z*(r/s) + } + /* 1 - x*x/4 */ + /* prevent underflow */ + /* inexact should be raised when x!=0, this is not done correctly */ + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + x = float64(0.25) * x * x + } + return Float64FromInt32(1) - x +} + +var _u00 = -Float64FromFloat64(0.07380429510868723) /* 0xBFB2E4D6, 0x99CBD01F */ +var _u01 = float64(0.17666645250918112) /* 0x3FC69D01, 0x9DE9E3FC */ +var _u02 = -Float64FromFloat64(0.01381856719455969) /* 0xBF8C4CE8, 0xB16CFA97 */ +var _u03 = float64(0.00034745343209368365) /* 0x3F36C54D, 0x20B29B6B */ +var _u04 = -Float64FromFloat64(3.8140705372436416e-06) /* 0xBECFFEA7, 0x73D25CAD */ +var _u05 = float64(1.9559013703502292e-08) /* 0x3E550057, 0x3B4EABD4 */ +var _u06 = -Float64FromFloat64(3.982051941321034e-11) /* 0xBDC5E43D, 0x693FB3C8 */ +var _v01 = float64(0.01273048348341237) /* 0x3F8A1270, 0x91C9C71A */ +var _v02 = float64(7.600686273503533e-05) /* 0x3F13ECBB, 0xF578C6C1 */ +var _v03 = float64(2.591508518404578e-07) /* 0x3E91642D, 0x7FF202FD */ +var _v04 = float64(4.4111031133267547e-10) /* 0x3DFE5018, 0x3BD6D9EF */ + +func Xy0(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y0(nan)=nan, y0(<0)=nan, y0(0)=-inf, y0(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + /* large ulp errors near zeros: 3.958, 7.086,.. */ + return _common(tls, ix, x, int32(1)) + } + /* U(x^2)/V(x^2) + (2/pi)*j0(x)*log(x) */ + if ix >= uint32(0x3e400000) { /* x >= 2**-27 */ + /* large ulp error near the first zero, x ~= 0.89 */ + z = x * x + u = _u00 + z*(_u01+z*(_u02+z*(_u03+z*(_u04+z*(_u05+z*_u06))))) + v = float64(1) + z*(_v01+z*(_v02+z*(_v03+z*_v04))) + return u/v + _tpi*(Xj0(tls, x)*Xlog(tls, x)) + } + return _u00 + _tpi*Xlog(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR8 = [6]float64{ + 1: -Float64FromFloat64(0.07031249999999004), + 2: -Float64FromFloat64(8.081670412753498), + 3: -Float64FromFloat64(257.06310567970485), + 4: -Float64FromFloat64(2485.216410094288), + 5: -Float64FromFloat64(5253.043804907295), +} +var _pS8 = [5]float64{ + 0: float64(116.53436461966818), + 1: float64(3833.7447536412183), + 2: float64(40597.857264847255), + 3: float64(116752.97256437592), + 4: float64(47627.728414673096), +} + +var _pR5 = [6]float64{ + 0: -Float64FromFloat64(1.141254646918945e-11), + 1: -Float64FromFloat64(0.07031249408735993), + 2: -Float64FromFloat64(4.159610644705878), + 3: -Float64FromFloat64(67.67476522651673), + 4: -Float64FromFloat64(331.23129964917297), + 5: -Float64FromFloat64(346.4333883656049), +} +var _pS52 = [5]float64{ + 0: float64(60.753938269230034), + 1: float64(1051.2523059570458), + 2: float64(5978.970943338558), + 3: float64(9625.445143577745), + 4: float64(2406.058159229391), +} + +var _pR3 = [6]float64{ + 0: -Float64FromFloat64(2.547046017719519e-09), + 1: -Float64FromFloat64(0.07031196163814817), + 2: -Float64FromFloat64(2.409032215495296), + 3: -Float64FromFloat64(21.96597747348831), + 4: -Float64FromFloat64(58.07917047017376), + 5: -Float64FromFloat64(31.44794705948885), +} +var _pS32 = [5]float64{ + 0: float64(35.85603380552097), + 1: float64(361.51398305030386), + 2: float64(1193.6078379211153), + 3: float64(1127.9967985690741), + 4: float64(173.58093081333575), +} + +var _pR2 = [6]float64{ + 0: -Float64FromFloat64(8.875343330325264e-08), + 1: -Float64FromFloat64(0.07030309954836247), + 2: -Float64FromFloat64(1.4507384678095299), + 3: -Float64FromFloat64(7.635696138235278), + 4: -Float64FromFloat64(11.193166886035675), + 5: -Float64FromFloat64(3.2336457935133534), +} +var _pS24 = [5]float64{ + 0: float64(22.22029975320888), + 1: float64(136.2067942182152), + 2: float64(270.4702786580835), + 3: float64(153.87539420832033), + 4: float64(14.65761769482562), +} + +func _pzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pR8)) + q = uintptr(unsafe.Pointer(&_pS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pR5)) + q = uintptr(unsafe.Pointer(&_pS52)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pR3)) + q = uintptr(unsafe.Pointer(&_pS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR2)) + q = uintptr(unsafe.Pointer(&_pS24)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR8 = [6]float64{ + 1: float64(0.0732421874999935), + 2: float64(11.76820646822527), + 3: float64(557.6733802564019), + 4: float64(8859.197207564686), + 5: float64(37014.62677768878), +} +var _qS8 = [6]float64{ + 0: float64(163.77602689568982), + 1: float64(8098.344946564498), + 2: float64(142538.29141912048), + 3: float64(803309.2571195144), + 4: float64(840501.5798190605), + 5: -Float64FromFloat64(343899.2935378666), +} + +var _qR5 = [6]float64{ + 0: float64(1.8408596359451553e-11), + 1: float64(0.07324217666126848), + 2: float64(5.8356350896205695), + 3: float64(135.11157728644983), + 4: float64(1027.243765961641), + 5: float64(1989.9778586460538), +} +var _qS5 = [6]float64{ + 0: float64(82.77661022365378), + 1: float64(2077.81416421393), + 2: float64(18847.28877857181), + 3: float64(56751.11228949473), + 4: float64(35976.75384251145), + 5: -Float64FromFloat64(5354.342756019448), +} + +var _qR3 = [6]float64{ + 0: float64(4.377410140897386e-09), + 1: float64(0.07324111800429114), + 2: float64(3.344231375161707), + 3: float64(42.621844074541265), + 4: float64(170.8080913405656), + 5: float64(166.73394869665117), +} +var _qS32 = [6]float64{ + 0: float64(48.75887297245872), + 1: float64(709.689221056606), + 2: float64(3704.1482262011136), + 3: float64(6460.425167525689), + 4: float64(2516.3336892036896), + 5: -Float64FromFloat64(149.2474518361564), +} + +var _qR2 = [6]float64{ + 0: float64(1.5044444488698327e-07), + 1: float64(0.07322342659630793), + 2: float64(1.99819174093816), + 3: float64(14.495602934788574), + 4: float64(31.666231750478154), + 5: float64(16.252707571092927), +} +var _qS22 = [6]float64{ + 0: float64(30.36558483552192), + 1: float64(269.34811860804984), + 2: float64(844.7837575953201), + 3: float64(882.9358451124886), + 4: float64(212.66638851179883), + 5: -Float64FromFloat64(5.3109549388266695), +} + +func _qzero(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qR8)) + q = uintptr(unsafe.Pointer(&_qS8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qR5)) + q = uintptr(unsafe.Pointer(&_qS5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qR3)) + q = uintptr(unsafe.Pointer(&_qS32)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR2)) + q = uintptr(unsafe.Pointer(&_qS22)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (-Float64FromFloat64(0.125) + r/s) / x +} + +var _invsqrtpi1 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi1 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common1(tls *TLS, ix Tuint32_t, x float32, y0 int32) (r float32) { + var c, cc, s, ss, z float32 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + s = Xsinf(tls, x) + c = Xcosf(tls, x) + if y0 != 0 { + c = -c + } + cc = s + c + if ix < uint32(0x7f000000) { + ss = s - c + z = -Xcosf(tls, Float32FromInt32(2)*x) + if s*c < Float32FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y0 != 0 { + ss = -ss + } + cc = _pzerof(tls, x)*cc - _qzerof(tls, x)*ss + } + } + return _invsqrtpi1 * cc / Xsqrtf(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0, 2.00] */ + +var _R021 = float32(0.015625) /* 0x3c800000 */ +var _R031 = float32(-Float64FromFloat64(0.00018997929874)) /* 0xb947352e */ +var _R041 = float32(1.8295404516e-06) /* 0x35f58e88 */ +var _R051 = float32(-Float64FromFloat64(4.6183270541e-09)) /* 0xb19eaf3c */ +var _S011 = float32(0.015619102865) /* 0x3c7fe744 */ +var _S021 = float32(0.00011692678527) /* 0x38f53697 */ +var _S031 = float32(5.1354652442e-07) /* 0x3509daa6 */ +var _S041 = float32(1.1661400734e-09) /* 0x30a045e8 */ + +func Xj0f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + _, _, _, _ = ix, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + x = Xfabsf(tls, x) + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, 0) + } + if ix >= uint32(0x3a000000) { /* |x| >= 2**-11 */ + /* up to 4ulp error near 2 */ + z = x * x + r = z * (_R021 + z*(_R031+z*(_R041+z*_R051))) + s = Float32FromInt32(1) + z*(_S011+z*(_S021+z*(_S031+z*_S041))) + return (Float32FromInt32(1)+x/Float32FromInt32(2))*(Float32FromInt32(1)-x/Float32FromInt32(2)) + z*(r/s) + } + if ix >= uint32(0x21800000) { /* |x| >= 2**-60 */ + x = Float32FromFloat32(0.25) * x * x + } + return Float32FromInt32(1) - x +} + +var _u001 = float32(-Float64FromFloat64(0.073804296553)) /* 0xbd9726b5 */ +var _u011 = float32(0.17666645348) /* 0x3e34e80d */ +var _u021 = float32(-Float64FromFloat64(0.013818567619)) /* 0xbc626746 */ +var _u031 = float32(0.00034745343146) /* 0x39b62a69 */ +var _u041 = float32(-Float64FromFloat64(3.8140706238e-06)) /* 0xb67ff53c */ +var _u051 = float32(1.9559013964e-08) /* 0x32a802ba */ +var _u061 = float32(-Float64FromFloat64(3.982051841e-11)) /* 0xae2f21eb */ +var _v011 = float32(0.012730483897) /* 0x3c509385 */ +var _v021 = float32(7.6006865129e-05) /* 0x389f65e0 */ +var _v031 = float32(2.5915085189e-07) /* 0x348b216c */ +var _v041 = float32(4.4111031494e-10) /* 0x2ff280c2 */ + +func Xy0f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + /* large ulp error near zeros */ + return _common1(tls, ix, x, int32(1)) + } + if ix >= uint32(0x39000000) { /* x >= 2**-13 */ + /* large ulp error at x ~= 0.89 */ + z = x * x + u = _u001 + z*(_u011+z*(_u021+z*(_u031+z*(_u041+z*(_u051+z*_u061))))) + v = Float32FromInt32(1) + z*(_v011+z*(_v021+z*(_v031+z*_v041))) + return u/v + _tpi1*(Xj0f(tls, x)*Xlogf(tls, x)) + } + return _u001 + _tpi1*Xlogf(tls, x) +} + +// C documentation +// +// /* The asymptotic expansions of pzero is +// * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. +// * For x >= 2, We approximate pzero by +// * pzero(x) = 1 + (R/S) +// * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 +// * S = 1 + pS0*s^2 + ... + pS4*s^10 +// * and +// * | pzero(x)-1-R/S | <= 2 ** ( -60.26) +// */ +var _pR81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.0703125)), + 2: float32(-Float64FromFloat64(8.0816707611)), + 3: float32(-Float64FromFloat64(257.06311035)), + 4: float32(-Float64FromFloat64(2485.2163086)), + 5: float32(-Float64FromFloat64(5253.0439453)), +} +var _pS81 = [5]float32{ + 0: float32(116.53436279), + 1: float32(3833.744873), + 2: float32(40597.855469), + 3: float32(116752.96875), + 4: float32(47627.726562), +} +var _pR51 = [6]float32{ + 0: float32(-Float64FromFloat64(1.1412546255e-11)), + 1: float32(-Float64FromFloat64(0.070312492549)), + 2: float32(-Float64FromFloat64(4.1596107483)), + 3: float32(-Float64FromFloat64(67.674766541)), + 4: float32(-Float64FromFloat64(331.23129272)), + 5: float32(-Float64FromFloat64(346.43338013)), +} +var _pS53 = [5]float32{ + 0: float32(60.753936768), + 1: float32(1051.2523193), + 2: float32(5978.9707031), + 3: float32(9625.4453125), + 4: float32(2406.0581055), +} + +var _pR31 = [6]float32{ + 0: float32(-Float64FromFloat64(2.5470459075e-09)), + 1: float32(-Float64FromFloat64(0.070311963558)), + 2: float32(-Float64FromFloat64(2.4090321064)), + 3: float32(-Float64FromFloat64(21.965976715)), + 4: float32(-Float64FromFloat64(58.079170227)), + 5: float32(-Float64FromFloat64(31.447946548)), +} +var _pS33 = [5]float32{ + 0: float32(35.856033325), + 1: float32(361.51397705), + 2: float32(1193.6077881), + 3: float32(1127.9968262), + 4: float32(173.58093262), +} + +var _pR21 = [6]float32{ + 0: float32(-Float64FromFloat64(8.8753431271e-08)), + 1: float32(-Float64FromFloat64(0.070303097367)), + 2: float32(-Float64FromFloat64(1.45073843)), + 3: float32(-Float64FromFloat64(7.6356959343)), + 4: float32(-Float64FromFloat64(11.193166733)), + 5: float32(-Float64FromFloat64(3.2336456776)), +} +var _pS25 = [5]float32{ + 0: float32(22.220300674), + 1: float32(136.20678711), + 2: float32(270.47027588), + 3: float32(153.87539673), + 4: float32(14.657617569), +} + +func _pzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pR81)) + q = uintptr(unsafe.Pointer(&_pS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pR51)) + q = uintptr(unsafe.Pointer(&_pS53)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pR31)) + q = uintptr(unsafe.Pointer(&_pS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pR21)) + q = uintptr(unsafe.Pointer(&_pS25)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 4*4))))))) + return float32(Float64FromFloat32(1) + r/s) +} + +// C documentation +// +// /* For x >= 8, the asymptotic expansions of qzero is +// * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. +// * We approximate pzero by +// * qzero(x) = s*(-1.25 + (R/S)) +// * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 +// * S = 1 + qS0*s^2 + ... + qS5*s^12 +// * and +// * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) +// */ +var _qR81 = [6]float32{ + 1: float32(0.0732421875), + 2: float32(11.768206596), + 3: float32(557.67340088), + 4: float32(8859.1972656), + 5: float32(37014.625), +} +var _qS81 = [6]float32{ + 0: float32(163.77603149), + 1: float32(8098.3447266), + 2: float32(142538.29688), + 3: float32(803309.25), + 4: float32(840501.5625), + 5: float32(-Float64FromFloat64(343899.28125)), +} + +var _qR51 = [6]float32{ + 0: float32(1.8408595828e-11), + 1: float32(0.073242180049), + 2: float32(5.8356351852), + 3: float32(135.11157227), + 4: float32(1027.2437744), + 5: float32(1989.9779053), +} +var _qS51 = [6]float32{ + 0: float32(82.776611328), + 1: float32(2077.814209), + 2: float32(18847.289062), + 3: float32(56751.113281), + 4: float32(35976.753906), + 5: float32(-Float64FromFloat64(5354.3427734)), +} + +var _qR31 = [6]float32{ + 0: float32(4.37740999e-09), + 1: float32(0.073241114616), + 2: float32(3.3442313671), + 3: float32(42.621845245), + 4: float32(170.80809021), + 5: float32(166.73394775), +} +var _qS33 = [6]float32{ + 0: float32(48.758872986), + 1: float32(709.68920898), + 2: float32(3704.1481934), + 3: float32(6460.425293), + 4: float32(2516.3337402), + 5: float32(-Float64FromFloat64(149.24745178)), +} + +var _qR21 = [6]float32{ + 0: float32(1.5044444979e-07), + 1: float32(0.073223426938), + 2: float32(1.9981917143), + 3: float32(14.495602608), + 4: float32(31.666231155), + 5: float32(16.252708435), +} +var _qS23 = [6]float32{ + 0: float32(30.365585327), + 1: float32(269.34811401), + 2: float32(844.78375244), + 3: float32(882.93585205), + 4: float32(212.66638184), + 5: float32(-Float64FromFloat64(5.3109550476)), +} + +func _qzerof(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qR81)) + q = uintptr(unsafe.Pointer(&_qS81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qR51)) + q = uintptr(unsafe.Pointer(&_qS51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qR31)) + q = uintptr(unsafe.Pointer(&_qS33)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qR21)) + q = uintptr(unsafe.Pointer(&_qS23)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 5*4)))))))) + return float32((float64(-Float32FromFloat32(0.125)) + r/s) / float64(x)) +} + +var _invsqrtpi2 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ +var _tpi2 = float64(0.6366197723675814) /* 0x3FE45F30, 0x6DC9C883 */ + +func _common2(tls *TLS, ix Tuint32_t, x float64, y1 int32, sign int32) (r float64) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + /* + * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x-3pi/4)-q1(x)*sin(x-3pi/4)) + * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x-3pi/4)+q1(x)*cos(x-3pi/4)) + * + * sin(x-3pi/4) = -(sin(x) + cos(x))/sqrt(2) + * cos(x-3pi/4) = (sin(x) - cos(x))/sqrt(2) + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + */ + s = Xsin(tls, x) + if y1 != 0 { + s = -s + } + c = Xcos(tls, x) + cc = s - c + if ix < uint32(0x7fe00000) { + /* avoid overflow in 2*x */ + ss = -s - c + z = Xcos(tls, Float64FromInt32(2)*x) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x48000000) { + if y1 != 0 { + ss = -ss + } + cc = _pone(tls, x)*cc - _qone(tls, x)*ss + } + } + if sign != 0 { + cc = -cc + } + return _invsqrtpi2 * cc / Xsqrt(tls, x) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r00 = -Float64FromFloat64(0.0625) /* 0xBFB00000, 0x00000000 */ +var _r01 = float64(0.001407056669551897) /* 0x3F570D9F, 0x98472C61 */ +var _r02 = -Float64FromFloat64(1.599556310840356e-05) /* 0xBEF0C5C6, 0xBA169668 */ +var _r03 = float64(4.9672799960958445e-08) /* 0x3E6AAAFA, 0x46CA0BD9 */ +var _s01 = float64(0.019153759953836346) /* 0x3F939D0B, 0x12637E53 */ +var _s02 = float64(0.00018594678558863092) /* 0x3F285F56, 0xB9CDF664 */ +var _s03 = float64(1.1771846404262368e-06) /* 0x3EB3BFF8, 0x333F8498 */ +var _s04 = float64(5.0463625707621704e-09) /* 0x3E35AC88, 0xC97DFF2C */ +var _s05 = float64(1.2354227442613791e-11) /* 0x3DAB2ACF, 0xCFB97ED8 */ + +func Xj1(tls *TLS, x float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float64 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common2(tls, ix, Xfabs(tls, x), 0, sign) + } + if ix >= uint32(0x38000000) { /* |x| >= 2**-127 */ + z = x * x + r = z * (_r00 + z*(_r01+z*(_r02+z*_r03))) + s = Float64FromInt32(1) + z*(_s01+z*(_s02+z*(_s03+z*(_s04+z*_s05)))) + z = r / s + } else { + /* avoid underflow, raise inexact if x!=0 */ + z = x + } + return (float64(0.5) + z) * x +} + +var _U0 = [5]float64{ + 0: -Float64FromFloat64(0.19605709064623894), + 1: float64(0.05044387166398113), + 2: -Float64FromFloat64(0.0019125689587576355), + 3: float64(2.352526005616105e-05), + 4: -Float64FromFloat64(9.190991580398789e-08), +} +var _V0 = [5]float64{ + 0: float64(0.01991673182366499), + 1: float64(0.00020255258102513517), + 2: float64(1.3560880109751623e-06), + 3: float64(6.227414523646215e-09), + 4: float64(1.6655924620799208e-11), +} + +func Xy1(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var ix, lx Tuint32_t + var u, v, z float64 + _, _, _, _, _, _ = __u, ix, lx, u, v, z + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + /* y1(nan)=nan, y1(<0)=nan, y1(0)=-inf, y1(inf)=0 */ + if ix<>int32(31) != 0 { + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix >= uint32(0x7ff00000) { + return Float64FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* x >= 2 */ + return _common2(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x3c900000) { /* x < 2**-54 */ + return -_tpi2 / x + } + z = x * x + u = _U0[0] + z*(_U0[int32(1)]+z*(_U0[int32(2)]+z*(_U0[int32(3)]+z*_U0[int32(4)]))) + v = Float64FromInt32(1) + z*(_V0[0]+z*(_V0[int32(1)]+z*(_V0[int32(2)]+z*(_V0[int32(3)]+z*_V0[int32(4)])))) + return x*(u/v) + _tpi2*(Xj1(tls, x)*Xlog(tls, x)-Float64FromInt32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr8 = [6]float64{ + 1: float64(0.11718749999998865), + 2: float64(13.239480659307358), + 3: float64(412.05185430737856), + 4: float64(3874.7453891396053), + 5: float64(7914.479540318917), +} +var _ps8 = [5]float64{ + 0: float64(114.20737037567841), + 1: float64(3650.9308342085346), + 2: float64(36956.206026903346), + 3: float64(97602.79359349508), + 4: float64(30804.27206278888), +} + +var _pr5 = [6]float64{ + 0: float64(1.3199051955624352e-11), + 1: float64(0.1171874931906141), + 2: float64(6.802751278684329), + 3: float64(108.30818299018911), + 4: float64(517.6361395331998), + 5: float64(528.7152013633375), +} +var _ps5 = [5]float64{ + 0: float64(59.28059872211313), + 1: float64(991.4014187336144), + 2: float64(5353.26695291488), + 3: float64(7844.690317495512), + 4: float64(1504.0468881036106), +} + +var _pr3 = [6]float64{ + 0: float64(3.025039161373736e-09), + 1: float64(0.11718686556725359), + 2: float64(3.9329775003331564), + 3: float64(35.11940355916369), + 4: float64(91.05501107507813), + 5: float64(48.55906851973649), +} +var _ps3 = [5]float64{ + 0: float64(34.79130950012515), + 1: float64(336.76245874782575), + 2: float64(1046.8713997577513), + 3: float64(890.8113463982564), + 4: float64(103.78793243963928), +} + +var _pr2 = [6]float64{ + 0: float64(1.0771083010687374e-07), + 1: float64(0.11717621946268335), + 2: float64(2.368514966676088), + 3: float64(12.242610914826123), + 4: float64(17.693971127168773), + 5: float64(5.073523125888185), +} +var _ps2 = [5]float64{ + 0: float64(21.43648593638214), + 1: float64(125.29022716840275), + 2: float64(232.2764690571628), + 3: float64(117.6793732871471), + 4: float64(8.364638933716183), +} + +func _pone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_pr8)) + q = uintptr(unsafe.Pointer(&_ps8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_pr5)) + q = uintptr(unsafe.Pointer(&_ps5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_pr3)) + q = uintptr(unsafe.Pointer(&_ps3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr2)) + q = uintptr(unsafe.Pointer(&_ps2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z**(*float64)(unsafe.Pointer(q + 4*8)))))) + return float64(1) + r/s +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr8 = [6]float64{ + 1: -Float64FromFloat64(0.10253906249999271), + 2: -Float64FromFloat64(16.271753454459), + 3: -Float64FromFloat64(759.6017225139501), + 4: -Float64FromFloat64(11849.806670242959), + 5: -Float64FromFloat64(48438.512428575035), +} +var _qs8 = [6]float64{ + 0: float64(161.3953697007229), + 1: float64(7825.385999233485), + 2: float64(133875.33628724958), + 3: float64(719657.7236832409), + 4: float64(666601.2326177764), + 5: -Float64FromFloat64(294490.26430383464), +} + +var _qr5 = [6]float64{ + 0: -Float64FromFloat64(2.089799311417641e-11), + 1: -Float64FromFloat64(0.10253905024137543), + 2: -Float64FromFloat64(8.05644828123936), + 3: -Float64FromFloat64(183.66960747488838), + 4: -Float64FromFloat64(1373.1937606550816), + 5: -Float64FromFloat64(2612.4444045321566), +} +var _qs5 = [6]float64{ + 0: float64(81.27655013843358), + 1: float64(1991.7987346048596), + 2: float64(17468.48519249089), + 3: float64(49851.42709103523), + 4: float64(27948.075163891812), + 5: -Float64FromFloat64(4719.183547951285), +} + +var _qr3 = [6]float64{ + 0: -Float64FromFloat64(5.078312264617666e-09), + 1: -Float64FromFloat64(0.10253782982083709), + 2: -Float64FromFloat64(4.610115811394734), + 3: -Float64FromFloat64(57.847221656278364), + 4: -Float64FromFloat64(228.2445407376317), + 5: -Float64FromFloat64(219.21012847890933), +} +var _qs3 = [6]float64{ + 0: float64(47.66515503237295), + 1: float64(673.8651126766997), + 2: float64(3380.1528667952634), + 3: float64(5547.729097207228), + 4: float64(1903.119193388108), + 5: -Float64FromFloat64(135.20119144430734), +} + +var _qr2 = [6]float64{ + 0: -Float64FromFloat64(1.7838172751095887e-07), + 1: -Float64FromFloat64(0.10251704260798555), + 2: -Float64FromFloat64(2.7522056827818746), + 3: -Float64FromFloat64(19.663616264370372), + 4: -Float64FromFloat64(42.32531333728305), + 5: -Float64FromFloat64(21.371921170370406), +} +var _qs2 = [6]float64{ + 0: float64(29.533362906052385), + 1: float64(252.98154998219053), + 2: float64(757.5028348686454), + 3: float64(739.3932053204672), + 4: float64(155.94900333666612), + 5: -Float64FromFloat64(4.959498988226282), +} + +func _qone(tls *TLS, x float64) (r1 float64) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tdouble_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(32)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x40200000) { + p = uintptr(unsafe.Pointer(&_qr8)) + q = uintptr(unsafe.Pointer(&_qs8)) + } else { + if ix >= uint32(0x40122E8B) { + p = uintptr(unsafe.Pointer(&_qr5)) + q = uintptr(unsafe.Pointer(&_qs5)) + } else { + if ix >= uint32(0x4006DB6D) { + p = uintptr(unsafe.Pointer(&_qr3)) + q = uintptr(unsafe.Pointer(&_qs3)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr2)) + q = uintptr(unsafe.Pointer(&_qs2)) + } + } + } + z = float64(1) / (x * x) + r = *(*float64)(unsafe.Pointer(p)) + z*(*(*float64)(unsafe.Pointer(p + 1*8))+z*(*(*float64)(unsafe.Pointer(p + 2*8))+z*(*(*float64)(unsafe.Pointer(p + 3*8))+z*(*(*float64)(unsafe.Pointer(p + 4*8))+z**(*float64)(unsafe.Pointer(p + 5*8)))))) + s = float64(1) + z*(*(*float64)(unsafe.Pointer(q))+z*(*(*float64)(unsafe.Pointer(q + 1*8))+z*(*(*float64)(unsafe.Pointer(q + 2*8))+z*(*(*float64)(unsafe.Pointer(q + 3*8))+z*(*(*float64)(unsafe.Pointer(q + 4*8))+z**(*float64)(unsafe.Pointer(q + 5*8))))))) + return (float64(0.375) + r/s) / x +} + +var _invsqrtpi3 = float32(0.56418961287) /* 0x3f106ebb */ +var _tpi3 = float32(0.63661974669) /* 0x3f22f983 */ + +func _common3(tls *TLS, ix Tuint32_t, x float32, y1 int32, sign int32) (r float32) { + var c, cc, s, ss, z float64 + _, _, _, _, _ = c, cc, s, ss, z + s = float64(Xsinf(tls, x)) + if y1 != 0 { + s = -s + } + c = float64(Xcosf(tls, x)) + cc = s - c + if ix < uint32(0x7f000000) { + ss = -s - c + z = float64(Xcosf(tls, Float32FromInt32(2)*x)) + if s*c > Float64FromInt32(0) { + cc = z / ss + } else { + ss = z / cc + } + if ix < uint32(0x58800000) { + if y1 != 0 { + ss = -ss + } + cc = float64(_ponef(tls, x))*cc - float64(_qonef(tls, x))*ss + } + } + if sign != 0 { + cc = -cc + } + return float32(float64(_invsqrtpi3) * cc / float64(Xsqrtf(tls, x))) +} + +// C documentation +// +// /* R0/S0 on [0,2] */ + +var _r001 = float32(-Float64FromFloat64(0.0625)) /* 0xbd800000 */ +var _r011 = float32(0.0014070566976) /* 0x3ab86cfd */ +var _r021 = float32(-Float64FromFloat64(1.5995563444e-05)) /* 0xb7862e36 */ +var _r031 = float32(4.9672799207e-08) /* 0x335557d2 */ +var _s011 = float32(0.019153760746) /* 0x3c9ce859 */ +var _s021 = float32(0.00018594678841) /* 0x3942fab6 */ +var _s031 = float32(1.1771846857e-06) /* 0x359dffc2 */ +var _s041 = float32(5.046362439e-09) /* 0x31ad6446 */ +var _s051 = float32(1.2354227016e-11) /* 0x2d59567e */ + +func Xj1f(tls *TLS, x float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ix Tuint32_t + var r, s, z float32 + var sign int32 + _, _, _, _, _ = ix, r, s, sign, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / (x * x) + } + if ix >= uint32(0x40000000) { /* |x| >= 2 */ + return _common3(tls, ix, Xfabsf(tls, x), 0, sign) + } + if ix >= uint32(0x39000000) { /* |x| >= 2**-13 */ + z = x * x + r = z * (_r001 + z*(_r011+z*(_r021+z*_r031))) + s = Float32FromInt32(1) + z*(_s011+z*(_s021+z*(_s031+z*(_s041+z*_s051)))) + z = Float32FromFloat32(0.5) + r/s + } else { + z = Float32FromFloat32(0.5) + } + return z * x +} + +var _U01 = [5]float32{ + 0: float32(-Float64FromFloat64(0.19605709612)), + 1: float32(0.050443872809), + 2: float32(-Float64FromFloat64(0.0019125689287)), + 3: float32(2.3525259166e-05), + 4: float32(-Float64FromFloat64(9.1909917899e-08)), +} +var _V01 = [5]float32{ + 0: float32(0.019916731864), + 1: float32(0.0002025525755), + 2: float32(1.3560879779e-06), + 3: float32(6.227414584e-09), + 4: float32(1.6655924903e-11), +} + +func Xy1f(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix Tuint32_t + var u, v, z float32 + _, _, _, _ = ix, u, v, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + if ix&uint32(0x7fffffff) == uint32(0) { + return float32(-Int32FromInt32(1)) / Float32FromFloat32(0) + } + if ix>>int32(31) != 0 { + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix >= uint32(0x7f800000) { + return Float32FromInt32(1) / x + } + if ix >= uint32(0x40000000) { /* |x| >= 2.0 */ + return _common3(tls, ix, x, int32(1), 0) + } + if ix < uint32(0x33000000) { /* x < 2**-25 */ + return -_tpi3 / x + } + z = x * x + u = _U01[0] + z*(_U01[int32(1)]+z*(_U01[int32(2)]+z*(_U01[int32(3)]+z*_U01[int32(4)]))) + v = Float32FromFloat32(1) + z*(_V01[0]+z*(_V01[int32(1)]+z*(_V01[int32(2)]+z*(_V01[int32(3)]+z*_V01[int32(4)])))) + return x*(u/v) + _tpi3*(Xj1f(tls, x)*Xlogf(tls, x)-Float32FromFloat32(1)/x) +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +var _pr81 = [6]float32{ + 1: float32(0.1171875), + 2: float32(13.239480972), + 3: float32(412.05184937), + 4: float32(3874.7453613), + 5: float32(7914.4794922), +} +var _ps81 = [5]float32{ + 0: float32(114.20736694), + 1: float32(3650.9309082), + 2: float32(36956.207031), + 3: float32(97602.796875), + 4: float32(30804.271484), +} + +var _pr51 = [6]float32{ + 0: float32(1.3199052094e-11), + 1: float32(0.11718749255), + 2: float32(6.8027510643), + 3: float32(108.30818176), + 4: float32(517.63616943), + 5: float32(528.71520996), +} +var _ps51 = [5]float32{ + 0: float32(59.280597687), + 1: float32(991.40142822), + 2: float32(5353.2670898), + 3: float32(7844.6904297), + 4: float32(1504.046875), +} + +var _pr31 = [6]float32{ + 0: float32(3.0250391081e-09), + 1: float32(0.1171868667), + 2: float32(3.932977438), + 3: float32(35.119403839), + 4: float32(91.055007935), + 5: float32(48.559066772), +} +var _ps31 = [5]float32{ + 0: float32(34.791309357), + 1: float32(336.76245117), + 2: float32(1046.87146), + 3: float32(890.81134033), + 4: float32(103.78793335), +} + +var _pr21 = [6]float32{ + 0: float32(1.0771083225e-07), + 1: float32(0.11717621982), + 2: float32(2.3685150146), + 3: float32(12.242610931), + 4: float32(17.693971634), + 5: float32(5.0735230446), +} +var _ps21 = [5]float32{ + 0: float32(21.436485291), + 1: float32(125.2902298), + 2: float32(232.276474), + 3: float32(117.67937469), + 4: float32(8.3646392822), +} + +func _ponef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_pr81)) + q = uintptr(unsafe.Pointer(&_ps81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_pr51)) + q = uintptr(unsafe.Pointer(&_ps51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_pr31)) + q = uintptr(unsafe.Pointer(&_ps31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_pr21)) + q = uintptr(unsafe.Pointer(&_ps21)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 4*4))))))) + return float32(Float64FromFloat32(1) + r/s) +} + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate pone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +var _qr81 = [6]float32{ + 1: float32(-Float64FromFloat64(0.1025390625)), + 2: float32(-Float64FromFloat64(16.271753311)), + 3: float32(-Float64FromFloat64(759.60174561)), + 4: float32(-Float64FromFloat64(11849.806641)), + 5: float32(-Float64FromFloat64(48438.511719)), +} +var _qs81 = [6]float32{ + 0: float32(161.39537048), + 1: float32(7825.3862305), + 2: float32(133875.34375), + 3: float32(719657.75), + 4: float32(666601.25), + 5: float32(-Float64FromFloat64(294490.25)), +} + +var _qr51 = [6]float32{ + 0: float32(-Float64FromFloat64(2.0897993405e-11)), + 1: float32(-Float64FromFloat64(0.1025390476)), + 2: float32(-Float64FromFloat64(8.0564479828)), + 3: float32(-Float64FromFloat64(183.66960144)), + 4: float32(-Float64FromFloat64(1373.1937256)), + 5: float32(-Float64FromFloat64(2612.4443359)), +} +var _qs51 = [6]float32{ + 0: float32(81.276550293), + 1: float32(1991.7987061), + 2: float32(17468.484375), + 3: float32(49851.425781), + 4: float32(27948.074219), + 5: float32(-Float64FromFloat64(4719.1835938)), +} + +var _qr31 = [6]float32{ + 0: float32(-Float64FromFloat64(5.0783124372e-09)), + 1: float32(-Float64FromFloat64(0.10253783315)), + 2: float32(-Float64FromFloat64(4.6101160049)), + 3: float32(-Float64FromFloat64(57.847221375)), + 4: float32(-Float64FromFloat64(228.24453735)), + 5: float32(-Float64FromFloat64(219.21012878)), +} +var _qs31 = [6]float32{ + 0: float32(47.665153503), + 1: float32(673.8651123), + 2: float32(3380.152832), + 3: float32(5547.7290039), + 4: float32(1903.1191406), + 5: float32(-Float64FromFloat64(135.20118713)), +} + +var _qr21 = [6]float32{ + 0: float32(-Float64FromFloat64(1.7838172539e-07)), + 1: float32(-Float64FromFloat64(0.10251704603)), + 2: float32(-Float64FromFloat64(2.7522056103)), + 3: float32(-Float64FromFloat64(19.66361618)), + 4: float32(-Float64FromFloat64(42.325313568)), + 5: float32(-Float64FromFloat64(21.371921539)), +} +var _qs21 = [6]float32{ + 0: float32(29.533363342), + 1: float32(252.98155212), + 2: float32(757.50280762), + 3: float32(739.39318848), + 4: float32(155.94900513), + 5: float32(-Float64FromFloat64(4.9594988823)), +} + +func _qonef(tls *TLS, x float32) (r1 float32) { + var ix Tuint32_t + var p, q uintptr + var r, s, z Tfloat_t + _, _, _, _, _, _ = ix, p, q, r, s, z + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + ix &= uint32(0x7fffffff) + if ix >= uint32(0x41000000) { + p = uintptr(unsafe.Pointer(&_qr81)) + q = uintptr(unsafe.Pointer(&_qs81)) + } else { + if ix >= uint32(0x409173eb) { + p = uintptr(unsafe.Pointer(&_qr51)) + q = uintptr(unsafe.Pointer(&_qs51)) + } else { + if ix >= uint32(0x4036d917) { + p = uintptr(unsafe.Pointer(&_qr31)) + q = uintptr(unsafe.Pointer(&_qs31)) + } else { /*ix >= 0x40000000*/ + p = uintptr(unsafe.Pointer(&_qr21)) + q = uintptr(unsafe.Pointer(&_qs21)) + } + } + } + z = float64(Float32FromFloat32(1) / (x * x)) + r = float64(*(*float32)(unsafe.Pointer(p))) + z*(float64(*(*float32)(unsafe.Pointer(p + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(p + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(p + 5*4))))))) + s = Float64FromFloat32(1) + z*(float64(*(*float32)(unsafe.Pointer(q)))+z*(float64(*(*float32)(unsafe.Pointer(q + 1*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 2*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 3*4)))+z*(float64(*(*float32)(unsafe.Pointer(q + 4*4)))+z*float64(*(*float32)(unsafe.Pointer(q + 5*4)))))))) + return float32((Float64FromFloat32(0.375) + r/s) / float64(x)) +} + +var _invsqrtpi4 = float64(0.5641895835477563) /* 0x3FE20DD7, 0x50429B6D */ + +func Xjn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float64 + var i, k, nm1, sign int32 + var ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, h, i, ix, k, lx, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + /* nm1 = |n|-1 is used instead of |n| to handle n==INT_MIN */ + if n == 0 { + return Xj0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabs(tls, x) + if ix|lx == uint32(0) || ix == uint32(0x7ff00000) { /* if x is 0 or inf */ + b = float64(0) + } else { + if float64(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xcos(tls, x) + Xsin(tls, x) + case int32(1): + temp = -Xcos(tls, x) - Xsin(tls, x) + case int32(2): + temp = Xcos(tls, x) - Xsin(tls, x) + default: + fallthrough + case int32(3): + temp = Xcos(tls, x) + Xsin(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xj0(tls, x) + b = Xj1(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(float64(2)*float64(i)/x) - a /* avoid underflow */ + a = temp + goto _1 + _1: + } + } + } else { + if ix < uint32(0x3e100000) { /* x < 2**-29 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(32) { /* underflow */ + b = float64(0) + } else { + temp = x * float64(0.5) + b = temp + a = float64(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float64(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } + } else { + nf = float64(nm1) + float64(1) + w = Float64FromInt32(2) * nf / x + h = Float64FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - float64(1) + k = int32(1) + for q1 < float64(1e+09) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = float64(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float64FromInt32(1) / (Float64FromInt32(2)*(float64(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = float64(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlog(tls, Xfabs(tls, w)) + if tmp < float64(709.782712893384) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = b*(float64(2)*float64(i))/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > float64(3.273390607896142e+150) { + a /= b + t /= b + b = float64(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0(tls, x) + w = Xj1(tls, x) + if Xfabs(tls, z) >= Xfabs(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xyn(tls *TLS, n int32, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __u Tuint64_t + var a, b, temp, v1, v3 float64 + var i, nm1, sign int32 + var ib, ix, lx Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _ = __u, a, b, i, ib, ix, lx, nm1, sign, temp, v1, v3 + __u = *(*Tuint64_t)(unsafe.Pointer(&x)) + ix = uint32(__u >> int32(32)) + lx = uint32(__u) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix|(lx|-lx)>>int32(31) > uint32(0x7ff00000) { /* nan */ + return x + } + if sign != 0 && ix|lx != uint32(0) { /* x < 0 */ + return Float64FromInt32(0) / Float64FromFloat64(0) + } + if ix == uint32(0x7ff00000) { + return float64(0) + } + if n == 0 { + return Xy0(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1(tls, x) + } else { + v1 = Xy1(tls, x) + } + return v1 + } + if ix >= uint32(0x52d00000) { /* x > 2**302 */ + /* (x >> n**2) + * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) + * Let s=sin(x), c=cos(x), + * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then + * + * n sin(xn)*sqt2 cos(xn)*sqt2 + * ---------------------------------- + * 0 s-c c+s + * 1 -s-c -c+s + * 2 -s+c -c-s + * 3 s+c c-s + */ + switch nm1 & Int32FromInt32(3) { + case 0: + temp = -Xsin(tls, x) - Xcos(tls, x) + case int32(1): + temp = -Xsin(tls, x) + Xcos(tls, x) + case int32(2): + temp = Xsin(tls, x) + Xcos(tls, x) + default: + fallthrough + case int32(3): + temp = Xsin(tls, x) - Xcos(tls, x) + break + } + b = _invsqrtpi4 * temp / Xsqrt(tls, x) + } else { + a = Xy0(tls, x) + b = Xy1(tls, x) + /* quit if b is -inf */ + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xfff00000)) { + break + } + i++ + temp = b + b = float64(2)*float64(i)/x*b - a + ib = uint32(*(*Tuint64_t)(unsafe.Pointer(&b)) >> int32(32)) + a = temp + goto _2 + _2: + } + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xjnf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, h, nf, q0, q1, t, temp, tmp, w, z, v6 float32 + var i, k, nm1, sign int32 + var ix Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, h, i, ix, k, nf, nm1, q0, q1, sign, t, temp, tmp, w, z, v6 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + /* J(-n,x) = J(n,-x), use |n|-1 to avoid overflow in -n */ + if n == 0 { + return Xj0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + x = -x + sign ^= int32(1) + } else { + nm1 = n - int32(1) + } + if nm1 == 0 { + return Xj1f(tls, x) + } + sign &= n /* even n: 0, odd n: signbit(x) */ + x = Xfabsf(tls, x) + if ix == uint32(0) || ix == uint32(0x7f800000) { /* if x is 0 or inf */ + b = Float32FromFloat32(0) + } else { + if float32(nm1) < x { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = Xj0f(tls, x) + b = Xj1f(tls, x) + i = 0 + for { + if !(i < nm1) { + break + } + i++ + temp = b + b = b*(Float32FromFloat32(2)*float32(i)/x) - a + a = temp + goto _1 + _1: + } + } else { + if ix < uint32(0x35800000) { /* x < 2**-20 */ + /* x is tiny, return the first Taylor expansion of J(n,x) + * J(n,x) = 1/n!*(x/2)^n - ... + */ + if nm1 > int32(8) { /* underflow */ + nm1 = int32(8) + } + temp = Float32FromFloat32(0.5) * x + b = temp + a = Float32FromFloat32(1) + i = int32(2) + for { + if !(i <= nm1+int32(1)) { + break + } + a *= float32(i) /* a = n! */ + b *= temp /* b = (x/2)^n */ + goto _2 + _2: + ; + i++ + } + b = b / a + } else { + nf = float32(nm1) + Float32FromFloat32(1) + w = Float32FromInt32(2) * nf / x + h = Float32FromInt32(2) / x + z = w + h + q0 = w + q1 = w*z - Float32FromFloat32(1) + k = int32(1) + for q1 < Float32FromFloat32(10000) { + k += int32(1) + z += h + tmp = z*q1 - q0 + q0 = q1 + q1 = tmp + } + t = Float32FromFloat32(0) + i = k + for { + if !(i >= 0) { + break + } + t = Float32FromFloat32(1) / (Float32FromInt32(2)*(float32(i)+nf)/x - t) + goto _3 + _3: + ; + i-- + } + a = t + b = Float32FromFloat32(1) + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = nf * Xlogf(tls, Xfabsf(tls, w)) + if tmp < Float32FromFloat32(88.721679688) { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + goto _4 + _4: + ; + i-- + } + } else { + i = nm1 + for { + if !(i > 0) { + break + } + temp = b + b = Float32FromFloat32(2)*float32(i)*b/x - a + a = temp + /* scale b to avoid spurious overflow */ + if b > Float32FromFloat32(1.152921504606847e+18) { + a /= b + t /= b + b = Float32FromFloat32(1) + } + goto _5 + _5: + ; + i-- + } + } + z = Xj0f(tls, x) + w = Xj1f(tls, x) + if Xfabsf(tls, z) >= Xfabsf(tls, w) { + b = t * z / b + } else { + b = t * w / a + } + } + } + } + if sign != 0 { + v6 = -b + } else { + v6 = b + } + return v6 +} + +func Xynf(tls *TLS, n int32, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v n=%v x=%v, (%v:)", tls, n, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, temp, v1, v3 float32 + var i, nm1, sign int32 + var ib, ix Tuint32_t + _, _, _, _, _, _, _, _, _, _ = a, b, i, ib, ix, nm1, sign, temp, v1, v3 + ix = *(*Tuint32_t)(unsafe.Pointer(&x)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix > uint32(0x7f800000) { /* nan */ + return x + } + if sign != 0 && ix != uint32(0) { /* x < 0 */ + return Float32FromInt32(0) / Float32FromFloat32(0) + } + if ix == uint32(0x7f800000) { + return Float32FromFloat32(0) + } + if n == 0 { + return Xy0f(tls, x) + } + if n < 0 { + nm1 = -(n + int32(1)) + sign = n & int32(1) + } else { + nm1 = n - int32(1) + sign = 0 + } + if nm1 == 0 { + if sign != 0 { + v1 = -Xy1f(tls, x) + } else { + v1 = Xy1f(tls, x) + } + return v1 + } + a = Xy0f(tls, x) + b = Xy1f(tls, x) + /* quit if b is -inf */ + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + i = 0 + for { + if !(i < nm1 && ib != uint32(0xff800000)) { + break + } + i++ + temp = b + b = Float32FromFloat32(2)*float32(i)/x*b - a + ib = *(*Tuint32_t)(unsafe.Pointer(&b)) + a = temp + goto _2 + _2: + } + if sign != 0 { + v3 = -b + } else { + v3 = b + } + return v3 +} + +func Xldexp(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xldexpf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, n) +} + +func Xldexpl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnl(tls, x, n) +} + +func Xlgamma(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi2 = float64(3.141592653589793) /* 0x400921FB, 0x54442D18 */ +var _a0 = float64(0.07721566490153287) /* 0x3FB3C467, 0xE37DB0C8 */ +var _a1 = float64(0.3224670334241136) /* 0x3FD4A34C, 0xC4A60FAD */ +var _a2 = float64(0.06735230105312927) /* 0x3FB13E00, 0x1A5562A7 */ +var _a3 = float64(0.020580808432516733) /* 0x3F951322, 0xAC92547B */ +var _a4 = float64(0.007385550860814029) /* 0x3F7E404F, 0xB68FEFE8 */ +var _a5 = float64(0.0028905138367341563) /* 0x3F67ADD8, 0xCCB7926B */ +var _a6 = float64(0.0011927076318336207) /* 0x3F538A94, 0x116F3F5D */ +var _a7 = float64(0.0005100697921535113) /* 0x3F40B6C6, 0x89B99C00 */ +var _a8 = float64(0.00022086279071390839) /* 0x3F2CF2EC, 0xED10E54D */ +var _a9 = float64(0.00010801156724758394) /* 0x3F1C5088, 0x987DFB07 */ +var _a10 = float64(2.5214456545125733e-05) /* 0x3EFA7074, 0x428CFA52 */ +var _a11 = float64(4.4864094961891516e-05) /* 0x3F07858E, 0x90A45837 */ +var _tc = float64(1.4616321449683622) /* 0x3FF762D8, 0x6356BE3F */ +var _tf = -Float64FromFloat64(0.12148629053584961) /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +var _tt = -Float64FromFloat64(3.638676997039505e-18) /* 0xBC50C7CA, 0xA48A971F */ +var _t0 = float64(0.48383612272381005) /* 0x3FDEF72B, 0xC8EE38A2 */ +var _t1 = -Float64FromFloat64(0.1475877229945939) /* 0xBFC2E427, 0x8DC6C509 */ +var _t2 = float64(0.06462494023913339) /* 0x3FB08B42, 0x94D5419B */ +var _t3 = -Float64FromFloat64(0.032788541075985965) /* 0xBFA0C9A8, 0xDF35B713 */ +var _t4 = float64(0.01797067508118204) /* 0x3F9266E7, 0x970AF9EC */ +var _t5 = -Float64FromFloat64(0.010314224129834144) /* 0xBF851F9F, 0xBA91EC6A */ +var _t6 = float64(0.006100538702462913) /* 0x3F78FCE0, 0xE370E344 */ +var _t7 = -Float64FromFloat64(0.0036845201678113826) /* 0xBF6E2EFF, 0xB3E914D7 */ +var _t8 = float64(0.0022596478090061247) /* 0x3F6282D3, 0x2E15C915 */ +var _t9 = -Float64FromFloat64(0.0014034646998923284) /* 0xBF56FE8E, 0xBF2D1AF1 */ +var _t10 = float64(0.000881081882437654) /* 0x3F4CDF0C, 0xEF61A8E9 */ +var _t11 = -Float64FromFloat64(0.0005385953053567405) /* 0xBF41A610, 0x9C73E0EC */ +var _t12 = float64(0.00031563207090362595) /* 0x3F34AF6D, 0x6C0EBBF7 */ +var _t13 = -Float64FromFloat64(0.00031275416837512086) /* 0xBF347F24, 0xECC38C38 */ +var _t14 = float64(0.0003355291926355191) /* 0x3F35FD3E, 0xE8C2D3F4 */ +var _u0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _u1 = float64(0.6328270640250934) /* 0x3FE4401E, 0x8B005DFF */ +var _u2 = float64(1.4549225013723477) /* 0x3FF7475C, 0xD119BD6F */ +var _u3 = float64(0.9777175279633727) /* 0x3FEF4976, 0x44EA8450 */ +var _u4 = float64(0.22896372806469245) /* 0x3FCD4EAE, 0xF6010924 */ +var _u5 = float64(0.013381091853678766) /* 0x3F8B678B, 0xBF2BAB09 */ +var _v1 = float64(2.4559779371304113) /* 0x4003A5D7, 0xC2BD619C */ +var _v2 = float64(2.128489763798934) /* 0x40010725, 0xA42B18F5 */ +var _v3 = float64(0.7692851504566728) /* 0x3FE89DFB, 0xE45050AF */ +var _v4 = float64(0.10422264559336913) /* 0x3FBAAE55, 0xD6537C88 */ +var _v5 = float64(0.003217092422824239) /* 0x3F6A5ABB, 0x57D0CF61 */ +var _s0 = -Float64FromFloat64(0.07721566490153287) /* 0xBFB3C467, 0xE37DB0C8 */ +var _s1 = float64(0.21498241596060885) /* 0x3FCB848B, 0x36E20878 */ +var _s2 = float64(0.325778796408931) /* 0x3FD4D98F, 0x4F139F59 */ +var _s3 = float64(0.14635047265246445) /* 0x3FC2BB9C, 0xBEE5F2F7 */ +var _s4 = float64(0.02664227030336386) /* 0x3F9B481C, 0x7E939961 */ +var _s5 = float64(0.0018402845140733772) /* 0x3F5E26B6, 0x7368F239 */ +var _s6 = float64(3.194753265841009e-05) /* 0x3F00BFEC, 0xDD17E945 */ +var _r1 = float64(1.3920053346762105) /* 0x3FF645A7, 0x62C4AB74 */ +var _r2 = float64(0.7219355475671381) /* 0x3FE71A18, 0x93D3DCDC */ +var _r3 = float64(0.17193386563280308) /* 0x3FC601ED, 0xCCFBDF27 */ +var _r4 = float64(0.01864591917156529) /* 0x3F9317EA, 0x742ED475 */ +var _r5 = float64(0.0007779424963818936) /* 0x3F497DDA, 0xCA41A95B */ +var _r6 = float64(7.326684307446256e-06) /* 0x3EDEBAF7, 0xA5B38140 */ +var _w0 = float64(0.4189385332046727) /* 0x3FDACFE3, 0x90C97D69 */ +var _w1 = float64(0.08333333333333297) /* 0x3FB55555, 0x5555553B */ +var _w2 = -Float64FromFloat64(0.0027777777772877554) /* 0xBF66C16C, 0x16B02E5C */ +var _w3 = float64(0.0007936505586430196) /* 0x3F4A019F, 0x98CF38B6 */ +var _w4 = -Float64FromFloat64(0.00059518755745034) /* 0xBF4380CB, 0x8C0FE741 */ +var _w5 = float64(0.0008363399189962821) /* 0x3F4B67BA, 0x4CDAD5D1 */ +var _w6 = -Float64FromFloat64(0.0016309293409657527) /* 0xBF5AB89D, 0x0B9E43E4 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* spurious inexact if odd int */ + x = float64(2) * (x*float64(0.5) - Xfloor(tls, x*float64(0.5))) /* x mod 2.0 */ + n = int32(x * Float64FromFloat64(4)) + n = (n + int32(1)) / int32(2) + x -= float64(float32(n) * Float32FromFloat32(0.5)) + x *= _pi2 + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sin(tls, x, float64(0), 0) + case int32(1): + return X__cos(tls, x, float64(0)) + case int32(2): + return X__sin(tls, -x, float64(0), 0) + case int32(3): + return -X__cos(tls, x, float64(0)) + } + return r +} + +func X__lgamma_r(tls *TLS, x float64, signgamp uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + if ix >= uint32(0x7ff00000) { + return x * x + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(70))< float64(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlog(tls, _pi2/(t*x)) + } + /* purge off 1 and 2 */ + if (ix == uint32(0x3ff00000) || ix == uint32(0x40000000)) && uint32(*(*Tuint64_t)(unsafe.Pointer(bp))) == uint32(0) { + r = Float64FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlog(tls, x) + if ix >= uint32(0x3FE76944) { + y = float64(1) - x + i = 0 + } else { + if ix >= uint32(0x3FCDA661) { + y = x - (_tc - Float64FromFloat64(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = float64(0) + if ix >= uint32(0x3FFBB4C3) { /* [1.7316,2] */ + y = float64(2) - x + i = 0 + } else { + if ix >= uint32(0x3FF3B4C4) { /* [1.23,1.73] */ + y = x - _tc + i = int32(1) + } else { + y = x - float64(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a0 + z*(_a2+z*(_a4+z*(_a6+z*(_a8+z*_a10)))) + p2 = z * (_a1 + z*(_a3+z*(_a5+z*(_a7+z*(_a9+z*_a11))))) + p = y*p1 + p2 + r += p - float64(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t0 + w*(_t3+w*(_t6+w*(_t9+w*_t12))) /* parallel comp */ + p2 = _t1 + w*(_t4+w*(_t7+w*(_t10+w*_t13))) + p3 = _t2 + w*(_t5+w*(_t8+w*(_t11+w*_t14))) + p = z*p1 - (_tt - w*(p2+y*p3)) + r += _tf + p + case int32(2): + p1 = y * (_u0 + y*(_u1+y*(_u2+y*(_u3+y*(_u4+y*_u5))))) + p2 = float64(1) + y*(_v1+y*(_v2+y*(_v3+y*(_v4+y*_v5)))) + r += -Float64FromFloat64(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x40200000) { /* x < 8.0 */ + i = int32(x) + y = x - float64(i) + p = y * (_s0 + y*(_s1+y*(_s2+y*(_s3+y*(_s4+y*(_s5+y*_s6)))))) + q = float64(1) + y*(_r1+y*(_r2+y*(_r3+y*(_r4+y*(_r5+y*_r6))))) + r = float64(0.5)*y + p/q + z = float64(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + float64(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + float64(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + float64(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + float64(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + float64(2) /* FALLTHRU */ + r += Xlog(tls, z) + break + } + } else { + if ix < uint32(0x43900000) { /* 8.0 <= x < 2**58 */ + t = Xlog(tls, x) + z = float64(1) / x + y = z * z + w = _w0 + z*(_w1+y*(_w2+y*(_w3+y*(_w4+y*(_w5+y*_w6))))) + r = (x-float64(0.5))*(t-Float64FromFloat64(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlog(tls, x) - float64(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgamma_r(tls *TLS, x float64, signgamp uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, signgamp) +} + +func Xlgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +var _pi3 = float32(3.141592741) /* 0x40490fdb */ +var _a01 = float32(0.077215664089) /* 0x3d9e233f */ +var _a12 = float32(0.32246702909) /* 0x3ea51a66 */ +var _a21 = float32(0.067352302372) /* 0x3d89f001 */ +var _a31 = float32(0.020580807701) /* 0x3ca89915 */ +var _a41 = float32(0.0073855509982) /* 0x3bf2027e */ +var _a51 = float32(0.0028905137442) /* 0x3b3d6ec6 */ +var _a61 = float32(0.0011927076848) /* 0x3a9c54a1 */ +var _a71 = float32(0.00051006977446) /* 0x3a05b634 */ +var _a81 = float32(0.00022086278477) /* 0x39679767 */ +var _a91 = float32(0.00010801156895) /* 0x38e28445 */ +var _a101 = float32(2.52144564e-05) /* 0x37d383a2 */ +var _a111 = float32(4.4864096708e-05) /* 0x383c2c75 */ +var _tc1 = float32(1.4616321325) /* 0x3fbb16c3 */ +var _tf1 = float32(-Float64FromFloat64(0.12148628384)) /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +var _tt1 = float32(6.6971006518e-09) /* 0x31e61c52 */ +var _t01 = float32(0.48383611441) /* 0x3ef7b95e */ +var _t15 = float32(-Float64FromFloat64(0.14758771658)) /* 0xbe17213c */ +var _t21 = float32(0.064624942839) /* 0x3d845a15 */ +var _t31 = float32(-Float64FromFloat64(0.032788541168)) /* 0xbd064d47 */ +var _t41 = float32(0.017970675603) /* 0x3c93373d */ +var _t51 = float32(-Float64FromFloat64(0.010314224288)) /* 0xbc28fcfe */ +var _t61 = float32(0.0061005386524) /* 0x3bc7e707 */ +var _t71 = float32(-Float64FromFloat64(0.0036845202558)) /* 0xbb7177fe */ +var _t81 = float32(0.0022596477065) /* 0x3b141699 */ +var _t91 = float32(-Float64FromFloat64(0.0014034647029)) /* 0xbab7f476 */ +var _t101 = float32(0.00088108185446) /* 0x3a66f867 */ +var _t111 = float32(-Float64FromFloat64(0.00053859531181)) /* 0xba0d3085 */ +var _t121 = float32(0.00031563205994) /* 0x39a57b6b */ +var _t131 = float32(-Float64FromFloat64(0.00031275415677)) /* 0xb9a3f927 */ +var _t141 = float32(0.00033552918467) /* 0x39afe9f7 */ +var _u07 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _u11 = float32(0.63282704353) /* 0x3f2200f4 */ +var _u21 = float32(1.4549225569) /* 0x3fba3ae7 */ +var _u31 = float32(0.97771751881) /* 0x3f7a4bb2 */ +var _u41 = float32(0.22896373272) /* 0x3e6a7578 */ +var _u51 = float32(0.013381091878) /* 0x3c5b3c5e */ +var _v11 = float32(2.4559779167) /* 0x401d2ebe */ +var _v21 = float32(2.1284897327) /* 0x4008392d */ +var _v31 = float32(0.76928514242) /* 0x3f44efdf */ +var _v41 = float32(0.10422264785) /* 0x3dd572af */ +var _v51 = float32(0.0032170924824) /* 0x3b52d5db */ +var _s06 = float32(-Float64FromFloat64(0.077215664089)) /* 0xbd9e233f */ +var _s11 = float32(0.21498242021) /* 0x3e5c245a */ +var _s21 = float32(0.32577878237) /* 0x3ea6cc7a */ +var _s31 = float32(0.14635047317) /* 0x3e15dce6 */ +var _s41 = float32(0.026642270386) /* 0x3cda40e4 */ +var _s51 = float32(0.0018402845599) /* 0x3af135b4 */ +var _s61 = float32(3.1947532989e-05) /* 0x3805ff67 */ +var _r11 = float32(1.3920053244) /* 0x3fb22d3b */ +var _r21 = float32(0.72193557024) /* 0x3f38d0c5 */ +var _r31 = float32(0.17193385959) /* 0x3e300f6e */ +var _r41 = float32(0.018645919859) /* 0x3c98bf54 */ +var _r51 = float32(0.00077794247773) /* 0x3a4beed6 */ +var _r61 = float32(7.3266842264e-06) /* 0x36f5d7bd */ +var _w01 = float32(0.41893854737) /* 0x3ed67f1d */ +var _w11 = float32(0.083333335817) /* 0x3daaaaab */ +var _w21 = float32(-Float64FromFloat64(0.002777777845)) /* 0xbb360b61 */ +var _w31 = float32(0.00079365057172) /* 0x3a500cfd */ +var _w41 = float32(-Float64FromFloat64(0.00059518753551)) /* 0xba1c065c */ +var _w51 = float32(0.00083633989561) /* 0x3a5b3dd2 */ +var _w61 = float32(-Float64FromFloat64(0.0016309292987)) /* 0xbad5c4e8 */ + +// C documentation +// +// /* sin(pi*x) assuming x > 2^-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sin_pi1(tls *TLS, x float32) (r float32) { + var n int32 + var y Tdouble_t + _, _ = n, y + /* spurious inexact if odd int */ + x = Float32FromInt32(2) * (x*Float32FromFloat32(0.5) - Xfloorf(tls, x*Float32FromFloat32(0.5))) /* x mod 2.0 */ + n = int32(x * Float32FromInt32(4)) + n = (n + int32(1)) / int32(2) + y = float64(x - float32(n)*Float32FromFloat32(0.5)) + y *= float64(3.141592653589793) + switch n { + default: /* case 4: */ + fallthrough + case 0: + return X__sindf(tls, y) + case int32(1): + return X__cosdf(tls, y) + case int32(2): + return X__sindf(tls, -y) + case int32(3): + return -X__cosdf(tls, y) + } + return r +} + +func X__lgammaf_r(tls *TLS, x float32, signgamp uintptr) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, sign int32 + var ix Tuint32_t + var nadj, p, p1, p2, p3, q, r, t, w, y, z float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, ix, nadj, p, p1, p2, p3, q, r, sign, t, w, y, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + /* purge off +-inf, NaN, +-0, tiny and negative arguments */ + *(*int32)(unsafe.Pointer(signgamp)) = int32(1) + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) & uint32(0x7fffffff) + if ix >= uint32(0x7f800000) { + return x * x + } + if ix < uint32(0x35000000) { /* |x| < 2**-21, return -log(|x|) */ + if sign != 0 { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + x = -x + } + return -Xlogf(tls, x) + } + if sign != 0 { + x = -x + t = _sin_pi1(tls, x) + if t == Float32FromFloat32(0) { /* -integer */ + return Float32FromFloat32(1) / (x - x) + } + if t > Float32FromFloat32(0) { + *(*int32)(unsafe.Pointer(signgamp)) = -int32(1) + } else { + t = -t + } + nadj = Xlogf(tls, _pi3/(t*x)) + } + /* purge off 1 and 2 */ + if ix == uint32(0x3f800000) || ix == uint32(0x40000000) { + r = Float32FromInt32(0) + } else { + if ix < uint32(0x40000000) { + if ix <= uint32(0x3f666666) { /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -Xlogf(tls, x) + if ix >= uint32(0x3f3b4a20) { + y = Float32FromFloat32(1) - x + i = 0 + } else { + if ix >= uint32(0x3e6d3308) { + y = x - (_tc1 - Float32FromFloat32(1)) + i = int32(1) + } else { + y = x + i = int32(2) + } + } + } else { + r = Float32FromFloat32(0) + if ix >= uint32(0x3fdda618) { /* [1.7316,2] */ + y = Float32FromFloat32(2) - x + i = 0 + } else { + if ix >= uint32(0x3F9da620) { /* [1.23,1.73] */ + y = x - _tc1 + i = int32(1) + } else { + y = x - Float32FromFloat32(1) + i = int32(2) + } + } + } + switch i { + case 0: + z = y * y + p1 = _a01 + z*(_a21+z*(_a41+z*(_a61+z*(_a81+z*_a101)))) + p2 = z * (_a12 + z*(_a31+z*(_a51+z*(_a71+z*(_a91+z*_a111))))) + p = y*p1 + p2 + r += p - Float32FromFloat32(0.5)*y + case int32(1): + z = y * y + w = z * y + p1 = _t01 + w*(_t31+w*(_t61+w*(_t91+w*_t121))) /* parallel comp */ + p2 = _t15 + w*(_t41+w*(_t71+w*(_t101+w*_t131))) + p3 = _t21 + w*(_t51+w*(_t81+w*(_t111+w*_t141))) + p = z*p1 - (_tt1 - w*(p2+y*p3)) + r += _tf1 + p + case int32(2): + p1 = y * (_u07 + y*(_u11+y*(_u21+y*(_u31+y*(_u41+y*_u51))))) + p2 = Float32FromFloat32(1) + y*(_v11+y*(_v21+y*(_v31+y*(_v41+y*_v51)))) + r += -Float32FromFloat32(0.5)*y + p1/p2 + } + } else { + if ix < uint32(0x41000000) { /* x < 8.0 */ + i = int32(x) + y = x - float32(i) + p = y * (_s06 + y*(_s11+y*(_s21+y*(_s31+y*(_s41+y*(_s51+y*_s61)))))) + q = Float32FromFloat32(1) + y*(_r11+y*(_r21+y*(_r31+y*(_r41+y*(_r51+y*_r61))))) + r = Float32FromFloat32(0.5)*y + p/q + z = Float32FromFloat32(1) /* lgamma(1+s) = log(s) + lgamma(s) */ + switch i { + case int32(7): + z *= y + Float32FromFloat32(6) /* FALLTHRU */ + fallthrough + case int32(6): + z *= y + Float32FromFloat32(5) /* FALLTHRU */ + fallthrough + case int32(5): + z *= y + Float32FromFloat32(4) /* FALLTHRU */ + fallthrough + case int32(4): + z *= y + Float32FromFloat32(3) /* FALLTHRU */ + fallthrough + case int32(3): + z *= y + Float32FromFloat32(2) /* FALLTHRU */ + r += Xlogf(tls, z) + break + } + } else { + if ix < uint32(0x5c800000) { /* 8.0 <= x < 2**58 */ + t = Xlogf(tls, x) + z = Float32FromFloat32(1) / x + y = z * z + w = _w01 + z*(_w11+y*(_w21+y*(_w31+y*(_w41+y*(_w51+y*_w61))))) + r = (x-Float32FromFloat32(0.5))*(t-Float32FromFloat32(1)) + w + } else { /* 2**58 <= x <= inf */ + r = x * (Xlogf(tls, x) - Float32FromFloat32(1)) + } + } + } + } + if sign != 0 { + r = nadj - r + } + return r +} + +func Xlgammaf_r(tls *TLS, x float32, signgamp uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v signgamp=%v, (%v:)", tls, x, signgamp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammaf_r(tls, x, signgamp) +} + +func X__lgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgamma_r(tls, x, sg) +} + +func Xlgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, uintptr(unsafe.Pointer(&Xsigngam))) +} + +func Xlgammal_r(tls *TLS, x float64, sg uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v sg=%v, (%v:)", tls, x, sg, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lgammal_r(tls, x, sg) +} + +/* uses LLONG_MAX > 2^53, see comments in lrint.c */ + +func Xllrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LLONG_MAX > 2^24, see comments in lrint.c */ + +func Xllrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xllrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xllrint(tls, x) +} + +func Xllround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xllroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xllroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +const LOG_POLY1_ORDER = 12 +const LOG_POLY_ORDER = 6 +const LOG_TABLE_BITS = 7 +const N4 = 128 +const OFF = 4604367669032910848 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top16(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, r, r2, r3, rhi, rlo, w, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, r, r2, r3, rhi, rlo, tmp, top, w, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top16(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.064697265625) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.0625) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + r2 = r * r + r3 = r * r2 + y1 = r3 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 1*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 2*8)) + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 3*8)) + r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 5*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 6*8))+r3*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 7*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 8*8))+r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 9*8))+r3**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56 + 10*8))))) + /* Worst-case error is around 0.507 ULP. */ + w = r * float64(1.34217728e+08) + rhi = r + w - w + rlo = r - rhi + w = rhi * rhi * *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) /* B[0] == -0.5. */ + hi = r + w + lo = r - hi + w + lo += *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 56)) * rlo * (rhi + r) + y1 += lo + y1 += hi + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = Tuint64_t(ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-5: + 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma) + Worst case error if |y| > 0x1p-4: + 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */ + y1 = lo + r2**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16)) + r*r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 1*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 2*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 3*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log_data)) + 16 + 4*8)))) + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +var _ivln10hi = float64(0.4342944818781689) /* 0x3fdbcb7b, 0x15200000 */ +var _ivln10lo = float64(2.5082946711645275e-11) /* 0x3dbb9438, 0xca9aadd5 */ +var _log10_2hi = float64(0.30102999566361177) /* 0x3FD34413, 0x509F6000 */ +var _log10_2lo = float64(3.694239077158931e-13) /* 0x3D59FEF3, 0x11F12B36 */ +var _Lg1 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg2 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg3 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg4 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg5 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg6 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg7 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog10(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, val_hi, val_lo, w, y, z Tdouble_t + var hx Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, hx, k, lo, s, t1, t2, val_hi, val_lo, w, y, z + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = 0 + if hx < uint32(0x00100000) || hx>>int32(31) != 0 { + if *(*Tuint64_t)(unsafe.Pointer(bp))<>int32(31) != 0 { + return (x - x) / float64(0) + } /* log(-#) = NaN */ + /* subnormal number, scale x up */ + k -= int32(54) + x *= float64(1.8014398509481984e+16) + *(*float64)(unsafe.Pointer(bp)) = x + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + } else { + if hx >= uint32(0x7ff00000) { + return x + } else { + if hx == uint32(0x3ff00000) && *(*Tuint64_t)(unsafe.Pointer(bp))<>Int32FromInt32(20)) - int32(0x3ff) + hx = hx&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hx)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, dk, f, hfsq, hi, lo, s, t1, t2, w, z Tfloat_t + var ix Tuint32_t + var k int32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = R, dk, f, hfsq, hi, ix, k, lo, s, t1, t2, w, z + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = 0 + if ix < uint32(0x00800000) || ix>>int32(31) != 0 { /* x < 2**-126 */ + if ix<>int32(31) != 0 { + return (x - x) / Float32FromFloat32(0) + } /* log(-#) = NaN */ + /* subnormal number, scale up x */ + k -= int32(25) + x *= Float32FromFloat32(3.3554432e+07) + *(*float32)(unsafe.Pointer(bp)) = x + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + } else { + if ix >= uint32(0x7f800000) { + return x + } else { + if ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + } + } + /* reduce x into [sqrt(2)/2, sqrt(2)] */ + ix += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k += int32(ix>>Int32FromInt32(23)) - int32(0x7f) + ix = ix&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = ix + x = *(*float32)(unsafe.Pointer(bp)) + f = float64(x - Float32FromFloat32(1)) + s = f / (Float64FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (float64(_Lg21) + w*float64(_Lg41)) + t2 = z * (float64(_Lg11) + w*float64(_Lg31)) + R = t2 + t1 + hfsq = Float64FromFloat32(0.5) * f * f + hi = f - hfsq + *(*float32)(unsafe.Pointer(bp)) = float32(hi) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0xfffff000) + hi = float64(*(*float32)(unsafe.Pointer(bp))) + lo = f - hi - hfsq + s*(hfsq+R) + dk = float64(k) + return float32(dk*float64(_log10_2lo1) + (lo+hi)*float64(_ivln10lo1) + lo*float64(_ivln10hi1) + hi*float64(_ivln10hi1) + dk*float64(_log10_2hi1)) +} + +func Xlog10l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog10(tls, x) +} + +var _ln2_hi2 = float64(0.6931471803691238) /* 3fe62e42 fee00000 */ +var _ln2_lo2 = float64(1.9082149292705877e-10) /* 3dea39ef 35793c76 */ +var _Lg12 = float64(0.6666666666666735) /* 3FE55555 55555593 */ +var _Lg22 = float64(0.3999999999940942) /* 3FD99999 9997FA04 */ +var _Lg32 = float64(0.2857142874366239) /* 3FD24924 94229359 */ +var _Lg42 = float64(0.22222198432149784) /* 3FCC71C5 1D8E78AF */ +var _Lg51 = float64(0.1818357216161805) /* 3FC74664 96CB03DE */ +var _Lg61 = float64(0.15313837699209373) /* 3FC39A09 D078C69F */ +var _Lg71 = float64(0.14798198605116586) /* 3FC2F112 DF3E5244 */ + +func Xlog1p(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tdouble_t + var hu, hx Tuint32_t + var k int32 + var y float32 + var y1, y2, v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, hu, hx, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + hx = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + k = int32(1) + if hx < uint32(0x3fda827a) || hx>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if hx >= uint32(0xbff00000) { /* x <= -1.0 */ + if x3 == float64(-Int32FromInt32(1)) { + return x3 / float64(0) + } /* log1p(-1) = -inf */ + return (x3 - x3) / float64(0) /* log1p(x<-1) = NaN */ + } + if hx<= uint32(0x7ff00000) { + return x3 + } + } + if k != 0 { + *(*float64)(unsafe.Pointer(bp)) = Float64FromInt32(1) + x3 + hu = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + hu += uint32(Int32FromInt32(0x3ff00000) - Int32FromInt32(0x3fe6a09e)) + k = int32(hu>>Int32FromInt32(20)) - int32(0x3ff) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(54) { + if k >= int32(2) { + v1 = Float64FromInt32(1) - (*(*float64)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float64)(unsafe.Pointer(bp)) - Float64FromInt32(1)) + } + c = v1 + c /= *(*float64)(unsafe.Pointer(bp)) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + hu = hu&uint32(0x000fffff) + uint32(0x3fe6a09e) + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(hu)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var R, c, dk, f, hfsq, s, t1, t2, w, z Tfloat_t + var iu, ix Tuint32_t + var k int32 + var y, v1 float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = R, c, dk, f, hfsq, iu, ix, k, s, t1, t2, w, y, y1, y2, z, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + ix = *(*Tuint32_t)(unsafe.Pointer(bp)) + k = int32(1) + if ix < uint32(0x3ed413d0) || ix>>int32(31) != 0 { /* 1+x < sqrt(2)+ */ + if ix >= uint32(0xbf800000) { /* x <= -1.0 */ + if x3 == float32(-Int32FromInt32(1)) { + return x3 / Float32FromFloat32(0) + } /* log1p(-1)=+inf */ + return (x3 - x3) / Float32FromFloat32(0) /* log1p(x<-1)=NaN */ + } + if ix<= uint32(0x7f800000) { + return x3 + } + } + if k != 0 { + *(*float32)(unsafe.Pointer(bp)) = Float32FromInt32(1) + x3 + iu = *(*Tuint32_t)(unsafe.Pointer(bp)) + iu += uint32(Int32FromInt32(0x3f800000) - Int32FromInt32(0x3f3504f3)) + k = int32(iu>>Int32FromInt32(23)) - int32(0x7f) + /* correction term ~ log(1+x)-log(u), avoid underflow in c/u */ + if k < int32(25) { + if k >= int32(2) { + v1 = Float32FromInt32(1) - (*(*float32)(unsafe.Pointer(bp)) - x3) + } else { + v1 = x3 - (*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + c = float64(v1) + c /= float64(*(*float32)(unsafe.Pointer(bp))) + } else { + c = Float64FromInt32(0) + } + /* reduce u into [sqrt(2)/2, sqrt(2)] */ + iu = iu&uint32(0x007fffff) + uint32(0x3f3504f3) + *(*Tuint32_t)(unsafe.Pointer(bp)) = iu + f = float64(*(*float32)(unsafe.Pointer(bp)) - Float32FromInt32(1)) + } + s = f / (Float64FromFloat32(2) + f) + z = s * s + w = z * z + t1 = w * (float64(_Lg23) + w*float64(_Lg43)) + t2 = z * (float64(_Lg13) + w*float64(_Lg33)) + R = t2 + t1 + hfsq = Float64FromFloat32(0.5) * f * f + dk = float64(k) + return float32(s*(hfsq+R) + (dk*float64(_ln2_lo3) + c) - hfsq + f + dk*float64(_ln2_hi3)) +} + +func Xlog1pl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog1p(tls, x) +} + +const LOG2_POLY1_ORDER = 11 +const LOG2_POLY_ORDER = 7 +const LOG2_TABLE_BITS = 6 +const N5 = 64 + +// C documentation +// +// /* Top 16 bits of a double. */ +func _top161(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(48)) +} + +func Xlog2(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var hi, invc, kd, lo, logc, p, r, r2, r4, t1, t2, t3, y1, z Tdouble_t + var i, k int32 + var ix, iz, tmp Tuint64_t + var top Tuint32_t + var y, v1, v10, v2, v3, v4, v6, v8, v9 float64 + var v5 bool + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = hi, i, invc, ix, iz, k, kd, lo, logc, p, r, r2, r4, t1, t2, t3, tmp, top, y, y1, z, v1, v10, v2, v3, v4, v5, v6, v8, v9 + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = _top161(tls, x1) + v1 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + v2 = Float64FromFloat64(1) + Float64FromFloat64(0.044274330139160156) + v3 = Float64FromFloat64(1) - Float64FromFloat64(0.04239702224731445) + if ix-*(*Tuint64_t)(unsafe.Pointer(&v1)) < *(*Tuint64_t)(unsafe.Pointer(&v2))-*(*Tuint64_t)(unsafe.Pointer(&v3)) { + /* Handle close to 1.0 inputs separately. */ + /* Fix sign of zero with downward rounding when x==1. */ + if v5 = Bool(int32(WANT_ROUNDING) != 0); v5 { + v4 = float64(1) + } + if v5 && ix == *(*Tuint64_t)(unsafe.Pointer(&v4)) { + return Float64FromInt32(0) + } + r = x1 - float64(1) + hi = r * X__log2_data.Finvln2hi + lo = r*X__log2_data.Finvln2lo + float64(X__builtin_fma(tls, r, X__log2_data.Finvln2hi, -hi)) + r2 = r * r /* rounding error: 0x1p-62. */ + r4 = r2 * r2 + /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */ + p = r2 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 1*8))) + y1 = hi + p + lo += hi - y1 + p + lo += r4 * (*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 2*8)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 3*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 5*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 6*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 7*8))+r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 8*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 64 + 9*8))))) + y1 += lo + y = y1 + v6 = y + goto _7 + _7: + return v6 + } + if top-uint32(0x0010) >= uint32(Int32FromInt32(0x7ff0)-Int32FromInt32(0x0010)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return X__math_divzero(tls, uint32(1)) + } + v8 = float64(X__builtin_inff(tls)) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v8)) { /* log(inf) == inf. */ + return x1 + } + if top&uint32(0x8000) != 0 || top&uint32(0x7ff0) == uint32(0x7ff0) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v9 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v9)) + ix = Tuint64_t(ix - Uint64FromUint64(52)<> (Int32FromInt32(52) - Int32FromInt32(LOG2_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)< 0x1p-4: 0.547 ULP (0.550 ULP without fma). + ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */ + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16)) + r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 1*8)) + r2*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 2*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 3*8))) + r4*(*(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 4*8))+r**(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2_data)) + 16 + 5*8))) + y1 = lo + r2*p + hi + y = y1 + v10 = y + goto _11 +_11: + return v10 +} + +type Tlog2_data = struct { + Finvln2hi float64 + Finvln2lo float64 + Fpoly [6]float64 + Fpoly1 [10]float64 + Ftab [64]struct { + Finvc float64 + Flogc float64 + } +} + +const LOG2F_POLY_ORDER = 4 +const LOG2F_TABLE_BITS = 4 +const N6 = 16 +const OFF1 = 1060306944 + +/* +LOG2F_TABLE_BITS = 4 +LOG2F_POLY_ORDER = 4 + +ULP error: 0.752 (nearest rounding.) +Relative error: 1.9 * 2^-26 (before rounding.) +*/ + +func Xlog2f(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, k int32 + var invc, logc, p, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp, top Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, p, r, r2, tmp, top, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log2(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOG2F_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256))*r2 + y1 + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__log2f_data)) + 256 + 3*8))*r + y0 + y1 = y1*r2 + p + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlog2f_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fpoly [4]float64 +} + +func Xlog2l(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog2(tls, x) +} + +const N7 = 128 + +type Tlog_data = struct { + Fln2hi float64 + Fln2lo float64 + Fpoly [5]float64 + Fpoly1 [11]float64 + Ftab [128]struct { + Finvc float64 + Flogc float64 + } +} + +/* +special cases: + logb(+-0) = -inf, and raise divbyzero + logb(+-inf) = +inf + logb(nan) = nan +*/ + +func Xlogb(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _ = v1 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + return x * x + } + if x == Float32FromInt32(0) { + return float32(-Int32FromInt32(1)) / (x * x) + } + return float32(Xilogbf(tls, x)) +} + +func Xlogbl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _ = v1 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if !(BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< %v", r1) }() + } + var i, k int32 + var invc, logc, r, r2, y0, y1, z Tdouble_t + var ix, iz, tmp Tuint32_t + var y, v1, v2 float32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, invc, ix, iz, k, logc, r, r2, tmp, y, y0, y1, z, v1, v2 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + /* Fix sign of zero with downward rounding when x==1. */ + if Bool(int32(WANT_ROUNDING) != 0) && ix == uint32(0x3f800000) { + return Float32FromInt32(0) + } + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return X__math_divzerof(tls, uint32(1)) + } + if ix == uint32(0x7f800000) { /* log(inf) == inf. */ + return x1 + } + if ix&uint32(0x80000000) != 0 || ix*uint32(2) >= uint32(0xff000000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 2^k z; where z is in range [OFF,2*OFF] and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint32(OFF1) + i = int32(tmp >> (Int32FromInt32(23) - Int32FromInt32(LOGF_TABLE_BITS)) % uint32(Int32FromInt32(1)<> int32(23) /* arithmetic shift */ + iz = ix - tmp&uint32(0xff800000) + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k)*X__logf_data.Fln2 + /* Pipelined polynomial evaluation to approximate log1p(r). */ + r2 = r * r + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 1*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264 + 2*8)) + y1 = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__logf_data)) + 264))*r2 + y1 + y1 = y1*r2 + (y0 + r) + y = float32(y1) + v2 = y + goto _3 +_3: + return v2 +} + +type Tlogf_data = struct { + Ftab [16]struct { + Finvc float64 + Flogc float64 + } + Fln2 float64 + Fpoly [3]float64 +} + +func Xlogl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlog(tls, x) +} + +/* +If the result cannot be represented (overflow, nan), then +lrint raises the invalid exception. + +Otherwise if the input was not an integer then the inexact +exception is raised. + +C99 is a bit vague about whether inexact exception is +allowed to be raised when invalid is raised. +(F.9 explicitly allows spurious inexact exceptions, F.9.6.5 +does not make it clear if that rule applies to lrint, but +IEEE 754r 7.8 seems to forbid spurious inexact exception in +the ineger conversion functions) + +So we try to make sure that no spurious inexact exception is +raised in case of an overflow. + +If the bit size of long > precision of double, then there +cannot be inexact rounding in case the result overflows, +otherwise LONG_MAX and LONG_MIN can be represented exactly +as a double. +*/ + +func Xlrint(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrint(tls, x)) +} + +/* uses LONG_MAX > 2^24, see comments in lrint.c */ + +func Xlrintf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xrintf(tls, x)) +} + +func Xlrintl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlrint(tls, x) +} + +func Xlround(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xround(tls, x)) +} + +func Xlroundf(tls *TLS, x float32) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundf(tls, x)) +} + +func Xlroundl(tls *TLS, x float64) (r int64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(Xroundl(tls, x)) +} + +func Xmodf(tls *TLS, x float64, iptr uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint64_t + var p1, p2, p3 uintptr + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, mask, p1, p2, p3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + /* no fractional part */ + if e >= int32(52) { + *(*float64)(unsafe.Pointer(iptr)) = x + if e == int32(0x400) && *(*Tuint64_t)(unsafe.Pointer(bp))<> Int32FromInt32(12) >> e) + if *(*Tuint64_t)(unsafe.Pointer(bp))&mask == uint64(0) { + *(*float64)(unsafe.Pointer(iptr)) = x + p3 = bp + *(*Tuint64_t)(unsafe.Pointer(p3)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p3)) & (Uint64FromUint64(1) << Int32FromInt32(63))) + return *(*float64)(unsafe.Pointer(bp)) + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^mask + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return x - *(*float64)(unsafe.Pointer(bp)) +} + +func Xmodff(tls *TLS, x float32, iptr uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var mask Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _ = e, mask + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + /* no fractional part */ + if e >= int32(23) { + *(*float32)(unsafe.Pointer(iptr)) = x + if e == int32(0x80) && *(*Tuint32_t)(unsafe.Pointer(bp))<> e) + if *(*Tuint32_t)(unsafe.Pointer(bp))&mask == uint32(0) { + *(*float32)(unsafe.Pointer(iptr)) = x + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x80000000) + return *(*float32)(unsafe.Pointer(bp)) + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^mask + *(*float32)(unsafe.Pointer(iptr)) = *(*float32)(unsafe.Pointer(bp)) + return x - *(*float32)(unsafe.Pointer(bp)) +} + +func Xmodfl(tls *TLS, x float64, iptr uintptr) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x=%v iptr=%v, (%v:)", tls, x, iptr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r float64 + var _ /* d at bp+0 */ float64 + _ = r + r = Xmodf(tls, x, bp) + *(*float64)(unsafe.Pointer(iptr)) = *(*float64)(unsafe.Pointer(bp)) + return r +} + +func Xnan(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnanf(tls *TLS, s uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__builtin_nanf(tls, __ccgo_ts) +} + +func Xnanl(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(X__builtin_nanf(tls, __ccgo_ts)) +} + +func Xnextafter(tls *TLS, x3 float64, y3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ax, ay Tuint64_t + var e int32 + var y float32 + var y1, y2 float64 + var v1, v3 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y3 + *(*float64)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)< ay || (*(*Tuint64_t)(unsafe.Pointer(bp + 8))^*(*Tuint64_t)(unsafe.Pointer(bp + 16)))&(Uint64FromUint64(1)<> int32(52) & uint64(0x7ff)) + /* raise overflow if ux.f is infinite and x is finite */ + if e == int32(0x7ff) { + if uint64(8) == uint64(4) { + y = float32(x3 + x3) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + x3 + } else { + y2 = x3 + x3 + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == 0 { + if uint64(8) == uint64(4) { + y = float32(x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8))) + } else { + if uint64(8) == uint64(8) { + y1 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } else { + y2 = x3*x3 + *(*float64)(unsafe.Pointer(bp + 8))**(*float64)(unsafe.Pointer(bp + 8)) + } + } + } + return *(*float64)(unsafe.Pointer(bp + 8)) +} + +func Xnextafterf(tls *TLS, x3 float32, y3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ax, ay, e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v3 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _ = ax, ay, e, y, y1, y2, v1, v3, v5 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = y3 + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x3 + y3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4)) == *(*Tuint32_t)(unsafe.Pointer(bp + 8)) { + return y3 + } + ax = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7fffffff) + ay = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) & uint32(0x7fffffff) + if ax == uint32(0) { + if ay == uint32(0) { + return y3 + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = *(*Tuint32_t)(unsafe.Pointer(bp + 8))&uint32(0x80000000) | uint32(1) + } else { + if ax > ay || (*(*Tuint32_t)(unsafe.Pointer(bp + 4))^*(*Tuint32_t)(unsafe.Pointer(bp + 8)))&uint32(0x80000000) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 4))++ + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 4))**(*float32)(unsafe.Pointer(bp + 4))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 4)) +} + +func Xnextafterl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttoward(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafter(tls, x, y) +} + +func Xnexttowardf(tls *TLS, x3 float32, y3 float64) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v y3=%v, (%v:)", tls, x3, y3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var e Tuint32_t + var y float32 + var y1, y2 float64 + var v1, v10, v8 uint32 + var v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* __u at bp+8 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+16 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _ = e, y, y1, y2, v1, v10, v3, v5, v6, v8 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 16)) = x3 + *(*float32)(unsafe.Pointer(bp)) = x3 + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float64)(unsafe.Pointer(bp + 8)) = y3 + v3 = *(*uint64)(unsafe.Pointer(bp + 8)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(63)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16)) |= uint32(0x80000000) + } + } else { + if float64(x3) < y3 { + *(*float32)(unsafe.Pointer(bp)) = x3 + v8 = *(*uint32)(unsafe.Pointer(bp)) + goto _9 + _9: + if int32(v8>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } + } else { + *(*float32)(unsafe.Pointer(bp)) = x3 + v10 = *(*uint32)(unsafe.Pointer(bp)) + goto _11 + _11: + if int32(v10>>Int32FromInt32(31)) != 0 { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))++ + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 16))-- + } + } + } + e = *(*Tuint32_t)(unsafe.Pointer(bp + 16)) & uint32(0x7f800000) + /* raise overflow if ux.f is infinite and x is finite */ + if e == uint32(0x7f800000) { + if uint64(4) == uint64(4) { + y = x3 + x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + x3) + } else { + y2 = float64(x3 + x3) + } + } + } + /* raise underflow if ux.f is subnormal or zero */ + if e == uint32(0) { + if uint64(4) == uint64(4) { + y = x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16)) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } else { + y2 = float64(x3*x3 + *(*float32)(unsafe.Pointer(bp + 16))**(*float32)(unsafe.Pointer(bp + 16))) + } + } + } + return *(*float32)(unsafe.Pointer(bp + 16)) +} + +func Xnexttowardl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnextafterl(tls, x, y) +} + +const OFF2 = 4604531861337669632 +const POW_LOG_POLY_ORDER = 8 +const POW_LOG_TABLE_BITS = 7 +const SIGN_BIAS = 262144 + +/* +Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53) +relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma) +ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma) +*/ + +// C documentation +// +// /* Top 12 bits of a double (sign and exponent bits). */ +func _top124(tls *TLS, x float64) (r Tuint32_t) { + return uint32(*(*Tuint64_t)(unsafe.Pointer(&x)) >> int32(52)) +} + +// C documentation +// +// /* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about +// additional 15 bits precision. IX is the bit representation of x, but +// normalized in the subnormal range using the sign bit for the exponent. */ +func _log_inline(tls *TLS, ix Tuint64_t, tail uintptr) (r1 Tdouble_t) { + var ar, ar2, ar3, hi, invc, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, y, z Tdouble_t + var i, k int32 + var iz, tmp Tuint64_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ar, ar2, ar3, hi, i, invc, iz, k, kd, lo, lo1, lo2, lo3, lo4, logc, logctail, p, r, t1, t2, tmp, y, z + /* x = 2^k z; where z is in range [OFF,2*OFF) and exact. + The range is split into N subintervals. + The ith subinterval contains z and c is near its center. */ + tmp = ix - uint64(OFF2) + i = int32(tmp >> (Int32FromInt32(52) - Int32FromInt32(POW_LOG_TABLE_BITS)) % uint64(Int32FromInt32(1)<> int32(52)) /* arithmetic shift */ + iz = uint64(ix - tmp&(Uint64FromUint64(0xfff)< 0, the exponent of scale might have overflowed by <= 460. */ + sbits = Tuint64_t(sbits - Uint64FromUint64(1009)<= _top124(tls, float64(512))-_top124(tls, float64(5.551115123125783e-17)) { + if abstop-_top124(tls, float64(5.551115123125783e-17)) >= uint32(0x80000000) { + /* Avoid spurious underflow for tiny x. */ + /* Note: 0 is common input. */ + one = float64(1) + x1 + if sign_bias != 0 { + v1 = -one + } else { + v1 = one + } + return v1 + } + if abstop >= _top124(tls, float64(1024)) { + /* Note: inf and nan are already handled. */ + v2 = x1 + if *(*Tuint64_t)(unsafe.Pointer(&v2))>>int32(63) != 0 { + return X__math_uflow(tls, sign_bias) + } else { + return X__math_oflow(tls, sign_bias) + } + } + /* Large x is special cased below. */ + abstop = uint32(0) + } + /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */ + /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */ + z = X__exp_data.Finvln2N * x1 + /* z - kd is in [-1, 1] in non-nearest rounding modes. */ + y = z + X__exp_data.Fshift + v3 = y + goto _4 +_4: + kd = v3 + v5 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v5)) + kd -= X__exp_data.Fshift + r = x1 + kd*X__exp_data.Fnegln2hiN + kd*X__exp_data.Fnegln2loN + /* The code assumes 2^-200 < |xtail| < 2^-8/N. */ + r += xtail + /* 2^(k/N) ~= scale * (1 + tail). */ + idx = uint64(2) * (ki % uint64(Int32FromInt32(1)< 2^-200 and scale > 2^-739, so there + is no spurious underflow here even without fma. */ + y = scale + scale*tmp + v7 = y + goto _8 +_8: + return v7 +} + +// C documentation +// +// /* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is +// the bit representation of a non-zero finite floating-point value. */ +func _checkint(tls *TLS, iy Tuint64_t) (r int32) { + var e int32 + _ = e + e = int32(iy >> int32(52) & uint64(0x7ff)) + if e < int32(0x3ff) { + return 0 + } + if e > Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return int32(2) + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)-uint64(1)) != 0 { + return 0 + } + if iy&(uint64(1)<<(Int32FromInt32(0x3ff)+Int32FromInt32(52)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +// C documentation +// +// /* Returns 1 if input is the bit representation of 0, infinity or nan. */ +func _zeroinfnan(tls *TLS, i Tuint64_t) (r int32) { + var v1 float64 + _ = v1 + v1 = float64(X__builtin_inff(tls)) + return BoolInt32(uint64(2)*i-uint64(1) >= uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v1))-uint64(1)) +} + +func Xpow(tls *TLS, x1 float64, y1 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ehi, elo, hi, x2 Tdouble_t + var ix, iy Tuint64_t + var sign_bias, topx, topy Tuint32_t + var y, v1, v10, v11, v12, v13, v14, v15, v2, v3, v5, v6, v7, v8 float64 + var yint int32 + var v4 bool + var _ /* lo at bp+0 */ Tdouble_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = ehi, elo, hi, ix, iy, sign_bias, topx, topy, x2, y, yint, v1, v10, v11, v12, v13, v14, v15, v2, v3, v4, v5, v6, v7, v8 + sign_bias = uint32(0) + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint64_t)(unsafe.Pointer(&y1)) + topx = _top124(tls, x1) + topy = _top124(tls, y1) + if topx-uint32(0x001) >= uint32(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) || topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0 + and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */ + /* Special cases: (x < 0x1p-126 or inf or nan) or + (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */ + if _zeroinfnan(tls, iy) != 0 { + if uint64(2)*iy == uint64(0) { + return float64(1) + } + v1 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v1)) { + return float64(1) + } + v2 = float64(X__builtin_inff(tls)) + if v4 = uint64(2)*ix > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v2)); !v4 { + v3 = float64(X__builtin_inff(tls)) + } + if v4 || uint64(2)*iy > uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v3)) { + return x1 + y1 + } + v5 = float64(1) + if uint64(2)*ix == uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v5)) { + return float64(1) + } + v6 = float64(1) + if BoolInt32(uint64(2)*ix < uint64(2)**(*Tuint64_t)(unsafe.Pointer(&v6))) == BoolInt32(!(iy>>Int32FromInt32(63) != 0)) { + return float64(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan(tls, ix) != 0 { + x2 = x1 * x1 + if ix>>int32(63) != 0 && _checkint(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy>>int32(63) != 0 { + y = Float64FromInt32(1) / x2 + v8 = y + goto _9 + _9: + v7 = v8 + } else { + v7 = x2 + } + return v7 + } + /* Here x and y are non-zero finite. */ + if ix>>int32(63) != 0 { + /* Finite x < 0. */ + yint = _checkint(tls, iy) + if yint == 0 { + return X__math_invalid(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(0x800) << Int32FromInt32(EXP_TABLE_BITS)) + } + ix &= uint64(0x7fffffffffffffff) + topx &= uint32(0x7ff) + } + if topy&uint32(0x7ff)-uint32(0x3be) >= uint32(Int32FromInt32(0x43e)-Int32FromInt32(0x3be)) { + /* Note: sign_bias == 0 here because y is not odd. */ + v10 = float64(1) + if ix == *(*Tuint64_t)(unsafe.Pointer(&v10)) { + return float64(1) + } + if topy&uint32(0x7ff) < uint32(0x3be) { + /* |y| < 2^-65, x^y ~= 1 + y*log(x). */ + if int32(WANT_ROUNDING) != 0 { + v12 = float64(1) + if ix > *(*Tuint64_t)(unsafe.Pointer(&v12)) { + v11 = float64(1) + y1 + } else { + v11 = float64(1) - y1 + } + return v11 + } else { + return float64(1) + } + } + v14 = float64(1) + if BoolInt32(ix > *(*Tuint64_t)(unsafe.Pointer(&v14))) == BoolInt32(topy < uint32(0x800)) { + v13 = X__math_oflow(tls, uint32(0)) + } else { + v13 = X__math_uflow(tls, uint32(0)) + } + return v13 + } + if topx == uint32(0) { + /* Normalize subnormal x so exponent becomes negative. */ + v15 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v15)) + ix &= uint64(0x7fffffffffffffff) + ix = Tuint64_t(ix - Uint64FromUint64(52)<> (Int32FromInt32(23) - Int32FromInt32(POWF_LOG2_TABLE_BITS)) % uint32(Int32FromInt32(1)<> (Int32FromInt32(23) - Int32FromInt32(POWF_SCALE_BITS)) /* arithmetic shift */ + invc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Finvc + logc = (*(*struct { + Finvc float64 + Flogc float64 + })(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + uintptr(i)*16))).Flogc + z = float64(*(*float32)(unsafe.Pointer(&iz))) + /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */ + r = z*invc - Float64FromInt32(1) + y0 = logc + float64(k) + /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */ + r2 = r * r + y = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 1*8)) + p = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 2*8))*r + *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 3*8)) + r4 = r2 * r2 + q = *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__powf_log2_data)) + 256 + 4*8))*r + y0 + q = p*r2 + q + y = y*r4 + q + return y +} + +// C documentation +// +// /* The output of log2 and thus the input of exp2 is either scaled by N +// (in case of fast toint intrinsics) or not. The unscaled xd must be +// in [-1021,1023], sign_bias sets the sign of the result. */ +func _exp2_inline(tls *TLS, xd Tdouble_t, sign_bias Tuint32_t) (r1 float32) { + var kd, r, r2, s, y2, z Tdouble_t + var ki, ski, t Tuint64_t + var y, v4 float32 + var y1, v1, v3 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = kd, ki, r, r2, s, ski, t, y, y1, y2, z, v1, v3, v4 + /* x = k/N + r with r in [-1/(2N), 1/(2N)] */ + y1 = xd + X__exp2f_data.Fshift_scaled + v1 = y1 + goto _2 +_2: + kd = v1 + v3 = kd + ki = *(*Tuint64_t)(unsafe.Pointer(&v3)) + kd -= X__exp2f_data.Fshift_scaled /* k/N */ + r = xd - kd + /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ + t = *(*Tuint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__exp2f_data)) + uintptr(ki%uint64(Int32FromInt32(1)<> int32(23) & uint32(0xff)) + if e < int32(0x7f) { + return 0 + } + if e > Int32FromInt32(0x7f)+Int32FromInt32(23) { + return int32(2) + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)-Int32FromInt32(1)) != 0 { + return 0 + } + if iy&uint32(Int32FromInt32(1)<<(Int32FromInt32(0x7f)+Int32FromInt32(23)-e)) != 0 { + return int32(1) + } + return int32(2) +} + +func _zeroinfnan1(tls *TLS, ix Tuint32_t) (r int32) { + return BoolInt32(uint32(2)*ix-uint32(1) >= Uint32FromUint32(2)*Uint32FromInt32(0x7f800000)-Uint32FromInt32(1)) +} + +func Xpowf(tls *TLS, x1 float32, y1 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x1=%v y1=%v, (%v:)", tls, x1, y1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ix, iy, sign_bias Tuint32_t + var logx, ylogx Tdouble_t + var x2, v1 Tfloat_t + var y, v2, v4 float32 + var yint int32 + var v5, v6 float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, iy, logx, sign_bias, x2, y, yint, ylogx, v1, v2, v4, v5, v6 + sign_bias = uint32(0) + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + iy = *(*Tuint32_t)(unsafe.Pointer(&y1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) || _zeroinfnan1(tls, iy) != 0 { + /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */ + if _zeroinfnan1(tls, iy) != 0 { + if uint32(2)*iy == uint32(0) { + return Float32FromFloat32(1) + } + if ix == uint32(0x3f800000) { + return Float32FromFloat32(1) + } + if uint32(2)*ix > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) || uint32(2)*iy > Uint32FromUint32(2)*Uint32FromInt32(0x7f800000) { + return x1 + y1 + } + if uint32(2)*ix == uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000)) { + return Float32FromFloat32(1) + } + if BoolInt32(uint32(2)*ix < uint32(Int32FromInt32(2)*Int32FromInt32(0x3f800000))) == BoolInt32(!(iy&Uint32FromUint32(0x80000000) != 0)) { + return Float32FromFloat32(0) + } /* |x|<1 && y==inf or |x|>1 && y==-inf. */ + return y1 * y1 + } + if _zeroinfnan1(tls, ix) != 0 { + x2 = float64(x1 * x1) + if ix&uint32(0x80000000) != 0 && _checkint1(tls, iy) == int32(1) { + x2 = -x2 + } + /* Without the barrier some versions of clang hoist the 1/x2 and + thus division by zero exception can be signaled spuriously. */ + if iy&uint32(0x80000000) != 0 { + y = float32(Float64FromInt32(1) / x2) + v2 = y + goto _3 + _3: + v1 = float64(v2) + } else { + v1 = x2 + } + return float32(v1) + } + /* x and y are non-zero finite. */ + if ix&uint32(0x80000000) != 0 { + /* Finite x < 0. */ + yint = _checkint1(tls, iy) + if yint == 0 { + return X__math_invalidf(tls, x1) + } + if yint == int32(1) { + sign_bias = uint32(Int32FromInt32(1) << (Int32FromInt32(EXP2F_TABLE_BITS) + Int32FromInt32(11))) + } + ix &= uint32(0x7fffffff) + } + if ix < uint32(0x00800000) { + /* Normalize subnormal x so exponent becomes negative. */ + v4 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v4)) + ix &= uint32(0x7fffffff) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + } + logx = _log2_inline(tls, ix) + ylogx = float64(y1) * logx /* cannot overflow, y is single prec. */ + v5 = ylogx + v6 = float64(126) * float64(Int32FromInt32(1)<>int32(47)&uint64(0xffff) >= *(*Tuint64_t)(unsafe.Pointer(&v6))>>int32(47) { + /* |y*log(x)| >= 126. */ + if ylogx > float64(127.99999995700433)*float64(Int32FromInt32(1)< %v", r) }() + } + return Xpow(tls, x, y) +} + +func Xremainder(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquo(tls, x, y, bp) +} + +func Xdrem(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremainderf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* q at bp+0 */ int32 + return Xremquof(tls, x, y, bp) +} + +func Xdremf(tls *TLS, x float32, y float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainderf(tls, x, y) +} + +func Xremainderl(tls *TLS, x float64, y float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremainder(tls, x, y) +} + +func Xremquo(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ex, ey, sx, sy, v10 int32 + var i, uxi Tuint64_t + var q Tuint32_t + var v1 uint64 + var v11 float64 + var v3 bool + var p6, p7 uintptr + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* ux at bp+8 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + var _ /* uy at bp+16 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v10, v11, v3, p6, p7 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 8)) = x + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp + 16)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp + 16)) = y + ex = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(52) & uint64(0x7ff)) + ey = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(52) & uint64(0x7ff)) + sx = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 8)) >> int32(63)) + sy = int32(*(*Tuint64_t)(unsafe.Pointer(bp + 16)) >> int32(63)) + uxi = *(*Tuint64_t)(unsafe.Pointer(bp + 8)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint64_t)(unsafe.Pointer(bp + 16))<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>int32(63) == uint64(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint64(1) + } + uxi <<= uint64(-ex + int32(1)) + } else { + uxi = Tuint64_t(uxi & (-Uint64FromUint64(1) >> Int32FromInt32(12))) + uxi = Tuint64_t(uxi | Uint64FromUint64(1)<>int32(63) == uint64(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint64(1) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 16)) <<= uint64(-ey + int32(1)) + } else { + p6 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p6)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p6)) & (-Uint64FromUint64(1) >> Int32FromInt32(12))) + p7 = bp + 16 + *(*Tuint64_t)(unsafe.Pointer(p7)) = Tuint64_t(*(*Tuint64_t)(unsafe.Pointer(p7)) | Uint64FromUint64(1)< ey) { + break + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + uxi <<= uint64(1) + q <<= uint32(1) + goto _8 + _8: + ; + ex-- + } + i = uxi - *(*Tuint64_t)(unsafe.Pointer(bp + 16)) + if i>>int32(63) == uint64(0) { + uxi = i + q++ + } + if uxi == uint64(0) { + ex = -int32(60) + } else { + for { + if !(uxi>>int32(52) == uint64(0)) { + break + } + goto _9 + _9: + ; + uxi <<= uint64(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi = Tuint64_t(uxi - Uint64FromUint64(1)<>= uint64(-ex + int32(1)) + } + *(*Tuint64_t)(unsafe.Pointer(bp + 8)) = uxi + x = *(*float64)(unsafe.Pointer(bp + 8)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float64FromInt32(2)*x > y || Float64FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v10 = -int32(q) + } else { + v10 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v10 + if sx != 0 { + v11 = -x + } else { + v11 = x + } + return v11 +} + +func Xremquof(tls *TLS, x float32, y float32, quo uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ex, ey, sx, sy, v8 int32 + var i, q, uxi Tuint32_t + var v1 uint32 + var v3 bool + var v9 float32 + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + var _ /* ux at bp+4 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + var _ /* uy at bp+8 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _, _, _, _, _ = ex, ey, i, q, sx, sy, uxi, v1, v3, v8, v9 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 4)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 4)) = x + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp + 8)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp + 8)) = y + ex = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(23) & uint32(0xff)) + ey = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(23) & uint32(0xff)) + sx = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 4)) >> int32(31)) + sy = int32(*(*Tuint32_t)(unsafe.Pointer(bp + 8)) >> int32(31)) + uxi = *(*Tuint32_t)(unsafe.Pointer(bp + 4)) + *(*int32)(unsafe.Pointer(quo)) = 0 + if v3 = *(*Tuint32_t)(unsafe.Pointer(bp + 8))< uint32(0x7f800000)) != 0 || ex == int32(0xff) { + return x * y / (x * y) + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 4))<>int32(31) == uint32(0)) { + break + } + goto _4 + _4: + ; + ex-- + i <<= uint32(1) + } + uxi <<= uint32(-ex + int32(1)) + } else { + uxi &= -Uint32FromUint32(1) >> Int32FromInt32(9) + uxi |= Uint32FromUint32(1) << Int32FromInt32(23) + } + if !(ey != 0) { + i = *(*Tuint32_t)(unsafe.Pointer(bp + 8)) << int32(9) + for { + if !(i>>int32(31) == uint32(0)) { + break + } + goto _5 + _5: + ; + ey-- + i <<= uint32(1) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) <<= uint32(-ey + int32(1)) + } else { + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) &= -Uint32FromUint32(1) >> Int32FromInt32(9) + *(*Tuint32_t)(unsafe.Pointer(bp + 8)) |= Uint32FromUint32(1) << Int32FromInt32(23) + } + q = uint32(0) + if ex < ey { + if ex+int32(1) == ey { + goto end + } + return x + } + /* x mod y */ + for { + if !(ex > ey) { + break + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + uxi <<= uint32(1) + q <<= uint32(1) + goto _6 + _6: + ; + ex-- + } + i = uxi - *(*Tuint32_t)(unsafe.Pointer(bp + 8)) + if i>>int32(31) == uint32(0) { + uxi = i + q++ + } + if uxi == uint32(0) { + ex = -int32(30) + } else { + for { + if !(uxi>>int32(23) == uint32(0)) { + break + } + goto _7 + _7: + ; + uxi <<= uint32(1) + ex-- + } + } + goto end +end: + ; + /* scale result and decide between |x| and |x|-|y| */ + if ex > 0 { + uxi -= Uint32FromUint32(1) << Int32FromInt32(23) + uxi |= uint32(ex) << int32(23) + } else { + uxi >>= uint32(-ex + int32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(bp + 4)) = uxi + x = *(*float32)(unsafe.Pointer(bp + 4)) + if sy != 0 { + y = -y + } + if ex == ey || ex+int32(1) == ey && (Float32FromInt32(2)*x > y || Float32FromInt32(2)*x == y && q%uint32(2) != 0) { + x -= y + q++ + } + q &= uint32(0x7fffffff) + if sx^sy != 0 { + v8 = -int32(q) + } else { + v8 = int32(q) + } + *(*int32)(unsafe.Pointer(quo)) = v8 + if sx != 0 { + v9 = -x + } else { + v9 = x + } + return v9 +} + +func Xremquol(tls *TLS, x float64, y float64, quo uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v y=%v quo=%v, (%v:)", tls, x, y, quo, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xremquo(tls, x, y, quo) +} + +const DBL_EPSILON9 = 2.220446049250313e-16 + +var _toint4 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xrint(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tdouble_t + var v1 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + s = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x + } + if s != 0 { + y = x - _toint4 + _toint4 + } else { + y = x + _toint4 - _toint4 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float64FromFloat64(0) + } else { + v1 = Float64FromInt32(0) + } + return v1 + } + return y +} + +const DBL_EPSILON10 = 0 +const FLT_EPSILON1 = 1.1920928955078125e-07 + +var _toint5 = float64(Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07)) + +func Xrintf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e, s int32 + var y Tfloat_t + var v1 float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = e, s, y, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + s = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x + } + if s != 0 { + y = float64(x) - _toint5 + _toint5 + } else { + y = float64(x) + _toint5 - _toint5 + } + if y == Float64FromInt32(0) { + if s != 0 { + v1 = -Float32FromFloat32(0) + } else { + v1 = Float32FromFloat32(0) + } + return v1 + } + return float32(y) +} + +const FLT_EPSILON2 = 0 + +func Xrintl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrint(tls, x) +} + +const DBL_EPSILON11 = 2.220446049250313e-16 + +var _toint6 = Float64FromInt32(1) / Float64FromFloat64(2.220446049250313e-16) + +func Xround(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(52) & uint64(0x7ff)) + if e >= Int32FromInt32(0x3ff)+Int32FromInt32(52) { + return x3 + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x3ff)-Int32FromInt32(1) { + /* raise inexact if x!=0 */ + if uint64(8) == uint64(4) { + y = float32(x3 + _toint6) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + _toint6 + } else { + y2 = float64(x3 + _toint6) + } + } + return Float64FromInt32(0) * *(*float64)(unsafe.Pointer(bp)) + } + y3 = x3 + _toint6 - _toint6 - x3 + if y3 > float64(0.5) { + y3 = y3 + x3 - Float64FromInt32(1) + } else { + if y3 <= -Float64FromFloat64(0.5) { + y3 = y3 + x3 + Float64FromInt32(1) + } else { + y3 = y3 + x3 + } + } + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + y3 = -y3 + } + return y3 +} + +const DBL_EPSILON12 = 0 +const FLT_EPSILON3 = 1.1920928955078125e-07 + +var _toint7 = float64(Float32FromInt32(1) / Float32FromFloat32(1.1920928955078125e-07)) + +func Xroundf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var y float32 + var y1, y2 float64 + var y3 Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, y, y1, y2, y3 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(23) & uint32(0xff)) + if e >= Int32FromInt32(0x7f)+Int32FromInt32(23) { + return x3 + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + x3 = -x3 + } + if e < Int32FromInt32(0x7f)-Int32FromInt32(1) { + if uint64(8) == uint64(4) { + y = float32(float64(x3) + _toint7) + } else { + if uint64(8) == uint64(8) { + y1 = float64(x3) + _toint7 + } else { + y2 = float64(x3) + _toint7 + } + } + return Float32FromInt32(0) * *(*float32)(unsafe.Pointer(bp)) + } + y3 = float64(x3) + _toint7 - _toint7 - float64(x3) + if y3 > Float64FromFloat32(0.5) { + y3 = y3 + float64(x3) - Float64FromInt32(1) + } else { + if y3 <= float64(-Float32FromFloat32(0.5)) { + y3 = y3 + float64(x3) + Float64FromInt32(1) + } else { + y3 = y3 + float64(x3) + } + } + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + y3 = -y3 + } + return float32(y3) +} + +const FLT_EPSILON4 = 0 + +func Xroundl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xround(tls, x) +} + +func Xscalb(tls *TLS, x float64, fn float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint64 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float64)(unsafe.Pointer(bp)) = x + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&(-Uint64FromUint64(1)>>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) > Uint64FromUint64(0x7ff)<>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< float64(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrint(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > float64(65000) { + return Xscalbn(tls, x, int32(65000)) + } + if -fn > float64(65000) { + return Xscalbn(tls, x, -int32(65000)) + } + return Xscalbn(tls, x, int32(fn)) +} + +func Xscalbf(tls *TLS, x float32, fn float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v fn=%v, (%v:)", tls, x, fn, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v3, v6 uint32 + var v5 bool + var _ /* __u at bp+0 */ struct { + F__i [0]uint32 + F__f float32 + } + _, _, _, _ = v1, v3, v5, v6 + *(*float32)(unsafe.Pointer(bp)) = x + v1 = *(*uint32)(unsafe.Pointer(bp)) + goto _2 +_2: + ; + if v5 = BoolInt32(v1&uint32(0x7fffffff) > uint32(0x7f800000)) != 0; !v5 { + *(*float32)(unsafe.Pointer(bp)) = fn + v3 = *(*uint32)(unsafe.Pointer(bp)) + goto _4 + _4: + } + if v5 || BoolInt32(v3&uint32(0x7fffffff) > uint32(0x7f800000)) != 0 { + return x * fn + } + *(*float32)(unsafe.Pointer(bp)) = fn + v6 = *(*uint32)(unsafe.Pointer(bp)) + goto _7 +_7: + if !(BoolInt32(v6&Uint32FromInt32(0x7fffffff) < Uint32FromInt32(0x7f800000)) != 0) { + if fn > Float32FromFloat32(0) { + return x * fn + } else { + return x / -fn + } + } + if Xrintf(tls, fn) != fn { + return (fn - fn) / (fn - fn) + } + if fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, int32(65000)) + } + if -fn > Float32FromFloat32(65000) { + return Xscalbnf(tls, x, -int32(65000)) + } + return Xscalbnf(tls, x, int32(fn)) +} + +func Xscalbln(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbn(tls, x, int32(n)) +} + +func Xscalblnf(tls *TLS, x float32, n int64) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n > int64(INT_MAX) { + n = int64(INT_MAX) + } else { + if n < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + n = int64(-Int32FromInt32(1) - Int32FromInt32(0x7fffffff)) + } + } + return Xscalbnf(tls, x, int32(n)) +} + +func Xscalblnl(tls *TLS, x float64, n int64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbln(tls, x, n) +} + +func Xscalbn(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tdouble_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _ = y + y = x + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + y *= float64(8.98846567431158e+307) + n -= int32(1023) + if n > int32(1023) { + n = int32(1023) + } + } + } else { + if n < -int32(1022) { + /* make sure final n < -53 to avoid double + rounding in the subnormal range */ + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + y *= Float64FromFloat64(2.2250738585072014e-308) * Float64FromFloat64(9.007199254740992e+15) + n += Int32FromInt32(1022) - Int32FromInt32(53) + if n < -int32(1022) { + n = -int32(1022) + } + } + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) = uint64(Int32FromInt32(0x3ff)+n) << int32(52) + x = y * *(*float64)(unsafe.Pointer(bp)) + return x +} + +func Xscalbnf(tls *TLS, x float32, n int32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var y Tfloat_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _ = y + y = float64(x) + if n > int32(127) { + y *= Float64FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + y *= Float64FromFloat32(1.7014118346046923e+38) + n -= int32(127) + if n > int32(127) { + n = int32(127) + } + } + } else { + if n < -int32(126) { + y *= float64(Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07)) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + y *= float64(Float32FromFloat32(1.1754943508222875e-38) * Float32FromFloat32(1.6777216e+07)) + n += Int32FromInt32(126) - Int32FromInt32(24) + if n < -int32(126) { + n = -int32(126) + } + } + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) = uint32(Int32FromInt32(0x7f)+n) << int32(23) + x = float32(y * float64(*(*float32)(unsafe.Pointer(bp)))) + return x +} + +func Xscalbnl(tls *TLS, x float64, n int32) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, n) +} + +func Xsignificand(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbn(tls, x, -Xilogb(tls, x)) +} + +func Xsignificandf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscalbnf(tls, x, -Xilogbf(tls, x)) +} + +func Xsin(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + /* High word of x. */ + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e500000) { /* |x| < 2**-26 */ + /* raise inexact if x != 0 and underflow if subnormal*/ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__sin(tls, x3, float64(0), 0) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + switch n & Uint32FromInt32(3) { + case uint32(0): + return X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + case uint32(1): + return X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + case uint32(2): + return -X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + default: + return -X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + } + return r +} + +func Xsincos(tls *TLS, x3 float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s, y1, y2, v1, v2, v3, v4 float64 + var ix Tuint32_t + var n uint32 + var y float32 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, y, y1, y2, v1, v2, v3, v4 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + /* if |x| < 2**-27 * sqrt(2) */ + if ix < uint32(0x3e46a09e) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + *(*float64)(unsafe.Pointer(sin)) = x3 + *(*float64)(unsafe.Pointer(cos)) = float64(1) + return + } + *(*float64)(unsafe.Pointer(sin)) = X__sin(tls, x3, float64(0), 0) + *(*float64)(unsafe.Pointer(cos)) = X__cos(tls, x3, float64(0)) + return + } + /* sincos(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + v4 = x3 - x3 + *(*float64)(unsafe.Pointer(cos)) = v4 + *(*float64)(unsafe.Pointer(sin)) = v4 + return + } + /* argument reduction needed */ + n = uint32(X__rem_pio2(tls, x3, bp)) + s = X__sin(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(1)) + c = X__cos(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)]) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float64)(unsafe.Pointer(sin)) = s + *(*float64)(unsafe.Pointer(cos)) = c + case uint32(1): + *(*float64)(unsafe.Pointer(sin)) = c + *(*float64)(unsafe.Pointer(cos)) = -s + case uint32(2): + *(*float64)(unsafe.Pointer(sin)) = -s + *(*float64)(unsafe.Pointer(cos)) = -c + case uint32(3): + fallthrough + default: + *(*float64)(unsafe.Pointer(sin)) = -c + *(*float64)(unsafe.Pointer(cos)) = s + break + } +} + +const M_PI_25 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsincosf(tls *TLS, x3 float32, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x3=%v sin=%v cos=%v, (%v:)", tls, x3, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, s Tfloat_t + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3, v8 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ix, n, s, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7, v8 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + /* |x| ~<= pi/4 */ + if ix <= uint32(0x3f490fda) { + /* |x| < 2**-12 */ + if ix < uint32(0x39800000) { + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + *(*float32)(unsafe.Pointer(sin)) = x3 + *(*float32)(unsafe.Pointer(cos)) = Float32FromFloat32(1) + return + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, float64(x3)) + return + } + /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x407b53d1) { + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)+_s1pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)+_s1pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, _s1pio2-float64(x3)) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, _s1pio2-float64(x3)) + } + return + } + /* -sin(x+c) is not correct if x+c could be 0: -0 vs +0 */ + if sign != 0 { + v4 = float64(x3) + _s2pio2 + } else { + v4 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(sin)) = -X__sindf(tls, v4) + if sign != 0 { + v5 = float64(x3) + _s2pio2 + } else { + v5 = float64(x3) - _s2pio2 + } + *(*float32)(unsafe.Pointer(cos)) = -X__cosdf(tls, v5) + return + } + /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40e231d5) { + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + *(*float32)(unsafe.Pointer(sin)) = X__cosdf(tls, float64(x3)+_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = -X__sindf(tls, float64(x3)+_s3pio2) + } else { + *(*float32)(unsafe.Pointer(sin)) = -X__cosdf(tls, float64(x3)-_s3pio2) + *(*float32)(unsafe.Pointer(cos)) = X__sindf(tls, float64(x3)-_s3pio2) + } + return + } + if sign != 0 { + v6 = float64(x3) + _s4pio2 + } else { + v6 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(sin)) = X__sindf(tls, v6) + if sign != 0 { + v7 = float64(x3) + _s4pio2 + } else { + v7 = float64(x3) - _s4pio2 + } + *(*float32)(unsafe.Pointer(cos)) = X__cosdf(tls, v7) + return + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + v8 = x3 - x3 + *(*float32)(unsafe.Pointer(cos)) = v8 + *(*float32)(unsafe.Pointer(sin)) = v8 + return + } + /* general argument reduction needed */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + s = float64(X__sindf(tls, *(*float64)(unsafe.Pointer(bp)))) + c = float64(X__cosdf(tls, *(*float64)(unsafe.Pointer(bp)))) + switch n & Uint32FromInt32(3) { + case uint32(0): + *(*float32)(unsafe.Pointer(sin)) = float32(s) + *(*float32)(unsafe.Pointer(cos)) = float32(c) + case uint32(1): + *(*float32)(unsafe.Pointer(sin)) = float32(c) + *(*float32)(unsafe.Pointer(cos)) = float32(-s) + case uint32(2): + *(*float32)(unsafe.Pointer(sin)) = float32(-s) + *(*float32)(unsafe.Pointer(cos)) = float32(-c) + case uint32(3): + fallthrough + default: + *(*float32)(unsafe.Pointer(sin)) = float32(-c) + *(*float32)(unsafe.Pointer(cos)) = float32(s) + break + } +} + +const M_PI_26 = 0 + +func Xsincosl(tls *TLS, x float64, sin uintptr, cos uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v sin=%v cos=%v, (%v:)", tls, x, sin, cos, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cosd at bp+8 */ float64 + var _ /* sind at bp+0 */ float64 + Xsincos(tls, x, bp, bp+8) + *(*float64)(unsafe.Pointer(sin)) = *(*float64)(unsafe.Pointer(bp)) + *(*float64)(unsafe.Pointer(cos)) = *(*float64)(unsafe.Pointer(bp + 8)) +} + +const M_PI_27 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _s1pio21 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _s2pio21 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _s3pio21 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _s4pio21 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xsinf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign int32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = int32(ix >> int32(31)) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__sindf(tls, float64(x3)) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + return -X__cosdf(tls, float64(x3)+_s1pio21) + } else { + return X__cosdf(tls, float64(x3)-_s1pio21) + } + } + if sign != 0 { + v4 = -(float64(x3) + _s2pio21) + } else { + v4 = -(float64(x3) - _s2pio21) + } + return X__sindf(tls, v4) + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + return X__cosdf(tls, float64(x3)+_s3pio21) + } else { + return -X__cosdf(tls, float64(x3)-_s3pio21) + } + } + if sign != 0 { + v5 = float64(x3) + _s4pio21 + } else { + v5 = float64(x3) - _s4pio21 + } + return X__sindf(tls, v5) + } + /* sin(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* general argument reduction needed */ + n = X__rem_pio2f(tls, x3, bp) + switch n & Int32FromInt32(3) { + case 0: + return X__sindf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(1): + return X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + case int32(2): + return X__sindf(tls, -*(*float64)(unsafe.Pointer(bp))) + default: + return -X__cosdf(tls, *(*float64)(unsafe.Pointer(bp))) + } + return r +} + +const M_PI_28 = 0 + +// C documentation +// +// /* sinh(x) = (exp(x) - 1/exp(x))/2 +// * = (exp(x)-1 + (exp(x)-1)/exp(x))/2 +// * = x + x^3/6 + o(x^5) +// */ +func Xsinh(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float64 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x + h = float64(0.5) + if *(*Tuint64_t)(unsafe.Pointer(bp))>>int32(63) != 0 { + h = -h + } + /* |x| */ + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + absx = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + /* |x| < log(DBL_MAX) */ + if w < uint32(0x40862e42) { + t = Xexpm1(tls, absx) + if w < uint32(0x3ff00000) { + if w < uint32(Int32FromInt32(0x3ff00000)-Int32FromInt32(26)<log(0x1p26)+eps could be just h*exp(x) */ + return h * (t + t/(t+Float64FromInt32(1))) + } + /* |x| > log(DBL_MAX) or nan */ + /* note: the result is stored to handle overflow */ + t = X__expo2(tls, absx, Float64FromInt32(2)*h) + return t +} + +func Xsinhf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, h, t float32 + var w Tuint32_t + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _ = absx, h, t, w + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x + h = float32(0.5) + if *(*Tuint32_t)(unsafe.Pointer(bp))>>int32(31) != 0 { + h = -h + } + /* |x| */ + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + absx = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + /* |x| < log(FLT_MAX) */ + if w < uint32(0x42b17217) { + t = Xexpm1f(tls, absx) + if w < uint32(0x3f800000) { + if w < uint32(Int32FromInt32(0x3f800000)-Int32FromInt32(12)< logf(FLT_MAX) or nan */ + t = X__expo2f(tls, absx, Float32FromInt32(2)*h) + return t +} + +func Xsinhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsinh(tls, x) +} + +func Xsinl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsin(tls, x) +} + +const FENV_SUPPORT = 1 + +// C documentation +// +// /* returns a*b*2^-32 - e, with error 0 <= e < 1. */ +func _mul32(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +// C documentation +// +// /* returns a*b*2^-64 - e, with error 0 <= e < 3. */ +func _mul64(tls *TLS, a Tuint64_t, b Tuint64_t) (r Tuint64_t) { + var ahi, alo, bhi, blo Tuint64_t + _, _, _, _ = ahi, alo, bhi, blo + ahi = a >> int32(32) + alo = a & uint64(0xffffffff) + bhi = b >> int32(32) + blo = b & uint64(0xffffffff) + return ahi*bhi + ahi*blo>>int32(32) + alo*bhi>>int32(32) +} + +func Xsqrt(tls *TLS, x1 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, i, ix, m, r, s, tiny, top, u Tuint64_t + var even int32 + var t, y, y1, v1, v3 float64 + var v2 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, i, ix, m, r, s, t, tiny, top, u, y, y1, v1, v2, v3 + /* special case handling. */ + ix = *(*Tuint64_t)(unsafe.Pointer(&x1)) + top = ix >> int32(52) + if top-uint64(0x001) >= uint64(Int32FromInt32(0x7ff)-Int32FromInt32(0x001)) { + /* x < 0x1p-1022 or inf or nan. */ + if ix*uint64(2) == uint64(0) { + return x1 + } + if ix == uint64(0x7ff0000000000000) { + return x1 + } + if ix > uint64(0x7ff0000000000000) { + return X__math_invalid(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * float64(4.503599627370496e+15) + ix = *(*Tuint64_t)(unsafe.Pointer(&v1)) + top = ix >> int32(52) + top -= uint64(52) + } + /* argument reduction: + x = 4^e m; with integer e, and m in [1, 4) + m: fixed point representation [2.62] + 2^e is the exponent part of the result. */ + even = int32(top & uint64(1)) + m = ix<>= uint64(1) + } + top = (top + uint64(0x3ff)) >> int32(1) + i = ix >> Int32FromInt32(46) % uint64(128) + r = uint64(uint32(X__rsqrt_tab[i]) << int32(16)) + /* |r sqrt(m) - 1| < 0x1.fdp-9 */ + s = uint64(_mul32(tls, uint32(m>>int32(32)), uint32(r))) + /* |s/sqrt(m) - 1| < 0x1.fdp-9 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.7bp-16 */ + s = uint64(_mul32(tls, uint32(s), uint32(u)) << int32(1)) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = uint64(_mul32(tls, uint32(s), uint32(r))) + u = _three - d + r = uint64(_mul32(tls, uint32(r), uint32(u)) << int32(1)) + /* |r sqrt(m) - 1| < 0x1.3704p-29 (measured worst-case) */ + r = r << int32(32) + s = _mul64(tls, m, r) + d = _mul64(tls, s, r) + u = _three<> int32(9) + d0 = m<> int32(63) + s &= uint64(0x000fffffffffffff) + s |= top << int32(52) + y1 = *(*float64)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint64(0) { + v2 = 0 + } else { + v2 = int64(0x0010000000000000) + } + /* handle rounding modes and inexact exception: + only (s+1)^2 == 2^42 m case is exact otherwise + add a tiny value to cause the fenv effects. */ + tiny = uint64(v2) + tiny |= (d1 ^ d2) & uint64(0x8000000000000000) + t = *(*float64)(unsafe.Pointer(&tiny)) + y = y1 + t + v3 = y + goto _4 + _4: + y1 = v3 + } + return y1 +} + +/* approximate r ~ 1/sqrt(m) and s ~ sqrt(m) when m in [1,4) + + initial estimate: + 7bit table lookup (1bit exponent and 6bit significand). + + iterative approximation: + using 2 goldschmidt iterations with 32bit int arithmetics + and a final iteration with 64bit int arithmetics. + + details: + + the relative error (e = r0 sqrt(m)-1) of a linear estimate + (r0 = a m + b) is |e| < 0.085955 ~ 0x1.6p-4 at best, + a table lookup is faster and needs one less iteration + 6 bit lookup table (128b) gives |e| < 0x1.f9p-8 + 7 bit lookup table (256b) gives |e| < 0x1.fdp-9 + for single and double prec 6bit is enough but for quad + prec 7bit is needed (or modified iterations). to avoid + one more iteration >=13bit table would be needed (16k). + + a newton-raphson iteration for r is + w = r*r + u = 3 - m*w + r = r*u/2 + can use a goldschmidt iteration for s at the end or + s = m*r + + first goldschmidt iteration is + s = m*r + u = 3 - s*r + r = r*u/2 + s = s*u/2 + next goldschmidt iteration is + u = 3 - s*r + r = r*u/2 + s = s*u/2 + and at the end r is not computed only s. + + they use the same amount of operations and converge at the + same quadratic rate, i.e. if + r1 sqrt(m) - 1 = e, then + r2 sqrt(m) - 1 = -3/2 e^2 - 1/2 e^3 + the advantage of goldschmidt is that the mul for s and r + are independent (computed in parallel), however it is not + "self synchronizing": it only uses the input m in the + first iteration so rounding errors accumulate. at the end + or when switching to larger precision arithmetics rounding + errors dominate so the first iteration should be used. + + the fixed point representations are + m: 2.30 r: 0.32, s: 2.30, d: 2.30, u: 2.30, three: 2.30 + and after switching to 64 bit + m: 2.62 r: 0.64, s: 2.62, d: 2.62, u: 2.62, three: 2.62 */ + +var _three = uint64(0xc0000000) + +func _mul321(tls *TLS, a Tuint32_t, b Tuint32_t) (r Tuint32_t) { + return uint32(uint64(a) * uint64(b) >> int32(32)) +} + +/* see sqrt.c for more detailed comments. */ + +func Xsqrtf(tls *TLS, x1 float32) (r1 float32) { + if __ccgo_strace { + trc("tls=%v x1=%v, (%v:)", tls, x1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, tiny, u Tuint32_t + var t, y, y1, v1, v4 float32 + var v2 uint32 + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, d0, d1, d2, even, ey, i, ix, m, m0, m1, r, s, t, tiny, u, y, y1, v1, v2, v3, v4 + ix = *(*Tuint32_t)(unsafe.Pointer(&x1)) + if ix-uint32(0x00800000) >= uint32(Int32FromInt32(0x7f800000)-Int32FromInt32(0x00800000)) { + /* x < 0x1p-126 or inf or nan. */ + if ix*uint32(2) == uint32(0) { + return x1 + } + if ix == uint32(0x7f800000) { + return x1 + } + if ix > uint32(0x7f800000) { + return X__math_invalidf(tls, x1) + } + /* x is subnormal, normalize it. */ + v1 = x1 * Float32FromFloat32(8.388608e+06) + ix = *(*Tuint32_t)(unsafe.Pointer(&v1)) + ix -= uint32(Int32FromInt32(23) << Int32FromInt32(23)) + } + /* x = 4^e m; with int e and m in [1, 4). */ + even = ix & uint32(0x00800000) + m1 = ix<> int32(1) + ey += uint32(Int32FromInt32(0x3f800000) >> Int32FromInt32(1)) + ey &= uint32(0x7f800000) + i = ix >> Int32FromInt32(17) % uint32(128) + r = uint32(X__rsqrt_tab[i]) << int32(16) + /* |r*sqrt(m) - 1| < 0x1p-8 */ + s = _mul321(tls, m, r) + /* |s/sqrt(m) - 1| < 0x1p-8 */ + d = _mul321(tls, s, r) + u = _three1 - d + r = _mul321(tls, r, u) << int32(1) + /* |r*sqrt(m) - 1| < 0x1.7bp-16 */ + s = _mul321(tls, s, u) << int32(1) + /* |s/sqrt(m) - 1| < 0x1.7bp-16 */ + d = _mul321(tls, s, r) + u = _three1 - d + s = _mul321(tls, s, u) + /* -0x1.03p-28 < s/sqrt(m) - 1 < 0x1.fp-31 */ + s = (s - uint32(1)) >> int32(6) + d0 = m<> int32(31) + s &= uint32(0x007fffff) + s |= ey + y1 = *(*float32)(unsafe.Pointer(&s)) + if int32(FENV_SUPPORT) != 0 { + if d2 == uint32(0) { + v3 = 0 + } else { + v3 = int32(0x01000000) + } + /* handle rounding and inexact exception. */ + tiny = uint32(v3) + tiny |= (d1 ^ d2) & uint32(0x80000000) + t = *(*float32)(unsafe.Pointer(&tiny)) + y = y1 + t + v4 = y + goto _5 + _5: + y1 = v4 + } + return y1 +} + +/* compute r ~ 1/sqrt(m), s ~ sqrt(m) with 2 goldschmidt iterations. */ +var _three1 = uint32(0xc0000000) + +func Xsqrtl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsqrt(tls, x) +} + +func Xtan(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n uint32 + var y float32 + var y1, y2, v1, v2, v3 float64 + var _ /* y at bp+0 */ [2]float64 + _, _, _, _, _, _, _, _ = ix, n, y, y1, y2, v1, v2, v3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(&x3)) >> int32(32)) + ix &= uint32(0x7fffffff) + /* |x| ~< pi/4 */ + if ix <= uint32(0x3fe921fb) { + if ix < uint32(0x3e400000) { /* |x| < 2**-27 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(8) == uint64(4) { + if ix < uint32(0x00100000) { + v1 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y = float32(v1) + } else { + if uint64(8) == uint64(8) { + if ix < uint32(0x00100000) { + v2 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y1 = v2 + } else { + if ix < uint32(0x00100000) { + v3 = x3 / Float64FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float64FromFloat32(1.329227995784916e+36) + } + y2 = v3 + } + } + return x3 + } + return X__tan(tls, x3, float64(0), 0) + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7ff00000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2(tls, x3, bp)) + return X__tan(tls, (*(*[2]float64)(unsafe.Pointer(bp)))[0], (*(*[2]float64)(unsafe.Pointer(bp)))[int32(1)], int32(n&uint32(1))) +} + +const M_PI_29 = 1.5707963267948966 + +// C documentation +// +// /* Small multiples of pi/2 rounded to double precision. */ + +var _t1pio2 = Float64FromInt32(1) * Float64FromFloat64(1.5707963267948966) /* 0x3FF921FB, 0x54442D18 */ +var _t2pio2 = Float64FromInt32(2) * Float64FromFloat64(1.5707963267948966) /* 0x400921FB, 0x54442D18 */ +var _t3pio2 = Float64FromInt32(3) * Float64FromFloat64(1.5707963267948966) /* 0x4012D97C, 0x7F3321D2 */ +var _t4pio2 = Float64FromInt32(4) * Float64FromFloat64(1.5707963267948966) /* 0x401921FB, 0x54442D18 */ + +func Xtanf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ix Tuint32_t + var n, sign uint32 + var y, v1, v2, v3 float32 + var y1, y2, v4, v5, v6, v7 float64 + var _ /* y at bp+0 */ float64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = ix, n, sign, y, y1, y2, v1, v2, v3, v4, v5, v6, v7 + ix = *(*Tuint32_t)(unsafe.Pointer(&x3)) + sign = ix >> int32(31) + ix &= uint32(0x7fffffff) + if ix <= uint32(0x3f490fda) { /* |x| ~<= pi/4 */ + if ix < uint32(0x39800000) { /* |x| < 2**-12 */ + /* raise inexact if x!=0 and underflow if subnormal */ + if uint64(4) == uint64(4) { + if ix < uint32(0x00800000) { + v1 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v1 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y = v1 + } else { + if uint64(4) == uint64(8) { + if ix < uint32(0x00800000) { + v2 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v2 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y1 = float64(v2) + } else { + if ix < uint32(0x00800000) { + v3 = x3 / Float32FromFloat32(1.329227995784916e+36) + } else { + v3 = x3 + Float32FromFloat32(1.329227995784916e+36) + } + y2 = float64(v3) + } + } + return x3 + } + return X__tandf(tls, float64(x3), 0) + } + if ix <= uint32(0x407b53d1) { /* |x| ~<= 5*pi/4 */ + if ix <= uint32(0x4016cbe3) { /* |x| ~<= 3pi/4 */ + if sign != 0 { + v4 = float64(x3) + _t1pio2 + } else { + v4 = float64(x3) - _t1pio2 + } + return X__tandf(tls, v4, int32(1)) + } else { + if sign != 0 { + v5 = float64(x3) + _t2pio2 + } else { + v5 = float64(x3) - _t2pio2 + } + return X__tandf(tls, v5, 0) + } + } + if ix <= uint32(0x40e231d5) { /* |x| ~<= 9*pi/4 */ + if ix <= uint32(0x40afeddf) { /* |x| ~<= 7*pi/4 */ + if sign != 0 { + v6 = float64(x3) + _t3pio2 + } else { + v6 = float64(x3) - _t3pio2 + } + return X__tandf(tls, v6, int32(1)) + } else { + if sign != 0 { + v7 = float64(x3) + _t4pio2 + } else { + v7 = float64(x3) - _t4pio2 + } + return X__tandf(tls, v7, 0) + } + } + /* tan(Inf or NaN) is NaN */ + if ix >= uint32(0x7f800000) { + return x3 - x3 + } + /* argument reduction */ + n = uint32(X__rem_pio2f(tls, x3, bp)) + return X__tandf(tls, *(*float64)(unsafe.Pointer(bp)), int32(n&uint32(1))) +} + +const M_PI_210 = 0 + +// C documentation +// +// /* tanh(x) = (exp(x) - exp(-x))/(exp(x) + exp(-x)) +// * = (exp(2*x) - 1)/(exp(2*x) - 1 + 2) +// * = (1 - exp(-2*x))/(exp(-2*x) - 1 + 2) +// */ +func Xtanh(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, v1 Tdouble_t + var w Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + *(*Tuint64_t)(unsafe.Pointer(bp)) &= uint64(-Int32FromInt32(1)) / Uint64FromInt32(2) + x3 = *(*float64)(unsafe.Pointer(bp)) + w = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32)) + if w > uint32(0x3fe193ea) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x40340000) { + /* |x| > 20 or nan */ + /* note: this branch avoids raising overflow */ + t = Float64FromInt32(1) - Float64FromInt32(0)/x3 + } else { + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = Float64FromInt32(1) - Float64FromInt32(2)/(t+Float64FromInt32(2)) + } + } else { + if w > uint32(0x3fd058ae) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1(tls, Float64FromInt32(2)*x3) + t = t / (t + Float64FromInt32(2)) + } else { + if w >= uint32(0x00100000) { + /* |x| >= 0x1p-1022, up to 2ulp error in [0.1,0.2554] */ + t = Xexpm1(tls, float64(-Int32FromInt32(2))*x3) + t = -t / (t + Float64FromInt32(2)) + } else { + /* |x| is subnormal */ + /* note: the branch above would not raise underflow in [0x1p-1023,0x1p-1022) */ + if uint64(4) == uint64(4) { + y = float32(x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(x3)) + } else { + y2 = float64(float32(x3)) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var sign int32 + var t, y, v1 float32 + var w Tuint32_t + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _, _, _ = sign, t, w, y, y1, y2, v1 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + /* x = |x| */ + sign = int32(*(*Tuint32_t)(unsafe.Pointer(bp)) >> int32(31)) + *(*Tuint32_t)(unsafe.Pointer(bp)) &= uint32(0x7fffffff) + x3 = *(*float32)(unsafe.Pointer(bp)) + w = *(*Tuint32_t)(unsafe.Pointer(bp)) + if w > uint32(0x3f0c9f54) { + /* |x| > log(3)/2 ~= 0.5493 or nan */ + if w > uint32(0x41200000) { + /* |x| > 10 */ + t = Float32FromInt32(1) + Float32FromInt32(0)/x3 + } else { + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = Float32FromInt32(1) - Float32FromInt32(2)/(t+Float32FromInt32(2)) + } + } else { + if w > uint32(0x3e82c578) { + /* |x| > log(5/3)/2 ~= 0.2554 */ + t = Xexpm1f(tls, Float32FromInt32(2)*x3) + t = t / (t + Float32FromInt32(2)) + } else { + if w >= uint32(0x00800000) { + /* |x| >= 0x1p-126 */ + t = Xexpm1f(tls, float32(-Int32FromInt32(2))*x3) + t = -t / (t + Float32FromInt32(2)) + } else { + /* |x| is subnormal */ + if uint64(4) == uint64(4) { + y = x3 * x3 + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 * x3) + } else { + y2 = float64(x3 * x3) + } + } + t = x3 + } + } + } + if sign != 0 { + v1 = -t + } else { + v1 = t + } + return v1 +} + +func Xtanhl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtanh(tls, x) +} + +func Xtanl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtan(tls, x) +} + +const N10 = 12 + +var _pi4 = float64(3.141592653589793) + +// C documentation +// +// /* sin(pi x) with x > 0x1p-100, if sin(pi*x)==0 the sign is arbitrary */ +func _sinpi(tls *TLS, x float64) (r float64) { + var n int32 + _ = n + /* argument reduction: x = |x| mod 2 */ + /* spurious inexact when x is odd int */ + x = x * float64(0.5) + x = Float64FromInt32(2) * (x - Xfloor(tls, x)) + /* reduce x into [-.25,.25] */ + n = int32(Float64FromInt32(4) * x) + n = (n + int32(1)) / int32(2) + x -= float64(n) * float64(0.5) + x *= _pi4 + switch n { + default: /* case 4 */ + fallthrough + case 0: + return X__sin(tls, x, Float64FromInt32(0), 0) + case int32(1): + return X__cos(tls, x, Float64FromInt32(0)) + case int32(2): + return X__sin(tls, -x, Float64FromInt32(0), 0) + case int32(3): + return -X__cos(tls, x, Float64FromInt32(0)) + } + return r +} + +// C documentation +// +// //static const double g = 6.024680040776729583740234375; +var _gmhalf = float64(5.52468004077673) +var _Snum = [13]float64{ + 0: float64(2.353137688041076e+10), + 1: float64(4.29198036426491e+10), + 2: float64(3.571195923735567e+10), + 3: float64(1.792103442603721e+10), + 4: float64(6.039542586352028e+09), + 5: float64(1.4397204073117216e+09), + 6: float64(2.4887455786205417e+08), + 7: float64(3.1426415585400194e+07), + 8: float64(2.8763706289353725e+06), + 9: float64(186056.26539522348), + 10: float64(8071.672002365816), + 11: float64(210.82427775157936), + 12: float64(2.5066282746310002), +} +var _Sden = [13]float64{ + 1: Float64FromInt32(39916800), + 2: Float64FromInt32(120543840), + 3: Float64FromInt32(150917976), + 4: Float64FromInt32(105258076), + 5: Float64FromInt32(45995730), + 6: Float64FromInt32(13339535), + 7: Float64FromInt32(2637558), + 8: Float64FromInt32(357423), + 9: Float64FromInt32(32670), + 10: Float64FromInt32(1925), + 11: Float64FromInt32(66), + 12: Float64FromInt32(1), +} + +// C documentation +// +// /* n! for small integer n */ +var _fact = [23]float64{ + 0: Float64FromInt32(1), + 1: Float64FromInt32(1), + 2: Float64FromInt32(2), + 3: Float64FromInt32(6), + 4: Float64FromInt32(24), + 5: Float64FromInt32(120), + 6: Float64FromInt32(720), + 7: float64(5040), + 8: float64(40320), + 9: float64(362880), + 10: float64(3.6288e+06), + 11: float64(3.99168e+07), + 12: float64(4.790016e+08), + 13: float64(6.2270208e+09), + 14: float64(8.71782912e+10), + 15: float64(1.307674368e+12), + 16: float64(2.0922789888e+13), + 17: float64(3.55687428096e+14), + 18: float64(6.402373705728e+15), + 19: float64(1.21645100408832e+17), + 20: float64(2.43290200817664e+18), + 21: float64(5.109094217170944e+19), + 22: float64(1.1240007277776077e+21), +} + +// C documentation +// +// /* S(x) rational function for positive x */ +func _S(tls *TLS, x float64) (r float64) { + var den, num Tdouble_t + var i int32 + _, _, _ = den, i, num + num = Float64FromInt32(0) + den = Float64FromInt32(0) + /* to avoid overflow handle large x differently */ + if x < Float64FromInt32(8) { + i = int32(N10) + for { + if !(i >= 0) { + break + } + num = num*x + _Snum[i] + den = den*x + _Sden[i] + goto _1 + _1: + ; + i-- + } + } else { + i = 0 + for { + if !(i <= int32(N10)) { + break + } + num = num/x + _Snum[i] + den = den/x + _Sden[i] + goto _2 + _2: + ; + i++ + } + } + return num / den +} + +func Xtgamma(tls *TLS, x3 float64) (r1 float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var absx, y1, y2, y3, v1 float64 + var dy, r, z Tdouble_t + var ix Tuint32_t + var sign int32 + var y float32 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _, _, _, _, _, _, _ = absx, dy, ix, r, sign, y, y1, y2, y3, z, v1 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + ix = uint32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(32) & uint64(0x7fffffff)) + sign = int32(*(*Tuint64_t)(unsafe.Pointer(bp)) >> int32(63)) + /* special cases */ + if ix >= uint32(0x7ff00000) { + /* tgamma(nan)=nan, tgamma(inf)=inf, tgamma(-inf)=nan with invalid */ + return x3 + float64(X__builtin_inff(tls)) + } + if ix < uint32((Int32FromInt32(0x3ff)-Int32FromInt32(54))<= 172: tgamma(x)=inf with overflow */ + /* x =< -184: tgamma(x)=+-0 with underflow */ + if ix >= uint32(0x40670000) { /* |x| >= 184 */ + if sign != 0 { + if uint64(4) == uint64(4) { + y = float32(Float64FromFloat64(1.1754943508222875e-38) / x3) + } else { + if uint64(4) == uint64(8) { + y1 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } else { + y2 = float64(float32(Float64FromFloat64(1.1754943508222875e-38) / x3)) + } + } + if Xfloor(tls, x3)*float64(0.5) == Xfloor(tls, x3*float64(0.5)) { + return Float64FromInt32(0) + } + return -Float64FromFloat64(0) + } + x3 *= float64(8.98846567431158e+307) + return x3 + } + if sign != 0 { + v1 = -x3 + } else { + v1 = x3 + } + absx = v1 + /* handle the error of x + g - 0.5 */ + y3 = absx + _gmhalf + if absx > _gmhalf { + dy = y3 - absx + dy -= _gmhalf + } else { + dy = y3 - _gmhalf + dy -= absx + } + z = absx - float64(0.5) + r = _S(tls, absx) * Xexp(tls, -y3) + if x3 < Float64FromInt32(0) { + /* reflection formula for negative x */ + /* sinpi(absx) is not 0, integers are already handled */ + r = -_pi4 / (_sinpi(tls, absx) * absx * r) + dy = -dy + z = -z + } + r += dy * (_gmhalf + Float64FromFloat64(0.5)) * r / y3 + z = Xpow(tls, y3, float64(0.5)*z) + y3 = r * z * z + return y3 +} + +func Xtgammaf(tls *TLS, x float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(Xtgamma(tls, float64(x))) +} + +func Xtgammal(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtgamma(tls, x) +} + +func Xtrunc(tls *TLS, x3 float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint64_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint64_t + Ff float64 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint64_t + Ff float64 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint64_t + Ff float64 + }{} + *(*float64)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint64_t)(unsafe.Pointer(bp))>>Int32FromInt32(52)&Uint64FromInt32(0x7ff)) - int32(0x3ff) + int32(12) + if e >= Int32FromInt32(52)+Int32FromInt32(12) { + return x3 + } + if e < int32(12) { + e = int32(1) + } + m = uint64(-Uint64FromUint64(1) >> e) + if *(*Tuint64_t)(unsafe.Pointer(bp))&m == uint64(0) { + return x3 + } + if uint64(8) == uint64(4) { + y = float32(x3 + Float64FromFloat32(1.329227995784916e+36)) + } else { + if uint64(8) == uint64(8) { + y1 = x3 + Float64FromFloat32(1.329227995784916e+36) + } else { + y2 = float64(x3 + Float64FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint64_t)(unsafe.Pointer(bp)) &= ^m + return *(*float64)(unsafe.Pointer(bp)) +} + +func Xtruncf(tls *TLS, x3 float32) (r float32) { + if __ccgo_strace { + trc("tls=%v x3=%v, (%v:)", tls, x3, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var e int32 + var m Tuint32_t + var y float32 + var y1, y2 float64 + var _ /* u at bp+0 */ struct { + Fi [0]Tuint32_t + Ff float32 + } + _, _, _, _, _ = e, m, y, y1, y2 + *(*struct { + Fi [0]Tuint32_t + Ff float32 + })(unsafe.Pointer(bp)) = struct { + Fi [0]Tuint32_t + Ff float32 + }{} + *(*float32)(unsafe.Pointer(bp)) = x3 + e = int32(*(*Tuint32_t)(unsafe.Pointer(bp))>>Int32FromInt32(23)&Uint32FromInt32(0xff)) - int32(0x7f) + int32(9) + if e >= Int32FromInt32(23)+Int32FromInt32(9) { + return x3 + } + if e < int32(9) { + e = int32(1) + } + m = -Uint32FromUint32(1) >> e + if *(*Tuint32_t)(unsafe.Pointer(bp))&m == uint32(0) { + return x3 + } + if uint64(4) == uint64(4) { + y = x3 + Float32FromFloat32(1.329227995784916e+36) + } else { + if uint64(4) == uint64(8) { + y1 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } else { + y2 = float64(x3 + Float32FromFloat32(1.329227995784916e+36)) + } + } + *(*Tuint32_t)(unsafe.Pointer(bp)) &= ^m + return *(*float32)(unsafe.Pointer(bp)) +} + +func Xtruncl(tls *TLS, x float64) (r float64) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xtrunc(tls, x) +} + +var _digits = [65]uint8{'.', '/', '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', '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'} + +func Xa64l(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var e int32 + var x Tuint32_t + _, _, _ = d, e, x + x = uint32(0) + e = 0 + for { + if !(e < int32(36) && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + d = Xstrchr(tls, uintptr(unsafe.Pointer(&_digits)), int32(*(*uint8)(unsafe.Pointer(s)))) + if !(d != 0) { + break + } + x |= uint32(int64(d)-t__predefined_ptrdiff_t(uintptr(unsafe.Pointer(&_digits)))) << e + goto _1 + _1: + ; + e += int32(6) + s++ + } + return int64(int32(x)) +} + +func Xl64a(tls *TLS, x0 int64) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x0=%v, (%v:)", tls, x0, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var x Tuint32_t + _, _ = p, x + x = uint32(x0) + p = uintptr(unsafe.Pointer(&_s)) + for { + if !(x != 0) { + break + } + *(*uint8)(unsafe.Pointer(p)) = _digits[x&uint32(63)] + goto _1 + _1: + ; + p++ + x >>= uint32(6) + } + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + return uintptr(unsafe.Pointer(&_s)) +} + +var _s [7]uint8 + +func Xbasename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 598 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + goto _1 + _1: + ; + i-- + } + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('/')) { + break + } + goto _2 + _2: + ; + i-- + } + return s + uintptr(i) +} + +func X__xpg_basename(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xbasename(tls, s) +} + +func Xdirname(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + if !(s != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return __ccgo_ts + 598 + } + i = Xstrlen(tls, s) - uint64(1) + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 606 + } + goto _1 + _1: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) != int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 598 + } + goto _2 + _2: + ; + i-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(i)))) == int32('/')) { + break + } + if !(i != 0) { + return __ccgo_ts + 606 + } + goto _3 + _3: + ; + i-- + } + *(*uint8)(unsafe.Pointer(s + uintptr(i+uint64(1)))) = uint8(0) + return s +} + +func Xffs(tls *TLS, i int32) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint64 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint64(i) + v3 = _a_ctz_64(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsl(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3 int32 + var v2 uint64 + _, _, _ = v1, v2, v3 + if i != 0 { + v2 = uint64(i) + v3 = _a_ctz_64(tls, v2) + goto _4 + _4: + v1 = v3 + int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xffsll(tls *TLS, i int64) (r int32) { + if __ccgo_strace { + trc("tls=%v i=%v, (%v:)", tls, i, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if i != 0 { + v1 = _a_ctz_64(tls, uint64(i)) + int32(1) + } else { + v1 = 0 + } + return v1 +} + +const MM_APPL = 8 +const MM_CONSOLE = 512 +const MM_ERROR = 2 +const MM_FIRM = 4 +const MM_HALT = 1 +const MM_HARD = 1 +const MM_INFO = 4 +const MM_NOCON = 4 +const MM_NOMSG = 1 +const MM_NOSEV = 0 +const MM_NOTOK = -1 +const MM_NRECOV = 128 +const MM_NULLMC = 0 +const MM_NULLSEV = 0 +const MM_OK = 0 +const MM_OPSYS = 32 +const MM_PRINT = 256 +const MM_RECOVER = 64 +const MM_SOFT = 2 +const MM_UTIL = 16 +const MM_WARNING = 3 + +// C documentation +// +// /* +// * If lstr is the first part of bstr, check that the next char in bstr +// * is either \0 or : +// */ +func __strcolcmp(tls *TLS, lstr uintptr, bstr uintptr) (r int32) { + var i Tsize_t + _ = i + i = uint64(0) + for *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 && *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(lstr + uintptr(i)))) { + i++ + } + if *(*uint8)(unsafe.Pointer(lstr + uintptr(i))) != 0 || *(*uint8)(unsafe.Pointer(bstr + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(bstr + uintptr(i)))) != int32(':') { + return int32(1) + } + return 0 +} + +func Xfmtmsg(tls *TLS, classification int64, label uintptr, severity int32, text uintptr, action uintptr, tag uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v classification=%v label=%v severity=%v text=%v action=%v tag=%v, (%v:)", tls, classification, label, severity, text, action, tag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var cmsg, errstring, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 uintptr + var consolefd, i, ret, verb int32 + var msgs [6]uintptr + var _ /* cs at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cmsg, consolefd, errstring, i, msgs, ret, verb, v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8 + ret = 0 + verb = 0 + errstring = uintptr(MM_NULLSEV) + cmsg = Xgetenv(tls, __ccgo_ts+608) + msgs = [6]uintptr{ + 0: __ccgo_ts + 616, + 1: __ccgo_ts + 622, + 2: __ccgo_ts + 631, + 3: __ccgo_ts + 636, + 4: __ccgo_ts + 643, + 5: UintptrFromInt32(0), + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + if severity == int32(MM_HALT) { + errstring = __ccgo_ts + 647 + } else { + if severity == int32(MM_ERROR) { + errstring = __ccgo_ts + 654 + } else { + if severity == int32(MM_WARNING) { + errstring = __ccgo_ts + 662 + } else { + if severity == int32(MM_INFO) { + errstring = __ccgo_ts + 672 + } + } + } + } + if classification&int64(MM_CONSOLE) != 0 { + consolefd = Xopen(tls, __ccgo_ts+679, int32(O_WRONLY), 0) + if consolefd < 0 { + ret = int32(MM_NOCON) + } else { + if label != 0 { + v1 = label + } else { + v1 = __ccgo_ts + } + if label != 0 { + v2 = __ccgo_ts + 378 + } else { + v2 = __ccgo_ts + } + if severity != 0 { + v3 = errstring + } else { + v3 = __ccgo_ts + } + if text != 0 { + v4 = text + } else { + v4 = __ccgo_ts + } + if action != 0 { + v5 = __ccgo_ts + 692 + } else { + v5 = __ccgo_ts + } + if action != 0 { + v6 = action + } else { + v6 = __ccgo_ts + } + if action != 0 { + v7 = __ccgo_ts + 702 + } else { + v7 = __ccgo_ts + } + if tag != 0 { + v8 = tag + } else { + v8 = __ccgo_ts + } + if Xdprintf(tls, consolefd, __ccgo_ts+704, VaList(bp+16, v1, v2, v3, v4, v5, v6, v7, v8)) < int32(1) { + ret = int32(MM_NOCON) + } + Xclose(tls, consolefd) + } + } + if classification&int64(MM_PRINT) != 0 { + for cmsg != 0 && *(*uint8)(unsafe.Pointer(cmsg)) != 0 { + i = 0 + for { + if !(msgs[i] != 0) { + break + } + if !(__strcolcmp(tls, msgs[i], cmsg) != 0) { + break + } + goto _9 + _9: + ; + i++ + } + if msgs[i] == UintptrFromInt32(0) { + //ignore MSGVERB-unrecognized component + verb = int32(0xFF) + break + } else { + verb |= int32(1) << i + cmsg = Xstrchr(tls, cmsg, int32(':')) + if cmsg != 0 { + cmsg++ + } + } + } + if !(verb != 0) { + verb = int32(0xFF) + } + if verb&int32(1) != 0 && label != 0 { + v10 = label + } else { + v10 = __ccgo_ts + } + if verb&int32(1) != 0 && label != 0 { + v11 = __ccgo_ts + 378 + } else { + v11 = __ccgo_ts + } + if verb&int32(2) != 0 && severity != 0 { + v12 = errstring + } else { + v12 = __ccgo_ts + } + if verb&int32(4) != 0 && text != 0 { + v13 = text + } else { + v13 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v14 = __ccgo_ts + 692 + } else { + v14 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v15 = action + } else { + v15 = __ccgo_ts + } + if verb&int32(8) != 0 && action != 0 { + v16 = __ccgo_ts + 702 + } else { + v16 = __ccgo_ts + } + if verb&int32(16) != 0 && tag != 0 { + v17 = tag + } else { + v17 = __ccgo_ts + } + if Xdprintf(tls, int32(2), __ccgo_ts+704, VaList(bp+16, v10, v11, v12, v13, v14, v15, v16, v17)) < int32(1) { + ret |= int32(MM_NOMSG) + } + } + if ret&(Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG)) == Int32FromInt32(MM_NOCON)|Int32FromInt32(MM_NOMSG) { + ret = -int32(1) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xget_current_dir_name(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var res uintptr + var _ /* a at bp+0 */ Tstat + var _ /* b at bp+144 */ Tstat + _ = res + res = Xgetenv(tls, __ccgo_ts+722) + if res != 0 && *(*uint8)(unsafe.Pointer(res)) != 0 && !(Xstat(tls, res, bp) != 0) && !(Xstat(tls, __ccgo_ts+598, bp+144) != 0) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev && (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino == (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return Xstrdup(tls, res) + } + return Xgetcwd(tls, uintptr(0), uint64(0)) +} + +func X__getauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + var auxv uintptr + _ = auxv + auxv = X__libc.Fauxv + if item == uint64(AT_SECURE) { + return uint64(X__libc.Fsecure) + } + for { + if !(*(*Tsize_t)(unsafe.Pointer(auxv)) != 0) { + break + } + if *(*Tsize_t)(unsafe.Pointer(auxv)) == item { + return *(*Tsize_t)(unsafe.Pointer(auxv + 1*8)) + } + goto _1 + _1: + ; + auxv += uintptr(2) * 8 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uint64(0) +} + +func Xgetauxval(tls *TLS, item uint64) (r uint64) { + if __ccgo_strace { + trc("tls=%v item=%v, (%v:)", tls, item, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__getauxval(tls, item) +} + +type Tutsname = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + Fdomainname [65]uint8 +} + +func Xgetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var _ /* temp at bp+0 */ Tutsname + Xuname(tls, bp) + if !(len1 != 0) || Xstrlen(tls, bp+325) >= len1 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + Xstrcpy(tls, name, bp+325) + return 0 +} + +func Xgetentropy(tls *TLS, buffer uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v buffer=%v len1=%v, (%v:)", tls, buffer, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pos uintptr + var ret int32 + var _ /* cs at bp+0 */ int32 + _, _ = pos, ret + ret = 0 + pos = buffer + if len1 > uint64(256) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + for len1 != 0 { + ret = int32(Xgetrandom(tls, pos, len1, uint32(0))) + if ret < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINTR) { + continue + } else { + break + } + } + pos += uintptr(ret) + len1 -= uint64(ret) + ret = 0 + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return ret +} + +func Xgethostid(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +const optpos = 0 + +type Tucontext_t3 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t +} + +type t__ucontext1 = Tucontext_t3 + +func X__getopt_msg(tls *TLS, a uintptr, b uintptr, c uintptr, l Tsize_t) { + if __ccgo_strace { + trc("tls=%v a=%v b=%v c=%v l=%v, (%v:)", tls, a, b, c, l, origin(2)) + } + var __need_unlock, v1 int32 + var f uintptr + _, _, _ = __need_unlock, f, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + b = X__lctrans_cur(tls, b) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + _ = Xfputs(tls, a, f) >= 0 && Xfwrite(tls, b, Xstrlen(tls, b), uint64(1), f) != 0 && Xfwrite(tls, c, uint64(1), l, f) == l && Xputc(tls, int32('\n'), f) != 0 + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xgetopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, k, l, v1, v2, v3 int32 + var optchar uintptr + var _ /* c at bp+0 */ Twchar_t + var _ /* d at bp+4 */ Twchar_t + _, _, _, _, _, _, _ = i, k, l, optchar, v1, v2, v3 + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) != int32('-') { + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') { + v1 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v1)*8)) + return int32(1) + } + return -int32(1) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + Xoptind++ + return -Int32FromInt32(1) + } + if !(X__optpos != 0) { + X__optpos++ + } + v2 = Xmbtowc(tls, bp, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(X__optpos), uint64(MB_LEN_MAX)) + k = v2 + if v2 < 0 { + k = int32(1) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xfffd) /* replacement char */ + } + optchar = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos) + X__optpos += k + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(X__optpos))) != 0) { + Xoptind++ + X__optpos = 0 + } + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') { + optstring++ + } + i = 0 + *(*Twchar_t)(unsafe.Pointer(bp + 4)) = 0 + for cond := true; cond; cond = l != 0 && *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) { + l = Xmbtowc(tls, bp+4, optstring+uintptr(i), uint64(MB_LEN_MAX)) + if l > 0 { + i += l + } else { + i++ + } + } + if *(*Twchar_t)(unsafe.Pointer(bp + 4)) != *(*Twchar_t)(unsafe.Pointer(bp)) || *(*Twchar_t)(unsafe.Pointer(bp)) == int32(':') { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32(':') && Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+726, optchar, uint64(k)) + } + return int32('?') + } + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i)))) == int32(':') { + Xoptarg = uintptr(0) + if int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+int32(1))))) != int32(':') || X__optpos != 0 { + v3 = Xoptind + Xoptind++ + Xoptarg = *(*uintptr)(unsafe.Pointer(argv + uintptr(v3)*8)) + if X__optpos != 0 { + Xoptarg += uintptr(X__optpos) + } + X__optpos = 0 + } + if Xoptind > argc { + Xoptopt = *(*Twchar_t)(unsafe.Pointer(bp)) + if int32(*(*uint8)(unsafe.Pointer(optstring))) == int32(':') { + return int32(':') + } + if Xopterr != 0 { + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+750, optchar, uint64(k)) + } + return int32('?') + } + } + return *(*Twchar_t)(unsafe.Pointer(bp)) +} + +func X__posix_getopt(tls *TLS, argc int32, argv uintptr, optstring uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v, (%v:)", tls, argc, argv, optstring, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetopt(tls, argc, argv, optstring) +} + +const no_argument = 0 +const optional_argument = 2 +const required_argument = 1 + +type Toption = struct { + Fname uintptr + Fhas_arg int32 + Fflag uintptr + Fval int32 +} + +func _permute(tls *TLS, argv uintptr, dest int32, src int32) { + var av, tmp uintptr + var i int32 + _, _, _ = av, i, tmp + av = argv + tmp = *(*uintptr)(unsafe.Pointer(av + uintptr(src)*8)) + i = src + for { + if !(i > dest) { + break + } + *(*uintptr)(unsafe.Pointer(av + uintptr(i)*8)) = *(*uintptr)(unsafe.Pointer(av + uintptr(i-int32(1))*8)) + goto _1 + _1: + ; + i-- + } + *(*uintptr)(unsafe.Pointer(av + uintptr(dest)*8)) = tmp +} + +func ___getopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var cnt, i, i1, resumed, ret, skipped int32 + _, _, _, _, _, _ = cnt, i, i1, resumed, ret, skipped + if !(Xoptind != 0) || Xoptreset != 0 { + Xoptreset = 0 + X__optpos = 0 + Xoptind = int32(1) + } + if Xoptind >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) != 0) { + return -int32(1) + } + skipped = Xoptind + if int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(optstring))) != int32('-') { + i = Xoptind + for { + if i >= argc || !(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) + 1)) != 0 { + break + } + goto _1 + _1: + ; + i++ + } + Xoptind = i + } + resumed = Xoptind + ret = ___getopt_long_core(tls, argc, argv, optstring, longopts, idx, longonly) + if resumed > skipped { + cnt = Xoptind - resumed + i1 = 0 + for { + if !(i1 < cnt) { + break + } + _permute(tls, argv, skipped, Xoptind-int32(1)) + goto _2 + _2: + ; + i1++ + } + Xoptind = skipped + cnt + } + return ret +} + +func ___getopt_long_core(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr, longonly int32) (r int32) { + var arg, name, opt, start, v5, v6 uintptr + var cnt, colon, i, j, l, match, v2 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = arg, cnt, colon, i, j, l, match, name, opt, start, v2, v5, v6 + Xoptarg = uintptr(0) + if longopts != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))))) == int32('-') && (longonly != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) != int32('-') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 2)) != 0) { + colon = BoolInt32(int32(*(*uint8)(unsafe.Pointer(optstring + BoolUintptr(int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(optstring))) == int32('-'))))) == int32(':')) + start = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + uintptr(1) + v2 = Int32FromInt32(0) + i = v2 + cnt = v2 + for { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname != 0) { + break + } + name = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname + opt = start + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('-') { + opt++ + } + for *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') && int32(*(*uint8)(unsafe.Pointer(opt))) == int32(*(*uint8)(unsafe.Pointer(name))) { + name++ + opt++ + } + if *(*uint8)(unsafe.Pointer(opt)) != 0 && int32(*(*uint8)(unsafe.Pointer(opt))) != int32('=') { + goto _1 + } + arg = opt + match = i + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + cnt = int32(1) + break + } + cnt++ + goto _1 + _1: + ; + i++ + } + if cnt == int32(1) && longonly != 0 && int64(arg)-int64(start) == int64(Xmblen(tls, start, uint64(MB_LEN_MAX))) { + l = int32(int64(arg) - int64(start)) + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(optstring + uintptr(i))) != 0) { + break + } + j = 0 + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(start + uintptr(j)))) == int32(*(*uint8)(unsafe.Pointer(optstring + uintptr(i+j))))) { + break + } + goto _4 + _4: + ; + j++ + } + if j == l { + cnt++ + break + } + goto _3 + _3: + ; + i++ + } + } + if cnt == int32(1) { + i = match + opt = arg + Xoptind++ + if int32(*(*uint8)(unsafe.Pointer(opt))) == int32('=') { + if !((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 || !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+782, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptarg = opt + uintptr(1) + } else { + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fhas_arg == int32(required_argument) { + v5 = *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + Xoptarg = v5 + if !(v5 != 0) { + Xoptopt = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + if colon != 0 { + return int32(':') + } + if !(Xopterr != 0) { + return int32('?') + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), __ccgo_ts+750, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname, Xstrlen(tls, (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fname)) + return int32('?') + } + Xoptind++ + } + } + if idx != 0 { + *(*int32)(unsafe.Pointer(idx)) = i + } + if (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag != 0 { + *(*int32)(unsafe.Pointer((*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fflag)) = (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + return 0 + } + return (*(*Toption)(unsafe.Pointer(longopts + uintptr(i)*32))).Fval + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8)) + 1))) == int32('-') { + Xoptopt = 0 + if !(colon != 0) && Xopterr != 0 { + if cnt != 0 { + v6 = __ccgo_ts + 819 + } else { + v6 = __ccgo_ts + 726 + } + X__getopt_msg(tls, *(*uintptr)(unsafe.Pointer(argv)), v6, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2), Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(Xoptind)*8))+uintptr(2))) + } + Xoptind++ + return int32('?') + } + } + return Xgetopt(tls, argc, argv, optstring) +} + +func Xgetopt_long(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, 0) +} + +func Xgetopt_long_only(tls *TLS, argc int32, argv uintptr, optstring uintptr, longopts uintptr, idx uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v argc=%v argv=%v optstring=%v longopts=%v idx=%v, (%v:)", tls, argc, argv, optstring, longopts, idx, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___getopt_long(tls, argc, argv, optstring, longopts, idx, int32(1)) +} + +func Xgetpriority(tls *TLS, which int32, who Tid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v, (%v:)", tls, which, who, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getpriority), int64(which), int64(who))))) + if ret < 0 { + return ret + } + return int32(20) - ret +} + +func Xgetresgid(tls *TLS, rgid uintptr, egid uintptr, sgid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v rgid=%v egid=%v sgid=%v, (%v:)", tls, rgid, egid, sgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresgid), int64(rgid), int64(egid), int64(sgid))))) +} + +func Xgetresuid(tls *TLS, ruid uintptr, euid uintptr, suid uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ruid=%v euid=%v suid=%v, (%v:)", tls, ruid, euid, suid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_getresuid), int64(ruid), int64(euid), int64(suid))))) +} + +func Xgetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret int32 + var v1, v2 uint64 + var _ /* k_rlim at bp+0 */ [2]uint64 + _, _, _ = ret, v1, v2 + ret = int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(Int32FromInt32(0)), int64(rlim))))) + if !(ret != 0) { + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + } + if !(ret != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) { + return ret + } + if X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getrlimit), int64(resource), int64(bp)))) < 0 { + return -int32(1) + } + if (*(*[2]uint64)(unsafe.Pointer(bp)))[0] == -Uint64FromUint64(1) { + v1 = ^Uint64FromUint64(0) + } else { + v1 = (*(*[2]uint64)(unsafe.Pointer(bp)))[0] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = v1 + if (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] == -Uint64FromUint64(1) { + v2 = ^Uint64FromUint64(0) + } else { + v2 = (*(*[2]uint64)(unsafe.Pointer(bp)))[int32(1)] + } + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = v2 + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max >= ^Uint64FromUint64(0) { + (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max = ^Uint64FromUint64(0) + } + return 0 +} + +func Xgetrusage(tls *TLS, who int32, ru uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v who=%v ru=%v, (%v:)", tls, who, ru, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var dest uintptr + var r int32 + var _ /* kru at bp+0 */ [4]int64 + _, _ = dest, r + dest = ru + 32 - uintptr(Uint64FromInt32(4)*Uint64FromInt64(8)) + r = int32(X__syscall2(tls, int64(SYS_getrusage), int64(who), int64(dest))) + if !(r != 0) && Bool(uint64(8) > uint64(8)) { + Xmemcpy(tls, bp, dest, Uint64FromInt32(4)*Uint64FromInt64(8)) + (*Trusage)(unsafe.Pointer(ru)).Fru_utime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[0], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)], + } + (*Trusage)(unsafe.Pointer(ru)).Fru_stime = Ttimeval{ + Ftv_sec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)], + Ftv_usec: (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)], + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xgetsubopt(tls *TLS, opt uintptr, keys uintptr, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v opt=%v keys=%v val=%v, (%v:)", tls, opt, keys, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i int32 + var l Tsize_t + var s, v1, v2 uintptr + _, _, _, _, _ = i, l, s, v1, v2 + s = *(*uintptr)(unsafe.Pointer(opt)) + *(*uintptr)(unsafe.Pointer(val)) = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(opt)) = Xstrchr(tls, s, int32(',')) + if *(*uintptr)(unsafe.Pointer(opt)) != 0 { + v2 = opt + v1 = *(*uintptr)(unsafe.Pointer(v2)) + *(*uintptr)(unsafe.Pointer(v2))++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(opt)) = s + uintptr(Xstrlen(tls, s)) + } + i = 0 + for { + if !(*(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)) != 0) { + break + } + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8))) + if Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(keys + uintptr(i)*8)), s, l) != 0 { + goto _3 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(l)))) == int32('=') { + *(*uintptr)(unsafe.Pointer(val)) = s + uintptr(l) + uintptr(1) + } else { + if *(*uint8)(unsafe.Pointer(s + uintptr(l))) != 0 { + goto _3 + } + } + return i + goto _3 + _3: + ; + i++ + } + return -int32(1) +} + +const R = 2 +const W = 1 +const WR = 3 + +type Tioctl_compat_map = struct { + Fnew_req int32 + Fold_req int32 + Fold_size uint8 + Fdir uint8 + Fforce_align uint8 + Fnoffs uint8 + Foffsets [8]uint8 +} + +/* yields a type for a struct with original size n, with a misaligned + * timeval/timespec expanded from 32- to 64-bit. for use with ioctl + * number producing macros; only size of result is meaningful. */ + +type Tv4l2_event = struct { + Fa Tuint32_t + Fb [8]Tuint64_t + Fc [2]Tuint32_t + Fts [2]Tuint32_t + Fd [9]Tuint32_t +} + +var _compat_map = [20]Tioctl_compat_map{ + 0: { + Fnew_req: int32(SIOCGSTAMP), + Fold_req: int32(SIOCGSTAMP_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 1: { + Fnew_req: int32(SIOCGSTAMPNS), + Fold_req: int32(SIOCGSTAMPNS_OLD), + Fold_size: uint8(8), + Fdir: uint8(R), + Fnoffs: uint8(2), + Foffsets: [8]uint8{ + 1: uint8(4), + }, + }, + 2: { + Fnew_req: int32(uint64(Uint32FromUint32(2)< %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var ap Tva_list + var arg uintptr + var i, r int32 + var _ /* u at bp+0 */ struct { + Fbuf [0][256]uint8 + Falign int64 + F__ccgo_pad2 [248]byte + } + _, _, _, _ = ap, arg, i, r + ap = va + arg = VaUintptr(&ap) + _ = ap + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(req), int64(arg))) + if Bool(Bool(int32(SIOCGSTAMP) != int32(SIOCGSTAMP_OLD)) && req != 0) && r == -int32(ENOTTY) { + i = 0 + for { + if !(uint64(i) < Uint64FromInt64(400)/Uint64FromInt64(20)) { + break + } + if _compat_map[i].Fnew_req != req { + goto _1 + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(W)) + r = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(_compat_map[i].Fold_req), int64(bp))) + if r < 0 { + break + } + _convert_ioctl_struct(tls, uintptr(unsafe.Pointer(&_compat_map))+uintptr(i)*20, bp, arg, int32(R)) + break + goto _1 + _1: + ; + i++ + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xissetugid(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__libc.Fsecure) +} + +func Xlockf(tls *TLS, fd int32, op int32, size Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v op=%v size=%v, (%v:)", tls, fd, op, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var _ /* l at bp+0 */ Tflock + *(*Tflock)(unsafe.Pointer(bp)) = Tflock{ + Fl_type: int16(F_WRLCK), + Fl_whence: int16(1), + Fl_len: size, + } + switch op { + case int32(F_TEST): + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = F_RDLCK + if Xfcntl(tls, fd, int32(F_GETLK), VaList(bp+40, bp)) < 0 { + return -int32(1) + } + if int32((*(*Tflock)(unsafe.Pointer(bp))).Fl_type) == int32(F_UNLCK) || (*(*Tflock)(unsafe.Pointer(bp))).Fl_pid == Xgetpid(tls) { + return 0 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + return -int32(1) + case F_ULOCK: + (*(*Tflock)(unsafe.Pointer(bp))).Fl_type = int16(F_UNLCK) + fallthrough + case int32(F_TLOCK): + return Xfcntl(tls, fd, int32(F_SETLK), VaList(bp+40, bp)) + case int32(F_LOCK): + return Xfcntl(tls, fd, int32(F_SETLKW), VaList(bp+40, bp)) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) +} + +const ACCOUNTING = 9 +const UTMP_FILE = "_PATH_UTMP" +const UTMP_FILENAME = "_PATH_UTMP" +const UT_HOSTSIZE = 256 +const UT_LINESIZE = 32 +const UT_NAMESIZE = 32 +const WTMP_FILE = "_PATH_WTMP" +const WTMP_FILENAME = "_PATH_WTMP" +const _PATH_UTMP = "/dev/null/utmp" +const _PATH_WTMP = "/dev/null/wtmp" +const ut_name = 0 +const utmp = 0 + +type Tlastlog = struct { + Fll_time Ttime_t + Fll_line [32]uint8 + Fll_host [256]uint8 +} + +func Xlogin_tty(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + Xsetsid(tls) + if Xioctl(tls, fd, int32(TIOCSCTTY), VaList(bp+8, UintptrFromInt32(0))) != 0 { + return -int32(1) + } + Xdup2(tls, fd, 0) + Xdup2(tls, fd, int32(1)) + Xdup2(tls, fd, int32(2)) + if fd > int32(2) { + Xclose(tls, fd) + } + return 0 +} + +const MNTOPT_DEFAULTS = "defaults" +const MNTOPT_NOAUTO = "noauto" +const MNTOPT_NOSUID = "nosuid" +const MNTOPT_RO = "ro" +const MNTOPT_RW = "rw" +const MNTOPT_SUID = "suid" +const MNTTYPE_IGNORE = "ignore" +const MNTTYPE_NFS = "nfs" +const MNTTYPE_SWAP = "swap" +const MOUNTED = "/etc/mtab" +const SENTINEL = 0 + +type Tmntent = struct { + Fmnt_fsname uintptr + Fmnt_dir uintptr + Fmnt_type uintptr + Fmnt_opts uintptr + Fmnt_freq int32 + Fmnt_passno int32 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +var _internal_buf uintptr +var _internal_bufsize Tsize_t + +func Xsetmntent(tls *TLS, name uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v mode=%v, (%v:)", tls, name, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfopen(tls, name, mode) +} + +func Xendmntent(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + if f != 0 { + Xfclose(tls, f) + } + return int32(1) +} + +func _unescape_ent(tls *TLS, beg uintptr) (r uintptr) { + var cval uint8 + var dest, src, val, v1, v2, v3, v4, v6, v7, v8, v9 uintptr + var i int32 + _, _, _, _, _, _, _, _, _, _, _, _, _ = cval, dest, i, src, val, v1, v2, v3, v4, v6, v7, v8, v9 + dest = beg + src = beg + for *(*uint8)(unsafe.Pointer(src)) != 0 { + cval = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(src))) != int32('\\') { + v1 = dest + dest++ + v2 = src + src++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + continue + } + if int32(*(*uint8)(unsafe.Pointer(src + 1))) == int32('\\') { + src++ + v3 = dest + dest++ + v4 = src + src++ + *(*uint8)(unsafe.Pointer(v3)) = *(*uint8)(unsafe.Pointer(v4)) + continue + } + val = src + uintptr(1) + i = 0 + for { + if !(i < int32(3)) { + break + } + if int32(*(*uint8)(unsafe.Pointer(val))) >= int32('0') && int32(*(*uint8)(unsafe.Pointer(val))) <= int32('7') { + cval = uint8(int32(cval) << Int32FromInt32(3)) + v6 = val + val++ + cval = uint8(int32(cval) + (int32(*(*uint8)(unsafe.Pointer(v6))) - Int32FromUint8('0'))) + } else { + break + } + goto _5 + _5: + ; + i++ + } + if cval != 0 { + v7 = dest + dest++ + *(*uint8)(unsafe.Pointer(v7)) = cval + src = val + } else { + v8 = dest + dest++ + v9 = src + src++ + *(*uint8)(unsafe.Pointer(v8)) = *(*uint8)(unsafe.Pointer(v9)) + } + } + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + return beg +} + +func Xgetmntent_r(tls *TLS, f uintptr, mnt uintptr, linebuf uintptr, buflen int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v linebuf=%v buflen=%v, (%v:)", tls, f, mnt, linebuf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var i, len1 Tsize_t + var use_internal int32 + var _ /* n at bp+0 */ [8]int32 + _, _, _ = i, len1, use_internal + use_internal = BoolInt32(linebuf == uintptr(unsafe.Pointer(&_internal_buf))) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq = 0 + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno = 0 + for cond := true; cond; cond = int32(*(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])))) == int32('#') || uint64((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]) == len1 { + if use_internal != 0 { + Xgetline(tls, uintptr(unsafe.Pointer(&_internal_buf)), uintptr(unsafe.Pointer(&_internal_bufsize)), f) + linebuf = _internal_buf + } else { + Xfgets(tls, linebuf, buflen, f) + } + if Xfeof(tls, f) != 0 || Xferror(tls, f) != 0 { + return uintptr(0) + } + if !(Xstrchr(tls, linebuf, int32('\n')) != 0) { + Xfscanf(tls, f, __ccgo_ts+843, 0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ERANGE) + return uintptr(0) + } + len1 = Xstrlen(tls, linebuf) + if len1 > uint64(INT_MAX) { + continue + } + i = uint64(0) + for { + if !(i < Uint64FromInt64(32)/Uint64FromInt64(4)) { + break + } + (*(*[8]int32)(unsafe.Pointer(bp)))[i] = int32(len1) + goto _1 + _1: + ; + i++ + } + Xsscanf(tls, linebuf, __ccgo_ts+855, VaList(bp+40, bp, bp+uintptr(1)*4, bp+uintptr(2)*4, bp+uintptr(3)*4, bp+uintptr(4)*4, bp+uintptr(5)*4, bp+uintptr(6)*4, bp+uintptr(7)*4, mnt+32, mnt+36)) + } + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(1)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(3)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(5)]))) = uint8(0) + *(*uint8)(unsafe.Pointer(linebuf + uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(7)]))) = uint8(0) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[0])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(2)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(4)])) + (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts = _unescape_ent(tls, linebuf+uintptr((*(*[8]int32)(unsafe.Pointer(bp)))[int32(6)])) + return mnt +} + +func Xgetmntent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetmntent_r(tls, f, uintptr(unsafe.Pointer(&_mnt)), uintptr(unsafe.Pointer(&_internal_buf)), 0) +} + +var _mnt Tmntent + +func Xaddmntent(tls *TLS, f uintptr, mnt uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mnt=%v, (%v:)", tls, f, mnt, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xfseek(tls, f, 0, int32(2)) != 0 { + return int32(1) + } + return BoolInt32(Xfprintf(tls, f, __ccgo_ts+910, VaList(bp+8, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_fsname, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_dir, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_type, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_freq, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_passno)) < 0) +} + +func Xhasmntopt(tls *TLS, mnt uintptr, opt uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mnt=%v opt=%v, (%v:)", tls, mnt, opt, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrstr(tls, (*Tmntent)(unsafe.Pointer(mnt)).Fmnt_opts, opt) +} + +type Thistory = struct { + Fchain uintptr + Fdev Tdev_t + Fino Tino_t + Flevel int32 + Fbase int32 +} + +func _do_nftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32, h uintptr) (r1 int32) { + bp := tls.Alloc(192) + defer tls.Free(192) + var d, de, v10 uintptr + var dfd, err, r, type1, v11, v12, v3, v4, v7 int32 + var j, k, l Tsize_t + var v1 uint64 + var v13, v8 bool + var v2 Tino_t + var _ /* lev at bp+176 */ TFTW + var _ /* new at bp+144 */ Thistory + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, de, dfd, err, j, k, l, r, type1, v1, v10, v11, v12, v13, v2, v3, v4, v7, v8 + l = Xstrlen(tls, path) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(l-uint64(1))))) == int32('/') { + v1 = l - uint64(1) + } else { + v1 = l + } + j = v1 + v2 = Uint64FromInt32(0) + (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino = v2 + (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev = v2 + if flags&int32(FTW_PHYS) != 0 { + v3 = Xlstat(tls, path, bp) + } else { + v3 = BoolInt32(Xstat(tls, path, bp) < 0) + } + if v3 != 0 { + if !(flags&Int32FromInt32(FTW_PHYS) != 0) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) && !(Xlstat(tls, path, bp) != 0) { + type1 = int32(FTW_SLN) + } else { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EACCES) { + return -int32(1) + } else { + type1 = int32(FTW_NS) + } + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + if flags&int32(FTW_DEPTH) != 0 { + type1 = int32(FTW_DP) + } else { + type1 = int32(FTW_D) + } + } else { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + if flags&int32(FTW_PHYS) != 0 { + type1 = int32(FTW_SL) + } else { + type1 = int32(FTW_SLN) + } + } else { + type1 = int32(FTW_F) + } + } + } + if flags&int32(FTW_MOUNT) != 0 && h != 0 && type1 != int32(FTW_NS) && (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*Thistory)(unsafe.Pointer(h)).Fdev { + return 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fchain = h + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fdev = (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fino = (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino + if h != 0 { + v4 = (*Thistory)(unsafe.Pointer(h)).Flevel + int32(1) + } else { + v4 = 0 + } + (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel = v4 + (*(*Thistory)(unsafe.Pointer(bp + 144))).Fbase = int32(j + uint64(1)) + (*(*TFTW)(unsafe.Pointer(bp + 176))).Flevel = (*(*Thistory)(unsafe.Pointer(bp + 144))).Flevel + if h != 0 { + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = (*Thistory)(unsafe.Pointer(h)).Fbase + } else { + k = j + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k)))) == int32('/')) { + break + } + goto _5 + _5: + ; + k-- + } + for { + if !(k != 0 && int32(*(*uint8)(unsafe.Pointer(path + uintptr(k-uint64(1))))) != int32('/')) { + break + } + goto _6 + _6: + ; + k-- + } + (*(*TFTW)(unsafe.Pointer(bp + 176))).Fbase = int32(k) + } + if type1 == int32(FTW_D) || type1 == int32(FTW_DP) { + dfd = Xopen(tls, path, O_RDONLY, 0) + err = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if dfd < 0 && err == int32(EACCES) { + type1 = int32(FTW_DNR) + } + if !(fd_limit != 0) { + Xclose(tls, dfd) + } + } + if v8 = !(flags&Int32FromInt32(FTW_DEPTH) != 0); v8 { + v7 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v7 + } + if v8 && v7 != 0 { + return r + } + for { + if !(h != 0) { + break + } + if (*Thistory)(unsafe.Pointer(h)).Fdev == (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev && (*Thistory)(unsafe.Pointer(h)).Fino == (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino { + return 0 + } + goto _9 + _9: + ; + h = (*Thistory)(unsafe.Pointer(h)).Fchain + } + if (type1 == int32(FTW_D) || type1 == int32(FTW_DP)) && fd_limit != 0 { + if dfd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return -int32(1) + } + d = Xfdopendir(tls, dfd) + if d != 0 { + for { + v10 = Xreaddir(tls, d) + de = v10 + if !(v10 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) { + continue + } + if Xstrlen(tls, de+19) >= uint64(PATH_MAX)-l { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + Xclosedir(tls, d) + return -int32(1) + } + *(*uint8)(unsafe.Pointer(path + uintptr(j))) = uint8('/') + Xstrcpy(tls, path+uintptr(j)+uintptr(1), de+19) + v11 = _do_nftw(tls, path, fn, fd_limit-int32(1), flags, bp+144) + r = v11 + if v11 != 0 { + Xclosedir(tls, d) + return r + } + } + Xclosedir(tls, d) + } else { + Xclose(tls, dfd) + return -int32(1) + } + } + *(*uint8)(unsafe.Pointer(path + uintptr(l))) = uint8(0) + if v13 = flags&int32(FTW_DEPTH) != 0; v13 { + v12 = (*(*func(*TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{fn})))(tls, path, bp, type1, bp+176) + r = v12 + } + if v13 && v12 != 0 { + return r + } + return 0 +} + +func Xnftw(tls *TLS, path uintptr, fn uintptr, fd_limit int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v fn=%v fd_limit=%v flags=%v, (%v:)", tls, path, fn, fd_limit, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var l Tsize_t + var r int32 + var _ /* cs at bp+0 */ int32 + var _ /* pathbuf at bp+4 */ [4097]uint8 + _, _ = l, r + if fd_limit <= 0 { + return 0 + } + l = Xstrlen(tls, path) + if l > uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + Xmemcpy(tls, bp+4, path, l+uint64(1)) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + r = _do_nftw(tls, bp+4, fn, fd_limit, flags, UintptrFromInt32(0)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return r +} + +/* Nonstandard, but vastly superior to the standard functions */ + +func Xopenpty(tls *TLS, pm uintptr, ps uintptr, name uintptr, tio uintptr, ws uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pm=%v ps=%v name=%v tio=%v ws=%v, (%v:)", tls, pm, ps, name, tio, ws, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var m, s, v1 int32 + var _ /* buf at bp+8 */ [20]uint8 + var _ /* cs at bp+4 */ int32 + var _ /* n at bp+0 */ int32 + _, _, _ = m, s, v1 + *(*int32)(unsafe.Pointer(bp)) = 0 + m = Xopen(tls, __ccgo_ts+929, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + if m < 0 { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + if Xioctl(tls, m, int32(TIOCSPTLCK), VaList(bp+40, bp)) != 0 || Xioctl(tls, m, Int32FromUint32(TIOCGPTN), VaList(bp+40, bp)) != 0 { + goto fail + } + if !(name != 0) { + name = bp + 8 + } + Xsnprintf(tls, name, uint64(20), __ccgo_ts+939, VaList(bp+40, *(*int32)(unsafe.Pointer(bp)))) + v1 = Xopen(tls, name, Int32FromInt32(O_RDWR)|Int32FromInt32(O_NOCTTY), 0) + s = v1 + if v1 < 0 { + goto fail + } + if tio != 0 { + Xtcsetattr(tls, s, TCSANOW, tio) + } + if ws != 0 { + Xioctl(tls, s, int32(TIOCSWINSZ), VaList(bp+40, ws)) + } + *(*int32)(unsafe.Pointer(pm)) = m + *(*int32)(unsafe.Pointer(ps)) = s + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return 0 + goto fail +fail: + ; + Xclose(tls, m) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + return -int32(1) +} + +func Xptsname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var err int32 + _ = err + err = X__ptsname_r(tls, fd, uintptr(unsafe.Pointer(&_buf2)), uint64(22)) + if err != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = err + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_buf2)) +} + +var _buf2 [22]uint8 + +func Xposix_openpt(tls *TLS, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xopen(tls, __ccgo_ts+929, flags, 0) + if r < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSPC) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAGAIN) + } + return r +} + +func Xgrantpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xunlockpt(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* unlock at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = 0 + return Xioctl(tls, fd, int32(TIOCSPTLCK), VaList(bp+16, bp)) +} + +func X__ptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var err, v1 int32 + var _ /* pty at bp+0 */ int32 + _, _ = err, v1 + if !(buf != 0) { + len1 = uint64(0) + } + v1 = int32(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Uint32FromUint32(TIOCGPTN)), int64(bp))) + err = v1 + if v1 != 0 { + return -err + } + if uint64(Xsnprintf(tls, buf, len1, __ccgo_ts+939, VaList(bp+16, *(*int32)(unsafe.Pointer(bp))))) >= len1 { + return int32(ERANGE) + } + return 0 +} + +func Xptsname_r(tls *TLS, fd int32, buf uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v, (%v:)", tls, fd, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ptsname_r(tls, fd, buf, len1) +} + +func _slash_len(tls *TLS, s uintptr) (r Tsize_t) { + var s0 uintptr + _ = s0 + s0 = s + for int32(*(*uint8)(unsafe.Pointer(s))) == int32('/') { + s++ + } + return uint64(int64(s) - int64(s0)) +} + +func Xrealpath(tls *TLS, filename uintptr, resolved uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v resolved=%v, (%v:)", tls, filename, resolved, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(8208) + defer tls.Free(8208) + var check_dir, up int32 + var cnt, l, l0, nup, p, q, v10, v11, v4, v5, v6, v7, v9 Tsize_t + var k Tssize_t + var z uintptr + var _ /* output at bp+4097 */ [4096]uint8 + var _ /* stack at bp+0 */ [4097]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = check_dir, cnt, k, l, l0, nup, p, q, up, z, v10, v11, v4, v5, v6, v7, v9 + cnt = uint64(0) + nup = uint64(0) + check_dir = 0 + if !(filename != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + l = Xstrnlen(tls, filename, uint64(4097)) + if !(l != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if l >= uint64(PATH_MAX) { + goto toolong + } + p = uint64(4097) - l - uint64(1) + q = uint64(0) + Xmemcpy(tls, bp+uintptr(p), filename, l+uint64(1)) + /* Main loop. Each iteration pops the next part from stack of + * remaining path components and consumes any slashes that follow. + * If not a link, it's moved to output; if a link, contents are + * pushed to the stack. */ + goto restart +restart: + ; +_3: + ; + /* If stack starts with /, the whole component is / or // + * and the output state must be reset. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + check_dir = 0 + nup = uint64(0) + q = uint64(0) + v4 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v4] = uint8('/') + p++ + /* Initial // is special. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p+uint64(1)]) != int32('/') { + v5 = q + q++ + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[v5] = uint8('/') + } + goto _2 + } + z = X__strchrnul(tls, bp+uintptr(p), int32('/')) + v6 = uint64(int64(z) - int64(bp+uintptr(p))) + l = v6 + l0 = v6 + if !(l != 0) && !(check_dir != 0) { + goto _1 + } + /* Skip any . component but preserve check_dir status. */ + if l == uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('.') { + p += l + goto _2 + } + /* Copy next component onto output at least temporarily, to + * call readlink, but wait to advance output position until + * determining it's not a link. */ + if q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + if !(p != 0) { + goto toolong + } + p-- + v7 = p + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v7] = uint8('/') + l++ + } + if q+l >= uint64(PATH_MAX) { + goto toolong + } + Xmemcpy(tls, bp+4097+uintptr(q), bp+uintptr(p), l) + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q+l] = uint8(0) + p += l + up = 0 + if l0 == uint64(2) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(2)]) == int32('.') && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p-uint64(1)]) == int32('.') { + up = int32(1) + /* Any non-.. path components we could cancel start + * after nup repetitions of the 3-byte string "../"; + * if there are none, accumulate .. components to + * later apply to cwd, if needed. */ + if q <= uint64(3)*nup { + nup++ + q += l + goto _2 + } + /* When previous components are already known to be + * directories, processing .. can skip readlink. */ + if !(check_dir != 0) { + goto skip_readlink + } + } + k = Xreadlink(tls, bp+4097, bp, p) + if uint64(k) == p { + goto toolong + } + if !(k != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if !(k < 0) { + goto _8 + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return uintptr(0) + } + goto skip_readlink +skip_readlink: + ; + check_dir = 0 + if up != 0 { + for q != 0 && int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q-uint64(1)]) != int32('/') { + q-- + } + if q > uint64(1) && (q > uint64(2) || int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/')) { + q-- + } + goto _2 + } + if l0 != 0 { + q += l + } + check_dir = int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) + goto _2 +_8: + ; + cnt++ + v9 = cnt + if v9 == uint64(SYMLOOP_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ELOOP) + return uintptr(0) + } + /* If link contents end in /, strip any slashes already on + * stack to avoid /->// or //->/// or spurious toolong. */ + if int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[k-int64(1)]) == int32('/') { + for int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[p]) == int32('/') { + p++ + } + } + p -= uint64(k) + Xmemmove(tls, bp+uintptr(p), bp, uint64(k)) + /* Skip the stack advancement in case we have a new + * absolute base path. */ + goto restart + goto _2 +_2: + ; + p += _slash_len(tls, bp+uintptr(p)) + goto _3 + goto _1 +_1: + ; + (*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[q] = uint8(0) + if int32((*(*[4096]uint8)(unsafe.Pointer(bp + 4097)))[0]) != int32('/') { + if !(Xgetcwd(tls, bp, uint64(4097)) != 0) { + return uintptr(0) + } + l = Xstrlen(tls, bp) + /* Cancel any initial .. components. */ + p = uint64(0) + for { + v10 = nup + nup-- + if !(v10 != 0) { + break + } + for l > uint64(1) && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + l-- + } + if l > uint64(1) { + l-- + } + p += uint64(2) + if p < q { + p++ + } + } + if q-p != 0 && int32((*(*[4097]uint8)(unsafe.Pointer(bp)))[l-uint64(1)]) != int32('/') { + v11 = l + l++ + (*(*[4097]uint8)(unsafe.Pointer(bp)))[v11] = uint8('/') + } + if l+(q-p)+uint64(1) >= uint64(PATH_MAX) { + goto toolong + } + Xmemmove(tls, bp+4097+uintptr(l), bp+4097+uintptr(p), q-p+uint64(1)) + Xmemcpy(tls, bp+4097, bp, l) + q = l + q - p + } + if resolved != 0 { + return Xmemcpy(tls, resolved, bp+4097, q+uint64(1)) + } else { + return Xstrdup(tls, bp+4097) + } + goto toolong +toolong: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) +} + +func Xsetdomainname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setdomainname), int64(name), int64(len1))))) +} + +func Xsetpriority(tls *TLS, which int32, who Tid_t, prio int32) (r int32) { + if __ccgo_strace { + trc("tls=%v which=%v who=%v prio=%v, (%v:)", tls, which, who, prio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setpriority), int64(which), int64(who), int64(prio))))) +} + +type Tctx = struct { + Flim [2]uint64 + Fres int32 + Ferr int32 +} + +func _do_setrlimit(tls *TLS, p uintptr) { + var c uintptr + _ = c + c = p + if (*Tctx)(unsafe.Pointer(c)).Ferr > 0 { + return + } + (*Tctx)(unsafe.Pointer(c)).Ferr = int32(-X__syscall2(tls, int64(SYS_setrlimit), int64((*Tctx)(unsafe.Pointer(c)).Fres), int64(c))) +} + +func Xsetrlimit(tls *TLS, resource int32, rlim uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v resource=%v rlim=%v, (%v:)", tls, resource, rlim, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var ret int32 + var v1, v2 uint64 + var _ /* c at bp+16 */ Tctx + var _ /* tmp at bp+0 */ Trlimit + _, _, _ = ret, v1, v2 + if ^Uint64FromUint64(0) != ^Uint64FromUint64(0) { + *(*Trlimit)(unsafe.Pointer(bp)) = *(*Trlimit)(unsafe.Pointer(rlim)) + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_cur = ^Uint64FromUint64(0) + } + if (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max >= ^Uint64FromUint64(0) { + (*(*Trlimit)(unsafe.Pointer(bp))).Frlim_max = ^Uint64FromUint64(0) + } + rlim = bp + } + ret = int32(X__syscall4(tls, int64(SYS_prlimit64), int64(Int32FromInt32(0)), int64(resource), int64(rlim), int64(Int32FromInt32(0)))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur < ^Uint64FromUint64(0) { + v1 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_cur + } else { + v1 = ^Uint64FromUint64(0) + } + if (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max < ^Uint64FromUint64(0) { + v2 = (*Trlimit)(unsafe.Pointer(rlim)).Frlim_max + } else { + v2 = ^Uint64FromUint64(0) + } + *(*Tctx)(unsafe.Pointer(bp + 16)) = Tctx{ + Flim: [2]uint64{ + 0: v1, + 1: v2, + }, + Fres: resource, + Ferr: -int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setrlimit), bp+16) + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr != 0 { + if (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr > 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = (*(*Tctx)(unsafe.Pointer(bp + 16))).Ferr + } + return -int32(1) + } + return 0 +} + +func Xsyscall(tls *TLS, n int64, va uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v n=%v va=%v, (%v:)", tls, n, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, b, c, d, e, f Tsyscall_arg_t + var ap Tva_list + _, _, _, _, _, _, _ = a, ap, b, c, d, e, f + ap = va + a = VaInt64(&ap) + b = VaInt64(&ap) + c = VaInt64(&ap) + d = VaInt64(&ap) + e = VaInt64(&ap) + f = VaInt64(&ap) + _ = ap + return X__syscall_ret(tls, uint64(X__syscall6(tls, n, a, b, c, d, e, f))) +} + +const AF_ALG = 38 +const AF_APPLETALK = 5 +const AF_ASH = 18 +const AF_ATMPVC = 8 +const AF_ATMSVC = 20 +const AF_AX25 = 3 +const AF_BLUETOOTH = 31 +const AF_BRIDGE = 7 +const AF_CAIF = 37 +const AF_CAN = 29 +const AF_DECnet = 12 +const AF_ECONET = 19 +const AF_FILE = 1 +const AF_IB = 27 +const AF_IEEE802154 = 36 +const AF_INET = 2 +const AF_INET6 = 10 +const AF_IPX = 4 +const AF_IRDA = 23 +const AF_ISDN = 34 +const AF_IUCV = 32 +const AF_KCM = 41 +const AF_KEY = 15 +const AF_LLC = 26 +const AF_LOCAL = 1 +const AF_MAX = 45 +const AF_MPLS = 28 +const AF_NETBEUI = 13 +const AF_NETLINK = 16 +const AF_NETROM = 6 +const AF_NFC = 39 +const AF_PACKET = 17 +const AF_PHONET = 35 +const AF_PPPOX = 24 +const AF_QIPCRTR = 42 +const AF_RDS = 21 +const AF_ROSE = 11 +const AF_ROUTE = 16 +const AF_RXRPC = 33 +const AF_SECURITY = 14 +const AF_SMC = 43 +const AF_SNA = 22 +const AF_TIPC = 30 +const AF_UNIX = 1 +const AF_UNSPEC = 0 +const AF_VSOCK = 40 +const AF_WANPIPE = 25 +const AF_X25 = 9 +const AF_XDP = 44 +const LOG_ALERT = 1 +const LOG_AUTH = 32 +const LOG_AUTHPRIV = 80 +const LOG_CONS = 2 +const LOG_CRIT = 2 +const LOG_CRON = 72 +const LOG_DAEMON = 24 +const LOG_DEBUG = 7 +const LOG_EMERG = 0 +const LOG_ERR = 3 +const LOG_FACMASK = 1016 +const LOG_FTP = 88 +const LOG_INFO = 6 +const LOG_KERN = 0 +const LOG_LOCAL0 = 128 +const LOG_LOCAL1 = 136 +const LOG_LOCAL2 = 144 +const LOG_LOCAL3 = 152 +const LOG_LOCAL4 = 160 +const LOG_LOCAL5 = 168 +const LOG_LOCAL6 = 176 +const LOG_LOCAL7 = 184 +const LOG_LPR = 48 +const LOG_MAIL = 16 +const LOG_NDELAY = 8 +const LOG_NEWS = 56 +const LOG_NFACILITIES = 24 +const LOG_NOTICE = 5 +const LOG_NOWAIT = 16 +const LOG_ODELAY = 4 +const LOG_PERROR = 32 +const LOG_PID = 1 +const LOG_PRIMASK = 7 +const LOG_SYSLOG = 40 +const LOG_USER = 8 +const LOG_UUCP = 64 +const LOG_WARNING = 4 +const MSG_BATCH = 262144 +const MSG_CMSG_CLOEXEC = 1073741824 +const MSG_CONFIRM = 2048 +const MSG_CTRUNC = 8 +const MSG_DONTROUTE = 4 +const MSG_DONTWAIT = 64 +const MSG_EOR = 128 +const MSG_ERRQUEUE = 8192 +const MSG_FASTOPEN = 536870912 +const MSG_FIN = 512 +const MSG_MORE = 32768 +const MSG_NOSIGNAL = 16384 +const MSG_OOB = 1 +const MSG_PEEK = 2 +const MSG_PROXY = 16 +const MSG_RST = 4096 +const MSG_SYN = 1024 +const MSG_TRUNC = 32 +const MSG_WAITALL = 256 +const MSG_WAITFORONE = 65536 +const MSG_ZEROCOPY = 67108864 +const PF_ALG = 38 +const PF_APPLETALK = 5 +const PF_ASH = 18 +const PF_ATMPVC = 8 +const PF_ATMSVC = 20 +const PF_AX25 = 3 +const PF_BLUETOOTH = 31 +const PF_BRIDGE = 7 +const PF_CAIF = 37 +const PF_CAN = 29 +const PF_DECnet = 12 +const PF_ECONET = 19 +const PF_FILE = 1 +const PF_IB = 27 +const PF_IEEE802154 = 36 +const PF_INET = 2 +const PF_INET6 = 10 +const PF_IPX = 4 +const PF_IRDA = 23 +const PF_ISDN = 34 +const PF_IUCV = 32 +const PF_KCM = 41 +const PF_KEY = 15 +const PF_LLC = 26 +const PF_LOCAL = 1 +const PF_MAX = 45 +const PF_MPLS = 28 +const PF_NETBEUI = 13 +const PF_NETLINK = 16 +const PF_NETROM = 6 +const PF_NFC = 39 +const PF_PACKET = 17 +const PF_PHONET = 35 +const PF_PPPOX = 24 +const PF_QIPCRTR = 42 +const PF_RDS = 21 +const PF_ROSE = 11 +const PF_ROUTE = 16 +const PF_RXRPC = 33 +const PF_SECURITY = 14 +const PF_SMC = 43 +const PF_SNA = 22 +const PF_TIPC = 30 +const PF_UNIX = 1 +const PF_UNSPEC = 0 +const PF_VSOCK = 40 +const PF_WANPIPE = 25 +const PF_X25 = 9 +const PF_XDP = 44 +const SCM_CREDENTIALS = 2 +const SCM_RIGHTS = 1 +const SCM_TIMESTAMP = 29 +const SCM_TIMESTAMPING = 37 +const SCM_TIMESTAMPING_OPT_STATS = 54 +const SCM_TIMESTAMPING_PKTINFO = 58 +const SCM_TIMESTAMPNS = 35 +const SCM_TXTIME = 61 +const SCM_WIFI_STATUS = 41 +const SHUT_RD = 0 +const SHUT_RDWR = 2 +const SHUT_WR = 1 +const SOCK_CLOEXEC = 524288 +const SOCK_DCCP = 6 +const SOCK_DGRAM = 2 +const SOCK_NONBLOCK = 2048 +const SOCK_PACKET = 10 +const SOCK_RAW = 3 +const SOCK_RDM = 4 +const SOCK_SEQPACKET = 5 +const SOCK_STREAM = 1 +const SOL_AAL = 265 +const SOL_ALG = 279 +const SOL_ATM = 264 +const SOL_BLUETOOTH = 274 +const SOL_CAIF = 278 +const SOL_DCCP = 269 +const SOL_DECNET = 261 +const SOL_ICMPV6 = 58 +const SOL_IP = 0 +const SOL_IPV6 = 41 +const SOL_IRDA = 266 +const SOL_IUCV = 277 +const SOL_KCM = 281 +const SOL_LLC = 268 +const SOL_NETBEUI = 267 +const SOL_NETLINK = 270 +const SOL_NFC = 280 +const SOL_PACKET = 263 +const SOL_PNPIPE = 275 +const SOL_PPPOL2TP = 273 +const SOL_RAW = 255 +const SOL_RDS = 276 +const SOL_RXRPC = 272 +const SOL_SOCKET = 1 +const SOL_TIPC = 271 +const SOL_TLS = 282 +const SOL_X25 = 262 +const SOL_XDP = 283 +const SOMAXCONN = 128 +const SO_ACCEPTCONN = 30 +const SO_ATTACH_BPF = 50 +const SO_ATTACH_FILTER = 26 +const SO_ATTACH_REUSEPORT_CBPF = 51 +const SO_ATTACH_REUSEPORT_EBPF = 52 +const SO_BINDTODEVICE = 25 +const SO_BINDTOIFINDEX = 62 +const SO_BPF_EXTENSIONS = 48 +const SO_BROADCAST = 6 +const SO_BSDCOMPAT = 14 +const SO_BUSY_POLL = 46 +const SO_BUSY_POLL_BUDGET = 70 +const SO_CNX_ADVICE = 53 +const SO_COOKIE = 57 +const SO_DEBUG = 1 +const SO_DETACH_BPF = 27 +const SO_DETACH_FILTER = 27 +const SO_DETACH_REUSEPORT_BPF = 68 +const SO_DOMAIN = 39 +const SO_DONTROUTE = 5 +const SO_ERROR = 4 +const SO_GET_FILTER = 26 +const SO_INCOMING_CPU = 49 +const SO_INCOMING_NAPI_ID = 56 +const SO_KEEPALIVE = 9 +const SO_LINGER = 13 +const SO_LOCK_FILTER = 44 +const SO_MARK = 36 +const SO_MAX_PACING_RATE = 47 +const SO_MEMINFO = 55 +const SO_NOFCS = 43 +const SO_NO_CHECK = 11 +const SO_OOBINLINE = 10 +const SO_PASSCRED = 16 +const SO_PASSSEC = 34 +const SO_PEEK_OFF = 42 +const SO_PEERCRED = 17 +const SO_PEERGROUPS = 59 +const SO_PEERNAME = 28 +const SO_PEERSEC = 31 +const SO_PREFER_BUSY_POLL = 69 +const SO_PRIORITY = 12 +const SO_PROTOCOL = 38 +const SO_RCVBUF = 8 +const SO_RCVBUFFORCE = 33 +const SO_RCVLOWAT = 18 +const SO_RCVTIMEO = 20 +const SO_REUSEADDR = 2 +const SO_REUSEPORT = 15 +const SO_RXQ_OVFL = 40 +const SO_SECURITY_AUTHENTICATION = 22 +const SO_SECURITY_ENCRYPTION_NETWORK = 24 +const SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +const SO_SELECT_ERR_QUEUE = 45 +const SO_SNDBUF = 7 +const SO_SNDBUFFORCE = 32 +const SO_SNDLOWAT = 19 +const SO_SNDTIMEO = 21 +const SO_TIMESTAMP = 29 +const SO_TIMESTAMPING = 37 +const SO_TIMESTAMPNS = 35 +const SO_TXTIME = 61 +const SO_TYPE = 3 +const SO_WIFI_STATUS = 41 +const SO_ZEROCOPY = 60 + +type Tsocklen_t = uint32 + +type Tsa_family_t = uint16 + +type Tmsghdr = struct { + Fmsg_name uintptr + Fmsg_namelen Tsocklen_t + Fmsg_iov uintptr + F__pad1 int32 + Fmsg_iovlen int32 + Fmsg_control uintptr + F__pad2 int32 + Fmsg_controllen Tsocklen_t + Fmsg_flags int32 +} + +type Tcmsghdr = struct { + F__pad1 int32 + Fcmsg_len Tsocklen_t + Fcmsg_level int32 + Fcmsg_type int32 +} + +type Tlinger = struct { + Fl_onoff int32 + Fl_linger int32 +} + +type Tsockaddr = struct { + Fsa_family Tsa_family_t + Fsa_data [14]uint8 +} + +type Tsockaddr_storage = struct { + Fss_family Tsa_family_t + F__ss_padding [118]uint8 + F__ss_align uint64 +} + +type t__ucontext2 = Tucontext_t2 + +var _lock2 [1]int32 +var _log_ident [32]uint8 +var _log_opt int32 +var _log_facility = Int32FromInt32(1) << Int32FromInt32(3) +var _log_mask = int32(0xff) +var _log_fd = -int32(1) + +func Xsetlogmask(tls *TLS, maskpri int32) (r int32) { + if __ccgo_strace { + trc("tls=%v maskpri=%v, (%v:)", tls, maskpri, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + ret = _log_mask + if maskpri != 0 { + _log_mask = maskpri + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + return ret +} + +var _log_addr = struct { + Fsun_family int16 + Fsun_path [9]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [9]uint8{'/', 'd', 'e', 'v', '/', 'l', 'o', 'g'}, +} + +func Xcloselog(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + Xclose(tls, _log_fd) + _log_fd = -int32(1) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func ___openlog(tls *TLS) { + _log_fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if _log_fd >= 0 { + Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) + } +} + +func Xopenlog(tls *TLS, ident uintptr, opt int32, facility int32) { + if __ccgo_strace { + trc("tls=%v ident=%v opt=%v facility=%v, (%v:)", tls, ident, opt, facility, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var n Tsize_t + var _ /* cs at bp+0 */ int32 + _ = n + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + if ident != 0 { + n = Xstrnlen(tls, ident, Uint64FromInt64(32)-Uint64FromInt32(1)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&_log_ident)), ident, n) + _log_ident[n] = uint8(0) + } else { + _log_ident[0] = uint8(0) + } + _log_opt = opt + _log_facility = facility + if opt&int32(LOG_NDELAY) != 0 && _log_fd < 0 { + ___openlog(tls) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func _is_lost_conn(tls *TLS, e int32) (r int32) { + return BoolInt32(e == int32(ECONNREFUSED) || e == int32(ECONNRESET) || e == int32(ENOTCONN) || e == int32(EPIPE)) +} + +func __vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(1184) + defer tls.Free(1184) + var errno_save, fd, l, l2, pid, v1, v2 int32 + var _ /* buf at bp+80 */ [1024]uint8 + var _ /* hlen at bp+1104 */ int32 + var _ /* now at bp+16 */ Ttime_t + var _ /* timebuf at bp+0 */ [16]uint8 + var _ /* tm at bp+24 */ Ttm + _, _, _, _, _, _, _ = errno_save, fd, l, l2, pid, v1, v2 + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if _log_fd < 0 { + ___openlog(tls) + } + if !(priority&Int32FromInt32(LOG_FACMASK) != 0) { + priority |= _log_facility + } + *(*Ttime_t)(unsafe.Pointer(bp + 16)) = Xtime(tls, UintptrFromInt32(0)) + Xgmtime_r(tls, bp+16, bp+24) + Xstrftime_l(tls, bp, uint64(16), __ccgo_ts+951, bp+24, uintptr(unsafe.Pointer(&X__c_locale))) + if _log_opt&int32(LOG_PID) != 0 { + v1 = Xgetpid(tls) + } else { + v1 = 0 + } + pid = v1 + l = Xsnprintf(tls, bp+80, uint64(1024), __ccgo_ts+960, VaList(bp+1120, priority, bp, bp+1104, uintptr(unsafe.Pointer(&_log_ident)), __ccgo_ts+982+BoolUintptr(!(pid != 0)), pid, __ccgo_ts+984+BoolUintptr(!(pid != 0)))) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + l2 = Xvsnprintf(tls, bp+80+uintptr(l), uint64(1024)-uint64(l), message, ap) + if l2 >= 0 { + if uint64(l2) >= uint64(1024)-uint64(l) { + l = int32(Uint64FromInt64(1024) - Uint64FromInt32(1)) + } else { + l += l2 + } + if int32((*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[l-int32(1)]) != int32('\n') { + v2 = l + l++ + (*(*[1024]uint8)(unsafe.Pointer(bp + 80)))[v2] = uint8('\n') + } + if Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0 && (!(_is_lost_conn(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0) || Xconnect(tls, _log_fd, uintptr(unsafe.Pointer(&_log_addr)), uint32(12)) < 0 || Xsend(tls, _log_fd, bp+80, uint64(l), 0) < 0) && _log_opt&int32(LOG_CONS) != 0 { + fd = Xopen(tls, __ccgo_ts+679, Int32FromInt32(O_WRONLY)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC), 0) + if fd >= 0 { + Xdprintf(tls, fd, __ccgo_ts+986, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + Xclose(tls, fd) + } + } + if _log_opt&int32(LOG_PERROR) != 0 { + Xdprintf(tls, int32(2), __ccgo_ts+986, VaList(bp+1120, l-*(*int32)(unsafe.Pointer(bp + 1104)), bp+80+uintptr(*(*int32)(unsafe.Pointer(bp + 1104))))) + } + } +} + +func ___vsyslog(tls *TLS, priority int32, message uintptr, ap Tva_list) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* cs at bp+0 */ int32 + if !(_log_mask&(Int32FromInt32(1)<<(priority&Int32FromInt32(7))) != 0) || priority & ^Int32FromInt32(0x3ff) != 0 { + return + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + ___lock(tls, uintptr(unsafe.Pointer(&_lock2))) + __vsyslog(tls, priority, message, ap) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock2))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) +} + +func Xsyslog(tls *TLS, priority int32, message uintptr, va uintptr) { + if __ccgo_strace { + trc("tls=%v priority=%v message=%v va=%v, (%v:)", tls, priority, message, va, origin(2)) + } + var ap Tva_list + _ = ap + ap = va + ___vsyslog(tls, priority, message, ap) + _ = ap +} + +type Tutsname1 = struct { + Fsysname [65]uint8 + Fnodename [65]uint8 + Frelease [65]uint8 + Fversion [65]uint8 + Fmachine [65]uint8 + F__domainname [65]uint8 +} + +func Xuname(tls *TLS, uts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uts=%v, (%v:)", tls, uts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_uname), int64(uts))))) +} + +func X__madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))))) +} + +func Xmadvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__madvise(tls, addr, len1, advice) +} + +func Xmincore(tls *TLS, addr uintptr, len1 Tsize_t, vec uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v vec=%v, (%v:)", tls, addr, len1, vec, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mincore), int64(addr), int64(len1), int64(vec))))) +} + +func Xmlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_mlock), int64(addr), int64(len1))))) +} + +func Xmlockall(tls *TLS, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v flags=%v, (%v:)", tls, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_mlockall), int64(flags))))) +} + +const OFF_MASK = 4095 +const UNIT = 4096 + +func _dummy5(tls *TLS) { +} + +func X__mprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, start Tsize_t + _, _ = end, start + start = uint64(addr) & uint64(-Int32FromInt32(PAGESIZE)) + end = uint64(addr+uintptr(len1)+UintptrFromInt32(PAGESIZE)-UintptrFromInt32(1)) & uint64(-Int32FromInt32(PAGESIZE)) + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mprotect), int64(start), int64(end-start), int64(prot))))) +} + +func Xmprotect(tls *TLS, addr uintptr, len1 Tsize_t, prot int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v prot=%v, (%v:)", tls, addr, len1, prot, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mprotect(tls, addr, len1, prot) +} + +func _dummy6(tls *TLS) { +} + +func X__mremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var new_addr uintptr + _, _ = ap, new_addr + new_addr = uintptr(0) + if new_len >= uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(-Int32FromInt32(1)) + } + if flags&int32(MREMAP_FIXED) != 0 { + _dummy6(tls) + ap = va + new_addr = VaUintptr(&ap) + _ = ap + } + return uintptr(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_mremap), int64(old_addr), int64(old_len), int64(new_len), int64(flags), int64(new_addr))))) +} + +func Xmremap(tls *TLS, old_addr uintptr, old_len Tsize_t, new_len Tsize_t, flags int32, va uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v old_addr=%v old_len=%v new_len=%v flags=%v va=%v, (%v:)", tls, old_addr, old_len, new_len, flags, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mremap(tls, old_addr, old_len, new_len, flags, va) +} + +func Xmsync(tls *TLS, start uintptr, len1 Tsize_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v flags=%v, (%v:)", tls, start, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_msync), int64(start), int64(len1), int64(flags), 0, 0, 0)))) +} + +func Xmunlock(tls *TLS, addr uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v, (%v:)", tls, addr, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munlock), int64(addr), int64(len1))))) +} + +func Xmunlockall(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_munlockall))))) +} + +func _dummy7(tls *TLS) { +} + +func X__munmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + _dummy7(tls) + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_munmap), int64(start), int64(len1))))) +} + +func Xmunmap(tls *TLS, start uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v, (%v:)", tls, start, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__munmap(tls, start, len1) +} + +func Xposix_madvise(tls *TLS, addr uintptr, len1 Tsize_t, advice int32) (r int32) { + if __ccgo_strace { + trc("tls=%v addr=%v len1=%v advice=%v, (%v:)", tls, addr, len1, advice, origin(2)) + defer func() { trc("-> %v", r) }() + } + if advice == int32(MADV_DONTNEED) { + return 0 + } + return int32(-X__syscall3(tls, int64(SYS_madvise), int64(addr), int64(len1), int64(advice))) +} + +func X__shm_mapname(tls *TLS, name uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v buf=%v, (%v:)", tls, name, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1 uintptr + _, _ = p, v1 + for int32(*(*uint8)(unsafe.Pointer(name))) == int32('/') { + name++ + } + v1 = X__strchrnul(tls, name, int32('/')) + p = v1 + if *(*uint8)(unsafe.Pointer(v1)) != 0 || p == name || int64(p)-int64(name) <= int64(2) && int32(*(*uint8)(unsafe.Pointer(name))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('.') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if int64(p)-int64(name) > int64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, buf, __ccgo_ts+991, uint64(9)) + Xmemcpy(tls, buf+uintptr(9), name, uint64(int64(p)-int64(name)+int64(1))) + return buf +} + +func Xshm_open(tls *TLS, name uintptr, flag int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v flag=%v mode=%v, (%v:)", tls, name, flag, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var fd int32 + var v1 uintptr + var _ /* buf at bp+4 */ [265]uint8 + var _ /* cs at bp+0 */ int32 + _, _ = fd, v1 + v1 = X__shm_mapname(tls, name, bp+4) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + fd = Xopen(tls, name, flag|int32(O_NOFOLLOW)|int32(O_CLOEXEC)|int32(O_NONBLOCK), VaList(bp+280, mode)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return fd +} + +func Xshm_unlink(tls *TLS, name uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(272) + defer tls.Free(272) + var v1 uintptr + var _ /* buf at bp+0 */ [265]uint8 + _ = v1 + v1 = X__shm_mapname(tls, name, bp) + name = v1 + if !(v1 != 0) { + return -int32(1) + } + return Xunlink(tls, name) +} + +const SA = 194 +const SB = 244 +const bittab = 0 + +type Tucontext_t4 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t +} + +func Xbtowc(tls *TLS, c int32) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, v3 int32 + var v1, v2 uint32 + _, _, _, _ = b, v1, v2, v3 + b = int32(uint8(c)) + if uint32(b) < uint32(128) { + v1 = uint32(b) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) && c != -int32(1) { + v2 = uint32(Int32FromInt32(0xdfff) & int32(int8(c))) + } else { + v2 = uint32(0xffffffff) + } + v1 = v2 + } + return v1 +} + +type Tchar16_t = uint16 + +type Tchar32_t = uint32 + +func Xc16rtomb(tls *TLS, s uintptr, c16 Tchar16_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c16=%v ps=%v, (%v:)", tls, s, c16, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wc Twchar_t + var x uintptr + _, _ = wc, x + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state)) + } + x = ps + if !(s != 0) { + if *(*uint32)(unsafe.Pointer(x)) != 0 { + goto ilseq + } + return uint64(1) + } + if !(*(*uint32)(unsafe.Pointer(x)) != 0) && uint32(c16)-uint32(0xd800) < uint32(0x400) { + *(*uint32)(unsafe.Pointer(x)) = uint32((int32(c16) - int32(0xd7c0)) << int32(10)) + return uint64(0) + } + if *(*uint32)(unsafe.Pointer(x)) != 0 { + if uint32(c16)-uint32(0xdc00) >= uint32(0x400) { + goto ilseq + } else { + wc = int32(*(*uint32)(unsafe.Pointer(x)) + uint32(c16) - uint32(0xdc00)) + } + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + } else { + wc = int32(c16) + } + return Xwcrtomb(tls, s, wc, uintptr(0)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(x)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state uint32 + +func Xc32rtomb(tls *TLS, s uintptr, c32 Tchar32_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c32=%v ps=%v, (%v:)", tls, s, c32, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcrtomb(tls, s, int32(c32), ps) +} + +func Xmblen(tls *TLS, s uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmbtowc(tls, uintptr(0), s, n) +} + +func Xmbrlen(tls *TLS, s uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v st=%v, (%v:)", tls, s, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if st != 0 { + v1 = st + } else { + v1 = uintptr(unsafe.Pointer(&_internal)) + } + return Xmbrtowc(tls, uintptr(0), s, n, v1) +} + +var _internal uint32 + +func Xmbrtoc16(tls *TLS, pc16 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc16=%v s=%v n=%v ps=%v, (%v:)", tls, pc16, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pending uintptr + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _ = pending, ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state1)) + } + pending = ps + if !(s != 0) { + return Xmbrtoc16(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + /* mbrtowc states for partial UTF-8 characters have the high bit set; + * we use nonzero states without high bit for pending surrogates. */ + if int32(*(*uint32)(unsafe.Pointer(pending))) > 0 { + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*uint32)(unsafe.Pointer(pending))) + } + *(*uint32)(unsafe.Pointer(pending)) = uint32(0) + return uint64(-Int32FromInt32(3)) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) { + if *(*Twchar_t)(unsafe.Pointer(bp)) >= int32(0x10000) { + *(*uint32)(unsafe.Pointer(pending)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))&int32(0x3ff) + int32(0xdc00)) + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(0xd7c0) + *(*Twchar_t)(unsafe.Pointer(bp))>>Int32FromInt32(10) + } + if pc16 != 0 { + *(*Tchar16_t)(unsafe.Pointer(pc16)) = uint16(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + return ret +} + +var _internal_state1 uint32 + +func Xmbrtoc32(tls *TLS, pc32 uintptr, s uintptr, n Tsize_t, ps uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v pc32=%v s=%v n=%v ps=%v, (%v:)", tls, pc32, s, n, ps, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ret Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _ = ret + if !(ps != 0) { + ps = uintptr(unsafe.Pointer(&_internal_state2)) + } + if !(s != 0) { + return Xmbrtoc32(tls, uintptr(0), __ccgo_ts, uint64(1), ps) + } + ret = Xmbrtowc(tls, bp, s, n, ps) + if ret <= uint64(4) && pc32 != 0 { + *(*Tchar32_t)(unsafe.Pointer(pc32)) = uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + return ret +} + +var _internal_state2 uint32 + +func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N Tsize_t + var c uint32 + var s, v3, v4 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = N, c, s, v1, v2, v3, v4 + s = src + N = n + if !(st != 0) { + st = uintptr(unsafe.Pointer(&_internal_state3)) + } + c = *(*uint32)(unsafe.Pointer(st)) + if !(s != 0) { + if c != 0 { + goto ilseq + } + return uint64(0) + } else { + if !(wc != 0) { + wc = bp + } + } + if !(n != 0) { + return uint64(-Int32FromInt32(2)) + } + if !(c != 0) { + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolUint64(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Uint64FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + n-- + } + if n != 0 { + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + goto loop + loop: + ; + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + goto loop + } + } + *(*uint32)(unsafe.Pointer(st)) = c + return uint64(-Int32FromInt32(2)) + goto ilseq +ilseq: + ; + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +var _internal_state3 uint32 + +func Xmbsinit(tls *TLS, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!(st != 0) || !(*(*uint32)(unsafe.Pointer(st)) != 0)) +} + +func Xmbsnrtowcs(tls *TLS, wcs uintptr, src uintptr, n Tsize_t, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v src=%v n=%v wn=%v st=%v, (%v:)", tls, wcs, src, n, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + var cnt, l, n2, v1 Tsize_t + var tmp_s, ws uintptr + var v2 bool + var v3 uint64 + var _ /* s at bp+1024 */ uintptr + var _ /* wbuf at bp+0 */ [256]Twchar_t + _, _, _, _, _, _, _, _ = cnt, l, n2, tmp_s, ws, v1, v2, v3 + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 1024)) = *(*uintptr)(unsafe.Pointer(src)) + if !(wcs != 0) { + ws = bp + wn = Uint64FromInt64(1024) / Uint64FromInt64(4) + } else { + ws = wcs + } + /* making sure output buffer size is at most n/4 will ensure + * that mbsrtowcs never reads more than n input bytes. thus + * we can use mbsrtowcs as long as it's practical.. */ + for { + if v2 = *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 && wn != 0; v2 { + v1 = n / Uint64FromInt32(4) + n2 = v1 + } + if !(v2 && (v1 >= wn || n2 > uint64(32))) { + break + } + if n2 >= wn { + n2 = wn + } + tmp_s = *(*uintptr)(unsafe.Pointer(bp + 1024)) + l = Xmbsrtowcs(tls, ws, bp+1024, n2, st) + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + wn = uint64(0) + break + } + if ws != bp { + ws += uintptr(l) * 4 + wn -= l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + v3 = n - uint64(int64(*(*uintptr)(unsafe.Pointer(bp + 1024)))-int64(tmp_s)) + } else { + v3 = uint64(0) + } + n = v3 + cnt += l + } + if *(*uintptr)(unsafe.Pointer(bp + 1024)) != 0 { + for wn != 0 && n != 0 { + l = Xmbrtowc(tls, ws, *(*uintptr)(unsafe.Pointer(bp + 1024)), n, st) + if l+uint64(2) <= uint64(2) { + if !(l+Uint64FromInt32(1) != 0) { + cnt = l + break + } + if !(l != 0) { + *(*uintptr)(unsafe.Pointer(bp + 1024)) = uintptr(0) + break + } + /* have to roll back partial character */ + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + break + } + *(*uintptr)(unsafe.Pointer(bp + 1024)) += uintptr(l) + n -= l + /* safe - this loop runs fewer than sizeof(wbuf)/8 times */ + ws += 4 + wn-- + cnt++ + } + } + if wcs != 0 { + *(*uintptr)(unsafe.Pointer(src)) = *(*uintptr)(unsafe.Pointer(bp + 1024)) + } + return cnt +} + +func Xmbsrtowcs(tls *TLS, ws uintptr, src uintptr, wn Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v ws=%v src=%v wn=%v st=%v, (%v:)", tls, ws, src, wn, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c, v1 uint32 + var s, v12, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v5, v6 uintptr + var wn0 Tsize_t + var v2 bool + var v3 int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, s, wn0, v1, v12, v16, v17, v18, v19, v2, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v3, v30, v5, v6 + s = *(*uintptr)(unsafe.Pointer(src)) + wn0 = wn + c = uint32(0) + if v2 = st != 0; v2 { + v1 = *(*uint32)(unsafe.Pointer(st)) + c = v1 + } + if v2 && v1 != 0 { + if ws != 0 { + *(*uint32)(unsafe.Pointer(st)) = uint32(0) + goto resume + } else { + goto resume0 + } + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + if !(ws != 0) { + return Xstrlen(tls, s) + } + for { + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + v5 = s + s++ + c = uint32(*(*uint8)(unsafe.Pointer(v5))) + v6 = ws + ws += 4 + *(*Twchar_t)(unsafe.Pointer(v6)) = Int32FromInt32(0xdfff) & int32(int8(c)) + wn-- + goto _4 + _4: + } + *(*Twchar_t)(unsafe.Pointer(ws)) = 0 + *(*uintptr)(unsafe.Pointer(src)) = uintptr(0) + return wn0 - wn + } + if !!(ws != 0) { + goto _7 + } +_11: + ; + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + s += uintptr(4) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + s++ + wn-- + goto _10 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _9 + } + v12 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v12)))-uint32(0xc2)] + goto resume0 +resume0: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(2) + goto _9 + } + s++ + if c&(Uint32FromUint32(1)<= uint32(0x40) { + s -= uintptr(3) + goto _9 + } + s++ + } + } + wn-- + c = uint32(0) + goto _10 +_10: + ; + goto _11 + goto _9 +_9: + ; + goto _8 +_7: + ; +_15: + ; + if !(wn != 0) { + *(*uintptr)(unsafe.Pointer(src)) = s + return wn0 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) && uint64(s)%uint64(4) == uint64(0) { + for wn >= uint64(5) && !((*(*uint32)(unsafe.Pointer(s))|(*(*uint32)(unsafe.Pointer(s))-Uint32FromInt32(0x01010101)))&Uint32FromUint32(0x80808080) != 0) { + v16 = ws + ws += 4 + v17 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v16)) = int32(*(*uint8)(unsafe.Pointer(v17))) + v18 = ws + ws += 4 + v19 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v18)) = int32(*(*uint8)(unsafe.Pointer(v19))) + v20 = ws + ws += 4 + v21 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v20)) = int32(*(*uint8)(unsafe.Pointer(v21))) + v22 = ws + ws += 4 + v23 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v22)) = int32(*(*uint8)(unsafe.Pointer(v23))) + wn -= uint64(4) + } + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(1) < uint32(0x7f) { + v24 = ws + ws += 4 + v25 = s + s++ + *(*Twchar_t)(unsafe.Pointer(v24)) = int32(*(*uint8)(unsafe.Pointer(v25))) + wn-- + goto _14 + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto _13 + } + v26 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v26)))-uint32(0xc2)] + goto resume +resume: + ; + if (int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + s-- + goto _13 + } + v27 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(2) + goto _13 + } + v28 = s + s++ + c = c<= uint32(0x40) { + s -= uintptr(3) + goto _13 + } + v29 = s + s++ + c = c< %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _s + return Xmbsrtowcs(tls, ws, bp, wn, uintptr(0)) +} + +func Xmbtowc(tls *TLS, wc uintptr, src uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v wc=%v src=%v n=%v, (%v:)", tls, wc, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c uint32 + var s, v3, v4, v5, v6 uintptr + var v1 Twchar_t + var v2 int32 + var _ /* dummy at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _ = c, s, v1, v2, v3, v4, v5, v6 + s = src + if !(s != 0) { + return 0 + } + if !(n != 0) { + goto ilseq + } + if !(wc != 0) { + wc = bp + } + if int32(*(*uint8)(unsafe.Pointer(s))) < int32(0x80) { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + *(*Twchar_t)(unsafe.Pointer(wc)) = v1 + return BoolInt32(!!(v1 != 0)) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v2 = int32(4) + } else { + v2 = int32(1) + } + if v2 == int32(1) { + *(*Twchar_t)(unsafe.Pointer(wc)) = Int32FromInt32(0xdfff) & int32(int8(*(*uint8)(unsafe.Pointer(s)))) + return Int32FromInt32(1) + } + if uint32(*(*uint8)(unsafe.Pointer(s)))-uint32(0xc2) > Uint32FromUint32(0xf4)-Uint32FromUint32(0xc2) { + goto ilseq + } + v3 = s + s++ + c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(v3)))-uint32(0xc2)] + /* Avoid excessive checks against n: If shifting the state n-1 + * times does not clear the high bit, then the value of n is + * insufficient to read a character */ + if n < uint64(4) && c<<(uint64(6)*n-uint64(6))&(Uint32FromUint32(1)<>int32(3)-int32(0x10)|(int32(*(*uint8)(unsafe.Pointer(s)))>>int32(3)+int32(c)>>Int32FromInt32(26))) & ^Int32FromInt32(7) != 0 { + goto ilseq + } + v4 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v5 = s + s++ + c = c<= uint32(0x40) { + goto ilseq + } + v6 = s + s++ + *(*Twchar_t)(unsafe.Pointer(wc)) = int32(c< %v", r) }() + } + var v1 int32 + var v2, v3, v4, v5, v6, v7 uintptr + _, _, _, _, _, _, _ = v1, v2, v3, v4, v5, v6, v7 + if !(s != 0) { + return uint64(1) + } + if uint32(wc) < uint32(0x80) { + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) { + if !(uint32(wc)-Uint32FromInt32(0xdf80) < Uint32FromInt32(0x80)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(wc) + return uint64(1) + } else { + if uint32(wc) < uint32(0x800) { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(0xc0) | wc>>Int32FromInt32(6)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(2) + } else { + if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(int32(0xe0) | wc>>Int32FromInt32(12)) + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(3) + } else { + if uint32(wc)-uint32(0x10000) < uint32(0x100000) { + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8(int32(0xf0) | wc>>Int32FromInt32(18)) + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(int32(0x80) | wc>>Int32FromInt32(12)&int32(0x3f)) + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = uint8(int32(0x80) | wc>>Int32FromInt32(6)&int32(0x3f)) + *(*uint8)(unsafe.Pointer(s)) = uint8(int32(0x80) | wc&int32(0x3f)) + return uint64(4) + } + } + } + } + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + return uint64(-Int32FromInt32(1)) +} + +func Xwcsnrtombs(tls *TLS, dst uintptr, wcs uintptr, wn Tsize_t, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v dst=%v wcs=%v wn=%v n=%v st=%v, (%v:)", tls, dst, wcs, wn, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var cnt, l Tsize_t + var ws, v1 uintptr + var _ /* tmp at bp+0 */ [4]uint8 + _, _, _, _ = cnt, l, ws, v1 + ws = *(*uintptr)(unsafe.Pointer(wcs)) + cnt = uint64(0) + if !(dst != 0) { + n = uint64(0) + } + for ws != 0 && wn != 0 { + if n < uint64(MB_LEN_MAX) { + v1 = bp + } else { + v1 = dst + } + l = Xwcrtomb(tls, v1, *(*Twchar_t)(unsafe.Pointer(ws)), uintptr(0)) + if l == uint64(-Int32FromInt32(1)) { + cnt = uint64(-Int32FromInt32(1)) + break + } + if dst != 0 { + if n < uint64(MB_LEN_MAX) { + if l > n { + break + } + Xmemcpy(tls, dst, bp, l) + } + dst += uintptr(l) + n -= l + } + if !(*(*Twchar_t)(unsafe.Pointer(ws)) != 0) { + ws = uintptr(0) + break + } + ws += 4 + wn-- + cnt += l + } + if dst != 0 { + *(*uintptr)(unsafe.Pointer(wcs)) = ws + } + return cnt +} + +func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t, st uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var N, l Tsize_t + var ws2, v2, v3 uintptr + var _ /* buf at bp+0 */ [4]uint8 + _, _, _, _, _ = N, l, ws2, v2, v3 + N = n + if !(s != 0) { + n = uint64(0) + ws2 = *(*uintptr)(unsafe.Pointer(ws)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(ws2)) != 0) { + break + } + if uint32(*(*Twchar_t)(unsafe.Pointer(ws2))) >= uint32(0x80) { + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(ws2)), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + n += l + } else { + n++ + } + goto _1 + _1: + ; + ws2 += 4 + } + return n + } + for n >= uint64(4) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + s += uintptr(l) + n -= l + } else { + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + for n != 0 { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-uint32(1) >= uint32(0x7f) { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))) != 0) { + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) + return N - n + } + l = Xwcrtomb(tls, bp, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + if !(l+Uint64FromInt32(1) != 0) { + return uint64(-Int32FromInt32(1)) + } + if l > n { + return N - n + } + Xwcrtomb(tls, s, *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) + s += uintptr(l) + n -= l + } else { + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) + n-- + } + *(*uintptr)(unsafe.Pointer(ws)) += 4 + } + return N +} + +func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = ws + return Xwcsrtombs(tls, s, bp, n, uintptr(0)) +} + +func Xwctob(tls *TLS, c Twint_t) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if c < uint32(128) { + return int32(c) + } + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v1 = int32(4) + } else { + v1 = int32(1) + } + if v1 == int32(1) && c-uint32(0xdf80) < uint32(0x80) { + return int32(uint8(c)) + } + return -int32(1) +} + +func Xwctomb(tls *TLS, s uintptr, wc Twchar_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v wc=%v, (%v:)", tls, s, wc, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !(s != 0) { + return 0 + } + return int32(Xwcrtomb(tls, s, wc, uintptr(0))) +} + +func Xaccept(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_accept4) + v2 = int32(__SC_accept) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +type Tucred = struct { + Fpid Tpid_t + Fuid Tuid_t + Fgid Tgid_t +} + +type Tmmsghdr = struct { + Fmsg_hdr Tmsghdr + Fmsg_len uint32 +} + +func Xaccept4(tls *TLS, fd int32, addr uintptr, len1 uintptr, flg int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v flg=%v, (%v:)", tls, fd, addr, len1, flg, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var ret, v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _ = r, ret, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + if !(flg != 0) { + return Xaccept(tls, fd, addr, len1) + } + v1 = int32(SYS_accept4) + v2 = int32(__SC_accept4) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(flg) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + ret = int32(X__syscall_ret(tls, uint64(v10))) + if ret >= 0 || *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOSYS) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EINVAL) { + return ret + } + if flg & ^(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + ret = Xaccept(tls, fd, addr, len1) + if ret < 0 { + return ret + } + if flg&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flg&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(ret), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return ret +} + +func Xbind(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_bind) + v2 = int32(__SC_bind) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xconnect(tls *TLS, fd int32, addr uintptr, len1 Tsocklen_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_connect) + v2 = int32(__SC_connect) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +const ADD = 0 +const C_ANY = 0 +const C_CHAOS = 0 +const C_HS = 0 +const C_IN = 0 +const C_NONE = 0 +const DELETE = 0 +const FORMERR = 0 +const GETLONG = 0 +const GETSHORT = 0 +const HFIXEDSZ = 12 +const IN6ADDRSZ = 16 +const INADDRSZ = 4 +const INDIR_MASK = 192 +const INET6_ADDRSTRLEN = 46 +const INET_ADDRSTRLEN = 16 +const INT16SZ = 2 +const INT32SZ = 4 +const INT8SZ = 1 +const IN_CLASSA_HOST = 16777215 +const IN_CLASSA_MAX = 128 +const IN_CLASSA_NET = 4278190080 +const IN_CLASSA_NSHIFT = 24 +const IN_CLASSB_HOST = 65535 +const IN_CLASSB_MAX = 65536 +const IN_CLASSB_NET = 4294901760 +const IN_CLASSB_NSHIFT = 16 +const IN_CLASSC_HOST = 255 +const IN_CLASSC_NET = 4294967040 +const IN_CLASSC_NSHIFT = 8 +const IN_LOOPBACKNET = 127 +const IPPORT_RESERVED = 1024 +const IPPROTO_AH = 51 +const IPPROTO_BEETPH = 94 +const IPPROTO_COMP = 108 +const IPPROTO_DCCP = 33 +const IPPROTO_DSTOPTS = 60 +const IPPROTO_EGP = 8 +const IPPROTO_ENCAP = 98 +const IPPROTO_ESP = 50 +const IPPROTO_ETHERNET = 143 +const IPPROTO_FRAGMENT = 44 +const IPPROTO_GRE = 47 +const IPPROTO_HOPOPTS = 0 +const IPPROTO_ICMP = 1 +const IPPROTO_ICMPV6 = 58 +const IPPROTO_IDP = 22 +const IPPROTO_IGMP = 2 +const IPPROTO_IP = 0 +const IPPROTO_IPIP = 4 +const IPPROTO_IPV6 = 41 +const IPPROTO_MAX = 263 +const IPPROTO_MH = 135 +const IPPROTO_MPLS = 137 +const IPPROTO_MPTCP = 262 +const IPPROTO_MTP = 92 +const IPPROTO_NONE = 59 +const IPPROTO_PIM = 103 +const IPPROTO_PUP = 12 +const IPPROTO_RAW = 255 +const IPPROTO_ROUTING = 43 +const IPPROTO_RSVP = 46 +const IPPROTO_SCTP = 132 +const IPPROTO_TCP = 6 +const IPPROTO_TP = 29 +const IPPROTO_UDP = 17 +const IPPROTO_UDPLITE = 136 +const IPV6_2292DSTOPTS = 4 +const IPV6_2292HOPLIMIT = 8 +const IPV6_2292HOPOPTS = 3 +const IPV6_2292PKTINFO = 2 +const IPV6_2292PKTOPTIONS = 6 +const IPV6_2292RTHDR = 5 +const IPV6_ADDRFORM = 1 +const IPV6_ADDR_PREFERENCES = 72 +const IPV6_ADD_MEMBERSHIP = 20 +const IPV6_AUTHHDR = 10 +const IPV6_AUTOFLOWLABEL = 70 +const IPV6_CHECKSUM = 7 +const IPV6_DONTFRAG = 62 +const IPV6_DROP_MEMBERSHIP = 21 +const IPV6_DSTOPTS = 59 +const IPV6_FREEBIND = 78 +const IPV6_HDRINCL = 36 +const IPV6_HOPLIMIT = 52 +const IPV6_HOPOPTS = 54 +const IPV6_IPSEC_POLICY = 34 +const IPV6_JOIN_ANYCAST = 27 +const IPV6_JOIN_GROUP = 20 +const IPV6_LEAVE_ANYCAST = 28 +const IPV6_LEAVE_GROUP = 21 +const IPV6_MINHOPCOUNT = 73 +const IPV6_MTU = 24 +const IPV6_MTU_DISCOVER = 23 +const IPV6_MULTICAST_ALL = 29 +const IPV6_MULTICAST_HOPS = 18 +const IPV6_MULTICAST_IF = 17 +const IPV6_MULTICAST_LOOP = 19 +const IPV6_NEXTHOP = 9 +const IPV6_ORIGDSTADDR = 74 +const IPV6_PATHMTU = 61 +const IPV6_PKTINFO = 50 +const IPV6_PMTUDISC_DO = 2 +const IPV6_PMTUDISC_DONT = 0 +const IPV6_PMTUDISC_INTERFACE = 4 +const IPV6_PMTUDISC_OMIT = 5 +const IPV6_PMTUDISC_PROBE = 3 +const IPV6_PMTUDISC_WANT = 1 +const IPV6_PREFER_SRC_CGA = 8 +const IPV6_PREFER_SRC_COA = 4 +const IPV6_PREFER_SRC_HOME = 1024 +const IPV6_PREFER_SRC_NONCGA = 2048 +const IPV6_PREFER_SRC_PUBLIC = 2 +const IPV6_PREFER_SRC_PUBTMP_DEFAULT = 256 +const IPV6_PREFER_SRC_TMP = 1 +const IPV6_RECVDSTOPTS = 58 +const IPV6_RECVERR = 25 +const IPV6_RECVFRAGSIZE = 77 +const IPV6_RECVHOPLIMIT = 51 +const IPV6_RECVHOPOPTS = 53 +const IPV6_RECVORIGDSTADDR = 74 +const IPV6_RECVPATHMTU = 60 +const IPV6_RECVPKTINFO = 49 +const IPV6_RECVRTHDR = 56 +const IPV6_RECVTCLASS = 66 +const IPV6_ROUTER_ALERT = 22 +const IPV6_ROUTER_ALERT_ISOLATE = 30 +const IPV6_RTHDR = 57 +const IPV6_RTHDRDSTOPTS = 55 +const IPV6_RTHDR_LOOSE = 0 +const IPV6_RTHDR_STRICT = 1 +const IPV6_RTHDR_TYPE_0 = 0 +const IPV6_RXDSTOPTS = 59 +const IPV6_RXHOPOPTS = 54 +const IPV6_TCLASS = 67 +const IPV6_TRANSPARENT = 75 +const IPV6_UNICAST_HOPS = 16 +const IPV6_UNICAST_IF = 76 +const IPV6_V6ONLY = 26 +const IPV6_XFRM_POLICY = 35 +const IP_ADD_MEMBERSHIP = 35 +const IP_ADD_SOURCE_MEMBERSHIP = 39 +const IP_BIND_ADDRESS_NO_PORT = 24 +const IP_BLOCK_SOURCE = 38 +const IP_CHECKSUM = 23 +const IP_DEFAULT_MULTICAST_LOOP = 1 +const IP_DEFAULT_MULTICAST_TTL = 1 +const IP_DROP_MEMBERSHIP = 36 +const IP_DROP_SOURCE_MEMBERSHIP = 40 +const IP_FREEBIND = 15 +const IP_HDRINCL = 3 +const IP_IPSEC_POLICY = 16 +const IP_MAX_MEMBERSHIPS = 20 +const IP_MINTTL = 21 +const IP_MSFILTER = 41 +const IP_MTU = 14 +const IP_MTU_DISCOVER = 10 +const IP_MULTICAST_ALL = 49 +const IP_MULTICAST_IF = 32 +const IP_MULTICAST_LOOP = 34 +const IP_MULTICAST_TTL = 33 +const IP_NODEFRAG = 22 +const IP_OPTIONS = 4 +const IP_ORIGDSTADDR = 20 +const IP_PASSSEC = 18 +const IP_PKTINFO = 8 +const IP_PKTOPTIONS = 9 +const IP_PMTUDISC = 10 +const IP_PMTUDISC_DO = 2 +const IP_PMTUDISC_DONT = 0 +const IP_PMTUDISC_INTERFACE = 4 +const IP_PMTUDISC_OMIT = 5 +const IP_PMTUDISC_PROBE = 3 +const IP_PMTUDISC_WANT = 1 +const IP_RECVERR = 11 +const IP_RECVERR_RFC4884 = 26 +const IP_RECVFRAGSIZE = 25 +const IP_RECVOPTS = 6 +const IP_RECVORIGDSTADDR = 20 +const IP_RECVRETOPTS = 7 +const IP_RECVTOS = 13 +const IP_RECVTTL = 12 +const IP_RETOPTS = 7 +const IP_ROUTER_ALERT = 5 +const IP_TOS = 1 +const IP_TRANSPARENT = 19 +const IP_TTL = 2 +const IP_UNBLOCK_SOURCE = 37 +const IP_UNICAST_IF = 50 +const IP_XFRM_POLICY = 17 +const IQUERY = 0 +const LOCALDOMAINPARTS = 2 +const MAXCDNAME = 255 +const MAXDFLSRCH = 3 +const MAXDNAME = 1025 +const MAXDNSRCH = 6 +const MAXLABEL = 63 +const MAXNS = 3 +const MAXRESOLVSORT = 10 +const NAMESERVER_PORT = 53 +const NOERROR = 0 +const NOTAUTH = 0 +const NOTIMP = 0 +const NOTZONE = 0 +const NS_ALG_DH = 2 +const NS_ALG_DSA = 3 +const NS_ALG_DSS = 3 +const NS_ALG_EXPIRE_ONLY = 253 +const NS_ALG_MD5RSA = 1 +const NS_ALG_PRIVATE_OID = 254 +const NS_CMPRSFLGS = 192 +const NS_DEFAULTPORT = 53 +const NS_DSA_MAX_BYTES = 405 +const NS_DSA_MIN_SIZE = 213 +const NS_DSA_SIG_SIZE = 41 +const NS_HFIXEDSZ = 12 +const NS_IN6ADDRSZ = 16 +const NS_INADDRSZ = 4 +const NS_INT16SZ = 2 +const NS_INT32SZ = 4 +const NS_INT8SZ = 1 +const NS_KEY_EXTENDED_FLAGS = 4096 +const NS_KEY_NAME_ENTITY = 512 +const NS_KEY_NAME_RESERVED = 768 +const NS_KEY_NAME_TYPE = 768 +const NS_KEY_NAME_USER = 0 +const NS_KEY_NAME_ZONE = 256 +const NS_KEY_NO_AUTH = 32768 +const NS_KEY_NO_CONF = 16384 +const NS_KEY_PROT_ANY = 255 +const NS_KEY_PROT_DNSSEC = 3 +const NS_KEY_PROT_EMAIL = 2 +const NS_KEY_PROT_IPSEC = 4 +const NS_KEY_PROT_TLS = 1 +const NS_KEY_RESERVED10 = 32 +const NS_KEY_RESERVED11 = 16 +const NS_KEY_RESERVED2 = 8192 +const NS_KEY_RESERVED4 = 2048 +const NS_KEY_RESERVED5 = 1024 +const NS_KEY_RESERVED8 = 128 +const NS_KEY_RESERVED9 = 64 +const NS_KEY_RESERVED_BITMASK = 11504 +const NS_KEY_RESERVED_BITMASK2 = 65535 +const NS_KEY_SIGNATORYMASK = 15 +const NS_KEY_TYPEMASK = 49152 +const NS_KEY_TYPE_AUTH_CONF = 0 +const NS_KEY_TYPE_AUTH_ONLY = 16384 +const NS_KEY_TYPE_CONF_ONLY = 32768 +const NS_KEY_TYPE_NO_KEY = 49152 +const NS_MAXCDNAME = 255 +const NS_MAXDNAME = 1025 +const NS_MAXLABEL = 63 +const NS_MAXMSG = 65535 +const NS_MD5RSA_MAX_BASE64 = 10928 +const NS_MD5RSA_MAX_BITS = 4096 +const NS_MD5RSA_MAX_BYTES = 8195 +const NS_MD5RSA_MAX_SIZE = 512 +const NS_MD5RSA_MIN_BITS = 512 +const NS_MD5RSA_MIN_SIZE = 64 +const NS_NOTIFY_OP = 0 +const NS_NXT_BITS = 8 +const NS_NXT_MAX = 127 +const NS_OPT_DNSSEC_OK = 32768 +const NS_OPT_NSID = 3 +const NS_PACKETSZ = 512 +const NS_QFIXEDSZ = 4 +const NS_RRFIXEDSZ = 10 +const NS_SIG_ALG = 2 +const NS_SIG_EXPIR = 8 +const NS_SIG_FOOT = 16 +const NS_SIG_LABELS = 3 +const NS_SIG_OTTL = 4 +const NS_SIG_SIGNED = 12 +const NS_SIG_SIGNER = 18 +const NS_SIG_TYPE = 0 +const NS_TSIG_ALG_HMAC_MD5 = "HMAC-MD5.SIG-ALG.REG.INT" +const NS_TSIG_ERROR_FORMERR = -12 +const NS_TSIG_ERROR_NO_SPACE = -11 +const NS_TSIG_ERROR_NO_TSIG = -10 +const NS_TSIG_FUDGE = 300 +const NS_TSIG_TCP_COUNT = 100 +const NS_UPDATE_OP = 0 +const NXDOMAIN = 0 +const NXRRSET = 0 +const PACKETSZ = 512 +const PRIX16 = "X" +const PRIX32 = "X" +const PRIX8 = "X" +const PRIXFAST16 = "X" +const PRIXFAST32 = "X" +const PRIXFAST8 = "X" +const PRIXLEAST16 = "X" +const PRIXLEAST32 = "X" +const PRIXLEAST8 = "X" +const PRId16 = "d" +const PRId32 = "d" +const PRId8 = "d" +const PRIdFAST16 = "d" +const PRIdFAST32 = "d" +const PRIdFAST8 = "d" +const PRIdLEAST16 = "d" +const PRIdLEAST32 = "d" +const PRIdLEAST8 = "d" +const PRIi16 = "i" +const PRIi32 = "i" +const PRIi8 = "i" +const PRIiFAST16 = "i" +const PRIiFAST32 = "i" +const PRIiFAST8 = "i" +const PRIiLEAST16 = "i" +const PRIiLEAST32 = "i" +const PRIiLEAST8 = "i" +const PRIo16 = "o" +const PRIo32 = "o" +const PRIo8 = "o" +const PRIoFAST16 = "o" +const PRIoFAST32 = "o" +const PRIoFAST8 = "o" +const PRIoLEAST16 = "o" +const PRIoLEAST32 = "o" +const PRIoLEAST8 = "o" +const PRIu16 = "u" +const PRIu32 = "u" +const PRIu8 = "u" +const PRIuFAST16 = "u" +const PRIuFAST32 = "u" +const PRIuFAST8 = "u" +const PRIuLEAST16 = "u" +const PRIuLEAST32 = "u" +const PRIuLEAST8 = "u" +const PRIx16 = "x" +const PRIx32 = "x" +const PRIx8 = "x" +const PRIxFAST16 = "x" +const PRIxFAST32 = "x" +const PRIxFAST8 = "x" +const PRIxLEAST16 = "x" +const PRIxLEAST32 = "x" +const PRIxLEAST8 = "x" +const PUTLONG = 0 +const PUTSHORT = 0 +const QFIXEDSZ = 4 +const QUERY = 0 +const REFUSED = 0 +const RES_AAONLY = 4 +const RES_BLAST = 131072 +const RES_DEBUG = 2 +const RES_DEFAULT = 524992 +const RES_DEFNAMES = 128 +const RES_DFLRETRY = 2 +const RES_DNSRCH = 512 +const RES_EXHAUSTIVE = 1 +const RES_F_CONN = 2 +const RES_F_EDNS0ERR = 4 +const RES_F_VC = 1 +const RES_IGNTC = 32 +const RES_INIT = 1 +const RES_INSECURE1 = 1024 +const RES_INSECURE2 = 2048 +const RES_KEEPTSIG = 65536 +const RES_MAXNDOTS = 15 +const RES_MAXRETRANS = 30 +const RES_MAXRETRY = 5 +const RES_MAXTIME = 65535 +const RES_NOALIASES = 4096 +const RES_NOCHECKNAME = 32768 +const RES_NOIP6DOTINT = 524288 +const RES_PRF_ADD = 128 +const RES_PRF_ANS = 32 +const RES_PRF_AUTH = 64 +const RES_PRF_CLASS = 4 +const RES_PRF_CMD = 8 +const RES_PRF_HEAD1 = 256 +const RES_PRF_HEAD2 = 512 +const RES_PRF_HEADX = 2048 +const RES_PRF_INIT = 16384 +const RES_PRF_QUERY = 4096 +const RES_PRF_QUES = 16 +const RES_PRF_REPLY = 8192 +const RES_PRF_STATS = 1 +const RES_PRF_TTLID = 1024 +const RES_PRF_UPDATE = 2 +const RES_PRIMARY = 16 +const RES_RECURSE = 64 +const RES_ROTATE = 16384 +const RES_SNGLKUP = 2097152 +const RES_SNGLKUPREOP = 4194304 +const RES_STAYOPEN = 256 +const RES_TIMEOUT = 5 +const RES_USEBSTRING = 262144 +const RES_USEVC = 8 +const RES_USE_DNSSEC = 8388608 +const RES_USE_EDNS0 = 1048576 +const RES_USE_INET6 = 8192 +const RRFIXEDSZ = 10 +const SCNd16 = "hd" +const SCNd32 = "d" +const SCNd8 = "hhd" +const SCNdFAST16 = "d" +const SCNdFAST32 = "d" +const SCNdFAST8 = "hhd" +const SCNdLEAST16 = "hd" +const SCNdLEAST32 = "d" +const SCNdLEAST8 = "hhd" +const SCNi16 = "hi" +const SCNi32 = "i" +const SCNi8 = "hhi" +const SCNiFAST16 = "i" +const SCNiFAST32 = "i" +const SCNiFAST8 = "hhi" +const SCNiLEAST16 = "hi" +const SCNiLEAST32 = "i" +const SCNiLEAST8 = "hhi" +const SCNo16 = "ho" +const SCNo32 = "o" +const SCNo8 = "hho" +const SCNoFAST16 = "o" +const SCNoFAST32 = "o" +const SCNoFAST8 = "hho" +const SCNoLEAST16 = "ho" +const SCNoLEAST32 = "o" +const SCNoLEAST8 = "hho" +const SCNu16 = "hu" +const SCNu32 = "u" +const SCNu8 = "hhu" +const SCNuFAST16 = "u" +const SCNuFAST32 = "u" +const SCNuFAST8 = "hhu" +const SCNuLEAST16 = "hu" +const SCNuLEAST32 = "u" +const SCNuLEAST8 = "hhu" +const SCNx16 = "hx" +const SCNx32 = "x" +const SCNx8 = "hhx" +const SCNxFAST16 = "x" +const SCNxFAST32 = "x" +const SCNxFAST8 = "hhx" +const SCNxLEAST16 = "hx" +const SCNxLEAST32 = "x" +const SCNxLEAST8 = "hhx" +const SERVFAIL = 0 +const STATUS = 0 +const S_ADDT = 0 +const S_PREREQ = 0 +const S_UPDATE = 0 +const S_ZONE = 0 +const T_A = 0 +const T_A6 = 0 +const T_AAAA = 0 +const T_AFSDB = 0 +const T_ANY = 0 +const T_ATMA = 0 +const T_AVC = 0 +const T_AXFR = 0 +const T_CAA = 0 +const T_CDNSKEY = 0 +const T_CDS = 0 +const T_CNAME = 0 +const T_CSYNC = 0 +const T_DHCID = 0 +const T_DLV = 0 +const T_DNAME = 0 +const T_DNSKEY = 0 +const T_DS = 0 +const T_EID = 0 +const T_EUI48 = 0 +const T_EUI64 = 0 +const T_GID = 0 +const T_GPOS = 0 +const T_HINFO = 0 +const T_HIP = 0 +const T_IPSECKEY = 0 +const T_ISDN = 0 +const T_IXFR = 0 +const T_KEY = 0 +const T_L32 = 0 +const T_L64 = 0 +const T_LOC = 0 +const T_LP = 0 +const T_MAILA = 0 +const T_MAILB = 0 +const T_MB = 0 +const T_MD = 0 +const T_MF = 0 +const T_MG = 0 +const T_MINFO = 0 +const T_MR = 0 +const T_MX = 0 +const T_NAPTR = 0 +const T_NID = 0 +const T_NIMLOC = 0 +const T_NINFO = 0 +const T_NS = 0 +const T_NSAP = 0 +const T_NSAP_PTR = 0 +const T_NSEC = 0 +const T_NSEC3 = 0 +const T_NSEC3PARAM = 0 +const T_NULL = 0 +const T_NXT = 0 +const T_OPENPGPKEY = 0 +const T_PTR = 0 +const T_PX = 0 +const T_RKEY = 0 +const T_RP = 0 +const T_RRSIG = 0 +const T_RT = 0 +const T_SIG = 0 +const T_SMIMEA = 0 +const T_SOA = 0 +const T_SPF = 0 +const T_SRV = 0 +const T_SSHFP = 0 +const T_TA = 0 +const T_TALINK = 0 +const T_TKEY = 0 +const T_TLSA = 0 +const T_TSIG = 0 +const T_TXT = 0 +const T_UID = 0 +const T_UINFO = 0 +const T_UNSPEC = 0 +const T_URI = 0 +const T_WKS = 0 +const T_X25 = 0 +const YXDOMAIN = 0 +const YXRRSET = 0 +const _PATH_RESCONF = "/etc/resolv.conf" +const __BIND = 19950621 +const __NAMESER = 19991006 +const __PRI64 = "l" +const __PRIPTR = "l" +const __RES = 19960801 +const __UAPI_DEF_IN6_ADDR = 0 +const __UAPI_DEF_IN6_ADDR_ALT = 0 +const __UAPI_DEF_IN6_PKTINFO = 0 +const __UAPI_DEF_IN_ADDR = 0 +const __UAPI_DEF_IN_CLASS = 0 +const __UAPI_DEF_IN_IPPROTO = 0 +const __UAPI_DEF_IN_PKTINFO = 0 +const __UAPI_DEF_IP6_MTUINFO = 0 +const __UAPI_DEF_IPPROTO_V6 = 0 +const __UAPI_DEF_IPV6_MREQ = 0 +const __UAPI_DEF_IPV6_OPTIONS = 0 +const __UAPI_DEF_IP_MREQ = 0 +const __UAPI_DEF_SOCKADDR_IN = 0 +const __UAPI_DEF_SOCKADDR_IN6 = 0 +const _res = 0 + +type Tns_sect = int32 + +type ___ns_sect = int32 + +const _ns_s_qd = 0 +const _ns_s_zn = 0 +const _ns_s_an = 1 +const _ns_s_pr = 1 +const _ns_s_ns = 2 +const _ns_s_ud = 2 +const _ns_s_ar = 3 +const _ns_s_max = 4 + +type Tns_msg = struct { + F_msg uintptr + F_eom uintptr + F_id Tuint16_t + F_flags Tuint16_t + F_counts [4]Tuint16_t + F_sections [4]uintptr + F_sect Tns_sect + F_rrnum int32 + F_msg_ptr uintptr +} + +type t__ns_msg = Tns_msg + +type T_ns_flagdata = struct { + Fmask int32 + Fshift int32 +} + +type Tns_rr = struct { + Fname [1025]uint8 + Ftype1 Tuint16_t + Frr_class Tuint16_t + Fttl Tuint32_t + Frdlength Tuint16_t + Frdata uintptr +} + +type t__ns_rr = Tns_rr + +type Tns_flag = int32 + +type ___ns_flag = int32 + +const _ns_f_qr = 0 +const _ns_f_opcode = 1 +const _ns_f_aa = 2 +const _ns_f_tc = 3 +const _ns_f_rd = 4 +const _ns_f_ra = 5 +const _ns_f_z = 6 +const _ns_f_ad = 7 +const _ns_f_cd = 8 +const _ns_f_rcode = 9 +const _ns_f_max = 10 + +type Tns_opcode = int32 + +type ___ns_opcode = int32 + +const _ns_o_query = 0 +const _ns_o_iquery = 1 +const _ns_o_status = 2 +const _ns_o_notify = 4 +const _ns_o_update = 5 +const _ns_o_max = 6 + +type Tns_rcode = int32 + +type ___ns_rcode = int32 + +const _ns_r_noerror = 0 +const _ns_r_formerr = 1 +const _ns_r_servfail = 2 +const _ns_r_nxdomain = 3 +const _ns_r_notimpl = 4 +const _ns_r_refused = 5 +const _ns_r_yxdomain = 6 +const _ns_r_yxrrset = 7 +const _ns_r_nxrrset = 8 +const _ns_r_notauth = 9 +const _ns_r_notzone = 10 +const _ns_r_max = 11 +const _ns_r_badvers = 16 +const _ns_r_badsig = 16 +const _ns_r_badkey = 17 +const _ns_r_badtime = 18 + +type Tns_update_operation = int32 + +type ___ns_update_operation = int32 + +const _ns_uop_delete = 0 +const _ns_uop_add = 1 +const _ns_uop_max = 2 + +type Tns_tsig_key1 = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tsig_key = struct { + Fname [1025]uint8 + Falg [1025]uint8 + Fdata uintptr + Flen1 int32 +} + +type Tns_tcp_tsig_state1 = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_tcp_tsig_state = struct { + Fcounter int32 + Fkey uintptr + Fctx uintptr + Fsig [512]uint8 + Fsiglen int32 +} + +type Tns_type = int32 + +type ___ns_type = int32 + +const _ns_t_invalid = 0 +const _ns_t_a = 1 +const _ns_t_ns = 2 +const _ns_t_md = 3 +const _ns_t_mf = 4 +const _ns_t_cname = 5 +const _ns_t_soa = 6 +const _ns_t_mb = 7 +const _ns_t_mg = 8 +const _ns_t_mr = 9 +const _ns_t_null = 10 +const _ns_t_wks = 11 +const _ns_t_ptr = 12 +const _ns_t_hinfo = 13 +const _ns_t_minfo = 14 +const _ns_t_mx = 15 +const _ns_t_txt = 16 +const _ns_t_rp = 17 +const _ns_t_afsdb = 18 +const _ns_t_x25 = 19 +const _ns_t_isdn = 20 +const _ns_t_rt = 21 +const _ns_t_nsap = 22 +const _ns_t_nsap_ptr = 23 +const _ns_t_sig = 24 +const _ns_t_key = 25 +const _ns_t_px = 26 +const _ns_t_gpos = 27 +const _ns_t_aaaa = 28 +const _ns_t_loc = 29 +const _ns_t_nxt = 30 +const _ns_t_eid = 31 +const _ns_t_nimloc = 32 +const _ns_t_srv = 33 +const _ns_t_atma = 34 +const _ns_t_naptr = 35 +const _ns_t_kx = 36 +const _ns_t_cert = 37 +const _ns_t_a6 = 38 +const _ns_t_dname = 39 +const _ns_t_sink = 40 +const _ns_t_opt = 41 +const _ns_t_apl = 42 +const _ns_t_ds = 43 +const _ns_t_sshfp = 44 +const _ns_t_ipseckey = 45 +const _ns_t_rrsig = 46 +const _ns_t_nsec = 47 +const _ns_t_dnskey = 48 +const _ns_t_dhcid = 49 +const _ns_t_nsec3 = 50 +const _ns_t_nsec3param = 51 +const _ns_t_tlsa = 52 +const _ns_t_smimea = 53 +const _ns_t_hip = 55 +const _ns_t_ninfo = 56 +const _ns_t_rkey = 57 +const _ns_t_talink = 58 +const _ns_t_cds = 59 +const _ns_t_cdnskey = 60 +const _ns_t_openpgpkey = 61 +const _ns_t_csync = 62 +const _ns_t_spf = 99 +const _ns_t_uinfo = 100 +const _ns_t_uid = 101 +const _ns_t_gid = 102 +const _ns_t_unspec = 103 +const _ns_t_nid = 104 +const _ns_t_l32 = 105 +const _ns_t_l64 = 106 +const _ns_t_lp = 107 +const _ns_t_eui48 = 108 +const _ns_t_eui64 = 109 +const _ns_t_tkey = 249 +const _ns_t_tsig = 250 +const _ns_t_ixfr = 251 +const _ns_t_axfr = 252 +const _ns_t_mailb = 253 +const _ns_t_maila = 254 +const _ns_t_any = 255 +const _ns_t_zxfr = 256 +const _ns_t_uri = 256 +const _ns_t_caa = 257 +const _ns_t_avc = 258 +const _ns_t_ta = 32768 +const _ns_t_dlv = 32769 +const _ns_t_max = 65536 + +type Tns_class = int32 + +type ___ns_class = int32 + +const _ns_c_invalid = 0 +const _ns_c_in = 1 +const _ns_c_2 = 2 +const _ns_c_chaos = 3 +const _ns_c_hs = 4 +const _ns_c_none = 254 +const _ns_c_any = 255 +const _ns_c_max = 65536 + +type Tns_key_types = int32 + +type ___ns_key_types = int32 + +const _ns_kt_rsa = 1 +const _ns_kt_dh = 2 +const _ns_kt_dsa = 3 +const _ns_kt_private = 254 + +type Tns_cert_types = int32 + +type ___ns_cert_types = int32 + +const _cert_t_pkix = 1 +const _cert_t_spki = 2 +const _cert_t_pgp = 3 +const _cert_t_url = 253 +const _cert_t_oid = 254 + +type THEADER = struct { + F__ccgo0 uint32 + F__ccgo4 uint32 + F__ccgo8 uint32 +} + +type Timaxdiv_t = struct { + Fquot Tintmax_t + Frem Tintmax_t +} + +type Tin_port_t = uint16 + +type Tin_addr_t = uint32 + +type Tin_addr = struct { + Fs_addr Tin_addr_t +} + +type Tsockaddr_in = struct { + Fsin_family Tsa_family_t + Fsin_port Tin_port_t + Fsin_addr Tin_addr + Fsin_zero [8]Tuint8_t +} + +type Tin6_addr = struct { + F__in6_union struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + } +} + +type Tsockaddr_in6 = struct { + Fsin6_family Tsa_family_t + Fsin6_port Tin_port_t + Fsin6_flowinfo Tuint32_t + Fsin6_addr Tin6_addr + Fsin6_scope_id Tuint32_t +} + +type Tipv6_mreq = struct { + Fipv6mr_multiaddr Tin6_addr + Fipv6mr_interface uint32 +} + +type Tip_opts = struct { + Fip_dst Tin_addr + Fip_opts [40]uint8 +} + +type Tres_state = uintptr + +type t__res_state = struct { + Fretrans int32 + Fretry int32 + Foptions uint64 + Fnscount int32 + Fnsaddr_list [3]Tsockaddr_in + Fid uint16 + Fdnsrch [7]uintptr + Fdefdname [256]uint8 + Fpfcode uint64 + F__ccgo392 uint32 + Fsort_list [10]struct { + Faddr Tin_addr + Fmask Tuint32_t + } + Fqhook uintptr + Frhook uintptr + Fres_h_errno int32 + F_vcsock int32 + F_flags uint32 + F_u struct { + F_ext [0]struct { + Fnscount Tuint16_t + Fnsmap [3]Tuint16_t + Fnssocks [3]int32 + Fnscount6 Tuint16_t + Fnsinit Tuint16_t + Fnsaddrs [3]uintptr + F_initstamp [2]uint32 + } + Fpad [52]uint8 + F__ccgo_pad2 [4]byte + } +} + +type Tres_sym = struct { + Fnumber int32 + Fname uintptr + Fhumanname uintptr +} + +/* RFC 1035 message compression */ + +// C documentation +// +// /* label start offsets of a compressed domain name s */ +func _getoffs(tls *TLS, offs uintptr, base uintptr, s uintptr) (r int32) { + var i, v2 int32 + _, _ = i, v2 + i = 0 + for { + for int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != 0 { + if int32(*(*uint8)(unsafe.Pointer(s)))&int32(0xc0) != int32(0xc0) { + return 0 + } + s = base + uintptr(int32(*(*uint8)(unsafe.Pointer(s)))&Int32FromInt32(0x3f)<= int64(0x4000) { + return 0 + } + v2 = i + i++ + *(*int16)(unsafe.Pointer(offs + uintptr(v2)*2)) = int16(int64(s) - int64(base)) + s += uintptr(int32(*(*uint8)(unsafe.Pointer(s))) + int32(1)) + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* label lengths of an ascii domain name s */ +func _getlens(tls *TLS, lens uintptr, s uintptr, l int32) (r int32) { + var i, j, k, v3, v4 int32 + _, _, _, _, _ = i, j, k, v3, v4 + i = 0 + j = 0 + k = 0 + for { + for { + if !(j < l && int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-k)-uint32(1) > uint32(62) { + return 0 + } + v3 = i + i++ + *(*uint8)(unsafe.Pointer(lens + uintptr(v3))) = uint8(j - k) + if j == l { + return i + } + j++ + v4 = j + k = v4 + goto _1 + _1: + } + return r +} + +// C documentation +// +// /* longest suffix match of an ascii domain with a compressed domain name dn */ +func _match(tls *TLS, offset uintptr, base uintptr, dn uintptr, end uintptr, lens uintptr, nlen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var l, m, noff, o, v2, v3 int32 + var _ /* offs at bp+0 */ [128]int16 + _, _, _, _, _, _ = l, m, noff, o, v2, v3 + m = 0 + noff = _getoffs(tls, bp, base, dn) + if !(noff != 0) { + return 0 + } + for { + nlen-- + v2 = nlen + l = int32(*(*uint8)(unsafe.Pointer(lens + uintptr(v2)))) + noff-- + v3 = noff + o = int32((*(*[128]int16)(unsafe.Pointer(bp)))[v3]) + end -= uintptr(l) + if l != int32(*(*uint8)(unsafe.Pointer(base + uintptr(o)))) || Xmemcmp(tls, base+uintptr(o)+uintptr(1), end, uint64(l)) != 0 { + return m + } + *(*int32)(unsafe.Pointer(offset)) = o + m += l + if nlen != 0 { + m++ + } + if !(nlen != 0) || !(noff != 0) { + return m + } + end-- + goto _1 + _1: + } + return r +} + +func Xdn_comp(tls *TLS, src uintptr, dst uintptr, space int32, dnptrs uintptr, lastdnptr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v src=%v dst=%v space=%v dnptrs=%v lastdnptr=%v, (%v:)", tls, src, dst, space, dnptrs, lastdnptr, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var bestlen, bestoff, i, j, m, n, v3, v4, v5, v6, v7 int32 + var end, p, v8 uintptr + var l Tsize_t + var _ /* lens at bp+4 */ [127]uint8 + var _ /* offset at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bestlen, bestoff, end, i, j, l, m, n, p, v3, v4, v5, v6, v7, v8 + m = 0 + bestlen = 0 + l = Xstrnlen(tls, src, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(src + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l > uint64(253) || space <= 0 { + return -int32(1) + } + if !(l != 0) { + *(*uint8)(unsafe.Pointer(dst)) = uint8(0) + return int32(1) + } + end = src + uintptr(l) + n = _getlens(tls, bp+4, src, int32(l)) + if !(n != 0) { + return -int32(1) + } + p = dnptrs + if p != 0 && *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + for { + if !(*(*uintptr)(unsafe.Pointer(p)) != 0) { + break + } + m = _match(tls, bp, *(*uintptr)(unsafe.Pointer(dnptrs)), *(*uintptr)(unsafe.Pointer(p)), end, bp+4, n) + if m > bestlen { + bestlen = m + bestoff = *(*int32)(unsafe.Pointer(bp)) + if uint64(m) == l { + break + } + } + goto _1 + _1: + ; + p += 8 + } + } + /* encode unmatched part */ + if uint64(space) < l-uint64(bestlen)+uint64(2)+BoolUint64(uint64(bestlen-Int32FromInt32(1)) < l-Uint64FromInt32(1)) { + return -int32(1) + } + Xmemcpy(tls, dst+uintptr(1), src, l-uint64(bestlen)) + v3 = Int32FromInt32(0) + j = v3 + i = v3 + for { + if !(uint64(i) < l-uint64(bestlen)) { + break + } + *(*uint8)(unsafe.Pointer(dst + uintptr(i))) = (*(*[127]uint8)(unsafe.Pointer(bp + 4)))[j] + goto _2 + _2: + ; + v4 = j + j++ + i += int32((*(*[127]uint8)(unsafe.Pointer(bp + 4)))[v4]) + int32(1) + } + /* add tail */ + if bestlen != 0 { + v5 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v5))) = uint8(int32(0xc0) | bestoff>>int32(8)) + v6 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v6))) = uint8(bestoff) + } else { + v7 = i + i++ + *(*uint8)(unsafe.Pointer(dst + uintptr(v7))) = uint8(0) + } + /* save dst pointer */ + if i > int32(2) && lastdnptr != 0 && dnptrs != 0 && *(*uintptr)(unsafe.Pointer(dnptrs)) != 0 { + for *(*uintptr)(unsafe.Pointer(p)) != 0 { + p += 8 + } + if p+uintptr(1)*8 < lastdnptr { + v8 = p + p += 8 + *(*uintptr)(unsafe.Pointer(v8)) = dst + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + } + return i +} + +func X__dn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + var dbegin, dend, p, v3, v4, v6, v7 uintptr + var i, j, len1, v1, v5 int32 + _, _, _, _, _, _, _, _, _, _, _, _ = dbegin, dend, i, j, len1, p, v1, v3, v4, v5, v6, v7 + p = src + dbegin = dest + len1 = -int32(1) + if p == end || space <= 0 { + return -int32(1) + } + if space > int32(254) { + v1 = int32(254) + } else { + v1 = space + } + dend = dest + uintptr(v1) + /* detect reference loop using an iteration counter */ + i = 0 + for { + if !(int64(i) < int64(end)-int64(base)) { + break + } + /* loop invariants: p= int64(end)-int64(base) { + return -int32(1) + } + p = base + uintptr(j) + } else { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + if dest != dbegin { + v3 = dest + dest++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + } + v4 = p + p++ + j = int32(*(*uint8)(unsafe.Pointer(v4))) + if int64(j) >= int64(end)-int64(p) || int64(j) >= int64(dend)-int64(dest) { + return -int32(1) + } + for { + v5 = j + j-- + if !(v5 != 0) { + break + } + v6 = dest + dest++ + v7 = p + p++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + } + } else { + *(*uint8)(unsafe.Pointer(dest)) = uint8(0) + if len1 < 0 { + len1 = int32(int64(p+uintptr(1)) - int64(src)) + } + return len1 + } + } + goto _2 + _2: + ; + i += int32(2) + } + return -int32(1) +} + +func Xdn_expand(tls *TLS, base uintptr, end uintptr, src uintptr, dest uintptr, space int32) (r int32) { + if __ccgo_strace { + trc("tls=%v base=%v end=%v src=%v dest=%v space=%v, (%v:)", tls, base, end, src, dest, space, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dn_expand(tls, base, end, src, dest, space) +} + +func Xdn_skipname(tls *TLS, s uintptr, end uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v end=%v, (%v:)", tls, s, end, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = s + for p < end { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + return int32(int64(p) - int64(s) + int64(1)) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) >= int32(192) { + if p+uintptr(1) < end { + return int32(int64(p) - int64(s) + int64(2)) + } else { + break + } + } else { + if int64(end)-int64(p) < int64(int32(*(*uint8)(unsafe.Pointer(p)))+int32(1)) { + break + } else { + p += uintptr(int32(*(*uint8)(unsafe.Pointer(p))) + int32(1)) + } + } + } + } + return -int32(1) +} + +const AI_ADDRCONFIG = 32 +const AI_ALL = 16 +const AI_CANONNAME = 2 +const AI_NUMERICHOST = 4 +const AI_NUMERICSERV = 1024 +const AI_PASSIVE = 1 +const AI_V4MAPPED = 8 +const EAI_AGAIN = -3 +const EAI_BADFLAGS = -1 +const EAI_FAIL = -4 +const EAI_FAMILY = -6 +const EAI_MEMORY = -10 +const EAI_NODATA = -5 +const EAI_NONAME = -2 +const EAI_OVERFLOW = -12 +const EAI_SERVICE = -8 +const EAI_SOCKTYPE = -7 +const EAI_SYSTEM = -11 +const MAXADDRS = 48 +const MAXSERVS = 2 +const NI_DGRAM = 16 +const NI_NAMEREQD = 8 +const NI_NOFQDN = 4 +const NI_NUMERICHOST = 1 +const NI_NUMERICSCOPE = 256 +const NI_NUMERICSERV = 2 + +type Taddrinfo = struct { + Fai_flags int32 + Fai_family int32 + Fai_socktype int32 + Fai_protocol int32 + Fai_addrlen Tsocklen_t + Fai_addr uintptr + Fai_canonname uintptr + Fai_next uintptr +} + +type Tnetent = struct { + Fn_name uintptr + Fn_aliases uintptr + Fn_addrtype int32 + Fn_net Tuint32_t +} + +type Thostent = struct { + Fh_name uintptr + Fh_aliases uintptr + Fh_addrtype int32 + Fh_length int32 + Fh_addr_list uintptr +} + +type Tservent = struct { + Fs_name uintptr + Fs_aliases uintptr + Fs_port int32 + Fs_proto uintptr +} + +type Tprotoent = struct { + Fp_name uintptr + Fp_aliases uintptr + Fp_proto int32 +} + +type Taibuf = struct { + Fai Taddrinfo + Fsa Tsa + Flock [1]int32 + Fslot int16 + Fref int16 +} + +type Taddress = struct { + Ffamily int32 + Fscopeid uint32 + Faddr [16]Tuint8_t + Fsortkey int32 +} + +type Tservice = struct { + Fport Tuint16_t + Fproto uint8 + Fsocktype uint8 +} + +type Tresolvconf = struct { + Fns [3]Taddress + Fnns uint32 + Fattempts uint32 + Fndots uint32 + Ftimeout uint32 +} + +func X__dns_parse(tls *TLS, r uintptr, rlen int32, callback uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v rlen=%v callback=%v ctx=%v, (%v:)", tls, r, rlen, callback, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var ancount, len1, qdcount, v1, v2 int32 + var p uintptr + _, _, _, _, _, _ = ancount, len1, p, qdcount, v1, v2 + if rlen < int32(12) { + return -int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(r + 3)))&int32(15) != 0 { + return 0 + } + p = r + uintptr(12) + qdcount = int32(*(*uint8)(unsafe.Pointer(r + 4)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 5))) + ancount = int32(*(*uint8)(unsafe.Pointer(r + 6)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(r + 7))) + for { + v1 = qdcount + qdcount-- + if !(v1 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(6) { + return -int32(1) + } + p += uintptr(int32(5) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + } + for { + v2 = ancount + ancount-- + if !(v2 != 0) { + break + } + for int64(p)-int64(r) < int64(rlen) && uint32(*(*uint8)(unsafe.Pointer(p)))-uint32(1) < uint32(127) { + p++ + } + if p > r+uintptr(rlen)-uintptr(12) { + return -int32(1) + } + p += uintptr(int32(1) + BoolInt32(!!(*(*uint8)(unsafe.Pointer(p)) != 0))) + len1 = int32(*(*uint8)(unsafe.Pointer(p + 8)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(p + 9))) + if int64(len1+int32(10)) > int64(r+uintptr(rlen))-int64(p) { + return -int32(1) + } + if (*(*func(*TLS, uintptr, int32, uintptr, int32, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{callback})))(tls, ctx, int32(*(*uint8)(unsafe.Pointer(p + 1))), p+uintptr(10), len1, r, rlen) < 0 { + return -int32(1) + } + p += uintptr(int32(10) + len1) + } + return 0 +} + +type Tsa = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte +} + +func Xsethostent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } +} + +func Xgethostent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xendhostent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendnetent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xendhostent(tls) +} + +func Xsetnetent(tls *TLS, x int32) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + } + Xsethostent(tls, x) +} + +const ARPD_FLUSH = 3 +const ARPD_LOOKUP = 2 +const ARPD_UPDATE = 1 +const ARPHRD_6LOWPAN = 825 +const ARPHRD_ADAPT = 264 +const ARPHRD_APPLETLK = 8 +const ARPHRD_ARCNET = 7 +const ARPHRD_ASH = 781 +const ARPHRD_ATM = 19 +const ARPHRD_AX25 = 3 +const ARPHRD_BIF = 775 +const ARPHRD_CAIF = 822 +const ARPHRD_CAN = 280 +const ARPHRD_CHAOS = 5 +const ARPHRD_CISCO = 513 +const ARPHRD_CSLIP = 257 +const ARPHRD_CSLIP6 = 259 +const ARPHRD_DDCMP = 517 +const ARPHRD_DLCI = 15 +const ARPHRD_ECONET = 782 +const ARPHRD_EETHER = 2 +const ARPHRD_ETHER = 1 +const ARPHRD_EUI64 = 27 +const ARPHRD_FCAL = 785 +const ARPHRD_FCFABRIC = 787 +const ARPHRD_FCPL = 786 +const ARPHRD_FCPP = 784 +const ARPHRD_FDDI = 774 +const ARPHRD_FRAD = 770 +const ARPHRD_HDLC = 513 +const ARPHRD_HIPPI = 780 +const ARPHRD_HWX25 = 272 +const ARPHRD_IEEE1394 = 24 +const ARPHRD_IEEE802 = 6 +const ARPHRD_IEEE80211 = 801 +const ARPHRD_IEEE80211_PRISM = 802 +const ARPHRD_IEEE80211_RADIOTAP = 803 +const ARPHRD_IEEE802154 = 804 +const ARPHRD_IEEE802154_MONITOR = 805 +const ARPHRD_IEEE802_TR = 800 +const ARPHRD_INFINIBAND = 32 +const ARPHRD_IP6GRE = 823 +const ARPHRD_IPDDP = 777 +const ARPHRD_IPGRE = 778 +const ARPHRD_IRDA = 783 +const ARPHRD_LAPB = 516 +const ARPHRD_LOCALTLK = 773 +const ARPHRD_LOOPBACK = 772 +const ARPHRD_METRICOM = 23 +const ARPHRD_NETLINK = 824 +const ARPHRD_NETROM = 0 +const ARPHRD_NONE = 65534 +const ARPHRD_PHONET = 820 +const ARPHRD_PHONET_PIPE = 821 +const ARPHRD_PIMREG = 779 +const ARPHRD_PPP = 512 +const ARPHRD_PRONET = 4 +const ARPHRD_RAWHDLC = 518 +const ARPHRD_RAWIP = 519 +const ARPHRD_ROSE = 270 +const ARPHRD_RSRVD = 260 +const ARPHRD_SIT = 776 +const ARPHRD_SKIP = 771 +const ARPHRD_SLIP = 256 +const ARPHRD_SLIP6 = 258 +const ARPHRD_TUNNEL = 768 +const ARPHRD_TUNNEL6 = 769 +const ARPHRD_VOID = 65535 +const ARPHRD_VSOCKMON = 826 +const ARPHRD_X25 = 271 +const ARPOP_InREPLY = 9 +const ARPOP_InREQUEST = 8 +const ARPOP_NAK = 10 +const ARPOP_REPLY = 2 +const ARPOP_REQUEST = 1 +const ARPOP_RREPLY = 4 +const ARPOP_RREQUEST = 3 +const ATF_COM = 2 +const ATF_DONTPUB = 64 +const ATF_MAGIC = 128 +const ATF_NETMASK = 32 +const ATF_PERM = 4 +const ATF_PUBL = 8 +const ATF_USETRAILERS = 16 +const ETHERMIN = 46 +const ETHERMTU = 1500 +const ETHERTYPE_AARP = 33011 +const ETHERTYPE_ARP = 2054 +const ETHERTYPE_AT = 32923 +const ETHERTYPE_IP = 2048 +const ETHERTYPE_IPV6 = 34525 +const ETHERTYPE_IPX = 33079 +const ETHERTYPE_LOOPBACK = 36864 +const ETHERTYPE_NTRAILER = 16 +const ETHERTYPE_PUP = 512 +const ETHERTYPE_REVARP = 32821 +const ETHERTYPE_SPRITE = 1280 +const ETHERTYPE_TRAIL = 4096 +const ETHERTYPE_VLAN = 33024 +const ETHER_ADDR_LEN = 6 +const ETHER_CRC_LEN = 4 +const ETHER_HDR_LEN = 14 +const ETHER_MAX_LEN = 1518 +const ETHER_MIN_LEN = 64 +const ETHER_TYPE_LEN = 2 +const ETH_ALEN = 6 +const ETH_DATA_LEN = 1500 +const ETH_FCS_LEN = 4 +const ETH_FRAME_LEN = 1514 +const ETH_HLEN = 14 +const ETH_MAX_MTU = 65535 +const ETH_MIN_MTU = 68 +const ETH_P_1588 = 35063 +const ETH_P_8021AD = 34984 +const ETH_P_8021AH = 35047 +const ETH_P_8021Q = 33024 +const ETH_P_80221 = 35095 +const ETH_P_802_2 = 4 +const ETH_P_802_3 = 1 +const ETH_P_802_3_MIN = 1536 +const ETH_P_802_EX1 = 34997 +const ETH_P_AARP = 33011 +const ETH_P_AF_IUCV = 64507 +const ETH_P_ALL = 3 +const ETH_P_AOE = 34978 +const ETH_P_ARCNET = 26 +const ETH_P_ARP = 2054 +const ETH_P_ATALK = 32923 +const ETH_P_ATMFATE = 34948 +const ETH_P_ATMMPOA = 34892 +const ETH_P_AX25 = 2 +const ETH_P_BATMAN = 17157 +const ETH_P_BPQ = 2303 +const ETH_P_CAIF = 247 +const ETH_P_CAN = 12 +const ETH_P_CANFD = 13 +const ETH_P_CFM = 35074 +const ETH_P_CONTROL = 22 +const ETH_P_CUST = 24582 +const ETH_P_DDCMP = 6 +const ETH_P_DEC = 24576 +const ETH_P_DIAG = 24581 +const ETH_P_DNA_DL = 24577 +const ETH_P_DNA_RC = 24578 +const ETH_P_DNA_RT = 24579 +const ETH_P_DSA = 27 +const ETH_P_DSA_8021Q = 56027 +const ETH_P_ECONET = 24 +const ETH_P_EDSA = 56026 +const ETH_P_ERSPAN = 35006 +const ETH_P_ERSPAN2 = 8939 +const ETH_P_FCOE = 35078 +const ETH_P_FIP = 35092 +const ETH_P_HDLC = 25 +const ETH_P_HSR = 35119 +const ETH_P_IBOE = 35093 +const ETH_P_IEEE802154 = 246 +const ETH_P_IEEEPUP = 2560 +const ETH_P_IEEEPUPAT = 2561 +const ETH_P_IFE = 60734 +const ETH_P_IP = 2048 +const ETH_P_IPV6 = 34525 +const ETH_P_IPX = 33079 +const ETH_P_IRDA = 23 +const ETH_P_LAT = 24580 +const ETH_P_LINK_CTL = 34924 +const ETH_P_LLDP = 35020 +const ETH_P_LOCALTALK = 9 +const ETH_P_LOOP = 96 +const ETH_P_LOOPBACK = 36864 +const ETH_P_MACSEC = 35045 +const ETH_P_MAP = 249 +const ETH_P_MOBITEX = 21 +const ETH_P_MPLS_MC = 34888 +const ETH_P_MPLS_UC = 34887 +const ETH_P_MRP = 35043 +const ETH_P_MVRP = 35061 +const ETH_P_NCSI = 35064 +const ETH_P_NSH = 35151 +const ETH_P_PAE = 34958 +const ETH_P_PAUSE = 34824 +const ETH_P_PHONET = 245 +const ETH_P_PPPTALK = 16 +const ETH_P_PPP_DISC = 34915 +const ETH_P_PPP_MP = 8 +const ETH_P_PPP_SES = 34916 +const ETH_P_PREAUTH = 35015 +const ETH_P_PRP = 35067 +const ETH_P_PUP = 512 +const ETH_P_PUPAT = 513 +const ETH_P_QINQ1 = 37120 +const ETH_P_QINQ2 = 37376 +const ETH_P_QINQ3 = 37632 +const ETH_P_RARP = 32821 +const ETH_P_SCA = 24583 +const ETH_P_SLOW = 34825 +const ETH_P_SNAP = 5 +const ETH_P_TDLS = 35085 +const ETH_P_TEB = 25944 +const ETH_P_TIPC = 35018 +const ETH_P_TRAILER = 28 +const ETH_P_TR_802_2 = 17 +const ETH_P_TSN = 8944 +const ETH_P_WAN_PPP = 7 +const ETH_P_WCCP = 34878 +const ETH_P_X25 = 2053 +const ETH_P_XDSA = 248 +const ETH_TLEN = 2 +const ETH_ZLEN = 60 +const MAX_ADDR_LEN = 7 +const __UAPI_DEF_ETHHDR = 0 + +type Tethhdr = struct { + Fh_dest [6]Tuint8_t + Fh_source [6]Tuint8_t + Fh_proto Tuint16_t +} + +type Tether_addr = struct { + Fether_addr_octet [6]Tuint8_t +} + +type Tether_header = struct { + Fether_dhost [6]Tuint8_t + Fether_shost [6]Tuint8_t + Fether_type Tuint16_t +} + +type Tarphdr = struct { + Far_hrd Tuint16_t + Far_pro Tuint16_t + Far_hln Tuint8_t + Far_pln Tuint8_t + Far_op Tuint16_t +} + +type Tarpreq = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr + Farp_dev [16]uint8 +} + +type Tarpreq_old = struct { + Farp_pa Tsockaddr + Farp_ha Tsockaddr + Farp_flags int32 + Farp_netmask Tsockaddr +} + +type Tarpd_request = struct { + Freq uint16 + Fip Tuint32_t + Fdev uint64 + Fstamp uint64 + Fupdated uint64 + Fha [7]uint8 +} + +type Tether_arp = struct { + Fea_hdr Tarphdr + Farp_sha [6]Tuint8_t + Farp_spa [4]Tuint8_t + Farp_tha [6]Tuint8_t + Farp_tpa [4]Tuint8_t +} + +func Xether_aton_r(tls *TLS, x uintptr, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v p_a=%v, (%v:)", tls, x, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var n uint64 + var _ /* a at bp+0 */ Tether_addr + var _ /* y at bp+8 */ uintptr + _, _ = ii, n + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii != 0 { + if int32(*(*uint8)(unsafe.Pointer(x))) != int32(':') { + return uintptr(0) + } else { + x++ + } + } + n = Xstrtoul(tls, x, bp+8, int32(16)) + x = *(*uintptr)(unsafe.Pointer(bp + 8)) + if n > uint64(0xFF) { + return uintptr(0) + } /* bad byte */ + *(*Tuint8_t)(unsafe.Pointer(bp + uintptr(ii))) = uint8(n) + goto _1 + _1: + ; + ii++ + } + if int32(*(*uint8)(unsafe.Pointer(x))) != 0 { + return uintptr(0) + } /* bad format */ + *(*Tether_addr)(unsafe.Pointer(p_a)) = *(*Tether_addr)(unsafe.Pointer(bp)) + return p_a +} + +func Xether_aton(tls *TLS, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_aton_r(tls, x, uintptr(unsafe.Pointer(&_a))) +} + +var _a Tether_addr + +func Xether_ntoa_r(tls *TLS, p_a uintptr, x uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v x=%v, (%v:)", tls, p_a, x, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ii int32 + var y, v2 uintptr + _, _, _ = ii, y, v2 + y = x + ii = 0 + for { + if !(ii < int32(6)) { + break + } + if ii == 0 { + v2 = __ccgo_ts + 1001 + } else { + v2 = __ccgo_ts + 1006 + } + x += uintptr(Xsprintf(tls, x, v2, VaList(bp+8, int32(*(*Tuint8_t)(unsafe.Pointer(p_a + uintptr(ii))))))) + goto _1 + _1: + ; + ii++ + } + return y +} + +func Xether_ntoa(tls *TLS, p_a uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v p_a=%v, (%v:)", tls, p_a, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xether_ntoa_r(tls, p_a, uintptr(unsafe.Pointer(&_x))) +} + +var _x [18]uint8 + +func Xether_line(tls *TLS, l uintptr, e uintptr, hostname uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v l=%v e=%v hostname=%v, (%v:)", tls, l, e, hostname, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_ntohost(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xether_hostton(tls *TLS, hostname uintptr, e uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v hostname=%v e=%v, (%v:)", tls, hostname, e, origin(2)) + defer func() { trc("-> %v", r) }() + } + return -int32(1) +} + +func Xfreeaddrinfo(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + var b, p2 uintptr + var cnt Tsize_t + _, _, _ = b, cnt, p2 + cnt = uint64(1) + for { + if !((*Taddrinfo)(unsafe.Pointer(p)).Fai_next != 0) { + break + } + goto _1 + _1: + ; + cnt++ + p = (*Taddrinfo)(unsafe.Pointer(p)).Fai_next + } + b = p - uintptr(uint64(UintptrFromInt32(0))) + b -= uintptr((*Taibuf)(unsafe.Pointer(b)).Fslot) * 88 + ___lock(tls, b+76) + p2 = b + 82 + *(*int16)(unsafe.Pointer(p2)) = int16(uint64(*(*int16)(unsafe.Pointer(p2))) - cnt) + if !(*(*int16)(unsafe.Pointer(p2)) != 0) { + Xfree(tls, b) + } else { + ___unlock(tls, b+76) + } +} + +var _msgs = [252]uint8{'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'f', 'l', 'a', 'g', 's', 0, 'N', 'a', 'm', 'e', ' ', 'd', 'o', 'e', 's', ' ', 'n', 'o', 't', ' ', 'r', 'e', 's', 'o', 'l', 'v', 'e', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'a', 'm', 'e', ' ', 'h', 'a', 's', ' ', 'n', 'o', ' ', 'u', 's', 'a', 'b', 'l', 'e', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 'a', 'd', 'd', 'r', 'e', 's', 's', ' ', 'f', 'a', 'm', 'i', 'l', 'y', ' ', 'o', 'r', ' ', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'l', 'e', 'n', 'g', 't', 'h', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'o', 'c', 'k', 'e', 't', ' ', 't', 'y', 'p', 'e', 0, 'U', 'n', 'r', 'e', 'c', 'o', 'g', 'n', 'i', 'z', 'e', 'd', ' ', 's', 'e', 'r', 'v', 'i', 'c', 'e', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'S', 'y', 's', 't', 'e', 'm', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'O', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xgai_strerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs)) + ecode++ + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode++ + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1616) + defer tls.Free(1616) + var canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, proto, r, s, saved_errno, socktype, v3 int32 + var out, outcanon uintptr + var ta [2]uintptr + var tf [2]int32 + var tl [2]Tsocklen_t + var v5 uint64 + var _ /* addrs at bp+8 */ [48]Taddress + var _ /* canon at bp+1352 */ [256]uint8 + var _ /* cs at bp+1608 */ int32 + var _ /* ports at bp+0 */ [2]Tservice + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = canon_len, family, flags, i, j, k, mask, naddrs, nais, no_family, nservs, out, outcanon, proto, r, s, saved_errno, socktype, ta, tf, tl, v3, v5 + family = PF_UNSPEC + flags = 0 + proto = 0 + socktype = 0 + no_family = 0 + if !(host != 0) && !(serv != 0) { + return -int32(2) + } + if hint != 0 { + family = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_family + flags = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_flags + proto = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_protocol + socktype = (*Taddrinfo)(unsafe.Pointer(hint)).Fai_socktype + mask = Int32FromInt32(AI_PASSIVE) | Int32FromInt32(AI_CANONNAME) | Int32FromInt32(AI_NUMERICHOST) | Int32FromInt32(AI_V4MAPPED) | Int32FromInt32(AI_ALL) | Int32FromInt32(AI_ADDRCONFIG) | Int32FromInt32(AI_NUMERICSERV) + if flags&mask != flags { + return -int32(1) + } + switch family { + case int32(PF_INET): + fallthrough + case int32(PF_INET6): + fallthrough + case PF_UNSPEC: + default: + return -int32(6) + } + } + if flags&int32(AI_ADDRCONFIG) != 0 { + tf = [2]int32{ + 0: int32(PF_INET), + 1: int32(PF_INET6), + } + ta = [2]uintptr{ + 0: uintptr(unsafe.Pointer(&_lo4)), + 1: uintptr(unsafe.Pointer(&_lo6)), + } + tl = [2]Tsocklen_t{ + 0: uint32(16), + 1: uint32(28), + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family == tf[int32(1)-i] { + goto _1 + } + s = Xsocket(tls, tf[i], Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_DGRAM), int32(IPPROTO_UDP)) + if s >= 0 { + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+1608) + r = Xconnect(tls, s, ta[i], tl[i]) + saved_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 1608)), uintptr(0)) + Xclose(tls, s) + if !(r != 0) { + goto _1 + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = saved_errno + } + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EADDRNOTAVAIL): + fallthrough + case int32(EAFNOSUPPORT): + fallthrough + case int32(EHOSTUNREACH): + fallthrough + case int32(ENETDOWN): + fallthrough + case int32(ENETUNREACH): + default: + return -int32(11) + } + if family == tf[i] { + no_family = int32(1) + } + family = tf[int32(1)-i] + goto _1 + _1: + ; + i++ + } + } + nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) + if nservs < 0 { + return nservs + } + naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) + if naddrs < 0 { + return naddrs + } + if no_family != 0 { + return -int32(5) + } + nais = nservs * naddrs + canon_len = int32(Xstrlen(tls, bp+1352)) + out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(88)+uint64(canon_len)+uint64(1)) + if !(out != 0) { + return -int32(10) + } + if canon_len != 0 { + outcanon = out + uintptr(nais)*88 + Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+int32(1))) + } else { + outcanon = uintptr(0) + } + v3 = Int32FromInt32(0) + i = v3 + k = v3 + for { + if !(i < naddrs) { + break + } + j = 0 + for { + if !(j < nservs) { + break + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fslot = int16(k) + if (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily == int32(PF_INET) { + v5 = uint64(16) + } else { + v5 = uint64(28) + } + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k)*88))).Fai = Taddrinfo{ + Fai_family: (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily, + Fai_socktype: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fsocktype), + Fai_protocol: int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fproto), + Fai_addrlen: uint32(v5), + Fai_addr: out + uintptr(k)*88 + 48, + Fai_canonname: outcanon, + } + if k != 0 { + (*(*Taibuf)(unsafe.Pointer(out + uintptr(k-int32(1))*88))).Fai.Fai_next = out + uintptr(k)*88 + } + switch (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Ffamily { + case int32(PF_INET): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) + case int32(PF_INET6): + *(*Tsa_family_t)(unsafe.Pointer(out + uintptr(k)*88 + 48)) = uint16(PF_INET6) + *(*Tin_port_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 2)) = Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[j].Fport) + *(*Tuint32_t)(unsafe.Pointer(out + uintptr(k)*88 + 48 + 24)) = (*(*[48]Taddress)(unsafe.Pointer(bp + 8)))[i].Fscopeid + Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) + break + } + goto _4 + _4: + ; + j++ + k++ + } + goto _2 + _2: + ; + i++ + } + (*(*Taibuf)(unsafe.Pointer(out))).Fref = int16(nais) + *(*uintptr)(unsafe.Pointer(res)) = out + return 0 +} + +/* Define the "an address is configured" condition for address + * families via ability to create a socket for the family plus + * routability of the loopback address for the family. */ +var _lo4 = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + Fsin_addr: Tin_addr{ + Fs_addr: uint32(0x7f000001), + }, +} + +var _lo6 = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_addr: Tin6_addr{ + F__in6_union: *(*struct { + F__s6_addr16 [0][8]Tuint16_t + F__s6_addr32 [0][4]Tuint32_t + F__s6_addr [16]Tuint8_t + })(unsafe.Pointer(&[16]Tuint8_t{ + 15: uint8(1), + })), + }, +} + +const EAI_ADDRFAMILY = -9 +const EAI_ALLDONE = -103 +const EAI_CANCELED = -101 +const EAI_IDN_ENCODE = -105 +const EAI_INPROGRESS = -100 +const EAI_INTR = -104 +const EAI_NOTCANCELED = -102 +const HOST_NOT_FOUND = 1 +const MCAST_BLOCK_SOURCE = 43 +const MCAST_EXCLUDE = 0 +const MCAST_INCLUDE = 1 +const MCAST_JOIN_GROUP = 42 +const MCAST_JOIN_SOURCE_GROUP = 46 +const MCAST_LEAVE_GROUP = 45 +const MCAST_LEAVE_SOURCE_GROUP = 47 +const MCAST_MSFILTER = 48 +const MCAST_UNBLOCK_SOURCE = 44 +const NI_MAXHOST = 255 +const NI_MAXSERV = 32 +const NO_ADDRESS = 4 +const NO_DATA = 4 +const NO_RECOVERY = 3 +const TRY_AGAIN = 2 +const h_errno = 0 + +type Tip_mreq = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr +} + +type Tip_mreqn = struct { + Fimr_multiaddr Tin_addr + Fimr_address Tin_addr + Fimr_ifindex int32 +} + +type Tip_mreq_source = struct { + Fimr_multiaddr Tin_addr + Fimr_interface Tin_addr + Fimr_sourceaddr Tin_addr +} + +type Tip_msfilter = struct { + Fimsf_multiaddr Tin_addr + Fimsf_interface Tin_addr + Fimsf_fmode Tuint32_t + Fimsf_numsrc Tuint32_t + Fimsf_slist [1]Tin_addr +} + +type Tgroup_req = struct { + Fgr_interface Tuint32_t + Fgr_group Tsockaddr_storage +} + +type Tgroup_source_req = struct { + Fgsr_interface Tuint32_t + Fgsr_group Tsockaddr_storage + Fgsr_source Tsockaddr_storage +} + +type Tgroup_filter = struct { + Fgf_interface Tuint32_t + Fgf_group Tsockaddr_storage + Fgf_fmode Tuint32_t + Fgf_numsrc Tuint32_t + Fgf_slist [1]Tsockaddr_storage +} + +type Tin_pktinfo = struct { + Fipi_ifindex int32 + Fipi_spec_dst Tin_addr + Fipi_addr Tin_addr +} + +type Tin6_pktinfo = struct { + Fipi6_addr Tin6_addr + Fipi6_ifindex uint32 +} + +type Tip6_mtuinfo = struct { + Fip6m_addr Tsockaddr_in6 + Fip6m_mtu Tuint32_t +} + +func Xgethostbyaddr(tls *TLS, a uintptr, l Tsocklen_t, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h) + size += size + uint64(1) + _h = Xmalloc(tls, size) + if !(_h != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyaddr_r(tls, a, l, af, _h, _h+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h uintptr + +func Xgethostbyaddr_r(tls *TLS, a uintptr, l Tsocklen_t, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var sl Tsocklen_t + var v1 uint64 + var _ /* sa at bp+0 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _ = i, sl, v1 + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp)) = uint16(af) + if af == int32(PF_INET6) { + v1 = uint64(28) + } else { + v1 = uint64(16) + } + sl = uint32(v1) + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Load address argument into sockaddr structure */ + if af == int32(PF_INET6) && l == uint32(16) { + Xmemcpy(tls, bp+8, a, uint64(16)) + } else { + if af == int32(PF_INET) && l == uint32(4) { + Xmemcpy(tls, bp+4, a, uint64(4)) + } else { + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EINVAL) + } + } + /* Align buffer and check for space for pointers and ip address */ + i = int32(uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1))) + if !(i != 0) { + i = int32(8) + } + if buflen <= Uint64FromInt32(5)*Uint64FromInt64(8)-uint64(i)+uint64(l) { + return int32(ERANGE) + } + buf += uintptr(uint64(8) - uint64(i)) + buflen -= Uint64FromInt32(5)*Uint64FromInt64(8) - uint64(i) + uint64(l) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(2) * Uint64FromInt64(8)) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list)), a, uint64(l)) + buf += uintptr(l) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + 1*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + case -int32(12): + return int32(ERANGE) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + case 0: + break + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + (*Thostent)(unsafe.Pointer(h)).Fh_length = int32(l) + (*Thostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2(tls, name, int32(PF_INET)) +} + +func Xgethostbyname2(tls *TLS, name uintptr, af int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var err int32 + var size Tsize_t + var _ /* res at bp+0 */ uintptr + _, _ = err, size + size = uint64(63) + for cond := true; cond; cond = err == int32(ERANGE) { + Xfree(tls, _h1) + size += size + uint64(1) + _h1 = Xmalloc(tls, size) + if !(_h1 != 0) { + *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = int32(NO_RECOVERY) + return uintptr(0) + } + err = Xgethostbyname2_r(tls, name, af, _h1, _h1+UintptrFromInt32(1)*32, size-uint64(32), bp, X__h_errno_location(tls)) + } + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _h1 uintptr + +func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1600) + defer tls.Free(1600) + var align, need Tsize_t + var cnt, i, v1 int32 + var v3 uintptr + var _ /* addrs at bp+0 */ [48]Taddress + var _ /* canon at bp+1344 */ [256]uint8 + _, _, _, _, _, _ = align, cnt, i, need, v1, v3 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + cnt = X__lookup_name(tls, bp, bp+1344, name, af, int32(AI_CANONNAME)) + if cnt < 0 { + switch cnt { + case -int32(2): + *(*int32)(unsafe.Pointer(err)) = int32(HOST_NOT_FOUND) + return 0 + case -int32(5): + *(*int32)(unsafe.Pointer(err)) = int32(NO_DATA) + return 0 + case -int32(3): + *(*int32)(unsafe.Pointer(err)) = int32(TRY_AGAIN) + return int32(EAGAIN) + default: + fallthrough + case -int32(4): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return int32(EBADMSG) + case -int32(11): + *(*int32)(unsafe.Pointer(err)) = int32(NO_RECOVERY) + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + } + (*Thostent)(unsafe.Pointer(h)).Fh_addrtype = af + if af == int32(PF_INET6) { + v1 = int32(16) + } else { + v1 = int32(4) + } + (*Thostent)(unsafe.Pointer(h)).Fh_length = v1 + /* Align buffer */ + align = -uint64(buf) & (Uint64FromInt64(8) - Uint64FromInt32(1)) + need = Uint64FromInt32(4) * Uint64FromInt64(8) + need += uint64(cnt+Int32FromInt32(1)) * (uint64(8) + uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + need += Xstrlen(tls, name) + uint64(1) + need += Xstrlen(tls, bp+1344) + uint64(1) + need += align + if need > buflen { + return int32(ERANGE) + } + buf += uintptr(align) + (*Thostent)(unsafe.Pointer(h)).Fh_aliases = buf + buf += uintptr(Uint64FromInt32(3) * Uint64FromInt64(8)) + (*Thostent)(unsafe.Pointer(h)).Fh_addr_list = buf + buf += uintptr(uint64(cnt+Int32FromInt32(1)) * uint64(8)) + i = 0 + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = buf + buf += uintptr((*Thostent)(unsafe.Pointer(h)).Fh_length) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*Thostent)(unsafe.Pointer(h)).Fh_length)) + goto _2 + _2: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = uintptr(0) + v3 = buf + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases)) = v3 + (*Thostent)(unsafe.Pointer(h)).Fh_name = v3 + Xstrcpy(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, bp+1344) + buf += uintptr(Xstrlen(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name) + uint64(1)) + if Xstrcmp(tls, (*Thostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = buf + Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)), name) + buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8))) + uint64(1)) + } else { + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) + } + *(*uintptr)(unsafe.Pointer((*Thostent)(unsafe.Pointer(h)).Fh_aliases + 2*8)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(res)) = h + return 0 +} + +func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen Tsize_t, res uintptr, err uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgethostbyname2_r(tls, name, int32(PF_INET), h, buf, buflen, res, err) +} + +const IFADDRS_HASH_SIZE = 64 +const IFA_ADDRESS = 1 +const IFA_BROADCAST = 4 +const IFA_LABEL = 3 +const IFA_LOCAL = 2 +const IFF_ALLMULTI = 512 +const IFF_AUTOMEDIA = 16384 +const IFF_BROADCAST = 2 +const IFF_DEBUG = 4 +const IFF_DORMANT = 131072 +const IFF_DYNAMIC = 32768 +const IFF_ECHO = 262144 +const IFF_LOOPBACK = 8 +const IFF_LOWER_UP = 65536 +const IFF_MASTER = 1024 +const IFF_MULTICAST = 4096 +const IFF_NOARP = 128 +const IFF_NOTRAILERS = 32 +const IFF_POINTOPOINT = 16 +const IFF_PORTSEL = 8192 +const IFF_PROMISC = 256 +const IFF_RUNNING = 64 +const IFF_SLAVE = 2048 +const IFF_UP = 1 +const IFF_VOLATILE = 461914 +const IFHWADDRLEN = 6 +const IFLA_ADDRESS = 1 +const IFLA_BROADCAST = 2 +const IFLA_IFNAME = 3 +const IFLA_STATS = 7 +const IFNAMSIZ = 16 +const IF_NAMESIZE = 16 +const NETLINK_ROUTE = 0 +const NLMSG_DONE = 3 +const NLMSG_ERROR = 2 +const NLMSG_NOOP = 1 +const NLMSG_OVERRUN = 4 +const NLM_F_ACK = 4 +const NLM_F_ATOMIC = 1024 +const NLM_F_DUMP = 768 +const NLM_F_MATCH = 512 +const NLM_F_MULTI = 2 +const NLM_F_REQUEST = 1 +const NLM_F_ROOT = 256 +const RTM_GETADDR = 22 +const RTM_GETLINK = 18 +const RTM_NEWADDR = 20 +const RTM_NEWLINK = 16 +const __UAPI_DEF_IF_IFCONF = 0 +const __UAPI_DEF_IF_IFMAP = 0 +const __UAPI_DEF_IF_IFNAMSIZ = 0 +const __UAPI_DEF_IF_IFREQ = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS = 0 +const __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO = 0 + +type Tifaddrs = struct { + Fifa_next uintptr + Fifa_name uintptr + Fifa_flags uint32 + Fifa_addr uintptr + Fifa_netmask uintptr + Fifa_ifu struct { + Fifu_dstaddr [0]uintptr + Fifu_broadaddr uintptr + } + Fifa_data uintptr +} + +type Tif_nameindex = struct { + Fif_index uint32 + Fif_name uintptr +} + +type Tifaddr = struct { + Fifa_addr Tsockaddr + Fifa_ifu struct { + Fifu_dstaddr [0]Tsockaddr + Fifu_broadaddr Tsockaddr + } + Fifa_ifp uintptr + Fifa_next uintptr +} + +type Tifmap = struct { + Fmem_start uint64 + Fmem_end uint64 + Fbase_addr uint16 + Firq uint8 + Fdma uint8 + Fport uint8 +} + +type Tifreq = struct { + Fifr_ifrn struct { + Fifrn_name [16]uint8 + } + Fifr_ifru struct { + Fifru_dstaddr [0]Tsockaddr + Fifru_broadaddr [0]Tsockaddr + Fifru_netmask [0]Tsockaddr + Fifru_hwaddr [0]Tsockaddr + Fifru_flags [0]int16 + Fifru_ivalue [0]int32 + Fifru_mtu [0]int32 + Fifru_map [0]Tifmap + Fifru_slave [0][16]uint8 + Fifru_newname [0][16]uint8 + Fifru_data [0]uintptr + Fifru_addr Tsockaddr + F__ccgo_pad12 [8]byte + } +} + +type Tifconf = struct { + Fifc_len int32 + Fifc_ifcu struct { + Fifcu_req [0]uintptr + Fifcu_buf uintptr + } +} + +type Tnlmsghdr = struct { + Fnlmsg_len Tuint32_t + Fnlmsg_type Tuint16_t + Fnlmsg_flags Tuint16_t + Fnlmsg_seq Tuint32_t + Fnlmsg_pid Tuint32_t +} + +type Trtattr = struct { + Frta_len uint16 + Frta_type uint16 +} + +type Trtgenmsg = struct { + Frtgen_family uint8 +} + +type Tifinfomsg = struct { + Fifi_family uint8 + F__ifi_pad uint8 + Fifi_type uint16 + Fifi_index int32 + Fifi_flags uint32 + Fifi_change uint32 +} + +type Tifaddrmsg = struct { + Fifa_family Tuint8_t + Fifa_prefixlen Tuint8_t + Fifa_flags Tuint8_t + Fifa_scope Tuint8_t + Fifa_index Tuint32_t +} + +/* getifaddrs() reports hardware addresses with PF_PACKET that implies + * struct sockaddr_ll. But e.g. Infiniband socket address length is + * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct + * to extend ssl_addr - callers should be able to still use it. */ +type Tsockaddr_ll_hack = struct { + Fsll_family uint16 + Fsll_protocol uint16 + Fsll_ifindex int32 + Fsll_hatype uint16 + Fsll_pkttype uint8 + Fsll_halen uint8 + Fsll_addr [24]uint8 +} + +type Tsockany = struct { + Fll [0]Tsockaddr_ll_hack + Fv4 [0]Tsockaddr_in + Fv6 [0]Tsockaddr_in6 + Fsa Tsockaddr + F__ccgo_pad4 [20]byte +} + +type Tifaddrs_storage = struct { + Fifa Tifaddrs + Fhash_next uintptr + Faddr Tsockany + Fnetmask Tsockany + Fifu Tsockany + Findex uint32 + Fname [17]uint8 +} + +type Tifaddrs_ctx = struct { + Ffirst uintptr + Flast uintptr + Fhash [64]uintptr +} + +func Xfreeifaddrs(tls *TLS, ifp uintptr) { + if __ccgo_strace { + trc("tls=%v ifp=%v, (%v:)", tls, ifp, origin(2)) + } + var n uintptr + _ = n + for ifp != 0 { + n = (*Tifaddrs)(unsafe.Pointer(ifp)).Fifa_next + Xfree(tls, ifp) + ifp = n + } +} + +func _copy_addr(tls *TLS, r uintptr, af int32, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32) { + var dst uintptr + var len1 int32 + _, _ = dst, len1 + switch af { + case int32(PF_INET): + dst = sa + 4 + len1 = int32(4) + case int32(PF_INET6): + dst = sa + 8 + len1 = int32(16) + if int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(addr))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(addr + 1)))&int32(0xf) == int32(0x2) { + (*(*Tsockaddr_in6)(unsafe.Pointer(sa))).Fsin6_scope_id = uint32(ifindex) + } + default: + return + } + if addrlen < uint64(len1) { + return + } + (*Tsockany)(unsafe.Pointer(sa)).Fsa.Fsa_family = uint16(af) + Xmemcpy(tls, dst, addr, uint64(len1)) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _gen_netmask(tls *TLS, r uintptr, af int32, sa uintptr, prefixlen int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v1 int32 + var _ /* addr at bp+0 */ [16]Tuint8_t + _, _ = i, v1 + *(*[16]Tuint8_t)(unsafe.Pointer(bp)) = [16]Tuint8_t{} + if uint64(prefixlen) > Uint64FromInt32(8)*Uint64FromInt64(16) { + prefixlen = int32(Uint64FromInt32(8) * Uint64FromInt64(16)) + } + i = prefixlen / int32(8) + Xmemset(tls, bp, int32(0xff), uint64(i)) + if uint64(i) < uint64(16) { + v1 = i + i++ + (*(*[16]Tuint8_t)(unsafe.Pointer(bp)))[v1] = uint8(int32(0xff) << (int32(8) - prefixlen%int32(8))) + } + _copy_addr(tls, r, af, sa, bp, uint64(16), 0) +} + +func _copy_lladdr(tls *TLS, r uintptr, sa uintptr, addr uintptr, addrlen Tsize_t, ifindex int32, hatype uint16) { + if addrlen > uint64(24) { + return + } + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_family = uint16(PF_PACKET) + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_ifindex = ifindex + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_hatype = hatype + (*(*Tsockaddr_ll_hack)(unsafe.Pointer(sa))).Fsll_halen = uint8(addrlen) + Xmemcpy(tls, sa+12, addr, addrlen) + *(*uintptr)(unsafe.Pointer(r)) = sa +} + +func _netlink_msg_to_ifaddr(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var bucket uint32 + var ctx, ifa, ifi, ifs, ifs0, rta uintptr + var stats_len int32 + _, _, _, _, _, _, _, _ = bucket, ctx, ifa, ifi, ifs, ifs0, rta, stats_len + ctx = pctx + ifi = h + UintptrFromInt64(16) + ifa = h + UintptrFromInt64(16) + stats_len = 0 + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != int32(IFLA_STATS) { + goto _1 + } + stats_len = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - Uint64FromInt64(4)) + break + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + } else { + ifs0 = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index%uint32(IFADDRS_HASH_SIZE))*8)) + for { + if !(ifs0 != 0) { + break + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Findex == (*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index { + break + } + goto _2 + _2: + ; + ifs0 = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fhash_next + } + if !(ifs0 != 0) { + return 0 + } + } + ifs = Xcalloc(tls, uint64(1), uint64(200)+uint64(stats_len)) + if ifs == uintptr(0) { + return -int32(1) + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex = uint32((*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFLA_IFNAME): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + case int32(IFLA_ADDRESS): + _copy_lladdr(tls, ifs+24, ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_BROADCAST): + _copy_lladdr(tls, ifs+40, ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index, (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_type) + case int32(IFLA_STATS): + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data = ifs + UintptrFromInt32(1)*200 + Xmemcpy(tls, (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_data, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + break + } + goto _3 + _3: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + bucket = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Findex % uint32(IFADDRS_HASH_SIZE) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fhash_next = *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) + *(*uintptr)(unsafe.Pointer(ctx + 16 + uintptr(bucket)*8)) = ifs + } + } else { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_name + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_flags = (*Tifaddrs_storage)(unsafe.Pointer(ifs0)).Fifa.Fifa_flags + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + switch int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) { + case int32(IFA_ADDRESS): + /* If ifa_addr is already set we, received an IFA_LOCAL before + * so treat this as destination address */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } else { + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + } + case int32(IFA_BROADCAST): + _copy_addr(tls, ifs+40, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+136, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LOCAL): + /* If ifa_addr is set and we get IFA_LOCAL, assume we have + * a point-to-point network. Move address to correct field. */ + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifu = (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Faddr + *(*uintptr)(unsafe.Pointer(ifs + 40)) = ifs + 136 + Xmemset(tls, ifs+64, 0, uint64(36)) + } + _copy_addr(tls, ifs+24, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+64, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4), int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index)) + case int32(IFA_LABEL): + if uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-uint64(4) < uint64(17) { + Xmemcpy(tls, ifs+176, rta+UintptrFromInt64(4), uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len)-Uint64FromInt64(4)) + (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name = ifs + 176 + } + break + } + goto _4 + _4: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_addr != 0 { + _gen_netmask(tls, ifs+32, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_family), ifs+100, int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_prefixlen)) + } + } + if (*Tifaddrs_storage)(unsafe.Pointer(ifs)).Fifa.Fifa_name != 0 { + if !((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst != 0) { + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst = ifs + } + if (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast != 0 { + (*Tifaddrs)(unsafe.Pointer((*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast)).Fifa_next = ifs + } + (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Flast = ifs + } else { + Xfree(tls, ifs) + } + return 0 +} + +func Xgetifaddrs(tls *TLS, ifap uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ifap=%v, (%v:)", tls, ifap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var ctx uintptr + var r int32 + var _ /* _ctx at bp+0 */ Tifaddrs_ctx + _, _ = ctx, r + ctx = bp + Xmemset(tls, ctx, 0, uint64(528)) + r = X__rtnetlink_enumerate(tls, PF_UNSPEC, PF_UNSPEC, __ccgo_fp(_netlink_msg_to_ifaddr), ctx) + if r == 0 { + *(*uintptr)(unsafe.Pointer(ifap)) = (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst + } else { + Xfreeifaddrs(tls, (*Tifaddrs_ctx)(unsafe.Pointer(ctx)).Ffirst) + } + return r +} + +const RR_PTR = 12 + +func _itoa(tls *TLS, p uintptr, x uint32) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + p += uintptr(Uint64FromInt32(3) * Uint64FromInt64(4)) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func _mkptr4(tls *TLS, s uintptr, ip uintptr) { + bp := tls.Alloc(48) + defer tls.Free(48) + Xsprintf(tls, s, __ccgo_ts+1012, VaList(bp+8, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) +} + +func _mkptr6(tls *TLS, s uintptr, ip uintptr) { + var i int32 + var v2, v3, v4, v5 uintptr + _, _, _, _, _ = i, v2, v3, v4, v5 + i = int32(15) + for { + if !(i >= 0) { + break + } + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&int32(15)] + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v3)) = uint8('.') + v4 = s + s++ + *(*uint8)(unsafe.Pointer(v4)) = _xdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>int32(4)] + v5 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = uint8('.') + goto _1 + _1: + ; + i-- + } + Xstrcpy(tls, s, __ccgo_ts+1037) +} + +var _xdigits = [17]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} + +func _reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { + bp := tls.Alloc(1824) + defer tls.Free(1824) + var f, p, z, v1, v2, v8 uintptr + var v10, v11, v15, v16, v4, v5 int32 + var v13, v18, v7 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1592 */ TFILE + var _ /* atmp at bp+1544 */ [16]uint8 + var _ /* iplit at bp+1560 */ Taddress + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, p, z, v1, v10, v11, v13, v15, v16, v18, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1046, bp+1592, bp+512, uint64(1032)) + if !(f != 0) { + return + } + if family == int32(PF_INET) { + Xmemcpy(tls, bp+1544+uintptr(12), a, uint64(4)) + Xmemcpy(tls, bp+1544, __ccgo_ts+1057, uint64(12)) + a = bp + 1544 + } + for Xfgets(tls, bp, int32(512), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + if X__lookup_ipliteral(tls, bp+1560, bp, PF_UNSPEC) <= 0 { + continue + } + if (*(*Taddress)(unsafe.Pointer(bp + 1560))).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+1560+8+uintptr(12), bp+1560+8, uint64(4)) + Xmemcpy(tls, bp+1560+8, __ccgo_ts+1057, uint64(12)) + (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid = uint32(0) + } + if Xmemcmp(tls, a, bp+1560+8, uint64(16)) != 0 || (*(*Taddress)(unsafe.Pointer(bp + 1560))).Fscopeid != scopeid { + continue + } + for { + if v13 = *(*uint8)(unsafe.Pointer(p)) != 0; v13 { + v10 = int32(*(*uint8)(unsafe.Pointer(p))) + v11 = BoolInt32(v10 == int32(' ') || uint32(v10)-uint32('\t') < uint32(5)) + goto _12 + _12: + } + if !(v13 && v11 != 0) { + break + } + goto _9 + _9: + ; + p++ + } + z = p + for { + if v18 = *(*uint8)(unsafe.Pointer(z)) != 0; v18 { + v15 = int32(*(*uint8)(unsafe.Pointer(z))) + v16 = BoolInt32(v15 == int32(' ') || uint32(v15)-uint32('\t') < uint32(5)) + goto _17 + _17: + } + if !(v18 && !(v16 != 0)) { + break + } + goto _14 + _14: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if int64(z)-int64(p) < int64(256) { + Xmemcpy(tls, buf, p, uint64(int64(z)-int64(p)+int64(1))) + break + } + } + X__fclose_ca(tls, f) +} + +func _reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { + bp := tls.Alloc(1408) + defer tls.Free(1408) + var f, p, v1, v2, v8 uintptr + var svport uint64 + var v4, v5 int32 + var v7 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _ = f, p, svport, v1, v2, v4, v5, v7, v8 + f = X__fopen_rb_ca(tls, __ccgo_ts+1070, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + return + } + for Xfgets(tls, bp, int32(128), f) != 0 { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + for { + if v7 = *(*uint8)(unsafe.Pointer(p)) != 0; v7 { + v4 = int32(*(*uint8)(unsafe.Pointer(p))) + v5 = BoolInt32(v4 == int32(' ') || uint32(v4)-uint32('\t') < uint32(5)) + goto _6 + _6: + } + if !(v7 && !(v5 != 0)) { + break + } + goto _3 + _3: + ; + p++ + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + continue + } + v8 = p + p++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + svport = Xstrtoul(tls, p, bp+128, int32(10)) + if svport != uint64(port) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if dgram != 0 && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1084, uint64(4)) != 0 { + continue + } + if !(dgram != 0) && Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1089, uint64(4)) != 0 { + continue + } + if int64(p)-t__predefined_ptrdiff_t(bp) > int64(32) { + continue + } + Xmemcpy(tls, buf, bp, uint64(int64(p)-t__predefined_ptrdiff_t(bp))) + break + } + X__fclose_ca(tls, f) +} + +func _dns_parse_callback(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + if rr != int32(RR_PTR) { + return 0 + } + if X__dn_expand(tls, packet, packet+uintptr(plen), data, c, int32(256)) <= 0 { + *(*uint8)(unsafe.Pointer(c)) = uint8(0) + } + return 0 +} + +func Xgetnameinfo(tls *TLS, sa uintptr, sl Tsocklen_t, node uintptr, nodelen Tsocklen_t, serv uintptr, servlen Tsocklen_t, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sa=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa, sl, node, nodelen, serv, servlen, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(976) + defer tls.Free(976) + var a, p, p1, v1 uintptr + var af, port, qlen, rlen int32 + var scopeid uint32 + var _ /* buf at bp+78 */ [256]uint8 + var _ /* num at bp+334 */ [13]uint8 + var _ /* ptr at bp+0 */ [78]uint8 + var _ /* query at bp+347 */ [96]uint8 + var _ /* reply at bp+443 */ [512]uint8 + var _ /* tmp at bp+955 */ [17]uint8 + _, _, _, _, _, _, _, _, _ = a, af, p, p1, port, qlen, rlen, scopeid, v1 + af = int32((*Tsockaddr)(unsafe.Pointer(sa)).Fsa_family) + switch af { + case int32(PF_INET): + a = sa + 4 + if uint64(sl) < uint64(16) { + return -int32(6) + } + _mkptr4(tls, bp, a) + scopeid = uint32(0) + case int32(PF_INET6): + a = sa + 8 + if uint64(sl) < uint64(28) { + return -int32(6) + } + if Xmemcmp(tls, a, __ccgo_ts+1057, uint64(12)) != 0 { + _mkptr6(tls, bp, a) + } else { + _mkptr4(tls, bp, a+uintptr(12)) + } + scopeid = (*Tsockaddr_in6)(unsafe.Pointer(sa)).Fsin6_scope_id + default: + return -int32(6) + } + if node != 0 && nodelen != 0 { + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + _reverse_hosts(tls, bp+78, a, scopeid, af) + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) && !(flags&Int32FromInt32(NI_NUMERICHOST) != 0) { + qlen = X__res_mkquery(tls, 0, bp, int32(1), int32(RR_PTR), uintptr(0), 0, uintptr(0), bp+347, int32(96)) + (*(*[96]uint8)(unsafe.Pointer(bp + 347)))[int32(3)] = uint8(0) /* don't need AD flag */ + rlen = X__res_send(tls, bp+347, qlen, bp+443, int32(512)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if rlen > 0 { + if uint64(rlen) > uint64(512) { + rlen = int32(512) + } + X__dns_parse(tls, bp+443, rlen, __ccgo_fp(_dns_parse_callback), bp+78) + } + } + if !(*(*uint8)(unsafe.Pointer(bp + 78)) != 0) { + if flags&int32(NI_NAMEREQD) != 0 { + return -int32(2) + } + Xinet_ntop(tls, af, a, bp+78, uint32(256)) + if scopeid != 0 { + p = uintptr(0) + if !(flags&Int32FromInt32(NI_NUMERICSCOPE) != 0) && (int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) || int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xf) == int32(0x2)) { + p = Xif_indextoname(tls, scopeid, bp+955+uintptr(1)) + } + if !(p != 0) { + p = _itoa(tls, bp+334, scopeid) + } + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8('%') + Xstrcat(tls, bp+78, p) + } + } + if Xstrlen(tls, bp+78) >= uint64(nodelen) { + return -int32(12) + } + Xstrcpy(tls, node, bp+78) + } + if serv != 0 && servlen != 0 { + p1 = bp + 78 + port = int32(Xntohs(tls, (*Tsockaddr_in)(unsafe.Pointer(sa)).Fsin_port)) + (*(*[256]uint8)(unsafe.Pointer(bp + 78)))[0] = uint8(0) + if !(flags&Int32FromInt32(NI_NUMERICSERV) != 0) { + _reverse_services(tls, bp+78, port, flags&int32(NI_DGRAM)) + } + if !(*(*uint8)(unsafe.Pointer(p1)) != 0) { + p1 = _itoa(tls, bp+334, uint32(port)) + } + if Xstrlen(tls, p1) >= uint64(servlen) { + return -int32(12) + } + Xstrcpy(tls, serv, p1) + } + return 0 +} + +func Xgetpeername(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getpeername) + v2 = int32(__SC_getpeername) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xgetservbyname(tls *TLS, name uintptr, prots uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v, (%v:)", tls, name, prots, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if Xgetservbyname_r(tls, name, prots, uintptr(unsafe.Pointer(&_se)), uintptr(unsafe.Pointer(&_buf3)), uint64(16), bp) != 0 { + return uintptr(0) + } + return uintptr(unsafe.Pointer(&_se)) +} + +var _se Tservent + +var _buf3 [2]uintptr + +const ALIGN = 0 + +func Xgetservbyname_r(tls *TLS, name uintptr, prots uintptr, se uintptr, buf uintptr, buflen Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v prots=%v se=%v buf=%v buflen=%v res=%v, (%v:)", tls, name, prots, se, buf, buflen, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var align, cnt, proto int32 + var v1 uintptr + var _ /* end at bp+8 */ uintptr + var _ /* servs at bp+0 */ [2]Tservice + _, _, _, _ = align, cnt, proto, v1 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + /* Don't treat numeric port number strings as service records. */ + *(*uintptr)(unsafe.Pointer(bp + 8)) = __ccgo_ts + Xstrtoul(tls, name, bp+8, int32(10)) + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + return int32(ENOENT) + } + /* Align buffer */ + align = int32(-uint64(buf) & (Uint64FromInt64(16) - Uint64FromInt64(8) - Uint64FromInt32(1))) + if buflen < Uint64FromInt32(2)*Uint64FromInt64(8)+uint64(align) { + return int32(ERANGE) + } + buf += uintptr(align) + if !(prots != 0) { + proto = 0 + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1094) != 0) { + proto = int32(IPPROTO_TCP) + } else { + if !(Xstrcmp(tls, prots, __ccgo_ts+1098) != 0) { + proto = int32(IPPROTO_UDP) + } else { + return int32(EINVAL) + } + } + } + cnt = X__lookup_serv(tls, bp, name, proto, 0, 0) + if cnt < 0 { + switch cnt { + case -int32(10): + fallthrough + case -int32(11): + return int32(ENOMEM) + default: + return int32(ENOENT) + } + } + (*Tservent)(unsafe.Pointer(se)).Fs_name = name + (*Tservent)(unsafe.Pointer(se)).Fs_aliases = buf + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases)) = (*Tservent)(unsafe.Pointer(se)).Fs_name + *(*uintptr)(unsafe.Pointer((*Tservent)(unsafe.Pointer(se)).Fs_aliases + 1*8)) = uintptr(0) + (*Tservent)(unsafe.Pointer(se)).Fs_port = int32(Xhtons(tls, (*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fport)) + if int32((*(*[2]Tservice)(unsafe.Pointer(bp)))[0].Fproto) == int32(IPPROTO_TCP) { + v1 = __ccgo_ts + 1094 + } else { + v1 = __ccgo_ts + 1098 + } + (*Tservent)(unsafe.Pointer(se)).Fs_proto = v1 + *(*uintptr)(unsafe.Pointer(res)) = se + return 0 +} + +func Xgetsockname(tls *TLS, fd int32, addr uintptr, len1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v addr=%v len1=%v, (%v:)", tls, fd, addr, len1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockname) + v2 = int32(__SC_getsockname) + v3 = 0 + v4 = int64(fd) + v5 = int64(addr) + v6 = int64(len1) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xgetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var r, v10, v21, v32 int64 + var r1, v1, v12, v13, v14, v2, v23, v24, v25, v3 int32 + var tv uintptr + var v15, v16, v17, v18, v19, v20, v26, v27, v28, v29, v30, v31, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* tv32 at bp+296 */ [2]int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, tv, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v23, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_getsockopt) + v2 = int32(__SC_getsockopt) + v3 = 0 + v4 = int64(fd) + v5 = int64(level) + v6 = int64(optname) + v7 = int64(optval) + v8 = int64(optlen) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+248)) + } + v10 = r + goto _11 +_11: + r1 = int32(v10) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if true { + break + } + if uint64(*(*Tsocklen_t)(unsafe.Pointer(optlen))) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + *(*[1]Tsocklen_t)(unsafe.Pointer(bp + 96)) = [1]Tsocklen_t{ + 0: uint32(16), + } + v12 = int32(SYS_getsockopt) + v13 = int32(__SC_getsockopt) + v14 = 0 + v15 = int64(fd) + v16 = int64(level) + v17 = int64(optname) + v18 = int64(bp + 296) + v19 = int64(bp + 96) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+248)) + } + v21 = r + goto _22 + _22: + r1 = int32(v21) + if r1 < 0 { + break + } + tv = optval + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*[2]int64)(unsafe.Pointer(bp + 296)))[0] + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = (*(*[2]int64)(unsafe.Pointer(bp + 296)))[int32(1)] + *(*Tsocklen_t)(unsafe.Pointer(optlen)) = uint32(16) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v23 = int32(SYS_getsockopt) + v24 = int32(__SC_getsockopt) + v25 = 0 + v26 = int64(fd) + v27 = int64(level) + v28 = int64(optname) + v29 = int64(optval) + v30 = int64(optlen) + v31 = int64(Int32FromInt32(0)) + if v25 != 0 { + r = ___syscall_cp(tls, int64(v23), v26, v27, v28, v29, v30, v31) + } else { + r = X__syscall6(tls, int64(v23), v26, v27, v28, v29, v30, v31) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v32 = r + goto _33 + } + if v25 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 200)) = [6]int64{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v24), int64(bp+200), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 248)) = [6]int64{ + 0: v26, + 1: v27, + 2: v28, + 3: v29, + 4: v30, + 5: v31, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v24), int64(bp+248)) + } + v32 = r + goto _33 + _33: + r1 = int32(v32) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func X__h_errno_location(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if !((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstack != 0) { + return uintptr(unsafe.Pointer(&Xh_errno)) + } + return uintptr(___get_tp(tls)) + 160 +} + +func Xherror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1, v2 uintptr + _, _ = v1, v2 + if msg != 0 { + v1 = msg + } else { + v1 = __ccgo_ts + } + if msg != 0 { + v2 = __ccgo_ts + 378 + } else { + v2 = __ccgo_ts + } + Xfprintf(tls, uintptr(unsafe.Pointer(&X__stderr_FILE)), __ccgo_ts+1102, VaList(bp+8, v1, v2, Xhstrerror(tls, *(*int32)(unsafe.Pointer(X__h_errno_location(tls)))))) +} + +type Tcpu_set_t1 = struct { + F__bits [16]uint64 +} + +type Tucontext_t5 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t +} + +var _msgs1 = [84]uint8{'H', 'o', 's', 't', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', 0, 'T', 'r', 'y', ' ', 'a', 'g', 'a', 'i', 'n', 0, 'N', 'o', 'n', '-', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'd', 'd', 'r', 'e', 's', 's', ' ', 'n', 'o', 't', ' ', 'a', 'v', 'a', 'i', 'l', 'a', 'b', 'l', 'e', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xhstrerror(tls *TLS, ecode int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v ecode=%v, (%v:)", tls, ecode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_msgs1)) + ecode-- + for { + if !(ecode != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _2 + _2: + ; + s++ + } + goto _1 + _1: + ; + ecode-- + s++ + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xhtonl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +func Xif_freenameindex(tls *TLS, idx uintptr) { + if __ccgo_strace { + trc("tls=%v idx=%v, (%v:)", tls, idx, origin(2)) + } + Xfree(tls, idx) +} + +func Xif_indextoname(tls *TLS, index uint32, name uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v index=%v name=%v, (%v:)", tls, index, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _ = fd, r, v1 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(bp + 16)) = int32(index) + r = Xioctl(tls, fd, int32(SIOCGIFNAME), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENODEV) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENXIO) + } + return uintptr(0) + } + return Xstrncpy(tls, name, bp, uint64(IF_NAMESIZE)) +} + +type Tifnamemap = struct { + Fhash_next uint32 + Findex uint32 + Fnamelen uint8 + Fname [16]uint8 +} + +type Tifnameindexctx = struct { + Fnum uint32 + Fallocated uint32 + Fstr_bytes uint32 + Flist uintptr + Fhash [64]uint32 +} + +func _netlink_msg_to_nameindex(tls *TLS, pctx uintptr, h uintptr) (r int32) { + var a Tsize_t + var bucket, index, namelen, type1 int32 + var ctx, ifa, ifi, map1, rta uintptr + var i, v2 uint32 + _, _, _, _, _, _, _, _, _, _, _, _ = a, bucket, ctx, i, ifa, ifi, index, map1, namelen, rta, type1, v2 + ctx = pctx + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(RTM_NEWLINK) { + ifi = h + UintptrFromInt64(16) + index = (*Tifinfomsg)(unsafe.Pointer(ifi)).Fifi_index + type1 = int32(IFLA_IFNAME) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(16)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } else { + ifa = h + UintptrFromInt64(16) + index = int32((*Tifaddrmsg)(unsafe.Pointer(ifa)).Fifa_index) + type1 = int32(IFA_LABEL) + rta = h + UintptrFromInt64(16) + uintptr((Uint64FromInt64(8)+Uint64FromInt32(3))&uint64(^Int32FromInt32(3))) + } + for { + if !(uint64(int64(h+uintptr((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len))-int64(rta)) >= uint64(4)) { + break + } + if int32((*Trtattr)(unsafe.Pointer(rta)).Frta_type) != type1 { + goto _1 + } + namelen = int32(uint64((*Trtattr)(unsafe.Pointer(rta)).Frta_len) - uint64(4) - uint64(1)) + if namelen > int32(IF_NAMESIZE) { + return 0 + } + /* suppress duplicates */ + bucket = index % int32(IFADDRS_HASH_SIZE) + i = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + for i != 0 { + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr(i-uint32(1))*28 + if (*Tifnamemap)(unsafe.Pointer(map1)).Findex == uint32(index) && int32((*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen) == namelen && Xmemcmp(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) == 0 { + return 0 + } + i = (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next + } + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum >= (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated { + if (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated != 0 { + v2 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated*uint32(2) + uint32(1) + } else { + v2 = uint32(8) + } + a = uint64(v2) + if a > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(28) { + return -int32(1) + } + map1 = Xrealloc(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist, a*uint64(28)) + if !(map1 != 0) { + return -int32(1) + } + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist = map1 + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fallocated = uint32(a) + } + map1 = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*28 + (*Tifnamemap)(unsafe.Pointer(map1)).Findex = uint32(index) + (*Tifnamemap)(unsafe.Pointer(map1)).Fnamelen = uint8(namelen) + Xmemcpy(tls, map1+9, rta+UintptrFromInt64(4), uint64(namelen)) + *(*uint32)(unsafe.Pointer(ctx + 8)) += uint32(namelen + int32(1)) + (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum++ + (*Tifnamemap)(unsafe.Pointer(map1)).Fhash_next = *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) + *(*uint32)(unsafe.Pointer(ctx + 24 + uintptr(bucket)*4)) = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum + return 0 + goto _1 + _1: + ; + rta = rta + uintptr((int32((*Trtattr)(unsafe.Pointer(rta)).Frta_len)+Int32FromInt32(3)) & ^Int32FromInt32(3)) + } + return 0 +} + +func Xif_nameindex(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var ctx, d, ifs, p, s, v2 uintptr + var i int32 + var _ /* _ctx at bp+0 */ Tifnameindexctx + var _ /* cs at bp+280 */ int32 + _, _, _, _, _, _, _ = ctx, d, i, ifs, p, s, v2 + ctx = bp + ifs = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+280) + Xmemset(tls, ctx, 0, uint64(280)) + if X__rtnetlink_enumerate(tls, PF_UNSPEC, int32(PF_INET), __ccgo_fp(_netlink_msg_to_nameindex), ctx) < 0 { + goto err + } + ifs = Xmalloc(tls, uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum+Uint32FromInt32(1))*16+uint64((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fstr_bytes)) + if !(ifs != 0) { + goto err + } + p = ifs + uintptr((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum)*16 + UintptrFromInt32(1)*16 + i = int32((*Tifnameindexctx)(unsafe.Pointer(ctx)).Fnum) + d = ifs + s = (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist + for { + if !(i != 0) { + break + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = (*Tifnamemap)(unsafe.Pointer(s)).Findex + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = p + Xmemcpy(tls, p, s+9, uint64((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen)) + p += uintptr((*Tifnamemap)(unsafe.Pointer(s)).Fnamelen) + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + goto _1 + _1: + ; + i-- + s += 28 + d += 16 + } + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_index = uint32(0) + (*Tif_nameindex)(unsafe.Pointer(d)).Fif_name = uintptr(0) + goto err +err: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 280)), uintptr(0)) + Xfree(tls, (*Tifnameindexctx)(unsafe.Pointer(ctx)).Flist) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOBUFS) + return ifs +} + +func Xif_nametoindex(tls *TLS, name uintptr) (r1 uint32) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var fd, r, v1, v2 int32 + var _ /* ifr at bp+0 */ Tifreq + _, _, _, _ = fd, r, v1, v2 + v1 = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + fd = v1 + if v1 < 0 { + return uint32(0) + } + Xstrncpy(tls, bp, name, uint64(16)) + r = Xioctl(tls, fd, int32(SIOCGIFINDEX), VaList(bp+48, bp)) + X__syscall1(tls, int64(SYS_close), int64(fd)) + if r < 0 { + v2 = 0 + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 16)) + } + return uint32(v2) +} + +func Xinet_addr(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* a at bp+0 */ Tin_addr + if !(X__inet_aton(tls, p, bp) != 0) { + return uint32(-Int32FromInt32(1)) + } + return (*(*Tin_addr)(unsafe.Pointer(bp))).Fs_addr +} + +func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var d, s uintptr + var i int32 + var _ /* a at bp+0 */ [4]uint64 + var _ /* z at bp+32 */ uintptr + _, _, _ = d, i, s + s = s0 + d = dest + *(*[4]uint64)(unsafe.Pointer(bp)) = [4]uint64{} + i = 0 + for { + if !(i < int32(4)) { + break + } + (*(*[4]uint64)(unsafe.Pointer(bp)))[i] = Xstrtoul(tls, s, bp+32, 0) + if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != int32('.') || !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return 0 + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0) { + break + } + s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) + goto _1 + _1: + ; + i++ + } + if i == int32(4) { + return 0 + } + switch i { + case 0: + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[0] & uint64(0xffffff) + *(*uint64)(unsafe.Pointer(bp)) >>= uint64(24) + fallthrough + case int32(1): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(1)] & uint64(0xffff) + *(*uint64)(unsafe.Pointer(bp + 1*8)) >>= uint64(16) + fallthrough + case int32(2): + (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(3)] = (*(*[4]uint64)(unsafe.Pointer(bp)))[int32(2)] & uint64(0xff) + *(*uint64)(unsafe.Pointer(bp + 2*8)) >>= uint64(8) + } + i = 0 + for { + if !(i < int32(4)) { + break + } + if (*(*[4]uint64)(unsafe.Pointer(bp)))[i] > uint64(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8((*(*[4]uint64)(unsafe.Pointer(bp)))[i]) + goto _2 + _2: + ; + i++ + } + return int32(1) +} + +func Xinet_aton(tls *TLS, s0 uintptr, dest uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__inet_aton(tls, s0, dest) +} + +func Xinet_network(tls *TLS, p uintptr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xntohl(tls, Xinet_addr(tls, p)) +} + +func Xinet_makeaddr(tls *TLS, n Tin_addr_t, h Tin_addr_t) (r Tin_addr) { + if __ccgo_strace { + trc("tls=%v n=%v h=%v, (%v:)", tls, n, h, origin(2)) + defer func() { trc("-> %v", r) }() + } + if n < uint32(256) { + h |= n << int32(24) + } else { + if n < uint32(65536) { + h |= n << int32(16) + } else { + h |= n << int32(8) + } + } + return Tin_addr{ + Fs_addr: h, + } +} + +func Xinet_lnaof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h & uint32(0xffffff) + } + if h>>int32(24) < uint32(192) { + return h & uint32(0xffff) + } + return h & uint32(0xff) +} + +func Xinet_netof(tls *TLS, in Tin_addr) (r Tin_addr_t) { + if __ccgo_strace { + trc("tls=%v in=%v, (%v:)", tls, in, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h Tuint32_t + _ = h + h = in.Fs_addr + if h>>int32(24) < uint32(128) { + return h >> int32(24) + } + if h>>int32(24) < uint32(192) { + return h >> int32(16) + } + return h >> int32(8) +} + +func Xinet_ntoa(tls *TLS, _in Tin_addr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v _in=%v, (%v:)", tls, _in, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + *(*Tin_addr)(unsafe.Pointer(bp)) = _in + var a uintptr + _ = a + a = bp + Xsnprintf(tls, uintptr(unsafe.Pointer(&_buf4)), uint64(16), __ccgo_ts+1110, VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3))))) + return uintptr(unsafe.Pointer(&_buf4)) +} + +var _buf4 [16]uint8 + +func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l Tsocklen_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var a uintptr + var best, i, j, max, v2 int32 + var v3 uint8 + var _ /* buf at bp+0 */ [100]uint8 + _, _, _, _, _, _, _ = a, best, i, j, max, v2, v3 + a = a0 + switch af { + case int32(PF_INET): + if uint32(Xsnprintf(tls, s, uint64(l), __ccgo_ts+1110, VaList(bp+112, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { + return s + } + case int32(PF_INET6): + if Xmemcmp(tls, a, __ccgo_ts+1057, uint64(12)) != 0 { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1122, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } else { + Xsnprintf(tls, bp, uint64(100), __ccgo_ts+1146, VaList(bp+112, int32(256)*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), int32(256)*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) + } + /* Replace longest /(^0|:)[:0]{2,}/ with "::" */ + v2 = Int32FromInt32(0) + best = v2 + i = v2 + max = Int32FromInt32(2) + for { + if !((*(*[100]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + if i != 0 && int32((*(*[100]uint8)(unsafe.Pointer(bp)))[i]) != int32(':') { + goto _1 + } + j = int32(Xstrspn(tls, bp+uintptr(i), __ccgo_ts+1176)) + if j > max { + best = i + max = j + } + goto _1 + _1: + ; + i++ + } + if max > int32(3) { + v3 = Uint8FromUint8(':') + (*(*[100]uint8)(unsafe.Pointer(bp)))[best+int32(1)] = v3 + (*(*[100]uint8)(unsafe.Pointer(bp)))[best] = v3 + Xmemmove(tls, bp+uintptr(best)+uintptr(2), bp+uintptr(best)+uintptr(max), uint64(i-best-max+int32(1))) + } + if Xstrlen(tls, bp) < uint64(l) { + Xstrcpy(tls, s, bp) + return s + } + default: + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return uintptr(0) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOSPC) + return uintptr(0) +} + +func _hexval(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var a, v14, v15, v4, v7 uintptr + var brk, d, i, j, need_v4, v, v10, v3, v9 int32 + var v11, v5 bool + var _ /* ip at bp+0 */ [8]Tuint16_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, brk, d, i, j, need_v4, v, v10, v11, v14, v15, v3, v4, v5, v7, v9 + a = a0 + brk = -int32(1) + need_v4 = 0 + if af == int32(PF_INET) { + i = 0 + for { + if !(i < int32(4)) { + break + } + v3 = Int32FromInt32(0) + j = v3 + v = v3 + for { + if !(j < int32(3) && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + v = int32(10)*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - int32('0') + goto _2 + _2: + ; + j++ + } + if j == 0 || j > int32(1) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('0') || v > int32(255) { + return 0 + } + *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == int32(3) { + return int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') { + return 0 + } + s += uintptr(j + int32(1)) + goto _1 + _1: + ; + i++ + } + return 0 + } else { + if af != int32(PF_INET6) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EAFNOSUPPORT) + return -int32(1) + } + } + if v5 = int32(*(*uint8)(unsafe.Pointer(s))) == int32(':'); v5 { + s++ + v4 = s + } + if v5 && int32(*(*uint8)(unsafe.Pointer(v4))) != int32(':') { + return 0 + } + i = 0 + for { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(':') && brk < 0 { + brk = i + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + s++ + v7 = s + if !(*(*uint8)(unsafe.Pointer(v7)) != 0) { + break + } + if i == int32(7) { + return 0 + } + goto _6 + } + v9 = Int32FromInt32(0) + j = v9 + v = v9 + for { + if v11 = j < int32(4); v11 { + v10 = _hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) + d = v10 + } + if !(v11 && v10 >= 0) { + break + } + v = int32(16)*v + d + goto _8 + _8: + ; + j++ + } + if j == 0 { + return 0 + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(v) + if !(*(*uint8)(unsafe.Pointer(s + uintptr(j))) != 0) && (brk >= 0 || i == int32(7)) { + break + } + if i == int32(7) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32(':') { + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != int32('.') || i < int32(6) && brk < 0 { + return 0 + } + need_v4 = int32(1) + i++ + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[i&int32(7)] = uint16(0) + break + } + s += uintptr(j + int32(1)) + goto _6 + _6: + ; + i++ + } + if brk >= 0 { + Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(int32(2)*(i+int32(1)-brk))) + j = 0 + for { + if !(j < int32(7)-i) { + break + } + (*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[brk+j] = uint16(0) + goto _12 + _12: + ; + j++ + } + } + j = 0 + for { + if !(j < int32(8)) { + break + } + v14 = a + a++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) >> int32(8)) + v15 = a + a++ + *(*uint8)(unsafe.Pointer(v15)) = uint8((*(*[8]Tuint16_t)(unsafe.Pointer(bp)))[j]) + goto _13 + _13: + ; + j++ + } + if need_v4 != 0 && Xinet_pton(tls, int32(PF_INET), s, a-uintptr(4)) <= 0 { + return 0 + } + return int32(1) +} + +func Xlisten(tls *TLS, fd int32, backlog int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v backlog=%v, (%v:)", tls, fd, backlog, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_listen) + v2 = int32(__SC_listen) + v3 = 0 + v4 = int64(fd) + v5 = int64(backlog) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var p, v1 uintptr + var scopeid uint64 + var _ /* a4 at bp+0 */ Tin_addr + var _ /* a6 at bp+4 */ Tin6_addr + var _ /* tmp at bp+20 */ [64]uint8 + var _ /* z at bp+88 */ uintptr + _, _, _ = p, scopeid, v1 + if X__inet_aton(tls, name, bp) > 0 { + if family == int32(PF_INET6) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp, uint64(4)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET) + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(0) + return int32(1) + } + p = Xstrchr(tls, name, int32('%')) + scopeid = uint64(0) + if p != 0 && int64(p)-int64(name) < int64(64) { + Xmemcpy(tls, bp+20, name, uint64(int64(p)-int64(name))) + (*(*[64]uint8)(unsafe.Pointer(bp + 20)))[int64(p)-int64(name)] = uint8(0) + name = bp + 20 + } + if Xinet_pton(tls, int32(PF_INET6), name, bp+4) <= 0 { + return 0 + } + if family == int32(PF_INET) { /* wrong family */ + return -int32(5) + } + Xmemcpy(tls, buf+8, bp+4, uint64(16)) + (*(*Taddress)(unsafe.Pointer(buf))).Ffamily = int32(PF_INET6) + if p != 0 { + p++ + v1 = p + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(v1)))-uint32('0') < uint32(10)) != 0 { + scopeid = Xstrtoull(tls, p, bp+88, int32(10)) + } else { + *(*uintptr)(unsafe.Pointer(bp + 88)) = p - uintptr(1) + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { + if !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xc0) == int32(0x80)) && !(int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4))) == int32(0xff) && int32(*(*Tuint8_t)(unsafe.Pointer(bp + 4 + 1)))&int32(0xf) == int32(0x2)) { + return -int32(2) + } + scopeid = uint64(Xif_nametoindex(tls, p)) + if !(scopeid != 0) { + return -int32(2) + } + } + if scopeid > uint64(0xffffffff) { + return -int32(2) + } + } + (*(*Taddress)(unsafe.Pointer(buf))).Fscopeid = uint32(scopeid) + return int32(1) +} + +const ABUF_SIZE = 4800 +const DAS_MATCHINGLABEL = 268435456 +const DAS_MATCHINGSCOPE = 536870912 +const DAS_ORDER_SHIFT = 0 +const DAS_PREC_SHIFT = 20 +const DAS_PREFIX_SHIFT = 8 +const DAS_SCOPE_SHIFT = 16 +const DAS_USABLE = 1073741824 +const RR_A = 1 +const RR_AAAA = 28 +const RR_CNAME = 5 + +func _is_valid_hostname(tls *TLS, host uintptr) (r int32) { + var s uintptr + _ = s + if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) || Xmbstowcs(tls, uintptr(0), host, uint64(0)) == uint64(-Int32FromInt32(1)) { + return 0 + } + s = host + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) >= int32(0x80) || int32(*(*uint8)(unsafe.Pointer(s))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0) { + break + } + goto _1 + _1: + ; + s++ + } + return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) +} + +func _name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) (r int32) { + var cnt, v1, v2, v3, v4 int32 + _, _, _, _, _ = cnt, v1, v2, v3, v4 + cnt = 0 + if name != 0 { + return 0 + } + if flags&int32(AI_PASSIVE) != 0 { + if family != int32(PF_INET6) { + v1 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v1)*28)) = Taddress{ + Ffamily: int32(PF_INET), + } + } + if family != int32(PF_INET) { + v2 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v2)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + } + } + } else { + if family != int32(PF_INET6) { + v3 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v3)*28)) = Taddress{ + Ffamily: int32(PF_INET), + Faddr: [16]Tuint8_t{ + 0: uint8(127), + 3: uint8(1), + }, + } + } + if family != int32(PF_INET) { + v4 = cnt + cnt++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = Taddress{ + Ffamily: int32(PF_INET6), + Faddr: [16]Tuint8_t{ + 15: uint8(1), + }, + } + } + } + return cnt +} + +func _name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) (r int32) { + return X__lookup_ipliteral(tls, buf, name, family) +} + +func _name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(1776) + defer tls.Free(1776) + var badfam, cnt, have_canon, v14, v15, v20, v21, v25, v26, v29, v5, v6, v8, v9 int32 + var f, p, z, v1, v18, v2, v4 uintptr + var l Tsize_t + var v11, v12, v17, v23, v28 bool + var _ /* _buf at bp+512 */ [1032]uint8 + var _ /* _f at bp+1544 */ TFILE + var _ /* line at bp+0 */ [512]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = badfam, cnt, f, have_canon, l, p, z, v1, v11, v12, v14, v15, v17, v18, v2, v20, v21, v23, v25, v26, v28, v29, v4, v5, v6, v8, v9 + l = Xstrlen(tls, name) + cnt = 0 + badfam = 0 + have_canon = 0 + f = X__fopen_rb_ca(tls, __ccgo_ts+1046, bp+1544, bp+512, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return 0 + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(512), f) != 0 && cnt < int32(MAXADDRS) { + v1 = Xstrchr(tls, bp, int32('#')) + p = v1 + if v1 != 0 { + v2 = p + p++ + *(*uint8)(unsafe.Pointer(v2)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + p = bp + uintptr(1) + for { + v4 = Xstrstr(tls, p, name) + p = v4 + if v12 = v4 != 0; v12 { + v5 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + ; + if v11 = !(v6 != 0); !v11 { + v8 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + } + if !(v12 && (v11 || !(v9 != 0))) { + break + } + goto _3 + _3: + ; + p++ + } + if !(p != 0) { + continue + } + /* Isolate IP address to parse */ + p = bp + for { + if v17 = *(*uint8)(unsafe.Pointer(p)) != 0; v17 { + v14 = int32(*(*uint8)(unsafe.Pointer(p))) + v15 = BoolInt32(v14 == int32(' ') || uint32(v14)-uint32('\t') < uint32(5)) + goto _16 + _16: + } + if !(v17 && !(v15 != 0)) { + break + } + goto _13 + _13: + ; + p++ + } + v18 = p + p++ + *(*uint8)(unsafe.Pointer(v18)) = uint8(0) + switch _name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { + case int32(1): + cnt++ + case 0: + continue + default: + badfam = -int32(5) + break + } + if have_canon != 0 { + continue + } + /* Extract first name as canonical name */ + for { + if v23 = *(*uint8)(unsafe.Pointer(p)) != 0; v23 { + v20 = int32(*(*uint8)(unsafe.Pointer(p))) + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + } + if !(v23 && v21 != 0) { + break + } + goto _19 + _19: + ; + p++ + } + z = p + for { + if v28 = *(*uint8)(unsafe.Pointer(z)) != 0; v28 { + v25 = int32(*(*uint8)(unsafe.Pointer(z))) + v26 = BoolInt32(v25 == int32(' ') || uint32(v25)-uint32('\t') < uint32(5)) + goto _27 + _27: + } + if !(v28 && !(v26 != 0)) { + break + } + goto _24 + _24: + ; + z++ + } + *(*uint8)(unsafe.Pointer(z)) = uint8(0) + if _is_valid_hostname(tls, p) != 0 { + have_canon = int32(1) + Xmemcpy(tls, canon, p, uint64(int64(z)-int64(p)+int64(1))) + } + } + X__fclose_ca(tls, f) + if cnt != 0 { + v29 = cnt + } else { + v29 = badfam + } + return v29 +} + +type Tdpc_ctx = struct { + Faddrs uintptr + Fcanon uintptr + Fcnt int32 + Frrtype int32 +} + +func _dns_parse_callback1(tls *TLS, c uintptr, rr int32, data uintptr, len1 int32, packet uintptr, plen int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ctx, v2 uintptr + var family, v1 int32 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _, _ = ctx, family, v1, v2 + ctx = c + if rr == int32(RR_CNAME) { + if X__dn_expand(tls, packet, packet+uintptr(plen), data, bp, int32(256)) > 0 && _is_valid_hostname(tls, bp) != 0 { + Xstrcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcanon, bp) + } + return 0 + } + if (*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt >= int32(MAXADDRS) { + return 0 + } + if rr != (*Tdpc_ctx)(unsafe.Pointer(ctx)).Frrtype { + return 0 + } + switch rr { + case int32(RR_A): + if len1 != int32(4) { + return -int32(1) + } + family = int32(PF_INET) + case int32(RR_AAAA): + if len1 != int32(16) { + return -int32(1) + } + family = int32(PF_INET6) + break + } + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Ffamily = family + (*(*Taddress)(unsafe.Pointer((*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs + uintptr((*Tdpc_ctx)(unsafe.Pointer(ctx)).Fcnt)*28))).Fscopeid = uint32(0) + v2 = ctx + 16 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + Xmemcpy(tls, (*Tdpc_ctx)(unsafe.Pointer(ctx)).Faddrs+uintptr(v1)*28+8, data, uint64(len1)) + return 0 +} + +func _name_from_dns(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, conf uintptr) (r int32) { + bp := tls.Alloc(10240) + defer tls.Free(10240) + var i, nq int32 + var qtypes [2]int32 + var _ /* abuf at bp+560 */ [2][4800]uint8 + var _ /* alens at bp+10200 */ [2]int32 + var _ /* ap at bp+10176 */ [2]uintptr + var _ /* ctx at bp+10208 */ Tdpc_ctx + var _ /* qbuf at bp+0 */ [2][280]uint8 + var _ /* qlens at bp+10192 */ [2]int32 + var _ /* qp at bp+10160 */ [2]uintptr + _, _, _ = i, nq, qtypes + *(*[2]uintptr)(unsafe.Pointer(bp + 10160)) = [2]uintptr{ + 0: bp, + 1: bp + 1*280, + } + *(*[2]uintptr)(unsafe.Pointer(bp + 10176)) = [2]uintptr{ + 0: bp + 560, + 1: bp + 560 + 1*4800, + } + nq = 0 + *(*Tdpc_ctx)(unsafe.Pointer(bp + 10208)) = Tdpc_ctx{ + Faddrs: buf, + Fcanon: canon, + } + i = 0 + for { + if !(i < int32(2)) { + break + } + if family != _afrr[i].Faf { + (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] = X__res_mkquery(tls, 0, name, int32(1), _afrr[i].Frr, uintptr(0), 0, uintptr(0), bp+uintptr(nq)*280, int32(280)) + if (*(*[2]int32)(unsafe.Pointer(bp + 10192)))[nq] == -int32(1) { + return 0 + } + qtypes[nq] = _afrr[i].Frr + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280 + 3)) = uint8(0) /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if nq != 0 && int32(*(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))) == int32(*(*uint8)(unsafe.Pointer(bp))) { + *(*uint8)(unsafe.Pointer(bp + uintptr(nq)*280))++ + } + nq++ + } + goto _1 + _1: + ; + i++ + } + if X__res_msend_rc(tls, nq, bp+10160, bp+10192, bp+10176, bp+10200, int32(4800), conf) < 0 { + return -int32(11) + } + i = 0 + for { + if !(i < nq) { + break + } + if (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] < int32(4) || int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(2) { + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) == int32(3) { + return 0 + } + if int32(*(*uint8)(unsafe.Pointer(bp + 560 + uintptr(i)*4800 + 3)))&int32(15) != 0 { + return -int32(4) + } + goto _2 + _2: + ; + i++ + } + i = nq - int32(1) + for { + if !(i >= 0) { + break + } + (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Frrtype = qtypes[i] + if uint64((*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i]) > uint64(4800) { + (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i] = int32(4800) + } + X__dns_parse(tls, bp+560+uintptr(i)*4800, (*(*[2]int32)(unsafe.Pointer(bp + 10200)))[i], __ccgo_fp(_dns_parse_callback1), bp+10208) + goto _3 + _3: + ; + i-- + } + if (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt != 0 { + return (*(*Tdpc_ctx)(unsafe.Pointer(bp + 10208))).Fcnt + } + return -int32(5) +} + +var _afrr = [2]struct { + Faf int32 + Frr int32 +}{ + 0: { + Faf: int32(PF_INET6), + Frr: int32(RR_A), + }, + 1: { + Faf: int32(PF_INET), + Frr: int32(RR_AAAA), + }, +} + +func _name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) (r int32) { + bp := tls.Alloc(368) + defer tls.Free(368) + var cnt, v10, v5, v6, v9 int32 + var dots, l, v2 Tsize_t + var p, z uintptr + var v12 bool + var _ /* conf at bp+256 */ Tresolvconf + var _ /* search at bp+0 */ [256]uint8 + _, _, _, _, _, _, _, _, _, _, _ = cnt, dots, l, p, z, v10, v12, v2, v5, v6, v9 + if X__get_resolv_conf(tls, bp+256, bp, uint64(256)) < 0 { + return -int32(1) + } + /* Count dots, suppress search when >=ndots or name ends in + * a dot, which is an explicit request for global scope. */ + v2 = Uint64FromInt32(0) + l = v2 + dots = v2 + for { + if !(*(*uint8)(unsafe.Pointer(name + uintptr(l))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l)))) == int32('.') { + dots++ + } + goto _1 + _1: + ; + l++ + } + if dots >= uint64((*(*Tresolvconf)(unsafe.Pointer(bp + 256))).Fndots) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + *(*uint8)(unsafe.Pointer(bp)) = uint8(0) + } + /* Strip final dot for canon, fail if multiple trailing dots. */ + if int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if !(l != 0) || int32(*(*uint8)(unsafe.Pointer(name + uintptr(l-uint64(1))))) == int32('.') { + return -int32(2) + } + /* This can never happen; the caller already checked length. */ + if l >= uint64(256) { + return -int32(2) + } + /* Name with search domain appended is setup in canon[]. This both + * provides the desired default canonical name (if the requested + * name is not a CNAME record) and serves as a buffer for passing + * the full requested name to name_from_dns. */ + Xmemcpy(tls, canon, name, l) + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8('.') + p = bp + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + for { + v5 = int32(*(*uint8)(unsafe.Pointer(p))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + if !(v6 != 0) { + break + } + goto _4 + _4: + ; + p++ + } + z = p + for { + if v12 = *(*uint8)(unsafe.Pointer(z)) != 0; v12 { + v9 = int32(*(*uint8)(unsafe.Pointer(z))) + v10 = BoolInt32(v9 == int32(' ') || uint32(v9)-uint32('\t') < uint32(5)) + goto _11 + _11: + } + if !(v12 && !(v10 != 0)) { + break + } + goto _8 + _8: + ; + z++ + } + if z == p { + break + } + if uint64(int64(z)-int64(p)) < uint64(256)-l-uint64(1) { + Xmemcpy(tls, canon+uintptr(l)+uintptr(1), p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Pointer(canon + uintptr(uint64(int64(z)-int64(p)+int64(1))+l))) = uint8(0) + cnt = _name_from_dns(tls, buf, canon, canon, family, bp+256) + if cnt != 0 { + return cnt + } + } + goto _3 + _3: + ; + p = z + } + *(*uint8)(unsafe.Pointer(canon + uintptr(l))) = uint8(0) + return _name_from_dns(tls, buf, canon, name, family, bp+256) +} + +type Tpolicy = struct { + Faddr [16]uint8 + Flen1 uint8 + Fmask uint8 + Fprec uint8 + Flabel uint8 +} + +var _defpolicy = [6]Tpolicy{ + 0: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + Flen1: uint8(15), + Fmask: uint8(0xff), + Fprec: uint8(50), + }, + 1: { + Faddr: [16]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}, + Flen1: uint8(11), + Fmask: uint8(0xff), + Fprec: uint8(35), + Flabel: uint8(4), + }, + 2: { + Faddr: [16]uint8{' ', 2}, + Flen1: uint8(1), + Fmask: uint8(0xff), + Fprec: uint8(30), + Flabel: uint8(2), + }, + 3: { + Faddr: [16]uint8{' ', 1}, + Flen1: uint8(3), + Fmask: uint8(0xff), + Fprec: uint8(5), + Flabel: uint8(5), + }, + 4: { + Faddr: [16]uint8{252}, + Fmask: uint8(0xfe), + Fprec: uint8(3), + Flabel: uint8(13), + }, + 5: { + Faddr: [16]uint8{}, + Fprec: uint8(40), + Flabel: uint8(1), + }, +} + +func _policyof(tls *TLS, a uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&_defpolicy))+uintptr(i)*20, uint64(_defpolicy[i].Flen1)) != 0 { + goto _1 + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a + uintptr(_defpolicy[i].Flen1))))&int32(_defpolicy[i].Fmask) != int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + uintptr(_defpolicy[i].Flen1)))) { + goto _1 + } + return uintptr(unsafe.Pointer(&_defpolicy)) + uintptr(i)*20 + goto _1 + _1: + ; + i++ + } + return r +} + +func _labelof(tls *TLS, a uintptr) (r int32) { + return int32((*Tpolicy)(unsafe.Pointer(_policyof(tls, a))).Flabel) +} + +func _scopeof(tls *TLS, a uintptr) (r int32) { + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xff) { + return int32(*(*Tuint8_t)(unsafe.Pointer(a + 1))) & int32(15) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0x80) { + return int32(2) + } + if *(*Tuint32_t)(unsafe.Pointer(a)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 1*4)) == uint32(0) && *(*Tuint32_t)(unsafe.Pointer(a + 2*4)) == uint32(0) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*Tuint8_t)(unsafe.Pointer(a + 15))) == int32(1) { + return int32(2) + } + if int32(*(*Tuint8_t)(unsafe.Pointer(a))) == int32(0xfe) && int32(*(*Tuint8_t)(unsafe.Pointer(a + 1)))&int32(0xc0) == int32(0xc0) { + return int32(5) + } + return int32(14) +} + +func _prefixmatch(tls *TLS, s uintptr, d uintptr) (r int32) { + var i uint32 + _ = i + i = uint32(0) + for { + if !(i < uint32(128) && !((int32(*(*Tuint8_t)(unsafe.Pointer(s + uintptr(i/uint32(8)))))^int32(*(*Tuint8_t)(unsafe.Pointer(d + uintptr(i/uint32(8))))))&(Int32FromInt32(128)>>(i%Uint32FromInt32(8))) != 0)) { + break + } + goto _1 + _1: + ; + i++ + } + return int32(i) +} + +func _addrcmp(tls *TLS, _a uintptr, _b uintptr) (r int32) { + var a, b uintptr + _, _ = a, b + a = _a + b = _b + return (*Taddress)(unsafe.Pointer(b)).Fsortkey - (*Taddress)(unsafe.Pointer(a)).Fsortkey +} + +func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var cnt, dlabel, dprec, dscope, family1, fd, i, j, key, prefixlen, v1, v4, v5 int32 + var da, dpolicy, sa uintptr + var dalen Tsocklen_t + var l Tsize_t + var _ /* cs at bp+0 */ int32 + var _ /* da4 at bp+76 */ Tsockaddr_in + var _ /* da6 at bp+32 */ Tsockaddr_in6 + var _ /* sa4 at bp+60 */ Tsockaddr_in + var _ /* sa6 at bp+4 */ Tsockaddr_in6 + var _ /* salen at bp+92 */ Tsocklen_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, da, dalen, dlabel, dpolicy, dprec, dscope, family1, fd, i, j, key, l, prefixlen, sa, v1, v4, v5 + cnt = 0 + *(*uint8)(unsafe.Pointer(canon)) = uint8(0) + if name != 0 { + /* reject empty name and check len so it fits into temp bufs */ + l = Xstrnlen(tls, name, uint64(255)) + if l-uint64(1) >= uint64(254) { + return -int32(2) + } + Xmemcpy(tls, canon, name, l+uint64(1)) + } + /* Procedurally, a request for v6 addresses with the v4-mapped + * flag set is like a request for unspecified family, followed + * by filtering of the results. */ + if flags&int32(AI_V4MAPPED) != 0 { + if family == int32(PF_INET6) { + family = PF_UNSPEC + } else { + flags -= int32(AI_V4MAPPED) + } + } + /* Try each backend until there's at least one result. */ + cnt = _name_from_null(tls, buf, name, family, flags) + if !(cnt != 0) { + cnt = _name_from_numeric(tls, buf, name, family) + } + if !(cnt != 0) && !(flags&Int32FromInt32(AI_NUMERICHOST) != 0) { + cnt = _name_from_hosts(tls, buf, canon, name, family) + if !(cnt != 0) { + cnt = _name_from_dns_search(tls, buf, canon, name, family) + } + } + if cnt <= 0 { + if cnt != 0 { + v1 = cnt + } else { + v1 = -int32(2) + } + return v1 + } + /* Filter/transform results for v4-mapped lookup, if requested. */ + if flags&int32(AI_V4MAPPED) != 0 { + if !(flags&Int32FromInt32(AI_ALL) != 0) { + /* If any v6 results exist, remove v4 results. */ + i = 0 + for { + if !(i < cnt && (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET6)) { + break + } + goto _2 + _2: + ; + i++ + } + if i < cnt { + j = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily == int32(PF_INET6) { + v4 = j + j++ + *(*Taddress)(unsafe.Pointer(buf + uintptr(v4)*28)) = *(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28)) + } + goto _3 + _3: + ; + i++ + } + v5 = j + i = v5 + cnt = v5 + } + } + /* Translate any remaining v4 results to v6 */ + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + goto _6 + } + Xmemcpy(tls, buf+uintptr(i)*28+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, buf+uintptr(i)*28+8, __ccgo_ts+1057, uint64(12)) + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily = int32(PF_INET6) + goto _6 + _6: + ; + i++ + } + } + /* No further processing is needed if there are fewer than 2 + * results or if there are only IPv4 results. */ + if cnt < int32(2) || family == int32(PF_INET) { + return cnt + } + i = 0 + for { + if !(i < cnt) { + break + } + if (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily != int32(PF_INET) { + break + } + goto _7 + _7: + ; + i++ + } + if i == cnt { + return cnt + } + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + /* The following implements a subset of RFC 3484/6724 destination + * address selection by generating a single 31-bit sort key for + * each address. Rules 3, 4, and 7 are omitted for having + * excessive runtime and code size cost and dubious benefit. + * So far the label/precedence table cannot be customized. */ + i = 0 + for { + if !(i < cnt) { + break + } + family1 = (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Ffamily + key = 0 + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 4)) = Tsockaddr_in6{} + *(*Tsockaddr_in6)(unsafe.Pointer(bp + 32)) = Tsockaddr_in6{ + Fsin6_family: uint16(PF_INET6), + Fsin6_port: uint16(65535), + Fsin6_scope_id: (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fscopeid, + } + *(*Tsockaddr_in)(unsafe.Pointer(bp + 60)) = Tsockaddr_in{} + *(*Tsockaddr_in)(unsafe.Pointer(bp + 76)) = Tsockaddr_in{ + Fsin_family: uint16(PF_INET), + Fsin_port: uint16(65535), + } + if family1 == int32(PF_INET6) { + Xmemcpy(tls, bp+32+8, buf+uintptr(i)*28+8, uint64(16)) + da = bp + 32 + dalen = uint32(28) + sa = bp + 4 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(28) + } else { + Xmemcpy(tls, bp+4+8, __ccgo_ts+1057, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+32+8, __ccgo_ts+1057, uint64(12)) + Xmemcpy(tls, bp+32+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) + Xmemcpy(tls, bp+76+4, buf+uintptr(i)*28+8, uint64(4)) + da = bp + 76 + dalen = uint32(16) + sa = bp + 60 + *(*Tsocklen_t)(unsafe.Pointer(bp + 92)) = uint32(16) + } + dpolicy = _policyof(tls, bp+32+8) + dscope = _scopeof(tls, bp+32+8) + dlabel = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Flabel) + dprec = int32((*Tpolicy)(unsafe.Pointer(dpolicy)).Fprec) + prefixlen = 0 + fd = Xsocket(tls, family1, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC), int32(IPPROTO_UDP)) + if fd >= 0 { + if !(Xconnect(tls, fd, da, dalen) != 0) { + key |= int32(DAS_USABLE) + if !(Xgetsockname(tls, fd, sa, bp+92) != 0) { + if family1 == int32(PF_INET) { + Xmemcpy(tls, bp+4+8+uintptr(12), bp+60+4, uint64(4)) + } + if dscope == _scopeof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGSCOPE) + } + if dlabel == _labelof(tls, bp+4+8) { + key |= int32(DAS_MATCHINGLABEL) + } + prefixlen = _prefixmatch(tls, bp+4+8, bp+32+8) + } + } + Xclose(tls, fd) + } + key |= dprec << int32(DAS_PREC_SHIFT) + key |= (int32(15) - dscope) << int32(DAS_SCOPE_SHIFT) + key |= prefixlen << int32(DAS_PREFIX_SHIFT) + key |= (int32(MAXADDRS) - i) << DAS_ORDER_SHIFT + (*(*Taddress)(unsafe.Pointer(buf + uintptr(i)*28))).Fsortkey = key + goto _8 + _8: + ; + i++ + } + Xqsort(tls, buf, uint64(cnt), uint64(28), __ccgo_fp(_addrcmp)) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + return cnt +} + +func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1408) + defer tls.Free(1408) + var cnt, v1, v11, v12, v16, v17, v2, v20, v21, v22, v7, v8 int32 + var f, p, v3, v4, v6 uintptr + var l Tsize_t + var port uint64 + var v10, v14, v19 bool + var _ /* _buf at bp+136 */ [1032]uint8 + var _ /* _f at bp+1168 */ TFILE + var _ /* line at bp+0 */ [128]uint8 + var _ /* z at bp+128 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = cnt, f, l, p, port, v1, v10, v11, v12, v14, v16, v17, v19, v2, v20, v21, v22, v3, v4, v6, v7, v8 + cnt = 0 + *(*uintptr)(unsafe.Pointer(bp + 128)) = __ccgo_ts + port = uint64(0) + switch socktype { + case int32(SOCK_STREAM): + switch proto { + case 0: + proto = int32(IPPROTO_TCP) + fallthrough + case int32(IPPROTO_TCP): + default: + return -int32(8) + } + case int32(SOCK_DGRAM): + switch proto { + case 0: + proto = int32(IPPROTO_UDP) + fallthrough + case int32(IPPROTO_UDP): + default: + return -int32(8) + } + fallthrough + case 0: + default: + if name != 0 { + return -int32(8) + } + (*(*Tservice)(unsafe.Pointer(buf))).Fport = uint16(0) + (*(*Tservice)(unsafe.Pointer(buf))).Fproto = uint8(proto) + (*(*Tservice)(unsafe.Pointer(buf))).Fsocktype = uint8(socktype) + return int32(1) + } + if name != 0 { + if !(*(*uint8)(unsafe.Pointer(name)) != 0) { + return -int32(8) + } + port = Xstrtoul(tls, name, bp+128, int32(10)) + } + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 128)))) != 0) { + if port > uint64(65535) { + return -int32(8) + } + if proto != int32(IPPROTO_UDP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v1 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v1)*4))).Fproto = uint8(IPPROTO_TCP) + } + if proto != int32(IPPROTO_TCP) { + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v2 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v2)*4))).Fproto = uint8(IPPROTO_UDP) + } + return cnt + } + if flags&int32(AI_NUMERICSERV) != 0 { + return -int32(2) + } + l = Xstrlen(tls, name) + f = X__fopen_rb_ca(tls, __ccgo_ts+1070, bp+1168, bp+136, uint64(1032)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + return -int32(8) + default: + return -int32(11) + } + } + for Xfgets(tls, bp, int32(128), f) != 0 && cnt < int32(MAXSERVS) { + v3 = Xstrchr(tls, bp, int32('#')) + p = v3 + if v3 != 0 { + v4 = p + p++ + *(*uint8)(unsafe.Pointer(v4)) = uint8('\n') + *(*uint8)(unsafe.Pointer(p)) = Uint8FromInt32(0) + } + /* Find service name */ + p = bp + for { + v6 = Xstrstr(tls, p, name) + p = v6 + if !(v6 != 0) { + break + } + if v10 = p > bp; v10 { + v7 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + v8 = BoolInt32(v7 == int32(' ') || uint32(v7)-uint32('\t') < uint32(5)) + goto _9 + _9: + } + if v10 && !(v8 != 0) { + goto _5 + } + if v14 = *(*uint8)(unsafe.Pointer(p + uintptr(l))) != 0; v14 { + v11 = int32(*(*uint8)(unsafe.Pointer(p + uintptr(l)))) + v12 = BoolInt32(v11 == int32(' ') || uint32(v11)-uint32('\t') < uint32(5)) + goto _13 + _13: + } + if v14 && !(v12 != 0) { + goto _5 + } + break + goto _5 + _5: + ; + p++ + } + if !(p != 0) { + continue + } + /* Skip past canonical name at beginning of line */ + p = bp + for { + if v19 = *(*uint8)(unsafe.Pointer(p)) != 0; v19 { + v16 = int32(*(*uint8)(unsafe.Pointer(p))) + v17 = BoolInt32(v16 == int32(' ') || uint32(v16)-uint32('\t') < uint32(5)) + goto _18 + _18: + } + if !(v19 && !(v17 != 0)) { + break + } + goto _15 + _15: + ; + p++ + } + port = Xstrtoul(tls, p, bp+128, int32(10)) + if port > uint64(65535) || *(*uintptr)(unsafe.Pointer(bp + 128)) == p { + continue + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1084, uint64(4)) != 0) { + if proto == int32(IPPROTO_TCP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_DGRAM) + v20 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v20)*4))).Fproto = uint8(IPPROTO_UDP) + } + if !(Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), __ccgo_ts+1089, uint64(4)) != 0) { + if proto == int32(IPPROTO_UDP) { + continue + } + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fport = uint16(port) + (*(*Tservice)(unsafe.Pointer(buf + uintptr(cnt)*4))).Fsocktype = uint8(SOCK_STREAM) + v21 = cnt + cnt++ + (*(*Tservice)(unsafe.Pointer(buf + uintptr(v21)*4))).Fproto = uint8(IPPROTO_TCP) + } + } + X__fclose_ca(tls, f) + if cnt > 0 { + v22 = cnt + } else { + v22 = -int32(8) + } + return v22 +} + +func ___netlink_enumerate(tls *TLS, fd int32, seq uint32, type1 int32, af int32, cb uintptr, ctx uintptr) (r1 int32) { + bp := tls.Alloc(8192) + defer tls.Free(8192) + var h uintptr + var r, ret int32 + var _ /* u at bp+0 */ struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + } + _, _, _ = h, r, ret + Xmemset(tls, bp, 0, uint64(20)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_len = uint32(20) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_type = uint16(type1) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_flags = uint16(Int32FromInt32(NLM_F_ROOT) | Int32FromInt32(NLM_F_MATCH) | Int32FromInt32(NLM_F_REQUEST)) + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fnlh.Fnlmsg_seq = seq + (*(*struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + })(unsafe.Pointer(&*(*struct { + Freq [0]struct { + Fnlh Tnlmsghdr + Fg Trtgenmsg + } + Freply [0]Tnlmsghdr + Fbuf [8192]Tuint8_t + })(unsafe.Pointer(bp))))).Fg.Frtgen_family = uint8(af) + r = int32(Xsend(tls, fd, bp, uint64(20), 0)) + if r < 0 { + return r + } + for int32(1) != 0 { + r = int32(Xrecv(tls, fd, bp, uint64(8192), int32(MSG_DONTWAIT))) + if r <= 0 { + return -int32(1) + } + h = bp + for { + if !(uint64(int64(bp+uintptr(r))-int64(h)) >= uint64(16)) { + break + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_DONE) { + return 0 + } + if int32((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_type) == int32(NLMSG_ERROR) { + return -int32(1) + } + ret = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cb})))(tls, ctx, h) + if ret != 0 { + return ret + } + goto _1 + _1: + ; + h = h + uintptr(((*Tnlmsghdr)(unsafe.Pointer(h)).Fnlmsg_len+Uint32FromInt32(3))&uint32(^Int32FromInt32(3))) + } + } + return r1 +} + +func X__rtnetlink_enumerate(tls *TLS, link_af int32, addr_af int32, cb uintptr, ctx uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v link_af=%v addr_af=%v cb=%v ctx=%v, (%v:)", tls, link_af, addr_af, cb, ctx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var fd, r int32 + _, _ = fd, r + fd = Xsocket(tls, int32(PF_NETLINK), Int32FromInt32(SOCK_RAW)|Int32FromInt32(SOCK_CLOEXEC), NETLINK_ROUTE) + if fd < 0 { + return -int32(1) + } + r = ___netlink_enumerate(tls, fd, uint32(1), int32(RTM_GETLINK), link_af, cb, ctx) + if !(r != 0) { + r = ___netlink_enumerate(tls, fd, uint32(2), int32(RTM_GETADDR), addr_af, cb, ctx) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return r +} + +func Xgetnetbyaddr(tls *TLS, net Tuint32_t, type1 int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v net=%v type1=%v, (%v:)", tls, net, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xgetnetbyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xns_get16(tls *TLS, cp uintptr) (r uint32) { + if __ccgo_strace { + trc("tls=%v cp=%v, (%v:)", tls, cp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(int32(*(*uint8)(unsafe.Pointer(cp)))< %v", r) }() + } + return uint64(uint32(*(*uint8)(unsafe.Pointer(cp)))<> int32(8)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(s) +} + +func Xns_put32(tls *TLS, l uint64, cp uintptr) { + if __ccgo_strace { + trc("tls=%v l=%v cp=%v, (%v:)", tls, l, cp, origin(2)) + } + var v1, v2, v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + v1 = cp + cp++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(l >> int32(24)) + v2 = cp + cp++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(l >> int32(16)) + v3 = cp + cp++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(l >> int32(8)) + v4 = cp + cp++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(l) +} + +func Xns_initparse(tls *TLS, msg uintptr, msglen int32, handle uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v msglen=%v handle=%v, (%v:)", tls, msg, msglen, handle, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, r int32 + _, _ = i, r + (*Tns_msg)(unsafe.Pointer(handle)).F_msg = msg + (*Tns_msg)(unsafe.Pointer(handle)).F_eom = msg + uintptr(msglen) + if msglen < (Int32FromInt32(2)+int32(_ns_s_max))*Int32FromInt32(NS_INT16SZ) { + goto bad + } + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_id = uint16(Xns_get16(tls, msg-uintptr(2))) + msg += uintptr(2) + (*Tns_msg)(unsafe.Pointer(handle)).F_flags = uint16(Xns_get16(tls, msg-uintptr(2))) + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + msg += uintptr(2) + *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) = uint16(Xns_get16(tls, msg-uintptr(2))) + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < int32(_ns_s_max)) { + break + } + if *(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)) != 0 { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = msg + r = Xns_skiprr(tls, msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, i, int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(i)*2)))) + if r < 0 { + return -int32(1) + } + msg += uintptr(r) + } else { + *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(i)*8)) = UintptrFromInt32(0) + } + goto _2 + _2: + ; + i++ + } + if msg != (*Tns_msg)(unsafe.Pointer(handle)).F_eom { + goto bad + } + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = int32(_ns_s_max) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_skiprr(tls *TLS, ptr uintptr, eom uintptr, section Tns_sect, count int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v ptr=%v eom=%v section=%v count=%v, (%v:)", tls, ptr, eom, section, count, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var p uintptr + var r, v1 int32 + _, _, _ = p, r, v1 + p = ptr + for { + v1 = count + count-- + if !(v1 != 0) { + break + } + r = Xdn_skipname(tls, p, eom) + if r < 0 { + goto bad + } + if int64(r+Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r + Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(NS_INT32SZ) + p += uintptr(2) + r = int32(Xns_get16(tls, p-uintptr(2))) + if int64(r) > int64(eom)-int64(p) { + goto bad + } + p += uintptr(r) + } + } + return int32(int64(p) - int64(ptr)) + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_parserr(tls *TLS, handle uintptr, section Tns_sect, rrnum int32, rr uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v handle=%v section=%v rrnum=%v rr=%v, (%v:)", tls, handle, section, rrnum, rr, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + var p1, p2, p3, p4 uintptr + _, _, _, _, _ = r, p1, p2, p3, p4 + if section < 0 || section >= int32(_ns_s_max) { + goto bad + } + if section != (*Tns_msg)(unsafe.Pointer(handle)).F_sect { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum == -int32(1) { + rrnum = (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum + } + if rrnum < 0 || rrnum >= int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + goto bad + } + if rrnum < (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = *(*uintptr)(unsafe.Pointer(handle + 32 + uintptr(section)*8)) + } + if rrnum > (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum { + r = Xns_skiprr(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, section, rrnum-(*Tns_msg)(unsafe.Pointer(handle)).F_rrnum) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = rrnum + } + r = Xns_name_uncompress(tls, (*Tns_msg)(unsafe.Pointer(handle)).F_msg, (*Tns_msg)(unsafe.Pointer(handle)).F_eom, (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr, rr, uint64(NS_MAXDNAME)) + if r < 0 { + return -int32(1) + } + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr(r) + if int64(Int32FromInt32(2)*Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p1 = handle + 72 + *(*uintptr)(unsafe.Pointer(p1)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Ftype1 = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p1))-uintptr(2))) + p2 = handle + 72 + *(*uintptr)(unsafe.Pointer(p2)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frr_class = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p2))-uintptr(2))) + if section != int32(_ns_s_qd) { + if int64(Int32FromInt32(NS_INT32SZ)+Int32FromInt32(NS_INT16SZ)) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + p3 = handle + 72 + *(*uintptr)(unsafe.Pointer(p3)) += uintptr(4) + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(Xns_get32(tls, *(*uintptr)(unsafe.Pointer(p3))-uintptr(4))) + p4 = handle + 72 + *(*uintptr)(unsafe.Pointer(p4)) += uintptr(2) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(Xns_get16(tls, *(*uintptr)(unsafe.Pointer(p4))-uintptr(2))) + if int64((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) > int64((*Tns_msg)(unsafe.Pointer(handle)).F_eom)-int64((*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr) { + goto size + } + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr + *(*uintptr)(unsafe.Pointer(handle + 72)) += uintptr((*Tns_rr)(unsafe.Pointer(rr)).Frdlength) + } else { + (*Tns_rr)(unsafe.Pointer(rr)).Fttl = uint32(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdlength = uint16(0) + (*Tns_rr)(unsafe.Pointer(rr)).Frdata = UintptrFromInt32(0) + } + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum++ + if (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum > int32(*(*Tuint16_t)(unsafe.Pointer(handle + 20 + uintptr(section)*2))) { + (*Tns_msg)(unsafe.Pointer(handle)).F_sect = section + int32(1) + if (*Tns_msg)(unsafe.Pointer(handle)).F_sect == int32(_ns_s_max) { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = -int32(1) + (*Tns_msg)(unsafe.Pointer(handle)).F_msg_ptr = UintptrFromInt32(0) + } else { + (*Tns_msg)(unsafe.Pointer(handle)).F_rrnum = 0 + } + } + return 0 + goto bad +bad: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENODEV) + return -int32(1) + goto size +size: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + return -int32(1) +} + +func Xns_name_uncompress(tls *TLS, msg uintptr, eom uintptr, src uintptr, dst uintptr, dstsiz Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v msg=%v eom=%v src=%v dst=%v dstsiz=%v, (%v:)", tls, msg, eom, src, dst, dstsiz, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = Xdn_expand(tls, msg, eom, src, dst, int32(dstsiz)) + if r < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EMSGSIZE) + } + return r +} + +func Xntohl(tls *TLS, n Tuint32_t) (r Tuint32_t) { + if __ccgo_strace { + trc("tls=%v n=%v, (%v:)", tls, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 uint32 + var v2, v3 Tuint32_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = v2>>int32(24) | v2>>int32(8)&uint32(0xff00) | v2< %v", r) }() + } + var u struct { + Fc [0]uint8 + Fi int32 + } + var v1 int32 + var v2, v3 Tuint16_t + _, _, _, _ = u, v1, v2, v3 + u = *(*struct { + Fc [0]uint8 + Fi int32 + })(unsafe.Pointer(&struct{ f int32 }{f: int32(1)})) + if *(*uint8)(unsafe.Pointer(&u)) != 0 { + v2 = n + v3 = uint16(int32(v2)<>int32(8)) + goto _4 + _4: + v1 = int32(v3) + } else { + v1 = int32(n) + } + return uint16(v1) +} + +/* do we really need all these?? */ + +var _idx int32 +var _protos = [239]uint8{0, 'i', 'p', 0, 1, 'i', 'c', 'm', 'p', 0, 2, 'i', 'g', 'm', 'p', 0, 3, 'g', 'g', 'p', 0, 4, 'i', 'p', 'e', 'n', 'c', 'a', 'p', 0, 5, 's', 't', 0, 6, 't', 'c', 'p', 0, 8, 'e', 'g', 'p', 0, 12, 'p', 'u', 'p', 0, 17, 'u', 'd', 'p', 0, 20, 'h', 'm', 'p', 0, 22, 'x', 'n', 's', '-', 'i', 'd', 'p', 0, 27, 'r', 'd', 'p', 0, 29, 'i', 's', 'o', '-', 't', 'p', '4', 0, '$', 'x', 't', 'p', 0, '%', 'd', 'd', 'p', 0, '&', 'i', 'd', 'p', 'r', '-', 'c', 'm', 't', 'p', 0, ')', 'i', 'p', 'v', '6', 0, '+', 'i', 'p', 'v', '6', '-', 'r', 'o', 'u', 't', 'e', 0, ',', 'i', 'p', 'v', '6', '-', 'f', 'r', 'a', 'g', 0, '-', 'i', 'd', 'r', 'p', 0, '.', 'r', 's', 'v', 'p', 0, '/', 'g', 'r', 'e', 0, '2', 'e', 's', 'p', 0, '3', 'a', 'h', 0, '9', 's', 'k', 'i', 'p', 0, ':', 'i', 'p', 'v', '6', '-', 'i', 'c', 'm', 'p', 0, ';', 'i', 'p', 'v', '6', '-', 'n', 'o', 'n', 'x', 't', 0, '<', 'i', 'p', 'v', '6', '-', 'o', 'p', 't', 's', 0, 'I', 'r', 's', 'p', 'f', 0, 'Q', 'v', 'm', 't', 'p', 0, 'Y', 'o', 's', 'p', 'f', 0, '^', 'i', 'p', 'i', 'p', 0, 'b', 'e', 'n', 'c', 'a', 'p', 0, 'g', 'p', 'i', 'm', 0, 255, 'r', 'a', 'w'} + +func Xendprotoent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + _idx = 0 +} + +func Xsetprotoent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } + _idx = 0 +} + +func Xgetprotoent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + if uint64(_idx) >= uint64(239) { + return UintptrFromInt32(0) + } + _p.Fp_proto = int32(_protos[_idx]) + _p.Fp_name = uintptr(unsafe.Pointer(&_protos)) + uintptr(_idx+int32(1)) + _p.Fp_aliases = uintptr(unsafe.Pointer(&_aliases)) + _idx = int32(uint64(_idx) + (Xstrlen(tls, _p.Fp_name) + Uint64FromInt32(2))) + return uintptr(unsafe.Pointer(&_p)) +} + +var _p Tprotoent + +var _aliases uintptr + +func Xgetprotobyname(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && Xstrcmp(tls, name, (*Tprotoent)(unsafe.Pointer(p)).Fp_name) != 0 { + p = Xgetprotoent(tls) + } + return p +} + +func Xgetprotobynumber(tls *TLS, num int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v num=%v, (%v:)", tls, num, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + Xendprotoent(tls) + for cond := true; cond; cond = p != 0 && (*Tprotoent)(unsafe.Pointer(p)).Fp_proto != num { + p = Xgetprotoent(tls) + } + return p +} + +func Xrecv(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xrecvfrom(tls, fd, buf, len1, flags, uintptr(0), uintptr(0)) +} + +func Xrecvfrom(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen uintptr) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_recvfrom) + v2 = int32(__SC_recvfrom) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(buf) + v6 = int64(len1) + v7 = int64(flags) + v8 = int64(addr) + v9 = int64(alen) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint64(v10)) +} + +func Xrecvmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v timeout=%v, (%v:)", tls, fd, msgvec, vlen, flags, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i uint32 + var mh uintptr + var v2 int32 + _, _, _ = i, mh, v2 + mh = msgvec + i = vlen + for { + if !(i != 0) { + break + } + v2 = Int32FromInt32(0) + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad2 = v2 + (*Tmmsghdr)(unsafe.Pointer(mh)).Fmsg_hdr.F__pad1 = v2 + goto _1 + _1: + ; + i-- + mh += 64 + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_recvmmsg), int64(fd), int64(msgvec), int64(vlen), int64(flags), int64(timeout), 0)))) +} + +func X__convert_scm_timestamps(tls *TLS, msg uintptr, csize Tsocklen_t) { + if __ccgo_strace { + trc("tls=%v msg=%v csize=%v, (%v:)", tls, msg, csize, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cmsg, last, v2, v6, v8, p7 uintptr + var type1 int32 + var _ /* tmp at bp+0 */ int64 + var _ /* tvts at bp+8 */ [2]int64 + _, _, _, _, _, _, _ = cmsg, last, type1, v2, v6, v8, p7 + if true { + return + } + if !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control != 0) || !((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen != 0) { + return + } + last = uintptr(0) + type1 = 0 + if uint64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) >= uint64(16) { + v2 = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control + } else { + v2 = UintptrFromInt32(0) + } + cmsg = v2 + for { + if !(cmsg != 0) { + break + } + if (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level == int32(SOL_SOCKET) { + switch (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type { + case int32(SO_TIMESTAMP_OLD): + goto _3 + case int32(SO_TIMESTAMPNS_OLD): + goto _4 + } + goto _5 + _3: + ; + if type1 != 0 { + goto _5 + } + type1 = int32(SO_TIMESTAMP) + goto common + _4: + ; + type1 = int32(SO_TIMESTAMPNS) + goto common + common: + ; + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16, uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[0] = *(*int64)(unsafe.Pointer(bp)) + Xmemcpy(tls, bp, cmsg+UintptrFromInt32(1)*16+uintptr(8), uint64(8)) + (*(*[2]int64)(unsafe.Pointer(bp + 8)))[int32(1)] = *(*int64)(unsafe.Pointer(bp)) + goto _5 + _5: + } + last = cmsg + goto _1 + _1: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(cmsg)) { + v6 = uintptr(0) + } else { + v6 = cmsg + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v6 + } + if !(last != 0) || !(type1 != 0) { + return + } + if (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) > uint64(csize-(*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen) { + *(*int32)(unsafe.Pointer(msg + 48)) |= int32(MSG_CTRUNC) + return + } + p7 = msg + 44 + *(*Tsocklen_t)(unsafe.Pointer(p7)) = Tsocklen_t(uint64(*(*Tsocklen_t)(unsafe.Pointer(p7))) + ((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + (Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)))) + if uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen))-int64(last)) { + v8 = uintptr(0) + } else { + v8 = last + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(last)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + cmsg = v8 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_level = int32(SOL_SOCKET) + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_type = type1 + (*Tcmsghdr)(unsafe.Pointer(cmsg)).Fcmsg_len = uint32((Uint64FromInt64(16)+Uint64FromInt64(8)-Uint64FromInt32(1)) & ^(Uint64FromInt64(8)-Uint64FromInt32(1)) + Uint64FromInt64(16)) + Xmemcpy(tls, cmsg+UintptrFromInt32(1)*16, bp+8, uint64(16)) +} + +func Xrecvmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r2 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(160) + defer tls.Free(160) + var orig uintptr + var orig_controllen Tsocklen_t + var r, v11 int64 + var r1 Tssize_t + var v1, v2, v3, v4 int32 + var v10, v5, v6, v7, v8, v9 Tsyscall_arg_t + var _ /* h at bp+96 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = orig, orig_controllen, r, r1, v1, v10, v11, v2, v3, v4, v5, v6, v7, v8, v9 + orig_controllen = (*Tmsghdr)(unsafe.Pointer(msg)).Fmsg_controllen + orig = msg + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp + 96)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad1 = v1 + msg = bp + 96 + } + v2 = int32(SYS_recvmsg) + v3 = int32(__SC_recvmsg) + v4 = int32(1) + v5 = int64(fd) + v6 = int64(msg) + v7 = int64(flags) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + v10 = int64(Int32FromInt32(0)) + if v4 != 0 { + r = ___syscall_cp(tls, int64(v2), v5, v6, v7, v8, v9, v10) + } else { + r = X__syscall6(tls, int64(v2), v5, v6, v7, v8, v9, v10) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v11 = r + goto _12 + } + if v4 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v5, + 1: v6, + 2: v7, + 3: v8, + 4: v9, + 5: v10, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v3), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v5, + 1: v6, + 2: v7, + 3: v8, + 4: v9, + 5: v10, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v3), int64(bp+48)) + } + v11 = r + goto _12 +_12: + r1 = X__syscall_ret(tls, uint64(v11)) + if r1 >= 0 { + X__convert_scm_timestamps(tls, msg, orig_controllen) + } + if orig != 0 { + *(*Tmsghdr)(unsafe.Pointer(orig)) = *(*Tmsghdr)(unsafe.Pointer(bp + 96)) + } + return r1 +} + +func Xres_init(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__res_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var i, id, j, n int32 + var l Tsize_t + var _ /* q at bp+0 */ [280]uint8 + var _ /* ts at bp+280 */ Ttimespec + _, _, _, _, _ = i, id, j, l, n + l = Xstrnlen(tls, dname, uint64(255)) + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + l-- + } + if l != 0 && int32(*(*uint8)(unsafe.Pointer(dname + uintptr(l-uint64(1))))) == int32('.') { + return -int32(1) + } + n = int32(uint64(17) + l + BoolUint64(!!(l != 0))) + if l > uint64(253) || buflen < n || uint32(op) > uint32(15) || uint32(class) > uint32(255) || uint32(type1) > uint32(255) { + return -int32(1) + } + /* Construct query template - ID will be filled later */ + Xmemset(tls, bp, 0, uint64(n)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(2)] = uint8(op*int32(8) + int32(1)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(3)] = uint8(32) /* AD */ + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(5)] = uint8(1) + Xmemcpy(tls, bp+uintptr(13), dname, l) + i = int32(13) + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[i] != 0) { + break + } + j = i + for { + if !((*(*[280]uint8)(unsafe.Pointer(bp)))[j] != 0 && int32((*(*[280]uint8)(unsafe.Pointer(bp)))[j]) != int32('.')) { + break + } + goto _2 + _2: + ; + j++ + } + if uint32(j-i)-uint32(1) > uint32(62) { + return -int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i-int32(1)] = uint8(j - i) + goto _1 + _1: + ; + i = j + int32(1) + } + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(1)] = uint8(type1) + (*(*[280]uint8)(unsafe.Pointer(bp)))[i+int32(3)] = uint8(class) + /* Make a reasonably unpredictable id */ + Xclock_gettime(tls, CLOCK_REALTIME, bp+280) + id = int32((uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec) + uint64((*(*Ttimespec)(unsafe.Pointer(bp + 280))).Ftv_nsec)/uint64(65536)) & uint64(0xffff)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[0] = uint8(id / int32(256)) + (*(*[280]uint8)(unsafe.Pointer(bp)))[int32(1)] = uint8(id) + Xmemcpy(tls, buf, bp, uint64(n)) + return n +} + +func Xres_mkquery(tls *TLS, op int32, dname uintptr, class int32, type1 int32, data uintptr, datalen int32, newrr uintptr, buf uintptr, buflen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v op=%v dname=%v class=%v type1=%v data=%v datalen=%v newrr=%v buf=%v buflen=%v, (%v:)", tls, op, dname, class, type1, data, datalen, newrr, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_mkquery(tls, op, dname, class, type1, data, datalen, newrr, buf, buflen) +} + +const POLLERR = 8 +const POLLHUP = 16 +const POLLIN = 1 +const POLLMSG = 1024 +const POLLNVAL = 32 +const POLLOUT = 4 +const POLLPRI = 2 +const POLLRDBAND = 128 +const POLLRDHUP = 8192 +const POLLRDNORM = 64 +const POLLWRBAND = 512 +const POLLWRNORM = 256 +const TCP_CC_INFO = 26 +const TCP_CLOSE = 7 +const TCP_CLOSE_WAIT = 8 +const TCP_CLOSING = 11 +const TCP_CM_INQ = 36 +const TCP_CONGESTION = 13 +const TCP_CORK = 3 +const TCP_DEFER_ACCEPT = 9 +const TCP_ESTABLISHED = 1 +const TCP_FASTOPEN = 23 +const TCP_FASTOPEN_CONNECT = 30 +const TCP_FASTOPEN_KEY = 33 +const TCP_FASTOPEN_NO_COOKIE = 34 +const TCP_FIN_WAIT1 = 4 +const TCP_FIN_WAIT2 = 5 +const TCP_INFO = 11 +const TCP_INQ = 36 +const TCP_KEEPCNT = 6 +const TCP_KEEPIDLE = 4 +const TCP_KEEPINTVL = 5 +const TCP_LAST_ACK = 9 +const TCP_LINGER2 = 8 +const TCP_LISTEN = 10 +const TCP_MAXSEG = 2 +const TCP_MD5SIG = 14 +const TCP_MD5SIG_EXT = 32 +const TCP_NODELAY = 1 +const TCP_NOTSENT_LOWAT = 25 +const TCP_QUEUE_SEQ = 21 +const TCP_QUICKACK = 12 +const TCP_REPAIR = 19 +const TCP_REPAIR_OPTIONS = 22 +const TCP_REPAIR_QUEUE = 20 +const TCP_REPAIR_WINDOW = 29 +const TCP_SAVED_SYN = 28 +const TCP_SAVE_SYN = 27 +const TCP_SYNCNT = 7 +const TCP_SYN_RECV = 3 +const TCP_SYN_SENT = 2 +const TCP_THIN_DUPACK = 17 +const TCP_THIN_LINEAR_TIMEOUTS = 16 +const TCP_TIMESTAMP = 24 +const TCP_TIME_WAIT = 6 +const TCP_TX_DELAY = 37 +const TCP_ULP = 31 +const TCP_USER_TIMEOUT = 18 +const TCP_WINDOW_CLAMP = 10 +const TCP_ZEROCOPY_RECEIVE = 35 + +const _TCP_NLA_PAD = 0 +const _TCP_NLA_BUSY = 1 +const _TCP_NLA_RWND_LIMITED = 2 +const _TCP_NLA_SNDBUF_LIMITED = 3 +const _TCP_NLA_DATA_SEGS_OUT = 4 +const _TCP_NLA_TOTAL_RETRANS = 5 +const _TCP_NLA_PACING_RATE = 6 +const _TCP_NLA_DELIVERY_RATE = 7 +const _TCP_NLA_SND_CWND = 8 +const _TCP_NLA_REORDERING = 9 +const _TCP_NLA_MIN_RTT = 10 +const _TCP_NLA_RECUR_RETRANS = 11 +const _TCP_NLA_DELIVERY_RATE_APP_LMT = 12 +const _TCP_NLA_SNDQ_SIZE = 13 +const _TCP_NLA_CA_STATE = 14 +const _TCP_NLA_SND_SSTHRESH = 15 +const _TCP_NLA_DELIVERED = 16 +const _TCP_NLA_DELIVERED_CE = 17 +const _TCP_NLA_BYTES_SENT = 18 +const _TCP_NLA_BYTES_RETRANS = 19 +const _TCP_NLA_DSACK_DUPS = 20 +const _TCP_NLA_REORD_SEEN = 21 +const _TCP_NLA_SRTT = 22 +const _TCP_NLA_TIMEOUT_REHASH = 23 +const _TCP_NLA_BYTES_NOTSENT = 24 +const _TCP_NLA_EDT = 25 +const _TCP_NLA_TTL = 26 + +type Tnfds_t = uint64 + +type Tpollfd = struct { + Ffd int32 + Fevents int16 + Frevents int16 +} + +func _cleanup(tls *TLS, p uintptr) { + var i int32 + var pfd uintptr + _, _ = i, pfd + pfd = p + i = 0 + for { + if !((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= -int32(1)) { + break + } + if (*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd >= 0 { + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Pointer(pfd + uintptr(i)*8))).Ffd)) + } + goto _1 + _1: + ; + i++ + } +} + +func _mtime(tls *TLS) (r uint64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if Xclock_gettime(tls, int32(CLOCK_MONOTONIC), bp) < 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOSYS) { + Xclock_gettime(tls, CLOCK_REALTIME, bp) + } + return uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec)*uint64(1000) + uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000000)) +} + +func _start_tcp(tls *TLS, pfd uintptr, family int32, sa uintptr, sl Tsocklen_t, q uintptr, ql int32) (r1 int32) { + bp := tls.Alloc(96) + defer tls.Free(96) + var fd, r int32 + var _ /* mh at bp+40 */ Tmsghdr + _, _ = fd, r + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 32)) = [2]Tuint8_t{ + 0: uint8(ql >> int32(8)), + 1: uint8(ql), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: q, + Fiov_len: uint64(ql), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 40)) = Tmsghdr{ + Fmsg_name: sa, + Fmsg_namelen: sl, + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + fd = Xsocket(tls, family, Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = fd + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLOUT) + *(*int32)(unsafe.Pointer(bp + 36)) = int32(1) + if !(Xsetsockopt(tls, fd, int32(IPPROTO_TCP), int32(TCP_FASTOPEN_CONNECT), bp+36, uint32(4)) != 0) { + r = int32(Xsendmsg(tls, fd, bp+40, Int32FromInt32(MSG_FASTOPEN)|Int32FromInt32(MSG_NOSIGNAL))) + if r == ql+int32(2) { + (*Tpollfd)(unsafe.Pointer(pfd)).Fevents = int16(POLLIN) + } + if r >= 0 { + return r + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + } + r = Xconnect(tls, fd, sa, sl) + if !(r != 0) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINPROGRESS) { + return 0 + } + Xclose(tls, fd) + (*Tpollfd)(unsafe.Pointer(pfd)).Ffd = -int32(1) + return -int32(1) +} + +func _step_mh(tls *TLS, mh uintptr, n Tsize_t) { + /* Adjust iovec in msghdr to skip first n bytes. */ + for (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0 && n >= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len { + n -= (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_len + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov += 16 + (*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen-- + } + if !((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iovlen != 0) { + return + } + (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base = (*Tiovec)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov)).Fiov_base + uintptr(n) + *(*Tsize_t)(unsafe.Pointer((*Tmsghdr)(unsafe.Pointer(mh)).Fmsg_iov + 8)) -= n +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + +func X__res_msend_rc(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32, conf uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v conf=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, conf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var alen, attempts, family, fd, i, j, next, nns, r, rcode, retry_interval, rlen, servfail_retry, timeout, v17, v6 int32 + var alen_buf, apos, iplit, pfd, qpos uintptr + var sl Tsocklen_t + var t0, t1, t2, v10 uint64 + var v1, v2, v3, v4 t__predefined_size_t + var v18 bool + var _ /* __cb at bp+208 */ t__ptcb + var _ /* cs at bp+200 */ int32 + var _ /* mh at bp+232 */ Tmsghdr + var _ /* mh at bp+288 */ Tmsghdr + var _ /* mh at bp+344 */ Tmsghdr + var _ /* ns at bp+116 */ [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + var _ /* sa at bp+88 */ struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = alen, alen_buf, apos, attempts, family, fd, i, iplit, j, next, nns, pfd, qpos, r, rcode, retry_interval, rlen, servfail_retry, sl, t0, t1, t2, timeout, v1, v10, v17, v18, v2, v3, v4, v6 + defer func() { + Xrealloc(tls, alen_buf, 0) + Xrealloc(tls, apos, 0) + Xrealloc(tls, pfd, 0) + Xrealloc(tls, qpos, 0) + }() + *(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88)) = struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + *(*uint16)(unsafe.Pointer(bp + 88)) = uint16(0) + *(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)) = [3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + }{} + sl = uint32(16) + nns = 0 + family = int32(PF_INET) + v1 = uint64(nqueries+int32(2)) * 8 + pfd = Xrealloc(tls, pfd, v1) + v2 = uint64(nqueries) * 4 + qpos = Xrealloc(tls, qpos, v2) + v3 = uint64(nqueries) * 4 + apos = Xrealloc(tls, apos, v3) + v4 = uint64(nqueries) * 2 + alen_buf = Xrealloc(tls, alen_buf, v4) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+200) + timeout = int32(uint32(1000) * (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout) + attempts = int32((*Tresolvconf)(unsafe.Pointer(conf)).Fattempts) + nns = 0 + for { + if !(uint32(nns) < (*Tresolvconf)(unsafe.Pointer(conf)).Fnns) { + break + } + iplit = conf + uintptr(nns)*28 + if (*Taddress)(unsafe.Pointer(iplit)).Ffamily == int32(PF_INET) { + Xmemcpy(tls, bp+116+uintptr(nns)*28+4, iplit+8, uint64(4)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_port = Xhtons(tls, uint16(53)) + (*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[nns].Fsin.Fsin_family = uint16(PF_INET) + } else { + sl = uint32(28) + Xmemcpy(tls, bp+116+uintptr(nns)*28+8, iplit+8, uint64(16)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_port = Xhtons(tls, uint16(53)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_scope_id = (*Taddress)(unsafe.Pointer(iplit)).Fscopeid + v6 = Int32FromInt32(PF_INET6) + family = v6 + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(nns)*28))).Fsin6_family = uint16(v6) + } + goto _5 + _5: + ; + nns++ + } + /* Get local address and open/bind a socket */ + fd = Xsocket(tls, family, Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + /* Handle case where system lacks IPv6 support */ + if fd < 0 && family == int32(PF_INET6) && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + i = 0 + for { + if !(i < nns && (*(*Taddress)(unsafe.Pointer(conf + uintptr(nns)*28))).Ffamily == int32(PF_INET6)) { + break + } + goto _7 + _7: + ; + i++ + } + if i == nns { + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + fd = Xsocket(tls, int32(PF_INET), Int32FromInt32(SOCK_DGRAM)|Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK), 0) + family = int32(PF_INET) + sl = uint32(16) + } + /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ + if fd >= 0 && family == int32(PF_INET6) { + *(*int32)(unsafe.Pointer(bp)) = 0 + Xsetsockopt(tls, fd, int32(IPPROTO_IPV6), int32(IPV6_V6ONLY), bp, uint32(4)) + i = 0 + for { + if !(i < nns) { + break + } + if int32((*(*[3]struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 116)))[i].Fsin.Fsin_family) != int32(PF_INET) { + goto _8 + } + Xmemcpy(tls, bp+116+uintptr(i)*28+8+uintptr(12), bp+116+uintptr(i)*28+4, uint64(4)) + Xmemcpy(tls, bp+116+uintptr(i)*28+8, __ccgo_ts+1057, uint64(12)) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_family = uint16(PF_INET6) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_flowinfo = uint32(0) + (*(*Tsockaddr_in6)(unsafe.Pointer(bp + 116 + uintptr(i)*28))).Fsin6_scope_id = uint32(0) + goto _8 + _8: + ; + i++ + } + } + (*(*struct { + Fsin6 [0]Tsockaddr_in6 + Fsin Tsockaddr_in + F__ccgo_pad2 [12]byte + })(unsafe.Pointer(bp + 88))).Fsin.Fsin_family = uint16(family) + if fd < 0 || Xbind(tls, fd, bp+88, sl) < 0 { + if fd >= 0 { + Xclose(tls, fd) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + return -int32(1) + } + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + i = 0 + for { + if !(i < nqueries) { + break + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + goto _9 + _9: + ; + i++ + } + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Ffd = fd + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = int16(POLLIN) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), (nqueries+int32(1))*8))).Ffd = -int32(2) + __pthread_cleanup_push(tls, bp+208, __ccgo_fp(_cleanup), pfd) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + Xmemset(tls, alens, 0, uint64(4)*uint64(nqueries)) + retry_interval = timeout / attempts + next = 0 + v10 = _mtime(tls) + t2 = v10 + t0 = v10 + t1 = t2 - uint64(retry_interval) + for { + if !(t2-t0 < uint64(timeout)) { + break + } + /* This is the loop exit condition: that all queries + * have an accepted answer. */ + i = 0 + for { + if !(i < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) > 0) { + break + } + goto _12 + _12: + ; + i++ + } + if i == nqueries { + break + } + if t2-t1 >= uint64(retry_interval) { + /* Query all configured namservers in parallel */ + i = 0 + for { + if !(i < nqueries) { + break + } + if !(*(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0) { + j = 0 + for { + if !(j < nns) { + break + } + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + goto _14 + _14: + ; + j++ + } + } + goto _13 + _13: + ; + i++ + } + t1 = t2 + servfail_retry = int32(2) * nqueries + } + /* Wait for a response, or until time to retry */ + if Xpoll(tls, pfd, uint64(nqueries+int32(1)), int32(t1+uint64(retry_interval)-t2)) <= 0 { + goto _11 + } + for next < nqueries { + *(*[1]Tiovec)(unsafe.Pointer(bp + 8)) = [1]Tiovec{ + 0: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 232)) = Tmsghdr{ + Fmsg_name: bp + 88, + Fmsg_namelen: sl, + Fmsg_iov: bp + 8, + Fmsg_iovlen: int32(1), + } + rlen = int32(Xrecvmsg(tls, fd, bp+232, 0)) + if rlen < 0 { + break + } + /* Ignore non-identifiable packets */ + if rlen < int32(4) { + continue + } + /* Ignore replies from addresses we didn't send to */ + j = 0 + for { + if !(j < nns && Xmemcmp(tls, bp+116+uintptr(j)*28, bp+88, uint64(sl)) != 0) { + break + } + goto _15 + _15: + ; + j++ + } + if j == nns { + continue + } + /* Find which query this answer goes with, if any */ + i = next + for { + if !(i < nqueries && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8))))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8))))) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 1))) != int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)) + 1))))) { + break + } + goto _16 + _16: + ; + i++ + } + if i == nqueries { + continue + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) != 0 { + continue + } + /* Only accept positive or negative responses; + * retry immediately on server failure, and ignore + * all other codes such as refusal. */ + switch int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)) + 3))) & Int32FromInt32(15) { + case 0: + fallthrough + case int32(3): + case int32(2): + if v18 = servfail_retry != 0; v18 { + v17 = servfail_retry + servfail_retry-- + } + if v18 && v17 != 0 { + Xsendto(tls, fd, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), int32(MSG_NOSIGNAL), bp+116+uintptr(j)*28, sl) + } + fallthrough + default: + continue + } + /* Store answer in the right slot, or update next + * available temp slot if it's already in place. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = rlen + if i == next { + for { + if !(next < nqueries && *(*int32)(unsafe.Pointer(alens + uintptr(next)*4)) != 0) { + break + } + goto _19 + _19: + ; + next++ + } + } else { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(answers + uintptr(next)*8)), uint64(rlen)) + } + /* Ignore further UDP if all slots full or TCP-mode */ + if next == nqueries { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), nqueries*8))).Fevents = 0 + } + /* If answer is truncated (TC bit), fallback to TCP */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 2)))&int32(2) != 0 || (*(*Tmsghdr)(unsafe.Pointer(bp + 232))).Fmsg_flags&int32(MSG_TRUNC) != 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = -int32(1) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), uintptr(0)) + r = _start_tcp(tls, pfd+uintptr(i)*8, family, bp+116+uintptr(j)*28, sl, *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 200)), uintptr(0)) + if r >= 0 { + *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) = r + *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) = 0 + } + continue + } + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLOUT) != 0 { + *(*[2]Tuint8_t)(unsafe.Pointer(bp + 52)) = [2]Tuint8_t{ + 0: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4)) >> int32(8)), + 1: uint8(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + } + *(*[2]Tiovec)(unsafe.Pointer(bp + 24)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 52, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(queries + uintptr(i)*8)), + Fiov_len: uint64(*(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 288)) = Tmsghdr{ + Fmsg_iov: bp + 24, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+288, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)))) + r = int32(Xsendmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+288, int32(MSG_NOSIGNAL))) + if r < 0 { + goto out + } + *(*int32)(unsafe.Pointer(qpos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(qpos), i*4)) == *(*int32)(unsafe.Pointer(qlens + uintptr(i)*4))+int32(2) { + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Fevents = int16(POLLIN) + } + } + goto _20 + _20: + ; + i++ + } + i = 0 + for { + if !(i < nqueries) { + break + } + if int32((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Frevents)&int32(POLLIN) != 0 { + *(*[2]Tiovec)(unsafe.Pointer(bp + 56)) = [2]Tiovec{ + 0: { + Fiov_base: alen_buf + uintptr(i)*2, + Fiov_len: uint64(2), + }, + 1: { + Fiov_base: *(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)), + Fiov_len: uint64(asize), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 344)) = Tmsghdr{ + Fmsg_iov: bp + 56, + Fmsg_iovlen: int32(2), + } + _step_mh(tls, bp+344, uint64(*(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)))) + r = int32(Xrecvmsg(tls, (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd, bp+344, 0)) + if r <= 0 { + goto out + } + *(*int32)(unsafe.Pointer(apos + uintptr(i)*4)) += r + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < int32(2) { + goto _21 + } + alen = int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2)))*int32(256) + int32(*(*uint8)(unsafe.Pointer(alen_buf + uintptr(i)*2 + 1))) + if alen < int32(13) { + goto out + } + if *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < alen+int32(2) && *(*int32)(unsafe.Add(unsafe.Pointer(apos), i*4)) < asize+int32(2) { + goto _21 + } + rcode = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(answers + uintptr(i)*8)) + 3))) & int32(15) + if rcode != 0 && rcode != int32(3) { + goto out + } + /* Storing the length here commits the accepted answer. + * Immediately close TCP socket so as not to consume + * resources we no longer need. */ + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = alen + X__syscall1(tls, int64(SYS_close), int64((*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd)) + (*(*Tpollfd)(unsafe.Add(unsafe.Pointer(pfd), i*8))).Ffd = -int32(1) + } + goto _21 + _21: + ; + i++ + } + goto _11 + _11: + ; + t2 = _mtime(tls) + } + goto out +out: + ; + __pthread_cleanup_pop(tls, bp+208, int32(1)) + /* Disregard any incomplete TCP results */ + i = 0 + for { + if !(i < nqueries) { + break + } + if *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(alens + uintptr(i)*4)) = 0 + } + goto _22 + _22: + ; + i++ + } + return 0 +} + +func X__res_msend(tls *TLS, nqueries int32, queries uintptr, qlens uintptr, answers uintptr, alens uintptr, asize int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nqueries=%v queries=%v qlens=%v answers=%v alens=%v asize=%v, (%v:)", tls, nqueries, queries, qlens, answers, alens, asize, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var _ /* conf at bp+0 */ Tresolvconf + if X__get_resolv_conf(tls, bp, uintptr(0), uint64(0)) < 0 { + return -int32(1) + } + return X__res_msend_rc(tls, nqueries, queries, qlens, answers, alens, asize, bp) +} + +func X__res_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(544) + defer tls.Free(544) + *(*uintptr)(unsafe.Pointer(bp)) = _msg + *(*int32)(unsafe.Pointer(bp + 8)) = _msglen + *(*uintptr)(unsafe.Pointer(bp + 16)) = _answer + *(*int32)(unsafe.Pointer(bp + 24)) = _anslen + var r, v1, v2 int32 + var _ /* buf at bp+28 */ [512]uint8 + _, _, _ = r, v1, v2 + if *(*int32)(unsafe.Pointer(bp + 24)) < int32(512) { + r = X__res_send(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+28, int32(512)) + if r >= 0 { + if r < *(*int32)(unsafe.Pointer(bp + 24)) { + v1 = r + } else { + v1 = *(*int32)(unsafe.Pointer(bp + 24)) + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), bp+28, uint64(v1)) + } + return r + } + r = X__res_msend(tls, int32(1), bp, bp+8, bp+16, bp+24, *(*int32)(unsafe.Pointer(bp + 24))) + if r < 0 || !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { + v2 = -int32(1) + } else { + v2 = *(*int32)(unsafe.Pointer(bp + 24)) + } + return v2 +} + +func Xres_send(tls *TLS, _msg uintptr, _msglen int32, _answer uintptr, _anslen int32) (r int32) { + if __ccgo_strace { + trc("tls=%v _msg=%v _msglen=%v _answer=%v _anslen=%v, (%v:)", tls, _msg, _msglen, _answer, _anslen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__res_send(tls, _msg, _msglen, _answer, _anslen) +} + +/* This is completely unused, and exists purely to satisfy broken apps. */ + +func X__res_state(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(unsafe.Pointer(&_res1)) +} + +var _res1 t__res_state + +func X__get_resolv_conf(tls *TLS, conf uintptr, search uintptr, search_sz Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v conf=%v search=%v search_sz=%v, (%v:)", tls, conf, search, search_sz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(752) + defer tls.Free(752) + var c, nns, v1, v13, v14, v17, v18, v2, v21, v22, v26, v27, v8, v9 int32 + var f, p uintptr + var l Tsize_t + var x, x1, x2, v5, v6, v7 uint64 + var v11, v20, v24, v4 bool + var _ /* _buf at bp+256 */ [256]uint8 + var _ /* _f at bp+512 */ TFILE + var _ /* line at bp+0 */ [256]uint8 + var _ /* z at bp+744 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, f, l, nns, p, x, x1, x2, v1, v11, v13, v14, v17, v18, v2, v20, v21, v22, v24, v26, v27, v4, v5, v6, v7, v8, v9 + nns = 0 + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(1) + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(5) + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(2) + if search != 0 { + *(*uint8)(unsafe.Pointer(search)) = uint8(0) + } + f = X__fopen_rb_ca(tls, __ccgo_ts+1179, bp+512, bp+256, uint64(256)) + if !(f != 0) { + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + fallthrough + case int32(EACCES): + goto no_resolv_conf + default: + return -int32(1) + } + } + for Xfgets(tls, bp, int32(256), f) != 0 { + if !(Xstrchr(tls, bp, int32('\n')) != 0) && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + for cond := true; cond; cond = c != int32('\n') && c != -int32(1) { + c = Xgetc(tls, f) + } + continue + } + if v4 = !(Xstrncmp(tls, bp, __ccgo_ts+1196, uint64(7)) != 0); v4 { + v1 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(7)]) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + } + if v4 && v2 != 0 { + p = Xstrstr(tls, bp, __ccgo_ts+1204) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 6)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(6) + x = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x > uint64(15) { + v5 = uint64(15) + } else { + v5 = x + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fndots = uint32(v5) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1211) + if p != 0 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 9)))-uint32('0') < uint32(10)) != 0 { + p += uintptr(9) + x1 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x1 > uint64(10) { + v6 = uint64(10) + } else { + v6 = x1 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fattempts = uint32(v6) + } + } + p = Xstrstr(tls, bp, __ccgo_ts+1221) + if p != 0 && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p + 8)))-uint32('0') < uint32(10)) != 0 || int32(*(*uint8)(unsafe.Pointer(p + 8))) == int32('.')) { + p += uintptr(8) + x2 = Xstrtoul(tls, p, bp+744, int32(10)) + if *(*uintptr)(unsafe.Pointer(bp + 744)) != p { + if x2 > uint64(60) { + v7 = uint64(60) + } else { + v7 = x2 + } + (*Tresolvconf)(unsafe.Pointer(conf)).Ftimeout = uint32(v7) + } + } + continue + } + if v11 = !(Xstrncmp(tls, bp, __ccgo_ts+1230, uint64(10)) != 0); v11 { + v8 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(10)]) + v9 = BoolInt32(v8 == int32(' ') || uint32(v8)-uint32('\t') < uint32(5)) + goto _10 + _10: + } + if v11 && v9 != 0 { + if nns >= int32(MAXNS) { + continue + } + p = bp + uintptr(11) + for { + v13 = int32(*(*uint8)(unsafe.Pointer(p))) + v14 = BoolInt32(v13 == int32(' ') || uint32(v13)-uint32('\t') < uint32(5)) + goto _15 + _15: + if !(v14 != 0) { + break + } + goto _12 + _12: + ; + p++ + } + *(*uintptr)(unsafe.Pointer(bp + 744)) = p + for { + if v20 = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) != 0; v20 { + v17 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744))))) + v18 = BoolInt32(v17 == int32(' ') || uint32(v17)-uint32('\t') < uint32(5)) + goto _19 + _19: + } + if !(v20 && !(v18 != 0)) { + break + } + goto _16 + _16: + ; + *(*uintptr)(unsafe.Pointer(bp + 744))++ + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 744)))) = uint8(0) + if X__lookup_ipliteral(tls, conf+uintptr(nns)*28, p, PF_UNSPEC) > 0 { + nns++ + } + continue + } + if !(search != 0) { + continue + } + if v24 = Xstrncmp(tls, bp, __ccgo_ts+1241, uint64(6)) != 0 && Xstrncmp(tls, bp, __ccgo_ts+1248, uint64(6)) != 0; !v24 { + v21 = int32((*(*[256]uint8)(unsafe.Pointer(bp)))[int32(6)]) + v22 = BoolInt32(v21 == int32(' ') || uint32(v21)-uint32('\t') < uint32(5)) + goto _23 + _23: + } + if v24 || !(v22 != 0) { + continue + } + p = bp + uintptr(7) + for { + v26 = int32(*(*uint8)(unsafe.Pointer(p))) + v27 = BoolInt32(v26 == int32(' ') || uint32(v26)-uint32('\t') < uint32(5)) + goto _28 + _28: + if !(v27 != 0) { + break + } + goto _25 + _25: + ; + p++ + } + l = Xstrlen(tls, p) + /* This can never happen anyway with chosen buffer sizes. */ + if l >= search_sz { + continue + } + Xmemcpy(tls, search, p, l+uint64(1)) + } + X__fclose_ca(tls, f) + goto no_resolv_conf +no_resolv_conf: + ; + if !(nns != 0) { + X__lookup_ipliteral(tls, conf, __ccgo_ts+1255, PF_UNSPEC) + nns = int32(1) + } + (*Tresolvconf)(unsafe.Pointer(conf)).Fnns = uint32(nns) + return 0 +} + +func Xsend(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v, (%v:)", tls, fd, buf, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsendto(tls, fd, buf, len1, flags, uintptr(0), uint32(0)) +} + +func Xsendmmsg(tls *TLS, fd int32, msgvec uintptr, vlen uint32, flags uint32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v msgvec=%v vlen=%v flags=%v, (%v:)", tls, fd, msgvec, vlen, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var i, v2 int32 + var r Tssize_t + _, _, _ = i, r, v2 + if vlen > uint32(IOV_MAX) { + vlen = uint32(IOV_MAX) + } /* This matches the kernel. */ + if !(vlen != 0) { + return 0 + } + i = 0 + for { + if !(uint32(i) < vlen) { + break + } + /* As an unfortunate inconsistency, the sendmmsg API uses + * unsigned int for the resulting msg_len, despite sendmsg + * returning ssize_t. However Linux limits the total bytes + * sent by sendmsg to INT_MAX, so the assignment is safe. */ + r = Xsendmsg(tls, fd, msgvec+uintptr(i)*64, int32(flags)) + if r < 0 { + goto error + } + (*(*Tmmsghdr)(unsafe.Pointer(msgvec + uintptr(i)*64))).Fmsg_len = uint32(r) + goto _1 + _1: + ; + i++ + } + goto error +error: + ; + if i != 0 { + v2 = i + } else { + v2 = -int32(1) + } + return v2 + return r1 +} + +func Xsendmsg(tls *TLS, fd int32, msg uintptr, flags int32) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v msg=%v flags=%v, (%v:)", tls, fd, msg, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(1216) + defer tls.Free(1216) + var c1, v3, v4 uintptr + var r, v14 int64 + var v1, v5, v6, v7 int32 + var v10, v11, v12, v13, v8, v9 Tsyscall_arg_t + var _ /* chbuf at bp+152 */ [66]Tcmsghdr + var _ /* h at bp+96 */ Tmsghdr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c1, r, v1, v10, v11, v12, v13, v14, v3, v4, v5, v6, v7, v8, v9 + if msg != 0 { + *(*Tmsghdr)(unsafe.Pointer(bp + 96)) = *(*Tmsghdr)(unsafe.Pointer(msg)) + v1 = Int32FromInt32(0) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad2 = v1 + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).F__pad1 = v1 + msg = bp + 96 + if (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen != 0 { + if uint64((*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen) > uint64(1056) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + Xmemcpy(tls, bp+152, (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_control, uint64((*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_controllen)) + (*(*Tmsghdr)(unsafe.Pointer(bp + 96))).Fmsg_control = bp + 152 + if uint64((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_controllen) >= uint64(16) { + v3 = (*Tmsghdr)(unsafe.Pointer(bp + 96)).Fmsg_control + } else { + v3 = UintptrFromInt32(0) + } + c1 = v3 + for { + if !(c1 != 0) { + break + } + (*Tcmsghdr)(unsafe.Pointer(c1)).F__pad1 = 0 + goto _2 + _2: + ; + if uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len) < uint64(16) || (uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+uint64(8)-uint64(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))+uint64(16) >= uint64(int64((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_control+uintptr((*Tmsghdr)(unsafe.Pointer(bp+96)).Fmsg_controllen))-int64(c1)) { + v4 = uintptr(0) + } else { + v4 = c1 + uintptr((uint64((*Tcmsghdr)(unsafe.Pointer(c1)).Fcmsg_len)+Uint64FromInt64(8)-Uint64FromInt32(1))&uint64(^int64(Uint64FromInt64(8)-Uint64FromInt32(1)))) + } + c1 = v4 + } + } + } + v5 = int32(SYS_sendmsg) + v6 = int32(__SC_sendmsg) + v7 = int32(1) + v8 = int64(fd) + v9 = int64(msg) + v10 = int64(flags) + v11 = int64(Int32FromInt32(0)) + v12 = int64(Int32FromInt32(0)) + v13 = int64(Int32FromInt32(0)) + if v7 != 0 { + r = ___syscall_cp(tls, int64(v5), v8, v9, v10, v11, v12, v13) + } else { + r = X__syscall6(tls, int64(v5), v8, v9, v10, v11, v12, v13) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v14 = r + goto _15 + } + if v7 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v8, + 1: v9, + 2: v10, + 3: v11, + 4: v12, + 5: v13, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v6), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v8, + 1: v9, + 2: v10, + 3: v11, + 4: v12, + 5: v13, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v6), int64(bp+48)) + } + v14 = r + goto _15 +_15: + return X__syscall_ret(tls, uint64(v14)) +} + +func Xsendto(tls *TLS, fd int32, buf uintptr, len1 Tsize_t, flags int32, addr uintptr, alen Tsocklen_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v len1=%v flags=%v addr=%v alen=%v, (%v:)", tls, fd, buf, len1, flags, addr, alen, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_sendto) + v2 = int32(__SC_sendto) + v3 = int32(1) + v4 = int64(fd) + v5 = int64(buf) + v6 = int64(len1) + v7 = int64(flags) + v8 = int64(addr) + v9 = int64(alen) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return X__syscall_ret(tls, uint64(v10)) +} + +func Xendservent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetservent(tls *TLS, stayopen int32) { + if __ccgo_strace { + trc("tls=%v stayopen=%v, (%v:)", tls, stayopen, origin(2)) + } +} + +func Xgetservent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xsetsockopt(tls *TLS, fd int32, level int32, optname int32, optval uintptr, optlen Tsocklen_t) (r2 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v level=%v optname=%v optval=%v optlen=%v, (%v:)", tls, fd, level, optname, optval, optlen, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(304) + defer tls.Free(304) + var r, v10, v22, v33 int64 + var r1, v1, v13, v14, v15, v2, v24, v25, v26, v3 int32 + var s Ttime_t + var tv uintptr + var us Tsuseconds_t + var v12 uint64 + var v16, v17, v18, v19, v20, v21, v27, v28, v29, v30, v31, v32, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, s, tv, us, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_setsockopt) + v2 = int32(__SC_setsockopt) + v3 = 0 + v4 = int64(fd) + v5 = int64(level) + v6 = int64(optname) + v7 = int64(optval) + v8 = int64(optlen) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+256)) + } + v10 = r + goto _11 +_11: + r1 = int32(v10) + if r1 == -int32(ENOPROTOOPT) { + switch level { + case int32(SOL_SOCKET): + switch optname { + case int32(SO_RCVTIMEO): + fallthrough + case int32(SO_SNDTIMEO): + if true { + break + } + if uint64(optlen) < uint64(16) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + tv = optval + s = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + us = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + if !!((uint64(s)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + if optname == int32(SO_RCVTIMEO) { + optname = int32(SO_RCVTIMEO_OLD) + } + if optname == int32(SO_SNDTIMEO) { + optname = int32(SO_SNDTIMEO_OLD) + } + if !((uint64(us)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + v12 = uint64(us) + } else { + v12 = uint64(0x7fffffff) + (0+uint64(us))>>int32(63) + } + *(*[2]int64)(unsafe.Pointer(bp + 96)) = [2]int64{ + 0: s, + 1: int64(int32(v12)), + } + v13 = int32(SYS_setsockopt) + v14 = int32(__SC_setsockopt) + v15 = 0 + v16 = int64(fd) + v17 = int64(level) + v18 = int64(optname) + v19 = int64(bp + 96) + v20 = int64(Uint64FromInt32(2) * Uint64FromInt64(8)) + v21 = int64(Int32FromInt32(0)) + if v15 != 0 { + r = ___syscall_cp(tls, int64(v13), v16, v17, v18, v19, v20, v21) + } else { + r = X__syscall6(tls, int64(v13), v16, v17, v18, v19, v20, v21) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v22 = r + goto _23 + } + if v15 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v14), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v16, + 1: v17, + 2: v18, + 3: v19, + 4: v20, + 5: v21, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v14), int64(bp+256)) + } + v22 = r + goto _23 + _23: + r1 = int32(v22) + case int32(SO_TIMESTAMP): + fallthrough + case int32(SO_TIMESTAMPNS): + if true { + break + } + if optname == int32(SO_TIMESTAMP) { + optname = int32(SO_TIMESTAMP_OLD) + } + if optname == int32(SO_TIMESTAMPNS) { + optname = int32(SO_TIMESTAMPNS_OLD) + } + v24 = int32(SYS_setsockopt) + v25 = int32(__SC_setsockopt) + v26 = 0 + v27 = int64(fd) + v28 = int64(level) + v29 = int64(optname) + v30 = int64(optval) + v31 = int64(optlen) + v32 = int64(Int32FromInt32(0)) + if v26 != 0 { + r = ___syscall_cp(tls, int64(v24), v27, v28, v29, v30, v31, v32) + } else { + r = X__syscall6(tls, int64(v24), v27, v28, v29, v30, v31, v32) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v33 = r + goto _34 + } + if v26 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 208)) = [6]int64{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v25), int64(bp+208), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 256)) = [6]int64{ + 0: v27, + 1: v28, + 2: v29, + 3: v30, + 4: v31, + 5: v32, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v25), int64(bp+256)) + } + v33 = r + goto _34 + _34: + r1 = int32(v33) + break + } + } + } + return int32(X__syscall_ret(tls, uint64(r1))) +} + +func Xshutdown(tls *TLS, fd int32, how int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v how=%v, (%v:)", tls, fd, how, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var r, v10 int64 + var v1, v2, v3 int32 + var v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _ = r, v1, v10, v2, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_shutdown) + v2 = int32(__SC_shutdown) + v3 = 0 + v4 = int64(fd) + v5 = int64(how) + v6 = int64(Int32FromInt32(0)) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 48)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+48)) + } + v10 = r + goto _11 +_11: + return int32(X__syscall_ret(tls, uint64(v10))) +} + +func Xsockatmark(tls *TLS, s int32) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* ret at bp+0 */ int32 + if Xioctl(tls, s, int32(SIOCATMARK), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xsocket(tls *TLS, domain int32, type1 int32, protocol int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v, (%v:)", tls, domain, type1, protocol, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var r, v10, v21 int64 + var s, v1, v12, v13, v14, v2, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, s, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socket) + v2 = int32(__SC_socket) + v3 = 0 + v4 = int64(domain) + v5 = int64(type1) + v6 = int64(protocol) + v7 = int64(Int32FromInt32(0)) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+144)) + } + v10 = r + goto _11 +_11: + s = int32(v10) + if (s == -int32(EINVAL) || s == -int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socket) + v13 = int32(__SC_socket) + v14 = 0 + v15 = int64(domain) + v16 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = int64(protocol) + v18 = int64(Int32FromInt32(0)) + v19 = int64(Int32FromInt32(0)) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+144)) + } + v21 = r + goto _22 + _22: + s = int32(v21) + if s < 0 { + return int32(X__syscall_ret(tls, uint64(s))) + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(s), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return int32(X__syscall_ret(tls, uint64(s))) +} + +func Xsocketpair(tls *TLS, domain int32, type1 int32, protocol int32, fd uintptr) (r2 int32) { + if __ccgo_strace { + trc("tls=%v domain=%v type1=%v protocol=%v fd=%v, (%v:)", tls, domain, type1, protocol, fd, origin(2)) + defer func() { trc("-> %v", r2) }() + } + bp := tls.Alloc(192) + defer tls.Free(192) + var r, v10, v21 int64 + var r1, v1, v12, v13, v14, v2, v3 int32 + var v15, v16, v17, v18, v19, v20, v4, v5, v6, v7, v8, v9 Tsyscall_arg_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = r, r1, v1, v10, v12, v13, v14, v15, v16, v17, v18, v19, v2, v20, v21, v3, v4, v5, v6, v7, v8, v9 + v1 = int32(SYS_socketpair) + v2 = int32(__SC_socketpair) + v3 = 0 + v4 = int64(domain) + v5 = int64(type1) + v6 = int64(protocol) + v7 = int64(fd) + v8 = int64(Int32FromInt32(0)) + v9 = int64(Int32FromInt32(0)) + if v3 != 0 { + r = ___syscall_cp(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } else { + r = X__syscall6(tls, int64(v1), v4, v5, v6, v7, v8, v9) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v10 = r + goto _11 + } + if v3 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v2), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v4, + 1: v5, + 2: v6, + 3: v7, + 4: v8, + 5: v9, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v2), int64(bp+144)) + } + v10 = r + goto _11 +_11: + r1 = int32(X__syscall_ret(tls, uint64(v10))) + if r1 < 0 && (*(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EINVAL) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EPROTONOSUPPORT)) && type1&(Int32FromInt32(SOCK_CLOEXEC)|Int32FromInt32(SOCK_NONBLOCK)) != 0 { + v12 = int32(SYS_socketpair) + v13 = int32(__SC_socketpair) + v14 = 0 + v15 = int64(domain) + v16 = int64(type1 & ^(Int32FromInt32(SOCK_CLOEXEC) | Int32FromInt32(SOCK_NONBLOCK))) + v17 = int64(protocol) + v18 = int64(fd) + v19 = int64(Int32FromInt32(0)) + v20 = int64(Int32FromInt32(0)) + if v14 != 0 { + r = ___syscall_cp(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } else { + r = X__syscall6(tls, int64(v12), v15, v16, v17, v18, v19, v20) + } + if r != int64(-Int32FromInt32(ENOSYS)) { + v21 = r + goto _22 + } + if v14 != 0 { + *(*[6]int64)(unsafe.Pointer(bp + 96)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = ___syscall_cp(tls, int64(SYS_socketcall), int64(v13), int64(bp+96), 0, 0, 0, 0) + } else { + *(*[6]int64)(unsafe.Pointer(bp + 144)) = [6]int64{ + 0: v15, + 1: v16, + 2: v17, + 3: v18, + 4: v19, + 5: v20, + } + r = X__syscall2(tls, int64(SYS_socketcall), int64(v13), int64(bp+144)) + } + v21 = r + goto _22 + _22: + r1 = int32(X__syscall_ret(tls, uint64(v21))) + if r1 < 0 { + return r1 + } + if type1&int32(SOCK_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if type1&int32(SOCK_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + } + return r1 +} + +const SHADOW = "/etc/shadow" + +type Tgroup = struct { + Fgr_name uintptr + Fgr_passwd uintptr + Fgr_gid Tgid_t + Fgr_mem uintptr +} + +type Tspwd = struct { + Fsp_namp uintptr + Fsp_pwdp uintptr + Fsp_lstchg int64 + Fsp_min int64 + Fsp_max int64 + Fsp_warn int64 + Fsp_inact int64 + Fsp_expire int64 + Fsp_flag uint64 +} + +func Xfgetgrent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgrent_a(tls, f, uintptr(unsafe.Pointer(&_gr)), uintptr(unsafe.Pointer(&_line1)), bp+8, uintptr(unsafe.Pointer(&_mem)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +var _line1 uintptr + +var _mem uintptr + +var _gr Tgroup + +func Xfgetpwent(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+8 */ uintptr + var _ /* size at bp+0 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp)) = uint64(0) + X__getpwent_a(tls, f, uintptr(unsafe.Pointer(&_pw)), uintptr(unsafe.Pointer(&_line2)), bp, bp+8) + return *(*uintptr)(unsafe.Pointer(bp + 8)) +} + +var _line2 uintptr + +var _pw Tpasswd + +const GETGRBYGID = 3 +const GETGRBYNAME = 2 +const GETINITGR = 15 +const GETPWBYNAME = 0 +const GETPWBYUID = 1 +const GRFOUND = 1 +const GRGID = 4 +const GRMEMCNT = 5 +const GRNAMELEN = 2 +const GRPASSWDLEN = 3 +const GRVERSION = 0 +const GR_LEN = 6 +const INITGRFOUND = 1 +const INITGRNGRPS = 2 +const INITGRVERSION = 0 +const INITGR_LEN = 3 +const NSCDVERSION = 2 +const PWDIRLEN = 7 +const PWFOUND = 1 +const PWGECOSLEN = 6 +const PWGID = 5 +const PWNAMELEN = 2 +const PWPASSWDLEN = 3 +const PWSHELLLEN = 8 +const PWUID = 4 +const PWVERSION = 0 +const PW_LEN = 9 +const REQKEYLEN = 2 +const REQTYPE = 1 +const REQVERSION = 0 +const REQ_LEN = 3 + +func _itoa1(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getgr_a(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gid=%v gr=%v buf=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, name, gid, gr, buf, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(48) + defer tls.Free(48) + var f, key, ptr, tmp, tmp1 uintptr + var grlist_len, len1 Tsize_t + var i, req, v10 Tint32_t + var rv, v1, v2, v4, v8 int32 + var v5, v6 Tuint32_t + var _ /* cs at bp+0 */ int32 + var _ /* gidbuf at bp+28 */ [11]uint8 + var _ /* groupbuf at bp+4 */ [6]Tint32_t + var _ /* name_len at bp+44 */ Tuint32_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, grlist_len, i, key, len1, ptr, req, rv, tmp, tmp1, v1, v10, v2, v4, v5, v6, v8 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp) + f = Xfopen(tls, __ccgo_ts+1265, __ccgo_ts+404) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getgrent_a(tls, f, gr, buf, size, mem, nmem, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_name) != 0) || !(name != 0) && (*Tgroup)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fgr_gid == gid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = int32(GETGRBYNAME) + } else { + v2 = int32(GETGRBYGID) + } + req = v2 + *(*[6]Tint32_t)(unsafe.Pointer(bp + 4)) = [6]Tint32_t{} + len1 = uint64(0) + grlist_len = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 28)) = [11]uint8{} + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + if name != 0 { + key = name + } else { + if gid < uint32(0) || gid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa1(tls, bp+28, gid) + } + f = X__nscd_query(tls, req, key, bp+4, uint64(24), bp+40) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + if !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] != 0) || !((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) > uint64(0xffffffffffffffff)-uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)] + (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + i = 0 + for { + if !(i < (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]) { + break + } + if Xfread(tls, bp+44, uint64(4), uint64(1), f) < uint64(1) { + if Xferror(tls, f) != 0 { + v4 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v4 = int32(EIO) + } + rv = v4 + goto cleanup_f + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + v5 = *(*Tuint32_t)(unsafe.Pointer(bp + 44)) + v6 = v5>>int32(24) | v5>>int32(8)&uint32(0xff00) | v5< uint64(0xffffffffffffffff)-grlist_len || uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) > uint64(0xffffffffffffffff)-len1 { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + grlist_len += uint64(*(*Tuint32_t)(unsafe.Pointer(bp + 44))) + goto _3 + _3: + ; + i++ + } + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v8 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v8 = int32(EIO) + } + rv = v8 + goto cleanup_f + } + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > *(*Tsize_t)(unsafe.Pointer(nmem)) { + if uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt64(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + tmp1 = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(mem)), uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)]+Int32FromInt32(1))*uint64(8)) + if !(tmp1 != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(mem)) = tmp1 + *(*Tsize_t)(unsafe.Pointer(nmem)) = uint64((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] + int32(1)) + } + if (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = *(*uintptr)(unsafe.Pointer(buf)) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]) + ptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) + i = Int32FromInt32(0) + for { + if !(ptr != *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem))))+uintptr(grlist_len)) { + break + } + if !(*(*uint8)(unsafe.Pointer(ptr)) != 0) { + i++ + v10 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v10)*8)) = ptr + uintptr(1) + } + goto _9 + _9: + ; + ptr++ + } + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(i)*8)) = uintptr(0) + if i != (*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRMEMCNT)] { + rv = int32(EIO) + goto cleanup_f + } + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = (*Tgroup)(unsafe.Pointer(gr)).Fgr_name + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRNAMELEN)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = uint32((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRGID)]) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + if *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd + uintptr((*(*[6]Tint32_t)(unsafe.Pointer(bp + 4)))[int32(GRPASSWDLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name) != 0 || !(name != 0) && gid != (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = gr + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getgr_r(tls *TLS, name uintptr, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(48) + defer tls.Free(48) + var i Tsize_t + var rv int32 + var _ /* cs at bp+32 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + var _ /* mem at bp+16 */ uintptr + var _ /* nmem at bp+24 */ Tsize_t + _, _ = i, rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 24)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+32) + rv = X__getgr_a(tls, name, gid, gr, bp, bp+8, bp+16, bp+24, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8))+(*(*Tsize_t)(unsafe.Pointer(bp + 24))+uint64(1))*uint64(8)+uint64(32) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + buf += uintptr((uint64(16) - uint64(buf)) % uint64(16)) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = buf + buf += uintptr((*(*Tsize_t)(unsafe.Pointer(bp + 24)) + uint64(1)) * uint64(8)) + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = uintptr(int64((*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)) != 0) { + break + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(int64(*(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(i)*8)))-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + goto _1 + _1: + ; + i++ + } + *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) = uintptr(0) + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 32)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrnam_r(tls *TLS, name uintptr, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, name, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, name, uint32(0), gr, buf, size, res) +} + +func Xgetgrgid_r(tls *TLS, gid Tgid_t, gr uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v gr=%v buf=%v size=%v res=%v, (%v:)", tls, gid, gr, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getgr_r(tls, uintptr(0), gid, gr, buf, size, res) +} + +var _f1 uintptr +var _line3 uintptr +var _mem1 uintptr +var _gr1 Tgroup + +func Xsetgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f1 != 0 { + Xfclose(tls, _f1) + } + _f1 = uintptr(0) +} + +func Xgetgrent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + if !(_f1 != 0) { + _f1 = Xfopen(tls, __ccgo_ts+1265, __ccgo_ts+404) + } + if !(_f1 != 0) { + return uintptr(0) + } + X__getgrent_a(tls, _f1, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrgid(tls *TLS, gid Tgid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, uintptr(0), gid, uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetgrnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* nmem at bp+16 */ Tsize_t + var _ /* res at bp+0 */ uintptr + var _ /* size at bp+8 */ Tsize_t + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + *(*Tsize_t)(unsafe.Pointer(bp + 16)) = uint64(0) + X__getgr_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_gr1)), uintptr(unsafe.Pointer(&_line3)), bp+8, uintptr(unsafe.Pointer(&_mem1)), bp+16, bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendgrent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetgrent(tls) +} + +func _atou(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getgrent_a(tls *TLS, f uintptr, gr uintptr, line uintptr, size uintptr, mem uintptr, nmem uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v gr=%v line=%v size=%v mem=%v nmem=%v res=%v, (%v:)", tls, f, gr, line, size, mem, nmem, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i, v13, v14 Tsize_t + var l, v2 Tssize_t + var mems, v12, v4, v5, v6, v7, v8, v9 uintptr + var rv, v3 int32 + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = i, l, mems, rv, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tgroup)(unsafe.Pointer(gr)).Fgr_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid = _atou(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + mems = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + *(*Tsize_t)(unsafe.Pointer(nmem)) = BoolUint64(!!(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + *(*Tsize_t)(unsafe.Pointer(nmem))++ + } + goto _10 + _10: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(mem))) + *(*uintptr)(unsafe.Pointer(mem)) = Xcalloc(tls, uint64(8), *(*Tsize_t)(unsafe.Pointer(nmem))+uint64(1)) + if !(*(*uintptr)(unsafe.Pointer(mem)) != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + gr = uintptr(0) + goto end + } + if *(*uint8)(unsafe.Pointer(mems)) != 0 { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = mems + *(*uintptr)(unsafe.Pointer(bp)) = mems + i = Uint64FromInt32(0) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32(',') { + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + i++ + v13 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v13)*8)) = *(*uintptr)(unsafe.Pointer(bp)) + } + goto _11 + _11: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + i++ + v14 = i + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)) + uintptr(v14)*8)) = uintptr(0) + } else { + *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(mem)))) = uintptr(0) + } + (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem = *(*uintptr)(unsafe.Pointer(mem)) + goto end +end: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = gr + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetgrouplist(tls *TLS, user uintptr, gid Tgid_t, groups uintptr, ngroups uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v user=%v gid=%v groups=%v ngroups=%v, (%v:)", tls, user, gid, groups, ngroups, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var f, nscdbuf, v1, v10, v13 uintptr + var i, n, v12, v9 Tssize_t + var nbytes Tsize_t + var nlim, ret, rv, v6 int32 + var v14 int64 + var v3, v4 Tuint32_t + var _ /* buf at bp+56 */ uintptr + var _ /* gr at bp+0 */ Tgroup + var _ /* mem at bp+64 */ uintptr + var _ /* nmem at bp+72 */ Tsize_t + var _ /* res at bp+32 */ uintptr + var _ /* resp at bp+44 */ [3]Tint32_t + var _ /* size at bp+80 */ Tsize_t + var _ /* swap at bp+40 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = f, i, n, nbytes, nlim, nscdbuf, ret, rv, v1, v10, v12, v13, v14, v3, v4, v6, v9 + ret = -int32(1) + n = int64(1) + *(*int32)(unsafe.Pointer(bp + 40)) = 0 + nscdbuf = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 72)) = uint64(0) + nlim = *(*int32)(unsafe.Pointer(ngroups)) + if nlim >= int32(1) { + v1 = groups + groups += 4 + *(*Tgid_t)(unsafe.Pointer(v1)) = gid + } + f = X__nscd_query(tls, int32(GETINITGR), user, bp+44, uint64(12), bp+40) + if !(f != 0) { + goto cleanup + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRFOUND)] != 0 { + nscdbuf = Xcalloc(tls, uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]), uint64(4)) + if !(nscdbuf != 0) { + goto cleanup + } + nbytes = uint64(4) * uint64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)]) + if nbytes != 0 && !(Xfread(tls, nscdbuf, nbytes, uint64(1), f) != 0) { + if !(Xferror(tls, f) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EIO) + } + goto cleanup + } + if *(*int32)(unsafe.Pointer(bp + 40)) != 0 { + i = 0 + for { + if !(i < int64((*(*[3]Tint32_t)(unsafe.Pointer(bp + 44)))[int32(INITGRNGRPS)])) { + break + } + v3 = *(*Tuint32_t)(unsafe.Pointer(nscdbuf + uintptr(i)*4)) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3< int64(nlim) { + v14 = int64(-int32(1)) + } else { + v14 = n + } + ret = int32(v14) + *(*int32)(unsafe.Pointer(ngroups)) = int32(n) + goto cleanup +cleanup: + ; + if f != 0 { + Xfclose(tls, f) + } + Xfree(tls, nscdbuf) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) + return ret +} + +func _itoa2(tls *TLS, p uintptr, x Tuint32_t) (r uintptr) { + var v1, v2 uintptr + _, _ = v1, v2 + // number of digits in a uint32_t + NUL + p += uintptr(11) + p-- + v1 = p + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + for cond := true; cond; cond = x != 0 { + p-- + v2 = p + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint32('0') + x%uint32(10)) + x /= uint32(10) + } + return p +} + +func X__getpw_a(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var f, key, tmp uintptr + var len1 Tsize_t + var req Tint32_t + var rv, v1, v2, v3 int32 + var _ /* cs at bp+4 */ int32 + var _ /* passwdbuf at bp+8 */ [9]Tint32_t + var _ /* uidbuf at bp+44 */ [11]uint8 + _, _, _, _, _, _, _, _, _ = f, key, len1, req, rv, tmp, v1, v2, v3 + rv = 0 + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+4) + f = Xfopen(tls, __ccgo_ts+1276, __ccgo_ts+404) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + for { + v1 = X__getpwent_a(tls, f, pw, buf, size, res) + rv = v1 + if !(!(v1 != 0) && *(*uintptr)(unsafe.Pointer(res)) != 0) { + break + } + if name != 0 && !(Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_name) != 0) || !(name != 0) && (*Tpasswd)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(res)))).Fpw_uid == uid { + break + } + } + Xfclose(tls, f) + if !(*(*uintptr)(unsafe.Pointer(res)) != 0) && (rv == 0 || rv == int32(ENOENT) || rv == int32(ENOTDIR)) { + if name != 0 { + v2 = GETPWBYNAME + } else { + v2 = int32(GETPWBYUID) + } + req = v2 + *(*[9]Tint32_t)(unsafe.Pointer(bp + 8)) = [9]Tint32_t{} + len1 = uint64(0) + *(*[11]uint8)(unsafe.Pointer(bp + 44)) = [11]uint8{} + if name != 0 { + key = name + } else { + /* uid outside of this range can't be queried with the + * nscd interface, but might happen if uid_t ever + * happens to be a larger type (this is not true as of + * now) + */ + if uid < uint32(0) || uid > uint32(0xffffffff) { + rv = 0 + goto done + } + key = _itoa2(tls, bp+44, uid) + } + *(*[1]int32)(unsafe.Pointer(bp)) = [1]int32{} + f = X__nscd_query(tls, req, key, bp+8, uint64(36), bp) + if !(f != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto done + } + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWFOUND)] != 0) { + rv = 0 + goto cleanup_f + } + /* A zero length response from nscd is invalid. We ignore + * invalid responses and just report an error, rather than + * trying to do something with them. + */ + if !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] != 0) || !((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)] != 0) { + rv = int32(EIO) + goto cleanup_f + } + if uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]|(*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) >= Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(8) { + rv = int32(ENOMEM) + goto cleanup_f + } + len1 = uint64((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)] + (*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]) + if len1 > *(*Tsize_t)(unsafe.Pointer(size)) || !(*(*uintptr)(unsafe.Pointer(buf)) != 0) { + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(buf)), len1) + if !(tmp != 0) { + rv = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(buf)) = tmp + *(*Tsize_t)(unsafe.Pointer(size)) = len1 + } + if !(Xfread(tls, *(*uintptr)(unsafe.Pointer(buf)), len1, uint64(1), f) != 0) { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = int32(EIO) + } + rv = v3 + goto cleanup_f + } + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = *(*uintptr)(unsafe.Pointer(buf)) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWNAMELEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWPASSWDLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGECOSLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWDIRLEN)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWUID)]) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = uint32((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWGID)]) + /* Don't assume that nscd made sure to null terminate strings. + * It's supposed to, but malicious nscd should be ignored + * rather than causing a crash. + */ + if *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir + uintptr(-Int32FromInt32(1)))) != 0 || *(*uint8)(unsafe.Pointer((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell + uintptr((*(*[9]Tint32_t)(unsafe.Pointer(bp + 8)))[int32(PWSHELLLEN)]-int32(1)))) != 0 { + rv = int32(EIO) + goto cleanup_f + } + if name != 0 && Xstrcmp(tls, name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name) != 0 || !(name != 0) && uid != (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid { + rv = int32(EIO) + goto cleanup_f + } + *(*uintptr)(unsafe.Pointer(res)) = pw + goto cleanup_f + cleanup_f: + ; + Xfclose(tls, f) + goto done + } + goto done +done: + ; + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 4)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func _getpw_r(tls *TLS, name uintptr, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var rv int32 + var _ /* cs at bp+16 */ int32 + var _ /* len at bp+8 */ Tsize_t + var _ /* line at bp+0 */ uintptr + _ = rv + *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) + *(*Tsize_t)(unsafe.Pointer(bp + 8)) = uint64(0) + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+16) + rv = X__getpw_a(tls, name, uid, pw, bp, bp+8, res) + if *(*uintptr)(unsafe.Pointer(res)) != 0 && size < *(*Tsize_t)(unsafe.Pointer(bp + 8)) { + *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) + rv = int32(ERANGE) + } + if *(*uintptr)(unsafe.Pointer(res)) != 0 { + Xmemcpy(tls, buf, *(*uintptr)(unsafe.Pointer(bp)), *(*Tsize_t)(unsafe.Pointer(bp + 8))) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_name)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = uintptr(int64((*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)-int64(*(*uintptr)(unsafe.Pointer(bp)))) + buf + } + Xfree(tls, *(*uintptr)(unsafe.Pointer(bp))) + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 16)), uintptr(0)) + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xgetpwnam_r(tls *TLS, name uintptr, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, name, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, name, uint32(0), pw, buf, size, res) +} + +func Xgetpwuid_r(tls *TLS, uid Tuid_t, pw uintptr, buf uintptr, size Tsize_t, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v pw=%v buf=%v size=%v res=%v, (%v:)", tls, uid, pw, buf, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _getpw_r(tls, uintptr(0), uid, pw, buf, size, res) +} + +var _f2 uintptr +var _line4 uintptr +var _pw1 Tpasswd +var _size Tsize_t + +func Xsetpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + if _f2 != 0 { + Xfclose(tls, _f2) + } + _f2 = uintptr(0) +} + +func Xgetpwent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + if !(_f2 != 0) { + _f2 = Xfopen(tls, __ccgo_ts+1276, __ccgo_ts+404) + } + if !(_f2 != 0) { + return uintptr(0) + } + X__getpwent_a(tls, _f2, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwuid(tls *TLS, uid Tuid_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, uintptr(0), uid, uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xgetpwnam(tls *TLS, name uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* res at bp+0 */ uintptr + X__getpw_a(tls, name, uint32(0), uintptr(unsafe.Pointer(&_pw1)), uintptr(unsafe.Pointer(&_line4)), uintptr(unsafe.Pointer(&_size)), bp) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func Xendpwent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xsetpwent(tls) +} + +func _atou1(tls *TLS, s uintptr) (r uint32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(10)*x + uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-Int32FromUint8('0')) + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return x +} + +func X__getpwent_a(tls *TLS, f uintptr, pw uintptr, line uintptr, size uintptr, res uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pw=%v line=%v size=%v res=%v, (%v:)", tls, f, pw, line, size, res, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v2 Tssize_t + var rv, v3 int32 + var v10, v11, v12, v13, v14, v4, v5, v6, v7, v8, v9 uintptr + var _ /* cs at bp+8 */ int32 + var _ /* s at bp+0 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = l, rv, v10, v11, v12, v13, v14, v2, v3, v4, v5, v6, v7, v8, v9 + rv = 0 + _pthread_setcancelstate(tls, int32(PTHREAD_CANCEL_DISABLE), bp+8) + for { + v2 = Xgetline(tls, line, size, f) + l = v2 + if v2 < 0 { + if Xferror(tls, f) != 0 { + v3 = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + v3 = 0 + } + rv = v3 + Xfree(tls, *(*uintptr)(unsafe.Pointer(line))) + *(*uintptr)(unsafe.Pointer(line)) = uintptr(0) + pw = uintptr(0) + break + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(line)) + uintptr(l-int64(1)))) = uint8(0) + *(*uintptr)(unsafe.Pointer(bp)) = *(*uintptr)(unsafe.Pointer(line)) + v4 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name = v4 + v5 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v5 + if !(v5 != 0) { + goto _1 + } + v6 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v6)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd = *(*uintptr)(unsafe.Pointer(bp)) + v7 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v7 + if !(v7 != 0) { + goto _1 + } + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v8)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v9 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v9)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid = _atou1(tls, bp) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32(':') { + goto _1 + } + v10 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v10)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos = *(*uintptr)(unsafe.Pointer(bp)) + v11 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v11 + if !(v11 != 0) { + goto _1 + } + v12 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v12)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir = *(*uintptr)(unsafe.Pointer(bp)) + v13 = Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp)), int32(':')) + *(*uintptr)(unsafe.Pointer(bp)) = v13 + if !(v13 != 0) { + goto _1 + } + v14 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(0) + (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell = *(*uintptr)(unsafe.Pointer(bp)) + break + goto _1 + _1: + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) + *(*uintptr)(unsafe.Pointer(res)) = pw + if rv != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = rv + } + return rv +} + +func Xsetspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xendspent(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xgetspent(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uintptr(0) +} + +func Xlckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xulckpwdf(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +var _addr = struct { + Fsun_family int16 + Fsun_path [21]uint8 +}{ + Fsun_family: int16(PF_LOCAL), + Fsun_path: [21]uint8{'/', 'v', 'a', 'r', '/', 'r', 'u', 'n', '/', 'n', 's', 'c', 'd', '/', 's', 'o', 'c', 'k', 'e', 't'}, +} + +func X__nscd_query(tls *TLS, req Tint32_t, key uintptr, buf uintptr, len1 Tsize_t, swap uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v req=%v key=%v buf=%v len1=%v swap=%v, (%v:)", tls, req, key, buf, len1, swap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var errno_save, fd int32 + var f, v1 uintptr + var i Tsize_t + var v3, v4, v7, v8 Tuint32_t + var _ /* msg at bp+48 */ Tmsghdr + var _ /* req_buf at bp+32 */ [3]Tint32_t + _, _, _, _, _, _, _, _, _ = errno_save, f, fd, i, v1, v3, v4, v7, v8 + f = uintptr(0) + *(*[3]Tint32_t)(unsafe.Pointer(bp + 32)) = [3]Tint32_t{ + 0: int32(NSCDVERSION), + 1: req, + 2: int32(Xstrnlen(tls, key, uint64(LOGIN_NAME_MAX)) + uint64(1)), + } + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: bp + 32, + Fiov_len: uint64(12), + }, + 1: { + Fiov_base: key, + Fiov_len: Xstrlen(tls, key) + uint64(1), + }, + } + *(*Tmsghdr)(unsafe.Pointer(bp + 48)) = Tmsghdr{ + Fmsg_iov: bp, + Fmsg_iovlen: int32(2), + } + errno_save = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + *(*int32)(unsafe.Pointer(swap)) = 0 + goto retry +retry: + ; + Xmemset(tls, buf, 0, len1) + *(*Tint32_t)(unsafe.Pointer(buf)) = int32(NSCDVERSION) + fd = Xsocket(tls, int32(PF_LOCAL), Int32FromInt32(SOCK_STREAM)|Int32FromInt32(SOCK_CLOEXEC), 0) + if fd < 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EAFNOSUPPORT) { + f = Xfopen(tls, __ccgo_ts+1288, __ccgo_ts+1298) + if f != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + } + return f + } + return uintptr(0) + } + v1 = Xfdopen(tls, fd, __ccgo_ts+1301) + f = v1 + if !(v1 != 0) { + Xclose(tls, fd) + return uintptr(0) + } + if (*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[int32(2)] > int32(LOGIN_NAME_MAX) { + return f + } + if Xconnect(tls, fd, uintptr(unsafe.Pointer(&_addr)), uint32(24)) < 0 { + /* If there isn't a running nscd we simulate a "not found" + * result and the caller is responsible for calling + * fclose on the (unconnected) socket. The value of + * errno must be left unchanged in this case. */ + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ECONNREFUSED) || *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = errno_save + return f + } + goto error + } + if Xsendmsg(tls, fd, bp+48, int32(MSG_NOSIGNAL)) < 0 { + goto error + } + if !(Xfread(tls, buf, len1, uint64(1), f) != 0) { + /* If the VERSION entry mismatches nscd will disconnect. The + * most likely cause is that the endianness mismatched. So, we + * byteswap and try once more. (if we already swapped, just + * fail out) + */ + if Xferror(tls, f) != 0 { + goto error + } + if !(*(*int32)(unsafe.Pointer(swap)) != 0) { + Xfclose(tls, f) + i = uint64(0) + for { + if !(i < Uint64FromInt64(12)/Uint64FromInt64(4)) { + break + } + v3 = uint32((*(*[3]Tint32_t)(unsafe.Pointer(bp + 32)))[i]) + v4 = v3>>int32(24) | v3>>int32(8)&uint32(0xff00) | v3<>int32(24) | v7>>int32(8)&uint32(0xff00) | v7< %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i Tsize_t + var r, v1, v3, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = i, r, v1, v3, v4, v5 + Xflockfile(tls, f) + v1 = Xfprintf(tls, f, __ccgo_ts+1303, VaList(bp+8, (*Tgroup)(unsafe.Pointer(gr)).Fgr_name, (*Tgroup)(unsafe.Pointer(gr)).Fgr_passwd, (*Tgroup)(unsafe.Pointer(gr)).Fgr_gid)) + r = v1 + if v1 < 0 { + goto done + } + if (*Tgroup)(unsafe.Pointer(gr)).Fgr_mem != 0 { + i = uint64(0) + for { + if !(*(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)) != 0) { + break + } + if i != 0 { + v4 = __ccgo_ts + 1313 + } else { + v4 = __ccgo_ts + } + v3 = Xfprintf(tls, f, __ccgo_ts+1315, VaList(bp+8, v4, *(*uintptr)(unsafe.Pointer((*Tgroup)(unsafe.Pointer(gr)).Fgr_mem + uintptr(i)*8)))) + r = v3 + if v3 < 0 { + goto done + } + goto _2 + _2: + ; + i++ + } + } + r = Xfputc(tls, int32('\n'), f) + goto done +done: + ; + Xfunlockfile(tls, f) + if r < 0 { + v5 = -int32(1) + } else { + v5 = 0 + } + return v5 +} + +func Xputpwent(tls *TLS, pw uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pw=%v f=%v, (%v:)", tls, pw, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var v1 int32 + _ = v1 + if Xfprintf(tls, f, __ccgo_ts+1320, VaList(bp+8, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_name, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_passwd, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_uid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gid, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_gecos, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_dir, (*Tpasswd)(unsafe.Pointer(pw)).Fpw_shell)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func Xputspent(tls *TLS, sp uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sp=%v f=%v, (%v:)", tls, sp, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var v1, v10, v12, v14, v16, v4, v6, v8 int32 + var v11, v13, v15, v5, v7, v9 int64 + var v17 uint64 + var v2, v3 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = v1, v10, v11, v12, v13, v14, v15, v16, v17, v2, v3, v4, v5, v6, v7, v8, v9 + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp != 0 { + v2 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_namp + } else { + v2 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp != 0 { + v3 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_pwdp + } else { + v3 = __ccgo_ts + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v4 = 0 + } else { + v4 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg == int64(-int32(1)) { + v5 = 0 + } else { + v5 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_lstchg + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v6 = 0 + } else { + v6 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_min == int64(-int32(1)) { + v7 = 0 + } else { + v7 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_min + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v8 = 0 + } else { + v8 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_max == int64(-int32(1)) { + v9 = 0 + } else { + v9 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_max + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v10 = 0 + } else { + v10 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn == int64(-int32(1)) { + v11 = 0 + } else { + v11 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_warn + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v12 = 0 + } else { + v12 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact == int64(-int32(1)) { + v13 = 0 + } else { + v13 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_inact + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v14 = 0 + } else { + v14 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire == int64(-int32(1)) { + v15 = 0 + } else { + v15 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_expire + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v16 = 0 + } else { + v16 = -int32(1) + } + if (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag == uint64(-Int32FromInt32(1)) { + v17 = uint64(0) + } else { + v17 = (*Tspwd)(unsafe.Pointer(sp)).Fsp_flag + } + if Xfprintf(tls, f, __ccgo_ts+1342, VaList(bp+8, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)) < 0 { + v1 = -int32(1) + } else { + v1 = 0 + } + return v1 +} + +func X__rand48_step(tls *TLS, xi uintptr, lc uintptr) (r Tuint64_t) { + if __ccgo_strace { + trc("tls=%v xi=%v lc=%v, (%v:)", tls, xi, lc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, x Tuint64_t + _, _ = a, x + x = uint64(uint32(*(*uint16)(unsafe.Pointer(xi)))|(uint32(*(*uint16)(unsafe.Pointer(xi + 1*2)))+0)<> int32(16)) + *(*uint16)(unsafe.Pointer(xi + 2*2)) = uint16(x >> int32(32)) + return x & uint64(0xffffffffffff) +} + +func Xerand48(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* x at bp+0 */ struct { + Ff [0]float64 + Fu Tuint64_t + } + *(*struct { + Ff [0]float64 + Fu Tuint64_t + })(unsafe.Pointer(bp)) = struct { + Ff [0]float64 + Fu Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp)) = uint64(0x3ff0000000000000) | X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2)< %v", r) }() + } + return Xerand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xlcong48(tls *TLS, p uintptr) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), p, uint64(14)) +} + +func Xnrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> int32(17)) +} + +func Xlrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xnrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +func Xjrand48(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(int32(X__rand48_step(tls, s, uintptr(unsafe.Pointer(&X__seed48))+uintptr(3)*2) >> Int32FromInt32(16))) +} + +func Xmrand48(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xjrand48(tls, uintptr(unsafe.Pointer(&X__seed48))) +} + +var _seed Tuint64_t + +func Xsrand(tls *TLS, s uint32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + } + _seed = uint64(s - uint32(1)) +} + +func Xrand(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + _seed = uint64(6364136223846793005)*_seed + uint64(1) + return int32(_seed >> int32(33)) +} + +func _temper(tls *TLS, x uint32) (r uint32) { + x ^= x >> int32(11) + x ^= x << int32(7) & uint32(0x9D2C5680) + x ^= x << int32(15) & uint32(0xEFC60000) + x ^= x >> int32(18) + return x +} + +func Xrand_r(tls *TLS, seed uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uint32 + _ = v1 + v1 = *(*uint32)(unsafe.Pointer(seed))*Uint32FromInt32(1103515245) + Uint32FromInt32(12345) + *(*uint32)(unsafe.Pointer(seed)) = v1 + return int32(_temper(tls, v1) / uint32(2)) +} + +/* +this code uses the same lagged fibonacci generator as the +original bsd random implementation except for the seeding +which was broken in the original +*/ + +var _init = [32]Tuint32_t{ + 1: uint32(0x5851f42d), + 2: uint32(0xc0b18ccf), + 3: uint32(0xcbb5f646), + 4: uint32(0xc7033129), + 5: uint32(0x30705b04), + 6: uint32(0x20fd5db4), + 7: uint32(0x9a8b7f78), + 8: uint32(0x502959d8), + 9: uint32(0xab894868), + 10: uint32(0x6c0356a7), + 11: uint32(0x88cdb7ff), + 12: uint32(0xb477d43f), + 13: uint32(0x70a3a52b), + 14: uint32(0xa8e4baf1), + 15: uint32(0xfd8341fc), + 16: uint32(0x8ae16fd9), + 17: uint32(0x742d2f7a), + 18: uint32(0x0d1f0796), + 19: uint32(0x76035e09), + 20: uint32(0x40f7702c), + 21: uint32(0x6fa72ca5), + 22: uint32(0xaaa84157), + 23: uint32(0x58a0df74), + 24: uint32(0xc74a0364), + 25: uint32(0xae533cc4), + 26: uint32(0x04185faf), + 27: uint32(0x6de3b115), + 28: uint32(0x0cab8628), + 29: uint32(0xf043bfa4), + 30: uint32(0x398150e9), + 31: uint32(0x37521657), +} + +var _n = int32(31) +var _i = int32(3) +var _j = int32(0) +var _x1 = uintptr(unsafe.Pointer(&_init)) + uintptr(1)*4 +var _lock3 [1]int32 + +func _lcg31(tls *TLS, x Tuint32_t) (r Tuint32_t) { + return (uint32(1103515245)*x + uint32(12345)) & uint32(0x7fffffff) +} + +func _lcg64(tls *TLS, x Tuint64_t) (r Tuint64_t) { + return uint64(6364136223846793005)*x + uint64(1) +} + +func _savestate(tls *TLS) (r uintptr) { + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) = uint32(_n<> int32(16)) + _i = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) >> Int32FromInt32(8) & uint32(0xff)) + _j = int32(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(-Int32FromInt32(1))*4)) & uint32(0xff)) +} + +func ___srandom(tls *TLS, seed uint32) { + var k, v1 int32 + var s Tuint64_t + _, _, _ = k, s, v1 + s = uint64(seed) + if _n == 0 { + *(*Tuint32_t)(unsafe.Pointer(_x1)) = uint32(s) + return + } + if _n == int32(31) || _n == int32(7) { + v1 = int32(3) + } else { + v1 = int32(1) + } + _i = v1 + _j = 0 + k = 0 + for { + if !(k < _n) { + break + } + s = _lcg64(tls, s) + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(k)*4)) = uint32(s >> int32(32)) + goto _2 + _2: + ; + k++ + } + /* make sure x contains at least one odd number */ + *(*Tuint32_t)(unsafe.Pointer(_x1)) |= uint32(1) +} + +func Xsrandom(tls *TLS, seed uint32) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + ___srandom(tls, seed) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) +} + +func Xinitstate(tls *TLS, seed uint32, state uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v seed=%v state=%v size=%v, (%v:)", tls, seed, state, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + if size < uint64(8) { + return uintptr(0) + } + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + if size < uint64(32) { + _n = 0 + } else { + if size < uint64(64) { + _n = int32(7) + } else { + if size < uint64(128) { + _n = int32(15) + } else { + if size < uint64(256) { + _n = int32(31) + } else { + _n = int32(63) + } + } + } + } + _x1 = state + uintptr(1)*4 + ___srandom(tls, seed) + _savestate(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xsetstate(tls *TLS, state uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v state=%v, (%v:)", tls, state, origin(2)) + defer func() { trc("-> %v", r) }() + } + var old uintptr + _ = old + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + old = _savestate(tls) + _loadstate(tls, state) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return old +} + +func Xrandom(tls *TLS) (r int64) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k int64 + var v1 Tuint32_t + var v2, v3 int32 + _, _, _, _ = k, v1, v2, v3 + ___lock(tls, uintptr(unsafe.Pointer(&_lock3))) + if _n == 0 { + v1 = _lcg31(tls, *(*Tuint32_t)(unsafe.Pointer(_x1))) + *(*Tuint32_t)(unsafe.Pointer(_x1)) = v1 + k = int64(v1) + goto end + } + *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) += *(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_j)*4)) + k = int64(*(*Tuint32_t)(unsafe.Pointer(_x1 + uintptr(_i)*4)) >> int32(1)) + _i++ + v2 = _i + if v2 == _n { + _i = 0 + } + _j++ + v3 = _j + if v3 == _n { + _j = 0 + } + goto end +end: + ; + ___unlock(tls, uintptr(unsafe.Pointer(&_lock3))) + return k +} + +func Xseed48(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemcpy(tls, uintptr(unsafe.Pointer(&_p1)), uintptr(unsafe.Pointer(&X__seed48)), uint64(6)) + Xmemcpy(tls, uintptr(unsafe.Pointer(&X__seed48)), s, uint64(6)) + return uintptr(unsafe.Pointer(&_p1)) +} + +var _p1 [3]uint16 + +func Xsrand48(tls *TLS, seed int64) { + if __ccgo_strace { + trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*[3]uint16)(unsafe.Pointer(bp)) = [3]uint16{ + 0: uint16(0x330e), + 1: uint16(seed), + 2: uint16(seed >> int32(16)), + } + Xseed48(tls, bp) +} + +func Xexecl(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecv(tls, path, argv) + return r +} + +func Xexecle(tls *TLS, path uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv0=%v va=%v, (%v:)", tls, path, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv, envp uintptr + var v2 t__predefined_size_t + _, _, _, _, _, _ = ap, argc, argv, envp, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i <= argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + envp = VaUintptr(&ap) + _ = ap + return Xexecve(tls, path, argv, envp) + return r +} + +func Xexeclp(tls *TLS, file uintptr, argv0 uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv0=%v va=%v, (%v:)", tls, file, argv0, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var argc, i int32 + var argv uintptr + var v2 t__predefined_size_t + _, _, _, _, _ = ap, argc, argv, i, v2 + defer func() { Xrealloc(tls, argv, 0) }() + ap = va + argc = int32(1) + for { + if !(VaUintptr(&ap) != 0) { + break + } + goto _1 + _1: + ; + argc++ + } + _ = ap + v2 = uint64(argc+int32(1)) * 8 + argv = Xrealloc(tls, argv, v2) + ap = va + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), 0*8)) = argv0 + i = int32(1) + for { + if !(i < argc) { + break + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = VaUintptr(&ap) + goto _3 + _3: + ; + i++ + } + *(*uintptr)(unsafe.Add(unsafe.Pointer(argv), i*8)) = UintptrFromInt32(0) + _ = ap + return Xexecvp(tls, file, argv) + return r +} + +func Xexecv(tls *TLS, path uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v, (%v:)", tls, path, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xexecve(tls, path, argv, Xenviron) +} + +func Xexecve(tls *TLS, path uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v argv=%v envp=%v, (%v:)", tls, path, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* do we need to use environ if envp is null? */ + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_execve), int64(path), int64(argv), int64(envp))))) +} + +func X__execvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var b, p, path, z, v3, v4 uintptr + var k, l Tsize_t + var seen_eacces int32 + var v2 t__predefined_size_t + _, _, _, _, _, _, _, _, _, _ = b, k, l, p, path, seen_eacces, z, v2, v3, v4 + defer func() { Xrealloc(tls, b, 0) }() + path = Xgetenv(tls, __ccgo_ts+1391) + seen_eacces = 0 + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + if !(*(*uint8)(unsafe.Pointer(file)) != 0) { + return -int32(1) + } + if Xstrchr(tls, file, int32('/')) != 0 { + return Xexecve(tls, file, argv, envp) + } + if !(path != 0) { + path = __ccgo_ts + 1396 + } + k = Xstrnlen(tls, file, uint64(Int32FromInt32(NAME_MAX)+Int32FromInt32(1))) + if k > uint64(NAME_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return -int32(1) + } + l = Xstrnlen(tls, path, uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(1))) + uint64(1) + p = path + for { + v2 = l + k + uint64(1) + b = Xrealloc(tls, b, v2) + z = X__strchrnul(tls, p, int32(':')) + if uint64(int64(z)-int64(p)) >= l { + v3 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v3)) != 0) { + break + } + goto _1 + } + Xmemcpy(tls, b, p, uint64(int64(z)-int64(p))) + *(*uint8)(unsafe.Add(unsafe.Pointer(b), int64(z)-int64(p))) = uint8('/') + Xmemcpy(tls, b+uintptr(int64(z)-int64(p))+BoolUintptr(z > p), file, k+uint64(1)) + Xexecve(tls, b, argv, envp) + switch *(*int32)(unsafe.Pointer(X__errno_location(tls))) { + case int32(EACCES): + seen_eacces = int32(1) + fallthrough + case int32(ENOENT): + fallthrough + case int32(ENOTDIR): + default: + return -int32(1) + } + v4 = z + z++ + if !(*(*uint8)(unsafe.Pointer(v4)) != 0) { + break + } + goto _1 + _1: + ; + p = z + } + if seen_eacces != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EACCES) + } + return -int32(1) +} + +func Xexecvp(tls *TLS, file uintptr, argv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v, (%v:)", tls, file, argv, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, Xenviron) +} + +func Xexecvpe(tls *TLS, file uintptr, argv uintptr, envp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v file=%v argv=%v envp=%v, (%v:)", tls, file, argv, envp, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__execvpe(tls, file, argv, envp) +} + +func Xfexecve(tls *TLS, fd int32, argv uintptr, envp uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v argv=%v envp=%v, (%v:)", tls, fd, argv, envp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = r + r = int32(X__syscall5(tls, int64(SYS_execveat), int64(fd), int64(__ccgo_ts), int64(argv), int64(envp), int64(Int32FromInt32(AT_EMPTY_PATH)))) + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + X__procfdname(tls, bp, uint32(fd)) + Xexecve(tls, bp, argv, envp) + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOENT) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + } + return -int32(1) +} + +var _dummy_lockptr = uintptr(0) + +var _atfork_locks = [10]uintptr{ + 0: uintptr(unsafe.Pointer(&X__at_quick_exit_lockptr)), + 1: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 2: uintptr(unsafe.Pointer(&X__gettext_lockptr)), + 3: uintptr(unsafe.Pointer(&X__locale_lockptr)), + 4: uintptr(unsafe.Pointer(&X__random_lockptr)), + 5: uintptr(unsafe.Pointer(&_dummy_lockptr)), + 6: uintptr(unsafe.Pointer(&X__stdio_ofl_lockptr)), + 7: uintptr(unsafe.Pointer(&X__syslog_lockptr)), + 8: uintptr(unsafe.Pointer(&X__timezone_lockptr)), + 9: uintptr(unsafe.Pointer(&_dummy_lockptr)), +} + +func _dummy8(tls *TLS, x int32) { +} + +func _dummy_0(tls *TLS) { +} + +const FDOP_CHDIR = 4 +const FDOP_CLOSE = 1 +const FDOP_DUP2 = 2 +const FDOP_FCHDIR = 5 +const FDOP_OPEN = 3 +const POSIX_SPAWN_RESETIDS = 1 +const POSIX_SPAWN_SETPGROUP = 2 +const POSIX_SPAWN_SETSCHEDPARAM = 16 +const POSIX_SPAWN_SETSCHEDULER = 32 +const POSIX_SPAWN_SETSID = 128 +const POSIX_SPAWN_SETSIGDEF = 4 +const POSIX_SPAWN_SETSIGMASK = 8 +const POSIX_SPAWN_USEVFORK = 64 + +type Tposix_spawnattr_t = struct { + F__flags int32 + F__pgrp Tpid_t + F__def Tsigset_t + F__mask Tsigset_t + F__prio int32 + F__pol int32 + F__fn uintptr + F__pad [56]uint8 +} + +type Tposix_spawn_file_actions_t = struct { + F__pad0 [2]int32 + F__actions uintptr + F__pad [16]int32 +} + +type Tfdop = struct { + Fnext uintptr + Fprev uintptr + Fcmd int32 + Ffd int32 + Fsrcfd int32 + Foflag int32 + Fmode Tmode_t +} + +func Xposix_spawn_file_actions_addchdir_np(tls *TLS, fa uintptr, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v path=%v, (%v:)", tls, fa, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = -int32(1) + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addclose(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_CLOSE) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_adddup2(tls *TLS, fa uintptr, srcfd int32, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v srcfd=%v fd=%v, (%v:)", tls, fa, srcfd, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if srcfd < 0 || fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_DUP2) + (*Tfdop)(unsafe.Pointer(op)).Fsrcfd = srcfd + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addfchdir_np(tls *TLS, fa uintptr, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v, (%v:)", tls, fa, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_FCHDIR) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_addopen(tls *TLS, fa uintptr, fd int32, path uintptr, flags int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v fd=%v path=%v flags=%v mode=%v, (%v:)", tls, fa, fd, path, flags, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var op, v1 uintptr + _, _ = op, v1 + if fd < 0 { + return int32(EBADF) + } + op = Xmalloc(tls, uint64(40)+Xstrlen(tls, path)+uint64(1)) + if !(op != 0) { + return int32(ENOMEM) + } + (*Tfdop)(unsafe.Pointer(op)).Fcmd = int32(FDOP_OPEN) + (*Tfdop)(unsafe.Pointer(op)).Ffd = fd + (*Tfdop)(unsafe.Pointer(op)).Foflag = flags + (*Tfdop)(unsafe.Pointer(op)).Fmode = mode + Xstrcpy(tls, op+36, path) + v1 = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + (*Tfdop)(unsafe.Pointer(op)).Fnext = v1 + if v1 != 0 { + (*Tfdop)(unsafe.Pointer((*Tfdop)(unsafe.Pointer(op)).Fnext)).Fprev = op + } + (*Tfdop)(unsafe.Pointer(op)).Fprev = uintptr(0) + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = op + return 0 +} + +func Xposix_spawn_file_actions_destroy(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + var next, op uintptr + _, _ = next, op + op = (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions + for op != 0 { + next = (*Tfdop)(unsafe.Pointer(op)).Fnext + Xfree(tls, op) + op = next + } + return 0 +} + +func Xposix_spawn_file_actions_init(tls *TLS, fa uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fa=%v, (%v:)", tls, fa, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawn_file_actions_t)(unsafe.Pointer(fa)).F__actions = uintptr(0) + return 0 +} + +func Xposix_spawnattr_destroy(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func Xposix_spawnattr_getflags(tls *TLS, attr uintptr, flags uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*int16)(unsafe.Pointer(flags)) = int16((*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags) + return 0 +} + +func Xposix_spawnattr_getpgroup(tls *TLS, attr uintptr, pgrp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tpid_t)(unsafe.Pointer(pgrp)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp + return 0 +} + +func Xposix_spawnattr_getsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(def)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def + return 0 +} + +func Xposix_spawnattr_getsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tsigset_t)(unsafe.Pointer(mask)) = (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask + return 0 +} + +func Xposix_spawnattr_init(tls *TLS, attr uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v, (%v:)", tls, attr, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tposix_spawnattr_t)(unsafe.Pointer(attr)) = Tposix_spawnattr_t{} + return 0 +} + +func Xposix_spawnattr_getschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedparam(tls *TLS, attr uintptr, schedparam uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v schedparam=%v, (%v:)", tls, attr, schedparam, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_getschedpolicy(tls *TLS, attr uintptr, policy uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setschedpolicy(tls *TLS, attr uintptr, policy int32) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v policy=%v, (%v:)", tls, attr, policy, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(ENOSYS) +} + +func Xposix_spawnattr_setflags(tls *TLS, attr uintptr, flags int16) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v flags=%v, (%v:)", tls, attr, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + var all_flags uint32 + _ = all_flags + all_flags = uint32(Int32FromInt32(POSIX_SPAWN_RESETIDS) | Int32FromInt32(POSIX_SPAWN_SETPGROUP) | Int32FromInt32(POSIX_SPAWN_SETSIGDEF) | Int32FromInt32(POSIX_SPAWN_SETSIGMASK) | Int32FromInt32(POSIX_SPAWN_SETSCHEDPARAM) | Int32FromInt32(POSIX_SPAWN_SETSCHEDULER) | Int32FromInt32(POSIX_SPAWN_USEVFORK) | Int32FromInt32(POSIX_SPAWN_SETSID)) + if uint32(flags) & ^all_flags != 0 { + return int32(EINVAL) + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__flags = int32(flags) + return 0 +} + +func Xposix_spawnattr_setpgroup(tls *TLS, attr uintptr, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v pgrp=%v, (%v:)", tls, attr, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__pgrp = pgrp + return 0 +} + +func Xposix_spawnattr_setsigdefault(tls *TLS, attr uintptr, def uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v def=%v, (%v:)", tls, attr, def, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__def = *(*Tsigset_t)(unsafe.Pointer(def)) + return 0 +} + +func Xposix_spawnattr_setsigmask(tls *TLS, attr uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v attr=%v mask=%v, (%v:)", tls, attr, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*Tposix_spawnattr_t)(unsafe.Pointer(attr)).F__mask = *(*Tsigset_t)(unsafe.Pointer(mask)) + return 0 +} + +func Xvfork(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* vfork syscall cannot be made from C code */ + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_fork))))) +} + +func Xwait(tls *TLS, status uintptr) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwaitpid(tls, -Int32FromInt32(1), status, 0) +} + +func Xwaitid(tls *TLS, type1 Tidtype_t, id Tid_t, info uintptr, options int32) (r int32) { + if __ccgo_strace { + trc("tls=%v type1=%v id=%v info=%v options=%v, (%v:)", tls, type1, id, info, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_waitid), int64(type1), int64(id), int64(info), int64(options), int64(Int32FromInt32(0)), 0)))) +} + +func Xwaitpid(tls *TLS, pid Tpid_t, status uintptr, options int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v status=%v options=%v, (%v:)", tls, pid, status, options, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_wait4), int64(pid), int64(status), int64(options), int64(Int32FromInt32(0)), 0, 0)))) +} + +const BRACKET = -3 +const END = 0 +const FNM_CASEFOLD = 16 +const FNM_FILE_NAME = 1 +const FNM_LEADING_DIR = 8 +const FNM_NOESCAPE = 2 +const FNM_NOMATCH = 1 +const FNM_NOSYS = -1 +const FNM_PATHNAME = 1 +const FNM_PERIOD = 4 +const QUESTION = -4 +const STAR = -5 +const UNMATCHABLE = -2 + +func _str_next(tls *TLS, str uintptr, n Tsize_t, step uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k int32 + var _ /* wc at bp+0 */ Twchar_t + _ = k + if !(n != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return 0 + } + if uint32(*(*uint8)(unsafe.Pointer(str))) >= uint32(128) { + k = Xmbtowc(tls, bp, str, n) + if k < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return -int32(1) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32(*(*uint8)(unsafe.Pointer(str))) +} + +func _pat_next(tls *TLS, pat uintptr, m Tsize_t, step uintptr, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var esc, k1, z int32 + var k Tsize_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _ = esc, k, k1, z + esc = 0 + if !(m != 0) || !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return END + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('\\') && *(*uint8)(unsafe.Pointer(pat + 1)) != 0 && !(flags&Int32FromInt32(FNM_NOESCAPE) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(2) + pat++ + esc = int32(1) + goto escaped + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('[') { + k = uint64(1) + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('!') { + k++ + } + } + if k < m { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32(']') { + k++ + } + } + for { + if !(k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + break + } + if k+uint64(1) < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1)))) != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) == int32('=')) { + z = int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k+uint64(1))))) + k += uint64(2) + if k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 { + k++ + } + for k < m && *(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0 && (int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k-uint64(1))))) != z || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(k)))) != int32(']')) { + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + break + } + } + goto _1 + _1: + ; + k++ + } + if k == m || !(*(*uint8)(unsafe.Pointer(pat + uintptr(k))) != 0) { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(1) + return int32('[') + } + *(*Tsize_t)(unsafe.Pointer(step)) = k + uint64(1) + return -int32(3) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('*') { + return -int32(5) + } + if int32(*(*uint8)(unsafe.Pointer(pat))) == int32('?') { + return -int32(4) + } + goto escaped +escaped: + ; + if uint32(*(*uint8)(unsafe.Pointer(pat))) >= uint32(128) { + k1 = Xmbtowc(tls, bp, pat, m) + if k1 < 0 { + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(0) + return -int32(2) + } + *(*Tsize_t)(unsafe.Pointer(step)) = uint64(k1 + esc) + return *(*Twchar_t)(unsafe.Pointer(bp)) + } + return int32(*(*uint8)(unsafe.Pointer(pat))) +} + +func _casefold(tls *TLS, k int32) (r int32) { + var c int32 + var v1 uint32 + _, _ = c, v1 + c = int32(Xtowupper(tls, uint32(k))) + if c == k { + v1 = Xtowlower(tls, uint32(k)) + } else { + v1 = uint32(c) + } + return int32(v1) +} + +func _match_bracket(tls *TLS, p uintptr, k int32, kfold int32) (r int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + var inv, l, l1, z int32 + var p0 uintptr + var _ /* buf at bp+8 */ [16]uint8 + var _ /* wc at bp+0 */ Twchar_t + var _ /* wc2 at bp+4 */ Twchar_t + _, _, _, _, _ = inv, l, l1, p0, z + inv = 0 + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('^') || int32(*(*uint8)(unsafe.Pointer(p))) == int32('!') { + inv = int32(1) + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + if k == int32(']') { + return BoolInt32(!(inv != 0)) + } + p++ + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + if k == int32('-') { + return BoolInt32(!(inv != 0)) + } + p++ + } + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + l = Xmbtowc(tls, bp+4, p+uintptr(1), uint64(4)) + if l < 0 { + return 0 + } + if *(*Twchar_t)(unsafe.Pointer(bp)) <= *(*Twchar_t)(unsafe.Pointer(bp + 4)) { + if uint32(k)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) || uint32(kfold)-uint32(*(*Twchar_t)(unsafe.Pointer(bp))) <= uint32(*(*Twchar_t)(unsafe.Pointer(bp + 4))-*(*Twchar_t)(unsafe.Pointer(bp))) { + return BoolInt32(!(inv != 0)) + } + } + p += uintptr(l - int32(1)) + goto _1 + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('[') && (int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32(':') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('.') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('=')) { + p0 = p + uintptr(2) + z = int32(*(*uint8)(unsafe.Pointer(p + 1))) + p += uintptr(3) + for int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) != z || int32(*(*uint8)(unsafe.Pointer(p))) != int32(']') { + p++ + } + if z == int32(':') && int64(p-uintptr(1))-int64(p0) < int64(16) { + Xmemcpy(tls, bp+8, p0, uint64(int64(p-uintptr(1))-int64(p0))) + (*(*[16]uint8)(unsafe.Pointer(bp + 8)))[int64(p-uintptr(1))-int64(p0)] = uint8(0) + if Xiswctype(tls, uint32(k), Xwctype(tls, bp+8)) != 0 || Xiswctype(tls, uint32(kfold), Xwctype(tls, bp+8)) != 0 { + return BoolInt32(!(inv != 0)) + } + } + goto _1 + } + if uint32(*(*uint8)(unsafe.Pointer(p))) < uint32(128) { + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(*(*uint8)(unsafe.Pointer(p))) + } else { + l1 = Xmbtowc(tls, bp, p, uint64(4)) + if l1 < 0 { + return 0 + } + p += uintptr(l1 - int32(1)) + } + if *(*Twchar_t)(unsafe.Pointer(bp)) == k || *(*Twchar_t)(unsafe.Pointer(bp)) == kfold { + return BoolInt32(!(inv != 0)) + } + goto _1 + _1: + ; + p++ + } + return inv +} + +func _fnmatch_internal(tls *TLS, pat uintptr, m Tsize_t, str uintptr, n Tsize_t, flags int32) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, k, kfold, v12, v13, v15, v2, v3, v4, v8 int32 + var endpat, endstr, p, ptail, s, stail, v10, v6 uintptr + var tailcnt Tsize_t + var v9 bool + var _ /* pinc at bp+0 */ Tsize_t + var _ /* sinc at bp+8 */ Tsize_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, endpat, endstr, k, kfold, p, ptail, s, stail, tailcnt, v10, v12, v13, v15, v2, v3, v4, v6, v8, v9 + tailcnt = uint64(0) + if flags&int32(FNM_PERIOD) != 0 { + if int32(*(*uint8)(unsafe.Pointer(str))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(pat))) != int32('.') { + return int32(FNM_NOMATCH) + } + } + for { + v2 = _pat_next(tls, pat, m, bp, flags) + c = v2 + switch v2 { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + pat++ + m-- + default: + k = _str_next(tls, str, n, bp+8) + if k <= 0 { + if c == END { + v3 = 0 + } else { + v3 = int32(FNM_NOMATCH) + } + return v3 + } + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + n -= *(*Tsize_t)(unsafe.Pointer(bp + 8)) + if flags&int32(FNM_CASEFOLD) != 0 { + v4 = _casefold(tls, k) + } else { + v4 = k + } + kfold = v4 + if c == -int32(3) { + if !(_match_bracket(tls, pat, k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + pat += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + m -= *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + } + break + goto _1 + _1: + } + /* Compute real pat length if it was initially unknown/-1 */ + m = Xstrnlen(tls, pat, m) + endpat = pat + uintptr(m) + /* Find the last * in pat and count chars needed after it */ + v6 = pat + ptail = v6 + p = v6 + for { + if !(p < endpat) { + break + } + switch _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) { + case -int32(2): + return int32(FNM_NOMATCH) + case -int32(5): + tailcnt = uint64(0) + ptail = p + uintptr(1) + default: + tailcnt++ + break + } + goto _5 + _5: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + /* Past this point we need not check for UNMATCHABLE in pat, + * because all of pat has already been parsed once. */ + /* Compute real str length if it was initially unknown/-1 */ + n = Xstrnlen(tls, str, n) + endstr = str + uintptr(n) + if n < tailcnt { + return int32(FNM_NOMATCH) + } + /* Find the final tailcnt chars of str, accounting for UTF-8. + * On illegal sequences we may get it wrong, but in that case + * we necessarily have a matching failure anyway. */ + s = endstr + for { + if !(s > str && tailcnt != 0) { + break + } + if v9 = uint32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) < uint32(128); !v9 { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v8 = int32(4) + } else { + v8 = int32(1) + } + } + if v9 || v8 == int32(1) { + s-- + } else { + for { + s-- + v10 = s + if !(uint32(*(*uint8)(unsafe.Pointer(v10)))-uint32(0x80) < uint32(0x40) && s > str) { + break + } + } + } + goto _7 + _7: + ; + tailcnt-- + } + if tailcnt != 0 { + return int32(FNM_NOMATCH) + } + stail = s + /* Check that the pat and str tails match */ + p = ptail + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + v12 = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + k = v12 + if v12 <= 0 { + if c != END { + return int32(FNM_NOMATCH) + } + break + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + if flags&int32(FNM_CASEFOLD) != 0 { + v13 = _casefold(tls, k) + } else { + v13 = k + } + kfold = v13 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + return int32(FNM_NOMATCH) + } + } else { + if c != -int32(4) && k != c && kfold != c { + return int32(FNM_NOMATCH) + } + } + goto _11 + _11: + } + /* We're all done with the tails now, so throw them out */ + endstr = stail + endpat = ptail + /* Match pattern components until there are none left */ + for pat < endpat { + p = pat + s = str + for { + c = _pat_next(tls, p, uint64(int64(endpat)-int64(p)), bp, flags) + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + /* Encountering * completes/commits a component */ + if c == -int32(5) { + pat = p + str = s + break + } + k = _str_next(tls, s, uint64(int64(endstr)-int64(s)), bp+8) + if !(k != 0) { + return int32(FNM_NOMATCH) + } + if flags&int32(FNM_CASEFOLD) != 0 { + v15 = _casefold(tls, k) + } else { + v15 = k + } + kfold = v15 + if c == -int32(3) { + if !(_match_bracket(tls, p-uintptr(*(*Tsize_t)(unsafe.Pointer(bp))), k, kfold) != 0) { + break + } + } else { + if c != -int32(4) && k != c && kfold != c { + break + } + } + s += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + goto _14 + _14: + } + if c == -int32(5) { + continue + } + /* If we failed, advance str, by 1 char if it's a valid + * char, or past all invalid bytes otherwise. */ + k = _str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) + if k > 0 { + str += uintptr(*(*Tsize_t)(unsafe.Pointer(bp + 8))) + } else { + str++ + for { + if !(_str_next(tls, str, uint64(int64(endstr)-int64(str)), bp+8) < 0) { + break + } + goto _16 + _16: + ; + str++ + } + } + } + return 0 +} + +func Xfnmatch(tls *TLS, pat uintptr, str uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v str=%v flags=%v, (%v:)", tls, pat, str, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var c, v4 int32 + var p, s uintptr + var _ /* inc at bp+0 */ Tsize_t + _, _, _, _ = c, p, s, v4 + if flags&int32(FNM_PATHNAME) != 0 { + for { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != int32('/')) { + break + } + goto _2 + _2: + ; + s++ + } + p = pat + for { + v4 = _pat_next(tls, p, uint64(-Int32FromInt32(1)), bp, flags) + c = v4 + if !(v4 != END && c != int32('/')) { + break + } + goto _3 + _3: + ; + p += uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + } + if c != int32(*(*uint8)(unsafe.Pointer(s))) && (!(*(*uint8)(unsafe.Pointer(s)) != 0) || !(flags&Int32FromInt32(FNM_LEADING_DIR) != 0)) { + return int32(FNM_NOMATCH) + } + if _fnmatch_internal(tls, pat, uint64(int64(p)-int64(pat)), str, uint64(int64(s)-int64(str)), flags) != 0 { + return int32(FNM_NOMATCH) + } + if !(c != 0) { + return 0 + } + str = s + uintptr(1) + pat = p + uintptr(*(*Tsize_t)(unsafe.Pointer(bp))) + goto _1 + _1: + } + } else { + if flags&int32(FNM_LEADING_DIR) != 0 { + s = str + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('/') { + goto _5 + } + if !(_fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(int64(s)-int64(str)), flags) != 0) { + return 0 + } + goto _5 + _5: + ; + s++ + } + } + } + return _fnmatch_internal(tls, pat, uint64(-Int32FromInt32(1)), str, uint64(-Int32FromInt32(1)), flags) +} + +const GLOB_ABORTED = 2 +const GLOB_APPEND = 32 +const GLOB_DOOFFS = 8 +const GLOB_ERR = 1 +const GLOB_MARK = 2 +const GLOB_NOCHECK = 16 +const GLOB_NOESCAPE = 64 +const GLOB_NOMATCH = 3 +const GLOB_NOSORT = 4 +const GLOB_NOSPACE = 1 +const GLOB_NOSYS = 4 +const GLOB_PERIOD = 128 +const GLOB_TILDE = 4096 +const GLOB_TILDE_CHECK = 16384 + +type Tglob_t = struct { + Fgl_pathc Tsize_t + Fgl_pathv uintptr + Fgl_offs Tsize_t + F__dummy1 int32 + F__dummy2 [5]uintptr +} + +type Tmatch = struct { + Fnext uintptr +} + +func _append(tls *TLS, tail uintptr, name uintptr, len1 Tsize_t, mark int32) (r int32) { + var new1 uintptr + _ = new1 + new1 = Xmalloc(tls, uint64(8)+len1+uint64(2)) + if !(new1 != 0) { + return -int32(1) + } + (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(tail)))).Fnext = new1 + (*Tmatch)(unsafe.Pointer(new1)).Fnext = UintptrFromInt32(0) + Xmemcpy(tls, new1+8, name, len1+uint64(1)) + if mark != 0 && len1 != 0 && int32(*(*uint8)(unsafe.Pointer(name + uintptr(len1-uint64(1))))) != int32('/') { + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1))) = uint8('/') + *(*uint8)(unsafe.Pointer(new1 + 8 + uintptr(len1+uint64(1)))) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(tail)) = new1 + return 0 +} + +func _do_glob(tls *TLS, buf uintptr, pos Tsize_t, type1 int32, pat uintptr, flags int32, errfunc uintptr, tail uintptr) (r1 int32) { + bp := tls.Alloc(144) + defer tls.Free(144) + var de, dir, p, p2, v11, v2, v7, v8 uintptr + var fnm_flags, in_bracket, old_errno, overflow, r, readerr, v10, v9 int32 + var i, j, v4, v5 Tptrdiff_t + var l, v1 Tsize_t + var saved_sep uint8 + var _ /* st at bp+0 */ Tstat + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = de, dir, fnm_flags, i, in_bracket, j, l, old_errno, overflow, p, p2, r, readerr, saved_sep, v1, v10, v11, v2, v4, v5, v7, v8, v9 + /* If GLOB_MARK is unused, we don't care about type. */ + if !(type1 != 0) && !(flags&Int32FromInt32(GLOB_MARK) != 0) { + type1 = int32(DT_REG) + } + /* Special-case the remaining pattern being all slashes, in + * which case we can use caller-passed type if it's a dir. */ + if *(*uint8)(unsafe.Pointer(pat)) != 0 && type1 != int32(DT_DIR) { + type1 = 0 + } + for pos+uint64(1) < uint64(PATH_MAX) && int32(*(*uint8)(unsafe.Pointer(pat))) == int32('/') { + v1 = pos + pos++ + v2 = pat + pat++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + } + /* Consume maximal [escaped-]literal prefix of pattern, copying + * and un-escaping it to the running buffer as we go. */ + i = 0 + j = 0 + in_bracket = 0 + overflow = 0 + for { + if !(int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('*') && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32('?') && (!(in_bracket != 0) || int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) != int32(']'))) { + break + } + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i))) != 0) { + if overflow != 0 { + return 0 + } + pat += uintptr(i) + pos += uint64(j) + v4 = Int64FromInt32(0) + j = v4 + i = v4 + break + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('[') { + in_bracket = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('\\') && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + /* Backslashes inside a bracket are (at least by + * our interpretation) non-special, so if next + * char is ']' we have a complete expression. */ + if in_bracket != 0 && int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1))))) == int32(']') { + break + } + /* Unpaired final backslash never matches. */ + if !(*(*uint8)(unsafe.Pointer(pat + uintptr(i+int64(1)))) != 0) { + return 0 + } + i++ + } + } + } + if int32(*(*uint8)(unsafe.Pointer(pat + uintptr(i)))) == int32('/') { + if overflow != 0 { + return 0 + } + in_bracket = 0 + pat += uintptr(i + int64(1)) + i = int64(-int32(1)) + pos += uint64(j + int64(1)) + j = int64(-int32(1)) + } + /* Only store a character if it fits in the buffer, but if + * a potential bracket expression is open, the overflow + * must be remembered and handled later only if the bracket + * is unterminated (and thereby a literal), so as not to + * disallow long bracket expressions with short matches. */ + if pos+uint64(j+Int64FromInt32(1)) < uint64(PATH_MAX) { + v5 = j + j++ + *(*uint8)(unsafe.Pointer(buf + uintptr(pos+uint64(v5)))) = *(*uint8)(unsafe.Pointer(pat + uintptr(i))) + } else { + if in_bracket != 0 { + overflow = int32(1) + } else { + return 0 + } + } + /* If we consume any new components, the caller-passed type + * or dummy type from above is no longer valid. */ + type1 = 0 + goto _3 + _3: + ; + i++ + } + *(*uint8)(unsafe.Pointer(buf + uintptr(pos))) = uint8(0) + if !(*(*uint8)(unsafe.Pointer(pat)) != 0) { + if flags&int32(GLOB_MARK) != 0 && (!(type1 != 0) || type1 == int32(DT_LNK)) && !(Xstat(tls, buf, bp) != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFDIR) { + type1 = int32(DT_DIR) + } else { + type1 = int32(DT_REG) + } + } + if !(type1 != 0) && Xlstat(tls, buf, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + return 0 + } + if _append(tls, tail, buf, pos, BoolInt32(flags&int32(GLOB_MARK) != 0 && type1 == int32(DT_DIR))) != 0 { + return int32(GLOB_NOSPACE) + } + return 0 + } + p2 = Xstrchr(tls, pat, int32('/')) + saved_sep = uint8('/') + /* Check if the '/' was escaped and, if so, remove the escape char + * so that it will not be unpaired when passed to fnmatch. */ + if p2 != 0 && !(flags&Int32FromInt32(GLOB_NOESCAPE) != 0) { + p = p2 + for { + if !(p > pat && int32(*(*uint8)(unsafe.Pointer(p + uintptr(-Int32FromInt32(1))))) == int32('\\')) { + break + } + goto _6 + _6: + ; + p-- + } + if (int64(p2)-int64(p))%int64(2) != 0 { + p2-- + saved_sep = uint8('\\') + } + } + if pos != 0 { + v7 = buf + } else { + v7 = __ccgo_ts + 598 + } + dir = Xopendir(tls, v7) + if !(dir != 0) { + if (*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0 { + return int32(GLOB_ABORTED) + } + return 0 + } + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + for { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = 0 + v8 = Xreaddir(tls, dir) + de = v8 + if !(v8 != 0) { + break + } + /* Quickly skip non-directories when there's pattern left. */ + if p2 != 0 && (*Tdirent)(unsafe.Pointer(de)).Fd_type != 0 && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_DIR) && int32((*Tdirent)(unsafe.Pointer(de)).Fd_type) != int32(DT_LNK) { + continue + } + l = Xstrlen(tls, de+19) + if l >= uint64(PATH_MAX)-pos { + continue + } + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = uint8(0) + } + if flags&int32(GLOB_NOESCAPE) != 0 { + v9 = int32(FNM_NOESCAPE) + } else { + v9 = 0 + } + if !(flags&Int32FromInt32(GLOB_PERIOD) != 0) { + v10 = int32(FNM_PERIOD) + } else { + v10 = 0 + } + fnm_flags = v9 | v10 + if Xfnmatch(tls, pat, de+19, fnm_flags) != 0 { + continue + } + /* With GLOB_PERIOD, don't allow matching . or .. unless + * fnmatch would match them with FNM_PERIOD rules in effect. */ + if p2 != 0 && flags&int32(GLOB_PERIOD) != 0 && int32(*(*uint8)(unsafe.Pointer(de + 19))) == int32('.') && (!(*(*uint8)(unsafe.Pointer(de + 19 + 1)) != 0) || int32(*(*uint8)(unsafe.Pointer(de + 19 + 1))) == int32('.') && !(*(*uint8)(unsafe.Pointer(de + 19 + 2)) != 0)) && Xfnmatch(tls, pat, de+19, fnm_flags|int32(FNM_PERIOD)) != 0 { + continue + } + Xmemcpy(tls, buf+uintptr(pos), de+19, l+uint64(1)) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + if p2 != 0 { + v11 = p2 + } else { + v11 = __ccgo_ts + } + r = _do_glob(tls, buf, pos+l, int32((*Tdirent)(unsafe.Pointer(de)).Fd_type), v11, flags, errfunc, tail) + if r != 0 { + Xclosedir(tls, dir) + return r + } + } + readerr = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if p2 != 0 { + *(*uint8)(unsafe.Pointer(p2)) = saved_sep + } + Xclosedir(tls, dir) + if readerr != 0 && ((*(*func(*TLS, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{errfunc})))(tls, buf, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) != 0 || flags&int32(GLOB_ERR) != 0) { + return int32(GLOB_ABORTED) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + return 0 +} + +func _ignore_err(tls *TLS, path uintptr, err int32) (r int32) { + return 0 +} + +func _freelist(tls *TLS, head uintptr) { + var match, next uintptr + _, _ = match, next + match = (*Tmatch)(unsafe.Pointer(head)).Fnext + for { + if !(match != 0) { + break + } + next = (*Tmatch)(unsafe.Pointer(match)).Fnext + Xfree(tls, match) + goto _1 + _1: + ; + match = next + } +} + +func _sort(tls *TLS, a uintptr, b uintptr) (r int32) { + return Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(a)), *(*uintptr)(unsafe.Pointer(b))) +} + +func _expand_tilde(tls *TLS, pat uintptr, buf uintptr, pos uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var delim, v1, v12 uint8 + var home, name_end, p, v11, v2, v3 uintptr + var i, v10, v13 Tsize_t + var v4 int32 + var _ /* pw at bp+0 */ Tpasswd + var _ /* res at bp+48 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _ = delim, home, i, name_end, p, v1, v10, v11, v12, v13, v2, v3, v4 + p = *(*uintptr)(unsafe.Pointer(pat)) + uintptr(1) + i = uint64(0) + name_end = X__strchrnul(tls, p, int32('/')) + v1 = *(*uint8)(unsafe.Pointer(name_end)) + delim = v1 + if v1 != 0 { + v2 = name_end + name_end++ + *(*uint8)(unsafe.Pointer(v2)) = uint8(0) + } + *(*uintptr)(unsafe.Pointer(pat)) = name_end + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v3 = UintptrFromInt32(0) + } else { + v3 = Xgetenv(tls, __ccgo_ts+1425) + } + home = v3 + if !(home != 0) { + if *(*uint8)(unsafe.Pointer(p)) != 0 { + v4 = Xgetpwnam_r(tls, p, bp, buf, uint64(PATH_MAX), bp+48) + } else { + v4 = Xgetpwuid_r(tls, Xgetuid(tls), bp, buf, uint64(PATH_MAX), bp+48) + } + switch v4 { + case int32(ENOMEM): + goto _5 + default: + goto _6 + case 0: + goto _7 + } + goto _8 + _5: + ; + return int32(GLOB_NOSPACE) + _7: + ; + if !!(*(*uintptr)(unsafe.Pointer(bp + 48)) != 0) { + goto _9 + } + _6: + ; + return int32(GLOB_NOMATCH) + _9: + ; + _8: + ; + home = (*(*Tpasswd)(unsafe.Pointer(bp))).Fpw_dir + } + for i < uint64(Int32FromInt32(PATH_MAX)-Int32FromInt32(2)) && *(*uint8)(unsafe.Pointer(home)) != 0 { + v10 = i + i++ + v11 = home + home++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v10))) = *(*uint8)(unsafe.Pointer(v11)) + } + if *(*uint8)(unsafe.Pointer(home)) != 0 { + return int32(GLOB_NOMATCH) + } + v12 = delim + *(*uint8)(unsafe.Pointer(buf + uintptr(i))) = v12 + if v12 != 0 { + i++ + v13 = i + *(*uint8)(unsafe.Pointer(buf + uintptr(v13))) = uint8(0) + } + *(*Tsize_t)(unsafe.Pointer(pos)) = i + return 0 +} + +func Xglob(tls *TLS, pat uintptr, flags int32, errfunc uintptr, g uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pat=%v flags=%v errfunc=%v g=%v, (%v:)", tls, pat, flags, errfunc, g, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(4128) + defer tls.Free(4128) + var cnt, i, offs Tsize_t + var error1 int32 + var p, pathv uintptr + var v1 uint64 + var _ /* buf at bp+16 */ [4096]uint8 + var _ /* head at bp+0 */ Tmatch + var _ /* pos at bp+4112 */ Tsize_t + var _ /* s at bp+4120 */ uintptr + var _ /* tail at bp+8 */ uintptr + _, _, _, _, _, _, _ = cnt, error1, i, offs, p, pathv, v1 + *(*Tmatch)(unsafe.Pointer(bp)) = struct { + Fnext uintptr + }{} + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if flags&int32(GLOB_DOOFFS) != 0 { + v1 = (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs + } else { + v1 = uint64(0) + } + offs = v1 + error1 = 0 + if !(errfunc != 0) { + errfunc = __ccgo_fp(_ignore_err) + } + if !(flags&Int32FromInt32(GLOB_APPEND) != 0) { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_offs = offs + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) + } + if *(*uint8)(unsafe.Pointer(pat)) != 0 { + p = Xstrdup(tls, pat) + if !(p != 0) { + return int32(GLOB_NOSPACE) + } + (*(*[4096]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + *(*Tsize_t)(unsafe.Pointer(bp + 4112)) = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 4120)) = p + if flags&(Int32FromInt32(GLOB_TILDE)|Int32FromInt32(GLOB_TILDE_CHECK)) != 0 && int32(*(*uint8)(unsafe.Pointer(p))) == int32('~') { + error1 = _expand_tilde(tls, bp+4120, bp+16, bp+4112) + } + if !(error1 != 0) { + error1 = _do_glob(tls, bp+16, *(*Tsize_t)(unsafe.Pointer(bp + 4112)), 0, *(*uintptr)(unsafe.Pointer(bp + 4120)), flags, errfunc, bp+8) + } + Xfree(tls, p) + } + if error1 == int32(GLOB_NOSPACE) { + _freelist(tls, bp) + return error1 + } + cnt = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(*(*uintptr)(unsafe.Pointer(bp + 8)) != 0) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + cnt++ + } + if !(cnt != 0) { + if flags&int32(GLOB_NOCHECK) != 0 { + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + if _append(tls, bp+8, pat, Xstrlen(tls, pat), 0) != 0 { + return int32(GLOB_NOSPACE) + } + cnt++ + } else { + if !(error1 != 0) { + return int32(GLOB_NOMATCH) + } + } + } + if flags&int32(GLOB_APPEND) != 0 { + pathv = Xrealloc(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv, (offs+(*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc+cnt+uint64(1))*uint64(8)) + if !(pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = pathv + offs += (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc + } else { + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = Xmalloc(tls, (offs+cnt+uint64(1))*uint64(8)) + if !((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv != 0) { + _freelist(tls, bp) + return int32(GLOB_NOSPACE) + } + i = uint64(0) + for { + if !(i < offs) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(i)*8)) = UintptrFromInt32(0) + goto _3 + _3: + ; + i++ + } + } + i = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*(*Tmatch)(unsafe.Pointer(bp))).Fnext + for { + if !(i < cnt) { + break + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = *(*uintptr)(unsafe.Pointer(bp + 8)) + 8 + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) = (*Tmatch)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))).Fnext + i++ + } + *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr(offs+i)*8)) = UintptrFromInt32(0) + *(*Tsize_t)(unsafe.Pointer(g)) += cnt + if !(flags&Int32FromInt32(GLOB_NOSORT) != 0) { + Xqsort(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv+uintptr(offs)*8, cnt, uint64(8), __ccgo_fp(_sort)) + } + return error1 +} + +func Xglobfree(tls *TLS, g uintptr) { + if __ccgo_strace { + trc("tls=%v g=%v, (%v:)", tls, g, origin(2)) + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc) { + break + } + Xfree(tls, *(*uintptr)(unsafe.Pointer((*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv + uintptr((*Tglob_t)(unsafe.Pointer(g)).Fgl_offs+i)*8))-uintptr(uint64(UintptrFromInt32(0)+8))) + goto _1 + _1: + ; + i++ + } + Xfree(tls, (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathc = uint64(0) + (*Tglob_t)(unsafe.Pointer(g)).Fgl_pathv = UintptrFromInt32(0) +} + +const ASSERTION = -2 +const ASSERT_AT_BOL = 1 +const ASSERT_AT_BOW = 16 +const ASSERT_AT_EOL = 2 +const ASSERT_AT_EOW = 32 +const ASSERT_AT_WB = 64 +const ASSERT_AT_WB_NEG = 128 +const ASSERT_BACKREF = 256 +const ASSERT_CHAR_CLASS = 4 +const ASSERT_CHAR_CLASS_NEG = 8 +const ASSERT_LAST = 256 +const BACKREF = -4 +const COPY_MAXIMIZE_FIRST_TAG = 2 +const COPY_REMOVE_TAGS = 1 +const EMPTY1 = -1 +const MAX_NEG_CLASSES = 64 +const REG_BADBR = 10 +const REG_BADPAT = 2 +const REG_BADRPT = 13 +const REG_EBRACE = 9 +const REG_EBRACK = 7 +const REG_ECOLLATE = 3 +const REG_ECTYPE = 4 +const REG_EESCAPE = 5 +const REG_ENOSYS = -1 +const REG_EPAREN = 8 +const REG_ERANGE = 11 +const REG_ESPACE = 12 +const REG_ESUBREG = 6 +const REG_EXTENDED = 1 +const REG_ICASE = 2 +const REG_NEWLINE = 4 +const REG_NOMATCH = 1 +const REG_NOSUB = 8 +const REG_NOTBOL = 1 +const REG_NOTEOL = 2 +const REG_OK = 0 +const TAG = -3 +const TRE_CHAR_MAX = 1114111 +const TRE_MEM_BLOCK_SIZE = 1024 +const TRE_REGEX_T_FIELD = 0 +const tre_ctype = 0 +const tre_isalnum = 0 +const tre_isalpha = 0 +const tre_isblank = 0 +const tre_iscntrl = 0 +const tre_isctype = 0 +const tre_isdigit = 0 +const tre_isgraph = 0 +const tre_islower = 0 +const tre_isprint = 0 +const tre_ispunct = 0 +const tre_isspace = 0 +const tre_isupper = 0 +const tre_isxdigit = 0 +const tre_mem_alloc_impl = 0 +const tre_mem_destroy = 0 +const tre_mem_new_impl = 0 +const tre_strlen = 0 +const tre_tolower = 0 +const tre_toupper = 0 +const xcalloc = 0 +const xfree = 0 +const xmalloc = 0 +const xrealloc = 0 + +type Tregoff_t = int64 + +type Tregex_t = struct { + Fre_nsub Tsize_t + F__opaque uintptr + F__padding [4]uintptr + F__nsub2 Tsize_t + F__padding2 uint8 +} + +type Tre_pattern_buffer = Tregex_t + +type Tregmatch_t = struct { + Frm_so Tregoff_t + Frm_eo Tregoff_t +} + +type Treg_errcode_t = int32 + +type Ttre_char_t = int32 + +type Ttre_cint_t = uint32 + +type Ttre_ctype_t = uint64 + +type Ttre_tnfa_transition_t = struct { + Fcode_min Ttre_cint_t + Fcode_max Ttre_cint_t + Fstate uintptr + Fstate_id int32 + Ftags uintptr + Fassertions int32 + Fu struct { + Fbackref [0]int32 + Fclass Ttre_ctype_t + } + Fneg_classes uintptr +} + +type Ttnfa_transition = Ttre_tnfa_transition_t + +type Ttre_tag_direction_t = int32 + +const _TRE_TAG_MINIMIZE = 0 +const _TRE_TAG_MAXIMIZE = 1 + +type Ttre_submatch_data = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_submatch_data_t = struct { + Fso_tag int32 + Feo_tag int32 + Fparents uintptr +} + +type Ttre_tnfa_t = struct { + Ftransitions uintptr + Fnum_transitions uint32 + Finitial uintptr + Ffinal uintptr + Fsubmatch_data uintptr + Ffirstpos_chars uintptr + Ffirst_char int32 + Fnum_submatches uint32 + Ftag_directions uintptr + Fminimal_tags uintptr + Fnum_tags int32 + Fnum_minimals int32 + Fend_tag int32 + Fnum_states int32 + Fcflags int32 + Fhave_backrefs int32 + Fhave_approx int32 +} + +type Ttnfa = Ttre_tnfa_t + +type Ttre_list_t = struct { + Fdata uintptr + Fnext uintptr +} + +type Ttre_list = Ttre_list_t + +type Ttre_mem_t = uintptr + +type Ttre_mem_struct = struct { + Fblocks uintptr + Fcurrent uintptr + Fptr uintptr + Fn Tsize_t + Ffailed int32 + Fprovided uintptr +} + +/*********************************************************************** + from tre-compile.h +***********************************************************************/ + +type Ttre_pos_and_tags_t = struct { + Fposition int32 + Fcode_min int32 + Fcode_max int32 + Ftags uintptr + Fassertions int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr + Fbackref int32 +} + +/*********************************************************************** + from tre-ast.c and tre-ast.h +***********************************************************************/ + +// C documentation +// +// /* The different AST node types. */ +type Ttre_ast_type_t = int32 + +const _LITERAL = 0 +const _CATENATION = 1 +const _ITERATION = 2 +const _UNION = 3 + +/* Special subtypes of TRE_LITERAL. */ + +// C documentation +// +// /* A generic AST node. All AST nodes consist of this node on the top +// level with `obj' pointing to the actual content. */ +type Ttre_ast_node_t = struct { + Ftype1 Ttre_ast_type_t + Fobj uintptr + Fnullable int32 + Fsubmatch_id int32 + Fnum_submatches int32 + Fnum_tags int32 + Ffirstpos uintptr + Flastpos uintptr +} + +// C documentation +// +// /* A "literal" node. These are created for assertions, back references, +// tags, matching parameter settings, and all expressions that match one +// character. */ +type Ttre_literal_t = struct { + Fcode_min int64 + Fcode_max int64 + Fposition int32 + Fclass Ttre_ctype_t + Fneg_classes uintptr +} + +// C documentation +// +// /* A "catenation" node. These are created when two regexps are concatenated. +// If there are more than one subexpressions in sequence, the `left' part +// holds all but the last, and `right' part holds the last subexpression +// (catenation is left associative). */ +type Ttre_catenation_t = struct { + Fleft uintptr + Fright uintptr +} + +// C documentation +// +// /* An "iteration" node. These are created for the "*", "+", "?", and "{m,n}" +// operators. */ +type Ttre_iteration_t = struct { + Farg uintptr + Fmin int32 + Fmax int32 + F__ccgo16 uint8 +} + +// C documentation +// +// /* An "union" node. These are created for the "|" operator. */ +type Ttre_union_t = struct { + Fleft uintptr + Fright uintptr +} + +func _tre_ast_new_node(tls *TLS, mem Ttre_mem_t, type1 int32, obj uintptr) (r uintptr) { + var node uintptr + _ = node + node = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(48)) + if !(node != 0) || !(obj != 0) { + return uintptr(0) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = obj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = type1 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = -int32(1) + return node +} + +func _tre_ast_new_literal(tls *TLS, mem Ttre_mem_t, code_min int32, code_max int32, position int32) (r uintptr) { + var lit, node uintptr + _, _ = lit, node + lit = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(40)) + node = _tre_ast_new_node(tls, mem, int32(_LITERAL), lit) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(code_min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(code_max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = position + return node +} + +func _tre_ast_new_iter(tls *TLS, mem Ttre_mem_t, arg uintptr, min int32, max int32, minimal int32) (r uintptr) { + var iter, node uintptr + _, _ = iter, node + iter = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(24)) + node = _tre_ast_new_node(tls, mem, int32(_ITERATION), iter) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg = arg + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin = min + (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax = max + SetBitFieldPtr8Uint32(iter+16, uint32(minimal), 0, 0x1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(arg)).Fnum_submatches + return node +} + +func _tre_ast_new_union(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var node, un uintptr + _, _ = node, un + if !(left != 0) { + return right + } + un = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_UNION), un) + if !(node != 0) || !(right != 0) { + return uintptr(0) + } + (*Ttre_union_t)(unsafe.Pointer(un)).Fleft = left + (*Ttre_union_t)(unsafe.Pointer(un)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +func _tre_ast_new_catenation(tls *TLS, mem Ttre_mem_t, left uintptr, right uintptr) (r uintptr) { + var cat, node uintptr + _, _ = cat, node + if !(left != 0) { + return right + } + cat = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(16)) + node = _tre_ast_new_node(tls, mem, int32(_CATENATION), cat) + if !(node != 0) { + return uintptr(0) + } + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft = left + (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright = right + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_submatches + (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_submatches + return node +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_t = struct { + Fsize int32 + Fmax_size int32 + Fincrement int32 + Fptr int32 + Fstack uintptr +} + +/*********************************************************************** + from tre-stack.c and tre-stack.h +***********************************************************************/ + +type Ttre_stack_rec = Ttre_stack_t + +/* Just to save some typing. */ + +type Ttre_stack_item = struct { + Fint_value [0]int32 + Fvoidptr_value uintptr +} + +func _tre_stack_new(tls *TLS, size int32, max_size int32, increment int32) (r uintptr) { + var s uintptr + _ = s + s = Xmalloc(tls, uint64(24)) + if s != UintptrFromInt32(0) { + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = Xmalloc(tls, uint64(8)*uint64(size)) + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack == UintptrFromInt32(0) { + Xfree(tls, s) + return UintptrFromInt32(0) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size = max_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement = increment + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr = 0 + } + return s +} + +func _tre_stack_destroy(tls *TLS, s uintptr) { + Xfree(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack) + Xfree(tls, s) +} + +func _tre_stack_num_objects(tls *TLS, s uintptr) (r int32) { + return (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr +} + +func _tre_stack_push(tls *TLS, s uintptr, value Ttre_stack_item) (r Treg_errcode_t) { + var new_buffer uintptr + var new_size int32 + _, _ = new_buffer, new_size + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr < (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize { + *(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr((*Ttre_stack_t)(unsafe.Pointer(s)).Fptr)*8)) = value + (*Ttre_stack_t)(unsafe.Pointer(s)).Fptr++ + } else { + if (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize >= (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + return int32(REG_ESPACE) + } else { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize + (*Ttre_stack_t)(unsafe.Pointer(s)).Fincrement + if new_size > (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size { + new_size = (*Ttre_stack_t)(unsafe.Pointer(s)).Fmax_size + } + new_buffer = Xrealloc(tls, (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack, uint64(8)*uint64(new_size)) + if new_buffer == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_stack_t)(unsafe.Pointer(s)).Fsize = new_size + (*Ttre_stack_t)(unsafe.Pointer(s)).Fstack = new_buffer + _tre_stack_push(tls, s, value) + } + } + return REG_OK +} + +func _tre_stack_push_int(tls *TLS, s uintptr, value int32) (r Treg_errcode_t) { + var item Ttre_stack_item + _ = item + *(*int32)(unsafe.Pointer(&item)) = value + return _tre_stack_push(tls, s, item) +} + +func _tre_stack_push_voidptr(tls *TLS, s uintptr, value uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* item at bp+0 */ Ttre_stack_item + *(*uintptr)(unsafe.Pointer(bp)) = value + return _tre_stack_push(tls, s, *(*Ttre_stack_item)(unsafe.Pointer(bp))) +} + +func _tre_stack_pop_int(tls *TLS, s uintptr) (r int32) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*int32)(unsafe.Pointer(&*(*Ttre_stack_item)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)))) +} + +func _tre_stack_pop_voidptr(tls *TLS, s uintptr) (r uintptr) { + var v1 int32 + var v2 uintptr + _, _ = v1, v2 + v2 = s + 12 + *(*int32)(unsafe.Pointer(v2))-- + v1 = *(*int32)(unsafe.Pointer(v2)) + return *(*uintptr)(unsafe.Pointer((*Ttre_stack_t)(unsafe.Pointer(s)).Fstack + uintptr(v1)*8)) +} + +/*********************************************************************** + from tre-parse.c and tre-parse.h +***********************************************************************/ + +// C documentation +// +// /* Parse context. */ +type Ttre_parse_ctx_t = struct { + Fmem Ttre_mem_t + Fstack uintptr + Fn uintptr + Fs uintptr + Fstart uintptr + Fsubmatch_id int32 + Fposition int32 + Fmax_backref int32 + Fcflags int32 +} + +// C documentation +// +// /* Some macros for expanding \w, \s, etc. */ +var _tre_macros = [13]struct { + Fc uint8 + Fexpansion uintptr +}{ + 0: { + Fc: uint8('t'), + Fexpansion: __ccgo_ts + 1430, + }, + 1: { + Fc: uint8('n'), + Fexpansion: __ccgo_ts + 390, + }, + 2: { + Fc: uint8('r'), + Fexpansion: __ccgo_ts + 1432, + }, + 3: { + Fc: uint8('f'), + Fexpansion: __ccgo_ts + 1434, + }, + 4: { + Fc: uint8('a'), + Fexpansion: __ccgo_ts + 1436, + }, + 5: { + Fc: uint8('e'), + Fexpansion: __ccgo_ts + 1438, + }, + 6: { + Fc: uint8('w'), + Fexpansion: __ccgo_ts + 1440, + }, + 7: { + Fc: uint8('W'), + Fexpansion: __ccgo_ts + 1453, + }, + 8: { + Fc: uint8('s'), + Fexpansion: __ccgo_ts + 1467, + }, + 9: { + Fc: uint8('S'), + Fexpansion: __ccgo_ts + 1479, + }, + 10: { + Fc: uint8('d'), + Fexpansion: __ccgo_ts + 1492, + }, + 11: { + Fc: uint8('D'), + Fexpansion: __ccgo_ts + 1504, + }, + 12: {}, +} + +// C documentation +// +// /* Expands a macro delimited by `regex' and `regex_end' to `buf', which +// must have at least `len' items. Sets buf[0] to zero if the there +// is no match in `tre_macros'. */ +func _tre_expand_macro(tls *TLS, s uintptr) (r uintptr) { + var i int32 + _ = i + i = 0 + for { + if !(_tre_macros[i].Fc != 0 && int32(_tre_macros[i].Fc) != int32(*(*uint8)(unsafe.Pointer(s)))) { + break + } + goto _1 + _1: + ; + i++ + } + return _tre_macros[i].Fexpansion +} + +func _tre_compare_lit(tls *TLS, a uintptr, b uintptr) (r int32) { + var la, lb uintptr + _, _ = la, lb + la = a + lb = b + /* assumes the range of valid code_min is < INT_MAX */ + return int32((*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(la)))).Fcode_min - (*Ttre_literal_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(lb)))).Fcode_min) +} + +type Tliterals = struct { + Fmem Ttre_mem_t + Fa uintptr + Flen1 int32 + Fcap1 int32 +} + +func _tre_new_lit(tls *TLS, p uintptr) (r uintptr) { + var a, v2 uintptr + var v1 int32 + _, _, _ = a, v1, v2 + if (*Tliterals)(unsafe.Pointer(p)).Flen1 >= (*Tliterals)(unsafe.Pointer(p)).Fcap1 { + if (*Tliterals)(unsafe.Pointer(p)).Fcap1 >= Int32FromInt32(1)< max { + return int32(REG_ERANGE) + } + s += uintptr(len1) + } + } + if class != 0 && (*Tneg)(unsafe.Pointer(neg)).Fnegate != 0 { + if (*Tneg)(unsafe.Pointer(neg)).Flen1 >= int32(MAX_NEG_CLASSES) { + return int32(REG_ESPACE) + } + v6 = neg + 4 + v5 = *(*int32)(unsafe.Pointer(v6)) + *(*int32)(unsafe.Pointer(v6))++ + *(*Ttre_ctype_t)(unsafe.Pointer(neg + 8 + uintptr(v5)*8)) = class + } else { + lit = _tre_new_lit(tls, ls) + if !(lit != 0) { + return int32(REG_ESPACE) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(min) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(max) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass = class + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* Add opposite-case codepoints if REG_ICASE is present. + It seems that POSIX requires that bracket negation + should happen before case-folding, but most practical + implementations do it the other way around. Changing + the order would need efficient representation of + case-fold ranges and bracket range sets even with + simple patterns so this is ok for now. */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && !(class != 0) { + if _add_icase_literals(tls, ls, min, max) != 0 { + return int32(REG_ESPACE) + } + } + } + goto _1 + _1: + } + return r +} + +func _parse_bracket(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(544) + defer tls.Free(544) + var err Treg_errcode_t + var i, max, min, negmax, negmin, v1, v3 int32 + var lit, n, nc, node uintptr + var _ /* ls at bp+0 */ Tliterals + var _ /* neg at bp+24 */ Tneg + _, _, _, _, _, _, _, _, _, _, _, _ = err, i, lit, max, min, n, nc, negmax, negmin, node, v1, v3 + node = uintptr(0) + nc = uintptr(0) + (*(*Tliterals)(unsafe.Pointer(bp))).Fmem = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem + (*(*Tliterals)(unsafe.Pointer(bp))).Flen1 = 0 + (*(*Tliterals)(unsafe.Pointer(bp))).Fcap1 = int32(32) + (*(*Tliterals)(unsafe.Pointer(bp))).Fa = Xmalloc(tls, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Fcap1)*uint64(8)) + if !((*(*Tliterals)(unsafe.Pointer(bp))).Fa != 0) { + return int32(REG_ESPACE) + } + (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 = 0 + (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate = BoolInt32(int32(*(*uint8)(unsafe.Pointer(s))) == int32('^')) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + s++ + } + err = _parse_bracket_terms(tls, ctx, s, bp, bp+24) + if err != REG_OK { + goto parse_bracket_done + } + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + /* + * With REG_NEWLINE, POSIX requires that newlines are not matched by + * any form of a non-matching list. + */ + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64('\n') + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + } + /* Sort the array if we need to negate it. */ + Xqsort(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa, uint64((*(*Tliterals)(unsafe.Pointer(bp))).Flen1), uint64(8), __ccgo_fp(_tre_compare_lit)) + /* extra lit for the last negated range */ + lit = _tre_new_lit(tls, bp) + if !(lit != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(Int32FromInt32(TRE_CHAR_MAX) + Int32FromInt32(1)) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = -int32(1) + /* negated classes */ + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1 != 0 { + nc = X__tre_mem_alloc_impl(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, UintptrFromInt32(0), 0, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1+Int32FromInt32(1))*uint64(8)) + if !(nc != 0) { + err = int32(REG_ESPACE) + goto parse_bracket_done + } + Xmemcpy(tls, nc, bp+24+8, uint64((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*uint64(8)) + *(*Ttre_ctype_t)(unsafe.Pointer(nc + uintptr((*(*Tneg)(unsafe.Pointer(bp + 24))).Flen1)*8)) = uint64(0) + } + } + /* Build a union of the items in the array, negated if necessary. */ + v1 = Int32FromInt32(0) + negmin = v1 + negmax = v1 + i = 0 + for { + if !(i < (*(*Tliterals)(unsafe.Pointer(bp))).Flen1) { + break + } + lit = *(*uintptr)(unsafe.Pointer((*(*Tliterals)(unsafe.Pointer(bp))).Fa + uintptr(i)*8)) + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if (*(*Tneg)(unsafe.Pointer(bp + 24))).Fnegate != 0 { + if min <= negmin { + /* Overlap. */ + if max+int32(1) >= negmin { + v3 = max + int32(1) + } else { + v3 = negmin + } + negmin = v3 + goto _2 + } + negmax = min - int32(1) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min = int64(negmin) + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max = int64(negmax) + negmin = max + int32(1) + } + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition + (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes = nc + n = _tre_ast_new_node(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(_LITERAL), lit) + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, node, n) + if !(node != 0) { + err = int32(REG_ESPACE) + break + } + goto _2 + _2: + ; + i++ + } + goto parse_bracket_done +parse_bracket_done: + ; + Xfree(tls, (*(*Tliterals)(unsafe.Pointer(bp))).Fa) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return err +} + +func _parse_dup_count(tls *TLS, s uintptr, n uintptr) (r uintptr) { + *(*int32)(unsafe.Pointer(n)) = -int32(1) + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return s + } + *(*int32)(unsafe.Pointer(n)) = 0 + for { + *(*int32)(unsafe.Pointer(n)) = int32(10)**(*int32)(unsafe.Pointer(n)) + (int32(*(*uint8)(unsafe.Pointer(s))) - int32('0')) + s++ + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) || *(*int32)(unsafe.Pointer(n)) > int32(RE_DUP_MAX) { + break + } + goto _1 + _1: + } + return s +} + +func _parse_dup(tls *TLS, s uintptr, ere int32, pmin uintptr, pmax uintptr) (r uintptr) { + bp := tls.Alloc(16) + defer tls.Free(16) + var v1, v4 uintptr + var v2, v3, v5 bool + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _ = v1, v2, v3, v4, v5 + s = _parse_dup_count(tls, s, bp) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32(',') { + s = _parse_dup_count(tls, s+uintptr(1), bp+4) + } else { + *(*int32)(unsafe.Pointer(bp + 4)) = *(*int32)(unsafe.Pointer(bp)) + } + if v3 = *(*int32)(unsafe.Pointer(bp + 4)) < *(*int32)(unsafe.Pointer(bp)) && *(*int32)(unsafe.Pointer(bp + 4)) >= 0 || *(*int32)(unsafe.Pointer(bp + 4)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) > int32(RE_DUP_MAX) || *(*int32)(unsafe.Pointer(bp)) < 0; !v3 { + if v2 = !(ere != 0); v2 { + v1 = s + s++ + } + } + if v5 = v3 || v2 && int32(*(*uint8)(unsafe.Pointer(v1))) != int32('\\'); !v5 { + v4 = s + s++ + } + if v5 || int32(*(*uint8)(unsafe.Pointer(v4))) != int32('}') { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(pmin)) = *(*int32)(unsafe.Pointer(bp)) + *(*int32)(unsafe.Pointer(pmax)) = *(*int32)(unsafe.Pointer(bp + 4)) + return s +} + +func _hexval1(tls *TLS, c uint32) (r int32) { + if c-uint32('0') < uint32(10) { + return int32(c - uint32('0')) + } + c |= uint32(32) + if c-uint32('a') < uint32(6) { + return int32(c - uint32('a') + uint32(10)) + } + return -int32(1) +} + +func _marksub(tls *TLS, ctx uintptr, node uintptr, subid int32) (r Treg_errcode_t) { + var n uintptr + _ = n + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + n = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !(n != 0) { + return int32(REG_ESPACE) + } + n = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, n, node) + if !(n != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(n)).Fnum_submatches = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches + node = n + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id = subid + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + return REG_OK +} + +/* +BRE grammar: +Regex = Branch | '^' | '$' | '^$' | '^' Branch | Branch '$' | '^' Branch '$' +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '\(' Branch '\)' | back_ref +Dup = '*' | '\{' Count '\}' | '\{' Count ',\}' | '\{' Count ',' Count '\}' + +(leading ^ and trailing $ in a sub expr may be an anchor or literal as well) + +ERE grammar: +Regex = Branch | Regex '|' Branch +Branch = Atom | Branch Atom +Atom = char | quoted_char | '.' | Bracket | Atom Dup | '(' Regex ')' | '^' | '$' +Dup = '*' | '+' | '?' | '{' Count '}' | '{' Count ',}' | '{' Count ',' Count '}' + +(a*+?, ^*, $+, \X, {, (|a) are unspecified) +*/ + +func _parse_atom(tls *TLS, ctx uintptr, s uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, ere, i, len1, v, val, v16, v18, v20, v21, v23, v25 int32 + var err Treg_errcode_t + var node, p, tmp1, tmp11, tmp2, tmp21, v14, v17, v19, v22, v24, v26 uintptr + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, ere, err, i, len1, node, p, tmp1, tmp11, tmp2, tmp21, v, val, v14, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26 + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('['): + goto _1 + case int32('\\'): + goto _2 + case int32('.'): + goto _3 + case int32('^'): + goto _4 + case int32('$'): + goto _5 + case int32('?'): + goto _6 + case int32('+'): + goto _7 + case int32('{'): + goto _8 + case int32('*'): + goto _9 + case int32('|'): + goto _10 + case 0: + goto _11 + default: + goto _12 + } + goto _13 +_1: + ; + return _parse_bracket(tls, ctx, s+uintptr(1)) +_2: + ; + p = _tre_expand_macro(tls, s+uintptr(1)) + if p != 0 { + /* assume \X expansion is a single atom */ + err = _parse_atom(tls, ctx, p) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + uintptr(2) + return err + } + /* extensions: \b, \B, \<, \>, \xHH \x{HHHH} */ + s++ + v14 = s + switch int32(*(*uint8)(unsafe.Pointer(v14))) { + case 0: + return int32(REG_EESCAPE) + case int32('b'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB), -int32(1)) + case int32('B'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_WB_NEG), -int32(1)) + case int32('<'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOW), -int32(1)) + case int32('>'): + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOW), -int32(1)) + case int32('x'): + s++ + v = 0 + len1 = int32(2) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + len1 = int32(8) + s++ + } + i = 0 + for { + if !(i < len1 && v < int32(0x110000)) { + break + } + c = _hexval1(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(i))))) + if c < 0 { + break + } + v = int32(16)*v + c + goto _15 + _15: + ; + i++ + } + s += uintptr(i) + if len1 == int32(8) { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('}') { + return int32(REG_EBRACE) + } + s++ + } + v17 = ctx + 44 + v16 = *(*int32)(unsafe.Pointer(v17)) + *(*int32)(unsafe.Pointer(v17))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, v, v, v16) + s-- + case int32('{'): + fallthrough + case int32('+'): + fallthrough + case int32('?'): + /* extension: treat \+, \? as repetitions in BRE */ + /* reject repetitions after empty expression in BRE */ + if !(ere != 0) { + return int32(REG_BADRPT) + } + fallthrough + case int32('|'): + /* extension: treat \| as alternation in BRE */ + if !(ere != 0) { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + s-- + goto end + } + /* fallthrough */ + fallthrough + default: + if !(ere != 0) && uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('1') < uint32(9) { + /* back reference */ + val = int32(*(*uint8)(unsafe.Pointer(s))) - int32('0') + v19 = ctx + 44 + v18 = *(*int32)(unsafe.Pointer(v19)) + *(*int32)(unsafe.Pointer(v19))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(4), val, v18) + if val >= (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref { + v20 = val + } else { + v20 = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmax_backref = v20 + } else { + /* extension: accept unknown escaped char + as a literal */ + goto parse_literal + } + } + s++ + goto _13 +_3: + ; + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_NEWLINE) != 0 { + v22 = ctx + 44 + v21 = *(*int32)(unsafe.Pointer(v22)) + *(*int32)(unsafe.Pointer(v22))++ + tmp1 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, Int32FromUint8('\n')-Int32FromInt32(1), v21) + v24 = ctx + 44 + v23 = *(*int32)(unsafe.Pointer(v24)) + *(*int32)(unsafe.Pointer(v24))++ + tmp2 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, Int32FromUint8('\n')+Int32FromInt32(1), int32(TRE_CHAR_MAX), v23) + if tmp1 != 0 && tmp2 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp1, tmp2) + } else { + node = uintptr(0) + } + } else { + v26 = ctx + 44 + v25 = *(*int32)(unsafe.Pointer(v26)) + *(*int32)(unsafe.Pointer(v26))++ + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, 0, int32(TRE_CHAR_MAX), v25) + } + s++ + goto _13 +_4: + ; + /* '^' has a special meaning everywhere in EREs, and at beginning of BRE. */ + if !(ere != 0) && s != (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_BOL), -int32(1)) + s++ + goto _13 +_5: + ; + /* '$' is special everywhere in EREs, and at the end of a BRE subexpression. */ + if !(ere != 0) && *(*uint8)(unsafe.Pointer(s + 1)) != 0 && (int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('\\') || int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32(')') && int32(*(*uint8)(unsafe.Pointer(s + 2))) != int32('|')) { + goto parse_literal + } + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(2), int32(ASSERT_AT_EOL), -int32(1)) + s++ + goto _13 +_9: + ; +_8: + ; +_7: + ; +_6: + ; + /* reject repetitions after empty expression in ERE */ + if ere != 0 { + return int32(REG_BADRPT) + } +_10: + ; + if !(ere != 0) { + goto parse_literal + } +_11: + ; + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + goto _13 +_12: + ; + goto parse_literal +parse_literal: + ; + len1 = Xmbtowc(tls, bp, s, uint64(-Int32FromInt32(1))) + if len1 < 0 { + return int32(REG_BADPAT) + } + if (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags&int32(REG_ICASE) != 0 && (Xiswupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0 || Xiswlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp)))) != 0) { + /* multiple opposite case characters are not supported */ + tmp11 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowupper(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + tmp21 = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(bp))))), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + if tmp11 != 0 && tmp21 != 0 { + node = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, tmp11, tmp21) + } else { + node = uintptr(0) + } + } else { + node = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, *(*Twchar_t)(unsafe.Pointer(bp)), *(*Twchar_t)(unsafe.Pointer(bp)), (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fposition++ + s += uintptr(len1) + goto _13 +_13: + ; + goto end +end: + ; + if !(node != 0) { + return int32(REG_ESPACE) + } + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = node + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs = s + return REG_OK +} + +func _tre_parse(tls *TLS, ctx uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c, depth, ere, subid, v2, v7 int32 + var err, v1, v4, v5, v6 Treg_errcode_t + var nbranch, nunion, s, stack, v8 uintptr + var _ /* max at bp+4 */ int32 + var _ /* min at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, depth, ere, err, nbranch, nunion, s, stack, subid, v1, v2, v4, v5, v6, v7, v8 + nbranch = uintptr(0) + nunion = uintptr(0) + ere = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fcflags & int32(REG_EXTENDED) + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart + subid = 0 + depth = 0 + stack = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstack + v2 = subid + subid++ + v1 = _tre_stack_push_int(tls, stack, v2) + err = v1 + if v1 != REG_OK { + return err + } + for { + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('(') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('(') { + v4 = _tre_stack_push_voidptr(tls, stack, nunion) + err = v4 + if v4 != REG_OK { + return err + } + v5 = _tre_stack_push_voidptr(tls, stack, nbranch) + err = v5 + if v5 != REG_OK { + return err + } + v7 = subid + subid++ + v6 = _tre_stack_push_int(tls, stack, v7) + err = v6 + if v6 != REG_OK { + return err + } + s++ + if !(ere != 0) { + s++ + } + depth++ + v8 = UintptrFromInt32(0) + nunion = v8 + nbranch = v8 + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + goto _3 + } + if !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + } else { + err = _parse_atom(tls, ctx, s) + if err != REG_OK { + return err + } + s = (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fs + } + goto parse_iter + parse_iter: + ; + for { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('\\') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('*') { + if !(ere != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s))) != int32('{') { + break + } + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && ere != 0 { + break + } + /* extension: treat \+, \? as repetitions in BRE */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('+') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('?') && int32(*(*uint8)(unsafe.Pointer(s + 1))) != int32('{') { + break + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') { + s++ + } + /* handle ^* at the start of a BRE. */ + if !(ere != 0) && s == (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart+uintptr(1) && int32(*(*uint8)(unsafe.Pointer(s + uintptr(-Int32FromInt32(1))))) == int32('^') { + break + } + /* extension: multiple consecutive *+?{,} is unspecified, + but (a+)+ has to be supported so accepting a++ makes + sense, note however that the RE_DUP_MAX limit can be + circumvented: (a{255}){255} uses a lot of memory.. */ + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('{') { + s = _parse_dup(tls, s+uintptr(1), ere, bp, bp+4) + if !(s != 0) { + return int32(REG_BADBR) + } + } else { + *(*int32)(unsafe.Pointer(bp)) = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = -int32(1) + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + *(*int32)(unsafe.Pointer(bp)) = int32(1) + } + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('?') { + *(*int32)(unsafe.Pointer(bp + 4)) = int32(1) + } + s++ + } + if *(*int32)(unsafe.Pointer(bp + 4)) == 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_literal(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, -int32(1), -int32(1), -int32(1)) + } else { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn = _tre_ast_new_iter(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4)), 0) + } + if !((*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn != 0) { + return int32(REG_ESPACE) + } + goto _9 + _9: + } + nbranch = _tre_ast_new_catenation(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nbranch, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fn) + if ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32('|') || ere != 0 && int32(*(*uint8)(unsafe.Pointer(s))) == int32(')') && depth != 0 || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32(')') || !(ere != 0) && int32(*(*uint8)(unsafe.Pointer(s))) == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + /* extension: empty branch is unspecified (), (|a), (a|) + here they are not rejected but match on empty string */ + c = int32(*(*uint8)(unsafe.Pointer(s))) + nunion = _tre_ast_new_union(tls, (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fmem, nunion, nbranch) + nbranch = uintptr(0) + if c == int32('\\') && int32(*(*uint8)(unsafe.Pointer(s + 1))) == int32('|') { + s += uintptr(2) + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('|') { + s++ + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fstart = s + } else { + if c == int32('\\') { + if !(depth != 0) { + return int32(REG_EPAREN) + } + s += uintptr(2) + } else { + if c == int32(')') { + s++ + } + } + depth-- + err = _marksub(tls, ctx, nunion, _tre_stack_pop_int(tls, stack)) + if err != REG_OK { + return err + } + if !(c != 0) && depth < 0 { + (*Ttre_parse_ctx_t)(unsafe.Pointer(ctx)).Fsubmatch_id = subid + return REG_OK + } + if !(c != 0) || depth < 0 { + return int32(REG_EPAREN) + } + nbranch = _tre_stack_pop_voidptr(tls, stack) + nunion = _tre_stack_pop_voidptr(tls, stack) + goto parse_iter + } + } + } + goto _3 + _3: + } + return r +} + +/*********************************************************************** + from tre-compile.c +***********************************************************************/ + +/* + TODO: + - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive + function calls. +*/ + +/* + Algorithms to setup tags so that submatch addressing can be done. +*/ + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the left child a new tag with number `tag_id' to `node' is added, +// and the right child is the old root. */ +func _tre_add_tag_left(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fright)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +// C documentation +// +// /* Inserts a catenation node to the root of the tree given in `node'. +// As the right child a new tag with number `tag_id' to `node' is added, +// and the left child is the old root. */ +func _tre_add_tag_right(tls *TLS, mem Ttre_mem_t, node uintptr, tag_id int32) (r Treg_errcode_t) { + var c uintptr + _ = c + c = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(16)) + if c == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright = _tre_ast_new_literal(tls, mem, -int32(3), tag_id, -int32(1)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fright == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(48)) + if (*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnullable = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fsubmatch_id = -int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Ffirstpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Flastpos = UintptrFromInt32(0) + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_tags = 0 + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(c)).Fleft)).Fnum_submatches = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = c + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = int32(_CATENATION) + return REG_OK +} + +type Ttre_addtags_symbol_t = int32 + +const _ADDTAGS_RECURSE = 0 +const _ADDTAGS_AFTER_ITERATION = 1 +const _ADDTAGS_AFTER_UNION_LEFT = 2 +const _ADDTAGS_AFTER_UNION_RIGHT = 3 +const _ADDTAGS_AFTER_CAT_LEFT = 4 +const _ADDTAGS_AFTER_CAT_RIGHT = 5 +const _ADDTAGS_SET_SUBMATCH_END = 6 + +type Ttre_tag_states_t = struct { + Ftag int32 + Fnext_tag int32 +} + +// C documentation +// +// /* Go through `regset' and set submatch data for submatches that are +// using this tag. */ +func _tre_purge_regset(tls *TLS, regset uintptr, tnfa uintptr, tag int32) { + var i, id, start int32 + _, _, _ = i, id, start + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) >= 0) { + break + } + id = *(*int32)(unsafe.Pointer(regset + uintptr(i)*4)) / int32(2) + start = BoolInt32(!(*(*int32)(unsafe.Pointer(regset + uintptr(i)*4))%Int32FromInt32(2) != 0)) + if start != 0 { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Fso_tag = tag + } else { + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id)*16))).Feo_tag = tag + } + goto _1 + _1: + ; + i++ + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) +} + +// C documentation +// +// /* Adds tags to appropriate locations in the parse tree in `tree', so that +// subexpressions marked for submatch addressing can be traced. */ +func _tre_add_tags(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr, tnfa uintptr) (r Treg_errcode_t) { + var added_tags, bottom, enter_tag, first_pass, i1, i2, i3, i4, i5, i6, i7, id, id1, left_tag, minimal, minimal_tag, new_tag, next_tag, num_minimals, num_tags, reserved_tag, right_tag, tag, tag_left, tag_right, v22 int32 + var cat, iter, left, left1, left2, lit, node, orig_regset, p, parents, regset, right, right1, right2, saved_states, uni uintptr + var direction Ttre_tag_direction_t + var i uint32 + var status Treg_errcode_t + var symbol Ttre_addtags_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = added_tags, bottom, cat, direction, enter_tag, first_pass, i, i1, i2, i3, i4, i5, i6, i7, id, id1, iter, left, left1, left2, left_tag, lit, minimal, minimal_tag, new_tag, next_tag, node, num_minimals, num_tags, orig_regset, p, parents, regset, reserved_tag, right, right1, right2, right_tag, saved_states, status, symbol, tag, tag_left, tag_right, uni, v22 + status = REG_OK + node = tree /* Tree node we are currently looking at. */ + bottom = _tre_stack_num_objects(tls, stack) + /* True for first pass (counting number of needed tags) */ + first_pass = BoolInt32(mem == UintptrFromInt32(0) || tnfa == UintptrFromInt32(0)) + num_tags = 0 /* Total number of tags. */ + num_minimals = 0 /* Number of special minimal tags. */ + tag = 0 /* The tag that is to be added next. */ + next_tag = int32(1) /* Stack of submatches the current submatch is + contained in. */ + minimal_tag = -int32(1) + direction = int32(_TRE_TAG_MINIMIZE) + if !(first_pass != 0) { + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = 0 + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags)) = -int32(1) + } + regset = Xmalloc(tls, uint64(4)*uint64(((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))*Uint32FromInt32(2))) + if regset == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + orig_regset = regset + parents = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if parents == UintptrFromInt32(0) { + Xfree(tls, regset) + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(parents)) = -int32(1) + saved_states = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches+Uint32FromInt32(1))) + if saved_states == UintptrFromInt32(0) { + Xfree(tls, regset) + Xfree(tls, parents) + return int32(REG_ESPACE) + } else { + i = uint32(0) + for { + if !(i <= (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + (*(*Ttre_tag_states_t)(unsafe.Pointer(saved_states + uintptr(i)*8))).Ftag = -int32(1) + goto _1 + _1: + ; + i++ + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + for _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_ADDTAGS_SET_SUBMATCH_END): + goto _2 + case int32(_ADDTAGS_RECURSE): + goto _3 + case int32(_ADDTAGS_AFTER_ITERATION): + goto _4 + case int32(_ADDTAGS_AFTER_CAT_LEFT): + goto _5 + case int32(_ADDTAGS_AFTER_CAT_RIGHT): + goto _6 + case int32(_ADDTAGS_AFTER_UNION_LEFT): + goto _7 + case int32(_ADDTAGS_AFTER_UNION_RIGHT): + goto _8 + default: + goto _9 + } + goto _10 + _2: + ; + id = _tre_stack_pop_int(tls, stack) + /* Add end of this submatch to regset. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) >= 0) { + break + } + goto _11 + _11: + ; + i1++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i1)*4)) = id*int32(2) + int32(1) + *(*int32)(unsafe.Pointer(regset + uintptr(i1+int32(1))*4)) = -int32(1) + /* Pop this submatch from the parents stack. */ + i1 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i1)*4)) >= 0) { + break + } + goto _12 + _12: + ; + i1++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i1-int32(1))*4)) = -int32(1) + goto _10 + _3: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + id1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + /* Add start of this submatch to regset. */ + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) >= 0) { + break + } + goto _13 + _13: + ; + i2++ + } + *(*int32)(unsafe.Pointer(regset + uintptr(i2)*4)) = id1 * int32(2) + *(*int32)(unsafe.Pointer(regset + uintptr(i2+int32(1))*4)) = -int32(1) + if !(first_pass != 0) { + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + goto _14 + _14: + ; + i2++ + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = UintptrFromInt32(0) + if i2 > 0 { + p = Xmalloc(tls, uint64(4)*uint64(i2+Int32FromInt32(1))) + if p == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + goto _10 + } + (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(id1)*16))).Fparents = p + i2 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) >= 0) { + break + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = *(*int32)(unsafe.Pointer(parents + uintptr(i2)*4)) + goto _15 + _15: + ; + i2++ + } + *(*int32)(unsafe.Pointer(p + uintptr(i2)*4)) = -int32(1) + } + } + /* Add end of this submatch to regset after processing this + node. */ + status = _tre_stack_push_int(tls, stack, (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id) + if status != REG_OK { + goto _10 + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_SET_SUBMATCH_END)) + if status != REG_OK { + goto _10 + } + } + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + /* Regset is not empty, so add a tag before the + literal or backref. */ + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i3 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) >= 0) { + break + } + goto _16 + _16: + ; + i3++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i3+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = int32(1) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + } else { + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft + right = (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright + reserved_tag = -int32(1) + /* After processing right child. */ + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, next_tag+(*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags) + if status != REG_OK { + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(left)).Fnum_tags > 0 && (*Ttre_ast_node_t)(unsafe.Pointer(right)).Fnum_tags > 0 { + /* Reserve the next tag to the right child. */ + reserved_tag = next_tag + next_tag++ + } + status = _tre_stack_push_int(tls, stack, reserved_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_CAT_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if first_pass != 0 { + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0)) + if status != REG_OK { + break + } + } else { + status = _tre_stack_push_int(tls, stack, tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if status != REG_OK { + break + } + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_ITERATION)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 || int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + if int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0)) != 0 { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = int32(_TRE_TAG_MAXIMIZE) + } else { + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + } + if minimal_tag >= 0 { + i4 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) >= 0) { + break + } + goto _17 + _17: + ; + i4++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i4+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + direction = int32(_TRE_TAG_MINIMIZE) + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + left1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft + right1 = (*Ttre_union_t)(unsafe.Pointer(uni)).Fright + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + left_tag = next_tag + right_tag = next_tag + int32(1) + } else { + left_tag = tag + right_tag = next_tag + } + /* After processing right child. */ + status = _tre_stack_push_int(tls, stack, right_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, left_tag) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, regset) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, BoolInt32(*(*int32)(unsafe.Pointer(regset)) >= 0)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_RIGHT)) + if status != REG_OK { + break + } + /* Process right child. */ + status = _tre_stack_push_voidptr(tls, stack, right1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* After processing left child. */ + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_AFTER_UNION_LEFT)) + if status != REG_OK { + break + } + /* Process left child. */ + status = _tre_stack_push_voidptr(tls, stack, left1) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_ADDTAGS_RECURSE)) + if status != REG_OK { + break + } + /* Regset is not empty, so add a tag here. */ + if *(*int32)(unsafe.Pointer(regset)) >= 0 { + if !(first_pass != 0) { + status = _tre_add_tag_left(tls, mem, node, tag) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag)*4)) = direction + if minimal_tag >= 0 { + i5 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) >= 0) { + break + } + goto _18 + _18: + ; + i5++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i5+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + _tre_purge_regset(tls, regset, tnfa, tag) + } + *(*int32)(unsafe.Pointer(regset)) = -int32(1) + tag = next_tag + num_tags++ + next_tag++ + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + /* The next two tags are reserved for markers. */ + next_tag++ + tag = next_tag + next_tag++ + } + break + } + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id >= 0 { + /* Push this submatch on the parents stack. */ + i6 = 0 + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) >= 0) { + break + } + goto _19 + _19: + ; + i6++ + } + *(*int32)(unsafe.Pointer(parents + uintptr(i6)*4)) = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fsubmatch_id + *(*int32)(unsafe.Pointer(parents + uintptr(i6+int32(1))*4)) = -int32(1) + } + goto _10 /* end case: ADDTAGS_RECURSE */ + _4: + ; + minimal = 0 + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg)).Fnum_tags + _tre_stack_pop_int(tls, stack) + minimal_tag = -int32(1) + } else { + minimal = _tre_stack_pop_int(tls, stack) + enter_tag = _tre_stack_pop_int(tls, stack) + if minimal != 0 { + minimal_tag = enter_tag + } + } + if !(first_pass != 0) { + if minimal != 0 { + direction = int32(_TRE_TAG_MINIMIZE) + } else { + direction = int32(_TRE_TAG_MAXIMIZE) + } + } + goto _10 + _5: + ; + new_tag = _tre_stack_pop_int(tls, stack) + next_tag = _tre_stack_pop_int(tls, stack) + if new_tag >= 0 { + tag = new_tag + } + goto _10 + _6: + ; + node = _tre_stack_pop_voidptr(tls, stack) + if first_pass != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + } + goto _10 + _7: + ; + /* Lift the bottom of the `regset' array so that when processing + the right operand the items currently in the array are + invisible. The original bottom was saved at ADDTAGS_UNION and + will be restored at ADDTAGS_AFTER_UNION_RIGHT below. */ + _21: + ; + if !(*(*int32)(unsafe.Pointer(regset)) >= 0) { + goto _20 + } + regset += 4 + goto _21 + _20: + ; + goto _10 + _8: + ; + left2 = _tre_stack_pop_voidptr(tls, stack) + right2 = _tre_stack_pop_voidptr(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + added_tags = _tre_stack_pop_int(tls, stack) + if first_pass != 0 { + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + v22 = int32(2) + } else { + v22 = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_tags = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft)).Fnum_tags + (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright)).Fnum_tags + added_tags + v22 + } + regset = _tre_stack_pop_voidptr(tls, stack) + tag_left = _tre_stack_pop_int(tls, stack) + tag_right = _tre_stack_pop_int(tls, stack) + /* Add tags after both children, the left child gets a smaller + tag than the right child. This guarantees that we prefer + the left child over the right child. */ + /* XXX - This is not always necessary (if the children have + tags which must be seen for every match of that child). */ + /* XXX - Check if this is the only place where tre_add_tag_right + is used. If so, use tre_add_tag_left (putting the tag before + the child as opposed after the child) and throw away + tre_add_tag_right. */ + if (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnum_submatches > 0 { + if !(first_pass != 0) { + status = _tre_add_tag_right(tls, mem, left2, tag_left) + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_left)*4)) = int32(_TRE_TAG_MAXIMIZE) + if status == REG_OK { + status = _tre_add_tag_right(tls, mem, right2, tag_right) + } + *(*Ttre_tag_direction_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions + uintptr(tag_right)*4)) = int32(_TRE_TAG_MAXIMIZE) + } + num_tags += int32(2) + } + direction = int32(_TRE_TAG_MAXIMIZE) + goto _10 + _9: + ; + goto _10 + _10: + /* end switch(symbol) */ + } /* end while(tre_stack_num_objects(stack) > bottom) */ + if !(first_pass != 0) { + _tre_purge_regset(tls, regset, tnfa, tag) + } + if !(first_pass != 0) && minimal_tag >= 0 { + i7 = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) >= 0) { + break + } + goto _23 + _23: + ; + i7++ + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7)*4)) = tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(1))*4)) = minimal_tag + *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i7+int32(2))*4)) = -int32(1) + minimal_tag = -int32(1) + num_minimals++ + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags = num_tags + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals = num_minimals + Xfree(tls, orig_regset) + Xfree(tls, parents) + Xfree(tls, saved_states) + return status +} + +/* + AST to TNFA compilation routines. +*/ + +type Ttre_copyast_symbol_t = int32 + +const _COPY_RECURSE = 0 +const _COPY_SET_RESULT_PTR = 1 + +/* Flags for tre_copy_ast(). */ + +func _tre_copy_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, flags int32, pos_add uintptr, tag_directions uintptr, copy1 uintptr, max_pos uintptr) (r Treg_errcode_t) { + var bottom, first_tag, max, min, num_copied, pos, v1 int32 + var cat, iter, lit, node, p, result, tmp, tmp1, uni uintptr + var status Treg_errcode_t + var symbol Ttre_copyast_symbol_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bottom, cat, first_tag, iter, lit, max, min, node, num_copied, p, pos, result, status, symbol, tmp, tmp1, uni, v1 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + num_copied = 0 + first_tag = int32(1) + result = copy1 + status = _tre_stack_push_voidptr(tls, stack, ast) + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + switch symbol { + case int32(_COPY_SET_RESULT_PTR): + result = _tre_stack_pop_voidptr(tls, stack) + case int32(_COPY_RECURSE): + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + pos = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + min = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min) + max = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* XXX - e.g. [ab] has only one position but two + nodes, so we are creating holes in the state space + here. Not fatal, just wastes memory. */ + pos += *(*int32)(unsafe.Pointer(pos_add)) + num_copied++ + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_REMOVE_TAGS) != 0 { + /* Change this tag to empty. */ + min = -int32(1) + v1 = -Int32FromInt32(1) + pos = v1 + max = v1 + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(3)) && flags&int32(COPY_MAXIMIZE_FIRST_TAG) != 0 && first_tag != 0 { + /* Maximize the first tag. */ + *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(max)*4)) = int32(_TRE_TAG_MAXIMIZE) + first_tag = 0 + } + } + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_literal(tls, mem, min, max, pos) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + } else { + p = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_literal_t)(unsafe.Pointer(p)).Fclass = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass + (*Ttre_literal_t)(unsafe.Pointer(p)).Fneg_classes = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes + } + if pos > *(*int32)(unsafe.Pointer(max_pos)) { + *(*int32)(unsafe.Pointer(max_pos)) = pos + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_union(tls, mem, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = tmp + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_catenation(tls, mem, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + tmp1 = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fleft = UintptrFromInt32(0) + (*Ttre_catenation_t)(unsafe.Pointer(tmp1)).Fright = UintptrFromInt32(0) + result = tmp1 + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, tmp1+8) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_SET_RESULT_PTR)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_COPY_RECURSE)) + if status != REG_OK { + break + } + *(*uintptr)(unsafe.Pointer(result)) = _tre_ast_new_iter(tls, mem, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax, int32(uint32(*(*uint8)(unsafe.Pointer(iter + 16))&0x1>>0))) + if *(*uintptr)(unsafe.Pointer(result)) == UintptrFromInt32(0) { + status = int32(REG_ESPACE) + break + } + iter = (*Ttre_ast_node_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(result)))).Fobj + result = iter + default: + break + } + break + } + } + *(*int32)(unsafe.Pointer(pos_add)) += num_copied + return status +} + +type Ttre_expand_ast_symbol_t = int32 + +const _EXPAND_RECURSE = 0 +const _EXPAND_AFTER_ITER = 1 + +// C documentation +// +// /* Expands each iteration node that has a finite nonzero minimum or maximum +// iteration count to a catenated sequence of copies of the node. */ +func _tre_expand_ast(tls *TLS, mem Ttre_mem_t, stack uintptr, ast uintptr, position uintptr, tag_directions uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var _status, _status1, status Treg_errcode_t + var bottom, flags, iter_depth, j, pos_add_last, pos_add_save, pos_add_total, v2 int32 + var cat, iter, iter1, lit, node, seq1, tmp, uni uintptr + var symbol Ttre_expand_ast_symbol_t + var _ /* copy at bp+16 */ uintptr + var _ /* copy at bp+24 */ uintptr + var _ /* max_pos at bp+4 */ int32 + var _ /* pos_add at bp+0 */ int32 + var _ /* seq2 at bp+8 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, bottom, cat, flags, iter, iter1, iter_depth, j, lit, node, pos_add_last, pos_add_save, pos_add_total, seq1, status, symbol, tmp, uni, v2 + status = REG_OK + bottom = _tre_stack_num_objects(tls, stack) + *(*int32)(unsafe.Pointer(bp)) = 0 + pos_add_total = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + iter_depth = 0 + _status = _tre_stack_push_voidptr(tls, stack, ast) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + if status != REG_OK { + break + } + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_EXPAND_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if !((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < Int64FromInt32(0)) || (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + *(*int32)(unsafe.Pointer(lit + 16)) += *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition > *(*int32)(unsafe.Pointer(bp + 4)) { + *(*int32)(unsafe.Pointer(bp + 4)) = (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition + } + } + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_int(tls, stack, *(*int32)(unsafe.Pointer(bp))) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, node) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_AFTER_ITER)) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + status = _tre_stack_push_int(tls, stack, int32(_EXPAND_RECURSE)) + if status != REG_OK { + break + } + /* If we are going to expand this node at EXPAND_AFTER_ITER + then don't increase the `pos' fields of the nodes now, it + will get done when expanding. */ + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax > int32(1) { + *(*int32)(unsafe.Pointer(bp)) = 0 + } + iter_depth++ + default: + break + } + case int32(_EXPAND_AFTER_ITER): + iter1 = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + *(*int32)(unsafe.Pointer(bp)) = _tre_stack_pop_int(tls, stack) + pos_add_last = *(*int32)(unsafe.Pointer(bp)) + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin > int32(1) || (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax > int32(1) { + seq1 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(bp + 8)) = UintptrFromInt32(0) + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + /* Create a catenated sequence of copies of the node. */ + j = 0 + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin) { + break + } + if j+int32(1) < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin { + v2 = int32(COPY_REMOVE_TAGS) + } else { + v2 = int32(COPY_MAXIMIZE_FIRST_TAG) + } + /* Remove tags from all but the last copy. */ + flags = v2 + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, flags, bp, tag_directions, bp+16, bp+4) + if status != REG_OK { + return status + } + if seq1 != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 16))) + } else { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 16)) + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _1 + _1: + ; + j++ + } + if (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax == -int32(1) { + /* No upper limit. */ + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+8, bp+4) + if status != REG_OK { + return status + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_iter(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, -int32(1), 0) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } else { + j = (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmin + for { + if !(j < (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Fmax) { + break + } + pos_add_save = *(*int32)(unsafe.Pointer(bp)) + status = _tre_copy_ast(tls, mem, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter1)).Farg, 0, bp, UintptrFromInt32(0), bp+24, bp+4) + if status != REG_OK { + return status + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_catenation(tls, mem, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*uintptr)(unsafe.Pointer(bp + 8))) + } else { + *(*uintptr)(unsafe.Pointer(bp + 8)) = *(*uintptr)(unsafe.Pointer(bp + 24)) + } + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + tmp = _tre_ast_new_literal(tls, mem, -int32(1), -int32(1), -int32(1)) + if tmp == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + *(*uintptr)(unsafe.Pointer(bp + 8)) = _tre_ast_new_union(tls, mem, tmp, *(*uintptr)(unsafe.Pointer(bp + 8))) + if *(*uintptr)(unsafe.Pointer(bp + 8)) == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + goto _3 + _3: + ; + j++ + } + } + *(*int32)(unsafe.Pointer(bp)) = pos_add_save + if seq1 == UintptrFromInt32(0) { + seq1 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + if *(*uintptr)(unsafe.Pointer(bp + 8)) != UintptrFromInt32(0) { + seq1 = _tre_ast_new_catenation(tls, mem, seq1, *(*uintptr)(unsafe.Pointer(bp + 8))) + } + } + if seq1 == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 = (*Ttre_ast_node_t)(unsafe.Pointer(seq1)).Ftype1 + } + iter_depth-- + pos_add_total += *(*int32)(unsafe.Pointer(bp)) - pos_add_last + if iter_depth == 0 { + *(*int32)(unsafe.Pointer(bp)) = pos_add_total + } + default: + break + } + } + *(*int32)(unsafe.Pointer(position)) += pos_add_total + /* `max_pos' should never be larger than `*position' if the above + code works, but just an extra safeguard let's make sure + `*position' is set large enough so enough memory will be + allocated for the transition table. */ + if *(*int32)(unsafe.Pointer(bp + 4)) > *(*int32)(unsafe.Pointer(position)) { + *(*int32)(unsafe.Pointer(position)) = *(*int32)(unsafe.Pointer(bp + 4)) + } + return status +} + +func _tre_set_empty(tls *TLS, mem Ttre_mem_t) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_one(tls *TLS, mem Ttre_mem_t, position int32, code_min int32, code_max int32, class Ttre_ctype_t, neg_classes uintptr, backref int32) (r uintptr) { + var new_set uintptr + _ = new_set + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), Uint64FromInt64(56)*Uint64FromInt32(2)) + if new_set == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fposition = position + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_min = code_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fcode_max = code_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fclass = class + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fneg_classes = neg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set))).Fbackref = backref + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fposition = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_min = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + 1*56))).Fcode_max = -int32(1) + return new_set +} + +func _tre_set_union(tls *TLS, mem Ttre_mem_t, set1 uintptr, set2 uintptr, tags uintptr, assertions int32) (r uintptr) { + var i, j, num_tags, s1, s2 int32 + var new_set, new_tags uintptr + _, _, _, _, _, _, _ = i, j, new_set, new_tags, num_tags, s1, s2 + num_tags = 0 + for { + if !(tags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer(tags + uintptr(num_tags)*4)) >= 0) { + break + } + goto _1 + _1: + ; + num_tags++ + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + goto _2 + _2: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + goto _3 + _3: + ; + s2++ + } + new_set = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), int32(1), uint64(56)*uint64(s1+s2+Int32FromInt32(1))) + if !(new_set != 0) { + return UintptrFromInt32(0) + } + s1 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fcode_max + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fassertions | assertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags == UintptrFromInt32(0) && tags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags != UintptrFromInt32(0) && *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _5 + _5: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, Uint64FromInt64(4)*uint64(i+num_tags+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set1 + uintptr(s1)*56))).Ftags + uintptr(j)*4)) + goto _6 + _6: + ; + j++ + } + i = 0 + for { + if !(i < num_tags) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) + goto _7 + _7: + ; + i++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j+i)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1)*56))).Ftags = new_tags + } + goto _4 + _4: + ; + s1++ + } + s2 = 0 + for { + if !((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition >= 0) { + break + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fposition + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_min = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_min + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fcode_max = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fcode_max + /* XXX - why not | assertions here as well? */ + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fassertions = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fassertions + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fclass = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fclass + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fneg_classes = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fneg_classes + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fbackref = (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Fbackref + if (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags == UintptrFromInt32(0) { + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = UintptrFromInt32(0) + } else { + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(i)*4)) >= 0) { + break + } + goto _9 + _9: + ; + i++ + } + new_tags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(4)*uint64(i+Int32FromInt32(1))) + if new_tags == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + j = 0 + for { + if !(j < i) { + break + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = *(*int32)(unsafe.Pointer((*(*Ttre_pos_and_tags_t)(unsafe.Pointer(set2 + uintptr(s2)*56))).Ftags + uintptr(j)*4)) + goto _10 + _10: + ; + j++ + } + *(*int32)(unsafe.Pointer(new_tags + uintptr(j)*4)) = -int32(1) + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Ftags = new_tags + } + goto _8 + _8: + ; + s2++ + } + (*(*Ttre_pos_and_tags_t)(unsafe.Pointer(new_set + uintptr(s1+s2)*56))).Fposition = -int32(1) + return new_set +} + +// C documentation +// +// /* Finds the empty path through `node' which is the one that should be +// taken according to POSIX.2 rules, and adds the tags on that path to +// `tags'. `tags' may be NULL. If `num_tags_seen' is not NULL, it is +// set to the number of tags seen on the path. */ +func _tre_match_empty(tls *TLS, stack uintptr, node uintptr, tags uintptr, assertions uintptr, num_tags_seen uintptr) (r Treg_errcode_t) { + var bottom, i int32 + var cat, iter, lit, uni, p2 uintptr + var status Treg_errcode_t + _, _, _, _, _, _, _, _ = bottom, cat, i, iter, lit, status, uni, p2 + bottom = _tre_stack_num_objects(tls, stack) + status = REG_OK + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen)) = 0 + } + status = _tre_stack_push_voidptr(tls, stack, node) + /* Walk through the tree recursively. */ + for status == REG_OK && _tre_stack_num_objects(tls, stack) > bottom { + node = _tre_stack_pop_voidptr(tls, stack) + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + switch (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min { + case int64(-int32(3)): + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max >= 0 { + if tags != UintptrFromInt32(0) { + /* Add the tag to `tags'. */ + i = 0 + for { + if !(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) >= 0) { + break + } + if int64(*(*int32)(unsafe.Pointer(tags + uintptr(i)*4))) == (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max { + break + } + goto _1 + _1: + ; + i++ + } + if *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) < 0 { + *(*int32)(unsafe.Pointer(tags + uintptr(i)*4)) = int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + *(*int32)(unsafe.Pointer(tags + uintptr(i+int32(1))*4)) = -int32(1) + } + } + if num_tags_seen != 0 { + *(*int32)(unsafe.Pointer(num_tags_seen))++ + } + } + case int64(-int32(2)): + if assertions != UintptrFromInt32(0) { + p2 = assertions + *(*int32)(unsafe.Pointer(p2)) = int32(int64(*(*int32)(unsafe.Pointer(p2))) | (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max) + } + case int64(-int32(1)): + default: + break + } + case int32(_UNION): + /* Subexpressions starting earlier take priority over ones + starting later, so we prefer the left subexpression over the + right subexpression. */ + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft) + if status != REG_OK { + break + } + } else { + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright) + if status != REG_OK { + break + } + } else { + } + } + case int32(_CATENATION): + /* The path must go through both children. */ + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft) + if status != REG_OK { + break + } + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright) + if status != REG_OK { + break + } + case int32(_ITERATION): + /* A match with an empty string is preferred over no match at + all, so we go through the argument if possible. */ + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + status = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg) + if status != REG_OK { + break + } + } + default: + break + } + } + return status +} + +type Ttre_nfl_stack_symbol_t = int32 + +const _NFL_RECURSE = 0 +const _NFL_POST_UNION = 1 +const _NFL_POST_CATENATION = 2 +const _NFL_POST_ITERATION = 3 + +// C documentation +// +// /* Computes and fills in the fields `nullable', `firstpos', and `lastpos' for +// the nodes of the AST `tree'. */ +func _tre_compute_nfl(tls *TLS, mem Ttre_mem_t, stack uintptr, tree uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, status Treg_errcode_t + var bottom int32 + var cat, iter, lit, node, tags, uni uintptr + var symbol Ttre_nfl_stack_symbol_t + var _ /* assertions at bp+4 */ int32 + var _ /* num_tags at bp+0 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = _status, _status1, _status10, _status11, _status12, _status13, _status14, _status15, _status16, _status17, _status2, _status3, _status4, _status5, _status6, _status7, _status8, _status9, bottom, cat, iter, lit, node, status, symbol, tags, uni + bottom = _tre_stack_num_objects(tls, stack) + _status = _tre_stack_push_voidptr(tls, stack, tree) + if _status != REG_OK { + return _status + } + _status1 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status1 != REG_OK { + return _status1 + } + for _tre_stack_num_objects(tls, stack) > bottom { + symbol = _tre_stack_pop_int(tls, stack) + node = _tre_stack_pop_voidptr(tls, stack) + switch symbol { + case int32(_NFL_RECURSE): + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + lit = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min == int64(-int32(4)) { + /* Back references: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, 0, int32(TRE_CHAR_MAX), uint64(0), UintptrFromInt32(0), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + if (*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min < 0 { + /* Tags, empty strings, params, and zero width assertions: + nullable = true, firstpos = {}, and lastpos = {}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_empty(tls, mem) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + /* Literal at position i: nullable = false, firstpos = {i}, + lastpos = {i}. */ + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), uint64(0), UintptrFromInt32(0), -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_one(tls, mem, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fposition, int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_min), int32((*Ttre_literal_t)(unsafe.Pointer(lit)).Fcode_max), (*Ttre_literal_t)(unsafe.Pointer(lit)).Fclass, (*Ttre_literal_t)(unsafe.Pointer(lit)).Fneg_classes, -int32(1)) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } + } + case int32(_UNION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status2 = _tre_stack_push_voidptr(tls, stack, node) + if _status2 != REG_OK { + return _status2 + } + _status3 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_UNION)) + if _status3 != REG_OK { + return _status3 + } + _status4 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status4 != REG_OK { + return _status4 + } + _status5 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status5 != REG_OK { + return _status5 + } + _status6 = _tre_stack_push_voidptr(tls, stack, (*Ttre_union_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status6 != REG_OK { + return _status6 + } + _status7 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status7 != REG_OK { + return _status7 + } + case int32(_CATENATION): + /* Compute the attributes for the two subtrees, and after that + for this node. */ + _status8 = _tre_stack_push_voidptr(tls, stack, node) + if _status8 != REG_OK { + return _status8 + } + _status9 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_CATENATION)) + if _status9 != REG_OK { + return _status9 + } + _status10 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fright) + if _status10 != REG_OK { + return _status10 + } + _status11 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status11 != REG_OK { + return _status11 + } + _status12 = _tre_stack_push_voidptr(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Fleft) + if _status12 != REG_OK { + return _status12 + } + _status13 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status13 != REG_OK { + return _status13 + } + case int32(_ITERATION): + /* Compute the attributes for the subtree, and after that for + this node. */ + _status14 = _tre_stack_push_voidptr(tls, stack, node) + if _status14 != REG_OK { + return _status14 + } + _status15 = _tre_stack_push_int(tls, stack, int32(_NFL_POST_ITERATION)) + if _status15 != REG_OK { + return _status15 + } + _status16 = _tre_stack_push_voidptr(tls, stack, (*Ttre_iteration_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj)).Farg) + if _status16 != REG_OK { + return _status16 + } + _status17 = _tre_stack_push_int(tls, stack, int32(_NFL_RECURSE)) + if _status17 != REG_OK { + return _status17 + } + break + } + case int32(_NFL_POST_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Fnullable != 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Fnullable != 0) + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Ffirstpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_union_t)(unsafe.Pointer(uni)).Fright)).Flastpos, UintptrFromInt32(0), 0) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + case int32(_NFL_POST_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmin == 0 || (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Fnullable != 0 { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = int32(1) + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = 0 + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos + case int32(_NFL_POST_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fnullable = BoolInt32((*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 && (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0) + /* Compute firstpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Fnullable != 0 { + /* The left side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ffirstpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Ffirstpos + } + /* Compute lastpos. */ + if (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Fnullable != 0 { + /* The right side matches the empty string. Make a first pass + with tre_match_empty() to get the number of tags and + parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, UintptrFromInt32(0), UintptrFromInt32(0), bp) + if status != REG_OK { + return status + } + /* Allocate arrays for the tags and parameters. */ + tags = Xmalloc(tls, uint64(4)*uint64(*(*int32)(unsafe.Pointer(bp))+Int32FromInt32(1))) + if !(tags != 0) { + return int32(REG_ESPACE) + } + *(*int32)(unsafe.Pointer(tags)) = -int32(1) + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + /* Second pass with tre_mach_empty() to get the list of + tags and parameters. */ + status = _tre_match_empty(tls, stack, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, tags, bp+4, UintptrFromInt32(0)) + if status != REG_OK { + Xfree(tls, tags) + return status + } + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = _tre_set_union(tls, mem, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos, tags, *(*int32)(unsafe.Pointer(bp + 4))) + Xfree(tls, tags) + if !((*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos != 0) { + return int32(REG_ESPACE) + } + } else { + (*Ttre_ast_node_t)(unsafe.Pointer(node)).Flastpos = (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Flastpos + } + default: + break + } + } + return REG_OK +} + +// C documentation +// +// /* Adds a transition from each position in `p1' to each position in `p2'. */ +func _tre_make_trans(tls *TLS, p1 uintptr, p2 uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var dup, i, j, k, l, prev_p2_pos, v1, v2, v6 int32 + var orig_p2, trans uintptr + _, _, _, _, _, _, _, _, _, _, _ = dup, i, j, k, l, orig_p2, prev_p2_pos, trans, v1, v2, v6 + orig_p2 = p2 + if transitions != UintptrFromInt32(0) { + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + prev_p2_pos = -int32(1) + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + /* Optimization: if this position was already handled, skip it. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition == prev_p2_pos { + p2 += 56 + continue + } + prev_p2_pos = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + /* Set `trans' to point to the next unused transition from + position `p1->position'. */ + trans = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4)))*56 + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != UintptrFromInt32(0) { + trans += 56 + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate == UintptrFromInt32(0) { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans + UintptrFromInt32(1)*56)).Fstate = UintptrFromInt32(0) + } + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_min = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_min) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fcode_max = uint32((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fcode_max) + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition)*4)))*56 + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass != 0 { + v1 = int32(ASSERT_CHAR_CLASS) + } else { + v1 = 0 + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + v2 = int32(ASSERT_CHAR_CLASS_NEG) + } else { + v2 = 0 + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fassertions | (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fassertions | v1 | v2 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref >= 0 { + *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fu)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fbackref + *(*int32)(unsafe.Pointer(trans + 32)) |= int32(ASSERT_BACKREF) + } else { + *(*Ttre_ctype_t)(unsafe.Pointer(trans + 40)) = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fclass + } + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes != UintptrFromInt32(0) { + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + goto _3 + _3: + ; + i++ + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = Xmalloc(tls, uint64(8)*uint64(i+Int32FromInt32(1))) + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + i = 0 + for { + if !(*(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) != Uint64FromInt32(0)) { + break + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fneg_classes + uintptr(i)*8)) + goto _4 + _4: + ; + i++ + } + *(*Ttre_ctype_t)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes + uintptr(i)*8)) = Uint64FromInt32(0) + } else { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fneg_classes = UintptrFromInt32(0) + } + /* Find out how many tags this transition has. */ + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + i++ + } + } + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + j++ + } + } + /* If we are overwriting a transition, free the old tag array. */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = UintptrFromInt32(0) + /* If there were any tags, allocate an array and fill it. */ + if i+j > 0 { + (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags = Xmalloc(tls, uint64(4)*uint64(i+j+Int32FromInt32(1))) + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0) { + return int32(REG_ESPACE) + } + i = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) >= 0 { + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Ftags + uintptr(i)*4)) + i++ + } + } + l = i + j = 0 + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) >= 0 { + /* Don't add duplicates. */ + dup = 0 + k = 0 + for { + if !(k < i) { + break + } + if *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(k)*4)) == *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) { + dup = int32(1) + break + } + goto _5 + _5: + ; + k++ + } + if !(dup != 0) { + v6 = l + l++ + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(v6)*4)) = *(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Ftags + uintptr(j)*4)) + } + j++ + } + } + *(*int32)(unsafe.Pointer((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags + uintptr(l)*4)) = -int32(1) + } + p2 += 56 + } + p1 += 56 + } + } else { + /* Compute a maximum limit for the number of transitions leaving + from each state. */ + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition >= 0 { + p2 = orig_p2 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p2)).Fposition >= 0 { + *(*int32)(unsafe.Pointer(counts + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p1)).Fposition)*4))++ + p2 += 56 + } + p1 += 56 + } + } + return REG_OK +} + +// C documentation +// +// /* Converts the syntax tree to a TNFA. All the transitions in the TNFA are +// labelled with one character range (there are no transitions on empty +// strings). The TNFA takes O(n^2) space in the worst case, `n' is size of +// the regexp. */ +func _tre_ast_to_tnfa(tls *TLS, node uintptr, transitions uintptr, counts uintptr, offs uintptr) (r Treg_errcode_t) { + var cat, iter, uni uintptr + var errcode Treg_errcode_t + _, _, _, _ = cat, errcode, iter, uni + errcode = REG_OK + /* XXX - recurse using a stack!. */ + switch (*Ttre_ast_node_t)(unsafe.Pointer(node)).Ftype1 { + case int32(_LITERAL): + case int32(_UNION): + uni = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_union_t)(unsafe.Pointer(uni)).Fright, transitions, counts, offs) + case int32(_CATENATION): + cat = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + /* Add a transition from each position in cat->left->lastpos + to each position in cat->right->firstpos. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fleft, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_catenation_t)(unsafe.Pointer(cat)).Fright, transitions, counts, offs) + case int32(_ITERATION): + iter = (*Ttre_ast_node_t)(unsafe.Pointer(node)).Fobj + if (*Ttre_iteration_t)(unsafe.Pointer(iter)).Fmax == -int32(1) { + /* Add a transition from each last position in the iterated + expression to each first position. */ + errcode = _tre_make_trans(tls, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Flastpos, (*Ttre_ast_node_t)(unsafe.Pointer((*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg)).Ffirstpos, transitions, counts, offs) + if errcode != REG_OK { + return errcode + } + } + errcode = _tre_ast_to_tnfa(tls, (*Ttre_iteration_t)(unsafe.Pointer(iter)).Farg, transitions, counts, offs) + break + } + return errcode +} + +func Xregcomp(tls *TLS, preg uintptr, regex uintptr, cflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v regex=%v cflags=%v, (%v:)", tls, preg, regex, cflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var add, i, j, v1 int32 + var counts, initial, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v2 uintptr + var errcode Treg_errcode_t + var mem Ttre_mem_t + var _ /* parse_ctx at bp+0 */ Ttre_parse_ctx_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = add, counts, errcode, i, initial, j, mem, offs, p, stack, submatch_data, tag_directions, tmp_ast_l, tmp_ast_r, tnfa, transitions, tree, v1, v2 + counts = UintptrFromInt32(0) + offs = UintptrFromInt32(0) + add = 0 + tnfa = UintptrFromInt32(0) + tag_directions = UintptrFromInt32(0) + /* Allocate a stack used throughout the compilation process for various + purposes. */ + stack = _tre_stack_new(tls, int32(512), int32(1024000), int32(128)) + if !(stack != 0) { + return int32(REG_ESPACE) + } + /* Allocate a fast memory allocator. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + if !(mem != 0) { + _tre_stack_destroy(tls, stack) + return int32(REG_ESPACE) + } + /* Parse the regexp. */ + Xmemset(tls, bp, 0, uint64(56)) + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmem = mem + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstack = stack + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fstart = regex + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fcflags = cflags + (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref = -int32(1) + errcode = _tre_parse(tls, bp) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub = uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id - int32(1)) + tree = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fn + /* Referring to nonexistent subexpressions is illegal. */ + if (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref > int32((*Tregex_t)(unsafe.Pointer(preg)).Fre_nsub) { + errcode = int32(REG_ESUBREG) + if int32(1) != 0 { + goto error_exit + } + } + /* Allocate the TNFA struct. */ + tnfa = Xcalloc(tls, uint64(1), uint64(104)) + if tnfa == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs = BoolInt32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fmax_backref >= 0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_approx = 0 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches = uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id) + /* Set up tags for submatch addressing. If REG_NOSUB is set and the + regexp does not have back references, this can be skipped. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 || !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Figure out how many tags we will need. */ + errcode = _tre_add_tags(tls, UintptrFromInt32(0), stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 { + tag_directions = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + if tag_directions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions = tag_directions + Xmemset(tls, tag_directions, -int32(1), uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags+Int32FromInt32(1))) + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags = Xcalloc(tls, uint64(uint32((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)*uint32(2)+uint32(1)), uint64(4)) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + submatch_data = Xcalloc(tls, uint64(uint32((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fsubmatch_id)), uint64(16)) + if submatch_data == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data = submatch_data + errcode = _tre_add_tags(tls, mem, stack, tree, tnfa) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + } + /* Expand iteration nodes. */ + errcode = _tre_expand_ast(tls, mem, stack, tree, bp+44, tag_directions) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + /* Add a dummy node for the final state. + XXX - For certain patterns this dummy node can be optimized away, + for example "a*" or "ab*". Figure out a simple way to detect + this possibility. */ + tmp_ast_l = tree + v2 = bp + 44 + v1 = *(*int32)(unsafe.Pointer(v2)) + *(*int32)(unsafe.Pointer(v2))++ + tmp_ast_r = _tre_ast_new_literal(tls, mem, 0, 0, v1) + if tmp_ast_r == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + tree = _tre_ast_new_catenation(tls, mem, tmp_ast_l, tmp_ast_r) + if tree == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + errcode = _tre_compute_nfl(tls, mem, stack, tree) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + counts = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if counts == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + offs = Xmalloc(tls, uint64(4)*uint64((*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition)) + if offs == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _3 + _3: + ; + i++ + } + _tre_ast_to_tnfa(tls, tree, UintptrFromInt32(0), counts, UintptrFromInt32(0)) + add = 0 + i = 0 + for { + if !(i < (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition) { + break + } + *(*int32)(unsafe.Pointer(offs + uintptr(i)*4)) = add + add += *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) + int32(1) + *(*int32)(unsafe.Pointer(counts + uintptr(i)*4)) = 0 + goto _4 + _4: + ; + i++ + } + transitions = Xcalloc(tls, uint64(uint32(add)+uint32(1)), uint64(56)) + if transitions == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions = transitions + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + errcode = _tre_ast_to_tnfa(tls, tree, transitions, counts, offs) + if errcode != REG_OK { + errcode = errcode + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars = UintptrFromInt32(0) + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + i = 0 + for (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0 { + i++ + p += 56 + } + initial = Xcalloc(tls, uint64(uint32(i)+uint32(1)), uint64(56)) + if initial == UintptrFromInt32(0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial = initial + i = 0 + p = (*Ttre_ast_node_t)(unsafe.Pointer(tree)).Ffirstpos + for { + if !((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition >= 0) { + break + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition)*4)))*56 + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate_id = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fposition + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = UintptrFromInt32(0) + /* Copy the arrays p->tags, and p->params, they are allocated + from a tre_mem object. */ + if (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags != 0 { + j = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags + uintptr(j)*4)) >= 0) { + break + } + goto _6 + _6: + ; + j++ + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags = Xmalloc(tls, uint64(4)*uint64(j+Int32FromInt32(1))) + if !((*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags != 0) { + errcode = int32(REG_ESPACE) + if int32(1) != 0 { + goto error_exit + } + } + Xmemcpy(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Ftags, (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Ftags, uint64(4)*uint64(j+Int32FromInt32(1))) + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fassertions = (*Ttre_pos_and_tags_t)(unsafe.Pointer(p)).Fassertions + i++ + goto _5 + _5: + ; + p += 56 + } + (*(*Ttre_tnfa_transition_t)(unsafe.Pointer(initial + uintptr(i)*56))).Fstate = UintptrFromInt32(0) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions = uint32(add) + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal = transitions + uintptr(*(*int32)(unsafe.Pointer(offs + uintptr((*(*Ttre_pos_and_tags_t)(unsafe.Pointer((*Ttre_ast_node_t)(unsafe.Pointer(tree)).Flastpos))).Fposition)*4)))*56 + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states = (*(*Ttre_parse_ctx_t)(unsafe.Pointer(bp))).Fposition + (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags = cflags + X__tre_mem_destroy(tls, mem) + _tre_stack_destroy(tls, stack) + Xfree(tls, counts) + Xfree(tls, offs) + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + return REG_OK + goto error_exit +error_exit: + ; + /* Free everything that was allocated and return the error code. */ + X__tre_mem_destroy(tls, mem) + if stack != UintptrFromInt32(0) { + _tre_stack_destroy(tls, stack) + } + if counts != UintptrFromInt32(0) { + Xfree(tls, counts) + } + if offs != UintptrFromInt32(0) { + Xfree(tls, offs) + } + (*Tregex_t)(unsafe.Pointer(preg)).F__opaque = tnfa + Xregfree(tls, preg) + return errcode +} + +func Xregfree(tls *TLS, preg uintptr) { + if __ccgo_strace { + trc("tls=%v preg=%v, (%v:)", tls, preg, origin(2)) + } + var i uint32 + var tnfa, trans uintptr + _, _, _ = i, tnfa, trans + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + if !(tnfa != 0) { + return + } + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_transitions) { + break + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fstate != 0 { + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Ftags) + } + if (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes != 0 { + Xfree(tls, (*(*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions + uintptr(i)*56))).Fneg_classes) + } + } + goto _1 + _1: + ; + i++ + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftransitions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial != 0 { + trans = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags != 0 { + Xfree(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans)).Ftags) + } + goto _2 + _2: + ; + trans += 56 + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data != 0 { + i = uint32(0) + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches) { + break + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents != 0 { + Xfree(tls, (*(*Ttre_submatch_data_t)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + uintptr(i)*16))).Fparents) + } + goto _3 + _3: + ; + i++ + } + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffirstpos_chars) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags != 0 { + Xfree(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags) + } + Xfree(tls, tnfa) +} + +/* Error message strings for error codes listed in `regex.h'. This list + needs to be in sync with the codes listed there, naturally. */ + +/* Converted to single string by Rich Felker to remove the need for + * data relocations at runtime, 27 Feb 2006. */ + +var _messages = [286]uint8{'N', 'o', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'N', 'o', ' ', 'm', 'a', 't', 'c', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'r', 'e', 'g', 'e', 'x', 'p', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'o', 'l', 'l', 'a', 't', 'i', 'n', 'g', ' ', 'e', 'l', 'e', 'm', 'e', 'n', 't', 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'c', 'l', 'a', 's', 's', ' ', 'n', 'a', 'm', 'e', 0, 'T', 'r', 'a', 'i', 'l', 'i', 'n', 'g', ' ', 'b', 'a', 'c', 'k', 's', 'l', 'a', 's', 'h', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'b', 'a', 'c', 'k', ' ', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ']', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', ')', '\'', 0, 'M', 'i', 's', 's', 'i', 'n', 'g', ' ', '\'', '}', '\'', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', ' ', 'o', 'f', ' ', '{', '}', 0, 'I', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', ' ', 'r', 'a', 'n', 'g', 'e', 0, 'O', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0, 'R', 'e', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', ' ', 'n', 'o', 't', ' ', 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'd', ' ', 'b', 'y', ' ', 'v', 'a', 'l', 'i', 'd', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 0, 0, 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r'} + +func Xregerror(tls *TLS, e int32, preg uintptr, buf uintptr, size Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v e=%v preg=%v buf=%v size=%v, (%v:)", tls, e, preg, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var s uintptr + _ = s + s = uintptr(unsafe.Pointer(&_messages)) + for { + if !(e != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + e-- + s += uintptr(Xstrlen(tls, s) + uint64(1)) + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + s++ + } + s = X__lctrans_cur(tls, s) + return uint64(int32(1) + Xsnprintf(tls, buf, size, __ccgo_ts+15, VaList(bp+8, s))) +} + +const tre_bt_mem_alloc = 0 +const tre_bt_mem_destroy = 0 +const tre_bt_mem_new = 0 + +/*********************************************************************** + from tre-match-utils.h +***********************************************************************/ + +// C documentation +// +// /* Returns 1 if `t1' wins `t2', 0 otherwise. */ +func _tre_tag_order(tls *TLS, num_tags int32, tag_directions uintptr, t1 uintptr, t2 uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(i < num_tags) { + break + } + if *(*Ttre_tag_direction_t)(unsafe.Pointer(tag_directions + uintptr(i)*4)) == int32(_TRE_TAG_MINIMIZE) { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } else { + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) > *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return int32(1) + } + if *(*Tregoff_t)(unsafe.Pointer(t1 + uintptr(i)*8)) < *(*Tregoff_t)(unsafe.Pointer(t2 + uintptr(i)*8)) { + return 0 + } + } + goto _1 + _1: + ; + i++ + } + /* assert(0);*/ + return 0 +} + +func _tre_neg_char_classes_match(tls *TLS, classes uintptr, wc Ttre_cint_t, icase int32) (r int32) { + for *(*Ttre_ctype_t)(unsafe.Pointer(classes)) != Uint64FromInt32(0) { + if !(icase != 0) && Xiswctype(tls, wc, *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || icase != 0 && (Xiswctype(tls, Xtowupper(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0 || Xiswctype(tls, Xtowlower(tls, wc), *(*Ttre_ctype_t)(unsafe.Pointer(classes))) != 0) { + return int32(1) + } else { + classes += 8 + } + } + return 0 /* No match. */ +} + +/*********************************************************************** + from tre-match-parallel.c +***********************************************************************/ + +/* + This algorithm searches for matches basically by reading characters + in the searched string one by one, starting at the beginning. All + matching paths in the TNFA are traversed in parallel. When two or + more paths reach the same state, exactly one is chosen according to + tag ordering rules; if returning submatches is not required it does + not matter which path is chosen. + + The worst case time required for finding the leftmost and longest + match, or determining that there is no match, is always linearly + dependent on the length of the text being searched. + + This algorithm cannot handle TNFAs with back referencing nodes. + See `tre-match-backtrack.c'. +*/ + +type Ttre_tnfa_reach_t = struct { + Fstate uintptr + Ftags uintptr +} + +type Ttre_reach_pos_t = struct { + Fpos Tregoff_t + Ftags uintptr +} + +func _tre_tnfa_run_parallel(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var buf, reach, reach_i, reach_next, reach_next_i, reach_pos, str_byte, tag_i, tmp_buf, tmp_iptr, tmp_tags, trans_i uintptr + var end, i, new_match, num_tags, reg_newline, reg_notbol, reg_noteol, skip, start, v18 int32 + var match_eo, pos, pos_add_next, v10, v7 Tregoff_t + var pbytes, rbytes, tbytes, total_bytes, xbytes Tsize_t + var prev_c Ttre_char_t + var ret Treg_errcode_t + var v1, v2, v3, v4 uint64 + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = buf, end, i, match_eo, new_match, num_tags, pbytes, pos, pos_add_next, prev_c, rbytes, reach, reach_i, reach_next, reach_next_i, reach_pos, reg_newline, reg_notbol, reg_noteol, ret, skip, start, str_byte, tag_i, tbytes, tmp_buf, tmp_iptr, tmp_tags, total_bytes, trans_i, xbytes, v1, v10, v18, v2, v3, v4, v7 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = int64(-int32(1)) + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + match_eo = int64(-int32(1)) /* end offset of match (-1 if no match found yet) */ + new_match = 0 + tmp_tags = UintptrFromInt32(0) + if !(match_tags != 0) { + num_tags = 0 + } else { + num_tags = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags + } + /* Allocate memory for temporary data required for matching. This needs to + be done for every matching operation to be thread safe. This allocates + everything in a single large block with calloc(). */ + /* Ensure that tbytes and xbytes*num_states cannot overflow, and that + * they don't contribute more than 1/8 of SIZE_MAX to total_bytes. */ + if uint64(num_tags) > uint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) { + return int32(REG_ESPACE) + } + /* Likewise check rbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+int32(1)) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Likewise check pbytes. */ + if uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) > Uint64FromUint64(0xffffffffffffffff)/(Uint64FromInt32(8)*Uint64FromInt64(16)) { + return int32(REG_ESPACE) + } + /* Compute the length of the block we need. */ + tbytes = uint64(8) * uint64(num_tags) + rbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states+Int32FromInt32(1)) + pbytes = uint64(16) * uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) + xbytes = uint64(8) * uint64(num_tags) + total_bytes = (Uint64FromInt64(8)-Uint64FromInt32(1))*Uint64FromInt32(4) + (rbytes+xbytes*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states))*uint64(2) + tbytes + pbytes + /* Allocate the memory. */ + buf = Xcalloc(tls, total_bytes, uint64(1)) + if buf == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + /* Get the various pointers within tmp_buf (properly aligned). */ + tmp_tags = buf + tmp_buf = buf + uintptr(tbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v1 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v1 = uint64(0) + } + tmp_buf += uintptr(v1) + reach_next = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v2 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v2 = uint64(0) + } + tmp_buf += uintptr(v2) + reach = tmp_buf + tmp_buf += uintptr(rbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v3 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v3 = uint64(0) + } + tmp_buf += uintptr(v3) + reach_pos = tmp_buf + tmp_buf += uintptr(pbytes) + if uint64(int64(tmp_buf))%uint64(8) != 0 { + v4 = uint64(8) - uint64(int64(tmp_buf))%uint64(8) + } else { + v4 = uint64(0) + } + tmp_buf += uintptr(v4) + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + (*(*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next + uintptr(i)*16))).Ftags = tmp_buf + tmp_buf += uintptr(xbytes) + goto _5 + _5: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr(i)*16))).Fpos = int64(-int32(1)) + goto _6 + _6: + ; + i++ + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v7 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v7 + if v7 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos = 0 + reach_next_i = reach_next + for int32(1) != 0 { + /* If no match found yet, add the initial states to `reach_next'. */ + if match_eo < 0 { + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != UintptrFromInt32(0) { + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + trans_i += 56 + continue + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) = int64(-int32(1)) + goto _8 + _8: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != 0 { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _9 + _9: + ; + i++ + } + } + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + reach_next_i += 16 + } + trans_i += 56 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } else { + if num_tags == 0 || reach_next_i == reach_next { + /* We have found a match. */ + break + } + } + /* Check for end of string. */ + if !(*(*Ttre_char_t)(unsafe.Pointer(bp)) != 0) { + break + } + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v10 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v10 + if v10 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + /* For each state in `reach', weed out states that don't fulfill the + minimal matching conditions. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_minimals != 0 && new_match != 0 { + new_match = 0 + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + skip = 0 + i = 0 + for { + if !(*(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) >= 0) { + break + } + end = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i)*4)) + start = *(*int32)(unsafe.Pointer((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fminimal_tags + uintptr(i+int32(1))*4)) + if end >= num_tags { + skip = int32(1) + break + } else { + if *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(start)*8)) == *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(start)*8)) && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(end)*8)) < *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(end)*8)) { + skip = int32(1) + break + } + } + goto _12 + _12: + ; + i += int32(2) + } + if !(skip != 0) { + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags = tmp_iptr + reach_next_i += 16 + } + goto _11 + _11: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + /* Swap `reach' and `reach_next'. */ + reach_i = reach + reach = reach_next + reach_next = reach_i + } + /* For each state in `reach' see if there is a transition leaving with + the current input symbol to a state not yet in `reach_next', and + add the destination states to `reach_next'. */ + reach_next_i = reach_next + reach_i = reach + for { + if !((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate != 0) { + break + } + trans_i = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Fstate + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + /* Does this transition match the input symbol? */ + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _14 + } + /* Compute the tags after this transition. */ + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_i)).Ftags + uintptr(i)*8)) + goto _15 + _15: + ; + i++ + } + tag_i = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tag_i != UintptrFromInt32(0) { + for *(*int32)(unsafe.Pointer(tag_i)) >= 0 { + if *(*int32)(unsafe.Pointer(tag_i)) < num_tags { + *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(*(*int32)(unsafe.Pointer(tag_i)))*8)) = pos + } + tag_i += 4 + } + } + if (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos < pos { + /* Found an unvisited node. */ + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + tmp_iptr = (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags = tmp_tags + tmp_tags = tmp_iptr + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Fpos = pos + (*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags = reach_next_i + 8 + if (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal && (match_eo == int64(-int32(1)) || num_tags > 0 && *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags)) <= *(*Tregoff_t)(unsafe.Pointer(match_tags))) { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Ftags + uintptr(i)*8)) + goto _16 + _16: + ; + i++ + } + } + reach_next_i += 16 + } else { + /* Another path has also reached this state. We choose + the winner by examining the tag values for both + paths. */ + if _tre_tag_order(tls, num_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tmp_tags, *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags))) != 0 { + /* The new path wins. */ + tmp_iptr = *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) + *(*uintptr)(unsafe.Pointer((*(*Ttre_reach_pos_t)(unsafe.Pointer(reach_pos + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*16))).Ftags)) = tmp_tags + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + match_eo = pos + new_match = int32(1) + i = 0 + for { + if !(i < num_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = *(*Tregoff_t)(unsafe.Pointer(tmp_tags + uintptr(i)*8)) + goto _17 + _17: + ; + i++ + } + } + tmp_tags = tmp_iptr + } + } + } + goto _14 + _14: + ; + trans_i += 56 + } + goto _13 + _13: + ; + reach_i += 16 + } + (*Ttre_tnfa_reach_t)(unsafe.Pointer(reach_next_i)).Fstate = UintptrFromInt32(0) + } + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + if match_eo >= 0 { + v18 = REG_OK + } else { + v18 = int32(REG_NOMATCH) + } + ret = v18 + goto error_exit +error_exit: + ; + Xfree(tls, buf) + return ret +} + +/*********************************************************************** + from tre-match-backtrack.c +***********************************************************************/ + +/* + This matcher is for regexps that use back referencing. Regexp matching + with back referencing is an NP-complete problem on the number of back + references. The easiest way to match them is to use a backtracking + routine which basically goes through all possible paths in the TNFA + and chooses the one which results in the best (leftmost and longest) + match. This can be spectacularly expensive and may run out of stack + space, but there really is no better known generic algorithm. Quoting + Henry Spencer from comp.compilers: + + + POSIX.2 REs require longest match, which is really exciting to + implement since the obsolete ("basic") variant also includes + \. I haven't found a better way of tackling this than doing + a preliminary match using a DFA (or simulation) on a modified RE + that just replicates subREs for \, and then doing a + backtracking match to determine whether the subRE matches were + right. This can be rather slow, but I console myself with the + thought that people who use \ deserve very slow execution. + (Pun unintentional but very appropriate.) + +*/ + +type Ttre_backtrack_item_t = struct { + Fpos Tregoff_t + Fstr_byte uintptr + Fstate uintptr + Fstate_id int32 + Fnext_c int32 + Ftags uintptr +} + +type Ttre_backtrack_t = uintptr + +type Ttre_backtrack_struct = struct { + Fitem Ttre_backtrack_item_t + Fprev uintptr + Fnext uintptr +} + +func _tre_tnfa_run_backtrack(tls *TLS, tnfa uintptr, string1 uintptr, match_tags uintptr, eflags int32, match_end_ofs uintptr) (r Treg_errcode_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var bt, empty_br_match, i, i1, i2, i3, i4, next_c_start, reg_newline, reg_notbol, reg_noteol, result, ret, v20 int32 + var bt_len, eo, match_eo, pos, pos_add_next, pos_start, so, v11, v12, v3 Tregoff_t + var mem Ttre_mem_t + var next_state, next_tags, pmatch, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v18, v6 uintptr + var prev_c Ttre_char_t + var s, s1, stack Ttre_backtrack_t + var _ /* next_c at bp+0 */ Ttre_char_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = bt, bt_len, empty_br_match, eo, i, i1, i2, i3, i4, match_eo, mem, next_c_start, next_state, next_tags, pmatch, pos, pos_add_next, pos_start, prev_c, reg_newline, reg_notbol, reg_noteol, result, ret, s, s1, so, stack, state, states_seen, str_byte, str_byte_start, tags, tmp, tmp1, trans_i, v11, v12, v18, v20, v3, v6 + /* State variables required by GET_NEXT_WCHAR. */ + prev_c = 0 + *(*Ttre_char_t)(unsafe.Pointer(bp)) = 0 + str_byte = string1 + pos = 0 + pos_add_next = int64(1) + reg_notbol = eflags & int32(REG_NOTBOL) + reg_noteol = eflags & int32(REG_NOTEOL) + reg_newline = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & int32(REG_NEWLINE) + pos_start = int64(-int32(1)) + /* End offset of best match so far, or -1 if no match found yet. */ + match_eo = int64(-int32(1)) + tags = UintptrFromInt32(0) + states_seen = UintptrFromInt32(0) + /* Memory allocator to for allocating the backtracking stack. */ + mem = X__tre_mem_new_impl(tls, 0, UintptrFromInt32(0)) + pmatch = UintptrFromInt32(0) + if !(mem != 0) { + return int32(REG_ESPACE) + } + stack = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(stack != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags != 0 { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !(tags != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches != 0 { + pmatch = Xmalloc(tls, uint64(16)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches)) + if !(pmatch != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states != 0 { + states_seen = Xmalloc(tls, uint64(4)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states)) + if !(states_seen != 0) { + ret = int32(REG_ESPACE) + goto error_exit + } + } + goto retry +retry: + ; + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i)*8)) = int64(-int32(1)) + if match_tags != 0 { + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i)*8)) = int64(-int32(1)) + } + goto _1 + _1: + ; + i++ + } + i = 0 + for { + if !(i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_states) { + break + } + *(*int32)(unsafe.Pointer(states_seen + uintptr(i)*4)) = 0 + goto _2 + _2: + ; + i++ + } + state = UintptrFromInt32(0) + pos = pos_start + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v3 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v3 + if v3 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + pos_start = pos + next_c_start = *(*Ttre_char_t)(unsafe.Pointer(bp)) + str_byte_start = str_byte + /* Handle initial states. */ + next_tags = UintptrFromInt32(0) + trans_i = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Finitial + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0))) { + goto _4 + } + if state == UintptrFromInt32(0) { + /* Start from this state. */ + state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Backtrack to this state. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s + stack = s + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i1 = 0 + for { + if !(i1 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i1)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i1)*8)) + goto _5 + _5: + ; + i1++ + } + tmp = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + if tmp != 0 { + for *(*int32)(unsafe.Pointer(tmp)) >= 0 { + v6 = tmp + tmp += 4 + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(v6)))*8)) = pos + } + } + } + goto _4 + _4: + ; + trans_i += 56 + } + if next_tags != 0 { + for { + if !(*(*int32)(unsafe.Pointer(next_tags)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(next_tags)))*8)) = pos + goto _7 + _7: + ; + next_tags += 4 + } + } + if state == UintptrFromInt32(0) { + goto backtrack + } +_9: + ; + if !(int32(1) != 0) { + goto _8 + } + if state == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ffinal { + if match_eo < pos || match_eo == pos && match_tags != 0 && _tre_tag_order(tls, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Ftag_directions, tags, match_tags) != 0 { + /* This match wins the previous match. */ + match_eo = pos + if match_tags != 0 { + i2 = 0 + for { + if !(i2 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(match_tags + uintptr(i2)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i2)*8)) + goto _10 + _10: + ; + i2++ + } + } + } + /* Our TNFAs never have transitions leaving from the final state, + so we jump right to backtracking. */ + goto backtrack + } + /* Go to the next character in the input string. */ + empty_br_match = 0 + trans_i = state + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0 && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_BACKREF) != 0 { + bt = *(*int32)(unsafe.Pointer(&(*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fu)) + /* Get the substring we need to match against. Remember to + turn off REG_NOSUB temporarily. */ + _tre_fill_pmatch(tls, uint64(bt+int32(1)), pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags & ^Int32FromInt32(REG_NOSUB), tnfa, tags, pos) + so = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_so + eo = (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(bt)*16))).Frm_eo + bt_len = eo - so + result = Xstrncmp(tls, string1+uintptr(so), str_byte-uintptr(1), uint64(bt_len)) + if result == 0 { + /* Back reference matched. Check for infinite loop. */ + if bt_len == 0 { + empty_br_match = int32(1) + } + if empty_br_match != 0 && *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) != 0 { + goto backtrack + } + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id)*4)) = empty_br_match + /* Advance in input string and resync `prev_c', `next_c' + and pos. */ + str_byte += uintptr(bt_len - int64(1)) + pos += bt_len - int64(1) + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v11 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v11 + if v11 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } else { + goto backtrack + } + } else { + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto backtrack + } + /* Read the next character. */ + prev_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + pos += pos_add_next + v12 = int64(Xmbtowc(tls, bp, str_byte, uint64(MB_LEN_MAX))) + pos_add_next = v12 + if v12 <= 0 { + if pos_add_next < 0 { + ret = int32(REG_NOMATCH) + goto error_exit + } else { + pos_add_next++ + } + } + str_byte += uintptr(pos_add_next) + } + next_state = UintptrFromInt32(0) + trans_i = state + for { + if !((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate != 0) { + break + } + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_min <= uint32(prev_c) && (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fcode_max >= uint32(prev_c) { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions != 0 && ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOL) != 0 && (pos > 0 || reg_notbol != 0) && (prev_c != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOL) != 0 && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') || reg_noteol != 0) && (*(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\n') || !(reg_newline != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_BOW) != 0 && (prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0 || !(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_EOW) != 0 && (!(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) || (*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB) != 0 && (pos != 0 && *(*Ttre_char_t)(unsafe.Pointer(bp)) != int32('\000') && BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) == BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_AT_WB_NEG) != 0 && (pos == 0 || *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') || BoolInt32(prev_c == int32('_') || Xiswalnum(tls, uint32(prev_c)) != 0) != BoolInt32(*(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('_') || Xiswalnum(tls, uint32(*(*Ttre_char_t)(unsafe.Pointer(bp)))) != 0)) || ((*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && !((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&Int32FromInt32(REG_ICASE) != 0) && !(Xiswctype(tls, uint32(prev_c), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS) != 0 && (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE) != 0 && !(Xiswctype(tls, Xtowlower(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) && !(Xiswctype(tls, Xtowupper(tls, uint32(prev_c)), *(*Ttre_ctype_t)(unsafe.Pointer(trans_i + 40))) != 0) || (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fassertions&int32(ASSERT_CHAR_CLASS_NEG) != 0 && _tre_neg_char_classes_match(tls, (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fneg_classes, uint32(prev_c), (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_ICASE)) != 0)) { + goto _13 + } + if next_state == UintptrFromInt32(0) { + /* First matching transition. */ + next_state = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + next_tags = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + } else { + /* Second matching transition. We may need to backtrack here + to take this transition instead of the first one, so we + push this transition in the backtracking stack so we can + jump back here if needed. */ + if !((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext != 0) { + s1 = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(56)) + if !(s1 != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fprev = stack + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fnext = UintptrFromInt32(0) + (*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags = X__tre_mem_alloc_impl(tls, mem, 0, UintptrFromInt32(0), 0, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if !((*Ttre_backtrack_struct)(unsafe.Pointer(s1)).Fitem.Ftags != 0) { + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return int32(REG_ESPACE) + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext = s1 + stack = s1 + } else { + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fnext + } + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos = pos + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte = str_byte + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Fstate_id + (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c = *(*Ttre_char_t)(unsafe.Pointer(bp)) + i3 = 0 + for { + if !(i3 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i3)*8)) = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i3)*8)) + goto _14 + _14: + ; + i3++ + } + tmp1 = (*Ttre_tnfa_transition_t)(unsafe.Pointer(trans_i)).Ftags + for { + if !(tmp1 != 0 && *(*int32)(unsafe.Pointer(tmp1)) >= 0) { + break + } + *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(*(*int32)(unsafe.Pointer(tmp1)))*8)) = pos + goto _15 + _15: + ; + tmp1 += 4 + } + } + } + goto _13 + _13: + ; + trans_i += 56 + } + if !(next_state != UintptrFromInt32(0)) { + goto _16 + } + /* Matching transitions were found. Take the first one. */ + state = next_state + /* Update the tag values. */ + if next_tags != 0 { + for *(*int32)(unsafe.Pointer(next_tags)) >= 0 { + v18 = next_tags + next_tags += 4 + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(*(*int32)(unsafe.Pointer(v18)))*8)) = pos + } + } + goto _17 +_16: + ; + goto backtrack +backtrack: + ; + /* A matching transition was not found. Try to backtrack. */ + if (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev != 0 { + if (*Ttre_tnfa_transition_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate)).Fassertions&int32(ASSERT_BACKREF) != 0 { + *(*int32)(unsafe.Pointer(states_seen + uintptr((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate_id)*4)) = 0 + } + pos = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fpos + str_byte = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstr_byte + state = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fstate + *(*Ttre_char_t)(unsafe.Pointer(bp)) = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Fnext_c + i4 = 0 + for { + if !(i4 < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags) { + break + } + *(*Tregoff_t)(unsafe.Pointer(tags + uintptr(i4)*8)) = *(*Tregoff_t)(unsafe.Pointer((*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fitem.Ftags + uintptr(i4)*8)) + goto _19 + _19: + ; + i4++ + } + stack = (*Ttre_backtrack_struct)(unsafe.Pointer(stack)).Fprev + } else { + if match_eo < 0 { + /* Try starting from a later position in the input string. */ + /* Check for end of string. */ + if *(*Ttre_char_t)(unsafe.Pointer(bp)) == int32('\000') { + goto _8 + } + *(*Ttre_char_t)(unsafe.Pointer(bp)) = next_c_start + str_byte = str_byte_start + goto retry + } else { + goto _8 + } + } +_17: + ; + goto _9 +_8: + ; + if match_eo >= 0 { + v20 = REG_OK + } else { + v20 = int32(REG_NOMATCH) + } + ret = v20 + *(*Tregoff_t)(unsafe.Pointer(match_end_ofs)) = match_eo + goto error_exit +error_exit: + ; + X__tre_mem_destroy(tls, mem) + if tags != 0 { + Xfree(tls, tags) + } + if pmatch != 0 { + Xfree(tls, pmatch) + } + if states_seen != 0 { + Xfree(tls, states_seen) + } + return ret +} + +/*********************************************************************** + from regexec.c +***********************************************************************/ + +// C documentation +// +// /* Fills the POSIX.2 regmatch_t array according to the TNFA tag and match +// endpoint values. */ +func _tre_fill_pmatch(tls *TLS, nmatch Tsize_t, pmatch uintptr, cflags int32, tnfa uintptr, tags uintptr, match_eo Tregoff_t) { + var i, j uint32 + var parents, submatch_data uintptr + var v1, v3 Tregoff_t + _, _, _, _, _, _ = i, j, parents, submatch_data, v1, v3 + i = uint32(0) + if match_eo >= 0 && !(cflags&Int32FromInt32(REG_NOSUB) != 0) { + /* Construct submatch offsets from the tags. */ + submatch_data = (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fsubmatch_data + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fso_tag)*8)) + } + if (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag == (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fend_tag { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = match_eo + } else { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = *(*Tregoff_t)(unsafe.Pointer(tags + uintptr((*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Feo_tag)*8)) + } + /* If either of the endpoints were not used, this submatch + was not part of the match. */ + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so == int64(-int32(1)) || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + v1 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v1 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v1 + } + i++ + } + /* Reset all submatches that are not within all of their parent + submatches. */ + i = uint32(0) + for i < (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_submatches && uint64(i) < nmatch { + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo == int64(-int32(1)) { + } + parents = (*(*Ttre_submatch_data_t)(unsafe.Pointer(submatch_data + uintptr(i)*16))).Fparents + if parents != UintptrFromInt32(0) { + j = uint32(0) + for { + if !(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)) >= 0) { + break + } + if (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so < (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_so || (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo > (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(*(*int32)(unsafe.Pointer(parents + uintptr(j)*4)))*16))).Frm_eo { + v3 = int64(-Int32FromInt32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = v3 + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = v3 + } + goto _2 + _2: + ; + j++ + } + } + i++ + } + } + for uint64(i) < nmatch { + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_so = int64(-int32(1)) + (*(*Tregmatch_t)(unsafe.Pointer(pmatch + uintptr(i)*16))).Frm_eo = int64(-int32(1)) + i++ + } +} + +/* + Wrapper functions for POSIX compatible regexp matching. +*/ + +func Xregexec(tls *TLS, preg uintptr, string1 uintptr, nmatch Tsize_t, pmatch uintptr, eflags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v preg=%v string1=%v nmatch=%v pmatch=%v eflags=%v, (%v:)", tls, preg, string1, nmatch, pmatch, eflags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var status Treg_errcode_t + var tags, tnfa uintptr + var _ /* eo at bp+0 */ Tregoff_t + _, _, _ = status, tags, tnfa + tnfa = (*Tregex_t)(unsafe.Pointer(preg)).F__opaque + tags = UintptrFromInt32(0) + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags&int32(REG_NOSUB) != 0 { + nmatch = uint64(0) + } + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags > 0 && nmatch > uint64(0) { + tags = Xmalloc(tls, uint64(8)*uint64((*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fnum_tags)) + if tags == UintptrFromInt32(0) { + return int32(REG_ESPACE) + } + } + /* Dispatch to the appropriate matcher. */ + if (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fhave_backrefs != 0 { + /* The regex has back references, use the backtracking matcher. */ + status = _tre_tnfa_run_backtrack(tls, tnfa, string1, tags, eflags, bp) + } else { + /* Exact matching, no back references, use the parallel matcher. */ + status = _tre_tnfa_run_parallel(tls, tnfa, string1, tags, eflags, bp) + } + if status == REG_OK { + /* A match was found, so fill the submatch registers. */ + _tre_fill_pmatch(tls, nmatch, pmatch, (*Ttre_tnfa_t)(unsafe.Pointer(tnfa)).Fcflags, tnfa, tags, *(*Tregoff_t)(unsafe.Pointer(bp))) + } + if tags != 0 { + Xfree(tls, tags) + } + return status +} + +/* + This memory allocator is for allocating small memory blocks efficiently + in terms of memory overhead and execution speed. The allocated blocks + cannot be freed individually, only all at once. There can be multiple + allocators, though. +*/ + +// C documentation +// +// /* Returns a new memory allocator or NULL if out of memory. */ +func X__tre_mem_new_impl(tls *TLS, provided int32, provided_block uintptr) (r Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v provided=%v provided_block=%v, (%v:)", tls, provided, provided_block, origin(2)) + defer func() { trc("-> %v", r) }() + } + var mem Ttre_mem_t + _ = mem + if provided != 0 { + mem = provided_block + Xmemset(tls, mem, 0, uint64(48)) + } else { + mem = Xcalloc(tls, uint64(1), uint64(48)) + } + if mem == UintptrFromInt32(0) { + return UintptrFromInt32(0) + } + return mem +} + +// C documentation +// +// /* Frees the memory allocator and all memory allocated with it. */ +func X__tre_mem_destroy(tls *TLS, mem Ttre_mem_t) { + if __ccgo_strace { + trc("tls=%v mem=%v, (%v:)", tls, mem, origin(2)) + } + var l, tmp uintptr + _, _ = l, tmp + l = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks + for l != UintptrFromInt32(0) { + Xfree(tls, (*Ttre_list_t)(unsafe.Pointer(l)).Fdata) + tmp = (*Ttre_list_t)(unsafe.Pointer(l)).Fnext + Xfree(tls, l) + l = tmp + } + Xfree(tls, mem) +} + +// C documentation +// +// /* Allocates a block of `size' bytes from `mem'. Returns a pointer to the +// allocated block or NULL if an underlying malloc() failed. */ +func X__tre_mem_alloc_impl(tls *TLS, mem Ttre_mem_t, provided int32, provided_block uintptr, zero int32, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v mem=%v provided=%v provided_block=%v zero=%v size=%v, (%v:)", tls, mem, provided, provided_block, zero, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var block_size int32 + var l, ptr uintptr + var v1 uint64 + _, _, _, _ = block_size, l, ptr, v1 + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed != 0 { + return UintptrFromInt32(0) + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn < size { + if provided != 0 { + if provided_block == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = provided_block + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(TRE_MEM_BLOCK_SIZE) + } else { + if size*uint64(8) > uint64(TRE_MEM_BLOCK_SIZE) { + block_size = int32(size * uint64(8)) + } else { + block_size = int32(TRE_MEM_BLOCK_SIZE) + } + l = Xmalloc(tls, uint64(16)) + if l == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fdata = Xmalloc(tls, uint64(block_size)) + if (*Ttre_list_t)(unsafe.Pointer(l)).Fdata == UintptrFromInt32(0) { + Xfree(tls, l) + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Ffailed = int32(1) + return UintptrFromInt32(0) + } + (*Ttre_list_t)(unsafe.Pointer(l)).Fnext = UintptrFromInt32(0) + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent != UintptrFromInt32(0) { + (*Ttre_list_t)(unsafe.Pointer((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent)).Fnext = l + } + if (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks == UintptrFromInt32(0) { + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fblocks = l + } + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fcurrent = l + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr = (*Ttre_list_t)(unsafe.Pointer(l)).Fdata + (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fn = uint64(block_size) + } + } + /* Make sure the next pointer will be aligned. */ + if (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) != 0 { + v1 = uint64(8) - (uint64(int64((*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr))+size)%uint64(8) + } else { + v1 = uint64(0) + } + size += v1 + /* Allocate from current block. */ + ptr = (*Ttre_mem_struct)(unsafe.Pointer(mem)).Fptr + *(*uintptr)(unsafe.Pointer(mem + 16)) += uintptr(size) + *(*Tsize_t)(unsafe.Pointer(mem + 24)) -= size + /* Set to zero if needed. */ + if zero != 0 { + Xmemset(tls, ptr, 0, size) + } + return ptr +} + +const MAXSIZE = 1 +const MINSIZE = 8 + +type TACTION = int32 + +const _FIND = 0 +const _ENTER = 1 + +type TVISIT = int32 + +const _preorder = 0 +const _postorder = 1 +const _endorder = 2 +const _leaf = 3 + +type TENTRY = struct { + Fkey uintptr + Fdata uintptr +} + +type Tentry = TENTRY + +type Thsearch_data = struct { + F__tab uintptr + F__unused1 uint32 + F__unused2 uint32 +} + +type Tqelem = struct { + Fq_forw uintptr + Fq_back uintptr + Fq_data [1]uint8 +} + +/* +open addressing hash table with 2^n table size +quadratic probing is used in case of hash collision +tab indices and hash are size_t +after resize fails with ENOMEM the state of tab is still usable + +with the posix api items cannot be iterated and length cannot be queried +*/ + +type t__tab = struct { + Fentries uintptr + Fmask Tsize_t + Fused Tsize_t +} + +var _htab Thsearch_data + +func _keyhash(tls *TLS, k uintptr) (r Tsize_t) { + var h Tsize_t + var p, v1 uintptr + _, _, _ = h, p, v1 + p = k + h = uint64(0) + for *(*uint8)(unsafe.Pointer(p)) != 0 { + v1 = p + p++ + h = uint64(31)*h + uint64(*(*uint8)(unsafe.Pointer(v1))) + } + return h +} + +func _resize(tls *TLS, nel Tsize_t, htab uintptr) (r int32) { + var e, newe, oldtab uintptr + var i, j, newsize, oldsize, v4 Tsize_t + _, _, _, _, _, _, _, _ = e, i, j, newe, newsize, oldsize, oldtab, v4 + oldsize = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask + uint64(1) + oldtab = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + if nel > uint64(-Int32FromInt32(1))/Uint64FromInt32(2)+Uint64FromInt32(1) { + nel = uint64(-Int32FromInt32(1))/Uint64FromInt32(2) + Uint64FromInt32(1) + } + newsize = uint64(MINSIZE) + for { + if !(newsize < nel) { + break + } + goto _1 + _1: + ; + newsize *= uint64(2) + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = Xcalloc(tls, newsize, uint64(16)) + if !((*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries = oldtab + return 0 + } + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask = newsize - uint64(1) + if !(oldtab != 0) { + return int32(1) + } + e = oldtab + for { + if !(e < oldtab+uintptr(oldsize)*16) { + break + } + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + i = _keyhash(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey) + j = Uint64FromInt32(1) + for { + newe = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(newe)).Fkey != 0) { + break + } + goto _3 + _3: + ; + v4 = j + j++ + i += v4 + } + *(*TENTRY)(unsafe.Pointer(newe)) = *(*TENTRY)(unsafe.Pointer(e)) + } + goto _2 + _2: + ; + e += 16 + } + Xfree(tls, oldtab) + return int32(1) +} + +func Xhcreate(tls *TLS, nel Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v nel=%v, (%v:)", tls, nel, origin(2)) + defer func() { trc("-> %v", r) }() + } + return ___hcreate_r(tls, nel, uintptr(unsafe.Pointer(&_htab))) +} + +func Xhdestroy(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___hdestroy_r(tls, uintptr(unsafe.Pointer(&_htab))) +} + +func _lookup(tls *TLS, key uintptr, hash Tsize_t, htab uintptr) (r uintptr) { + var e uintptr + var i, j, v2 Tsize_t + _, _, _, _ = e, i, j, v2 + i = hash + j = Uint64FromInt32(1) + for { + e = (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries + uintptr(i&(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask)*16 + if !((*TENTRY)(unsafe.Pointer(e)).Fkey != 0) || Xstrcmp(tls, (*TENTRY)(unsafe.Pointer(e)).Fkey, key) == 0 { + break + } + goto _1 + _1: + ; + v2 = j + j++ + i += v2 + } + return e +} + +func Xhsearch(tls *TLS, item TENTRY, action TACTION) (r uintptr) { + if __ccgo_strace { + trc("tls=%v item=%v action=%v, (%v:)", tls, item, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* e at bp+0 */ uintptr + ___hsearch_r(tls, item, action, bp, uintptr(unsafe.Pointer(&_htab))) + return *(*uintptr)(unsafe.Pointer(bp)) +} + +func ___hcreate_r(tls *TLS, nel Tsize_t, htab uintptr) (r1 int32) { + var r int32 + _ = r + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = Xcalloc(tls, uint64(1), uint64(24)) + if !((*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0) { + return 0 + } + r = _resize(tls, nel, htab) + if r == 0 { + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) + } + return r +} + +func ___hdestroy_r(tls *TLS, htab uintptr) { + if (*Thsearch_data)(unsafe.Pointer(htab)).F__tab != 0 { + Xfree(tls, (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fentries) + } + Xfree(tls, (*Thsearch_data)(unsafe.Pointer(htab)).F__tab) + (*Thsearch_data)(unsafe.Pointer(htab)).F__tab = uintptr(0) +} + +func ___hsearch_r(tls *TLS, item TENTRY, action TACTION, retval uintptr, htab uintptr) (r int32) { + var e, v2 uintptr + var hash, v1 Tsize_t + _, _, _, _ = e, hash, v1, v2 + hash = _keyhash(tls, item.Fkey) + e = _lookup(tls, item.Fkey, hash, htab) + if (*TENTRY)(unsafe.Pointer(e)).Fkey != 0 { + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) + } + if action == int32(_FIND) { + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + *(*TENTRY)(unsafe.Pointer(e)) = item + v2 = (*Thsearch_data)(unsafe.Pointer(htab)).F__tab + 16 + *(*Tsize_t)(unsafe.Pointer(v2))++ + v1 = *(*Tsize_t)(unsafe.Pointer(v2)) + if v1 > (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask-(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fmask/uint64(4) { + if !(_resize(tls, uint64(2)*(*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused, htab) != 0) { + (*t__tab)(unsafe.Pointer((*Thsearch_data)(unsafe.Pointer(htab)).F__tab)).Fused-- + (*TENTRY)(unsafe.Pointer(e)).Fkey = uintptr(0) + *(*uintptr)(unsafe.Pointer(retval)) = uintptr(0) + return 0 + } + e = _lookup(tls, item.Fkey, hash, htab) + } + *(*uintptr)(unsafe.Pointer(retval)) = e + return int32(1) +} + +type Tnode = struct { + Fnext uintptr + Fprev uintptr +} + +func Xinsque(tls *TLS, element uintptr, pred uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v pred=%v, (%v:)", tls, element, pred, origin(2)) + } + var e, p, v1 uintptr + _, _, _ = e, p, v1 + e = element + p = pred + if !(p != 0) { + v1 = UintptrFromInt32(0) + (*Tnode)(unsafe.Pointer(e)).Fprev = v1 + (*Tnode)(unsafe.Pointer(e)).Fnext = v1 + return + } + (*Tnode)(unsafe.Pointer(e)).Fnext = (*Tnode)(unsafe.Pointer(p)).Fnext + (*Tnode)(unsafe.Pointer(e)).Fprev = p + (*Tnode)(unsafe.Pointer(p)).Fnext = e + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = e + } +} + +func Xremque(tls *TLS, element uintptr) { + if __ccgo_strace { + trc("tls=%v element=%v, (%v:)", tls, element, origin(2)) + } + var e uintptr + _ = e + e = element + if (*Tnode)(unsafe.Pointer(e)).Fnext != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fnext)).Fprev = (*Tnode)(unsafe.Pointer(e)).Fprev + } + if (*Tnode)(unsafe.Pointer(e)).Fprev != 0 { + (*Tnode)(unsafe.Pointer((*Tnode)(unsafe.Pointer(e)).Fprev)).Fnext = (*Tnode)(unsafe.Pointer(e)).Fnext + } +} + +func Xlsearch(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + *(*Tsize_t)(unsafe.Pointer(nelp)) = n + uint64(1) + return Xmemcpy(tls, p+uintptr(n)*uintptr(v1), key, width) +} + +func Xlfind(tls *TLS, key uintptr, base uintptr, nelp uintptr, width Tsize_t, compar uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nelp=%v width=%v compar=%v, (%v:)", tls, key, base, nelp, width, compar, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + var p uintptr + var v1 t__predefined_size_t + _, _, _, _ = i, n, p, v1 + defer func() {}() + v1 = width + p = base + n = *(*Tsize_t)(unsafe.Pointer(nelp)) + i = uint64(0) + for { + if !(i < n) { + break + } + if (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{compar})))(tls, key, p+uintptr(i)*uintptr(v1)) == 0 { + return p + uintptr(i)*uintptr(v1) + } + goto _2 + _2: + ; + i++ + } + return uintptr(0) +} + +const MAXH = 0 + +type Tnode1 = struct { + Fkey uintptr + Fa [2]uintptr + Fh int32 +} + +func Xtdelete(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a [97]uintptr + var c, i, v1, v2, v4, v5, v6, v7, v8 int32 + var child, deleted, n, parent uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, c, child, deleted, i, n, parent, v1, v2, v4, v5, v6, v7, v8 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + /* *a[0] is an arbitrary non-null pointer that is returned when + the root node is deleted. */ + v1 = i + i++ + a[v1] = rootp + v2 = i + i++ + a[v2] = rootp + for { + if !(n != 0) { + return uintptr(0) + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + v4 = i + i++ + a[v4] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _3 + _3: + } + parent = *(*uintptr)(unsafe.Pointer(a[i-int32(2)])) + if *(*uintptr)(unsafe.Pointer(n + 8)) != 0 { + /* free the preceding node instead of the deleted one. */ + deleted = n + v5 = i + i++ + a[v5] = n + 8 + n = *(*uintptr)(unsafe.Pointer(n + 8)) + for *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) != 0 { + v6 = i + i++ + a[v6] = n + 8 + 1*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + (*Tnode1)(unsafe.Pointer(deleted)).Fkey = (*Tnode1)(unsafe.Pointer(n)).Fkey + child = *(*uintptr)(unsafe.Pointer(n + 8)) + } else { + child = *(*uintptr)(unsafe.Pointer(n + 8 + 1*8)) + } + /* freed node has at most one child, move it up and rebalance. */ + Xfree(tls, n) + i-- + v7 = i + *(*uintptr)(unsafe.Pointer(a[v7])) = child + for { + i-- + v8 = i + if !(v8 != 0 && X__tsearch_balance(tls, a[i]) != 0) { + break + } + } + return parent +} + +func Xtdestroy(tls *TLS, root uintptr, freekey uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v freekey=%v, (%v:)", tls, root, freekey, origin(2)) + } + var r uintptr + _ = r + r = root + if r == uintptr(0) { + return + } + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8)), freekey) + Xtdestroy(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), freekey) + if freekey != 0 { + (*(*func(*TLS, uintptr))(unsafe.Pointer(&struct{ uintptr }{freekey})))(tls, (*Tnode1)(unsafe.Pointer(r)).Fkey) + } + Xfree(tls, r) +} + +func Xtfind(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c int32 + var n uintptr + _, _ = c, n + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + break + } + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _1 + _1: + } + return n +} + +func _height(tls *TLS, n uintptr) (r int32) { + var v1 int32 + _ = v1 + if n != 0 { + v1 = (*Tnode1)(unsafe.Pointer(n)).Fh + } else { + v1 = 0 + } + return v1 +} + +func _rot(tls *TLS, p uintptr, x uintptr, dir int32) (r int32) { + var hx, hz int32 + var y, z uintptr + _, _, _, _ = hx, hz, y, z + y = *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) + z = *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) + hx = (*Tnode1)(unsafe.Pointer(x)).Fh + hz = _height(tls, z) + if hz > _height(tls, *(*uintptr)(unsafe.Pointer(y + 8 + uintptr(dir)*8))) { + /* + * x + * / \ dir z + * A y / * / \ --> x y + * z D /| | * / \ A B C D + * B C + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) + *(*uintptr)(unsafe.Pointer(z + 8 + BoolUintptr(!(dir != 0))*8)) = x + *(*uintptr)(unsafe.Pointer(z + 8 + uintptr(dir)*8)) = y + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + (*Tnode1)(unsafe.Pointer(z)).Fh = hz + int32(1) + } else { + /* + * x y + * / \ / * A y --> x D + * / \ / * z D A z + */ + *(*uintptr)(unsafe.Pointer(x + 8 + uintptr(dir)*8)) = z + *(*uintptr)(unsafe.Pointer(y + 8 + BoolUintptr(!(dir != 0))*8)) = x + (*Tnode1)(unsafe.Pointer(x)).Fh = hz + int32(1) + (*Tnode1)(unsafe.Pointer(y)).Fh = hz + int32(2) + z = y + } + *(*uintptr)(unsafe.Pointer(p)) = z + return (*Tnode1)(unsafe.Pointer(z)).Fh - hx +} + +// C documentation +// +// /* balance *p, return 0 if height is unchanged. */ +func X__tsearch_balance(tls *TLS, p uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h0, h1, old, v1 int32 + var n uintptr + _, _, _, _, _ = h0, h1, n, old, v1 + n = *(*uintptr)(unsafe.Pointer(p)) + h0 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8))) + h1 = _height(tls, *(*uintptr)(unsafe.Pointer(n + 8 + 1*8))) + if uint32(h0-h1)+uint32(1) < uint32(3) { + old = (*Tnode1)(unsafe.Pointer(n)).Fh + if h0 < h1 { + v1 = h1 + int32(1) + } else { + v1 = h0 + int32(1) + } + (*Tnode1)(unsafe.Pointer(n)).Fh = v1 + return (*Tnode1)(unsafe.Pointer(n)).Fh - old + } + return _rot(tls, p, n, BoolInt32(h0 < h1)) +} + +func Xtsearch(tls *TLS, key uintptr, rootp uintptr, cmp uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v rootp=%v cmp=%v, (%v:)", tls, key, rootp, cmp, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var a [96]uintptr + var c, i, v1, v3, v5, v6 int32 + var n, r, v4 uintptr + var v7 bool + _, _, _, _, _, _, _, _, _, _, _ = a, c, i, n, r, v1, v3, v4, v5, v6, v7 + if !(rootp != 0) { + return uintptr(0) + } + n = *(*uintptr)(unsafe.Pointer(rootp)) + i = 0 + v1 = i + i++ + a[v1] = rootp + for { + if !(n != 0) { + break + } + c = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, (*Tnode1)(unsafe.Pointer(n)).Fkey) + if !(c != 0) { + return n + } + v3 = i + i++ + a[v3] = n + 8 + BoolUintptr(c > 0)*8 + n = *(*uintptr)(unsafe.Pointer(n + 8 + BoolUintptr(c > 0)*8)) + goto _2 + _2: + } + r = Xmalloc(tls, uint64(32)) + if !(r != 0) { + return uintptr(0) + } + (*Tnode1)(unsafe.Pointer(r)).Fkey = key + v4 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)) = v4 + *(*uintptr)(unsafe.Pointer(r + 8)) = v4 + (*Tnode1)(unsafe.Pointer(r)).Fh = int32(1) + /* insert new node, rebalance ancestors. */ + i-- + v5 = i + *(*uintptr)(unsafe.Pointer(a[v5])) = r + for { + if v7 = i != 0; v7 { + i-- + v6 = i + } + if !(v7 && X__tsearch_balance(tls, a[v6]) != 0) { + break + } + } + return r +} + +func _walk(tls *TLS, r uintptr, action uintptr, d int32) { + if !(r != 0) { + return + } + if (*Tnode1)(unsafe.Pointer(r)).Fh == int32(1) { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_leaf), d) + } else { + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_preorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_postorder), d) + _walk(tls, *(*uintptr)(unsafe.Pointer(r + 8 + 1*8)), action, d+int32(1)) + (*(*func(*TLS, uintptr, TVISIT, int32))(unsafe.Pointer(&struct{ uintptr }{action})))(tls, r, int32(_endorder), d) + } +} + +func Xtwalk(tls *TLS, root uintptr, action uintptr) { + if __ccgo_strace { + trc("tls=%v root=%v action=%v, (%v:)", tls, root, action, origin(2)) + } + _walk(tls, root, action, 0) +} + +func Xpoll(tls *TLS, fds uintptr, n Tnfds_t, timeout int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v timeout=%v, (%v:)", tls, fds, n, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_poll), int64(fds), int64(n), int64(timeout), 0, 0, 0)))) +} + +type t__ucontext3 = Tucontext_t5 + +func Xppoll(tls *TLS, fds uintptr, n Tnfds_t, to uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fds=%v n=%v to=%v mask=%v, (%v:)", tls, fds, n, to, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + _, _, _, _, _ = ns, s, v1, v2, v3 + if to != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if to != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(to)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if to != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ppoll), int64(fds), int64(n), int64(v3), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0)))) +} + +type t__ucontext4 = Tucontext_t4 + +func Xpselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, ts uintptr, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v ts=%v mask=%v, (%v:)", tls, n, rfds, wfds, efds, ts, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ns, v1, v2 int64 + var s Ttime_t + var v3 uintptr + var _ /* data at bp+16 */ [2]Tsyscall_arg_t + _, _, _, _, _ = ns, s, v1, v2, v3 + *(*[2]Tsyscall_arg_t)(unsafe.Pointer(bp + 16)) = [2]Tsyscall_arg_t{ + 0: int64(uint64(mask)), + 1: int64(Int32FromInt32(_NSIG) / Int32FromInt32(8)), + } + if ts != 0 { + v1 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if ts != 0 { + v2 = (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec + } else { + v2 = 0 + } + ns = v2 + if ts != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: ns, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pselect6), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), int64(bp+16))))) +} + +type Tucontext_t6 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t + Fuc_sigmask Tsigset_t +} + +func Xselect(tls *TLS, n int32, rfds uintptr, wfds uintptr, efds uintptr, tv uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v n=%v rfds=%v wfds=%v efds=%v tv=%v, (%v:)", tls, n, rfds, wfds, efds, tv, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var max_time, s Ttime_t + var ns, v1, v2 int64 + var us Tsuseconds_t + var v3 uintptr + _, _, _, _, _, _, _ = max_time, ns, s, us, v1, v2, v3 + if tv != 0 { + v1 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec + } else { + v1 = 0 + } + s = v1 + if tv != 0 { + v2 = (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec + } else { + v2 = 0 + } + us = v2 + max_time = int64(Uint64FromUint64(1)<<(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)) - Uint64FromInt32(1)) + if s < 0 || us < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if us/int64(1000000) > max_time-s { + s = max_time + us = int64(999999) + ns = int64(999999999) + } else { + s += us / int64(1000000) + us %= int64(1000000) + ns = us * int64(1000) + } + if tv != 0 { + *(*[2]int64)(unsafe.Pointer(bp)) = [2]int64{ + 0: s, + 1: us, + } + v3 = bp + } else { + v3 = uintptr(0) + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_select), int64(n), int64(rfds), int64(wfds), int64(efds), int64(v3), 0)))) +} + +var _all_mask = [1]uint64{ + 0: -Uint64FromUint64(1), +} + +var _app_mask = [1]uint64{ + 0: uint64(0xfffffffc7fffffff), +} + +func X__block_all_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_all_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__block_app_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_BLOCK)), int64(uintptr(unsafe.Pointer(&_app_mask))), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func X__restore_sigs(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_SETMASK)), int64(set), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) +} + +func Xgetitimer(tls *TLS, which int32, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v old=%v, (%v:)", tls, which, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r int32 + var _ /* old32 at bp+0 */ [4]int64 + _ = r + if uint64(8) > uint64(8) { + r = int32(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(bp))) + if !(r != 0) { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getitimer), int64(which), int64(old))))) +} + +func Xkill(tls *TLS, pid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v, (%v:)", tls, pid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_kill), int64(pid), int64(sig))))) +} + +func Xkillpg(tls *TLS, pgid Tpid_t, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v pgid=%v sig=%v, (%v:)", tls, pgid, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + if pgid < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xkill(tls, -pgid, sig) +} + +func Xpsiginfo(tls *TLS, si uintptr, msg uintptr) { + if __ccgo_strace { + trc("tls=%v si=%v msg=%v, (%v:)", tls, si, msg, origin(2)) + } + Xpsignal(tls, (*Tsiginfo_t)(unsafe.Pointer(si)).Fsi_signo, msg) +} + +func Xpsignal(tls *TLS, sig int32, msg uintptr) { + if __ccgo_strace { + trc("tls=%v sig=%v msg=%v, (%v:)", tls, sig, msg, origin(2)) + } + bp := tls.Alloc(32) + defer tls.Free(32) + var __need_unlock, old_errno, old_mode, v1 int32 + var f, old_locale, s, v2, v3 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, f, old_errno, old_locale, old_mode, s, v1, v2, v3 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + s = Xstrsignal(tls, sig) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since psignal is not + * permitted to change them. Save errno and restore it if there is no + * error since fprintf might change it even on success but psignal is + * not permitted to do so. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + old_errno = *(*int32)(unsafe.Pointer(X__errno_location(tls))) + if msg != 0 { + v2 = msg + } else { + v2 = __ccgo_ts + } + if msg != 0 { + v3 = __ccgo_ts + 378 + } else { + v3 = __ccgo_ts + } + if Xfprintf(tls, f, __ccgo_ts+1102, VaList(bp+8, v2, v3, s)) >= 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = old_errno + } + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xraise(tls *TLS, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v, (%v:)", tls, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var ret int32 + var _ /* set at bp+0 */ Tsigset_t + _ = ret + X__block_app_sigs(tls, bp) + ret = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid), int64(sig))))) + X__restore_sigs(tls, bp) + return ret +} + +/* These functions will not work, but suffice for targets where the + * kernel sigaction structure does not actually use sa_restorer. */ +func X__restore(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func X__restore_rt(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } +} + +func Xsetitimer(tls *TLS, which int32, new1 uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v which=%v new1=%v old=%v, (%v:)", tls, which, new1, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var is, vs Ttime_t + var ius, vus int64 + var r int32 + var _ /* old32 at bp+32 */ [4]int64 + _, _, _, _, _ = is, ius, r, vs, vus + if uint64(8) > uint64(8) { + is = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_sec + vs = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_sec + ius = (*Titimerval)(unsafe.Pointer(new1)).Fit_interval.Ftv_usec + vus = (*Titimerval)(unsafe.Pointer(new1)).Fit_value.Ftv_usec + if !!((uint64(is)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) || !!((uint64(vs)+Uint64FromUint64(0x80000000))>>Int32FromInt32(32) != 0) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + *(*[4]int64)(unsafe.Pointer(bp)) = [4]int64{ + 0: is, + 1: ius, + 2: vs, + 3: vus, + } + r = int32(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(bp), int64(bp+32))) + if !(r != 0) && old != 0 { + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[0] + (*Titimerval)(unsafe.Pointer(old)).Fit_interval.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(1)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_sec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(2)] + (*Titimerval)(unsafe.Pointer(old)).Fit_value.Ftv_usec = (*(*[4]int64)(unsafe.Pointer(bp + 32)))[int32(3)] + } + return int32(X__syscall_ret(tls, uint64(r))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_setitimer), int64(which), int64(new1), int64(old))))) +} + +type Tk_sigaction = struct { + Fhandler uintptr + Fflags uint64 + Frestorer uintptr + Fmask [2]uint32 +} + +var _unmask_done int32 +var _handler_set [1]uint64 + +func X__get_handler_set(tls *TLS, set uintptr) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + } + Xmemcpy(tls, set, uintptr(unsafe.Pointer(&_handler_set)), uint64(8)) +} + +func X__libc_sigaction(tls *TLS, sig int32, sa uintptr, old1 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old1=%v, (%v:)", tls, sig, sa, old1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var old, r, v11, v12, v17, v18, v4, v5 int32 + var v1, v10, v16, v22, v23, v24, v3, v9 uintptr + var v2 int64 + var _ /* ksa at bp+16 */ Tk_sigaction + var _ /* ksa_old at bp+48 */ Tk_sigaction + var _ /* u at bp+8 */ struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + } + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, r, v1, v10, v11, v12, v16, v17, v18, v2, v22, v23, v24, v3, v4, v5, v9 + if sa != 0 { + if uint64(*(*uintptr)(unsafe.Pointer(sa))) > uint64(1) { + v1 = uintptr(unsafe.Pointer(&_handler_set)) + uintptr(uint64(sig-Int32FromInt32(1))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + v2 = int64(uint64(1) << (uint64(sig-Int32FromInt32(1)) % (Uint64FromInt32(8) * Uint64FromInt64(8)))) + if Uint64FromInt64(8) == Uint64FromInt64(4) { + v3 = v1 + for { + old = AtomicLoadPInt32(v3) + goto _7 + _7: + ; + v4 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1517) + v5 = v4 + goto _6 + _6: + ; + if !(v5 != old) { + break + } + } + _ = old + goto _8 + _8: + } else { + v9 = v1 + *(*struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + })(unsafe.Pointer(bp + 8)) = struct { + Fr [0][2]Tuint32_t + Fv Tuint64_t + }{} + *(*uint64)(unsafe.Pointer(bp + 8)) = uint64(v2) + if *(*Tuint32_t)(unsafe.Pointer(bp + 8)) != 0 { + v10 = v9 + for { + old = AtomicLoadPInt32(v10) + goto _14 + _14: + ; + v11 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1517) + v12 = v11 + goto _13 + _13: + ; + if !(v12 != old) { + break + } + } + _ = old + goto _15 + _15: + } + if *(*Tuint32_t)(unsafe.Pointer(bp + 8 + 1*4)) != 0 { + v16 = v9 + uintptr(1)*4 + for { + old = AtomicLoadPInt32(v16) + goto _20 + _20: + ; + v17 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1517) + v18 = v17 + goto _19 + _19: + ; + if !(v18 != old) { + break + } + } + _ = old + goto _21 + _21: + } + } + /* If pthread_create has not yet been called, + * implementation-internal signals might not + * yet have been unblocked. They must be + * unblocked before any signal handler is + * installed, so that an application cannot + * receive an illegal sigset_t (with them + * blocked) as part of the ucontext_t passed + * to the signal handler. */ + if !(X__libc.Fthreaded != 0) && !(_unmask_done != 0) { + *(*[1]uint64)(unsafe.Pointer(bp)) = [1]uint64{ + 0: Uint64FromUint64(3) << (Int32FromInt32(32) * BoolInt32(Uint64FromInt64(8) > Uint64FromInt32(4))), + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_UNBLOCK)), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + _unmask_done = int32(1) + } + if !(uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags)&Uint32FromUint32(0x10000000) != 0) { + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1517) + AtomicStorePInt32(uintptr(unsafe.Pointer(&X__eintr_valid_flag)), int32(1)) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1517) + } + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fhandler = *(*uintptr)(unsafe.Pointer(sa)) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags = uint64((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags) + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Fflags |= uint64(0x04000000) + if uint32((*Tsigaction)(unsafe.Pointer(sa)).Fsa_flags)&uint32(4) != 0 { + v22 = __ccgo_fp(X__restore_rt) + } else { + v22 = __ccgo_fp(X__restore) + } + (*(*Tk_sigaction)(unsafe.Pointer(bp + 16))).Frestorer = v22 + Xmemcpy(tls, bp+16+24, sa+8, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + if sa != 0 { + v23 = bp + 16 + } else { + v23 = uintptr(0) + } + if old1 != 0 { + v24 = bp + 48 + } else { + v24 = uintptr(0) + } + r = int32(X__syscall4(tls, int64(SYS_rt_sigaction), int64(sig), int64(v23), int64(v24), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))) + if old1 != 0 && !(r != 0) { + *(*uintptr)(unsafe.Pointer(old1)) = (*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fhandler + (*Tsigaction)(unsafe.Pointer(old1)).Fsa_flags = int32((*(*Tk_sigaction)(unsafe.Pointer(bp + 48))).Fflags) + Xmemcpy(tls, old1+8, bp+48+24, uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__sigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* set at bp+0 */ [1]uint64 + _ = r + if uint32(sig)-uint32(32) < uint32(3) || uint32(sig)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Doing anything with the disposition of SIGABRT requires a lock, + * so that it cannot be changed while abort is terminating the + * process and so any change made by abort can't be observed. */ + if sig == int32(SIGABRT) { + X__block_all_sigs(tls, bp) + ___lock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + } + r = X__libc_sigaction(tls, sig, sa, old) + if sig == int32(SIGABRT) { + ___unlock(tls, uintptr(unsafe.Pointer(&X__abort_lock))) + X__restore_sigs(tls, bp) + } + return r +} + +func Xsigaction(tls *TLS, sig int32, sa uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v sig=%v sa=%v old=%v, (%v:)", tls, sig, sa, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__sigaction(tls, sig, sa, old) +} + +func Xsigaddset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) |= uint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1))) + return 0 +} + +func Xsigaltstack(tls *TLS, ss uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ss=%v old=%v, (%v:)", tls, ss, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + if ss != 0 { + if !((*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&Int32FromInt32(SS_DISABLE) != 0) && (*Tstack_t)(unsafe.Pointer(ss)).Fss_size < uint64(MINSIGSTKSZ) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return -int32(1) + } + if (*Tstack_t)(unsafe.Pointer(ss)).Fss_flags&int32(SS_ONSTACK) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_sigaltstack), int64(ss), int64(old))))) +} + +const SST_SIZE = 8 + +type Tucontext_t7 = struct { + Fuc_flags uint64 + Fuc_link uintptr + Fuc_stack Tstack_t + Fuc_mcontext Tmcontext_t1 + Fuc_sigmask Tsigset_t +} + +func Xsigandset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) & *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigdelset(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) || uint32(sig)-uint32(32) < uint32(3) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8)) &= ^(Uint64FromUint64(1) << (uint64(s) & (Uint64FromInt32(8)*Uint64FromInt64(8) - Uint64FromInt32(1)))) + return 0 +} + +func Xsigemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0) + if Bool(uint64(8) == uint64(4)) || Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0) + } + if Bool(uint64(8) == uint64(4)) && Bool(int32(_NSIG) > int32(65)) { + *(*uint64)(unsafe.Pointer(set + 2*8)) = uint64(0) + *(*uint64)(unsafe.Pointer(set + 3*8)) = uint64(0) + } + return 0 +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xsigfillset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*uint64)(unsafe.Pointer(set)) = uint64(0xfffffffc7fffffff) + if int32(_NSIG) > int32(65) { + *(*uint64)(unsafe.Pointer(set + 1*8)) = uint64(0xffffffffffffffff) + } + return 0 +} + +func Xsigisemptyset(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i Tsize_t + _ = i + i = uint64(0) + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + if *(*uint64)(unsafe.Pointer(set + uintptr(i)*8)) != 0 { + return 0 + } + goto _1 + _1: + ; + i++ + } + return int32(1) +} + +func Xsigismember(tls *TLS, set uintptr, sig int32) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v sig=%v, (%v:)", tls, set, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uint32 + _ = s + s = uint32(sig - int32(1)) + if s >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + return 0 + } + return BoolInt32(!!(*(*uint64)(unsafe.Pointer(set + uintptr(uint64(s/uint32(8))/uint64(8))*8))&(Uint64FromUint64(1)<<(uint64(s)&(Uint64FromInt32(8)*Uint64FromInt64(8)-Uint64FromInt32(1)))) != 0)) +} + +func Xsigorset(tls *TLS, dest uintptr, left uintptr, right uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v dest=%v left=%v right=%v, (%v:)", tls, dest, left, right, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var d, l, r uintptr + var i uint64 + _, _, _, _ = d, i, l, r + i = uint64(0) + d = dest + l = left + r = right + for { + if !(i < uint64(Int32FromInt32(_NSIG)/Int32FromInt32(8))/Uint64FromInt64(8)) { + break + } + *(*uint64)(unsafe.Pointer(d + uintptr(i)*8)) = *(*uint64)(unsafe.Pointer(l + uintptr(i)*8)) | *(*uint64)(unsafe.Pointer(r + uintptr(i)*8)) + goto _1 + _1: + ; + i++ + } + return 0 +} + +func Xsigpending(tls *TLS, set uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v set=%v, (%v:)", tls, set, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_rt_sigpending), int64(set), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)))))) +} + +func Xsigprocmask(tls *TLS, how int32, set uintptr, old uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v how=%v set=%v old=%v, (%v:)", tls, how, set, old, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = _pthread_sigmask(tls, how, set, old) + if !(r != 0) { + return r + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = r + return -int32(1) +} + +func Xsigqueue(tls *TLS, pid Tpid_t, sig int32, value Tsigval) (r1 int32) { + if __ccgo_strace { + trc("tls=%v pid=%v sig=%v value=%v, (%v:)", tls, pid, sig, value, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var r int32 + var _ /* set at bp+128 */ Tsigset_t + var _ /* si at bp+0 */ Tsiginfo_t + _ = r + Xmemset(tls, bp, 0, uint64(128)) + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo = sig + (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_code = -int32(1) + *(*Tsigval)(unsafe.Pointer(bp + 16 + 8)) = value + *(*Tuid_t)(unsafe.Pointer(bp + 16 + 4)) = Xgetuid(tls) + X__block_app_sigs(tls, bp+128) + *(*Tpid_t)(unsafe.Pointer(bp + 16)) = Xgetpid(tls) + r = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_rt_sigqueueinfo), int64(pid), int64(sig), int64(bp))))) + X__restore_sigs(tls, bp+128) + return r +} + +func X__libc_current_sigrtmax(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Int32FromInt32(_NSIG) - Int32FromInt32(1) +} + +func X__libc_current_sigrtmin(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(35) +} + +type t__jmp_buf = [18]uint64 + +type Tjmp_buf = [1]t__jmp_buf_tag + +type t__jmp_buf_tag = struct { + F__jb t__jmp_buf + F__fl uint64 + F__ss [16]uint64 +} + +type Tsigjmp_buf = [1]t__jmp_buf_tag + +func X__sigsetjmp_tail(tls *TLS, jb uintptr, ret int32) (r int32) { + if __ccgo_strace { + trc("tls=%v jb=%v ret=%v, (%v:)", tls, jb, ret, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v1, v2 uintptr + _, _, _ = p, v1, v2 + p = jb + 152 + if ret != 0 { + v1 = p + } else { + v1 = uintptr(0) + } + if ret != 0 { + v2 = uintptr(0) + } else { + v2 = p + } + X__syscall4(tls, int64(SYS_rt_sigprocmask), int64(Int32FromInt32(SIG_SETMASK)), int64(v1), int64(v2), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8))) + return ret +} + +func Xsigsuspend(tls *TLS, mask uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v, (%v:)", tls, mask, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_rt_sigsuspend), int64(mask), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0, 0, 0)))) +} + +func _do_sigtimedwait(tls *TLS, mask uintptr, si uintptr, ts uintptr) (r int32) { + return int32(___syscall_cp(tls, int64(SYS_rt_sigtimedwait), int64(mask), int64(si), int64(ts), int64(Int32FromInt32(_NSIG)/Int32FromInt32(8)), 0, 0)) +} + +func Xsigtimedwait(tls *TLS, mask uintptr, si uintptr, timeout uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v timeout=%v, (%v:)", tls, mask, si, timeout, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + for cond := true; cond; cond = ret == -int32(EINTR) { + ret = _do_sigtimedwait(tls, mask, si, timeout) + } + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xsigwait(tls *TLS, mask uintptr, sig uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v sig=%v, (%v:)", tls, mask, sig, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var _ /* si at bp+0 */ Tsiginfo_t + if Xsigtimedwait(tls, mask, bp, uintptr(0)) < 0 { + return -int32(1) + } + *(*int32)(unsafe.Pointer(sig)) = (*(*Tsiginfo_t)(unsafe.Pointer(bp))).Fsi_signo + return 0 +} + +func Xsigwaitinfo(tls *TLS, mask uintptr, si uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mask=%v si=%v, (%v:)", tls, mask, si, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsigtimedwait(tls, mask, si, uintptr(0)) +} + +func X__fxstat(tls *TLS, ver int32, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v buf=%v, (%v:)", tls, ver, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstat(tls, fd, buf) +} + +func X__fxstatat(tls *TLS, ver int32, fd int32, path uintptr, buf uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v buf=%v flag=%v, (%v:)", tls, ver, fd, path, buf, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, fd, path, buf, flag) +} + +func X__lxstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xlstat(tls, path, buf) +} + +func X__xstat(tls *TLS, ver int32, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v buf=%v, (%v:)", tls, ver, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstat(tls, path, buf) +} + +func X__xmknod(tls *TLS, ver int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func X__xmknodat(tls *TLS, ver int32, fd int32, path uintptr, mode Tmode_t, dev uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v ver=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, ver, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode, *(*Tdev_t)(unsafe.Pointer(dev))) +} + +func Xchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_chmod), int64(path), int64(mode))))) +} + +func Xfchmod(tls *TLS, fd int32, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall2(tls, int64(SYS_fchmod), int64(fd), int64(mode))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_chmod), int64(bp), int64(mode))))) +} + +func Xfchmodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v flag=%v, (%v:)", tls, fd, path, mode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(176) + defer tls.Free(176) + var fd2, ret, v1 int32 + var _ /* proc at bp+144 */ [27]uint8 + var _ /* st at bp+0 */ Tstat + _, _, _ = fd2, ret, v1 + if !(flag != 0) { + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(fd), int64(path), int64(mode))))) + } + ret = int32(X__syscall4(tls, int64(SYS_fchmodat2), int64(fd), int64(path), int64(mode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag != int32(AT_SYMLINK_NOFOLLOW) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if Xfstatat(tls, fd, path, bp, flag) != 0 { + return -int32(1) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + v1 = int32(X__syscall3(tls, int64(SYS_openat), int64(fd), int64(path), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_PATH)|Int32FromInt32(O_NOFOLLOW)|Int32FromInt32(O_NOCTTY)|Int32FromInt32(O_CLOEXEC)))) + fd2 = v1 + if v1 < 0 { + if fd2 == -int32(ELOOP) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } + return int32(X__syscall_ret(tls, uint64(fd2))) + } + X__procfdname(tls, bp+144, uint32(fd2)) + ret = Xstat(tls, bp+144, bp) + if !(ret != 0) { + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_mode&uint32(S_IFMT) == uint32(S_IFLNK) { + ret = int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EOPNOTSUPP)))) + } else { + ret = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fchmodat), int64(-Int32FromInt32(100)), int64(bp+144), int64(mode))))) + } + } + X__syscall1(tls, int64(SYS_close), int64(fd2)) + return ret +} + +func X__fstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + if fd < 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EBADF)))) + } + return X__fstatat(tls, fd, __ccgo_ts, st, int32(AT_EMPTY_PATH)) +} + +func Xfstat(tls *TLS, fd int32, st uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v st=%v, (%v:)", tls, fd, st, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstat(tls, fd, st) +} + +type Tstatx1 = struct { + Fstx_mask Tuint32_t + Fstx_blksize Tuint32_t + Fstx_attributes Tuint64_t + Fstx_nlink Tuint32_t + Fstx_uid Tuint32_t + Fstx_gid Tuint32_t + Fstx_mode Tuint16_t + Fpad1 Tuint16_t + Fstx_ino Tuint64_t + Fstx_size Tuint64_t + Fstx_blocks Tuint64_t + Fstx_attributes_mask Tuint64_t + Fstx_atime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_btime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_ctime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_mtime struct { + Ftv_sec Tint64_t + Ftv_nsec Tuint32_t + Fpad Tint32_t + } + Fstx_rdev_major Tuint32_t + Fstx_rdev_minor Tuint32_t + Fstx_dev_major Tuint32_t + Fstx_dev_minor Tuint32_t + Fspare [14]Tuint64_t +} + +func _fstatat_statx(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var ret int32 + var _ /* stx at bp+0 */ Tstatx1 + _ = ret + flag |= int32(AT_NO_AUTOMOUNT) + ret = int32(X__syscall5(tls, int64(SYS_statx), int64(fd), int64(path), int64(flag), int64(Int32FromInt32(0x7ff)), int64(bp))) + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: uint64(uint64((*(*Tstatx1)(unsafe.Pointer(bp))).Fstx_dev_major)&Uint64FromUint64(0xfffff000)<= 0 && !(*(*uint8)(unsafe.Pointer(path)) != 0) { + ret = int32(X__syscall2(tls, int64(SYS_fstat), int64(fd), int64(bp))) + if ret == -int32(EBADF) && X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) >= 0 { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + if ret == -int32(EINVAL) { + X__procfdname(tls, bp+144, uint32(fd)) + ret = int32(X__syscall2(tls, int64(SYS_stat), int64(bp+144), int64(bp))) + } + } + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && flag == int32(AT_SYMLINK_NOFOLLOW) { + ret = int32(X__syscall2(tls, int64(SYS_lstat), int64(path), int64(bp))) + } else { + if (fd == -int32(100) || int32(*(*uint8)(unsafe.Pointer(path))) == int32('/')) && !(flag != 0) { + ret = int32(X__syscall2(tls, int64(SYS_stat), int64(path), int64(bp))) + } else { + ret = int32(X__syscall4(tls, int64(SYS_newfstatat), int64(fd), int64(path), int64(bp), int64(flag))) + } + } + } + if ret != 0 { + return ret + } + *(*Tstat)(unsafe.Pointer(st)) = Tstat{ + Fst_dev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_dev, + Fst_ino: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ino, + Fst_nlink: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_nlink, + Fst_mode: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mode, + Fst_uid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_uid, + Fst_gid: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_gid, + Fst_rdev: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_rdev, + Fst_size: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_size, + Fst_atim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_atime_nsec, + }, + Fst_mtim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_mtime_nsec, + }, + Fst_ctim: Ttimespec{ + Ftv_sec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_sec, + Ftv_nsec: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_ctime_nsec, + }, + Fst_blksize: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blksize, + Fst_blocks: (*(*Tkstat)(unsafe.Pointer(bp))).Fst_blocks, + } + return 0 +} + +func X__fstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if uint64(8) < uint64(8) { + ret = _fstatat_statx(tls, fd, path, st, flag) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + ret = _fstatat_kstat(tls, fd, path, st, flag) + return int32(X__syscall_ret(tls, uint64(ret))) +} + +func Xfstatat(tls *TLS, fd int32, path uintptr, st uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v st=%v flag=%v, (%v:)", tls, fd, path, st, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fstatat(tls, fd, path, st, flag) +} + +func Xfutimens(tls *TLS, fd int32, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v times=%v, (%v:)", tls, fd, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xutimensat(tls, fd, uintptr(0), times, 0) +} + +func X__futimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i int32 + var v2 uintptr + var _ /* ts at bp+0 */ [2]Ttimespec + _, _ = i, v2 + if times != 0 { + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec) >= uint64(1000000) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_sec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[2]Ttimespec)(unsafe.Pointer(bp)))[i].Ftv_nsec = (*(*Ttimeval)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_usec * int64(1000) + goto _1 + _1: + ; + i++ + } + } + if times != 0 { + v2 = bp + } else { + v2 = uintptr(0) + } + return Xutimensat(tls, dirfd, pathname, v2, 0) +} + +func Xfutimesat(tls *TLS, dirfd int32, pathname uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v dirfd=%v pathname=%v times=%v, (%v:)", tls, dirfd, pathname, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__futimesat(tls, dirfd, pathname, times) +} + +func Xlchmod(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfchmodat(tls, -int32(100), path, mode, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xlstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, int32(AT_SYMLINK_NOFOLLOW)) +} + +func Xmkdir(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_mkdir), int64(path), int64(mode))))) +} + +func Xmkdirat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mkdirat), int64(fd), int64(path), int64(mode))))) +} + +func Xmkfifo(tls *TLS, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v, (%v:)", tls, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknod(tls, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmkfifoat(tls *TLS, fd int32, path uintptr, mode Tmode_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v, (%v:)", tls, fd, path, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmknodat(tls, fd, path, mode|uint32(S_IFIFO), uint64(0)) +} + +func Xmknod(tls *TLS, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v mode=%v dev=%v, (%v:)", tls, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_mknod), int64(path), int64(mode), int64(dev))))) +} + +func Xmknodat(tls *TLS, fd int32, path uintptr, mode Tmode_t, dev Tdev_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v mode=%v dev=%v, (%v:)", tls, fd, path, mode, dev, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_mknodat), int64(fd), int64(path), int64(mode), int64(dev))))) +} + +func Xstat(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfstatat(tls, -int32(100), path, buf, 0) +} + +func ___statfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_statfs64), int64(path), int64(Uint64FromInt64(88)), int64(buf))))) +} + +func Xfstatfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + *(*Tstatfs)(unsafe.Pointer(buf)) = Tstatfs{} + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fstatfs64), int64(fd), int64(Uint64FromInt64(88)), int64(buf))))) +} + +func _fixup(tls *TLS, out uintptr, in uintptr) { + var v1 uint32 + _ = v1 + *(*Tstatvfs)(unsafe.Pointer(out)) = Tstatvfs{} + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bsize = uint64((*Tstatfs)(unsafe.Pointer(in)).Ff_bsize) + if (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize != 0 { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_frsize + } else { + v1 = (*Tstatfs)(unsafe.Pointer(in)).Ff_bsize + } + (*Tstatvfs)(unsafe.Pointer(out)).Ff_frsize = uint64(v1) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_blocks = (*Tstatfs)(unsafe.Pointer(in)).Ff_blocks + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bfree = (*Tstatfs)(unsafe.Pointer(in)).Ff_bfree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_bavail = (*Tstatfs)(unsafe.Pointer(in)).Ff_bavail + (*Tstatvfs)(unsafe.Pointer(out)).Ff_files = (*Tstatfs)(unsafe.Pointer(in)).Ff_files + (*Tstatvfs)(unsafe.Pointer(out)).Ff_ffree = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_favail = (*Tstatfs)(unsafe.Pointer(in)).Ff_ffree + (*Tstatvfs)(unsafe.Pointer(out)).Ff_fsid = uint64(*(*int32)(unsafe.Pointer(in + 48))) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_flag = uint64((*Tstatfs)(unsafe.Pointer(in)).Ff_flags) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_namemax = uint64((*Tstatfs)(unsafe.Pointer(in)).Ff_namelen) + (*Tstatvfs)(unsafe.Pointer(out)).Ff_type = (*Tstatfs)(unsafe.Pointer(in)).Ff_type +} + +func Xstatvfs(tls *TLS, path uintptr, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v, (%v:)", tls, path, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if ___statfs(tls, path, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xfstatvfs(tls *TLS, fd int32, buf uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v, (%v:)", tls, fd, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(96) + defer tls.Free(96) + var _ /* kbuf at bp+0 */ Tstatfs + if Xfstatfs(tls, fd, bp) < 0 { + return -int32(1) + } + _fixup(tls, buf, bp) + return 0 +} + +func Xumask(tls *TLS, mode Tmode_t) (r Tmode_t) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_umask), int64(mode))))) +} + +func Xutimensat(tls *TLS, fd int32, path uintptr, times uintptr, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v times=%v flags=%v, (%v:)", tls, fd, path, times, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var i, r int32 + var tv uintptr + var _ /* tmp at bp+0 */ [4]int64 + _, _, _ = i, r, tv + if times != 0 && (*(*Ttimespec)(unsafe.Pointer(times))).Ftv_nsec == int64(UTIME_NOW) && (*(*Ttimespec)(unsafe.Pointer(times + 1*16))).Ftv_nsec == int64(UTIME_NOW) { + times = uintptr(0) + } + r = int32(X__syscall4(tls, int64(SYS_utimensat), int64(fd), int64(path), int64(times), int64(flags))) + if r != -int32(ENOSYS) || flags != 0 { + return int32(X__syscall_ret(tls, uint64(r))) + } + tv = uintptr(0) + if times != 0 { + tv = bp + i = 0 + for { + if !(i < int32(2)) { + break + } + if uint64((*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec) >= uint64(1000000000) { + if (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int64(UTIME_NOW) || (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec == int64(UTIME_OMIT) { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(ENOSYS)))) + } + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)*i+0] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_sec + (*(*[4]int64)(unsafe.Pointer(bp)))[int32(2)*i+int32(1)] = (*(*Ttimespec)(unsafe.Pointer(times + uintptr(i)*16))).Ftv_nsec / int64(1000) + goto _1 + _1: + ; + i++ + } + } + r = int32(X__syscall3(tls, int64(SYS_futimesat), int64(fd), int64(path), int64(tv))) + if r != -int32(ENOSYS) || fd != -int32(100) { + return int32(X__syscall_ret(tls, uint64(r))) + } + r = int32(X__syscall2(tls, int64(SYS_utimes), int64(path), int64(tv))) + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__fclose_ca(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) +} + +func X__fdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var f, v1 uintptr + var flags, v2 int32 + var _ /* wsz at bp+0 */ Twinsize + _, _, _, _ = f, flags, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1534, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+buffer or fail */ + v1 = Xmalloc(tls, Uint64FromInt64(232)+Uint64FromInt32(UNGET)+Uint64FromInt32(BUFSIZ)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(v2) + } + /* Apply close-on-exec flag */ + if Xstrchr(tls, mode, int32('e')) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + /* Set append mode on fd if opened for append */ + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags = int32(X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFL)))) + if !(flags&Int32FromInt32(O_APPEND) != 0) { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFL)), int64(flags|Int32FromInt32(O_APPEND))) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_APP) + } + (*TFILE)(unsafe.Pointer(f)).Ffd = fd + (*TFILE)(unsafe.Pointer(f)).Fbuf = f + uintptr(232) + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(BUFSIZ) + /* Activate line buffered mode for terminals */ + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0) && !(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp)) != 0) { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + /* Initialize op ptrs. No problem if some are unneeded. */ + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfdopen(tls *TLS, fd int32, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v mode=%v, (%v:)", tls, fd, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fdopen(tls, fd, mode) +} + +func X__fmodeflags(tls *TLS, mode uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v mode=%v, (%v:)", tls, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var flags int32 + _ = flags + if Xstrchr(tls, mode, int32('+')) != 0 { + flags = int32(O_RDWR) + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + flags = O_RDONLY + } else { + flags = int32(O_WRONLY) + } + } + if Xstrchr(tls, mode, int32('x')) != 0 { + flags |= int32(O_EXCL) + } + if Xstrchr(tls, mode, int32('e')) != 0 { + flags |= int32(O_CLOEXEC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) != int32('r') { + flags |= int32(O_CREAT) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('w') { + flags |= int32(O_TRUNC) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + flags |= int32(O_APPEND) + } + return flags +} + +func X__fopen_rb_ca(tls *TLS, filename uintptr, f uintptr, buf uintptr, len1 Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v f=%v buf=%v len1=%v, (%v:)", tls, filename, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xmemset(tls, f, 0, uint64(232)) + (*TFILE)(unsafe.Pointer(f)).Ffd = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_open), int64(filename), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_LARGEFILE)))))) + if (*TFILE)(unsafe.Pointer(f)).Ffd < 0 { + return uintptr(0) + } + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + (*TFILE)(unsafe.Pointer(f)).Fflags = uint32(Int32FromInt32(F_NOWR) | Int32FromInt32(F_PERM)) + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + uintptr(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = len1 - uint64(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fread = __ccgo_fp(X__stdio_read) + (*TFILE)(unsafe.Pointer(f)).Fseek = __ccgo_fp(X__stdio_seek) + (*TFILE)(unsafe.Pointer(f)).Fclose1 = __ccgo_fp(X__stdio_close) + AtomicStorePInt32(f+140, -int32(1)) + return f +} + +func X__overflow(tls *TLS, f uintptr, _c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v _c=%v, (%v:)", tls, f, _c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 uint8 + var v2, v3 uintptr + var _ /* c at bp+0 */ uint8 + _, _, _ = v1, v2, v3 + *(*uint8)(unsafe.Pointer(bp)) = uint8(_c) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return -int32(1) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend && int32(*(*uint8)(unsafe.Pointer(bp))) != (*TFILE)(unsafe.Pointer(f)).Flbf { + v1 = *(*uint8)(unsafe.Pointer(bp)) + v3 = f + 40 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(v2)) = v1 + return int32(v1) + } + if (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, bp, uint64(1)) != uint64(1) { + return -int32(1) + } + return int32(*(*uint8)(unsafe.Pointer(bp))) +} + +func _dummy9(tls *TLS, fd int32) (r int32) { + return fd +} + +func X__stdio_close(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_close), int64(_dummy9(tls, (*TFILE)(unsafe.Pointer(f)).Ffd)))))) +} + +var _dummy_file = uintptr(0) + +func _close_file(tls *TLS, f uintptr) { + if !(f != 0) { + return + } + if AtomicLoadPInt32(f+140) >= 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } +} + +func X__stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + _close_file(tls, f) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdin_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + _close_file(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) +} + +func X__stdio_exit_needed(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit(tls) +} + +func X__stdio_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var v1 int64 + var v2 int32 + var v3, v4 uintptr + var _ /* iov at bp+0 */ [2]Tiovec + _, _, _, _, _ = cnt, v1, v2, v3, v4 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: buf, + Fiov_len: len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)), + }, + 1: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fbuf, + Fiov_len: (*TFILE)(unsafe.Pointer(f)).Fbuf_size, + }, + } + if (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len != 0 { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_readv), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(bp), int64(Int32FromInt32(2))))) + } else { + v1 = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_read), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_base), int64((*(*[2]Tiovec)(unsafe.Pointer(bp)))[int32(1)].Fiov_len)))) + } + cnt = v1 + if cnt <= 0 { + if cnt != 0 { + v2 = int32(F_ERR) + } else { + v2 = int32(F_EOF) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v2) + return uint64(0) + } + if uint64(cnt) <= (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len { + return uint64(cnt) + } + cnt = Tssize_t(uint64(cnt) - (*(*[2]Tiovec)(unsafe.Pointer(bp)))[0].Fiov_len) + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(cnt) + if (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(len1-uint64(1)))) = *(*uint8)(unsafe.Pointer(v3)) + } + return len1 +} + +func X__stdio_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, (*TFILE)(unsafe.Pointer(f)).Ffd, off, whence) +} + +func X__stdio_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var cnt Tssize_t + var iov, v2, v3, v4 uintptr + var iovcnt int32 + var rem Tsize_t + var v5 uint64 + var _ /* iovs at bp+0 */ [2]Tiovec + _, _, _, _, _, _, _, _ = cnt, iov, iovcnt, rem, v2, v3, v4, v5 + *(*[2]Tiovec)(unsafe.Pointer(bp)) = [2]Tiovec{ + 0: { + Fiov_base: (*TFILE)(unsafe.Pointer(f)).Fwbase, + Fiov_len: uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)), + }, + 1: { + Fiov_base: buf, + Fiov_len: len1, + }, + } + iov = bp + rem = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + (*(*Tiovec)(unsafe.Pointer(iov + 1*16))).Fiov_len + iovcnt = int32(2) + for { + cnt = X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_writev), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(iov), int64(iovcnt)))) + if uint64(cnt) == rem { + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + return len1 + } + if cnt < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if iovcnt == int32(2) { + v5 = uint64(0) + } else { + v5 = len1 - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len + } + return v5 + } + rem -= uint64(cnt) + if uint64(cnt) > (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len { + cnt = Tssize_t(uint64(cnt) - (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len) + iov += 16 + iovcnt-- + } + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base = (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_base + uintptr(cnt) + (*(*Tiovec)(unsafe.Pointer(iov))).Fiov_len -= uint64(cnt) + goto _1 + _1: + } + return r +} + +func X__stdout_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v len1=%v, (%v:)", tls, f, buf, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* wsz at bp+0 */ Twinsize + (*TFILE)(unsafe.Pointer(f)).Fwrite = __ccgo_fp(X__stdio_write) + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_SVB) != 0) && X__syscall3(tls, int64(SYS_ioctl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp)) != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + } + return X__stdio_write(tls, f, buf, len1) +} + +func X__toread(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + var v4 int32 + _, _, _, _ = v1, v2, v3, v4 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_EOF) != 0 { + v4 = -int32(1) + } else { + v4 = 0 + } + return v4 +} + +func X__toread_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +func X__towrite(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2 uintptr + _, _ = v1, v2 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return -int32(1) + } + /* Clear read buffer (easier than summoning nasal demons) */ + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + /* Activate write through the buffer. */ + v2 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + return 0 +} + +func X__towrite_needs_stdio_exit(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__stdio_exit_needed(tls) +} + +/* This function assumes it will never be called if there is already + * data buffered for reading. */ + +func X__uflow(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* c at bp+0 */ uint8 + if !(X__toread(tls, f) != 0) && (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, bp, uint64(1)) == uint64(1) { + return int32(*(*uint8)(unsafe.Pointer(bp))) + } + return -int32(1) +} + +func Xasprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvasprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xclearerr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^(Int32FromInt32(F_EOF) | Int32FromInt32(F_ERR))) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xclearerr_unlocked(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xclearerr(tls, f) +} + +func Xdprintf(tls *TLS, fd int32, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v va=%v, (%v:)", tls, fd, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvdprintf(tls, fd, fmt, ap) + _ = ap + return ret +} + +const FSETLOCKING_BYCALLER = 2 +const FSETLOCKING_INTERNAL = 1 +const FSETLOCKING_QUERY = 0 + +func X_flushlbf(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + Xfflush(tls, uintptr(0)) +} + +func X__fsetlocking(tls *TLS, f uintptr, type1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v type1=%v, (%v:)", tls, f, type1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return 0 +} + +func X__fwriting(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 || (*TFILE)(unsafe.Pointer(f)).Fwend != 0) +} + +func X__freading(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NOWR) != 0 || (*TFILE)(unsafe.Pointer(f)).Frend != 0) +} + +func X__freadable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NORD) != 0)) +} + +func X__fwritable(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32(!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_NOWR) != 0)) +} + +func X__flbf(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return BoolInt32((*TFILE)(unsafe.Pointer(f)).Flbf >= 0) +} + +func X__fbufsize(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*TFILE)(unsafe.Pointer(f)).Fbuf_size +} + +func X__fpending(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Fwend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__fpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + if !(f != 0) { // libbsd fpurge test fails w/o this. + return int32(1) + } + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + return 0 +} + +func Xfpurge(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fpurge(tls, f) +} + +func X__freadahead(tls *TLS, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + v1 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } else { + v1 = 0 + } + return uint64(v1) +} + +func X__freadptr(tls *TLS, f uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v sizep=%v, (%v:)", tls, f, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + if (*TFILE)(unsafe.Pointer(f)).Frpos == (*TFILE)(unsafe.Pointer(f)).Frend { + return uintptr(0) + } + *(*Tsize_t)(unsafe.Pointer(sizep)) = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + return (*TFILE)(unsafe.Pointer(f)).Frpos +} + +func X__freadptrinc(tls *TLS, f uintptr, inc Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v inc=%v, (%v:)", tls, f, inc, origin(2)) + } + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(inc) +} + +func X__fseterr(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) +} + +func _dummy10(tls *TLS, f uintptr) { +} + +func Xfclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1 int32 + var head uintptr + _, _, _, _ = __need_unlock, head, r, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + r = Xfflush(tls, f) + r |= (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fclose1})))(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + /* Past this point, f is closed and any further explict access + * to it is undefined. However, it still exists as an entry in + * the open file list and possibly in the thread's locked files + * list, if it was closed while explicitly locked. Functions + * which process these lists must tolerate dead FILE objects + * (which necessarily have inactive buffer pointers) without + * producing any side effects. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) != 0 { + return r + } + X__unlist_locked_file(tls, f) + head = X__ofl_lock(tls) + if (*TFILE)(unsafe.Pointer(f)).Fprev != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev)).Fnext = (*TFILE)(unsafe.Pointer(f)).Fnext + } + if (*TFILE)(unsafe.Pointer(f)).Fnext != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext)).Fprev = (*TFILE)(unsafe.Pointer(f)).Fprev + } + if *(*uintptr)(unsafe.Pointer(head)) == f { + *(*uintptr)(unsafe.Pointer(head)) = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + Xfree(tls, (*TFILE)(unsafe.Pointer(f)).Fgetln_buf) + Xfree(tls, f) + return r +} + +func Xfeof(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_feof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xfeof_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfeof(tls, f) +} + +func Xferror(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, ret, v1 int32 + _, _, _ = __need_unlock, ret, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + ret = BoolInt32(!!((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func X_IO_ferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +func Xferror_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xferror(tls, f) +} + +// C documentation +// +// /* stdout.c will override this if linked */ +var _dummy11 = uintptr(0) + +func Xfflush(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, __need_unlock1, r, v2, v3 int32 + var v4, v5, v6 uintptr + _, _, _, _, _, _, _, _ = __need_unlock, __need_unlock1, r, v2, v3, v4, v5, v6 + if !(f != 0) { + r = 0 + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stdout_used)))) + } + if AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used))) != 0 { + r |= Xfflush(tls, AtomicLoadPUintptr(uintptr(unsafe.Pointer(&X__stderr_used)))) + } + f = *(*uintptr)(unsafe.Pointer(X__ofl_lock(tls))) + for { + if !(f != 0) { + break + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + r |= Xfflush(tls, f) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext + } + X__ofl_unlock(tls) + return r + } + if AtomicLoadPInt32(f+140) >= 0 { + v3 = ___lockfile(tls, f) + } else { + v3 = 0 + } + __need_unlock1 = v3 + /* If writing, flush output */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + } + /* If reading, sync position, per POSIX */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Frend), int32(1)) + } + /* Clear read and write modes */ + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + v6 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v6 + (*TFILE)(unsafe.Pointer(f)).Frpos = v6 + if __need_unlock1 != 0 { + ___unlockfile(tls, f) + } + return 0 +} + +func Xfflush_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfflush(tls, f) +} + +func _locking_getc(tls *TLS, f uintptr) (r int32) { + var c, old, v1, v12, v15, v16, v2, v4, v8, v9 int32 + var v14, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, v1, v12, v14, v15, v16, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 140 + for { + old = AtomicLoadPInt32(v7) + goto _11 + _11: + ; + v8 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v9 = v8 + goto _10 + _10: + ; + if !(v9 != old) { + break + } + } + v12 = old + goto _13 +_13: + if v12&int32(MAYBE_WAITERS) != 0 { + v14 = f + 140 + v15 = int32(1) + v16 = int32(1) + if v16 != 0 { + v16 = int32(FUTEX_PRIVATE) + } + if v15 < Int32FromInt32(0) { + v15 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)|v16), int64(v15)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)), int64(v15)) != 0 + } + return c +} + +func Xfgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc(tls, v1) + goto _3 +_3: + return v2 +} + +func Xfgetln(tls *TLS, f uintptr, plen uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v plen=%v, (%v:)", tls, f, plen, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, v1, v2 int32 + var l, v8 Tssize_t + var ret, z, v3, v4, v5, v7 uintptr + var v6 bool + _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, ret, z, v1, v2, v3, v4, v5, v6, v7, v8 + ret = uintptr(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + Xungetc(tls, v2, f) + if v6 = (*TFILE)(unsafe.Pointer(f)).Frend != 0; v6 { + v5 = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + z = v5 + } + if v6 && v5 != 0 { + ret = (*TFILE)(unsafe.Pointer(f)).Frpos + z++ + v7 = z + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(int64(v7) - int64(ret)) + (*TFILE)(unsafe.Pointer(f)).Frpos = z + } else { + *(*[1]Tsize_t)(unsafe.Pointer(bp)) = [1]Tsize_t{} + v8 = Xgetline(tls, f+168, bp, f) + l = v8 + if v8 > 0 { + *(*Tsize_t)(unsafe.Pointer(plen)) = uint64(l) + ret = (*TFILE)(unsafe.Pointer(f)).Fgetln_buf + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return ret +} + +func Xfgetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + var off Toff_t + _ = off + off = X__ftello(tls, f) + if off < 0 { + return -int32(1) + } + *(*int64)(unsafe.Pointer(pos)) = off + return 0 +} + +func Xfgets(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var k Tsize_t + var p, z, v6, v7, v9 uintptr + var v2 int64 + var v3 uint64 + var v8 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, k, p, z, v1, v2, v3, v4, v5, v6, v7, v8, v9 + p = s + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if n <= int32(1) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if n < int32(1) { + return uintptr(0) + } + *(*uint8)(unsafe.Pointer(s)) = uint8(0) + return s + } + n-- + for n != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, int32('\n'), uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v2 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v2 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v2) + if k < uint64(n) { + v3 = k + } else { + v3 = uint64(n) + } + k = v3 + Xmemcpy(tls, p, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + p += uintptr(k) + n = int32(uint64(n) - k) + if z != 0 || !(n != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 < 0 { + if p == s || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + s = uintptr(0) + } + break + } + n-- + v8 = uint8(c) + v9 = p + p++ + *(*uint8)(unsafe.Pointer(v9)) = v8 + if int32(v8) == int32('\n') { + break + } + } + if s != 0 { + *(*uint8)(unsafe.Pointer(p)) = uint8(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return s +} + +func Xfgets_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgets(tls, s, n, f) +} + +func ___fgetwc_unlocked_internal(tls *TLS, f uintptr) (r Twint_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var c, first, v1, v2 int32 + var l Tsize_t + var v3, v4 uintptr + var _ /* b at bp+16 */ uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+0 */ Twchar_t + _, _, _, _, _, _, _ = c, first, l, v1, v2, v3, v4 + /* Convert character from buffer if possible */ + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + l = uint64(Xmbtowc(tls, bp, (*TFILE)(unsafe.Pointer(f)).Frpos, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)))) + if l+uint64(1) >= uint64(1) { + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(l + BoolUint64(!(l != 0))) /* l==0 means 1 byte, null */ + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) + } + } + /* Convert character byte-by-byte */ + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + first = int32(1) + for cond := true; cond; cond = l == uint64(-Int32FromInt32(2)) { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + v2 = int32(*(*uint8)(unsafe.Pointer(v3))) + } else { + v2 = X__uflow(tls, f) + } + v1 = v2 + c = v1 + *(*uint8)(unsafe.Pointer(bp + 16)) = uint8(v1) + if c < 0 { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EILSEQ) + } + return uint32(0xffffffff) + } + l = Xmbrtowc(tls, bp, bp+16, uint64(1), bp+8) + if l == uint64(-Int32FromInt32(1)) { + if !(first != 0) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + Xungetc(tls, int32(*(*uint8)(unsafe.Pointer(bp + 16))), f) + } + return uint32(0xffffffff) + } + first = 0 + } + return uint32(*(*Twchar_t)(unsafe.Pointer(bp))) +} + +func X__fgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var loc Tlocale_t + var ploc uintptr + var wc Twchar_t + _, _, _ = loc, ploc, wc + ploc = uintptr(___get_tp(tls)) + 168 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + wc = int32(___fgetwc_unlocked_internal(tls, f)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(wc) +} + +func Xfgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var c Twint_t + _, _, _ = __need_unlock, c, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = X__fgetwc_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return c +} + +func Xfgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xgetwc_unlocked(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fgetwc_unlocked(tls, f) +} + +func Xfgetws(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v2 int32 + var c Twint_t + var p, v4, v5 uintptr + _, _, _, _, _, _, _ = __need_unlock, c, p, v1, v2, v4, v5 + p = s + v1 = n + n-- + if !(v1 != 0) { + return s + } + if AtomicLoadPInt32(f+140) >= 0 { + v2 = ___lockfile(tls, f) + } else { + v2 = 0 + } + __need_unlock = v2 + for { + if !(n != 0) { + break + } + c = X__fgetwc_unlocked(tls, f) + if c == uint32(0xffffffff) { + break + } + v4 = p + p += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = int32(c) + if c == uint32('\n') { + break + } + goto _3 + _3: + ; + n-- + } + *(*Twchar_t)(unsafe.Pointer(p)) = 0 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + p = s + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if p == s { + v5 = UintptrFromInt32(0) + } else { + v5 = s + } + return v5 +} + +func Xfgetws_unlocked(tls *TLS, s uintptr, n int32, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetws(tls, s, n, f) +} + +func Xfileno(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fd, v1 int32 + _, _, _ = __need_unlock, fd, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + fd = (*TFILE)(unsafe.Pointer(f)).Ffd + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if fd < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EBADF) + return -int32(1) + } + return fd +} + +func Xfileno_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfileno(tls, f) +} + +func Xflockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if !(Xftrylockfile(tls, f) != 0) { + return + } + ___lockfile(tls, f) + X__register_locked_file(tls, f, uintptr(___get_tp(tls))) +} + +type Tcookie = struct { + Fpos Tsize_t + Flen1 Tsize_t + Fsize Tsize_t + Fbuf uintptr + Fmode int32 +} + +type Tmem_FILE = struct { + Ff TFILE + Fc Tcookie + Fbuf [1032]uint8 +} + +func _mseek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64((*Tcookie)(unsafe.Pointer(c)).Fsize)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _mread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var rem Tsize_t + _, _ = c, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + rem = (*Tcookie)(unsafe.Pointer(c)).Flen1 - (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + rem = uint64(0) + } + if len1 > rem { + len1 = rem + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_EOF) + } + Xmemcpy(tls, buf, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + rem -= len1 + if rem > (*TFILE)(unsafe.Pointer(f)).Fbuf_size { + rem = (*TFILE)(unsafe.Pointer(f)).Fbuf_size + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(rem) + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), rem) + *(*Tsize_t)(unsafe.Pointer(c)) += rem + return len1 +} + +func _mwrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c uintptr + var len2, rem Tsize_t + _, _, _ = c, len2, rem + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _mwrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + if (*Tcookie)(unsafe.Pointer(c)).Fmode == int32('a') { + (*Tcookie)(unsafe.Pointer(c)).Fpos = (*Tcookie)(unsafe.Pointer(c)).Flen1 + } + rem = (*Tcookie)(unsafe.Pointer(c)).Fsize - (*Tcookie)(unsafe.Pointer(c)).Fpos + if len1 > rem { + len1 = rem + } + Xmemcpy(tls, (*Tcookie)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c)) += len1 + if (*Tcookie)(unsafe.Pointer(c)).Fpos > (*Tcookie)(unsafe.Pointer(c)).Flen1 { + (*Tcookie)(unsafe.Pointer(c)).Flen1 = (*Tcookie)(unsafe.Pointer(c)).Fpos + if (*Tcookie)(unsafe.Pointer(c)).Flen1 < (*Tcookie)(unsafe.Pointer(c)).Fsize { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Flen1))) = uint8(0) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_NORD) != 0 && (*Tcookie)(unsafe.Pointer(c)).Fsize != 0 { + *(*uint8)(unsafe.Pointer((*Tcookie)(unsafe.Pointer(c)).Fbuf + uintptr((*Tcookie)(unsafe.Pointer(c)).Fsize-uint64(1)))) = uint8(0) + } + } + } + return len1 +} + +func _mclose(tls *TLS, m uintptr) (r int32) { + return 0 +} + +func Xfmemopen(tls *TLS, buf uintptr, size Tsize_t, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v mode=%v, (%v:)", tls, buf, size, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var plus, v2 int32 + var v1 uint64 + var v3 Tsize_t + _, _, _, _, _ = f, plus, v1, v2, v3 + plus = BoolInt32(!!(Xstrchr(tls, mode, int32('+')) != 0)) + if !(Xstrchr(tls, __ccgo_ts+1534, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + if !(buf != 0) && size > uint64(Int64FromInt64(INT64_MAX)) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return uintptr(0) + } + if buf != 0 { + v1 = uint64(0) + } else { + v1 = size + } + f = Xmalloc(tls, uint64(1304)+v1) + if !(f != 0) { + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(UintptrFromInt32(0)+272)) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + if !(buf != 0) { + buf = f + 1304 + Xmemset(tls, buf, 0, size) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf = buf + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fsize = size + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fmode = int32(*(*uint8)(unsafe.Pointer(mode))) + if !(plus != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = size + } else { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('a') { + v3 = Xstrnlen(tls, buf, size) + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + (*Tmem_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + } else { + if plus != 0 { + *(*uint8)(unsafe.Pointer((*Tmem_FILE)(unsafe.Pointer(f)).Fc.Fbuf)) = uint8(0) + } + } + } + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_mread) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_mwrite) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_mseek) + (*Tmem_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_mclose) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +func Xfopen(tls *TLS, filename uintptr, mode uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v, (%v:)", tls, filename, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f uintptr + var fd, flags int32 + _, _, _ = f, fd, flags + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1534, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Compute the flags to pass to open() */ + flags = X__fmodeflags(tls, mode) + fd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open), int64(filename), int64(flags|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0666)))))) + if fd < 0 { + return uintptr(0) + } + if flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + f = X__fdopen(tls, fd, mode) + if f != 0 { + return f + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + return uintptr(0) +} + +type Tfcookie = struct { + Fcookie uintptr + Fiofuncs Tcookie_io_functions_t +} + +type Tcookie_FILE = struct { + Ff TFILE + Ffc Tfcookie + Fbuf [1032]uint8 +} + +func _cookieread(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v2, v3, v5 uintptr + var len2, readlen, remain, v1 Tsize_t + var ret Tssize_t + var v4 int32 + _, _, _, _, _, _, _, _, _, _ = fc, len2, readlen, remain, ret, v1, v2, v3, v4, v5 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + ret = int64(-int32(1)) + remain = len1 + readlen = uint64(0) + len2 = len1 - BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread != 0) { + goto bail + } + if len2 != 0 { + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len2) + if ret <= 0 { + goto bail + } + readlen += uint64(ret) + remain -= uint64(ret) + } + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) || remain > BoolUint64(!!((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0)) { + return readlen + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fread})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, (*TFILE)(unsafe.Pointer(f)).Frpos, (*TFILE)(unsafe.Pointer(f)).Fbuf_size) + if ret <= 0 { + goto bail + } + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Frpos + uintptr(ret) + v1 = readlen + readlen++ + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf + uintptr(v1))) = *(*uint8)(unsafe.Pointer(v2)) + return readlen + goto bail +bail: + ; + if ret == 0 { + v4 = int32(F_EOF) + } else { + v4 = int32(F_ERR) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(v4) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = v5 + (*TFILE)(unsafe.Pointer(f)).Frpos = v5 + return readlen +} + +func _cookiewrite(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var fc, v1, v2 uintptr + var len2 Tsize_t + var ret Tssize_t + _, _, _, _, _ = fc, len2, ret, v1, v2 + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite != 0) { + return len1 + } + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _cookiewrite(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwpos, len2) < len2 { + return uint64(0) + } + } + ret = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tssize_t)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fwrite})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, buf, len1) + if ret < 0 { + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(0) + } + return uint64(ret) +} + +func _cookieseek(tls *TLS, f uintptr, _off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*Toff_t)(unsafe.Pointer(bp)) = _off + var fc uintptr + var res int32 + _, _ = fc, res + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if uint32(whence) > uint32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !((*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOPNOTSUPP) + return int64(-int32(1)) + } + res = (*(*func(*TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fseek})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie, bp, whence) + if res < 0 { + return int64(res) + } + return *(*Toff_t)(unsafe.Pointer(bp)) +} + +func _cookieclose(tls *TLS, f uintptr) (r int32) { + var fc uintptr + _ = fc + fc = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1 != 0 { + return (*(*func(*TLS, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tfcookie)(unsafe.Pointer(fc)).Fiofuncs.Fclose1})))(tls, (*Tfcookie)(unsafe.Pointer(fc)).Fcookie) + } + return 0 +} + +func Xfopencookie(tls *TLS, cookie uintptr, mode uintptr, iofuncs Tcookie_io_functions_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v cookie=%v mode=%v iofuncs=%v, (%v:)", tls, cookie, mode, iofuncs, origin(2)) + defer func() { trc("-> %v", r) }() + } + var f, v1 uintptr + var v2 int32 + _, _, _ = f, v1, v2 + /* Check for valid initial mode character */ + if !(Xstrchr(tls, __ccgo_ts+1534, int32(*(*uint8)(unsafe.Pointer(mode)))) != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + /* Allocate FILE+fcookie+buffer or fail */ + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + /* Zero-fill only the struct, not the buffer */ + Xmemset(tls, f, 0, uint64(232)) + /* Impose mode restrictions */ + if !(Xstrchr(tls, mode, int32('+')) != 0) { + if int32(*(*uint8)(unsafe.Pointer(mode))) == int32('r') { + v2 = int32(F_NOWR) + } else { + v2 = int32(F_NORD) + } + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(v2) + } + /* Set up our fcookie */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fcookie = cookie + (*Tcookie_FILE)(unsafe.Pointer(f)).Ffc.Fiofuncs = iofuncs + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 272 + uintptr(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = Uint64FromInt64(1032) - Uint64FromInt32(UNGET) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + /* Initialize op ptrs. No problem if some are unneeded. */ + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fread = __ccgo_fp(_cookieread) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_cookiewrite) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_cookieseek) + (*Tcookie_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_cookieclose) + /* Add new FILE to open file list */ + return X__ofl_add(tls, f) +} + +func Xfprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func _locking_putc(tls *TLS, c int32, f uintptr) (r int32) { + var old, v1, v10, v13, v16, v17, v2, v4, v9 int32 + var v15, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, v1, v10, v13, v15, v16, v17, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 40 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 140 + for { + old = AtomicLoadPInt32(v8) + goto _12 + _12: + ; + v9 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v10 = v9 + goto _11 + _11: + ; + if !(v10 != old) { + break + } + } + v13 = old + goto _14 +_14: + if v13&int32(MAYBE_WAITERS) != 0 { + v15 = f + 140 + v16 = int32(1) + v17 = int32(1) + if v17 != 0 { + v17 = int32(FUTEX_PRIVATE) + } + if v16 < Int32FromInt32(0) { + v16 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)|v17), int64(v16)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)), int64(v16)) != 0 + } + return c +} + +func Xfputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xfputs(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, s) + return BoolInt32(Xfwrite(tls, s, uint64(1), l, f) == l) - int32(1) +} + +func Xfputs_unlocked(tls *TLS, s uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v, (%v:)", tls, s, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputs(tls, s, f) +} + +func X__fputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var l, v1 int32 + var loc Tlocale_t + var ploc, v3, v4 uintptr + var v2 uint8 + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _ = l, loc, ploc, v1, v2, v3, v4 + ploc = uintptr(___get_tp(tls)) + 168 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if BoolInt32(uint32(c) < uint32(128)) != 0 { + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + c = v1 + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwpos+uintptr(MB_LEN_MAX) < (*TFILE)(unsafe.Pointer(f)).Fwend { + l = Xwctomb(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, c) + if l < 0 { + c = Int32FromUint32(0xffffffff) + } else { + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + } + } else { + l = Xwctomb(tls, bp, c) + if l < 0 || X__fwritex(tls, bp, uint64(l), f) < uint64(l) { + c = Int32FromUint32(0xffffffff) + } + } + } + if uint32(c) == uint32(0xffffffff) { + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(c) +} + +func Xfputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + c = int32(X__fputwc_unlocked(tls, c, f)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return uint32(c) +} + +func Xfputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xputwc_unlocked(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fputwc_unlocked(tls, c, f) +} + +func Xfputws(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1040) + defer tls.Free(1040) + *(*uintptr)(unsafe.Pointer(bp)) = _ws + var __need_unlock, v1 int32 + var l, v2 Tsize_t + var loc Tlocale_t + var ploc uintptr + var v3 bool + var _ /* buf at bp+8 */ [1024]uint8 + _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3 + l = uint64(0) + ploc = uintptr(___get_tp(tls)) + 168 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + for { + if v3 = *(*uintptr)(unsafe.Pointer(bp)) != 0; v3 { + v2 = Xwcsrtombs(tls, bp+8, bp, uint64(1024), uintptr(0)) + l = v2 + } + if !(v3 && v2+uint64(1) > uint64(1)) { + break + } + if X__fwritex(tls, bp+8, l, f) < l { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return -int32(1) + } + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return int32(l) /* 0 or -1 */ +} + +func Xfputws_unlocked(tls *TLS, _ws uintptr, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _ws=%v f=%v, (%v:)", tls, _ws, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputws(tls, _ws, f) +} + +func Xfread(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var dest uintptr + var k, l, len1 Tsize_t + var v2, v4 uint64 + _, _, _, _, _, _, _, _ = __need_unlock, dest, k, l, len1, v1, v2, v4 + dest = destv + len1 = size * nmemb + l = len1 + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + /* First exhaust the buffer. */ + if uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos)) < l { + v2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos)) + } else { + v2 = l + } + k = v2 + Xmemcpy(tls, dest, (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + dest += uintptr(k) + l -= k + } + /* Read the remainder directly */ + for { + if !(l != 0) { + break + } + if X__toread(tls, f) != 0 { + v4 = uint64(0) + } else { + v4 = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fread})))(tls, f, dest, l) + } + k = v4 + if !(k != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return (len1 - l) / size + } + goto _3 + _3: + ; + l -= k + dest += uintptr(k) + } + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return nmemb +} + +func Xfread_unlocked(tls *TLS, destv uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v destv=%v size=%v nmemb=%v f=%v, (%v:)", tls, destv, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfread(tls, destv, size, nmemb, f) +} + +/* The basic idea of this implementation is to open a new FILE, + * hack the necessary parts of the new FILE into the old one, then + * close the new FILE. */ + +/* Locking IS necessary because another thread may provably hold the + * lock, via flockfile or otherwise, when freopen is called, and in that + * case, freopen cannot act until the lock is released. */ + +func Xfreopen(tls *TLS, filename uintptr, mode uintptr, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v filename=%v mode=%v f=%v, (%v:)", tls, filename, mode, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, fl, v1 int32 + var f2 uintptr + _, _, _, _ = __need_unlock, f2, fl, v1 + fl = X__fmodeflags(tls, mode) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfflush(tls, f) + if !(filename != 0) { + if fl&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + fl &= ^(Int32FromInt32(O_CREAT) | Int32FromInt32(O_EXCL) | Int32FromInt32(O_CLOEXEC)) + if X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_fcntl), int64((*TFILE)(unsafe.Pointer(f)).Ffd), int64(Int32FromInt32(F_SETFL)), int64(fl)))) < 0 { + goto fail + } + } else { + f2 = Xfopen(tls, filename, mode) + if !(f2 != 0) { + goto fail + } + if (*TFILE)(unsafe.Pointer(f2)).Ffd == (*TFILE)(unsafe.Pointer(f)).Ffd { + (*TFILE)(unsafe.Pointer(f2)).Ffd = -int32(1) + } else { + if X__dup3(tls, (*TFILE)(unsafe.Pointer(f2)).Ffd, (*TFILE)(unsafe.Pointer(f)).Ffd, fl&int32(O_CLOEXEC)) < 0 { + goto fail2 + } + } + (*TFILE)(unsafe.Pointer(f)).Fflags = (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_PERM) | (*TFILE)(unsafe.Pointer(f2)).Fflags + (*TFILE)(unsafe.Pointer(f)).Fread = (*TFILE)(unsafe.Pointer(f2)).Fread + (*TFILE)(unsafe.Pointer(f)).Fwrite = (*TFILE)(unsafe.Pointer(f2)).Fwrite + (*TFILE)(unsafe.Pointer(f)).Fseek = (*TFILE)(unsafe.Pointer(f2)).Fseek + (*TFILE)(unsafe.Pointer(f)).Fclose1 = (*TFILE)(unsafe.Pointer(f2)).Fclose1 + Xfclose(tls, f2) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = 0 + (*TFILE)(unsafe.Pointer(f)).Flocale = uintptr(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return f + goto fail2 +fail2: + ; + Xfclose(tls, f2) + goto fail +fail: + ; + Xfclose(tls, f) + return UintptrFromInt32(0) +} + +func Xfscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfscanf(tls, f, fmt, va) +} + +func X__fseeko_unlocked(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v2, v3 uintptr + _, _, _ = v1, v2, v3 + /* Fail immediately for invalid whence argument. */ + if whence != int32(1) && whence != 0 && whence != int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + /* Adjust relative offset for unread data in buffer, if any. */ + if whence == int32(1) && (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + off -= int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + /* Flush write buffer, and report error on failure. */ + if (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + return -int32(1) + } + } + /* Leave writing mode */ + v2 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v2 + v1 = v2 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v1 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v1 + /* Perform the underlying seek. */ + if (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, off, whence) < 0 { + return -int32(1) + } + /* If seek succeeded, file is seekable and we discard read buffer. */ + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v3 + (*TFILE)(unsafe.Pointer(f)).Frpos = v3 + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + return 0 +} + +func X__fseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, result, v1 int32 + _, _, _ = __need_unlock, result, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + result = X__fseeko_unlocked(tls, f, off, whence) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return result +} + +func Xfseek(tls *TLS, f uintptr, off int64, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfseeko(tls *TLS, f uintptr, off Toff_t, whence int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v off=%v whence=%v, (%v:)", tls, f, off, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, off, whence) +} + +func Xfsetpos(tls *TLS, f uintptr, pos uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v pos=%v, (%v:)", tls, f, pos, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__fseeko(tls, f, *(*int64)(unsafe.Pointer(pos)), 0) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__ftello_unlocked(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + var v1 int32 + _, _ = pos, v1 + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_APP) != 0 && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwbase { + v1 = int32(2) + } else { + v1 = int32(1) + } + pos = (*(*func(*TLS, uintptr, Toff_t, int32) Toff_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fseek})))(tls, f, 0, v1) + if pos < 0 { + return pos + } + /* Adjust for data in buffer. */ + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Frend) + } else { + if (*TFILE)(unsafe.Pointer(f)).Fwbase != 0 { + pos += int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase) + } + } + return pos +} + +func X__ftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var pos Toff_t + _, _, _ = __need_unlock, pos, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + pos = X__ftello_unlocked(tls, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return pos +} + +func Xftell(tls *TLS, f uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var pos Toff_t + _ = pos + pos = X__ftello(tls, f) + if pos > int64(0x7fffffffffffffff) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + return pos +} + +func Xftello(tls *TLS, f uintptr) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__ftello(tls, f) +} + +func X__do_orphaned_stdio_locks(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + var f uintptr + _ = f + f = (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks + for { + if !(f != 0) { + break + } + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1564) + AtomicStorePInt32(f+140, int32(0x40000000)) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1564) + goto _1 + _1: + ; + f = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } +} + +func X__unlist_locked_file(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount != 0 { + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = (*TFILE)(unsafe.Pointer(f)).Fprev_locked + } + if (*TFILE)(unsafe.Pointer(f)).Fprev_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fprev_locked)).Fnext_locked = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } else { + (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Fstdio_locks = (*TFILE)(unsafe.Pointer(f)).Fnext_locked + } + } +} + +func X__register_locked_file(tls *TLS, f uintptr, self Tpthread_t) { + if __ccgo_strace { + trc("tls=%v f=%v self=%v, (%v:)", tls, f, self, origin(2)) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount = int64(1) + (*TFILE)(unsafe.Pointer(f)).Fprev_locked = uintptr(0) + (*TFILE)(unsafe.Pointer(f)).Fnext_locked = (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks + if (*TFILE)(unsafe.Pointer(f)).Fnext_locked != 0 { + (*TFILE)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fnext_locked)).Fprev_locked = f + } + (*t__pthread)(unsafe.Pointer(self)).Fstdio_locks = f +} + +func Xftrylockfile(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var owner, tid, v1, v2, v3 int32 + var self Tpthread_t + var v5 bool + _, _, _, _, _, _, _ = owner, self, tid, v1, v2, v3, v5 + self = uintptr(___get_tp(tls)) + tid = (*t__pthread)(unsafe.Pointer(self)).Ftid + owner = AtomicLoadPInt32(f + 140) + if owner & ^Int32FromInt32(MAYBE_WAITERS) == tid { + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(0x7fffffffffffffff) { + return -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Flockcount++ + return 0 + } + if owner < 0 { + v1 = Int32FromInt32(0) + owner = v1 + AtomicStorePInt32(f+140, v1) + } + if v5 = owner != 0; !v5 { + v2 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1590) + v3 = v2 + goto _4 + _4: + } + if v5 || v3 != 0 { + return -int32(1) + } + X__register_locked_file(tls, f, self) + return 0 +} + +func Xfunlockfile(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + if (*TFILE)(unsafe.Pointer(f)).Flockcount == int64(1) { + X__unlist_locked_file(tls, f) + (*TFILE)(unsafe.Pointer(f)).Flockcount = 0 + ___unlockfile(tls, f) + } else { + (*TFILE)(unsafe.Pointer(f)).Flockcount-- + } +} + +func Xfwide(tls *TLS, f uintptr, mode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v mode=%v, (%v:)", tls, f, mode, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1, v3, v4 int32 + var v2 Tlocale_t + _, _, _, _, _ = __need_unlock, v1, v2, v3, v4 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if mode != 0 { + if !((*TFILE)(unsafe.Pointer(f)).Flocale != 0) { + if !!(*(*uintptr)(unsafe.Pointer((*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale)) != 0) { + v3 = int32(4) + } else { + v3 = int32(1) + } + if v3 == int32(1) { + v2 = uintptr(unsafe.Pointer(&X__c_locale)) + } else { + v2 = uintptr(unsafe.Pointer(&X__c_dot_utf8_locale)) + } + (*TFILE)(unsafe.Pointer(f)).Flocale = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fmode != 0) { + if mode > 0 { + v4 = int32(1) + } else { + v4 = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fmode = v4 + } + } + mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return mode +} + +func Xfwprintf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwprintf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__fwritex(tls *TLS, s uintptr, l Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v, (%v:)", tls, s, l, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var i, n Tsize_t + _, _ = i, n + i = uint64(0) + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + return uint64(0) + } + if l > uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwend)-int64((*TFILE)(unsafe.Pointer(f)).Fwpos)) { + return (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, l) + } + if (*TFILE)(unsafe.Pointer(f)).Flbf >= 0 { + /* Match /^(.*\n|)/ */ + i = l + for { + if !(i != 0 && int32(*(*uint8)(unsafe.Pointer(s + uintptr(i-uint64(1))))) != int32('\n')) { + break + } + goto _1 + _1: + ; + i-- + } + if i != 0 { + n = (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, s, i) + if n < i { + return n + } + s += uintptr(i) + l -= i + } + } + Xmemcpy(tls, (*TFILE)(unsafe.Pointer(f)).Fwpos, s, l) + *(*uintptr)(unsafe.Pointer(f + 40)) += uintptr(l) + return l + i +} + +func Xfwrite(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var k, l Tsize_t + var v2 uint64 + _, _, _, _, _ = __need_unlock, k, l, v1, v2 + l = size * nmemb + if !(size != 0) { + nmemb = uint64(0) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + k = X__fwritex(tls, src, l, f) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + if k == l { + v2 = nmemb + } else { + v2 = k / size + } + return v2 +} + +func Xfwrite_unlocked(tls *TLS, src uintptr, size Tsize_t, nmemb Tsize_t, f uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v src=%v size=%v nmemb=%v f=%v, (%v:)", tls, src, size, nmemb, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwrite(tls, src, size, nmemb, f) +} + +func Xfwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfwscanf(tls, f, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_fwscanf(tls *TLS, f uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v va=%v, (%v:)", tls, f, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfwscanf(tls, f, fmt, va) +} + +func _locking_getc1(tls *TLS, f uintptr) (r int32) { + var c, old, v1, v12, v15, v16, v2, v4, v8, v9 int32 + var v14, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, v1, v12, v14, v15, v16, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 140 + for { + old = AtomicLoadPInt32(v7) + goto _11 + _11: + ; + v8 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v9 = v8 + goto _10 + _10: + ; + if !(v9 != old) { + break + } + } + v12 = old + goto _13 +_13: + if v12&int32(MAYBE_WAITERS) != 0 { + v14 = f + 140 + v15 = int32(1) + v16 = int32(1) + if v16 != 0 { + v16 = int32(FUTEX_PRIVATE) + } + if v15 < Int32FromInt32(0) { + v15 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)|v16), int64(v15)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)), int64(v15)) != 0 + } + return c +} + +func Xgetc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = f1 + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc1(tls, v1) + goto _3 +_3: + return v2 +} + +func X_IO_getc(tls *TLS, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f1=%v, (%v:)", tls, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc(tls, f1) +} + +func Xgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, f) + } + return v1 +} + +func X_IO_getc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func Xfgetc_unlocked(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetc_unlocked(tls, f) +} + +func _locking_getc2(tls *TLS, f uintptr) (r int32) { + var c, old, v1, v12, v15, v16, v2, v4, v8, v9 int32 + var v14, v5, v6, v7 uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, old, v1, v12, v14, v15, v16, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, f) + } + c = v4 + v7 = f + 140 + for { + old = AtomicLoadPInt32(v7) + goto _11 + _11: + ; + v8 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1538) + v9 = v8 + goto _10 + _10: + ; + if !(v9 != old) { + break + } + } + v12 = old + goto _13 +_13: + if v12&int32(MAYBE_WAITERS) != 0 { + v14 = f + 140 + v15 = int32(1) + v16 = int32(1) + if v16 != 0 { + v16 = int32(FUTEX_PRIVATE) + } + if v15 < Int32FromInt32(0) { + v15 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)|v16), int64(v15)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v14), int64(Int32FromInt32(FUTEX_WAKE)), int64(v15)) != 0 + } + return c +} + +func Xgetchar(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v2, v4 int32 + var v1, v5, v6 uintptr + _, _, _, _, _, _ = l, v1, v2, v4, v5, v6 + v1 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + l = AtomicLoadPInt32(v1 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if (*TFILE)(unsafe.Pointer(v1)).Frpos != (*TFILE)(unsafe.Pointer(v1)).Frend { + v6 = v1 + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = int32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = X__uflow(tls, v1) + } + v2 = v4 + goto _3 + } + v2 = _locking_getc2(tls, v1) + goto _3 +_3: + return v2 +} + +func Xgetchar_unlocked(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2, v3 uintptr + _, _, _ = v1, v2, v3 + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v3 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + v1 = int32(*(*uint8)(unsafe.Pointer(v2))) + } else { + v1 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return v1 +} + +func Xgetdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v4, v5 int32 + var i, k, m, v11 Tsize_t + var tmp, z, v6, v7, v8, v9 uintptr + var v10 uint8 + var v3 int64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, k, m, tmp, z, v1, v10, v11, v3, v4, v5, v6, v7, v8, v9 + i = uint64(0) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !(n != 0) || !(s != 0) { + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) + } + if !(*(*uintptr)(unsafe.Pointer(s)) != 0) { + *(*Tsize_t)(unsafe.Pointer(n)) = uint64(0) + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + z = Xmemchr(tls, (*TFILE)(unsafe.Pointer(f)).Frpos, delim, uint64(int64((*TFILE)(unsafe.Pointer(f)).Frend)-int64((*TFILE)(unsafe.Pointer(f)).Frpos))) + if z != 0 { + v3 = int64(z) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + int64(1) + } else { + v3 = int64((*TFILE)(unsafe.Pointer(f)).Frend) - int64((*TFILE)(unsafe.Pointer(f)).Frpos) + } + k = uint64(v3) + } else { + z = uintptr(0) + k = uint64(0) + } + if i+k >= *(*Tsize_t)(unsafe.Pointer(n)) { + m = i + k + uint64(2) + if !(z != 0) && m < Uint64FromUint64(0xffffffffffffffff)/Uint64FromInt32(4) { + m += m / uint64(2) + } + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + m = i + k + uint64(2) + tmp = Xrealloc(tls, *(*uintptr)(unsafe.Pointer(s)), m) + if !(tmp != 0) { + /* Copy as much as fits and ensure no + * pushback remains in the FILE buf. */ + k = *(*Tsize_t)(unsafe.Pointer(n)) - i + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + *(*int32)(unsafe.Pointer(f + 136)) |= (*TFILE)(unsafe.Pointer(f)).Fmode - int32(1) + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOMEM) + return int64(-int32(1)) + } + } + *(*uintptr)(unsafe.Pointer(s)) = tmp + *(*Tsize_t)(unsafe.Pointer(n)) = m + } + if k != 0 { + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(s))+uintptr(i), (*TFILE)(unsafe.Pointer(f)).Frpos, k) + *(*uintptr)(unsafe.Pointer(f + 8)) += uintptr(k) + i += k + } + if z != 0 { + break + } + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend { + v7 = f + 8 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + v5 = int32(*(*uint8)(unsafe.Pointer(v6))) + } else { + v5 = X__uflow(tls, f) + } + v4 = v5 + c = v4 + if v4 == -int32(1) { + if !(i != 0) || !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_EOF) != 0) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(-int32(1)) + } + break + } + /* If the byte read by getc won't fit without growing the + * output buffer, push it back for next iteration. */ + if i+uint64(1) >= *(*Tsize_t)(unsafe.Pointer(n)) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + *(*uint8)(unsafe.Pointer(v8)) = uint8(c) + } else { + v10 = uint8(c) + v11 = i + i++ + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(v11))) = v10 + if int32(v10) == delim { + break + } + } + goto _2 + _2: + } + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)) + uintptr(i))) = uint8(0) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int64(i) +} + +func X__getdelim(tls *TLS, s uintptr, n uintptr, delim int32, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v delim=%v f=%v, (%v:)", tls, s, n, delim, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, delim, f) +} + +func Xgetline(tls *TLS, s uintptr, n uintptr, f uintptr) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v, (%v:)", tls, s, n, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetdelim(tls, s, n, int32('\n'), f) +} + +func Xgets(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, c, v1, v2, v3 int32 + var i, v6 Tsize_t + var v4, v5 uintptr + _, _, _, _, _, _, _, _, _ = __need_unlock, c, i, v1, v2, v3, v4, v5, v6 + i = uint64(0) + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdin_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + for { + if (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Frend { + v5 = uintptr(unsafe.Pointer(&X__stdin_FILE)) + 8 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + v3 = int32(*(*uint8)(unsafe.Pointer(v4))) + } else { + v3 = X__uflow(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + v2 = v3 + c = v2 + if !(v2 != -int32(1) && c != int32('\n')) { + break + } + v6 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v6))) = uint8(c) + } + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + if c != int32('\n') && (!((*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdin_FILE)))).Fflags&Uint32FromInt32(F_EOF) != 0) || !(i != 0)) { + s = uintptr(0) + } + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) + } + return s +} + +func Xgetw(tls *TLS, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int32 + var _ /* x at bp+0 */ int32 + _ = v1 + if Xfread(tls, bp, uint64(4), uint64(1), f) != 0 { + v1 = *(*int32)(unsafe.Pointer(bp)) + } else { + v1 = -int32(1) + } + return v1 +} + +func Xgetwc(tls *TLS, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, f) +} + +func Xgetwchar(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfgetwc(tls, uintptr(unsafe.Pointer(&X__stdin_FILE))) +} + +func Xgetwchar_unlocked(tls *TLS) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetwchar(tls) +} + +var _ofl_head uintptr +var _ofl_lock [1]int32 + +func X__ofl_lock(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + ___lock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) + return uintptr(unsafe.Pointer(&_ofl_head)) +} + +func X__ofl_unlock(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_ofl_lock))) +} + +func X__ofl_add(tls *TLS, f uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var head uintptr + _ = head + head = X__ofl_lock(tls) + (*TFILE)(unsafe.Pointer(f)).Fnext = *(*uintptr)(unsafe.Pointer(head)) + if *(*uintptr)(unsafe.Pointer(head)) != 0 { + (*TFILE)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(head)))).Fprev = f + } + *(*uintptr)(unsafe.Pointer(head)) = f + X__ofl_unlock(tls) + return f +} + +type Tcookie1 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t +} + +type Tms_FILE = struct { + Ff TFILE + Fc Tcookie1 + Fbuf [1024]uint8 +} + +func _ms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie1)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie1)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > int64(0x7fffffffffffffff)-base { + goto fail + } + v2 = uint64(base + off) + (*Tcookie1)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _ms_write(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _ms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie1)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie1)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + newbuf = Xrealloc(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf, len2) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie1)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fspace), 0, len2-(*Tcookie1)(unsafe.Pointer(c)).Fspace) + (*Tcookie1)(unsafe.Pointer(c)).Fspace = len2 + } + Xmemcpy(tls, (*Tcookie1)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie1)(unsafe.Pointer(c)).Fpos), buf, len1) + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len1 + if (*Tcookie1)(unsafe.Pointer(c)).Fpos >= (*Tcookie1)(unsafe.Pointer(c)).Flen1 { + (*Tcookie1)(unsafe.Pointer(c)).Flen1 = (*Tcookie1)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie1)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie1)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _ms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_memstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(1304)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(1)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(48)) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Tms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*uint8)(unsafe.Pointer(buf)) = uint8(0) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 280 + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(1024) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_ms_write) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_ms_seek) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_ms_close) + (*Tms_FILE)(unsafe.Pointer(f)).Ff.Fmode = -int32(1) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + return X__ofl_add(tls, f) +} + +type Tcookie2 = struct { + Fbufp uintptr + Fsizep uintptr + Fpos Tsize_t + Fbuf uintptr + Flen1 Tsize_t + Fspace Tsize_t + Fmbs Tmbstate_t +} + +type Twms_FILE = struct { + Ff TFILE + Fc Tcookie2 + Fbuf [1]uint8 +} + +func _wms_seek(tls *TLS, f uintptr, off Toff_t, whence int32) (r Toff_t) { + bp := tls.Alloc(32) + defer tls.Free(32) + var base Tssize_t + var c uintptr + var v2 Tsize_t + _, _, _ = base, c, v2 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(uint32(whence) > uint32(2)) { + goto _1 + } + goto fail +fail: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return int64(-int32(1)) +_1: + ; + *(*[3]Tsize_t)(unsafe.Pointer(bp)) = [3]Tsize_t{ + 1: (*Tcookie2)(unsafe.Pointer(c)).Fpos, + 2: (*Tcookie2)(unsafe.Pointer(c)).Flen1, + } + base = int64(*(*Tsize_t)(unsafe.Pointer(bp + uintptr(whence)*8))) + if off < -base || off > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)-base { + goto fail + } + Xmemset(tls, c+48, 0, uint64(8)) + v2 = uint64(base + off) + (*Tcookie2)(unsafe.Pointer(c)).Fpos = v2 + return int64(v2) +} + +func _wms_write(tls *TLS, f uintptr, _buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + *(*uintptr)(unsafe.Pointer(bp)) = _buf + var c, newbuf, v1 uintptr + var len2 Tsize_t + _, _, _, _ = c, len2, newbuf, v1 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + len2 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + if len2 != 0 { + (*TFILE)(unsafe.Pointer(f)).Fwpos = (*TFILE)(unsafe.Pointer(f)).Fwbase + if _wms_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, len2) < len2 { + return uint64(0) + } + } + if len1+(*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Fspace { + len2 = uint64(2)*(*Tcookie2)(unsafe.Pointer(c)).Fspace + uint64(1) | ((*Tcookie2)(unsafe.Pointer(c)).Fpos + len1 + uint64(1)) + if len2 > uint64(Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(4)) { + return uint64(0) + } + newbuf = Xrealloc(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf, len2*uint64(4)) + if !(newbuf != 0) { + return uint64(0) + } + v1 = newbuf + (*Tcookie2)(unsafe.Pointer(c)).Fbuf = v1 + *(*uintptr)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fbufp)) = v1 + Xmemset(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fspace)*4, 0, uint64(4)*(len2-(*Tcookie2)(unsafe.Pointer(c)).Fspace)) + (*Tcookie2)(unsafe.Pointer(c)).Fspace = len2 + } + len2 = Xmbsnrtowcs(tls, (*Tcookie2)(unsafe.Pointer(c)).Fbuf+uintptr((*Tcookie2)(unsafe.Pointer(c)).Fpos)*4, bp, len1, (*Tcookie2)(unsafe.Pointer(c)).Fspace-(*Tcookie2)(unsafe.Pointer(c)).Fpos, c+48) + if len2 == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(c + 16)) += len2 + if (*Tcookie2)(unsafe.Pointer(c)).Fpos >= (*Tcookie2)(unsafe.Pointer(c)).Flen1 { + (*Tcookie2)(unsafe.Pointer(c)).Flen1 = (*Tcookie2)(unsafe.Pointer(c)).Fpos + } + *(*Tsize_t)(unsafe.Pointer((*Tcookie2)(unsafe.Pointer(c)).Fsizep)) = (*Tcookie2)(unsafe.Pointer(c)).Fpos + return len1 +} + +func _wms_close(tls *TLS, f uintptr) (r int32) { + return 0 +} + +func Xopen_wmemstream(tls *TLS, bufp uintptr, sizep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v bufp=%v sizep=%v, (%v:)", tls, bufp, sizep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var buf, f, v1, v2, v6 uintptr + var v3, v4, v5 Tsize_t + _, _, _, _, _, _, _, _ = buf, f, v1, v2, v3, v4, v5, v6 + v1 = Xmalloc(tls, uint64(296)) + f = v1 + if !(v1 != 0) { + return uintptr(0) + } + v2 = Xmalloc(tls, uint64(4)) + buf = v2 + if !(v2 != 0) { + Xfree(tls, f) + return uintptr(0) + } + Xmemset(tls, f, 0, uint64(232)) + Xmemset(tls, f+232, 0, uint64(56)) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fcookie = f + 232 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbufp = bufp + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fsizep = sizep + v5 = Uint64FromInt32(0) + *(*Tsize_t)(unsafe.Pointer(sizep)) = v5 + v4 = v5 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fspace = v4 + v3 = v4 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Flen1 = v3 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fpos = v3 + v6 = buf + *(*uintptr)(unsafe.Pointer(bufp)) = v6 + (*Twms_FILE)(unsafe.Pointer(f)).Fc.Fbuf = v6 + *(*Twchar_t)(unsafe.Pointer(buf)) = 0 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fflags = uint32(F_NORD) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Ffd = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf = f + 288 + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fbuf_size = uint64(0) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Flbf = -int32(1) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fwrite = __ccgo_fp(_wms_write) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fseek = __ccgo_fp(_wms_seek) + (*Twms_FILE)(unsafe.Pointer(f)).Ff.Fclose1 = __ccgo_fp(_wms_close) + if !(X__libc.Fthreaded != 0) { + AtomicStorePInt32(f+140, -int32(1)) + } + Xfwide(tls, f, int32(1)) + return X__ofl_add(tls, f) +} + +func Xpclose(tls *TLS, f uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var pid Tpid_t + var r, v1 int32 + var _ /* status at bp+0 */ int32 + _, _, _ = pid, r, v1 + pid = (*TFILE)(unsafe.Pointer(f)).Fpipe_pid + Xfclose(tls, f) + for { + v1 = int32(X__syscall4(tls, int64(SYS_wait4), int64(pid), int64(bp), int64(Int32FromInt32(0)), int64(Int32FromInt32(0)))) + r = v1 + if !(v1 == -int32(EINTR)) { + break + } + } + if r < 0 { + return int32(X__syscall_ret(tls, uint64(r))) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xperror(tls *TLS, msg uintptr) { + if __ccgo_strace { + trc("tls=%v msg=%v, (%v:)", tls, msg, origin(2)) + } + var __need_unlock, old_mode, v1 int32 + var errstr, f, old_locale uintptr + _, _, _, _, _, _ = __need_unlock, errstr, f, old_locale, old_mode, v1 + f = uintptr(unsafe.Pointer(&X__stderr_FILE)) + errstr = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + /* Save stderr's orientation and encoding rule, since perror is not + * permitted to change them. */ + old_locale = (*TFILE)(unsafe.Pointer(f)).Flocale + old_mode = (*TFILE)(unsafe.Pointer(f)).Fmode + if msg != 0 && *(*uint8)(unsafe.Pointer(msg)) != 0 { + Xfwrite(tls, msg, Xstrlen(tls, msg), uint64(1), f) + Xfputc(tls, int32(':'), f) + Xfputc(tls, int32(' '), f) + } + Xfwrite(tls, errstr, Xstrlen(tls, errstr), uint64(1), f) + Xfputc(tls, int32('\n'), f) + (*TFILE)(unsafe.Pointer(f)).Fmode = old_mode + (*TFILE)(unsafe.Pointer(f)).Flocale = old_locale + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) + _ = ap + return ret +} + +func _locking_putc1(tls *TLS, c int32, f uintptr) (r int32) { + var old, v1, v10, v13, v16, v17, v2, v4, v9 int32 + var v15, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, v1, v10, v13, v15, v16, v17, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 40 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 140 + for { + old = AtomicLoadPInt32(v8) + goto _12 + _12: + ; + v9 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v10 = v9 + goto _11 + _11: + ; + if !(v10 != old) { + break + } + } + v13 = old + goto _14 +_14: + if v13&int32(MAYBE_WAITERS) != 0 { + v15 = f + 140 + v16 = int32(1) + v17 = int32(1) + if v17 != 0 { + v17 = int32(FUTEX_PRIVATE) + } + if v16 < Int32FromInt32(0) { + v16 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)|v17), int64(v16)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)), int64(v16)) != 0 + } + return c +} + +func Xputc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = f1 + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc1(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func X_IO_putc(tls *TLS, c1 int32, f1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v f1=%v, (%v:)", tls, c1, f1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc(tls, c1, f1) +} + +func Xputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v2 = uint8(c) + v4 = f + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, f, int32(uint8(c))) + } + return v1 +} + +func X_IO_putc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func Xfputc_unlocked(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputc_unlocked(tls, c, f) +} + +func _locking_putc2(tls *TLS, c int32, f uintptr) (r int32) { + var old, v1, v10, v13, v16, v17, v2, v4, v9 int32 + var v15, v6, v7, v8 uintptr + var v5 uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = old, v1, v10, v13, v15, v16, v17, v2, v4, v5, v6, v7, v8, v9 + v1 = 0 + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v2 = v1 + goto _3 +_3: + if v2 != 0 { + ___lockfile(tls, f) + } + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(f)).Flbf && (*TFILE)(unsafe.Pointer(f)).Fwpos != (*TFILE)(unsafe.Pointer(f)).Fwend { + v5 = uint8(c) + v7 = f + 40 + v6 = *(*uintptr)(unsafe.Pointer(v7)) + *(*uintptr)(unsafe.Pointer(v7))++ + *(*uint8)(unsafe.Pointer(v6)) = v5 + v4 = int32(v5) + } else { + v4 = X__overflow(tls, f, int32(uint8(c))) + } + c = v4 + v8 = f + 140 + for { + old = AtomicLoadPInt32(v8) + goto _12 + _12: + ; + v9 = old + // __asm__ __volatile__ ( + // + // "cs %0, %2, %1" + // : "+d"(t), "+Q"(*p) : "d"(s) : "memory", "cc"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 4, __ccgo_ts+1551) + v10 = v9 + goto _11 + _11: + ; + if !(v10 != old) { + break + } + } + v13 = old + goto _14 +_14: + if v13&int32(MAYBE_WAITERS) != 0 { + v15 = f + 140 + v16 = int32(1) + v17 = int32(1) + if v17 != 0 { + v17 = int32(FUTEX_PRIVATE) + } + if v16 < Int32FromInt32(0) { + v16 = int32(INT_MAX) + } + _ = X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)|v17), int64(v16)) != int64(-int32(ENOSYS)) || X__syscall3(tls, int64(SYS_futex), int64(v15), int64(Int32FromInt32(FUTEX_WAKE)), int64(v16)) != 0 + } + return c +} + +func Xputchar(tls *TLS, c1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c1=%v, (%v:)", tls, c1, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l, v1, v3, v5 int32 + var v2, v7, v8 uintptr + var v6 uint8 + _, _, _, _, _, _, _, _ = l, v1, v2, v3, v5, v6, v7, v8 + v1 = c1 + v2 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + l = AtomicLoadPInt32(v2 + 140) + if l < 0 || l != 0 && l & ^Int32FromInt32(MAYBE_WAITERS) == (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Ftid { + if int32(uint8(v1)) != (*TFILE)(unsafe.Pointer(v2)).Flbf && (*TFILE)(unsafe.Pointer(v2)).Fwpos != (*TFILE)(unsafe.Pointer(v2)).Fwend { + v6 = uint8(v1) + v8 = v2 + 40 + v7 = *(*uintptr)(unsafe.Pointer(v8)) + *(*uintptr)(unsafe.Pointer(v8))++ + *(*uint8)(unsafe.Pointer(v7)) = v6 + v5 = int32(v6) + } else { + v5 = X__overflow(tls, v2, int32(uint8(v1))) + } + v3 = v5 + goto _4 + } + v3 = _locking_putc2(tls, v1, v2) + goto _4 +_4: + return v3 +} + +func Xputchar_unlocked(tls *TLS, c int32) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + var v2 uint8 + var v3, v4 uintptr + _, _, _, _ = v1, v2, v3, v4 + if int32(uint8(c)) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v2 = uint8(c) + v4 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(v3)) = v2 + v1 = int32(v2) + } else { + v1 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(c))) + } + return v1 +} + +func Xputs(tls *TLS, s uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var __need_unlock, r, v1, v2 int32 + var v3 uint8 + var v4, v5 uintptr + var v6 bool + _, _, _, _, _, _, _, _ = __need_unlock, r, v1, v2, v3, v4, v5, v6 + if AtomicLoadPInt32(uintptr(unsafe.Pointer(&X__stdout_FILE))+140) >= 0 { + v1 = ___lockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } else { + v1 = 0 + } + __need_unlock = v1 + if v6 = Xfputs(tls, s, uintptr(unsafe.Pointer(&X__stdout_FILE))) < 0; !v6 { + if int32(uint8(Int32FromUint8('\n'))) != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Flbf && (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwpos != (*TFILE)(unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdout_FILE)))).Fwend { + v3 = uint8(Int32FromUint8('\n')) + v5 = uintptr(unsafe.Pointer(&X__stdout_FILE)) + 40 + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = v3 + v2 = int32(v3) + } else { + v2 = X__overflow(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), int32(uint8(Int32FromUint8('\n')))) + } + } + r = -BoolInt32(v6 || v2 < 0) + if __need_unlock != 0 { + ___unlockfile(tls, uintptr(unsafe.Pointer(&X__stdout_FILE))) + } + return r +} + +func Xputw(tls *TLS, _x int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v _x=%v f=%v, (%v:)", tls, _x, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + *(*int32)(unsafe.Pointer(bp)) = _x + return int32(Xfwrite(tls, bp, uint64(4), uint64(1), f)) - int32(1) +} + +func Xputwc(tls *TLS, c Twchar_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, f) +} + +func Xputwchar(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xfputwc(tls, c, uintptr(unsafe.Pointer(&X__stdout_FILE))) +} + +func Xputwchar_unlocked(tls *TLS, c Twchar_t) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xputwchar(tls, c) +} + +func Xremove(tls *TLS, path uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall1(tls, int64(SYS_unlink), int64(path))) + if r == -int32(EISDIR) { + r = int32(X__syscall1(tls, int64(SYS_rmdir), int64(path))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xrename(tls *TLS, old uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_rename), int64(old), int64(new1))))) +} + +func Xrewind(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + var __need_unlock, v1 int32 + _, _ = __need_unlock, v1 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + X__fseeko_unlocked(tls, f, 0, 0) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } +} + +func Xscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_scanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xscanf(tls, fmt, va) +} + +func Xsetbuf(tls *TLS, f uintptr, buf uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v, (%v:)", tls, f, buf, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, uint64(BUFSIZ)) +} + +func Xsetbuffer(tls *TLS, f uintptr, buf uintptr, size Tsize_t) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v size=%v, (%v:)", tls, f, buf, size, origin(2)) + } + var v1 int32 + _ = v1 + if buf != 0 { + v1 = _IOFBF + } else { + v1 = int32(_IONBF) + } + Xsetvbuf(tls, f, buf, v1, size) +} + +func Xsetlinebuf(tls *TLS, f uintptr) { + if __ccgo_strace { + trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) + } + Xsetvbuf(tls, f, uintptr(0), int32(_IOLBF), uint64(0)) +} + +/* The behavior of this function is undefined except when it is the first + * operation on the stream, so the presence or absence of locking is not + * observable in a program whose behavior is defined. Thus no locking is + * performed here. No allocation of buffers is performed, but a buffer + * provided by the caller is used as long as it is suitably sized. */ + +func Xsetvbuf(tls *TLS, f uintptr, buf uintptr, type1 int32, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v buf=%v type1=%v size=%v, (%v:)", tls, f, buf, type1, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + (*TFILE)(unsafe.Pointer(f)).Flbf = -int32(1) + if type1 == int32(_IONBF) { + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + } else { + if type1 == int32(_IOLBF) || type1 == _IOFBF { + if buf != 0 && size >= uint64(UNGET) { + (*TFILE)(unsafe.Pointer(f)).Fbuf = buf + UintptrFromInt32(UNGET) + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = size - uint64(UNGET) + } + if type1 == int32(_IOLBF) && (*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0 { + (*TFILE)(unsafe.Pointer(f)).Flbf = int32('\n') + } + } else { + return -int32(1) + } + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_SVB) + return 0 +} + +func Xsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsnprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xsprintf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsprintf(tls, s, fmt, ap) + _ = ap + return ret +} + +func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvsscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_sscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsscanf(tls, s, fmt, va) +} + +var _buf5 [8]uint8 + +func init() { + p := unsafe.Pointer(&X__stderr_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdio_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf6 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdin_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 64)) = __ccgo_fp(X__stdio_read) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +var _buf7 [1032]uint8 + +func init() { + p := unsafe.Pointer(&X__stdout_FILE) + *(*uintptr)(unsafe.Add(p, 24)) = __ccgo_fp(X__stdio_close) + *(*uintptr)(unsafe.Add(p, 72)) = __ccgo_fp(X__stdout_write) + *(*uintptr)(unsafe.Add(p, 80)) = __ccgo_fp(X__stdio_seek) +} + +func Xswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v va=%v, (%v:)", tls, s, n, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswprintf(tls, s, n, fmt, ap) + _ = ap + return ret +} + +func Xswscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvswscanf(tls, s, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_swscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xswscanf(tls, s, fmt, va) +} + +const MAXTRIES = 100 + +func Xtempnam(tls *TLS, dir uintptr, pfx uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v dir=%v pfx=%v, (%v:)", tls, dir, pfx, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(4112) + defer tls.Free(4112) + var dl, l, pl Tsize_t + var r, try int32 + var _ /* s at bp+1 */ [4096]uint8 + _, _, _, _, _ = dl, l, pl, r, try + if !(dir != 0) { + dir = __ccgo_ts + 1603 + } + if !(pfx != 0) { + pfx = __ccgo_ts + 1608 + } + dl = Xstrlen(tls, dir) + pl = Xstrlen(tls, pfx) + l = dl + uint64(1) + pl + uint64(1) + uint64(6) + if l >= uint64(PATH_MAX) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENAMETOOLONG) + return uintptr(0) + } + Xmemcpy(tls, bp+1, dir, dl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl] = uint8('/') + Xmemcpy(tls, bp+1+uintptr(dl)+uintptr(1), pfx, pl) + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[dl+uint64(1)+pl] = uint8('_') + (*(*[4096]uint8)(unsafe.Pointer(bp + 1)))[l] = uint8(0) + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(l)-uintptr(6)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + return Xstrdup(tls, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpfile(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var f uintptr + var fd, try int32 + var _ /* s at bp+0 */ [20]uint8 + _, _, _ = f, fd, try + *(*[20]uint8)(unsafe.Pointer(bp)) = [20]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'f', 'i', 'l', 'e', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+uintptr(13)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_open), int64(bp), int64(Int32FromInt32(O_RDWR)|Int32FromInt32(O_CREAT)|Int32FromInt32(O_EXCL)|Int32FromInt32(O_LARGEFILE)), int64(Int32FromInt32(0600)))))) + if fd >= 0 { + X__syscall1(tls, int64(SYS_unlink), int64(bp)) + f = X__fdopen(tls, fd, __ccgo_ts+1613) + if !(f != 0) { + X__syscall1(tls, int64(SYS_close), int64(fd)) + } + return f + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +func Xtmpnam(tls *TLS, buf uintptr) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v, (%v:)", tls, buf, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var r, try int32 + var v2 uintptr + var _ /* s at bp+1 */ [19]uint8 + _, _, _ = r, try, v2 + *(*[19]uint8)(unsafe.Pointer(bp + 1)) = [19]uint8{'/', 't', 'm', 'p', '/', 't', 'm', 'p', 'n', 'a', 'm', '_', 'X', 'X', 'X', 'X', 'X', 'X'} + try = 0 + for { + if !(try < int32(MAXTRIES)) { + break + } + ___randname(tls, bp+1+uintptr(12)) + *(*[1]uint8)(unsafe.Pointer(bp)) = [1]uint8{} + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(bp+1), int64(bp), int64(Int32FromInt32(1)))) + if r == -int32(ENOENT) { + if buf != 0 { + v2 = buf + } else { + v2 = uintptr(unsafe.Pointer(&_internal1)) + } + return Xstrcpy(tls, v2, bp+1) + } + goto _1 + _1: + ; + try++ + } + return uintptr(0) +} + +var _internal1 [20]uint8 + +func Xungetc(tls *TLS, c int32, f uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + var __need_unlock, v1 int32 + var v2, v3 uintptr + _, _, _, _ = __need_unlock, v1, v2, v3 + if c == -int32(1) { + return c + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || (*TFILE)(unsafe.Pointer(f)).Frpos <= (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return -int32(1) + } + v3 = f + 8 + *(*uintptr)(unsafe.Pointer(v3))-- + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uint8)(unsafe.Pointer(v2)) = uint8(c) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return int32(uint8(c)) +} + +func Xungetwc(tls *TLS, c Twint_t, f uintptr) (r Twint_t) { + if __ccgo_strace { + trc("tls=%v c=%v f=%v, (%v:)", tls, c, f, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var __need_unlock, l, v1, v2 int32 + var loc Tlocale_t + var ploc, v4, v5, p6 uintptr + var v3 bool + var _ /* mbc at bp+0 */ [4]uint8 + _, _, _, _, _, _, _, _, _, _ = __need_unlock, l, loc, ploc, v1, v2, v3, v4, v5, p6 + ploc = uintptr(___get_tp(tls)) + 168 + loc = *(*Tlocale_t)(unsafe.Pointer(ploc)) + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if (*TFILE)(unsafe.Pointer(f)).Fmode <= 0 { + Xfwide(tls, f, int32(1)) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = (*TFILE)(unsafe.Pointer(f)).Flocale + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if v3 = !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) || c == uint32(0xffffffff); !v3 { + v2 = int32(Xwcrtomb(tls, bp, int32(c), uintptr(0))) + l = v2 + } + if v3 || v2 < 0 || (*TFILE)(unsafe.Pointer(f)).Frpos < (*TFILE)(unsafe.Pointer(f)).Fbuf-uintptr(UNGET)+uintptr(l) { + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return uint32(0xffffffff) + } + if BoolInt32(c < uint32(128)) != 0 { + v5 = f + 8 + *(*uintptr)(unsafe.Pointer(v5))-- + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uint8)(unsafe.Pointer(v4)) = uint8(c) + } else { + p6 = f + 8 + *(*uintptr)(unsafe.Pointer(p6)) -= uintptr(l) + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(p6)), bp, uint64(l)) + } + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_EOF)) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + *(*Tlocale_t)(unsafe.Pointer(ploc)) = loc + return c +} + +func Xvasprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap2 Tva_list + var l int32 + var v1 uintptr + var v2 bool + _, _, _, _ = ap2, l, v1, v2 + ap2 = ap + l = Xvsnprintf(tls, uintptr(0), uint64(0), fmt, ap2) + _ = ap2 + if v2 = l < 0; !v2 { + v1 = Xmalloc(tls, uint64(uint32(l)+uint32(1))) + *(*uintptr)(unsafe.Pointer(s)) = v1 + } + if v2 || !(v1 != 0) { + return -int32(1) + } + return Xvsnprintf(tls, *(*uintptr)(unsafe.Pointer(s)), uint64(uint32(l)+uint32(1)), fmt, ap) +} + +func Xvdprintf(tls *TLS, fd int32, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v fmt=%v ap=%v, (%v:)", tls, fd, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fwrite: __ccgo_fp(X__stdio_write), + Fbuf: fmt, + Ffd: fd, + Flock: -int32(1), + Flbf: -int32(1), + } + return Xvfprintf(tls, bp, fmt, ap) +} + +const ALT_FORM = 8 +const FLAGMASK = 75913 +const GROUPED = 128 +const LDBL_EPSILON3 = 2.22044604925031308085e-16 +const LEFT_ADJ = 8192 +const MARK_POS = 2048 +const PAD_POS = 1 +const ZERO_PAD = 65536 + +const _BARE = 0 +const _LPRE = 1 +const _LLPRE = 2 +const _HPRE = 3 +const _HHPRE = 4 +const _BIGLPRE = 5 +const _ZTPRE = 6 +const _JPRE = 7 +const _STOP = 8 +const _PTR = 9 +const _INT = 10 +const _UINT = 11 +const _ULLONG = 12 +const _LONG = 13 +const _ULONG = 14 +const _SHORT = 15 +const _USHORT = 16 +const _CHAR = 17 +const _UCHAR = 18 +const _LLONG = 19 +const _SIZET = 20 +const _IMAX = 21 +const _UMAX = 22 +const _PDIFF = 23 +const _UIPTR = 24 +const _DBL = 25 +const _LDBL = 26 +const _NOARG = 27 +const _MAXSTATE = 28 + +var _states = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +type Targ = struct { + Ff [0]float64 + Fp [0]uintptr + Fi Tuintmax_t +} + +func _pop_arg(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + if !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0) { + X__fwritex(tls, s, l, f) + } +} + +func _pad3(tls *TLS, f uintptr, c uint8, w int32, l int32, fl int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uint64 + var _ /* pad at bp+0 */ [256]uint8 + _ = v1 + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0 || l >= w { + return + } + l = w - l + if uint64(l) > uint64(256) { + v1 = uint64(256) + } else { + v1 = uint64(l) + } + Xmemset(tls, bp, int32(c), v1) + for { + if !(uint64(l) >= uint64(256)) { + break + } + _out(tls, f, bp, uint64(256)) + goto _2 + _2: + ; + l = int32(uint64(l) - Uint64FromInt64(256)) + } + _out(tls, f, bp, uint64(l)) +} + +var _xdigits1 = [16]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} + +func _fmt_x(tls *TLS, x Tuintmax_t, s uintptr, lower int32) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(int32(_xdigits1[x&uint64(15)]) | lower) + goto _1 + _1: + ; + x >>= uint64(4) + } + return s +} + +func _fmt_o(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var v2 uintptr + _ = v2 + for { + if !(x != 0) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x&uint64(7)) + goto _1 + _1: + ; + x >>= uint64(3) + } + return s +} + +func _fmt_u(tls *TLS, x Tuintmax_t, s uintptr) (r uintptr) { + var y uint64 + var v2, v4 uintptr + _, _, _ = y, v2, v4 + for { + if !(x > Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) { + break + } + s-- + v2 = s + *(*uint8)(unsafe.Pointer(v2)) = uint8(uint64('0') + x%uint64(10)) + goto _1 + _1: + ; + x /= uint64(10) + } + y = x + for { + if !(y != 0) { + break + } + s-- + v4 = s + *(*uint8)(unsafe.Pointer(v4)) = uint8(uint64('0') + y%uint64(10)) + goto _3 + _3: + ; + y /= uint64(10) + } + return s +} + +// C documentation +// +// /* Do not override this check. The floating point printing code below +// * depends on the float.h constants being right. If they are wrong, it +// * may overflow the stack. */ +type Tcompiler_defines_long_double_incorrectly = [1]uint8 + +func _fmt_fp(tls *TLS, f uintptr, y float64, w int32, p int32, fl int32, t int32) (r1 int32) { + bp := tls.Alloc(560) + defer tls.Free(560) + var a, b, d, ebuf, estr, prefix, r, s, s1, s2, s3, s4, z, v10, v11, v13, v14, v15, v17, v18, v19, v20, v21, v24, v27, v28, v31, v32, v43, v44, v46, v48, v49, v5, v51, v54, v55, v56, v6 uintptr + var carry, carry1, rm, x2 Tuint32_t + var e, i, j, l, need, pl, re, sh, sh1, x, v12, v16, v22, v25, v42, v45, v52, v58, v7, v8, v9 int32 + var round, round1, small float64 + var x1 Tuint64_t + var v1, v3 uint64 + var v36, v37, v38, v39, v40, v41, v57 int64 + var _ /* __u at bp+0 */ struct { + F__i [0]uint64 + F__f float64 + } + var _ /* big at bp+8 */ [126]Tuint32_t + var _ /* buf at bp+516 */ [22]uint8 + var _ /* e2 at bp+512 */ int32 + var _ /* ebuf0 at bp+538 */ [12]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, b, carry, carry1, d, e, ebuf, estr, i, j, l, need, pl, prefix, r, re, rm, round, round1, s, s1, s2, s3, s4, sh, sh1, small, x, x1, x2, z, v1, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v24, v25, v27, v28, v3, v31, v32, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v48, v49, v5, v51, v52, v54, v55, v56, v57, v58, v6, v7, v8, v9 + *(*int32)(unsafe.Pointer(bp + 512)) = 0 + prefix = __ccgo_ts + 1616 + ebuf = bp + 538 + uintptr(Uint64FromInt32(3)*Uint64FromInt64(4)) + pl = int32(1) + *(*float64)(unsafe.Pointer(bp)) = y + v1 = *(*uint64)(unsafe.Pointer(bp)) + goto _2 +_2: + if int32(v1>>Int32FromInt32(63)) != 0 { + y = -y + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(3) + } else { + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(6) + } else { + prefix++ + pl = Int32FromInt32(0) + } + } + } + *(*float64)(unsafe.Pointer(bp)) = y + v3 = *(*uint64)(unsafe.Pointer(bp)) + goto _4 +_4: + if !(BoolInt32(v3&(-Uint64FromUint64(1)>>Int32FromInt32(1)) < Uint64FromUint64(0x7ff)< int32(3)+pl { + v7 = w + } else { + v7 = int32(3) + pl + } + return v7 + } + y = Xfrexpl(tls, y, bp+512) * Float64FromInt32(2) + if y != 0 { + *(*int32)(unsafe.Pointer(bp + 512))-- + } + if t|int32(32) == int32('a') { + round = Float64FromFloat64(8) + if t&int32(32) != 0 { + prefix += uintptr(9) + } + pl += int32(2) + if p < 0 || p >= Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4)-Int32FromInt32(1) { + re = 0 + } else { + re = Int32FromInt32(LDBL_MANT_DIG)/Int32FromInt32(4) - Int32FromInt32(1) - p + } + if re != 0 { + round *= float64(Int32FromInt32(1) << (Int32FromInt32(LDBL_MANT_DIG) % Int32FromInt32(4))) + for { + v8 = re + re-- + if !(v8 != 0) { + break + } + round *= Float64FromInt32(16) + } + if int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + y = -y + y -= round + y += round + y = -y + } else { + y += round + y -= round + } + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v9 = -*(*int32)(unsafe.Pointer(bp + 512)) + } else { + v9 = *(*int32)(unsafe.Pointer(bp + 512)) + } + estr = _fmt_u(tls, uint64(v9), ebuf) + if estr == ebuf { + estr-- + v10 = estr + *(*uint8)(unsafe.Pointer(v10)) = uint8('0') + } + estr-- + v11 = estr + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v12 = int32('-') + } else { + v12 = int32('+') + } + *(*uint8)(unsafe.Pointer(v11)) = uint8(v12) + estr-- + v13 = estr + *(*uint8)(unsafe.Pointer(v13)) = uint8(t + (Int32FromUint8('p') - Int32FromUint8('a'))) + s = bp + 516 + for cond := true; cond; cond = y != 0 { + x = int32(y) + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v14)) = uint8(int32(_xdigits1[x]) | t&int32(32)) + y = Float64FromInt32(16) * (y - float64(x)) + if int64(s)-t__predefined_ptrdiff_t(bp+516) == int64(1) && (y != 0 || p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + v15 = s + s++ + *(*uint8)(unsafe.Pointer(v15)) = uint8('.') + } + } + if int64(p) > int64(Int32FromInt32(INT_MAX)-Int32FromInt32(2))-(int64(ebuf)-int64(estr))-int64(pl) { + return -int32(1) + } + if p != 0 && int64(s)-t__predefined_ptrdiff_t(bp+516)-int64(2) < int64(p) { + l = int32(int64(p+Int32FromInt32(2)) + (int64(ebuf) - int64(estr))) + } else { + l = int32(int64(s) - t__predefined_ptrdiff_t(bp+516) + (int64(ebuf) - int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _out(tls, f, bp+516, uint64(int64(s)-t__predefined_ptrdiff_t(bp+516))) + _pad3(tls, f, uint8('0'), int32(int64(l)-(int64(ebuf)-int64(estr))-(int64(s)-t__predefined_ptrdiff_t(bp+516))), 0, 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v16 = w + } else { + v16 = pl + l + } + return v16 + } + if p < 0 { + p = int32(6) + } + if y != 0 { + y *= Float64FromFloat64(2.68435456e+08) + *(*int32)(unsafe.Pointer(bp + 512)) -= int32(28) + } + if *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + v18 = bp + 8 + z = v18 + v17 = v18 + r = v17 + a = v17 + } else { + v20 = bp + 8 + uintptr(Uint64FromInt64(504)/Uint64FromInt64(4))*4 - UintptrFromInt32(LDBL_MANT_DIG)*4 - UintptrFromInt32(1)*4 + z = v20 + v19 = v20 + r = v19 + a = v19 + } + for cond := true; cond; cond = y != 0 { + *(*Tuint32_t)(unsafe.Pointer(z)) = uint32(y) + v21 = z + z += 4 + y = Float64FromInt32(1000000000) * (y - float64(*(*Tuint32_t)(unsafe.Pointer(v21)))) + } + for *(*int32)(unsafe.Pointer(bp + 512)) > 0 { + carry = uint32(0) + if int32(29) < *(*int32)(unsafe.Pointer(bp + 512)) { + v22 = int32(29) + } else { + v22 = *(*int32)(unsafe.Pointer(bp + 512)) + } + sh = v22 + d = z - uintptr(1)*4 + for { + if !(d >= a) { + break + } + x1 = uint64(*(*Tuint32_t)(unsafe.Pointer(d)))< a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0) { + z -= 4 + } + *(*int32)(unsafe.Pointer(bp + 512)) -= sh + } + for *(*int32)(unsafe.Pointer(bp + 512)) < 0 { + carry1 = uint32(0) + if int32(9) < -*(*int32)(unsafe.Pointer(bp + 512)) { + v25 = int32(9) + } else { + v25 = -*(*int32)(unsafe.Pointer(bp + 512)) + } + sh1 = v25 + need = int32(uint32(1) + (uint32(p)+Uint32FromInt32(LDBL_MANT_DIG)/Uint32FromUint32(3)+uint32(8))/uint32(9)) + d = a + for { + if !(d < z) { + break + } + rm = *(*Tuint32_t)(unsafe.Pointer(d)) & uint32(int32(1)<>sh1 + carry1 + carry1 = uint32(Int32FromInt32(1000000000)>>sh1) * rm + goto _26 + _26: + ; + d += 4 + } + if !(*(*Tuint32_t)(unsafe.Pointer(a)) != 0) { + a += 4 + } + if carry1 != 0 { + v27 = z + z += 4 + *(*Tuint32_t)(unsafe.Pointer(v27)) = carry1 + } + /* Avoid (slow!) computation past requested precision */ + if t|int32(32) == int32('f') { + v28 = r + } else { + v28 = a + } + b = v28 + if (int64(z)-int64(b))/4 > int64(need) { + z = b + uintptr(need)*4 + } + *(*int32)(unsafe.Pointer(bp + 512)) += sh1 + } + if a < z { + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _29 + _29: + ; + i *= int32(10) + e++ + } + } else { + e = 0 + } + /* Perform rounding: j is precision after the radix (possibly neg) */ + j = p - BoolInt32(t|int32(32) != int32('f'))*e - BoolInt32(t|int32(32) == int32('g') && p != 0) + if int64(j) < int64(9)*((int64(z)-int64(r))/4-int64(1)) { + /* We avoid C's broken division of negative numbers */ + d = r + uintptr(1)*4 + uintptr((j+Int32FromInt32(9)*Int32FromInt32(LDBL_MAX_EXP))/Int32FromInt32(9)-Int32FromInt32(LDBL_MAX_EXP))*4 + j += Int32FromInt32(9) * Int32FromInt32(LDBL_MAX_EXP) + j %= int32(9) + i = int32(10) + j++ + for { + if !(j < int32(9)) { + break + } + goto _30 + _30: + ; + i *= int32(10) + j++ + } + x2 = *(*Tuint32_t)(unsafe.Pointer(d)) % uint32(i) + /* Are there any significant digits past j? */ + if x2 != 0 || d+uintptr(1)*4 != z { + round1 = Float64FromInt32(2) / Float64FromFloat64(2.22044604925031308085e-16) + if *(*Tuint32_t)(unsafe.Pointer(d))/uint32(i)&uint32(1) != 0 || i == int32(1000000000) && d > a && *(*Tuint32_t)(unsafe.Pointer(d + uintptr(-Int32FromInt32(1))*4))&uint32(1) != 0 { + round1 += Float64FromInt32(2) + } + if x2 < uint32(i/int32(2)) { + small = Float64FromFloat64(0.5) + } else { + if x2 == uint32(i/int32(2)) && d+uintptr(1)*4 == z { + small = Float64FromFloat64(1) + } else { + small = Float64FromFloat64(1.5) + } + } + if pl != 0 && int32(*(*uint8)(unsafe.Pointer(prefix))) == int32('-') { + round1 *= float64(-Int32FromInt32(1)) + small *= float64(-Int32FromInt32(1)) + } + *(*Tuint32_t)(unsafe.Pointer(d)) -= x2 + /* Decide whether to round by probing round+small */ + if round1+small != round1 { + *(*Tuint32_t)(unsafe.Pointer(d)) = *(*Tuint32_t)(unsafe.Pointer(d)) + uint32(i) + for *(*Tuint32_t)(unsafe.Pointer(d)) > uint32(999999999) { + v31 = d + d -= 4 + *(*Tuint32_t)(unsafe.Pointer(v31)) = uint32(0) + if d < a { + a -= 4 + v32 = a + *(*Tuint32_t)(unsafe.Pointer(v32)) = uint32(0) + } + *(*Tuint32_t)(unsafe.Pointer(d))++ + } + i = int32(10) + e = int32(Int64FromInt32(9) * ((int64(r) - int64(a)) / 4)) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(a)) >= uint32(i)) { + break + } + goto _33 + _33: + ; + i *= int32(10) + e++ + } + } + } + if z > d+uintptr(1)*4 { + z = d + uintptr(1)*4 + } + } + for { + if !(z > a && !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0)) { + break + } + goto _34 + _34: + ; + z -= 4 + } + if t|int32(32) == int32('g') { + if !(p != 0) { + p++ + } + if p > e && e >= -int32(4) { + t-- + p -= e + int32(1) + } else { + t -= int32(2) + p-- + } + if !(uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + /* Count trailing zeros in last place */ + if z > a && *(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4)) != 0 { + i = int32(10) + j = Int32FromInt32(0) + for { + if !(*(*Tuint32_t)(unsafe.Pointer(z + uintptr(-Int32FromInt32(1))*4))%uint32(i) == uint32(0)) { + break + } + goto _35 + _35: + ; + i *= int32(10) + j++ + } + } else { + j = int32(9) + } + if t|int32(32) == int32('f') { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v37 = int64(Int32FromInt32(0)) + } else { + v37 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + if int64(p) < v37 { + v36 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))-int64(j) { + v38 = int64(Int32FromInt32(0)) + } else { + v38 = int64(9)*((int64(z)-int64(r))/4-int64(1)) - int64(j) + } + v36 = v38 + } + p = int32(v36) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v40 = int64(Int32FromInt32(0)) + } else { + v40 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + if int64(p) < v40 { + v39 = int64(p) + } else { + if int64(Int32FromInt32(0)) > int64(9)*((int64(z)-int64(r))/4-int64(1))+int64(e)-int64(j) { + v41 = int64(Int32FromInt32(0)) + } else { + v41 = int64(9)*((int64(z)-int64(r))/4-int64(1)) + int64(e) - int64(j) + } + v39 = v41 + } + p = int32(v39) + } + } + } + if p > Int32FromInt32(INT_MAX)-Int32FromInt32(1)-BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) { + return -int32(1) + } + l = int32(1) + p + BoolInt32(p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0) + if t|int32(32) == int32('f') { + if e > int32(INT_MAX)-l { + return -int32(1) + } + if e > 0 { + l += e + } + } else { + if e < 0 { + v42 = -e + } else { + v42 = e + } + estr = _fmt_u(tls, uint64(v42), ebuf) + for int64(ebuf)-int64(estr) < int64(2) { + estr-- + v43 = estr + *(*uint8)(unsafe.Pointer(v43)) = uint8('0') + } + estr-- + v44 = estr + if e < 0 { + v45 = int32('-') + } else { + v45 = int32('+') + } + *(*uint8)(unsafe.Pointer(v44)) = uint8(v45) + estr-- + v46 = estr + *(*uint8)(unsafe.Pointer(v46)) = uint8(t) + if int64(ebuf)-int64(estr) > int64(int32(INT_MAX)-l) { + return -int32(1) + } + l = int32(int64(l) + (int64(ebuf) - int64(estr))) + } + if l > int32(INT_MAX)-pl { + return -int32(1) + } + _pad3(tls, f, uint8(' '), w, pl+l, fl) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + if t|int32(32) == int32('f') { + if a > r { + a = r + } + d = a + for { + if !(d <= r) { + break + } + s2 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if d != a { + for s2 > bp+516 { + s2-- + v48 = s2 + *(*uint8)(unsafe.Pointer(v48)) = uint8('0') + } + } else { + if s2 == bp+516+uintptr(9) { + s2-- + v49 = s2 + *(*uint8)(unsafe.Pointer(v49)) = uint8('0') + } + } + _out(tls, f, s2, uint64(int64(bp+516+uintptr(9))-int64(s2))) + goto _47 + _47: + ; + d += 4 + } + if p != 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+598, uint64(1)) + } + for { + if !(d < z && p > 0) { + break + } + s3 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + for s3 > bp+516 { + s3-- + v51 = s3 + *(*uint8)(unsafe.Pointer(v51)) = uint8('0') + } + if int32(9) < p { + v52 = int32(9) + } else { + v52 = p + } + _out(tls, f, s3, uint64(v52)) + goto _50 + _50: + ; + d += 4 + p -= int32(9) + } + _pad3(tls, f, uint8('0'), p+int32(9), int32(9), 0) + } else { + if z <= a { + z = a + uintptr(1)*4 + } + d = a + for { + if !(d < z && p >= 0) { + break + } + s4 = _fmt_u(tls, uint64(*(*Tuint32_t)(unsafe.Pointer(d))), bp+516+uintptr(9)) + if s4 == bp+516+uintptr(9) { + s4-- + v54 = s4 + *(*uint8)(unsafe.Pointer(v54)) = uint8('0') + } + if d != a { + for s4 > bp+516 { + s4-- + v55 = s4 + *(*uint8)(unsafe.Pointer(v55)) = uint8('0') + } + } else { + v56 = s4 + s4++ + _out(tls, f, v56, uint64(1)) + if p > 0 || uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + _out(tls, f, __ccgo_ts+598, uint64(1)) + } + } + if int64(bp+516+UintptrFromInt32(9))-int64(s4) < int64(p) { + v57 = int64(bp+516+UintptrFromInt32(9)) - int64(s4) + } else { + v57 = int64(p) + } + _out(tls, f, s4, uint64(v57)) + p = int32(int64(p) - (int64(bp+516+UintptrFromInt32(9)) - int64(s4))) + goto _53 + _53: + ; + d += 4 + } + _pad3(tls, f, uint8('0'), p+int32(18), int32(18), 0) + _out(tls, f, estr, uint64(int64(ebuf)-int64(estr))) + } + _pad3(tls, f, uint8(' '), w, pl+l, int32(uint32(fl)^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > pl+l { + v58 = w + } else { + v58 = pl + l + } + return v58 +} + +func _getint(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s))++ + } + return i +} + +func _printf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(64) + defer tls.Free(64) + var a, prefix, ws, z, v35, v39, v44, v48, v8 uintptr + var argpos, cnt, l, p, pl, t, w, xp, v36, v40, v42, v43, v47, v5, v50, v6, v7 int32 + var fl, l10n, ps, st uint32 + var i Tsize_t + var v31 uint64 + var v34 int64 + var v45, v49 bool + var _ /* arg at bp+8 */ Targ + var _ /* buf at bp+16 */ [24]uint8 + var _ /* mb at bp+48 */ [4]uint8 + var _ /* s at bp+0 */ uintptr + var _ /* wc at bp+40 */ [2]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, cnt, fl, i, l, l10n, p, pl, prefix, ps, st, t, w, ws, xp, z, v31, v34, v35, v36, v39, v40, v42, v43, v44, v45, v47, v48, v49, v5, v50, v6, v7, v8 + *(*uintptr)(unsafe.Pointer(bp)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + z = *(*uintptr)(unsafe.Pointer(bp)) + for { + if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('%') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('%')) { + break + } + goto _3 + _3: + ; + z++ + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } + if int64(z)-int64(a) > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32(int64(z) - int64(a)) + if f != 0 { + _out(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + argpos = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) - int32('0') + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp))++ + } + /* Read field width */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2))) == int32('$') { + l10n = uint32(1) + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*4)) = int32(_INT) + w = Int32FromInt32(0) + } else { + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(3) + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp))++ + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint(tls, bp) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 1))) == int32('*') { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 3))) == int32('$') { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*4)) = int32(_INT) + p = Int32FromInt32(0) + } else { + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + 2)))-int32('0'))*8))) + } + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(4) + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp)) += uintptr(2) + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp))++ + p = _getint(tls, bp) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp)) + *(*uintptr)(unsafe.Pointer(bp))++ + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states)) + uintptr(st)*58 + uintptr(int32(*(*uint8)(unsafe.Pointer(v8)))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + if !(f != 0) { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + } else { + *(*Targ)(unsafe.Pointer(bp + 8)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } + } else { + if f != 0 { + _pop_arg(tls, bp+8, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + z = bp + 16 + uintptr(24) + prefix = __ccgo_ts + 1647 + pl = 0 + t = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)) + uintptr(-Int32FromInt32(1))))) + /* Transform ls,lc -> S,C */ + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + /* - and 0 flags are mutually exclusive */ + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + switch t { + case int32('n'): + goto _9 + case int32('p'): + goto _10 + case int32('X'): + goto _11 + case int32('x'): + goto _12 + case int32('o'): + goto _13 + case int32('i'): + goto _14 + case int32('d'): + goto _15 + case int32('u'): + goto _16 + case int32('c'): + goto _17 + case int32('s'): + goto _18 + case int32('m'): + goto _19 + case int32('C'): + goto _20 + case int32('S'): + goto _21 + case int32('A'): + goto _22 + case int32('G'): + goto _23 + case int32('F'): + goto _24 + case int32('E'): + goto _25 + case int32('a'): + goto _26 + case int32('g'): + goto _27 + case int32('f'): + goto _28 + case int32('e'): + goto _29 + } + goto _30 + _9: + ; + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) = uint64(cnt) + break + } + goto _1 + _10: + ; + if uint64(p) > Uint64FromInt32(2)*Uint64FromInt64(8) { + v31 = uint64(p) + } else { + v31 = Uint64FromInt32(2) * Uint64FromInt64(8) + } + p = int32(v31) + t = int32('x') + fl |= Uint32FromUint32(1) << (Int32FromUint8('#') - Int32FromUint8(' ')) + _12: + ; + _11: + ; + a = _fmt_x(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z, t&int32(32)) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0 && fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(t >> Int32FromInt32(4)) + pl = Int32FromInt32(2) + } + if !(0 != 0) { + goto _32 + } + _13: + ; + a = _fmt_o(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0 && int64(p) < int64(z)-int64(a)+int64(1) { + p = int32(int64(z) - int64(a) + int64(1)) + } + _32: + ; + if !(0 != 0) { + goto _33 + } + _15: + ; + _14: + ; + pl = int32(1) + if *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) > uint64(Int64FromInt64(INT64_MAX)) { + *(*Tuintmax_t)(unsafe.Pointer(bp + 8)) = -*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0 { + prefix++ + } else { + if fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0 { + prefix += uintptr(2) + } else { + pl = 0 + } + } + } + _16: + ; + a = _fmt_u(tls, *(*Tuintmax_t)(unsafe.Pointer(bp + 8)), z) + _33: + ; + if xp != 0 && p < 0 { + goto overflow + } + if xp != 0 { + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + } + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) && !(p != 0) { + a = z + goto _30 + } + if int64(p) > int64(z)-int64(a)+BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) { + v34 = int64(p) + } else { + v34 = int64(z) - int64(a) + BoolInt64(!(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0)) + } + p = int32(v34) + goto _30 + goto narrow_c + narrow_c: + ; + _17: + ; + v36 = Int32FromInt32(1) + p = v36 + v35 = z - uintptr(v36) + a = v35 + *(*uint8)(unsafe.Pointer(v35)) = uint8(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _19: + ; + if !(int32(1) != 0) { + goto _37 + } + a = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + goto _38 + _37: + ; + _18: + ; + if *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 { + v39 = *(*uintptr)(unsafe.Pointer(bp + 8)) + } else { + v39 = __ccgo_ts + 1657 + } + a = v39 + _38: + ; + if p < 0 { + v40 = int32(INT_MAX) + } else { + v40 = p + } + z = a + uintptr(Xstrnlen(tls, a, uint64(v40))) + if p < 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32(int64(z) - int64(a)) + fl &= ^(Uint32FromUint32(1) << (Int32FromUint8('0') - Int32FromUint8(' '))) + goto _30 + _20: + ; + if !(*(*Tuintmax_t)(unsafe.Pointer(bp + 8)) != 0) { + goto narrow_c + } + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[0] = int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 8))) + (*(*[2]Twchar_t)(unsafe.Pointer(bp + 40)))[int32(1)] = 0 + *(*uintptr)(unsafe.Pointer(bp + 8)) = bp + 40 + p = -int32(1) + _21: + ; + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + v42 = Int32FromInt32(0) + l = v42 + i = uint64(v42) + for { + if v45 = i < uint64(p) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v45 { + v44 = ws + ws += 4 + v43 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v44))) + l = v43 + } + if !(v45 && v43 >= 0 && uint64(l) <= uint64(p)-i) { + break + } + goto _41 + _41: + ; + i += uint64(l) + } + if l < 0 { + return -int32(1) + } + if i > uint64(INT_MAX) { + goto overflow + } + p = int32(i) + _pad3(tls, f, uint8(' '), w, p, int32(fl)) + ws = *(*uintptr)(unsafe.Pointer(bp + 8)) + i = uint64(0) + for { + if v49 = i < uint64(0+uint32(p)) && *(*Twchar_t)(unsafe.Pointer(ws)) != 0; v49 { + v48 = ws + ws += 4 + v47 = Xwctomb(tls, bp+48, *(*Twchar_t)(unsafe.Pointer(v48))) + l = v47 + } + if !(v49 && i+uint64(v47) <= uint64(p)) { + break + } + _out(tls, f, bp+48, uint64(l)) + goto _46 + _46: + ; + i += uint64(l) + } + _pad3(tls, f, uint8(' '), w, p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + if w > p { + v50 = w + } else { + v50 = p + } + l = v50 + goto _1 + _29: + ; + _28: + ; + _27: + ; + _26: + ; + _25: + ; + _24: + ; + _23: + ; + _22: + ; + if xp != 0 && p < 0 { + goto overflow + } + l = _fmt_fp(tls, f, *(*float64)(unsafe.Pointer(bp + 8)), w, p, int32(fl), t) + if l < 0 { + goto overflow + } + goto _1 + _30: + ; + if int64(p) < int64(z)-int64(a) { + p = int32(int64(z) - int64(a)) + } + if p > int32(INT_MAX)-pl { + goto overflow + } + if w < pl+p { + w = pl + p + } + if w > int32(INT_MAX)-cnt { + goto overflow + } + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl)) + _out(tls, f, prefix, uint64(pl)) + _pad3(tls, f, uint8('0'), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' ')))) + _pad3(tls, f, uint8('0'), p, int32(int64(z)-int64(a)), 0) + _out(tls, f, a, uint64(int64(z)-int64(a))) + _pad3(tls, f, uint8(' '), w, pl+p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = uint64(1) + for { + if !(i <= uint64(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _51 + _51: + ; + i++ + } + for { + if !(i <= uint64(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _52 + _52: + ; + i++ + } + if i <= uint64(NL_ARGMAX) { + goto inval + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(208) + defer tls.Free(208) + var __need_unlock, olderr, ret, v1 int32 + var saved_buf, v2, v3, v4, v5 uintptr + var _ /* ap2 at bp+0 */ Tva_list + var _ /* internal_buf at bp+128 */ [80]uint8 + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _, _, _, _, _, _ = __need_unlock, olderr, ret, saved_buf, v1, v2, v3, v4, v5 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + saved_buf = uintptr(0) + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _printf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + if !((*TFILE)(unsafe.Pointer(f)).Fbuf_size != 0) { + saved_buf = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fbuf = bp + 128 + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(80) + v3 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v3 + v2 = v3 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v2 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v2 + } + if !((*TFILE)(unsafe.Pointer(f)).Fwend != 0) && X__towrite(tls, f) != 0 { + ret = -int32(1) + } else { + ret = _printf_core(tls, f, fmt, bp, bp+48, bp+8) + } + if saved_buf != 0 { + (*(*func(*TLS, uintptr, uintptr, Tsize_t) Tsize_t)(unsafe.Pointer(&struct{ uintptr }{(*TFILE)(unsafe.Pointer(f)).Fwrite})))(tls, f, uintptr(0), uint64(0)) + if !((*TFILE)(unsafe.Pointer(f)).Fwpos != 0) { + ret = -int32(1) + } + (*TFILE)(unsafe.Pointer(f)).Fbuf = saved_buf + (*TFILE)(unsafe.Pointer(f)).Fbuf_size = uint64(0) + v5 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v5 + v4 = v5 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v4 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v4 + } + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +const SIZE_L = 2 +const SIZE_def = 0 +const SIZE_h = -1 +const SIZE_hh = -2 +const SIZE_l = 1 +const SIZE_ll = 3 + +func _store_int(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(288) + defer tls.Free(288) + var __need_unlock, alloc, base, c, invert, matches, size, t, width, v1, v12, v13, v16, v17, v20, v21, v23, v29, v3, v32, v33, v36, v4, v6, v64, v65, v69, v7, v70, v75, v76, v80, v81, v9 int32 + var dest, p, s, tmp, tmp1, wcs, v10, v11, v18, v19, v24, v25, v28, v30, v31, v37, v38, v59, v62, v66, v67, v71, v72, v74, v77, v78, v82, v83 uintptr + var i, k, v68, v73, v79 Tsize_t + var pos Toff_t + var x uint64 + var y float64 + var v63 uint32 + var _ /* scanset at bp+16 */ [257]uint8 + var _ /* st at bp+8 */ Tmbstate_t + var _ /* wc at bp+276 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, base, c, dest, i, invert, k, matches, p, pos, s, size, t, tmp, tmp1, wcs, width, x, y, v1, v10, v11, v12, v13, v16, v17, v18, v19, v20, v21, v23, v24, v25, v28, v29, v3, v30, v31, v32, v33, v36, v37, v38, v4, v59, v6, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v9 + alloc = 0 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + X__toread(tls, f) + } + if !((*TFILE)(unsafe.Pointer(f)).Frpos != 0) { + goto input_fail + } + p = fmt + for { + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + v3 = int32(*(*uint8)(unsafe.Pointer(p))) + v4 = BoolInt32(v3 == int32(' ') || uint32(v3)-uint32('\t') < uint32(5)) + goto _5 + _5: + if v4 != 0 { + for { + v6 = int32(*(*uint8)(unsafe.Pointer(p + 1))) + v7 = BoolInt32(v6 == int32(' ') || uint32(v6)-uint32('\t') < uint32(5)) + goto _8 + _8: + if !(v7 != 0) { + break + } + p++ + } + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v11 = f + 8 + v10 = *(*uintptr)(unsafe.Pointer(v11)) + *(*uintptr)(unsafe.Pointer(v11))++ + v9 = int32(*(*uint8)(unsafe.Pointer(v10))) + } else { + v9 = X__shgetc(tls, f) + } + v12 = v9 + v13 = BoolInt32(v12 == int32(' ') || uint32(v12)-uint32('\t') < uint32(5)) + goto _14 + _14: + if !(v13 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + if int32(*(*uint8)(unsafe.Pointer(p))) != int32('%') || int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('%') { + X__shlim(tls, f, int64(Int32FromInt32(0))) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('%') { + p++ + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v19 = f + 8 + v18 = *(*uintptr)(unsafe.Pointer(v19)) + *(*uintptr)(unsafe.Pointer(v19))++ + v17 = int32(*(*uint8)(unsafe.Pointer(v18))) + } else { + v17 = X__shgetc(tls, f) + } + v16 = v17 + c = v16 + v20 = v16 + v21 = BoolInt32(v20 == int32(' ') || uint32(v20)-uint32('\t') < uint32(5)) + goto _22 + _22: + if !(v21 != 0) { + break + } + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = int32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = X__shgetc(tls, f) + } + c = v23 + } + if c != int32(*(*uint8)(unsafe.Pointer(p))) { + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + goto _2 + } + p++ + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('*') { + dest = uintptr(0) + p++ + } else { + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == int32('$') { + dest = _arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-int32('0'))) + p += uintptr(2) + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + int32(*(*uint8)(unsafe.Pointer(p))) - int32('0') + goto _27 + _27: + ; + p++ + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p++ + } else { + alloc = 0 + } + size = SIZE_def + v28 = p + p++ + switch int32(*(*uint8)(unsafe.Pointer(v28))) { + case int32('h'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('h') { + p++ + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('l') { + p++ + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p-- + default: + goto fmt_fail + } + t = int32(*(*uint8)(unsafe.Pointer(p))) + /* C or S */ + if t&int32(0x2f) == int32(3) { + t |= int32(32) + size = int32(SIZE_l) + } + switch t { + case int32('c'): + if width < int32(1) { + width = int32(1) + } + fallthrough + case int32('['): + case int32('n'): + _store_int(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + default: + X__shlim(tls, f, int64(Int32FromInt32(0))) + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v31 = f + 8 + v30 = *(*uintptr)(unsafe.Pointer(v31)) + *(*uintptr)(unsafe.Pointer(v31))++ + v29 = int32(*(*uint8)(unsafe.Pointer(v30))) + } else { + v29 = X__shgetc(tls, f) + } + v32 = v29 + v33 = BoolInt32(v32 == int32(' ') || uint32(v32)-uint32('\t') < uint32(5)) + goto _34 + _34: + if !(v33 != 0) { + break + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + } + X__shlim(tls, f, int64(width)) + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v38 = f + 8 + v37 = *(*uintptr)(unsafe.Pointer(v38)) + *(*uintptr)(unsafe.Pointer(v38))++ + v36 = int32(*(*uint8)(unsafe.Pointer(v37))) + } else { + v36 = X__shgetc(tls, f) + } + if v36 < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + switch t { + case int32('['): + goto _40 + case int32('c'): + goto _41 + case int32('s'): + goto _42 + case int32('x'): + goto _43 + case int32('X'): + goto _44 + case int32('p'): + goto _45 + case int32('o'): + goto _46 + case int32('u'): + goto _47 + case int32('d'): + goto _48 + case int32('i'): + goto _49 + case int32('G'): + goto _50 + case int32('g'): + goto _51 + case int32('F'): + goto _52 + case int32('f'): + goto _53 + case int32('E'): + goto _54 + case int32('e'): + goto _55 + case int32('A'): + goto _56 + case int32('a'): + goto _57 + } + goto _58 + _42: + ; + _41: + ; + _40: + ; + if t == int32('c') || t == int32('s') { + Xmemset(tls, bp+16, -int32(1), uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if t == int32('s') { + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\t')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\n')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\v')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\f')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('\r')] = uint8(0) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(' ')] = uint8(0) + } + } else { + p++ + v59 = p + if int32(*(*uint8)(unsafe.Pointer(v59))) == int32('^') { + p++ + invert = Int32FromInt32(1) + } else { + invert = 0 + } + Xmemset(tls, bp+16, invert, uint64(257)) + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[0] = uint8(0) + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8('-')] = uint8(Int32FromInt32(1) - invert) + } else { + if int32(*(*uint8)(unsafe.Pointer(p))) == int32(']') { + p++ + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[Int32FromInt32(1)+Int32FromUint8(']')] = uint8(Int32FromInt32(1) - invert) + } + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(p))) != int32(']')) { + break + } + if !(*(*uint8)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + if int32(*(*uint8)(unsafe.Pointer(p))) == int32('-') && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != int32(']') { + v62 = p + p++ + c = int32(*(*uint8)(unsafe.Pointer(v62 + uintptr(-Int32FromInt32(1))))) + for { + if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { + break + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+c] = uint8(int32(1) - invert) + goto _61 + _61: + ; + c++ + } + } + (*(*[257]uint8)(unsafe.Pointer(bp + 16)))[int32(1)+int32(*(*uint8)(unsafe.Pointer(p)))] = uint8(int32(1) - invert) + goto _60 + _60: + ; + p++ + } + } + wcs = uintptr(0) + s = uintptr(0) + i = uint64(0) + if t == int32('c') { + v63 = uint32(width) + uint32(1) + } else { + v63 = uint32(31) + } + k = uint64(v63) + if size == int32(SIZE_l) { + if alloc != 0 { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + wcs = dest + } + *(*Tmbstate_t)(unsafe.Pointer(bp + 8)) = Tmbstate_t{} + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v67 = f + 8 + v66 = *(*uintptr)(unsafe.Pointer(v67)) + *(*uintptr)(unsafe.Pointer(v67))++ + v65 = int32(*(*uint8)(unsafe.Pointer(v66))) + } else { + v65 = X__shgetc(tls, f) + } + v64 = v65 + c = v64 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v64+int32(1)] != 0) { + break + } + *(*uint8)(unsafe.Pointer(bp)) = uint8(c) + switch Xmbrtowc(tls, bp+276, bp, uint64(1), bp+8) { + case uint64(-Int32FromInt32(1)): + goto input_fail + case uint64(-Int32FromInt32(2)): + continue + } + if wcs != 0 { + v68 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v68)*4)) = *(*Twchar_t)(unsafe.Pointer(bp + 276)) + } + if alloc != 0 && i == k { + k += k + uint64(1) + tmp = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp != 0) { + goto alloc_fail + } + wcs = tmp + } + } + if !(Xmbsinit(tls, bp+8) != 0) { + goto input_fail + } + } else { + if alloc != 0 { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v72 = f + 8 + v71 = *(*uintptr)(unsafe.Pointer(v72)) + *(*uintptr)(unsafe.Pointer(v72))++ + v70 = int32(*(*uint8)(unsafe.Pointer(v71))) + } else { + v70 = X__shgetc(tls, f) + } + v69 = v70 + c = v69 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v69+int32(1)] != 0) { + break + } + v73 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v73))) = uint8(c) + if i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, s, k) + if !(tmp1 != 0) { + goto alloc_fail + } + s = tmp1 + } + } + } else { + v74 = dest + s = v74 + if v74 != 0 { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v78 = f + 8 + v77 = *(*uintptr)(unsafe.Pointer(v78)) + *(*uintptr)(unsafe.Pointer(v78))++ + v76 = int32(*(*uint8)(unsafe.Pointer(v77))) + } else { + v76 = X__shgetc(tls, f) + } + v75 = v76 + c = v75 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v75+int32(1)] != 0) { + break + } + v79 = i + i++ + *(*uint8)(unsafe.Pointer(s + uintptr(v79))) = uint8(c) + } + } else { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Fshend { + v83 = f + 8 + v82 = *(*uintptr)(unsafe.Pointer(v83)) + *(*uintptr)(unsafe.Pointer(v83))++ + v81 = int32(*(*uint8)(unsafe.Pointer(v82))) + } else { + v81 = X__shgetc(tls, f) + } + v80 = v81 + c = v80 + if !((*(*[257]uint8)(unsafe.Pointer(bp + 16)))[v80+int32(1)] != 0) { + break + } + } + } + } + } + if (*TFILE)(unsafe.Pointer(f)).Fshlim >= 0 { + (*TFILE)(unsafe.Pointer(f)).Frpos-- + } + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('c') && (*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != int64(width) { + goto match_fail + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + goto _58 + _45: + ; + _44: + ; + _43: + ; + base = int32(16) + goto int_common + _46: + ; + base = int32(8) + goto int_common + _48: + ; + _47: + ; + base = int32(10) + goto int_common + _49: + ; + base = 0 + goto int_common + int_common: + ; + x = X__intscan(tls, f, uint32(base), 0, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if t == int32('p') && dest != 0 { + *(*uintptr)(unsafe.Pointer(dest)) = uintptr(x) + } else { + _store_int(tls, dest, size, x) + } + goto _58 + _57: + ; + _56: + ; + _55: + ; + _54: + ; + _53: + ; + _52: + ; + _51: + ; + _50: + ; + y = X__floatscan(tls, f, size, 0) + if !((*TFILE)(unsafe.Pointer(f)).Fshcnt+(int64((*TFILE)(unsafe.Pointer(f)).Frpos)-int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) != 0) { + goto match_fail + } + if dest != 0 { + switch size { + case SIZE_def: + *(*float32)(unsafe.Pointer(dest)) = float32(y) + case int32(SIZE_l): + *(*float64)(unsafe.Pointer(dest)) = y + case int32(SIZE_L): + *(*float64)(unsafe.Pointer(dest)) = y + break + } + } + goto _58 + _58: + ; + pos += (*TFILE)(unsafe.Pointer(f)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(f)).Frpos) - int64((*TFILE)(unsafe.Pointer(f)).Fbuf)) + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p++ + } + if !(0 != 0) { + goto _85 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_85: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +func X__isoc99_vfscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, f, fmt, ap) +} + +var _states1 = [8][58]uint8{ + 0: { + 0: uint8(_DBL), + 2: uint8(_UINT), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 11: uint8(_BIGLPRE), + 18: uint8(_PTR), + 23: uint8(_UINT), + 32: uint8(_DBL), + 34: uint8(_INT), + 35: uint8(_INT), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 39: uint8(_HPRE), + 40: uint8(_INT), + 41: uint8(_JPRE), + 43: uint8(_LPRE), + 44: uint8(_NOARG), + 45: uint8(_PTR), + 46: uint8(_UINT), + 47: uint8(_UIPTR), + 50: uint8(_PTR), + 51: uint8(_ZTPRE), + 52: uint8(_UINT), + 55: uint8(_UINT), + 57: uint8(_ZTPRE), + }, + 1: { + 0: uint8(_DBL), + 4: uint8(_DBL), + 5: uint8(_DBL), + 6: uint8(_DBL), + 23: uint8(_ULONG), + 32: uint8(_DBL), + 34: uint8(_UINT), + 35: uint8(_LONG), + 36: uint8(_DBL), + 37: uint8(_DBL), + 38: uint8(_DBL), + 40: uint8(_LONG), + 43: uint8(_LLPRE), + 45: uint8(_PTR), + 46: uint8(_ULONG), + 50: uint8(_PTR), + 52: uint8(_ULONG), + 55: uint8(_ULONG), + }, + 2: { + 23: uint8(_ULLONG), + 35: uint8(_LLONG), + 40: uint8(_LLONG), + 45: uint8(_PTR), + 46: uint8(_ULLONG), + 52: uint8(_ULLONG), + 55: uint8(_ULLONG), + }, + 3: { + 23: uint8(_USHORT), + 35: uint8(_SHORT), + 39: uint8(_HHPRE), + 40: uint8(_SHORT), + 45: uint8(_PTR), + 46: uint8(_USHORT), + 52: uint8(_USHORT), + 55: uint8(_USHORT), + }, + 4: { + 23: uint8(_UCHAR), + 35: uint8(_CHAR), + 40: uint8(_CHAR), + 45: uint8(_PTR), + 46: uint8(_UCHAR), + 52: uint8(_UCHAR), + 55: uint8(_UCHAR), + }, + 5: { + 0: uint8(_LDBL), + 4: uint8(_LDBL), + 5: uint8(_LDBL), + 6: uint8(_LDBL), + 32: uint8(_LDBL), + 36: uint8(_LDBL), + 37: uint8(_LDBL), + 38: uint8(_LDBL), + 45: uint8(_PTR), + }, + 6: { + 23: uint8(_SIZET), + 35: uint8(_PDIFF), + 40: uint8(_PDIFF), + 45: uint8(_PTR), + 46: uint8(_SIZET), + 52: uint8(_SIZET), + 55: uint8(_SIZET), + }, + 7: { + 23: uint8(_UMAX), + 35: uint8(_IMAX), + 40: uint8(_IMAX), + 45: uint8(_PTR), + 46: uint8(_UMAX), + 52: uint8(_UMAX), + 55: uint8(_UMAX), + }, +} + +func _pop_arg1(tls *TLS, arg uintptr, type1 int32, ap uintptr) { + switch type1 { + case int32(_PTR): + *(*uintptr)(unsafe.Pointer(arg)) = VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_INT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UINT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint32(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_ULONG): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_ULLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUint64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_USHORT): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint16(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_CHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(int8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_UCHAR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(uint8(VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))))) + case int32(_LLONG): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_SIZET): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_IMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UMAX): + (*Targ)(unsafe.Pointer(arg)).Fi = VaUint64(&*(*Tva_list)(unsafe.Pointer(ap))) + case int32(_PDIFF): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaInt64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_UIPTR): + (*Targ)(unsafe.Pointer(arg)).Fi = uint64(VaUintptr(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_DBL): + *(*float64)(unsafe.Pointer(arg)) = float64(VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap)))) + case int32(_LDBL): + *(*float64)(unsafe.Pointer(arg)) = VaFloat64(&*(*Tva_list)(unsafe.Pointer(ap))) + } +} + +func _out1(tls *TLS, f uintptr, s uintptr, l Tsize_t) { + var v1 Tsize_t + var v2 uintptr + _, _ = v1, v2 + for { + v1 = l + l-- + if !(v1 != 0 && !((*TFILE)(unsafe.Pointer(f)).Fflags&Uint32FromInt32(F_ERR) != 0)) { + break + } + v2 = s + s += 4 + Xfputwc(tls, *(*Twchar_t)(unsafe.Pointer(v2)), f) + } +} + +func _pad4(tls *TLS, f uintptr, n int32, fl int32) { + bp := tls.Alloc(32) + defer tls.Free(32) + if uint32(fl)&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0 || !(n != 0) || (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return + } + Xfprintf(tls, f, __ccgo_ts+1664, VaList(bp+8, n, __ccgo_ts)) +} + +func _getint1(tls *TLS, s uintptr) (r int32) { + var i int32 + _ = i + i = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))))-uint32('0') < uint32(10)) != 0) { + break + } + if uint32(i) > Uint32FromInt32(INT_MAX)/Uint32FromUint32(10) || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s))))-int32('0') > int32(INT_MAX)-int32(10)*i { + i = -int32(1) + } else { + i = int32(10)*i + (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(s)))) - int32('0')) + } + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(s)) += 4 + } + return i +} + +var _sizeprefix = [24]uint8{ + 0: uint8('L'), + 3: uint8('j'), + 4: uint8('L'), + 5: uint8('L'), + 6: uint8('L'), + 8: uint8('j'), + 14: uint8('j'), + 15: uint8('j'), + 20: uint8('j'), + 23: uint8('j'), +} + +func _wprintf_core(tls *TLS, f uintptr, fmt uintptr, ap uintptr, nl_arg uintptr, nl_type uintptr) (r int32) { + bp := tls.Alloc(112) + defer tls.Free(112) + var a, bs, z, v8 uintptr + var argpos, cnt, i, l, p, t, w, xp, v10, v12, v13, v14, v16, v5, v6, v7 int32 + var fl, l10n, ps, st uint32 + var v15 bool + var v9 uint64 + var _ /* arg at bp+16 */ Targ + var _ /* charfmt at bp+24 */ [16]uint8 + var _ /* s at bp+8 */ uintptr + var _ /* wc at bp+40 */ Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = a, argpos, bs, cnt, fl, i, l, l10n, p, ps, st, t, w, xp, z, v10, v12, v13, v14, v15, v16, v5, v6, v7, v8, v9 + *(*uintptr)(unsafe.Pointer(bp + 8)) = fmt + l10n = uint32(0) + cnt = 0 + l = 0 + for { + /* This error is only specified for snprintf, but since it's + * unspecified for other forms, do the same. Stop immediately + * on overflow; otherwise %n could produce wrong results. */ + if l > int32(INT_MAX)-cnt { + goto overflow + } + /* Update output count, end loop when fmt is exhausted */ + cnt += l + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0) { + break + } + /* Handle literal text and %% format specifiers */ + a = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != int32('%')) { + break + } + goto _2 + _2: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + z = *(*uintptr)(unsafe.Pointer(bp + 8)) + for { + if !(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('%') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('%')) { + break + } + goto _3 + _3: + ; + z += 4 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } + if (int64(z)-int64(a))/4 > int64(int32(INT_MAX)-cnt) { + goto overflow + } + l = int32((int64(z) - int64(a)) / 4) + if f != 0 { + _out1(tls, f, a, uint64(l)) + } + if l != 0 { + goto _1 + } + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + argpos = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) - int32('0') + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + argpos = -int32(1) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read modifier flags */ + fl = uint32(0) + for { + if !(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32(' ') < uint32(32) && (Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))|Uint32FromUint32(1)<<(Int32FromUint8('\'')-Int32FromUint8(' ')))&(uint32(1)<<(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8))))-int32(' '))) != 0) { + break + } + fl |= uint32(1) << (*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) - int32(' ')) + goto _4 + _4: + ; + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } + /* Read field width */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)) == int32('$') { + l10n = uint32(1) + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*4)) = int32(_INT) + w = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(3) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v5 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v5 = 0 + } + w = v5 + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + } else { + goto inval + } + } + if w < 0 { + fl |= Uint32FromUint32(1) << (Int32FromUint8('-') - Int32FromUint8(' ')) + w = -w + } + } else { + v6 = _getint1(tls, bp+8) + w = v6 + if v6 < 0 { + goto overflow + } + } + /* Read precision */ + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 1*4)) == int32('*') { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 3*4)) == int32('$') { + *(*int32)(unsafe.Pointer(nl_type + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*4)) = int32(_INT) + p = int32(*(*Tuintmax_t)(unsafe.Pointer(nl_arg + uintptr(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + 2*4))-int32('0'))*8))) + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(4) * 4 + } else { + if !(l10n != 0) { + if f != 0 { + v7 = VaInt32(&*(*Tva_list)(unsafe.Pointer(ap))) + } else { + v7 = 0 + } + p = v7 + *(*uintptr)(unsafe.Pointer(bp + 8)) += uintptr(2) * 4 + } else { + goto inval + } + } + xp = BoolInt32(p >= 0) + } else { + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) == int32('.') { + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + p = _getint1(tls, bp+8) + xp = int32(1) + } else { + p = -int32(1) + xp = 0 + } + } + /* Format specifier state machine */ + st = uint32(0) + for cond := true; cond; cond = st-uint32(1) < uint32(_STOP) { + if uint32(*(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))))-uint32('A') > uint32(Int32FromUint8('z')-Int32FromUint8('A')) { + goto inval + } + ps = st + v8 = *(*uintptr)(unsafe.Pointer(bp + 8)) + *(*uintptr)(unsafe.Pointer(bp + 8)) += 4 + st = uint32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&_states1)) + uintptr(st)*58 + uintptr(*(*Twchar_t)(unsafe.Pointer(v8))-int32('A'))))) + } + if !(st != 0) { + goto inval + } + /* Check validity of argument type (nl/normal) */ + if st == uint32(_NOARG) { + if argpos >= 0 { + goto inval + } + } else { + if argpos >= 0 { + *(*int32)(unsafe.Pointer(nl_type + uintptr(argpos)*4)) = int32(st) + *(*Targ)(unsafe.Pointer(bp + 16)) = *(*Targ)(unsafe.Pointer(nl_arg + uintptr(argpos)*8)) + } else { + if f != 0 { + _pop_arg1(tls, bp+16, int32(st), ap) + } else { + return 0 + } + } + } + if !(f != 0) { + goto _1 + } + /* Do not process any new directives once in error state. */ + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + return -int32(1) + } + t = *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(-Int32FromInt32(1))*4)) + if ps != 0 && t&int32(15) == int32(3) { + t &= ^Int32FromInt32(32) + } + switch t { + case int32('n'): + switch ps { + case uint32(_BARE): + *(*int32)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = cnt + case uint32(_LPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_LLPRE): + *(*int64)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = int64(cnt) + case uint32(_HPRE): + *(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint16(cnt) + case uint32(_HHPRE): + *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint8(cnt) + case uint32(_ZTPRE): + *(*Tsize_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + case uint32(_JPRE): + *(*Tuintmax_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) = uint64(cnt) + break + } + goto _1 + case int32('c'): + fallthrough + case int32('C'): + if w < int32(1) { + w = int32(1) + } + _pad4(tls, f, w-int32(1), int32(fl)) + if t == int32('C') { + v9 = *(*Tuintmax_t)(unsafe.Pointer(bp + 16)) + } else { + v9 = uint64(Xbtowc(tls, int32(*(*Tuintmax_t)(unsafe.Pointer(bp + 16))))) + } + *(*Twchar_t)(unsafe.Pointer(bp)) = int32(v9) + _out1(tls, f, bp, uint64(1)) + _pad4(tls, f, w-int32(1), int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('S'): + a = *(*uintptr)(unsafe.Pointer(bp + 16)) + if p < 0 { + v10 = int32(INT_MAX) + } else { + v10 = p + } + z = a + uintptr(Xwcsnlen(tls, a, uint64(v10)))*4 + if p < 0 && *(*Twchar_t)(unsafe.Pointer(z)) != 0 { + goto overflow + } + p = int32((int64(z) - int64(a)) / 4) + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + _out1(tls, f, a, uint64(p)) + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + case int32('m'): + *(*uintptr)(unsafe.Pointer(bp + 16)) = Xstrerror(tls, *(*int32)(unsafe.Pointer(X__errno_location(tls)))) + fallthrough + case int32('s'): + if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { + *(*uintptr)(unsafe.Pointer(bp + 16)) = __ccgo_ts + 1657 + } + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + v12 = Int32FromInt32(0) + l = v12 + i = v12 + for { + if p < 0 { + v13 = int32(INT_MAX) + } else { + v13 = p + } + if v15 = l < v13; v15 { + v14 = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + i = v14 + } + if !(v15 && v14 > 0) { + break + } + goto _11 + _11: + ; + bs += uintptr(i) + l++ + } + if i < 0 { + return -int32(1) + } + if p < 0 && *(*uint8)(unsafe.Pointer(bs)) != 0 { + goto overflow + } + p = l + if w < p { + w = p + } + _pad4(tls, f, w-p, int32(fl)) + bs = *(*uintptr)(unsafe.Pointer(bp + 16)) + for { + v16 = l + l-- + if !(v16 != 0) { + break + } + i = Xmbtowc(tls, bp+40, bs, uint64(MB_LEN_MAX)) + bs += uintptr(i) + _out1(tls, f, bp+40, uint64(1)) + } + _pad4(tls, f, w-p, int32(fl^Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' ')))) + l = w + goto _1 + } + if xp != 0 && p < 0 { + goto overflow + } + Xsnprintf(tls, bp+24, uint64(16), __ccgo_ts+1668, VaList(bp+56, __ccgo_ts+1688+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('#')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1690+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('+')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1692+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('-')-Int32FromUint8(' '))) != 0)), __ccgo_ts+702+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8(' ')-Int32FromUint8(' '))) != 0)), __ccgo_ts+1694+BoolUintptr(!(fl&(Uint32FromUint32(1)<<(Int32FromUint8('0')-Int32FromUint8(' '))) != 0)), int32(_sizeprefix[t|int32(32)-int32('a')]), t)) + switch t | Int32FromInt32(32) { + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*float64)(unsafe.Pointer(bp + 16)))) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('p'): + l = Xfprintf(tls, f, bp+24, VaList(bp+56, w, p, *(*Tuintmax_t)(unsafe.Pointer(bp + 16)))) + break + } + goto _1 + _1: + } + if f != 0 { + return cnt + } + if !(l10n != 0) { + return 0 + } + i = int32(1) + for { + if !(i <= int32(NL_ARGMAX) && *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0) { + break + } + _pop_arg1(tls, nl_arg+uintptr(i)*8, *(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)), ap) + goto _17 + _17: + ; + i++ + } + for { + if !(i <= int32(NL_ARGMAX) && !(*(*int32)(unsafe.Pointer(nl_type + uintptr(i)*4)) != 0)) { + break + } + goto _18 + _18: + ; + i++ + } + if i <= int32(NL_ARGMAX) { + return -int32(1) + } + return int32(1) + goto inval +inval: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + goto overflow +overflow: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return -int32(1) +} + +func Xvfwprintf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var __need_unlock, olderr, ret, v1 int32 + var _ /* ap2 at bp+0 */ Tva_list + var _ /* nl_arg at bp+48 */ [10]Targ + var _ /* nl_type at bp+8 */ [10]int32 + _, _, _, _ = __need_unlock, olderr, ret, v1 + *(*[10]int32)(unsafe.Pointer(bp + 8)) = [10]int32{} + /* the copy allows passing va_list* even if va_list is an array */ + *(*Tva_list)(unsafe.Pointer(bp)) = ap + if _wprintf_core(tls, uintptr(0), fmt, bp, bp+48, bp+8) < 0 { + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return -int32(1) + } + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + olderr = int32((*TFILE)(unsafe.Pointer(f)).Fflags & uint32(F_ERR)) + *(*uint32)(unsafe.Pointer(f)) &= uint32(^Int32FromInt32(F_ERR)) + ret = _wprintf_core(tls, f, fmt, bp, bp+48, bp+8) + if (*TFILE)(unsafe.Pointer(f)).Fflags&uint32(F_ERR) != 0 { + ret = -int32(1) + } + *(*uint32)(unsafe.Pointer(f)) |= uint32(olderr) + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + _ = *(*Tva_list)(unsafe.Pointer(bp)) + return ret +} + +func _store_int1(tls *TLS, dest uintptr, size int32, i uint64) { + if !(dest != 0) { + return + } + switch size { + case -int32(2): + *(*uint8)(unsafe.Pointer(dest)) = uint8(i) + case -int32(1): + *(*int16)(unsafe.Pointer(dest)) = int16(i) + case SIZE_def: + *(*int32)(unsafe.Pointer(dest)) = int32(i) + case int32(SIZE_l): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + case int32(SIZE_ll): + *(*int64)(unsafe.Pointer(dest)) = int64(i) + break + } +} + +func _arg_n1(tls *TLS, ap Tva_list, n uint32) (r uintptr) { + var ap2 Tva_list + var i uint32 + var p uintptr + _, _, _ = ap2, i, p + ap2 = ap + i = n + for { + if !(i > uint32(1)) { + break + } + _ = VaUintptr(&ap2) + goto _1 + _1: + ; + i-- + } + p = VaUintptr(&ap2) + _ = ap2 + return p +} + +func _in_set(tls *TLS, set uintptr, c int32) (r int32) { + var j int32 + var p, v3 uintptr + _, _, _ = j, p, v3 + p = set + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') { + if c == int32('-') { + return int32(1) + } + p += 4 + } else { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + if c == int32(']') { + return int32(1) + } + p += 4 + } + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0 && *(*Twchar_t)(unsafe.Pointer(p)) != int32(']')) { + break + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('-') && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) != int32(']') { + v3 = p + p += 4 + j = *(*Twchar_t)(unsafe.Pointer(v3 + uintptr(-Int32FromInt32(1))*4)) + for { + if !(j < *(*Twchar_t)(unsafe.Pointer(p))) { + break + } + if c == j { + return int32(1) + } + goto _2 + _2: + ; + j++ + } + } + if c == *(*Twchar_t)(unsafe.Pointer(p)) { + return int32(1) + } + goto _1 + _1: + ; + p += 4 + } + return 0 +} + +func Xvfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(80) + defer tls.Free(80) + var __need_unlock, alloc, c, gotmatch, invert, l, matches, size, t, width, v1, v10, v22, v3, v36 int32 + var dest, p, s, set, tmp1, tmp2, wcs, v12, v13, v15, v16, v18, v19, v21, v24, v25, v27, v28, v30, v31, v32, v33, v34, v38, v39, v41, v43, v44, v45, v5, v6, v8, v9 uintptr + var i, k, v40 Tsize_t + var pos Toff_t + var v11, v14, v23, v26, v35, v37, v4 uint32 + var _ /* cnt at bp+0 */ Toff_t + var _ /* tmp at bp+8 */ [22]uint8 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = __need_unlock, alloc, c, dest, gotmatch, i, invert, k, l, matches, p, pos, s, set, size, t, tmp1, tmp2, wcs, width, v1, v10, v11, v12, v13, v14, v15, v16, v18, v19, v21, v22, v23, v24, v25, v26, v27, v28, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v4, v40, v41, v43, v44, v45, v5, v6, v8, v9 + dest = UintptrFromInt32(0) + matches = 0 + pos = 0 + if AtomicLoadPInt32(f+140) >= 0 { + v1 = ___lockfile(tls, f) + } else { + v1 = 0 + } + __need_unlock = v1 + Xfwide(tls, f, int32(1)) + p = fmt + for { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + break + } + alloc = 0 + if Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p)))) != 0 { + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(p + 1*4)))) != 0 { + p += 4 + } + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v6 = f + 8 + v5 = *(*uintptr)(unsafe.Pointer(v6)) + *(*uintptr)(unsafe.Pointer(v6))++ + v4 = uint32(*(*uint8)(unsafe.Pointer(v5))) + } else { + v4 = Xgetwc(tls, f) + } + v3 = int32(v4) + c = v3 + if !(Xiswspace(tls, uint32(v3)) != 0) { + break + } + pos++ + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v9 = f + 8 + *(*uintptr)(unsafe.Pointer(v9))-- + v8 = *(*uintptr)(unsafe.Pointer(v9)) + _ = *(*uint8)(unsafe.Pointer(v8)) + } else { + Xungetwc(tls, uint32(c), f) + } + goto _2 + } + if *(*Twchar_t)(unsafe.Pointer(p)) != int32('%') || *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('%') { + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('%') { + p += 4 + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v13 = f + 8 + v12 = *(*uintptr)(unsafe.Pointer(v13)) + *(*uintptr)(unsafe.Pointer(v13))++ + v11 = uint32(*(*uint8)(unsafe.Pointer(v12))) + } else { + v11 = Xgetwc(tls, f) + } + v10 = int32(v11) + c = v10 + if !(Xiswspace(tls, uint32(v10)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v16 = f + 8 + v15 = *(*uintptr)(unsafe.Pointer(v16)) + *(*uintptr)(unsafe.Pointer(v16))++ + v14 = uint32(*(*uint8)(unsafe.Pointer(v15))) + } else { + v14 = Xgetwc(tls, f) + } + c = int32(v14) + } + if c != *(*Twchar_t)(unsafe.Pointer(p)) { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v19 = f + 8 + *(*uintptr)(unsafe.Pointer(v19))-- + v18 = *(*uintptr)(unsafe.Pointer(v19)) + _ = *(*uint8)(unsafe.Pointer(v18)) + } else { + Xungetwc(tls, uint32(c), f) + } + if c < 0 { + goto input_fail + } + goto match_fail + } + pos++ + goto _2 + } + p += 4 + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('*') { + dest = uintptr(0) + p += 4 + } else { + if BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0 && *(*Twchar_t)(unsafe.Pointer(p + 1*4)) == int32('$') { + dest = _arg_n1(tls, ap, uint32(*(*Twchar_t)(unsafe.Pointer(p))-int32('0'))) + p += uintptr(2) * 4 + } else { + dest = VaUintptr(&ap) + } + } + width = 0 + for { + if !(BoolInt32(uint32(*(*Twchar_t)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) != 0) { + break + } + width = int32(10)*width + *(*Twchar_t)(unsafe.Pointer(p)) - int32('0') + goto _20 + _20: + ; + p += 4 + } + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('m') { + wcs = uintptr(0) + s = uintptr(0) + alloc = BoolInt32(!!(dest != 0)) + p += 4 + } else { + alloc = 0 + } + size = SIZE_def + v21 = p + p += 4 + switch *(*Twchar_t)(unsafe.Pointer(v21)) { + case int32('h'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('h') { + p += 4 + size = -Int32FromInt32(2) + } else { + size = -int32(1) + } + case int32('l'): + if *(*Twchar_t)(unsafe.Pointer(p)) == int32('l') { + p += 4 + size = Int32FromInt32(SIZE_ll) + } else { + size = int32(SIZE_l) + } + case int32('j'): + size = int32(SIZE_ll) + case int32('z'): + fallthrough + case int32('t'): + size = int32(SIZE_l) + case int32('L'): + size = int32(SIZE_L) + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + fallthrough + case int32('S'): + fallthrough + case int32('C'): + fallthrough + case int32('p'): + fallthrough + case int32('n'): + p -= 4 + default: + goto fmt_fail + } + t = *(*Twchar_t)(unsafe.Pointer(p)) + /* Transform S,C -> ls,lc */ + if t&int32(0x2f) == int32(3) { + size = int32(SIZE_l) + t |= int32(32) + } + if t != int32('n') { + if t != int32('[') && t|int32(32) != int32('c') { + for { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v25 = f + 8 + v24 = *(*uintptr)(unsafe.Pointer(v25)) + *(*uintptr)(unsafe.Pointer(v25))++ + v23 = uint32(*(*uint8)(unsafe.Pointer(v24))) + } else { + v23 = Xgetwc(tls, f) + } + v22 = int32(v23) + c = v22 + if !(Xiswspace(tls, uint32(v22)) != 0) { + break + } + pos++ + } + } else { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v28 = f + 8 + v27 = *(*uintptr)(unsafe.Pointer(v28)) + *(*uintptr)(unsafe.Pointer(v28))++ + v26 = uint32(*(*uint8)(unsafe.Pointer(v27))) + } else { + v26 = Xgetwc(tls, f) + } + c = int32(v26) + } + if c < 0 { + goto input_fail + } + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v31 = f + 8 + *(*uintptr)(unsafe.Pointer(v31))-- + v30 = *(*uintptr)(unsafe.Pointer(v31)) + _ = *(*uint8)(unsafe.Pointer(v30)) + } else { + Xungetwc(tls, uint32(c), f) + } + } + switch t { + case int32('n'): + _store_int1(tls, dest, size, uint64(pos)) + /* do not increment match count, etc! */ + goto _2 + case int32('s'): + fallthrough + case int32('c'): + fallthrough + case int32('['): + if t == int32('c') { + if width < int32(1) { + width = int32(1) + } + invert = int32(1) + set = __ccgo_ts + 1696 + } else { + if t == int32('s') { + invert = int32(1) + set = uintptr(unsafe.Pointer(&_spaces1)) + } else { + p += 4 + v32 = p + if *(*Twchar_t)(unsafe.Pointer(v32)) == int32('^') { + p += 4 + invert = Int32FromInt32(1) + } else { + invert = 0 + } + set = p + if *(*Twchar_t)(unsafe.Pointer(p)) == int32(']') { + p += 4 + } + for *(*Twchar_t)(unsafe.Pointer(p)) != int32(']') { + if !(*(*Twchar_t)(unsafe.Pointer(p)) != 0) { + goto fmt_fail + } + p += 4 + } + } + } + if size == SIZE_def { + v33 = dest + } else { + v33 = uintptr(0) + } + s = v33 + if size == int32(SIZE_l) { + v34 = dest + } else { + v34 = uintptr(0) + } + wcs = v34 + gotmatch = 0 + if width < int32(1) { + width = -int32(1) + } + i = uint64(0) + if alloc != 0 { + if t == int32('c') { + v35 = uint32(width) + uint32(1) + } else { + v35 = uint32(31) + } + k = uint64(v35) + if size == int32(SIZE_l) { + wcs = Xmalloc(tls, k*uint64(4)) + if !(wcs != 0) { + goto alloc_fail + } + } else { + s = Xmalloc(tls, k) + if !(s != 0) { + goto alloc_fail + } + } + } + for width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frpos != (*TFILE)(unsafe.Pointer(f)).Frend && int32(*(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Frpos))) < int32(128) { + v39 = f + 8 + v38 = *(*uintptr)(unsafe.Pointer(v39)) + *(*uintptr)(unsafe.Pointer(v39))++ + v37 = uint32(*(*uint8)(unsafe.Pointer(v38))) + } else { + v37 = Xgetwc(tls, f) + } + v36 = int32(v37) + c = v36 + if v36 < 0 { + break + } + if _in_set(tls, set, c) == invert { + break + } + if wcs != 0 { + v40 = i + i++ + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(v40)*4)) = c + if alloc != 0 && i == k { + k += k + uint64(1) + tmp1 = Xrealloc(tls, wcs, k*uint64(4)) + if !(tmp1 != 0) { + goto alloc_fail + } + wcs = tmp1 + } + } else { + if size != int32(SIZE_l) { + if s != 0 { + v41 = s + uintptr(i) + } else { + v41 = bp + 8 + } + l = Xwctomb(tls, v41, c) + if l < 0 { + goto input_fail + } + i += uint64(l) + if alloc != 0 && i > k-uint64(4) { + k += k + uint64(1) + tmp2 = Xrealloc(tls, s, k) + if !(tmp2 != 0) { + goto alloc_fail + } + s = tmp2 + } + } + } + pos++ + width -= BoolInt32(width > 0) + gotmatch = int32(1) + } + if width != 0 { + if (*TFILE)(unsafe.Pointer(f)).Frend != 0 && uint32(c) < uint32(128) { + v44 = f + 8 + *(*uintptr)(unsafe.Pointer(v44))-- + v43 = *(*uintptr)(unsafe.Pointer(v44)) + _ = *(*uint8)(unsafe.Pointer(v43)) + } else { + Xungetwc(tls, uint32(c), f) + } + if t == int32('c') || !(gotmatch != 0) { + goto match_fail + } + } + if alloc != 0 { + if size == int32(SIZE_l) { + *(*uintptr)(unsafe.Pointer(dest)) = wcs + } else { + *(*uintptr)(unsafe.Pointer(dest)) = s + } + } + if t != int32('c') { + if wcs != 0 { + *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 + } + if s != 0 { + *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) + } + } + case int32('d'): + fallthrough + case int32('i'): + fallthrough + case int32('o'): + fallthrough + case int32('u'): + fallthrough + case int32('x'): + fallthrough + case int32('a'): + fallthrough + case int32('e'): + fallthrough + case int32('f'): + fallthrough + case int32('g'): + fallthrough + case int32('A'): + fallthrough + case int32('E'): + fallthrough + case int32('F'): + fallthrough + case int32('G'): + fallthrough + case int32('X'): + fallthrough + case int32('p'): + if width < int32(1) { + width = 0 + } + Xsnprintf(tls, bp+8, uint64(22), __ccgo_ts+1700, VaList(bp+40, int32(1)+BoolInt32(!(dest != 0)), __ccgo_ts+1718, width, uintptr(unsafe.Pointer(&_size_pfx))+uintptr(size+int32(2))*3, t)) + *(*Toff_t)(unsafe.Pointer(bp)) = 0 + if dest != 0 { + v45 = dest + } else { + v45 = bp + } + if Xfscanf(tls, f, bp+8, VaList(bp+40, v45, bp)) == -int32(1) { + goto input_fail + } else { + if !(*(*Toff_t)(unsafe.Pointer(bp)) != 0) { + goto match_fail + } + } + pos += *(*Toff_t)(unsafe.Pointer(bp)) + default: + goto fmt_fail + } + if dest != 0 { + matches++ + } + goto _2 + _2: + ; + p += 4 + } + if !(0 != 0) { + goto _46 + } + goto fmt_fail +fmt_fail: + ; + goto alloc_fail +alloc_fail: + ; + goto input_fail +input_fail: + ; + if !(matches != 0) { + matches-- + } + goto match_fail +match_fail: + ; + if alloc != 0 { + Xfree(tls, s) + Xfree(tls, wcs) + } +_46: + ; + if __need_unlock != 0 { + ___unlockfile(tls, f) + } + return matches +} + +var _size_pfx = [6][3]uint8{ + 0: {'h', 'h'}, + 1: {'h'}, + 2: {}, + 3: {'l'}, + 4: {'L'}, + 5: {'l', 'l'}, +} + +var _spaces1 = [22]Twchar_t{ + 0: int32(' '), + 1: int32('\t'), + 2: int32('\n'), + 3: int32('\r'), + 4: int32(11), + 5: int32(12), + 6: int32(0x0085), + 7: int32(0x2000), + 8: int32(0x2001), + 9: int32(0x2002), + 10: int32(0x2003), + 11: int32(0x2004), + 12: int32(0x2005), + 13: int32(0x2006), + 14: int32(0x2008), + 15: int32(0x2009), + 16: int32(0x200a), + 17: int32(0x2028), + 18: int32(0x2029), + 19: int32(0x205f), + 20: int32(0x3000), +} + +func X__isoc99_vfwscanf(tls *TLS, f uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, f, fmt, ap) +} + +func Xvprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvscanf(tls, fmt, ap) +} + +type Tcookie3 = struct { + Fs uintptr + Fn Tsize_t +} + +func _sn_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3 uintptr + var k Tsize_t + var v1, v2 uint64 + _, _, _, _, _ = c, k, v1, v2, v3 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if (*Tcookie3)(unsafe.Pointer(c)).Fn < uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) { + v1 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v1 = uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos) - int64((*TFILE)(unsafe.Pointer(f)).Fwbase)) + } + k = v1 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, (*TFILE)(unsafe.Pointer(f)).Fwbase, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + if (*Tcookie3)(unsafe.Pointer(c)).Fn < l { + v2 = (*Tcookie3)(unsafe.Pointer(c)).Fn + } else { + v2 = l + } + k = v2 + if k != 0 { + Xmemcpy(tls, (*Tcookie3)(unsafe.Pointer(c)).Fs, s, k) + *(*uintptr)(unsafe.Pointer(c)) += uintptr(k) + *(*Tsize_t)(unsafe.Pointer(c + 8)) -= k + } + *(*uint8)(unsafe.Pointer((*Tcookie3)(unsafe.Pointer(c)).Fs)) = uint8(0) + v3 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + /* pretend to succeed, even if we discarded extra data */ + return l +} + +func Xvsnprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(256) + defer tls.Free(256) + var v1 uintptr + var v2 uint64 + var _ /* buf at bp+0 */ [1]uint8 + var _ /* c at bp+8 */ Tcookie3 + var _ /* dummy at bp+1 */ [1]uint8 + var _ /* f at bp+24 */ TFILE + _, _ = v1, v2 + if n != 0 { + v1 = s + } else { + v1 = bp + 1 + } + if n != 0 { + v2 = n - uint64(1) + } else { + v2 = uint64(0) + } + *(*Tcookie3)(unsafe.Pointer(bp + 8)) = Tcookie3{ + Fs: v1, + Fn: v2, + } + *(*TFILE)(unsafe.Pointer(bp + 24)) = TFILE{ + Fwrite: __ccgo_fp(_sn_write), + Fbuf: bp, + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 8, + } + *(*uint8)(unsafe.Pointer((*(*Tcookie3)(unsafe.Pointer(bp + 8))).Fs)) = uint8(0) + return Xvfprintf(tls, bp+24, fmt, ap) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xvsprintf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsnprintf(tls, s, uint64(INT_MAX), fmt, ap) +} + +func _string_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var end, src uintptr + var k Tsize_t + _, _, _ = end, k, src + src = (*TFILE)(unsafe.Pointer(f)).Fcookie + k = len1 + uint64(256) + end = Xmemchr(tls, src, 0, k) + if end != 0 { + k = uint64(int64(end) - int64(src)) + } + if k < len1 { + len1 = k + } + Xmemcpy(tls, buf, src, len1) + (*TFILE)(unsafe.Pointer(f)).Frpos = src + uintptr(len1) + (*TFILE)(unsafe.Pointer(f)).Frend = src + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = src + uintptr(k) + return len1 +} + +func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(240) + defer tls.Free(240) + var _ /* f at bp+0 */ TFILE + *(*TFILE)(unsafe.Pointer(bp)) = TFILE{ + Fread: __ccgo_fp(_string_read), + Fbuf: s, + Flock: -int32(1), + Fcookie: s, + } + return Xvfscanf(tls, bp, fmt, ap) +} + +func X__isoc99_vsscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvsscanf(tls, s, fmt, ap) +} + +type Tcookie4 = struct { + Fws uintptr + Fl Tsize_t +} + +func _sw_write(tls *TLS, f uintptr, s uintptr, l Tsize_t) (r Tsize_t) { + var c, v3, v4, v5 uintptr + var i, v1 int32 + var l0 Tsize_t + var v2 bool + _, _, _, _, _, _, _, _ = c, i, l0, v1, v2, v3, v4, v5 + l0 = l + i = 0 + c = (*TFILE)(unsafe.Pointer(f)).Fcookie + if s != (*TFILE)(unsafe.Pointer(f)).Fwbase && _sw_write(tls, f, (*TFILE)(unsafe.Pointer(f)).Fwbase, uint64(int64((*TFILE)(unsafe.Pointer(f)).Fwpos)-int64((*TFILE)(unsafe.Pointer(f)).Fwbase))) == uint64(-Int32FromInt32(1)) { + return uint64(-Int32FromInt32(1)) + } + for { + if v2 = (*Tcookie4)(unsafe.Pointer(c)).Fl != 0 && l != 0; v2 { + v1 = Xmbtowc(tls, (*Tcookie4)(unsafe.Pointer(c)).Fws, s, l) + i = v1 + } + if !(v2 && v1 >= 0) { + break + } + if !(i != 0) { + i = int32(1) + } + s += uintptr(i) + l -= uint64(i) + (*Tcookie4)(unsafe.Pointer(c)).Fl-- + (*Tcookie4)(unsafe.Pointer(c)).Fws += 4 + } + *(*Twchar_t)(unsafe.Pointer((*Tcookie4)(unsafe.Pointer(c)).Fws)) = 0 + if i < 0 { + v4 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Fwend = v4 + v3 = v4 + (*TFILE)(unsafe.Pointer(f)).Fwbase = v3 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v3 + *(*uint32)(unsafe.Pointer(f)) |= uint32(F_ERR) + return uint64(i) + } + (*TFILE)(unsafe.Pointer(f)).Fwend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr((*TFILE)(unsafe.Pointer(f)).Fbuf_size) + v5 = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Fwbase = v5 + (*TFILE)(unsafe.Pointer(f)).Fwpos = v5 + return l0 +} + +func Xvswprintf(tls *TLS, s uintptr, n Tsize_t, fmt uintptr, ap Tva_list) (r1 int32) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v fmt=%v ap=%v, (%v:)", tls, s, n, fmt, ap, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(512) + defer tls.Free(512) + var r, v1 int32 + var _ /* buf at bp+0 */ [256]uint8 + var _ /* c at bp+256 */ Tcookie4 + var _ /* f at bp+272 */ TFILE + _, _ = r, v1 + *(*Tcookie4)(unsafe.Pointer(bp + 256)) = Tcookie4{ + Fws: s, + Fl: n - uint64(1), + } + *(*TFILE)(unsafe.Pointer(bp + 272)) = TFILE{ + Fwrite: __ccgo_fp(_sw_write), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Flbf: -int32(1), + Fcookie: bp + 256, + } + if !(n != 0) { + return -int32(1) + } + r = Xvfwprintf(tls, bp+272, fmt, ap) + _sw_write(tls, bp+272, uintptr(0), uint64(0)) + if uint64(r) >= n { + v1 = -int32(1) + } else { + v1 = r + } + return v1 +} + +func _wstring_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + bp := tls.Alloc(16) + defer tls.Free(16) + var k Tsize_t + var v1, v2, v3 uintptr + var _ /* src at bp+0 */ uintptr + _, _, _, _ = k, v1, v2, v3 + *(*uintptr)(unsafe.Pointer(bp)) = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*uintptr)(unsafe.Pointer(bp)) != 0) { + return uint64(0) + } + k = Xwcsrtombs(tls, (*TFILE)(unsafe.Pointer(f)).Fbuf, bp, (*TFILE)(unsafe.Pointer(f)).Fbuf_size, uintptr(0)) + if k == uint64(-Int32FromInt32(1)) { + v1 = UintptrFromInt32(0) + (*TFILE)(unsafe.Pointer(f)).Frend = v1 + (*TFILE)(unsafe.Pointer(f)).Frpos = v1 + return uint64(0) + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(k) + (*TFILE)(unsafe.Pointer(f)).Fcookie = *(*uintptr)(unsafe.Pointer(bp)) + if !(len1 != 0) || !(k != 0) { + return uint64(0) + } + v3 = f + 8 + v2 = *(*uintptr)(unsafe.Pointer(v3)) + *(*uintptr)(unsafe.Pointer(v3))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v2)) + return uint64(1) +} + +func Xvswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(496) + defer tls.Free(496) + var _ /* buf at bp+0 */ [256]uint8 + var _ /* f at bp+256 */ TFILE + *(*TFILE)(unsafe.Pointer(bp + 256)) = TFILE{ + Fread: __ccgo_fp(_wstring_read), + Fbuf: bp, + Fbuf_size: uint64(256), + Flock: -int32(1), + Fcookie: s, + } + return Xvfwscanf(tls, bp+256, fmt, ap) +} + +func X__isoc99_vswscanf(tls *TLS, s uintptr, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvswscanf(tls, s, fmt, ap) +} + +func Xvwprintf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwprintf(tls, uintptr(unsafe.Pointer(&X__stdout_FILE)), fmt, ap) +} + +func Xvwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvfwscanf(tls, uintptr(unsafe.Pointer(&X__stdin_FILE)), fmt, ap) +} + +func X__isoc99_vwscanf(tls *TLS, fmt uintptr, ap Tva_list) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v ap=%v, (%v:)", tls, fmt, ap, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xvwscanf(tls, fmt, ap) +} + +func Xwprintf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwprintf(tls, fmt, ap) + _ = ap + return ret +} + +func Xwscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ap Tva_list + var ret int32 + _, _ = ap, ret + ap = va + ret = Xvwscanf(tls, fmt, ap) + _ = ap + return ret +} + +func X__isoc99_wscanf(tls *TLS, fmt uintptr, va uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fmt=%v va=%v, (%v:)", tls, fmt, va, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwscanf(tls, fmt, va) +} + +func Xabs(tls *TLS, a int32) (r int32) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xatof(tls *TLS, s uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtod(tls, s, uintptr(0)) +} + +func Xatoi(tls *TLS, s uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, neg, v1, v2, v5 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on INT_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int32(10)*n - (int32(*(*uint8)(unsafe.Pointer(v4))) - int32('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatol(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xatoll(tls *TLS, s uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var n, v5 int64 + var neg, v1, v2 int32 + var v4 uintptr + _, _, _, _, _, _ = n, neg, v1, v2, v4, v5 + n = 0 + neg = 0 + for { + v1 = int32(*(*uint8)(unsafe.Pointer(s))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if !(v2 != 0) { + break + } + s++ + } + switch int32(*(*uint8)(unsafe.Pointer(s))) { + case int32('-'): + neg = int32(1) + fallthrough + case int32('+'): + s++ + } + /* Compute n as a negative number to avoid overflow on LLONG_MIN */ + for BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0 { + v4 = s + s++ + n = int64(10)*n - int64(int32(*(*uint8)(unsafe.Pointer(v4)))-Int32FromUint8('0')) + } + if neg != 0 { + v5 = n + } else { + v5 = -n + } + return v5 +} + +func Xbsearch(tls *TLS, key uintptr, base uintptr, nel Tsize_t, width Tsize_t, cmp uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) + defer func() { trc("-> %v", r) }() + } + var sign int32 + var try uintptr + _, _ = sign, try + for nel > uint64(0) { + try = base + uintptr(width*(nel/uint64(2))) + sign = (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, key, try) + if sign < 0 { + nel /= uint64(2) + } else { + if sign > 0 { + base = try + uintptr(width) + nel -= nel/uint64(2) + uint64(1) + } else { + return try + } + } + } + return UintptrFromInt32(0) +} + +func Xdiv(tls *TLS, num int32, den int32) (r Tdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xecvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var i, j, v1, v3 int32 + var _ /* tmp at bp+0 */ [32]uint8 + _, _, _, _ = i, j, v1, v3 + if uint32(n)-uint32(1) > uint32(15) { + n = int32(15) + } + Xsprintf(tls, bp, __ccgo_ts+1721, VaList(bp+40, n-int32(1), x)) + v1 = BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[0]) == Int32FromUint8('-')) + *(*int32)(unsafe.Pointer(sign)) = v1 + i = v1 + j = 0 + for { + if !(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[i]) != int32('e')) { + break + } + _buf8[j] = (*(*[32]uint8)(unsafe.Pointer(bp)))[i] + goto _2 + _2: + ; + v3 = i + i++ + j += BoolInt32(int32((*(*[32]uint8)(unsafe.Pointer(bp)))[v3]) != int32('.')) + } + _buf8[j] = uint8(0) + *(*int32)(unsafe.Pointer(dp)) = Xatoi(tls, bp+uintptr(i)+uintptr(1)) + int32(1) + return uintptr(unsafe.Pointer(&_buf8)) +} + +var _buf8 [16]uint8 + +func Xfcvt(tls *TLS, x float64, n int32, dp uintptr, sign uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v dp=%v sign=%v, (%v:)", tls, x, n, dp, sign, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(1536) + defer tls.Free(1536) + var i, lz int32 + var _ /* tmp at bp+0 */ [1500]uint8 + _, _ = i, lz + if uint32(n) > uint32(1400) { + n = int32(1400) + } + Xsprintf(tls, bp, __ccgo_ts+1726, VaList(bp+1512, n, x)) + i = BoolInt32(int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[0]) == int32('-')) + if int32((*(*[1500]uint8)(unsafe.Pointer(bp)))[i]) == int32('0') { + lz = int32(Xstrspn(tls, bp+uintptr(i)+uintptr(2), __ccgo_ts+1694)) + } else { + lz = -int32(Xstrcspn(tls, bp+uintptr(i), __ccgo_ts+598)) + } + if n <= lz { + *(*int32)(unsafe.Pointer(sign)) = i + *(*int32)(unsafe.Pointer(dp)) = int32(1) + if uint32(n) > uint32(14) { + n = int32(14) + } + return __ccgo_ts + 1731 + UintptrFromInt32(14) - uintptr(n) + } + return Xecvt(tls, x, n-lz, dp, sign) +} + +func Xgcvt(tls *TLS, x float64, n int32, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v x=%v n=%v b=%v, (%v:)", tls, x, n, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + Xsprintf(tls, b, __ccgo_ts+1747, VaList(bp+8, n, x)) + return b +} + +func Ximaxabs(tls *TLS, a Tintmax_t) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Ximaxdiv(tls *TLS, num Tintmax_t, den Tintmax_t) (r Timaxdiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Timaxdiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xlabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xldiv(tls *TLS, num int64, den int64) (r Tldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +func Xllabs(tls *TLS, a int64) (r int64) { + if __ccgo_strace { + trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int64 + _ = v1 + if a > 0 { + v1 = a + } else { + v1 = -a + } + return v1 +} + +func Xlldiv(tls *TLS, num int64, den int64) (r Tlldiv_t) { + if __ccgo_strace { + trc("tls=%v num=%v den=%v, (%v:)", tls, num, den, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Tlldiv_t{ + Fquot: num / den, + Frem: num % den, + } +} + +type Tcmpfun = uintptr + +func _pntz(tls *TLS, p uintptr) (r1 int32) { + var r, v2, v4, v6 int32 + var v1, v5 uint64 + var v8 bool + _, _, _, _, _, _, _ = r, v1, v2, v4, v5, v6, v8 + v1 = *(*Tsize_t)(unsafe.Pointer(p)) - uint64(1) + v2 = _a_ctz_64(tls, v1) + goto _3 +_3: + r = v2 + if v8 = r != 0; !v8 { + v5 = *(*Tsize_t)(unsafe.Pointer(p + 1*8)) + v6 = _a_ctz_64(tls, v5) + goto _7 + _7: + v4 = int32(Uint64FromInt32(8)*Uint64FromInt64(8) + uint64(v6)) + r = v4 + } + if v8 || uint64(v4) != Uint64FromInt32(8)*Uint64FromInt64(8) { + return r + } + return 0 +} + +func _cycle(tls *TLS, width Tsize_t, ar uintptr, n int32) { + bp := tls.Alloc(256) + defer tls.Free(256) + var i int32 + var l Tsize_t + var v1 uint64 + var _ /* tmp at bp+0 */ [256]uint8 + _, _, _ = i, l, v1 + if n < int32(2) { + return + } + *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)) = bp + for width != 0 { + if uint64(256) < width { + v1 = uint64(256) + } else { + v1 = width + } + l = v1 + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(n)*8)), *(*uintptr)(unsafe.Pointer(ar)), l) + i = 0 + for { + if !(i < n) { + break + } + Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)), *(*uintptr)(unsafe.Pointer(ar + uintptr(i+int32(1))*8)), l) + *(*uintptr)(unsafe.Pointer(ar + uintptr(i)*8)) += uintptr(l) + goto _2 + _2: + ; + i++ + } + width -= l + } +} + +// C documentation +// +// /* shl() and shr() need n > 0 */ +func _shl(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = *(*Tsize_t)(unsafe.Pointer(p)) + *(*Tsize_t)(unsafe.Pointer(p)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) <<= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) |= *(*Tsize_t)(unsafe.Pointer(p)) >> (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p)) <<= uint64(n) +} + +func _shr(tls *TLS, p uintptr, n int32) { + if uint64(n) >= Uint64FromInt32(8)*Uint64FromInt64(8) { + n = int32(uint64(n) - Uint64FromInt32(8)*Uint64FromInt64(8)) + *(*Tsize_t)(unsafe.Pointer(p)) = *(*Tsize_t)(unsafe.Pointer(p + 1*8)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) = uint64(0) + } + *(*Tsize_t)(unsafe.Pointer(p)) >>= uint64(n) + *(*Tsize_t)(unsafe.Pointer(p)) |= *(*Tsize_t)(unsafe.Pointer(p + 1*8)) << (Uint64FromInt64(8)*Uint64FromInt32(8) - uint64(n)) + *(*Tsize_t)(unsafe.Pointer(p + 1*8)) >>= uint64(n) +} + +func _sift(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pshift int32, lp uintptr) { + bp := tls.Alloc(912) + defer tls.Free(912) + var i, v1, v2 int32 + var lf, rt uintptr + var _ /* ar at bp+0 */ [113]uintptr + _, _, _, _, _ = i, lf, rt, v1, v2 + i = int32(1) + (*(*[113]uintptr)(unsafe.Pointer(bp)))[0] = head + for pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], lf, arg) >= 0 && (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, (*(*[113]uintptr)(unsafe.Pointer(bp)))[0], rt, arg) >= 0 { + break + } + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, rt, arg) >= 0 { + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v1] = lf + head = lf + pshift -= int32(1) + } else { + v2 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp)))[v2] = rt + head = rt + pshift -= int32(2) + } + } + _cycle(tls, width, bp, i) +} + +func _trinkle(tls *TLS, head uintptr, width Tsize_t, cmp Tcmpfun, arg uintptr, pp uintptr, pshift int32, trusty int32, lp uintptr) { + bp := tls.Alloc(928) + defer tls.Free(928) + var i, trail, v1 int32 + var lf, rt, stepson uintptr + var _ /* ar at bp+16 */ [113]uintptr + var _ /* p at bp+0 */ [2]Tsize_t + _, _, _, _, _, _ = i, lf, rt, stepson, trail, v1 + i = int32(1) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] = *(*Tsize_t)(unsafe.Pointer(pp)) + (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = *(*Tsize_t)(unsafe.Pointer(pp + 1*8)) + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0] = head + for (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] != uint64(0) { + stepson = head - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift)*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, stepson, (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[0], arg) <= 0 { + break + } + if !(trusty != 0) && pshift > int32(1) { + rt = head - uintptr(width) + lf = head - uintptr(width) - uintptr(*(*Tsize_t)(unsafe.Pointer(lp + uintptr(pshift-int32(2))*8))) + if (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, rt, stepson, arg) >= 0 || (*(*func(*TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, lf, stepson, arg) >= 0 { + break + } + } + v1 = i + i++ + (*(*[113]uintptr)(unsafe.Pointer(bp + 16)))[v1] = stepson + head = stepson + trail = _pntz(tls, bp) + _shr(tls, bp, trail) + pshift += trail + trusty = 0 + } + if !(trusty != 0) { + _cycle(tls, width, bp+16, i) + _sift(tls, head, width, cmp, arg, pshift, lp) + } +} + +func X__qsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + bp := tls.Alloc(784) + defer tls.Free(784) + var head, high uintptr + var i, size, v2, v3 Tsize_t + var pshift, trail int32 + var _ /* lp at bp+0 */ [96]Tsize_t + var _ /* p at bp+768 */ [2]Tsize_t + _, _, _, _, _, _, _, _ = head, high, i, pshift, size, trail, v2, v3 + size = width * nel + *(*[2]Tsize_t)(unsafe.Pointer(bp + 768)) = [2]Tsize_t{ + 0: uint64(1), + } + pshift = int32(1) + if !(size != 0) { + return + } + head = base + high = head + uintptr(size) - uintptr(width) + /* Precompute Leonardo numbers, scaled by element width */ + v2 = width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[int32(1)] = v2 + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[0] = v2 + i = Uint64FromInt32(2) + for { + v3 = (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(2)] + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i-uint64(1)] + width + (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[i] = v3 + if !(v3 < size) { + break + } + goto _1 + _1: + ; + i++ + } + for head < high { + if (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0]&uint64(3) == uint64(3) { + _sift(tls, head, width, cmp, arg, pshift, bp) + _shr(tls, bp+768, int32(2)) + pshift += int32(2) + } else { + if (*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift-int32(1)] >= uint64(int64(high)-int64(head)) { + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + } else { + _sift(tls, head, width, cmp, arg, pshift, bp) + } + if pshift == int32(1) { + _shl(tls, bp+768, int32(1)) + pshift = 0 + } else { + _shl(tls, bp+768, pshift-int32(1)) + pshift = int32(1) + } + } + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + head += uintptr(width) + } + _trinkle(tls, head, width, cmp, arg, bp+768, pshift, 0, bp) + for pshift != int32(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[0] != uint64(1) || (*(*[2]Tsize_t)(unsafe.Pointer(bp + 768)))[int32(1)] != uint64(0) { + if pshift <= int32(1) { + trail = _pntz(tls, bp+768) + _shr(tls, bp+768, trail) + pshift += trail + } else { + _shl(tls, bp+768, int32(2)) + pshift -= int32(2) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) ^= uint64(7) + _shr(tls, bp+768, int32(1)) + _trinkle(tls, head-uintptr((*(*[96]Tsize_t)(unsafe.Pointer(bp)))[pshift])-uintptr(width), width, cmp, arg, bp+768, pshift+int32(1), int32(1), bp) + _shl(tls, bp+768, int32(1)) + *(*Tsize_t)(unsafe.Pointer(bp + 768)) |= uint64(1) + _trinkle(tls, head-uintptr(width), width, cmp, arg, bp+768, pshift, int32(1), bp) + } + head -= uintptr(width) + } +} + +func Xqsort_r(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun, arg uintptr) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v arg=%v, (%v:)", tls, base, nel, width, cmp, arg, origin(2)) + } + X__qsort_r(tls, base, nel, width, cmp, arg) +} + +func _wrapper_cmp(tls *TLS, v1 uintptr, v2 uintptr, cmp uintptr) (r int32) { + return (*(*func(*TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{cmp})))(tls, v1, v2) +} + +func Xqsort(tls *TLS, base uintptr, nel Tsize_t, width Tsize_t, cmp Tcmpfun) { + if __ccgo_strace { + trc("tls=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, base, nel, width, cmp, origin(2)) + } + X__qsort_r(tls, base, nel, width, __ccgo_fp(_wrapper_cmp), cmp) +} + +func _strtox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Toff_t + var y float64 + var v1, v2 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _, _ = cnt, y, v1, v2 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp, prec, int32(1)) + cnt = (*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf)) + if p != 0 { + if cnt != 0 { + v2 = s + uintptr(cnt) + } else { + v2 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v2 + } + return y +} + +func Xstrtof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_strtox(tls, s, p, 0)) +} + +func Xstrtod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(1)) +} + +func Xstrtold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox(tls, s, p, int32(2)) +} + +func _strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(240) + defer tls.Free(240) + var cnt Tsize_t + var y uint64 + var v1 uintptr + var _ /* f at bp+0 */ TFILE + _, _, _ = cnt, y, v1 + v1 = s + (*TFILE)(unsafe.Pointer(bp)).Frpos = v1 + (*TFILE)(unsafe.Pointer(bp)).Fbuf = v1 + (*TFILE)(unsafe.Pointer(bp)).Frend = uintptr(-Int32FromInt32(1)) + X__shlim(tls, bp, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp)).Fbuf))) + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) + } + return y +} + +func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _strtox1(tls, s, p, base, uint64(Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))) +} + +func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_strtox1(tls, s, p, base, uint64(Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1))))) +} + +func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoimax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoimax(tls, s, p, base) +} + +func X__strtol_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtol(tls, s, p, base) +} + +func X__strtoll_internal(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoll(tls, s, p, base) +} + +func X__strtoul_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoul(tls, s, p, base) +} + +func X__strtoull_internal(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoull(tls, s, p, base) +} + +func X__strtoumax_internal(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrtoumax(tls, s, p, base) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1752 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox(tls *TLS, s uintptr, p uintptr, prec int32) (r float64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y float64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__floatscan(tls, bp+64, prec, int32(1)) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstof(tls *TLS, s uintptr, p uintptr) (r float32) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float32(_wcstox(tls, s, p, 0)) +} + +func Xwcstod(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(1)) +} + +func Xwcstold(tls *TLS, s uintptr, p uintptr) (r float64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox(tls, s, p, int32(2)) +} + +/* This read function heavily cheats. It knows: + * (1) len will always be 1 + * (2) non-ascii characters don't matter */ + +func _do_read1(tls *TLS, f uintptr, buf uintptr, len1 Tsize_t) (r Tsize_t) { + var i Tsize_t + var wcs, v3, v4 uintptr + var v2 int32 + _, _, _, _, _ = i, wcs, v2, v3, v4 + wcs = (*TFILE)(unsafe.Pointer(f)).Fcookie + if !(*(*Twchar_t)(unsafe.Pointer(wcs)) != 0) { + wcs = __ccgo_ts + 1752 + } + i = uint64(0) + for { + if !(i < (*TFILE)(unsafe.Pointer(f)).Fbuf_size && *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) != 0) { + break + } + if *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) < int32(128) { + v2 = *(*Twchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) + } else { + v2 = int32('@') + } + *(*uint8)(unsafe.Pointer((*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i))) = uint8(v2) + goto _1 + _1: + ; + i++ + } + (*TFILE)(unsafe.Pointer(f)).Frpos = (*TFILE)(unsafe.Pointer(f)).Fbuf + (*TFILE)(unsafe.Pointer(f)).Frend = (*TFILE)(unsafe.Pointer(f)).Fbuf + uintptr(i) + (*TFILE)(unsafe.Pointer(f)).Fcookie = wcs + uintptr(i)*4 + if i != 0 && len1 != 0 { + v4 = f + 8 + v3 = *(*uintptr)(unsafe.Pointer(v4)) + *(*uintptr)(unsafe.Pointer(v4))++ + *(*uint8)(unsafe.Pointer(buf)) = *(*uint8)(unsafe.Pointer(v3)) + return uint64(1) + } + return uint64(0) +} + +func _wcstox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) (r uint64) { + bp := tls.Alloc(304) + defer tls.Free(304) + var cnt Tsize_t + var t, v1, v2, v3 uintptr + var y uint64 + var _ /* buf at bp+0 */ [64]uint8 + var _ /* f at bp+64 */ TFILE + _, _, _, _, _, _ = cnt, t, y, v1, v2, v3 + t = s + *(*TFILE)(unsafe.Pointer(bp + 64)) = TFILE{} + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fflags = uint32(0) + v2 = bp + UintptrFromInt32(4) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf = v2 + v1 = v2 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frend = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Frpos = v1 + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fbuf_size = Uint64FromInt64(64) - Uint64FromInt32(4) + AtomicStorePInt32(bp+64+140, -int32(1)) + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fread = __ccgo_fp(_do_read1) + for Xiswspace(tls, uint32(*(*Twchar_t)(unsafe.Pointer(t)))) != 0 { + t += 4 + } + (*(*TFILE)(unsafe.Pointer(bp + 64))).Fcookie = t + X__shlim(tls, bp+64, int64(Int32FromInt32(0))) + y = X__intscan(tls, bp+64, uint32(base), int32(1), lim) + if p != 0 { + cnt = uint64((*TFILE)(unsafe.Pointer(bp+64)).Fshcnt + (int64((*TFILE)(unsafe.Pointer(bp+64)).Frpos) - int64((*TFILE)(unsafe.Pointer(bp+64)).Fbuf))) + if cnt != 0 { + v3 = t + uintptr(cnt)*4 + } else { + v3 = s + } + *(*uintptr)(unsafe.Pointer(p)) = v3 + } + return y +} + +func Xwcstoull(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1)) +} + +func Xwcstoll(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1)))) +} + +func Xwcstoul(tls *TLS, s uintptr, p uintptr, base int32) (r uint64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _wcstox1(tls, s, p, base, uint64(Uint64FromUint64(2)*Uint64FromInt64(0x7fffffffffffffff)+Uint64FromInt32(1))) +} + +func Xwcstol(tls *TLS, s uintptr, p uintptr, base int32) (r int64) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int64(_wcstox1(tls, s, p, base, uint64(Uint64FromUint64(0)+uint64(-Int64FromInt64(0x7fffffffffffffff)-Int64FromInt32(1))))) +} + +func Xwcstoimax(tls *TLS, s uintptr, p uintptr, base int32) (r Tintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoll(tls, s, p, base) +} + +func Xwcstoumax(tls *TLS, s uintptr, p uintptr, base int32) (r Tuintmax_t) { + if __ccgo_strace { + trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcstoull(tls, s, p, base) +} + +func Xbcmp(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcmp(tls, s1, s2, n) +} + +func Xbcopy(tls *TLS, s1 uintptr, s2 uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s1=%v s2=%v n=%v, (%v:)", tls, s1, s2, n, origin(2)) + } + Xmemmove(tls, s2, s1, n) +} + +func Xbzero(tls *TLS, s uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + } + Xmemset(tls, s, 0, n) +} + +func Xexplicit_bzero(tls *TLS, d uintptr, n Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v n=%v, (%v:)", tls, d, n, origin(2)) + } + d = Xmemset(tls, d, 0, n) +} + +func Xindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrchr(tls, s, c) +} + +const ALIGN1 = -1 +const HIGHS = 0 +const ONES = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemccpy(tls *TLS, dest uintptr, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v c=%v n=%v, (%v:)", tls, dest, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, wd, ws uintptr + var k Tsize_t + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _, _, _, _ = d, k, s, wd, ws, v2, v3, v6, v7 + d = dest + s = src + c = int32(uint8(c)) + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && int32(v2) != c) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 { + goto tail + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(ws))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && int32(v6) != c) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + if n != 0 { + return d + uintptr(1) + } + return uintptr(0) +} + +const SS = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xmemchr(tls *TLS, src uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v src=%v c=%v n=%v, (%v:)", tls, src, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var s, w, v4 uintptr + _, _, _, _ = k, s, w, v4 + s = src + c = int32(uint8(c)) + for { + if !(uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _1 + _1: + ; + s++ + n-- + } + if n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c { + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(n >= Uint64FromInt64(8) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + n -= Uint64FromInt64(8) + } + s = w + } + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + n-- + } + if n != 0 { + v4 = s + } else { + v4 = uintptr(0) + } + return v4 +} + +func Xmemcmp(tls *TLS, vl uintptr, vr uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v vl=%v vr=%v n=%v, (%v:)", tls, vl, vr, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v2 int32 + _, _, _ = l, r, v2 + l = vl + r = vr + for { + if !(n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _1 + _1: + ; + n-- + l++ + r++ + } + if n != 0 { + v2 = int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) + } else { + v2 = 0 + } + return v2 +} + +const LS = 0 +const RS = 0 + +func Xmemcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 uintptr + var w, x Tuint32_t + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, s, w, x, v10, v11, v12, v13, v14, v16, v17, v18, v19, v2, v21, v22, v24, v25, v26, v27, v28, v29, v3, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v5, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v6, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v7, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v8, v80, v81, v82, v83, v85, v86, v9 + d = dest + s = src + for { + if !(uint64(s)%uint64(4) != 0 && n != 0) { + break + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + goto _1 + _1: + ; + n-- + } + if uint64(d)%uint64(4) == uint64(0) { + for { + if !(n >= uint64(16)) { + break + } + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) + goto _4 + _4: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + if n&uint64(8) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) + d += uintptr(8) + s += uintptr(8) + } + if n&uint64(4) != 0 { + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) + d += uintptr(4) + s += uintptr(4) + } + if n&uint64(2) != 0 { + v5 = d + d++ + v6 = s + s++ + *(*uint8)(unsafe.Pointer(v5)) = *(*uint8)(unsafe.Pointer(v6)) + v7 = d + d++ + v8 = s + s++ + *(*uint8)(unsafe.Pointer(v7)) = *(*uint8)(unsafe.Pointer(v8)) + } + if n&uint64(1) != 0 { + *(*uint8)(unsafe.Pointer(d)) = *(*uint8)(unsafe.Pointer(s)) + } + return dest + } + if n >= uint64(32) { + switch uint64(d) % Uint64FromInt32(4) { + case uint64(1): + w = *(*uint32)(unsafe.Pointer(s)) + v9 = d + d++ + v10 = s + s++ + *(*uint8)(unsafe.Pointer(v9)) = *(*uint8)(unsafe.Pointer(v10)) + v11 = d + d++ + v12 = s + s++ + *(*uint8)(unsafe.Pointer(v11)) = *(*uint8)(unsafe.Pointer(v12)) + v13 = d + d++ + v14 = s + s++ + *(*uint8)(unsafe.Pointer(v13)) = *(*uint8)(unsafe.Pointer(v14)) + n -= uint64(3) + for { + if !(n >= uint64(17)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(1))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w<>Int32FromInt32(8) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(5))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = x<>Int32FromInt32(8) + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(9))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = w<>Int32FromInt32(8) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(13))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = x<>Int32FromInt32(8) + goto _15 + _15: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + case uint64(2): + w = *(*uint32)(unsafe.Pointer(s)) + v16 = d + d++ + v17 = s + s++ + *(*uint8)(unsafe.Pointer(v16)) = *(*uint8)(unsafe.Pointer(v17)) + v18 = d + d++ + v19 = s + s++ + *(*uint8)(unsafe.Pointer(v18)) = *(*uint8)(unsafe.Pointer(v19)) + n -= uint64(2) + for { + if !(n >= uint64(18)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(2))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w<>Int32FromInt32(16) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(6))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = x<>Int32FromInt32(16) + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(10))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = w<>Int32FromInt32(16) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(14))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = x<>Int32FromInt32(16) + goto _20 + _20: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + case uint64(3): + w = *(*uint32)(unsafe.Pointer(s)) + v21 = d + d++ + v22 = s + s++ + *(*uint8)(unsafe.Pointer(v21)) = *(*uint8)(unsafe.Pointer(v22)) + n -= uint64(1) + for { + if !(n >= uint64(19)) { + break + } + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(3))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(0))) = w<>Int32FromInt32(24) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(7))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(4))) = x<>Int32FromInt32(24) + x = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(11))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(8))) = w<>Int32FromInt32(24) + w = *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(15))) + *(*uint32)(unsafe.Pointer(d + UintptrFromInt32(12))) = x<>Int32FromInt32(24) + goto _23 + _23: + ; + s += uintptr(16) + d += uintptr(16) + n -= uint64(16) + } + break + } + } + if n&uint64(16) != 0 { + v24 = d + d++ + v25 = s + s++ + *(*uint8)(unsafe.Pointer(v24)) = *(*uint8)(unsafe.Pointer(v25)) + v26 = d + d++ + v27 = s + s++ + *(*uint8)(unsafe.Pointer(v26)) = *(*uint8)(unsafe.Pointer(v27)) + v28 = d + d++ + v29 = s + s++ + *(*uint8)(unsafe.Pointer(v28)) = *(*uint8)(unsafe.Pointer(v29)) + v30 = d + d++ + v31 = s + s++ + *(*uint8)(unsafe.Pointer(v30)) = *(*uint8)(unsafe.Pointer(v31)) + v32 = d + d++ + v33 = s + s++ + *(*uint8)(unsafe.Pointer(v32)) = *(*uint8)(unsafe.Pointer(v33)) + v34 = d + d++ + v35 = s + s++ + *(*uint8)(unsafe.Pointer(v34)) = *(*uint8)(unsafe.Pointer(v35)) + v36 = d + d++ + v37 = s + s++ + *(*uint8)(unsafe.Pointer(v36)) = *(*uint8)(unsafe.Pointer(v37)) + v38 = d + d++ + v39 = s + s++ + *(*uint8)(unsafe.Pointer(v38)) = *(*uint8)(unsafe.Pointer(v39)) + v40 = d + d++ + v41 = s + s++ + *(*uint8)(unsafe.Pointer(v40)) = *(*uint8)(unsafe.Pointer(v41)) + v42 = d + d++ + v43 = s + s++ + *(*uint8)(unsafe.Pointer(v42)) = *(*uint8)(unsafe.Pointer(v43)) + v44 = d + d++ + v45 = s + s++ + *(*uint8)(unsafe.Pointer(v44)) = *(*uint8)(unsafe.Pointer(v45)) + v46 = d + d++ + v47 = s + s++ + *(*uint8)(unsafe.Pointer(v46)) = *(*uint8)(unsafe.Pointer(v47)) + v48 = d + d++ + v49 = s + s++ + *(*uint8)(unsafe.Pointer(v48)) = *(*uint8)(unsafe.Pointer(v49)) + v50 = d + d++ + v51 = s + s++ + *(*uint8)(unsafe.Pointer(v50)) = *(*uint8)(unsafe.Pointer(v51)) + v52 = d + d++ + v53 = s + s++ + *(*uint8)(unsafe.Pointer(v52)) = *(*uint8)(unsafe.Pointer(v53)) + v54 = d + d++ + v55 = s + s++ + *(*uint8)(unsafe.Pointer(v54)) = *(*uint8)(unsafe.Pointer(v55)) + } + if n&uint64(8) != 0 { + v56 = d + d++ + v57 = s + s++ + *(*uint8)(unsafe.Pointer(v56)) = *(*uint8)(unsafe.Pointer(v57)) + v58 = d + d++ + v59 = s + s++ + *(*uint8)(unsafe.Pointer(v58)) = *(*uint8)(unsafe.Pointer(v59)) + v60 = d + d++ + v61 = s + s++ + *(*uint8)(unsafe.Pointer(v60)) = *(*uint8)(unsafe.Pointer(v61)) + v62 = d + d++ + v63 = s + s++ + *(*uint8)(unsafe.Pointer(v62)) = *(*uint8)(unsafe.Pointer(v63)) + v64 = d + d++ + v65 = s + s++ + *(*uint8)(unsafe.Pointer(v64)) = *(*uint8)(unsafe.Pointer(v65)) + v66 = d + d++ + v67 = s + s++ + *(*uint8)(unsafe.Pointer(v66)) = *(*uint8)(unsafe.Pointer(v67)) + v68 = d + d++ + v69 = s + s++ + *(*uint8)(unsafe.Pointer(v68)) = *(*uint8)(unsafe.Pointer(v69)) + v70 = d + d++ + v71 = s + s++ + *(*uint8)(unsafe.Pointer(v70)) = *(*uint8)(unsafe.Pointer(v71)) + } + if n&uint64(4) != 0 { + v72 = d + d++ + v73 = s + s++ + *(*uint8)(unsafe.Pointer(v72)) = *(*uint8)(unsafe.Pointer(v73)) + v74 = d + d++ + v75 = s + s++ + *(*uint8)(unsafe.Pointer(v74)) = *(*uint8)(unsafe.Pointer(v75)) + v76 = d + d++ + v77 = s + s++ + *(*uint8)(unsafe.Pointer(v76)) = *(*uint8)(unsafe.Pointer(v77)) + v78 = d + d++ + v79 = s + s++ + *(*uint8)(unsafe.Pointer(v78)) = *(*uint8)(unsafe.Pointer(v79)) + } + if n&uint64(2) != 0 { + v80 = d + d++ + v81 = s + s++ + *(*uint8)(unsafe.Pointer(v80)) = *(*uint8)(unsafe.Pointer(v81)) + v82 = d + d++ + v83 = s + s++ + *(*uint8)(unsafe.Pointer(v82)) = *(*uint8)(unsafe.Pointer(v83)) + } + if n&uint64(1) != 0 { + *(*uint8)(unsafe.Pointer(d)) = *(*uint8)(unsafe.Pointer(s)) + } + return dest + for { + if !(n != 0) { + break + } + v85 = d + d++ + v86 = s + s++ + *(*uint8)(unsafe.Pointer(v85)) = *(*uint8)(unsafe.Pointer(v86)) + goto _84 + _84: + ; + n-- + } + return dest +} + +func _twobyte_memmem(tls *TLS, h uintptr, k Tsize_t, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Search loop */ + for { + /* If remainder of haystack is shorter than needle, done */ + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(k < l && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if k < l { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xmemmem(tls *TLS, h0 uintptr, k Tsize_t, n0 uintptr, l Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h0=%v k=%v n0=%v l=%v, (%v:)", tls, h0, k, n0, l, origin(2)) + defer func() { trc("-> %v", r) }() + } + var h, n uintptr + _, _ = h, n + h = h0 + n = n0 + /* Return immediately on empty needle */ + if !(l != 0) { + return h + } + /* Return immediately when needle is longer than haystack */ + if k < l { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xmemchr(tls, h0, int32(*(*uint8)(unsafe.Pointer(n))), k) + if !(h != 0) || l == uint64(1) { + return h + } + k -= uint64(int64(h) - int64(h0)) + if k < l { + return uintptr(0) + } + if l == uint64(2) { + return _twobyte_memmem(tls, h, k, n) + } + if l == uint64(3) { + return _threebyte_memmem(tls, h, k, n) + } + if l == uint64(4) { + return _fourbyte_memmem(tls, h, k, n) + } + return _twoway_memmem(tls, h, h+uintptr(k), n, l) +} + +const WS = 0 + +type TWT = uint64 + +func Xmemmove(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d, s, v2, v3, v6, v7 uintptr + var v1, v8 Tsize_t + _, _, _, _, _, _, _, _ = d, s, v1, v2, v3, v6, v7, v8 + d = dest + s = src + if d == s { + return d + } + if uint64(s)-uint64(d)-n <= uint64(-Int32FromInt32(2))*n { + return Xmemcpy(tls, d, s, n) + } + if d < s { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d)%Uint64FromInt64(8) != 0 { + v1 = n + n-- + if !(v1 != 0) { + return dest + } + v2 = d + d++ + v3 = s + s++ + *(*uint8)(unsafe.Pointer(v2)) = *(*uint8)(unsafe.Pointer(v3)) + } + for { + if !(n >= Uint64FromInt64(8)) { + break + } + *(*TWT)(unsafe.Pointer(d)) = *(*TWT)(unsafe.Pointer(s)) + goto _4 + _4: + ; + n -= Uint64FromInt64(8) + d += uintptr(Uint64FromInt64(8)) + s += uintptr(Uint64FromInt64(8)) + } + } + for { + if !(n != 0) { + break + } + v6 = d + d++ + v7 = s + s++ + *(*uint8)(unsafe.Pointer(v6)) = *(*uint8)(unsafe.Pointer(v7)) + goto _5 + _5: + ; + n-- + } + } else { + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for uint64(d+uintptr(n))%Uint64FromInt64(8) != 0 { + v8 = n + n-- + if !(v8 != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + for n >= Uint64FromInt64(8) { + n -= Uint64FromInt64(8) + *(*TWT)(unsafe.Pointer(d + uintptr(n))) = *(*TWT)(unsafe.Pointer(s + uintptr(n))) + } + } + for n != 0 { + n-- + *(*uint8)(unsafe.Pointer(d + uintptr(n))) = *(*uint8)(unsafe.Pointer(s + uintptr(n))) + } + } + return dest +} + +func Xmempcpy(tls *TLS, dest uintptr, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v n=%v, (%v:)", tls, dest, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xmemcpy(tls, dest, src, n) + uintptr(n) +} + +func X__memrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v1 Tsize_t + _, _ = s, v1 + s = m + c = int32(uint8(c)) + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + if int32(*(*uint8)(unsafe.Pointer(s + uintptr(n)))) == c { + return s + uintptr(n) + } + } + return uintptr(0) +} + +func Xmemrchr(tls *TLS, m uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v m=%v c=%v n=%v, (%v:)", tls, m, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, m, c, n) +} + +func Xmemset(tls *TLS, dest uintptr, c int32, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v c=%v n=%v, (%v:)", tls, dest, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c32 uint32 + var c64 uint64 + var k Tsize_t + var s uintptr + _, _, _, _ = c32, c64, k, s + s = dest + /* Fill head and tail with minimal branching. Each + * conditional ensures that all the subsequently used + * offsets are well-defined and in the dest region. */ + if !(n != 0) { + return dest + } + *(*uint8)(unsafe.Pointer(s)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(1)))) = uint8(c) + if n <= uint64(2) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 1)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + 2)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(2)))) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(3)))) = uint8(c) + if n <= uint64(6) { + return dest + } + *(*uint8)(unsafe.Pointer(s + 3)) = uint8(c) + *(*uint8)(unsafe.Pointer(s + uintptr(n-uint64(4)))) = uint8(c) + if n <= uint64(8) { + return dest + } + /* Advance pointer to align it at a 4-byte boundary, + * and truncate n to a multiple of 4. The previous code + * already took care of any head/tail that get cut off + * by the alignment. */ + k = -uint64(s) & uint64(3) + s += uintptr(k) + n -= k + n &= uint64(-Int32FromInt32(4)) + c32 = uint32(-Int32FromInt32(1)) / Uint32FromInt32(255) * uint32(uint8(c)) + /* In preparation to copy 32 bytes at a time, aligned on + * an 8-byte bounary, fill head/tail up to 28 bytes each. + * As in the initial byte-based head/tail fill, each + * conditional below ensures that the subsequent offsets + * are valid (e.g. !(n<=24) implies n>=28). */ + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(0))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(4))) = c32 + if n <= uint64(8) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(4))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(8))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(8))) = c32 + if n <= uint64(24) { + return dest + } + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(12))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(16))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(28))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(24))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(20))) = c32 + *(*uint32)(unsafe.Pointer(s + uintptr(n) - UintptrFromInt32(16))) = c32 + /* Align to a multiple of 8 so we can fill 64 bits at a time, + * and avoid writing the same bytes twice as much as is + * practical without introducing additional branching. */ + k = uint64(24) + uint64(s)&uint64(4) + s += uintptr(k) + n -= k + /* If this loop is reached, 28 tail bytes have already been + * filled, so any remainder when n drops below 32 can be + * safely ignored. */ + c64 = uint64(c32) | uint64(c32)<= uint64(32)) { + break + } + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(0))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(8))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(16))) = c64 + *(*uint64)(unsafe.Pointer(s + UintptrFromInt32(24))) = c64 + goto _1 + _1: + ; + n -= uint64(32) + s += uintptr(32) + } + return dest +} + +func Xrindex(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrrchr(tls, s, c) +} + +const ALIGN2 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws, v4, v5 uintptr + var v2, v7 uint8 + _, _, _, _, _, _ = wd, ws, v2, v4, v5, v7 + if uint64(s)%Uint64FromInt64(8) == uint64(d)%Uint64FromInt64(8) { + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + if !(v2 != 0) { + return d + } + goto _1 + _1: + ; + s++ + d++ + } + wd = d + ws = s + for { + if !!((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _3 + _3: + ; + v4 = wd + wd += 8 + v5 = ws + ws += 8 + *(*uint64)(unsafe.Pointer(v4)) = *(*uint64)(unsafe.Pointer(v5)) + } + d = wd + s = ws + } + for { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + if !(v7 != 0) { + break + } + goto _6 + _6: + ; + s++ + d++ + } + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpcpy(tls, d, s) +} + +const ALIGN3 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__stpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var wd, ws uintptr + var v2, v6 uint8 + var v3, v7 bool + _, _, _, _, _, _ = wd, ws, v2, v3, v6, v7 + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v3 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v3 { + v2 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + n-- + s++ + d++ + } + if !(n != 0) || !(*(*uint8)(unsafe.Pointer(s)) != 0) { + goto tail + } + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*uint64)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _4 + _4: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + for { + if v7 = n != 0; v7 { + v6 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v6 + } + if !(v7 && v6 != 0) { + break + } + goto _5 + _5: + ; + n-- + s++ + d++ + } + goto tail +tail: + ; + Xmemset(tls, d, 0, n) + return d +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__stpncpy(tls, d, s, n) +} + +func Xstrcasecmp(tls *TLS, _l uintptr, _r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v, (%v:)", tls, _l, _r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + _, _ = l, r + l = _l + r = _r + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrcasecmp(tls, l, r) +} + +func Xstrcasecmp_l(tls *TLS, l uintptr, r uintptr, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v loc=%v, (%v:)", tls, l, r, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strcasecmp_l(tls, l, r, loc) +} + +func Xstrcasestr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrlen(tls, n) + for { + if !(*(*uint8)(unsafe.Pointer(h)) != 0) { + break + } + if !(Xstrncasecmp(tls, h, n, l) != 0) { + return h + } + goto _1 + _1: + ; + h++ + } + return uintptr(0) +} + +func Xstrcat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xstrcpy(tls, dest+uintptr(Xstrlen(tls, dest)), src) + return dest +} + +func Xstrchr(tls *TLS, s uintptr, c int32) (r1 uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 uintptr + _, _ = r, v1 + r = X__strchrnul(tls, s, c) + if int32(*(*uint8)(unsafe.Pointer(r))) == int32(uint8(c)) { + v1 = r + } else { + v1 = uintptr(0) + } + return v1 +} + +const ALIGN4 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__strchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var k Tsize_t + var w uintptr + _, _ = k, w + c = int32(uint8(c)) + if !(c != 0) { + return s + uintptr(Xstrlen(tls, s)) + } + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { + return s + } + goto _1 + _1: + ; + s++ + } + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(UCHAR_MAX) * uint64(c) + w = s + for { + if !(!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c) { + break + } + goto _3 + _3: + ; + s++ + } + return s +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strchrnul(tls, s, c) +} + +func Xstrcmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) && *(*uint8)(unsafe.Pointer(l)) != 0) { + break + } + goto _1 + _1: + ; + l++ + r++ + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrcpy(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpcpy(tls, dest, src) + return dest +} + +func Xstrcspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p2 uintptr + var v3 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v3, p2 + a = s + if !(*(*uint8)(unsafe.Pointer(c)) != 0) || !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + return uint64(int64(X__strchrnul(tls, s, int32(*(*uint8)(unsafe.Pointer(c))))) - int64(a)) + } + Xmemset(tls, bp, 0, uint64(32)) + for { + if v3 = *(*uint8)(unsafe.Pointer(c)) != 0; v3 { + p2 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p2)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v3 && *(*Tsize_t)(unsafe.Pointer(p2)) != 0) { + break + } + goto _1 + _1: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && !((*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0)) { + break + } + goto _4 + _4: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrlen(tls, s) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xmemcpy(tls, d, s, l+uint64(1)) +} + +func Xstrerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var msg uintptr + _, _ = l, msg + msg = Xstrerror(tls, err) + l = Xstrlen(tls, msg) + if l >= buflen { + if buflen != 0 { + Xmemcpy(tls, buf, msg, buflen-uint64(1)) + *(*uint8)(unsafe.Pointer(buf + uintptr(buflen-uint64(1)))) = uint8(0) + } + return int32(ERANGE) + } + Xmemcpy(tls, buf, msg, l+uint64(1)) + return 0 +} + +func X__xpg_strerror_r(tls *TLS, err int32, buf uintptr, buflen Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v err=%v buf=%v buflen=%v, (%v:)", tls, err, buf, buflen, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xstrerror_r(tls, err, buf, buflen) +} + +func Xstrlcat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + _ = l + l = Xstrnlen(tls, d, n) + if l == n { + return l + Xstrlen(tls, s) + } + return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) +} + +const ALIGN5 = -1 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, wd, ws uintptr + var v1 Tsize_t + var v3, v7 uint8 + var v4, v8 bool + _, _, _, _, _, _, _, _ = d0, wd, ws, v1, v3, v4, v7, v8 + d0 = d + v1 = n + n-- + if !(v1 != 0) { + goto finish + } + if uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) == uint64(d)&(Uint64FromInt64(8)-Uint64FromInt32(1)) { + for { + if v4 = uint64(s)&(Uint64FromInt64(8)-Uint64FromInt32(1)) != 0 && n != 0; v4 { + v3 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v3 + } + if !(v4 && v3 != 0) { + break + } + goto _2 + _2: + ; + n-- + s++ + d++ + } + if n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + wd = d + ws = s + for { + if !(n >= uint64(8) && !((*(*uint64)(unsafe.Pointer(ws))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(ws)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { + break + } + *(*Tsize_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) + goto _5 + _5: + ; + n -= uint64(8) + ws += 8 + wd += 8 + } + d = wd + s = ws + } + } + for { + if v8 = n != 0; v8 { + v7 = *(*uint8)(unsafe.Pointer(s)) + *(*uint8)(unsafe.Pointer(d)) = v7 + } + if !(v8 && v7 != 0) { + break + } + goto _6 + _6: + ; + n-- + s++ + d++ + } + *(*uint8)(unsafe.Pointer(d)) = uint8(0) + goto finish +finish: + ; + return uint64(int64(d)-int64(d0)) + Xstrlen(tls, s) + return r +} + +const ALIGN6 = 0 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xstrlen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, w uintptr + _, _ = a, w + a = s + for { + if !(uint64(s)%Uint64FromInt64(8) != 0) { + break + } + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + return uint64(int64(s) - int64(a)) + } + goto _1 + _1: + ; + s++ + } + w = s + for { + if !!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(UCHAR_MAX)*uint64(Int32FromInt32(UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) { + break + } + goto _2 + _2: + ; + w += 8 + } + s = w + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} + +func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xstrncasecmp(tls, l, r, n) +} + +func Xstrncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, loc Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__strncasecmp_l(tls, l, r, n, loc) +} + +func Xstrncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xstrlen(tls, d)) + for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d++ + v2 = s + s++ + *(*uint8)(unsafe.Pointer(v1)) = *(*uint8)(unsafe.Pointer(v2)) + } + v3 = d + d++ + *(*uint8)(unsafe.Pointer(v3)) = uint8(0) + return a +} + +func Xstrncmp(tls *TLS, _l uintptr, _r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var l, r uintptr + var v1 Tsize_t + _, _, _ = l, r, v1 + l = _l + r = _r + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r)))) { + break + } + goto _2 + _2: + ; + l++ + r++ + n-- + } + return int32(*(*uint8)(unsafe.Pointer(l))) - int32(*(*uint8)(unsafe.Pointer(r))) +} + +func Xstrncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + X__stpncpy(tls, d, s, n) + return d +} + +func Xstrndup(tls *TLS, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xstrnlen(tls, s, n) + d = Xmalloc(tls, l+uint64(1)) + if !(d != 0) { + return UintptrFromInt32(0) + } + Xmemcpy(tls, d, s, l) + *(*uint8)(unsafe.Pointer(d + uintptr(l))) = uint8(0) + return d +} + +func Xstrnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + var v1 uint64 + _, _ = p, v1 + p = Xmemchr(tls, s, 0, n) + if p != 0 { + v1 = uint64(int64(p) - int64(s)) + } else { + v1 = n + } + return v1 +} + +func Xstrpbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xstrcspn(tls, s, b)) + if *(*uint8)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xstrrchr(tls *TLS, s uintptr, c int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__memrchr(tls, s, c, Xstrlen(tls, s)+uint64(1)) +} + +func Xstrsep(tls *TLS, str uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v str=%v sep=%v, (%v:)", tls, str, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var end, s, v1 uintptr + _, _, _ = end, s, v1 + s = *(*uintptr)(unsafe.Pointer(str)) + if !(s != 0) { + return UintptrFromInt32(0) + } + end = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(end)) != 0 { + v1 = end + end++ + *(*uint8)(unsafe.Pointer(v1)) = uint8(0) + } else { + end = uintptr(0) + } + *(*uintptr)(unsafe.Pointer(str)) = end + return s +} + +var _strings = [671]uint8{'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', 0, 'H', 'a', 'n', 'g', 'u', 'p', 0, 'I', 'n', 't', 'e', 'r', 'r', 'u', 'p', 't', 0, 'Q', 'u', 'i', 't', 0, 'I', 'l', 'l', 'e', 'g', 'a', 'l', ' ', 'i', 'n', 's', 't', 'r', 'u', 'c', 't', 'i', 'o', 'n', 0, 'T', 'r', 'a', 'c', 'e', '/', 'b', 'r', 'e', 'a', 'k', 'p', 'o', 'i', 'n', 't', ' ', 't', 'r', 'a', 'p', 0, 'A', 'b', 'o', 'r', 't', 'e', 'd', 0, 'B', 'u', 's', ' ', 'e', 'r', 'r', 'o', 'r', 0, 'A', 'r', 'i', 't', 'h', 'm', 'e', 't', 'i', 'c', ' ', 'e', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n', 0, 'K', 'i', 'l', 'l', 'e', 'd', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '1', 0, 'S', 'e', 'g', 'm', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', ' ', 'f', 'a', 'u', 'l', 't', 0, 'U', 's', 'e', 'r', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'd', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' ', '2', 0, 'B', 'r', 'o', 'k', 'e', 'n', ' ', 'p', 'i', 'p', 'e', 0, 'A', 'l', 'a', 'r', 'm', ' ', 'c', 'l', 'o', 'c', 'k', 0, 'T', 'e', 'r', 'm', 'i', 'n', 'a', 't', 'e', 'd', 0, 'S', 't', 'a', 'c', 'k', ' ', 'f', 'a', 'u', 'l', 't', 0, 'C', 'h', 'i', 'l', 'd', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 't', 'u', 's', 0, 'C', 'o', 'n', 't', 'i', 'n', 'u', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 's', 'i', 'g', 'n', 'a', 'l', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'i', 'n', 'p', 'u', 't', ')', 0, 'S', 't', 'o', 'p', 'p', 'e', 'd', ' ', '(', 't', 't', 'y', ' ', 'o', 'u', 't', 'p', 'u', 't', ')', 0, 'U', 'r', 'g', 'e', 'n', 't', ' ', 'I', '/', 'O', ' ', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', 0, 'C', 'P', 'U', ' ', 't', 'i', 'm', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'F', 'i', 'l', 'e', ' ', 's', 'i', 'z', 'e', ' ', 'l', 'i', 'm', 'i', 't', ' ', 'e', 'x', 'c', 'e', 'e', 'd', 'e', 'd', 0, 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'P', 'r', 'o', 'f', 'i', 'l', 'i', 'n', 'g', ' ', 't', 'i', 'm', 'e', 'r', ' ', 'e', 'x', 'p', 'i', 'r', 'e', 'd', 0, 'W', 'i', 'n', 'd', 'o', 'w', ' ', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 0, 'I', '/', 'O', ' ', 'p', 'o', 's', 's', 'i', 'b', 'l', 'e', 0, 'P', 'o', 'w', 'e', 'r', ' ', 'f', 'a', 'i', 'l', 'u', 'r', 'e', 0, 'B', 'a', 'd', ' ', 's', 'y', 's', 't', 'e', 'm', ' ', 'c', 'a', 'l', 'l', 0, 'R', 'T', '3', '2', 0, 'R', 'T', '3', '3', 0, 'R', 'T', '3', '4', 0, 'R', 'T', '3', '5', 0, 'R', 'T', '3', '6', 0, 'R', 'T', '3', '7', 0, 'R', 'T', '3', '8', 0, 'R', 'T', '3', '9', 0, 'R', 'T', '4', '0', 0, 'R', 'T', '4', '1', 0, 'R', 'T', '4', '2', 0, 'R', 'T', '4', '3', 0, 'R', 'T', '4', '4', 0, 'R', 'T', '4', '5', 0, 'R', 'T', '4', '6', 0, 'R', 'T', '4', '7', 0, 'R', 'T', '4', '8', 0, 'R', 'T', '4', '9', 0, 'R', 'T', '5', '0', 0, 'R', 'T', '5', '1', 0, 'R', 'T', '5', '2', 0, 'R', 'T', '5', '3', 0, 'R', 'T', '5', '4', 0, 'R', 'T', '5', '5', 0, 'R', 'T', '5', '6', 0, 'R', 'T', '5', '7', 0, 'R', 'T', '5', '8', 0, 'R', 'T', '5', '9', 0, 'R', 'T', '6', '0', 0, 'R', 'T', '6', '1', 0, 'R', 'T', '6', '2', 0, 'R', 'T', '6', '3', 0, 'R', 'T', '6', '4'} + +func Xstrsignal(tls *TLS, signum int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v signum=%v, (%v:)", tls, signum, origin(2)) + defer func() { trc("-> %v", r) }() + } + var s uintptr + var v2 int32 + _, _ = s, v2 + s = uintptr(unsafe.Pointer(&_strings)) + signum = signum + if uint32(signum)-uint32(1) >= uint32(Int32FromInt32(_NSIG)-Int32FromInt32(1)) { + signum = 0 + } + for { + v2 = signum + signum-- + if !(v2 != 0) { + break + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + break + } + goto _3 + _3: + ; + s++ + } + goto _1 + _1: + ; + s++ + } + return X__lctrans_cur(tls, s) +} + +func Xstrspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var a, p3 uintptr + var v4 bool + var _ /* byteset at bp+0 */ [4]Tsize_t + _, _, _ = a, v4, p3 + a = s + *(*[4]Tsize_t)(unsafe.Pointer(bp)) = [4]Tsize_t{} + if !(*(*uint8)(unsafe.Pointer(c)) != 0) { + return uint64(0) + } + if !(*(*uint8)(unsafe.Pointer(c + 1)) != 0) { + for { + if !(int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c)))) { + break + } + goto _1 + _1: + ; + s++ + } + return uint64(int64(s) - int64(a)) + } + for { + if v4 = *(*uint8)(unsafe.Pointer(c)) != 0; v4 { + p3 = bp + uintptr(uint64(*(*uint8)(unsafe.Pointer(c)))/(Uint64FromInt32(8)*Uint64FromInt64(8)))*8 + *(*Tsize_t)(unsafe.Pointer(p3)) |= Uint64FromInt32(1) << (uint64(*(*uint8)(unsafe.Pointer(c))) % (Uint64FromInt32(8) * Uint64FromInt64(8))) + } + if !(v4 && *(*Tsize_t)(unsafe.Pointer(p3)) != 0) { + break + } + goto _2 + _2: + ; + c++ + } + for { + if !(*(*uint8)(unsafe.Pointer(s)) != 0 && (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(s)))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(s)))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0) { + break + } + goto _5 + _5: + ; + s++ + } + return uint64(int64(s) - int64(a)) +} + +func _twobyte_strstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var hw, nw Tuint16_t + var v2, v3 uintptr + _, _, _, _ = hw, nw, v2, v3 + nw = uint16(int32(*(*uint8)(unsafe.Pointer(n)))< int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) == int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(n + uintptr(ip+k)))) < int32(*(*uint8)(unsafe.Pointer(n + uintptr(jp+k)))) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xmemcmp(tls, n, n+uintptr(p), ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64(int64(z)-int64(h)) < l { + /* Fast estimate for MAX(l,63) */ + grow = l | uint64(63) + z2 = Xmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64(int64(z)-int64(h)) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) + } + } + /* Check last byte first; advance by shift on mismatch */ + if (*(*[4]Tsize_t)(unsafe.Pointer(bp)))[uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))/(Uint64FromInt32(8)*Uint64FromInt64(8))]&(Uint64FromInt32(1)<<(uint64(*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1)))))%(Uint64FromInt32(8)*Uint64FromInt64(8)))) != 0 { + k = l - shift[*(*uint8)(unsafe.Pointer(h + uintptr(l-uint64(1))))] + if k != 0 { + if k < mem { + k = mem + } + h += uintptr(k) + mem = uint64(0) + goto _9 + } + } else { + h += uintptr(l) + mem = uint64(0) + goto _9 + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k)))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k))))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*uint8)(unsafe.Pointer(n + uintptr(k))) != 0 { + h += uintptr(k - ms) + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && int32(*(*uint8)(unsafe.Pointer(n + uintptr(k-uint64(1))))) == int32(*(*uint8)(unsafe.Pointer(h + uintptr(k-uint64(1)))))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xstrstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle */ + if !(*(*uint8)(unsafe.Pointer(n)) != 0) { + return h + } + /* Use faster algorithms for short needles */ + h = Xstrchr(tls, h, int32(*(*uint8)(unsafe.Pointer(n)))) + if !(h != 0) || !(*(*uint8)(unsafe.Pointer(n + 1)) != 0) { + return h + } + if !(*(*uint8)(unsafe.Pointer(h + 1)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 2)) != 0) { + return _twobyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 2)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 3)) != 0) { + return _threebyte_strstr(tls, h, n) + } + if !(*(*uint8)(unsafe.Pointer(h + 3)) != 0) { + return uintptr(0) + } + if !(*(*uint8)(unsafe.Pointer(n + 4)) != 0) { + return _fourbyte_strstr(tls, h, n) + } + return _twoway_strstr(tls, h, n) +} + +func Xstrtok(tls *TLS, s uintptr, sep uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4 uintptr + var v2 bool + _, _, _, _ = v1, v2, v3, v4 + if v2 = !(s != 0); v2 { + v1 = _p2 + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + _p2 = v3 + return v3 + } + _p2 = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(_p2)) != 0 { + v4 = _p2 + _p2++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + _p2 = uintptr(0) + } + return s +} + +var _p2 uintptr + +func Xstrtok_r(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xstrspn(tls, s, sep)) + if !(*(*uint8)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xstrcspn(tls, s, sep)) + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5))++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(0) + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xstrverscmp(tls *TLS, l0 uintptr, r0 uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l0=%v r0=%v, (%v:)", tls, l0, r0, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var c, z int32 + var dp, i, j, v2 Tsize_t + var l, r uintptr + _, _, _, _, _, _, _, _ = c, dp, i, j, l, r, z, v2 + l = l0 + r = r0 + z = int32(1) + /* Find maximal matching prefix and track its maximal digit + * suffix and whether those digits are all zeros. */ + v2 = Uint64FromInt32(0) + i = v2 + dp = v2 + for { + if !(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))) { + break + } + c = int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) + if !(c != 0) { + return 0 + } + if !(BoolInt32(uint32(c)-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + dp = i + uint64(1) + z = Int32FromInt32(1) + } else { + if c != int32('0') { + z = 0 + } + } + goto _1 + _1: + ; + i++ + } + if uint32(int32(*(*uint8)(unsafe.Pointer(l + uintptr(dp))))-int32('1')) < uint32(9) && uint32(int32(*(*uint8)(unsafe.Pointer(r + uintptr(dp))))-int32('1')) < uint32(9) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ + j = i + for { + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(j))))-uint32('0') < uint32(10)) != 0) { + break + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return int32(1) + } + goto _3 + _3: + ; + j++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(j))))-uint32('0') < uint32(10)) != 0 { + return -int32(1) + } + } else { + if z != 0 && dp < i && (BoolInt32(uint32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-uint32('0') < uint32(10)) != 0 || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-uint32('0') < uint32(10)) != 0) { + /* Otherwise, if common prefix of digit sequence is + * all zeros, digits order less than non-digits. */ + return int32(uint8(int32(*(*uint8)(unsafe.Pointer(l + uintptr(i))))-Int32FromUint8('0'))) - int32(uint8(int32(*(*uint8)(unsafe.Pointer(r + uintptr(i))))-Int32FromUint8('0'))) + } + } + return int32(*(*uint8)(unsafe.Pointer(l + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(r + uintptr(i)))) +} + +func Xswab(tls *TLS, _src uintptr, _dest uintptr, n Tssize_t) { + if __ccgo_strace { + trc("tls=%v _src=%v _dest=%v n=%v, (%v:)", tls, _src, _dest, n, origin(2)) + } + var dest, src uintptr + _, _ = dest, src + src = _src + dest = _dest + for { + if !(n > int64(1)) { + break + } + *(*uint8)(unsafe.Pointer(dest)) = *(*uint8)(unsafe.Pointer(src + 1)) + *(*uint8)(unsafe.Pointer(dest + 1)) = *(*uint8)(unsafe.Pointer(src)) + dest += uintptr(2) + src += uintptr(2) + goto _1 + _1: + ; + n -= int64(2) + } +} + +func Xwcpcpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcscpy(tls, d, s) + uintptr(Xwcslen(tls, s))*4 +} + +func Xwcpncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsncpy(tls, d, s, n) + uintptr(Xwcsnlen(tls, s, n))*4 +} + +func Xwcscasecmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, uint64(-Int32FromInt32(1))) +} + +func Xwcscasecmp_l(tls *TLS, l uintptr, r uintptr, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v locale=%v, (%v:)", tls, l, r, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcscasecmp(tls, l, r) +} + +func Xwcscat(tls *TLS, dest uintptr, src uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v dest=%v src=%v, (%v:)", tls, dest, src, origin(2)) + defer func() { trc("-> %v", r) }() + } + Xwcscpy(tls, dest+uintptr(Xwcslen(tls, dest))*4, src) + return dest +} + +func Xwcschr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + if !(c != 0) { + return s + uintptr(Xwcslen(tls, s))*4 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + s += 4 + } + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcscmp(tls *TLS, l uintptr, r uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v, (%v:)", tls, l, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2 int32 + _ = v2 + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + l += 4 + r += 4 + } + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v2 = -int32(1) + } else { + v2 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + return v2 +} + +func Xwcscpy(tls *TLS, d uintptr, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v, (%v:)", tls, d, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Twchar_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v2 = s + s += 4 + v1 = *(*Twchar_t)(unsafe.Pointer(v2)) + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = v1 + if !(v1 != 0) { + break + } + } + return a +} + +func Xwcscspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 uint64 + _, _, _, _ = a, v1, v2, v3 + if !(*(*Twchar_t)(unsafe.Pointer(c)) != 0) { + return Xwcslen(tls, s) + } + if !(*(*Twchar_t)(unsafe.Pointer(c + 1*4)) != 0) { + v3 = s + a = v3 + v2 = Xwcschr(tls, v3, *(*Twchar_t)(unsafe.Pointer(c))) + s = v2 + if v2 != 0 { + v1 = uint64((int64(s) - int64(a)) / 4) + } else { + v1 = Xwcslen(tls, a) + } + return v1 + } + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && !(Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0)) { + break + } + goto _4 + _4: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsdup(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d uintptr + var l Tsize_t + _, _ = d, l + l = Xwcslen(tls, s) + d = Xmalloc(tls, (l+uint64(1))*uint64(4)) + if !(d != 0) { + return UintptrFromInt32(0) + } + return Xwmemcpy(tls, d, s, l+uint64(1)) +} + +func Xwcslen(tls *TLS, s uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func Xwcsncasecmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v1 Tsize_t + _ = v1 + v1 = n + n-- + if !(v1 != 0) { + return 0 + } + for { + if !(*(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0 && n != 0 && (*(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) || Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) == Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r)))))) { + break + } + goto _2 + _2: + ; + l += 4 + r += 4 + n-- + } + return int32(Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(l)))) - Xtowlower(tls, uint32(*(*Twchar_t)(unsafe.Pointer(r))))) +} + +func Xwcsncasecmp_l(tls *TLS, l uintptr, r uintptr, n Tsize_t, locale Tlocale_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v locale=%v, (%v:)", tls, l, r, n, locale, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return Xwcsncasecmp(tls, l, r, n) +} + +func Xwcsncat(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2, v3 uintptr + _, _, _, _ = a, v1, v2, v3 + a = d + d += uintptr(Xwcslen(tls, d)) * 4 + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + v3 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = 0 + return a +} + +func Xwcsncmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r)) && *(*Twchar_t)(unsafe.Pointer(l)) != 0 && *(*Twchar_t)(unsafe.Pointer(r)) != 0) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwcsncpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v1, v2 uintptr + _, _, _ = a, v1, v2 + a = d + for n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + n-- + v1 = d + d += 4 + v2 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v1)) = *(*Twchar_t)(unsafe.Pointer(v2)) + } + Xwmemset(tls, d, 0, n) + return a +} + +func Xwcsnlen(tls *TLS, s uintptr, n Tsize_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var z uintptr + _ = z + z = Xwmemchr(tls, s, 0, n) + if z != 0 { + n = uint64((int64(z) - int64(s)) / 4) + } + return n +} + +func Xwcspbrk(tls *TLS, s uintptr, b uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v b=%v, (%v:)", tls, s, b, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + s += uintptr(Xwcscspn(tls, s, b)) * 4 + if *(*Twchar_t)(unsafe.Pointer(s)) != 0 { + v1 = s + } else { + v1 = UintptrFromInt32(0) + } + return v1 +} + +func Xwcsrchr(tls *TLS, s uintptr, c Twchar_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p, v2 uintptr + _, _ = p, v2 + p = s + uintptr(Xwcslen(tls, s))*4 + for { + if !(p >= s && *(*Twchar_t)(unsafe.Pointer(p)) != c) { + break + } + goto _1 + _1: + ; + p -= 4 + } + if p >= s { + v2 = p + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwcsspn(tls *TLS, s uintptr, c uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a uintptr + _ = a + a = s + for { + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0 && Xwcschr(tls, c, *(*Twchar_t)(unsafe.Pointer(s))) != 0) { + break + } + goto _1 + _1: + ; + s += 4 + } + return uint64((int64(s) - int64(a)) / 4) +} + +func _twoway_wcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + var grow, ip, jp, k, l, mem, mem0, ms, p, p0, v2, v3, v4, v5, v6, v7 Tsize_t + var z, z2 uintptr + var v11, v8 uint64 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = grow, ip, jp, k, l, mem, mem0, ms, p, p0, z, z2, v11, v2, v3, v4, v5, v6, v7, v8 + /* Computing length of needle */ + l = uint64(0) + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(h + uintptr(l)*4)) != 0) { + break + } + goto _1 + _1: + ; + l++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(l)*4)) != 0 { + return uintptr(0) + } /* hit the end of h */ + /* Compute maximal suffix */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v2 = Uint64FromInt32(1) + p = v2 + k = v2 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) > *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v3 = jp + jp++ + ip = v3 + v4 = Uint64FromInt32(1) + p = v4 + k = v4 + } + } + } + ms = ip + p0 = p + /* And with the opposite comparison */ + ip = uint64(-Int32FromInt32(1)) + jp = uint64(0) + v5 = Uint64FromInt32(1) + p = v5 + k = v5 + for jp+k < l { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) == *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + if k == p { + jp += p + k = uint64(1) + } else { + k++ + } + } else { + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(ip+k)*4)) < *(*Twchar_t)(unsafe.Pointer(n + uintptr(jp+k)*4)) { + jp += k + k = uint64(1) + p = jp - ip + } else { + v6 = jp + jp++ + ip = v6 + v7 = Uint64FromInt32(1) + p = v7 + k = v7 + } + } + } + if ip+uint64(1) > ms+uint64(1) { + ms = ip + } else { + p = p0 + } + /* Periodic needle? */ + if Xwmemcmp(tls, n, n+uintptr(p)*4, ms+uint64(1)) != 0 { + mem0 = uint64(0) + if ms > l-ms-uint64(1) { + v8 = ms + } else { + v8 = l - ms - uint64(1) + } + p = v8 + uint64(1) + } else { + mem0 = l - p + } + mem = uint64(0) + /* Initialize incremental end-of-haystack pointer */ + z = h + /* Search loop */ + for { + /* Update incremental end-of-haystack pointer */ + if uint64((int64(z)-int64(h))/4) < l { + /* Fast estimate for MIN(l,63) */ + grow = l | uint64(63) + z2 = Xwmemchr(tls, z, 0, grow) + if z2 != 0 { + z = z2 + if uint64((int64(z)-int64(h))/4) < l { + return uintptr(0) + } + } else { + z += uintptr(grow) * 4 + } + } + /* Compare right half */ + if ms+uint64(1) > mem { + v11 = ms + uint64(1) + } else { + v11 = mem + } + k = v11 + for { + if !(*(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k)*4))) { + break + } + goto _10 + _10: + ; + k++ + } + if *(*Twchar_t)(unsafe.Pointer(n + uintptr(k)*4)) != 0 { + h += uintptr(k-ms) * 4 + mem = uint64(0) + goto _9 + } + /* Compare left half */ + k = ms + uint64(1) + for { + if !(k > mem && *(*Twchar_t)(unsafe.Pointer(n + uintptr(k-uint64(1))*4)) == *(*Twchar_t)(unsafe.Pointer(h + uintptr(k-uint64(1))*4))) { + break + } + goto _12 + _12: + ; + k-- + } + if k <= mem { + return h + } + h += uintptr(p) * 4 + mem = mem0 + goto _9 + _9: + } + return r +} + +func Xwcsstr(tls *TLS, h uintptr, n uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v h=%v n=%v, (%v:)", tls, h, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Return immediately on empty needle or haystack */ + if !(*(*Twchar_t)(unsafe.Pointer(n)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h)) != 0) { + return uintptr(0) + } + /* Use faster algorithms for short needles */ + h = Xwcschr(tls, h, *(*Twchar_t)(unsafe.Pointer(n))) + if !(h != 0) || !(*(*Twchar_t)(unsafe.Pointer(n + 1*4)) != 0) { + return h + } + if !(*(*Twchar_t)(unsafe.Pointer(h + 1*4)) != 0) { + return uintptr(0) + } + return _twoway_wcsstr(tls, h, n) +} + +func Xwcstok(tls *TLS, s uintptr, sep uintptr, p uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v sep=%v p=%v, (%v:)", tls, s, sep, p, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1, v3, v4, v5 uintptr + var v2 bool + _, _, _, _, _ = v1, v2, v3, v4, v5 + if v2 = !(s != 0); v2 { + v1 = *(*uintptr)(unsafe.Pointer(p)) + s = v1 + } + if v2 && !(v1 != 0) { + return UintptrFromInt32(0) + } + s += uintptr(Xwcsspn(tls, s, sep)) * 4 + if !(*(*Twchar_t)(unsafe.Pointer(s)) != 0) { + v3 = UintptrFromInt32(0) + *(*uintptr)(unsafe.Pointer(p)) = v3 + return v3 + } + *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(Xwcscspn(tls, s, sep))*4 + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))) != 0 { + v5 = p + v4 = *(*uintptr)(unsafe.Pointer(v5)) + *(*uintptr)(unsafe.Pointer(v5)) += 4 + *(*Twchar_t)(unsafe.Pointer(v4)) = 0 + } else { + *(*uintptr)(unsafe.Pointer(p)) = uintptr(0) + } + return s +} + +func Xwcswcs(tls *TLS, haystack uintptr, needle uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v haystack=%v needle=%v, (%v:)", tls, haystack, needle, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xwcsstr(tls, haystack, needle) +} + +func Xwmemchr(tls *TLS, s uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v c=%v n=%v, (%v:)", tls, s, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v2 uintptr + _ = v2 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(s)) != c) { + break + } + goto _1 + _1: + ; + n-- + s += 4 + } + if n != 0 { + v2 = s + } else { + v2 = uintptr(0) + } + return v2 +} + +func Xwmemcmp(tls *TLS, l uintptr, r uintptr, n Tsize_t) (r1 int32) { + if __ccgo_strace { + trc("tls=%v l=%v r=%v n=%v, (%v:)", tls, l, r, n, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var v2, v3 int32 + _, _ = v2, v3 + for { + if !(n != 0 && *(*Twchar_t)(unsafe.Pointer(l)) == *(*Twchar_t)(unsafe.Pointer(r))) { + break + } + goto _1 + _1: + ; + n-- + l += 4 + r += 4 + } + if n != 0 { + if *(*Twchar_t)(unsafe.Pointer(l)) < *(*Twchar_t)(unsafe.Pointer(r)) { + v3 = -int32(1) + } else { + v3 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(l)) > *(*Twchar_t)(unsafe.Pointer(r))) + } + v2 = v3 + } else { + v2 = 0 + } + return v2 +} + +func Xwmemcpy(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var a, v2, v3 uintptr + var v1 Tsize_t + _, _, _, _ = a, v1, v2, v3 + a = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + v3 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = *(*Twchar_t)(unsafe.Pointer(v3)) + } + return a +} + +func Xwmemmove(tls *TLS, d uintptr, s uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var d0, v3, v4 uintptr + var v1, v2 Tsize_t + _, _, _, _, _ = d0, v1, v2, v3, v4 + d0 = d + if d == s { + return d + } + if uint64(d)-uint64(s) < n*uint64(4) { + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + *(*Twchar_t)(unsafe.Pointer(d + uintptr(n)*4)) = *(*Twchar_t)(unsafe.Pointer(s + uintptr(n)*4)) + } + } else { + for { + v2 = n + n-- + if !(v2 != 0) { + break + } + v3 = d + d += 4 + v4 = s + s += 4 + *(*Twchar_t)(unsafe.Pointer(v3)) = *(*Twchar_t)(unsafe.Pointer(v4)) + } + } + return d0 +} + +func Xwmemset(tls *TLS, d uintptr, c Twchar_t, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v d=%v c=%v n=%v, (%v:)", tls, d, c, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v2 uintptr + var v1 Tsize_t + _, _, _ = ret, v1, v2 + ret = d + for { + v1 = n + n-- + if !(v1 != 0) { + break + } + v2 = d + d += 4 + *(*Twchar_t)(unsafe.Pointer(v2)) = c + } + return ret +} + +func Xmkdtemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + var l Tsize_t + var retries, v1 int32 + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1760, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if !(Xmkdir(tls, template, uint32(0700)) != 0) { + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1760, uint64(6)) + return uintptr(0) +} + +func Xmkostemp(tls *TLS, template uintptr, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v flags=%v, (%v:)", tls, template, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, flags) +} + +func X__mkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var fd, retries, v1, v3 int32 + var l Tsize_t + _, _, _, _, _ = fd, l, retries, v1, v3 + l = Xstrlen(tls, template) + if l < uint64(6) || uint64(len1) > l-uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1760, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + flags -= flags & (Int32FromInt32(03) | Int32FromInt32(O_PATH)) + retries = int32(100) + for { + ___randname(tls, template+uintptr(l)-uintptr(len1)-uintptr(6)) + v3 = Xopen(tls, template, flags|int32(O_RDWR)|int32(O_CREAT)|int32(O_EXCL), VaList(bp+8, int32(0600))) + fd = v3 + if v3 >= 0 { + return fd + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0 && *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EEXIST)) { + break + } + } + Xmemcpy(tls, template+uintptr(l)-uintptr(len1)-uintptr(6), __ccgo_ts+1760, uint64(6)) + return -int32(1) +} + +func Xmkostemps(tls *TLS, template uintptr, len1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v flags=%v, (%v:)", tls, template, len1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, flags) +} + +func Xmkstemp(tls *TLS, template uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, 0, 0) +} + +func Xmkstemps(tls *TLS, template uintptr, len1 int32) (r int32) { + if __ccgo_strace { + trc("tls=%v template=%v len1=%v, (%v:)", tls, template, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__mkostemps(tls, template, len1, 0) +} + +func Xmktemp(tls *TLS, template uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v template=%v, (%v:)", tls, template, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var l Tsize_t + var retries, v1 int32 + var _ /* st at bp+0 */ Tstat + _, _, _ = l, retries, v1 + l = Xstrlen(tls, template) + retries = int32(100) + if l < uint64(6) || Xmemcmp(tls, template+uintptr(l)-uintptr(6), __ccgo_ts+1760, uint64(6)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + return template + } + for { + ___randname(tls, template+uintptr(l)-uintptr(6)) + if Xstat(tls, template, bp) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(ENOENT) { + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + } + return template + } + goto _2 + _2: + ; + retries-- + v1 = retries + if !(v1 != 0) { + break + } + } + *(*uint8)(unsafe.Pointer(template)) = uint8(0) + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EEXIST) + return template +} + +func Xcfgetospeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return (*Ttermios)(unsafe.Pointer(tio)).Fc_cflag & uint32(CBAUD) +} + +func Xcfgetispeed(tls *TLS, tio uintptr) (r Tspeed_t) { + if __ccgo_strace { + trc("tls=%v tio=%v, (%v:)", tls, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfgetospeed(tls, tio) +} + +func Xcfmakeraw(tls *TLS, t uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + } + *(*Ttcflag_t)(unsafe.Pointer(t)) &= uint32(^(Int32FromInt32(IGNBRK) | Int32FromInt32(BRKINT) | Int32FromInt32(PARMRK) | Int32FromInt32(ISTRIP) | Int32FromInt32(INLCR) | Int32FromInt32(IGNCR) | Int32FromInt32(ICRNL) | Int32FromInt32(IXON))) + *(*Ttcflag_t)(unsafe.Pointer(t + 4)) &= uint32(^Int32FromInt32(OPOST)) + *(*Ttcflag_t)(unsafe.Pointer(t + 12)) &= uint32(^(Int32FromInt32(ECHO) | Int32FromInt32(ECHONL) | Int32FromInt32(ICANON) | Int32FromInt32(ISIG) | Int32FromInt32(IEXTEN))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) &= uint32(^(Int32FromInt32(CSIZE) | Int32FromInt32(PARENB))) + *(*Ttcflag_t)(unsafe.Pointer(t + 8)) |= uint32(CS8) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 6)) = uint8(1) + *(*Tcc_t)(unsafe.Pointer(t + 17 + 5)) = uint8(0) +} + +func Xcfsetospeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + if speed&uint32(^Int32FromInt32(CBAUD)) != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) &= uint32(^Int32FromInt32(CBAUD)) + *(*Ttcflag_t)(unsafe.Pointer(tio + 8)) |= speed + return 0 +} + +func Xcfsetispeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 int32 + _ = v1 + if speed != 0 { + v1 = Xcfsetospeed(tls, tio, speed) + } else { + v1 = 0 + } + return v1 +} + +func Xcfsetspeed(tls *TLS, tio uintptr, speed Tspeed_t) (r int32) { + if __ccgo_strace { + trc("tls=%v tio=%v speed=%v, (%v:)", tls, tio, speed, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xcfsetospeed(tls, tio, speed) +} + +func Xtcdrain(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TCSBRK)), int64(Int32FromInt32(1)), 0, 0, 0)))) +} + +func Xtcflow(tls *TLS, fd int32, action int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v action=%v, (%v:)", tls, fd, action, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCXONC), VaList(bp+8, action)) +} + +func Xtcflush(tls *TLS, fd int32, queue int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v queue=%v, (%v:)", tls, fd, queue, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + return Xioctl(tls, fd, int32(TCFLSH), VaList(bp+8, queue)) +} + +func Xtcgetattr(tls *TLS, fd int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v tio=%v, (%v:)", tls, fd, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if Xioctl(tls, fd, int32(TCGETS), VaList(bp+8, tio)) != 0 { + return -int32(1) + } + return 0 +} + +func Xtcgetsid(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* sid at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGSID), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcgetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(wsz))))) +} + +func Xtcsendbreak(tls *TLS, fd int32, dur int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v dur=%v, (%v:)", tls, fd, dur, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + /* nonzero duration is implementation-defined, so ignore it */ + return Xioctl(tls, fd, int32(TCSBRK), VaList(bp+8, 0)) +} + +func Xtcsetattr(tls *TLS, fd int32, act int32, tio uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v act=%v tio=%v, (%v:)", tls, fd, act, tio, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + if act < 0 || act > int32(2) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return -int32(1) + } + return Xioctl(tls, fd, int32(TCSETS)+act, VaList(bp+8, tio)) +} + +func Xtcsetwinsize(tls *TLS, fd int32, wsz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v wsz=%v, (%v:)", tls, fd, wsz, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCSWINSZ)), int64(wsz))))) +} + +func X__map_file(tls *TLS, pathname uintptr, size uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v pathname=%v size=%v, (%v:)", tls, pathname, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(144) + defer tls.Free(144) + var fd int32 + var map1, v1 uintptr + var _ /* st at bp+0 */ Tstat + _, _, _ = fd, map1, v1 + map1 = uintptr(-Int32FromInt32(1)) + fd = int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_open), int64(pathname), int64(Int32FromInt32(O_RDONLY)|Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)|Int32FromInt32(O_LARGEFILE)))))) + if fd < 0 { + return uintptr(0) + } + if !(X__fstat(tls, fd, bp) != 0) { + map1 = ___mmap(tls, uintptr(0), uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size), int32(PROT_READ), int32(MAP_SHARED), fd, 0) + *(*Tsize_t)(unsafe.Pointer(size)) = uint64((*(*Tstat)(unsafe.Pointer(bp))).Fst_size) + } + X__syscall1(tls, int64(SYS_close), int64(fd)) + if map1 == uintptr(-Int32FromInt32(1)) { + v1 = uintptr(0) + } else { + v1 = map1 + } + return v1 +} + +func X__month_to_secs(tls *TLS, month int32, is_leap int32) (r int32) { + if __ccgo_strace { + trc("tls=%v month=%v is_leap=%v, (%v:)", tls, month, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + var t int32 + _ = t + t = _secs_through_month[month] + if is_leap != 0 && month >= int32(2) { + t += int32(86400) + } + return t +} + +var _secs_through_month = [12]int32{ + 1: Int32FromInt32(31) * Int32FromInt32(86400), + 2: Int32FromInt32(59) * Int32FromInt32(86400), + 3: Int32FromInt32(90) * Int32FromInt32(86400), + 4: Int32FromInt32(120) * Int32FromInt32(86400), + 5: Int32FromInt32(151) * Int32FromInt32(86400), + 6: Int32FromInt32(181) * Int32FromInt32(86400), + 7: Int32FromInt32(212) * Int32FromInt32(86400), + 8: Int32FromInt32(243) * Int32FromInt32(86400), + 9: Int32FromInt32(273) * Int32FromInt32(86400), + 10: Int32FromInt32(304) * Int32FromInt32(86400), + 11: Int32FromInt32(334) * Int32FromInt32(86400), +} + +const DAYS_PER_100Y = 36524 +const DAYS_PER_400Y = 146097 +const DAYS_PER_4Y = 1461 +const LEAPOCH = 951868800 + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +/* 2000-03-01 (mod 400 year, immediately after feb29 */ + +func X__secs_to_tm(tls *TLS, t int64, tm uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var c_cycles, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, wday, yday int32 + var days, secs, years int64 + _, _, _, _, _, _, _, _, _, _, _, _, _ = c_cycles, days, leap, months, q_cycles, qc_cycles, remdays, remsecs, remyears, secs, wday, yday, years + /* Reject time_t values whose year would overflow int */ + if t < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || t > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + return -int32(1) + } + secs = t - (Int64FromInt64(946684800) + int64(Int32FromInt32(86400)*(Int32FromInt32(31)+Int32FromInt32(29)))) + days = secs / int64(86400) + remsecs = int32(secs % int64(86400)) + if remsecs < 0 { + remsecs += int32(86400) + days-- + } + wday = int32((int64(3) + days) % int64(7)) + if wday < 0 { + wday += int32(7) + } + qc_cycles = int32(days / int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + remdays = int32(days % int64(Int32FromInt32(365)*Int32FromInt32(400)+Int32FromInt32(97))) + if remdays < 0 { + remdays += Int32FromInt32(365)*Int32FromInt32(400) + Int32FromInt32(97) + qc_cycles-- + } + c_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + if c_cycles == int32(4) { + c_cycles-- + } + remdays -= c_cycles * (Int32FromInt32(365)*Int32FromInt32(100) + Int32FromInt32(24)) + q_cycles = remdays / (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + if q_cycles == int32(25) { + q_cycles-- + } + remdays -= q_cycles * (Int32FromInt32(365)*Int32FromInt32(4) + Int32FromInt32(1)) + remyears = remdays / int32(365) + if remyears == int32(4) { + remyears-- + } + remdays -= remyears * int32(365) + leap = BoolInt32(!(remyears != 0) && (q_cycles != 0 || !(c_cycles != 0))) + yday = remdays + int32(31) + int32(28) + leap + if yday >= int32(365)+leap { + yday -= int32(365) + leap + } + years = int64(remyears+int32(4)*q_cycles+int32(100)*c_cycles) + int64(400)*int64(qc_cycles) + months = 0 + for { + if !(int32(_days_in_month[months]) <= remdays) { + break + } + remdays -= int32(_days_in_month[months]) + goto _1 + _1: + ; + months++ + } + if months >= int32(10) { + months -= int32(12) + years++ + } + if years+int64(100) > int64(INT_MAX) || years+int64(100) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff)) { + return -int32(1) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = int32(years + int64(100)) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon = months + int32(2) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mday = remdays + int32(1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday = wday + (*Ttm)(unsafe.Pointer(tm)).Ftm_yday = yday + (*Ttm)(unsafe.Pointer(tm)).Ftm_hour = remsecs / int32(3600) + (*Ttm)(unsafe.Pointer(tm)).Ftm_min = remsecs / int32(60) % int32(60) + (*Ttm)(unsafe.Pointer(tm)).Ftm_sec = remsecs % int32(60) + return 0 +} + +var _days_in_month = [12]uint8{ + 0: uint8(31), + 1: uint8(30), + 2: uint8(31), + 3: uint8(30), + 4: uint8(31), + 5: uint8(31), + 6: uint8(30), + 7: uint8(31), + 8: uint8(30), + 9: uint8(31), + 10: uint8(31), + 11: uint8(29), +} + +func X__tm_to_secs(tls *TLS, tm uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var adj, month int32 + var t, year int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _ = adj, month, t, year + year = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + month = (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + if month >= int32(12) || month < 0 { + adj = month / int32(12) + month %= int32(12) + if month < 0 { + adj-- + month += int32(12) + } + year += int64(adj) + } + t = X__year_to_secs(tls, year, bp) + t += int64(X__month_to_secs(tls, month, *(*int32)(unsafe.Pointer(bp)))) + t += int64(86400) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday-Int32FromInt32(1)) + t += int64(3600) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + t += int64(60) * int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + t += int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + return t +} + +var _std_name [7]uint8 +var _dst_name [7]uint8 + +var _dst_off int32 +var _r0 [5]int32 +var _r12 [5]int32 + +var _zi uintptr +var _trans uintptr +var _index uintptr +var _types uintptr +var _abbrevs uintptr +var _abbrevs_end uintptr +var _map_size Tsize_t + +var _old_tz_buf [32]uint8 +var _old_tz = uintptr(unsafe.Pointer(&_old_tz_buf)) +var _old_tz_size = uint64(32) + +var _lock4 [1]int32 + +func _getint2(tls *TLS, p uintptr) (r int32) { + var x uint32 + _ = x + x = uint32(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) < uint32(10)) { + break + } + x = uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)))))-int32('0')) + uint32(10)*x + goto _1 + _1: + ; + *(*uintptr)(unsafe.Pointer(p))++ + } + return int32(x) +} + +func _getoff(tls *TLS, p uintptr) (r int32) { + var neg, off, v1 int32 + _, _, _ = neg, off, v1 + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('-') { + *(*uintptr)(unsafe.Pointer(p))++ + neg = int32(1) + } else { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('+') { + *(*uintptr)(unsafe.Pointer(p))++ + } + } + off = int32(3600) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += int32(60) * _getint2(tls, p) + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(p))++ + off += _getint2(tls, p) + } + } + if neg != 0 { + v1 = -off + } else { + v1 = off + } + return v1 +} + +func _getrule(tls *TLS, p uintptr, rule uintptr) { + var r, v1 int32 + _, _ = r, v1 + v1 = int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) + *(*int32)(unsafe.Pointer(rule)) = v1 + r = v1 + if r != int32('M') { + if r == int32('J') { + *(*uintptr)(unsafe.Pointer(p))++ + } else { + *(*int32)(unsafe.Pointer(rule)) = 0 + } + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + } else { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 1*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 2*4)) = _getint2(tls, p) + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 3*4)) = _getint2(tls, p) + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('/') { + *(*uintptr)(unsafe.Pointer(p))++ + *(*int32)(unsafe.Pointer(rule + 4*4)) = _getoff(tls, p) + } else { + *(*int32)(unsafe.Pointer(rule + 4*4)) = int32(7200) + } +} + +func _getname(tls *TLS, d uintptr, p uintptr) { + var i, v3 int32 + _, _ = i, v3 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p))))) == int32('<') { + *(*uintptr)(unsafe.Pointer(p))++ + i = 0 + for { + if !(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i)))) != int32('>')) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _1 + _1: + ; + i++ + } + if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) != 0 { + *(*uintptr)(unsafe.Pointer(p))++ + } + } else { + i = 0 + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))))|int32(32)-int32('a')) < uint32(26)) { + break + } + if i < int32(TZNAME_MAX) { + *(*uint8)(unsafe.Pointer(d + uintptr(i))) = *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(p)) + uintptr(i))) + } + goto _2 + _2: + ; + i++ + } + } + *(*uintptr)(unsafe.Pointer(p)) += uintptr(i) + if i < int32(TZNAME_MAX) { + v3 = i + } else { + v3 = int32(TZNAME_MAX) + } + *(*uint8)(unsafe.Pointer(d + uintptr(v3))) = uint8(0) +} + +func _zi_read32(tls *TLS, z uintptr) (r Tuint32_t) { + return uint32(*(*uint8)(unsafe.Pointer(z)))< uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(1)) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + i = Uint64FromInt32(3) + } + if i >= _old_tz_size { + _old_tz_size *= uint64(2) + if i >= _old_tz_size { + _old_tz_size = i + uint64(1) + } + if _old_tz_size > uint64(Int32FromInt32(PATH_MAX)+Int32FromInt32(2)) { + _old_tz_size = uint64(Int32FromInt32(PATH_MAX) + Int32FromInt32(2)) + } + _old_tz = Xmalloc(tls, _old_tz_size) + } + if _old_tz != 0 { + Xmemcpy(tls, _old_tz, *(*uintptr)(unsafe.Pointer(bp + 288)), i+uint64(1)) + } + posix_form = 0 + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) != int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 296)) = *(*uintptr)(unsafe.Pointer(bp + 288)) + _getname(tls, bp+308, bp+296) + if *(*uintptr)(unsafe.Pointer(bp + 296)) != *(*uintptr)(unsafe.Pointer(bp + 288)) && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296))))) == int32('-') || BoolInt32(uint32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)))))-uint32('0') < uint32(10)) != 0 || !(Xstrcmp(tls, bp+308, __ccgo_ts+1785) != 0) || !(Xstrcmp(tls, bp+308, __ccgo_ts+1789) != 0)) { + posix_form = int32(1) + } + } + /* Non-suid can use an absolute tzfile pathname or a relative + * pathame beginning with "."; in secure mode, only the + * standard path will be searched. */ + if !(posix_form != 0) { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32(':') { + *(*uintptr)(unsafe.Pointer(bp + 288))++ + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('/') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 288))))) == int32('.') { + if !(X__libc.Fsecure != 0) || !(Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), __ccgo_ts+1770) != 0) { + map1 = X__map_file(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), uintptr(unsafe.Pointer(&_map_size))) + } + } else { + l = Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 288))) + if l <= uint64(NAME_MAX) && !(Xstrchr(tls, *(*uintptr)(unsafe.Pointer(bp + 288)), int32('.')) != 0) { + Xmemcpy(tls, pathname, *(*uintptr)(unsafe.Pointer(bp + 288)), l+uint64(1)) + *(*uint8)(unsafe.Pointer(pathname + uintptr(l))) = uint8(0) + try = uintptr(unsafe.Pointer(&_search)) + for { + if !(!(map1 != 0) && *(*uint8)(unsafe.Pointer(try)) != 0) { + break + } + l = Xstrlen(tls, try) + Xmemcpy(tls, pathname-uintptr(l), try, l) + map1 = X__map_file(tls, pathname-uintptr(l), uintptr(unsafe.Pointer(&_map_size))) + goto _3 + _3: + ; + try += uintptr(l + uint64(1)) + } + } + } + if !(map1 != 0) { + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + } + if map1 != 0 && (_map_size < uint64(44) || Xmemcmp(tls, map1, __ccgo_ts+1793, uint64(4)) != 0) { + X__munmap(tls, map1, _map_size) + map1 = uintptr(0) + *(*uintptr)(unsafe.Pointer(bp + 288)) = uintptr(unsafe.Pointer(&X__utc)) + } + _zi = map1 + if map1 != 0 { + scale = int32(2) + if int32(*(*uint8)(unsafe.Pointer(map1 + 4))) != int32('1') { + *(*[6]uint8)(unsafe.Pointer(bp)) = [6]uint8{ + 0: uint8(1), + 1: uint8(1), + 2: uint8(8), + 3: uint8(5), + 4: uint8(6), + 5: uint8(1), + } + skip = _zi_dotprod(tls, _zi+uintptr(20), bp, uint64(6)) + _trans = _zi + uintptr(skip) + uintptr(44) + uintptr(44) + scale++ + } else { + _trans = _zi + uintptr(44) + } + _index = _trans + uintptr(_zi_read32(tls, _trans-uintptr(12))<> scale) + if !(n != 0) { + if alt != 0 { + *(*Tsize_t)(unsafe.Pointer(alt)) = uint64(0) + } + return uint64(0) + } + /* Binary search for 'most-recent rule before t'. */ + for n > uint64(1) { + m = a + n/uint64(2) + x = uint64(_zi_read32(tls, _trans+uintptr(m<> scale) + if a == n-uint64(1) { + return uint64(-Int32FromInt32(1)) + } + if a == uint64(0) { + x = uint64(_zi_read32(tls, _trans)) + if scale == int32(3) { + x = x<>(m-int32(1))&int32(1) + } + return r +} + +/* Convert a POSIX DST rule plus year to seconds since epoch. */ + +func _rule_to_secs(tls *TLS, rule uintptr, year int32) (r int64) { + bp := tls.Alloc(16) + defer tls.Free(16) + var d, days, m, n, wday, x int32 + var t int64 + var _ /* is_leap at bp+0 */ int32 + _, _, _, _, _, _, _ = d, days, m, n, t, wday, x + t = X__year_to_secs(tls, int64(year), bp) + if *(*int32)(unsafe.Pointer(rule)) != int32('M') { + x = *(*int32)(unsafe.Pointer(rule + 1*4)) + if *(*int32)(unsafe.Pointer(rule)) == int32('J') && (x < int32(60) || !(*(*int32)(unsafe.Pointer(bp)) != 0)) { + x-- + } + t += int64(int32(86400) * x) + } else { + m = *(*int32)(unsafe.Pointer(rule + 1*4)) + n = *(*int32)(unsafe.Pointer(rule + 2*4)) + d = *(*int32)(unsafe.Pointer(rule + 3*4)) + t += int64(X__month_to_secs(tls, m-int32(1), *(*int32)(unsafe.Pointer(bp)))) + wday = int32((t+int64(Int32FromInt32(4)*Int32FromInt32(86400)))%int64(Int32FromInt32(7)*Int32FromInt32(86400))) / int32(86400) + days = d - wday + if days < 0 { + days += int32(7) + } + if n == int32(5) && days+int32(28) >= _days_in_month1(tls, m, *(*int32)(unsafe.Pointer(bp))) { + n = int32(4) + } + t += int64(int32(86400) * (days + int32(7)*(n-int32(1)))) + } + t += int64(*(*int32)(unsafe.Pointer(rule + 4*4))) + return t +} + +/* Determine the time zone in effect for a given time in seconds since the + * epoch. It can be given in local or universal time. The results will + * indicate whether DST is in effect at the queried time, and will give both + * the GMT offset for the active zone/DST rule and the opposite DST. This + * enables a caller to efficiently adjust for the case where an explicit + * DST specification mismatches what would be in effect at the time. */ + +func X__secs_to_zone(tls *TLS, t int64, local int32, isdst uintptr, offset uintptr, oppoff uintptr, zonename uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v local=%v isdst=%v offset=%v oppoff=%v zonename=%v, (%v:)", tls, t, local, isdst, offset, oppoff, zonename, origin(2)) + } + bp := tls.Alloc(16) + defer tls.Free(16) + var i Tsize_t + var t0, t1, y int64 + var _ /* alt at bp+0 */ Tsize_t + _, _, _, _ = i, t0, t1, y + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if _zi != 0 { + i = _scan_trans(tls, t, local, bp) + if i != uint64(-Int32FromInt32(1)) { + *(*int32)(unsafe.Pointer(isdst)) = int32(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(4))))) + *(*int64)(unsafe.Pointer(offset)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)*i)))) + *(*uintptr)(unsafe.Pointer(zonename)) = _abbrevs + uintptr(*(*uint8)(unsafe.Pointer(_types + uintptr(uint64(6)*i+uint64(5))))) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(int32(_zi_read32(tls, _types+uintptr(uint64(6)**(*Tsize_t)(unsafe.Pointer(bp)))))) + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + } + } + if !(Xdaylight != 0) { + goto std + } + /* FIXME: may be broken if DST changes right at year boundary? + * Also, this could be more efficient.*/ + y = t/int64(31556952) + int64(70) + for X__year_to_secs(tls, y, uintptr(0)) > t { + y-- + } + for X__year_to_secs(tls, y+int64(1), uintptr(0)) < t { + y++ + } + t0 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r0)), int32(y)) + t1 = _rule_to_secs(tls, uintptr(unsafe.Pointer(&_r12)), int32(y)) + if !(local != 0) { + t0 += Xtimezone + t1 += int64(_dst_off) + } + if t0 < t1 { + if t >= t0 && t < t1 { + goto dst + } + goto std + } else { + if t >= t1 && t < t0 { + goto std + } + goto dst + } + goto std +std: + ; + *(*int32)(unsafe.Pointer(isdst)) = 0 + *(*int64)(unsafe.Pointer(offset)) = -Xtimezone + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = int64(-_dst_off) + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[0] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return + goto dst +dst: + ; + *(*int32)(unsafe.Pointer(isdst)) = int32(1) + *(*int64)(unsafe.Pointer(offset)) = int64(-_dst_off) + if oppoff != 0 { + *(*int64)(unsafe.Pointer(oppoff)) = -Xtimezone + } + *(*uintptr)(unsafe.Pointer(zonename)) = Xtzname[int32(1)] + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func ___tzset(tls *TLS) { + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) +} + +func X__tm_to_tzname(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + var p uintptr + _ = p + p = (*Ttm)(unsafe.Pointer(tm)).F__tm_zone + ___lock(tls, uintptr(unsafe.Pointer(&_lock4))) + _do_tzset(tls) + if p != uintptr(unsafe.Pointer(&X__utc)) && p != Xtzname[0] && p != Xtzname[int32(1)] && (!(_zi != 0) || uint64(p)-uint64(_abbrevs) >= uint64(int64(_abbrevs_end)-int64(_abbrevs))) { + p = __ccgo_ts + } + ___unlock(tls, uintptr(unsafe.Pointer(&_lock4))) + return p +} + +func X__year_to_secs(tls *TLS, year int64, is_leap uintptr) (r int64) { + if __ccgo_strace { + trc("tls=%v year=%v is_leap=%v, (%v:)", tls, year, is_leap, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var centuries, cycles, leaps, leaps1, rem, y int32 + var _ /* dummy at bp+0 */ int32 + _, _, _, _, _, _ = centuries, cycles, leaps, leaps1, rem, y + if uint64(year)-uint64(2) <= uint64(136) { + y = int32(year) + leaps = (y - int32(68)) >> int32(2) + if !((y-Int32FromInt32(68))&Int32FromInt32(3) != 0) { + leaps-- + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + } + } else { + if is_leap != 0 { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + } + } + return int64(int32(31536000)*(y-int32(70)) + int32(86400)*leaps) + } + if !(is_leap != 0) { + is_leap = bp + } + cycles = int32((year - int64(100)) / int64(400)) + rem = int32((year - int64(100)) % int64(400)) + if rem < 0 { + cycles-- + rem += int32(400) + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = int32(1) + centuries = 0 + leaps1 = 0 + } else { + if rem >= int32(200) { + if rem >= int32(300) { + centuries = int32(3) + rem -= int32(300) + } else { + centuries = int32(2) + rem -= int32(200) + } + } else { + if rem >= int32(100) { + centuries = int32(1) + rem -= int32(100) + } else { + centuries = 0 + } + } + if !(rem != 0) { + *(*int32)(unsafe.Pointer(is_leap)) = 0 + leaps1 = 0 + } else { + leaps1 = int32(uint32(rem) / uint32(4)) + rem = int32(uint32(rem) % Uint32FromUint32(4)) + *(*int32)(unsafe.Pointer(is_leap)) = BoolInt32(!(rem != 0)) + } + } + leaps1 += int32(97)*cycles + int32(24)*centuries - *(*int32)(unsafe.Pointer(is_leap)) + return (year-int64(100))*int64(31536000) + int64(leaps1)*int64(86400) + int64(946684800) + int64(86400) +} + +func Xasctime(tls *TLS, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, uintptr(unsafe.Pointer(&_buf9))) +} + +var _buf9 [26]uint8 + +func X__asctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + if Xsnprintf(tls, buf, uint64(26), __ccgo_ts+1798, VaList(bp+8, X__nl_langinfo_l(tls, int32(ABDAY_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_wday, uintptr(unsafe.Pointer(&X__c_locale))), X__nl_langinfo_l(tls, int32(ABMON_1)+(*Ttm)(unsafe.Pointer(tm)).Ftm_mon, uintptr(unsafe.Pointer(&X__c_locale))), (*Ttm)(unsafe.Pointer(tm)).Ftm_mday, (*Ttm)(unsafe.Pointer(tm)).Ftm_hour, (*Ttm)(unsafe.Pointer(tm)).Ftm_min, (*Ttm)(unsafe.Pointer(tm)).Ftm_sec, int32(1900)+(*Ttm)(unsafe.Pointer(tm)).Ftm_year)) >= int32(26) { + /* ISO C requires us to use the above format string, + * even if it will not fit in the buffer. Thus asctime_r + * is _supposed_ to crash if the fields in tm are too large. + * We follow this behavior and crash "gracefully" to warn + * application developers that they may not be so lucky + * on other implementations (e.g. stack smashing..). + */ + // __asm__ __volatile__ (".insn e,0"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 29, __ccgo_ts+1830) + } + return buf +} + +func Xasctime_r(tls *TLS, tm uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v tm=%v buf=%v, (%v:)", tls, tm, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__asctime_r(tls, tm, buf) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xclock(tls *TLS) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if X__clock_gettime(tls, int32(CLOCK_PROCESS_CPUTIME_ID), bp) != 0 { + return int64(-int32(1)) + } + if (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec > Int64FromInt64(0x7fffffffffffffff)/Int64FromInt32(1000000) || (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) > int64(0x7fffffffffffffff)-int64(1000000)*(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec { + return int64(-int32(1)) + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec*int64(1000000) + (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec/int64(1000) +} + +func Xclock_getcpuclockid(tls *TLS, pid Tpid_t, clk uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v clk=%v, (%v:)", tls, pid, clk, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var id Tclockid_t + var ret int32 + var _ /* ts at bp+0 */ Ttimespec + _, _ = id, ret + id = int32(uint32(-pid-Int32FromInt32(1))*uint32(8) + uint32(2)) + ret = int32(X__syscall2(tls, int64(SYS_clock_getres), int64(id), int64(bp))) + if ret == -int32(EINVAL) { + ret = -int32(ESRCH) + } + if ret != 0 { + return -ret + } + *(*Tclockid_t)(unsafe.Pointer(clk)) = id + return 0 +} + +func Xclock_getres(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* If reaching this point, it's a 64-bit arch or time64-only + * 32-bit arch and we can get result directly into timespec. */ + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_getres), int64(clk), int64(ts))))) +} + +func X__clock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r1 int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + r = int32(X__syscall2(tls, int64(SYS_clock_gettime), int64(clk), int64(ts))) + if r == -int32(ENOSYS) { + if clk == CLOCK_REALTIME { + X__syscall2(tls, int64(SYS_gettimeofday), int64(ts), int64(Int32FromInt32(0))) + (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec = int64(int32((*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec) * int32(1000)) + return 0 + } + r = -int32(EINVAL) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xclock_gettime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_gettime(tls, clk, ts) +} + +func X__clock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + if clk == int32(CLOCK_THREAD_CPUTIME_ID) { + return int32(EINVAL) + } + if clk == CLOCK_REALTIME && !(flags != 0) { + return int32(-___syscall_cp(tls, int64(SYS_nanosleep), int64(req), int64(rem), 0, 0, 0, 0)) + } + return int32(-___syscall_cp(tls, int64(SYS_clock_nanosleep), int64(clk), int64(flags), int64(req), int64(rem), 0, 0)) +} + +func Xclock_nanosleep(tls *TLS, clk Tclockid_t, flags int32, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v flags=%v req=%v rem=%v, (%v:)", tls, clk, flags, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__clock_nanosleep(tls, clk, flags, req, rem) +} + +func Xclock_settime(tls *TLS, clk Tclockid_t, ts uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v clk=%v ts=%v, (%v:)", tls, clk, ts, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_clock_settime), int64(clk), int64(ts))))) +} + +func Xctime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var tm uintptr + _ = tm + tm = Xlocaltime(tls, t) + if !(tm != 0) { + return uintptr(0) + } + return Xasctime(tls, tm) +} + +func Xctime_r(tls *TLS, t uintptr, buf uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v buf=%v, (%v:)", tls, t, buf, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var tm_p, v1 uintptr + var _ /* tm at bp+0 */ Ttm + _, _ = tm_p, v1 + tm_p = Xlocaltime_r(tls, t, bp) + if tm_p != 0 { + v1 = Xasctime_r(tls, tm_p, buf) + } else { + v1 = uintptr(0) + } + return v1 +} + +func Xdifftime(tls *TLS, t1 Ttime_t, t0 Ttime_t) (r float64) { + if __ccgo_strace { + trc("tls=%v t1=%v t0=%v, (%v:)", tls, t1, t0, origin(2)) + defer func() { trc("-> %v", r) }() + } + return float64(t1 - t0) +} + +type Ttimeb = struct { + Ftime Ttime_t + Fmillitm uint16 + Ftimezone int16 + Fdstflag int16 +} + +func Xftime(tls *TLS, tp uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tp=%v, (%v:)", tls, tp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var v1 int16 + var _ /* ts at bp+0 */ Ttimespec + _ = v1 + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeb)(unsafe.Pointer(tp)).Ftime = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeb)(unsafe.Pointer(tp)).Fmillitm = uint16((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec / int64(1000000)) + v1 = Int16FromInt32(0) + (*Ttimeb)(unsafe.Pointer(tp)).Fdstflag = v1 + (*Ttimeb)(unsafe.Pointer(tp)).Ftimezone = v1 + return 0 +} + +func Xgetdate(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(112) + defer tls.Free(112) + var datemsk, f, p, ret uintptr + var _ /* cs at bp+100 */ int32 + var _ /* fmt at bp+0 */ [100]uint8 + _, _, _, _ = datemsk, f, p, ret + ret = uintptr(0) + datemsk = Xgetenv(tls, __ccgo_ts+1842) + f = uintptr(0) + _pthread_setcancelstate(tls, PTHREAD_CANCEL_DEFERRED, bp+100) + if !(datemsk != 0) { + Xgetdate_err = int32(1) + goto out + } + f = Xfopen(tls, datemsk, __ccgo_ts+404) + if !(f != 0) { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(ENOMEM) { + Xgetdate_err = int32(6) + } else { + Xgetdate_err = int32(2) + } + goto out + } + for Xfgets(tls, bp, int32(100), f) != 0 { + p = Xstrptime(tls, s, bp, uintptr(unsafe.Pointer(&_tmbuf))) + if p != 0 && !(*(*uint8)(unsafe.Pointer(p)) != 0) { + ret = uintptr(unsafe.Pointer(&_tmbuf)) + goto out + } + } + if Xferror(tls, f) != 0 { + Xgetdate_err = int32(5) + } else { + Xgetdate_err = int32(7) + } + goto out +out: + ; + if f != 0 { + Xfclose(tls, f) + } + _pthread_setcancelstate(tls, *(*int32)(unsafe.Pointer(bp + 100)), uintptr(0)) + return ret +} + +var _tmbuf Ttm + +func Xgettimeofday(tls *TLS, tv uintptr, tz uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v tv=%v tz=%v, (%v:)", tls, tv, tz, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + if !(tv != 0) { + return 0 + } + Xclock_gettime(tls, CLOCK_REALTIME, bp) + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_sec = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + (*Ttimeval)(unsafe.Pointer(tv)).Ftv_usec = int64(int32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec) / int32(1000)) + return 0 +} + +func Xgmtime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, uintptr(unsafe.Pointer(&_tm))) +} + +var _tm Ttm + +func X__gmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t)), tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff = 0 + (*Ttm)(unsafe.Pointer(tm)).F__tm_zone = uintptr(unsafe.Pointer(&X__utc)) + return tm +} + +func Xgmtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__gmtime_r(tls, t, tm) +} + +func Xlocaltime(tls *TLS, t uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, uintptr(unsafe.Pointer(&_tm1))) +} + +var _tm1 Ttm + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func X__localtime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + /* Reject time_t values whose year would overflow int because + * __secs_to_zone cannot safely handle them. */ + if *(*Ttime_t)(unsafe.Pointer(t)) < int64(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))*Int64FromInt64(31622400) || *(*Ttime_t)(unsafe.Pointer(t)) > Int64FromInt32(INT_MAX)*Int64FromInt64(31622400) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + X__secs_to_zone(tls, *(*Ttime_t)(unsafe.Pointer(t)), 0, tm+32, tm+40, uintptr(0), tm+48) + if X__secs_to_tm(tls, *(*Ttime_t)(unsafe.Pointer(t))+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff, tm) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return uintptr(0) + } + return tm +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xlocaltime_r(tls *TLS, t uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v t=%v tm=%v, (%v:)", tls, t, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__localtime_r(tls, t, tm) +} + +func Xmktime(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm + var _ /* opp at bp+56 */ int64 + _ = t + t = X__tm_to_secs(tls, tm) + X__secs_to_zone(tls, t, int32(1), bp+32, bp+40, bp+56, bp+48) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst >= 0 && (*(*Ttm)(unsafe.Pointer(bp))).Ftm_isdst != (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst { + t -= *(*int64)(unsafe.Pointer(bp + 56)) - (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + } + t -= (*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff + if t != t { + goto error + } + X__secs_to_zone(tls, t, 0, bp+32, bp+40, bp+56, bp+48) + if X__secs_to_tm(tls, t+(*(*Ttm)(unsafe.Pointer(bp))).F__tm_gmtoff, bp) < 0 { + goto error + } + *(*Ttm)(unsafe.Pointer(tm)) = *(*Ttm)(unsafe.Pointer(bp)) + return t + goto error +error: + ; + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) +} + +func Xnanosleep(tls *TLS, req uintptr, rem uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v req=%v rem=%v, (%v:)", tls, req, rem, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(-X__clock_nanosleep(tls, CLOCK_REALTIME, 0, req, rem)))) +} + +func _is_leap(tls *TLS, y int32) (r int32) { + /* Avoid overflow */ + if y > Int32FromInt32(INT_MAX)-Int32FromInt32(1900) { + y -= int32(2000) + } + y += int32(1900) + return BoolInt32(!(y%Int32FromInt32(4) != 0) && (y%int32(100) != 0 || !(y%Int32FromInt32(400) != 0))) +} + +func _week_num(tls *TLS, tm uintptr) (r int32) { + var dec31, jan1, val int32 + _, _, _ = dec31, jan1, val + val = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + /* If 1 Jan is just 1-3 days past Monday, + * the previous week is also in this year. */ + if (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(371)-uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)-uint32(2))%uint32(7) <= uint32(2) { + val++ + } + if !(val != 0) { + val = int32(52) + /* If 31 December of prev year a Thursday, + * or Friday of a leap year, then the + * prev year has 53 weeks. */ + dec31 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) - uint32(1)) % uint32(7)) + if dec31 == int32(4) || dec31 == int32(5) && _is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year%int32(400)-int32(1)) != 0 { + val++ + } + } else { + if val == int32(53) { + /* If 1 January is not a Thursday, and not + * a Wednesday of a leap year, then this + * year has only 52 weeks. */ + jan1 = int32((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + uint32(371) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday)) % uint32(7)) + if jan1 != int32(4) && (jan1 != int32(3) || !(_is_leap(tls, (*Ttm)(unsafe.Pointer(tm)).Ftm_year) != 0)) { + val = int32(1) + } + } + } + return val +} + +func X__strftime_fmt_1(tls *TLS, s uintptr, l uintptr, f int32, tm uintptr, loc Tlocale_t, pad int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v l=%v f=%v tm=%v loc=%v pad=%v, (%v:)", tls, s, l, f, tm, loc, pad, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var d, fmt, v4, v5 uintptr + var def_pad, width, v1, v2, v6, v7 int32 + var item Tnl_item + var val int64 + _, _, _, _, _, _, _, _, _, _, _, _ = d, def_pad, fmt, item, val, width, v1, v2, v4, v5, v6, v7 + fmt = __ccgo_ts + 1692 + width = int32(2) + def_pad = int32('0') + switch f { + case int32('a'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(ABDAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('A'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) > uint32(6) { + goto string + } + item = int32(DAY_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + goto nl_strcat + case int32('h'): + fallthrough + case int32('b'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(ABMON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('B'): + if uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_mon) > uint32(11) { + goto string + } + item = int32(MON_1) + (*Ttm)(unsafe.Pointer(tm)).Ftm_mon + goto nl_strcat + case int32('c'): + item = int32(D_T_FMT) + goto nl_strftime + case int32('C'): + val = (int64(1900) + int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year)) / int64(100) + goto number + case int32('e'): + def_pad = int32('_') + fallthrough + case int32('d'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mday) + goto number + case int32('D'): + fmt = __ccgo_ts + 1850 + goto recu_strftime + case int32('F'): + fmt = __ccgo_ts + 1859 + goto recu_strftime + case int32('g'): + fallthrough + case int32('G'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday < int32(3) && _week_num(tls, tm) != int32(1) { + val-- + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_yday > int32(360) && _week_num(tls, tm) == int32(1) { + val++ + } + } + if f == int32('g') { + val %= int64(100) + } else { + width = int32(4) + } + goto number + case int32('H'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + goto number + case int32('l'): + def_pad = int32('_') + fallthrough + case int32('I'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + if !(val != 0) { + val = int64(12) + } else { + if val > int64(12) { + val -= int64(12) + } + } + goto number + case int32('j'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_yday + int32(1)) + width = int32(3) + goto number + case int32('k'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_hour) + def_pad = int32('_') + goto number + case int32('m'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_mon + int32(1)) + goto number + case int32('M'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_min) + goto number + case int32('n'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 390 + case int32('p'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v1 = int32(PM_STR) + } else { + v1 = int32(AM_STR) + } + item = v1 + goto nl_strcat + case int32('P'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_hour >= int32(12) { + v2 = int32(PM_STR) + } else { + v2 = int32(AM_STR) + } + item = v2 + fmt = X__nl_langinfo_l(tls, item, loc) + d = s + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + for { + if !(*(*uint8)(unsafe.Pointer(fmt)) != 0) { + break + } + v4 = d + d++ + v5 = fmt + fmt++ + *(*uint8)(unsafe.Pointer(v4)) = uint8(Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(v5))))) + goto _3 + _3: + ; + *(*Tsize_t)(unsafe.Pointer(l))++ + } + return s + case int32('r'): + item = int32(T_FMT_AMPM) + goto nl_strftime + case int32('R'): + fmt = __ccgo_ts + 1868 + goto recu_strftime + case int32('s'): + val = X__tm_to_secs(tls, tm) - (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff + width = int32(1) + goto number + case int32('S'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_sec) + goto number + case int32('t'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 1430 + case int32('T'): + fmt = __ccgo_ts + 1874 + goto recu_strftime + case int32('u'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_wday != 0 { + v6 = (*Ttm)(unsafe.Pointer(tm)).Ftm_wday + } else { + v6 = int32(7) + } + val = int64(v6) + width = int32(1) + goto number + case int32('U'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)) / uint32(7)) + goto number + case int32('W'): + val = int64((uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_yday) + uint32(7) - (uint32((*Ttm)(unsafe.Pointer(tm)).Ftm_wday)+uint32(6))%uint32(7)) / uint32(7)) + goto number + case int32('V'): + val = int64(_week_num(tls, tm)) + goto number + case int32('w'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_wday) + width = int32(1) + goto number + case int32('x'): + item = int32(D_FMT) + goto nl_strftime + case int32('X'): + item = int32(T_FMT) + goto nl_strftime + case int32('y'): + val = (int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900)) % int64(100) + if val < 0 { + val = -val + } + goto number + case int32('Y'): + val = int64((*Ttm)(unsafe.Pointer(tm)).Ftm_year) + int64(1900) + if val >= int64(10000) { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1883, VaList(bp+8, val))) + return s + } + width = int32(4) + goto number + case int32('z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1889, VaList(bp+8, (*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff/int64(3600)*int64(100)+(*Ttm)(unsafe.Pointer(tm)).F__tm_gmtoff%int64(3600)/int64(60)))) + return s + case int32('Z'): + if (*Ttm)(unsafe.Pointer(tm)).Ftm_isdst < 0 { + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(0) + return __ccgo_ts + } + fmt = X__tm_to_tzname(tls, tm) + goto string + case int32('%'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(1) + return __ccgo_ts + 437 + default: + return uintptr(0) + } + goto number +number: + ; + if pad != 0 { + v7 = pad + } else { + v7 = def_pad + } + switch v7 { + case int32('-'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1896, VaList(bp+8, val))) + case int32('_'): + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1901, VaList(bp+8, width, val))) + case int32('0'): + fallthrough + default: + *(*Tsize_t)(unsafe.Pointer(l)) = uint64(Xsnprintf(tls, s, uint64(100), __ccgo_ts+1907, VaList(bp+8, width, val))) + break + } + return s + goto nl_strcat +nl_strcat: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto string +string: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = Xstrlen(tls, fmt) + return fmt + goto nl_strftime +nl_strftime: + ; + fmt = X__nl_langinfo_l(tls, item, loc) + goto recu_strftime +recu_strftime: + ; + *(*Tsize_t)(unsafe.Pointer(l)) = X__strftime_l(tls, s, uint64(100), fmt, tm, loc) + if !(*(*Tsize_t)(unsafe.Pointer(l)) != 0) { + return uintptr(0) + } + return s +} + +func X__strftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(128) + defer tls.Free(128) + var d, l, v10, v12, v2, v7 Tsize_t + var pad, plus, v4, v8 int32 + var t, v3 uintptr + var width uint64 + var v9 bool + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+112 */ uintptr + _, _, _, _, _, _, _, _, _, _, _, _, _, _ = d, l, pad, plus, t, width, v10, v12, v2, v3, v4, v7, v8, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*uint8)(unsafe.Pointer(f)) != 0) { + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + return l + } + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v2 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v2))) = *(*uint8)(unsafe.Pointer(f)) + goto _1 + } + f++ + pad = 0 + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('-') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('_') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('0') { + v3 = f + f++ + pad = int32(*(*uint8)(unsafe.Pointer(v3))) + } + v4 = BoolInt32(int32(*(*uint8)(unsafe.Pointer(f))) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + width = Xstrtoul(tls, f, bp+112, int32(10)) + } else { + width = uint64(0) + *(*uintptr)(unsafe.Pointer(bp + 112)) = f + } + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('F') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('G') || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 112)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 112)) + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('E') || int32(*(*uint8)(unsafe.Pointer(f))) == int32('O') { + f++ + } + t = X__strftime_fmt_1(tls, bp+8, bp, int32(*(*uint8)(unsafe.Pointer(f))), tm, loc, pad) + if !(t != 0) { + break + } + if width != 0 { + /* Trim off any sign and leading zeros, then + * count remaining digits to determine behavior + * for the + flag. */ + if int32(*(*uint8)(unsafe.Pointer(t))) == int32('+') || int32(*(*uint8)(unsafe.Pointer(t))) == int32('-') { + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + for { + if !(int32(*(*uint8)(unsafe.Pointer(t))) == int32('0') && uint32(int32(*(*uint8)(unsafe.Pointer(t + 1)))-int32('0')) < uint32(10)) { + break + } + goto _5 + _5: + ; + t++ + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + if width < *(*Tsize_t)(unsafe.Pointer(bp)) { + width = *(*Tsize_t)(unsafe.Pointer(bp)) + } + d = uint64(0) + for { + if !(uint32(int32(*(*uint8)(unsafe.Pointer(t + uintptr(d))))-int32('0')) < uint32(10)) { + break + } + goto _6 + _6: + ; + d++ + } + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v7))) = uint8('-') + width-- + } else { + if v9 = plus != 0; v9 { + if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 112))))) == int32('C') { + v8 = int32(3) + } else { + v8 = int32(5) + } + } + if v9 && d+(width-*(*Tsize_t)(unsafe.Pointer(bp))) >= uint64(v8) { + v10 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v10))) = uint8('+') + width-- + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v12 = l + l++ + *(*uint8)(unsafe.Pointer(s + uintptr(v12))) = uint8('0') + goto _11 + _11: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) > n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xmemcpy(tls, s+uintptr(l), t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f++ + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*uint8)(unsafe.Pointer(s + uintptr(l))) = uint8(0) + } + return uint64(0) +} + +func Xstrftime(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v, (%v:)", tls, s, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xstrftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__strftime_l(tls, s, n, f, tm, loc) +} + +func Xstrptime(tls *TLS, s uintptr, f uintptr, tm uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v f=%v tm=%v, (%v:)", tls, s, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var adj, i, min, neg, range1, w, want_century, v1, v2, v45, v46, v5, v53, v6 int32 + var dest, ex, v49, v51, v54, v9 uintptr + var len1 Tsize_t + var v48, v8 bool + var _ /* century at bp+4 */ int32 + var _ /* dummy at bp+0 */ int32 + var _ /* new_f at bp+16 */ uintptr + var _ /* relyear at bp+8 */ int32 + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = adj, dest, ex, i, len1, min, neg, range1, w, want_century, v1, v2, v45, v46, v48, v49, v5, v51, v53, v54, v6, v8, v9 + want_century = 0 + *(*int32)(unsafe.Pointer(bp + 4)) = 0 + *(*int32)(unsafe.Pointer(bp + 8)) = 0 + for *(*uint8)(unsafe.Pointer(f)) != 0 { + if int32(*(*uint8)(unsafe.Pointer(f))) != int32('%') { + v1 = int32(*(*uint8)(unsafe.Pointer(f))) + v2 = BoolInt32(v1 == int32(' ') || uint32(v1)-uint32('\t') < uint32(5)) + goto _3 + _3: + if v2 != 0 { + for { + if v8 = *(*uint8)(unsafe.Pointer(s)) != 0; v8 { + v5 = int32(*(*uint8)(unsafe.Pointer(s))) + v6 = BoolInt32(v5 == int32(' ') || uint32(v5)-uint32('\t') < uint32(5)) + goto _7 + _7: + } + if !(v8 && v6 != 0) { + break + } + goto _4 + _4: + ; + s++ + } + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) != int32(*(*uint8)(unsafe.Pointer(f))) { + return uintptr(0) + } else { + s++ + } + } + f++ + continue + } + f++ + if int32(*(*uint8)(unsafe.Pointer(f))) == int32('+') { + f++ + } + if BoolInt32(uint32(*(*uint8)(unsafe.Pointer(f)))-uint32('0') < uint32(10)) != 0 { + w = int32(Xstrtoul(tls, f, bp+16, int32(10))) + f = *(*uintptr)(unsafe.Pointer(bp + 16)) + } else { + w = -int32(1) + } + adj = 0 + v9 = f + f++ + switch int32(*(*uint8)(unsafe.Pointer(v9))) { + case int32('A'): + goto _10 + case int32('a'): + goto _11 + case int32('h'): + goto _12 + case int32('B'): + goto _13 + case int32('b'): + goto _14 + case int32('c'): + goto _15 + case int32('C'): + goto _16 + case int32('e'): + goto _17 + case int32('d'): + goto _18 + case int32('D'): + goto _19 + case int32('H'): + goto _20 + case int32('I'): + goto _21 + case int32('j'): + goto _22 + case int32('m'): + goto _23 + case int32('M'): + goto _24 + case int32('t'): + goto _25 + case int32('n'): + goto _26 + case int32('p'): + goto _27 + case int32('r'): + goto _28 + case int32('R'): + goto _29 + case int32('S'): + goto _30 + case int32('T'): + goto _31 + case int32('W'): + goto _32 + case int32('U'): + goto _33 + case int32('w'): + goto _34 + case int32('x'): + goto _35 + case int32('X'): + goto _36 + case int32('y'): + goto _37 + case int32('Y'): + goto _38 + case int32('%'): + goto _39 + default: + goto _40 + } + goto _41 + _11: + ; + _10: + ; + dest = tm + 24 + min = int32(ABDAY_1) + range1 = int32(7) + goto symbolic_range + _14: + ; + _13: + ; + _12: + ; + dest = tm + 16 + min = int32(ABMON_1) + range1 = int32(12) + goto symbolic_range + _15: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _16: + ; + dest = bp + 4 + if w < 0 { + w = int32(2) + } + want_century |= int32(2) + goto numeric_digits + _18: + ; + _17: + ; + dest = tm + 12 + min = int32(1) + range1 = int32(31) + goto numeric_range + _19: + ; + s = Xstrptime(tls, s, __ccgo_ts+1850, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _20: + ; + dest = tm + 8 + min = 0 + range1 = int32(24) + goto numeric_range + _21: + ; + dest = tm + 8 + min = int32(1) + range1 = int32(12) + goto numeric_range + _22: + ; + dest = tm + 28 + min = int32(1) + range1 = int32(366) + adj = int32(1) + goto numeric_range + _23: + ; + dest = tm + 16 + min = int32(1) + range1 = int32(12) + adj = int32(1) + goto numeric_range + _24: + ; + dest = tm + 4 + min = 0 + range1 = int32(60) + goto numeric_range + _26: + ; + _25: + ; + _44: + ; + if v48 = *(*uint8)(unsafe.Pointer(s)) != 0; v48 { + v45 = int32(*(*uint8)(unsafe.Pointer(s))) + v46 = BoolInt32(v45 == int32(' ') || uint32(v45)-uint32('\t') < uint32(5)) + goto _47 + _47: + } + if !(v48 && v46 != 0) { + goto _42 + } + goto _43 + _43: + ; + s++ + goto _44 + goto _42 + _42: + ; + goto _41 + _27: + ; + ex = Xnl_langinfo(tls, int32(AM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + s += uintptr(len1) + goto _41 + } + ex = Xnl_langinfo(tls, int32(PM_STR)) + len1 = Xstrlen(tls, ex) + if !(Xstrncasecmp(tls, s, ex, len1) != 0) { + *(*int32)(unsafe.Pointer(tm + 8)) %= int32(12) + *(*int32)(unsafe.Pointer(tm + 8)) += int32(12) + s += uintptr(len1) + goto _41 + } + return uintptr(0) + _28: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT_AMPM)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _29: + ; + s = Xstrptime(tls, s, __ccgo_ts+1868, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _30: + ; + dest = tm + min = 0 + range1 = int32(61) + goto numeric_range + _31: + ; + s = Xstrptime(tls, s, __ccgo_ts+1874, tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _33: + ; + _32: + ; + /* Throw away result, for now. (FIXME?) */ + dest = bp + min = 0 + range1 = int32(54) + goto numeric_range + _34: + ; + dest = tm + 24 + min = 0 + range1 = int32(7) + goto numeric_range + _35: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(D_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _36: + ; + s = Xstrptime(tls, s, Xnl_langinfo(tls, int32(T_FMT)), tm) + if !(s != 0) { + return uintptr(0) + } + goto _41 + _37: + ; + dest = bp + 8 + w = int32(2) + want_century |= int32(1) + goto numeric_digits + _38: + ; + dest = tm + 20 + if w < 0 { + w = int32(4) + } + adj = int32(1900) + want_century = 0 + goto numeric_digits + _39: + ; + v49 = s + s++ + if int32(*(*uint8)(unsafe.Pointer(v49))) != int32('%') { + return uintptr(0) + } + goto _41 + _40: + ; + return uintptr(0) + goto numeric_range + numeric_range: + ; + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) = 0 + i = int32(1) + for { + if !(i <= min+range1 && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v51 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v51))) - int32('0') + goto _50 + _50: + ; + i *= int32(10) + } + if uint32(*(*int32)(unsafe.Pointer(dest))-min) >= uint32(range1) { + return uintptr(0) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + switch int64(dest) - int64(tm) { + case int64(uint64(UintptrFromInt32(0) + 28)): + } + goto update + goto numeric_digits + numeric_digits: + ; + neg = 0 + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('+') { + s++ + } else { + if int32(*(*uint8)(unsafe.Pointer(s))) == int32('-') { + neg = int32(1) + s++ + } + } + if !(BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-Uint32FromUint8('0') < Uint32FromInt32(10)) != 0) { + return uintptr(0) + } + v53 = Int32FromInt32(0) + i = v53 + *(*int32)(unsafe.Pointer(dest)) = v53 + for { + if !(i < w && BoolInt32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) != 0) { + break + } + v54 = s + s++ + *(*int32)(unsafe.Pointer(dest)) = *(*int32)(unsafe.Pointer(dest))*int32(10) + int32(*(*uint8)(unsafe.Pointer(v54))) - int32('0') + goto _52 + _52: + ; + i++ + } + if neg != 0 { + *(*int32)(unsafe.Pointer(dest)) = -*(*int32)(unsafe.Pointer(dest)) + } + *(*int32)(unsafe.Pointer(dest)) -= adj + goto update + goto symbolic_range + symbolic_range: + ; + i = int32(2)*range1 - int32(1) + for { + if !(i >= 0) { + break + } + ex = Xnl_langinfo(tls, min+i) + len1 = Xstrlen(tls, ex) + if Xstrncasecmp(tls, s, ex, len1) != 0 { + goto _55 + } + s += uintptr(len1) + *(*int32)(unsafe.Pointer(dest)) = i % range1 + break + goto _55 + _55: + ; + i-- + } + if i < 0 { + return uintptr(0) + } + goto update + goto update + update: + ; + //FIXME + _41: + } + if want_century != 0 { + (*Ttm)(unsafe.Pointer(tm)).Ftm_year = *(*int32)(unsafe.Pointer(bp + 8)) + if want_century&int32(2) != 0 { + *(*int32)(unsafe.Pointer(tm + 20)) += *(*int32)(unsafe.Pointer(bp + 4))*int32(100) - int32(1900) + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year <= int32(68) { + *(*int32)(unsafe.Pointer(tm + 20)) += int32(100) + } + } + } + return s +} + +func Xtime(tls *TLS, t uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* ts at bp+0 */ Ttimespec + X__clock_gettime(tls, CLOCK_REALTIME, bp) + if t != 0 { + *(*Ttime_t)(unsafe.Pointer(t)) = (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec + } + return (*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec +} + +func Xtimegm(tls *TLS, tm uintptr) (r Ttime_t) { + if __ccgo_strace { + trc("tls=%v tm=%v, (%v:)", tls, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var t int64 + var _ /* new at bp+0 */ Ttm1 + _ = t + t = X__tm_to_secs(tls, tm) + if X__secs_to_tm(tls, t, bp) < 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EOVERFLOW) + return int64(-int32(1)) + } + *(*Ttm1)(unsafe.Pointer(tm)) = *(*Ttm1)(unsafe.Pointer(bp)) + (*Ttm1)(unsafe.Pointer(tm)).Ftm_isdst = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_gmtoff = 0 + (*Ttm1)(unsafe.Pointer(tm)).Ftm_zone = uintptr(unsafe.Pointer(&X__utc)) + return t +} + +func Xtimer_delete(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1914) + AtomicStorePInt32(td+164, AtomicLoadPInt32(td+164)|(-Int32FromInt32(1)-Int32FromInt32(0x7fffffff))) + // __asm__ __volatile__ ("bcr 15,0" : : : "memory"); + X__assert_fail(tls, __ccgo_ts+212, __ccgo_ts+247, 23, __ccgo_ts+1914) + X__syscall2(tls, int64(SYS_tkill), int64((*t__pthread)(unsafe.Pointer(td)).Ftid), int64(Int32FromInt32(SIGTIMER))) + return 0 + } + return int32(X__syscall1(tls, int64(SYS_timer_delete), int64(t))) +} + +func Xtimer_getoverrun(tls *TLS, t Ttimer_t) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v, (%v:)", tls, t, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+164) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_timer_getoverrun), int64(t))))) +} + +func Xtimer_gettime(tls *TLS, t Ttimer_t, val uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v val=%v, (%v:)", tls, t, val, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+164) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_timer_gettime), int64(t), int64(val))))) +} + +func Xtimer_settime(tls *TLS, t Ttimer_t, flags int32, val uintptr, old uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v t=%v flags=%v val=%v old=%v, (%v:)", tls, t, flags, val, old, origin(2)) + defer func() { trc("-> %v", r) }() + } + var td Tpthread_t + _ = td + if int64(t) < 0 { + td = uintptr(uint64(t) << Int32FromInt32(1)) + t = uintptr(uint64(AtomicLoadPInt32(td+164) & Int32FromInt32(INT_MAX))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_timer_settime), int64(t), int64(flags), int64(val), int64(old))))) +} + +type Ttms = struct { + Ftms_utime Tclock_t + Ftms_stime Tclock_t + Ftms_cutime Tclock_t + Ftms_cstime Tclock_t +} + +func Xtimes(tls *TLS, tms uintptr) (r Tclock_t) { + if __ccgo_strace { + trc("tls=%v tms=%v, (%v:)", tls, tms, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall1(tls, int64(SYS_times), int64(tms)) +} + +// C documentation +// +// /* There is no other implemented value than TIME_UTC; all other values +// * are considered erroneous. */ +func Xtimespec_get(tls *TLS, ts uintptr, base int32) (r int32) { + if __ccgo_strace { + trc("tls=%v ts=%v base=%v, (%v:)", tls, ts, base, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret, v1 int32 + _, _ = ret, v1 + if base != int32(TIME_UTC) { + return 0 + } + ret = X__clock_gettime(tls, CLOCK_REALTIME, ts) + if ret < 0 { + v1 = 0 + } else { + v1 = base + } + return v1 +} + +type Tutimbuf = struct { + Factime Ttime_t + Fmodtime Ttime_t +} + +func Xutime(tls *TLS, path uintptr, times uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v times=%v, (%v:)", tls, path, times, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 uintptr + _ = v1 + if times != 0 { + *(*[2]Ttimespec)(unsafe.Pointer(bp)) = [2]Ttimespec{ + 0: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Factime, + }, + 1: { + Ftv_sec: (*Tutimbuf)(unsafe.Pointer(times)).Fmodtime, + }, + } + v1 = bp + } else { + v1 = uintptr(0) + } + return Xutimensat(tls, -int32(100), path, v1, 0) +} + +func X__wcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(528) + defer tls.Free(528) + var l, v2, v6, v7, v9 Tsize_t + var pad, plus, v4 int32 + var t, t_mb, v3 uintptr + var width uint64 + var _ /* buf at bp+8 */ [100]uint8 + var _ /* k at bp+0 */ Tsize_t + var _ /* p at bp+512 */ uintptr + var _ /* wbuf at bp+108 */ [100]Twchar_t + _, _, _, _, _, _, _, _, _, _, _, _ = l, pad, plus, t, t_mb, width, v2, v3, v4, v6, v7, v9 + l = uint64(0) + for { + if !(l < n) { + break + } + if !(*(*Twchar_t)(unsafe.Pointer(f)) != 0) { + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + return l + } + if *(*Twchar_t)(unsafe.Pointer(f)) != int32('%') { + v2 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v2)*4)) = *(*Twchar_t)(unsafe.Pointer(f)) + goto _1 + } + f += 4 + pad = 0 + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('_') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('0') { + v3 = f + f += 4 + pad = *(*Twchar_t)(unsafe.Pointer(v3)) + } + v4 = BoolInt32(*(*Twchar_t)(unsafe.Pointer(f)) == Int32FromUint8('+')) + plus = v4 + if v4 != 0 { + f += 4 + } + width = Xwcstoul(tls, f, bp+512, int32(10)) + if *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('C') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('F') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('G') || *(*Twchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 512)))) == int32('Y') { + if !(width != 0) && *(*uintptr)(unsafe.Pointer(bp + 512)) != f { + width = uint64(1) + } + } else { + width = uint64(0) + } + f = *(*uintptr)(unsafe.Pointer(bp + 512)) + if *(*Twchar_t)(unsafe.Pointer(f)) == int32('E') || *(*Twchar_t)(unsafe.Pointer(f)) == int32('O') { + f += 4 + } + t_mb = X__strftime_fmt_1(tls, bp+8, bp, *(*Twchar_t)(unsafe.Pointer(f)), tm, loc, pad) + if !(t_mb != 0) { + break + } + *(*Tsize_t)(unsafe.Pointer(bp)) = Xmbstowcs(tls, bp+108, t_mb, Uint64FromInt64(400)/Uint64FromInt64(4)) + if *(*Tsize_t)(unsafe.Pointer(bp)) == uint64(-Int32FromInt32(1)) { + return uint64(0) + } + t = bp + 108 + if width != 0 { + for { + if !(*(*Twchar_t)(unsafe.Pointer(t)) == int32('+') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('-') || *(*Twchar_t)(unsafe.Pointer(t)) == int32('0') && *(*Twchar_t)(unsafe.Pointer(t + 1*4)) != 0) { + break + } + goto _5 + _5: + ; + t += 4 + *(*Tsize_t)(unsafe.Pointer(bp))-- + } + width-- + if plus != 0 && (*Ttm)(unsafe.Pointer(tm)).Ftm_year >= Int32FromInt32(10000)-Int32FromInt32(1900) { + v6 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v6)*4)) = int32('+') + } else { + if (*Ttm)(unsafe.Pointer(tm)).Ftm_year < -int32(1900) { + v7 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v7)*4)) = int32('-') + } else { + width++ + } + } + for { + if !(width > *(*Tsize_t)(unsafe.Pointer(bp)) && l < n) { + break + } + v9 = l + l++ + *(*Twchar_t)(unsafe.Pointer(s + uintptr(v9)*4)) = int32('0') + goto _8 + _8: + ; + width-- + } + } + if *(*Tsize_t)(unsafe.Pointer(bp)) >= n-l { + *(*Tsize_t)(unsafe.Pointer(bp)) = n - l + } + Xwmemcpy(tls, s+uintptr(l)*4, t, *(*Tsize_t)(unsafe.Pointer(bp))) + l += *(*Tsize_t)(unsafe.Pointer(bp)) + goto _1 + _1: + ; + f += 4 + } + if n != 0 { + if l == n { + l = n - uint64(1) + } + *(*Twchar_t)(unsafe.Pointer(s + uintptr(l)*4)) = 0 + } + return uint64(0) +} + +func Xwcsftime(tls *TLS, wcs uintptr, n Tsize_t, f uintptr, tm uintptr) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v wcs=%v n=%v f=%v tm=%v, (%v:)", tls, wcs, n, f, tm, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, wcs, n, f, tm, (*t__pthread)(unsafe.Pointer(uintptr(___get_tp(tls)))).Flocale) +} + +func Xwcsftime_l(tls *TLS, s uintptr, n Tsize_t, f uintptr, tm uintptr, loc Tlocale_t) (r Tsize_t) { + if __ccgo_strace { + trc("tls=%v s=%v n=%v f=%v tm=%v loc=%v, (%v:)", tls, s, n, f, tm, loc, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__wcsftime_l(tls, s, n, f, tm, loc) +} + +func X_exit(tls *TLS, status int32) { + if __ccgo_strace { + trc("tls=%v status=%v, (%v:)", tls, status, origin(2)) + } + X_Exit(tls, status) +} + +func Xaccess(tls *TLS, filename uintptr, amode int32) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v amode=%v, (%v:)", tls, filename, amode, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_access), int64(filename), int64(amode))))) +} + +func Xacct(tls *TLS, filename uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v filename=%v, (%v:)", tls, filename, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_acct), int64(filename))))) +} + +func Xalarm(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_value: Ttimeval{ + Ftv_sec: int64(seconds), + }, + } + *(*Titimerval)(unsafe.Pointer(bp + 32)) = Titimerval{} + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec + BoolInt64(!!((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec != 0))) +} + +func Xchdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(path))))) +} + +func Xchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_chown), int64(path), int64(uid), int64(gid))))) +} + +func _dummy12(tls *TLS, fd int32) (r int32) { + return fd +} + +func Xclose(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r int32 + _ = r + fd = _dummy12(tls, fd) + r = int32(___syscall_cp(tls, int64(SYS_close), int64(fd), 0, 0, 0, 0, 0)) + if r == -int32(EINTR) { + r = 0 + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xctermid(tls *TLS, s uintptr) (r uintptr) { + if __ccgo_strace { + trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) + defer func() { trc("-> %v", r) }() + } + var v1 uintptr + _ = v1 + if s != 0 { + v1 = Xstrcpy(tls, s, __ccgo_ts+381) + } else { + v1 = __ccgo_ts + 381 + } + return v1 +} + +func Xdup(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_dup), int64(fd))))) +} + +func Xdup2(tls *TLS, old int32, new1 int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v, (%v:)", tls, old, new1, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1 int32 + _, _ = r, v1 + for { + v1 = int32(X__syscall2(tls, int64(SYS_dup2), int64(old), int64(new1))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func X__dup3(tls *TLS, old int32, new1 int32, flags int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r1) }() + } + var r, v1, v2 int32 + _, _, _ = r, v1, v2 + if old == new1 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + if flags != 0 { + for { + v1 = int32(X__syscall3(tls, int64(SYS_dup3), int64(old), int64(new1), int64(flags))) + r = v1 + if !(v1 == -int32(EBUSY)) { + break + } + } + if r != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(r))) + } + if flags & ^Int32FromInt32(O_CLOEXEC) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + } + for { + v2 = int32(X__syscall2(tls, int64(SYS_dup2), int64(old), int64(new1))) + r = v2 + if !(v2 == -int32(EBUSY)) { + break + } + } + if r >= 0 && flags&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(new1), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + return int32(X__syscall_ret(tls, uint64(r))) +} + +func Xdup3(tls *TLS, old int32, new1 int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v old=%v new1=%v flags=%v, (%v:)", tls, old, new1, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__dup3(tls, old, new1, flags) +} + +type Tctx1 = struct { + Ffd int32 + Ffilename uintptr + Famode int32 + Fp int32 +} + +func _checker(tls *TLS, p uintptr) (r int32) { + bp := tls.Alloc(16) + defer tls.Free(16) + var c uintptr + var _ /* ret at bp+0 */ int32 + _ = c + c = p + if X__syscall2(tls, int64(SYS_setregid), X__syscall0(tls, int64(SYS_getegid)), int64(-Int32FromInt32(1))) != 0 || X__syscall2(tls, int64(SYS_setreuid), X__syscall0(tls, int64(SYS_geteuid)), int64(-Int32FromInt32(1))) != 0 { + X__syscall1(tls, int64(SYS_exit), int64(Int32FromInt32(1))) + } + *(*int32)(unsafe.Pointer(bp)) = int32(X__syscall4(tls, int64(SYS_faccessat), int64((*Tctx1)(unsafe.Pointer(c)).Ffd), int64((*Tctx1)(unsafe.Pointer(c)).Ffilename), int64((*Tctx1)(unsafe.Pointer(c)).Famode), int64(Int32FromInt32(0)))) + X__syscall3(tls, int64(SYS_write), int64((*Tctx1)(unsafe.Pointer(c)).Fp), int64(bp), int64(Uint64FromInt64(4))) + return 0 +} + +func Xfaccessat(tls *TLS, fd int32, filename uintptr, amode int32, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v filename=%v amode=%v flag=%v, (%v:)", tls, fd, filename, amode, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if flag != 0 { + ret = int32(X__syscall4(tls, int64(SYS_faccessat2), int64(fd), int64(filename), int64(amode), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + } + if flag & ^Int32FromInt32(AT_EACCESS) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_faccessat), int64(fd), int64(filename), int64(amode))))) +} + +func Xfchdir(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall1(tls, int64(SYS_fchdir), int64(fd))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_chdir), int64(bp))))) +} + +func Xfchown(tls *TLS, fd int32, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v uid=%v gid=%v, (%v:)", tls, fd, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var ret int32 + var _ /* buf at bp+0 */ [27]uint8 + _ = ret + ret = int32(X__syscall3(tls, int64(SYS_fchown), int64(fd), int64(uid), int64(gid))) + if ret != -int32(EBADF) || X__syscall2(tls, int64(SYS_fcntl), int64(fd), int64(Int32FromInt32(F_GETFD))) < 0 { + return int32(X__syscall_ret(tls, uint64(ret))) + } + X__procfdname(tls, bp, uint32(fd)) + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_chown), int64(bp), int64(uid), int64(gid))))) +} + +func Xfchownat(tls *TLS, fd int32, path uintptr, uid Tuid_t, gid Tgid_t, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v uid=%v gid=%v flag=%v, (%v:)", tls, fd, path, uid, gid, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_fchownat), int64(fd), int64(path), int64(uid), int64(gid), int64(flag))))) +} + +func Xfdatasync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fdatasync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xfsync(tls *TLS, fd int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_fsync), int64(fd), 0, 0, 0, 0, 0)))) +} + +func Xftruncate(tls *TLS, fd int32, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v length=%v, (%v:)", tls, fd, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_ftruncate), int64(fd), length)))) +} + +func Xgetcwd(tls *TLS, buf uintptr, size Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v buf=%v size=%v, (%v:)", tls, buf, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int64 + var tmp, v3 uintptr + var v1 t__predefined_size_t + var v2 int32 + _, _, _, _, _ = ret, tmp, v1, v2, v3 + defer func() { Xrealloc(tls, tmp, 0) }() + if buf != 0 { + v2 = int32(1) + } else { + v2 = int32(PATH_MAX) + } + v1 = uint64(v2) + tmp = Xrealloc(tls, tmp, v1) + if !(buf != 0) { + buf = tmp + size = v1 + } else { + if !(size != 0) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EINVAL) + return uintptr(0) + } + } + ret = X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getcwd), int64(buf), int64(size)))) + if ret < 0 { + return uintptr(0) + } + if ret == 0 || int32(*(*uint8)(unsafe.Pointer(buf))) != int32('/') { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOENT) + return uintptr(0) + } + if buf == tmp { + v3 = Xstrdup(tls, buf) + } else { + v3 = buf + } + return v3 +} + +func Xgetegid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getegid))) +} + +func Xgeteuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_geteuid))) +} + +func Xgetgid(tls *TLS) (r Tgid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getgid))) +} + +func Xgetgroups(tls *TLS, count int32, list uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v count=%v list=%v, (%v:)", tls, count, list, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_getgroups), int64(count), int64(list))))) +} + +func Xgethostname(tls *TLS, name uintptr, len1 Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v len1=%v, (%v:)", tls, name, len1, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(400) + defer tls.Free(400) + var i Tsize_t + var v2 uint8 + var v3 bool + var _ /* uts at bp+0 */ Tutsname1 + _, _, _ = i, v2, v3 + if Xuname(tls, bp) != 0 { + return -int32(1) + } + if len1 > uint64(65) { + len1 = uint64(65) + } + i = uint64(0) + for { + if v3 = i < len1; v3 { + v2 = *(*uint8)(unsafe.Pointer(bp + 65 + uintptr(i))) + *(*uint8)(unsafe.Pointer(name + uintptr(i))) = v2 + } + if !(v3 && v2 != 0) { + break + } + goto _1 + _1: + ; + i++ + } + if i != 0 && i == len1 { + *(*uint8)(unsafe.Pointer(name + uintptr(i-uint64(1)))) = uint8(0) + } + return 0 +} + +func Xgetlogin(tls *TLS) (r uintptr) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xgetenv(tls, __ccgo_ts+1927) +} + +func Xgetlogin_r(tls *TLS, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v name=%v size=%v, (%v:)", tls, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + var logname uintptr + _ = logname + logname = Xgetlogin(tls) + if !(logname != 0) { + return int32(ENXIO) + } /* or...? */ + if Xstrlen(tls, logname) >= size { + return int32(ERANGE) + } + Xstrcpy(tls, name, logname) + return 0 +} + +func Xgetpgid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getpgid), int64(pid))))) +} + +func Xgetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall1(tls, int64(SYS_getpgid), int64(Int32FromInt32(0)))) +} + +func Xgetpid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getpid))) +} + +func Xgetppid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall0(tls, int64(SYS_getppid))) +} + +func Xgetsid(tls *TLS, pid Tpid_t) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v pid=%v, (%v:)", tls, pid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_getsid), int64(pid))))) +} + +func Xgetuid(tls *TLS) (r Tuid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return uint32(X__syscall0(tls, int64(SYS_getuid))) +} + +func Xisatty(tls *TLS, fd int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r uint64 + var _ /* wsz at bp+0 */ Twinsize + _ = r + r = uint64(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_ioctl), int64(fd), int64(Int32FromInt32(TIOCGWINSZ)), int64(bp))))) + if r == uint64(0) { + return int32(1) + } + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) != int32(EBADF) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(ENOTTY) + } + return 0 +} + +func Xlchown(tls *TLS, path uintptr, uid Tuid_t, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v uid=%v gid=%v, (%v:)", tls, path, uid, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_lchown), int64(path), int64(uid), int64(gid))))) +} + +func Xlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_link), int64(existing), int64(new1))))) +} + +func Xlinkat(tls *TLS, fd1 int32, existing uintptr, fd2 int32, new1 uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd1=%v existing=%v fd2=%v new1=%v flag=%v, (%v:)", tls, fd1, existing, fd2, new1, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall5(tls, int64(SYS_linkat), int64(fd1), int64(existing), int64(fd2), int64(new1), int64(flag))))) +} + +func X__lseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_lseek), int64(fd), offset, int64(whence)))) +} + +func Xlseek(tls *TLS, fd int32, offset Toff_t, whence int32) (r Toff_t) { + if __ccgo_strace { + trc("tls=%v fd=%v offset=%v whence=%v, (%v:)", tls, fd, offset, whence, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__lseek(tls, fd, offset, whence) +} + +func Xnice(tls *TLS, inc int32) (r int32) { + if __ccgo_strace { + trc("tls=%v inc=%v, (%v:)", tls, inc, origin(2)) + defer func() { trc("-> %v", r) }() + } + var prio int32 + _ = prio + prio = inc + // Only query old priority if it can affect the result. + // This also avoids issues with integer overflow. + if inc > -Int32FromInt32(2)*Int32FromInt32(NZERO) && inc < Int32FromInt32(2)*Int32FromInt32(NZERO) { + prio += Xgetpriority(tls, PRIO_PROCESS, uint32(0)) + } + if prio > Int32FromInt32(NZERO)-Int32FromInt32(1) { + prio = Int32FromInt32(NZERO) - Int32FromInt32(1) + } + if prio < -int32(NZERO) { + prio = -int32(NZERO) + } + if Xsetpriority(tls, PRIO_PROCESS, uint32(0), prio) != 0 { + if *(*int32)(unsafe.Pointer(X__errno_location(tls))) == int32(EACCES) { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = int32(EPERM) + } + return -int32(1) + } else { + return prio + } + return r +} + +func Xpause(tls *TLS) (r int32) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pause), 0, 0, 0, 0, 0, 0)))) +} + +func Xpipe(tls *TLS, fd uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_pipe), int64(fd))))) +} + +func Xpipe2(tls *TLS, fd uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flag=%v, (%v:)", tls, fd, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + var ret int32 + _ = ret + if !(flag != 0) { + return Xpipe(tls, fd) + } + ret = int32(X__syscall2(tls, int64(SYS_pipe2), int64(fd), int64(flag))) + if ret != -int32(ENOSYS) { + return int32(X__syscall_ret(tls, uint64(ret))) + } + if flag & ^(Int32FromInt32(O_CLOEXEC)|Int32FromInt32(O_NONBLOCK)) != 0 { + return int32(X__syscall_ret(tls, uint64(-Int32FromInt32(EINVAL)))) + } + ret = Xpipe(tls, fd) + if ret != 0 { + return ret + } + if flag&int32(O_CLOEXEC) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFD)), int64(Int32FromInt32(FD_CLOEXEC))) + } + if flag&int32(O_NONBLOCK) != 0 { + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + X__syscall3(tls, int64(SYS_fcntl), int64(*(*int32)(unsafe.Pointer(fd + 1*4))), int64(Int32FromInt32(F_SETFL)), int64(Int32FromInt32(O_NONBLOCK))) + } + return 0 +} + +func Xposix_close(tls *TLS, fd int32, flags int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v flags=%v, (%v:)", tls, fd, flags, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xclose(tls, fd) +} + +func Xpread(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pread64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpreadv(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_preadv), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xpwrite(tls *TLS, fd int32, buf uintptr, size Tsize_t, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v size=%v ofs=%v, (%v:)", tls, fd, buf, size, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwrite64), int64(fd), int64(buf), int64(size), ofs, 0, 0))) +} + +func Xpwritev(tls *TLS, fd int32, iov uintptr, count int32, ofs Toff_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v ofs=%v, (%v:)", tls, fd, iov, count, ofs, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_pwritev), int64(fd), int64(iov), int64(count), ofs, ofs>>Int32FromInt32(32), 0))) +} + +func Xread(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_read), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xreadlink(tls *TLS, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v path=%v buf=%v bufsize=%v, (%v:)", tls, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall3(tls, int64(SYS_readlink), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadlinkat(tls *TLS, fd int32, path uintptr, buf uintptr, bufsize Tsize_t) (r1 Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v buf=%v bufsize=%v, (%v:)", tls, fd, path, buf, bufsize, origin(2)) + defer func() { trc("-> %v", r1) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var r int32 + var _ /* dummy at bp+0 */ [1]uint8 + _ = r + if !(bufsize != 0) { + buf = bp + bufsize = uint64(1) + } + r = int32(X__syscall4(tls, int64(SYS_readlinkat), int64(fd), int64(path), int64(buf), int64(bufsize))) + if buf == bp && r > 0 { + r = 0 + } + return X__syscall_ret(tls, uint64(r)) +} + +func Xreadv(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_readv), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func Xrenameat(tls *TLS, oldfd int32, old uintptr, newfd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v oldfd=%v old=%v newfd=%v new1=%v, (%v:)", tls, oldfd, old, newfd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall4(tls, int64(SYS_renameat), int64(oldfd), int64(old), int64(newfd), int64(new1))))) +} + +func Xrmdir(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_rmdir), int64(path))))) +} + +func Xsetgid(tls *TLS, gid Tgid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v gid=%v, (%v:)", tls, gid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setgid), int32(gid), 0, 0) +} + +func Xsetpgid(tls *TLS, pid Tpid_t, pgid Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v pid=%v pgid=%v, (%v:)", tls, pid, pgid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_setpgid), int64(pid), int64(pgid))))) +} + +func Xsetpgrp(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return Xsetpgid(tls, 0, 0) +} + +func Xsetsid(tls *TLS) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall0(tls, int64(SYS_setsid))))) +} + +func Xsetuid(tls *TLS, uid Tuid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v uid=%v, (%v:)", tls, uid, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__setxid(tls, int32(SYS_setuid), int32(uid), 0, 0) +} + +type Tctx2 = struct { + Fid int32 + Feid int32 + Fsid int32 + Fnr int32 + Fret int32 +} + +func _do_setxid(tls *TLS, p uintptr) { + var c uintptr + var ret int32 + _, _ = c, ret + c = p + if (*Tctx2)(unsafe.Pointer(c)).Fret < 0 { + return + } + ret = int32(X__syscall3(tls, int64((*Tctx2)(unsafe.Pointer(c)).Fnr), int64((*Tctx2)(unsafe.Pointer(c)).Fid), int64((*Tctx2)(unsafe.Pointer(c)).Feid), int64((*Tctx2)(unsafe.Pointer(c)).Fsid))) + if ret != 0 && !((*Tctx2)(unsafe.Pointer(c)).Fret != 0) { + /* If one thread fails to set ids after another has already + * succeeded, forcibly killing the process is the only safe + * thing to do. State is inconsistent and dangerous. Use + * SIGKILL because it is uncatchable. */ + X__block_all_sigs(tls, uintptr(0)) + X__syscall2(tls, int64(SYS_kill), X__syscall0(tls, int64(SYS_getpid)), int64(Int32FromInt32(SIGKILL))) + } + (*Tctx2)(unsafe.Pointer(c)).Fret = ret +} + +func X__setxid(tls *TLS, nr int32, id int32, eid int32, sid int32) (r int32) { + if __ccgo_strace { + trc("tls=%v nr=%v id=%v eid=%v sid=%v, (%v:)", tls, nr, id, eid, sid, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var v1 int32 + var _ /* c at bp+0 */ Tctx2 + _ = v1 + /* ret is initially nonzero so that failure of the first thread does not + * trigger the safety kill above. */ + *(*Tctx2)(unsafe.Pointer(bp)) = Tctx2{ + Fid: id, + Feid: eid, + Fsid: sid, + Fnr: nr, + Fret: int32(1), + } + ___synccall(tls, __ccgo_fp(_do_setxid), bp) + if (*(*Tctx2)(unsafe.Pointer(bp))).Fret > 0 { + v1 = -int32(EAGAIN) + } else { + v1 = (*(*Tctx2)(unsafe.Pointer(bp))).Fret + } + return int32(X__syscall_ret(tls, uint64(v1))) +} + +func Xsleep(tls *TLS, seconds uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v seconds=%v, (%v:)", tls, seconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(seconds), + } + if Xnanosleep(tls, bp, bp) != 0 { + return uint32((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec) + } + return uint32(0) +} + +func Xsymlink(tls *TLS, existing uintptr, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v new1=%v, (%v:)", tls, existing, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_symlink), int64(existing), int64(new1))))) +} + +func Xsymlinkat(tls *TLS, existing uintptr, fd int32, new1 uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v existing=%v fd=%v new1=%v, (%v:)", tls, existing, fd, new1, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_symlinkat), int64(existing), int64(fd), int64(new1))))) +} + +func Xsync(tls *TLS) { + if __ccgo_strace { + trc("tls=%v, (%v:)", tls, origin(2)) + } + X__syscall0(tls, int64(SYS_sync)) +} + +func Xtcgetpgrp(tls *TLS, fd int32) (r Tpid_t) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp at bp+0 */ int32 + if Xioctl(tls, fd, int32(TIOCGPGRP), VaList(bp+16, bp)) < 0 { + return -int32(1) + } + return *(*int32)(unsafe.Pointer(bp)) +} + +func Xtcsetpgrp(tls *TLS, fd int32, pgrp Tpid_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v pgrp=%v, (%v:)", tls, fd, pgrp, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(32) + defer tls.Free(32) + var _ /* pgrp_int at bp+0 */ int32 + *(*int32)(unsafe.Pointer(bp)) = pgrp + return Xioctl(tls, fd, int32(TIOCSPGRP), VaList(bp+16, bp)) +} + +func Xtruncate(tls *TLS, path uintptr, length Toff_t) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v length=%v, (%v:)", tls, path, length, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall2(tls, int64(SYS_truncate), int64(path), length)))) +} + +/* Support signed or unsigned plain-char */ + +/* Implementation choices... */ + +/* Arbitrary numbers... */ + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +func Xttyname(tls *TLS, fd int32) (r uintptr) { + if __ccgo_strace { + trc("tls=%v fd=%v, (%v:)", tls, fd, origin(2)) + defer func() { trc("-> %v", r) }() + } + var result, v1 int32 + _, _ = result, v1 + v1 = Xttyname_r(tls, fd, uintptr(unsafe.Pointer(&_buf10)), uint64(32)) + result = v1 + if v1 != 0 { + *(*int32)(unsafe.Pointer(X__errno_location(tls))) = result + return UintptrFromInt32(0) + } + return uintptr(unsafe.Pointer(&_buf10)) +} + +var _buf10 [32]uint8 + +func Xttyname_r(tls *TLS, fd int32, name uintptr, size Tsize_t) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v name=%v size=%v, (%v:)", tls, fd, name, size, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(320) + defer tls.Free(320) + var l Tssize_t + var _ /* procname at bp+288 */ [29]uint8 + var _ /* st1 at bp+0 */ Tstat + var _ /* st2 at bp+144 */ Tstat + _ = l + if !(Xisatty(tls, fd) != 0) { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + X__procfdname(tls, bp+288, uint32(fd)) + l = Xreadlink(tls, bp+288, name, size) + if l < 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } else { + if uint64(l) == size { + return int32(ERANGE) + } + } + *(*uint8)(unsafe.Pointer(name + uintptr(l))) = uint8(0) + if Xstat(tls, name, bp) != 0 || Xfstat(tls, fd, bp+144) != 0 { + return *(*int32)(unsafe.Pointer(X__errno_location(tls))) + } + if (*(*Tstat)(unsafe.Pointer(bp))).Fst_dev != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_dev || (*(*Tstat)(unsafe.Pointer(bp))).Fst_ino != (*(*Tstat)(unsafe.Pointer(bp + 144))).Fst_ino { + return int32(ENODEV) + } + return 0 +} + +func Xualarm(tls *TLS, value uint32, interval uint32) (r uint32) { + if __ccgo_strace { + trc("tls=%v value=%v interval=%v, (%v:)", tls, value, interval, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(64) + defer tls.Free(64) + var _ /* it at bp+0 */ Titimerval + var _ /* it_old at bp+32 */ Titimerval + *(*Titimerval)(unsafe.Pointer(bp)) = Titimerval{ + Fit_interval: Ttimeval{ + Ftv_usec: int64(interval), + }, + Fit_value: Ttimeval{ + Ftv_usec: int64(value), + }, + } + Xsetitimer(tls, ITIMER_REAL, bp, bp+32) + return uint32((*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_sec*int64(1000000) + (*(*Titimerval)(unsafe.Pointer(bp + 32))).Fit_value.Ftv_usec) +} + +func Xunlink(tls *TLS, path uintptr) (r int32) { + if __ccgo_strace { + trc("tls=%v path=%v, (%v:)", tls, path, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall1(tls, int64(SYS_unlink), int64(path))))) +} + +func Xunlinkat(tls *TLS, fd int32, path uintptr, flag int32) (r int32) { + if __ccgo_strace { + trc("tls=%v fd=%v path=%v flag=%v, (%v:)", tls, fd, path, flag, origin(2)) + defer func() { trc("-> %v", r) }() + } + return int32(X__syscall_ret(tls, uint64(X__syscall3(tls, int64(SYS_unlinkat), int64(fd), int64(path), int64(flag))))) +} + +func Xusleep(tls *TLS, useconds uint32) (r int32) { + if __ccgo_strace { + trc("tls=%v useconds=%v, (%v:)", tls, useconds, origin(2)) + defer func() { trc("-> %v", r) }() + } + bp := tls.Alloc(16) + defer tls.Free(16) + var _ /* tv at bp+0 */ Ttimespec + *(*Ttimespec)(unsafe.Pointer(bp)) = Ttimespec{ + Ftv_sec: int64(useconds / uint32(1000000)), + Ftv_nsec: int64(useconds % uint32(1000000) * uint32(1000)), + } + return Xnanosleep(tls, bp, bp) +} + +func Xwrite(tls *TLS, fd int32, buf uintptr, count Tsize_t) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v buf=%v count=%v, (%v:)", tls, fd, buf, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_write), int64(fd), int64(buf), int64(count), 0, 0, 0))) +} + +func Xwritev(tls *TLS, fd int32, iov uintptr, count int32) (r Tssize_t) { + if __ccgo_strace { + trc("tls=%v fd=%v iov=%v count=%v, (%v:)", tls, fd, iov, count, origin(2)) + defer func() { trc("-> %v", r) }() + } + return X__syscall_ret(tls, uint64(___syscall_cp(tls, int64(SYS_writev), int64(fd), int64(iov), int64(count), 0, 0, 0))) +} + +func __ccgo_fp(f interface{}) uintptr { + type iface [2]uintptr + return (*iface)(unsafe.Pointer(&f))[1] +} + +var X__abort_lock [1]int32 + +var X__at_quick_exit_lockptr = uintptr(unsafe.Pointer(&_lock)) + +var X__c_dot_utf8 = t__locale_map{ + Fmap1: uintptr(unsafe.Pointer(&_empty_mo)), + Fmap_size: uint64(20), + Fname: [24]uint8{'C', '.', 'U', 'T', 'F', '-', '8'}, +} + +var X__c_dot_utf8_locale = t__locale_struct{ + Fcat: [6]uintptr{ + 0: uintptr(unsafe.Pointer(&X__c_dot_utf8)), + }, +} + +var X__c_locale = t__locale_struct{} + +var Xdaylight int32 + +var X__eintr_valid_flag int32 + +var Xenviron uintptr + +var X__exp2f_data = Texp2f_data{ + Ftab: [32]Tuint64_t{ + 0: uint64(0x3ff0000000000000), + 1: uint64(0x3fefd9b0d3158574), + 2: uint64(0x3fefb5586cf9890f), + 3: uint64(0x3fef9301d0125b51), + 4: uint64(0x3fef72b83c7d517b), + 5: uint64(0x3fef54873168b9aa), + 6: uint64(0x3fef387a6e756238), + 7: uint64(0x3fef1e9df51fdee1), + 8: uint64(0x3fef06fe0a31b715), + 9: uint64(0x3feef1a7373aa9cb), + 10: uint64(0x3feedea64c123422), + 11: uint64(0x3feece086061892d), + 12: uint64(0x3feebfdad5362a27), + 13: uint64(0x3feeb42b569d4f82), + 14: uint64(0x3feeab07dd485429), + 15: uint64(0x3feea47eb03a5585), + 16: uint64(0x3feea09e667f3bcd), + 17: uint64(0x3fee9f75e8ec5f74), + 18: uint64(0x3feea11473eb0187), + 19: uint64(0x3feea589994cce13), + 20: uint64(0x3feeace5422aa0db), + 21: uint64(0x3feeb737b0cdc5e5), + 22: uint64(0x3feec49182a3f090), + 23: uint64(0x3feed503b23e255d), + 24: uint64(0x3feee89f995ad3ad), + 25: uint64(0x3feeff76f2fb5e47), + 26: uint64(0x3fef199bdd85529c), + 27: uint64(0x3fef3720dcef9069), + 28: uint64(0x3fef5818dcfba487), + 29: uint64(0x3fef7c97337b9b5f), + 30: uint64(0x3fefa4afa2a490da), + 31: uint64(0x3fefd0765b6e4540), + }, + Fshift_scaled: Float64FromFloat64(6.755399441055744e+15) / float64(Int32FromInt32(1)<>Int32FromInt32(6) | Uint32FromInt32(0x0), + 31: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x1), + 32: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x2), + 33: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x3), + 34: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x4), + 35: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x5), + 36: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x6), + 37: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x7), + 38: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x8), + 39: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0x9), + 40: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xa), + 41: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xb), + 42: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xc), + 43: (Uint32FromUint32(0x40)-Uint32FromInt32(0xa0))<>Int32FromInt32(6) | Uint32FromInt32(0xd), + 44: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xe), + 45: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | Uint32FromInt32(0xf), + 46: (Uint32FromUint32(0)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x0), + 47: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x1), + 48: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x2), + 49: (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x3), + 50: (Uint32FromUint32(0x40)-Uint32FromInt32(0x90))<>Int32FromInt32(6) | (Uint32FromUint32(0x40)-Uint32FromInt32(0xc0))<>Int32FromInt32(12) | Uint32FromInt32(0x4), +} + +var X__gettext_lockptr = uintptr(unsafe.Pointer(&_lock1)) + +var X__hwcap Tsize_t + +var X__libc t__libc + +var X__libc_version = [6]uint8{'1', '.', '2', '.', '5'} + +var X__locale_lock [1]int32 + +var X__locale_lockptr = uintptr(unsafe.Pointer(&X__locale_lock)) + +var X__log2_data = Tlog2_data{ + Finvln2hi: float64(1.4426950407214463), + Finvln2lo: float64(1.6751713164886512e-10), + Fpoly: [6]float64{ + 0: -Float64FromFloat64(0.7213475204444882), + 1: float64(0.4808983469629985), + 2: -Float64FromFloat64(0.36067375954075914), + 3: float64(0.2885390073180969), + 4: -Float64FromFloat64(0.2404693555628422), + 5: float64(0.2061202382173603), + }, + Fpoly1: [10]float64{ + 0: -Float64FromFloat64(0.7213475204444817), + 1: float64(0.48089834696298744), + 2: -Float64FromFloat64(0.360673760222145), + 3: float64(0.2885390081805197), + 4: -Float64FromFloat64(0.24044917405728863), + 5: float64(0.2060992861022954), + 6: -Float64FromFloat64(0.18033596705327856), + 7: float64(0.1603032746063156), + 8: -Float64FromFloat64(0.14483316576701266), + 9: float64(0.13046826811283835), + }, + Ftab: [64]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4463276106642393), + Flogc: -Float64FromFloat64(0.5323943771486483), + }, + 1: { + Finvc: float64(1.4301675812282968), + Flogc: -Float64FromFloat64(0.516184206053822), + }, + 2: { + Finvc: float64(1.4143648676229383), + Flogc: -Float64FromFloat64(0.5001543441974263), + }, + 3: { + Finvc: float64(1.3989068970611538), + Flogc: -Float64FromFloat64(0.4842999484799293), + }, + 4: { + Finvc: float64(1.3837838957784339), + Flogc: -Float64FromFloat64(0.46861865624623533), + }, + 5: { + Finvc: float64(1.368983882697786), + Flogc: -Float64FromFloat64(0.4531054615783887), + }, + 6: { + Finvc: float64(1.3544972916324536), + Flogc: -Float64FromFloat64(0.43775750882059583), + }, + 7: { + Finvc: float64(1.3403139676437443), + Flogc: -Float64FromFloat64(0.4225709906127122), + }, + 8: { + Finvc: float64(1.3264249304188642), + Flogc: -Float64FromFloat64(0.40754302793970965), + }, + 9: { + Finvc: float64(1.3128203652112156), + Flogc: -Float64FromFloat64(0.3926695240384106), + }, + 10: { + Finvc: float64(1.299492412370217), + Flogc: -Float64FromFloat64(0.3779482100565019), + }, + 11: { + Finvc: float64(1.28643198385998), + Flogc: -Float64FromFloat64(0.36337518101890964), + }, + 12: { + Finvc: float64(1.2736319291846832), + Flogc: -Float64FromFloat64(0.3489484089425332), + }, + 13: { + Finvc: float64(1.2610838968062879), + Flogc: -Float64FromFloat64(0.33466425780738973), + }, + 14: { + Finvc: float64(1.248780314313572), + Flogc: -Float64FromFloat64(0.3205197000629596), + }, + 15: { + Finvc: float64(1.2367150450059063), + Flogc: -Float64FromFloat64(0.3065131231801388), + }, + 16: { + Finvc: float64(1.2248804968401878), + Flogc: -Float64FromFloat64(0.2926410022678283), + }, + 17: { + Finvc: float64(1.2132702353497795), + Flogc: -Float64FromFloat64(0.2789009220805383), + }, + 18: { + Finvc: float64(1.2018780785715362), + Flogc: -Float64FromFloat64(0.2652905529862437), + }, + 19: { + Finvc: float64(1.190697765061355), + Flogc: -Float64FromFloat64(0.2518072602367738), + }, + 20: { + Finvc: float64(1.1797235410550593), + Flogc: -Float64FromFloat64(0.23844881494437686), + }, + 21: { + Finvc: float64(1.1689498986205256), + Flogc: -Float64FromFloat64(0.22521309705462045), + }, + 22: { + Finvc: float64(1.158371137408455), + Flogc: -Float64FromFloat64(0.21209756102439314), + }, + 23: { + Finvc: float64(1.1479820146386086), + Flogc: -Float64FromFloat64(0.1991000395789797), + }, + 24: { + Finvc: float64(1.1377775576851088), + Flogc: -Float64FromFloat64(0.18621852970682085), + }, + 25: { + Finvc: float64(1.127753150630225), + Flogc: -Float64FromFloat64(0.17345131655361), + }, + 26: { + Finvc: float64(1.1179037012282074), + Flogc: -Float64FromFloat64(0.16079591649577196), + }, + 27: { + Finvc: float64(1.1082251967632821), + Flogc: -Float64FromFloat64(0.14825107384353942), + }, + 28: { + Finvc: float64(1.098712461056607), + Flogc: -Float64FromFloat64(0.13581387465410444), + }, + 29: { + Finvc: float64(1.0893619091634283), + Flogc: -Float64FromFloat64(0.12348332762257996), + }, + 30: { + Finvc: float64(1.0801689912316736), + Flogc: -Float64FromFloat64(0.11125703807351783), + }, + 31: { + Finvc: float64(1.071129489697672), + Flogc: -Float64FromFloat64(0.09913289918449664), + }, + 32: { + Finvc: float64(1.0622406576750423), + Flogc: -Float64FromFloat64(0.08711065531497297), + }, + 33: { + Finvc: float64(1.0534977607927976), + Flogc: -Float64FromFloat64(0.07518724771330199), + }, + 34: { + Finvc: float64(1.044897877982342), + Flogc: -Float64FromFloat64(0.06336194888240243), + }, + 35: { + Finvc: float64(1.0364370289499079), + Flogc: -Float64FromFloat64(0.0516324649456692), + }, + 36: { + Finvc: float64(1.0281122132034575), + Flogc: -Float64FromFloat64(0.039997735929773626), + }, + 37: { + Finvc: float64(1.0199202450036955), + Flogc: -Float64FromFloat64(0.028456341769015125), + }, + 38: { + Finvc: float64(1.0118577522306755), + Flogc: -Float64FromFloat64(0.017006489068080555), + }, + 39: { + Finvc: float64(1.003921649236766), + Flogc: -Float64FromFloat64(0.005646678981520381), + }, + 40: { + Finvc: float64(0.9922480467550775), + Flogc: float64(0.011227277611396858), + }, + 41: { + Finvc: float64(0.9770993366178549), + Flogc: float64(0.033422853921138085), + }, + 42: { + Finvc: float64(0.9624059787315814), + Flogc: float64(0.05528248992573026), + }, + 43: { + Finvc: float64(0.9481480598286369), + Flogc: float64(0.07681573143713649), + }, + 44: { + Finvc: float64(0.9343065931261065), + Flogc: float64(0.09803204623631245), + }, + 45: { + Finvc: float64(0.9208633936884979), + Flogc: float64(0.11894094059630334), + }, + 46: { + Finvc: float64(0.9078013641840602), + Flogc: float64(0.13955143862290242), + }, + 47: { + Finvc: float64(0.8951048181512927), + Flogc: float64(0.15987146080919956), + }, + 48: { + Finvc: float64(0.882758574260473), + Flogc: float64(0.17990916589428707), + }, + 49: { + Finvc: float64(0.8707481902241709), + Flogc: float64(0.19967252559081317), + }, + 50: { + Finvc: float64(0.8590602881746972), + Flogc: float64(0.2191687127685782), + }, + 51: { + Finvc: float64(0.8476822044336688), + Flogc: float64(0.23840459427242422), + }, + 52: { + Finvc: float64(0.8366013284053287), + Flogc: float64(0.25738780610663525), + }, + 53: { + Finvc: float64(0.8258064913621258), + Flogc: float64(0.27612433583180973), + }, + 54: { + Finvc: float64(0.8152865101579193), + Flogc: float64(0.2946209507022104), + }, + 55: { + Finvc: float64(0.8050314363208223), + Flogc: float64(0.31288297359969874), + }, + 56: { + Finvc: float64(0.7950310492640542), + Flogc: float64(0.33091689015759584), + }, + 57: { + Finvc: float64(0.7852760432487271), + Flogc: float64(0.3487282100279572), + }, + 58: { + Finvc: float64(0.7757575660314712), + Flogc: float64(0.36632223233368677), + }, + 59: { + Finvc: float64(0.7664670566588946), + Flogc: float64(0.383704309808536), + }, + 60: { + Finvc: float64(0.7573965608078645), + Flogc: float64(0.4008792246509074), + }, + 61: { + Finvc: float64(0.7485380168514022), + Flogc: float64(0.41785250494945103), + }, + 62: { + Finvc: float64(0.7398844213755009), + Flogc: float64(0.4346281724315304), + }, + 63: { + Finvc: float64(0.7314286113178112), + Flogc: float64(0.45121103315341315), + }, + }, +} + +var X__log2f_data = Tlog2f_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.42257122959194704), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.3633754347673556), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.30651309567405577), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.25180720160537634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.19910014943794563), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.14825100623281615), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.09913323807318392), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.051632812977629436), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.07508531937943004), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.15987125980713107), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.2384046664317681), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.31288288605863257), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.38370422656453185), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.451211048935815), + }, + }, + Fpoly: [4]float64{ + 0: -Float64FromFloat64(0.36051725506874704), + 1: float64(0.4811247078767291), + 2: -Float64FromFloat64(0.7213476299867769), + 3: float64(1.4426950186867042), + }, +} + +var X__log_data = Tlog_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [5]float64{ + 0: -Float64FromFloat64(0.5000000000000001), + 1: float64(0.33333333331825593), + 2: -Float64FromFloat64(0.2499999999622955), + 3: float64(0.20000304511814496), + 4: -Float64FromFloat64(0.16667054827627667), + }, + Fpoly1: [11]float64{ + 0: -Float64FromFloat64(0.5), + 1: float64(0.3333333333333352), + 2: -Float64FromFloat64(0.24999999999998432), + 3: float64(0.19999999999320328), + 4: -Float64FromFloat64(0.16666666669929706), + 5: float64(0.14285715076560868), + 6: -Float64FromFloat64(0.12499997863982555), + 7: float64(0.11110712032936046), + 8: -Float64FromFloat64(0.10000486757818193), + 9: float64(0.09181994006195467), + 10: -Float64FromFloat64(0.08328363062289341), + }, + Ftab: [128]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.4504249240398293), + Flogc: -Float64FromFloat64(0.3718565645633589), + }, + 1: { + Finvc: float64(1.442253508327276), + Flogc: -Float64FromFloat64(0.36620682668944937), + }, + 2: { + Finvc: float64(1.4341736174350004), + Flogc: -Float64FromFloat64(0.3605888069791945), + }, + 3: { + Finvc: float64(1.426183816329995), + Flogc: -Float64FromFloat64(0.3550022171419869), + }, + 4: { + Finvc: float64(1.4182825527052965), + Flogc: -Float64FromFloat64(0.34944666968829097), + }, + 5: { + Finvc: float64(1.4104682921759335), + Flogc: -Float64FromFloat64(0.3439217713603284), + }, + 6: { + Finvc: float64(1.4027396147468003), + Flogc: -Float64FromFloat64(0.3384271921261188), + }, + 7: { + Finvc: float64(1.3950954438932313), + Flogc: -Float64FromFloat64(0.332962831494342), + }, + 8: { + Finvc: float64(1.3875338232485754), + Flogc: -Float64FromFloat64(0.32752794345742586), + }, + 9: { + Finvc: float64(1.3800539211058593), + Flogc: -Float64FromFloat64(0.32212257167088865), + }, + 10: { + Finvc: float64(1.3726542695419708), + Flogc: -Float64FromFloat64(0.3167462884799761), + }, + 11: { + Finvc: float64(1.3653332798446802), + Flogc: -Float64FromFloat64(0.3113985598928366), + }, + 12: { + Finvc: float64(1.358090204587874), + Flogc: -Float64FromFloat64(0.3060794515165526), + }, + 13: { + Finvc: float64(1.3509234892132138), + Flogc: -Float64FromFloat64(0.300788424667644), + }, + 14: { + Finvc: float64(1.3438320840699889), + Flogc: -Float64FromFloat64(0.2955252968476998), + }, + 15: { + Finvc: float64(1.3368146974742003), + Flogc: -Float64FromFloat64(0.29028969275850613), + }, + 16: { + Finvc: float64(1.329870114677736), + Flogc: -Float64FromFloat64(0.2850812793277555), + }, + 17: { + Finvc: float64(1.322997339161106), + Flogc: -Float64FromFloat64(0.27989987391470095), + }, + 18: { + Finvc: float64(1.316195352741367), + Flogc: -Float64FromFloat64(0.27474526621870154), + }, + 19: { + Finvc: float64(1.3094628125672239), + Flogc: -Float64FromFloat64(0.2696169863701243), + }, + 20: { + Finvc: float64(1.3027990455471041), + Flogc: -Float64FromFloat64(0.26451506180308115), + }, + 21: { + Finvc: float64(1.2962024229438942), + Flogc: -Float64FromFloat64(0.2594387762767383), + }, + 22: { + Finvc: float64(1.2896726275815547), + Flogc: -Float64FromFloat64(0.2543884090981692), + }, + 23: { + Finvc: float64(1.2832080305745537), + Flogc: -Float64FromFloat64(0.24936321635129843), + }, + 24: { + Finvc: float64(1.276807885983376), + Flogc: -Float64FromFloat64(0.24436312405975968), + }, + 25: { + Finvc: float64(1.2704714060687552), + Flogc: -Float64FromFloat64(0.23938801747897287), + }, + 26: { + Finvc: float64(1.2641976054949482), + Flogc: -Float64FromFloat64(0.23443761696705678), + }, + 27: { + Finvc: float64(1.257985357514882), + Flogc: -Float64FromFloat64(0.22951151871518505), + }, + 28: { + Finvc: float64(1.2518337750655457), + Flogc: -Float64FromFloat64(0.2246094963439873), + }, + 29: { + Finvc: float64(1.2457421919097305), + Flogc: -Float64FromFloat64(0.21973149037705753), + }, + 30: { + Finvc: float64(1.2397094966625508), + Flogc: -Float64FromFloat64(0.2148770752847895), + }, + 31: { + Finvc: float64(1.2337348463589233), + Flogc: -Float64FromFloat64(0.210046029103637), + }, + 32: { + Finvc: float64(1.2278176973028803), + Flogc: -Float64FromFloat64(0.20523836373934046), + }, + 33: { + Finvc: float64(1.2219570190618474), + Flogc: -Float64FromFloat64(0.20045368751368642), + }, + 34: { + Finvc: float64(1.2161519732977757), + Flogc: -Float64FromFloat64(0.1956917537758045), + }, + 35: { + Finvc: float64(1.2104018095009725), + Flogc: -Float64FromFloat64(0.19095237845203883), + }, + 36: { + Finvc: float64(1.204705805718973), + Flogc: -Float64FromFloat64(0.18623539250290833), + }, + 37: { + Finvc: float64(1.1990631185441964), + Flogc: -Float64FromFloat64(0.18154051731551135), + }, + 38: { + Finvc: float64(1.1934733004462308), + Flogc: -Float64FromFloat64(0.1768677957431919), + }, + 39: { + Finvc: float64(1.1879350812847385), + Flogc: -Float64FromFloat64(0.17221657406412305), + }, + 40: { + Finvc: float64(1.1824481322833125), + Flogc: -Float64FromFloat64(0.16758697765942543), + }, + 41: { + Finvc: float64(1.1770114976921955), + Flogc: -Float64FromFloat64(0.16297859687290384), + }, + 42: { + Finvc: float64(1.1716248121809465), + Flogc: -Float64FromFloat64(0.15839151377804228), + }, + 43: { + Finvc: float64(1.1662869231674715), + Flogc: -Float64FromFloat64(0.15382513241456763), + }, + 44: { + Finvc: float64(1.1609977486762766), + Flogc: -Float64FromFloat64(0.14927976358922024), + }, + 45: { + Finvc: float64(1.1557563220795803), + Flogc: -Float64FromFloat64(0.14475495398119165), + }, + 46: { + Finvc: float64(1.1505619105480347), + Flogc: -Float64FromFloat64(0.14025044090817573), + }, + 47: { + Finvc: float64(1.1454138888505974), + Flogc: -Float64FromFloat64(0.1357660466685502), + }, + 48: { + Finvc: float64(1.140311877374656), + Flogc: -Float64FromFloat64(0.1313018016355727), + }, + 49: { + Finvc: float64(1.1352550225747513), + Flogc: -Float64FromFloat64(0.12685731518763532), + }, + 50: { + Finvc: float64(1.1302429094831266), + Flogc: -Float64FromFloat64(0.1224325737671279), + }, + 51: { + Finvc: float64(1.1252747693068048), + Flogc: -Float64FromFloat64(0.11802724521862729), + }, + 52: { + Finvc: float64(1.1203501571039876), + Flogc: -Float64FromFloat64(0.11364127671663482), + }, + 53: { + Finvc: float64(1.1154683327680124), + Flogc: -Float64FromFloat64(0.10927434611278386), + }, + 54: { + Finvc: float64(1.1106291463292157), + Flogc: -Float64FromFloat64(0.10492665324943573), + }, + 55: { + Finvc: float64(1.1058315813301596), + Flogc: -Float64FromFloat64(0.10059761422644442), + }, + 56: { + Finvc: float64(1.1010752177696026), + Flogc: -Float64FromFloat64(0.09628717309055901), + }, + 57: { + Finvc: float64(1.0963597137952512), + Flogc: -Float64FromFloat64(0.09199534069557558), + }, + 58: { + Finvc: float64(1.0916844827550398), + Flogc: -Float64FromFloat64(0.08772190036688698), + }, + 59: { + Finvc: float64(1.0870487291277784), + Flogc: -Float64FromFloat64(0.08346643613867855), + }, + 60: { + Finvc: float64(1.082452357388312), + Flogc: -Float64FromFloat64(0.07922916827544668), + }, + 61: { + Finvc: float64(1.0778948225025884), + Flogc: -Float64FromFloat64(0.0750099004750382), + }, + 62: { + Finvc: float64(1.0733751731601076), + Flogc: -Float64FromFloat64(0.07080805133352897), + }, + 63: { + Finvc: float64(1.068893585073351), + Flogc: -Float64FromFloat64(0.06662408085151128), + }, + 64: { + Finvc: float64(1.0644491706655506), + Flogc: -Float64FromFloat64(0.06245745471915143), + }, + 65: { + Finvc: float64(1.0600414846328305), + Flogc: -Float64FromFloat64(0.0583080438042316), + }, + 66: { + Finvc: float64(1.0556701316181605), + Flogc: -Float64FromFloat64(0.05417576112313327), + }, + 67: { + Finvc: float64(1.051334750556926), + Flogc: -Float64FromFloat64(0.050060547896805474), + }, + 68: { + Finvc: float64(1.0470347288442157), + Flogc: -Float64FromFloat64(0.045962101199052086), + }, + 69: { + Finvc: float64(1.0427699229652954), + Flogc: -Float64FromFloat64(0.04188056008865715), + }, + 70: { + Finvc: float64(1.0385395013738175), + Flogc: -Float64FromFloat64(0.03781540056183985), + }, + 71: { + Finvc: float64(1.034343418940345), + Flogc: -Float64FromFloat64(0.03376684757915882), + }, + 72: { + Finvc: float64(1.0301811073173315), + Flogc: -Float64FromFloat64(0.029734619131772888), + }, + 73: { + Finvc: float64(1.026052043621297), + Flogc: -Float64FromFloat64(0.025718470239212365), + }, + 74: { + Finvc: float64(1.0219561082336197), + Flogc: -Float64FromFloat64(0.021718543925430822), + }, + 75: { + Finvc: float64(1.0178926505784922), + Flogc: -Float64FromFloat64(0.01773446126981071), + }, + 76: { + Finvc: float64(1.0138614436244586), + Flogc: -Float64FromFloat64(0.013766252464051831), + }, + 77: { + Finvc: float64(1.0098620186501341), + Flogc: -Float64FromFloat64(0.009813706322574944), + }, + 78: { + Finvc: float64(1.0058938559734134), + Flogc: -Float64FromFloat64(0.005876555150052809), + }, + 79: { + Finvc: float64(1.00195696235014), + Flogc: -Float64FromFloat64(0.0019550499938532084), + }, + 80: { + Finvc: float64(0.9961089923088509), + Flogc: float64(0.0038985973556009412), + }, + 81: { + Finvc: float64(0.9884170338185201), + Flogc: float64(0.011650571286395461), + }, + 82: { + Finvc: float64(0.9808429191005297), + Flogc: float64(0.019342955478919066), + }, + 83: { + Finvc: float64(0.9733840169987446), + Flogc: float64(0.0269766014846482), + }, + 84: { + Finvc: float64(0.9660377568876556), + Flogc: float64(0.034552359728422744), + }, + 85: { + Finvc: float64(0.9588014945307369), + Flogc: float64(0.04207121767183253), + }, + 86: { + Finvc: float64(0.9516728569073111), + Flogc: float64(0.049533940950141186), + }, + 87: { + Finvc: float64(0.9446494635965822), + Flogc: float64(0.056941358295944156), + }, + 88: { + Finvc: float64(0.9377288993026223), + Flogc: float64(0.06429439168346107), + }, + 89: { + Finvc: float64(0.9309091073790681), + Flogc: float64(0.0715936354946507), + }, + 90: { + Finvc: float64(0.924187681612722), + Flogc: float64(0.07884010933776153), + }, + 91: { + Finvc: float64(0.9175626765599192), + Flogc: float64(0.08603438905970506), + }, + 92: { + Finvc: float64(0.9110320403624034), + Flogc: float64(0.09317721180013905), + }, + 93: { + Finvc: float64(0.9045935839762024), + Flogc: float64(0.10026951462748457), + }, + 94: { + Finvc: float64(0.8982456375922825), + Flogc: float64(0.10731170956330516), + }, + 95: { + Finvc: float64(0.8919860966782501), + Flogc: float64(0.11430473320717738), + }, + 96: { + Finvc: float64(0.8858131121185129), + Flogc: float64(0.12124928503033061), + }, + 97: { + Finvc: float64(0.879725075760676), + Flogc: float64(0.12814583422959913), + }, + 98: { + Finvc: float64(0.8737201372634685), + Flogc: float64(0.1349951636851756), + }, + 99: { + Finvc: float64(0.8677966405782273), + Flogc: float64(0.1417978768189414), + }, + 100: { + Finvc: float64(0.8619528050060739), + Flogc: float64(0.14855476039031146), + }, + 101: { + Finvc: float64(0.8561872354420692), + Flogc: float64(0.1552661937658968), + }, + 102: { + Finvc: float64(0.8504983927816893), + Flogc: float64(0.16193275688146969), + }, + 103: { + Finvc: float64(0.8448844572790304), + Flogc: float64(0.16855539792220497), + }, + 104: { + Finvc: float64(0.8393442741575965), + Flogc: float64(0.1751343179947753), + }, + 105: { + Finvc: float64(0.8338762249349438), + Flogc: float64(0.1816702989864325), + }, + 106: { + Finvc: float64(0.8284789320557778), + Flogc: float64(0.18816387146023317), + }, + 107: { + Finvc: float64(0.8231510800065832), + Flogc: float64(0.1946155228479256), + }, + 108: { + Finvc: float64(0.8178913903778707), + Flogc: float64(0.20102572579389744), + }, + 109: { + Finvc: float64(0.8126984007245374), + Flogc: float64(0.2073952090795501), + }, + 110: { + Finvc: float64(0.8075710029460227), + Flogc: float64(0.21372429840596396), + }, + 111: { + Finvc: float64(0.8025078881160415), + Flogc: float64(0.2200135945981856), + }, + 112: { + Finvc: float64(0.7975077379364331), + Flogc: float64(0.22626374162859975), + }, + 113: { + Finvc: float64(0.792569604966373), + Flogc: float64(0.23247494747693054), + }, + 114: { + Finvc: float64(0.7876923641254114), + Flogc: float64(0.23864766620658884), + }, + 115: { + Finvc: float64(0.7828746724940998), + Flogc: float64(0.24478265647405806), + }, + 116: { + Finvc: float64(0.7781155388790811), + Flogc: float64(0.25088025827324145), + }, + 117: { + Finvc: float64(0.7734139557869777), + Flogc: float64(0.2569408552510595), + }, + 118: { + Finvc: float64(0.7687687179914933), + Flogc: float64(0.26296511155101143), + }, + 119: { + Finvc: float64(0.7641790698041854), + Flogc: float64(0.2689531327189343), + }, + 120: { + Finvc: float64(0.7596438763692399), + Flogc: float64(0.27490553924610595), + }, + 121: { + Finvc: float64(0.7551621951078668), + Flogc: float64(0.2808227248478943), + }, + 122: { + Finvc: float64(0.7507331780216866), + Flogc: float64(0.286704979267256), + }, + 123: { + Finvc: float64(0.7463557196361751), + Flogc: float64(0.29255295645509705), + }, + 124: { + Finvc: float64(0.7420289364869653), + Flogc: float64(0.2983670386142876), + }, + 125: { + Finvc: float64(0.7377521537065876), + Flogc: float64(0.30414734587282055), + }, + 126: { + Finvc: float64(0.7335242966002608), + Flogc: float64(0.30989455774829366), + }, + 127: { + Finvc: float64(0.729344777457841), + Flogc: float64(0.31560871301871884), + }, + }, +} + +var X__logf_data = Tlogf_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.33569133332882284), + }, + 1: { + Finvc: float64(1.3403141896637998), + Flogc: -Float64FromFloat64(0.2929040563774074), + }, + 2: { + Finvc: float64(1.286432210124115), + Flogc: -Float64FromFloat64(0.2518726580937369), + }, + 3: { + Finvc: float64(1.2367150214269895), + Flogc: -Float64FromFloat64(0.21245868807117255), + }, + 4: { + Finvc: float64(1.1906977166711752), + Flogc: -Float64FromFloat64(0.17453945183745634), + }, + 5: { + Finvc: float64(1.1479821020556429), + Flogc: -Float64FromFloat64(0.1380057072319758), + }, + 6: { + Finvc: float64(1.1082251448272158), + Flogc: -Float64FromFloat64(0.10275976698545139), + }, + 7: { + Finvc: float64(1.0711297413057381), + Flogc: -Float64FromFloat64(0.06871392447020525), + }, + 8: { + Finvc: float64(1.036437278977283), + Flogc: -Float64FromFloat64(0.0357891387398228), + }, + 9: { + Finvc: float64(1), + }, + 10: { + Finvc: float64(0.9492859795739057), + Flogc: float64(0.05204517742929496), + }, + 11: { + Finvc: float64(0.8951049428609004), + Flogc: float64(0.11081431298787942), + }, + 12: { + Finvc: float64(0.8476821620351103), + Flogc: float64(0.1652495223695143), + }, + 13: { + Finvc: float64(0.8050314851692001), + Flogc: float64(0.21687389031699977), + }, + 14: { + Finvc: float64(0.7664671008843108), + Flogc: float64(0.2659635028121397), + }, + 15: { + Finvc: float64(0.731428603316328), + Flogc: float64(0.3127556664073557), + }, + }, + Fln2: float64(0.6931471805599453), + Fpoly: [3]float64{ + 0: -Float64FromFloat64(0.25089342214237154), + 1: float64(0.333456765744066), + 2: -Float64FromFloat64(0.4999997485802103), + }, +} + +var X__optpos int32 + +var Xoptreset int32 + +var X__pow_log_data = Tpow_log_data{ + Fln2hi: float64(0.6931471805598903), + Fln2lo: float64(5.497923018708371e-14), + Fpoly: [7]float64{ + 0: -Float64FromFloat64(0.5), + 1: Float64FromFloat64(0.3333333333333339) * float64(-Int32FromInt32(2)), + 2: -Float64FromFloat64(0.25000000000000033) * float64(-Int32FromInt32(2)), + 3: Float64FromFloat64(0.1999999998830994) * Float64FromInt32(4), + 4: -Float64FromFloat64(0.16666666658719348) * Float64FromInt32(4), + 5: Float64FromFloat64(0.14286370355743763) * float64(-Int32FromInt32(8)), + 6: -Float64FromFloat64(0.12500519079594427) * float64(-Int32FromInt32(8)), + }, + Ftab: [128]struct { + Finvc float64 + Fpad float64 + Flogc float64 + Flogctail float64 + }{ + 0: { + Finvc: float64(1.4140625), + Flogc: -Float64FromFloat64(0.3464667673462145), + Flogctail: float64(5.929407345889625e-15), + }, + 1: { + Finvc: float64(1.40625), + Flogc: -Float64FromFloat64(0.34092658697056777), + Flogctail: -Float64FromFloat64(2.544157440035963e-14), + }, + 2: { + Finvc: float64(1.3984375), + Flogc: -Float64FromFloat64(0.3353555419211034), + Flogctail: -Float64FromFloat64(3.443525940775045e-14), + }, + 3: { + Finvc: float64(1.390625), + Flogc: -Float64FromFloat64(0.3297532863724655), + Flogctail: -Float64FromFloat64(2.500123826022799e-15), + }, + 4: { + Finvc: float64(1.3828125), + Flogc: -Float64FromFloat64(0.32411946865420305), + Flogctail: -Float64FromFloat64(8.929337133850617e-15), + }, + 5: { + Finvc: float64(1.375), + Flogc: -Float64FromFloat64(0.31845373111855224), + Flogctail: float64(1.7625431312172662e-14), + }, + 6: { + Finvc: float64(1.3671875), + Flogc: -Float64FromFloat64(0.31275571000389846), + Flogctail: float64(1.5688303180062087e-15), + }, + 7: { + Finvc: float64(1.359375), + Flogc: -Float64FromFloat64(0.3070250352949415), + Flogctail: float64(2.9655274673691784e-14), + }, + 8: { + Finvc: float64(1.3515625), + Flogc: -Float64FromFloat64(0.3012613305781997), + Flogctail: float64(3.7923164802093147e-14), + }, + 9: { + Finvc: float64(1.34375), + Flogc: -Float64FromFloat64(0.2954642128938758), + Flogctail: float64(3.993416384387844e-14), + }, + 10: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 11: { + Finvc: float64(1.3359375), + Flogc: -Float64FromFloat64(0.28963329258306203), + Flogctail: float64(1.9352855826489123e-14), + }, + 12: { + Finvc: float64(1.328125), + Flogc: -Float64FromFloat64(0.28376817313062475), + Flogctail: -Float64FromFloat64(1.9852665484979036e-14), + }, + 13: { + Finvc: float64(1.3203125), + Flogc: -Float64FromFloat64(0.27786845100342816), + Flogctail: -Float64FromFloat64(2.814323765595281e-14), + }, + 14: { + Finvc: float64(1.3125), + Flogc: -Float64FromFloat64(0.2719337154836694), + Flogctail: float64(2.7643769993528702e-14), + }, + 15: { + Finvc: float64(1.3046875), + Flogc: -Float64FromFloat64(0.2659635484970977), + Flogctail: -Float64FromFloat64(4.025092402293806e-14), + }, + 16: { + Finvc: float64(1.296875), + Flogc: -Float64FromFloat64(0.25995752443691345), + Flogctail: -Float64FromFloat64(1.2621729398885316e-14), + }, + 17: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 18: { + Finvc: float64(1.2890625), + Flogc: -Float64FromFloat64(0.25391520998095984), + Flogctail: -Float64FromFloat64(3.600176732637335e-15), + }, + 19: { + Finvc: float64(1.28125), + Flogc: -Float64FromFloat64(0.2478361639045943), + Flogctail: float64(1.3029797173308663e-14), + }, + 20: { + Finvc: float64(1.2734375), + Flogc: -Float64FromFloat64(0.2417199368871934), + Flogctail: float64(4.8230289429940886e-14), + }, + 21: { + Finvc: float64(1.265625), + Flogc: -Float64FromFloat64(0.23556607131274632), + Flogctail: -Float64FromFloat64(2.0592242769647135e-14), + }, + 22: { + Finvc: float64(1.2578125), + Flogc: -Float64FromFloat64(0.22937410106487732), + Flogctail: float64(3.149265065191484e-14), + }, + 23: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 24: { + Finvc: float64(1.25), + Flogc: -Float64FromFloat64(0.22314355131425145), + Flogctail: float64(4.169796584527195e-14), + }, + 25: { + Finvc: float64(1.2421875), + Flogc: -Float64FromFloat64(0.21687393830063684), + Flogctail: float64(2.2477465222466186e-14), + }, + 26: { + Finvc: float64(1.234375), + Flogc: -Float64FromFloat64(0.21056476910735), + Flogctail: float64(3.6507188831790577e-16), + }, + 27: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 28: { + Finvc: float64(1.2265625), + Flogc: -Float64FromFloat64(0.2042155414286526), + Flogctail: -Float64FromFloat64(3.827767260205414e-14), + }, + 29: { + Finvc: float64(1.21875), + Flogc: -Float64FromFloat64(0.19782574332987224), + Flogctail: -Float64FromFloat64(4.7641388950792196e-14), + }, + 30: { + Finvc: float64(1.2109375), + Flogc: -Float64FromFloat64(0.19139485299967873), + Flogctail: float64(4.9278276214647115e-14), + }, + 31: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 32: { + Finvc: float64(1.203125), + Flogc: -Float64FromFloat64(0.18492233849406148), + Flogctail: float64(4.9485167661250996e-14), + }, + 33: { + Finvc: float64(1.1953125), + Flogc: -Float64FromFloat64(0.1784076574728033), + Flogctail: -Float64FromFloat64(1.5003333854266542e-14), + }, + 34: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 35: { + Finvc: float64(1.1875), + Flogc: -Float64FromFloat64(0.17185025692663203), + Flogctail: -Float64FromFloat64(2.7194441649495324e-14), + }, + 36: { + Finvc: float64(1.1796875), + Flogc: -Float64FromFloat64(0.1652495728952772), + Flogctail: -Float64FromFloat64(2.99659267292569e-14), + }, + 37: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 38: { + Finvc: float64(1.171875), + Flogc: -Float64FromFloat64(0.15860503017665906), + Flogctail: float64(2.0472357800461955e-14), + }, + 39: { + Finvc: float64(1.1640625), + Flogc: -Float64FromFloat64(0.15191604202584585), + Flogctail: float64(3.879296723063646e-15), + }, + 40: { + Finvc: float64(1.15625), + Flogc: -Float64FromFloat64(0.1451820098444614), + Flogctail: -Float64FromFloat64(3.6506824353335045e-14), + }, + 41: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 42: { + Finvc: float64(1.1484375), + Flogc: -Float64FromFloat64(0.13840232285906495), + Flogctail: -Float64FromFloat64(5.4183331379008994e-14), + }, + 43: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 44: { + Finvc: float64(1.140625), + Flogc: -Float64FromFloat64(0.131576357788731), + Flogctail: float64(1.1729485484531301e-14), + }, + 45: { + Finvc: float64(1.1328125), + Flogc: -Float64FromFloat64(0.12470347850091912), + Flogctail: -Float64FromFloat64(3.811763084710266e-14), + }, + 46: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 47: { + Finvc: float64(1.125), + Flogc: -Float64FromFloat64(0.11778303565643), + Flogctail: float64(4.654729747598445e-14), + }, + 48: { + Finvc: float64(1.1171875), + Flogc: -Float64FromFloat64(0.11081436634026431), + Flogctail: -Float64FromFloat64(2.5799991283069902e-14), + }, + 49: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 50: { + Finvc: float64(1.109375), + Flogc: -Float64FromFloat64(0.10379679368168127), + Flogctail: float64(3.7700471749674615e-14), + }, + 51: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 52: { + Finvc: float64(1.1015625), + Flogc: -Float64FromFloat64(0.09672962645856842), + Flogctail: float64(1.7306161136093256e-14), + }, + 53: { + Finvc: float64(1.09375), + Flogc: -Float64FromFloat64(0.089612158689647), + Flogctail: -Float64FromFloat64(4.012913552726574e-14), + }, + 54: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 55: { + Finvc: float64(1.0859375), + Flogc: -Float64FromFloat64(0.08244366921110213), + Flogctail: float64(2.7541708360737882e-14), + }, + 56: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 57: { + Finvc: float64(1.078125), + Flogc: -Float64FromFloat64(0.07522342123763792), + Flogctail: float64(5.0396178134370583e-14), + }, + 58: { + Finvc: float64(1.0703125), + Flogc: -Float64FromFloat64(0.06795066190852594), + Flogctail: float64(1.8195060030168815e-14), + }, + 59: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 60: { + Finvc: float64(1.0625), + Flogc: -Float64FromFloat64(0.06062462181648698), + Flogctail: float64(5.213620639136504e-14), + }, + 61: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 62: { + Finvc: float64(1.0546875), + Flogc: -Float64FromFloat64(0.053244514518837605), + Flogctail: float64(2.532168943117445e-14), + }, + 63: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 64: { + Finvc: float64(1.046875), + Flogc: -Float64FromFloat64(0.045809536031242715), + Flogctail: -Float64FromFloat64(5.148849572685811e-14), + }, + 65: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 66: { + Finvc: float64(1.0390625), + Flogc: -Float64FromFloat64(0.038318864302141264), + Flogctail: float64(4.6652946995830086e-15), + }, + 67: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 68: { + Finvc: float64(1.03125), + Flogc: -Float64FromFloat64(0.03077165866670839), + Flogctail: -Float64FromFloat64(4.529814257790929e-14), + }, + 69: { + Finvc: float64(1.0234375), + Flogc: -Float64FromFloat64(0.023167059281490765), + Flogctail: -Float64FromFloat64(4.361324067851568e-14), + }, + 70: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 71: { + Finvc: float64(1.015625), + Flogc: -Float64FromFloat64(0.015504186535963527), + Flogctail: -Float64FromFloat64(1.7274567499706107e-15), + }, + 72: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 73: { + Finvc: float64(1.0078125), + Flogc: -Float64FromFloat64(0.0077821404420319595), + Flogctail: -Float64FromFloat64(2.298941004620351e-14), + }, + 74: { + Finvc: float64(1), + }, + 75: { + Finvc: float64(1), + }, + 76: { + Finvc: float64(0.9921875), + Flogc: float64(0.007843177461040796), + Flogctail: -Float64FromFloat64(1.4902732911301337e-14), + }, + 77: { + Finvc: float64(0.984375), + Flogc: float64(0.01574835696817445), + Flogctail: -Float64FromFloat64(3.527980389655325e-14), + }, + 78: { + Finvc: float64(0.9765625), + Flogc: float64(0.023716526617363343), + Flogctail: -Float64FromFloat64(4.730054772033249e-14), + }, + 79: { + Finvc: float64(0.96875), + Flogc: float64(0.03174869831457272), + Flogctail: float64(7.580310369375161e-15), + }, + 80: { + Finvc: float64(0.9609375), + Flogc: float64(0.039845908547249564), + Flogctail: -Float64FromFloat64(4.9893776716773285e-14), + }, + 81: { + Finvc: float64(0.953125), + Flogc: float64(0.048009219186383234), + Flogctail: -Float64FromFloat64(2.262629393030674e-14), + }, + 82: { + Finvc: float64(0.9453125), + Flogc: float64(0.056239718322899535), + Flogctail: -Float64FromFloat64(2.345674491018699e-14), + }, + 83: { + Finvc: float64(0.94140625), + Flogc: float64(0.06038051098892083), + Flogctail: -Float64FromFloat64(1.3352588834854848e-14), + }, + 84: { + Finvc: float64(0.93359375), + Flogc: float64(0.06871389254808946), + Flogctail: -Float64FromFloat64(3.765296820388875e-14), + }, + 85: { + Finvc: float64(0.92578125), + Flogc: float64(0.07711730334438016), + Flogctail: float64(5.1128335719851986e-14), + }, + 86: { + Finvc: float64(0.91796875), + Flogc: float64(0.08559193033545398), + Flogctail: -Float64FromFloat64(5.046674438470119e-14), + }, + 87: { + Finvc: float64(0.9140625), + Flogc: float64(0.08985632912185793), + Flogctail: float64(3.1218748807418837e-15), + }, + 88: { + Finvc: float64(0.90625), + Flogc: float64(0.09844007281321865), + Flogctail: float64(3.3871241029241416e-14), + }, + 89: { + Finvc: float64(0.8984375), + Flogc: float64(0.10709813555638448), + Flogctail: -Float64FromFloat64(1.7376727386423858e-14), + }, + 90: { + Finvc: float64(0.89453125), + Flogc: float64(0.11145544092528326), + Flogctail: float64(3.957125899799804e-14), + }, + 91: { + Finvc: float64(0.88671875), + Flogc: float64(0.12022742699821265), + Flogctail: -Float64FromFloat64(5.2849453521890294e-14), + }, + 92: { + Finvc: float64(0.8828125), + Flogc: float64(0.12464244520731427), + Flogctail: -Float64FromFloat64(3.767012502308738e-14), + }, + 93: { + Finvc: float64(0.875), + Flogc: float64(0.13353139262449076), + Flogctail: float64(3.1859736349078334e-14), + }, + 94: { + Finvc: float64(0.87109375), + Flogc: float64(0.13800567301939282), + Flogctail: float64(5.0900642926060466e-14), + }, + 95: { + Finvc: float64(0.86328125), + Flogc: float64(0.14701474296180095), + Flogctail: float64(8.710783796122478e-15), + }, + 96: { + Finvc: float64(0.859375), + Flogc: float64(0.15154989812720032), + Flogctail: float64(6.157896229122976e-16), + }, + 97: { + Finvc: float64(0.8515625), + Flogc: float64(0.16068238169043525), + Flogctail: float64(3.821577743916796e-14), + }, + 98: { + Finvc: float64(0.84765625), + Flogc: float64(0.16528009093906348), + Flogctail: float64(3.9440046718453496e-14), + }, + 99: { + Finvc: float64(0.83984375), + Flogc: float64(0.17453941635187675), + Flogctail: float64(2.2924522154618074e-14), + }, + 100: { + Finvc: float64(0.8359375), + Flogc: float64(0.17920142945774842), + Flogctail: -Float64FromFloat64(3.742530094732263e-14), + }, + 101: { + Finvc: float64(0.83203125), + Flogc: float64(0.18388527877016259), + Flogctail: -Float64FromFloat64(2.5223102140407338e-14), + }, + 102: { + Finvc: float64(0.82421875), + Flogc: float64(0.1933193110035063), + Flogctail: -Float64FromFloat64(1.0320443688698849e-14), + }, + 103: { + Finvc: float64(0.8203125), + Flogc: float64(0.19806991376208316), + Flogctail: float64(1.0634128304268335e-14), + }, + 104: { + Finvc: float64(0.8125), + Flogc: float64(0.20763936477828793), + Flogctail: -Float64FromFloat64(4.3425422595242564e-14), + }, + 105: { + Finvc: float64(0.80859375), + Flogc: float64(0.21245865121420593), + Flogctail: -Float64FromFloat64(1.2527395755711364e-14), + }, + 106: { + Finvc: float64(0.8046875), + Flogc: float64(0.21730127569003344), + Flogctail: -Float64FromFloat64(5.204008743405884e-14), + }, + 107: { + Finvc: float64(0.80078125), + Flogc: float64(0.22216746534115828), + Flogctail: -Float64FromFloat64(3.979844515951702e-15), + }, + 108: { + Finvc: float64(0.79296875), + Flogc: float64(0.2319714654378231), + Flogctail: -Float64FromFloat64(4.7955860343296286e-14), + }, + 109: { + Finvc: float64(0.7890625), + Flogc: float64(0.2369097470783572), + Flogctail: float64(5.015686013791602e-16), + }, + 110: { + Finvc: float64(0.78515625), + Flogc: float64(0.24187253642048745), + Flogctail: -Float64FromFloat64(7.252318953240293e-16), + }, + 111: { + Finvc: float64(0.78125), + Flogc: float64(0.2468600779315011), + Flogctail: float64(2.4688324156011588e-14), + }, + 112: { + Finvc: float64(0.7734375), + Flogc: float64(0.2569104137850218), + Flogctail: float64(5.465121253624792e-15), + }, + 113: { + Finvc: float64(0.76953125), + Flogc: float64(0.26197371574153294), + Flogctail: float64(4.102651071698446e-14), + }, + 114: { + Finvc: float64(0.765625), + Flogc: float64(0.2670627852490952), + Flogctail: -Float64FromFloat64(4.996736502345936e-14), + }, + 115: { + Finvc: float64(0.76171875), + Flogc: float64(0.27217788591576664), + Flogctail: float64(4.903580708156347e-14), + }, + 116: { + Finvc: float64(0.7578125), + Flogc: float64(0.27731928541618345), + Flogctail: float64(5.089628039500759e-14), + }, + 117: { + Finvc: float64(0.75390625), + Flogc: float64(0.28248725557466514), + Flogctail: float64(1.1782016386565151e-14), + }, + 118: { + Finvc: float64(0.74609375), + Flogc: float64(0.29290401643288533), + Flogctail: float64(4.727452940514406e-14), + }, + 119: { + Finvc: float64(0.7421875), + Flogc: float64(0.29815337231912054), + Flogctail: -Float64FromFloat64(4.4204083338755686e-14), + }, + 120: { + Finvc: float64(0.73828125), + Flogc: float64(0.3034304294199046), + Flogctail: float64(1.548345993498083e-14), + }, + 121: { + Finvc: float64(0.734375), + Flogc: float64(0.30873548164959175), + Flogctail: float64(2.1522127491642888e-14), + }, + 122: { + Finvc: float64(0.73046875), + Flogc: float64(0.3140688276249648), + Flogctail: float64(1.1054030169005386e-14), + }, + 123: { + Finvc: float64(0.7265625), + Flogc: float64(0.31943077076641657), + Flogctail: -Float64FromFloat64(5.534326352070679e-14), + }, + 124: { + Finvc: float64(0.72265625), + Flogc: float64(0.3248216194012912), + Flogctail: -Float64FromFloat64(5.351646604259541e-14), + }, + 125: { + Finvc: float64(0.71875), + Flogc: float64(0.33024168687052224), + Flogctail: float64(5.4612144489920215e-14), + }, + 126: { + Finvc: float64(0.71484375), + Flogc: float64(0.3356912916381134), + Flogctail: float64(2.8136969901227338e-14), + }, + 127: { + Finvc: float64(0.7109375), + Flogc: float64(0.3411707574027787), + Flogctail: -Float64FromFloat64(1.156568624616423e-14), + }, + }, +} + +var X__powf_log2_data = Tpowf_log2_data{ + Ftab: [16]struct { + Finvc float64 + Flogc float64 + }{ + 0: { + Finvc: float64(1.398907162146528), + Flogc: -Float64FromFloat64(0.48430022186289673) * float64(Int32FromInt32(1)< ccgo.go //go:generate go fmt ./... diff --git a/vendor/modernc.org/libc/libc32.go b/vendor/modernc.org/libc/libc32.go index b0943d2..e24ffc7 100644 --- a/vendor/modernc.org/libc/libc32.go +++ b/vendor/modernc.org/libc/libc32.go @@ -2,8 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build 386 || arm -// +build 386 arm +//go:build !linux && (arm || 386) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/libc64.go b/vendor/modernc.org/libc/libc64.go index 5460892..219255e 100644 --- a/vendor/modernc.org/libc/libc64.go +++ b/vendor/modernc.org/libc/libc64.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build ((amd64 || arm64 || loong64) && !linux) || ppc64le || riscv64 || s390x || mips64le +//go:build (!linux && !(386 || arm)) || mips64le package libc // import "modernc.org/libc" @@ -41,12 +41,12 @@ func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { var k types.Size_t var w uintptr _, _ = k, w - c = int32(uint8(uint8(c))) + c = int32(uint8(c)) if !(c != 0) { return s + uintptr(Xstrlen(tls, s)) } for { - if !(uint64(uint64(s))%Uint64FromInt64(8) != 0) { + if !(uint64(s)%Uint64FromInt64(8) != 0) { break } if !(*(*int8)(unsafe.Pointer(s)) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { @@ -56,7 +56,7 @@ func Xstrchrnul(tls *TLS, s uintptr, c int32) (r uintptr) { _1: s++ } - k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(limits.UCHAR_MAX) * uint64(uint64(c)) + k = uint64(-Int32FromInt32(1)) / Uint64FromInt32(limits.UCHAR_MAX) * uint64(c) w = s for { if !(!((*(*uint64)(unsafe.Pointer(w))-uint64(-Int32FromInt32(1))/Uint64FromInt32(limits.UCHAR_MAX)) & ^*(*uint64)(unsafe.Pointer(w)) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(limits.UCHAR_MAX)*uint64(Int32FromInt32(limits.UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-uint64(-Int32FromInt32(1))/Uint64FromInt32(limits.UCHAR_MAX)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (uint64(-Int32FromInt32(1))/Uint64FromInt32(limits.UCHAR_MAX)*uint64(Int32FromInt32(limits.UCHAR_MAX)/Int32FromInt32(2)+Int32FromInt32(1))) != 0)) { diff --git a/vendor/modernc.org/libc/libc_386.go b/vendor/modernc.org/libc/libc_386.go index de3e349..a0b3866 100644 --- a/vendor/modernc.org/libc/libc_386.go +++ b/vendor/modernc.org/libc/libc_386.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !linux + package libc // import "modernc.org/libc" import ( diff --git a/vendor/modernc.org/libc/libc_arm.go b/vendor/modernc.org/libc/libc_arm.go index de3e349..a0b3866 100644 --- a/vendor/modernc.org/libc/libc_arm.go +++ b/vendor/modernc.org/libc/libc_arm.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !linux + package libc // import "modernc.org/libc" import ( diff --git a/vendor/modernc.org/libc/libc_darwin.go b/vendor/modernc.org/libc/libc_darwin.go index a75f675..cde194a 100644 --- a/vendor/modernc.org/libc/libc_darwin.go +++ b/vendor/modernc.org/libc/libc_darwin.go @@ -2510,3 +2510,11 @@ func X__fpclassifyd(tls *TLS, x float64) (r int32) { } var Xin6addr_any = in6_addr{} + +func X__builtin_lround(tls *TLS, x float64) (r long) { + return Xlround(tls, x) +} + +func Xlround(tls *TLS, x float64) (r long) { + return long(Xround(tls, x)) +} diff --git a/vendor/modernc.org/libc/libc_darwin_amd64.go b/vendor/modernc.org/libc/libc_darwin_amd64.go index 74a51ad..0513b1e 100644 --- a/vendor/modernc.org/libc/libc_darwin_amd64.go +++ b/vendor/modernc.org/libc/libc_darwin_amd64.go @@ -6,6 +6,7 @@ package libc // import "modernc.org/libc" import ( "strings" + "time" "unsafe" "golang.org/x/sys/unix" @@ -241,12 +242,11 @@ func Xtime(t *TLS, tloc uintptr) types.Time_t { if __ccgo_strace { trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) } - panic(todo("")) - // n := time.Now().UTC().Unix() - // if tloc != 0 { - // *(*types.Time_t)(unsafe.Pointer(tloc)) = types.Time_t(n) - // } - // return types.Time_t(n) + n := time.Now().UTC().Unix() + if tloc != 0 { + *(*types.Time_t)(unsafe.Pointer(tloc)) = types.Time_t(n) + } + return types.Time_t(n) } // // int getrlimit(int resource, struct rlimit *rlim); diff --git a/vendor/modernc.org/libc/libc_freebsd.go b/vendor/modernc.org/libc/libc_freebsd.go index f3c9dcc..a80924f 100644 --- a/vendor/modernc.org/libc/libc_freebsd.go +++ b/vendor/modernc.org/libc/libc_freebsd.go @@ -1591,7 +1591,16 @@ func Xwritev(t *TLS, fd int32, iov uintptr, iovcnt int32) types.Ssize_t { if __ccgo_strace { trc("t=%v fd=%v iov=%v iovcnt=%v, (%v:)", t, fd, iov, iovcnt, origin(2)) } - panic(todo("")) + r, _, err := unix.Syscall(unix.SYS_WRITEV, uintptr(fd), iov, uintptr(iovcnt)) + if err != 0 { + if dmesgs { + dmesg("%v: %v FAIL", origin(1), err) + } + t.setErrno(err) + return -1 + } + + return types.Ssize_t(r) } // int __isoc99_sscanf(const char *str, const char *format, ...); @@ -1969,3 +1978,58 @@ func Xpwrite(t *TLS, fd int32, buf uintptr, count types.Size_t, offset types.Off // } return types.Ssize_t(n) } + +func Xexplicit_bzero(tls *TLS, d uintptr, n types.Size_t) { + Xmemset(tls, d, 0, n) +} + +// int issetugid(void); +func Xissetugid(t *TLS) int32 { + if __ccgo_strace { + trc("t=%v, (%v:)", t, origin(2)) + } + panic(todo("")) +} + +var progname uintptr + +// const char *getprogname(void); +func Xgetprogname(t *TLS) uintptr { + if __ccgo_strace { + trc("t=%v, (%v:)", t, origin(2)) + } + if progname != 0 { + return progname + } + + var err error + progname, err = CString(filepath.Base(os.Args[0])) + if err != nil { + t.setErrno(err) + return 0 + } + + return progname +} + +func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n types.Size_t) int32 { /* strncasecmp.c:4:5: */ + var l uintptr = _l + var r uintptr = _r + if !(int32(PostDecUint64(&n, 1)) != 0) { + return 0 + } +__1: + if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { + goto __3 + } + goto __2 +__2: + l++ + r++ + n-- + goto __1 + goto __3 +__3: + ; + return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) +} diff --git a/vendor/modernc.org/libc/libc_freebsd_amd64.go b/vendor/modernc.org/libc/libc_freebsd_amd64.go index c02e503..b660351 100644 --- a/vendor/modernc.org/libc/libc_freebsd_amd64.go +++ b/vendor/modernc.org/libc/libc_freebsd_amd64.go @@ -897,3 +897,61 @@ func Xclock(t *TLS) time.Clock_t { } return time.Clock_t(gotime.Since(startTime) * gotime.Duration(time.CLOCKS_PER_SEC) / gotime.Second) } + +func X__maskrune(tls *TLS, _c int32, _f uint64) int32 { + return int32(uint32(int32(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) + 60 + uintptr(_c&0xff)*4)))) & uint32(_f)) +} + +// int fstatfs(int fd, struct statfs *buf); +func Xfstatfs(t *TLS, fd int32, buf uintptr) int32 { + if err := unix.Fstatfs(int(fd), (*unix.Statfs_t)(unsafe.Pointer(buf))); err != nil { + if dmesgs { + dmesg("%v: %v: %v FAIL", origin(1), fd, err) + } + t.setErrno(err) + return -1 + } + + if dmesgs { + dmesg("%v: %v: ok", origin(1), fd) + } + return 0 +} + +type lconv = struct { + Fdecimal_point uintptr + Fthousands_sep uintptr + Fgrouping uintptr + Fint_curr_symbol uintptr + Fcurrency_symbol uintptr + Fmon_decimal_point uintptr + Fmon_thousands_sep uintptr + Fmon_grouping uintptr + Fpositive_sign uintptr + Fnegative_sign uintptr + Fint_frac_digits int8 + Ffrac_digits int8 + Fp_cs_precedes int8 + Fp_sep_by_space int8 + Fn_cs_precedes int8 + Fn_sep_by_space int8 + Fp_sign_posn int8 + Fn_sign_posn int8 + Fint_p_cs_precedes int8 + Fint_p_sep_by_space int8 + Fint_n_cs_precedes int8 + Fint_n_sep_by_space int8 + Fint_p_sign_posn int8 + Fint_n_sign_posn int8 + F__ccgo_pad1 [2]byte +} + +var posix_lconv = lconv{Fdecimal_point: ts + 23, Fthousands_sep: ts + 13, Fgrouping: ts + 13, Fint_curr_symbol: ts + 13, Fcurrency_symbol: ts + 13, Fmon_decimal_point: ts + 13, Fmon_thousands_sep: ts + 13, Fmon_grouping: ts + 13, Fpositive_sign: ts + 13, Fnegative_sign: ts + 13, Fint_frac_digits: Int8FromInt32(255), Ffrac_digits: Int8FromInt32(255), Fp_cs_precedes: Int8FromInt32(255), Fp_sep_by_space: Int8FromInt32(255), Fn_cs_precedes: Int8FromInt32(255), Fn_sep_by_space: Int8FromInt32(255), Fp_sign_posn: Int8FromInt32(255), Fn_sign_posn: Int8FromInt32(255), Fint_p_cs_precedes: Int8FromInt32(255), Fint_p_sep_by_space: Int8FromInt32(255), Fint_n_cs_precedes: Int8FromInt32(255), Fint_n_sep_by_space: Int8FromInt32(255), Fint_p_sign_posn: Int8FromInt32(255), Fint_n_sign_posn: Int8FromInt32(255)} /* localeconv.c:4:27 */ + +func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ + return uintptr(unsafe.Pointer(&posix_lconv)) +} + +func X__tolower(tls *TLS, c int32) int32 { /* table.c:1878:20: */ + return Xtolower(tls, c) +} diff --git a/vendor/modernc.org/libc/libc_linux.go b/vendor/modernc.org/libc/libc_linux.go index 0913d8a..f4cf9e1 100644 --- a/vendor/modernc.org/libc/libc_linux.go +++ b/vendor/modernc.org/libc/libc_linux.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/libc_linux_386.go b/vendor/modernc.org/libc/libc_linux_386.go deleted file mode 100644 index 3fb508d..0000000 --- a/vendor/modernc.org/libc/libc_linux_386.go +++ /dev/null @@ -1,749 +0,0 @@ -// Copyright 2020 The Libc 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 libc // import "modernc.org/libc" - -import ( - "os" - "strings" - "time" - "unsafe" - - "golang.org/x/sys/unix" - "modernc.org/libc/errno" - "modernc.org/libc/fcntl" - "modernc.org/libc/signal" - "modernc.org/libc/stdio" - "modernc.org/libc/sys/stat" - "modernc.org/libc/sys/types" - ctime "modernc.org/libc/time" -) - -var ( - startTime = time.Now() // For clock(3) -) - -// int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); -func Xsigaction(t *TLS, signum int32, act, oldact uintptr) int32 { - if __ccgo_strace { - trc("t=%v signum=%v oldact=%v, (%v:)", t, signum, oldact, origin(2)) - } - // musl/arch/x32/ksigaction.h - // - // struct k_sigaction { - // void (*handler)(int); - // unsigned long flags; - // void (*restorer)(void); - // unsigned mask[2]; - // }; - type k_sigaction struct { - handler uintptr - flags ulong - restorer uintptr - mask [2]uint32 - } - - var kact, koldact uintptr - if act != 0 { - sz := int(unsafe.Sizeof(k_sigaction{})) - kact = t.Alloc(sz) - defer t.Free(sz) - *(*k_sigaction)(unsafe.Pointer(kact)) = k_sigaction{ - handler: (*signal.Sigaction)(unsafe.Pointer(act)).F__sigaction_handler.Fsa_handler, - flags: ulong((*signal.Sigaction)(unsafe.Pointer(act)).Fsa_flags), - restorer: (*signal.Sigaction)(unsafe.Pointer(act)).Fsa_restorer, - } - Xmemcpy(t, kact+unsafe.Offsetof(k_sigaction{}.mask), act+unsafe.Offsetof(signal.Sigaction{}.Fsa_mask), types.Size_t(unsafe.Sizeof(k_sigaction{}.mask))) - } - if oldact != 0 { - panic(todo("")) - } - - if _, _, err := unix.Syscall6(unix.SYS_RT_SIGACTION, uintptr(signum), kact, koldact, unsafe.Sizeof(k_sigaction{}.mask), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if oldact != 0 { - panic(todo("")) - } - - return 0 -} - -// int fcntl(int fd, int cmd, ... /* arg */ ); -func Xfcntl64(t *TLS, fd, cmd int32, args uintptr) int32 { - if __ccgo_strace { - trc("t=%v cmd=%v args=%v, (%v:)", t, cmd, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - if cmd == fcntl.F_SETFL { - arg |= unix.O_LARGEFILE - } - n, _, err := unix.Syscall(unix.SYS_FCNTL64, uintptr(fd), uintptr(cmd), arg) - if err != 0 { - if dmesgs { - dmesg("%v: fd %v cmd %v", origin(1), fcntlCmdStr(fd), cmd) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %d %s %#x: %d", origin(1), fd, fcntlCmdStr(cmd), arg, n) - } - return int32(n) -} - -// int lstat(const char *pathname, struct stat *statbuf); -func Xlstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LSTAT64, pathname, statbuf, 0); err != 0 { - if dmesgs { - dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(pathname)) - } - return 0 -} - -// int stat(const char *pathname, struct stat *statbuf); -func Xstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_STAT64, pathname, statbuf, 0); err != 0 { - if dmesgs { - dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(pathname)) - } - return 0 -} - -// int fstat(int fd, struct stat *statbuf); -func Xfstat64(t *TLS, fd int32, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v fd=%v statbuf=%v, (%v:)", t, fd, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FSTAT64, uintptr(fd), statbuf, 0); err != 0 { - if dmesgs { - dmesg("%v: fd %d: %v", origin(1), fd, err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %d, size %#x: ok\n%+v", origin(1), fd, (*stat.Stat)(unsafe.Pointer(statbuf)).Fst_size, (*stat.Stat)(unsafe.Pointer(statbuf))) - } - return 0 -} - -// void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address */); -func Xmremap(t *TLS, old_address uintptr, old_size, new_size types.Size_t, flags int32, args uintptr) uintptr { - if __ccgo_strace { - trc("t=%v old_address=%v new_size=%v flags=%v args=%v, (%v:)", t, old_address, new_size, flags, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - data, _, err := unix.Syscall6(unix.SYS_MREMAP, old_address, uintptr(old_size), uintptr(new_size), uintptr(flags), arg, 0) - if err != 0 { - if dmesgs { - dmesg("%v: %v", origin(1), err) - } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - if dmesgs { - dmesg("%v: %#x", origin(1), data) - } - return data -} - -func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - return Xmmap64(t, addr, length, prot, flags, fd, offset) -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap64(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - data, _, err := unix.Syscall6(unix.SYS_MMAP2, addr, uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset>>12)) - if err != 0 { - if dmesgs { - dmesg("%v: %v", origin(1), err) - } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - if dmesgs { - dmesg("%v: %#x", origin(1), data) - } - return data -} - -// int ftruncate(int fd, off_t length); -func Xftruncate64(t *TLS, fd int32, length types.Off_t) int32 { - if __ccgo_strace { - trc("t=%v fd=%v length=%v, (%v:)", t, fd, length, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)); err != 0 { - if dmesgs { - dmesg("%v: fd %d: %v", origin(1), fd, err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %d %#x: ok", origin(1), fd, length) - } - return 0 -} - -// off64_t lseek64(int fd, off64_t offset, int whence); -func Xlseek64(t *TLS, fd int32, offset types.Off_t, whence int32) types.Off_t { - if __ccgo_strace { - trc("t=%v fd=%v offset=%v whence=%v, (%v:)", t, fd, offset, whence, origin(2)) - } - bp := t.Alloc(int(unsafe.Sizeof(types.X__loff_t(0)))) - defer t.Free(int(unsafe.Sizeof(types.X__loff_t(0)))) - if _, _, err := unix.Syscall6(unix.SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), bp, uintptr(whence), 0); err != 0 { - if dmesgs { - dmesg("%v: fd %v, off %#x, whence %v: %v", origin(1), fd, offset, whenceStr(whence), err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: fd %v, off %#x, whence %v: %#x", origin(1), fd, offset, whenceStr(whence), *(*types.Off_t)(unsafe.Pointer(bp))) - } - return *(*types.Off_t)(unsafe.Pointer(bp)) -} - -// int utime(const char *filename, const struct utimbuf *times); -func Xutime(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIME, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// unsigned int alarm(unsigned int seconds); -func Xalarm(t *TLS, seconds uint32) uint32 { - if __ccgo_strace { - trc("t=%v seconds=%v, (%v:)", t, seconds, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_ALARM, uintptr(seconds), 0, 0) - if err != 0 { - panic(todo("")) - } - - return uint32(n) -} - -// int getrlimit(int resource, struct rlimit *rlim); -func Xgetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_GETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// time_t time(time_t *tloc); -func Xtime(t *TLS, tloc uintptr) types.Time_t { - if __ccgo_strace { - trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_TIME, tloc, 0, 0) - if err != 0 { - t.setErrno(err) - return types.Time_t(-1) - } - - if tloc != 0 { - *(*types.Time_t)(unsafe.Pointer(tloc)) = types.Time_t(n) - } - return types.Time_t(n) -} - -// int mkdir(const char *path, mode_t mode); -func Xmkdir(t *TLS, path uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v path=%v mode=%v, (%v:)", t, path, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKDIR, path, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(path)) - } - return 0 -} - -// int symlink(const char *target, const char *linkpath); -func Xsymlink(t *TLS, target, linkpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v linkpath=%v, (%v:)", t, linkpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SYMLINK, target, linkpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q %q: ok", origin(1), GoString(target), GoString(linkpath)) - } - return 0 -} - -// int chmod(const char *pathname, mode_t mode) -func Xchmod(t *TLS, pathname uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHMOD, pathname, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - } - return 0 -} - -// int utimes(const char *filename, const struct timeval times[2]); -func Xutimes(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIMES, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(filename)) - } - return 0 -} - -// int unlink(const char *pathname); -func Xunlink(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UNLINK, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(pathname)) - } - return 0 -} - -// int access(const char *pathname, int mode); -func Xaccess(t *TLS, pathname uintptr, mode int32) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_ACCESS, pathname, uintptr(mode), 0); err != 0 { - if dmesgs { - dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - } - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - } - return 0 -} - -// int rmdir(const char *pathname); -func Xrmdir(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RMDIR, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if dmesgs { - dmesg("%v: %q: ok", origin(1), GoString(pathname)) - } - return 0 -} - -// int rename(const char *oldpath, const char *newpath); -func Xrename(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RENAME, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mknod(const char *pathname, mode_t mode, dev_t dev); -func Xmknod(t *TLS, pathname uintptr, mode types.Mode_t, dev types.Dev_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v dev=%v, (%v:)", t, pathname, mode, dev, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKNOD, pathname, uintptr(mode), uintptr(dev)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int chown(const char *pathname, uid_t owner, gid_t group); -func Xchown(t *TLS, pathname uintptr, owner types.Uid_t, group types.Gid_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v owner=%v group=%v, (%v:)", t, pathname, owner, group, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHOWN, pathname, uintptr(owner), uintptr(group)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int link(const char *oldpath, const char *newpath); -func Xlink(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LINK, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int pipe(int pipefd[2]); -func Xpipe(t *TLS, pipefd uintptr) int32 { - if __ccgo_strace { - trc("t=%v pipefd=%v, (%v:)", t, pipefd, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_PIPE, pipefd, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int dup2(int oldfd, int newfd); -func Xdup2(t *TLS, oldfd, newfd int32) int32 { - if __ccgo_strace { - trc("t=%v newfd=%v, (%v:)", t, newfd, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if err != 0 { - t.setErrno(err) - return -1 - } - - return int32(n) -} - -// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize); -func Xreadlink(t *TLS, path, buf uintptr, bufsize types.Size_t) types.Ssize_t { - if __ccgo_strace { - trc("t=%v buf=%v bufsize=%v, (%v:)", t, buf, bufsize, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_READLINK, path, buf, uintptr(bufsize)) - if err != 0 { - t.setErrno(err) - return -1 - } - - return types.Ssize_t(n) -} - -// FILE *fopen64(const char *pathname, const char *mode); -func Xfopen64(t *TLS, pathname, mode uintptr) uintptr { - if __ccgo_strace { - trc("t=%v mode=%v, (%v:)", t, mode, origin(2)) - } - m := strings.ReplaceAll(GoString(mode), "b", "") - var flags int - switch m { - case "r": - flags = os.O_RDONLY - case "r+": - flags = os.O_RDWR - case "w": - flags = os.O_WRONLY | os.O_CREATE | os.O_TRUNC - case "w+": - flags = os.O_RDWR | os.O_CREATE | os.O_TRUNC - case "a": - flags = os.O_WRONLY | os.O_CREATE | os.O_APPEND - case "a+": - flags = os.O_RDWR | os.O_CREATE | os.O_APPEND - default: - panic(m) - } - //TODO- flags |= fcntl.O_LARGEFILE - fd, _, err := unix.Syscall(unix.SYS_OPEN, pathname, uintptr(flags|unix.O_LARGEFILE), 0666) - if err != 0 { - t.setErrno(err) - return 0 - } - - if p := newFile(t, int32(fd)); p != 0 { - return p - } - - Xclose(t, int32(fd)) - t.setErrno(errno.ENOMEM) - return 0 -} - -// int setrlimit(int resource, const struct rlimit *rlim); -func Xsetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -var _table1 = [384]int32{ - 129: int32(1), - 130: int32(2), - 131: int32(3), - 132: int32(4), - 133: int32(5), - 134: int32(6), - 135: int32(7), - 136: int32(8), - 137: int32(9), - 138: int32(10), - 139: int32(11), - 140: int32(12), - 141: int32(13), - 142: int32(14), - 143: int32(15), - 144: int32(16), - 145: int32(17), - 146: int32(18), - 147: int32(19), - 148: int32(20), - 149: int32(21), - 150: int32(22), - 151: int32(23), - 152: int32(24), - 153: int32(25), - 154: int32(26), - 155: int32(27), - 156: int32(28), - 157: int32(29), - 158: int32(30), - 159: int32(31), - 160: int32(32), - 161: int32(33), - 162: int32(34), - 163: int32(35), - 164: int32(36), - 165: int32(37), - 166: int32(38), - 167: int32(39), - 168: int32(40), - 169: int32(41), - 170: int32(42), - 171: int32(43), - 172: int32(44), - 173: int32(45), - 174: int32(46), - 175: int32(47), - 176: int32(48), - 177: int32(49), - 178: int32(50), - 179: int32(51), - 180: int32(52), - 181: int32(53), - 182: int32(54), - 183: int32(55), - 184: int32(56), - 185: int32(57), - 186: int32(58), - 187: int32(59), - 188: int32(60), - 189: int32(61), - 190: int32(62), - 191: int32(63), - 192: int32(64), - 193: int32('a'), - 194: int32('b'), - 195: int32('c'), - 196: int32('d'), - 197: int32('e'), - 198: int32('f'), - 199: int32('g'), - 200: int32('h'), - 201: int32('i'), - 202: int32('j'), - 203: int32('k'), - 204: int32('l'), - 205: int32('m'), - 206: int32('n'), - 207: int32('o'), - 208: int32('p'), - 209: int32('q'), - 210: int32('r'), - 211: int32('s'), - 212: int32('t'), - 213: int32('u'), - 214: int32('v'), - 215: int32('w'), - 216: int32('x'), - 217: int32('y'), - 218: int32('z'), - 219: int32(91), - 220: int32(92), - 221: int32(93), - 222: int32(94), - 223: int32(95), - 224: int32(96), - 225: int32('a'), - 226: int32('b'), - 227: int32('c'), - 228: int32('d'), - 229: int32('e'), - 230: int32('f'), - 231: int32('g'), - 232: int32('h'), - 233: int32('i'), - 234: int32('j'), - 235: int32('k'), - 236: int32('l'), - 237: int32('m'), - 238: int32('n'), - 239: int32('o'), - 240: int32('p'), - 241: int32('q'), - 242: int32('r'), - 243: int32('s'), - 244: int32('t'), - 245: int32('u'), - 246: int32('v'), - 247: int32('w'), - 248: int32('x'), - 249: int32('y'), - 250: int32('z'), - 251: int32(123), - 252: int32(124), - 253: int32(125), - 254: int32(126), - 255: int32(127), -} - -var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 - -func X__ctype_tolower_loc(tls *TLS) (r uintptr) { - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - defer func() { trc("-> %v", r) }() - } - return uintptr(unsafe.Pointer(&_ptable1)) -} - -var Xin6addr_any = Tin6_addr{} - -type Tin6_addr = struct { - F__in6_union struct { - F__s6_addr16 [0][8]uint16 - F__s6_addr32 [0][4]uint32 - F__s6_addr [16]uint8 - } -} - -func Xrewinddir(tls *TLS, f uintptr) { - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - Xfseek(tls, f, 0, stdio.SEEK_SET) -} - -func AtomicLoadPInt8(addr uintptr) (val int8) { - return int8(a_load_8(addr)) -} - -func AtomicLoadPInt16(addr uintptr) (val int16) { - return int16(a_load_16(addr)) -} - -func AtomicLoadPUint8(addr uintptr) byte { - return byte(a_load_8(addr)) -} - -func AtomicLoadPUint16(addr uintptr) uint16 { - return uint16(a_load_16(addr)) -} - -func AtomicLoadNUint8(ptr uintptr, memorder int32) uint8 { - return byte(a_load_8(ptr)) -} - -// clock_t clock(void); -func Xclock(t *TLS) ctime.Clock_t { - if __ccgo_strace { - trc("t=%v, (%v:)", t, origin(2)) - } - return ctime.Clock_t(time.Since(startTime) * time.Duration(ctime.CLOCKS_PER_SEC) / time.Second) -} diff --git a/vendor/modernc.org/libc/libc_linux_arm.go b/vendor/modernc.org/libc/libc_linux_arm.go deleted file mode 100644 index 8f9b857..0000000 --- a/vendor/modernc.org/libc/libc_linux_arm.go +++ /dev/null @@ -1,748 +0,0 @@ -// Copyright 2020 The Libc 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 libc // import "modernc.org/libc" - -import ( - "os" - "strings" - "time" - "unsafe" - - "golang.org/x/sys/unix" - "modernc.org/libc/errno" - "modernc.org/libc/fcntl" - "modernc.org/libc/signal" - "modernc.org/libc/stdio" - // "modernc.org/libc/sys/stat" - "modernc.org/libc/sys/types" - ctime "modernc.org/libc/time" -) - -var ( - startTime = time.Now() // For clock(3) -) - -// int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); -func Xsigaction(t *TLS, signum int32, act, oldact uintptr) int32 { - if __ccgo_strace { - trc("t=%v signum=%v oldact=%v, (%v:)", t, signum, oldact, origin(2)) - } - // musl/arch/x32/ksigaction.h - // - // struct k_sigaction { - // void (*handler)(int); - // unsigned long flags; - // void (*restorer)(void); - // unsigned mask[2]; - // }; - type k_sigaction struct { - handler uintptr - flags ulong - restorer uintptr - mask [2]uint32 - } - - var kact, koldact uintptr - if act != 0 { - sz := int(unsafe.Sizeof(k_sigaction{})) - kact = t.Alloc(sz) - defer t.Free(sz) - *(*k_sigaction)(unsafe.Pointer(kact)) = k_sigaction{ - handler: (*signal.Sigaction)(unsafe.Pointer(act)).F__sigaction_handler.Fsa_handler, - flags: ulong((*signal.Sigaction)(unsafe.Pointer(act)).Fsa_flags), - restorer: (*signal.Sigaction)(unsafe.Pointer(act)).Fsa_restorer, - } - Xmemcpy(t, kact+unsafe.Offsetof(k_sigaction{}.mask), act+unsafe.Offsetof(signal.Sigaction{}.Fsa_mask), types.Size_t(unsafe.Sizeof(k_sigaction{}.mask))) - } - if oldact != 0 { - panic(todo("")) - } - - if _, _, err := unix.Syscall6(unix.SYS_RT_SIGACTION, uintptr(signum), kact, koldact, unsafe.Sizeof(k_sigaction{}.mask), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if oldact != 0 { - panic(todo("")) - } - - return 0 -} - -// int fcntl(int fd, int cmd, ... /* arg */ ); -func Xfcntl64(t *TLS, fd, cmd int32, args uintptr) int32 { - if __ccgo_strace { - trc("t=%v cmd=%v args=%v, (%v:)", t, cmd, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - if cmd == fcntl.F_SETFL { - arg |= unix.O_LARGEFILE - } - n, _, err := unix.Syscall(unix.SYS_FCNTL64, uintptr(fd), uintptr(cmd), arg) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v cmd %v", origin(1), fcntlCmdStr(fd), cmd) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %s %#x: %d", origin(1), fd, fcntlCmdStr(cmd), arg, n) - // } - return int32(n) -} - -// int lstat(const char *pathname, struct stat *statbuf); -func Xlstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if err := unix.Lstat(GoString(pathname), (*unix.Stat_t)(unsafe.Pointer(statbuf))); err != nil { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int stat(const char *pathname, struct stat *statbuf); -func Xstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_STAT64, pathname, statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int fstat(int fd, struct stat *statbuf); -func Xfstat64(t *TLS, fd int32, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v fd=%v statbuf=%v, (%v:)", t, fd, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FSTAT64, uintptr(fd), statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d, size %#x: ok\n%+v", origin(1), fd, (*stat.Stat)(unsafe.Pointer(statbuf)).Fst_size, (*stat.Stat)(unsafe.Pointer(statbuf))) - // } - return 0 -} - -// void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address */); -func Xmremap(t *TLS, old_address uintptr, old_size, new_size types.Size_t, flags int32, args uintptr) uintptr { - if __ccgo_strace { - trc("t=%v old_address=%v new_size=%v flags=%v args=%v, (%v:)", t, old_address, new_size, flags, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - data, _, err := unix.Syscall6(unix.SYS_MREMAP, old_address, uintptr(old_size), uintptr(new_size), uintptr(flags), arg, 0) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - return Xmmap64(t, addr, length, prot, flags, fd, offset) -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap64(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - data, _, err := unix.Syscall6(unix.SYS_MMAP2, addr, uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset>>12)) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// int symlink(const char *target, const char *linkpath); -func Xsymlink(t *TLS, target, linkpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v linkpath=%v, (%v:)", t, linkpath, origin(2)) - } - if err := unix.Symlink(GoString(target), GoString(linkpath)); err != nil { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %q: ok", origin(1), GoString(target), GoString(linkpath)) - // } - return 0 -} - -// int chmod(const char *pathname, mode_t mode) -func Xchmod(t *TLS, pathname uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if err := unix.Chmod(GoString(pathname), uint32(mode)); err != nil { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int ftruncate(int fd, off_t length); -func Xftruncate64(t *TLS, fd int32, length types.Off_t) int32 { - if __ccgo_strace { - trc("t=%v fd=%v length=%v, (%v:)", t, fd, length, origin(2)) - } - if _, _, err := unix.Syscall6(unix.SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %#x: ok", origin(1), fd, length) - // } - return 0 -} - -// off64_t lseek64(int fd, off64_t offset, int whence); -func Xlseek64(t *TLS, fd int32, offset types.Off_t, whence int32) types.Off_t { - if __ccgo_strace { - trc("t=%v fd=%v offset=%v whence=%v, (%v:)", t, fd, offset, whence, origin(2)) - } - n, err := unix.Seek(int(fd), int64(offset), int(whence)) - if err != nil { - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %v", origin(1), fd, offset, whenceStr(whence), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %#x", origin(1), fd, offset, whenceStr(whence), n) - // } - return types.Off_t(n) -} - -// int utime(const char *filename, const struct utimbuf *times); -func Xutime(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if dmesgs { - dmesg("t=%v filename=%q times=%v, (%v:)", t, GoString(filename), times, origin(2)) - } - switch { - case times == 0: - var buf unix.Utimbuf - tm := time.Now().Unix() - buf.Actime = int32(tm) - buf.Modtime = int32(tm) - if err := unix.Utime(GoString(filename), &buf); err != nil { - if dmesgs { - dmesg("t=%v err=%v", t, err) - } - t.setErrno(err) - return -1 - } - default: - if err := unix.Utime(GoString(filename), (*unix.Utimbuf)(unsafe.Pointer(times))); err != nil { - if dmesgs { - dmesg("t=%v err=%v", t, err) - } - t.setErrno(err) - return -1 - } - } - - if dmesgs { - dmesg("t=%v OK", t) - } - return 0 -} - -// unsigned int alarm(unsigned int seconds); -func Xalarm(t *TLS, seconds uint32) uint32 { - if __ccgo_strace { - trc("t=%v seconds=%v, (%v:)", t, seconds, origin(2)) - } - panic(todo("")) -} - -// int getrlimit(int resource, struct rlimit *rlim); -func Xgetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if err := unix.Getrlimit(int(resource), (*unix.Rlimit)(unsafe.Pointer(rlim))); err != nil { - t.setErrno(err) - return -1 - } - - return 0 -} - -// time_t time(time_t *tloc); -func Xtime(t *TLS, tloc uintptr) types.Time_t { - if __ccgo_strace { - trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) - } - n := time.Now().UTC().Unix() - if tloc != 0 { - *(*types.Time_t)(unsafe.Pointer(tloc)) = types.Time_t(n) - } - return types.Time_t(n) -} - -// int utimes(const char *filename, const struct timeval times[2]); -func Xutimes(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - var tv []unix.Timeval - if times != 0 { - tv = make([]unix.Timeval, 2) - *(*[2]unix.Timeval)(unsafe.Pointer(&tv[0])) = *(*[2]unix.Timeval)(unsafe.Pointer(times)) - } - if err := unix.Utimes(GoString(filename), tv); err != nil { - t.setErrno(err) - return -1 - } - - if times != 0 { - *(*[2]unix.Timeval)(unsafe.Pointer(times)) = *(*[2]unix.Timeval)(unsafe.Pointer(&tv[0])) - } - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(filename)) - // } - return 0 -} - -// int unlink(const char *pathname); -func Xunlink(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if err := unix.Unlinkat(unix.AT_FDCWD, GoString(pathname), 0); err != nil { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int access(const char *pathname, int mode); -func Xaccess(t *TLS, pathname uintptr, mode int32) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if err := unix.Faccessat(unix.AT_FDCWD, GoString(pathname), uint32(mode), 0); err != nil { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int rmdir(const char *pathname); -func Xrmdir(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if err := unix.Rmdir(GoString(pathname)); err != nil { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int rename(const char *oldpath, const char *newpath); -func Xrename(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if err := unix.Rename(GoString(oldpath), GoString(newpath)); err != nil { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mknod(const char *pathname, mode_t mode, dev_t dev); -func Xmknod(t *TLS, pathname uintptr, mode types.Mode_t, dev types.Dev_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v dev=%v, (%v:)", t, pathname, mode, dev, origin(2)) - } - panic(todo("")) -} - -// int chown(const char *pathname, uid_t owner, gid_t group); -func Xchown(t *TLS, pathname uintptr, owner types.Uid_t, group types.Gid_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v owner=%v group=%v, (%v:)", t, pathname, owner, group, origin(2)) - } - if err := unix.Chown(GoString(pathname), int(owner), int(group)); err != nil { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int link(const char *oldpath, const char *newpath); -func Xlink(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - panic(todo("")) -} - -// int pipe(int pipefd[2]); -func Xpipe(t *TLS, pipefd uintptr) int32 { - if __ccgo_strace { - trc("t=%v pipefd=%v, (%v:)", t, pipefd, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_PIPE2, pipefd, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int dup2(int oldfd, int newfd); -func Xdup2(t *TLS, oldfd, newfd int32) int32 { - if __ccgo_strace { - trc("t=%v newfd=%v, (%v:)", t, newfd, origin(2)) - } - panic(todo("")) -} - -// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize); -func Xreadlink(t *TLS, path, buf uintptr, bufsize types.Size_t) types.Ssize_t { - if __ccgo_strace { - trc("t=%v buf=%v bufsize=%v, (%v:)", t, buf, bufsize, origin(2)) - } - n, err := unix.Readlink(GoString(path), GoBytes(buf, int(bufsize))) - if err != nil { - t.setErrno(err) - return -1 - } - - return types.Ssize_t(n) -} - -// FILE *fopen64(const char *pathname, const char *mode); -func Xfopen64(t *TLS, pathname, mode uintptr) uintptr { - if __ccgo_strace { - trc("t=%v mode=%v, (%v:)", t, mode, origin(2)) - } - m := strings.ReplaceAll(GoString(mode), "b", "") - var flags int - switch m { - case "r": - flags = os.O_RDONLY - case "r+": - flags = os.O_RDWR - case "w": - flags = os.O_WRONLY | os.O_CREATE | os.O_TRUNC - case "w+": - flags = os.O_RDWR | os.O_CREATE | os.O_TRUNC - case "a": - flags = os.O_WRONLY | os.O_CREATE | os.O_APPEND - case "a+": - flags = os.O_RDWR | os.O_CREATE | os.O_APPEND - default: - panic(m) - } - //TODO- flags |= fcntl.O_LARGEFILE - fd, _, err := unix.Syscall(unix.SYS_OPEN, pathname, uintptr(flags|unix.O_LARGEFILE), 0666) - if err != 0 { - t.setErrno(err) - return 0 - } - - if p := newFile(t, int32(fd)); p != 0 { - return p - } - - Xclose(t, int32(fd)) - t.setErrno(errno.ENOMEM) - return 0 -} - -// int mkdir(const char *path, mode_t mode); -func Xmkdir(t *TLS, path uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v path=%v mode=%v, (%v:)", t, path, mode, origin(2)) - } - if err := unix.Mkdir(GoString(path), uint32(mode)); err != nil { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(path)) - // } - return 0 -} - -//TODO- // int sscanf(const char *str, const char *format, ...); -//TODO- func Xsscanf(t *TLS, str, format, va uintptr) int32 { -//TODO- r := scanf(strings.NewReader(GoString(str)), format, va) -//TODO- // if dmesgs { -//TODO- // dmesg("%v: %q %q: %d", origin(1), GoString(str), GoString(format), r) -//TODO- // } -//TODO- return r -//TODO- } - -// int setrlimit(int resource, const struct rlimit *rlim); -func Xsetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -var _table1 = [384]int32{ - 129: int32(1), - 130: int32(2), - 131: int32(3), - 132: int32(4), - 133: int32(5), - 134: int32(6), - 135: int32(7), - 136: int32(8), - 137: int32(9), - 138: int32(10), - 139: int32(11), - 140: int32(12), - 141: int32(13), - 142: int32(14), - 143: int32(15), - 144: int32(16), - 145: int32(17), - 146: int32(18), - 147: int32(19), - 148: int32(20), - 149: int32(21), - 150: int32(22), - 151: int32(23), - 152: int32(24), - 153: int32(25), - 154: int32(26), - 155: int32(27), - 156: int32(28), - 157: int32(29), - 158: int32(30), - 159: int32(31), - 160: int32(32), - 161: int32(33), - 162: int32(34), - 163: int32(35), - 164: int32(36), - 165: int32(37), - 166: int32(38), - 167: int32(39), - 168: int32(40), - 169: int32(41), - 170: int32(42), - 171: int32(43), - 172: int32(44), - 173: int32(45), - 174: int32(46), - 175: int32(47), - 176: int32(48), - 177: int32(49), - 178: int32(50), - 179: int32(51), - 180: int32(52), - 181: int32(53), - 182: int32(54), - 183: int32(55), - 184: int32(56), - 185: int32(57), - 186: int32(58), - 187: int32(59), - 188: int32(60), - 189: int32(61), - 190: int32(62), - 191: int32(63), - 192: int32(64), - 193: int32('a'), - 194: int32('b'), - 195: int32('c'), - 196: int32('d'), - 197: int32('e'), - 198: int32('f'), - 199: int32('g'), - 200: int32('h'), - 201: int32('i'), - 202: int32('j'), - 203: int32('k'), - 204: int32('l'), - 205: int32('m'), - 206: int32('n'), - 207: int32('o'), - 208: int32('p'), - 209: int32('q'), - 210: int32('r'), - 211: int32('s'), - 212: int32('t'), - 213: int32('u'), - 214: int32('v'), - 215: int32('w'), - 216: int32('x'), - 217: int32('y'), - 218: int32('z'), - 219: int32(91), - 220: int32(92), - 221: int32(93), - 222: int32(94), - 223: int32(95), - 224: int32(96), - 225: int32('a'), - 226: int32('b'), - 227: int32('c'), - 228: int32('d'), - 229: int32('e'), - 230: int32('f'), - 231: int32('g'), - 232: int32('h'), - 233: int32('i'), - 234: int32('j'), - 235: int32('k'), - 236: int32('l'), - 237: int32('m'), - 238: int32('n'), - 239: int32('o'), - 240: int32('p'), - 241: int32('q'), - 242: int32('r'), - 243: int32('s'), - 244: int32('t'), - 245: int32('u'), - 246: int32('v'), - 247: int32('w'), - 248: int32('x'), - 249: int32('y'), - 250: int32('z'), - 251: int32(123), - 252: int32(124), - 253: int32(125), - 254: int32(126), - 255: int32(127), -} - -var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 - -func X__ctype_tolower_loc(tls *TLS) (r uintptr) { - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - defer func() { trc("-> %v", r) }() - } - return uintptr(unsafe.Pointer(&_ptable1)) -} - -var Xin6addr_any = Tin6_addr{} - -type Tin6_addr = struct { - F__in6_union struct { - F__s6_addr16 [0][8]uint16 - F__s6_addr32 [0][4]uint32 - F__s6_addr [16]uint8 - } -} - -func Xrewinddir(tls *TLS, f uintptr) { - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - Xfseek(tls, f, 0, stdio.SEEK_SET) -} - -func AtomicLoadNUint8(ptr uintptr, memorder int32) uint8 { - return byte(a_load_8(ptr)) -} - -// clock_t clock(void); -func Xclock(t *TLS) ctime.Clock_t { - if __ccgo_strace { - trc("t=%v, (%v:)", t, origin(2)) - } - return ctime.Clock_t(time.Since(startTime) * time.Duration(ctime.CLOCKS_PER_SEC) / time.Second) -} diff --git a/vendor/modernc.org/libc/libc_linux_ppc64le.go b/vendor/modernc.org/libc/libc_linux_ppc64le.go deleted file mode 100644 index 5cfdc30..0000000 --- a/vendor/modernc.org/libc/libc_linux_ppc64le.go +++ /dev/null @@ -1,769 +0,0 @@ -// Copyright 2020 The Libc 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 libc // import "modernc.org/libc" - -import ( - "os" - "strings" - gotime "time" - "unicode" - "unsafe" - - "golang.org/x/sys/unix" - "modernc.org/libc/errno" - "modernc.org/libc/fcntl" - "modernc.org/libc/signal" - "modernc.org/libc/stdio" - "modernc.org/libc/sys/types" - "modernc.org/libc/time" - "modernc.org/libc/wctype" -) - -var ( - startTime = gotime.Now() // For clock(3) -) - -// int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); -func Xsigaction(t *TLS, signum int32, act, oldact uintptr) int32 { - if __ccgo_strace { - trc("t=%v signum=%v oldact=%v, (%v:)", t, signum, oldact, origin(2)) - } - // musl/arch/x86_64/ksigaction.h - // - // struct k_sigaction { - // void (*handler)(int); - // unsigned long flags; - // void (*restorer)(void); - // unsigned mask[2]; - // }; - type k_sigaction struct { - handler uintptr - flags ulong - restorer uintptr - mask [2]uint32 - } - - var kact, koldact uintptr - if act != 0 { - sz := int(unsafe.Sizeof(k_sigaction{})) - kact = t.Alloc(sz) - defer t.Free(sz) - *(*k_sigaction)(unsafe.Pointer(kact)) = k_sigaction{ - handler: (*signal.Sigaction)(unsafe.Pointer(act)).F__sigaction_handler.Fsa_handler, - flags: ulong((*signal.Sigaction)(unsafe.Pointer(act)).Fsa_flags), - restorer: (*signal.Sigaction)(unsafe.Pointer(act)).Fsa_restorer, - } - Xmemcpy(t, kact+unsafe.Offsetof(k_sigaction{}.mask), act+unsafe.Offsetof(signal.Sigaction{}.Fsa_mask), types.Size_t(unsafe.Sizeof(k_sigaction{}.mask))) - } - if oldact != 0 { - panic(todo("")) - } - - if _, _, err := unix.Syscall6(unix.SYS_RT_SIGACTION, uintptr(signum), kact, koldact, unsafe.Sizeof(k_sigaction{}.mask), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if oldact != 0 { - panic(todo("")) - } - - return 0 -} - -// int fcntl(int fd, int cmd, ... /* arg */ ); -func Xfcntl64(t *TLS, fd, cmd int32, args uintptr) int32 { - if __ccgo_strace { - trc("t=%v cmd=%v args=%v, (%v:)", t, cmd, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - switch cmd { - case unix.F_GETLK64: // 0xc - cmd = unix.F_GETLK // 0x5 - case unix.F_SETLK64: // 0xd - cmd = unix.F_SETLK // 0x6 - case unix.F_SETLKW64: // 0xe - cmd = unix.F_SETLKW // 0x7 - } - if cmd == fcntl.F_SETFL { - arg |= unix.O_LARGEFILE - } - n, _, err := unix.Syscall(unix.SYS_FCNTL, uintptr(fd), uintptr(cmd), arg) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v cmd %v", origin(1), fcntlCmdStr(fd), cmd) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %s %#x: %d", origin(1), fd, fcntlCmdStr(cmd), arg, n) - // } - return int32(n) -} - -// int lstat(const char *pathname, struct stat *statbuf); -func Xlstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LSTAT, pathname, statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int stat(const char *pathname, struct stat *statbuf); -func Xstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_STAT, pathname, statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int fstat(int fd, struct stat *statbuf); -func Xfstat64(t *TLS, fd int32, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v fd=%v statbuf=%v, (%v:)", t, fd, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FSTAT, uintptr(fd), statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d size %#x: ok\n%+v", origin(1), fd, (*stat.Stat)(unsafe.Pointer(statbuf)).Fst_size, (*stat.Stat)(unsafe.Pointer(statbuf))) - // } - return 0 -} - -func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - return Xmmap64(t, addr, length, prot, flags, fd, offset) -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap64(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - data, _, err := unix.Syscall6(unix.SYS_MMAP, addr, uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address */); -func Xmremap(t *TLS, old_address uintptr, old_size, new_size types.Size_t, flags int32, args uintptr) uintptr { - if __ccgo_strace { - trc("t=%v old_address=%v new_size=%v flags=%v args=%v, (%v:)", t, old_address, new_size, flags, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - data, _, err := unix.Syscall6(unix.SYS_MREMAP, old_address, uintptr(old_size), uintptr(new_size), uintptr(flags), arg, 0) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// int ftruncate(int fd, off_t length); -func Xftruncate64(t *TLS, fd int32, length types.Off_t) int32 { - if __ccgo_strace { - trc("t=%v fd=%v length=%v, (%v:)", t, fd, length, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %#x: ok", origin(1), fd, length) - // } - return 0 -} - -// off64_t lseek64(int fd, off64_t offset, int whence); -func Xlseek64(t *TLS, fd int32, offset types.Off_t, whence int32) types.Off_t { - if __ccgo_strace { - trc("t=%v fd=%v offset=%v whence=%v, (%v:)", t, fd, offset, whence, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %v", origin(1), fd, offset, whenceStr(whence), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %#x", origin(1), fd, offset, whenceStr(whence), n) - // } - return types.Off_t(n) -} - -// int utime(const char *filename, const struct utimbuf *times); -func Xutime(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIME, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// unsigned int alarm(unsigned int seconds); -func Xalarm(t *TLS, seconds uint32) uint32 { - if __ccgo_strace { - trc("t=%v seconds=%v, (%v:)", t, seconds, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_ALARM, uintptr(seconds), 0, 0) - if err != 0 { - panic(todo("")) - } - - return uint32(n) -} - -// time_t time(time_t *tloc); -func Xtime(t *TLS, tloc uintptr) types.Time_t { - if __ccgo_strace { - trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_TIME, tloc, 0, 0) - if err != 0 { - t.setErrno(err) - return types.Time_t(-1) - } - - if tloc != 0 { - *(*types.Time_t)(unsafe.Pointer(tloc)) = types.Time_t(n) - } - return types.Time_t(n) -} - -// int getrlimit(int resource, struct rlimit *rlim); -func Xgetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_GETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mkdir(const char *path, mode_t mode); -func Xmkdir(t *TLS, path uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v path=%v mode=%v, (%v:)", t, path, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKDIR, path, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(path)) - // } - return 0 -} - -// int symlink(const char *target, const char *linkpath); -func Xsymlink(t *TLS, target, linkpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v linkpath=%v, (%v:)", t, linkpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SYMLINK, target, linkpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %q: ok", origin(1), GoString(target), GoString(linkpath)) - // } - return 0 -} - -// int chmod(const char *pathname, mode_t mode) -func Xchmod(t *TLS, pathname uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHMOD, pathname, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int utimes(const char *filename, const struct timeval times[2]); -func Xutimes(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIMES, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(filename)) - // } - return 0 -} - -// int unlink(const char *pathname); -func Xunlink(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UNLINK, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int access(const char *pathname, int mode); -func Xaccess(t *TLS, pathname uintptr, mode int32) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_ACCESS, pathname, uintptr(mode), 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int rmdir(const char *pathname); -func Xrmdir(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RMDIR, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int rename(const char *oldpath, const char *newpath); -func Xrename(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RENAME, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mknod(const char *pathname, mode_t mode, dev_t dev); -func Xmknod(t *TLS, pathname uintptr, mode types.Mode_t, dev types.Dev_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v dev=%v, (%v:)", t, pathname, mode, dev, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKNOD, pathname, uintptr(mode), uintptr(dev)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int chown(const char *pathname, uid_t owner, gid_t group); -func Xchown(t *TLS, pathname uintptr, owner types.Uid_t, group types.Gid_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v owner=%v group=%v, (%v:)", t, pathname, owner, group, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHOWN, pathname, uintptr(owner), uintptr(group)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int link(const char *oldpath, const char *newpath); -func Xlink(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LINK, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int pipe(int pipefd[2]); -func Xpipe(t *TLS, pipefd uintptr) int32 { - if __ccgo_strace { - trc("t=%v pipefd=%v, (%v:)", t, pipefd, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_PIPE, pipefd, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int dup2(int oldfd, int newfd); -func Xdup2(t *TLS, oldfd, newfd int32) int32 { - if __ccgo_strace { - trc("t=%v newfd=%v, (%v:)", t, newfd, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if err != 0 { - t.setErrno(err) - return -1 - } - - return int32(n) -} - -// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize); -func Xreadlink(t *TLS, path, buf uintptr, bufsize types.Size_t) types.Ssize_t { - if __ccgo_strace { - trc("t=%v buf=%v bufsize=%v, (%v:)", t, buf, bufsize, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_READLINK, path, buf, uintptr(bufsize)) - if err != 0 { - t.setErrno(err) - return -1 - } - - return types.Ssize_t(n) -} - -// FILE *fopen64(const char *pathname, const char *mode); -func Xfopen64(t *TLS, pathname, mode uintptr) uintptr { - if __ccgo_strace { - trc("t=%v mode=%v, (%v:)", t, mode, origin(2)) - } - m := strings.ReplaceAll(GoString(mode), "b", "") - var flags int - switch m { - case "r": - flags = os.O_RDONLY - case "r+": - flags = os.O_RDWR - case "w": - flags = os.O_WRONLY | os.O_CREATE | os.O_TRUNC - case "w+": - flags = os.O_RDWR | os.O_CREATE | os.O_TRUNC - case "a": - flags = os.O_WRONLY | os.O_CREATE | os.O_APPEND - case "a+": - flags = os.O_RDWR | os.O_CREATE | os.O_APPEND - default: - panic(m) - } - //TODO- flags |= fcntl.O_LARGEFILE - fd, _, err := unix.Syscall(unix.SYS_OPEN, pathname, uintptr(flags|unix.O_LARGEFILE), 0666) - if err != 0 { - t.setErrno(err) - return 0 - } - - if p := newFile(t, int32(fd)); p != 0 { - return p - } - - Xclose(t, int32(fd)) - t.setErrno(errno.ENOMEM) - return 0 -} - -// int iswspace(wint_t wc); -func Xiswspace(t *TLS, wc wctype.Wint_t) int32 { - if __ccgo_strace { - trc("t=%v wc=%v, (%v:)", t, wc, origin(2)) - } - return Bool32(unicode.IsSpace(rune(wc))) -} - -// int iswalnum(wint_t wc); -func Xiswalnum(t *TLS, wc wctype.Wint_t) int32 { - if __ccgo_strace { - trc("t=%v wc=%v, (%v:)", t, wc, origin(2)) - } - return Bool32(unicode.IsLetter(rune(wc)) || unicode.IsNumber(rune(wc))) -} - -func __syscall1(t *TLS, trap, p1 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), 0, 0)) -} - -func __syscall3(t *TLS, trap, p1, p2, p3 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3))) -} - -func __syscall4(t *TLS, trap, p1, p2, p3, p4 long) long { - return __syscall(unix.Syscall6(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3), uintptr(p4), 0, 0)) -} - -// int setrlimit(int resource, const struct rlimit *rlim); -func Xsetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -func AtomicLoadNUint8(ptr uintptr, memorder int32) uint8 { - return byte(a_load_8(ptr)) -} - -var _table1 = [384]int32{ - 129: int32(1), - 130: int32(2), - 131: int32(3), - 132: int32(4), - 133: int32(5), - 134: int32(6), - 135: int32(7), - 136: int32(8), - 137: int32(9), - 138: int32(10), - 139: int32(11), - 140: int32(12), - 141: int32(13), - 142: int32(14), - 143: int32(15), - 144: int32(16), - 145: int32(17), - 146: int32(18), - 147: int32(19), - 148: int32(20), - 149: int32(21), - 150: int32(22), - 151: int32(23), - 152: int32(24), - 153: int32(25), - 154: int32(26), - 155: int32(27), - 156: int32(28), - 157: int32(29), - 158: int32(30), - 159: int32(31), - 160: int32(32), - 161: int32(33), - 162: int32(34), - 163: int32(35), - 164: int32(36), - 165: int32(37), - 166: int32(38), - 167: int32(39), - 168: int32(40), - 169: int32(41), - 170: int32(42), - 171: int32(43), - 172: int32(44), - 173: int32(45), - 174: int32(46), - 175: int32(47), - 176: int32(48), - 177: int32(49), - 178: int32(50), - 179: int32(51), - 180: int32(52), - 181: int32(53), - 182: int32(54), - 183: int32(55), - 184: int32(56), - 185: int32(57), - 186: int32(58), - 187: int32(59), - 188: int32(60), - 189: int32(61), - 190: int32(62), - 191: int32(63), - 192: int32(64), - 193: int32('a'), - 194: int32('b'), - 195: int32('c'), - 196: int32('d'), - 197: int32('e'), - 198: int32('f'), - 199: int32('g'), - 200: int32('h'), - 201: int32('i'), - 202: int32('j'), - 203: int32('k'), - 204: int32('l'), - 205: int32('m'), - 206: int32('n'), - 207: int32('o'), - 208: int32('p'), - 209: int32('q'), - 210: int32('r'), - 211: int32('s'), - 212: int32('t'), - 213: int32('u'), - 214: int32('v'), - 215: int32('w'), - 216: int32('x'), - 217: int32('y'), - 218: int32('z'), - 219: int32(91), - 220: int32(92), - 221: int32(93), - 222: int32(94), - 223: int32(95), - 224: int32(96), - 225: int32('a'), - 226: int32('b'), - 227: int32('c'), - 228: int32('d'), - 229: int32('e'), - 230: int32('f'), - 231: int32('g'), - 232: int32('h'), - 233: int32('i'), - 234: int32('j'), - 235: int32('k'), - 236: int32('l'), - 237: int32('m'), - 238: int32('n'), - 239: int32('o'), - 240: int32('p'), - 241: int32('q'), - 242: int32('r'), - 243: int32('s'), - 244: int32('t'), - 245: int32('u'), - 246: int32('v'), - 247: int32('w'), - 248: int32('x'), - 249: int32('y'), - 250: int32('z'), - 251: int32(123), - 252: int32(124), - 253: int32(125), - 254: int32(126), - 255: int32(127), -} - -var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 - -func X__ctype_tolower_loc(tls *TLS) (r uintptr) { - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - defer func() { trc("-> %v", r) }() - } - return uintptr(unsafe.Pointer(&_ptable1)) -} - -type Tin6_addr = struct { - F__in6_union struct { - F__s6_addr16 [0][8]uint16 - F__s6_addr32 [0][4]uint32 - F__s6_addr [16]uint8 - } -} - -var Xin6addr_any = Tin6_addr{} - -func Xrewinddir(tls *TLS, f uintptr) { - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - Xfseek(tls, f, 0, stdio.SEEK_SET) -} - -// clock_t clock(void); -func Xclock(t *TLS) time.Clock_t { - if __ccgo_strace { - trc("t=%v, (%v:)", t, origin(2)) - } - return time.Clock_t(gotime.Since(startTime) * gotime.Duration(time.CLOCKS_PER_SEC) / gotime.Second) -} diff --git a/vendor/modernc.org/libc/libc_linux_riscv64.go b/vendor/modernc.org/libc/libc_linux_riscv64.go deleted file mode 100644 index 21f65d6..0000000 --- a/vendor/modernc.org/libc/libc_linux_riscv64.go +++ /dev/null @@ -1,712 +0,0 @@ -// Copyright 2020 The Libc 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 libc // import "modernc.org/libc" - -import ( - "os" - "strings" - gotime "time" - "unicode" - "unsafe" - - "golang.org/x/sys/unix" - "modernc.org/libc/errno" - "modernc.org/libc/fcntl" - "modernc.org/libc/signal" - "modernc.org/libc/stdio" - "modernc.org/libc/sys/types" - "modernc.org/libc/time" - "modernc.org/libc/utime" - "modernc.org/libc/wctype" -) - -var ( - startTime = gotime.Now() // For clock(3) -) - -// int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); -func Xsigaction(t *TLS, signum int32, act, oldact uintptr) int32 { - if __ccgo_strace { - trc("t=%v signum=%v oldact=%v, (%v:)", t, signum, oldact, origin(2)) - } - // musl/arch/x86_64/ksigaction.h - // - // struct k_sigaction { - // void (*handler)(int); - // unsigned long flags; - // void (*restorer)(void); - // unsigned mask[2]; - // }; - type k_sigaction struct { - handler uintptr - flags ulong - restorer uintptr - mask [2]uint32 - } - - var kact, koldact uintptr - if act != 0 { - sz := int(unsafe.Sizeof(k_sigaction{})) - kact = t.Alloc(sz) - defer t.Free(sz) - *(*k_sigaction)(unsafe.Pointer(kact)) = k_sigaction{ - handler: (*signal.Sigaction)(unsafe.Pointer(act)).F__sigaction_handler.Fsa_handler, - flags: ulong((*signal.Sigaction)(unsafe.Pointer(act)).Fsa_flags), - restorer: (*signal.Sigaction)(unsafe.Pointer(act)).Fsa_restorer, - } - Xmemcpy(t, kact+unsafe.Offsetof(k_sigaction{}.mask), act+unsafe.Offsetof(signal.Sigaction{}.Fsa_mask), types.Size_t(unsafe.Sizeof(k_sigaction{}.mask))) - } - if oldact != 0 { - panic(todo("")) - } - - if _, _, err := unix.Syscall6(unix.SYS_RT_SIGACTION, uintptr(signum), kact, koldact, unsafe.Sizeof(k_sigaction{}.mask), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if oldact != 0 { - panic(todo("")) - } - - return 0 -} - -// int fcntl(int fd, int cmd, ... /* arg */ ); -func Xfcntl64(t *TLS, fd, cmd int32, args uintptr) int32 { - if __ccgo_strace { - trc("t=%v cmd=%v args=%v, (%v:)", t, cmd, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - if cmd == fcntl.F_SETFL { - arg |= unix.O_LARGEFILE - } - n, _, err := unix.Syscall(unix.SYS_FCNTL, uintptr(fd), uintptr(cmd), arg) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v cmd %v", origin(1), fcntlCmdStr(fd), cmd) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %s %#x: %d", origin(1), fd, fcntlCmdStr(cmd), arg, n) - // } - return int32(n) -} - -// int fstatat(int dirfd, const char *pathname, struct stat *statbuf, int flags); -func Xfstatat(t *TLS, dirfd int32, pathname, statbuf uintptr, flags int32) int32 { - if __ccgo_strace { - trc("t=%v dirfd=%v statbuf=%v flags=%v, (%v:)", t, dirfd, statbuf, flags, origin(2)) - } - // From golang.org/x/sys/unix/zsyscall_linux_riscv64.go - if _, _, err := unix.Syscall6(unix.SYS_FSTATAT, uintptr(dirfd), pathname, statbuf, uintptr(flags), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int lstat(const char *pathname, struct stat *statbuf); -func Xlstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux_riscv64.go - return Xfstatat(t, unix.AT_FDCWD, pathname, statbuf, unix.AT_SYMLINK_NOFOLLOW) -} - -// int stat(const char *pathname, struct stat *statbuf); -func Xstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux_riscv64.go - return Xfstatat(t, unix.AT_FDCWD, pathname, statbuf, 0) -} - -// int fstat(int fd, struct stat *statbuf); -func Xfstat64(t *TLS, fd int32, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v fd=%v statbuf=%v, (%v:)", t, fd, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FSTAT, uintptr(fd), statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d size %#x: ok\n%+v", origin(1), fd, (*stat.Stat)(unsafe.Pointer(statbuf)).Fst_size, (*stat.Stat)(unsafe.Pointer(statbuf))) - // } - return 0 -} - -func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - return Xmmap64(t, addr, length, prot, flags, fd, offset) -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap64(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - data, _, err := unix.Syscall6(unix.SYS_MMAP, addr, uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address */); -func Xmremap(t *TLS, old_address uintptr, old_size, new_size types.Size_t, flags int32, args uintptr) uintptr { - if __ccgo_strace { - trc("t=%v old_address=%v new_size=%v flags=%v args=%v, (%v:)", t, old_address, new_size, flags, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - data, _, err := unix.Syscall6(unix.SYS_MREMAP, old_address, uintptr(old_size), uintptr(new_size), uintptr(flags), arg, 0) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// int ftruncate(int fd, off_t length); -func Xftruncate64(t *TLS, fd int32, length types.Off_t) int32 { - if __ccgo_strace { - trc("t=%v fd=%v length=%v, (%v:)", t, fd, length, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %#x: ok", origin(1), fd, length) - // } - return 0 -} - -// off64_t lseek64(int fd, off64_t offset, int whence); -func Xlseek64(t *TLS, fd int32, offset types.Off_t, whence int32) types.Off_t { - if __ccgo_strace { - trc("t=%v fd=%v offset=%v whence=%v, (%v:)", t, fd, offset, whence, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %v", origin(1), fd, offset, whenceStr(whence), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %#x", origin(1), fd, offset, whenceStr(whence), n) - // } - return types.Off_t(n) -} - -// From man utime executed on linux/riscv64: -// -// The utimbuf structure is: -// -// struct utimbuf { -// time_t actime; /* access time */ -// time_t modtime; /* modification time */ -// }; - -type utimbuf struct { - actime utime.Time_t - modtime utime.Time_t -} - -// int utime(const char *filename, const struct utimbuf *times); -func Xutime(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if times == 0 { - return Xutimes(t, filename, 0) - } - - n := int(unsafe.Sizeof([2]types.Timeval{})) - p := t.Alloc(n) - defer t.Free(n) - *(*[2]types.Timeval)(unsafe.Pointer(p)) = [2]types.Timeval{ - {Ftv_sec: (*utimbuf)(unsafe.Pointer(times)).actime}, - {Ftv_sec: (*utimbuf)(unsafe.Pointer(times)).modtime}, - } - return Xutimes(t, filename, p) -} - -// unsigned int alarm(unsigned int seconds); -func Xalarm(t *TLS, seconds uint32) uint32 { - if __ccgo_strace { - trc("t=%v seconds=%v, (%v:)", t, seconds, origin(2)) - } - panic(todo("")) - // No alarm syscall on linux/riscv64. And cannot implement with setitimer as in musl, - // because of missing defination to constant ITIMER_REAL in types_linux_riscv64.go. -} - -// time_t time(time_t *tloc); -func Xtime(t *TLS, tloc uintptr) types.Time_t { - if __ccgo_strace { - trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux_riscv64.go - var tv types.Timeval - if err := Xgettimeofday(t, uintptr(unsafe.Pointer(&tv)), 0); err != 0 { - t.setErrno(err) - return -1 - } - - if tloc != 0 { - *(*types.Time_t)(unsafe.Pointer(tloc)) = tv.Ftv_sec - } - return tv.Ftv_sec -} - -// int getrlimit(int resource, struct rlimit *rlim); -func Xgetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_GETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mkdir(const char *path, mode_t mode); -func Xmkdir(t *TLS, path uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v path=%v mode=%v, (%v:)", t, path, mode, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xmkdirat(t, unix.AT_FDCWD, path, mode) -} - -// int symlink(const char *target, const char *linkpath); -func Xsymlink(t *TLS, target, linkpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v linkpath=%v, (%v:)", t, linkpath, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xsymlinkat(t, target, unix.AT_FDCWD, linkpath) -} - -// int chmod(const char *pathname, mode_t mode) -func Xchmod(t *TLS, pathname uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xfchmodat(t, unix.AT_FDCWD, pathname, mode, 0) -} - -// int utimes(const char *filename, const struct timeval times[2]); -func Xutimes(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - return Xutimensat(t, unix.AT_FDCWD, filename, times, 0) -} - -// int unlink(const char *pathname); -func Xunlink(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xunlinkat(t, unix.AT_FDCWD, pathname, 0) -} - -// int access(const char *pathname, int mode); -func Xaccess(t *TLS, pathname uintptr, mode int32) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xfaccessat(t, unix.AT_FDCWD, pathname, mode, 0) -} - -// int rmdir(const char *pathname); -func Xrmdir(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xunlinkat(t, unix.AT_FDCWD, pathname, unix.AT_REMOVEDIR) -} - -// int rename(const char *oldpath, const char *newpath); -func Xrename(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xrenameat(t, unix.AT_FDCWD, oldpath, unix.AT_FDCWD, newpath) -} - -// int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath); -func Xrenameat(t *TLS, olddirfd int32, oldpath uintptr, newdirfd int32, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v olddirfd=%v oldpath=%v newdirfd=%v newpath=%v, (%v:)", t, olddirfd, oldpath, newdirfd, newpath, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux_riscv64.go - return Xrenameat2(t, olddirfd, oldpath, newdirfd, newpath, 0) -} - -// int mknod(const char *pathname, mode_t mode, dev_t dev); -func Xmknod(t *TLS, pathname uintptr, mode types.Mode_t, dev types.Dev_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v dev=%v, (%v:)", t, pathname, mode, dev, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xmknodat(t, unix.AT_FDCWD, pathname, mode, dev) -} - -// int chown(const char *pathname, uid_t owner, gid_t group); -func Xchown(t *TLS, pathname uintptr, owner types.Uid_t, group types.Gid_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v owner=%v group=%v, (%v:)", t, pathname, owner, group, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xfchownat(t, unix.AT_FDCWD, pathname, owner, group, 0) -} - -// int link(const char *oldpath, const char *newpath); -func Xlink(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xlinkat(t, unix.AT_FDCWD, oldpath, unix.AT_FDCWD, newpath, 0) -} - -// int pipe(int pipefd[2]); -func Xpipe(t *TLS, pipefd uintptr) int32 { - if __ccgo_strace { - trc("t=%v pipefd=%v, (%v:)", t, pipefd, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xpipe2(t, pipefd, 0) -} - -// int dup2(int oldfd, int newfd); -func Xdup2(t *TLS, oldfd, newfd int32) int32 { - if __ccgo_strace { - trc("t=%v newfd=%v, (%v:)", t, newfd, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xdup3(t, oldfd, newfd, 0) -} - -// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize); -func Xreadlink(t *TLS, path, buf uintptr, bufsize types.Size_t) types.Ssize_t { - if __ccgo_strace { - trc("t=%v buf=%v bufsize=%v, (%v:)", t, buf, bufsize, origin(2)) - } - // From golang.org/x/sys/unix/syscall_linux.go - return Xreadlinkat(t, unix.AT_FDCWD, path, buf, bufsize) -} - -// FILE *fopen64(const char *pathname, const char *mode); -func Xfopen64(t *TLS, pathname, mode uintptr) uintptr { - if __ccgo_strace { - trc("t=%v mode=%v, (%v:)", t, mode, origin(2)) - } - m := strings.ReplaceAll(GoString(mode), "b", "") - var flags int - switch m { - case "r": - flags = os.O_RDONLY - case "r+": - flags = os.O_RDWR - case "w": - flags = os.O_WRONLY | os.O_CREATE | os.O_TRUNC - case "w+": - flags = os.O_RDWR | os.O_CREATE | os.O_TRUNC - case "a": - flags = os.O_WRONLY | os.O_CREATE | os.O_APPEND - case "a+": - flags = os.O_RDWR | os.O_CREATE | os.O_APPEND - default: - panic(m) - } - //TODO- flags |= fcntl.O_LARGEFILE - - // From golang.org/x/sys/unix/syscall_linux.go - fd := Xopenat(t, unix.AT_FDCWD, pathname, int32(flags|unix.O_LARGEFILE), 0666) - if fd == -1 { - return 0 - } - - if p := newFile(t, fd); p != 0 { - return p - } - - Xclose(t, fd) - t.setErrno(errno.ENOMEM) - return 0 -} - -// int iswspace(wint_t wc); -func Xiswspace(t *TLS, wc wctype.Wint_t) int32 { - if __ccgo_strace { - trc("t=%v wc=%v, (%v:)", t, wc, origin(2)) - } - return Bool32(unicode.IsSpace(rune(wc))) -} - -// int iswalnum(wint_t wc); -func Xiswalnum(t *TLS, wc wctype.Wint_t) int32 { - if __ccgo_strace { - trc("t=%v wc=%v, (%v:)", t, wc, origin(2)) - } - return Bool32(unicode.IsLetter(rune(wc)) || unicode.IsNumber(rune(wc))) -} - -func __syscall1(t *TLS, trap, p1 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), 0, 0)) -} - -func __syscall3(t *TLS, trap, p1, p2, p3 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3))) -} - -func __syscall4(t *TLS, trap, p1, p2, p3, p4 long) long { - return __syscall(unix.Syscall6(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3), uintptr(p4), 0, 0)) -} - -// int setrlimit(int resource, const struct rlimit *rlim); -func Xsetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -func AtomicLoadNUint8(ptr uintptr, memorder int32) uint8 { - return byte(a_load_8(ptr)) -} - -var _table1 = [384]int32{ - 129: int32(1), - 130: int32(2), - 131: int32(3), - 132: int32(4), - 133: int32(5), - 134: int32(6), - 135: int32(7), - 136: int32(8), - 137: int32(9), - 138: int32(10), - 139: int32(11), - 140: int32(12), - 141: int32(13), - 142: int32(14), - 143: int32(15), - 144: int32(16), - 145: int32(17), - 146: int32(18), - 147: int32(19), - 148: int32(20), - 149: int32(21), - 150: int32(22), - 151: int32(23), - 152: int32(24), - 153: int32(25), - 154: int32(26), - 155: int32(27), - 156: int32(28), - 157: int32(29), - 158: int32(30), - 159: int32(31), - 160: int32(32), - 161: int32(33), - 162: int32(34), - 163: int32(35), - 164: int32(36), - 165: int32(37), - 166: int32(38), - 167: int32(39), - 168: int32(40), - 169: int32(41), - 170: int32(42), - 171: int32(43), - 172: int32(44), - 173: int32(45), - 174: int32(46), - 175: int32(47), - 176: int32(48), - 177: int32(49), - 178: int32(50), - 179: int32(51), - 180: int32(52), - 181: int32(53), - 182: int32(54), - 183: int32(55), - 184: int32(56), - 185: int32(57), - 186: int32(58), - 187: int32(59), - 188: int32(60), - 189: int32(61), - 190: int32(62), - 191: int32(63), - 192: int32(64), - 193: int32('a'), - 194: int32('b'), - 195: int32('c'), - 196: int32('d'), - 197: int32('e'), - 198: int32('f'), - 199: int32('g'), - 200: int32('h'), - 201: int32('i'), - 202: int32('j'), - 203: int32('k'), - 204: int32('l'), - 205: int32('m'), - 206: int32('n'), - 207: int32('o'), - 208: int32('p'), - 209: int32('q'), - 210: int32('r'), - 211: int32('s'), - 212: int32('t'), - 213: int32('u'), - 214: int32('v'), - 215: int32('w'), - 216: int32('x'), - 217: int32('y'), - 218: int32('z'), - 219: int32(91), - 220: int32(92), - 221: int32(93), - 222: int32(94), - 223: int32(95), - 224: int32(96), - 225: int32('a'), - 226: int32('b'), - 227: int32('c'), - 228: int32('d'), - 229: int32('e'), - 230: int32('f'), - 231: int32('g'), - 232: int32('h'), - 233: int32('i'), - 234: int32('j'), - 235: int32('k'), - 236: int32('l'), - 237: int32('m'), - 238: int32('n'), - 239: int32('o'), - 240: int32('p'), - 241: int32('q'), - 242: int32('r'), - 243: int32('s'), - 244: int32('t'), - 245: int32('u'), - 246: int32('v'), - 247: int32('w'), - 248: int32('x'), - 249: int32('y'), - 250: int32('z'), - 251: int32(123), - 252: int32(124), - 253: int32(125), - 254: int32(126), - 255: int32(127), -} - -var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 - -func X__ctype_tolower_loc(tls *TLS) (r uintptr) { - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - defer func() { trc("-> %v", r) }() - } - return uintptr(unsafe.Pointer(&_ptable1)) -} - -type Tin6_addr = struct { - F__in6_union struct { - F__s6_addr16 [0][8]uint16 - F__s6_addr32 [0][4]uint32 - F__s6_addr [16]uint8 - } -} - -var Xin6addr_any = Tin6_addr{} - -func Xrewinddir(tls *TLS, f uintptr) { - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - Xfseek(tls, f, 0, stdio.SEEK_SET) -} - -// clock_t clock(void); -func Xclock(t *TLS) time.Clock_t { - if __ccgo_strace { - trc("t=%v, (%v:)", t, origin(2)) - } - return time.Clock_t(gotime.Since(startTime) * gotime.Duration(time.CLOCKS_PER_SEC) / gotime.Second) -} - -const __NFDBITS = 64 - -func X__fdelt_chk(tls *TLS, d int64) (r int64) { - if __ccgo_strace { - trc("tls=%v d=%v, (%v:)", tls, d, origin(2)) - defer func() { trc("-> %v", r) }() - } - - return d / __NFDBITS -} diff --git a/vendor/modernc.org/libc/libc_linux_s390x.go b/vendor/modernc.org/libc/libc_linux_s390x.go deleted file mode 100644 index 5697f64..0000000 --- a/vendor/modernc.org/libc/libc_linux_s390x.go +++ /dev/null @@ -1,742 +0,0 @@ -// Copyright 2021 The Libc 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 libc // import "modernc.org/libc" - -import ( - "os" - "strings" - gotime "time" - "unsafe" - - "golang.org/x/sys/unix" - "modernc.org/libc/errno" - "modernc.org/libc/fcntl" - "modernc.org/libc/signal" - "modernc.org/libc/stdio" - "modernc.org/libc/sys/types" - "modernc.org/libc/time" -) - -var ( - startTime = gotime.Now() // For clock(3) -) - -// int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); -func Xsigaction(t *TLS, signum int32, act, oldact uintptr) int32 { - if __ccgo_strace { - trc("t=%v signum=%v oldact=%v, (%v:)", t, signum, oldact, origin(2)) - } - // musl/src/internal/ksigaction.h - // struct k_sigaction { - // void (*handler)(int); - // unsigned long flags; - // void (*restorer)(void); - // unsigned mask[2]; - // }; - type k_sigaction struct { - handler uintptr - flags ulong - restorer uintptr - mask [2]uint32 - } - - var kact, koldact uintptr - if act != 0 { - sz := int(unsafe.Sizeof(k_sigaction{})) - kact = t.Alloc(sz) - defer t.Free(sz) - *(*k_sigaction)(unsafe.Pointer(kact)) = k_sigaction{ - handler: (*signal.Sigaction)(unsafe.Pointer(act)).F__sigaction_handler.Fsa_handler, - flags: ulong((*signal.Sigaction)(unsafe.Pointer(act)).Fsa_flags), - restorer: (*signal.Sigaction)(unsafe.Pointer(act)).Fsa_restorer, - } - Xmemcpy(t, kact+unsafe.Offsetof(k_sigaction{}.mask), act+unsafe.Offsetof(signal.Sigaction{}.Fsa_mask), types.Size_t(unsafe.Sizeof(k_sigaction{}.mask))) - } - if oldact != 0 { - panic(todo("")) - } - - if _, _, err := unix.Syscall6(unix.SYS_RT_SIGACTION, uintptr(signum), kact, koldact, unsafe.Sizeof(k_sigaction{}.mask), 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - if oldact != 0 { - panic(todo("")) - } - - return 0 -} - -// int fcntl(int fd, int cmd, ... /* arg */ ); -func Xfcntl64(t *TLS, fd, cmd int32, args uintptr) int32 { - if __ccgo_strace { - trc("t=%v cmd=%v args=%v, (%v:)", t, cmd, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - if cmd == fcntl.F_SETFL { - arg |= unix.O_LARGEFILE - } - n, _, err := unix.Syscall(unix.SYS_FCNTL, uintptr(fd), uintptr(cmd), arg) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v cmd %v", origin(1), fcntlCmdStr(fd), cmd) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %s %#x: %d", origin(1), fd, fcntlCmdStr(cmd), arg, n) - // } - return int32(n) -} - -// int lstat(const char *pathname, struct stat *statbuf); -func Xlstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LSTAT, pathname, statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int stat(const char *pathname, struct stat *statbuf); -func Xstat64(t *TLS, pathname, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v statbuf=%v, (%v:)", t, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_STAT, pathname, statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int fstat(int fd, struct stat *statbuf); -func Xfstat64(t *TLS, fd int32, statbuf uintptr) int32 { - if __ccgo_strace { - trc("t=%v fd=%v statbuf=%v, (%v:)", t, fd, statbuf, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FSTAT, uintptr(fd), statbuf, 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d size %#x: ok\n%+v", origin(1), fd, (*stat.Stat)(unsafe.Pointer(statbuf)).Fst_size, (*stat.Stat)(unsafe.Pointer(statbuf))) - // } - return 0 -} - -func Xmmap(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - return Xmmap64(t, addr, length, prot, flags, fd, offset) -} - -// void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -func Xmmap64(t *TLS, addr uintptr, length types.Size_t, prot, flags, fd int32, offset types.Off_t) uintptr { - if __ccgo_strace { - trc("t=%v addr=%v length=%v fd=%v offset=%v, (%v:)", t, addr, length, fd, offset, origin(2)) - } - // https://github.com/golang/go/blob/7d822af4500831d131562f17dcf53374469d823e/src/syscall/syscall_linux_s390x.go#L77 - args := [6]uintptr{addr, uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} - data, _, err := unix.Syscall(unix.SYS_MMAP, uintptr(unsafe.Pointer(&args[0])), 0, 0) - if err != 0 { - // if dmesgs { - // dmesg("%v: addr %#x, length %#x, prot %#x, flags %#x, fd %v, offset %#x: %v", origin(1), addr, length, prot, flags, fd, offset, err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: addr %#x, length %#x, prot %#x, flags %#x, fd %v, offset %#x: ok", origin(1), addr, length, prot, flags, fd, offset) - // } - return data -} - -// void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address */); -func Xmremap(t *TLS, old_address uintptr, old_size, new_size types.Size_t, flags int32, args uintptr) uintptr { - if __ccgo_strace { - trc("t=%v old_address=%v new_size=%v flags=%v args=%v, (%v:)", t, old_address, new_size, flags, args, origin(2)) - } - var arg uintptr - if args != 0 { - arg = *(*uintptr)(unsafe.Pointer(args)) - } - data, _, err := unix.Syscall6(unix.SYS_MREMAP, old_address, uintptr(old_size), uintptr(new_size), uintptr(flags), arg, 0) - if err != 0 { - // if dmesgs { - // dmesg("%v: %v", origin(1), err) - // } - t.setErrno(err) - return ^uintptr(0) // (void*)-1 - } - - // if dmesgs { - // dmesg("%v: %#x", origin(1), data) - // } - return data -} - -// int ftruncate(int fd, off_t length); -func Xftruncate64(t *TLS, fd int32, length types.Off_t) int32 { - if __ccgo_strace { - trc("t=%v fd=%v length=%v, (%v:)", t, fd, length, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0); err != 0 { - // if dmesgs { - // dmesg("%v: fd %d: %v", origin(1), fd, err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %d %#x: ok", origin(1), fd, length) - // } - return 0 -} - -// off64_t lseek64(int fd, off64_t offset, int whence); -func Xlseek64(t *TLS, fd int32, offset types.Off_t, whence int32) types.Off_t { - if __ccgo_strace { - trc("t=%v fd=%v offset=%v whence=%v, (%v:)", t, fd, offset, whence, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - if err != 0 { - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %v", origin(1), fd, offset, whenceStr(whence), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: fd %v, off %#x, whence %v: %#x", origin(1), fd, offset, whenceStr(whence), n) - // } - return types.Off_t(n) -} - -// int utime(const char *filename, const struct utimbuf *times); -func Xutime(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIME, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// unsigned int alarm(unsigned int seconds); -func Xalarm(t *TLS, seconds uint32) uint32 { - if __ccgo_strace { - trc("t=%v seconds=%v, (%v:)", t, seconds, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_ALARM, uintptr(seconds), 0, 0) - if err != 0 { - panic(todo("")) - } - - return uint32(n) -} - -// time_t time(time_t *tloc); -func Xtime(t *TLS, tloc uintptr) types.Time_t { - if __ccgo_strace { - trc("t=%v tloc=%v, (%v:)", t, tloc, origin(2)) - } - n, err := unix.Time((*unix.Time_t)(unsafe.Pointer(tloc))) - if err != nil { - t.setErrno(err) - return types.Time_t(-1) - } - - return types.Time_t(n) -} - -// int getrlimit(int resource, struct rlimit *rlim); -func Xgetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_GETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mkdir(const char *path, mode_t mode); -func Xmkdir(t *TLS, path uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v path=%v mode=%v, (%v:)", t, path, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKDIR, path, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(path)) - // } - return 0 -} - -// int symlink(const char *target, const char *linkpath); -func Xsymlink(t *TLS, target, linkpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v linkpath=%v, (%v:)", t, linkpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SYMLINK, target, linkpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %q: ok", origin(1), GoString(target), GoString(linkpath)) - // } - return 0 -} - -// int chmod(const char *pathname, mode_t mode) -func Xchmod(t *TLS, pathname uintptr, mode types.Mode_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHMOD, pathname, uintptr(mode), 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int utimes(const char *filename, const struct timeval times[2]); -func Xutimes(t *TLS, filename, times uintptr) int32 { - if __ccgo_strace { - trc("t=%v times=%v, (%v:)", t, times, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UTIMES, filename, times, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(filename)) - // } - return 0 -} - -// int unlink(const char *pathname); -func Xunlink(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_UNLINK, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int access(const char *pathname, int mode); -func Xaccess(t *TLS, pathname uintptr, mode int32) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v, (%v:)", t, pathname, mode, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_ACCESS, pathname, uintptr(mode), 0); err != 0 { - // if dmesgs { - // dmesg("%v: %q: %v", origin(1), GoString(pathname), err) - // } - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q %#o: ok", origin(1), GoString(pathname), mode) - // } - return 0 -} - -// int rmdir(const char *pathname); -func Xrmdir(t *TLS, pathname uintptr) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v, (%v:)", t, pathname, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RMDIR, pathname, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - // if dmesgs { - // dmesg("%v: %q: ok", origin(1), GoString(pathname)) - // } - return 0 -} - -// int rename(const char *oldpath, const char *newpath); -func Xrename(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_RENAME, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int mknod(const char *pathname, mode_t mode, dev_t dev); -func Xmknod(t *TLS, pathname uintptr, mode types.Mode_t, dev types.Dev_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v mode=%v dev=%v, (%v:)", t, pathname, mode, dev, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_MKNOD, pathname, uintptr(mode), uintptr(dev)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int chown(const char *pathname, uid_t owner, gid_t group); -func Xchown(t *TLS, pathname uintptr, owner types.Uid_t, group types.Gid_t) int32 { - if __ccgo_strace { - trc("t=%v pathname=%v owner=%v group=%v, (%v:)", t, pathname, owner, group, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_CHOWN, pathname, uintptr(owner), uintptr(group)); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int link(const char *oldpath, const char *newpath); -func Xlink(t *TLS, oldpath, newpath uintptr) int32 { - if __ccgo_strace { - trc("t=%v newpath=%v, (%v:)", t, newpath, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_LINK, oldpath, newpath, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int pipe(int pipefd[2]); -func Xpipe(t *TLS, pipefd uintptr) int32 { - if __ccgo_strace { - trc("t=%v pipefd=%v, (%v:)", t, pipefd, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_PIPE, pipefd, 0, 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -// int dup2(int oldfd, int newfd); -func Xdup2(t *TLS, oldfd, newfd int32) int32 { - if __ccgo_strace { - trc("t=%v newfd=%v, (%v:)", t, newfd, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if err != 0 { - t.setErrno(err) - return -1 - } - - return int32(n) -} - -// ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize); -func Xreadlink(t *TLS, path, buf uintptr, bufsize types.Size_t) types.Ssize_t { - if __ccgo_strace { - trc("t=%v buf=%v bufsize=%v, (%v:)", t, buf, bufsize, origin(2)) - } - n, _, err := unix.Syscall(unix.SYS_READLINK, path, buf, uintptr(bufsize)) - if err != 0 { - t.setErrno(err) - return -1 - } - - return types.Ssize_t(n) -} - -// FILE *fopen64(const char *pathname, const char *mode); -func Xfopen64(t *TLS, pathname, mode uintptr) uintptr { - if __ccgo_strace { - trc("t=%v mode=%v, (%v:)", t, mode, origin(2)) - } - m := strings.ReplaceAll(GoString(mode), "b", "") - var flags int - switch m { - case "r": - flags = os.O_RDONLY - case "r+": - flags = os.O_RDWR - case "w": - flags = os.O_WRONLY | os.O_CREATE | os.O_TRUNC - case "w+": - flags = os.O_RDWR | os.O_CREATE | os.O_TRUNC - case "a": - flags = os.O_WRONLY | os.O_CREATE | os.O_APPEND - case "a+": - flags = os.O_RDWR | os.O_CREATE | os.O_APPEND - default: - panic(m) - } - //TODO- flags |= fcntl.O_LARGEFILE - fd, _, err := unix.Syscall(unix.SYS_OPEN, pathname, uintptr(flags|unix.O_LARGEFILE), 0666) - if err != 0 { - t.setErrno(err) - return 0 - } - - if p := newFile(t, int32(fd)); p != 0 { - return p - } - - Xclose(t, int32(fd)) - t.setErrno(errno.ENOMEM) - return 0 -} - -// TODO- -func __syscall1(t *TLS, trap, p1 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), 0, 0)) -} - -func __syscall3(t *TLS, trap, p1, p2, p3 long) long { - return __syscall(unix.Syscall(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3))) -} - -func __syscall4(t *TLS, trap, p1, p2, p3, p4 long) long { - return __syscall(unix.Syscall6(uintptr(trap), uintptr(p1), uintptr(p2), uintptr(p3), uintptr(p4), 0, 0)) -} - -// int setrlimit(int resource, const struct rlimit *rlim); -func Xsetrlimit64(t *TLS, resource int32, rlim uintptr) int32 { - if __ccgo_strace { - trc("t=%v resource=%v rlim=%v, (%v:)", t, resource, rlim, origin(2)) - } - if _, _, err := unix.Syscall(unix.SYS_SETRLIMIT, uintptr(resource), uintptr(rlim), 0); err != 0 { - t.setErrno(err) - return -1 - } - - return 0 -} - -func AtomicLoadNUint8(ptr uintptr, memorder int32) uint8 { - return byte(a_load_8(ptr)) -} - -var _table1 = [384]int32{ - 129: int32(1), - 130: int32(2), - 131: int32(3), - 132: int32(4), - 133: int32(5), - 134: int32(6), - 135: int32(7), - 136: int32(8), - 137: int32(9), - 138: int32(10), - 139: int32(11), - 140: int32(12), - 141: int32(13), - 142: int32(14), - 143: int32(15), - 144: int32(16), - 145: int32(17), - 146: int32(18), - 147: int32(19), - 148: int32(20), - 149: int32(21), - 150: int32(22), - 151: int32(23), - 152: int32(24), - 153: int32(25), - 154: int32(26), - 155: int32(27), - 156: int32(28), - 157: int32(29), - 158: int32(30), - 159: int32(31), - 160: int32(32), - 161: int32(33), - 162: int32(34), - 163: int32(35), - 164: int32(36), - 165: int32(37), - 166: int32(38), - 167: int32(39), - 168: int32(40), - 169: int32(41), - 170: int32(42), - 171: int32(43), - 172: int32(44), - 173: int32(45), - 174: int32(46), - 175: int32(47), - 176: int32(48), - 177: int32(49), - 178: int32(50), - 179: int32(51), - 180: int32(52), - 181: int32(53), - 182: int32(54), - 183: int32(55), - 184: int32(56), - 185: int32(57), - 186: int32(58), - 187: int32(59), - 188: int32(60), - 189: int32(61), - 190: int32(62), - 191: int32(63), - 192: int32(64), - 193: int32('a'), - 194: int32('b'), - 195: int32('c'), - 196: int32('d'), - 197: int32('e'), - 198: int32('f'), - 199: int32('g'), - 200: int32('h'), - 201: int32('i'), - 202: int32('j'), - 203: int32('k'), - 204: int32('l'), - 205: int32('m'), - 206: int32('n'), - 207: int32('o'), - 208: int32('p'), - 209: int32('q'), - 210: int32('r'), - 211: int32('s'), - 212: int32('t'), - 213: int32('u'), - 214: int32('v'), - 215: int32('w'), - 216: int32('x'), - 217: int32('y'), - 218: int32('z'), - 219: int32(91), - 220: int32(92), - 221: int32(93), - 222: int32(94), - 223: int32(95), - 224: int32(96), - 225: int32('a'), - 226: int32('b'), - 227: int32('c'), - 228: int32('d'), - 229: int32('e'), - 230: int32('f'), - 231: int32('g'), - 232: int32('h'), - 233: int32('i'), - 234: int32('j'), - 235: int32('k'), - 236: int32('l'), - 237: int32('m'), - 238: int32('n'), - 239: int32('o'), - 240: int32('p'), - 241: int32('q'), - 242: int32('r'), - 243: int32('s'), - 244: int32('t'), - 245: int32('u'), - 246: int32('v'), - 247: int32('w'), - 248: int32('x'), - 249: int32('y'), - 250: int32('z'), - 251: int32(123), - 252: int32(124), - 253: int32(125), - 254: int32(126), - 255: int32(127), -} - -var _ptable1 = uintptr(unsafe.Pointer(&_table1)) + uintptr(128)*4 - -func X__ctype_tolower_loc(tls *TLS) (r uintptr) { - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - defer func() { trc("-> %v", r) }() - } - return uintptr(unsafe.Pointer(&_ptable1)) -} - -type Tin6_addr = struct { - F__in6_union struct { - F__s6_addr16 [0][8]uint16 - F__s6_addr32 [0][4]uint32 - F__s6_addr [16]uint8 - } -} - -var Xin6addr_any = Tin6_addr{} - -func Xrewinddir(tls *TLS, f uintptr) { - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - Xfseek(tls, f, 0, stdio.SEEK_SET) -} - -// clock_t clock(void); -func Xclock(t *TLS) time.Clock_t { - if __ccgo_strace { - trc("t=%v, (%v:)", t, origin(2)) - } - return time.Clock_t(gotime.Since(startTime) * gotime.Duration(time.CLOCKS_PER_SEC) / gotime.Second) -} diff --git a/vendor/modernc.org/libc/libc_loong64.go b/vendor/modernc.org/libc/libc_loong64.go deleted file mode 100644 index f4ae5d5..0000000 --- a/vendor/modernc.org/libc/libc_loong64.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2023 The Libc 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 && loong64) - -package libc // import "modernc.org/libc" - -import ( - "fmt" - "unsafe" -) - -// Byte loads are atomic on this CPU. -func a_load_8(addr uintptr) uint32 { - return uint32(*(*byte)(unsafe.Pointer(addr))) -} - -// int16 loads are atomic on this CPU when properly aligned. -func a_load_16(addr uintptr) uint32 { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - return uint32(*(*uint16)(unsafe.Pointer(addr))) -} - -// Byte sores are atomic on this CPU. -func a_store_8(addr uintptr, b byte) { - *(*byte)(unsafe.Pointer(addr)) = b -} - -// int16 stores are atomic on this CPU when properly aligned. -func a_store_16(addr uintptr, n uint16) { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - *(*uint16)(unsafe.Pointer(addr)) = n -} diff --git a/vendor/modernc.org/libc/libc_musl.go b/vendor/modernc.org/libc/libc_musl.go index 7a06d44..869a6a6 100644 --- a/vendor/modernc.org/libc/libc_musl.go +++ b/vendor/modernc.org/libc/libc_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) //go:generate go run generator.go @@ -648,7 +648,7 @@ func ___randname(tls *TLS, template uintptr) (r1 uintptr) { X__clock_gettime(tls, CLOCK_REALTIME, bp) goto _2 _2: - r = uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec+(*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec) + uint64(tls.ID)*uint64(65537) + r = uint64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_sec+int64((*(*Ttimespec)(unsafe.Pointer(bp))).Ftv_nsec)) + uint64(tls.ID)*uint64(65537) i = 0 for { if !(i < int32(6)) { diff --git a/vendor/modernc.org/libc/libc_musl_linux_386.go b/vendor/modernc.org/libc/libc_musl_linux_386.go new file mode 100644 index 0000000..6bc8431 --- /dev/null +++ b/vendor/modernc.org/libc/libc_musl_linux_386.go @@ -0,0 +1,52 @@ +// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" + +import ( + "math/bits" + "sync/atomic" + "unsafe" +) + +type long = int32 + +type ulong = uint32 + +// RawMem represents the biggest byte array the runtime can handle +type RawMem [1<<31 - 1]byte + +func a_crash() + +func _a_crash(tls *TLS) { + a_crash() +} + +func a_cas(p uintptr, t, s int32) int32 + +func _a_cas(tls *TLS, p uintptr, test, s int32) int32 { + return a_cas(p, test, s) +} + +func _a_store(tls *TLS, p uintptr, v int32) { + atomic.StoreInt32((*int32)(unsafe.Pointer(p)), v) +} + +func _a_clz_32(tls *TLS, x uint32) int32 { + return int32(bits.LeadingZeros32(x)) +} + +func _a_ctz_32(tls *TLS, x uint32) int32 { + return X__builtin_ctz(tls, x) +} + +func a_or(p uintptr, v int32) + +func _a_or(tls *TLS, p uintptr, v int32) { + a_or(p, v) +} + +func _a_swap(tls *TLS, p uintptr, v int32) int32 { + return atomic.SwapInt32((*int32)(unsafe.Pointer(p)), v) +} diff --git a/vendor/modernc.org/libc/libc_musl_linux_arm.go b/vendor/modernc.org/libc/libc_musl_linux_arm.go new file mode 100644 index 0000000..2d89c0e --- /dev/null +++ b/vendor/modernc.org/libc/libc_musl_linux_arm.go @@ -0,0 +1,70 @@ +// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" + +import ( + "math/bits" + "sync/atomic" + "unsafe" +) + +type long = int32 + +type ulong = uint32 + +var ( + ___a_barrier_ptr ulong +) + +// RawMem represents the biggest byte array the runtime can handle +type RawMem [1<<31 - 1]byte + +// void *memcpy(void *dest, const void *src, size_t n); +func Xmemcpy(t *TLS, dest, src uintptr, n Tsize_t) (r uintptr) { + if __ccgo_strace { + trc("t=%v src=%v n=%v, (%v:)", t, src, n, origin(2)) + defer func() { trc("-> %v", r) }() + } + return _memcpy(t, dest, src, n) +} + +func _memcpy(t *TLS, dest, src uintptr, n Tsize_t) (r uintptr) { + if n != 0 { + copy((*RawMem)(unsafe.Pointer(dest))[:n:n], (*RawMem)(unsafe.Pointer(src))[:n:n]) + } + return dest +} + +func _fetestexcept(t *TLS, _ int32) int32 { + return 0 +} + +func _feclearexcept(t *TLS, _ int32) int32 { + return 0 +} + +func _a_crash(tls *TLS) { + panic("crash") +} + +var atomicBarrier atomic.Int32 + +func _a_barrier(tls *TLS) { + atomicBarrier.Add(1) +} + +// static inline int a_sc(volatile int *p, int v) +func _a_sc(*TLS, uintptr, int32) int32 { + panic(todo("")) +} + +// static inline int a_ll(volatile int *p) +func _a_ll(*TLS, uintptr) int32 { + panic(todo("")) +} + +func _a_clz_32(tls *TLS, x uint32) int32 { + return int32(bits.LeadingZeros32(x)) +} diff --git a/vendor/modernc.org/libc/libc_musl_linux_ppc64le.go b/vendor/modernc.org/libc/libc_musl_linux_ppc64le.go new file mode 100644 index 0000000..3fbf0e7 --- /dev/null +++ b/vendor/modernc.org/libc/libc_musl_linux_ppc64le.go @@ -0,0 +1,12 @@ +// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" + +type long = int64 + +type ulong = uint64 + +// RawMem represents the biggest byte array the runtime can handle +type RawMem [1<<50 - 1]byte diff --git a/vendor/modernc.org/libc/libc_musl_linux_riscv64.go b/vendor/modernc.org/libc/libc_musl_linux_riscv64.go new file mode 100644 index 0000000..3fbf0e7 --- /dev/null +++ b/vendor/modernc.org/libc/libc_musl_linux_riscv64.go @@ -0,0 +1,12 @@ +// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" + +type long = int64 + +type ulong = uint64 + +// RawMem represents the biggest byte array the runtime can handle +type RawMem [1<<50 - 1]byte diff --git a/vendor/modernc.org/libc/libc_musl_linux_s390x.go b/vendor/modernc.org/libc/libc_musl_linux_s390x.go new file mode 100644 index 0000000..f189deb --- /dev/null +++ b/vendor/modernc.org/libc/libc_musl_linux_s390x.go @@ -0,0 +1,46 @@ +// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" + +import ( + "unsafe" + + "golang.org/x/sys/unix" +) + +type long = int64 + +type ulong = uint64 + +// RawMem represents the biggest byte array the runtime can handle +type RawMem [1<<50 - 1]byte + +func Xfesetround(tls *TLS, r int32) (r1 int32) { + if __ccgo_strace { + trc("tls=%v r=%v, (%v:)", tls, r, origin(2)) + defer func() { trc("-> %v", r1) }() + } + return X__fesetround(tls, r) +} + +func Xmmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + return ___mmap(tls, start, len1, prot, flags, fd, off) +} + +func ___mmap(tls *TLS, start uintptr, len1 Tsize_t, prot int32, flags int32, fd int32, off Toff_t) (r uintptr) { + if __ccgo_strace { + trc("tls=%v start=%v len1=%v prot=%v flags=%v fd=%v off=%v, (%v:)", tls, start, len1, prot, flags, fd, off, origin(2)) + defer func() { trc("-> %v", r) }() + } + // https://github.com/golang/go/blob/7d822af4500831d131562f17dcf53374469d823e/src/syscall/syscall_linux_s390x.go#L77 + args := [6]uintptr{start, uintptr(len1), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(off)} + data, _, err := unix.Syscall(unix.SYS_MMAP, uintptr(unsafe.Pointer(&args[0])), 0, 0) + if err != 0 { + tls.setErrno(int32(err)) + return ^uintptr(0) // (void*)-1 + } + + return data +} diff --git a/vendor/modernc.org/libc/libc_ppc64le.go b/vendor/modernc.org/libc/libc_ppc64le.go deleted file mode 100644 index de3e349..0000000 --- a/vendor/modernc.org/libc/libc_ppc64le.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" - -import ( - "fmt" - "unsafe" -) - -// Byte loads are atomic on this CPU. -func a_load_8(addr uintptr) uint32 { - return uint32(*(*byte)(unsafe.Pointer(addr))) -} - -// int16 loads are atomic on this CPU when properly aligned. -func a_load_16(addr uintptr) uint32 { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - return uint32(*(*uint16)(unsafe.Pointer(addr))) -} - -// Byte sores are atomic on this CPU. -func a_store_8(addr uintptr, b byte) { - *(*byte)(unsafe.Pointer(addr)) = b -} - -// int16 stores are atomic on this CPU when properly aligned. -func a_store_16(addr uintptr, n uint16) { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - *(*uint16)(unsafe.Pointer(addr)) = n -} diff --git a/vendor/modernc.org/libc/libc_riscv64.go b/vendor/modernc.org/libc/libc_riscv64.go deleted file mode 100644 index de3e349..0000000 --- a/vendor/modernc.org/libc/libc_riscv64.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" - -import ( - "fmt" - "unsafe" -) - -// Byte loads are atomic on this CPU. -func a_load_8(addr uintptr) uint32 { - return uint32(*(*byte)(unsafe.Pointer(addr))) -} - -// int16 loads are atomic on this CPU when properly aligned. -func a_load_16(addr uintptr) uint32 { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - return uint32(*(*uint16)(unsafe.Pointer(addr))) -} - -// Byte sores are atomic on this CPU. -func a_store_8(addr uintptr, b byte) { - *(*byte)(unsafe.Pointer(addr)) = b -} - -// int16 stores are atomic on this CPU when properly aligned. -func a_store_16(addr uintptr, n uint16) { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - *(*uint16)(unsafe.Pointer(addr)) = n -} diff --git a/vendor/modernc.org/libc/libc_s390x.go b/vendor/modernc.org/libc/libc_s390x.go deleted file mode 100644 index de3e349..0000000 --- a/vendor/modernc.org/libc/libc_s390x.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 The Libc 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 libc // import "modernc.org/libc" - -import ( - "fmt" - "unsafe" -) - -// Byte loads are atomic on this CPU. -func a_load_8(addr uintptr) uint32 { - return uint32(*(*byte)(unsafe.Pointer(addr))) -} - -// int16 loads are atomic on this CPU when properly aligned. -func a_load_16(addr uintptr) uint32 { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - return uint32(*(*uint16)(unsafe.Pointer(addr))) -} - -// Byte sores are atomic on this CPU. -func a_store_8(addr uintptr, b byte) { - *(*byte)(unsafe.Pointer(addr)) = b -} - -// int16 stores are atomic on this CPU when properly aligned. -func a_store_16(addr uintptr, n uint16) { - if addr&1 != 0 { - panic(fmt.Errorf("unaligned atomic 16 bit access at %#0x", addr)) - } - - *(*uint16)(unsafe.Pointer(addr)) = n -} diff --git a/vendor/modernc.org/libc/libc_unix.go b/vendor/modernc.org/libc/libc_unix.go index 3521442..88af109 100644 --- a/vendor/modernc.org/libc/libc_unix.go +++ b/vendor/modernc.org/libc/libc_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build unix && !(linux && (amd64 || arm64 || loong64)) +//go:build unix && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/libc_unix1.go b/vendor/modernc.org/libc/libc_unix1.go index 6017545..f4e5f7a 100644 --- a/vendor/modernc.org/libc/libc_unix1.go +++ b/vendor/modernc.org/libc/libc_unix1.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build unix && !illumos && !(linux && (amd64 || arm64 || loong64)) && !openbsd +//go:build unix && !illumos && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) && !openbsd package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/libc_windows.go b/vendor/modernc.org/libc/libc_windows.go index 2a93ced..f0f3ad7 100644 --- a/vendor/modernc.org/libc/libc_windows.go +++ b/vendor/modernc.org/libc/libc_windows.go @@ -12,6 +12,7 @@ import ( "os/exec" "os/user" "path/filepath" + "runtime/debug" "strings" "sync" "sync/atomic" @@ -227,13 +228,18 @@ var ( modcrt = syscall.NewLazyDLL("msvcrt.dll") procAccess = modcrt.NewProc("_access") procChmod = modcrt.NewProc("_chmod") + procCtime64 = modcrt.NewProc("ctime64") procGmtime = modcrt.NewProc("gmtime") procGmtime32 = modcrt.NewProc("_gmtime32") procGmtime64 = modcrt.NewProc("_gmtime64") procStat64i32 = modcrt.NewProc("_stat64i32") procStati64 = modcrt.NewProc("_stati64") procStrftime = modcrt.NewProc("strftime") + procStrnicmp = modcrt.NewProc("_strnicmp") procStrtod = modcrt.NewProc("strtod") + procTime64 = modcrt.NewProc("time64") + procWcsncpy = modcrt.NewProc("wcsncpy") + procWcsrchr = modcrt.NewProc("wcsrchr") moducrt = syscall.NewLazyDLL("ucrtbase.dll") procFindfirst32 = moducrt.NewProc("_findfirst32") @@ -2337,7 +2343,7 @@ func XIsDebuggerPresent(t *TLS) int32 { if __ccgo_strace { trc("t=%v, (%v:)", t, origin(2)) } - panic(todo("")) + return 0 } func XExitProcess(t *TLS, _ ...interface{}) int32 { @@ -3042,10 +3048,6 @@ func XSetCommState(t *TLS, _ ...interface{}) int32 { panic(todo("")) } -func X_strnicmp(t *TLS, _ ...interface{}) int32 { - panic(todo("")) -} - func XEscapeCommFunction(t *TLS, _ ...interface{}) int32 { panic(todo("")) } @@ -3715,7 +3717,7 @@ func XGetFileAttributesA(t *TLS, lpFileName uintptr) uint32 { // LPVOID lpFileInformation // // ); -func XGetFileAttributesExW(t *TLS, lpFileName uintptr, fInfoLevelId uint32, lpFileInformation uintptr) int32 { +func XGetFileAttributesExW(t *TLS, lpFileName uintptr, fInfoLevelId int32, lpFileInformation uintptr) int32 { if __ccgo_strace { trc("t=%v lpFileName=%v fInfoLevelId=%v lpFileInformation=%v, (%v:)", t, lpFileName, fInfoLevelId, lpFileInformation, origin(2)) } @@ -6475,7 +6477,7 @@ func XGetAce(tls *TLS, _pAcl uintptr, _dwAceIndex uint32, _pAce uintptr) (r int3 // ACL_INFORMATION_CLASS dwAclInformationClass // // ); -func XGetAclInformation(t *TLS, pAcl, pAclInformation uintptr, nAclInformationLength, dwAclInformationClass uint32) int32 { +func XGetAclInformation(t *TLS, pAcl, pAclInformation uintptr, nAclInformationLength uint32, dwAclInformationClass int32) int32 { if __ccgo_strace { trc("t=%v pAclInformation=%v dwAclInformationClass=%v, (%v:)", t, pAclInformation, dwAclInformationClass, origin(2)) } @@ -6667,7 +6669,7 @@ func XSetErrorMode(t *TLS, uMode uint32) int32 { // PACL pSacl // // ); -func XSetNamedSecurityInfoA(t *TLS, pObjectName uintptr, ObjectType, SecurityInfo uint32, psidOwner, psidGroup, pDacl, pSacl uintptr) uint32 { +func XSetNamedSecurityInfoA(t *TLS, pObjectName uintptr, ObjectType int32, SecurityInfo uint32, psidOwner, psidGroup, pDacl, pSacl uintptr) uint32 { if __ccgo_strace { trc("t=%v pObjectName=%v SecurityInfo=%v pSacl=%v, (%v:)", t, pObjectName, SecurityInfo, pSacl, origin(2)) } @@ -7551,3 +7553,77 @@ func Xstrtod(t *TLS, s uintptr, p uintptr) float64 { } return math.Float64frombits(uint64(r0)) } + +// int vsnprintf(char *str, size_t size, const char *format, va_list ap); +func X_vsnprintf(t *TLS, str uintptr, size types.Size_t, format, ap uintptr) int32 { + if __ccgo_strace { + trc("t=%v str=%v size=%v ap=%v, (%v:)", t, str, size, ap, origin(2)) + } + return Xvsnprintf(t, str, size, format, ap) +} + +func X__ccgo_SyscallFP() { + s := fmt.Sprintf("%s\nTODO syscall: function pointer", debug.Stack()) + panic(s) +} + +func CreateThread(t *TLS, lpThreadAttributes uintptr, dwStackSize types.Size_t, lpStartAddress, lpParameter uintptr, dwCreationFlags uint32, lpThreadId uintptr) uintptr { + return XCreateThread(t, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) +} + +// wchar_t *wcsncpy(wchar_t *strDest, const wchar_t *strSource, size_t count); +func Xwcsncpy(t *TLS, strDest, strSource uintptr, count types.Size_t) uintptr { + r0, _, err := syscall.SyscallN(procWcsncpy.Addr(), strDest, strSource, uintptr(count)) + if err != 0 { + t.setErrno(err) + } + return r0 +} + +// wchar_t *wcsrchr(const wchar_t *str, wchar_t c); +func Xwcsrchr(t *TLS, str uintptr, c types.Wchar_t) uintptr { + r0, _, err := syscall.SyscallN(procWcsrchr.Addr(), str, uintptr(c)) + if err != 0 { + t.setErrno(err) + } + return r0 +} + +// __attribute__ ((__dllimport__)) char * __attribute__((__cdecl__)) _ctime64(const __time64_t *_Time); +func X_ctime64(tls *TLS, __Time uintptr) (r uintptr) { + if __ccgo_strace { + trc("_Time=%+v", __Time) + defer func() { trc(`X_ctime64->%+v`, r) }() + } + r0, _, err := syscall.SyscallN(procCtime64.Addr(), __Time) + if err != 0 { + tls.setErrno(int32(err)) + } + return uintptr(r0) +} + +// __attribute__ ((__dllimport__)) __time64_t __attribute__((__cdecl__)) _time64(__time64_t *_Time); +func X_time64(tls *TLS, __Time uintptr) (r int64) { + if __ccgo_strace { + trc("_Time=%+v", __Time) + defer func() { trc(`X_time64->%+v`, r) }() + } + r0, _, err := syscall.SyscallN(procTime64.Addr(), __Time) + if err != 0 { + tls.setErrno(int32(err)) + } + return int64(r0) +} + +// __attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _strnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount); +func X_strnicmp(tls *TLS, __Str1 uintptr, __Str2 uintptr, __MaxCount types.Size_t) (r int32) { + if __ccgo_strace { + trc("_Str1=%+v _Str2=%+v _MaxCount=%+v", __Str1, __Str2, __MaxCount) + defer func() { trc(`X_strnicmp->%+v`, r) }() + } + r0, _, err := syscall.SyscallN(procStrnicmp.Addr(), __Str1, __Str2, uintptr(__MaxCount)) + if err != 0 { + tls.setErrno(int32(err)) + } + return int32(r0) +} diff --git a/vendor/modernc.org/libc/mem.go b/vendor/modernc.org/libc/mem.go index e1473b1..cf4644e 100644 --- a/vendor/modernc.org/libc/mem.go +++ b/vendor/modernc.org/libc/mem.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !libc.membrk && !libc.memgrind && !(linux && (amd64 || arm64 || loong64)) +//go:build !libc.membrk && !libc.memgrind && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/mem_brk.go b/vendor/modernc.org/libc/mem_brk.go index 2b4f155..3881d8e 100644 --- a/vendor/modernc.org/libc/mem_brk.go +++ b/vendor/modernc.org/libc/mem_brk.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build libc.membrk && !libc.memgrind && !(linux && (amd64 || arm64 || loong64)) +//go:build libc.membrk && !libc.memgrind && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) // This is a debug-only version of the memory handling functions. When a // program is built with -tags=libc.membrk a simple but safe version of malloc diff --git a/vendor/modernc.org/libc/mem_brk_musl.go b/vendor/modernc.org/libc/mem_brk_musl.go index 260132a..c42fb7b 100644 --- a/vendor/modernc.org/libc/mem_brk_musl.go +++ b/vendor/modernc.org/libc/mem_brk_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build libc.membrk && !libc.memgrind && linux && (amd64 || arm64 || loong64) +//go:build libc.membrk && !libc.memgrind && linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) // This is a debug-only version of the memory handling functions. When a // program is built with -tags=libc.membrk a simple but safe version of malloc diff --git a/vendor/modernc.org/libc/mem_musl.go b/vendor/modernc.org/libc/mem_musl.go index 78770df..1d43cff 100644 --- a/vendor/modernc.org/libc/mem_musl.go +++ b/vendor/modernc.org/libc/mem_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !libc.membrk && !libc.memgrind && linux && (amd64 || arm64 || loong64) +//go:build !libc.membrk && !libc.memgrind && linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/memgrind.go b/vendor/modernc.org/libc/memgrind.go index 32e0a6d..e43357a 100644 --- a/vendor/modernc.org/libc/memgrind.go +++ b/vendor/modernc.org/libc/memgrind.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !libc.membrk && libc.memgrind && !(linux && (amd64 || arm64 || loong64)) +//go:build !libc.membrk && libc.memgrind && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) // This is a debug-only version of the memory handling functions. When a // program is built with -tags=libc.memgrind the functions MemAuditStart and diff --git a/vendor/modernc.org/libc/memgrind_musl.go b/vendor/modernc.org/libc/memgrind_musl.go index 6507d4c..1ee3820 100644 --- a/vendor/modernc.org/libc/memgrind_musl.go +++ b/vendor/modernc.org/libc/memgrind_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !libc.membrk && libc.memgrind && linux && (amd64 || arm64 || loong64) +//go:build !libc.membrk && libc.memgrind && linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) // This is a debug-only version of the memory handling functions. When a // program is built with -tags=libc.memgrind the functions MemAuditStart and diff --git a/vendor/modernc.org/libc/musl_linux_386.go b/vendor/modernc.org/libc/musl_linux_386.go deleted file mode 100644 index 25946cd..0000000 --- a/vendor/modernc.org/libc/musl_linux_386.go +++ /dev/null @@ -1,7146 +0,0 @@ -// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_386.go -pkgname libc -static-locals-prefix _s -Iarch/i386 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/gethostbyname_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.c', DO NOT EDIT. - -package libc - -import ( - "math" - "reflect" - "sync/atomic" - "unsafe" -) - -var _ = math.Pi -var _ reflect.Kind -var _ atomic.Value -var _ unsafe.Pointer - -// musl as a whole is licensed under the following standard MIT license: -// -// ---------------------------------------------------------------------- -// Copyright © 2005-2020 Rich Felker, et al. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ---------------------------------------------------------------------- -// -// Authors/contributors include: -// -// A. Wilcox -// Ada Worcester -// Alex Dowad -// Alex Suykov -// Alexander Monakov -// Andre McCurdy -// Andrew Kelley -// Anthony G. Basile -// Aric Belsito -// Arvid Picciani -// Bartosz Brachaczek -// Benjamin Peterson -// Bobby Bingham -// Boris Brezillon -// Brent Cook -// Chris Spiegel -// Clément Vasseur -// Daniel Micay -// Daniel Sabogal -// Daurnimator -// David Carlier -// David Edelsohn -// Denys Vlasenko -// Dmitry Ivanov -// Dmitry V. Levin -// Drew DeVault -// Emil Renner Berthing -// Fangrui Song -// Felix Fietkau -// Felix Janda -// Gianluca Anzolin -// Hauke Mehrtens -// He X -// Hiltjo Posthuma -// Isaac Dunham -// Jaydeep Patil -// Jens Gustedt -// Jeremy Huntwork -// Jo-Philipp Wich -// Joakim Sindholt -// John Spencer -// Julien Ramseier -// Justin Cormack -// Kaarle Ritvanen -// Khem Raj -// Kylie McClain -// Leah Neukirchen -// Luca Barbato -// Luka Perkov -// M Farkas-Dyck (Strake) -// Mahesh Bodapati -// Markus Wichmann -// Masanori Ogino -// Michael Clark -// Michael Forney -// Mikhail Kremnyov -// Natanael Copa -// Nicholas J. Kain -// orc -// Pascal Cuoq -// Patrick Oppenlander -// Petr Hosek -// Petr Skocik -// Pierre Carrier -// Reini Urban -// Rich Felker -// Richard Pennington -// Ryan Fairfax -// Samuel Holland -// Segev Finer -// Shiz -// sin -// Solar Designer -// Stefan Kristiansson -// Stefan O'Rear -// Szabolcs Nagy -// Timo Teräs -// Trutz Behn -// Valentin Ochs -// Will Dietz -// William Haddon -// William Pitcock -// -// Portions of this software are derived from third-party works licensed -// under terms compatible with the above MIT license: -// -// The TRE regular expression implementation (src/regex/reg* and -// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed -// under a 2-clause BSD license (license text in the source files). The -// included version has been heavily modified by Rich Felker in 2012, in -// the interests of size, simplicity, and namespace cleanliness. -// -// Much of the math library code (src/math/* and src/complex/*) is -// Copyright © 1993,2004 Sun Microsystems or -// Copyright © 2003-2011 David Schultz or -// Copyright © 2003-2009 Steven G. Kargl or -// Copyright © 2003-2009 Bruce D. Evans or -// Copyright © 2008 Stephen L. Moshier or -// Copyright © 2017-2018 Arm Limited -// and labelled as such in comments in the individual source files. All -// have been licensed under extremely permissive terms. -// -// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 -// The Android Open Source Project and is licensed under a two-clause BSD -// license. It was taken from Bionic libc, used on Android. -// -// The AArch64 memcpy and memset code (src/string/aarch64/*) are -// Copyright © 1999-2019, Arm Limited. -// -// The implementation of DES for crypt (src/crypt/crypt_des.c) is -// Copyright © 1994 David Burren. It is licensed under a BSD license. -// -// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was -// originally written by Solar Designer and placed into the public -// domain. The code also comes with a fallback permissive license for use -// in jurisdictions that may not recognize the public domain. -// -// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -// Valentin Ochs and is licensed under an MIT-style license. -// -// The x86_64 port was written by Nicholas J. Kain and is licensed under -// the standard MIT terms. -// -// The mips and microblaze ports were originally written by Richard -// Pennington for use in the ellcc project. The original code was adapted -// by Rich Felker for build system and code conventions during upstream -// integration. It is licensed under the standard MIT terms. -// -// The mips64 port was contributed by Imagination Technologies and is -// licensed under the standard MIT terms. -// -// The powerpc port was also originally written by Richard Pennington, -// and later supplemented and integrated by John Spencer. It is licensed -// under the standard MIT terms. -// -// All other files which have no copyright comments are original works -// produced specifically for use as part of this library, written either -// by Rich Felker, the main author of the library, or by one or more -// contibutors listed above. Details on authorship of individual files -// can be found in the git version control history of the project. The -// omission of copyright and license comments in each file is in the -// interest of source tree size. -// -// In addition, permission is hereby granted for all public header files -// (include/* and arch/*/bits/*) and crt files intended to be linked into -// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -// the copyright notice and permission notice otherwise required by the -// license, and to use these files without any requirement of -// attribution. These files include substantial contributions from: -// -// Bobby Bingham -// John Spencer -// Nicholas J. Kain -// Rich Felker -// Richard Pennington -// Stefan Kristiansson -// Szabolcs Nagy -// -// all of whom have explicitly granted such permission. -// -// This file previously contained text expressing a belief that most of -// the files covered by the above exception were sufficiently trivial not -// to be subject to copyright, resulting in confusion over whether it -// negated the permissions granted in the license. In the spirit of -// permissive licensing, and of not having licensing issues being an -// obstacle to adoption, that text has been removed. -const ( /* copyright.c:194:1: */ - __musl__copyright__ = 0 -) - -const ( /* nameser.h:117:1: */ - ns_uop_delete = 0 - ns_uop_add = 1 - ns_uop_max = 2 -) - -const ( /* nameser.h:147:1: */ - ns_t_invalid = 0 - ns_t_a = 1 - ns_t_ns = 2 - ns_t_md = 3 - ns_t_mf = 4 - ns_t_cname = 5 - ns_t_soa = 6 - ns_t_mb = 7 - ns_t_mg = 8 - ns_t_mr = 9 - ns_t_null = 10 - ns_t_wks = 11 - ns_t_ptr = 12 - ns_t_hinfo = 13 - ns_t_minfo = 14 - ns_t_mx = 15 - ns_t_txt = 16 - ns_t_rp = 17 - ns_t_afsdb = 18 - ns_t_x25 = 19 - ns_t_isdn = 20 - ns_t_rt = 21 - ns_t_nsap = 22 - ns_t_nsap_ptr = 23 - ns_t_sig = 24 - ns_t_key = 25 - ns_t_px = 26 - ns_t_gpos = 27 - ns_t_aaaa = 28 - ns_t_loc = 29 - ns_t_nxt = 30 - ns_t_eid = 31 - ns_t_nimloc = 32 - ns_t_srv = 33 - ns_t_atma = 34 - ns_t_naptr = 35 - ns_t_kx = 36 - ns_t_cert = 37 - ns_t_a6 = 38 - ns_t_dname = 39 - ns_t_sink = 40 - ns_t_opt = 41 - ns_t_apl = 42 - ns_t_tkey = 249 - ns_t_tsig = 250 - ns_t_ixfr = 251 - ns_t_axfr = 252 - ns_t_mailb = 253 - ns_t_maila = 254 - ns_t_any = 255 - ns_t_zxfr = 256 - ns_t_max = 65536 -) - -const ( /* nameser.h:210:1: */ - ns_c_invalid = 0 - ns_c_in = 1 - ns_c_2 = 2 - ns_c_chaos = 3 - ns_c_hs = 4 - ns_c_none = 254 - ns_c_any = 255 - ns_c_max = 65536 -) - -const ( /* nameser.h:221:1: */ - ns_kt_rsa = 1 - ns_kt_dh = 2 - ns_kt_dsa = 3 - ns_kt_private = 254 -) - -const ( /* nameser.h:228:1: */ - cert_t_pkix = 1 - cert_t_spki = 2 - cert_t_pgp = 3 - cert_t_url = 253 - cert_t_oid = 254 -) - -const ( /* nameser.h:28:1: */ - ns_s_qd = 0 - ns_s_zn = 0 - ns_s_an = 1 - ns_s_pr = 1 - ns_s_ns = 2 - ns_s_ud = 2 - ns_s_ar = 3 - ns_s_max = 4 -) - -const ( /* nameser.h:75:1: */ - ns_f_qr = 0 - ns_f_opcode = 1 - ns_f_aa = 2 - ns_f_tc = 3 - ns_f_rd = 4 - ns_f_ra = 5 - ns_f_z = 6 - ns_f_ad = 7 - ns_f_cd = 8 - ns_f_rcode = 9 - ns_f_max = 10 -) - -const ( /* nameser.h:89:1: */ - ns_o_query = 0 - ns_o_iquery = 1 - ns_o_status = 2 - ns_o_notify = 4 - ns_o_update = 5 - ns_o_max = 6 -) - -const ( /* nameser.h:98:1: */ - ns_r_noerror = 0 - ns_r_formerr = 1 - ns_r_servfail = 2 - ns_r_nxdomain = 3 - ns_r_notimpl = 4 - ns_r_refused = 5 - ns_r_yxdomain = 6 - ns_r_yxrrset = 7 - ns_r_nxrrset = 8 - ns_r_notauth = 9 - ns_r_notzone = 10 - ns_r_max = 11 - ns_r_badvers = 16 - ns_r_badsig = 16 - ns_r_badkey = 17 - ns_r_badtime = 18 -) - -const ( /* pthread_impl.h:58:1: */ - DT_EXITING = 0 - DT_JOINABLE = 1 - DT_DETACHED = 2 -) - -type ptrdiff_t = int32 /* :3:26 */ - -type size_t = uint32 /* :9:23 */ - -type wchar_t = int32 /* :15:24 */ - -type uint16_t = uint16 /* alltypes.h:149:25 */ - -type uint32_t = uint32 /* alltypes.h:154:25 */ - -type uint64_t = uint64 /* alltypes.h:159:25 */ - -func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ - return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 -} - -var table = [384]uint16{ - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x320/256 | 0x320*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x160/256 | 0x160*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), -} /* __ctype_b_loc.c:9:29 */ - -var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */ - -func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&ptable)) -} - -func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ - return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) -} - -type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:366:9 */ - -type locale_t = uintptr /* alltypes.h:366:32 */ - -func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisalpha(tls, c) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) - }() != 0 || func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0) -} - -func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalnum(tls, c) -} - -func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) -} - -func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalpha(tls, c) -} - -func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) -} - -func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisdigit(tls, c) -} - -func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('a') < uint32(26)) -} - -func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xislower(tls, c) -} - -func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) -} - -func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisprint(tls, c) -} - -func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('A') < uint32(26)) -} - -func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisupper(tls, c) -} - -func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) -} - -func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisxdigit(tls, c) -} - -type off_t = int64 /* alltypes.h:185:16 */ - -type ino_t = uint64 /* alltypes.h:190:25 */ - -type dirent = struct { - d_ino ino_t - d_off off_t - d_reclen uint16 - d_type uint8 - d_name [256]int8 - _ [1]byte -} /* dirent.h:5:1 */ - -type __dirstream = struct { - tell off_t - fd int32 - buf_pos int32 - buf_end int32 - lock [1]int32 - buf [2048]int8 -} /* dirent.h:20:9 */ - -type DIR = __dirstream /* dirent.h:20:28 */ - -type ssize_t = int32 /* alltypes.h:88:15 */ - -type intptr_t = int32 /* alltypes.h:93:15 */ - -type pid_t = int32 /* alltypes.h:258:13 */ - -type uid_t = uint32 /* alltypes.h:268:18 */ - -type gid_t = uint32 /* alltypes.h:273:18 */ - -type useconds_t = uint32 /* alltypes.h:283:18 */ - -type div_t = struct { - quot int32 - rem int32 -} /* stdlib.h:62:35 */ -type ldiv_t = struct { - quot int32 - rem int32 -} /* stdlib.h:63:36 */ -type lldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:64:41 */ - -func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd) - Xfree(tls, dir) - return ret -} - -type mode_t = uint32 /* alltypes.h:175:18 */ - -type iovec = struct { - iov_base uintptr - iov_len size_t -} /* alltypes.h:378:1 */ - -type flock = struct { - l_type int16 - l_whence int16 - l_start off_t - l_len off_t - l_pid pid_t -} /* fcntl.h:24:1 */ - -type file_handle = struct { - _ [0]uint32 - handle_bytes uint32 - handle_type int32 -} /* fcntl.h:167:1 */ - -type f_owner_ex = struct { - __type int32 - pid pid_t -} /* fcntl.h:172:1 */ - -type syscall_arg_t = int32 /* syscall.h:22:14 */ - -func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - var fd int32 - var dir uintptr - - if AssignInt32(&fd, Xopen(tls, name, 00|0200000|02000000, 0)) < 0 { - return uintptr(0) - } - if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint32(1), uint32(unsafe.Sizeof(DIR{}))))) != 0) { - X__syscall1(tls, 6, int32(fd)) - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).fd = fd - return dir -} - -type max_align_t = struct { - __ll int64 - __ld float64 -} /* alltypes.h:51:66 */ - -type dirstream_buf_alignment_check = [1]int8 /* readdir.c:7:14 */ - -func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var de uintptr - - if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end { - var len int32 = int32(X__syscall3(tls, 220, int32((*DIR)(unsafe.Pointer(dir)).fd), int32(dir+24), int32(unsafe.Sizeof([2048]int8{})))) - if len <= 0 { - if len < 0 && len != -2 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len - } - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).buf_end = len - (*DIR)(unsafe.Pointer(dir)).buf_pos = 0 - } - de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos) - *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen) - (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off - return de -} - -type uintptr_t = uint32 /* alltypes.h:78:24 */ - -type int8_t = int8 /* alltypes.h:119:25 */ - -type int16_t = int16 /* alltypes.h:124:25 */ - -type int32_t = int32 /* alltypes.h:129:25 */ - -type int64_t = int64 /* alltypes.h:134:25 */ - -type intmax_t = int64 /* alltypes.h:139:25 */ - -type uint8_t = uint8 /* alltypes.h:144:25 */ - -type uintmax_t = uint64 /* alltypes.h:169:25 */ - -type int_fast8_t = int8_t /* stdint.h:22:16 */ -type int_fast64_t = int64_t /* stdint.h:23:17 */ - -type int_least8_t = int8_t /* stdint.h:25:17 */ -type int_least16_t = int16_t /* stdint.h:26:17 */ -type int_least32_t = int32_t /* stdint.h:27:17 */ -type int_least64_t = int64_t /* stdint.h:28:17 */ - -type uint_fast8_t = uint8_t /* stdint.h:30:17 */ -type uint_fast64_t = uint64_t /* stdint.h:31:18 */ - -type uint_least8_t = uint8_t /* stdint.h:33:18 */ -type uint_least16_t = uint16_t /* stdint.h:34:18 */ -type uint_least32_t = uint32_t /* stdint.h:35:18 */ -type uint_least64_t = uint64_t /* stdint.h:36:18 */ - -type int_fast16_t = int32_t /* stdint.h:1:17 */ -type int_fast32_t = int32_t /* stdint.h:2:17 */ -type uint_fast16_t = uint32_t /* stdint.h:3:18 */ -type uint_fast32_t = uint32_t /* stdint.h:4:18 */ - -type _IO_FILE = struct { - flags uint32 - rpos uintptr - rend uintptr - close uintptr - wend uintptr - wpos uintptr - mustbezero_1 uintptr - wbase uintptr - read uintptr - write uintptr - seek uintptr - buf uintptr - buf_size size_t - prev uintptr - next uintptr - fd int32 - pipe_pid int32 - lockcount int32 - mode int32 - lock int32 - lbf int32 - cookie uintptr - off off_t - getln_buf uintptr - mustbezero_2 uintptr - shend uintptr - shlim off_t - shcnt off_t - prev_locked uintptr - next_locked uintptr - locale uintptr -} /* alltypes.h:343:9 */ - -type FILE = _IO_FILE /* alltypes.h:343:25 */ - -type va_list = uintptr /* alltypes.h:349:27 */ - -type _G_fpos64_t = struct { - _ [0]uint32 - __opaque [16]int8 -} /* stdio.h:54:9 */ - -type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ - -type float_t = float64 /* alltypes.h:38:21 */ - -type double_t = float64 /* alltypes.h:43:21 */ - -func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ - bp := tls.Alloc(4) - defer tls.Free(4) - - // var __u struct {__f float32;} at bp, 4 - - *(*float32)(unsafe.Pointer(bp)) = __f - return *(*uint32)(unsafe.Pointer(bp)) -} - -func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - // var __u struct {__f float64;} at bp, 8 - - *(*float64)(unsafe.Pointer(bp)) = __f - return *(*uint64)(unsafe.Pointer(bp)) -} - -type __pthread = struct { - self uintptr - dtv uintptr - prev uintptr - next uintptr - sysinfo uintptr_t - canary uintptr_t - canary2 uintptr_t - tid int32 - errno_val int32 - detach_state int32 - cancel int32 - canceldisable uint8 - cancelasync uint8 - tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ - _ [1]byte - map_base uintptr - map_size size_t - stack uintptr - stack_size size_t - guard_size size_t - result uintptr - cancelbuf uintptr - tsd uintptr - robust_list struct { - head uintptr - off int32 - pending uintptr - } - timer_id int32 - locale locale_t - killlock [1]int32 - dlerror_buf uintptr - stdio_locks uintptr - canary_at_end uintptr_t - dtv_copy uintptr -} /* alltypes.h:296:9 */ - -func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ - var c int32 - var x int32 - var y int64 - var neg int32 = 0 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c == '+' || c == '-' { - neg = Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') >= 10 && pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - if uint32(c-'0') >= 10 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return -0x7fffffffffffffff - int64(1) - } - for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - x = 10*x + c - '0' - } - for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - y = int64(10)*y + int64(c) - int64('0') - } - for ; uint32(c-'0') < 10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if neg != 0 { - return -y - } - return y -} - -func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var x [128]uint32_t at bp, 512 - - var i int32 - var j int32 - var k int32 - var a int32 - var z int32 - var lrp int64 = int64(0) - var dc int64 = int64(0) - var e10 int64 = int64(0) - var lnz int32 = 0 - var gotdig int32 = 0 - var gotrad int32 = 0 - var rp int32 - var e2 int32 - var emax int32 = -emin - bits + 3 - var denormal int32 = 0 - var y float64 - var frac float64 = float64(0) - var bias float64 = float64(0) - - j = 0 - k = 0 - - // Don't let leading zeros consume buffer space - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - if c == '.' { - gotrad = 1 - for c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }(); c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - lrp-- - } - } - - *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) - for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - gotrad = 1 - lrp = dc - } else if k < 128-3 { - dc++ - if c != '0' { - lnz = int32(dc) - } - if j != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0') - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') - } - if PreIncInt32(&j, 1) == 9 { - k++ - j = 0 - } - gotdig = 1 - } else { - dc++ - if c != '0' { - lnz = (128 - 4) * 9 - *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) - } - } - } - if !(gotrad != 0) { - lrp = dc - } - - if gotdig != 0 && c|32 == 'e' { - e10 = scanexp(tls, f, pok) - if e10 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e10 = int64(0) - } - lrp = lrp + e10 - } else if c >= 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - if !(gotdig != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - // Handle zero specially to avoid nasty special cases later - if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { - return float64(sign) * 0.0 - } - - // Optimize small integers (w/no exponent) and over/under-flow - if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if lrp > int64(-emin/2) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if lrp < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - // Align incomplete final B1B digit - if j != 0 { - for ; j < 9; j++ { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) - } - k++ - j = 0 - } - - a = 0 - z = k - e2 = 0 - rp = int32(lrp) - - // Optimize small to mid-size integers (even in exp. notation) - if lnz < 9 && lnz <= rp && rp < 18 { - if rp == 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if rp < 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) - } - var bitlim int32 = bits - 3*(rp-9) - if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) - } - } - - // Drop trailing zeros - for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { - } - - // Align radix point to B1B digit boundary - if rp%9 != 0 { - var rpm9 int32 - if rp >= 0 { - rpm9 = rp % 9 - } else { - rpm9 = rp%9 + 9 - } - var p10 int32 = _sp10s[8-rpm9] - var carry uint32_t = uint32_t(0) - for k = a; k != z; k++ { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry - carry = uint32_t(1000000000/p10) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - rp = rp - 9 - } - } - if carry != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry - } - rp = rp + (9 - rpm9) - } - - // Upscale until desired number of bits are left of radix point - for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { - var carry uint32_t = uint32_t(0) - e2 = e2 - 29 - for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { - var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) - if tmp > uint64(1000000000) { - carry = uint32_t(tmp / uint64(1000000000)) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) - } else { - carry = uint32_t(0) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) - } - if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - z = k - } - if k == a { - break - } - } - if carry != 0 { - rp = rp + 9 - a = (a - 1) & (128 - 1) - if a == z { - z = (z - 1) & (128 - 1) - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) - } - *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry - } - } - - // Downscale until exactly number of bits are left of radix point - for { - var carry uint32_t = uint32_t(0) - var sh int32 = 1 - for i = 0; i < 2; i++ { - k = (a + i) & (128 - 1) - if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { - i = 2 - break - } - if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { - break - } - } - if i == 2 && rp == 9*2 { - break - } - // FIXME: find a way to compute optimal sh - if rp > 9+9*2 { - sh = 9 - } - e2 = e2 + sh - for k = a; k != z; k = (k + 1) & (128 - 1) { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<>sh + carry - carry = uint32_t(int32(1000000000)>>sh) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - i-- - rp = rp - 9 - } - } - if carry != 0 { - if (z+1)&(128-1) != a { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry - z = (z + 1) & (128 - 1) - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) - } - } - } - - // Assemble desired bits into floating point variable - for y = float64(AssignInt32(&i, 0)); i < 2; i++ { - if (a+i)&(128-1) == z { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) - } - y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) - } - - y = y * float64(sign) - - // Limit precision for denormal results - if bits > 53+e2-emin { - bits = 53 + e2 - emin - if bits < 0 { - bits = 0 - } - denormal = 1 - } - - // Calculate bias term to force rounding, move out lower bits - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) - frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) - y = y - frac - y = y + bias - } - - // Process tail of decimal input so it can affect rounding - if (a+i)&(128-1) != z { - var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) - if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { - frac = frac + 0.25*float64(sign) - } else if t > uint32_t(500000000) { - frac = frac + 0.75*float64(sign) - } else if t == uint32_t(500000000) { - if (a+i+1)&(128-1) == z { - frac = frac + 0.5*float64(sign) - } else { - frac = frac + 0.75*float64(sign) - } - } - if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { - frac += 1 - } - } - - y = y + frac - y = y - bias - - if (e2+53)&0x7fffffff > emax-5 { - if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { - if denormal != 0 && bits == 53+e2-emin { - denormal = 0 - } - y = y * 0.5 - e2++ - } - if e2+53 > emax || denormal != 0 && frac != 0 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - } - - return Xscalbnl(tls, y, e2) -} - -var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ -var _sp10s = [8]int32{10, 100, 1000, 10000, - 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ - -func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ - var x uint32_t = uint32_t(0) - var y float64 = float64(0) - var scale float64 = float64(1) - var bias float64 = float64(0) - var gottail int32 = 0 - var gotrad int32 = 0 - var gotdig int32 = 0 - var rp int64 = int64(0) - var dc int64 = int64(0) - var e2 int64 = int64(0) - var d int32 - var c int32 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - - // Skip leading zeros - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - - if c == '.' { - gotrad = 1 - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - // Count zeros after the radix point before significand - rp = int64(0) - __1: - if !(c == '0') { - goto __3 - } - gotdig = 1 - goto __2 - __2: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - rp-- - goto __1 - goto __3 - __3: - } - - for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - rp = dc - gotrad = 1 - } else { - gotdig = 1 - if c > '9' { - d = c | 32 + 10 - 'a' - } else { - d = c - '0' - } - if dc < int64(8) { - x = x*uint32_t(16) + uint32_t(d) - } else if dc < int64(53/4+1) { - y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) - } else if d != 0 && !(gottail != 0) { - y = y + 0.5*scale - gottail = 1 - } - dc++ - } - } - if !(gotdig != 0) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if gotrad != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } else { - X__shlim(tls, f, int64(0)) - } - return float64(sign) * 0.0 - } - if !(gotrad != 0) { - rp = dc - } - for dc < int64(8) { - x = x * uint32_t(16) - dc++ - } - if c|32 == 'p' { - e2 = scanexp(tls, f, pok) - if e2 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e2 = int64(0) - } - } else { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - e2 = e2 + (int64(4)*rp - int64(32)) - - if !(x != 0) { - return float64(sign) * 0.0 - } - if e2 > int64(-emin) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if e2 < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - for x < 0x80000000 { - if y >= 0.5 { - x = x + (x + uint32_t(1)) - y = y + (y - float64(1)) - } else { - x = x + x - y = y + y - } - e2-- - } - - if int64(bits) > int64(32)+e2-int64(emin) { - bits = int32(int64(32) + e2 - int64(emin)) - if bits < 0 { - bits = 0 - } - } - - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) - } - - if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { - x++ - y = float64(0) - } - - y = bias + float64(sign)*float64(x) + float64(sign)*y - y = y - bias - - if !(y != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - - return Xscalbnl(tls, y, int32(e2)) -} - -func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ - if __ccgo_strace { - trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) - } - var sign int32 = 1 - var i size_t - var bits int32 - var emin int32 - var c int32 - - switch prec { - case 0: - bits = 24 - emin = -125 - bits - break - case 1: - bits = 53 - emin = -1021 - bits - break - case 2: - bits = 53 - emin = -1021 - bits - break - default: - return float64(0) - } - - for __isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0 { - } - - if c == '+' || c == '-' { - sign = sign - 2*Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - - for i = size_t(0); i < size_t(8) && c|32 == int32(*(*int8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { - if i < size_t(7) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - if i == size_t(3) || i == size_t(8) || i > size_t(3) && pok != 0 { - if i != size_t(8) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - for ; i > size_t(3); i-- { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - } - return float64(float32(sign) * X__builtin_inff(tls)) - } - if !(i != 0) { - for i = size_t(0); i < size_t(3) && c|32 == int32(*(*int8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { - if i < size_t(2) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - } - if i == size_t(3) { - if func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() != '(' { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return float64(X__builtin_nanf(tls, ts+13)) - } - for i = size_t(1); ; i++ { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { - continue - } - if c == ')' { - return float64(X__builtin_nanf(tls, ts+13)) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - for PostDecUint32(&i, 1) != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - return float64(X__builtin_nanf(tls, ts+13)) - } - return float64(X__builtin_nanf(tls, ts+13)) - } - - if i != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - if c == '0' { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c|32 == 'x' { - return hexfloat(tls, f, bits, emin, sign, pok) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - c = '0' - } - - return decfloat(tls, f, c, bits, emin, sign, pok) -} - -// Lookup table for digit values. -1==255>=36 -> invalid -var table1 = [257]uint8{Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), -} /* intscan.c:7:28 */ - -func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ - if __ccgo_strace { - trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) - } - var val uintptr - var c int32 - var neg int32 - var x uint32 - var y uint64 - var bs int32 - val = uintptr(unsafe.Pointer(&table1)) + uintptr(1) - neg = 0 - if !(base > uint32(36) || base == uint32(1)) { - goto __1 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__1: - ; -__2: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __3 - } - goto __2 -__3: - ; - if !(c == '+' || c == '-') { - goto __4 - } - neg = -Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__4: - ; - if !((base == uint32(0) || base == uint32(16)) && c == '0') { - goto __5 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(c|32 == 'x') { - goto __7 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { - goto __9 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - goto __10 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - goto __11 -__10: - X__shlim(tls, f, int64(0)) -__11: - ; - return uint64(0) -__9: - ; - base = uint32(16) - goto __8 -__7: - if !(base == uint32(0)) { - goto __12 - } - base = uint32(8) -__12: - ; -__8: - ; - goto __6 -__5: - if !(base == uint32(0)) { - goto __13 - } - base = uint32(10) -__13: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { - goto __14 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - X__shlim(tls, f, int64(0)) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__14: - ; -__6: - ; - if !(base == uint32(10)) { - goto __15 - } - x = uint32(0) -__17: - if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { - goto __19 - } - x = x*uint32(10) + uint32(c-'0') - goto __18 -__18: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __17 - goto __19 -__19: - ; - y = uint64(x) -__20: - if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { - goto __22 - } - y = y*uint64(10) + uint64(c-'0') - goto __21 -__21: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __20 - goto __22 -__22: - ; - if !(uint32(c-'0') >= 10) { - goto __23 - } - goto done -__23: - ; - goto __16 -__15: - if !!(base&(base-uint32(1)) != 0) { - goto __24 - } - bs = int32(*(*int8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) - x = uint32(0) -__26: - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { - goto __28 - } - x = x<>bs) { - goto __31 - } - y = y<= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(y >= lim) { - goto __43 - } - if !(!(lim&uint64(1) != 0) && !(neg != 0)) { - goto __44 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim - uint64(1) - goto __45 -__44: - if !(y > lim) { - goto __46 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim -__46: - ; -__45: - ; -__43: - ; - return y ^ uint64(neg) - uint64(neg) -} - -// The shcnt field stores the number of bytes read so far, offset by -// the value of buf-rpos at the last function call (__shlim or __shgetc), -// so that between calls the inline shcnt macro can add rpos-buf to get -// the actual count. - -func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ - if __ccgo_strace { - trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) - } - (*FILE)(unsafe.Pointer(f)).shlim = lim - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf) - int32((*FILE)(unsafe.Pointer(f)).rpos)) / 1) - // If lim is nonzero, rend must be a valid pointer. - if lim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).rend)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) > lim { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } -} - -func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var c int32 - var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) + cnt - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos - (*FILE)(unsafe.Pointer(f)).shlim = int64(-1) - return -1 - } - cnt++ - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).rend)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) > (*FILE)(unsafe.Pointer(f)).shlim-cnt { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) + cnt - if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf { - *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c) - } - return c -} - -type lconv = struct { - decimal_point uintptr - thousands_sep uintptr - grouping uintptr - int_curr_symbol uintptr - currency_symbol uintptr - mon_decimal_point uintptr - mon_thousands_sep uintptr - mon_grouping uintptr - positive_sign uintptr - negative_sign uintptr - int_frac_digits int8 - frac_digits int8 - p_cs_precedes int8 - p_sep_by_space int8 - n_cs_precedes int8 - n_sep_by_space int8 - p_sign_posn int8 - n_sign_posn int8 - int_p_cs_precedes int8 - int_p_sep_by_space int8 - int_n_cs_precedes int8 - int_n_sep_by_space int8 - int_p_sign_posn int8 - int_n_sign_posn int8 - _ [2]byte -} /* locale.h:24:1 */ - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: Int8FromInt32(255), frac_digits: Int8FromInt32(255), p_cs_precedes: Int8FromInt32(255), p_sep_by_space: Int8FromInt32(255), n_cs_precedes: Int8FromInt32(255), n_sep_by_space: Int8FromInt32(255), p_sign_posn: Int8FromInt32(255), n_sign_posn: Int8FromInt32(255), int_p_cs_precedes: Int8FromInt32(255), int_p_sep_by_space: Int8FromInt32(255), int_n_cs_precedes: Int8FromInt32(255), int_n_sep_by_space: Int8FromInt32(255), int_p_sign_posn: Int8FromInt32(255), int_n_sign_posn: Int8FromInt32(255)} /* localeconv.c:4:27 */ - -func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&posix_lconv)) -} - -func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - if !(e != 0) { - if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0x7ff { - if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) { - *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff)) - if !(e != 0) { - if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0xff { - if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return X__fpclassify(tls, x) -} - -func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xcopysign(tls, x, y) -} - -func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return Xfabs(tls, x) -} - -func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xfmod(tls, x, y) -} - -func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - return X__builtin_nanf(tls, ts+13) -} - -var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ - -func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) - var y double_t - - if e >= 0x3ff+52 { - return x - } - if s != 0 { - y = x - toint + toint - } else { - y = x + toint - toint - } - if y == float64(0) { - if s != 0 { - return -Float64FromFloat64(0.0) - } - return float64(0) - } - return y -} - -func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - // var u struct {f float64;} at bp, 8 - - var y double_t = x - - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - n = 1023 - } - } - } else if n < -1022 { - // make sure final n < -53 to avoid double - // rounding in the subnormal range - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - n = -1022 - } - } - } - *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 - x = y * *(*float64)(unsafe.Pointer(bp)) - return x -} - -func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - return Xscalbn(tls, x, n) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -type __locale_map = struct { - __map uintptr - map_size size_t - name [24]int8 - next uintptr -} /* alltypes.h:366:9 */ - -type tls_module = struct { - next uintptr - image uintptr - len size_t - size size_t - align size_t - offset size_t -} /* libc.h:14:1 */ - -type __libc = struct { - can_do_threads int8 - threaded int8 - secure int8 - need_locks int8 - threads_minus_1 int32 - auxv uintptr - tls_head uintptr - tls_size size_t - tls_align size_t - tls_cnt size_t - page_size size_t - global_locale struct{ cat [6]uintptr } -} /* libc.h:20:1 */ - -type time_t = int32 /* alltypes.h:108:16 */ - -type clockid_t = int32 /* alltypes.h:237:13 */ - -type timespec = struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ -} /* alltypes.h:252:1 */ - -type pthread_t = uintptr /* alltypes.h:296:26 */ - -type pthread_once_t = int32 /* alltypes.h:302:13 */ - -type pthread_key_t = uint32 /* alltypes.h:307:18 */ - -type pthread_spinlock_t = int32 /* alltypes.h:312:13 */ - -type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:317:37 */ - -type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:322:37 */ - -type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:327:37 */ - -type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:332:40 */ - -type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:372:9 */ - -type sigset_t = __sigset_t /* alltypes.h:372:71 */ - -type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:395:147 */ - -type pthread_mutex_t = struct{ __u struct{ __i [6]int32 } } /* alltypes.h:400:157 */ - -type pthread_cond_t = struct{ __u struct{ __i [12]int32 } } /* alltypes.h:410:112 */ - -type pthread_rwlock_t = struct{ __u struct{ __i [8]int32 } } /* alltypes.h:420:139 */ - -type pthread_barrier_t = struct{ __u struct{ __i [5]int32 } } /* alltypes.h:425:137 */ - -type sched_param = struct { - sched_priority int32 - __reserved1 int32 - __reserved2 [4]int32 - __reserved3 int32 -} /* sched.h:19:1 */ - -type timer_t = uintptr /* alltypes.h:232:14 */ - -type clock_t = int32 /* alltypes.h:242:14 */ - -type tm = struct { - tm_sec int32 - tm_min int32 - tm_hour int32 - tm_mday int32 - tm_mon int32 - tm_year int32 - tm_wday int32 - tm_yday int32 - tm_isdst int32 - tm_gmtoff int32 - tm_zone uintptr -} /* time.h:38:1 */ - -type itimerspec = struct { - it_interval struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ - } - it_value struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ - } -} /* time.h:80:1 */ - -type sigevent = struct { - sigev_value struct{ sival_int int32 } - sigev_signo int32 - sigev_notify int32 - sigev_notify_function uintptr - sigev_notify_attributes uintptr - __pad [44]int8 -} /* time.h:107:1 */ - -type __ptcb = struct { - __f uintptr - __x uintptr - __next uintptr -} /* alltypes.h:296:9 */ - -type sigaltstack = struct { - ss_sp uintptr - ss_flags int32 - ss_size size_t -} /* signal.h:44:9 */ - -type stack_t = sigaltstack /* signal.h:44:28 */ - -type greg_t = int32 /* signal.h:51:13 */ -type gregset_t = [19]int32 /* signal.h:51:21 */ -type _fpstate = struct { - cw uint32 - sw uint32 - tag uint32 - ipoff uint32 - cssel uint32 - dataoff uint32 - datasel uint32 - _st [8]struct { - significand [4]uint16 - exponent uint16 - } - status uint32 -} /* signal.h:52:9 */ - -type fpregset_t = uintptr /* signal.h:58:3 */ -type sigcontext = struct { - gs uint16 - __gsh uint16 - fs uint16 - __fsh uint16 - es uint16 - __esh uint16 - ds uint16 - __dsh uint16 - edi uint32 - esi uint32 - ebp uint32 - esp uint32 - ebx uint32 - edx uint32 - ecx uint32 - eax uint32 - trapno uint32 - err uint32 - eip uint32 - cs uint16 - __csh uint16 - eflags uint32 - esp_at_signal uint32 - ss uint16 - __ssh uint16 - fpstate uintptr - oldmask uint32 - cr2 uint32 -} /* signal.h:59:1 */ - -type mcontext_t = struct { - gregs gregset_t - fpregs fpregset_t - oldmask uint32 - cr2 uint32 -} /* signal.h:73:3 */ - -type __ucontext = struct { - uc_flags uint32 - uc_link uintptr - uc_stack stack_t - uc_mcontext mcontext_t - uc_sigmask sigset_t - __fpregs_mem [28]uint32 -} /* signal.h:86:9 */ - -type ucontext_t = __ucontext /* signal.h:93:3 */ - -type sigval = struct{ sival_int int32 } /* time.h:107:1 */ - -type siginfo_t = struct { - si_signo int32 - si_errno int32 - si_code int32 - __si_fields struct { - _ [0]uint32 - __pad [116]int8 - } -} /* signal.h:145:3 */ - -type sigaction = struct { - __sa_handler struct{ sa_handler uintptr } - sa_mask sigset_t - sa_flags int32 - sa_restorer uintptr -} /* signal.h:167:1 */ - -type sig_t = uintptr /* signal.h:251:14 */ - -type sig_atomic_t = int32 /* signal.h:269:13 */ - -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:2:19: */ - panic(`arch/i386/atomic_arch.h:4:2: assembler statements not supported`) - return t -} - -func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:11:19: */ - panic(`arch/i386/atomic_arch.h:13:2: assembler statements not supported`) - return v -} - -func a_and(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:29:20: */ - panic(`arch/i386/atomic_arch.h:31:2: assembler statements not supported`) -} - -func a_or(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:37:20: */ - panic(`arch/i386/atomic_arch.h:39:2: assembler statements not supported`) -} - -func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:87:19: */ - var r int32 - panic(`arch/i386/atomic_arch.h:90:2: assembler statements not supported`) - return r -} - -func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:96:19: */ - var r int32 - panic(`arch/i386/atomic_arch.h:99:2: assembler statements not supported`) - return r -} - -func a_clz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:104:19: */ - panic(`arch/i386/atomic_arch.h:106:2: assembler statements not supported`) - return int32(x) -} - -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - -type a_cas_p_undefined_but_pointer_not_32bit = [1]int8 /* atomic.h:229:14 */ - -type __timer = struct { - timerid int32 - thread pthread_t -} /* pthread_impl.h:64:1 */ - -func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */ - var self uintptr - panic(`arch/i386/pthread_arch.h:4:2: assembler statements not supported`) - return self -} - -func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */ - if priv != 0 { - priv = 128 - } - if cnt < 0 { - cnt = 0x7fffffff - } - _ = Bool32(X__syscall3(tls, 240, int32(addr), int32(1|priv), int32(cnt)) != -38 || X__syscall3(tls, 240, int32(addr), 1, int32(cnt)) != 0) -} - -func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */ - if priv != 0 { - priv = 128 - } - _ = Bool32(X__syscall4(tls, 240, int32(addr), int32(0|priv), int32(val), 0) != -38 || X__syscall4(tls, 240, int32(addr), 0, int32(val), 0) != 0) -} - -var X__fsmu8 = [51]uint32_t{ - func() uint32 { - if 0x2 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2) - }(), func() uint32 { - if 0x3 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3) - }(), func() uint32 { - if 0x4 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4) - }(), func() uint32 { - if 0x5 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5) - }(), func() uint32 { - if 0x6 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6) - }(), func() uint32 { - if 0x7 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7) - }(), - func() uint32 { - if 0x8 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8) - }(), func() uint32 { - if 0x9 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9) - }(), func() uint32 { - if 0xa < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa) - }(), func() uint32 { - if 0xb < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb) - }(), func() uint32 { - if 0xc < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc) - }(), func() uint32 { - if 0xd < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd) - }(), func() uint32 { - if 0xe < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe) - }(), func() uint32 { - if 0xf < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf) - }(), - func() uint32 { - if 0x0+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x0+16) - }(), func() uint32 { - if 0x1+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x1+16) - }(), func() uint32 { - if 0x2+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2+16) - }(), func() uint32 { - if 0x3+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3+16) - }(), func() uint32 { - if 0x4+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4+16) - }(), func() uint32 { - if 0x5+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5+16) - }(), func() uint32 { - if 0x6+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6+16) - }(), func() uint32 { - if 0x7+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7+16) - }(), - func() uint32 { - if 0x8+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8+16) - }(), func() uint32 { - if 0x9+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9+16) - }(), func() uint32 { - if 0xa+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa+16) - }(), func() uint32 { - if 0xb+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb+16) - }(), func() uint32 { - if 0xc+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc+16) - }(), func() uint32 { - if 0xd+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd+16) - }(), func() uint32 { - if 0xe+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe+16) - }(), func() uint32 { - if 0xf+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf+16) - }(), - func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x0 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x0), func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x1 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x1), func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x2 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x2), func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x3 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x3), func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x4 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x4), func() uint32 { - if 0x5 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x5 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x5), func() uint32 { - if 0x6 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x6 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x6), func() uint32 { - if 0x7 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x7 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x7), - func() uint32 { - if 0x8 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x8 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x8), func() uint32 { - if 0x9 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x9 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x9), func() uint32 { - if 0xa == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xa == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xa), func() uint32 { - if 0xb == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xb == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xb), func() uint32 { - if 0xc == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xc == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xc), func() uint32 { - if 0xd == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xd == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xd), func() uint32 { - if 0xe == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xe == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xe), func() uint32 { - if 0xf == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xf == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xf), - func() uint32 { - if 0x0 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x0 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x0), func() uint32 { - if 0x1 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x1 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x1), func() uint32 { - if 0x2 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x2 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x2), func() uint32 { - if 0x3 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x3 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x3), func() uint32 { - if 0x4 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x4 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x4), -} /* internal.c:18:16 */ - -type wint_t = uint32 /* alltypes.h:221:18 */ - -type wctype_t = uint32 /* alltypes.h:226:23 */ - -type __mbstate_t = struct { - __opaque1 uint32 - __opaque2 uint32 -} /* alltypes.h:360:9 */ - -type mbstate_t = __mbstate_t /* alltypes.h:360:63 */ - -func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */ - if __ccgo_strace { - trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var c uint32 - var s uintptr - var N uint32 - // var dummy wchar_t at bp, 4 - s = src - N = n - - if !!(st != 0) { - goto __1 - } - st = uintptr(unsafe.Pointer(&_sinternal_state)) -__1: - ; - c = *(*uint32)(unsafe.Pointer(st)) - - if !!(s != 0) { - goto __2 - } - if !(c != 0) { - goto __4 - } - goto ilseq -__4: - ; - return size_t(0) - goto __3 -__2: - if !!(wc != 0) { - goto __5 - } - wc = bp /* &dummy */ -__5: - ; -__3: - ; - - if !!(n != 0) { - goto __6 - } - return Uint32FromInt32(-2) -__6: - ; - if !!(c != 0) { - goto __7 - } - if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) { - goto __8 - } - return BoolUint32(!!(int32(AssignPtrInt32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s))))) != 0)) -__8: - ; - if !(func() int32 { - if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { - return 4 - } - return 1 - }() == 1) { - goto __9 - } - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s))))) - return 1 -__9: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) { - goto __10 - } - goto ilseq -__10: - ; - c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2] - n-- -__7: - ; - - if !(n != 0) { - goto __11 - } - if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) { - goto __12 - } - goto ilseq -__12: - ; -loop: - c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80) - n-- - if !!(c&(uint32(1)<<31) != 0) { - goto __13 - } - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(c) - return N - n -__13: - ; - if !(n != 0) { - goto __14 - } - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) { - goto __15 - } - goto ilseq -__15: - ; - goto loop -__14: - ; -__11: - ; - - *(*uint32)(unsafe.Pointer(st)) = c - return Uint32FromInt32(-2) -ilseq: - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 - return Uint32FromInt32(-1) -} - -var _sinternal_state uint32 /* mbrtowc.c:8:18: */ - -func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) - } - return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0)) -} - -type imaxdiv_t = struct { - quot intmax_t - rem intmax_t -} /* inttypes.h:14:40 */ - -type socklen_t = uint32 /* alltypes.h:384:18 */ - -type sa_family_t = uint16 /* alltypes.h:389:24 */ - -type msghdr = struct { - msg_name uintptr - msg_namelen socklen_t - msg_iov uintptr - msg_iovlen int32 - msg_control uintptr - msg_controllen socklen_t - msg_flags int32 -} /* socket.h:22:1 */ - -type cmsghdr = struct { - cmsg_len socklen_t - cmsg_level int32 - cmsg_type int32 -} /* socket.h:44:1 */ - -type linger = struct { - l_onoff int32 - l_linger int32 -} /* socket.h:74:1 */ - -type sockaddr = struct { - sa_family sa_family_t - sa_data [14]int8 -} /* socket.h:367:1 */ - -type sockaddr_storage = struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 -} /* socket.h:372:1 */ - -type in_port_t = uint16_t /* in.h:12:18 */ -type in_addr_t = uint32_t /* in.h:13:18 */ -type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */ - -type sockaddr_in = struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t -} /* in.h:16:1 */ - -type in6_addr = struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } -} /* in.h:23:1 */ - -type sockaddr_in6 = struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t -} /* in.h:34:1 */ - -type ipv6_mreq = struct { - ipv6mr_multiaddr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipv6mr_interface uint32 -} /* in.h:42:1 */ - -type ip_opts = struct { - ip_dst struct{ s_addr in_addr_t } - ip_opts [40]int8 -} /* in.h:229:1 */ - -type ip_mreq = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } -} /* in.h:247:1 */ - -type ip_mreqn = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_address struct{ s_addr in_addr_t } - imr_ifindex int32 -} /* in.h:252:1 */ - -type ip_mreq_source = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } - imr_sourceaddr struct{ s_addr in_addr_t } -} /* in.h:258:1 */ - -type ip_msfilter = struct { - imsf_multiaddr struct{ s_addr in_addr_t } - imsf_interface struct{ s_addr in_addr_t } - imsf_fmode uint32_t - imsf_numsrc uint32_t - imsf_slist [1]struct{ s_addr in_addr_t } -} /* in.h:264:1 */ - -type group_req = struct { - gr_interface uint32_t - gr_group struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 - } -} /* in.h:275:1 */ - -type group_source_req = struct { - gsr_interface uint32_t - gsr_group struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 - } - gsr_source struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 - } -} /* in.h:280:1 */ - -type group_filter = struct { - gf_interface uint32_t - gf_group struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 - } - gf_fmode uint32_t - gf_numsrc uint32_t - gf_slist [1]struct { - ss_family sa_family_t - __ss_padding [122]int8 - __ss_align uint32 - } -} /* in.h:286:1 */ - -type in_pktinfo = struct { - ipi_ifindex int32 - ipi_spec_dst struct{ s_addr in_addr_t } - ipi_addr struct{ s_addr in_addr_t } -} /* in.h:297:1 */ - -type in6_pktinfo = struct { - ipi6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipi6_ifindex uint32 -} /* in.h:303:1 */ - -type ip6_mtuinfo = struct { - ip6m_addr struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t - } - ip6m_mtu uint32_t -} /* in.h:308:1 */ - -type addrinfo = struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr -} /* netdb.h:16:1 */ - -// Legacy functions follow (marked OBsolete in SUS) - -type netent = struct { - n_name uintptr - n_aliases uintptr - n_addrtype int32 - n_net uint32_t -} /* netdb.h:62:1 */ - -type hostent = struct { - h_name uintptr - h_aliases uintptr - h_addrtype int32 - h_length int32 - h_addr_list uintptr -} /* netdb.h:69:1 */ - -type servent = struct { - s_name uintptr - s_aliases uintptr - s_port int32 - s_proto uintptr -} /* netdb.h:78:1 */ - -type protoent = struct { - p_name uintptr - p_aliases uintptr - p_proto int32 -} /* netdb.h:85:1 */ - -type aibuf = struct { - ai struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr - } - sa struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte - } - lock [1]int32 - slot int16 - ref int16 -} /* lookup.h:10:1 */ - -type sa = struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte -} /* lookup.h:10:1 */ - -type address = struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 -} /* lookup.h:20:1 */ - -type service = struct { - port uint16_t - proto uint8 - socktype uint8 -} /* lookup.h:27:1 */ - -type resolvconf = struct { - ns [3]struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 - } - nns uint32 - attempts uint32 - ndots uint32 - timeout uint32 -} /* lookup.h:34:1 */ - -func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ - if __ccgo_strace { - trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) - } - var cnt size_t - cnt = size_t(1) -__1: - if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) { - goto __3 - } - goto __2 -__2: - cnt++ - p = (*addrinfo)(unsafe.Pointer(p)).ai_next - goto __1 - goto __3 -__3: - ; - var b uintptr = p - uintptr(uint32(uintptr(0))) - b -= 68 * uintptr((*aibuf)(unsafe.Pointer(b)).slot) - //TODO LOCK(b->lock); - if !(int32(AssignSubPtrInt16(b+66, int16(cnt))) != 0) { - Xfree(tls, b) - } - //TODO else UNLOCK(b->lock); -} - -func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ - if __ccgo_strace { - trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) - } - bp := tls.Alloc(1608) - defer tls.Free(1608) - - // var ports [2]service at bp, 8 - - // var addrs [48]address at bp+8, 1344 - - // var canon [256]int8 at bp+1352, 256 - - var outcanon uintptr - var nservs int32 - var naddrs int32 - var nais int32 - var canon_len int32 - var i int32 - var j int32 - var k int32 - var family int32 = 0 - var flags int32 = 0 - var proto int32 = 0 - var socktype int32 = 0 - var out uintptr - - if !(host != 0) && !(serv != 0) { - return -2 - } - - if hint != 0 { - family = (*addrinfo)(unsafe.Pointer(hint)).ai_family - flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags - proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol - socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype - - var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 - if flags&mask != flags { - return -1 - } - - switch family { - case 2: - fallthrough - case 10: - fallthrough - case 0: - break - fallthrough - default: - return -6 - } - } - - if flags&0x20 != 0 { - Xabort(tls) //TODO- - // /* Define the "an address is configured" condition for address - // * families via ability to create a socket for the family plus - // * routability of the loopback address for the family. */ - // static const struct sockaddr_in lo4 = { - // .sin_family = AF_INET, .sin_port = 65535, - // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN - // ? 0x7f000001 : 0x0100007f - // }; - // static const struct sockaddr_in6 lo6 = { - // .sin6_family = AF_INET6, .sin6_port = 65535, - // .sin6_addr = IN6ADDR_LOOPBACK_INIT - // }; - // int tf[2] = { AF_INET, AF_INET6 }; - // const void *ta[2] = { &lo4, &lo6 }; - // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; - // for (i=0; i<2; i++) { - // if (family==tf[1-i]) continue; - // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, - // IPPROTO_UDP); - // if (s>=0) { - // int cs; - // pthread_setcancelstate( - // PTHREAD_CANCEL_DISABLE, &cs); - // int r = connect(s, ta[i], tl[i]); - // pthread_setcancelstate(cs, 0); - // close(s); - // if (!r) continue; - // } - // switch (errno) { - // case EADDRNOTAVAIL: - // case EAFNOSUPPORT: - // case EHOSTUNREACH: - // case ENETDOWN: - // case ENETUNREACH: - // break; - // default: - // return EAI_SYSTEM; - // } - // if (family == tf[i]) return EAI_NONAME; - // family = tf[1-i]; - // } - } - - nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) - if nservs < 0 { - return nservs - } - - naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) - if naddrs < 0 { - return naddrs - } - - nais = nservs * naddrs - canon_len = int32(Xstrlen(tls, bp+1352)) - out = Xcalloc(tls, uint32(1), uint32(nais)*uint32(unsafe.Sizeof(aibuf{}))+uint32(canon_len)+uint32(1)) - if !(out != 0) { - return -10 - } - - if canon_len != 0 { - outcanon = out + uintptr(nais)*68 - Xmemcpy(tls, outcanon, bp+1352, uint32(canon_len+1)) - } else { - outcanon = uintptr(0) - } - - for k = AssignInt32(&i, 0); i < naddrs; i++ { - j = 0 - __1: - if !(j < nservs) { - goto __3 - } - { - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).slot = int16(k) - //TODO out[k].ai = (struct addrinfo){ - //TODO .ai_family = addrs[i].family, - //TODO .ai_socktype = ports[j].socktype, - //TODO .ai_protocol = ports[j].proto, - //TODO .ai_addrlen = addrs[i].family == AF_INET - //TODO ? sizeof(struct sockaddr_in) - //TODO : sizeof(struct sockaddr_in6), - //TODO .ai_addr = (void *)&out[k].sa, - //TODO .ai_canonname = outcanon }; - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_addrlen = func() uint32 { - if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 { - return uint32(unsafe.Sizeof(sockaddr_in{})) - } - return uint32(unsafe.Sizeof(sockaddr_in6{})) - }() - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_addr = out + uintptr(k)*68 + 32 - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_canonname = outcanon - if k != 0 { - (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*68)).ai.ai_next = out + uintptr(k)*68 - } - switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family { - case 2: - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin_family = sa_family_t(2) - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - Xmemcpy(tls, out+uintptr(k)*68+32+4, bp+8+uintptr(i)*28+8, uint32(4)) - break - case 10: - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_family = sa_family_t(10) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid - Xmemcpy(tls, out+uintptr(k)*68+32+8, bp+8+uintptr(i)*28+8, uint32(16)) - break - } - - } - goto __2 - __2: - j++ - k++ - goto __1 - goto __3 - __3: - } - (*aibuf)(unsafe.Pointer(out)).ref = int16(nais) - *(*uintptr)(unsafe.Pointer(res)) = out - return 0 -} - -type ucred = struct { - pid pid_t - uid uid_t - gid gid_t -} /* socket.h:57:1 */ - -type mmsghdr = struct { - msg_hdr struct { - msg_name uintptr - msg_namelen socklen_t - msg_iov uintptr - msg_iovlen int32 - msg_control uintptr - msg_controllen socklen_t - msg_flags int32 - } - msg_len uint32 -} /* socket.h:63:1 */ - -func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var size size_t = size_t(63) - // var res uintptr at bp, 4 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh) - _sh = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1))) - if !(_sh != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyaddr_r(tls, a, l, af, _sh, - _sh+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh -} - -var _sh uintptr /* gethostbyaddr.c:9:24: */ - -func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(28) - defer tls.Free(28) - - //TODO union { - //TODO struct sockaddr_in sin; - //TODO struct sockaddr_in6 sin6; - //TODO } sa = { .sin.sin_family = af }; - *(*struct { - sin sockaddr_in - _ [12]byte - })(unsafe.Pointer(bp)) = struct { - sin sockaddr_in - _ [12]byte - }{} //TODO- - (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO- - var sl socklen_t - if af == 10 { - sl = uint32(unsafe.Sizeof(sockaddr_in6{})) - } else { - sl = uint32(unsafe.Sizeof(sockaddr_in{})) - } - var i int32 - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - - // Load address argument into sockaddr structure - if af == 10 && l == socklen_t(16) { - Xmemcpy(tls, bp+8, a, uint32(16)) - } else if af == 2 && l == socklen_t(4) { - Xmemcpy(tls, bp+4, a, uint32(4)) - } else { - *(*int32)(unsafe.Pointer(err)) = 3 - return 22 - } - - // Align buffer and check for space for pointers and ip address - i = int32(uintptr_t(buf) & (uint32(unsafe.Sizeof(uintptr(0))) - uint32(1))) - if !(i != 0) { - i = int32(unsafe.Sizeof(uintptr(0))) - } - if buflen <= uint32(5)*uint32(unsafe.Sizeof(uintptr(0)))-uint32(i)+l { - return 34 - } - buf += uintptr(uint32(unsafe.Sizeof(uintptr(0))) - uint32(i)) - buflen = buflen - (uint32(5)*uint32(unsafe.Sizeof(uintptr(0))) - uint32(i) + l) - - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint32(2) * uint32(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint32(2) * uint32(unsafe.Sizeof(uintptr(0)))) - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, l) - buf += uintptr(l) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*4)) = uintptr(0) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = uintptr(0) - - switch Xgetnameinfo(tls, bp, sl, buf, buflen, uintptr(0), uint32(0), 0) { - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - case -12: - return 34 - default: - fallthrough - case -10: - fallthrough - case -11: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - case 0: - break - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = int32(l) - (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - return Xgethostbyname2(tls, name, 2) -} - -func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var size size_t = size_t(63) - // var res uintptr at bp, 4 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh1) - _sh1 = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1))) - if !(_sh1 != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyname2_r(tls, name, af, _sh1, - _sh1+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh1 -} - -var _sh1 uintptr /* gethostbyname2.c:10:24: */ - -func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(1600) - defer tls.Free(1600) - - // var addrs [48]address at bp, 1344 - - // var canon [256]int8 at bp+1344, 256 - - var i int32 - var cnt int32 - var align size_t - var need size_t - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) - if cnt < 0 { - switch cnt { - case -2: - *(*int32)(unsafe.Pointer(err)) = 1 - return 2 - fallthrough - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - fallthrough - default: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return 74 - fallthrough - case -10: - fallthrough - case -11: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - } - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = func() int32 { - if af == 10 { - return 16 - } - return 4 - }() - - // Align buffer - align = -uintptr_t(buf) & (uint32(unsafe.Sizeof(uintptr(0))) - uint32(1)) - - need = uint32(4) * uint32(unsafe.Sizeof(uintptr(0))) - need = need + uint32(cnt+1)*(uint32(unsafe.Sizeof(uintptr(0)))+uint32((*hostent)(unsafe.Pointer(h)).h_length)) - need = need + (Xstrlen(tls, name) + size_t(1)) - need = need + (Xstrlen(tls, bp+1344) + size_t(1)) - need = need + align - - if need > buflen { - return 34 - } - - buf += uintptr(align) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint32(3) * uint32(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint32(cnt+1) * uint32(unsafe.Sizeof(uintptr(0)))) - - for i = 0; i < cnt; i++ { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)) = buf - buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length) - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)), bp+uintptr(i)*28+8, uint32((*hostent)(unsafe.Pointer(h)).h_length)) - } - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)) = uintptr(0) - - (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf) - Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344) - buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + size_t(1)) - - if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = buf - Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)), name) - buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4))) + size_t(1)) - } else { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = uintptr(0) - } - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*4)) = uintptr(0) - - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */ - if __ccgo_strace { - trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) - } - return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err) -} - -type if_nameindex = struct { - if_index uint32 - if_name uintptr -} /* if.h:12:1 */ - -type ifaddr = struct { - ifa_addr struct { - sa_family sa_family_t - sa_data [14]int8 - } - ifa_ifu struct { - ifu_broadaddr struct { - sa_family sa_family_t - sa_data [14]int8 - } - } - ifa_ifp uintptr - ifa_next uintptr -} /* if.h:51:1 */ - -type ifmap = struct { - mem_start uint32 - mem_end uint32 - base_addr uint16 - irq uint8 - dma uint8 - port uint8 - _ [3]byte -} /* if.h:64:1 */ - -type ifreq = struct { - ifr_ifrn struct{ ifrn_name [16]int8 } - ifr_ifru struct { - _ [0]uint32 - ifru_addr struct { - sa_family sa_family_t - sa_data [14]int8 - } - } -} /* if.h:76:1 */ - -type ifconf = struct { - ifc_len int32 - ifc_ifcu struct{ ifcu_buf uintptr } -} /* if.h:116:1 */ - -type ns_sect = uint32 /* nameser.h:37:3 */ - -type __ns_msg = struct { - _msg uintptr - _eom uintptr - _id uint16_t - _flags uint16_t - _counts [4]uint16_t - _sections [4]uintptr - _sect ns_sect - _rrnum int32 - _msg_ptr uintptr -} /* nameser.h:39:9 */ - -type ns_msg = __ns_msg /* nameser.h:46:3 */ - -type _ns_flagdata = struct { - mask int32 - shift int32 -} /* nameser.h:48:1 */ - -type __ns_rr = struct { - name [1025]int8 - _ [1]byte - __type uint16_t - rr_class uint16_t - _ [2]byte - ttl uint32_t - rdlength uint16_t - _ [2]byte - rdata uintptr -} /* nameser.h:59:9 */ - -type ns_rr = __ns_rr /* nameser.h:66:3 */ - -type ns_flag = uint32 /* nameser.h:87:3 */ - -type ns_opcode = uint32 /* nameser.h:96:3 */ - -type ns_rcode = uint32 /* nameser.h:115:3 */ - -type ns_update_operation = uint32 /* nameser.h:121:3 */ - -type ns_tsig_key1 = struct { - name [1025]int8 - alg [1025]int8 - _ [2]byte - data uintptr - len int32 -} /* nameser.h:123:1 */ - -type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ - -type ns_tcp_tsig_state1 = struct { - counter int32 - key uintptr - ctx uintptr - sig [512]uint8 - siglen int32 -} /* nameser.h:130:1 */ - -type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ - -type ns_type = uint32 /* nameser.h:200:3 */ - -type ns_class = uint32 /* nameser.h:219:3 */ - -type ns_key_types = uint32 /* nameser.h:226:3 */ - -type ns_cert_types = uint32 /* nameser.h:234:3 */ - -type HEADER = struct { - _ [0]uint32 - id uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */ - qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ - nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ -} /* nameser.h:353:3 */ - -// unused; purely for broken apps -type __res_state = struct { - retrans int32 - retry int32 - options uint32 - nscount int32 - nsaddr_list [3]struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - id uint16 - _ [2]byte - dnsrch [7]uintptr - defdname [256]int8 - pfcode uint32 - ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ - _ [4]byte - sort_list [10]struct { - addr struct{ s_addr in_addr_t } - mask uint32_t - } - qhook uintptr - rhook uintptr - res_h_errno int32 - _vcsock int32 - _flags uint32 - _u struct { - _ [0]uint32 - pad [52]int8 - } -} /* resolv.h:26:9 */ - -// unused; purely for broken apps -type res_state = uintptr /* resolv.h:62:3 */ - -type res_sym = struct { - number int32 - name uintptr - humanname uintptr -} /* resolv.h:70:1 */ - -func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ - p += uintptr(uint32(3) * uint32(unsafe.Sizeof(int32(0)))) - *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(0) - for ok := true; ok; ok = x != 0 { - *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(uint32('0') + x%uint32(10)) - x = x / uint32(10) - } - return p -} - -func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ - bp := tls.Alloc(32) - defer tls.Free(32) - - Xsprintf(tls, s, ts+25, - VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) -} - -func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ - var i int32 - for i = 15; i >= 0; i-- { - *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] - *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.') - *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] - *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.') - } - Xstrcpy(tls, s, ts+50) -} - -var _sxdigits = *(*[17]int8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ - -func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ - bp := tls.Alloc(556) - defer tls.Free(556) - - // var line [512]int8 at bp+16, 512 - - var p uintptr - var z uintptr - var _buf [1032]uint8 - _ = _buf - // var atmp [16]uint8 at bp, 16 - - // var iplit address at bp+528, 28 - - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - return - } - if family == 2 { - Xmemcpy(tls, bp+uintptr(12), a, uint32(4)) - Xmemcpy(tls, bp, ts+90, uint32(12)) - a = bp /* &atmp[0] */ - } - for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]int8{})), f) != 0 { - if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { - *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n') - *(*int8)(unsafe.Pointer(p)) = int8(0) - } - - for p = bp + 16; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0) - if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { - continue - } - - if (*address)(unsafe.Pointer(bp+528)).family == 2 { - Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint32(4)) - Xmemcpy(tls, bp+528+8, ts+90, uint32(12)) - (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0) - } - - if Xmemcmp(tls, a, bp+528+8, uint32(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid { - continue - } - - for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*int8)(unsafe.Pointer(z)) = int8(0) - if (int32(z)-int32(p))/1 < 256 { - Xmemcpy(tls, buf, p, uint32((int32(z)-int32(p))/1+1)) - break - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) -} - -func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ - Xabort(tls) //TODO- - // unsigned long svport; - // char line[128], *p, *z; - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) return; - // while (fgets(line, sizeof line, f)) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // for (p=line; *p && !isspace(*p); p++); - // if (!*p) continue; - // *p++ = 0; - // svport = strtoul(p, &z, 10); - - // if (svport != port || z==p) continue; - // if (dgram && strncmp(z, "/udp", 4)) continue; - // if (!dgram && strncmp(z, "/tcp", 4)) continue; - // if (p-line > 32) continue; - - // memcpy(buf, line, p-line); - // break; - // } - // __fclose_ca(f); -} - -func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */ - if __ccgo_strace { - trc("tls=%v sa1=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa1, sl, node, nodelen, serv, servlen, flags, origin(2)) - } - bp := tls.Alloc(347) - defer tls.Free(347) - - // var ptr [78]int8 at bp, 78 - - // var buf [256]int8 at bp+78, 256 - - // var num [13]int8 at bp+334, 13 - - var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family) - var a uintptr - var scopeid uint32 - - switch af { - case 2: - a = sa1 + 4 - if sl < socklen_t(unsafe.Sizeof(sockaddr_in{})) { - return -6 - } - mkptr4(tls, bp, a) - scopeid = uint32(0) - break - case 10: - a = sa1 + 8 - if sl < socklen_t(unsafe.Sizeof(sockaddr_in6{})) { - return -6 - } - if Xmemcmp(tls, a, ts+90, uint32(12)) != 0 { - mkptr6(tls, bp, a) - } else { - mkptr4(tls, bp, a+uintptr(12)) - } - scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id - break - default: - return -6 - } - - if node != 0 && nodelen != 0 { - *(*int8)(unsafe.Pointer(bp + 78)) = int8(0) - if !(flags&0x01 != 0) { - reverse_hosts(tls, bp+78, a, scopeid, af) - } - if !(int32(*(*int8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) { - Xabort(tls) //TODO- - // unsigned char query[18+PTR_MAX], reply[512]; - // int qlen = __res_mkquery(0, ptr, 1, RR_PTR, - // 0, 0, 0, query, sizeof query); - // query[3] = 0; /* don't need AD flag */ - // int rlen = __res_send(query, qlen, reply, sizeof reply); - // buf[0] = 0; - // if (rlen > 0) - // __dns_parse(reply, rlen, dns_parse_callback, buf); - } - if !(int32(*(*int8)(unsafe.Pointer(bp + 78))) != 0) { - if flags&0x08 != 0 { - return -2 - } - Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]int8{}))) - if scopeid != 0 { - Xabort(tls) //TODO- - // char *p = 0, tmp[IF_NAMESIZE+1]; - // if (!(flags & NI_NUMERICSCOPE) && - // (IN6_IS_ADDR_LINKLOCAL(a) || - // IN6_IS_ADDR_MC_LINKLOCAL(a))) - // p = if_indextoname(scopeid, tmp+1); - // if (!p) - // p = itoa(num, scopeid); - // *--p = '%'; - // strcat(buf, p); - } - } - if Xstrlen(tls, bp+78) >= nodelen { - return -12 - } - Xstrcpy(tls, node, bp+78) - } - - if serv != 0 && servlen != 0 { - var p uintptr = bp + 78 /* buf */ - var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port)) - *(*int8)(unsafe.Pointer(bp + 78)) = int8(0) - if !(flags&0x02 != 0) { - reverse_services(tls, bp+78, port, flags&0x10) - } - if !(int32(*(*int8)(unsafe.Pointer(p))) != 0) { - p = itoa(tls, bp+334, uint32(port)) - } - if Xstrlen(tls, p) >= servlen { - return -12 - } - Xstrcpy(tls, serv, p) - } - - return 0 -} - -var Xh_errno int32 /* h_errno.c:4:5: */ - -func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&Xh_errno)) -} - -func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ - if __ccgo_strace { - trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) - } - bp := tls.Alloc(20) - defer tls.Free(20) - - var s uintptr = s0 - var d uintptr = dest - *(*[4]uint32)(unsafe.Pointer(bp /* a */)) = [4]uint32{0: uint32(0)} - // var z uintptr at bp+16, 4 - - var i int32 - - for i = 0; i < 4; i++ { - *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) = Xstrtoul(tls, s, bp+16, 0) - if *(*uintptr)(unsafe.Pointer(bp + 16)) == s || *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != '.' || !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s)))) - } - return Bool32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) - }() != 0) { - return 0 - } - if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != 0) { - break - } - s = *(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(1) - } - if i == 4 { - return 0 - } - switch i { - case 0: - *(*uint32)(unsafe.Pointer(bp + 1*4)) = *(*uint32)(unsafe.Pointer(bp)) & uint32(0xffffff) - AssignShrPtrUint32(bp, int(24)) - fallthrough - case 1: - *(*uint32)(unsafe.Pointer(bp + 2*4)) = *(*uint32)(unsafe.Pointer(bp + 1*4)) & uint32(0xffff) - AssignShrPtrUint32(bp+1*4, int(16)) - fallthrough - case 2: - *(*uint32)(unsafe.Pointer(bp + 3*4)) = *(*uint32)(unsafe.Pointer(bp + 2*4)) & uint32(0xff) - AssignShrPtrUint32(bp+2*4, int(8)) - } - for i = 0; i < 4; i++ { - if *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) > uint32(255) { - return 0 - } - *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint32)(unsafe.Pointer(bp + uintptr(i)*4))) - } - return 1 -} - -func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ - if __ccgo_strace { - trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var a uintptr = a0 - var i int32 - var j int32 - var max int32 - var best int32 - // var buf [100]int8 at bp+176, 100 - - switch af { - case 2: - if socklen_t(Xsnprintf(tls, s, l, ts+103, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { - return s - } - break - case 10: - if Xmemcmp(tls, a, ts+90, uint32(12)) != 0 { - Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]int8{})), - ts+115, - VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } else { - Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]int8{})), - ts+139, - VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } - // Replace longest /(^0|:)[:0]{2,}/ with "::" - i = AssignInt32(&best, 0) - max = 2 - for ; *(*int8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { - if i != 0 && int32(*(*int8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { - continue - } - j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169)) - if j > max { - best = i - max = j - } - } - if max > 3 { - *(*int8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrInt8(bp+176+uintptr(best+1), int8(':')) - Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint32(i-best-max+1)) - } - if Xstrlen(tls, bp+176) < l { - Xstrcpy(tls, s, bp+176) - return s - } - break - default: - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return uintptr(0) - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 - return uintptr(0) -} - -func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ - if c-uint32('0') < uint32(10) { - return int32(c - uint32('0')) - } - c = c | uint32(32) - if c-uint32('a') < uint32(6) { - return int32(c - uint32('a') + uint32(10)) - } - return -1 -} - -func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ - if __ccgo_strace { - trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) - } - bp := tls.Alloc(16) - defer tls.Free(16) - - // var ip [8]uint16_t at bp, 16 - - var a uintptr = a0 - var i int32 - var j int32 - var v int32 - var d int32 - var brk int32 = -1 - var need_v4 int32 = 0 - - if af == 2 { - for i = 0; i < 4; i++ { - for v = AssignInt32(&j, 0); j < 3 && func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s + uintptr(j))))) - } - return Bool32(uint32(*(*int8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) - }() != 0; j++ { - v = 10*v + int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) - '0' - } - if j == 0 || j > 1 && int32(*(*int8)(unsafe.Pointer(s))) == '0' || v > 255 { - return 0 - } - *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) - if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { - return 1 - } - if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' { - return 0 - } - s += uintptr(j + 1) - } - return 0 - } else if af != 10 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return -1 - } - - if int32(*(*int8)(unsafe.Pointer(s))) == ':' && int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { - return 0 - } - - for i = 0; ; i++ { - if int32(*(*int8)(unsafe.Pointer(s))) == ':' && brk < 0 { - brk = i - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) - if !(int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { - break - } - if i == 7 { - return 0 - } - continue - } - for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*int8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { - v = 16*v + d - } - if j == 0 { - return 0 - } - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) - if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { - break - } - if i == 7 { - return 0 - } - if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != ':' { - if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { - return 0 - } - need_v4 = 1 - i++ - break - } - s += uintptr(j + 1) - } - if brk >= 0 { - Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint32(2*(i+1-brk))) - for j = 0; j < 7-i; j++ { - *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) - } - } - for j = 0; j < 8; j++ { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) - } - if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { - return 0 - } - return 1 -} - -func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) - } - bp := tls.Alloc(88) - defer tls.Free(88) - - // var a4 in_addr at bp, 4 - - // var a6 in6_addr at bp+68, 16 - - if X__inet_aton(tls, name, bp) > 0 { - if family == 10 { // wrong family - return -2 - } - Xmemcpy(tls, buf+8, bp, uint32(unsafe.Sizeof(in_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 2 - (*address)(unsafe.Pointer(buf)).scopeid = uint32(0) - return 1 - } - // var tmp [64]int8 at bp+4, 64 - - var p uintptr = Xstrchr(tls, name, '%') - // var z uintptr at bp+84, 4 - - var scopeid uint64 = uint64(0) - if p != 0 && (int32(p)-int32(name))/1 < 64 { - Xmemcpy(tls, bp+4, name, uint32((int32(p)-int32(name))/1)) - *(*int8)(unsafe.Pointer(bp + 4 + uintptr((int32(p)-int32(name))/1))) = int8(0) - name = bp + 4 /* &tmp[0] */ - } - - if Xinet_pton(tls, 10, name, bp+68) <= 0 { - return 0 - } - if family == 2 { // wrong family - return -2 - } - - Xmemcpy(tls, buf+8, bp+68, uint32(unsafe.Sizeof(in6_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 10 - if p != 0 { - if func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) - } - return Bool32(uint32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) - }() != 0 { - scopeid = Xstrtoull(tls, p, bp+84, 10) - } else { - *(*uintptr)(unsafe.Pointer(bp + 84 /* z */)) = p - uintptr(1) - } - if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)))) != 0 { - Xabort(tls) //TODO- - // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && - // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) - // return EAI_NONAME; - // scopeid = if_nametoindex(p); - // if (!scopeid) return EAI_NONAME; - } - if scopeid > uint64(0xffffffff) { - return -2 - } - } - (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid) - return 1 -} - -func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ - var s uintptr - //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; - if Xstrnlen(tls, host, uint32(255))-size_t(1) >= size_t(254) { - return 0 - } - for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ { - } - return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) -} - -var Xzero_struct_address address /* lookup_name.c:27:16: */ - -func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ - var cnt int32 = 0 - if name != 0 { - return 0 - } - if flags&0x01 != 0 { - //TODO if (family != AF_INET6) - //TODO buf[cnt++] = (struct address){ .family = AF_INET }; - if family != 10 { - var x = Xzero_struct_address - x.family = 2 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - //TODO if (family != AF_INET) - //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; - if family != 2 { - var x = Xzero_struct_address - x.family = 10 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - } else { - Xabort(tls) //TODO- - // if (family != AF_INET6) - // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; - // if (family != AF_INET) - // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; - } - return cnt -} - -func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ - return X__lookup_ipliteral(tls, buf, name, family) -} - -func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var line [512]int8 at bp, 512 - - var l size_t = Xstrlen(tls, name) - var cnt int32 = 0 - var badfam int32 = 0 - var _buf [1032]uint8 - _ = _buf - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var _f FILE - _ = _f - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { - case 2: - fallthrough - case 20: - fallthrough - case 13: - return 0 - fallthrough - default: - return -11 - } - } - for Xfgets(tls, bp, int32(unsafe.Sizeof([512]int8{})), f) != 0 && cnt < 48 { - var p uintptr - var z uintptr - - if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { - *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n') - *(*int8)(unsafe.Pointer(p)) = int8(0) - } - for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ { - } - if !(p != 0) { - continue - } - - // Isolate IP address to parse - for p = bp; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0) - switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { - case 1: - cnt++ - break - case 0: - continue - default: - badfam = -2 - continue - } - - // Extract first name as canonical name - for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*int8)(unsafe.Pointer(z)) = int8(0) - if is_valid_hostname(tls, p) != 0 { - Xmemcpy(tls, canon, p, uint32((int32(z)-int32(p))/1+1)) - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) - if cnt != 0 { - return cnt - } - return badfam -} - -type dpc_ctx = struct { - addrs uintptr - canon uintptr - cnt int32 -} /* lookup_name.c:112:1 */ - -func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ - return -1 //TODO- - Xabort(tls) - return int32(0) //TODO- - // char search[256]; - // struct resolvconf conf; - // size_t l, dots; - // char *p, *z; - - // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; - - // /* Count dots, suppress search when >=ndots or name ends in - // * a dot, which is an explicit request for global scope. */ - // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; - // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; - - // /* Strip final dot for canon, fail if multiple trailing dots. */ - // if (name[l-1]=='.') l--; - // if (!l || name[l-1]=='.') return EAI_NONAME; - - // /* This can never happen; the caller already checked length. */ - // if (l >= 256) return EAI_NONAME; - - // /* Name with search domain appended is setup in canon[]. This both - // * provides the desired default canonical name (if the requested - // * name is not a CNAME record) and serves as a buffer for passing - // * the full requested name to name_from_dns. */ - // memcpy(canon, name, l); - // canon[l] = '.'; - - // for (p=search; *p; p=z) { - // for (; isspace(*p); p++); - // for (z=p; *z && !isspace(*z); z++); - // if (z==p) break; - // if (z-p < 256 - l - 1) { - // memcpy(canon+l+1, p, z-p); - // canon[z-p+1+l] = 0; - // int cnt = name_from_dns(buf, canon, canon, family, &conf); - // if (cnt) return cnt; - // } - // } - - // canon[l] = 0; - // return name_from_dns(buf, canon, name, family, &conf); -} - -type policy = struct { - addr [16]uint8 - len uint8 - mask uint8 - prec uint8 - label uint8 -} /* lookup_name.c:237:14 */ - -var defpolicy = [6]policy{ - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)}, - // Last rule must match all addresses to stop loop. - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)}, -} /* lookup_name.c:241:3 */ - -func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ - var i int32 - for i = 0; ; i++ { - if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint32(defpolicy[i].len)) != 0 { - continue - } - if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) != - int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) { - continue - } - return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 - } - return uintptr(0) -} - -func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ - return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label) -} - -func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { - return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { - return 2 - } - if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 { - return 2 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { - return 5 - } - return 14 -} - -func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ - // FIXME: The common prefix length should be limited to no greater - // than the nominal length of the prefix portion of the source - // address. However the definition of the source prefix length is - // not clear and thus this limiting is not yet implemented. - var i uint32 - for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ { - } - return int32(i) -} - -func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ - var a uintptr = _a - var b uintptr = _b - return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey -} - -func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) - } - bp := tls.Alloc(92) - defer tls.Free(92) - - var cnt int32 = 0 - var i int32 - var j int32 - _ = j - - *(*int8)(unsafe.Pointer(canon)) = int8(0) - if name != 0 { - // reject empty name and check len so it fits into temp bufs - var l size_t = Xstrnlen(tls, name, uint32(255)) - if l-size_t(1) >= size_t(254) { - return -2 - } - Xmemcpy(tls, canon, name, l+size_t(1)) - } - - // Procedurally, a request for v6 addresses with the v4-mapped - // flag set is like a request for unspecified family, followed - // by filtering of the results. - if flags&0x08 != 0 { - if family == 10 { - family = 0 - } else { - flags = flags - 0x08 - } - } - - // Try each backend until there's at least one result. - cnt = name_from_null(tls, buf, name, family, flags) - if !(cnt != 0) { - cnt = name_from_numeric(tls, buf, name, family) - } - if !(cnt != 0) && !(flags&0x04 != 0) { - cnt = name_from_hosts(tls, buf, canon, name, family) - if !(cnt != 0) { - cnt = name_from_dns_search(tls, buf, canon, name, family) - } - } - if cnt <= 0 { - if cnt != 0 { - return cnt - } - return -2 - } - - // Filter/transform results for v4-mapped lookup, if requested. - if flags&0x08 != 0 { - Xabort(tls) //TODO- - // if (!(flags & AI_ALL)) { - // /* If any v6 results exist, remove v4 results. */ - // for (i=0; i= 0 { - if !(Xconnect(tls, fd, da, dalen) != 0) { - key = key | 0x40000000 - if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { - if family == 2 { - Xmemcpy(tls, - bp+28+8+uintptr(12), - bp+72+4, uint32(4)) - } - if dscope == scopeof(tls, bp+28+8) { - key = key | 0x20000000 - } - if dlabel == labelof(tls, bp+28+8) { - key = key | 0x10000000 - } - prefixlen = prefixmatch(tls, bp+28+8, - bp+8) - } - } - Xclose(tls, fd) - } - key = key | dprec<<20 - key = key | (15-dscope)<<16 - key = key | prefixlen<<8 - key = key | (48-i)<<0 - (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key - } - Xqsort(tls, buf, uint32(cnt), uint32(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr) int32 - }{addrcmp}))) - - //TODO pthread_setcancelstate(cs, 0); - - return cnt -} - -func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var line [128]int8 - _ = line - var cnt int32 = 0 - var p uintptr - _ = p - *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ - var port uint32 = uint32(0) - - switch socktype { - case 1: - switch proto { - case 0: - proto = 6 - fallthrough - case 6: - break - default: - return -8 - } - break - case 2: - switch proto { - case 0: - proto = 17 - fallthrough - case 17: - break - default: - return -8 - } - fallthrough - case 0: - break - default: - if name != 0 { - return -8 - } - (*service)(unsafe.Pointer(buf)).port = uint16_t(0) - (*service)(unsafe.Pointer(buf)).proto = uint8(proto) - (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype) - return 1 - } - - if name != 0 { - if !(int32(*(*int8)(unsafe.Pointer(name))) != 0) { - return -8 - } - port = Xstrtoul(tls, name, bp, 10) - } - if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { - if port > uint32(65535) { - return -8 - } - if proto != 17 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6) - } - if proto != 6 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17) - } - return cnt - } - - if flags&0x400 != 0 { - return -2 - } - - var l size_t = Xstrlen(tls, name) - _ = l - - Xabort(tls) //TODO- - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) switch (errno) { - // case ENOENT: - // case ENOTDIR: - // case EACCES: - // return EAI_SERVICE; - // default: - // return EAI_SYSTEM; - // } - - Xabort(tls) //TODO- - // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // /* Find service name */ - // for(p=line; (p=strstr(p, name)); p++) { - // if (p>line && !isspace(p[-1])) continue; - // if (p[l] && !isspace(p[l])) continue; - // break; - // } - // if (!p) continue; - - // /* Skip past canonical name at beginning of line */ - // for (p=line; *p && !isspace(*p); p++); - - // port = strtoul(p, &z, 10); - // if (port > 65535 || z==p) continue; - // if (!strncmp(z, "/udp", 4)) { - // if (proto == IPPROTO_TCP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_DGRAM; - // buf[cnt++].proto = IPPROTO_UDP; - // } - // if (!strncmp(z, "/tcp", 4)) { - // if (proto == IPPROTO_UDP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_STREAM; - // buf[cnt++].proto = IPPROTO_TCP; - // } - // } - // __fclose_ca(f); - // return cnt > 0 ? cnt : EAI_SERVICE; - Xabort(tls) - return int32(0) //TODO- -} - -func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */ - x = x ^ x>>11 - x = x ^ x<<7&0x9D2C5680 - x = x ^ x<<15&0xEFC60000 - x = x ^ x>>18 - return x -} - -func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */ - if __ccgo_strace { - trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) - } - return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2)) -} - -func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var owner int32 = (*FILE)(unsafe.Pointer(f)).lock - var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid - if owner&CplInt32(0x40000000) == tid { - return 0 - } - owner = a_cas(tls, f+76, 0, tid) - if !(owner != 0) { - return 1 - } - for AssignInt32(&owner, a_cas(tls, f+76, 0, tid|0x40000000)) != 0 { - if owner&0x40000000 != 0 || a_cas(tls, f+76, owner, owner|0x40000000) == owner { - __futexwait(tls, f+76, owner|0x40000000, 1) - } - } - return 1 -} - -func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - if a_swap(tls, f+76, 0)&0x40000000 != 0 { - __wake(tls, f+76, 1, 1) - } -} - -func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - *(*int32)(unsafe.Pointer(f + 72)) |= (*FILE)(unsafe.Pointer(f)).mode - 1 - if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase { - (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint32(0)) - } - (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+28, AssignPtrUintptr(f+16, uintptr(0))) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 { - *(*uint32)(unsafe.Pointer(f)) |= uint32(32) - return -1 - } - (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+8, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size)) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 { - return -1 - } - return 0 -} - -func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - X__builtin_abort(tls) //TODO- - // __stdio_exit_needed(); -} - -// This function assumes it will never be called if there is already -// data buffered for reading. - -func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - bp := tls.Alloc(1) - defer tls.Free(1) - - // var c uint8 at bp, 1 - - if !(X__toread(tls, f) != 0) && (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint32(1)) == size_t(1) { - return int32(*(*uint8)(unsafe.Pointer(bp))) - } - return -1 -} - -func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) - } - var ret int32 - var ap va_list - _ = ap - ap = va - ret = Xvsscanf(tls, s, fmt, ap) - _ = ap - return ret -} - -type wctrans_t = uintptr /* wctype.h:20:19 */ - -func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */ - if !(dest != 0) { - return - } - switch size { - case -2: - *(*int8)(unsafe.Pointer(dest)) = int8(i) - break - case -1: - *(*int16)(unsafe.Pointer(dest)) = int16(i) - break - case 0: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 1: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 3: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - } -} - -func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */ - var p uintptr - var i uint32 - var ap2 va_list - _ = ap2 - ap2 = ap - for i = n; i > uint32(1); i-- { - VaUintptr(&ap2) - } - p = VaUintptr(&ap2) - _ = ap2 - return p -} - -func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */ - if __ccgo_strace { - trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var width int32 - var size int32 - var alloc int32 - var base int32 - var p uintptr - var c int32 - var t int32 - var s uintptr - var wcs uintptr - // var st mbstate_t at bp+268, 8 - - var dest uintptr - var invert int32 - var matches int32 - var x uint64 - var y float64 - var pos off_t - // var scanset [257]uint8 at bp, 257 - - var i size_t - var k size_t - // var wc wchar_t at bp+260, 4 - - var __need_unlock int32 - var tmp uintptr - var tmp1 uintptr - alloc = 0 - dest = uintptr(0) - matches = 0 - pos = int64(0) - __need_unlock = func() int32 { - if (*FILE)(unsafe.Pointer(f)).lock >= 0 { - return X__lockfile(tls, f) - } - return 0 - }() - - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __1 - } - X__toread(tls, f) -__1: - ; - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __2 - } - goto input_fail -__2: - ; - - p = fmt -__3: - if !(*(*uint8)(unsafe.Pointer(p)) != 0) { - goto __5 - } - - alloc = 0 - - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) { - goto __6 - } -__7: - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) { - goto __8 - } - p++ - goto __7 -__8: - ; - X__shlim(tls, f, int64(0)) -__9: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __10 - } - goto __9 -__10: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - goto __4 -__6: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') { - goto __11 - } - X__shlim(tls, f, int64(0)) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') { - goto __12 - } - p++ -__14: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __15 - } - goto __14 -__15: - ; - goto __13 -__12: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__13: - ; - if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __16 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(c < 0) { - goto __17 - } - goto input_fail -__17: - ; - goto match_fail -__16: - ; - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - goto __4 -__11: - ; - - p++ - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') { - goto __18 - } - dest = uintptr(0) - p++ - goto __19 -__18: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') { - goto __20 - } - dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0')) - p += uintptr(2) - goto __21 -__20: - dest = VaUintptr(&ap) -__21: - ; -__19: - ; - - width = 0 -__22: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0) { - goto __24 - } - width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0' - goto __23 -__23: - p++ - goto __22 - goto __24 -__24: - ; - - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') { - goto __25 - } - wcs = uintptr(0) - s = uintptr(0) - alloc = BoolInt32(!!(dest != 0)) - p++ - goto __26 -__25: - alloc = 0 -__26: - ; - - size = 0 - switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) { - case 'h': - goto __28 - case 'l': - goto __29 - case 'j': - goto __30 - case 'z': - goto __31 - case 't': - goto __32 - case 'L': - goto __33 - case 'd': - goto __34 - case 'i': - goto __35 - case 'o': - goto __36 - case 'u': - goto __37 - case 'x': - goto __38 - case 'a': - goto __39 - case 'e': - goto __40 - case 'f': - goto __41 - case 'g': - goto __42 - case 'A': - goto __43 - case 'E': - goto __44 - case 'F': - goto __45 - case 'G': - goto __46 - case 'X': - goto __47 - case 's': - goto __48 - case 'c': - goto __49 - case '[': - goto __50 - case 'S': - goto __51 - case 'C': - goto __52 - case 'p': - goto __53 - case 'n': - goto __54 - default: - goto __55 - } - goto __27 -__28: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') { - goto __56 - } - p++ - size = -2 - goto __57 -__56: - size = -1 -__57: - ; - goto __27 -__29: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') { - goto __58 - } - p++ - size = 3 - goto __59 -__58: - size = 1 -__59: - ; - goto __27 -__30: - size = 3 - goto __27 -__31: -__32: - size = 1 - goto __27 -__33: - size = 2 - goto __27 -__34: -__35: -__36: -__37: -__38: -__39: -__40: -__41: -__42: -__43: -__44: -__45: -__46: -__47: -__48: -__49: -__50: -__51: -__52: -__53: -__54: - p-- - goto __27 -__55: - goto fmt_fail -__27: - ; - - t = int32(*(*uint8)(unsafe.Pointer(p))) - - // C or S - if !(t&0x2f == 3) { - goto __60 - } - t = t | 32 - size = 1 -__60: - ; - - switch t { - case 'c': - goto __62 - case '[': - goto __63 - case 'n': - goto __64 - default: - goto __65 - } - goto __61 -__62: - if !(width < 1) { - goto __66 - } - width = 1 -__66: - ; -__63: - goto __61 -__64: - store_int(tls, dest, size, uint64(pos)) - // do not increment match count, etc! - goto __4 -__65: - X__shlim(tls, f, int64(0)) -__67: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __68 - } - goto __67 -__68: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) -__61: - ; - - X__shlim(tls, f, int64(width)) - if !(func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() < 0) { - goto __69 - } - goto input_fail -__69: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - - switch t { - case 's': - goto __71 - case 'c': - goto __72 - case '[': - goto __73 - case 'p': - goto __74 - case 'X': - goto __75 - case 'x': - goto __76 - case 'o': - goto __77 - case 'd': - goto __78 - case 'u': - goto __79 - case 'i': - goto __80 - case 'a': - goto __81 - case 'A': - goto __82 - case 'e': - goto __83 - case 'E': - goto __84 - case 'f': - goto __85 - case 'F': - goto __86 - case 'g': - goto __87 - case 'G': - goto __88 - } - goto __70 -__71: -__72: -__73: - if !(t == 'c' || t == 's') { - goto __89 - } - Xmemset(tls, bp, -1, uint32(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(t == 's') { - goto __91 - } - *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0) -__91: - ; - goto __90 -__89: - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') { - goto __92 - } - p++ - invert = 1 - goto __93 -__92: - invert = 0 -__93: - ; - Xmemset(tls, bp, invert, uint32(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') { - goto __94 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert) - goto __95 -__94: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') { - goto __96 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert) -__96: - ; -__95: - ; -__97: - if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') { - goto __99 - } - if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - goto __100 - } - goto fmt_fail -__100: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') { - goto __101 - } - c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1)))) -__102: - if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __104 - } - *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert) - goto __103 -__103: - c++ - goto __102 - goto __104 -__104: - ; -__101: - ; - *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert) - goto __98 -__98: - p++ - goto __97 - goto __99 -__99: - ; -__90: - ; - wcs = uintptr(0) - s = uintptr(0) - i = size_t(0) - if t == 'c' { - k = uint32(width) + 1 - } else { - k = uint32(31) - } - if !(size == 1) { - goto __105 - } - if !(alloc != 0) { - goto __107 - } - wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(wcs != 0) { - goto __109 - } - goto alloc_fail -__109: - ; - goto __108 -__107: - wcs = dest -__108: - ; - *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{} -__110: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __111 - } - switch Xmbrtowc(tls, bp+260, func() uintptr { *(*int8)(unsafe.Pointer(bp + 264)) = int8(c); return bp + 264 }(), uint32(1), bp+268 /* &st */) { - case Uint32FromInt32(-1): - goto __113 - case Uint32FromInt32(-2): - goto __114 - } - goto __112 -__113: - goto input_fail -__114: - goto __110 -__112: - ; - if !(wcs != 0) { - goto __115 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint32(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */)) -__115: - ; - if !(alloc != 0 && i == k) { - goto __116 - } - k = k + (k + size_t(1)) - tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(tmp != 0) { - goto __117 - } - goto alloc_fail -__117: - ; - wcs = tmp -__116: - ; - goto __110 -__111: - ; - if !!(Xmbsinit(tls, bp+268) != 0) { - goto __118 - } - goto input_fail -__118: - ; - goto __106 -__105: - if !(alloc != 0) { - goto __119 - } - s = Xmalloc(tls, k) - if !!(s != 0) { - goto __121 - } - goto alloc_fail -__121: - ; -__122: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __123 - } - *(*int8)(unsafe.Pointer(s + uintptr(PostIncUint32(&i, 1)))) = int8(c) - if !(i == k) { - goto __124 - } - k = k + (k + size_t(1)) - tmp1 = Xrealloc(tls, s, k) - if !!(tmp1 != 0) { - goto __125 - } - goto alloc_fail -__125: - ; - s = tmp1 -__124: - ; - goto __122 -__123: - ; - goto __120 -__119: - if !(AssignUintptr(&s, dest) != 0) { - goto __126 - } -__128: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __129 - } - *(*int8)(unsafe.Pointer(s + uintptr(PostIncUint32(&i, 1)))) = int8(c) - goto __128 -__129: - ; - goto __127 -__126: -__130: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __131 - } - goto __130 -__131: - ; -__127: - ; -__120: - ; -__106: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __132 - } - goto match_fail -__132: - ; - if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != off_t(width)) { - goto __133 - } - goto match_fail -__133: - ; - if !(alloc != 0) { - goto __134 - } - if !(size == 1) { - goto __135 - } - *(*uintptr)(unsafe.Pointer(dest)) = wcs - goto __136 -__135: - *(*uintptr)(unsafe.Pointer(dest)) = s -__136: - ; -__134: - ; - if !(t != 'c') { - goto __137 - } - if !(wcs != 0) { - goto __138 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 -__138: - ; - if !(s != 0) { - goto __139 - } - *(*int8)(unsafe.Pointer(s + uintptr(i))) = int8(0) -__139: - ; -__137: - ; - goto __70 -__74: -__75: -__76: - base = 16 - goto int_common -__77: - base = 8 - goto int_common -__78: -__79: - base = 10 - goto int_common -__80: - base = 0 -int_common: - x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1)) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __140 - } - goto match_fail -__140: - ; - if !(t == 'p' && dest != 0) { - goto __141 - } - *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x)) - goto __142 -__141: - store_int(tls, dest, size, x) -__142: - ; - goto __70 -__81: -__82: -__83: -__84: -__85: -__86: -__87: -__88: - y = X__floatscan(tls, f, size, 0) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __143 - } - goto match_fail -__143: - ; - if !(dest != 0) { - goto __144 - } - switch size { - case 0: - goto __146 - case 1: - goto __147 - case 2: - goto __148 - } - goto __145 -__146: - *(*float32)(unsafe.Pointer(dest)) = float32(y) - goto __145 -__147: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__148: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__145: - ; -__144: - ; - goto __70 -__70: - ; - - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - if !(dest != 0) { - goto __149 - } - matches++ -__149: - ; - goto __4 -__4: - p++ - goto __3 - goto __5 -__5: - ; - if !(0 != 0) { - goto __150 - } -fmt_fail: -alloc_fail: -input_fail: - if !!(matches != 0) { - goto __151 - } - matches-- -__151: - ; -match_fail: - if !(alloc != 0) { - goto __152 - } - Xfree(tls, s) - Xfree(tls, wcs) -__152: - ; -__150: - ; -__153: - if !(__need_unlock != 0) { - goto __156 - } - X__unlockfile(tls, f) -__156: - ; - goto __154 -__154: - if 0 != 0 { - goto __153 - } - goto __155 -__155: - ; - return matches -} - -func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */ - var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie - var k size_t = len + size_t(256) - var end uintptr = Xmemchr(tls, src, 0, k) - if end != 0 { - k = size_t((int32(end) - int32(src)) / 1) - } - if k < len { - len = k - } - Xmemcpy(tls, buf, src, len) - (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len) - (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k) - (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k) - return len -} - -func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) - } - bp := tls.Alloc(136) - defer tls.Free(136) - - *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - }{string_read})), buf: s, lock: -1, cookie: s} - return Xvfscanf(tls, bp, fmt, ap) -} - -func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ - if __ccgo_strace { - trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) - } - var try uintptr - var sign int32 - for nel > size_t(0) { - try = base + uintptr(width*(nel/size_t(2))) - sign = (*struct { - f func(*TLS, uintptr, uintptr) int32 - })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) - if sign < 0 { - nel = nel / size_t(2) - } else if sign > 0 { - base = try + uintptr(width) - nel = nel - (nel/size_t(2) + size_t(1)) - } else { - return try - } - } - return uintptr(0) -} - -func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ - bp := tls.Alloc(136) - defer tls.Free(136) - - // var f FILE at bp, 136 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+4, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y float64 = X__floatscan(tls, bp, prec, 1) - var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).rpos)-int32((*FILE)(unsafe.Pointer(bp)).buf))/1) - if p != 0 { - *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { - if cnt != 0 { - return s + uintptr(cnt) - } - return s - }() - } - return y -} - -func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return float32(strtox(tls, s, p, 0)) -} - -func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 1) -} - -func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 2) -} - -func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ - bp := tls.Alloc(136) - defer tls.Free(136) - - // var f FILE at bp, 136 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+4, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) - if p != 0 { - var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).rpos)-int32((*FILE)(unsafe.Pointer(bp)).buf))/1)) - *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) - } - return y -} - -func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) -} - -func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) -} - -func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint32 { /* strtol.c:31:15: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uint32(strtox1(tls, s, p, base, uint64(2*uint32(0x7fffffff)+uint32(1)))) -} - -func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int32 { /* strtol.c:36:6: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int32(strtox1(tls, s, p, base, uint64(0+Uint32FromInt32(Int32(-Int32(0x7fffffff))-Int32FromInt32(1))))) -} - -func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return Xstrtoll(tls, s, p, base) -} - -func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return Xstrtoull(tls, s, p, base) -} - -func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - var l size_t = Xstrlen(tls, s) - var d uintptr = Xmalloc(tls, l+size_t(1)) - if !(d != 0) { - return uintptr(0) - } - return Xmemcpy(tls, d, s, l+size_t(1)) -} - -func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var l size_t = Xstrnlen(tls, d, n) - if l == n { - return l + Xstrlen(tls, s) - } - return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var d0 uintptr - var wd uintptr - var ws uintptr - d0 = d - - if !!(int32(PostDecUint32(&n, 1)) != 0) { - goto __1 - } - goto finish -__1: - ; - if !(uintptr_t(s)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1)) == uintptr_t(d)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1))) { - goto __2 - } -__3: - if !(uintptr_t(s)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1)) != 0 && n != 0 && AssignPtrInt8(d, *(*int8)(unsafe.Pointer(s))) != 0) { - goto __5 - } - goto __4 -__4: - n-- - s++ - d++ - goto __3 - goto __5 -__5: - ; - if !(n != 0 && *(*int8)(unsafe.Pointer(s)) != 0) { - goto __6 - } - wd = d - ws = s -__7: - if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint32)(unsafe.Pointer(ws))-Uint32(Uint32FromInt32(-1))/size_t(255)) & ^*(*uint32)(unsafe.Pointer(ws)) & (Uint32(Uint32FromInt32(-1))/size_t(255)*size_t(255/2+1)) != 0)) { - goto __9 - } - *(*size_t)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) - goto __8 -__8: - n = n - size_t(unsafe.Sizeof(size_t(0))) - ws += 4 - wd += 4 - goto __7 - goto __9 -__9: - ; - d = wd - s = ws -__6: - ; -__2: - ; -__10: - if !(n != 0 && AssignPtrInt8(d, *(*int8)(unsafe.Pointer(s))) != 0) { - goto __12 - } - goto __11 -__11: - n-- - s++ - d++ - goto __10 - goto __12 -__12: - ; - *(*int8)(unsafe.Pointer(d)) = int8(0) -finish: - return size_t((int32(d)-int32(d0))/1) + Xstrlen(tls, s) -} - -func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */ - if __ccgo_strace { - trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) - } - var l uintptr = _l - var r uintptr = _r - if !(int32(PostDecUint32(&n, 1)) != 0) { - return 0 - } -__1: - if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { - goto __3 - } - goto __2 -__2: - l++ - r++ - n-- - goto __1 - goto __3 -__3: - ; - return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) -} - -func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */ - if __ccgo_strace { - trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) - } - return Xstrncasecmp(tls, l, r, n) -} - -func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var a uintptr = d - d += uintptr(Xstrlen(tls, d)) - for n != 0 && *(*int8)(unsafe.Pointer(s)) != 0 { - n-- - *(*int8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) - } - *(*int8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = int8(0) - return a -} - -func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ - if __ccgo_strace { - trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) - } - var p uintptr = Xmemchr(tls, s, 0, n) - if p != 0 { - return uint32((int32(p) - int32(s)) / 1) - } - return n -} - -func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ - if __ccgo_strace { - trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) - } - bp := tls.Alloc(32) - defer tls.Free(32) - - var a uintptr = s - *(*[8]size_t)(unsafe.Pointer(bp /* byteset */)) = [8]size_t{0: size_t(0)} - - if !(int32(*(*int8)(unsafe.Pointer(c))) != 0) { - return size_t(0) - } - if !(int32(*(*int8)(unsafe.Pointer(c + 1))) != 0) { - for ; int32(*(*int8)(unsafe.Pointer(s))) == int32(*(*int8)(unsafe.Pointer(c))); s++ { - } - return size_t((int32(s) - int32(a)) / 1) - } - - for ; *(*int8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint32(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4, size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; c++ { - } - for ; *(*int8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4))&(size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; s++ { - } - return size_t((int32(s) - int32(a)) / 1) -} - -func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */ - if __ccgo_strace { - trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) - } - if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) { - return uintptr(0) - } - s += uintptr(Xstrspn(tls, s, sep)) - if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) { - return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0)) - } - _sp = s + uintptr(Xstrcspn(tls, s, sep)) - if *(*int8)(unsafe.Pointer(_sp)) != 0 { - *(*int8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = int8(0) - } else { - _sp = uintptr(0) - } - return s -} - -var _sp uintptr /* strtok.c:5:14: */ - -func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return *(*int32)(unsafe.Pointer(a + 3*4)) -} - -func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 3*4)) - return 0 -} - -// -// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_guardsize; -// return 0; -// } -// -// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit) -// { -// *inherit = a->_a_sched; -// return 0; -// } -// -// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param) -// { -// param->sched_priority = a->_a_prio; -// return 0; -// } -// -// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy) -// { -// *policy = a->_a_policy; -// return 0; -// } -// -// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope) -// { -// *scope = PTHREAD_SCOPE_SYSTEM; -// return 0; -// } -// -// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size) -// { -// if (!a->_a_stackaddr) -// return EINVAL; -// *size = a->_a_stacksize; -// *addr = (void *)(a->_a_stackaddr - *size); -// return 0; -// } -// -// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_stacksize; -// return 0; -// } -// -// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared) -// { -// *pshared = !!a->__attr; -// return 0; -// } -// -// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk) -// { -// *clk = a->__attr & 0x7fffffff; -// return 0; -// } -// -// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr>>31; -// return 0; -// } -// -// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol) -// { -// *protocol = PTHREAD_PRIO_NONE; -// return 0; -// } -// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr / 128U % 2; -// return 0; -// } -// -// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust) -// { -// *robust = a->__attr / 4U % 2; -// return 0; -// } - -func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)) -} - -// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type) -// { -// *type = a->__attr & 3; -// return 0; -// } -// -// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr[0]; -// return 0; -// } - -func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - if uint32(state) > 1 { - return 22 - } - *(*int32)(unsafe.Pointer(a + 3*4)) = state - return 0 -} - -func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */ - if __ccgo_strace { - trc("tls=%v m=%v, (%v:)", tls, m, origin(2)) - } - return *(*int32)(unsafe.Pointer(m)) & 15 -} - -// int __pthread_mutex_lock(pthread_mutex_t *m) -// { -// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL -// && !a_cas(&m->_m_lock, 0, EBUSY)) -// return 0; -// -// return __pthread_mutex_timedlock(m, 0); -// } -// -// weak_alias(__pthread_mutex_lock, pthread_mutex_lock); - -func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return 0 -} - -func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{} - return 0 -} - -func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v type1=%v, (%v:)", tls, a, type1, origin(2)) - } - if uint32(type1) > uint32(2) { - return 22 - } - (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1) - return 0 -} - -func init() { - *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45: -} - -var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data diff --git a/vendor/modernc.org/libc/musl_linux_arm.go b/vendor/modernc.org/libc/musl_linux_arm.go deleted file mode 100644 index ef46961..0000000 --- a/vendor/modernc.org/libc/musl_linux_arm.go +++ /dev/null @@ -1,7179 +0,0 @@ -// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_arm.go -pkgname libc -static-locals-prefix _s -Iarch/arm -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/gethostbyname_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.c', DO NOT EDIT. - -package libc - -import ( - "math" - "reflect" - "sync/atomic" - "unsafe" -) - -var _ = math.Pi -var _ reflect.Kind -var _ atomic.Value -var _ unsafe.Pointer - -// musl as a whole is licensed under the following standard MIT license: -// -// ---------------------------------------------------------------------- -// Copyright © 2005-2020 Rich Felker, et al. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ---------------------------------------------------------------------- -// -// Authors/contributors include: -// -// A. Wilcox -// Ada Worcester -// Alex Dowad -// Alex Suykov -// Alexander Monakov -// Andre McCurdy -// Andrew Kelley -// Anthony G. Basile -// Aric Belsito -// Arvid Picciani -// Bartosz Brachaczek -// Benjamin Peterson -// Bobby Bingham -// Boris Brezillon -// Brent Cook -// Chris Spiegel -// Clément Vasseur -// Daniel Micay -// Daniel Sabogal -// Daurnimator -// David Carlier -// David Edelsohn -// Denys Vlasenko -// Dmitry Ivanov -// Dmitry V. Levin -// Drew DeVault -// Emil Renner Berthing -// Fangrui Song -// Felix Fietkau -// Felix Janda -// Gianluca Anzolin -// Hauke Mehrtens -// He X -// Hiltjo Posthuma -// Isaac Dunham -// Jaydeep Patil -// Jens Gustedt -// Jeremy Huntwork -// Jo-Philipp Wich -// Joakim Sindholt -// John Spencer -// Julien Ramseier -// Justin Cormack -// Kaarle Ritvanen -// Khem Raj -// Kylie McClain -// Leah Neukirchen -// Luca Barbato -// Luka Perkov -// M Farkas-Dyck (Strake) -// Mahesh Bodapati -// Markus Wichmann -// Masanori Ogino -// Michael Clark -// Michael Forney -// Mikhail Kremnyov -// Natanael Copa -// Nicholas J. Kain -// orc -// Pascal Cuoq -// Patrick Oppenlander -// Petr Hosek -// Petr Skocik -// Pierre Carrier -// Reini Urban -// Rich Felker -// Richard Pennington -// Ryan Fairfax -// Samuel Holland -// Segev Finer -// Shiz -// sin -// Solar Designer -// Stefan Kristiansson -// Stefan O'Rear -// Szabolcs Nagy -// Timo Teräs -// Trutz Behn -// Valentin Ochs -// Will Dietz -// William Haddon -// William Pitcock -// -// Portions of this software are derived from third-party works licensed -// under terms compatible with the above MIT license: -// -// The TRE regular expression implementation (src/regex/reg* and -// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed -// under a 2-clause BSD license (license text in the source files). The -// included version has been heavily modified by Rich Felker in 2012, in -// the interests of size, simplicity, and namespace cleanliness. -// -// Much of the math library code (src/math/* and src/complex/*) is -// Copyright © 1993,2004 Sun Microsystems or -// Copyright © 2003-2011 David Schultz or -// Copyright © 2003-2009 Steven G. Kargl or -// Copyright © 2003-2009 Bruce D. Evans or -// Copyright © 2008 Stephen L. Moshier or -// Copyright © 2017-2018 Arm Limited -// and labelled as such in comments in the individual source files. All -// have been licensed under extremely permissive terms. -// -// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 -// The Android Open Source Project and is licensed under a two-clause BSD -// license. It was taken from Bionic libc, used on Android. -// -// The AArch64 memcpy and memset code (src/string/aarch64/*) are -// Copyright © 1999-2019, Arm Limited. -// -// The implementation of DES for crypt (src/crypt/crypt_des.c) is -// Copyright © 1994 David Burren. It is licensed under a BSD license. -// -// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was -// originally written by Solar Designer and placed into the public -// domain. The code also comes with a fallback permissive license for use -// in jurisdictions that may not recognize the public domain. -// -// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -// Valentin Ochs and is licensed under an MIT-style license. -// -// The x86_64 port was written by Nicholas J. Kain and is licensed under -// the standard MIT terms. -// -// The mips and microblaze ports were originally written by Richard -// Pennington for use in the ellcc project. The original code was adapted -// by Rich Felker for build system and code conventions during upstream -// integration. It is licensed under the standard MIT terms. -// -// The mips64 port was contributed by Imagination Technologies and is -// licensed under the standard MIT terms. -// -// The powerpc port was also originally written by Richard Pennington, -// and later supplemented and integrated by John Spencer. It is licensed -// under the standard MIT terms. -// -// All other files which have no copyright comments are original works -// produced specifically for use as part of this library, written either -// by Rich Felker, the main author of the library, or by one or more -// contibutors listed above. Details on authorship of individual files -// can be found in the git version control history of the project. The -// omission of copyright and license comments in each file is in the -// interest of source tree size. -// -// In addition, permission is hereby granted for all public header files -// (include/* and arch/*/bits/*) and crt files intended to be linked into -// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -// the copyright notice and permission notice otherwise required by the -// license, and to use these files without any requirement of -// attribution. These files include substantial contributions from: -// -// Bobby Bingham -// John Spencer -// Nicholas J. Kain -// Rich Felker -// Richard Pennington -// Stefan Kristiansson -// Szabolcs Nagy -// -// all of whom have explicitly granted such permission. -// -// This file previously contained text expressing a belief that most of -// the files covered by the above exception were sufficiently trivial not -// to be subject to copyright, resulting in confusion over whether it -// negated the permissions granted in the license. In the spirit of -// permissive licensing, and of not having licensing issues being an -// obstacle to adoption, that text has been removed. -const ( /* copyright.c:194:1: */ - __musl__copyright__ = 0 -) - -const ( /* nameser.h:117:1: */ - ns_uop_delete = 0 - ns_uop_add = 1 - ns_uop_max = 2 -) - -const ( /* nameser.h:147:1: */ - ns_t_invalid = 0 - ns_t_a = 1 - ns_t_ns = 2 - ns_t_md = 3 - ns_t_mf = 4 - ns_t_cname = 5 - ns_t_soa = 6 - ns_t_mb = 7 - ns_t_mg = 8 - ns_t_mr = 9 - ns_t_null = 10 - ns_t_wks = 11 - ns_t_ptr = 12 - ns_t_hinfo = 13 - ns_t_minfo = 14 - ns_t_mx = 15 - ns_t_txt = 16 - ns_t_rp = 17 - ns_t_afsdb = 18 - ns_t_x25 = 19 - ns_t_isdn = 20 - ns_t_rt = 21 - ns_t_nsap = 22 - ns_t_nsap_ptr = 23 - ns_t_sig = 24 - ns_t_key = 25 - ns_t_px = 26 - ns_t_gpos = 27 - ns_t_aaaa = 28 - ns_t_loc = 29 - ns_t_nxt = 30 - ns_t_eid = 31 - ns_t_nimloc = 32 - ns_t_srv = 33 - ns_t_atma = 34 - ns_t_naptr = 35 - ns_t_kx = 36 - ns_t_cert = 37 - ns_t_a6 = 38 - ns_t_dname = 39 - ns_t_sink = 40 - ns_t_opt = 41 - ns_t_apl = 42 - ns_t_tkey = 249 - ns_t_tsig = 250 - ns_t_ixfr = 251 - ns_t_axfr = 252 - ns_t_mailb = 253 - ns_t_maila = 254 - ns_t_any = 255 - ns_t_zxfr = 256 - ns_t_max = 65536 -) - -const ( /* nameser.h:210:1: */ - ns_c_invalid = 0 - ns_c_in = 1 - ns_c_2 = 2 - ns_c_chaos = 3 - ns_c_hs = 4 - ns_c_none = 254 - ns_c_any = 255 - ns_c_max = 65536 -) - -const ( /* nameser.h:221:1: */ - ns_kt_rsa = 1 - ns_kt_dh = 2 - ns_kt_dsa = 3 - ns_kt_private = 254 -) - -const ( /* nameser.h:228:1: */ - cert_t_pkix = 1 - cert_t_spki = 2 - cert_t_pgp = 3 - cert_t_url = 253 - cert_t_oid = 254 -) - -const ( /* nameser.h:28:1: */ - ns_s_qd = 0 - ns_s_zn = 0 - ns_s_an = 1 - ns_s_pr = 1 - ns_s_ns = 2 - ns_s_ud = 2 - ns_s_ar = 3 - ns_s_max = 4 -) - -const ( /* nameser.h:75:1: */ - ns_f_qr = 0 - ns_f_opcode = 1 - ns_f_aa = 2 - ns_f_tc = 3 - ns_f_rd = 4 - ns_f_ra = 5 - ns_f_z = 6 - ns_f_ad = 7 - ns_f_cd = 8 - ns_f_rcode = 9 - ns_f_max = 10 -) - -const ( /* nameser.h:89:1: */ - ns_o_query = 0 - ns_o_iquery = 1 - ns_o_status = 2 - ns_o_notify = 4 - ns_o_update = 5 - ns_o_max = 6 -) - -const ( /* nameser.h:98:1: */ - ns_r_noerror = 0 - ns_r_formerr = 1 - ns_r_servfail = 2 - ns_r_nxdomain = 3 - ns_r_notimpl = 4 - ns_r_refused = 5 - ns_r_yxdomain = 6 - ns_r_yxrrset = 7 - ns_r_nxrrset = 8 - ns_r_notauth = 9 - ns_r_notzone = 10 - ns_r_max = 11 - ns_r_badvers = 16 - ns_r_badsig = 16 - ns_r_badkey = 17 - ns_r_badtime = 18 -) - -const ( /* pthread_impl.h:58:1: */ - DT_EXITING = 0 - DT_JOINABLE = 1 - DT_DETACHED = 2 -) - -type ptrdiff_t = int32 /* :3:26 */ - -type size_t = uint32 /* :9:23 */ - -type wchar_t = uint32 /* :15:24 */ - -type uint16_t = uint16 /* alltypes.h:119:25 */ - -type uint32_t = uint32 /* alltypes.h:124:25 */ - -type uint64_t = uint64 /* alltypes.h:129:25 */ - -func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ - return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 -} - -var table = [384]uint16{ - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x320/256 | 0x320*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x160/256 | 0x160*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), -} /* __ctype_b_loc.c:9:29 */ - -var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */ - -func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&ptable)) -} - -func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ - return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) -} - -type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:336:9 */ - -type locale_t = uintptr /* alltypes.h:336:32 */ - -func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisalpha(tls, c) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) - }() != 0 || func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0) -} - -func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalnum(tls, c) -} - -func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) -} - -func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalpha(tls, c) -} - -func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) -} - -func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisdigit(tls, c) -} - -func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('a') < uint32(26)) -} - -func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xislower(tls, c) -} - -func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) -} - -func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisprint(tls, c) -} - -func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('A') < uint32(26)) -} - -func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisupper(tls, c) -} - -func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) -} - -func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisxdigit(tls, c) -} - -type off_t = int64 /* alltypes.h:155:16 */ - -type ino_t = uint64 /* alltypes.h:160:25 */ - -type dirent = struct { - d_ino ino_t - d_off off_t - d_reclen uint16 - d_type uint8 - d_name [256]uint8 - _ [5]byte -} /* dirent.h:5:1 */ - -type __dirstream = struct { - tell off_t - fd int32 - buf_pos int32 - buf_end int32 - lock [1]int32 - buf [2048]uint8 -} /* dirent.h:20:9 */ - -type DIR = __dirstream /* dirent.h:20:28 */ - -type ssize_t = int32 /* alltypes.h:58:15 */ - -type intptr_t = int32 /* alltypes.h:63:15 */ - -type pid_t = int32 /* alltypes.h:228:13 */ - -type uid_t = uint32 /* alltypes.h:238:18 */ - -type gid_t = uint32 /* alltypes.h:243:18 */ - -type useconds_t = uint32 /* alltypes.h:253:18 */ - -type div_t = struct { - quot int32 - rem int32 -} /* stdlib.h:62:35 */ -type ldiv_t = struct { - quot int32 - rem int32 -} /* stdlib.h:63:36 */ -type lldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:64:41 */ - -func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd) - Xfree(tls, dir) - return ret -} - -type mode_t = uint32 /* alltypes.h:145:18 */ - -type iovec = struct { - iov_base uintptr - iov_len size_t -} /* alltypes.h:348:1 */ - -type flock = struct { - l_type int16 - l_whence int16 - _ [4]byte - l_start off_t - l_len off_t - l_pid pid_t - _ [4]byte -} /* fcntl.h:24:1 */ - -type file_handle = struct { - _ [0]uint32 - handle_bytes uint32 - handle_type int32 -} /* fcntl.h:167:1 */ - -type f_owner_ex = struct { - __type int32 - pid pid_t -} /* fcntl.h:172:1 */ - -type syscall_arg_t = int32 /* syscall.h:22:14 */ - -func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - var fd int32 - var dir uintptr - - if AssignInt32(&fd, Xopen(tls, name, 00|040000|02000000, 0)) < 0 { - return uintptr(0) - } - if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint32(1), uint32(unsafe.Sizeof(DIR{}))))) != 0) { - X__syscall1(tls, 6, int32(fd)) - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).fd = fd - return dir -} - -type max_align_t = struct { - __ll int64 - __ld float64 -} /* alltypes.h:34:54 */ - -type dirstream_buf_alignment_check = [1]uint8 /* readdir.c:7:14 */ - -func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var de uintptr - - if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end { - var len int32 = int32(X__syscall3(tls, 217, int32((*DIR)(unsafe.Pointer(dir)).fd), int32(dir+24), int32(unsafe.Sizeof([2048]uint8{})))) - if len <= 0 { - if len < 0 && len != -2 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len - } - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).buf_end = len - (*DIR)(unsafe.Pointer(dir)).buf_pos = 0 - } - de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos) - *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen) - (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off - return de -} - -type uintptr_t = uint32 /* alltypes.h:48:24 */ - -type int8_t = int8 /* alltypes.h:89:25 */ - -type int16_t = int16 /* alltypes.h:94:25 */ - -type int32_t = int32 /* alltypes.h:99:25 */ - -type int64_t = int64 /* alltypes.h:104:25 */ - -type intmax_t = int64 /* alltypes.h:109:25 */ - -type uint8_t = uint8 /* alltypes.h:114:25 */ - -type uintmax_t = uint64 /* alltypes.h:139:25 */ - -type int_fast8_t = int8_t /* stdint.h:22:16 */ -type int_fast64_t = int64_t /* stdint.h:23:17 */ - -type int_least8_t = int8_t /* stdint.h:25:17 */ -type int_least16_t = int16_t /* stdint.h:26:17 */ -type int_least32_t = int32_t /* stdint.h:27:17 */ -type int_least64_t = int64_t /* stdint.h:28:17 */ - -type uint_fast8_t = uint8_t /* stdint.h:30:17 */ -type uint_fast64_t = uint64_t /* stdint.h:31:18 */ - -type uint_least8_t = uint8_t /* stdint.h:33:18 */ -type uint_least16_t = uint16_t /* stdint.h:34:18 */ -type uint_least32_t = uint32_t /* stdint.h:35:18 */ -type uint_least64_t = uint64_t /* stdint.h:36:18 */ - -type int_fast16_t = int32_t /* stdint.h:1:17 */ -type int_fast32_t = int32_t /* stdint.h:2:17 */ -type uint_fast16_t = uint32_t /* stdint.h:3:18 */ -type uint_fast32_t = uint32_t /* stdint.h:4:18 */ - -type _IO_FILE = struct { - flags uint32 - rpos uintptr - rend uintptr - close uintptr - wend uintptr - wpos uintptr - mustbezero_1 uintptr - wbase uintptr - read uintptr - write uintptr - seek uintptr - buf uintptr - buf_size size_t - prev uintptr - next uintptr - fd int32 - pipe_pid int32 - lockcount int32 - mode int32 - lock int32 - lbf int32 - cookie uintptr - off off_t - getln_buf uintptr - mustbezero_2 uintptr - shend uintptr - _ [4]byte - shlim off_t - shcnt off_t - prev_locked uintptr - next_locked uintptr - locale uintptr - _ [4]byte -} /* alltypes.h:313:9 */ - -type FILE = _IO_FILE /* alltypes.h:313:25 */ - -type va_list = uintptr /* alltypes.h:319:27 */ - -type _G_fpos64_t = struct { - _ [0]uint64 - __opaque [16]uint8 -} /* stdio.h:54:9 */ - -type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ - -type float_t = float32 /* alltypes.h:23:15 */ - -type double_t = float64 /* alltypes.h:28:16 */ - -func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ - bp := tls.Alloc(4) - defer tls.Free(4) - - // var __u struct {__f float32;} at bp, 4 - - *(*float32)(unsafe.Pointer(bp)) = __f - return *(*uint32)(unsafe.Pointer(bp)) -} - -func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - // var __u struct {__f float64;} at bp, 8 - - *(*float64)(unsafe.Pointer(bp)) = __f - return *(*uint64)(unsafe.Pointer(bp)) -} - -type __pthread = struct { - self uintptr - dtv uintptr - prev uintptr - next uintptr - sysinfo uintptr_t - canary uintptr_t - canary2 uintptr_t - tid int32 - errno_val int32 - detach_state int32 - cancel int32 - canceldisable uint8 - cancelasync uint8 - tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ - _ [1]byte - map_base uintptr - map_size size_t - stack uintptr - stack_size size_t - guard_size size_t - result uintptr - cancelbuf uintptr - tsd uintptr - robust_list struct { - head uintptr - off int32 - pending uintptr - } - timer_id int32 - locale locale_t - killlock [1]int32 - dlerror_buf uintptr - stdio_locks uintptr - canary_at_end uintptr_t - dtv_copy uintptr -} /* alltypes.h:266:9 */ - -func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ - var c int32 - var x int32 - var y int64 - var neg int32 = 0 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c == '+' || c == '-' { - neg = Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') >= 10 && pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - if uint32(c-'0') >= 10 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return -0x7fffffffffffffff - int64(1) - } - for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - x = 10*x + c - '0' - } - for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - y = int64(10)*y + int64(c) - int64('0') - } - for ; uint32(c-'0') < 10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if neg != 0 { - return -y - } - return y -} - -func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var x [128]uint32_t at bp, 512 - - var i int32 - var j int32 - var k int32 - var a int32 - var z int32 - var lrp int64 = int64(0) - var dc int64 = int64(0) - var e10 int64 = int64(0) - var lnz int32 = 0 - var gotdig int32 = 0 - var gotrad int32 = 0 - var rp int32 - var e2 int32 - var emax int32 = -emin - bits + 3 - var denormal int32 = 0 - var y float64 - var frac float64 = float64(0) - var bias float64 = float64(0) - - j = 0 - k = 0 - - // Don't let leading zeros consume buffer space - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - if c == '.' { - gotrad = 1 - for c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }(); c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - lrp-- - } - } - - *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) - for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - gotrad = 1 - lrp = dc - } else if k < 128-3 { - dc++ - if c != '0' { - lnz = int32(dc) - } - if j != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0') - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') - } - if PreIncInt32(&j, 1) == 9 { - k++ - j = 0 - } - gotdig = 1 - } else { - dc++ - if c != '0' { - lnz = (128 - 4) * 9 - *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) - } - } - } - if !(gotrad != 0) { - lrp = dc - } - - if gotdig != 0 && c|32 == 'e' { - e10 = scanexp(tls, f, pok) - if e10 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e10 = int64(0) - } - lrp = lrp + e10 - } else if c >= 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - if !(gotdig != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - // Handle zero specially to avoid nasty special cases later - if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { - return float64(sign) * 0.0 - } - - // Optimize small integers (w/no exponent) and over/under-flow - if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if lrp > int64(-emin/2) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if lrp < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - // Align incomplete final B1B digit - if j != 0 { - for ; j < 9; j++ { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) - } - k++ - j = 0 - } - - a = 0 - z = k - e2 = 0 - rp = int32(lrp) - - // Optimize small to mid-size integers (even in exp. notation) - if lnz < 9 && lnz <= rp && rp < 18 { - if rp == 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if rp < 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) - } - var bitlim int32 = bits - 3*(rp-9) - if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) - } - } - - // Drop trailing zeros - for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { - } - - // Align radix point to B1B digit boundary - if rp%9 != 0 { - var rpm9 int32 - if rp >= 0 { - rpm9 = rp % 9 - } else { - rpm9 = rp%9 + 9 - } - var p10 int32 = _sp10s[8-rpm9] - var carry uint32_t = uint32_t(0) - for k = a; k != z; k++ { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry - carry = uint32_t(1000000000/p10) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - rp = rp - 9 - } - } - if carry != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry - } - rp = rp + (9 - rpm9) - } - - // Upscale until desired number of bits are left of radix point - for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { - var carry uint32_t = uint32_t(0) - e2 = e2 - 29 - for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { - var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) - if tmp > uint64(1000000000) { - carry = uint32_t(tmp / uint64(1000000000)) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) - } else { - carry = uint32_t(0) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) - } - if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - z = k - } - if k == a { - break - } - } - if carry != 0 { - rp = rp + 9 - a = (a - 1) & (128 - 1) - if a == z { - z = (z - 1) & (128 - 1) - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) - } - *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry - } - } - - // Downscale until exactly number of bits are left of radix point - for { - var carry uint32_t = uint32_t(0) - var sh int32 = 1 - for i = 0; i < 2; i++ { - k = (a + i) & (128 - 1) - if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { - i = 2 - break - } - if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { - break - } - } - if i == 2 && rp == 9*2 { - break - } - // FIXME: find a way to compute optimal sh - if rp > 9+9*2 { - sh = 9 - } - e2 = e2 + sh - for k = a; k != z; k = (k + 1) & (128 - 1) { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<>sh + carry - carry = uint32_t(int32(1000000000)>>sh) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - i-- - rp = rp - 9 - } - } - if carry != 0 { - if (z+1)&(128-1) != a { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry - z = (z + 1) & (128 - 1) - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) - } - } - } - - // Assemble desired bits into floating point variable - for y = float64(AssignInt32(&i, 0)); i < 2; i++ { - if (a+i)&(128-1) == z { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) - } - y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) - } - - y = y * float64(sign) - - // Limit precision for denormal results - if bits > 53+e2-emin { - bits = 53 + e2 - emin - if bits < 0 { - bits = 0 - } - denormal = 1 - } - - // Calculate bias term to force rounding, move out lower bits - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) - frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) - y = y - frac - y = y + bias - } - - // Process tail of decimal input so it can affect rounding - if (a+i)&(128-1) != z { - var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) - if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { - frac = frac + 0.25*float64(sign) - } else if t > uint32_t(500000000) { - frac = frac + 0.75*float64(sign) - } else if t == uint32_t(500000000) { - if (a+i+1)&(128-1) == z { - frac = frac + 0.5*float64(sign) - } else { - frac = frac + 0.75*float64(sign) - } - } - if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { - frac += 1 - } - } - - y = y + frac - y = y - bias - - if (e2+53)&0x7fffffff > emax-5 { - if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { - if denormal != 0 && bits == 53+e2-emin { - denormal = 0 - } - y = y * 0.5 - e2++ - } - if e2+53 > emax || denormal != 0 && frac != 0 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - } - - return Xscalbnl(tls, y, e2) -} - -var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ -var _sp10s = [8]int32{10, 100, 1000, 10000, - 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ - -func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ - var x uint32_t = uint32_t(0) - var y float64 = float64(0) - var scale float64 = float64(1) - var bias float64 = float64(0) - var gottail int32 = 0 - var gotrad int32 = 0 - var gotdig int32 = 0 - var rp int64 = int64(0) - var dc int64 = int64(0) - var e2 int64 = int64(0) - var d int32 - var c int32 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - - // Skip leading zeros - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - - if c == '.' { - gotrad = 1 - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - // Count zeros after the radix point before significand - rp = int64(0) - __1: - if !(c == '0') { - goto __3 - } - gotdig = 1 - goto __2 - __2: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - rp-- - goto __1 - goto __3 - __3: - } - - for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - rp = dc - gotrad = 1 - } else { - gotdig = 1 - if c > '9' { - d = c | 32 + 10 - 'a' - } else { - d = c - '0' - } - if dc < int64(8) { - x = x*uint32_t(16) + uint32_t(d) - } else if dc < int64(53/4+1) { - y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) - } else if d != 0 && !(gottail != 0) { - y = y + 0.5*scale - gottail = 1 - } - dc++ - } - } - if !(gotdig != 0) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if gotrad != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } else { - X__shlim(tls, f, int64(0)) - } - return float64(sign) * 0.0 - } - if !(gotrad != 0) { - rp = dc - } - for dc < int64(8) { - x = x * uint32_t(16) - dc++ - } - if c|32 == 'p' { - e2 = scanexp(tls, f, pok) - if e2 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e2 = int64(0) - } - } else { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - e2 = e2 + (int64(4)*rp - int64(32)) - - if !(x != 0) { - return float64(sign) * 0.0 - } - if e2 > int64(-emin) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if e2 < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - for x < 0x80000000 { - if y >= 0.5 { - x = x + (x + uint32_t(1)) - y = y + (y - float64(1)) - } else { - x = x + x - y = y + y - } - e2-- - } - - if int64(bits) > int64(32)+e2-int64(emin) { - bits = int32(int64(32) + e2 - int64(emin)) - if bits < 0 { - bits = 0 - } - } - - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) - } - - if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { - x++ - y = float64(0) - } - - y = bias + float64(sign)*float64(x) + float64(sign)*y - y = y - bias - - if !(y != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - - return Xscalbnl(tls, y, int32(e2)) -} - -func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ - if __ccgo_strace { - trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) - } - var sign int32 = 1 - var i size_t - var bits int32 - var emin int32 - var c int32 - - switch prec { - case 0: - bits = 24 - emin = -125 - bits - break - case 1: - bits = 53 - emin = -1021 - bits - break - case 2: - bits = 53 - emin = -1021 - bits - break - default: - return float64(0) - } - - for __isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0 { - } - - if c == '+' || c == '-' { - sign = sign - 2*Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - - for i = size_t(0); i < size_t(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { - if i < size_t(7) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - if i == size_t(3) || i == size_t(8) || i > size_t(3) && pok != 0 { - if i != size_t(8) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - for ; i > size_t(3); i-- { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - } - return float64(float32(sign) * X__builtin_inff(tls)) - } - if !(i != 0) { - for i = size_t(0); i < size_t(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { - if i < size_t(2) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - } - if i == size_t(3) { - if func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() != '(' { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return float64(X__builtin_nanf(tls, ts+13)) - } - for i = size_t(1); ; i++ { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { - continue - } - if c == ')' { - return float64(X__builtin_nanf(tls, ts+13)) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - for PostDecUint32(&i, 1) != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - return float64(X__builtin_nanf(tls, ts+13)) - } - return float64(X__builtin_nanf(tls, ts+13)) - } - - if i != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - if c == '0' { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c|32 == 'x' { - return hexfloat(tls, f, bits, emin, sign, pok) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - c = '0' - } - - return decfloat(tls, f, c, bits, emin, sign, pok) -} - -// Lookup table for digit values. -1==255>=36 -> invalid -var table1 = [257]uint8{Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), -} /* intscan.c:7:28 */ - -func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ - if __ccgo_strace { - trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) - } - var val uintptr - var c int32 - var neg int32 - var x uint32 - var y uint64 - var bs int32 - val = uintptr(unsafe.Pointer(&table1)) + uintptr(1) - neg = 0 - if !(base > uint32(36) || base == uint32(1)) { - goto __1 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__1: - ; -__2: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __3 - } - goto __2 -__3: - ; - if !(c == '+' || c == '-') { - goto __4 - } - neg = -Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__4: - ; - if !((base == uint32(0) || base == uint32(16)) && c == '0') { - goto __5 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(c|32 == 'x') { - goto __7 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { - goto __9 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - goto __10 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - goto __11 -__10: - X__shlim(tls, f, int64(0)) -__11: - ; - return uint64(0) -__9: - ; - base = uint32(16) - goto __8 -__7: - if !(base == uint32(0)) { - goto __12 - } - base = uint32(8) -__12: - ; -__8: - ; - goto __6 -__5: - if !(base == uint32(0)) { - goto __13 - } - base = uint32(10) -__13: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { - goto __14 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - X__shlim(tls, f, int64(0)) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__14: - ; -__6: - ; - if !(base == uint32(10)) { - goto __15 - } - x = uint32(0) -__17: - if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { - goto __19 - } - x = x*uint32(10) + uint32(c-'0') - goto __18 -__18: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __17 - goto __19 -__19: - ; - y = uint64(x) -__20: - if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { - goto __22 - } - y = y*uint64(10) + uint64(c-'0') - goto __21 -__21: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __20 - goto __22 -__22: - ; - if !(uint32(c-'0') >= 10) { - goto __23 - } - goto done -__23: - ; - goto __16 -__15: - if !!(base&(base-uint32(1)) != 0) { - goto __24 - } - bs = int32(*(*uint8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) - x = uint32(0) -__26: - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { - goto __28 - } - x = x<>bs) { - goto __31 - } - y = y<= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(y >= lim) { - goto __43 - } - if !(!(lim&uint64(1) != 0) && !(neg != 0)) { - goto __44 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim - uint64(1) - goto __45 -__44: - if !(y > lim) { - goto __46 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim -__46: - ; -__45: - ; -__43: - ; - return y ^ uint64(neg) - uint64(neg) -} - -// The shcnt field stores the number of bytes read so far, offset by -// the value of buf-rpos at the last function call (__shlim or __shgetc), -// so that between calls the inline shcnt macro can add rpos-buf to get -// the actual count. - -func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ - if __ccgo_strace { - trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) - } - (*FILE)(unsafe.Pointer(f)).shlim = lim - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf) - int32((*FILE)(unsafe.Pointer(f)).rpos)) / 1) - // If lim is nonzero, rend must be a valid pointer. - if lim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).rend)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) > lim { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } -} - -func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var c int32 - var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) + cnt - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos - (*FILE)(unsafe.Pointer(f)).shlim = int64(-1) - return -1 - } - cnt++ - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).rend)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) > (*FILE)(unsafe.Pointer(f)).shlim-cnt { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } - (*FILE)(unsafe.Pointer(f)).shcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).buf)-int32((*FILE)(unsafe.Pointer(f)).rpos))/1) + cnt - if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf { - *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c) - } - return c -} - -type lconv = struct { - decimal_point uintptr - thousands_sep uintptr - grouping uintptr - int_curr_symbol uintptr - currency_symbol uintptr - mon_decimal_point uintptr - mon_thousands_sep uintptr - mon_grouping uintptr - positive_sign uintptr - negative_sign uintptr - int_frac_digits uint8 - frac_digits uint8 - p_cs_precedes uint8 - p_sep_by_space uint8 - n_cs_precedes uint8 - n_sep_by_space uint8 - p_sign_posn uint8 - n_sign_posn uint8 - int_p_cs_precedes uint8 - int_p_sep_by_space uint8 - int_n_cs_precedes uint8 - int_n_sep_by_space uint8 - int_p_sign_posn uint8 - int_n_sign_posn uint8 - _ [2]byte -} /* locale.h:24:1 */ - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: uint8(255), frac_digits: uint8(255), p_cs_precedes: uint8(255), p_sep_by_space: uint8(255), n_cs_precedes: uint8(255), n_sep_by_space: uint8(255), p_sign_posn: uint8(255), n_sign_posn: uint8(255), int_p_cs_precedes: uint8(255), int_p_sep_by_space: uint8(255), int_n_cs_precedes: uint8(255), int_n_sep_by_space: uint8(255), int_p_sign_posn: uint8(255), int_n_sign_posn: uint8(255)} /* localeconv.c:4:27 */ - -func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&posix_lconv)) -} - -func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - if !(e != 0) { - if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0x7ff { - if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) { - *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff)) - if !(e != 0) { - if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0xff { - if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return X__fpclassify(tls, x) -} - -func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xcopysign(tls, x, y) -} - -func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return Xfabs(tls, x) -} - -func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xfmod(tls, x, y) -} - -func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - return X__builtin_nanf(tls, ts+13) -} - -var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ - -func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) - var y double_t - - if e >= 0x3ff+52 { - return x - } - if s != 0 { - y = x - toint + toint - } else { - y = x + toint - toint - } - if y == float64(0) { - if s != 0 { - return -Float64FromFloat64(0.0) - } - return float64(0) - } - return y -} - -func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - // var u struct {f float64;} at bp, 8 - - var y double_t = x - - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - n = 1023 - } - } - } else if n < -1022 { - // make sure final n < -53 to avoid double - // rounding in the subnormal range - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - n = -1022 - } - } - } - *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 - x = y * *(*float64)(unsafe.Pointer(bp)) - return x -} - -func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - return Xscalbn(tls, x, n) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -type __locale_map = struct { - __map uintptr - map_size size_t - name [24]uint8 - next uintptr -} /* alltypes.h:336:9 */ - -type tls_module = struct { - next uintptr - image uintptr - len size_t - size size_t - align size_t - offset size_t -} /* libc.h:14:1 */ - -type __libc = struct { - can_do_threads uint8 - threaded uint8 - secure uint8 - need_locks int8 - threads_minus_1 int32 - auxv uintptr - tls_head uintptr - tls_size size_t - tls_align size_t - tls_cnt size_t - page_size size_t - global_locale struct{ cat [6]uintptr } -} /* libc.h:20:1 */ - -type time_t = int32 /* alltypes.h:78:16 */ - -type clockid_t = int32 /* alltypes.h:207:13 */ - -type timespec = struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ -} /* alltypes.h:222:1 */ - -type pthread_t = uintptr /* alltypes.h:266:26 */ - -type pthread_once_t = int32 /* alltypes.h:272:13 */ - -type pthread_key_t = uint32 /* alltypes.h:277:18 */ - -type pthread_spinlock_t = int32 /* alltypes.h:282:13 */ - -type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:287:37 */ - -type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:292:37 */ - -type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:297:37 */ - -type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:302:40 */ - -type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:342:9 */ - -type sigset_t = __sigset_t /* alltypes.h:342:71 */ - -type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:365:147 */ - -type pthread_mutex_t = struct{ __u struct{ __i [6]int32 } } /* alltypes.h:370:157 */ - -type pthread_cond_t = struct{ __u struct{ __i [12]int32 } } /* alltypes.h:380:112 */ - -type pthread_rwlock_t = struct{ __u struct{ __i [8]int32 } } /* alltypes.h:390:139 */ - -type pthread_barrier_t = struct{ __u struct{ __i [5]int32 } } /* alltypes.h:395:137 */ - -type sched_param = struct { - sched_priority int32 - __reserved1 int32 - __reserved2 [4]int32 - __reserved3 int32 -} /* sched.h:19:1 */ - -type timer_t = uintptr /* alltypes.h:202:14 */ - -type clock_t = int32 /* alltypes.h:212:14 */ - -type tm = struct { - tm_sec int32 - tm_min int32 - tm_hour int32 - tm_mday int32 - tm_mon int32 - tm_year int32 - tm_wday int32 - tm_yday int32 - tm_isdst int32 - tm_gmtoff int32 - tm_zone uintptr -} /* time.h:38:1 */ - -type itimerspec = struct { - it_interval struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ - } - it_value struct { - tv_sec time_t - tv_nsec int32 - __12 uint32 /* int : 32 */ - } -} /* time.h:80:1 */ - -type sigevent = struct { - sigev_value struct{ sival_int int32 } - sigev_signo int32 - sigev_notify int32 - sigev_notify_function uintptr - sigev_notify_attributes uintptr - __pad [44]uint8 -} /* time.h:107:1 */ - -type __ptcb = struct { - __f uintptr - __x uintptr - __next uintptr -} /* alltypes.h:266:9 */ - -type sigaltstack = struct { - ss_sp uintptr - ss_flags int32 - ss_size size_t -} /* signal.h:44:9 */ - -type stack_t = sigaltstack /* signal.h:44:28 */ - -type greg_t = int32 /* signal.h:10:13 */ -type gregset_t = [18]int32 /* signal.h:10:21 */ -type sigcontext = struct { - trap_no uint32 - error_code uint32 - oldmask uint32 - arm_r0 uint32 - arm_r1 uint32 - arm_r2 uint32 - arm_r3 uint32 - arm_r4 uint32 - arm_r5 uint32 - arm_r6 uint32 - arm_r7 uint32 - arm_r8 uint32 - arm_r9 uint32 - arm_r10 uint32 - arm_fp uint32 - arm_ip uint32 - arm_sp uint32 - arm_lr uint32 - arm_pc uint32 - arm_cpsr uint32 - fault_address uint32 -} /* signal.h:11:9 */ - -type mcontext_t = sigcontext /* signal.h:18:3 */ - -type __ucontext = struct { - uc_flags uint32 - uc_link uintptr - uc_stack stack_t - uc_mcontext mcontext_t - uc_sigmask sigset_t - uc_regspace [64]uint64 -} /* signal.h:31:9 */ - -type ucontext_t = __ucontext /* signal.h:38:3 */ - -type sigval = struct{ sival_int int32 } /* time.h:107:1 */ - -type siginfo_t = struct { - si_signo int32 - si_errno int32 - si_code int32 - __si_fields struct { - _ [0]uint32 - __pad [116]uint8 - } -} /* signal.h:145:3 */ - -type sigaction = struct { - __sa_handler struct{ sa_handler uintptr } - sa_mask sigset_t - sa_flags int32 - sa_restorer uintptr -} /* signal.h:167:1 */ - -type sig_t = uintptr /* signal.h:251:14 */ - -type sig_atomic_t = int32 /* signal.h:269:13 */ - -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:46:19: */ - panic(`arch/arm/atomic_arch.h:48:2: assembler statements not supported`) - return int32(0) - //TODO for (;;) { - //TODO register int r0 __asm__("r0") = t; - //TODO register int r1 __asm__("r1") = s; - //TODO register volatile int *r2 __asm__("r2") = p; - //TODO register uintptr_t r3 __asm__("r3") = __a_cas_ptr; - //TODO int old; - //TODO __asm__ __volatile__ ( - //TODO BLX " r3" - //TODO : "+r"(r0), "+r"(r3) : "r"(r1), "r"(r2) - //TODO : "memory", "lr", "ip", "cc" ); - //TODO if (!r0) return t; - //TODO if ((old=*p)!=t) return old; - //TODO } -} - -func a_barrier(tls *TLS) { /* atomic_arch.h:68:20: */ - panic(`arch/arm/atomic_arch.h:70:2: assembler statements not supported`) - //TODO register uintptr_t ip __asm__("ip") = __a_barrier_ptr; - //TODO __asm__ __volatile__( BLX " ip" : "+r"(ip) : : "memory", "cc", "lr" ); -} - -func a_clz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:91:19: */ - panic(`arch/arm/atomic_arch.h:93:2: assembler statements not supported`) - return int32(x) -} - -func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:108:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:119:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, int32(uint32(old)+uint32(v))) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:130:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, old&v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:140:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, old|v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */ - a_fetch_and(tls, p, v) -} - -func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */ - a_fetch_or(tls, p, v) -} - -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - -type a_cas_p_undefined_but_pointer_not_32bit = [1]uint8 /* atomic.h:229:14 */ - -func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */ - return 31 - a_clz_32(tls, x&-x) -} - -func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic.h:272:19: */ - if uint32(unsafe.Sizeof(int32(0))) < uint32(8) { - var y uint32_t = uint32_t(x) - if !(y != 0) { - y = uint32_t(x >> 32) - return 32 + a_ctz_32(tls, y) - } - return a_ctz_32(tls, y) - } - return int32(_sdebruijn648[x&-x*0x022fdd63cc95386d>>58]) -} - -var _sdebruijn648 = [64]uint8{ - uint8(0), uint8(1), uint8(2), uint8(53), uint8(3), uint8(7), uint8(54), uint8(27), uint8(4), uint8(38), uint8(41), uint8(8), uint8(34), uint8(55), uint8(48), uint8(28), - uint8(62), uint8(5), uint8(39), uint8(46), uint8(44), uint8(42), uint8(22), uint8(9), uint8(24), uint8(35), uint8(59), uint8(56), uint8(49), uint8(18), uint8(29), uint8(11), - uint8(63), uint8(52), uint8(6), uint8(26), uint8(37), uint8(40), uint8(33), uint8(47), uint8(61), uint8(45), uint8(43), uint8(21), uint8(23), uint8(58), uint8(17), uint8(10), - uint8(51), uint8(25), uint8(36), uint8(32), uint8(60), uint8(20), uint8(57), uint8(16), uint8(50), uint8(31), uint8(19), uint8(15), uint8(30), uint8(14), uint8(13), uint8(12), -} /* atomic.h:274:20 */ - -type __timer = struct { - timerid int32 - thread pthread_t -} /* pthread_impl.h:64:1 */ - -func __pthread_self(tls *TLS) pthread_t { /* pthread_arch.h:19:25: */ - var p uintptr_t - panic(`arch/arm/pthread_arch.h:23:2: assembler statements not supported`) - return uintptr(p - uintptr_t(unsafe.Sizeof(__pthread{}))) -} - -func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */ - if priv != 0 { - priv = 128 - } - if cnt < 0 { - cnt = 0x7fffffff - } - _ = Bool32(X__syscall3(tls, 240, int32(addr), int32(1|priv), int32(cnt)) != -38 || X__syscall3(tls, 240, int32(addr), 1, int32(cnt)) != 0) -} - -func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */ - if priv != 0 { - priv = 128 - } - _ = Bool32(X__syscall4(tls, 240, int32(addr), int32(0|priv), int32(val), 0) != -38 || X__syscall4(tls, 240, int32(addr), 0, int32(val), 0) != 0) -} - -var X__fsmu8 = [51]uint32_t{ - func() uint32 { - if 0x2 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2) - }(), func() uint32 { - if 0x3 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3) - }(), func() uint32 { - if 0x4 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4) - }(), func() uint32 { - if 0x5 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5) - }(), func() uint32 { - if 0x6 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6) - }(), func() uint32 { - if 0x7 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7) - }(), - func() uint32 { - if 0x8 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8) - }(), func() uint32 { - if 0x9 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9) - }(), func() uint32 { - if 0xa < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa) - }(), func() uint32 { - if 0xb < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb) - }(), func() uint32 { - if 0xc < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc) - }(), func() uint32 { - if 0xd < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd) - }(), func() uint32 { - if 0xe < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe) - }(), func() uint32 { - if 0xf < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf) - }(), - func() uint32 { - if 0x0+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x0+16) - }(), func() uint32 { - if 0x1+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x1+16) - }(), func() uint32 { - if 0x2+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2+16) - }(), func() uint32 { - if 0x3+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3+16) - }(), func() uint32 { - if 0x4+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4+16) - }(), func() uint32 { - if 0x5+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5+16) - }(), func() uint32 { - if 0x6+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6+16) - }(), func() uint32 { - if 0x7+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7+16) - }(), - func() uint32 { - if 0x8+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8+16) - }(), func() uint32 { - if 0x9+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9+16) - }(), func() uint32 { - if 0xa+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa+16) - }(), func() uint32 { - if 0xb+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb+16) - }(), func() uint32 { - if 0xc+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc+16) - }(), func() uint32 { - if 0xd+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd+16) - }(), func() uint32 { - if 0xe+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe+16) - }(), func() uint32 { - if 0xf+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf+16) - }(), - func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x0 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x0), func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x1 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x1), func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x2 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x2), func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x3 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x3), func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x4 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x4), func() uint32 { - if 0x5 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x5 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x5), func() uint32 { - if 0x6 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x6 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x6), func() uint32 { - if 0x7 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x7 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x7), - func() uint32 { - if 0x8 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x8 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x8), func() uint32 { - if 0x9 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x9 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x9), func() uint32 { - if 0xa == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xa == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xa), func() uint32 { - if 0xb == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xb == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xb), func() uint32 { - if 0xc == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xc == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xc), func() uint32 { - if 0xd == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xd == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xd), func() uint32 { - if 0xe == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xe == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xe), func() uint32 { - if 0xf == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xf == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xf), - func() uint32 { - if 0x0 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x0 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x0), func() uint32 { - if 0x1 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x1 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x1), func() uint32 { - if 0x2 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x2 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x2), func() uint32 { - if 0x3 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x3 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x3), func() uint32 { - if 0x4 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x4 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x4), -} /* internal.c:18:16 */ - -type wint_t = uint32 /* alltypes.h:191:18 */ - -type wctype_t = uint32 /* alltypes.h:196:23 */ - -type __mbstate_t = struct { - __opaque1 uint32 - __opaque2 uint32 -} /* alltypes.h:330:9 */ - -type mbstate_t = __mbstate_t /* alltypes.h:330:63 */ - -func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */ - if __ccgo_strace { - trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var c uint32 - var s uintptr - var N uint32 - // var dummy wchar_t at bp, 4 - s = src - N = n - - if !!(st != 0) { - goto __1 - } - st = uintptr(unsafe.Pointer(&_sinternal_state)) -__1: - ; - c = *(*uint32)(unsafe.Pointer(st)) - - if !!(s != 0) { - goto __2 - } - if !(c != 0) { - goto __4 - } - goto ilseq -__4: - ; - return size_t(0) - goto __3 -__2: - if !!(wc != 0) { - goto __5 - } - wc = bp /* &dummy */ -__5: - ; -__3: - ; - - if !!(n != 0) { - goto __6 - } - return Uint32FromInt32(-2) -__6: - ; - if !!(c != 0) { - goto __7 - } - if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) { - goto __8 - } - return BoolUint32(!!(int32(AssignPtrUint32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s))))) != 0)) -__8: - ; - if !(func() int32 { - if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { - return 4 - } - return 1 - }() == 1) { - goto __9 - } - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s))))) - return 1 -__9: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) { - goto __10 - } - goto ilseq -__10: - ; - c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2] - n-- -__7: - ; - - if !(n != 0) { - goto __11 - } - if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) { - goto __12 - } - goto ilseq -__12: - ; -loop: - c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80) - n-- - if !!(c&(uint32(1)<<31) != 0) { - goto __13 - } - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*wchar_t)(unsafe.Pointer(wc)) = c - return N - n -__13: - ; - if !(n != 0) { - goto __14 - } - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) { - goto __15 - } - goto ilseq -__15: - ; - goto loop -__14: - ; -__11: - ; - - *(*uint32)(unsafe.Pointer(st)) = c - return Uint32FromInt32(-2) -ilseq: - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 - return Uint32FromInt32(-1) -} - -var _sinternal_state uint32 /* mbrtowc.c:8:18: */ - -func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) - } - return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0)) -} - -type imaxdiv_t = struct { - quot intmax_t - rem intmax_t -} /* inttypes.h:14:40 */ - -type socklen_t = uint32 /* alltypes.h:354:18 */ - -type sa_family_t = uint16 /* alltypes.h:359:24 */ - -type msghdr = struct { - msg_name uintptr - msg_namelen socklen_t - msg_iov uintptr - msg_iovlen int32 - msg_control uintptr - msg_controllen socklen_t - msg_flags int32 -} /* socket.h:22:1 */ - -type cmsghdr = struct { - cmsg_len socklen_t - cmsg_level int32 - cmsg_type int32 -} /* socket.h:44:1 */ - -type linger = struct { - l_onoff int32 - l_linger int32 -} /* socket.h:74:1 */ - -type sockaddr = struct { - sa_family sa_family_t - sa_data [14]uint8 -} /* socket.h:367:1 */ - -type sockaddr_storage = struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 -} /* socket.h:372:1 */ - -type in_port_t = uint16_t /* in.h:12:18 */ -type in_addr_t = uint32_t /* in.h:13:18 */ -type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */ - -type sockaddr_in = struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t -} /* in.h:16:1 */ - -type in6_addr = struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } -} /* in.h:23:1 */ - -type sockaddr_in6 = struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t -} /* in.h:34:1 */ - -type ipv6_mreq = struct { - ipv6mr_multiaddr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipv6mr_interface uint32 -} /* in.h:42:1 */ - -type ip_opts = struct { - ip_dst struct{ s_addr in_addr_t } - ip_opts [40]uint8 -} /* in.h:229:1 */ - -type ip_mreq = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } -} /* in.h:247:1 */ - -type ip_mreqn = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_address struct{ s_addr in_addr_t } - imr_ifindex int32 -} /* in.h:252:1 */ - -type ip_mreq_source = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } - imr_sourceaddr struct{ s_addr in_addr_t } -} /* in.h:258:1 */ - -type ip_msfilter = struct { - imsf_multiaddr struct{ s_addr in_addr_t } - imsf_interface struct{ s_addr in_addr_t } - imsf_fmode uint32_t - imsf_numsrc uint32_t - imsf_slist [1]struct{ s_addr in_addr_t } -} /* in.h:264:1 */ - -type group_req = struct { - gr_interface uint32_t - gr_group struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 - } -} /* in.h:275:1 */ - -type group_source_req = struct { - gsr_interface uint32_t - gsr_group struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 - } - gsr_source struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 - } -} /* in.h:280:1 */ - -type group_filter = struct { - gf_interface uint32_t - gf_group struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 - } - gf_fmode uint32_t - gf_numsrc uint32_t - gf_slist [1]struct { - ss_family sa_family_t - __ss_padding [122]uint8 - __ss_align uint32 - } -} /* in.h:286:1 */ - -type in_pktinfo = struct { - ipi_ifindex int32 - ipi_spec_dst struct{ s_addr in_addr_t } - ipi_addr struct{ s_addr in_addr_t } -} /* in.h:297:1 */ - -type in6_pktinfo = struct { - ipi6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipi6_ifindex uint32 -} /* in.h:303:1 */ - -type ip6_mtuinfo = struct { - ip6m_addr struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t - } - ip6m_mtu uint32_t -} /* in.h:308:1 */ - -type addrinfo = struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr -} /* netdb.h:16:1 */ - -// Legacy functions follow (marked OBsolete in SUS) - -type netent = struct { - n_name uintptr - n_aliases uintptr - n_addrtype int32 - n_net uint32_t -} /* netdb.h:62:1 */ - -type hostent = struct { - h_name uintptr - h_aliases uintptr - h_addrtype int32 - h_length int32 - h_addr_list uintptr -} /* netdb.h:69:1 */ - -type servent = struct { - s_name uintptr - s_aliases uintptr - s_port int32 - s_proto uintptr -} /* netdb.h:78:1 */ - -type protoent = struct { - p_name uintptr - p_aliases uintptr - p_proto int32 -} /* netdb.h:85:1 */ - -type aibuf = struct { - ai struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr - } - sa struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte - } - lock [1]int32 - slot int16 - ref int16 -} /* lookup.h:10:1 */ - -type sa = struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte -} /* lookup.h:10:1 */ - -type address = struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 -} /* lookup.h:20:1 */ - -type service = struct { - port uint16_t - proto uint8 - socktype uint8 -} /* lookup.h:27:1 */ - -type resolvconf = struct { - ns [3]struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 - } - nns uint32 - attempts uint32 - ndots uint32 - timeout uint32 -} /* lookup.h:34:1 */ - -func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ - if __ccgo_strace { - trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) - } - var cnt size_t - cnt = size_t(1) -__1: - if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) { - goto __3 - } - goto __2 -__2: - cnt++ - p = (*addrinfo)(unsafe.Pointer(p)).ai_next - goto __1 - goto __3 -__3: - ; - var b uintptr = p - uintptr(uint32(uintptr(0))) - b -= 68 * uintptr((*aibuf)(unsafe.Pointer(b)).slot) - //TODO LOCK(b->lock); - if !(int32(AssignSubPtrInt16(b+66, int16(cnt))) != 0) { - Xfree(tls, b) - } - //TODO else UNLOCK(b->lock); -} - -func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ - if __ccgo_strace { - trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) - } - bp := tls.Alloc(1608) - defer tls.Free(1608) - - // var ports [2]service at bp, 8 - - // var addrs [48]address at bp+8, 1344 - - // var canon [256]uint8 at bp+1352, 256 - - var outcanon uintptr - var nservs int32 - var naddrs int32 - var nais int32 - var canon_len int32 - var i int32 - var j int32 - var k int32 - var family int32 = 0 - var flags int32 = 0 - var proto int32 = 0 - var socktype int32 = 0 - var out uintptr - - if !(host != 0) && !(serv != 0) { - return -2 - } - - if hint != 0 { - family = (*addrinfo)(unsafe.Pointer(hint)).ai_family - flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags - proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol - socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype - - var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 - if flags&mask != flags { - return -1 - } - - switch family { - case 2: - fallthrough - case 10: - fallthrough - case 0: - break - fallthrough - default: - return -6 - } - } - - if flags&0x20 != 0 { - Xabort(tls) //TODO- - // /* Define the "an address is configured" condition for address - // * families via ability to create a socket for the family plus - // * routability of the loopback address for the family. */ - // static const struct sockaddr_in lo4 = { - // .sin_family = AF_INET, .sin_port = 65535, - // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN - // ? 0x7f000001 : 0x0100007f - // }; - // static const struct sockaddr_in6 lo6 = { - // .sin6_family = AF_INET6, .sin6_port = 65535, - // .sin6_addr = IN6ADDR_LOOPBACK_INIT - // }; - // int tf[2] = { AF_INET, AF_INET6 }; - // const void *ta[2] = { &lo4, &lo6 }; - // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; - // for (i=0; i<2; i++) { - // if (family==tf[1-i]) continue; - // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, - // IPPROTO_UDP); - // if (s>=0) { - // int cs; - // pthread_setcancelstate( - // PTHREAD_CANCEL_DISABLE, &cs); - // int r = connect(s, ta[i], tl[i]); - // pthread_setcancelstate(cs, 0); - // close(s); - // if (!r) continue; - // } - // switch (errno) { - // case EADDRNOTAVAIL: - // case EAFNOSUPPORT: - // case EHOSTUNREACH: - // case ENETDOWN: - // case ENETUNREACH: - // break; - // default: - // return EAI_SYSTEM; - // } - // if (family == tf[i]) return EAI_NONAME; - // family = tf[1-i]; - // } - } - - nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) - if nservs < 0 { - return nservs - } - - naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) - if naddrs < 0 { - return naddrs - } - - nais = nservs * naddrs - canon_len = int32(Xstrlen(tls, bp+1352)) - out = Xcalloc(tls, uint32(1), uint32(nais)*uint32(unsafe.Sizeof(aibuf{}))+uint32(canon_len)+uint32(1)) - if !(out != 0) { - return -10 - } - - if canon_len != 0 { - outcanon = out + uintptr(nais)*68 - Xmemcpy(tls, outcanon, bp+1352, uint32(canon_len+1)) - } else { - outcanon = uintptr(0) - } - - for k = AssignInt32(&i, 0); i < naddrs; i++ { - j = 0 - __1: - if !(j < nservs) { - goto __3 - } - { - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).slot = int16(k) - //TODO out[k].ai = (struct addrinfo){ - //TODO .ai_family = addrs[i].family, - //TODO .ai_socktype = ports[j].socktype, - //TODO .ai_protocol = ports[j].proto, - //TODO .ai_addrlen = addrs[i].family == AF_INET - //TODO ? sizeof(struct sockaddr_in) - //TODO : sizeof(struct sockaddr_in6), - //TODO .ai_addr = (void *)&out[k].sa, - //TODO .ai_canonname = outcanon }; - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_addrlen = func() uint32 { - if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 { - return uint32(unsafe.Sizeof(sockaddr_in{})) - } - return uint32(unsafe.Sizeof(sockaddr_in6{})) - }() - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_addr = out + uintptr(k)*68 + 32 - (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).ai.ai_canonname = outcanon - if k != 0 { - (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*68)).ai.ai_next = out + uintptr(k)*68 - } - switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family { - case 2: - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin_family = sa_family_t(2) - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - Xmemcpy(tls, out+uintptr(k)*68+32+4, bp+8+uintptr(i)*28+8, uint32(4)) - break - case 10: - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_family = sa_family_t(10) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid - Xmemcpy(tls, out+uintptr(k)*68+32+8, bp+8+uintptr(i)*28+8, uint32(16)) - break - } - - } - goto __2 - __2: - j++ - k++ - goto __1 - goto __3 - __3: - } - (*aibuf)(unsafe.Pointer(out)).ref = int16(nais) - *(*uintptr)(unsafe.Pointer(res)) = out - return 0 -} - -type ucred = struct { - pid pid_t - uid uid_t - gid gid_t -} /* socket.h:57:1 */ - -type mmsghdr = struct { - msg_hdr struct { - msg_name uintptr - msg_namelen socklen_t - msg_iov uintptr - msg_iovlen int32 - msg_control uintptr - msg_controllen socklen_t - msg_flags int32 - } - msg_len uint32 -} /* socket.h:63:1 */ - -func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var size size_t = size_t(63) - // var res uintptr at bp, 4 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh) - _sh = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1))) - if !(_sh != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyaddr_r(tls, a, l, af, _sh, - _sh+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh -} - -var _sh uintptr /* gethostbyaddr.c:9:24: */ - -func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(28) - defer tls.Free(28) - - //TODO union { - //TODO struct sockaddr_in sin; - //TODO struct sockaddr_in6 sin6; - //TODO } sa = { .sin.sin_family = af }; - *(*struct { - sin sockaddr_in - _ [12]byte - })(unsafe.Pointer(bp)) = struct { - sin sockaddr_in - _ [12]byte - }{} //TODO- - (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO- - var sl socklen_t - if af == 10 { - sl = uint32(unsafe.Sizeof(sockaddr_in6{})) - } else { - sl = uint32(unsafe.Sizeof(sockaddr_in{})) - } - var i int32 - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - - // Load address argument into sockaddr structure - if af == 10 && l == socklen_t(16) { - Xmemcpy(tls, bp+8, a, uint32(16)) - } else if af == 2 && l == socklen_t(4) { - Xmemcpy(tls, bp+4, a, uint32(4)) - } else { - *(*int32)(unsafe.Pointer(err)) = 3 - return 22 - } - - // Align buffer and check for space for pointers and ip address - i = int32(uintptr_t(buf) & (uint32(unsafe.Sizeof(uintptr(0))) - uint32(1))) - if !(i != 0) { - i = int32(unsafe.Sizeof(uintptr(0))) - } - if buflen <= uint32(5)*uint32(unsafe.Sizeof(uintptr(0)))-uint32(i)+l { - return 34 - } - buf += uintptr(uint32(unsafe.Sizeof(uintptr(0))) - uint32(i)) - buflen = buflen - (uint32(5)*uint32(unsafe.Sizeof(uintptr(0))) - uint32(i) + l) - - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint32(2) * uint32(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint32(2) * uint32(unsafe.Sizeof(uintptr(0)))) - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, l) - buf += uintptr(l) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*4)) = uintptr(0) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = uintptr(0) - - switch Xgetnameinfo(tls, bp, sl, buf, buflen, uintptr(0), uint32(0), 0) { - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - case -12: - return 34 - default: - fallthrough - case -10: - fallthrough - case -11: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - case 0: - break - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = int32(l) - (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - return Xgethostbyname2(tls, name, 2) -} - -func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var size size_t = size_t(63) - // var res uintptr at bp, 4 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh1) - _sh1 = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1))) - if !(_sh1 != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyname2_r(tls, name, af, _sh1, - _sh1+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh1 -} - -var _sh1 uintptr /* gethostbyname2.c:10:24: */ - -func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(1600) - defer tls.Free(1600) - - // var addrs [48]address at bp, 1344 - - // var canon [256]uint8 at bp+1344, 256 - - var i int32 - var cnt int32 - var align size_t - var need size_t - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) - if cnt < 0 { - switch cnt { - case -2: - *(*int32)(unsafe.Pointer(err)) = 1 - return 2 - fallthrough - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - fallthrough - default: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return 74 - fallthrough - case -10: - fallthrough - case -11: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - } - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = func() int32 { - if af == 10 { - return 16 - } - return 4 - }() - - // Align buffer - align = -uintptr_t(buf) & (uint32(unsafe.Sizeof(uintptr(0))) - uint32(1)) - - need = uint32(4) * uint32(unsafe.Sizeof(uintptr(0))) - need = need + uint32(cnt+1)*(uint32(unsafe.Sizeof(uintptr(0)))+uint32((*hostent)(unsafe.Pointer(h)).h_length)) - need = need + (Xstrlen(tls, name) + size_t(1)) - need = need + (Xstrlen(tls, bp+1344) + size_t(1)) - need = need + align - - if need > buflen { - return 34 - } - - buf += uintptr(align) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint32(3) * uint32(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint32(cnt+1) * uint32(unsafe.Sizeof(uintptr(0)))) - - for i = 0; i < cnt; i++ { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)) = buf - buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length) - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)), bp+uintptr(i)*28+8, uint32((*hostent)(unsafe.Pointer(h)).h_length)) - } - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*4)) = uintptr(0) - - (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf) - Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344) - buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + size_t(1)) - - if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = buf - Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)), name) - buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4))) + size_t(1)) - } else { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*4)) = uintptr(0) - } - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*4)) = uintptr(0) - - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */ - if __ccgo_strace { - trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) - } - return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err) -} - -type if_nameindex = struct { - if_index uint32 - if_name uintptr -} /* if.h:12:1 */ - -type ifaddr = struct { - ifa_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - ifa_ifu struct { - ifu_broadaddr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - } - ifa_ifp uintptr - ifa_next uintptr -} /* if.h:51:1 */ - -type ifmap = struct { - mem_start uint32 - mem_end uint32 - base_addr uint16 - irq uint8 - dma uint8 - port uint8 - _ [3]byte -} /* if.h:64:1 */ - -type ifreq = struct { - ifr_ifrn struct{ ifrn_name [16]uint8 } - ifr_ifru struct { - _ [0]uint32 - ifru_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - } -} /* if.h:76:1 */ - -type ifconf = struct { - ifc_len int32 - ifc_ifcu struct{ ifcu_buf uintptr } -} /* if.h:116:1 */ - -type ns_sect = uint32 /* nameser.h:37:3 */ - -type __ns_msg = struct { - _msg uintptr - _eom uintptr - _id uint16_t - _flags uint16_t - _counts [4]uint16_t - _sections [4]uintptr - _sect ns_sect - _rrnum int32 - _msg_ptr uintptr -} /* nameser.h:39:9 */ - -type ns_msg = __ns_msg /* nameser.h:46:3 */ - -type _ns_flagdata = struct { - mask int32 - shift int32 -} /* nameser.h:48:1 */ - -type __ns_rr = struct { - name [1025]uint8 - _ [1]byte - __type uint16_t - rr_class uint16_t - _ [2]byte - ttl uint32_t - rdlength uint16_t - _ [2]byte - rdata uintptr -} /* nameser.h:59:9 */ - -type ns_rr = __ns_rr /* nameser.h:66:3 */ - -type ns_flag = uint32 /* nameser.h:87:3 */ - -type ns_opcode = uint32 /* nameser.h:96:3 */ - -type ns_rcode = uint32 /* nameser.h:115:3 */ - -type ns_update_operation = uint32 /* nameser.h:121:3 */ - -type ns_tsig_key1 = struct { - name [1025]uint8 - alg [1025]uint8 - _ [2]byte - data uintptr - len int32 -} /* nameser.h:123:1 */ - -type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ - -type ns_tcp_tsig_state1 = struct { - counter int32 - key uintptr - ctx uintptr - sig [512]uint8 - siglen int32 -} /* nameser.h:130:1 */ - -type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ - -type ns_type = uint32 /* nameser.h:200:3 */ - -type ns_class = uint32 /* nameser.h:219:3 */ - -type ns_key_types = uint32 /* nameser.h:226:3 */ - -type ns_cert_types = uint32 /* nameser.h:234:3 */ - -type HEADER = struct { - _ [0]uint32 - id uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */ - qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ - nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ -} /* nameser.h:353:3 */ - -// unused; purely for broken apps -type __res_state = struct { - retrans int32 - retry int32 - options uint32 - nscount int32 - nsaddr_list [3]struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - id uint16 - _ [2]byte - dnsrch [7]uintptr - defdname [256]uint8 - pfcode uint32 - ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ - _ [4]byte - sort_list [10]struct { - addr struct{ s_addr in_addr_t } - mask uint32_t - } - qhook uintptr - rhook uintptr - res_h_errno int32 - _vcsock int32 - _flags uint32 - _u struct { - _ [0]uint32 - pad [52]uint8 - } -} /* resolv.h:26:9 */ - -// unused; purely for broken apps -type res_state = uintptr /* resolv.h:62:3 */ - -type res_sym = struct { - number int32 - name uintptr - humanname uintptr -} /* resolv.h:70:1 */ - -func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ - p += uintptr(uint32(3) * uint32(unsafe.Sizeof(int32(0)))) - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0) - for ok := true; ok; ok = x != 0 { - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10)) - x = x / uint32(10) - } - return p -} - -func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ - bp := tls.Alloc(32) - defer tls.Free(32) - - Xsprintf(tls, s, ts+25, - VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) -} - -func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ - var i int32 - for i = 15; i >= 0; i-- { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - } - Xstrcpy(tls, s, ts+50) -} - -var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ - -func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ - bp := tls.Alloc(556) - defer tls.Free(556) - - // var line [512]uint8 at bp+16, 512 - - var p uintptr - var z uintptr - var _buf [1032]uint8 - _ = _buf - // var atmp [16]uint8 at bp, 16 - - // var iplit address at bp+528, 28 - - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - return - } - if family == 2 { - Xmemcpy(tls, bp+uintptr(12), a, uint32(4)) - Xmemcpy(tls, bp, ts+90, uint32(12)) - a = bp /* &atmp[0] */ - } - for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 { - if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - - for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { - continue - } - - if (*address)(unsafe.Pointer(bp+528)).family == 2 { - Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint32(4)) - Xmemcpy(tls, bp+528+8, ts+90, uint32(12)) - (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0) - } - - if Xmemcmp(tls, a, bp+528+8, uint32(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid { - continue - } - - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if (int32(z)-int32(p))/1 < 256 { - Xmemcpy(tls, buf, p, uint32((int32(z)-int32(p))/1+1)) - break - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) -} - -func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ - Xabort(tls) //TODO- - // unsigned long svport; - // char line[128], *p, *z; - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) return; - // while (fgets(line, sizeof line, f)) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // for (p=line; *p && !isspace(*p); p++); - // if (!*p) continue; - // *p++ = 0; - // svport = strtoul(p, &z, 10); - - // if (svport != port || z==p) continue; - // if (dgram && strncmp(z, "/udp", 4)) continue; - // if (!dgram && strncmp(z, "/tcp", 4)) continue; - // if (p-line > 32) continue; - - // memcpy(buf, line, p-line); - // break; - // } - // __fclose_ca(f); -} - -func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */ - if __ccgo_strace { - trc("tls=%v sa1=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa1, sl, node, nodelen, serv, servlen, flags, origin(2)) - } - bp := tls.Alloc(347) - defer tls.Free(347) - - // var ptr [78]uint8 at bp, 78 - - // var buf [256]uint8 at bp+78, 256 - - // var num [13]uint8 at bp+334, 13 - - var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family) - var a uintptr - var scopeid uint32 - - switch af { - case 2: - a = sa1 + 4 - if sl < socklen_t(unsafe.Sizeof(sockaddr_in{})) { - return -6 - } - mkptr4(tls, bp, a) - scopeid = uint32(0) - break - case 10: - a = sa1 + 8 - if sl < socklen_t(unsafe.Sizeof(sockaddr_in6{})) { - return -6 - } - if Xmemcmp(tls, a, ts+90, uint32(12)) != 0 { - mkptr6(tls, bp, a) - } else { - mkptr4(tls, bp, a+uintptr(12)) - } - scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id - break - default: - return -6 - } - - if node != 0 && nodelen != 0 { - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x01 != 0) { - reverse_hosts(tls, bp+78, a, scopeid, af) - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) { - Xabort(tls) //TODO- - // unsigned char query[18+PTR_MAX], reply[512]; - // int qlen = __res_mkquery(0, ptr, 1, RR_PTR, - // 0, 0, 0, query, sizeof query); - // query[3] = 0; /* don't need AD flag */ - // int rlen = __res_send(query, qlen, reply, sizeof reply); - // buf[0] = 0; - // if (rlen > 0) - // __dns_parse(reply, rlen, dns_parse_callback, buf); - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) { - if flags&0x08 != 0 { - return -2 - } - Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{}))) - if scopeid != 0 { - Xabort(tls) //TODO- - // char *p = 0, tmp[IF_NAMESIZE+1]; - // if (!(flags & NI_NUMERICSCOPE) && - // (IN6_IS_ADDR_LINKLOCAL(a) || - // IN6_IS_ADDR_MC_LINKLOCAL(a))) - // p = if_indextoname(scopeid, tmp+1); - // if (!p) - // p = itoa(num, scopeid); - // *--p = '%'; - // strcat(buf, p); - } - } - if Xstrlen(tls, bp+78) >= nodelen { - return -12 - } - Xstrcpy(tls, node, bp+78) - } - - if serv != 0 && servlen != 0 { - var p uintptr = bp + 78 /* buf */ - var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port)) - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x02 != 0) { - reverse_services(tls, bp+78, port, flags&0x10) - } - if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - p = itoa(tls, bp+334, uint32(port)) - } - if Xstrlen(tls, p) >= servlen { - return -12 - } - Xstrcpy(tls, serv, p) - } - - return 0 -} - -var Xh_errno int32 /* h_errno.c:4:5: */ - -func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&Xh_errno)) -} - -func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ - if __ccgo_strace { - trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) - } - bp := tls.Alloc(20) - defer tls.Free(20) - - var s uintptr = s0 - var d uintptr = dest - *(*[4]uint32)(unsafe.Pointer(bp /* a */)) = [4]uint32{0: uint32(0)} - // var z uintptr at bp+16, 4 - - var i int32 - - for i = 0; i < 4; i++ { - *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) = Xstrtoul(tls, s, bp+16, 0) - if *(*uintptr)(unsafe.Pointer(bp + 16)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != '.' || !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) - }() != 0) { - return 0 - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != 0) { - break - } - s = *(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(1) - } - if i == 4 { - return 0 - } - switch i { - case 0: - *(*uint32)(unsafe.Pointer(bp + 1*4)) = *(*uint32)(unsafe.Pointer(bp)) & uint32(0xffffff) - AssignShrPtrUint32(bp, int(24)) - fallthrough - case 1: - *(*uint32)(unsafe.Pointer(bp + 2*4)) = *(*uint32)(unsafe.Pointer(bp + 1*4)) & uint32(0xffff) - AssignShrPtrUint32(bp+1*4, int(16)) - fallthrough - case 2: - *(*uint32)(unsafe.Pointer(bp + 3*4)) = *(*uint32)(unsafe.Pointer(bp + 2*4)) & uint32(0xff) - AssignShrPtrUint32(bp+2*4, int(8)) - } - for i = 0; i < 4; i++ { - if *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) > uint32(255) { - return 0 - } - *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint32)(unsafe.Pointer(bp + uintptr(i)*4))) - } - return 1 -} - -func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ - if __ccgo_strace { - trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var a uintptr = a0 - var i int32 - var j int32 - var max int32 - var best int32 - // var buf [100]uint8 at bp+176, 100 - - switch af { - case 2: - if socklen_t(Xsnprintf(tls, s, l, ts+103, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { - return s - } - break - case 10: - if Xmemcmp(tls, a, ts+90, uint32(12)) != 0 { - Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]uint8{})), - ts+115, - VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } else { - Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]uint8{})), - ts+139, - VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } - // Replace longest /(^0|:)[:0]{2,}/ with "::" - i = AssignInt32(&best, 0) - max = 2 - for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { - if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { - continue - } - j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169)) - if j > max { - best = i - max = j - } - } - if max > 3 { - *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':')) - Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint32(i-best-max+1)) - } - if Xstrlen(tls, bp+176) < l { - Xstrcpy(tls, s, bp+176) - return s - } - break - default: - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return uintptr(0) - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 - return uintptr(0) -} - -func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ - if c-uint32('0') < uint32(10) { - return int32(c - uint32('0')) - } - c = c | uint32(32) - if c-uint32('a') < uint32(6) { - return int32(c - uint32('a') + uint32(10)) - } - return -1 -} - -func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ - if __ccgo_strace { - trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) - } - bp := tls.Alloc(16) - defer tls.Free(16) - - // var ip [8]uint16_t at bp, 16 - - var a uintptr = a0 - var i int32 - var j int32 - var v int32 - var d int32 - var brk int32 = -1 - var need_v4 int32 = 0 - - if af == 2 { - for i = 0; i < 4; i++ { - for v = AssignInt32(&j, 0); j < 3 && func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) - }() != 0; j++ { - v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0' - } - if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 { - return 0 - } - *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { - return 1 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' { - return 0 - } - s += uintptr(j + 1) - } - return 0 - } else if af != 10 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return -1 - } - - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { - return 0 - } - - for i = 0; ; i++ { - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 { - brk = i - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { - break - } - if i == 7 { - return 0 - } - continue - } - for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { - v = 16*v + d - } - if j == 0 { - return 0 - } - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) - if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { - break - } - if i == 7 { - return 0 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' { - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { - return 0 - } - need_v4 = 1 - i++ - break - } - s += uintptr(j + 1) - } - if brk >= 0 { - Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint32(2*(i+1-brk))) - for j = 0; j < 7-i; j++ { - *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) - } - } - for j = 0; j < 8; j++ { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) - } - if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { - return 0 - } - return 1 -} - -func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) - } - bp := tls.Alloc(88) - defer tls.Free(88) - - // var a4 in_addr at bp, 4 - - // var a6 in6_addr at bp+68, 16 - - if X__inet_aton(tls, name, bp) > 0 { - if family == 10 { // wrong family - return -2 - } - Xmemcpy(tls, buf+8, bp, uint32(unsafe.Sizeof(in_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 2 - (*address)(unsafe.Pointer(buf)).scopeid = uint32(0) - return 1 - } - // var tmp [64]uint8 at bp+4, 64 - - var p uintptr = Xstrchr(tls, name, '%') - // var z uintptr at bp+84, 4 - - var scopeid uint64 = uint64(0) - if p != 0 && (int32(p)-int32(name))/1 < 64 { - Xmemcpy(tls, bp+4, name, uint32((int32(p)-int32(name))/1)) - *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int32(p)-int32(name))/1))) = uint8(0) - name = bp + 4 /* &tmp[0] */ - } - - if Xinet_pton(tls, 10, name, bp+68) <= 0 { - return 0 - } - if family == 2 { // wrong family - return -2 - } - - Xmemcpy(tls, buf+8, bp+68, uint32(unsafe.Sizeof(in6_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 10 - if p != 0 { - if func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) - }() != 0 { - scopeid = Xstrtoull(tls, p, bp+84, 10) - } else { - *(*uintptr)(unsafe.Pointer(bp + 84 /* z */)) = p - uintptr(1) - } - if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)))) != 0 { - Xabort(tls) //TODO- - // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && - // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) - // return EAI_NONAME; - // scopeid = if_nametoindex(p); - // if (!scopeid) return EAI_NONAME; - } - if scopeid > uint64(0xffffffff) { - return -2 - } - } - (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid) - return 1 -} - -func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ - var s uintptr - //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; - if Xstrnlen(tls, host, uint32(255))-size_t(1) >= size_t(254) { - return 0 - } - for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ { - } - return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) -} - -var Xzero_struct_address address /* lookup_name.c:27:16: */ - -func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ - var cnt int32 = 0 - if name != 0 { - return 0 - } - if flags&0x01 != 0 { - //TODO if (family != AF_INET6) - //TODO buf[cnt++] = (struct address){ .family = AF_INET }; - if family != 10 { - var x = Xzero_struct_address - x.family = 2 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - //TODO if (family != AF_INET) - //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; - if family != 2 { - var x = Xzero_struct_address - x.family = 10 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - } else { - Xabort(tls) //TODO- - // if (family != AF_INET6) - // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; - // if (family != AF_INET) - // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; - } - return cnt -} - -func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ - return X__lookup_ipliteral(tls, buf, name, family) -} - -func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var line [512]uint8 at bp, 512 - - var l size_t = Xstrlen(tls, name) - var cnt int32 = 0 - var badfam int32 = 0 - var _buf [1032]uint8 - _ = _buf - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var _f FILE - _ = _f - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { - case 2: - fallthrough - case 20: - fallthrough - case 13: - return 0 - fallthrough - default: - return -11 - } - } - for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 { - var p uintptr - var z uintptr - - if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ { - } - if !(p != 0) { - continue - } - - // Isolate IP address to parse - for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { - case 1: - cnt++ - break - case 0: - continue - default: - badfam = -2 - continue - } - - // Extract first name as canonical name - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if is_valid_hostname(tls, p) != 0 { - Xmemcpy(tls, canon, p, uint32((int32(z)-int32(p))/1+1)) - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) - if cnt != 0 { - return cnt - } - return badfam -} - -type dpc_ctx = struct { - addrs uintptr - canon uintptr - cnt int32 -} /* lookup_name.c:112:1 */ - -func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ - return -1 //TODO- - Xabort(tls) - return int32(0) //TODO- - // char search[256]; - // struct resolvconf conf; - // size_t l, dots; - // char *p, *z; - - // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; - - // /* Count dots, suppress search when >=ndots or name ends in - // * a dot, which is an explicit request for global scope. */ - // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; - // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; - - // /* Strip final dot for canon, fail if multiple trailing dots. */ - // if (name[l-1]=='.') l--; - // if (!l || name[l-1]=='.') return EAI_NONAME; - - // /* This can never happen; the caller already checked length. */ - // if (l >= 256) return EAI_NONAME; - - // /* Name with search domain appended is setup in canon[]. This both - // * provides the desired default canonical name (if the requested - // * name is not a CNAME record) and serves as a buffer for passing - // * the full requested name to name_from_dns. */ - // memcpy(canon, name, l); - // canon[l] = '.'; - - // for (p=search; *p; p=z) { - // for (; isspace(*p); p++); - // for (z=p; *z && !isspace(*z); z++); - // if (z==p) break; - // if (z-p < 256 - l - 1) { - // memcpy(canon+l+1, p, z-p); - // canon[z-p+1+l] = 0; - // int cnt = name_from_dns(buf, canon, canon, family, &conf); - // if (cnt) return cnt; - // } - // } - - // canon[l] = 0; - // return name_from_dns(buf, canon, name, family, &conf); -} - -type policy = struct { - addr [16]uint8 - len uint8 - mask uint8 - prec uint8 - label uint8 -} /* lookup_name.c:237:14 */ - -var defpolicy = [6]policy{ - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)}, - // Last rule must match all addresses to stop loop. - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)}, -} /* lookup_name.c:241:3 */ - -func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ - var i int32 - for i = 0; ; i++ { - if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint32(defpolicy[i].len)) != 0 { - continue - } - if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) != - int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) { - continue - } - return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 - } - return uintptr(0) -} - -func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ - return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label) -} - -func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { - return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { - return 2 - } - if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 { - return 2 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { - return 5 - } - return 14 -} - -func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ - // FIXME: The common prefix length should be limited to no greater - // than the nominal length of the prefix portion of the source - // address. However the definition of the source prefix length is - // not clear and thus this limiting is not yet implemented. - var i uint32 - for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ { - } - return int32(i) -} - -func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ - var a uintptr = _a - var b uintptr = _b - return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey -} - -func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) - } - bp := tls.Alloc(92) - defer tls.Free(92) - - var cnt int32 = 0 - var i int32 - var j int32 - _ = j - - *(*uint8)(unsafe.Pointer(canon)) = uint8(0) - if name != 0 { - // reject empty name and check len so it fits into temp bufs - var l size_t = Xstrnlen(tls, name, uint32(255)) - if l-size_t(1) >= size_t(254) { - return -2 - } - Xmemcpy(tls, canon, name, l+size_t(1)) - } - - // Procedurally, a request for v6 addresses with the v4-mapped - // flag set is like a request for unspecified family, followed - // by filtering of the results. - if flags&0x08 != 0 { - if family == 10 { - family = 0 - } else { - flags = flags - 0x08 - } - } - - // Try each backend until there's at least one result. - cnt = name_from_null(tls, buf, name, family, flags) - if !(cnt != 0) { - cnt = name_from_numeric(tls, buf, name, family) - } - if !(cnt != 0) && !(flags&0x04 != 0) { - cnt = name_from_hosts(tls, buf, canon, name, family) - if !(cnt != 0) { - cnt = name_from_dns_search(tls, buf, canon, name, family) - } - } - if cnt <= 0 { - if cnt != 0 { - return cnt - } - return -2 - } - - // Filter/transform results for v4-mapped lookup, if requested. - if flags&0x08 != 0 { - Xabort(tls) //TODO- - // if (!(flags & AI_ALL)) { - // /* If any v6 results exist, remove v4 results. */ - // for (i=0; i= 0 { - if !(Xconnect(tls, fd, da, dalen) != 0) { - key = key | 0x40000000 - if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { - if family == 2 { - Xmemcpy(tls, - bp+28+8+uintptr(12), - bp+72+4, uint32(4)) - } - if dscope == scopeof(tls, bp+28+8) { - key = key | 0x20000000 - } - if dlabel == labelof(tls, bp+28+8) { - key = key | 0x10000000 - } - prefixlen = prefixmatch(tls, bp+28+8, - bp+8) - } - } - Xclose(tls, fd) - } - key = key | dprec<<20 - key = key | (15-dscope)<<16 - key = key | prefixlen<<8 - key = key | (48-i)<<0 - (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key - } - Xqsort(tls, buf, uint32(cnt), uint32(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr) int32 - }{addrcmp}))) - - //TODO pthread_setcancelstate(cs, 0); - - return cnt -} - -func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var line [128]uint8 - _ = line - var cnt int32 = 0 - var p uintptr - _ = p - *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ - var port uint32 = uint32(0) - - switch socktype { - case 1: - switch proto { - case 0: - proto = 6 - fallthrough - case 6: - break - default: - return -8 - } - break - case 2: - switch proto { - case 0: - proto = 17 - fallthrough - case 17: - break - default: - return -8 - } - fallthrough - case 0: - break - default: - if name != 0 { - return -8 - } - (*service)(unsafe.Pointer(buf)).port = uint16_t(0) - (*service)(unsafe.Pointer(buf)).proto = uint8(proto) - (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype) - return 1 - } - - if name != 0 { - if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) { - return -8 - } - port = Xstrtoul(tls, name, bp, 10) - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { - if port > uint32(65535) { - return -8 - } - if proto != 17 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6) - } - if proto != 6 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17) - } - return cnt - } - - if flags&0x400 != 0 { - return -2 - } - - var l size_t = Xstrlen(tls, name) - _ = l - - Xabort(tls) //TODO- - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) switch (errno) { - // case ENOENT: - // case ENOTDIR: - // case EACCES: - // return EAI_SERVICE; - // default: - // return EAI_SYSTEM; - // } - - Xabort(tls) //TODO- - // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // /* Find service name */ - // for(p=line; (p=strstr(p, name)); p++) { - // if (p>line && !isspace(p[-1])) continue; - // if (p[l] && !isspace(p[l])) continue; - // break; - // } - // if (!p) continue; - - // /* Skip past canonical name at beginning of line */ - // for (p=line; *p && !isspace(*p); p++); - - // port = strtoul(p, &z, 10); - // if (port > 65535 || z==p) continue; - // if (!strncmp(z, "/udp", 4)) { - // if (proto == IPPROTO_TCP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_DGRAM; - // buf[cnt++].proto = IPPROTO_UDP; - // } - // if (!strncmp(z, "/tcp", 4)) { - // if (proto == IPPROTO_UDP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_STREAM; - // buf[cnt++].proto = IPPROTO_TCP; - // } - // } - // __fclose_ca(f); - // return cnt > 0 ? cnt : EAI_SERVICE; - Xabort(tls) - return int32(0) //TODO- -} - -func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */ - x = x ^ x>>11 - x = x ^ x<<7&0x9D2C5680 - x = x ^ x<<15&0xEFC60000 - x = x ^ x>>18 - return x -} - -func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */ - if __ccgo_strace { - trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) - } - return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2)) -} - -func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var owner int32 = (*FILE)(unsafe.Pointer(f)).lock - var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid - if owner&CplInt32(0x40000000) == tid { - return 0 - } - owner = a_cas(tls, f+76, 0, tid) - if !(owner != 0) { - return 1 - } - for AssignInt32(&owner, a_cas(tls, f+76, 0, tid|0x40000000)) != 0 { - if owner&0x40000000 != 0 || a_cas(tls, f+76, owner, owner|0x40000000) == owner { - __futexwait(tls, f+76, owner|0x40000000, 1) - } - } - return 1 -} - -func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - if a_swap(tls, f+76, 0)&0x40000000 != 0 { - __wake(tls, f+76, 1, 1) - } -} - -func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - *(*int32)(unsafe.Pointer(f + 72)) |= (*FILE)(unsafe.Pointer(f)).mode - 1 - if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase { - (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint32(0)) - } - (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+28, AssignPtrUintptr(f+16, uintptr(0))) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 { - *(*uint32)(unsafe.Pointer(f)) |= uint32(32) - return -1 - } - (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+8, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size)) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 { - return -1 - } - return 0 -} - -func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - X__builtin_abort(tls) //TODO- - // __stdio_exit_needed(); -} - -// This function assumes it will never be called if there is already -// data buffered for reading. - -func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - bp := tls.Alloc(1) - defer tls.Free(1) - - // var c uint8 at bp, 1 - - if !(X__toread(tls, f) != 0) && (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint32(1)) == size_t(1) { - return int32(*(*uint8)(unsafe.Pointer(bp))) - } - return -1 -} - -func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) - } - var ret int32 - var ap va_list - _ = ap - ap = va - ret = Xvsscanf(tls, s, fmt, ap) - _ = ap - return ret -} - -type wctrans_t = uintptr /* wctype.h:20:19 */ - -func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */ - if !(dest != 0) { - return - } - switch size { - case -2: - *(*uint8)(unsafe.Pointer(dest)) = uint8(i) - break - case -1: - *(*int16)(unsafe.Pointer(dest)) = int16(i) - break - case 0: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 1: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 3: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - } -} - -func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */ - var p uintptr - var i uint32 - var ap2 va_list - _ = ap2 - ap2 = ap - for i = n; i > uint32(1); i-- { - VaUintptr(&ap2) - } - p = VaUintptr(&ap2) - _ = ap2 - return p -} - -func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */ - if __ccgo_strace { - trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var width int32 - var size int32 - var alloc int32 - var base int32 - var p uintptr - var c int32 - var t int32 - var s uintptr - var wcs uintptr - // var st mbstate_t at bp+268, 8 - - var dest uintptr - var invert int32 - var matches int32 - var x uint64 - var y float64 - var pos off_t - // var scanset [257]uint8 at bp, 257 - - var i size_t - var k size_t - // var wc wchar_t at bp+260, 4 - - var __need_unlock int32 - var tmp uintptr - var tmp1 uintptr - alloc = 0 - dest = uintptr(0) - matches = 0 - pos = int64(0) - __need_unlock = func() int32 { - if (*FILE)(unsafe.Pointer(f)).lock >= 0 { - return X__lockfile(tls, f) - } - return 0 - }() - - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __1 - } - X__toread(tls, f) -__1: - ; - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __2 - } - goto input_fail -__2: - ; - - p = fmt -__3: - if !(*(*uint8)(unsafe.Pointer(p)) != 0) { - goto __5 - } - - alloc = 0 - - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) { - goto __6 - } -__7: - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) { - goto __8 - } - p++ - goto __7 -__8: - ; - X__shlim(tls, f, int64(0)) -__9: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __10 - } - goto __9 -__10: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - goto __4 -__6: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') { - goto __11 - } - X__shlim(tls, f, int64(0)) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') { - goto __12 - } - p++ -__14: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __15 - } - goto __14 -__15: - ; - goto __13 -__12: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__13: - ; - if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __16 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(c < 0) { - goto __17 - } - goto input_fail -__17: - ; - goto match_fail -__16: - ; - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - goto __4 -__11: - ; - - p++ - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') { - goto __18 - } - dest = uintptr(0) - p++ - goto __19 -__18: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') { - goto __20 - } - dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0')) - p += uintptr(2) - goto __21 -__20: - dest = VaUintptr(&ap) -__21: - ; -__19: - ; - - width = 0 -__22: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0) { - goto __24 - } - width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0' - goto __23 -__23: - p++ - goto __22 - goto __24 -__24: - ; - - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') { - goto __25 - } - wcs = uintptr(0) - s = uintptr(0) - alloc = BoolInt32(!!(dest != 0)) - p++ - goto __26 -__25: - alloc = 0 -__26: - ; - - size = 0 - switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) { - case 'h': - goto __28 - case 'l': - goto __29 - case 'j': - goto __30 - case 'z': - goto __31 - case 't': - goto __32 - case 'L': - goto __33 - case 'd': - goto __34 - case 'i': - goto __35 - case 'o': - goto __36 - case 'u': - goto __37 - case 'x': - goto __38 - case 'a': - goto __39 - case 'e': - goto __40 - case 'f': - goto __41 - case 'g': - goto __42 - case 'A': - goto __43 - case 'E': - goto __44 - case 'F': - goto __45 - case 'G': - goto __46 - case 'X': - goto __47 - case 's': - goto __48 - case 'c': - goto __49 - case '[': - goto __50 - case 'S': - goto __51 - case 'C': - goto __52 - case 'p': - goto __53 - case 'n': - goto __54 - default: - goto __55 - } - goto __27 -__28: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') { - goto __56 - } - p++ - size = -2 - goto __57 -__56: - size = -1 -__57: - ; - goto __27 -__29: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') { - goto __58 - } - p++ - size = 3 - goto __59 -__58: - size = 1 -__59: - ; - goto __27 -__30: - size = 3 - goto __27 -__31: -__32: - size = 1 - goto __27 -__33: - size = 2 - goto __27 -__34: -__35: -__36: -__37: -__38: -__39: -__40: -__41: -__42: -__43: -__44: -__45: -__46: -__47: -__48: -__49: -__50: -__51: -__52: -__53: -__54: - p-- - goto __27 -__55: - goto fmt_fail -__27: - ; - - t = int32(*(*uint8)(unsafe.Pointer(p))) - - // C or S - if !(t&0x2f == 3) { - goto __60 - } - t = t | 32 - size = 1 -__60: - ; - - switch t { - case 'c': - goto __62 - case '[': - goto __63 - case 'n': - goto __64 - default: - goto __65 - } - goto __61 -__62: - if !(width < 1) { - goto __66 - } - width = 1 -__66: - ; -__63: - goto __61 -__64: - store_int(tls, dest, size, uint64(pos)) - // do not increment match count, etc! - goto __4 -__65: - X__shlim(tls, f, int64(0)) -__67: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __68 - } - goto __67 -__68: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) -__61: - ; - - X__shlim(tls, f, int64(width)) - if !(func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() < 0) { - goto __69 - } - goto input_fail -__69: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - - switch t { - case 's': - goto __71 - case 'c': - goto __72 - case '[': - goto __73 - case 'p': - goto __74 - case 'X': - goto __75 - case 'x': - goto __76 - case 'o': - goto __77 - case 'd': - goto __78 - case 'u': - goto __79 - case 'i': - goto __80 - case 'a': - goto __81 - case 'A': - goto __82 - case 'e': - goto __83 - case 'E': - goto __84 - case 'f': - goto __85 - case 'F': - goto __86 - case 'g': - goto __87 - case 'G': - goto __88 - } - goto __70 -__71: -__72: -__73: - if !(t == 'c' || t == 's') { - goto __89 - } - Xmemset(tls, bp, -1, uint32(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(t == 's') { - goto __91 - } - *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0) -__91: - ; - goto __90 -__89: - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') { - goto __92 - } - p++ - invert = 1 - goto __93 -__92: - invert = 0 -__93: - ; - Xmemset(tls, bp, invert, uint32(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') { - goto __94 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert) - goto __95 -__94: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') { - goto __96 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert) -__96: - ; -__95: - ; -__97: - if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') { - goto __99 - } - if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - goto __100 - } - goto fmt_fail -__100: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') { - goto __101 - } - c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1)))) -__102: - if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __104 - } - *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert) - goto __103 -__103: - c++ - goto __102 - goto __104 -__104: - ; -__101: - ; - *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert) - goto __98 -__98: - p++ - goto __97 - goto __99 -__99: - ; -__90: - ; - wcs = uintptr(0) - s = uintptr(0) - i = size_t(0) - if t == 'c' { - k = uint32(width) + 1 - } else { - k = uint32(31) - } - if !(size == 1) { - goto __105 - } - if !(alloc != 0) { - goto __107 - } - wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(wcs != 0) { - goto __109 - } - goto alloc_fail -__109: - ; - goto __108 -__107: - wcs = dest -__108: - ; - *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{} -__110: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __111 - } - switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint32(1), bp+268 /* &st */) { - case Uint32FromInt32(-1): - goto __113 - case Uint32FromInt32(-2): - goto __114 - } - goto __112 -__113: - goto input_fail -__114: - goto __110 -__112: - ; - if !(wcs != 0) { - goto __115 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint32(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */)) -__115: - ; - if !(alloc != 0 && i == k) { - goto __116 - } - k = k + (k + size_t(1)) - tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(tmp != 0) { - goto __117 - } - goto alloc_fail -__117: - ; - wcs = tmp -__116: - ; - goto __110 -__111: - ; - if !!(Xmbsinit(tls, bp+268) != 0) { - goto __118 - } - goto input_fail -__118: - ; - goto __106 -__105: - if !(alloc != 0) { - goto __119 - } - s = Xmalloc(tls, k) - if !!(s != 0) { - goto __121 - } - goto alloc_fail -__121: - ; -__122: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __123 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint32(&i, 1)))) = uint8(c) - if !(i == k) { - goto __124 - } - k = k + (k + size_t(1)) - tmp1 = Xrealloc(tls, s, k) - if !!(tmp1 != 0) { - goto __125 - } - goto alloc_fail -__125: - ; - s = tmp1 -__124: - ; - goto __122 -__123: - ; - goto __120 -__119: - if !(AssignUintptr(&s, dest) != 0) { - goto __126 - } -__128: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __129 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint32(&i, 1)))) = uint8(c) - goto __128 -__129: - ; - goto __127 -__126: -__130: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __131 - } - goto __130 -__131: - ; -__127: - ; -__120: - ; -__106: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __132 - } - goto match_fail -__132: - ; - if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != off_t(width)) { - goto __133 - } - goto match_fail -__133: - ; - if !(alloc != 0) { - goto __134 - } - if !(size == 1) { - goto __135 - } - *(*uintptr)(unsafe.Pointer(dest)) = wcs - goto __136 -__135: - *(*uintptr)(unsafe.Pointer(dest)) = s -__136: - ; -__134: - ; - if !(t != 'c') { - goto __137 - } - if !(wcs != 0) { - goto __138 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = wchar_t(0) -__138: - ; - if !(s != 0) { - goto __139 - } - *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) -__139: - ; -__137: - ; - goto __70 -__74: -__75: -__76: - base = 16 - goto int_common -__77: - base = 8 - goto int_common -__78: -__79: - base = 10 - goto int_common -__80: - base = 0 -int_common: - x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1)) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __140 - } - goto match_fail -__140: - ; - if !(t == 'p' && dest != 0) { - goto __141 - } - *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x)) - goto __142 -__141: - store_int(tls, dest, size, x) -__142: - ; - goto __70 -__81: -__82: -__83: -__84: -__85: -__86: -__87: -__88: - y = X__floatscan(tls, f, size, 0) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1) != 0) { - goto __143 - } - goto match_fail -__143: - ; - if !(dest != 0) { - goto __144 - } - switch size { - case 0: - goto __146 - case 1: - goto __147 - case 2: - goto __148 - } - goto __145 -__146: - *(*float32)(unsafe.Pointer(dest)) = float32(y) - goto __145 -__147: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__148: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__145: - ; -__144: - ; - goto __70 -__70: - ; - - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).rpos)-int32((*FILE)(unsafe.Pointer(f)).buf))/1)) - if !(dest != 0) { - goto __149 - } - matches++ -__149: - ; - goto __4 -__4: - p++ - goto __3 - goto __5 -__5: - ; - if !(0 != 0) { - goto __150 - } -fmt_fail: -alloc_fail: -input_fail: - if !!(matches != 0) { - goto __151 - } - matches-- -__151: - ; -match_fail: - if !(alloc != 0) { - goto __152 - } - Xfree(tls, s) - Xfree(tls, wcs) -__152: - ; -__150: - ; -__153: - if !(__need_unlock != 0) { - goto __156 - } - X__unlockfile(tls, f) -__156: - ; - goto __154 -__154: - if 0 != 0 { - goto __153 - } - goto __155 -__155: - ; - return matches -} - -func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */ - var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie - var k size_t = len + size_t(256) - var end uintptr = Xmemchr(tls, src, 0, k) - if end != 0 { - k = size_t((int32(end) - int32(src)) / 1) - } - if k < len { - len = k - } - Xmemcpy(tls, buf, src, len) - (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len) - (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k) - (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k) - return len -} - -func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) - } - bp := tls.Alloc(144) - defer tls.Free(144) - - *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - }{string_read})), buf: s, lock: -1, cookie: s} - return Xvfscanf(tls, bp, fmt, ap) -} - -func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ - if __ccgo_strace { - trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) - } - var try uintptr - var sign int32 - for nel > size_t(0) { - try = base + uintptr(width*(nel/size_t(2))) - sign = (*struct { - f func(*TLS, uintptr, uintptr) int32 - })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) - if sign < 0 { - nel = nel / size_t(2) - } else if sign > 0 { - base = try + uintptr(width) - nel = nel - (nel/size_t(2) + size_t(1)) - } else { - return try - } - } - return uintptr(0) -} - -func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ - bp := tls.Alloc(144) - defer tls.Free(144) - - // var f FILE at bp, 144 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+4, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y float64 = X__floatscan(tls, bp, prec, 1) - var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).rpos)-int32((*FILE)(unsafe.Pointer(bp)).buf))/1) - if p != 0 { - *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { - if cnt != 0 { - return s + uintptr(cnt) - } - return s - }() - } - return y -} - -func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return float32(strtox(tls, s, p, 0)) -} - -func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 1) -} - -func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 2) -} - -func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ - bp := tls.Alloc(144) - defer tls.Free(144) - - // var f FILE at bp, 144 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+4, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) - if p != 0 { - var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).rpos)-int32((*FILE)(unsafe.Pointer(bp)).buf))/1)) - *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) - } - return y -} - -func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) -} - -func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) -} - -func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint32 { /* strtol.c:31:15: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uint32(strtox1(tls, s, p, base, uint64(2*uint32(0x7fffffff)+uint32(1)))) -} - -func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int32 { /* strtol.c:36:6: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int32(strtox1(tls, s, p, base, uint64(0+Uint32FromInt32(Int32(-Int32(0x7fffffff))-Int32FromInt32(1))))) -} - -func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return Xstrtoll(tls, s, p, base) -} - -func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return Xstrtoull(tls, s, p, base) -} - -func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - var l size_t = Xstrlen(tls, s) - var d uintptr = Xmalloc(tls, l+size_t(1)) - if !(d != 0) { - return uintptr(0) - } - return Xmemcpy(tls, d, s, l+size_t(1)) -} - -func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var l size_t = Xstrnlen(tls, d, n) - if l == n { - return l + Xstrlen(tls, s) - } - return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var d0 uintptr - var wd uintptr - var ws uintptr - d0 = d - - if !!(int32(PostDecUint32(&n, 1)) != 0) { - goto __1 - } - goto finish -__1: - ; - if !(uintptr_t(s)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1)) == uintptr_t(d)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1))) { - goto __2 - } -__3: - if !(uintptr_t(s)&(uint32(unsafe.Sizeof(size_t(0)))-uint32(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __5 - } - goto __4 -__4: - n-- - s++ - d++ - goto __3 - goto __5 -__5: - ; - if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { - goto __6 - } - wd = d - ws = s -__7: - if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint32)(unsafe.Pointer(ws))-Uint32(Uint32FromInt32(-1))/size_t(255)) & ^*(*uint32)(unsafe.Pointer(ws)) & (Uint32(Uint32FromInt32(-1))/size_t(255)*size_t(255/2+1)) != 0)) { - goto __9 - } - *(*size_t)(unsafe.Pointer(wd)) = *(*uint32)(unsafe.Pointer(ws)) - goto __8 -__8: - n = n - size_t(unsafe.Sizeof(size_t(0))) - ws += 4 - wd += 4 - goto __7 - goto __9 -__9: - ; - d = wd - s = ws -__6: - ; -__2: - ; -__10: - if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __12 - } - goto __11 -__11: - n-- - s++ - d++ - goto __10 - goto __12 -__12: - ; - *(*uint8)(unsafe.Pointer(d)) = uint8(0) -finish: - return size_t((int32(d)-int32(d0))/1) + Xstrlen(tls, s) -} - -func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */ - if __ccgo_strace { - trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) - } - var l uintptr = _l - var r uintptr = _r - if !(int32(PostDecUint32(&n, 1)) != 0) { - return 0 - } -__1: - if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { - goto __3 - } - goto __2 -__2: - l++ - r++ - n-- - goto __1 - goto __3 -__3: - ; - return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) -} - -func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */ - if __ccgo_strace { - trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) - } - return Xstrncasecmp(tls, l, r, n) -} - -func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var a uintptr = d - d += uintptr(Xstrlen(tls, d)) - for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { - n-- - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0) - return a -} - -func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ - if __ccgo_strace { - trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) - } - var p uintptr = Xmemchr(tls, s, 0, n) - if p != 0 { - return uint32((int32(p) - int32(s)) / 1) - } - return n -} - -func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ - if __ccgo_strace { - trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) - } - bp := tls.Alloc(32) - defer tls.Free(32) - - var a uintptr = s - *(*[8]size_t)(unsafe.Pointer(bp /* byteset */)) = [8]size_t{0: size_t(0)} - - if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) { - return size_t(0) - } - if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) { - for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ { - } - return size_t((int32(s) - int32(a)) / 1) - } - - for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint32(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4, size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; c++ { - } - for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4))&(size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; s++ { - } - return size_t((int32(s) - int32(a)) / 1) -} - -func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */ - if __ccgo_strace { - trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) - } - if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) { - return uintptr(0) - } - s += uintptr(Xstrspn(tls, s, sep)) - if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) { - return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0)) - } - _sp = s + uintptr(Xstrcspn(tls, s, sep)) - if *(*uint8)(unsafe.Pointer(_sp)) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0) - } else { - _sp = uintptr(0) - } - return s -} - -var _sp uintptr /* strtok.c:5:14: */ - -func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return *(*int32)(unsafe.Pointer(a + 3*4)) -} - -func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 3*4)) - return 0 -} - -// -// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_guardsize; -// return 0; -// } -// -// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit) -// { -// *inherit = a->_a_sched; -// return 0; -// } -// -// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param) -// { -// param->sched_priority = a->_a_prio; -// return 0; -// } -// -// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy) -// { -// *policy = a->_a_policy; -// return 0; -// } -// -// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope) -// { -// *scope = PTHREAD_SCOPE_SYSTEM; -// return 0; -// } -// -// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size) -// { -// if (!a->_a_stackaddr) -// return EINVAL; -// *size = a->_a_stacksize; -// *addr = (void *)(a->_a_stackaddr - *size); -// return 0; -// } -// -// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_stacksize; -// return 0; -// } -// -// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared) -// { -// *pshared = !!a->__attr; -// return 0; -// } -// -// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk) -// { -// *clk = a->__attr & 0x7fffffff; -// return 0; -// } -// -// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr>>31; -// return 0; -// } -// -// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol) -// { -// *protocol = PTHREAD_PRIO_NONE; -// return 0; -// } -// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr / 128U % 2; -// return 0; -// } -// -// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust) -// { -// *robust = a->__attr / 4U % 2; -// return 0; -// } - -func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)) -} - -// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type) -// { -// *type = a->__attr & 3; -// return 0; -// } -// -// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr[0]; -// return 0; -// } - -func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - if uint32(state) > 1 { - return 22 - } - *(*int32)(unsafe.Pointer(a + 3*4)) = state - return 0 -} - -func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */ - if __ccgo_strace { - trc("tls=%v m=%v, (%v:)", tls, m, origin(2)) - } - return *(*int32)(unsafe.Pointer(m)) & 15 -} - -// int __pthread_mutex_lock(pthread_mutex_t *m) -// { -// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL -// && !a_cas(&m->_m_lock, 0, EBUSY)) -// return 0; -// -// return __pthread_mutex_timedlock(m, 0); -// } -// -// weak_alias(__pthread_mutex_lock, pthread_mutex_lock); - -func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return 0 -} - -func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{} - return 0 -} - -func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v type1=%v, (%v:)", tls, a, type1, origin(2)) - } - if uint32(type1) > uint32(2) { - return 22 - } - (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1) - return 0 -} - -func init() { - *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45: -} - -var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data diff --git a/vendor/modernc.org/libc/musl_linux_ppc64le.go b/vendor/modernc.org/libc/musl_linux_ppc64le.go deleted file mode 100644 index 1f5f7f1..0000000 --- a/vendor/modernc.org/libc/musl_linux_ppc64le.go +++ /dev/null @@ -1,7273 +0,0 @@ -// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_ppc64le.go -pkgname libc -static-locals-prefix _s -Iarch/powerpc64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/gethostbyname_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.c', DO NOT EDIT. - -package libc - -import ( - "math" - "reflect" - "sync/atomic" - "unsafe" -) - -var _ = math.Pi -var _ reflect.Kind -var _ atomic.Value -var _ unsafe.Pointer - -// musl as a whole is licensed under the following standard MIT license: -// -// ---------------------------------------------------------------------- -// Copyright © 2005-2020 Rich Felker, et al. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ---------------------------------------------------------------------- -// -// Authors/contributors include: -// -// A. Wilcox -// Ada Worcester -// Alex Dowad -// Alex Suykov -// Alexander Monakov -// Andre McCurdy -// Andrew Kelley -// Anthony G. Basile -// Aric Belsito -// Arvid Picciani -// Bartosz Brachaczek -// Benjamin Peterson -// Bobby Bingham -// Boris Brezillon -// Brent Cook -// Chris Spiegel -// Clément Vasseur -// Daniel Micay -// Daniel Sabogal -// Daurnimator -// David Carlier -// David Edelsohn -// Denys Vlasenko -// Dmitry Ivanov -// Dmitry V. Levin -// Drew DeVault -// Emil Renner Berthing -// Fangrui Song -// Felix Fietkau -// Felix Janda -// Gianluca Anzolin -// Hauke Mehrtens -// He X -// Hiltjo Posthuma -// Isaac Dunham -// Jaydeep Patil -// Jens Gustedt -// Jeremy Huntwork -// Jo-Philipp Wich -// Joakim Sindholt -// John Spencer -// Julien Ramseier -// Justin Cormack -// Kaarle Ritvanen -// Khem Raj -// Kylie McClain -// Leah Neukirchen -// Luca Barbato -// Luka Perkov -// M Farkas-Dyck (Strake) -// Mahesh Bodapati -// Markus Wichmann -// Masanori Ogino -// Michael Clark -// Michael Forney -// Mikhail Kremnyov -// Natanael Copa -// Nicholas J. Kain -// orc -// Pascal Cuoq -// Patrick Oppenlander -// Petr Hosek -// Petr Skocik -// Pierre Carrier -// Reini Urban -// Rich Felker -// Richard Pennington -// Ryan Fairfax -// Samuel Holland -// Segev Finer -// Shiz -// sin -// Solar Designer -// Stefan Kristiansson -// Stefan O'Rear -// Szabolcs Nagy -// Timo Teräs -// Trutz Behn -// Valentin Ochs -// Will Dietz -// William Haddon -// William Pitcock -// -// Portions of this software are derived from third-party works licensed -// under terms compatible with the above MIT license: -// -// The TRE regular expression implementation (src/regex/reg* and -// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed -// under a 2-clause BSD license (license text in the source files). The -// included version has been heavily modified by Rich Felker in 2012, in -// the interests of size, simplicity, and namespace cleanliness. -// -// Much of the math library code (src/math/* and src/complex/*) is -// Copyright © 1993,2004 Sun Microsystems or -// Copyright © 2003-2011 David Schultz or -// Copyright © 2003-2009 Steven G. Kargl or -// Copyright © 2003-2009 Bruce D. Evans or -// Copyright © 2008 Stephen L. Moshier or -// Copyright © 2017-2018 Arm Limited -// and labelled as such in comments in the individual source files. All -// have been licensed under extremely permissive terms. -// -// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 -// The Android Open Source Project and is licensed under a two-clause BSD -// license. It was taken from Bionic libc, used on Android. -// -// The AArch64 memcpy and memset code (src/string/aarch64/*) are -// Copyright © 1999-2019, Arm Limited. -// -// The implementation of DES for crypt (src/crypt/crypt_des.c) is -// Copyright © 1994 David Burren. It is licensed under a BSD license. -// -// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was -// originally written by Solar Designer and placed into the public -// domain. The code also comes with a fallback permissive license for use -// in jurisdictions that may not recognize the public domain. -// -// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -// Valentin Ochs and is licensed under an MIT-style license. -// -// The x86_64 port was written by Nicholas J. Kain and is licensed under -// the standard MIT terms. -// -// The mips and microblaze ports were originally written by Richard -// Pennington for use in the ellcc project. The original code was adapted -// by Rich Felker for build system and code conventions during upstream -// integration. It is licensed under the standard MIT terms. -// -// The mips64 port was contributed by Imagination Technologies and is -// licensed under the standard MIT terms. -// -// The powerpc port was also originally written by Richard Pennington, -// and later supplemented and integrated by John Spencer. It is licensed -// under the standard MIT terms. -// -// All other files which have no copyright comments are original works -// produced specifically for use as part of this library, written either -// by Rich Felker, the main author of the library, or by one or more -// contibutors listed above. Details on authorship of individual files -// can be found in the git version control history of the project. The -// omission of copyright and license comments in each file is in the -// interest of source tree size. -// -// In addition, permission is hereby granted for all public header files -// (include/* and arch/*/bits/*) and crt files intended to be linked into -// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -// the copyright notice and permission notice otherwise required by the -// license, and to use these files without any requirement of -// attribution. These files include substantial contributions from: -// -// Bobby Bingham -// John Spencer -// Nicholas J. Kain -// Rich Felker -// Richard Pennington -// Stefan Kristiansson -// Szabolcs Nagy -// -// all of whom have explicitly granted such permission. -// -// This file previously contained text expressing a belief that most of -// the files covered by the above exception were sufficiently trivial not -// to be subject to copyright, resulting in confusion over whether it -// negated the permissions granted in the license. In the spirit of -// permissive licensing, and of not having licensing issues being an -// obstacle to adoption, that text has been removed. -const ( /* copyright.c:194:1: */ - __musl__copyright__ = 0 -) - -const ( /* nameser.h:117:1: */ - ns_uop_delete = 0 - ns_uop_add = 1 - ns_uop_max = 2 -) - -const ( /* nameser.h:147:1: */ - ns_t_invalid = 0 - ns_t_a = 1 - ns_t_ns = 2 - ns_t_md = 3 - ns_t_mf = 4 - ns_t_cname = 5 - ns_t_soa = 6 - ns_t_mb = 7 - ns_t_mg = 8 - ns_t_mr = 9 - ns_t_null = 10 - ns_t_wks = 11 - ns_t_ptr = 12 - ns_t_hinfo = 13 - ns_t_minfo = 14 - ns_t_mx = 15 - ns_t_txt = 16 - ns_t_rp = 17 - ns_t_afsdb = 18 - ns_t_x25 = 19 - ns_t_isdn = 20 - ns_t_rt = 21 - ns_t_nsap = 22 - ns_t_nsap_ptr = 23 - ns_t_sig = 24 - ns_t_key = 25 - ns_t_px = 26 - ns_t_gpos = 27 - ns_t_aaaa = 28 - ns_t_loc = 29 - ns_t_nxt = 30 - ns_t_eid = 31 - ns_t_nimloc = 32 - ns_t_srv = 33 - ns_t_atma = 34 - ns_t_naptr = 35 - ns_t_kx = 36 - ns_t_cert = 37 - ns_t_a6 = 38 - ns_t_dname = 39 - ns_t_sink = 40 - ns_t_opt = 41 - ns_t_apl = 42 - ns_t_tkey = 249 - ns_t_tsig = 250 - ns_t_ixfr = 251 - ns_t_axfr = 252 - ns_t_mailb = 253 - ns_t_maila = 254 - ns_t_any = 255 - ns_t_zxfr = 256 - ns_t_max = 65536 -) - -const ( /* nameser.h:210:1: */ - ns_c_invalid = 0 - ns_c_in = 1 - ns_c_2 = 2 - ns_c_chaos = 3 - ns_c_hs = 4 - ns_c_none = 254 - ns_c_any = 255 - ns_c_max = 65536 -) - -const ( /* nameser.h:221:1: */ - ns_kt_rsa = 1 - ns_kt_dh = 2 - ns_kt_dsa = 3 - ns_kt_private = 254 -) - -const ( /* nameser.h:228:1: */ - cert_t_pkix = 1 - cert_t_spki = 2 - cert_t_pgp = 3 - cert_t_url = 253 - cert_t_oid = 254 -) - -const ( /* nameser.h:28:1: */ - ns_s_qd = 0 - ns_s_zn = 0 - ns_s_an = 1 - ns_s_pr = 1 - ns_s_ns = 2 - ns_s_ud = 2 - ns_s_ar = 3 - ns_s_max = 4 -) - -const ( /* nameser.h:75:1: */ - ns_f_qr = 0 - ns_f_opcode = 1 - ns_f_aa = 2 - ns_f_tc = 3 - ns_f_rd = 4 - ns_f_ra = 5 - ns_f_z = 6 - ns_f_ad = 7 - ns_f_cd = 8 - ns_f_rcode = 9 - ns_f_max = 10 -) - -const ( /* nameser.h:89:1: */ - ns_o_query = 0 - ns_o_iquery = 1 - ns_o_status = 2 - ns_o_notify = 4 - ns_o_update = 5 - ns_o_max = 6 -) - -const ( /* nameser.h:98:1: */ - ns_r_noerror = 0 - ns_r_formerr = 1 - ns_r_servfail = 2 - ns_r_nxdomain = 3 - ns_r_notimpl = 4 - ns_r_refused = 5 - ns_r_yxdomain = 6 - ns_r_yxrrset = 7 - ns_r_nxrrset = 8 - ns_r_notauth = 9 - ns_r_notzone = 10 - ns_r_max = 11 - ns_r_badvers = 16 - ns_r_badsig = 16 - ns_r_badkey = 17 - ns_r_badtime = 18 -) - -const ( /* pthread_impl.h:58:1: */ - DT_EXITING = 0 - DT_JOINABLE = 1 - DT_DETACHED = 2 -) - -type ptrdiff_t = int64 /* :3:26 */ - -type size_t = uint64 /* :9:23 */ - -type wchar_t = int32 /* :15:24 */ - -type uint16_t = uint16 /* alltypes.h:118:25 */ - -type uint32_t = uint32 /* alltypes.h:123:25 */ - -type uint64_t = uint64 /* alltypes.h:128:25 */ - -func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ - return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 -} - -var table = [384]uint16{ - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x320/256 | 0x320*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x160/256 | 0x160*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), -} /* __ctype_b_loc.c:9:29 */ - -var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */ - -func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&ptable)) -} - -func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ - return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) -} - -type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:335:9 */ - -type locale_t = uintptr /* alltypes.h:335:32 */ - -func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisalpha(tls, c) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) - }() != 0 || func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0) -} - -func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalnum(tls, c) -} - -func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) -} - -func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalpha(tls, c) -} - -func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) -} - -func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisdigit(tls, c) -} - -func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('a') < uint32(26)) -} - -func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xislower(tls, c) -} - -func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) -} - -func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisprint(tls, c) -} - -func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('A') < uint32(26)) -} - -func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisupper(tls, c) -} - -func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) -} - -func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisxdigit(tls, c) -} - -type off_t = int64 /* alltypes.h:154:16 */ - -type ino_t = uint64 /* alltypes.h:159:25 */ - -type dirent = struct { - d_ino ino_t - d_off off_t - d_reclen uint16 - d_type uint8 - d_name [256]uint8 - _ [5]byte -} /* dirent.h:5:1 */ - -type __dirstream = struct { - tell off_t - fd int32 - buf_pos int32 - buf_end int32 - lock [1]int32 - buf [2048]uint8 -} /* dirent.h:20:9 */ - -type DIR = __dirstream /* dirent.h:20:28 */ - -type ssize_t = int64 /* alltypes.h:57:15 */ - -type intptr_t = int64 /* alltypes.h:62:15 */ - -type pid_t = int32 /* alltypes.h:227:13 */ - -type uid_t = uint32 /* alltypes.h:237:18 */ - -type gid_t = uint32 /* alltypes.h:242:18 */ - -type useconds_t = uint32 /* alltypes.h:252:18 */ - -type div_t = struct { - quot int32 - rem int32 -} /* stdlib.h:62:35 */ -type ldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:63:36 */ -type lldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:64:41 */ - -func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd) - Xfree(tls, dir) - return ret -} - -type mode_t = uint32 /* alltypes.h:144:18 */ - -type iovec = struct { - iov_base uintptr - iov_len size_t -} /* alltypes.h:347:1 */ - -type flock = struct { - l_type int16 - l_whence int16 - _ [4]byte - l_start off_t - l_len off_t - l_pid pid_t - _ [4]byte -} /* fcntl.h:24:1 */ - -type file_handle = struct { - _ [0]uint32 - handle_bytes uint32 - handle_type int32 -} /* fcntl.h:167:1 */ - -type f_owner_ex = struct { - __type int32 - pid pid_t -} /* fcntl.h:172:1 */ - -type syscall_arg_t = int64 /* syscall.h:22:14 */ - -func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - var fd int32 - var dir uintptr - - if AssignInt32(&fd, Xopen(tls, name, 00|040000|02000000, 0)) < 0 { - return uintptr(0) - } - if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint64(1), uint64(unsafe.Sizeof(DIR{}))))) != 0) { - __syscall1(tls, int64(6), int64(fd)) - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).fd = fd - return dir -} - -type max_align_t = struct { - __ll int64 - __ld float64 -} /* alltypes.h:33:54 */ - -type dirstream_buf_alignment_check = [1]uint8 /* readdir.c:7:14 */ - -func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var de uintptr - - if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end { - var len int32 = int32(__syscall3(tls, int64(202), int64((*DIR)(unsafe.Pointer(dir)).fd), int64(dir+24), int64(unsafe.Sizeof([2048]uint8{})))) - if len <= 0 { - if len < 0 && len != -2 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len - } - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).buf_end = len - (*DIR)(unsafe.Pointer(dir)).buf_pos = 0 - } - de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos) - *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen) - (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off - return de -} - -type uintptr_t = uint64 /* alltypes.h:47:24 */ - -type int8_t = int8 /* alltypes.h:88:25 */ - -type int16_t = int16 /* alltypes.h:93:25 */ - -type int32_t = int32 /* alltypes.h:98:25 */ - -type int64_t = int64 /* alltypes.h:103:25 */ - -type intmax_t = int64 /* alltypes.h:108:25 */ - -type uint8_t = uint8 /* alltypes.h:113:25 */ - -type uintmax_t = uint64 /* alltypes.h:138:25 */ - -type int_fast8_t = int8_t /* stdint.h:22:16 */ -type int_fast64_t = int64_t /* stdint.h:23:17 */ - -type int_least8_t = int8_t /* stdint.h:25:17 */ -type int_least16_t = int16_t /* stdint.h:26:17 */ -type int_least32_t = int32_t /* stdint.h:27:17 */ -type int_least64_t = int64_t /* stdint.h:28:17 */ - -type uint_fast8_t = uint8_t /* stdint.h:30:17 */ -type uint_fast64_t = uint64_t /* stdint.h:31:18 */ - -type uint_least8_t = uint8_t /* stdint.h:33:18 */ -type uint_least16_t = uint16_t /* stdint.h:34:18 */ -type uint_least32_t = uint32_t /* stdint.h:35:18 */ -type uint_least64_t = uint64_t /* stdint.h:36:18 */ - -type int_fast16_t = int32_t /* stdint.h:1:17 */ -type int_fast32_t = int32_t /* stdint.h:2:17 */ -type uint_fast16_t = uint32_t /* stdint.h:3:18 */ -type uint_fast32_t = uint32_t /* stdint.h:4:18 */ - -type _IO_FILE = struct { - flags uint32 - _ [4]byte - rpos uintptr - rend uintptr - close uintptr - wend uintptr - wpos uintptr - mustbezero_1 uintptr - wbase uintptr - read uintptr - write uintptr - seek uintptr - buf uintptr - buf_size size_t - prev uintptr - next uintptr - fd int32 - pipe_pid int32 - lockcount int64 - mode int32 - lock int32 - lbf int32 - _ [4]byte - cookie uintptr - off off_t - getln_buf uintptr - mustbezero_2 uintptr - shend uintptr - shlim off_t - shcnt off_t - prev_locked uintptr - next_locked uintptr - locale uintptr -} /* alltypes.h:312:9 */ - -type FILE = _IO_FILE /* alltypes.h:312:25 */ - -type va_list = uintptr /* alltypes.h:318:27 */ - -type _G_fpos64_t = struct { - _ [0]uint64 - __opaque [16]uint8 -} /* stdio.h:54:9 */ - -type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ - -type float_t = float32 /* alltypes.h:22:15 */ - -type double_t = float64 /* alltypes.h:27:16 */ - -func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ - bp := tls.Alloc(4) - defer tls.Free(4) - - // var __u struct {__f float32;} at bp, 4 - - *(*float32)(unsafe.Pointer(bp)) = __f - return *(*uint32)(unsafe.Pointer(bp)) -} - -func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - // var __u struct {__f float64;} at bp, 8 - - *(*float64)(unsafe.Pointer(bp)) = __f - return *(*uint64)(unsafe.Pointer(bp)) -} - -type __pthread = struct { - self uintptr - dtv uintptr - prev uintptr - next uintptr - sysinfo uintptr_t - canary uintptr_t - canary2 uintptr_t - tid int32 - errno_val int32 - detach_state int32 - cancel int32 - canceldisable uint8 - cancelasync uint8 - tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ - _ [5]byte - map_base uintptr - map_size size_t - stack uintptr - stack_size size_t - guard_size size_t - result uintptr - cancelbuf uintptr - tsd uintptr - robust_list struct { - head uintptr - off int64 - pending uintptr - } - timer_id int32 - _ [4]byte - locale locale_t - killlock [1]int32 - _ [4]byte - dlerror_buf uintptr - stdio_locks uintptr - canary_at_end uintptr_t - dtv_copy uintptr -} /* alltypes.h:265:9 */ - -func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ - var c int32 - var x int32 - var y int64 - var neg int32 = 0 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c == '+' || c == '-' { - neg = Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') >= 10 && pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - if uint32(c-'0') >= 10 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return -0x7fffffffffffffff - int64(1) - } - for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - x = 10*x + c - '0' - } - for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - y = int64(10)*y + int64(c) - int64('0') - } - for ; uint32(c-'0') < 10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if neg != 0 { - return -y - } - return y -} - -func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var x [128]uint32_t at bp, 512 - - var i int32 - var j int32 - var k int32 - var a int32 - var z int32 - var lrp int64 = int64(0) - var dc int64 = int64(0) - var e10 int64 = int64(0) - var lnz int32 = 0 - var gotdig int32 = 0 - var gotrad int32 = 0 - var rp int32 - var e2 int32 - var emax int32 = -emin - bits + 3 - var denormal int32 = 0 - var y float64 - var frac float64 = float64(0) - var bias float64 = float64(0) - - j = 0 - k = 0 - - // Don't let leading zeros consume buffer space - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - if c == '.' { - gotrad = 1 - for c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }(); c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - lrp-- - } - } - - *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) - for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - gotrad = 1 - lrp = dc - } else if k < 128-3 { - dc++ - if c != '0' { - lnz = int32(dc) - } - if j != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0') - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') - } - if PreIncInt32(&j, 1) == 9 { - k++ - j = 0 - } - gotdig = 1 - } else { - dc++ - if c != '0' { - lnz = (128 - 4) * 9 - *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) - } - } - } - if !(gotrad != 0) { - lrp = dc - } - - if gotdig != 0 && c|32 == 'e' { - e10 = scanexp(tls, f, pok) - if e10 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e10 = int64(0) - } - lrp = lrp + e10 - } else if c >= 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - if !(gotdig != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - // Handle zero specially to avoid nasty special cases later - if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { - return float64(sign) * 0.0 - } - - // Optimize small integers (w/no exponent) and over/under-flow - if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if lrp > int64(-emin/2) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if lrp < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - // Align incomplete final B1B digit - if j != 0 { - for ; j < 9; j++ { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) - } - k++ - j = 0 - } - - a = 0 - z = k - e2 = 0 - rp = int32(lrp) - - // Optimize small to mid-size integers (even in exp. notation) - if lnz < 9 && lnz <= rp && rp < 18 { - if rp == 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if rp < 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) - } - var bitlim int32 = bits - 3*(rp-9) - if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) - } - } - - // Drop trailing zeros - for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { - } - - // Align radix point to B1B digit boundary - if rp%9 != 0 { - var rpm9 int32 - if rp >= 0 { - rpm9 = rp % 9 - } else { - rpm9 = rp%9 + 9 - } - var p10 int32 = _sp10s[8-rpm9] - var carry uint32_t = uint32_t(0) - for k = a; k != z; k++ { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry - carry = uint32_t(1000000000/p10) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - rp = rp - 9 - } - } - if carry != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry - } - rp = rp + (9 - rpm9) - } - - // Upscale until desired number of bits are left of radix point - for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { - var carry uint32_t = uint32_t(0) - e2 = e2 - 29 - for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { - var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) - if tmp > uint64(1000000000) { - carry = uint32_t(tmp / uint64(1000000000)) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) - } else { - carry = uint32_t(0) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) - } - if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - z = k - } - if k == a { - break - } - } - if carry != 0 { - rp = rp + 9 - a = (a - 1) & (128 - 1) - if a == z { - z = (z - 1) & (128 - 1) - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) - } - *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry - } - } - - // Downscale until exactly number of bits are left of radix point - for { - var carry uint32_t = uint32_t(0) - var sh int32 = 1 - for i = 0; i < 2; i++ { - k = (a + i) & (128 - 1) - if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { - i = 2 - break - } - if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { - break - } - } - if i == 2 && rp == 9*2 { - break - } - // FIXME: find a way to compute optimal sh - if rp > 9+9*2 { - sh = 9 - } - e2 = e2 + sh - for k = a; k != z; k = (k + 1) & (128 - 1) { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<>sh + carry - carry = uint32_t(int32(1000000000)>>sh) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - i-- - rp = rp - 9 - } - } - if carry != 0 { - if (z+1)&(128-1) != a { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry - z = (z + 1) & (128 - 1) - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) - } - } - } - - // Assemble desired bits into floating point variable - for y = float64(AssignInt32(&i, 0)); i < 2; i++ { - if (a+i)&(128-1) == z { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) - } - y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) - } - - y = y * float64(sign) - - // Limit precision for denormal results - if bits > 53+e2-emin { - bits = 53 + e2 - emin - if bits < 0 { - bits = 0 - } - denormal = 1 - } - - // Calculate bias term to force rounding, move out lower bits - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) - frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) - y = y - frac - y = y + bias - } - - // Process tail of decimal input so it can affect rounding - if (a+i)&(128-1) != z { - var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) - if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { - frac = frac + 0.25*float64(sign) - } else if t > uint32_t(500000000) { - frac = frac + 0.75*float64(sign) - } else if t == uint32_t(500000000) { - if (a+i+1)&(128-1) == z { - frac = frac + 0.5*float64(sign) - } else { - frac = frac + 0.75*float64(sign) - } - } - if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { - frac += 1 - } - } - - y = y + frac - y = y - bias - - if (e2+53)&0x7fffffff > emax-5 { - if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { - if denormal != 0 && bits == 53+e2-emin { - denormal = 0 - } - y = y * 0.5 - e2++ - } - if e2+53 > emax || denormal != 0 && frac != 0 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - } - - return Xscalbnl(tls, y, e2) -} - -var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ -var _sp10s = [8]int32{10, 100, 1000, 10000, - 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ - -func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ - var x uint32_t = uint32_t(0) - var y float64 = float64(0) - var scale float64 = float64(1) - var bias float64 = float64(0) - var gottail int32 = 0 - var gotrad int32 = 0 - var gotdig int32 = 0 - var rp int64 = int64(0) - var dc int64 = int64(0) - var e2 int64 = int64(0) - var d int32 - var c int32 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - - // Skip leading zeros - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - - if c == '.' { - gotrad = 1 - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - // Count zeros after the radix point before significand - rp = int64(0) - __1: - if !(c == '0') { - goto __3 - } - gotdig = 1 - goto __2 - __2: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - rp-- - goto __1 - goto __3 - __3: - } - - for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - rp = dc - gotrad = 1 - } else { - gotdig = 1 - if c > '9' { - d = c | 32 + 10 - 'a' - } else { - d = c - '0' - } - if dc < int64(8) { - x = x*uint32_t(16) + uint32_t(d) - } else if dc < int64(53/4+1) { - y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) - } else if d != 0 && !(gottail != 0) { - y = y + 0.5*scale - gottail = 1 - } - dc++ - } - } - if !(gotdig != 0) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if gotrad != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } else { - X__shlim(tls, f, int64(0)) - } - return float64(sign) * 0.0 - } - if !(gotrad != 0) { - rp = dc - } - for dc < int64(8) { - x = x * uint32_t(16) - dc++ - } - if c|32 == 'p' { - e2 = scanexp(tls, f, pok) - if e2 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e2 = int64(0) - } - } else { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - e2 = e2 + (int64(4)*rp - int64(32)) - - if !(x != 0) { - return float64(sign) * 0.0 - } - if e2 > int64(-emin) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if e2 < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - for x < 0x80000000 { - if y >= 0.5 { - x = x + (x + uint32_t(1)) - y = y + (y - float64(1)) - } else { - x = x + x - y = y + y - } - e2-- - } - - if int64(bits) > int64(32)+e2-int64(emin) { - bits = int32(int64(32) + e2 - int64(emin)) - if bits < 0 { - bits = 0 - } - } - - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) - } - - if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { - x++ - y = float64(0) - } - - y = bias + float64(sign)*float64(x) + float64(sign)*y - y = y - bias - - if !(y != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - - return Xscalbnl(tls, y, int32(e2)) -} - -func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ - if __ccgo_strace { - trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) - } - var sign int32 = 1 - var i size_t - var bits int32 - var emin int32 - var c int32 - - switch prec { - case 0: - bits = 24 - emin = -125 - bits - break - case 1: - bits = 53 - emin = -1021 - bits - break - case 2: - bits = 53 - emin = -1021 - bits - break - default: - return float64(0) - } - - for __isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0 { - } - - if c == '+' || c == '-' { - sign = sign - 2*Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - - for i = uint64(0); i < uint64(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { - if i < uint64(7) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { - if i != uint64(8) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - for ; i > uint64(3); i-- { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - } - return float64(float32(sign) * X__builtin_inff(tls)) - } - if !(i != 0) { - for i = uint64(0); i < uint64(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { - if i < uint64(2) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - } - if i == uint64(3) { - if func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() != '(' { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return float64(X__builtin_nanf(tls, ts+13)) - } - for i = uint64(1); ; i++ { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { - continue - } - if c == ')' { - return float64(X__builtin_nanf(tls, ts+13)) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - for PostDecUint64(&i, 1) != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - return float64(X__builtin_nanf(tls, ts+13)) - } - return float64(X__builtin_nanf(tls, ts+13)) - } - - if i != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - if c == '0' { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c|32 == 'x' { - return hexfloat(tls, f, bits, emin, sign, pok) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - c = '0' - } - - return decfloat(tls, f, c, bits, emin, sign, pok) -} - -// Lookup table for digit values. -1==255>=36 -> invalid -var table1 = [257]uint8{Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), -} /* intscan.c:7:28 */ - -func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ - if __ccgo_strace { - trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) - } - var val uintptr - var c int32 - var neg int32 - var x uint32 - var y uint64 - var bs int32 - val = uintptr(unsafe.Pointer(&table1)) + uintptr(1) - neg = 0 - if !(base > uint32(36) || base == uint32(1)) { - goto __1 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__1: - ; -__2: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __3 - } - goto __2 -__3: - ; - if !(c == '+' || c == '-') { - goto __4 - } - neg = -Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__4: - ; - if !((base == uint32(0) || base == uint32(16)) && c == '0') { - goto __5 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(c|32 == 'x') { - goto __7 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { - goto __9 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - goto __10 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - goto __11 -__10: - X__shlim(tls, f, int64(0)) -__11: - ; - return uint64(0) -__9: - ; - base = uint32(16) - goto __8 -__7: - if !(base == uint32(0)) { - goto __12 - } - base = uint32(8) -__12: - ; -__8: - ; - goto __6 -__5: - if !(base == uint32(0)) { - goto __13 - } - base = uint32(10) -__13: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { - goto __14 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - X__shlim(tls, f, int64(0)) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__14: - ; -__6: - ; - if !(base == uint32(10)) { - goto __15 - } - x = uint32(0) -__17: - if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { - goto __19 - } - x = x*uint32(10) + uint32(c-'0') - goto __18 -__18: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __17 - goto __19 -__19: - ; - y = uint64(x) -__20: - if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { - goto __22 - } - y = y*uint64(10) + uint64(c-'0') - goto __21 -__21: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __20 - goto __22 -__22: - ; - if !(uint32(c-'0') >= 10) { - goto __23 - } - goto done -__23: - ; - goto __16 -__15: - if !!(base&(base-uint32(1)) != 0) { - goto __24 - } - bs = int32(*(*uint8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) - x = uint32(0) -__26: - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { - goto __28 - } - x = x<>bs) { - goto __31 - } - y = y<= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(y >= lim) { - goto __43 - } - if !(!(lim&uint64(1) != 0) && !(neg != 0)) { - goto __44 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim - uint64(1) - goto __45 -__44: - if !(y > lim) { - goto __46 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim -__46: - ; -__45: - ; -__43: - ; - return y ^ uint64(neg) - uint64(neg) -} - -// The shcnt field stores the number of bytes read so far, offset by -// the value of buf-rpos at the last function call (__shlim or __shgetc), -// so that between calls the inline shcnt macro can add rpos-buf to get -// the actual count. - -func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ - if __ccgo_strace { - trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) - } - (*FILE)(unsafe.Pointer(f)).shlim = lim - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf) - int64((*FILE)(unsafe.Pointer(f)).rpos)) / 1 - // If lim is nonzero, rend must be a valid pointer. - if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > lim { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } -} - -func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var c int32 - var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos - (*FILE)(unsafe.Pointer(f)).shlim = int64(-1) - return -1 - } - cnt++ - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > (*FILE)(unsafe.Pointer(f)).shlim-cnt { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf { - *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c) - } - return c -} - -type lconv = struct { - decimal_point uintptr - thousands_sep uintptr - grouping uintptr - int_curr_symbol uintptr - currency_symbol uintptr - mon_decimal_point uintptr - mon_thousands_sep uintptr - mon_grouping uintptr - positive_sign uintptr - negative_sign uintptr - int_frac_digits uint8 - frac_digits uint8 - p_cs_precedes uint8 - p_sep_by_space uint8 - n_cs_precedes uint8 - n_sep_by_space uint8 - p_sign_posn uint8 - n_sign_posn uint8 - int_p_cs_precedes uint8 - int_p_sep_by_space uint8 - int_n_cs_precedes uint8 - int_n_sep_by_space uint8 - int_p_sign_posn uint8 - int_n_sign_posn uint8 - _ [2]byte -} /* locale.h:24:1 */ - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: uint8(255), frac_digits: uint8(255), p_cs_precedes: uint8(255), p_sep_by_space: uint8(255), n_cs_precedes: uint8(255), n_sep_by_space: uint8(255), p_sign_posn: uint8(255), n_sign_posn: uint8(255), int_p_cs_precedes: uint8(255), int_p_sep_by_space: uint8(255), int_n_cs_precedes: uint8(255), int_n_sep_by_space: uint8(255), int_p_sign_posn: uint8(255), int_n_sign_posn: uint8(255)} /* localeconv.c:4:27 */ - -func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&posix_lconv)) -} - -func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - if !(e != 0) { - if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0x7ff { - if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) { - *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff)) - if !(e != 0) { - if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0xff { - if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return X__fpclassify(tls, x) -} - -func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xcopysign(tls, x, y) -} - -func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return Xfabs(tls, x) -} - -func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xfmod(tls, x, y) -} - -func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - return X__builtin_nanf(tls, ts+13) -} - -var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ - -func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) - var y double_t - - if e >= 0x3ff+52 { - return x - } - if s != 0 { - y = x - toint + toint - } else { - y = x + toint - toint - } - if y == float64(0) { - if s != 0 { - return -Float64FromFloat64(0.0) - } - return float64(0) - } - return y -} - -func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - // var u struct {f float64;} at bp, 8 - - var y double_t = x - - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - n = 1023 - } - } - } else if n < -1022 { - // make sure final n < -53 to avoid double - // rounding in the subnormal range - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - n = -1022 - } - } - } - *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 - x = y * *(*float64)(unsafe.Pointer(bp)) - return x -} - -func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - return Xscalbn(tls, x, n) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -type __locale_map = struct { - __map uintptr - map_size size_t - name [24]uint8 - next uintptr -} /* alltypes.h:335:9 */ - -type tls_module = struct { - next uintptr - image uintptr - len size_t - size size_t - align size_t - offset size_t -} /* libc.h:14:1 */ - -type __libc = struct { - can_do_threads uint8 - threaded uint8 - secure uint8 - need_locks int8 - threads_minus_1 int32 - auxv uintptr - tls_head uintptr - tls_size size_t - tls_align size_t - tls_cnt size_t - page_size size_t - global_locale struct{ cat [6]uintptr } -} /* libc.h:20:1 */ - -type time_t = int64 /* alltypes.h:77:16 */ - -type clockid_t = int32 /* alltypes.h:206:13 */ - -type timespec = struct { - tv_sec time_t - tv_nsec int64 -} /* alltypes.h:221:1 */ - -type pthread_t = uintptr /* alltypes.h:265:26 */ - -type pthread_once_t = int32 /* alltypes.h:271:13 */ - -type pthread_key_t = uint32 /* alltypes.h:276:18 */ - -type pthread_spinlock_t = int32 /* alltypes.h:281:13 */ - -type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:286:37 */ - -type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:291:37 */ - -type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:296:37 */ - -type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:301:40 */ - -type __sigset_t = struct{ __bits [16]uint64 } /* alltypes.h:341:9 */ - -type sigset_t = __sigset_t /* alltypes.h:341:71 */ - -type pthread_attr_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:364:147 */ - -type pthread_mutex_t = struct { - __u struct { - _ [0]uint64 - __i [10]int32 - } -} /* alltypes.h:369:157 */ - -type pthread_cond_t = struct { - __u struct { - _ [0]uint64 - __i [12]int32 - } -} /* alltypes.h:379:112 */ - -type pthread_rwlock_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:389:139 */ - -type pthread_barrier_t = struct { - __u struct { - _ [0]uint64 - __i [8]int32 - } -} /* alltypes.h:394:137 */ - -type sched_param = struct { - sched_priority int32 - __reserved1 int32 - __reserved2 [2]struct { - __reserved1 time_t - __reserved2 int64 - } - __reserved3 int32 - _ [4]byte -} /* sched.h:19:1 */ - -type timer_t = uintptr /* alltypes.h:201:14 */ - -type clock_t = int64 /* alltypes.h:211:14 */ - -type tm = struct { - tm_sec int32 - tm_min int32 - tm_hour int32 - tm_mday int32 - tm_mon int32 - tm_year int32 - tm_wday int32 - tm_yday int32 - tm_isdst int32 - _ [4]byte - tm_gmtoff int64 - tm_zone uintptr -} /* time.h:38:1 */ - -type itimerspec = struct { - it_interval struct { - tv_sec time_t - tv_nsec int64 - } - it_value struct { - tv_sec time_t - tv_nsec int64 - } -} /* time.h:80:1 */ - -type sigevent = struct { - sigev_value struct { - _ [0]uint64 - sival_int int32 - _ [4]byte - } - sigev_signo int32 - sigev_notify int32 - sigev_notify_function uintptr - sigev_notify_attributes uintptr - __pad [32]uint8 -} /* time.h:107:1 */ - -type __ptcb = struct { - __f uintptr - __x uintptr - __next uintptr -} /* alltypes.h:265:9 */ - -type sigaltstack = struct { - ss_sp uintptr - ss_flags int32 - _ [4]byte - ss_size size_t -} /* signal.h:44:9 */ - -type stack_t = sigaltstack /* signal.h:44:28 */ - -type greg_t = uint64 /* signal.h:11:23 */ -type gregset_t = [48]uint64 /* signal.h:11:31 */ -type fpregset_t = [33]float64 /* signal.h:12:16 */ - -type vrregset_t = struct { - vrregs [32][4]uint32 - vscr struct { - vscr_word uint32 - _pad [3]uint32 - } - vrsave uint32 - _pad [3]uint32 -} /* signal.h:27:3 */ - -type sigcontext = struct { - _unused [4]uint64 - signal int32 - _pad0 int32 - handler uint64 - oldmask uint64 - regs uintptr - gp_regs gregset_t - fp_regs fpregset_t - v_regs uintptr - vmx_reserve [101]int64 -} /* signal.h:29:9 */ - -type mcontext_t = sigcontext /* signal.h:40:3 */ - -type __ucontext = struct { - uc_flags uint64 - uc_link uintptr - uc_stack stack_t - uc_sigmask sigset_t - uc_mcontext mcontext_t -} /* signal.h:56:9 */ - -type ucontext_t = __ucontext /* signal.h:62:3 */ - -type sigval = struct { - _ [0]uint64 - sival_int int32 - _ [4]byte -} /* time.h:107:1 */ - -type siginfo_t = struct { - si_signo int32 - si_errno int32 - si_code int32 - _ [4]byte - __si_fields struct { - _ [0]uint64 - __pad [112]uint8 - } -} /* signal.h:145:3 */ - -type sigaction = struct { - __sa_handler struct{ sa_handler uintptr } - sa_mask sigset_t - sa_flags int32 - _ [4]byte - sa_restorer uintptr -} /* signal.h:167:1 */ - -type sig_t = uintptr /* signal.h:251:14 */ - -type sig_atomic_t = int32 /* signal.h:269:13 */ - -func a_ll(tls *TLS, p uintptr) int32 { /* atomic_arch.h:2:19: */ - var v int32 - panic(`arch/powerpc64/atomic_arch.h:5:2: assembler statements not supported`) - return v -} - -func a_sc(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:10:19: */ - var r int32 - panic(`arch/powerpc64/atomic_arch.h:13:2: assembler statements not supported`) - return r & 0x20000000 // "bit 2" of "cr0" (backwards bit order) -} - -func a_ll_p(tls *TLS, p uintptr) uintptr { /* atomic_arch.h:20:20: */ - var v uintptr - panic(`arch/powerpc64/atomic_arch.h:23:2: assembler statements not supported`) - return v -} - -func a_sc_p(tls *TLS, p uintptr, v uintptr) int32 { /* atomic_arch.h:28:19: */ - var r int32 - panic(`arch/powerpc64/atomic_arch.h:31:2: assembler statements not supported`) - return r & 0x20000000 // "bit 2" of "cr0" (backwards bit order) -} - -func a_barrier(tls *TLS) { /* atomic_arch.h:38:20: */ - panic(`arch/powerpc64/atomic_arch.h:40:2: assembler statements not supported`) -} - -func a_post_llsc(tls *TLS) { /* atomic_arch.h:46:20: */ - panic(`arch/powerpc64/atomic_arch.h:48:2: assembler statements not supported`) -} - -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic.h:20:19: */ - var old int32 - a_barrier(tls) - for __ccgo := true; __ccgo; __ccgo = old == t && !(a_sc(tls, p, s) != 0) { - old = a_ll(tls, p) - } - a_post_llsc(tls) - return old -} - -func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:33:19: */ - var old int32 - a_barrier(tls) - for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, v) != 0) { - old = a_ll(tls, p) - } - a_post_llsc(tls) - return old -} - -func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:46:19: */ - var old int32 - a_barrier(tls) - for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, int32(uint32(old)+uint32(v))) != 0) { - old = a_ll(tls, p) - } - a_post_llsc(tls) - return old -} - -func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:59:19: */ - var old int32 - a_barrier(tls) - for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old&v) != 0) { - old = a_ll(tls, p) - } - a_post_llsc(tls) - return old -} - -func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:72:19: */ - var old int32 - a_barrier(tls) - for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old|v) != 0) { - old = a_ll(tls, p) - } - a_post_llsc(tls) - return old -} - -func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */ - a_fetch_and(tls, p, v) -} - -func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */ - a_fetch_or(tls, p, v) -} - -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - -func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */ - return int32(_sdebruijn328[x&-x*uint32_t(0x076be629)>>27]) -} - -var _sdebruijn328 = [32]uint8{ - uint8(0), uint8(1), uint8(23), uint8(2), uint8(29), uint8(24), uint8(19), uint8(3), uint8(30), uint8(27), uint8(25), uint8(11), uint8(20), uint8(8), uint8(4), uint8(13), - uint8(31), uint8(22), uint8(28), uint8(18), uint8(26), uint8(10), uint8(7), uint8(12), uint8(21), uint8(17), uint8(9), uint8(6), uint8(16), uint8(5), uint8(15), uint8(14), -} /* atomic.h:261:20 */ - -func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic.h:272:19: */ - if uint64(unsafe.Sizeof(int64(0))) < uint64(8) { - var y uint32_t = uint32_t(x) - if !(y != 0) { - y = uint32_t(x >> 32) - return 32 + a_ctz_32(tls, y) - } - return a_ctz_32(tls, y) - } - return int32(_sdebruijn648[uint64(x&-x)*0x022fdd63cc95386d>>58]) -} - -var _sdebruijn648 = [64]uint8{ - uint8(0), uint8(1), uint8(2), uint8(53), uint8(3), uint8(7), uint8(54), uint8(27), uint8(4), uint8(38), uint8(41), uint8(8), uint8(34), uint8(55), uint8(48), uint8(28), - uint8(62), uint8(5), uint8(39), uint8(46), uint8(44), uint8(42), uint8(22), uint8(9), uint8(24), uint8(35), uint8(59), uint8(56), uint8(49), uint8(18), uint8(29), uint8(11), - uint8(63), uint8(52), uint8(6), uint8(26), uint8(37), uint8(40), uint8(33), uint8(47), uint8(61), uint8(45), uint8(43), uint8(21), uint8(23), uint8(58), uint8(17), uint8(10), - uint8(51), uint8(25), uint8(36), uint8(32), uint8(60), uint8(20), uint8(57), uint8(16), uint8(50), uint8(31), uint8(19), uint8(15), uint8(30), uint8(14), uint8(13), uint8(12), -} /* atomic.h:274:20 */ - -type __timer = struct { - timerid int32 - _ [4]byte - thread pthread_t -} /* pthread_impl.h:64:1 */ - -func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */ - var tp uintptr - panic(`arch/powerpc64/pthread_arch.h:4:2: assembler statements not supported`) - return tp - uintptr(0x7000) - uintptr(uint64(unsafe.Sizeof(__pthread{}))) -} - -func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */ - if priv != 0 { - priv = 128 - } - if cnt < 0 { - cnt = 0x7fffffff - } - _ = Bool32(__syscall3(tls, int64(221), int64(addr), int64(1|priv), int64(cnt)) != int64(-38) || __syscall3(tls, int64(221), int64(addr), int64(1), int64(cnt)) != 0) -} - -func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */ - if priv != 0 { - priv = 128 - } - _ = Bool32(__syscall4(tls, int64(221), int64(addr), int64(0|priv), int64(val), int64(0)) != int64(-38) || __syscall4(tls, int64(221), int64(addr), int64(0), int64(val), int64(0)) != 0) -} - -var X__fsmu8 = [51]uint32_t{ - func() uint32 { - if 0x2 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2) - }(), func() uint32 { - if 0x3 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3) - }(), func() uint32 { - if 0x4 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4) - }(), func() uint32 { - if 0x5 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5) - }(), func() uint32 { - if 0x6 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6) - }(), func() uint32 { - if 0x7 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7) - }(), - func() uint32 { - if 0x8 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8) - }(), func() uint32 { - if 0x9 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9) - }(), func() uint32 { - if 0xa < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa) - }(), func() uint32 { - if 0xb < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb) - }(), func() uint32 { - if 0xc < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc) - }(), func() uint32 { - if 0xd < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd) - }(), func() uint32 { - if 0xe < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe) - }(), func() uint32 { - if 0xf < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf) - }(), - func() uint32 { - if 0x0+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x0+16) - }(), func() uint32 { - if 0x1+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x1+16) - }(), func() uint32 { - if 0x2+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2+16) - }(), func() uint32 { - if 0x3+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3+16) - }(), func() uint32 { - if 0x4+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4+16) - }(), func() uint32 { - if 0x5+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5+16) - }(), func() uint32 { - if 0x6+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6+16) - }(), func() uint32 { - if 0x7+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7+16) - }(), - func() uint32 { - if 0x8+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8+16) - }(), func() uint32 { - if 0x9+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9+16) - }(), func() uint32 { - if 0xa+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa+16) - }(), func() uint32 { - if 0xb+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb+16) - }(), func() uint32 { - if 0xc+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc+16) - }(), func() uint32 { - if 0xd+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd+16) - }(), func() uint32 { - if 0xe+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe+16) - }(), func() uint32 { - if 0xf+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf+16) - }(), - func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x0 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x0), func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x1 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x1), func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x2 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x2), func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x3 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x3), func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x4 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x4), func() uint32 { - if 0x5 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x5 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x5), func() uint32 { - if 0x6 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x6 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x6), func() uint32 { - if 0x7 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x7 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x7), - func() uint32 { - if 0x8 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x8 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x8), func() uint32 { - if 0x9 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x9 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x9), func() uint32 { - if 0xa == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xa == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xa), func() uint32 { - if 0xb == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xb == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xb), func() uint32 { - if 0xc == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xc == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xc), func() uint32 { - if 0xd == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xd == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xd), func() uint32 { - if 0xe == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xe == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xe), func() uint32 { - if 0xf == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xf == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xf), - func() uint32 { - if 0x0 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x0 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x0), func() uint32 { - if 0x1 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x1 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x1), func() uint32 { - if 0x2 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x2 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x2), func() uint32 { - if 0x3 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x3 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x3), func() uint32 { - if 0x4 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x4 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x4), -} /* internal.c:18:16 */ - -type wint_t = uint32 /* alltypes.h:190:18 */ - -type wctype_t = uint64 /* alltypes.h:195:23 */ - -type __mbstate_t = struct { - __opaque1 uint32 - __opaque2 uint32 -} /* alltypes.h:329:9 */ - -type mbstate_t = __mbstate_t /* alltypes.h:329:63 */ - -func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */ - if __ccgo_strace { - trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var c uint32 - var s uintptr - var N uint32 - // var dummy wchar_t at bp, 4 - s = src - N = uint32(n) - - if !!(st != 0) { - goto __1 - } - st = uintptr(unsafe.Pointer(&_sinternal_state)) -__1: - ; - c = *(*uint32)(unsafe.Pointer(st)) - - if !!(s != 0) { - goto __2 - } - if !(c != 0) { - goto __4 - } - goto ilseq -__4: - ; - return uint64(0) - goto __3 -__2: - if !!(wc != 0) { - goto __5 - } - wc = bp /* &dummy */ -__5: - ; -__3: - ; - - if !!(n != 0) { - goto __6 - } - return Uint64FromInt32(-2) -__6: - ; - if !!(c != 0) { - goto __7 - } - if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) { - goto __8 - } - return BoolUint64(!!(AssignPtrInt32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s)))) != 0)) -__8: - ; - if !(func() int32 { - if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { - return 4 - } - return 1 - }() == 1) { - goto __9 - } - *(*wchar_t)(unsafe.Pointer(wc)) = 0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s)))) - return 1 -__9: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) { - goto __10 - } - goto ilseq -__10: - ; - c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2] - n-- -__7: - ; - - if !(n != 0) { - goto __11 - } - if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) { - goto __12 - } - goto ilseq -__12: - ; -loop: - c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80) - n-- - if !!(c&(uint32(1)<<31) != 0) { - goto __13 - } - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(c) - return size_t(N) - n -__13: - ; - if !(n != 0) { - goto __14 - } - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) { - goto __15 - } - goto ilseq -__15: - ; - goto loop -__14: - ; -__11: - ; - - *(*uint32)(unsafe.Pointer(st)) = c - return Uint64FromInt32(-2) -ilseq: - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 - return Uint64FromInt32(-1) -} - -var _sinternal_state uint32 /* mbrtowc.c:8:18: */ - -func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) - } - return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0)) -} - -type imaxdiv_t = struct { - quot intmax_t - rem intmax_t -} /* inttypes.h:14:40 */ - -type socklen_t = uint32 /* alltypes.h:353:18 */ - -type sa_family_t = uint16 /* alltypes.h:358:24 */ - -type msghdr = struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - msg_iovlen int32 - __pad1 int32 - msg_control uintptr - msg_controllen socklen_t - __pad2 int32 - msg_flags int32 - _ [4]byte -} /* socket.h:22:1 */ - -type cmsghdr = struct { - cmsg_len socklen_t - __pad1 int32 - cmsg_level int32 - cmsg_type int32 -} /* socket.h:44:1 */ - -type linger = struct { - l_onoff int32 - l_linger int32 -} /* socket.h:74:1 */ - -type sockaddr = struct { - sa_family sa_family_t - sa_data [14]uint8 -} /* socket.h:367:1 */ - -type sockaddr_storage = struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 -} /* socket.h:372:1 */ - -type in_port_t = uint16_t /* in.h:12:18 */ -type in_addr_t = uint32_t /* in.h:13:18 */ -type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */ - -type sockaddr_in = struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t -} /* in.h:16:1 */ - -type in6_addr = struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } -} /* in.h:23:1 */ - -type sockaddr_in6 = struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t -} /* in.h:34:1 */ - -type ipv6_mreq = struct { - ipv6mr_multiaddr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipv6mr_interface uint32 -} /* in.h:42:1 */ - -type ip_opts = struct { - ip_dst struct{ s_addr in_addr_t } - ip_opts [40]uint8 -} /* in.h:229:1 */ - -type ip_mreq = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } -} /* in.h:247:1 */ - -type ip_mreqn = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_address struct{ s_addr in_addr_t } - imr_ifindex int32 -} /* in.h:252:1 */ - -type ip_mreq_source = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } - imr_sourceaddr struct{ s_addr in_addr_t } -} /* in.h:258:1 */ - -type ip_msfilter = struct { - imsf_multiaddr struct{ s_addr in_addr_t } - imsf_interface struct{ s_addr in_addr_t } - imsf_fmode uint32_t - imsf_numsrc uint32_t - imsf_slist [1]struct{ s_addr in_addr_t } -} /* in.h:264:1 */ - -type group_req = struct { - gr_interface uint32_t - _ [4]byte - gr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:275:1 */ - -type group_source_req = struct { - gsr_interface uint32_t - _ [4]byte - gsr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gsr_source struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:280:1 */ - -type group_filter = struct { - gf_interface uint32_t - _ [4]byte - gf_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gf_fmode uint32_t - gf_numsrc uint32_t - gf_slist [1]struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:286:1 */ - -type in_pktinfo = struct { - ipi_ifindex int32 - ipi_spec_dst struct{ s_addr in_addr_t } - ipi_addr struct{ s_addr in_addr_t } -} /* in.h:297:1 */ - -type in6_pktinfo = struct { - ipi6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipi6_ifindex uint32 -} /* in.h:303:1 */ - -type ip6_mtuinfo = struct { - ip6m_addr struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t - } - ip6m_mtu uint32_t -} /* in.h:308:1 */ - -type addrinfo = struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr -} /* netdb.h:16:1 */ - -// Legacy functions follow (marked OBsolete in SUS) - -type netent = struct { - n_name uintptr - n_aliases uintptr - n_addrtype int32 - n_net uint32_t -} /* netdb.h:62:1 */ - -type hostent = struct { - h_name uintptr - h_aliases uintptr - h_addrtype int32 - h_length int32 - h_addr_list uintptr -} /* netdb.h:69:1 */ - -type servent = struct { - s_name uintptr - s_aliases uintptr - s_port int32 - _ [4]byte - s_proto uintptr -} /* netdb.h:78:1 */ - -type protoent = struct { - p_name uintptr - p_aliases uintptr - p_proto int32 - _ [4]byte -} /* netdb.h:85:1 */ - -type aibuf = struct { - ai struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr - } - sa struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte - } - lock [1]int32 - slot int16 - ref int16 - _ [4]byte -} /* lookup.h:10:1 */ - -type sa = struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte -} /* lookup.h:10:1 */ - -type address = struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 -} /* lookup.h:20:1 */ - -type service = struct { - port uint16_t - proto uint8 - socktype uint8 -} /* lookup.h:27:1 */ - -type resolvconf = struct { - ns [3]struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 - } - nns uint32 - attempts uint32 - ndots uint32 - timeout uint32 -} /* lookup.h:34:1 */ - -func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ - if __ccgo_strace { - trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) - } - var cnt size_t - cnt = uint64(1) -__1: - if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) { - goto __3 - } - goto __2 -__2: - cnt++ - p = (*addrinfo)(unsafe.Pointer(p)).ai_next - goto __1 - goto __3 -__3: - ; - var b uintptr = p - uintptr(uint64(uintptr(0))) - b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).slot) - //TODO LOCK(b->lock); - if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) { - Xfree(tls, b) - } - //TODO else UNLOCK(b->lock); -} - -func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ - if __ccgo_strace { - trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) - } - bp := tls.Alloc(1608) - defer tls.Free(1608) - - // var ports [2]service at bp, 8 - - // var addrs [48]address at bp+8, 1344 - - // var canon [256]uint8 at bp+1352, 256 - - var outcanon uintptr - var nservs int32 - var naddrs int32 - var nais int32 - var canon_len int32 - var i int32 - var j int32 - var k int32 - var family int32 = 0 - var flags int32 = 0 - var proto int32 = 0 - var socktype int32 = 0 - var out uintptr - - if !(host != 0) && !(serv != 0) { - return -2 - } - - if hint != 0 { - family = (*addrinfo)(unsafe.Pointer(hint)).ai_family - flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags - proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol - socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype - - var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 - if flags&mask != flags { - return -1 - } - - switch family { - case 2: - fallthrough - case 10: - fallthrough - case 0: - break - fallthrough - default: - return -6 - } - } - - if flags&0x20 != 0 { - Xabort(tls) //TODO- - // /* Define the "an address is configured" condition for address - // * families via ability to create a socket for the family plus - // * routability of the loopback address for the family. */ - // static const struct sockaddr_in lo4 = { - // .sin_family = AF_INET, .sin_port = 65535, - // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN - // ? 0x7f000001 : 0x0100007f - // }; - // static const struct sockaddr_in6 lo6 = { - // .sin6_family = AF_INET6, .sin6_port = 65535, - // .sin6_addr = IN6ADDR_LOOPBACK_INIT - // }; - // int tf[2] = { AF_INET, AF_INET6 }; - // const void *ta[2] = { &lo4, &lo6 }; - // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; - // for (i=0; i<2; i++) { - // if (family==tf[1-i]) continue; - // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, - // IPPROTO_UDP); - // if (s>=0) { - // int cs; - // pthread_setcancelstate( - // PTHREAD_CANCEL_DISABLE, &cs); - // int r = connect(s, ta[i], tl[i]); - // pthread_setcancelstate(cs, 0); - // close(s); - // if (!r) continue; - // } - // switch (errno) { - // case EADDRNOTAVAIL: - // case EAFNOSUPPORT: - // case EHOSTUNREACH: - // case ENETDOWN: - // case ENETUNREACH: - // break; - // default: - // return EAI_SYSTEM; - // } - // if (family == tf[i]) return EAI_NONAME; - // family = tf[1-i]; - // } - } - - nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) - if nservs < 0 { - return nservs - } - - naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) - if naddrs < 0 { - return naddrs - } - - nais = nservs * naddrs - canon_len = int32(Xstrlen(tls, bp+1352)) - out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1)) - if !(out != 0) { - return -10 - } - - if canon_len != 0 { - outcanon = out + uintptr(nais)*88 - Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1)) - } else { - outcanon = uintptr(0) - } - - for k = AssignInt32(&i, 0); i < naddrs; i++ { - j = 0 - __1: - if !(j < nservs) { - goto __3 - } - { - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).slot = int16(k) - //TODO out[k].ai = (struct addrinfo){ - //TODO .ai_family = addrs[i].family, - //TODO .ai_socktype = ports[j].socktype, - //TODO .ai_protocol = ports[j].proto, - //TODO .ai_addrlen = addrs[i].family == AF_INET - //TODO ? sizeof(struct sockaddr_in) - //TODO : sizeof(struct sockaddr_in6), - //TODO .ai_addr = (void *)&out[k].sa, - //TODO .ai_canonname = outcanon }; - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addrlen = func() uint32 { - if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 { - return uint32(unsafe.Sizeof(sockaddr_in{})) - } - return uint32(unsafe.Sizeof(sockaddr_in6{})) - }() - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addr = out + uintptr(k)*88 + 48 - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_canonname = outcanon - if k != 0 { - (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).ai.ai_next = out + uintptr(k)*88 - } - switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family { - case 2: - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_family = sa_family_t(2) - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) - break - case 10: - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_family = sa_family_t(10) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid - Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) - break - } - - } - goto __2 - __2: - j++ - k++ - goto __1 - goto __3 - __3: - } - (*aibuf)(unsafe.Pointer(out)).ref = int16(nais) - *(*uintptr)(unsafe.Pointer(res)) = out - return 0 -} - -type ucred = struct { - pid pid_t - uid uid_t - gid gid_t -} /* socket.h:57:1 */ - -type mmsghdr = struct { - msg_hdr struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - msg_iovlen int32 - __pad1 int32 - msg_control uintptr - msg_controllen socklen_t - __pad2 int32 - msg_flags int32 - _ [4]byte - } - msg_len uint32 - _ [4]byte -} /* socket.h:63:1 */ - -func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for __ccgo := true; __ccgo; __ccgo = err == 34 { - Xfree(tls, _sh) - _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyaddr_r(tls, a, l, af, _sh, - _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh -} - -var _sh uintptr /* gethostbyaddr.c:9:24: */ - -func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(28) - defer tls.Free(28) - - //TODO union { - //TODO struct sockaddr_in sin; - //TODO struct sockaddr_in6 sin6; - //TODO } sa = { .sin.sin_family = af }; - *(*struct { - sin sockaddr_in - _ [12]byte - })(unsafe.Pointer(bp)) = struct { - sin sockaddr_in - _ [12]byte - }{} //TODO- - (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO- - var sl socklen_t - if af == 10 { - sl = uint32(unsafe.Sizeof(sockaddr_in6{})) - } else { - sl = uint32(unsafe.Sizeof(sockaddr_in{})) - } - var i int32 - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - - // Load address argument into sockaddr structure - if af == 10 && l == socklen_t(16) { - Xmemcpy(tls, bp+8, a, uint64(16)) - } else if af == 2 && l == socklen_t(4) { - Xmemcpy(tls, bp+4, a, uint64(4)) - } else { - *(*int32)(unsafe.Pointer(err)) = 3 - return 22 - } - - // Align buffer and check for space for pointers and ip address - i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))) - if !(i != 0) { - i = int32(unsafe.Sizeof(uintptr(0))) - } - if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) { - return 34 - } - buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i)) - buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l)) - - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, uint64(l)) - buf += uintptr(l) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*8)) = uintptr(0) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - - switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - case -12: - return 34 - default: - fallthrough - case -10: - fallthrough - case -11: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - case 0: - break - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = int32(l) - (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - return Xgethostbyname2(tls, name, 2) -} - -func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for __ccgo := true; __ccgo; __ccgo = err == 34 { - Xfree(tls, _sh1) - _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh1 != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyname2_r(tls, name, af, _sh1, - _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh1 -} - -var _sh1 uintptr /* gethostbyname2.c:10:24: */ - -func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(1600) - defer tls.Free(1600) - - // var addrs [48]address at bp, 1344 - - // var canon [256]uint8 at bp+1344, 256 - - var i int32 - var cnt int32 - var align size_t - var need size_t - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) - if cnt < 0 { - switch cnt { - case -2: - *(*int32)(unsafe.Pointer(err)) = 1 - return 2 - fallthrough - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - fallthrough - default: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return 74 - fallthrough - case -10: - fallthrough - case -11: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - } - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = func() int32 { - if af == 10 { - return 16 - } - return 4 - }() - - // Align buffer - align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)) - - need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0))) - need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).h_length)) - need = need + (Xstrlen(tls, name) + uint64(1)) - need = need + (Xstrlen(tls, bp+1344) + uint64(1)) - need = need + align - - if need > buflen { - return 34 - } - - buf += uintptr(align) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0)))) - - for i = 0; i < cnt; i++ { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = buf - buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length) - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*hostent)(unsafe.Pointer(h)).h_length)) - } - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = uintptr(0) - - (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf) - Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344) - buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + uint64(1)) - - if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = buf - Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)), name) - buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8))) + uint64(1)) - } else { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - } - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*8)) = uintptr(0) - - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */ - if __ccgo_strace { - trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) - } - return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err) -} - -type if_nameindex = struct { - if_index uint32 - _ [4]byte - if_name uintptr -} /* if.h:12:1 */ - -type ifaddr = struct { - ifa_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - ifa_ifu struct { - ifu_broadaddr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - } - ifa_ifp uintptr - ifa_next uintptr -} /* if.h:51:1 */ - -type ifmap = struct { - mem_start uint64 - mem_end uint64 - base_addr uint16 - irq uint8 - dma uint8 - port uint8 - _ [3]byte -} /* if.h:64:1 */ - -type ifreq = struct { - ifr_ifrn struct{ ifrn_name [16]uint8 } - ifr_ifru struct { - _ [0]uint64 - ifru_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - _ [8]byte - } -} /* if.h:76:1 */ - -type ifconf = struct { - ifc_len int32 - _ [4]byte - ifc_ifcu struct{ ifcu_buf uintptr } -} /* if.h:116:1 */ - -type ns_sect = uint32 /* nameser.h:37:3 */ - -type __ns_msg = struct { - _msg uintptr - _eom uintptr - _id uint16_t - _flags uint16_t - _counts [4]uint16_t - _ [4]byte - _sections [4]uintptr - _sect ns_sect - _rrnum int32 - _msg_ptr uintptr -} /* nameser.h:39:9 */ - -type ns_msg = __ns_msg /* nameser.h:46:3 */ - -type _ns_flagdata = struct { - mask int32 - shift int32 -} /* nameser.h:48:1 */ - -type __ns_rr = struct { - name [1025]uint8 - _ [1]byte - __type uint16_t - rr_class uint16_t - _ [2]byte - ttl uint32_t - rdlength uint16_t - _ [2]byte - rdata uintptr -} /* nameser.h:59:9 */ - -type ns_rr = __ns_rr /* nameser.h:66:3 */ - -type ns_flag = uint32 /* nameser.h:87:3 */ - -type ns_opcode = uint32 /* nameser.h:96:3 */ - -type ns_rcode = uint32 /* nameser.h:115:3 */ - -type ns_update_operation = uint32 /* nameser.h:121:3 */ - -type ns_tsig_key1 = struct { - name [1025]uint8 - alg [1025]uint8 - _ [6]byte - data uintptr - len int32 - _ [4]byte -} /* nameser.h:123:1 */ - -type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ - -type ns_tcp_tsig_state1 = struct { - counter int32 - _ [4]byte - key uintptr - ctx uintptr - sig [512]uint8 - siglen int32 - _ [4]byte -} /* nameser.h:130:1 */ - -type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ - -type ns_type = uint32 /* nameser.h:200:3 */ - -type ns_class = uint32 /* nameser.h:219:3 */ - -type ns_key_types = uint32 /* nameser.h:226:3 */ - -type ns_cert_types = uint32 /* nameser.h:234:3 */ - -type HEADER = struct { - _ [0]uint32 - id uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */ - qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ - nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ -} /* nameser.h:353:3 */ - -// unused; purely for broken apps -type __res_state = struct { - retrans int32 - retry int32 - options uint64 - nscount int32 - nsaddr_list [3]struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - id uint16 - _ [2]byte - dnsrch [7]uintptr - defdname [256]uint8 - pfcode uint64 - ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ - _ [4]byte - sort_list [10]struct { - addr struct{ s_addr in_addr_t } - mask uint32_t - } - qhook uintptr - rhook uintptr - res_h_errno int32 - _vcsock int32 - _flags uint32 - _ [4]byte - _u struct { - _ [0]uint64 - pad [52]uint8 - _ [4]byte - } -} /* resolv.h:26:9 */ - -// unused; purely for broken apps -type res_state = uintptr /* resolv.h:62:3 */ - -type res_sym = struct { - number int32 - _ [4]byte - name uintptr - humanname uintptr -} /* resolv.h:70:1 */ - -func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ - p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0)))) - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0) - for __ccgo := true; __ccgo; __ccgo = x != 0 { - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10)) - x = x / uint32(10) - } - return p -} - -func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ - bp := tls.Alloc(32) - defer tls.Free(32) - - Xsprintf(tls, s, ts+25, - VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) -} - -func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ - var i int32 - for i = 15; i >= 0; i-- { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - } - Xstrcpy(tls, s, ts+50) -} - -var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ - -func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ - bp := tls.Alloc(556) - defer tls.Free(556) - - // var line [512]uint8 at bp+16, 512 - - var p uintptr - var z uintptr - var _buf [1032]uint8 - _ = _buf - // var atmp [16]uint8 at bp, 16 - - // var iplit address at bp+528, 28 - - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - return - } - if family == 2 { - Xmemcpy(tls, bp+uintptr(12), a, uint64(4)) - Xmemcpy(tls, bp, ts+90, uint64(12)) - a = bp /* &atmp[0] */ - } - for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 { - if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - - for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { - continue - } - - if (*address)(unsafe.Pointer(bp+528)).family == 2 { - Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4)) - Xmemcpy(tls, bp+528+8, ts+90, uint64(12)) - (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0) - } - - if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid { - continue - } - - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if (int64(z)-int64(p))/1 < int64(256) { - Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1))) - break - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) -} - -func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ - Xabort(tls) //TODO- - // unsigned long svport; - // char line[128], *p, *z; - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) return; - // while (fgets(line, sizeof line, f)) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // for (p=line; *p && !isspace(*p); p++); - // if (!*p) continue; - // *p++ = 0; - // svport = strtoul(p, &z, 10); - - // if (svport != port || z==p) continue; - // if (dgram && strncmp(z, "/udp", 4)) continue; - // if (!dgram && strncmp(z, "/tcp", 4)) continue; - // if (p-line > 32) continue; - - // memcpy(buf, line, p-line); - // break; - // } - // __fclose_ca(f); -} - -func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */ - if __ccgo_strace { - trc("tls=%v sa1=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa1, sl, node, nodelen, serv, servlen, flags, origin(2)) - } - bp := tls.Alloc(347) - defer tls.Free(347) - - // var ptr [78]uint8 at bp, 78 - - // var buf [256]uint8 at bp+78, 256 - - // var num [13]uint8 at bp+334, 13 - - var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family) - var a uintptr - var scopeid uint32 - - switch af { - case 2: - a = sa1 + 4 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) { - return -6 - } - mkptr4(tls, bp, a) - scopeid = uint32(0) - break - case 10: - a = sa1 + 8 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) { - return -6 - } - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - mkptr6(tls, bp, a) - } else { - mkptr4(tls, bp, a+uintptr(12)) - } - scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id - break - default: - return -6 - } - - if node != 0 && nodelen != 0 { - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x01 != 0) { - reverse_hosts(tls, bp+78, a, scopeid, af) - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) { - Xabort(tls) //TODO- - // unsigned char query[18+PTR_MAX], reply[512]; - // int qlen = __res_mkquery(0, ptr, 1, RR_PTR, - // 0, 0, 0, query, sizeof query); - // query[3] = 0; /* don't need AD flag */ - // int rlen = __res_send(query, qlen, reply, sizeof reply); - // buf[0] = 0; - // if (rlen > 0) - // __dns_parse(reply, rlen, dns_parse_callback, buf); - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) { - if flags&0x08 != 0 { - return -2 - } - Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{}))) - if scopeid != 0 { - Xabort(tls) //TODO- - // char *p = 0, tmp[IF_NAMESIZE+1]; - // if (!(flags & NI_NUMERICSCOPE) && - // (IN6_IS_ADDR_LINKLOCAL(a) || - // IN6_IS_ADDR_MC_LINKLOCAL(a))) - // p = if_indextoname(scopeid, tmp+1); - // if (!p) - // p = itoa(num, scopeid); - // *--p = '%'; - // strcat(buf, p); - } - } - if Xstrlen(tls, bp+78) >= size_t(nodelen) { - return -12 - } - Xstrcpy(tls, node, bp+78) - } - - if serv != 0 && servlen != 0 { - var p uintptr = bp + 78 /* buf */ - var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port)) - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x02 != 0) { - reverse_services(tls, bp+78, port, flags&0x10) - } - if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - p = itoa(tls, bp+334, uint32(port)) - } - if Xstrlen(tls, p) >= size_t(servlen) { - return -12 - } - Xstrcpy(tls, serv, p) - } - - return 0 -} - -var Xh_errno int32 /* h_errno.c:4:5: */ - -func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&Xh_errno)) -} - -func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ - if __ccgo_strace { - trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) - } - bp := tls.Alloc(40) - defer tls.Free(40) - - var s uintptr = s0 - var d uintptr = dest - *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)} - // var z uintptr at bp+32, 8 - - var i int32 - - for i = 0; i < 4; i++ { - *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0) - if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != '.' || !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) - }() != 0) { - return 0 - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) { - break - } - s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) - } - if i == 4 { - return 0 - } - switch i { - case 0: - *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff) - AssignShrPtrUint64(bp, int(24)) - fallthrough - case 1: - *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff) - AssignShrPtrUint64(bp+1*8, int(16)) - fallthrough - case 2: - *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff) - AssignShrPtrUint64(bp+2*8, int(8)) - } - for i = 0; i < 4; i++ { - if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) { - return 0 - } - *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8))) - } - return 1 -} - -func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ - if __ccgo_strace { - trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var a uintptr = a0 - var i int32 - var j int32 - var max int32 - var best int32 - // var buf [100]uint8 at bp+176, 100 - - switch af { - case 2: - if socklen_t(Xsnprintf(tls, s, uint64(l), ts+103, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { - return s - } - break - case 10: - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+115, - VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } else { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+139, - VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } - // Replace longest /(^0|:)[:0]{2,}/ with "::" - i = AssignInt32(&best, 0) - max = 2 - for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { - if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { - continue - } - j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169)) - if j > max { - best = i - max = j - } - } - if max > 3 { - *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':')) - Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1)) - } - if Xstrlen(tls, bp+176) < size_t(l) { - Xstrcpy(tls, s, bp+176) - return s - } - break - default: - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return uintptr(0) - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 - return uintptr(0) -} - -func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ - if c-uint32('0') < uint32(10) { - return int32(c - uint32('0')) - } - c = c | uint32(32) - if c-uint32('a') < uint32(6) { - return int32(c - uint32('a') + uint32(10)) - } - return -1 -} - -func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ - if __ccgo_strace { - trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) - } - bp := tls.Alloc(16) - defer tls.Free(16) - - // var ip [8]uint16_t at bp, 16 - - var a uintptr = a0 - var i int32 - var j int32 - var v int32 - var d int32 - var brk int32 = -1 - var need_v4 int32 = 0 - - if af == 2 { - for i = 0; i < 4; i++ { - for v = AssignInt32(&j, 0); j < 3 && func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) - }() != 0; j++ { - v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0' - } - if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 { - return 0 - } - *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { - return 1 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' { - return 0 - } - s += uintptr(j + 1) - } - return 0 - } else if af != 10 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return -1 - } - - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { - return 0 - } - - for i = 0; ; i++ { - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 { - brk = i - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { - break - } - if i == 7 { - return 0 - } - continue - } - for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { - v = 16*v + d - } - if j == 0 { - return 0 - } - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) - if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { - break - } - if i == 7 { - return 0 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' { - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { - return 0 - } - need_v4 = 1 - i++ - break - } - s += uintptr(j + 1) - } - if brk >= 0 { - Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk))) - for j = 0; j < 7-i; j++ { - *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) - } - } - for j = 0; j < 8; j++ { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) - } - if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { - return 0 - } - return 1 -} - -func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) - } - bp := tls.Alloc(96) - defer tls.Free(96) - - // var a4 in_addr at bp, 4 - - // var a6 in6_addr at bp+68, 16 - - if X__inet_aton(tls, name, bp) > 0 { - if family == 10 { // wrong family - return -2 - } - Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 2 - (*address)(unsafe.Pointer(buf)).scopeid = uint32(0) - return 1 - } - // var tmp [64]uint8 at bp+4, 64 - - var p uintptr = Xstrchr(tls, name, '%') - // var z uintptr at bp+88, 8 - - var scopeid uint64 = uint64(0) - if p != 0 && (int64(p)-int64(name))/1 < int64(64) { - Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1)) - *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = uint8(0) - name = bp + 4 /* &tmp[0] */ - } - - if Xinet_pton(tls, 10, name, bp+68) <= 0 { - return 0 - } - if family == 2 { // wrong family - return -2 - } - - Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 10 - if p != 0 { - if func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) - }() != 0 { - scopeid = Xstrtoull(tls, p, bp+88, 10) - } else { - *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1) - } - if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { - Xabort(tls) //TODO- - // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && - // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) - // return EAI_NONAME; - // scopeid = if_nametoindex(p); - // if (!scopeid) return EAI_NONAME; - } - if scopeid > uint64(0xffffffff) { - return -2 - } - } - (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid) - return 1 -} - -func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ - var s uintptr - //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; - if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) { - return 0 - } - for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ { - } - return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) -} - -var Xzero_struct_address address /* lookup_name.c:27:16: */ - -func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ - var cnt int32 = 0 - if name != 0 { - return 0 - } - if flags&0x01 != 0 { - //TODO if (family != AF_INET6) - //TODO buf[cnt++] = (struct address){ .family = AF_INET }; - if family != 10 { - var x = Xzero_struct_address - x.family = 2 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - //TODO if (family != AF_INET) - //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; - if family != 2 { - var x = Xzero_struct_address - x.family = 10 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - } else { - Xabort(tls) //TODO- - // if (family != AF_INET6) - // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; - // if (family != AF_INET) - // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; - } - return cnt -} - -func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ - return X__lookup_ipliteral(tls, buf, name, family) -} - -func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var line [512]uint8 at bp, 512 - - var l size_t = Xstrlen(tls, name) - var cnt int32 = 0 - var badfam int32 = 0 - var _buf [1032]uint8 - _ = _buf - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var _f FILE - _ = _f - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { - case 2: - fallthrough - case 20: - fallthrough - case 13: - return 0 - fallthrough - default: - return -11 - } - } - for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 { - var p uintptr - var z uintptr - - if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ { - } - if !(p != 0) { - continue - } - - // Isolate IP address to parse - for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { - case 1: - cnt++ - break - case 0: - continue - default: - badfam = -2 - continue - } - - // Extract first name as canonical name - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if is_valid_hostname(tls, p) != 0 { - Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1))) - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) - if cnt != 0 { - return cnt - } - return badfam -} - -type dpc_ctx = struct { - addrs uintptr - canon uintptr - cnt int32 - _ [4]byte -} /* lookup_name.c:112:1 */ - -func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ - return -1 //TODO- - Xabort(tls) - return int32(0) //TODO- - // char search[256]; - // struct resolvconf conf; - // size_t l, dots; - // char *p, *z; - - // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; - - // /* Count dots, suppress search when >=ndots or name ends in - // * a dot, which is an explicit request for global scope. */ - // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; - // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; - - // /* Strip final dot for canon, fail if multiple trailing dots. */ - // if (name[l-1]=='.') l--; - // if (!l || name[l-1]=='.') return EAI_NONAME; - - // /* This can never happen; the caller already checked length. */ - // if (l >= 256) return EAI_NONAME; - - // /* Name with search domain appended is setup in canon[]. This both - // * provides the desired default canonical name (if the requested - // * name is not a CNAME record) and serves as a buffer for passing - // * the full requested name to name_from_dns. */ - // memcpy(canon, name, l); - // canon[l] = '.'; - - // for (p=search; *p; p=z) { - // for (; isspace(*p); p++); - // for (z=p; *z && !isspace(*z); z++); - // if (z==p) break; - // if (z-p < 256 - l - 1) { - // memcpy(canon+l+1, p, z-p); - // canon[z-p+1+l] = 0; - // int cnt = name_from_dns(buf, canon, canon, family, &conf); - // if (cnt) return cnt; - // } - // } - - // canon[l] = 0; - // return name_from_dns(buf, canon, name, family, &conf); -} - -type policy = struct { - addr [16]uint8 - len uint8 - mask uint8 - prec uint8 - label uint8 -} /* lookup_name.c:237:14 */ - -var defpolicy = [6]policy{ - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)}, - // Last rule must match all addresses to stop loop. - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)}, -} /* lookup_name.c:241:3 */ - -func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ - var i int32 - for i = 0; ; i++ { - if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].len)) != 0 { - continue - } - if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) != - int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) { - continue - } - return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 - } - return uintptr(0) -} - -func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ - return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label) -} - -func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { - return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { - return 2 - } - if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 { - return 2 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { - return 5 - } - return 14 -} - -func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ - // FIXME: The common prefix length should be limited to no greater - // than the nominal length of the prefix portion of the source - // address. However the definition of the source prefix length is - // not clear and thus this limiting is not yet implemented. - var i uint32 - for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ { - } - return int32(i) -} - -func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ - var a uintptr = _a - var b uintptr = _b - return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey -} - -func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) - } - bp := tls.Alloc(92) - defer tls.Free(92) - - var cnt int32 = 0 - var i int32 - var j int32 - _ = j - - *(*uint8)(unsafe.Pointer(canon)) = uint8(0) - if name != 0 { - // reject empty name and check len so it fits into temp bufs - var l size_t = Xstrnlen(tls, name, uint64(255)) - if l-uint64(1) >= uint64(254) { - return -2 - } - Xmemcpy(tls, canon, name, l+uint64(1)) - } - - // Procedurally, a request for v6 addresses with the v4-mapped - // flag set is like a request for unspecified family, followed - // by filtering of the results. - if flags&0x08 != 0 { - if family == 10 { - family = 0 - } else { - flags = flags - 0x08 - } - } - - // Try each backend until there's at least one result. - cnt = name_from_null(tls, buf, name, family, flags) - if !(cnt != 0) { - cnt = name_from_numeric(tls, buf, name, family) - } - if !(cnt != 0) && !(flags&0x04 != 0) { - cnt = name_from_hosts(tls, buf, canon, name, family) - if !(cnt != 0) { - cnt = name_from_dns_search(tls, buf, canon, name, family) - } - } - if cnt <= 0 { - if cnt != 0 { - return cnt - } - return -2 - } - - // Filter/transform results for v4-mapped lookup, if requested. - if flags&0x08 != 0 { - Xabort(tls) //TODO- - // if (!(flags & AI_ALL)) { - // /* If any v6 results exist, remove v4 results. */ - // for (i=0; i= 0 { - if !(Xconnect(tls, fd, da, dalen) != 0) { - key = key | 0x40000000 - if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { - if family == 2 { - Xmemcpy(tls, - bp+28+8+uintptr(12), - bp+72+4, uint64(4)) - } - if dscope == scopeof(tls, bp+28+8) { - key = key | 0x20000000 - } - if dlabel == labelof(tls, bp+28+8) { - key = key | 0x10000000 - } - prefixlen = prefixmatch(tls, bp+28+8, - bp+8) - } - } - Xclose(tls, fd) - } - key = key | dprec<<20 - key = key | (15-dscope)<<16 - key = key | prefixlen<<8 - key = key | (48-i)<<0 - (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key - } - Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr) int32 - }{addrcmp}))) - - //TODO pthread_setcancelstate(cs, 0); - - return cnt -} - -func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var line [128]uint8 - _ = line - var cnt int32 = 0 - var p uintptr - _ = p - *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ - var port uint64 = uint64(0) - - switch socktype { - case 1: - switch proto { - case 0: - proto = 6 - fallthrough - case 6: - break - default: - return -8 - } - break - case 2: - switch proto { - case 0: - proto = 17 - fallthrough - case 17: - break - default: - return -8 - } - fallthrough - case 0: - break - default: - if name != 0 { - return -8 - } - (*service)(unsafe.Pointer(buf)).port = uint16_t(0) - (*service)(unsafe.Pointer(buf)).proto = uint8(proto) - (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype) - return 1 - } - - if name != 0 { - if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) { - return -8 - } - port = Xstrtoul(tls, name, bp, 10) - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { - if port > uint64(65535) { - return -8 - } - if proto != 17 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6) - } - if proto != 6 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17) - } - return cnt - } - - if flags&0x400 != 0 { - return -2 - } - - var l size_t = Xstrlen(tls, name) - _ = l - - Xabort(tls) //TODO- - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) switch (errno) { - // case ENOENT: - // case ENOTDIR: - // case EACCES: - // return EAI_SERVICE; - // default: - // return EAI_SYSTEM; - // } - - Xabort(tls) //TODO- - // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // /* Find service name */ - // for(p=line; (p=strstr(p, name)); p++) { - // if (p>line && !isspace(p[-1])) continue; - // if (p[l] && !isspace(p[l])) continue; - // break; - // } - // if (!p) continue; - - // /* Skip past canonical name at beginning of line */ - // for (p=line; *p && !isspace(*p); p++); - - // port = strtoul(p, &z, 10); - // if (port > 65535 || z==p) continue; - // if (!strncmp(z, "/udp", 4)) { - // if (proto == IPPROTO_TCP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_DGRAM; - // buf[cnt++].proto = IPPROTO_UDP; - // } - // if (!strncmp(z, "/tcp", 4)) { - // if (proto == IPPROTO_UDP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_STREAM; - // buf[cnt++].proto = IPPROTO_TCP; - // } - // } - // __fclose_ca(f); - // return cnt > 0 ? cnt : EAI_SERVICE; - Xabort(tls) - return int32(0) //TODO- -} - -func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */ - x = x ^ x>>11 - x = x ^ x<<7&0x9D2C5680 - x = x ^ x<<15&0xEFC60000 - x = x ^ x>>18 - return x -} - -func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */ - if __ccgo_strace { - trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) - } - return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2)) -} - -func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var owner int32 = (*FILE)(unsafe.Pointer(f)).lock - var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid - if owner&CplInt32(0x40000000) == tid { - return 0 - } - owner = a_cas(tls, f+140, 0, tid) - if !(owner != 0) { - return 1 - } - for AssignInt32(&owner, a_cas(tls, f+140, 0, tid|0x40000000)) != 0 { - if owner&0x40000000 != 0 || a_cas(tls, f+140, owner, owner|0x40000000) == owner { - __futexwait(tls, f+140, owner|0x40000000, 1) - } - } - return 1 -} - -func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - if a_swap(tls, f+140, 0)&0x40000000 != 0 { - __wake(tls, f+140, 1, 1) - } -} - -func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).mode - 1 - if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase { - (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint64(0)) - } - (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0))) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 { - *(*uint32)(unsafe.Pointer(f)) |= uint32(32) - return -1 - } - (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size)) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 { - return -1 - } - return 0 -} - -func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - X__builtin_abort(tls) //TODO- - // __stdio_exit_needed(); -} - -// This function assumes it will never be called if there is already -// data buffered for reading. - -func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - bp := tls.Alloc(1) - defer tls.Free(1) - - // var c uint8 at bp, 1 - - if !(X__toread(tls, f) != 0) && (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint64(1)) == uint64(1) { - return int32(*(*uint8)(unsafe.Pointer(bp))) - } - return -1 -} - -func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) - } - var ret int32 - var ap va_list - _ = ap - ap = va - ret = Xvsscanf(tls, s, fmt, ap) - _ = ap - return ret -} - -type wctrans_t = uintptr /* wctype.h:20:19 */ - -func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */ - if !(dest != 0) { - return - } - switch size { - case -2: - *(*uint8)(unsafe.Pointer(dest)) = uint8(i) - break - case -1: - *(*int16)(unsafe.Pointer(dest)) = int16(i) - break - case 0: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 1: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - case 3: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - } -} - -func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */ - var p uintptr - var i uint32 - var ap2 va_list - _ = ap2 - ap2 = ap - for i = n; i > uint32(1); i-- { - VaUintptr(&ap2) - } - p = VaUintptr(&ap2) - _ = ap2 - return p -} - -func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */ - if __ccgo_strace { - trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var width int32 - var size int32 - var alloc int32 - var base int32 - var p uintptr - var c int32 - var t int32 - var s uintptr - var wcs uintptr - // var st mbstate_t at bp+268, 8 - - var dest uintptr - var invert int32 - var matches int32 - var x uint64 - var y float64 - var pos off_t - // var scanset [257]uint8 at bp, 257 - - var i size_t - var k size_t - // var wc wchar_t at bp+260, 4 - - var __need_unlock int32 - var tmp uintptr - var tmp1 uintptr - alloc = 0 - dest = uintptr(0) - matches = 0 - pos = int64(0) - __need_unlock = func() int32 { - if (*FILE)(unsafe.Pointer(f)).lock >= 0 { - return X__lockfile(tls, f) - } - return 0 - }() - - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __1 - } - X__toread(tls, f) -__1: - ; - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __2 - } - goto input_fail -__2: - ; - - p = fmt -__3: - if !(*(*uint8)(unsafe.Pointer(p)) != 0) { - goto __5 - } - - alloc = 0 - - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) { - goto __6 - } -__7: - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) { - goto __8 - } - p++ - goto __7 -__8: - ; - X__shlim(tls, f, int64(0)) -__9: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __10 - } - goto __9 -__10: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__6: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') { - goto __11 - } - X__shlim(tls, f, int64(0)) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') { - goto __12 - } - p++ -__14: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __15 - } - goto __14 -__15: - ; - goto __13 -__12: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__13: - ; - if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __16 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(c < 0) { - goto __17 - } - goto input_fail -__17: - ; - goto match_fail -__16: - ; - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__11: - ; - - p++ - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') { - goto __18 - } - dest = uintptr(0) - p++ - goto __19 -__18: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') { - goto __20 - } - dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0')) - p += uintptr(2) - goto __21 -__20: - dest = VaUintptr(&ap) -__21: - ; -__19: - ; - - width = 0 -__22: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0) { - goto __24 - } - width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0' - goto __23 -__23: - p++ - goto __22 - goto __24 -__24: - ; - - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') { - goto __25 - } - wcs = uintptr(0) - s = uintptr(0) - alloc = BoolInt32(!!(dest != 0)) - p++ - goto __26 -__25: - alloc = 0 -__26: - ; - - size = 0 - switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) { - case 'h': - goto __28 - case 'l': - goto __29 - case 'j': - goto __30 - case 'z': - goto __31 - case 't': - goto __32 - case 'L': - goto __33 - case 'd': - goto __34 - case 'i': - goto __35 - case 'o': - goto __36 - case 'u': - goto __37 - case 'x': - goto __38 - case 'a': - goto __39 - case 'e': - goto __40 - case 'f': - goto __41 - case 'g': - goto __42 - case 'A': - goto __43 - case 'E': - goto __44 - case 'F': - goto __45 - case 'G': - goto __46 - case 'X': - goto __47 - case 's': - goto __48 - case 'c': - goto __49 - case '[': - goto __50 - case 'S': - goto __51 - case 'C': - goto __52 - case 'p': - goto __53 - case 'n': - goto __54 - default: - goto __55 - } - goto __27 -__28: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') { - goto __56 - } - p++ - size = -2 - goto __57 -__56: - size = -1 -__57: - ; - goto __27 -__29: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') { - goto __58 - } - p++ - size = 3 - goto __59 -__58: - size = 1 -__59: - ; - goto __27 -__30: - size = 3 - goto __27 -__31: -__32: - size = 1 - goto __27 -__33: - size = 2 - goto __27 -__34: -__35: -__36: -__37: -__38: -__39: -__40: -__41: -__42: -__43: -__44: -__45: -__46: -__47: -__48: -__49: -__50: -__51: -__52: -__53: -__54: - p-- - goto __27 -__55: - goto fmt_fail -__27: - ; - - t = int32(*(*uint8)(unsafe.Pointer(p))) - - // C or S - if !(t&0x2f == 3) { - goto __60 - } - t = t | 32 - size = 1 -__60: - ; - - switch t { - case 'c': - goto __62 - case '[': - goto __63 - case 'n': - goto __64 - default: - goto __65 - } - goto __61 -__62: - if !(width < 1) { - goto __66 - } - width = 1 -__66: - ; -__63: - goto __61 -__64: - store_int(tls, dest, size, uint64(pos)) - // do not increment match count, etc! - goto __4 -__65: - X__shlim(tls, f, int64(0)) -__67: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __68 - } - goto __67 -__68: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) -__61: - ; - - X__shlim(tls, f, int64(width)) - if !(func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() < 0) { - goto __69 - } - goto input_fail -__69: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - - switch t { - case 's': - goto __71 - case 'c': - goto __72 - case '[': - goto __73 - case 'p': - goto __74 - case 'X': - goto __75 - case 'x': - goto __76 - case 'o': - goto __77 - case 'd': - goto __78 - case 'u': - goto __79 - case 'i': - goto __80 - case 'a': - goto __81 - case 'A': - goto __82 - case 'e': - goto __83 - case 'E': - goto __84 - case 'f': - goto __85 - case 'F': - goto __86 - case 'g': - goto __87 - case 'G': - goto __88 - } - goto __70 -__71: -__72: -__73: - if !(t == 'c' || t == 's') { - goto __89 - } - Xmemset(tls, bp, -1, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(t == 's') { - goto __91 - } - *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0) -__91: - ; - goto __90 -__89: - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') { - goto __92 - } - p++ - invert = 1 - goto __93 -__92: - invert = 0 -__93: - ; - Xmemset(tls, bp, invert, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') { - goto __94 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert) - goto __95 -__94: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') { - goto __96 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert) -__96: - ; -__95: - ; -__97: - if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') { - goto __99 - } - if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - goto __100 - } - goto fmt_fail -__100: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') { - goto __101 - } - c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1)))) -__102: - if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __104 - } - *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert) - goto __103 -__103: - c++ - goto __102 - goto __104 -__104: - ; -__101: - ; - *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert) - goto __98 -__98: - p++ - goto __97 - goto __99 -__99: - ; -__90: - ; - wcs = uintptr(0) - s = uintptr(0) - i = uint64(0) - if t == 'c' { - k = uint64(uint32(width) + 1) - } else { - k = uint64(31) - } - if !(size == 1) { - goto __105 - } - if !(alloc != 0) { - goto __107 - } - wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(wcs != 0) { - goto __109 - } - goto alloc_fail -__109: - ; - goto __108 -__107: - wcs = dest -__108: - ; - *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{} -__110: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __111 - } - switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint64(1), bp+268 /* &st */) { - case Uint64FromInt32(-1): - goto __113 - case Uint64FromInt32(-2): - goto __114 - } - goto __112 -__113: - goto input_fail -__114: - goto __110 -__112: - ; - if !(wcs != 0) { - goto __115 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint64(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */)) -__115: - ; - if !(alloc != 0 && i == k) { - goto __116 - } - k = k + (k + uint64(1)) - tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(tmp != 0) { - goto __117 - } - goto alloc_fail -__117: - ; - wcs = tmp -__116: - ; - goto __110 -__111: - ; - if !!(Xmbsinit(tls, bp+268) != 0) { - goto __118 - } - goto input_fail -__118: - ; - goto __106 -__105: - if !(alloc != 0) { - goto __119 - } - s = Xmalloc(tls, k) - if !!(s != 0) { - goto __121 - } - goto alloc_fail -__121: - ; -__122: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __123 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - if !(i == k) { - goto __124 - } - k = k + (k + uint64(1)) - tmp1 = Xrealloc(tls, s, k) - if !!(tmp1 != 0) { - goto __125 - } - goto alloc_fail -__125: - ; - s = tmp1 -__124: - ; - goto __122 -__123: - ; - goto __120 -__119: - if !(AssignUintptr(&s, dest) != 0) { - goto __126 - } -__128: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __129 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - goto __128 -__129: - ; - goto __127 -__126: -__130: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __131 - } - goto __130 -__131: - ; -__127: - ; -__120: - ; -__106: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __132 - } - goto match_fail -__132: - ; - if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != off_t(width)) { - goto __133 - } - goto match_fail -__133: - ; - if !(alloc != 0) { - goto __134 - } - if !(size == 1) { - goto __135 - } - *(*uintptr)(unsafe.Pointer(dest)) = wcs - goto __136 -__135: - *(*uintptr)(unsafe.Pointer(dest)) = s -__136: - ; -__134: - ; - if !(t != 'c') { - goto __137 - } - if !(wcs != 0) { - goto __138 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 -__138: - ; - if !(s != 0) { - goto __139 - } - *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) -__139: - ; -__137: - ; - goto __70 -__74: -__75: -__76: - base = 16 - goto int_common -__77: - base = 8 - goto int_common -__78: -__79: - base = 10 - goto int_common -__80: - base = 0 -int_common: - x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1)) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __140 - } - goto match_fail -__140: - ; - if !(t == 'p' && dest != 0) { - goto __141 - } - *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x)) - goto __142 -__141: - store_int(tls, dest, size, x) -__142: - ; - goto __70 -__81: -__82: -__83: -__84: -__85: -__86: -__87: -__88: - y = X__floatscan(tls, f, size, 0) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __143 - } - goto match_fail -__143: - ; - if !(dest != 0) { - goto __144 - } - switch size { - case 0: - goto __146 - case 1: - goto __147 - case 2: - goto __148 - } - goto __145 -__146: - *(*float32)(unsafe.Pointer(dest)) = float32(y) - goto __145 -__147: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__148: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__145: - ; -__144: - ; - goto __70 -__70: - ; - - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - if !(dest != 0) { - goto __149 - } - matches++ -__149: - ; - goto __4 -__4: - p++ - goto __3 - goto __5 -__5: - ; - if !(0 != 0) { - goto __150 - } -fmt_fail: -alloc_fail: -input_fail: - if !!(matches != 0) { - goto __151 - } - matches-- -__151: - ; -match_fail: - if !(alloc != 0) { - goto __152 - } - Xfree(tls, s) - Xfree(tls, wcs) -__152: - ; -__150: - ; -__153: - if !(__need_unlock != 0) { - goto __156 - } - X__unlockfile(tls, f) -__156: - ; - goto __154 -__154: - if 0 != 0 { - goto __153 - } - goto __155 -__155: - ; - return matches -} - -func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */ - var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie - var k size_t = len + uint64(256) - var end uintptr = Xmemchr(tls, src, 0, k) - if end != 0 { - k = size_t((int64(end) - int64(src)) / 1) - } - if k < len { - len = k - } - Xmemcpy(tls, buf, src, len) - (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len) - (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k) - (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k) - return len -} - -func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) - } - bp := tls.Alloc(232) - defer tls.Free(232) - - *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - }{string_read})), buf: s, lock: -1, cookie: s} - return Xvfscanf(tls, bp, fmt, ap) -} - -func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ - if __ccgo_strace { - trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) - } - var try uintptr - var sign int32 - for nel > uint64(0) { - try = base + uintptr(width*(nel/uint64(2))) - sign = (*struct { - f func(*TLS, uintptr, uintptr) int32 - })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) - if sign < 0 { - nel = nel / uint64(2) - } else if sign > 0 { - base = try + uintptr(width) - nel = nel - (nel/uint64(2) + uint64(1)) - } else { - return try - } - } - return uintptr(0) -} - -func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y float64 = X__floatscan(tls, bp, prec, 1) - var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1 - if p != 0 { - *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { - if cnt != 0 { - return s + uintptr(cnt) - } - return s - }() - } - return y -} - -func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return float32(strtox(tls, s, p, 0)) -} - -func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 1) -} - -func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 2) -} - -func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) - if p != 0 { - var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1) - *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) - } - return y -} - -func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) -} - -func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) -} - -func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))) -} - -func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1)))) -} - -func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return intmax_t(Xstrtoll(tls, s, p, base)) -} - -func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uintmax_t(Xstrtoull(tls, s, p, base)) -} - -func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - var l size_t = Xstrlen(tls, s) - var d uintptr = Xmalloc(tls, l+uint64(1)) - if !(d != 0) { - return uintptr(0) - } - return Xmemcpy(tls, d, s, l+uint64(1)) -} - -func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var l size_t = Xstrnlen(tls, d, n) - if l == n { - return l + Xstrlen(tls, s) - } - return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var d0 uintptr - var wd uintptr - var ws uintptr - d0 = d - - if !!(int32(PostDecUint64(&n, 1)) != 0) { - goto __1 - } - goto finish -__1: - ; - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) { - goto __2 - } -__3: - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __5 - } - goto __4 -__4: - n-- - s++ - d++ - goto __3 - goto __5 -__5: - ; - if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { - goto __6 - } - wd = d - ws = s -__7: - if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint64)(unsafe.Pointer(ws))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(ws)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0)) { - goto __9 - } - *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) - goto __8 -__8: - n = n - size_t(unsafe.Sizeof(size_t(0))) - ws += 8 - wd += 8 - goto __7 - goto __9 -__9: - ; - d = wd - s = ws -__6: - ; -__2: - ; -__10: - if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __12 - } - goto __11 -__11: - n-- - s++ - d++ - goto __10 - goto __12 -__12: - ; - *(*uint8)(unsafe.Pointer(d)) = uint8(0) -finish: - return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s) -} - -func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */ - if __ccgo_strace { - trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) - } - var l uintptr = _l - var r uintptr = _r - if !(int32(PostDecUint64(&n, 1)) != 0) { - return 0 - } -__1: - if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { - goto __3 - } - goto __2 -__2: - l++ - r++ - n-- - goto __1 - goto __3 -__3: - ; - return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) -} - -func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */ - if __ccgo_strace { - trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) - } - return Xstrncasecmp(tls, l, r, n) -} - -func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var a uintptr = d - d += uintptr(Xstrlen(tls, d)) - for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { - n-- - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0) - return a -} - -func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ - if __ccgo_strace { - trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) - } - var p uintptr = Xmemchr(tls, s, 0, n) - if p != 0 { - return uint64((int64(p) - int64(s)) / 1) - } - return n -} - -func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ - if __ccgo_strace { - trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) - } - bp := tls.Alloc(32) - defer tls.Free(32) - - var a uintptr = s - *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)} - - if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) { - return uint64(0) - } - if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) { - for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ { - } - return size_t((int64(s) - int64(a)) / 1) - } - - for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint64(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8, size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; c++ { - } - for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8))&(size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; s++ { - } - return size_t((int64(s) - int64(a)) / 1) -} - -func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */ - if __ccgo_strace { - trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) - } - if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) { - return uintptr(0) - } - s += uintptr(Xstrspn(tls, s, sep)) - if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) { - return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0)) - } - _sp = s + uintptr(Xstrcspn(tls, s, sep)) - if *(*uint8)(unsafe.Pointer(_sp)) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0) - } else { - _sp = uintptr(0) - } - return s -} - -var _sp uintptr /* strtok.c:5:14: */ - -func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return *(*int32)(unsafe.Pointer(a + 6*4)) -} - -func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 6*4)) - return 0 -} - -// -// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_guardsize; -// return 0; -// } -// -// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit) -// { -// *inherit = a->_a_sched; -// return 0; -// } -// -// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param) -// { -// param->sched_priority = a->_a_prio; -// return 0; -// } -// -// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy) -// { -// *policy = a->_a_policy; -// return 0; -// } -// -// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope) -// { -// *scope = PTHREAD_SCOPE_SYSTEM; -// return 0; -// } -// -// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size) -// { -// if (!a->_a_stackaddr) -// return EINVAL; -// *size = a->_a_stacksize; -// *addr = (void *)(a->_a_stackaddr - *size); -// return 0; -// } -// -// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_stacksize; -// return 0; -// } -// -// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared) -// { -// *pshared = !!a->__attr; -// return 0; -// } -// -// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk) -// { -// *clk = a->__attr & 0x7fffffff; -// return 0; -// } -// -// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr>>31; -// return 0; -// } -// -// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol) -// { -// *protocol = PTHREAD_PRIO_NONE; -// return 0; -// } -// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr / 128U % 2; -// return 0; -// } -// -// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust) -// { -// *robust = a->__attr / 4U % 2; -// return 0; -// } - -func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)) -} - -// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type) -// { -// *type = a->__attr & 3; -// return 0; -// } -// -// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr[0]; -// return 0; -// } - -func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - if uint32(state) > 1 { - return 22 - } - *(*int32)(unsafe.Pointer(a + 6*4)) = state - return 0 -} - -func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */ - if __ccgo_strace { - trc("tls=%v m=%v, (%v:)", tls, m, origin(2)) - } - return *(*int32)(unsafe.Pointer(m)) & 15 -} - -// int __pthread_mutex_lock(pthread_mutex_t *m) -// { -// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL -// && !a_cas(&m->_m_lock, 0, EBUSY)) -// return 0; -// -// return __pthread_mutex_timedlock(m, 0); -// } -// -// weak_alias(__pthread_mutex_lock, pthread_mutex_lock); - -func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return 0 -} - -func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{} - return 0 -} - -func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v type1=%v, (%v:)", tls, a, type1, origin(2)) - } - if uint32(type1) > uint32(2) { - return 22 - } - (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1) - return 0 -} - -func init() { - *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45: -} - -var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data diff --git a/vendor/modernc.org/libc/musl_linux_riscv64.go b/vendor/modernc.org/libc/musl_linux_riscv64.go deleted file mode 100644 index 4714139..0000000 --- a/vendor/modernc.org/libc/musl_linux_riscv64.go +++ /dev/null @@ -1,7258 +0,0 @@ -// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_riscv64.go -pkgname libc -static-locals-prefix _s -Iarch/riscv64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/gethostbyname_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.c', DO NOT EDIT. - -package libc - -import ( - "math" - "reflect" - "sync/atomic" - "unsafe" -) - -var _ = math.Pi -var _ reflect.Kind -var _ atomic.Value -var _ unsafe.Pointer - -// musl as a whole is licensed under the following standard MIT license: -// -// ---------------------------------------------------------------------- -// Copyright © 2005-2020 Rich Felker, et al. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ---------------------------------------------------------------------- -// -// Authors/contributors include: -// -// A. Wilcox -// Ada Worcester -// Alex Dowad -// Alex Suykov -// Alexander Monakov -// Andre McCurdy -// Andrew Kelley -// Anthony G. Basile -// Aric Belsito -// Arvid Picciani -// Bartosz Brachaczek -// Benjamin Peterson -// Bobby Bingham -// Boris Brezillon -// Brent Cook -// Chris Spiegel -// Clément Vasseur -// Daniel Micay -// Daniel Sabogal -// Daurnimator -// David Carlier -// David Edelsohn -// Denys Vlasenko -// Dmitry Ivanov -// Dmitry V. Levin -// Drew DeVault -// Emil Renner Berthing -// Fangrui Song -// Felix Fietkau -// Felix Janda -// Gianluca Anzolin -// Hauke Mehrtens -// He X -// Hiltjo Posthuma -// Isaac Dunham -// Jaydeep Patil -// Jens Gustedt -// Jeremy Huntwork -// Jo-Philipp Wich -// Joakim Sindholt -// John Spencer -// Julien Ramseier -// Justin Cormack -// Kaarle Ritvanen -// Khem Raj -// Kylie McClain -// Leah Neukirchen -// Luca Barbato -// Luka Perkov -// M Farkas-Dyck (Strake) -// Mahesh Bodapati -// Markus Wichmann -// Masanori Ogino -// Michael Clark -// Michael Forney -// Mikhail Kremnyov -// Natanael Copa -// Nicholas J. Kain -// orc -// Pascal Cuoq -// Patrick Oppenlander -// Petr Hosek -// Petr Skocik -// Pierre Carrier -// Reini Urban -// Rich Felker -// Richard Pennington -// Ryan Fairfax -// Samuel Holland -// Segev Finer -// Shiz -// sin -// Solar Designer -// Stefan Kristiansson -// Stefan O'Rear -// Szabolcs Nagy -// Timo Teräs -// Trutz Behn -// Valentin Ochs -// Will Dietz -// William Haddon -// William Pitcock -// -// Portions of this software are derived from third-party works licensed -// under terms compatible with the above MIT license: -// -// The TRE regular expression implementation (src/regex/reg* and -// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed -// under a 2-clause BSD license (license text in the source files). The -// included version has been heavily modified by Rich Felker in 2012, in -// the interests of size, simplicity, and namespace cleanliness. -// -// Much of the math library code (src/math/* and src/complex/*) is -// Copyright © 1993,2004 Sun Microsystems or -// Copyright © 2003-2011 David Schultz or -// Copyright © 2003-2009 Steven G. Kargl or -// Copyright © 2003-2009 Bruce D. Evans or -// Copyright © 2008 Stephen L. Moshier or -// Copyright © 2017-2018 Arm Limited -// and labelled as such in comments in the individual source files. All -// have been licensed under extremely permissive terms. -// -// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 -// The Android Open Source Project and is licensed under a two-clause BSD -// license. It was taken from Bionic libc, used on Android. -// -// The AArch64 memcpy and memset code (src/string/aarch64/*) are -// Copyright © 1999-2019, Arm Limited. -// -// The implementation of DES for crypt (src/crypt/crypt_des.c) is -// Copyright © 1994 David Burren. It is licensed under a BSD license. -// -// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was -// originally written by Solar Designer and placed into the public -// domain. The code also comes with a fallback permissive license for use -// in jurisdictions that may not recognize the public domain. -// -// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -// Valentin Ochs and is licensed under an MIT-style license. -// -// The x86_64 port was written by Nicholas J. Kain and is licensed under -// the standard MIT terms. -// -// The mips and microblaze ports were originally written by Richard -// Pennington for use in the ellcc project. The original code was adapted -// by Rich Felker for build system and code conventions during upstream -// integration. It is licensed under the standard MIT terms. -// -// The mips64 port was contributed by Imagination Technologies and is -// licensed under the standard MIT terms. -// -// The powerpc port was also originally written by Richard Pennington, -// and later supplemented and integrated by John Spencer. It is licensed -// under the standard MIT terms. -// -// All other files which have no copyright comments are original works -// produced specifically for use as part of this library, written either -// by Rich Felker, the main author of the library, or by one or more -// contibutors listed above. Details on authorship of individual files -// can be found in the git version control history of the project. The -// omission of copyright and license comments in each file is in the -// interest of source tree size. -// -// In addition, permission is hereby granted for all public header files -// (include/* and arch/*/bits/*) and crt files intended to be linked into -// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -// the copyright notice and permission notice otherwise required by the -// license, and to use these files without any requirement of -// attribution. These files include substantial contributions from: -// -// Bobby Bingham -// John Spencer -// Nicholas J. Kain -// Rich Felker -// Richard Pennington -// Stefan Kristiansson -// Szabolcs Nagy -// -// all of whom have explicitly granted such permission. -// -// This file previously contained text expressing a belief that most of -// the files covered by the above exception were sufficiently trivial not -// to be subject to copyright, resulting in confusion over whether it -// negated the permissions granted in the license. In the spirit of -// permissive licensing, and of not having licensing issues being an -// obstacle to adoption, that text has been removed. -const ( /* copyright.c:194:1: */ - __musl__copyright__ = 0 -) - -const ( /* nameser.h:117:1: */ - ns_uop_delete = 0 - ns_uop_add = 1 - ns_uop_max = 2 -) - -const ( /* nameser.h:147:1: */ - ns_t_invalid = 0 - ns_t_a = 1 - ns_t_ns = 2 - ns_t_md = 3 - ns_t_mf = 4 - ns_t_cname = 5 - ns_t_soa = 6 - ns_t_mb = 7 - ns_t_mg = 8 - ns_t_mr = 9 - ns_t_null = 10 - ns_t_wks = 11 - ns_t_ptr = 12 - ns_t_hinfo = 13 - ns_t_minfo = 14 - ns_t_mx = 15 - ns_t_txt = 16 - ns_t_rp = 17 - ns_t_afsdb = 18 - ns_t_x25 = 19 - ns_t_isdn = 20 - ns_t_rt = 21 - ns_t_nsap = 22 - ns_t_nsap_ptr = 23 - ns_t_sig = 24 - ns_t_key = 25 - ns_t_px = 26 - ns_t_gpos = 27 - ns_t_aaaa = 28 - ns_t_loc = 29 - ns_t_nxt = 30 - ns_t_eid = 31 - ns_t_nimloc = 32 - ns_t_srv = 33 - ns_t_atma = 34 - ns_t_naptr = 35 - ns_t_kx = 36 - ns_t_cert = 37 - ns_t_a6 = 38 - ns_t_dname = 39 - ns_t_sink = 40 - ns_t_opt = 41 - ns_t_apl = 42 - ns_t_tkey = 249 - ns_t_tsig = 250 - ns_t_ixfr = 251 - ns_t_axfr = 252 - ns_t_mailb = 253 - ns_t_maila = 254 - ns_t_any = 255 - ns_t_zxfr = 256 - ns_t_max = 65536 -) - -const ( /* nameser.h:210:1: */ - ns_c_invalid = 0 - ns_c_in = 1 - ns_c_2 = 2 - ns_c_chaos = 3 - ns_c_hs = 4 - ns_c_none = 254 - ns_c_any = 255 - ns_c_max = 65536 -) - -const ( /* nameser.h:221:1: */ - ns_kt_rsa = 1 - ns_kt_dh = 2 - ns_kt_dsa = 3 - ns_kt_private = 254 -) - -const ( /* nameser.h:228:1: */ - cert_t_pkix = 1 - cert_t_spki = 2 - cert_t_pgp = 3 - cert_t_url = 253 - cert_t_oid = 254 -) - -const ( /* nameser.h:28:1: */ - ns_s_qd = 0 - ns_s_zn = 0 - ns_s_an = 1 - ns_s_pr = 1 - ns_s_ns = 2 - ns_s_ud = 2 - ns_s_ar = 3 - ns_s_max = 4 -) - -const ( /* nameser.h:75:1: */ - ns_f_qr = 0 - ns_f_opcode = 1 - ns_f_aa = 2 - ns_f_tc = 3 - ns_f_rd = 4 - ns_f_ra = 5 - ns_f_z = 6 - ns_f_ad = 7 - ns_f_cd = 8 - ns_f_rcode = 9 - ns_f_max = 10 -) - -const ( /* nameser.h:89:1: */ - ns_o_query = 0 - ns_o_iquery = 1 - ns_o_status = 2 - ns_o_notify = 4 - ns_o_update = 5 - ns_o_max = 6 -) - -const ( /* nameser.h:98:1: */ - ns_r_noerror = 0 - ns_r_formerr = 1 - ns_r_servfail = 2 - ns_r_nxdomain = 3 - ns_r_notimpl = 4 - ns_r_refused = 5 - ns_r_yxdomain = 6 - ns_r_yxrrset = 7 - ns_r_nxrrset = 8 - ns_r_notauth = 9 - ns_r_notzone = 10 - ns_r_max = 11 - ns_r_badvers = 16 - ns_r_badsig = 16 - ns_r_badkey = 17 - ns_r_badtime = 18 -) - -const ( /* pthread_impl.h:58:1: */ - DT_EXITING = 0 - DT_JOINABLE = 1 - DT_DETACHED = 2 -) - -type ptrdiff_t = int64 /* :3:26 */ - -type size_t = uint64 /* :9:23 */ - -type wchar_t = int32 /* :15:24 */ - -type uint16_t = uint16 /* alltypes.h:124:25 */ - -type uint32_t = uint32 /* alltypes.h:129:25 */ - -type uint64_t = uint64 /* alltypes.h:134:25 */ - -func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ - return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 -} - -var table = [384]uint16{ - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x320/256 | 0x320*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16((0x160/256 | 0x160*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), - uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), - uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), - uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), - uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), -} /* __ctype_b_loc.c:9:29 */ - -var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */ - -func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&ptable)) -} - -func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ - return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) -} - -type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:341:9 */ - -type locale_t = uintptr /* alltypes.h:341:32 */ - -func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisalpha(tls, c) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) - }() != 0 || func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0) -} - -func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalnum(tls, c) -} - -func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) -} - -func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalpha(tls, c) -} - -func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) -} - -func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisdigit(tls, c) -} - -func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('a') < uint32(26)) -} - -func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xislower(tls, c) -} - -func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) -} - -func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisprint(tls, c) -} - -func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('A') < uint32(26)) -} - -func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisupper(tls, c) -} - -func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) -} - -func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisxdigit(tls, c) -} - -type off_t = int64 /* alltypes.h:160:16 */ - -type ino_t = uint64 /* alltypes.h:165:25 */ - -type dirent = struct { - d_ino ino_t - d_off off_t - d_reclen uint16 - d_type uint8 - d_name [256]uint8 - _ [5]byte -} /* dirent.h:5:1 */ - -type __dirstream = struct { - tell off_t - fd int32 - buf_pos int32 - buf_end int32 - lock [1]int32 - buf [2048]uint8 -} /* dirent.h:20:9 */ - -type DIR = __dirstream /* dirent.h:20:28 */ - -type ssize_t = int64 /* alltypes.h:63:15 */ - -type intptr_t = int64 /* alltypes.h:68:15 */ - -type pid_t = int32 /* alltypes.h:233:13 */ - -type uid_t = uint32 /* alltypes.h:243:18 */ - -type gid_t = uint32 /* alltypes.h:248:18 */ - -type useconds_t = uint32 /* alltypes.h:258:18 */ - -type div_t = struct { - quot int32 - rem int32 -} /* stdlib.h:62:35 */ -type ldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:63:36 */ -type lldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:64:41 */ - -func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd) - Xfree(tls, dir) - return ret -} - -type mode_t = uint32 /* alltypes.h:150:18 */ - -type iovec = struct { - iov_base uintptr - iov_len size_t -} /* alltypes.h:353:1 */ - -type flock = struct { - l_type int16 - l_whence int16 - _ [4]byte - l_start off_t - l_len off_t - l_pid pid_t - _ [4]byte -} /* fcntl.h:24:1 */ - -type file_handle = struct { - _ [0]uint32 - handle_bytes uint32 - handle_type int32 -} /* fcntl.h:167:1 */ - -type f_owner_ex = struct { - __type int32 - pid pid_t -} /* fcntl.h:172:1 */ - -// We don't have a clock_gettime function. -// #define VDSO_CGT_SYM "__vdso_clock_gettime" -// #define VDSO_CGT_VER "LINUX_2.6" - -type syscall_arg_t = int64 /* syscall.h:22:14 */ - -func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - var fd int32 - var dir uintptr - - if AssignInt32(&fd, Xopen(tls, name, 00|0200000|02000000, 0)) < 0 { - return uintptr(0) - } - if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint64(1), uint64(unsafe.Sizeof(DIR{}))))) != 0) { - __syscall1(tls, int64(57), int64(fd)) - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).fd = fd - return dir -} - -type max_align_t = struct { - __ll int64 - __ld float64 -} /* alltypes.h:39:54 */ - -type dirstream_buf_alignment_check = [1]uint8 /* readdir.c:7:14 */ - -func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var de uintptr - - if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end { - var len int32 = int32(__syscall3(tls, int64(61), int64((*DIR)(unsafe.Pointer(dir)).fd), int64(dir+24), int64(unsafe.Sizeof([2048]uint8{})))) - if len <= 0 { - if len < 0 && len != -2 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len - } - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).buf_end = len - (*DIR)(unsafe.Pointer(dir)).buf_pos = 0 - } - de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos) - *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen) - (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off - return de -} - -type uintptr_t = uint64 /* alltypes.h:53:24 */ - -type int8_t = int8 /* alltypes.h:94:25 */ - -type int16_t = int16 /* alltypes.h:99:25 */ - -type int32_t = int32 /* alltypes.h:104:25 */ - -type int64_t = int64 /* alltypes.h:109:25 */ - -type intmax_t = int64 /* alltypes.h:114:25 */ - -type uint8_t = uint8 /* alltypes.h:119:25 */ - -type uintmax_t = uint64 /* alltypes.h:144:25 */ - -type int_fast8_t = int8_t /* stdint.h:22:16 */ -type int_fast64_t = int64_t /* stdint.h:23:17 */ - -type int_least8_t = int8_t /* stdint.h:25:17 */ -type int_least16_t = int16_t /* stdint.h:26:17 */ -type int_least32_t = int32_t /* stdint.h:27:17 */ -type int_least64_t = int64_t /* stdint.h:28:17 */ - -type uint_fast8_t = uint8_t /* stdint.h:30:17 */ -type uint_fast64_t = uint64_t /* stdint.h:31:18 */ - -type uint_least8_t = uint8_t /* stdint.h:33:18 */ -type uint_least16_t = uint16_t /* stdint.h:34:18 */ -type uint_least32_t = uint32_t /* stdint.h:35:18 */ -type uint_least64_t = uint64_t /* stdint.h:36:18 */ - -type int_fast16_t = int32_t /* stdint.h:1:17 */ -type int_fast32_t = int32_t /* stdint.h:2:17 */ -type uint_fast16_t = uint32_t /* stdint.h:3:18 */ -type uint_fast32_t = uint32_t /* stdint.h:4:18 */ - -type _IO_FILE = struct { - flags uint32 - _ [4]byte - rpos uintptr - rend uintptr - close uintptr - wend uintptr - wpos uintptr - mustbezero_1 uintptr - wbase uintptr - read uintptr - write uintptr - seek uintptr - buf uintptr - buf_size size_t - prev uintptr - next uintptr - fd int32 - pipe_pid int32 - lockcount int64 - mode int32 - lock int32 - lbf int32 - _ [4]byte - cookie uintptr - off off_t - getln_buf uintptr - mustbezero_2 uintptr - shend uintptr - shlim off_t - shcnt off_t - prev_locked uintptr - next_locked uintptr - locale uintptr -} /* alltypes.h:318:9 */ - -type FILE = _IO_FILE /* alltypes.h:318:25 */ - -type va_list = uintptr /* alltypes.h:324:27 */ - -type _G_fpos64_t = struct { - _ [0]uint64 - __opaque [16]uint8 -} /* stdio.h:54:9 */ - -type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ - -type float_t = float32 /* alltypes.h:28:15 */ - -type double_t = float64 /* alltypes.h:33:16 */ - -func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ - bp := tls.Alloc(4) - defer tls.Free(4) - - // var __u struct {__f float32;} at bp, 4 - - *(*float32)(unsafe.Pointer(bp)) = __f - return *(*uint32)(unsafe.Pointer(bp)) -} - -func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - // var __u struct {__f float64;} at bp, 8 - - *(*float64)(unsafe.Pointer(bp)) = __f - return *(*uint64)(unsafe.Pointer(bp)) -} - -type __pthread = struct { - self uintptr - dtv uintptr - prev uintptr - next uintptr - sysinfo uintptr_t - canary uintptr_t - canary2 uintptr_t - tid int32 - errno_val int32 - detach_state int32 - cancel int32 - canceldisable uint8 - cancelasync uint8 - tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ - _ [5]byte - map_base uintptr - map_size size_t - stack uintptr - stack_size size_t - guard_size size_t - result uintptr - cancelbuf uintptr - tsd uintptr - robust_list struct { - head uintptr - off int64 - pending uintptr - } - timer_id int32 - _ [4]byte - locale locale_t - killlock [1]int32 - _ [4]byte - dlerror_buf uintptr - stdio_locks uintptr - canary_at_end uintptr_t - dtv_copy uintptr -} /* alltypes.h:271:9 */ - -func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ - var c int32 - var x int32 - var y int64 - var neg int32 = 0 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c == '+' || c == '-' { - neg = Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') >= 10 && pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - if uint32(c-'0') >= 10 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return -0x7fffffffffffffff - int64(1) - } - for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - x = 10*x + c - '0' - } - for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - y = int64(10)*y + int64(c) - int64('0') - } - for ; uint32(c-'0') < 10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if neg != 0 { - return -y - } - return y -} - -func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var x [128]uint32_t at bp, 512 - - var i int32 - var j int32 - var k int32 - var a int32 - var z int32 - var lrp int64 = int64(0) - var dc int64 = int64(0) - var e10 int64 = int64(0) - var lnz int32 = 0 - var gotdig int32 = 0 - var gotrad int32 = 0 - var rp int32 - var e2 int32 - var emax int32 = -emin - bits + 3 - var denormal int32 = 0 - var y float64 - var frac float64 = float64(0) - var bias float64 = float64(0) - - j = 0 - k = 0 - - // Don't let leading zeros consume buffer space - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - if c == '.' { - gotrad = 1 - for c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }(); c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - lrp-- - } - } - - *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) - for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - gotrad = 1 - lrp = dc - } else if k < 128-3 { - dc++ - if c != '0' { - lnz = int32(dc) - } - if j != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0') - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') - } - if PreIncInt32(&j, 1) == 9 { - k++ - j = 0 - } - gotdig = 1 - } else { - dc++ - if c != '0' { - lnz = (128 - 4) * 9 - *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) - } - } - } - if !(gotrad != 0) { - lrp = dc - } - - if gotdig != 0 && c|32 == 'e' { - e10 = scanexp(tls, f, pok) - if e10 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e10 = int64(0) - } - lrp = lrp + e10 - } else if c >= 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - if !(gotdig != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - // Handle zero specially to avoid nasty special cases later - if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { - return float64(sign) * 0.0 - } - - // Optimize small integers (w/no exponent) and over/under-flow - if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if lrp > int64(-emin/2) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if lrp < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - // Align incomplete final B1B digit - if j != 0 { - for ; j < 9; j++ { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) - } - k++ - j = 0 - } - - a = 0 - z = k - e2 = 0 - rp = int32(lrp) - - // Optimize small to mid-size integers (even in exp. notation) - if lnz < 9 && lnz <= rp && rp < 18 { - if rp == 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if rp < 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) - } - var bitlim int32 = bits - 3*(rp-9) - if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) - } - } - - // Drop trailing zeros - for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { - } - - // Align radix point to B1B digit boundary - if rp%9 != 0 { - var rpm9 int32 - if rp >= 0 { - rpm9 = rp % 9 - } else { - rpm9 = rp%9 + 9 - } - var p10 int32 = _sp10s[8-rpm9] - var carry uint32_t = uint32_t(0) - for k = a; k != z; k++ { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry - carry = uint32_t(1000000000/p10) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - rp = rp - 9 - } - } - if carry != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry - } - rp = rp + (9 - rpm9) - } - - // Upscale until desired number of bits are left of radix point - for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { - var carry uint32_t = uint32_t(0) - e2 = e2 - 29 - for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { - var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) - if tmp > uint64(1000000000) { - carry = uint32_t(tmp / uint64(1000000000)) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) - } else { - carry = uint32_t(0) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) - } - if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - z = k - } - if k == a { - break - } - } - if carry != 0 { - rp = rp + 9 - a = (a - 1) & (128 - 1) - if a == z { - z = (z - 1) & (128 - 1) - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) - } - *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry - } - } - - // Downscale until exactly number of bits are left of radix point - for { - var carry uint32_t = uint32_t(0) - var sh int32 = 1 - for i = 0; i < 2; i++ { - k = (a + i) & (128 - 1) - if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { - i = 2 - break - } - if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { - break - } - } - if i == 2 && rp == 9*2 { - break - } - // FIXME: find a way to compute optimal sh - if rp > 9+9*2 { - sh = 9 - } - e2 = e2 + sh - for k = a; k != z; k = (k + 1) & (128 - 1) { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<>sh + carry - carry = uint32_t(int32(1000000000)>>sh) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - i-- - rp = rp - 9 - } - } - if carry != 0 { - if (z+1)&(128-1) != a { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry - z = (z + 1) & (128 - 1) - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) - } - } - } - - // Assemble desired bits into floating point variable - for y = float64(AssignInt32(&i, 0)); i < 2; i++ { - if (a+i)&(128-1) == z { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) - } - y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) - } - - y = y * float64(sign) - - // Limit precision for denormal results - if bits > 53+e2-emin { - bits = 53 + e2 - emin - if bits < 0 { - bits = 0 - } - denormal = 1 - } - - // Calculate bias term to force rounding, move out lower bits - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) - frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) - y = y - frac - y = y + bias - } - - // Process tail of decimal input so it can affect rounding - if (a+i)&(128-1) != z { - var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) - if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { - frac = frac + 0.25*float64(sign) - } else if t > uint32_t(500000000) { - frac = frac + 0.75*float64(sign) - } else if t == uint32_t(500000000) { - if (a+i+1)&(128-1) == z { - frac = frac + 0.5*float64(sign) - } else { - frac = frac + 0.75*float64(sign) - } - } - if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { - frac += 1 - } - } - - y = y + frac - y = y - bias - - if (e2+53)&0x7fffffff > emax-5 { - if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { - if denormal != 0 && bits == 53+e2-emin { - denormal = 0 - } - y = y * 0.5 - e2++ - } - if e2+53 > emax || denormal != 0 && frac != 0 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - } - - return Xscalbnl(tls, y, e2) -} - -var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ -var _sp10s = [8]int32{10, 100, 1000, 10000, - 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ - -func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ - var x uint32_t = uint32_t(0) - var y float64 = float64(0) - var scale float64 = float64(1) - var bias float64 = float64(0) - var gottail int32 = 0 - var gotrad int32 = 0 - var gotdig int32 = 0 - var rp int64 = int64(0) - var dc int64 = int64(0) - var e2 int64 = int64(0) - var d int32 - var c int32 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - - // Skip leading zeros - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - - if c == '.' { - gotrad = 1 - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - // Count zeros after the radix point before significand - rp = int64(0) - __1: - if !(c == '0') { - goto __3 - } - gotdig = 1 - goto __2 - __2: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - rp-- - goto __1 - goto __3 - __3: - } - - for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - rp = dc - gotrad = 1 - } else { - gotdig = 1 - if c > '9' { - d = c | 32 + 10 - 'a' - } else { - d = c - '0' - } - if dc < int64(8) { - x = x*uint32_t(16) + uint32_t(d) - } else if dc < int64(53/4+1) { - y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) - } else if d != 0 && !(gottail != 0) { - y = y + 0.5*scale - gottail = 1 - } - dc++ - } - } - if !(gotdig != 0) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if gotrad != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } else { - X__shlim(tls, f, int64(0)) - } - return float64(sign) * 0.0 - } - if !(gotrad != 0) { - rp = dc - } - for dc < int64(8) { - x = x * uint32_t(16) - dc++ - } - if c|32 == 'p' { - e2 = scanexp(tls, f, pok) - if e2 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e2 = int64(0) - } - } else { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - e2 = e2 + (int64(4)*rp - int64(32)) - - if !(x != 0) { - return float64(sign) * 0.0 - } - if e2 > int64(-emin) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if e2 < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - for x < 0x80000000 { - if y >= 0.5 { - x = x + (x + uint32_t(1)) - y = y + (y - float64(1)) - } else { - x = x + x - y = y + y - } - e2-- - } - - if int64(bits) > int64(32)+e2-int64(emin) { - bits = int32(int64(32) + e2 - int64(emin)) - if bits < 0 { - bits = 0 - } - } - - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) - } - - if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { - x++ - y = float64(0) - } - - y = bias + float64(sign)*float64(x) + float64(sign)*y - y = y - bias - - if !(y != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - - return Xscalbnl(tls, y, int32(e2)) -} - -func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ - if __ccgo_strace { - trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) - } - var sign int32 = 1 - var i size_t - var bits int32 - var emin int32 - var c int32 - - switch prec { - case 0: - bits = 24 - emin = -125 - bits - break - case 1: - bits = 53 - emin = -1021 - bits - break - case 2: - bits = 53 - emin = -1021 - bits - break - default: - return float64(0) - } - - for __isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0 { - } - - if c == '+' || c == '-' { - sign = sign - 2*Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - - for i = uint64(0); i < uint64(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { - if i < uint64(7) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { - if i != uint64(8) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - for ; i > uint64(3); i-- { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - } - return float64(float32(sign) * X__builtin_inff(tls)) - } - if !(i != 0) { - for i = uint64(0); i < uint64(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { - if i < uint64(2) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - } - if i == uint64(3) { - if func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() != '(' { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return float64(X__builtin_nanf(tls, ts+13)) - } - for i = uint64(1); ; i++ { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { - continue - } - if c == ')' { - return float64(X__builtin_nanf(tls, ts+13)) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - for PostDecUint64(&i, 1) != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - return float64(X__builtin_nanf(tls, ts+13)) - } - return float64(X__builtin_nanf(tls, ts+13)) - } - - if i != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - if c == '0' { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c|32 == 'x' { - return hexfloat(tls, f, bits, emin, sign, pok) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - c = '0' - } - - return decfloat(tls, f, c, bits, emin, sign, pok) -} - -// Lookup table for digit values. -1==255>=36 -> invalid -var table1 = [257]uint8{Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), -} /* intscan.c:7:28 */ - -func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ - if __ccgo_strace { - trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) - } - var val uintptr - var c int32 - var neg int32 - var x uint32 - var y uint64 - var bs int32 - val = uintptr(unsafe.Pointer(&table1)) + uintptr(1) - neg = 0 - if !(base > uint32(36) || base == uint32(1)) { - goto __1 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__1: - ; -__2: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __3 - } - goto __2 -__3: - ; - if !(c == '+' || c == '-') { - goto __4 - } - neg = -Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__4: - ; - if !((base == uint32(0) || base == uint32(16)) && c == '0') { - goto __5 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(c|32 == 'x') { - goto __7 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { - goto __9 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - goto __10 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - goto __11 -__10: - X__shlim(tls, f, int64(0)) -__11: - ; - return uint64(0) -__9: - ; - base = uint32(16) - goto __8 -__7: - if !(base == uint32(0)) { - goto __12 - } - base = uint32(8) -__12: - ; -__8: - ; - goto __6 -__5: - if !(base == uint32(0)) { - goto __13 - } - base = uint32(10) -__13: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { - goto __14 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - X__shlim(tls, f, int64(0)) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__14: - ; -__6: - ; - if !(base == uint32(10)) { - goto __15 - } - x = uint32(0) -__17: - if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { - goto __19 - } - x = x*uint32(10) + uint32(c-'0') - goto __18 -__18: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __17 - goto __19 -__19: - ; - y = uint64(x) -__20: - if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { - goto __22 - } - y = y*uint64(10) + uint64(c-'0') - goto __21 -__21: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __20 - goto __22 -__22: - ; - if !(uint32(c-'0') >= 10) { - goto __23 - } - goto done -__23: - ; - goto __16 -__15: - if !!(base&(base-uint32(1)) != 0) { - goto __24 - } - bs = int32(*(*uint8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) - x = uint32(0) -__26: - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { - goto __28 - } - x = x<>bs) { - goto __31 - } - y = y<= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(y >= lim) { - goto __43 - } - if !(!(lim&uint64(1) != 0) && !(neg != 0)) { - goto __44 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim - uint64(1) - goto __45 -__44: - if !(y > lim) { - goto __46 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim -__46: - ; -__45: - ; -__43: - ; - return y ^ uint64(neg) - uint64(neg) -} - -// The shcnt field stores the number of bytes read so far, offset by -// the value of buf-rpos at the last function call (__shlim or __shgetc), -// so that between calls the inline shcnt macro can add rpos-buf to get -// the actual count. - -func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ - if __ccgo_strace { - trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) - } - (*FILE)(unsafe.Pointer(f)).shlim = lim - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf) - int64((*FILE)(unsafe.Pointer(f)).rpos)) / 1 - // If lim is nonzero, rend must be a valid pointer. - if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > lim { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } -} - -func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var c int32 - var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos - (*FILE)(unsafe.Pointer(f)).shlim = int64(-1) - return -1 - } - cnt++ - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > (*FILE)(unsafe.Pointer(f)).shlim-cnt { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf { - *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c) - } - return c -} - -type lconv = struct { - decimal_point uintptr - thousands_sep uintptr - grouping uintptr - int_curr_symbol uintptr - currency_symbol uintptr - mon_decimal_point uintptr - mon_thousands_sep uintptr - mon_grouping uintptr - positive_sign uintptr - negative_sign uintptr - int_frac_digits uint8 - frac_digits uint8 - p_cs_precedes uint8 - p_sep_by_space uint8 - n_cs_precedes uint8 - n_sep_by_space uint8 - p_sign_posn uint8 - n_sign_posn uint8 - int_p_cs_precedes uint8 - int_p_sep_by_space uint8 - int_n_cs_precedes uint8 - int_n_sep_by_space uint8 - int_p_sign_posn uint8 - int_n_sign_posn uint8 - _ [2]byte -} /* locale.h:24:1 */ - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: uint8(255), frac_digits: uint8(255), p_cs_precedes: uint8(255), p_sep_by_space: uint8(255), n_cs_precedes: uint8(255), n_sep_by_space: uint8(255), p_sign_posn: uint8(255), n_sign_posn: uint8(255), int_p_cs_precedes: uint8(255), int_p_sep_by_space: uint8(255), int_n_cs_precedes: uint8(255), int_n_sep_by_space: uint8(255), int_p_sign_posn: uint8(255), int_n_sign_posn: uint8(255)} /* localeconv.c:4:27 */ - -func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&posix_lconv)) -} - -func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - if !(e != 0) { - if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0x7ff { - if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) { - *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff)) - if !(e != 0) { - if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0xff { - if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return X__fpclassify(tls, x) -} - -func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xcopysign(tls, x, y) -} - -func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return Xfabs(tls, x) -} - -func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xfmod(tls, x, y) -} - -func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - return X__builtin_nanf(tls, ts+13) -} - -var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ - -func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) - var y double_t - - if e >= 0x3ff+52 { - return x - } - if s != 0 { - y = x - toint + toint - } else { - y = x + toint - toint - } - if y == float64(0) { - if s != 0 { - return -Float64FromFloat64(0.0) - } - return float64(0) - } - return y -} - -func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - // var u struct {f float64;} at bp, 8 - - var y double_t = x - - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - n = 1023 - } - } - } else if n < -1022 { - // make sure final n < -53 to avoid double - // rounding in the subnormal range - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - n = -1022 - } - } - } - *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 - x = y * *(*float64)(unsafe.Pointer(bp)) - return x -} - -func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - return Xscalbn(tls, x, n) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -type __locale_map = struct { - __map uintptr - map_size size_t - name [24]uint8 - next uintptr -} /* alltypes.h:341:9 */ - -type tls_module = struct { - next uintptr - image uintptr - len size_t - size size_t - align size_t - offset size_t -} /* libc.h:14:1 */ - -type __libc = struct { - can_do_threads uint8 - threaded uint8 - secure uint8 - need_locks int8 - threads_minus_1 int32 - auxv uintptr - tls_head uintptr - tls_size size_t - tls_align size_t - tls_cnt size_t - page_size size_t - global_locale struct{ cat [6]uintptr } -} /* libc.h:20:1 */ - -type time_t = int64 /* alltypes.h:83:16 */ - -type clockid_t = int32 /* alltypes.h:212:13 */ - -type timespec = struct { - tv_sec time_t - tv_nsec int64 -} /* alltypes.h:227:1 */ - -type pthread_t = uintptr /* alltypes.h:271:26 */ - -type pthread_once_t = int32 /* alltypes.h:277:13 */ - -type pthread_key_t = uint32 /* alltypes.h:282:18 */ - -type pthread_spinlock_t = int32 /* alltypes.h:287:13 */ - -type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:292:37 */ - -type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:297:37 */ - -type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:302:37 */ - -type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:307:40 */ - -type __sigset_t = struct{ __bits [16]uint64 } /* alltypes.h:347:9 */ - -type sigset_t = __sigset_t /* alltypes.h:347:71 */ - -type pthread_attr_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:370:147 */ - -type pthread_mutex_t = struct { - __u struct { - _ [0]uint64 - __i [10]int32 - } -} /* alltypes.h:375:157 */ - -type pthread_cond_t = struct { - __u struct { - _ [0]uint64 - __i [12]int32 - } -} /* alltypes.h:385:112 */ - -type pthread_rwlock_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:395:139 */ - -type pthread_barrier_t = struct { - __u struct { - _ [0]uint64 - __i [8]int32 - } -} /* alltypes.h:400:137 */ - -type sched_param = struct { - sched_priority int32 - __reserved1 int32 - __reserved2 [2]struct { - __reserved1 time_t - __reserved2 int64 - } - __reserved3 int32 - _ [4]byte -} /* sched.h:19:1 */ - -type timer_t = uintptr /* alltypes.h:207:14 */ - -type clock_t = int64 /* alltypes.h:217:14 */ - -type tm = struct { - tm_sec int32 - tm_min int32 - tm_hour int32 - tm_mday int32 - tm_mon int32 - tm_year int32 - tm_wday int32 - tm_yday int32 - tm_isdst int32 - _ [4]byte - tm_gmtoff int64 - tm_zone uintptr -} /* time.h:38:1 */ - -type itimerspec = struct { - it_interval struct { - tv_sec time_t - tv_nsec int64 - } - it_value struct { - tv_sec time_t - tv_nsec int64 - } -} /* time.h:80:1 */ - -type sigevent = struct { - sigev_value struct { - _ [0]uint64 - sival_int int32 - _ [4]byte - } - sigev_signo int32 - sigev_notify int32 - sigev_notify_function uintptr - sigev_notify_attributes uintptr - __pad [32]uint8 -} /* time.h:107:1 */ - -type __ptcb = struct { - __f uintptr - __x uintptr - __next uintptr -} /* alltypes.h:271:9 */ - -type sigaltstack = struct { - ss_sp uintptr - ss_flags int32 - _ [4]byte - ss_size size_t -} /* signal.h:44:9 */ - -type stack_t = sigaltstack /* signal.h:44:28 */ - -type __riscv_mc_f_ext_state = struct { - __f [32]uint32 - __fcsr uint32 -} /* signal.h:11:1 */ - -type __riscv_mc_d_ext_state = struct { - __f [32]uint64 - __fcsr uint32 - _ [4]byte -} /* signal.h:16:1 */ - -type __riscv_mc_q_ext_state = struct { - __f [64]uint64 - __fcsr uint32 - __reserved [3]uint32 -} /* signal.h:21:1 */ - -type __riscv_mc_fp_state = struct { - _ [0]uint64 - __f struct { - __f [32]uint32 - __fcsr uint32 - } - _ [396]byte -} /* signal.h:27:1 */ - -type mcontext_t1 = struct { - __gregs [32]uint64 - __fpregs struct { - _ [0]uint64 - __f struct { - __f [32]uint32 - __fcsr uint32 - } - _ [396]byte - } -} /* signal.h:33:9 */ - -type mcontext_t = mcontext_t1 /* signal.h:36:3 */ - -type greg_t = uint64 /* signal.h:48:23 */ -type gregset_t = [32]uint64 /* signal.h:49:23 */ -type fpregset_t = __riscv_mc_fp_state /* signal.h:50:35 */ -type sigcontext = struct { - gregs gregset_t - fpregs fpregset_t -} /* signal.h:51:1 */ - -type ucontext_t1 = struct { - uc_flags uint64 - uc_link uintptr - uc_stack stack_t - uc_sigmask sigset_t - uc_mcontext mcontext_t -} /* signal.h:63:9 */ - -type ucontext_t = ucontext_t1 /* signal.h:70:3 */ - -type sigval = struct { - _ [0]uint64 - sival_int int32 - _ [4]byte -} /* time.h:107:1 */ - -type siginfo_t = struct { - si_signo int32 - si_errno int32 - si_code int32 - _ [4]byte - __si_fields struct { - _ [0]uint64 - __pad [112]uint8 - } -} /* signal.h:145:3 */ - -type sigaction = struct { - __sa_handler struct{ sa_handler uintptr } - sa_mask sigset_t - sa_flags int32 - _ [4]byte - sa_restorer uintptr -} /* signal.h:167:1 */ - -type sig_t = uintptr /* signal.h:251:14 */ - -type sig_atomic_t = int32 /* signal.h:269:13 */ - -func a_barrier(tls *TLS) { /* atomic_arch.h:2:20: */ - panic(`arch/riscv64/atomic_arch.h:4:2: assembler statements not supported`) -} - -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:8:19: */ - var old int32 - var tmp int32 - _ = tmp - panic(`arch/riscv64/atomic_arch.h:11:2: assembler statements not supported`) - return old -} - -func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:108:19: */ - var old int32 - for __ccgo := true; __ccgo; __ccgo = a_cas(tls, p, old, v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:119:19: */ - var old int32 - for __ccgo := true; __ccgo; __ccgo = a_cas(tls, p, old, int32(uint32(old)+uint32(v))) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:130:19: */ - var old int32 - for __ccgo := true; __ccgo; __ccgo = a_cas(tls, p, old, old&v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:140:19: */ - var old int32 - for __ccgo := true; __ccgo; __ccgo = a_cas(tls, p, old, old|v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */ - a_fetch_and(tls, p, v) -} - -func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */ - a_fetch_or(tls, p, v) -} - -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - -func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */ - return int32(_sdebruijn328[x&-x*uint32_t(0x076be629)>>27]) -} - -var _sdebruijn328 = [32]uint8{ - uint8(0), uint8(1), uint8(23), uint8(2), uint8(29), uint8(24), uint8(19), uint8(3), uint8(30), uint8(27), uint8(25), uint8(11), uint8(20), uint8(8), uint8(4), uint8(13), - uint8(31), uint8(22), uint8(28), uint8(18), uint8(26), uint8(10), uint8(7), uint8(12), uint8(21), uint8(17), uint8(9), uint8(6), uint8(16), uint8(5), uint8(15), uint8(14), -} /* atomic.h:261:20 */ - -func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic.h:272:19: */ - if uint64(unsafe.Sizeof(int64(0))) < uint64(8) { - var y uint32_t = uint32_t(x) - if !(y != 0) { - y = uint32_t(x >> 32) - return 32 + a_ctz_32(tls, y) - } - return a_ctz_32(tls, y) - } - return int32(_sdebruijn648[uint64(x&-x)*0x022fdd63cc95386d>>58]) -} - -var _sdebruijn648 = [64]uint8{ - uint8(0), uint8(1), uint8(2), uint8(53), uint8(3), uint8(7), uint8(54), uint8(27), uint8(4), uint8(38), uint8(41), uint8(8), uint8(34), uint8(55), uint8(48), uint8(28), - uint8(62), uint8(5), uint8(39), uint8(46), uint8(44), uint8(42), uint8(22), uint8(9), uint8(24), uint8(35), uint8(59), uint8(56), uint8(49), uint8(18), uint8(29), uint8(11), - uint8(63), uint8(52), uint8(6), uint8(26), uint8(37), uint8(40), uint8(33), uint8(47), uint8(61), uint8(45), uint8(43), uint8(21), uint8(23), uint8(58), uint8(17), uint8(10), - uint8(51), uint8(25), uint8(36), uint8(32), uint8(60), uint8(20), uint8(57), uint8(16), uint8(50), uint8(31), uint8(19), uint8(15), uint8(30), uint8(14), uint8(13), uint8(12), -} /* atomic.h:274:20 */ - -type __timer = struct { - timerid int32 - _ [4]byte - thread pthread_t -} /* pthread_impl.h:64:1 */ - -func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */ - var tp uintptr - panic(`arch/riscv64/pthread_arch.h:4:2: assembler statements not supported`) - return tp - uintptr(uint64(unsafe.Sizeof(__pthread{}))) -} - -func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */ - if priv != 0 { - priv = 128 - } - if cnt < 0 { - cnt = 0x7fffffff - } - _ = Bool32(__syscall3(tls, int64(98), int64(addr), int64(1|priv), int64(cnt)) != int64(-38) || __syscall3(tls, int64(98), int64(addr), int64(1), int64(cnt)) != 0) -} - -func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */ - if priv != 0 { - priv = 128 - } - _ = Bool32(__syscall4(tls, int64(98), int64(addr), int64(0|priv), int64(val), int64(0)) != int64(-38) || __syscall4(tls, int64(98), int64(addr), int64(0), int64(val), int64(0)) != 0) -} - -var X__fsmu8 = [51]uint32_t{ - func() uint32 { - if 0x2 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2) - }(), func() uint32 { - if 0x3 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3) - }(), func() uint32 { - if 0x4 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4) - }(), func() uint32 { - if 0x5 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5) - }(), func() uint32 { - if 0x6 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6) - }(), func() uint32 { - if 0x7 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7) - }(), - func() uint32 { - if 0x8 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8) - }(), func() uint32 { - if 0x9 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9) - }(), func() uint32 { - if 0xa < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa) - }(), func() uint32 { - if 0xb < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb) - }(), func() uint32 { - if 0xc < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc) - }(), func() uint32 { - if 0xd < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd) - }(), func() uint32 { - if 0xe < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe) - }(), func() uint32 { - if 0xf < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf) - }(), - func() uint32 { - if 0x0+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x0+16) - }(), func() uint32 { - if 0x1+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x1+16) - }(), func() uint32 { - if 0x2+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2+16) - }(), func() uint32 { - if 0x3+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3+16) - }(), func() uint32 { - if 0x4+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4+16) - }(), func() uint32 { - if 0x5+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5+16) - }(), func() uint32 { - if 0x6+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6+16) - }(), func() uint32 { - if 0x7+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7+16) - }(), - func() uint32 { - if 0x8+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8+16) - }(), func() uint32 { - if 0x9+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9+16) - }(), func() uint32 { - if 0xa+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa+16) - }(), func() uint32 { - if 0xb+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb+16) - }(), func() uint32 { - if 0xc+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc+16) - }(), func() uint32 { - if 0xd+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd+16) - }(), func() uint32 { - if 0xe+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe+16) - }(), func() uint32 { - if 0xf+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf+16) - }(), - func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x0 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x0), func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x1 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x1), func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x2 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x2), func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x3 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x3), func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x4 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x4), func() uint32 { - if 0x5 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x5 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x5), func() uint32 { - if 0x6 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x6 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x6), func() uint32 { - if 0x7 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x7 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x7), - func() uint32 { - if 0x8 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x8 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x8), func() uint32 { - if 0x9 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x9 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x9), func() uint32 { - if 0xa == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xa == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xa), func() uint32 { - if 0xb == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xb == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xb), func() uint32 { - if 0xc == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xc == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xc), func() uint32 { - if 0xd == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xd == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xd), func() uint32 { - if 0xe == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xe == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xe), func() uint32 { - if 0xf == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xf == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xf), - func() uint32 { - if 0x0 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x0 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x0), func() uint32 { - if 0x1 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x1 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x1), func() uint32 { - if 0x2 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x2 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x2), func() uint32 { - if 0x3 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x3 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x3), func() uint32 { - if 0x4 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x4 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x4), -} /* internal.c:18:16 */ - -type wint_t = uint32 /* alltypes.h:196:18 */ - -type wctype_t = uint64 /* alltypes.h:201:23 */ - -type __mbstate_t = struct { - __opaque1 uint32 - __opaque2 uint32 -} /* alltypes.h:335:9 */ - -type mbstate_t = __mbstate_t /* alltypes.h:335:63 */ - -func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */ - if __ccgo_strace { - trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var c uint32 - var s uintptr - var N uint32 - // var dummy wchar_t at bp, 4 - s = src - N = uint32(n) - - if !!(st != 0) { - goto __1 - } - st = uintptr(unsafe.Pointer(&_sinternal_state)) -__1: - ; - c = *(*uint32)(unsafe.Pointer(st)) - - if !!(s != 0) { - goto __2 - } - if !(c != 0) { - goto __4 - } - goto ilseq -__4: - ; - return uint64(0) - goto __3 -__2: - if !!(wc != 0) { - goto __5 - } - wc = bp /* &dummy */ -__5: - ; -__3: - ; - - if !!(n != 0) { - goto __6 - } - return Uint64FromInt32(-2) -__6: - ; - if !!(c != 0) { - goto __7 - } - if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) { - goto __8 - } - return BoolUint64(!!(AssignPtrInt32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s)))) != 0)) -__8: - ; - if !(func() int32 { - if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { - return 4 - } - return 1 - }() == 1) { - goto __9 - } - *(*wchar_t)(unsafe.Pointer(wc)) = 0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s)))) - return 1 -__9: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) { - goto __10 - } - goto ilseq -__10: - ; - c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2] - n-- -__7: - ; - - if !(n != 0) { - goto __11 - } - if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) { - goto __12 - } - goto ilseq -__12: - ; -loop: - c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80) - n-- - if !!(c&(uint32(1)<<31) != 0) { - goto __13 - } - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(c) - return size_t(N) - n -__13: - ; - if !(n != 0) { - goto __14 - } - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) { - goto __15 - } - goto ilseq -__15: - ; - goto loop -__14: - ; -__11: - ; - - *(*uint32)(unsafe.Pointer(st)) = c - return Uint64FromInt32(-2) -ilseq: - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 - return Uint64FromInt32(-1) -} - -var _sinternal_state uint32 /* mbrtowc.c:8:18: */ - -func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) - } - return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0)) -} - -type imaxdiv_t = struct { - quot intmax_t - rem intmax_t -} /* inttypes.h:14:40 */ - -type socklen_t = uint32 /* alltypes.h:359:18 */ - -type sa_family_t = uint16 /* alltypes.h:364:24 */ - -type msghdr = struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - msg_iovlen int32 - __pad1 int32 - msg_control uintptr - msg_controllen socklen_t - __pad2 int32 - msg_flags int32 - _ [4]byte -} /* socket.h:22:1 */ - -type cmsghdr = struct { - cmsg_len socklen_t - __pad1 int32 - cmsg_level int32 - cmsg_type int32 -} /* socket.h:44:1 */ - -type linger = struct { - l_onoff int32 - l_linger int32 -} /* socket.h:74:1 */ - -type sockaddr = struct { - sa_family sa_family_t - sa_data [14]uint8 -} /* socket.h:367:1 */ - -type sockaddr_storage = struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 -} /* socket.h:372:1 */ - -type in_port_t = uint16_t /* in.h:12:18 */ -type in_addr_t = uint32_t /* in.h:13:18 */ -type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */ - -type sockaddr_in = struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t -} /* in.h:16:1 */ - -type in6_addr = struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } -} /* in.h:23:1 */ - -type sockaddr_in6 = struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t -} /* in.h:34:1 */ - -type ipv6_mreq = struct { - ipv6mr_multiaddr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipv6mr_interface uint32 -} /* in.h:42:1 */ - -type ip_opts = struct { - ip_dst struct{ s_addr in_addr_t } - ip_opts [40]uint8 -} /* in.h:229:1 */ - -type ip_mreq = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } -} /* in.h:247:1 */ - -type ip_mreqn = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_address struct{ s_addr in_addr_t } - imr_ifindex int32 -} /* in.h:252:1 */ - -type ip_mreq_source = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } - imr_sourceaddr struct{ s_addr in_addr_t } -} /* in.h:258:1 */ - -type ip_msfilter = struct { - imsf_multiaddr struct{ s_addr in_addr_t } - imsf_interface struct{ s_addr in_addr_t } - imsf_fmode uint32_t - imsf_numsrc uint32_t - imsf_slist [1]struct{ s_addr in_addr_t } -} /* in.h:264:1 */ - -type group_req = struct { - gr_interface uint32_t - _ [4]byte - gr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:275:1 */ - -type group_source_req = struct { - gsr_interface uint32_t - _ [4]byte - gsr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gsr_source struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:280:1 */ - -type group_filter = struct { - gf_interface uint32_t - _ [4]byte - gf_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gf_fmode uint32_t - gf_numsrc uint32_t - gf_slist [1]struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:286:1 */ - -type in_pktinfo = struct { - ipi_ifindex int32 - ipi_spec_dst struct{ s_addr in_addr_t } - ipi_addr struct{ s_addr in_addr_t } -} /* in.h:297:1 */ - -type in6_pktinfo = struct { - ipi6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipi6_ifindex uint32 -} /* in.h:303:1 */ - -type ip6_mtuinfo = struct { - ip6m_addr struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t - } - ip6m_mtu uint32_t -} /* in.h:308:1 */ - -type addrinfo = struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr -} /* netdb.h:16:1 */ - -// Legacy functions follow (marked OBsolete in SUS) - -type netent = struct { - n_name uintptr - n_aliases uintptr - n_addrtype int32 - n_net uint32_t -} /* netdb.h:62:1 */ - -type hostent = struct { - h_name uintptr - h_aliases uintptr - h_addrtype int32 - h_length int32 - h_addr_list uintptr -} /* netdb.h:69:1 */ - -type servent = struct { - s_name uintptr - s_aliases uintptr - s_port int32 - _ [4]byte - s_proto uintptr -} /* netdb.h:78:1 */ - -type protoent = struct { - p_name uintptr - p_aliases uintptr - p_proto int32 - _ [4]byte -} /* netdb.h:85:1 */ - -type aibuf = struct { - ai struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr - } - sa struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte - } - lock [1]int32 - slot int16 - ref int16 - _ [4]byte -} /* lookup.h:10:1 */ - -type sa = struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte -} /* lookup.h:10:1 */ - -type address = struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 -} /* lookup.h:20:1 */ - -type service = struct { - port uint16_t - proto uint8 - socktype uint8 -} /* lookup.h:27:1 */ - -type resolvconf = struct { - ns [3]struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 - } - nns uint32 - attempts uint32 - ndots uint32 - timeout uint32 -} /* lookup.h:34:1 */ - -func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ - if __ccgo_strace { - trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) - } - var cnt size_t - cnt = uint64(1) -__1: - if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) { - goto __3 - } - goto __2 -__2: - cnt++ - p = (*addrinfo)(unsafe.Pointer(p)).ai_next - goto __1 - goto __3 -__3: - ; - var b uintptr = p - uintptr(uint64(uintptr(0))) - b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).slot) - //TODO LOCK(b->lock); - if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) { - Xfree(tls, b) - } - //TODO else UNLOCK(b->lock); -} - -func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ - if __ccgo_strace { - trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) - } - bp := tls.Alloc(1608) - defer tls.Free(1608) - - // var ports [2]service at bp, 8 - - // var addrs [48]address at bp+8, 1344 - - // var canon [256]uint8 at bp+1352, 256 - - var outcanon uintptr - var nservs int32 - var naddrs int32 - var nais int32 - var canon_len int32 - var i int32 - var j int32 - var k int32 - var family int32 = 0 - var flags int32 = 0 - var proto int32 = 0 - var socktype int32 = 0 - var out uintptr - - if !(host != 0) && !(serv != 0) { - return -2 - } - - if hint != 0 { - family = (*addrinfo)(unsafe.Pointer(hint)).ai_family - flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags - proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol - socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype - - var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 - if flags&mask != flags { - return -1 - } - - switch family { - case 2: - fallthrough - case 10: - fallthrough - case 0: - break - fallthrough - default: - return -6 - } - } - - if flags&0x20 != 0 { - Xabort(tls) //TODO- - // /* Define the "an address is configured" condition for address - // * families via ability to create a socket for the family plus - // * routability of the loopback address for the family. */ - // static const struct sockaddr_in lo4 = { - // .sin_family = AF_INET, .sin_port = 65535, - // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN - // ? 0x7f000001 : 0x0100007f - // }; - // static const struct sockaddr_in6 lo6 = { - // .sin6_family = AF_INET6, .sin6_port = 65535, - // .sin6_addr = IN6ADDR_LOOPBACK_INIT - // }; - // int tf[2] = { AF_INET, AF_INET6 }; - // const void *ta[2] = { &lo4, &lo6 }; - // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; - // for (i=0; i<2; i++) { - // if (family==tf[1-i]) continue; - // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, - // IPPROTO_UDP); - // if (s>=0) { - // int cs; - // pthread_setcancelstate( - // PTHREAD_CANCEL_DISABLE, &cs); - // int r = connect(s, ta[i], tl[i]); - // pthread_setcancelstate(cs, 0); - // close(s); - // if (!r) continue; - // } - // switch (errno) { - // case EADDRNOTAVAIL: - // case EAFNOSUPPORT: - // case EHOSTUNREACH: - // case ENETDOWN: - // case ENETUNREACH: - // break; - // default: - // return EAI_SYSTEM; - // } - // if (family == tf[i]) return EAI_NONAME; - // family = tf[1-i]; - // } - } - - nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) - if nservs < 0 { - return nservs - } - - naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) - if naddrs < 0 { - return naddrs - } - - nais = nservs * naddrs - canon_len = int32(Xstrlen(tls, bp+1352)) - out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1)) - if !(out != 0) { - return -10 - } - - if canon_len != 0 { - outcanon = out + uintptr(nais)*88 - Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1)) - } else { - outcanon = uintptr(0) - } - - for k = AssignInt32(&i, 0); i < naddrs; i++ { - j = 0 - __1: - if !(j < nservs) { - goto __3 - } - { - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).slot = int16(k) - //TODO out[k].ai = (struct addrinfo){ - //TODO .ai_family = addrs[i].family, - //TODO .ai_socktype = ports[j].socktype, - //TODO .ai_protocol = ports[j].proto, - //TODO .ai_addrlen = addrs[i].family == AF_INET - //TODO ? sizeof(struct sockaddr_in) - //TODO : sizeof(struct sockaddr_in6), - //TODO .ai_addr = (void *)&out[k].sa, - //TODO .ai_canonname = outcanon }; - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addrlen = func() uint32 { - if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 { - return uint32(unsafe.Sizeof(sockaddr_in{})) - } - return uint32(unsafe.Sizeof(sockaddr_in6{})) - }() - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addr = out + uintptr(k)*88 + 48 - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_canonname = outcanon - if k != 0 { - (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).ai.ai_next = out + uintptr(k)*88 - } - switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family { - case 2: - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_family = sa_family_t(2) - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) - break - case 10: - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_family = sa_family_t(10) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid - Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) - break - } - - } - goto __2 - __2: - j++ - k++ - goto __1 - goto __3 - __3: - } - (*aibuf)(unsafe.Pointer(out)).ref = int16(nais) - *(*uintptr)(unsafe.Pointer(res)) = out - return 0 -} - -type ucred = struct { - pid pid_t - uid uid_t - gid gid_t -} /* socket.h:57:1 */ - -type mmsghdr = struct { - msg_hdr struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - msg_iovlen int32 - __pad1 int32 - msg_control uintptr - msg_controllen socklen_t - __pad2 int32 - msg_flags int32 - _ [4]byte - } - msg_len uint32 - _ [4]byte -} /* socket.h:63:1 */ - -func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for __ccgo := true; __ccgo; __ccgo = err == 34 { - Xfree(tls, _sh) - _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyaddr_r(tls, a, l, af, _sh, - _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh -} - -var _sh uintptr /* gethostbyaddr.c:9:24: */ - -func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(28) - defer tls.Free(28) - - //TODO union { - //TODO struct sockaddr_in sin; - //TODO struct sockaddr_in6 sin6; - //TODO } sa = { .sin.sin_family = af }; - *(*struct { - sin sockaddr_in - _ [12]byte - })(unsafe.Pointer(bp)) = struct { - sin sockaddr_in - _ [12]byte - }{} //TODO- - (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO- - var sl socklen_t - if af == 10 { - sl = uint32(unsafe.Sizeof(sockaddr_in6{})) - } else { - sl = uint32(unsafe.Sizeof(sockaddr_in{})) - } - var i int32 - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - - // Load address argument into sockaddr structure - if af == 10 && l == socklen_t(16) { - Xmemcpy(tls, bp+8, a, uint64(16)) - } else if af == 2 && l == socklen_t(4) { - Xmemcpy(tls, bp+4, a, uint64(4)) - } else { - *(*int32)(unsafe.Pointer(err)) = 3 - return 22 - } - - // Align buffer and check for space for pointers and ip address - i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))) - if !(i != 0) { - i = int32(unsafe.Sizeof(uintptr(0))) - } - if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) { - return 34 - } - buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i)) - buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l)) - - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, uint64(l)) - buf += uintptr(l) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*8)) = uintptr(0) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - - switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - case -12: - return 34 - default: - fallthrough - case -10: - fallthrough - case -11: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - case 0: - break - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = int32(l) - (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - return Xgethostbyname2(tls, name, 2) -} - -func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for __ccgo := true; __ccgo; __ccgo = err == 34 { - Xfree(tls, _sh1) - _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh1 != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyname2_r(tls, name, af, _sh1, - _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh1 -} - -var _sh1 uintptr /* gethostbyname2.c:10:24: */ - -func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(1600) - defer tls.Free(1600) - - // var addrs [48]address at bp, 1344 - - // var canon [256]uint8 at bp+1344, 256 - - var i int32 - var cnt int32 - var align size_t - var need size_t - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) - if cnt < 0 { - switch cnt { - case -2: - *(*int32)(unsafe.Pointer(err)) = 1 - return 2 - fallthrough - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - fallthrough - default: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return 74 - fallthrough - case -10: - fallthrough - case -11: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - } - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = func() int32 { - if af == 10 { - return 16 - } - return 4 - }() - - // Align buffer - align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)) - - need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0))) - need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).h_length)) - need = need + (Xstrlen(tls, name) + uint64(1)) - need = need + (Xstrlen(tls, bp+1344) + uint64(1)) - need = need + align - - if need > buflen { - return 34 - } - - buf += uintptr(align) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0)))) - - for i = 0; i < cnt; i++ { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = buf - buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length) - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*hostent)(unsafe.Pointer(h)).h_length)) - } - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = uintptr(0) - - (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf) - Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344) - buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + uint64(1)) - - if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = buf - Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)), name) - buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8))) + uint64(1)) - } else { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - } - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*8)) = uintptr(0) - - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */ - if __ccgo_strace { - trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) - } - return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err) -} - -type if_nameindex = struct { - if_index uint32 - _ [4]byte - if_name uintptr -} /* if.h:12:1 */ - -type ifaddr = struct { - ifa_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - ifa_ifu struct { - ifu_broadaddr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - } - ifa_ifp uintptr - ifa_next uintptr -} /* if.h:51:1 */ - -type ifmap = struct { - mem_start uint64 - mem_end uint64 - base_addr uint16 - irq uint8 - dma uint8 - port uint8 - _ [3]byte -} /* if.h:64:1 */ - -type ifreq = struct { - ifr_ifrn struct{ ifrn_name [16]uint8 } - ifr_ifru struct { - _ [0]uint64 - ifru_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - _ [8]byte - } -} /* if.h:76:1 */ - -type ifconf = struct { - ifc_len int32 - _ [4]byte - ifc_ifcu struct{ ifcu_buf uintptr } -} /* if.h:116:1 */ - -type ns_sect = uint32 /* nameser.h:37:3 */ - -type __ns_msg = struct { - _msg uintptr - _eom uintptr - _id uint16_t - _flags uint16_t - _counts [4]uint16_t - _ [4]byte - _sections [4]uintptr - _sect ns_sect - _rrnum int32 - _msg_ptr uintptr -} /* nameser.h:39:9 */ - -type ns_msg = __ns_msg /* nameser.h:46:3 */ - -type _ns_flagdata = struct { - mask int32 - shift int32 -} /* nameser.h:48:1 */ - -type __ns_rr = struct { - name [1025]uint8 - _ [1]byte - __type uint16_t - rr_class uint16_t - _ [2]byte - ttl uint32_t - rdlength uint16_t - _ [2]byte - rdata uintptr -} /* nameser.h:59:9 */ - -type ns_rr = __ns_rr /* nameser.h:66:3 */ - -type ns_flag = uint32 /* nameser.h:87:3 */ - -type ns_opcode = uint32 /* nameser.h:96:3 */ - -type ns_rcode = uint32 /* nameser.h:115:3 */ - -type ns_update_operation = uint32 /* nameser.h:121:3 */ - -type ns_tsig_key1 = struct { - name [1025]uint8 - alg [1025]uint8 - _ [6]byte - data uintptr - len int32 - _ [4]byte -} /* nameser.h:123:1 */ - -type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ - -type ns_tcp_tsig_state1 = struct { - counter int32 - _ [4]byte - key uintptr - ctx uintptr - sig [512]uint8 - siglen int32 - _ [4]byte -} /* nameser.h:130:1 */ - -type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ - -type ns_type = uint32 /* nameser.h:200:3 */ - -type ns_class = uint32 /* nameser.h:219:3 */ - -type ns_key_types = uint32 /* nameser.h:226:3 */ - -type ns_cert_types = uint32 /* nameser.h:234:3 */ - -type HEADER = struct { - _ [0]uint32 - id uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */ - qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ - nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ -} /* nameser.h:353:3 */ - -// unused; purely for broken apps -type __res_state = struct { - retrans int32 - retry int32 - options uint64 - nscount int32 - nsaddr_list [3]struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - id uint16 - _ [2]byte - dnsrch [7]uintptr - defdname [256]uint8 - pfcode uint64 - ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ - _ [4]byte - sort_list [10]struct { - addr struct{ s_addr in_addr_t } - mask uint32_t - } - qhook uintptr - rhook uintptr - res_h_errno int32 - _vcsock int32 - _flags uint32 - _ [4]byte - _u struct { - _ [0]uint64 - pad [52]uint8 - _ [4]byte - } -} /* resolv.h:26:9 */ - -// unused; purely for broken apps -type res_state = uintptr /* resolv.h:62:3 */ - -type res_sym = struct { - number int32 - _ [4]byte - name uintptr - humanname uintptr -} /* resolv.h:70:1 */ - -func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ - p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0)))) - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0) - for __ccgo := true; __ccgo; __ccgo = x != 0 { - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10)) - x = x / uint32(10) - } - return p -} - -func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ - bp := tls.Alloc(32) - defer tls.Free(32) - - Xsprintf(tls, s, ts+25, - VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) -} - -func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ - var i int32 - for i = 15; i >= 0; i-- { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - } - Xstrcpy(tls, s, ts+50) -} - -var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ - -func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ - bp := tls.Alloc(556) - defer tls.Free(556) - - // var line [512]uint8 at bp+16, 512 - - var p uintptr - var z uintptr - var _buf [1032]uint8 - _ = _buf - // var atmp [16]uint8 at bp, 16 - - // var iplit address at bp+528, 28 - - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - return - } - if family == 2 { - Xmemcpy(tls, bp+uintptr(12), a, uint64(4)) - Xmemcpy(tls, bp, ts+90, uint64(12)) - a = bp /* &atmp[0] */ - } - for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 { - if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - - for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { - continue - } - - if (*address)(unsafe.Pointer(bp+528)).family == 2 { - Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4)) - Xmemcpy(tls, bp+528+8, ts+90, uint64(12)) - (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0) - } - - if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid { - continue - } - - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if (int64(z)-int64(p))/1 < int64(256) { - Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1))) - break - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) -} - -func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ - Xabort(tls) //TODO- - // unsigned long svport; - // char line[128], *p, *z; - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) return; - // while (fgets(line, sizeof line, f)) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // for (p=line; *p && !isspace(*p); p++); - // if (!*p) continue; - // *p++ = 0; - // svport = strtoul(p, &z, 10); - - // if (svport != port || z==p) continue; - // if (dgram && strncmp(z, "/udp", 4)) continue; - // if (!dgram && strncmp(z, "/tcp", 4)) continue; - // if (p-line > 32) continue; - - // memcpy(buf, line, p-line); - // break; - // } - // __fclose_ca(f); -} - -func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */ - if __ccgo_strace { - trc("tls=%v sa1=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa1, sl, node, nodelen, serv, servlen, flags, origin(2)) - } - bp := tls.Alloc(347) - defer tls.Free(347) - - // var ptr [78]uint8 at bp, 78 - - // var buf [256]uint8 at bp+78, 256 - - // var num [13]uint8 at bp+334, 13 - - var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family) - var a uintptr - var scopeid uint32 - - switch af { - case 2: - a = sa1 + 4 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) { - return -6 - } - mkptr4(tls, bp, a) - scopeid = uint32(0) - break - case 10: - a = sa1 + 8 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) { - return -6 - } - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - mkptr6(tls, bp, a) - } else { - mkptr4(tls, bp, a+uintptr(12)) - } - scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id - break - default: - return -6 - } - - if node != 0 && nodelen != 0 { - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x01 != 0) { - reverse_hosts(tls, bp+78, a, scopeid, af) - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) { - Xabort(tls) //TODO- - // unsigned char query[18+PTR_MAX], reply[512]; - // int qlen = __res_mkquery(0, ptr, 1, RR_PTR, - // 0, 0, 0, query, sizeof query); - // query[3] = 0; /* don't need AD flag */ - // int rlen = __res_send(query, qlen, reply, sizeof reply); - // buf[0] = 0; - // if (rlen > 0) - // __dns_parse(reply, rlen, dns_parse_callback, buf); - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) { - if flags&0x08 != 0 { - return -2 - } - Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{}))) - if scopeid != 0 { - Xabort(tls) //TODO- - // char *p = 0, tmp[IF_NAMESIZE+1]; - // if (!(flags & NI_NUMERICSCOPE) && - // (IN6_IS_ADDR_LINKLOCAL(a) || - // IN6_IS_ADDR_MC_LINKLOCAL(a))) - // p = if_indextoname(scopeid, tmp+1); - // if (!p) - // p = itoa(num, scopeid); - // *--p = '%'; - // strcat(buf, p); - } - } - if Xstrlen(tls, bp+78) >= size_t(nodelen) { - return -12 - } - Xstrcpy(tls, node, bp+78) - } - - if serv != 0 && servlen != 0 { - var p uintptr = bp + 78 /* buf */ - var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port)) - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x02 != 0) { - reverse_services(tls, bp+78, port, flags&0x10) - } - if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - p = itoa(tls, bp+334, uint32(port)) - } - if Xstrlen(tls, p) >= size_t(servlen) { - return -12 - } - Xstrcpy(tls, serv, p) - } - - return 0 -} - -var Xh_errno int32 /* h_errno.c:4:5: */ - -func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&Xh_errno)) -} - -func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ - if __ccgo_strace { - trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) - } - bp := tls.Alloc(40) - defer tls.Free(40) - - var s uintptr = s0 - var d uintptr = dest - *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)} - // var z uintptr at bp+32, 8 - - var i int32 - - for i = 0; i < 4; i++ { - *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0) - if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != '.' || !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) - }() != 0) { - return 0 - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) { - break - } - s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) - } - if i == 4 { - return 0 - } - switch i { - case 0: - *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff) - AssignShrPtrUint64(bp, int(24)) - fallthrough - case 1: - *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff) - AssignShrPtrUint64(bp+1*8, int(16)) - fallthrough - case 2: - *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff) - AssignShrPtrUint64(bp+2*8, int(8)) - } - for i = 0; i < 4; i++ { - if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) { - return 0 - } - *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8))) - } - return 1 -} - -func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ - if __ccgo_strace { - trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var a uintptr = a0 - var i int32 - var j int32 - var max int32 - var best int32 - // var buf [100]uint8 at bp+176, 100 - - switch af { - case 2: - if socklen_t(Xsnprintf(tls, s, uint64(l), ts+103, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { - return s - } - break - case 10: - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+115, - VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } else { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+139, - VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } - // Replace longest /(^0|:)[:0]{2,}/ with "::" - i = AssignInt32(&best, 0) - max = 2 - for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { - if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { - continue - } - j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169)) - if j > max { - best = i - max = j - } - } - if max > 3 { - *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':')) - Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1)) - } - if Xstrlen(tls, bp+176) < size_t(l) { - Xstrcpy(tls, s, bp+176) - return s - } - break - default: - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return uintptr(0) - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 - return uintptr(0) -} - -func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ - if c-uint32('0') < uint32(10) { - return int32(c - uint32('0')) - } - c = c | uint32(32) - if c-uint32('a') < uint32(6) { - return int32(c - uint32('a') + uint32(10)) - } - return -1 -} - -func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ - if __ccgo_strace { - trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) - } - bp := tls.Alloc(16) - defer tls.Free(16) - - // var ip [8]uint16_t at bp, 16 - - var a uintptr = a0 - var i int32 - var j int32 - var v int32 - var d int32 - var brk int32 = -1 - var need_v4 int32 = 0 - - if af == 2 { - for i = 0; i < 4; i++ { - for v = AssignInt32(&j, 0); j < 3 && func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) - }() != 0; j++ { - v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0' - } - if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 { - return 0 - } - *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { - return 1 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' { - return 0 - } - s += uintptr(j + 1) - } - return 0 - } else if af != 10 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return -1 - } - - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { - return 0 - } - - for i = 0; ; i++ { - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 { - brk = i - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { - break - } - if i == 7 { - return 0 - } - continue - } - for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { - v = 16*v + d - } - if j == 0 { - return 0 - } - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) - if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { - break - } - if i == 7 { - return 0 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' { - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { - return 0 - } - need_v4 = 1 - i++ - break - } - s += uintptr(j + 1) - } - if brk >= 0 { - Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk))) - for j = 0; j < 7-i; j++ { - *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) - } - } - for j = 0; j < 8; j++ { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) - } - if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { - return 0 - } - return 1 -} - -func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) - } - bp := tls.Alloc(96) - defer tls.Free(96) - - // var a4 in_addr at bp, 4 - - // var a6 in6_addr at bp+68, 16 - - if X__inet_aton(tls, name, bp) > 0 { - if family == 10 { // wrong family - return -2 - } - Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 2 - (*address)(unsafe.Pointer(buf)).scopeid = uint32(0) - return 1 - } - // var tmp [64]uint8 at bp+4, 64 - - var p uintptr = Xstrchr(tls, name, '%') - // var z uintptr at bp+88, 8 - - var scopeid uint64 = uint64(0) - if p != 0 && (int64(p)-int64(name))/1 < int64(64) { - Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1)) - *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = uint8(0) - name = bp + 4 /* &tmp[0] */ - } - - if Xinet_pton(tls, 10, name, bp+68) <= 0 { - return 0 - } - if family == 2 { // wrong family - return -2 - } - - Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 10 - if p != 0 { - if func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) - }() != 0 { - scopeid = Xstrtoull(tls, p, bp+88, 10) - } else { - *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1) - } - if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { - Xabort(tls) //TODO- - // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && - // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) - // return EAI_NONAME; - // scopeid = if_nametoindex(p); - // if (!scopeid) return EAI_NONAME; - } - if scopeid > uint64(0xffffffff) { - return -2 - } - } - (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid) - return 1 -} - -func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ - var s uintptr - //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; - if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) { - return 0 - } - for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ { - } - return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) -} - -var Xzero_struct_address address /* lookup_name.c:27:16: */ - -func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ - var cnt int32 = 0 - if name != 0 { - return 0 - } - if flags&0x01 != 0 { - //TODO if (family != AF_INET6) - //TODO buf[cnt++] = (struct address){ .family = AF_INET }; - if family != 10 { - var x = Xzero_struct_address - x.family = 2 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - //TODO if (family != AF_INET) - //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; - if family != 2 { - var x = Xzero_struct_address - x.family = 10 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - } else { - Xabort(tls) //TODO- - // if (family != AF_INET6) - // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; - // if (family != AF_INET) - // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; - } - return cnt -} - -func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ - return X__lookup_ipliteral(tls, buf, name, family) -} - -func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var line [512]uint8 at bp, 512 - - var l size_t = Xstrlen(tls, name) - var cnt int32 = 0 - var badfam int32 = 0 - var _buf [1032]uint8 - _ = _buf - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var _f FILE - _ = _f - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { - case 2: - fallthrough - case 20: - fallthrough - case 13: - return 0 - fallthrough - default: - return -11 - } - } - for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 { - var p uintptr - var z uintptr - - if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ { - } - if !(p != 0) { - continue - } - - // Isolate IP address to parse - for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { - case 1: - cnt++ - break - case 0: - continue - default: - badfam = -2 - continue - } - - // Extract first name as canonical name - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if is_valid_hostname(tls, p) != 0 { - Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1))) - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) - if cnt != 0 { - return cnt - } - return badfam -} - -type dpc_ctx = struct { - addrs uintptr - canon uintptr - cnt int32 - _ [4]byte -} /* lookup_name.c:112:1 */ - -func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ - return -1 //TODO- - Xabort(tls) - return int32(0) //TODO- - // char search[256]; - // struct resolvconf conf; - // size_t l, dots; - // char *p, *z; - - // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; - - // /* Count dots, suppress search when >=ndots or name ends in - // * a dot, which is an explicit request for global scope. */ - // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; - // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; - - // /* Strip final dot for canon, fail if multiple trailing dots. */ - // if (name[l-1]=='.') l--; - // if (!l || name[l-1]=='.') return EAI_NONAME; - - // /* This can never happen; the caller already checked length. */ - // if (l >= 256) return EAI_NONAME; - - // /* Name with search domain appended is setup in canon[]. This both - // * provides the desired default canonical name (if the requested - // * name is not a CNAME record) and serves as a buffer for passing - // * the full requested name to name_from_dns. */ - // memcpy(canon, name, l); - // canon[l] = '.'; - - // for (p=search; *p; p=z) { - // for (; isspace(*p); p++); - // for (z=p; *z && !isspace(*z); z++); - // if (z==p) break; - // if (z-p < 256 - l - 1) { - // memcpy(canon+l+1, p, z-p); - // canon[z-p+1+l] = 0; - // int cnt = name_from_dns(buf, canon, canon, family, &conf); - // if (cnt) return cnt; - // } - // } - - // canon[l] = 0; - // return name_from_dns(buf, canon, name, family, &conf); -} - -type policy = struct { - addr [16]uint8 - len uint8 - mask uint8 - prec uint8 - label uint8 -} /* lookup_name.c:237:14 */ - -var defpolicy = [6]policy{ - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)}, - // Last rule must match all addresses to stop loop. - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)}, -} /* lookup_name.c:241:3 */ - -func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ - var i int32 - for i = 0; ; i++ { - if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].len)) != 0 { - continue - } - if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) != - int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) { - continue - } - return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 - } - return uintptr(0) -} - -func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ - return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label) -} - -func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { - return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { - return 2 - } - if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 { - return 2 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { - return 5 - } - return 14 -} - -func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ - // FIXME: The common prefix length should be limited to no greater - // than the nominal length of the prefix portion of the source - // address. However the definition of the source prefix length is - // not clear and thus this limiting is not yet implemented. - var i uint32 - for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ { - } - return int32(i) -} - -func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ - var a uintptr = _a - var b uintptr = _b - return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey -} - -func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) - } - bp := tls.Alloc(92) - defer tls.Free(92) - - var cnt int32 = 0 - var i int32 - var j int32 - _ = j - - *(*uint8)(unsafe.Pointer(canon)) = uint8(0) - if name != 0 { - // reject empty name and check len so it fits into temp bufs - var l size_t = Xstrnlen(tls, name, uint64(255)) - if l-uint64(1) >= uint64(254) { - return -2 - } - Xmemcpy(tls, canon, name, l+uint64(1)) - } - - // Procedurally, a request for v6 addresses with the v4-mapped - // flag set is like a request for unspecified family, followed - // by filtering of the results. - if flags&0x08 != 0 { - if family == 10 { - family = 0 - } else { - flags = flags - 0x08 - } - } - - // Try each backend until there's at least one result. - cnt = name_from_null(tls, buf, name, family, flags) - if !(cnt != 0) { - cnt = name_from_numeric(tls, buf, name, family) - } - if !(cnt != 0) && !(flags&0x04 != 0) { - cnt = name_from_hosts(tls, buf, canon, name, family) - if !(cnt != 0) { - cnt = name_from_dns_search(tls, buf, canon, name, family) - } - } - if cnt <= 0 { - if cnt != 0 { - return cnt - } - return -2 - } - - // Filter/transform results for v4-mapped lookup, if requested. - if flags&0x08 != 0 { - Xabort(tls) //TODO- - // if (!(flags & AI_ALL)) { - // /* If any v6 results exist, remove v4 results. */ - // for (i=0; i= 0 { - if !(Xconnect(tls, fd, da, dalen) != 0) { - key = key | 0x40000000 - if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { - if family == 2 { - Xmemcpy(tls, - bp+28+8+uintptr(12), - bp+72+4, uint64(4)) - } - if dscope == scopeof(tls, bp+28+8) { - key = key | 0x20000000 - } - if dlabel == labelof(tls, bp+28+8) { - key = key | 0x10000000 - } - prefixlen = prefixmatch(tls, bp+28+8, - bp+8) - } - } - Xclose(tls, fd) - } - key = key | dprec<<20 - key = key | (15-dscope)<<16 - key = key | prefixlen<<8 - key = key | (48-i)<<0 - (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key - } - Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr) int32 - }{addrcmp}))) - - //TODO pthread_setcancelstate(cs, 0); - - return cnt -} - -func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var line [128]uint8 - _ = line - var cnt int32 = 0 - var p uintptr - _ = p - *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ - var port uint64 = uint64(0) - - switch socktype { - case 1: - switch proto { - case 0: - proto = 6 - fallthrough - case 6: - break - default: - return -8 - } - break - case 2: - switch proto { - case 0: - proto = 17 - fallthrough - case 17: - break - default: - return -8 - } - fallthrough - case 0: - break - default: - if name != 0 { - return -8 - } - (*service)(unsafe.Pointer(buf)).port = uint16_t(0) - (*service)(unsafe.Pointer(buf)).proto = uint8(proto) - (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype) - return 1 - } - - if name != 0 { - if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) { - return -8 - } - port = Xstrtoul(tls, name, bp, 10) - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { - if port > uint64(65535) { - return -8 - } - if proto != 17 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6) - } - if proto != 6 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17) - } - return cnt - } - - if flags&0x400 != 0 { - return -2 - } - - var l size_t = Xstrlen(tls, name) - _ = l - - Xabort(tls) //TODO- - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) switch (errno) { - // case ENOENT: - // case ENOTDIR: - // case EACCES: - // return EAI_SERVICE; - // default: - // return EAI_SYSTEM; - // } - - Xabort(tls) //TODO- - // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // /* Find service name */ - // for(p=line; (p=strstr(p, name)); p++) { - // if (p>line && !isspace(p[-1])) continue; - // if (p[l] && !isspace(p[l])) continue; - // break; - // } - // if (!p) continue; - - // /* Skip past canonical name at beginning of line */ - // for (p=line; *p && !isspace(*p); p++); - - // port = strtoul(p, &z, 10); - // if (port > 65535 || z==p) continue; - // if (!strncmp(z, "/udp", 4)) { - // if (proto == IPPROTO_TCP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_DGRAM; - // buf[cnt++].proto = IPPROTO_UDP; - // } - // if (!strncmp(z, "/tcp", 4)) { - // if (proto == IPPROTO_UDP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_STREAM; - // buf[cnt++].proto = IPPROTO_TCP; - // } - // } - // __fclose_ca(f); - // return cnt > 0 ? cnt : EAI_SERVICE; - Xabort(tls) - return int32(0) //TODO- -} - -func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */ - x = x ^ x>>11 - x = x ^ x<<7&0x9D2C5680 - x = x ^ x<<15&0xEFC60000 - x = x ^ x>>18 - return x -} - -func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */ - if __ccgo_strace { - trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) - } - return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2)) -} - -func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var owner int32 = (*FILE)(unsafe.Pointer(f)).lock - var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid - if owner&CplInt32(0x40000000) == tid { - return 0 - } - owner = a_cas(tls, f+140, 0, tid) - if !(owner != 0) { - return 1 - } - for AssignInt32(&owner, a_cas(tls, f+140, 0, tid|0x40000000)) != 0 { - if owner&0x40000000 != 0 || a_cas(tls, f+140, owner, owner|0x40000000) == owner { - __futexwait(tls, f+140, owner|0x40000000, 1) - } - } - return 1 -} - -func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - if a_swap(tls, f+140, 0)&0x40000000 != 0 { - __wake(tls, f+140, 1, 1) - } -} - -func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).mode - 1 - if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase { - (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint64(0)) - } - (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0))) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 { - *(*uint32)(unsafe.Pointer(f)) |= uint32(32) - return -1 - } - (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size)) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 { - return -1 - } - return 0 -} - -func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - X__builtin_abort(tls) //TODO- - // __stdio_exit_needed(); -} - -// This function assumes it will never be called if there is already -// data buffered for reading. - -func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - bp := tls.Alloc(1) - defer tls.Free(1) - - // var c uint8 at bp, 1 - - if !(X__toread(tls, f) != 0) && (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint64(1)) == uint64(1) { - return int32(*(*uint8)(unsafe.Pointer(bp))) - } - return -1 -} - -func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) - } - var ret int32 - var ap va_list - _ = ap - ap = va - ret = Xvsscanf(tls, s, fmt, ap) - _ = ap - return ret -} - -type wctrans_t = uintptr /* wctype.h:20:19 */ - -func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */ - if !(dest != 0) { - return - } - switch size { - case -2: - *(*uint8)(unsafe.Pointer(dest)) = uint8(i) - break - case -1: - *(*int16)(unsafe.Pointer(dest)) = int16(i) - break - case 0: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 1: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - case 3: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - } -} - -func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */ - var p uintptr - var i uint32 - var ap2 va_list - _ = ap2 - ap2 = ap - for i = n; i > uint32(1); i-- { - VaUintptr(&ap2) - } - p = VaUintptr(&ap2) - _ = ap2 - return p -} - -func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */ - if __ccgo_strace { - trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var width int32 - var size int32 - var alloc int32 - var base int32 - var p uintptr - var c int32 - var t int32 - var s uintptr - var wcs uintptr - // var st mbstate_t at bp+268, 8 - - var dest uintptr - var invert int32 - var matches int32 - var x uint64 - var y float64 - var pos off_t - // var scanset [257]uint8 at bp, 257 - - var i size_t - var k size_t - // var wc wchar_t at bp+260, 4 - - var __need_unlock int32 - var tmp uintptr - var tmp1 uintptr - alloc = 0 - dest = uintptr(0) - matches = 0 - pos = int64(0) - __need_unlock = func() int32 { - if (*FILE)(unsafe.Pointer(f)).lock >= 0 { - return X__lockfile(tls, f) - } - return 0 - }() - - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __1 - } - X__toread(tls, f) -__1: - ; - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __2 - } - goto input_fail -__2: - ; - - p = fmt -__3: - if !(*(*uint8)(unsafe.Pointer(p)) != 0) { - goto __5 - } - - alloc = 0 - - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) { - goto __6 - } -__7: - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) { - goto __8 - } - p++ - goto __7 -__8: - ; - X__shlim(tls, f, int64(0)) -__9: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __10 - } - goto __9 -__10: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__6: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') { - goto __11 - } - X__shlim(tls, f, int64(0)) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') { - goto __12 - } - p++ -__14: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __15 - } - goto __14 -__15: - ; - goto __13 -__12: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__13: - ; - if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __16 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(c < 0) { - goto __17 - } - goto input_fail -__17: - ; - goto match_fail -__16: - ; - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__11: - ; - - p++ - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') { - goto __18 - } - dest = uintptr(0) - p++ - goto __19 -__18: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') { - goto __20 - } - dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0')) - p += uintptr(2) - goto __21 -__20: - dest = VaUintptr(&ap) -__21: - ; -__19: - ; - - width = 0 -__22: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0) { - goto __24 - } - width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0' - goto __23 -__23: - p++ - goto __22 - goto __24 -__24: - ; - - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') { - goto __25 - } - wcs = uintptr(0) - s = uintptr(0) - alloc = BoolInt32(!!(dest != 0)) - p++ - goto __26 -__25: - alloc = 0 -__26: - ; - - size = 0 - switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) { - case 'h': - goto __28 - case 'l': - goto __29 - case 'j': - goto __30 - case 'z': - goto __31 - case 't': - goto __32 - case 'L': - goto __33 - case 'd': - goto __34 - case 'i': - goto __35 - case 'o': - goto __36 - case 'u': - goto __37 - case 'x': - goto __38 - case 'a': - goto __39 - case 'e': - goto __40 - case 'f': - goto __41 - case 'g': - goto __42 - case 'A': - goto __43 - case 'E': - goto __44 - case 'F': - goto __45 - case 'G': - goto __46 - case 'X': - goto __47 - case 's': - goto __48 - case 'c': - goto __49 - case '[': - goto __50 - case 'S': - goto __51 - case 'C': - goto __52 - case 'p': - goto __53 - case 'n': - goto __54 - default: - goto __55 - } - goto __27 -__28: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') { - goto __56 - } - p++ - size = -2 - goto __57 -__56: - size = -1 -__57: - ; - goto __27 -__29: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') { - goto __58 - } - p++ - size = 3 - goto __59 -__58: - size = 1 -__59: - ; - goto __27 -__30: - size = 3 - goto __27 -__31: -__32: - size = 1 - goto __27 -__33: - size = 2 - goto __27 -__34: -__35: -__36: -__37: -__38: -__39: -__40: -__41: -__42: -__43: -__44: -__45: -__46: -__47: -__48: -__49: -__50: -__51: -__52: -__53: -__54: - p-- - goto __27 -__55: - goto fmt_fail -__27: - ; - - t = int32(*(*uint8)(unsafe.Pointer(p))) - - // C or S - if !(t&0x2f == 3) { - goto __60 - } - t = t | 32 - size = 1 -__60: - ; - - switch t { - case 'c': - goto __62 - case '[': - goto __63 - case 'n': - goto __64 - default: - goto __65 - } - goto __61 -__62: - if !(width < 1) { - goto __66 - } - width = 1 -__66: - ; -__63: - goto __61 -__64: - store_int(tls, dest, size, uint64(pos)) - // do not increment match count, etc! - goto __4 -__65: - X__shlim(tls, f, int64(0)) -__67: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __68 - } - goto __67 -__68: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) -__61: - ; - - X__shlim(tls, f, int64(width)) - if !(func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() < 0) { - goto __69 - } - goto input_fail -__69: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - - switch t { - case 's': - goto __71 - case 'c': - goto __72 - case '[': - goto __73 - case 'p': - goto __74 - case 'X': - goto __75 - case 'x': - goto __76 - case 'o': - goto __77 - case 'd': - goto __78 - case 'u': - goto __79 - case 'i': - goto __80 - case 'a': - goto __81 - case 'A': - goto __82 - case 'e': - goto __83 - case 'E': - goto __84 - case 'f': - goto __85 - case 'F': - goto __86 - case 'g': - goto __87 - case 'G': - goto __88 - } - goto __70 -__71: -__72: -__73: - if !(t == 'c' || t == 's') { - goto __89 - } - Xmemset(tls, bp, -1, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(t == 's') { - goto __91 - } - *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0) -__91: - ; - goto __90 -__89: - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') { - goto __92 - } - p++ - invert = 1 - goto __93 -__92: - invert = 0 -__93: - ; - Xmemset(tls, bp, invert, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') { - goto __94 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert) - goto __95 -__94: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') { - goto __96 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert) -__96: - ; -__95: - ; -__97: - if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') { - goto __99 - } - if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - goto __100 - } - goto fmt_fail -__100: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') { - goto __101 - } - c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1)))) -__102: - if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __104 - } - *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert) - goto __103 -__103: - c++ - goto __102 - goto __104 -__104: - ; -__101: - ; - *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert) - goto __98 -__98: - p++ - goto __97 - goto __99 -__99: - ; -__90: - ; - wcs = uintptr(0) - s = uintptr(0) - i = uint64(0) - if t == 'c' { - k = uint64(uint32(width) + 1) - } else { - k = uint64(31) - } - if !(size == 1) { - goto __105 - } - if !(alloc != 0) { - goto __107 - } - wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(wcs != 0) { - goto __109 - } - goto alloc_fail -__109: - ; - goto __108 -__107: - wcs = dest -__108: - ; - *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{} -__110: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __111 - } - switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint64(1), bp+268 /* &st */) { - case Uint64FromInt32(-1): - goto __113 - case Uint64FromInt32(-2): - goto __114 - } - goto __112 -__113: - goto input_fail -__114: - goto __110 -__112: - ; - if !(wcs != 0) { - goto __115 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint64(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */)) -__115: - ; - if !(alloc != 0 && i == k) { - goto __116 - } - k = k + (k + uint64(1)) - tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(tmp != 0) { - goto __117 - } - goto alloc_fail -__117: - ; - wcs = tmp -__116: - ; - goto __110 -__111: - ; - if !!(Xmbsinit(tls, bp+268) != 0) { - goto __118 - } - goto input_fail -__118: - ; - goto __106 -__105: - if !(alloc != 0) { - goto __119 - } - s = Xmalloc(tls, k) - if !!(s != 0) { - goto __121 - } - goto alloc_fail -__121: - ; -__122: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __123 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - if !(i == k) { - goto __124 - } - k = k + (k + uint64(1)) - tmp1 = Xrealloc(tls, s, k) - if !!(tmp1 != 0) { - goto __125 - } - goto alloc_fail -__125: - ; - s = tmp1 -__124: - ; - goto __122 -__123: - ; - goto __120 -__119: - if !(AssignUintptr(&s, dest) != 0) { - goto __126 - } -__128: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __129 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - goto __128 -__129: - ; - goto __127 -__126: -__130: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __131 - } - goto __130 -__131: - ; -__127: - ; -__120: - ; -__106: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __132 - } - goto match_fail -__132: - ; - if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != off_t(width)) { - goto __133 - } - goto match_fail -__133: - ; - if !(alloc != 0) { - goto __134 - } - if !(size == 1) { - goto __135 - } - *(*uintptr)(unsafe.Pointer(dest)) = wcs - goto __136 -__135: - *(*uintptr)(unsafe.Pointer(dest)) = s -__136: - ; -__134: - ; - if !(t != 'c') { - goto __137 - } - if !(wcs != 0) { - goto __138 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 -__138: - ; - if !(s != 0) { - goto __139 - } - *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) -__139: - ; -__137: - ; - goto __70 -__74: -__75: -__76: - base = 16 - goto int_common -__77: - base = 8 - goto int_common -__78: -__79: - base = 10 - goto int_common -__80: - base = 0 -int_common: - x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1)) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __140 - } - goto match_fail -__140: - ; - if !(t == 'p' && dest != 0) { - goto __141 - } - *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x)) - goto __142 -__141: - store_int(tls, dest, size, x) -__142: - ; - goto __70 -__81: -__82: -__83: -__84: -__85: -__86: -__87: -__88: - y = X__floatscan(tls, f, size, 0) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __143 - } - goto match_fail -__143: - ; - if !(dest != 0) { - goto __144 - } - switch size { - case 0: - goto __146 - case 1: - goto __147 - case 2: - goto __148 - } - goto __145 -__146: - *(*float32)(unsafe.Pointer(dest)) = float32(y) - goto __145 -__147: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__148: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__145: - ; -__144: - ; - goto __70 -__70: - ; - - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - if !(dest != 0) { - goto __149 - } - matches++ -__149: - ; - goto __4 -__4: - p++ - goto __3 - goto __5 -__5: - ; - if !(0 != 0) { - goto __150 - } -fmt_fail: -alloc_fail: -input_fail: - if !!(matches != 0) { - goto __151 - } - matches-- -__151: - ; -match_fail: - if !(alloc != 0) { - goto __152 - } - Xfree(tls, s) - Xfree(tls, wcs) -__152: - ; -__150: - ; -__153: - if !(__need_unlock != 0) { - goto __156 - } - X__unlockfile(tls, f) -__156: - ; - goto __154 -__154: - if 0 != 0 { - goto __153 - } - goto __155 -__155: - ; - return matches -} - -func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */ - var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie - var k size_t = len + uint64(256) - var end uintptr = Xmemchr(tls, src, 0, k) - if end != 0 { - k = size_t((int64(end) - int64(src)) / 1) - } - if k < len { - len = k - } - Xmemcpy(tls, buf, src, len) - (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len) - (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k) - (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k) - return len -} - -func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) - } - bp := tls.Alloc(232) - defer tls.Free(232) - - *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - }{string_read})), buf: s, lock: -1, cookie: s} - return Xvfscanf(tls, bp, fmt, ap) -} - -func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ - if __ccgo_strace { - trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) - } - var try uintptr - var sign int32 - for nel > uint64(0) { - try = base + uintptr(width*(nel/uint64(2))) - sign = (*struct { - f func(*TLS, uintptr, uintptr) int32 - })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) - if sign < 0 { - nel = nel / uint64(2) - } else if sign > 0 { - base = try + uintptr(width) - nel = nel - (nel/uint64(2) + uint64(1)) - } else { - return try - } - } - return uintptr(0) -} - -func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y float64 = X__floatscan(tls, bp, prec, 1) - var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1 - if p != 0 { - *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { - if cnt != 0 { - return s + uintptr(cnt) - } - return s - }() - } - return y -} - -func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return float32(strtox(tls, s, p, 0)) -} - -func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 1) -} - -func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 2) -} - -func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) - if p != 0 { - var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1) - *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) - } - return y -} - -func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) -} - -func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) -} - -func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))) -} - -func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1)))) -} - -func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return intmax_t(Xstrtoll(tls, s, p, base)) -} - -func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uintmax_t(Xstrtoull(tls, s, p, base)) -} - -func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - var l size_t = Xstrlen(tls, s) - var d uintptr = Xmalloc(tls, l+uint64(1)) - if !(d != 0) { - return uintptr(0) - } - return Xmemcpy(tls, d, s, l+uint64(1)) -} - -func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var l size_t = Xstrnlen(tls, d, n) - if l == n { - return l + Xstrlen(tls, s) - } - return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var d0 uintptr - var wd uintptr - var ws uintptr - d0 = d - - if !!(int32(PostDecUint64(&n, 1)) != 0) { - goto __1 - } - goto finish -__1: - ; - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) { - goto __2 - } -__3: - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __5 - } - goto __4 -__4: - n-- - s++ - d++ - goto __3 - goto __5 -__5: - ; - if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { - goto __6 - } - wd = d - ws = s -__7: - if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint64)(unsafe.Pointer(ws))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(ws)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0)) { - goto __9 - } - *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) - goto __8 -__8: - n = n - size_t(unsafe.Sizeof(size_t(0))) - ws += 8 - wd += 8 - goto __7 - goto __9 -__9: - ; - d = wd - s = ws -__6: - ; -__2: - ; -__10: - if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __12 - } - goto __11 -__11: - n-- - s++ - d++ - goto __10 - goto __12 -__12: - ; - *(*uint8)(unsafe.Pointer(d)) = uint8(0) -finish: - return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s) -} - -func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */ - if __ccgo_strace { - trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) - } - var l uintptr = _l - var r uintptr = _r - if !(int32(PostDecUint64(&n, 1)) != 0) { - return 0 - } -__1: - if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { - goto __3 - } - goto __2 -__2: - l++ - r++ - n-- - goto __1 - goto __3 -__3: - ; - return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) -} - -func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */ - if __ccgo_strace { - trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) - } - return Xstrncasecmp(tls, l, r, n) -} - -func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var a uintptr = d - d += uintptr(Xstrlen(tls, d)) - for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { - n-- - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0) - return a -} - -func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ - if __ccgo_strace { - trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) - } - var p uintptr = Xmemchr(tls, s, 0, n) - if p != 0 { - return uint64((int64(p) - int64(s)) / 1) - } - return n -} - -func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ - if __ccgo_strace { - trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) - } - bp := tls.Alloc(32) - defer tls.Free(32) - - var a uintptr = s - *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)} - - if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) { - return uint64(0) - } - if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) { - for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ { - } - return size_t((int64(s) - int64(a)) / 1) - } - - for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint64(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8, size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; c++ { - } - for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8))&(size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; s++ { - } - return size_t((int64(s) - int64(a)) / 1) -} - -func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */ - if __ccgo_strace { - trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) - } - if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) { - return uintptr(0) - } - s += uintptr(Xstrspn(tls, s, sep)) - if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) { - return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0)) - } - _sp = s + uintptr(Xstrcspn(tls, s, sep)) - if *(*uint8)(unsafe.Pointer(_sp)) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0) - } else { - _sp = uintptr(0) - } - return s -} - -var _sp uintptr /* strtok.c:5:14: */ - -func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return *(*int32)(unsafe.Pointer(a + 6*4)) -} - -func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 6*4)) - return 0 -} - -// -// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_guardsize; -// return 0; -// } -// -// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit) -// { -// *inherit = a->_a_sched; -// return 0; -// } -// -// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param) -// { -// param->sched_priority = a->_a_prio; -// return 0; -// } -// -// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy) -// { -// *policy = a->_a_policy; -// return 0; -// } -// -// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope) -// { -// *scope = PTHREAD_SCOPE_SYSTEM; -// return 0; -// } -// -// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size) -// { -// if (!a->_a_stackaddr) -// return EINVAL; -// *size = a->_a_stacksize; -// *addr = (void *)(a->_a_stackaddr - *size); -// return 0; -// } -// -// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_stacksize; -// return 0; -// } -// -// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared) -// { -// *pshared = !!a->__attr; -// return 0; -// } -// -// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk) -// { -// *clk = a->__attr & 0x7fffffff; -// return 0; -// } -// -// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr>>31; -// return 0; -// } -// -// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol) -// { -// *protocol = PTHREAD_PRIO_NONE; -// return 0; -// } -// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr / 128U % 2; -// return 0; -// } -// -// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust) -// { -// *robust = a->__attr / 4U % 2; -// return 0; -// } - -func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)) -} - -// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type) -// { -// *type = a->__attr & 3; -// return 0; -// } -// -// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr[0]; -// return 0; -// } - -func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - if uint32(state) > 1 { - return 22 - } - *(*int32)(unsafe.Pointer(a + 6*4)) = state - return 0 -} - -func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */ - if __ccgo_strace { - trc("tls=%v m=%v, (%v:)", tls, m, origin(2)) - } - return *(*int32)(unsafe.Pointer(m)) & 15 -} - -// int __pthread_mutex_lock(pthread_mutex_t *m) -// { -// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL -// && !a_cas(&m->_m_lock, 0, EBUSY)) -// return 0; -// -// return __pthread_mutex_timedlock(m, 0); -// } -// -// weak_alias(__pthread_mutex_lock, pthread_mutex_lock); - -func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return 0 -} - -func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{} - return 0 -} - -func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v type1=%v, (%v:)", tls, a, type1, origin(2)) - } - if uint32(type1) > uint32(2) { - return 22 - } - (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1) - return 0 -} - -func init() { - *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45: -} - -var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data diff --git a/vendor/modernc.org/libc/musl_linux_s390x.go b/vendor/modernc.org/libc/musl_linux_s390x.go deleted file mode 100644 index 25de30f..0000000 --- a/vendor/modernc.org/libc/musl_linux_s390x.go +++ /dev/null @@ -1,7229 +0,0 @@ -// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_s390x.go -pkgname libc -static-locals-prefix _s -Iarch/s390x -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/gethostbyname_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.c', DO NOT EDIT. - -package libc - -import ( - "math" - "reflect" - "sync/atomic" - "unsafe" -) - -var _ = math.Pi -var _ reflect.Kind -var _ atomic.Value -var _ unsafe.Pointer - -// musl as a whole is licensed under the following standard MIT license: -// -// ---------------------------------------------------------------------- -// Copyright © 2005-2020 Rich Felker, et al. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ---------------------------------------------------------------------- -// -// Authors/contributors include: -// -// A. Wilcox -// Ada Worcester -// Alex Dowad -// Alex Suykov -// Alexander Monakov -// Andre McCurdy -// Andrew Kelley -// Anthony G. Basile -// Aric Belsito -// Arvid Picciani -// Bartosz Brachaczek -// Benjamin Peterson -// Bobby Bingham -// Boris Brezillon -// Brent Cook -// Chris Spiegel -// Clément Vasseur -// Daniel Micay -// Daniel Sabogal -// Daurnimator -// David Carlier -// David Edelsohn -// Denys Vlasenko -// Dmitry Ivanov -// Dmitry V. Levin -// Drew DeVault -// Emil Renner Berthing -// Fangrui Song -// Felix Fietkau -// Felix Janda -// Gianluca Anzolin -// Hauke Mehrtens -// He X -// Hiltjo Posthuma -// Isaac Dunham -// Jaydeep Patil -// Jens Gustedt -// Jeremy Huntwork -// Jo-Philipp Wich -// Joakim Sindholt -// John Spencer -// Julien Ramseier -// Justin Cormack -// Kaarle Ritvanen -// Khem Raj -// Kylie McClain -// Leah Neukirchen -// Luca Barbato -// Luka Perkov -// M Farkas-Dyck (Strake) -// Mahesh Bodapati -// Markus Wichmann -// Masanori Ogino -// Michael Clark -// Michael Forney -// Mikhail Kremnyov -// Natanael Copa -// Nicholas J. Kain -// orc -// Pascal Cuoq -// Patrick Oppenlander -// Petr Hosek -// Petr Skocik -// Pierre Carrier -// Reini Urban -// Rich Felker -// Richard Pennington -// Ryan Fairfax -// Samuel Holland -// Segev Finer -// Shiz -// sin -// Solar Designer -// Stefan Kristiansson -// Stefan O'Rear -// Szabolcs Nagy -// Timo Teräs -// Trutz Behn -// Valentin Ochs -// Will Dietz -// William Haddon -// William Pitcock -// -// Portions of this software are derived from third-party works licensed -// under terms compatible with the above MIT license: -// -// The TRE regular expression implementation (src/regex/reg* and -// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed -// under a 2-clause BSD license (license text in the source files). The -// included version has been heavily modified by Rich Felker in 2012, in -// the interests of size, simplicity, and namespace cleanliness. -// -// Much of the math library code (src/math/* and src/complex/*) is -// Copyright © 1993,2004 Sun Microsystems or -// Copyright © 2003-2011 David Schultz or -// Copyright © 2003-2009 Steven G. Kargl or -// Copyright © 2003-2009 Bruce D. Evans or -// Copyright © 2008 Stephen L. Moshier or -// Copyright © 2017-2018 Arm Limited -// and labelled as such in comments in the individual source files. All -// have been licensed under extremely permissive terms. -// -// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 -// The Android Open Source Project and is licensed under a two-clause BSD -// license. It was taken from Bionic libc, used on Android. -// -// The AArch64 memcpy and memset code (src/string/aarch64/*) are -// Copyright © 1999-2019, Arm Limited. -// -// The implementation of DES for crypt (src/crypt/crypt_des.c) is -// Copyright © 1994 David Burren. It is licensed under a BSD license. -// -// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was -// originally written by Solar Designer and placed into the public -// domain. The code also comes with a fallback permissive license for use -// in jurisdictions that may not recognize the public domain. -// -// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -// Valentin Ochs and is licensed under an MIT-style license. -// -// The x86_64 port was written by Nicholas J. Kain and is licensed under -// the standard MIT terms. -// -// The mips and microblaze ports were originally written by Richard -// Pennington for use in the ellcc project. The original code was adapted -// by Rich Felker for build system and code conventions during upstream -// integration. It is licensed under the standard MIT terms. -// -// The mips64 port was contributed by Imagination Technologies and is -// licensed under the standard MIT terms. -// -// The powerpc port was also originally written by Richard Pennington, -// and later supplemented and integrated by John Spencer. It is licensed -// under the standard MIT terms. -// -// All other files which have no copyright comments are original works -// produced specifically for use as part of this library, written either -// by Rich Felker, the main author of the library, or by one or more -// contibutors listed above. Details on authorship of individual files -// can be found in the git version control history of the project. The -// omission of copyright and license comments in each file is in the -// interest of source tree size. -// -// In addition, permission is hereby granted for all public header files -// (include/* and arch/*/bits/*) and crt files intended to be linked into -// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -// the copyright notice and permission notice otherwise required by the -// license, and to use these files without any requirement of -// attribution. These files include substantial contributions from: -// -// Bobby Bingham -// John Spencer -// Nicholas J. Kain -// Rich Felker -// Richard Pennington -// Stefan Kristiansson -// Szabolcs Nagy -// -// all of whom have explicitly granted such permission. -// -// This file previously contained text expressing a belief that most of -// the files covered by the above exception were sufficiently trivial not -// to be subject to copyright, resulting in confusion over whether it -// negated the permissions granted in the license. In the spirit of -// permissive licensing, and of not having licensing issues being an -// obstacle to adoption, that text has been removed. -const ( /* copyright.c:194:1: */ - __musl__copyright__ = 0 -) - -const ( /* nameser.h:117:1: */ - ns_uop_delete = 0 - ns_uop_add = 1 - ns_uop_max = 2 -) - -const ( /* nameser.h:147:1: */ - ns_t_invalid = 0 - ns_t_a = 1 - ns_t_ns = 2 - ns_t_md = 3 - ns_t_mf = 4 - ns_t_cname = 5 - ns_t_soa = 6 - ns_t_mb = 7 - ns_t_mg = 8 - ns_t_mr = 9 - ns_t_null = 10 - ns_t_wks = 11 - ns_t_ptr = 12 - ns_t_hinfo = 13 - ns_t_minfo = 14 - ns_t_mx = 15 - ns_t_txt = 16 - ns_t_rp = 17 - ns_t_afsdb = 18 - ns_t_x25 = 19 - ns_t_isdn = 20 - ns_t_rt = 21 - ns_t_nsap = 22 - ns_t_nsap_ptr = 23 - ns_t_sig = 24 - ns_t_key = 25 - ns_t_px = 26 - ns_t_gpos = 27 - ns_t_aaaa = 28 - ns_t_loc = 29 - ns_t_nxt = 30 - ns_t_eid = 31 - ns_t_nimloc = 32 - ns_t_srv = 33 - ns_t_atma = 34 - ns_t_naptr = 35 - ns_t_kx = 36 - ns_t_cert = 37 - ns_t_a6 = 38 - ns_t_dname = 39 - ns_t_sink = 40 - ns_t_opt = 41 - ns_t_apl = 42 - ns_t_tkey = 249 - ns_t_tsig = 250 - ns_t_ixfr = 251 - ns_t_axfr = 252 - ns_t_mailb = 253 - ns_t_maila = 254 - ns_t_any = 255 - ns_t_zxfr = 256 - ns_t_max = 65536 -) - -const ( /* nameser.h:210:1: */ - ns_c_invalid = 0 - ns_c_in = 1 - ns_c_2 = 2 - ns_c_chaos = 3 - ns_c_hs = 4 - ns_c_none = 254 - ns_c_any = 255 - ns_c_max = 65536 -) - -const ( /* nameser.h:221:1: */ - ns_kt_rsa = 1 - ns_kt_dh = 2 - ns_kt_dsa = 3 - ns_kt_private = 254 -) - -const ( /* nameser.h:228:1: */ - cert_t_pkix = 1 - cert_t_spki = 2 - cert_t_pgp = 3 - cert_t_url = 253 - cert_t_oid = 254 -) - -const ( /* nameser.h:28:1: */ - ns_s_qd = 0 - ns_s_zn = 0 - ns_s_an = 1 - ns_s_pr = 1 - ns_s_ns = 2 - ns_s_ud = 2 - ns_s_ar = 3 - ns_s_max = 4 -) - -const ( /* nameser.h:75:1: */ - ns_f_qr = 0 - ns_f_opcode = 1 - ns_f_aa = 2 - ns_f_tc = 3 - ns_f_rd = 4 - ns_f_ra = 5 - ns_f_z = 6 - ns_f_ad = 7 - ns_f_cd = 8 - ns_f_rcode = 9 - ns_f_max = 10 -) - -const ( /* nameser.h:89:1: */ - ns_o_query = 0 - ns_o_iquery = 1 - ns_o_status = 2 - ns_o_notify = 4 - ns_o_update = 5 - ns_o_max = 6 -) - -const ( /* nameser.h:98:1: */ - ns_r_noerror = 0 - ns_r_formerr = 1 - ns_r_servfail = 2 - ns_r_nxdomain = 3 - ns_r_notimpl = 4 - ns_r_refused = 5 - ns_r_yxdomain = 6 - ns_r_yxrrset = 7 - ns_r_nxrrset = 8 - ns_r_notauth = 9 - ns_r_notzone = 10 - ns_r_max = 11 - ns_r_badvers = 16 - ns_r_badsig = 16 - ns_r_badkey = 17 - ns_r_badtime = 18 -) - -const ( /* pthread_impl.h:58:1: */ - DT_EXITING = 0 - DT_JOINABLE = 1 - DT_DETACHED = 2 -) - -type ptrdiff_t = int64 /* :3:26 */ - -type size_t = uint64 /* :9:23 */ - -type wchar_t = int32 /* :15:24 */ - -type uint16_t = uint16 /* alltypes.h:113:25 */ - -type uint32_t = uint32 /* alltypes.h:118:25 */ - -type uint64_t = uint64 /* alltypes.h:123:25 */ - -func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ - return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 -} - -var table = [384]uint16{ - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), - uint16(0x200), uint16(0x320), uint16(0x220), uint16(0x220), uint16(0x220), uint16(0x220), uint16(0x200), uint16(0x200), - uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), - uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), uint16(0x200), - uint16(0x160), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), - uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), - uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), uint16(0x8d8), - uint16(0x8d8), uint16(0x8d8), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), - uint16(0x4c0), uint16(0x8d5), uint16(0x8d5), uint16(0x8d5), uint16(0x8d5), uint16(0x8d5), uint16(0x8d5), uint16(0x8c5), - uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), - uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), - uint16(0x8c5), uint16(0x8c5), uint16(0x8c5), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), - uint16(0x4c0), uint16(0x8d6), uint16(0x8d6), uint16(0x8d6), uint16(0x8d6), uint16(0x8d6), uint16(0x8d6), uint16(0x8c6), - uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), - uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), - uint16(0x8c6), uint16(0x8c6), uint16(0x8c6), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x4c0), uint16(0x200), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), - uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), -} /* __ctype_b_loc.c:9:29 */ - -var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */ - -func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&ptable)) -} - -func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ - return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) -} - -type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:330:9 */ - -type locale_t = uintptr /* alltypes.h:330:32 */ - -func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisalpha(tls, c) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) - }() != 0 || func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0) -} - -func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalnum(tls, c) -} - -func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) -} - -func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisalpha(tls, c) -} - -func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) -} - -func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisdigit(tls, c) -} - -func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('a') < uint32(26)) -} - -func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xislower(tls, c) -} - -func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) -} - -func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisprint(tls, c) -} - -func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(uint32(c)-uint32('A') < uint32(26)) -} - -func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisupper(tls, c) -} - -func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v c=%v, (%v:)", tls, c, origin(2)) - } - return Bool32(func() int32 { - if 0 != 0 { - return Xisdigit(tls, c) - } - return Bool32(uint32(c)-uint32('0') < uint32(10)) - }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) -} - -func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ - if __ccgo_strace { - trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2)) - } - return Xisxdigit(tls, c) -} - -type off_t = int64 /* alltypes.h:149:16 */ - -type ino_t = uint64 /* alltypes.h:154:25 */ - -type dirent = struct { - d_ino ino_t - d_off off_t - d_reclen uint16 - d_type uint8 - d_name [256]uint8 - _ [5]byte -} /* dirent.h:5:1 */ - -type __dirstream = struct { - tell off_t - fd int32 - buf_pos int32 - buf_end int32 - lock [1]int32 - buf [2048]uint8 -} /* dirent.h:20:9 */ - -type DIR = __dirstream /* dirent.h:20:28 */ - -type ssize_t = int64 /* alltypes.h:52:15 */ - -type intptr_t = int64 /* alltypes.h:57:15 */ - -type pid_t = int32 /* alltypes.h:222:13 */ - -type uid_t = uint32 /* alltypes.h:232:18 */ - -type gid_t = uint32 /* alltypes.h:237:18 */ - -type useconds_t = uint32 /* alltypes.h:247:18 */ - -type div_t = struct { - quot int32 - rem int32 -} /* stdlib.h:62:35 */ -type ldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:63:36 */ -type lldiv_t = struct { - quot int64 - rem int64 -} /* stdlib.h:64:41 */ - -func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd) - Xfree(tls, dir) - return ret -} - -type mode_t = uint32 /* alltypes.h:139:18 */ - -type iovec = struct { - iov_base uintptr - iov_len size_t -} /* alltypes.h:342:1 */ - -type flock = struct { - l_type int16 - l_whence int16 - _ [4]byte - l_start off_t - l_len off_t - l_pid pid_t - _ [4]byte -} /* fcntl.h:24:1 */ - -type file_handle = struct { - _ [0]uint32 - handle_bytes uint32 - handle_type int32 -} /* fcntl.h:167:1 */ - -type f_owner_ex = struct { - __type int32 - pid pid_t -} /* fcntl.h:172:1 */ - -type syscall_arg_t = int64 /* syscall.h:22:14 */ - -func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - var fd int32 - var dir uintptr - - if AssignInt32(&fd, Xopen(tls, name, 00|0200000|02000000, 0)) < 0 { - return uintptr(0) - } - if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint64(1), uint64(unsafe.Sizeof(DIR{}))))) != 0) { - __syscall1(tls, int64(6), int64(fd)) - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).fd = fd - return dir -} - -type max_align_t = struct { - __ll int64 - __ld float64 -} /* alltypes.h:28:54 */ - -type dirstream_buf_alignment_check = [1]uint8 /* readdir.c:7:14 */ - -func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */ - if __ccgo_strace { - trc("tls=%v dir=%v, (%v:)", tls, dir, origin(2)) - } - var de uintptr - - if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end { - var len int32 = int32(__syscall3(tls, int64(220), int64((*DIR)(unsafe.Pointer(dir)).fd), int64(dir+24), int64(unsafe.Sizeof([2048]uint8{})))) - if len <= 0 { - if len < 0 && len != -2 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len - } - return uintptr(0) - } - (*DIR)(unsafe.Pointer(dir)).buf_end = len - (*DIR)(unsafe.Pointer(dir)).buf_pos = 0 - } - de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos) - *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen) - (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off - return de -} - -type uintptr_t = uint64 /* alltypes.h:42:24 */ - -type int8_t = int8 /* alltypes.h:83:25 */ - -type int16_t = int16 /* alltypes.h:88:25 */ - -type int32_t = int32 /* alltypes.h:93:25 */ - -type int64_t = int64 /* alltypes.h:98:25 */ - -type intmax_t = int64 /* alltypes.h:103:25 */ - -type uint8_t = uint8 /* alltypes.h:108:25 */ - -type uintmax_t = uint64 /* alltypes.h:133:25 */ - -type int_fast8_t = int8_t /* stdint.h:22:16 */ -type int_fast64_t = int64_t /* stdint.h:23:17 */ - -type int_least8_t = int8_t /* stdint.h:25:17 */ -type int_least16_t = int16_t /* stdint.h:26:17 */ -type int_least32_t = int32_t /* stdint.h:27:17 */ -type int_least64_t = int64_t /* stdint.h:28:17 */ - -type uint_fast8_t = uint8_t /* stdint.h:30:17 */ -type uint_fast64_t = uint64_t /* stdint.h:31:18 */ - -type uint_least8_t = uint8_t /* stdint.h:33:18 */ -type uint_least16_t = uint16_t /* stdint.h:34:18 */ -type uint_least32_t = uint32_t /* stdint.h:35:18 */ -type uint_least64_t = uint64_t /* stdint.h:36:18 */ - -type int_fast16_t = int32_t /* stdint.h:1:17 */ -type int_fast32_t = int32_t /* stdint.h:2:17 */ -type uint_fast16_t = uint32_t /* stdint.h:3:18 */ -type uint_fast32_t = uint32_t /* stdint.h:4:18 */ - -type _IO_FILE = struct { - flags uint32 - _ [4]byte - rpos uintptr - rend uintptr - close uintptr - wend uintptr - wpos uintptr - mustbezero_1 uintptr - wbase uintptr - read uintptr - write uintptr - seek uintptr - buf uintptr - buf_size size_t - prev uintptr - next uintptr - fd int32 - pipe_pid int32 - lockcount int64 - mode int32 - lock int32 - lbf int32 - _ [4]byte - cookie uintptr - off off_t - getln_buf uintptr - mustbezero_2 uintptr - shend uintptr - shlim off_t - shcnt off_t - prev_locked uintptr - next_locked uintptr - locale uintptr -} /* alltypes.h:307:9 */ - -type FILE = _IO_FILE /* alltypes.h:307:25 */ - -type va_list = uintptr /* alltypes.h:313:27 */ - -type _G_fpos64_t = struct { - _ [0]uint64 - __opaque [16]uint8 -} /* stdio.h:54:9 */ - -type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ - -type float_t = float64 /* alltypes.h:17:16 */ - -type double_t = float64 /* alltypes.h:22:16 */ - -func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ - bp := tls.Alloc(4) - defer tls.Free(4) - - // var __u struct {__f float32;} at bp, 4 - - *(*float32)(unsafe.Pointer(bp)) = __f - return *(*uint32)(unsafe.Pointer(bp)) -} - -func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - // var __u struct {__f float64;} at bp, 8 - - *(*float64)(unsafe.Pointer(bp)) = __f - return *(*uint64)(unsafe.Pointer(bp)) -} - -type __pthread = struct { - self uintptr - dtv uintptr - prev uintptr - next uintptr - sysinfo uintptr_t - canary uintptr_t - canary2 uintptr_t - tid int32 - errno_val int32 - detach_state int32 - cancel int32 - canceldisable uint8 - cancelasync uint8 - tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ - _ [5]byte - map_base uintptr - map_size size_t - stack uintptr - stack_size size_t - guard_size size_t - result uintptr - cancelbuf uintptr - tsd uintptr - robust_list struct { - head uintptr - off int64 - pending uintptr - } - timer_id int32 - _ [4]byte - locale locale_t - killlock [1]int32 - _ [4]byte - dlerror_buf uintptr - stdio_locks uintptr - canary_at_end uintptr_t - dtv_copy uintptr -} /* alltypes.h:260:9 */ - -func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ - var c int32 - var x int32 - var y int64 - var neg int32 = 0 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c == '+' || c == '-' { - neg = Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') >= 10 && pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - if uint32(c-'0') >= 10 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return -0x7fffffffffffffff - int64(1) - } - for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - x = 10*x + c - '0' - } - for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - y = int64(10)*y + int64(c) - int64('0') - } - for ; uint32(c-'0') < 10; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if neg != 0 { - return -y - } - return y -} - -func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var x [128]uint32_t at bp, 512 - - var i int32 - var j int32 - var k int32 - var a int32 - var z int32 - var lrp int64 = int64(0) - var dc int64 = int64(0) - var e10 int64 = int64(0) - var lnz int32 = 0 - var gotdig int32 = 0 - var gotrad int32 = 0 - var rp int32 - var e2 int32 - var emax int32 = -emin - bits + 3 - var denormal int32 = 0 - var y float64 - var frac float64 = float64(0) - var bias float64 = float64(0) - - j = 0 - k = 0 - - // Don't let leading zeros consume buffer space - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - if c == '.' { - gotrad = 1 - for c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }(); c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - lrp-- - } - } - - *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) - for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - gotrad = 1 - lrp = dc - } else if k < 128-3 { - dc++ - if c != '0' { - lnz = int32(dc) - } - if j != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0') - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') - } - if PreIncInt32(&j, 1) == 9 { - k++ - j = 0 - } - gotdig = 1 - } else { - dc++ - if c != '0' { - lnz = (128 - 4) * 9 - *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) - } - } - } - if !(gotrad != 0) { - lrp = dc - } - - if gotdig != 0 && c|32 == 'e' { - e10 = scanexp(tls, f, pok) - if e10 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e10 = int64(0) - } - lrp = lrp + e10 - } else if c >= 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - if !(gotdig != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - // Handle zero specially to avoid nasty special cases later - if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { - return float64(sign) * 0.0 - } - - // Optimize small integers (w/no exponent) and over/under-flow - if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if lrp > int64(-emin/2) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if lrp < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - // Align incomplete final B1B digit - if j != 0 { - for ; j < 9; j++ { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) - } - k++ - j = 0 - } - - a = 0 - z = k - e2 = 0 - rp = int32(lrp) - - // Optimize small to mid-size integers (even in exp. notation) - if lnz < 9 && lnz <= rp && rp < 18 { - if rp == 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) - } - if rp < 9 { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) - } - var bitlim int32 = bits - 3*(rp-9) - if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { - return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) - } - } - - // Drop trailing zeros - for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { - } - - // Align radix point to B1B digit boundary - if rp%9 != 0 { - var rpm9 int32 - if rp >= 0 { - rpm9 = rp % 9 - } else { - rpm9 = rp%9 + 9 - } - var p10 int32 = _sp10s[8-rpm9] - var carry uint32_t = uint32_t(0) - for k = a; k != z; k++ { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry - carry = uint32_t(1000000000/p10) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - rp = rp - 9 - } - } - if carry != 0 { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry - } - rp = rp + (9 - rpm9) - } - - // Upscale until desired number of bits are left of radix point - for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { - var carry uint32_t = uint32_t(0) - e2 = e2 - 29 - for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { - var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) - if tmp > uint64(1000000000) { - carry = uint32_t(tmp / uint64(1000000000)) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) - } else { - carry = uint32_t(0) - *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) - } - if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - z = k - } - if k == a { - break - } - } - if carry != 0 { - rp = rp + 9 - a = (a - 1) & (128 - 1) - if a == z { - z = (z - 1) & (128 - 1) - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) - } - *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry - } - } - - // Downscale until exactly number of bits are left of radix point - for { - var carry uint32_t = uint32_t(0) - var sh int32 = 1 - for i = 0; i < 2; i++ { - k = (a + i) & (128 - 1) - if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { - i = 2 - break - } - if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { - break - } - } - if i == 2 && rp == 9*2 { - break - } - // FIXME: find a way to compute optimal sh - if rp > 9+9*2 { - sh = 9 - } - e2 = e2 + sh - for k = a; k != z; k = (k + 1) & (128 - 1) { - var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<>sh + carry - carry = uint32_t(int32(1000000000)>>sh) * tmp - if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { - a = (a + 1) & (128 - 1) - i-- - rp = rp - 9 - } - } - if carry != 0 { - if (z+1)&(128-1) != a { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry - z = (z + 1) & (128 - 1) - } else { - *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) - } - } - } - - // Assemble desired bits into floating point variable - for y = float64(AssignInt32(&i, 0)); i < 2; i++ { - if (a+i)&(128-1) == z { - *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) - } - y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) - } - - y = y * float64(sign) - - // Limit precision for denormal results - if bits > 53+e2-emin { - bits = 53 + e2 - emin - if bits < 0 { - bits = 0 - } - denormal = 1 - } - - // Calculate bias term to force rounding, move out lower bits - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) - frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) - y = y - frac - y = y + bias - } - - // Process tail of decimal input so it can affect rounding - if (a+i)&(128-1) != z { - var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) - if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { - frac = frac + 0.25*float64(sign) - } else if t > uint32_t(500000000) { - frac = frac + 0.75*float64(sign) - } else if t == uint32_t(500000000) { - if (a+i+1)&(128-1) == z { - frac = frac + 0.5*float64(sign) - } else { - frac = frac + 0.75*float64(sign) - } - } - if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { - frac += 1 - } - } - - y = y + frac - y = y - bias - - if (e2+53)&0x7fffffff > emax-5 { - if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { - if denormal != 0 && bits == 53+e2-emin { - denormal = 0 - } - y = y * 0.5 - e2++ - } - if e2+53 > emax || denormal != 0 && frac != 0 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - } - - return Xscalbnl(tls, y, e2) -} - -var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ -var _sp10s = [8]int32{10, 100, 1000, 10000, - 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ - -func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ - var x uint32_t = uint32_t(0) - var y float64 = float64(0) - var scale float64 = float64(1) - var bias float64 = float64(0) - var gottail int32 = 0 - var gotrad int32 = 0 - var gotdig int32 = 0 - var rp int64 = int64(0) - var dc int64 = int64(0) - var e2 int64 = int64(0) - var d int32 - var c int32 - - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - - // Skip leading zeros - for ; c == '0'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - gotdig = 1 - } - - if c == '.' { - gotrad = 1 - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - // Count zeros after the radix point before significand - rp = int64(0) - __1: - if !(c == '0') { - goto __3 - } - gotdig = 1 - goto __2 - __2: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - rp-- - goto __1 - goto __3 - __3: - } - - for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() { - if c == '.' { - if gotrad != 0 { - break - } - rp = dc - gotrad = 1 - } else { - gotdig = 1 - if c > '9' { - d = c | 32 + 10 - 'a' - } else { - d = c - '0' - } - if dc < int64(8) { - x = x*uint32_t(16) + uint32_t(d) - } else if dc < int64(53/4+1) { - y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) - } else if d != 0 && !(gottail != 0) { - y = y + 0.5*scale - gottail = 1 - } - dc++ - } - } - if !(gotdig != 0) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if gotrad != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } else { - X__shlim(tls, f, int64(0)) - } - return float64(sign) * 0.0 - } - if !(gotrad != 0) { - rp = dc - } - for dc < int64(8) { - x = x * uint32_t(16) - dc++ - } - if c|32 == 'p' { - e2 = scanexp(tls, f, pok) - if e2 == -0x7fffffffffffffff-int64(1) { - if pok != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } else { - X__shlim(tls, f, int64(0)) - return float64(0) - } - e2 = int64(0) - } - } else { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - e2 = e2 + (int64(4)*rp - int64(32)) - - if !(x != 0) { - return float64(sign) * 0.0 - } - if e2 > int64(-emin) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 - } - if e2 < int64(emin-2*53) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 - } - - for x < 0x80000000 { - if y >= 0.5 { - x = x + (x + uint32_t(1)) - y = y + (y - float64(1)) - } else { - x = x + x - y = y + y - } - e2-- - } - - if int64(bits) > int64(32)+e2-int64(emin) { - bits = int32(int64(32) + e2 - int64(emin)) - if bits < 0 { - bits = 0 - } - } - - if bits < 53 { - bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) - } - - if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { - x++ - y = float64(0) - } - - y = bias + float64(sign)*float64(x) + float64(sign)*y - y = y - bias - - if !(y != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - } - - return Xscalbnl(tls, y, int32(e2)) -} - -func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ - if __ccgo_strace { - trc("tls=%v f=%v prec=%v pok=%v, (%v:)", tls, f, prec, pok, origin(2)) - } - var sign int32 = 1 - var i size_t - var bits int32 - var emin int32 - var c int32 - - switch prec { - case 0: - bits = 24 - emin = -125 - bits - break - case 1: - bits = 53 - emin = -1021 - bits - break - case 2: - bits = 53 - emin = -1021 - bits - break - default: - return float64(0) - } - - for __isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0 { - } - - if c == '+' || c == '-' { - sign = sign - 2*Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - - for i = uint64(0); i < uint64(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { - if i < uint64(7) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { - if i != uint64(8) { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if pok != 0 { - for ; i > uint64(3); i-- { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - } - } - return float64(float32(sign) * X__builtin_inff(tls)) - } - if !(i != 0) { - for i = uint64(0); i < uint64(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { - if i < uint64(2) { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - } - } - } - if i == uint64(3) { - if func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() != '(' { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - return float64(X__builtin_nanf(tls, ts+13)) - } - for i = uint64(1); ; i++ { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { - continue - } - if c == ')' { - return float64(X__builtin_nanf(tls, ts+13)) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - for PostDecUint64(&i, 1) != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - } - return float64(X__builtin_nanf(tls, ts+13)) - } - return float64(X__builtin_nanf(tls, ts+13)) - } - - if i != 0 { - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - X__shlim(tls, f, int64(0)) - return float64(0) - } - - if c == '0' { - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if c|32 == 'x' { - return hexfloat(tls, f, bits, emin, sign, pok) - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - c = '0' - } - - return decfloat(tls, f, c, bits, emin, sign, pok) -} - -// Lookup table for digit values. -1==255>=36 -> invalid -var table1 = [257]uint8{Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), - uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), - Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), -} /* intscan.c:7:28 */ - -func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ - if __ccgo_strace { - trc("tls=%v f=%v base=%v pok=%v lim=%v, (%v:)", tls, f, base, pok, lim, origin(2)) - } - var val uintptr - var c int32 - var neg int32 - var x uint32 - var y uint64 - var bs int32 - val = uintptr(unsafe.Pointer(&table1)) + uintptr(1) - neg = 0 - if !(base > uint32(36) || base == uint32(1)) { - goto __1 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__1: - ; -__2: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __3 - } - goto __2 -__3: - ; - if !(c == '+' || c == '-') { - goto __4 - } - neg = -Bool32(c == '-') - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__4: - ; - if !((base == uint32(0) || base == uint32(16)) && c == '0') { - goto __5 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(c|32 == 'x') { - goto __7 - } - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { - goto __9 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(pok != 0) { - goto __10 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - goto __11 -__10: - X__shlim(tls, f, int64(0)) -__11: - ; - return uint64(0) -__9: - ; - base = uint32(16) - goto __8 -__7: - if !(base == uint32(0)) { - goto __12 - } - base = uint32(8) -__12: - ; -__8: - ; - goto __6 -__5: - if !(base == uint32(0)) { - goto __13 - } - base = uint32(10) -__13: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { - goto __14 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - X__shlim(tls, f, int64(0)) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 - return uint64(0) -__14: - ; -__6: - ; - if !(base == uint32(10)) { - goto __15 - } - x = uint32(0) -__17: - if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { - goto __19 - } - x = x*uint32(10) + uint32(c-'0') - goto __18 -__18: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __17 - goto __19 -__19: - ; - y = uint64(x) -__20: - if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { - goto __22 - } - y = y*uint64(10) + uint64(c-'0') - goto __21 -__21: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() - goto __20 - goto __22 -__22: - ; - if !(uint32(c-'0') >= 10) { - goto __23 - } - goto done -__23: - ; - goto __16 -__15: - if !!(base&(base-uint32(1)) != 0) { - goto __24 - } - bs = int32(*(*uint8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) - x = uint32(0) -__26: - if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { - goto __28 - } - x = x<>bs) { - goto __31 - } - y = y<= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(y >= lim) { - goto __43 - } - if !(!(lim&uint64(1) != 0) && !(neg != 0)) { - goto __44 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim - uint64(1) - goto __45 -__44: - if !(y > lim) { - goto __46 - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 - return lim -__46: - ; -__45: - ; -__43: - ; - return y ^ uint64(neg) - uint64(neg) -} - -// The shcnt field stores the number of bytes read so far, offset by -// the value of buf-rpos at the last function call (__shlim or __shgetc), -// so that between calls the inline shcnt macro can add rpos-buf to get -// the actual count. - -func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ - if __ccgo_strace { - trc("tls=%v f=%v lim=%v, (%v:)", tls, f, lim, origin(2)) - } - (*FILE)(unsafe.Pointer(f)).shlim = lim - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf) - int64((*FILE)(unsafe.Pointer(f)).rpos)) / 1 - // If lim is nonzero, rend must be a valid pointer. - if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > lim { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } -} - -func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var c int32 - var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos - (*FILE)(unsafe.Pointer(f)).shlim = int64(-1) - return -1 - } - cnt++ - if (*FILE)(unsafe.Pointer(f)).shlim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > (*FILE)(unsafe.Pointer(f)).shlim-cnt { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt) - } else { - (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend - } - (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt - if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf { - *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c) - } - return c -} - -type lconv = struct { - decimal_point uintptr - thousands_sep uintptr - grouping uintptr - int_curr_symbol uintptr - currency_symbol uintptr - mon_decimal_point uintptr - mon_thousands_sep uintptr - mon_grouping uintptr - positive_sign uintptr - negative_sign uintptr - int_frac_digits uint8 - frac_digits uint8 - p_cs_precedes uint8 - p_sep_by_space uint8 - n_cs_precedes uint8 - n_sep_by_space uint8 - p_sign_posn uint8 - n_sign_posn uint8 - int_p_cs_precedes uint8 - int_p_sep_by_space uint8 - int_n_cs_precedes uint8 - int_n_sep_by_space uint8 - int_p_sign_posn uint8 - int_n_sign_posn uint8 - _ [2]byte -} /* locale.h:24:1 */ - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: uint8(255), frac_digits: uint8(255), p_cs_precedes: uint8(255), p_sep_by_space: uint8(255), n_cs_precedes: uint8(255), n_sep_by_space: uint8(255), p_sign_posn: uint8(255), n_sign_posn: uint8(255), int_p_cs_precedes: uint8(255), int_p_sep_by_space: uint8(255), int_n_cs_precedes: uint8(255), int_n_sep_by_space: uint8(255), int_p_sign_posn: uint8(255), int_n_sign_posn: uint8(255)} /* localeconv.c:4:27 */ - -func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&posix_lconv)) -} - -func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - if !(e != 0) { - if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0x7ff { - if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) { - *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff)) - if !(e != 0) { - if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 { - return 3 - } - return 2 - } - if e == 0xff { - if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 { - return 0 - } - return 1 - } - return 4 -} - -func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return X__fpclassify(tls, x) -} - -func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xcopysign(tls, x, y) -} - -func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - return Xfabs(tls, x) -} - -func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v y=%v, (%v:)", tls, x, y, origin(2)) - } - return Xfmod(tls, x, y) -} - -func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - return X__builtin_nanf(tls, ts+13) -} - -var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ - -func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ - if __ccgo_strace { - trc("tls=%v x=%v, (%v:)", tls, x, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) { - *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x - return r - }() - var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) - var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) - var y double_t - - if e >= 0x3ff+52 { - return x - } - if s != 0 { - y = x - toint + toint - } else { - y = x + toint - toint - } - if y == float64(0) { - if s != 0 { - return -Float64FromFloat64(0.0) - } - return float64(0) - } - return y -} - -func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - // var u struct {f float64;} at bp, 8 - - var y double_t = x - - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - y = y * 0x1p1023 - n = n - 1023 - if n > 1023 { - n = 1023 - } - } - } else if n < -1022 { - // make sure final n < -53 to avoid double - // rounding in the subnormal range - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - y = y * (float64(0x1p-1022) * 0x1p53) - n = n + (1022 - 53) - if n < -1022 { - n = -1022 - } - } - } - *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 - x = y * *(*float64)(unsafe.Pointer(bp)) - return x -} - -func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ - if __ccgo_strace { - trc("tls=%v x=%v n=%v, (%v:)", tls, x, n, origin(2)) - } - return Xscalbn(tls, x, n) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -type __locale_map = struct { - __map uintptr - map_size size_t - name [24]uint8 - next uintptr -} /* alltypes.h:330:9 */ - -type tls_module = struct { - next uintptr - image uintptr - len size_t - size size_t - align size_t - offset size_t -} /* libc.h:14:1 */ - -type __libc = struct { - can_do_threads uint8 - threaded uint8 - secure uint8 - need_locks int8 - threads_minus_1 int32 - auxv uintptr - tls_head uintptr - tls_size size_t - tls_align size_t - tls_cnt size_t - page_size size_t - global_locale struct{ cat [6]uintptr } -} /* libc.h:20:1 */ - -type time_t = int64 /* alltypes.h:72:16 */ - -type clockid_t = int32 /* alltypes.h:201:13 */ - -type timespec = struct { - tv_sec time_t - tv_nsec int64 -} /* alltypes.h:216:1 */ - -type pthread_t = uintptr /* alltypes.h:260:26 */ - -type pthread_once_t = int32 /* alltypes.h:266:13 */ - -type pthread_key_t = uint32 /* alltypes.h:271:18 */ - -type pthread_spinlock_t = int32 /* alltypes.h:276:13 */ - -type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:281:37 */ - -type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:286:37 */ - -type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:291:37 */ - -type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:296:40 */ - -type __sigset_t = struct{ __bits [16]uint64 } /* alltypes.h:336:9 */ - -type sigset_t = __sigset_t /* alltypes.h:336:71 */ - -type pthread_attr_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:359:147 */ - -type pthread_mutex_t = struct { - __u struct { - _ [0]uint64 - __i [10]int32 - } -} /* alltypes.h:364:157 */ - -type pthread_cond_t = struct { - __u struct { - _ [0]uint64 - __i [12]int32 - } -} /* alltypes.h:374:112 */ - -type pthread_rwlock_t = struct { - __u struct { - _ [0]uint64 - __i [14]int32 - } -} /* alltypes.h:384:139 */ - -type pthread_barrier_t = struct { - __u struct { - _ [0]uint64 - __i [8]int32 - } -} /* alltypes.h:389:137 */ - -type sched_param = struct { - sched_priority int32 - __reserved1 int32 - __reserved2 [2]struct { - __reserved1 time_t - __reserved2 int64 - } - __reserved3 int32 - _ [4]byte -} /* sched.h:19:1 */ - -type timer_t = uintptr /* alltypes.h:196:14 */ - -type clock_t = int64 /* alltypes.h:206:14 */ - -type tm = struct { - tm_sec int32 - tm_min int32 - tm_hour int32 - tm_mday int32 - tm_mon int32 - tm_year int32 - tm_wday int32 - tm_yday int32 - tm_isdst int32 - _ [4]byte - tm_gmtoff int64 - tm_zone uintptr -} /* time.h:38:1 */ - -type itimerspec = struct { - it_interval struct { - tv_sec time_t - tv_nsec int64 - } - it_value struct { - tv_sec time_t - tv_nsec int64 - } -} /* time.h:80:1 */ - -type sigevent = struct { - sigev_value struct { - _ [0]uint64 - sival_int int32 - _ [4]byte - } - sigev_signo int32 - sigev_notify int32 - sigev_notify_function uintptr - sigev_notify_attributes uintptr - __pad [32]uint8 -} /* time.h:107:1 */ - -type __ptcb = struct { - __f uintptr - __x uintptr - __next uintptr -} /* alltypes.h:260:9 */ - -type sigaltstack = struct { - ss_sp uintptr - ss_flags int32 - _ [4]byte - ss_size size_t -} /* signal.h:44:9 */ - -type stack_t = sigaltstack /* signal.h:44:28 */ - -type greg_t = uint64 /* signal.h:11:23 */ -type gregset_t = [27]uint64 /* signal.h:11:31 */ - -type fpreg_t = struct{ d float64 } /* signal.h:21:3 */ - -type fpregset_t = struct { - fpc uint32 - _ [4]byte - fprs [16]fpreg_t -} /* signal.h:26:3 */ - -type mcontext_t = struct { - psw struct { - mask uint64 - addr uint64 - } - gregs [16]uint64 - aregs [16]uint32 - fpregs fpregset_t -} /* signal.h:34:3 */ - -type sigcontext = struct { - oldmask [1]uint64 - sregs uintptr -} /* signal.h:36:1 */ - -type __ucontext = struct { - uc_flags uint64 - uc_link uintptr - uc_stack stack_t - uc_mcontext mcontext_t - uc_sigmask sigset_t -} /* signal.h:67:9 */ - -type ucontext_t = __ucontext /* signal.h:73:3 */ - -type sigval = struct { - _ [0]uint64 - sival_int int32 - _ [4]byte -} /* time.h:107:1 */ - -type siginfo_t = struct { - si_signo int32 - si_errno int32 - si_code int32 - _ [4]byte - __si_fields struct { - _ [0]uint64 - __pad [112]uint8 - } -} /* signal.h:145:3 */ - -type sigaction = struct { - __sa_handler struct{ sa_handler uintptr } - sa_mask sigset_t - sa_flags int32 - _ [4]byte - sa_restorer uintptr -} /* signal.h:167:1 */ - -type sig_t = uintptr /* signal.h:251:14 */ - -type sig_atomic_t = int32 /* signal.h:269:13 */ - -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:2:19: */ - panic(`arch/s390x/atomic_arch.h:4:2: assembler statements not supported`) - return t -} - -func a_barrier(tls *TLS) { /* atomic_arch.h:21:20: */ - panic(`arch/s390x/atomic_arch.h:23:2: assembler statements not supported`) -} - -func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:108:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:119:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, int32(uint32(old)+uint32(v))) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:130:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, old&v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:140:19: */ - var old int32 - for ok := true; ok; ok = a_cas(tls, p, old, old|v) != old { - old = *(*int32)(unsafe.Pointer(p)) - } - return old -} - -func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */ - a_fetch_and(tls, p, v) -} - -func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */ - a_fetch_or(tls, p, v) -} - -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - -func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */ - return int32(_sdebruijn328[x&-x*uint32_t(0x076be629)>>27]) -} - -var _sdebruijn328 = [32]uint8{ - uint8(0), uint8(1), uint8(23), uint8(2), uint8(29), uint8(24), uint8(19), uint8(3), uint8(30), uint8(27), uint8(25), uint8(11), uint8(20), uint8(8), uint8(4), uint8(13), - uint8(31), uint8(22), uint8(28), uint8(18), uint8(26), uint8(10), uint8(7), uint8(12), uint8(21), uint8(17), uint8(9), uint8(6), uint8(16), uint8(5), uint8(15), uint8(14), -} /* atomic.h:261:20 */ - -func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic.h:272:19: */ - if uint64(unsafe.Sizeof(int64(0))) < uint64(8) { - var y uint32_t = uint32_t(x) - if !(y != 0) { - y = uint32_t(x >> 32) - return 32 + a_ctz_32(tls, y) - } - return a_ctz_32(tls, y) - } - return int32(_sdebruijn648[uint64(x&-x)*0x022fdd63cc95386d>>58]) -} - -var _sdebruijn648 = [64]uint8{ - uint8(0), uint8(1), uint8(2), uint8(53), uint8(3), uint8(7), uint8(54), uint8(27), uint8(4), uint8(38), uint8(41), uint8(8), uint8(34), uint8(55), uint8(48), uint8(28), - uint8(62), uint8(5), uint8(39), uint8(46), uint8(44), uint8(42), uint8(22), uint8(9), uint8(24), uint8(35), uint8(59), uint8(56), uint8(49), uint8(18), uint8(29), uint8(11), - uint8(63), uint8(52), uint8(6), uint8(26), uint8(37), uint8(40), uint8(33), uint8(47), uint8(61), uint8(45), uint8(43), uint8(21), uint8(23), uint8(58), uint8(17), uint8(10), - uint8(51), uint8(25), uint8(36), uint8(32), uint8(60), uint8(20), uint8(57), uint8(16), uint8(50), uint8(31), uint8(19), uint8(15), uint8(30), uint8(14), uint8(13), uint8(12), -} /* atomic.h:274:20 */ - -type __timer = struct { - timerid int32 - _ [4]byte - thread pthread_t -} /* pthread_impl.h:64:1 */ - -func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */ - var self uintptr - panic(`arch/s390x/pthread_arch.h:4:2: assembler statements not supported`) - return self -} - -func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */ - if priv != 0 { - priv = 128 - } - if cnt < 0 { - cnt = 0x7fffffff - } - _ = Bool32(__syscall3(tls, int64(238), int64(addr), int64(1|priv), int64(cnt)) != int64(-38) || __syscall3(tls, int64(238), int64(addr), int64(1), int64(cnt)) != 0) -} - -func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */ - if priv != 0 { - priv = 128 - } - _ = Bool32(__syscall4(tls, int64(238), int64(addr), int64(0|priv), int64(val), int64(0)) != int64(-38) || __syscall4(tls, int64(238), int64(addr), int64(0), int64(val), int64(0)) != 0) -} - -var X__fsmu8 = [51]uint32_t{ - func() uint32 { - if 0x2 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2) - }(), func() uint32 { - if 0x3 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3) - }(), func() uint32 { - if 0x4 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4) - }(), func() uint32 { - if 0x5 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5) - }(), func() uint32 { - if 0x6 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6) - }(), func() uint32 { - if 0x7 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7) - }(), - func() uint32 { - if 0x8 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8) - }(), func() uint32 { - if 0x9 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9) - }(), func() uint32 { - if 0xa < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa) - }(), func() uint32 { - if 0xb < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb) - }(), func() uint32 { - if 0xc < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc) - }(), func() uint32 { - if 0xd < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd) - }(), func() uint32 { - if 0xe < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe) - }(), func() uint32 { - if 0xf < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf) - }(), - func() uint32 { - if 0x0+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x0+16) - }(), func() uint32 { - if 0x1+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x1+16) - }(), func() uint32 { - if 0x2+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x2+16) - }(), func() uint32 { - if 0x3+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x3+16) - }(), func() uint32 { - if 0x4+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x4+16) - }(), func() uint32 { - if 0x5+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x5+16) - }(), func() uint32 { - if 0x6+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x6+16) - }(), func() uint32 { - if 0x7+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x7+16) - }(), - func() uint32 { - if 0x8+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x8+16) - }(), func() uint32 { - if 0x9+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0x9+16) - }(), func() uint32 { - if 0xa+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xa+16) - }(), func() uint32 { - if 0xb+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xb+16) - }(), func() uint32 { - if 0xc+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xc+16) - }(), func() uint32 { - if 0xd+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xd+16) - }(), func() uint32 { - if 0xe+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xe+16) - }(), func() uint32 { - if 0xf+16 < 2 { - return Uint32FromInt32(-1) - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23 | uint32_t(0xf+16) - }(), - func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x0 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x0), func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x1 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x1), func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x2 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x2), func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x3 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x3), func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x4 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x4), func() uint32 { - if 0x5 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x5 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x5), func() uint32 { - if 0x6 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x6 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x6), func() uint32 { - if 0x7 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x7 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x7), - func() uint32 { - if 0x8 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x8 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x8), func() uint32 { - if 0x9 == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0x9 == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0x9), func() uint32 { - if 0xa == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xa == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xa), func() uint32 { - if 0xb == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xb == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xb), func() uint32 { - if 0xc == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xc == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xc), func() uint32 { - if 0xd == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xd == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xd), func() uint32 { - if 0xe == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xe == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xe), func() uint32 { - if 0xf == 0 { - return func() uint32 { - if Int32(0xa0) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0xa0)) - }() << 23 - } - return func() uint32 { - if 0xf == 0xd { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(0xf), - func() uint32 { - if 0x0 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x0 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x0 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x0), func() uint32 { - if 0x1 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x1 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x1 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x1), func() uint32 { - if 0x2 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x2 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x2 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x2), func() uint32 { - if 0x3 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x3 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x3 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x3), func() uint32 { - if 0x4 >= 5 { - return uint32(0) - } - return func() uint32 { - if 0x4 == 0 { - return func() uint32 { - if Int32(0x90) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x90)) - }() << 23 - } - return func() uint32 { - if 0x4 == 4 { - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0x90)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - } - return func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }() << 23 - }() - }() - }() | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>6 | uint32_t(func() uint32 { - if Int32(0x80) == Int32(0x80) { - return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0)) - } - return Uint32(Uint32(0) - Uint32FromInt32(0x80)) - }()<<23)>>12 | uint32_t(0x4), -} /* internal.c:18:16 */ - -type wint_t = uint32 /* alltypes.h:185:18 */ - -type wctype_t = uint64 /* alltypes.h:190:23 */ - -type __mbstate_t = struct { - __opaque1 uint32 - __opaque2 uint32 -} /* alltypes.h:324:9 */ - -type mbstate_t = __mbstate_t /* alltypes.h:324:63 */ - -func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */ - if __ccgo_strace { - trc("tls=%v wc=%v src=%v n=%v st=%v, (%v:)", tls, wc, src, n, st, origin(2)) - } - bp := tls.Alloc(4) - defer tls.Free(4) - - var c uint32 - var s uintptr - var N uint32 - // var dummy wchar_t at bp, 4 - s = src - N = uint32(n) - - if !!(st != 0) { - goto __1 - } - st = uintptr(unsafe.Pointer(&_sinternal_state)) -__1: - ; - c = *(*uint32)(unsafe.Pointer(st)) - - if !!(s != 0) { - goto __2 - } - if !(c != 0) { - goto __4 - } - goto ilseq -__4: - ; - return uint64(0) - goto __3 -__2: - if !!(wc != 0) { - goto __5 - } - wc = bp /* &dummy */ -__5: - ; -__3: - ; - - if !!(n != 0) { - goto __6 - } - return Uint64FromInt32(-2) -__6: - ; - if !!(c != 0) { - goto __7 - } - if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) { - goto __8 - } - return BoolUint64(!!(AssignPtrInt32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s)))) != 0)) -__8: - ; - if !(func() int32 { - if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { - return 4 - } - return 1 - }() == 1) { - goto __9 - } - *(*wchar_t)(unsafe.Pointer(wc)) = 0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s)))) - return 1 -__9: - ; - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) { - goto __10 - } - goto ilseq -__10: - ; - c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2] - n-- -__7: - ; - - if !(n != 0) { - goto __11 - } - if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) { - goto __12 - } - goto ilseq -__12: - ; -loop: - c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80) - n-- - if !!(c&(uint32(1)<<31) != 0) { - goto __13 - } - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(c) - return size_t(N) - n -__13: - ; - if !(n != 0) { - goto __14 - } - if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) { - goto __15 - } - goto ilseq -__15: - ; - goto loop -__14: - ; -__11: - ; - - *(*uint32)(unsafe.Pointer(st)) = c - return Uint64FromInt32(-2) -ilseq: - *(*uint32)(unsafe.Pointer(st)) = uint32(0) - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 - return Uint64FromInt32(-1) -} - -var _sinternal_state uint32 /* mbrtowc.c:8:18: */ - -func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */ - if __ccgo_strace { - trc("tls=%v st=%v, (%v:)", tls, st, origin(2)) - } - return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0)) -} - -type imaxdiv_t = struct { - quot intmax_t - rem intmax_t -} /* inttypes.h:14:40 */ - -type socklen_t = uint32 /* alltypes.h:348:18 */ - -type sa_family_t = uint16 /* alltypes.h:353:24 */ - -type msghdr = struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - __pad1 int32 - msg_iovlen int32 - msg_control uintptr - __pad2 int32 - msg_controllen socklen_t - msg_flags int32 - _ [4]byte -} /* socket.h:22:1 */ - -type cmsghdr = struct { - __pad1 int32 - cmsg_len socklen_t - cmsg_level int32 - cmsg_type int32 -} /* socket.h:44:1 */ - -type linger = struct { - l_onoff int32 - l_linger int32 -} /* socket.h:74:1 */ - -type sockaddr = struct { - sa_family sa_family_t - sa_data [14]uint8 -} /* socket.h:367:1 */ - -type sockaddr_storage = struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 -} /* socket.h:372:1 */ - -type in_port_t = uint16_t /* in.h:12:18 */ -type in_addr_t = uint32_t /* in.h:13:18 */ -type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */ - -type sockaddr_in = struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t -} /* in.h:16:1 */ - -type in6_addr = struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } -} /* in.h:23:1 */ - -type sockaddr_in6 = struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t -} /* in.h:34:1 */ - -type ipv6_mreq = struct { - ipv6mr_multiaddr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipv6mr_interface uint32 -} /* in.h:42:1 */ - -type ip_opts = struct { - ip_dst struct{ s_addr in_addr_t } - ip_opts [40]uint8 -} /* in.h:229:1 */ - -type ip_mreq = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } -} /* in.h:247:1 */ - -type ip_mreqn = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_address struct{ s_addr in_addr_t } - imr_ifindex int32 -} /* in.h:252:1 */ - -type ip_mreq_source = struct { - imr_multiaddr struct{ s_addr in_addr_t } - imr_interface struct{ s_addr in_addr_t } - imr_sourceaddr struct{ s_addr in_addr_t } -} /* in.h:258:1 */ - -type ip_msfilter = struct { - imsf_multiaddr struct{ s_addr in_addr_t } - imsf_interface struct{ s_addr in_addr_t } - imsf_fmode uint32_t - imsf_numsrc uint32_t - imsf_slist [1]struct{ s_addr in_addr_t } -} /* in.h:264:1 */ - -type group_req = struct { - gr_interface uint32_t - _ [4]byte - gr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:275:1 */ - -type group_source_req = struct { - gsr_interface uint32_t - _ [4]byte - gsr_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gsr_source struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:280:1 */ - -type group_filter = struct { - gf_interface uint32_t - _ [4]byte - gf_group struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } - gf_fmode uint32_t - gf_numsrc uint32_t - gf_slist [1]struct { - ss_family sa_family_t - __ss_padding [118]uint8 - __ss_align uint64 - } -} /* in.h:286:1 */ - -type in_pktinfo = struct { - ipi_ifindex int32 - ipi_spec_dst struct{ s_addr in_addr_t } - ipi_addr struct{ s_addr in_addr_t } -} /* in.h:297:1 */ - -type in6_pktinfo = struct { - ipi6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - ipi6_ifindex uint32 -} /* in.h:303:1 */ - -type ip6_mtuinfo = struct { - ip6m_addr struct { - sin6_family sa_family_t - sin6_port in_port_t - sin6_flowinfo uint32_t - sin6_addr struct { - __in6_union struct { - _ [0]uint32 - __s6_addr [16]uint8_t - } - } - sin6_scope_id uint32_t - } - ip6m_mtu uint32_t -} /* in.h:308:1 */ - -type addrinfo = struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr -} /* netdb.h:16:1 */ - -// Legacy functions follow (marked OBsolete in SUS) - -type netent = struct { - n_name uintptr - n_aliases uintptr - n_addrtype int32 - n_net uint32_t -} /* netdb.h:62:1 */ - -type hostent = struct { - h_name uintptr - h_aliases uintptr - h_addrtype int32 - h_length int32 - h_addr_list uintptr -} /* netdb.h:69:1 */ - -type servent = struct { - s_name uintptr - s_aliases uintptr - s_port int32 - _ [4]byte - s_proto uintptr -} /* netdb.h:78:1 */ - -type protoent = struct { - p_name uintptr - p_aliases uintptr - p_proto int32 - _ [4]byte -} /* netdb.h:85:1 */ - -type aibuf = struct { - ai struct { - ai_flags int32 - ai_family int32 - ai_socktype int32 - ai_protocol int32 - ai_addrlen socklen_t - _ [4]byte - ai_addr uintptr - ai_canonname uintptr - ai_next uintptr - } - sa struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte - } - lock [1]int32 - slot int16 - ref int16 - _ [4]byte -} /* lookup.h:10:1 */ - -type sa = struct { - sin struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - _ [12]byte -} /* lookup.h:10:1 */ - -type address = struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 -} /* lookup.h:20:1 */ - -type service = struct { - port uint16_t - proto uint8 - socktype uint8 -} /* lookup.h:27:1 */ - -type resolvconf = struct { - ns [3]struct { - family int32 - scopeid uint32 - addr [16]uint8_t - sortkey int32 - } - nns uint32 - attempts uint32 - ndots uint32 - timeout uint32 -} /* lookup.h:34:1 */ - -func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ - if __ccgo_strace { - trc("tls=%v p=%v, (%v:)", tls, p, origin(2)) - } - var cnt size_t - cnt = uint64(1) -__1: - if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) { - goto __3 - } - goto __2 -__2: - cnt++ - p = (*addrinfo)(unsafe.Pointer(p)).ai_next - goto __1 - goto __3 -__3: - ; - var b uintptr = p - uintptr(uint64(uintptr(0))) - b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).slot) - //TODO LOCK(b->lock); - if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) { - Xfree(tls, b) - } - //TODO else UNLOCK(b->lock); -} - -func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ - if __ccgo_strace { - trc("tls=%v host=%v serv=%v hint=%v res=%v, (%v:)", tls, host, serv, hint, res, origin(2)) - } - bp := tls.Alloc(1608) - defer tls.Free(1608) - - // var ports [2]service at bp, 8 - - // var addrs [48]address at bp+8, 1344 - - // var canon [256]uint8 at bp+1352, 256 - - var outcanon uintptr - var nservs int32 - var naddrs int32 - var nais int32 - var canon_len int32 - var i int32 - var j int32 - var k int32 - var family int32 = 0 - var flags int32 = 0 - var proto int32 = 0 - var socktype int32 = 0 - var out uintptr - - if !(host != 0) && !(serv != 0) { - return -2 - } - - if hint != 0 { - family = (*addrinfo)(unsafe.Pointer(hint)).ai_family - flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags - proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol - socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype - - var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 - if flags&mask != flags { - return -1 - } - - switch family { - case 2: - fallthrough - case 10: - fallthrough - case 0: - break - fallthrough - default: - return -6 - } - } - - if flags&0x20 != 0 { - Xabort(tls) //TODO- - // /* Define the "an address is configured" condition for address - // * families via ability to create a socket for the family plus - // * routability of the loopback address for the family. */ - // static const struct sockaddr_in lo4 = { - // .sin_family = AF_INET, .sin_port = 65535, - // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN - // ? 0x7f000001 : 0x0100007f - // }; - // static const struct sockaddr_in6 lo6 = { - // .sin6_family = AF_INET6, .sin6_port = 65535, - // .sin6_addr = IN6ADDR_LOOPBACK_INIT - // }; - // int tf[2] = { AF_INET, AF_INET6 }; - // const void *ta[2] = { &lo4, &lo6 }; - // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; - // for (i=0; i<2; i++) { - // if (family==tf[1-i]) continue; - // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, - // IPPROTO_UDP); - // if (s>=0) { - // int cs; - // pthread_setcancelstate( - // PTHREAD_CANCEL_DISABLE, &cs); - // int r = connect(s, ta[i], tl[i]); - // pthread_setcancelstate(cs, 0); - // close(s); - // if (!r) continue; - // } - // switch (errno) { - // case EADDRNOTAVAIL: - // case EAFNOSUPPORT: - // case EHOSTUNREACH: - // case ENETDOWN: - // case ENETUNREACH: - // break; - // default: - // return EAI_SYSTEM; - // } - // if (family == tf[i]) return EAI_NONAME; - // family = tf[1-i]; - // } - } - - nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) - if nservs < 0 { - return nservs - } - - naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) - if naddrs < 0 { - return naddrs - } - - nais = nservs * naddrs - canon_len = int32(Xstrlen(tls, bp+1352)) - out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1)) - if !(out != 0) { - return -10 - } - - if canon_len != 0 { - outcanon = out + uintptr(nais)*88 - Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1)) - } else { - outcanon = uintptr(0) - } - - for k = AssignInt32(&i, 0); i < naddrs; i++ { - j = 0 - __1: - if !(j < nservs) { - goto __3 - } - { - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).slot = int16(k) - //TODO out[k].ai = (struct addrinfo){ - //TODO .ai_family = addrs[i].family, - //TODO .ai_socktype = ports[j].socktype, - //TODO .ai_protocol = ports[j].proto, - //TODO .ai_addrlen = addrs[i].family == AF_INET - //TODO ? sizeof(struct sockaddr_in) - //TODO : sizeof(struct sockaddr_in6), - //TODO .ai_addr = (void *)&out[k].sa, - //TODO .ai_canonname = outcanon }; - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto) - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addrlen = func() uint32 { - if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 { - return uint32(unsafe.Sizeof(sockaddr_in{})) - } - return uint32(unsafe.Sizeof(sockaddr_in6{})) - }() - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addr = out + uintptr(k)*88 + 48 - (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_canonname = outcanon - if k != 0 { - (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).ai.ai_next = out + uintptr(k)*88 - } - switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family { - case 2: - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_family = sa_family_t(2) - (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) - break - case 10: - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_family = sa_family_t(10) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port) - (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid - Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) - break - } - - } - goto __2 - __2: - j++ - k++ - goto __1 - goto __3 - __3: - } - (*aibuf)(unsafe.Pointer(out)).ref = int16(nais) - *(*uintptr)(unsafe.Pointer(res)) = out - return 0 -} - -type ucred = struct { - pid pid_t - uid uid_t - gid gid_t -} /* socket.h:57:1 */ - -type mmsghdr = struct { - msg_hdr struct { - msg_name uintptr - msg_namelen socklen_t - _ [4]byte - msg_iov uintptr - __pad1 int32 - msg_iovlen int32 - msg_control uintptr - __pad2 int32 - msg_controllen socklen_t - msg_flags int32 - _ [4]byte - } - msg_len uint32 - _ [4]byte -} /* socket.h:63:1 */ - -func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v, (%v:)", tls, a, l, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh) - _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyaddr_r(tls, a, l, af, _sh, - _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh -} - -var _sh uintptr /* gethostbyaddr.c:9:24: */ - -func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */ - if __ccgo_strace { - trc("tls=%v a=%v l=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, a, l, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(28) - defer tls.Free(28) - - //TODO union { - //TODO struct sockaddr_in sin; - //TODO struct sockaddr_in6 sin6; - //TODO } sa = { .sin.sin_family = af }; - *(*struct { - sin sockaddr_in - _ [12]byte - })(unsafe.Pointer(bp)) = struct { - sin sockaddr_in - _ [12]byte - }{} //TODO- - (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO- - var sl socklen_t - if af == 10 { - sl = uint32(unsafe.Sizeof(sockaddr_in6{})) - } else { - sl = uint32(unsafe.Sizeof(sockaddr_in{})) - } - var i int32 - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - - // Load address argument into sockaddr structure - if af == 10 && l == socklen_t(16) { - Xmemcpy(tls, bp+8, a, uint64(16)) - } else if af == 2 && l == socklen_t(4) { - Xmemcpy(tls, bp+4, a, uint64(4)) - } else { - *(*int32)(unsafe.Pointer(err)) = 3 - return 22 - } - - // Align buffer and check for space for pointers and ip address - i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))) - if !(i != 0) { - i = int32(unsafe.Sizeof(uintptr(0))) - } - if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) { - return 34 - } - buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i)) - buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l)) - - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0)))) - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, uint64(l)) - buf += uintptr(l) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*8)) = uintptr(0) - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - - switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) { - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - case -12: - return 34 - default: - fallthrough - case -10: - fallthrough - case -11: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - case 0: - break - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = int32(l) - (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v, (%v:)", tls, name, origin(2)) - } - return Xgethostbyname2(tls, name, 2) -} - -func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v, (%v:)", tls, name, af, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var size size_t = uint64(63) - // var res uintptr at bp, 8 - - var err int32 - for ok := true; ok; ok = err == 34 { - Xfree(tls, _sh1) - _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) - if !(_sh1 != 0) { - *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 - return uintptr(0) - } - err = Xgethostbyname2_r(tls, name, af, _sh1, - _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) - } - if err != 0 { - return uintptr(0) - } - return _sh1 -} - -var _sh1 uintptr /* gethostbyname2.c:10:24: */ - -func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */ - if __ccgo_strace { - trc("tls=%v name=%v af=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, af, h, buf, buflen, res, err, origin(2)) - } - bp := tls.Alloc(1600) - defer tls.Free(1600) - - // var addrs [48]address at bp, 1344 - - // var canon [256]uint8 at bp+1344, 256 - - var i int32 - var cnt int32 - var align size_t - var need size_t - - *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) - cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) - if cnt < 0 { - switch cnt { - case -2: - *(*int32)(unsafe.Pointer(err)) = 1 - return 2 - fallthrough - case -3: - *(*int32)(unsafe.Pointer(err)) = 2 - return 11 - fallthrough - default: - fallthrough - case -4: - *(*int32)(unsafe.Pointer(err)) = 3 - return 74 - fallthrough - case -10: - fallthrough - case -11: - *(*int32)(unsafe.Pointer(err)) = 3 - return *(*int32)(unsafe.Pointer(X___errno_location(tls))) - } - } - - (*hostent)(unsafe.Pointer(h)).h_addrtype = af - (*hostent)(unsafe.Pointer(h)).h_length = func() int32 { - if af == 10 { - return 16 - } - return 4 - }() - - // Align buffer - align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)) - - need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0))) - need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).h_length)) - need = need + (Xstrlen(tls, name) + uint64(1)) - need = need + (Xstrlen(tls, bp+1344) + uint64(1)) - need = need + align - - if need > buflen { - return 34 - } - - buf += uintptr(align) - (*hostent)(unsafe.Pointer(h)).h_aliases = buf - buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0)))) - (*hostent)(unsafe.Pointer(h)).h_addr_list = buf - buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0)))) - - for i = 0; i < cnt; i++ { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = buf - buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length) - Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*hostent)(unsafe.Pointer(h)).h_length)) - } - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = uintptr(0) - - (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf) - Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344) - buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + uint64(1)) - - if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = buf - Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)), name) - buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8))) + uint64(1)) - } else { - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0) - } - - *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*8)) = uintptr(0) - - *(*uintptr)(unsafe.Pointer(res)) = h - return 0 -} - -func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */ - if __ccgo_strace { - trc("tls=%v name=%v h=%v buf=%v buflen=%v res=%v err=%v, (%v:)", tls, name, h, buf, buflen, res, err, origin(2)) - } - return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err) -} - -type if_nameindex = struct { - if_index uint32 - _ [4]byte - if_name uintptr -} /* if.h:12:1 */ - -type ifaddr = struct { - ifa_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - ifa_ifu struct { - ifu_broadaddr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - } - ifa_ifp uintptr - ifa_next uintptr -} /* if.h:51:1 */ - -type ifmap = struct { - mem_start uint64 - mem_end uint64 - base_addr uint16 - irq uint8 - dma uint8 - port uint8 - _ [3]byte -} /* if.h:64:1 */ - -type ifreq = struct { - ifr_ifrn struct{ ifrn_name [16]uint8 } - ifr_ifru struct { - _ [0]uint64 - ifru_addr struct { - sa_family sa_family_t - sa_data [14]uint8 - } - _ [8]byte - } -} /* if.h:76:1 */ - -type ifconf = struct { - ifc_len int32 - _ [4]byte - ifc_ifcu struct{ ifcu_buf uintptr } -} /* if.h:116:1 */ - -type ns_sect = uint32 /* nameser.h:37:3 */ - -type __ns_msg = struct { - _msg uintptr - _eom uintptr - _id uint16_t - _flags uint16_t - _counts [4]uint16_t - _ [4]byte - _sections [4]uintptr - _sect ns_sect - _rrnum int32 - _msg_ptr uintptr -} /* nameser.h:39:9 */ - -type ns_msg = __ns_msg /* nameser.h:46:3 */ - -type _ns_flagdata = struct { - mask int32 - shift int32 -} /* nameser.h:48:1 */ - -type __ns_rr = struct { - name [1025]uint8 - _ [1]byte - __type uint16_t - rr_class uint16_t - _ [2]byte - ttl uint32_t - rdlength uint16_t - _ [2]byte - rdata uintptr -} /* nameser.h:59:9 */ - -type ns_rr = __ns_rr /* nameser.h:66:3 */ - -type ns_flag = uint32 /* nameser.h:87:3 */ - -type ns_opcode = uint32 /* nameser.h:96:3 */ - -type ns_rcode = uint32 /* nameser.h:115:3 */ - -type ns_update_operation = uint32 /* nameser.h:121:3 */ - -type ns_tsig_key1 = struct { - name [1025]uint8 - alg [1025]uint8 - _ [6]byte - data uintptr - len int32 - _ [4]byte -} /* nameser.h:123:1 */ - -type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ - -type ns_tcp_tsig_state1 = struct { - counter int32 - _ [4]byte - key uintptr - ctx uintptr - sig [512]uint8 - siglen int32 - _ [4]byte -} /* nameser.h:130:1 */ - -type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ - -type ns_type = uint32 /* nameser.h:200:3 */ - -type ns_class = uint32 /* nameser.h:219:3 */ - -type ns_key_types = uint32 /* nameser.h:226:3 */ - -type ns_cert_types = uint32 /* nameser.h:234:3 */ - -type HEADER = struct { - _ [0]uint32 - id uint32 /* unsigned id: 16, unsigned qr: 1, unsigned opcode: 4, unsigned aa: 1, unsigned tc: 1, unsigned rd: 1, unsigned ra: 1, unsigned unused: 1, unsigned ad: 1, unsigned cd: 1, unsigned rcode: 4 */ - qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ - nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ -} /* nameser.h:353:3 */ - -// unused; purely for broken apps -type __res_state = struct { - retrans int32 - retry int32 - options uint64 - nscount int32 - nsaddr_list [3]struct { - sin_family sa_family_t - sin_port in_port_t - sin_addr struct{ s_addr in_addr_t } - sin_zero [8]uint8_t - } - id uint16 - _ [2]byte - dnsrch [7]uintptr - defdname [256]uint8 - pfcode uint64 - ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ - _ [4]byte - sort_list [10]struct { - addr struct{ s_addr in_addr_t } - mask uint32_t - } - qhook uintptr - rhook uintptr - res_h_errno int32 - _vcsock int32 - _flags uint32 - _ [4]byte - _u struct { - _ [0]uint64 - pad [52]uint8 - _ [4]byte - } -} /* resolv.h:26:9 */ - -// unused; purely for broken apps -type res_state = uintptr /* resolv.h:62:3 */ - -type res_sym = struct { - number int32 - _ [4]byte - name uintptr - humanname uintptr -} /* resolv.h:70:1 */ - -func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ - p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0)))) - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0) - for ok := true; ok; ok = x != 0 { - *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10)) - x = x / uint32(10) - } - return p -} - -func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ - bp := tls.Alloc(32) - defer tls.Free(32) - - Xsprintf(tls, s, ts+25, - VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip))))) -} - -func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ - var i int32 - for i = 15; i >= 0; i-- { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] - *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.') - } - Xstrcpy(tls, s, ts+50) -} - -var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ - -func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ - bp := tls.Alloc(556) - defer tls.Free(556) - - // var line [512]uint8 at bp+16, 512 - - var p uintptr - var z uintptr - var _buf [1032]uint8 - _ = _buf - // var atmp [16]uint8 at bp, 16 - - // var iplit address at bp+528, 28 - - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - return - } - if family == 2 { - Xmemcpy(tls, bp+uintptr(12), a, uint64(4)) - Xmemcpy(tls, bp, ts+90, uint64(12)) - a = bp /* &atmp[0] */ - } - for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 { - if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - - for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { - continue - } - - if (*address)(unsafe.Pointer(bp+528)).family == 2 { - Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4)) - Xmemcpy(tls, bp+528+8, ts+90, uint64(12)) - (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0) - } - - if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid { - continue - } - - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if (int64(z)-int64(p))/1 < int64(256) { - Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1))) - break - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) -} - -func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ - Xabort(tls) //TODO- - // unsigned long svport; - // char line[128], *p, *z; - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) return; - // while (fgets(line, sizeof line, f)) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // for (p=line; *p && !isspace(*p); p++); - // if (!*p) continue; - // *p++ = 0; - // svport = strtoul(p, &z, 10); - - // if (svport != port || z==p) continue; - // if (dgram && strncmp(z, "/udp", 4)) continue; - // if (!dgram && strncmp(z, "/tcp", 4)) continue; - // if (p-line > 32) continue; - - // memcpy(buf, line, p-line); - // break; - // } - // __fclose_ca(f); -} - -func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */ - if __ccgo_strace { - trc("tls=%v sa1=%v sl=%v node=%v nodelen=%v serv=%v servlen=%v flags=%v, (%v:)", tls, sa1, sl, node, nodelen, serv, servlen, flags, origin(2)) - } - bp := tls.Alloc(347) - defer tls.Free(347) - - // var ptr [78]uint8 at bp, 78 - - // var buf [256]uint8 at bp+78, 256 - - // var num [13]uint8 at bp+334, 13 - - var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family) - var a uintptr - var scopeid uint32 - - switch af { - case 2: - a = sa1 + 4 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) { - return -6 - } - mkptr4(tls, bp, a) - scopeid = uint32(0) - break - case 10: - a = sa1 + 8 - if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) { - return -6 - } - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - mkptr6(tls, bp, a) - } else { - mkptr4(tls, bp, a+uintptr(12)) - } - scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id - break - default: - return -6 - } - - if node != 0 && nodelen != 0 { - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x01 != 0) { - reverse_hosts(tls, bp+78, a, scopeid, af) - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) { - Xabort(tls) //TODO- - // unsigned char query[18+PTR_MAX], reply[512]; - // int qlen = __res_mkquery(0, ptr, 1, RR_PTR, - // 0, 0, 0, query, sizeof query); - // query[3] = 0; /* don't need AD flag */ - // int rlen = __res_send(query, qlen, reply, sizeof reply); - // buf[0] = 0; - // if (rlen > 0) - // __dns_parse(reply, rlen, dns_parse_callback, buf); - } - if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) { - if flags&0x08 != 0 { - return -2 - } - Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{}))) - if scopeid != 0 { - Xabort(tls) //TODO- - // char *p = 0, tmp[IF_NAMESIZE+1]; - // if (!(flags & NI_NUMERICSCOPE) && - // (IN6_IS_ADDR_LINKLOCAL(a) || - // IN6_IS_ADDR_MC_LINKLOCAL(a))) - // p = if_indextoname(scopeid, tmp+1); - // if (!p) - // p = itoa(num, scopeid); - // *--p = '%'; - // strcat(buf, p); - } - } - if Xstrlen(tls, bp+78) >= size_t(nodelen) { - return -12 - } - Xstrcpy(tls, node, bp+78) - } - - if serv != 0 && servlen != 0 { - var p uintptr = bp + 78 /* buf */ - var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port)) - *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0) - if !(flags&0x02 != 0) { - reverse_services(tls, bp+78, port, flags&0x10) - } - if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - p = itoa(tls, bp+334, uint32(port)) - } - if Xstrlen(tls, p) >= size_t(servlen) { - return -12 - } - Xstrcpy(tls, serv, p) - } - - return 0 -} - -var Xh_errno int32 /* h_errno.c:4:5: */ - -func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - return uintptr(unsafe.Pointer(&Xh_errno)) -} - -func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ - if __ccgo_strace { - trc("tls=%v s0=%v dest=%v, (%v:)", tls, s0, dest, origin(2)) - } - bp := tls.Alloc(40) - defer tls.Free(40) - - var s uintptr = s0 - var d uintptr = dest - *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)} - // var z uintptr at bp+32, 8 - - var i int32 - - for i = 0; i < 4; i++ { - *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0) - if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != '.' || !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) - }() != 0) { - return 0 - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) { - break - } - s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) - } - if i == 4 { - return 0 - } - switch i { - case 0: - *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff) - AssignShrPtrUint64(bp, int(24)) - fallthrough - case 1: - *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff) - AssignShrPtrUint64(bp+1*8, int(16)) - fallthrough - case 2: - *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff) - AssignShrPtrUint64(bp+2*8, int(8)) - } - for i = 0; i < 4; i++ { - if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) { - return 0 - } - *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8))) - } - return 1 -} - -func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ - if __ccgo_strace { - trc("tls=%v af=%v a0=%v s=%v l=%v, (%v:)", tls, af, a0, s, l, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var a uintptr = a0 - var i int32 - var j int32 - var max int32 - var best int32 - // var buf [100]uint8 at bp+176, 100 - - switch af { - case 2: - if socklen_t(Xsnprintf(tls, s, uint64(l), ts+103, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l { - return s - } - break - case 10: - if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+115, - VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } else { - Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})), - ts+139, - VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))), - 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))), - int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) - } - // Replace longest /(^0|:)[:0]{2,}/ with "::" - i = AssignInt32(&best, 0) - max = 2 - for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { - if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { - continue - } - j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169)) - if j > max { - best = i - max = j - } - } - if max > 3 { - *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':')) - Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1)) - } - if Xstrlen(tls, bp+176) < size_t(l) { - Xstrcpy(tls, s, bp+176) - return s - } - break - default: - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return uintptr(0) - } - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 - return uintptr(0) -} - -func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ - if c-uint32('0') < uint32(10) { - return int32(c - uint32('0')) - } - c = c | uint32(32) - if c-uint32('a') < uint32(6) { - return int32(c - uint32('a') + uint32(10)) - } - return -1 -} - -func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ - if __ccgo_strace { - trc("tls=%v af=%v s=%v a0=%v, (%v:)", tls, af, s, a0, origin(2)) - } - bp := tls.Alloc(16) - defer tls.Free(16) - - // var ip [8]uint16_t at bp, 16 - - var a uintptr = a0 - var i int32 - var j int32 - var v int32 - var d int32 - var brk int32 = -1 - var need_v4 int32 = 0 - - if af == 2 { - for i = 0; i < 4; i++ { - for v = AssignInt32(&j, 0); j < 3 && func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) - }() != 0; j++ { - v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0' - } - if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 { - return 0 - } - *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { - return 1 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' { - return 0 - } - s += uintptr(j + 1) - } - return 0 - } else if af != 10 { - *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 - return -1 - } - - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { - return 0 - } - - for i = 0; ; i++ { - if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 { - brk = i - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { - break - } - if i == 7 { - return 0 - } - continue - } - for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { - v = 16*v + d - } - if j == 0 { - return 0 - } - *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) - if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { - break - } - if i == 7 { - return 0 - } - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' { - if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { - return 0 - } - need_v4 = 1 - i++ - break - } - s += uintptr(j + 1) - } - if brk >= 0 { - Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk))) - for j = 0; j < 7-i; j++ { - *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) - } - } - for j = 0; j < 8; j++ { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) - *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) - } - if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { - return 0 - } - return 1 -} - -func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v family=%v, (%v:)", tls, buf, name, family, origin(2)) - } - bp := tls.Alloc(96) - defer tls.Free(96) - - // var a4 in_addr at bp, 4 - - // var a6 in6_addr at bp+68, 16 - - if X__inet_aton(tls, name, bp) > 0 { - if family == 10 { // wrong family - return -2 - } - Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 2 - (*address)(unsafe.Pointer(buf)).scopeid = uint32(0) - return 1 - } - // var tmp [64]uint8 at bp+4, 64 - - var p uintptr = Xstrchr(tls, name, '%') - // var z uintptr at bp+88, 8 - - var scopeid uint64 = uint64(0) - if p != 0 && (int64(p)-int64(name))/1 < int64(64) { - Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1)) - *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = uint8(0) - name = bp + 4 /* &tmp[0] */ - } - - if Xinet_pton(tls, 10, name, bp+68) <= 0 { - return 0 - } - if family == 2 { // wrong family - return -2 - } - - Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{}))) - (*address)(unsafe.Pointer(buf)).family = 10 - if p != 0 { - if func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) - }() != 0 { - scopeid = Xstrtoull(tls, p, bp+88, 10) - } else { - *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1) - } - if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { - Xabort(tls) //TODO- - // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && - // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) - // return EAI_NONAME; - // scopeid = if_nametoindex(p); - // if (!scopeid) return EAI_NONAME; - } - if scopeid > uint64(0xffffffff) { - return -2 - } - } - (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid) - return 1 -} - -func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ - var s uintptr - //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; - if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) { - return 0 - } - for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ { - } - return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) -} - -var Xzero_struct_address address /* lookup_name.c:27:16: */ - -func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ - var cnt int32 = 0 - if name != 0 { - return 0 - } - if flags&0x01 != 0 { - //TODO if (family != AF_INET6) - //TODO buf[cnt++] = (struct address){ .family = AF_INET }; - if family != 10 { - var x = Xzero_struct_address - x.family = 2 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - //TODO if (family != AF_INET) - //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; - if family != 2 { - var x = Xzero_struct_address - x.family = 10 - *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x - } - } else { - Xabort(tls) //TODO- - // if (family != AF_INET6) - // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; - // if (family != AF_INET) - // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; - } - return cnt -} - -func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ - return X__lookup_ipliteral(tls, buf, name, family) -} - -func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ - bp := tls.Alloc(512) - defer tls.Free(512) - - // var line [512]uint8 at bp, 512 - - var l size_t = Xstrlen(tls, name) - var cnt int32 = 0 - var badfam int32 = 0 - var _buf [1032]uint8 - _ = _buf - //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); - var _f FILE - _ = _f - var f uintptr = Xfopen(tls, ts+76, ts+87) - if !(f != 0) { - switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { - case 2: - fallthrough - case 20: - fallthrough - case 13: - return 0 - fallthrough - default: - return -11 - } - } - for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 { - var p uintptr - var z uintptr - - if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n') - *(*uint8)(unsafe.Pointer(p)) = uint8(0) - } - for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ { - } - if !(p != 0) { - continue - } - - // Isolate IP address to parse - for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ { - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0) - switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { - case 1: - cnt++ - break - case 0: - continue - default: - badfam = -2 - continue - } - - // Extract first name as canonical name - for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ { - } - for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ { - } - *(*uint8)(unsafe.Pointer(z)) = uint8(0) - if is_valid_hostname(tls, p) != 0 { - Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1))) - } - } - //TODO __fclose_ca(f); - Xfclose(tls, f) - if cnt != 0 { - return cnt - } - return badfam -} - -type dpc_ctx = struct { - addrs uintptr - canon uintptr - cnt int32 - _ [4]byte -} /* lookup_name.c:112:1 */ - -func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ - return -1 //TODO- - Xabort(tls) - return int32(0) //TODO- - // char search[256]; - // struct resolvconf conf; - // size_t l, dots; - // char *p, *z; - - // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; - - // /* Count dots, suppress search when >=ndots or name ends in - // * a dot, which is an explicit request for global scope. */ - // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; - // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; - - // /* Strip final dot for canon, fail if multiple trailing dots. */ - // if (name[l-1]=='.') l--; - // if (!l || name[l-1]=='.') return EAI_NONAME; - - // /* This can never happen; the caller already checked length. */ - // if (l >= 256) return EAI_NONAME; - - // /* Name with search domain appended is setup in canon[]. This both - // * provides the desired default canonical name (if the requested - // * name is not a CNAME record) and serves as a buffer for passing - // * the full requested name to name_from_dns. */ - // memcpy(canon, name, l); - // canon[l] = '.'; - - // for (p=search; *p; p=z) { - // for (; isspace(*p); p++); - // for (z=p; *z && !isspace(*z); z++); - // if (z==p) break; - // if (z-p < 256 - l - 1) { - // memcpy(canon+l+1, p, z-p); - // canon[z-p+1+l] = 0; - // int cnt = name_from_dns(buf, canon, canon, family, &conf); - // if (cnt) return cnt; - // } - // } - - // canon[l] = 0; - // return name_from_dns(buf, canon, name, family, &conf); -} - -type policy = struct { - addr [16]uint8 - len uint8 - mask uint8 - prec uint8 - label uint8 -} /* lookup_name.c:237:14 */ - -var defpolicy = [6]policy{ - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)}, - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)}, - // Last rule must match all addresses to stop loop. - {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)}, -} /* lookup_name.c:241:3 */ - -func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ - var i int32 - for i = 0; ; i++ { - if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].len)) != 0 { - continue - } - if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) != - int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) { - continue - } - return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 - } - return uintptr(0) -} - -func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ - return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label) -} - -func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { - return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { - return 2 - } - if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 { - return 2 - } - if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { - return 5 - } - return 14 -} - -func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ - // FIXME: The common prefix length should be limited to no greater - // than the nominal length of the prefix portion of the source - // address. However the definition of the source prefix length is - // not clear and thus this limiting is not yet implemented. - var i uint32 - for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ { - } - return int32(i) -} - -func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ - var a uintptr = _a - var b uintptr = _b - return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey -} - -func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v canon=%v name=%v family=%v flags=%v, (%v:)", tls, buf, canon, name, family, flags, origin(2)) - } - bp := tls.Alloc(92) - defer tls.Free(92) - - var cnt int32 = 0 - var i int32 - var j int32 - _ = j - - *(*uint8)(unsafe.Pointer(canon)) = uint8(0) - if name != 0 { - // reject empty name and check len so it fits into temp bufs - var l size_t = Xstrnlen(tls, name, uint64(255)) - if l-uint64(1) >= uint64(254) { - return -2 - } - Xmemcpy(tls, canon, name, l+uint64(1)) - } - - // Procedurally, a request for v6 addresses with the v4-mapped - // flag set is like a request for unspecified family, followed - // by filtering of the results. - if flags&0x08 != 0 { - if family == 10 { - family = 0 - } else { - flags = flags - 0x08 - } - } - - // Try each backend until there's at least one result. - cnt = name_from_null(tls, buf, name, family, flags) - if !(cnt != 0) { - cnt = name_from_numeric(tls, buf, name, family) - } - if !(cnt != 0) && !(flags&0x04 != 0) { - cnt = name_from_hosts(tls, buf, canon, name, family) - if !(cnt != 0) { - cnt = name_from_dns_search(tls, buf, canon, name, family) - } - } - if cnt <= 0 { - if cnt != 0 { - return cnt - } - return -2 - } - - // Filter/transform results for v4-mapped lookup, if requested. - if flags&0x08 != 0 { - Xabort(tls) //TODO- - // if (!(flags & AI_ALL)) { - // /* If any v6 results exist, remove v4 results. */ - // for (i=0; i= 0 { - if !(Xconnect(tls, fd, da, dalen) != 0) { - key = key | 0x40000000 - if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { - if family == 2 { - Xmemcpy(tls, - bp+28+8+uintptr(12), - bp+72+4, uint64(4)) - } - if dscope == scopeof(tls, bp+28+8) { - key = key | 0x20000000 - } - if dlabel == labelof(tls, bp+28+8) { - key = key | 0x10000000 - } - prefixlen = prefixmatch(tls, bp+28+8, - bp+8) - } - } - Xclose(tls, fd) - } - key = key | dprec<<20 - key = key | (15-dscope)<<16 - key = key | prefixlen<<8 - key = key | (48-i)<<0 - (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key - } - Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr) int32 - }{addrcmp}))) - - //TODO pthread_setcancelstate(cs, 0); - - return cnt -} - -func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ - if __ccgo_strace { - trc("tls=%v buf=%v name=%v proto=%v socktype=%v flags=%v, (%v:)", tls, buf, name, proto, socktype, flags, origin(2)) - } - bp := tls.Alloc(8) - defer tls.Free(8) - - var line [128]uint8 - _ = line - var cnt int32 = 0 - var p uintptr - _ = p - *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ - var port uint64 = uint64(0) - - switch socktype { - case 1: - switch proto { - case 0: - proto = 6 - fallthrough - case 6: - break - default: - return -8 - } - break - case 2: - switch proto { - case 0: - proto = 17 - fallthrough - case 17: - break - default: - return -8 - } - fallthrough - case 0: - break - default: - if name != 0 { - return -8 - } - (*service)(unsafe.Pointer(buf)).port = uint16_t(0) - (*service)(unsafe.Pointer(buf)).proto = uint8(proto) - (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype) - return 1 - } - - if name != 0 { - if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) { - return -8 - } - port = Xstrtoul(tls, name, bp, 10) - } - if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { - if port > uint64(65535) { - return -8 - } - if proto != 17 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6) - } - if proto != 6 { - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port) - (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2) - (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17) - } - return cnt - } - - if flags&0x400 != 0 { - return -2 - } - - var l size_t = Xstrlen(tls, name) - _ = l - - Xabort(tls) //TODO- - // unsigned char _buf[1032]; - // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); - // if (!f) switch (errno) { - // case ENOENT: - // case ENOTDIR: - // case EACCES: - // return EAI_SERVICE; - // default: - // return EAI_SYSTEM; - // } - - Xabort(tls) //TODO- - // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { - // if ((p=strchr(line, '#'))) *p++='\n', *p=0; - - // /* Find service name */ - // for(p=line; (p=strstr(p, name)); p++) { - // if (p>line && !isspace(p[-1])) continue; - // if (p[l] && !isspace(p[l])) continue; - // break; - // } - // if (!p) continue; - - // /* Skip past canonical name at beginning of line */ - // for (p=line; *p && !isspace(*p); p++); - - // port = strtoul(p, &z, 10); - // if (port > 65535 || z==p) continue; - // if (!strncmp(z, "/udp", 4)) { - // if (proto == IPPROTO_TCP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_DGRAM; - // buf[cnt++].proto = IPPROTO_UDP; - // } - // if (!strncmp(z, "/tcp", 4)) { - // if (proto == IPPROTO_UDP) continue; - // buf[cnt].port = port; - // buf[cnt].socktype = SOCK_STREAM; - // buf[cnt++].proto = IPPROTO_TCP; - // } - // } - // __fclose_ca(f); - // return cnt > 0 ? cnt : EAI_SERVICE; - Xabort(tls) - return int32(0) //TODO- -} - -func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */ - x = x ^ x>>11 - x = x ^ x<<7&0x9D2C5680 - x = x ^ x<<15&0xEFC60000 - x = x ^ x>>18 - return x -} - -func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */ - if __ccgo_strace { - trc("tls=%v seed=%v, (%v:)", tls, seed, origin(2)) - } - return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2)) -} - -func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - var owner int32 = (*FILE)(unsafe.Pointer(f)).lock - var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid - if owner&CplInt32(0x40000000) == tid { - return 0 - } - owner = a_cas(tls, f+140, 0, tid) - if !(owner != 0) { - return 1 - } - for AssignInt32(&owner, a_cas(tls, f+140, 0, tid|0x40000000)) != 0 { - if owner&0x40000000 != 0 || a_cas(tls, f+140, owner, owner|0x40000000) == owner { - __futexwait(tls, f+140, owner|0x40000000, 1) - } - } - return 1 -} - -func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - if a_swap(tls, f+140, 0)&0x40000000 != 0 { - __wake(tls, f+140, 1, 1) - } -} - -func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).mode - 1 - if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase { - (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint64(0)) - } - (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0))) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 { - *(*uint32)(unsafe.Pointer(f)) |= uint32(32) - return -1 - } - (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size)) - if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 { - return -1 - } - return 0 -} - -func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ - if __ccgo_strace { - trc("tls=%v, (%v:)", tls, origin(2)) - } - X__builtin_abort(tls) //TODO- - // __stdio_exit_needed(); -} - -// This function assumes it will never be called if there is already -// data buffered for reading. - -func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ - if __ccgo_strace { - trc("tls=%v f=%v, (%v:)", tls, f, origin(2)) - } - bp := tls.Alloc(1) - defer tls.Free(1) - - // var c uint8 at bp, 1 - - if !(X__toread(tls, f) != 0) && (*struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint64(1)) == uint64(1) { - return int32(*(*uint8)(unsafe.Pointer(bp))) - } - return -1 -} - -func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v va=%v, (%v:)", tls, s, fmt, va, origin(2)) - } - var ret int32 - var ap va_list - _ = ap - ap = va - ret = Xvsscanf(tls, s, fmt, ap) - _ = ap - return ret -} - -type wctrans_t = uintptr /* wctype.h:20:19 */ - -func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */ - if !(dest != 0) { - return - } - switch size { - case -2: - *(*uint8)(unsafe.Pointer(dest)) = uint8(i) - break - case -1: - *(*int16)(unsafe.Pointer(dest)) = int16(i) - break - case 0: - *(*int32)(unsafe.Pointer(dest)) = int32(i) - break - case 1: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - case 3: - *(*int64)(unsafe.Pointer(dest)) = int64(i) - break - } -} - -func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */ - var p uintptr - var i uint32 - var ap2 va_list - _ = ap2 - ap2 = ap - for i = n; i > uint32(1); i-- { - VaUintptr(&ap2) - } - p = VaUintptr(&ap2) - _ = ap2 - return p -} - -func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */ - if __ccgo_strace { - trc("tls=%v f=%v fmt=%v ap=%v, (%v:)", tls, f, fmt, ap, origin(2)) - } - bp := tls.Alloc(276) - defer tls.Free(276) - - var width int32 - var size int32 - var alloc int32 - var base int32 - var p uintptr - var c int32 - var t int32 - var s uintptr - var wcs uintptr - // var st mbstate_t at bp+268, 8 - - var dest uintptr - var invert int32 - var matches int32 - var x uint64 - var y float64 - var pos off_t - // var scanset [257]uint8 at bp, 257 - - var i size_t - var k size_t - // var wc wchar_t at bp+260, 4 - - var __need_unlock int32 - var tmp uintptr - var tmp1 uintptr - alloc = 0 - dest = uintptr(0) - matches = 0 - pos = int64(0) - __need_unlock = func() int32 { - if (*FILE)(unsafe.Pointer(f)).lock >= 0 { - return X__lockfile(tls, f) - } - return 0 - }() - - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __1 - } - X__toread(tls, f) -__1: - ; - if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) { - goto __2 - } - goto input_fail -__2: - ; - - p = fmt -__3: - if !(*(*uint8)(unsafe.Pointer(p)) != 0) { - goto __5 - } - - alloc = 0 - - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) { - goto __6 - } -__7: - if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) { - goto __8 - } - p++ - goto __7 -__8: - ; - X__shlim(tls, f, int64(0)) -__9: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __10 - } - goto __9 -__10: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__6: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') { - goto __11 - } - X__shlim(tls, f, int64(0)) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') { - goto __12 - } - p++ -__14: - if !(__isspace(tls, AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())) != 0) { - goto __15 - } - goto __14 -__15: - ; - goto __13 -__12: - c = func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() -__13: - ; - if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __16 - } - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !(c < 0) { - goto __17 - } - goto input_fail -__17: - ; - goto match_fail -__16: - ; - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - goto __4 -__11: - ; - - p++ - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') { - goto __18 - } - dest = uintptr(0) - p++ - goto __19 -__18: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') { - goto __20 - } - dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0')) - p += uintptr(2) - goto __21 -__20: - dest = VaUintptr(&ap) -__21: - ; -__19: - ; - - width = 0 -__22: - if !(func() int32 { - if 0 != 0 { - return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p)))) - } - return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10)) - }() != 0) { - goto __24 - } - width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0' - goto __23 -__23: - p++ - goto __22 - goto __24 -__24: - ; - - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') { - goto __25 - } - wcs = uintptr(0) - s = uintptr(0) - alloc = BoolInt32(!!(dest != 0)) - p++ - goto __26 -__25: - alloc = 0 -__26: - ; - - size = 0 - switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) { - case 'h': - goto __28 - case 'l': - goto __29 - case 'j': - goto __30 - case 'z': - goto __31 - case 't': - goto __32 - case 'L': - goto __33 - case 'd': - goto __34 - case 'i': - goto __35 - case 'o': - goto __36 - case 'u': - goto __37 - case 'x': - goto __38 - case 'a': - goto __39 - case 'e': - goto __40 - case 'f': - goto __41 - case 'g': - goto __42 - case 'A': - goto __43 - case 'E': - goto __44 - case 'F': - goto __45 - case 'G': - goto __46 - case 'X': - goto __47 - case 's': - goto __48 - case 'c': - goto __49 - case '[': - goto __50 - case 'S': - goto __51 - case 'C': - goto __52 - case 'p': - goto __53 - case 'n': - goto __54 - default: - goto __55 - } - goto __27 -__28: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') { - goto __56 - } - p++ - size = -2 - goto __57 -__56: - size = -1 -__57: - ; - goto __27 -__29: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') { - goto __58 - } - p++ - size = 3 - goto __59 -__58: - size = 1 -__59: - ; - goto __27 -__30: - size = 3 - goto __27 -__31: -__32: - size = 1 - goto __27 -__33: - size = 2 - goto __27 -__34: -__35: -__36: -__37: -__38: -__39: -__40: -__41: -__42: -__43: -__44: -__45: -__46: -__47: -__48: -__49: -__50: -__51: -__52: -__53: -__54: - p-- - goto __27 -__55: - goto fmt_fail -__27: - ; - - t = int32(*(*uint8)(unsafe.Pointer(p))) - - // C or S - if !(t&0x2f == 3) { - goto __60 - } - t = t | 32 - size = 1 -__60: - ; - - switch t { - case 'c': - goto __62 - case '[': - goto __63 - case 'n': - goto __64 - default: - goto __65 - } - goto __61 -__62: - if !(width < 1) { - goto __66 - } - width = 1 -__66: - ; -__63: - goto __61 -__64: - store_int(tls, dest, size, uint64(pos)) - // do not increment match count, etc! - goto __4 -__65: - X__shlim(tls, f, int64(0)) -__67: - if !(__isspace(tls, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }()) != 0) { - goto __68 - } - goto __67 -__68: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) -__61: - ; - - X__shlim(tls, f, int64(width)) - if !(func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }() < 0) { - goto __69 - } - goto input_fail -__69: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - - switch t { - case 's': - goto __71 - case 'c': - goto __72 - case '[': - goto __73 - case 'p': - goto __74 - case 'X': - goto __75 - case 'x': - goto __76 - case 'o': - goto __77 - case 'd': - goto __78 - case 'u': - goto __79 - case 'i': - goto __80 - case 'a': - goto __81 - case 'A': - goto __82 - case 'e': - goto __83 - case 'E': - goto __84 - case 'f': - goto __85 - case 'F': - goto __86 - case 'g': - goto __87 - case 'G': - goto __88 - } - goto __70 -__71: -__72: -__73: - if !(t == 'c' || t == 's') { - goto __89 - } - Xmemset(tls, bp, -1, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(t == 's') { - goto __91 - } - *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0) - *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0) -__91: - ; - goto __90 -__89: - if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') { - goto __92 - } - p++ - invert = 1 - goto __93 -__92: - invert = 0 -__93: - ; - Xmemset(tls, bp, invert, uint64(unsafe.Sizeof([257]uint8{}))) - *(*uint8)(unsafe.Pointer(bp)) = uint8(0) - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') { - goto __94 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert) - goto __95 -__94: - if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') { - goto __96 - } - p++ - *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert) -__96: - ; -__95: - ; -__97: - if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') { - goto __99 - } - if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) { - goto __100 - } - goto fmt_fail -__100: - ; - if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') { - goto __101 - } - c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1)))) -__102: - if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) { - goto __104 - } - *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert) - goto __103 -__103: - c++ - goto __102 - goto __104 -__104: - ; -__101: - ; - *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert) - goto __98 -__98: - p++ - goto __97 - goto __99 -__99: - ; -__90: - ; - wcs = uintptr(0) - s = uintptr(0) - i = uint64(0) - if t == 'c' { - k = uint64(uint32(width) + 1) - } else { - k = uint64(31) - } - if !(size == 1) { - goto __105 - } - if !(alloc != 0) { - goto __107 - } - wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(wcs != 0) { - goto __109 - } - goto alloc_fail -__109: - ; - goto __108 -__107: - wcs = dest -__108: - ; - *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{} -__110: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __111 - } - switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint64(1), bp+268 /* &st */) { - case Uint64FromInt32(-1): - goto __113 - case Uint64FromInt32(-2): - goto __114 - } - goto __112 -__113: - goto input_fail -__114: - goto __110 -__112: - ; - if !(wcs != 0) { - goto __115 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint64(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */)) -__115: - ; - if !(alloc != 0 && i == k) { - goto __116 - } - k = k + (k + uint64(1)) - tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0)))) - if !!(tmp != 0) { - goto __117 - } - goto alloc_fail -__117: - ; - wcs = tmp -__116: - ; - goto __110 -__111: - ; - if !!(Xmbsinit(tls, bp+268) != 0) { - goto __118 - } - goto input_fail -__118: - ; - goto __106 -__105: - if !(alloc != 0) { - goto __119 - } - s = Xmalloc(tls, k) - if !!(s != 0) { - goto __121 - } - goto alloc_fail -__121: - ; -__122: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __123 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - if !(i == k) { - goto __124 - } - k = k + (k + uint64(1)) - tmp1 = Xrealloc(tls, s, k) - if !!(tmp1 != 0) { - goto __125 - } - goto alloc_fail -__125: - ; - s = tmp1 -__124: - ; - goto __122 -__123: - ; - goto __120 -__119: - if !(AssignUintptr(&s, dest) != 0) { - goto __126 - } -__128: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __129 - } - *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c) - goto __128 -__129: - ; - goto __127 -__126: -__130: - if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 { - if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend { - return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1)))) - } - return X__shgetc(tls, f) - }())+1))) != 0) { - goto __131 - } - goto __130 -__131: - ; -__127: - ; -__120: - ; -__106: - ; - if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) { - (*FILE)(unsafe.Pointer(f)).rpos-- - } else { - } - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __132 - } - goto match_fail -__132: - ; - if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != off_t(width)) { - goto __133 - } - goto match_fail -__133: - ; - if !(alloc != 0) { - goto __134 - } - if !(size == 1) { - goto __135 - } - *(*uintptr)(unsafe.Pointer(dest)) = wcs - goto __136 -__135: - *(*uintptr)(unsafe.Pointer(dest)) = s -__136: - ; -__134: - ; - if !(t != 'c') { - goto __137 - } - if !(wcs != 0) { - goto __138 - } - *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0 -__138: - ; - if !(s != 0) { - goto __139 - } - *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0) -__139: - ; -__137: - ; - goto __70 -__74: -__75: -__76: - base = 16 - goto int_common -__77: - base = 8 - goto int_common -__78: -__79: - base = 10 - goto int_common -__80: - base = 0 -int_common: - x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1)) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __140 - } - goto match_fail -__140: - ; - if !(t == 'p' && dest != 0) { - goto __141 - } - *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x)) - goto __142 -__141: - store_int(tls, dest, size, x) -__142: - ; - goto __70 -__81: -__82: -__83: -__84: -__85: -__86: -__87: -__88: - y = X__floatscan(tls, f, size, 0) - if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) { - goto __143 - } - goto match_fail -__143: - ; - if !(dest != 0) { - goto __144 - } - switch size { - case 0: - goto __146 - case 1: - goto __147 - case 2: - goto __148 - } - goto __145 -__146: - *(*float32)(unsafe.Pointer(dest)) = float32(y) - goto __145 -__147: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__148: - *(*float64)(unsafe.Pointer(dest)) = y - goto __145 -__145: - ; -__144: - ; - goto __70 -__70: - ; - - pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1) - if !(dest != 0) { - goto __149 - } - matches++ -__149: - ; - goto __4 -__4: - p++ - goto __3 - goto __5 -__5: - ; - if !(0 != 0) { - goto __150 - } -fmt_fail: -alloc_fail: -input_fail: - if !!(matches != 0) { - goto __151 - } - matches-- -__151: - ; -match_fail: - if !(alloc != 0) { - goto __152 - } - Xfree(tls, s) - Xfree(tls, wcs) -__152: - ; -__150: - ; -__153: - if !(__need_unlock != 0) { - goto __156 - } - X__unlockfile(tls, f) -__156: - ; - goto __154 -__154: - if 0 != 0 { - goto __153 - } - goto __155 -__155: - ; - return matches -} - -func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */ - var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie - var k size_t = len + uint64(256) - var end uintptr = Xmemchr(tls, src, 0, k) - if end != 0 { - k = size_t((int64(end) - int64(src)) / 1) - } - if k < len { - len = k - } - Xmemcpy(tls, buf, src, len) - (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len) - (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k) - (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k) - return len -} - -func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */ - if __ccgo_strace { - trc("tls=%v s=%v fmt=%v ap=%v, (%v:)", tls, s, fmt, ap, origin(2)) - } - bp := tls.Alloc(232) - defer tls.Free(232) - - *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct { - f func(*TLS, uintptr, uintptr, size_t) size_t - }{string_read})), buf: s, lock: -1, cookie: s} - return Xvfscanf(tls, bp, fmt, ap) -} - -func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ - if __ccgo_strace { - trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2)) - } - var try uintptr - var sign int32 - for nel > uint64(0) { - try = base + uintptr(width*(nel/uint64(2))) - sign = (*struct { - f func(*TLS, uintptr, uintptr) int32 - })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) - if sign < 0 { - nel = nel / uint64(2) - } else if sign > 0 { - base = try + uintptr(width) - nel = nel - (nel/uint64(2) + uint64(1)) - } else { - return try - } - } - return uintptr(0) -} - -func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y float64 = X__floatscan(tls, bp, prec, 1) - var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1 - if p != 0 { - *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { - if cnt != 0 { - return s + uintptr(cnt) - } - return s - }() - } - return y -} - -func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return float32(strtox(tls, s, p, 0)) -} - -func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 1) -} - -func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v, (%v:)", tls, s, p, origin(2)) - } - return strtox(tls, s, p, 2) -} - -func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ - bp := tls.Alloc(232) - defer tls.Free(232) - - // var f FILE at bp, 232 - - (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s) - (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1) - X__shlim(tls, bp, int64(0)) - var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) - if p != 0 { - var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1) - *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) - } - return y -} - -func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) -} - -func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) -} - -func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))) -} - -func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1)))) -} - -func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return intmax_t(Xstrtoll(tls, s, p, base)) -} - -func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ - if __ccgo_strace { - trc("tls=%v s=%v p=%v base=%v, (%v:)", tls, s, p, base, origin(2)) - } - return uintmax_t(Xstrtoull(tls, s, p, base)) -} - -func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ - if __ccgo_strace { - trc("tls=%v s=%v, (%v:)", tls, s, origin(2)) - } - var l size_t = Xstrlen(tls, s) - var d uintptr = Xmalloc(tls, l+uint64(1)) - if !(d != 0) { - return uintptr(0) - } - return Xmemcpy(tls, d, s, l+uint64(1)) -} - -func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var l size_t = Xstrnlen(tls, d, n) - if l == n { - return l + Xstrlen(tls, s) - } - return l + Xstrlcpy(tls, d+uintptr(l), s, n-l) -} - -// Support signed or unsigned plain-char - -// Implementation choices... - -// Arbitrary numbers... - -// POSIX/SUS requirements follow. These numbers come directly -// from SUS and have nothing to do with the host system. - -func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var d0 uintptr - var wd uintptr - var ws uintptr - d0 = d - - if !!(int32(PostDecUint64(&n, 1)) != 0) { - goto __1 - } - goto finish -__1: - ; - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) { - goto __2 - } -__3: - if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __5 - } - goto __4 -__4: - n-- - s++ - d++ - goto __3 - goto __5 -__5: - ; - if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) { - goto __6 - } - wd = d - ws = s -__7: - if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint64)(unsafe.Pointer(ws))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(ws)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0)) { - goto __9 - } - *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws)) - goto __8 -__8: - n = n - size_t(unsafe.Sizeof(size_t(0))) - ws += 8 - wd += 8 - goto __7 - goto __9 -__9: - ; - d = wd - s = ws -__6: - ; -__2: - ; -__10: - if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) { - goto __12 - } - goto __11 -__11: - n-- - s++ - d++ - goto __10 - goto __12 -__12: - ; - *(*uint8)(unsafe.Pointer(d)) = uint8(0) -finish: - return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s) -} - -func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */ - if __ccgo_strace { - trc("tls=%v _l=%v _r=%v n=%v, (%v:)", tls, _l, _r, n, origin(2)) - } - var l uintptr = _l - var r uintptr = _r - if !(int32(PostDecUint64(&n, 1)) != 0) { - return 0 - } -__1: - if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) { - goto __3 - } - goto __2 -__2: - l++ - r++ - n-- - goto __1 - goto __3 -__3: - ; - return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))) -} - -func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */ - if __ccgo_strace { - trc("tls=%v l=%v r=%v n=%v loc=%v, (%v:)", tls, l, r, n, loc, origin(2)) - } - return Xstrncasecmp(tls, l, r, n) -} - -func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */ - if __ccgo_strace { - trc("tls=%v d=%v s=%v n=%v, (%v:)", tls, d, s, n, origin(2)) - } - var a uintptr = d - d += uintptr(Xstrlen(tls, d)) - for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 { - n-- - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) - } - *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0) - return a -} - -func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ - if __ccgo_strace { - trc("tls=%v s=%v n=%v, (%v:)", tls, s, n, origin(2)) - } - var p uintptr = Xmemchr(tls, s, 0, n) - if p != 0 { - return uint64((int64(p) - int64(s)) / 1) - } - return n -} - -func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ - if __ccgo_strace { - trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2)) - } - bp := tls.Alloc(32) - defer tls.Free(32) - - var a uintptr = s - *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)} - - if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) { - return uint64(0) - } - if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) { - for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ { - } - return size_t((int64(s) - int64(a)) / 1) - } - - for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint64(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8, size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; c++ { - } - for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8))&(size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; s++ { - } - return size_t((int64(s) - int64(a)) / 1) -} - -func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */ - if __ccgo_strace { - trc("tls=%v s=%v sep=%v, (%v:)", tls, s, sep, origin(2)) - } - if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) { - return uintptr(0) - } - s += uintptr(Xstrspn(tls, s, sep)) - if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) { - return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0)) - } - _sp = s + uintptr(Xstrcspn(tls, s, sep)) - if *(*uint8)(unsafe.Pointer(_sp)) != 0 { - *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0) - } else { - _sp = uintptr(0) - } - return s -} - -var _sp uintptr /* strtok.c:5:14: */ - -func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return *(*int32)(unsafe.Pointer(a + 6*4)) -} - -func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 6*4)) - return 0 -} - -// -// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_guardsize; -// return 0; -// } -// -// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit) -// { -// *inherit = a->_a_sched; -// return 0; -// } -// -// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param) -// { -// param->sched_priority = a->_a_prio; -// return 0; -// } -// -// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy) -// { -// *policy = a->_a_policy; -// return 0; -// } -// -// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope) -// { -// *scope = PTHREAD_SCOPE_SYSTEM; -// return 0; -// } -// -// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size) -// { -// if (!a->_a_stackaddr) -// return EINVAL; -// *size = a->_a_stacksize; -// *addr = (void *)(a->_a_stackaddr - *size); -// return 0; -// } -// -// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size) -// { -// *size = a->_a_stacksize; -// return 0; -// } -// -// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared) -// { -// *pshared = !!a->__attr; -// return 0; -// } -// -// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk) -// { -// *clk = a->__attr & 0x7fffffff; -// return 0; -// } -// -// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr>>31; -// return 0; -// } -// -// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol) -// { -// *protocol = PTHREAD_PRIO_NONE; -// return 0; -// } -// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr / 128U % 2; -// return 0; -// } -// -// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust) -// { -// *robust = a->__attr / 4U % 2; -// return 0; -// } - -func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3)) -} - -// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type) -// { -// *type = a->__attr & 3; -// return 0; -// } -// -// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared) -// { -// *pshared = a->__attr[0]; -// return 0; -// } - -func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v state=%v, (%v:)", tls, a, state, origin(2)) - } - if uint32(state) > 1 { - return 22 - } - *(*int32)(unsafe.Pointer(a + 6*4)) = state - return 0 -} - -func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */ - if __ccgo_strace { - trc("tls=%v m=%v, (%v:)", tls, m, origin(2)) - } - return *(*int32)(unsafe.Pointer(m)) & 15 -} - -// int __pthread_mutex_lock(pthread_mutex_t *m) -// { -// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL -// && !a_cas(&m->_m_lock, 0, EBUSY)) -// return 0; -// -// return __pthread_mutex_timedlock(m, 0); -// } -// -// weak_alias(__pthread_mutex_lock, pthread_mutex_lock); - -func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - return 0 -} - -func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v, (%v:)", tls, a, origin(2)) - } - *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{} - return 0 -} - -func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */ - if __ccgo_strace { - trc("tls=%v a=%v type1=%v, (%v:)", tls, a, type1, origin(2)) - } - if uint32(type1) > uint32(2) { - return 22 - } - (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1) - return 0 -} - -func init() { - *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45: -} - -var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data diff --git a/vendor/modernc.org/libc/musl_windows_386.go b/vendor/modernc.org/libc/musl_windows_386.go index c14b18c..2a0eeed 100644 --- a/vendor/modernc.org/libc/musl_windows_386.go +++ b/vendor/modernc.org/libc/musl_windows_386.go @@ -912,19 +912,10 @@ type mode_t = uint32 /* alltypes.h:175:18 */ type syscall_arg_t = int32 /* syscall.h:22:14 */ -func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:2:19: */ - panic(`arch/i386/atomic_arch.h:4:2: assembler statements not supported`) - return t -} - func a_and(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:29:20: */ panic(`arch/i386/atomic_arch.h:31:2: assembler statements not supported`) } -func a_or(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:37:20: */ - panic(`arch/i386/atomic_arch.h:39:2: assembler statements not supported`) -} - func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:87:19: */ var r int32 panic(`arch/i386/atomic_arch.h:90:2: assembler statements not supported`) @@ -942,22 +933,6 @@ func a_clz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:104:19: */ return int32(x) } -func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ - bp := tls.Alloc(8) - defer tls.Free(8) - - *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) { - *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v - return r - }() - if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { - a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) - } - if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { - a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) - } -} - type a_cas_p_undefined_but_pointer_not_32bit = [1]int8 /* atomic.h:229:14 */ type __timer = struct { diff --git a/vendor/modernc.org/libc/printf.go b/vendor/modernc.org/libc/printf.go index 2821f8e..4abdfcd 100644 --- a/vendor/modernc.org/libc/printf.go +++ b/vendor/modernc.org/libc/printf.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/pthread.go b/vendor/modernc.org/libc/pthread.go index 8025032..3d8bc0b 100644 --- a/vendor/modernc.org/libc/pthread.go +++ b/vendor/modernc.org/libc/pthread.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" @@ -421,6 +421,8 @@ func (m *mutex) lock(id int32) int32 { // shall return zero; otherwise, an error number shall be returned to indicate // the error. switch m.typ { + default: + fallthrough case pthread.PTHREAD_MUTEX_NORMAL: // If the mutex type is PTHREAD_MUTEX_NORMAL, deadlock detection shall not be // provided. Attempting to relock the mutex causes deadlock. If a thread @@ -450,8 +452,6 @@ func (m *mutex) lock(id int32) int32 { // intentional empty section - wake up other waiters m.wait.Unlock() } - default: - panic(todo("", m.typ)) } } @@ -461,6 +461,8 @@ func (m *mutex) tryLock(id int32) int32 { } switch m.typ { + default: + fallthrough case pthread.PTHREAD_MUTEX_NORMAL: return errno.EBUSY case pthread.PTHREAD_MUTEX_RECURSIVE: @@ -480,8 +482,6 @@ func (m *mutex) tryLock(id int32) int32 { m.Unlock() return errno.EBUSY - default: - panic(todo("", m.typ)) } } @@ -494,6 +494,8 @@ func (m *mutex) unlock() int32 { // shall return zero; otherwise, an error number shall be returned to indicate // the error. switch m.typ { + default: + fallthrough case pthread.PTHREAD_MUTEX_NORMAL: // If the mutex type is PTHREAD_MUTEX_NORMAL, deadlock detection shall not be // provided. Attempting to relock the mutex causes deadlock. If a thread @@ -511,8 +513,6 @@ func (m *mutex) unlock() int32 { } m.Unlock() return 0 - default: - panic(todo("", m.typ)) } } diff --git a/vendor/modernc.org/libc/pthread_all.go b/vendor/modernc.org/libc/pthread_all.go index 16d0447..b5f0dfd 100644 --- a/vendor/modernc.org/libc/pthread_all.go +++ b/vendor/modernc.org/libc/pthread_all.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !freebsd && !openbsd && !(linux && (amd64 || arm64 || loong64)) +//go:build !freebsd && !openbsd && !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/pthread_musl.go b/vendor/modernc.org/libc/pthread_musl.go index ff62eed..01fa300 100644 --- a/vendor/modernc.org/libc/pthread_musl.go +++ b/vendor/modernc.org/libc/pthread_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" @@ -22,14 +22,14 @@ type pthreadCleanupItem struct { routine, arg uintptr } -// C version is 40 bytes. -type pthreadMutex struct { - sync.Mutex // 0 8 - count int32 // 8 4 - mType uint32 // 12 4 - outer sync.Mutex // 16 8 - owner int32 // 20 4 - // 24 +// C version is 40 bytes (64b) and 24 bytes (32b). +type pthreadMutex struct { // 64b 32b + sync.Mutex // 0 8 0 8 + count int32 // 8 4 8 4 + mType uint32 // 12 4 12 4 + outer sync.Mutex // 16 8 16 8 + owner int32 // 24 4 24 4 + // 28 28 } type pthreadConds struct { @@ -374,7 +374,7 @@ func Xpthread_cond_timedwait(tls *TLS, c, m, ts uintptr) (r int32) { if ts != 0 { deadlineSecs := (*Ttimespec)(unsafe.Pointer(ts)).Ftv_sec deadlineNsecs := (*Ttimespec)(unsafe.Pointer(ts)).Ftv_nsec - deadline := time.Unix(deadlineSecs, deadlineNsecs) + deadline := time.Unix(deadlineSecs, int64(deadlineNsecs)) d := deadline.Sub(time.Now()) if d <= 0 { return ETIMEDOUT diff --git a/vendor/modernc.org/libc/rtl.go b/vendor/modernc.org/libc/rtl.go index 2a1787c..1528acc 100644 --- a/vendor/modernc.org/libc/rtl.go +++ b/vendor/modernc.org/libc/rtl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/scanf.go b/vendor/modernc.org/libc/scanf.go index ebc3ada..532ea83 100644 --- a/vendor/modernc.org/libc/scanf.go +++ b/vendor/modernc.org/libc/scanf.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/sync.go b/vendor/modernc.org/libc/sync.go index 05fe4d4..ca78d2f 100644 --- a/vendor/modernc.org/libc/sync.go +++ b/vendor/modernc.org/libc/sync.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(linux && (amd64 || arm64 || loong64)) +//go:build !(linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm)) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/libc/syscall_musl.go b/vendor/modernc.org/libc/syscall_musl.go index 0838da8..3dff436 100644 --- a/vendor/modernc.org/libc/syscall_musl.go +++ b/vendor/modernc.org/libc/syscall_musl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && (amd64 || arm64 || loong64) +//go:build linux && (amd64 || arm64 || loong64 || ppc64le || s390x || riscv64 || 386 || arm) package libc // import "modernc.org/libc" diff --git a/vendor/modernc.org/sqlite/AUTHORS b/vendor/modernc.org/sqlite/AUTHORS index 8ded64c..61af343 100644 --- a/vendor/modernc.org/sqlite/AUTHORS +++ b/vendor/modernc.org/sqlite/AUTHORS @@ -26,4 +26,5 @@ Morgan Bazalgette Ross Light Saed SayedAhmed Steffen Butzer +Toni Spets W. Michael Petullo diff --git a/vendor/modernc.org/sqlite/CONTRIBUTORS b/vendor/modernc.org/sqlite/CONTRIBUTORS index c8b9fea..853cbb5 100644 --- a/vendor/modernc.org/sqlite/CONTRIBUTORS +++ b/vendor/modernc.org/sqlite/CONTRIBUTORS @@ -34,5 +34,6 @@ Ross Light Saed SayedAhmed Sean McGivern Steffen Butzer +Toni Spets W. Michael Petullo Yaacov Akiba Slama diff --git a/vendor/modernc.org/sqlite/fcntl.go b/vendor/modernc.org/sqlite/fcntl.go new file mode 100644 index 0000000..a16e7a1 --- /dev/null +++ b/vendor/modernc.org/sqlite/fcntl.go @@ -0,0 +1,47 @@ +// Copyright 2024 The Sqlite 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 sqlite // import "modernc.org/sqlite" + +import ( + "runtime" + "unsafe" + + "modernc.org/libc" + sqlite3 "modernc.org/sqlite/lib" +) + +// Access to sqlite3_file_control +type FileControl interface { + // Set or query SQLITE_FCNTL_PERSIST_WAL, returns set mode or query result + FileControlPersistWAL(dbName string, mode int) (int, error) +} + +var _ FileControl = (*conn)(nil) + +func (c *conn) FileControlPersistWAL(dbName string, mode int) (int, error) { + i32 := int32(mode) + pi32 := &i32 + + var p runtime.Pinner + p.Pin(pi32) + defer p.Unpin() + + err := c.fileControl(dbName, sqlite3.SQLITE_FCNTL_PERSIST_WAL, (uintptr)(unsafe.Pointer(pi32))) + return int(i32), err +} + +func (c *conn) fileControl(dbName string, op int, pArg uintptr) error { + zDbName, err := libc.CString(dbName) + if err != nil { + return err + } + defer c.free(zDbName) + + if rc := sqlite3.Xsqlite3_file_control(c.tls, c.db, zDbName, int32(op), pArg); rc != sqlite3.SQLITE_OK { + return c.errstr(rc) + } + + return nil +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 61d1780..481159d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2,6 +2,15 @@ ## explicit; go 1.15 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest +# github.com/KyleBanks/depth v1.2.1 +## explicit +github.com/KyleBanks/depth +# github.com/PuerkitoBio/purell v1.1.1 +## explicit +github.com/PuerkitoBio/purell +# github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 +## explicit +github.com/PuerkitoBio/urlesc # github.com/archdx/zerolog-sentry v1.8.4 ## explicit; go 1.20 github.com/archdx/zerolog-sentry @@ -23,10 +32,38 @@ github.com/emersion/go-sasl # github.com/emersion/go-smtp v0.21.3 ## explicit; go 1.13 github.com/emersion/go-smtp +# github.com/etkecc/go-env v1.2.1 +## explicit; go 1.18 +github.com/etkecc/go-env +github.com/etkecc/go-env/dotenv +# github.com/etkecc/go-fswatcher v1.0.1 +## explicit; go 1.20 +github.com/etkecc/go-fswatcher +# github.com/etkecc/go-healthchecks/v2 v2.2.1 +## explicit; go 1.18 +github.com/etkecc/go-healthchecks/v2 +# github.com/etkecc/go-linkpearl v0.0.0-20240820090551-8c5298047259 +## explicit; go 1.22 +github.com/etkecc/go-linkpearl +# github.com/etkecc/go-mxidwc v1.0.1 +## explicit; go 1.19 +github.com/etkecc/go-mxidwc +# github.com/etkecc/go-psd v0.0.0-20240820090455-a55658424f56 +## explicit; go 1.21.0 +github.com/etkecc/go-psd +# github.com/etkecc/go-secgen v1.2.1 +## explicit; go 1.19 +github.com/etkecc/go-secgen +# github.com/etkecc/go-trysmtp v1.1.4 +## explicit; go 1.17 +github.com/etkecc/go-trysmtp +# github.com/etkecc/go-validator/v2 v2.2.2 +## explicit; go 1.18 +github.com/etkecc/go-validator/v2 # github.com/fsnotify/fsnotify v1.7.0 ## explicit; go 1.17 github.com/fsnotify/fsnotify -# github.com/gabriel-vasile/mimetype v1.4.4 +# github.com/gabriel-vasile/mimetype v1.4.5 ## explicit; go 1.20 github.com/gabriel-vasile/mimetype github.com/gabriel-vasile/mimetype/internal/charset @@ -40,6 +77,18 @@ github.com/getsentry/sentry-go/internal/otel/baggage github.com/getsentry/sentry-go/internal/otel/baggage/internal/baggage github.com/getsentry/sentry-go/internal/ratelimit github.com/getsentry/sentry-go/internal/traceparser +# github.com/go-openapi/jsonpointer v0.19.5 +## explicit; go 1.13 +github.com/go-openapi/jsonpointer +# github.com/go-openapi/jsonreference v0.19.6 +## explicit; go 1.13 +github.com/go-openapi/jsonreference +# github.com/go-openapi/spec v0.20.4 +## explicit; go 1.13 +github.com/go-openapi/spec +# github.com/go-openapi/swag v0.19.15 +## explicit; go 1.11 +github.com/go-openapi/swag # github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f ## explicit github.com/gogs/chardet @@ -61,6 +110,9 @@ github.com/jhillyerd/enmime/internal/coding github.com/jhillyerd/enmime/internal/stringutil github.com/jhillyerd/enmime/internal/textproto github.com/jhillyerd/enmime/mediatype +# github.com/josharian/intern v1.0.0 +## explicit; go 1.5 +github.com/josharian/intern # github.com/kvannotten/mailstrip v0.0.0-20200711213611-0002f5c0467e ## explicit; go 1.14 github.com/kvannotten/mailstrip @@ -69,6 +121,11 @@ github.com/kvannotten/mailstrip github.com/lib/pq github.com/lib/pq/oid github.com/lib/pq/scram +# github.com/mailru/easyjson v0.7.7 +## explicit; go 1.12 +github.com/mailru/easyjson/buffer +github.com/mailru/easyjson/jlexer +github.com/mailru/easyjson/jwriter # github.com/mattn/go-colorable v0.1.13 ## explicit; go 1.15 github.com/mattn/go-colorable @@ -93,6 +150,9 @@ github.com/ncruces/go-strftime # github.com/olekukonko/tablewriter v0.0.5 ## explicit; go 1.12 github.com/olekukonko/tablewriter +# github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 +## explicit; go 1.17 +github.com/petermattis/goid # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors @@ -114,7 +174,10 @@ github.com/rs/zerolog/log # github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf ## explicit github.com/ssor/bom -# github.com/tidwall/gjson v1.17.1 +# github.com/swaggo/swag v1.16.3 +## explicit; go 1.18 +github.com/swaggo/swag +# github.com/tidwall/gjson v1.17.3 ## explicit; go 1.12 github.com/tidwall/gjson # github.com/tidwall/match v1.1.1 @@ -137,47 +200,21 @@ github.com/yuin/goldmark/renderer github.com/yuin/goldmark/renderer/html github.com/yuin/goldmark/text github.com/yuin/goldmark/util -# gitlab.com/etke.cc/go/env v1.2.0 -## explicit; go 1.18 -gitlab.com/etke.cc/go/env -gitlab.com/etke.cc/go/env/dotenv -# gitlab.com/etke.cc/go/fswatcher v1.0.0 -## explicit; go 1.20 -gitlab.com/etke.cc/go/fswatcher -# gitlab.com/etke.cc/go/healthchecks/v2 v2.2.0 -## explicit; go 1.18 -gitlab.com/etke.cc/go/healthchecks/v2 -# gitlab.com/etke.cc/go/mxidwc v1.0.0 -## explicit; go 1.19 -gitlab.com/etke.cc/go/mxidwc -# gitlab.com/etke.cc/go/psd v1.1.2 -## explicit; go 1.21.0 -gitlab.com/etke.cc/go/psd -# gitlab.com/etke.cc/go/secgen v1.2.0 -## explicit; go 1.19 -gitlab.com/etke.cc/go/secgen -# gitlab.com/etke.cc/go/trysmtp v1.1.3 -## explicit; go 1.17 -gitlab.com/etke.cc/go/trysmtp -# gitlab.com/etke.cc/go/validator/v2 v2.2.0 -## explicit; go 1.18 -gitlab.com/etke.cc/go/validator/v2 -# gitlab.com/etke.cc/linkpearl v0.0.0-20240716084747-f2a547f02d54 -## explicit; go 1.21 -gitlab.com/etke.cc/linkpearl -# go.mau.fi/util v0.6.0 -## explicit; go 1.21 +# go.mau.fi/util v0.7.0 +## explicit; go 1.22 go.mau.fi/util/base58 +go.mau.fi/util/confusable go.mau.fi/util/dbutil go.mau.fi/util/exerrors go.mau.fi/util/exgjson +go.mau.fi/util/exsync go.mau.fi/util/exzerolog go.mau.fi/util/jsonbytes go.mau.fi/util/jsontime go.mau.fi/util/ptr go.mau.fi/util/random go.mau.fi/util/retryafter -# golang.org/x/crypto v0.25.0 +# golang.org/x/crypto v0.26.0 ## explicit; go 1.20 golang.org/x/crypto/argon2 golang.org/x/crypto/blake2b @@ -191,24 +228,25 @@ golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/pbkdf2 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 +# golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa ## explicit; go 1.20 golang.org/x/exp/constraints golang.org/x/exp/maps golang.org/x/exp/slices -# golang.org/x/net v0.27.0 +# golang.org/x/net v0.28.0 ## explicit; go 1.18 golang.org/x/net/context golang.org/x/net/html golang.org/x/net/html/atom +golang.org/x/net/idna golang.org/x/net/publicsuffix -# golang.org/x/sys v0.22.0 +# golang.org/x/sys v0.24.0 ## explicit; go 1.18 golang.org/x/sys/cpu golang.org/x/sys/execabs golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/text v0.16.0 +# golang.org/x/text v0.17.0 ## explicit; go 1.18 golang.org/x/text/cases golang.org/x/text/encoding @@ -227,10 +265,23 @@ golang.org/x/text/internal/tag golang.org/x/text/internal/utf8internal golang.org/x/text/language golang.org/x/text/runes +golang.org/x/text/secure/bidirule golang.org/x/text/transform +golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# maunium.net/go/mautrix v0.19.0 -## explicit; go 1.21 +golang.org/x/text/width +# golang.org/x/tools v0.24.0 +## explicit; go 1.19 +golang.org/x/tools/go/ast/astutil +golang.org/x/tools/go/buildutil +golang.org/x/tools/go/internal/cgo +golang.org/x/tools/go/loader +golang.org/x/tools/internal/versions +# gopkg.in/yaml.v2 v2.4.0 +## explicit; go 1.15 +gopkg.in/yaml.v2 +# maunium.net/go/mautrix v0.20.0 +## explicit; go 1.22 maunium.net/go/mautrix maunium.net/go/mautrix/crypto maunium.net/go/mautrix/crypto/aescbc @@ -262,10 +313,10 @@ maunium.net/go/mautrix/id maunium.net/go/mautrix/pushrules maunium.net/go/mautrix/pushrules/glob maunium.net/go/mautrix/sqlstatestore -# modernc.org/gc/v3 v3.0.0-20240722195230-4a140ff9c08e +# modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a ## explicit; go 1.20 modernc.org/gc/v3 -# modernc.org/libc v1.55.4 +# modernc.org/libc v1.59.9 ## explicit; go 1.20 modernc.org/libc modernc.org/libc/errno @@ -299,7 +350,7 @@ modernc.org/mathutil # modernc.org/memory v1.8.0 ## explicit; go 1.18 modernc.org/memory -# modernc.org/sqlite v1.31.1 +# modernc.org/sqlite v1.32.0 ## explicit; go 1.20 modernc.org/sqlite modernc.org/sqlite/lib